   (” $” ” {"files":{"ABOUT":{"files":{"LICENSE.electron.txt":{"size":1096,"offset":"0","integrity":{"algorithm":"SHA256","hash":"5154e165bd6c2cc0cfbcd8916498c7abab0497923bafcd5cb07673fe8480087d","blockSize":4194304,"blocks":["5154e165bd6c2cc0cfbcd8916498c7abab0497923bafcd5cb07673fe8480087d"]}},"state.txt":{"size":1683,"offset":"1096","integrity":{"algorithm":"SHA256","hash":"46ce4be6fb24b0cc38604e96be0a13374e81e466440bc5015c472c8c26a0582b","blockSize":4194304,"blocks":["46ce4be6fb24b0cc38604e96be0a13374e81e466440bc5015c472c8c26a0582b"]}}}},"dist":{"files":{"electron":{"files":{"287.js":{"size":3204,"offset":"2779","integrity":{"algorithm":"SHA256","hash":"2a42e3f74ce89566c46a6287426d755814dca4b517d889b6906dbc32290e7a6e","blockSize":4194304,"blocks":["2a42e3f74ce89566c46a6287426d755814dca4b517d889b6906dbc32290e7a6e"]}},"295.js":{"size":5643,"offset":"5983","integrity":{"algorithm":"SHA256","hash":"9ed70dbd1e9d17cd54cf5ed41f1eb346d1b686718491ed3f09fa6cdd5c56f2fe","blockSize":4194304,"blocks":["9ed70dbd1e9d17cd54cf5ed41f1eb346d1b686718491ed3f09fa6cdd5c56f2fe"]}},"585.js":{"size":3523,"offset":"11626","integrity":{"algorithm":"SHA256","hash":"89caa11414467fda224887f7da3a8da617a972b49e1e86ae97c50f4c83e03b53","blockSize":4194304,"blocks":["89caa11414467fda224887f7da3a8da617a972b49e1e86ae97c50f4c83e03b53"]}},"editor.worker.js":{"size":130080,"offset":"15149","integrity":{"algorithm":"SHA256","hash":"3c1a6c5f0fc9bb5eb86a1400814773194119d01678ea0d0cdc52f1301b02bb6b","blockSize":4194304,"blocks":["3c1a6c5f0fc9bb5eb86a1400814773194119d01678ea0d0cdc52f1301b02bb6b"]}},"fonts":{"files":{"codicon..ttf":{"size":68156,"offset":"145229","integrity":{"algorithm":"SHA256","hash":"ff6b888d65cfd8077d49c6c704c1bfc8f2ce1ed71db9c583c63e0a49f046c79c","blockSize":4194304,"blocks":["ff6b888d65cfd8077d49c6c704c1bfc8f2ce1ed71db9c583c63e0a49f046c79c"]}},"MaterialIcons-Regular..woff2":{"size":128616,"offset":"213385","integrity":{"algorithm":"SHA256","hash":"4a4dbc62fa335e411b94a532be091c58c0c0c4fa731339f11722577d3cf6443b","blockSize":4194304,"blocks":["4a4dbc62fa335e411b94a532be091c58c0c0c4fa731339f11722577d3cf6443b"]}},"TwemojiMozilla..ttf":{"size":1437964,"offset":"342001","integrity":{"algorithm":"SHA256","hash":"e52ebdb734105d3d634936b5ee436b2b91bed9c0200f0e9c84c7d663224610c7","blockSize":4194304,"blocks":["e52ebdb734105d3d634936b5ee436b2b91bed9c0200f0e9c84c7d663224610c7"]}}}},"index.html":{"size":313,"offset":"1779965","integrity":{"algorithm":"SHA256","hash":"8d54ac34a92b9a0f5f75256a661a2022f80e9dc85e65c629880f5103210bf496","blockSize":4194304,"blocks":["8d54ac34a92b9a0f5f75256a661a2022f80e9dc85e65c629880f5103210bf496"]}},"main.js":{"size":31447,"offset":"1780278","integrity":{"algorithm":"SHA256","hash":"0f30ba93d4c3ec9b0fc5bf49a854db52031d4202717d3e3db0df4afe8b3b5df2","blockSize":4194304,"blocks":["0f30ba93d4c3ec9b0fc5bf49a854db52031d4202717d3e3db0df4afe8b3b5df2"]}},"renderer.js":{"size":3414287,"offset":"1811725","integrity":{"algorithm":"SHA256","hash":"981701d8904ddeaac49441250220ebf691e4872f6f97e53b10e79a568a426296","blockSize":4194304,"blocks":["981701d8904ddeaac49441250220ebf691e4872f6f97e53b10e79a568a426296"]}},"renderer.js.LICENSE.txt":{"size":276,"offset":"5226012","integrity":{"algorithm":"SHA256","hash":"4a288f77418a783d9646cd61906dc7ae140914bf60221e6ad4688edd81796ff8","blockSize":4194304,"blocks":["4a288f77418a783d9646cd61906dc7ae140914bf60221e6ad4688edd81796ff8"]}},"static":{"files":{"icon.ico":{"size":15086,"offset":"5226288","integrity":{"algorithm":"SHA256","hash":"bd696c38d91bf4e987e8b64380e5e1b9a171366ea4f6f85e95ab64d3804a8733","blockSize":4194304,"blocks":["bd696c38d91bf4e987e8b64380e5e1b9a171366ea4f6f85e95ab64d3804a8733"]}},"imgs":{"files":{"2077.png":{"size":22972,"offset":"5241374","integrity":{"algorithm":"SHA256","hash":"96e78747e1f36c2b93c826edd2ea510734e84f65a86c6c31fbc3f632063d584b","blockSize":4194304,"blocks":["96e78747e1f36c2b93c826edd2ea510734e84f65a86c6c31fbc3f632063d584b"]}},"icon_512.png":{"size":57938,"offset":"5264346","integrity":{"algorithm":"SHA256","hash":"6ac969baa665cbaafb52b67d5d9236e42a16bebfdcc204d9225dc210035e1232","blockSize":4194304,"blocks":["6ac969baa665cbaafb52b67d5d9236e42a16bebfdcc204d9225dc210035e1232"]}},"logo_64_eyes.png":{"size":4078,"offset":"5322284","integrity":{"algorithm":"SHA256","hash":"23b5eb30e0ad71f7000270bb5537cf8a6d7fe80a15fa6f4f065db818b6dc9b79","blockSize":4194304,"blocks":["23b5eb30e0ad71f7000270bb5537cf8a6d7fe80a15fa6f4f065db818b6dc9b79"]}},"logo_64.png":{"size":1514,"offset":"5326362","integrity":{"algorithm":"SHA256","hash":"fbd447cf53d2c17950b7aab19ea531ff1822ef1041a89796d73ea5a6a6a0f108","blockSize":4194304,"blocks":["fbd447cf53d2c17950b7aab19ea531ff1822ef1041a89796d73ea5a6a6a0f108"]}},"logo_reverse_32.png":{"size":1140,"offset":"5327876","integrity":{"algorithm":"SHA256","hash":"52b3bac3047b4f792c9fd99f56477d49620deb7e3f61ae7a10cfc95c99b06179","blockSize":4194304,"blocks":["52b3bac3047b4f792c9fd99f56477d49620deb7e3f61ae7a10cfc95c99b06179"]}},"logo_reverse.png":{"size":9957,"offset":"5329016","integrity":{"algorithm":"SHA256","hash":"bcdbd390c005951c6e4be1fd8c51c59b786e531174375081bdae34ab281b4c72","blockSize":4194304,"blocks":["bcdbd390c005951c6e4be1fd8c51c59b786e531174375081bdae34ab281b4c72"]}},"logo.png":{"size":10644,"offset":"5338973","integrity":{"algorithm":"SHA256","hash":"1a03531f433b5cc3abb6cb70c31feea5d89eb7dbbece96b6f9ad9eb8331cdfd1","blockSize":4194304,"blocks":["1a03531f433b5cc3abb6cb70c31feea5d89eb7dbbece96b6f9ad9eb8331cdfd1"]}},"logo2.png":{"size":30024,"offset":"5349617","integrity":{"algorithm":"SHA256","hash":"c6bcf4e2e6b270b3445f6fd60ec7eacd7a4b55701995b1212a6ab95522ac0897","blockSize":4194304,"blocks":["c6bcf4e2e6b270b3445f6fd60ec7eacd7a4b55701995b1212a6ab95522ac0897"]}},"moon_cake.png":{"size":2798928,"offset":"5379641","integrity":{"algorithm":"SHA256","hash":"9d0127e3b174afa567e1e1a68238fa734fadc948f606393b4478bc98f162b94e","blockSize":4194304,"blocks":["9d0127e3b174afa567e1e1a68238fa734fadc948f606393b4478bc98f162b94e"]}},"national_day.png":{"size":480884,"offset":"8178569","integrity":{"algorithm":"SHA256","hash":"87ba2a1b9a93c7bb124306f6446d410cc094afa2cfda1f82ca62dc6ca8e7b113","blockSize":4194304,"blocks":["87ba2a1b9a93c7bb124306f6446d410cc094afa2cfda1f82ca62dc6ca8e7b113"]}},"tray-icon.png":{"size":2132,"offset":"8659453","integrity":{"algorithm":"SHA256","hash":"f4e7433fa78f07f500857260c8dcc8a3021d3ca8851a72b3c3ae201abbe1a0b0","blockSize":4194304,"blocks":["f4e7433fa78f07f500857260c8dcc8a3021d3ca8851a72b3c3ae201abbe1a0b0"]}},"tray-proxy-default.png":{"size":2006,"offset":"8661585","integrity":{"algorithm":"SHA256","hash":"3d356ea3f1a3ab39bd2f852a9cfbb282503fe53ee70fffc728aab11decfea126","blockSize":4194304,"blocks":["3d356ea3f1a3ab39bd2f852a9cfbb282503fe53ee70fffc728aab11decfea126"]}},"tray-proxy-offline.png":{"size":2010,"offset":"8663591","integrity":{"algorithm":"SHA256","hash":"038ec2e8cfa798a66aad26b6ff5a7db9707c7b4b9a12d10c821b717022b44a66","blockSize":4194304,"blocks":["038ec2e8cfa798a66aad26b6ff5a7db9707c7b4b9a12d10c821b717022b44a66"]}},"tray-proxy-online.png":{"size":2013,"offset":"8665601","integrity":{"algorithm":"SHA256","hash":"c166f6b300fb1db8f6e58e7658cbea24ca37ffaf51502215d4e31836a6b1ed84","blockSize":4194304,"blocks":["c166f6b300fb1db8f6e58e7658cbea24ca37ffaf51502215d4e31836a6b1ed84"]}},"tray-status.png":{"size":528,"offset":"8667614","integrity":{"algorithm":"SHA256","hash":"f4a801eeb1977851aacda3c2a50e4a107ee3ebc019a755eca6a648ac07325796","blockSize":4194304,"blocks":["f4a801eeb1977851aacda3c2a50e4a107ee3ebc019a755eca6a648ac07325796"]}},"tray-text.png":{"size":3811,"offset":"8668142","integrity":{"algorithm":"SHA256","hash":"dd4a0dd2acd19ee6ceb70e9b310df89aa947fb3cb3ce7f1c424e243e3b20588e","blockSize":4194304,"blocks":["dd4a0dd2acd19ee6ceb70e9b310df89aa947fb3cb3ce7f1c424e243e3b20588e"]}},"tray-traffic.png":{"size":1474,"offset":"8671953","integrity":{"algorithm":"SHA256","hash":"f55b0caf700ea50c02d9ada3ae2c0d517db7ee3cec9ccc6ad910ba2063775de2","blockSize":4194304,"blocks":["f55b0caf700ea50c02d9ada3ae2c0d517db7ee3cec9ccc6ad910ba2063775de2"]}}}},"tray":{"files":{"win":{"files":{"off_direct.png":{"size":1336,"offset":"8673427","integrity":{"algorithm":"SHA256","hash":"4948e625aa8cd31da2f904a63cc402372476c3ca2fa349f8c7bd27a914986a2e","blockSize":4194304,"blocks":["4948e625aa8cd31da2f904a63cc402372476c3ca2fa349f8c7bd27a914986a2e"]}},"off_global.png":{"size":2511,"offset":"8674763","integrity":{"algorithm":"SHA256","hash":"44c0576c84a80b94de58159686656e6c96443c9c3bfe368d8bd84bbc8f910222","blockSize":4194304,"blocks":["44c0576c84a80b94de58159686656e6c96443c9c3bfe368d8bd84bbc8f910222"]}},"off_rule.png":{"size":1913,"offset":"8677274","integrity":{"algorithm":"SHA256","hash":"4e857f64e9067be621ca5edbaf4199576dc63a1e68c26c943731487062a30b7d","blockSize":4194304,"blocks":["4e857f64e9067be621ca5edbaf4199576dc63a1e68c26c943731487062a30b7d"]}},"off_script.png":{"size":1673,"offset":"8679187","integrity":{"algorithm":"SHA256","hash":"a1253fd558efc4b127f883775ab6aa499f4f92554f4b17130152873d58b1cc10","blockSize":4194304,"blocks":["a1253fd558efc4b127f883775ab6aa499f4f92554f4b17130152873d58b1cc10"]}},"on_direct.png":{"size":1294,"offset":"8680860","integrity":{"algorithm":"SHA256","hash":"1e9bd514504e717e9eeb92754dd77e471a850c16dcf4ade9739896a5347b95c0","blockSize":4194304,"blocks":["1e9bd514504e717e9eeb92754dd77e471a850c16dcf4ade9739896a5347b95c0"]}},"on_global.png":{"size":2521,"offset":"8682154","integrity":{"algorithm":"SHA256","hash":"894231fee53c7c1e546f0875faee5e61e371af08555ba82a82053f96c2363b2e","blockSize":4194304,"blocks":["894231fee53c7c1e546f0875faee5e61e371af08555ba82a82053f96c2363b2e"]}},"on_rule.png":{"size":1843,"offset":"8684675","integrity":{"algorithm":"SHA256","hash":"f8432b340b2074fcb422c64d5455cd0a3cb54c4ab632e96edb96e59cc6f9fd60","blockSize":4194304,"blocks":["f8432b340b2074fcb422c64d5455cd0a3cb54c4ab632e96edb96e59cc6f9fd60"]}},"on_script.png":{"size":1675,"offset":"8686518","integrity":{"algorithm":"SHA256","hash":"f2175f7f8c3ea8e506fbbf44d72123a27f4cc87f5ee17cf904a93912cb77aa8e","blockSize":4194304,"blocks":["f2175f7f8c3ea8e506fbbf44d72123a27f4cc87f5ee17cf904a93912cb77aa8e"]}},"tray_normal.ico":{"size":44468,"offset":"8688193","integrity":{"algorithm":"SHA256","hash":"8a5ce65e6267014c727b3b4e0945d3202bc3d69cd1ebbcd42398d2e3a07faf42","blockSize":4194304,"blocks":["8a5ce65e6267014c727b3b4e0945d3202bc3d69cd1ebbcd42398d2e3a07faf42"]}},"tray_reverse.ico":{"size":46633,"offset":"8732661","integrity":{"algorithm":"SHA256","hash":"e2e2c9cee988a85e93d72beb74a722aab48d629275fba79c9a89d1cceb28a4fd","blockSize":4194304,"blocks":["e2e2c9cee988a85e93d72beb74a722aab48d629275fba79c9a89d1cceb28a4fd"]}}}}}}}}}}}},"node_modules":{"files":{"@babel":{"files":{"runtime":{"files":{"helpers":{"files":{"applyDecoratedDescriptor.js":{"size":908,"offset":"8779294","integrity":{"algorithm":"SHA256","hash":"ae9215fb5d0aeeaf6919c07b4aa30076faa02cef31e810d42d507d0036846d3c","blockSize":4194304,"blocks":["ae9215fb5d0aeeaf6919c07b4aa30076faa02cef31e810d42d507d0036846d3c"]}},"arrayLikeToArray.js":{"size":312,"offset":"8780202","integrity":{"algorithm":"SHA256","hash":"d753748855dcc78b6cb565b7eaa7ba4d19dccf22a797fc3b20315d77c6b7f339","blockSize":4194304,"blocks":["d753748855dcc78b6cb565b7eaa7ba4d19dccf22a797fc3b20315d77c6b7f339"]}},"arrayWithHoles.js":{"size":184,"offset":"8780514","integrity":{"algorithm":"SHA256","hash":"430249ac5055b67aec593cd990238683fa20d0bfe632c2901d83a4ab3e59044e","blockSize":4194304,"blocks":["430249ac5055b67aec593cd990238683fa20d0bfe632c2901d83a4ab3e59044e"]}},"arrayWithoutHoles.js":{"size":266,"offset":"8780698","integrity":{"algorithm":"SHA256","hash":"60b51d971d357fe4f0eab05a2bcbf6f392b51853d4ea93c3a139d276c6c2ca90","blockSize":4194304,"blocks":["60b51d971d357fe4f0eab05a2bcbf6f392b51853d4ea93c3a139d276c6c2ca90"]}},"assertThisInitialized.js":{"size":297,"offset":"8780964","integrity":{"algorithm":"SHA256","hash":"b7a86eedebcc2349f115fac5b0cb85db4d83337e1ed3969ee49866cdfcfe4f90","blockSize":4194304,"blocks":["b7a86eedebcc2349f115fac5b0cb85db4d83337e1ed3969ee49866cdfcfe4f90"]}},"AsyncGenerator.js":{"size":2111,"offset":"8781261","integrity":{"algorithm":"SHA256","hash":"25db141c8ed210f400cb630506813704e3750abd035358e724b4bdecdb99147e","blockSize":4194304,"blocks":["25db141c8ed210f400cb630506813704e3750abd035358e724b4bdecdb99147e"]}},"asyncGeneratorDelegate.js":{"size":1119,"offset":"8783372","integrity":{"algorithm":"SHA256","hash":"1bdc8041bfb2708b679433aa3c289e92c518e144c73ac2e446e1f1d011064d57","blockSize":4194304,"blocks":["1bdc8041bfb2708b679433aa3c289e92c518e144c73ac2e446e1f1d011064d57"]}},"asyncIterator.js":{"size":580,"offset":"8784491","integrity":{"algorithm":"SHA256","hash":"c82e4cf653f954fcd5c86abbc06ba042f41664a0921773382c91d684cc66124d","blockSize":4194304,"blocks":["c82e4cf653f954fcd5c86abbc06ba042f41664a0921773382c91d684cc66124d"]}},"asyncToGenerator.js":{"size":887,"offset":"8785071","integrity":{"algorithm":"SHA256","hash":"7b67849fe4da6796a8766dd57fa1113e23c312519b37a97046af249cb25321a6","blockSize":4194304,"blocks":["7b67849fe4da6796a8766dd57fa1113e23c312519b37a97046af249cb25321a6"]}},"awaitAsyncGenerator.js":{"size":236,"offset":"8785958","integrity":{"algorithm":"SHA256","hash":"b6fd00d1ce2e2a0c95aa832a8f0d69f5571005de618296fe86d4de112f36ac9e","blockSize":4194304,"blocks":["b6fd00d1ce2e2a0c95aa832a8f0d69f5571005de618296fe86d4de112f36ac9e"]}},"AwaitValue.js":{"size":164,"offset":"8786194","integrity":{"algorithm":"SHA256","hash":"096bebc47151f41f2a5ac8f77df5ce7b786d02d801bb50e4114ca8284fb4b86e","blockSize":4194304,"blocks":["096bebc47151f41f2a5ac8f77df5ce7b786d02d801bb50e4114ca8284fb4b86e"]}},"classApplyDescriptorDestructureSet.js":{"size":576,"offset":"8786358","integrity":{"algorithm":"SHA256","hash":"82404ea03f77543d4ab0b527e08e35c0c7d6a3385a2fe2b81d7cd04e5f882772","blockSize":4194304,"blocks":["82404ea03f77543d4ab0b527e08e35c0c7d6a3385a2fe2b81d7cd04e5f882772"]}},"classApplyDescriptorGet.js":{"size":279,"offset":"8786934","integrity":{"algorithm":"SHA256","hash":"ff1da1a0674f257d4133d1dd790cce0ac30535e96248f97c635b47a07e4d3b75","blockSize":4194304,"blocks":["ff1da1a0674f257d4133d1dd790cce0ac30535e96248f97c635b47a07e4d3b75"]}},"classApplyDescriptorSet.js":{"size":409,"offset":"8787213","integrity":{"algorithm":"SHA256","hash":"ef9727da18bae462a4659ce4a3edfa6ace3d889c6a444b07dcafb7f19b459f50","blockSize":4194304,"blocks":["ef9727da18bae462a4659ce4a3edfa6ace3d889c6a444b07dcafb7f19b459f50"]}},"classCallCheck.js":{"size":274,"offset":"8787622","integrity":{"algorithm":"SHA256","hash":"8131f6ae1c9c28c1d0743b90a74c27bde00c3235c11ba1b999b7bcf1d54fe1f0","blockSize":4194304,"blocks":["8131f6ae1c9c28c1d0743b90a74c27bde00c3235c11ba1b999b7bcf1d54fe1f0"]}},"classCheckPrivateStaticAccess.js":{"size":312,"offset":"8787896","integrity":{"algorithm":"SHA256","hash":"1ed9f8f110a9ab32e0b9cc77e27466a3f74e24bec3522a180776f03f9841235c","blockSize":4194304,"blocks":["1ed9f8f110a9ab32e0b9cc77e27466a3f74e24bec3522a180776f03f9841235c"]}},"classCheckPrivateStaticFieldDescriptor.js":{"size":347,"offset":"8788208","integrity":{"algorithm":"SHA256","hash":"7780831e7a0e83896c696195e7081937d0871b719755fd5109a09ce0208f220a","blockSize":4194304,"blocks":["7780831e7a0e83896c696195e7081937d0871b719755fd5109a09ce0208f220a"]}},"classExtractFieldDescriptor.js":{"size":358,"offset":"8788555","integrity":{"algorithm":"SHA256","hash":"adbfc4d4a2c933d4067b45fad3b63182ceca0383701c6a853bacb5d3fbd3f30c","blockSize":4194304,"blocks":["adbfc4d4a2c933d4067b45fad3b63182ceca0383701c6a853bacb5d3fbd3f30c"]}},"classNameTDZError.js":{"size":246,"offset":"8788913","integrity":{"algorithm":"SHA256","hash":"fa7197b989442ed1962bce047d6ad672f15724ca5c7b506659493148dde38e05","blockSize":4194304,"blocks":["fa7197b989442ed1962bce047d6ad672f15724ca5c7b506659493148dde38e05"]}},"classPrivateFieldDestructureSet.js":{"size":515,"offset":"8789159","integrity":{"algorithm":"SHA256","hash":"48a5cef8b32f396d47417da2734736f8d842a78ed219b84a29103c095d2c9be9","blockSize":4194304,"blocks":["48a5cef8b32f396d47417da2734736f8d842a78ed219b84a29103c095d2c9be9"]}},"classPrivateFieldGet.js":{"size":460,"offset":"8789674","integrity":{"algorithm":"SHA256","hash":"43368b276a889cf27a8cc4f484146b472c69fb55a82e9e51a25b72651614d654","blockSize":4194304,"blocks":["43368b276a889cf27a8cc4f484146b472c69fb55a82e9e51a25b72651614d654"]}},"classPrivateFieldLooseBase.js":{"size":345,"offset":"8790134","integrity":{"algorithm":"SHA256","hash":"b904b6fc883bc7558f8560062e2bad82c5b2006b365b542ad8a49f67b1ac94b8","blockSize":4194304,"blocks":["b904b6fc883bc7558f8560062e2bad82c5b2006b365b542ad8a49f67b1ac94b8"]}},"classPrivateFieldLooseKey.js":{"size":215,"offset":"8790479","integrity":{"algorithm":"SHA256","hash":"e2698cad3a72750cc6076a28fd00df4d99fe776325797dc7ce871076de99b087","blockSize":4194304,"blocks":["e2698cad3a72750cc6076a28fd00df4d99fe776325797dc7ce871076de99b087"]}},"classPrivateFieldSet.js":{"size":483,"offset":"8790694","integrity":{"algorithm":"SHA256","hash":"d5e7926a891aaadd43aa86f03d7e04a3193468655bef73898e307a273a2ff22c","blockSize":4194304,"blocks":["d5e7926a891aaadd43aa86f03d7e04a3193468655bef73898e307a273a2ff22c"]}},"classPrivateMethodGet.js":{"size":309,"offset":"8791177","integrity":{"algorithm":"SHA256","hash":"8d25b987b25df175e1e141c83f1c8d1b962d5973bce8029ce900a55bdd4755ff","blockSize":4194304,"blocks":["8d25b987b25df175e1e141c83f1c8d1b962d5973bce8029ce900a55bdd4755ff"]}},"classPrivateMethodSet.js":{"size":220,"offset":"8791486","integrity":{"algorithm":"SHA256","hash":"cac38274ec1eca026a987bfc487e774dbeecabfd8276bb29b39de66302c9d3da","blockSize":4194304,"blocks":["cac38274ec1eca026a987bfc487e774dbeecabfd8276bb29b39de66302c9d3da"]}},"classStaticPrivateFieldDestructureSet.js":{"size":696,"offset":"8791706","integrity":{"algorithm":"SHA256","hash":"d94909fc656df6376a18f6127901f06515b7c224ed3d1e1e66762c454f6f5506","blockSize":4194304,"blocks":["d94909fc656df6376a18f6127901f06515b7c224ed3d1e1e66762c454f6f5506"]}},"classStaticPrivateFieldSpecGet.js":{"size":649,"offset":"8792402","integrity":{"algorithm":"SHA256","hash":"8265629a41a3fbb8ab70f54afc47accef516824442af90b6e3f3ec91dbe75dca","blockSize":4194304,"blocks":["8265629a41a3fbb8ab70f54afc47accef516824442af90b6e3f3ec91dbe75dca"]}},"classStaticPrivateFieldSpecSet.js":{"size":672,"offset":"8793051","integrity":{"algorithm":"SHA256","hash":"bc42254542962663dbc262b85811947923446e13c5157afe910755b74b30777e","blockSize":4194304,"blocks":["bc42254542962663dbc262b85811947923446e13c5157afe910755b74b30777e"]}},"classStaticPrivateMethodGet.js":{"size":365,"offset":"8793723","integrity":{"algorithm":"SHA256","hash":"128d30683c9f30606148ccfa4bdb36ecfb1c1198d5cbd72512de96e7724a756d","blockSize":4194304,"blocks":["128d30683c9f30606148ccfa4bdb36ecfb1c1198d5cbd72512de96e7724a756d"]}},"classStaticPrivateMethodSet.js":{"size":243,"offset":"8794088","integrity":{"algorithm":"SHA256","hash":"edfa3da5d5c31ec0e094fc2ebc04ab6d00b8dd3105cf7da7ae3e95c00379cf0c","blockSize":4194304,"blocks":["edfa3da5d5c31ec0e094fc2ebc04ab6d00b8dd3105cf7da7ae3e95c00379cf0c"]}},"construct.js":{"size":908,"offset":"8794331","integrity":{"algorithm":"SHA256","hash":"05ccbb136e5d43124064662e3bcd0173e0565cc6cdc12eca308f980c4a282dd3","blockSize":4194304,"blocks":["05ccbb136e5d43124064662e3bcd0173e0565cc6cdc12eca308f980c4a282dd3"]}},"createClass.js":{"size":674,"offset":"8795239","integrity":{"algorithm":"SHA256","hash":"ef753236909e8cea2d21931c9b865d7a7b5063aaf429c28c5ed3869e834bf710","blockSize":4194304,"blocks":["ef753236909e8cea2d21931c9b865d7a7b5063aaf429c28c5ed3869e834bf710"]}},"createForOfIteratorHelper.js":{"size":1512,"offset":"8795913","integrity":{"algorithm":"SHA256","hash":"7696341650f5dbf23f2513850ac5000962a5f9901ed6b7dc8fecb41d930d07f6","blockSize":4194304,"blocks":["7696341650f5dbf23f2513850ac5000962a5f9901ed6b7dc8fecb41d930d07f6"]}},"createForOfIteratorHelperLoose.js":{"size":886,"offset":"8797425","integrity":{"algorithm":"SHA256","hash":"8908c6a791e4476727e7c02f360b2b4cda7a6c210da17c86adbd4424f88add8a","blockSize":4194304,"blocks":["8908c6a791e4476727e7c02f360b2b4cda7a6c210da17c86adbd4424f88add8a"]}},"createSuper.js":{"size":789,"offset":"8798311","integrity":{"algorithm":"SHA256","hash":"806cc895151db8c3a49767ce82f91963ab20502d0bba3d3a3277d329b0fd6c97","blockSize":4194304,"blocks":["806cc895151db8c3a49767ce82f91963ab20502d0bba3d3a3277d329b0fd6c97"]}},"decorate.js":{"size":13441,"offset":"8799100","integrity":{"algorithm":"SHA256","hash":"5f7c996e905df8426052773a972885bc2dad62e6c3c1d271a24cdcc8a8ac2b65","blockSize":4194304,"blocks":["5f7c996e905df8426052773a972885bc2dad62e6c3c1d271a24cdcc8a8ac2b65"]}},"defaults.js":{"size":462,"offset":"8812541","integrity":{"algorithm":"SHA256","hash":"4172a27a1c623ae37847d29f6fb68b3b9a582ac100b13def49fa8b33b1407275","blockSize":4194304,"blocks":["4172a27a1c623ae37847d29f6fb68b3b9a582ac100b13def49fa8b33b1407275"]}},"defineEnumerableProperties.js":{"size":759,"offset":"8813003","integrity":{"algorithm":"SHA256","hash":"0c7cf6a574ae6eed7bf3f2f18046986d5a673cd1471e6ca2094ba8fdbbfca9ba","blockSize":4194304,"blocks":["0c7cf6a574ae6eed7bf3f2f18046986d5a673cd1471e6ca2094ba8fdbbfca9ba"]}},"defineProperty.js":{"size":367,"offset":"8813762","integrity":{"algorithm":"SHA256","hash":"26989e9a8f63bf988d4788071e939235b2126ab96970bd9249c8a216011759ed","blockSize":4194304,"blocks":["26989e9a8f63bf988d4788071e939235b2126ab96970bd9249c8a216011759ed"]}},"esm":{"files":{"applyDecoratedDescriptor.js":{"size":800,"offset":"8814129","integrity":{"algorithm":"SHA256","hash":"565dd1a51d9bf3d5a4a4382b5785cc8f017182032ab246bceb95f56a8f6b2cd9","blockSize":4194304,"blocks":["565dd1a51d9bf3d5a4a4382b5785cc8f017182032ab246bceb95f56a8f6b2cd9"]}},"arrayLikeToArray.js":{"size":212,"offset":"8814929","integrity":{"algorithm":"SHA256","hash":"8c13ff63b787d51c0b6e5a499100f387c47aa00ad3a2f0dd56632a0558aacb79","blockSize":4194304,"blocks":["8c13ff63b787d51c0b6e5a499100f387c47aa00ad3a2f0dd56632a0558aacb79"]}},"arrayWithHoles.js":{"size":86,"offset":"8815141","integrity":{"algorithm":"SHA256","hash":"247b59f2b3e21252b890221661ba5f763ca1424257164b22715209e02fe9789f","blockSize":4194304,"blocks":["247b59f2b3e21252b890221661ba5f763ca1424257164b22715209e02fe9789f"]}},"arrayWithoutHoles.js":{"size":161,"offset":"8815227","integrity":{"algorithm":"SHA256","hash":"138c30ef31918b884cd1765f723f0be5878cd00762f850ad926e636a6bfd6dba","blockSize":4194304,"blocks":["138c30ef31918b884cd1765f723f0be5878cd00762f850ad926e636a6bfd6dba"]}},"assertThisInitialized.js":{"size":192,"offset":"8815388","integrity":{"algorithm":"SHA256","hash":"fc5fc7f97f2a61717c7d545ec0317e87866597ee7eb9badc4505dfbeae247ab7","blockSize":4194304,"blocks":["fc5fc7f97f2a61717c7d545ec0317e87866597ee7eb9badc4505dfbeae247ab7"]}},"AsyncGenerator.js":{"size":2010,"offset":"8815580","integrity":{"algorithm":"SHA256","hash":"4bb7a4a02c15c2fa49b15ce3172eb22dc62bddf4aa0e69d674e04b21653e9804","blockSize":4194304,"blocks":["4bb7a4a02c15c2fa49b15ce3172eb22dc62bddf4aa0e69d674e04b21653e9804"]}},"asyncGeneratorDelegate.js":{"size":1013,"offset":"8817590","integrity":{"algorithm":"SHA256","hash":"65569a21c0ac38f185a44c74a77753190f1bee85e631efeb753ed404278fe3e6","blockSize":4194304,"blocks":["65569a21c0ac38f185a44c74a77753190f1bee85e631efeb753ed404278fe3e6"]}},"asyncIterator.js":{"size":483,"offset":"8818603","integrity":{"algorithm":"SHA256","hash":"2e8bd17ffbeef4f78cd5e211589851a2adf54aee07885ea67263152fdf33d6eb","blockSize":4194304,"blocks":["2e8bd17ffbeef4f78cd5e211589851a2adf54aee07885ea67263152fdf33d6eb"]}},"asyncToGenerator.js":{"size":787,"offset":"8819086","integrity":{"algorithm":"SHA256","hash":"e960e394ea8dce2d2f321231cba67f69228770363714f6bce15f1961c9a3f4b7","blockSize":4194304,"blocks":["e960e394ea8dce2d2f321231cba67f69228770363714f6bce15f1961c9a3f4b7"]}},"awaitAsyncGenerator.js":{"size":129,"offset":"8819873","integrity":{"algorithm":"SHA256","hash":"cdcd29cbcea39cb5af5b639cf3f794ae954f570cbc0938a10b8e7b095df1822c","blockSize":4194304,"blocks":["cdcd29cbcea39cb5af5b639cf3f794ae954f570cbc0938a10b8e7b095df1822c"]}},"AwaitValue.js":{"size":70,"offset":"8820002","integrity":{"algorithm":"SHA256","hash":"c0ef8cc505af718775310e66dfb9b67e96d287090767ba6d48ca0955ba06b7a7","blockSize":4194304,"blocks":["c0ef8cc505af718775310e66dfb9b67e96d287090767ba6d48ca0955ba06b7a7"]}},"classApplyDescriptorDestructureSet.js":{"size":458,"offset":"8820072","integrity":{"algorithm":"SHA256","hash":"ecc8779609fb6f1773134829d24401d4513710826d5ed15559204cabbc47a28c","blockSize":4194304,"blocks":["ecc8779609fb6f1773134829d24401d4513710826d5ed15559204cabbc47a28c"]}},"classApplyDescriptorGet.js":{"size":172,"offset":"8820530","integrity":{"algorithm":"SHA256","hash":"e2e7a55c6a3bfd65825f0fb9247c42225ce46d979983033ac595a1cd13b587c8","blockSize":4194304,"blocks":["e2e7a55c6a3bfd65825f0fb9247c42225ce46d979983033ac595a1cd13b587c8"]}},"classApplyDescriptorSet.js":{"size":302,"offset":"8820702","integrity":{"algorithm":"SHA256","hash":"dbf79daa560e691952629dfa187914ca8ed2718ade8a05ca7f590028234c7423","blockSize":4194304,"blocks":["dbf79daa560e691952629dfa187914ca8ed2718ade8a05ca7f590028234c7423"]}},"classCallCheck.js":{"size":176,"offset":"8821004","integrity":{"algorithm":"SHA256","hash":"2f430eeadb699725dbbf2fda43218cf6be49a778c7d870b4b3aaa1fd9b77b65f","blockSize":4194304,"blocks":["2f430eeadb699725dbbf2fda43218cf6be49a778c7d870b4b3aaa1fd9b77b65f"]}},"classCheckPrivateStaticAccess.js":{"size":199,"offset":"8821180","integrity":{"algorithm":"SHA256","hash":"53875f1474f270c6f34f33958550a08be4da085937679938c5077d65212c5dbd","blockSize":4194304,"blocks":["53875f1474f270c6f34f33958550a08be4da085937679938c5077d65212c5dbd"]}},"classCheckPrivateStaticFieldDescriptor.js":{"size":225,"offset":"8821379","integrity":{"algorithm":"SHA256","hash":"8ec716e1ad9342725e36a4b914c3378b118043c415dd82e390a680d8709525be","blockSize":4194304,"blocks":["8ec716e1ad9342725e36a4b914c3378b118043c415dd82e390a680d8709525be"]}},"classExtractFieldDescriptor.js":{"size":247,"offset":"8821604","integrity":{"algorithm":"SHA256","hash":"5f97966102954c0d8fecff4e52bcc272ebde722d6ab0dc3fc91f74551d3555e8","blockSize":4194304,"blocks":["5f97966102954c0d8fecff4e52bcc272ebde722d6ab0dc3fc91f74551d3555e8"]}},"classNameTDZError.js":{"size":145,"offset":"8821851","integrity":{"algorithm":"SHA256","hash":"5e075ea389fa22b0d796f075b6e30fb441c0526afd160599449e5ec4c1e455b6","blockSize":4194304,"blocks":["5e075ea389fa22b0d796f075b6e30fb441c0526afd160599449e5ec4c1e455b6"]}},"classPrivateFieldDestructureSet.js":{"size":392,"offset":"8821996","integrity":{"algorithm":"SHA256","hash":"a34be15edbf4eceafdccb558dfd5c53f2693a67dc149e8230d87f668fa680a88","blockSize":4194304,"blocks":["a34be15edbf4eceafdccb558dfd5c53f2693a67dc149e8230d87f668fa680a88"]}},"classPrivateFieldGet.js":{"size":348,"offset":"8822388","integrity":{"algorithm":"SHA256","hash":"2ce79c298a2fbbb7160a484cd9b5b62f95a891a44e13bb5db268b05e430240cb","blockSize":4194304,"blocks":["2ce79c298a2fbbb7160a484cd9b5b62f95a891a44e13bb5db268b05e430240cb"]}},"classPrivateFieldLooseBase.js":{"size":240,"offset":"8822736","integrity":{"algorithm":"SHA256","hash":"68e3250baa07a531c8bbd1d870a280a9c545f83bc39c96fd3042fa3ebc69abec","blockSize":4194304,"blocks":["68e3250baa07a531c8bbd1d870a280a9c545f83bc39c96fd3042fa3ebc69abec"]}},"classPrivateFieldLooseKey.js":{"size":110,"offset":"8822976","integrity":{"algorithm":"SHA256","hash":"e3ab95adfe252283314416ec0dee8c88caf2ec3a475e468e1cc79811fcbae901","blockSize":4194304,"blocks":["e3ab95adfe252283314416ec0dee8c88caf2ec3a475e468e1cc79811fcbae901"]}},"classPrivateFieldSet.js":{"size":371,"offset":"8823086","integrity":{"algorithm":"SHA256","hash":"3ca4c7a74cfa41091d8eff456835e26c8f5d2593c62e337c7f5e7dc95e3f8881","blockSize":4194304,"blocks":["3ca4c7a74cfa41091d8eff456835e26c8f5d2593c62e337c7f5e7dc95e3f8881"]}},"classPrivateMethodGet.js":{"size":204,"offset":"8823457","integrity":{"algorithm":"SHA256","hash":"7cd5d192485dd4341ff2983d4a6c6ad7fe687c3ebe348e845da5abc06b9102ab","blockSize":4194304,"blocks":["7cd5d192485dd4341ff2983d4a6c6ad7fe687c3ebe348e845da5abc06b9102ab"]}},"classPrivateMethodSet.js":{"size":115,"offset":"8823661","integrity":{"algorithm":"SHA256","hash":"fbf0e9017a2ecb44541437b9da6046553158be2bce4e0b412985f5c630746cd4","blockSize":4194304,"blocks":["fbf0e9017a2ecb44541437b9da6046553158be2bce4e0b412985f5c630746cd4"]}},"classStaticPrivateFieldDestructureSet.js":{"size":563,"offset":"8823776","integrity":{"algorithm":"SHA256","hash":"b8263a53cfc9f89cc14696d391a4bc553fa6c2b7c8814432222ad592a431e151","blockSize":4194304,"blocks":["b8263a53cfc9f89cc14696d391a4bc553fa6c2b7c8814432222ad592a431e151"]}},"classStaticPrivateFieldSpecGet.js":{"size":523,"offset":"8824339","integrity":{"algorithm":"SHA256","hash":"42573af6c6305ad6e8891bdee05be490c1764fb4ea0e7efe9c6675a9a0b4ee9b","blockSize":4194304,"blocks":["42573af6c6305ad6e8891bdee05be490c1764fb4ea0e7efe9c6675a9a0b4ee9b"]}},"classStaticPrivateFieldSpecSet.js":{"size":546,"offset":"8824862","integrity":{"algorithm":"SHA256","hash":"d0b07ac16ed9fbdc85b6b0971abfd65eab781c685fb20eb0a5628c5d20a99603","blockSize":4194304,"blocks":["d0b07ac16ed9fbdc85b6b0971abfd65eab781c685fb20eb0a5628c5d20a99603"]}},"classStaticPrivateMethodGet.js":{"size":250,"offset":"8825408","integrity":{"algorithm":"SHA256","hash":"b0024c3f25732b5d0fb142b07d0759eff5f6b6dbc0f2fc10dffca134f7a6d152","blockSize":4194304,"blocks":["b0024c3f25732b5d0fb142b07d0759eff5f6b6dbc0f2fc10dffca134f7a6d152"]}},"classStaticPrivateMethodSet.js":{"size":132,"offset":"8825658","integrity":{"algorithm":"SHA256","hash":"433cc3c9514e108b59889becfaaa43ee650634456f402ee8e9bc04229055255c","blockSize":4194304,"blocks":["433cc3c9514e108b59889becfaaa43ee650634456f402ee8e9bc04229055255c"]}},"construct.js":{"size":608,"offset":"8825790","integrity":{"algorithm":"SHA256","hash":"b52fb1ae2cb079b00e358e6c5687158887e9f9845a6f237a83859bfc32e77b59","blockSize":4194304,"blocks":["b52fb1ae2cb079b00e358e6c5687158887e9f9845a6f237a83859bfc32e77b59"]}},"createClass.js":{"size":579,"offset":"8826398","integrity":{"algorithm":"SHA256","hash":"72d1388ed040faa7cb208e4227b2c4d352b6f8beb5f3f65c00717c28fe754ffc","blockSize":4194304,"blocks":["72d1388ed040faa7cb208e4227b2c4d352b6f8beb5f3f65c00717c28fe754ffc"]}},"createForOfIteratorHelper.js":{"size":1399,"offset":"8826977","integrity":{"algorithm":"SHA256","hash":"5938cbf89d74666a04881725fbc484b98e958dfdf9da0ddddbd9f084d81b6c7d","blockSize":4194304,"blocks":["5938cbf89d74666a04881725fbc484b98e958dfdf9da0ddddbd9f084d81b6c7d"]}},"createForOfIteratorHelperLoose.js":{"size":768,"offset":"8828376","integrity":{"algorithm":"SHA256","hash":"5044ac960fa6bee1a74bffb1aaf6ddcbf3ec7f957ee1c36542c098bb50c20201","blockSize":4194304,"blocks":["5044ac960fa6bee1a74bffb1aaf6ddcbf3ec7f957ee1c36542c098bb50c20201"]}},"createSuper.js":{"size":682,"offset":"8829144","integrity":{"algorithm":"SHA256","hash":"f6675cb4a6307f81d3744fd5d57e544beac17da1b7eab9f944efa5c37bc2e7fb","blockSize":4194304,"blocks":["f6675cb4a6307f81d3744fd5d57e544beac17da1b7eab9f944efa5c37bc2e7fb"]}},"decorate.js":{"size":13341,"offset":"8829826","integrity":{"algorithm":"SHA256","hash":"12704c684e1c9a8a060f040f9873a6a9a1b7b10cdbf2898b3da3684467e71252","blockSize":4194304,"blocks":["12704c684e1c9a8a060f040f9873a6a9a1b7b10cdbf2898b3da3684467e71252"]}},"defaults.js":{"size":370,"offset":"8843167","integrity":{"algorithm":"SHA256","hash":"6e59f7af169ad0b57b9481d36074cf125c94db0d610d62a8d606aba9bc71ed7f","blockSize":4194304,"blocks":["6e59f7af169ad0b57b9481d36074cf125c94db0d610d62a8d606aba9bc71ed7f"]}},"defineEnumerableProperties.js":{"size":649,"offset":"8843537","integrity":{"algorithm":"SHA256","hash":"badfff04a2212532389d4e3756488390cc442c7b211e99eb319857141a86f1bc","blockSize":4194304,"blocks":["badfff04a2212532389d4e3756488390cc442c7b211e99eb319857141a86f1bc"]}},"defineProperty.js":{"size":269,"offset":"8844186","integrity":{"algorithm":"SHA256","hash":"ef7896d1bcbe9141e9b3c010322fe0b74d743437eb2cdb951930d4a16bf734aa","blockSize":4194304,"blocks":["ef7896d1bcbe9141e9b3c010322fe0b74d743437eb2cdb951930d4a16bf734aa"]}},"extends.js":{"size":397,"offset":"8844455","integrity":{"algorithm":"SHA256","hash":"1fbab4b2ca3ae9fc2d803ebb6e67f5a0d9036285e4c4909f884264bc718e7053","blockSize":4194304,"blocks":["1fbab4b2ca3ae9fc2d803ebb6e67f5a0d9036285e4c4909f884264bc718e7053"]}},"get.js":{"size":556,"offset":"8844852","integrity":{"algorithm":"SHA256","hash":"891a9cdf4557cf965441394be47728fd13132fba26ed0be7b481716764003377","blockSize":4194304,"blocks":["891a9cdf4557cf965441394be47728fd13132fba26ed0be7b481716764003377"]}},"getPrototypeOf.js":{"size":230,"offset":"8845408","integrity":{"algorithm":"SHA256","hash":"c1c1fc72a207b253a570d76ea31865cfac226c85bfef26125fa09bc6971becc5","blockSize":4194304,"blocks":["c1c1fc72a207b253a570d76ea31865cfac226c85bfef26125fa09bc6971becc5"]}},"inherits.js":{"size":490,"offset":"8845638","integrity":{"algorithm":"SHA256","hash":"67339cd8a06094573c36b57765f476327bea44cbe2289433ff7ab3de2ca39ab5","blockSize":4194304,"blocks":["67339cd8a06094573c36b57765f476327bea44cbe2289433ff7ab3de2ca39ab5"]}},"inheritsLoose.js":{"size":259,"offset":"8846128","integrity":{"algorithm":"SHA256","hash":"560ef637e0cee8a729084bfc113b9e143238c2a2f6e52cf44ce168f738765737","blockSize":4194304,"blocks":["560ef637e0cee8a729084bfc113b9e143238c2a2f6e52cf44ce168f738765737"]}},"initializerDefineProperty.js":{"size":369,"offset":"8846387","integrity":{"algorithm":"SHA256","hash":"a647eef825ac36c5eb49fe20b5c95cc8f8e32471b4ef0d320bdf509c040b6fd9","blockSize":4194304,"blocks":["a647eef825ac36c5eb49fe20b5c95cc8f8e32471b4ef0d320bdf509c040b6fd9"]}},"initializerWarningHelper.js":{"size":232,"offset":"8846756","integrity":{"algorithm":"SHA256","hash":"04ed86dab30ff1c60872346dca1a19ef91111ceed4731e7c225d87d7902d61b6","blockSize":4194304,"blocks":["04ed86dab30ff1c60872346dca1a19ef91111ceed4731e7c225d87d7902d61b6"]}},"instanceof.js":{"size":232,"offset":"8846988","integrity":{"algorithm":"SHA256","hash":"88b4134a25521d5139809b9b1450c69a3fb18fe846f714c235ec36d3105dadba","blockSize":4194304,"blocks":["88b4134a25521d5139809b9b1450c69a3fb18fe846f714c235ec36d3105dadba"]}},"interopRequireDefault.js":{"size":120,"offset":"8847220","integrity":{"algorithm":"SHA256","hash":"8a2875428f6631d56087731b84a6c8194786d4095af69c9df9b59b1fdc2c7eb3","blockSize":4194304,"blocks":["8a2875428f6631d56087731b84a6c8194786d4095af69c9df9b59b1fdc2c7eb3"]}},"interopRequireWildcard.js":{"size":1344,"offset":"8847340","integrity":{"algorithm":"SHA256","hash":"22bd3342847a6f8905dc279ff905b01f98a48f2c194912622f187cf033a4141a","blockSize":4194304,"blocks":["22bd3342847a6f8905dc279ff905b01f98a48f2c194912622f187cf033a4141a"]}},"isNativeFunction.js":{"size":118,"offset":"8848684","integrity":{"algorithm":"SHA256","hash":"16dedbf9a9b1a6157944bbe5b9090004cd4bbf00a6506be552d9d4d67e5630a6","blockSize":4194304,"blocks":["16dedbf9a9b1a6157944bbe5b9090004cd4bbf00a6506be552d9d4d67e5630a6"]}},"isNativeReflectConstruct.js":{"size":369,"offset":"8848802","integrity":{"algorithm":"SHA256","hash":"336da369820f472cfe02d78e1a136edb6394caa0e8fc326c76f0fd9061781646","blockSize":4194304,"blocks":["336da369820f472cfe02d78e1a136edb6394caa0e8fc326c76f0fd9061781646"]}},"iterableToArray.js":{"size":175,"offset":"8849171","integrity":{"algorithm":"SHA256","hash":"b0ddd1179e7ac2d8b186ef6e41be0e1976d0f1b8ba1806fa5cffff42a536257a","blockSize":4194304,"blocks":["b0ddd1179e7ac2d8b186ef6e41be0e1976d0f1b8ba1806fa5cffff42a536257a"]}},"iterableToArrayLimit.js":{"size":595,"offset":"8849346","integrity":{"algorithm":"SHA256","hash":"20a82304c88279c1e62635a11559dc1155b13bdfbfd7bd8e1b535e257b46359b","blockSize":4194304,"blocks":["20a82304c88279c1e62635a11559dc1155b13bdfbfd7bd8e1b535e257b46359b"]}},"iterableToArrayLimitLoose.js":{"size":354,"offset":"8849941","integrity":{"algorithm":"SHA256","hash":"57effe8f7436be9719201762e064ff038353552f856203f25a80326322a4301d","blockSize":4194304,"blocks":["57effe8f7436be9719201762e064ff038353552f856203f25a80326322a4301d"]}},"jsx.js":{"size":1110,"offset":"8850295","integrity":{"algorithm":"SHA256","hash":"bb8addb5131afb4f846a7db41feb90dda82bfb3a76b34d5ad677a6db45f751d3","blockSize":4194304,"blocks":["bb8addb5131afb4f846a7db41feb90dda82bfb3a76b34d5ad677a6db45f751d3"]}},"maybeArrayLike.js":{"size":304,"offset":"8851405","integrity":{"algorithm":"SHA256","hash":"5a72d58a043b22ed5690412c60d63b49db3cfa2ff948e6c6292f0b573b6ab995","blockSize":4194304,"blocks":["5a72d58a043b22ed5690412c60d63b49db3cfa2ff948e6c6292f0b573b6ab995"]}},"newArrowCheck.js":{"size":166,"offset":"8851709","integrity":{"algorithm":"SHA256","hash":"cdc7ede7952bc512396e3aa300d0ae94e554de70d83ca2337d2684b65a4f3809","blockSize":4194304,"blocks":["cdc7ede7952bc512396e3aa300d0ae94e554de70d83ca2337d2684b65a4f3809"]}},"nonIterableRest.js":{"size":210,"offset":"8851875","integrity":{"algorithm":"SHA256","hash":"5ca3f757a7ef61e838f893669c52168c36931afa633ff5a8688dead27a587128","blockSize":4194304,"blocks":["5ca3f757a7ef61e838f893669c52168c36931afa633ff5a8688dead27a587128"]}},"nonIterableSpread.js":{"size":207,"offset":"8852085","integrity":{"algorithm":"SHA256","hash":"6757605e2d964eb7cbb0675049a6a605806e7faaebaea3cb22e60cb7908f1c9d","blockSize":4194304,"blocks":["6757605e2d964eb7cbb0675049a6a605806e7faaebaea3cb22e60cb7908f1c9d"]}},"objectDestructuringEmpty.js":{"size":130,"offset":"8852292","integrity":{"algorithm":"SHA256","hash":"4e60461b7a82c575d50e6ee754dac80ecc2666732dd8647f20c0425b96e4187c","blockSize":4194304,"blocks":["4e60461b7a82c575d50e6ee754dac80ecc2666732dd8647f20c0425b96e4187c"]}},"objectSpread.js":{"size":612,"offset":"8852422","integrity":{"algorithm":"SHA256","hash":"294aadd3f58f042d04b1e00281f26f7733ca889c67af247be7561f04d01860bc","blockSize":4194304,"blocks":["294aadd3f58f042d04b1e00281f26f7733ca889c67af247be7561f04d01860bc"]}},"objectSpread2.js":{"size":1069,"offset":"8853034","integrity":{"algorithm":"SHA256","hash":"8ebaeb35ab45be0a5d1010702ef88dceead7bd78fb579201b7b85dc823c2b7a1","blockSize":4194304,"blocks":["8ebaeb35ab45be0a5d1010702ef88dceead7bd78fb579201b7b85dc823c2b7a1"]}},"objectWithoutProperties.js":{"size":635,"offset":"8854103","integrity":{"algorithm":"SHA256","hash":"ab5a678c09728e3d587f3aa306d4f05e84cf872033dc743d3e4203fe373a41dd","blockSize":4194304,"blocks":["ab5a678c09728e3d587f3aa306d4f05e84cf872033dc743d3e4203fe373a41dd"]}},"objectWithoutPropertiesLoose.js":{"size":350,"offset":"8854738","integrity":{"algorithm":"SHA256","hash":"f730d64ad3b434115385a506503634a7e4c2ad4870bffff6af09824b04373e84","blockSize":4194304,"blocks":["f730d64ad3b434115385a506503634a7e4c2ad4870bffff6af09824b04373e84"]}},"package.json":{"size":22,"offset":"8855088","integrity":{"algorithm":"SHA256","hash":"d2aaf324399446516b42d82624be18adcd6465fddf100b7ba79f57323f63da52","blockSize":4194304,"blocks":["d2aaf324399446516b42d82624be18adcd6465fddf100b7ba79f57323f63da52"]}},"possibleConstructorReturn.js":{"size":319,"offset":"8855110","integrity":{"algorithm":"SHA256","hash":"e3738b986ac7b64edaa11e7972d2aad89705a231e040748fcd9cd3b5d3a581cd","blockSize":4194304,"blocks":["e3738b986ac7b64edaa11e7972d2aad89705a231e040748fcd9cd3b5d3a581cd"]}},"readOnlyError.js":{"size":104,"offset":"8855429","integrity":{"algorithm":"SHA256","hash":"4807b7466f0300c8fb9d39b3b90cf450f2556cb4c24bb9ec7fd56d9302928062","blockSize":4194304,"blocks":["4807b7466f0300c8fb9d39b3b90cf450f2556cb4c24bb9ec7fd56d9302928062"]}},"set.js":{"size":1240,"offset":"8855533","integrity":{"algorithm":"SHA256","hash":"2fc65c003bc639fd46b25b19b0de8cf6fb2f8f5fac1bbce7b1955b52d17978be","blockSize":4194304,"blocks":["2fc65c003bc639fd46b25b19b0de8cf6fb2f8f5fac1bbce7b1955b52d17978be"]}},"setPrototypeOf.js":{"size":200,"offset":"8856773","integrity":{"algorithm":"SHA256","hash":"2ba947b9a4f68ef7d44dafba2e2ed1d2370a380ec726c981b209b208ef965424","blockSize":4194304,"blocks":["2ba947b9a4f68ef7d44dafba2e2ed1d2370a380ec726c981b209b208ef965424"]}},"skipFirstGeneratorNext.js":{"size":153,"offset":"8856973","integrity":{"algorithm":"SHA256","hash":"9dd3749b4013887d847cab32203cc9ecf930c13bb18e34cc051a898dfaefa3ae","blockSize":4194304,"blocks":["9dd3749b4013887d847cab32203cc9ecf930c13bb18e34cc051a898dfaefa3ae"]}},"slicedToArray.js":{"size":409,"offset":"8857126","integrity":{"algorithm":"SHA256","hash":"bf6503ea574497e15018f40a16dc82405714aecc63c2ac78bf14ed432adf323a","blockSize":4194304,"blocks":["bf6503ea574497e15018f40a16dc82405714aecc63c2ac78bf14ed432adf323a"]}},"slicedToArrayLoose.js":{"size":429,"offset":"8857535","integrity":{"algorithm":"SHA256","hash":"53e356f5a53235d8863e874f171edfe89ee5326074a8b699ab70948b0b158c52","blockSize":4194304,"blocks":["53e356f5a53235d8863e874f171edfe89ee5326074a8b699ab70948b0b158c52"]}},"superPropBase.js":{"size":269,"offset":"8857964","integrity":{"algorithm":"SHA256","hash":"6175893a863278bca4c083401fd0e905f7f2fecba8d5f068efaf6bf2e9af8117","blockSize":4194304,"blocks":["6175893a863278bca4c083401fd0e905f7f2fecba8d5f068efaf6bf2e9af8117"]}},"taggedTemplateLiteral.js":{"size":225,"offset":"8858233","integrity":{"algorithm":"SHA256","hash":"6ec8ac15e5ce18c44d000052e749adcf4711dc41a9166c4a5e89089c603b970b","blockSize":4194304,"blocks":["6ec8ac15e5ce18c44d000052e749adcf4711dc41a9166c4a5e89089c603b970b"]}},"taggedTemplateLiteralLoose.js":{"size":155,"offset":"8858458","integrity":{"algorithm":"SHA256","hash":"087fbf3a44d33854ef79a989f78cba0b82c8f004feda0c8a97fa0e23fb743ed7","blockSize":4194304,"blocks":["087fbf3a44d33854ef79a989f78cba0b82c8f004feda0c8a97fa0e23fb743ed7"]}},"tdz.js":{"size":118,"offset":"8858613","integrity":{"algorithm":"SHA256","hash":"cabd57ef5aa6ac7f3bd42305bf3deae4dc7afe4b5dd064021244b7fcd58d8dd5","blockSize":4194304,"blocks":["cabd57ef5aa6ac7f3bd42305bf3deae4dc7afe4b5dd064021244b7fcd58d8dd5"]}},"temporalRef.js":{"size":165,"offset":"8858731","integrity":{"algorithm":"SHA256","hash":"01a2e1c222da0457bb7d5d6a21e4f5f5b7d778f0c1ffd6cfdebcc8114d135b96","blockSize":4194304,"blocks":["01a2e1c222da0457bb7d5d6a21e4f5f5b7d778f0c1ffd6cfdebcc8114d135b96"]}},"temporalUndefined.js":{"size":47,"offset":"8858896","integrity":{"algorithm":"SHA256","hash":"51745093906506d3da9cc2a6d068b5b13a82b43a6afe7a8c587d3b0db77daf98","blockSize":4194304,"blocks":["51745093906506d3da9cc2a6d068b5b13a82b43a6afe7a8c587d3b0db77daf98"]}},"toArray.js":{"size":379,"offset":"8858943","integrity":{"algorithm":"SHA256","hash":"a8d2f2291ebed2683f6a2dadc9293591fabf44e3fb79c2bdd4523ec7d28dd087","blockSize":4194304,"blocks":["a8d2f2291ebed2683f6a2dadc9293591fabf44e3fb79c2bdd4523ec7d28dd087"]}},"toConsumableArray.js":{"size":404,"offset":"8859322","integrity":{"algorithm":"SHA256","hash":"379c24c8cf82448bb86f7d1510ceb895f846b1bf7f3daa76b691161ca152d517","blockSize":4194304,"blocks":["379c24c8cf82448bb86f7d1510ceb895f846b1bf7f3daa76b691161ca152d517"]}},"toPrimitive.js":{"size":473,"offset":"8859726","integrity":{"algorithm":"SHA256","hash":"ae3c5105d5d648dcc8cfe6f5e7024e1f5abaf9469effbf3dfcc4b0f08ec88e80","blockSize":4194304,"blocks":["ae3c5105d5d648dcc8cfe6f5e7024e1f5abaf9469effbf3dfcc4b0f08ec88e80"]}},"toPropertyKey.js":{"size":240,"offset":"8860199","integrity":{"algorithm":"SHA256","hash":"08ec4e268d5a978adbce6074c07bfb4b41a9c0aab1ef47fc22dd02be032b299e","blockSize":4194304,"blocks":["08ec4e268d5a978adbce6074c07bfb4b41a9c0aab1ef47fc22dd02be032b299e"]}},"typeof.js":{"size":433,"offset":"8860439","integrity":{"algorithm":"SHA256","hash":"557dde7f64603d63c560648801b9060ed9edeaedb396d2ca6ad85b95e1f2b658","blockSize":4194304,"blocks":["557dde7f64603d63c560648801b9060ed9edeaedb396d2ca6ad85b95e1f2b658"]}},"unsupportedIterableToArray.js":{"size":495,"offset":"8860872","integrity":{"algorithm":"SHA256","hash":"9e0190ba518102c39e5de9b9eb6271cd3cd902ff3f8afc7a41606d3a8fadd29c","blockSize":4194304,"blocks":["9e0190ba518102c39e5de9b9eb6271cd3cd902ff3f8afc7a41606d3a8fadd29c"]}},"wrapAsyncGenerator.js":{"size":187,"offset":"8861367","integrity":{"algorithm":"SHA256","hash":"eb899fd709780d9dfd0cc665ae27fe96cbfd0e4938f7dfe927a5d02aa8d32528","blockSize":4194304,"blocks":["eb899fd709780d9dfd0cc665ae27fe96cbfd0e4938f7dfe927a5d02aa8d32528"]}},"wrapNativeSuper.js":{"size":1087,"offset":"8861554","integrity":{"algorithm":"SHA256","hash":"18fe23415453c57dc0ed34e5a0c35d5fb6036349dc10369da3cc0382b8c9fc5c","blockSize":4194304,"blocks":["18fe23415453c57dc0ed34e5a0c35d5fb6036349dc10369da3cc0382b8c9fc5c"]}},"wrapRegExp.js":{"size":1822,"offset":"8862641","integrity":{"algorithm":"SHA256","hash":"1e6bac8b6df0ef5657e7e0f4d66601545e11e7e7473eacfba3980246f8bfe665","blockSize":4194304,"blocks":["1e6bac8b6df0ef5657e7e0f4d66601545e11e7e7473eacfba3980246f8bfe665"]}},"writeOnlyError.js":{"size":106,"offset":"8864463","integrity":{"algorithm":"SHA256","hash":"1b1b8e04c641cceaa0edaa13ef97a653478270375a6bdab3a25a72011d384669","blockSize":4194304,"blocks":["1b1b8e04c641cceaa0edaa13ef97a653478270375a6bdab3a25a72011d384669"]}}}},"extends.js":{"size":585,"offset":"8864569","integrity":{"algorithm":"SHA256","hash":"02a07f0d08b2ab260ef5a04bcc4aaf412b7c6a3ae653fcd865cb6225aea4ff9a","blockSize":4194304,"blocks":["02a07f0d08b2ab260ef5a04bcc4aaf412b7c6a3ae653fcd865cb6225aea4ff9a"]}},"get.js":{"size":846,"offset":"8865154","integrity":{"algorithm":"SHA256","hash":"e4f88a0a7922a7f7999de137ee13ce996af6b96425729dd2872884b066a881ec","blockSize":4194304,"blocks":["e4f88a0a7922a7f7999de137ee13ce996af6b96425729dd2872884b066a881ec"]}},"getPrototypeOf.js":{"size":425,"offset":"8866000","integrity":{"algorithm":"SHA256","hash":"f1747653c8a15f3e7f5c7926ae352c9b4073609c08a61cc330fd2aad5d387644","blockSize":4194304,"blocks":["f1747653c8a15f3e7f5c7926ae352c9b4073609c08a61cc330fd2aad5d387644"]}},"inherits.js":{"size":586,"offset":"8866425","integrity":{"algorithm":"SHA256","hash":"98605cebba78fa739aecdaafa6b9528f57840f52c9a57118186383831258e93b","blockSize":4194304,"blocks":["98605cebba78fa739aecdaafa6b9528f57840f52c9a57118186383831258e93b"]}},"inheritsLoose.js":{"size":360,"offset":"8867011","integrity":{"algorithm":"SHA256","hash":"4e47469faaebec1be858b959d0201e2db44a988a7499b18928aa4a1b0f4a7d55","blockSize":4194304,"blocks":["4e47469faaebec1be858b959d0201e2db44a988a7499b18928aa4a1b0f4a7d55"]}},"initializerDefineProperty.js":{"size":478,"offset":"8867371","integrity":{"algorithm":"SHA256","hash":"5fb9e2d447f17dff5b9bc1d8ef04be3e71a7c6715ce7fdda80c952dd4698d6bf","blockSize":4194304,"blocks":["5fb9e2d447f17dff5b9bc1d8ef04be3e71a7c6715ce7fdda80c952dd4698d6bf"]}},"initializerWarningHelper.js":{"size":340,"offset":"8867849","integrity":{"algorithm":"SHA256","hash":"5946dbb9178e93407473d3a294faf1c0172f54b15e0c5f279336849fbefce357","blockSize":4194304,"blocks":["5946dbb9178e93407473d3a294faf1c0172f54b15e0c5f279336849fbefce357"]}},"instanceof.js":{"size":326,"offset":"8868189","integrity":{"algorithm":"SHA256","hash":"6f93a1b74d559a224747ddc6682b100394570a7be144ba95c273ac3ab5cc1e50","blockSize":4194304,"blocks":["6f93a1b74d559a224747ddc6682b100394570a7be144ba95c273ac3ab5cc1e50"]}},"interopRequireDefault.js":{"size":225,"offset":"8868515","integrity":{"algorithm":"SHA256","hash":"20ff283c7a4fa731f488795e914c07b91a627fe4faefee6a0aed164fc76c8b60","blockSize":4194304,"blocks":["20ff283c7a4fa731f488795e914c07b91a627fe4faefee6a0aed164fc76c8b60"]}},"interopRequireWildcard.js":{"size":1464,"offset":"8868740","integrity":{"algorithm":"SHA256","hash":"3b1f4469b190601726fc9b6234adaaeb5e446164df9b62b3e6b2d07f8cf1bddb","blockSize":4194304,"blocks":["3b1f4469b190601726fc9b6234adaaeb5e446164df9b62b3e6b2d07f8cf1bddb"]}},"isNativeFunction.js":{"size":218,"offset":"8870204","integrity":{"algorithm":"SHA256","hash":"62c8f5ed991f63472c55e9db866abbc824d3ee3d0e112a69b7e2680bc209c160","blockSize":4194304,"blocks":["62c8f5ed991f63472c55e9db866abbc824d3ee3d0e112a69b7e2680bc209c160"]}},"isNativeReflectConstruct.js":{"size":477,"offset":"8870422","integrity":{"algorithm":"SHA256","hash":"5c121d588d8f459816fcb1f5ba394c8e5bd98767713ed1794b1fe6e3bd9ae5c2","blockSize":4194304,"blocks":["5c121d588d8f459816fcb1f5ba394c8e5bd98767713ed1794b1fe6e3bd9ae5c2"]}},"iterableToArray.js":{"size":274,"offset":"8870899","integrity":{"algorithm":"SHA256","hash":"687358418fe6f32d106852ff611523438644b17b80dcedee33dd78ec0c2264cb","blockSize":4194304,"blocks":["687358418fe6f32d106852ff611523438644b17b80dcedee33dd78ec0c2264cb"]}},"iterableToArrayLimit.js":{"size":699,"offset":"8871173","integrity":{"algorithm":"SHA256","hash":"425b1c2cf430169170a716c9924bf5a9f83df139be6c1612177c311e31cf0b9a","blockSize":4194304,"blocks":["425b1c2cf430169170a716c9924bf5a9f83df139be6c1612177c311e31cf0b9a"]}},"iterableToArrayLimitLoose.js":{"size":463,"offset":"8871872","integrity":{"algorithm":"SHA256","hash":"b684d45125444b26a26ba17cebf1b3aa072be004917419c88060d05ede25789c","blockSize":4194304,"blocks":["b684d45125444b26a26ba17cebf1b3aa072be004917419c88060d05ede25789c"]}},"jsx.js":{"size":1216,"offset":"8872335","integrity":{"algorithm":"SHA256","hash":"497498596c9135ce04da417e734dad923e7e0f6a8157652662a722f7cac65903","blockSize":4194304,"blocks":["497498596c9135ce04da417e734dad923e7e0f6a8157652662a722f7cac65903"]}},"maybeArrayLike.js":{"size":406,"offset":"8873551","integrity":{"algorithm":"SHA256","hash":"275a14312279aae6db8bba3b81dc10d001e1bd42a75b4639585f198759550e5d","blockSize":4194304,"blocks":["275a14312279aae6db8bba3b81dc10d001e1bd42a75b4639585f198759550e5d"]}},"newArrowCheck.js":{"size":263,"offset":"8873957","integrity":{"algorithm":"SHA256","hash":"60d990627040a21dcef4546816fd39b0b50bfc1c4dabc96689078d602cc1f0ae","blockSize":4194304,"blocks":["60d990627040a21dcef4546816fd39b0b50bfc1c4dabc96689078d602cc1f0ae"]}},"nonIterableRest.js":{"size":309,"offset":"8874220","integrity":{"algorithm":"SHA256","hash":"54686eeb5ec02f1f55440a380ed39e52a45e56c3685ebf47b1b36db31ca84f30","blockSize":4194304,"blocks":["54686eeb5ec02f1f55440a380ed39e52a45e56c3685ebf47b1b36db31ca84f30"]}},"nonIterableSpread.js":{"size":308,"offset":"8874529","integrity":{"algorithm":"SHA256","hash":"9500aa1aee50ce5ea8594263d82311ab8f48ff50db7a681a1ae40e82d20376d2","blockSize":4194304,"blocks":["9500aa1aee50ce5ea8594263d82311ab8f48ff50db7a681a1ae40e82d20376d2"]}},"objectDestructuringEmpty.js":{"size":238,"offset":"8874837","integrity":{"algorithm":"SHA256","hash":"8869e86ee3a597447e399bb4dec90b485b1efaeabaf4cd5c51afba034ba6b10f","blockSize":4194304,"blocks":["8869e86ee3a597447e399bb4dec90b485b1efaeabaf4cd5c51afba034ba6b10f"]}},"objectSpread.js":{"size":712,"offset":"8875075","integrity":{"algorithm":"SHA256","hash":"73f215b20c1aa8b200bab9a16cd4a706a0e8471345445756caeb63157fc6581a","blockSize":4194304,"blocks":["73f215b20c1aa8b200bab9a16cd4a706a0e8471345445756caeb63157fc6581a"]}},"objectSpread2.js":{"size":1169,"offset":"8875787","integrity":{"algorithm":"SHA256","hash":"fa62b53531031693f9a1b63de0f12b80bd144aea2911d50e5a35682155e939be","blockSize":4194304,"blocks":["fa62b53531031693f9a1b63de0f12b80bd144aea2911d50e5a35682155e939be"]}},"objectWithoutProperties.js":{"size":746,"offset":"8876956","integrity":{"algorithm":"SHA256","hash":"92744c7cf8c55dd284aeec8ec7141bf2eb747a8128c2773b63ab30deb34f9adc","blockSize":4194304,"blocks":["92744c7cf8c55dd284aeec8ec7141bf2eb747a8128c2773b63ab30deb34f9adc"]}},"objectWithoutPropertiesLoose.js":{"size":462,"offset":"8877702","integrity":{"algorithm":"SHA256","hash":"0abc21ffb41814bc74ca92535592db1226c800dcead3edaab5eee9b5b084000b","blockSize":4194304,"blocks":["0abc21ffb41814bc74ca92535592db1226c800dcead3edaab5eee9b5b084000b"]}},"possibleConstructorReturn.js":{"size":447,"offset":"8878164","integrity":{"algorithm":"SHA256","hash":"829daf3c10911ecb18f3c45c618357e34280ff7810163c970290078df1c31eab","blockSize":4194304,"blocks":["829daf3c10911ecb18f3c45c618357e34280ff7810163c970290078df1c31eab"]}},"readOnlyError.js":{"size":201,"offset":"8878611","integrity":{"algorithm":"SHA256","hash":"d12384d702bed9a133b1604192e12d5cafa603c95b9351405a72814b18cbe56d","blockSize":4194304,"blocks":["d12384d702bed9a133b1604192e12d5cafa603c95b9351405a72814b18cbe56d"]}},"set.js":{"size":1334,"offset":"8878812","integrity":{"algorithm":"SHA256","hash":"d13e0582b9c2edef7d5a1ebe531035ae3de5173064a44edf72365e9cbbe1b749","blockSize":4194304,"blocks":["d13e0582b9c2edef7d5a1ebe531035ae3de5173064a44edf72365e9cbbe1b749"]}},"setPrototypeOf.js":{"size":395,"offset":"8880146","integrity":{"algorithm":"SHA256","hash":"b10b6329c749d28c5a0fd8be51fef42f3af43b6d44387ea70dbae722e9576094","blockSize":4194304,"blocks":["b10b6329c749d28c5a0fd8be51fef42f3af43b6d44387ea70dbae722e9576094"]}},"skipFirstGeneratorNext.js":{"size":259,"offset":"8880541","integrity":{"algorithm":"SHA256","hash":"21851b0462addc6d2b3ea5bcfabec226e6e893fbdecaa9461c064af600f27109","blockSize":4194304,"blocks":["21851b0462addc6d2b3ea5bcfabec226e6e893fbdecaa9461c064af600f27109"]}},"slicedToArray.js":{"size":522,"offset":"8880800","integrity":{"algorithm":"SHA256","hash":"eb359972ab03c433d01a85ed7e7d0a4c5bd26e5c87d56cc4f9413cfb4b8aa368","blockSize":4194304,"blocks":["eb359972ab03c433d01a85ed7e7d0a4c5bd26e5c87d56cc4f9413cfb4b8aa368"]}},"slicedToArrayLoose.js":{"size":547,"offset":"8881322","integrity":{"algorithm":"SHA256","hash":"f580fe01589881448ee8730a98688aefff4cb0911ae06115caebaeb200baf58e","blockSize":4194304,"blocks":["f580fe01589881448ee8730a98688aefff4cb0911ae06115caebaeb200baf58e"]}},"superPropBase.js":{"size":370,"offset":"8881869","integrity":{"algorithm":"SHA256","hash":"ea4261b921e1b823b70c6be8bcec210f0f7a132007ab90852690d3737ada70a2","blockSize":4194304,"blocks":["ea4261b921e1b823b70c6be8bcec210f0f7a132007ab90852690d3737ada70a2"]}},"taggedTemplateLiteral.js":{"size":330,"offset":"8882239","integrity":{"algorithm":"SHA256","hash":"f1205e7c817d4f0312f6bcc313736dfa33035dd83fc620ed68670f94e4463860","blockSize":4194304,"blocks":["f1205e7c817d4f0312f6bcc313736dfa33035dd83fc620ed68670f94e4463860"]}},"taggedTemplateLiteralLoose.js":{"size":265,"offset":"8882569","integrity":{"algorithm":"SHA256","hash":"dcf5d4944506f4e4dcb75795d4139b6d4ca4b12ccffc11fa816e9033b0942fbf","blockSize":4194304,"blocks":["dcf5d4944506f4e4dcb75795d4139b6d4ca4b12ccffc11fa816e9033b0942fbf"]}},"tdz.js":{"size":210,"offset":"8882834","integrity":{"algorithm":"SHA256","hash":"863bf581986dc680fbaa2fa6d396ce47ca691358089d47f78aad90f2b19f6ae0","blockSize":4194304,"blocks":["863bf581986dc680fbaa2fa6d396ce47ca691358089d47f78aad90f2b19f6ae0"]}},"temporalRef.js":{"size":292,"offset":"8883044","integrity":{"algorithm":"SHA256","hash":"d7908018c3a9b5de53f7dbd6c7d7827e14c298b41be3125e38f87b2b7ba8b509","blockSize":4194304,"blocks":["d7908018c3a9b5de53f7dbd6c7d7827e14c298b41be3125e38f87b2b7ba8b509"]}},"temporalUndefined.js":{"size":148,"offset":"8883336","integrity":{"algorithm":"SHA256","hash":"8d94985a1da91b11219f2004c39c81086d85cfc02ef864549bff75f29f0c40a9","blockSize":4194304,"blocks":["8d94985a1da91b11219f2004c39c81086d85cfc02ef864549bff75f29f0c40a9"]}},"toArray.js":{"size":486,"offset":"8883484","integrity":{"algorithm":"SHA256","hash":"07f5193bc4ef88b14962d61a934e455cf7a7ea90c735e85c349f705b1934754f","blockSize":4194304,"blocks":["07f5193bc4ef88b14962d61a934e455cf7a7ea90c735e85c349f705b1934754f"]}},"toConsumableArray.js":{"size":521,"offset":"8883970","integrity":{"algorithm":"SHA256","hash":"fa8e9eb0aafb0d63d8dae3b966cfedb1cf7102a4833facc3422dba1b2cf686de","blockSize":4194304,"blocks":["fa8e9eb0aafb0d63d8dae3b966cfedb1cf7102a4833facc3422dba1b2cf686de"]}},"toPrimitive.js":{"size":583,"offset":"8884491","integrity":{"algorithm":"SHA256","hash":"34346df153ccd21dd28a77b88b94d933cab9d0661a2209a952b4cd7001f36b47","blockSize":4194304,"blocks":["34346df153ccd21dd28a77b88b94d933cab9d0661a2209a952b4cd7001f36b47"]}},"toPropertyKey.js":{"size":356,"offset":"8885074","integrity":{"algorithm":"SHA256","hash":"770ff6239c991f1e5fbecf9ffa26a99b4d3cf731d7192bc11b77f24537ced755","blockSize":4194304,"blocks":["770ff6239c991f1e5fbecf9ffa26a99b4d3cf731d7192bc11b77f24537ced755"]}},"typeof.js":{"size":723,"offset":"8885430","integrity":{"algorithm":"SHA256","hash":"4f974e1b2d593668b64d573e458cd7d789cb1be1e23272bbc230b2a654fe69f4","blockSize":4194304,"blocks":["4f974e1b2d593668b64d573e458cd7d789cb1be1e23272bbc230b2a654fe69f4"]}},"unsupportedIterableToArray.js":{"size":609,"offset":"8886153","integrity":{"algorithm":"SHA256","hash":"823ac36c880f97e0ab343b666363dafc5c5ba653613ae509530f481caacb0747","blockSize":4194304,"blocks":["823ac36c880f97e0ab343b666363dafc5c5ba653613ae509530f481caacb0747"]}},"wrapAsyncGenerator.js":{"size":293,"offset":"8886762","integrity":{"algorithm":"SHA256","hash":"b809a9b48889061b829e5f6a98a0a477946e15265dcee5e6846383c120eb3db5","blockSize":4194304,"blocks":["b809a9b48889061b829e5f6a98a0a477946e15265dcee5e6846383c120eb3db5"]}},"wrapNativeSuper.js":{"size":1299,"offset":"8887055","integrity":{"algorithm":"SHA256","hash":"3452c8bf9b6ab7ad9720e58b722d5482f196cc4573adf27633bef12fee250d5b","blockSize":4194304,"blocks":["3452c8bf9b6ab7ad9720e58b722d5482f196cc4573adf27633bef12fee250d5b"]}},"wrapRegExp.js":{"size":2036,"offset":"8888354","integrity":{"algorithm":"SHA256","hash":"297c07c0070fe7f824761efeb9d267ce56713277dbacfe866caf4a5fcf7a80b8","blockSize":4194304,"blocks":["297c07c0070fe7f824761efeb9d267ce56713277dbacfe866caf4a5fcf7a80b8"]}},"writeOnlyError.js":{"size":204,"offset":"8890390","integrity":{"algorithm":"SHA256","hash":"d052d9a92c4b9cb4c4a49a5bdd7f74522bc45c6a6ec87cd27e125f876c5c8c15","blockSize":4194304,"blocks":["d052d9a92c4b9cb4c4a49a5bdd7f74522bc45c6a6ec87cd27e125f876c5c8c15"]}}}},"LICENSE":{"size":1106,"offset":"8890594","integrity":{"algorithm":"SHA256","hash":"117da2af0d4ce0fe1c8e19b5cff9dcd806adf973d328d27b11d4448c4ff24f76","blockSize":4194304,"blocks":["117da2af0d4ce0fe1c8e19b5cff9dcd806adf973d328d27b11d4448c4ff24f76"]}},"package.json":{"size":30872,"offset":"8891700","integrity":{"algorithm":"SHA256","hash":"af3395276006e7fed6b51b4b8351534e14d11265e90317a275a190fb63750234","blockSize":4194304,"blocks":["af3395276006e7fed6b51b4b8351534e14d11265e90317a275a190fb63750234"]}},"regenerator":{"files":{"index.js":{"size":49,"offset":"8922572","integrity":{"algorithm":"SHA256","hash":"70482fcb02ddf80fb8e8b9e7547d9c0328ebff0baea1ac8f3765fd0972aeed94","blockSize":4194304,"blocks":["70482fcb02ddf80fb8e8b9e7547d9c0328ebff0baea1ac8f3765fd0972aeed94"]}}}}}}}},"@fndroid":{"files":{"network-interface":{"files":{"build":{"files":{"Release":{"files":{"mac-arm64.node":{"size":101227,"offset":"8922621","integrity":{"algorithm":"SHA256","hash":"bae5302f240a6c41fbbe2ee78e87311e874190e5e5fdca9c10778afeca2ff49d","blockSize":4194304,"blocks":["bae5302f240a6c41fbbe2ee78e87311e874190e5e5fdca9c10778afeca2ff49d"]}},"mac-x64.node":{"size":84264,"offset":"9023848","integrity":{"algorithm":"SHA256","hash":"ee38305a00988495cfd167cbc0e76d4a22ec3d4aa2ff9587e4c2824f7f6e8b78","blockSize":4194304,"blocks":["ee38305a00988495cfd167cbc0e76d4a22ec3d4aa2ff9587e4c2824f7f6e8b78"]}},"win-ia32.node":{"size":113664,"offset":"9108112","integrity":{"algorithm":"SHA256","hash":"852efedd40126f65729540149798d76bad7693e5fa1499924727060a59539360","blockSize":4194304,"blocks":["852efedd40126f65729540149798d76bad7693e5fa1499924727060a59539360"]}},"win-x64.node":{"size":156160,"offset":"9221776","integrity":{"algorithm":"SHA256","hash":"d36b715691bfc31032b0c0a6743230b8d7c2aeb3bc9761cf06f21b6ae28c72f9","blockSize":4194304,"blocks":["d36b715691bfc31032b0c0a6743230b8d7c2aeb3bc9761cf06f21b6ae28c72f9"]}}}}}},"index.js":{"size":369,"offset":"9377936","integrity":{"algorithm":"SHA256","hash":"b2e3008e136720feb17b12f72674dbb96504d66040952f805b9b11c9be6a10d8","blockSize":4194304,"blocks":["b2e3008e136720feb17b12f72674dbb96504d66040952f805b9b11c9be6a10d8"]}},"package.json":{"size":770,"offset":"9378305","integrity":{"algorithm":"SHA256","hash":"cc4668860146d52ed043491e46c4cffc5d53f05d85a30e85a0c7f3134dab1c21","blockSize":4194304,"blocks":["cc4668860146d52ed043491e46c4cffc5d53f05d85a30e85a0c7f3134dab1c21"]}},"src":{"files":{"main.cpp":{"size":3078,"offset":"9379075","integrity":{"algorithm":"SHA256","hash":"8b5944f41630fa7b6360364d442d838b2cd80673b9bd12e4cc41587e456917c7","blockSize":4194304,"blocks":["8b5944f41630fa7b6360364d442d838b2cd80673b9bd12e4cc41587e456917c7"]}},"main.mm":{"size":1510,"offset":"9382153","integrity":{"algorithm":"SHA256","hash":"10c4a5dea38b17528a77c4a00cacca0186760108d2be9131bfcc0b09b7aef13f","blockSize":4194304,"blocks":["10c4a5dea38b17528a77c4a00cacca0186760108d2be9131bfcc0b09b7aef13f"]}},"napi-thread-safe-callback-impl.hpp":{"size":8520,"offset":"9383663","integrity":{"algorithm":"SHA256","hash":"8797d52afb2088a472b703b1f41d8c352c8ded64f64c639da852644727bb60e1","blockSize":4194304,"blocks":["8797d52afb2088a472b703b1f41d8c352c8ded64f64c639da852644727bb60e1"]}},"napi-thread-safe-callback.hpp":{"size":3413,"offset":"9392183","integrity":{"algorithm":"SHA256","hash":"f2b95203a43dc32c87a032dc907cd0e7bc73a70605a41af147acb7daa6c7f56c","blockSize":4194304,"blocks":["f2b95203a43dc32c87a032dc907cd0e7bc73a70605a41af147acb7daa6c7f56c"]}}}}}}}},"@vscode":{"files":{"sudo-prompt":{"files":{"index.js":{"size":35440,"offset":"9395596","integrity":{"algorithm":"SHA256","hash":"d00dc4e1ffe239d3bc73e50cd4aa38d2b459277cb99cb25719ef3b219bd7e700","blockSize":4194304,"blocks":["d00dc4e1ffe239d3bc73e50cd4aa38d2b459277cb99cb25719ef3b219bd7e700"]}},"LICENSE":{"size":1084,"offset":"9431036","integrity":{"algorithm":"SHA256","hash":"1c0d7e365e7c3dcfc1c30b6913d8a61a2741a4702b7ae727093c5610b47dbfa0","blockSize":4194304,"blocks":["1c0d7e365e7c3dcfc1c30b6913d8a61a2741a4702b7ae727093c5610b47dbfa0"]}},"package.json":{"size":561,"offset":"9432120","integrity":{"algorithm":"SHA256","hash":"df10424ef5281b4593c59c499b52d781dc0d1082858df8e587145f1018b11ab0","blockSize":4194304,"blocks":["df10424ef5281b4593c59c499b52d781dc0d1082858df8e587145f1018b11ab0"]}},"test-concurrent.js":{"size":664,"offset":"9432681","integrity":{"algorithm":"SHA256","hash":"3370df388148a76a9eb8c4316e553bcce6378b0e41727d4f0ca3fc380e3de6d7","blockSize":4194304,"blocks":["3370df388148a76a9eb8c4316e553bcce6378b0e41727d4f0ca3fc380e3de6d7"]}}}}}},"@vue":{"files":{"compiler-sfc":{"files":{"dist":{"files":{"compiler-sfc.js":{"size":658579,"offset":"9433345","integrity":{"algorithm":"SHA256","hash":"afdab6bec8dc530d4ea81f9262b7c2aa63ebf0cca10f3f74f84c7f7807924c5b","blockSize":4194304,"blocks":["afdab6bec8dc530d4ea81f9262b7c2aa63ebf0cca10f3f74f84c7f7807924c5b"]}}}},"LICENSE":{"size":1091,"offset":"10091924","integrity":{"algorithm":"SHA256","hash":"17fb24bc303763f3fe1911ee24e5225c7ad59f0e3a5d8123e9b730c100a306a6","blockSize":4194304,"blocks":["17fb24bc303763f3fe1911ee24e5225c7ad59f0e3a5d8123e9b730c100a306a6"]}},"node_modules":{"files":{"@babel":{"files":{"parser":{"files":{"bin":{"files":{"babel-parser.js":{"size":328,"offset":"10093015","integrity":{"algorithm":"SHA256","hash":"3c6355ac9da02a6fab9fe6a323e4af99cc06f82896cef815522773c308ac1a74","blockSize":4194304,"blocks":["3c6355ac9da02a6fab9fe6a323e4af99cc06f82896cef815522773c308ac1a74"]}}}},"index.cjs":{"size":111,"offset":"10093343","integrity":{"algorithm":"SHA256","hash":"79f42c0792e609df91d304293e509482a9517304b5cb0953ebedab52c56570d3","blockSize":4194304,"blocks":["79f42c0792e609df91d304293e509482a9517304b5cb0953ebedab52c56570d3"]}},"lib":{"files":{"index.js":{"size":485466,"offset":"10093454","integrity":{"algorithm":"SHA256","hash":"b54536a6048e83488bd075b5009e48a79a826ab5e55fcfd7cc1e9e11850cdd9b","blockSize":4194304,"blocks":["b54536a6048e83488bd075b5009e48a79a826ab5e55fcfd7cc1e9e11850cdd9b"]}},"index.js.map":{"size":1409625,"offset":"10578920","integrity":{"algorithm":"SHA256","hash":"5a431621ee031cb2d8eaba37a72b6db56ee116eabb85ac9434b33ce413d18aa4","blockSize":4194304,"blocks":["5a431621ee031cb2d8eaba37a72b6db56ee116eabb85ac9434b33ce413d18aa4"]}}}},"LICENSE":{"size":1086,"offset":"11988545","integrity":{"algorithm":"SHA256","hash":"2e97627cb278aa7556fb9e8817368302301a595b6c7582512b8d74c57b773652","blockSize":4194304,"blocks":["2e97627cb278aa7556fb9e8817368302301a595b6c7582512b8d74c57b773652"]}},"package.json":{"size":950,"offset":"11989631","integrity":{"algorithm":"SHA256","hash":"668682f82d701065676937981f47b8036507391a3584aee6b7f54d073c659fa2","blockSize":4194304,"blocks":["668682f82d701065676937981f47b8036507391a3584aee6b7f54d073c659fa2"]}}}}}},"nanoid":{"files":{"async":{"files":{"index.browser.cjs":{"size":983,"offset":"11990581","integrity":{"algorithm":"SHA256","hash":"5380fbc4a9523714fc47f2d581d4b269f64c4c3a830b3776c705866a985d061a","blockSize":4194304,"blocks":["5380fbc4a9523714fc47f2d581d4b269f64c4c3a830b3776c705866a985d061a"]}},"index.browser.js":{"size":973,"offset":"11991564","integrity":{"algorithm":"SHA256","hash":"df218a44dca7a1a2f3896a550a99cfbd7346939dd1e01154024359621c878354","blockSize":4194304,"blocks":["df218a44dca7a1a2f3896a550a99cfbd7346939dd1e01154024359621c878354"]}},"index.cjs":{"size":993,"offset":"11992537","integrity":{"algorithm":"SHA256","hash":"f5911ad498fcae995a2e7f14be65cbb5df7f94091545668e8589a4fc62690ea4","blockSize":4194304,"blocks":["f5911ad498fcae995a2e7f14be65cbb5df7f94091545668e8589a4fc62690ea4"]}},"index.js":{"size":976,"offset":"11993530","integrity":{"algorithm":"SHA256","hash":"8f8317c6517081062acbbded96fbbfd4dc33ae7fc09e16d2cd3b53751ce91564","blockSize":4194304,"blocks":["8f8317c6517081062acbbded96fbbfd4dc33ae7fc09e16d2cd3b53751ce91564"]}},"index.native.js":{"size":814,"offset":"11994506","integrity":{"algorithm":"SHA256","hash":"4df89ec87db404ad93d551dc82cc59f461d565b961c756bb08e90b1486854e92","blockSize":4194304,"blocks":["4df89ec87db404ad93d551dc82cc59f461d565b961c756bb08e90b1486854e92"]}},"package.json":{"size":233,"offset":"11995320","integrity":{"algorithm":"SHA256","hash":"0e02b9178f3638eba65e96c8643f3bf08ea192dcef7faadaf3c38c50a829b301","blockSize":4194304,"blocks":["0e02b9178f3638eba65e96c8643f3bf08ea192dcef7faadaf3c38c50a829b301"]}}}},"bin":{"files":{"nanoid.cjs":{"size":1129,"offset":"11995553","integrity":{"algorithm":"SHA256","hash":"e4eb9be1a3e3feb3f8979ef08c3bf3ef8430f4f22df9c4e427353a1577accbe8","blockSize":4194304,"blocks":["e4eb9be1a3e3feb3f8979ef08c3bf3ef8430f4f22df9c4e427353a1577accbe8"]}}}},"index.browser.cjs":{"size":1074,"offset":"11996682","integrity":{"algorithm":"SHA256","hash":"64819851dd1b0d523ab346bc28f667164be109b4ad25a69e52aa784191a8c5a5","blockSize":4194304,"blocks":["64819851dd1b0d523ab346bc28f667164be109b4ad25a69e52aa784191a8c5a5"]}},"index.browser.js":{"size":1060,"offset":"11997756","integrity":{"algorithm":"SHA256","hash":"cc29dde422f382986f35a751904be190e59853c1999e799eb4c0a1df371dbc7c","blockSize":4194304,"blocks":["cc29dde422f382986f35a751904be190e59853c1999e799eb4c0a1df371dbc7c"]}},"index.cjs":{"size":1343,"offset":"11998816","integrity":{"algorithm":"SHA256","hash":"208a883b4ab6623c5340fce09719eb9c3cef111002c36263fa80682a8924b473","blockSize":4194304,"blocks":["208a883b4ab6623c5340fce09719eb9c3cef111002c36263fa80682a8924b473"]}},"index.js":{"size":1326,"offset":"12000159","integrity":{"algorithm":"SHA256","hash":"75ae4ecb41d5dcc6b8f86bcf4e742c47064591afc484f79bad6c9d987476c157","blockSize":4194304,"blocks":["75ae4ecb41d5dcc6b8f86bcf4e742c47064591afc484f79bad6c9d987476c157"]}},"LICENSE":{"size":1095,"offset":"12001485","integrity":{"algorithm":"SHA256","hash":"da4db1480d9beea3483a2eda5c53b22238d0827d57da162b48f122e04d2d9987","blockSize":4194304,"blocks":["da4db1480d9beea3483a2eda5c53b22238d0827d57da162b48f122e04d2d9987"]}},"nanoid.js":{"size":169,"offset":"12002580","integrity":{"algorithm":"SHA256","hash":"8d11a2a154f892b392c0c84dbe3cf9515413e1976103e1827e1a90685b78ae32","blockSize":4194304,"blocks":["8d11a2a154f892b392c0c84dbe3cf9515413e1976103e1827e1a90685b78ae32"]}},"non-secure":{"files":{"index.cjs":{"size":499,"offset":"12002749","integrity":{"algorithm":"SHA256","hash":"2796014ef9ecaf270255a7af7732625524fafbbde58f60d0644fb2cbc87822f6","blockSize":4194304,"blocks":["2796014ef9ecaf270255a7af7732625524fafbbde58f60d0644fb2cbc87822f6"]}},"index.js":{"size":489,"offset":"12003248","integrity":{"algorithm":"SHA256","hash":"7bebb58e9418255e446d10e07e6dea07e44c36918a797f73cff0088a3058241e","blockSize":4194304,"blocks":["7bebb58e9418255e446d10e07e6dea07e44c36918a797f73cff0088a3058241e"]}},"package.json":{"size":99,"offset":"12003737","integrity":{"algorithm":"SHA256","hash":"2f9b8c4bee9312538f388b49c13987f4565ac25d6756fabdbbb771d339945e3e","blockSize":4194304,"blocks":["2f9b8c4bee9312538f388b49c13987f4565ac25d6756fabdbbb771d339945e3e"]}}}},"package.json":{"size":1635,"offset":"12003836","integrity":{"algorithm":"SHA256","hash":"3577f011a3c7f94a2729e456c6795a45f5fbbf1593cc2a258eeb873ef7c14dda","blockSize":4194304,"blocks":["3577f011a3c7f94a2729e456c6795a45f5fbbf1593cc2a258eeb873ef7c14dda"]}},"url-alphabet":{"files":{"index.cjs":{"size":120,"offset":"12005471","integrity":{"algorithm":"SHA256","hash":"8dbf2866b07583890919c7e27777dce67152e57699ff2fbd3eea2b5b6fae69ef","blockSize":4194304,"blocks":["8dbf2866b07583890919c7e27777dce67152e57699ff2fbd3eea2b5b6fae69ef"]}},"index.js":{"size":110,"offset":"12005591","integrity":{"algorithm":"SHA256","hash":"a277361f60c9aca95ef53695330e8a291e5be7e6a19e838641e6a139990960ee","blockSize":4194304,"blocks":["a277361f60c9aca95ef53695330e8a291e5be7e6a19e838641e6a139990960ee"]}},"package.json":{"size":99,"offset":"12005701","integrity":{"algorithm":"SHA256","hash":"2f9b8c4bee9312538f388b49c13987f4565ac25d6756fabdbbb771d339945e3e","blockSize":4194304,"blocks":["2f9b8c4bee9312538f388b49c13987f4565ac25d6756fabdbbb771d339945e3e"]}}}}}},"postcss":{"files":{"lib":{"files":{"at-rule.js":{"size":471,"offset":"12005800","integrity":{"algorithm":"SHA256","hash":"33b932bda8f304e9838a70232673326b6c0fd5fa030df35071bf36c127042a0b","blockSize":4194304,"blocks":["33b932bda8f304e9838a70232673326b6c0fd5fa030df35071bf36c127042a0b"]}},"comment.js":{"size":203,"offset":"12006271","integrity":{"algorithm":"SHA256","hash":"674385438f42526f2c05c19dfb66fcc521f5cf180ccc85b3215ad5c07ac21a40","blockSize":4194304,"blocks":["674385438f42526f2c05c19dfb66fcc521f5cf180ccc85b3215ad5c07ac21a40"]}},"container.js":{"size":10502,"offset":"12006474","integrity":{"algorithm":"SHA256","hash":"4639d967b1078d7942da19e63e6e2db8dc3f93684aacda24fc8cc97530b54aad","blockSize":4194304,"blocks":["4639d967b1078d7942da19e63e6e2db8dc3f93684aacda24fc8cc97530b54aad"]}},"css-syntax-error.js":{"size":2524,"offset":"12016976","integrity":{"algorithm":"SHA256","hash":"143271aedfbbceb86a7d413be10ac2d37b5390d89921847c589e966aeb3d6b6b","blockSize":4194304,"blocks":["143271aedfbbceb86a7d413be10ac2d37b5390d89921847c589e966aeb3d6b6b"]}},"declaration.js":{"size":495,"offset":"12019500","integrity":{"algorithm":"SHA256","hash":"1a16f193814168ca7c7526133f0eec0526de6eed9c38c105b9c46d76c1101539","blockSize":4194304,"blocks":["1a16f193814168ca7c7526133f0eec0526de6eed9c38c105b9c46d76c1101539"]}},"document.js":{"size":654,"offset":"12019995","integrity":{"algorithm":"SHA256","hash":"f66f02fde48389fe1a361a8f71da7ee0236a49c94cf22378e70ba6a2e9f4fab1","blockSize":4194304,"blocks":["f66f02fde48389fe1a361a8f71da7ee0236a49c94cf22378e70ba6a2e9f4fab1"]}},"fromJSON.js":{"size":1506,"offset":"12020649","integrity":{"algorithm":"SHA256","hash":"4be0b0fa5d48f912933b958b5813f9efa3d6113726e5857cee765001e03b0c8d","blockSize":4194304,"blocks":["4be0b0fa5d48f912933b958b5813f9efa3d6113726e5857cee765001e03b0c8d"]}},"input.js":{"size":6189,"offset":"12022155","integrity":{"algorithm":"SHA256","hash":"43eb3d11efdb79e1c6267b7d94af62cbbdff712d6f8fcc7b782a564029dedd0f","blockSize":4194304,"blocks":["43eb3d11efdb79e1c6267b7d94af62cbbdff712d6f8fcc7b782a564029dedd0f"]}},"lazy-result.js":{"size":13562,"offset":"12028344","integrity":{"algorithm":"SHA256","hash":"d93a7855b01996993fa0f041bee1b912fea3c00ea75e30c8b082e1d5043d103a","blockSize":4194304,"blocks":["d93a7855b01996993fa0f041bee1b912fea3c00ea75e30c8b082e1d5043d103a"]}},"list.js":{"size":1227,"offset":"12041906","integrity":{"algorithm":"SHA256","hash":"1921756bfce52978a330391d2cac9e400f636c9d8cb53f8bd4b228df0ae92bad","blockSize":4194304,"blocks":["1921756bfce52978a330391d2cac9e400f636c9d8cb53f8bd4b228df0ae92bad"]}},"map-generator.js":{"size":9046,"offset":"12043133","integrity":{"algorithm":"SHA256","hash":"0284697bf9ed960d79f13e3818e28f505021f15624835519598204e53cc21adc","blockSize":4194304,"blocks":["0284697bf9ed960d79f13e3818e28f505021f15624835519598204e53cc21adc"]}},"no-work-result.js":{"size":2551,"offset":"12052179","integrity":{"algorithm":"SHA256","hash":"2bdbddedd64d347ba3a4ebdb82927865ae1908707cab12dd9a4600f6b791b156","blockSize":4194304,"blocks":["2bdbddedd64d347ba3a4ebdb82927865ae1908707cab12dd9a4600f6b791b156"]}},"node.js":{"size":8485,"offset":"12054730","integrity":{"algorithm":"SHA256","hash":"2044cd8734ac170ee37bcacf4fe39d3ea445e25a5500044363f84ede7362d98a","blockSize":4194304,"blocks":["2044cd8734ac170ee37bcacf4fe39d3ea445e25a5500044363f84ede7362d98a"]}},"parse.js":{"size":1147,"offset":"12063215","integrity":{"algorithm":"SHA256","hash":"57968b21181210bda81c74b5b019c3f5562d696970f341622f80a67090ac09aa","blockSize":4194304,"blocks":["57968b21181210bda81c74b5b019c3f5562d696970f341622f80a67090ac09aa"]}},"parser.js":{"size":14482,"offset":"12064362","integrity":{"algorithm":"SHA256","hash":"6f5723fc2225e0ab1b48628bde7cd7390f78203c5512b2dfa248c4d77b0995b8","blockSize":4194304,"blocks":["6f5723fc2225e0ab1b48628bde7cd7390f78203c5512b2dfa248c4d77b0995b8"]}},"postcss.js":{"size":2898,"offset":"12078844","integrity":{"algorithm":"SHA256","hash":"998c5e1e05d436b43814946784ec967547ab96422baaae167810607010b1ebc2","blockSize":4194304,"blocks":["998c5e1e05d436b43814946784ec967547ab96422baaae167810607010b1ebc2"]}},"postcss.mjs":{"size":980,"offset":"12081742","integrity":{"algorithm":"SHA256","hash":"986ebc2d661a3e93b6e026dd2e1925e18167efdcc963f4043a65e1859974664f","blockSize":4194304,"blocks":["986ebc2d661a3e93b6e026dd2e1925e18167efdcc963f4043a65e1859974664f"]}},"previous-map.js":{"size":3923,"offset":"12082722","integrity":{"algorithm":"SHA256","hash":"4d0b33cef92245f62602437c80d55332ce14559126ff53e2929ec39156cd0629","blockSize":4194304,"blocks":["4d0b33cef92245f62602437c80d55332ce14559126ff53e2929ec39156cd0629"]}},"processor.js":{"size":1810,"offset":"12086645","integrity":{"algorithm":"SHA256","hash":"8e71b1f40cee208e7752c4367e0cf33ff7d5d6ad9deefa7deddf617d012bb2cf","blockSize":4194304,"blocks":["8e71b1f40cee208e7752c4367e0cf33ff7d5d6ad9deefa7deddf617d012bb2cf"]}},"result.js":{"size":745,"offset":"12088455","integrity":{"algorithm":"SHA256","hash":"7f2b27651b2fb5ac7f46adb6e6f928194b31af0c6b821225400d0ee762c94e0c","blockSize":4194304,"blocks":["7f2b27651b2fb5ac7f46adb6e6f928194b31af0c6b821225400d0ee762c94e0c"]}},"root.js":{"size":1239,"offset":"12089200","integrity":{"algorithm":"SHA256","hash":"7b07a7ec9b2d9604d4497c2f5793f96b48675d0e3f8b9ac9890232b16c08d718","blockSize":4194304,"blocks":["7b07a7ec9b2d9604d4497c2f5793f96b48675d0e3f8b9ac9890232b16c08d718"]}},"rule.js":{"size":569,"offset":"12090439","integrity":{"algorithm":"SHA256","hash":"682e8fef7327307047965c6563e942bf53cc3bebda24db7d3eb286ca1e6f8ef8","blockSize":4194304,"blocks":["682e8fef7327307047965c6563e942bf53cc3bebda24db7d3eb286ca1e6f8ef8"]}},"stringifier.js":{"size":8220,"offset":"12091008","integrity":{"algorithm":"SHA256","hash":"71c8be76aff97b0cf0db3a93c17f55b4bb0e2ab72f6b40b989ad792e23d63b86","blockSize":4194304,"blocks":["71c8be76aff97b0cf0db3a93c17f55b4bb0e2ab72f6b40b989ad792e23d63b86"]}},"stringify.js":{"size":213,"offset":"12099228","integrity":{"algorithm":"SHA256","hash":"99229cdda200513f88f7fee46004d5c39c1492a73451509e66164d26dff34abc","blockSize":4194304,"blocks":["99229cdda200513f88f7fee46004d5c39c1492a73451509e66164d26dff34abc"]}},"symbols.js":{"size":91,"offset":"12099441","integrity":{"algorithm":"SHA256","hash":"eb8ab8b9648d400ec3e8e37e75dc159734b97ba21137f12da11b4afc2547a1b4","blockSize":4194304,"blocks":["eb8ab8b9648d400ec3e8e37e75dc159734b97ba21137f12da11b4afc2547a1b4"]}},"terminal-highlight.js":{"size":1399,"offset":"12099532","integrity":{"algorithm":"SHA256","hash":"8ecc9d1279013735cd0c045260a553bf05a4647bc3423ef7c15e5f1bd65c4d41","blockSize":4194304,"blocks":["8ecc9d1279013735cd0c045260a553bf05a4647bc3423ef7c15e5f1bd65c4d41"]}},"tokenize.js":{"size":6536,"offset":"12100931","integrity":{"algorithm":"SHA256","hash":"4df298f3d4587e2c62474239b45fd20282b82592aaab8cacbc532cf0ae7c2498","blockSize":4194304,"blocks":["4df298f3d4587e2c62474239b45fd20282b82592aaab8cacbc532cf0ae7c2498"]}},"warn-once.js":{"size":256,"offset":"12107467","integrity":{"algorithm":"SHA256","hash":"5683ff69eeb8e77373a4bd0e0b9da611c7575ee434ba3c458c0552ab4806464a","blockSize":4194304,"blocks":["5683ff69eeb8e77373a4bd0e0b9da611c7575ee434ba3c458c0552ab4806464a"]}},"warning.js":{"size":739,"offset":"12107723","integrity":{"algorithm":"SHA256","hash":"299891699496a5d051b748c19edd7018f0062462838fd8036f12e50039f4721c","blockSize":4194304,"blocks":["299891699496a5d051b748c19edd7018f0062462838fd8036f12e50039f4721c"]}}}},"LICENSE":{"size":1095,"offset":"12108462","integrity":{"algorithm":"SHA256","hash":"c4630ac8b89cb317ac5bdd60ac5e4e185eab9bd5151a0c7b3afa41aa83d7ec9b","blockSize":4194304,"blocks":["c4630ac8b89cb317ac5bdd60ac5e4e185eab9bd5151a0c7b3afa41aa83d7ec9b"]}},"package.json":{"size":2210,"offset":"12109557","integrity":{"algorithm":"SHA256","hash":"019fcbd9e0e19adc5b0f42e446ce31da1c2873e17da20bb36506b1eeac3874a1","blockSize":4194304,"blocks":["019fcbd9e0e19adc5b0f42e446ce31da1c2873e17da20bb36506b1eeac3874a1"]}}}},"source-map":{"files":{"dist":{"files":{"source-map.debug.js":{"size":272874,"offset":"12111767","integrity":{"algorithm":"SHA256","hash":"8e15acad97d6eeff240c2a9346f2fb12411539785b20172c941d9fa2fbf628b4","blockSize":4194304,"blocks":["8e15acad97d6eeff240c2a9346f2fb12411539785b20172c941d9fa2fbf628b4"]}},"source-map.js":{"size":106973,"offset":"12384641","integrity":{"algorithm":"SHA256","hash":"1379839b045b79890513f133f40901f73d68d10ea3e41065f5f53b95031770a3","blockSize":4194304,"blocks":["1379839b045b79890513f133f40901f73d68d10ea3e41065f5f53b95031770a3"]}},"source-map.min.js":{"size":27111,"offset":"12491614","integrity":{"algorithm":"SHA256","hash":"1535a08c7072851d557df071c276b478f8abc23f956936ab42efd10a857009a4","blockSize":4194304,"blocks":["1535a08c7072851d557df071c276b478f8abc23f956936ab42efd10a857009a4"]}},"source-map.min.js.map":{"size":257409,"offset":"12518725","integrity":{"algorithm":"SHA256","hash":"30adb2032660c88aadfb9b7082cf2debc09cb7d5f0bf88fe90c9e333305550d8","blockSize":4194304,"blocks":["30adb2032660c88aadfb9b7082cf2debc09cb7d5f0bf88fe90c9e333305550d8"]}}}},"lib":{"files":{"array-set.js":{"size":3197,"offset":"12776134","integrity":{"algorithm":"SHA256","hash":"163bb3055aaea7140167740036a83161fd912c344b14f992754b80f21477d754","blockSize":4194304,"blocks":["163bb3055aaea7140167740036a83161fd912c344b14f992754b80f21477d754"]}},"base64-vlq.js":{"size":4714,"offset":"12779331","integrity":{"algorithm":"SHA256","hash":"f3407e528f54ec0787bd0a71eeac0c99fffd98445916fcbe116dc69ca3be928b","blockSize":4194304,"blocks":["f3407e528f54ec0787bd0a71eeac0c99fffd98445916fcbe116dc69ca3be928b"]}},"base64.js":{"size":1540,"offset":"12784045","integrity":{"algorithm":"SHA256","hash":"651bf433cf05e9ec8cee0b94639483236a605d48279e83d3d5c5de81c21d6599","blockSize":4194304,"blocks":["651bf433cf05e9ec8cee0b94639483236a605d48279e83d3d5c5de81c21d6599"]}},"binary-search.js":{"size":4249,"offset":"12785585","integrity":{"algorithm":"SHA256","hash":"c7f4a47a125af0bd860443dfd71d2f412d1a97dcb53ab7038189d63b91dc32bd","blockSize":4194304,"blocks":["c7f4a47a125af0bd860443dfd71d2f412d1a97dcb53ab7038189d63b91dc32bd"]}},"mapping-list.js":{"size":2339,"offset":"12789834","integrity":{"algorithm":"SHA256","hash":"35ddb82861f11a70ab84cb47d620fcb28d7f884bb444644e06bde815b836ef9e","blockSize":4194304,"blocks":["35ddb82861f11a70ab84cb47d620fcb28d7f884bb444644e06bde815b836ef9e"]}},"quick-sort.js":{"size":3616,"offset":"12792173","integrity":{"algorithm":"SHA256","hash":"00ed5475b08b4a239836bc5d667bfaf343f4f2412cd7616d2aaf37bddd8582c2","blockSize":4194304,"blocks":["00ed5475b08b4a239836bc5d667bfaf343f4f2412cd7616d2aaf37bddd8582c2"]}},"source-map-consumer.js":{"size":40562,"offset":"12795789","integrity":{"algorithm":"SHA256","hash":"b59ae64263c0abc03d9bb5576d805dbe736097a3f0f31010d13b3468b52a3063","blockSize":4194304,"blocks":["b59ae64263c0abc03d9bb5576d805dbe736097a3f0f31010d13b3468b52a3063"]}},"source-map-generator.js":{"size":14356,"offset":"12836351","integrity":{"algorithm":"SHA256","hash":"98f91170f8bfd754bebc9bc8babf26ea16ba4cf980f7abb30debe6d89f24f17f","blockSize":4194304,"blocks":["98f91170f8bfd754bebc9bc8babf26ea16ba4cf980f7abb30debe6d89f24f17f"]}},"source-node.js":{"size":13808,"offset":"12850707","integrity":{"algorithm":"SHA256","hash":"b45db8183550ca1e6259976f6ceee89f6764360c56cf206701bd2f7471144e31","blockSize":4194304,"blocks":["b45db8183550ca1e6259976f6ceee89f6764360c56cf206701bd2f7471144e31"]}},"util.js":{"size":12950,"offset":"12864515","integrity":{"algorithm":"SHA256","hash":"c83bf8e825fc7366ff511da21c58dde4c4a032308a51c0a71865760c3b43a401","blockSize":4194304,"blocks":["c83bf8e825fc7366ff511da21c58dde4c4a032308a51c0a71865760c3b43a401"]}}}},"LICENSE":{"size":1526,"offset":"12877465","integrity":{"algorithm":"SHA256","hash":"6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd","blockSize":4194304,"blocks":["6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd"]}},"package.json":{"size":712,"offset":"12878991","integrity":{"algorithm":"SHA256","hash":"071fca8df92b47051d7d99db023f84f87f985fbbf152a0b8620344ba5f7f7206","blockSize":4194304,"blocks":["071fca8df92b47051d7d99db023f84f87f985fbbf152a0b8620344ba5f7f7206"]}},"source-map.js":{"size":405,"offset":"12879703","integrity":{"algorithm":"SHA256","hash":"dc098456c2d9ab90a4c0a17cca9be16665b9813df20906553a98b0088a157be7","blockSize":4194304,"blocks":["dc098456c2d9ab90a4c0a17cca9be16665b9813df20906553a98b0088a157be7"]}}}}}},"package.json":{"size":843,"offset":"12880108","integrity":{"algorithm":"SHA256","hash":"f31b7bb10b6464c610ab607f09805cdee5dfee483c67b4ec67c2b4c94d42d789","blockSize":4194304,"blocks":["f31b7bb10b6464c610ab607f09805cdee5dfee483c67b4ec67c2b4c94d42d789"]}}}},"reactivity":{"files":{"dist":{"files":{"reactivity.cjs.js":{"size":41403,"offset":"12880951","integrity":{"algorithm":"SHA256","hash":"84b9134fd2b9d25a750ac67f76da500f4de6fd125bcaf2a7b1e4f7d0b61d50a4","blockSize":4194304,"blocks":["84b9134fd2b9d25a750ac67f76da500f4de6fd125bcaf2a7b1e4f7d0b61d50a4"]}},"reactivity.cjs.prod.js":{"size":38466,"offset":"12922354","integrity":{"algorithm":"SHA256","hash":"62c9573079a26e11ffdceeb85fccfd4178a5c5c0814c4f25a23af2ee9a80dee0","blockSize":4194304,"blocks":["62c9573079a26e11ffdceeb85fccfd4178a5c5c0814c4f25a23af2ee9a80dee0"]}},"reactivity.esm-browser.js":{"size":42343,"offset":"12960820","integrity":{"algorithm":"SHA256","hash":"f9886a3ce7eebfb203684c21ded092f3045182a8dd64ee3e1497f4cc0eaee098","blockSize":4194304,"blocks":["f9886a3ce7eebfb203684c21ded092f3045182a8dd64ee3e1497f4cc0eaee098"]}},"reactivity.esm-browser.prod.js":{"size":11647,"offset":"13003163","integrity":{"algorithm":"SHA256","hash":"a02d4a9bdf78bb52c29b12c7b01ed38154af7dc2e610de9b1d9e11e118ed3a62","blockSize":4194304,"blocks":["a02d4a9bdf78bb52c29b12c7b01ed38154af7dc2e610de9b1d9e11e118ed3a62"]}},"reactivity.esm-bundler.js":{"size":41895,"offset":"13014810","integrity":{"algorithm":"SHA256","hash":"bf982cfa879d2901b7c2d54d575e6a8856f88d7a9d28e07ca894c770b1efaf11","blockSize":4194304,"blocks":["bf982cfa879d2901b7c2d54d575e6a8856f88d7a9d28e07ca894c770b1efaf11"]}},"reactivity.global.js":{"size":45767,"offset":"13056705","integrity":{"algorithm":"SHA256","hash":"d4c6d55a4dc80fcf70bb9c39208a3122e332244559c3776097fb0eb4b21d3fd4","blockSize":4194304,"blocks":["d4c6d55a4dc80fcf70bb9c39208a3122e332244559c3776097fb0eb4b21d3fd4"]}},"reactivity.global.prod.js":{"size":11612,"offset":"13102472","integrity":{"algorithm":"SHA256","hash":"53e52525f6f33d0d405df2316ef820ca58381d98b64af681a5d4d0fa4608b058","blockSize":4194304,"blocks":["53e52525f6f33d0d405df2316ef820ca58381d98b64af681a5d4d0fa4608b058"]}}}},"index.js":{"size":185,"offset":"13114084","integrity":{"algorithm":"SHA256","hash":"ea58baa61892122ece77249d50c4b4bcdda46dd5233d6908d86d6bb4f874a109","blockSize":4194304,"blocks":["ea58baa61892122ece77249d50c4b4bcdda46dd5233d6908d86d6bb4f874a109"]}},"LICENSE":{"size":1091,"offset":"13114269","integrity":{"algorithm":"SHA256","hash":"1bb85cc9b13b81ef41c81c51866172fc345e0503c86726a6755b796590b70175","blockSize":4194304,"blocks":["1bb85cc9b13b81ef41c81c51866172fc345e0503c86726a6755b796590b70175"]}},"package.json":{"size":806,"offset":"13115360","integrity":{"algorithm":"SHA256","hash":"ebfcb356295408b16fa88b7147f7357b1f8af322149595621cc7b17a73bdd7d8","blockSize":4194304,"blocks":["ebfcb356295408b16fa88b7147f7357b1f8af322149595621cc7b17a73bdd7d8"]}}}},"shared":{"files":{"dist":{"files":{"shared.cjs.js":{"size":25270,"offset":"13116166","integrity":{"algorithm":"SHA256","hash":"f5005f3d5bb5ac95ecaf021e60f82d27c91c80fd29b1c9e1b70c3fd50abd0382","blockSize":4194304,"blocks":["f5005f3d5bb5ac95ecaf021e60f82d27c91c80fd29b1c9e1b70c3fd50abd0382"]}},"shared.cjs.prod.js":{"size":25236,"offset":"13141436","integrity":{"algorithm":"SHA256","hash":"dd9d79981db4e87cc9ab6b009f22aec1a93096751a9ed4d0d8d140b5796507dc","blockSize":4194304,"blocks":["dd9d79981db4e87cc9ab6b009f22aec1a93096751a9ed4d0d8d140b5796507dc"]}},"shared.esm-bundler.js":{"size":24069,"offset":"13166672","integrity":{"algorithm":"SHA256","hash":"7cc4157a51c0870aa0cc57fc378151b527610231ed781481e883a9b31143492a","blockSize":4194304,"blocks":["7cc4157a51c0870aa0cc57fc378151b527610231ed781481e883a9b31143492a"]}}}},"index.js":{"size":177,"offset":"13190741","integrity":{"algorithm":"SHA256","hash":"22aeabedc1f2782f67b05c54df4382d4e52a0e0c384ff02349372e2acd9974ed","blockSize":4194304,"blocks":["22aeabedc1f2782f67b05c54df4382d4e52a0e0c384ff02349372e2acd9974ed"]}},"LICENSE":{"size":1091,"offset":"13190918","integrity":{"algorithm":"SHA256","hash":"1bb85cc9b13b81ef41c81c51866172fc345e0503c86726a6755b796590b70175","blockSize":4194304,"blocks":["1bb85cc9b13b81ef41c81c51866172fc345e0503c86726a6755b796590b70175"]}},"package.json":{"size":611,"offset":"13192009","integrity":{"algorithm":"SHA256","hash":"26e4f86fb525b3c796ac4a1ad88e2c4e961db077ed181a96bbe01a98f3303b72","blockSize":4194304,"blocks":["26e4f86fb525b3c796ac4a1ad88e2c4e961db077ed181a96bbe01a98f3303b72"]}}}}}},"accepts":{"files":{"HISTORY.md":{"size":4972,"offset":"13192620","integrity":{"algorithm":"SHA256","hash":"ce1b9b75402abbac52b7edd2431ef8062111ebf365e95078db8929c0d29254f6","blockSize":4194304,"blocks":["ce1b9b75402abbac52b7edd2431ef8062111ebf365e95078db8929c0d29254f6"]}},"index.js":{"size":5252,"offset":"13197592","integrity":{"algorithm":"SHA256","hash":"be2decbd50610e8f995c1e312ee4dd6d7c1244cfdf03ee4c4a3da68e572dada1","blockSize":4194304,"blocks":["be2decbd50610e8f995c1e312ee4dd6d7c1244cfdf03ee4c4a3da68e572dada1"]}},"LICENSE":{"size":1167,"offset":"13202844","integrity":{"algorithm":"SHA256","hash":"71f83c4c0621102a56d9853812777b85751bce7e9726f686f5b056c1f8a4b0e6","blockSize":4194304,"blocks":["71f83c4c0621102a56d9853812777b85751bce7e9726f686f5b056c1f8a4b0e6"]}},"package.json":{"size":689,"offset":"13204011","integrity":{"algorithm":"SHA256","hash":"75d8b2542dbbbd71484eba723f03b6d07a0a2ddd9ecb4f7e84ecaf829a34714f","blockSize":4194304,"blocks":["75d8b2542dbbbd71484eba723f03b6d07a0a2ddd9ecb4f7e84ecaf829a34714f"]}}}},"ansi-regex":{"files":{"index.js":{"size":135,"offset":"13204700","integrity":{"algorithm":"SHA256","hash":"0f78062e714965d168fb51f1cb507aa95dd6270b563d04679adf2506245a62b3","blockSize":4194304,"blocks":["0f78062e714965d168fb51f1cb507aa95dd6270b563d04679adf2506245a62b3"]}},"license":{"size":1119,"offset":"13204835","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":641,"offset":"13205954","integrity":{"algorithm":"SHA256","hash":"a0ca03d3167ce026e2d8dd55481ec427272c2d2e3e130b7635fe7f70897e895f","blockSize":4194304,"blocks":["a0ca03d3167ce026e2d8dd55481ec427272c2d2e3e130b7635fe7f70897e895f"]}}}},"any-promise":{"files":{"implementation.js":{"size":56,"offset":"13206595","integrity":{"algorithm":"SHA256","hash":"7cd79f824498cceaec9a46d3cd6793f433bbf90f4df6a01ba7a0f8965a3f0664","blockSize":4194304,"blocks":["7cd79f824498cceaec9a46d3cd6793f433bbf90f4df6a01ba7a0f8965a3f0664"]}},"index.js":{"size":49,"offset":"13206651","integrity":{"algorithm":"SHA256","hash":"aae71b5502c5728a7f0e4d818f1b053f7cb4ae7379b94e4daac1a590bfa56119","blockSize":4194304,"blocks":["aae71b5502c5728a7f0e4d818f1b053f7cb4ae7379b94e4daac1a590bfa56119"]}},"LICENSE":{"size":1060,"offset":"13206700","integrity":{"algorithm":"SHA256","hash":"bd54a6ab4e3ad0f73420d8e4d2a990179e6367e5752a6abac5f61ad4f4130a43","blockSize":4194304,"blocks":["bd54a6ab4e3ad0f73420d8e4d2a990179e6367e5752a6abac5f61ad4f4130a43"]}},"loader.js":{"size":2581,"offset":"13207760","integrity":{"algorithm":"SHA256","hash":"bfd7249e699debfecb3d2038cfd87aba7cbb470113ebf5114b529659b506af28","blockSize":4194304,"blocks":["bfd7249e699debfecb3d2038cfd87aba7cbb470113ebf5114b529659b506af28"]}},"optional.js":{"size":118,"offset":"13210341","integrity":{"algorithm":"SHA256","hash":"472c0292a812da931fd0ae58f125acc866caa0ebf2c5c316d1fef523742056ab","blockSize":4194304,"blocks":["472c0292a812da931fd0ae58f125acc866caa0ebf2c5c316d1fef523742056ab"]}},"package.json":{"size":853,"offset":"13210459","integrity":{"algorithm":"SHA256","hash":"29843535cf404cfad938a96a7bbe9e52fc82d93e496510c1191c6d93c66887ea","blockSize":4194304,"blocks":["29843535cf404cfad938a96a7bbe9e52fc82d93e496510c1191c6d93c66887ea"]}},"register":{"files":{"bluebird.js":{"size":81,"offset":"13214767","integrity":{"algorithm":"SHA256","hash":"79791ff838c362332715de86dd7fd083774ddda13fab7a6913a2661a6a1a5506","blockSize":4194304,"blocks":["79791ff838c362332715de86dd7fd083774ddda13fab7a6913a2661a6a1a5506"]}},"es6-promise.js":{"size":95,"offset":"13214848","integrity":{"algorithm":"SHA256","hash":"5a0c59dd83811170c097b92d324fea55619be314ee8f0010c2da3bbe288191d9","blockSize":4194304,"blocks":["5a0c59dd83811170c097b92d324fea55619be314ee8f0010c2da3bbe288191d9"]}},"lie.js":{"size":71,"offset":"13214943","integrity":{"algorithm":"SHA256","hash":"0cadc2533c2835104ade066f9623fd15a694c7188c63208fe9f5e22b4e8f2457","blockSize":4194304,"blocks":["0cadc2533c2835104ade066f9623fd15a694c7188c63208fe9f5e22b4e8f2457"]}},"native-promise-only.js":{"size":103,"offset":"13215014","integrity":{"algorithm":"SHA256","hash":"5a0ce5cc2f25680ee03995e6584e0511452999d690e9c9f67a28108d96be0c7f","blockSize":4194304,"blocks":["5a0ce5cc2f25680ee03995e6584e0511452999d690e9c9f67a28108d96be0c7f"]}},"pinkie.js":{"size":77,"offset":"13215117","integrity":{"algorithm":"SHA256","hash":"868ee953243ec57232c49eb592b83c429b0c6cc0b0ee60ecc43192334b811a8f","blockSize":4194304,"blocks":["868ee953243ec57232c49eb592b83c429b0c6cc0b0ee60ecc43192334b811a8f"]}},"promise.js":{"size":79,"offset":"13215194","integrity":{"algorithm":"SHA256","hash":"4442cf673fe9719d30e5f60eb49d81f0caf81bdea40baf90581101bd93d5a755","blockSize":4194304,"blocks":["4442cf673fe9719d30e5f60eb49d81f0caf81bdea40baf90581101bd93d5a755"]}},"q.js":{"size":75,"offset":"13215273","integrity":{"algorithm":"SHA256","hash":"293acb6d2b79a4954faf5b36a2a2d2505d5d1df3917f1ecfa64a5b1a96e436cd","blockSize":4194304,"blocks":["293acb6d2b79a4954faf5b36a2a2d2505d5d1df3917f1ecfa64a5b1a96e436cd"]}},"rsvp.js":{"size":81,"offset":"13215348","integrity":{"algorithm":"SHA256","hash":"f46fc38240b476914707b28531788723966930c26bcc61c50acb0fdb6d55c046","blockSize":4194304,"blocks":["f46fc38240b476914707b28531788723966930c26bcc61c50acb0fdb6d55c046"]}},"vow.js":{"size":79,"offset":"13215429","integrity":{"algorithm":"SHA256","hash":"f9bb8ba0415077f8916dd9208bb7f97b89c7a1c19f009735bb7cde3c715d93cb","blockSize":4194304,"blocks":["f9bb8ba0415077f8916dd9208bb7f97b89c7a1c19f009735bb7cde3c715d93cb"]}},"when.js":{"size":81,"offset":"13215508","integrity":{"algorithm":"SHA256","hash":"bbb7ab5ef9e653c964103cd703a70105de4fdc2ff229d55ae5ca24bb37011dbb","blockSize":4194304,"blocks":["bbb7ab5ef9e653c964103cd703a70105de4fdc2ff229d55ae5ca24bb37011dbb"]}}}},"register-shim.js":{"size":545,"offset":"13211312","integrity":{"algorithm":"SHA256","hash":"873655833c1dd6c885c9e4eddc4cdc525acec39098561207221cbf1dec45c728","blockSize":4194304,"blocks":["873655833c1dd6c885c9e4eddc4cdc525acec39098561207221cbf1dec45c728"]}},"register.js":{"size":2910,"offset":"13211857","integrity":{"algorithm":"SHA256","hash":"003a1f7a8075b4d6e3f84adb9c1f0a1c3c41d133c03bd7e24ab6d0d336f612a9","blockSize":4194304,"blocks":["003a1f7a8075b4d6e3f84adb9c1f0a1c3c41d133c03bd7e24ab6d0d336f612a9"]}}}},"asynckit":{"files":{"bench.js":{"size":1256,"offset":"13215589","integrity":{"algorithm":"SHA256","hash":"b6c4a058c4fd03900f3786ef216322d57553ec83998e19b6d557dc39acfd2f9f","blockSize":4194304,"blocks":["b6c4a058c4fd03900f3786ef216322d57553ec83998e19b6d557dc39acfd2f9f"]}},"index.js":{"size":156,"offset":"13216845","integrity":{"algorithm":"SHA256","hash":"397441fd78b69d7bdaaa48a0f354c8d07086a24414655b0601ab4f0c26e15f2f","blockSize":4194304,"blocks":["397441fd78b69d7bdaaa48a0f354c8d07086a24414655b0601ab4f0c26e15f2f"]}},"lib":{"files":{"abort.js":{"size":497,"offset":"13217001","integrity":{"algorithm":"SHA256","hash":"2c64e26dbd17f4c5ee9e017a098cda40e5eb2234a89cfeb46287f6378b74a66a","blockSize":4194304,"blocks":["2c64e26dbd17f4c5ee9e017a098cda40e5eb2234a89cfeb46287f6378b74a66a"]}},"async.js":{"size":599,"offset":"13217498","integrity":{"algorithm":"SHA256","hash":"cc91aca5b66788252bb01207ec797419eb4add90b88740395e818d12fc77bf87","blockSize":4194304,"blocks":["cc91aca5b66788252bb01207ec797419eb4add90b88740395e818d12fc77bf87"]}},"defer.js":{"size":441,"offset":"13218097","integrity":{"algorithm":"SHA256","hash":"91e4ffb114b4d60af8da177eb388d507a13dc9bc449f68e2d4912083cbc2b1f7","blockSize":4194304,"blocks":["91e4ffb114b4d60af8da177eb388d507a13dc9bc449f68e2d4912083cbc2b1f7"]}},"iterate.js":{"size":1794,"offset":"13218538","integrity":{"algorithm":"SHA256","hash":"1ed503336dc4f4b252852c45f8ea0b3b8eb9eab90dfa11189d9d00de888010ba","blockSize":4194304,"blocks":["1ed503336dc4f4b252852c45f8ea0b3b8eb9eab90dfa11189d9d00de888010ba"]}},"readable_asynckit.js":{"size":1611,"offset":"13220332","integrity":{"algorithm":"SHA256","hash":"a23c413a059f4422ce03f22cd2a373b2fa6930ac47cc103a0e7e26a6ee6d0602","blockSize":4194304,"blocks":["a23c413a059f4422ce03f22cd2a373b2fa6930ac47cc103a0e7e26a6ee6d0602"]}},"readable_parallel.js":{"size":673,"offset":"13221943","integrity":{"algorithm":"SHA256","hash":"d254fc0dc21eb4608336a462592b44cbbcab954d3b6904a26a4766e03dcce202","blockSize":4194304,"blocks":["d254fc0dc21eb4608336a462592b44cbbcab954d3b6904a26a4766e03dcce202"]}},"readable_serial_ordered.js":{"size":941,"offset":"13222616","integrity":{"algorithm":"SHA256","hash":"9ddda7cb6c54a672d8a7e8cdd029d44e35335f7fa6e6102daf0c9f60137b59af","blockSize":4194304,"blocks":["9ddda7cb6c54a672d8a7e8cdd029d44e35335f7fa6e6102daf0c9f60137b59af"]}},"readable_serial.js":{"size":655,"offset":"13223557","integrity":{"algorithm":"SHA256","hash":"b79637514db671ef3dcecde523017542c19e63f8eb93c5a5ab42b2f05bcc9a9d","blockSize":4194304,"blocks":["b79637514db671ef3dcecde523017542c19e63f8eb93c5a5ab42b2f05bcc9a9d"]}},"state.js":{"size":941,"offset":"13224212","integrity":{"algorithm":"SHA256","hash":"9c3fe921ce1c205c62ce1cca97e1eb9335f3ddf066626a36c9a44bd59bd7a2db","blockSize":4194304,"blocks":["9c3fe921ce1c205c62ce1cca97e1eb9335f3ddf066626a36c9a44bd59bd7a2db"]}},"streamify.js":{"size":2964,"offset":"13225153","integrity":{"algorithm":"SHA256","hash":"6112cce2460f0fda4b284d893329fa6a814a86dd4614f782babc2f7de9e7ac0a","blockSize":4194304,"blocks":["6112cce2460f0fda4b284d893329fa6a814a86dd4614f782babc2f7de9e7ac0a"]}},"terminator.js":{"size":533,"offset":"13228117","integrity":{"algorithm":"SHA256","hash":"aeecf0a3c9e141ba3f7711426438de2172521a92b37ec3157b04e1a38e337bd0","blockSize":4194304,"blocks":["aeecf0a3c9e141ba3f7711426438de2172521a92b37ec3157b04e1a38e337bd0"]}}}},"LICENSE":{"size":1078,"offset":"13228650","integrity":{"algorithm":"SHA256","hash":"1953150d5d4b10c7542cee6f6e0c613b2682545233f069d75cfff1936386ce10","blockSize":4194304,"blocks":["1953150d5d4b10c7542cee6f6e0c613b2682545233f069d75cfff1936386ce10"]}},"package.json":{"size":882,"offset":"13229728","integrity":{"algorithm":"SHA256","hash":"c29adb10ce50d5962c687cc872b50df300eec9d658a0f5e218cde379882e7e3d","blockSize":4194304,"blocks":["c29adb10ce50d5962c687cc872b50df300eec9d658a0f5e218cde379882e7e3d"]}},"parallel.js":{"size":1017,"offset":"13230610","integrity":{"algorithm":"SHA256","hash":"5296e5c3581ad9dc1f04aedaf1132df9736c580a326970e3975856f73aebfaea","blockSize":4194304,"blocks":["5296e5c3581ad9dc1f04aedaf1132df9736c580a326970e3975856f73aebfaea"]}},"serial.js":{"size":501,"offset":"13231627","integrity":{"algorithm":"SHA256","hash":"b9bd1e776ab9c386ad2a832e0c02db980cdfc1276ca9969697845c7e45b7795f","blockSize":4194304,"blocks":["b9bd1e776ab9c386ad2a832e0c02db980cdfc1276ca9969697845c7e45b7795f"]}},"serialOrdered.js":{"size":1751,"offset":"13232128","integrity":{"algorithm":"SHA256","hash":"6ee8b4c5e8ded944d0afc55eba298c2bad1c621db1af56b427e96117cf63e41b","blockSize":4194304,"blocks":["6ee8b4c5e8ded944d0afc55eba298c2bad1c621db1af56b427e96117cf63e41b"]}},"stream.js":{"size":703,"offset":"13233879","integrity":{"algorithm":"SHA256","hash":"7d3986c8b5a0902da235697dcd2b080617a148ac505ae959e7a23156a204f9af","blockSize":4194304,"blocks":["7d3986c8b5a0902da235697dcd2b080617a148ac505ae959e7a23156a204f9af"]}}}},"axios":{"files":{"dist":{"files":{"axios.js":{"size":73004,"offset":"13234582","integrity":{"algorithm":"SHA256","hash":"20c84668927c5f6be980a88ef11dfe69836256c3598da239190cbe8fb1587f10","blockSize":4194304,"blocks":["20c84668927c5f6be980a88ef11dfe69836256c3598da239190cbe8fb1587f10"]}},"axios.map":{"size":79228,"offset":"13307586","integrity":{"algorithm":"SHA256","hash":"d2030dd2224ca88be674b9ee196f5c7799c3b67050e83e545e1d0a6b26dbf1b6","blockSize":4194304,"blocks":["d2030dd2224ca88be674b9ee196f5c7799c3b67050e83e545e1d0a6b26dbf1b6"]}},"axios.min.js":{"size":20763,"offset":"13386814","integrity":{"algorithm":"SHA256","hash":"e373b70a5167485c73a265421bcfcd1fdddbae49c9c51605e6d2918a3de4ae0d","blockSize":4194304,"blocks":["e373b70a5167485c73a265421bcfcd1fdddbae49c9c51605e6d2918a3de4ae0d"]}},"axios.min.map":{"size":94010,"offset":"13407577","integrity":{"algorithm":"SHA256","hash":"3a2bc4575a07c61f514b13c5ef8ae0598fa7dee460152e18f6c99009b136c90d","blockSize":4194304,"blocks":["3a2bc4575a07c61f514b13c5ef8ae0598fa7dee460152e18f6c99009b136c90d"]}}}},"index.js":{"size":40,"offset":"13501587","integrity":{"algorithm":"SHA256","hash":"8b785b48db6ae7996d6cefc4bf461e1c35eb893b20c3acfd0a17d9888cfa0663","blockSize":4194304,"blocks":["8b785b48db6ae7996d6cefc4bf461e1c35eb893b20c3acfd0a17d9888cfa0663"]}},"lib":{"files":{"adapters":{"files":{"http.js":{"size":14145,"offset":"13501627","integrity":{"algorithm":"SHA256","hash":"5447dd85f650b53a32c0744f9c45952a8bf07a0f4bbc555242a43cc8d2173085","blockSize":4194304,"blocks":["5447dd85f650b53a32c0744f9c45952a8bf07a0f4bbc555242a43cc8d2173085"]}},"README.md":{"size":915,"offset":"13515772","integrity":{"algorithm":"SHA256","hash":"9b5964e5282869527662da5236c9136098456f71e1cb29ff3e14363acc9b6b22","blockSize":4194304,"blocks":["9b5964e5282869527662da5236c9136098456f71e1cb29ff3e14363acc9b6b22"]}},"xhr.js":{"size":7391,"offset":"13516687","integrity":{"algorithm":"SHA256","hash":"8110a6e12c41b4dfc54fd07ff56add609c6422156b8808db103fbb1d1a321f99","blockSize":4194304,"blocks":["8110a6e12c41b4dfc54fd07ff56add609c6422156b8808db103fbb1d1a321f99"]}}}},"axios.js":{"size":1799,"offset":"13524078","integrity":{"algorithm":"SHA256","hash":"a0baad73630bfd2dafa54ca03959002e3ece22722cc338b2cd398553c92e62d6","blockSize":4194304,"blocks":["a0baad73630bfd2dafa54ca03959002e3ece22722cc338b2cd398553c92e62d6"]}},"cancel":{"files":{"CanceledError.js":{"size":545,"offset":"13525877","integrity":{"algorithm":"SHA256","hash":"20aa1215c8c94cd70c040f75659161c44d31aca875b262c4b96e89aa4d35b163","blockSize":4194304,"blocks":["20aa1215c8c94cd70c040f75659161c44d31aca875b262c4b96e89aa4d35b163"]}},"CancelToken.js":{"size":2497,"offset":"13526422","integrity":{"algorithm":"SHA256","hash":"d1f2acbbb7fe5d22e0f1983866eb462146d0f9d9a8966fc84ef9b591eace1ef2","blockSize":4194304,"blocks":["d1f2acbbb7fe5d22e0f1983866eb462146d0f9d9a8966fc84ef9b591eace1ef2"]}},"isCancel.js":{"size":102,"offset":"13528919","integrity":{"algorithm":"SHA256","hash":"2357b93dae3ead850f3f61ce960a90dc6275f67b339a68da6f50348149081222","blockSize":4194304,"blocks":["2357b93dae3ead850f3f61ce960a90dc6275f67b339a68da6f50348149081222"]}}}},"core":{"files":{"Axios.js":{"size":4582,"offset":"13529021","integrity":{"algorithm":"SHA256","hash":"41108fa2000c76e8ab03c34da5576acf350918de83719f6f249a3ef4783d69ef","blockSize":4194304,"blocks":["41108fa2000c76e8ab03c34da5576acf350918de83719f6f249a3ef4783d69ef"]}},"AxiosError.js":{"size":2254,"offset":"13533603","integrity":{"algorithm":"SHA256","hash":"ee199a6641ab8261e3c434ac5b95552b27f8c7b371e23fd3fd063eedad1942bf","blockSize":4194304,"blocks":["ee199a6641ab8261e3c434ac5b95552b27f8c7b371e23fd3fd063eedad1942bf"]}},"buildFullPath.js":{"size":695,"offset":"13535857","integrity":{"algorithm":"SHA256","hash":"0638de5fcbc775b6f5201831791fb9ecfb89a2b690b3fe814c8e3de80bf2affb","blockSize":4194304,"blocks":["0638de5fcbc775b6f5201831791fb9ecfb89a2b690b3fe814c8e3de80bf2affb"]}},"dispatchRequest.js":{"size":2140,"offset":"13536552","integrity":{"algorithm":"SHA256","hash":"5802d8c24c1a1eea165059991ffb30d0fd7d62fb9af9af6654d213bb734d400d","blockSize":4194304,"blocks":["5802d8c24c1a1eea165059991ffb30d0fd7d62fb9af9af6654d213bb734d400d"]}},"InterceptorManager.js":{"size":1363,"offset":"13538692","integrity":{"algorithm":"SHA256","hash":"db8154428c6365e4c6a84d6098c12be35794218034dc251a6407c7d550981257","blockSize":4194304,"blocks":["db8154428c6365e4c6a84d6098c12be35794218034dc251a6407c7d550981257"]}},"mergeConfig.js":{"size":3235,"offset":"13540055","integrity":{"algorithm":"SHA256","hash":"cd47ea0de85b3677bc70902084bc0feb3e23f3aaae1ff8d04c3f0a2991f2f4ab","blockSize":4194304,"blocks":["cd47ea0de85b3677bc70902084bc0feb3e23f3aaae1ff8d04c3f0a2991f2f4ab"]}},"README.md":{"size":399,"offset":"13543290","integrity":{"algorithm":"SHA256","hash":"6982a869f4da4405a7b74e182ca2eea0da2ade583edd606d182bfc49aee4cd2a","blockSize":4194304,"blocks":["6982a869f4da4405a7b74e182ca2eea0da2ade583edd606d182bfc49aee4cd2a"]}},"settle.js":{"size":799,"offset":"13543689","integrity":{"algorithm":"SHA256","hash":"15b2f8e1cfd844cfed0d472ff0d549da8850b77f5414e872fa0657a67f8ac2a6","blockSize":4194304,"blocks":["15b2f8e1cfd844cfed0d472ff0d549da8850b77f5414e872fa0657a67f8ac2a6"]}},"transformData.js":{"size":637,"offset":"13544488","integrity":{"algorithm":"SHA256","hash":"8067e2fb0ee33676096ee19d558f9625381c6b839523d5d7a42753b4276a243a","blockSize":4194304,"blocks":["8067e2fb0ee33676096ee19d558f9625381c6b839523d5d7a42753b4276a243a"]}}}},"defaults":{"files":{"env":{"files":{"FormData.js":{"size":74,"offset":"13545125","integrity":{"algorithm":"SHA256","hash":"66724b8b3995af4b9c1cc7e6bcbb3ff0b90654c0359d5c8250383f681d4639a7","blockSize":4194304,"blocks":["66724b8b3995af4b9c1cc7e6bcbb3ff0b90654c0359d5c8250383f681d4639a7"]}}}},"index.js":{"size":4071,"offset":"13545199","integrity":{"algorithm":"SHA256","hash":"4b61373fae078a4944f66114dbbad94debbfabc3eb33d8c83c2e561ddcd1ecfa","blockSize":4194304,"blocks":["4b61373fae078a4944f66114dbbad94debbfabc3eb33d8c83c2e561ddcd1ecfa"]}},"transitional.js":{"size":120,"offset":"13549270","integrity":{"algorithm":"SHA256","hash":"e2c9e049f59d9e47680b572ee3e60e1df8e965c10514fb6d9c0e2cb3418e797e","blockSize":4194304,"blocks":["e2c9e049f59d9e47680b572ee3e60e1df8e965c10514fb6d9c0e2cb3418e797e"]}}}},"env":{"files":{"data.js":{"size":43,"offset":"13549390","integrity":{"algorithm":"SHA256","hash":"20d0ece3c8da63e8af41289da66692b16d162a58993440f29eee22572a0ab3cf","blockSize":4194304,"blocks":["20d0ece3c8da63e8af41289da66692b16d162a58993440f29eee22572a0ab3cf"]}},"README.md":{"size":131,"offset":"13549433","integrity":{"algorithm":"SHA256","hash":"9edc67c3c914a8eb30a6d8ccc12d6ccf21937af25bbd05b6176647dbbec13b50","blockSize":4194304,"blocks":["9edc67c3c914a8eb30a6d8ccc12d6ccf21937af25bbd05b6176647dbbec13b50"]}}}},"helpers":{"files":{"bind.js":{"size":256,"offset":"13549564","integrity":{"algorithm":"SHA256","hash":"eeacfadec59cfdabe0ba8299a7f4e3e24df4776ef8667e5bc90c4a5c8d67b12e","blockSize":4194304,"blocks":["eeacfadec59cfdabe0ba8299a7f4e3e24df4776ef8667e5bc90c4a5c8d67b12e"]}},"buildURL.js":{"size":1644,"offset":"13549820","integrity":{"algorithm":"SHA256","hash":"8d9552a2965dd0c29214e4bfc1765bfb8186e2f67d84c718d26e0f481a1bfd83","blockSize":4194304,"blocks":["8d9552a2965dd0c29214e4bfc1765bfb8186e2f67d84c718d26e0f481a1bfd83"]}},"combineURLs.js":{"size":380,"offset":"13551464","integrity":{"algorithm":"SHA256","hash":"0993a77790c955a9d536f10682d3a6943f1ecfb715cf78d6747ce8d5592a5518","blockSize":4194304,"blocks":["0993a77790c955a9d536f10682d3a6943f1ecfb715cf78d6747ce8d5592a5518"]}},"cookies.js":{"size":1435,"offset":"13551844","integrity":{"algorithm":"SHA256","hash":"a8cea4cf13b48254ee77a7fef59b1b030dd40262a9adecb52d3a8583cca0f41c","blockSize":4194304,"blocks":["a8cea4cf13b48254ee77a7fef59b1b030dd40262a9adecb52d3a8583cca0f41c"]}},"deprecatedMethod.js":{"size":727,"offset":"13553279","integrity":{"algorithm":"SHA256","hash":"12e9a9bb1931c31811d1a6f21a81b7a230a61beb8d5bc286cc23727f03c01dc5","blockSize":4194304,"blocks":["12e9a9bb1931c31811d1a6f21a81b7a230a61beb8d5bc286cc23727f03c01dc5"]}},"isAbsoluteURL.js":{"size":561,"offset":"13554006","integrity":{"algorithm":"SHA256","hash":"ac0012f9bca951480bb6840f67b2be295817050666287e250f167aae87aa3e7a","blockSize":4194304,"blocks":["ac0012f9bca951480bb6840f67b2be295817050666287e250f167aae87aa3e7a"]}},"isAxiosError.js":{"size":373,"offset":"13554567","integrity":{"algorithm":"SHA256","hash":"58c8375ecec13b841bd077a8b59f26a6af7d4b50182f7f52d856b12fc0dff8a6","blockSize":4194304,"blocks":["58c8375ecec13b841bd077a8b59f26a6af7d4b50182f7f52d856b12fc0dff8a6"]}},"isURLSameOrigin.js":{"size":2305,"offset":"13554940","integrity":{"algorithm":"SHA256","hash":"9ee48fcc923e1d2dfd1b013575c6e1779dac2cde8bb44a6f552470b0af9718e7","blockSize":4194304,"blocks":["9ee48fcc923e1d2dfd1b013575c6e1779dac2cde8bb44a6f552470b0af9718e7"]}},"normalizeHeaderName.js":{"size":357,"offset":"13557245","integrity":{"algorithm":"SHA256","hash":"64e9c46d4438800ab23965ccfcc2730fbd0cc49fad3f9caa1df1459a08a0b63e","blockSize":4194304,"blocks":["64e9c46d4438800ab23965ccfcc2730fbd0cc49fad3f9caa1df1459a08a0b63e"]}},"null.js":{"size":58,"offset":"13557602","integrity":{"algorithm":"SHA256","hash":"e162cb2439abf6c4e37893d7df9585c145b23f1a8b8bb80c9dd11b0f29105199","blockSize":4194304,"blocks":["e162cb2439abf6c4e37893d7df9585c145b23f1a8b8bb80c9dd11b0f29105199"]}},"parseHeaders.js":{"size":1393,"offset":"13557660","integrity":{"algorithm":"SHA256","hash":"6350505d1fb8d550707baa7cae667fd395d8dedf17edb303b05892d855b13c64","blockSize":4194304,"blocks":["6350505d1fb8d550707baa7cae667fd395d8dedf17edb303b05892d855b13c64"]}},"parseProtocol.js":{"size":152,"offset":"13559053","integrity":{"algorithm":"SHA256","hash":"3586f095dc23121c5ba44f8a9d0136976e88d53d07038cbc7a01e58215f55423","blockSize":4194304,"blocks":["3586f095dc23121c5ba44f8a9d0136976e88d53d07038cbc7a01e58215f55423"]}},"README.md":{"size":351,"offset":"13559205","integrity":{"algorithm":"SHA256","hash":"b8fe226abed5bdd9fc5eed1d9b906f4eff742f838685b5ab4fd08e41fe57c193","blockSize":4194304,"blocks":["b8fe226abed5bdd9fc5eed1d9b906f4eff742f838685b5ab4fd08e41fe57c193"]}},"spread.js":{"size":564,"offset":"13559556","integrity":{"algorithm":"SHA256","hash":"b5198dc9dcf0a51dbe7fdef1393d917e871994ae08c192d7de8f1960f6a6aee2","blockSize":4194304,"blocks":["b5198dc9dcf0a51dbe7fdef1393d917e871994ae08c192d7de8f1960f6a6aee2"]}},"toFormData.js":{"size":1784,"offset":"13560120","integrity":{"algorithm":"SHA256","hash":"4e6e9531fb98119defb1bd1bb3259b68d1d6d69a75262645f2c8e68ce51518d2","blockSize":4194304,"blocks":["4e6e9531fb98119defb1bd1bb3259b68d1d6d69a75262645f2c8e68ce51518d2"]}},"validator.js":{"size":2555,"offset":"13561904","integrity":{"algorithm":"SHA256","hash":"22224aad7904e2d8f36e58174b1aed90ef802cd8fab900859c5d6d1d03487264","blockSize":4194304,"blocks":["22224aad7904e2d8f36e58174b1aed90ef802cd8fab900859c5d6d1d03487264"]}}}},"utils.js":{"size":11991,"offset":"13564459","integrity":{"algorithm":"SHA256","hash":"6e947c1fac89f04384f500115878bd8dc7bd3783354150cb9d836be3e4587c45","blockSize":4194304,"blocks":["6e947c1fac89f04384f500115878bd8dc7bd3783354150cb9d836be3e4587c45"]}}}},"LICENSE":{"size":1066,"offset":"13576450","integrity":{"algorithm":"SHA256","hash":"2b9b7b65d90de57cb7be31a9b996a2526a63dda8359a864278e5568b2b598937","blockSize":4194304,"blocks":["2b9b7b65d90de57cb7be31a9b996a2526a63dda8359a864278e5568b2b598937"]}},"node_modules":{"files":{"form-data":{"files":{"lib":{"files":{"browser.js":{"size":101,"offset":"13577516","integrity":{"algorithm":"SHA256","hash":"cf5b0957442886388f424790b303b5b855d7ef227f68163114aae79f6b212f37","blockSize":4194304,"blocks":["cf5b0957442886388f424790b303b5b855d7ef227f68163114aae79f6b212f37"]}},"form_data.js":{"size":13715,"offset":"13577617","integrity":{"algorithm":"SHA256","hash":"65f1e9a852f2c1dc42db54e8b2a13dc4b65a2e26c8076cf19116ac93fa091bd6","blockSize":4194304,"blocks":["65f1e9a852f2c1dc42db54e8b2a13dc4b65a2e26c8076cf19116ac93fa091bd6"]}},"populate.js":{"size":177,"offset":"13591332","integrity":{"algorithm":"SHA256","hash":"0a273800c22bc3600522aa951135210817eaf3e059d3cf1fbd7a5ba0dc5cb576","blockSize":4194304,"blocks":["0a273800c22bc3600522aa951135210817eaf3e059d3cf1fbd7a5ba0dc5cb576"]}}}},"License":{"size":1118,"offset":"13591509","integrity":{"algorithm":"SHA256","hash":"e5b780d4f38d1d3328e3e53186c4e62d3fa149ea6f2bacd5de5ad0c30ac85343","blockSize":4194304,"blocks":["e5b780d4f38d1d3328e3e53186c4e62d3fa149ea6f2bacd5de5ad0c30ac85343"]}},"package.json":{"size":1268,"offset":"13592627","integrity":{"algorithm":"SHA256","hash":"c2523c5dd90f778f0751d11632c567e8db5ee76003bf4f42f069005471b4226c","blockSize":4194304,"blocks":["c2523c5dd90f778f0751d11632c567e8db5ee76003bf4f42f069005471b4226c"]}},"README.md.bak":{"size":12070,"offset":"13593895","integrity":{"algorithm":"SHA256","hash":"c582a1729e728332fc30b1f9d5a87c52c47e107cc2797a8c93055ea87b1e9fe9","blockSize":4194304,"blocks":["c582a1729e728332fc30b1f9d5a87c52c47e107cc2797a8c93055ea87b1e9fe9"]}}}}}},"package.json":{"size":1915,"offset":"13605965","integrity":{"algorithm":"SHA256","hash":"c0ed6c7f2b55513485bf72885552102d06dd1dda18098f641895c901db2d5068","blockSize":4194304,"blocks":["c0ed6c7f2b55513485bf72885552102d06dd1dda18098f641895c901db2d5068"]}},"SECURITY.md":{"size":105,"offset":"13607880","integrity":{"algorithm":"SHA256","hash":"dcd77631ce5f8d447b84c80520802b9248fcf60ee973dc7fe6dcb19855d7e8d3","blockSize":4194304,"blocks":["dcd77631ce5f8d447b84c80520802b9248fcf60ee973dc7fe6dcb19855d7e8d3"]}},"tsconfig.json":{"size":236,"offset":"13607985","integrity":{"algorithm":"SHA256","hash":"8534af818f900bf92c79e620cc28c6e751eee5fd88e68f45e4df5325fea19f73","blockSize":4194304,"blocks":["8534af818f900bf92c79e620cc28c6e751eee5fd88e68f45e4df5325fea19f73"]}},"tslint.json":{"size":96,"offset":"13608221","integrity":{"algorithm":"SHA256","hash":"b6f3921469506e0bbd7558cf5ee918f8e85085533dc36bb508ba790bad881659","blockSize":4194304,"blocks":["b6f3921469506e0bbd7558cf5ee918f8e85085533dc36bb508ba790bad881659"]}},"UPGRADE_GUIDE.md":{"size":4969,"offset":"13608317","integrity":{"algorithm":"SHA256","hash":"a8eee64d0b3e2c51a16b6b95333691ae560e2ad467333d8acdf2070bc9375093","blockSize":4194304,"blocks":["a8eee64d0b3e2c51a16b6b95333691ae560e2ad467333d8acdf2070bc9375093"]}}}},"base64-js":{"files":{"base64js.min.js":{"size":2192,"offset":"13613286","integrity":{"algorithm":"SHA256","hash":"d2e82495607abf54f16e21de04d90ba9ce1605451667d88425babece988f148b","blockSize":4194304,"blocks":["d2e82495607abf54f16e21de04d90ba9ce1605451667d88425babece988f148b"]}},"index.js":{"size":3932,"offset":"13615478","integrity":{"algorithm":"SHA256","hash":"829eadd8a1a441d25be0cb93b00e16a0d0c20fd294db95d8f2ed87e6954b7182","blockSize":4194304,"blocks":["829eadd8a1a441d25be0cb93b00e16a0d0c20fd294db95d8f2ed87e6954b7182"]}},"LICENSE":{"size":1081,"offset":"13619410","integrity":{"algorithm":"SHA256","hash":"5b37224c080cdcc97c871ada971c224e9926370fe74f11b539aa1cf9f3b1aca1","blockSize":4194304,"blocks":["5b37224c080cdcc97c871ada971c224e9926370fe74f11b539aa1cf9f3b1aca1"]}},"package.json":{"size":814,"offset":"13620491","integrity":{"algorithm":"SHA256","hash":"99dbc783b6b6ad7c38ad7734fce408f359ecb280f14fef106d20e7ea3dc9d697","blockSize":4194304,"blocks":["99dbc783b6b6ad7c38ad7734fce408f359ecb280f14fef106d20e7ea3dc9d697"]}}}},"bignumber.js":{"files":{"bignumber.js":{"size":89684,"offset":"13621305","integrity":{"algorithm":"SHA256","hash":"682a44df47053f288e7a4d73d72ec3a54725489304bea3b14cd5e6db9eb7d858","blockSize":4194304,"blocks":["682a44df47053f288e7a4d73d72ec3a54725489304bea3b14cd5e6db9eb7d858"]}},"bignumber.mjs":{"size":84536,"offset":"13710989","integrity":{"algorithm":"SHA256","hash":"3db063ac3d25984dbb09bb8904dd260534a3825f10b2e43f58cd439b9915a0f1","blockSize":4194304,"blocks":["3db063ac3d25984dbb09bb8904dd260534a3825f10b2e43f58cd439b9915a0f1"]}},"doc":{"files":{"API.html":{"size":87315,"offset":"13795525","integrity":{"algorithm":"SHA256","hash":"74c2f96a9d7098b5a138cf615c0906c1611848ba3511949a805ee55dfcd8e7c4","blockSize":4194304,"blocks":["74c2f96a9d7098b5a138cf615c0906c1611848ba3511949a805ee55dfcd8e7c4"]}}}},"LICENCE.md":{"size":1147,"offset":"13882840","integrity":{"algorithm":"SHA256","hash":"bae444b1adb7c4b8f3222d9c23ff60b2be3a988d1e38aaeb8e55741bca1e8fd3","blockSize":4194304,"blocks":["bae444b1adb7c4b8f3222d9c23ff60b2be3a988d1e38aaeb8e55741bca1e8fd3"]}},"package.json":{"size":810,"offset":"13883987","integrity":{"algorithm":"SHA256","hash":"0bc0b48673f19c993829883229a8bfd91a57e4a12399679f0f8e359d79d8868e","blockSize":4194304,"blocks":["0bc0b48673f19c993829883229a8bfd91a57e4a12399679f0f8e359d79d8868e"]}}}},"bindings":{"files":{"bindings.js":{"size":5986,"offset":"13884797","integrity":{"algorithm":"SHA256","hash":"8e32a0d37f20bd6f7d5bdbf99d041aa27be47cbbe5172ac13ebf7380a10b3bf6","blockSize":4194304,"blocks":["8e32a0d37f20bd6f7d5bdbf99d041aa27be47cbbe5172ac13ebf7380a10b3bf6"]}},"LICENSE.md":{"size":1108,"offset":"13890783","integrity":{"algorithm":"SHA256","hash":"85fde19744c84cfacb04aed732c0392ba221231b26090d3271d2ed865bfc0792","blockSize":4194304,"blocks":["85fde19744c84cfacb04aed732c0392ba221231b26090d3271d2ed865bfc0792"]}},"package.json":{"size":472,"offset":"13891891","integrity":{"algorithm":"SHA256","hash":"cee937d6f0ef6b0c6cd0200cf70e868c36583bd9759da6fe34b38c2045f77e39","blockSize":4194304,"blocks":["cee937d6f0ef6b0c6cd0200cf70e868c36583bd9759da6fe34b38c2045f77e39"]}}}},"bl":{"files":{"bl.js":{"size":2043,"offset":"13892363","integrity":{"algorithm":"SHA256","hash":"71e59aeed4af10ad4268bb35e4c51fe89c640ea9a3f1a9cb597594b02376e249","blockSize":4194304,"blocks":["71e59aeed4af10ad4268bb35e4c51fe89c640ea9a3f1a9cb597594b02376e249"]}},"BufferList.js":{"size":9524,"offset":"13894406","integrity":{"algorithm":"SHA256","hash":"cb21ad5d2dd255e2195460ecd5a0bdd65cff0adee2a9fd6c860951c22c9fd4b8","blockSize":4194304,"blocks":["cb21ad5d2dd255e2195460ecd5a0bdd65cff0adee2a9fd6c860951c22c9fd4b8"]}},"LICENSE.md":{"size":1216,"offset":"13903930","integrity":{"algorithm":"SHA256","hash":"9377db95383c8befacf05c6e465d969d756edf178487ca1344fdf3ba147c596f","blockSize":4194304,"blocks":["9377db95383c8befacf05c6e465d969d756edf178487ca1344fdf3ba147c596f"]}},"node_modules":{"files":{"readable-stream":{"files":{"CONTRIBUTING.md":{"size":1443,"offset":"13905146","integrity":{"algorithm":"SHA256","hash":"56e4e12a6934a2c4d36c7bf893f4d8aefa6c96f9ffcec357dfa6476e36c4f1f5","blockSize":4194304,"blocks":["56e4e12a6934a2c4d36c7bf893f4d8aefa6c96f9ffcec357dfa6476e36c4f1f5"]}},"errors-browser.js":{"size":4197,"offset":"13906589","integrity":{"algorithm":"SHA256","hash":"346033597378d23e59068d120d6257f7cd85ae88c40b1f85c3329cece0d119c4","blockSize":4194304,"blocks":["346033597378d23e59068d120d6257f7cd85ae88c40b1f85c3329cece0d119c4"]}},"errors.js":{"size":3715,"offset":"13910786","integrity":{"algorithm":"SHA256","hash":"7028cca95b2f124345bd5b816e0d8184e7b7d208fe0aa76eb38df43e8644fd03","blockSize":4194304,"blocks":["7028cca95b2f124345bd5b816e0d8184e7b7d208fe0aa76eb38df43e8644fd03"]}},"experimentalWarning.js":{"size":460,"offset":"13914501","integrity":{"algorithm":"SHA256","hash":"5f9beff594347ba6765b806ec36e25699be1407627e2ee91be5d609e40baacb8","blockSize":4194304,"blocks":["5f9beff594347ba6765b806ec36e25699be1407627e2ee91be5d609e40baacb8"]}},"GOVERNANCE.md":{"size":5550,"offset":"13914961","integrity":{"algorithm":"SHA256","hash":"7a521e462d1c6f3b599c44637fb337bbf969dda311510a87236ec539a415331d","blockSize":4194304,"blocks":["7a521e462d1c6f3b599c44637fb337bbf969dda311510a87236ec539a415331d"]}},"lib":{"files":{"_stream_duplex.js":{"size":4399,"offset":"13920511","integrity":{"algorithm":"SHA256","hash":"c3d976062b770b4a88c91d244557bbe9a828b55dc2de1f9ac85c2d5e909389c4","blockSize":4194304,"blocks":["c3d976062b770b4a88c91d244557bbe9a828b55dc2de1f9ac85c2d5e909389c4"]}},"_stream_passthrough.js":{"size":1630,"offset":"13924910","integrity":{"algorithm":"SHA256","hash":"14475641ec1d85dcbf95e2555fedb04bf02f8482e08822a5a09b01ddc6389f5f","blockSize":4194304,"blocks":["14475641ec1d85dcbf95e2555fedb04bf02f8482e08822a5a09b01ddc6389f5f"]}},"_stream_readable.js":{"size":35972,"offset":"13926540","integrity":{"algorithm":"SHA256","hash":"c8d010d85186209997a60b3cf1b653a77a88490a3e11e015c2b5eb2d56c30fe7","blockSize":4194304,"blocks":["c8d010d85186209997a60b3cf1b653a77a88490a3e11e015c2b5eb2d56c30fe7"]}},"_stream_transform.js":{"size":7947,"offset":"13962512","integrity":{"algorithm":"SHA256","hash":"d85bb2b8c6ba3cf71e6ae759342df89dee95981c6856e9f4dc0b85d70cf60b59","blockSize":4194304,"blocks":["d85bb2b8c6ba3cf71e6ae759342df89dee95981c6856e9f4dc0b85d70cf60b59"]}},"_stream_writable.js":{"size":21821,"offset":"13970459","integrity":{"algorithm":"SHA256","hash":"e97dc3728c1ba71414f84cb44cb4c4ecefdf0fdd1c3242a5f447e08ed20cca6f","blockSize":4194304,"blocks":["e97dc3728c1ba71414f84cb44cb4c4ecefdf0fdd1c3242a5f447e08ed20cca6f"]}},"internal":{"files":{"streams":{"files":{"async_iterator.js":{"size":5957,"offset":"13992280","integrity":{"algorithm":"SHA256","hash":"3a752f2fcb0de353265f2d4928126183b5a08d9c9eb6aa4fab74808286e69844","blockSize":4194304,"blocks":["3a752f2fcb0de353265f2d4928126183b5a08d9c9eb6aa4fab74808286e69844"]}},"buffer_list.js":{"size":6335,"offset":"13998237","integrity":{"algorithm":"SHA256","hash":"10f06e02f00b1e4c28afd01cd4b1ecf280c75c59e97fb8611ac014bdd614d2ad","blockSize":4194304,"blocks":["10f06e02f00b1e4c28afd01cd4b1ecf280c75c59e97fb8611ac014bdd614d2ad"]}},"destroy.js":{"size":3117,"offset":"14004572","integrity":{"algorithm":"SHA256","hash":"54c7b9c8319baeffa83840ae559b5910f530bdca530292d9be190236f219a7b3","blockSize":4194304,"blocks":["54c7b9c8319baeffa83840ae559b5910f530bdca530292d9be190236f219a7b3"]}},"end-of-stream.js":{"size":3102,"offset":"14007689","integrity":{"algorithm":"SHA256","hash":"75da6b5b0634012017a6252c6e130335de7775e5a02f10817d02af47afa8bb8d","blockSize":4194304,"blocks":["75da6b5b0634012017a6252c6e130335de7775e5a02f10817d02af47afa8bb8d"]}},"from-browser.js":{"size":101,"offset":"14010791","integrity":{"algorithm":"SHA256","hash":"4b4404c7bd6f66a2175cb7a29c60ce4395c055775ec45eaa35af4357656f604f","blockSize":4194304,"blocks":["4b4404c7bd6f66a2175cb7a29c60ce4395c055775ec45eaa35af4357656f604f"]}},"from.js":{"size":3137,"offset":"14010892","integrity":{"algorithm":"SHA256","hash":"9c67e32e4f371b72c83265a077c7e317866170134ff8dca4cc24313c5037426b","blockSize":4194304,"blocks":["9c67e32e4f371b72c83265a077c7e317866170134ff8dca4cc24313c5037426b"]}},"pipeline.js":{"size":2428,"offset":"14014029","integrity":{"algorithm":"SHA256","hash":"16576b2011c78d0c5ceccdeba7451e83e1bd86f2c3f31c05de7df4ccfb149c2a","blockSize":4194304,"blocks":["16576b2011c78d0c5ceccdeba7451e83e1bd86f2c3f31c05de7df4ccfb149c2a"]}},"state.js":{"size":749,"offset":"14016457","integrity":{"algorithm":"SHA256","hash":"cdbed99634b523be655225df1547cd00295e3041cb02848c652ddad5e6787e49","blockSize":4194304,"blocks":["cdbed99634b523be655225df1547cd00295e3041cb02848c652ddad5e6787e49"]}},"stream-browser.js":{"size":49,"offset":"14017206","integrity":{"algorithm":"SHA256","hash":"72d46a15491627d8fb1489a47d03583cfe5c21902918016ab532b53e615e5a9a","blockSize":4194304,"blocks":["72d46a15491627d8fb1489a47d03583cfe5c21902918016ab532b53e615e5a9a"]}},"stream.js":{"size":36,"offset":"14017255","integrity":{"algorithm":"SHA256","hash":"1e7903927df33aadb3659ecce55266c9c851da65ce6c8b723a60a305c1c5422c","blockSize":4194304,"blocks":["1e7903927df33aadb3659ecce55266c9c851da65ce6c8b723a60a305c1c5422c"]}}}}}}}},"LICENSE":{"size":2337,"offset":"14017291","integrity":{"algorithm":"SHA256","hash":"ec62dc96da0099b87f4511736c87309335527fb7031639493e06c95728dc8c54","blockSize":4194304,"blocks":["ec62dc96da0099b87f4511736c87309335527fb7031639493e06c95728dc8c54"]}},"package.json":{"size":1299,"offset":"14019628","integrity":{"algorithm":"SHA256","hash":"02bac325870a829233ed0f6861fdea78c42cd40cdddff7f5d0c78992924e9172","blockSize":4194304,"blocks":["02bac325870a829233ed0f6861fdea78c42cd40cdddff7f5d0c78992924e9172"]}},"readable-browser.js":{"size":488,"offset":"14020927","integrity":{"algorithm":"SHA256","hash":"c4ff3ea62ef65a2c68ea721dcbd58b621150660facd02be95ebfc556c4dd123f","blockSize":4194304,"blocks":["c4ff3ea62ef65a2c68ea721dcbd58b621150660facd02be95ebfc556c4dd123f"]}},"readable.js":{"size":729,"offset":"14021415","integrity":{"algorithm":"SHA256","hash":"2944f1d3c8c5d5c5e07e7c30d6cbef5fc37440b7c73de47aeb37fa8424f04bf1","blockSize":4194304,"blocks":["2944f1d3c8c5d5c5e07e7c30d6cbef5fc37440b7c73de47aeb37fa8424f04bf1"]}}}},"string_decoder":{"files":{"lib":{"files":{"string_decoder.js":{"size":9465,"offset":"14022144","integrity":{"algorithm":"SHA256","hash":"f1d36d47b2c579063392c1a68963467f2d4f51a069af09eb068d974c63ee3b37","blockSize":4194304,"blocks":["f1d36d47b2c579063392c1a68963467f2d4f51a069af09eb068d974c63ee3b37"]}}}},"LICENSE":{"size":2338,"offset":"14031609","integrity":{"algorithm":"SHA256","hash":"11f2aafb37d06b3ee5bdaf06e9811141d0da05263c316f3d627f45c20d43261b","blockSize":4194304,"blocks":["11f2aafb37d06b3ee5bdaf06e9811141d0da05263c316f3d627f45c20d43261b"]}},"package.json":{"size":542,"offset":"14033947","integrity":{"algorithm":"SHA256","hash":"420c400885ef61e878b7839d8490a7c5fd19ac9d704a30c55acce3c72daffd4a","blockSize":4194304,"blocks":["420c400885ef61e878b7839d8490a7c5fd19ac9d704a30c55acce3c72daffd4a"]}}}}}},"package.json":{"size":764,"offset":"14034489","integrity":{"algorithm":"SHA256","hash":"11fa3b7ac8caafcc005147e8dcb846bfa1a69fbee0c310ff5713253c47c3b7a0","blockSize":4194304,"blocks":["11fa3b7ac8caafcc005147e8dcb846bfa1a69fbee0c310ff5713253c47c3b7a0"]}}}},"buffer":{"files":{"AUTHORS.md":{"size":2672,"offset":"14042296","integrity":{"algorithm":"SHA256","hash":"c30faf5cc3be9f99a672126ffa7f239e640c362be9e2dd4313d9e5310503d98d","blockSize":4194304,"blocks":["c30faf5cc3be9f99a672126ffa7f239e640c362be9e2dd4313d9e5310503d98d"]}},"index.js":{"size":50097,"offset":"14044968","integrity":{"algorithm":"SHA256","hash":"9fab6e5f345b42e0ab83cac4c0790d40b77b21ad6af47ace7364f3f6a1f8d8d4","blockSize":4194304,"blocks":["9fab6e5f345b42e0ab83cac4c0790d40b77b21ad6af47ace7364f3f6a1f8d8d4"]}},"LICENSE":{"size":1106,"offset":"14095065","integrity":{"algorithm":"SHA256","hash":"06bafa45fdad2579ba0e43b0c9b2c6290287c99c4203c300254a462b38a307f6","blockSize":4194304,"blocks":["06bafa45fdad2579ba0e43b0c9b2c6290287c99c4203c300254a462b38a307f6"]}},"package.json":{"size":1306,"offset":"14096171","integrity":{"algorithm":"SHA256","hash":"ac70cf1e28576a37baafe0721a8dc829605482c630fee31c6af9429cc3e12c4f","blockSize":4194304,"blocks":["ac70cf1e28576a37baafe0721a8dc829605482c630fee31c6af9429cc3e12c4f"]}}}},"buffer-alloc":{"files":{"index.js":{"size":664,"offset":"14035818","integrity":{"algorithm":"SHA256","hash":"36afbe032ddb05f900d32cf65e9b72dad28d5a03aa1aeca8db2577087861f2e1","blockSize":4194304,"blocks":["36afbe032ddb05f900d32cf65e9b72dad28d5a03aa1aeca8db2577087861f2e1"]}},"package.json":{"size":285,"offset":"14036482","integrity":{"algorithm":"SHA256","hash":"abaeb3cd674c44fa8d442318f7abc9276285a10f99c0175b822163d9c7eb093a","blockSize":4194304,"blocks":["abaeb3cd674c44fa8d442318f7abc9276285a10f99c0175b822163d9c7eb093a"]}}}},"buffer-alloc-unsafe":{"files":{"index.js":{"size":356,"offset":"14035253","integrity":{"algorithm":"SHA256","hash":"5b7428c09458afcb38b1c3b9a9d928b43b1782afc88273f0989f9a1306375a63","blockSize":4194304,"blocks":["5b7428c09458afcb38b1c3b9a9d928b43b1782afc88273f0989f9a1306375a63"]}},"package.json":{"size":209,"offset":"14035609","integrity":{"algorithm":"SHA256","hash":"057152e5a6694909c123a1b8e041aee1e0986463b6a22af2537e2b762d80b349","blockSize":4194304,"blocks":["057152e5a6694909c123a1b8e041aee1e0986463b6a22af2537e2b762d80b349"]}}}},"buffer-fill":{"files":{"index.js":{"size":2433,"offset":"14036767","integrity":{"algorithm":"SHA256","hash":"ba9b2aa2aaa451f1a51eb5c76afa746f80f3309cb45565c471a8d29b616919cf","blockSize":4194304,"blocks":["ba9b2aa2aaa451f1a51eb5c76afa746f80f3309cb45565c471a8d29b616919cf"]}},"package.json":{"size":230,"offset":"14039200","integrity":{"algorithm":"SHA256","hash":"30136f06e4e51a95d7a0b6774f490b7507e670be3ae194eb6875fdb420f6f280","blockSize":4194304,"blocks":["30136f06e4e51a95d7a0b6774f490b7507e670be3ae194eb6875fdb420f6f280"]}}}},"buffer-from":{"files":{"index.js":{"size":1595,"offset":"14039430","integrity":{"algorithm":"SHA256","hash":"789fbb44a10307bd2c0c958ca4bc58063211f0e5dae8dd94ff4a65a86ae70c9a","blockSize":4194304,"blocks":["789fbb44a10307bd2c0c958ca4bc58063211f0e5dae8dd94ff4a65a86ae70c9a"]}},"LICENSE":{"size":1078,"offset":"14041025","integrity":{"algorithm":"SHA256","hash":"14275f5c8139d02054c5259d52a88ccbba662a86af18c30f071c8d082dc6004c","blockSize":4194304,"blocks":["14275f5c8139d02054c5259d52a88ccbba662a86af18c30f071c8d082dc6004c"]}},"package.json":{"size":193,"offset":"14042103","integrity":{"algorithm":"SHA256","hash":"2a2c3323099dbfaae3c235391ab5f3bc639e37e804d30a98e3b7b6d63d437f1b","blockSize":4194304,"blocks":["2a2c3323099dbfaae3c235391ab5f3bc639e37e804d30a98e3b7b6d63d437f1b"]}}}},"cache-content-type":{"files":{"History.md":{"size":540,"offset":"14097477","integrity":{"algorithm":"SHA256","hash":"9bb1c56037ba6171fddc456d4546b3b529c0c6f8767a2513a3c6cae1eb494a1c","blockSize":4194304,"blocks":["9bb1c56037ba6171fddc456d4546b3b529c0c6f8767a2513a3c6cae1eb494a1c"]}},"index.js":{"size":317,"offset":"14098017","integrity":{"algorithm":"SHA256","hash":"8c93cc14bc54dfe680fc040ba741e976c42282ff414a546735968ee65f87897d","blockSize":4194304,"blocks":["8c93cc14bc54dfe680fc040ba741e976c42282ff414a546735968ee65f87897d"]}},"package.json":{"size":687,"offset":"14098334","integrity":{"algorithm":"SHA256","hash":"919587a7ef23ce017526ca99f973522995784780b1475fda18c54ba71cc08b56","blockSize":4194304,"blocks":["919587a7ef23ce017526ca99f973522995784780b1475fda18c54ba71cc08b56"]}}}},"camelcase":{"files":{"index.js":{"size":2098,"offset":"14099021","integrity":{"algorithm":"SHA256","hash":"c335ea757e3898080795f25093827d97b8fb00d0f3ac04dd56c80eecdac8eef3","blockSize":4194304,"blocks":["c335ea757e3898080795f25093827d97b8fb00d0f3ac04dd56c80eecdac8eef3"]}},"license":{"size":1109,"offset":"14101119","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":529,"offset":"14102228","integrity":{"algorithm":"SHA256","hash":"e82c3e49ac38c081235738e5d61afac1b4fed7521ae4365f862929a4a7a2f6c9","blockSize":4194304,"blocks":["e82c3e49ac38c081235738e5d61afac1b4fed7521ae4365f862929a4a7a2f6c9"]}}}},"cliui":{"files":{"index.js":{"size":8278,"offset":"14102757","integrity":{"algorithm":"SHA256","hash":"88974e036a871d96e072a770a8d44053896c484a0e1dbd7e267532521dc1c0a3","blockSize":4194304,"blocks":["88974e036a871d96e072a770a8d44053896c484a0e1dbd7e267532521dc1c0a3"]}},"LICENSE.txt":{"size":731,"offset":"14111035","integrity":{"algorithm":"SHA256","hash":"2dc0465729366c3a7890dfa9e972a1ba7048a26c02116fb8b419a6a1ac110149","blockSize":4194304,"blocks":["2dc0465729366c3a7890dfa9e972a1ba7048a26c02116fb8b419a6a1ac110149"]}},"node_modules":{"files":{"ansi-regex":{"files":{"index.js":{"size":367,"offset":"14111766","integrity":{"algorithm":"SHA256","hash":"b03490694d3582453bf41972298bd018f39886a72d895db6d5f98ee057462c62","blockSize":4194304,"blocks":["b03490694d3582453bf41972298bd018f39886a72d895db6d5f98ee057462c62"]}},"license":{"size":1109,"offset":"14112133","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":432,"offset":"14113242","integrity":{"algorithm":"SHA256","hash":"8d03c44ad44ae4daa3031bfe40212da65d008106563ce8d4f1daa6d96640515f","blockSize":4194304,"blocks":["8d03c44ad44ae4daa3031bfe40212da65d008106563ce8d4f1daa6d96640515f"]}}}},"ansi-styles":{"files":{"index.js":{"size":3574,"offset":"14113674","integrity":{"algorithm":"SHA256","hash":"c902228053a3a64c6e8f5a651f4d2a960f04fb6ae579f799287bd38007144d86","blockSize":4194304,"blocks":["c902228053a3a64c6e8f5a651f4d2a960f04fb6ae579f799287bd38007144d86"]}},"license":{"size":1109,"offset":"14117248","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":544,"offset":"14118357","integrity":{"algorithm":"SHA256","hash":"b7bc11e9a343ebd0ba60e38228d19e3ec312eb3e97cec28fb05896a648d21abd","blockSize":4194304,"blocks":["b7bc11e9a343ebd0ba60e38228d19e3ec312eb3e97cec28fb05896a648d21abd"]}}}},"color-convert":{"files":{"conversions.js":{"size":16850,"offset":"14118901","integrity":{"algorithm":"SHA256","hash":"cd19e9535ad4ef93d198028928f7bb3ba49ad93e58acfc5ea814229b99900e8b","blockSize":4194304,"blocks":["cd19e9535ad4ef93d198028928f7bb3ba49ad93e58acfc5ea814229b99900e8b"]}},"index.js":{"size":1725,"offset":"14135751","integrity":{"algorithm":"SHA256","hash":"5aa98c1ffb6418e057a67b152123af31e8aff4c63e1e61058f9e66629c0133a4","blockSize":4194304,"blocks":["5aa98c1ffb6418e057a67b152123af31e8aff4c63e1e61058f9e66629c0133a4"]}},"LICENSE":{"size":1087,"offset":"14137476","integrity":{"algorithm":"SHA256","hash":"693866fc419c6f61c8570438ec00659d156ec2b4d4a4d04091711f5f11a365d4","blockSize":4194304,"blocks":["693866fc419c6f61c8570438ec00659d156ec2b4d4a4d04091711f5f11a365d4"]}},"package.json":{"size":429,"offset":"14138563","integrity":{"algorithm":"SHA256","hash":"0007ebdf7b51a2416adbc68d40123cd1f41c843ca50331a40e881afaeadd98ab","blockSize":4194304,"blocks":["0007ebdf7b51a2416adbc68d40123cd1f41c843ca50331a40e881afaeadd98ab"]}},"route.js":{"size":2227,"offset":"14138992","integrity":{"algorithm":"SHA256","hash":"5dcaba9339b703798cc469f834d2500176d9f6d366094240389a19ee0fc0e1db","blockSize":4194304,"blocks":["5dcaba9339b703798cc469f834d2500176d9f6d366094240389a19ee0fc0e1db"]}}}},"color-name":{"files":{".eslintrc.json":{"size":1160,"offset":"14141219","integrity":{"algorithm":"SHA256","hash":"262b88bd899300f19a4630a963f8f59ab4611a7b9b518af5583c7ddb07a489c4","blockSize":4194304,"blocks":["262b88bd899300f19a4630a963f8f59ab4611a7b9b518af5583c7ddb07a489c4"]}},"index.js":{"size":4617,"offset":"14142379","integrity":{"algorithm":"SHA256","hash":"97dabd7ebb70c33c19ccfa6956377fc722d9769924903f42a3bede30d83a8592","blockSize":4194304,"blocks":["97dabd7ebb70c33c19ccfa6956377fc722d9769924903f42a3bede30d83a8592"]}},"LICENSE":{"size":1085,"offset":"14146996","integrity":{"algorithm":"SHA256","hash":"c064f7a3e353bc1bc977f3c897941c75ef763f44f41677e0a15370ca0853d6e2","blockSize":4194304,"blocks":["c064f7a3e353bc1bc977f3c897941c75ef763f44f41677e0a15370ca0853d6e2"]}},"package.json":{"size":342,"offset":"14148081","integrity":{"algorithm":"SHA256","hash":"8102870499a529dfd2cc20d57cc1eddc1316c75a317a703b591ddd8247c93242","blockSize":4194304,"blocks":["8102870499a529dfd2cc20d57cc1eddc1316c75a317a703b591ddd8247c93242"]}}}},"emoji-regex":{"files":{"es2015":{"files":{"index.js":{"size":8143,"offset":"14148423","integrity":{"algorithm":"SHA256","hash":"ed2d085cd3fd0d43e559eab9d22118de16f08c863e41c90b922acb555eb7b0f8","blockSize":4194304,"blocks":["ed2d085cd3fd0d43e559eab9d22118de16f08c863e41c90b922acb555eb7b0f8"]}},"text.js":{"size":8144,"offset":"14156566","integrity":{"algorithm":"SHA256","hash":"12542e6fc4fbde51eda89fb7a1fd6d18a0ab313949220cb6020651ea323e1d2b","blockSize":4194304,"blocks":["12542e6fc4fbde51eda89fb7a1fd6d18a0ab313949220cb6020651ea323e1d2b"]}}}},"index.js":{"size":7391,"offset":"14164710","integrity":{"algorithm":"SHA256","hash":"b3e5150678165453f96401e87c1032999a5dd16a9c73c2269123c82b7fdf9fb2","blockSize":4194304,"blocks":["b3e5150678165453f96401e87c1032999a5dd16a9c73c2269123c82b7fdf9fb2"]}},"LICENSE-MIT.txt":{"size":1077,"offset":"14172101","integrity":{"algorithm":"SHA256","hash":"483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a","blockSize":4194304,"blocks":["483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a"]}},"package.json":{"size":882,"offset":"14173178","integrity":{"algorithm":"SHA256","hash":"1798b10a412d441adb3ab52fa3e6cd684cebb9d603d586df3b9dda1e21dd7d7e","blockSize":4194304,"blocks":["1798b10a412d441adb3ab52fa3e6cd684cebb9d603d586df3b9dda1e21dd7d7e"]}},"text.js":{"size":7392,"offset":"14174060","integrity":{"algorithm":"SHA256","hash":"6b19501c953416f4de375a9485b53c3d8fcc29036140c6fe2ea82db8117b562c","blockSize":4194304,"blocks":["6b19501c953416f4de375a9485b53c3d8fcc29036140c6fe2ea82db8117b562c"]}}}},"is-fullwidth-code-point":{"files":{"index.js":{"size":1393,"offset":"14181452","integrity":{"algorithm":"SHA256","hash":"bc9e2fb309b067655b6abbb764941ac48014366a3662db209cf0e9d0a4db54dd","blockSize":4194304,"blocks":["bc9e2fb309b067655b6abbb764941ac48014366a3662db209cf0e9d0a4db54dd"]}},"license":{"size":1119,"offset":"14182845","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":481,"offset":"14183964","integrity":{"algorithm":"SHA256","hash":"48ff861924fc1250248e43bf2d2cbe2cbd36fada039f8766943ba0d5713d5858","blockSize":4194304,"blocks":["48ff861924fc1250248e43bf2d2cbe2cbd36fada039f8766943ba0d5713d5858"]}}}},"string-width":{"files":{"index.js":{"size":751,"offset":"14184445","integrity":{"algorithm":"SHA256","hash":"85747e89f4c8eecc82130834c3fade5dcb1ead57c3ed779088bb3f9bd7af0262","blockSize":4194304,"blocks":["85747e89f4c8eecc82130834c3fade5dcb1ead57c3ed779088bb3f9bd7af0262"]}},"license":{"size":1109,"offset":"14185196","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":594,"offset":"14186305","integrity":{"algorithm":"SHA256","hash":"2f8338a2258a645bd57d6111d948cd4e5a4fe75bad5b9e71cdbb6fd9a0714f9d","blockSize":4194304,"blocks":["2f8338a2258a645bd57d6111d948cd4e5a4fe75bad5b9e71cdbb6fd9a0714f9d"]}}}},"strip-ansi":{"files":{"index.js":{"size":220,"offset":"14186899","integrity":{"algorithm":"SHA256","hash":"586d0220463526ec46abd9a458e4c946124f9df915b97817fc2f49cdf6cd5101","blockSize":4194304,"blocks":["586d0220463526ec46abd9a458e4c946124f9df915b97817fc2f49cdf6cd5101"]}},"license":{"size":1109,"offset":"14187119","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":516,"offset":"14188228","integrity":{"algorithm":"SHA256","hash":"73c93bc996f839339ef97fa378fb93cebad6698f0d1d1bd9b96f3e340ddc9318","blockSize":4194304,"blocks":["73c93bc996f839339ef97fa378fb93cebad6698f0d1d1bd9b96f3e340ddc9318"]}}}},"wrap-ansi":{"files":{"index.js":{"size":4661,"offset":"14188744","integrity":{"algorithm":"SHA256","hash":"0c41491e9e897ab4c2d4873b01cb6e5a21564b61a481f56a3bdcf5b777082b8e","blockSize":4194304,"blocks":["0c41491e9e897ab4c2d4873b01cb6e5a21564b61a481f56a3bdcf5b777082b8e"]}},"license":{"size":1109,"offset":"14193405","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":629,"offset":"14194514","integrity":{"algorithm":"SHA256","hash":"0e2b92a53783532331c3825581acf0b590acb48a26b28f9a629933ddd0b292b4","blockSize":4194304,"blocks":["0e2b92a53783532331c3825581acf0b590acb48a26b28f9a629933ddd0b292b4"]}}}}}},"package.json":{"size":973,"offset":"14195143","integrity":{"algorithm":"SHA256","hash":"00bbdf15ca0bf7ce75f06e51b2d2b5f3f79131c55726d6a9d3231cfaca0b6343","blockSize":4194304,"blocks":["00bbdf15ca0bf7ce75f06e51b2d2b5f3f79131c55726d6a9d3231cfaca0b6343"]}}}},"clone-response":{"files":{"LICENSE":{"size":1068,"offset":"14196116","integrity":{"algorithm":"SHA256","hash":"861908ec818ff6142fdd6c4b66d6264c206d3d5a46003b1342e1853a9a85abac","blockSize":4194304,"blocks":["861908ec818ff6142fdd6c4b66d6264c206d3d5a46003b1342e1853a9a85abac"]}},"package.json":{"size":711,"offset":"14197184","integrity":{"algorithm":"SHA256","hash":"35a6f683ed6776754565282bed8d0b99a79f8c2fbfa1581d66498ca9416b263b","blockSize":4194304,"blocks":["35a6f683ed6776754565282bed8d0b99a79f8c2fbfa1581d66498ca9416b263b"]}},"src":{"files":{"index.js":{"size":401,"offset":"14197895","integrity":{"algorithm":"SHA256","hash":"4e6086dcabe41ca7a48de3c053e0d97eb7f67b92bee566534417b64bbc756499","blockSize":4194304,"blocks":["4e6086dcabe41ca7a48de3c053e0d97eb7f67b92bee566534417b64bbc756499"]}}}}}},"co":{"files":{"History.md":{"size":3629,"offset":"14198296","integrity":{"algorithm":"SHA256","hash":"9e48bb3fa6ff1a0f8dc584b76eea74ec5e029ddfb8c4b6f732064dd804149c35","blockSize":4194304,"blocks":["9e48bb3fa6ff1a0f8dc584b76eea74ec5e029ddfb8c4b6f732064dd804149c35"]}},"index.js":{"size":5036,"offset":"14201925","integrity":{"algorithm":"SHA256","hash":"00f5a6b863a35d1ec7d0170c808ef885979ac20a5beac7c8926e0517d75617ab","blockSize":4194304,"blocks":["00f5a6b863a35d1ec7d0170c808ef885979ac20a5beac7c8926e0517d75617ab"]}},"LICENSE":{"size":1104,"offset":"14206961","integrity":{"algorithm":"SHA256","hash":"29f4d474804f60aae177d7fed67d0d613d00006640cc9cf80077eef03fb9a2cc","blockSize":4194304,"blocks":["29f4d474804f60aae177d7fed67d0d613d00006640cc9cf80077eef03fb9a2cc"]}},"package.json":{"size":372,"offset":"14208065","integrity":{"algorithm":"SHA256","hash":"c22398095b49e6c72994373cbe9eaa7869b3396be2114044bd632ec7410d41f8","blockSize":4194304,"blocks":["c22398095b49e6c72994373cbe9eaa7869b3396be2114044bd632ec7410d41f8"]}}}},"combined-stream":{"files":{"lib":{"files":{"combined_stream.js":{"size":4687,"offset":"14208437","integrity":{"algorithm":"SHA256","hash":"f3ef1f988ac4292df828cead080b96a2a97bdce1ab8f44f76345820c58ce7b59","blockSize":4194304,"blocks":["f3ef1f988ac4292df828cead080b96a2a97bdce1ab8f44f76345820c58ce7b59"]}}}},"License":{"size":1085,"offset":"14213124","integrity":{"algorithm":"SHA256","hash":"47eb8ca82c798246774946d1be0f9aa08f025fa8325ced0947aeeb4c05fe5547","blockSize":4194304,"blocks":["47eb8ca82c798246774946d1be0f9aa08f025fa8325ced0947aeeb4c05fe5547"]}},"package.json":{"size":588,"offset":"14214209","integrity":{"algorithm":"SHA256","hash":"7485ada07ff419e2d23aaf3aa33d2385f2a3ffe9bfa0e3d70b94002c15cc2f84","blockSize":4194304,"blocks":["7485ada07ff419e2d23aaf3aa33d2385f2a3ffe9bfa0e3d70b94002c15cc2f84"]}}}},"content-disposition":{"files":{"HISTORY.md":{"size":1020,"offset":"14214797","integrity":{"algorithm":"SHA256","hash":"a4d8777eee00a49a897e8ed80b8deaee05915106d03a5b652e0ed1ca5bd605fd","blockSize":4194304,"blocks":["a4d8777eee00a49a897e8ed80b8deaee05915106d03a5b652e0ed1ca5bd605fd"]}},"index.js":{"size":10594,"offset":"14215817","integrity":{"algorithm":"SHA256","hash":"e86a88a5d1a9dd74faa753ca4e47a78e38ae930f3206e5e887cf6cb0ad70cbf8","blockSize":4194304,"blocks":["e86a88a5d1a9dd74faa753ca4e47a78e38ae930f3206e5e887cf6cb0ad70cbf8"]}},"LICENSE":{"size":1094,"offset":"14226411","integrity":{"algorithm":"SHA256","hash":"bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400","blockSize":4194304,"blocks":["bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400"]}},"package.json":{"size":785,"offset":"14227505","integrity":{"algorithm":"SHA256","hash":"28fbd46dca76b414ff324c0d45273160eeff9bc0d2c64e2e29390d2e55fabb9c","blockSize":4194304,"blocks":["28fbd46dca76b414ff324c0d45273160eeff9bc0d2c64e2e29390d2e55fabb9c"]}}}},"content-type":{"files":{"HISTORY.md":{"size":436,"offset":"14228290","integrity":{"algorithm":"SHA256","hash":"718e7c4b1385550a4563a036778ae75edd3e5bdd255b4f48fe2a1195636c367b","blockSize":4194304,"blocks":["718e7c4b1385550a4563a036778ae75edd3e5bdd255b4f48fe2a1195636c367b"]}},"index.js":{"size":4809,"offset":"14228726","integrity":{"algorithm":"SHA256","hash":"85ffe59d050974725c044a0cead644db76f4bffe823753723670244b90629c5b","blockSize":4194304,"blocks":["85ffe59d050974725c044a0cead644db76f4bffe823753723670244b90629c5b"]}},"LICENSE":{"size":1089,"offset":"14233535","integrity":{"algorithm":"SHA256","hash":"257aed98914108e91a337912727b6a802eef218248507f74b76faffaff517a38","blockSize":4194304,"blocks":["257aed98914108e91a337912727b6a802eef218248507f74b76faffaff517a38"]}},"package.json":{"size":651,"offset":"14234624","integrity":{"algorithm":"SHA256","hash":"e1ac3a1d1427b2021fb9448751315a60df00a40e49ff4de07231f5b298e64a1f","blockSize":4194304,"blocks":["e1ac3a1d1427b2021fb9448751315a60df00a40e49ff4de07231f5b298e64a1f"]}}}},"cookies":{"files":{"HISTORY.md":{"size":2699,"offset":"14235275","integrity":{"algorithm":"SHA256","hash":"441cf9403bf70ee1e5a59789f88c2ced259b5143d2dffb4167d1bdafd91178ed","blockSize":4194304,"blocks":["441cf9403bf70ee1e5a59789f88c2ced259b5143d2dffb4167d1bdafd91178ed"]}},"index.js":{"size":6133,"offset":"14237974","integrity":{"algorithm":"SHA256","hash":"08cf0a4bae969bb93262bb68cf0be0bcf81e0814c994a42236214ec14944a3a9","blockSize":4194304,"blocks":["08cf0a4bae969bb93262bb68cf0be0bcf81e0814c994a42236214ec14944a3a9"]}},"LICENSE":{"size":1166,"offset":"14244107","integrity":{"algorithm":"SHA256","hash":"2d31e7baba83cba3529e6e2b51e3365110d7dc89f2ff9fd319c46385989f1977","blockSize":4194304,"blocks":["2d31e7baba83cba3529e6e2b51e3365110d7dc89f2ff9fd319c46385989f1977"]}},"package.json":{"size":586,"offset":"14245273","integrity":{"algorithm":"SHA256","hash":"85c6e3648bf8c83edc8bb46b01629d4f62a8c52daeec788c54e1e86c0ab1577c","blockSize":4194304,"blocks":["85c6e3648bf8c83edc8bb46b01629d4f62a8c52daeec788c54e1e86c0ab1577c"]}}}},"csstype":{"files":{"index.js.flow":{"size":313873,"offset":"14245859","integrity":{"algorithm":"SHA256","hash":"30edc43782b343d36f28d6da8b09d48b7e4e3b98bc59b616aa96bb6698bc3568","blockSize":4194304,"blocks":["30edc43782b343d36f28d6da8b09d48b7e4e3b98bc59b616aa96bb6698bc3568"]}},"LICENSE":{"size":1062,"offset":"14559732","integrity":{"algorithm":"SHA256","hash":"11d55bd4541c75ee7879547ac49089c489163dae49551389713c3d026cab383e","blockSize":4194304,"blocks":["11d55bd4541c75ee7879547ac49089c489163dae49551389713c3d026cab383e"]}},"package.json":{"size":1392,"offset":"14560794","integrity":{"algorithm":"SHA256","hash":"55e63877b60ba8f4f389e757b5c235fb73b72d5153a75194f8900fcf4a042db0","blockSize":4194304,"blocks":["55e63877b60ba8f4f389e757b5c235fb73b72d5153a75194f8900fcf4a042db0"]}}}},"decamelize":{"files":{"index.js":{"size":323,"offset":"14562186","integrity":{"algorithm":"SHA256","hash":"d51dde17c67ddf486a827fec29a9ecb3036ad36bb39089729184ea285b3ded4e","blockSize":4194304,"blocks":["d51dde17c67ddf486a827fec29a9ecb3036ad36bb39089729184ea285b3ded4e"]}},"license":{"size":1119,"offset":"14562509","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":491,"offset":"14563628","integrity":{"algorithm":"SHA256","hash":"5bee2155e636cae67120c126a2fdea7e32e3ddb436320c3a5c72908653144785","blockSize":4194304,"blocks":["5bee2155e636cae67120c126a2fdea7e32e3ddb436320c3a5c72908653144785"]}}}},"deep-equal":{"files":{"index.js":{"size":3051,"offset":"14564119","integrity":{"algorithm":"SHA256","hash":"8fec7f5ed6f7ee6dac8a0aad28b3a542e879a309c0efe0261e53eb273d9e5163","blockSize":4194304,"blocks":["8fec7f5ed6f7ee6dac8a0aad28b3a542e879a309c0efe0261e53eb273d9e5163"]}},"lib":{"files":{"is_arguments.js":{"size":641,"offset":"14567170","integrity":{"algorithm":"SHA256","hash":"05a054dd7358b82fdd023007b26b0d8e8a2fbe525527d17c12b1d3fdf01f1aac","blockSize":4194304,"blocks":["05a054dd7358b82fdd023007b26b0d8e8a2fbe525527d17c12b1d3fdf01f1aac"]}},"keys.js":{"size":202,"offset":"14567811","integrity":{"algorithm":"SHA256","hash":"885f882223781bf532c823577b8a048af691cab203c3fa60240402ae9de90a1c","blockSize":4194304,"blocks":["885f882223781bf532c823577b8a048af691cab203c3fa60240402ae9de90a1c"]}}}},"LICENSE":{"size":1073,"offset":"14568013","integrity":{"algorithm":"SHA256","hash":"435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b","blockSize":4194304,"blocks":["435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b"]}},"package.json":{"size":817,"offset":"14569086","integrity":{"algorithm":"SHA256","hash":"af8777894a3d7615df21b87f0f21bc884fde7e1742c65befa929fdc25760ea6f","blockSize":4194304,"blocks":["af8777894a3d7615df21b87f0f21bc884fde7e1742c65befa929fdc25760ea6f"]}}}},"default-shell":{"files":{"index.js":{"size":258,"offset":"14569903","integrity":{"algorithm":"SHA256","hash":"69d5cd9b4615aa3fb6d3febdac149dfdbd6a251b8e9e9ae4a22fdca3077cc274","blockSize":4194304,"blocks":["69d5cd9b4615aa3fb6d3febdac149dfdbd6a251b8e9e9ae4a22fdca3077cc274"]}},"license":{"size":1119,"offset":"14570161","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":412,"offset":"14571280","integrity":{"algorithm":"SHA256","hash":"6049b727fb20414deb1f281c86aaab0b926a5a296c590057c9b8be8e902c5d27","blockSize":4194304,"blocks":["6049b727fb20414deb1f281c86aaab0b926a5a296c590057c9b8be8e902c5d27"]}}}},"delayed-stream":{"files":{"lib":{"files":{"delayed_stream.js":{"size":2319,"offset":"14571692","integrity":{"algorithm":"SHA256","hash":"05f147c24e59e1c538329711b6e4a389fbbf321290fe176cda18750298d77c72","blockSize":4194304,"blocks":["05f147c24e59e1c538329711b6e4a389fbbf321290fe176cda18750298d77c72"]}}}},"License":{"size":1085,"offset":"14574011","integrity":{"algorithm":"SHA256","hash":"47eb8ca82c798246774946d1be0f9aa08f025fa8325ced0947aeeb4c05fe5547","blockSize":4194304,"blocks":["47eb8ca82c798246774946d1be0f9aa08f025fa8325ced0947aeeb4c05fe5547"]}},"Makefile":{"size":57,"offset":"14575096","integrity":{"algorithm":"SHA256","hash":"90e1ae0474085186499fe5a5c1d6ae31726175fa4e1a2158c9914be4bfc5bae6","blockSize":4194304,"blocks":["90e1ae0474085186499fe5a5c1d6ae31726175fa4e1a2158c9914be4bfc5bae6"]}},"package.json":{"size":574,"offset":"14575153","integrity":{"algorithm":"SHA256","hash":"b92d136b7eb2c73d86eff7181da37de00eb1e7bf0b103d9925f2925abaec3956","blockSize":4194304,"blocks":["b92d136b7eb2c73d86eff7181da37de00eb1e7bf0b103d9925f2925abaec3956"]}}}},"delegates":{"files":{"History.md":{"size":336,"offset":"14575727","integrity":{"algorithm":"SHA256","hash":"f4686952cccf52b0cfdee52d5f2960dc5e8097a608987b22339aca0f18a82b89","blockSize":4194304,"blocks":["f4686952cccf52b0cfdee52d5f2960dc5e8097a608987b22339aca0f18a82b89"]}},"index.js":{"size":2065,"offset":"14576063","integrity":{"algorithm":"SHA256","hash":"db3ee6ab2fdabdffc19d5df0cf9461488329379cbb0640eb73203a35197960aa","blockSize":4194304,"blocks":["db3ee6ab2fdabdffc19d5df0cf9461488329379cbb0640eb73203a35197960aa"]}},"License":{"size":1079,"offset":"14578128","integrity":{"algorithm":"SHA256","hash":"cb4e4296dfc59387f7c6ef71b670cde7050617313fcea7173995176fec0fcef2","blockSize":4194304,"blocks":["cb4e4296dfc59387f7c6ef71b670cde7050617313fcea7173995176fec0fcef2"]}},"Makefile":{"size":100,"offset":"14579207","integrity":{"algorithm":"SHA256","hash":"6438415ebea1a06c38fb94429c95be38996b1e774f6515d9a48e5d48df20e9c9","blockSize":4194304,"blocks":["6438415ebea1a06c38fb94429c95be38996b1e774f6515d9a48e5d48df20e9c9"]}},"package.json":{"size":270,"offset":"14579307","integrity":{"algorithm":"SHA256","hash":"80f90640979f3af7f3f9c6d590815a4cb26b47902b1266da86b0b0d6c71a1239","blockSize":4194304,"blocks":["80f90640979f3af7f3f9c6d590815a4cb26b47902b1266da86b0b0d6c71a1239"]}}}},"depd":{"files":{"History.md":{"size":2256,"offset":"14579577","integrity":{"algorithm":"SHA256","hash":"b6e94899b155a3f707694b8ced212e1b01f43d0953d89e1c5b718b3e5fb896fa","blockSize":4194304,"blocks":["b6e94899b155a3f707694b8ced212e1b01f43d0953d89e1c5b718b3e5fb896fa"]}},"index.js":{"size":10932,"offset":"14581833","integrity":{"algorithm":"SHA256","hash":"4d587a5662e20a7bb9bfe6555afe5987e1b80303a819b447394f37a93297ee91","blockSize":4194304,"blocks":["4d587a5662e20a7bb9bfe6555afe5987e1b80303a819b447394f37a93297ee91"]}},"lib":{"files":{"browser":{"files":{"index.js":{"size":1512,"offset":"14592765","integrity":{"algorithm":"SHA256","hash":"10b4d4a4e9d14e9e6a5ab7ced64405ef90e6bec94d479a8e223cbba88828ad79","blockSize":4194304,"blocks":["10b4d4a4e9d14e9e6a5ab7ced64405ef90e6bec94d479a8e223cbba88828ad79"]}}}}}},"LICENSE":{"size":1094,"offset":"14594277","integrity":{"algorithm":"SHA256","hash":"bd134b41da59e452fb5a1d366b660886f741c87c2bf9428e93764c419fbc40f5","blockSize":4194304,"blocks":["bd134b41da59e452fb5a1d366b660886f741c87c2bf9428e93764c419fbc40f5"]}},"package.json":{"size":836,"offset":"14595371","integrity":{"algorithm":"SHA256","hash":"ca296e22f562adb157dc70410e4f30e05a0001e306fac121a89dc60e32935dbb","blockSize":4194304,"blocks":["ca296e22f562adb157dc70410e4f30e05a0001e306fac121a89dc60e32935dbb"]}}}},"dhcp":{"files":{"bin":{"files":{"dhcp-cli.js":{"size":797,"offset":"14596207","integrity":{"algorithm":"SHA256","hash":"fbd259e551c027f314a5a09eea1faac52313bcc58f2239422198f70657161c2b","blockSize":4194304,"blocks":["fbd259e551c027f314a5a09eea1faac52313bcc58f2239422198f70657161c2b"]}},"dhcpd-cli.js":{"size":1269,"offset":"14597004","integrity":{"algorithm":"SHA256","hash":"44be44e300dda761502552ba6f745e5f62c73a8348451ab484635974eab9ea07","blockSize":4194304,"blocks":["44be44e300dda761502552ba6f745e5f62c73a8348451ab484635974eab9ea07"]}}}},"Dockerfile":{"size":128,"offset":"14598273","integrity":{"algorithm":"SHA256","hash":"ad97d1fd39d18fa84f3cd10a6d31316ad4a2703051787070576122949472464d","blockSize":4194304,"blocks":["ad97d1fd39d18fa84f3cd10a6d31316ad4a2703051787070576122949472464d"]}},"lib":{"files":{"dhcp.js":{"size":25805,"offset":"14598401","integrity":{"algorithm":"SHA256","hash":"2b16255f191841da2bb61a03781366745b845494e2b359994dcdbc37adb32583","blockSize":4194304,"blocks":["2b16255f191841da2bb61a03781366745b845494e2b359994dcdbc37adb32583"]}},"options.js":{"size":12350,"offset":"14624206","integrity":{"algorithm":"SHA256","hash":"161d08103a91d2ac30776c7578d00c7c5e34f403d026adb979035d5e599b35a1","blockSize":4194304,"blocks":["161d08103a91d2ac30776c7578d00c7c5e34f403d026adb979035d5e599b35a1"]}},"protocol.js":{"size":2165,"offset":"14636556","integrity":{"algorithm":"SHA256","hash":"37bb41ea49a9e2b06c99837aaad60c0538918fa3bdf9f6e7c12e6320676b4587","blockSize":4194304,"blocks":["37bb41ea49a9e2b06c99837aaad60c0538918fa3bdf9f6e7c12e6320676b4587"]}},"seqbuffer.js":{"size":7936,"offset":"14638721","integrity":{"algorithm":"SHA256","hash":"d11046c59f834dc7f8c0538d179345566bbe6651e27780a14e786c01fcff1107","blockSize":4194304,"blocks":["d11046c59f834dc7f8c0538d179345566bbe6651e27780a14e786c01fcff1107"]}},"tools.js":{"size":2875,"offset":"14646657","integrity":{"algorithm":"SHA256","hash":"47bf7b00f08a81c3c4f85ee04652d0f71c41b09edcd1ba716e83909fa0573f27","blockSize":4194304,"blocks":["47bf7b00f08a81c3c4f85ee04652d0f71c41b09edcd1ba716e83909fa0573f27"]}}}},"LICENSE":{"size":1070,"offset":"14649532","integrity":{"algorithm":"SHA256","hash":"5bce81708ac83821fc48be1e97d89a5c8e733632ddb375d2c7101fb60dbfe6b2","blockSize":4194304,"blocks":["5bce81708ac83821fc48be1e97d89a5c8e733632ddb375d2c7101fb60dbfe6b2"]}},"package.json":{"size":797,"offset":"14650602","integrity":{"algorithm":"SHA256","hash":"d0013f11a79b74ea795efb9c26436156acc2ab4c53d8595fe0f8c90277ff5d40","blockSize":4194304,"blocks":["d0013f11a79b74ea795efb9c26436156acc2ab4c53d8595fe0f8c90277ff5d40"]}},"res":{"files":{"logo.png":{"size":4333,"offset":"14651399","integrity":{"algorithm":"SHA256","hash":"412a3afd876e51a859710d7a0c9547f63273b0bb84df7c55cd79fc0e008fa919","blockSize":4194304,"blocks":["412a3afd876e51a859710d7a0c9547f63273b0bb84df7c55cd79fc0e008fa919"]}}}}}},"dijkstrajs":{"files":{"CONTRIBUTING.md":{"size":248,"offset":"14655732","integrity":{"algorithm":"SHA256","hash":"2ea541bbad6bcbdf4c1146b3dcf1793c2bf53c3a9f4fffa6d1630977812f3670","blockSize":4194304,"blocks":["2ea541bbad6bcbdf4c1146b3dcf1793c2bf53c3a9f4fffa6d1630977812f3670"]}},"dijkstra.js":{"size":5206,"offset":"14655980","integrity":{"algorithm":"SHA256","hash":"7f5721e77332370a71314f1536b8c552f4f9dbd99bbc6c5aa10df3253eacfd5c","blockSize":4194304,"blocks":["7f5721e77332370a71314f1536b8c552f4f9dbd99bbc6c5aa10df3253eacfd5c"]}},"LICENSE.md":{"size":714,"offset":"14661186","integrity":{"algorithm":"SHA256","hash":"c46324e45a005413535a6fb7a97e9eacd3cc6bf30335b7d5c10b8ee3af9e60c2","blockSize":4194304,"blocks":["c46324e45a005413535a6fb7a97e9eacd3cc6bf30335b7d5c10b8ee3af9e60c2"]}},"package.json":{"size":1017,"offset":"14661900","integrity":{"algorithm":"SHA256","hash":"d28efcec035303aeac4f15eed9dd689c00308ea60fb0524d6b11ff309c5908ff","blockSize":4194304,"blocks":["d28efcec035303aeac4f15eed9dd689c00308ea60fb0524d6b11ff309c5908ff"]}}}},"duplexer3":{"files":{"index.js":{"size":1667,"offset":"14662917","integrity":{"algorithm":"SHA256","hash":"592f25c9660ef60ce803225b15e3da5f5d3b1f5b5a4c516dcfb3ca488e06fc8e","blockSize":4194304,"blocks":["592f25c9660ef60ce803225b15e3da5f5d3b1f5b5a4c516dcfb3ca488e06fc8e"]}},"LICENSE.md":{"size":1535,"offset":"14664584","integrity":{"algorithm":"SHA256","hash":"252a200ba7a38686f7954ec4cb09b3ad7788fa099eb724de167d7ab16b1244b9","blockSize":4194304,"blocks":["252a200ba7a38686f7954ec4cb09b3ad7788fa099eb724de167d7ab16b1244b9"]}},"package.json":{"size":363,"offset":"14666119","integrity":{"algorithm":"SHA256","hash":"aacf70145fa7df9379d505274688969fd6faae8205f029de400ad2c94eb4873b","blockSize":4194304,"blocks":["aacf70145fa7df9379d505274688969fd6faae8205f029de400ad2c94eb4873b"]}}}},"ee-first":{"files":{"index.js":{"size":1684,"offset":"14666482","integrity":{"algorithm":"SHA256","hash":"29d3cccddc7148f48715bfc94eb6f7b9f9132a5ecb704b9d4b713de87e7603dd","blockSize":4194304,"blocks":["29d3cccddc7148f48715bfc94eb6f7b9f9132a5ecb704b9d4b713de87e7603dd"]}},"LICENSE":{"size":1099,"offset":"14668166","integrity":{"algorithm":"SHA256","hash":"965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288","blockSize":4194304,"blocks":["965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288"]}},"package.json":{"size":466,"offset":"14669265","integrity":{"algorithm":"SHA256","hash":"417d3634c0f12bf7fae3aca0c8b295f93a206e027f5b60c1442576051f8332f5","blockSize":4194304,"blocks":["417d3634c0f12bf7fae3aca0c8b295f93a206e027f5b60c1442576051f8332f5"]}}}},"electron-log":{"files":{"LICENSE":{"size":1082,"offset":"14669731","integrity":{"algorithm":"SHA256","hash":"8a7030a9df0eac3ba1948991278d847d3e4c8dc4908a777b5868692c975ccfa8","blockSize":4194304,"blocks":["8a7030a9df0eac3ba1948991278d847d3e4c8dc4908a777b5868692c975ccfa8"]}},"package.json":{"size":712,"offset":"14670813","integrity":{"algorithm":"SHA256","hash":"c15895965647b8dc6cf0528e44661f8d71b204e97e587101688f7722625fffb9","blockSize":4194304,"blocks":["c15895965647b8dc6cf0528e44661f8d71b204e97e587101688f7722625fffb9"]}},"src":{"files":{"catchErrors.js":{"size":2405,"offset":"14671525","integrity":{"algorithm":"SHA256","hash":"ffa78c3bf857093655dc573299bac81d7450bc850c7bedc19534072417e78d3e","blockSize":4194304,"blocks":["ffa78c3bf857093655dc573299bac81d7450bc850c7bedc19534072417e78d3e"]}},"electronApi.js":{"size":4836,"offset":"14673930","integrity":{"algorithm":"SHA256","hash":"fbef0618434d031d153d22b50915dedac07057cff64e36ff4d2618d709a4da1a","blockSize":4194304,"blocks":["fbef0618434d031d153d22b50915dedac07057cff64e36ff4d2618d709a4da1a"]}},"index.js":{"size":2212,"offset":"14678766","integrity":{"algorithm":"SHA256","hash":"28c11d063800e9ddfaf1bbf2f33542463cf2b704b7f45208055f6414855c5be9","blockSize":4194304,"blocks":["28c11d063800e9ddfaf1bbf2f33542463cf2b704b7f45208055f6414855c5be9"]}},"log.js":{"size":1576,"offset":"14680978","integrity":{"algorithm":"SHA256","hash":"a30767af0475c7d81d9e13405b86443ad4f7c6f08e2027398a6505469e8cf13a","blockSize":4194304,"blocks":["a30767af0475c7d81d9e13405b86443ad4f7c6f08e2027398a6505469e8cf13a"]}},"scope.js":{"size":1302,"offset":"14682554","integrity":{"algorithm":"SHA256","hash":"2b5acf7e6d22daee042679754690d02f495a667758a9a61cc463b62ca52568e9","blockSize":4194304,"blocks":["2b5acf7e6d22daee042679754690d02f495a667758a9a61cc463b62ca52568e9"]}},"transform":{"files":{"index.js":{"size":1544,"offset":"14683856","integrity":{"algorithm":"SHA256","hash":"5090938d0760b8511d20baae9367ff6d292a09fae0ebabbc39390054ffb1e026","blockSize":4194304,"blocks":["5090938d0760b8511d20baae9367ff6d292a09fae0ebabbc39390054ffb1e026"]}},"object.js":{"size":2781,"offset":"14685400","integrity":{"algorithm":"SHA256","hash":"300ef90ce0e743fc58a2b84758bc867b49b0283f92daf62834707d03634a5ee9","blockSize":4194304,"blocks":["300ef90ce0e743fc58a2b84758bc867b49b0283f92daf62834707d03634a5ee9"]}},"style.js":{"size":1600,"offset":"14688181","integrity":{"algorithm":"SHA256","hash":"5fcde50e9349f81838a7238d385bbfd722d13aafc62926664ebb972c49d84035","blockSize":4194304,"blocks":["5fcde50e9349f81838a7238d385bbfd722d13aafc62926664ebb972c49d84035"]}},"template.js":{"size":3998,"offset":"14689781","integrity":{"algorithm":"SHA256","hash":"d9a88eadc2b85c3440fda09587e5724c5529ce2c30cec13dbaba3ea2e107e0c6","blockSize":4194304,"blocks":["d9a88eadc2b85c3440fda09587e5724c5529ce2c30cec13dbaba3ea2e107e0c6"]}}}},"transports":{"files":{"console.js":{"size":3034,"offset":"14693779","integrity":{"algorithm":"SHA256","hash":"be3b503cdf49c5f1315c80b6a3211fe9015f28512f6b3353e7f1d8695d1499ce","blockSize":4194304,"blocks":["be3b503cdf49c5f1315c80b6a3211fe9015f28512f6b3353e7f1d8695d1499ce"]}},"file":{"files":{"file.js":{"size":6994,"offset":"14696813","integrity":{"algorithm":"SHA256","hash":"80ae0081b20ba8b47c62bd1f509f5b16badc2e68b17f729db797aca34151bdb9","blockSize":4194304,"blocks":["80ae0081b20ba8b47c62bd1f509f5b16badc2e68b17f729db797aca34151bdb9"]}},"index.js":{"size":5079,"offset":"14703807","integrity":{"algorithm":"SHA256","hash":"e1e8710633a744e24dbb59b469e1481a6e1ce7d3cb9ca22db7bbd2a9395ef2ec","blockSize":4194304,"blocks":["e1e8710633a744e24dbb59b469e1481a6e1ce7d3cb9ca22db7bbd2a9395ef2ec"]}},"packageJson.js":{"size":1713,"offset":"14708886","integrity":{"algorithm":"SHA256","hash":"f0294e4908342dfe7e3ba933e348b6a7bc19d38d9dd06687a958eb8e26d923d9","blockSize":4194304,"blocks":["f0294e4908342dfe7e3ba933e348b6a7bc19d38d9dd06687a958eb8e26d923d9"]}},"variables.js":{"size":2687,"offset":"14710599","integrity":{"algorithm":"SHA256","hash":"d8c5a9886d53743eb80e8a077d5d2c3081af25385c02e934804208f2cd4ce576","blockSize":4194304,"blocks":["d8c5a9886d53743eb80e8a077d5d2c3081af25385c02e934804208f2cd4ce576"]}}}},"ipc.js":{"size":1098,"offset":"14713286","integrity":{"algorithm":"SHA256","hash":"9cf486306cc0f7cb2323bdcfa86b8d9c71126082d4e865c80eb49c1b06180630","blockSize":4194304,"blocks":["9cf486306cc0f7cb2323bdcfa86b8d9c71126082d4e865c80eb49c1b06180630"]}},"remote.js":{"size":2172,"offset":"14714384","integrity":{"algorithm":"SHA256","hash":"4dfaf775b7016ad653e133255b5f75e18fb278f37e0ed432cba7c4b5c9e70242","blockSize":4194304,"blocks":["4dfaf775b7016ad653e133255b5f75e18fb278f37e0ed432cba7c4b5c9e70242"]}}}}}}}},"electron-window-bounds":{"files":{"index.js":{"size":2686,"offset":"14716556","integrity":{"algorithm":"SHA256","hash":"50d1d0daa7448a0235265ebb16df9002b346cc947a254932d6e443c56ebd2ce2","blockSize":4194304,"blocks":["50d1d0daa7448a0235265ebb16df9002b346cc947a254932d6e443c56ebd2ce2"]}},"package.json":{"size":209,"offset":"14719242","integrity":{"algorithm":"SHA256","hash":"d576a447a9447bc6f7265f0409076752b33620d14eac9840fc2f570011a8781c","blockSize":4194304,"blocks":["d576a447a9447bc6f7265f0409076752b33620d14eac9840fc2f570011a8781c"]}}}},"emoji-regex":{"files":{"es2015":{"files":{"index.js":{"size":11104,"offset":"14719451","integrity":{"algorithm":"SHA256","hash":"8718dea4d28647912918dba60545890dc10ae672bfb186b6ec0af3fc5e826137","blockSize":4194304,"blocks":["8718dea4d28647912918dba60545890dc10ae672bfb186b6ec0af3fc5e826137"]}},"text.js":{"size":11105,"offset":"14730555","integrity":{"algorithm":"SHA256","hash":"aad6b3f580511fe1fd70ae4ddadff4f4ec6bd5143f1a53b93c7e16eaf608d552","blockSize":4194304,"blocks":["aad6b3f580511fe1fd70ae4ddadff4f4ec6bd5143f1a53b93c7e16eaf608d552"]}}}},"index.js":{"size":10286,"offset":"14741660","integrity":{"algorithm":"SHA256","hash":"c56978800e47f095cfbfe96712b5e78d150d1f62e32bb4943675213fce481ef0","blockSize":4194304,"blocks":["c56978800e47f095cfbfe96712b5e78d150d1f62e32bb4943675213fce481ef0"]}},"LICENSE-MIT.txt":{"size":1077,"offset":"14751946","integrity":{"algorithm":"SHA256","hash":"483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a","blockSize":4194304,"blocks":["483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a"]}},"package.json":{"size":852,"offset":"14753023","integrity":{"algorithm":"SHA256","hash":"bc390531ac1166d8fd8291a61b9bfe71b220ce892023b536effc7e88ec733664","blockSize":4194304,"blocks":["bc390531ac1166d8fd8291a61b9bfe71b220ce892023b536effc7e88ec733664"]}},"text.js":{"size":10287,"offset":"14753875","integrity":{"algorithm":"SHA256","hash":"4bae97c68c68cc8c56fa873fcbcbaf6869da926f3f38ddd9cb6ca22e8f60da41","blockSize":4194304,"blocks":["4bae97c68c68cc8c56fa873fcbcbaf6869da926f3f38ddd9cb6ca22e8f60da41"]}}}},"encodeurl":{"files":{"HISTORY.md":{"size":238,"offset":"14764162","integrity":{"algorithm":"SHA256","hash":"862eb81868522938d0c3b042ac31faa983bcb64509ea05504640053e4f70c759","blockSize":4194304,"blocks":["862eb81868522938d0c3b042ac31faa983bcb64509ea05504640053e4f70c759"]}},"index.js":{"size":1586,"offset":"14764400","integrity":{"algorithm":"SHA256","hash":"1d0a4e941c1504dcd9bc6cfbb77f7b44d93e56a29cba6f2ccebd78d501a51c16","blockSize":4194304,"blocks":["1d0a4e941c1504dcd9bc6cfbb77f7b44d93e56a29cba6f2ccebd78d501a51c16"]}},"LICENSE":{"size":1089,"offset":"14765986","integrity":{"algorithm":"SHA256","hash":"7585ea7bba616ccbbe43cb54ecb67956688c3c5641bb84f3099a652a73193afe","blockSize":4194304,"blocks":["7585ea7bba616ccbbe43cb54ecb67956688c3c5641bb84f3099a652a73193afe"]}},"package.json":{"size":612,"offset":"14767075","integrity":{"algorithm":"SHA256","hash":"36c06d587e33c6d3cf2008bd8a3d08d45a7c57323058181e63e99552b3a3e562","blockSize":4194304,"blocks":["36c06d587e33c6d3cf2008bd8a3d08d45a7c57323058181e63e99552b3a3e562"]}}}},"end-of-stream":{"files":{"index.js":{"size":2678,"offset":"14767687","integrity":{"algorithm":"SHA256","hash":"3e912df226ee90ee3edc5ff69cd3e8313fa1da13795e10fb0b0f05727bdabb58","blockSize":4194304,"blocks":["3e912df226ee90ee3edc5ff69cd3e8313fa1da13795e10fb0b0f05727bdabb58"]}},"LICENSE":{"size":1078,"offset":"14770365","integrity":{"algorithm":"SHA256","hash":"3fe8d55a98dbf260eace67c00cf9bc53edb46234e840098a0b93df3096b97fb6","blockSize":4194304,"blocks":["3fe8d55a98dbf260eace67c00cf9bc53edb46234e840098a0b93df3096b97fb6"]}},"package.json":{"size":534,"offset":"14771443","integrity":{"algorithm":"SHA256","hash":"83eb327749859615cd6bb5d16f07ff5f93e0ac16e03d2ea1122a97b1ff5fa2f2","blockSize":4194304,"blocks":["83eb327749859615cd6bb5d16f07ff5f93e0ac16e03d2ea1122a97b1ff5fa2f2"]}}}},"escape-html":{"files":{"index.js":{"size":1362,"offset":"14771977","integrity":{"algorithm":"SHA256","hash":"42a7f91883d0c5ce9292dda4e017e1f8664d34b09276d89fb6f3859c29d1ca9b","blockSize":4194304,"blocks":["42a7f91883d0c5ce9292dda4e017e1f8664d34b09276d89fb6f3859c29d1ca9b"]}},"LICENSE":{"size":1157,"offset":"14773339","integrity":{"algorithm":"SHA256","hash":"255aa557a1f55224ce522f311629c0bf20854740a67955cefd798fbd1d3d1ded","blockSize":4194304,"blocks":["255aa557a1f55224ce522f311629c0bf20854740a67955cefd798fbd1d3d1ded"]}},"package.json":{"size":313,"offset":"14774496","integrity":{"algorithm":"SHA256","hash":"fdf773dcc64040ac2176a724c7ca66537cb49084038b690577854eb27ada225b","blockSize":4194304,"blocks":["fdf773dcc64040ac2176a724c7ca66537cb49084038b690577854eb27ada225b"]}}}},"file-uri-to-path":{"files":{"History.md":{"size":433,"offset":"14774809","integrity":{"algorithm":"SHA256","hash":"0b06e981a4318af1daef8b6ef0c6ff794e9b18a0a3e0738a65c9063988016d2e","blockSize":4194304,"blocks":["0b06e981a4318af1daef8b6ef0c6ff794e9b18a0a3e0738a65c9063988016d2e"]}},"index.js":{"size":1723,"offset":"14775242","integrity":{"algorithm":"SHA256","hash":"e62293e871bdd5a7449ff3c7956c9536ec1d2ea7369461de77322b5256bb93e7","blockSize":4194304,"blocks":["e62293e871bdd5a7449ff3c7956c9536ec1d2ea7369461de77322b5256bb93e7"]}},"LICENSE":{"size":1083,"offset":"14776965","integrity":{"algorithm":"SHA256","hash":"75070206e4ee2a749be52444cecc05101ca8d314c9d6d335ff914046cbf086a0","blockSize":4194304,"blocks":["75070206e4ee2a749be52444cecc05101ca8d314c9d6d335ff914046cbf086a0"]}},"package.json":{"size":505,"offset":"14778048","integrity":{"algorithm":"SHA256","hash":"4f5e1422fe14c36ceed42f77b90cd53d2ef0506e866880f4704459a2b79a75fb","blockSize":4194304,"blocks":["4f5e1422fe14c36ceed42f77b90cd53d2ef0506e866880f4704459a2b79a75fb"]}}}},"find-up":{"files":{"index.js":{"size":968,"offset":"14778553","integrity":{"algorithm":"SHA256","hash":"b2b7a4a3a202785dfc044bc9d3798df684c9983008254e44e23258f80c7aba54","blockSize":4194304,"blocks":["b2b7a4a3a202785dfc044bc9d3798df684c9983008254e44e23258f80c7aba54"]}},"license":{"size":1109,"offset":"14779521","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":505,"offset":"14780630","integrity":{"algorithm":"SHA256","hash":"47ba84a162be94305384419b4ea862550509f0bcaf675e548c5d147303c8ed1e","blockSize":4194304,"blocks":["47ba84a162be94305384419b4ea862550509f0bcaf675e548c5d147303c8ed1e"]}}}},"fix-path":{"files":{"index.js":{"size":284,"offset":"14781135","integrity":{"algorithm":"SHA256","hash":"f8ca2b5ebabb09a3bfb8e67ee7c91657f2da569ba16623890c3fa39c00dca076","blockSize":4194304,"blocks":["f8ca2b5ebabb09a3bfb8e67ee7c91657f2da569ba16623890c3fa39c00dca076"]}},"license":{"size":1117,"offset":"14781419","integrity":{"algorithm":"SHA256","hash":"5c932d88256b4ab958f64a856fa48e8bd1f55bc1d96b8149c65689e0c61789d3","blockSize":4194304,"blocks":["5c932d88256b4ab958f64a856fa48e8bd1f55bc1d96b8149c65689e0c61789d3"]}},"package.json":{"size":589,"offset":"14782536","integrity":{"algorithm":"SHA256","hash":"9a39a924568d0d7e66f3a1828f49625a7648fd66193b073fdb0d8db618de4079","blockSize":4194304,"blocks":["9a39a924568d0d7e66f3a1828f49625a7648fd66193b073fdb0d8db618de4079"]}}}},"follow-redirects":{"files":{"debug.js":{"size":315,"offset":"14783125","integrity":{"algorithm":"SHA256","hash":"8dbf7e71a9292be180e3469a6b7a164171d3c39dec79e5dbc4aa1c9f09509faf","blockSize":4194304,"blocks":["8dbf7e71a9292be180e3469a6b7a164171d3c39dec79e5dbc4aa1c9f09509faf"]}},"http.js":{"size":37,"offset":"14783440","integrity":{"algorithm":"SHA256","hash":"754c0078c57625db7b55b4c3fb30ff5c207fc49284a5022742e81d0c595403c5","blockSize":4194304,"blocks":["754c0078c57625db7b55b4c3fb30ff5c207fc49284a5022742e81d0c595403c5"]}},"https.js":{"size":38,"offset":"14783477","integrity":{"algorithm":"SHA256","hash":"7a28e323ffd91094e083a8954fe027839c06d948603d7f2719ed17c446885272","blockSize":4194304,"blocks":["7a28e323ffd91094e083a8954fe027839c06d948603d7f2719ed17c446885272"]}},"index.js":{"size":18418,"offset":"14783515","integrity":{"algorithm":"SHA256","hash":"818de9a2eb818ac7d9b8bcae15c5273be57c08cf45ab64d2d1d1e73de16a01ac","blockSize":4194304,"blocks":["818de9a2eb818ac7d9b8bcae15c5273be57c08cf45ab64d2d1d1e73de16a01ac"]}},"LICENSE":{"size":1136,"offset":"14801933","integrity":{"algorithm":"SHA256","hash":"bfa8a54bb952ccda79f0f1889721d108f5b605babbb2b8a3705ffb52f4132eb7","blockSize":4194304,"blocks":["bfa8a54bb952ccda79f0f1889721d108f5b605babbb2b8a3705ffb52f4132eb7"]}},"package.json":{"size":862,"offset":"14803069","integrity":{"algorithm":"SHA256","hash":"02fcabe72d2d9d8c6c92d17ef08ab948c868dcc216d958e350ada6e748c3841a","blockSize":4194304,"blocks":["02fcabe72d2d9d8c6c92d17ef08ab948c868dcc216d958e350ada6e748c3841a"]}}}},"fresh":{"files":{"HISTORY.md":{"size":1500,"offset":"14803931","integrity":{"algorithm":"SHA256","hash":"c2d714eaf4558de25ab7ea991f52899610cd566fec897838ad24306fa2f8f409","blockSize":4194304,"blocks":["c2d714eaf4558de25ab7ea991f52899610cd566fec897838ad24306fa2f8f409"]}},"index.js":{"size":2711,"offset":"14805431","integrity":{"algorithm":"SHA256","hash":"85b46ce10c4fba71fb41666586572277f626bbc698266026372941b5267bfb60","blockSize":4194304,"blocks":["85b46ce10c4fba71fb41666586572277f626bbc698266026372941b5267bfb60"]}},"LICENSE":{"size":1174,"offset":"14808142","integrity":{"algorithm":"SHA256","hash":"a0ec0dab16b3666f24950f86d257930ac2ad475557b4bfe245620e0817d8a45d","blockSize":4194304,"blocks":["a0ec0dab16b3666f24950f86d257930ac2ad475557b4bfe245620e0817d8a45d"]}},"package.json":{"size":727,"offset":"14809316","integrity":{"algorithm":"SHA256","hash":"bc48cb3a4ce071eb7c0daa9b26d2d06702a260eddf88a4af2948d3dbfd569c4a","blockSize":4194304,"blocks":["bc48cb3a4ce071eb7c0daa9b26d2d06702a260eddf88a4af2948d3dbfd569c4a"]}}}},"fs-constants":{"files":{"browser.js":{"size":38,"offset":"14810043","integrity":{"algorithm":"SHA256","hash":"b575b19b26a6c95048bbb9372440d1a37178a2d4e9ea98115f27121fa804d7ce","blockSize":4194304,"blocks":["b575b19b26a6c95048bbb9372440d1a37178a2d4e9ea98115f27121fa804d7ce"]}},"index.js":{"size":65,"offset":"14810081","integrity":{"algorithm":"SHA256","hash":"0018c44a4f4577ed7e94b66d768eab3a822bc96fda9131cfb7e4dea99eb1b9b0","blockSize":4194304,"blocks":["0018c44a4f4577ed7e94b66d768eab3a822bc96fda9131cfb7e4dea99eb1b9b0"]}},"LICENSE":{"size":1079,"offset":"14810146","integrity":{"algorithm":"SHA256","hash":"2281f2db407bdbb54f069eec38128b2dee2c0c952f52b786ef1faecb81767b3c","blockSize":4194304,"blocks":["2281f2db407bdbb54f069eec38128b2dee2c0c952f52b786ef1faecb81767b3c"]}},"package.json":{"size":433,"offset":"14811225","integrity":{"algorithm":"SHA256","hash":"246f3d6743381ee1838e55295556e0bf48c8841c9b841324870699745d524c09","blockSize":4194304,"blocks":["246f3d6743381ee1838e55295556e0bf48c8841c9b841324870699745d524c09"]}}}},"fs-extra":{"files":{"lib":{"files":{"copy":{"files":{"copy.js":{"size":7699,"offset":"14817447","integrity":{"algorithm":"SHA256","hash":"ec5823c6a8296f3cfc7e0a6c0ed41bd6bbb0449f54cc4e7b83e8616ac3db4c87","blockSize":4194304,"blocks":["ec5823c6a8296f3cfc7e0a6c0ed41bd6bbb0449f54cc4e7b83e8616ac3db4c87"]}},"index.js":{"size":111,"offset":"14825146","integrity":{"algorithm":"SHA256","hash":"06f95d3bdf12008047c254fdd977e43ca451c1470ab7ef0fefbb48b7dbb39008","blockSize":4194304,"blocks":["06f95d3bdf12008047c254fdd977e43ca451c1470ab7ef0fefbb48b7dbb39008"]}}}},"copy-sync":{"files":{"copy-sync.js":{"size":5719,"offset":"14811658","integrity":{"algorithm":"SHA256","hash":"0e60585e61d60a9836a9de8d8e1d6590146e0022dff1c6510611182aadcda37b","blockSize":4194304,"blocks":["0e60585e61d60a9836a9de8d8e1d6590146e0022dff1c6510611182aadcda37b"]}},"index.js":{"size":70,"offset":"14817377","integrity":{"algorithm":"SHA256","hash":"43d2fc28f9a6071056f3055cca70d810555a7229c93c70810881c048bf3dce73","blockSize":4194304,"blocks":["43d2fc28f9a6071056f3055cca70d810555a7229c93c70810881c048bf3dce73"]}}}},"empty":{"files":{"index.js":{"size":747,"offset":"14825257","integrity":{"algorithm":"SHA256","hash":"1096edcb5ec0ed015b36914beff0826f6cd5d7ce2645ee9dee60c0b272e57856","blockSize":4194304,"blocks":["1096edcb5ec0ed015b36914beff0826f6cd5d7ce2645ee9dee60c0b272e57856"]}}}},"ensure":{"files":{"file.js":{"size":1709,"offset":"14826004","integrity":{"algorithm":"SHA256","hash":"a104ff42c9aefd0e34556b9df2e4b5c9cd15315b0b0f70b07938901428b3c608","blockSize":4194304,"blocks":["a104ff42c9aefd0e34556b9df2e4b5c9cd15315b0b0f70b07938901428b3c608"]}},"index.js":{"size":623,"offset":"14827713","integrity":{"algorithm":"SHA256","hash":"6c8e1d92d85d04c25c1a076b1270e26dfaa36583ba95d6d5b7874f3b1700cead","blockSize":4194304,"blocks":["6c8e1d92d85d04c25c1a076b1270e26dfaa36583ba95d6d5b7874f3b1700cead"]}},"link.js":{"size":1652,"offset":"14828336","integrity":{"algorithm":"SHA256","hash":"339ce737e858367c65f79c0960bc6d1d617638aae07d396ac8ae5c8670b500c3","blockSize":4194304,"blocks":["339ce737e858367c65f79c0960bc6d1d617638aae07d396ac8ae5c8670b500c3"]}},"symlink-paths.js":{"size":3374,"offset":"14829988","integrity":{"algorithm":"SHA256","hash":"5595b764059fb90ce4a13f5cdf43988da97e636521d3c599ce5260681d75bdfc","blockSize":4194304,"blocks":["5595b764059fb90ce4a13f5cdf43988da97e636521d3c599ce5260681d75bdfc"]}},"symlink-type.js":{"size":694,"offset":"14833362","integrity":{"algorithm":"SHA256","hash":"17abe9590176305dd04316b2ac5c972dcf54cea32d279f955fbcf25098743dc8","blockSize":4194304,"blocks":["17abe9590176305dd04316b2ac5c972dcf54cea32d279f955fbcf25098743dc8"]}},"symlink.js":{"size":2522,"offset":"14834056","integrity":{"algorithm":"SHA256","hash":"8b1fa73e5b5554380b710ccfbb4fe23764e53f0e5ce046689741310a82a19e21","blockSize":4194304,"blocks":["8b1fa73e5b5554380b710ccfbb4fe23764e53f0e5ce046689741310a82a19e21"]}}}},"fs":{"files":{"index.js":{"size":3106,"offset":"14836578","integrity":{"algorithm":"SHA256","hash":"b611491f7294ad9656d07272f8b393dd2c2207186603257dcb737cbc86792f21","blockSize":4194304,"blocks":["b611491f7294ad9656d07272f8b393dd2c2207186603257dcb737cbc86792f21"]}}}},"index.js":{"size":411,"offset":"14839684","integrity":{"algorithm":"SHA256","hash":"df8bdb5198c098040b2b55bc9f496f392253873d1337866e793a401c46e9adfb","blockSize":4194304,"blocks":["df8bdb5198c098040b2b55bc9f496f392253873d1337866e793a401c46e9adfb"]}},"json":{"files":{"index.js":{"size":508,"offset":"14840095","integrity":{"algorithm":"SHA256","hash":"c5ac6a8005308e5bb36619fed225c987872300d356fa95d0d56878029ebbdc45","blockSize":4194304,"blocks":["c5ac6a8005308e5bb36619fed225c987872300d356fa95d0d56878029ebbdc45"]}},"jsonfile.js":{"size":238,"offset":"14840603","integrity":{"algorithm":"SHA256","hash":"a986ad3c13166f3bf8f30b18140bfc8ea1754760ab3802aa7c8c3780d54f07ba","blockSize":4194304,"blocks":["a986ad3c13166f3bf8f30b18140bfc8ea1754760ab3802aa7c8c3780d54f07ba"]}},"output-json-sync.js":{"size":271,"offset":"14840841","integrity":{"algorithm":"SHA256","hash":"7e84f5c478c02d8507238dc355ed5fe649fe61959bdc100da7c2a29599bcb714","blockSize":4194304,"blocks":["7e84f5c478c02d8507238dc355ed5fe649fe61959bdc100da7c2a29599bcb714"]}},"output-json.js":{"size":272,"offset":"14841112","integrity":{"algorithm":"SHA256","hash":"1f58fdf60cdbc9d34cd7a4e2688be218572bc8beb4ce3ce377dca515a06e3b50","blockSize":4194304,"blocks":["1f58fdf60cdbc9d34cd7a4e2688be218572bc8beb4ce3ce377dca515a06e3b50"]}}}},"mkdirs":{"files":{"index.js":{"size":328,"offset":"14841384","integrity":{"algorithm":"SHA256","hash":"adcd576e2e3868b94adb1bad6d1e3cf2312ffdfa71e49a57fe6247e116e75ecf","blockSize":4194304,"blocks":["adcd576e2e3868b94adb1bad6d1e3cf2312ffdfa71e49a57fe6247e116e75ecf"]}},"make-dir.js":{"size":545,"offset":"14841712","integrity":{"algorithm":"SHA256","hash":"23c7ce8a3d6b39d1c7cf5d16ba6447c1690a6fdaa8c5f41e6b76526b7afe96f3","blockSize":4194304,"blocks":["23c7ce8a3d6b39d1c7cf5d16ba6447c1690a6fdaa8c5f41e6b76526b7afe96f3"]}},"utils.js":{"size":1655,"offset":"14842257","integrity":{"algorithm":"SHA256","hash":"5372a36f4b2c5023788c23dbc6639155cb016a1b111e8fc1d6bf97cbaf11b1f8","blockSize":4194304,"blocks":["5372a36f4b2c5023788c23dbc6639155cb016a1b111e8fc1d6bf97cbaf11b1f8"]}}}},"move":{"files":{"index.js":{"size":111,"offset":"14845472","integrity":{"algorithm":"SHA256","hash":"6ccdbb83772d9b80cecbbcc04ecf8b6fc0529e8daed1c395e27b6a83d5708ee6","blockSize":4194304,"blocks":["6ccdbb83772d9b80cecbbcc04ecf8b6fc0529e8daed1c395e27b6a83d5708ee6"]}},"move.js":{"size":1989,"offset":"14845583","integrity":{"algorithm":"SHA256","hash":"87218b93bbb4aafc8eaf71e1c1987efca3d933abeb88844d71c5f8bd1ac41208","blockSize":4194304,"blocks":["87218b93bbb4aafc8eaf71e1c1987efca3d933abeb88844d71c5f8bd1ac41208"]}}}},"move-sync":{"files":{"index.js":{"size":70,"offset":"14843912","integrity":{"algorithm":"SHA256","hash":"0ba99125dccf6e55d9a7d0bcbcae341a6187579f24ad0b63d15c0dadce80cd7b","blockSize":4194304,"blocks":["0ba99125dccf6e55d9a7d0bcbcae341a6187579f24ad0b63d15c0dadce80cd7b"]}},"move-sync.js":{"size":1490,"offset":"14843982","integrity":{"algorithm":"SHA256","hash":"c67deae9c577649b983913d448a117905e6190bce5349333c77630a2343d7813","blockSize":4194304,"blocks":["c67deae9c577649b983913d448a117905e6190bce5349333c77630a2343d7813"]}}}},"output":{"files":{"index.js":{"size":947,"offset":"14847572","integrity":{"algorithm":"SHA256","hash":"a27d1a72ed1ecddffc57e70187a4b72467ed0dd34092b7e3d2817b9f4359ab5d","blockSize":4194304,"blocks":["a27d1a72ed1ecddffc57e70187a4b72467ed0dd34092b7e3d2817b9f4359ab5d"]}}}},"path-exists":{"files":{"index.js":{"size":263,"offset":"14848519","integrity":{"algorithm":"SHA256","hash":"5ce096c95daec0259817248921b39a9e0df4d342db171138ccb62440cc7a0cbe","blockSize":4194304,"blocks":["5ce096c95daec0259817248921b39a9e0df4d342db171138ccb62440cc7a0cbe"]}}}},"remove":{"files":{"index.js":{"size":489,"offset":"14848782","integrity":{"algorithm":"SHA256","hash":"ad79431e3d1cae731565d3e7403f619aee21f3b276d3541fe794ec7fd59ab0da","blockSize":4194304,"blocks":["ad79431e3d1cae731565d3e7403f619aee21f3b276d3541fe794ec7fd59ab0da"]}},"rimraf.js":{"size":7443,"offset":"14849271","integrity":{"algorithm":"SHA256","hash":"931cd85d1564a59db583841196cf2773940e7eee30830514b448d2d4919cc534","blockSize":4194304,"blocks":["931cd85d1564a59db583841196cf2773940e7eee30830514b448d2d4919cc534"]}}}},"util":{"files":{"stat.js":{"size":5226,"offset":"14856714","integrity":{"algorithm":"SHA256","hash":"fe33d6c739866764c937e8aaeb518bbda7a36b0f3c006855b26c5bdd846081c3","blockSize":4194304,"blocks":["fe33d6c739866764c937e8aaeb518bbda7a36b0f3c006855b26c5bdd846081c3"]}},"utimes.js":{"size":615,"offset":"14861940","integrity":{"algorithm":"SHA256","hash":"4a049bcd580984957b8690fb05f7a6bf5c7e59bfc78d6817882945c35f3a44d4","blockSize":4194304,"blocks":["4a049bcd580984957b8690fb05f7a6bf5c7e59bfc78d6817882945c35f3a44d4"]}}}}}},"LICENSE":{"size":1084,"offset":"14862555","integrity":{"algorithm":"SHA256","hash":"1e76029602ae9b21cc4e612db2496d92febed882ba13ba745f8b3309e85f9d39","blockSize":4194304,"blocks":["1e76029602ae9b21cc4e612db2496d92febed882ba13ba745f8b3309e85f9d39"]}},"package.json":{"size":953,"offset":"14863639","integrity":{"algorithm":"SHA256","hash":"1a4611bb4c13064a080f332a3efd51781d1822ce301b82015d6d393f4634c7b4","blockSize":4194304,"blocks":["1a4611bb4c13064a080f332a3efd51781d1822ce301b82015d6d393f4634c7b4"]}}}},"get-caller-file":{"files":{"index.js":{"size":1108,"offset":"14864592","integrity":{"algorithm":"SHA256","hash":"583aba43e0ae0ccfb6c3a790019486990ac9241337dc38005f0189586e18295a","blockSize":4194304,"blocks":["583aba43e0ae0ccfb6c3a790019486990ac9241337dc38005f0189586e18295a"]}},"index.js.map":{"size":773,"offset":"14865700","integrity":{"algorithm":"SHA256","hash":"f2d123b5756280a04cf41e21594ace05b6f6cb4629361ed1c998c8f57d90c6fa","blockSize":4194304,"blocks":["f2d123b5756280a04cf41e21594ace05b6f6cb4629361ed1c998c8f57d90c6fa"]}},"LICENSE.md":{"size":745,"offset":"14866473","integrity":{"algorithm":"SHA256","hash":"902dbb4154679fb2b8d7c33878183f45b268d01eae5e5033dddaa8852d45f213","blockSize":4194304,"blocks":["902dbb4154679fb2b8d7c33878183f45b268d01eae5e5033dddaa8852d45f213"]}},"package.json":{"size":769,"offset":"14867218","integrity":{"algorithm":"SHA256","hash":"7bb0caed4860b10da923110a095cedf8a443b2523448dce9951e4dcf9b14663f","blockSize":4194304,"blocks":["7bb0caed4860b10da923110a095cedf8a443b2523448dce9951e4dcf9b14663f"]}}}},"get-port":{"files":{"index.js":{"size":2622,"offset":"14867987","integrity":{"algorithm":"SHA256","hash":"121846f1b401a35e104e15bebe6a632fb8e0fc272f7cdd933fd1fef9765238ec","blockSize":4194304,"blocks":["121846f1b401a35e104e15bebe6a632fb8e0fc272f7cdd933fd1fef9765238ec"]}},"license":{"size":1109,"offset":"14870609","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":535,"offset":"14871718","integrity":{"algorithm":"SHA256","hash":"bd25f6aecfa53d13b233f5e9e5a7d64119d96801b3dc631955c76d0c4c8c8fb8","blockSize":4194304,"blocks":["bd25f6aecfa53d13b233f5e9e5a7d64119d96801b3dc631955c76d0c4c8c8fb8"]}}}},"got":{"files":{"license":{"size":1109,"offset":"14872253","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"node_modules":{"files":{"@sindresorhus":{"files":{"is":{"files":{"dist":{"files":{"index.js":{"size":10891,"offset":"14873362","integrity":{"algorithm":"SHA256","hash":"3cf0579a4ffc2209c21730893678f961f91991d0049ac8b907ae6d71769eee1a","blockSize":4194304,"blocks":["3cf0579a4ffc2209c21730893678f961f91991d0049ac8b907ae6d71769eee1a"]}},"index.js.map":{"size":10526,"offset":"14884253","integrity":{"algorithm":"SHA256","hash":"59bedaa4d6cda5bffec82e0018d4c0c8999b4498f1d72d0df4536fd3d496c2ba","blockSize":4194304,"blocks":["59bedaa4d6cda5bffec82e0018d4c0c8999b4498f1d72d0df4536fd3d496c2ba"]}}}},"license":{"size":1109,"offset":"14894779","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":848,"offset":"14895888","integrity":{"algorithm":"SHA256","hash":"27a022ec283a68b02c36cd03c9cb1db28d254874477f930d3f83e18ab5e69895","blockSize":4194304,"blocks":["27a022ec283a68b02c36cd03c9cb1db28d254874477f930d3f83e18ab5e69895"]}}}}}},"@szmarczak":{"files":{"http-timer":{"files":{"LICENSE":{"size":1071,"offset":"14896736","integrity":{"algorithm":"SHA256","hash":"0194571d45a06ea2a22ceb51f981e3be92525966d28847dbc0d9982603bf90de","blockSize":4194304,"blocks":["0194571d45a06ea2a22ceb51f981e3be92525966d28847dbc0d9982603bf90de"]}},"package.json":{"size":613,"offset":"14897807","integrity":{"algorithm":"SHA256","hash":"450999c3a0fefdf2ec002498bbdc92f28b9300e467a0cec4a638a6728ca12152","blockSize":4194304,"blocks":["450999c3a0fefdf2ec002498bbdc92f28b9300e467a0cec4a638a6728ca12152"]}},"source":{"files":{"index.js":{"size":2095,"offset":"14898420","integrity":{"algorithm":"SHA256","hash":"2b4f186d8d173646f228bbb368ce2aec00398bb7038be1d5aeefa869863f6544","blockSize":4194304,"blocks":["2b4f186d8d173646f228bbb368ce2aec00398bb7038be1d5aeefa869863f6544"]}}}}}}}},"cacheable-request":{"files":{"LICENSE":{"size":1068,"offset":"14900515","integrity":{"algorithm":"SHA256","hash":"861908ec818ff6142fdd6c4b66d6264c206d3d5a46003b1342e1853a9a85abac","blockSize":4194304,"blocks":["861908ec818ff6142fdd6c4b66d6264c206d3d5a46003b1342e1853a9a85abac"]}},"node_modules":{"files":{"get-stream":{"files":{"buffer-stream.js":{"size":894,"offset":"14901583","integrity":{"algorithm":"SHA256","hash":"74502372f3e457ae4d05546c47b4fd88c8df6ed8eb6166b6feb8bec1798ec6dc","blockSize":4194304,"blocks":["74502372f3e457ae4d05546c47b4fd88c8df6ed8eb6166b6feb8bec1798ec6dc"]}},"index.js":{"size":1444,"offset":"14902477","integrity":{"algorithm":"SHA256","hash":"80626386e94017e8950ab75791da258c1165867e49187ebf8c9f77b3e1da4478","blockSize":4194304,"blocks":["80626386e94017e8950ab75791da258c1165867e49187ebf8c9f77b3e1da4478"]}},"license":{"size":1117,"offset":"14903921","integrity":{"algorithm":"SHA256","hash":"5c932d88256b4ab958f64a856fa48e8bd1f55bc1d96b8149c65689e0c61789d3","blockSize":4194304,"blocks":["5c932d88256b4ab958f64a856fa48e8bd1f55bc1d96b8149c65689e0c61789d3"]}},"package.json":{"size":664,"offset":"14905038","integrity":{"algorithm":"SHA256","hash":"e45d6a34fd8770bc9d54716fb35a8a79fbdc4b6acde300d09a66d49f944835e5","blockSize":4194304,"blocks":["e45d6a34fd8770bc9d54716fb35a8a79fbdc4b6acde300d09a66d49f944835e5"]}}}},"lowercase-keys":{"files":{"index.js":{"size":178,"offset":"14905702","integrity":{"algorithm":"SHA256","hash":"a7b40f46216d06cbe2b183e35a666e8932758d7cd70c66aa403e48dd0b750ee7","blockSize":4194304,"blocks":["a7b40f46216d06cbe2b183e35a666e8932758d7cd70c66aa403e48dd0b750ee7"]}},"license":{"size":1109,"offset":"14905880","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":467,"offset":"14906989","integrity":{"algorithm":"SHA256","hash":"1f46fd504a13a0a5629d930110779b06659905f3d2caff438c8e3c34ba37d432","blockSize":4194304,"blocks":["1f46fd504a13a0a5629d930110779b06659905f3d2caff438c8e3c34ba37d432"]}}}}}},"package.json":{"size":930,"offset":"14907456","integrity":{"algorithm":"SHA256","hash":"0c98b3b6c42d561ba864de1a1e2067d43336e4cb0174002d48444a2abe20bb46","blockSize":4194304,"blocks":["0c98b3b6c42d561ba864de1a1e2067d43336e4cb0174002d48444a2abe20bb46"]}},"src":{"files":{"index.js":{"size":6936,"offset":"14908386","integrity":{"algorithm":"SHA256","hash":"3ce05ac3531f61529210bf6390f18d5e709ec110e37dee22af7e72b4065ca627","blockSize":4194304,"blocks":["3ce05ac3531f61529210bf6390f18d5e709ec110e37dee22af7e72b4065ca627"]}}}}}},"decompress-response":{"files":{"index.js":{"size":628,"offset":"14915322","integrity":{"algorithm":"SHA256","hash":"a5835ffe4e7de6144bca3c41c8b696785664cecaa5e900b95ae28311c5f9fbfd","blockSize":4194304,"blocks":["a5835ffe4e7de6144bca3c41c8b696785664cecaa5e900b95ae28311c5f9fbfd"]}},"license":{"size":1120,"offset":"14915950","integrity":{"algorithm":"SHA256","hash":"13ce954015466e8a84b458f212ec213b9d6c549955d1f454774089be8219b5f0","blockSize":4194304,"blocks":["13ce954015466e8a84b458f212ec213b9d6c549955d1f454774089be8219b5f0"]}},"package.json":{"size":687,"offset":"14917070","integrity":{"algorithm":"SHA256","hash":"ff240da14d80d897bc6ee4bc8e259ef63c79bf6c5b2a7d9cc6f73f1ae8b97c5a","blockSize":4194304,"blocks":["ff240da14d80d897bc6ee4bc8e259ef63c79bf6c5b2a7d9cc6f73f1ae8b97c5a"]}}}},"defer-to-connect":{"files":{"dist":{"files":{"index.js":{"size":1470,"offset":"14917757","integrity":{"algorithm":"SHA256","hash":"9229620f1a04026cdf15928468012ae8f681124c1128048f75e499164252dc25","blockSize":4194304,"blocks":["9229620f1a04026cdf15928468012ae8f681124c1128048f75e499164252dc25"]}}}},"LICENSE":{"size":1071,"offset":"14919227","integrity":{"algorithm":"SHA256","hash":"0194571d45a06ea2a22ceb51f981e3be92525966d28847dbc0d9982603bf90de","blockSize":4194304,"blocks":["0194571d45a06ea2a22ceb51f981e3be92525966d28847dbc0d9982603bf90de"]}},"package.json":{"size":881,"offset":"14920298","integrity":{"algorithm":"SHA256","hash":"187543f47a68e46517f3e747bc366f026347fa576d5b7e2701049e437342eb5e","blockSize":4194304,"blocks":["187543f47a68e46517f3e747bc366f026347fa576d5b7e2701049e437342eb5e"]}}}},"get-stream":{"files":{"buffer-stream.js":{"size":841,"offset":"14921179","integrity":{"algorithm":"SHA256","hash":"1ec268bb80d3fdd7f9051ef0fc78355d33fec1981ca8e54dabbd9d20bda3dfa1","blockSize":4194304,"blocks":["1ec268bb80d3fdd7f9051ef0fc78355d33fec1981ca8e54dabbd9d20bda3dfa1"]}},"index.js":{"size":1251,"offset":"14922020","integrity":{"algorithm":"SHA256","hash":"720e68406fdebaf70ca93c6cf2af2f3a33f7e6ec03988831c9eaaa2a4bb94224","blockSize":4194304,"blocks":["720e68406fdebaf70ca93c6cf2af2f3a33f7e6ec03988831c9eaaa2a4bb94224"]}},"license":{"size":1109,"offset":"14923271","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":519,"offset":"14924380","integrity":{"algorithm":"SHA256","hash":"2d799a66c482fa0453dedc8042851f1535ed515d0879f98fc1f0ed594622bb27","blockSize":4194304,"blocks":["2d799a66c482fa0453dedc8042851f1535ed515d0879f98fc1f0ed594622bb27"]}}}},"json-buffer":{"files":{"index.js":{"size":1503,"offset":"14924899","integrity":{"algorithm":"SHA256","hash":"1aade4bd35df47ade393dad25d7aa3d70e381116f0fafbc7a378ebd971949262","blockSize":4194304,"blocks":["1aade4bd35df47ade393dad25d7aa3d70e381116f0fafbc7a378ebd971949262"]}},"LICENSE":{"size":1071,"offset":"14926402","integrity":{"algorithm":"SHA256","hash":"715f1f0f2eb7688e53e4e958acdc7fc9e365ae3eaf26efc2604b93cc65fdc3f5","blockSize":4194304,"blocks":["715f1f0f2eb7688e53e4e958acdc7fc9e365ae3eaf26efc2604b93cc65fdc3f5"]}},"package.json":{"size":798,"offset":"14927473","integrity":{"algorithm":"SHA256","hash":"9b890979fda3e0b9ebd85a920e9491abd93a2a41898c66911b36f41945403a0f","blockSize":4194304,"blocks":["9b890979fda3e0b9ebd85a920e9491abd93a2a41898c66911b36f41945403a0f"]}}}},"keyv":{"files":{"LICENSE":{"size":1068,"offset":"14928271","integrity":{"algorithm":"SHA256","hash":"861908ec818ff6142fdd6c4b66d6264c206d3d5a46003b1342e1853a9a85abac","blockSize":4194304,"blocks":["861908ec818ff6142fdd6c4b66d6264c206d3d5a46003b1342e1853a9a85abac"]}},"package.json":{"size":816,"offset":"14929339","integrity":{"algorithm":"SHA256","hash":"cbf8372ee25b97dbc8d0f139f70da0e08f70bd0d69b73ef9dc918867e7c7cca3","blockSize":4194304,"blocks":["cbf8372ee25b97dbc8d0f139f70da0e08f70bd0d69b73ef9dc918867e7c7cca3"]}},"src":{"files":{"index.js":{"size":2295,"offset":"14930155","integrity":{"algorithm":"SHA256","hash":"2f0043d0ff0844eb0f38f49f97d4071f0bc8262266d34337556c415bf222dad4","blockSize":4194304,"blocks":["2f0043d0ff0844eb0f38f49f97d4071f0bc8262266d34337556c415bf222dad4"]}}}}}},"lowercase-keys":{"files":{"index.js":{"size":208,"offset":"14932450","integrity":{"algorithm":"SHA256","hash":"cb3197cc93dea8c87f95def58797c8b544ba1d780ec8591133147b224e1e8a34","blockSize":4194304,"blocks":["cb3197cc93dea8c87f95def58797c8b544ba1d780ec8591133147b224e1e8a34"]}},"license":{"size":1119,"offset":"14932658","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":407,"offset":"14933777","integrity":{"algorithm":"SHA256","hash":"d59d4830a9cd5c8fb2f16b0feaf347e63ca646fa293bef8610d29fa1d3e352fc","blockSize":4194304,"blocks":["d59d4830a9cd5c8fb2f16b0feaf347e63ca646fa293bef8610d29fa1d3e352fc"]}}}},"normalize-url":{"files":{"index.js":{"size":6046,"offset":"14934184","integrity":{"algorithm":"SHA256","hash":"ef38c621280f73d55837b3dec82990b80e2266f1a6bb0d0dd70784103f8e778d","blockSize":4194304,"blocks":["ef38c621280f73d55837b3dec82990b80e2266f1a6bb0d0dd70784103f8e778d"]}},"license":{"size":1109,"offset":"14940230","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":498,"offset":"14941339","integrity":{"algorithm":"SHA256","hash":"5ecde06dc628bf26b9674c128ac22ef0f5d902e69eb926a31dafe47fbb2c6077","blockSize":4194304,"blocks":["5ecde06dc628bf26b9674c128ac22ef0f5d902e69eb926a31dafe47fbb2c6077"]}}}},"p-cancelable":{"files":{"index.js":{"size":1927,"offset":"14941837","integrity":{"algorithm":"SHA256","hash":"24d81b312ede8c0cd2a88893aa9cc3624d443c158584c20aeacfc005e7b7cb85","blockSize":4194304,"blocks":["24d81b312ede8c0cd2a88893aa9cc3624d443c158584c20aeacfc005e7b7cb85"]}},"license":{"size":1109,"offset":"14943764","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":541,"offset":"14944873","integrity":{"algorithm":"SHA256","hash":"7a42e0167ef350b0e42d5b50a4a333707d1e4e275854b287d2df9f14acdd22ef","blockSize":4194304,"blocks":["7a42e0167ef350b0e42d5b50a4a333707d1e4e275854b287d2df9f14acdd22ef"]}}}},"responselike":{"files":{"LICENSE":{"size":1055,"offset":"14945414","integrity":{"algorithm":"SHA256","hash":"2c4e066228dbca96c8c6e8bef5377306f227ffa1d87a18a218b230e13ac5d39e","blockSize":4194304,"blocks":["2c4e066228dbca96c8c6e8bef5377306f227ffa1d87a18a218b230e13ac5d39e"]}},"package.json":{"size":559,"offset":"14946469","integrity":{"algorithm":"SHA256","hash":"00df95abcc8e712dc802aa90bb98bd4763695254dbcd1e54c0240c2331717a52","blockSize":4194304,"blocks":["00df95abcc8e712dc802aa90bb98bd4763695254dbcd1e54c0240c2331717a52"]}},"src":{"files":{"index.js":{"size":823,"offset":"14947028","integrity":{"algorithm":"SHA256","hash":"a154ca976934d0c3500f7f70d7d6f5fd5cf28eee82ceb8026f9c02064816b5cc","blockSize":4194304,"blocks":["a154ca976934d0c3500f7f70d7d6f5fd5cf28eee82ceb8026f9c02064816b5cc"]}}}}}}}},"package.json":{"size":1114,"offset":"14947851","integrity":{"algorithm":"SHA256","hash":"f03143a4ae67e97ddecf09d88724862e982f4a528cdfbe83f7db3dcee2beb42f","blockSize":4194304,"blocks":["f03143a4ae67e97ddecf09d88724862e982f4a528cdfbe83f7db3dcee2beb42f"]}},"source":{"files":{"as-promise.js":{"size":2878,"offset":"14948965","integrity":{"algorithm":"SHA256","hash":"d139282e078f6e77a60db0a41bbef4c2cf0449dd02fbc965a99df64c81f008d1","blockSize":4194304,"blocks":["d139282e078f6e77a60db0a41bbef4c2cf0449dd02fbc965a99df64c81f008d1"]}},"as-stream.js":{"size":2310,"offset":"14951843","integrity":{"algorithm":"SHA256","hash":"c9cb46c9bc894fdc29ecf4b15c2ee44e4a3c25c91f0fd6209f636aa0b21d40aa","blockSize":4194304,"blocks":["c9cb46c9bc894fdc29ecf4b15c2ee44e4a3c25c91f0fd6209f636aa0b21d40aa"]}},"create.js":{"size":2106,"offset":"14954153","integrity":{"algorithm":"SHA256","hash":"0c345a6ba801f065d347aa48e77972e7d73263b457e4cfb188f64af64b5d41c2","blockSize":4194304,"blocks":["0c345a6ba801f065d347aa48e77972e7d73263b457e4cfb188f64af64b5d41c2"]}},"errors.js":{"size":2842,"offset":"14956259","integrity":{"algorithm":"SHA256","hash":"9d2e4f20afc46a352add4d00c0d15a82bd8cb56a23ed03deb926802d55633026","blockSize":4194304,"blocks":["9d2e4f20afc46a352add4d00c0d15a82bd8cb56a23ed03deb926802d55633026"]}},"get-response.js":{"size":935,"offset":"14959101","integrity":{"algorithm":"SHA256","hash":"c5c18c9955efa57da5cef13a9424d9a38412df0e344f13ad6ad5cbdbd006b3f7","blockSize":4194304,"blocks":["c5c18c9955efa57da5cef13a9424d9a38412df0e344f13ad6ad5cbdbd006b3f7"]}},"index.js":{"size":939,"offset":"14960036","integrity":{"algorithm":"SHA256","hash":"4a02e633bed50e2a52c22e1901c37032777c8d5c45104f185519a21f1ebc1086","blockSize":4194304,"blocks":["4a02e633bed50e2a52c22e1901c37032777c8d5c45104f185519a21f1ebc1086"]}},"known-hook-events.js":{"size":132,"offset":"14960975","integrity":{"algorithm":"SHA256","hash":"0d8fec9bf904bb3d1735aec578b8aeddedf158b49d906448f7bd482e45260120","blockSize":4194304,"blocks":["0d8fec9bf904bb3d1735aec578b8aeddedf158b49d906448f7bd482e45260120"]}},"merge.js":{"size":1858,"offset":"14961107","integrity":{"algorithm":"SHA256","hash":"2b5bb2a5d8e088bf9e016296f5e8a59c4faff3f978e7c4f235b66099eb57eeeb","blockSize":4194304,"blocks":["2b5bb2a5d8e088bf9e016296f5e8a59c4faff3f978e7c4f235b66099eb57eeeb"]}},"normalize-arguments.js":{"size":7549,"offset":"14962965","integrity":{"algorithm":"SHA256","hash":"9b7d0ee65c4a8a59904749af9e293ee5445d3e4059e7e248fea2f7e954e5f280","blockSize":4194304,"blocks":["9b7d0ee65c4a8a59904749af9e293ee5445d3e4059e7e248fea2f7e954e5f280"]}},"progress.js":{"size":2324,"offset":"14970514","integrity":{"algorithm":"SHA256","hash":"9ca35bc3647814a9b37bd497da47eb2e52bb9317ab76f37cdef49ebed1840d43","blockSize":4194304,"blocks":["9ca35bc3647814a9b37bd497da47eb2e52bb9317ab76f37cdef49ebed1840d43"]}},"request-as-event-emitter.js":{"size":8856,"offset":"14972838","integrity":{"algorithm":"SHA256","hash":"924065592c208667e59c56e65a2c2023e34dfddf68a6bc8e50803479dba5e849","blockSize":4194304,"blocks":["924065592c208667e59c56e65a2c2023e34dfddf68a6bc8e50803479dba5e849"]}},"utils":{"files":{"deep-freeze.js":{"size":276,"offset":"14981694","integrity":{"algorithm":"SHA256","hash":"7c95f89c5f563badae35326ebbd548078fdaff3b5f0283bd6e1cca84fff08db4","blockSize":4194304,"blocks":["7c95f89c5f563badae35326ebbd548078fdaff3b5f0283bd6e1cca84fff08db4"]}},"get-body-size.js":{"size":644,"offset":"14981970","integrity":{"algorithm":"SHA256","hash":"5856e9557dd0477f5326f863af988ce1056723776142f6f64d213fa5733244ad","blockSize":4194304,"blocks":["5856e9557dd0477f5326f863af988ce1056723776142f6f64d213fa5733244ad"]}},"is-form-data.js":{"size":134,"offset":"14982614","integrity":{"algorithm":"SHA256","hash":"4f7d04b4a6bc061cbd3a0abd1e0c383a7b52887e60402facfb026c22a40b05ac","blockSize":4194304,"blocks":["4f7d04b4a6bc061cbd3a0abd1e0c383a7b52887e60402facfb026c22a40b05ac"]}},"timed-out.js":{"size":4421,"offset":"14982748","integrity":{"algorithm":"SHA256","hash":"366f20fffb876e969ae4c11a4ff19a43bca656eaccabf647afb348602f17fc62","blockSize":4194304,"blocks":["366f20fffb876e969ae4c11a4ff19a43bca656eaccabf647afb348602f17fc62"]}},"url-to-options.js":{"size":588,"offset":"14987169","integrity":{"algorithm":"SHA256","hash":"ebe92bffe2cd437a6af913bde0c674eb830ab20f5c8c3f94f4c06dba817de4cc","blockSize":4194304,"blocks":["ebe92bffe2cd437a6af913bde0c674eb830ab20f5c8c3f94f4c06dba817de4cc"]}}}}}}}},"graceful-fs":{"files":{"clone.js":{"size":496,"offset":"14987757","integrity":{"algorithm":"SHA256","hash":"7258eca52e65d69845759503f9fdd66c252f40e5eafb76db5d481172e31ac9ed","blockSize":4194304,"blocks":["7258eca52e65d69845759503f9fdd66c252f40e5eafb76db5d481172e31ac9ed"]}},"graceful-fs.js":{"size":9469,"offset":"14988253","integrity":{"algorithm":"SHA256","hash":"76c7b276d9fe190c22fd0e5f8f68bf77ee1dd4a603cce6c9a441f4965f9ee219","blockSize":4194304,"blocks":["76c7b276d9fe190c22fd0e5f8f68bf77ee1dd4a603cce6c9a441f4965f9ee219"]}},"legacy-streams.js":{"size":2655,"offset":"14997722","integrity":{"algorithm":"SHA256","hash":"60a6a7ecf7c3e55a3ffaae13433b6cff388b7205bba6daf393c863f77a949e36","blockSize":4194304,"blocks":["60a6a7ecf7c3e55a3ffaae13433b6cff388b7205bba6daf393c863f77a949e36"]}},"LICENSE":{"size":781,"offset":"15000377","integrity":{"algorithm":"SHA256","hash":"2fc5460f1526810979054ecd18cd01349b57f38ea56d1e920afdea34d104540c","blockSize":4194304,"blocks":["2fc5460f1526810979054ecd18cd01349b57f38ea56d1e920afdea34d104540c"]}},"package.json":{"size":557,"offset":"15001158","integrity":{"algorithm":"SHA256","hash":"2cfa7bc6e5824eea813961dd7a6d9b4a528c6608f51cb4c294364f9544d8c935","blockSize":4194304,"blocks":["2cfa7bc6e5824eea813961dd7a6d9b4a528c6608f51cb4c294364f9544d8c935"]}},"polyfills.js":{"size":9740,"offset":"15001715","integrity":{"algorithm":"SHA256","hash":"b20e26e07ff1368a4509bf312aa6a37f82eb44ed1b3f2d28eb5b284ba8275597","blockSize":4194304,"blocks":["b20e26e07ff1368a4509bf312aa6a37f82eb44ed1b3f2d28eb5b284ba8275597"]}}}},"hpagent":{"files":{".github":{"files":{"dependabot.yml":{"size":143,"offset":"15011455","integrity":{"algorithm":"SHA256","hash":"0f522f52a7b65133f8bcf3dbcf6b4c086683367fe4a7d6c70831e954008e98c6","blockSize":4194304,"blocks":["0f522f52a7b65133f8bcf3dbcf6b4c086683367fe4a7d6c70831e954008e98c6"]}},"workflows":{"files":{"build.yml":{"size":665,"offset":"15011598","integrity":{"algorithm":"SHA256","hash":"a3a0ce2bed2b035ff137eef42b35a3f5846ea8d2ae57e45879b8aa59dcfa5019","blockSize":4194304,"blocks":["a3a0ce2bed2b035ff137eef42b35a3f5846ea8d2ae57e45879b8aa59dcfa5019"]}}}}}},"index.js":{"size":3901,"offset":"15012263","integrity":{"algorithm":"SHA256","hash":"67c3bc6aa10eff6c4fb5ae537d73ad59a4353011cf864685af1f6d60746d986d","blockSize":4194304,"blocks":["67c3bc6aa10eff6c4fb5ae537d73ad59a4353011cf864685af1f6d60746d986d"]}},"index.mjs":{"size":149,"offset":"15016164","integrity":{"algorithm":"SHA256","hash":"384d8ad95e32d386864ef2ab8ddf352d1aea77909be027464ba4d746b786504e","blockSize":4194304,"blocks":["384d8ad95e32d386864ef2ab8ddf352d1aea77909be027464ba4d746b786504e"]}},"LICENSE":{"size":1075,"offset":"15016313","integrity":{"algorithm":"SHA256","hash":"866fc13def0e8186ac9d084a973e59a0208f7327b1daafb024bbb06227f61150","blockSize":4194304,"blocks":["866fc13def0e8186ac9d084a973e59a0208f7327b1daafb024bbb06227f61150"]}},"package.json":{"size":867,"offset":"15017388","integrity":{"algorithm":"SHA256","hash":"04ef06fccfdbd85ce99dd0ffdded0285495a2ab4ce59e8859a0eaf96cd14b5c1","blockSize":4194304,"blocks":["04ef06fccfdbd85ce99dd0ffdded0285495a2ab4ce59e8859a0eaf96cd14b5c1"]}}}},"http-assert":{"files":{"HISTORY.md":{"size":1636,"offset":"15018255","integrity":{"algorithm":"SHA256","hash":"bc4ee47f8db92b6f78868019ebb68681ea8dedad76d9a15f5d34d871581e02f1","blockSize":4194304,"blocks":["bc4ee47f8db92b6f78868019ebb68681ea8dedad76d9a15f5d34d871581e02f1"]}},"index.js":{"size":937,"offset":"15019891","integrity":{"algorithm":"SHA256","hash":"3e4ee0eb394e30b0d768deb747470244a08e0101a39e33f2ca9a5c5c7f21e163","blockSize":4194304,"blocks":["3e4ee0eb394e30b0d768deb747470244a08e0101a39e33f2ca9a5c5c7f21e163"]}},"LICENSE":{"size":1063,"offset":"15020828","integrity":{"algorithm":"SHA256","hash":"1f227645b834bbff7623b1e365f2b5a6d3ecb4dbda81ff385df72a1b3dbcc5a2","blockSize":4194304,"blocks":["1f227645b834bbff7623b1e365f2b5a6d3ecb4dbda81ff385df72a1b3dbcc5a2"]}},"node_modules":{"files":{"depd":{"files":{"History.md":{"size":2060,"offset":"15021891","integrity":{"algorithm":"SHA256","hash":"246dfedef218cd2daed303651ffce659beeb0da7a92b469deee5c940fc836a18","blockSize":4194304,"blocks":["246dfedef218cd2daed303651ffce659beeb0da7a92b469deee5c940fc836a18"]}},"index.js":{"size":10669,"offset":"15023951","integrity":{"algorithm":"SHA256","hash":"244dbbca14b8aa9c9b6be04912283ab704b92f11dcb9b23beb2ba81402fecc99","blockSize":4194304,"blocks":["244dbbca14b8aa9c9b6be04912283ab704b92f11dcb9b23beb2ba81402fecc99"]}},"lib":{"files":{"browser":{"files":{"index.js":{"size":1512,"offset":"15034620","integrity":{"algorithm":"SHA256","hash":"10b4d4a4e9d14e9e6a5ab7ced64405ef90e6bec94d479a8e223cbba88828ad79","blockSize":4194304,"blocks":["10b4d4a4e9d14e9e6a5ab7ced64405ef90e6bec94d479a8e223cbba88828ad79"]}}}},"compat":{"files":{"callsite-tostring.js":{"size":2229,"offset":"15036132","integrity":{"algorithm":"SHA256","hash":"702ab02dc767bd351fca5f9faa659327f22f4cfd2684e0a33b23447838f5773b","blockSize":4194304,"blocks":["702ab02dc767bd351fca5f9faa659327f22f4cfd2684e0a33b23447838f5773b"]}},"event-listener-count.js":{"size":338,"offset":"15038361","integrity":{"algorithm":"SHA256","hash":"5dc8bef6d7641158ccd485fece7fcf46566fe95b42e40a48ded7ea43366f0968","blockSize":4194304,"blocks":["5dc8bef6d7641158ccd485fece7fcf46566fe95b42e40a48ded7ea43366f0968"]}},"index.js":{"size":1421,"offset":"15038699","integrity":{"algorithm":"SHA256","hash":"76baf83317ac81045cefb9fcc8ec0d8e47dd0cfcbadd592f480349412e161861","blockSize":4194304,"blocks":["76baf83317ac81045cefb9fcc8ec0d8e47dd0cfcbadd592f480349412e161861"]}}}}}},"LICENSE":{"size":1094,"offset":"15040120","integrity":{"algorithm":"SHA256","hash":"bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400","blockSize":4194304,"blocks":["bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400"]}},"package.json":{"size":712,"offset":"15041214","integrity":{"algorithm":"SHA256","hash":"a620b841d1a3b3ad28fc71ad9f7380525f515ebbce975b5f18705146266cd2f6","blockSize":4194304,"blocks":["a620b841d1a3b3ad28fc71ad9f7380525f515ebbce975b5f18705146266cd2f6"]}}}},"http-errors":{"files":{"HISTORY.md":{"size":3210,"offset":"15041926","integrity":{"algorithm":"SHA256","hash":"df38bfd342a27e2d1d7bf523c1275b1fc04eca4414319dd31220716a7187e5ba","blockSize":4194304,"blocks":["df38bfd342a27e2d1d7bf523c1275b1fc04eca4414319dd31220716a7187e5ba"]}},"index.js":{"size":5878,"offset":"15045136","integrity":{"algorithm":"SHA256","hash":"045acbd1e3cfb85728771480bf748ffd02217713826bf1226b2098f1a22742cc","blockSize":4194304,"blocks":["045acbd1e3cfb85728771480bf748ffd02217713826bf1226b2098f1a22742cc"]}},"LICENSE":{"size":1168,"offset":"15051014","integrity":{"algorithm":"SHA256","hash":"dcb94ff9b1e037a847bc20589dc81a1066d041fd4c16deb18b0fa968c66cf395","blockSize":4194304,"blocks":["dcb94ff9b1e037a847bc20589dc81a1066d041fd4c16deb18b0fa968c66cf395"]}},"package.json":{"size":841,"offset":"15052182","integrity":{"algorithm":"SHA256","hash":"b0c39cf27ccd528312962e900a145ffa80f31582a77e820ecd61b267ebdfab95","blockSize":4194304,"blocks":["b0c39cf27ccd528312962e900a145ffa80f31582a77e820ecd61b267ebdfab95"]}}}},"setprototypeof":{"files":{"index.js":{"size":384,"offset":"15053023","integrity":{"algorithm":"SHA256","hash":"62193f6768a098bc245f88a86a955d50643f68537d181945f6eec5792e4a294b","blockSize":4194304,"blocks":["62193f6768a098bc245f88a86a955d50643f68537d181945f6eec5792e4a294b"]}},"LICENSE":{"size":727,"offset":"15053407","integrity":{"algorithm":"SHA256","hash":"76d6d1ea0c268da37dd3c961b4fcfb23dee8417fff9e8786d4d44c585b781b69","blockSize":4194304,"blocks":["76d6d1ea0c268da37dd3c961b4fcfb23dee8417fff9e8786d4d44c585b781b69"]}},"package.json":{"size":451,"offset":"15054134","integrity":{"algorithm":"SHA256","hash":"5f5995a125c4d6cb070f5922b59e09bd22f8c048d6e48242d6bb9e787bd1d548","blockSize":4194304,"blocks":["5f5995a125c4d6cb070f5922b59e09bd22f8c048d6e48242d6bb9e787bd1d548"]}}}}}},"package.json":{"size":684,"offset":"15054585","integrity":{"algorithm":"SHA256","hash":"56a68f462141a9ed2b24ff245e9d598396b19763e1f58968dd5e93eed9b31954","blockSize":4194304,"blocks":["56a68f462141a9ed2b24ff245e9d598396b19763e1f58968dd5e93eed9b31954"]}}}},"http-cache-semantics":{"files":{"index.js":{"size":23786,"offset":"15055269","integrity":{"algorithm":"SHA256","hash":"e7d167742a107d01ef06b1d392f759a7a655345608c5d9fb0dfffd90c590abb8","blockSize":4194304,"blocks":["e7d167742a107d01ef06b1d392f759a7a655345608c5d9fb0dfffd90c590abb8"]}},"LICENSE":{"size":1274,"offset":"15079055","integrity":{"algorithm":"SHA256","hash":"ab868ad5a2ef5068560d9cd3b2180ec63c140bb4c5cae1ba779d300a0ac74fa3","blockSize":4194304,"blocks":["ab868ad5a2ef5068560d9cd3b2180ec63c140bb4c5cae1ba779d300a0ac74fa3"]}},"package.json":{"size":630,"offset":"15080329","integrity":{"algorithm":"SHA256","hash":"3fa071d3b8ff8d52775b1ee8f6ec124578be30b3f8986382b3f1b7e36e364af5","blockSize":4194304,"blocks":["3fa071d3b8ff8d52775b1ee8f6ec124578be30b3f8986382b3f1b7e36e364af5"]}}}},"ieee754":{"files":{"index.js":{"size":2154,"offset":"15080959","integrity":{"algorithm":"SHA256","hash":"fe3e2b20c1ebb57c3b390c8f685ad1e04e6f493517fa7e432f4351bb77a1a4d0","blockSize":4194304,"blocks":["fe3e2b20c1ebb57c3b390c8f685ad1e04e6f493517fa7e432f4351bb77a1a4d0"]}},"LICENSE":{"size":1465,"offset":"15083113","integrity":{"algorithm":"SHA256","hash":"18d45466ba3253deae04667e267a91ea8de8548f18c1125264d1c9db28194cc1","blockSize":4194304,"blocks":["18d45466ba3253deae04667e267a91ea8de8548f18c1125264d1c9db28194cc1"]}},"package.json":{"size":799,"offset":"15084578","integrity":{"algorithm":"SHA256","hash":"64e599b24b161bb1ac005f901da2f04b7e250bd8831e194ee402c1e72bff7888","blockSize":4194304,"blocks":["64e599b24b161bb1ac005f901da2f04b7e250bd8831e194ee402c1e72bff7888"]}}}},"inherits":{"files":{"inherits_browser.js":{"size":753,"offset":"15085377","integrity":{"algorithm":"SHA256","hash":"ad322a7b1dec60f3d2ebda2091816469efb55b567d241cf3cf0fa4c5a4afe500","blockSize":4194304,"blocks":["ad322a7b1dec60f3d2ebda2091816469efb55b567d241cf3cf0fa4c5a4afe500"]}},"inherits.js":{"size":250,"offset":"15086130","integrity":{"algorithm":"SHA256","hash":"bb380f32bef5feb18678f0f45f88073fed5d7a0069a309132cb2080cd553d5c7","blockSize":4194304,"blocks":["bb380f32bef5feb18678f0f45f88073fed5d7a0069a309132cb2080cd553d5c7"]}},"LICENSE":{"size":749,"offset":"15086380","integrity":{"algorithm":"SHA256","hash":"5ffe28e7ade7d8f10d85d5337a73fd793dac5c462fb9a28fbf8c5046c7fbca3b","blockSize":4194304,"blocks":["5ffe28e7ade7d8f10d85d5337a73fd793dac5c462fb9a28fbf8c5046c7fbca3b"]}},"package.json":{"size":394,"offset":"15087129","integrity":{"algorithm":"SHA256","hash":"8bde8d8aeedbe677961a91d01b8f6df07253d95b0e03c178e748e44969a8885d","blockSize":4194304,"blocks":["8bde8d8aeedbe677961a91d01b8f6df07253d95b0e03c178e748e44969a8885d"]}}}},"is-fullwidth-code-point":{"files":{"index.js":{"size":1756,"offset":"15087523","integrity":{"algorithm":"SHA256","hash":"7db24c9c5d58273ba32eee1bec3dfebd393fdeddd0b5879ef01dc595476e6979","blockSize":4194304,"blocks":["7db24c9c5d58273ba32eee1bec3dfebd393fdeddd0b5879ef01dc595476e6979"]}},"license":{"size":1109,"offset":"15089279","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":537,"offset":"15090388","integrity":{"algorithm":"SHA256","hash":"a7b8154029328dcbfc790816357fde1a03f48f43854c7aabc5992853374a767e","blockSize":4194304,"blocks":["a7b8154029328dcbfc790816357fde1a03f48f43854c7aabc5992853374a767e"]}}}},"is-generator-function":{"files":{".eslintignore":{"size":10,"offset":"15090925","integrity":{"algorithm":"SHA256","hash":"5c5daf48fdf4db42e16c29b5b3de54984bafe0c2ff367a186ca97f1d4ed48290","blockSize":4194304,"blocks":["5c5daf48fdf4db42e16c29b5b3de54984bafe0c2ff367a186ca97f1d4ed48290"]}},".nvmrc":{"size":5,"offset":"15090935","integrity":{"algorithm":"SHA256","hash":"389b46f0445738f6b517def165c3e490efa2eb8825c695b8ac8221565e78e4fa","blockSize":4194304,"blocks":["389b46f0445738f6b517def165c3e490efa2eb8825c695b8ac8221565e78e4fa"]}},".nycrc":{"size":139,"offset":"15090940","integrity":{"algorithm":"SHA256","hash":"997785c50b0773e5e18bf15550fbf57823c634fefe623cd37b3c83696402ad0a","blockSize":4194304,"blocks":["997785c50b0773e5e18bf15550fbf57823c634fefe623cd37b3c83696402ad0a"]}},"index.js":{"size":1000,"offset":"15091079","integrity":{"algorithm":"SHA256","hash":"73931b44d0c87181f2cb0671fe96f35b71fddc1947111cc7be7cc6d34c26d866","blockSize":4194304,"blocks":["73931b44d0c87181f2cb0671fe96f35b71fddc1947111cc7be7cc6d34c26d866"]}},"LICENSE":{"size":1081,"offset":"15092079","integrity":{"algorithm":"SHA256","hash":"dc0fe5a22d9336f345ee984f9bf56f11f22877a3aa5fd16a1db9a8ca0e23a5d1","blockSize":4194304,"blocks":["dc0fe5a22d9336f345ee984f9bf56f11f22877a3aa5fd16a1db9a8ca0e23a5d1"]}},"package.json":{"size":1395,"offset":"15093160","integrity":{"algorithm":"SHA256","hash":"2038259154297420db7b54c2bd13eefefaad6f1b2cf8d90a65afd999aed9d62e","blockSize":4194304,"blocks":["2038259154297420db7b54c2bd13eefefaad6f1b2cf8d90a65afd999aed9d62e"]}}}},"is-stream":{"files":{"index.js":{"size":800,"offset":"15094555","integrity":{"algorithm":"SHA256","hash":"7d1e40cb399de158f747115c7265aa8512baf1a13146db7091b793e78ca3115e","blockSize":4194304,"blocks":["7d1e40cb399de158f747115c7265aa8512baf1a13146db7091b793e78ca3115e"]}},"license":{"size":1119,"offset":"15095355","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":445,"offset":"15096474","integrity":{"algorithm":"SHA256","hash":"843c51afd614e21c8a0178d7ff6cedfb34e5743b0b6228e9b0ef4de1b6fd6c17","blockSize":4194304,"blocks":["843c51afd614e21c8a0178d7ff6cedfb34e5743b0b6228e9b0ef4de1b6fd6c17"]}}}},"isexe":{"files":{"index.js":{"size":1192,"offset":"15096919","integrity":{"algorithm":"SHA256","hash":"7af7a68708317ab2b8743b44591d98ca6f5ca787e89e7c289154471fd2f67331","blockSize":4194304,"blocks":["7af7a68708317ab2b8743b44591d98ca6f5ca787e89e7c289154471fd2f67331"]}},"LICENSE":{"size":765,"offset":"15098111","integrity":{"algorithm":"SHA256","hash":"4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b","blockSize":4194304,"blocks":["4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b"]}},"mode.js":{"size":909,"offset":"15098876","integrity":{"algorithm":"SHA256","hash":"0381513485dd6d0799b160a5c0bf7b4a79d1ece5c32182de44aa73f756a7ac54","blockSize":4194304,"blocks":["0381513485dd6d0799b160a5c0bf7b4a79d1ece5c32182de44aa73f756a7ac54"]}},"package.json":{"size":512,"offset":"15099785","integrity":{"algorithm":"SHA256","hash":"8a4bbdcc3391ffc88bdbba977ebdae17eedc5dbb0a176a66c30da6d6fa14daba","blockSize":4194304,"blocks":["8a4bbdcc3391ffc88bdbba977ebdae17eedc5dbb0a176a66c30da6d6fa14daba"]}},"windows.js":{"size":890,"offset":"15100297","integrity":{"algorithm":"SHA256","hash":"b422b8fbb7815542dfbd1b3adaec5700249a1934c44a1d994654329c06fc1018","blockSize":4194304,"blocks":["b422b8fbb7815542dfbd1b3adaec5700249a1934c44a1d994654329c06fc1018"]}}}},"jsonfile":{"files":{"index.js":{"size":1900,"offset":"15101187","integrity":{"algorithm":"SHA256","hash":"2cdf22ffb5a170ad2cf10cbdf647e2a9366b6afa11e9b4c2370d0cf5b1f700b1","blockSize":4194304,"blocks":["2cdf22ffb5a170ad2cf10cbdf647e2a9366b6afa11e9b4c2370d0cf5b1f700b1"]}},"LICENSE":{"size":1110,"offset":"15103087","integrity":{"algorithm":"SHA256","hash":"a9801fb52ba22ef808682a094da8a7a480584b7ed0dfd0d888ab543616335031","blockSize":4194304,"blocks":["a9801fb52ba22ef808682a094da8a7a480584b7ed0dfd0d888ab543616335031"]}},"package.json":{"size":558,"offset":"15104197","integrity":{"algorithm":"SHA256","hash":"97dd73da7fecf4b16cf7bb766cbfee7d55de9c7e2b864b982a0936247310eac8","blockSize":4194304,"blocks":["97dd73da7fecf4b16cf7bb766cbfee7d55de9c7e2b864b982a0936247310eac8"]}},"utils.js":{"size":498,"offset":"15104755","integrity":{"algorithm":"SHA256","hash":"b0c188696676561411f3c5784d7de61bf21927f9c334e0cfb9136a8b7c82be5d","blockSize":4194304,"blocks":["b0c188696676561411f3c5784d7de61bf21927f9c334e0cfb9136a8b7c82be5d"]}}}},"keygrip":{"files":{"HISTORY.md":{"size":451,"offset":"15105253","integrity":{"algorithm":"SHA256","hash":"4e894cb71d803dc8326953f05a054ce7136143260ad1970185fb5e78cef3be49","blockSize":4194304,"blocks":["4e894cb71d803dc8326953f05a054ce7136143260ad1970185fb5e78cef3be49"]}},"index.js":{"size":1158,"offset":"15105704","integrity":{"algorithm":"SHA256","hash":"4a38fe59a5424e779823bd749d4dd790e0d58faca993886a43bb1f68161fc382","blockSize":4194304,"blocks":["4a38fe59a5424e779823bd749d4dd790e0d58faca993886a43bb1f68161fc382"]}},"LICENSE":{"size":1122,"offset":"15106862","integrity":{"algorithm":"SHA256","hash":"f2281fe0b24e1ff9d92f3f93244f2da0cba5b0670ac0a5cd53523b797d166cfb","blockSize":4194304,"blocks":["f2281fe0b24e1ff9d92f3f93244f2da0cba5b0670ac0a5cd53523b797d166cfb"]}},"package.json":{"size":419,"offset":"15107984","integrity":{"algorithm":"SHA256","hash":"f05d62cece4426c7aecc960dacfc738ddd4e7e729cb8a0bc8a35dba403b3f100","blockSize":4194304,"blocks":["f05d62cece4426c7aecc960dacfc738ddd4e7e729cb8a0bc8a35dba403b3f100"]}}}},"koa":{"files":{"dist":{"files":{"koa.mjs":{"size":102,"offset":"15117106","integrity":{"algorithm":"SHA256","hash":"b28ca68be930b23e6d358c5263a440b1e349254a07cc370901f1a7658cd3ce98","blockSize":4194304,"blocks":["b28ca68be930b23e6d358c5263a440b1e349254a07cc370901f1a7658cd3ce98"]}}}},"History.md":{"size":30047,"offset":"15117208","integrity":{"algorithm":"SHA256","hash":"47b85639e5b0c4a805180afdaa42b53ebe7a01c186c92c371a5919618c1ad95f","blockSize":4194304,"blocks":["47b85639e5b0c4a805180afdaa42b53ebe7a01c186c92c371a5919618c1ad95f"]}},"lib":{"files":{"application.js":{"size":7342,"offset":"15147255","integrity":{"algorithm":"SHA256","hash":"033e771eba7a0fc1cfe758c7e16899f45b14db3763e3c57d5262a2a70c41cf1d","blockSize":4194304,"blocks":["033e771eba7a0fc1cfe758c7e16899f45b14db3763e3c57d5262a2a70c41cf1d"]}},"context.js":{"size":5582,"offset":"15154597","integrity":{"algorithm":"SHA256","hash":"b68b7f4f9537a04361c1e19e43b58b699779528c26444ece630ad77ef9723ea2","blockSize":4194304,"blocks":["b68b7f4f9537a04361c1e19e43b58b699779528c26444ece630ad77ef9723ea2"]}},"request.js":{"size":14464,"offset":"15160179","integrity":{"algorithm":"SHA256","hash":"0d2f7ebc44136387b13c2747faf97b9c53c3a0763ea3028b01f1daf77359dbb1","blockSize":4194304,"blocks":["0d2f7ebc44136387b13c2747faf97b9c53c3a0763ea3028b01f1daf77359dbb1"]}},"response.js":{"size":12101,"offset":"15174643","integrity":{"algorithm":"SHA256","hash":"70e38e233250c5310c73e7dd44c2f72e66e309722375789bf5138d118547f0fe","blockSize":4194304,"blocks":["70e38e233250c5310c73e7dd44c2f72e66e309722375789bf5138d118547f0fe"]}}}},"LICENSE":{"size":1079,"offset":"15186744","integrity":{"algorithm":"SHA256","hash":"16943a6ac79711e26289640dcca989be857059b938380b118bca5afc1ea4e7d7","blockSize":4194304,"blocks":["16943a6ac79711e26289640dcca989be857059b938380b118bca5afc1ea4e7d7"]}},"node_modules":{"files":{"content-disposition":{"files":{"HISTORY.md":{"size":952,"offset":"15187823","integrity":{"algorithm":"SHA256","hash":"92037fcbda27b765821d33c5fbeb899a1b0ff5a986bd4907e9b3f45034a42174","blockSize":4194304,"blocks":["92037fcbda27b765821d33c5fbeb899a1b0ff5a986bd4907e9b3f45034a42174"]}},"index.js":{"size":10594,"offset":"15188775","integrity":{"algorithm":"SHA256","hash":"15eb8fd0bc070ec9b43259f4f7df49dc805f1e6837f3c9e547ff0b424c482ded","blockSize":4194304,"blocks":["15eb8fd0bc070ec9b43259f4f7df49dc805f1e6837f3c9e547ff0b424c482ded"]}},"LICENSE":{"size":1094,"offset":"15199369","integrity":{"algorithm":"SHA256","hash":"bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400","blockSize":4194304,"blocks":["bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400"]}},"package.json":{"size":789,"offset":"15200463","integrity":{"algorithm":"SHA256","hash":"e61b9b93cb8c13e47c2f76cec57fd2f324c7a72feb352f3df0f6806754d7aa23","blockSize":4194304,"blocks":["e61b9b93cb8c13e47c2f76cec57fd2f324c7a72feb352f3df0f6806754d7aa23"]}}}},"debug":{"files":{"LICENSE":{"size":1107,"offset":"15201252","integrity":{"algorithm":"SHA256","hash":"98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422","blockSize":4194304,"blocks":["98c970de440dcfc77471610aec2377c9d9b0db2b3be6d1add524a586e1d7f422"]}},"Makefile":{"size":1234,"offset":"15202359","integrity":{"algorithm":"SHA256","hash":"6710a17e1572ed23600b5746cb6bae63bb0fa27b46c4e5a1604e45956edbccea","blockSize":4194304,"blocks":["6710a17e1572ed23600b5746cb6bae63bb0fa27b46c4e5a1604e45956edbccea"]}},"node.js":{"size":40,"offset":"15203593","integrity":{"algorithm":"SHA256","hash":"996b381f353555cb172ebb2802bb2a7323442ff67b7b530cc26834058d7f31a2","blockSize":4194304,"blocks":["996b381f353555cb172ebb2802bb2a7323442ff67b7b530cc26834058d7f31a2"]}},"package.json":{"size":830,"offset":"15203633","integrity":{"algorithm":"SHA256","hash":"5aacf539d183c755a80e6212c933e2459eee16256bb5cbc0617b6164f0236b74","blockSize":4194304,"blocks":["5aacf539d183c755a80e6212c933e2459eee16256bb5cbc0617b6164f0236b74"]}},"src":{"files":{"browser.js":{"size":5707,"offset":"15204463","integrity":{"algorithm":"SHA256","hash":"ff0797d27d04ba7f69485abb04357ec274d6e0e896896e6cf640d29a9d399bb0","blockSize":4194304,"blocks":["ff0797d27d04ba7f69485abb04357ec274d6e0e896896e6cf640d29a9d399bb0"]}},"debug.js":{"size":4889,"offset":"15210170","integrity":{"algorithm":"SHA256","hash":"c2df5319cf8768d1bb64f99f74e7dc14188a9455b20509b9a8c4bd126a2b5e4e","blockSize":4194304,"blocks":["c2df5319cf8768d1bb64f99f74e7dc14188a9455b20509b9a8c4bd126a2b5e4e"]}},"index.js":{"size":263,"offset":"15215059","integrity":{"algorithm":"SHA256","hash":"27a340bb23865b2eee705d7fdc000538ad2664564bfd2148f30cc5921ceb722e","blockSize":4194304,"blocks":["27a340bb23865b2eee705d7fdc000538ad2664564bfd2148f30cc5921ceb722e"]}},"node.js":{"size":4339,"offset":"15215322","integrity":{"algorithm":"SHA256","hash":"23a1f983515544cdb386e1c17605ec4717399ac95c1be9d8f1cb5b2c116a1494","blockSize":4194304,"blocks":["23a1f983515544cdb386e1c17605ec4717399ac95c1be9d8f1cb5b2c116a1494"]}}}}}},"destroy":{"files":{"index.js":{"size":1043,"offset":"15219661","integrity":{"algorithm":"SHA256","hash":"9d23fb0d80472356bf635b3e4fc46909914c34c930eafc7b8348d7e3653fcf0c","blockSize":4194304,"blocks":["9d23fb0d80472356bf635b3e4fc46909914c34c930eafc7b8348d7e3653fcf0c"]}},"LICENSE":{"size":1099,"offset":"15220704","integrity":{"algorithm":"SHA256","hash":"965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288","blockSize":4194304,"blocks":["965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288"]}},"package.json":{"size":444,"offset":"15221803","integrity":{"algorithm":"SHA256","hash":"b704b8109472487e71ee0e719453b440310854402672fa3cd1bf0bf2f3f37bdb","blockSize":4194304,"blocks":["b704b8109472487e71ee0e719453b440310854402672fa3cd1bf0bf2f3f37bdb"]}}}},"http-errors":{"files":{"HISTORY.md":{"size":3349,"offset":"15222247","integrity":{"algorithm":"SHA256","hash":"0f1403ac70db7c58622c2c9b8354ddb6f0bf2b141f8c289b258c54e82e234a6b","blockSize":4194304,"blocks":["0f1403ac70db7c58622c2c9b8354ddb6f0bf2b141f8c289b258c54e82e234a6b"]}},"index.js":{"size":6521,"offset":"15225596","integrity":{"algorithm":"SHA256","hash":"d7452a6c385a67c970b4506317db677facfda0c993e8d8f6360fe906ed8d41d4","blockSize":4194304,"blocks":["d7452a6c385a67c970b4506317db677facfda0c993e8d8f6360fe906ed8d41d4"]}},"LICENSE":{"size":1168,"offset":"15232117","integrity":{"algorithm":"SHA256","hash":"dcb94ff9b1e037a847bc20589dc81a1066d041fd4c16deb18b0fa968c66cf395","blockSize":4194304,"blocks":["dcb94ff9b1e037a847bc20589dc81a1066d041fd4c16deb18b0fa968c66cf395"]}},"node_modules":{"files":{"depd":{"files":{"History.md":{"size":2060,"offset":"15233285","integrity":{"algorithm":"SHA256","hash":"246dfedef218cd2daed303651ffce659beeb0da7a92b469deee5c940fc836a18","blockSize":4194304,"blocks":["246dfedef218cd2daed303651ffce659beeb0da7a92b469deee5c940fc836a18"]}},"index.js":{"size":10669,"offset":"15235345","integrity":{"algorithm":"SHA256","hash":"244dbbca14b8aa9c9b6be04912283ab704b92f11dcb9b23beb2ba81402fecc99","blockSize":4194304,"blocks":["244dbbca14b8aa9c9b6be04912283ab704b92f11dcb9b23beb2ba81402fecc99"]}},"lib":{"files":{"browser":{"files":{"index.js":{"size":1512,"offset":"15246014","integrity":{"algorithm":"SHA256","hash":"10b4d4a4e9d14e9e6a5ab7ced64405ef90e6bec94d479a8e223cbba88828ad79","blockSize":4194304,"blocks":["10b4d4a4e9d14e9e6a5ab7ced64405ef90e6bec94d479a8e223cbba88828ad79"]}}}},"compat":{"files":{"callsite-tostring.js":{"size":2229,"offset":"15247526","integrity":{"algorithm":"SHA256","hash":"702ab02dc767bd351fca5f9faa659327f22f4cfd2684e0a33b23447838f5773b","blockSize":4194304,"blocks":["702ab02dc767bd351fca5f9faa659327f22f4cfd2684e0a33b23447838f5773b"]}},"event-listener-count.js":{"size":338,"offset":"15249755","integrity":{"algorithm":"SHA256","hash":"5dc8bef6d7641158ccd485fece7fcf46566fe95b42e40a48ded7ea43366f0968","blockSize":4194304,"blocks":["5dc8bef6d7641158ccd485fece7fcf46566fe95b42e40a48ded7ea43366f0968"]}},"index.js":{"size":1421,"offset":"15250093","integrity":{"algorithm":"SHA256","hash":"76baf83317ac81045cefb9fcc8ec0d8e47dd0cfcbadd592f480349412e161861","blockSize":4194304,"blocks":["76baf83317ac81045cefb9fcc8ec0d8e47dd0cfcbadd592f480349412e161861"]}}}}}},"LICENSE":{"size":1094,"offset":"15251514","integrity":{"algorithm":"SHA256","hash":"bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400","blockSize":4194304,"blocks":["bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400"]}},"package.json":{"size":712,"offset":"15252608","integrity":{"algorithm":"SHA256","hash":"a620b841d1a3b3ad28fc71ad9f7380525f515ebbce975b5f18705146266cd2f6","blockSize":4194304,"blocks":["a620b841d1a3b3ad28fc71ad9f7380525f515ebbce975b5f18705146266cd2f6"]}}}}}},"package.json":{"size":837,"offset":"15253320","integrity":{"algorithm":"SHA256","hash":"def593fcdb2e1fa3386df4b26fc2a4e472e6ebf6c332837f03b281967c609e9e","blockSize":4194304,"blocks":["def593fcdb2e1fa3386df4b26fc2a4e472e6ebf6c332837f03b281967c609e9e"]}}}},"ms":{"files":{"index.js":{"size":2764,"offset":"15254157","integrity":{"algorithm":"SHA256","hash":"4bd92209cb9dacf3e3773e725acb7aaec43ea9e78540324e4d0f73e5ce9adef7","blockSize":4194304,"blocks":["4bd92209cb9dacf3e3773e725acb7aaec43ea9e78540324e4d0f73e5ce9adef7"]}},"license.md":{"size":1077,"offset":"15256921","integrity":{"algorithm":"SHA256","hash":"6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1","blockSize":4194304,"blocks":["6652830c2607c722b66f1b57de15877ab8fc5dca406cc5b335afeb365d0f32c1"]}},"package.json":{"size":469,"offset":"15257998","integrity":{"algorithm":"SHA256","hash":"72a34b18a15caec1a2090e28951128f015f6e92d882e4211f08e8284c0f8c3d3","blockSize":4194304,"blocks":["72a34b18a15caec1a2090e28951128f015f6e92d882e4211f08e8284c0f8c3d3"]}}}},"on-finished":{"files":{"HISTORY.md":{"size":1694,"offset":"15258467","integrity":{"algorithm":"SHA256","hash":"2aa39297d1ba1bab7f900de235bca02483aa60493d14cc1dd140c814b028d8cf","blockSize":4194304,"blocks":["2aa39297d1ba1bab7f900de235bca02483aa60493d14cc1dd140c814b028d8cf"]}},"index.js":{"size":3686,"offset":"15260161","integrity":{"algorithm":"SHA256","hash":"b0314432e091ecc1f7095ac5f49c6705d5fb559b0c3fd22e2d750ef59e76fa24","blockSize":4194304,"blocks":["b0314432e091ecc1f7095ac5f49c6705d5fb559b0c3fd22e2d750ef59e76fa24"]}},"LICENSE":{"size":1167,"offset":"15263847","integrity":{"algorithm":"SHA256","hash":"8089bcc08845ec143e5761f4a101a65b8c792a0dedbfeeb90a15560c0b77f768","blockSize":4194304,"blocks":["8089bcc08845ec143e5761f4a101a65b8c792a0dedbfeeb90a15560c0b77f768"]}},"package.json":{"size":419,"offset":"15265014","integrity":{"algorithm":"SHA256","hash":"58b6530154ef8bb1303fae09a3391189581ccaef0da1221c5641d3802edf93c7","blockSize":4194304,"blocks":["58b6530154ef8bb1303fae09a3391189581ccaef0da1221c5641d3802edf93c7"]}}}},"safe-buffer":{"files":{"index.js":{"size":1529,"offset":"15265433","integrity":{"algorithm":"SHA256","hash":"d58af21cb0518864d0c505742d1af71e5b5e1f142f4c0f27353aa0f431a616d4","blockSize":4194304,"blocks":["d58af21cb0518864d0c505742d1af71e5b5e1f142f4c0f27353aa0f431a616d4"]}},"LICENSE":{"size":1081,"offset":"15266962","integrity":{"algorithm":"SHA256","hash":"c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac","blockSize":4194304,"blocks":["c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac"]}},"package.json":{"size":500,"offset":"15268043","integrity":{"algorithm":"SHA256","hash":"0bb53dcf379ffebc8f8baa2d2a4efc80be25f203509da73cc17864b97cb9556e","blockSize":4194304,"blocks":["0bb53dcf379ffebc8f8baa2d2a4efc80be25f203509da73cc17864b97cb9556e"]}}}}}},"package.json":{"size":1454,"offset":"15268543","integrity":{"algorithm":"SHA256","hash":"89ab1ca83c953b209aa390594488d69c834db96e7ffc4a978267c1c8bd3cc442","blockSize":4194304,"blocks":["89ab1ca83c953b209aa390594488d69c834db96e7ffc4a978267c1c8bd3cc442"]}}}},"koa-compose":{"files":{"History.md":{"size":1226,"offset":"15108403","integrity":{"algorithm":"SHA256","hash":"0e513fb9c2ab904096490c85c8f8b383ec501118d95a1aa24e1f812b04fc00a7","blockSize":4194304,"blocks":["0e513fb9c2ab904096490c85c8f8b383ec501118d95a1aa24e1f812b04fc00a7"]}},"index.js":{"size":1115,"offset":"15109629","integrity":{"algorithm":"SHA256","hash":"88d51793de9744810cf0ca5db4c7f00816cafed2d6d682e1ccc21e14e19040ba","blockSize":4194304,"blocks":["88d51793de9744810cf0ca5db4c7f00816cafed2d6d682e1ccc21e14e19040ba"]}},"package.json":{"size":373,"offset":"15110744","integrity":{"algorithm":"SHA256","hash":"6f7d0f662c8caed5f344b0609928b034f9b191ecafad013f922a8083b614daeb","blockSize":4194304,"blocks":["6f7d0f662c8caed5f344b0609928b034f9b191ecafad013f922a8083b614daeb"]}}}},"koa-convert":{"files":{"index.js":{"size":1584,"offset":"15111117","integrity":{"algorithm":"SHA256","hash":"294bbfc2d06c69f53c0231dbc254f8d5746daef353aeb13f0e24894cb68fc0f2","blockSize":4194304,"blocks":["294bbfc2d06c69f53c0231dbc254f8d5746daef353aeb13f0e24894cb68fc0f2"]}},"LICENSE":{"size":1075,"offset":"15112701","integrity":{"algorithm":"SHA256","hash":"b02009ad8584e41528425fdae297907e74b73b1dd4c90ae0dc43a52a1c58bd2b","blockSize":4194304,"blocks":["b02009ad8584e41528425fdae297907e74b73b1dd4c90ae0dc43a52a1c58bd2b"]}},"node_modules":{"files":{"koa-compose":{"files":{"History.md":{"size":1034,"offset":"15113776","integrity":{"algorithm":"SHA256","hash":"a4acc966664b77ff19c0567fce9c0e735af63bf9794ccf0d150481f30de44037","blockSize":4194304,"blocks":["a4acc966664b77ff19c0567fce9c0e735af63bf9794ccf0d150481f30de44037"]}},"index.js":{"size":1189,"offset":"15114810","integrity":{"algorithm":"SHA256","hash":"238e9a70e65e44446cb1f6b166d3a04c6642da1d838edfe4b8f242d21c1a292d","blockSize":4194304,"blocks":["238e9a70e65e44446cb1f6b166d3a04c6642da1d838edfe4b8f242d21c1a292d"]}},"package.json":{"size":445,"offset":"15115999","integrity":{"algorithm":"SHA256","hash":"14a1bdee4a1eb7f0ea65cf899b55238258e1c445636c2d6d9f156d296d54d735","blockSize":4194304,"blocks":["14a1bdee4a1eb7f0ea65cf899b55238258e1c445636c2d6d9f156d296d54d735"]}}}}}},"package.json":{"size":662,"offset":"15116444","integrity":{"algorithm":"SHA256","hash":"91413f35611acf30941eec6c2cbd95edb1d70064844bea304d960b268a58f1fa","blockSize":4194304,"blocks":["91413f35611acf30941eec6c2cbd95edb1d70064844bea304d960b268a58f1fa"]}}}},"locate-path":{"files":{"index.js":{"size":539,"offset":"15269997","integrity":{"algorithm":"SHA256","hash":"0d01be23e2a31212f61ae8856bd916709156f2c56c7434dbe97ea29624b77fd7","blockSize":4194304,"blocks":["0d01be23e2a31212f61ae8856bd916709156f2c56c7434dbe97ea29624b77fd7"]}},"license":{"size":1109,"offset":"15270536","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":515,"offset":"15271645","integrity":{"algorithm":"SHA256","hash":"ce0e3f841bdf450a3c54421abf5b930daabe079e60c8f6ce2ba9252a017801f2","blockSize":4194304,"blocks":["ce0e3f841bdf450a3c54421abf5b930daabe079e60c8f6ce2ba9252a017801f2"]}}}},"lodash":{"files":{"_apply.js":{"size":714,"offset":"15272160","integrity":{"algorithm":"SHA256","hash":"5ca933653821ae52ba593356d8c761624ed66f0b40860c7648a3acf278f0596a","blockSize":4194304,"blocks":["5ca933653821ae52ba593356d8c761624ed66f0b40860c7648a3acf278f0596a"]}},"_arrayAggregator.js":{"size":684,"offset":"15272874","integrity":{"algorithm":"SHA256","hash":"fbd5a9f515a50712b4f145f74ea236f7a5f11ffbc851f900a0a9b6c80ce29c6d","blockSize":4194304,"blocks":["fbd5a9f515a50712b4f145f74ea236f7a5f11ffbc851f900a0a9b6c80ce29c6d"]}},"_arrayEach.js":{"size":537,"offset":"15273558","integrity":{"algorithm":"SHA256","hash":"6fd506ed7d2e0a3b216ec2969f391e7b8d2c7c123a0bb49bbeccea55da740cb5","blockSize":4194304,"blocks":["6fd506ed7d2e0a3b216ec2969f391e7b8d2c7c123a0bb49bbeccea55da740cb5"]}},"_arrayEachRight.js":{"size":528,"offset":"15274095","integrity":{"algorithm":"SHA256","hash":"3410df94969c310f7e3146d694e40d7d2ea20ed85f508057a8398bb870906f7d","blockSize":4194304,"blocks":["3410df94969c310f7e3146d694e40d7d2ea20ed85f508057a8398bb870906f7d"]}},"_arrayEvery.js":{"size":597,"offset":"15274623","integrity":{"algorithm":"SHA256","hash":"c9de9f02349af14ef1c23f0579c1b24f0756c0776260a3942f9705eec284960c","blockSize":4194304,"blocks":["c9de9f02349af14ef1c23f0579c1b24f0756c0776260a3942f9705eec284960c"]}},"_arrayFilter.js":{"size":632,"offset":"15275220","integrity":{"algorithm":"SHA256","hash":"12fd6cb97760b1bcb96425c29119ac39c747c6c6b24a4e2398cdc8d859a3e574","blockSize":4194304,"blocks":["12fd6cb97760b1bcb96425c29119ac39c747c6c6b24a4e2398cdc8d859a3e574"]}},"_arrayIncludes.js":{"size":526,"offset":"15275852","integrity":{"algorithm":"SHA256","hash":"7f4bc35c7982e2df9b1c3fc1f1dae297327ab45a1b942b5beee9814bc061daae","blockSize":4194304,"blocks":["7f4bc35c7982e2df9b1c3fc1f1dae297327ab45a1b942b5beee9814bc061daae"]}},"_arrayIncludesWith.js":{"size":615,"offset":"15276378","integrity":{"algorithm":"SHA256","hash":"a1310b2b3abe1a6733791f803bad85ea25147bf84512cfe4380ef8afc738b81b","blockSize":4194304,"blocks":["a1310b2b3abe1a6733791f803bad85ea25147bf84512cfe4380ef8afc738b81b"]}},"_arrayLikeKeys.js":{"size":1778,"offset":"15276993","integrity":{"algorithm":"SHA256","hash":"456bbf153f5601f6835cfa2e72e88390319ec40333b8a94dfa4e11f7cea98acd","blockSize":4194304,"blocks":["456bbf153f5601f6835cfa2e72e88390319ec40333b8a94dfa4e11f7cea98acd"]}},"_arrayMap.js":{"size":556,"offset":"15278771","integrity":{"algorithm":"SHA256","hash":"5917472b5772ba66ed65019e35da11c7a2a45737e25bc0d7e5635e3af73383bd","blockSize":4194304,"blocks":["5917472b5772ba66ed65019e35da11c7a2a45737e25bc0d7e5635e3af73383bd"]}},"_arrayPush.js":{"size":437,"offset":"15279327","integrity":{"algorithm":"SHA256","hash":"fc4429d7cd9b2b241877d0f28c746a7475341126077c4c165cfe78806a266d2f","blockSize":4194304,"blocks":["fc4429d7cd9b2b241877d0f28c746a7475341126077c4c165cfe78806a266d2f"]}},"_arrayReduce.js":{"size":787,"offset":"15279764","integrity":{"algorithm":"SHA256","hash":"3b8b443455becd548f91970799bb8dd0942284cb6b131464075076cd6c3911c3","blockSize":4194304,"blocks":["3b8b443455becd548f91970799bb8dd0942284cb6b131464075076cd6c3911c3"]}},"_arrayReduceRight.js":{"size":777,"offset":"15280551","integrity":{"algorithm":"SHA256","hash":"0978dabc488477a5a3e79624d403c85308df229c688048d5b440483f08e9b019","blockSize":4194304,"blocks":["0978dabc488477a5a3e79624d403c85308df229c688048d5b440483f08e9b019"]}},"_arraySample.js":{"size":363,"offset":"15281328","integrity":{"algorithm":"SHA256","hash":"92bf156e5a398c8a1156b88c6c7c083defd509b4aca807d9e2e9bd2d2e742927","blockSize":4194304,"blocks":["92bf156e5a398c8a1156b88c6c7c083defd509b4aca807d9e2e9bd2d2e742927"]}},"_arraySampleSize.js":{"size":500,"offset":"15281691","integrity":{"algorithm":"SHA256","hash":"0e54c15d9a074cc85e5b6a0eb93c5c69706ad5cb6daa99dfe03cbf3095ae1015","blockSize":4194304,"blocks":["0e54c15d9a074cc85e5b6a0eb93c5c69706ad5cb6daa99dfe03cbf3095ae1015"]}},"_arrayShuffle.js":{"size":365,"offset":"15282191","integrity":{"algorithm":"SHA256","hash":"09e353d332e22f6d553b5aa90ab1cf8e1a03c190cacc4867b260ff5e63bab91d","blockSize":4194304,"blocks":["09e353d332e22f6d553b5aa90ab1cf8e1a03c190cacc4867b260ff5e63bab91d"]}},"_arraySome.js":{"size":594,"offset":"15282556","integrity":{"algorithm":"SHA256","hash":"e8cc6994df67b7f02600d1f58674da807ec59db9964aaba2d9834f04b6f0baf1","blockSize":4194304,"blocks":["e8cc6994df67b7f02600d1f58674da807ec59db9964aaba2d9834f04b6f0baf1"]}},"_asciiSize.js":{"size":271,"offset":"15283150","integrity":{"algorithm":"SHA256","hash":"150568c62dd6f77ee9bfb45416b8f8609dfe1759ede9d9bdf0e072140bdce5f3","blockSize":4194304,"blocks":["150568c62dd6f77ee9bfb45416b8f8609dfe1759ede9d9bdf0e072140bdce5f3"]}},"_asciiToArray.js":{"size":257,"offset":"15283421","integrity":{"algorithm":"SHA256","hash":"202817d7cec0944807fb2ae3a85cdf6103943cd23a4afdd256177c83eacf1296","blockSize":4194304,"blocks":["202817d7cec0944807fb2ae3a85cdf6103943cd23a4afdd256177c83eacf1296"]}},"_asciiWords.js":{"size":404,"offset":"15283678","integrity":{"algorithm":"SHA256","hash":"1874564a9feb8b4c34f11f991a2d12d80bf650bad7fc589854c188c86d0f9c5d","blockSize":4194304,"blocks":["1874564a9feb8b4c34f11f991a2d12d80bf650bad7fc589854c188c86d0f9c5d"]}},"_assignMergeValue.js":{"size":582,"offset":"15284082","integrity":{"algorithm":"SHA256","hash":"350c1dd6528b73a15f3ce3082064fbf23c0819f5c2d06b4ab24ef6b61ab863d6","blockSize":4194304,"blocks":["350c1dd6528b73a15f3ce3082064fbf23c0819f5c2d06b4ab24ef6b61ab863d6"]}},"_assignValue.js":{"size":899,"offset":"15284664","integrity":{"algorithm":"SHA256","hash":"86658dd4d24a55b19ed938416c179d57a729bac601133c237ee9f900dd21027d","blockSize":4194304,"blocks":["86658dd4d24a55b19ed938416c179d57a729bac601133c237ee9f900dd21027d"]}},"_assocIndexOf.js":{"size":487,"offset":"15285563","integrity":{"algorithm":"SHA256","hash":"f98b725ea04a2979f0ad29afff6794ec83ec420342bae041934a829244dacb96","blockSize":4194304,"blocks":["f98b725ea04a2979f0ad29afff6794ec83ec420342bae041934a829244dacb96"]}},"_baseAggregator.js":{"size":746,"offset":"15286050","integrity":{"algorithm":"SHA256","hash":"b3bf7b463fba23ff5b27d9cceb3ad8ea237db796723447ce90ac02b227cce29a","blockSize":4194304,"blocks":["b3bf7b463fba23ff5b27d9cceb3ad8ea237db796723447ce90ac02b227cce29a"]}},"_baseAssign.js":{"size":470,"offset":"15286796","integrity":{"algorithm":"SHA256","hash":"88c05474e3ee06e4d3e3531f4df2403718c47447827bfc3d5d735344b60db968","blockSize":4194304,"blocks":["88c05474e3ee06e4d3e3531f4df2403718c47447827bfc3d5d735344b60db968"]}},"_baseAssignIn.js":{"size":482,"offset":"15287266","integrity":{"algorithm":"SHA256","hash":"d1bfee9cde1e5e1bafdb114ec78ecdcb5ffc2468df53f3fc57949e7033ce41f3","blockSize":4194304,"blocks":["d1bfee9cde1e5e1bafdb114ec78ecdcb5ffc2468df53f3fc57949e7033ce41f3"]}},"_baseAssignValue.js":{"size":625,"offset":"15287748","integrity":{"algorithm":"SHA256","hash":"51498c7a9eb90edf2626bbb90dfd1119acb2ee9779c916ab3fb7b7285ba6c746","blockSize":4194304,"blocks":["51498c7a9eb90edf2626bbb90dfd1119acb2ee9779c916ab3fb7b7285ba6c746"]}},"_baseAt.js":{"size":569,"offset":"15288373","integrity":{"algorithm":"SHA256","hash":"a42262b20c444d25150f2d3132b9b66437b5c024e767ef1474bfc96b80cc5733","blockSize":4194304,"blocks":["a42262b20c444d25150f2d3132b9b66437b5c024e767ef1474bfc96b80cc5733"]}},"_baseClamp.js":{"size":571,"offset":"15288942","integrity":{"algorithm":"SHA256","hash":"cf85272f27502a0c808e3d5b79713214018b893e7ddd02a4bc55fd137c0546c7","blockSize":4194304,"blocks":["cf85272f27502a0c808e3d5b79713214018b893e7ddd02a4bc55fd137c0546c7"]}},"_baseClone.js":{"size":5609,"offset":"15289513","integrity":{"algorithm":"SHA256","hash":"3ca40d0ae6c428eb8509a98017d9330c27616075c9d257198ae5e0d0b36ed79b","blockSize":4194304,"blocks":["3ca40d0ae6c428eb8509a98017d9330c27616075c9d257198ae5e0d0b36ed79b"]}},"_baseConforms.js":{"size":484,"offset":"15295122","integrity":{"algorithm":"SHA256","hash":"ef6ccf2c230ac284d2be5512e131190eb5ed65e36b75da6c111cdf191860b632","blockSize":4194304,"blocks":["ef6ccf2c230ac284d2be5512e131190eb5ed65e36b75da6c111cdf191860b632"]}},"_baseConformsTo.js":{"size":718,"offset":"15295606","integrity":{"algorithm":"SHA256","hash":"60883381e30134c7d87dc7e0fe2fcaacfe5469af143a68ca1baed185baff0f4f","blockSize":4194304,"blocks":["60883381e30134c7d87dc7e0fe2fcaacfe5469af143a68ca1baed185baff0f4f"]}},"_baseCreate.js":{"size":686,"offset":"15296324","integrity":{"algorithm":"SHA256","hash":"5d1669e013628e0891352720d6a56b6bf628404e13d27298d6e5473bd4ce87e4","blockSize":4194304,"blocks":["5d1669e013628e0891352720d6a56b6bf628404e13d27298d6e5473bd4ce87e4"]}},"_baseDelay.js":{"size":672,"offset":"15297010","integrity":{"algorithm":"SHA256","hash":"a19afb2bce50e8cdda0304df029d3b7085014b3189c08cd11867522a0715069d","blockSize":4194304,"blocks":["a19afb2bce50e8cdda0304df029d3b7085014b3189c08cd11867522a0715069d"]}},"_baseDifference.js":{"size":1917,"offset":"15297682","integrity":{"algorithm":"SHA256","hash":"21bf6502bd0fd64f2bbe11eedd9b17e2e93440220f4a044e80b20fc507221812","blockSize":4194304,"blocks":["21bf6502bd0fd64f2bbe11eedd9b17e2e93440220f4a044e80b20fc507221812"]}},"_baseEach.js":{"size":455,"offset":"15299599","integrity":{"algorithm":"SHA256","hash":"d5e014823a4dd111149247d9f5921c172247c460cfa19db3c257926537ad1e00","blockSize":4194304,"blocks":["d5e014823a4dd111149247d9f5921c172247c460cfa19db3c257926537ad1e00"]}},"_baseEachRight.js":{"size":491,"offset":"15300054","integrity":{"algorithm":"SHA256","hash":"2465f3b6221fbbe10ca2efd02c3240a2824174f6c2bc2aadbf05c168c6d659da","blockSize":4194304,"blocks":["2465f3b6221fbbe10ca2efd02c3240a2824174f6c2bc2aadbf05c168c6d659da"]}},"_baseEvery.js":{"size":625,"offset":"15300545","integrity":{"algorithm":"SHA256","hash":"04509d8663294896a7215426ff97e7b6626c02027e351439e39c68ebf18e8adc","blockSize":4194304,"blocks":["04509d8663294896a7215426ff97e7b6626c02027e351439e39c68ebf18e8adc"]}},"_baseExtremum.js":{"size":897,"offset":"15301170","integrity":{"algorithm":"SHA256","hash":"b768c0721157f9e925141837698c459edd2c1dbdd43a821cc14d3b1f97751b3a","blockSize":4194304,"blocks":["b768c0721157f9e925141837698c459edd2c1dbdd43a821cc14d3b1f97751b3a"]}},"_baseFill.js":{"size":843,"offset":"15302067","integrity":{"algorithm":"SHA256","hash":"4e364f2b0ac343212c92f0e03a6268baa042db0e6800e5c0c6590651ed4e605b","blockSize":4194304,"blocks":["4e364f2b0ac343212c92f0e03a6268baa042db0e6800e5c0c6590651ed4e605b"]}},"_baseFilter.js":{"size":590,"offset":"15302910","integrity":{"algorithm":"SHA256","hash":"cc817c4fce14c09a765f6ee71e790930d1fac5a44b7ade7604e11b97976e8f73","blockSize":4194304,"blocks":["cc817c4fce14c09a765f6ee71e790930d1fac5a44b7ade7604e11b97976e8f73"]}},"_baseFindIndex.js":{"size":766,"offset":"15303500","integrity":{"algorithm":"SHA256","hash":"07e9942a47eeb723eb9fa1bc0f7240f93ad9f52d702c0f37d7163670000350c1","blockSize":4194304,"blocks":["07e9942a47eeb723eb9fa1bc0f7240f93ad9f52d702c0f37d7163670000350c1"]}},"_baseFindKey.js":{"size":747,"offset":"15304266","integrity":{"algorithm":"SHA256","hash":"a9958db300649f6f91cd8d35608b2234168a388702754bc6715c7966205a1c02","blockSize":4194304,"blocks":["a9958db300649f6f91cd8d35608b2234168a388702754bc6715c7966205a1c02"]}},"_baseFlatten.js":{"size":1201,"offset":"15305013","integrity":{"algorithm":"SHA256","hash":"2410fc4a7f9e866d23e642ad2b93e599d792d89c95715b76993e3da98a86ac1f","blockSize":4194304,"blocks":["2410fc4a7f9e866d23e642ad2b93e599d792d89c95715b76993e3da98a86ac1f"]}},"_baseFor.js":{"size":593,"offset":"15306214","integrity":{"algorithm":"SHA256","hash":"683469bfd62c7770343faf2426bc0d83fb4a2dd7808ebd17464c1abbe5d1ec28","blockSize":4194304,"blocks":["683469bfd62c7770343faf2426bc0d83fb4a2dd7808ebd17464c1abbe5d1ec28"]}},"_baseForOwn.js":{"size":456,"offset":"15306807","integrity":{"algorithm":"SHA256","hash":"c2c0e68131f8bf3ddd3d9d2e72880b4652c0ed2553dc3e726714169210d355ee","blockSize":4194304,"blocks":["c2c0e68131f8bf3ddd3d9d2e72880b4652c0ed2553dc3e726714169210d355ee"]}},"_baseForOwnRight.js":{"size":486,"offset":"15307263","integrity":{"algorithm":"SHA256","hash":"6962bd437841b3c730c4186743aa6ea10473099e8d4295ab3dd832b94427f78d","blockSize":4194304,"blocks":["6962bd437841b3c730c4186743aa6ea10473099e8d4295ab3dd832b94427f78d"]}},"_baseForRight.js":{"size":477,"offset":"15307749","integrity":{"algorithm":"SHA256","hash":"91d763dd743e35f45ecfde013f18f66a037aca534dc51d3412fd34d276ae89dd","blockSize":4194304,"blocks":["91d763dd743e35f45ecfde013f18f66a037aca534dc51d3412fd34d276ae89dd"]}},"_baseFunctions.js":{"size":552,"offset":"15308226","integrity":{"algorithm":"SHA256","hash":"98e1c1fb5206aa2d25292d33f375b6ab7979e1bb0b9b65728e2c130db00702da","blockSize":4194304,"blocks":["98e1c1fb5206aa2d25292d33f375b6ab7979e1bb0b9b65728e2c130db00702da"]}},"_baseGet.js":{"size":616,"offset":"15308778","integrity":{"algorithm":"SHA256","hash":"11058a13c346613291e77147a6a5ba47e9fce3cd81c8acaf224eafc466bdc02d","blockSize":4194304,"blocks":["11058a13c346613291e77147a6a5ba47e9fce3cd81c8acaf224eafc466bdc02d"]}},"_baseGetAllKeys.js":{"size":739,"offset":"15309394","integrity":{"algorithm":"SHA256","hash":"1bfc82f79df4fda867fdd82baec9530c59189994c17fc1011733aba2de51d0fe","blockSize":4194304,"blocks":["1bfc82f79df4fda867fdd82baec9530c59189994c17fc1011733aba2de51d0fe"]}},"_baseGetTag.js":{"size":792,"offset":"15310133","integrity":{"algorithm":"SHA256","hash":"c9d3dbb76eeafd3007bceca376afc743370ab0c5487d78b5c6e097a4b0f6dd9b","blockSize":4194304,"blocks":["c9d3dbb76eeafd3007bceca376afc743370ab0c5487d78b5c6e097a4b0f6dd9b"]}},"_baseGt.js":{"size":357,"offset":"15310925","integrity":{"algorithm":"SHA256","hash":"99beb83e23bf1aff5a1bbbf8fd03f5b3cb4a9be6c21b8b659d601c0af364ea5b","blockSize":4194304,"blocks":["99beb83e23bf1aff5a1bbbf8fd03f5b3cb4a9be6c21b8b659d601c0af364ea5b"]}},"_baseHas.js":{"size":559,"offset":"15311282","integrity":{"algorithm":"SHA256","hash":"d17d0cb51e14b025dcad24b02da060f7f6cbf8c117220759b89d71f0ef0ad4e8","blockSize":4194304,"blocks":["d17d0cb51e14b025dcad24b02da060f7f6cbf8c117220759b89d71f0ef0ad4e8"]}},"_baseHasIn.js":{"size":374,"offset":"15311841","integrity":{"algorithm":"SHA256","hash":"fbb01dee1a06fb79300c788cd2d367da659c0ed34a81dbc3195790cccc0c947c","blockSize":4194304,"blocks":["fbb01dee1a06fb79300c788cd2d367da659c0ed34a81dbc3195790cccc0c947c"]}},"_baseIndexOf.js":{"size":659,"offset":"15312215","integrity":{"algorithm":"SHA256","hash":"160cc40dde0bf0e97b14530df56bc46c7bcc6b9aaf63629647b21e480a795baa","blockSize":4194304,"blocks":["160cc40dde0bf0e97b14530df56bc46c7bcc6b9aaf63629647b21e480a795baa"]}},"_baseIndexOfWith.js":{"size":660,"offset":"15312874","integrity":{"algorithm":"SHA256","hash":"01448f1f44e625d3b4876f6f07c432bab5a7c7eec5b89ebb3c643b700be25fab","blockSize":4194304,"blocks":["01448f1f44e625d3b4876f6f07c432bab5a7c7eec5b89ebb3c643b700be25fab"]}},"_baseInRange.js":{"size":612,"offset":"15313534","integrity":{"algorithm":"SHA256","hash":"b63df24ac4a8708b494862d0ba416dadf7383e81cf4e86e83b86cbb7f94bd259","blockSize":4194304,"blocks":["b63df24ac4a8708b494862d0ba416dadf7383e81cf4e86e83b86cbb7f94bd259"]}},"_baseIntersection.js":{"size":2262,"offset":"15314146","integrity":{"algorithm":"SHA256","hash":"2af90dce65989b33fa203e3f859eb11ce9e8399ce163b248c1d60dcf1388a42d","blockSize":4194304,"blocks":["2af90dce65989b33fa203e3f859eb11ce9e8399ce163b248c1d60dcf1388a42d"]}},"_baseInverter.js":{"size":736,"offset":"15316408","integrity":{"algorithm":"SHA256","hash":"fd69c5bba6a7b7f42427c4e148a283fb0a95ee2dbe224199aa944136eca23ede","blockSize":4194304,"blocks":["fd69c5bba6a7b7f42427c4e148a283fb0a95ee2dbe224199aa944136eca23ede"]}},"_baseInvoke.js":{"size":789,"offset":"15317144","integrity":{"algorithm":"SHA256","hash":"c84423133be6432565b8a64496b372ffd237fe12cc9b6b82e311c9af8ebaf3cc","blockSize":4194304,"blocks":["c84423133be6432565b8a64496b372ffd237fe12cc9b6b82e311c9af8ebaf3cc"]}},"_baseIsArguments.js":{"size":488,"offset":"15317933","integrity":{"algorithm":"SHA256","hash":"71a59dc09c35dedcbee7ed71f5eae03e8a9b0251516ed098f28cdb6e28d0b816","blockSize":4194304,"blocks":["71a59dc09c35dedcbee7ed71f5eae03e8a9b0251516ed098f28cdb6e28d0b816"]}},"_baseIsArrayBuffer.js":{"size":504,"offset":"15318421","integrity":{"algorithm":"SHA256","hash":"c526bfb1ea2d63d05e03e8694789ca6855319f2ad19501cff235392f8b738311","blockSize":4194304,"blocks":["c526bfb1ea2d63d05e03e8694789ca6855319f2ad19501cff235392f8b738311"]}},"_baseIsDate.js":{"size":504,"offset":"15318925","integrity":{"algorithm":"SHA256","hash":"1ce47b8310f9000ea4aa9fad1c847fb728b289e51a794de0d9a6ea0fac49eff6","blockSize":4194304,"blocks":["1ce47b8310f9000ea4aa9fad1c847fb728b289e51a794de0d9a6ea0fac49eff6"]}},"_baseIsEqual.js":{"size":1019,"offset":"15319429","integrity":{"algorithm":"SHA256","hash":"21f0fd8de670d92e39facd016752f770a7c2760ce60a5a5d12e0a1a05e53ce19","blockSize":4194304,"blocks":["21f0fd8de670d92e39facd016752f770a7c2760ce60a5a5d12e0a1a05e53ce19"]}},"_baseIsEqualDeep.js":{"size":3010,"offset":"15320448","integrity":{"algorithm":"SHA256","hash":"6b9423fb4d815a8e7df793686defafa04a722878d09b48dff6e5ce52402f3ddd","blockSize":4194304,"blocks":["6b9423fb4d815a8e7df793686defafa04a722878d09b48dff6e5ce52402f3ddd"]}},"_baseIsMap.js":{"size":478,"offset":"15323458","integrity":{"algorithm":"SHA256","hash":"90ec23bcd6b80fbe357b5121648df3a40c67cd3ff8f9c6ee5731a3952a7491c5","blockSize":4194304,"blocks":["90ec23bcd6b80fbe357b5121648df3a40c67cd3ff8f9c6ee5731a3952a7491c5"]}},"_baseIsMatch.js":{"size":1765,"offset":"15323936","integrity":{"algorithm":"SHA256","hash":"cab17bf58d85e518955c73d983384a130c48cd0e233f38e4498123239325ee4b","blockSize":4194304,"blocks":["cab17bf58d85e518955c73d983384a130c48cd0e233f38e4498123239325ee4b"]}},"_baseIsNaN.js":{"size":296,"offset":"15325701","integrity":{"algorithm":"SHA256","hash":"9e61fb70f5bcdea9f5ce53949ea2c467f9bf11aceb85c3da8e9d21bd1f74786e","blockSize":4194304,"blocks":["9e61fb70f5bcdea9f5ce53949ea2c467f9bf11aceb85c3da8e9d21bd1f74786e"]}},"_baseIsNative.js":{"size":1417,"offset":"15325997","integrity":{"algorithm":"SHA256","hash":"1e99406998d0b3d47f6cd1b65d5d1a46dc339adef0d58cd15d98a6e795fcc040","blockSize":4194304,"blocks":["1e99406998d0b3d47f6cd1b65d5d1a46dc339adef0d58cd15d98a6e795fcc040"]}},"_baseIsRegExp.js":{"size":511,"offset":"15327414","integrity":{"algorithm":"SHA256","hash":"bb93beb83a70615199e0ddb41fb89e570e109e5b78d222e27f26c142b5c104e0","blockSize":4194304,"blocks":["bb93beb83a70615199e0ddb41fb89e570e109e5b78d222e27f26c142b5c104e0"]}},"_baseIsSet.js":{"size":478,"offset":"15327925","integrity":{"algorithm":"SHA256","hash":"2f5f1df7f711b04baa32d874e11fd8a193d83e311f5c32d512142f6a4cb864be","blockSize":4194304,"blocks":["2f5f1df7f711b04baa32d874e11fd8a193d83e311f5c32d512142f6a4cb864be"]}},"_baseIsTypedArray.js":{"size":2222,"offset":"15328403","integrity":{"algorithm":"SHA256","hash":"70f974187f6d9140a971e515ea00246ac3a36b647d5960e2b95510ae73d56de6","blockSize":4194304,"blocks":["70f974187f6d9140a971e515ea00246ac3a36b647d5960e2b95510ae73d56de6"]}},"_baseIteratee.js":{"size":895,"offset":"15330625","integrity":{"algorithm":"SHA256","hash":"94575a6628739b81cd429d95e81a6fbb3509e324183ddedee614437ec27291a2","blockSize":4194304,"blocks":["94575a6628739b81cd429d95e81a6fbb3509e324183ddedee614437ec27291a2"]}},"_baseKeys.js":{"size":776,"offset":"15331520","integrity":{"algorithm":"SHA256","hash":"92683af4e78a9e10b38d5d56306cee637556938a2bead6c214dac14f1d769d33","blockSize":4194304,"blocks":["92683af4e78a9e10b38d5d56306cee637556938a2bead6c214dac14f1d769d33"]}},"_baseKeysIn.js":{"size":870,"offset":"15332296","integrity":{"algorithm":"SHA256","hash":"89ca96a614e59b757ac3aa72c0b9ca454c015ed8de2e38264a2b9daa49b55e09","blockSize":4194304,"blocks":["89ca96a614e59b757ac3aa72c0b9ca454c015ed8de2e38264a2b9daa49b55e09"]}},"_baseLodash.js":{"size":178,"offset":"15333166","integrity":{"algorithm":"SHA256","hash":"a53c8b4383d2fc7564db703c83cce4a462da10eac356fdd5a77a0f82b4133e50","blockSize":4194304,"blocks":["a53c8b4383d2fc7564db703c83cce4a462da10eac356fdd5a77a0f82b4133e50"]}},"_baseLt.js":{"size":354,"offset":"15333344","integrity":{"algorithm":"SHA256","hash":"66854d33e10ee86969f206173cb0d37f2c67f2f8566c7d48dce17f400c53ec90","blockSize":4194304,"blocks":["66854d33e10ee86969f206173cb0d37f2c67f2f8566c7d48dce17f400c53ec90"]}},"_baseMap.js":{"size":668,"offset":"15333698","integrity":{"algorithm":"SHA256","hash":"7787722e7cd97155c5cf3e6d09ce7c2599fab924424d527b0b4705306ff04dae","blockSize":4194304,"blocks":["7787722e7cd97155c5cf3e6d09ce7c2599fab924424d527b0b4705306ff04dae"]}},"_baseMatches.js":{"size":710,"offset":"15334366","integrity":{"algorithm":"SHA256","hash":"78ce86cd7f9815f492bd652eb75456d1b5bef696e70b845df5d2747b3b5bf1ea","blockSize":4194304,"blocks":["78ce86cd7f9815f492bd652eb75456d1b5bef696e70b845df5d2747b3b5bf1ea"]}},"_baseMatchesProperty.js":{"size":1129,"offset":"15335076","integrity":{"algorithm":"SHA256","hash":"2544a0ffe23adc5be309104c5831bcdc7c29d3e4211b6990cfbef28cc9e7ad9c","blockSize":4194304,"blocks":["2544a0ffe23adc5be309104c5831bcdc7c29d3e4211b6990cfbef28cc9e7ad9c"]}},"_baseMean.js":{"size":568,"offset":"15336205","integrity":{"algorithm":"SHA256","hash":"08de6692935e8ef6c3ac35f2231d0c19dbadecf92177e912096e65871c0ca512","blockSize":4194304,"blocks":["08de6692935e8ef6c3ac35f2231d0c19dbadecf92177e912096e65871c0ca512"]}},"_baseMerge.js":{"size":1328,"offset":"15336773","integrity":{"algorithm":"SHA256","hash":"142a0add697e0ebc9698368d1bb28fba98b2e3188d36159a3bf16f9e2a33761d","blockSize":4194304,"blocks":["142a0add697e0ebc9698368d1bb28fba98b2e3188d36159a3bf16f9e2a33761d"]}},"_baseMergeDeep.js":{"size":3069,"offset":"15338101","integrity":{"algorithm":"SHA256","hash":"5a3f178cccdab4ee9f3adb1ce1fef7794c60db8f7b2a0e221d38a15ee87aa7a9","blockSize":4194304,"blocks":["5a3f178cccdab4ee9f3adb1ce1fef7794c60db8f7b2a0e221d38a15ee87aa7a9"]}},"_baseNth.js":{"size":483,"offset":"15341170","integrity":{"algorithm":"SHA256","hash":"f18816d81835e27b700c2a03814a7478d8e5d7e4169d87a666b2b7e9f350fbe0","blockSize":4194304,"blocks":["f18816d81835e27b700c2a03814a7478d8e5d7e4169d87a666b2b7e9f350fbe0"]}},"_baseOrderBy.js":{"size":1558,"offset":"15341653","integrity":{"algorithm":"SHA256","hash":"36b05eeea5d10c43aa3c0c68ea2e18f0a38c643e7ff07c8464086e1d65ba3e32","blockSize":4194304,"blocks":["36b05eeea5d10c43aa3c0c68ea2e18f0a38c643e7ff07c8464086e1d65ba3e32"]}},"_basePick.js":{"size":501,"offset":"15343211","integrity":{"algorithm":"SHA256","hash":"6ab2e82a534e80f3aef3bb6e83d1415e9c7529d0216a2c5734a42203520b737f","blockSize":4194304,"blocks":["6ab2e82a534e80f3aef3bb6e83d1415e9c7529d0216a2c5734a42203520b737f"]}},"_basePickBy.js":{"size":791,"offset":"15343712","integrity":{"algorithm":"SHA256","hash":"83f341d6be6b36e1231682cdb914ba116beb9a60a0630895f56a95f5d563d2c2","blockSize":4194304,"blocks":["83f341d6be6b36e1231682cdb914ba116beb9a60a0630895f56a95f5d563d2c2"]}},"_baseProperty.js":{"size":360,"offset":"15344503","integrity":{"algorithm":"SHA256","hash":"9168de234c552d79a2fd00fdb8c49a4050b47e28fe89886cbbb57d4753ee3b3f","blockSize":4194304,"blocks":["9168de234c552d79a2fd00fdb8c49a4050b47e28fe89886cbbb57d4753ee3b3f"]}},"_basePropertyDeep.js":{"size":391,"offset":"15344863","integrity":{"algorithm":"SHA256","hash":"65fae1f40433d51cb6c8fbb6a41caf7febd1189ba2b1296af34bc7e4bafa22c2","blockSize":4194304,"blocks":["65fae1f40433d51cb6c8fbb6a41caf7febd1189ba2b1296af34bc7e4bafa22c2"]}},"_basePropertyOf.js":{"size":358,"offset":"15345254","integrity":{"algorithm":"SHA256","hash":"c7eb2d3492b419cd85b585615e2b1618300891b13fb750e52ab473616e8e7efa","blockSize":4194304,"blocks":["c7eb2d3492b419cd85b585615e2b1618300891b13fb750e52ab473616e8e7efa"]}},"_basePullAll.js":{"size":1459,"offset":"15345612","integrity":{"algorithm":"SHA256","hash":"bba30e5ff749bb138fb61863f96df81b4f086fa982e49ff30d395568d7a0c409","blockSize":4194304,"blocks":["bba30e5ff749bb138fb61863f96df81b4f086fa982e49ff30d395568d7a0c409"]}},"_basePullAt.js":{"size":939,"offset":"15347071","integrity":{"algorithm":"SHA256","hash":"4edd40dac0897bc73302f2104663d475b186f26ca6443997a34c80a19fb14a0c","blockSize":4194304,"blocks":["4edd40dac0897bc73302f2104663d475b186f26ca6443997a34c80a19fb14a0c"]}},"_baseRandom.js":{"size":541,"offset":"15348010","integrity":{"algorithm":"SHA256","hash":"39bece02108b5787e902970ea62319b179a8982c3b41176a78b961201756713d","blockSize":4194304,"blocks":["39bece02108b5787e902970ea62319b179a8982c3b41176a78b961201756713d"]}},"_baseRange.js":{"size":850,"offset":"15348551","integrity":{"algorithm":"SHA256","hash":"134600a369e098c5f6a5892d2020ce6ad7c51da158b4fec85b80926edee48372","blockSize":4194304,"blocks":["134600a369e098c5f6a5892d2020ce6ad7c51da158b4fec85b80926edee48372"]}},"_baseReduce.js":{"size":909,"offset":"15349401","integrity":{"algorithm":"SHA256","hash":"8df7676809cbc9424be921801554cb99a5cc31cbb7513d1e891ec986fe07106f","blockSize":4194304,"blocks":["8df7676809cbc9424be921801554cb99a5cc31cbb7513d1e891ec986fe07106f"]}},"_baseRepeat.js":{"size":952,"offset":"15350310","integrity":{"algorithm":"SHA256","hash":"81f68d89a4e906997ed62b210341999c6e2f61c4aaf6e1404e661a87ba79d61a","blockSize":4194304,"blocks":["81f68d89a4e906997ed62b210341999c6e2f61c4aaf6e1404e661a87ba79d61a"]}},"_baseRest.js":{"size":559,"offset":"15351262","integrity":{"algorithm":"SHA256","hash":"4945f6523dc4a6b9af9a470772863f5b0ab917c28d33b99530c736e0cf6e09ef","blockSize":4194304,"blocks":["4945f6523dc4a6b9af9a470772863f5b0ab917c28d33b99530c736e0cf6e09ef"]}},"_baseSample.js":{"size":359,"offset":"15351821","integrity":{"algorithm":"SHA256","hash":"c34db7ce1be5d26a2d06eb8fcf4983e01187d71601030d4f142db9dc5e1b35da","blockSize":4194304,"blocks":["c34db7ce1be5d26a2d06eb8fcf4983e01187d71601030d4f142db9dc5e1b35da"]}},"_baseSampleSize.js":{"size":548,"offset":"15352180","integrity":{"algorithm":"SHA256","hash":"fddbed1714457a56bf4da3fddfeccbde039cae8cc06621b82ce2518b38625cee","blockSize":4194304,"blocks":["fddbed1714457a56bf4da3fddfeccbde039cae8cc06621b82ce2518b38625cee"]}},"_baseSet.js":{"size":1385,"offset":"15352728","integrity":{"algorithm":"SHA256","hash":"a07beb6817764c5f7e3e7a345c8218238e93c895ce80f2b822663441d832e4ef","blockSize":4194304,"blocks":["a07beb6817764c5f7e3e7a345c8218238e93c895ce80f2b822663441d832e4ef"]}},"_baseSetData.js":{"size":456,"offset":"15354113","integrity":{"algorithm":"SHA256","hash":"b2a2251c265920e355cf5542ac81d3535947c87db99fb329eb9addfee85515b4","blockSize":4194304,"blocks":["b2a2251c265920e355cf5542ac81d3535947c87db99fb329eb9addfee85515b4"]}},"_baseSetToString.js":{"size":641,"offset":"15354569","integrity":{"algorithm":"SHA256","hash":"88bc4bdb5f6ccfd8823ab3c9cfcd9ae4c52ac62c9e9c3c8d8d34323f838b42ea","blockSize":4194304,"blocks":["88bc4bdb5f6ccfd8823ab3c9cfcd9ae4c52ac62c9e9c3c8d8d34323f838b42ea"]}},"_baseShuffle.js":{"size":371,"offset":"15355210","integrity":{"algorithm":"SHA256","hash":"47152f92f55df85e1723b4748cc995a727450efa4e13d773573b711ad3677bf9","blockSize":4194304,"blocks":["47152f92f55df85e1723b4748cc995a727450efa4e13d773573b711ad3677bf9"]}},"_baseSlice.js":{"size":756,"offset":"15355581","integrity":{"algorithm":"SHA256","hash":"5df69d6963ecb7c6319a26005341dcae0d94daf86b822be3cfb4cc29cd3f029d","blockSize":4194304,"blocks":["5df69d6963ecb7c6319a26005341dcae0d94daf86b822be3cfb4cc29cd3f029d"]}},"_baseSome.js":{"size":619,"offset":"15356337","integrity":{"algorithm":"SHA256","hash":"fdfc7ec17738f062aef67828fc6ed1ac933c194471214924eb4fa7df2657b5d3","blockSize":4194304,"blocks":["fdfc7ec17738f062aef67828fc6ed1ac933c194471214924eb4fa7df2657b5d3"]}},"_baseSortBy.js":{"size":543,"offset":"15356956","integrity":{"algorithm":"SHA256","hash":"5cb138975dd23c1edee76417b442a011776310ba98e7bfc0192dafa18c4687ce","blockSize":4194304,"blocks":["5cb138975dd23c1edee76417b442a011776310ba98e7bfc0192dafa18c4687ce"]}},"_baseSortedIndex.js":{"size":1429,"offset":"15357499","integrity":{"algorithm":"SHA256","hash":"ae9ad3a007da156f796188f9745c226fe98006204ae29a797ba7c3ccff35cb08","blockSize":4194304,"blocks":["ae9ad3a007da156f796188f9745c226fe98006204ae29a797ba7c3ccff35cb08"]}},"_baseSortedIndexBy.js":{"size":2259,"offset":"15358928","integrity":{"algorithm":"SHA256","hash":"6eb38e6a9462189bbe19f507f67d0035d55e3f0fd034e8aa3ddafb7119ec0333","blockSize":4194304,"blocks":["6eb38e6a9462189bbe19f507f67d0035d55e3f0fd034e8aa3ddafb7119ec0333"]}},"_baseSortedUniq.js":{"size":758,"offset":"15361187","integrity":{"algorithm":"SHA256","hash":"5009c2932320106ac433b7567e2e35e6b502f973dafa4d7ed93b457fb0f63edb","blockSize":4194304,"blocks":["5009c2932320106ac433b7567e2e35e6b502f973dafa4d7ed93b457fb0f63edb"]}},"_baseSum.js":{"size":600,"offset":"15361945","integrity":{"algorithm":"SHA256","hash":"7f39b622a6b544cc9619752799b2db854d67c0b77a3f34a9162fa69ffc9228b8","blockSize":4194304,"blocks":["7f39b622a6b544cc9619752799b2db854d67c0b77a3f34a9162fa69ffc9228b8"]}},"_baseTimes.js":{"size":504,"offset":"15362545","integrity":{"algorithm":"SHA256","hash":"bd054701039e1090817e5d8f6fb4871966cd3abdc2c283efd98a0c1683707886","blockSize":4194304,"blocks":["bd054701039e1090817e5d8f6fb4871966cd3abdc2c283efd98a0c1683707886"]}},"_baseToNumber.js":{"size":539,"offset":"15363049","integrity":{"algorithm":"SHA256","hash":"48470af278354e767e87281c02e5f7792a99281d1345885d3e282dae0322c5c6","blockSize":4194304,"blocks":["48470af278354e767e87281c02e5f7792a99281d1345885d3e282dae0322c5c6"]}},"_baseToPairs.js":{"size":537,"offset":"15363588","integrity":{"algorithm":"SHA256","hash":"78bc3c33291a79f9a06be05c51b8cadbcb4d843d390a0e56dac402f9212c9a22","blockSize":4194304,"blocks":["78bc3c33291a79f9a06be05c51b8cadbcb4d843d390a0e56dac402f9212c9a22"]}},"_baseToString.js":{"size":1154,"offset":"15364125","integrity":{"algorithm":"SHA256","hash":"02703516b1d594c96987c84f7d016411d0ed7825bec23280fb974e86db178fc8","blockSize":4194304,"blocks":["02703516b1d594c96987c84f7d016411d0ed7825bec23280fb974e86db178fc8"]}},"_baseTrim.js":{"size":444,"offset":"15365279","integrity":{"algorithm":"SHA256","hash":"8aa33808ed188e825125d8fb0abaf638b5eacc4e312ea068e2d05cc37321b52b","blockSize":4194304,"blocks":["8aa33808ed188e825125d8fb0abaf638b5eacc4e312ea068e2d05cc37321b52b"]}},"_baseUnary.js":{"size":332,"offset":"15365723","integrity":{"algorithm":"SHA256","hash":"70c60c7f965c08178b59b2bd4d0988ea73a9c52522f53390d108b3c5f7ffa188","blockSize":4194304,"blocks":["70c60c7f965c08178b59b2bd4d0988ea73a9c52522f53390d108b3c5f7ffa188"]}},"_baseUniq.js":{"size":1909,"offset":"15366055","integrity":{"algorithm":"SHA256","hash":"0441219faeeb60c196f99f8258a92b48bf87189d4cb04379d51dcecb003ffa18","blockSize":4194304,"blocks":["0441219faeeb60c196f99f8258a92b48bf87189d4cb04379d51dcecb003ffa18"]}},"_baseUnset.js":{"size":580,"offset":"15367964","integrity":{"algorithm":"SHA256","hash":"b246cdf2a6d701349ee331fcaf6db235def81702abaccb3193da2d91e560eccc","blockSize":4194304,"blocks":["b246cdf2a6d701349ee331fcaf6db235def81702abaccb3193da2d91e560eccc"]}},"_baseUpdate.js":{"size":605,"offset":"15368544","integrity":{"algorithm":"SHA256","hash":"66de044bd9356189a3d9e438748585dd0b4a7e4120448ac6f6cd898a21b068f5","blockSize":4194304,"blocks":["66de044bd9356189a3d9e438748585dd0b4a7e4120448ac6f6cd898a21b068f5"]}},"_baseValues.js":{"size":534,"offset":"15369149","integrity":{"algorithm":"SHA256","hash":"979a132abe06044e924d9d857f974bdd1be4107d390ef8ba31640e0917b7f9ce","blockSize":4194304,"blocks":["979a132abe06044e924d9d857f974bdd1be4107d390ef8ba31640e0917b7f9ce"]}},"_baseWhile.js":{"size":933,"offset":"15369683","integrity":{"algorithm":"SHA256","hash":"8d25d09663040086d16864b180ed9b04fa02c0d19b6a0d9ff97cd49a8d8be818","blockSize":4194304,"blocks":["8d25d09663040086d16864b180ed9b04fa02c0d19b6a0d9ff97cd49a8d8be818"]}},"_baseWrapperValue.js":{"size":857,"offset":"15370616","integrity":{"algorithm":"SHA256","hash":"bf1e26e0b6474f3ad67e1145fea232b3e5436a069947bc46a199222ad56b3a61","blockSize":4194304,"blocks":["bf1e26e0b6474f3ad67e1145fea232b3e5436a069947bc46a199222ad56b3a61"]}},"_baseXor.js":{"size":1099,"offset":"15371473","integrity":{"algorithm":"SHA256","hash":"671b23dd36dbd57a7c18d9efef2627def32173a0446cc689bc8726115a65bfbf","blockSize":4194304,"blocks":["671b23dd36dbd57a7c18d9efef2627def32173a0446cc689bc8726115a65bfbf"]}},"_baseZipObject.js":{"size":660,"offset":"15372572","integrity":{"algorithm":"SHA256","hash":"61731c67cde5f3cc5998335e8436968e3e09ec196e9d9ab4f1aa083d9a8ca947","blockSize":4194304,"blocks":["61731c67cde5f3cc5998335e8436968e3e09ec196e9d9ab4f1aa083d9a8ca947"]}},"_cacheHas.js":{"size":337,"offset":"15373232","integrity":{"algorithm":"SHA256","hash":"cf025a5fb7e480701d61e4ed60ed869fa835e0d0aed126daf0c62ba9b4d348ae","blockSize":4194304,"blocks":["cf025a5fb7e480701d61e4ed60ed869fa835e0d0aed126daf0c62ba9b4d348ae"]}},"_castArrayLikeObject.js":{"size":381,"offset":"15373569","integrity":{"algorithm":"SHA256","hash":"3a6f533812e836bb88bf2a656ca51860fa0af543461d97c135814c01652f7bb6","blockSize":4194304,"blocks":["3a6f533812e836bb88bf2a656ca51860fa0af543461d97c135814c01652f7bb6"]}},"_castFunction.js":{"size":326,"offset":"15373950","integrity":{"algorithm":"SHA256","hash":"d7b164a9bfc94ce4df4c26d318fbec98320fc8c26a0d9dabd011efde368048f1","blockSize":4194304,"blocks":["d7b164a9bfc94ce4df4c26d318fbec98320fc8c26a0d9dabd011efde368048f1"]}},"_castPath.js":{"size":569,"offset":"15374276","integrity":{"algorithm":"SHA256","hash":"1a0281926af5b014526f5c9def6a891e090adba86afff99fcc3a08184b90f023","blockSize":4194304,"blocks":["1a0281926af5b014526f5c9def6a891e090adba86afff99fcc3a08184b90f023"]}},"_castRest.js":{"size":348,"offset":"15374845","integrity":{"algorithm":"SHA256","hash":"7d5dab849a479da5624b1b3fe9cd372f2bcf8c6cb17e5b8ec8c71bf0c50f4d02","blockSize":4194304,"blocks":["7d5dab849a479da5624b1b3fe9cd372f2bcf8c6cb17e5b8ec8c71bf0c50f4d02"]}},"_castSlice.js":{"size":517,"offset":"15375193","integrity":{"algorithm":"SHA256","hash":"b5397cf5ac2791636e00a380ce3d3c591b0de0aa45bc4cd0942a378c92218e71","blockSize":4194304,"blocks":["b5397cf5ac2791636e00a380ce3d3c591b0de0aa45bc4cd0942a378c92218e71"]}},"_charsEndIndex.js":{"size":600,"offset":"15375710","integrity":{"algorithm":"SHA256","hash":"f5600b654adf18830a72edc7795cfd90e44a63cc30a5ee99b3d38b6824f44717","blockSize":4194304,"blocks":["f5600b654adf18830a72edc7795cfd90e44a63cc30a5ee99b3d38b6824f44717"]}},"_charsStartIndex.js":{"size":636,"offset":"15376310","integrity":{"algorithm":"SHA256","hash":"33ee500387c9d29e2ec9ab5f7c7e1d66891b7f531b403afff0e282c123a25acb","blockSize":4194304,"blocks":["33ee500387c9d29e2ec9ab5f7c7e1d66891b7f531b403afff0e282c123a25acb"]}},"_cloneArrayBuffer.js":{"size":449,"offset":"15376946","integrity":{"algorithm":"SHA256","hash":"04d0e9fb36e4c8612a9ae693a2b10f74a3687a9fdc9dcb22f00855eeca57a37b","blockSize":4194304,"blocks":["04d0e9fb36e4c8612a9ae693a2b10f74a3687a9fdc9dcb22f00855eeca57a37b"]}},"_cloneBuffer.js":{"size":1056,"offset":"15377395","integrity":{"algorithm":"SHA256","hash":"550ed5b37392bd96493b0c38212a5bf8779890b7ba964d2ac4049c41e80f774a","blockSize":4194304,"blocks":["550ed5b37392bd96493b0c38212a5bf8779890b7ba964d2ac4049c41e80f774a"]}},"_cloneDataView.js":{"size":507,"offset":"15378451","integrity":{"algorithm":"SHA256","hash":"135cb42922b80e96fbf921cc4e6262bcf9f35e23cb5b592f3c91ae11d2c4ee94","blockSize":4194304,"blocks":["135cb42922b80e96fbf921cc4e6262bcf9f35e23cb5b592f3c91ae11d2c4ee94"]}},"_cloneRegExp.js":{"size":439,"offset":"15378958","integrity":{"algorithm":"SHA256","hash":"eea40d65b8981196ddfd6bb07b259ed35bc1387cf827b922ecf344a88693c6c6","blockSize":4194304,"blocks":["eea40d65b8981196ddfd6bb07b259ed35bc1387cf827b922ecf344a88693c6c6"]}},"_cloneSymbol.js":{"size":524,"offset":"15379397","integrity":{"algorithm":"SHA256","hash":"ae5f8ddeecd67e4ab2f539ca4cbdbac72d73bd86ea84956535316dc14a8d62d4","blockSize":4194304,"blocks":["ae5f8ddeecd67e4ab2f539ca4cbdbac72d73bd86ea84956535316dc14a8d62d4"]}},"_cloneTypedArray.js":{"size":527,"offset":"15379921","integrity":{"algorithm":"SHA256","hash":"e4a07e9bc192acec93c967f52426333e3209e861b6591d7f122256db573d9288","blockSize":4194304,"blocks":["e4a07e9bc192acec93c967f52426333e3209e861b6591d7f122256db573d9288"]}},"_compareAscending.js":{"size":1343,"offset":"15380448","integrity":{"algorithm":"SHA256","hash":"437f05eed3eea4f1617208098dd090e28238a18fc1dfe6e29bbcf21d30917ebf","blockSize":4194304,"blocks":["437f05eed3eea4f1617208098dd090e28238a18fc1dfe6e29bbcf21d30917ebf"]}},"_compareMultiple.js":{"size":1599,"offset":"15381791","integrity":{"algorithm":"SHA256","hash":"b04aff9f4e4b74672a0031202b66dc9b1116c7817e103bcb56954e284ab00765","blockSize":4194304,"blocks":["b04aff9f4e4b74672a0031202b66dc9b1116c7817e103bcb56954e284ab00765"]}},"_composeArgs.js":{"size":1323,"offset":"15383390","integrity":{"algorithm":"SHA256","hash":"28808649a653c40a4983ea61110e3e1ba70d638bba05c92d4b2513544402f9eb","blockSize":4194304,"blocks":["28808649a653c40a4983ea61110e3e1ba70d638bba05c92d4b2513544402f9eb"]}},"_composeArgsRight.js":{"size":1388,"offset":"15384713","integrity":{"algorithm":"SHA256","hash":"ace319b9262515267ee22b7274549a3bfa37979644ca8206e64e368d9c928d26","blockSize":4194304,"blocks":["ace319b9262515267ee22b7274549a3bfa37979644ca8206e64e368d9c928d26"]}},"_copyArray.js":{"size":454,"offset":"15386101","integrity":{"algorithm":"SHA256","hash":"4a828cecfb989f5ec5dfb5627c98a49e90ff7d1249c4910ef2de74cd8c677a85","blockSize":4194304,"blocks":["4a828cecfb989f5ec5dfb5627c98a49e90ff7d1249c4910ef2de74cd8c677a85"]}},"_copyObject.js":{"size":1044,"offset":"15386555","integrity":{"algorithm":"SHA256","hash":"540cc88da53fd6db2c8faeeb5a37ffd5ee3dbd291a4d9a6233d779ff03f162dc","blockSize":4194304,"blocks":["540cc88da53fd6db2c8faeeb5a37ffd5ee3dbd291a4d9a6233d779ff03f162dc"]}},"_copySymbols.js":{"size":446,"offset":"15387599","integrity":{"algorithm":"SHA256","hash":"cd82623cd5c4454026e3afe1b1a11054b7ab4d8115436394f23209183b6df00d","blockSize":4194304,"blocks":["cd82623cd5c4454026e3afe1b1a11054b7ab4d8115436394f23209183b6df00d"]}},"_copySymbolsIn.js":{"size":470,"offset":"15388045","integrity":{"algorithm":"SHA256","hash":"bc2c0518d3708d754814b5657c90bbaa0d1494d06f32d21af0af01853f06a045","blockSize":4194304,"blocks":["bc2c0518d3708d754814b5657c90bbaa0d1494d06f32d21af0af01853f06a045"]}},"_coreJsData.js":{"size":157,"offset":"15388515","integrity":{"algorithm":"SHA256","hash":"9960c73f0dced1bc32511551e31cfece7fc2c3373b62f5e934eab7291796a8e0","blockSize":4194304,"blocks":["9960c73f0dced1bc32511551e31cfece7fc2c3373b62f5e934eab7291796a8e0"]}},"_countHolders.js":{"size":469,"offset":"15388672","integrity":{"algorithm":"SHA256","hash":"dca76f5213ffeddd57a87db1babf85b64e4295710d2c64b9a15830f07ae846b8","blockSize":4194304,"blocks":["dca76f5213ffeddd57a87db1babf85b64e4295710d2c64b9a15830f07ae846b8"]}},"_createAggregator.js":{"size":789,"offset":"15389141","integrity":{"algorithm":"SHA256","hash":"23d62e008e8c578443e4a55f56e6582a8b04e68650b18e78931bb423935d525d","blockSize":4194304,"blocks":["23d62e008e8c578443e4a55f56e6582a8b04e68650b18e78931bb423935d525d"]}},"_createAssigner.js":{"size":1042,"offset":"15389930","integrity":{"algorithm":"SHA256","hash":"244a92bbbc71a52c87e34638189f95fd69f671fb39a1a32729511f054548ffa4","blockSize":4194304,"blocks":["244a92bbbc71a52c87e34638189f95fd69f671fb39a1a32729511f054548ffa4"]}},"_createBaseEach.js":{"size":886,"offset":"15390972","integrity":{"algorithm":"SHA256","hash":"8fde6568230f3a01ec34320a3ddb29ba4e9608725bf27c634bdc363ddde2ff08","blockSize":4194304,"blocks":["8fde6568230f3a01ec34320a3ddb29ba4e9608725bf27c634bdc363ddde2ff08"]}},"_createBaseFor.js":{"size":648,"offset":"15391858","integrity":{"algorithm":"SHA256","hash":"39e0842e9dfb572b59b8237a5edafece23ca372cc20e768ce8e5e27fc9b52996","blockSize":4194304,"blocks":["39e0842e9dfb572b59b8237a5edafece23ca372cc20e768ce8e5e27fc9b52996"]}},"_createBind.js":{"size":853,"offset":"15392506","integrity":{"algorithm":"SHA256","hash":"5fbbec0d516e93505ae43dd9277e0980aed3d98c27d741321b7a3f8373fefa6e","blockSize":4194304,"blocks":["5fbbec0d516e93505ae43dd9277e0980aed3d98c27d741321b7a3f8373fefa6e"]}},"_createCaseFirst.js":{"size":811,"offset":"15393359","integrity":{"algorithm":"SHA256","hash":"c7e18c887a1871cd4fbc21cc79ce0976e180cd2c3b96dd8832aff658c07bb210","blockSize":4194304,"blocks":["c7e18c887a1871cd4fbc21cc79ce0976e180cd2c3b96dd8832aff658c07bb210"]}},"_createCompounder.js":{"size":635,"offset":"15394170","integrity":{"algorithm":"SHA256","hash":"43758b67806c676c6d9a38ebbb4263147cfeaa036cb8dc56d136b36fad262a51","blockSize":4194304,"blocks":["43758b67806c676c6d9a38ebbb4263147cfeaa036cb8dc56d136b36fad262a51"]}},"_createCtor.js":{"size":1482,"offset":"15394805","integrity":{"algorithm":"SHA256","hash":"40ffde082a93d3733672aa387ddb4a02b20501705cd93143f998cb01f583f8b7","blockSize":4194304,"blocks":["40ffde082a93d3733672aa387ddb4a02b20501705cd93143f998cb01f583f8b7"]}},"_createCurry.js":{"size":1447,"offset":"15396287","integrity":{"algorithm":"SHA256","hash":"e4f4ea0b7c6c2e23d679d8b1f05d8c9cef3236c44746cf5f2d59bf86fe45a3b8","blockSize":4194304,"blocks":["e4f4ea0b7c6c2e23d679d8b1f05d8c9cef3236c44746cf5f2d59bf86fe45a3b8"]}},"_createFind.js":{"size":853,"offset":"15397734","integrity":{"algorithm":"SHA256","hash":"6a15236257a0c09dbb7084c5ae795721a24df5bd5ad9c5ac5fe54c0b6f4c6e32","blockSize":4194304,"blocks":["6a15236257a0c09dbb7084c5ae795721a24df5bd5ad9c5ac5fe54c0b6f4c6e32"]}},"_createFlow.js":{"size":2249,"offset":"15398587","integrity":{"algorithm":"SHA256","hash":"a65305d3ff738e6c9692a0396a16c226a92b88f9caa6be9a76ca520036190ddb","blockSize":4194304,"blocks":["a65305d3ff738e6c9692a0396a16c226a92b88f9caa6be9a76ca520036190ddb"]}},"_createHybrid.js":{"size":3252,"offset":"15400836","integrity":{"algorithm":"SHA256","hash":"d6773f5ea7f7a580879a32300583de93c886f1f98343ca181f63096cfd3eb345","blockSize":4194304,"blocks":["d6773f5ea7f7a580879a32300583de93c886f1f98343ca181f63096cfd3eb345"]}},"_createInverter.js":{"size":497,"offset":"15404088","integrity":{"algorithm":"SHA256","hash":"b9618d906573bc74fe3b34c5cfd6b86f30ff72e1292d4fcc26025d71b8e130cb","blockSize":4194304,"blocks":["b9618d906573bc74fe3b34c5cfd6b86f30ff72e1292d4fcc26025d71b8e130cb"]}},"_createMathOperation.js":{"size":1104,"offset":"15404585","integrity":{"algorithm":"SHA256","hash":"335738807b39951fd64cb6469bba3a94764786fe3d926938f2275420df34f86c","blockSize":4194304,"blocks":["335738807b39951fd64cb6469bba3a94764786fe3d926938f2275420df34f86c"]}},"_createOver.js":{"size":780,"offset":"15405689","integrity":{"algorithm":"SHA256","hash":"ee23c96ff637259512dfcd11eca50f081abf43d505aa7c18f4b933074da048a7","blockSize":4194304,"blocks":["ee23c96ff637259512dfcd11eca50f081abf43d505aa7c18f4b933074da048a7"]}},"_createPadding.js":{"size":1153,"offset":"15406469","integrity":{"algorithm":"SHA256","hash":"242d9d729f1044522cb20637602f0ed56f3e1ac26eb58f4d17751ef04caa4d31","blockSize":4194304,"blocks":["242d9d729f1044522cb20637602f0ed56f3e1ac26eb58f4d17751ef04caa4d31"]}},"_createPartial.js":{"size":1382,"offset":"15407622","integrity":{"algorithm":"SHA256","hash":"229faccb2beb1c287454a5c6f825c63393840d72bba5f7d80c29aa2f604abfb6","blockSize":4194304,"blocks":["229faccb2beb1c287454a5c6f825c63393840d72bba5f7d80c29aa2f604abfb6"]}},"_createRange.js":{"size":864,"offset":"15409004","integrity":{"algorithm":"SHA256","hash":"d93dabb51867e8eaea8e01be8cf115e4714a462da42a0745aefeb66ec8607983","blockSize":4194304,"blocks":["d93dabb51867e8eaea8e01be8cf115e4714a462da42a0745aefeb66ec8607983"]}},"_createRecurry.js":{"size":2117,"offset":"15409868","integrity":{"algorithm":"SHA256","hash":"2c7f5b97c8dcd065f333fa98dfc629698eec88a4fb1f15b56eb95e47effbedaa","blockSize":4194304,"blocks":["2c7f5b97c8dcd065f333fa98dfc629698eec88a4fb1f15b56eb95e47effbedaa"]}},"_createRelationalOperation.js":{"size":578,"offset":"15411985","integrity":{"algorithm":"SHA256","hash":"c178b152e9291dff5e8a67df8a1d28013fcfbe576ab1b0af3a85651b8d6f9c0a","blockSize":4194304,"blocks":["c178b152e9291dff5e8a67df8a1d28013fcfbe576ab1b0af3a85651b8d6f9c0a"]}},"_createRound.js":{"size":1193,"offset":"15412563","integrity":{"algorithm":"SHA256","hash":"09b84d1712b210ec6408eebb5d2f3a72f728c5e9ce7c9f86f621ad81a5d02bd1","blockSize":4194304,"blocks":["09b84d1712b210ec6408eebb5d2f3a72f728c5e9ce7c9f86f621ad81a5d02bd1"]}},"_createSet.js":{"size":501,"offset":"15413756","integrity":{"algorithm":"SHA256","hash":"1c0337ba289802bd751f6584bacf1f4e71c13124d219927a6fbed13fee06a68e","blockSize":4194304,"blocks":["1c0337ba289802bd751f6584bacf1f4e71c13124d219927a6fbed13fee06a68e"]}},"_createToPairs.js":{"size":789,"offset":"15414257","integrity":{"algorithm":"SHA256","hash":"0e91375d171c8075f70d5daaaf604f03a5210c6a2a3a4f7777330b384c45664d","blockSize":4194304,"blocks":["0e91375d171c8075f70d5daaaf604f03a5210c6a2a3a4f7777330b384c45664d"]}},"_createWrap.js":{"size":3714,"offset":"15415046","integrity":{"algorithm":"SHA256","hash":"256b82e8c7e06f8c8d96448629113046232ef4904717d93f8543b29c5b6f96e5","blockSize":4194304,"blocks":["256b82e8c7e06f8c8d96448629113046232ef4904717d93f8543b29c5b6f96e5"]}},"_customDefaultsAssignIn.js":{"size":934,"offset":"15418760","integrity":{"algorithm":"SHA256","hash":"ab79963aa13e9c8ec3621998637839d6376d14a9b4f64646b2bcd3349b4cdc80","blockSize":4194304,"blocks":["ab79963aa13e9c8ec3621998637839d6376d14a9b4f64646b2bcd3349b4cdc80"]}},"_customDefaultsMerge.js":{"size":1049,"offset":"15419694","integrity":{"algorithm":"SHA256","hash":"28533a8709810d366c1792ae88799e8ef77165daf2c730d8e354c4905b4b1976","blockSize":4194304,"blocks":["28533a8709810d366c1792ae88799e8ef77165daf2c730d8e354c4905b4b1976"]}},"_customOmitClone.js":{"size":475,"offset":"15420743","integrity":{"algorithm":"SHA256","hash":"c3635eb6c74a9b523cebd93c46f3e8c816ffafb613aa9774cce2714b60aca630","blockSize":4194304,"blocks":["c3635eb6c74a9b523cebd93c46f3e8c816ffafb613aa9774cce2714b60aca630"]}},"_DataView.js":{"size":210,"offset":"15421218","integrity":{"algorithm":"SHA256","hash":"37b8d46c9ca5e53bac157a23154bb3701759fb616ee7e2dc04aa2a7a2715c0bb","blockSize":4194304,"blocks":["37b8d46c9ca5e53bac157a23154bb3701759fb616ee7e2dc04aa2a7a2715c0bb"]}},"_deburrLetter.js":{"size":3411,"offset":"15421428","integrity":{"algorithm":"SHA256","hash":"e06612542bac3757e781d4afa5f03ce59be787cc15b518c8f462c39b0c8a4c59","blockSize":4194304,"blocks":["e06612542bac3757e781d4afa5f03ce59be787cc15b518c8f462c39b0c8a4c59"]}},"_defineProperty.js":{"size":233,"offset":"15424839","integrity":{"algorithm":"SHA256","hash":"d026cc53aafed14ab5822904f68340e19fa7009f48f055dc4ebb092d6b89921d","blockSize":4194304,"blocks":["d026cc53aafed14ab5822904f68340e19fa7009f48f055dc4ebb092d6b89921d"]}},"_equalArrays.js":{"size":2662,"offset":"15425072","integrity":{"algorithm":"SHA256","hash":"a576f374229485f9235ad45f9d731166aa5f909481267d6c127f529d6e572c82","blockSize":4194304,"blocks":["a576f374229485f9235ad45f9d731166aa5f909481267d6c127f529d6e572c82"]}},"_equalByTag.js":{"size":3746,"offset":"15427734","integrity":{"algorithm":"SHA256","hash":"e6c76c206c821ac85bb92a08c685dad03d3edf097c122ed8a22aa0449170c672","blockSize":4194304,"blocks":["e6c76c206c821ac85bb92a08c685dad03d3edf097c122ed8a22aa0449170c672"]}},"_equalObjects.js":{"size":2971,"offset":"15431480","integrity":{"algorithm":"SHA256","hash":"ba4f279d6263aa41101bda461def6c10bf188feead52461af199011d48294343","blockSize":4194304,"blocks":["ba4f279d6263aa41101bda461def6c10bf188feead52461af199011d48294343"]}},"_escapeHtmlChar.js":{"size":479,"offset":"15434451","integrity":{"algorithm":"SHA256","hash":"8794b39eb350adb7277e1ee6403673ee5e85363405d3611d239c3cf670d7ad84","blockSize":4194304,"blocks":["8794b39eb350adb7277e1ee6403673ee5e85363405d3611d239c3cf670d7ad84"]}},"_escapeStringChar.js":{"size":521,"offset":"15434930","integrity":{"algorithm":"SHA256","hash":"21b46fca2d2fbda7b708949587456fc5d2a833819a486628ab9fd39104894022","blockSize":4194304,"blocks":["21b46fca2d2fbda7b708949587456fc5d2a833819a486628ab9fd39104894022"]}},"_flatRest.js":{"size":457,"offset":"15435451","integrity":{"algorithm":"SHA256","hash":"e3a9f736f99fb31cf6f30b601aa833cf8773503ff2444f3c09d09df16bb07b6e","blockSize":4194304,"blocks":["e3a9f736f99fb31cf6f30b601aa833cf8773503ff2444f3c09d09df16bb07b6e"]}},"_freeGlobal.js":{"size":173,"offset":"15435908","integrity":{"algorithm":"SHA256","hash":"7931bf414180bc20cf56337b5a33e6767501b6c7f537e9bb9e79f0f6e24ca515","blockSize":4194304,"blocks":["7931bf414180bc20cf56337b5a33e6767501b6c7f537e9bb9e79f0f6e24ca515"]}},"_getAllKeys.js":{"size":455,"offset":"15436081","integrity":{"algorithm":"SHA256","hash":"dc961385c7416bac45b8c2c424071f22aeb196906c37e455eefa618b12313453","blockSize":4194304,"blocks":["dc961385c7416bac45b8c2c424071f22aeb196906c37e455eefa618b12313453"]}},"_getAllKeysIn.js":{"size":488,"offset":"15436536","integrity":{"algorithm":"SHA256","hash":"70d86c863fd3916c6a9ad06fd2e79d223ffdc14a9774b45a9a53fbf91bd2a2f2","blockSize":4194304,"blocks":["70d86c863fd3916c6a9ad06fd2e79d223ffdc14a9774b45a9a53fbf91bd2a2f2"]}},"_getData.js":{"size":325,"offset":"15437024","integrity":{"algorithm":"SHA256","hash":"2e22b4a76a67c842b440b11b16c660d44072f04a60aff321bb13137099d73027","blockSize":4194304,"blocks":["2e22b4a76a67c842b440b11b16c660d44072f04a60aff321bb13137099d73027"]}},"_getFuncName.js":{"size":756,"offset":"15437349","integrity":{"algorithm":"SHA256","hash":"4d2f7fa3a9b1065f3ae97f9754c9734dab0355a075ba5e9d77ced870981cb666","blockSize":4194304,"blocks":["4d2f7fa3a9b1065f3ae97f9754c9734dab0355a075ba5e9d77ced870981cb666"]}},"_getHolder.js":{"size":280,"offset":"15438105","integrity":{"algorithm":"SHA256","hash":"7d951bdcd4db2dc26b915883df44ef62377b069f8583959778e6fa08d2455db3","blockSize":4194304,"blocks":["7d951bdcd4db2dc26b915883df44ef62377b069f8583959778e6fa08d2455db3"]}},"_getMapData.js":{"size":400,"offset":"15438385","integrity":{"algorithm":"SHA256","hash":"65d78bb9d058f742fae2416c00840b3f40e87a6b2155d4b2ab83b8d1c48c296a","blockSize":4194304,"blocks":["65d78bb9d058f742fae2416c00840b3f40e87a6b2155d4b2ab83b8d1c48c296a"]}},"_getMatchData.js":{"size":573,"offset":"15438785","integrity":{"algorithm":"SHA256","hash":"4333bb2857a95fd4b676a9db2aa82d05ccf5f6f50f9d44b104886ea137700286","blockSize":4194304,"blocks":["4333bb2857a95fd4b676a9db2aa82d05ccf5f6f50f9d44b104886ea137700286"]}},"_getNative.js":{"size":483,"offset":"15439358","integrity":{"algorithm":"SHA256","hash":"7392e38f4cb3cd6e1d3e3f89a26619cf89968382e0ed72a45d52e527aec0b1d9","blockSize":4194304,"blocks":["7392e38f4cb3cd6e1d3e3f89a26619cf89968382e0ed72a45d52e527aec0b1d9"]}},"_getPrototype.js":{"size":163,"offset":"15439841","integrity":{"algorithm":"SHA256","hash":"8beda7e5198f970fd49f0e0b1bd5256e13af516f45c190ea45104bcd3c4b1517","blockSize":4194304,"blocks":["8beda7e5198f970fd49f0e0b1bd5256e13af516f45c190ea45104bcd3c4b1517"]}},"_getRawTag.js":{"size":1139,"offset":"15440004","integrity":{"algorithm":"SHA256","hash":"3142fd97f89816f65a1b5bd17931f70c12fd9714d455c28cac4b91491901c713","blockSize":4194304,"blocks":["3142fd97f89816f65a1b5bd17931f70c12fd9714d455c28cac4b91491901c713"]}},"_getSymbols.js":{"size":886,"offset":"15441143","integrity":{"algorithm":"SHA256","hash":"3e850bf36c7ce747eef141dfcd98f0942b030215cb94c0be7a6a08c98a958e5e","blockSize":4194304,"blocks":["3e850bf36c7ce747eef141dfcd98f0942b030215cb94c0be7a6a08c98a958e5e"]}},"_getSymbolsIn.js":{"size":754,"offset":"15442029","integrity":{"algorithm":"SHA256","hash":"35cede8008aa104552d51e6bb96874b32f792fde7b2364661662173095bf3720","blockSize":4194304,"blocks":["35cede8008aa104552d51e6bb96874b32f792fde7b2364661662173095bf3720"]}},"_getTag.js":{"size":1838,"offset":"15442783","integrity":{"algorithm":"SHA256","hash":"ad94aaa26724c5e331f0810ae9d4069929d5ee7c7b18e51a5e7e0f629bd3ffd3","blockSize":4194304,"blocks":["ad94aaa26724c5e331f0810ae9d4069929d5ee7c7b18e51a5e7e0f629bd3ffd3"]}},"_getValue.js":{"size":325,"offset":"15444621","integrity":{"algorithm":"SHA256","hash":"102bb7520adda0718b3953d6af99838244d97aa1697a36f50fc4ab0070350f41","blockSize":4194304,"blocks":["102bb7520adda0718b3953d6af99838244d97aa1697a36f50fc4ab0070350f41"]}},"_getView.js":{"size":1024,"offset":"15444946","integrity":{"algorithm":"SHA256","hash":"3f978b51e597e9e78149bf5df230052d60f2125dbae544dc7b1e28a098cd7aa0","blockSize":4194304,"blocks":["3f978b51e597e9e78149bf5df230052d60f2125dbae544dc7b1e28a098cd7aa0"]}},"_getWrapDetails.js":{"size":479,"offset":"15445970","integrity":{"algorithm":"SHA256","hash":"37093d5f135f01cc58d4f28fe79fea791f72906e8c61ba674d84a858d8d5a67b","blockSize":4194304,"blocks":["37093d5f135f01cc58d4f28fe79fea791f72906e8c61ba674d84a858d8d5a67b"]}},"_Hash.js":{"size":747,"offset":"15446449","integrity":{"algorithm":"SHA256","hash":"853c8a1c5c0b0e14fc873804db3943d3a4ba6378da6ee3793d44a12ace5871c5","blockSize":4194304,"blocks":["853c8a1c5c0b0e14fc873804db3943d3a4ba6378da6ee3793d44a12ace5871c5"]}},"_hashClear.js":{"size":281,"offset":"15447196","integrity":{"algorithm":"SHA256","hash":"d9f799f614605335bc0e3c3426ba84ec50bc188ddbac97fcf5ed810325c537f9","blockSize":4194304,"blocks":["d9f799f614605335bc0e3c3426ba84ec50bc188ddbac97fcf5ed810325c537f9"]}},"_hashDelete.js":{"size":445,"offset":"15447477","integrity":{"algorithm":"SHA256","hash":"0a65708c8770e0e34e81f53289a31394a77b2789e3ca7586a425223a24c0b3b4","blockSize":4194304,"blocks":["0a65708c8770e0e34e81f53289a31394a77b2789e3ca7586a425223a24c0b3b4"]}},"_hashGet.js":{"size":772,"offset":"15447922","integrity":{"algorithm":"SHA256","hash":"75cd024791ae12ec88871c24c82c23ca80505dd8370958ddc022e0d9efaedcae","blockSize":4194304,"blocks":["75cd024791ae12ec88871c24c82c23ca80505dd8370958ddc022e0d9efaedcae"]}},"_hashHas.js":{"size":626,"offset":"15448694","integrity":{"algorithm":"SHA256","hash":"7ebef49fb1f8bca1c1710a045c4a4e52d0c34cbe547a95a18e2c02e7cfddebdd","blockSize":4194304,"blocks":["7ebef49fb1f8bca1c1710a045c4a4e52d0c34cbe547a95a18e2c02e7cfddebdd"]}},"_hashSet.js":{"size":598,"offset":"15449320","integrity":{"algorithm":"SHA256","hash":"180372f66c983a5f424145fa1e2fb0d7d3ad9cc4249e2489c203cadc0e0456cc","blockSize":4194304,"blocks":["180372f66c983a5f424145fa1e2fb0d7d3ad9cc4249e2489c203cadc0e0456cc"]}},"_hasPath.js":{"size":1085,"offset":"15449918","integrity":{"algorithm":"SHA256","hash":"1fd75d39690b3d1b8562af1fc1312fd2cfd1673a62668e9797c0c1057b406432","blockSize":4194304,"blocks":["1fd75d39690b3d1b8562af1fc1312fd2cfd1673a62668e9797c0c1057b406432"]}},"_hasUnicode.js":{"size":949,"offset":"15451003","integrity":{"algorithm":"SHA256","hash":"a2ed37159b293c0a543cd0ad35f3b7154039f0f004b1e3ea505a0e1515e208d3","blockSize":4194304,"blocks":["a2ed37159b293c0a543cd0ad35f3b7154039f0f004b1e3ea505a0e1515e208d3"]}},"_hasUnicodeWord.js":{"size":491,"offset":"15451952","integrity":{"algorithm":"SHA256","hash":"89ed9fac3f97e188633a2c63a5528282ef73028fef5fc3e6e9a9e9e1cc6cc3a1","blockSize":4194304,"blocks":["89ed9fac3f97e188633a2c63a5528282ef73028fef5fc3e6e9a9e9e1cc6cc3a1"]}},"_initCloneArray.js":{"size":692,"offset":"15452443","integrity":{"algorithm":"SHA256","hash":"73ba23f0f5b13e152415d5bd3a1855a686e4c57424bbdfe1dd8189d5d19877a5","blockSize":4194304,"blocks":["73ba23f0f5b13e152415d5bd3a1855a686e4c57424bbdfe1dd8189d5d19877a5"]}},"_initCloneByTag.js":{"size":2261,"offset":"15453135","integrity":{"algorithm":"SHA256","hash":"2552b396fa46955713dde74e78d1711b582d82d0c6f044590443d88ce9218465","blockSize":4194304,"blocks":["2552b396fa46955713dde74e78d1711b582d82d0c6f044590443d88ce9218465"]}},"_initCloneObject.js":{"size":486,"offset":"15455396","integrity":{"algorithm":"SHA256","hash":"23aca4a78a9e5ce2eb17fb7ac1b12f57621f1156cee06fc28f9e2ac2d5fd1681","blockSize":4194304,"blocks":["23aca4a78a9e5ce2eb17fb7ac1b12f57621f1156cee06fc28f9e2ac2d5fd1681"]}},"_insertWrapDetails.js":{"size":748,"offset":"15455882","integrity":{"algorithm":"SHA256","hash":"35f6152473a61cf36f99d584e8d83647e37f286edd29ee21e939ed0a4366c64b","blockSize":4194304,"blocks":["35f6152473a61cf36f99d584e8d83647e37f286edd29ee21e939ed0a4366c64b"]}},"_isFlattenable.js":{"size":608,"offset":"15456630","integrity":{"algorithm":"SHA256","hash":"ec51b977a31a76fe787e46e5ec8dbb757dc0026ea7af82320ae1f1e27da40895","blockSize":4194304,"blocks":["ec51b977a31a76fe787e46e5ec8dbb757dc0026ea7af82320ae1f1e27da40895"]}},"_isIndex.js":{"size":759,"offset":"15457238","integrity":{"algorithm":"SHA256","hash":"2baf7a241dfa17458e7274d568625c5e95e85cd57341c11c6a9f95531d2b49cd","blockSize":4194304,"blocks":["2baf7a241dfa17458e7274d568625c5e95e85cd57341c11c6a9f95531d2b49cd"]}},"_isIterateeCall.js":{"size":877,"offset":"15457997","integrity":{"algorithm":"SHA256","hash":"43a63fe192e33cdda10f4c77eb45042381b3a5712e33daabb2fcbf8f1cebfddb","blockSize":4194304,"blocks":["43a63fe192e33cdda10f4c77eb45042381b3a5712e33daabb2fcbf8f1cebfddb"]}},"_isKey.js":{"size":880,"offset":"15458874","integrity":{"algorithm":"SHA256","hash":"0f5dce93adc9aa4b43003c2669e06e2eda1455e4167a12aa703324f578ecbfe1","blockSize":4194304,"blocks":["0f5dce93adc9aa4b43003c2669e06e2eda1455e4167a12aa703324f578ecbfe1"]}},"_isKeyable.js":{"size":430,"offset":"15459754","integrity":{"algorithm":"SHA256","hash":"350b0af6255491303512c1cf75a2b57cb62efcc392d9a280435dfaa04aed06cf","blockSize":4194304,"blocks":["350b0af6255491303512c1cf75a2b57cb62efcc392d9a280435dfaa04aed06cf"]}},"_isLaziable.js":{"size":712,"offset":"15460184","integrity":{"algorithm":"SHA256","hash":"6863f63c866527fb17eba2b8abd81f04cdde2057c76201f3ac190494d319bd33","blockSize":4194304,"blocks":["6863f63c866527fb17eba2b8abd81f04cdde2057c76201f3ac190494d319bd33"]}},"_isMaskable.js":{"size":395,"offset":"15460896","integrity":{"algorithm":"SHA256","hash":"7fca667defefe5906ecaa58bfc85337197465d7df8ac8dcf06961d0de4a05fba","blockSize":4194304,"blocks":["7fca667defefe5906ecaa58bfc85337197465d7df8ac8dcf06961d0de4a05fba"]}},"_isMasked.js":{"size":564,"offset":"15461291","integrity":{"algorithm":"SHA256","hash":"bc22cc820f6dfa6a16303d9e0b2430defb8d78328a2f56a0fbf0d919c6128757","blockSize":4194304,"blocks":["bc22cc820f6dfa6a16303d9e0b2430defb8d78328a2f56a0fbf0d919c6128757"]}},"_isPrototype.js":{"size":480,"offset":"15461855","integrity":{"algorithm":"SHA256","hash":"cfb95e7cf139dcc5fbf79e4b13f7fa9f30fedf3c7d73093ca8c5ee44d7d4aaaa","blockSize":4194304,"blocks":["cfb95e7cf139dcc5fbf79e4b13f7fa9f30fedf3c7d73093ca8c5ee44d7d4aaaa"]}},"_isStrictComparable.js":{"size":414,"offset":"15462335","integrity":{"algorithm":"SHA256","hash":"adb0b07c7c84a54ae3e19f7c92aa915a0ae8e0a26ff3c3fa8aacb4d63b8dfbe4","blockSize":4194304,"blocks":["adb0b07c7c84a54ae3e19f7c92aa915a0ae8e0a26ff3c3fa8aacb4d63b8dfbe4"]}},"_iteratorToArray.js":{"size":360,"offset":"15462749","integrity":{"algorithm":"SHA256","hash":"32f28cd367d0fd3426bb1b53fa648dba07245a0d837b4e31e2bdddb13ce25107","blockSize":4194304,"blocks":["32f28cd367d0fd3426bb1b53fa648dba07245a0d837b4e31e2bdddb13ce25107"]}},"_lazyClone.js":{"size":657,"offset":"15463109","integrity":{"algorithm":"SHA256","hash":"a7c29e1b48490be0e4114ec696cfb9078efb2c84b515b2fb22d090de4adeac40","blockSize":4194304,"blocks":["a7c29e1b48490be0e4114ec696cfb9078efb2c84b515b2fb22d090de4adeac40"]}},"_lazyReverse.js":{"size":491,"offset":"15463766","integrity":{"algorithm":"SHA256","hash":"03b1c25da23e238ceb276999e02685a7d188e95a11309cf48de424e69529dc18","blockSize":4194304,"blocks":["03b1c25da23e238ceb276999e02685a7d188e95a11309cf48de424e69529dc18"]}},"_lazyValue.js":{"size":1790,"offset":"15464257","integrity":{"algorithm":"SHA256","hash":"84d51a53ea72e167bf00a4dfd7487d1af3c9907da9c81973d27a334d44730d40","blockSize":4194304,"blocks":["84d51a53ea72e167bf00a4dfd7487d1af3c9907da9c81973d27a334d44730d40"]}},"_LazyWrapper.js":{"size":773,"offset":"15466047","integrity":{"algorithm":"SHA256","hash":"82ab7999bba741c5ad424a6c3da55177a799e53f0a18c3d726d9d7f7e58783ee","blockSize":4194304,"blocks":["82ab7999bba741c5ad424a6c3da55177a799e53f0a18c3d726d9d7f7e58783ee"]}},"_ListCache.js":{"size":869,"offset":"15466820","integrity":{"algorithm":"SHA256","hash":"2b10bf68a2e572e392f8f5b1d47c8fbd3f759d1fc80482bf57bc768596ec862c","blockSize":4194304,"blocks":["2b10bf68a2e572e392f8f5b1d47c8fbd3f759d1fc80482bf57bc768596ec862c"]}},"_listCacheClear.js":{"size":218,"offset":"15467689","integrity":{"algorithm":"SHA256","hash":"0872c1fc38da972860c5d7e9b029d60556a1132343e9c151b9446002cf5f3c35","blockSize":4194304,"blocks":["0872c1fc38da972860c5d7e9b029d60556a1132343e9c151b9446002cf5f3c35"]}},"_listCacheDelete.js":{"size":775,"offset":"15467907","integrity":{"algorithm":"SHA256","hash":"a3760383a9251969424b63e0cd9cbed3e376e94b18dfe462c2a5bdbd0281568d","blockSize":4194304,"blocks":["a3760383a9251969424b63e0cd9cbed3e376e94b18dfe462c2a5bdbd0281568d"]}},"_listCacheGet.js":{"size":420,"offset":"15468682","integrity":{"algorithm":"SHA256","hash":"499002dd4ffe04bb2c270f5629b85b8c1578ace90f18b8f6ddc62fdc75a9c018","blockSize":4194304,"blocks":["499002dd4ffe04bb2c270f5629b85b8c1578ace90f18b8f6ddc62fdc75a9c018"]}},"_listCacheHas.js":{"size":403,"offset":"15469102","integrity":{"algorithm":"SHA256","hash":"dadbb626a3f14d58da266fd66de1b0b1d7fef13e9d6e2d1802e908f26f6a6882","blockSize":4194304,"blocks":["dadbb626a3f14d58da266fd66de1b0b1d7fef13e9d6e2d1802e908f26f6a6882"]}},"_listCacheSet.js":{"size":553,"offset":"15469505","integrity":{"algorithm":"SHA256","hash":"7557307601cff2f4071cf9d7fa9aa5316064c8974f8cf30404acb5897d5ba242","blockSize":4194304,"blocks":["7557307601cff2f4071cf9d7fa9aa5316064c8974f8cf30404acb5897d5ba242"]}},"_LodashWrapper.js":{"size":611,"offset":"15470058","integrity":{"algorithm":"SHA256","hash":"48b34858ac0dcc49bbf4e62a863a6bdd0dad39d238a50de389ac2cd938667e6e","blockSize":4194304,"blocks":["48b34858ac0dcc49bbf4e62a863a6bdd0dad39d238a50de389ac2cd938667e6e"]}},"_Map.js":{"size":195,"offset":"15470669","integrity":{"algorithm":"SHA256","hash":"69ecf277dfdd5d1e16993fdc264e011927c1174fd9610648a16ca32d4a275200","blockSize":4194304,"blocks":["69ecf277dfdd5d1e16993fdc264e011927c1174fd9610648a16ca32d4a275200"]}},"_MapCache.js":{"size":869,"offset":"15470864","integrity":{"algorithm":"SHA256","hash":"5db84bcbca26aec6bceed93b1ab05c496ac2be3e1623d226ca46f39d367cc265","blockSize":4194304,"blocks":["5db84bcbca26aec6bceed93b1ab05c496ac2be3e1623d226ca46f39d367cc265"]}},"_mapCacheClear.js":{"size":393,"offset":"15471733","integrity":{"algorithm":"SHA256","hash":"e83e7e069f743cda3397d56bf30bb6863046b3729730b932f67fd8cb1479b24a","blockSize":4194304,"blocks":["e83e7e069f743cda3397d56bf30bb6863046b3729730b932f67fd8cb1479b24a"]}},"_mapCacheDelete.js":{"size":450,"offset":"15472126","integrity":{"algorithm":"SHA256","hash":"63644bb7c346b74226f5cf6e5d7712a91414dc9cbd28d0733817e72f121b2f3a","blockSize":4194304,"blocks":["63644bb7c346b74226f5cf6e5d7712a91414dc9cbd28d0733817e72f121b2f3a"]}},"_mapCacheGet.js":{"size":330,"offset":"15472576","integrity":{"algorithm":"SHA256","hash":"76095488d813ea6627dff4cb3aa3033722ccec642aa4c9a596c571e509c84b9c","blockSize":4194304,"blocks":["76095488d813ea6627dff4cb3aa3033722ccec642aa4c9a596c571e509c84b9c"]}},"_mapCacheHas.js":{"size":382,"offset":"15472906","integrity":{"algorithm":"SHA256","hash":"4b41ddbc15713b24902083119ad7f45e710a26358b871a700a857b3ecd85be81","blockSize":4194304,"blocks":["4b41ddbc15713b24902083119ad7f45e710a26358b871a700a857b3ecd85be81"]}},"_mapCacheSet.js":{"size":489,"offset":"15473288","integrity":{"algorithm":"SHA256","hash":"464f027fa65e25a396cccd9b5e2103259f51f7fc646b72f64907a89106697bd6","blockSize":4194304,"blocks":["464f027fa65e25a396cccd9b5e2103259f51f7fc646b72f64907a89106697bd6"]}},"_mapToArray.js":{"size":363,"offset":"15473777","integrity":{"algorithm":"SHA256","hash":"5d44139746a75599d76943ab9b10fbfc0865ca07272265eb94ea218fa591eaf4","blockSize":4194304,"blocks":["5d44139746a75599d76943ab9b10fbfc0865ca07272265eb94ea218fa591eaf4"]}},"_matchesStrictComparable.js":{"size":574,"offset":"15474140","integrity":{"algorithm":"SHA256","hash":"f8eaac0f6f8af658933221834f7638f6d2967dbfb21d87b8e77d4feaaf4ca7e3","blockSize":4194304,"blocks":["f8eaac0f6f8af658933221834f7638f6d2967dbfb21d87b8e77d4feaaf4ca7e3"]}},"_memoizeCapped.js":{"size":633,"offset":"15474714","integrity":{"algorithm":"SHA256","hash":"1da7277242b79f0e2fb5261b5fb8bfe1363b6a167e1c196ffe34c7f01cc71a5e","blockSize":4194304,"blocks":["1da7277242b79f0e2fb5261b5fb8bfe1363b6a167e1c196ffe34c7f01cc71a5e"]}},"_mergeData.js":{"size":3135,"offset":"15475347","integrity":{"algorithm":"SHA256","hash":"1b2c0b0be33a07225ba79cb66601d7f78e09ac5f896d53fcd060011d0fd66491","blockSize":4194304,"blocks":["1b2c0b0be33a07225ba79cb66601d7f78e09ac5f896d53fcd060011d0fd66491"]}},"_metaMap.js":{"size":143,"offset":"15478482","integrity":{"algorithm":"SHA256","hash":"1d7b3626ce926fdfa1b014c725aaae932f04628bc5ee7b36b3632f715590676c","blockSize":4194304,"blocks":["1d7b3626ce926fdfa1b014c725aaae932f04628bc5ee7b36b3632f715590676c"]}},"_nativeCreate.js":{"size":187,"offset":"15478625","integrity":{"algorithm":"SHA256","hash":"4271167f1b155aa72b4112e5e716837175380b3f797c4763ca102c6b48bdb69f","blockSize":4194304,"blocks":["4271167f1b155aa72b4112e5e716837175380b3f797c4763ca102c6b48bdb69f"]}},"_nativeKeys.js":{"size":204,"offset":"15478812","integrity":{"algorithm":"SHA256","hash":"2aca1ae1ff39e05d3f36082c4b46211668313e7ef1a08754043d80fe8e35c0b5","blockSize":4194304,"blocks":["2aca1ae1ff39e05d3f36082c4b46211668313e7ef1a08754043d80fe8e35c0b5"]}},"_nativeKeysIn.js":{"size":490,"offset":"15479016","integrity":{"algorithm":"SHA256","hash":"c1970a10bedf2fc57f0306b8469c2d7c4cf12df3eb0f1e6538a929a4bbbe0849","blockSize":4194304,"blocks":["c1970a10bedf2fc57f0306b8469c2d7c4cf12df3eb0f1e6538a929a4bbbe0849"]}},"_nodeUtil.js":{"size":995,"offset":"15479506","integrity":{"algorithm":"SHA256","hash":"537b6e42a7aa1200af9fb5079f05b12d3e3c00f1f0665d67ef17e80dd0949b65","blockSize":4194304,"blocks":["537b6e42a7aa1200af9fb5079f05b12d3e3c00f1f0665d67ef17e80dd0949b65"]}},"_objectToString.js":{"size":565,"offset":"15480501","integrity":{"algorithm":"SHA256","hash":"81c0b42d3076882d603659f81f75883fb5ccda995f323e2423ecff8648d6e231","blockSize":4194304,"blocks":["81c0b42d3076882d603659f81f75883fb5ccda995f323e2423ecff8648d6e231"]}},"_overArg.js":{"size":382,"offset":"15481066","integrity":{"algorithm":"SHA256","hash":"0eb5681b004c2bccb0b5480924c589dda6702b3bb53eb384a0c22956312a3ae2","blockSize":4194304,"blocks":["0eb5681b004c2bccb0b5480924c589dda6702b3bb53eb384a0c22956312a3ae2"]}},"_overRest.js":{"size":1096,"offset":"15481448","integrity":{"algorithm":"SHA256","hash":"8833534359cb66fde3c020f57e1280f9626c806088e6b9eaf51953b3c849ce36","blockSize":4194304,"blocks":["8833534359cb66fde3c020f57e1280f9626c806088e6b9eaf51953b3c849ce36"]}},"_parent.js":{"size":436,"offset":"15482544","integrity":{"algorithm":"SHA256","hash":"b1a85d2cbbd4bea3b76e2b74d60cce492bc0d91c4a25656aab5017a13119a6ea","blockSize":4194304,"blocks":["b1a85d2cbbd4bea3b76e2b74d60cce492bc0d91c4a25656aab5017a13119a6ea"]}},"_Promise.js":{"size":207,"offset":"15482980","integrity":{"algorithm":"SHA256","hash":"4f8391d51b7100e4d8c82f71ac8d77ac0a9ec05d327afd5fdc1855d2a997040d","blockSize":4194304,"blocks":["4f8391d51b7100e4d8c82f71ac8d77ac0a9ec05d327afd5fdc1855d2a997040d"]}},"_realNames.js":{"size":98,"offset":"15483187","integrity":{"algorithm":"SHA256","hash":"214c59771323560484af0420a002b02ae8efba8fa875047275927d1a4f1c1f0c","blockSize":4194304,"blocks":["214c59771323560484af0420a002b02ae8efba8fa875047275927d1a4f1c1f0c"]}},"_reEscape.js":{"size":105,"offset":"15483285","integrity":{"algorithm":"SHA256","hash":"19273f353ee560f281aa74c9179a2e977400c08de8ec8af65ebcb32f5fb2a527","blockSize":4194304,"blocks":["19273f353ee560f281aa74c9179a2e977400c08de8ec8af65ebcb32f5fb2a527"]}},"_reEvaluate.js":{"size":108,"offset":"15483390","integrity":{"algorithm":"SHA256","hash":"d6a2f29eb24646e67b31f8b026234ff57a78e2cca8af3da9d43f173e51949ebe","blockSize":4194304,"blocks":["d6a2f29eb24646e67b31f8b026234ff57a78e2cca8af3da9d43f173e51949ebe"]}},"_reInterpolate.js":{"size":115,"offset":"15483498","integrity":{"algorithm":"SHA256","hash":"ece8e61ced08270d0e529e847511543f99ae2eb67c5fe3a4e1cb43572500e36a","blockSize":4194304,"blocks":["ece8e61ced08270d0e529e847511543f99ae2eb67c5fe3a4e1cb43572500e36a"]}},"_reorder.js":{"size":900,"offset":"15483613","integrity":{"algorithm":"SHA256","hash":"495710ae274abce5b6e71a9879c735ef340210b3795a91059f51c55a0f9d4b27","blockSize":4194304,"blocks":["495710ae274abce5b6e71a9879c735ef340210b3795a91059f51c55a0f9d4b27"]}},"_replaceHolders.js":{"size":785,"offset":"15484513","integrity":{"algorithm":"SHA256","hash":"670f940008f7bb3ef54b5254d61ecc441e819da2eef53597048ea4ebb7225363","blockSize":4194304,"blocks":["670f940008f7bb3ef54b5254d61ecc441e819da2eef53597048ea4ebb7225363"]}},"_root.js":{"size":300,"offset":"15485298","integrity":{"algorithm":"SHA256","hash":"32ea714f25057679fdd3099c2693cb6be437252e78eea3a5a7882a1282078348","blockSize":4194304,"blocks":["32ea714f25057679fdd3099c2693cb6be437252e78eea3a5a7882a1282078348"]}},"_safeGet.js":{"size":456,"offset":"15485598","integrity":{"algorithm":"SHA256","hash":"266166a787c864ba2c6306f40f4c135c3614546aea06492fa7103e3af5a4b724","blockSize":4194304,"blocks":["266166a787c864ba2c6306f40f4c135c3614546aea06492fa7103e3af5a4b724"]}},"_Set.js":{"size":195,"offset":"15486054","integrity":{"algorithm":"SHA256","hash":"0517203198c611581586fe06691eaa5f7b242e362ee1d231b7e5874b639371cf","blockSize":4194304,"blocks":["0517203198c611581586fe06691eaa5f7b242e362ee1d231b7e5874b639371cf"]}},"_SetCache.js":{"size":632,"offset":"15486249","integrity":{"algorithm":"SHA256","hash":"0ca727d1533e9ea06dbb15067772529018b90e106be4a58ed769185e45c19222","blockSize":4194304,"blocks":["0ca727d1533e9ea06dbb15067772529018b90e106be4a58ed769185e45c19222"]}},"_setCacheAdd.js":{"size":424,"offset":"15486881","integrity":{"algorithm":"SHA256","hash":"c946c72eb39ef2e5a04836b610e9877200e4269490930b21e64c29b1573624ed","blockSize":4194304,"blocks":["c946c72eb39ef2e5a04836b610e9877200e4269490930b21e64c29b1573624ed"]}},"_setCacheHas.js":{"size":316,"offset":"15487305","integrity":{"algorithm":"SHA256","hash":"6928afa62c51aba995e2b617915ced865627a6399dfd18c864191accfead3233","blockSize":4194304,"blocks":["6928afa62c51aba995e2b617915ced865627a6399dfd18c864191accfead3233"]}},"_setData.js":{"size":645,"offset":"15487621","integrity":{"algorithm":"SHA256","hash":"1fedd970934b9090fc8bc52e4e10d81e5319ec1909cbe08a0868d4e25ae1e79e","blockSize":4194304,"blocks":["1fedd970934b9090fc8bc52e4e10d81e5319ec1909cbe08a0868d4e25ae1e79e"]}},"_setToArray.js":{"size":345,"offset":"15488266","integrity":{"algorithm":"SHA256","hash":"814c80519a194b7bff82784e06c2d6c69ec9e64e03b515932dd5bba81c60fd49","blockSize":4194304,"blocks":["814c80519a194b7bff82784e06c2d6c69ec9e64e03b515932dd5bba81c60fd49"]}},"_setToPairs.js":{"size":364,"offset":"15488611","integrity":{"algorithm":"SHA256","hash":"7e9e3e26490ddc2ddb0f86ba88dffd19c3ba543e473035547e9d1c7a28f746f4","blockSize":4194304,"blocks":["7e9e3e26490ddc2ddb0f86ba88dffd19c3ba543e473035547e9d1c7a28f746f4"]}},"_setToString.js":{"size":392,"offset":"15488975","integrity":{"algorithm":"SHA256","hash":"86eee99d2a2d984255dd6c7d3ac25ab918808e9777311acf7fbc3adbd45879e7","blockSize":4194304,"blocks":["86eee99d2a2d984255dd6c7d3ac25ab918808e9777311acf7fbc3adbd45879e7"]}},"_setWrapToString.js":{"size":847,"offset":"15489367","integrity":{"algorithm":"SHA256","hash":"cecf7bcaf5a4b8f7ca83d3bf57a27c3874d2f18742ed7f18452beca3eb64d6af","blockSize":4194304,"blocks":["cecf7bcaf5a4b8f7ca83d3bf57a27c3874d2f18742ed7f18452beca3eb64d6af"]}},"_shortOut.js":{"size":941,"offset":"15490214","integrity":{"algorithm":"SHA256","hash":"22851e1eb10e731a812bdf627957cabc535cc320e00e44170b692fc210c0aaad","blockSize":4194304,"blocks":["22851e1eb10e731a812bdf627957cabc535cc320e00e44170b692fc210c0aaad"]}},"_shuffleSelf.js":{"size":689,"offset":"15491155","integrity":{"algorithm":"SHA256","hash":"62043164438968ce5b8c7277d87777cb965bc97add797f314c464bd60ca4cd3a","blockSize":4194304,"blocks":["62043164438968ce5b8c7277d87777cb965bc97add797f314c464bd60ca4cd3a"]}},"_Stack.js":{"size":734,"offset":"15491844","integrity":{"algorithm":"SHA256","hash":"ff0cad8911657e083892b17d433e9af1427c23c647e9276b654d957c9300663f","blockSize":4194304,"blocks":["ff0cad8911657e083892b17d433e9af1427c23c647e9276b654d957c9300663f"]}},"_stackClear.js":{"size":254,"offset":"15492578","integrity":{"algorithm":"SHA256","hash":"89b580cfc2b47c5aba05bd124b807b82d007fa106ee3a7c9e61205c72cf654d0","blockSize":4194304,"blocks":["89b580cfc2b47c5aba05bd124b807b82d007fa106ee3a7c9e61205c72cf654d0"]}},"_stackDelete.js":{"size":405,"offset":"15492832","integrity":{"algorithm":"SHA256","hash":"2d769f2390c318fd300f07e9c3cfd4e0d1f2d9857316b03aa416ed2b14636f88","blockSize":4194304,"blocks":["2d769f2390c318fd300f07e9c3cfd4e0d1f2d9857316b03aa416ed2b14636f88"]}},"_stackGet.js":{"size":271,"offset":"15493237","integrity":{"algorithm":"SHA256","hash":"0681d6e2e14cb4d0fb1a2f893dd25fff38fcbdfc6f2cc12989d8c946e7055973","blockSize":4194304,"blocks":["0681d6e2e14cb4d0fb1a2f893dd25fff38fcbdfc6f2cc12989d8c946e7055973"]}},"_stackHas.js":{"size":323,"offset":"15493508","integrity":{"algorithm":"SHA256","hash":"b61639cbc8c10a724c7de827483fd5e0e92db13f8b8e1ef81cbca8bc242bb4f8","blockSize":4194304,"blocks":["b61639cbc8c10a724c7de827483fd5e0e92db13f8b8e1ef81cbca8bc242bb4f8"]}},"_stackSet.js":{"size":853,"offset":"15493831","integrity":{"algorithm":"SHA256","hash":"ac5abfcc087211a21f7d3087e3919febed9c1780dbc74cce3a007886ba5fc86a","blockSize":4194304,"blocks":["ac5abfcc087211a21f7d3087e3919febed9c1780dbc74cce3a007886ba5fc86a"]}},"_strictIndexOf.js":{"size":600,"offset":"15494684","integrity":{"algorithm":"SHA256","hash":"394592bfc902ec6451478cee5e466052e8358d0ffbee50d31419d26d8d14ff00","blockSize":4194304,"blocks":["394592bfc902ec6451478cee5e466052e8358d0ffbee50d31419d26d8d14ff00"]}},"_strictLastIndexOf.js":{"size":576,"offset":"15495284","integrity":{"algorithm":"SHA256","hash":"5b153f6bcf9bdfce038bbab5253ff345a1383386d8aa296a96f4dfe1edb52f77","blockSize":4194304,"blocks":["5b153f6bcf9bdfce038bbab5253ff345a1383386d8aa296a96f4dfe1edb52f77"]}},"_stringSize.js":{"size":432,"offset":"15495860","integrity":{"algorithm":"SHA256","hash":"45a57e04488b34752ef93b02fbcf4fc62f8b0823d9ba0096f8bdc470110f5df7","blockSize":4194304,"blocks":["45a57e04488b34752ef93b02fbcf4fc62f8b0823d9ba0096f8bdc470110f5df7"]}},"_stringToArray.js":{"size":450,"offset":"15496292","integrity":{"algorithm":"SHA256","hash":"df8f719c2232705da60cfe935227c5dc7edd6990016319ab842d3c03c15d07e8","blockSize":4194304,"blocks":["df8f719c2232705da60cfe935227c5dc7edd6990016319ab842d3c03c15d07e8"]}},"_stringToPath.js":{"size":840,"offset":"15496742","integrity":{"algorithm":"SHA256","hash":"59db820071a2b05418f75fd3a41a6b519a10e25fd1257355bca7240a21690ca1","blockSize":4194304,"blocks":["59db820071a2b05418f75fd3a41a6b519a10e25fd1257355bca7240a21690ca1"]}},"_Symbol.js":{"size":118,"offset":"15497582","integrity":{"algorithm":"SHA256","hash":"23becdb07e69dcf4555a924eb4ddfee1ce7c64ed369784fdbe01cc89de7b547e","blockSize":4194304,"blocks":["23becdb07e69dcf4555a924eb4ddfee1ce7c64ed369784fdbe01cc89de7b547e"]}},"_toKey.js":{"size":523,"offset":"15497700","integrity":{"algorithm":"SHA256","hash":"16f6bb9f50ab65818dca375f29bb77f72e6c073bd06a804856dcc476ed224eec","blockSize":4194304,"blocks":["16f6bb9f50ab65818dca375f29bb77f72e6c073bd06a804856dcc476ed224eec"]}},"_toSource.js":{"size":556,"offset":"15498223","integrity":{"algorithm":"SHA256","hash":"aa142c3fcb0dab692297bf7acb158e174c0667984561a02beec890f6c3c7cc2b","blockSize":4194304,"blocks":["aa142c3fcb0dab692297bf7acb158e174c0667984561a02beec890f6c3c7cc2b"]}},"_trimmedEndIndex.js":{"size":515,"offset":"15498779","integrity":{"algorithm":"SHA256","hash":"edd88c7e95d5a3d2aaaa1656fc7e231583108ea358685eb113239d95a4e47433","blockSize":4194304,"blocks":["edd88c7e95d5a3d2aaaa1656fc7e231583108ea358685eb113239d95a4e47433"]}},"_Uint8Array.js":{"size":130,"offset":"15499294","integrity":{"algorithm":"SHA256","hash":"65cebe8429a19d773463a02c99c92772be5ceea26240aae7e8c4ab830085e1cd","blockSize":4194304,"blocks":["65cebe8429a19d773463a02c99c92772be5ceea26240aae7e8c4ab830085e1cd"]}},"_unescapeHtmlChar.js":{"size":493,"offset":"15499424","integrity":{"algorithm":"SHA256","hash":"39f416c25d42f786694256f99d466d239c6386f72d1837723f3b5cac585fe90c","blockSize":4194304,"blocks":["39f416c25d42f786694256f99d466d239c6386f72d1837723f3b5cac585fe90c"]}},"_unicodeSize.js":{"size":1642,"offset":"15499917","integrity":{"algorithm":"SHA256","hash":"afd590da7f18e94393e8e744e1bf58bb6c619b5d56c9919650314cc78b93d45a","blockSize":4194304,"blocks":["afd590da7f18e94393e8e744e1bf58bb6c619b5d56c9919650314cc78b93d45a"]}},"_unicodeToArray.js":{"size":1588,"offset":"15501559","integrity":{"algorithm":"SHA256","hash":"79eaf1570bb18732be65875ef7fd233b8aac09402d1b905b75bfeed06478a843","blockSize":4194304,"blocks":["79eaf1570bb18732be65875ef7fd233b8aac09402d1b905b75bfeed06478a843"]}},"_unicodeWords.js":{"size":3060,"offset":"15503147","integrity":{"algorithm":"SHA256","hash":"22d133a81bafe13cc6260cdc7a4f16085c1fb5353d8e334a5e66b6321909bb42","blockSize":4194304,"blocks":["22d133a81bafe13cc6260cdc7a4f16085c1fb5353d8e334a5e66b6321909bb42"]}},"_updateWrapDetails.js":{"size":1310,"offset":"15506207","integrity":{"algorithm":"SHA256","hash":"bdbd4703c6576d9891ad2f03f4ed93a79f48a2b95951376f565485a6fa0a1ec4","blockSize":4194304,"blocks":["bdbd4703c6576d9891ad2f03f4ed93a79f48a2b95951376f565485a6fa0a1ec4"]}},"_WeakMap.js":{"size":207,"offset":"15507517","integrity":{"algorithm":"SHA256","hash":"8ae352037d0bb071ff875d2936c43ae70b586ca53af14de98eed592ab084b63b","blockSize":4194304,"blocks":["8ae352037d0bb071ff875d2936c43ae70b586ca53af14de98eed592ab084b63b"]}},"_wrapperClone.js":{"size":658,"offset":"15507724","integrity":{"algorithm":"SHA256","hash":"222b8e99ac3dda61e98e8d31994e45a4603720b6c1e6b453c2c14ec096bd81ba","blockSize":4194304,"blocks":["222b8e99ac3dda61e98e8d31994e45a4603720b6c1e6b453c2c14ec096bd81ba"]}},"add.js":{"size":469,"offset":"15508382","integrity":{"algorithm":"SHA256","hash":"62192fb471bfa09a28cad119585b74a8dba2d6bbebb6ce2ca65c535a608e318a","blockSize":4194304,"blocks":["62192fb471bfa09a28cad119585b74a8dba2d6bbebb6ce2ca65c535a608e318a"]}},"after.js":{"size":1060,"offset":"15508851","integrity":{"algorithm":"SHA256","hash":"ca045b1ae9e085d50cb03af9568f0523470138cef8b83246182f3fb81fa9f095","blockSize":4194304,"blocks":["ca045b1ae9e085d50cb03af9568f0523470138cef8b83246182f3fb81fa9f095"]}},"array.js":{"size":2490,"offset":"15509911","integrity":{"algorithm":"SHA256","hash":"a0e766e2abd0bb23e983dde91294c2e8e1f3943f17cb64ac1547c35d8a028a98","blockSize":4194304,"blocks":["a0e766e2abd0bb23e983dde91294c2e8e1f3943f17cb64ac1547c35d8a028a98"]}},"ary.js":{"size":857,"offset":"15512401","integrity":{"algorithm":"SHA256","hash":"486703ebdd06044d5aa5e845607a49f529db9aa916b2f64b23fb7ab19e9cb3c2","blockSize":4194304,"blocks":["486703ebdd06044d5aa5e845607a49f529db9aa916b2f64b23fb7ab19e9cb3c2"]}},"assign.js":{"size":1566,"offset":"15513258","integrity":{"algorithm":"SHA256","hash":"e97ed43f77aac5c8faa3689ab3620360ba3c51e422f419bf04093385caedef2d","blockSize":4194304,"blocks":["e97ed43f77aac5c8faa3689ab3620360ba3c51e422f419bf04093385caedef2d"]}},"assignIn.js":{"size":906,"offset":"15514824","integrity":{"algorithm":"SHA256","hash":"d7e63836248cb9894fb3730304a24c22f5f88f9242fc8f2ebf3b3d067bc07aff","blockSize":4194304,"blocks":["d7e63836248cb9894fb3730304a24c22f5f88f9242fc8f2ebf3b3d067bc07aff"]}},"assignInWith.js":{"size":1256,"offset":"15515730","integrity":{"algorithm":"SHA256","hash":"c25cad1ab42a7d95a90abd2379afe558d8e0b301c1d4e0c38df2ab2624cd7eb9","blockSize":4194304,"blocks":["c25cad1ab42a7d95a90abd2379afe558d8e0b301c1d4e0c38df2ab2624cd7eb9"]}},"assignWith.js":{"size":1223,"offset":"15516986","integrity":{"algorithm":"SHA256","hash":"d50ddf93b7ab950fe08af9e2fc297f6e459d1b007580edbb62ed77b8604bfd7c","blockSize":4194304,"blocks":["d50ddf93b7ab950fe08af9e2fc297f6e459d1b007580edbb62ed77b8604bfd7c"]}},"at.js":{"size":559,"offset":"15518209","integrity":{"algorithm":"SHA256","hash":"4cbc888f95de895af4c7ded54753637ae8217068f1fb9465225fed759dd15c20","blockSize":4194304,"blocks":["4cbc888f95de895af4c7ded54753637ae8217068f1fb9465225fed759dd15c20"]}},"attempt.js":{"size":931,"offset":"15518768","integrity":{"algorithm":"SHA256","hash":"0931ef61bd9f9ddae6a46067732ee747fe694c5f690c5dc5189588cdef251197","blockSize":4194304,"blocks":["0931ef61bd9f9ddae6a46067732ee747fe694c5f690c5dc5189588cdef251197"]}},"before.js":{"size":1090,"offset":"15519699","integrity":{"algorithm":"SHA256","hash":"0cc79ed65583090e486d4840ba33088f80db5f81ffd00a55956cae909facda1e","blockSize":4194304,"blocks":["0cc79ed65583090e486d4840ba33088f80db5f81ffd00a55956cae909facda1e"]}},"bind.js":{"size":1694,"offset":"15520789","integrity":{"algorithm":"SHA256","hash":"c0a9d31fa28c7b583a52e4d6d77cd012cbc400cf811b156fbae8b390efc5532b","blockSize":4194304,"blocks":["c0a9d31fa28c7b583a52e4d6d77cd012cbc400cf811b156fbae8b390efc5532b"]}},"bindAll.js":{"size":1125,"offset":"15522483","integrity":{"algorithm":"SHA256","hash":"bd995daba5ea5981970c265e76e2beba26e27008fab1dbd13692e6e234edbe84","blockSize":4194304,"blocks":["bd995daba5ea5981970c265e76e2beba26e27008fab1dbd13692e6e234edbe84"]}},"bindKey.js":{"size":2071,"offset":"15523608","integrity":{"algorithm":"SHA256","hash":"a4a911fab102c792b8352ba5d8b6663db806f27f58c29836cbfcfa5f53478121","blockSize":4194304,"blocks":["a4a911fab102c792b8352ba5d8b6663db806f27f58c29836cbfcfa5f53478121"]}},"camelCase.js":{"size":701,"offset":"15525679","integrity":{"algorithm":"SHA256","hash":"d30eeadd294319a31ba4cd361e4a902adfd978f5b079f70ff48dd9add39caf79","blockSize":4194304,"blocks":["d30eeadd294319a31ba4cd361e4a902adfd978f5b079f70ff48dd9add39caf79"]}},"capitalize.js":{"size":529,"offset":"15526380","integrity":{"algorithm":"SHA256","hash":"a732a2da22230884bbd70c9b35620721212f65b8d84afdbc2e5bb0a2af1881db","blockSize":4194304,"blocks":["a732a2da22230884bbd70c9b35620721212f65b8d84afdbc2e5bb0a2af1881db"]}},"castArray.js":{"size":768,"offset":"15526909","integrity":{"algorithm":"SHA256","hash":"30f012884b6f1056dbad98343de77f9c7cde538a7ac376da97ffdf771984217c","blockSize":4194304,"blocks":["30f012884b6f1056dbad98343de77f9c7cde538a7ac376da97ffdf771984217c"]}},"ceil.js":{"size":507,"offset":"15527677","integrity":{"algorithm":"SHA256","hash":"5104952e29650bd9fb199d402ed7da457da6c24f436bf039d7d2039da3edccd9","blockSize":4194304,"blocks":["5104952e29650bd9fb199d402ed7da457da6c24f436bf039d7d2039da3edccd9"]}},"chain.js":{"size":851,"offset":"15528184","integrity":{"algorithm":"SHA256","hash":"17124af887adcb2fd74f1493ba4b19d0fd71f61f1a4bd5218ddc0fd092470fdf","blockSize":4194304,"blocks":["17124af887adcb2fd74f1493ba4b19d0fd71f61f1a4bd5218ddc0fd092470fdf"]}},"chunk.js":{"size":1411,"offset":"15529035","integrity":{"algorithm":"SHA256","hash":"6ca2ee6761ed1ab6a0eb2cddffb78988e889b38f83db7c63b50c058219bd4eca","blockSize":4194304,"blocks":["6ca2ee6761ed1ab6a0eb2cddffb78988e889b38f83db7c63b50c058219bd4eca"]}},"clamp.js":{"size":890,"offset":"15530446","integrity":{"algorithm":"SHA256","hash":"9f0074b089c0de70fe3e80ccbb6ac8e108c51b0e7447ce5e820d8220443d1d18","blockSize":4194304,"blocks":["9f0074b089c0de70fe3e80ccbb6ac8e108c51b0e7447ce5e820d8220443d1d18"]}},"clone.js":{"size":1065,"offset":"15531336","integrity":{"algorithm":"SHA256","hash":"5ff3e92c3d5a5c820f81c8066d6ea8063504c004355f8169d6264bec7296df8e","blockSize":4194304,"blocks":["5ff3e92c3d5a5c820f81c8066d6ea8063504c004355f8169d6264bec7296df8e"]}},"cloneDeep.js":{"size":679,"offset":"15532401","integrity":{"algorithm":"SHA256","hash":"4fbad9cd21ccac1d56090dad772aeb6ee665d2e5bedfcfe23040b0ee2f56ebfc","blockSize":4194304,"blocks":["4fbad9cd21ccac1d56090dad772aeb6ee665d2e5bedfcfe23040b0ee2f56ebfc"]}},"cloneDeepWith.js":{"size":1046,"offset":"15533080","integrity":{"algorithm":"SHA256","hash":"5d6b64289ea9139b11d76f2e5f015afddbdb0ba5e2a56964190c757b1c41f32c","blockSize":4194304,"blocks":["5d6b64289ea9139b11d76f2e5f015afddbdb0ba5e2a56964190c757b1c41f32c"]}},"cloneWith.js":{"size":1194,"offset":"15534126","integrity":{"algorithm":"SHA256","hash":"0ec8d7c82c7883cec0004e150dd23ce5f523bb379ecaf051b65e1b89ddaf6da1","blockSize":4194304,"blocks":["0ec8d7c82c7883cec0004e150dd23ce5f523bb379ecaf051b65e1b89ddaf6da1"]}},"collection.js":{"size":1009,"offset":"15535320","integrity":{"algorithm":"SHA256","hash":"4b1fd79028384c35e82a9bb5c326f1ba7854f8a22e1b033b801d33952355657e","blockSize":4194304,"blocks":["4b1fd79028384c35e82a9bb5c326f1ba7854f8a22e1b033b801d33952355657e"]}},"commit.js":{"size":641,"offset":"15536329","integrity":{"algorithm":"SHA256","hash":"7bbd908d349da44cc676ad0cf93b016fd49a98604c92cd125b9d3a3e02bb1c62","blockSize":4194304,"blocks":["7bbd908d349da44cc676ad0cf93b016fd49a98604c92cd125b9d3a3e02bb1c62"]}},"compact.js":{"size":681,"offset":"15536970","integrity":{"algorithm":"SHA256","hash":"2258c9e49eadab63fdcf7d0348bd07b32e9743952f229c6b37861e1bca0cd50b","blockSize":4194304,"blocks":["2258c9e49eadab63fdcf7d0348bd07b32e9743952f229c6b37861e1bca0cd50b"]}},"concat.js":{"size":1007,"offset":"15537651","integrity":{"algorithm":"SHA256","hash":"31c891f3d0a25c99a75fff28305825a9bde7cad5b6631625c741ba29bd19bd5e","blockSize":4194304,"blocks":["31c891f3d0a25c99a75fff28305825a9bde7cad5b6631625c741ba29bd19bd5e"]}},"cond.js":{"size":1613,"offset":"15538658","integrity":{"algorithm":"SHA256","hash":"6381d31f1fe767a1eb4498b58149984dbdf54bc500bd41e5024184b8dc6fd428","blockSize":4194304,"blocks":["6381d31f1fe767a1eb4498b58149984dbdf54bc500bd41e5024184b8dc6fd428"]}},"conforms.js":{"size":978,"offset":"15540271","integrity":{"algorithm":"SHA256","hash":"a5fc9c90d12996d67bbe8ddb4b4fa0f063581790ba82c6c62169cc13f3f0324e","blockSize":4194304,"blocks":["a5fc9c90d12996d67bbe8ddb4b4fa0f063581790ba82c6c62169cc13f3f0324e"]}},"conformsTo.js":{"size":954,"offset":"15541249","integrity":{"algorithm":"SHA256","hash":"01d43bb81ddb6728c8d93a479d0a7f349ee8100b74ad39b85fa696a74420de07","blockSize":4194304,"blocks":["01d43bb81ddb6728c8d93a479d0a7f349ee8100b74ad39b85fa696a74420de07"]}},"constant.js":{"size":528,"offset":"15542203","integrity":{"algorithm":"SHA256","hash":"13f0f4ed40b5861f35c3647afe29e7d880556a46b7781992edd9739e77baeb00","blockSize":4194304,"blocks":["13f0f4ed40b5861f35c3647afe29e7d880556a46b7781992edd9739e77baeb00"]}},"core.js":{"size":115957,"offset":"15542731","integrity":{"algorithm":"SHA256","hash":"e7ace8c713f76cf458b9f90fb4735f52225cc8c69a0e7b319bd9b78764307add","blockSize":4194304,"blocks":["e7ace8c713f76cf458b9f90fb4735f52225cc8c69a0e7b319bd9b78764307add"]}},"core.min.js":{"size":12684,"offset":"15658688","integrity":{"algorithm":"SHA256","hash":"de1fac0ad3a03174f4e49969f48d2e499d19afcd076db19431d7b1cd707832fa","blockSize":4194304,"blocks":["de1fac0ad3a03174f4e49969f48d2e499d19afcd076db19431d7b1cd707832fa"]}},"countBy.js":{"size":1262,"offset":"15671372","integrity":{"algorithm":"SHA256","hash":"e576f93b0189b3a33121c043d1fe675f6c7cb20729cd2e7527a40e07559d3a18","blockSize":4194304,"blocks":["e576f93b0189b3a33121c043d1fe675f6c7cb20729cd2e7527a40e07559d3a18"]}},"create.js":{"size":1032,"offset":"15672634","integrity":{"algorithm":"SHA256","hash":"ede2714570c0d3f34bd177fb11dbc0667c5d2ca968d4380d3dcbf4c24a6f5bd6","blockSize":4194304,"blocks":["ede2714570c0d3f34bd177fb11dbc0667c5d2ca968d4380d3dcbf4c24a6f5bd6"]}},"curry.js":{"size":1644,"offset":"15673666","integrity":{"algorithm":"SHA256","hash":"c07cc80afbbecd5c33c68ee4d9614bc060994c1956cb5754c46c282ef7f37561","blockSize":4194304,"blocks":["c07cc80afbbecd5c33c68ee4d9614bc060994c1956cb5754c46c282ef7f37561"]}},"curryRight.js":{"size":1499,"offset":"15675310","integrity":{"algorithm":"SHA256","hash":"7d550bb9e63e95df9a3e337b3b0bd44438794d90ef8473d242fb81a5074f9c76","blockSize":4194304,"blocks":["7d550bb9e63e95df9a3e337b3b0bd44438794d90ef8473d242fb81a5074f9c76"]}},"date.js":{"size":48,"offset":"15676809","integrity":{"algorithm":"SHA256","hash":"a4aaaeea3665850d84aee769724601faaa8f187b86ed3862c19d1dbb436588d1","blockSize":4194304,"blocks":["a4aaaeea3665850d84aee769724601faaa8f187b86ed3862c19d1dbb436588d1"]}},"debounce.js":{"size":6100,"offset":"15676857","integrity":{"algorithm":"SHA256","hash":"65b7974b78d520ad5efa5035489336f92c3304d82f1c68ae8ddb4da9229500fc","blockSize":4194304,"blocks":["65b7974b78d520ad5efa5035489336f92c3304d82f1c68ae8ddb4da9229500fc"]}},"deburr.js":{"size":1617,"offset":"15682957","integrity":{"algorithm":"SHA256","hash":"9a9dc25a8c6e45a8c689c8e4b0610fcf616a934f9e15523050f269f4621c6e4f","blockSize":4194304,"blocks":["9a9dc25a8c6e45a8c689c8e4b0610fcf616a934f9e15523050f269f4621c6e4f"]}},"defaults.js":{"size":1754,"offset":"15684574","integrity":{"algorithm":"SHA256","hash":"8404d7524bdda84422c7d9c5df4570f2d98d9caf21bf5ea29b00acf54bc97e50","blockSize":4194304,"blocks":["8404d7524bdda84422c7d9c5df4570f2d98d9caf21bf5ea29b00acf54bc97e50"]}},"defaultsDeep.js":{"size":839,"offset":"15686328","integrity":{"algorithm":"SHA256","hash":"dbc0950a1c6287ccf43b60402b7660ae4ffb2ebf8fab006ce4fd7766ca0f939c","blockSize":4194304,"blocks":["dbc0950a1c6287ccf43b60402b7660ae4ffb2ebf8fab006ce4fd7766ca0f939c"]}},"defaultTo.js":{"size":608,"offset":"15687167","integrity":{"algorithm":"SHA256","hash":"61b8a0cacdd9f69b3583b1f48200ba4fd612df6a083ecb7a50c9ae2d80881e95","blockSize":4194304,"blocks":["61b8a0cacdd9f69b3583b1f48200ba4fd612df6a083ecb7a50c9ae2d80881e95"]}},"defer.js":{"size":693,"offset":"15687775","integrity":{"algorithm":"SHA256","hash":"f03bed34b82fad0f64a118d7af538f20614e984b7b4cd93df4ecf0ed81123cb3","blockSize":4194304,"blocks":["f03bed34b82fad0f64a118d7af538f20614e984b7b4cd93df4ecf0ed81123cb3"]}},"delay.js":{"size":795,"offset":"15688468","integrity":{"algorithm":"SHA256","hash":"be9eb42d2e072277012e62756da1ebbf2ba5f6ce6577e8a56784fcd37589632b","blockSize":4194304,"blocks":["be9eb42d2e072277012e62756da1ebbf2ba5f6ce6577e8a56784fcd37589632b"]}},"difference.js":{"size":1063,"offset":"15689263","integrity":{"algorithm":"SHA256","hash":"35f8f2e8d83e1af1a18fa6043dd64387246ebf8886c446afb9a9edf5cb8316e4","blockSize":4194304,"blocks":["35f8f2e8d83e1af1a18fa6043dd64387246ebf8886c446afb9a9edf5cb8316e4"]}},"differenceBy.js":{"size":1527,"offset":"15690326","integrity":{"algorithm":"SHA256","hash":"ea889f0c332826661e8dde262a02d1149f6b8d9471dd68f7aa951087c8189eb9","blockSize":4194304,"blocks":["ea889f0c332826661e8dde262a02d1149f6b8d9471dd68f7aa951087c8189eb9"]}},"differenceWith.js":{"size":1395,"offset":"15691853","integrity":{"algorithm":"SHA256","hash":"3963f2e27bad30274bf94a54a9a3b1d27122d5e92a2ef22a52b8b906b9ac975c","blockSize":4194304,"blocks":["3963f2e27bad30274bf94a54a9a3b1d27122d5e92a2ef22a52b8b906b9ac975c"]}},"divide.js":{"size":491,"offset":"15693248","integrity":{"algorithm":"SHA256","hash":"ce24730eba575f2afb7dca7b70b8c30827c3bd90901cb9c9352a4083794787ff","blockSize":4194304,"blocks":["ce24730eba575f2afb7dca7b70b8c30827c3bd90901cb9c9352a4083794787ff"]}},"drop.js":{"size":890,"offset":"15693739","integrity":{"algorithm":"SHA256","hash":"cab31a9c9774b18c693c7b3094ee71ecdd3a554d9af47e967310fc17bbbe664c","blockSize":4194304,"blocks":["cab31a9c9774b18c693c7b3094ee71ecdd3a554d9af47e967310fc17bbbe664c"]}},"dropRight.js":{"size":927,"offset":"15694629","integrity":{"algorithm":"SHA256","hash":"147b573a323bc6163676c364575cdbbd785f26670a2a153aa5216e03ec4a7da0","blockSize":4194304,"blocks":["147b573a323bc6163676c364575cdbbd785f26670a2a153aa5216e03ec4a7da0"]}},"dropRightWhile.js":{"size":1412,"offset":"15695556","integrity":{"algorithm":"SHA256","hash":"f5afc0452542566f343cbf655d26f5f428b3666914beaf4307a53059da1a0b50","blockSize":4194304,"blocks":["f5afc0452542566f343cbf655d26f5f428b3666914beaf4307a53059da1a0b50"]}},"dropWhile.js":{"size":1384,"offset":"15696968","integrity":{"algorithm":"SHA256","hash":"8477a1cb88c7f34dbd4cb6496cdc5853815a9232b71fc81b2c924a381e311cc0","blockSize":4194304,"blocks":["8477a1cb88c7f34dbd4cb6496cdc5853815a9232b71fc81b2c924a381e311cc0"]}},"each.js":{"size":39,"offset":"15698352","integrity":{"algorithm":"SHA256","hash":"4d10bb01d04d58517504ecce768fce382a54fd93f5b04e6f649448af7978ee42","blockSize":4194304,"blocks":["4d10bb01d04d58517504ecce768fce382a54fd93f5b04e6f649448af7978ee42"]}},"eachRight.js":{"size":44,"offset":"15698391","integrity":{"algorithm":"SHA256","hash":"b231b46d2a636cd4e876773316d1bf20fb252ecbffb9a5032c22cbdb2dad822d","blockSize":4194304,"blocks":["b231b46d2a636cd4e876773316d1bf20fb252ecbffb9a5032c22cbdb2dad822d"]}},"endsWith.js":{"size":1098,"offset":"15698435","integrity":{"algorithm":"SHA256","hash":"e7b9b316913e7080015e81258958856f6e7b72ed83b50169ecadfff203ca6f94","blockSize":4194304,"blocks":["e7b9b316913e7080015e81258958856f6e7b72ed83b50169ecadfff203ca6f94"]}},"entries.js":{"size":39,"offset":"15699533","integrity":{"algorithm":"SHA256","hash":"613eb0b14a3fdf90ad901dc8860aa7f77d752efc8d887a8df246be91501945da","blockSize":4194304,"blocks":["613eb0b14a3fdf90ad901dc8860aa7f77d752efc8d887a8df246be91501945da"]}},"entriesIn.js":{"size":41,"offset":"15699572","integrity":{"algorithm":"SHA256","hash":"963f4202340184bf129c8111fd1958b1ce3a535a760aaff2929347d2774a7ccf","blockSize":4194304,"blocks":["963f4202340184bf129c8111fd1958b1ce3a535a760aaff2929347d2774a7ccf"]}},"eq.js":{"size":799,"offset":"15699613","integrity":{"algorithm":"SHA256","hash":"05eddf24818a442d922f08fde9d9a9ac1edcc2e613ddfd0dc1aea5f99d40e3b8","blockSize":4194304,"blocks":["05eddf24818a442d922f08fde9d9a9ac1edcc2e613ddfd0dc1aea5f99d40e3b8"]}},"escape.js":{"size":1444,"offset":"15700412","integrity":{"algorithm":"SHA256","hash":"aee6c381b9303b6ec91e5303feecc62a6a190919996e3838832681916dacbe99","blockSize":4194304,"blocks":["aee6c381b9303b6ec91e5303feecc62a6a190919996e3838832681916dacbe99"]}},"escapeRegExp.js":{"size":871,"offset":"15701856","integrity":{"algorithm":"SHA256","hash":"b4fbd68d3aeb8081412cdaa28e6ae218b5d014db61fdf12199942d953c578d4f","blockSize":4194304,"blocks":["b4fbd68d3aeb8081412cdaa28e6ae218b5d014db61fdf12199942d953c578d4f"]}},"every.js":{"size":1869,"offset":"15702727","integrity":{"algorithm":"SHA256","hash":"e5b00d5a2d1ac2b2616f38ce1e7a0d3adda3fc74d24194468443816abd9fcaef","blockSize":4194304,"blocks":["e5b00d5a2d1ac2b2616f38ce1e7a0d3adda3fc74d24194468443816abd9fcaef"]}},"extend.js":{"size":40,"offset":"15704596","integrity":{"algorithm":"SHA256","hash":"32a68951279d8b57c741ab487b5eef543394c802e30f95b0f68d44e366db8aef","blockSize":4194304,"blocks":["32a68951279d8b57c741ab487b5eef543394c802e30f95b0f68d44e366db8aef"]}},"extendWith.js":{"size":44,"offset":"15704636","integrity":{"algorithm":"SHA256","hash":"1b2704465ff3abb01d67ae8a2315c3bbaf0c386863886c03343c219bb02cc5a8","blockSize":4194304,"blocks":["1b2704465ff3abb01d67ae8a2315c3bbaf0c386863886c03343c219bb02cc5a8"]}},"fill.js":{"size":1081,"offset":"15704680","integrity":{"algorithm":"SHA256","hash":"0066052b2f2b92b1e99825750740cab607ff55ea2d70c5a2541b26d414d92623","blockSize":4194304,"blocks":["0066052b2f2b92b1e99825750740cab607ff55ea2d70c5a2541b26d414d92623"]}},"filter.js":{"size":1683,"offset":"15705761","integrity":{"algorithm":"SHA256","hash":"de07d8b962757208ca41d71e64c90200851cede9c134c70a30323fe077466d2f","blockSize":4194304,"blocks":["de07d8b962757208ca41d71e64c90200851cede9c134c70a30323fe077466d2f"]}},"find.js":{"size":1304,"offset":"15707444","integrity":{"algorithm":"SHA256","hash":"4a81b134f9f15d7e16f86ed4759917b9acb49b192436e7d85c1b716ab65734ed","blockSize":4194304,"blocks":["4a81b134f9f15d7e16f86ed4759917b9acb49b192436e7d85c1b716ab65734ed"]}},"findIndex.js":{"size":1654,"offset":"15708748","integrity":{"algorithm":"SHA256","hash":"561b38700412783a579bdcdfab83708ab863708d2f900c38f5e92bb2855a418a","blockSize":4194304,"blocks":["561b38700412783a579bdcdfab83708ab863708d2f900c38f5e92bb2855a418a"]}},"findKey.js":{"size":1329,"offset":"15710402","integrity":{"algorithm":"SHA256","hash":"d81a2beaedb98e5761d23a6c64227f459050ef6ce1cf33290bd1776bf23036f3","blockSize":4194304,"blocks":["d81a2beaedb98e5761d23a6c64227f459050ef6ce1cf33290bd1776bf23036f3"]}},"findLast.js":{"size":730,"offset":"15711731","integrity":{"algorithm":"SHA256","hash":"3b3c99679e09b1320b35a0992aa12092cf028b2d4939c4a198002b71da38945f","blockSize":4194304,"blocks":["3b3c99679e09b1320b35a0992aa12092cf028b2d4939c4a198002b71da38945f"]}},"findLastIndex.js":{"size":1761,"offset":"15712461","integrity":{"algorithm":"SHA256","hash":"894101f1606411eeaa9be481ffda69c14ea8bff68811efd62db2dacd96dc31fb","blockSize":4194304,"blocks":["894101f1606411eeaa9be481ffda69c14ea8bff68811efd62db2dacd96dc31fb"]}},"findLastKey.js":{"size":1346,"offset":"15714222","integrity":{"algorithm":"SHA256","hash":"890b86acc3c01b67fe798f7fdde8f63f51530db598ba264d6347040843d610ad","blockSize":4194304,"blocks":["890b86acc3c01b67fe798f7fdde8f63f51530db598ba264d6347040843d610ad"]}},"first.js":{"size":36,"offset":"15715568","integrity":{"algorithm":"SHA256","hash":"96a23a435507782b9ee4cbc1d3312f9f2617a40e9bd1b7af838185f40feef657","blockSize":4194304,"blocks":["96a23a435507782b9ee4cbc1d3312f9f2617a40e9bd1b7af838185f40feef657"]}},"flake.lock":{"size":963,"offset":"15715604","integrity":{"algorithm":"SHA256","hash":"fbc1669c041ff39c13aa7322b7fabaa35ff1a5c1521314d6bd546d634989d483","blockSize":4194304,"blocks":["fbc1669c041ff39c13aa7322b7fabaa35ff1a5c1521314d6bd546d634989d483"]}},"flake.nix":{"size":459,"offset":"15716567","integrity":{"algorithm":"SHA256","hash":"10b63ef23424514d38304248e133436889e3aec1595779c368b47c02a3c93005","blockSize":4194304,"blocks":["10b63ef23424514d38304248e133436889e3aec1595779c368b47c02a3c93005"]}},"flatMap.js":{"size":812,"offset":"15717026","integrity":{"algorithm":"SHA256","hash":"e3f1e3f60e4b7747042248c97275a6393407f809644649e12375bfb63d8f88c7","blockSize":4194304,"blocks":["e3f1e3f60e4b7747042248c97275a6393407f809644649e12375bfb63d8f88c7"]}},"flatMapDeep.js":{"size":796,"offset":"15717838","integrity":{"algorithm":"SHA256","hash":"f06dc199275a0ee546009b9f846ef9911acb24f412eb926bbd30e21dae0525bc","blockSize":4194304,"blocks":["f06dc199275a0ee546009b9f846ef9911acb24f412eb926bbd30e21dae0525bc"]}},"flatMapDepth.js":{"size":901,"offset":"15718634","integrity":{"algorithm":"SHA256","hash":"67baec1baad99f492f68c85f0223f329dd8ca9575799003c1b319859aa985452","blockSize":4194304,"blocks":["67baec1baad99f492f68c85f0223f329dd8ca9575799003c1b319859aa985452"]}},"flatten.js":{"size":489,"offset":"15719535","integrity":{"algorithm":"SHA256","hash":"e3f17c26f6b972607555f4b3a2f0c292b409a0bd0362079de3b9cb5ba6a83500","blockSize":4194304,"blocks":["e3f17c26f6b972607555f4b3a2f0c292b409a0bd0362079de3b9cb5ba6a83500"]}},"flattenDeep.js":{"size":577,"offset":"15720024","integrity":{"algorithm":"SHA256","hash":"c245f405061e1150f378ff297530e932970ba853dfc1bb230a5f8af919ffb036","blockSize":4194304,"blocks":["c245f405061e1150f378ff297530e932970ba853dfc1bb230a5f8af919ffb036"]}},"flattenDepth.js":{"size":787,"offset":"15720601","integrity":{"algorithm":"SHA256","hash":"bcd693ccb65618e40330553c678cbfa6adca25b1a7825f31cf6ba029dcaf450e","blockSize":4194304,"blocks":["bcd693ccb65618e40330553c678cbfa6adca25b1a7825f31cf6ba029dcaf450e"]}},"flip.js":{"size":636,"offset":"15721388","integrity":{"algorithm":"SHA256","hash":"f41bd8994ca7be04b9fa0e70b96e5edeccb5a6fbd26741fded5f614feb6bae87","blockSize":4194304,"blocks":["f41bd8994ca7be04b9fa0e70b96e5edeccb5a6fbd26741fded5f614feb6bae87"]}},"floor.js":{"size":521,"offset":"15722024","integrity":{"algorithm":"SHA256","hash":"f9ed8f38f70561e986ba3fde9d63f4623794978f09346db46868625c17e30626","blockSize":4194304,"blocks":["f9ed8f38f70561e986ba3fde9d63f4623794978f09346db46868625c17e30626"]}},"flow.js":{"size":666,"offset":"15722545","integrity":{"algorithm":"SHA256","hash":"4071cbfa443d584991451c35d303ae7fde4dc1a782050fbd9d89899d7ceab539","blockSize":4194304,"blocks":["4071cbfa443d584991451c35d303ae7fde4dc1a782050fbd9d89899d7ceab539"]}},"flowRight.js":{"size":590,"offset":"15723211","integrity":{"algorithm":"SHA256","hash":"0e5047539f63271816f1604f61dd3424daa16ba357576515edea3e8a52eafdff","blockSize":4194304,"blocks":["0e5047539f63271816f1604f61dd3424daa16ba357576515edea3e8a52eafdff"]}},"forEach.js":{"size":1355,"offset":"15723801","integrity":{"algorithm":"SHA256","hash":"8c804ff21ceb97f4c02e64c62337e916dbd651c2da581ab117653f963b2cf635","blockSize":4194304,"blocks":["8c804ff21ceb97f4c02e64c62337e916dbd651c2da581ab117653f963b2cf635"]}},"forEachRight.js":{"size":924,"offset":"15725156","integrity":{"algorithm":"SHA256","hash":"96fe1c6e4e2191a491e29f9a65276eed9fc28add0679623d9b81c7b0d4acb423","blockSize":4194304,"blocks":["96fe1c6e4e2191a491e29f9a65276eed9fc28add0679623d9b81c7b0d4acb423"]}},"forIn.js":{"size":1065,"offset":"15726080","integrity":{"algorithm":"SHA256","hash":"cd364a5f3a84e01efe8b11358416d2709118aeb9bfde01f7e8672fbae13a6abf","blockSize":4194304,"blocks":["cd364a5f3a84e01efe8b11358416d2709118aeb9bfde01f7e8672fbae13a6abf"]}},"forInRight.js":{"size":929,"offset":"15727145","integrity":{"algorithm":"SHA256","hash":"3b2d6539f99fa23f957cd16eaed54b2f46202e45872c9d26c41bc0a30c612449","blockSize":4194304,"blocks":["3b2d6539f99fa23f957cd16eaed54b2f46202e45872c9d26c41bc0a30c612449"]}},"forOwn.js":{"size":992,"offset":"15728074","integrity":{"algorithm":"SHA256","hash":"3e1c6cdf140b67a797a7357036c0fe0ee7d265def7c4997fb7db2e0b779bb17a","blockSize":4194304,"blocks":["3e1c6cdf140b67a797a7357036c0fe0ee7d265def7c4997fb7db2e0b779bb17a"]}},"forOwnRight.js":{"size":866,"offset":"15729066","integrity":{"algorithm":"SHA256","hash":"3525a6fb0dc96ff7d8cac1f15bf86277729fb9b92e44ee5e3651753d58fa3765","blockSize":4194304,"blocks":["3525a6fb0dc96ff7d8cac1f15bf86277729fb9b92e44ee5e3651753d58fa3765"]}},"fp":{"files":{"__.js":{"size":43,"offset":"15730033","integrity":{"algorithm":"SHA256","hash":"94a509ebbf362c7344212c3eb78b97d61c87d53099c9ee1285838c20082185e8","blockSize":4194304,"blocks":["94a509ebbf362c7344212c3eb78b97d61c87d53099c9ee1285838c20082185e8"]}},"_baseConvert.js":{"size":16414,"offset":"15730076","integrity":{"algorithm":"SHA256","hash":"a46928425b69427e597931716103a793c156a7eef2c9e510b72cdd657978f270","blockSize":4194304,"blocks":["a46928425b69427e597931716103a793c156a7eef2c9e510b72cdd657978f270"]}},"_convertBrowser.js":{"size":615,"offset":"15746490","integrity":{"algorithm":"SHA256","hash":"95ca01b0535de617fc0ba0f5b5b6a804e2c21fd762ff93d73cf2753101f83caf","blockSize":4194304,"blocks":["95ca01b0535de617fc0ba0f5b5b6a804e2c21fd762ff93d73cf2753101f83caf"]}},"_falseOptions.js":{"size":113,"offset":"15747105","integrity":{"algorithm":"SHA256","hash":"f2415d2f5c437694bc55d31132cb866abc0b5aae349e0673dfd6924ff281d9a7","blockSize":4194304,"blocks":["f2415d2f5c437694bc55d31132cb866abc0b5aae349e0673dfd6924ff281d9a7"]}},"_mapping.js":{"size":9955,"offset":"15747218","integrity":{"algorithm":"SHA256","hash":"474a0de8f3624a02218a6092e07f51e8315514d73d40dfa3c8f6820419460aed","blockSize":4194304,"blocks":["474a0de8f3624a02218a6092e07f51e8315514d73d40dfa3c8f6820419460aed"]}},"_util.js":{"size":524,"offset":"15757173","integrity":{"algorithm":"SHA256","hash":"01f3918232f19d495715e676df3e6aa0e9d85e966de3f28fc78f3f52e69d99c7","blockSize":4194304,"blocks":["01f3918232f19d495715e676df3e6aa0e9d85e966de3f28fc78f3f52e69d99c7"]}},"add.js":{"size":151,"offset":"15757697","integrity":{"algorithm":"SHA256","hash":"3c8763bbf119306791d3c708a37cb246bd4c7ccfc1170bf2fbcacd54f0cb7c5e","blockSize":4194304,"blocks":["3c8763bbf119306791d3c708a37cb246bd4c7ccfc1170bf2fbcacd54f0cb7c5e"]}},"after.js":{"size":155,"offset":"15757848","integrity":{"algorithm":"SHA256","hash":"5945862af679efbdd90af501d700e42a938ad87d3c30ff70f69c7312aefd7f4d","blockSize":4194304,"blocks":["5945862af679efbdd90af501d700e42a938ad87d3c30ff70f69c7312aefd7f4d"]}},"all.js":{"size":37,"offset":"15758003","integrity":{"algorithm":"SHA256","hash":"7070c50b50b2d18208c13553a57f3a4f1110daf8c75ed0f574a8521d8403dc35","blockSize":4194304,"blocks":["7070c50b50b2d18208c13553a57f3a4f1110daf8c75ed0f574a8521d8403dc35"]}},"allPass.js":{"size":41,"offset":"15758040","integrity":{"algorithm":"SHA256","hash":"e9c7408f1a61f16effa30e053eec3d716c3a4f96f8a76d4652f8c0f339fd2e47","blockSize":4194304,"blocks":["e9c7408f1a61f16effa30e053eec3d716c3a4f96f8a76d4652f8c0f339fd2e47"]}},"always.js":{"size":40,"offset":"15758081","integrity":{"algorithm":"SHA256","hash":"1049a38323bf3acb6690deeb6b33370f29e1eade6cec6af43115266105ffb9b8","blockSize":4194304,"blocks":["1049a38323bf3acb6690deeb6b33370f29e1eade6cec6af43115266105ffb9b8"]}},"any.js":{"size":36,"offset":"15758121","integrity":{"algorithm":"SHA256","hash":"c405ffe3fe586265285960be258de77459bc9821b28d337ea72d1cc08042f01e","blockSize":4194304,"blocks":["c405ffe3fe586265285960be258de77459bc9821b28d337ea72d1cc08042f01e"]}},"anyPass.js":{"size":40,"offset":"15758157","integrity":{"algorithm":"SHA256","hash":"68a7c4d963e6b9cb5e0c6a8485343eb3cd2433c3bbd59d37bc5899c0968532cd","blockSize":4194304,"blocks":["68a7c4d963e6b9cb5e0c6a8485343eb3cd2433c3bbd59d37bc5899c0968532cd"]}},"apply.js":{"size":38,"offset":"15758197","integrity":{"algorithm":"SHA256","hash":"33d3614711caecd95281b1d7db378ce9c4397d6b746c382486c1c07ed8833d60","blockSize":4194304,"blocks":["33d3614711caecd95281b1d7db378ce9c4397d6b746c382486c1c07ed8833d60"]}},"array.js":{"size":83,"offset":"15758235","integrity":{"algorithm":"SHA256","hash":"99fac7be4b9ebb1c24038d41fc1a48f08e7bb048792063a0dbcdbd496bf6aa4b","blockSize":4194304,"blocks":["99fac7be4b9ebb1c24038d41fc1a48f08e7bb048792063a0dbcdbd496bf6aa4b"]}},"ary.js":{"size":151,"offset":"15758318","integrity":{"algorithm":"SHA256","hash":"a2576c7bd76dfd6ccf7068d5ff390da141930ffd1b9ded5a51ee09bac9e0ebd8","blockSize":4194304,"blocks":["a2576c7bd76dfd6ccf7068d5ff390da141930ffd1b9ded5a51ee09bac9e0ebd8"]}},"assign.js":{"size":157,"offset":"15758469","integrity":{"algorithm":"SHA256","hash":"f25379754527aabe4d72eb9272d437db669cc141d390019a1e928887c0b5d5e0","blockSize":4194304,"blocks":["f25379754527aabe4d72eb9272d437db669cc141d390019a1e928887c0b5d5e0"]}},"assignAll.js":{"size":160,"offset":"15758626","integrity":{"algorithm":"SHA256","hash":"c6ab29943f2f58f9e00014e6d097be50d8e501f198a744b9fd5ff19e782c6b71","blockSize":4194304,"blocks":["c6ab29943f2f58f9e00014e6d097be50d8e501f198a744b9fd5ff19e782c6b71"]}},"assignAllWith.js":{"size":168,"offset":"15758786","integrity":{"algorithm":"SHA256","hash":"303fd675b28fdc9845d077f710f5f44b05198f3ab85b0eb4249852bfe188e5e5","blockSize":4194304,"blocks":["303fd675b28fdc9845d077f710f5f44b05198f3ab85b0eb4249852bfe188e5e5"]}},"assignIn.js":{"size":161,"offset":"15758954","integrity":{"algorithm":"SHA256","hash":"ae37059583928bfda9d0902546453f0dc9e832297f5d598449c8c7358fa72125","blockSize":4194304,"blocks":["ae37059583928bfda9d0902546453f0dc9e832297f5d598449c8c7358fa72125"]}},"assignInAll.js":{"size":164,"offset":"15759115","integrity":{"algorithm":"SHA256","hash":"a6d67eae2daec3cac8225f51a4d247ab080c14c6bb7e56ee81dbb265c40c1030","blockSize":4194304,"blocks":["a6d67eae2daec3cac8225f51a4d247ab080c14c6bb7e56ee81dbb265c40c1030"]}},"assignInAllWith.js":{"size":172,"offset":"15759279","integrity":{"algorithm":"SHA256","hash":"906e71db3e57c7a658cc0568d82a8ca1fbdf0ea41229fc71a1295055932091f8","blockSize":4194304,"blocks":["906e71db3e57c7a658cc0568d82a8ca1fbdf0ea41229fc71a1295055932091f8"]}},"assignInWith.js":{"size":169,"offset":"15759451","integrity":{"algorithm":"SHA256","hash":"34dfcd3f73ca44c3a922da895873edbb772ea799b406548f5a847e3a26f618b6","blockSize":4194304,"blocks":["34dfcd3f73ca44c3a922da895873edbb772ea799b406548f5a847e3a26f618b6"]}},"assignWith.js":{"size":165,"offset":"15759620","integrity":{"algorithm":"SHA256","hash":"6279bdb94bcc7b3e86035bd9e4b03bf9ab1edc662d53a77ccc7c6bbb6bdc571c","blockSize":4194304,"blocks":["6279bdb94bcc7b3e86035bd9e4b03bf9ab1edc662d53a77ccc7c6bbb6bdc571c"]}},"assoc.js":{"size":35,"offset":"15759785","integrity":{"algorithm":"SHA256","hash":"b9b1a205d5bd933a2bc29506931ee397b48c87fa3368f98acad8b1f97595a91d","blockSize":4194304,"blocks":["b9b1a205d5bd933a2bc29506931ee397b48c87fa3368f98acad8b1f97595a91d"]}},"assocPath.js":{"size":35,"offset":"15759820","integrity":{"algorithm":"SHA256","hash":"b9b1a205d5bd933a2bc29506931ee397b48c87fa3368f98acad8b1f97595a91d","blockSize":4194304,"blocks":["b9b1a205d5bd933a2bc29506931ee397b48c87fa3368f98acad8b1f97595a91d"]}},"at.js":{"size":149,"offset":"15759855","integrity":{"algorithm":"SHA256","hash":"b1e28dccdcbb369bcd1d6ad21f8c653926cb0463641dedde8079933b7fd28a43","blockSize":4194304,"blocks":["b1e28dccdcbb369bcd1d6ad21f8c653926cb0463641dedde8079933b7fd28a43"]}},"attempt.js":{"size":159,"offset":"15760004","integrity":{"algorithm":"SHA256","hash":"d3c96bad5be8079fa56c5745c17f2a5644580d1fe5727c86a08e5d3092cb25fa","blockSize":4194304,"blocks":["d3c96bad5be8079fa56c5745c17f2a5644580d1fe5727c86a08e5d3092cb25fa"]}},"before.js":{"size":157,"offset":"15760163","integrity":{"algorithm":"SHA256","hash":"13bea9443a35be234951244c086b038be91fa742fddc6482143cf9d545b143a7","blockSize":4194304,"blocks":["13bea9443a35be234951244c086b038be91fa742fddc6482143cf9d545b143a7"]}},"bind.js":{"size":153,"offset":"15760320","integrity":{"algorithm":"SHA256","hash":"a2f8615ea2a044ca8bef0434c13a96fd39ae05a3204a39e1797eb06740a0dea4","blockSize":4194304,"blocks":["a2f8615ea2a044ca8bef0434c13a96fd39ae05a3204a39e1797eb06740a0dea4"]}},"bindAll.js":{"size":159,"offset":"15760473","integrity":{"algorithm":"SHA256","hash":"d74ed0198d4ad5bebe9f7d69cca50e80b703d39df6edb5b7a998abfea484ff69","blockSize":4194304,"blocks":["d74ed0198d4ad5bebe9f7d69cca50e80b703d39df6edb5b7a998abfea484ff69"]}},"bindKey.js":{"size":159,"offset":"15760632","integrity":{"algorithm":"SHA256","hash":"d0fd01b641a3067225eae8306959c60278b1bd9df8be9e67df684ae9464fedaa","blockSize":4194304,"blocks":["d0fd01b641a3067225eae8306959c60278b1bd9df8be9e67df684ae9464fedaa"]}},"camelCase.js":{"size":191,"offset":"15760791","integrity":{"algorithm":"SHA256","hash":"5df85c992ad127721c571314c433703e821ce3ada68da0c164b28162f9be12a3","blockSize":4194304,"blocks":["5df85c992ad127721c571314c433703e821ce3ada68da0c164b28162f9be12a3"]}},"capitalize.js":{"size":193,"offset":"15760982","integrity":{"algorithm":"SHA256","hash":"eafc4ccb8081802ec1e3f1776eab6241bb2098c540a023f8b6fef8a829314432","blockSize":4194304,"blocks":["eafc4ccb8081802ec1e3f1776eab6241bb2098c540a023f8b6fef8a829314432"]}},"castArray.js":{"size":163,"offset":"15761175","integrity":{"algorithm":"SHA256","hash":"08392d5c41ead50c1e43d1030cfddec55594ccf72448e8ed2417eed2a096b901","blockSize":4194304,"blocks":["08392d5c41ead50c1e43d1030cfddec55594ccf72448e8ed2417eed2a096b901"]}},"ceil.js":{"size":153,"offset":"15761338","integrity":{"algorithm":"SHA256","hash":"6a235932994629e072410d67abfbd8dcb65db92cbf7a94ba036c244af3b886cd","blockSize":4194304,"blocks":["6a235932994629e072410d67abfbd8dcb65db92cbf7a94ba036c244af3b886cd"]}},"chain.js":{"size":183,"offset":"15761491","integrity":{"algorithm":"SHA256","hash":"a8ae5e6678a28c2c4f3ab83bcef8c2c3f138cd09ab52c91b0f02182400d8ecb8","blockSize":4194304,"blocks":["a8ae5e6678a28c2c4f3ab83bcef8c2c3f138cd09ab52c91b0f02182400d8ecb8"]}},"chunk.js":{"size":155,"offset":"15761674","integrity":{"algorithm":"SHA256","hash":"da58bd57de733e7c82b5b94ceab91f9d0f64baee02c570e1d6c16e594dafb54d","blockSize":4194304,"blocks":["da58bd57de733e7c82b5b94ceab91f9d0f64baee02c570e1d6c16e594dafb54d"]}},"clamp.js":{"size":155,"offset":"15761829","integrity":{"algorithm":"SHA256","hash":"8a5e6e9acca2ba8970d9d9d84da835fee9bd671e2a699f707d2e24aaf5b42c2f","blockSize":4194304,"blocks":["8a5e6e9acca2ba8970d9d9d84da835fee9bd671e2a699f707d2e24aaf5b42c2f"]}},"clone.js":{"size":183,"offset":"15761984","integrity":{"algorithm":"SHA256","hash":"a60e4088e3715016783f1e96b909f5e3f57bfc226563d6fe2304dfa2144b0804","blockSize":4194304,"blocks":["a60e4088e3715016783f1e96b909f5e3f57bfc226563d6fe2304dfa2144b0804"]}},"cloneDeep.js":{"size":191,"offset":"15762167","integrity":{"algorithm":"SHA256","hash":"9a8aa3f9398214f470d0a34eda7c9b21d2170cc2af092420428ad8b0de3d81b1","blockSize":4194304,"blocks":["9a8aa3f9398214f470d0a34eda7c9b21d2170cc2af092420428ad8b0de3d81b1"]}},"cloneDeepWith.js":{"size":171,"offset":"15762358","integrity":{"algorithm":"SHA256","hash":"ad05d4631dd799e4ebda877b5f54c6d004105e0b4271d6bf4f78e0ac1501c782","blockSize":4194304,"blocks":["ad05d4631dd799e4ebda877b5f54c6d004105e0b4271d6bf4f78e0ac1501c782"]}},"cloneWith.js":{"size":163,"offset":"15762529","integrity":{"algorithm":"SHA256","hash":"0f4cba49e00d6cfee004da886194411b6b6ff690f53eff40fe99f7ab6314f561","blockSize":4194304,"blocks":["0f4cba49e00d6cfee004da886194411b6b6ff690f53eff40fe99f7ab6314f561"]}},"collection.js":{"size":88,"offset":"15762692","integrity":{"algorithm":"SHA256","hash":"de3dd2c7102210f1ebf861c0ecc5ed80856b366381e6dc2747b94610981f6c15","blockSize":4194304,"blocks":["de3dd2c7102210f1ebf861c0ecc5ed80856b366381e6dc2747b94610981f6c15"]}},"commit.js":{"size":185,"offset":"15762780","integrity":{"algorithm":"SHA256","hash":"b8f2c972edb423146bd1223e4c06d4052e1e7da6d4aa6d72aa8bb0d52e807a57","blockSize":4194304,"blocks":["b8f2c972edb423146bd1223e4c06d4052e1e7da6d4aa6d72aa8bb0d52e807a57"]}},"compact.js":{"size":187,"offset":"15762965","integrity":{"algorithm":"SHA256","hash":"b17e00bc5a112f5b8d159abcc36ef23023ee6441599e9596ba7ff02f4f3e28dd","blockSize":4194304,"blocks":["b17e00bc5a112f5b8d159abcc36ef23023ee6441599e9596ba7ff02f4f3e28dd"]}},"complement.js":{"size":38,"offset":"15763152","integrity":{"algorithm":"SHA256","hash":"36ae65e644cfe57c1ea79aa9249365326bdb55a98924fa041d78c5809c26f488","blockSize":4194304,"blocks":["36ae65e644cfe57c1ea79aa9249365326bdb55a98924fa041d78c5809c26f488"]}},"compose.js":{"size":41,"offset":"15763190","integrity":{"algorithm":"SHA256","hash":"beb7a22c367f2870171d29f3d6d012bcb1ee1c95cf70c241ffcc9a45fec7f650","blockSize":4194304,"blocks":["beb7a22c367f2870171d29f3d6d012bcb1ee1c95cf70c241ffcc9a45fec7f650"]}},"concat.js":{"size":157,"offset":"15763231","integrity":{"algorithm":"SHA256","hash":"028ea6983438214b6d30942e47ee29d75868872ad885b3b112f3e3f6f879eae1","blockSize":4194304,"blocks":["028ea6983438214b6d30942e47ee29d75868872ad885b3b112f3e3f6f879eae1"]}},"cond.js":{"size":181,"offset":"15763388","integrity":{"algorithm":"SHA256","hash":"79733550186c66688b70e3b15f2d9b903f9c80639dcad742f5a74ce407092793","blockSize":4194304,"blocks":["79733550186c66688b70e3b15f2d9b903f9c80639dcad742f5a74ce407092793"]}},"conforms.js":{"size":42,"offset":"15763569","integrity":{"algorithm":"SHA256","hash":"335495baefaf23607518544bc875a1ef48507d2c5e6bf0f0c1a225fd0e304f46","blockSize":4194304,"blocks":["335495baefaf23607518544bc875a1ef48507d2c5e6bf0f0c1a225fd0e304f46"]}},"conformsTo.js":{"size":165,"offset":"15763611","integrity":{"algorithm":"SHA256","hash":"74a5c01ca96e8906099cd3a914e1afe1a02d5af8d6ddfcee97e93c0720d4ece8","blockSize":4194304,"blocks":["74a5c01ca96e8906099cd3a914e1afe1a02d5af8d6ddfcee97e93c0720d4ece8"]}},"constant.js":{"size":189,"offset":"15763776","integrity":{"algorithm":"SHA256","hash":"3cea5392090c8d9f6120261f97f6de0cb2b57423f2e5b7dd8ca38784af7cad0e","blockSize":4194304,"blocks":["3cea5392090c8d9f6120261f97f6de0cb2b57423f2e5b7dd8ca38784af7cad0e"]}},"contains.js":{"size":40,"offset":"15763965","integrity":{"algorithm":"SHA256","hash":"bb4e283bb701c033f9590b927765fff80c93a4f549f57196c797e33f45cc8e65","blockSize":4194304,"blocks":["bb4e283bb701c033f9590b927765fff80c93a4f549f57196c797e33f45cc8e65"]}},"convert.js":{"size":657,"offset":"15764005","integrity":{"algorithm":"SHA256","hash":"b3d25cc61f10d0d9d27f26312d6d4cbd21f16e2446a5cdddcc4374a3313c8fbc","blockSize":4194304,"blocks":["b3d25cc61f10d0d9d27f26312d6d4cbd21f16e2446a5cdddcc4374a3313c8fbc"]}},"countBy.js":{"size":159,"offset":"15764662","integrity":{"algorithm":"SHA256","hash":"7a4658a5a7e702a4e24496ad419a327f29f886f66e48a1eb4b3fac17a84002fd","blockSize":4194304,"blocks":["7a4658a5a7e702a4e24496ad419a327f29f886f66e48a1eb4b3fac17a84002fd"]}},"create.js":{"size":157,"offset":"15764821","integrity":{"algorithm":"SHA256","hash":"cf3e62f02f95c0738afbe040cecb9fefe8e9861a077f79eb75096f9b8f6a2bd7","blockSize":4194304,"blocks":["cf3e62f02f95c0738afbe040cecb9fefe8e9861a077f79eb75096f9b8f6a2bd7"]}},"curry.js":{"size":155,"offset":"15764978","integrity":{"algorithm":"SHA256","hash":"ca770e5e7ddacbbb620fe4866afaa14c43c030c8e4d9fdbdcbe0f573a7b0e8a4","blockSize":4194304,"blocks":["ca770e5e7ddacbbb620fe4866afaa14c43c030c8e4d9fdbdcbe0f573a7b0e8a4"]}},"curryN.js":{"size":156,"offset":"15765133","integrity":{"algorithm":"SHA256","hash":"664920b694b26ad818f4bee1d9cf0af0113d3fd8c91265df851a223944db0eaa","blockSize":4194304,"blocks":["664920b694b26ad818f4bee1d9cf0af0113d3fd8c91265df851a223944db0eaa"]}},"curryRight.js":{"size":165,"offset":"15765289","integrity":{"algorithm":"SHA256","hash":"ce153c776611314c7cdca859cdc50e401f390ba0e131df77fa575197fc8b69fd","blockSize":4194304,"blocks":["ce153c776611314c7cdca859cdc50e401f390ba0e131df77fa575197fc8b69fd"]}},"curryRightN.js":{"size":166,"offset":"15765454","integrity":{"algorithm":"SHA256","hash":"044d68b3a1ace478c8b51796b4333e67368b6f0614ed1b540b84ba6c24800435","blockSize":4194304,"blocks":["044d68b3a1ace478c8b51796b4333e67368b6f0614ed1b540b84ba6c24800435"]}},"date.js":{"size":82,"offset":"15765620","integrity":{"algorithm":"SHA256","hash":"81b69c9d67ea9c603ae4dc33336b50db3828afedd478d4e3bdbc4489418ac838","blockSize":4194304,"blocks":["81b69c9d67ea9c603ae4dc33336b50db3828afedd478d4e3bdbc4489418ac838"]}},"debounce.js":{"size":161,"offset":"15765702","integrity":{"algorithm":"SHA256","hash":"bf63158fb60eda49efbf82dc61cda018b292caeac9345cfeb9a5551cc42feb01","blockSize":4194304,"blocks":["bf63158fb60eda49efbf82dc61cda018b292caeac9345cfeb9a5551cc42feb01"]}},"deburr.js":{"size":185,"offset":"15765863","integrity":{"algorithm":"SHA256","hash":"76c495bdd9fa0050492f13c07acdba0949ac98225cbf5f66e4f7f2d21e4a2135","blockSize":4194304,"blocks":["76c495bdd9fa0050492f13c07acdba0949ac98225cbf5f66e4f7f2d21e4a2135"]}},"defaults.js":{"size":161,"offset":"15766048","integrity":{"algorithm":"SHA256","hash":"eaf38c43268c18e70e72d8add1b88d777eca6602dca45aa9385919f37a076882","blockSize":4194304,"blocks":["eaf38c43268c18e70e72d8add1b88d777eca6602dca45aa9385919f37a076882"]}},"defaultsAll.js":{"size":164,"offset":"15766209","integrity":{"algorithm":"SHA256","hash":"770444d5d05b34449b7c6b369b225c4f1602ca9ab8f3ae7a9630a306c0c12663","blockSize":4194304,"blocks":["770444d5d05b34449b7c6b369b225c4f1602ca9ab8f3ae7a9630a306c0c12663"]}},"defaultsDeep.js":{"size":169,"offset":"15766373","integrity":{"algorithm":"SHA256","hash":"88689cb3cce8b6f17acabd6996a44c7e06fd4eef8e28b3ab84c9e2d752924c7f","blockSize":4194304,"blocks":["88689cb3cce8b6f17acabd6996a44c7e06fd4eef8e28b3ab84c9e2d752924c7f"]}},"defaultsDeepAll.js":{"size":172,"offset":"15766542","integrity":{"algorithm":"SHA256","hash":"372abc16eacec39a632a174b82dfae24b06d524cee30fad6a1040ce8e17ee4c1","blockSize":4194304,"blocks":["372abc16eacec39a632a174b82dfae24b06d524cee30fad6a1040ce8e17ee4c1"]}},"defaultTo.js":{"size":163,"offset":"15766714","integrity":{"algorithm":"SHA256","hash":"08e6643048098f7dd36d9ba55b42ebc988a9d5947aea800c8985b6a5218ea74a","blockSize":4194304,"blocks":["08e6643048098f7dd36d9ba55b42ebc988a9d5947aea800c8985b6a5218ea74a"]}},"defer.js":{"size":183,"offset":"15766877","integrity":{"algorithm":"SHA256","hash":"4e3168061b8d828e3f3d7ab57aa95e27921842e100a03c765d3e7efd214cdd31","blockSize":4194304,"blocks":["4e3168061b8d828e3f3d7ab57aa95e27921842e100a03c765d3e7efd214cdd31"]}},"delay.js":{"size":155,"offset":"15767060","integrity":{"algorithm":"SHA256","hash":"49e90452caab8b79c153f909f744f00476f288516a1b5930337617f95db24fd5","blockSize":4194304,"blocks":["49e90452caab8b79c153f909f744f00476f288516a1b5930337617f95db24fd5"]}},"difference.js":{"size":165,"offset":"15767215","integrity":{"algorithm":"SHA256","hash":"7f30fec45697a7061992e561f72b84615e7f9e392973252a8e5261863ca2788b","blockSize":4194304,"blocks":["7f30fec45697a7061992e561f72b84615e7f9e392973252a8e5261863ca2788b"]}},"differenceBy.js":{"size":169,"offset":"15767380","integrity":{"algorithm":"SHA256","hash":"eccf3d651be78bf3ae2172802d193c5bc1e28a52133c3494e7ee904c24f5059c","blockSize":4194304,"blocks":["eccf3d651be78bf3ae2172802d193c5bc1e28a52133c3494e7ee904c24f5059c"]}},"differenceWith.js":{"size":173,"offset":"15767549","integrity":{"algorithm":"SHA256","hash":"92e0654e0e7257a40642809e12923092077dd746bad27dd3d790313ba052f8a5","blockSize":4194304,"blocks":["92e0654e0e7257a40642809e12923092077dd746bad27dd3d790313ba052f8a5"]}},"dissoc.js":{"size":37,"offset":"15767722","integrity":{"algorithm":"SHA256","hash":"bf6c3eee53c310992b79f75bade2a125748ca76f7bc1dbe9d642be277fb81e2e","blockSize":4194304,"blocks":["bf6c3eee53c310992b79f75bade2a125748ca76f7bc1dbe9d642be277fb81e2e"]}},"dissocPath.js":{"size":37,"offset":"15767759","integrity":{"algorithm":"SHA256","hash":"bf6c3eee53c310992b79f75bade2a125748ca76f7bc1dbe9d642be277fb81e2e","blockSize":4194304,"blocks":["bf6c3eee53c310992b79f75bade2a125748ca76f7bc1dbe9d642be277fb81e2e"]}},"divide.js":{"size":157,"offset":"15767796","integrity":{"algorithm":"SHA256","hash":"5fa3fecf96ef96145ee0c5fe1d52e601de4b6255b1e122ca545ed4747297f698","blockSize":4194304,"blocks":["5fa3fecf96ef96145ee0c5fe1d52e601de4b6255b1e122ca545ed4747297f698"]}},"drop.js":{"size":153,"offset":"15767953","integrity":{"algorithm":"SHA256","hash":"6d1cd4b4cdb19f922615ed2b93bfae015a1e28cf3f6c2ef8a0c1ca6a7c789c1a","blockSize":4194304,"blocks":["6d1cd4b4cdb19f922615ed2b93bfae015a1e28cf3f6c2ef8a0c1ca6a7c789c1a"]}},"dropLast.js":{"size":41,"offset":"15768106","integrity":{"algorithm":"SHA256","hash":"ddbc9ff9032a3f2d4dc7acdad90556192faed016c8c7643e681dae25b214f1ac","blockSize":4194304,"blocks":["ddbc9ff9032a3f2d4dc7acdad90556192faed016c8c7643e681dae25b214f1ac"]}},"dropLastWhile.js":{"size":46,"offset":"15768147","integrity":{"algorithm":"SHA256","hash":"f14137831acb9ab26f55795a3ef0f597e6da6c17f8f65e09efbc7341a5d3b8ab","blockSize":4194304,"blocks":["f14137831acb9ab26f55795a3ef0f597e6da6c17f8f65e09efbc7341a5d3b8ab"]}},"dropRight.js":{"size":163,"offset":"15768193","integrity":{"algorithm":"SHA256","hash":"aae1becd1f4910b2a351c67cd85a3d4c4ba0c04e9edd110d1e502ad569a0278f","blockSize":4194304,"blocks":["aae1becd1f4910b2a351c67cd85a3d4c4ba0c04e9edd110d1e502ad569a0278f"]}},"dropRightWhile.js":{"size":173,"offset":"15768356","integrity":{"algorithm":"SHA256","hash":"b136159cde098f7a33458a71e1d74a4ee8f2d8db41ed1cdafd95f098d502fc62","blockSize":4194304,"blocks":["b136159cde098f7a33458a71e1d74a4ee8f2d8db41ed1cdafd95f098d502fc62"]}},"dropWhile.js":{"size":163,"offset":"15768529","integrity":{"algorithm":"SHA256","hash":"18efda66ef552f065e35cb78506d74a3fb46b5dee7578918dadba8b40521c838","blockSize":4194304,"blocks":["18efda66ef552f065e35cb78506d74a3fb46b5dee7578918dadba8b40521c838"]}},"each.js":{"size":39,"offset":"15768692","integrity":{"algorithm":"SHA256","hash":"4d10bb01d04d58517504ecce768fce382a54fd93f5b04e6f649448af7978ee42","blockSize":4194304,"blocks":["4d10bb01d04d58517504ecce768fce382a54fd93f5b04e6f649448af7978ee42"]}},"eachRight.js":{"size":44,"offset":"15768731","integrity":{"algorithm":"SHA256","hash":"b231b46d2a636cd4e876773316d1bf20fb252ecbffb9a5032c22cbdb2dad822d","blockSize":4194304,"blocks":["b231b46d2a636cd4e876773316d1bf20fb252ecbffb9a5032c22cbdb2dad822d"]}},"endsWith.js":{"size":161,"offset":"15768775","integrity":{"algorithm":"SHA256","hash":"626510e077c799d7382c7efa6fb8cfbc8b0829b6d309f6a704f677aa45329c5f","blockSize":4194304,"blocks":["626510e077c799d7382c7efa6fb8cfbc8b0829b6d309f6a704f677aa45329c5f"]}},"entries.js":{"size":39,"offset":"15768936","integrity":{"algorithm":"SHA256","hash":"613eb0b14a3fdf90ad901dc8860aa7f77d752efc8d887a8df246be91501945da","blockSize":4194304,"blocks":["613eb0b14a3fdf90ad901dc8860aa7f77d752efc8d887a8df246be91501945da"]}},"entriesIn.js":{"size":41,"offset":"15768975","integrity":{"algorithm":"SHA256","hash":"963f4202340184bf129c8111fd1958b1ce3a535a760aaff2929347d2774a7ccf","blockSize":4194304,"blocks":["963f4202340184bf129c8111fd1958b1ce3a535a760aaff2929347d2774a7ccf"]}},"eq.js":{"size":149,"offset":"15769016","integrity":{"algorithm":"SHA256","hash":"09b050419f48e59eb294edc9d4cd2ea084b897559da7b338d5072376a4721f41","blockSize":4194304,"blocks":["09b050419f48e59eb294edc9d4cd2ea084b897559da7b338d5072376a4721f41"]}},"equals.js":{"size":39,"offset":"15769165","integrity":{"algorithm":"SHA256","hash":"459e8cff66cdfd0674fc01b10380bf43790a5faddb503977e32ec6ccb5f3b4b9","blockSize":4194304,"blocks":["459e8cff66cdfd0674fc01b10380bf43790a5faddb503977e32ec6ccb5f3b4b9"]}},"escape.js":{"size":185,"offset":"15769204","integrity":{"algorithm":"SHA256","hash":"b527e7a4bb66081b3c5ec02b8ead2791783841c75a9ac2b804c4eff08291557c","blockSize":4194304,"blocks":["b527e7a4bb66081b3c5ec02b8ead2791783841c75a9ac2b804c4eff08291557c"]}},"escapeRegExp.js":{"size":197,"offset":"15769389","integrity":{"algorithm":"SHA256","hash":"a2f2abcfc549830052ec8c9feb542afdd66183f2c840a7ece0314575993f0673","blockSize":4194304,"blocks":["a2f2abcfc549830052ec8c9feb542afdd66183f2c840a7ece0314575993f0673"]}},"every.js":{"size":155,"offset":"15769586","integrity":{"algorithm":"SHA256","hash":"4be27ebd258ab25e6be6d0afbe81bde71ce8c1d0a298481eb37e466210ac6951","blockSize":4194304,"blocks":["4be27ebd258ab25e6be6d0afbe81bde71ce8c1d0a298481eb37e466210ac6951"]}},"extend.js":{"size":40,"offset":"15769741","integrity":{"algorithm":"SHA256","hash":"32a68951279d8b57c741ab487b5eef543394c802e30f95b0f68d44e366db8aef","blockSize":4194304,"blocks":["32a68951279d8b57c741ab487b5eef543394c802e30f95b0f68d44e366db8aef"]}},"extendAll.js":{"size":43,"offset":"15769781","integrity":{"algorithm":"SHA256","hash":"0a6f41c2dc6e849deebfdef96fd3cbef54d5407d6a2c5984dc0a7be8a4c8b7df","blockSize":4194304,"blocks":["0a6f41c2dc6e849deebfdef96fd3cbef54d5407d6a2c5984dc0a7be8a4c8b7df"]}},"extendAllWith.js":{"size":47,"offset":"15769824","integrity":{"algorithm":"SHA256","hash":"c52793a010ef4a0740578c3034a05f85bd4eb7f2cabe7ecd0df6381c2e2c07d9","blockSize":4194304,"blocks":["c52793a010ef4a0740578c3034a05f85bd4eb7f2cabe7ecd0df6381c2e2c07d9"]}},"extendWith.js":{"size":44,"offset":"15769871","integrity":{"algorithm":"SHA256","hash":"1b2704465ff3abb01d67ae8a2315c3bbaf0c386863886c03343c219bb02cc5a8","blockSize":4194304,"blocks":["1b2704465ff3abb01d67ae8a2315c3bbaf0c386863886c03343c219bb02cc5a8"]}},"F.js":{"size":41,"offset":"15769915","integrity":{"algorithm":"SHA256","hash":"49443aafae0d95656f2982f538f1e4f6501fc2e0feeec000c7fcfca4787c59d1","blockSize":4194304,"blocks":["49443aafae0d95656f2982f538f1e4f6501fc2e0feeec000c7fcfca4787c59d1"]}},"fill.js":{"size":153,"offset":"15769956","integrity":{"algorithm":"SHA256","hash":"d2a2c3f1079c65b7e24929c9cb56ff082c652657f88499bd4b15c2d93b1302fe","blockSize":4194304,"blocks":["d2a2c3f1079c65b7e24929c9cb56ff082c652657f88499bd4b15c2d93b1302fe"]}},"filter.js":{"size":157,"offset":"15770109","integrity":{"algorithm":"SHA256","hash":"b9d6d6593908448f97a3329ca851aae760dbccf1a7fb037e800aa14129835db1","blockSize":4194304,"blocks":["b9d6d6593908448f97a3329ca851aae760dbccf1a7fb037e800aa14129835db1"]}},"find.js":{"size":153,"offset":"15770266","integrity":{"algorithm":"SHA256","hash":"8a1f76bee162c12db677b0d985443a15895f172662ff58c721cdcb6ec75d2188","blockSize":4194304,"blocks":["8a1f76bee162c12db677b0d985443a15895f172662ff58c721cdcb6ec75d2188"]}},"findFrom.js":{"size":157,"offset":"15770419","integrity":{"algorithm":"SHA256","hash":"df9f36dd443ce00791a49d16d450b3e85f3e36cc965942a028be700d43f60c4f","blockSize":4194304,"blocks":["df9f36dd443ce00791a49d16d450b3e85f3e36cc965942a028be700d43f60c4f"]}},"findIndex.js":{"size":163,"offset":"15770576","integrity":{"algorithm":"SHA256","hash":"17adb306471f2db5a159722e002bdd95705400272ee1e0ab6d0af5900a87b0c9","blockSize":4194304,"blocks":["17adb306471f2db5a159722e002bdd95705400272ee1e0ab6d0af5900a87b0c9"]}},"findIndexFrom.js":{"size":167,"offset":"15770739","integrity":{"algorithm":"SHA256","hash":"d175d9a7f616dca106c6a9dd52f3ef527b652c07a5ba004b926de133a50ea901","blockSize":4194304,"blocks":["d175d9a7f616dca106c6a9dd52f3ef527b652c07a5ba004b926de133a50ea901"]}},"findKey.js":{"size":159,"offset":"15770906","integrity":{"algorithm":"SHA256","hash":"f33efae4ce7cbf889df52bd460771230f25dc861ba567e4bf21819e3c42c8011","blockSize":4194304,"blocks":["f33efae4ce7cbf889df52bd460771230f25dc861ba567e4bf21819e3c42c8011"]}},"findLast.js":{"size":161,"offset":"15771065","integrity":{"algorithm":"SHA256","hash":"51b4f7733659d7c48a03f91d329de7dbe5070ef3a49b12e898b708d21bdef27c","blockSize":4194304,"blocks":["51b4f7733659d7c48a03f91d329de7dbe5070ef3a49b12e898b708d21bdef27c"]}},"findLastFrom.js":{"size":165,"offset":"15771226","integrity":{"algorithm":"SHA256","hash":"76e952a6eeaaf1f1a49c17ecf2d32477a860ab81457750df5be0d20e18d29384","blockSize":4194304,"blocks":["76e952a6eeaaf1f1a49c17ecf2d32477a860ab81457750df5be0d20e18d29384"]}},"findLastIndex.js":{"size":171,"offset":"15771391","integrity":{"algorithm":"SHA256","hash":"203df015697c5bc93fa108dd73cfb8870ce11cf8341ea102bb7b3b7e877fd955","blockSize":4194304,"blocks":["203df015697c5bc93fa108dd73cfb8870ce11cf8341ea102bb7b3b7e877fd955"]}},"findLastIndexFrom.js":{"size":175,"offset":"15771562","integrity":{"algorithm":"SHA256","hash":"e00a3ac404ee4fc61917ba907abfcb32cae08cdce13831e202e63d90dc04aa8c","blockSize":4194304,"blocks":["e00a3ac404ee4fc61917ba907abfcb32cae08cdce13831e202e63d90dc04aa8c"]}},"findLastKey.js":{"size":167,"offset":"15771737","integrity":{"algorithm":"SHA256","hash":"f5c703ee9eab5479f46482adc9b0ba51e926a1aa492edddef3c0acba46cb5484","blockSize":4194304,"blocks":["f5c703ee9eab5479f46482adc9b0ba51e926a1aa492edddef3c0acba46cb5484"]}},"first.js":{"size":36,"offset":"15771904","integrity":{"algorithm":"SHA256","hash":"96a23a435507782b9ee4cbc1d3312f9f2617a40e9bd1b7af838185f40feef657","blockSize":4194304,"blocks":["96a23a435507782b9ee4cbc1d3312f9f2617a40e9bd1b7af838185f40feef657"]}},"flatMap.js":{"size":159,"offset":"15771940","integrity":{"algorithm":"SHA256","hash":"908ce3c654d6249af03c795cf037c9b8901159084eb043242464786efbaccfe9","blockSize":4194304,"blocks":["908ce3c654d6249af03c795cf037c9b8901159084eb043242464786efbaccfe9"]}},"flatMapDeep.js":{"size":167,"offset":"15772099","integrity":{"algorithm":"SHA256","hash":"7cf85bbe9249be63139f5a97f14daec0a489ffc5ee420afbc561f246f737da2d","blockSize":4194304,"blocks":["7cf85bbe9249be63139f5a97f14daec0a489ffc5ee420afbc561f246f737da2d"]}},"flatMapDepth.js":{"size":169,"offset":"15772266","integrity":{"algorithm":"SHA256","hash":"49be55e2c877b5bd6ee90357b05ac5ebfa21f731e8db74644491051c52225dc3","blockSize":4194304,"blocks":["49be55e2c877b5bd6ee90357b05ac5ebfa21f731e8db74644491051c52225dc3"]}},"flatten.js":{"size":187,"offset":"15772435","integrity":{"algorithm":"SHA256","hash":"7ddaebb042a17fc47e5339d2ee46757bb49c7da016eb164414b687fd5aba5450","blockSize":4194304,"blocks":["7ddaebb042a17fc47e5339d2ee46757bb49c7da016eb164414b687fd5aba5450"]}},"flattenDeep.js":{"size":195,"offset":"15772622","integrity":{"algorithm":"SHA256","hash":"74a11dd4962aae026fc14d93117dee82d8c22319b1b1b2aeaf286288e7f9b865","blockSize":4194304,"blocks":["74a11dd4962aae026fc14d93117dee82d8c22319b1b1b2aeaf286288e7f9b865"]}},"flattenDepth.js":{"size":169,"offset":"15772817","integrity":{"algorithm":"SHA256","hash":"b77d8dc285660b6c5afa5182bb9ffa8b95e5a6ac6dbbbf39bd0d57722a5aa896","blockSize":4194304,"blocks":["b77d8dc285660b6c5afa5182bb9ffa8b95e5a6ac6dbbbf39bd0d57722a5aa896"]}},"flip.js":{"size":181,"offset":"15772986","integrity":{"algorithm":"SHA256","hash":"62a880389bafa6562a4e256acd1c9a8779dfaf7e13f7284468dd040ec6835f61","blockSize":4194304,"blocks":["62a880389bafa6562a4e256acd1c9a8779dfaf7e13f7284468dd040ec6835f61"]}},"floor.js":{"size":155,"offset":"15773167","integrity":{"algorithm":"SHA256","hash":"2aeea71d6e7d83c1c8012a163add17755fb9e79ce1e8b96f965f95d482bf0a71","blockSize":4194304,"blocks":["2aeea71d6e7d83c1c8012a163add17755fb9e79ce1e8b96f965f95d482bf0a71"]}},"flow.js":{"size":153,"offset":"15773322","integrity":{"algorithm":"SHA256","hash":"51ff8f71dff294f16ae459fd57c166795036696c76074bdfe5e9f852777be6eb","blockSize":4194304,"blocks":["51ff8f71dff294f16ae459fd57c166795036696c76074bdfe5e9f852777be6eb"]}},"flowRight.js":{"size":163,"offset":"15773475","integrity":{"algorithm":"SHA256","hash":"3f1988a89d1a865d0c42d0c846c1802e67f016b431552212795cd9c3aab1977a","blockSize":4194304,"blocks":["3f1988a89d1a865d0c42d0c846c1802e67f016b431552212795cd9c3aab1977a"]}},"forEach.js":{"size":159,"offset":"15773638","integrity":{"algorithm":"SHA256","hash":"1a9972ed328472f45e990cb2b4346d664f3326218bf1e8c0ce1708f4cfe4253d","blockSize":4194304,"blocks":["1a9972ed328472f45e990cb2b4346d664f3326218bf1e8c0ce1708f4cfe4253d"]}},"forEachRight.js":{"size":169,"offset":"15773797","integrity":{"algorithm":"SHA256","hash":"d7fb9626e5576a8b4b9809d49fb3046891505b23d67f734a3b877f860ec9e2cb","blockSize":4194304,"blocks":["d7fb9626e5576a8b4b9809d49fb3046891505b23d67f734a3b877f860ec9e2cb"]}},"forIn.js":{"size":155,"offset":"15773966","integrity":{"algorithm":"SHA256","hash":"f1a2a643a79a755ee4037ab11c8e79546f5e4c873dcc6466136d692357e9d033","blockSize":4194304,"blocks":["f1a2a643a79a755ee4037ab11c8e79546f5e4c873dcc6466136d692357e9d033"]}},"forInRight.js":{"size":165,"offset":"15774121","integrity":{"algorithm":"SHA256","hash":"36909b67f0ca0e23ad692a9fa7803268e7a65178a26093780a753e8555dcfbfb","blockSize":4194304,"blocks":["36909b67f0ca0e23ad692a9fa7803268e7a65178a26093780a753e8555dcfbfb"]}},"forOwn.js":{"size":157,"offset":"15774286","integrity":{"algorithm":"SHA256","hash":"1a52947c8056c2db4dd67a65c17ec471288317a3fa9c30e44d446e823d602fd2","blockSize":4194304,"blocks":["1a52947c8056c2db4dd67a65c17ec471288317a3fa9c30e44d446e823d602fd2"]}},"forOwnRight.js":{"size":167,"offset":"15774443","integrity":{"algorithm":"SHA256","hash":"16c4b1531c14385c60b4c3c0d8d5a1b1616e565981875ff4a9d5cabfbda4f197","blockSize":4194304,"blocks":["16c4b1531c14385c60b4c3c0d8d5a1b1616e565981875ff4a9d5cabfbda4f197"]}},"fromPairs.js":{"size":163,"offset":"15774610","integrity":{"algorithm":"SHA256","hash":"e705307e3fb6f3bf342323e64b8f6c721206a0612d3e4ffe42790f8e92d66a37","blockSize":4194304,"blocks":["e705307e3fb6f3bf342323e64b8f6c721206a0612d3e4ffe42790f8e92d66a37"]}},"function.js":{"size":86,"offset":"15774773","integrity":{"algorithm":"SHA256","hash":"bf846ce6eaf001344d155d1977e95b02574e732af396dd6427edd90ddee90f51","blockSize":4194304,"blocks":["bf846ce6eaf001344d155d1977e95b02574e732af396dd6427edd90ddee90f51"]}},"functions.js":{"size":191,"offset":"15774859","integrity":{"algorithm":"SHA256","hash":"3d05e73466020396cc66b747635858316a99e37a8b6bc89313d3a34db1030e1a","blockSize":4194304,"blocks":["3d05e73466020396cc66b747635858316a99e37a8b6bc89313d3a34db1030e1a"]}},"functionsIn.js":{"size":195,"offset":"15775050","integrity":{"algorithm":"SHA256","hash":"8ddca62cda22513347991c5bfb5e26a362999cbc964ab6eba0da2e9f59ade0eb","blockSize":4194304,"blocks":["8ddca62cda22513347991c5bfb5e26a362999cbc964ab6eba0da2e9f59ade0eb"]}},"get.js":{"size":151,"offset":"15775245","integrity":{"algorithm":"SHA256","hash":"8c76482ff0b4e7021bcb55abe467cd206ef385fd53bd6cd64240b4acb29fa5db","blockSize":4194304,"blocks":["8c76482ff0b4e7021bcb55abe467cd206ef385fd53bd6cd64240b4acb29fa5db"]}},"getOr.js":{"size":153,"offset":"15775396","integrity":{"algorithm":"SHA256","hash":"a52df81dc858fc65d9b6ba7ee8244a8abf2436060e6a84f0ed9b539f58b1f055","blockSize":4194304,"blocks":["a52df81dc858fc65d9b6ba7ee8244a8abf2436060e6a84f0ed9b539f58b1f055"]}},"groupBy.js":{"size":159,"offset":"15775549","integrity":{"algorithm":"SHA256","hash":"a72fd681abc6037675cd84cdada641301baf46354df008e4381288e6f9d01fd6","blockSize":4194304,"blocks":["a72fd681abc6037675cd84cdada641301baf46354df008e4381288e6f9d01fd6"]}},"gt.js":{"size":149,"offset":"15775708","integrity":{"algorithm":"SHA256","hash":"178f4031b2533d7ed0ed099939566e3a1d7e1cb4b35b35d72a9d3bf7f9f1e61f","blockSize":4194304,"blocks":["178f4031b2533d7ed0ed099939566e3a1d7e1cb4b35b35d72a9d3bf7f9f1e61f"]}},"gte.js":{"size":151,"offset":"15775857","integrity":{"algorithm":"SHA256","hash":"b5d145f13a3540a7b8ee82e5a24144f4110100c4e1ce776067fe6855a6fc7323","blockSize":4194304,"blocks":["b5d145f13a3540a7b8ee82e5a24144f4110100c4e1ce776067fe6855a6fc7323"]}},"has.js":{"size":151,"offset":"15776008","integrity":{"algorithm":"SHA256","hash":"50733a4c36840a3acd55abc9cf81f162e7bf4d472e55100f63584887391a8604","blockSize":4194304,"blocks":["50733a4c36840a3acd55abc9cf81f162e7bf4d472e55100f63584887391a8604"]}},"hasIn.js":{"size":155,"offset":"15776159","integrity":{"algorithm":"SHA256","hash":"52a3f58bd2b75ebafdbdd8fa0a7d5d06ae70fb4983b81542bef4631f1c4c749a","blockSize":4194304,"blocks":["52a3f58bd2b75ebafdbdd8fa0a7d5d06ae70fb4983b81542bef4631f1c4c749a"]}},"head.js":{"size":181,"offset":"15776314","integrity":{"algorithm":"SHA256","hash":"560347db509835ed8c857be54a86c62e2a6b059ffcfe0715902d5a5c1c53798f","blockSize":4194304,"blocks":["560347db509835ed8c857be54a86c62e2a6b059ffcfe0715902d5a5c1c53798f"]}},"identical.js":{"size":34,"offset":"15776495","integrity":{"algorithm":"SHA256","hash":"e74967099de92c10dc080e2d4546bd15fa5181fb8abc10c76ef80666e4867254","blockSize":4194304,"blocks":["e74967099de92c10dc080e2d4546bd15fa5181fb8abc10c76ef80666e4867254"]}},"identity.js":{"size":189,"offset":"15776529","integrity":{"algorithm":"SHA256","hash":"f4589424964159bc9e22129ccf6677607d8de2e4c87665a3dbe6cc55a9b915e9","blockSize":4194304,"blocks":["f4589424964159bc9e22129ccf6677607d8de2e4c87665a3dbe6cc55a9b915e9"]}},"includes.js":{"size":161,"offset":"15776718","integrity":{"algorithm":"SHA256","hash":"b9d0f380d0a0833f1e8d7db446fc2a47310402805537b530e19fd00b55bf687f","blockSize":4194304,"blocks":["b9d0f380d0a0833f1e8d7db446fc2a47310402805537b530e19fd00b55bf687f"]}},"includesFrom.js":{"size":165,"offset":"15776879","integrity":{"algorithm":"SHA256","hash":"13b36c0d96553e3063b6f823a36d7bc5012b47d8317127f7f2516183b4aa165c","blockSize":4194304,"blocks":["13b36c0d96553e3063b6f823a36d7bc5012b47d8317127f7f2516183b4aa165c"]}},"indexBy.js":{"size":37,"offset":"15777044","integrity":{"algorithm":"SHA256","hash":"f0e704ef2654ab460e6dc41d6aefcdbe3410ba2d6a026d898ef7b2fe9dfac9e7","blockSize":4194304,"blocks":["f0e704ef2654ab460e6dc41d6aefcdbe3410ba2d6a026d898ef7b2fe9dfac9e7"]}},"indexOf.js":{"size":159,"offset":"15777081","integrity":{"algorithm":"SHA256","hash":"82a32593a87fef26207272693e91ac50b55c6e54d6f91185549df78151d10982","blockSize":4194304,"blocks":["82a32593a87fef26207272693e91ac50b55c6e54d6f91185549df78151d10982"]}},"indexOfFrom.js":{"size":163,"offset":"15777240","integrity":{"algorithm":"SHA256","hash":"56bbbd5bdb4d183891625f8b5ba65ecb13a084656daf282dfda883cc92c39b92","blockSize":4194304,"blocks":["56bbbd5bdb4d183891625f8b5ba65ecb13a084656daf282dfda883cc92c39b92"]}},"init.js":{"size":39,"offset":"15777403","integrity":{"algorithm":"SHA256","hash":"2f36883180bcf405ec646cb9a62cd21d03b059b762fa06f6460f4f3fb6f65ba4","blockSize":4194304,"blocks":["2f36883180bcf405ec646cb9a62cd21d03b059b762fa06f6460f4f3fb6f65ba4"]}},"initial.js":{"size":187,"offset":"15777442","integrity":{"algorithm":"SHA256","hash":"f1bf90da3ca04bd624478f3fff13c85e10ed80aea64c0dedb12f79ce6b9e48f4","blockSize":4194304,"blocks":["f1bf90da3ca04bd624478f3fff13c85e10ed80aea64c0dedb12f79ce6b9e48f4"]}},"inRange.js":{"size":159,"offset":"15777629","integrity":{"algorithm":"SHA256","hash":"9ff2447831272b36c7b5c1f4e4089442f663bbc5c40a4946a00f1702cea1bb25","blockSize":4194304,"blocks":["9ff2447831272b36c7b5c1f4e4089442f663bbc5c40a4946a00f1702cea1bb25"]}},"intersection.js":{"size":169,"offset":"15777788","integrity":{"algorithm":"SHA256","hash":"9c2c2cb961158c22e77ed1fd7569f3d5d8b28f4581e93e7c94b10c5e004c044a","blockSize":4194304,"blocks":["9c2c2cb961158c22e77ed1fd7569f3d5d8b28f4581e93e7c94b10c5e004c044a"]}},"intersectionBy.js":{"size":173,"offset":"15777957","integrity":{"algorithm":"SHA256","hash":"3891ed02f79ecf3677369b59aa3b9f5b5f27be42c16e71c85d2b028f733ddbfc","blockSize":4194304,"blocks":["3891ed02f79ecf3677369b59aa3b9f5b5f27be42c16e71c85d2b028f733ddbfc"]}},"intersectionWith.js":{"size":177,"offset":"15778130","integrity":{"algorithm":"SHA256","hash":"9c9116e9d7a559065ab1f1c70772f58daf21ab01693a658563abecd3969f18aa","blockSize":4194304,"blocks":["9c9116e9d7a559065ab1f1c70772f58daf21ab01693a658563abecd3969f18aa"]}},"invert.js":{"size":157,"offset":"15778307","integrity":{"algorithm":"SHA256","hash":"21c16af0fc0fead90ba187903f91204c487a437b2d03ee1d0e15e1da24c9348d","blockSize":4194304,"blocks":["21c16af0fc0fead90ba187903f91204c487a437b2d03ee1d0e15e1da24c9348d"]}},"invertBy.js":{"size":161,"offset":"15778464","integrity":{"algorithm":"SHA256","hash":"cb224c37537fbbde9f9f2ba300aa85e5ddf94416a8a88bf54177de997e46cf64","blockSize":4194304,"blocks":["cb224c37537fbbde9f9f2ba300aa85e5ddf94416a8a88bf54177de997e46cf64"]}},"invertObj.js":{"size":38,"offset":"15778625","integrity":{"algorithm":"SHA256","hash":"488ae0a4672612b06075443374e1e70704bc8ff8fed8c67746a03b7c48a20f68","blockSize":4194304,"blocks":["488ae0a4672612b06075443374e1e70704bc8ff8fed8c67746a03b7c48a20f68"]}},"invoke.js":{"size":157,"offset":"15778663","integrity":{"algorithm":"SHA256","hash":"6ec88e3564475e7a6cca5b3e00e66754c076cdba270750b6af0959631df9da7d","blockSize":4194304,"blocks":["6ec88e3564475e7a6cca5b3e00e66754c076cdba270750b6af0959631df9da7d"]}},"invokeArgs.js":{"size":161,"offset":"15778820","integrity":{"algorithm":"SHA256","hash":"b97fa28fe710fca8447e9a2e97f547617fcdd3e32fd4bdbb377e0e9fc85f428a","blockSize":4194304,"blocks":["b97fa28fe710fca8447e9a2e97f547617fcdd3e32fd4bdbb377e0e9fc85f428a"]}},"invokeArgsMap.js":{"size":167,"offset":"15778981","integrity":{"algorithm":"SHA256","hash":"b380fd53d981d80b17cd7998b9d75d9780f1209dabd5dcf444f56391da6a5ebf","blockSize":4194304,"blocks":["b380fd53d981d80b17cd7998b9d75d9780f1209dabd5dcf444f56391da6a5ebf"]}},"invokeMap.js":{"size":163,"offset":"15779148","integrity":{"algorithm":"SHA256","hash":"1ba3b295c861334cd7ce2467cdb212a3c2ee0a0589b67d092c6e19f984ec12f1","blockSize":4194304,"blocks":["1ba3b295c861334cd7ce2467cdb212a3c2ee0a0589b67d092c6e19f984ec12f1"]}},"isArguments.js":{"size":195,"offset":"15779311","integrity":{"algorithm":"SHA256","hash":"8fb015f1e1e8bf853ae819f365f514d5d8fc00782dbee1a6db7ed62d9129ab28","blockSize":4194304,"blocks":["8fb015f1e1e8bf853ae819f365f514d5d8fc00782dbee1a6db7ed62d9129ab28"]}},"isArray.js":{"size":187,"offset":"15779506","integrity":{"algorithm":"SHA256","hash":"9f78a004273d57468131fc7e7d4e2933c1676452c54fbce9767addaac71c1b16","blockSize":4194304,"blocks":["9f78a004273d57468131fc7e7d4e2933c1676452c54fbce9767addaac71c1b16"]}},"isArrayBuffer.js":{"size":199,"offset":"15779693","integrity":{"algorithm":"SHA256","hash":"4d44a222bc4de22493cd34f05f1e43baf5946f9ae5b5fbd65a04a04544f84e91","blockSize":4194304,"blocks":["4d44a222bc4de22493cd34f05f1e43baf5946f9ae5b5fbd65a04a04544f84e91"]}},"isArrayLike.js":{"size":195,"offset":"15779892","integrity":{"algorithm":"SHA256","hash":"1089895b13d838724a1b5beafb4892717ada15aa4813a248ecf564ee27334381","blockSize":4194304,"blocks":["1089895b13d838724a1b5beafb4892717ada15aa4813a248ecf564ee27334381"]}},"isArrayLikeObject.js":{"size":207,"offset":"15780087","integrity":{"algorithm":"SHA256","hash":"1a8cd88fd9ce6767f8fd5e71ff4debb7f9472216d47d473eb322908a332bd30b","blockSize":4194304,"blocks":["1a8cd88fd9ce6767f8fd5e71ff4debb7f9472216d47d473eb322908a332bd30b"]}},"isBoolean.js":{"size":191,"offset":"15780294","integrity":{"algorithm":"SHA256","hash":"52424314dce154e1615690d63cbaa259928ca36e16867db4125818f67340f460","blockSize":4194304,"blocks":["52424314dce154e1615690d63cbaa259928ca36e16867db4125818f67340f460"]}},"isBuffer.js":{"size":189,"offset":"15780485","integrity":{"algorithm":"SHA256","hash":"98967f6b807df630b111919ac50c0df7acda7c355d6287221051bb88ccc8e1f6","blockSize":4194304,"blocks":["98967f6b807df630b111919ac50c0df7acda7c355d6287221051bb88ccc8e1f6"]}},"isDate.js":{"size":185,"offset":"15780674","integrity":{"algorithm":"SHA256","hash":"257a78156f5be6e3f7c3cf97ea985b7442492b5559209118667b84954d63be51","blockSize":4194304,"blocks":["257a78156f5be6e3f7c3cf97ea985b7442492b5559209118667b84954d63be51"]}},"isElement.js":{"size":191,"offset":"15780859","integrity":{"algorithm":"SHA256","hash":"791b6ec38da7be05e8b667a8b8ce26f0c438dd6c1d73e75ce51578f010c57271","blockSize":4194304,"blocks":["791b6ec38da7be05e8b667a8b8ce26f0c438dd6c1d73e75ce51578f010c57271"]}},"isEmpty.js":{"size":187,"offset":"15781050","integrity":{"algorithm":"SHA256","hash":"d7fb0461b2c4b1bf6c03c2fe0e4f9da23278a9668da8e6c011079a7710ec6ff0","blockSize":4194304,"blocks":["d7fb0461b2c4b1bf6c03c2fe0e4f9da23278a9668da8e6c011079a7710ec6ff0"]}},"isEqual.js":{"size":159,"offset":"15781237","integrity":{"algorithm":"SHA256","hash":"668454d1d39ebad5a2e6f5b395e012883d54ed67eb936058a7cac40b117d6f42","blockSize":4194304,"blocks":["668454d1d39ebad5a2e6f5b395e012883d54ed67eb936058a7cac40b117d6f42"]}},"isEqualWith.js":{"size":167,"offset":"15781396","integrity":{"algorithm":"SHA256","hash":"4d3324a8644520a0d658f5894b20cf9e78db196cc37e4ab437e238641079e542","blockSize":4194304,"blocks":["4d3324a8644520a0d658f5894b20cf9e78db196cc37e4ab437e238641079e542"]}},"isError.js":{"size":187,"offset":"15781563","integrity":{"algorithm":"SHA256","hash":"220777663a82b362054b93fcc87232b006e8e67cb1ed4debbb61e75c7f09fed2","blockSize":4194304,"blocks":["220777663a82b362054b93fcc87232b006e8e67cb1ed4debbb61e75c7f09fed2"]}},"isFinite.js":{"size":189,"offset":"15781750","integrity":{"algorithm":"SHA256","hash":"0098a0eae5747e07538a461c94c0f334038fe468988dcd05b62fcd01a86fb064","blockSize":4194304,"blocks":["0098a0eae5747e07538a461c94c0f334038fe468988dcd05b62fcd01a86fb064"]}},"isFunction.js":{"size":193,"offset":"15781939","integrity":{"algorithm":"SHA256","hash":"f2ebb795a59289a6de4972199a92da4efa3cfcf46509f6c52f432f5f9b95a7fe","blockSize":4194304,"blocks":["f2ebb795a59289a6de4972199a92da4efa3cfcf46509f6c52f432f5f9b95a7fe"]}},"isInteger.js":{"size":191,"offset":"15782132","integrity":{"algorithm":"SHA256","hash":"45f072ab8b1984d33ce0873bac1baecd63fc2ec7718755da47df95aabd5de2b3","blockSize":4194304,"blocks":["45f072ab8b1984d33ce0873bac1baecd63fc2ec7718755da47df95aabd5de2b3"]}},"isLength.js":{"size":189,"offset":"15782323","integrity":{"algorithm":"SHA256","hash":"f0b917e8f336d541a3f7659448557b351800608ebd038a5f77c898deb7b1d7f7","blockSize":4194304,"blocks":["f0b917e8f336d541a3f7659448557b351800608ebd038a5f77c898deb7b1d7f7"]}},"isMap.js":{"size":183,"offset":"15782512","integrity":{"algorithm":"SHA256","hash":"ed963aa3d7feb5e06d0a45a4191a87a1c6f4393f1cfc55e7703b815cb593a502","blockSize":4194304,"blocks":["ed963aa3d7feb5e06d0a45a4191a87a1c6f4393f1cfc55e7703b815cb593a502"]}},"isMatch.js":{"size":159,"offset":"15782695","integrity":{"algorithm":"SHA256","hash":"3ba262cb81d099cf6a1b5e6763cedbdca784d891191bd7e75d8ae5010338ce67","blockSize":4194304,"blocks":["3ba262cb81d099cf6a1b5e6763cedbdca784d891191bd7e75d8ae5010338ce67"]}},"isMatchWith.js":{"size":167,"offset":"15782854","integrity":{"algorithm":"SHA256","hash":"2d143bffbd74768e6a9a11bde625ea497b57c2a5fe057f0df1f0b8a6450da20d","blockSize":4194304,"blocks":["2d143bffbd74768e6a9a11bde625ea497b57c2a5fe057f0df1f0b8a6450da20d"]}},"isNaN.js":{"size":183,"offset":"15783021","integrity":{"algorithm":"SHA256","hash":"d88fb07773c4f9cac7e2ad02b9ba58b48343360c2587ff15793800065087c9ac","blockSize":4194304,"blocks":["d88fb07773c4f9cac7e2ad02b9ba58b48343360c2587ff15793800065087c9ac"]}},"isNative.js":{"size":189,"offset":"15783204","integrity":{"algorithm":"SHA256","hash":"3d139b7ab45d81773ed74460b91a05cc0dc0762cd1aa3b41a79b7cae5346da48","blockSize":4194304,"blocks":["3d139b7ab45d81773ed74460b91a05cc0dc0762cd1aa3b41a79b7cae5346da48"]}},"isNil.js":{"size":183,"offset":"15783393","integrity":{"algorithm":"SHA256","hash":"78d233a82248be68ae2eab8e64194ae453292ef7c03a98ec03d5b38c392305f2","blockSize":4194304,"blocks":["78d233a82248be68ae2eab8e64194ae453292ef7c03a98ec03d5b38c392305f2"]}},"isNull.js":{"size":185,"offset":"15783576","integrity":{"algorithm":"SHA256","hash":"a79b315b284a789e62ac2f20de5130442d1dc82a830b693155194e0a1e65a1b8","blockSize":4194304,"blocks":["a79b315b284a789e62ac2f20de5130442d1dc82a830b693155194e0a1e65a1b8"]}},"isNumber.js":{"size":189,"offset":"15783761","integrity":{"algorithm":"SHA256","hash":"d5ccc471595509d01e2e72f82f9b07539472b39b7a984bc077d5a7d0f0df355b","blockSize":4194304,"blocks":["d5ccc471595509d01e2e72f82f9b07539472b39b7a984bc077d5a7d0f0df355b"]}},"isObject.js":{"size":189,"offset":"15783950","integrity":{"algorithm":"SHA256","hash":"2c020d0d6d9c6f92ef9ab81cc4f91ffb90e3dc9951d64b9a3fad3a9890104db7","blockSize":4194304,"blocks":["2c020d0d6d9c6f92ef9ab81cc4f91ffb90e3dc9951d64b9a3fad3a9890104db7"]}},"isObjectLike.js":{"size":197,"offset":"15784139","integrity":{"algorithm":"SHA256","hash":"30c0702f4a1f479af27c2f94afd1ae502480fb665ed5cdf17abe0deb33c01457","blockSize":4194304,"blocks":["30c0702f4a1f479af27c2f94afd1ae502480fb665ed5cdf17abe0deb33c01457"]}},"isPlainObject.js":{"size":199,"offset":"15784336","integrity":{"algorithm":"SHA256","hash":"737f412806a406308971b1453ac365190440fc08981feecbcc5b353db66695fc","blockSize":4194304,"blocks":["737f412806a406308971b1453ac365190440fc08981feecbcc5b353db66695fc"]}},"isRegExp.js":{"size":189,"offset":"15784535","integrity":{"algorithm":"SHA256","hash":"d33e7c437fccc6770a1e4a7ec6c5e0eb952696ae27e710d77ea98123af491768","blockSize":4194304,"blocks":["d33e7c437fccc6770a1e4a7ec6c5e0eb952696ae27e710d77ea98123af491768"]}},"isSafeInteger.js":{"size":199,"offset":"15784724","integrity":{"algorithm":"SHA256","hash":"4897a70f497abf7608452f8ce52e7db2491dde55488d02dfd8d8356e431d821e","blockSize":4194304,"blocks":["4897a70f497abf7608452f8ce52e7db2491dde55488d02dfd8d8356e431d821e"]}},"isSet.js":{"size":183,"offset":"15784923","integrity":{"algorithm":"SHA256","hash":"5141cd3852d6067278106042eae42b1d49d58345815df6d0b4fbfbec7f9ca609","blockSize":4194304,"blocks":["5141cd3852d6067278106042eae42b1d49d58345815df6d0b4fbfbec7f9ca609"]}},"isString.js":{"size":189,"offset":"15785106","integrity":{"algorithm":"SHA256","hash":"d733a33a3e009cfaca3cac3c1aeb33d4c7152021dc8dac8346709f4faf7c1cbd","blockSize":4194304,"blocks":["d733a33a3e009cfaca3cac3c1aeb33d4c7152021dc8dac8346709f4faf7c1cbd"]}},"isSymbol.js":{"size":189,"offset":"15785295","integrity":{"algorithm":"SHA256","hash":"74d6d3f6bb0e5a510f0eab3750b27060dd51ab319ed56d1515eb3025caf64e54","blockSize":4194304,"blocks":["74d6d3f6bb0e5a510f0eab3750b27060dd51ab319ed56d1515eb3025caf64e54"]}},"isTypedArray.js":{"size":197,"offset":"15785484","integrity":{"algorithm":"SHA256","hash":"6a33cdda203550e024bfe1330b2940eb25de924a387925b0a216d7f5f7233215","blockSize":4194304,"blocks":["6a33cdda203550e024bfe1330b2940eb25de924a387925b0a216d7f5f7233215"]}},"isUndefined.js":{"size":195,"offset":"15785681","integrity":{"algorithm":"SHA256","hash":"94e6c10348ed9412b31e8d73b154201d5b1b15341241d252eead810a4071293c","blockSize":4194304,"blocks":["94e6c10348ed9412b31e8d73b154201d5b1b15341241d252eead810a4071293c"]}},"isWeakMap.js":{"size":191,"offset":"15785876","integrity":{"algorithm":"SHA256","hash":"f2bf270d73f3674369c43e606add6fc34b11a7fdf7cc317c9e9d1aad8253bc45","blockSize":4194304,"blocks":["f2bf270d73f3674369c43e606add6fc34b11a7fdf7cc317c9e9d1aad8253bc45"]}},"isWeakSet.js":{"size":191,"offset":"15786067","integrity":{"algorithm":"SHA256","hash":"b648e5a06f3e97d4b7bc9a29d53dfa428851b9817d9e492ee41020fe2005fed7","blockSize":4194304,"blocks":["b648e5a06f3e97d4b7bc9a29d53dfa428851b9817d9e492ee41020fe2005fed7"]}},"iteratee.js":{"size":161,"offset":"15786258","integrity":{"algorithm":"SHA256","hash":"dfa7d1c5a8f2c517a7900ed31ffb92eace6044557eda9dc6e21c4f1e0a58bb19","blockSize":4194304,"blocks":["dfa7d1c5a8f2c517a7900ed31ffb92eace6044557eda9dc6e21c4f1e0a58bb19"]}},"join.js":{"size":153,"offset":"15786419","integrity":{"algorithm":"SHA256","hash":"4e2d2124d8b9e7639c22a0e306a836403e5ba4a430321dda56011ea2be1d919e","blockSize":4194304,"blocks":["4e2d2124d8b9e7639c22a0e306a836403e5ba4a430321dda56011ea2be1d919e"]}},"juxt.js":{"size":36,"offset":"15786572","integrity":{"algorithm":"SHA256","hash":"7930a9e0486c033831ad0c86f8f1ee10486d3970acee5d712c21141e7f8fd1c1","blockSize":4194304,"blocks":["7930a9e0486c033831ad0c86f8f1ee10486d3970acee5d712c21141e7f8fd1c1"]}},"kebabCase.js":{"size":191,"offset":"15786608","integrity":{"algorithm":"SHA256","hash":"99b0709c4c2147b54d17e01c7f14e6355e61ae7112df9dbd7bc49963d5b93fff","blockSize":4194304,"blocks":["99b0709c4c2147b54d17e01c7f14e6355e61ae7112df9dbd7bc49963d5b93fff"]}},"keyBy.js":{"size":155,"offset":"15786799","integrity":{"algorithm":"SHA256","hash":"89acb32368af06c3e7daf245d9649f808e9b7ea95d37c1462d98922094a55bbd","blockSize":4194304,"blocks":["89acb32368af06c3e7daf245d9649f808e9b7ea95d37c1462d98922094a55bbd"]}},"keys.js":{"size":181,"offset":"15786954","integrity":{"algorithm":"SHA256","hash":"3680a10d7436e002a0014fb011c6aed82c3d81068ebb4722f145d8019beccafe","blockSize":4194304,"blocks":["3680a10d7436e002a0014fb011c6aed82c3d81068ebb4722f145d8019beccafe"]}},"keysIn.js":{"size":185,"offset":"15787135","integrity":{"algorithm":"SHA256","hash":"22eb871424c95d9f33de0d606f92baef7742233980c8e6a36f57aab0be821c5e","blockSize":4194304,"blocks":["22eb871424c95d9f33de0d606f92baef7742233980c8e6a36f57aab0be821c5e"]}},"lang.js":{"size":82,"offset":"15787320","integrity":{"algorithm":"SHA256","hash":"1420b2e4f75873a3082a2b278502b163876e59c1d877d733fe598c1c4fc702c9","blockSize":4194304,"blocks":["1420b2e4f75873a3082a2b278502b163876e59c1d877d733fe598c1c4fc702c9"]}},"last.js":{"size":181,"offset":"15787402","integrity":{"algorithm":"SHA256","hash":"a92e6fb47ed90b27a863d486f2c50162917bb4b8e4837aedbd2a6597516cea2f","blockSize":4194304,"blocks":["a92e6fb47ed90b27a863d486f2c50162917bb4b8e4837aedbd2a6597516cea2f"]}},"lastIndexOf.js":{"size":167,"offset":"15787583","integrity":{"algorithm":"SHA256","hash":"5cc5f373f6317b85e98b92f454175df1f16e73821120ab892e64c9d095ae0edd","blockSize":4194304,"blocks":["5cc5f373f6317b85e98b92f454175df1f16e73821120ab892e64c9d095ae0edd"]}},"lastIndexOfFrom.js":{"size":171,"offset":"15787750","integrity":{"algorithm":"SHA256","hash":"3d5e3249aa1b985fdfb0fe3c3c4bcf3299ad926448087c64738cb5a76cc82f13","blockSize":4194304,"blocks":["3d5e3249aa1b985fdfb0fe3c3c4bcf3299ad926448087c64738cb5a76cc82f13"]}},"lowerCase.js":{"size":191,"offset":"15787921","integrity":{"algorithm":"SHA256","hash":"0682bfdab9d314857ad56209acdcc49573fbb1f646bfd8a909147ee83d83bd53","blockSize":4194304,"blocks":["0682bfdab9d314857ad56209acdcc49573fbb1f646bfd8a909147ee83d83bd53"]}},"lowerFirst.js":{"size":193,"offset":"15788112","integrity":{"algorithm":"SHA256","hash":"1d3fb88a75d26a0ed82e44a01845e4386d72208ac88253d5411c1ac03ed629f4","blockSize":4194304,"blocks":["1d3fb88a75d26a0ed82e44a01845e4386d72208ac88253d5411c1ac03ed629f4"]}},"lt.js":{"size":149,"offset":"15788305","integrity":{"algorithm":"SHA256","hash":"38933af74c045b82cde125c6aff64f084b9e446683b11b12f5896a2ebad98152","blockSize":4194304,"blocks":["38933af74c045b82cde125c6aff64f084b9e446683b11b12f5896a2ebad98152"]}},"lte.js":{"size":151,"offset":"15788454","integrity":{"algorithm":"SHA256","hash":"f8f754e9bad8026112c4f1f49b81d8d7ed7d510c2e142e13ce945af1dc6de302","blockSize":4194304,"blocks":["f8f754e9bad8026112c4f1f49b81d8d7ed7d510c2e142e13ce945af1dc6de302"]}},"map.js":{"size":151,"offset":"15788605","integrity":{"algorithm":"SHA256","hash":"f8fa4e425b005aadd548a1bddb7ddf9a2804cf5f6133b617a38399d7139b921a","blockSize":4194304,"blocks":["f8fa4e425b005aadd548a1bddb7ddf9a2804cf5f6133b617a38399d7139b921a"]}},"mapKeys.js":{"size":159,"offset":"15788756","integrity":{"algorithm":"SHA256","hash":"f04c9da9e2cd680401a38852e8615272429978c84ca00306c0a80547c892fc95","blockSize":4194304,"blocks":["f04c9da9e2cd680401a38852e8615272429978c84ca00306c0a80547c892fc95"]}},"mapValues.js":{"size":163,"offset":"15788915","integrity":{"algorithm":"SHA256","hash":"8351e1ab568b29facb65230979d2e0ba4107df6aa8dba8ca2629e7fc471af93e","blockSize":4194304,"blocks":["8351e1ab568b29facb65230979d2e0ba4107df6aa8dba8ca2629e7fc471af93e"]}},"matches.js":{"size":39,"offset":"15789078","integrity":{"algorithm":"SHA256","hash":"c148011a1334aad49cc4fa8700a5395794ca325cf2e0284c9853890311813ea0","blockSize":4194304,"blocks":["c148011a1334aad49cc4fa8700a5395794ca325cf2e0284c9853890311813ea0"]}},"matchesProperty.js":{"size":175,"offset":"15789117","integrity":{"algorithm":"SHA256","hash":"5a36c1946ef23e1419c38cb1feb953bd80cbe04cce27581f459822ed728e2836","blockSize":4194304,"blocks":["5a36c1946ef23e1419c38cb1feb953bd80cbe04cce27581f459822ed728e2836"]}},"math.js":{"size":82,"offset":"15789292","integrity":{"algorithm":"SHA256","hash":"77c6b066ff745c5433e347c90e3e4543b3a263373ead04b7b81b9d5ad221886f","blockSize":4194304,"blocks":["77c6b066ff745c5433e347c90e3e4543b3a263373ead04b7b81b9d5ad221886f"]}},"max.js":{"size":179,"offset":"15789374","integrity":{"algorithm":"SHA256","hash":"17ec310091c1daed3477d7b515809231b0e347221e52b1e212b6688b40b155f3","blockSize":4194304,"blocks":["17ec310091c1daed3477d7b515809231b0e347221e52b1e212b6688b40b155f3"]}},"maxBy.js":{"size":155,"offset":"15789553","integrity":{"algorithm":"SHA256","hash":"ab6aa422288be1f8b54bc55de4bc69b05a90f93683d82a3055a5b43d73e16461","blockSize":4194304,"blocks":["ab6aa422288be1f8b54bc55de4bc69b05a90f93683d82a3055a5b43d73e16461"]}},"mean.js":{"size":181,"offset":"15789708","integrity":{"algorithm":"SHA256","hash":"b7e7d219af50932f91db708475c4e2cff820488aeee136b0a1fa130ef145f4e4","blockSize":4194304,"blocks":["b7e7d219af50932f91db708475c4e2cff820488aeee136b0a1fa130ef145f4e4"]}},"meanBy.js":{"size":157,"offset":"15789889","integrity":{"algorithm":"SHA256","hash":"13e26dcec1f8ca909a317cdc2973f4b61ce3844929fbd28646bfa2cd6e1892fc","blockSize":4194304,"blocks":["13e26dcec1f8ca909a317cdc2973f4b61ce3844929fbd28646bfa2cd6e1892fc"]}},"memoize.js":{"size":159,"offset":"15790046","integrity":{"algorithm":"SHA256","hash":"b044c71de1dd987d12b6b363dd4a1b3fc2d2529a3f5e71e70d4640f36dcbb4d1","blockSize":4194304,"blocks":["b044c71de1dd987d12b6b363dd4a1b3fc2d2529a3f5e71e70d4640f36dcbb4d1"]}},"merge.js":{"size":155,"offset":"15790205","integrity":{"algorithm":"SHA256","hash":"2cdc105c7ec694c7cf6f51abd5807224d8479b9c7a5a83695e39ca3bc740c287","blockSize":4194304,"blocks":["2cdc105c7ec694c7cf6f51abd5807224d8479b9c7a5a83695e39ca3bc740c287"]}},"mergeAll.js":{"size":158,"offset":"15790360","integrity":{"algorithm":"SHA256","hash":"59c3b8f860f8c570430d0f09ca7421d99f63465c9711627f0888aeb44f162406","blockSize":4194304,"blocks":["59c3b8f860f8c570430d0f09ca7421d99f63465c9711627f0888aeb44f162406"]}},"mergeAllWith.js":{"size":166,"offset":"15790518","integrity":{"algorithm":"SHA256","hash":"2b2d97dfc35ad56745d358695ba53875bce96ce97b2c883aab4c1a01d57dfeac","blockSize":4194304,"blocks":["2b2d97dfc35ad56745d358695ba53875bce96ce97b2c883aab4c1a01d57dfeac"]}},"mergeWith.js":{"size":163,"offset":"15790684","integrity":{"algorithm":"SHA256","hash":"0835541a64594d2230cbc7af416319cf920a400a152106c3a82cce806ba40027","blockSize":4194304,"blocks":["0835541a64594d2230cbc7af416319cf920a400a152106c3a82cce806ba40027"]}},"method.js":{"size":157,"offset":"15790847","integrity":{"algorithm":"SHA256","hash":"76d2d34ffecda91cc3ba257d5e6e8cecb91cc4d25693bb17a288a914263cae66","blockSize":4194304,"blocks":["76d2d34ffecda91cc3ba257d5e6e8cecb91cc4d25693bb17a288a914263cae66"]}},"methodOf.js":{"size":161,"offset":"15791004","integrity":{"algorithm":"SHA256","hash":"b8a0f1af8c8f413b389b9a4865435e9e561baf9814a8358fb0c40d0e2772c881","blockSize":4194304,"blocks":["b8a0f1af8c8f413b389b9a4865435e9e561baf9814a8358fb0c40d0e2772c881"]}},"min.js":{"size":179,"offset":"15791165","integrity":{"algorithm":"SHA256","hash":"6612945fd3295b741376311618708f2efca748d08ed385b573bcff3ff073e00b","blockSize":4194304,"blocks":["6612945fd3295b741376311618708f2efca748d08ed385b573bcff3ff073e00b"]}},"minBy.js":{"size":155,"offset":"15791344","integrity":{"algorithm":"SHA256","hash":"7730beb9a37031b534c256a9b7af3838efe38d1338a5dfa92fcbda46171ef2e6","blockSize":4194304,"blocks":["7730beb9a37031b534c256a9b7af3838efe38d1338a5dfa92fcbda46171ef2e6"]}},"mixin.js":{"size":155,"offset":"15791499","integrity":{"algorithm":"SHA256","hash":"42b46b05c155ff9bbd9b80075fdd3b10d469f7114f0464f6c86ed3f01a9dd5c0","blockSize":4194304,"blocks":["42b46b05c155ff9bbd9b80075fdd3b10d469f7114f0464f6c86ed3f01a9dd5c0"]}},"multiply.js":{"size":161,"offset":"15791654","integrity":{"algorithm":"SHA256","hash":"395c7861875d1a03d0f345870c489a40c1d1dcb6f15df3b2328beb14be1ef071","blockSize":4194304,"blocks":["395c7861875d1a03d0f345870c489a40c1d1dcb6f15df3b2328beb14be1ef071"]}},"nAry.js":{"size":35,"offset":"15791815","integrity":{"algorithm":"SHA256","hash":"717c257827cf65e692aa347b09b29db1903d65709f5dd9e3627f9ad64aa4efef","blockSize":4194304,"blocks":["717c257827cf65e692aa347b09b29db1903d65709f5dd9e3627f9ad64aa4efef"]}},"negate.js":{"size":185,"offset":"15791850","integrity":{"algorithm":"SHA256","hash":"1a3c40352afe846515cd47bae19ddd23b7cdefe1788d950109145a860e9fb813","blockSize":4194304,"blocks":["1a3c40352afe846515cd47bae19ddd23b7cdefe1788d950109145a860e9fb813"]}},"next.js":{"size":181,"offset":"15792035","integrity":{"algorithm":"SHA256","hash":"370a6f2baa9e5f485774e4002d89279bb4f12b16536dcabae84f1ed399d379e5","blockSize":4194304,"blocks":["370a6f2baa9e5f485774e4002d89279bb4f12b16536dcabae84f1ed399d379e5"]}},"noop.js":{"size":181,"offset":"15792216","integrity":{"algorithm":"SHA256","hash":"1d2e9b4da5a167d47885675bb97ccfe811d7024b944053c87189bba29fd55bfa","blockSize":4194304,"blocks":["1d2e9b4da5a167d47885675bb97ccfe811d7024b944053c87189bba29fd55bfa"]}},"now.js":{"size":179,"offset":"15792397","integrity":{"algorithm":"SHA256","hash":"7c403755403fafa4890b8c714065fcc6e890ab9cff89e9517bb68184f845c6f4","blockSize":4194304,"blocks":["7c403755403fafa4890b8c714065fcc6e890ab9cff89e9517bb68184f845c6f4"]}},"nth.js":{"size":151,"offset":"15792576","integrity":{"algorithm":"SHA256","hash":"29bef88aba7393256d7f37cc3ed286ddbbf6c661aad411318c55ff86608092a8","blockSize":4194304,"blocks":["29bef88aba7393256d7f37cc3ed286ddbbf6c661aad411318c55ff86608092a8"]}},"nthArg.js":{"size":157,"offset":"15792727","integrity":{"algorithm":"SHA256","hash":"28786a3d7ca78c4ac3b2fbbb02995c009016b8a0bde3833953244d0f6897f9d8","blockSize":4194304,"blocks":["28786a3d7ca78c4ac3b2fbbb02995c009016b8a0bde3833953244d0f6897f9d8"]}},"number.js":{"size":84,"offset":"15792884","integrity":{"algorithm":"SHA256","hash":"6de44356b7c01f0ebd6dda9f6bc6a2e867375886e080d43a35e9d60d800a2074","blockSize":4194304,"blocks":["6de44356b7c01f0ebd6dda9f6bc6a2e867375886e080d43a35e9d60d800a2074"]}},"object.js":{"size":84,"offset":"15792968","integrity":{"algorithm":"SHA256","hash":"29ba9750d3ba53f2fe0ec2da71974d22d15441086ac6fd0bc0bb3d03b728c822","blockSize":4194304,"blocks":["29ba9750d3ba53f2fe0ec2da71974d22d15441086ac6fd0bc0bb3d03b728c822"]}},"omit.js":{"size":153,"offset":"15793052","integrity":{"algorithm":"SHA256","hash":"29ba4a605143bc400a967cf81a45942ea844d17ac3739ccbfbeae51040634acd","blockSize":4194304,"blocks":["29ba4a605143bc400a967cf81a45942ea844d17ac3739ccbfbeae51040634acd"]}},"omitAll.js":{"size":36,"offset":"15793205","integrity":{"algorithm":"SHA256","hash":"8278a6048152232e98f1cfa0c489ef7afae26cde11debdd0ec3860e04aa79cb3","blockSize":4194304,"blocks":["8278a6048152232e98f1cfa0c489ef7afae26cde11debdd0ec3860e04aa79cb3"]}},"omitBy.js":{"size":157,"offset":"15793241","integrity":{"algorithm":"SHA256","hash":"cd946abd42e086ff3b42010aabe2543daf7c3bd2dc9294bc5aff4e05931931d7","blockSize":4194304,"blocks":["cd946abd42e086ff3b42010aabe2543daf7c3bd2dc9294bc5aff4e05931931d7"]}},"once.js":{"size":181,"offset":"15793398","integrity":{"algorithm":"SHA256","hash":"6ec976664cc855113c9675f11c06dbcc56fe7c38264c735122ef98338f125897","blockSize":4194304,"blocks":["6ec976664cc855113c9675f11c06dbcc56fe7c38264c735122ef98338f125897"]}},"orderBy.js":{"size":159,"offset":"15793579","integrity":{"algorithm":"SHA256","hash":"23d10df3a9877cd1b48e31132b396b09ae48ba6c0a99a902c42a1be2e3a771f0","blockSize":4194304,"blocks":["23d10df3a9877cd1b48e31132b396b09ae48ba6c0a99a902c42a1be2e3a771f0"]}},"over.js":{"size":153,"offset":"15793738","integrity":{"algorithm":"SHA256","hash":"799f8baa58124b8d128384f202d3c5d73d92f120787a90855779ff39f8490c00","blockSize":4194304,"blocks":["799f8baa58124b8d128384f202d3c5d73d92f120787a90855779ff39f8490c00"]}},"overArgs.js":{"size":161,"offset":"15793891","integrity":{"algorithm":"SHA256","hash":"b16632f7ad0c5293d35c1cae4734ae2ed4242c62e31286bb1514d359c698f95e","blockSize":4194304,"blocks":["b16632f7ad0c5293d35c1cae4734ae2ed4242c62e31286bb1514d359c698f95e"]}},"overEvery.js":{"size":163,"offset":"15794052","integrity":{"algorithm":"SHA256","hash":"4c758a15411ac5a74fac9ff0bce7d59df4eb2103f069389d8eec17cfbc104672","blockSize":4194304,"blocks":["4c758a15411ac5a74fac9ff0bce7d59df4eb2103f069389d8eec17cfbc104672"]}},"overSome.js":{"size":161,"offset":"15794215","integrity":{"algorithm":"SHA256","hash":"2d3add594fb7bb2eb717ae0b7bf2856233e2d06b7bd0e7f05b9cd04aeec45749","blockSize":4194304,"blocks":["2d3add594fb7bb2eb717ae0b7bf2856233e2d06b7bd0e7f05b9cd04aeec45749"]}},"pad.js":{"size":151,"offset":"15794376","integrity":{"algorithm":"SHA256","hash":"3717864a100e5c0c4824e8898fb78aaff375fd43392624c6051d702db7066f93","blockSize":4194304,"blocks":["3717864a100e5c0c4824e8898fb78aaff375fd43392624c6051d702db7066f93"]}},"padChars.js":{"size":156,"offset":"15794527","integrity":{"algorithm":"SHA256","hash":"864f03b60b63f0b4361829087b129b5323e02b101f34d80d2fc0a07a458b5c4e","blockSize":4194304,"blocks":["864f03b60b63f0b4361829087b129b5323e02b101f34d80d2fc0a07a458b5c4e"]}},"padCharsEnd.js":{"size":162,"offset":"15794683","integrity":{"algorithm":"SHA256","hash":"c2f9664d212d91db41261ac3403b6a2f12d9a129bea368b1ee38e06659f4be0a","blockSize":4194304,"blocks":["c2f9664d212d91db41261ac3403b6a2f12d9a129bea368b1ee38e06659f4be0a"]}},"padCharsStart.js":{"size":166,"offset":"15794845","integrity":{"algorithm":"SHA256","hash":"de9ca597ab7b3c04216125b532260f78be5991493a23f08b40f7a19d370ea95b","blockSize":4194304,"blocks":["de9ca597ab7b3c04216125b532260f78be5991493a23f08b40f7a19d370ea95b"]}},"padEnd.js":{"size":157,"offset":"15795011","integrity":{"algorithm":"SHA256","hash":"37f0edbb019754ba8333e71efba0d1bd9f2995c315b7e268f3682dc2093da795","blockSize":4194304,"blocks":["37f0edbb019754ba8333e71efba0d1bd9f2995c315b7e268f3682dc2093da795"]}},"padStart.js":{"size":161,"offset":"15795168","integrity":{"algorithm":"SHA256","hash":"5e56241d6ca92788742527759fac2cd7ed6a282e178a1bcad5db62e9fcbdfa97","blockSize":4194304,"blocks":["5e56241d6ca92788742527759fac2cd7ed6a282e178a1bcad5db62e9fcbdfa97"]}},"parseInt.js":{"size":161,"offset":"15795329","integrity":{"algorithm":"SHA256","hash":"ab4f79db34f3a071053464b7a73be3a9c8ec5fcc61f1692d107ddcf21bc80390","blockSize":4194304,"blocks":["ab4f79db34f3a071053464b7a73be3a9c8ec5fcc61f1692d107ddcf21bc80390"]}},"partial.js":{"size":159,"offset":"15795490","integrity":{"algorithm":"SHA256","hash":"d6a4d4b539ccb521cda94cb2f73d94c5bd75fc1460f15a5b4e98afdd0bdd5db0","blockSize":4194304,"blocks":["d6a4d4b539ccb521cda94cb2f73d94c5bd75fc1460f15a5b4e98afdd0bdd5db0"]}},"partialRight.js":{"size":169,"offset":"15795649","integrity":{"algorithm":"SHA256","hash":"4c2ee47a61f7c3a26c6db7e9c82e0727009ca6ab11233cdf4d029d827b35b54d","blockSize":4194304,"blocks":["4c2ee47a61f7c3a26c6db7e9c82e0727009ca6ab11233cdf4d029d827b35b54d"]}},"partition.js":{"size":163,"offset":"15795818","integrity":{"algorithm":"SHA256","hash":"49e1e7a75cb69ece95044c696dccdc9cf935a761312c35c179af74da91f118d3","blockSize":4194304,"blocks":["49e1e7a75cb69ece95044c696dccdc9cf935a761312c35c179af74da91f118d3"]}},"path.js":{"size":35,"offset":"15795981","integrity":{"algorithm":"SHA256","hash":"af3533640c8af8f6804e9df53cabeac7767cddf1a619236e7226a784a2e9101a","blockSize":4194304,"blocks":["af3533640c8af8f6804e9df53cabeac7767cddf1a619236e7226a784a2e9101a"]}},"pathEq.js":{"size":47,"offset":"15796016","integrity":{"algorithm":"SHA256","hash":"e0d5e4b02fdb3d324aa5e10b951acdd185efd13f0d2fefbe3517c480ac84193b","blockSize":4194304,"blocks":["e0d5e4b02fdb3d324aa5e10b951acdd185efd13f0d2fefbe3517c480ac84193b"]}},"pathOr.js":{"size":37,"offset":"15796063","integrity":{"algorithm":"SHA256","hash":"632ce7415594470bd7e1b3af48c916401e4f5c2a486536974a60f4a7dc3a10a8","blockSize":4194304,"blocks":["632ce7415594470bd7e1b3af48c916401e4f5c2a486536974a60f4a7dc3a10a8"]}},"paths.js":{"size":34,"offset":"15796100","integrity":{"algorithm":"SHA256","hash":"a29f24c260492e76ea238aa68ebcb18806e6b4da1378a1703072f882f632251d","blockSize":4194304,"blocks":["a29f24c260492e76ea238aa68ebcb18806e6b4da1378a1703072f882f632251d"]}},"pick.js":{"size":153,"offset":"15796134","integrity":{"algorithm":"SHA256","hash":"9210072d0a7110c9b9a9e9aa4c5d6885c3bc62cf22eaf2059f2c3f4fbfa6cdb2","blockSize":4194304,"blocks":["9210072d0a7110c9b9a9e9aa4c5d6885c3bc62cf22eaf2059f2c3f4fbfa6cdb2"]}},"pickAll.js":{"size":36,"offset":"15796287","integrity":{"algorithm":"SHA256","hash":"ea2d0c68226ae4ad2aa504cb23468a03d329f02dd3cfdc029c4f486d4e2287df","blockSize":4194304,"blocks":["ea2d0c68226ae4ad2aa504cb23468a03d329f02dd3cfdc029c4f486d4e2287df"]}},"pickBy.js":{"size":157,"offset":"15796323","integrity":{"algorithm":"SHA256","hash":"e7b5e1f39fea903a19b83b66e7e954e9d5282408ede77507d305a375ee664b04","blockSize":4194304,"blocks":["e7b5e1f39fea903a19b83b66e7e954e9d5282408ede77507d305a375ee664b04"]}},"pipe.js":{"size":36,"offset":"15796480","integrity":{"algorithm":"SHA256","hash":"a1420273debc2c3788b93e9405e4372e60f49a0b417e32ca9516b8d38a69bc8c","blockSize":4194304,"blocks":["a1420273debc2c3788b93e9405e4372e60f49a0b417e32ca9516b8d38a69bc8c"]}},"placeholder.js":{"size":105,"offset":"15796516","integrity":{"algorithm":"SHA256","hash":"0686224e4e0d3eef51f382dd106c88d2ab9a791739c78a3478e364f0668a01ca","blockSize":4194304,"blocks":["0686224e4e0d3eef51f382dd106c88d2ab9a791739c78a3478e364f0668a01ca"]}},"plant.js":{"size":183,"offset":"15796621","integrity":{"algorithm":"SHA256","hash":"e05ffa6e15cafac47d3fc456dd8c92e911403bab60f8e09042fd1bda428a4b9d","blockSize":4194304,"blocks":["e05ffa6e15cafac47d3fc456dd8c92e911403bab60f8e09042fd1bda428a4b9d"]}},"pluck.js":{"size":35,"offset":"15796804","integrity":{"algorithm":"SHA256","hash":"bd5b90167743a78b557de2f53815094af1f9fe67703fade95c62dec43e47535e","blockSize":4194304,"blocks":["bd5b90167743a78b557de2f53815094af1f9fe67703fade95c62dec43e47535e"]}},"prop.js":{"size":35,"offset":"15796839","integrity":{"algorithm":"SHA256","hash":"af3533640c8af8f6804e9df53cabeac7767cddf1a619236e7226a784a2e9101a","blockSize":4194304,"blocks":["af3533640c8af8f6804e9df53cabeac7767cddf1a619236e7226a784a2e9101a"]}},"propEq.js":{"size":47,"offset":"15796874","integrity":{"algorithm":"SHA256","hash":"e0d5e4b02fdb3d324aa5e10b951acdd185efd13f0d2fefbe3517c480ac84193b","blockSize":4194304,"blocks":["e0d5e4b02fdb3d324aa5e10b951acdd185efd13f0d2fefbe3517c480ac84193b"]}},"property.js":{"size":35,"offset":"15796921","integrity":{"algorithm":"SHA256","hash":"af3533640c8af8f6804e9df53cabeac7767cddf1a619236e7226a784a2e9101a","blockSize":4194304,"blocks":["af3533640c8af8f6804e9df53cabeac7767cddf1a619236e7226a784a2e9101a"]}},"propertyOf.js":{"size":158,"offset":"15796956","integrity":{"algorithm":"SHA256","hash":"759a154bf5b8e67ad3274f15d12bac048079e055f62b9fa27538e366ef32ea43","blockSize":4194304,"blocks":["759a154bf5b8e67ad3274f15d12bac048079e055f62b9fa27538e366ef32ea43"]}},"propOr.js":{"size":37,"offset":"15797114","integrity":{"algorithm":"SHA256","hash":"632ce7415594470bd7e1b3af48c916401e4f5c2a486536974a60f4a7dc3a10a8","blockSize":4194304,"blocks":["632ce7415594470bd7e1b3af48c916401e4f5c2a486536974a60f4a7dc3a10a8"]}},"props.js":{"size":34,"offset":"15797151","integrity":{"algorithm":"SHA256","hash":"a29f24c260492e76ea238aa68ebcb18806e6b4da1378a1703072f882f632251d","blockSize":4194304,"blocks":["a29f24c260492e76ea238aa68ebcb18806e6b4da1378a1703072f882f632251d"]}},"pull.js":{"size":153,"offset":"15797185","integrity":{"algorithm":"SHA256","hash":"2c4de689a3eb62ac2f6debbb1f8159d30e42079b9f72cf4dc35b2ea18defdf0b","blockSize":4194304,"blocks":["2c4de689a3eb62ac2f6debbb1f8159d30e42079b9f72cf4dc35b2ea18defdf0b"]}},"pullAll.js":{"size":159,"offset":"15797338","integrity":{"algorithm":"SHA256","hash":"5ab74f365a631229abbb23377331b36b3b11fc1f64776bf5b2c18709cfccd4ea","blockSize":4194304,"blocks":["5ab74f365a631229abbb23377331b36b3b11fc1f64776bf5b2c18709cfccd4ea"]}},"pullAllBy.js":{"size":163,"offset":"15797497","integrity":{"algorithm":"SHA256","hash":"dd5efdc3a98ca91a7b2e42b967080b23baad420607a2cd097a4d0da8d7049c82","blockSize":4194304,"blocks":["dd5efdc3a98ca91a7b2e42b967080b23baad420607a2cd097a4d0da8d7049c82"]}},"pullAllWith.js":{"size":167,"offset":"15797660","integrity":{"algorithm":"SHA256","hash":"9da6025ff2d017e40bc9dd98ff48b6aa371b0072c4cd1b7b2301a9ca18a9fd26","blockSize":4194304,"blocks":["9da6025ff2d017e40bc9dd98ff48b6aa371b0072c4cd1b7b2301a9ca18a9fd26"]}},"pullAt.js":{"size":157,"offset":"15797827","integrity":{"algorithm":"SHA256","hash":"126d20046cce500d3f60ab2fafeb7fc8aad62e051ad6a3d188ea86cd74812d6d","blockSize":4194304,"blocks":["126d20046cce500d3f60ab2fafeb7fc8aad62e051ad6a3d188ea86cd74812d6d"]}},"random.js":{"size":157,"offset":"15797984","integrity":{"algorithm":"SHA256","hash":"aa57b43c65460457e18bf044a388ba41d5f265f11047d3623d1fb975b66527fc","blockSize":4194304,"blocks":["aa57b43c65460457e18bf044a388ba41d5f265f11047d3623d1fb975b66527fc"]}},"range.js":{"size":155,"offset":"15798141","integrity":{"algorithm":"SHA256","hash":"c84496a7bbc218f1f3b8f00cb0574f499cab44ce15208719c2a6e12098538cc8","blockSize":4194304,"blocks":["c84496a7bbc218f1f3b8f00cb0574f499cab44ce15208719c2a6e12098538cc8"]}},"rangeRight.js":{"size":165,"offset":"15798296","integrity":{"algorithm":"SHA256","hash":"e54606ca2fa64707341c956e43fc2e0926037a5621bc98442987ca2fd5bcf6aa","blockSize":4194304,"blocks":["e54606ca2fa64707341c956e43fc2e0926037a5621bc98442987ca2fd5bcf6aa"]}},"rangeStep.js":{"size":159,"offset":"15798461","integrity":{"algorithm":"SHA256","hash":"ca31a6c83cc1398b0ae4526da6bab406d1ab74e1a5882221d1c3008ee10a26c3","blockSize":4194304,"blocks":["ca31a6c83cc1398b0ae4526da6bab406d1ab74e1a5882221d1c3008ee10a26c3"]}},"rangeStepRight.js":{"size":169,"offset":"15798620","integrity":{"algorithm":"SHA256","hash":"17ed1b75a3895e5a8821f0eea7ac5f39c6a41e08db5f7e065b16d645cfb0fcbd","blockSize":4194304,"blocks":["17ed1b75a3895e5a8821f0eea7ac5f39c6a41e08db5f7e065b16d645cfb0fcbd"]}},"rearg.js":{"size":155,"offset":"15798789","integrity":{"algorithm":"SHA256","hash":"612d9c40ad7c389e64308819b5683a03a00969a544a077a6c3d27430ec5b0075","blockSize":4194304,"blocks":["612d9c40ad7c389e64308819b5683a03a00969a544a077a6c3d27430ec5b0075"]}},"reduce.js":{"size":157,"offset":"15798944","integrity":{"algorithm":"SHA256","hash":"4b8e868a48492f0055a354f3a8f00e1e658877e5f8fc877b86be292904ac4638","blockSize":4194304,"blocks":["4b8e868a48492f0055a354f3a8f00e1e658877e5f8fc877b86be292904ac4638"]}},"reduceRight.js":{"size":167,"offset":"15799101","integrity":{"algorithm":"SHA256","hash":"b38c62161adf5fe38e303e967c50fab284638424efb13e75ba6c158cd2600c49","blockSize":4194304,"blocks":["b38c62161adf5fe38e303e967c50fab284638424efb13e75ba6c158cd2600c49"]}},"reject.js":{"size":157,"offset":"15799268","integrity":{"algorithm":"SHA256","hash":"800ef615683579c2cd45ede51c598f2b82d64848bff48a98c9d703bb00f72d3c","blockSize":4194304,"blocks":["800ef615683579c2cd45ede51c598f2b82d64848bff48a98c9d703bb00f72d3c"]}},"remove.js":{"size":157,"offset":"15799425","integrity":{"algorithm":"SHA256","hash":"3062374a284b8278ecd15c09a687f47ea23944fff933211bcafe20f58669e8bc","blockSize":4194304,"blocks":["3062374a284b8278ecd15c09a687f47ea23944fff933211bcafe20f58669e8bc"]}},"repeat.js":{"size":157,"offset":"15799582","integrity":{"algorithm":"SHA256","hash":"bb5ac1b0e02ae3154064171eb99e1edfaaf8babe02a413cbd77f90332a296398","blockSize":4194304,"blocks":["bb5ac1b0e02ae3154064171eb99e1edfaaf8babe02a413cbd77f90332a296398"]}},"replace.js":{"size":159,"offset":"15799739","integrity":{"algorithm":"SHA256","hash":"5034ff1bb5748e0504e86571f489d5ab375500f210e81f8a9f8a373713d92538","blockSize":4194304,"blocks":["5034ff1bb5748e0504e86571f489d5ab375500f210e81f8a9f8a373713d92538"]}},"rest.js":{"size":153,"offset":"15799898","integrity":{"algorithm":"SHA256","hash":"11e6f137887aee82ba2928104119849b30043ffe65d51b4e9c8651b56645fa19","blockSize":4194304,"blocks":["11e6f137887aee82ba2928104119849b30043ffe65d51b4e9c8651b56645fa19"]}},"restFrom.js":{"size":157,"offset":"15800051","integrity":{"algorithm":"SHA256","hash":"4413d96017359453b794a4f22445f49227ea6ff7f7bc4a926c8cd86e704cba61","blockSize":4194304,"blocks":["4413d96017359453b794a4f22445f49227ea6ff7f7bc4a926c8cd86e704cba61"]}},"result.js":{"size":157,"offset":"15800208","integrity":{"algorithm":"SHA256","hash":"bc708695ad723228f8e0602afd7ab945e0b46963463e0e534031a191efc99a5d","blockSize":4194304,"blocks":["bc708695ad723228f8e0602afd7ab945e0b46963463e0e534031a191efc99a5d"]}},"reverse.js":{"size":159,"offset":"15800365","integrity":{"algorithm":"SHA256","hash":"1a4b3d92f98d7daca76488ffb964294628e97881af44752514f0f3559b9de4d3","blockSize":4194304,"blocks":["1a4b3d92f98d7daca76488ffb964294628e97881af44752514f0f3559b9de4d3"]}},"round.js":{"size":155,"offset":"15800524","integrity":{"algorithm":"SHA256","hash":"8b082141b57415f7c2ecc20acc0af1f6940f13486f3296c18ed0365846f9dd53","blockSize":4194304,"blocks":["8b082141b57415f7c2ecc20acc0af1f6940f13486f3296c18ed0365846f9dd53"]}},"sample.js":{"size":185,"offset":"15800679","integrity":{"algorithm":"SHA256","hash":"409fe1789fb11e86f22037e77a42c4ca2b226dabd6202b05946310d2b7bdb1ee","blockSize":4194304,"blocks":["409fe1789fb11e86f22037e77a42c4ca2b226dabd6202b05946310d2b7bdb1ee"]}},"sampleSize.js":{"size":165,"offset":"15800864","integrity":{"algorithm":"SHA256","hash":"a343dc90ae4c2965ea65eaf67dacc015f6331ec5aec2f0617e7d7c00d14bb162","blockSize":4194304,"blocks":["a343dc90ae4c2965ea65eaf67dacc015f6331ec5aec2f0617e7d7c00d14bb162"]}},"seq.js":{"size":81,"offset":"15801029","integrity":{"algorithm":"SHA256","hash":"1459db677d74ce8a55a8c84786384ee9d808990d88e1cc91932829abc9849d08","blockSize":4194304,"blocks":["1459db677d74ce8a55a8c84786384ee9d808990d88e1cc91932829abc9849d08"]}},"set.js":{"size":151,"offset":"15801110","integrity":{"algorithm":"SHA256","hash":"e8b50ac79553763824fbca927c7f74817351b10521cac43715334da06246ed42","blockSize":4194304,"blocks":["e8b50ac79553763824fbca927c7f74817351b10521cac43715334da06246ed42"]}},"setWith.js":{"size":159,"offset":"15801261","integrity":{"algorithm":"SHA256","hash":"b934610624c050f52604d7599b558bd4de4da3a9dbdbd1c6c0f57b2ffad91fb0","blockSize":4194304,"blocks":["b934610624c050f52604d7599b558bd4de4da3a9dbdbd1c6c0f57b2ffad91fb0"]}},"shuffle.js":{"size":187,"offset":"15801420","integrity":{"algorithm":"SHA256","hash":"2bf2680e3fb93464aa8471bb897837453776196e23f3f8d755f42b20e330f68e","blockSize":4194304,"blocks":["2bf2680e3fb93464aa8471bb897837453776196e23f3f8d755f42b20e330f68e"]}},"size.js":{"size":181,"offset":"15801607","integrity":{"algorithm":"SHA256","hash":"2779dff1dffb0e5a954234fe1e991d7f21e88de0f0603b48c68b933da407dcfc","blockSize":4194304,"blocks":["2779dff1dffb0e5a954234fe1e991d7f21e88de0f0603b48c68b933da407dcfc"]}},"slice.js":{"size":155,"offset":"15801788","integrity":{"algorithm":"SHA256","hash":"35d674cf524295012acf221a0b08f3d74e5c1c9ac351d17457100f64df466dca","blockSize":4194304,"blocks":["35d674cf524295012acf221a0b08f3d74e5c1c9ac351d17457100f64df466dca"]}},"snakeCase.js":{"size":191,"offset":"15801943","integrity":{"algorithm":"SHA256","hash":"b5a7ba201da4a53bf2c6a79abc3e611fc966286bdaade7525dc1d5714d4d860c","blockSize":4194304,"blocks":["b5a7ba201da4a53bf2c6a79abc3e611fc966286bdaade7525dc1d5714d4d860c"]}},"some.js":{"size":153,"offset":"15802134","integrity":{"algorithm":"SHA256","hash":"03a8175c1521ab8872f54182938144c59059544f7d94b5501070d624620e9bdc","blockSize":4194304,"blocks":["03a8175c1521ab8872f54182938144c59059544f7d94b5501070d624620e9bdc"]}},"sortBy.js":{"size":157,"offset":"15802287","integrity":{"algorithm":"SHA256","hash":"f537781271ebbe8249740dd9f25cee2766212ad46733c581564aa5cf574efb63","blockSize":4194304,"blocks":["f537781271ebbe8249740dd9f25cee2766212ad46733c581564aa5cf574efb63"]}},"sortedIndex.js":{"size":167,"offset":"15802444","integrity":{"algorithm":"SHA256","hash":"bf51789895d394ee09dcd71ab81b91a7cc9c8189ddcfc0dd8a51f19df9d19aec","blockSize":4194304,"blocks":["bf51789895d394ee09dcd71ab81b91a7cc9c8189ddcfc0dd8a51f19df9d19aec"]}},"sortedIndexBy.js":{"size":171,"offset":"15802611","integrity":{"algorithm":"SHA256","hash":"b23f7c5812efb9bdcd7147b2b0ff1d86584101e8bcf5a22299f5ba6c33572b64","blockSize":4194304,"blocks":["b23f7c5812efb9bdcd7147b2b0ff1d86584101e8bcf5a22299f5ba6c33572b64"]}},"sortedIndexOf.js":{"size":171,"offset":"15802782","integrity":{"algorithm":"SHA256","hash":"76a8a69a00b3a942c1dc51619d1d1f3b046d34a408f785a78ba9269cf123503c","blockSize":4194304,"blocks":["76a8a69a00b3a942c1dc51619d1d1f3b046d34a408f785a78ba9269cf123503c"]}},"sortedLastIndex.js":{"size":175,"offset":"15802953","integrity":{"algorithm":"SHA256","hash":"9c4489d6266ac9878c0fdb2d52556289d0e8fb6f54ba4490f1e13f240630191b","blockSize":4194304,"blocks":["9c4489d6266ac9878c0fdb2d52556289d0e8fb6f54ba4490f1e13f240630191b"]}},"sortedLastIndexBy.js":{"size":179,"offset":"15803128","integrity":{"algorithm":"SHA256","hash":"2217c2af99bc94488b15d23d5de41143ef212c4aeba1d71bf98fa88b04f98ba0","blockSize":4194304,"blocks":["2217c2af99bc94488b15d23d5de41143ef212c4aeba1d71bf98fa88b04f98ba0"]}},"sortedLastIndexOf.js":{"size":179,"offset":"15803307","integrity":{"algorithm":"SHA256","hash":"19a9d4dad22a977b3ec1d4d456cf7fac8a8f730aae14f1e3122b25e196e810ea","blockSize":4194304,"blocks":["19a9d4dad22a977b3ec1d4d456cf7fac8a8f730aae14f1e3122b25e196e810ea"]}},"sortedUniq.js":{"size":193,"offset":"15803486","integrity":{"algorithm":"SHA256","hash":"adc2f20aa4bf71a061e958b77cabb82e91594900680735e6a6b61b63daede1c3","blockSize":4194304,"blocks":["adc2f20aa4bf71a061e958b77cabb82e91594900680735e6a6b61b63daede1c3"]}},"sortedUniqBy.js":{"size":169,"offset":"15803679","integrity":{"algorithm":"SHA256","hash":"950e1853e050467e5b05f86f88413d7521f153ff8b2641d62ffabc05d1e11b48","blockSize":4194304,"blocks":["950e1853e050467e5b05f86f88413d7521f153ff8b2641d62ffabc05d1e11b48"]}},"split.js":{"size":155,"offset":"15803848","integrity":{"algorithm":"SHA256","hash":"1360a39c7683f0eeb3077247323f13480def6ba0a9adc7630e9d869ccc12020c","blockSize":4194304,"blocks":["1360a39c7683f0eeb3077247323f13480def6ba0a9adc7630e9d869ccc12020c"]}},"spread.js":{"size":157,"offset":"15804003","integrity":{"algorithm":"SHA256","hash":"6b0b48b7d36acdc94303fb3aa0396a72f9fc73ecbe1da14326ffb6566ef39b1f","blockSize":4194304,"blocks":["6b0b48b7d36acdc94303fb3aa0396a72f9fc73ecbe1da14326ffb6566ef39b1f"]}},"spreadFrom.js":{"size":161,"offset":"15804160","integrity":{"algorithm":"SHA256","hash":"14814da1422c50b105ac1bbcb1212cefa495d47137eff1277fe28b73b1cb811b","blockSize":4194304,"blocks":["14814da1422c50b105ac1bbcb1212cefa495d47137eff1277fe28b73b1cb811b"]}},"startCase.js":{"size":191,"offset":"15804321","integrity":{"algorithm":"SHA256","hash":"3c695a0d48b5a274ad3712c88823c78940a5d47cc28d57736b2ed1e8b159f275","blockSize":4194304,"blocks":["3c695a0d48b5a274ad3712c88823c78940a5d47cc28d57736b2ed1e8b159f275"]}},"startsWith.js":{"size":165,"offset":"15804512","integrity":{"algorithm":"SHA256","hash":"ffd58c9f8b88d628660f2286859cb72337976b3b73fe24239e096f7730c5d0f3","blockSize":4194304,"blocks":["ffd58c9f8b88d628660f2286859cb72337976b3b73fe24239e096f7730c5d0f3"]}},"string.js":{"size":84,"offset":"15804677","integrity":{"algorithm":"SHA256","hash":"0ada451742ba38268127188ce2e99199a67b7216630b526d37db6ad05498a69f","blockSize":4194304,"blocks":["0ada451742ba38268127188ce2e99199a67b7216630b526d37db6ad05498a69f"]}},"stubArray.js":{"size":191,"offset":"15804761","integrity":{"algorithm":"SHA256","hash":"a0b59e15162519115317352d2e334617283c86ba5c24aacd6e5bdb60f59fd38e","blockSize":4194304,"blocks":["a0b59e15162519115317352d2e334617283c86ba5c24aacd6e5bdb60f59fd38e"]}},"stubFalse.js":{"size":191,"offset":"15804952","integrity":{"algorithm":"SHA256","hash":"8347388895d251f5cdf9b6e6c51d42c6f8f941359bd43e25324020811b807967","blockSize":4194304,"blocks":["8347388895d251f5cdf9b6e6c51d42c6f8f941359bd43e25324020811b807967"]}},"stubObject.js":{"size":193,"offset":"15805143","integrity":{"algorithm":"SHA256","hash":"15e339d8b8d92549fc8bc83a6deeb1cc8c6861d78edf9b07f96c6d54b9587c3f","blockSize":4194304,"blocks":["15e339d8b8d92549fc8bc83a6deeb1cc8c6861d78edf9b07f96c6d54b9587c3f"]}},"stubString.js":{"size":193,"offset":"15805336","integrity":{"algorithm":"SHA256","hash":"718f6510df936089163354a759c68f3b8729dc8e3c3bcc3ed7d4fad6556266f1","blockSize":4194304,"blocks":["718f6510df936089163354a759c68f3b8729dc8e3c3bcc3ed7d4fad6556266f1"]}},"stubTrue.js":{"size":189,"offset":"15805529","integrity":{"algorithm":"SHA256","hash":"6d066bab6606981d4e700c2b8760b0320f2d613d24cdf5cda762e99e19cc08d0","blockSize":4194304,"blocks":["6d066bab6606981d4e700c2b8760b0320f2d613d24cdf5cda762e99e19cc08d0"]}},"subtract.js":{"size":161,"offset":"15805718","integrity":{"algorithm":"SHA256","hash":"5c6f2ad6b4faf766927b5e6c6c30b282561be98ef8fd4c0ee7ff4559a8b3550b","blockSize":4194304,"blocks":["5c6f2ad6b4faf766927b5e6c6c30b282561be98ef8fd4c0ee7ff4559a8b3550b"]}},"sum.js":{"size":179,"offset":"15805879","integrity":{"algorithm":"SHA256","hash":"a3b8e7dc0c62bc147fecae2e7c0bd44c380ae3f1e04259e922fb081d042c202b","blockSize":4194304,"blocks":["a3b8e7dc0c62bc147fecae2e7c0bd44c380ae3f1e04259e922fb081d042c202b"]}},"sumBy.js":{"size":155,"offset":"15806058","integrity":{"algorithm":"SHA256","hash":"06a5cc8fa1fb3aad1fb17e0bc15399a7ad93296c21de6902cdd3b878abba2e5c","blockSize":4194304,"blocks":["06a5cc8fa1fb3aad1fb17e0bc15399a7ad93296c21de6902cdd3b878abba2e5c"]}},"symmetricDifference.js":{"size":35,"offset":"15806213","integrity":{"algorithm":"SHA256","hash":"38fd9ee5c3e11e5c3cfec5f822fee3cbe302136c44ae28eae23962f644d91759","blockSize":4194304,"blocks":["38fd9ee5c3e11e5c3cfec5f822fee3cbe302136c44ae28eae23962f644d91759"]}},"symmetricDifferenceBy.js":{"size":37,"offset":"15806248","integrity":{"algorithm":"SHA256","hash":"1285be5dfe80916bbd44ce623227f5b67f93ee91fa31e3379a657f45a0c85d5e","blockSize":4194304,"blocks":["1285be5dfe80916bbd44ce623227f5b67f93ee91fa31e3379a657f45a0c85d5e"]}},"symmetricDifferenceWith.js":{"size":39,"offset":"15806285","integrity":{"algorithm":"SHA256","hash":"f8363e90a48f9bba90f7052c2cebc4856572fc64be3117c8417c24dbcc184b4b","blockSize":4194304,"blocks":["f8363e90a48f9bba90f7052c2cebc4856572fc64be3117c8417c24dbcc184b4b"]}},"T.js":{"size":40,"offset":"15806324","integrity":{"algorithm":"SHA256","hash":"46da2a184b61b5875b44ea61f4004d12bb0981bd0c03ddf7707ac41e7892d50a","blockSize":4194304,"blocks":["46da2a184b61b5875b44ea61f4004d12bb0981bd0c03ddf7707ac41e7892d50a"]}},"tail.js":{"size":181,"offset":"15806364","integrity":{"algorithm":"SHA256","hash":"774379829c01dab999fbb361a2714592bb5b58093125e08aa9a5a0f7c9d37eef","blockSize":4194304,"blocks":["774379829c01dab999fbb361a2714592bb5b58093125e08aa9a5a0f7c9d37eef"]}},"take.js":{"size":153,"offset":"15806545","integrity":{"algorithm":"SHA256","hash":"871e7b440d865b07222109271832a5e69b4b88d336352e7fc569974938eeb493","blockSize":4194304,"blocks":["871e7b440d865b07222109271832a5e69b4b88d336352e7fc569974938eeb493"]}},"takeLast.js":{"size":41,"offset":"15806698","integrity":{"algorithm":"SHA256","hash":"68a48b91a03f43202d6d933f2e0f283165524d2b4e48431680e8f54cb9aff6cf","blockSize":4194304,"blocks":["68a48b91a03f43202d6d933f2e0f283165524d2b4e48431680e8f54cb9aff6cf"]}},"takeLastWhile.js":{"size":46,"offset":"15806739","integrity":{"algorithm":"SHA256","hash":"3467f18a2d3609eea77e90cd206eb4d8bb4ca3db332a6a3cf898ebbe965243fc","blockSize":4194304,"blocks":["3467f18a2d3609eea77e90cd206eb4d8bb4ca3db332a6a3cf898ebbe965243fc"]}},"takeRight.js":{"size":163,"offset":"15806785","integrity":{"algorithm":"SHA256","hash":"895a9e38bd7dc06df082c9ee2ba3a8bb11251b94d22325479cddea2a4ce63634","blockSize":4194304,"blocks":["895a9e38bd7dc06df082c9ee2ba3a8bb11251b94d22325479cddea2a4ce63634"]}},"takeRightWhile.js":{"size":173,"offset":"15806948","integrity":{"algorithm":"SHA256","hash":"7416128557b730a948a9806dd63de6c0c69b60a75cfc26ffe4ee5eb17eefe030","blockSize":4194304,"blocks":["7416128557b730a948a9806dd63de6c0c69b60a75cfc26ffe4ee5eb17eefe030"]}},"takeWhile.js":{"size":163,"offset":"15807121","integrity":{"algorithm":"SHA256","hash":"4ca594620f4994ef9b7eb709661234b36c3f1f096a8c5e4db8ce9e525e7e73ac","blockSize":4194304,"blocks":["4ca594620f4994ef9b7eb709661234b36c3f1f096a8c5e4db8ce9e525e7e73ac"]}},"tap.js":{"size":151,"offset":"15807284","integrity":{"algorithm":"SHA256","hash":"19470349d24a4f49a7dcd8dc50bea5c8298ef9a789393b009703e14181fece8d","blockSize":4194304,"blocks":["19470349d24a4f49a7dcd8dc50bea5c8298ef9a789393b009703e14181fece8d"]}},"template.js":{"size":161,"offset":"15807435","integrity":{"algorithm":"SHA256","hash":"646929fe89ac9177dc53d3d324799dd75a5c4185cee5cd976d66812965e3fec9","blockSize":4194304,"blocks":["646929fe89ac9177dc53d3d324799dd75a5c4185cee5cd976d66812965e3fec9"]}},"templateSettings.js":{"size":205,"offset":"15807596","integrity":{"algorithm":"SHA256","hash":"02b2f8b94fc428bc866cb02095369cdff25161ceba24452a5b441440a630cbbc","blockSize":4194304,"blocks":["02b2f8b94fc428bc866cb02095369cdff25161ceba24452a5b441440a630cbbc"]}},"throttle.js":{"size":161,"offset":"15807801","integrity":{"algorithm":"SHA256","hash":"0888c0e6fd637390c61c61c0ec53ea5cbbef4133886d38fbdf7f16d516a6ef81","blockSize":4194304,"blocks":["0888c0e6fd637390c61c61c0ec53ea5cbbef4133886d38fbdf7f16d516a6ef81"]}},"thru.js":{"size":153,"offset":"15807962","integrity":{"algorithm":"SHA256","hash":"65e6c8e59f21e799d815b0fdbea59b55beceace4d114af9b8ae0e363da9417c3","blockSize":4194304,"blocks":["65e6c8e59f21e799d815b0fdbea59b55beceace4d114af9b8ae0e363da9417c3"]}},"times.js":{"size":155,"offset":"15808115","integrity":{"algorithm":"SHA256","hash":"52352ace9df7f446bf5e035d03b8b6246fb653a3ca4471d7f2ace5c332e87eb0","blockSize":4194304,"blocks":["52352ace9df7f446bf5e035d03b8b6246fb653a3ca4471d7f2ace5c332e87eb0"]}},"toArray.js":{"size":187,"offset":"15808270","integrity":{"algorithm":"SHA256","hash":"4dfef85157759961fb31a8936bd41c4bf6da6e031e6ca2bc3ae003da90844367","blockSize":4194304,"blocks":["4dfef85157759961fb31a8936bd41c4bf6da6e031e6ca2bc3ae003da90844367"]}},"toFinite.js":{"size":189,"offset":"15808457","integrity":{"algorithm":"SHA256","hash":"07b4cc6ad49eaf7228ab5a5d6d25a72be95f4af25b61a036035cb8666daaf8c1","blockSize":4194304,"blocks":["07b4cc6ad49eaf7228ab5a5d6d25a72be95f4af25b61a036035cb8666daaf8c1"]}},"toInteger.js":{"size":191,"offset":"15808646","integrity":{"algorithm":"SHA256","hash":"2a0e674d664a7acf37d0af1384f01a5e46223e3acfa0e94e87e019d9043e6356","blockSize":4194304,"blocks":["2a0e674d664a7acf37d0af1384f01a5e46223e3acfa0e94e87e019d9043e6356"]}},"toIterator.js":{"size":193,"offset":"15808837","integrity":{"algorithm":"SHA256","hash":"15df0e6f920972cc95ff14c22261d75d02b212755df2bf1410d1128e02d3a752","blockSize":4194304,"blocks":["15df0e6f920972cc95ff14c22261d75d02b212755df2bf1410d1128e02d3a752"]}},"toJSON.js":{"size":185,"offset":"15809030","integrity":{"algorithm":"SHA256","hash":"a42e07af2604cd9dd5cc5484d8fdb3dedc36811a7cd85d00b2280a0c36773597","blockSize":4194304,"blocks":["a42e07af2604cd9dd5cc5484d8fdb3dedc36811a7cd85d00b2280a0c36773597"]}},"toLength.js":{"size":189,"offset":"15809215","integrity":{"algorithm":"SHA256","hash":"39e9d9ff3245baf518f0ce02f411cb8df4d4fc75a482da419dada1062df3f7ba","blockSize":4194304,"blocks":["39e9d9ff3245baf518f0ce02f411cb8df4d4fc75a482da419dada1062df3f7ba"]}},"toLower.js":{"size":187,"offset":"15809404","integrity":{"algorithm":"SHA256","hash":"c266802c41f676cc178d093c4646a370ef6f29ee92c1266684e64ac0aa01a09d","blockSize":4194304,"blocks":["c266802c41f676cc178d093c4646a370ef6f29ee92c1266684e64ac0aa01a09d"]}},"toNumber.js":{"size":189,"offset":"15809591","integrity":{"algorithm":"SHA256","hash":"49b1b720dfc6c20f6d5cd8ef28fc45eb02373331743271a191ff79d7da8c7dcf","blockSize":4194304,"blocks":["49b1b720dfc6c20f6d5cd8ef28fc45eb02373331743271a191ff79d7da8c7dcf"]}},"toPairs.js":{"size":187,"offset":"15809780","integrity":{"algorithm":"SHA256","hash":"1156943713645734bc65078854f4904fa151c13b4f560eece28256a701910345","blockSize":4194304,"blocks":["1156943713645734bc65078854f4904fa151c13b4f560eece28256a701910345"]}},"toPairsIn.js":{"size":191,"offset":"15809967","integrity":{"algorithm":"SHA256","hash":"5221317adfa381feb5221510daa830239c90d92c1700e2a7bedb4b97465e465b","blockSize":4194304,"blocks":["5221317adfa381feb5221510daa830239c90d92c1700e2a7bedb4b97465e465b"]}},"toPath.js":{"size":185,"offset":"15810158","integrity":{"algorithm":"SHA256","hash":"39e560dc24774991ef8542af4729a6cb25ff8ee7048ae9a15326e745fb393d9b","blockSize":4194304,"blocks":["39e560dc24774991ef8542af4729a6cb25ff8ee7048ae9a15326e745fb393d9b"]}},"toPlainObject.js":{"size":199,"offset":"15810343","integrity":{"algorithm":"SHA256","hash":"f480c02668f36db4ee798cebaa8453c7abc7a721b7624140f9be163e50426168","blockSize":4194304,"blocks":["f480c02668f36db4ee798cebaa8453c7abc7a721b7624140f9be163e50426168"]}},"toSafeInteger.js":{"size":199,"offset":"15810542","integrity":{"algorithm":"SHA256","hash":"90f1604762ef1804580c71d21f3dd2a2c88813b1af7bd2c5ae937d542df3371d","blockSize":4194304,"blocks":["90f1604762ef1804580c71d21f3dd2a2c88813b1af7bd2c5ae937d542df3371d"]}},"toString.js":{"size":189,"offset":"15810741","integrity":{"algorithm":"SHA256","hash":"ea20e2092d6d038d1ad50e99fca11c18f7951b67d73d7171f6f27a657d7b3fd1","blockSize":4194304,"blocks":["ea20e2092d6d038d1ad50e99fca11c18f7951b67d73d7171f6f27a657d7b3fd1"]}},"toUpper.js":{"size":187,"offset":"15810930","integrity":{"algorithm":"SHA256","hash":"e9a6c8ea099cc85372e116a9953842816bdaa497e058cb59206a2db18c8ec6a4","blockSize":4194304,"blocks":["e9a6c8ea099cc85372e116a9953842816bdaa497e058cb59206a2db18c8ec6a4"]}},"transform.js":{"size":163,"offset":"15811117","integrity":{"algorithm":"SHA256","hash":"7b727fc62e82ffd89868a9e16fbb55b31869627692f611f53fdee7473fd12797","blockSize":4194304,"blocks":["7b727fc62e82ffd89868a9e16fbb55b31869627692f611f53fdee7473fd12797"]}},"trim.js":{"size":153,"offset":"15811280","integrity":{"algorithm":"SHA256","hash":"2789cd4d60b1e972fe3bcb5047fd78bc65733b7dd95a75a7fe8c888f4bd094bf","blockSize":4194304,"blocks":["2789cd4d60b1e972fe3bcb5047fd78bc65733b7dd95a75a7fe8c888f4bd094bf"]}},"trimChars.js":{"size":158,"offset":"15811433","integrity":{"algorithm":"SHA256","hash":"69c4110da69a7cf94f822cf9bcce35c3b1bfbce32443dea67ae7f0e0fa935585","blockSize":4194304,"blocks":["69c4110da69a7cf94f822cf9bcce35c3b1bfbce32443dea67ae7f0e0fa935585"]}},"trimCharsEnd.js":{"size":164,"offset":"15811591","integrity":{"algorithm":"SHA256","hash":"9434b1ccbaa504d32d08d2856de9b5a70d6cb9e6328219efa278f3e30b1756f3","blockSize":4194304,"blocks":["9434b1ccbaa504d32d08d2856de9b5a70d6cb9e6328219efa278f3e30b1756f3"]}},"trimCharsStart.js":{"size":168,"offset":"15811755","integrity":{"algorithm":"SHA256","hash":"2dbbd5f2ea516d8f59e6b3e890efa6d81857dd34d92d2eaa01e6d39868f8847f","blockSize":4194304,"blocks":["2dbbd5f2ea516d8f59e6b3e890efa6d81857dd34d92d2eaa01e6d39868f8847f"]}},"trimEnd.js":{"size":159,"offset":"15811923","integrity":{"algorithm":"SHA256","hash":"b63b2210f1454fe415cf8a42da65dee553879e971485b3cde07aa400d2206a4c","blockSize":4194304,"blocks":["b63b2210f1454fe415cf8a42da65dee553879e971485b3cde07aa400d2206a4c"]}},"trimStart.js":{"size":163,"offset":"15812082","integrity":{"algorithm":"SHA256","hash":"89451b09cd9b996051c23baa97dd61f55d2ed63bf5aca753e8b5c06b61ddf6fc","blockSize":4194304,"blocks":["89451b09cd9b996051c23baa97dd61f55d2ed63bf5aca753e8b5c06b61ddf6fc"]}},"truncate.js":{"size":161,"offset":"15812245","integrity":{"algorithm":"SHA256","hash":"533868b756d17cd5d14597cb1d0bc2c54ca1cef7ba08dbb4ee0427c7ed941d7a","blockSize":4194304,"blocks":["533868b756d17cd5d14597cb1d0bc2c54ca1cef7ba08dbb4ee0427c7ed941d7a"]}},"unapply.js":{"size":36,"offset":"15812406","integrity":{"algorithm":"SHA256","hash":"0da29d56781c33e96d9bc6947c4657c4452151abe30159ceca7fc0dbd823c103","blockSize":4194304,"blocks":["0da29d56781c33e96d9bc6947c4657c4452151abe30159ceca7fc0dbd823c103"]}},"unary.js":{"size":183,"offset":"15812442","integrity":{"algorithm":"SHA256","hash":"b5296db9383b9ae750dcbe135c47b73c469bb0139ca49088f8f6a34bb680301f","blockSize":4194304,"blocks":["b5296db9383b9ae750dcbe135c47b73c469bb0139ca49088f8f6a34bb680301f"]}},"unescape.js":{"size":189,"offset":"15812625","integrity":{"algorithm":"SHA256","hash":"e93154ba14fb133e0f4e1292ee334288e8e858783e4855ac726fff463a32d0e4","blockSize":4194304,"blocks":["e93154ba14fb133e0f4e1292ee334288e8e858783e4855ac726fff463a32d0e4"]}},"union.js":{"size":155,"offset":"15812814","integrity":{"algorithm":"SHA256","hash":"0eb65ecea3bb4ef6c19e6d3a809bf703b9831807a7bbdc114d2a2dd21f7b20c1","blockSize":4194304,"blocks":["0eb65ecea3bb4ef6c19e6d3a809bf703b9831807a7bbdc114d2a2dd21f7b20c1"]}},"unionBy.js":{"size":159,"offset":"15812969","integrity":{"algorithm":"SHA256","hash":"3aebcf8ba398df184d6c402ca59e17c6c92a80d668cd39b6b3462b4ab07a8388","blockSize":4194304,"blocks":["3aebcf8ba398df184d6c402ca59e17c6c92a80d668cd39b6b3462b4ab07a8388"]}},"unionWith.js":{"size":163,"offset":"15813128","integrity":{"algorithm":"SHA256","hash":"9a0bcc8263d509dceb2f4b62afa501efd50bd9880bb3f411d7ddcb18fcfbdfa3","blockSize":4194304,"blocks":["9a0bcc8263d509dceb2f4b62afa501efd50bd9880bb3f411d7ddcb18fcfbdfa3"]}},"uniq.js":{"size":181,"offset":"15813291","integrity":{"algorithm":"SHA256","hash":"29d5b0cef35689a292bec3c22a0530434bf02357cc5df86fcc2532d9fc861574","blockSize":4194304,"blocks":["29d5b0cef35689a292bec3c22a0530434bf02357cc5df86fcc2532d9fc861574"]}},"uniqBy.js":{"size":157,"offset":"15813472","integrity":{"algorithm":"SHA256","hash":"5c32a30263ae277edbda23287cfa445e63036b23859e4ad1e099015f9ea20420","blockSize":4194304,"blocks":["5c32a30263ae277edbda23287cfa445e63036b23859e4ad1e099015f9ea20420"]}},"uniqueId.js":{"size":161,"offset":"15813629","integrity":{"algorithm":"SHA256","hash":"74096f8cfdab5ee830604eeb2a2572dd1867ea6076bbf970b83ea49dcb7c82f7","blockSize":4194304,"blocks":["74096f8cfdab5ee830604eeb2a2572dd1867ea6076bbf970b83ea49dcb7c82f7"]}},"uniqWith.js":{"size":161,"offset":"15813790","integrity":{"algorithm":"SHA256","hash":"8aba52efa7a6f18464d062f85b3b4b756637cc8acdb752267e38fbf19b6625ff","blockSize":4194304,"blocks":["8aba52efa7a6f18464d062f85b3b4b756637cc8acdb752267e38fbf19b6625ff"]}},"unnest.js":{"size":39,"offset":"15813951","integrity":{"algorithm":"SHA256","hash":"1f8468b09d05e1f72fbaa45f88d048c4ea1a0caaee69bf9f268e62bfba94e692","blockSize":4194304,"blocks":["1f8468b09d05e1f72fbaa45f88d048c4ea1a0caaee69bf9f268e62bfba94e692"]}},"unset.js":{"size":155,"offset":"15813990","integrity":{"algorithm":"SHA256","hash":"d8fd15a5c8dba2f1bcda068273d07b2846a53b241e7169472c4ff4a84f993455","blockSize":4194304,"blocks":["d8fd15a5c8dba2f1bcda068273d07b2846a53b241e7169472c4ff4a84f993455"]}},"unzip.js":{"size":183,"offset":"15814145","integrity":{"algorithm":"SHA256","hash":"f7641ef8639d08a08f1510263a125883db3d97935494e83b50ca494727e6ab56","blockSize":4194304,"blocks":["f7641ef8639d08a08f1510263a125883db3d97935494e83b50ca494727e6ab56"]}},"unzipWith.js":{"size":163,"offset":"15814328","integrity":{"algorithm":"SHA256","hash":"4df68143e8e8ad13bcc86f1c1e7a0e6e73ca6f19402585e9086bb6a77d0340b5","blockSize":4194304,"blocks":["4df68143e8e8ad13bcc86f1c1e7a0e6e73ca6f19402585e9086bb6a77d0340b5"]}},"update.js":{"size":157,"offset":"15814491","integrity":{"algorithm":"SHA256","hash":"a08a0b57a68c1d738a653a53a8a8c26aa1b7bcac150d405c9e33e2e20623bff7","blockSize":4194304,"blocks":["a08a0b57a68c1d738a653a53a8a8c26aa1b7bcac150d405c9e33e2e20623bff7"]}},"updateWith.js":{"size":165,"offset":"15814648","integrity":{"algorithm":"SHA256","hash":"f9d6225dad845212f390546fb5cc0b60ce3212a7a8c0c4226805894b90c7a898","blockSize":4194304,"blocks":["f9d6225dad845212f390546fb5cc0b60ce3212a7a8c0c4226805894b90c7a898"]}},"upperCase.js":{"size":191,"offset":"15814813","integrity":{"algorithm":"SHA256","hash":"b1e5009eaae20db990f76ef392465273da1bc052f3c39fb83a1810b211b34f43","blockSize":4194304,"blocks":["b1e5009eaae20db990f76ef392465273da1bc052f3c39fb83a1810b211b34f43"]}},"upperFirst.js":{"size":193,"offset":"15815004","integrity":{"algorithm":"SHA256","hash":"9c9aaa567bae66ac345547e21e7054aec7f8ccc11894064fe1970881233add62","blockSize":4194304,"blocks":["9c9aaa567bae66ac345547e21e7054aec7f8ccc11894064fe1970881233add62"]}},"useWith.js":{"size":40,"offset":"15815197","integrity":{"algorithm":"SHA256","hash":"6526ee2d4a0f327d13e99aa0ab0d0dc1def42ac1881b93eec3f1d4a654852bdb","blockSize":4194304,"blocks":["6526ee2d4a0f327d13e99aa0ab0d0dc1def42ac1881b93eec3f1d4a654852bdb"]}},"util.js":{"size":82,"offset":"15815237","integrity":{"algorithm":"SHA256","hash":"9cf2101fbcb2fdfb93c52f4edb978bef946e031c906894b09ee49ea85eecad52","blockSize":4194304,"blocks":["9cf2101fbcb2fdfb93c52f4edb978bef946e031c906894b09ee49ea85eecad52"]}},"value.js":{"size":183,"offset":"15815319","integrity":{"algorithm":"SHA256","hash":"1233740cd67a3385c096e5558980d06f509f6ea11ebb4c9549e5892744baf171","blockSize":4194304,"blocks":["1233740cd67a3385c096e5558980d06f509f6ea11ebb4c9549e5892744baf171"]}},"valueOf.js":{"size":187,"offset":"15815502","integrity":{"algorithm":"SHA256","hash":"2f8e43f62075034c135d7537fdb3fc232676b8d6a8b1e31b3d718b0444a7615b","blockSize":4194304,"blocks":["2f8e43f62075034c135d7537fdb3fc232676b8d6a8b1e31b3d718b0444a7615b"]}},"values.js":{"size":185,"offset":"15815689","integrity":{"algorithm":"SHA256","hash":"48329fa00984a79190700daeb7531f630511010ba9536f078b17aad3104f8e5c","blockSize":4194304,"blocks":["48329fa00984a79190700daeb7531f630511010ba9536f078b17aad3104f8e5c"]}},"valuesIn.js":{"size":189,"offset":"15815874","integrity":{"algorithm":"SHA256","hash":"e90d1f1aaaed5d6d8aecf6da68d0dba1ac306fe76b501b7d65b7facdf0febf35","blockSize":4194304,"blocks":["e90d1f1aaaed5d6d8aecf6da68d0dba1ac306fe76b501b7d65b7facdf0febf35"]}},"where.js":{"size":42,"offset":"15816063","integrity":{"algorithm":"SHA256","hash":"335495baefaf23607518544bc875a1ef48507d2c5e6bf0f0c1a225fd0e304f46","blockSize":4194304,"blocks":["335495baefaf23607518544bc875a1ef48507d2c5e6bf0f0c1a225fd0e304f46"]}},"whereEq.js":{"size":39,"offset":"15816105","integrity":{"algorithm":"SHA256","hash":"c148011a1334aad49cc4fa8700a5395794ca325cf2e0284c9853890311813ea0","blockSize":4194304,"blocks":["c148011a1334aad49cc4fa8700a5395794ca325cf2e0284c9853890311813ea0"]}},"without.js":{"size":159,"offset":"15816144","integrity":{"algorithm":"SHA256","hash":"207a4d42efd14f536e8762ef0e87fdf98e4617aa96bf739ef7a356732634e2bf","blockSize":4194304,"blocks":["207a4d42efd14f536e8762ef0e87fdf98e4617aa96bf739ef7a356732634e2bf"]}},"words.js":{"size":155,"offset":"15816303","integrity":{"algorithm":"SHA256","hash":"89d012be9fd28b62557e78f815b1a3f6dff35594751b5126d71d7cdb7f27edf4","blockSize":4194304,"blocks":["89d012be9fd28b62557e78f815b1a3f6dff35594751b5126d71d7cdb7f27edf4"]}},"wrap.js":{"size":153,"offset":"15816458","integrity":{"algorithm":"SHA256","hash":"5c7c8fa4423bfc1efa07b6ea3e5a82fb148843b26cdb87d7eddd9edc98cc86ca","blockSize":4194304,"blocks":["5c7c8fa4423bfc1efa07b6ea3e5a82fb148843b26cdb87d7eddd9edc98cc86ca"]}},"wrapperAt.js":{"size":191,"offset":"15816611","integrity":{"algorithm":"SHA256","hash":"7ffad9f90970b4ad92d30abc9a3b20b74b16e3322028c3779074201170171844","blockSize":4194304,"blocks":["7ffad9f90970b4ad92d30abc9a3b20b74b16e3322028c3779074201170171844"]}},"wrapperChain.js":{"size":197,"offset":"15816802","integrity":{"algorithm":"SHA256","hash":"1b725e56bf191c50835b108c9a8b4c53a332cfd8191c0219204867b845ee4c7d","blockSize":4194304,"blocks":["1b725e56bf191c50835b108c9a8b4c53a332cfd8191c0219204867b845ee4c7d"]}},"wrapperLodash.js":{"size":199,"offset":"15816999","integrity":{"algorithm":"SHA256","hash":"f66a3bc9777cbe5137379e344a1049ed467624fca520e8d6b703e67fd1035ce6","blockSize":4194304,"blocks":["f66a3bc9777cbe5137379e344a1049ed467624fca520e8d6b703e67fd1035ce6"]}},"wrapperReverse.js":{"size":201,"offset":"15817198","integrity":{"algorithm":"SHA256","hash":"473e1059b67c537a26a46c65e91e379011ffa24e7b28288058571e4223929bda","blockSize":4194304,"blocks":["473e1059b67c537a26a46c65e91e379011ffa24e7b28288058571e4223929bda"]}},"wrapperValue.js":{"size":197,"offset":"15817399","integrity":{"algorithm":"SHA256","hash":"5a68d5f97eeff92a76168808c55d50f29d53ab3393e538e8942966f9a7a19e14","blockSize":4194304,"blocks":["5a68d5f97eeff92a76168808c55d50f29d53ab3393e538e8942966f9a7a19e14"]}},"xor.js":{"size":151,"offset":"15817596","integrity":{"algorithm":"SHA256","hash":"cbc20b7d7a3a5e612a61eeccf7a438a8411a759ed7de6d559aea2d02f7879c5a","blockSize":4194304,"blocks":["cbc20b7d7a3a5e612a61eeccf7a438a8411a759ed7de6d559aea2d02f7879c5a"]}},"xorBy.js":{"size":155,"offset":"15817747","integrity":{"algorithm":"SHA256","hash":"bf40bcf5f6fe5fec395b0116b8c49ad756d093801eef5d13fa4188ea78a316bd","blockSize":4194304,"blocks":["bf40bcf5f6fe5fec395b0116b8c49ad756d093801eef5d13fa4188ea78a316bd"]}},"xorWith.js":{"size":159,"offset":"15817902","integrity":{"algorithm":"SHA256","hash":"29d23bdebd504d0206191e3575dc157f665fa7fb70a5955bfa5d608c355a4432","blockSize":4194304,"blocks":["29d23bdebd504d0206191e3575dc157f665fa7fb70a5955bfa5d608c355a4432"]}},"zip.js":{"size":151,"offset":"15818061","integrity":{"algorithm":"SHA256","hash":"fed4485ebcd54848160fba21c8c9523e97cfbb9a40b1856dd5a21c4df99c9f58","blockSize":4194304,"blocks":["fed4485ebcd54848160fba21c8c9523e97cfbb9a40b1856dd5a21c4df99c9f58"]}},"zipAll.js":{"size":154,"offset":"15818212","integrity":{"algorithm":"SHA256","hash":"5ad4a9a3cdc29bbf8740dd20d496ddb43a193339079c4de07e145a728f0c6243","blockSize":4194304,"blocks":["5ad4a9a3cdc29bbf8740dd20d496ddb43a193339079c4de07e145a728f0c6243"]}},"zipObj.js":{"size":41,"offset":"15818366","integrity":{"algorithm":"SHA256","hash":"0144c3afd501c2566ac9e2172fd25a35e74ae2b0d2cdd9ff89f290ee901dea3d","blockSize":4194304,"blocks":["0144c3afd501c2566ac9e2172fd25a35e74ae2b0d2cdd9ff89f290ee901dea3d"]}},"zipObject.js":{"size":163,"offset":"15818407","integrity":{"algorithm":"SHA256","hash":"fdc9387d58165a826b001dcb9b60c563eb7643886fbc6213ce25deae92379620","blockSize":4194304,"blocks":["fdc9387d58165a826b001dcb9b60c563eb7643886fbc6213ce25deae92379620"]}},"zipObjectDeep.js":{"size":171,"offset":"15818570","integrity":{"algorithm":"SHA256","hash":"92fa710f6ef480fe3843648435072d305170b55d0be8f7c870316f070404ccf4","blockSize":4194304,"blocks":["92fa710f6ef480fe3843648435072d305170b55d0be8f7c870316f070404ccf4"]}},"zipWith.js":{"size":159,"offset":"15818741","integrity":{"algorithm":"SHA256","hash":"c350e83a9babcfee6d919c52ecdb3703af8f17acb9799a85d9b200bac4f93b67","blockSize":4194304,"blocks":["c350e83a9babcfee6d919c52ecdb3703af8f17acb9799a85d9b200bac4f93b67"]}}}},"fp.js":{"size":101,"offset":"15729932","integrity":{"algorithm":"SHA256","hash":"7ab815f00b2b3a77fe6b0d1099d3ee9ec8c6f4dc167f14703f4430a55cebd13e","blockSize":4194304,"blocks":["7ab815f00b2b3a77fe6b0d1099d3ee9ec8c6f4dc167f14703f4430a55cebd13e"]}},"fromPairs.js":{"size":596,"offset":"15818900","integrity":{"algorithm":"SHA256","hash":"7c648e8b1d8896f490eb54f1aa6dbcf41e7346ec58b5c4dce704a183e1f1848f","blockSize":4194304,"blocks":["7c648e8b1d8896f490eb54f1aa6dbcf41e7346ec58b5c4dce704a183e1f1848f"]}},"function.js":{"size":780,"offset":"15819496","integrity":{"algorithm":"SHA256","hash":"6bc64dc47fb41b25e04bbe8f459d45f925f1537b1ff1a65f6855ac0990761131","blockSize":4194304,"blocks":["6bc64dc47fb41b25e04bbe8f459d45f925f1537b1ff1a65f6855ac0990761131"]}},"functions.js":{"size":685,"offset":"15820276","integrity":{"algorithm":"SHA256","hash":"ebf41d0fdb6dd89618af1bc56574accc4f368c2ca0100401f02ab90866e21e4e","blockSize":4194304,"blocks":["ebf41d0fdb6dd89618af1bc56574accc4f368c2ca0100401f02ab90866e21e4e"]}},"functionsIn.js":{"size":714,"offset":"15820961","integrity":{"algorithm":"SHA256","hash":"067f5a2844b0be3f84b3778cb9ff92f78e6178ef10fc6d558e679808f34b589b","blockSize":4194304,"blocks":["067f5a2844b0be3f84b3778cb9ff92f78e6178ef10fc6d558e679808f34b589b"]}},"get.js":{"size":884,"offset":"15821675","integrity":{"algorithm":"SHA256","hash":"97c5e6d3e75bad40d57c3d0e56c28797c81aa1db5963531a7c64c0e56fb6b110","blockSize":4194304,"blocks":["97c5e6d3e75bad40d57c3d0e56c28797c81aa1db5963531a7c64c0e56fb6b110"]}},"groupBy.js":{"size":1399,"offset":"15822559","integrity":{"algorithm":"SHA256","hash":"63fed6feb1e2de4de72d460621fe4cd9b47dcaff0ce1769023798634f07a0f1e","blockSize":4194304,"blocks":["63fed6feb1e2de4de72d460621fe4cd9b47dcaff0ce1769023798634f07a0f1e"]}},"gt.js":{"size":596,"offset":"15823958","integrity":{"algorithm":"SHA256","hash":"46d68fdf1aca955142d894478899638b98ff32b818d6b57553fad7c638070976","blockSize":4194304,"blocks":["46d68fdf1aca955142d894478899638b98ff32b818d6b57553fad7c638070976"]}},"gte.js":{"size":635,"offset":"15824554","integrity":{"algorithm":"SHA256","hash":"9fe2d7bfbc8c125a89709d23a6db699e7984b1ceff904a0022dab989f00cdbfc","blockSize":4194304,"blocks":["9fe2d7bfbc8c125a89709d23a6db699e7984b1ceff904a0022dab989f00cdbfc"]}},"has.js":{"size":757,"offset":"15825189","integrity":{"algorithm":"SHA256","hash":"200fba1ae4605f47c15fd28314c1fb651b33845976df18f56779b5df9a053a15","blockSize":4194304,"blocks":["200fba1ae4605f47c15fd28314c1fb651b33845976df18f56779b5df9a053a15"]}},"hasIn.js":{"size":753,"offset":"15825946","integrity":{"algorithm":"SHA256","hash":"a3a8fb830aee0fba8a35b80c51ed23a95405261990679b8570a1d7adb0b9108b","blockSize":4194304,"blocks":["a3a8fb830aee0fba8a35b80c51ed23a95405261990679b8570a1d7adb0b9108b"]}},"head.js":{"size":415,"offset":"15826699","integrity":{"algorithm":"SHA256","hash":"e3d0d744f11ebcd7eba5f7c675aa995162e8b228c9e216da0496eda74b026ef6","blockSize":4194304,"blocks":["e3d0d744f11ebcd7eba5f7c675aa995162e8b228c9e216da0496eda74b026ef6"]}},"identity.js":{"size":370,"offset":"15827114","integrity":{"algorithm":"SHA256","hash":"b356675eecf6085c57d8c5c9c9bec57235513e42cad616477a1205a488f3d9d5","blockSize":4194304,"blocks":["b356675eecf6085c57d8c5c9c9bec57235513e42cad616477a1205a488f3d9d5"]}},"includes.js":{"size":1772,"offset":"15827484","integrity":{"algorithm":"SHA256","hash":"bce785094893c31352f823105409eb43214fbfe27fd14c52d8608b37d6153d4f","blockSize":4194304,"blocks":["bce785094893c31352f823105409eb43214fbfe27fd14c52d8608b37d6153d4f"]}},"index.js":{"size":37,"offset":"15829256","integrity":{"algorithm":"SHA256","hash":"ff1c66bce74e39e290c8922991d5e5f22edf31164a8a073cc3a3d808a7986561","blockSize":4194304,"blocks":["ff1c66bce74e39e290c8922991d5e5f22edf31164a8a073cc3a3d808a7986561"]}},"indexOf.js":{"size":1240,"offset":"15829293","integrity":{"algorithm":"SHA256","hash":"d76c65fa0ed067399108758fcb0975636e192f7e608b079696be541465c5ed77","blockSize":4194304,"blocks":["d76c65fa0ed067399108758fcb0975636e192f7e608b079696be541465c5ed77"]}},"initial.js":{"size":461,"offset":"15830533","integrity":{"algorithm":"SHA256","hash":"df49656bf3f98a87fc305107c75661d75e2fbfbccab416939bdca8954a48a85e","blockSize":4194304,"blocks":["df49656bf3f98a87fc305107c75661d75e2fbfbccab416939bdca8954a48a85e"]}},"inRange.js":{"size":1245,"offset":"15830994","integrity":{"algorithm":"SHA256","hash":"72483dd199939b063097198b572261b71241eda9e7d7c03beb646a239c75d8f8","blockSize":4194304,"blocks":["72483dd199939b063097198b572261b71241eda9e7d7c03beb646a239c75d8f8"]}},"intersection.js":{"size":953,"offset":"15832239","integrity":{"algorithm":"SHA256","hash":"747eb6bdc5f20d8307823e7a4bce3c786632fdfd8e443de771697b80e744e89c","blockSize":4194304,"blocks":["747eb6bdc5f20d8307823e7a4bce3c786632fdfd8e443de771697b80e744e89c"]}},"intersectionBy.js":{"size":1467,"offset":"15833192","integrity":{"algorithm":"SHA256","hash":"b133dbc9111a17d373a7a31b7df5510cc086e97b7c8d94c5469bac6a2694157d","blockSize":4194304,"blocks":["b133dbc9111a17d373a7a31b7df5510cc086e97b7c8d94c5469bac6a2694157d"]}},"intersectionWith.js":{"size":1388,"offset":"15834659","integrity":{"algorithm":"SHA256","hash":"275ff3f34e50a0d8328b811e519bebd4b706ab67f9f82593802f3a083a8fe129","blockSize":4194304,"blocks":["275ff3f34e50a0d8328b811e519bebd4b706ab67f9f82593802f3a083a8fe129"]}},"invert.js":{"size":1128,"offset":"15836047","integrity":{"algorithm":"SHA256","hash":"8fb9d43290025ff2ed2c6bec15bbe70d908644b4ca954fecec1299295a3dc957","blockSize":4194304,"blocks":["8fb9d43290025ff2ed2c6bec15bbe70d908644b4ca954fecec1299295a3dc957"]}},"invertBy.js":{"size":1651,"offset":"15837175","integrity":{"algorithm":"SHA256","hash":"2cb1bcacc9b2b3421fec36463bb0d1c1475488c6f878e4927d799d76234ad868","blockSize":4194304,"blocks":["2cb1bcacc9b2b3421fec36463bb0d1c1475488c6f878e4927d799d76234ad868"]}},"invoke.js":{"size":634,"offset":"15838826","integrity":{"algorithm":"SHA256","hash":"f2389f6a59dd1ad801529e66de31bf67b19b002adf6a42eadab8cd2c47e4abe7","blockSize":4194304,"blocks":["f2389f6a59dd1ad801529e66de31bf67b19b002adf6a42eadab8cd2c47e4abe7"]}},"invokeMap.js":{"size":1440,"offset":"15839460","integrity":{"algorithm":"SHA256","hash":"426c1e48d43c871ccf1eb7553f22b6991aacfe1468d2e9951cc1987a0fa92c03","blockSize":4194304,"blocks":["426c1e48d43c871ccf1eb7553f22b6991aacfe1468d2e9951cc1987a0fa92c03"]}},"isArguments.js":{"size":1026,"offset":"15840900","integrity":{"algorithm":"SHA256","hash":"88921b43b9dbe2af82d6b88f323fdb9ce4a989abc6aef72871cb7954f8d4f19f","blockSize":4194304,"blocks":["88921b43b9dbe2af82d6b88f323fdb9ce4a989abc6aef72871cb7954f8d4f19f"]}},"isArray.js":{"size":488,"offset":"15841926","integrity":{"algorithm":"SHA256","hash":"69a51a3435d6152559e524eb881a6350c76892b4d1ba83055333690533d6b4d6","blockSize":4194304,"blocks":["69a51a3435d6152559e524eb881a6350c76892b4d1ba83055333690533d6b4d6"]}},"isArrayBuffer.js":{"size":732,"offset":"15842414","integrity":{"algorithm":"SHA256","hash":"7212673936b2f6cf29b03fe2a8242240006625a43d73e47e1c48d1ebe6f376c4","blockSize":4194304,"blocks":["7212673936b2f6cf29b03fe2a8242240006625a43d73e47e1c48d1ebe6f376c4"]}},"isArrayLike.js":{"size":830,"offset":"15843146","integrity":{"algorithm":"SHA256","hash":"fce08522204e2bce2c30b5ba4e28b37aa5f7ec7640c794f0c3abb21179716623","blockSize":4194304,"blocks":["fce08522204e2bce2c30b5ba4e28b37aa5f7ec7640c794f0c3abb21179716623"]}},"isArrayLikeObject.js":{"size":742,"offset":"15843976","integrity":{"algorithm":"SHA256","hash":"29fac39136e67b4e38c7bc2adf0702b6e2ef6be7f70e0e6c67980a1c24899ab7","blockSize":4194304,"blocks":["29fac39136e67b4e38c7bc2adf0702b6e2ef6be7f70e0e6c67980a1c24899ab7"]}},"isBoolean.js":{"size":681,"offset":"15844718","integrity":{"algorithm":"SHA256","hash":"53387c8077307940f8d05f45f598b5df42994afb62e4f79a467d14f170c4c21a","blockSize":4194304,"blocks":["53387c8077307940f8d05f45f598b5df42994afb62e4f79a467d14f170c4c21a"]}},"isBuffer.js":{"size":1114,"offset":"15845399","integrity":{"algorithm":"SHA256","hash":"533866d6336d5b57f9e46b33db8fbc3ac7aedc4fd2761afa556364c51f77c4e5","blockSize":4194304,"blocks":["533866d6336d5b57f9e46b33db8fbc3ac7aedc4fd2761afa556364c51f77c4e5"]}},"isDate.js":{"size":642,"offset":"15846513","integrity":{"algorithm":"SHA256","hash":"71624bcc52d42460aa378125fe585bff54adde760f0e725486aca51a98c19c47","blockSize":4194304,"blocks":["71624bcc52d42460aa378125fe585bff54adde760f0e725486aca51a98c19c47"]}},"isElement.js":{"size":574,"offset":"15847155","integrity":{"algorithm":"SHA256","hash":"8066a249004ee1087bd0e2d907f8c6facce77568bb8d79beadf157a418807a31","blockSize":4194304,"blocks":["8066a249004ee1087bd0e2d907f8c6facce77568bb8d79beadf157a418807a31"]}},"isEmpty.js":{"size":2000,"offset":"15847729","integrity":{"algorithm":"SHA256","hash":"ff8b9029e34108a24af2322c1bda2d2139e89464d25f436b0d18fa6e613a237e","blockSize":4194304,"blocks":["ff8b9029e34108a24af2322c1bda2d2139e89464d25f436b0d18fa6e613a237e"]}},"isEqual.js":{"size":986,"offset":"15849729","integrity":{"algorithm":"SHA256","hash":"f4ccb5d296b05b36d3d149f8dea50b69109c25d06fffffb1663b24e8fe0d9206","blockSize":4194304,"blocks":["f4ccb5d296b05b36d3d149f8dea50b69109c25d06fffffb1663b24e8fe0d9206"]}},"isEqualWith.js":{"size":1352,"offset":"15850715","integrity":{"algorithm":"SHA256","hash":"77907836dce7f496cb9eff1a00ad78991c6e3d372b4b0a60f2a508b268b1f56f","blockSize":4194304,"blocks":["77907836dce7f496cb9eff1a00ad78991c6e3d372b4b0a60f2a508b268b1f56f"]}},"isError.js":{"size":961,"offset":"15852067","integrity":{"algorithm":"SHA256","hash":"ca6dbefa9e146e737f93782b1e65e8d57f27bcc766f6bb0fb449309e04e6e1be","blockSize":4194304,"blocks":["ca6dbefa9e146e737f93782b1e65e8d57f27bcc766f6bb0fb449309e04e6e1be"]}},"isFinite.js":{"size":793,"offset":"15853028","integrity":{"algorithm":"SHA256","hash":"ba1b1ca522941d939ba96af43f4566aeead815e026cf769f9f96b271773cbc92","blockSize":4194304,"blocks":["ba1b1ca522941d939ba96af43f4566aeead815e026cf769f9f96b271773cbc92"]}},"isFunction.js":{"size":993,"offset":"15853821","integrity":{"algorithm":"SHA256","hash":"d20cac0bead37199613d60f4e00361d782fb7a0803050b274de0587e892417bd","blockSize":4194304,"blocks":["d20cac0bead37199613d60f4e00361d782fb7a0803050b274de0587e892417bd"]}},"isInteger.js":{"size":669,"offset":"15854814","integrity":{"algorithm":"SHA256","hash":"d2048e129af96538a5821eb7048e5b9084eb447d32af8d623a4fd1ad478fa29a","blockSize":4194304,"blocks":["d2048e129af96538a5821eb7048e5b9084eb447d32af8d623a4fd1ad478fa29a"]}},"isLength.js":{"size":802,"offset":"15855483","integrity":{"algorithm":"SHA256","hash":"6f0491c5ca5c4d7fc26cca3097ea9aa257e30e006d4c3251c0df1e7a1cfe0f66","blockSize":4194304,"blocks":["6f0491c5ca5c4d7fc26cca3097ea9aa257e30e006d4c3251c0df1e7a1cfe0f66"]}},"isMap.js":{"size":613,"offset":"15856285","integrity":{"algorithm":"SHA256","hash":"9864060f8af5243606e992fae709d9e458a563fe9fc0ba6645548ec3e13bc343","blockSize":4194304,"blocks":["9864060f8af5243606e992fae709d9e458a563fe9fc0ba6645548ec3e13bc343"]}},"isMatch.js":{"size":1078,"offset":"15856898","integrity":{"algorithm":"SHA256","hash":"6cd0a3cae2265ead716ad4a957c07db1c0b546e362ef36fa1779a1a068cde894","blockSize":4194304,"blocks":["6cd0a3cae2265ead716ad4a957c07db1c0b546e362ef36fa1779a1a068cde894"]}},"isMatchWith.js":{"size":1329,"offset":"15857976","integrity":{"algorithm":"SHA256","hash":"67c8e0de8c0c3209fbc506831bc09fc4330266d468f90bbc2ceb5d3c92bd93c8","blockSize":4194304,"blocks":["67c8e0de8c0c3209fbc506831bc09fc4330266d468f90bbc2ceb5d3c92bd93c8"]}},"isNaN.js":{"size":911,"offset":"15859305","integrity":{"algorithm":"SHA256","hash":"6975629ece825de22effa57ad7f0647c1629e4590fa11ab1526587af5fb3adfb","blockSize":4194304,"blocks":["6975629ece825de22effa57ad7f0647c1629e4590fa11ab1526587af5fb3adfb"]}},"isNative.js":{"size":1221,"offset":"15860216","integrity":{"algorithm":"SHA256","hash":"bba65dcf5a4d123a0cab34e0f06eabd1936c5d228899664d54fcc5daa4cefd09","blockSize":4194304,"blocks":["bba65dcf5a4d123a0cab34e0f06eabd1936c5d228899664d54fcc5daa4cefd09"]}},"isNil.js":{"size":426,"offset":"15861437","integrity":{"algorithm":"SHA256","hash":"c3f62f38f567d28d480379c9cc3098a163c0a0772ffbac0cd69ea06ed325e49e","blockSize":4194304,"blocks":["c3f62f38f567d28d480379c9cc3098a163c0a0772ffbac0cd69ea06ed325e49e"]}},"isNull.js":{"size":381,"offset":"15861863","integrity":{"algorithm":"SHA256","hash":"fc2e58d8c2a95553ea21d9248668b9161d76306dfe56d0c4be6a6176c0d2d3d0","blockSize":4194304,"blocks":["fc2e58d8c2a95553ea21d9248668b9161d76306dfe56d0c4be6a6176c0d2d3d0"]}},"isNumber.js":{"size":886,"offset":"15862244","integrity":{"algorithm":"SHA256","hash":"98f3368a9e9cefa6247b7429682558ec2dd3adb2a930f859b77ca4743516f76d","blockSize":4194304,"blocks":["98f3368a9e9cefa6247b7429682558ec2dd3adb2a930f859b77ca4743516f76d"]}},"isObject.js":{"size":733,"offset":"15863130","integrity":{"algorithm":"SHA256","hash":"1f433726569c027f308b96ff487e8906068ef78b96b4e545884e6e3468ad8d8c","blockSize":4194304,"blocks":["1f433726569c027f308b96ff487e8906068ef78b96b4e545884e6e3468ad8d8c"]}},"isObjectLike.js":{"size":614,"offset":"15863863","integrity":{"algorithm":"SHA256","hash":"a913b5adff90b0c6eefe68ca6e58d9c73e318e12986299607bb129b898d7e6f1","blockSize":4194304,"blocks":["a913b5adff90b0c6eefe68ca6e58d9c73e318e12986299607bb129b898d7e6f1"]}},"isPlainObject.js":{"size":1650,"offset":"15864477","integrity":{"algorithm":"SHA256","hash":"994b111bc6f2b384d4e58e7fe6204337db4c8bbbb8a54eff4955f3cad8cbe9c5","blockSize":4194304,"blocks":["994b111bc6f2b384d4e58e7fe6204337db4c8bbbb8a54eff4955f3cad8cbe9c5"]}},"isRegExp.js":{"size":646,"offset":"15866127","integrity":{"algorithm":"SHA256","hash":"2415501d0d08ace19d9ab5b2efd0776a1f91a339dea8b2f22d386e4666ae56e9","blockSize":4194304,"blocks":["2415501d0d08ace19d9ab5b2efd0776a1f91a339dea8b2f22d386e4666ae56e9"]}},"isSafeInteger.js":{"size":949,"offset":"15866773","integrity":{"algorithm":"SHA256","hash":"8134b2b422b72dc8d3d2cab72d37612d2662d73a7a8596a9a20e6e01d823b526","blockSize":4194304,"blocks":["8134b2b422b72dc8d3d2cab72d37612d2662d73a7a8596a9a20e6e01d823b526"]}},"isSet.js":{"size":613,"offset":"15867722","integrity":{"algorithm":"SHA256","hash":"49846dc7e51dbcc002fe911df132f6202451dd344d189a13763553201e74231b","blockSize":4194304,"blocks":["49846dc7e51dbcc002fe911df132f6202451dd344d189a13763553201e74231b"]}},"isString.js":{"size":723,"offset":"15868335","integrity":{"algorithm":"SHA256","hash":"ed06f9541fd0dd9023899f732c12b2d2e038f181bf10b1349ca973b378e6eb8b","blockSize":4194304,"blocks":["ed06f9541fd0dd9023899f732c12b2d2e038f181bf10b1349ca973b378e6eb8b"]}},"isSymbol.js":{"size":682,"offset":"15869058","integrity":{"algorithm":"SHA256","hash":"b882116f17d051769da22a027b9f8d013ed2212449793dcc88f33f3f18a204ad","blockSize":4194304,"blocks":["b882116f17d051769da22a027b9f8d013ed2212449793dcc88f33f3f18a204ad"]}},"isTypedArray.js":{"size":695,"offset":"15869740","integrity":{"algorithm":"SHA256","hash":"a4d2273a797fda92a1d1fd600f3393ca1981c549f2988e82f47b7ed15d4014a7","blockSize":4194304,"blocks":["a4d2273a797fda92a1d1fd600f3393ca1981c549f2988e82f47b7ed15d4014a7"]}},"isUndefined.js":{"size":416,"offset":"15870435","integrity":{"algorithm":"SHA256","hash":"75427a0591a0c34e852d42197ddf8d2dc121a705799bce05f31363b0bbf4f427","blockSize":4194304,"blocks":["75427a0591a0c34e852d42197ddf8d2dc121a705799bce05f31363b0bbf4f427"]}},"isWeakMap.js":{"size":631,"offset":"15870851","integrity":{"algorithm":"SHA256","hash":"d13935b891ef87f095cdd4b3c7210dcd3b4ad4f658899d9279ed6d9489bbc45e","blockSize":4194304,"blocks":["d13935b891ef87f095cdd4b3c7210dcd3b4ad4f658899d9279ed6d9489bbc45e"]}},"isWeakSet.js":{"size":643,"offset":"15871482","integrity":{"algorithm":"SHA256","hash":"ffd6bed10a91ca6c0b408f3f5bc0f45fa247e4f0bf6f9eb4c0f83f45c730b7d9","blockSize":4194304,"blocks":["ffd6bed10a91ca6c0b408f3f5bc0f45fa247e4f0bf6f9eb4c0f83f45c730b7d9"]}},"iteratee.js":{"size":1700,"offset":"15872125","integrity":{"algorithm":"SHA256","hash":"0c7d7ddb8045b91f24c0da6627cd8767f4e03ada69fc1c7a9d854e6c4e7b57e4","blockSize":4194304,"blocks":["0c7d7ddb8045b91f24c0da6627cd8767f4e03ada69fc1c7a9d854e6c4e7b57e4"]}},"join.js":{"size":693,"offset":"15873825","integrity":{"algorithm":"SHA256","hash":"cb239942f1edce736134cda6bfa017980f8875f0128f53dce90153a250d697cd","blockSize":4194304,"blocks":["cb239942f1edce736134cda6bfa017980f8875f0128f53dce90153a250d697cd"]}},"kebabCase.js":{"size":659,"offset":"15874518","integrity":{"algorithm":"SHA256","hash":"7e093bd5a03b0c906607441750dcca616c1e40ff7315c8f399e79df6cbbdbe95","blockSize":4194304,"blocks":["7e093bd5a03b0c906607441750dcca616c1e40ff7315c8f399e79df6cbbdbe95"]}},"keyBy.js":{"size":1194,"offset":"15875177","integrity":{"algorithm":"SHA256","hash":"d7aaad9128ee20729e7310358d6006b002d5a629488e7f86015783744fb3ab93","blockSize":4194304,"blocks":["d7aaad9128ee20729e7310358d6006b002d5a629488e7f86015783744fb3ab93"]}},"keys.js":{"size":884,"offset":"15876371","integrity":{"algorithm":"SHA256","hash":"033c04884f93e90aef951b54dd9e70af87c3d8c284d99e21328a89dbe610a51f","blockSize":4194304,"blocks":["033c04884f93e90aef951b54dd9e70af87c3d8c284d99e21328a89dbe610a51f"]}},"keysIn.js":{"size":778,"offset":"15877255","integrity":{"algorithm":"SHA256","hash":"da2c8ddc0b77cf749f9058d067e58a4e308ca0cc2e6a07f1673a1c991bbf3489","blockSize":4194304,"blocks":["da2c8ddc0b77cf749f9058d067e58a4e308ca0cc2e6a07f1673a1c991bbf3489"]}},"lang.js":{"size":2137,"offset":"15878033","integrity":{"algorithm":"SHA256","hash":"7cbac7758d93e87726f50abf053bc7e1db68b13831e4c658b79ab70aff1c0d84","blockSize":4194304,"blocks":["7cbac7758d93e87726f50abf053bc7e1db68b13831e4c658b79ab70aff1c0d84"]}},"last.js":{"size":401,"offset":"15880170","integrity":{"algorithm":"SHA256","hash":"15a736545db5a522ff57bdaa4053294b2da705063ba5324d7e7d46e0587e2cac","blockSize":4194304,"blocks":["15a736545db5a522ff57bdaa4053294b2da705063ba5324d7e7d46e0587e2cac"]}},"lastIndexOf.js":{"size":1358,"offset":"15880571","integrity":{"algorithm":"SHA256","hash":"b30c3b00d7e36a885d33bb8367b0a1c91fa205f5e0064784fc5f10cb000bff15","blockSize":4194304,"blocks":["b30c3b00d7e36a885d33bb8367b0a1c91fa205f5e0064784fc5f10cb000bff15"]}},"LICENSE":{"size":1952,"offset":"15881929","integrity":{"algorithm":"SHA256","hash":"f71e8ed126b46346494aad5486874cd8f0aafe95092ed67d2e3cb6110f939abc","blockSize":4194304,"blocks":["f71e8ed126b46346494aad5486874cd8f0aafe95092ed67d2e3cb6110f939abc"]}},"lodash.js":{"size":544098,"offset":"15883881","integrity":{"algorithm":"SHA256","hash":"4c04561befdf653aef017a42ac5addf68ea943cdfca6bdee5ce04e04e8139f54","blockSize":4194304,"blocks":["4c04561befdf653aef017a42ac5addf68ea943cdfca6bdee5ce04e04e8139f54"]}},"lodash.min.js":{"size":73015,"offset":"16427979","integrity":{"algorithm":"SHA256","hash":"a9705dfc47c0763380d851ab1801be6f76019f6b67e40e9b873f8b4a0603f7a9","blockSize":4194304,"blocks":["a9705dfc47c0763380d851ab1801be6f76019f6b67e40e9b873f8b4a0603f7a9"]}},"lowerCase.js":{"size":622,"offset":"16500994","integrity":{"algorithm":"SHA256","hash":"adb0f92803183e4019fb0019a1bafd72ffbd0d9ddd34c77f85a2f9a80a692f95","blockSize":4194304,"blocks":["adb0f92803183e4019fb0019a1bafd72ffbd0d9ddd34c77f85a2f9a80a692f95"]}},"lowerFirst.js":{"size":470,"offset":"16501616","integrity":{"algorithm":"SHA256","hash":"bc619dd7b3483218c5f8dc45717ecd7f9e02af4bd1f00e4f59f99b2bea5a15cb","blockSize":4194304,"blocks":["bc619dd7b3483218c5f8dc45717ecd7f9e02af4bd1f00e4f59f99b2bea5a15cb"]}},"lt.js":{"size":590,"offset":"16502086","integrity":{"algorithm":"SHA256","hash":"aeae52a66355a31e12139d2f6cb021cf57de125b37241053bede084a506b3d27","blockSize":4194304,"blocks":["aeae52a66355a31e12139d2f6cb021cf57de125b37241053bede084a506b3d27"]}},"lte.js":{"size":629,"offset":"16502676","integrity":{"algorithm":"SHA256","hash":"32e7f67e212b764dd16ac6da9cec60f1b743ea29be48b658d34f43fa5ea9e8f6","blockSize":4194304,"blocks":["32e7f67e212b764dd16ac6da9cec60f1b743ea29be48b658d34f43fa5ea9e8f6"]}},"map.js":{"size":1621,"offset":"16503305","integrity":{"algorithm":"SHA256","hash":"1aaff5a76f1fe340335ae5ae68d66bcde6596c12371554b7d3929e31bd31e3d0","blockSize":4194304,"blocks":["1aaff5a76f1fe340335ae5ae68d66bcde6596c12371554b7d3929e31bd31e3d0"]}},"mapKeys.js":{"size":1097,"offset":"16504926","integrity":{"algorithm":"SHA256","hash":"dc9c86de1128f2a0e204cf30d720e900a1d4db54ef6af364ff20d832805a6369","blockSize":4194304,"blocks":["dc9c86de1128f2a0e204cf30d720e900a1d4db54ef6af364ff20d832805a6369"]}},"mapValues.js":{"size":1338,"offset":"16506023","integrity":{"algorithm":"SHA256","hash":"c06cd887bace9a7af935b35fdf55e1ff9305d55e6fbc72c16b21548c54d38fc7","blockSize":4194304,"blocks":["c06cd887bace9a7af935b35fdf55e1ff9305d55e6fbc72c16b21548c54d38fc7"]}},"matches.js":{"size":1441,"offset":"16507361","integrity":{"algorithm":"SHA256","hash":"8301a22054860637c738c889bb561bc37dfba9a8acdfbb179f20a36c7ae48230","blockSize":4194304,"blocks":["8301a22054860637c738c889bb561bc37dfba9a8acdfbb179f20a36c7ae48230"]}},"matchesProperty.js":{"size":1454,"offset":"16508802","integrity":{"algorithm":"SHA256","hash":"000877d1b0f3d96fa96340eacd5e83109ed2166e0698a934c1ed2bd2a5d78e51","blockSize":4194304,"blocks":["000877d1b0f3d96fa96340eacd5e83109ed2166e0698a934c1ed2bd2a5d78e51"]}},"math.js":{"size":482,"offset":"16510256","integrity":{"algorithm":"SHA256","hash":"a2f3c4cae2674e60102ea1b03bf91c29172838723bbd2e668b0612243e9b2ecf","blockSize":4194304,"blocks":["a2f3c4cae2674e60102ea1b03bf91c29172838723bbd2e668b0612243e9b2ecf"]}},"max.js":{"size":614,"offset":"16510738","integrity":{"algorithm":"SHA256","hash":"c13073885738dd475d2dc16796b4d12746574b807ad173838dc3bc02c26498f8","blockSize":4194304,"blocks":["c13073885738dd475d2dc16796b4d12746574b807ad173838dc3bc02c26498f8"]}},"maxBy.js":{"size":991,"offset":"16511352","integrity":{"algorithm":"SHA256","hash":"83013470e39f512f7c510078bf572aa621ce07eb8fee584bc10618002089b7a2","blockSize":4194304,"blocks":["83013470e39f512f7c510078bf572aa621ce07eb8fee584bc10618002089b7a2"]}},"mean.js":{"size":422,"offset":"16512343","integrity":{"algorithm":"SHA256","hash":"dd24b4299489cf0c625fb1b6698ae72126f3fdb1e3d162182f356f6d3be29da5","blockSize":4194304,"blocks":["dd24b4299489cf0c625fb1b6698ae72126f3fdb1e3d162182f356f6d3be29da5"]}},"meanBy.js":{"size":879,"offset":"16512765","integrity":{"algorithm":"SHA256","hash":"12cd765887dd356f6f61669f64deefc353b465770add03226c29afcc3780c634","blockSize":4194304,"blocks":["12cd765887dd356f6f61669f64deefc353b465770add03226c29afcc3780c634"]}},"memoize.js":{"size":2224,"offset":"16513644","integrity":{"algorithm":"SHA256","hash":"6af4e4de786496fcaf4b12cd894c1da8306752b9703d72d1e4f26ba5911a6bd6","blockSize":4194304,"blocks":["6af4e4de786496fcaf4b12cd894c1da8306752b9703d72d1e4f26ba5911a6bd6"]}},"merge.js":{"size":1220,"offset":"16515868","integrity":{"algorithm":"SHA256","hash":"ef4315ccc54f92d79c85e4a38d3a5c869bace124444c3f0c0d6f03e722e5a5ce","blockSize":4194304,"blocks":["ef4315ccc54f92d79c85e4a38d3a5c869bace124444c3f0c0d6f03e722e5a5ce"]}},"mergeWith.js":{"size":1247,"offset":"16517088","integrity":{"algorithm":"SHA256","hash":"9b6b57a95baa3f93bb1853594d51ef64d20327de4b8bf58e9c7d1a68d6d7e564","blockSize":4194304,"blocks":["9b6b57a95baa3f93bb1853594d51ef64d20327de4b8bf58e9c7d1a68d6d7e564"]}},"method.js":{"size":860,"offset":"16518335","integrity":{"algorithm":"SHA256","hash":"e79016298f394b54126ecea31581cf921f00043ae9ac9896bd98daa64afaa0cc","blockSize":4194304,"blocks":["e79016298f394b54126ecea31581cf921f00043ae9ac9896bd98daa64afaa0cc"]}},"methodOf.js":{"size":912,"offset":"16519195","integrity":{"algorithm":"SHA256","hash":"e8f0a121e046ea54577951025d2bff430b12db1ae3de19bce5a41ace8ab2b21a","blockSize":4194304,"blocks":["e8f0a121e046ea54577951025d2bff430b12db1ae3de19bce5a41ace8ab2b21a"]}},"min.js":{"size":614,"offset":"16520107","integrity":{"algorithm":"SHA256","hash":"1f4ab3cde3a13dd942073c3356ddec332980261f95e6250a15e9ebe8343472bb","blockSize":4194304,"blocks":["1f4ab3cde3a13dd942073c3356ddec332980261f95e6250a15e9ebe8343472bb"]}},"minBy.js":{"size":991,"offset":"16520721","integrity":{"algorithm":"SHA256","hash":"e7675bc6c35b3f0a5e1dc1b6588dc002dcf58b3a00c75ba9b1a6891b5ddf54c2","blockSize":4194304,"blocks":["e7675bc6c35b3f0a5e1dc1b6588dc002dcf58b3a00c75ba9b1a6891b5ddf54c2"]}},"mixin.js":{"size":2236,"offset":"16521712","integrity":{"algorithm":"SHA256","hash":"eae8a9934d32432b5b41380d597911a1c88aeb5e51592ab27e9a1df4948502be","blockSize":4194304,"blocks":["eae8a9934d32432b5b41380d597911a1c88aeb5e51592ab27e9a1df4948502be"]}},"multiply.js":{"size":530,"offset":"16523948","integrity":{"algorithm":"SHA256","hash":"0d4009bb72441268d9fce8b2ba11ab5a933dd7e0bb79996a9c4df72aa7327e99","blockSize":4194304,"blocks":["0d4009bb72441268d9fce8b2ba11ab5a933dd7e0bb79996a9c4df72aa7327e99"]}},"negate.js":{"size":1079,"offset":"16524478","integrity":{"algorithm":"SHA256","hash":"e234ddf39ad6ddffe5bcaea254f1ebd2b672114ffe5f3fc96dbb2abdc5214fc1","blockSize":4194304,"blocks":["e234ddf39ad6ddffe5bcaea254f1ebd2b672114ffe5f3fc96dbb2abdc5214fc1"]}},"next.js":{"size":836,"offset":"16525557","integrity":{"algorithm":"SHA256","hash":"b733c8b62de5f90d3ad09fd8f65ea1ead0cd2858f0af2ba210b51d789ecb8baf","blockSize":4194304,"blocks":["b733c8b62de5f90d3ad09fd8f65ea1ead0cd2858f0af2ba210b51d789ecb8baf"]}},"noop.js":{"size":250,"offset":"16526393","integrity":{"algorithm":"SHA256","hash":"38a62a2c9c6f2ad54bc6a49c38dcb43dcf1907e8bdbb63b4f2129267eac82953","blockSize":4194304,"blocks":["38a62a2c9c6f2ad54bc6a49c38dcb43dcf1907e8bdbb63b4f2129267eac82953"]}},"now.js":{"size":520,"offset":"16526643","integrity":{"algorithm":"SHA256","hash":"0fa7d3abe4c87475532e995366408a373eae9b82b49590a0a6f3d87dbdc08759","blockSize":4194304,"blocks":["0fa7d3abe4c87475532e995366408a373eae9b82b49590a0a6f3d87dbdc08759"]}},"nth.js":{"size":671,"offset":"16527163","integrity":{"algorithm":"SHA256","hash":"667858f0346927588f8a09469b8999e74e236c7569c4d8f46e772ed7d391ab8d","blockSize":4194304,"blocks":["667858f0346927588f8a09469b8999e74e236c7569c4d8f46e772ed7d391ab8d"]}},"nthArg.js":{"size":730,"offset":"16527834","integrity":{"algorithm":"SHA256","hash":"01b64f63f3aba6ba003fd2ece4af4b65ccb06a4f64f872cbb5a16385c1c813a6","blockSize":4194304,"blocks":["01b64f63f3aba6ba003fd2ece4af4b65ccb06a4f64f872cbb5a16385c1c813a6"]}},"number.js":{"size":120,"offset":"16528564","integrity":{"algorithm":"SHA256","hash":"bd31ee4764fcb88bb64b6c7d6f76fe5f9a28917cab99af905e8baf89f72e58c3","blockSize":4194304,"blocks":["bd31ee4764fcb88bb64b6c7d6f76fe5f9a28917cab99af905e8baf89f72e58c3"]}},"object.js":{"size":1674,"offset":"16528684","integrity":{"algorithm":"SHA256","hash":"9bb1f3297bcce8b2154af10bdd94fe317016c97645c9c732927a26851e599c5b","blockSize":4194304,"blocks":["9bb1f3297bcce8b2154af10bdd94fe317016c97645c9c732927a26851e599c5b"]}},"omit.js":{"size":1629,"offset":"16530358","integrity":{"algorithm":"SHA256","hash":"111f0b5aff4899bd17d7087b6fe73b14ac2ecc078bb47dc98a9a77316bfbc8ab","blockSize":4194304,"blocks":["111f0b5aff4899bd17d7087b6fe73b14ac2ecc078bb47dc98a9a77316bfbc8ab"]}},"omitBy.js":{"size":854,"offset":"16531987","integrity":{"algorithm":"SHA256","hash":"21562397eee9288f5a388f22104ab01bb67c6603ec2a65a4f19a91aad244be70","blockSize":4194304,"blocks":["21562397eee9288f5a388f22104ab01bb67c6603ec2a65a4f19a91aad244be70"]}},"once.js":{"size":665,"offset":"16532841","integrity":{"algorithm":"SHA256","hash":"fb43a280b25abd87bfe71a49e89fc93aa04f3aaf5aef5bb6b5496f969c3b7e3e","blockSize":4194304,"blocks":["fb43a280b25abd87bfe71a49e89fc93aa04f3aaf5aef5bb6b5496f969c3b7e3e"]}},"orderBy.js":{"size":1620,"offset":"16533506","integrity":{"algorithm":"SHA256","hash":"0d2d6dd259a70e40b806f82f6b82c5defcc7b5a7b21810d4a483ae8f61b52962","blockSize":4194304,"blocks":["0d2d6dd259a70e40b806f82f6b82c5defcc7b5a7b21810d4a483ae8f61b52962"]}},"over.js":{"size":558,"offset":"16535126","integrity":{"algorithm":"SHA256","hash":"b5f9bac716ff835fc8cd72641e1403c9a2035e3447033bf406b019c5a90b0311","blockSize":4194304,"blocks":["b5f9bac716ff835fc8cd72641e1403c9a2035e3447033bf406b019c5a90b0311"]}},"overArgs.js":{"size":1620,"offset":"16535684","integrity":{"algorithm":"SHA256","hash":"c0a23b3547dba9c60a5957310f6194756ac525cf472c384383c76af786cced74","blockSize":4194304,"blocks":["c0a23b3547dba9c60a5957310f6194756ac525cf472c384383c76af786cced74"]}},"overEvery.js":{"size":920,"offset":"16537304","integrity":{"algorithm":"SHA256","hash":"d21d782cad2c1cfa1015d4d3d6a58944f1d3f6e86a9a03d87ec85859b9e7f039","blockSize":4194304,"blocks":["d21d782cad2c1cfa1015d4d3d6a58944f1d3f6e86a9a03d87ec85859b9e7f039"]}},"overSome.js":{"size":1036,"offset":"16538224","integrity":{"algorithm":"SHA256","hash":"9381b722d9066d3337b7e4fe7fd88f2ce856463610af6935a2a4bdcaada908bc","blockSize":4194304,"blocks":["9381b722d9066d3337b7e4fe7fd88f2ce856463610af6935a2a4bdcaada908bc"]}},"package.json":{"size":309,"offset":"16539260","integrity":{"algorithm":"SHA256","hash":"e161f6b7a638b53a45bd32be5bf632fdba77df2339b11b3c0422df27af855fe4","blockSize":4194304,"blocks":["e161f6b7a638b53a45bd32be5bf632fdba77df2339b11b3c0422df27af855fe4"]}},"pad.js":{"size":1289,"offset":"16539569","integrity":{"algorithm":"SHA256","hash":"cf3211fb74dcaa480d3e3926bc9b83183cb6445a9012036c058d2213d282fcf9","blockSize":4194304,"blocks":["cf3211fb74dcaa480d3e3926bc9b83183cb6445a9012036c058d2213d282fcf9"]}},"padEnd.js":{"size":1017,"offset":"16540858","integrity":{"algorithm":"SHA256","hash":"f1176d0c0a8081cd291ca698f969a15b3a218712070d034ae0095309fe062af9","blockSize":4194304,"blocks":["f1176d0c0a8081cd291ca698f969a15b3a218712070d034ae0095309fe062af9"]}},"padStart.js":{"size":1026,"offset":"16541875","integrity":{"algorithm":"SHA256","hash":"31d4ae76fc00b58c632e9cd7fa888acf9c4b94d09ad77837b682d33fee57e8b2","blockSize":4194304,"blocks":["31d4ae76fc00b58c632e9cd7fa888acf9c4b94d09ad77837b682d33fee57e8b2"]}},"parseInt.js":{"size":1256,"offset":"16542901","integrity":{"algorithm":"SHA256","hash":"947eae4b5773c2df1900ade13faea9f1e0ca1a034377c60535599b31bdd28e82","blockSize":4194304,"blocks":["947eae4b5773c2df1900ade13faea9f1e0ca1a034377c60535599b31bdd28e82"]}},"partial.js":{"size":1566,"offset":"16544157","integrity":{"algorithm":"SHA256","hash":"fcb93b458dd2ccca965bb9097b82f98e773a32854aab9a1b0707951fb579ea28","blockSize":4194304,"blocks":["fcb93b458dd2ccca965bb9097b82f98e773a32854aab9a1b0707951fb579ea28"]}},"partialRight.js":{"size":1552,"offset":"16545723","integrity":{"algorithm":"SHA256","hash":"991efe2459c0484db4ab4243d978be7ce464756a3ceb680702ec37107688d014","blockSize":4194304,"blocks":["991efe2459c0484db4ab4243d978be7ce464756a3ceb680702ec37107688d014"]}},"partition.js":{"size":1518,"offset":"16547275","integrity":{"algorithm":"SHA256","hash":"25e2fa2769d0c1f46f462aa42cd4e19684cfea908dfc5e14071cae6871d2e879","blockSize":4194304,"blocks":["25e2fa2769d0c1f46f462aa42cd4e19684cfea908dfc5e14071cae6871d2e879"]}},"pick.js":{"size":629,"offset":"16548793","integrity":{"algorithm":"SHA256","hash":"4cbba29a3f7b8c0eeeff73492436cd887137c61d86a534dd6ab0ed1d074eb32d","blockSize":4194304,"blocks":["4cbba29a3f7b8c0eeeff73492436cd887137c61d86a534dd6ab0ed1d074eb32d"]}},"pickBy.js":{"size":1032,"offset":"16549422","integrity":{"algorithm":"SHA256","hash":"bc1e0e1d9a64274fb842f1c8535947a4854d76c75d46c05614b6fb4d9b8b3c52","blockSize":4194304,"blocks":["bc1e0e1d9a64274fb842f1c8535947a4854d76c75d46c05614b6fb4d9b8b3c52"]}},"plant.js":{"size":1016,"offset":"16550454","integrity":{"algorithm":"SHA256","hash":"deff3ef01920380262562edb16762044e5bb9d871a06c44c9d5a856e37d73936","blockSize":4194304,"blocks":["deff3ef01920380262562edb16762044e5bb9d871a06c44c9d5a856e37d73936"]}},"property.js":{"size":793,"offset":"16551470","integrity":{"algorithm":"SHA256","hash":"da125f69db505ccfd4dcd6d6a7319144fb8b51641c6ee05482e6d8cb6ac6f4b6","blockSize":4194304,"blocks":["da125f69db505ccfd4dcd6d6a7319144fb8b51641c6ee05482e6d8cb6ac6f4b6"]}},"propertyOf.js":{"size":732,"offset":"16552263","integrity":{"algorithm":"SHA256","hash":"0b7a5a0e2670d0f96c40994e4cfd50a524deb9c3ca5d7484c644643bebe52b4a","blockSize":4194304,"blocks":["0b7a5a0e2670d0f96c40994e4cfd50a524deb9c3ca5d7484c644643bebe52b4a"]}},"pull.js":{"size":758,"offset":"16552995","integrity":{"algorithm":"SHA256","hash":"c8301fc8781d06564c6b581257b1d37fef2ef72f5fde278ca7600812bdfc6c9d","blockSize":4194304,"blocks":["c8301fc8781d06564c6b581257b1d37fef2ef72f5fde278ca7600812bdfc6c9d"]}},"pullAll.js":{"size":710,"offset":"16553753","integrity":{"algorithm":"SHA256","hash":"f8a32f19d1d7f18e1d435f0d19b22ca2dfa540d155879983a12adaf64d654948","blockSize":4194304,"blocks":["f8a32f19d1d7f18e1d435f0d19b22ca2dfa540d155879983a12adaf64d654948"]}},"pullAllBy.js":{"size":1071,"offset":"16554463","integrity":{"algorithm":"SHA256","hash":"07ce2a0cb52532b7b24d6174295735a6f91140e888268e5d3628144bcb2842bf","blockSize":4194304,"blocks":["07ce2a0cb52532b7b24d6174295735a6f91140e888268e5d3628144bcb2842bf"]}},"pullAllWith.js":{"size":1029,"offset":"16555534","integrity":{"algorithm":"SHA256","hash":"6c67efa1da58a9da803b77ea276ec10e1ba9cbdb74794b0905aae7e431d0fec2","blockSize":4194304,"blocks":["6c67efa1da58a9da803b77ea276ec10e1ba9cbdb74794b0905aae7e431d0fec2"]}},"pullAt.js":{"size":1182,"offset":"16556563","integrity":{"algorithm":"SHA256","hash":"bee596c05053f069c9bf52a6764051185c87a72b9843a8e19ec96639942e884b","blockSize":4194304,"blocks":["bee596c05053f069c9bf52a6764051185c87a72b9843a8e19ec96639942e884b"]}},"random.js":{"size":2371,"offset":"16557745","integrity":{"algorithm":"SHA256","hash":"94d723f1fe64d7ff6e8e830122eea5ce33bed70378aa9a26bd8e47fea48a7965","blockSize":4194304,"blocks":["94d723f1fe64d7ff6e8e830122eea5ce33bed70378aa9a26bd8e47fea48a7965"]}},"range.js":{"size":1151,"offset":"16560116","integrity":{"algorithm":"SHA256","hash":"5f4525258aa1cf817a982f7bcd47f5444d339e42460e225d238f59e276db6e02","blockSize":4194304,"blocks":["5f4525258aa1cf817a982f7bcd47f5444d339e42460e225d238f59e276db6e02"]}},"rangeRight.js":{"size":862,"offset":"16561267","integrity":{"algorithm":"SHA256","hash":"d369e69ebbf5a8c3c76995810cfb0ff158375646519544df218e155f4475139f","blockSize":4194304,"blocks":["d369e69ebbf5a8c3c76995810cfb0ff158375646519544df218e155f4475139f"]}},"rearg.js":{"size":1023,"offset":"16562129","integrity":{"algorithm":"SHA256","hash":"79b9c1b5811ea1d6be75314cc99f5bfb1791548e10d3d01a7e0163c34423140d","blockSize":4194304,"blocks":["79b9c1b5811ea1d6be75314cc99f5bfb1791548e10d3d01a7e0163c34423140d"]}},"reduce.js":{"size":1806,"offset":"16563152","integrity":{"algorithm":"SHA256","hash":"c1167b4759d69ccd38eb80c8913c883417398ebd0006ea0db5e0ba347fb9c9fb","blockSize":4194304,"blocks":["c1167b4759d69ccd38eb80c8913c883417398ebd0006ea0db5e0ba347fb9c9fb"]}},"reduceRight.js":{"size":1156,"offset":"16564958","integrity":{"algorithm":"SHA256","hash":"d05f636c91bc618e4fd973c28b42bd4973bd462ac527edb3bc906bc5181b91da","blockSize":4194304,"blocks":["d05f636c91bc618e4fd973c28b42bd4973bd462ac527edb3bc906bc5181b91da"]}},"reject.js":{"size":1417,"offset":"16566114","integrity":{"algorithm":"SHA256","hash":"e56b30e3aea9f9c23df5e9836909e2a3fd03536a13915f325796aee34240087d","blockSize":4194304,"blocks":["e56b30e3aea9f9c23df5e9836909e2a3fd03536a13915f325796aee34240087d"]}},"release.md":{"size":2035,"offset":"16567531","integrity":{"algorithm":"SHA256","hash":"e1e25b114bed9c23cdbc35f3bd626e11e55205c1cbda3be29cd495d5f68eec36","blockSize":4194304,"blocks":["e1e25b114bed9c23cdbc35f3bd626e11e55205c1cbda3be29cd495d5f68eec36"]}},"remove.js":{"size":1332,"offset":"16569566","integrity":{"algorithm":"SHA256","hash":"2435d4d1f044454c267ae81c9022b558f5715e7948e47ecff8f3aed7a25fe06d","blockSize":4194304,"blocks":["2435d4d1f044454c267ae81c9022b558f5715e7948e47ecff8f3aed7a25fe06d"]}},"repeat.js":{"size":893,"offset":"16570898","integrity":{"algorithm":"SHA256","hash":"ee99cd2c68eb39e317dd639e2ed9b823fa23e0df6da76bfe1c1b197b426e65ca","blockSize":4194304,"blocks":["ee99cd2c68eb39e317dd639e2ed9b823fa23e0df6da76bfe1c1b197b426e65ca"]}},"replace.js":{"size":754,"offset":"16571791","integrity":{"algorithm":"SHA256","hash":"008cf42308400e8ef434dba25c1803d5611b887948e4664ef986cdc7d7e481ad","blockSize":4194304,"blocks":["008cf42308400e8ef434dba25c1803d5611b887948e4664ef986cdc7d7e481ad"]}},"rest.js":{"size":1182,"offset":"16572545","integrity":{"algorithm":"SHA256","hash":"79ca7e2ca5e995494427ea9eeaee425fc00aadf22010458f97c5ef045a0d6db2","blockSize":4194304,"blocks":["79ca7e2ca5e995494427ea9eeaee425fc00aadf22010458f97c5ef045a0d6db2"]}},"result.js":{"size":1464,"offset":"16573727","integrity":{"algorithm":"SHA256","hash":"a74a0012595ae8f8436133e014c0a88996bcce9daf9c05a8073bb83018229987","blockSize":4194304,"blocks":["a74a0012595ae8f8436133e014c0a88996bcce9daf9c05a8073bb83018229987"]}},"reverse.js":{"size":844,"offset":"16575191","integrity":{"algorithm":"SHA256","hash":"74932b47ecbb57a169957934b3e60b0d2674dc7c7c3d47724d2fc718c7cc8835","blockSize":4194304,"blocks":["74932b47ecbb57a169957934b3e60b0d2674dc7c7c3d47724d2fc718c7cc8835"]}},"round.js":{"size":501,"offset":"16576035","integrity":{"algorithm":"SHA256","hash":"e2a1fdb818cc95091e07eb7ab39e6d4225da060a8835434a405fa0b71ac6a6a5","blockSize":4194304,"blocks":["e2a1fdb818cc95091e07eb7ab39e6d4225da060a8835434a405fa0b71ac6a6a5"]}},"sample.js":{"size":551,"offset":"16576536","integrity":{"algorithm":"SHA256","hash":"c18724427d723e8ce6f8b30842f319dd888e00ce3abafa4269f2c2426d1235ee","blockSize":4194304,"blocks":["c18724427d723e8ce6f8b30842f319dd888e00ce3abafa4269f2c2426d1235ee"]}},"sampleSize.js":{"size":1068,"offset":"16577087","integrity":{"algorithm":"SHA256","hash":"4ef5c7d375489169be1a95d136e8149a2a064e1c08be3c6ec8c80e486a385f6d","blockSize":4194304,"blocks":["4ef5c7d375489169be1a95d136e8149a2a064e1c08be3c6ec8c80e486a385f6d"]}},"seq.js":{"size":507,"offset":"16578155","integrity":{"algorithm":"SHA256","hash":"dab0db546b218008352e4887d5669995b8484ea197e358a7edd233df34562c81","blockSize":4194304,"blocks":["dab0db546b218008352e4887d5669995b8484ea197e358a7edd233df34562c81"]}},"set.js":{"size":960,"offset":"16578662","integrity":{"algorithm":"SHA256","hash":"7d360792369713f3b681afefb072820e8f65ff6a33b54be5f54eca09877c60a7","blockSize":4194304,"blocks":["7d360792369713f3b681afefb072820e8f65ff6a33b54be5f54eca09877c60a7"]}},"setWith.js":{"size":1055,"offset":"16579622","integrity":{"algorithm":"SHA256","hash":"67b49eecee29813be6f16a9662ad3d6bd8f1ffed0e06e1a1647b6c1d259fcbcd","blockSize":4194304,"blocks":["67b49eecee29813be6f16a9662ad3d6bd8f1ffed0e06e1a1647b6c1d259fcbcd"]}},"shuffle.js":{"size":678,"offset":"16580677","integrity":{"algorithm":"SHA256","hash":"9404bfe3f70e2efd6a0c1f126d15a2b49f0d6afc26a9a3dd953f451c3cb2334d","blockSize":4194304,"blocks":["9404bfe3f70e2efd6a0c1f126d15a2b49f0d6afc26a9a3dd953f451c3cb2334d"]}},"size.js":{"size":1137,"offset":"16581355","integrity":{"algorithm":"SHA256","hash":"f364a213efbd423be9914f35913e4d9a4b19b35a6a63f2e8043ba99b2dbd447d","blockSize":4194304,"blocks":["f364a213efbd423be9914f35913e4d9a4b19b35a6a63f2e8043ba99b2dbd447d"]}},"slice.js":{"size":1032,"offset":"16582492","integrity":{"algorithm":"SHA256","hash":"63af5e62744d8ba612c34f6a63135db37084aa8a8cd24ae3d5c9b359b6d9a709","blockSize":4194304,"blocks":["63af5e62744d8ba612c34f6a63135db37084aa8a8cd24ae3d5c9b359b6d9a709"]}},"snakeCase.js":{"size":638,"offset":"16583524","integrity":{"algorithm":"SHA256","hash":"eb1c8f66dfcadca552e957e9dfce3bf40a8d3ee06a0fd33873f4109374aae87c","blockSize":4194304,"blocks":["eb1c8f66dfcadca552e957e9dfce3bf40a8d3ee06a0fd33873f4109374aae87c"]}},"some.js":{"size":1608,"offset":"16584162","integrity":{"algorithm":"SHA256","hash":"a394760d37b72f47d6b41ca817a34a8e9db46051d9edc45ea6af499f94ba4b7b","blockSize":4194304,"blocks":["a394760d37b72f47d6b41ca817a34a8e9db46051d9edc45ea6af499f94ba4b7b"]}},"sortBy.js":{"size":1668,"offset":"16585770","integrity":{"algorithm":"SHA256","hash":"5a8cbdda6b42431dfdb9c3601937826452a74aad5525a952ff0e04ac420ec26f","blockSize":4194304,"blocks":["5a8cbdda6b42431dfdb9c3601937826452a74aad5525a952ff0e04ac420ec26f"]}},"sortedIndex.js":{"size":626,"offset":"16587438","integrity":{"algorithm":"SHA256","hash":"981d37d31ba52cac8ee891ad979708574fe53fd7acec38820f66b82916986cfc","blockSize":4194304,"blocks":["981d37d31ba52cac8ee891ad979708574fe53fd7acec38820f66b82916986cfc"]}},"sortedIndexBy.js":{"size":1060,"offset":"16588064","integrity":{"algorithm":"SHA256","hash":"ba3e1b9a9962fa01a81c38a0990f3ac24fa35bdbc7e0ee14fcda3bb0107c3ab9","blockSize":4194304,"blocks":["ba3e1b9a9962fa01a81c38a0990f3ac24fa35bdbc7e0ee14fcda3bb0107c3ab9"]}},"sortedIndexOf.js":{"size":762,"offset":"16589124","integrity":{"algorithm":"SHA256","hash":"691b81b8a5c61d8b3675e5974fc46fad3791369e638ebf0ba735f4193ed9055a","blockSize":4194304,"blocks":["691b81b8a5c61d8b3675e5974fc46fad3791369e638ebf0ba735f4193ed9055a"]}},"sortedLastIndex.js":{"size":679,"offset":"16589886","integrity":{"algorithm":"SHA256","hash":"31a10902c20e65ab63869587d18ffa300a3f4f3ddf46051ec6f9df82ffeafa0f","blockSize":4194304,"blocks":["31a10902c20e65ab63869587d18ffa300a3f4f3ddf46051ec6f9df82ffeafa0f"]}},"sortedLastIndexBy.js":{"size":1086,"offset":"16590565","integrity":{"algorithm":"SHA256","hash":"a4023ca1c6ea8042e34844fdbb823d3748c22a56271cfe08717265293c75b040","blockSize":4194304,"blocks":["a4023ca1c6ea8042e34844fdbb823d3748c22a56271cfe08717265293c75b040"]}},"sortedLastIndexOf.js":{"size":770,"offset":"16591651","integrity":{"algorithm":"SHA256","hash":"bf039101776c42209d49dc4d6aa71766f6379b649570cbe1820a8665bbd2697f","blockSize":4194304,"blocks":["bf039101776c42209d49dc4d6aa71766f6379b649570cbe1820a8665bbd2697f"]}},"sortedUniq.js":{"size":513,"offset":"16592421","integrity":{"algorithm":"SHA256","hash":"7703c411b9007aadde4b059ed06a62c9c0ea8c0ce2727f355a9c50070b4ebd33","blockSize":4194304,"blocks":["7703c411b9007aadde4b059ed06a62c9c0ea8c0ce2727f355a9c50070b4ebd33"]}},"sortedUniqBy.js":{"size":698,"offset":"16592934","integrity":{"algorithm":"SHA256","hash":"8d531a82e2bd8150e5e50b7e2237fcef5163fd4ee63919ec3b1aca73b2420d9e","blockSize":4194304,"blocks":["8d531a82e2bd8150e5e50b7e2237fcef5163fd4ee63919ec3b1aca73b2420d9e"]}},"split.js":{"size":1550,"offset":"16593632","integrity":{"algorithm":"SHA256","hash":"9ddd17c2b6f10fcae28e91b8e8448ec8e5a8d97e3b4c8c005fc6d684060b8926","blockSize":4194304,"blocks":["9ddd17c2b6f10fcae28e91b8e8448ec8e5a8d97e3b4c8c005fc6d684060b8926"]}},"spread.js":{"size":1734,"offset":"16595182","integrity":{"algorithm":"SHA256","hash":"73d5b51a697642c4a8a855d06d337473ad15be8f2039287587ccdf760628531d","blockSize":4194304,"blocks":["73d5b51a697642c4a8a855d06d337473ad15be8f2039287587ccdf760628531d"]}},"startCase.js":{"size":714,"offset":"16596916","integrity":{"algorithm":"SHA256","hash":"108cd495196f72d90a5fd94044456cf5a2761f0516923bdeb76740d00db42d22","blockSize":4194304,"blocks":["108cd495196f72d90a5fd94044456cf5a2761f0516923bdeb76740d00db42d22"]}},"startsWith.js":{"size":1017,"offset":"16597630","integrity":{"algorithm":"SHA256","hash":"5d9a4b6bb06a1720fa1e97eb9e59a942e52ec2201da91f0ff24c5a68276face0","blockSize":4194304,"blocks":["5d9a4b6bb06a1720fa1e97eb9e59a942e52ec2201da91f0ff24c5a68276face0"]}},"string.js":{"size":1168,"offset":"16598647","integrity":{"algorithm":"SHA256","hash":"636bf39182438c55ffff385e677cc705cdef460199b4c509fc9b9acaa56c4925","blockSize":4194304,"blocks":["636bf39182438c55ffff385e677cc705cdef460199b4c509fc9b9acaa56c4925"]}},"stubArray.js":{"size":390,"offset":"16599815","integrity":{"algorithm":"SHA256","hash":"86957766d1bc7426012c406dd17a928f542c6dc761d49abfb166c476e00ba32f","blockSize":4194304,"blocks":["86957766d1bc7426012c406dd17a928f542c6dc761d49abfb166c476e00ba32f"]}},"stubFalse.js":{"size":280,"offset":"16600205","integrity":{"algorithm":"SHA256","hash":"6ec347f5c68c5ebecf76df2bb8526dcbbbae3f61ea08349687264ce930a518c1","blockSize":4194304,"blocks":["6ec347f5c68c5ebecf76df2bb8526dcbbbae3f61ea08349687264ce930a518c1"]}},"stubObject.js":{"size":400,"offset":"16600485","integrity":{"algorithm":"SHA256","hash":"4362303459fd4a044cae04bc4db25225e3f17010b5bddd7f5e9b387b52671072","blockSize":4194304,"blocks":["4362303459fd4a044cae04bc4db25225e3f17010b5bddd7f5e9b387b52671072"]}},"stubString.js":{"size":290,"offset":"16600885","integrity":{"algorithm":"SHA256","hash":"8282be93d33c10a1472c029c96bf15fefbe4b20bc7056e871f43808079356f0e","blockSize":4194304,"blocks":["8282be93d33c10a1472c029c96bf15fefbe4b20bc7056e871f43808079356f0e"]}},"stubTrue.js":{"size":272,"offset":"16601175","integrity":{"algorithm":"SHA256","hash":"91ae183af950f90b7cca8482ba7cb6c3bebd3d544d98440da1c6a74de7a209ce","blockSize":4194304,"blocks":["91ae183af950f90b7cca8482ba7cb6c3bebd3d544d98440da1c6a74de7a209ce"]}},"subtract.js":{"size":511,"offset":"16601447","integrity":{"algorithm":"SHA256","hash":"c323ae7cfd52cbc647839d393b69b8ebb7a040e0563270520056d0504b9f0ca1","blockSize":4194304,"blocks":["c323ae7cfd52cbc647839d393b69b8ebb7a040e0563270520056d0504b9f0ca1"]}},"sum.js":{"size":453,"offset":"16601958","integrity":{"algorithm":"SHA256","hash":"6fe92f7eb7e0213305122ecf35e2e8ffdf0e7aa8e77a5ab2119323d16396da02","blockSize":4194304,"blocks":["6fe92f7eb7e0213305122ecf35e2e8ffdf0e7aa8e77a5ab2119323d16396da02"]}},"sumBy.js":{"size":908,"offset":"16602411","integrity":{"algorithm":"SHA256","hash":"2737e36d3fe6bfb8005bdf4ab6a110ede4e893f2f4436cbd05238207cb281fed","blockSize":4194304,"blocks":["2737e36d3fe6bfb8005bdf4ab6a110ede4e893f2f4436cbd05238207cb281fed"]}},"tail.js":{"size":457,"offset":"16603319","integrity":{"algorithm":"SHA256","hash":"47aa7bdfe769f6c51d1345eaf5be9767805717d3c53e6bd28fc6311b2c5aacc9","blockSize":4194304,"blocks":["47aa7bdfe769f6c51d1345eaf5be9767805717d3c53e6bd28fc6311b2c5aacc9"]}},"take.js":{"size":851,"offset":"16603776","integrity":{"algorithm":"SHA256","hash":"36a865b57bdf76fa019b17befbb168d142cb4845a1e112dd8b7378f3100d68a4","blockSize":4194304,"blocks":["36a865b57bdf76fa019b17befbb168d142cb4845a1e112dd8b7378f3100d68a4"]}},"takeRight.js":{"size":930,"offset":"16604627","integrity":{"algorithm":"SHA256","hash":"e82c0b9b868d9cd082f8a4af0c3c7b94de3bcbbda83f7aa333972018bf7f9589","blockSize":4194304,"blocks":["e82c0b9b868d9cd082f8a4af0c3c7b94de3bcbbda83f7aa333972018bf7f9589"]}},"takeRightWhile.js":{"size":1376,"offset":"16605557","integrity":{"algorithm":"SHA256","hash":"26588a91112800e0ea1f64da8403997be219631c230149859f654e29f8e1819a","blockSize":4194304,"blocks":["26588a91112800e0ea1f64da8403997be219631c230149859f654e29f8e1819a"]}},"takeWhile.js":{"size":1335,"offset":"16606933","integrity":{"algorithm":"SHA256","hash":"3d2f50d3988a18345b8b369ba73c15c10a4fab70d1875ad5d8d8e4b38a634435","blockSize":4194304,"blocks":["3d2f50d3988a18345b8b369ba73c15c10a4fab70d1875ad5d8d8e4b38a634435"]}},"tap.js":{"size":703,"offset":"16608268","integrity":{"algorithm":"SHA256","hash":"aa820de8409133b7653431dfbbcadbca04269cfae8af8df6c0da82a3d556deec","blockSize":4194304,"blocks":["aa820de8409133b7653431dfbbcadbca04269cfae8af8df6c0da82a3d556deec"]}},"template.js":{"size":10441,"offset":"16608971","integrity":{"algorithm":"SHA256","hash":"edbf787035abfd38c36f32d078f02e1323cbb2a4c27e4bebef78563d05d178de","blockSize":4194304,"blocks":["edbf787035abfd38c36f32d078f02e1323cbb2a4c27e4bebef78563d05d178de"]}},"templateSettings.js":{"size":1411,"offset":"16619412","integrity":{"algorithm":"SHA256","hash":"fa78884650cf0b222f215c1d8cc9caf4d871c2c84daa496521f6ed9cb103213b","blockSize":4194304,"blocks":["fa78884650cf0b222f215c1d8cc9caf4d871c2c84daa496521f6ed9cb103213b"]}},"throttle.js":{"size":2709,"offset":"16620823","integrity":{"algorithm":"SHA256","hash":"8e7dea8e64d60711dbe02ccd5b6836ddda9befd58b6c5afe8e781aad1a9c999f","blockSize":4194304,"blocks":["8e7dea8e64d60711dbe02ccd5b6836ddda9befd58b6c5afe8e781aad1a9c999f"]}},"thru.js":{"size":674,"offset":"16623532","integrity":{"algorithm":"SHA256","hash":"479ae3e185f7daceee159faa1d786cbca09d07c376e11c3547f498029ea92c05","blockSize":4194304,"blocks":["479ae3e185f7daceee159faa1d786cbca09d07c376e11c3547f498029ea92c05"]}},"times.js":{"size":1367,"offset":"16624206","integrity":{"algorithm":"SHA256","hash":"7e689f391f3c044251f47962524e5c5aa9c5571ee386c2a361d8f4fe8423639a","blockSize":4194304,"blocks":["7e689f391f3c044251f47962524e5c5aa9c5571ee386c2a361d8f4fe8423639a"]}},"toArray.js":{"size":1406,"offset":"16625573","integrity":{"algorithm":"SHA256","hash":"fc48c33556d90668af1c08d97160af98b72496835722ed1cd59e92b65043908d","blockSize":4194304,"blocks":["fc48c33556d90668af1c08d97160af98b72496835722ed1cd59e92b65043908d"]}},"toFinite.js":{"size":868,"offset":"16626979","integrity":{"algorithm":"SHA256","hash":"a3a9eec40b0e823be3e0b77dc43a4e9f9bf9e17417af7bfaed05ee8edb81ca17","blockSize":4194304,"blocks":["a3a9eec40b0e823be3e0b77dc43a4e9f9bf9e17417af7bfaed05ee8edb81ca17"]}},"toInteger.js":{"size":760,"offset":"16627847","integrity":{"algorithm":"SHA256","hash":"da79a1f3d3be300e26a6fda4a45a67adc91411525645f527fea622b2d4ac56e4","blockSize":4194304,"blocks":["da79a1f3d3be300e26a6fda4a45a67adc91411525645f527fea622b2d4ac56e4"]}},"toIterator.js":{"size":403,"offset":"16628607","integrity":{"algorithm":"SHA256","hash":"28ffca1413353335451c4188cf5189439501e861f4b33a311f34dd87f47275e6","blockSize":4194304,"blocks":["28ffca1413353335451c4188cf5189439501e861f4b33a311f34dd87f47275e6"]}},"toJSON.js":{"size":44,"offset":"16629010","integrity":{"algorithm":"SHA256","hash":"469f0f647beaf4eeca8d316133bcd0a0b3f5e55a4c1a391da1f10baba824ca9d","blockSize":4194304,"blocks":["469f0f647beaf4eeca8d316133bcd0a0b3f5e55a4c1a391da1f10baba824ca9d"]}},"toLength.js":{"size":868,"offset":"16629054","integrity":{"algorithm":"SHA256","hash":"059994a6c98eb0e9ee6a565d00667e2068c0728bf2bf89994e06fcb13593f3d0","blockSize":4194304,"blocks":["059994a6c98eb0e9ee6a565d00667e2068c0728bf2bf89994e06fcb13593f3d0"]}},"toLower.js":{"size":592,"offset":"16629922","integrity":{"algorithm":"SHA256","hash":"f6e45b8be13b609296579855e785ec4544505a7da395f70774c10f9bb6998717","blockSize":4194304,"blocks":["f6e45b8be13b609296579855e785ec4544505a7da395f70774c10f9bb6998717"]}},"toNumber.js":{"size":1519,"offset":"16630514","integrity":{"algorithm":"SHA256","hash":"1dceb1da4f87066299be510852a9106b73240df14258385b2ae13255d23c665a","blockSize":4194304,"blocks":["1dceb1da4f87066299be510852a9106b73240df14258385b2ae13255d23c665a"]}},"toPairs.js":{"size":699,"offset":"16632033","integrity":{"algorithm":"SHA256","hash":"67971d14cd7cd08e44c4bdf71de888d2352457d4bb911399cd76b5781aa20e10","blockSize":4194304,"blocks":["67971d14cd7cd08e44c4bdf71de888d2352457d4bb911399cd76b5781aa20e10"]}},"toPairsIn.js":{"size":737,"offset":"16632732","integrity":{"algorithm":"SHA256","hash":"41be305859dc6caa8be52619f7547ee0753eaa5c5ebb1915a04939bc10f941b6","blockSize":4194304,"blocks":["41be305859dc6caa8be52619f7547ee0753eaa5c5ebb1915a04939bc10f941b6"]}},"toPath.js":{"size":804,"offset":"16633469","integrity":{"algorithm":"SHA256","hash":"90edd92b5e23f14f88910f4277ba72c0a4b2b32edfeb6fb71974d0877e5ab90d","blockSize":4194304,"blocks":["90edd92b5e23f14f88910f4277ba72c0a4b2b32edfeb6fb71974d0877e5ab90d"]}},"toPlainObject.js":{"size":744,"offset":"16634273","integrity":{"algorithm":"SHA256","hash":"f25cb210adc84f80ceb07dc3b4d13563b60883459c11b069bf92f1c3315fb36c","blockSize":4194304,"blocks":["f25cb210adc84f80ceb07dc3b4d13563b60883459c11b069bf92f1c3315fb36c"]}},"toSafeInteger.js":{"size":836,"offset":"16635017","integrity":{"algorithm":"SHA256","hash":"d2ff274d756cd7869491ed12c1f4b9d6e4d54a75a648bba08b5c277de0a8b900","blockSize":4194304,"blocks":["d2ff274d756cd7869491ed12c1f4b9d6e4d54a75a648bba08b5c277de0a8b900"]}},"toString.js":{"size":580,"offset":"16635853","integrity":{"algorithm":"SHA256","hash":"bba94dbb89a34154ce6afb46e07a6bbcfc4928053f46300ba4a9dfd7ab2a94fc","blockSize":4194304,"blocks":["bba94dbb89a34154ce6afb46e07a6bbcfc4928053f46300ba4a9dfd7ab2a94fc"]}},"toUpper.js":{"size":592,"offset":"16636433","integrity":{"algorithm":"SHA256","hash":"e31fee226eadaff21bc4612ec1701a7cb39ffc8d7a59eeefdf6a2ebae9e77a56","blockSize":4194304,"blocks":["e31fee226eadaff21bc4612ec1701a7cb39ffc8d7a59eeefdf6a2ebae9e77a56"]}},"transform.js":{"size":2280,"offset":"16637025","integrity":{"algorithm":"SHA256","hash":"6aef56cab3ed694b5ffd3e3573171327017ad4621c7addfc88058ac521dcbf81","blockSize":4194304,"blocks":["6aef56cab3ed694b5ffd3e3573171327017ad4621c7addfc88058ac521dcbf81"]}},"trim.js":{"size":1381,"offset":"16639305","integrity":{"algorithm":"SHA256","hash":"2581b16b0f17b70307ae6f4c479a5392ce625e67e2acad95f24c971732bd423f","blockSize":4194304,"blocks":["2581b16b0f17b70307ae6f4c479a5392ce625e67e2acad95f24c971732bd423f"]}},"trimEnd.js":{"size":1216,"offset":"16640686","integrity":{"algorithm":"SHA256","hash":"b35e41e442395a9a98d4aa79e3105c54494bc3ad667d84ea46007dbe65c41f7d","blockSize":4194304,"blocks":["b35e41e442395a9a98d4aa79e3105c54494bc3ad667d84ea46007dbe65c41f7d"]}},"trimStart.js":{"size":1228,"offset":"16641902","integrity":{"algorithm":"SHA256","hash":"570ca220de5e5202e964cefbd8f50c1f5431979aa8c713f65274f55613bd65d8","blockSize":4194304,"blocks":["570ca220de5e5202e964cefbd8f50c1f5431979aa8c713f65274f55613bd65d8"]}},"truncate.js":{"size":3357,"offset":"16643130","integrity":{"algorithm":"SHA256","hash":"44ac616ac0042b55a20dfa8705d6fff0d9a4b44b1915660298671ff3600dbfbd","blockSize":4194304,"blocks":["44ac616ac0042b55a20dfa8705d6fff0d9a4b44b1915660298671ff3600dbfbd"]}},"unary.js":{"size":469,"offset":"16646487","integrity":{"algorithm":"SHA256","hash":"72239e4f3d3b659d32698c13f279d9dcf8298c690ccd0eca164996768437cef7","blockSize":4194304,"blocks":["72239e4f3d3b659d32698c13f279d9dcf8298c690ccd0eca164996768437cef7"]}},"unescape.js":{"size":1056,"offset":"16646956","integrity":{"algorithm":"SHA256","hash":"96e61d530c8f298fc615ffe5742dfc166ddab5bd89e0ccc5f9e5518b944f0f0c","blockSize":4194304,"blocks":["96e61d530c8f298fc615ffe5742dfc166ddab5bd89e0ccc5f9e5518b944f0f0c"]}},"union.js":{"size":749,"offset":"16648012","integrity":{"algorithm":"SHA256","hash":"4368c727c7607f90fe5d61ccd22898745f1331d71780deeddb7b7c3345c1571e","blockSize":4194304,"blocks":["4368c727c7607f90fe5d61ccd22898745f1331d71780deeddb7b7c3345c1571e"]}},"unionBy.js":{"size":1320,"offset":"16648761","integrity":{"algorithm":"SHA256","hash":"3f179990db852233f2cdd65a4aad975c99e3a8838bb75d94934d3c734aaec953","blockSize":4194304,"blocks":["3f179990db852233f2cdd65a4aad975c99e3a8838bb75d94934d3c734aaec953"]}},"unionWith.js":{"size":1255,"offset":"16650081","integrity":{"algorithm":"SHA256","hash":"bdc498eebed2852915801f8905c42a7acb61d40ef057ed4eeec74707563db4c2","blockSize":4194304,"blocks":["bdc498eebed2852915801f8905c42a7acb61d40ef057ed4eeec74707563db4c2"]}},"uniq.js":{"size":688,"offset":"16651336","integrity":{"algorithm":"SHA256","hash":"baceb9385e442be370276ec74cdc498be480ae7f7dff881259f4ed5d5a8a099c","blockSize":4194304,"blocks":["baceb9385e442be370276ec74cdc498be480ae7f7dff881259f4ed5d5a8a099c"]}},"uniqBy.js":{"size":1013,"offset":"16652024","integrity":{"algorithm":"SHA256","hash":"674640e6cd6e098f233d6dc067239c66483cb3b24900b13ee718a35f8a86688c","blockSize":4194304,"blocks":["674640e6cd6e098f233d6dc067239c66483cb3b24900b13ee718a35f8a86688c"]}},"uniqueId.js":{"size":562,"offset":"16653037","integrity":{"algorithm":"SHA256","hash":"5526b1388b92c2ac6d80da02d1602e20023644b61eb5d09a84ce9fad464ad328","blockSize":4194304,"blocks":["5526b1388b92c2ac6d80da02d1602e20023644b61eb5d09a84ce9fad464ad328"]}},"uniqWith.js":{"size":958,"offset":"16653599","integrity":{"algorithm":"SHA256","hash":"db9b1221ea9fb52789e574390fc51dcad76fa2a87465153bee4be25cde0a263a","blockSize":4194304,"blocks":["db9b1221ea9fb52789e574390fc51dcad76fa2a87465153bee4be25cde0a263a"]}},"unset.js":{"size":804,"offset":"16654557","integrity":{"algorithm":"SHA256","hash":"74d4c2b1a3a8371c8cbd73ccd90be05130a49489302b450edfd4f145ecec2a88","blockSize":4194304,"blocks":["74d4c2b1a3a8371c8cbd73ccd90be05130a49489302b450edfd4f145ecec2a88"]}},"unzip.js":{"size":1282,"offset":"16655361","integrity":{"algorithm":"SHA256","hash":"21f9ebd1100e9559ac578cf1d4530e8cf3ca9898dda43a58ba8820da2d62b9f5","blockSize":4194304,"blocks":["21f9ebd1100e9559ac578cf1d4530e8cf3ca9898dda43a58ba8820da2d62b9f5"]}},"unzipWith.js":{"size":1049,"offset":"16656643","integrity":{"algorithm":"SHA256","hash":"7c9ca06948ac1a3c45e489eb577a20a5845f5bb7323458c540abe94d0e560821","blockSize":4194304,"blocks":["7c9ca06948ac1a3c45e489eb577a20a5845f5bb7323458c540abe94d0e560821"]}},"update.js":{"size":1076,"offset":"16657692","integrity":{"algorithm":"SHA256","hash":"e4a0faeda8f2e830fdbfaf9179286e62dc0863e0c6a9759c04a062ccab6f4382","blockSize":4194304,"blocks":["e4a0faeda8f2e830fdbfaf9179286e62dc0863e0c6a9759c04a062ccab6f4382"]}},"updateWith.js":{"size":1187,"offset":"16658768","integrity":{"algorithm":"SHA256","hash":"686f7e67fc02344b760b85528ac13d7e85ac93fc700a9fc786b98c37002f0b20","blockSize":4194304,"blocks":["686f7e67fc02344b760b85528ac13d7e85ac93fc700a9fc786b98c37002f0b20"]}},"upperCase.js":{"size":620,"offset":"16659955","integrity":{"algorithm":"SHA256","hash":"9b627b718944776e62e95ae307a80f03c9c32560c58435904dcf519431447002","blockSize":4194304,"blocks":["9b627b718944776e62e95ae307a80f03c9c32560c58435904dcf519431447002"]}},"upperFirst.js":{"size":470,"offset":"16660575","integrity":{"algorithm":"SHA256","hash":"4b161930648589f87db7960ab4fbd3996cd32dbcb29e1aaca0d23cda943c81bf","blockSize":4194304,"blocks":["4b161930648589f87db7960ab4fbd3996cd32dbcb29e1aaca0d23cda943c81bf"]}},"util.js":{"size":1177,"offset":"16661045","integrity":{"algorithm":"SHA256","hash":"5bad3574e58dce630b79a23ca85df8c86a6a507a019412f055e061ccfab0c341","blockSize":4194304,"blocks":["5bad3574e58dce630b79a23ca85df8c86a6a507a019412f055e061ccfab0c341"]}},"value.js":{"size":44,"offset":"16662222","integrity":{"algorithm":"SHA256","hash":"469f0f647beaf4eeca8d316133bcd0a0b3f5e55a4c1a391da1f10baba824ca9d","blockSize":4194304,"blocks":["469f0f647beaf4eeca8d316133bcd0a0b3f5e55a4c1a391da1f10baba824ca9d"]}},"valueOf.js":{"size":44,"offset":"16662266","integrity":{"algorithm":"SHA256","hash":"469f0f647beaf4eeca8d316133bcd0a0b3f5e55a4c1a391da1f10baba824ca9d","blockSize":4194304,"blocks":["469f0f647beaf4eeca8d316133bcd0a0b3f5e55a4c1a391da1f10baba824ca9d"]}},"values.js":{"size":733,"offset":"16662310","integrity":{"algorithm":"SHA256","hash":"2d40fdc1a33e1cb3452294ed2d3c975efea197890282e7f32d1873e2a206b3b8","blockSize":4194304,"blocks":["2d40fdc1a33e1cb3452294ed2d3c975efea197890282e7f32d1873e2a206b3b8"]}},"valuesIn.js":{"size":723,"offset":"16663043","integrity":{"algorithm":"SHA256","hash":"75dfeab75daa444fd41fbbe0bd032f01a0d6a5a77b1cefd5fb0b7a4a85ea4031","blockSize":4194304,"blocks":["75dfeab75daa444fd41fbbe0bd032f01a0d6a5a77b1cefd5fb0b7a4a85ea4031"]}},"without.js":{"size":858,"offset":"16663766","integrity":{"algorithm":"SHA256","hash":"53395074deb2a710c1de202e9fb00e3c110a9444dd35546f5fa231e459580a62","blockSize":4194304,"blocks":["53395074deb2a710c1de202e9fb00e3c110a9444dd35546f5fa231e459580a62"]}},"words.js":{"size":1031,"offset":"16664624","integrity":{"algorithm":"SHA256","hash":"031f8b92aa66c9349f3c680e7a0299c579460a64ef6ca1e6619b42ada3e0c75e","blockSize":4194304,"blocks":["031f8b92aa66c9349f3c680e7a0299c579460a64ef6ca1e6619b42ada3e0c75e"]}},"wrap.js":{"size":871,"offset":"16665655","integrity":{"algorithm":"SHA256","hash":"dcfebf623523363f0c24faf07c6763fa004883d8bc2e5f2c0e1a1244ed8fdcaf","blockSize":4194304,"blocks":["dcfebf623523363f0c24faf07c6763fa004883d8bc2e5f2c0e1a1244ed8fdcaf"]}},"wrapperAt.js":{"size":1341,"offset":"16666526","integrity":{"algorithm":"SHA256","hash":"e2bfb9a9b4a1dd501a8028c7abae2b38cc0eb2eb871641449f1d2e9fa25256eb","blockSize":4194304,"blocks":["e2bfb9a9b4a1dd501a8028c7abae2b38cc0eb2eb871641449f1d2e9fa25256eb"]}},"wrapperChain.js":{"size":706,"offset":"16667867","integrity":{"algorithm":"SHA256","hash":"008f513acad5b08f04ab4c2115edd168c6337da85409cccd3034111d2f4973bb","blockSize":4194304,"blocks":["008f513acad5b08f04ab4c2115edd168c6337da85409cccd3034111d2f4973bb"]}},"wrapperLodash.js":{"size":6942,"offset":"16668573","integrity":{"algorithm":"SHA256","hash":"f222456449139eea3935c6ca92652bb1315fa2f7948de0684fda300d519d429a","blockSize":4194304,"blocks":["f222456449139eea3935c6ca92652bb1315fa2f7948de0684fda300d519d429a"]}},"wrapperReverse.js":{"size":1019,"offset":"16675515","integrity":{"algorithm":"SHA256","hash":"c803206c4600839eec340ce698c1e6c44809240a33ab108df4c1ca4dc398d9d5","blockSize":4194304,"blocks":["c803206c4600839eec340ce698c1e6c44809240a33ab108df4c1ca4dc398d9d5"]}},"wrapperValue.js":{"size":455,"offset":"16676534","integrity":{"algorithm":"SHA256","hash":"d29bc014314edc459fef32c467fa48951ee5e80adda0485142195b22834b761a","blockSize":4194304,"blocks":["d29bc014314edc459fef32c467fa48951ee5e80adda0485142195b22834b761a"]}},"xor.js":{"size":811,"offset":"16676989","integrity":{"algorithm":"SHA256","hash":"8f8deb349ef4d8404e576da4b8fafe24962a08717aa6cb53352406b612e2aeb4","blockSize":4194304,"blocks":["8f8deb349ef4d8404e576da4b8fafe24962a08717aa6cb53352406b612e2aeb4"]}},"xorBy.js":{"size":1301,"offset":"16677800","integrity":{"algorithm":"SHA256","hash":"5e7d02fb443662313db1f626ce285196b304aa84cbf1c3aab4234e614e95eab7","blockSize":4194304,"blocks":["5e7d02fb443662313db1f626ce285196b304aa84cbf1c3aab4234e614e95eab7"]}},"xorWith.js":{"size":1222,"offset":"16679101","integrity":{"algorithm":"SHA256","hash":"4617fb7d53b1982e8286e08841b94c879395c995774570e2c06d06ca3976b2c3","blockSize":4194304,"blocks":["4617fb7d53b1982e8286e08841b94c879395c995774570e2c06d06ca3976b2c3"]}},"zip.js":{"size":609,"offset":"16680323","integrity":{"algorithm":"SHA256","hash":"0ccb99e1fed07dbe5bec9f9d75a9aaf4591fb6ae3d719f94bc3bb6e8f5f2bff3","blockSize":4194304,"blocks":["0ccb99e1fed07dbe5bec9f9d75a9aaf4591fb6ae3d719f94bc3bb6e8f5f2bff3"]}},"zipObject.js":{"size":664,"offset":"16680932","integrity":{"algorithm":"SHA256","hash":"8b3b705599aa43b6358ba4261b3c7d48ba55da40a74082b08844e0df2fda231e","blockSize":4194304,"blocks":["8b3b705599aa43b6358ba4261b3c7d48ba55da40a74082b08844e0df2fda231e"]}},"zipObjectDeep.js":{"size":643,"offset":"16681596","integrity":{"algorithm":"SHA256","hash":"7bffde7f20305ed72b183108c764cb936163c67bb09b307b702e6449c3af3e4f","blockSize":4194304,"blocks":["7bffde7f20305ed72b183108c764cb936163c67bb09b307b702e6449c3af3e4f"]}},"zipWith.js":{"size":960,"offset":"16682239","integrity":{"algorithm":"SHA256","hash":"39e21527d4083b4d20930927308be07b7421796fff9df2d13ddd49271957abb8","blockSize":4194304,"blocks":["39e21527d4083b4d20930927308be07b7421796fff9df2d13ddd49271957abb8"]}}}},"lowercase-keys":{"files":{"index.js":{"size":178,"offset":"16683199","integrity":{"algorithm":"SHA256","hash":"a7b40f46216d06cbe2b183e35a666e8932758d7cd70c66aa403e48dd0b750ee7","blockSize":4194304,"blocks":["a7b40f46216d06cbe2b183e35a666e8932758d7cd70c66aa403e48dd0b750ee7"]}},"license":{"size":1109,"offset":"16683377","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":467,"offset":"16684486","integrity":{"algorithm":"SHA256","hash":"1f46fd504a13a0a5629d930110779b06659905f3d2caff438c8e3c34ba37d432","blockSize":4194304,"blocks":["1f46fd504a13a0a5629d930110779b06659905f3d2caff438c8e3c34ba37d432"]}}}},"lru-cache":{"files":{"index.js":{"size":10689,"offset":"16684953","integrity":{"algorithm":"SHA256","hash":"86675979bd2b3b34a3c453eb71b1d53227dd71f51ebb519e6f7f23f7b007bdfa","blockSize":4194304,"blocks":["86675979bd2b3b34a3c453eb71b1d53227dd71f51ebb519e6f7f23f7b007bdfa"]}},"LICENSE":{"size":765,"offset":"16695642","integrity":{"algorithm":"SHA256","hash":"4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b","blockSize":4194304,"blocks":["4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b"]}},"node_modules":{"files":{"yallist":{"files":{"iterator.js":{"size":183,"offset":"16696407","integrity":{"algorithm":"SHA256","hash":"c8c3b45ee2bd74d2095f7d64fae387af1e06260793fc28b98dbeb5a405f7301f","blockSize":4194304,"blocks":["c8c3b45ee2bd74d2095f7d64fae387af1e06260793fc28b98dbeb5a405f7301f"]}},"LICENSE":{"size":765,"offset":"16696590","integrity":{"algorithm":"SHA256","hash":"4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b","blockSize":4194304,"blocks":["4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b"]}},"package.json":{"size":465,"offset":"16697355","integrity":{"algorithm":"SHA256","hash":"59b64fb80e27d03e6fdf75ceefa0a57462098bf3de332d36472533792879ec82","blockSize":4194304,"blocks":["59b64fb80e27d03e6fdf75ceefa0a57462098bf3de332d36472533792879ec82"]}},"yallist.js":{"size":7280,"offset":"16697820","integrity":{"algorithm":"SHA256","hash":"f605b18fb129e502dcf50cbead77c862fa923f9f89eb33c2aa44e1809c97c466","blockSize":4194304,"blocks":["f605b18fb129e502dcf50cbead77c862fa923f9f89eb33c2aa44e1809c97c466"]}}}}}},"package.json":{"size":487,"offset":"16705100","integrity":{"algorithm":"SHA256","hash":"c14e303cce4ed1f18e4accfe304907fb6f9916e4a650fe6f6d35a578492690bb","blockSize":4194304,"blocks":["c14e303cce4ed1f18e4accfe304907fb6f9916e4a650fe6f6d35a578492690bb"]}}}},"marked":{"files":{"bin":{"files":{"marked.js":{"size":4417,"offset":"16705587","integrity":{"algorithm":"SHA256","hash":"f3caf7658f30835405a308d6e7a71c414b31a824013eb116bf94b49f313d468f","blockSize":4194304,"blocks":["f3caf7658f30835405a308d6e7a71c414b31a824013eb116bf94b49f313d468f"]}}}},"lib":{"files":{"marked.cjs":{"size":93010,"offset":"16710004","integrity":{"algorithm":"SHA256","hash":"4d20df3f3738149c1aa712ddc67a6e2960c71ea1ea848280ab48d07795d91e25","blockSize":4194304,"blocks":["4d20df3f3738149c1aa712ddc67a6e2960c71ea1ea848280ab48d07795d91e25"]}},"marked.esm.js":{"size":77072,"offset":"16803014","integrity":{"algorithm":"SHA256","hash":"67f1fcdb80b1cae50989855710c5352477e6f43243eafefd7a37fda417f4714c","blockSize":4194304,"blocks":["67f1fcdb80b1cae50989855710c5352477e6f43243eafefd7a37fda417f4714c"]}},"marked.umd.js":{"size":98332,"offset":"16880086","integrity":{"algorithm":"SHA256","hash":"61c3a17d9cd79a4f7c6e42ee54ffd52f6aa14bb8919bfa9dbf5e4969f3ed30eb","blockSize":4194304,"blocks":["61c3a17d9cd79a4f7c6e42ee54ffd52f6aa14bb8919bfa9dbf5e4969f3ed30eb"]}}}},"LICENSE.md":{"size":2942,"offset":"16978418","integrity":{"algorithm":"SHA256","hash":"8e3a3f82f59a60958f56ca08f445647c32a4733dc7ca6c2c46f6eb898471ab9c","blockSize":4194304,"blocks":["8e3a3f82f59a60958f56ca08f445647c32a4733dc7ca6c2c46f6eb898471ab9c"]}},"man":{"files":{"marked.1":{"size":2091,"offset":"16981360","integrity":{"algorithm":"SHA256","hash":"3a9c4b90f26b7222c4f96ea6bb90708855dbd5e38901fb070613ff172c1449e8","blockSize":4194304,"blocks":["3a9c4b90f26b7222c4f96ea6bb90708855dbd5e38901fb070613ff172c1449e8"]}},"marked.1.txt":{"size":2163,"offset":"16983451","integrity":{"algorithm":"SHA256","hash":"85d31094d2971518332b6ddcfa255172cea02db85c8b6e4d4d2c229ca45b0ae0","blockSize":4194304,"blocks":["85d31094d2971518332b6ddcfa255172cea02db85c8b6e4d4d2c229ca45b0ae0"]}}}},"marked.min.js":{"size":47995,"offset":"16985614","integrity":{"algorithm":"SHA256","hash":"573bdbe7cd014832d79673978efba52c8fadce760eecca8d5eef098f0f1ec60a","blockSize":4194304,"blocks":["573bdbe7cd014832d79673978efba52c8fadce760eecca8d5eef098f0f1ec60a"]}},"package.json":{"size":1735,"offset":"17033609","integrity":{"algorithm":"SHA256","hash":"dd51d65ece54e5ddb6e577bfdd4a6d6dfe4f368305b48ae46d192fb5b268e643","blockSize":4194304,"blocks":["dd51d65ece54e5ddb6e577bfdd4a6d6dfe4f368305b48ae46d192fb5b268e643"]}},"src":{"files":{"defaults.js":{"size":553,"offset":"17035344","integrity":{"algorithm":"SHA256","hash":"c824efab4e09be60bf5def2a2083966daa188d842f519be92925f5290de8ee3b","blockSize":4194304,"blocks":["c824efab4e09be60bf5def2a2083966daa188d842f519be92925f5290de8ee3b"]}},"helpers.js":{"size":6659,"offset":"17035897","integrity":{"algorithm":"SHA256","hash":"0fa4533934394fa76404eb240f3a5da473eb1b026cde65c96dd5a92b0f770899","blockSize":4194304,"blocks":["0fa4533934394fa76404eb240f3a5da473eb1b026cde65c96dd5a92b0f770899"]}},"Lexer.js":{"size":14127,"offset":"17042556","integrity":{"algorithm":"SHA256","hash":"41f75af857d0532138da8d39b50aaa642e61b3c59269083b95b877c0c7f4940a","blockSize":4194304,"blocks":["41f75af857d0532138da8d39b50aaa642e61b3c59269083b95b877c0c7f4940a"]}},"marked.js":{"size":10117,"offset":"17056683","integrity":{"algorithm":"SHA256","hash":"0998fc3fa8169617bfb881399092899b9375d85f71f2a453d7e2e3cccf30caaa","blockSize":4194304,"blocks":["0998fc3fa8169617bfb881399092899b9375d85f71f2a453d7e2e3cccf30caaa"]}},"Parser.js":{"size":7928,"offset":"17066800","integrity":{"algorithm":"SHA256","hash":"576a2c4fa9eb7c664a4926dec677c46e5ce5124ff3cc08e05fcc5976dcaa5cb7","blockSize":4194304,"blocks":["576a2c4fa9eb7c664a4926dec677c46e5ce5124ff3cc08e05fcc5976dcaa5cb7"]}},"Renderer.js":{"size":3944,"offset":"17074728","integrity":{"algorithm":"SHA256","hash":"eb770f8980da8c3e257383e581ed79603591f428ff8fb775a11b7bf6f851158f","blockSize":4194304,"blocks":["eb770f8980da8c3e257383e581ed79603591f428ff8fb775a11b7bf6f851158f"]}},"rules.js":{"size":11899,"offset":"17078672","integrity":{"algorithm":"SHA256","hash":"7b5b63f92fd29c038e5d2559edee21e8d50fa773567e815974705fa99d104c0e","blockSize":4194304,"blocks":["7b5b63f92fd29c038e5d2559edee21e8d50fa773567e815974705fa99d104c0e"]}},"Slugger.js":{"size":1365,"offset":"17090571","integrity":{"algorithm":"SHA256","hash":"90cd001d70a001ff488c51e59482cfabc5ddd583f8625caaadf8bba9ce047375","blockSize":4194304,"blocks":["90cd001d70a001ff488c51e59482cfabc5ddd583f8625caaadf8bba9ce047375"]}},"TextRenderer.js":{"size":503,"offset":"17091936","integrity":{"algorithm":"SHA256","hash":"455701e607afcced9b6d178482eb3df3daa2ab3220910afceb76e4b430893a6e","blockSize":4194304,"blocks":["455701e607afcced9b6d178482eb3df3daa2ab3220910afceb76e4b430893a6e"]}},"Tokenizer.js":{"size":21174,"offset":"17092439","integrity":{"algorithm":"SHA256","hash":"66856b380f878d4ddc1c239c32d6b6b38b1b517a4c3c73e85869e62b82c874e2","blockSize":4194304,"blocks":["66856b380f878d4ddc1c239c32d6b6b38b1b517a4c3c73e85869e62b82c874e2"]}}}}}},"media-typer":{"files":{"HISTORY.md":{"size":461,"offset":"17113613","integrity":{"algorithm":"SHA256","hash":"739de29408b3f06851637fef507f1b42f584725e547c272cf19929d5f568cbc2","blockSize":4194304,"blocks":["739de29408b3f06851637fef507f1b42f584725e547c272cf19929d5f568cbc2"]}},"index.js":{"size":6375,"offset":"17114074","integrity":{"algorithm":"SHA256","hash":"27af6de782c53c57c4a8f111a81cd26b8d68c896c2dcd83e27da4c73234ce16b","blockSize":4194304,"blocks":["27af6de782c53c57c4a8f111a81cd26b8d68c896c2dcd83e27da4c73234ce16b"]}},"LICENSE":{"size":1089,"offset":"17120449","integrity":{"algorithm":"SHA256","hash":"74d8054d56d522bdaa340d3d71130cb204997d523a5292c85ac1264dd77c8d06","blockSize":4194304,"blocks":["74d8054d56d522bdaa340d3d71130cb204997d523a5292c85ac1264dd77c8d06"]}},"package.json":{"size":449,"offset":"17121538","integrity":{"algorithm":"SHA256","hash":"fb72c4524b8f005d4bc820c8d6bfab79f1eb8023aca3e04f7175e20c08fb4ee5","blockSize":4194304,"blocks":["fb72c4524b8f005d4bc820c8d6bfab79f1eb8023aca3e04f7175e20c08fb4ee5"]}}}},"mime-db":{"files":{"db.json":{"size":182829,"offset":"17121987","integrity":{"algorithm":"SHA256","hash":"d3cb9cf8c3f96915d4191778405393144117ff6b3cd5fbd958a5cb32bd74a83f","blockSize":4194304,"blocks":["d3cb9cf8c3f96915d4191778405393144117ff6b3cd5fbd958a5cb32bd74a83f"]}},"HISTORY.md":{"size":11944,"offset":"17304816","integrity":{"algorithm":"SHA256","hash":"ac0624b06f9be74e49770f7be98bd166303a5182f09685e4c0c4ec0924c546a3","blockSize":4194304,"blocks":["ac0624b06f9be74e49770f7be98bd166303a5182f09685e4c0c4ec0924c546a3"]}},"index.js":{"size":136,"offset":"17316760","integrity":{"algorithm":"SHA256","hash":"a2532ace32711ae90deb4ae4654c5bc4e56f0a1e21bdd15ba26334bf723dfb09","blockSize":4194304,"blocks":["a2532ace32711ae90deb4ae4654c5bc4e56f0a1e21bdd15ba26334bf723dfb09"]}},"LICENSE":{"size":1099,"offset":"17316896","integrity":{"algorithm":"SHA256","hash":"965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288","blockSize":4194304,"blocks":["965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288"]}},"package.json":{"size":776,"offset":"17317995","integrity":{"algorithm":"SHA256","hash":"0a51e487857188ee5fe91ff4a7e9dbf40a12ac686aa86067d1106866eab3697a","blockSize":4194304,"blocks":["0a51e487857188ee5fe91ff4a7e9dbf40a12ac686aa86067d1106866eab3697a"]}}}},"mime-types":{"files":{"HISTORY.md":{"size":8265,"offset":"17318771","integrity":{"algorithm":"SHA256","hash":"ba313acf89ba43738a9005986f0831cfe505de38e536423b4bc52dcf98bd228d","blockSize":4194304,"blocks":["ba313acf89ba43738a9005986f0831cfe505de38e536423b4bc52dcf98bd228d"]}},"index.js":{"size":3663,"offset":"17327036","integrity":{"algorithm":"SHA256","hash":"8cfccaac306beb650d60c7f069ae0f4b39d648f1e3914696b18c133ab33e6419","blockSize":4194304,"blocks":["8cfccaac306beb650d60c7f069ae0f4b39d648f1e3914696b18c133ab33e6419"]}},"LICENSE":{"size":1167,"offset":"17330699","integrity":{"algorithm":"SHA256","hash":"71f83c4c0621102a56d9853812777b85751bce7e9726f686f5b056c1f8a4b0e6","blockSize":4194304,"blocks":["71f83c4c0621102a56d9853812777b85751bce7e9726f686f5b056c1f8a4b0e6"]}},"package.json":{"size":652,"offset":"17331866","integrity":{"algorithm":"SHA256","hash":"99e7361f7976915544fedda12c3662a92ffbca78bf48c11ccb16db8bc2336066","blockSize":4194304,"blocks":["99e7361f7976915544fedda12c3662a92ffbca78bf48c11ccb16db8bc2336066"]}}}},"mimic-response":{"files":{"index.js":{"size":758,"offset":"17332518","integrity":{"algorithm":"SHA256","hash":"f3f22eb462031b083266f9810a66dfc6c9d9a186fd5c10a3f7c016b06cd535ff","blockSize":4194304,"blocks":["f3f22eb462031b083266f9810a66dfc6c9d9a186fd5c10a3f7c016b06cd535ff"]}},"license":{"size":1109,"offset":"17333276","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":480,"offset":"17334385","integrity":{"algorithm":"SHA256","hash":"f224e70eb5d6bc8d74135f98f71d7d794831801ef19347a988a89af063122103","blockSize":4194304,"blocks":["f224e70eb5d6bc8d74135f98f71d7d794831801ef19347a988a89af063122103"]}}}},"minimist":{"files":{"index.js":{"size":7652,"offset":"17334865","integrity":{"algorithm":"SHA256","hash":"0feebc85297a35829a4a3a6c5346ddcca582052e5ebf0d33bd024abe8cd5245b","blockSize":4194304,"blocks":["0feebc85297a35829a4a3a6c5346ddcca582052e5ebf0d33bd024abe8cd5245b"]}},"LICENSE":{"size":1073,"offset":"17342517","integrity":{"algorithm":"SHA256","hash":"435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b","blockSize":4194304,"blocks":["435a6722c786b0a56fbe7387028f1d9d3f3a2d0fb615bb8fee118727c3f59b7b"]}},"package.json":{"size":722,"offset":"17343590","integrity":{"algorithm":"SHA256","hash":"dea7f222fe6607df4d4b0994311b8f9a9f14895609a60c2c6c745f34178bdba1","blockSize":4194304,"blocks":["dea7f222fe6607df4d4b0994311b8f9a9f14895609a60c2c6c745f34178bdba1"]}}}},"moment":{"files":{"dist":{"files":{"locale":{"files":{"af.js":{"size":2149,"offset":"17344312","integrity":{"algorithm":"SHA256","hash":"203e2a88aa3c7d1ac73d73af5f05f45d38de5e4ab116756f9a4a5eb4edb938d5","blockSize":4194304,"blocks":["203e2a88aa3c7d1ac73d73af5f05f45d38de5e4ab116756f9a4a5eb4edb938d5"]}},"ar-dz.js":{"size":4449,"offset":"17346461","integrity":{"algorithm":"SHA256","hash":"9ca151d5d32d2aee2513b46f4563af75317cb6bc80c84a2cdd036d3b0583fbea","blockSize":4194304,"blocks":["9ca151d5d32d2aee2513b46f4563af75317cb6bc80c84a2cdd036d3b0583fbea"]}},"ar-kw.js":{"size":1918,"offset":"17350910","integrity":{"algorithm":"SHA256","hash":"873d46e039832ce736b63491da91197485b57ead3d54365aa18e39d4797b0e1d","blockSize":4194304,"blocks":["873d46e039832ce736b63491da91197485b57ead3d54365aa18e39d4797b0e1d"]}},"ar-ly.js":{"size":4648,"offset":"17352828","integrity":{"algorithm":"SHA256","hash":"573207edb2052e1e5f548fc64b4e8e9efb448ba06d2ff7cae26f7c81aec2ac08","blockSize":4194304,"blocks":["573207edb2052e1e5f548fc64b4e8e9efb448ba06d2ff7cae26f7c81aec2ac08"]}},"ar-ma.js":{"size":1973,"offset":"17357476","integrity":{"algorithm":"SHA256","hash":"8871ae810261dc67a09c80578a5e0212bb4ddfd6a1c11c754f3b53bb0909d50d","blockSize":4194304,"blocks":["8871ae810261dc67a09c80578a5e0212bb4ddfd6a1c11c754f3b53bb0909d50d"]}},"ar-sa.js":{"size":3026,"offset":"17359449","integrity":{"algorithm":"SHA256","hash":"ebcd2bebd612866a6d4cff5a9578bd497b38ff8e6bae5df2018fbab7a8fdec87","blockSize":4194304,"blocks":["ebcd2bebd612866a6d4cff5a9578bd497b38ff8e6bae5df2018fbab7a8fdec87"]}},"ar-tn.js":{"size":1920,"offset":"17362475","integrity":{"algorithm":"SHA256","hash":"2a79714abcd10c72d4cbb465e67d2720b2660f366cfd859848de8ab33ebb5344","blockSize":4194304,"blocks":["2a79714abcd10c72d4cbb465e67d2720b2660f366cfd859848de8ab33ebb5344"]}},"ar.js":{"size":5072,"offset":"17364395","integrity":{"algorithm":"SHA256","hash":"e7684ee61213f2d7fee0269e0a49b42e3a82f391193cf469ab980842cb6cf029","blockSize":4194304,"blocks":["e7684ee61213f2d7fee0269e0a49b42e3a82f391193cf469ab980842cb6cf029"]}},"az.js":{"size":2830,"offset":"17369467","integrity":{"algorithm":"SHA256","hash":"0fc3268d1400e35a05524c582dbf12f62ee037e48dfeb47cddbd39046bce59c8","blockSize":4194304,"blocks":["0fc3268d1400e35a05524c582dbf12f62ee037e48dfeb47cddbd39046bce59c8"]}},"be.js":{"size":5120,"offset":"17372297","integrity":{"algorithm":"SHA256","hash":"b383fb1974896b70dbb4f6d035f8d967f25d49d802ee43079e9738b287943b27","blockSize":4194304,"blocks":["b383fb1974896b70dbb4f6d035f8d967f25d49d802ee43079e9738b287943b27"]}},"bg.js":{"size":2955,"offset":"17377417","integrity":{"algorithm":"SHA256","hash":"1d9c3b15eaabab63bc4e6bea7f1f62dd0c04c97615e3af2c91bd9bfccd9dca93","blockSize":4194304,"blocks":["1d9c3b15eaabab63bc4e6bea7f1f62dd0c04c97615e3af2c91bd9bfccd9dca93"]}},"bm.js":{"size":1784,"offset":"17380372","integrity":{"algorithm":"SHA256","hash":"d264e9178a3e775007241f9d464ee7bbe42e53ee105e203ddcfb1c24b061eaa3","blockSize":4194304,"blocks":["d264e9178a3e775007241f9d464ee7bbe42e53ee105e203ddcfb1c24b061eaa3"]}},"bn-bd.js":{"size":4333,"offset":"17382156","integrity":{"algorithm":"SHA256","hash":"b1dbd5e7be9c3f3e099a27b726954b9227425b1a2a777e608b6b4966c257a447","blockSize":4194304,"blocks":["b1dbd5e7be9c3f3e099a27b726954b9227425b1a2a777e608b6b4966c257a447"]}},"bn.js":{"size":3882,"offset":"17386489","integrity":{"algorithm":"SHA256","hash":"00a1ef6846681f044db7efda0c1412f3c1232031411ec6575a1ef33fd0c1ae58","blockSize":4194304,"blocks":["00a1ef6846681f044db7efda0c1412f3c1232031411ec6575a1ef33fd0c1ae58"]}},"bo.js":{"size":4367,"offset":"17390371","integrity":{"algorithm":"SHA256","hash":"edf57a9d0920e341d488bac6f158a2ef76aafbc2dcefa3d3e25142c3f92be2a0","blockSize":4194304,"blocks":["edf57a9d0920e341d488bac6f158a2ef76aafbc2dcefa3d3e25142c3f92be2a0"]}},"br.js":{"size":4520,"offset":"17394738","integrity":{"algorithm":"SHA256","hash":"b43c8f5650b88bda3afd7e0ac6a456c8376c598d71303d55a612ec3acf03d28f","blockSize":4194304,"blocks":["b43c8f5650b88bda3afd7e0ac6a456c8376c598d71303d55a612ec3acf03d28f"]}},"bs.js":{"size":4459,"offset":"17399258","integrity":{"algorithm":"SHA256","hash":"79cc13629c2920eb46bedc8bf0745345652637688dc9068f30d328eee1f28802","blockSize":4194304,"blocks":["79cc13629c2920eb46bedc8bf0745345652637688dc9068f30d328eee1f28802"]}},"ca.js":{"size":2979,"offset":"17403717","integrity":{"algorithm":"SHA256","hash":"534f8a53fbe7884274b26618dbcb01efe6e2a46b2de6eae2b1cfa1e5b69f7efd","blockSize":4194304,"blocks":["534f8a53fbe7884274b26618dbcb01efe6e2a46b2de6eae2b1cfa1e5b69f7efd"]}},"cs.js":{"size":6491,"offset":"17406696","integrity":{"algorithm":"SHA256","hash":"9ca6ec4f27ca8d95732176ccc533bddd904b7145a297e88226d2f4db6c6c3728","blockSize":4194304,"blocks":["9ca6ec4f27ca8d95732176ccc533bddd904b7145a297e88226d2f4db6c6c3728"]}},"cv.js":{"size":2325,"offset":"17413187","integrity":{"algorithm":"SHA256","hash":"9b16a270c2f5d80d3c53a5a2f8802148b6ca19632da3b771d8b521047e3b8a56","blockSize":4194304,"blocks":["9b16a270c2f5d80d3c53a5a2f8802148b6ca19632da3b771d8b521047e3b8a56"]}},"cy.js":{"size":2818,"offset":"17415512","integrity":{"algorithm":"SHA256","hash":"9d8540891fb02d923ead7c1d7c7c07ad4917bdef96d9b317298c9ff6ae6db62a","blockSize":4194304,"blocks":["9d8540891fb02d923ead7c1d7c7c07ad4917bdef96d9b317298c9ff6ae6db62a"]}},"da.js":{"size":1629,"offset":"17418330","integrity":{"algorithm":"SHA256","hash":"e93cbb4f32c15585ade43825f4bafb4eb97567a510756c5b54f2d976d46b40c9","blockSize":4194304,"blocks":["e93cbb4f32c15585ade43825f4bafb4eb97567a510756c5b54f2d976d46b40c9"]}},"de-at.js":{"size":2625,"offset":"17419959","integrity":{"algorithm":"SHA256","hash":"5d2fc11b916d9c5038b3f5d2ba43a8f87c97ca499ad07b182943a032c4a39a1e","blockSize":4194304,"blocks":["5d2fc11b916d9c5038b3f5d2ba43a8f87c97ca499ad07b182943a032c4a39a1e"]}},"de-ch.js":{"size":2553,"offset":"17422584","integrity":{"algorithm":"SHA256","hash":"4ddb7168a280d8755b2f1ad9e0de9711c63bf879a7a9ec0bfd663d4ab914109e","blockSize":4194304,"blocks":["4ddb7168a280d8755b2f1ad9e0de9711c63bf879a7a9ec0bfd663d4ab914109e"]}},"de.js":{"size":2552,"offset":"17425137","integrity":{"algorithm":"SHA256","hash":"69601f5179bf0f99037241aa4eb99904493dbbb1a761e81e5202c7d2cc3b4949","blockSize":4194304,"blocks":["69601f5179bf0f99037241aa4eb99904493dbbb1a761e81e5202c7d2cc3b4949"]}},"dv.js":{"size":2464,"offset":"17427689","integrity":{"algorithm":"SHA256","hash":"a143e02b80550dbc90713796bd0094942a0dd58d23449b71e5846d86c9bb4224","blockSize":4194304,"blocks":["a143e02b80550dbc90713796bd0094942a0dd58d23449b71e5846d86c9bb4224"]}},"el.js":{"size":3845,"offset":"17430153","integrity":{"algorithm":"SHA256","hash":"bea4f7310aaf7de554c95aa7b41dd3ea7432cd7f72a13311574ecfc638db7a6d","blockSize":4194304,"blocks":["bea4f7310aaf7de554c95aa7b41dd3ea7432cd7f72a13311574ecfc638db7a6d"]}},"en-au.js":{"size":2029,"offset":"17433998","integrity":{"algorithm":"SHA256","hash":"409391b33bc5fc1fcb61b9fee48bda0e3608f15323fc06988ae880eacf02c800","blockSize":4194304,"blocks":["409391b33bc5fc1fcb61b9fee48bda0e3608f15323fc06988ae880eacf02c800"]}},"en-ca.js":{"size":1878,"offset":"17436027","integrity":{"algorithm":"SHA256","hash":"cf4ec7fabf11593a398075b638bb1dac307477ef819a106825d3b1709d2a8ff7","blockSize":4194304,"blocks":["cf4ec7fabf11593a398075b638bb1dac307477ef819a106825d3b1709d2a8ff7"]}},"en-gb.js":{"size":2035,"offset":"17437905","integrity":{"algorithm":"SHA256","hash":"c652887658c284f3de712fca5bc0c12cc2d9fc71a03691a8bf199aac62ae4f02","blockSize":4194304,"blocks":["c652887658c284f3de712fca5bc0c12cc2d9fc71a03691a8bf199aac62ae4f02"]}},"en-ie.js":{"size":2033,"offset":"17439940","integrity":{"algorithm":"SHA256","hash":"21678eb92796b3576c96dca63b3ca875a9e283f06dc56d3b00b29f2867b14435","blockSize":4194304,"blocks":["21678eb92796b3576c96dca63b3ca875a9e283f06dc56d3b00b29f2867b14435"]}},"en-il.js":{"size":1871,"offset":"17441973","integrity":{"algorithm":"SHA256","hash":"2baf5467136c2b16cba796109c5311bd81b031a0b98950121b2134f123afeb9b","blockSize":4194304,"blocks":["2baf5467136c2b16cba796109c5311bd81b031a0b98950121b2134f123afeb9b"]}},"en-in.js":{"size":2029,"offset":"17443844","integrity":{"algorithm":"SHA256","hash":"e04b56e50944516aafa6a3084988ecc8e4b5191e13ad2bb3c3761083bea6de4b","blockSize":4194304,"blocks":["e04b56e50944516aafa6a3084988ecc8e4b5191e13ad2bb3c3761083bea6de4b"]}},"en-nz.js":{"size":2038,"offset":"17445873","integrity":{"algorithm":"SHA256","hash":"aab44ef9efcd9351aa2a9943da707f2f5ea3d6a9fc55c919aecd70422e738d69","blockSize":4194304,"blocks":["aab44ef9efcd9351aa2a9943da707f2f5ea3d6a9fc55c919aecd70422e738d69"]}},"en-sg.js":{"size":2047,"offset":"17447911","integrity":{"algorithm":"SHA256","hash":"52872f32f2a3f2d794ec5ee8bad839b42300d646eac2b9540d454be6143dc068","blockSize":4194304,"blocks":["52872f32f2a3f2d794ec5ee8bad839b42300d646eac2b9540d454be6143dc068"]}},"eo.js":{"size":2338,"offset":"17449958","integrity":{"algorithm":"SHA256","hash":"443218cf6980aef8a1b3237fc18f916de2b8c84246b61af41dbc3eb34edf4817","blockSize":4194304,"blocks":["443218cf6980aef8a1b3237fc18f916de2b8c84246b61af41dbc3eb34edf4817"]}},"es-do.js":{"size":3401,"offset":"17452296","integrity":{"algorithm":"SHA256","hash":"afd91108904c97c550dc10f8866c929d1e76fd66b4a78a703ec12d9dd70da842","blockSize":4194304,"blocks":["afd91108904c97c550dc10f8866c929d1e76fd66b4a78a703ec12d9dd70da842"]}},"es-mx.js":{"size":3470,"offset":"17455697","integrity":{"algorithm":"SHA256","hash":"54d85712f77ae9eed93db050223775bc9ce493ce75e34c7b7f9e8badbefe6e47","blockSize":4194304,"blocks":["54d85712f77ae9eed93db050223775bc9ce493ce75e34c7b7f9e8badbefe6e47"]}},"es-us.js":{"size":3498,"offset":"17459167","integrity":{"algorithm":"SHA256","hash":"0a7aa430f1de79bc2478d6169211f362b03bd5b7ba3f3e4b9955d28858cd46b3","blockSize":4194304,"blocks":["0a7aa430f1de79bc2478d6169211f362b03bd5b7ba3f3e4b9955d28858cd46b3"]}},"es.js":{"size":3458,"offset":"17462665","integrity":{"algorithm":"SHA256","hash":"47ff8445d2e4f6ee93b576f1eaed22e4a205da84ca2309382719fd8822c525c3","blockSize":4194304,"blocks":["47ff8445d2e4f6ee93b576f1eaed22e4a205da84ca2309382719fd8822c525c3"]}},"et.js":{"size":2621,"offset":"17466123","integrity":{"algorithm":"SHA256","hash":"8767175a6a99c6e676ee491d7bac10722b97639df5e63664853785011d217ce3","blockSize":4194304,"blocks":["8767175a6a99c6e676ee491d7bac10722b97639df5e63664853785011d217ce3"]}},"eu.js":{"size":1932,"offset":"17468744","integrity":{"algorithm":"SHA256","hash":"c41efd8928fc6d0442a4d1b82f4c73f311ec49c32beb8a1d206a33a312d3e67e","blockSize":4194304,"blocks":["c41efd8928fc6d0442a4d1b82f4c73f311ec49c32beb8a1d206a33a312d3e67e"]}},"fa.js":{"size":3182,"offset":"17470676","integrity":{"algorithm":"SHA256","hash":"c7d3a8afce5c5888b274e1aa92b324e1eb325de6da24d37307f72c4b62e83dab","blockSize":4194304,"blocks":["c7d3a8afce5c5888b274e1aa92b324e1eb325de6da24d37307f72c4b62e83dab"]}},"fi.js":{"size":3584,"offset":"17473858","integrity":{"algorithm":"SHA256","hash":"8c56d110f59432c7670a7ee3bf1df36cf71d92d85718b3568479f6ed3772a5c9","blockSize":4194304,"blocks":["8c56d110f59432c7670a7ee3bf1df36cf71d92d85718b3568479f6ed3772a5c9"]}},"fil.js":{"size":1776,"offset":"17477442","integrity":{"algorithm":"SHA256","hash":"5cf1f1e21ff82efdc535e223a41e62e135ffb77a55880dfb0c1e3583e12dbab0","blockSize":4194304,"blocks":["5cf1f1e21ff82efdc535e223a41e62e135ffb77a55880dfb0c1e3583e12dbab0"]}},"fo.js":{"size":1756,"offset":"17479218","integrity":{"algorithm":"SHA256","hash":"f9e6466e5b8636dd132ccec56b02cfeea60b9b8a1f58885aff260c1afb96e584","blockSize":4194304,"blocks":["f9e6466e5b8636dd132ccec56b02cfeea60b9b8a1f58885aff260c1afb96e584"]}},"fr-ca.js":{"size":2088,"offset":"17480974","integrity":{"algorithm":"SHA256","hash":"9bb7fa4937b00a93b0d9b7b718d7c999f953467bd85cc298a628bf4468bf1daa","blockSize":4194304,"blocks":["9bb7fa4937b00a93b0d9b7b718d7c999f953467bd85cc298a628bf4468bf1daa"]}},"fr-ch.js":{"size":2247,"offset":"17483062","integrity":{"algorithm":"SHA256","hash":"4e3eb7082a4b196dda2b6657edcb30b0656b88f214e59708076c9eee5dc4690b","blockSize":4194304,"blocks":["4e3eb7082a4b196dda2b6657edcb30b0656b88f214e59708076c9eee5dc4690b"]}},"fr.js":{"size":3431,"offset":"17485309","integrity":{"algorithm":"SHA256","hash":"a658fc9cf912c7ebce1ecc41b4a209b5c442cca0f979de5bd8d55bca3a518c56","blockSize":4194304,"blocks":["a658fc9cf912c7ebce1ecc41b4a209b5c442cca0f979de5bd8d55bca3a518c56"]}},"fy.js":{"size":2287,"offset":"17488740","integrity":{"algorithm":"SHA256","hash":"df40aba3421a2cff18893704868b4564f4f7a7caefd7ea33c307318bff32c129","blockSize":4194304,"blocks":["df40aba3421a2cff18893704868b4564f4f7a7caefd7ea33c307318bff32c129"]}},"ga.js":{"size":2360,"offset":"17491027","integrity":{"algorithm":"SHA256","hash":"ab3a47a8df789cdc71f2c44afc16cddd679f6a1e168db81da5c2724a555dec7e","blockSize":4194304,"blocks":["ab3a47a8df789cdc71f2c44afc16cddd679f6a1e168db81da5c2724a555dec7e"]}},"gd.js":{"size":2380,"offset":"17493387","integrity":{"algorithm":"SHA256","hash":"96e22b8bb1187179a379c385091e46b4aa530ddc3964656c5fd4fe3f7d3df262","blockSize":4194304,"blocks":["96e22b8bb1187179a379c385091e46b4aa530ddc3964656c5fd4fe3f7d3df262"]}},"gl.js":{"size":2331,"offset":"17495767","integrity":{"algorithm":"SHA256","hash":"c37fcbd80fd51460e325e1e50af48ee0e04b6de956aba8b9dc6493219cd52c1a","blockSize":4194304,"blocks":["c37fcbd80fd51460e325e1e50af48ee0e04b6de956aba8b9dc6493219cd52c1a"]}},"gom-deva.js":{"size":5470,"offset":"17498098","integrity":{"algorithm":"SHA256","hash":"2e0871a83861aaf57bd496f0ab3d4fe6c18dfc2d4f9f56aa630a2e863e07a880","blockSize":4194304,"blocks":["2e0871a83861aaf57bd496f0ab3d4fe6c18dfc2d4f9f56aa630a2e863e07a880"]}},"gom-latn.js":{"size":4116,"offset":"17503568","integrity":{"algorithm":"SHA256","hash":"86f3ba09ffa3f669d37f737b08746cad2aa620cb701dfe65b3a860558cebe5b4","blockSize":4194304,"blocks":["86f3ba09ffa3f669d37f737b08746cad2aa620cb701dfe65b3a860558cebe5b4"]}},"gu.js":{"size":4116,"offset":"17507684","integrity":{"algorithm":"SHA256","hash":"a38e9b1be734b06021176a9a6b33263b0db9b0609423f7249e0c9e96667ca08e","blockSize":4194304,"blocks":["a38e9b1be734b06021176a9a6b33263b0db9b0609423f7249e0c9e96667ca08e"]}},"he.js":{"size":3209,"offset":"17511800","integrity":{"algorithm":"SHA256","hash":"ed8c46ab5f78a9df4c3901b856467360c87994db19b2918dbcd05a051b79f9ed","blockSize":4194304,"blocks":["ed8c46ab5f78a9df4c3901b856467360c87994db19b2918dbcd05a051b79f9ed"]}},"hi.js":{"size":6375,"offset":"17515009","integrity":{"algorithm":"SHA256","hash":"7db60472aab399dae8e7d0d3557f11a587fb68aaef851945dca32de79d2fdaec","blockSize":4194304,"blocks":["7db60472aab399dae8e7d0d3557f11a587fb68aaef851945dca32de79d2fdaec"]}},"hr.js":{"size":4682,"offset":"17521384","integrity":{"algorithm":"SHA256","hash":"94d9fe5d1636a9af5d3afbb2b46afd12db57a01eeac39c1443c3b69f01d6cc97","blockSize":4194304,"blocks":["94d9fe5d1636a9af5d3afbb2b46afd12db57a01eeac39c1443c3b69f01d6cc97"]}},"hu.js":{"size":3801,"offset":"17526066","integrity":{"algorithm":"SHA256","hash":"94e1bb94e21d738c703d99816e1415d68faaef81c3adc2138bf531739b252c79","blockSize":4194304,"blocks":["94e1bb94e21d738c703d99816e1415d68faaef81c3adc2138bf531739b252c79"]}},"hy-am.js":{"size":3200,"offset":"17529867","integrity":{"algorithm":"SHA256","hash":"cf4e8d2f84e80465ace808818e95acb4fc0ebefc16fce4fda3f0c5965f2b5491","blockSize":4194304,"blocks":["cf4e8d2f84e80465ace808818e95acb4fc0ebefc16fce4fda3f0c5965f2b5491"]}},"id.js":{"size":2375,"offset":"17533067","integrity":{"algorithm":"SHA256","hash":"ba246e24a058bd362fcf4790e3dcd0c044c5b73e9029f0cbab539c162c23e065","blockSize":4194304,"blocks":["ba246e24a058bd362fcf4790e3dcd0c044c5b73e9029f0cbab539c162c23e065"]}},"is.js":{"size":4442,"offset":"17535442","integrity":{"algorithm":"SHA256","hash":"c5119c88976ee8728def1ab88f1f28e2d91be099219e112eeb54c84684ab12ca","blockSize":4194304,"blocks":["c5119c88976ee8728def1ab88f1f28e2d91be099219e112eeb54c84684ab12ca"]}},"it-ch.js":{"size":1941,"offset":"17539884","integrity":{"algorithm":"SHA256","hash":"d9abf16eed703724980bad09af56c3e19c65d6973718167dd0f7f97b589b490b","blockSize":4194304,"blocks":["d9abf16eed703724980bad09af56c3e19c65d6973718167dd0f7f97b589b490b"]}},"it.js":{"size":3251,"offset":"17541825","integrity":{"algorithm":"SHA256","hash":"7f4a1a4fffce32b55081cc3c24e5239b152270f7a22e862a448cd6ca3281b7ff","blockSize":4194304,"blocks":["7f4a1a4fffce32b55081cc3c24e5239b152270f7a22e862a448cd6ca3281b7ff"]}},"ja.js":{"size":3955,"offset":"17545076","integrity":{"algorithm":"SHA256","hash":"4aa4e657a049839f01ebbfe60b90919b6584f0ce797e5b5e5f7ad7157e2b0a22","blockSize":4194304,"blocks":["4aa4e657a049839f01ebbfe60b90919b6584f0ce797e5b5e5f7ad7157e2b0a22"]}},"jv.js":{"size":2384,"offset":"17549031","integrity":{"algorithm":"SHA256","hash":"cdc4887a249d28946a9f8f880d6234ddaaebd69533b84d05791f712e2e801748","blockSize":4194304,"blocks":["cdc4887a249d28946a9f8f880d6234ddaaebd69533b84d05791f712e2e801748"]}},"ka.js":{"size":3492,"offset":"17551415","integrity":{"algorithm":"SHA256","hash":"0a41c75aa4be1977ae39c859cfc268d208494ad642df71398be784974763b517","blockSize":4194304,"blocks":["0a41c75aa4be1977ae39c859cfc268d208494ad642df71398be784974763b517"]}},"kk.js":{"size":2495,"offset":"17554907","integrity":{"algorithm":"SHA256","hash":"265a11f33b159887543d11d2bd3a7007242e5de65b04def844b73a47fd0b27bc","blockSize":4194304,"blocks":["265a11f33b159887543d11d2bd3a7007242e5de65b04def844b73a47fd0b27bc"]}},"km.js":{"size":3346,"offset":"17557402","integrity":{"algorithm":"SHA256","hash":"d8ef55ec1f22895ae7f8a09b2a3604313545b280397719e435581bc22db3ea86","blockSize":4194304,"blocks":["d8ef55ec1f22895ae7f8a09b2a3604313545b280397719e435581bc22db3ea86"]}},"kn.js":{"size":4236,"offset":"17560748","integrity":{"algorithm":"SHA256","hash":"b857f30a5c384521e20bcd133a8e7731070e76ac3e5cf07273bec787e353aff8","blockSize":4194304,"blocks":["b857f30a5c384521e20bcd133a8e7731070e76ac3e5cf07273bec787e353aff8"]}},"ko.js":{"size":2223,"offset":"17564984","integrity":{"algorithm":"SHA256","hash":"024f63bc2d036a0a2959dbaa0ff38e67fb12785695be978b3f01a7cfe6e883de","blockSize":4194304,"blocks":["024f63bc2d036a0a2959dbaa0ff38e67fb12785695be978b3f01a7cfe6e883de"]}},"ku.js":{"size":3320,"offset":"17567207","integrity":{"algorithm":"SHA256","hash":"1e6d281867289b424a0a601c147b632c42fb207d233d22b1ef54ef869141a23f","blockSize":4194304,"blocks":["1e6d281867289b424a0a601c147b632c42fb207d233d22b1ef54ef869141a23f"]}},"ky.js":{"size":2521,"offset":"17570527","integrity":{"algorithm":"SHA256","hash":"ecec6ddbb82dec2edab9647f221a5942f27490c413e943be85c5da59d55e2d46","blockSize":4194304,"blocks":["ecec6ddbb82dec2edab9647f221a5942f27490c413e943be85c5da59d55e2d46"]}},"lb.js":{"size":4237,"offset":"17573048","integrity":{"algorithm":"SHA256","hash":"8daa4c6777a488101527b8813ba8fb3ac08d602bfa8dff7819850361105ae206","blockSize":4194304,"blocks":["8daa4c6777a488101527b8813ba8fb3ac08d602bfa8dff7819850361105ae206"]}},"lo.js":{"size":2569,"offset":"17577285","integrity":{"algorithm":"SHA256","hash":"2f9928863fff2a3e38439f0504b355e58ed9877021fdfa0ed77f39ca23d560cf","blockSize":4194304,"blocks":["2f9928863fff2a3e38439f0504b355e58ed9877021fdfa0ed77f39ca23d560cf"]}},"lt.js":{"size":3965,"offset":"17579854","integrity":{"algorithm":"SHA256","hash":"6af367f41d9148217e72962d1bbfeec4ab57fb72644b07f1d01662c5ad9624f2","blockSize":4194304,"blocks":["6af367f41d9148217e72962d1bbfeec4ab57fb72644b07f1d01662c5ad9624f2"]}},"lv.js":{"size":3433,"offset":"17583819","integrity":{"algorithm":"SHA256","hash":"f9c99189644befc9028084426cafdda755a4b45c7571f6cf63b48abc2f0e9781","blockSize":4194304,"blocks":["f9c99189644befc9028084426cafdda755a4b45c7571f6cf63b48abc2f0e9781"]}},"me.js":{"size":3667,"offset":"17587252","integrity":{"algorithm":"SHA256","hash":"9c6501ad21a1fee7e5603fdaf0b22d53c124cfee1bd67c9b6c00286a2bcfbc78","blockSize":4194304,"blocks":["9c6501ad21a1fee7e5603fdaf0b22d53c124cfee1bd67c9b6c00286a2bcfbc78"]}},"mi.js":{"size":2007,"offset":"17590919","integrity":{"algorithm":"SHA256","hash":"8dd5a982119d2d4e3d88550ce3d91640e0a1d51ed035e32fd793f21aa5f607b7","blockSize":4194304,"blocks":["8dd5a982119d2d4e3d88550ce3d91640e0a1d51ed035e32fd793f21aa5f607b7"]}},"mk.js":{"size":3021,"offset":"17592926","integrity":{"algorithm":"SHA256","hash":"6d3cdcc4fd7216a935ed80a155e1d4db500639b309aafe22eecfc9a49f44dc0a","blockSize":4194304,"blocks":["6d3cdcc4fd7216a935ed80a155e1d4db500639b309aafe22eecfc9a49f44dc0a"]}},"ml.js":{"size":3255,"offset":"17595947","integrity":{"algorithm":"SHA256","hash":"db7c656137fcfb2eb439b35413f63dd05b78d37957eaf5781e78fadb96f4fba7","blockSize":4194304,"blocks":["db7c656137fcfb2eb439b35413f63dd05b78d37957eaf5781e78fadb96f4fba7"]}},"mn.js":{"size":3398,"offset":"17599202","integrity":{"algorithm":"SHA256","hash":"23d7cebeee37254c7f25d3707e3c7caa8934ac96e8a745444513c9b376add620","blockSize":4194304,"blocks":["23d7cebeee37254c7f25d3707e3c7caa8934ac96e8a745444513c9b376add620"]}},"mr.js":{"size":6558,"offset":"17602600","integrity":{"algorithm":"SHA256","hash":"d21da47b769168d9d0adb3c1462cc1a83c3f1370a0d80e9d495baa104353a7cb","blockSize":4194304,"blocks":["d21da47b769168d9d0adb3c1462cc1a83c3f1370a0d80e9d495baa104353a7cb"]}},"ms-my.js":{"size":2330,"offset":"17609158","integrity":{"algorithm":"SHA256","hash":"2158e9feb634e5fd7bc3e0ea2acbff3b4c0762bcff6b09c7c98d2b7534bf1e3d","blockSize":4194304,"blocks":["2158e9feb634e5fd7bc3e0ea2acbff3b4c0762bcff6b09c7c98d2b7534bf1e3d"]}},"ms.js":{"size":2277,"offset":"17611488","integrity":{"algorithm":"SHA256","hash":"028ed948cf621a57cdffef126ee494b5420165c0481baff79867bd5349576d3e","blockSize":4194304,"blocks":["028ed948cf621a57cdffef126ee494b5420165c0481baff79867bd5349576d3e"]}},"mt.js":{"size":1668,"offset":"17613765","integrity":{"algorithm":"SHA256","hash":"36ac6b658d972562fb2f945fd2fa1ce62978a48ba9405aa17f896f77fee1d543","blockSize":4194304,"blocks":["36ac6b658d972562fb2f945fd2fa1ce62978a48ba9405aa17f896f77fee1d543"]}},"my.js":{"size":3094,"offset":"17615433","integrity":{"algorithm":"SHA256","hash":"82fd3552ff9d7ee31c383dcbc82825f818a7f1d293f380cd4a92d7d6c43d8872","blockSize":4194304,"blocks":["82fd3552ff9d7ee31c383dcbc82825f818a7f1d293f380cd4a92d7d6c43d8872"]}},"nb.js":{"size":1905,"offset":"17618527","integrity":{"algorithm":"SHA256","hash":"f34deaaf861cd22928c1380f0f985a984bc64a6f40ee5b8cb8960842fc969088","blockSize":4194304,"blocks":["f34deaaf861cd22928c1380f0f985a984bc64a6f40ee5b8cb8960842fc969088"]}},"ne.js":{"size":4015,"offset":"17620432","integrity":{"algorithm":"SHA256","hash":"017b4e692683a5d8e13bd1efd3c87ac37a39066b1e51f47efee24dbe868b94f6","blockSize":4194304,"blocks":["017b4e692683a5d8e13bd1efd3c87ac37a39066b1e51f47efee24dbe868b94f6"]}},"nl-be.js":{"size":3163,"offset":"17624447","integrity":{"algorithm":"SHA256","hash":"824573610fc9c9bdcfaad2c94c27968d1652c106dd4e26a1f601eec5e9f4a39f","blockSize":4194304,"blocks":["824573610fc9c9bdcfaad2c94c27968d1652c106dd4e26a1f601eec5e9f4a39f"]}},"nl.js":{"size":3196,"offset":"17627610","integrity":{"algorithm":"SHA256","hash":"980cc68db929bfe164fafe51013a53cd6ad4537420335574330845b664ae20b5","blockSize":4194304,"blocks":["980cc68db929bfe164fafe51013a53cd6ad4537420335574330845b664ae20b5"]}},"nn.js":{"size":1834,"offset":"17630806","integrity":{"algorithm":"SHA256","hash":"309e4f807104b92e09321bf552135000af547514dbe6922aba0f27147b17978a","blockSize":4194304,"blocks":["309e4f807104b92e09321bf552135000af547514dbe6922aba0f27147b17978a"]}},"oc-lnc.js":{"size":2436,"offset":"17632640","integrity":{"algorithm":"SHA256","hash":"f8a83fd828f2113fd3ac28de52d7058d863817623da7bd70c62b2f00d457f326","blockSize":4194304,"blocks":["f8a83fd828f2113fd3ac28de52d7058d863817623da7bd70c62b2f00d457f326"]}},"pa-in.js":{"size":4182,"offset":"17635076","integrity":{"algorithm":"SHA256","hash":"6fc71eace68b85da5ae8a23091314f860e70f0d478df66e90082952449edf0c1","blockSize":4194304,"blocks":["6fc71eace68b85da5ae8a23091314f860e70f0d478df66e90082952449edf0c1"]}},"pl.js":{"size":4140,"offset":"17639258","integrity":{"algorithm":"SHA256","hash":"a9d927aac36ea53ad384fadf3201978e93dbaf625eadad14babeed55b6e01084","blockSize":4194304,"blocks":["a9d927aac36ea53ad384fadf3201978e93dbaf625eadad14babeed55b6e01084"]}},"pt-br.js":{"size":1838,"offset":"17643398","integrity":{"algorithm":"SHA256","hash":"3c1fdeb739aa37bc650cc4195470984112f3029c69b79a0d298811d541902782","blockSize":4194304,"blocks":["3c1fdeb739aa37bc650cc4195470984112f3029c69b79a0d298811d541902782"]}},"pt.js":{"size":1952,"offset":"17645236","integrity":{"algorithm":"SHA256","hash":"23360850e47341c656e6a5d267f5632f255ab1fd9b1599ea0a00bd6708dff993","blockSize":4194304,"blocks":["23360850e47341c656e6a5d267f5632f255ab1fd9b1599ea0a00bd6708dff993"]}},"ro.js":{"size":2303,"offset":"17647188","integrity":{"algorithm":"SHA256","hash":"bb43b495f20a2c3619ef6c7a11c2203f69295bb9de5df18a8647921e26237b1e","blockSize":4194304,"blocks":["bb43b495f20a2c3619ef6c7a11c2203f69295bb9de5df18a8647921e26237b1e"]}},"ru.js":{"size":8326,"offset":"17649491","integrity":{"algorithm":"SHA256","hash":"4664a110f58bcce247435dca55dabe88c9452484f7b24ce2cc1ff36399b7cd86","blockSize":4194304,"blocks":["4664a110f58bcce247435dca55dabe88c9452484f7b24ce2cc1ff36399b7cd86"]}},"sd.js":{"size":2153,"offset":"17657817","integrity":{"algorithm":"SHA256","hash":"47a6184217fcfdb79be8c8101e24b5de190e707eca660ccebdfc2bd06cb01975","blockSize":4194304,"blocks":["47a6184217fcfdb79be8c8101e24b5de190e707eca660ccebdfc2bd06cb01975"]}},"se.js":{"size":1839,"offset":"17659970","integrity":{"algorithm":"SHA256","hash":"8d7eded9bc5d820a5671433f926c1ecb4100d7a97b2889d629688adaf4220972","blockSize":4194304,"blocks":["8d7eded9bc5d820a5671433f926c1ecb4100d7a97b2889d629688adaf4220972"]}},"si.js":{"size":2665,"offset":"17661809","integrity":{"algorithm":"SHA256","hash":"681330fb497ddd259df6bff3d226c62f8b47c381e991c044d35bcf2b6b5b3f77","blockSize":4194304,"blocks":["681330fb497ddd259df6bff3d226c62f8b47c381e991c044d35bcf2b6b5b3f77"]}},"sk.js":{"size":5157,"offset":"17664474","integrity":{"algorithm":"SHA256","hash":"0623549f32e7096971277cca92bb1e9a4687a1a18f3b30cfc41f165c391651cb","blockSize":4194304,"blocks":["0623549f32e7096971277cca92bb1e9a4687a1a18f3b30cfc41f165c391651cb"]}},"sl.js":{"size":6099,"offset":"17669631","integrity":{"algorithm":"SHA256","hash":"d784d46369a0eba969c2926ea9e852a87ae59c5679dc748802fb4b01ab124e90","blockSize":4194304,"blocks":["d784d46369a0eba969c2926ea9e852a87ae59c5679dc748802fb4b01ab124e90"]}},"sq.js":{"size":1987,"offset":"17675730","integrity":{"algorithm":"SHA256","hash":"9109b6d4d0ecd1c613444811488e2a1607c7d6aa1d3e6acf4a5ad2cbfe88b45f","blockSize":4194304,"blocks":["9109b6d4d0ecd1c613444811488e2a1607c7d6aa1d3e6acf4a5ad2cbfe88b45f"]}},"sr-cyrl.js":{"size":4216,"offset":"17677717","integrity":{"algorithm":"SHA256","hash":"06817919faabed92b20cec141f91d5287488cf46d3becaf1c03c521389dccdd0","blockSize":4194304,"blocks":["06817919faabed92b20cec141f91d5287488cf46d3becaf1c03c521389dccdd0"]}},"sr.js":{"size":3735,"offset":"17681933","integrity":{"algorithm":"SHA256","hash":"e17280ebb0ca19a4b748f9f39a5ae8ad18f4f96eff2e53f3c4f248994b544563","blockSize":4194304,"blocks":["e17280ebb0ca19a4b748f9f39a5ae8ad18f4f96eff2e53f3c4f248994b544563"]}},"ss.js":{"size":2556,"offset":"17685668","integrity":{"algorithm":"SHA256","hash":"25f4ff476021f7d05e846197b80d553a0ab5d1a27b298796f0f95e4421818502","blockSize":4194304,"blocks":["25f4ff476021f7d05e846197b80d553a0ab5d1a27b298796f0f95e4421818502"]}},"sv.js":{"size":2066,"offset":"17688224","integrity":{"algorithm":"SHA256","hash":"85ad85e2b6ada4b40fcafb3c8f69a7485aed5d6761b5321a9018f47a8e6d6d8f","blockSize":4194304,"blocks":["85ad85e2b6ada4b40fcafb3c8f69a7485aed5d6761b5321a9018f47a8e6d6d8f"]}},"sw.js":{"size":1635,"offset":"17690290","integrity":{"algorithm":"SHA256","hash":"7788e13293846f0a0097a9be94f90753cac8e17e63d84ff53f4b692669eccbea","blockSize":4194304,"blocks":["7788e13293846f0a0097a9be94f90753cac8e17e63d84ff53f4b692669eccbea"]}},"ta.js":{"size":4768,"offset":"17691925","integrity":{"algorithm":"SHA256","hash":"f8d9fa344e5aee39c65f67da7cc2e8666cc314dac8b9842ca35f291a6d8703c2","blockSize":4194304,"blocks":["f8d9fa344e5aee39c65f67da7cc2e8666cc314dac8b9842ca35f291a6d8703c2"]}},"te.js":{"size":3360,"offset":"17696693","integrity":{"algorithm":"SHA256","hash":"73635b585623fd87207badd68777385fa6185bd5e4bb79789058bc4664917bba","blockSize":4194304,"blocks":["73635b585623fd87207badd68777385fa6185bd5e4bb79789058bc4664917bba"]}},"tet.js":{"size":2155,"offset":"17700053","integrity":{"algorithm":"SHA256","hash":"21dc425bc393e59a99afa482332c508673b86b4be273bd854f275b88c08ec354","blockSize":4194304,"blocks":["21dc425bc393e59a99afa482332c508673b86b4be273bd854f275b88c08ec354"]}},"tg.js":{"size":3584,"offset":"17702208","integrity":{"algorithm":"SHA256","hash":"b3caa26a533adec80325e1d6e619ee462e77e0943d8d3db55d16bd7888071d6c","blockSize":4194304,"blocks":["b3caa26a533adec80325e1d6e619ee462e77e0943d8d3db55d16bd7888071d6c"]}},"th.js":{"size":2720,"offset":"17705792","integrity":{"algorithm":"SHA256","hash":"83e85e162711661cdc25478c46108da2e2934e2c819f1e8da83d7535385d7e0a","blockSize":4194304,"blocks":["83e85e162711661cdc25478c46108da2e2934e2c819f1e8da83d7535385d7e0a"]}},"tk.js":{"size":2488,"offset":"17708512","integrity":{"algorithm":"SHA256","hash":"a3ade222a40733cc6430b0d0c824ff84b8c3101b2af2603feb6381f85d4b0003","blockSize":4194304,"blocks":["a3ade222a40733cc6430b0d0c824ff84b8c3101b2af2603feb6381f85d4b0003"]}},"tl-ph.js":{"size":1735,"offset":"17711000","integrity":{"algorithm":"SHA256","hash":"c032aae8730b67385af156a603adfefcf4e15233b1ef1930bb76809b1aabbd2c","blockSize":4194304,"blocks":["c032aae8730b67385af156a603adfefcf4e15233b1ef1930bb76809b1aabbd2c"]}},"tlh.js":{"size":3751,"offset":"17712735","integrity":{"algorithm":"SHA256","hash":"b750c4e1e3a64e773a6af217ceef312f2bb5781e6b849263e780a7da5d9afc01","blockSize":4194304,"blocks":["b750c4e1e3a64e773a6af217ceef312f2bb5781e6b849263e780a7da5d9afc01"]}},"tr.js":{"size":2927,"offset":"17716486","integrity":{"algorithm":"SHA256","hash":"37e529705dbb24a3e115597e2b3abec2738482301fc80a06e72cf6ce2c0791a6","blockSize":4194304,"blocks":["37e529705dbb24a3e115597e2b3abec2738482301fc80a06e72cf6ce2c0791a6"]}},"tzl.js":{"size":3109,"offset":"17719413","integrity":{"algorithm":"SHA256","hash":"1a8627c869d5f815c09dda91b2588f3df9e692296267f5bc6661fa3998f1c0fa","blockSize":4194304,"blocks":["1a8627c869d5f815c09dda91b2588f3df9e692296267f5bc6661fa3998f1c0fa"]}},"tzm-latn.js":{"size":1675,"offset":"17722522","integrity":{"algorithm":"SHA256","hash":"0df5dd11a538822b5618f6609a0ac2b2dc11475fde02553d0ac1c91cac71e34f","blockSize":4194304,"blocks":["0df5dd11a538822b5618f6609a0ac2b2dc11475fde02553d0ac1c91cac71e34f"]}},"tzm.js":{"size":2306,"offset":"17724197","integrity":{"algorithm":"SHA256","hash":"c2e1ed8cb594e0a02da7304812aba9c3f4e25491c992d3428e05429641cc5334","blockSize":4194304,"blocks":["c2e1ed8cb594e0a02da7304812aba9c3f4e25491c992d3428e05429641cc5334"]}},"ug-cn.js":{"size":3864,"offset":"17726503","integrity":{"algorithm":"SHA256","hash":"89581281345029016fa40cef85629dad73d1e3635ec2811829eec92153604558","blockSize":4194304,"blocks":["89581281345029016fa40cef85629dad73d1e3635ec2811829eec92153604558"]}},"uk.js":{"size":5863,"offset":"17730367","integrity":{"algorithm":"SHA256","hash":"64cf301947f6c0a61ffeeea80876d8447cee7f06d7dde31b1ded1e6951b384d4","blockSize":4194304,"blocks":["64cf301947f6c0a61ffeeea80876d8447cee7f06d7dde31b1ded1e6951b384d4"]}},"ur.js":{"size":2200,"offset":"17736230","integrity":{"algorithm":"SHA256","hash":"4870e8ee287025d7760731038093cc828f08be91d0b08b0508f931c9a16453ff","blockSize":4194304,"blocks":["4870e8ee287025d7760731038093cc828f08be91d0b08b0508f931c9a16453ff"]}},"uz-latn.js":{"size":1623,"offset":"17738430","integrity":{"algorithm":"SHA256","hash":"351094155703f61f5fd152822074651a6a81a6881dd0551bfa319f21de02e04b","blockSize":4194304,"blocks":["351094155703f61f5fd152822074651a6a81a6881dd0551bfa319f21de02e04b"]}},"uz.js":{"size":1885,"offset":"17740053","integrity":{"algorithm":"SHA256","hash":"e9b15bd23e8779fe93fa352a04dc338593206cd7beb4d56d355f8d291835fcd1","blockSize":4194304,"blocks":["e9b15bd23e8779fe93fa352a04dc338593206cd7beb4d56d355f8d291835fcd1"]}},"vi.js":{"size":2414,"offset":"17741938","integrity":{"algorithm":"SHA256","hash":"bf67c22c06f2db7d6f17b2b8c5b79028fd69cc83edba4b0a453c166ed8908996","blockSize":4194304,"blocks":["bf67c22c06f2db7d6f17b2b8c5b79028fd69cc83edba4b0a453c166ed8908996"]}},"x-pseudo.js":{"size":2316,"offset":"17744352","integrity":{"algorithm":"SHA256","hash":"3335cf18bacbf7805ab7581ee02c39ddad1c0543316f839ea5642b51a03cd91d","blockSize":4194304,"blocks":["3335cf18bacbf7805ab7581ee02c39ddad1c0543316f839ea5642b51a03cd91d"]}},"yo.js":{"size":1887,"offset":"17746668","integrity":{"algorithm":"SHA256","hash":"5470a3358714886d14b7897df864a7a0eed2725bffbddf5d3e913ff7b2f79a40","blockSize":4194304,"blocks":["5470a3358714886d14b7897df864a7a0eed2725bffbddf5d3e913ff7b2f79a40"]}},"zh-cn.js":{"size":3711,"offset":"17748555","integrity":{"algorithm":"SHA256","hash":"9fcdb171506aed19c1776f668330ec4083094f182f17514aa0a63857c93232ad","blockSize":4194304,"blocks":["9fcdb171506aed19c1776f668330ec4083094f182f17514aa0a63857c93232ad"]}},"zh-hk.js":{"size":3116,"offset":"17752266","integrity":{"algorithm":"SHA256","hash":"3996d5666a44c90f168e60bcf7704a4f3c1ccbce3bb14cdba372c7c4de663672","blockSize":4194304,"blocks":["3996d5666a44c90f168e60bcf7704a4f3c1ccbce3bb14cdba372c7c4de663672"]}},"zh-mo.js":{"size":3066,"offset":"17755382","integrity":{"algorithm":"SHA256","hash":"ccb21168fff3d307932e776d0394dd518863f0873e7f118c91d8f1f796b40848","blockSize":4194304,"blocks":["ccb21168fff3d307932e776d0394dd518863f0873e7f118c91d8f1f796b40848"]}},"zh-tw.js":{"size":3013,"offset":"17758448","integrity":{"algorithm":"SHA256","hash":"5d777630817e1b6cbdac934d41924ac44079089ffdfc807d7d53d7b64e1f4ebc","blockSize":4194304,"blocks":["5d777630817e1b6cbdac934d41924ac44079089ffdfc807d7d53d7b64e1f4ebc"]}}}},"moment.js":{"size":154033,"offset":"17761461","integrity":{"algorithm":"SHA256","hash":"736a69cb2a3a81af79986b5c745ce91b46658b33a8659ebf5244a143d481acb9","blockSize":4194304,"blocks":["736a69cb2a3a81af79986b5c745ce91b46658b33a8659ebf5244a143d481acb9"]}}}},"ender.js":{"size":39,"offset":"17915494","integrity":{"algorithm":"SHA256","hash":"f7b008459f019a44747b37c0349eee9df994ff655841581000b908bc2d1427c3","blockSize":4194304,"blocks":["f7b008459f019a44747b37c0349eee9df994ff655841581000b908bc2d1427c3"]}},"LICENSE":{"size":1075,"offset":"17915533","integrity":{"algorithm":"SHA256","hash":"8f38f320bbf5eb84c08e08676f7ee1d2204ebe5797f6a090d077329cf212fca3","blockSize":4194304,"blocks":["8f38f320bbf5eb84c08e08676f7ee1d2204ebe5797f6a090d077329cf212fca3"]}},"locale":{"files":{"af.js":{"size":2753,"offset":"17916608","integrity":{"algorithm":"SHA256","hash":"c59e2f2d09098829d00f5dab85e6ec623f6aa9e70285ec2aac12030a014e4161","blockSize":4194304,"blocks":["c59e2f2d09098829d00f5dab85e6ec623f6aa9e70285ec2aac12030a014e4161"]}},"ar-dz.js":{"size":5377,"offset":"17919361","integrity":{"algorithm":"SHA256","hash":"2fcf1465ad9fcb33a1ee00188d0d8cb19e0d9094da9e27f56444b67e50c6810c","blockSize":4194304,"blocks":["2fcf1465ad9fcb33a1ee00188d0d8cb19e0d9094da9e27f56444b67e50c6810c"]}},"ar-kw.js":{"size":2458,"offset":"17924738","integrity":{"algorithm":"SHA256","hash":"c71a867a15220e0d38bb151e04bbdb081151cdf8f249305a3c8ab7279baa29d2","blockSize":4194304,"blocks":["c71a867a15220e0d38bb151e04bbdb081151cdf8f249305a3c8ab7279baa29d2"]}},"ar-ly.js":{"size":5652,"offset":"17927196","integrity":{"algorithm":"SHA256","hash":"9f3a5301a240b327e82cb628de4c414aac5661f78b4b92cfeb9ceaa4268b3b8c","blockSize":4194304,"blocks":["9f3a5301a240b327e82cb628de4c414aac5661f78b4b92cfeb9ceaa4268b3b8c"]}},"ar-ma.js":{"size":2513,"offset":"17932848","integrity":{"algorithm":"SHA256","hash":"480001680e1d546b90f5b012b2b30b60fedd83feb856d6228e348e78541d7324","blockSize":4194304,"blocks":["480001680e1d546b90f5b012b2b30b60fedd83feb856d6228e348e78541d7324"]}},"ar-sa.js":{"size":3762,"offset":"17935361","integrity":{"algorithm":"SHA256","hash":"914cb940f541bcc9abedc7582d82d1240fd5afb2e4ccb7898155d31ec5a3a26e","blockSize":4194304,"blocks":["914cb940f541bcc9abedc7582d82d1240fd5afb2e4ccb7898155d31ec5a3a26e"]}},"ar-tn.js":{"size":2460,"offset":"17939123","integrity":{"algorithm":"SHA256","hash":"461b03449e2cff4225a7e4d59bf8a63e49eeb3e45cbfece826dae6e91aeff0b6","blockSize":4194304,"blocks":["461b03449e2cff4225a7e4d59bf8a63e49eeb3e45cbfece826dae6e91aeff0b6"]}},"ar.js":{"size":6136,"offset":"17941583","integrity":{"algorithm":"SHA256","hash":"73485f16cb9317f156bab05ba8a3233fa87513cf1cb52728fefc53703ffd5b3e","blockSize":4194304,"blocks":["73485f16cb9317f156bab05ba8a3233fa87513cf1cb52728fefc53703ffd5b3e"]}},"az.js":{"size":3550,"offset":"17947719","integrity":{"algorithm":"SHA256","hash":"7484e54460caa37fd9db69a48e347d468e3ad16ac6ed8ed59041dc54aa97a0d0","blockSize":4194304,"blocks":["7484e54460caa37fd9db69a48e347d468e3ad16ac6ed8ed59041dc54aa97a0d0"]}},"be.js":{"size":5992,"offset":"17951269","integrity":{"algorithm":"SHA256","hash":"7ed6dc001202b0e5028bd603a2d1b484e1b20d10e0b0beef3f05652b148afcc2","blockSize":4194304,"blocks":["7ed6dc001202b0e5028bd603a2d1b484e1b20d10e0b0beef3f05652b148afcc2"]}},"bg.js":{"size":3623,"offset":"17957261","integrity":{"algorithm":"SHA256","hash":"0d034309eedbd03f17e22dbd963c8cc8d490c8e877f39c6c4081636d1cd28fca","blockSize":4194304,"blocks":["0d034309eedbd03f17e22dbd963c8cc8d490c8e877f39c6c4081636d1cd28fca"]}},"bm.js":{"size":2233,"offset":"17960884","integrity":{"algorithm":"SHA256","hash":"1f3217d69f6512ea3984fb7428e1afe0c7779cf3822582c52e6eaa8982ac23b1","blockSize":4194304,"blocks":["1f3217d69f6512ea3984fb7428e1afe0c7779cf3822582c52e6eaa8982ac23b1"]}},"bn-bd.js":{"size":5157,"offset":"17963117","integrity":{"algorithm":"SHA256","hash":"3ed28b849548bb14d4fb4bb582e860fcb70ec306dcf191fbb6b4aa4c02794293","blockSize":4194304,"blocks":["3ed28b849548bb14d4fb4bb582e860fcb70ec306dcf191fbb6b4aa4c02794293"]}},"bn.js":{"size":4670,"offset":"17968274","integrity":{"algorithm":"SHA256","hash":"9a3382fbaa69dbf076860c39f920787ed59f249f6cfe929adb8d297cfca4c3f0","blockSize":4194304,"blocks":["9a3382fbaa69dbf076860c39f920787ed59f249f6cfe929adb8d297cfca4c3f0"]}},"bo.js":{"size":5171,"offset":"17972944","integrity":{"algorithm":"SHA256","hash":"5de1160c3f79f6d9e70f159c6d573b7bf016918e68d82fb6f4820d2712273e18","blockSize":4194304,"blocks":["5de1160c3f79f6d9e70f159c6d573b7bf016918e68d82fb6f4820d2712273e18"]}},"br.js":{"size":5484,"offset":"17978115","integrity":{"algorithm":"SHA256","hash":"dd2d9de5db82ebaed1b16a35040b71005bf070694d84e4da4969d7dbefa8ec5f","blockSize":4194304,"blocks":["dd2d9de5db82ebaed1b16a35040b71005bf070694d84e4da4969d7dbefa8ec5f"]}},"bs.js":{"size":5367,"offset":"17983599","integrity":{"algorithm":"SHA256","hash":"09691b0dafeb76fe9ebc2014f256b4379c577987a226ce27b098186a4fa2ac4e","blockSize":4194304,"blocks":["09691b0dafeb76fe9ebc2014f256b4379c577987a226ce27b098186a4fa2ac4e"]}},"ca.js":{"size":3687,"offset":"17988966","integrity":{"algorithm":"SHA256","hash":"f3ebd42abfd2c951796db2a629d96a3b6dbc14783d7c037243d4e9efc5fb9137","blockSize":4194304,"blocks":["f3ebd42abfd2c951796db2a629d96a3b6dbc14783d7c037243d4e9efc5fb9137"]}},"cs.js":{"size":7487,"offset":"17992653","integrity":{"algorithm":"SHA256","hash":"f3fd8cebe35a0e6a870a9f7dc2ecdf43204ea0cda34187c1c41d9b339e9d604c","blockSize":4194304,"blocks":["f3fd8cebe35a0e6a870a9f7dc2ecdf43204ea0cda34187c1c41d9b339e9d604c"]}},"cv.js":{"size":2893,"offset":"18000140","integrity":{"algorithm":"SHA256","hash":"c6b7e3b381230366ee07246e6ea1ea7105a7432470c8da359af16fa9be3f55a6","blockSize":4194304,"blocks":["c6b7e3b381230366ee07246e6ea1ea7105a7432470c8da359af16fa9be3f55a6"]}},"cy.js":{"size":3522,"offset":"18003033","integrity":{"algorithm":"SHA256","hash":"b41207f96b4d030aded453bd42966468472524f9968b1d4c3590882c3626c009","blockSize":4194304,"blocks":["b41207f96b4d030aded453bd42966468472524f9968b1d4c3590882c3626c009"]}},"da.js":{"size":2161,"offset":"18006555","integrity":{"algorithm":"SHA256","hash":"891e90544d1061ea578b51173a2dc4638c0e9af95cc2986f1f89ad5008e301e7","blockSize":4194304,"blocks":["891e90544d1061ea578b51173a2dc4638c0e9af95cc2986f1f89ad5008e301e7"]}},"de-at.js":{"size":3249,"offset":"18008716","integrity":{"algorithm":"SHA256","hash":"93a120c7a80ca41d5e3b86b7a12850a5e1edde4df493642d660575df30c4379f","blockSize":4194304,"blocks":["93a120c7a80ca41d5e3b86b7a12850a5e1edde4df493642d660575df30c4379f"]}},"de-ch.js":{"size":3084,"offset":"18011965","integrity":{"algorithm":"SHA256","hash":"929473d6efc6ddf5d5798d895866912a3736ca64463ba872f6da57cd76d9493e","blockSize":4194304,"blocks":["929473d6efc6ddf5d5798d895866912a3736ca64463ba872f6da57cd76d9493e"]}},"de.js":{"size":3172,"offset":"18015049","integrity":{"algorithm":"SHA256","hash":"749042d699184f181c58e0fa4e07a5a73882755028fecebe921ed6c948f019d4","blockSize":4194304,"blocks":["749042d699184f181c58e0fa4e07a5a73882755028fecebe921ed6c948f019d4"]}},"dv.js":{"size":3140,"offset":"18018221","integrity":{"algorithm":"SHA256","hash":"94a1563faab9fe61f359a515042f56e2672886200e084de98bbd98769f71ba69","blockSize":4194304,"blocks":["94a1563faab9fe61f359a515042f56e2672886200e084de98bbd98769f71ba69"]}},"el.js":{"size":4577,"offset":"18021361","integrity":{"algorithm":"SHA256","hash":"ea5271e0ce0f26e3cea74df8df5edcc7d3cd8599bb759c0d177c8d81cda6495a","blockSize":4194304,"blocks":["ea5271e0ce0f26e3cea74df8df5edcc7d3cd8599bb759c0d177c8d81cda6495a"]}},"en-au.js":{"size":2625,"offset":"18025938","integrity":{"algorithm":"SHA256","hash":"6a84d80e99d57f1ca1faa1dcca9f48e9925de4013ac5ceab52cbf20b059cff8c","blockSize":4194304,"blocks":["6a84d80e99d57f1ca1faa1dcca9f48e9925de4013ac5ceab52cbf20b059cff8c"]}},"en-ca.js":{"size":2458,"offset":"18028563","integrity":{"algorithm":"SHA256","hash":"d7b47d71cd5b63a0cd7bc3945ca1799d9345ba9dc3e85356231dbb4f6becdd01","blockSize":4194304,"blocks":["d7b47d71cd5b63a0cd7bc3945ca1799d9345ba9dc3e85356231dbb4f6becdd01"]}},"en-gb.js":{"size":2631,"offset":"18031021","integrity":{"algorithm":"SHA256","hash":"46e86bfd873ce2ba61885faa9e0ba2ae1a510574f698d6a3aba7da49d1505eb9","blockSize":4194304,"blocks":["46e86bfd873ce2ba61885faa9e0ba2ae1a510574f698d6a3aba7da49d1505eb9"]}},"en-ie.js":{"size":2629,"offset":"18033652","integrity":{"algorithm":"SHA256","hash":"41a3d03fb561db37dc1e3a63cba10467c0bcabb2ab7e788329f86b6be6f72d9e","blockSize":4194304,"blocks":["41a3d03fb561db37dc1e3a63cba10467c0bcabb2ab7e788329f86b6be6f72d9e"]}},"en-il.js":{"size":2451,"offset":"18036281","integrity":{"algorithm":"SHA256","hash":"494c5f26d0a16c8c1645d70cfc327e19086831ce78bc98599f4e5abc321db7d7","blockSize":4194304,"blocks":["494c5f26d0a16c8c1645d70cfc327e19086831ce78bc98599f4e5abc321db7d7"]}},"en-in.js":{"size":2625,"offset":"18038732","integrity":{"algorithm":"SHA256","hash":"290dd53cb6262cfc22c961faf969851adfa8c38b30c80c496b8c8f19232a13e8","blockSize":4194304,"blocks":["290dd53cb6262cfc22c961faf969851adfa8c38b30c80c496b8c8f19232a13e8"]}},"en-nz.js":{"size":2634,"offset":"18041357","integrity":{"algorithm":"SHA256","hash":"9590cf61d2ab1b83f793be9f074340397e639fbb112a80c8bb7d2e3a77c45448","blockSize":4194304,"blocks":["9590cf61d2ab1b83f793be9f074340397e639fbb112a80c8bb7d2e3a77c45448"]}},"en-sg.js":{"size":2643,"offset":"18043991","integrity":{"algorithm":"SHA256","hash":"e3b29449d67e5d53d3420b5f4ec207dbd70f651380573b59f39aee2b1b9ca52d","blockSize":4194304,"blocks":["e3b29449d67e5d53d3420b5f4ec207dbd70f651380573b59f39aee2b1b9ca52d"]}},"eo.js":{"size":2918,"offset":"18046634","integrity":{"algorithm":"SHA256","hash":"823d3e21f85f9d3801f7004cc5cde82d5f45d98e977979322543a65908411e4c","blockSize":4194304,"blocks":["823d3e21f85f9d3801f7004cc5cde82d5f45d98e977979322543a65908411e4c"]}},"es-do.js":{"size":4141,"offset":"18049552","integrity":{"algorithm":"SHA256","hash":"c2fdc7b50088373ecc8f4df1b94bd66566e72a4f45939686a599cf9c1c65fed7","blockSize":4194304,"blocks":["c2fdc7b50088373ecc8f4df1b94bd66566e72a4f45939686a599cf9c1c65fed7"]}},"es-mx.js":{"size":4214,"offset":"18053693","integrity":{"algorithm":"SHA256","hash":"c2f517f59c2e638073de6c022d2ef34a568e953e5dab6219ab8e116ba8b59916","blockSize":4194304,"blocks":["c2f517f59c2e638073de6c022d2ef34a568e953e5dab6219ab8e116ba8b59916"]}},"es-us.js":{"size":4238,"offset":"18057907","integrity":{"algorithm":"SHA256","hash":"6eeba8b22a645ea94af479d836db6610a1b289efc830885091b93a19517c2ba7","blockSize":4194304,"blocks":["6eeba8b22a645ea94af479d836db6610a1b289efc830885091b93a19517c2ba7"]}},"es.js":{"size":4198,"offset":"18062145","integrity":{"algorithm":"SHA256","hash":"8845a0cad1eb82264e797c23137c0c1e7473cb2af26c1df6ff16d55284a4925c","blockSize":4194304,"blocks":["8845a0cad1eb82264e797c23137c0c1e7473cb2af26c1df6ff16d55284a4925c"]}},"et.js":{"size":3245,"offset":"18066343","integrity":{"algorithm":"SHA256","hash":"28fb94817698b9e241f10873fceda14d85ac45dab8beb1d36959b263fbfc214b","blockSize":4194304,"blocks":["28fb94817698b9e241f10873fceda14d85ac45dab8beb1d36959b263fbfc214b"]}},"eu.js":{"size":2504,"offset":"18069588","integrity":{"algorithm":"SHA256","hash":"10404c5dd6777255de744880f39d5f3da5fd2a70fc9ff9c8c1d7929d8d239fb3","blockSize":4194304,"blocks":["10404c5dd6777255de744880f39d5f3da5fd2a70fc9ff9c8c1d7929d8d239fb3"]}},"fa.js":{"size":3938,"offset":"18072092","integrity":{"algorithm":"SHA256","hash":"6a04898843b415f1ba5e9875e32b7070f3c2057bb70933bd594787ad95fb29dd","blockSize":4194304,"blocks":["6a04898843b415f1ba5e9875e32b7070f3c2057bb70933bd594787ad95fb29dd"]}},"fi.js":{"size":4384,"offset":"18076030","integrity":{"algorithm":"SHA256","hash":"2e9e7fae18e9e136e7c6233e4a6d784bae6ce207af5403f2b4e9675f2b02c248","blockSize":4194304,"blocks":["2e9e7fae18e9e136e7c6233e4a6d784bae6ce207af5403f2b4e9675f2b02c248"]}},"fil.js":{"size":2326,"offset":"18080414","integrity":{"algorithm":"SHA256","hash":"d24cac0d0069d89c48b4c8cee34cddcb7e39892c91f07b884574fe0cafb66ef7","blockSize":4194304,"blocks":["d24cac0d0069d89c48b4c8cee34cddcb7e39892c91f07b884574fe0cafb66ef7"]}},"fo.js":{"size":2296,"offset":"18082740","integrity":{"algorithm":"SHA256","hash":"6d084b822e73a6e9a14c34dc7041263b221cabe54ee8e2925272ae4ce5202487","blockSize":4194304,"blocks":["6d084b822e73a6e9a14c34dc7041263b221cabe54ee8e2925272ae4ce5202487"]}},"fr-ca.js":{"size":2684,"offset":"18085036","integrity":{"algorithm":"SHA256","hash":"06ed2f736ba37a1acc71ae4d398b79371b414dc2254eead3cf4e170a8d2f301f","blockSize":4194304,"blocks":["06ed2f736ba37a1acc71ae4d398b79371b414dc2254eead3cf4e170a8d2f301f"]}},"fr-ch.js":{"size":2859,"offset":"18087720","integrity":{"algorithm":"SHA256","hash":"afc6e9b9f9665439978d8786b8c87a2865398fd95cce5999ac14ce50f1c7a0b3","blockSize":4194304,"blocks":["afc6e9b9f9665439978d8786b8c87a2865398fd95cce5999ac14ce50f1c7a0b3"]}},"fr.js":{"size":4155,"offset":"18090579","integrity":{"algorithm":"SHA256","hash":"74a134e9bfce92fcb050a0a8eff3ff2356225680ce6e647d34e0197e09f1f168","blockSize":4194304,"blocks":["74a134e9bfce92fcb050a0a8eff3ff2356225680ce6e647d34e0197e09f1f168"]}},"fy.js":{"size":2911,"offset":"18094734","integrity":{"algorithm":"SHA256","hash":"11333bb5d5137e529e2772cea9b76a3200a8b233bc7a63b4bcae66931d8f7288","blockSize":4194304,"blocks":["11333bb5d5137e529e2772cea9b76a3200a8b233bc7a63b4bcae66931d8f7288"]}},"ga.js":{"size":3056,"offset":"18097645","integrity":{"algorithm":"SHA256","hash":"fc6d5d441553b23b5ebc3c79896499a093a3285f1e6134a680b8899b5cca4c86","blockSize":4194304,"blocks":["fc6d5d441553b23b5ebc3c79896499a093a3285f1e6134a680b8899b5cca4c86"]}},"gd.js":{"size":3076,"offset":"18100701","integrity":{"algorithm":"SHA256","hash":"efa1d779f65671809a63f900479c69bed19c262f2fe7936076793bd13deda080","blockSize":4194304,"blocks":["efa1d779f65671809a63f900479c69bed19c262f2fe7936076793bd13deda080"]}},"gl.js":{"size":2947,"offset":"18103777","integrity":{"algorithm":"SHA256","hash":"82ff709d38d97228ec8b060a19ec17aee51404e9c7caa13647816b6dd090c9cc","blockSize":4194304,"blocks":["82ff709d38d97228ec8b060a19ec17aee51404e9c7caa13647816b6dd090c9cc"]}},"gom-deva.js":{"size":6292,"offset":"18106724","integrity":{"algorithm":"SHA256","hash":"ca47e3f441f27aae837340c7438f2eae1011856d7250c4b5df7dc39e30897782","blockSize":4194304,"blocks":["ca47e3f441f27aae837340c7438f2eae1011856d7250c4b5df7dc39e30897782"]}},"gom-latn.js":{"size":4938,"offset":"18113016","integrity":{"algorithm":"SHA256","hash":"448aebfb4892279aa64877302f8e5971bfc35247a9dc132da9ce6bfcd16bb10c","blockSize":4194304,"blocks":["448aebfb4892279aa64877302f8e5971bfc35247a9dc132da9ce6bfcd16bb10c"]}},"gu.js":{"size":4916,"offset":"18117954","integrity":{"algorithm":"SHA256","hash":"c4122d6ef4a4a0860b231a948e6c3213638c27c87a628d52bbc39c072c900e94","blockSize":4194304,"blocks":["c4122d6ef4a4a0860b231a948e6c3213638c27c87a628d52bbc39c072c900e94"]}},"he.js":{"size":3897,"offset":"18122870","integrity":{"algorithm":"SHA256","hash":"6e339c40e789ce4302c926323d3c393f5e1b1b2f021efd7d333595ff044d5308","blockSize":4194304,"blocks":["6e339c40e789ce4302c926323d3c393f5e1b1b2f021efd7d333595ff044d5308"]}},"hi.js":{"size":7323,"offset":"18126767","integrity":{"algorithm":"SHA256","hash":"117c561a386a9444b08a126c11da0f36b10c550814bcf6dc58f2831e380a66a6","blockSize":4194304,"blocks":["117c561a386a9444b08a126c11da0f36b10c550814bcf6dc58f2831e380a66a6"]}},"hr.js":{"size":5614,"offset":"18134090","integrity":{"algorithm":"SHA256","hash":"65929c37eb587511d09e2e634d2a44529c9bf3f4dcfef11272a47249148d8647","blockSize":4194304,"blocks":["65929c37eb587511d09e2e634d2a44529c9bf3f4dcfef11272a47249148d8647"]}},"hu.js":{"size":4585,"offset":"18139704","integrity":{"algorithm":"SHA256","hash":"24ba249309b23af094be447e04b5d89d59edff22e4ee62d314c5285a28c07e27","blockSize":4194304,"blocks":["24ba249309b23af094be447e04b5d89d59edff22e4ee62d314c5285a28c07e27"]}},"hy-am.js":{"size":3892,"offset":"18144289","integrity":{"algorithm":"SHA256","hash":"0ad5748a12eeec36ecbc743b59c2e2ca013b281ea800b2cbee2689e70d4086d0","blockSize":4194304,"blocks":["0ad5748a12eeec36ecbc743b59c2e2ca013b281ea800b2cbee2689e70d4086d0"]}},"id.js":{"size":2995,"offset":"18148181","integrity":{"algorithm":"SHA256","hash":"036154641aa4cba94ac8a65b98af75d2fa0ec29156674947d1148fa146689dc3","blockSize":4194304,"blocks":["036154641aa4cba94ac8a65b98af75d2fa0ec29156674947d1148fa146689dc3"]}},"is.js":{"size":5314,"offset":"18151176","integrity":{"algorithm":"SHA256","hash":"c702f98b7dfccc3945f19ccf99046316e67e26b8fe295f603ce1fc68f88251ca","blockSize":4194304,"blocks":["c702f98b7dfccc3945f19ccf99046316e67e26b8fe295f603ce1fc68f88251ca"]}},"it-ch.js":{"size":2521,"offset":"18156490","integrity":{"algorithm":"SHA256","hash":"9670e2244dd63556408fc20671fd763fb91be52041eee92934710e75e2b3b7fa","blockSize":4194304,"blocks":["9670e2244dd63556408fc20671fd763fb91be52041eee92934710e75e2b3b7fa"]}},"it.js":{"size":3987,"offset":"18159011","integrity":{"algorithm":"SHA256","hash":"2fe7346bd6fdf02aee19fde76bd2ca0b5e65903ddd45d097be2342ee7b0b9470","blockSize":4194304,"blocks":["2fe7346bd6fdf02aee19fde76bd2ca0b5e65903ddd45d097be2342ee7b0b9470"]}},"ja.js":{"size":4867,"offset":"18162998","integrity":{"algorithm":"SHA256","hash":"9720de4592dd94861f2fabb51110533fe44620f517e50448dd828a7f2eef7009","blockSize":4194304,"blocks":["9720de4592dd94861f2fabb51110533fe44620f517e50448dd828a7f2eef7009"]}},"jv.js":{"size":3004,"offset":"18167865","integrity":{"algorithm":"SHA256","hash":"707617feaac7459e5d5c39ff3ea4a5e5da0cf398384902c1cd5975cbd1a113cd","blockSize":4194304,"blocks":["707617feaac7459e5d5c39ff3ea4a5e5da0cf398384902c1cd5975cbd1a113cd"]}},"ka.js":{"size":4180,"offset":"18170869","integrity":{"algorithm":"SHA256","hash":"5d8958df72a5556621ab5f658e2b2ea9b0ce3238b68b4b91148e45f6de2ac103","blockSize":4194304,"blocks":["5d8958df72a5556621ab5f658e2b2ea9b0ce3238b68b4b91148e45f6de2ac103"]}},"kk.js":{"size":3139,"offset":"18175049","integrity":{"algorithm":"SHA256","hash":"430c86f6c0ea0199d8622045883048b35875bea37b44424663bbe573056ec981","blockSize":4194304,"blocks":["430c86f6c0ea0199d8622045883048b35875bea37b44424663bbe573056ec981"]}},"km.js":{"size":4070,"offset":"18178188","integrity":{"algorithm":"SHA256","hash":"d9dfd4c1804d72776eac8d72836b9ed56b27cdae8e71347e1512b146c51ff40c","blockSize":4194304,"blocks":["d9dfd4c1804d72776eac8d72836b9ed56b27cdae8e71347e1512b146c51ff40c"]}},"kn.js":{"size":5044,"offset":"18182258","integrity":{"algorithm":"SHA256","hash":"315f3cb373e4a1cdac8738bd1b738aad88ec735fdd00f13906d29fe653127abd","blockSize":4194304,"blocks":["315f3cb373e4a1cdac8738bd1b738aad88ec735fdd00f13906d29fe653127abd"]}},"ko.js":{"size":2839,"offset":"18187302","integrity":{"algorithm":"SHA256","hash":"f15f592b5d7d5bbbd061c5ad31d4c45f462ad43acad74808c6a7105b108ec0eb","blockSize":4194304,"blocks":["f15f592b5d7d5bbbd061c5ad31d4c45f462ad43acad74808c6a7105b108ec0eb"]}},"ku.js":{"size":4108,"offset":"18190141","integrity":{"algorithm":"SHA256","hash":"9c79ea7fd15f570cfe2c817ec240b8731ec9ad6334d7874925c6ed64b8ec84ce","blockSize":4194304,"blocks":["9c79ea7fd15f570cfe2c817ec240b8731ec9ad6334d7874925c6ed64b8ec84ce"]}},"ky.js":{"size":3173,"offset":"18194249","integrity":{"algorithm":"SHA256","hash":"d3c35f2c47610c7c921268cb98cf398599068d24d51e7a89167707130c85ad59","blockSize":4194304,"blocks":["d3c35f2c47610c7c921268cb98cf398599068d24d51e7a89167707130c85ad59"]}},"lb.js":{"size":5089,"offset":"18197422","integrity":{"algorithm":"SHA256","hash":"bce08089cd580b3c2968780867046914136b71f6ddd181e69c29df073ae29a19","blockSize":4194304,"blocks":["bce08089cd580b3c2968780867046914136b71f6ddd181e69c29df073ae29a19"]}},"lo.js":{"size":3149,"offset":"18202511","integrity":{"algorithm":"SHA256","hash":"de0196773150b18a4c3ecdec59df1877b5a510ff53b7fe7b54b07c89fabfffbf","blockSize":4194304,"blocks":["de0196773150b18a4c3ecdec59df1877b5a510ff53b7fe7b54b07c89fabfffbf"]}},"lt.js":{"size":4777,"offset":"18205660","integrity":{"algorithm":"SHA256","hash":"78e45b7817bcd3506074b08b80303112067317b0a7e17d97019848b8a7de2a5d","blockSize":4194304,"blocks":["78e45b7817bcd3506074b08b80303112067317b0a7e17d97019848b8a7de2a5d"]}},"lv.js":{"size":4117,"offset":"18210437","integrity":{"algorithm":"SHA256","hash":"35cae98bdf0c2ee8bb0688724f07cd3a2733b5ca33a8b3f09d509e6796082f85","blockSize":4194304,"blocks":["35cae98bdf0c2ee8bb0688724f07cd3a2733b5ca33a8b3f09d509e6796082f85"]}},"me.js":{"size":4451,"offset":"18214554","integrity":{"algorithm":"SHA256","hash":"11ba0c59fcd8d66374814477947d9e762f06b353202807d08362079cfea9b581","blockSize":4194304,"blocks":["11ba0c59fcd8d66374814477947d9e762f06b353202807d08362079cfea9b581"]}},"mi.js":{"size":2563,"offset":"18219005","integrity":{"algorithm":"SHA256","hash":"eab70a48763da45f36d675de8321cd1a27628b853257424ee014355798074ade","blockSize":4194304,"blocks":["eab70a48763da45f36d675de8321cd1a27628b853257424ee014355798074ade"]}},"mk.js":{"size":3682,"offset":"18221568","integrity":{"algorithm":"SHA256","hash":"c38140b5408a91d9632765d23f4368f0cc98dfb6aafb0fcce452b6b4bfa93efd","blockSize":4194304,"blocks":["c38140b5408a91d9632765d23f4368f0cc98dfb6aafb0fcce452b6b4bfa93efd"]}},"ml.js":{"size":3895,"offset":"18225250","integrity":{"algorithm":"SHA256","hash":"a4168c6fb120e77ade7c86dafc36a53edcd6e980681fc7f1c53dffc289dbf10a","blockSize":4194304,"blocks":["a4168c6fb120e77ade7c86dafc36a53edcd6e980681fc7f1c53dffc289dbf10a"]}},"mn.js":{"size":4110,"offset":"18229145","integrity":{"algorithm":"SHA256","hash":"74192b109479862d2676dc9c12c0198806bb551aed6f2dfd132eba52ef03a712","blockSize":4194304,"blocks":["74192b109479862d2676dc9c12c0198806bb551aed6f2dfd132eba52ef03a712"]}},"mr.js":{"size":7674,"offset":"18233255","integrity":{"algorithm":"SHA256","hash":"3114ab5f0f2116741d87e459a692da1eb1412836dfde4502786f16baac3aecf8","blockSize":4194304,"blocks":["3114ab5f0f2116741d87e459a692da1eb1412836dfde4502786f16baac3aecf8"]}},"ms-my.js":{"size":2954,"offset":"18240929","integrity":{"algorithm":"SHA256","hash":"fa77f6b23884ace43199d189a596c8cd436ab20b2b6966599dd9fd589e51548f","blockSize":4194304,"blocks":["fa77f6b23884ace43199d189a596c8cd436ab20b2b6966599dd9fd589e51548f"]}},"ms.js":{"size":2897,"offset":"18243883","integrity":{"algorithm":"SHA256","hash":"6b6301d42544281a07e51e517a1acd2e498e6289b29e74817433a86751761f71","blockSize":4194304,"blocks":["6b6301d42544281a07e51e517a1acd2e498e6289b29e74817433a86751761f71"]}},"mt.js":{"size":2208,"offset":"18246780","integrity":{"algorithm":"SHA256","hash":"6c5ec432eca585bc73df3ac67c225250701b7f52e51d97f8010c85cea88d0eca","blockSize":4194304,"blocks":["6c5ec432eca585bc73df3ac67c225250701b7f52e51d97f8010c85cea88d0eca"]}},"my.js":{"size":3762,"offset":"18248988","integrity":{"algorithm":"SHA256","hash":"92732cb26a774bc3e049c7e212d8ef1425413d63522ccca1fb1b0696854da4ad","blockSize":4194304,"blocks":["92732cb26a774bc3e049c7e212d8ef1425413d63522ccca1fb1b0696854da4ad"]}},"nb.js":{"size":2461,"offset":"18252750","integrity":{"algorithm":"SHA256","hash":"f81a662e66d3d21473cc115d82ce0f6ed3f0d2b484fc00d0f9722df2dc65cd01","blockSize":4194304,"blocks":["f81a662e66d3d21473cc115d82ce0f6ed3f0d2b484fc00d0f9722df2dc65cd01"]}},"ne.js":{"size":4811,"offset":"18255211","integrity":{"algorithm":"SHA256","hash":"e51dc5b603b3ea1b387c659447b714c116dff4a3941b17960a34a8490b43a6f0","blockSize":4194304,"blocks":["e51dc5b603b3ea1b387c659447b714c116dff4a3941b17960a34a8490b43a6f0"]}},"nl-be.js":{"size":3875,"offset":"18260022","integrity":{"algorithm":"SHA256","hash":"75ffa65528d4994944c675b1e5e7300d293e8d9e838515cd76f66b95a45a8d80","blockSize":4194304,"blocks":["75ffa65528d4994944c675b1e5e7300d293e8d9e838515cd76f66b95a45a8d80"]}},"nl.js":{"size":3912,"offset":"18263897","integrity":{"algorithm":"SHA256","hash":"32a6089e84e5d287efc7c2271419cdf73ac77afc441be1ef037a0c0a922c69e2","blockSize":4194304,"blocks":["32a6089e84e5d287efc7c2271419cdf73ac77afc441be1ef037a0c0a922c69e2"]}},"nn.js":{"size":2390,"offset":"18267809","integrity":{"algorithm":"SHA256","hash":"10cb45bb121cbfb10bfc84acf1107079aec3acb8303116e2f0c20e76deadc96b","blockSize":4194304,"blocks":["10cb45bb121cbfb10bfc84acf1107079aec3acb8303116e2f0c20e76deadc96b"]}},"oc-lnc.js":{"size":3094,"offset":"18270199","integrity":{"algorithm":"SHA256","hash":"bd2d65b32c2e2155b2046eae4c22697632693db0cab8fe2d4d324a798c5e02e8","blockSize":4194304,"blocks":["bd2d65b32c2e2155b2046eae4c22697632693db0cab8fe2d4d324a798c5e02e8"]}},"pa-in.js":{"size":4986,"offset":"18273293","integrity":{"algorithm":"SHA256","hash":"103b87fdd5f3faa5177a70d7192a65b2c56159b9a0036cb3abd0675a0e76fb63","blockSize":4194304,"blocks":["103b87fdd5f3faa5177a70d7192a65b2c56159b9a0036cb3abd0675a0e76fb63"]}},"pl.js":{"size":4996,"offset":"18278279","integrity":{"algorithm":"SHA256","hash":"f754c3d2cca08d33dee68bba20541850bdc4e4c0f1395d68ea91cab8ab766d4c","blockSize":4194304,"blocks":["f754c3d2cca08d33dee68bba20541850bdc4e4c0f1395d68ea91cab8ab766d4c"]}},"pt-br.js":{"size":2390,"offset":"18283275","integrity":{"algorithm":"SHA256","hash":"90888d8a44aba5e6763ff3be5c681b802db070197fdcb742cbaaf71217d44773","blockSize":4194304,"blocks":["90888d8a44aba5e6763ff3be5c681b802db070197fdcb742cbaaf71217d44773"]}},"pt.js":{"size":2520,"offset":"18285665","integrity":{"algorithm":"SHA256","hash":"255b33bbb20a10697f9d5defc6c4ca4d9db0086f328bad0ca6b8954460769d7e","blockSize":4194304,"blocks":["255b33bbb20a10697f9d5defc6c4ca4d9db0086f328bad0ca6b8954460769d7e"]}},"ro.js":{"size":2911,"offset":"18288185","integrity":{"algorithm":"SHA256","hash":"1759712caf36582280955f5c5d6202af5ab996a14f2bf846231d725721cbe6c4","blockSize":4194304,"blocks":["1759712caf36582280955f5c5d6202af5ab996a14f2bf846231d725721cbe6c4"]}},"ru.js":{"size":9442,"offset":"18291096","integrity":{"algorithm":"SHA256","hash":"ede09ad74fd2b975fa2fdeded7097fe7b39cfd18f4a789df8b4c681456788c6c","blockSize":4194304,"blocks":["ede09ad74fd2b975fa2fdeded7097fe7b39cfd18f4a789df8b4c681456788c6c"]}},"sd.js":{"size":2793,"offset":"18300538","integrity":{"algorithm":"SHA256","hash":"e5f27127927a41eb82e45491e52bd6a529d3db5e6cd519c48f7473268909f6c3","blockSize":4194304,"blocks":["e5f27127927a41eb82e45491e52bd6a529d3db5e6cd519c48f7473268909f6c3"]}},"se.js":{"size":2387,"offset":"18303331","integrity":{"algorithm":"SHA256","hash":"672fc3bc6708b62f92c7d6b005f045a14042d4758bb8c0318161323c5fa0c0d7","blockSize":4194304,"blocks":["672fc3bc6708b62f92c7d6b005f045a14042d4758bb8c0318161323c5fa0c0d7"]}},"si.js":{"size":3257,"offset":"18305718","integrity":{"algorithm":"SHA256","hash":"833442face80f54237e8a3912b72785568f75e2555573f522105a6f1bde2f1fa","blockSize":4194304,"blocks":["833442face80f54237e8a3912b72785568f75e2555573f522105a6f1bde2f1fa"]}},"sk.js":{"size":6045,"offset":"18308975","integrity":{"algorithm":"SHA256","hash":"19fa1723027773af2893de2df14f85cbc538d3bdb58c3e3ba13fcc3d1176ca93","blockSize":4194304,"blocks":["19fa1723027773af2893de2df14f85cbc538d3bdb58c3e3ba13fcc3d1176ca93"]}},"sl.js":{"size":7091,"offset":"18315020","integrity":{"algorithm":"SHA256","hash":"a1ed140c7c89c2d71253b61777b38729d8163f02726c136e94f4bad781b10ac4","blockSize":4194304,"blocks":["a1ed140c7c89c2d71253b61777b38729d8163f02726c136e94f4bad781b10ac4"]}},"sq.js":{"size":2559,"offset":"18322111","integrity":{"algorithm":"SHA256","hash":"9d7d061c245349d6897732c90ad57841c9132b9b556be07a24dc76ff17cf75a0","blockSize":4194304,"blocks":["9d7d061c245349d6897732c90ad57841c9132b9b556be07a24dc76ff17cf75a0"]}},"sr-cyrl.js":{"size":5000,"offset":"18324670","integrity":{"algorithm":"SHA256","hash":"267ad10cf741df22a8879b3063e09115a78ad2fbd3bbdf0d7d1d2b8adf1008b7","blockSize":4194304,"blocks":["267ad10cf741df22a8879b3063e09115a78ad2fbd3bbdf0d7d1d2b8adf1008b7"]}},"sr.js":{"size":4519,"offset":"18329670","integrity":{"algorithm":"SHA256","hash":"c53c3fe82fb3579321f9c889a48fe0dd4a684fde2306dfe3c7bd215495d327db","blockSize":4194304,"blocks":["c53c3fe82fb3579321f9c889a48fe0dd4a684fde2306dfe3c7bd215495d327db"]}},"ss.js":{"size":3208,"offset":"18334189","integrity":{"algorithm":"SHA256","hash":"baeaeed797481ad6d78065de25a93bfda817b8401103a4429a6acab73ecf47b9","blockSize":4194304,"blocks":["baeaeed797481ad6d78065de25a93bfda817b8401103a4429a6acab73ecf47b9"]}},"sv.js":{"size":2658,"offset":"18337397","integrity":{"algorithm":"SHA256","hash":"08f8dbba970b89522adaabe609f47a3f20857c0985967888124f9204f4c3e2f0","blockSize":4194304,"blocks":["08f8dbba970b89522adaabe609f47a3f20857c0985967888124f9204f4c3e2f0"]}},"sw.js":{"size":2171,"offset":"18340055","integrity":{"algorithm":"SHA256","hash":"aad64e1cf71a92fdd487a224114c2cb9a01ee3925c85a731d4e70b645f122403","blockSize":4194304,"blocks":["aad64e1cf71a92fdd487a224114c2cb9a01ee3925c85a731d4e70b645f122403"]}},"ta.js":{"size":5600,"offset":"18342226","integrity":{"algorithm":"SHA256","hash":"a2e7be79e66f837d6362e357d11a5c965d9213fdb78ea69d74ed04a0760833ea","blockSize":4194304,"blocks":["a2e7be79e66f837d6362e357d11a5c965d9213fdb78ea69d74ed04a0760833ea"]}},"te.js":{"size":4024,"offset":"18347826","integrity":{"algorithm":"SHA256","hash":"5511d35500267be832b1966d0f546d171751b3b6ebdecf6674b6c7df3a55ff4a","blockSize":4194304,"blocks":["5511d35500267be832b1966d0f546d171751b3b6ebdecf6674b6c7df3a55ff4a"]}},"tet.js":{"size":2741,"offset":"18351850","integrity":{"algorithm":"SHA256","hash":"d80dcb236c671594af031c93d32ed883c322a6f32bd25637d454d7b9d9e81593","blockSize":4194304,"blocks":["d80dcb236c671594af031c93d32ed883c322a6f32bd25637d454d7b9d9e81593"]}},"tg.js":{"size":4364,"offset":"18354591","integrity":{"algorithm":"SHA256","hash":"e4447a0ff18bf7505ade87ab270011ddad6589c8b2e950080335a080aa398d11","blockSize":4194304,"blocks":["e4447a0ff18bf7505ade87ab270011ddad6589c8b2e950080335a080aa398d11"]}},"th.js":{"size":3296,"offset":"18358955","integrity":{"algorithm":"SHA256","hash":"ea1eae4962237dc241239f3a8e679612a604caf2573b9e3c23305fc910305462","blockSize":4194304,"blocks":["ea1eae4962237dc241239f3a8e679612a604caf2573b9e3c23305fc910305462"]}},"tk.js":{"size":3168,"offset":"18362251","integrity":{"algorithm":"SHA256","hash":"fc6654229cf3f6e6bb2aeb5b70dc4e6adf7f307575af9d15b7a31aab897a9988","blockSize":4194304,"blocks":["fc6654229cf3f6e6bb2aeb5b70dc4e6adf7f307575af9d15b7a31aab897a9988"]}},"tl-ph.js":{"size":2287,"offset":"18365419","integrity":{"algorithm":"SHA256","hash":"e324f1791432534af3ada36c185637db02eaf3d3ed8f88ddf143538dc484cc3a","blockSize":4194304,"blocks":["e324f1791432534af3ada36c185637db02eaf3d3ed8f88ddf143538dc484cc3a"]}},"tlh.js":{"size":4553,"offset":"18367706","integrity":{"algorithm":"SHA256","hash":"60ffce35513ba7039519aeb66317c504016cc5c9a9c788f884b85a3c7e3fc0d4","blockSize":4194304,"blocks":["60ffce35513ba7039519aeb66317c504016cc5c9a9c788f884b85a3c7e3fc0d4"]}},"tr.js":{"size":3663,"offset":"18372259","integrity":{"algorithm":"SHA256","hash":"2438fffe225593e4f2e5b58838d0b94a5c02c9e1af16585403bdc25f60cca439","blockSize":4194304,"blocks":["2438fffe225593e4f2e5b58838d0b94a5c02c9e1af16585403bdc25f60cca439"]}},"tzl.js":{"size":3779,"offset":"18375922","integrity":{"algorithm":"SHA256","hash":"393e6424d498fd2abbf646217a197b61c4c57706e6b29ec2873ab20e7bdf6970","blockSize":4194304,"blocks":["393e6424d498fd2abbf646217a197b61c4c57706e6b29ec2873ab20e7bdf6970"]}},"tzm-latn.js":{"size":2217,"offset":"18379701","integrity":{"algorithm":"SHA256","hash":"a62bad157d0bc190b292709e6a52e19b33de44b726ec172b4898b1d2b2f67df0","blockSize":4194304,"blocks":["a62bad157d0bc190b292709e6a52e19b33de44b726ec172b4898b1d2b2f67df0"]}},"tzm.js":{"size":2840,"offset":"18381918","integrity":{"algorithm":"SHA256","hash":"6eb8cb9a6904f5fc0033362ab70638a61f7b2cae80bbdb41d69185b68956f912","blockSize":4194304,"blocks":["6eb8cb9a6904f5fc0033362ab70638a61f7b2cae80bbdb41d69185b68956f912"]}},"ug-cn.js":{"size":4624,"offset":"18384758","integrity":{"algorithm":"SHA256","hash":"69f2dcba4994ad832a46dac8426e866a07653fe92cf1f01486bbe9c96c5c9d50","blockSize":4194304,"blocks":["69f2dcba4994ad832a46dac8426e866a07653fe92cf1f01486bbe9c96c5c9d50"]}},"uk.js":{"size":6819,"offset":"18389382","integrity":{"algorithm":"SHA256","hash":"46f3982b1a685158aa5f3b6ac67ff6ee29cf7a9f8a7e350e94a2eefa4132c8a2","blockSize":4194304,"blocks":["46f3982b1a685158aa5f3b6ac67ff6ee29cf7a9f8a7e350e94a2eefa4132c8a2"]}},"ur.js":{"size":2840,"offset":"18396201","integrity":{"algorithm":"SHA256","hash":"c89fc485a14cb20c0576ff20bc3d157e1296f2b2ddfa8035f71e8b58f61a29a4","blockSize":4194304,"blocks":["c89fc485a14cb20c0576ff20bc3d157e1296f2b2ddfa8035f71e8b58f61a29a4"]}},"uz-latn.js":{"size":2163,"offset":"18399041","integrity":{"algorithm":"SHA256","hash":"3848dcbe6f6ab4d82d0a9faea3e5b54578f45389546b545f66f2f533efb63910","blockSize":4194304,"blocks":["3848dcbe6f6ab4d82d0a9faea3e5b54578f45389546b545f66f2f533efb63910"]}},"uz.js":{"size":2409,"offset":"18401204","integrity":{"algorithm":"SHA256","hash":"9f22344f9ff69b1cf5546c975fd8847884bb032216d15054ea267cb964a09b08","blockSize":4194304,"blocks":["9f22344f9ff69b1cf5546c975fd8847884bb032216d15054ea267cb964a09b08"]}},"vi.js":{"size":3046,"offset":"18403613","integrity":{"algorithm":"SHA256","hash":"e72b57fd62fc9ac2d39d9d3ebbfc6a78711c842e577b344d3c2c38f78651e47e","blockSize":4194304,"blocks":["e72b57fd62fc9ac2d39d9d3ebbfc6a78711c842e577b344d3c2c38f78651e47e"]}},"x-pseudo.js":{"size":2930,"offset":"18406659","integrity":{"algorithm":"SHA256","hash":"08262f448ca62290ee030fd00cc67bb116096d824aadddf8e5807047fee30574","blockSize":4194304,"blocks":["08262f448ca62290ee030fd00cc67bb116096d824aadddf8e5807047fee30574"]}},"yo.js":{"size":2419,"offset":"18409589","integrity":{"algorithm":"SHA256","hash":"d80655b604558af2855f5b67b21b28ec5770985b67fde59e94e1168e5f4795c8","blockSize":4194304,"blocks":["d80655b604558af2855f5b67b21b28ec5770985b67fde59e94e1168e5f4795c8"]}},"zh-cn.js":{"size":4507,"offset":"18412008","integrity":{"algorithm":"SHA256","hash":"d82c307c8342e5da7732aaac279328e456de6e5b9630a6eb6271c242ab21a360","blockSize":4194304,"blocks":["d82c307c8342e5da7732aaac279328e456de6e5b9630a6eb6271c242ab21a360"]}},"zh-hk.js":{"size":3832,"offset":"18416515","integrity":{"algorithm":"SHA256","hash":"c6d7de0d1f5544a1d3bb64c7eb27481b30316766f1214fbb5b1c6be358a4b921","blockSize":4194304,"blocks":["c6d7de0d1f5544a1d3bb64c7eb27481b30316766f1214fbb5b1c6be358a4b921"]}},"zh-mo.js":{"size":3782,"offset":"18420347","integrity":{"algorithm":"SHA256","hash":"874ca3806f556c5809842613ba410c965111ea9441fb949a32abe2a7c3bf7f8a","blockSize":4194304,"blocks":["874ca3806f556c5809842613ba410c965111ea9441fb949a32abe2a7c3bf7f8a"]}},"zh-tw.js":{"size":3729,"offset":"18424129","integrity":{"algorithm":"SHA256","hash":"62fb1b36d24050120cadf807b975ffe9d7986aeb41a0f4ac218c3ad23a1c9b1a","blockSize":4194304,"blocks":["62fb1b36d24050120cadf807b975ffe9d7986aeb41a0f4ac218c3ad23a1c9b1a"]}}}},"min":{"files":{"locales.js":{"size":444378,"offset":"18427858","integrity":{"algorithm":"SHA256","hash":"e135b57cd0ac9b15b92be09d28e584d8ccc7e356b02328a7097994c440259725","blockSize":4194304,"blocks":["e135b57cd0ac9b15b92be09d28e584d8ccc7e356b02328a7097994c440259725"]}},"locales.min.js":{"size":310354,"offset":"18872236","integrity":{"algorithm":"SHA256","hash":"6cd7574964a5d2ea2f786d156adaeb68d7753c817ed6948532b7519e8142ffb1","blockSize":4194304,"blocks":["6cd7574964a5d2ea2f786d156adaeb68d7753c817ed6948532b7519e8142ffb1"]}},"locales.min.js.map":{"size":140134,"offset":"19182590","integrity":{"algorithm":"SHA256","hash":"18d998e465edea18d41c2ee5ac53483eb5ff289edf0cf4cb44b44aea5d7cadb1","blockSize":4194304,"blocks":["18d998e465edea18d41c2ee5ac53483eb5ff289edf0cf4cb44b44aea5d7cadb1"]}},"moment-with-locales.js":{"size":617694,"offset":"19322724","integrity":{"algorithm":"SHA256","hash":"d151b3e794e262d3dfff239017b4b2da343225b746f2d95722f2db0fea9b8748","blockSize":4194304,"blocks":["d151b3e794e262d3dfff239017b4b2da343225b746f2d95722f2db0fea9b8748"]}},"moment-with-locales.min.js":{"size":369176,"offset":"19940418","integrity":{"algorithm":"SHA256","hash":"1374a7c31e85e2dec3880fcbdc380f93a227d8cd7be3b2526aefb73d68ed4b92","blockSize":4194304,"blocks":["1374a7c31e85e2dec3880fcbdc380f93a227d8cd7be3b2526aefb73d68ed4b92"]}},"moment-with-locales.min.js.map":{"size":230179,"offset":"20309594","integrity":{"algorithm":"SHA256","hash":"342777cf5385a12c15c63276d4d7f38e80f1f6b918211e10d00b4e728524290a","blockSize":4194304,"blocks":["342777cf5385a12c15c63276d4d7f38e80f1f6b918211e10d00b4e728524290a"]}},"moment.min.js":{"size":58862,"offset":"20539773","integrity":{"algorithm":"SHA256","hash":"73de4254959530e4d1d9bec586379184f96b4953dacf9cd5e5e2bdd7bfeceef7","blockSize":4194304,"blocks":["73de4254959530e4d1d9bec586379184f96b4953dacf9cd5e5e2bdd7bfeceef7"]}},"moment.min.js.map":{"size":86532,"offset":"20598635","integrity":{"algorithm":"SHA256","hash":"426ae9259fa6709c2776d1819e57311087b2c11a3bb886d37dbec24eac4a2fc4","blockSize":4194304,"blocks":["426ae9259fa6709c2776d1819e57311087b2c11a3bb886d37dbec24eac4a2fc4"]}}}},"moment.js":{"size":173902,"offset":"20685167","integrity":{"algorithm":"SHA256","hash":"f0075677245792b113c801a56bd36682461596ac3830e1d1eac2499ad1460184","blockSize":4194304,"blocks":["f0075677245792b113c801a56bd36682461596ac3830e1d1eac2499ad1460184"]}},"package.js":{"size":273,"offset":"20859069","integrity":{"algorithm":"SHA256","hash":"6334f70497c6d8fd22adb3089eec30bf1e2b3dacf92508df52eaa7a8aee12bba","blockSize":4194304,"blocks":["6334f70497c6d8fd22adb3089eec30bf1e2b3dacf92508df52eaa7a8aee12bba"]}},"package.json":{"size":1742,"offset":"20859342","integrity":{"algorithm":"SHA256","hash":"0d2f1b459ef26298cd9404cd2731d44767f95e0b362bd515dd72db0f8c27972f","blockSize":4194304,"blocks":["0d2f1b459ef26298cd9404cd2731d44767f95e0b362bd515dd72db0f8c27972f"]}},"src":{"files":{"lib":{"files":{"create":{"files":{"check-overflow.js":{"size":1542,"offset":"20861084","integrity":{"algorithm":"SHA256","hash":"edd9139d9bcd4f6866a541eaaf640ac12c9e3d531bcfc2b26cc79ebf91ebba46","blockSize":4194304,"blocks":["edd9139d9bcd4f6866a541eaaf640ac12c9e3d531bcfc2b26cc79ebf91ebba46"]}},"date-from-array.js":{"size":1076,"offset":"20862626","integrity":{"algorithm":"SHA256","hash":"c77a21ecce508210c21ad92b189551795fb90f89829f619ee3827b4f8a14204f","blockSize":4194304,"blocks":["c77a21ecce508210c21ad92b189551795fb90f89829f619ee3827b4f8a14204f"]}},"from-anything.js":{"size":3351,"offset":"20863702","integrity":{"algorithm":"SHA256","hash":"e7cb8110a8d005df6f9a85ef23c6bff05196f072ab4a43cef07f01bf62237a1d","blockSize":4194304,"blocks":["e7cb8110a8d005df6f9a85ef23c6bff05196f072ab4a43cef07f01bf62237a1d"]}},"from-array.js":{"size":5585,"offset":"20867053","integrity":{"algorithm":"SHA256","hash":"922bff361e3575e7756285581ac6434ea84f6b1dfee518675ac4633ce067faa3","blockSize":4194304,"blocks":["922bff361e3575e7756285581ac6434ea84f6b1dfee518675ac4633ce067faa3"]}},"from-object.js":{"size":549,"offset":"20872638","integrity":{"algorithm":"SHA256","hash":"e54a0773752eeccab0930074a31f6f1cf62eee97d22ec1492b8a2e4bb150ae12","blockSize":4194304,"blocks":["e54a0773752eeccab0930074a31f6f1cf62eee97d22ec1492b8a2e4bb150ae12"]}},"from-string-and-array.js":{"size":1984,"offset":"20873187","integrity":{"algorithm":"SHA256","hash":"1a47f63c8b51d31c028856cf68d6e22f63899c5dae7b06c146d744014d29250e","blockSize":4194304,"blocks":["1a47f63c8b51d31c028856cf68d6e22f63899c5dae7b06c146d744014d29250e"]}},"from-string-and-format.js":{"size":4050,"offset":"20875171","integrity":{"algorithm":"SHA256","hash":"66d8f9252a4a695969d4b056206a5cacf9ed487feafe0b097f0ac8c78a6eebe4","blockSize":4194304,"blocks":["66d8f9252a4a695969d4b056206a5cacf9ed487feafe0b097f0ac8c78a6eebe4"]}},"from-string.js":{"size":7913,"offset":"20879221","integrity":{"algorithm":"SHA256","hash":"3afe9d40f4a922bc6e61b4b14b59b13b162da1127974f6eba8eb72c7d1a60642","blockSize":4194304,"blocks":["3afe9d40f4a922bc6e61b4b14b59b13b162da1127974f6eba8eb72c7d1a60642"]}},"local.js":{"size":183,"offset":"20887134","integrity":{"algorithm":"SHA256","hash":"0316f5b976a4e1aa1950fc059d62e7846f9098337c865e2c74473b59df4130f2","blockSize":4194304,"blocks":["0316f5b976a4e1aa1950fc059d62e7846f9098337c865e2c74473b59df4130f2"]}},"parsing-flags.js":{"size":644,"offset":"20887317","integrity":{"algorithm":"SHA256","hash":"3e7e6a917c4d8792822fc45c7cffda8f5e026ddd29c68af4e5af931329caf20c","blockSize":4194304,"blocks":["3e7e6a917c4d8792822fc45c7cffda8f5e026ddd29c68af4e5af931329caf20c"]}},"utc.js":{"size":186,"offset":"20887961","integrity":{"algorithm":"SHA256","hash":"a9333527f666147b10f35a42b216dd55136725b3689e795ce486c9257a6a333e","blockSize":4194304,"blocks":["a9333527f666147b10f35a42b216dd55136725b3689e795ce486c9257a6a333e"]}},"valid.js":{"size":1514,"offset":"20888147","integrity":{"algorithm":"SHA256","hash":"e7d205e977f6bd8180b7f5aeb68db9da1cd9dba3918b969ddb31042840d73dfe","blockSize":4194304,"blocks":["e7d205e977f6bd8180b7f5aeb68db9da1cd9dba3918b969ddb31042840d73dfe"]}}}},"duration":{"files":{"abs.js":{"size":484,"offset":"20889661","integrity":{"algorithm":"SHA256","hash":"5a05ac28ce5f1e5e616adb71ebc66de598a05b999f3ce7fa693de391209d7b02","blockSize":4194304,"blocks":["5a05ac28ce5f1e5e616adb71ebc66de598a05b999f3ce7fa693de391209d7b02"]}},"add-subtract.js":{"size":644,"offset":"20890145","integrity":{"algorithm":"SHA256","hash":"448cf6598fd3f13baee30450a3b2727b12dca1c15517acf8965212ec247c8a6c","blockSize":4194304,"blocks":["448cf6598fd3f13baee30450a3b2727b12dca1c15517acf8965212ec247c8a6c"]}},"as.js":{"size":2360,"offset":"20890789","integrity":{"algorithm":"SHA256","hash":"a76963bf88815c5db315ebe614f90830b6df3eafbfa94ade875e7e946fa3f6cf","blockSize":4194304,"blocks":["a76963bf88815c5db315ebe614f90830b6df3eafbfa94ade875e7e946fa3f6cf"]}},"bubble.js":{"size":1774,"offset":"20893149","integrity":{"algorithm":"SHA256","hash":"d9ee34682d14708df7a7a353a73e6aa0059b56c72318583fe364214df881af35","blockSize":4194304,"blocks":["d9ee34682d14708df7a7a353a73e6aa0059b56c72318583fe364214df881af35"]}},"clone.js":{"size":105,"offset":"20894923","integrity":{"algorithm":"SHA256","hash":"637a410873c432fa546ab8bb0bdc97368b2d2b1574d2e33560f9baa593310759","blockSize":4194304,"blocks":["637a410873c432fa546ab8bb0bdc97368b2d2b1574d2e33560f9baa593310759"]}},"constructor.js":{"size":1593,"offset":"20895028","integrity":{"algorithm":"SHA256","hash":"59aa5de689608aee7510ae41cbc5918a6d7ab7eaab3b6a685123a5a85e6f1473","blockSize":4194304,"blocks":["59aa5de689608aee7510ae41cbc5918a6d7ab7eaab3b6a685123a5a85e6f1473"]}},"create.js":{"size":4327,"offset":"20896621","integrity":{"algorithm":"SHA256","hash":"8488a2901362fad53fc66b3ca581b423dcb9acfaa275a09a320bc3cbaf1229e7","blockSize":4194304,"blocks":["8488a2901362fad53fc66b3ca581b423dcb9acfaa275a09a320bc3cbaf1229e7"]}},"duration.js":{"size":342,"offset":"20900948","integrity":{"algorithm":"SHA256","hash":"f23788a3a3f12e54b1547afc46483ad420ed5815fad05a807aacd2268ad69e73","blockSize":4194304,"blocks":["f23788a3a3f12e54b1547afc46483ad420ed5815fad05a807aacd2268ad69e73"]}},"get.js":{"size":728,"offset":"20901290","integrity":{"algorithm":"SHA256","hash":"b1d0a0298fe084ba75373193603cbb7b907b29298262cc4bb8093dfebd0a5894","blockSize":4194304,"blocks":["b1d0a0298fe084ba75373193603cbb7b907b29298262cc4bb8093dfebd0a5894"]}},"humanize.js":{"size":3493,"offset":"20902018","integrity":{"algorithm":"SHA256","hash":"25d61a7b130596a3a40a0e614c2f2e6327e74c4e5594b52910c7c7c4b48d410d","blockSize":4194304,"blocks":["25d61a7b130596a3a40a0e614c2f2e6327e74c4e5594b52910c7c7c4b48d410d"]}},"iso-string.js":{"size":2078,"offset":"20905511","integrity":{"algorithm":"SHA256","hash":"e4e3db2ebf8a98a6ed80a9f6a801fef3682b61ac36eab828f75b6f1efad5704c","blockSize":4194304,"blocks":["e4e3db2ebf8a98a6ed80a9f6a801fef3682b61ac36eab828f75b6f1efad5704c"]}},"prototype.js":{"size":1739,"offset":"20907589","integrity":{"algorithm":"SHA256","hash":"ffb7596e4154ee6f807e6b3f6e0435142b7459fedf74e30523c8dbb7ad247913","blockSize":4194304,"blocks":["ffb7596e4154ee6f807e6b3f6e0435142b7459fedf74e30523c8dbb7ad247913"]}},"valid.js":{"size":1155,"offset":"20909328","integrity":{"algorithm":"SHA256","hash":"8f767e7f9533f79ddc3cdf6dd7ccc9637f62520b650ffa686e3ec4880119fd84","blockSize":4194304,"blocks":["8f767e7f9533f79ddc3cdf6dd7ccc9637f62520b650ffa686e3ec4880119fd84"]}}}},"format":{"files":{"format.js":{"size":2903,"offset":"20910483","integrity":{"algorithm":"SHA256","hash":"57a1134b85bbbee9b4aab562e3d91812fa47f7ea2d10710dd41c8c407a89cec3","blockSize":4194304,"blocks":["57a1134b85bbbee9b4aab562e3d91812fa47f7ea2d10710dd41c8c407a89cec3"]}}}},"locale":{"files":{"base-config.js":{"size":1187,"offset":"20913386","integrity":{"algorithm":"SHA256","hash":"2cd4ceb7d6867170a9ee11e49e92b5782659221068a3f2833ceabff1db20da92","blockSize":4194304,"blocks":["2cd4ceb7d6867170a9ee11e49e92b5782659221068a3f2833ceabff1db20da92"]}},"calendar.js":{"size":442,"offset":"20914573","integrity":{"algorithm":"SHA256","hash":"0ea60bdceb58259d0e288e9539a7adcdd22b10a5a0acd08ae0ce5790492c4170","blockSize":4194304,"blocks":["0ea60bdceb58259d0e288e9539a7adcdd22b10a5a0acd08ae0ce5790492c4170"]}},"constructor.js":{"size":93,"offset":"20915015","integrity":{"algorithm":"SHA256","hash":"ad73c87fed51fed8b8dbd719ac8f07b11729f9cdc3358bd6bcb4325800e19416","blockSize":4194304,"blocks":["ad73c87fed51fed8b8dbd719ac8f07b11729f9cdc3358bd6bcb4325800e19416"]}},"en.js":{"size":989,"offset":"20915108","integrity":{"algorithm":"SHA256","hash":"74380629d9af7eaeaa6e437f79027c0a30a84a765f4962dd6c4400b3a31d7c4d","blockSize":4194304,"blocks":["74380629d9af7eaeaa6e437f79027c0a30a84a765f4962dd6c4400b3a31d7c4d"]}},"formats.js":{"size":876,"offset":"20916097","integrity":{"algorithm":"SHA256","hash":"6193038859b18d6324861dd3c66a9090321c741c30ffb06335cf15615baf4731","blockSize":4194304,"blocks":["6193038859b18d6324861dd3c66a9090321c741c30ffb06335cf15615baf4731"]}},"invalid.js":{"size":113,"offset":"20916973","integrity":{"algorithm":"SHA256","hash":"f932e3fc13624ab618379e92c2436182e83d5330a63551de9cfd606ace6d4df4","blockSize":4194304,"blocks":["f932e3fc13624ab618379e92c2436182e83d5330a63551de9cfd606ace6d4df4"]}},"lists.js":{"size":2188,"offset":"20917086","integrity":{"algorithm":"SHA256","hash":"333f042b694faa7a10f526769fbe60dfed787b928ec03ea564d47b5e4913a48f","blockSize":4194304,"blocks":["333f042b694faa7a10f526769fbe60dfed787b928ec03ea564d47b5e4913a48f"]}},"locale.js":{"size":829,"offset":"20919274","integrity":{"algorithm":"SHA256","hash":"8e89d1d0db607bdfd992a7217b7bfcdff2dddec674622c95827e199f680683e2","blockSize":4194304,"blocks":["8e89d1d0db607bdfd992a7217b7bfcdff2dddec674622c95827e199f680683e2"]}},"locales.js":{"size":7534,"offset":"20920103","integrity":{"algorithm":"SHA256","hash":"66e7a8567fdd8db744691710244b880edc73536262dd160c72ded4c9dfe90433","blockSize":4194304,"blocks":["66e7a8567fdd8db744691710244b880edc73536262dd160c72ded4c9dfe90433"]}},"ordinal.js":{"size":218,"offset":"20927637","integrity":{"algorithm":"SHA256","hash":"cf3e09da5c8926ac7bfec1ab61dfc28fe85e318036c638ead084526e624345c8","blockSize":4194304,"blocks":["cf3e09da5c8926ac7bfec1ab61dfc28fe85e318036c638ead084526e624345c8"]}},"pre-post-format.js":{"size":66,"offset":"20927855","integrity":{"algorithm":"SHA256","hash":"10b2774bb1d8cdb43f2ab2d03345d6ecc28f687bd7338fcfeddfa97b230010ae","blockSize":4194304,"blocks":["10b2774bb1d8cdb43f2ab2d03345d6ecc28f687bd7338fcfeddfa97b230010ae"]}},"prototype.js":{"size":2229,"offset":"20927921","integrity":{"algorithm":"SHA256","hash":"4ad2e31e24f475790433eaa870a875e310e766d95e8eb8d3d1c60e06b0fb6c62","blockSize":4194304,"blocks":["4ad2e31e24f475790433eaa870a875e310e766d95e8eb8d3d1c60e06b0fb6c62"]}},"relative.js":{"size":842,"offset":"20930150","integrity":{"algorithm":"SHA256","hash":"35daa9863f93e2324dd0abd48308d1ccb0290aa3e87de6a905407f2c549d6e94","blockSize":4194304,"blocks":["35daa9863f93e2324dd0abd48308d1ccb0290aa3e87de6a905407f2c549d6e94"]}},"set.js":{"size":1831,"offset":"20930992","integrity":{"algorithm":"SHA256","hash":"b351121689348345bbc4dd795d9153dcb730954ef99100a4b6bd0c46bf45392f","blockSize":4194304,"blocks":["b351121689348345bbc4dd795d9153dcb730954ef99100a4b6bd0c46bf45392f"]}}}},"moment":{"files":{"add-subtract.js":{"size":1869,"offset":"20932823","integrity":{"algorithm":"SHA256","hash":"652e4e315e5b64801f20dbf77f5c528d4f8bf54f0fd44e17b003b450cf85e4cd","blockSize":4194304,"blocks":["652e4e315e5b64801f20dbf77f5c528d4f8bf54f0fd44e17b003b450cf85e4cd"]}},"calendar.js":{"size":1737,"offset":"20934692","integrity":{"algorithm":"SHA256","hash":"31b570850ddd808eea723850b1bc9043911fda49f9a03cb0c4b3079da8df4ff8","blockSize":4194304,"blocks":["31b570850ddd808eea723850b1bc9043911fda49f9a03cb0c4b3079da8df4ff8"]}},"clone.js":{"size":98,"offset":"20936429","integrity":{"algorithm":"SHA256","hash":"89887852a0656e2a32cd6ca3f1eb6e957729f9706ce230cdc8626a756e48e760","blockSize":4194304,"blocks":["89887852a0656e2a32cd6ca3f1eb6e957729f9706ce230cdc8626a756e48e760"]}},"compare.js":{"size":2379,"offset":"20936527","integrity":{"algorithm":"SHA256","hash":"8ddd3195b6c07850356875b2eedbc74cd67fc92ecf4d074243d04e998c7a99bd","blockSize":4194304,"blocks":["8ddd3195b6c07850356875b2eedbc74cd67fc92ecf4d074243d04e998c7a99bd"]}},"constructor.js":{"size":2043,"offset":"20938906","integrity":{"algorithm":"SHA256","hash":"86a11f9b265ea25e692b3454ad2810e70cb71b33361ec118d78f31945b525dc8","blockSize":4194304,"blocks":["86a11f9b265ea25e692b3454ad2810e70cb71b33361ec118d78f31945b525dc8"]}},"creation-data.js":{"size":192,"offset":"20940949","integrity":{"algorithm":"SHA256","hash":"7d11734e55e2c08ad011231b01b5ad5c7dfa6c73a7d2740e8faf5140f7fdc591","blockSize":4194304,"blocks":["7d11734e55e2c08ad011231b01b5ad5c7dfa6c73a7d2740e8faf5140f7fdc591"]}},"diff.js":{"size":2345,"offset":"20941141","integrity":{"algorithm":"SHA256","hash":"7030f73ea182ce22debcdb9ddf531c18b29788d208d9c2ae70302225bc383363","blockSize":4194304,"blocks":["7030f73ea182ce22debcdb9ddf531c18b29788d208d9c2ae70302225bc383363"]}},"format.js":{"size":2340,"offset":"20943486","integrity":{"algorithm":"SHA256","hash":"808b30c201bb1668d09c481f7eb2ffbfe967f1a12d443a867df049ec1eb7e75b","blockSize":4194304,"blocks":["808b30c201bb1668d09c481f7eb2ffbfe967f1a12d443a867df049ec1eb7e75b"]}},"from.js":{"size":609,"offset":"20945826","integrity":{"algorithm":"SHA256","hash":"f840ff91d8f37751bddb245c87487db278b9e10ee9d59af558b538727383b6f4","blockSize":4194304,"blocks":["f840ff91d8f37751bddb245c87487db278b9e10ee9d59af558b538727383b6f4"]}},"get-set.js":{"size":1996,"offset":"20946435","integrity":{"algorithm":"SHA256","hash":"db63cd73e9526056f002171e10040083873998bb2d191e016aea764859734f41","blockSize":4194304,"blocks":["db63cd73e9526056f002171e10040083873998bb2d191e016aea764859734f41"]}},"locale.js":{"size":946,"offset":"20948431","integrity":{"algorithm":"SHA256","hash":"37e90ac837fb700557e90e3e6f916db33ff5362ca3ddba4a3032c14220a8e103","blockSize":4194304,"blocks":["37e90ac837fb700557e90e3e6f916db33ff5362ca3ddba4a3032c14220a8e103"]}},"min-max.js":{"size":1922,"offset":"20949377","integrity":{"algorithm":"SHA256","hash":"10237d61e7052ab405d0beff8c86de3cff4696c4cdcb975a07e814820a3a308e","blockSize":4194304,"blocks":["10237d61e7052ab405d0beff8c86de3cff4696c4cdcb975a07e814820a3a308e"]}},"moment.js":{"size":609,"offset":"20951299","integrity":{"algorithm":"SHA256","hash":"9f29bdda0fe02b37791794d7343892bd3c26b411594e034f3b4079d33eeb3262","blockSize":4194304,"blocks":["9f29bdda0fe02b37791794d7343892bd3c26b411594e034f3b4079d33eeb3262"]}},"now.js":{"size":82,"offset":"20951908","integrity":{"algorithm":"SHA256","hash":"f6f424c0af9a3eb379f3cf93dbe2c03a82b88254d60a5434d46a835356c486e5","blockSize":4194304,"blocks":["f6f424c0af9a3eb379f3cf93dbe2c03a82b88254d60a5434d46a835356c486e5"]}},"prototype.js":{"size":5511,"offset":"20951990","integrity":{"algorithm":"SHA256","hash":"6338ea65d7c0065d0f44e712ec373930741fffe6720b0e9c8094f2b52b1c084f","blockSize":4194304,"blocks":["6338ea65d7c0065d0f44e712ec373930741fffe6720b0e9c8094f2b52b1c084f"]}},"start-end-of.js":{"size":4819,"offset":"20957501","integrity":{"algorithm":"SHA256","hash":"8854fff89cfa8d0ba411b3878a13a26254efd2545d5862b06ce47633fb1b86b5","blockSize":4194304,"blocks":["8854fff89cfa8d0ba411b3878a13a26254efd2545d5862b06ce47633fb1b86b5"]}},"to-type.js":{"size":834,"offset":"20962320","integrity":{"algorithm":"SHA256","hash":"f2f59e330a742f04aa3017911ca771a308a7d1201534014acd2f95270993086f","blockSize":4194304,"blocks":["f2f59e330a742f04aa3017911ca771a308a7d1201534014acd2f95270993086f"]}},"to.js":{"size":603,"offset":"20963154","integrity":{"algorithm":"SHA256","hash":"9933983b131deaa91b5232c57bf476378fbb875a9d20edbea1ff254bd78725e7","blockSize":4194304,"blocks":["9933983b131deaa91b5232c57bf476378fbb875a9d20edbea1ff254bd78725e7"]}},"valid.js":{"size":364,"offset":"20963757","integrity":{"algorithm":"SHA256","hash":"bdb0142381e10910a4df205c6360ef014a9e57085893c49ad7699c3f256bc3c6","blockSize":4194304,"blocks":["bdb0142381e10910a4df205c6360ef014a9e57085893c49ad7699c3f256bc3c6"]}}}},"parse":{"files":{"regex.js":{"size":2532,"offset":"20964121","integrity":{"algorithm":"SHA256","hash":"03386d83b18cc97084880a33a3e477b76673df69b298beb8781dd098e16006fc","blockSize":4194304,"blocks":["03386d83b18cc97084880a33a3e477b76673df69b298beb8781dd098e16006fc"]}},"token.js":{"size":915,"offset":"20966653","integrity":{"algorithm":"SHA256","hash":"f35a027118ad10582626078384c1edda46dffad2a18d236f8be2288fbe7b6973","blockSize":4194304,"blocks":["f35a027118ad10582626078384c1edda46dffad2a18d236f8be2288fbe7b6973"]}}}},"units":{"files":{"aliases.js":{"size":809,"offset":"20967568","integrity":{"algorithm":"SHA256","hash":"a9d35956a8872f5002cee7e73975ac590a51fa26d8ff93789335854074c95f09","blockSize":4194304,"blocks":["a9d35956a8872f5002cee7e73975ac590a51fa26d8ff93789335854074c95f09"]}},"constants.js":{"size":148,"offset":"20968377","integrity":{"algorithm":"SHA256","hash":"d010aedbb9dcf9e4fdef0cb5813b2a0dacfe28a90ba7df29ce47c914ceb36bdb","blockSize":4194304,"blocks":["d010aedbb9dcf9e4fdef0cb5813b2a0dacfe28a90ba7df29ce47c914ceb36bdb"]}},"day-of-month.js":{"size":1065,"offset":"20968525","integrity":{"algorithm":"SHA256","hash":"9f2c3df88da31e32e316774d0b70824dbdda773ae3c7d06ec5e788cc2dfd7d1c","blockSize":4194304,"blocks":["9f2c3df88da31e32e316774d0b70824dbdda773ae3c7d06ec5e788cc2dfd7d1c"]}},"day-of-week.js":{"size":12910,"offset":"20969590","integrity":{"algorithm":"SHA256","hash":"ec36da0cac42b9cea6333c669965686d2b91c8b9dc680a7b105e91ee5cd4a3da","blockSize":4194304,"blocks":["ec36da0cac42b9cea6333c669965686d2b91c8b9dc680a7b105e91ee5cd4a3da"]}},"day-of-year.js":{"size":920,"offset":"20982500","integrity":{"algorithm":"SHA256","hash":"6b29d69e636e18cc67780467062258a4fa2730b947264645c09f71e76f72c5fd","blockSize":4194304,"blocks":["6b29d69e636e18cc67780467062258a4fa2730b947264645c09f71e76f72c5fd"]}},"era.js":{"size":7964,"offset":"20983420","integrity":{"algorithm":"SHA256","hash":"05bb4827620516c3ca2271b54319ccf1b38b32993887cd5f2d8bd99bb82f9811","blockSize":4194304,"blocks":["05bb4827620516c3ca2271b54319ccf1b38b32993887cd5f2d8bd99bb82f9811"]}},"hour.js":{"size":4475,"offset":"20991384","integrity":{"algorithm":"SHA256","hash":"7678731977e09b01eab4d95c271183998ccbd8a05cdd9237cb59c0a3ad8886c1","blockSize":4194304,"blocks":["7678731977e09b01eab4d95c271183998ccbd8a05cdd9237cb59c0a3ad8886c1"]}},"millisecond.js":{"size":1870,"offset":"20995859","integrity":{"algorithm":"SHA256","hash":"a3ff5dd3b50ad930fd1d294e09c3286595f6113108c59b540a01cb3b1b166e6d","blockSize":4194304,"blocks":["a3ff5dd3b50ad930fd1d294e09c3286595f6113108c59b540a01cb3b1b166e6d"]}},"minute.js":{"size":679,"offset":"20997729","integrity":{"algorithm":"SHA256","hash":"e595754897d59be96bd94028e74920c00c80d9747db66edf52a008301b21a5d2","blockSize":4194304,"blocks":["e595754897d59be96bd94028e74920c00c80d9747db66edf52a008301b21a5d2"]}},"month.js":{"size":10011,"offset":"20998408","integrity":{"algorithm":"SHA256","hash":"df2fecc9a6b6b6998d3b57a4788a2493da22b4eddd7da321bac7371a8c21f781","blockSize":4194304,"blocks":["df2fecc9a6b6b6998d3b57a4788a2493da22b4eddd7da321bac7371a8c21f781"]}},"offset.js":{"size":7070,"offset":"21008419","integrity":{"algorithm":"SHA256","hash":"69aeb164101f4fe6d892e51a32849f1e88c0ab9ffbcbb6c89f2f67d11f50e6c2","blockSize":4194304,"blocks":["69aeb164101f4fe6d892e51a32849f1e88c0ab9ffbcbb6c89f2f67d11f50e6c2"]}},"priorities.js":{"size":480,"offset":"21015489","integrity":{"algorithm":"SHA256","hash":"e9892e94e1b33a68e9c04452a91e665a04d43bfbd04d24f12801511adfdf8a29","blockSize":4194304,"blocks":["e9892e94e1b33a68e9c04452a91e665a04d43bfbd04d24f12801511adfdf8a29"]}},"quarter.js":{"size":780,"offset":"21015969","integrity":{"algorithm":"SHA256","hash":"bd1da757673386bc5d9df4bdcf86db2bac504e4b7ee8228319fe765359443666","blockSize":4194304,"blocks":["bd1da757673386bc5d9df4bdcf86db2bac504e4b7ee8228319fe765359443666"]}},"second.js":{"size":679,"offset":"21016749","integrity":{"algorithm":"SHA256","hash":"c1de075eb450e97fa5759fac32c8421f381a1af7325ed0648fb189489bf46672","blockSize":4194304,"blocks":["c1de075eb450e97fa5759fac32c8421f381a1af7325ed0648fb189489bf46672"]}},"timestamp.js":{"size":590,"offset":"21017428","integrity":{"algorithm":"SHA256","hash":"c5a098231e38b7e2d4661ffe539a9600549647ef8daf25126a39ea7498560007","blockSize":4194304,"blocks":["c5a098231e38b7e2d4661ffe539a9600549647ef8daf25126a39ea7498560007"]}},"timezone.js":{"size":325,"offset":"21018018","integrity":{"algorithm":"SHA256","hash":"49bf5d0d3ae4a0629edbbe9561af7dff47564ac6714e2a99cbd1ea6b4b827365","blockSize":4194304,"blocks":["49bf5d0d3ae4a0629edbbe9561af7dff47564ac6714e2a99cbd1ea6b4b827365"]}},"units.js":{"size":404,"offset":"21018343","integrity":{"algorithm":"SHA256","hash":"a955499f9dfc8b7748bb44bac2d99f98a638e440a96db6795dee355eed6e8389","blockSize":4194304,"blocks":["a955499f9dfc8b7748bb44bac2d99f98a638e440a96db6795dee355eed6e8389"]}},"week-calendar-utils.js":{"size":2107,"offset":"21018747","integrity":{"algorithm":"SHA256","hash":"3199c233ab75fe8032321616ad0b762b855a064a73c86062fa329c65911e38c0","blockSize":4194304,"blocks":["3199c233ab75fe8032321616ad0b762b855a064a73c86062fa329c65911e38c0"]}},"week-year.js":{"size":3483,"offset":"21020854","integrity":{"algorithm":"SHA256","hash":"5405ba152b0c1cd962363755021a62f5265625c36532bd875e447dc06467b579","blockSize":4194304,"blocks":["5405ba152b0c1cd962363755021a62f5265625c36532bd875e447dc06467b579"]}},"week.js":{"size":1664,"offset":"21024337","integrity":{"algorithm":"SHA256","hash":"c0cfe21b60905390290ec3d6fe6b8572bae571a458286046e13a4f0ebfc04b08","blockSize":4194304,"blocks":["c0cfe21b60905390290ec3d6fe6b8572bae571a458286046e13a4f0ebfc04b08"]}},"year.js":{"size":2001,"offset":"21026001","integrity":{"algorithm":"SHA256","hash":"4efe5e44038ba5009d9acda154f137a157ab30510c6c72b59223a7744faed11c","blockSize":4194304,"blocks":["4efe5e44038ba5009d9acda154f137a157ab30510c6c72b59223a7744faed11c"]}}}},"utils":{"files":{"abs-ceil.js":{"size":154,"offset":"21028002","integrity":{"algorithm":"SHA256","hash":"d9e676e01610f301a805394cb9f4010b899943d514257213dfcd670838b69313","blockSize":4194304,"blocks":["d9e676e01610f301a805394cb9f4010b899943d514257213dfcd670838b69313"]}},"abs-floor.js":{"size":179,"offset":"21028156","integrity":{"algorithm":"SHA256","hash":"d725f49259deb0789facd20d0f92520f92fc3b5f1a1f0c317756261a0e7f5198","blockSize":4194304,"blocks":["d725f49259deb0789facd20d0f92520f92fc3b5f1a1f0c317756261a0e7f5198"]}},"abs-round.js":{"size":166,"offset":"21028335","integrity":{"algorithm":"SHA256","hash":"543c51e538b580910db499bded36e0d684478696de1ac1fbaeb7315060b6afc7","blockSize":4194304,"blocks":["543c51e538b580910db499bded36e0d684478696de1ac1fbaeb7315060b6afc7"]}},"compare-arrays.js":{"size":553,"offset":"21028501","integrity":{"algorithm":"SHA256","hash":"9df50bfd820c642f0d45c0c9551540418c3950936021a4512da27513624579e2","blockSize":4194304,"blocks":["9df50bfd820c642f0d45c0c9551540418c3950936021a4512da27513624579e2"]}},"defaults.js":{"size":203,"offset":"21029054","integrity":{"algorithm":"SHA256","hash":"4b91a8cb1b3155d62eb18f28b6570a39cf0e36da612a5d3d7a74d236104e2123","blockSize":4194304,"blocks":["4b91a8cb1b3155d62eb18f28b6570a39cf0e36da612a5d3d7a74d236104e2123"]}},"deprecate.js":{"size":1913,"offset":"21029257","integrity":{"algorithm":"SHA256","hash":"6408d3af5f6fb6d2c905cf5db189fd406bf3fdd707d25c223d090d1782b5ea55","blockSize":4194304,"blocks":["6408d3af5f6fb6d2c905cf5db189fd406bf3fdd707d25c223d090d1782b5ea55"]}},"extend.js":{"size":345,"offset":"21031170","integrity":{"algorithm":"SHA256","hash":"c50fc6547a47313246ff4ca7348b5bbe6370ff7f94be38f8301ce1d2f0bbc263","blockSize":4194304,"blocks":["c50fc6547a47313246ff4ca7348b5bbe6370ff7f94be38f8301ce1d2f0bbc263"]}},"has-own-prop.js":{"size":100,"offset":"21031515","integrity":{"algorithm":"SHA256","hash":"a39601540adec45a14545a9a86e6b0bbc8989c706583fdd579896f25b7efc3f6","blockSize":4194304,"blocks":["a39601540adec45a14545a9a86e6b0bbc8989c706583fdd579896f25b7efc3f6"]}},"hooks.js":{"size":296,"offset":"21031615","integrity":{"algorithm":"SHA256","hash":"e990091b29bd5c56b03c0f36ad61dd801b99d8897fe24ddd16079128016458dd","blockSize":4194304,"blocks":["e990091b29bd5c56b03c0f36ad61dd801b99d8897fe24ddd16079128016458dd"]}},"index-of.js":{"size":342,"offset":"21031911","integrity":{"algorithm":"SHA256","hash":"c8511c4d1fc81adee5187b3756f8f7d439973b62982be9f0cf2d77fc97f5d325","blockSize":4194304,"blocks":["c8511c4d1fc81adee5187b3756f8f7d439973b62982be9f0cf2d77fc97f5d325"]}},"is-array.js":{"size":164,"offset":"21032253","integrity":{"algorithm":"SHA256","hash":"1d622676e225b34d5862dffe5edf22749658a844e460164754c58c26c5d3e5f3","blockSize":4194304,"blocks":["1d622676e225b34d5862dffe5edf22749658a844e460164754c58c26c5d3e5f3"]}},"is-calendar-spec.js":{"size":670,"offset":"21032417","integrity":{"algorithm":"SHA256","hash":"3e6a1ce371392e8ae22fdb17e47200a0da9040e6b7aaeb358b8b0340c7c75f62","blockSize":4194304,"blocks":["3e6a1ce371392e8ae22fdb17e47200a0da9040e6b7aaeb358b8b0340c7c75f62"]}},"is-date.js":{"size":161,"offset":"21033087","integrity":{"algorithm":"SHA256","hash":"38ca8b1e7749b001597b88fc570117916b164b81aa9728a1cb10a588d45ce350","blockSize":4194304,"blocks":["38ca8b1e7749b001597b88fc570117916b164b81aa9728a1cb10a588d45ce350"]}},"is-function.js":{"size":210,"offset":"21033248","integrity":{"algorithm":"SHA256","hash":"e3b084459109014d1a75359d6799a175d5b28017c38b27edca320249c802feb1","blockSize":4194304,"blocks":["e3b084459109014d1a75359d6799a175d5b28017c38b27edca320249c802feb1"]}},"is-leap-year.js":{"size":106,"offset":"21033458","integrity":{"algorithm":"SHA256","hash":"2f0ebd5dbed6264a348ac7be6c48d15bccce57dc5e335a85239aafcfa479bbf3","blockSize":4194304,"blocks":["2f0ebd5dbed6264a348ac7be6c48d15bccce57dc5e335a85239aafcfa479bbf3"]}},"is-moment-input.js":{"size":1953,"offset":"21033564","integrity":{"algorithm":"SHA256","hash":"4d14a68a86200bf9c4772155c003e6815428ba2726d6e5ed49484963fe133138","blockSize":4194304,"blocks":["4d14a68a86200bf9c4772155c003e6815428ba2726d6e5ed49484963fe133138"]}},"is-number.js":{"size":169,"offset":"21035517","integrity":{"algorithm":"SHA256","hash":"147fdfea7e2b8f3530f2bb98991dafaab90f09a28557c158379f3e7f3cbfc822","blockSize":4194304,"blocks":["147fdfea7e2b8f3530f2bb98991dafaab90f09a28557c158379f3e7f3cbfc822"]}},"is-object-empty.js":{"size":360,"offset":"21035686","integrity":{"algorithm":"SHA256","hash":"a2798dac5494df484c3e8d24c22758b64853f21e55b90a30b068ea33969559cc","blockSize":4194304,"blocks":["a2798dac5494df484c3e8d24c22758b64853f21e55b90a30b068ea33969559cc"]}},"is-object.js":{"size":246,"offset":"21036046","integrity":{"algorithm":"SHA256","hash":"9a663e2f73002dce5add82647cd3a9ce90e2acdfcdc1144dac1fab129b8a4c28","blockSize":4194304,"blocks":["9a663e2f73002dce5add82647cd3a9ce90e2acdfcdc1144dac1fab129b8a4c28"]}},"is-string.js":{"size":109,"offset":"21036292","integrity":{"algorithm":"SHA256","hash":"d37bedb2835e5022fa4e7e3fc52ad9c0603b8f00897f108a3b0d16346a82acd8","blockSize":4194304,"blocks":["d37bedb2835e5022fa4e7e3fc52ad9c0603b8f00897f108a3b0d16346a82acd8"]}},"is-undefined.js":{"size":76,"offset":"21036401","integrity":{"algorithm":"SHA256","hash":"4a90bcc6cb242283124049d68dcace3896481cec3114bc9ad62eddc312d7d116","blockSize":4194304,"blocks":["4a90bcc6cb242283124049d68dcace3896481cec3114bc9ad62eddc312d7d116"]}},"keys.js":{"size":344,"offset":"21036477","integrity":{"algorithm":"SHA256","hash":"982be0c56d0728e8b9860c332d8ed09f166bf07af8efd66dba23cc98a14d35e3","blockSize":4194304,"blocks":["982be0c56d0728e8b9860c332d8ed09f166bf07af8efd66dba23cc98a14d35e3"]}},"map.js":{"size":164,"offset":"21036821","integrity":{"algorithm":"SHA256","hash":"ad252eef16bff4d45ea87f56a3608aaa7a324d63498372154cae2908738e8baa","blockSize":4194304,"blocks":["ad252eef16bff4d45ea87f56a3608aaa7a324d63498372154cae2908738e8baa"]}},"mod.js":{"size":68,"offset":"21036985","integrity":{"algorithm":"SHA256","hash":"24a639c80787b07e39dcb3fe3e6ee13e14903fa6a7d1cf252c3c63c9f7aeb9b1","blockSize":4194304,"blocks":["24a639c80787b07e39dcb3fe3e6ee13e14903fa6a7d1cf252c3c63c9f7aeb9b1"]}},"some.js":{"size":394,"offset":"21037053","integrity":{"algorithm":"SHA256","hash":"a0f14d7eb6f26ca1be2024b191feb2f9b552a33f7571043d8cb7a403c0bbea20","blockSize":4194304,"blocks":["a0f14d7eb6f26ca1be2024b191feb2f9b552a33f7571043d8cb7a403c0bbea20"]}},"to-int.js":{"size":282,"offset":"21037447","integrity":{"algorithm":"SHA256","hash":"654e99362f5e8743d31fdd593d05ce7ea86631410706c44581f2c5dc06f5f00a","blockSize":4194304,"blocks":["654e99362f5e8743d31fdd593d05ce7ea86631410706c44581f2c5dc06f5f00a"]}},"zero-fill.js":{"size":352,"offset":"21037729","integrity":{"algorithm":"SHA256","hash":"f61b75ca7910c00d5539bf360542962391111e3705f2cc81eda85ff6555abd3e","blockSize":4194304,"blocks":["f61b75ca7910c00d5539bf360542962391111e3705f2cc81eda85ff6555abd3e"]}}}}}},"locale":{"files":{"af.js":{"size":2149,"offset":"21038081","integrity":{"algorithm":"SHA256","hash":"203e2a88aa3c7d1ac73d73af5f05f45d38de5e4ab116756f9a4a5eb4edb938d5","blockSize":4194304,"blocks":["203e2a88aa3c7d1ac73d73af5f05f45d38de5e4ab116756f9a4a5eb4edb938d5"]}},"ar-dz.js":{"size":4449,"offset":"21040230","integrity":{"algorithm":"SHA256","hash":"9ca151d5d32d2aee2513b46f4563af75317cb6bc80c84a2cdd036d3b0583fbea","blockSize":4194304,"blocks":["9ca151d5d32d2aee2513b46f4563af75317cb6bc80c84a2cdd036d3b0583fbea"]}},"ar-kw.js":{"size":1918,"offset":"21044679","integrity":{"algorithm":"SHA256","hash":"873d46e039832ce736b63491da91197485b57ead3d54365aa18e39d4797b0e1d","blockSize":4194304,"blocks":["873d46e039832ce736b63491da91197485b57ead3d54365aa18e39d4797b0e1d"]}},"ar-ly.js":{"size":4648,"offset":"21046597","integrity":{"algorithm":"SHA256","hash":"573207edb2052e1e5f548fc64b4e8e9efb448ba06d2ff7cae26f7c81aec2ac08","blockSize":4194304,"blocks":["573207edb2052e1e5f548fc64b4e8e9efb448ba06d2ff7cae26f7c81aec2ac08"]}},"ar-ma.js":{"size":1973,"offset":"21051245","integrity":{"algorithm":"SHA256","hash":"8871ae810261dc67a09c80578a5e0212bb4ddfd6a1c11c754f3b53bb0909d50d","blockSize":4194304,"blocks":["8871ae810261dc67a09c80578a5e0212bb4ddfd6a1c11c754f3b53bb0909d50d"]}},"ar-sa.js":{"size":3026,"offset":"21053218","integrity":{"algorithm":"SHA256","hash":"ebcd2bebd612866a6d4cff5a9578bd497b38ff8e6bae5df2018fbab7a8fdec87","blockSize":4194304,"blocks":["ebcd2bebd612866a6d4cff5a9578bd497b38ff8e6bae5df2018fbab7a8fdec87"]}},"ar-tn.js":{"size":1920,"offset":"21056244","integrity":{"algorithm":"SHA256","hash":"2a79714abcd10c72d4cbb465e67d2720b2660f366cfd859848de8ab33ebb5344","blockSize":4194304,"blocks":["2a79714abcd10c72d4cbb465e67d2720b2660f366cfd859848de8ab33ebb5344"]}},"ar.js":{"size":5072,"offset":"21058164","integrity":{"algorithm":"SHA256","hash":"e7684ee61213f2d7fee0269e0a49b42e3a82f391193cf469ab980842cb6cf029","blockSize":4194304,"blocks":["e7684ee61213f2d7fee0269e0a49b42e3a82f391193cf469ab980842cb6cf029"]}},"az.js":{"size":2830,"offset":"21063236","integrity":{"algorithm":"SHA256","hash":"0fc3268d1400e35a05524c582dbf12f62ee037e48dfeb47cddbd39046bce59c8","blockSize":4194304,"blocks":["0fc3268d1400e35a05524c582dbf12f62ee037e48dfeb47cddbd39046bce59c8"]}},"be.js":{"size":5120,"offset":"21066066","integrity":{"algorithm":"SHA256","hash":"b383fb1974896b70dbb4f6d035f8d967f25d49d802ee43079e9738b287943b27","blockSize":4194304,"blocks":["b383fb1974896b70dbb4f6d035f8d967f25d49d802ee43079e9738b287943b27"]}},"bg.js":{"size":2955,"offset":"21071186","integrity":{"algorithm":"SHA256","hash":"1d9c3b15eaabab63bc4e6bea7f1f62dd0c04c97615e3af2c91bd9bfccd9dca93","blockSize":4194304,"blocks":["1d9c3b15eaabab63bc4e6bea7f1f62dd0c04c97615e3af2c91bd9bfccd9dca93"]}},"bm.js":{"size":1784,"offset":"21074141","integrity":{"algorithm":"SHA256","hash":"d264e9178a3e775007241f9d464ee7bbe42e53ee105e203ddcfb1c24b061eaa3","blockSize":4194304,"blocks":["d264e9178a3e775007241f9d464ee7bbe42e53ee105e203ddcfb1c24b061eaa3"]}},"bn-bd.js":{"size":4333,"offset":"21075925","integrity":{"algorithm":"SHA256","hash":"b1dbd5e7be9c3f3e099a27b726954b9227425b1a2a777e608b6b4966c257a447","blockSize":4194304,"blocks":["b1dbd5e7be9c3f3e099a27b726954b9227425b1a2a777e608b6b4966c257a447"]}},"bn.js":{"size":3882,"offset":"21080258","integrity":{"algorithm":"SHA256","hash":"00a1ef6846681f044db7efda0c1412f3c1232031411ec6575a1ef33fd0c1ae58","blockSize":4194304,"blocks":["00a1ef6846681f044db7efda0c1412f3c1232031411ec6575a1ef33fd0c1ae58"]}},"bo.js":{"size":4367,"offset":"21084140","integrity":{"algorithm":"SHA256","hash":"edf57a9d0920e341d488bac6f158a2ef76aafbc2dcefa3d3e25142c3f92be2a0","blockSize":4194304,"blocks":["edf57a9d0920e341d488bac6f158a2ef76aafbc2dcefa3d3e25142c3f92be2a0"]}},"br.js":{"size":4520,"offset":"21088507","integrity":{"algorithm":"SHA256","hash":"b43c8f5650b88bda3afd7e0ac6a456c8376c598d71303d55a612ec3acf03d28f","blockSize":4194304,"blocks":["b43c8f5650b88bda3afd7e0ac6a456c8376c598d71303d55a612ec3acf03d28f"]}},"bs.js":{"size":4459,"offset":"21093027","integrity":{"algorithm":"SHA256","hash":"79cc13629c2920eb46bedc8bf0745345652637688dc9068f30d328eee1f28802","blockSize":4194304,"blocks":["79cc13629c2920eb46bedc8bf0745345652637688dc9068f30d328eee1f28802"]}},"ca.js":{"size":2979,"offset":"21097486","integrity":{"algorithm":"SHA256","hash":"534f8a53fbe7884274b26618dbcb01efe6e2a46b2de6eae2b1cfa1e5b69f7efd","blockSize":4194304,"blocks":["534f8a53fbe7884274b26618dbcb01efe6e2a46b2de6eae2b1cfa1e5b69f7efd"]}},"cs.js":{"size":6491,"offset":"21100465","integrity":{"algorithm":"SHA256","hash":"9ca6ec4f27ca8d95732176ccc533bddd904b7145a297e88226d2f4db6c6c3728","blockSize":4194304,"blocks":["9ca6ec4f27ca8d95732176ccc533bddd904b7145a297e88226d2f4db6c6c3728"]}},"cv.js":{"size":2325,"offset":"21106956","integrity":{"algorithm":"SHA256","hash":"9b16a270c2f5d80d3c53a5a2f8802148b6ca19632da3b771d8b521047e3b8a56","blockSize":4194304,"blocks":["9b16a270c2f5d80d3c53a5a2f8802148b6ca19632da3b771d8b521047e3b8a56"]}},"cy.js":{"size":2818,"offset":"21109281","integrity":{"algorithm":"SHA256","hash":"9d8540891fb02d923ead7c1d7c7c07ad4917bdef96d9b317298c9ff6ae6db62a","blockSize":4194304,"blocks":["9d8540891fb02d923ead7c1d7c7c07ad4917bdef96d9b317298c9ff6ae6db62a"]}},"da.js":{"size":1629,"offset":"21112099","integrity":{"algorithm":"SHA256","hash":"e93cbb4f32c15585ade43825f4bafb4eb97567a510756c5b54f2d976d46b40c9","blockSize":4194304,"blocks":["e93cbb4f32c15585ade43825f4bafb4eb97567a510756c5b54f2d976d46b40c9"]}},"de-at.js":{"size":2625,"offset":"21113728","integrity":{"algorithm":"SHA256","hash":"5d2fc11b916d9c5038b3f5d2ba43a8f87c97ca499ad07b182943a032c4a39a1e","blockSize":4194304,"blocks":["5d2fc11b916d9c5038b3f5d2ba43a8f87c97ca499ad07b182943a032c4a39a1e"]}},"de-ch.js":{"size":2553,"offset":"21116353","integrity":{"algorithm":"SHA256","hash":"4ddb7168a280d8755b2f1ad9e0de9711c63bf879a7a9ec0bfd663d4ab914109e","blockSize":4194304,"blocks":["4ddb7168a280d8755b2f1ad9e0de9711c63bf879a7a9ec0bfd663d4ab914109e"]}},"de.js":{"size":2552,"offset":"21118906","integrity":{"algorithm":"SHA256","hash":"69601f5179bf0f99037241aa4eb99904493dbbb1a761e81e5202c7d2cc3b4949","blockSize":4194304,"blocks":["69601f5179bf0f99037241aa4eb99904493dbbb1a761e81e5202c7d2cc3b4949"]}},"dv.js":{"size":2464,"offset":"21121458","integrity":{"algorithm":"SHA256","hash":"a143e02b80550dbc90713796bd0094942a0dd58d23449b71e5846d86c9bb4224","blockSize":4194304,"blocks":["a143e02b80550dbc90713796bd0094942a0dd58d23449b71e5846d86c9bb4224"]}},"el.js":{"size":3845,"offset":"21123922","integrity":{"algorithm":"SHA256","hash":"bea4f7310aaf7de554c95aa7b41dd3ea7432cd7f72a13311574ecfc638db7a6d","blockSize":4194304,"blocks":["bea4f7310aaf7de554c95aa7b41dd3ea7432cd7f72a13311574ecfc638db7a6d"]}},"en-au.js":{"size":2029,"offset":"21127767","integrity":{"algorithm":"SHA256","hash":"409391b33bc5fc1fcb61b9fee48bda0e3608f15323fc06988ae880eacf02c800","blockSize":4194304,"blocks":["409391b33bc5fc1fcb61b9fee48bda0e3608f15323fc06988ae880eacf02c800"]}},"en-ca.js":{"size":1878,"offset":"21129796","integrity":{"algorithm":"SHA256","hash":"cf4ec7fabf11593a398075b638bb1dac307477ef819a106825d3b1709d2a8ff7","blockSize":4194304,"blocks":["cf4ec7fabf11593a398075b638bb1dac307477ef819a106825d3b1709d2a8ff7"]}},"en-gb.js":{"size":2035,"offset":"21131674","integrity":{"algorithm":"SHA256","hash":"c652887658c284f3de712fca5bc0c12cc2d9fc71a03691a8bf199aac62ae4f02","blockSize":4194304,"blocks":["c652887658c284f3de712fca5bc0c12cc2d9fc71a03691a8bf199aac62ae4f02"]}},"en-ie.js":{"size":2033,"offset":"21133709","integrity":{"algorithm":"SHA256","hash":"21678eb92796b3576c96dca63b3ca875a9e283f06dc56d3b00b29f2867b14435","blockSize":4194304,"blocks":["21678eb92796b3576c96dca63b3ca875a9e283f06dc56d3b00b29f2867b14435"]}},"en-il.js":{"size":1871,"offset":"21135742","integrity":{"algorithm":"SHA256","hash":"2baf5467136c2b16cba796109c5311bd81b031a0b98950121b2134f123afeb9b","blockSize":4194304,"blocks":["2baf5467136c2b16cba796109c5311bd81b031a0b98950121b2134f123afeb9b"]}},"en-in.js":{"size":2029,"offset":"21137613","integrity":{"algorithm":"SHA256","hash":"e04b56e50944516aafa6a3084988ecc8e4b5191e13ad2bb3c3761083bea6de4b","blockSize":4194304,"blocks":["e04b56e50944516aafa6a3084988ecc8e4b5191e13ad2bb3c3761083bea6de4b"]}},"en-nz.js":{"size":2038,"offset":"21139642","integrity":{"algorithm":"SHA256","hash":"aab44ef9efcd9351aa2a9943da707f2f5ea3d6a9fc55c919aecd70422e738d69","blockSize":4194304,"blocks":["aab44ef9efcd9351aa2a9943da707f2f5ea3d6a9fc55c919aecd70422e738d69"]}},"en-sg.js":{"size":2047,"offset":"21141680","integrity":{"algorithm":"SHA256","hash":"52872f32f2a3f2d794ec5ee8bad839b42300d646eac2b9540d454be6143dc068","blockSize":4194304,"blocks":["52872f32f2a3f2d794ec5ee8bad839b42300d646eac2b9540d454be6143dc068"]}},"eo.js":{"size":2338,"offset":"21143727","integrity":{"algorithm":"SHA256","hash":"443218cf6980aef8a1b3237fc18f916de2b8c84246b61af41dbc3eb34edf4817","blockSize":4194304,"blocks":["443218cf6980aef8a1b3237fc18f916de2b8c84246b61af41dbc3eb34edf4817"]}},"es-do.js":{"size":3401,"offset":"21146065","integrity":{"algorithm":"SHA256","hash":"afd91108904c97c550dc10f8866c929d1e76fd66b4a78a703ec12d9dd70da842","blockSize":4194304,"blocks":["afd91108904c97c550dc10f8866c929d1e76fd66b4a78a703ec12d9dd70da842"]}},"es-mx.js":{"size":3470,"offset":"21149466","integrity":{"algorithm":"SHA256","hash":"54d85712f77ae9eed93db050223775bc9ce493ce75e34c7b7f9e8badbefe6e47","blockSize":4194304,"blocks":["54d85712f77ae9eed93db050223775bc9ce493ce75e34c7b7f9e8badbefe6e47"]}},"es-us.js":{"size":3498,"offset":"21152936","integrity":{"algorithm":"SHA256","hash":"0a7aa430f1de79bc2478d6169211f362b03bd5b7ba3f3e4b9955d28858cd46b3","blockSize":4194304,"blocks":["0a7aa430f1de79bc2478d6169211f362b03bd5b7ba3f3e4b9955d28858cd46b3"]}},"es.js":{"size":3458,"offset":"21156434","integrity":{"algorithm":"SHA256","hash":"47ff8445d2e4f6ee93b576f1eaed22e4a205da84ca2309382719fd8822c525c3","blockSize":4194304,"blocks":["47ff8445d2e4f6ee93b576f1eaed22e4a205da84ca2309382719fd8822c525c3"]}},"et.js":{"size":2621,"offset":"21159892","integrity":{"algorithm":"SHA256","hash":"8767175a6a99c6e676ee491d7bac10722b97639df5e63664853785011d217ce3","blockSize":4194304,"blocks":["8767175a6a99c6e676ee491d7bac10722b97639df5e63664853785011d217ce3"]}},"eu.js":{"size":1932,"offset":"21162513","integrity":{"algorithm":"SHA256","hash":"c41efd8928fc6d0442a4d1b82f4c73f311ec49c32beb8a1d206a33a312d3e67e","blockSize":4194304,"blocks":["c41efd8928fc6d0442a4d1b82f4c73f311ec49c32beb8a1d206a33a312d3e67e"]}},"fa.js":{"size":3182,"offset":"21164445","integrity":{"algorithm":"SHA256","hash":"c7d3a8afce5c5888b274e1aa92b324e1eb325de6da24d37307f72c4b62e83dab","blockSize":4194304,"blocks":["c7d3a8afce5c5888b274e1aa92b324e1eb325de6da24d37307f72c4b62e83dab"]}},"fi.js":{"size":3584,"offset":"21167627","integrity":{"algorithm":"SHA256","hash":"8c56d110f59432c7670a7ee3bf1df36cf71d92d85718b3568479f6ed3772a5c9","blockSize":4194304,"blocks":["8c56d110f59432c7670a7ee3bf1df36cf71d92d85718b3568479f6ed3772a5c9"]}},"fil.js":{"size":1776,"offset":"21171211","integrity":{"algorithm":"SHA256","hash":"5cf1f1e21ff82efdc535e223a41e62e135ffb77a55880dfb0c1e3583e12dbab0","blockSize":4194304,"blocks":["5cf1f1e21ff82efdc535e223a41e62e135ffb77a55880dfb0c1e3583e12dbab0"]}},"fo.js":{"size":1756,"offset":"21172987","integrity":{"algorithm":"SHA256","hash":"f9e6466e5b8636dd132ccec56b02cfeea60b9b8a1f58885aff260c1afb96e584","blockSize":4194304,"blocks":["f9e6466e5b8636dd132ccec56b02cfeea60b9b8a1f58885aff260c1afb96e584"]}},"fr-ca.js":{"size":2088,"offset":"21174743","integrity":{"algorithm":"SHA256","hash":"9bb7fa4937b00a93b0d9b7b718d7c999f953467bd85cc298a628bf4468bf1daa","blockSize":4194304,"blocks":["9bb7fa4937b00a93b0d9b7b718d7c999f953467bd85cc298a628bf4468bf1daa"]}},"fr-ch.js":{"size":2247,"offset":"21176831","integrity":{"algorithm":"SHA256","hash":"4e3eb7082a4b196dda2b6657edcb30b0656b88f214e59708076c9eee5dc4690b","blockSize":4194304,"blocks":["4e3eb7082a4b196dda2b6657edcb30b0656b88f214e59708076c9eee5dc4690b"]}},"fr.js":{"size":3431,"offset":"21179078","integrity":{"algorithm":"SHA256","hash":"a658fc9cf912c7ebce1ecc41b4a209b5c442cca0f979de5bd8d55bca3a518c56","blockSize":4194304,"blocks":["a658fc9cf912c7ebce1ecc41b4a209b5c442cca0f979de5bd8d55bca3a518c56"]}},"fy.js":{"size":2287,"offset":"21182509","integrity":{"algorithm":"SHA256","hash":"df40aba3421a2cff18893704868b4564f4f7a7caefd7ea33c307318bff32c129","blockSize":4194304,"blocks":["df40aba3421a2cff18893704868b4564f4f7a7caefd7ea33c307318bff32c129"]}},"ga.js":{"size":2360,"offset":"21184796","integrity":{"algorithm":"SHA256","hash":"ab3a47a8df789cdc71f2c44afc16cddd679f6a1e168db81da5c2724a555dec7e","blockSize":4194304,"blocks":["ab3a47a8df789cdc71f2c44afc16cddd679f6a1e168db81da5c2724a555dec7e"]}},"gd.js":{"size":2380,"offset":"21187156","integrity":{"algorithm":"SHA256","hash":"96e22b8bb1187179a379c385091e46b4aa530ddc3964656c5fd4fe3f7d3df262","blockSize":4194304,"blocks":["96e22b8bb1187179a379c385091e46b4aa530ddc3964656c5fd4fe3f7d3df262"]}},"gl.js":{"size":2331,"offset":"21189536","integrity":{"algorithm":"SHA256","hash":"c37fcbd80fd51460e325e1e50af48ee0e04b6de956aba8b9dc6493219cd52c1a","blockSize":4194304,"blocks":["c37fcbd80fd51460e325e1e50af48ee0e04b6de956aba8b9dc6493219cd52c1a"]}},"gom-deva.js":{"size":5470,"offset":"21191867","integrity":{"algorithm":"SHA256","hash":"2e0871a83861aaf57bd496f0ab3d4fe6c18dfc2d4f9f56aa630a2e863e07a880","blockSize":4194304,"blocks":["2e0871a83861aaf57bd496f0ab3d4fe6c18dfc2d4f9f56aa630a2e863e07a880"]}},"gom-latn.js":{"size":4116,"offset":"21197337","integrity":{"algorithm":"SHA256","hash":"86f3ba09ffa3f669d37f737b08746cad2aa620cb701dfe65b3a860558cebe5b4","blockSize":4194304,"blocks":["86f3ba09ffa3f669d37f737b08746cad2aa620cb701dfe65b3a860558cebe5b4"]}},"gu.js":{"size":4116,"offset":"21201453","integrity":{"algorithm":"SHA256","hash":"a38e9b1be734b06021176a9a6b33263b0db9b0609423f7249e0c9e96667ca08e","blockSize":4194304,"blocks":["a38e9b1be734b06021176a9a6b33263b0db9b0609423f7249e0c9e96667ca08e"]}},"he.js":{"size":3209,"offset":"21205569","integrity":{"algorithm":"SHA256","hash":"ed8c46ab5f78a9df4c3901b856467360c87994db19b2918dbcd05a051b79f9ed","blockSize":4194304,"blocks":["ed8c46ab5f78a9df4c3901b856467360c87994db19b2918dbcd05a051b79f9ed"]}},"hi.js":{"size":6375,"offset":"21208778","integrity":{"algorithm":"SHA256","hash":"7db60472aab399dae8e7d0d3557f11a587fb68aaef851945dca32de79d2fdaec","blockSize":4194304,"blocks":["7db60472aab399dae8e7d0d3557f11a587fb68aaef851945dca32de79d2fdaec"]}},"hr.js":{"size":4682,"offset":"21215153","integrity":{"algorithm":"SHA256","hash":"94d9fe5d1636a9af5d3afbb2b46afd12db57a01eeac39c1443c3b69f01d6cc97","blockSize":4194304,"blocks":["94d9fe5d1636a9af5d3afbb2b46afd12db57a01eeac39c1443c3b69f01d6cc97"]}},"hu.js":{"size":3801,"offset":"21219835","integrity":{"algorithm":"SHA256","hash":"94e1bb94e21d738c703d99816e1415d68faaef81c3adc2138bf531739b252c79","blockSize":4194304,"blocks":["94e1bb94e21d738c703d99816e1415d68faaef81c3adc2138bf531739b252c79"]}},"hy-am.js":{"size":3200,"offset":"21223636","integrity":{"algorithm":"SHA256","hash":"cf4e8d2f84e80465ace808818e95acb4fc0ebefc16fce4fda3f0c5965f2b5491","blockSize":4194304,"blocks":["cf4e8d2f84e80465ace808818e95acb4fc0ebefc16fce4fda3f0c5965f2b5491"]}},"id.js":{"size":2375,"offset":"21226836","integrity":{"algorithm":"SHA256","hash":"ba246e24a058bd362fcf4790e3dcd0c044c5b73e9029f0cbab539c162c23e065","blockSize":4194304,"blocks":["ba246e24a058bd362fcf4790e3dcd0c044c5b73e9029f0cbab539c162c23e065"]}},"is.js":{"size":4442,"offset":"21229211","integrity":{"algorithm":"SHA256","hash":"c5119c88976ee8728def1ab88f1f28e2d91be099219e112eeb54c84684ab12ca","blockSize":4194304,"blocks":["c5119c88976ee8728def1ab88f1f28e2d91be099219e112eeb54c84684ab12ca"]}},"it-ch.js":{"size":1941,"offset":"21233653","integrity":{"algorithm":"SHA256","hash":"d9abf16eed703724980bad09af56c3e19c65d6973718167dd0f7f97b589b490b","blockSize":4194304,"blocks":["d9abf16eed703724980bad09af56c3e19c65d6973718167dd0f7f97b589b490b"]}},"it.js":{"size":3251,"offset":"21235594","integrity":{"algorithm":"SHA256","hash":"7f4a1a4fffce32b55081cc3c24e5239b152270f7a22e862a448cd6ca3281b7ff","blockSize":4194304,"blocks":["7f4a1a4fffce32b55081cc3c24e5239b152270f7a22e862a448cd6ca3281b7ff"]}},"ja.js":{"size":3955,"offset":"21238845","integrity":{"algorithm":"SHA256","hash":"4aa4e657a049839f01ebbfe60b90919b6584f0ce797e5b5e5f7ad7157e2b0a22","blockSize":4194304,"blocks":["4aa4e657a049839f01ebbfe60b90919b6584f0ce797e5b5e5f7ad7157e2b0a22"]}},"jv.js":{"size":2384,"offset":"21242800","integrity":{"algorithm":"SHA256","hash":"cdc4887a249d28946a9f8f880d6234ddaaebd69533b84d05791f712e2e801748","blockSize":4194304,"blocks":["cdc4887a249d28946a9f8f880d6234ddaaebd69533b84d05791f712e2e801748"]}},"ka.js":{"size":3492,"offset":"21245184","integrity":{"algorithm":"SHA256","hash":"0a41c75aa4be1977ae39c859cfc268d208494ad642df71398be784974763b517","blockSize":4194304,"blocks":["0a41c75aa4be1977ae39c859cfc268d208494ad642df71398be784974763b517"]}},"kk.js":{"size":2495,"offset":"21248676","integrity":{"algorithm":"SHA256","hash":"265a11f33b159887543d11d2bd3a7007242e5de65b04def844b73a47fd0b27bc","blockSize":4194304,"blocks":["265a11f33b159887543d11d2bd3a7007242e5de65b04def844b73a47fd0b27bc"]}},"km.js":{"size":3346,"offset":"21251171","integrity":{"algorithm":"SHA256","hash":"d8ef55ec1f22895ae7f8a09b2a3604313545b280397719e435581bc22db3ea86","blockSize":4194304,"blocks":["d8ef55ec1f22895ae7f8a09b2a3604313545b280397719e435581bc22db3ea86"]}},"kn.js":{"size":4236,"offset":"21254517","integrity":{"algorithm":"SHA256","hash":"b857f30a5c384521e20bcd133a8e7731070e76ac3e5cf07273bec787e353aff8","blockSize":4194304,"blocks":["b857f30a5c384521e20bcd133a8e7731070e76ac3e5cf07273bec787e353aff8"]}},"ko.js":{"size":2223,"offset":"21258753","integrity":{"algorithm":"SHA256","hash":"024f63bc2d036a0a2959dbaa0ff38e67fb12785695be978b3f01a7cfe6e883de","blockSize":4194304,"blocks":["024f63bc2d036a0a2959dbaa0ff38e67fb12785695be978b3f01a7cfe6e883de"]}},"ku.js":{"size":3320,"offset":"21260976","integrity":{"algorithm":"SHA256","hash":"1e6d281867289b424a0a601c147b632c42fb207d233d22b1ef54ef869141a23f","blockSize":4194304,"blocks":["1e6d281867289b424a0a601c147b632c42fb207d233d22b1ef54ef869141a23f"]}},"ky.js":{"size":2521,"offset":"21264296","integrity":{"algorithm":"SHA256","hash":"ecec6ddbb82dec2edab9647f221a5942f27490c413e943be85c5da59d55e2d46","blockSize":4194304,"blocks":["ecec6ddbb82dec2edab9647f221a5942f27490c413e943be85c5da59d55e2d46"]}},"lb.js":{"size":4237,"offset":"21266817","integrity":{"algorithm":"SHA256","hash":"8daa4c6777a488101527b8813ba8fb3ac08d602bfa8dff7819850361105ae206","blockSize":4194304,"blocks":["8daa4c6777a488101527b8813ba8fb3ac08d602bfa8dff7819850361105ae206"]}},"lo.js":{"size":2569,"offset":"21271054","integrity":{"algorithm":"SHA256","hash":"2f9928863fff2a3e38439f0504b355e58ed9877021fdfa0ed77f39ca23d560cf","blockSize":4194304,"blocks":["2f9928863fff2a3e38439f0504b355e58ed9877021fdfa0ed77f39ca23d560cf"]}},"lt.js":{"size":3965,"offset":"21273623","integrity":{"algorithm":"SHA256","hash":"6af367f41d9148217e72962d1bbfeec4ab57fb72644b07f1d01662c5ad9624f2","blockSize":4194304,"blocks":["6af367f41d9148217e72962d1bbfeec4ab57fb72644b07f1d01662c5ad9624f2"]}},"lv.js":{"size":3433,"offset":"21277588","integrity":{"algorithm":"SHA256","hash":"f9c99189644befc9028084426cafdda755a4b45c7571f6cf63b48abc2f0e9781","blockSize":4194304,"blocks":["f9c99189644befc9028084426cafdda755a4b45c7571f6cf63b48abc2f0e9781"]}},"me.js":{"size":3667,"offset":"21281021","integrity":{"algorithm":"SHA256","hash":"9c6501ad21a1fee7e5603fdaf0b22d53c124cfee1bd67c9b6c00286a2bcfbc78","blockSize":4194304,"blocks":["9c6501ad21a1fee7e5603fdaf0b22d53c124cfee1bd67c9b6c00286a2bcfbc78"]}},"mi.js":{"size":2007,"offset":"21284688","integrity":{"algorithm":"SHA256","hash":"8dd5a982119d2d4e3d88550ce3d91640e0a1d51ed035e32fd793f21aa5f607b7","blockSize":4194304,"blocks":["8dd5a982119d2d4e3d88550ce3d91640e0a1d51ed035e32fd793f21aa5f607b7"]}},"mk.js":{"size":3021,"offset":"21286695","integrity":{"algorithm":"SHA256","hash":"6d3cdcc4fd7216a935ed80a155e1d4db500639b309aafe22eecfc9a49f44dc0a","blockSize":4194304,"blocks":["6d3cdcc4fd7216a935ed80a155e1d4db500639b309aafe22eecfc9a49f44dc0a"]}},"ml.js":{"size":3255,"offset":"21289716","integrity":{"algorithm":"SHA256","hash":"db7c656137fcfb2eb439b35413f63dd05b78d37957eaf5781e78fadb96f4fba7","blockSize":4194304,"blocks":["db7c656137fcfb2eb439b35413f63dd05b78d37957eaf5781e78fadb96f4fba7"]}},"mn.js":{"size":3398,"offset":"21292971","integrity":{"algorithm":"SHA256","hash":"23d7cebeee37254c7f25d3707e3c7caa8934ac96e8a745444513c9b376add620","blockSize":4194304,"blocks":["23d7cebeee37254c7f25d3707e3c7caa8934ac96e8a745444513c9b376add620"]}},"mr.js":{"size":6558,"offset":"21296369","integrity":{"algorithm":"SHA256","hash":"d21da47b769168d9d0adb3c1462cc1a83c3f1370a0d80e9d495baa104353a7cb","blockSize":4194304,"blocks":["d21da47b769168d9d0adb3c1462cc1a83c3f1370a0d80e9d495baa104353a7cb"]}},"ms-my.js":{"size":2330,"offset":"21302927","integrity":{"algorithm":"SHA256","hash":"2158e9feb634e5fd7bc3e0ea2acbff3b4c0762bcff6b09c7c98d2b7534bf1e3d","blockSize":4194304,"blocks":["2158e9feb634e5fd7bc3e0ea2acbff3b4c0762bcff6b09c7c98d2b7534bf1e3d"]}},"ms.js":{"size":2277,"offset":"21305257","integrity":{"algorithm":"SHA256","hash":"028ed948cf621a57cdffef126ee494b5420165c0481baff79867bd5349576d3e","blockSize":4194304,"blocks":["028ed948cf621a57cdffef126ee494b5420165c0481baff79867bd5349576d3e"]}},"mt.js":{"size":1668,"offset":"21307534","integrity":{"algorithm":"SHA256","hash":"36ac6b658d972562fb2f945fd2fa1ce62978a48ba9405aa17f896f77fee1d543","blockSize":4194304,"blocks":["36ac6b658d972562fb2f945fd2fa1ce62978a48ba9405aa17f896f77fee1d543"]}},"my.js":{"size":3094,"offset":"21309202","integrity":{"algorithm":"SHA256","hash":"82fd3552ff9d7ee31c383dcbc82825f818a7f1d293f380cd4a92d7d6c43d8872","blockSize":4194304,"blocks":["82fd3552ff9d7ee31c383dcbc82825f818a7f1d293f380cd4a92d7d6c43d8872"]}},"nb.js":{"size":1905,"offset":"21312296","integrity":{"algorithm":"SHA256","hash":"f34deaaf861cd22928c1380f0f985a984bc64a6f40ee5b8cb8960842fc969088","blockSize":4194304,"blocks":["f34deaaf861cd22928c1380f0f985a984bc64a6f40ee5b8cb8960842fc969088"]}},"ne.js":{"size":4015,"offset":"21314201","integrity":{"algorithm":"SHA256","hash":"017b4e692683a5d8e13bd1efd3c87ac37a39066b1e51f47efee24dbe868b94f6","blockSize":4194304,"blocks":["017b4e692683a5d8e13bd1efd3c87ac37a39066b1e51f47efee24dbe868b94f6"]}},"nl-be.js":{"size":3163,"offset":"21318216","integrity":{"algorithm":"SHA256","hash":"824573610fc9c9bdcfaad2c94c27968d1652c106dd4e26a1f601eec5e9f4a39f","blockSize":4194304,"blocks":["824573610fc9c9bdcfaad2c94c27968d1652c106dd4e26a1f601eec5e9f4a39f"]}},"nl.js":{"size":3196,"offset":"21321379","integrity":{"algorithm":"SHA256","hash":"980cc68db929bfe164fafe51013a53cd6ad4537420335574330845b664ae20b5","blockSize":4194304,"blocks":["980cc68db929bfe164fafe51013a53cd6ad4537420335574330845b664ae20b5"]}},"nn.js":{"size":1834,"offset":"21324575","integrity":{"algorithm":"SHA256","hash":"309e4f807104b92e09321bf552135000af547514dbe6922aba0f27147b17978a","blockSize":4194304,"blocks":["309e4f807104b92e09321bf552135000af547514dbe6922aba0f27147b17978a"]}},"oc-lnc.js":{"size":2436,"offset":"21326409","integrity":{"algorithm":"SHA256","hash":"f8a83fd828f2113fd3ac28de52d7058d863817623da7bd70c62b2f00d457f326","blockSize":4194304,"blocks":["f8a83fd828f2113fd3ac28de52d7058d863817623da7bd70c62b2f00d457f326"]}},"pa-in.js":{"size":4182,"offset":"21328845","integrity":{"algorithm":"SHA256","hash":"6fc71eace68b85da5ae8a23091314f860e70f0d478df66e90082952449edf0c1","blockSize":4194304,"blocks":["6fc71eace68b85da5ae8a23091314f860e70f0d478df66e90082952449edf0c1"]}},"pl.js":{"size":4140,"offset":"21333027","integrity":{"algorithm":"SHA256","hash":"a9d927aac36ea53ad384fadf3201978e93dbaf625eadad14babeed55b6e01084","blockSize":4194304,"blocks":["a9d927aac36ea53ad384fadf3201978e93dbaf625eadad14babeed55b6e01084"]}},"pt-br.js":{"size":1838,"offset":"21337167","integrity":{"algorithm":"SHA256","hash":"3c1fdeb739aa37bc650cc4195470984112f3029c69b79a0d298811d541902782","blockSize":4194304,"blocks":["3c1fdeb739aa37bc650cc4195470984112f3029c69b79a0d298811d541902782"]}},"pt.js":{"size":1952,"offset":"21339005","integrity":{"algorithm":"SHA256","hash":"23360850e47341c656e6a5d267f5632f255ab1fd9b1599ea0a00bd6708dff993","blockSize":4194304,"blocks":["23360850e47341c656e6a5d267f5632f255ab1fd9b1599ea0a00bd6708dff993"]}},"ro.js":{"size":2303,"offset":"21340957","integrity":{"algorithm":"SHA256","hash":"bb43b495f20a2c3619ef6c7a11c2203f69295bb9de5df18a8647921e26237b1e","blockSize":4194304,"blocks":["bb43b495f20a2c3619ef6c7a11c2203f69295bb9de5df18a8647921e26237b1e"]}},"ru.js":{"size":8326,"offset":"21343260","integrity":{"algorithm":"SHA256","hash":"4664a110f58bcce247435dca55dabe88c9452484f7b24ce2cc1ff36399b7cd86","blockSize":4194304,"blocks":["4664a110f58bcce247435dca55dabe88c9452484f7b24ce2cc1ff36399b7cd86"]}},"sd.js":{"size":2153,"offset":"21351586","integrity":{"algorithm":"SHA256","hash":"47a6184217fcfdb79be8c8101e24b5de190e707eca660ccebdfc2bd06cb01975","blockSize":4194304,"blocks":["47a6184217fcfdb79be8c8101e24b5de190e707eca660ccebdfc2bd06cb01975"]}},"se.js":{"size":1839,"offset":"21353739","integrity":{"algorithm":"SHA256","hash":"8d7eded9bc5d820a5671433f926c1ecb4100d7a97b2889d629688adaf4220972","blockSize":4194304,"blocks":["8d7eded9bc5d820a5671433f926c1ecb4100d7a97b2889d629688adaf4220972"]}},"si.js":{"size":2665,"offset":"21355578","integrity":{"algorithm":"SHA256","hash":"681330fb497ddd259df6bff3d226c62f8b47c381e991c044d35bcf2b6b5b3f77","blockSize":4194304,"blocks":["681330fb497ddd259df6bff3d226c62f8b47c381e991c044d35bcf2b6b5b3f77"]}},"sk.js":{"size":5157,"offset":"21358243","integrity":{"algorithm":"SHA256","hash":"0623549f32e7096971277cca92bb1e9a4687a1a18f3b30cfc41f165c391651cb","blockSize":4194304,"blocks":["0623549f32e7096971277cca92bb1e9a4687a1a18f3b30cfc41f165c391651cb"]}},"sl.js":{"size":6099,"offset":"21363400","integrity":{"algorithm":"SHA256","hash":"d784d46369a0eba969c2926ea9e852a87ae59c5679dc748802fb4b01ab124e90","blockSize":4194304,"blocks":["d784d46369a0eba969c2926ea9e852a87ae59c5679dc748802fb4b01ab124e90"]}},"sq.js":{"size":1987,"offset":"21369499","integrity":{"algorithm":"SHA256","hash":"9109b6d4d0ecd1c613444811488e2a1607c7d6aa1d3e6acf4a5ad2cbfe88b45f","blockSize":4194304,"blocks":["9109b6d4d0ecd1c613444811488e2a1607c7d6aa1d3e6acf4a5ad2cbfe88b45f"]}},"sr-cyrl.js":{"size":4216,"offset":"21371486","integrity":{"algorithm":"SHA256","hash":"06817919faabed92b20cec141f91d5287488cf46d3becaf1c03c521389dccdd0","blockSize":4194304,"blocks":["06817919faabed92b20cec141f91d5287488cf46d3becaf1c03c521389dccdd0"]}},"sr.js":{"size":3735,"offset":"21375702","integrity":{"algorithm":"SHA256","hash":"e17280ebb0ca19a4b748f9f39a5ae8ad18f4f96eff2e53f3c4f248994b544563","blockSize":4194304,"blocks":["e17280ebb0ca19a4b748f9f39a5ae8ad18f4f96eff2e53f3c4f248994b544563"]}},"ss.js":{"size":2556,"offset":"21379437","integrity":{"algorithm":"SHA256","hash":"25f4ff476021f7d05e846197b80d553a0ab5d1a27b298796f0f95e4421818502","blockSize":4194304,"blocks":["25f4ff476021f7d05e846197b80d553a0ab5d1a27b298796f0f95e4421818502"]}},"sv.js":{"size":2066,"offset":"21381993","integrity":{"algorithm":"SHA256","hash":"85ad85e2b6ada4b40fcafb3c8f69a7485aed5d6761b5321a9018f47a8e6d6d8f","blockSize":4194304,"blocks":["85ad85e2b6ada4b40fcafb3c8f69a7485aed5d6761b5321a9018f47a8e6d6d8f"]}},"sw.js":{"size":1635,"offset":"21384059","integrity":{"algorithm":"SHA256","hash":"7788e13293846f0a0097a9be94f90753cac8e17e63d84ff53f4b692669eccbea","blockSize":4194304,"blocks":["7788e13293846f0a0097a9be94f90753cac8e17e63d84ff53f4b692669eccbea"]}},"ta.js":{"size":4768,"offset":"21385694","integrity":{"algorithm":"SHA256","hash":"f8d9fa344e5aee39c65f67da7cc2e8666cc314dac8b9842ca35f291a6d8703c2","blockSize":4194304,"blocks":["f8d9fa344e5aee39c65f67da7cc2e8666cc314dac8b9842ca35f291a6d8703c2"]}},"te.js":{"size":3360,"offset":"21390462","integrity":{"algorithm":"SHA256","hash":"73635b585623fd87207badd68777385fa6185bd5e4bb79789058bc4664917bba","blockSize":4194304,"blocks":["73635b585623fd87207badd68777385fa6185bd5e4bb79789058bc4664917bba"]}},"tet.js":{"size":2155,"offset":"21393822","integrity":{"algorithm":"SHA256","hash":"21dc425bc393e59a99afa482332c508673b86b4be273bd854f275b88c08ec354","blockSize":4194304,"blocks":["21dc425bc393e59a99afa482332c508673b86b4be273bd854f275b88c08ec354"]}},"tg.js":{"size":3584,"offset":"21395977","integrity":{"algorithm":"SHA256","hash":"b3caa26a533adec80325e1d6e619ee462e77e0943d8d3db55d16bd7888071d6c","blockSize":4194304,"blocks":["b3caa26a533adec80325e1d6e619ee462e77e0943d8d3db55d16bd7888071d6c"]}},"th.js":{"size":2720,"offset":"21399561","integrity":{"algorithm":"SHA256","hash":"83e85e162711661cdc25478c46108da2e2934e2c819f1e8da83d7535385d7e0a","blockSize":4194304,"blocks":["83e85e162711661cdc25478c46108da2e2934e2c819f1e8da83d7535385d7e0a"]}},"tk.js":{"size":2488,"offset":"21402281","integrity":{"algorithm":"SHA256","hash":"a3ade222a40733cc6430b0d0c824ff84b8c3101b2af2603feb6381f85d4b0003","blockSize":4194304,"blocks":["a3ade222a40733cc6430b0d0c824ff84b8c3101b2af2603feb6381f85d4b0003"]}},"tl-ph.js":{"size":1735,"offset":"21404769","integrity":{"algorithm":"SHA256","hash":"c032aae8730b67385af156a603adfefcf4e15233b1ef1930bb76809b1aabbd2c","blockSize":4194304,"blocks":["c032aae8730b67385af156a603adfefcf4e15233b1ef1930bb76809b1aabbd2c"]}},"tlh.js":{"size":3751,"offset":"21406504","integrity":{"algorithm":"SHA256","hash":"b750c4e1e3a64e773a6af217ceef312f2bb5781e6b849263e780a7da5d9afc01","blockSize":4194304,"blocks":["b750c4e1e3a64e773a6af217ceef312f2bb5781e6b849263e780a7da5d9afc01"]}},"tr.js":{"size":2927,"offset":"21410255","integrity":{"algorithm":"SHA256","hash":"37e529705dbb24a3e115597e2b3abec2738482301fc80a06e72cf6ce2c0791a6","blockSize":4194304,"blocks":["37e529705dbb24a3e115597e2b3abec2738482301fc80a06e72cf6ce2c0791a6"]}},"tzl.js":{"size":3109,"offset":"21413182","integrity":{"algorithm":"SHA256","hash":"1a8627c869d5f815c09dda91b2588f3df9e692296267f5bc6661fa3998f1c0fa","blockSize":4194304,"blocks":["1a8627c869d5f815c09dda91b2588f3df9e692296267f5bc6661fa3998f1c0fa"]}},"tzm-latn.js":{"size":1675,"offset":"21416291","integrity":{"algorithm":"SHA256","hash":"0df5dd11a538822b5618f6609a0ac2b2dc11475fde02553d0ac1c91cac71e34f","blockSize":4194304,"blocks":["0df5dd11a538822b5618f6609a0ac2b2dc11475fde02553d0ac1c91cac71e34f"]}},"tzm.js":{"size":2306,"offset":"21417966","integrity":{"algorithm":"SHA256","hash":"c2e1ed8cb594e0a02da7304812aba9c3f4e25491c992d3428e05429641cc5334","blockSize":4194304,"blocks":["c2e1ed8cb594e0a02da7304812aba9c3f4e25491c992d3428e05429641cc5334"]}},"ug-cn.js":{"size":3864,"offset":"21420272","integrity":{"algorithm":"SHA256","hash":"89581281345029016fa40cef85629dad73d1e3635ec2811829eec92153604558","blockSize":4194304,"blocks":["89581281345029016fa40cef85629dad73d1e3635ec2811829eec92153604558"]}},"uk.js":{"size":5863,"offset":"21424136","integrity":{"algorithm":"SHA256","hash":"64cf301947f6c0a61ffeeea80876d8447cee7f06d7dde31b1ded1e6951b384d4","blockSize":4194304,"blocks":["64cf301947f6c0a61ffeeea80876d8447cee7f06d7dde31b1ded1e6951b384d4"]}},"ur.js":{"size":2200,"offset":"21429999","integrity":{"algorithm":"SHA256","hash":"4870e8ee287025d7760731038093cc828f08be91d0b08b0508f931c9a16453ff","blockSize":4194304,"blocks":["4870e8ee287025d7760731038093cc828f08be91d0b08b0508f931c9a16453ff"]}},"uz-latn.js":{"size":1623,"offset":"21432199","integrity":{"algorithm":"SHA256","hash":"351094155703f61f5fd152822074651a6a81a6881dd0551bfa319f21de02e04b","blockSize":4194304,"blocks":["351094155703f61f5fd152822074651a6a81a6881dd0551bfa319f21de02e04b"]}},"uz.js":{"size":1885,"offset":"21433822","integrity":{"algorithm":"SHA256","hash":"e9b15bd23e8779fe93fa352a04dc338593206cd7beb4d56d355f8d291835fcd1","blockSize":4194304,"blocks":["e9b15bd23e8779fe93fa352a04dc338593206cd7beb4d56d355f8d291835fcd1"]}},"vi.js":{"size":2414,"offset":"21435707","integrity":{"algorithm":"SHA256","hash":"bf67c22c06f2db7d6f17b2b8c5b79028fd69cc83edba4b0a453c166ed8908996","blockSize":4194304,"blocks":["bf67c22c06f2db7d6f17b2b8c5b79028fd69cc83edba4b0a453c166ed8908996"]}},"x-pseudo.js":{"size":2316,"offset":"21438121","integrity":{"algorithm":"SHA256","hash":"3335cf18bacbf7805ab7581ee02c39ddad1c0543316f839ea5642b51a03cd91d","blockSize":4194304,"blocks":["3335cf18bacbf7805ab7581ee02c39ddad1c0543316f839ea5642b51a03cd91d"]}},"yo.js":{"size":1887,"offset":"21440437","integrity":{"algorithm":"SHA256","hash":"5470a3358714886d14b7897df864a7a0eed2725bffbddf5d3e913ff7b2f79a40","blockSize":4194304,"blocks":["5470a3358714886d14b7897df864a7a0eed2725bffbddf5d3e913ff7b2f79a40"]}},"zh-cn.js":{"size":3711,"offset":"21442324","integrity":{"algorithm":"SHA256","hash":"9fcdb171506aed19c1776f668330ec4083094f182f17514aa0a63857c93232ad","blockSize":4194304,"blocks":["9fcdb171506aed19c1776f668330ec4083094f182f17514aa0a63857c93232ad"]}},"zh-hk.js":{"size":3116,"offset":"21446035","integrity":{"algorithm":"SHA256","hash":"3996d5666a44c90f168e60bcf7704a4f3c1ccbce3bb14cdba372c7c4de663672","blockSize":4194304,"blocks":["3996d5666a44c90f168e60bcf7704a4f3c1ccbce3bb14cdba372c7c4de663672"]}},"zh-mo.js":{"size":3066,"offset":"21449151","integrity":{"algorithm":"SHA256","hash":"ccb21168fff3d307932e776d0394dd518863f0873e7f118c91d8f1f796b40848","blockSize":4194304,"blocks":["ccb21168fff3d307932e776d0394dd518863f0873e7f118c91d8f1f796b40848"]}},"zh-tw.js":{"size":3013,"offset":"21452217","integrity":{"algorithm":"SHA256","hash":"5d777630817e1b6cbdac934d41924ac44079089ffdfc807d7d53d7b64e1f4ebc","blockSize":4194304,"blocks":["5d777630817e1b6cbdac934d41924ac44079089ffdfc807d7d53d7b64e1f4ebc"]}}}},"moment.js":{"size":2694,"offset":"21455230","integrity":{"algorithm":"SHA256","hash":"a7c602f1abea2ef77a7c771df7c1b9f978752e4d1c0e69925834d520fa35d789","blockSize":4194304,"blocks":["a7c602f1abea2ef77a7c771df7c1b9f978752e4d1c0e69925834d520fa35d789"]}}}}}},"mousetrap":{"files":{"Gruntfile.js":{"size":793,"offset":"21457924","integrity":{"algorithm":"SHA256","hash":"53a3ffd9a18e7d8a605f4542bd254861204783c261f446b8925f276ed7cb953b","blockSize":4194304,"blocks":["53a3ffd9a18e7d8a605f4542bd254861204783c261f446b8925f276ed7cb953b"]}},"LICENSE":{"size":10602,"offset":"21458717","integrity":{"algorithm":"SHA256","hash":"58ac1a498cc4ead4f8323c83713659410555b490ce32ff88bfa7d4b36638f593","blockSize":4194304,"blocks":["58ac1a498cc4ead4f8323c83713659410555b490ce32ff88bfa7d4b36638f593"]}},"mousetrap.js":{"size":33855,"offset":"21469319","integrity":{"algorithm":"SHA256","hash":"9709ef7b978267edc5b32aa440cdd2aa58f1274404c6597649729075f67b5fa8","blockSize":4194304,"blocks":["9709ef7b978267edc5b32aa440cdd2aa58f1274404c6597649729075f67b5fa8"]}},"mousetrap.min.js":{"size":4985,"offset":"21503174","integrity":{"algorithm":"SHA256","hash":"dac68f8e452bde0e1f12742d3e9742a412d29d877d2fea82e525d0506410bfc1","blockSize":4194304,"blocks":["dac68f8e452bde0e1f12742d3e9742a412d29d877d2fea82e525d0506410bfc1"]}},"mousetrap.sublime-project":{"size":488,"offset":"21508159","integrity":{"algorithm":"SHA256","hash":"da234a11464c90918cf3f43f9e6aef6325ec1c9ebc0077cf117ab42a7afdb9d9","blockSize":4194304,"blocks":["da234a11464c90918cf3f43f9e6aef6325ec1c9ebc0077cf117ab42a7afdb9d9"]}},"package.json":{"size":596,"offset":"21508647","integrity":{"algorithm":"SHA256","hash":"4e26c237ba0537fa951e5904f510929508b624887474ca2e8d49abc4abdfc1b5","blockSize":4194304,"blocks":["4e26c237ba0537fa951e5904f510929508b624887474ca2e8d49abc4abdfc1b5"]}},"plugins":{"files":{"bind-dictionary":{"files":{"mousetrap-bind-dictionary.js":{"size":1000,"offset":"21509243","integrity":{"algorithm":"SHA256","hash":"8a8112a3f791038ce1f23daa489094200e7c0e9b9c3512cfcb1456892433b693","blockSize":4194304,"blocks":["8a8112a3f791038ce1f23daa489094200e7c0e9b9c3512cfcb1456892433b693"]}},"mousetrap-bind-dictionary.min.js":{"size":254,"offset":"21510243","integrity":{"algorithm":"SHA256","hash":"e8ab529a1dfcb55d9081e5090c51e18bbac8d227ac40ca839376c68d6329df20","blockSize":4194304,"blocks":["e8ab529a1dfcb55d9081e5090c51e18bbac8d227ac40ca839376c68d6329df20"]}},"README.md":{"size":431,"offset":"21510497","integrity":{"algorithm":"SHA256","hash":"be11947c9a8430d1098c5149c7130376048398a2cc5a263f2f9d82897df03692","blockSize":4194304,"blocks":["be11947c9a8430d1098c5149c7130376048398a2cc5a263f2f9d82897df03692"]}}}},"global-bind":{"files":{"mousetrap-global-bind.js":{"size":1217,"offset":"21510928","integrity":{"algorithm":"SHA256","hash":"ef97299d07315bb6c91850e368cb7d5be681010fe0d0d3fcad1d180ab436ca02","blockSize":4194304,"blocks":["ef97299d07315bb6c91850e368cb7d5be681010fe0d0d3fcad1d180ab436ca02"]}},"mousetrap-global-bind.min.js":{"size":297,"offset":"21512145","integrity":{"algorithm":"SHA256","hash":"f676cb6e1c9586c142bed0fd554a80fd2c64fb4228d40e74fe4a7225f9435b9c","blockSize":4194304,"blocks":["f676cb6e1c9586c142bed0fd554a80fd2c64fb4228d40e74fe4a7225f9435b9c"]}},"README.md":{"size":552,"offset":"21512442","integrity":{"algorithm":"SHA256","hash":"10697c1ec3fd79bff4ab6ae209b0e6adae4b547b5e5bc84ce2df87d393ad11f3","blockSize":4194304,"blocks":["10697c1ec3fd79bff4ab6ae209b0e6adae4b547b5e5bc84ce2df87d393ad11f3"]}}}},"pause":{"files":{"mousetrap-pause.js":{"size":779,"offset":"21512994","integrity":{"algorithm":"SHA256","hash":"896d0db378e23a9caba953fe2c72221db949e89c378a9e62ff8b79034763658b","blockSize":4194304,"blocks":["896d0db378e23a9caba953fe2c72221db949e89c378a9e62ff8b79034763658b"]}},"mousetrap-pause.min.js":{"size":242,"offset":"21513773","integrity":{"algorithm":"SHA256","hash":"79874ee356be359ae33690f94d32b782db6149079b85e43d659e644a0bafd929","blockSize":4194304,"blocks":["79874ee356be359ae33690f94d32b782db6149079b85e43d659e644a0bafd929"]}},"README.md":{"size":291,"offset":"21514015","integrity":{"algorithm":"SHA256","hash":"63faf8ecd2db40a594d747f477e95a4c106616d0d3d2a905d421c6b52940c084","blockSize":4194304,"blocks":["63faf8ecd2db40a594d747f477e95a4c106616d0d3d2a905d421c6b52940c084"]}}}},"README.md":{"size":563,"offset":"21514306","integrity":{"algorithm":"SHA256","hash":"5f6be9555b516c9310087ba09355a46d9080326f3f52d69eecfdf3d58e962879","blockSize":4194304,"blocks":["5f6be9555b516c9310087ba09355a46d9080326f3f52d69eecfdf3d58e962879"]}},"record":{"files":{"mousetrap-record.js":{"size":5515,"offset":"21514869","integrity":{"algorithm":"SHA256","hash":"30baed5381b76403ad9e0c60972dfea8c689fb64d081e02bd0448952223b3a26","blockSize":4194304,"blocks":["30baed5381b76403ad9e0c60972dfea8c689fb64d081e02bd0448952223b3a26"]}},"mousetrap-record.min.js":{"size":808,"offset":"21520384","integrity":{"algorithm":"SHA256","hash":"cc302a183dfdc9f5237d4248097dc8611b32c23fa33b10aca991a339068b67a8","blockSize":4194304,"blocks":["cc302a183dfdc9f5237d4248097dc8611b32c23fa33b10aca991a339068b67a8"]}},"README.md":{"size":391,"offset":"21521192","integrity":{"algorithm":"SHA256","hash":"967aa891e7187d86f396e04db35c1d0e43eecefed58f7f87b778bd208fe5bc00","blockSize":4194304,"blocks":["967aa891e7187d86f396e04db35c1d0e43eecefed58f7f87b778bd208fe5bc00"]}},"tests":{"files":{"index.html":{"size":840,"offset":"21521583","integrity":{"algorithm":"SHA256","hash":"46ed75dfbfa5dc141e255fb2eeae326c44bae1fdc5fc5270d80bcf73e7c8edd1","blockSize":4194304,"blocks":["46ed75dfbfa5dc141e255fb2eeae326c44bae1fdc5fc5270d80bcf73e7c8edd1"]}},"jelly.css":{"size":280,"offset":"21522423","integrity":{"algorithm":"SHA256","hash":"2d0f8698479afcbacd37355f8331b31d10dfd427368c56d08cff8d4f2ff4be12","blockSize":4194304,"blocks":["2d0f8698479afcbacd37355f8331b31d10dfd427368c56d08cff8d4f2ff4be12"]}},"jelly.js":{"size":1329,"offset":"21522703","integrity":{"algorithm":"SHA256","hash":"99b5354cce5181b8aba82b0330266e58f6e79c7c1b0a80e7bb5ad93e240b5120","blockSize":4194304,"blocks":["99b5354cce5181b8aba82b0330266e58f6e79c7c1b0a80e7bb5ad93e240b5120"]}}}}}}}}}},"mz":{"files":{"child_process.js":{"size":113,"offset":"21524032","integrity":{"algorithm":"SHA256","hash":"e8d8a22c815d5ca0678cc75dd6316e17560cd7f001fdb56cf905e7a87e576070","blockSize":4194304,"blocks":["e8d8a22c815d5ca0678cc75dd6316e17560cd7f001fdb56cf905e7a87e576070"]}},"crypto.js":{"size":135,"offset":"21524145","integrity":{"algorithm":"SHA256","hash":"fb9be315fee563fd0fdca94fe0b7928e5cdad998f8a04501ad18b267abb6a69d","blockSize":4194304,"blocks":["fb9be315fee563fd0fdca94fe0b7928e5cdad998f8a04501ad18b267abb6a69d"]}},"dns.js":{"size":240,"offset":"21524280","integrity":{"algorithm":"SHA256","hash":"ddc9693e676f1c4d50dd05a842bb21f0871c9e87f03f99d710a6703118e63d64","blockSize":4194304,"blocks":["ddc9693e676f1c4d50dd05a842bb21f0871c9e87f03f99d710a6703118e63d64"]}},"fs.js":{"size":1044,"offset":"21524520","integrity":{"algorithm":"SHA256","hash":"b30f5783e8f6b0839398e7b459e6df4e098b15ccb51058c65df05267ac833ee7","blockSize":4194304,"blocks":["b30f5783e8f6b0839398e7b459e6df4e098b15ccb51058c65df05267ac833ee7"]}},"HISTORY.md":{"size":1137,"offset":"21525564","integrity":{"algorithm":"SHA256","hash":"5f69a48e0144617447d376e78e93b1fb3fa8008b0707a174fb892eef438a5651","blockSize":4194304,"blocks":["5f69a48e0144617447d376e78e93b1fb3fa8008b0707a174fb892eef438a5651"]}},"index.js":{"size":206,"offset":"21526701","integrity":{"algorithm":"SHA256","hash":"cecc706b40856d8aeaf63fa1ba9236f6379e8f225346664ec4e6b35b85fd00d3","blockSize":4194304,"blocks":["cecc706b40856d8aeaf63fa1ba9236f6379e8f225346664ec4e6b35b85fd00d3"]}},"LICENSE":{"size":1121,"offset":"21526907","integrity":{"algorithm":"SHA256","hash":"b54cad06af80663a692483d407ea7d3fbec77fc12f4d7eed3f9f511ad87fca6a","blockSize":4194304,"blocks":["b54cad06af80663a692483d407ea7d3fbec77fc12f4d7eed3f9f511ad87fca6a"]}},"package.json":{"size":680,"offset":"21528028","integrity":{"algorithm":"SHA256","hash":"f31b193d3848bdff228e962abb113c48e7e72d15526746b8dcedf5d22126b95f","blockSize":4194304,"blocks":["f31b193d3848bdff228e962abb113c48e7e72d15526746b8dcedf5d22126b95f"]}},"readline.js":{"size":1681,"offset":"21528708","integrity":{"algorithm":"SHA256","hash":"1228c1816ad1d0e3e45ff034cd32f43558d3e6c69874585cac854c7ca9c29b80","blockSize":4194304,"blocks":["1228c1816ad1d0e3e45ff034cd32f43558d3e6c69874585cac854c7ca9c29b80"]}},"zlib.js":{"size":181,"offset":"21530389","integrity":{"algorithm":"SHA256","hash":"742206100f69e5497efde5f18acafe2b38aead58b41caa4ad72f4d0123e511ce","blockSize":4194304,"blocks":["742206100f69e5497efde5f18acafe2b38aead58b41caa4ad72f4d0123e511ce"]}}}},"negotiator":{"files":{"HISTORY.md":{"size":2406,"offset":"21530570","integrity":{"algorithm":"SHA256","hash":"d1c694a1dda21936f45f8eda83cea201ce2a5f0d2c8271610deb1c55f3af99a4","blockSize":4194304,"blocks":["d1c694a1dda21936f45f8eda83cea201ce2a5f0d2c8271610deb1c55f3af99a4"]}},"index.js":{"size":3344,"offset":"21532976","integrity":{"algorithm":"SHA256","hash":"6019e096fc7bc12e4811f0f363e57b7cd60f08b8ea995e15aa33614d99332377","blockSize":4194304,"blocks":["6019e096fc7bc12e4811f0f363e57b7cd60f08b8ea995e15aa33614d99332377"]}},"lib":{"files":{"charset.js":{"size":3081,"offset":"21536320","integrity":{"algorithm":"SHA256","hash":"e6522a2df58f21a6cdf8d146f7e85b9a49bcaf68b813dec15068a8e84fc582c3","blockSize":4194304,"blocks":["e6522a2df58f21a6cdf8d146f7e85b9a49bcaf68b813dec15068a8e84fc582c3"]}},"encoding.js":{"size":3506,"offset":"21539401","integrity":{"algorithm":"SHA256","hash":"35421dc78d3c1b608922427bbd6e524518168621ff1a44919fc591ca297e813c","blockSize":4194304,"blocks":["35421dc78d3c1b608922427bbd6e524518168621ff1a44919fc591ca297e813c"]}},"language.js":{"size":3408,"offset":"21542907","integrity":{"algorithm":"SHA256","hash":"403a63ab9e6304a1c00443d7891a22eb1ef8357729d36a224d8f9ea393f5e93a","blockSize":4194304,"blocks":["403a63ab9e6304a1c00443d7891a22eb1ef8357729d36a224d8f9ea393f5e93a"]}},"mediaType.js":{"size":5358,"offset":"21546315","integrity":{"algorithm":"SHA256","hash":"0dab239c924fa4d5f823548e25dc9f10315bf490b821827b640318b7aa200577","blockSize":4194304,"blocks":["0dab239c924fa4d5f823548e25dc9f10315bf490b821827b640318b7aa200577"]}}}},"LICENSE":{"size":1177,"offset":"21551673","integrity":{"algorithm":"SHA256","hash":"553d4d20029a24e315b428a1a54a9e109eaa340f2e958a4f50a92362c2c4070b","blockSize":4194304,"blocks":["553d4d20029a24e315b428a1a54a9e109eaa340f2e958a4f50a92362c2c4070b"]}},"package.json":{"size":419,"offset":"21552850","integrity":{"algorithm":"SHA256","hash":"0e0cfd6bcfb6daa1de0d04c0e9ccce40029e7d1f52c9d522668a4ce1bb1d033b","blockSize":4194304,"blocks":["0e0cfd6bcfb6daa1de0d04c0e9ccce40029e7d1f52c9d522668a4ce1bb1d033b"]}}}},"node-addon-api":{"files":{"common.gypi":{"size":762,"offset":"21553269","integrity":{"algorithm":"SHA256","hash":"f15742e3019096b85ef3e8985e2fe66c4dda722908577e113a1b0264893ecca8","blockSize":4194304,"blocks":["f15742e3019096b85ef3e8985e2fe66c4dda722908577e113a1b0264893ecca8"]}},"except.gypi":{"size":381,"offset":"21554031","integrity":{"algorithm":"SHA256","hash":"da3a1c3c08fdf60c68d7d8d11ef1c73adc5d8b73d8ac8d649922109e077a7808","blockSize":4194304,"blocks":["da3a1c3c08fdf60c68d7d8d11ef1c73adc5d8b73d8ac8d649922109e077a7808"]}},"index.js":{"size":296,"offset":"21554412","integrity":{"algorithm":"SHA256","hash":"6528e924b31e091c3243132fe713ea0f1fa6362ffaa3c2dd09d12670db6b60dc","blockSize":4194304,"blocks":["6528e924b31e091c3243132fe713ea0f1fa6362ffaa3c2dd09d12670db6b60dc"]}},"LICENSE.md":{"size":1245,"offset":"21554708","integrity":{"algorithm":"SHA256","hash":"4fcf69bbecb999ec8fa0ece62bc8934b7cdd45061ac1a8b1939a09be64cd4352","blockSize":4194304,"blocks":["4fcf69bbecb999ec8fa0ece62bc8934b7cdd45061ac1a8b1939a09be64cd4352"]}},"napi-inl.deprecated.h":{"size":7251,"offset":"21555953","integrity":{"algorithm":"SHA256","hash":"96afb169fd8af899ddcadc102ea137e3cd253c13b8862cb11bd58601fe2a5f90","blockSize":4194304,"blocks":["96afb169fd8af899ddcadc102ea137e3cd253c13b8862cb11bd58601fe2a5f90"]}},"napi-inl.h":{"size":186981,"offset":"21563204","integrity":{"algorithm":"SHA256","hash":"732f3d74b7c64c761a989455bca127d9c384651264ab27e5009d0bc78882bf81","blockSize":4194304,"blocks":["732f3d74b7c64c761a989455bca127d9c384651264ab27e5009d0bc78882bf81"]}},"napi.h":{"size":111175,"offset":"21750185","integrity":{"algorithm":"SHA256","hash":"1084a55623f0357f42ff55918bdd960c226fd90ddd1815b55ce094e55486689e","blockSize":4194304,"blocks":["1084a55623f0357f42ff55918bdd960c226fd90ddd1815b55ce094e55486689e"]}},"node_api.gyp":{"size":132,"offset":"21861360","integrity":{"algorithm":"SHA256","hash":"3cd2c44fb0974f016376b676d46bbebbca7c89d4383b09ece30e4cb4122a1499","blockSize":4194304,"blocks":["3cd2c44fb0974f016376b676d46bbebbca7c89d4383b09ece30e4cb4122a1499"]}},"noexcept.gypi":{"size":386,"offset":"21861492","integrity":{"algorithm":"SHA256","hash":"780402b7acd03ea966de2f89f08a13fde81ace1b498b748621f908478f3778b0","blockSize":4194304,"blocks":["780402b7acd03ea966de2f89f08a13fde81ace1b498b748621f908478f3778b0"]}},"nothing.c":{"size":0,"offset":"21861878","integrity":{"algorithm":"SHA256","hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","blockSize":4194304,"blocks":["e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"]}},"package-support.json":{"size":467,"offset":"21861878","integrity":{"algorithm":"SHA256","hash":"b1cb7da23cca1681c7392a3c889eb0cc4916c53d2d7692d4b654ae751f3442f3","blockSize":4194304,"blocks":["b1cb7da23cca1681c7392a3c889eb0cc4916c53d2d7692d4b654ae751f3442f3"]}},"package.json":{"size":708,"offset":"21862345","integrity":{"algorithm":"SHA256","hash":"0a7592650577085c907ca83aab56648eb56466097ce59028fe6fbf71dbd71f21","blockSize":4194304,"blocks":["0a7592650577085c907ca83aab56648eb56466097ce59028fe6fbf71dbd71f21"]}},"tools":{"files":{"check-napi.js":{"size":3210,"offset":"21863053","integrity":{"algorithm":"SHA256","hash":"f3264fd3f9dd9bc3e051cdcf72125d34617b2b06b914c49f1e1297e53cfd524b","blockSize":4194304,"blocks":["f3264fd3f9dd9bc3e051cdcf72125d34617b2b06b914c49f1e1297e53cfd524b"]}},"clang-format.js":{"size":1912,"offset":"21866263","integrity":{"algorithm":"SHA256","hash":"f046340b3d14125bdfd6bf72af97a14967e8bc78816fcecc4df2db15f7472fa4","blockSize":4194304,"blocks":["f046340b3d14125bdfd6bf72af97a14967e8bc78816fcecc4df2db15f7472fa4"]}},"conversion.js":{"size":15275,"offset":"21868175","integrity":{"algorithm":"SHA256","hash":"df2f681bdb4a1dac5faf7fa70a60dace4dd12ce0b9964effcee56a43f693fc6c","blockSize":4194304,"blocks":["df2f681bdb4a1dac5faf7fa70a60dace4dd12ce0b9964effcee56a43f693fc6c"]}},"README.md":{"size":3217,"offset":"21883450","integrity":{"algorithm":"SHA256","hash":"65e9ea918538f453166b10a1d609cf44cec3d2d01f23fecb5265fb3a4bf303d5","blockSize":4194304,"blocks":["65e9ea918538f453166b10a1d609cf44cec3d2d01f23fecb5265fb3a4bf303d5"]}}}}}},"node-diff3":{"files":{"dist":{"files":{"index.cjs":{"size":12868,"offset":"21886667","integrity":{"algorithm":"SHA256","hash":"dc8d246d7e8ad0e94a62440b86dbcee506766b118e7441f7c436dff1027de12a","blockSize":4194304,"blocks":["dc8d246d7e8ad0e94a62440b86dbcee506766b118e7441f7c436dff1027de12a"]}},"index.cjs.map":{"size":23956,"offset":"21899535","integrity":{"algorithm":"SHA256","hash":"8c88089b29e96e30e08f55d038bc6184f8bb6a7111b65daac2e5eeee6ca21520","blockSize":4194304,"blocks":["8c88089b29e96e30e08f55d038bc6184f8bb6a7111b65daac2e5eeee6ca21520"]}},"index.iife.js":{"size":13575,"offset":"21923491","integrity":{"algorithm":"SHA256","hash":"28ed3aa759635922d837d9d90697736db903fe9ebb4272e98746031af243c567","blockSize":4194304,"blocks":["28ed3aa759635922d837d9d90697736db903fe9ebb4272e98746031af243c567"]}},"index.iife.js.map":{"size":23995,"offset":"21937066","integrity":{"algorithm":"SHA256","hash":"3139f619eebc315471a3944d38d6837f4c565e6cae14ef6169d97595a8c84288","blockSize":4194304,"blocks":["3139f619eebc315471a3944d38d6837f4c565e6cae14ef6169d97595a8c84288"]}}}},"index.mjs":{"size":15289,"offset":"21961061","integrity":{"algorithm":"SHA256","hash":"7846310a8d43de21e248a2bacb397290689f9fda34ba2d9e84d8dfdb70b0b006","blockSize":4194304,"blocks":["7846310a8d43de21e248a2bacb397290689f9fda34ba2d9e84d8dfdb70b0b006"]}},"LICENSE.md":{"size":1444,"offset":"21976350","integrity":{"algorithm":"SHA256","hash":"037a1e27afcaa7c73d7cd8e44d3a32c1e605a00aa4af1073fa4f19a22e939b8f","blockSize":4194304,"blocks":["037a1e27afcaa7c73d7cd8e44d3a32c1e605a00aa4af1073fa4f19a22e939b8f"]}},"package.json":{"size":778,"offset":"21977794","integrity":{"algorithm":"SHA256","hash":"93953a5ba61c80c40161977755bfa68521cfc1ac95bcbd43d968010fd4af5384","blockSize":4194304,"blocks":["93953a5ba61c80c40161977755bfa68521cfc1ac95bcbd43d968010fd4af5384"]}}}},"object-assign":{"files":{"index.js":{"size":2108,"offset":"21978572","integrity":{"algorithm":"SHA256","hash":"e02cb9714ef6e561e971fe400644330212f07ca86120587199470d8b759a4b7c","blockSize":4194304,"blocks":["e02cb9714ef6e561e971fe400644330212f07ca86120587199470d8b759a4b7c"]}},"license":{"size":1119,"offset":"21980680","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":483,"offset":"21981799","integrity":{"algorithm":"SHA256","hash":"addc607a71a2726729fbcfafbf86f8915460fd69e4476a210a0abcc4143f5d46","blockSize":4194304,"blocks":["addc607a71a2726729fbcfafbf86f8915460fd69e4476a210a0abcc4143f5d46"]}}}},"once":{"files":{"LICENSE":{"size":765,"offset":"21982282","integrity":{"algorithm":"SHA256","hash":"4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b","blockSize":4194304,"blocks":["4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b"]}},"once.js":{"size":935,"offset":"21983047","integrity":{"algorithm":"SHA256","hash":"3db73e347ecbdbafdf8d0db85145c877e133f5372e767360ef90c09f70ac5103","blockSize":4194304,"blocks":["3db73e347ecbdbafdf8d0db85145c877e133f5372e767360ef90c09f70ac5103"]}},"package.json":{"size":452,"offset":"21983982","integrity":{"algorithm":"SHA256","hash":"fa72703fdfef576c9de9d444f92ee28fc4143580569a1272f4baa55f95c7154c","blockSize":4194304,"blocks":["fa72703fdfef576c9de9d444f92ee28fc4143580569a1272f4baa55f95c7154c"]}}}},"only":{"files":{"History.md":{"size":60,"offset":"21984434","integrity":{"algorithm":"SHA256","hash":"ad458ba179b55baebf93d3bea062f486e4b74fa659ee6c040597d30105149091","blockSize":4194304,"blocks":["ad458ba179b55baebf93d3bea062f486e4b74fa659ee6c040597d30105149091"]}},"index.js":{"size":247,"offset":"21984494","integrity":{"algorithm":"SHA256","hash":"6b4fda648735a0d17ed4f41d84414edf5cf70da65880700e94ff58bb755908f9","blockSize":4194304,"blocks":["6b4fda648735a0d17ed4f41d84414edf5cf70da65880700e94ff58bb755908f9"]}},"Makefile":{"size":89,"offset":"21984741","integrity":{"algorithm":"SHA256","hash":"48ca2ff6176c1b55924240627001ac1f7f13fcae94231671b128c94f8ad7f8bf","blockSize":4194304,"blocks":["48ca2ff6176c1b55924240627001ac1f7f13fcae94231671b128c94f8ad7f8bf"]}},"package.json":{"size":319,"offset":"21984830","integrity":{"algorithm":"SHA256","hash":"194f76dc9570bff9d089ae28dbe5806d76fbccfd4fa889be6d3e459d0a335651","blockSize":4194304,"blocks":["194f76dc9570bff9d089ae28dbe5806d76fbccfd4fa889be6d3e459d0a335651"]}}}},"original-fs":{"files":{"index.js":{"size":45,"offset":"21985149","integrity":{"algorithm":"SHA256","hash":"f56c2ac92040f10c4b97a6f445a1b17d669c857c8e5820f13f111ac41f7f7918","blockSize":4194304,"blocks":["f56c2ac92040f10c4b97a6f445a1b17d669c857c8e5820f13f111ac41f7f7918"]}},"index.mjs":{"size":49,"offset":"21985194","integrity":{"algorithm":"SHA256","hash":"0bfe62107d5e7226357db9491389bfa5388578894aa9ddaf9e527fbb05e157ba","blockSize":4194304,"blocks":["0bfe62107d5e7226357db9491389bfa5388578894aa9ddaf9e527fbb05e157ba"]}},"package.json":{"size":596,"offset":"21985243","integrity":{"algorithm":"SHA256","hash":"dc1e3588ca749d3308261cd117d5ea5a069d87f59a3ef0184e47a5d33566b1b9","blockSize":4194304,"blocks":["dc1e3588ca749d3308261cd117d5ea5a069d87f59a3ef0184e47a5d33566b1b9"]}},"promises.js":{"size":51,"offset":"21985839","integrity":{"algorithm":"SHA256","hash":"426010a60d78c57cbcd9bdda2a6b8b53164278105d33fead9986bf24663215c8","blockSize":4194304,"blocks":["426010a60d78c57cbcd9bdda2a6b8b53164278105d33fead9986bf24663215c8"]}},"promises.mjs":{"size":67,"offset":"21985890","integrity":{"algorithm":"SHA256","hash":"ade79d1a080d6b49a151b840c8312f3538ca8e0960f8211a206e395b72a79673","blockSize":4194304,"blocks":["ade79d1a080d6b49a151b840c8312f3538ca8e0960f8211a206e395b72a79673"]}}}},"p-finally":{"files":{"index.js":{"size":302,"offset":"21985957","integrity":{"algorithm":"SHA256","hash":"a0a259ddf5f5b786f51dfc6b8302aea8e8820e03ec7ab7be87f96cccd17efb4c","blockSize":4194304,"blocks":["a0a259ddf5f5b786f51dfc6b8302aea8e8820e03ec7ab7be87f96cccd17efb4c"]}},"license":{"size":1119,"offset":"21986259","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":464,"offset":"21987378","integrity":{"algorithm":"SHA256","hash":"88ab382cfd70ab437a9612c18c74c783e33dd85239a9edfa925c7b7520724d69","blockSize":4194304,"blocks":["88ab382cfd70ab437a9612c18c74c783e33dd85239a9edfa925c7b7520724d69"]}}}},"p-locate":{"files":{"index.js":{"size":1042,"offset":"21987842","integrity":{"algorithm":"SHA256","hash":"8e5e49ae61d019cf6f74e59e114190fc06bafa85c2084d1731b3ccbeb445e572","blockSize":4194304,"blocks":["8e5e49ae61d019cf6f74e59e114190fc06bafa85c2084d1731b3ccbeb445e572"]}},"license":{"size":1109,"offset":"21988884","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"node_modules":{"files":{"p-limit":{"files":{"index.js":{"size":1114,"offset":"21989993","integrity":{"algorithm":"SHA256","hash":"b005ce7e192e136df67e3b724bfc156c396ac46928c79508d6fd532bef98cbec","blockSize":4194304,"blocks":["b005ce7e192e136df67e3b724bfc156c396ac46928c79508d6fd532bef98cbec"]}},"license":{"size":1109,"offset":"21991107","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":709,"offset":"21992216","integrity":{"algorithm":"SHA256","hash":"d4c39a75c26a413b0a7b28873811e5cfad2b1d134db1d9c19c7f566f3d25c212","blockSize":4194304,"blocks":["d4c39a75c26a413b0a7b28873811e5cfad2b1d134db1d9c19c7f566f3d25c212"]}}}},"p-try":{"files":{"index.js":{"size":211,"offset":"21992925","integrity":{"algorithm":"SHA256","hash":"98b069ba5ff64b0f988162a310c47110d5c121d42c33aa7314817393f453c9e3","blockSize":4194304,"blocks":["98b069ba5ff64b0f988162a310c47110d5c121d42c33aa7314817393f453c9e3"]}},"license":{"size":1109,"offset":"21993136","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":440,"offset":"21994245","integrity":{"algorithm":"SHA256","hash":"af5c7cbf707e18ced31d8a8732df1224b2af6bdc72c5de070fc1b2dea20706e8","blockSize":4194304,"blocks":["af5c7cbf707e18ced31d8a8732df1224b2af6bdc72c5de070fc1b2dea20706e8"]}}}}}},"package.json":{"size":575,"offset":"21994685","integrity":{"algorithm":"SHA256","hash":"8c699ec0acfdc16eab80011a4aa974195fb461aeb4d7b577f0af19c8636d32f8","blockSize":4194304,"blocks":["8c699ec0acfdc16eab80011a4aa974195fb461aeb4d7b577f0af19c8636d32f8"]}}}},"parseurl":{"files":{"HISTORY.md":{"size":1043,"offset":"21995260","integrity":{"algorithm":"SHA256","hash":"aa6e5cd75ddde03b54623af11e6aeb6f92ccf6a1c69805b20890228182030189","blockSize":4194304,"blocks":["aa6e5cd75ddde03b54623af11e6aeb6f92ccf6a1c69805b20890228182030189"]}},"index.js":{"size":2809,"offset":"21996303","integrity":{"algorithm":"SHA256","hash":"811223d4a19492ccc642384dc84f0af4ad935557dfe8f63750d7ffd673e40f17","blockSize":4194304,"blocks":["811223d4a19492ccc642384dc84f0af4ad935557dfe8f63750d7ffd673e40f17"]}},"LICENSE":{"size":1173,"offset":"21999112","integrity":{"algorithm":"SHA256","hash":"11d017c3b9f1ee3f44caf7203035f0461d5b57e0db8ce1bc03a9af34fa7d3f6b","blockSize":4194304,"blocks":["11d017c3b9f1ee3f44caf7203035f0461d5b57e0db8ce1bc03a9af34fa7d3f6b"]}},"package.json":{"size":657,"offset":"22000285","integrity":{"algorithm":"SHA256","hash":"dcdd7900acf463a0223948001377aa953cce39e95b70ce14f9479d4b0fbccc22","blockSize":4194304,"blocks":["dcdd7900acf463a0223948001377aa953cce39e95b70ce14f9479d4b0fbccc22"]}}}},"path-exists":{"files":{"index.js":{"size":252,"offset":"22000942","integrity":{"algorithm":"SHA256","hash":"2557a5378ea2cab729e51b6fce5da24c782940d219a6bd6ade069190e919894f","blockSize":4194304,"blocks":["2557a5378ea2cab729e51b6fce5da24c782940d219a6bd6ade069190e919894f"]}},"license":{"size":1119,"offset":"22001194","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":402,"offset":"22002313","integrity":{"algorithm":"SHA256","hash":"30b5457bd77ccd35aa32ba51fa8296b0a3b682f6444f8dba1500559a645f6e95","blockSize":4194304,"blocks":["30b5457bd77ccd35aa32ba51fa8296b0a3b682f6444f8dba1500559a645f6e95"]}}}},"path-key":{"files":{"index.js":{"size":281,"offset":"22002715","integrity":{"algorithm":"SHA256","hash":"4f72788d208ec60f7566b763ce3a588f0b16d7d51700ae128874353ae190fab4","blockSize":4194304,"blocks":["4f72788d208ec60f7566b763ce3a588f0b16d7d51700ae128874353ae190fab4"]}},"license":{"size":1119,"offset":"22002996","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":426,"offset":"22004115","integrity":{"algorithm":"SHA256","hash":"f80e9f42706494054ee0482b4d025d304be02275c191b05d941048d84229eb7c","blockSize":4194304,"blocks":["f80e9f42706494054ee0482b4d025d304be02275c191b05d941048d84229eb7c"]}}}},"picocolors":{"files":{"LICENSE":{"size":781,"offset":"22004541","integrity":{"algorithm":"SHA256","hash":"800a78e2d6fa0af131b5ed2547504b4db64a10123f5df37161d15e2015023a8f","blockSize":4194304,"blocks":["800a78e2d6fa0af131b5ed2547504b4db64a10123f5df37161d15e2015023a8f"]}},"package.json":{"size":455,"offset":"22005322","integrity":{"algorithm":"SHA256","hash":"97d18223dabada33d537f93543c32e1a6d3343c440d62e966eff7e1960ab21df","blockSize":4194304,"blocks":["97d18223dabada33d537f93543c32e1a6d3343c440d62e966eff7e1960ab21df"]}},"picocolors.browser.js":{"size":360,"offset":"22005777","integrity":{"algorithm":"SHA256","hash":"0c94d2b0491c05541062d9a13ca72a148ae7961d3c31dab7f44e387c6d46b7b3","blockSize":4194304,"blocks":["0c94d2b0491c05541062d9a13ca72a148ae7961d3c31dab7f44e387c6d46b7b3"]}},"picocolors.js":{"size":2594,"offset":"22006137","integrity":{"algorithm":"SHA256","hash":"9ef8785acb25d88c74ecc7ed6e42ae8b3c6215f3e897645cb5b55262170ee27d","blockSize":4194304,"blocks":["9ef8785acb25d88c74ecc7ed6e42ae8b3c6215f3e897645cb5b55262170ee27d"]}},"types.ts":{"size":610,"offset":"22008731","integrity":{"algorithm":"SHA256","hash":"576d63ef3a0408e9044ab3855ea0877b5f0c674752d4a339d79b8ed6bb88b02a","blockSize":4194304,"blocks":["576d63ef3a0408e9044ab3855ea0877b5f0c674752d4a339d79b8ed6bb88b02a"]}}}},"pinkie":{"files":{"index.js":{"size":5935,"offset":"22011017","integrity":{"algorithm":"SHA256","hash":"8c78d177d3a72d5e7e6586b5d5e4327399d008bfd96cf15e42da655e2fe293a1","blockSize":4194304,"blocks":["8c78d177d3a72d5e7e6586b5d5e4327399d008bfd96cf15e42da655e2fe293a1"]}},"license":{"size":1128,"offset":"22016952","integrity":{"algorithm":"SHA256","hash":"6ee0feb1f6ef996ff5a68600f8cf98909cf412d39ef3cdceaefd87d636fa1b7f","blockSize":4194304,"blocks":["6ee0feb1f6ef996ff5a68600f8cf98909cf412d39ef3cdceaefd87d636fa1b7f"]}},"package.json":{"size":569,"offset":"22018080","integrity":{"algorithm":"SHA256","hash":"b1657956e29ee87f6cbfec5793ba92964466ec360e985df6bf265e3473034119","blockSize":4194304,"blocks":["b1657956e29ee87f6cbfec5793ba92964466ec360e985df6bf265e3473034119"]}}}},"pinkie-promise":{"files":{"index.js":{"size":93,"offset":"22009341","integrity":{"algorithm":"SHA256","hash":"101192976ed9972cf8cfe365b6bcff41f7d054560f8dfb861573690f3e7bb421","blockSize":4194304,"blocks":["101192976ed9972cf8cfe365b6bcff41f7d054560f8dfb861573690f3e7bb421"]}},"license":{"size":1128,"offset":"22009434","integrity":{"algorithm":"SHA256","hash":"6ee0feb1f6ef996ff5a68600f8cf98909cf412d39ef3cdceaefd87d636fa1b7f","blockSize":4194304,"blocks":["6ee0feb1f6ef996ff5a68600f8cf98909cf412d39ef3cdceaefd87d636fa1b7f"]}},"package.json":{"size":455,"offset":"22010562","integrity":{"algorithm":"SHA256","hash":"faaad450a4f5e91f03a798c47034a93890bd66f71baffad82b3eb7f6e037ab85","blockSize":4194304,"blocks":["faaad450a4f5e91f03a798c47034a93890bd66f71baffad82b3eb7f6e037ab85"]}}}},"pngjs":{"files":{".eslintrc.json":{"size":6676,"offset":"22018649","integrity":{"algorithm":"SHA256","hash":"a99e74f0dc70ac6b61be5871a7c76591a10909d242380bfc156ab965a1a022d7","blockSize":4194304,"blocks":["a99e74f0dc70ac6b61be5871a7c76591a10909d242380bfc156ab965a1a022d7"]}},"browser.js":{"size":464995,"offset":"22025325","integrity":{"algorithm":"SHA256","hash":"602218c3286e5b8587735bbbce84c305ef6b35e82f2bcc1a7ca38c75e5d1dbf0","blockSize":4194304,"blocks":["602218c3286e5b8587735bbbce84c305ef6b35e82f2bcc1a7ca38c75e5d1dbf0"]}},"lib":{"files":{"bitmapper.js":{"size":6327,"offset":"22490320","integrity":{"algorithm":"SHA256","hash":"be1195f2fcaa628541d35efb348f82406a93423e99205738c8833243f1331fe0","blockSize":4194304,"blocks":["be1195f2fcaa628541d35efb348f82406a93423e99205738c8833243f1331fe0"]}},"bitpacker.js":{"size":4524,"offset":"22496647","integrity":{"algorithm":"SHA256","hash":"c53fd19bed109177596fb411b3fe79e45ec04d1de3df3441e973080cbd8e7e84","blockSize":4194304,"blocks":["c53fd19bed109177596fb411b3fe79e45ec04d1de3df3441e973080cbd8e7e84"]}},"chunkstream.js":{"size":4241,"offset":"22501171","integrity":{"algorithm":"SHA256","hash":"0614a5b81720edcf2b678cabefb2c1758a540acb2280a60079ad65a5f589c2aa","blockSize":4194304,"blocks":["0614a5b81720edcf2b678cabefb2c1758a540acb2280a60079ad65a5f589c2aa"]}},"constants.js":{"size":662,"offset":"22505412","integrity":{"algorithm":"SHA256","hash":"6eb55612047253a3791953f2f84cd204498b2ba8c018c8f9761cf8a9eeb57545","blockSize":4194304,"blocks":["6eb55612047253a3791953f2f84cd204498b2ba8c018c8f9761cf8a9eeb57545"]}},"crc.js":{"size":855,"offset":"22506074","integrity":{"algorithm":"SHA256","hash":"0eb76f03e907c5cc34bd074ee141adf047e9ea1d94224c97f6a92c1a6b6c23c5","blockSize":4194304,"blocks":["0eb76f03e907c5cc34bd074ee141adf047e9ea1d94224c97f6a92c1a6b6c23c5"]}},"filter-pack.js":{"size":4285,"offset":"22506929","integrity":{"algorithm":"SHA256","hash":"bad743c255c11cef43cc4c4f99fbb8d129fe3f0ef5ae10ed045f9aff80b7ee8a","blockSize":4194304,"blocks":["bad743c255c11cef43cc4c4f99fbb8d129fe3f0ef5ae10ed045f9aff80b7ee8a"]}},"filter-parse-async.js":{"size":553,"offset":"22511214","integrity":{"algorithm":"SHA256","hash":"663acba26c5f52484deb0fdcd53914db54e5327feb29f1c5eff4d0c27d6f8359","blockSize":4194304,"blocks":["663acba26c5f52484deb0fdcd53914db54e5327feb29f1c5eff4d0c27d6f8359"]}},"filter-parse-sync.js":{"size":485,"offset":"22511767","integrity":{"algorithm":"SHA256","hash":"6073597d638a1a18c66f9100837259f78a95015f967bf86f788f1eeae5c0547e","blockSize":4194304,"blocks":["6073597d638a1a18c66f9100837259f78a95015f967bf86f788f1eeae5c0547e"]}},"filter-parse.js":{"size":4760,"offset":"22512252","integrity":{"algorithm":"SHA256","hash":"2572920244ba6e6454f826698c1fa4701586a1dfc3ab1d59a60b0027d30483fa","blockSize":4194304,"blocks":["2572920244ba6e6454f826698c1fa4701586a1dfc3ab1d59a60b0027d30483fa"]}},"format-normaliser.js":{"size":2279,"offset":"22517012","integrity":{"algorithm":"SHA256","hash":"ae7402d2f2f291accb561693edac643500b46d72f4f4ad04dc5e675afb18369c","blockSize":4194304,"blocks":["ae7402d2f2f291accb561693edac643500b46d72f4f4ad04dc5e675afb18369c"]}},"interlace.js":{"size":1957,"offset":"22519291","integrity":{"algorithm":"SHA256","hash":"de87587d193c3b7b1feb61c388d4b6002912e0019b3e696f269dac07b76dc91b","blockSize":4194304,"blocks":["de87587d193c3b7b1feb61c388d4b6002912e0019b3e696f269dac07b76dc91b"]}},"packer-async.js":{"size":1122,"offset":"22521248","integrity":{"algorithm":"SHA256","hash":"b711d8ba955e270dc441e295a1018f87c251743b722d96deabb6554f617e5aaf","blockSize":4194304,"blocks":["b711d8ba955e270dc441e295a1018f87c251743b722d96deabb6554f617e5aaf"]}},"packer-sync.js":{"size":1152,"offset":"22522370","integrity":{"algorithm":"SHA256","hash":"2a6d00ff05b460a82954751d213ad19590f1c0a2f8b7590a6c71f6655c959c00","blockSize":4194304,"blocks":["2a6d00ff05b460a82954751d213ad19590f1c0a2f8b7590a6c71f6655c959c00"]}},"packer.js":{"size":3567,"offset":"22523522","integrity":{"algorithm":"SHA256","hash":"a1d43f01b05a720eb44c08a80002dd7727bb7f8933ed8e10b1444591bc085385","blockSize":4194304,"blocks":["a1d43f01b05a720eb44c08a80002dd7727bb7f8933ed8e10b1444591bc085385"]}},"paeth-predictor.js":{"size":388,"offset":"22527089","integrity":{"algorithm":"SHA256","hash":"23719d0df810b0e20aeb88779e477c2051652f539fb2ed10965db6c28d1239c7","blockSize":4194304,"blocks":["23719d0df810b0e20aeb88779e477c2051652f539fb2ed10965db6c28d1239c7"]}},"parser-async.js":{"size":4253,"offset":"22527477","integrity":{"algorithm":"SHA256","hash":"8378a3fe840c5a6771e4a2500f5b88451d487b7578d3f12b1f43bc639abf86e6","blockSize":4194304,"blocks":["8378a3fe840c5a6771e4a2500f5b88451d487b7578d3f12b1f43bc639abf86e6"]}},"parser-sync.js":{"size":2510,"offset":"22531730","integrity":{"algorithm":"SHA256","hash":"03391919c4caf23ff6fb60b89a6a50ec47caca3a761df103fbb5e96eae542ede","blockSize":4194304,"blocks":["03391919c4caf23ff6fb60b89a6a50ec47caca3a761df103fbb5e96eae542ede"]}},"parser.js":{"size":7686,"offset":"22534240","integrity":{"algorithm":"SHA256","hash":"6fb06e825b55ff5baa937369044882167026ac0c01c684dfe1f04cc4216a1856","blockSize":4194304,"blocks":["6fb06e825b55ff5baa937369044882167026ac0c01c684dfe1f04cc4216a1856"]}},"png-sync.js":{"size":254,"offset":"22541926","integrity":{"algorithm":"SHA256","hash":"7289deffadd1ca6c29ac1127de6058a8b5cc5433d752fb69536ee9c3517dd8c7","blockSize":4194304,"blocks":["7289deffadd1ca6c29ac1127de6058a8b5cc5433d752fb69536ee9c3517dd8c7"]}},"png.js":{"size":4296,"offset":"22542180","integrity":{"algorithm":"SHA256","hash":"790e2776d7b3401bf18564969f38a41796384646f1e4535d179c016d6b41d632","blockSize":4194304,"blocks":["790e2776d7b3401bf18564969f38a41796384646f1e4535d179c016d6b41d632"]}},"sync-inflate.js":{"size":3704,"offset":"22546476","integrity":{"algorithm":"SHA256","hash":"03ffd5c70c31067421ade360681c7e93d6822a03caffea10abc1b995aee2516f","blockSize":4194304,"blocks":["03ffd5c70c31067421ade360681c7e93d6822a03caffea10abc1b995aee2516f"]}},"sync-reader.js":{"size":1104,"offset":"22550180","integrity":{"algorithm":"SHA256","hash":"408d893d0c4f71724d1ce9347e225349df7cd4cd5e0307b47628f9611ff64735","blockSize":4194304,"blocks":["408d893d0c4f71724d1ce9347e225349df7cd4cd5e0307b47628f9611ff64735"]}}}},"LICENSE":{"size":1151,"offset":"22551284","integrity":{"algorithm":"SHA256","hash":"176b07a18c0bb3836aaeb61088fd0bf11a38f66e6f15e3fbda85faa225250d6e","blockSize":4194304,"blocks":["176b07a18c0bb3836aaeb61088fd0bf11a38f66e6f15e3fbda85faa225250d6e"]}},"package.json":{"size":762,"offset":"22552435","integrity":{"algorithm":"SHA256","hash":"cc110b988a723101ac90056f755699bc1fe82fc2f7976347fdb2a45eb5b58120","blockSize":4194304,"blocks":["cc110b988a723101ac90056f755699bc1fe82fc2f7976347fdb2a45eb5b58120"]}}}},"prepend-http":{"files":{"index.js":{"size":387,"offset":"22553197","integrity":{"algorithm":"SHA256","hash":"684fa9c4f5ccd39de740e404fec3466fd84b666efed6a09307cd11b54bc3db85","blockSize":4194304,"blocks":["684fa9c4f5ccd39de740e404fec3466fd84b666efed6a09307cd11b54bc3db85"]}},"license":{"size":1109,"offset":"22553584","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":448,"offset":"22554693","integrity":{"algorithm":"SHA256","hash":"aaf700bd3b4dbe47b87587c67eb9c6b43844b702d676f767a0d1dc3dc97426a1","blockSize":4194304,"blocks":["aaf700bd3b4dbe47b87587c67eb9c6b43844b702d676f767a0d1dc3dc97426a1"]}}}},"pseudomap":{"files":{"LICENSE":{"size":765,"offset":"22555141","integrity":{"algorithm":"SHA256","hash":"4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b","blockSize":4194304,"blocks":["4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b"]}},"map.js":{"size":280,"offset":"22555906","integrity":{"algorithm":"SHA256","hash":"c5a736d310d63027b396ac5af743b45b2128fc1207a2cd346dee83a2f892f7a5","blockSize":4194304,"blocks":["c5a736d310d63027b396ac5af743b45b2128fc1207a2cd346dee83a2f892f7a5"]}},"package.json":{"size":561,"offset":"22556186","integrity":{"algorithm":"SHA256","hash":"eccbd83f487e8804dfd4e093195289c0e282c607411c0a667ba6c326da4bd781","blockSize":4194304,"blocks":["eccbd83f487e8804dfd4e093195289c0e282c607411c0a667ba6c326da4bd781"]}},"pseudomap.js":{"size":2437,"offset":"22556747","integrity":{"algorithm":"SHA256","hash":"4d4094f8f06fdc7383d0ecaebcacb9248bdffffd96c5091d2250be123c083a62","blockSize":4194304,"blocks":["4d4094f8f06fdc7383d0ecaebcacb9248bdffffd96c5091d2250be123c083a62"]}}}},"pump":{"files":{"index.js":{"size":2224,"offset":"22559184","integrity":{"algorithm":"SHA256","hash":"60ae01725219c69e086e0cfe6a6da1f94a9bafcfbf528460b6e04b7b6d983165","blockSize":4194304,"blocks":["60ae01725219c69e086e0cfe6a6da1f94a9bafcfbf528460b6e04b7b6d983165"]}},"LICENSE":{"size":1078,"offset":"22561408","integrity":{"algorithm":"SHA256","hash":"3fe8d55a98dbf260eace67c00cf9bc53edb46234e840098a0b93df3096b97fb6","blockSize":4194304,"blocks":["3fe8d55a98dbf260eace67c00cf9bc53edb46234e840098a0b93df3096b97fb6"]}},"package.json":{"size":375,"offset":"22562486","integrity":{"algorithm":"SHA256","hash":"e367dc856e596bbc98ff06b077cc5f4a66ffc31d185f1e9b7b89f875c0ec3faf","blockSize":4194304,"blocks":["e367dc856e596bbc98ff06b077cc5f4a66ffc31d185f1e9b7b89f875c0ec3faf"]}},"test-browser.js":{"size":1172,"offset":"22562861","integrity":{"algorithm":"SHA256","hash":"bfdd31d421d9975519122715df56e81662abf283e386bda1d7141ef277f70191","blockSize":4194304,"blocks":["bfdd31d421d9975519122715df56e81662abf283e386bda1d7141ef277f70191"]}},"test-node.js":{"size":992,"offset":"22564033","integrity":{"algorithm":"SHA256","hash":"04b7b585e056fccea011f300815d9f19afb190b7c88f5bc575aeac8b5dd00ded","blockSize":4194304,"blocks":["04b7b585e056fccea011f300815d9f19afb190b7c88f5bc575aeac8b5dd00ded"]}}}},"qrcode":{"files":{"bin":{"files":{"qrcode":{"size":3300,"offset":"22565025","integrity":{"algorithm":"SHA256","hash":"0051d8f8b68e87796f5f6eed3adf0d0ec53f64e1823638f5006d30a76c6059d9","blockSize":4194304,"blocks":["0051d8f8b68e87796f5f6eed3adf0d0ec53f64e1823638f5006d30a76c6059d9"]}}}},"build":{"files":{"qrcode.js":{"size":390000,"offset":"22568325","integrity":{"algorithm":"SHA256","hash":"d8d896b31f1c4068608f4b357dcb127b9704cd4f58972b231e3b1d05eaefb7c4","blockSize":4194304,"blocks":["d8d896b31f1c4068608f4b357dcb127b9704cd4f58972b231e3b1d05eaefb7c4"]}},"qrcode.min.js":{"size":55131,"offset":"22958325","integrity":{"algorithm":"SHA256","hash":"0e1769a0feb8c5c87f16bcfc0a2050135d9e9f9e4d5fe46194f19183a2969b9b","blockSize":4194304,"blocks":["0e1769a0feb8c5c87f16bcfc0a2050135d9e9f9e4d5fe46194f19183a2969b9b"]}},"qrcode.min.js.map":{"size":84969,"offset":"23013456","integrity":{"algorithm":"SHA256","hash":"4b68ef19d0d712982e245d921edf0f33e33a250f5189a1e2ecb14a7fba2cddf4","blockSize":4194304,"blocks":["4b68ef19d0d712982e245d921edf0f33e33a250f5189a1e2ecb14a7fba2cddf4"]}},"qrcode.tosjis.js":{"size":53139,"offset":"23098425","integrity":{"algorithm":"SHA256","hash":"8dd6edfcc1e4a5bd2df83ef72fb22223efde6ae2d042b0b2a6afbc74573deb4d","blockSize":4194304,"blocks":["8dd6edfcc1e4a5bd2df83ef72fb22223efde6ae2d042b0b2a6afbc74573deb4d"]}},"qrcode.tosjis.min.js":{"size":21884,"offset":"23151564","integrity":{"algorithm":"SHA256","hash":"53521883a526a28db51b245a5d5faf408c1814f72cb39dd47c56f3f4568d59cf","blockSize":4194304,"blocks":["53521883a526a28db51b245a5d5faf408c1814f72cb39dd47c56f3f4568d59cf"]}},"qrcode.tosjis.min.js.map":{"size":2299,"offset":"23173448","integrity":{"algorithm":"SHA256","hash":"d046614eaa03afa32fe82ee6160f89f89478f3af5e1eabb9b0c3d5f696102638","blockSize":4194304,"blocks":["d046614eaa03afa32fe82ee6160f89f89478f3af5e1eabb9b0c3d5f696102638"]}}}},"helper":{"files":{"to-sjis.js":{"size":21638,"offset":"23175747","integrity":{"algorithm":"SHA256","hash":"a6cf403a89259ed6432fadbb2fb957b1ae10763d60f66335a2643c6cf08e26b2","blockSize":4194304,"blocks":["a6cf403a89259ed6432fadbb2fb957b1ae10763d60f66335a2643c6cf08e26b2"]}}}},"lib":{"files":{"browser.js":{"size":1868,"offset":"23197385","integrity":{"algorithm":"SHA256","hash":"c38f5ea8e882d7c8c5029c1592f0e28d896530fc7fdf75d6631e1118f9f0ee84","blockSize":4194304,"blocks":["c38f5ea8e882d7c8c5029c1592f0e28d896530fc7fdf75d6631e1118f9f0ee84"]}},"can-promise.js":{"size":275,"offset":"23199253","integrity":{"algorithm":"SHA256","hash":"fd18906803bd4cfe4f23801a7032c5a1e10be31274ba25dc34541932cdd8f253","blockSize":4194304,"blocks":["fd18906803bd4cfe4f23801a7032c5a1e10be31274ba25dc34541932cdd8f253"]}},"core":{"files":{"alignment-pattern.js":{"size":2992,"offset":"23199528","integrity":{"algorithm":"SHA256","hash":"fddf6916a51436bf1424ea225dd9f47ddc221c6001a0b57370aa78a4fe13bce7","blockSize":4194304,"blocks":["fddf6916a51436bf1424ea225dd9f47ddc221c6001a0b57370aa78a4fe13bce7"]}},"alphanumeric-data.js":{"size":1818,"offset":"23202520","integrity":{"algorithm":"SHA256","hash":"7da4763841fca8a1527d1f47e84b090c7d187380e8bad937be95ac8b60b1f9e5","blockSize":4194304,"blocks":["7da4763841fca8a1527d1f47e84b090c7d187380e8bad937be95ac8b60b1f9e5"]}},"bit-buffer.js":{"size":715,"offset":"23204338","integrity":{"algorithm":"SHA256","hash":"b691373ef80867935c8e88866a86d2cf57595558ce8d7aea7de58b63db2cc85a","blockSize":4194304,"blocks":["b691373ef80867935c8e88866a86d2cf57595558ce8d7aea7de58b63db2cc85a"]}},"bit-matrix.js":{"size":1548,"offset":"23205053","integrity":{"algorithm":"SHA256","hash":"4466f8fca227173ca198ab24827b9d4550015c93e1b37044b8cd656f494990dc","blockSize":4194304,"blocks":["4466f8fca227173ca198ab24827b9d4550015c93e1b37044b8cd656f494990dc"]}},"byte-data.js":{"size":618,"offset":"23206601","integrity":{"algorithm":"SHA256","hash":"13784bf654b98f80df32778557227c9ed38560cb577ac52b807c3b472b5fcae0","blockSize":4194304,"blocks":["13784bf654b98f80df32778557227c9ed38560cb577ac52b807c3b472b5fcae0"]}},"error-correction-code.js":{"size":3409,"offset":"23207219","integrity":{"algorithm":"SHA256","hash":"586ccddb0c624de1c77065c2c9bd8c720ed9b25696bb9eedff171a324a3e7df6","blockSize":4194304,"blocks":["586ccddb0c624de1c77065c2c9bd8c720ed9b25696bb9eedff171a324a3e7df6"]}},"error-correction-level.js":{"size":891,"offset":"23210628","integrity":{"algorithm":"SHA256","hash":"3304dee9019a91a52f8a8fce0146143969a4cabd5369ae7707bf503791a8750b","blockSize":4194304,"blocks":["3304dee9019a91a52f8a8fce0146143969a4cabd5369ae7707bf503791a8750b"]}},"finder-pattern.js":{"size":593,"offset":"23211519","integrity":{"algorithm":"SHA256","hash":"c47eb5347f62f8380c066328aea135b0176c0160e8a550330b81b22cd788b2d2","blockSize":4194304,"blocks":["c47eb5347f62f8380c066328aea135b0176c0160e8a550330b81b22cd788b2d2"]}},"format-info.js":{"size":1116,"offset":"23212112","integrity":{"algorithm":"SHA256","hash":"60803edddab0354533308e9a64da9b84e1712757b778295dc9f7269fa332a507","blockSize":4194304,"blocks":["60803edddab0354533308e9a64da9b84e1712757b778295dc9f7269fa332a507"]}},"galois-field.js":{"size":1940,"offset":"23213228","integrity":{"algorithm":"SHA256","hash":"9f33ea2087dfab99dacba863e79771532ec9822e26e57f8e0a2a8bca3ffb343a","blockSize":4194304,"blocks":["9f33ea2087dfab99dacba863e79771532ec9822e26e57f8e0a2a8bca3ffb343a"]}},"kanji-data.js":{"size":1580,"offset":"23215168","integrity":{"algorithm":"SHA256","hash":"2cc50ab3ac8b12b421f2957d455411edb6b9b1c3eb504138420fae6fa70f26c6","blockSize":4194304,"blocks":["2cc50ab3ac8b12b421f2957d455411edb6b9b1c3eb504138420fae6fa70f26c6"]}},"mask-pattern.js":{"size":6081,"offset":"23216748","integrity":{"algorithm":"SHA256","hash":"5dac163e03f4b10ad83b7fa1e8d582d42e1047fa01eb25aa72a7efd78b70a125","blockSize":4194304,"blocks":["5dac163e03f4b10ad83b7fa1e8d582d42e1047fa01eb25aa72a7efd78b70a125"]}},"mode.js":{"size":3977,"offset":"23222829","integrity":{"algorithm":"SHA256","hash":"aae42483d9b92b40194a99162356af9cf225ec85f44d0126016b579524ab320d","blockSize":4194304,"blocks":["aae42483d9b92b40194a99162356af9cf225ec85f44d0126016b579524ab320d"]}},"numeric-data.js":{"size":1207,"offset":"23226806","integrity":{"algorithm":"SHA256","hash":"3d549adb05da2028dded7df289f3af56223a7dd42bf2c7baafbdc171b21c6618","blockSize":4194304,"blocks":["3d549adb05da2028dded7df289f3af56223a7dd42bf2c7baafbdc171b21c6618"]}},"polynomial.js":{"size":1591,"offset":"23228013","integrity":{"algorithm":"SHA256","hash":"e86a4540bb8f1bbce518e85aa01583a1171a5b06c43622a35cfee477735d5179","blockSize":4194304,"blocks":["e86a4540bb8f1bbce518e85aa01583a1171a5b06c43622a35cfee477735d5179"]}},"qrcode.js":{"size":15108,"offset":"23229604","integrity":{"algorithm":"SHA256","hash":"59f0f999d45f86ae21d93411c433acfb356d1a3a322bf94f31348228788dbfdb","blockSize":4194304,"blocks":["59f0f999d45f86ae21d93411c433acfb356d1a3a322bf94f31348228788dbfdb"]}},"reed-solomon-encoder.js":{"size":1723,"offset":"23244712","integrity":{"algorithm":"SHA256","hash":"0e57fc2a7f558a97321dcd23dcb139225c4782eaaa69953144fdb0e75038592d","blockSize":4194304,"blocks":["0e57fc2a7f558a97321dcd23dcb139225c4782eaaa69953144fdb0e75038592d"]}},"regex.js":{"size":1072,"offset":"23246435","integrity":{"algorithm":"SHA256","hash":"17dd5e4e658f1c7b09e23f8694029d504351a7b0ecdf4638d06da16b35482144","blockSize":4194304,"blocks":["17dd5e4e658f1c7b09e23f8694029d504351a7b0ecdf4638d06da16b35482144"]}},"segments.js":{"size":9274,"offset":"23247507","integrity":{"algorithm":"SHA256","hash":"c48a873425a60eecaf81951951a2df57c93af37e57d8149bc193cb36d94928c0","blockSize":4194304,"blocks":["c48a873425a60eecaf81951951a2df57c93af37e57d8149bc193cb36d94928c0"]}},"utils.js":{"size":1619,"offset":"23256781","integrity":{"algorithm":"SHA256","hash":"ff8a0144d55bdea8a2d8553ae31a046998e86b77ff9324087821f6b5686e7f37","blockSize":4194304,"blocks":["ff8a0144d55bdea8a2d8553ae31a046998e86b77ff9324087821f6b5686e7f37"]}},"version-check.js":{"size":268,"offset":"23258400","integrity":{"algorithm":"SHA256","hash":"9cffe3a6f9cbb978022c0d0b1652fb2f3d381b9e48b7e01dfc744ded28736da2","blockSize":4194304,"blocks":["9cffe3a6f9cbb978022c0d0b1652fb2f3d381b9e48b7e01dfc744ded28736da2"]}},"version.js":{"size":4927,"offset":"23258668","integrity":{"algorithm":"SHA256","hash":"a65265b60d434f20436c2d587b5b933e76022ba9e0a70afb953c4a6eacf62989","blockSize":4194304,"blocks":["a65265b60d434f20436c2d587b5b933e76022ba9e0a70afb953c4a6eacf62989"]}}}},"index.js":{"size":303,"offset":"23263595","integrity":{"algorithm":"SHA256","hash":"c1f2fa38779ae32562a32a1392f7f747649d3ec839eebb934950cee25fb1c2b4","blockSize":4194304,"blocks":["c1f2fa38779ae32562a32a1392f7f747649d3ec839eebb934950cee25fb1c2b4"]}},"renderer":{"files":{"canvas.js":{"size":1487,"offset":"23263898","integrity":{"algorithm":"SHA256","hash":"289ccfd3af5019d3909c16f287a516b2953852de2f1b14c22927a2b18d20c545","blockSize":4194304,"blocks":["289ccfd3af5019d3909c16f287a516b2953852de2f1b14c22927a2b18d20c545"]}},"png.js":{"size":1628,"offset":"23265385","integrity":{"algorithm":"SHA256","hash":"4b4c9e1aa2db630eef9aa38528b2a0612ed1a940dbd4b493e878a59fe6563583","blockSize":4194304,"blocks":["4b4c9e1aa2db630eef9aa38528b2a0612ed1a940dbd4b493e878a59fe6563583"]}},"svg-tag.js":{"size":1943,"offset":"23267013","integrity":{"algorithm":"SHA256","hash":"bc09a1ebd032bbcd19dd779dbcb3c92b7541536ec3ba0a6c531bf49d3c4db5ea","blockSize":4194304,"blocks":["bc09a1ebd032bbcd19dd779dbcb3c92b7541536ec3ba0a6c531bf49d3c4db5ea"]}},"svg.js":{"size":524,"offset":"23268956","integrity":{"algorithm":"SHA256","hash":"4595cb484b108fb0eda2a8fbc32000b868580d8b7a6cda0cfbb097d89d819094","blockSize":4194304,"blocks":["4595cb484b108fb0eda2a8fbc32000b868580d8b7a6cda0cfbb097d89d819094"]}},"terminal.js":{"size":1208,"offset":"23269480","integrity":{"algorithm":"SHA256","hash":"1cd7a941ea3dc0f9a72cc3302c5ff5d9ba280a7e122d1526932eae8cbbe5a62e","blockSize":4194304,"blocks":["1cd7a941ea3dc0f9a72cc3302c5ff5d9ba280a7e122d1526932eae8cbbe5a62e"]}},"utf8.js":{"size":1557,"offset":"23270688","integrity":{"algorithm":"SHA256","hash":"ea525a5f943d8d9afe2b2f7c83c229bae582354108de8038f03956bfa28efba8","blockSize":4194304,"blocks":["ea525a5f943d8d9afe2b2f7c83c229bae582354108de8038f03956bfa28efba8"]}},"utils.js":{"size":2860,"offset":"23272245","integrity":{"algorithm":"SHA256","hash":"74a767cea8aefe3666f61573b2fefe87201e714e815c7c2af1e42879e83dbbed","blockSize":4194304,"blocks":["74a767cea8aefe3666f61573b2fefe87201e714e815c7c2af1e42879e83dbbed"]}}}},"server.js":{"size":3483,"offset":"23275105","integrity":{"algorithm":"SHA256","hash":"db16e59e64748d8f06058959a6cd2e04dce5a5558db51500c189fbac1b1f47dc","blockSize":4194304,"blocks":["db16e59e64748d8f06058959a6cd2e04dce5a5558db51500c189fbac1b1f47dc"]}},"utils":{"files":{"buffer.js":{"size":92,"offset":"23278588","integrity":{"algorithm":"SHA256","hash":"19d2ad1c51f75eedcc88187c882cbc2de35fc5752079ac281255c2d745abd88e","blockSize":4194304,"blocks":["19d2ad1c51f75eedcc88187c882cbc2de35fc5752079ac281255c2d745abd88e"]}},"typedarray-buffer.js":{"size":12842,"offset":"23278680","integrity":{"algorithm":"SHA256","hash":"342b41874def337488c4787c9a3d394759e4cdcda2627fc679a58b2849c0ad40","blockSize":4194304,"blocks":["342b41874def337488c4787c9a3d394759e4cdcda2627fc679a58b2849c0ad40"]}}}}}},"license":{"size":1076,"offset":"23291522","integrity":{"algorithm":"SHA256","hash":"8df47c6ad9ac2c41eb9b2a72def9908959da0ede8dadd56c7b249c1bdb0c5ce6","blockSize":4194304,"blocks":["8df47c6ad9ac2c41eb9b2a72def9908959da0ede8dadd56c7b249c1bdb0c5ce6"]}},"node_modules":{"files":{"isarray":{"files":{"index.js":{"size":132,"offset":"23292598","integrity":{"algorithm":"SHA256","hash":"9b8c691372802da788c9c5f4e1ca2f1ed0b88ab8722176c2aea15e38ec86d249","blockSize":4194304,"blocks":["9b8c691372802da788c9c5f4e1ca2f1ed0b88ab8722176c2aea15e38ec86d249"]}},"LICENSE":{"size":1096,"offset":"23292730","integrity":{"algorithm":"SHA256","hash":"68f12f6e2c33688699249c01d8f9623c534da20aa71989c57b061b7bc1676d14","blockSize":4194304,"blocks":["68f12f6e2c33688699249c01d8f9623c534da20aa71989c57b061b7bc1676d14"]}},"package.json":{"size":880,"offset":"23293826","integrity":{"algorithm":"SHA256","hash":"f3d5decaa93462b2430924a52575428136d958ffa74458d1ac3502c4296bedca","blockSize":4194304,"blocks":["f3d5decaa93462b2430924a52575428136d958ffa74458d1ac3502c4296bedca"]}}}}}},"package.json":{"size":1278,"offset":"23294706","integrity":{"algorithm":"SHA256","hash":"1378bb7b6567e063be85671219654cad3747a6e3cc0205843e459136085bc725","blockSize":4194304,"blocks":["1378bb7b6567e063be85671219654cad3747a6e3cc0205843e459136085bc725"]}}}},"read-last-lines":{"files":{"dist":{"files":{"index.js":{"size":1534,"offset":"23295984","integrity":{"algorithm":"SHA256","hash":"e6b3ef059bfda057d35400b1911c71e4b1884aceb0e2e32d31f45558b9e05649","blockSize":4194304,"blocks":["e6b3ef059bfda057d35400b1911c71e4b1884aceb0e2e32d31f45558b9e05649"]}}}},"LICENSE":{"size":1077,"offset":"23297518","integrity":{"algorithm":"SHA256","hash":"618176172cbe575268f06bd8d13c88bdfc186978c9e849b1e629f9962488143b","blockSize":4194304,"blocks":["618176172cbe575268f06bd8d13c88bdfc186978c9e849b1e629f9962488143b"]}},"package.json":{"size":937,"offset":"23298595","integrity":{"algorithm":"SHA256","hash":"0cfb16f8a96d899b83c14caddba6191ebcd19af1f0e0acdab282603d3ed34ba7","blockSize":4194304,"blocks":["0cfb16f8a96d899b83c14caddba6191ebcd19af1f0e0acdab282603d3ed34ba7"]}}}},"regenerator-runtime":{"files":{"LICENSE":{"size":1080,"offset":"23299532","integrity":{"algorithm":"SHA256","hash":"51887a3d47051ac2fce1210562e5b9fe0830a8a8fabeb272c2d586eeb18a05fd","blockSize":4194304,"blocks":["51887a3d47051ac2fce1210562e5b9fe0830a8a8fabeb272c2d586eeb18a05fd"]}},"package.json":{"size":392,"offset":"23300612","integrity":{"algorithm":"SHA256","hash":"6bb366bb032a0934c4e64fb8a44fc1466b577061f380e0b6a0c1fa23c2e30d51","blockSize":4194304,"blocks":["6bb366bb032a0934c4e64fb8a44fc1466b577061f380e0b6a0c1fa23c2e30d51"]}},"path.js":{"size":252,"offset":"23301004","integrity":{"algorithm":"SHA256","hash":"29c3a3cc09287a723eb6b9452a8175ebfbad00f96f47939ae0709906f7b7a1ee","blockSize":4194304,"blocks":["29c3a3cc09287a723eb6b9452a8175ebfbad00f96f47939ae0709906f7b7a1ee"]}},"runtime.js":{"size":24583,"offset":"23301256","integrity":{"algorithm":"SHA256","hash":"2d81987ea861c76c2a855617075f9298f6cd09c32be95d730011a19255a4ef4d","blockSize":4194304,"blocks":["2d81987ea861c76c2a855617075f9298f6cd09c32be95d730011a19255a4ef4d"]}}}},"require-directory":{"files":{"index.js":{"size":2867,"offset":"23325839","integrity":{"algorithm":"SHA256","hash":"65eaf8b7b519d6ae7be7ea20382d91a117d9c689897897ce4c2ee798e128a2d3","blockSize":4194304,"blocks":["65eaf8b7b519d6ae7be7ea20382d91a117d9c689897897ce4c2ee798e128a2d3"]}},"LICENSE":{"size":1099,"offset":"23328706","integrity":{"algorithm":"SHA256","hash":"a92e52eb1fa7cd746e3827bf01d3a3589bbc8e1e51348b1da042aad165525ad1","blockSize":4194304,"blocks":["a92e52eb1fa7cd746e3827bf01d3a3589bbc8e1e51348b1da042aad165525ad1"]}},"package.json":{"size":628,"offset":"23329805","integrity":{"algorithm":"SHA256","hash":"8d39ebdbac506ae5bf4c85e552a616ebfeb7cc858e14e72ac42521acee504174","blockSize":4194304,"blocks":["8d39ebdbac506ae5bf4c85e552a616ebfeb7cc858e14e72ac42521acee504174"]}},"README.markdown":{"size":5175,"offset":"23330433","integrity":{"algorithm":"SHA256","hash":"958e646593907b1757b5a359844bdf69374392f6089eb009a6e0d6591d866497","blockSize":4194304,"blocks":["958e646593907b1757b5a359844bdf69374392f6089eb009a6e0d6591d866497"]}}}},"require-from-string":{"files":{"index.js":{"size":866,"offset":"23335608","integrity":{"algorithm":"SHA256","hash":"cb059342a762b955997bf780f3693add176922727f2fa9f11fcaf1b3fc323239","blockSize":4194304,"blocks":["cb059342a762b955997bf780f3693add176922727f2fa9f11fcaf1b3fc323239"]}},"license":{"size":1128,"offset":"23336474","integrity":{"algorithm":"SHA256","hash":"6ee0feb1f6ef996ff5a68600f8cf98909cf412d39ef3cdceaefd87d636fa1b7f","blockSize":4194304,"blocks":["6ee0feb1f6ef996ff5a68600f8cf98909cf412d39ef3cdceaefd87d636fa1b7f"]}},"package.json":{"size":442,"offset":"23337602","integrity":{"algorithm":"SHA256","hash":"bbd907e5490c34cc6b814f56cd2180edb03bc594b88cdf1e112ed94d0d6218a3","blockSize":4194304,"blocks":["bbd907e5490c34cc6b814f56cd2180edb03bc594b88cdf1e112ed94d0d6218a3"]}}}},"require-main-filename":{"files":{"index.js":{"size":427,"offset":"23338044","integrity":{"algorithm":"SHA256","hash":"2ef41461635fc6b9689fdf72a9989dd2f675757483d85658968056ccec0eab21","blockSize":4194304,"blocks":["2ef41461635fc6b9689fdf72a9989dd2f675757483d85658968056ccec0eab21"]}},"LICENSE.txt":{"size":731,"offset":"23338471","integrity":{"algorithm":"SHA256","hash":"365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d","blockSize":4194304,"blocks":["365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d"]}},"package.json":{"size":588,"offset":"23339202","integrity":{"algorithm":"SHA256","hash":"05b94fd4c2ad7dd1b5f3fa8eb261fc8a468e11ba68090faad55865bcc12cd05f","blockSize":4194304,"blocks":["05b94fd4c2ad7dd1b5f3fa8eb261fc8a468e11ba68090faad55865bcc12cd05f"]}}}},"safe-buffer":{"files":{"index.js":{"size":1670,"offset":"23339790","integrity":{"algorithm":"SHA256","hash":"184d5c4a83512e3f49d4d5b52f7073f601f933bad11f1fbb3ad364ca5e6478e1","blockSize":4194304,"blocks":["184d5c4a83512e3f49d4d5b52f7073f601f933bad11f1fbb3ad364ca5e6478e1"]}},"LICENSE":{"size":1081,"offset":"23341460","integrity":{"algorithm":"SHA256","hash":"c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac","blockSize":4194304,"blocks":["c7cc929b57080f4b9d0c6cf57669f0463fc5b39906344dfc8d3bc43426b30eac"]}},"package.json":{"size":774,"offset":"23342541","integrity":{"algorithm":"SHA256","hash":"453bbe16b032826e5ab4f30af0c470f7c256706e0301e7bffbd6b49317c2124a","blockSize":4194304,"blocks":["453bbe16b032826e5ab4f30af0c470f7c256706e0301e7bffbd6b49317c2124a"]}}}},"set-blocking":{"files":{"index.js":{"size":252,"offset":"23343315","integrity":{"algorithm":"SHA256","hash":"8b238f1de62bb2a7b35a9e6b0364a64ce0f357cb63251580ff5a25429712e1d1","blockSize":4194304,"blocks":["8b238f1de62bb2a7b35a9e6b0364a64ce0f357cb63251580ff5a25429712e1d1"]}},"LICENSE.txt":{"size":731,"offset":"23343567","integrity":{"algorithm":"SHA256","hash":"365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d","blockSize":4194304,"blocks":["365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d"]}},"package.json":{"size":625,"offset":"23344298","integrity":{"algorithm":"SHA256","hash":"c979b735f9dbdf502cce0e2ad793f358f54592df7943d329c9c6b365df106e8a","blockSize":4194304,"blocks":["c979b735f9dbdf502cce0e2ad793f358f54592df7943d329c9c6b365df106e8a"]}}}},"setprototypeof":{"files":{"index.js":{"size":407,"offset":"23344923","integrity":{"algorithm":"SHA256","hash":"3e3495ca7ae72a7f0ca459f47dd3d97ae3a48fa4b1a669a31672be778cc97a5f","blockSize":4194304,"blocks":["3e3495ca7ae72a7f0ca459f47dd3d97ae3a48fa4b1a669a31672be778cc97a5f"]}},"LICENSE":{"size":727,"offset":"23345330","integrity":{"algorithm":"SHA256","hash":"76d6d1ea0c268da37dd3c961b4fcfb23dee8417fff9e8786d4d44c585b781b69","blockSize":4194304,"blocks":["76d6d1ea0c268da37dd3c961b4fcfb23dee8417fff9e8786d4d44c585b781b69"]}},"package.json":{"size":451,"offset":"23346057","integrity":{"algorithm":"SHA256","hash":"863acca2f63c8426c264f86ecba74913ad992928590c0a27b9acf9607215f3ca","blockSize":4194304,"blocks":["863acca2f63c8426c264f86ecba74913ad992928590c0a27b9acf9607215f3ca"]}}}},"shell-env":{"files":{"index.js":{"size":919,"offset":"23346508","integrity":{"algorithm":"SHA256","hash":"fd510b2431c5955acb15fdda2783c3229b1c77024ef93068423f5987ed79f578","blockSize":4194304,"blocks":["fd510b2431c5955acb15fdda2783c3229b1c77024ef93068423f5987ed79f578"]}},"license":{"size":1119,"offset":"23347427","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"node_modules":{"files":{"cross-spawn":{"files":{"index.js":{"size":1645,"offset":"23348546","integrity":{"algorithm":"SHA256","hash":"e4aef0f23b0ac457eb334e69d8a170b92887f7d9758e92535c1dd499cd14fad1","blockSize":4194304,"blocks":["e4aef0f23b0ac457eb334e69d8a170b92887f7d9758e92535c1dd499cd14fad1"]}},"lib":{"files":{"enoent.js":{"size":1939,"offset":"23350191","integrity":{"algorithm":"SHA256","hash":"f7affbbe6b92c1865c2673eb42d120080fb83014219623305e707fe007b51546","blockSize":4194304,"blocks":["f7affbbe6b92c1865c2673eb42d120080fb83014219623305e707fe007b51546"]}},"hasBrokenSpawn.js":{"size":289,"offset":"23352130","integrity":{"algorithm":"SHA256","hash":"35c819984307528edf3798670de941c8a7b5856cd052ce4a0a982ef02496e3b8","blockSize":4194304,"blocks":["35c819984307528edf3798670de941c8a7b5856cd052ce4a0a982ef02496e3b8"]}},"parse.js":{"size":3988,"offset":"23352419","integrity":{"algorithm":"SHA256","hash":"b5cfdbaf75dbcea0f5c0ebcc973924e46907d4181f771c53bc7b93005f44eee1","blockSize":4194304,"blocks":["b5cfdbaf75dbcea0f5c0ebcc973924e46907d4181f771c53bc7b93005f44eee1"]}},"resolveCommand.js":{"size":805,"offset":"23356407","integrity":{"algorithm":"SHA256","hash":"6ca23478db0d2e115f45fd0c16d6e6b4c8bd4a9b6908b960c7e23f4087807960","blockSize":4194304,"blocks":["6ca23478db0d2e115f45fd0c16d6e6b4c8bd4a9b6908b960c7e23f4087807960"]}}}},"LICENSE":{"size":1056,"offset":"23357212","integrity":{"algorithm":"SHA256","hash":"b1344bd78ebcbf8a359225ec444d038a653c6a5f9ecf405a50d4a5c11fbf27d1","blockSize":4194304,"blocks":["b1344bd78ebcbf8a359225ec444d038a653c6a5f9ecf405a50d4a5c11fbf27d1"]}},"package.json":{"size":688,"offset":"23358268","integrity":{"algorithm":"SHA256","hash":"0c6fb299b37e637b3a506b39cf5eab039826438c5dd0cb78f43eae250695309b","blockSize":4194304,"blocks":["0c6fb299b37e637b3a506b39cf5eab039826438c5dd0cb78f43eae250695309b"]}}}},"execa":{"files":{"index.js":{"size":5894,"offset":"23358956","integrity":{"algorithm":"SHA256","hash":"2595e073b85b7e9b1762a8c6227e97179a1143e69fac78615ac3e75445ec560e","blockSize":4194304,"blocks":["2595e073b85b7e9b1762a8c6227e97179a1143e69fac78615ac3e75445ec560e"]}},"lib":{"files":{"errname.js":{"size":972,"offset":"23364850","integrity":{"algorithm":"SHA256","hash":"95bba72f374dee620351c0f12afc43a5369754b8b2b01341fdac1936837b36c5","blockSize":4194304,"blocks":["95bba72f374dee620351c0f12afc43a5369754b8b2b01341fdac1936837b36c5"]}}}},"license":{"size":1119,"offset":"23365822","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":892,"offset":"23366941","integrity":{"algorithm":"SHA256","hash":"9c7e6d86ebaa2f185caa624b28ba0b9198f4cda1a3b074eecdce5b510cb0c272","blockSize":4194304,"blocks":["9c7e6d86ebaa2f185caa624b28ba0b9198f4cda1a3b074eecdce5b510cb0c272"]}}}},"get-stream":{"files":{"buffer-stream.js":{"size":923,"offset":"23367833","integrity":{"algorithm":"SHA256","hash":"8c6b722edc14e33dd88dbb82229eea1e7d084ee81cec668ab2af30dcf0a421c5","blockSize":4194304,"blocks":["8c6b722edc14e33dd88dbb82229eea1e7d084ee81cec668ab2af30dcf0a421c5"]}},"index.js":{"size":1403,"offset":"23368756","integrity":{"algorithm":"SHA256","hash":"e10b429913c02837610ecc21d1388d80d582081c940ec507708e62cf53424b6a","blockSize":4194304,"blocks":["e10b429913c02837610ecc21d1388d80d582081c940ec507708e62cf53424b6a"]}},"license":{"size":1119,"offset":"23370159","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":596,"offset":"23371278","integrity":{"algorithm":"SHA256","hash":"26dcab13507c7ee5e0d5e08522d2de0df812a4dfd979ce4672c3835b9376f6e9","blockSize":4194304,"blocks":["26dcab13507c7ee5e0d5e08522d2de0df812a4dfd979ce4672c3835b9376f6e9"]}}}},"npm-run-path":{"files":{"index.js":{"size":766,"offset":"23371874","integrity":{"algorithm":"SHA256","hash":"c3682ee51ea61fcfb95a80cc2f4d86b2204d25e818b805d951cda9d3d50a8e92","blockSize":4194304,"blocks":["c3682ee51ea61fcfb95a80cc2f4d86b2204d25e818b805d951cda9d3d50a8e92"]}},"license":{"size":1119,"offset":"23372640","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":487,"offset":"23373759","integrity":{"algorithm":"SHA256","hash":"d6e65d0c2ae94b483915eff5e9d5b34e4626b3cca708159cf31e9e877a3479d4","blockSize":4194304,"blocks":["d6e65d0c2ae94b483915eff5e9d5b34e4626b3cca708159cf31e9e877a3479d4"]}}}},"strip-ansi":{"files":{"index.js":{"size":161,"offset":"23374246","integrity":{"algorithm":"SHA256","hash":"02abcd70c31523c8c34ffaa7222629ae14b12ccd425e49ffa964a5051614691c","blockSize":4194304,"blocks":["02abcd70c31523c8c34ffaa7222629ae14b12ccd425e49ffa964a5051614691c"]}},"license":{"size":1119,"offset":"23374407","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":658,"offset":"23375526","integrity":{"algorithm":"SHA256","hash":"630cd995481567858a023f77c88722aafd373b1bfde5cb515e37d5c312dacc8f","blockSize":4194304,"blocks":["630cd995481567858a023f77c88722aafd373b1bfde5cb515e37d5c312dacc8f"]}}}}}},"package.json":{"size":606,"offset":"23376184","integrity":{"algorithm":"SHA256","hash":"0370d34691d4eb23474fda1e8f1b23d1460a53516c61253cd3a82f5601fdb777","blockSize":4194304,"blocks":["0370d34691d4eb23474fda1e8f1b23d1460a53516c61253cd3a82f5601fdb777"]}}}},"shell-path":{"files":{"index.js":{"size":157,"offset":"23376790","integrity":{"algorithm":"SHA256","hash":"64b5158b4572072da88be20ca7e95a38b5726cf840f446362810381096f3ce0f","blockSize":4194304,"blocks":["64b5158b4572072da88be20ca7e95a38b5726cf840f446362810381096f3ce0f"]}},"license":{"size":1119,"offset":"23376947","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":541,"offset":"23378066","integrity":{"algorithm":"SHA256","hash":"184ec6b1b88aa2f2f43f1d735ae1a8c8b37c74b412a0712fbe955739cff9b439","blockSize":4194304,"blocks":["184ec6b1b88aa2f2f43f1d735ae1a8c8b37c74b412a0712fbe955739cff9b439"]}}}},"signal-exit":{"files":{"index.js":{"size":4124,"offset":"23378607","integrity":{"algorithm":"SHA256","hash":"b9ccc2e42e309e1f35e056d82544685f73556ee2f71e594f900d4846442f6255","blockSize":4194304,"blocks":["b9ccc2e42e309e1f35e056d82544685f73556ee2f71e594f900d4846442f6255"]}},"LICENSE.txt":{"size":748,"offset":"23382731","integrity":{"algorithm":"SHA256","hash":"e05b1eaf5b5f99b7ad75cd1f38858ff9a311780b97715ead67936d60bf96aa7e","blockSize":4194304,"blocks":["e05b1eaf5b5f99b7ad75cd1f38858ff9a311780b97715ead67936d60bf96aa7e"]}},"package.json":{"size":593,"offset":"23383479","integrity":{"algorithm":"SHA256","hash":"606aaf97ad568421c5abc61c3cdab7a319cc4fd74523180054bff50088e0f396","blockSize":4194304,"blocks":["606aaf97ad568421c5abc61c3cdab7a319cc4fd74523180054bff50088e0f396"]}},"signals.js":{"size":1295,"offset":"23384072","integrity":{"algorithm":"SHA256","hash":"ae538fdae683d6fa2e14579da06df10fb7a66378cfa50971956fb68c2c86c727","blockSize":4194304,"blocks":["ae538fdae683d6fa2e14579da06df10fb7a66378cfa50971956fb68c2c86c727"]}}}},"sortablejs":{"files":{"LICENSE":{"size":1106,"offset":"23385367","integrity":{"algorithm":"SHA256","hash":"e94dfc31e800d169257569db270457c9f028440c9ccae41e7eb78b2db18f1298","blockSize":4194304,"blocks":["e94dfc31e800d169257569db270457c9f028440c9ccae41e7eb78b2db18f1298"]}},"modular":{"files":{"sortable.complete.esm.js":{"size":114152,"offset":"23386473","integrity":{"algorithm":"SHA256","hash":"73edc60808054ac25dec6c38f45deb3e8055731d4d37bd39d1aca754b0e96778","blockSize":4194304,"blocks":["73edc60808054ac25dec6c38f45deb3e8055731d4d37bd39d1aca754b0e96778"]}},"sortable.core.esm.js":{"size":114150,"offset":"23500625","integrity":{"algorithm":"SHA256","hash":"d11ac1cf946062d98be71d306d442c9525ee10c92b085f738ad668e360aacef2","blockSize":4194304,"blocks":["d11ac1cf946062d98be71d306d442c9525ee10c92b085f738ad668e360aacef2"]}},"sortable.esm.js":{"size":114149,"offset":"23614775","integrity":{"algorithm":"SHA256","hash":"b1b0ca8e2211ac35cda365fa5e08fded5958efd7d03925c0307d44f0c1e76e12","blockSize":4194304,"blocks":["b1b0ca8e2211ac35cda365fa5e08fded5958efd7d03925c0307d44f0c1e76e12"]}}}},"package.json":{"size":1109,"offset":"23728924","integrity":{"algorithm":"SHA256","hash":"2f91de042237ad49ce6d2b6d16ea77a338290b89befe10fd58fd2c237e7454b7","blockSize":4194304,"blocks":["2f91de042237ad49ce6d2b6d16ea77a338290b89befe10fd58fd2c237e7454b7"]}},"Sortable.js":{"size":120630,"offset":"23730033","integrity":{"algorithm":"SHA256","hash":"243e86ef76f267ff525f897d4c871a38f230997d286a97f995e755046eab912d","blockSize":4194304,"blocks":["243e86ef76f267ff525f897d4c871a38f230997d286a97f995e755046eab912d"]}},"Sortable.min.js":{"size":42997,"offset":"23850663","integrity":{"algorithm":"SHA256","hash":"f16c34735a8a0cc7474f6fb7b37dfaf64cd25dc808aefab34b0ce3759e6a1c3b","blockSize":4194304,"blocks":["f16c34735a8a0cc7474f6fb7b37dfaf64cd25dc808aefab34b0ce3759e6a1c3b"]}}}},"source-map-js":{"files":{"lib":{"files":{"array-set.js":{"size":3197,"offset":"23893660","integrity":{"algorithm":"SHA256","hash":"163bb3055aaea7140167740036a83161fd912c344b14f992754b80f21477d754","blockSize":4194304,"blocks":["163bb3055aaea7140167740036a83161fd912c344b14f992754b80f21477d754"]}},"base64-vlq.js":{"size":4714,"offset":"23896857","integrity":{"algorithm":"SHA256","hash":"f3407e528f54ec0787bd0a71eeac0c99fffd98445916fcbe116dc69ca3be928b","blockSize":4194304,"blocks":["f3407e528f54ec0787bd0a71eeac0c99fffd98445916fcbe116dc69ca3be928b"]}},"base64.js":{"size":1540,"offset":"23901571","integrity":{"algorithm":"SHA256","hash":"651bf433cf05e9ec8cee0b94639483236a605d48279e83d3d5c5de81c21d6599","blockSize":4194304,"blocks":["651bf433cf05e9ec8cee0b94639483236a605d48279e83d3d5c5de81c21d6599"]}},"binary-search.js":{"size":4249,"offset":"23903111","integrity":{"algorithm":"SHA256","hash":"c7f4a47a125af0bd860443dfd71d2f412d1a97dcb53ab7038189d63b91dc32bd","blockSize":4194304,"blocks":["c7f4a47a125af0bd860443dfd71d2f412d1a97dcb53ab7038189d63b91dc32bd"]}},"mapping-list.js":{"size":2339,"offset":"23907360","integrity":{"algorithm":"SHA256","hash":"35ddb82861f11a70ab84cb47d620fcb28d7f884bb444644e06bde815b836ef9e","blockSize":4194304,"blocks":["35ddb82861f11a70ab84cb47d620fcb28d7f884bb444644e06bde815b836ef9e"]}},"quick-sort.js":{"size":4068,"offset":"23909699","integrity":{"algorithm":"SHA256","hash":"72ed4911cdc72232cac53cac995e28e865cd4302186173bba74ff6436c089915","blockSize":4194304,"blocks":["72ed4911cdc72232cac53cac995e28e865cd4302186173bba74ff6436c089915"]}},"source-map-consumer.js":{"size":41482,"offset":"23913767","integrity":{"algorithm":"SHA256","hash":"53b56e1a89fa7253996e05199c97224c8081c7ad1b349277c54268d8c04b5bde","blockSize":4194304,"blocks":["53b56e1a89fa7253996e05199c97224c8081c7ad1b349277c54268d8c04b5bde"]}},"source-map-generator.js":{"size":14356,"offset":"23955249","integrity":{"algorithm":"SHA256","hash":"98f91170f8bfd754bebc9bc8babf26ea16ba4cf980f7abb30debe6d89f24f17f","blockSize":4194304,"blocks":["98f91170f8bfd754bebc9bc8babf26ea16ba4cf980f7abb30debe6d89f24f17f"]}},"source-node.js":{"size":13808,"offset":"23969605","integrity":{"algorithm":"SHA256","hash":"b45db8183550ca1e6259976f6ceee89f6764360c56cf206701bd2f7471144e31","blockSize":4194304,"blocks":["b45db8183550ca1e6259976f6ceee89f6764360c56cf206701bd2f7471144e31"]}},"util.js":{"size":15403,"offset":"23983413","integrity":{"algorithm":"SHA256","hash":"0629f3ae2f3049cda3a2e87ea651dcf0cc71108f4681795ab989a8ac1573fc03","blockSize":4194304,"blocks":["0629f3ae2f3049cda3a2e87ea651dcf0cc71108f4681795ab989a8ac1573fc03"]}}}},"LICENSE":{"size":1526,"offset":"23998816","integrity":{"algorithm":"SHA256","hash":"6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd","blockSize":4194304,"blocks":["6cb0631f71c7749763fd3dd1d5bee52dd1070ec17f2edc1710079ad070bd2fbd"]}},"package.json":{"size":632,"offset":"24000342","integrity":{"algorithm":"SHA256","hash":"9582cd40849a58f50d1852e984413951e7e86b35e5c9212e6b100efd8d698dee","blockSize":4194304,"blocks":["9582cd40849a58f50d1852e984413951e7e86b35e5c9212e6b100efd8d698dee"]}},"source-map.js":{"size":405,"offset":"24000974","integrity":{"algorithm":"SHA256","hash":"dc098456c2d9ab90a4c0a17cca9be16665b9813df20906553a98b0088a157be7","blockSize":4194304,"blocks":["dc098456c2d9ab90a4c0a17cca9be16665b9813df20906553a98b0088a157be7"]}}}},"statuses":{"files":{"codes.json":{"size":1821,"offset":"24001379","integrity":{"algorithm":"SHA256","hash":"bedb2a387444b2ceff09e8a8c4fc97bf6b046e5984a3a229ea57de1dd299d409","blockSize":4194304,"blocks":["bedb2a387444b2ceff09e8a8c4fc97bf6b046e5984a3a229ea57de1dd299d409"]}},"HISTORY.md":{"size":1023,"offset":"24003200","integrity":{"algorithm":"SHA256","hash":"8b7db1b36f88e8559d1a35999449e25021134acd054c19cf0dad7a46e7431050","blockSize":4194304,"blocks":["8b7db1b36f88e8559d1a35999449e25021134acd054c19cf0dad7a46e7431050"]}},"index.js":{"size":2088,"offset":"24004223","integrity":{"algorithm":"SHA256","hash":"4f8b0e8e9e9cff773ba540daf8a065d9b19b2ee1d108acc0172614f81b11ef0b","blockSize":4194304,"blocks":["4f8b0e8e9e9cff773ba540daf8a065d9b19b2ee1d108acc0172614f81b11ef0b"]}},"LICENSE":{"size":1172,"offset":"24006311","integrity":{"algorithm":"SHA256","hash":"512cfa4d5e7a7569c7ae4dd95241cb6ae2aaf648ef9ebd080c01bd24868d26e9","blockSize":4194304,"blocks":["512cfa4d5e7a7569c7ae4dd95241cb6ae2aaf648ef9ebd080c01bd24868d26e9"]}},"package.json":{"size":683,"offset":"24007483","integrity":{"algorithm":"SHA256","hash":"74ac464cdda214873e8d6b8ec325bca8bfe4ae942f388b16f9655f28bd461bd2","blockSize":4194304,"blocks":["74ac464cdda214873e8d6b8ec325bca8bfe4ae942f388b16f9655f28bd461bd2"]}}}},"string-width":{"files":{"index.js":{"size":923,"offset":"24008166","integrity":{"algorithm":"SHA256","hash":"ed69ea4f757130e46dc48a0cc31beb6257e61a31c70936d82b8a3f02ffd64df5","blockSize":4194304,"blocks":["ed69ea4f757130e46dc48a0cc31beb6257e61a31c70936d82b8a3f02ffd64df5"]}},"license":{"size":1109,"offset":"24009089","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":633,"offset":"24010198","integrity":{"algorithm":"SHA256","hash":"792aa0c12ea224231185d8193a7edc76c687c6c0302589e66c01535b067070a9","blockSize":4194304,"blocks":["792aa0c12ea224231185d8193a7edc76c687c6c0302589e66c01535b067070a9"]}}}},"strip-ansi":{"files":{"index.js":{"size":154,"offset":"24010831","integrity":{"algorithm":"SHA256","hash":"bf37cd692bf030c2ec270945bc26aa8b19ad379fa5916f12304758f709ab0978","blockSize":4194304,"blocks":["bf37cd692bf030c2ec270945bc26aa8b19ad379fa5916f12304758f709ab0978"]}},"license":{"size":1109,"offset":"24010985","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"node_modules":{"files":{"ansi-regex":{"files":{"index.js":{"size":317,"offset":"24012094","integrity":{"algorithm":"SHA256","hash":"68c194a1ed4d3dd61680cc1990aaefb0b2ff81308670a04b7e103b637ae0e1b3","blockSize":4194304,"blocks":["68c194a1ed4d3dd61680cc1990aaefb0b2ff81308670a04b7e103b637ae0e1b3"]}},"license":{"size":1109,"offset":"24012411","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":470,"offset":"24013520","integrity":{"algorithm":"SHA256","hash":"168b9b61299e8332eeb621211a61a50acd01b13d40fdb6537d0bb87237f52ff0","blockSize":4194304,"blocks":["168b9b61299e8332eeb621211a61a50acd01b13d40fdb6537d0bb87237f52ff0"]}}}}}},"package.json":{"size":511,"offset":"24013990","integrity":{"algorithm":"SHA256","hash":"6f0a002b4f0baa4400e0a3d98c6ad3ea4e1ec7eca61bee2b4600b316e8ae1989","blockSize":4194304,"blocks":["6f0a002b4f0baa4400e0a3d98c6ad3ea4e1ec7eca61bee2b4600b316e8ae1989"]}}}},"strip-eof":{"files":{"index.js":{"size":315,"offset":"24014501","integrity":{"algorithm":"SHA256","hash":"6ae454052dc16a4d71be33d5ac27e9e1bcc881adbd1598bc7e0f20f83fbbc4ea","blockSize":4194304,"blocks":["6ae454052dc16a4d71be33d5ac27e9e1bcc881adbd1598bc7e0f20f83fbbc4ea"]}},"license":{"size":1119,"offset":"24014816","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":439,"offset":"24015935","integrity":{"algorithm":"SHA256","hash":"7b33f28f8253fa8a2fcaecc9f45e30af4f8f6afb2f210656d7495c53673f96ae","blockSize":4194304,"blocks":["7b33f28f8253fa8a2fcaecc9f45e30af4f8f6afb2f210656d7495c53673f96ae"]}}}},"tar-stream":{"files":{"extract.js":{"size":5960,"offset":"24016374","integrity":{"algorithm":"SHA256","hash":"6b5edd072ee880c1c23c540d92089d105ea342f9dcbacbf04fda934c090b8a0d","blockSize":4194304,"blocks":["6b5edd072ee880c1c23c540d92089d105ea342f9dcbacbf04fda934c090b8a0d"]}},"headers.js":{"size":7969,"offset":"24022334","integrity":{"algorithm":"SHA256","hash":"3bcd61e952038c935c2ea17a891f223b218b3a08decc75c4ea5dec9123ae38a9","blockSize":4194304,"blocks":["3bcd61e952038c935c2ea17a891f223b218b3a08decc75c4ea5dec9123ae38a9"]}},"index.js":{"size":72,"offset":"24030303","integrity":{"algorithm":"SHA256","hash":"0db9eceef5224dbc34c224c398b50eef4b99f937c80c81f660928615a248ed4f","blockSize":4194304,"blocks":["0db9eceef5224dbc34c224c398b50eef4b99f937c80c81f660928615a248ed4f"]}},"LICENSE":{"size":1078,"offset":"24030375","integrity":{"algorithm":"SHA256","hash":"3fe8d55a98dbf260eace67c00cf9bc53edb46234e840098a0b93df3096b97fb6","blockSize":4194304,"blocks":["3fe8d55a98dbf260eace67c00cf9bc53edb46234e840098a0b93df3096b97fb6"]}},"node_modules":{"files":{"readable-stream":{"files":{"CONTRIBUTING.md":{"size":1443,"offset":"24031453","integrity":{"algorithm":"SHA256","hash":"56e4e12a6934a2c4d36c7bf893f4d8aefa6c96f9ffcec357dfa6476e36c4f1f5","blockSize":4194304,"blocks":["56e4e12a6934a2c4d36c7bf893f4d8aefa6c96f9ffcec357dfa6476e36c4f1f5"]}},"errors-browser.js":{"size":4197,"offset":"24032896","integrity":{"algorithm":"SHA256","hash":"346033597378d23e59068d120d6257f7cd85ae88c40b1f85c3329cece0d119c4","blockSize":4194304,"blocks":["346033597378d23e59068d120d6257f7cd85ae88c40b1f85c3329cece0d119c4"]}},"errors.js":{"size":3715,"offset":"24037093","integrity":{"algorithm":"SHA256","hash":"7028cca95b2f124345bd5b816e0d8184e7b7d208fe0aa76eb38df43e8644fd03","blockSize":4194304,"blocks":["7028cca95b2f124345bd5b816e0d8184e7b7d208fe0aa76eb38df43e8644fd03"]}},"experimentalWarning.js":{"size":460,"offset":"24040808","integrity":{"algorithm":"SHA256","hash":"5f9beff594347ba6765b806ec36e25699be1407627e2ee91be5d609e40baacb8","blockSize":4194304,"blocks":["5f9beff594347ba6765b806ec36e25699be1407627e2ee91be5d609e40baacb8"]}},"GOVERNANCE.md":{"size":5550,"offset":"24041268","integrity":{"algorithm":"SHA256","hash":"7a521e462d1c6f3b599c44637fb337bbf969dda311510a87236ec539a415331d","blockSize":4194304,"blocks":["7a521e462d1c6f3b599c44637fb337bbf969dda311510a87236ec539a415331d"]}},"lib":{"files":{"_stream_duplex.js":{"size":4399,"offset":"24046818","integrity":{"algorithm":"SHA256","hash":"c3d976062b770b4a88c91d244557bbe9a828b55dc2de1f9ac85c2d5e909389c4","blockSize":4194304,"blocks":["c3d976062b770b4a88c91d244557bbe9a828b55dc2de1f9ac85c2d5e909389c4"]}},"_stream_passthrough.js":{"size":1630,"offset":"24051217","integrity":{"algorithm":"SHA256","hash":"14475641ec1d85dcbf95e2555fedb04bf02f8482e08822a5a09b01ddc6389f5f","blockSize":4194304,"blocks":["14475641ec1d85dcbf95e2555fedb04bf02f8482e08822a5a09b01ddc6389f5f"]}},"_stream_readable.js":{"size":35972,"offset":"24052847","integrity":{"algorithm":"SHA256","hash":"c8d010d85186209997a60b3cf1b653a77a88490a3e11e015c2b5eb2d56c30fe7","blockSize":4194304,"blocks":["c8d010d85186209997a60b3cf1b653a77a88490a3e11e015c2b5eb2d56c30fe7"]}},"_stream_transform.js":{"size":7947,"offset":"24088819","integrity":{"algorithm":"SHA256","hash":"d85bb2b8c6ba3cf71e6ae759342df89dee95981c6856e9f4dc0b85d70cf60b59","blockSize":4194304,"blocks":["d85bb2b8c6ba3cf71e6ae759342df89dee95981c6856e9f4dc0b85d70cf60b59"]}},"_stream_writable.js":{"size":21821,"offset":"24096766","integrity":{"algorithm":"SHA256","hash":"e97dc3728c1ba71414f84cb44cb4c4ecefdf0fdd1c3242a5f447e08ed20cca6f","blockSize":4194304,"blocks":["e97dc3728c1ba71414f84cb44cb4c4ecefdf0fdd1c3242a5f447e08ed20cca6f"]}},"internal":{"files":{"streams":{"files":{"async_iterator.js":{"size":5957,"offset":"24118587","integrity":{"algorithm":"SHA256","hash":"3a752f2fcb0de353265f2d4928126183b5a08d9c9eb6aa4fab74808286e69844","blockSize":4194304,"blocks":["3a752f2fcb0de353265f2d4928126183b5a08d9c9eb6aa4fab74808286e69844"]}},"buffer_list.js":{"size":6335,"offset":"24124544","integrity":{"algorithm":"SHA256","hash":"10f06e02f00b1e4c28afd01cd4b1ecf280c75c59e97fb8611ac014bdd614d2ad","blockSize":4194304,"blocks":["10f06e02f00b1e4c28afd01cd4b1ecf280c75c59e97fb8611ac014bdd614d2ad"]}},"destroy.js":{"size":3117,"offset":"24130879","integrity":{"algorithm":"SHA256","hash":"54c7b9c8319baeffa83840ae559b5910f530bdca530292d9be190236f219a7b3","blockSize":4194304,"blocks":["54c7b9c8319baeffa83840ae559b5910f530bdca530292d9be190236f219a7b3"]}},"end-of-stream.js":{"size":3102,"offset":"24133996","integrity":{"algorithm":"SHA256","hash":"75da6b5b0634012017a6252c6e130335de7775e5a02f10817d02af47afa8bb8d","blockSize":4194304,"blocks":["75da6b5b0634012017a6252c6e130335de7775e5a02f10817d02af47afa8bb8d"]}},"from-browser.js":{"size":101,"offset":"24137098","integrity":{"algorithm":"SHA256","hash":"4b4404c7bd6f66a2175cb7a29c60ce4395c055775ec45eaa35af4357656f604f","blockSize":4194304,"blocks":["4b4404c7bd6f66a2175cb7a29c60ce4395c055775ec45eaa35af4357656f604f"]}},"from.js":{"size":3137,"offset":"24137199","integrity":{"algorithm":"SHA256","hash":"9c67e32e4f371b72c83265a077c7e317866170134ff8dca4cc24313c5037426b","blockSize":4194304,"blocks":["9c67e32e4f371b72c83265a077c7e317866170134ff8dca4cc24313c5037426b"]}},"pipeline.js":{"size":2428,"offset":"24140336","integrity":{"algorithm":"SHA256","hash":"16576b2011c78d0c5ceccdeba7451e83e1bd86f2c3f31c05de7df4ccfb149c2a","blockSize":4194304,"blocks":["16576b2011c78d0c5ceccdeba7451e83e1bd86f2c3f31c05de7df4ccfb149c2a"]}},"state.js":{"size":749,"offset":"24142764","integrity":{"algorithm":"SHA256","hash":"cdbed99634b523be655225df1547cd00295e3041cb02848c652ddad5e6787e49","blockSize":4194304,"blocks":["cdbed99634b523be655225df1547cd00295e3041cb02848c652ddad5e6787e49"]}},"stream-browser.js":{"size":49,"offset":"24143513","integrity":{"algorithm":"SHA256","hash":"72d46a15491627d8fb1489a47d03583cfe5c21902918016ab532b53e615e5a9a","blockSize":4194304,"blocks":["72d46a15491627d8fb1489a47d03583cfe5c21902918016ab532b53e615e5a9a"]}},"stream.js":{"size":36,"offset":"24143562","integrity":{"algorithm":"SHA256","hash":"1e7903927df33aadb3659ecce55266c9c851da65ce6c8b723a60a305c1c5422c","blockSize":4194304,"blocks":["1e7903927df33aadb3659ecce55266c9c851da65ce6c8b723a60a305c1c5422c"]}}}}}}}},"LICENSE":{"size":2337,"offset":"24143598","integrity":{"algorithm":"SHA256","hash":"ec62dc96da0099b87f4511736c87309335527fb7031639493e06c95728dc8c54","blockSize":4194304,"blocks":["ec62dc96da0099b87f4511736c87309335527fb7031639493e06c95728dc8c54"]}},"package.json":{"size":1299,"offset":"24145935","integrity":{"algorithm":"SHA256","hash":"02bac325870a829233ed0f6861fdea78c42cd40cdddff7f5d0c78992924e9172","blockSize":4194304,"blocks":["02bac325870a829233ed0f6861fdea78c42cd40cdddff7f5d0c78992924e9172"]}},"readable-browser.js":{"size":488,"offset":"24147234","integrity":{"algorithm":"SHA256","hash":"c4ff3ea62ef65a2c68ea721dcbd58b621150660facd02be95ebfc556c4dd123f","blockSize":4194304,"blocks":["c4ff3ea62ef65a2c68ea721dcbd58b621150660facd02be95ebfc556c4dd123f"]}},"readable.js":{"size":729,"offset":"24147722","integrity":{"algorithm":"SHA256","hash":"2944f1d3c8c5d5c5e07e7c30d6cbef5fc37440b7c73de47aeb37fa8424f04bf1","blockSize":4194304,"blocks":["2944f1d3c8c5d5c5e07e7c30d6cbef5fc37440b7c73de47aeb37fa8424f04bf1"]}}}},"string_decoder":{"files":{"lib":{"files":{"string_decoder.js":{"size":9465,"offset":"24148451","integrity":{"algorithm":"SHA256","hash":"f1d36d47b2c579063392c1a68963467f2d4f51a069af09eb068d974c63ee3b37","blockSize":4194304,"blocks":["f1d36d47b2c579063392c1a68963467f2d4f51a069af09eb068d974c63ee3b37"]}}}},"LICENSE":{"size":2338,"offset":"24157916","integrity":{"algorithm":"SHA256","hash":"11f2aafb37d06b3ee5bdaf06e9811141d0da05263c316f3d627f45c20d43261b","blockSize":4194304,"blocks":["11f2aafb37d06b3ee5bdaf06e9811141d0da05263c316f3d627f45c20d43261b"]}},"package.json":{"size":542,"offset":"24160254","integrity":{"algorithm":"SHA256","hash":"420c400885ef61e878b7839d8490a7c5fd19ac9d704a30c55acce3c72daffd4a","blockSize":4194304,"blocks":["420c400885ef61e878b7839d8490a7c5fd19ac9d704a30c55acce3c72daffd4a"]}}}}}},"pack.js":{"size":5626,"offset":"24160796","integrity":{"algorithm":"SHA256","hash":"dfa9a306e8edf3c8b0445d5cc772e6a0a74382dfcbf19ebd3be06e8f31fbf94e","blockSize":4194304,"blocks":["dfa9a306e8edf3c8b0445d5cc772e6a0a74382dfcbf19ebd3be06e8f31fbf94e"]}},"package.json":{"size":924,"offset":"24166422","integrity":{"algorithm":"SHA256","hash":"03d0a975daeb3544fe00f25f48fb7e8455eaef2bf0b3c966821a4ced10888666","blockSize":4194304,"blocks":["03d0a975daeb3544fe00f25f48fb7e8455eaef2bf0b3c966821a4ced10888666"]}},"sandbox.js":{"size":371,"offset":"24167346","integrity":{"algorithm":"SHA256","hash":"08c242a5ff86e63801840b6cd6524102f9d044c83369e5245f140bc9994622e9","blockSize":4194304,"blocks":["08c242a5ff86e63801840b6cd6524102f9d044c83369e5245f140bc9994622e9"]}}}},"thenify":{"files":{"History.md":{"size":317,"offset":"24171468","integrity":{"algorithm":"SHA256","hash":"9c6e2611da0d09e36db45f16d6d7d074a939d8296d916b95f833653e709fbc92","blockSize":4194304,"blocks":["9c6e2611da0d09e36db45f16d6d7d074a939d8296d916b95f833653e709fbc92"]}},"index.js":{"size":1946,"offset":"24171785","integrity":{"algorithm":"SHA256","hash":"623e817df7acb3e856ac693d3e1fba4d9e0654ebd2d175b5a54826467b1eaaa4","blockSize":4194304,"blocks":["623e817df7acb3e856ac693d3e1fba4d9e0654ebd2d175b5a54826467b1eaaa4"]}},"LICENSE":{"size":1121,"offset":"24173731","integrity":{"algorithm":"SHA256","hash":"ae538dfbba770702cec046d5c63b8aa29c2faaff7ad9513693f1f9ee4e6f22b5","blockSize":4194304,"blocks":["ae538dfbba770702cec046d5c63b8aa29c2faaff7ad9513693f1f9ee4e6f22b5"]}},"package.json":{"size":420,"offset":"24174852","integrity":{"algorithm":"SHA256","hash":"108e8fc6445ae5dacddd58cc3778f57b5cc1a3650caa760677dfac6ffdaae05b","blockSize":4194304,"blocks":["108e8fc6445ae5dacddd58cc3778f57b5cc1a3650caa760677dfac6ffdaae05b"]}}}},"thenify-all":{"files":{"History.md":{"size":180,"offset":"24167717","integrity":{"algorithm":"SHA256","hash":"670e83fc22944ad4af7f6885ac08224e5a8a48153bc36de80ca5cd4d950cd378","blockSize":4194304,"blocks":["670e83fc22944ad4af7f6885ac08224e5a8a48153bc36de80ca5cd4d950cd378"]}},"index.js":{"size":2001,"offset":"24167897","integrity":{"algorithm":"SHA256","hash":"74f7ca91741a6bd6536d837e5118ff29f4187ef635ba4e8fe45fcf5724202782","blockSize":4194304,"blocks":["74f7ca91741a6bd6536d837e5118ff29f4187ef635ba4e8fe45fcf5724202782"]}},"LICENSE":{"size":1099,"offset":"24169898","integrity":{"algorithm":"SHA256","hash":"965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288","blockSize":4194304,"blocks":["965ef284f7f4c176842ec2e87fa13e79feed777d56d7a21a5a3b38f1bb6dc288"]}},"package.json":{"size":471,"offset":"24170997","integrity":{"algorithm":"SHA256","hash":"eee2b50d23aa47f2f241307abaaaa52ae42db297e905661ce3dab33b72e65418","blockSize":4194304,"blocks":["eee2b50d23aa47f2f241307abaaaa52ae42db297e905661ce3dab33b72e65418"]}}}},"to-readable-stream":{"files":{"index.js":{"size":160,"offset":"24175272","integrity":{"algorithm":"SHA256","hash":"2954bb915ae26ba911fc8ebc2c6264e9a2f1dc644c066777bd2a12bd81dbb309","blockSize":4194304,"blocks":["2954bb915ae26ba911fc8ebc2c6264e9a2f1dc644c066777bd2a12bd81dbb309"]}},"license":{"size":1109,"offset":"24175432","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":477,"offset":"24176541","integrity":{"algorithm":"SHA256","hash":"aa9118101ee2324a69e66be5e7e21ace6cbba0e67a76d8b7dc61394490a9cde3","blockSize":4194304,"blocks":["aa9118101ee2324a69e66be5e7e21ace6cbba0e67a76d8b7dc61394490a9cde3"]}}}},"toidentifier":{"files":{"index.js":{"size":490,"offset":"24177018","integrity":{"algorithm":"SHA256","hash":"6df7c8b218f33abc33563a33de06b4bbb1a43a6232b4c31cb01c55c38ed1cba8","blockSize":4194304,"blocks":["6df7c8b218f33abc33563a33de06b4bbb1a43a6232b4c31cb01c55c38ed1cba8"]}},"LICENSE":{"size":1108,"offset":"24177508","integrity":{"algorithm":"SHA256","hash":"a832d679750e49ab433626ab196350b89964b60eb0d3edd3341887c7d5f4c128","blockSize":4194304,"blocks":["a832d679750e49ab433626ab196350b89964b60eb0d3edd3341887c7d5f4c128"]}},"package.json":{"size":656,"offset":"24178616","integrity":{"algorithm":"SHA256","hash":"0c85f9a6c6fa8c9b563ebeef2b435792315d9f1034207c995bb9c76c80b62ac8","blockSize":4194304,"blocks":["0c85f9a6c6fa8c9b563ebeef2b435792315d9f1034207c995bb9c76c80b62ac8"]}}}},"tsscmp":{"files":{"lib":{"files":{"index.js":{"size":1176,"offset":"24179272","integrity":{"algorithm":"SHA256","hash":"8a48bb471b338cccf04fd9538ff405534c24a3e57ae508f29b5a6ed0bb5536f7","blockSize":4194304,"blocks":["8a48bb471b338cccf04fd9538ff405534c24a3e57ae508f29b5a6ed0bb5536f7"]}}}},"LICENSE":{"size":1087,"offset":"24180448","integrity":{"algorithm":"SHA256","hash":"b3c8f622a6fb6ee1a16efd68361f9e8ae56abd3f95183c49467a27a2a5706f65","blockSize":4194304,"blocks":["b3c8f622a6fb6ee1a16efd68361f9e8ae56abd3f95183c49467a27a2a5706f65"]}},"package.json":{"size":431,"offset":"24181535","integrity":{"algorithm":"SHA256","hash":"b75cd0a460b197db951820b06883e7d7964be3fe929d506b516b9ee31dd64598","blockSize":4194304,"blocks":["b75cd0a460b197db951820b06883e7d7964be3fe929d506b516b9ee31dd64598"]}}}},"tunnel":{"files":{"index.js":{"size":42,"offset":"24181966","integrity":{"algorithm":"SHA256","hash":"db8151a1f5f71c298bda92fef68f35dcdbfa4a1d5f03fb632532858d09d6344c","blockSize":4194304,"blocks":["db8151a1f5f71c298bda92fef68f35dcdbfa4a1d5f03fb632532858d09d6344c"]}},"lib":{"files":{"tunnel.js":{"size":7628,"offset":"24182008","integrity":{"algorithm":"SHA256","hash":"e60f3c68b621efdcad4a32b68752564def48aaa19e3a702fb1436eb0363d6890","blockSize":4194304,"blocks":["e60f3c68b621efdcad4a32b68752564def48aaa19e3a702fb1436eb0363d6890"]}}}},"LICENSE":{"size":1083,"offset":"24189636","integrity":{"algorithm":"SHA256","hash":"a0932fa80b4c27a0dce36e606e8d755cb02511ff25b41622314882415cfd321b","blockSize":4194304,"blocks":["a0932fa80b4c27a0dce36e606e8d755cb02511ff25b41622314882415cfd321b"]}},"package.json":{"size":545,"offset":"24190719","integrity":{"algorithm":"SHA256","hash":"51d6429585f92acc10f1f4efd9774d7321bdc21eb80f76cc515c460d5c7cb90a","blockSize":4194304,"blocks":["51d6429585f92acc10f1f4efd9774d7321bdc21eb80f76cc515c460d5c7cb90a"]}}}},"type-is":{"files":{"HISTORY.md":{"size":5447,"offset":"24191264","integrity":{"algorithm":"SHA256","hash":"b32b37e94681b90954e8e6d29caef74a6b864055292634c36fb58fb50a9bddae","blockSize":4194304,"blocks":["b32b37e94681b90954e8e6d29caef74a6b864055292634c36fb58fb50a9bddae"]}},"index.js":{"size":5562,"offset":"24196711","integrity":{"algorithm":"SHA256","hash":"4a94338bd746c6b17dd8681f21124f84ed2cdd4a16022849d28900d5e568642a","blockSize":4194304,"blocks":["4a94338bd746c6b17dd8681f21124f84ed2cdd4a16022849d28900d5e568642a"]}},"LICENSE":{"size":1172,"offset":"24202273","integrity":{"algorithm":"SHA256","hash":"23d466b1b134b415b66fa50c6526b4cf3e7b9258554da88d3abb371721e7ce68","blockSize":4194304,"blocks":["23d466b1b134b415b66fa50c6526b4cf3e7b9258554da88d3abb371721e7ce68"]}},"package.json":{"size":668,"offset":"24203445","integrity":{"algorithm":"SHA256","hash":"f45ab954ba5045082c94cf7546b54045c28a723cd0a4454a57347ebc9715c14a","blockSize":4194304,"blocks":["f45ab954ba5045082c94cf7546b54045c28a723cd0a4454a57347ebc9715c14a"]}}}},"universalify":{"files":{"index.js":{"size":712,"offset":"24204113","integrity":{"algorithm":"SHA256","hash":"617bfc3ead7ba8220c74d50aa747e7bb78f393dd5a2a0229b9bfa4de930a7288","blockSize":4194304,"blocks":["617bfc3ead7ba8220c74d50aa747e7bb78f393dd5a2a0229b9bfa4de930a7288"]}},"LICENSE":{"size":1100,"offset":"24204825","integrity":{"algorithm":"SHA256","hash":"3fda5977c0904e226190b4e21d64340c1731e2142d6fe5f3dee0090a216b8b63","blockSize":4194304,"blocks":["3fda5977c0904e226190b4e21d64340c1731e2142d6fe5f3dee0090a216b8b63"]}},"package.json":{"size":618,"offset":"24205925","integrity":{"algorithm":"SHA256","hash":"c88764c8028d862442ffe9e5ea2804576eaaf78d60f8a23125846caccbc59861","blockSize":4194304,"blocks":["c88764c8028d862442ffe9e5ea2804576eaaf78d60f8a23125846caccbc59861"]}}}},"unix-cron":{"files":{"lib":{"files":{"constants.js":{"size":315,"offset":"24206543","integrity":{"algorithm":"SHA256","hash":"036b508a405ac25c578d59d461c24ef8282550b6877c1fe2fd5f6eb3b6ec2934","blockSize":4194304,"blocks":["036b508a405ac25c578d59d461c24ef8282550b6877c1fe2fd5f6eb3b6ec2934"]}},"index.js":{"size":3642,"offset":"24206858","integrity":{"algorithm":"SHA256","hash":"2ac23beb6472b811562820dec7d38db37e4623b159030f8833a449b60914608a","blockSize":4194304,"blocks":["2ac23beb6472b811562820dec7d38db37e4623b159030f8833a449b60914608a"]}},"utils.js":{"size":126,"offset":"24210500","integrity":{"algorithm":"SHA256","hash":"06b9787147a70368cb597e2d4e71b7c15b62f767494e0a2617da9b0e01038dbf","blockSize":4194304,"blocks":["06b9787147a70368cb597e2d4e71b7c15b62f767494e0a2617da9b0e01038dbf"]}}}},"package.json":{"size":313,"offset":"24210626","integrity":{"algorithm":"SHA256","hash":"1dbbeef73957818804a4852784a6dc2ed0e1f4503c4e8f97e3e1a5c2838e7944","blockSize":4194304,"blocks":["1dbbeef73957818804a4852784a6dc2ed0e1f4503c4e8f97e3e1a5c2838e7944"]}}}},"url-parse-lax":{"files":{"index.js":{"size":376,"offset":"24210939","integrity":{"algorithm":"SHA256","hash":"2b12ac6c35b76cf97296d801103cda7167649e63ef3fbff1b84d48db8b8c2a37","blockSize":4194304,"blocks":["2b12ac6c35b76cf97296d801103cda7167649e63ef3fbff1b84d48db8b8c2a37"]}},"license":{"size":1109,"offset":"24211315","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":495,"offset":"24212424","integrity":{"algorithm":"SHA256","hash":"986f69c84efe85fa4893ad299c6878d1da0cd328bca0fa992d1564b6aa055c59","blockSize":4194304,"blocks":["986f69c84efe85fa4893ad299c6878d1da0cd328bca0fa992d1564b6aa055c59"]}}}},"util-deprecate":{"files":{"browser.js":{"size":1614,"offset":"24212919","integrity":{"algorithm":"SHA256","hash":"abaef53ebcdc98f3655331f834986a2d11b6a824f58d670369669246d1b7b69b","blockSize":4194304,"blocks":["abaef53ebcdc98f3655331f834986a2d11b6a824f58d670369669246d1b7b69b"]}},"History.md":{"size":282,"offset":"24214533","integrity":{"algorithm":"SHA256","hash":"ab183ff93d075137547f9d96938185f2cd4b29ba1f4e28b29e6fbd573255968d","blockSize":4194304,"blocks":["ab183ff93d075137547f9d96938185f2cd4b29ba1f4e28b29e6fbd573255968d"]}},"LICENSE":{"size":1102,"offset":"24214815","integrity":{"algorithm":"SHA256","hash":"0154425673db15cdfa80ecba2c9b1f1a867f7197a006764712849bfc3a93cbb7","blockSize":4194304,"blocks":["0154425673db15cdfa80ecba2c9b1f1a867f7197a006764712849bfc3a93cbb7"]}},"node.js":{"size":123,"offset":"24215917","integrity":{"algorithm":"SHA256","hash":"9a86a29fa34a99b861e707345fb1d1e2e55a6c23edb8f992bed57cc607f42d8e","blockSize":4194304,"blocks":["9a86a29fa34a99b861e707345fb1d1e2e55a6c23edb8f992bed57cc607f42d8e"]}},"package.json":{"size":438,"offset":"24216040","integrity":{"algorithm":"SHA256","hash":"f621593e71540f5fee50dd9e89ee538b76bcefe60030cc6f262189fed4cc094d","blockSize":4194304,"blocks":["f621593e71540f5fee50dd9e89ee538b76bcefe60030cc6f262189fed4cc094d"]}}}},"uuid":{"files":{"CONTRIBUTING.md":{"size":513,"offset":"24216478","integrity":{"algorithm":"SHA256","hash":"99b5cc0a56af12be90a669fdffc9f5a721236d2ede0d92e1171bb7097dd9fdd7","blockSize":4194304,"blocks":["99b5cc0a56af12be90a669fdffc9f5a721236d2ede0d92e1171bb7097dd9fdd7"]}},"dist":{"files":{"bin":{"files":{"uuid":{"size":44,"offset":"24216991","integrity":{"algorithm":"SHA256","hash":"30b5422b6c95ccdc402effd7d3354ca6a6bce621cf21d0379749ddf1f96c1ad7","blockSize":4194304,"blocks":["30b5422b6c95ccdc402effd7d3354ca6a6bce621cf21d0379749ddf1f96c1ad7"]}}}},"esm-browser":{"files":{"index.js":{"size":412,"offset":"24217035","integrity":{"algorithm":"SHA256","hash":"3efb8df8c64379c5acbaf0b70ce1a1906375f4b53901b7e90a26863ead50fc30","blockSize":4194304,"blocks":["3efb8df8c64379c5acbaf0b70ce1a1906375f4b53901b7e90a26863ead50fc30"]}},"md5.js":{"size":6852,"offset":"24217447","integrity":{"algorithm":"SHA256","hash":"705eb0feeda58a88a5b887cf580e38bb9979dec642dd663b63c9dc485e956728","blockSize":4194304,"blocks":["705eb0feeda58a88a5b887cf580e38bb9979dec642dd663b63c9dc485e956728"]}},"nil.js":{"size":54,"offset":"24224299","integrity":{"algorithm":"SHA256","hash":"40036d4ffe78154827eedb9c1b3f59f660722907389725842bbc178ba28d2241","blockSize":4194304,"blocks":["40036d4ffe78154827eedb9c1b3f59f660722907389725842bbc178ba28d2241"]}},"parse.js":{"size":1104,"offset":"24224353","integrity":{"algorithm":"SHA256","hash":"1efd0e1dd5d7d205a3405f5aee39029ea60bece8a893b2bf742a16c6a51246a6","blockSize":4194304,"blocks":["1efd0e1dd5d7d205a3405f5aee39029ea60bece8a893b2bf742a16c6a51246a6"]}},"regex.js":{"size":133,"offset":"24225457","integrity":{"algorithm":"SHA256","hash":"9a546763c108d7eeb7283ce26c7a6845a44bd67132005eb32fd1feeca49d1b3f","blockSize":4194304,"blocks":["9a546763c108d7eeb7283ce26c7a6845a44bd67132005eb32fd1feeca49d1b3f"]}},"rng.js":{"size":1040,"offset":"24225590","integrity":{"algorithm":"SHA256","hash":"0e1abdc73fa79ff64006ec6675b06a193f55eac039595cc3867e6567e46f2dd7","blockSize":4194304,"blocks":["0e1abdc73fa79ff64006ec6675b06a193f55eac039595cc3867e6567e46f2dd7"]}},"sha1.js":{"size":2488,"offset":"24226630","integrity":{"algorithm":"SHA256","hash":"0b777c8796a7e0954a47bc5b7d612f89d7cd9218106881a9b4931f8f882fd056","blockSize":4194304,"blocks":["0b777c8796a7e0954a47bc5b7d612f89d7cd9218106881a9b4931f8f882fd056"]}},"stringify.js":{"size":1463,"offset":"24229118","integrity":{"algorithm":"SHA256","hash":"b3e05d40408725c571660f7f1bfdb1b20fde769c5142f23273a95815b2ca5d01","blockSize":4194304,"blocks":["b3e05d40408725c571660f7f1bfdb1b20fde769c5142f23273a95815b2ca5d01"]}},"v1.js":{"size":3296,"offset":"24230581","integrity":{"algorithm":"SHA256","hash":"746184938af3d1e32fb432711c135d95305f839d94a5e90dd23438435a8342b6","blockSize":4194304,"blocks":["746184938af3d1e32fb432711c135d95305f839d94a5e90dd23438435a8342b6"]}},"v3.js":{"size":105,"offset":"24233877","integrity":{"algorithm":"SHA256","hash":"337d2b9ef80229c44c240e4218aa324b129d792701432061946ee4154e30080a","blockSize":4194304,"blocks":["337d2b9ef80229c44c240e4218aa324b129d792701432061946ee4154e30080a"]}},"v35.js":{"size":1657,"offset":"24233982","integrity":{"algorithm":"SHA256","hash":"c418ede8cd4d61f12ae553adac55b1afa2cbd8c8659c31dd657c1decbb36314b","blockSize":4194304,"blocks":["c418ede8cd4d61f12ae553adac55b1afa2cbd8c8659c31dd657c1decbb36314b"]}},"v4.js":{"size":544,"offset":"24235639","integrity":{"algorithm":"SHA256","hash":"971f818a59ef77ee2c213dfea32dc4494823f9b8bd45be19fd81cf49b09f44e5","blockSize":4194304,"blocks":["971f818a59ef77ee2c213dfea32dc4494823f9b8bd45be19fd81cf49b09f44e5"]}},"v5.js":{"size":108,"offset":"24236183","integrity":{"algorithm":"SHA256","hash":"07e6d11989b44edbe92ccb697febb65225ebad32fb2f9c91c5b571a6f5a3c4df","blockSize":4194304,"blocks":["07e6d11989b44edbe92ccb697febb65225ebad32fb2f9c91c5b571a6f5a3c4df"]}},"validate.js":{"size":141,"offset":"24236291","integrity":{"algorithm":"SHA256","hash":"4a782f41298704c0029c245203430b3e4511365bf05a3addacdbae59d9c664fa","blockSize":4194304,"blocks":["4a782f41298704c0029c245203430b3e4511365bf05a3addacdbae59d9c664fa"]}},"version.js":{"size":200,"offset":"24236432","integrity":{"algorithm":"SHA256","hash":"84d1c2f759c39dbf8b26a359b0d68ba9fcc68bf8c3612b8b1bb0df31dfb2e693","blockSize":4194304,"blocks":["84d1c2f759c39dbf8b26a359b0d68ba9fcc68bf8c3612b8b1bb0df31dfb2e693"]}}}},"esm-node":{"files":{"index.js":{"size":412,"offset":"24236632","integrity":{"algorithm":"SHA256","hash":"3efb8df8c64379c5acbaf0b70ce1a1906375f4b53901b7e90a26863ead50fc30","blockSize":4194304,"blocks":["3efb8df8c64379c5acbaf0b70ce1a1906375f4b53901b7e90a26863ead50fc30"]}},"md5.js":{"size":281,"offset":"24237044","integrity":{"algorithm":"SHA256","hash":"2313329bf3ada8cd17046afeefa761bd7daa3821e140fc55d8c2b94ee7760ed4","blockSize":4194304,"blocks":["2313329bf3ada8cd17046afeefa761bd7daa3821e140fc55d8c2b94ee7760ed4"]}},"nil.js":{"size":54,"offset":"24237325","integrity":{"algorithm":"SHA256","hash":"40036d4ffe78154827eedb9c1b3f59f660722907389725842bbc178ba28d2241","blockSize":4194304,"blocks":["40036d4ffe78154827eedb9c1b3f59f660722907389725842bbc178ba28d2241"]}},"parse.js":{"size":1106,"offset":"24237379","integrity":{"algorithm":"SHA256","hash":"2743e5b696fb15df389cf3b1a242e56780f7941bbefc23465529d30e851b80f5","blockSize":4194304,"blocks":["2743e5b696fb15df389cf3b1a242e56780f7941bbefc23465529d30e851b80f5"]}},"regex.js":{"size":133,"offset":"24238485","integrity":{"algorithm":"SHA256","hash":"9a546763c108d7eeb7283ce26c7a6845a44bd67132005eb32fd1feeca49d1b3f","blockSize":4194304,"blocks":["9a546763c108d7eeb7283ce26c7a6845a44bd67132005eb32fd1feeca49d1b3f"]}},"rng.js":{"size":323,"offset":"24238618","integrity":{"algorithm":"SHA256","hash":"ff667aff9367a48cc713d36764cea05bd30e8ba05392430571c54734fc9fde03","blockSize":4194304,"blocks":["ff667aff9367a48cc713d36764cea05bd30e8ba05392430571c54734fc9fde03"]}},"sha1.js":{"size":284,"offset":"24238941","integrity":{"algorithm":"SHA256","hash":"6094b056716c8a37b9f2da365d6c8a17f754543d966411d01dfebd762c94547e","blockSize":4194304,"blocks":["6094b056716c8a37b9f2da365d6c8a17f754543d966411d01dfebd762c94547e"]}},"stringify.js":{"size":1393,"offset":"24239225","integrity":{"algorithm":"SHA256","hash":"224279f45e9b30fca5de4fcf8620aa00ac3c8bef89fc073bfb36b83272bd1556","blockSize":4194304,"blocks":["224279f45e9b30fca5de4fcf8620aa00ac3c8bef89fc073bfb36b83272bd1556"]}},"v1.js":{"size":3306,"offset":"24240618","integrity":{"algorithm":"SHA256","hash":"4cbdb6e889c57896cc8dd35f299aa05a00ff7a43b875a187f87c95e7bb2c3f0f","blockSize":4194304,"blocks":["4cbdb6e889c57896cc8dd35f299aa05a00ff7a43b875a187f87c95e7bb2c3f0f"]}},"v3.js":{"size":107,"offset":"24243924","integrity":{"algorithm":"SHA256","hash":"65b963f24922d433fdc592aa4e2764d10fad59351015bbe5fce0830fe389794a","blockSize":4194304,"blocks":["65b963f24922d433fdc592aa4e2764d10fad59351015bbe5fce0830fe389794a"]}},"v35.js":{"size":1663,"offset":"24244031","integrity":{"algorithm":"SHA256","hash":"56a358587ded91ef272d54a4937e6f59193cd11b51710503859083feb8d6f20f","blockSize":4194304,"blocks":["56a358587ded91ef272d54a4937e6f59193cd11b51710503859083feb8d6f20f"]}},"v4.js":{"size":546,"offset":"24245694","integrity":{"algorithm":"SHA256","hash":"44d2fedb301801c7c60e45934eaa13435614e3d65aedf8759775890de75bed69","blockSize":4194304,"blocks":["44d2fedb301801c7c60e45934eaa13435614e3d65aedf8759775890de75bed69"]}},"v5.js":{"size":110,"offset":"24246240","integrity":{"algorithm":"SHA256","hash":"e9e8d82440c23fc3de56f8acd5a15b1ca2daad6bf6d2e7c4a4b39d04384206d3","blockSize":4194304,"blocks":["e9e8d82440c23fc3de56f8acd5a15b1ca2daad6bf6d2e7c4a4b39d04384206d3"]}},"validate.js":{"size":141,"offset":"24246350","integrity":{"algorithm":"SHA256","hash":"4a782f41298704c0029c245203430b3e4511365bf05a3addacdbae59d9c664fa","blockSize":4194304,"blocks":["4a782f41298704c0029c245203430b3e4511365bf05a3addacdbae59d9c664fa"]}},"version.js":{"size":200,"offset":"24246491","integrity":{"algorithm":"SHA256","hash":"84d1c2f759c39dbf8b26a359b0d68ba9fcc68bf8c3612b8b1bb0df31dfb2e693","blockSize":4194304,"blocks":["84d1c2f759c39dbf8b26a359b0d68ba9fcc68bf8c3612b8b1bb0df31dfb2e693"]}}}},"index.js":{"size":1765,"offset":"24246691","integrity":{"algorithm":"SHA256","hash":"069a2230d395723583c8e45a7c0fee2622af2fbd08dc35f81e4d57836122e59f","blockSize":4194304,"blocks":["069a2230d395723583c8e45a7c0fee2622af2fbd08dc35f81e4d57836122e59f"]}},"md5-browser.js":{"size":7015,"offset":"24248456","integrity":{"algorithm":"SHA256","hash":"21a4e167b7ae498e8f3778bac8d7330929099006afca6adfe76b626e0e41d795","blockSize":4194304,"blocks":["21a4e167b7ae498e8f3778bac8d7330929099006afca6adfe76b626e0e41d795"]}},"md5.js":{"size":550,"offset":"24255471","integrity":{"algorithm":"SHA256","hash":"6ca6276ff35f19ea462bb8c9d6d290994fa9980fc775deb741811ef947196ced","blockSize":4194304,"blocks":["6ca6276ff35f19ea462bb8c9d6d290994fa9980fc775deb741811ef947196ced"]}},"nil.js":{"size":188,"offset":"24256021","integrity":{"algorithm":"SHA256","hash":"7395bd919bd1309bcbced245a59dfc6b077f97992a482af2537343e558795b1f","blockSize":4194304,"blocks":["7395bd919bd1309bcbced245a59dfc6b077f97992a482af2537343e558795b1f"]}},"parse.js":{"size":1380,"offset":"24256209","integrity":{"algorithm":"SHA256","hash":"1a87ed6a6bb0a3edbe266ca55aaf1c5af8e963ee9486f74b59cfd615280b21b4","blockSize":4194304,"blocks":["1a87ed6a6bb0a3edbe266ca55aaf1c5af8e963ee9486f74b59cfd615280b21b4"]}},"regex.js":{"size":267,"offset":"24257589","integrity":{"algorithm":"SHA256","hash":"acc4c54d987f100093097f4f156ff245394c39d1332eb2114d7e40db00bd6ddd","blockSize":4194304,"blocks":["acc4c54d987f100093097f4f156ff245394c39d1332eb2114d7e40db00bd6ddd"]}},"rng-browser.js":{"size":1131,"offset":"24257856","integrity":{"algorithm":"SHA256","hash":"4c88edf4fd7fae3bf84bad34750a55f706c8e522a924af6c6ad22839e3718dd6","blockSize":4194304,"blocks":["4c88edf4fd7fae3bf84bad34750a55f706c8e522a924af6c6ad22839e3718dd6"]}},"rng.js":{"size":549,"offset":"24258987","integrity":{"algorithm":"SHA256","hash":"fdde4350fc69c07bfed4178eedf6121a56264744207d9f5c8f3e5b1b913dbb06","blockSize":4194304,"blocks":["fdde4350fc69c07bfed4178eedf6121a56264744207d9f5c8f3e5b1b913dbb06"]}},"sha1-browser.js":{"size":2609,"offset":"24259536","integrity":{"algorithm":"SHA256","hash":"32982388b377b06298f59db97c98077f06e6b4f29fe284d427195a358a72f19e","blockSize":4194304,"blocks":["32982388b377b06298f59db97c98077f06e6b4f29fe284d427195a358a72f19e"]}},"sha1.js":{"size":553,"offset":"24262145","integrity":{"algorithm":"SHA256","hash":"a9eda407444a3f68a0a4db0373346df18f583abbde2c4bf2b3fbc6d73be2c75e","blockSize":4194304,"blocks":["a9eda407444a3f68a0a4db0373346df18f583abbde2c4bf2b3fbc6d73be2c75e"]}},"stringify.js":{"size":1667,"offset":"24262698","integrity":{"algorithm":"SHA256","hash":"85a70b8982f37ddb434816dcda7628b0319e5a90d46ac6bc9b08d4d15d6a7650","blockSize":4194304,"blocks":["85a70b8982f37ddb434816dcda7628b0319e5a90d46ac6bc9b08d4d15d6a7650"]}},"umd":{"files":{"uuid.min.js":{"size":8160,"offset":"24264365","integrity":{"algorithm":"SHA256","hash":"c5df6d9704bdada96df0770523058f395192ee9d1fe13880eb1d57dfe6417533","blockSize":4194304,"blocks":["c5df6d9704bdada96df0770523058f395192ee9d1fe13880eb1d57dfe6417533"]}},"uuidNIL.min.js":{"size":280,"offset":"24272525","integrity":{"algorithm":"SHA256","hash":"18c98395b8a11f83924c22af88573b8bbe3a5cf4fe7864364e6902e49ac3d7fd","blockSize":4194304,"blocks":["18c98395b8a11f83924c22af88573b8bbe3a5cf4fe7864364e6902e49ac3d7fd"]}},"uuidParse.min.js":{"size":883,"offset":"24272805","integrity":{"algorithm":"SHA256","hash":"555a6f1b1f49532a96c4235ab4de7c1e5fec9b8724bcf1a1247ba4eb33116af2","blockSize":4194304,"blocks":["555a6f1b1f49532a96c4235ab4de7c1e5fec9b8724bcf1a1247ba4eb33116af2"]}},"uuidStringify.min.js":{"size":829,"offset":"24273688","integrity":{"algorithm":"SHA256","hash":"9b6db819fecb2f40d9fa5ac8c892218004b3a633a1ec29d7a873801a7eade28f","blockSize":4194304,"blocks":["9b6db819fecb2f40d9fa5ac8c892218004b3a633a1ec29d7a873801a7eade28f"]}},"uuidv1.min.js":{"size":2020,"offset":"24274517","integrity":{"algorithm":"SHA256","hash":"9963a427c7b05e1ea3c923cfed992cfea294e980e42d754ba593cec66d285a07","blockSize":4194304,"blocks":["9963a427c7b05e1ea3c923cfed992cfea294e980e42d754ba593cec66d285a07"]}},"uuidv3.min.js":{"size":5145,"offset":"24276537","integrity":{"algorithm":"SHA256","hash":"2d31a5a7ef824371df6f91ad677cd137ca9b51a529be40873f9b60009c550932","blockSize":4194304,"blocks":["2d31a5a7ef824371df6f91ad677cd137ca9b51a529be40873f9b60009c550932"]}},"uuidv4.min.js":{"size":1366,"offset":"24281682","integrity":{"algorithm":"SHA256","hash":"4bbb806e743e21bc9f97b62fc0564e0889b7f31ee9d48c3f2b85d4e00fe629cc","blockSize":4194304,"blocks":["4bbb806e743e21bc9f97b62fc0564e0889b7f31ee9d48c3f2b85d4e00fe629cc"]}},"uuidv5.min.js":{"size":3267,"offset":"24283048","integrity":{"algorithm":"SHA256","hash":"1a444d14f3a6f8952bfc827be5c52dc7367c99e5bf30a5e5102f0b4ad420df76","blockSize":4194304,"blocks":["1a444d14f3a6f8952bfc827be5c52dc7367c99e5bf30a5e5102f0b4ad420df76"]}},"uuidValidate.min.js":{"size":420,"offset":"24286315","integrity":{"algorithm":"SHA256","hash":"45a1c7d7618c149522c8f8085675e6707381f6106ca414c294b3e6169065cf21","blockSize":4194304,"blocks":["45a1c7d7618c149522c8f8085675e6707381f6106ca414c294b3e6169065cf21"]}},"uuidVersion.min.js":{"size":506,"offset":"24286735","integrity":{"algorithm":"SHA256","hash":"c0a99b310a43528b5e4f59c87dcc489732bf8c4dd3a367c34cf882a88a3cecca","blockSize":4194304,"blocks":["c0a99b310a43528b5e4f59c87dcc489732bf8c4dd3a367c34cf882a88a3cecca"]}}}},"uuid-bin.js":{"size":2030,"offset":"24287241","integrity":{"algorithm":"SHA256","hash":"7c60635cf5a963da72e35292bcbfa7f7221b08374d69d75103fa82da9d950102","blockSize":4194304,"blocks":["7c60635cf5a963da72e35292bcbfa7f7221b08374d69d75103fa82da9d950102"]}},"v1.js":{"size":3618,"offset":"24289271","integrity":{"algorithm":"SHA256","hash":"6dad9c2e6565ad6b478fba7b2ace95350df56a15a72920e72ac64c3a2691d665","blockSize":4194304,"blocks":["6dad9c2e6565ad6b478fba7b2ace95350df56a15a72920e72ac64c3a2691d665"]}},"v3.js":{"size":414,"offset":"24292889","integrity":{"algorithm":"SHA256","hash":"95e0c6fa204355c6ef7dbac5720a3ef5239454ed6820674dfcc143a55ea6c459","blockSize":4194304,"blocks":["95e0c6fa204355c6ef7dbac5720a3ef5239454ed6820674dfcc143a55ea6c459"]}},"v35.js":{"size":2008,"offset":"24293303","integrity":{"algorithm":"SHA256","hash":"ababd96e6f8b1fca9bb58f43220473f7bd59fbc81b3acb212df924813544283f","blockSize":4194304,"blocks":["ababd96e6f8b1fca9bb58f43220473f7bd59fbc81b3acb212df924813544283f"]}},"v4.js":{"size":860,"offset":"24295311","integrity":{"algorithm":"SHA256","hash":"a9e30e8692dde9dec39a3ef716ef8e650e321813fa9d137f16d27666b9ad96ef","blockSize":4194304,"blocks":["a9e30e8692dde9dec39a3ef716ef8e650e321813fa9d137f16d27666b9ad96ef"]}},"v5.js":{"size":417,"offset":"24296171","integrity":{"algorithm":"SHA256","hash":"d15c31975f31b9abf6a195e70a3dca0843a9257cb51b49214cf7a9f4ed30fc5a","blockSize":4194304,"blocks":["d15c31975f31b9abf6a195e70a3dca0843a9257cb51b49214cf7a9f4ed30fc5a"]}},"validate.js":{"size":410,"offset":"24296588","integrity":{"algorithm":"SHA256","hash":"5497d9adffd73474cf379d3e1b76b28698e408124a0726d54e88282500378502","blockSize":4194304,"blocks":["5497d9adffd73474cf379d3e1b76b28698e408124a0726d54e88282500378502"]}},"version.js":{"size":474,"offset":"24296998","integrity":{"algorithm":"SHA256","hash":"cad5f0ecd518983e310856cafd54d4d0de0b9db3c8e3bd97ec8e773ef63de6e8","blockSize":4194304,"blocks":["cad5f0ecd518983e310856cafd54d4d0de0b9db3c8e3bd97ec8e773ef63de6e8"]}}}},"LICENSE.md":{"size":1109,"offset":"24297472","integrity":{"algorithm":"SHA256","hash":"beaa6b04fb82e41dd2ad679e19e27953afb5999b1abbb455b6564e78ebfeb332","blockSize":4194304,"blocks":["beaa6b04fb82e41dd2ad679e19e27953afb5999b1abbb455b6564e78ebfeb332"]}},"package.json":{"size":2601,"offset":"24298581","integrity":{"algorithm":"SHA256","hash":"c33d17ad3546ea553db5df68edb1ac9a794e2e57fc99f838a9d78434ae009abc","blockSize":4194304,"blocks":["c33d17ad3546ea553db5df68edb1ac9a794e2e57fc99f838a9d78434ae009abc"]}},"wrapper.mjs":{"size":323,"offset":"24301182","integrity":{"algorithm":"SHA256","hash":"f6835608d7c4b422bb11ab4689bcf91e166ecbbd63aa3fa2b83c448835cd80a5","blockSize":4194304,"blocks":["f6835608d7c4b422bb11ab4689bcf91e166ecbbd63aa3fa2b83c448835cd80a5"]}}}},"vary":{"files":{"HISTORY.md":{"size":792,"offset":"24301505","integrity":{"algorithm":"SHA256","hash":"273b0ea4abb4c7357db4eed63e84f7a283847ed0165d041b25be37071284d7e5","blockSize":4194304,"blocks":["273b0ea4abb4c7357db4eed63e84f7a283847ed0165d041b25be37071284d7e5"]}},"index.js":{"size":2930,"offset":"24302297","integrity":{"algorithm":"SHA256","hash":"8e40311960636d40473c57e335bbca115036766bf150df296b941256432ab410","blockSize":4194304,"blocks":["8e40311960636d40473c57e335bbca115036766bf150df296b941256432ab410"]}},"LICENSE":{"size":1094,"offset":"24305227","integrity":{"algorithm":"SHA256","hash":"bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400","blockSize":4194304,"blocks":["bd47ce7b88c7759630d1e2b9fcfa170a0f1fde522be09e13fb1581a79d090400"]}},"package.json":{"size":756,"offset":"24306321","integrity":{"algorithm":"SHA256","hash":"36305415feda3fe75fca621bc2c7493b1c2eab616bc3b4c5fb37be20052cf0b7","blockSize":4194304,"blocks":["36305415feda3fe75fca621bc2c7493b1c2eab616bc3b4c5fb37be20052cf0b7"]}}}},"velocity-animate":{"files":{"LICENSE.md":{"size":1096,"offset":"24307077","integrity":{"algorithm":"SHA256","hash":"12bd76e8ae807932538f5fcdbabd59eb9e55b07e0e7b46099712b1072aafbe0a","blockSize":4194304,"blocks":["12bd76e8ae807932538f5fcdbabd59eb9e55b07e0e7b46099712b1072aafbe0a"]}},"package.json":{"size":649,"offset":"24308173","integrity":{"algorithm":"SHA256","hash":"c8ced91dc8b4f9a31d4a595691f64d97da66ac01b067a3f376a5ad5780e580ea","blockSize":4194304,"blocks":["c8ced91dc8b4f9a31d4a595691f64d97da66ac01b067a3f376a5ad5780e580ea"]}},"velocity.js":{"size":206405,"offset":"24308822","integrity":{"algorithm":"SHA256","hash":"fe9bdf2139b76e077c4650122677e67657644664faab8ff68ed05781015a3b2b","blockSize":4194304,"blocks":["fe9bdf2139b76e077c4650122677e67657644664faab8ff68ed05781015a3b2b"]}},"velocity.min.js":{"size":44808,"offset":"24515227","integrity":{"algorithm":"SHA256","hash":"d47aa823be8918a035ecad02d2cf4af0bfe2cbc3c00b8dca54bb758510ff3a37","blockSize":4194304,"blocks":["d47aa823be8918a035ecad02d2cf4af0bfe2cbc3c00b8dca54bb758510ff3a37"]}},"velocity.ui.js":{"size":29117,"offset":"24560035","integrity":{"algorithm":"SHA256","hash":"e5c6727680075989f7bc791612378b8c5b6e9303d80b7ae6375c8b560732a33a","blockSize":4194304,"blocks":["e5c6727680075989f7bc791612378b8c5b6e9303d80b7ae6375c8b560732a33a"]}},"velocity.ui.min.js":{"size":13558,"offset":"24589152","integrity":{"algorithm":"SHA256","hash":"bc827b0bcda55f06aa076663b3fd1a9d37501493487d98f3eca1a4acd89a613b","blockSize":4194304,"blocks":["bc827b0bcda55f06aa076663b3fd1a9d37501493487d98f3eca1a4acd89a613b"]}}}},"vue":{"files":{"compiler-sfc":{"files":{"index.js":{"size":46,"offset":"25072422","integrity":{"algorithm":"SHA256","hash":"bcac58b9da93b9c20bab46751dc36ce1ecf6e209b2661681eb6d4e16750c9c6c","blockSize":4194304,"blocks":["bcac58b9da93b9c20bab46751dc36ce1ecf6e209b2661681eb6d4e16750c9c6c"]}},"index.mjs":{"size":34,"offset":"25072468","integrity":{"algorithm":"SHA256","hash":"3feec212c0aeb91e5a6e62caaf9f128954590210f8c302910ea377c088f6b61a","blockSize":4194304,"blocks":["3feec212c0aeb91e5a6e62caaf9f128954590210f8c302910ea377c088f6b61a"]}},"package.json":{"size":75,"offset":"25072502","integrity":{"algorithm":"SHA256","hash":"87b52004c4020c95aeafaaa23f6e21765219547828e2c9f3a94cd9530dd4b614","blockSize":4194304,"blocks":["87b52004c4020c95aeafaaa23f6e21765219547828e2c9f3a94cd9530dd4b614"]}}}},"dist":{"files":{"compiler-sfc.js":{"size":341,"offset":"25072577","integrity":{"algorithm":"SHA256","hash":"b46a26f75a984921c5fc0ea5eae83d08db17ed7238d1b20e276f5cfece68b3a0","blockSize":4194304,"blocks":["b46a26f75a984921c5fc0ea5eae83d08db17ed7238d1b20e276f5cfece68b3a0"]}},"vue.common.dev.js":{"size":398717,"offset":"25072918","integrity":{"algorithm":"SHA256","hash":"7d806ebb649ec68488b24fb1a0dcbc3fe197b1297571b90dc3096d35ed415f1c","blockSize":4194304,"blocks":["7d806ebb649ec68488b24fb1a0dcbc3fe197b1297571b90dc3096d35ed415f1c"]}},"vue.common.js":{"size":157,"offset":"25471635","integrity":{"algorithm":"SHA256","hash":"1b70996b2fe7a1beed1b86a2e4523f3b6b186a4c9ab49fb4ba49c39c6dcf48e7","blockSize":4194304,"blocks":["1b70996b2fe7a1beed1b86a2e4523f3b6b186a4c9ab49fb4ba49c39c6dcf48e7"]}},"vue.common.prod.js":{"size":103924,"offset":"25471792","integrity":{"algorithm":"SHA256","hash":"e55dbdab4fffea18e4a3560acc32f149d6bb1cd92e6ef678ba6766664d9dcd0f","blockSize":4194304,"blocks":["e55dbdab4fffea18e4a3560acc32f149d6bb1cd92e6ef678ba6766664d9dcd0f"]}},"vue.esm.browser.js":{"size":397197,"offset":"25575716","integrity":{"algorithm":"SHA256","hash":"975dc7ccb902e813a1fa3d333184b0ce55f0901e1ded6f80e6f683c0e4fb5260","blockSize":4194304,"blocks":["975dc7ccb902e813a1fa3d333184b0ce55f0901e1ded6f80e6f683c0e4fb5260"]}},"vue.esm.browser.min.js":{"size":104076,"offset":"25972913","integrity":{"algorithm":"SHA256","hash":"c2892bcb65bdf306d0296772517addea0533bf7a29a2b79868aa4de631ec303d","blockSize":4194304,"blocks":["c2892bcb65bdf306d0296772517addea0533bf7a29a2b79868aa4de631ec303d"]}},"vue.esm.js":{"size":417994,"offset":"26076989","integrity":{"algorithm":"SHA256","hash":"8bb4b391c641caf3d5d1df861a3665348f7c74d2d22b8ed882e562c3b480a111","blockSize":4194304,"blocks":["8bb4b391c641caf3d5d1df861a3665348f7c74d2d22b8ed882e562c3b480a111"]}},"vue.js":{"size":433738,"offset":"26494983","integrity":{"algorithm":"SHA256","hash":"a2029697010cdf442eea110b24c9735fdacfa9219860ad6ed888b320d102e609","blockSize":4194304,"blocks":["a2029697010cdf442eea110b24c9735fdacfa9219860ad6ed888b320d102e609"]}},"vue.min.js":{"size":107302,"offset":"26928721","integrity":{"algorithm":"SHA256","hash":"d601f229247b261d18181988f7337b3f652165187f3c22a109821a50ea96a0f9","blockSize":4194304,"blocks":["d601f229247b261d18181988f7337b3f652165187f3c22a109821a50ea96a0f9"]}},"vue.runtime.common.dev.js":{"size":290222,"offset":"27036023","integrity":{"algorithm":"SHA256","hash":"a5733932477365f447dcd65da0b76020b71a431969801c8ac010a412bb62776e","blockSize":4194304,"blocks":["a5733932477365f447dcd65da0b76020b71a431969801c8ac010a412bb62776e"]}},"vue.runtime.common.js":{"size":173,"offset":"27326245","integrity":{"algorithm":"SHA256","hash":"88f7fdf8e822f50d0446dcceb543df06db44653ed219bde5ffd2c095da832664","blockSize":4194304,"blocks":["88f7fdf8e822f50d0446dcceb543df06db44653ed219bde5ffd2c095da832664"]}},"vue.runtime.common.prod.js":{"size":74420,"offset":"27326418","integrity":{"algorithm":"SHA256","hash":"e88d7311feed41dddbfb23de3208c0902cef4549698a7b17d716d6135feb7cf2","blockSize":4194304,"blocks":["e88d7311feed41dddbfb23de3208c0902cef4549698a7b17d716d6135feb7cf2"]}},"vue.runtime.esm.js":{"size":304043,"offset":"27400838","integrity":{"algorithm":"SHA256","hash":"fa3f7b8ba825e774a2ef4212f602baeb46758774af156757a67a00c757a83c88","blockSize":4194304,"blocks":["fa3f7b8ba825e774a2ef4212f602baeb46758774af156757a67a00c757a83c88"]}},"vue.runtime.js":{"size":315211,"offset":"27704881","integrity":{"algorithm":"SHA256","hash":"d118f329ad3b8fe933d09508af5aea8b9ede2e54ab584ecb16f00410d46355fd","blockSize":4194304,"blocks":["d118f329ad3b8fe933d09508af5aea8b9ede2e54ab584ecb16f00410d46355fd"]}},"vue.runtime.min.js":{"size":76033,"offset":"28020092","integrity":{"algorithm":"SHA256","hash":"72e9e3a3d67504b4790f56d7a644cb1417b421f2f08aa4be9757f0cfabbe1edc","blockSize":4194304,"blocks":["72e9e3a3d67504b4790f56d7a644cb1417b421f2f08aa4be9757f0cfabbe1edc"]}},"vue.runtime.mjs":{"size":1024,"offset":"28096125","integrity":{"algorithm":"SHA256","hash":"7f734a3e19b78726ee23940e46f5fb7d37687f86a22229e54e7988e0ec04ebf2","blockSize":4194304,"blocks":["7f734a3e19b78726ee23940e46f5fb7d37687f86a22229e54e7988e0ec04ebf2"]}}}},"LICENSE":{"size":1091,"offset":"28097149","integrity":{"algorithm":"SHA256","hash":"17fb24bc303763f3fe1911ee24e5225c7ad59f0e3a5d8123e9b730c100a306a6","blockSize":4194304,"blocks":["17fb24bc303763f3fe1911ee24e5225c7ad59f0e3a5d8123e9b730c100a306a6"]}},"package.json":{"size":2694,"offset":"28098240","integrity":{"algorithm":"SHA256","hash":"70f76be5f1df4423a4f5e9452bbbc565f6e0779979e431f31c9bb5f30c43d469","blockSize":4194304,"blocks":["70f76be5f1df4423a4f5e9452bbbc565f6e0779979e431f31c9bb5f30c43d469"]}},"packages":{"files":{"compiler-sfc":{"files":{"api-extractor.json":{"size":1193,"offset":"28100934","integrity":{"algorithm":"SHA256","hash":"5a99d1d850517d5cfe6dc6834cb2266a68153872a382962159d1ce7de670b89a","blockSize":4194304,"blocks":["5a99d1d850517d5cfe6dc6834cb2266a68153872a382962159d1ce7de670b89a"]}},"dist":{"files":{"compiler-sfc.js":{"size":658579,"offset":"28102127","integrity":{"algorithm":"SHA256","hash":"afdab6bec8dc530d4ea81f9262b7c2aa63ebf0cca10f3f74f84c7f7807924c5b","blockSize":4194304,"blocks":["afdab6bec8dc530d4ea81f9262b7c2aa63ebf0cca10f3f74f84c7f7807924c5b"]}}}},"package.json":{"size":844,"offset":"28760706","integrity":{"algorithm":"SHA256","hash":"42bbfcb0494a71be36b2ed35c148374ac510c0cbf072373f9cc6664e6e93b0ee","blockSize":4194304,"blocks":["42bbfcb0494a71be36b2ed35c148374ac510c0cbf072373f9cc6664e6e93b0ee"]}},"src":{"files":{"babelUtils.ts":{"size":10739,"offset":"28761550","integrity":{"algorithm":"SHA256","hash":"f1679c580ba404a92abc08c56bb48f53dc51551d706ce44fa96b1468c11603d8","blockSize":4194304,"blocks":["f1679c580ba404a92abc08c56bb48f53dc51551d706ce44fa96b1468c11603d8"]}},"compileScript.ts":{"size":57440,"offset":"28772289","integrity":{"algorithm":"SHA256","hash":"f5736cee4846aaf07431540fa5263527ac88b945497c53fbc71b77e57e67efbb","blockSize":4194304,"blocks":["f5736cee4846aaf07431540fa5263527ac88b945497c53fbc71b77e57e67efbb"]}},"compileStyle.ts":{"size":3515,"offset":"28829729","integrity":{"algorithm":"SHA256","hash":"101563c60fc6109ddd509e4d010bf21a94c8b1f74ff0660ba7fc3c7211071081","blockSize":4194304,"blocks":["101563c60fc6109ddd509e4d010bf21a94c8b1f74ff0660ba7fc3c7211071081"]}},"compileTemplate.ts":{"size":5762,"offset":"28833244","integrity":{"algorithm":"SHA256","hash":"f9a95bef177fe08107b09b0473354e7f7bfb6f714c30be17f291f9d15e7444c2","blockSize":4194304,"blocks":["f9a95bef177fe08107b09b0473354e7f7bfb6f714c30be17f291f9d15e7444c2"]}},"cssVars.ts":{"size":4621,"offset":"28839006","integrity":{"algorithm":"SHA256","hash":"61cfa4325abe4aae6972f9923964964d72fa6b7c1171616d1ed61ff295a9488e","blockSize":4194304,"blocks":["61cfa4325abe4aae6972f9923964964d72fa6b7c1171616d1ed61ff295a9488e"]}},"index.ts":{"size":1103,"offset":"28843627","integrity":{"algorithm":"SHA256","hash":"65de73fc2b55c14e839c21d63a6f0ed5592de09998f9006e156c4b647d3c03ce","blockSize":4194304,"blocks":["65de73fc2b55c14e839c21d63a6f0ed5592de09998f9006e156c4b647d3c03ce"]}},"parse.ts":{"size":3013,"offset":"28844730","integrity":{"algorithm":"SHA256","hash":"37a4ef1de0905d347bbed33841d0f3769ea2d89aa6f4878b3db9502df6179e3c","blockSize":4194304,"blocks":["37a4ef1de0905d347bbed33841d0f3769ea2d89aa6f4878b3db9502df6179e3c"]}},"parseComponent.ts":{"size":5729,"offset":"28847743","integrity":{"algorithm":"SHA256","hash":"b1a1b01931e6c490e22c65495d02ab8049e59ef2e330b01cdd5190e159d4becb","blockSize":4194304,"blocks":["b1a1b01931e6c490e22c65495d02ab8049e59ef2e330b01cdd5190e159d4becb"]}},"prefixIdentifiers.ts":{"size":2265,"offset":"28853472","integrity":{"algorithm":"SHA256","hash":"fd71d0e4d6565375357d84411d804e00d6edf82d402a5bac619bf42db489ccdd","blockSize":4194304,"blocks":["fd71d0e4d6565375357d84411d804e00d6edf82d402a5bac619bf42db489ccdd"]}},"rewriteDefault.ts":{"size":3659,"offset":"28855737","integrity":{"algorithm":"SHA256","hash":"411f330d1255ec3f14eee08ca448f08c1a5a59ab9f8ef0bde37546a7657bfc79","blockSize":4194304,"blocks":["411f330d1255ec3f14eee08ca448f08c1a5a59ab9f8ef0bde37546a7657bfc79"]}},"stylePlugins":{"files":{"scoped.ts":{"size":6228,"offset":"28859396","integrity":{"algorithm":"SHA256","hash":"9428258565c9e4d734d9854eed74737a0c986d56e3396d33e07e449e38177387","blockSize":4194304,"blocks":["9428258565c9e4d734d9854eed74737a0c986d56e3396d33e07e449e38177387"]}},"trim.ts":{"size":433,"offset":"28865624","integrity":{"algorithm":"SHA256","hash":"042179539afde6e6b24df7e78a94f38b21c090d7a31f3cec021a08d64b158fad","blockSize":4194304,"blocks":["042179539afde6e6b24df7e78a94f38b21c090d7a31f3cec021a08d64b158fad"]}}}},"stylePreprocessors.ts":{"size":3251,"offset":"28866057","integrity":{"algorithm":"SHA256","hash":"5e1ac4f3d916f8bc626594f3ef640831eecf6d448a48e498c2795d456f12da62","blockSize":4194304,"blocks":["5e1ac4f3d916f8bc626594f3ef640831eecf6d448a48e498c2795d456f12da62"]}},"templateCompilerModules":{"files":{"assetUrl.ts":{"size":2110,"offset":"28869308","integrity":{"algorithm":"SHA256","hash":"a149f820155db48e09af4e4deb2812af5910c4e10c1c88d6b04799706ce1f0e9","blockSize":4194304,"blocks":["a149f820155db48e09af4e4deb2812af5910c4e10c1c88d6b04799706ce1f0e9"]}},"srcset.ts":{"size":2234,"offset":"28871418","integrity":{"algorithm":"SHA256","hash":"54ec8734bbde99314cfa19540662092df9dd380e26c7d6090d1770cea0142fe9","blockSize":4194304,"blocks":["54ec8734bbde99314cfa19540662092df9dd380e26c7d6090d1770cea0142fe9"]}},"utils.ts":{"size":2803,"offset":"28873652","integrity":{"algorithm":"SHA256","hash":"4ae5d4928abbe49a564c8366d45e29ecde75b7a2ecc88cec515a4629f5e41e57","blockSize":4194304,"blocks":["4ae5d4928abbe49a564c8366d45e29ecde75b7a2ecc88cec515a4629f5e41e57"]}}}},"types.ts":{"size":1708,"offset":"28876455","integrity":{"algorithm":"SHA256","hash":"d4ae6924d36a64e4e2231d5576fbc55e1492957833af348c64183813f9e4a9e5","blockSize":4194304,"blocks":["d4ae6924d36a64e4e2231d5576fbc55e1492957833af348c64183813f9e4a9e5"]}},"warn.ts":{"size":401,"offset":"28878163","integrity":{"algorithm":"SHA256","hash":"fe5620cdee339cbf43dafe887c06a3f38448b422fe13ebba42d7bdbe515dc6c7","blockSize":4194304,"blocks":["fe5620cdee339cbf43dafe887c06a3f38448b422fe13ebba42d7bdbe515dc6c7"]}}}},"test":{"files":{"__snapshots__":{"files":{"compileScript.spec.ts.snap":{"size":19512,"offset":"28878564","integrity":{"algorithm":"SHA256","hash":"6ed15170f21102476bb49ee7fc2834af870031d2300407604d0382c14ffa3735","blockSize":4194304,"blocks":["6ed15170f21102476bb49ee7fc2834af870031d2300407604d0382c14ffa3735"]}},"cssVars.spec.ts.snap":{"size":4491,"offset":"28898076","integrity":{"algorithm":"SHA256","hash":"ddc113f859ce0139453951fe82745eead4f51c210e93b5ad7d8360c7b62ac2f6","blockSize":4194304,"blocks":["ddc113f859ce0139453951fe82745eead4f51c210e93b5ad7d8360c7b62ac2f6"]}}}},"compileScript.spec.ts":{"size":45661,"offset":"28902567","integrity":{"algorithm":"SHA256","hash":"e85aafae28e135fe9d948ec7487d86c5f616fb986d673a3a0a8c1b7d11a5cd13","blockSize":4194304,"blocks":["e85aafae28e135fe9d948ec7487d86c5f616fb986d673a3a0a8c1b7d11a5cd13"]}},"compileStyle.spec.ts":{"size":4628,"offset":"28948228","integrity":{"algorithm":"SHA256","hash":"128866369ab53447f709063a3371dcf8176618873f4561c9a1c1c56697ea2f09","blockSize":4194304,"blocks":["128866369ab53447f709063a3371dcf8176618873f4561c9a1c1c56697ea2f09"]}},"compileTemplate.spec.ts":{"size":7079,"offset":"28952856","integrity":{"algorithm":"SHA256","hash":"9222f15cae2e363ed90c0953eae095e6a7a4efdccd17c2a4e0fba062c7db50c7","blockSize":4194304,"blocks":["9222f15cae2e363ed90c0953eae095e6a7a4efdccd17c2a4e0fba062c7db50c7"]}},"cssVars.spec.ts":{"size":6646,"offset":"28959935","integrity":{"algorithm":"SHA256","hash":"9befa674e2419f87fc87b325785ea9e0219f308aba4085db6cd8253bbb016dcf","blockSize":4194304,"blocks":["9befa674e2419f87fc87b325785ea9e0219f308aba4085db6cd8253bbb016dcf"]}},"parseComponent.spec.ts":{"size":7586,"offset":"28966581","integrity":{"algorithm":"SHA256","hash":"ebb6e0f95c05590f9c51e3c2b6b171417fca38ec8b62f77f725dbc88aa0d2332","blockSize":4194304,"blocks":["ebb6e0f95c05590f9c51e3c2b6b171417fca38ec8b62f77f725dbc88aa0d2332"]}},"prefixIdentifiers.spec.ts":{"size":2449,"offset":"28974167","integrity":{"algorithm":"SHA256","hash":"5bad03e91ed84f1e10f13863f155e4c698c614ad62dd7115863162a29e146609","blockSize":4194304,"blocks":["5bad03e91ed84f1e10f13863f155e4c698c614ad62dd7115863162a29e146609"]}},"rewriteDefault.spec.ts":{"size":6208,"offset":"28976616","integrity":{"algorithm":"SHA256","hash":"45ae8bae99ddbc9d7ac19b992acc0547b497914b528f53af9bab35753df735da","blockSize":4194304,"blocks":["45ae8bae99ddbc9d7ac19b992acc0547b497914b528f53af9bab35753df735da"]}},"stylePluginScoped.spec.ts":{"size":3350,"offset":"28982824","integrity":{"algorithm":"SHA256","hash":"04a010cd11ea2e1b3f1c1af5c6a30b54829534dfda7e0b4154de5a869ac9f2fd","blockSize":4194304,"blocks":["04a010cd11ea2e1b3f1c1af5c6a30b54829534dfda7e0b4154de5a869ac9f2fd"]}},"tsconfig.json":{"size":140,"offset":"28986174","integrity":{"algorithm":"SHA256","hash":"55d52b094b469b4f859e9f598ef2d96328d90f246fdc9ce6fca83c503120125e","blockSize":4194304,"blocks":["55d52b094b469b4f859e9f598ef2d96328d90f246fdc9ce6fca83c503120125e"]}},"util.ts":{"size":734,"offset":"28986314","integrity":{"algorithm":"SHA256","hash":"652030a75e2ef6e334efae0734e0884bbe3d6a500ae00c20ce1b5f32a55eb87d","blockSize":4194304,"blocks":["652030a75e2ef6e334efae0734e0884bbe3d6a500ae00c20ce1b5f32a55eb87d"]}}}}}}}},"src":{"files":{"compiler":{"files":{"codeframe.ts":{"size":1401,"offset":"28987048","integrity":{"algorithm":"SHA256","hash":"ebc91a95dce8ce1abd239ec3a91d03434e957959c3d47fc445f565078692d058","blockSize":4194304,"blocks":["ebc91a95dce8ce1abd239ec3a91d03434e957959c3d47fc445f565078692d058"]}},"codegen":{"files":{"events.ts":{"size":5154,"offset":"28988449","integrity":{"algorithm":"SHA256","hash":"252312e3d45b64a3d5c616d9233f7191f6878092d8aaa39772cfeb133f4a2d84","blockSize":4194304,"blocks":["252312e3d45b64a3d5c616d9233f7191f6878092d8aaa39772cfeb133f4a2d84"]}},"index.ts":{"size":18634,"offset":"28993603","integrity":{"algorithm":"SHA256","hash":"56e3739c7de441ef3c0a3a9edca3acac51b272a32a878300715264630ff4ec9d","blockSize":4194304,"blocks":["56e3739c7de441ef3c0a3a9edca3acac51b272a32a878300715264630ff4ec9d"]}}}},"create-compiler.ts":{"size":2520,"offset":"29012237","integrity":{"algorithm":"SHA256","hash":"099d4dc2ab5c2bee55ab06591c104dc29c3190bd57d63ef9f270b091cd127509","blockSize":4194304,"blocks":["099d4dc2ab5c2bee55ab06591c104dc29c3190bd57d63ef9f270b091cd127509"]}},"directives":{"files":{"bind.ts":{"size":340,"offset":"29014757","integrity":{"algorithm":"SHA256","hash":"5278dde0212d227b8d00395f965c68f8ab06bb9c3d7001e505d6a4d60761315e","blockSize":4194304,"blocks":["5278dde0212d227b8d00395f965c68f8ab06bb9c3d7001e505d6a4d60761315e"]}},"index.ts":{"size":131,"offset":"29015097","integrity":{"algorithm":"SHA256","hash":"30e17b6348e0af31d14c6bca7aec982be4330c116e3d96152795354c1d8e57b7","blockSize":4194304,"blocks":["30e17b6348e0af31d14c6bca7aec982be4330c116e3d96152795354c1d8e57b7"]}},"model.ts":{"size":3136,"offset":"29015228","integrity":{"algorithm":"SHA256","hash":"444081e62a428674bb5578a98529b62e93e766a797e660bb957401fcd7a56599","blockSize":4194304,"blocks":["444081e62a428674bb5578a98529b62e93e766a797e660bb957401fcd7a56599"]}},"on.ts":{"size":330,"offset":"29018364","integrity":{"algorithm":"SHA256","hash":"099f2783bf217e714a194c12123855f30405722891c9ac580e227fa8288e9336","blockSize":4194304,"blocks":["099f2783bf217e714a194c12123855f30405722891c9ac580e227fa8288e9336"]}}}},"error-detector.ts":{"size":4293,"offset":"29018694","integrity":{"algorithm":"SHA256","hash":"973b364ca8c4cc7cb7e1d1e839fc23b8a17822b17c62c1d8b8b3b44e912e0af1","blockSize":4194304,"blocks":["973b364ca8c4cc7cb7e1d1e839fc23b8a17822b17c62c1d8b8b3b44e912e0af1"]}},"helpers.ts":{"size":5901,"offset":"29022987","integrity":{"algorithm":"SHA256","hash":"f077d3e6e1e996f74d6ea1922bfc6ccd19ab674e728abbf75d074fb4cfe1b030","blockSize":4194304,"blocks":["f077d3e6e1e996f74d6ea1922bfc6ccd19ab674e728abbf75d074fb4cfe1b030"]}},"index.ts":{"size":834,"offset":"29028888","integrity":{"algorithm":"SHA256","hash":"5ed6a2ec2b8544f2a28b30c8a3b7871d2adc8324b3fc07101b6abc5362cef0cb","blockSize":4194304,"blocks":["5ed6a2ec2b8544f2a28b30c8a3b7871d2adc8324b3fc07101b6abc5362cef0cb"]}},"optimizer.ts":{"size":3750,"offset":"29029722","integrity":{"algorithm":"SHA256","hash":"d07689d98ad9b24e1d9b4708dbfa07e9bbca93f866b3d67c86e499f5f10b95df","blockSize":4194304,"blocks":["d07689d98ad9b24e1d9b4708dbfa07e9bbca93f866b3d67c86e499f5f10b95df"]}},"parser":{"files":{"entity-decoder.ts":{"size":184,"offset":"29033472","integrity":{"algorithm":"SHA256","hash":"141466394c19b222ee93edabca041398fb4d675a3afb5827d81e1347ec599445","blockSize":4194304,"blocks":["141466394c19b222ee93edabca041398fb4d675a3afb5827d81e1347ec599445"]}},"filter-parser.ts":{"size":2767,"offset":"29033656","integrity":{"algorithm":"SHA256","hash":"bfdfef574eff14a060c7b7a0e6e97d95dbf318af477f84ed934b8b864da61ea6","blockSize":4194304,"blocks":["bfdfef574eff14a060c7b7a0e6e97d95dbf318af477f84ed934b8b864da61ea6"]}},"html-parser.ts":{"size":9784,"offset":"29036423","integrity":{"algorithm":"SHA256","hash":"30b09dc091141254c59aa9f0608ac35fcea6385c1f52600969d46bc0a178251e","blockSize":4194304,"blocks":["30b09dc091141254c59aa9f0608ac35fcea6385c1f52600969d46bc0a178251e"]}},"index.ts":{"size":27891,"offset":"29046207","integrity":{"algorithm":"SHA256","hash":"beb950459eb34bd85eec37a7922d5a39f6d4dae8bd63e7c8a3910cd6fb100cb8","blockSize":4194304,"blocks":["beb950459eb34bd85eec37a7922d5a39f6d4dae8bd63e7c8a3910cd6fb100cb8"]}},"text-parser.ts":{"size":1488,"offset":"29074098","integrity":{"algorithm":"SHA256","hash":"b9e41b71d6a430db325f0a4a4289ffc946611f87a60d139a8ccb8b169ccbf81c","blockSize":4194304,"blocks":["b9e41b71d6a430db325f0a4a4289ffc946611f87a60d139a8ccb8b169ccbf81c"]}}}},"to-function.ts":{"size":3422,"offset":"29075586","integrity":{"algorithm":"SHA256","hash":"5392c87d8ff7c13f990ea60ca21d9b2a1a217da17cc70da0ee756029776255af","blockSize":4194304,"blocks":["5392c87d8ff7c13f990ea60ca21d9b2a1a217da17cc70da0ee756029776255af"]}}}},"core":{"files":{"components":{"files":{"index.ts":{"size":69,"offset":"29079008","integrity":{"algorithm":"SHA256","hash":"b68964d88f382bf3e9e0975a8996fec5a345b311e4f6629cb960d6f6d098f8d5","blockSize":4194304,"blocks":["b68964d88f382bf3e9e0975a8996fec5a345b311e4f6629cb960d6f6d098f8d5"]}},"keep-alive.ts":{"size":4272,"offset":"29079077","integrity":{"algorithm":"SHA256","hash":"14d8b511b0610d59919c062ba7c8e227146ba80ca296883343efec90fb8dc6d6","blockSize":4194304,"blocks":["14d8b511b0610d59919c062ba7c8e227146ba80ca296883343efec90fb8dc6d6"]}}}},"config.ts":{"size":2793,"offset":"29083349","integrity":{"algorithm":"SHA256","hash":"2cb1faa2f252eabfd25527a160d420a431b12ced1569417653dbc99994c79d78","blockSize":4194304,"blocks":["2cb1faa2f252eabfd25527a160d420a431b12ced1569417653dbc99994c79d78"]}},"global-api":{"files":{"assets.ts":{"size":1147,"offset":"29086142","integrity":{"algorithm":"SHA256","hash":"c47faceb85149c9f1aed161cc4c57b4c838336afd4320b96fdae02646ca7c8d3","blockSize":4194304,"blocks":["c47faceb85149c9f1aed161cc4c57b4c838336afd4320b96fdae02646ca7c8d3"]}},"extend.ts":{"size":2855,"offset":"29087289","integrity":{"algorithm":"SHA256","hash":"46077c79f1d2591529c3100c58a9f622344608cd1baf0a41200cf51639e1407b","blockSize":4194304,"blocks":["46077c79f1d2591529c3100c58a9f622344608cd1baf0a41200cf51639e1407b"]}},"index.ts":{"size":1678,"offset":"29090144","integrity":{"algorithm":"SHA256","hash":"47635c83fc889bc4b4945ea31189eac4b90bd18c4cf407f3363addf7b4437068","blockSize":4194304,"blocks":["47635c83fc889bc4b4945ea31189eac4b90bd18c4cf407f3363addf7b4437068"]}},"mixin.ts":{"size":256,"offset":"29091822","integrity":{"algorithm":"SHA256","hash":"aa79b6f03564afbaba7064d78ea6dd53618911180736298d6f912f8786c7e83b","blockSize":4194304,"blocks":["aa79b6f03564afbaba7064d78ea6dd53618911180736298d6f912f8786c7e83b"]}},"use.ts":{"size":658,"offset":"29092078","integrity":{"algorithm":"SHA256","hash":"01e5b00f4a743d04ed277bff791ef06d7f5fef1e0ad70039ad464a717bb33ef3","blockSize":4194304,"blocks":["01e5b00f4a743d04ed277bff791ef06d7f5fef1e0ad70039ad464a717bb33ef3"]}}}},"index.ts":{"size":704,"offset":"29092736","integrity":{"algorithm":"SHA256","hash":"132f3636238a1aa347019657f07c149e95103c39967f8bd8b6385fafb5d3282b","blockSize":4194304,"blocks":["132f3636238a1aa347019657f07c149e95103c39967f8bd8b6385fafb5d3282b"]}},"instance":{"files":{"events.ts":{"size":3784,"offset":"29093440","integrity":{"algorithm":"SHA256","hash":"855093015ec4834b77c636c262c8f35ce5f84f8533dd509af161a0019293d955","blockSize":4194304,"blocks":["855093015ec4834b77c636c262c8f35ce5f84f8533dd509af161a0019293d955"]}},"index.ts":{"size":790,"offset":"29097224","integrity":{"algorithm":"SHA256","hash":"4ace47c23195a7b317920383209ce695ff89edbbbcb11debad58cfc9952bde83","blockSize":4194304,"blocks":["4ace47c23195a7b317920383209ce695ff89edbbbcb11debad58cfc9952bde83"]}},"init.ts":{"size":4347,"offset":"29098014","integrity":{"algorithm":"SHA256","hash":"2665f2ad5998f73869c6295e565df5dbf99eb26dd9e3f045cbc386748f4a6a2d","blockSize":4194304,"blocks":["2665f2ad5998f73869c6295e565df5dbf99eb26dd9e3f045cbc386748f4a6a2d"]}},"inject.ts":{"size":2534,"offset":"29102361","integrity":{"algorithm":"SHA256","hash":"eac19df693bca1d05720a71e3f9ade039fe046467cff5cbcdb281add6386544d","blockSize":4194304,"blocks":["eac19df693bca1d05720a71e3f9ade039fe046467cff5cbcdb281add6386544d"]}},"lifecycle.ts":{"size":11524,"offset":"29104895","integrity":{"algorithm":"SHA256","hash":"1046c1957c8aabdd84c1dc51280dded1d07799df6a9c7e6c928c98ba30bd4fe7","blockSize":4194304,"blocks":["1046c1957c8aabdd84c1dc51280dded1d07799df6a9c7e6c928c98ba30bd4fe7"]}},"proxy.ts":{"size":2871,"offset":"29116419","integrity":{"algorithm":"SHA256","hash":"0020607d59d1938e59ca2ce88daa9852ca89390878ab933b739992f1bbf2b726","blockSize":4194304,"blocks":["0020607d59d1938e59ca2ce88daa9852ca89390878ab933b739992f1bbf2b726"]}},"render-helpers":{"files":{"bind-dynamic-keys.ts":{"size":1158,"offset":"29119290","integrity":{"algorithm":"SHA256","hash":"64d26e1c21e435458b31e4acd410c9d0dec441dad9d699e9b4cc38c23300ac78","blockSize":4194304,"blocks":["64d26e1c21e435458b31e4acd410c9d0dec441dad9d699e9b4cc38c23300ac78"]}},"bind-object-listeners.ts":{"size":576,"offset":"29120448","integrity":{"algorithm":"SHA256","hash":"bc78203efad1d52267226e5dc264b787d8f6c62d70641ffacc9f6c6c2bb47eee","blockSize":4194304,"blocks":["bc78203efad1d52267226e5dc264b787d8f6c62d70641ffacc9f6c6c2bb47eee"]}},"bind-object-props.ts":{"size":1451,"offset":"29121024","integrity":{"algorithm":"SHA256","hash":"5f1b314eb16870c75992e6f88e504423f86aacbbafdee5863f52f6f66bbeaed6","blockSize":4194304,"blocks":["5f1b314eb16870c75992e6f88e504423f86aacbbafdee5863f52f6f66bbeaed6"]}},"check-keycodes.ts":{"size":1027,"offset":"29122475","integrity":{"algorithm":"SHA256","hash":"6fde7352823fc953035cb82d1a1379d8657417fd6b7e1ca23ec501c0b667d0d4","blockSize":4194304,"blocks":["6fde7352823fc953035cb82d1a1379d8657417fd6b7e1ca23ec501c0b667d0d4"]}},"index.ts":{"size":1158,"offset":"29123502","integrity":{"algorithm":"SHA256","hash":"96ca44d8b3f6cfe9fae09203281a7f381c6661503ab851de9333c0f4b7ebe118","blockSize":4194304,"blocks":["96ca44d8b3f6cfe9fae09203281a7f381c6661503ab851de9333c0f4b7ebe118"]}},"render-list.ts":{"size":1273,"offset":"29124660","integrity":{"algorithm":"SHA256","hash":"bd61ddc5e5f7835ecbe05f188f9902fc9b5ea3ddecf278750785e1970193391f","blockSize":4194304,"blocks":["bd61ddc5e5f7835ecbe05f188f9902fc9b5ea3ddecf278750785e1970193391f"]}},"render-slot.ts":{"size":1071,"offset":"29125933","integrity":{"algorithm":"SHA256","hash":"fc48f42a51cc822863c5e0a53e2acca73eb7a6120cc77c0ef7dba8d4933b7906","blockSize":4194304,"blocks":["fc48f42a51cc822863c5e0a53e2acca73eb7a6120cc77c0ef7dba8d4933b7906"]}},"render-static.ts":{"size":1451,"offset":"29127004","integrity":{"algorithm":"SHA256","hash":"834bc4e47d0f49fef2bc1c2fd018e6d5fcb06d1a0fafad1611af5b017532b9a9","blockSize":4194304,"blocks":["834bc4e47d0f49fef2bc1c2fd018e6d5fcb06d1a0fafad1611af5b017532b9a9"]}},"resolve-filter.ts":{"size":232,"offset":"29128455","integrity":{"algorithm":"SHA256","hash":"3c2efea26e134967802a30e64ee9c900eb28eea6586f84ec8b1f3905fba60b7a","blockSize":4194304,"blocks":["3c2efea26e134967802a30e64ee9c900eb28eea6586f84ec8b1f3905fba60b7a"]}},"resolve-scoped-slots.ts":{"size":850,"offset":"29128687","integrity":{"algorithm":"SHA256","hash":"191c3c93db73e60bc561547c5e12798ba998b11a6e955f66f17a755a5159921c","blockSize":4194304,"blocks":["191c3c93db73e60bc561547c5e12798ba998b11a6e955f66f17a755a5159921c"]}},"resolve-slots.ts":{"size":1489,"offset":"29129537","integrity":{"algorithm":"SHA256","hash":"f9210d871882a2e41016a4e8df960f3f1e0229c36a50e6fbc4c59131bc1eb1fe","blockSize":4194304,"blocks":["f9210d871882a2e41016a4e8df960f3f1e0229c36a50e6fbc4c59131bc1eb1fe"]}}}},"render.ts":{"size":5241,"offset":"29131026","integrity":{"algorithm":"SHA256","hash":"883b01601d46a04886e926446f7e4b7b165458bc24c7131777bde8b2d7692418","blockSize":4194304,"blocks":["883b01601d46a04886e926446f7e4b7b165458bc24c7131777bde8b2d7692418"]}},"state.ts":{"size":10545,"offset":"29136267","integrity":{"algorithm":"SHA256","hash":"a7afcb4d27ea4387281a048c36fa9f647362315269704f8d1f92e2bcacba621d","blockSize":4194304,"blocks":["a7afcb4d27ea4387281a048c36fa9f647362315269704f8d1f92e2bcacba621d"]}}}},"observer":{"files":{"array.ts":{"size":1153,"offset":"29146812","integrity":{"algorithm":"SHA256","hash":"f6a8bb4d20cca83f905caee25b0ff2e1bc5583bcf8ec49e5c8c7221f0e60deb7","blockSize":4194304,"blocks":["f6a8bb4d20cca83f905caee25b0ff2e1bc5583bcf8ec49e5c8c7221f0e60deb7"]}},"dep.ts":{"size":2560,"offset":"29147965","integrity":{"algorithm":"SHA256","hash":"db5e2115dd464fea43d8091a2339d88aae484810e2596d3478d3791cfa8e26f3","blockSize":4194304,"blocks":["db5e2115dd464fea43d8091a2339d88aae484810e2596d3478d3791cfa8e26f3"]}},"index.ts":{"size":8336,"offset":"29150525","integrity":{"algorithm":"SHA256","hash":"e87b388d3cb38adde61a1b28462e1522b01e5fe58b1fe52f9dfc3319c301ad6d","blockSize":4194304,"blocks":["e87b388d3cb38adde61a1b28462e1522b01e5fe58b1fe52f9dfc3319c301ad6d"]}},"scheduler.ts":{"size":5757,"offset":"29158861","integrity":{"algorithm":"SHA256","hash":"a0d0fab6f0387587fd11daa42e39cdce3a6326002536f3c2a75ee120ef99c8d2","blockSize":4194304,"blocks":["a0d0fab6f0387587fd11daa42e39cdce3a6326002536f3c2a75ee120ef99c8d2"]}},"traverse.ts":{"size":1093,"offset":"29164618","integrity":{"algorithm":"SHA256","hash":"f4796132414d30badd0189a1692c1d48c0569df804aa0452035cafe4a36daf90","blockSize":4194304,"blocks":["f4796132414d30badd0189a1692c1d48c0569df804aa0452035cafe4a36daf90"]}},"watcher.ts":{"size":6315,"offset":"29165711","integrity":{"algorithm":"SHA256","hash":"f4c64dd7c33e4009f99edbfaa829f2ea44a47cd84563085ba69c08daeea24a2c","blockSize":4194304,"blocks":["f4c64dd7c33e4009f99edbfaa829f2ea44a47cd84563085ba69c08daeea24a2c"]}}}},"util":{"files":{"debug.ts":{"size":3084,"offset":"29172026","integrity":{"algorithm":"SHA256","hash":"2bd41cf6edcee1db856e40d2b6a00f0e5cc6def6ac48973a8e05d305467b9870","blockSize":4194304,"blocks":["2bd41cf6edcee1db856e40d2b6a00f0e5cc6def6ac48973a8e05d305467b9870"]}},"env.ts":{"size":2761,"offset":"29175110","integrity":{"algorithm":"SHA256","hash":"598676834369dc1cb8d534e74480d84dd3bc04b3e89d63a220da1077dfdd1a8a","blockSize":4194304,"blocks":["598676834369dc1cb8d534e74480d84dd3bc04b3e89d63a220da1077dfdd1a8a"]}},"error.ts":{"size":2159,"offset":"29177871","integrity":{"algorithm":"SHA256","hash":"87127c4a7d801caecef8ab153a332424eb2086d033f6757200a185263288a20d","blockSize":4194304,"blocks":["87127c4a7d801caecef8ab153a332424eb2086d033f6757200a185263288a20d"]}},"index.ts":{"size":250,"offset":"29180030","integrity":{"algorithm":"SHA256","hash":"f64ba0c62b67bd010269165666692000edaa6346b8163215ee7cdd5bd9245cbc","blockSize":4194304,"blocks":["f64ba0c62b67bd010269165666692000edaa6346b8163215ee7cdd5bd9245cbc"]}},"lang.ts":{"size":1216,"offset":"29180280","integrity":{"algorithm":"SHA256","hash":"27d49765f3e2075154a1b0333caedace7acb2513eb8ac1033e6cd81b2f7aa447","blockSize":4194304,"blocks":["27d49765f3e2075154a1b0333caedace7acb2513eb8ac1033e6cd81b2f7aa447"]}},"next-tick.ts":{"size":3929,"offset":"29181496","integrity":{"algorithm":"SHA256","hash":"6da3599d56921d69d4a8e459284d67f920ddaed53a4b00bdf9416f77f259f512","blockSize":4194304,"blocks":["6da3599d56921d69d4a8e459284d67f920ddaed53a4b00bdf9416f77f259f512"]}},"options.ts":{"size":12020,"offset":"29185425","integrity":{"algorithm":"SHA256","hash":"7feabe796c6919281dc673157ee285033b6258557e6741daa571fad3df8e6d32","blockSize":4194304,"blocks":["7feabe796c6919281dc673157ee285033b6258557e6741daa571fad3df8e6d32"]}},"perf.ts":{"size":568,"offset":"29197445","integrity":{"algorithm":"SHA256","hash":"2f21e2bb5a64b2b6a6e7b7aa8aeeabb45bb153efc31aee21e7dadb56db79509d","blockSize":4194304,"blocks":["2f21e2bb5a64b2b6a6e7b7aa8aeeabb45bb153efc31aee21e7dadb56db79509d"]}},"props.ts":{"size":6431,"offset":"29198013","integrity":{"algorithm":"SHA256","hash":"9fca0d4e4419f7c45da490adb60e656cc9ff7f922ba297e6d7a50a626492afba","blockSize":4194304,"blocks":["9fca0d4e4419f7c45da490adb60e656cc9ff7f922ba297e6d7a50a626492afba"]}}}},"vdom":{"files":{"create-component.ts":{"size":7967,"offset":"29204444","integrity":{"algorithm":"SHA256","hash":"ece619e6de05797e9c7a102155dd5254e66bd601bef7dc778964b9b3fc127034","blockSize":4194304,"blocks":["ece619e6de05797e9c7a102155dd5254e66bd601bef7dc778964b9b3fc127034"]}},"create-element.ts":{"size":4674,"offset":"29212411","integrity":{"algorithm":"SHA256","hash":"ac8b787ec43457c441decf1cfc6f3fa4b2d3d084e22721694372f2f35b00db96","blockSize":4194304,"blocks":["ac8b787ec43457c441decf1cfc6f3fa4b2d3d084e22721694372f2f35b00db96"]}},"create-functional-component.ts":{"size":4781,"offset":"29217085","integrity":{"algorithm":"SHA256","hash":"57e0fd73e07af900cf37e6a375ab4ae60f3a29e2fd893e7fff667d7dda23cdd2","blockSize":4194304,"blocks":["57e0fd73e07af900cf37e6a375ab4ae60f3a29e2fd893e7fff667d7dda23cdd2"]}},"helpers":{"files":{"extract-props.ts":{"size":1987,"offset":"29221866","integrity":{"algorithm":"SHA256","hash":"364555b28b2ab540602350a2c0994222d48e13915fd88bc9b8bed48d5adb3f00","blockSize":4194304,"blocks":["364555b28b2ab540602350a2c0994222d48e13915fd88bc9b8bed48d5adb3f00"]}},"get-first-component-child.ts":{"size":442,"offset":"29223853","integrity":{"algorithm":"SHA256","hash":"13051871d60012c81afb198c4b2462f82951ded387b7848f2c4510eaff8db5e7","blockSize":4194304,"blocks":["13051871d60012c81afb198c4b2462f82951ded387b7848f2c4510eaff8db5e7"]}},"index.ts":{"size":258,"offset":"29224295","integrity":{"algorithm":"SHA256","hash":"5fd06550ae49c55aa70e2250355c1233b5f794f4584b7eaa47c2ca2459083423","blockSize":4194304,"blocks":["5fd06550ae49c55aa70e2250355c1233b5f794f4584b7eaa47c2ca2459083423"]}},"is-async-placeholder.ts":{"size":182,"offset":"29224553","integrity":{"algorithm":"SHA256","hash":"56bf68ba6fee4fb2ed7972de9eb96c55ae494709c92b2657966aa390daeb2557","blockSize":4194304,"blocks":["56bf68ba6fee4fb2ed7972de9eb96c55ae494709c92b2657966aa390daeb2557"]}},"merge-hook.ts":{"size":1020,"offset":"29224735","integrity":{"algorithm":"SHA256","hash":"12234a4be50b7ee9f3e4bd328f4f2c6ab45059b0ea9dd8e35417d08adfb35bee","blockSize":4194304,"blocks":["12234a4be50b7ee9f3e4bd328f4f2c6ab45059b0ea9dd8e35417d08adfb35bee"]}},"normalize-children.ts":{"size":3308,"offset":"29225755","integrity":{"algorithm":"SHA256","hash":"1b68a98bd7bab5f507d1e6a41df556402e499f8ded9d38c332210341c11fe739","blockSize":4194304,"blocks":["1b68a98bd7bab5f507d1e6a41df556402e499f8ded9d38c332210341c11fe739"]}},"normalize-scoped-slots.ts":{"size":3084,"offset":"29229063","integrity":{"algorithm":"SHA256","hash":"9727400a5ea05e1869a02ae1557d432a01b4e4b62348786c6aacae6cd2bbe115","blockSize":4194304,"blocks":["9727400a5ea05e1869a02ae1557d432a01b4e4b62348786c6aacae6cd2bbe115"]}},"resolve-async-component.ts":{"size":4242,"offset":"29232147","integrity":{"algorithm":"SHA256","hash":"c1b175a0bc83d7a67cdb2527e2105327c80c2577f5a7f929e155728f25dcc1ac","blockSize":4194304,"blocks":["c1b175a0bc83d7a67cdb2527e2105327c80c2577f5a7f929e155728f25dcc1ac"]}},"update-listeners.ts":{"size":2360,"offset":"29236389","integrity":{"algorithm":"SHA256","hash":"42de54e3e6af0161700f528e90d37c4dd33e24702ed511793bacb07dc1f6b615","blockSize":4194304,"blocks":["42de54e3e6af0161700f528e90d37c4dd33e24702ed511793bacb07dc1f6b615"]}}}},"modules":{"files":{"directives.ts":{"size":3699,"offset":"29238749","integrity":{"algorithm":"SHA256","hash":"f5aac921be5e678d7b78f6747d652ac49d2254500e77cd6451376c831ad2f297","blockSize":4194304,"blocks":["f5aac921be5e678d7b78f6747d652ac49d2254500e77cd6451376c831ad2f297"]}},"index.ts":{"size":105,"offset":"29242448","integrity":{"algorithm":"SHA256","hash":"ca361a833fa930b847c905d55b75652008a1331c5e086b17d5c29cd868bee936","blockSize":4194304,"blocks":["ca361a833fa930b847c905d55b75652008a1331c5e086b17d5c29cd868bee936"]}},"template-ref.ts":{"size":2314,"offset":"29242553","integrity":{"algorithm":"SHA256","hash":"71b4bb841847b2b6197923fb3c862894125d69c238e506343802dc6188f38f08","blockSize":4194304,"blocks":["71b4bb841847b2b6197923fb3c862894125d69c238e506343802dc6188f38f08"]}}}},"patch.ts":{"size":26939,"offset":"29244867","integrity":{"algorithm":"SHA256","hash":"4ac9461d2339dd6e7d17a37b985bbe9c405c29e5d9b5f0e504a7bcf2a2f60272","blockSize":4194304,"blocks":["4ac9461d2339dd6e7d17a37b985bbe9c405c29e5d9b5f0e504a7bcf2a2f60272"]}},"vnode.ts":{"size":3617,"offset":"29271806","integrity":{"algorithm":"SHA256","hash":"f711a5f23d9fd231a83df558ba6800197bf114034fe13b6ea3c37e9fd8a5e5dd","blockSize":4194304,"blocks":["f711a5f23d9fd231a83df558ba6800197bf114034fe13b6ea3c37e9fd8a5e5dd"]}}}}}},"platforms":{"files":{"web":{"files":{"compiler":{"files":{"directives":{"files":{"html.ts":{"size":247,"offset":"29275423","integrity":{"algorithm":"SHA256","hash":"ca251b25d0515c183657c11c0ccf68d10c6a6864446520803113315904c5fe24","blockSize":4194304,"blocks":["ca251b25d0515c183657c11c0ccf68d10c6a6864446520803113315904c5fe24"]}},"index.ts":{"size":124,"offset":"29275670","integrity":{"algorithm":"SHA256","hash":"6edffbc3f211b3d5c43b7b77af26a711910d2ed746b3f88af61b42c27eeab7be","blockSize":4194304,"blocks":["6edffbc3f211b3d5c43b7b77af26a711910d2ed746b3f88af61b42c27eeab7be"]}},"model.ts":{"size":5698,"offset":"29275794","integrity":{"algorithm":"SHA256","hash":"7ccbf75db547e69b60fcb39b3898e63d904993315efed4260773f0f584bdf4e3","blockSize":4194304,"blocks":["7ccbf75db547e69b60fcb39b3898e63d904993315efed4260773f0f584bdf4e3"]}},"text.ts":{"size":249,"offset":"29281492","integrity":{"algorithm":"SHA256","hash":"ec82b470d4eae8b9f4d3e543d5cf8f861eb13255ab025af3ede3c893bd2fde99","blockSize":4194304,"blocks":["ec82b470d4eae8b9f4d3e543d5cf8f861eb13255ab025af3ede3c893bd2fde99"]}}}},"index.ts":{"size":197,"offset":"29281741","integrity":{"algorithm":"SHA256","hash":"2a311659180fd94e0175789fa13dd3f16f8153fe01cbc9f158b7a3e76d2e04c5","blockSize":4194304,"blocks":["2a311659180fd94e0175789fa13dd3f16f8153fe01cbc9f158b7a3e76d2e04c5"]}},"modules":{"files":{"class.ts":{"size":1336,"offset":"29281938","integrity":{"algorithm":"SHA256","hash":"a2954fcad964ce41fe776e63ff571a8784b4604fb22a2f5909a36dcf2634a4e9","blockSize":4194304,"blocks":["a2954fcad964ce41fe776e63ff571a8784b4604fb22a2f5909a36dcf2634a4e9"]}},"index.ts":{"size":122,"offset":"29283274","integrity":{"algorithm":"SHA256","hash":"c123b913635d8ac5b09339a24b17c2ec72509ba69ea8d19aaa07204f7ccc32fb","blockSize":4194304,"blocks":["c123b913635d8ac5b09339a24b17c2ec72509ba69ea8d19aaa07204f7ccc32fb"]}},"model.ts":{"size":2709,"offset":"29283396","integrity":{"algorithm":"SHA256","hash":"692b1a38b2d8b42acfa66fb47bc7d690f20f2061b4742140e768d253da7e8122","blockSize":4194304,"blocks":["692b1a38b2d8b42acfa66fb47bc7d690f20f2061b4742140e768d253da7e8122"]}},"style.ts":{"size":1413,"offset":"29286105","integrity":{"algorithm":"SHA256","hash":"7033464e8e1662eef4ffb47e99e348bd97533cf1198dc00e84d4b826ff1cf99d","blockSize":4194304,"blocks":["7033464e8e1662eef4ffb47e99e348bd97533cf1198dc00e84d4b826ff1cf99d"]}}}},"options.ts":{"size":552,"offset":"29287518","integrity":{"algorithm":"SHA256","hash":"ce75474d82e4dbe1d1170c5c05840b999940ab86bc03307d810703b911f1bcda","blockSize":4194304,"blocks":["ce75474d82e4dbe1d1170c5c05840b999940ab86bc03307d810703b911f1bcda"]}},"util.ts":{"size":901,"offset":"29288070","integrity":{"algorithm":"SHA256","hash":"a431fda6bf42495e17cc08338e933020ca1039aec3ef83201448b16b940af002","blockSize":4194304,"blocks":["a431fda6bf42495e17cc08338e933020ca1039aec3ef83201448b16b940af002"]}}}},"entry-compiler.ts":{"size":238,"offset":"29288971","integrity":{"algorithm":"SHA256","hash":"58931e8c7fc0820cfb78f6a42d258567b2a06b02aaeace5881a28be5f02b144a","blockSize":4194304,"blocks":["58931e8c7fc0820cfb78f6a42d258567b2a06b02aaeace5881a28be5f02b144a"]}},"entry-runtime-esm.ts":{"size":74,"offset":"29289209","integrity":{"algorithm":"SHA256","hash":"654072fb5867fe94c7d88b4f8e61f8398b0db695ca7d76dae7689a574c78ab41","blockSize":4194304,"blocks":["654072fb5867fe94c7d88b4f8e61f8398b0db695ca7d76dae7689a574c78ab41"]}},"entry-runtime-with-compiler-esm.ts":{"size":82,"offset":"29289283","integrity":{"algorithm":"SHA256","hash":"b86bfc4f734b14e5cb091064ef218eed2eef972ca8bb7fbdb685e90b6ea2438a","blockSize":4194304,"blocks":["b86bfc4f734b14e5cb091064ef218eed2eef972ca8bb7fbdb685e90b6ea2438a"]}},"entry-runtime-with-compiler.ts":{"size":210,"offset":"29289365","integrity":{"algorithm":"SHA256","hash":"8d16a360807565d53698a4294e7ab8ce2423a2246507b88f2411c40600759d0f","blockSize":4194304,"blocks":["8d16a360807565d53698a4294e7ab8ce2423a2246507b88f2411c40600759d0f"]}},"entry-runtime.ts":{"size":135,"offset":"29289575","integrity":{"algorithm":"SHA256","hash":"5cdd882a0d1c56d9f1f7281948b08a192f5257dc42d4f1e3cc56229b7076dfc7","blockSize":4194304,"blocks":["5cdd882a0d1c56d9f1f7281948b08a192f5257dc42d4f1e3cc56229b7076dfc7"]}},"runtime":{"files":{"class-util.ts":{"size":1465,"offset":"29292600","integrity":{"algorithm":"SHA256","hash":"24476c76ffc1cf7439e3a3fb83ecc20cf91b63c6ec6a5954505d869321a09996","blockSize":4194304,"blocks":["24476c76ffc1cf7439e3a3fb83ecc20cf91b63c6ec6a5954505d869321a09996"]}},"components":{"files":{"index.ts":{"size":139,"offset":"29294065","integrity":{"algorithm":"SHA256","hash":"cea72a1db1bbd891f622e78bbccc207166e4a0602940d404008e01b40e5f0a39","blockSize":4194304,"blocks":["cea72a1db1bbd891f622e78bbccc207166e4a0602940d404008e01b40e5f0a39"]}},"transition-group.ts":{"size":6345,"offset":"29294204","integrity":{"algorithm":"SHA256","hash":"8a98c164a9873b15999b4045348c25754eab209c8230904e186b3bcd15297583","blockSize":4194304,"blocks":["8a98c164a9873b15999b4045348c25754eab209c8230904e186b3bcd15297583"]}},"transition.ts":{"size":5797,"offset":"29300549","integrity":{"algorithm":"SHA256","hash":"484d3188278da0dbb9cebd3eee5b8e1432257e62ae722e60e4a4a181919b6150","blockSize":4194304,"blocks":["484d3188278da0dbb9cebd3eee5b8e1432257e62ae722e60e4a4a181919b6150"]}}}},"directives":{"files":{"index.ts":{"size":90,"offset":"29306346","integrity":{"algorithm":"SHA256","hash":"8f2df73348cd2077bbf9d9b1459e0b2b7aadc00679ae7815a53dfe6b589edaaa","blockSize":4194304,"blocks":["8f2df73348cd2077bbf9d9b1459e0b2b7aadc00679ae7815a53dfe6b589edaaa"]}},"model.ts":{"size":4422,"offset":"29306436","integrity":{"algorithm":"SHA256","hash":"0d88cdefa880cc367cc662b6579379e85e0682ca2ed3863c89fe02f8a5ce1f21","blockSize":4194304,"blocks":["0d88cdefa880cc367cc662b6579379e85e0682ca2ed3863c89fe02f8a5ce1f21"]}},"show.ts":{"size":1781,"offset":"29310858","integrity":{"algorithm":"SHA256","hash":"d35d2a6914b8ac49591d5a1ae1ca4934ccabb7b9caf306a1341365182c048884","blockSize":4194304,"blocks":["d35d2a6914b8ac49591d5a1ae1ca4934ccabb7b9caf306a1341365182c048884"]}}}},"index.ts":{"size":2192,"offset":"29312639","integrity":{"algorithm":"SHA256","hash":"4d7dc8806954a61ad4703a9153b72c4aa50c81dabee47b699ad9f8d6972174c3","blockSize":4194304,"blocks":["4d7dc8806954a61ad4703a9153b72c4aa50c81dabee47b699ad9f8d6972174c3"]}},"modules":{"files":{"attrs.ts":{"size":3319,"offset":"29314831","integrity":{"algorithm":"SHA256","hash":"099071d724ff657dcf3cbafbbe2d1bc9c6ae337cfd4763a6c5e9684bd4f0a611","blockSize":4194304,"blocks":["099071d724ff657dcf3cbafbbe2d1bc9c6ae337cfd4763a6c5e9684bd4f0a611"]}},"class.ts":{"size":884,"offset":"29318150","integrity":{"algorithm":"SHA256","hash":"4a763a81ecaa90a959392d5b04022bb5cfa07e89efee13a74e690ed8e6a11131","blockSize":4194304,"blocks":["4a763a81ecaa90a959392d5b04022bb5cfa07e89efee13a74e690ed8e6a11131"]}},"dom-props.ts":{"size":3995,"offset":"29319034","integrity":{"algorithm":"SHA256","hash":"df12b59f983b4f47c810a4820a4301f0f8acbfbe5c2575379dcaace6a5e63718","blockSize":4194304,"blocks":["df12b59f983b4f47c810a4820a4301f0f8acbfbe5c2575379dcaace6a5e63718"]}},"events.ts":{"size":4392,"offset":"29323029","integrity":{"algorithm":"SHA256","hash":"b449a596a418c0ba6d79ac2ef98a82daf54f000fa9c36c06cc4499439a0c290b","blockSize":4194304,"blocks":["b449a596a418c0ba6d79ac2ef98a82daf54f000fa9c36c06cc4499439a0c290b"]}},"index.ts":{"size":255,"offset":"29327421","integrity":{"algorithm":"SHA256","hash":"8b6998d9e91c5e4a27b13077d745e7628900e99bb47aef0558a0ecd031321d57","blockSize":4194304,"blocks":["8b6998d9e91c5e4a27b13077d745e7628900e99bb47aef0558a0ecd031321d57"]}},"style.ts":{"size":2800,"offset":"29327676","integrity":{"algorithm":"SHA256","hash":"cb94b4d25812c4901182618e0bc2c4d42f0c019edd9c9d299aa9ddd5eecce59e","blockSize":4194304,"blocks":["cb94b4d25812c4901182618e0bc2c4d42f0c019edd9c9d299aa9ddd5eecce59e"]}},"transition.ts":{"size":8395,"offset":"29330476","integrity":{"algorithm":"SHA256","hash":"c768d3b7f2e79b6fafa5de2597222ec9d350014d7725bd236ef7aa1fc7ac2657","blockSize":4194304,"blocks":["c768d3b7f2e79b6fafa5de2597222ec9d350014d7725bd236ef7aa1fc7ac2657"]}}}},"node-ops.ts":{"size":1538,"offset":"29338871","integrity":{"algorithm":"SHA256","hash":"b5b6ef097bce3eba5698c9bf56884bfa22729dbd40d1a42a040fc1a2db17e060","blockSize":4194304,"blocks":["b5b6ef097bce3eba5698c9bf56884bfa22729dbd40d1a42a040fc1a2db17e060"]}},"patch.ts":{"size":432,"offset":"29340409","integrity":{"algorithm":"SHA256","hash":"c7828ce27b4d3409faa51bd66d088b0a0f99ea3cc25468ea3c8034ebb0815d68","blockSize":4194304,"blocks":["c7828ce27b4d3409faa51bd66d088b0a0f99ea3cc25468ea3c8034ebb0815d68"]}},"transition-util.ts":{"size":5670,"offset":"29340841","integrity":{"algorithm":"SHA256","hash":"47876383f5f1a5a4abe6ca7d47a46ed1e6478a27ba5686d91ee28ae9d821ad72","blockSize":4194304,"blocks":["47876383f5f1a5a4abe6ca7d47a46ed1e6478a27ba5686d91ee28ae9d821ad72"]}}}},"runtime-with-compiler.ts":{"size":2890,"offset":"29289710","integrity":{"algorithm":"SHA256","hash":"50ff1d04d99c16562e3157fd62df90503c21c7f16a7f7b68caae7bea833b2893","blockSize":4194304,"blocks":["50ff1d04d99c16562e3157fd62df90503c21c7f16a7f7b68caae7bea833b2893"]}},"util":{"files":{"attrs.ts":{"size":1954,"offset":"29346511","integrity":{"algorithm":"SHA256","hash":"82f48ea4bb5bed1ebe7c49394323e76ddc11748d149fa829f3ca4dc5a8e2dc40","blockSize":4194304,"blocks":["82f48ea4bb5bed1ebe7c49394323e76ddc11748d149fa829f3ca4dc5a8e2dc40"]}},"class.ts":{"size":2213,"offset":"29348465","integrity":{"algorithm":"SHA256","hash":"4fda6662b691960f44c393868995caae7117b1fb113b0ab345eb246262848336","blockSize":4194304,"blocks":["4fda6662b691960f44c393868995caae7117b1fb113b0ab345eb246262848336"]}},"compat.ts":{"size":621,"offset":"29350678","integrity":{"algorithm":"SHA256","hash":"c81b39d3aeb82f922574a1a04e28f2fc00aa1b9ce6b319b6add0e6328e0e852d","blockSize":4194304,"blocks":["c81b39d3aeb82f922574a1a04e28f2fc00aa1b9ce6b319b6add0e6328e0e852d"]}},"element.ts":{"size":2567,"offset":"29351299","integrity":{"algorithm":"SHA256","hash":"0b893c43ff5285343c68a112e8493c9d2fc4b56a6f39a13eb31df28ad6a9e0ef","blockSize":4194304,"blocks":["0b893c43ff5285343c68a112e8493c9d2fc4b56a6f39a13eb31df28ad6a9e0ef"]}},"index.ts":{"size":492,"offset":"29353866","integrity":{"algorithm":"SHA256","hash":"0e051e52325580b17209146f9b50672723f574df1abf84a646216c9eb620bee8","blockSize":4194304,"blocks":["0e051e52325580b17209146f9b50672723f574df1abf84a646216c9eb620bee8"]}},"style.ts":{"size":2162,"offset":"29354358","integrity":{"algorithm":"SHA256","hash":"1b49de27661103d70d8c649331992645d0eaeb5fbf3429e3fefe460c5605f7ac","blockSize":4194304,"blocks":["1b49de27661103d70d8c649331992645d0eaeb5fbf3429e3fefe460c5605f7ac"]}}}}}}}},"shared":{"files":{"constants.ts":{"size":402,"offset":"29356520","integrity":{"algorithm":"SHA256","hash":"510d8d17044562606dd065b42be5e096d69113d6d3b38d53b9a365b16a23f8f0","blockSize":4194304,"blocks":["510d8d17044562606dd065b42be5e096d69113d6d3b38d53b9a365b16a23f8f0"]}},"util.ts":{"size":9188,"offset":"29356922","integrity":{"algorithm":"SHA256","hash":"e5d23c59fc8890dbfc4ccf589a0318b1ce92d9c509cdd0e565ea3bb13a4cc328","blockSize":4194304,"blocks":["e5d23c59fc8890dbfc4ccf589a0318b1ce92d9c509cdd0e565ea3bb13a4cc328"]}}}},"types":{"files":{"compiler.ts":{"size":5652,"offset":"29366110","integrity":{"algorithm":"SHA256","hash":"c7cbb34e44173b7226551c1a5af42efafbd1bcbad81d7bfdf64d47391a8600c3","blockSize":4194304,"blocks":["c7cbb34e44173b7226551c1a5af42efafbd1bcbad81d7bfdf64d47391a8600c3"]}},"component.ts":{"size":5789,"offset":"29371762","integrity":{"algorithm":"SHA256","hash":"8e02c15c1d5f458c7d630d0bdf07e428c1fb4bad8ac5d6af501756e187b46a45","blockSize":4194304,"blocks":["8e02c15c1d5f458c7d630d0bdf07e428c1fb4bad8ac5d6af501756e187b46a45"]}},"global-api.ts":{"size":1062,"offset":"29377551","integrity":{"algorithm":"SHA256","hash":"6acd0fff057841027abe50cc7f895b4b9b7d8ab5d505d6f5eb62d82a2657e6e3","blockSize":4194304,"blocks":["6acd0fff057841027abe50cc7f895b4b9b7d8ab5d505d6f5eb62d82a2657e6e3"]}},"options.ts":{"size":2600,"offset":"29378613","integrity":{"algorithm":"SHA256","hash":"04dbf16367c46fe5a96047f660d6a05b3f346ecf02e211fbccda8d88e233b24d","blockSize":4194304,"blocks":["04dbf16367c46fe5a96047f660d6a05b3f346ecf02e211fbccda8d88e233b24d"]}},"ssr.ts":{"size":516,"offset":"29381213","integrity":{"algorithm":"SHA256","hash":"8c67a7243b5e3189759df469240afbb2adca779a9d162964f256a52ef590479d","blockSize":4194304,"blocks":["8c67a7243b5e3189759df469240afbb2adca779a9d162964f256a52ef590479d"]}},"utils.ts":{"size":223,"offset":"29381729","integrity":{"algorithm":"SHA256","hash":"c6b5c29ee81e8b6c6c19dd23e94e6a6bab94582c133099a52ff4681d340bfe08","blockSize":4194304,"blocks":["c6b5c29ee81e8b6c6c19dd23e94e6a6bab94582c133099a52ff4681d340bfe08"]}},"vnode.ts":{"size":2667,"offset":"29381952","integrity":{"algorithm":"SHA256","hash":"556815fca8b6122ad953246ee2757a2b827e66279126fea6b4052577bfe66b62","blockSize":4194304,"blocks":["556815fca8b6122ad953246ee2757a2b827e66279126fea6b4052577bfe66b62"]}}}},"v3":{"files":{"apiAsyncComponent.ts":{"size":2969,"offset":"29384619","integrity":{"algorithm":"SHA256","hash":"7f06ac2db35bd1a6ae748707ee5a9d769871e14d07647ee26b76cbf3e0f59d5e","blockSize":4194304,"blocks":["7f06ac2db35bd1a6ae748707ee5a9d769871e14d07647ee26b76cbf3e0f59d5e"]}},"apiInject.ts":{"size":2409,"offset":"29387588","integrity":{"algorithm":"SHA256","hash":"769356efad792314d95b210ddcc7175502a536dfc74cf98a0ac285c09548e363","blockSize":4194304,"blocks":["769356efad792314d95b210ddcc7175502a536dfc74cf98a0ac285c09548e363"]}},"apiLifecycle.ts":{"size":2206,"offset":"29389997","integrity":{"algorithm":"SHA256","hash":"e411f82066cae6526ae161b0c1c45e27cb9625de20ee9ac17067b3e23995865f","blockSize":4194304,"blocks":["e411f82066cae6526ae161b0c1c45e27cb9625de20ee9ac17067b3e23995865f"]}},"apiSetup.ts":{"size":6214,"offset":"29392203","integrity":{"algorithm":"SHA256","hash":"186213ebf1c01d28e0ae41555ddeeb46e2092dcc9b117d9314a61ebe6552a7ad","blockSize":4194304,"blocks":["186213ebf1c01d28e0ae41555ddeeb46e2092dcc9b117d9314a61ebe6552a7ad"]}},"apiWatch.ts":{"size":8894,"offset":"29398417","integrity":{"algorithm":"SHA256","hash":"c011875c22b1afb46acbc66cee3611691530f0479fe07976a1b7e469b85b3130","blockSize":4194304,"blocks":["c011875c22b1afb46acbc66cee3611691530f0479fe07976a1b7e469b85b3130"]}},"currentInstance.ts":{"size":706,"offset":"29407311","integrity":{"algorithm":"SHA256","hash":"d9807ae7e0a4f3dd93b957b5296b3d636fa3d07376b94031074fa8fa4e7dc62b","blockSize":4194304,"blocks":["d9807ae7e0a4f3dd93b957b5296b3d636fa3d07376b94031074fa8fa4e7dc62b"]}},"debug.ts":{"size":439,"offset":"29408017","integrity":{"algorithm":"SHA256","hash":"3fd45b3abf43d0b8982aa64625e0562574d68fdda754acca102a6d63238d3d6e","blockSize":4194304,"blocks":["3fd45b3abf43d0b8982aa64625e0562574d68fdda754acca102a6d63238d3d6e"]}},"h.ts":{"size":661,"offset":"29408456","integrity":{"algorithm":"SHA256","hash":"e7b0ffd9d19e8106cdf8a980f440847c2ea14c15fbe4a7e0c142e567bf8ea626","blockSize":4194304,"blocks":["e7b0ffd9d19e8106cdf8a980f440847c2ea14c15fbe4a7e0c142e567bf8ea626"]}},"index.ts":{"size":1939,"offset":"29409117","integrity":{"algorithm":"SHA256","hash":"c5f3220f7e8887564ea5ce1b615622e7fd3d2c70475bdf45629cca4a5742b9e7","blockSize":4194304,"blocks":["c5f3220f7e8887564ea5ce1b615622e7fd3d2c70475bdf45629cca4a5742b9e7"]}},"reactivity":{"files":{"computed.ts":{"size":2654,"offset":"29411056","integrity":{"algorithm":"SHA256","hash":"4ad71ee999f9d3aa9bf9aac3616f8181fdb21f4c8fb0d0f0282098b58d773011","blockSize":4194304,"blocks":["4ad71ee999f9d3aa9bf9aac3616f8181fdb21f4c8fb0d0f0282098b58d773011"]}},"effect.ts":{"size":540,"offset":"29413710","integrity":{"algorithm":"SHA256","hash":"aa48a46cb4ce3a8296e8eb8b87a2957ca61abee071dbfb63c520a0251730dbd9","blockSize":4194304,"blocks":["aa48a46cb4ce3a8296e8eb8b87a2957ca61abee071dbfb63c520a0251730dbd9"]}},"effectScope.ts":{"size":2991,"offset":"29414250","integrity":{"algorithm":"SHA256","hash":"f13201bcc644e5c36d1c35b640974e64028d940990b946b1fdf5a830a9ccbc54","blockSize":4194304,"blocks":["f13201bcc644e5c36d1c35b640974e64028d940990b946b1fdf5a830a9ccbc54"]}},"operations.ts":{"size":288,"offset":"29417241","integrity":{"algorithm":"SHA256","hash":"7813d16c7092aae00b4c6219daaa7204f36d246a44f1ef0af9974759e5376920","blockSize":4194304,"blocks":["7813d16c7092aae00b4c6219daaa7204f36d246a44f1ef0af9974759e5376920"]}},"reactive.ts":{"size":3715,"offset":"29417529","integrity":{"algorithm":"SHA256","hash":"63ea6f0e2c3b6a2e7d96d94d11e15978d48a3665060d60c49b3259ccc156b805","blockSize":4194304,"blocks":["63ea6f0e2c3b6a2e7d96d94d11e15978d48a3665060d60c49b3259ccc156b805"]}},"readonly.ts":{"size":3529,"offset":"29421244","integrity":{"algorithm":"SHA256","hash":"b391051dea8715894d811cb013641bae0fe1b3efbaf187090b21f1d8feb6f6e3","blockSize":4194304,"blocks":["b391051dea8715894d811cb013641bae0fe1b3efbaf187090b21f1d8feb6f6e3"]}},"ref.ts":{"size":6962,"offset":"29424773","integrity":{"algorithm":"SHA256","hash":"c3f3e2440e4c760fc260014ee557a36fa22a2d0a60ec75f72c2ead19a1f1f91c","blockSize":4194304,"blocks":["c3f3e2440e4c760fc260014ee557a36fa22a2d0a60ec75f72c2ead19a1f1f91c"]}}}},"sfc-helpers":{"files":{"useCssModule.ts":{"size":705,"offset":"29431735","integrity":{"algorithm":"SHA256","hash":"f942b505641359313c9afe3f262cbe7d823497ca12e24ef7da181c1756cebafd","blockSize":4194304,"blocks":["f942b505641359313c9afe3f262cbe7d823497ca12e24ef7da181c1756cebafd"]}},"useCssVars.ts":{"size":851,"offset":"29432440","integrity":{"algorithm":"SHA256","hash":"af216541896c2961150cdf690dd4857137595530b6890910e27507c2c42a8f09","blockSize":4194304,"blocks":["af216541896c2961150cdf690dd4857137595530b6890910e27507c2c42a8f09"]}}}}}}}}}},"vue-electron":{"files":{"index.js":{"size":103,"offset":"24602710","integrity":{"algorithm":"SHA256","hash":"ca7829c48e4bb841324bf87227c9f37c6e806ff27fc34546e0b6af92d25d4231","blockSize":4194304,"blocks":["ca7829c48e4bb841324bf87227c9f37c6e806ff27fc34546e0b6af92d25d4231"]}},"LICENSE.md":{"size":756,"offset":"24602813","integrity":{"algorithm":"SHA256","hash":"8b673c9322d2086b20728fc562cd1e54c45ddaa95ad6ab5e9eafe58a2be447b4","blockSize":4194304,"blocks":["8b673c9322d2086b20728fc562cd1e54c45ddaa95ad6ab5e9eafe58a2be447b4"]}},"package.json":{"size":496,"offset":"24603569","integrity":{"algorithm":"SHA256","hash":"7d1c2779a800ed80e667cfe481be9bf46471a3ef8744c550e71ff779d9802d07","blockSize":4194304,"blocks":["7d1c2779a800ed80e667cfe481be9bf46471a3ef8744c550e71ff779d9802d07"]}}}},"vue-router":{"files":{"dist":{"files":{"vue-router.common.js":{"size":82644,"offset":"24604065","integrity":{"algorithm":"SHA256","hash":"e777b7a57189ebe28ee67ded077c7cf901240af0fd5c15e991b48f5086726bfd","blockSize":4194304,"blocks":["e777b7a57189ebe28ee67ded077c7cf901240af0fd5c15e991b48f5086726bfd"]}},"vue-router.esm.browser.js":{"size":77483,"offset":"24686709","integrity":{"algorithm":"SHA256","hash":"53d68f4778a99c75dbce9c7d901a9fc5fe3e0af8576a9c0356f01775a7717f45","blockSize":4194304,"blocks":["53d68f4778a99c75dbce9c7d901a9fc5fe3e0af8576a9c0356f01775a7717f45"]}},"vue-router.esm.browser.min.js":{"size":26954,"offset":"24764192","integrity":{"algorithm":"SHA256","hash":"e9cd7c92f5292d7073f52363f7a0bfd8830f38920a050b5b92c4b0bf4626a1d0","blockSize":4194304,"blocks":["e9cd7c92f5292d7073f52363f7a0bfd8830f38920a050b5b92c4b0bf4626a1d0"]}},"vue-router.esm.js":{"size":82627,"offset":"24791146","integrity":{"algorithm":"SHA256","hash":"728cbf74f71888c9c40daf75949c94e84fb37a999b375c32a0f687b0afe79754","blockSize":4194304,"blocks":["728cbf74f71888c9c40daf75949c94e84fb37a999b375c32a0f687b0afe79754"]}},"vue-router.js":{"size":87362,"offset":"24873773","integrity":{"algorithm":"SHA256","hash":"9e1697e3af3b89a4b70d02f8711dba2dcd38344949ce844a9c15f37cce575766","blockSize":4194304,"blocks":["9e1697e3af3b89a4b70d02f8711dba2dcd38344949ce844a9c15f37cce575766"]}},"vue-router.min.js":{"size":28963,"offset":"24961135","integrity":{"algorithm":"SHA256","hash":"799cce69728d5300816e2c6dc21ebd480805b45a864fad36f162d6d3530d3ca0","blockSize":4194304,"blocks":["799cce69728d5300816e2c6dc21ebd480805b45a864fad36f162d6d3530d3ca0"]}}}},"LICENSE":{"size":1073,"offset":"24990098","integrity":{"algorithm":"SHA256","hash":"ad1385b0b7724167451aaa7c2b8e4af2e97a5daa07fb4b678cddd4da75259feb","blockSize":4194304,"blocks":["ad1385b0b7724167451aaa7c2b8e4af2e97a5daa07fb4b678cddd4da75259feb"]}},"package.json":{"size":2542,"offset":"24991171","integrity":{"algorithm":"SHA256","hash":"6a51e38b7e2b3df0100e6e0d663015680c3ef7b67ed8c21e9f761b041cb852f8","blockSize":4194304,"blocks":["6a51e38b7e2b3df0100e6e0d663015680c3ef7b67ed8c21e9f761b041cb852f8"]}},"src":{"files":{"components":{"files":{"link.js":{"size":6872,"offset":"24993713","integrity":{"algorithm":"SHA256","hash":"e2c47fc10c026228e052d500abdef57df41ebf76b7e8d0fa99f08cfc1ea30a7b","blockSize":4194304,"blocks":["e2c47fc10c026228e052d500abdef57df41ebf76b7e8d0fa99f08cfc1ea30a7b"]}},"view.js":{"size":4629,"offset":"25000585","integrity":{"algorithm":"SHA256","hash":"911266ea9481e279e43c8584e0a38b6d5fa9033bde894e1c53d0032078eff83b","blockSize":4194304,"blocks":["911266ea9481e279e43c8584e0a38b6d5fa9033bde894e1c53d0032078eff83b"]}}}},"create-matcher.js":{"size":6522,"offset":"25005214","integrity":{"algorithm":"SHA256","hash":"e63914c99e7a767b5ef13f91bc556ec74435c0adc6d247e3bebb21b0a8da1c1e","blockSize":4194304,"blocks":["e63914c99e7a767b5ef13f91bc556ec74435c0adc6d247e3bebb21b0a8da1c1e"]}},"create-route-map.js":{"size":6293,"offset":"25011736","integrity":{"algorithm":"SHA256","hash":"15809f9b8eef096fe807325046d2b2729aa7b0e8bb76455866485361dc528e37","blockSize":4194304,"blocks":["15809f9b8eef096fe807325046d2b2729aa7b0e8bb76455866485361dc528e37"]}},"history":{"files":{"abstract.js":{"size":1693,"offset":"25018029","integrity":{"algorithm":"SHA256","hash":"9f00581bbb5d6ba3fee6da830002f127a18bca408028c2e9bbf5bed2724b4c51","blockSize":4194304,"blocks":["9f00581bbb5d6ba3fee6da830002f127a18bca408028c2e9bbf5bed2724b4c51"]}},"base.js":{"size":10120,"offset":"25019722","integrity":{"algorithm":"SHA256","hash":"17c49e20b63f5a4f108debc45b9e2ba675ca91b75828784faa9c78f330bdb6a6","blockSize":4194304,"blocks":["17c49e20b63f5a4f108debc45b9e2ba675ca91b75828784faa9c78f330bdb6a6"]}},"hash.js":{"size":3656,"offset":"25029842","integrity":{"algorithm":"SHA256","hash":"4b3631d0a66446a4ad15877c1707fd698596c0baf4f523b3e900a9d95616250f","blockSize":4194304,"blocks":["4b3631d0a66446a4ad15877c1707fd698596c0baf4f523b3e900a9d95616250f"]}},"html5.js":{"size":2775,"offset":"25033498","integrity":{"algorithm":"SHA256","hash":"d9ad133d69a5a2893bdb36fb6d7387170e21ab997b5e8caca6a11852e90c1e19","blockSize":4194304,"blocks":["d9ad133d69a5a2893bdb36fb6d7387170e21ab997b5e8caca6a11852e90c1e19"]}}}},"index.js":{"size":7848,"offset":"25036273","integrity":{"algorithm":"SHA256","hash":"933fc1c1a8277eddccfc370d56642287b01ac6fa742f23a064b465f1021510e9","blockSize":4194304,"blocks":["933fc1c1a8277eddccfc370d56642287b01ac6fa742f23a064b465f1021510e9"]}},"install.js":{"size":1397,"offset":"25044121","integrity":{"algorithm":"SHA256","hash":"cf0eec5420efe1e8c8292f6dfc49bed4559177f48ead468d401947329fa13f12","blockSize":4194304,"blocks":["cf0eec5420efe1e8c8292f6dfc49bed4559177f48ead468d401947329fa13f12"]}},"util":{"files":{"async.js":{"size":349,"offset":"25045518","integrity":{"algorithm":"SHA256","hash":"e11a173e27f2def13e46da17cde3cfbd134f9c0fa674e3c92d3302fbd67b1949","blockSize":4194304,"blocks":["e11a173e27f2def13e46da17cde3cfbd134f9c0fa674e3c92d3302fbd67b1949"]}},"dom.js":{"size":68,"offset":"25045867","integrity":{"algorithm":"SHA256","hash":"18a203d10bb3d6d2d8b7d3158d3618fadab18eb1a7d926d417f377a1b8f7b744","blockSize":4194304,"blocks":["18a203d10bb3d6d2d8b7d3158d3618fadab18eb1a7d926d417f377a1b8f7b744"]}},"errors.js":{"size":2043,"offset":"25045935","integrity":{"algorithm":"SHA256","hash":"d78f5ff4d3dfbe1c72a3ced94f1aa5bc1e789d532162002dcf038e130a922361","blockSize":4194304,"blocks":["d78f5ff4d3dfbe1c72a3ced94f1aa5bc1e789d532162002dcf038e130a922361"]}},"location.js":{"size":1819,"offset":"25047978","integrity":{"algorithm":"SHA256","hash":"2c58c1a9779df48f8401afd450435a44f30d63d0b7f5e278fb4146c289546737","blockSize":4194304,"blocks":["2c58c1a9779df48f8401afd450435a44f30d63d0b7f5e278fb4146c289546737"]}},"misc.js":{"size":94,"offset":"25049797","integrity":{"algorithm":"SHA256","hash":"d5772d90faca0e40ff2d36430e924a125678f0ae529c1dcd15ae70caf509bbcc","blockSize":4194304,"blocks":["d5772d90faca0e40ff2d36430e924a125678f0ae529c1dcd15ae70caf509bbcc"]}},"params.js":{"size":1069,"offset":"25049891","integrity":{"algorithm":"SHA256","hash":"c5894bd4baa7fd371bfdf1c2162abf9422520c09b70a64fe3ceb2da736652b74","blockSize":4194304,"blocks":["c5894bd4baa7fd371bfdf1c2162abf9422520c09b70a64fe3ceb2da736652b74"]}},"path.js":{"size":1428,"offset":"25050960","integrity":{"algorithm":"SHA256","hash":"d08157700187e7aac3fa20246e411c2f85066ba7038d0369c8fd98c96aa53708","blockSize":4194304,"blocks":["d08157700187e7aac3fa20246e411c2f85066ba7038d0369c8fd98c96aa53708"]}},"push-state.js":{"size":1344,"offset":"25052388","integrity":{"algorithm":"SHA256","hash":"b5f6510ebdf3107d0fc8b8dfcc772e88dae5c988d27bf577b76d81690315f44c","blockSize":4194304,"blocks":["b5f6510ebdf3107d0fc8b8dfcc772e88dae5c988d27bf577b76d81690315f44c"]}},"query.js":{"size":2707,"offset":"25053732","integrity":{"algorithm":"SHA256","hash":"65015fedddeaaa0dbca07b4500d5ffd303921619c694b2f48971c9db498dc746","blockSize":4194304,"blocks":["65015fedddeaaa0dbca07b4500d5ffd303921619c694b2f48971c9db498dc746"]}},"resolve-components.js":{"size":3022,"offset":"25056439","integrity":{"algorithm":"SHA256","hash":"c01d5e17a3c8358b016e7ba6d379327384ebdd71c6b7332bb7486899a1a4d401","blockSize":4194304,"blocks":["c01d5e17a3c8358b016e7ba6d379327384ebdd71c6b7332bb7486899a1a4d401"]}},"route.js":{"size":3912,"offset":"25059461","integrity":{"algorithm":"SHA256","hash":"d73b46ac72b7045d2fb2394b8419906a96cd54f00e5077b6fab8a7266c2c984b","blockSize":4194304,"blocks":["d73b46ac72b7045d2fb2394b8419906a96cd54f00e5077b6fab8a7266c2c984b"]}},"scroll.js":{"size":4993,"offset":"25063373","integrity":{"algorithm":"SHA256","hash":"f47dc168a24d0d37da8d439b80132a3177f3463ff9c4594b59824f9af7ce3c2a","blockSize":4194304,"blocks":["f47dc168a24d0d37da8d439b80132a3177f3463ff9c4594b59824f9af7ce3c2a"]}},"state-key.js":{"size":452,"offset":"25068366","integrity":{"algorithm":"SHA256","hash":"fd0fb51275809c003070d70ecb1eb1a2ed8008f2bca2ea3ba99121b65a7ca85c","blockSize":4194304,"blocks":["fd0fb51275809c003070d70ecb1eb1a2ed8008f2bca2ea3ba99121b65a7ca85c"]}},"warn.js":{"size":349,"offset":"25068818","integrity":{"algorithm":"SHA256","hash":"271dc4ee85909284b3f865047fd9b8f7915e9e8f4b5e96016a348c4e2b3e36a3","blockSize":4194304,"blocks":["271dc4ee85909284b3f865047fd9b8f7915e9e8f4b5e96016a348c4e2b3e36a3"]}}}}}},"vetur":{"files":{"attributes.json":{"size":2542,"offset":"25069167","integrity":{"algorithm":"SHA256","hash":"f9dd6bbe5d16fb10a41fe8dbe25fa57354aa8f0ed64c6ef47074b3ceeaa6a9b1","blockSize":4194304,"blocks":["f9dd6bbe5d16fb10a41fe8dbe25fa57354aa8f0ed64c6ef47074b3ceeaa6a9b1"]}},"tags.json":{"size":713,"offset":"25071709","integrity":{"algorithm":"SHA256","hash":"e3892ca2d9dd34ac35cb931b7008927ef6b9384712229213e851022aca0d1350","blockSize":4194304,"blocks":["e3892ca2d9dd34ac35cb931b7008927ef6b9384712229213e851022aca0d1350"]}}}}}},"vuedraggable":{"files":{"dist":{"files":{"vuedraggable.common.js":{"size":71666,"offset":"29433291","integrity":{"algorithm":"SHA256","hash":"121bc48e98a62552c2ffb87661ffb9b9d749433e7c6c5a8c4a13b79ff64fbd9e","blockSize":4194304,"blocks":["121bc48e98a62552c2ffb87661ffb9b9d749433e7c6c5a8c4a13b79ff64fbd9e"]}},"vuedraggable.common.js.map":{"size":98615,"offset":"29504957","integrity":{"algorithm":"SHA256","hash":"dc02f81e0fd67b44c89d5540850a259d837a9f8dc518ebc741db7b449d2cabd4","blockSize":4194304,"blocks":["dc02f81e0fd67b44c89d5540850a259d837a9f8dc518ebc741db7b449d2cabd4"]}},"vuedraggable.umd.js":{"size":72179,"offset":"29603572","integrity":{"algorithm":"SHA256","hash":"eada431f2c926d41c7b080056f566524c8e721ee6f1a732b69860c20d2614a6d","blockSize":4194304,"blocks":["eada431f2c926d41c7b080056f566524c8e721ee6f1a732b69860c20d2614a6d"]}},"vuedraggable.umd.js.map":{"size":99295,"offset":"29675751","integrity":{"algorithm":"SHA256","hash":"b917f70195473c652e5c2557bbc55c3bdfeff7a7dfe105c0d3864c001ab97742","blockSize":4194304,"blocks":["b917f70195473c652e5c2557bbc55c3bdfeff7a7dfe105c0d3864c001ab97742"]}},"vuedraggable.umd.min.js":{"size":27956,"offset":"29775046","integrity":{"algorithm":"SHA256","hash":"2db16c371d58fcd4c7c2b367c8b5409cc7538d53ee1fdee6fda8ee97d685456c","blockSize":4194304,"blocks":["2db16c371d58fcd4c7c2b367c8b5409cc7538d53ee1fdee6fda8ee97d685456c"]}},"vuedraggable.umd.min.js.map":{"size":108830,"offset":"29803002","integrity":{"algorithm":"SHA256","hash":"c6357bdd8b73aab58f966cc0875e36f390e4205327f7e5c89078d5bbff110da1","blockSize":4194304,"blocks":["c6357bdd8b73aab58f966cc0875e36f390e4205327f7e5c89078d5bbff110da1"]}}}},"LICENSE":{"size":1109,"offset":"29911832","integrity":{"algorithm":"SHA256","hash":"8345d896e4db9d274ac4139a2aed71e6fcdae89e115bc22538e0050279ccb8aa","blockSize":4194304,"blocks":["8345d896e4db9d274ac4139a2aed71e6fcdae89e115bc22538e0050279ccb8aa"]}},"package.json":{"size":1449,"offset":"29912941","integrity":{"algorithm":"SHA256","hash":"65ba75b25375f646242ffa9e8e331eeb392a45f4564de990b285227aaaf3d8c5","blockSize":4194304,"blocks":["65ba75b25375f646242ffa9e8e331eeb392a45f4564de990b285227aaaf3d8c5"]}},"src":{"files":{"util":{"files":{"helper.js":{"size":867,"offset":"29914390","integrity":{"algorithm":"SHA256","hash":"23e2cfd2e7b04a707311669913753260ae81b69f0b3ad3bdea4f2dc6e5a43dcb","blockSize":4194304,"blocks":["23e2cfd2e7b04a707311669913753260ae81b69f0b3ad3bdea4f2dc6e5a43dcb"]}}}},"vuedraggable.js":{"size":13470,"offset":"29915257","integrity":{"algorithm":"SHA256","hash":"46298c1f18f61f114a8a7b8c8cded32bf331c0e6c4cbad79ba7fb8c5fb81daac","blockSize":4194304,"blocks":["46298c1f18f61f114a8a7b8c8cded32bf331c0e6c4cbad79ba7fb8c5fb81daac"]}}}}}},"vuex":{"files":{"dist":{"files":{"logger.js":{"size":5046,"offset":"29928727","integrity":{"algorithm":"SHA256","hash":"d3797eab05d3d98b3c6151158114302e2c3beb3b9aa1c991aa52dc91a22ff77d","blockSize":4194304,"blocks":["d3797eab05d3d98b3c6151158114302e2c3beb3b9aa1c991aa52dc91a22ff77d"]}},"vuex.common.js":{"size":37157,"offset":"29933773","integrity":{"algorithm":"SHA256","hash":"cb267787c6fbb2941ed498d9227319c09af88fb6c2b7fd62e7a281f85d1761b7","blockSize":4194304,"blocks":["cb267787c6fbb2941ed498d9227319c09af88fb6c2b7fd62e7a281f85d1761b7"]}},"vuex.esm.browser.js":{"size":32504,"offset":"29970930","integrity":{"algorithm":"SHA256","hash":"9d542e139f74c902a29611ef5b089db78dc359f5d034e3c25fd2cc80cdb4698a","blockSize":4194304,"blocks":["9d542e139f74c902a29611ef5b089db78dc359f5d034e3c25fd2cc80cdb4698a"]}},"vuex.esm.browser.min.js":{"size":10601,"offset":"30003434","integrity":{"algorithm":"SHA256","hash":"7cfb1943313dcd26466c3ffc69a15f61abcba16f7f869e46198c458ad9cb237f","blockSize":4194304,"blocks":["7cfb1943313dcd26466c3ffc69a15f61abcba16f7f869e46198c458ad9cb237f"]}},"vuex.esm.js":{"size":37246,"offset":"30014035","integrity":{"algorithm":"SHA256","hash":"9b0009732e6a49f4d7f278f7a6cfeb5ce0f5c69048f56867d234d0aa20c5e7f8","blockSize":4194304,"blocks":["9b0009732e6a49f4d7f278f7a6cfeb5ce0f5c69048f56867d234d0aa20c5e7f8"]}},"vuex.js":{"size":38272,"offset":"30051281","integrity":{"algorithm":"SHA256","hash":"99a30acc47d5f4993fb9aeff55558f15eaee4988d45bd77216d9ced77079b497","blockSize":4194304,"blocks":["99a30acc47d5f4993fb9aeff55558f15eaee4988d45bd77216d9ced77079b497"]}},"vuex.min.js":{"size":12536,"offset":"30089553","integrity":{"algorithm":"SHA256","hash":"3efd92158a4c24f9995773fafede2577e1646f738152c03b807678b610583f3c","blockSize":4194304,"blocks":["3efd92158a4c24f9995773fafede2577e1646f738152c03b807678b610583f3c"]}},"vuex.mjs":{"size":349,"offset":"30102089","integrity":{"algorithm":"SHA256","hash":"3db7e20edd4afa5a798af73be2c7c36fc539136c33e1d84ed83f3fa44aeee87f","blockSize":4194304,"blocks":["3db7e20edd4afa5a798af73be2c7c36fc539136c33e1d84ed83f3fa44aeee87f"]}}}},"LICENSE":{"size":1083,"offset":"30102438","integrity":{"algorithm":"SHA256","hash":"1f5a4606eff61476af9503b4d1ea45a8459194c1f0c4b5f359de58af05b3bae1","blockSize":4194304,"blocks":["1f5a4606eff61476af9503b4d1ea45a8459194c1f0c4b5f359de58af05b3bae1"]}},"package.json":{"size":2009,"offset":"30103521","integrity":{"algorithm":"SHA256","hash":"4d0ae8de149a01c08692f7f684f152ee64e16e0677b7290f02a0247cd9e534da","blockSize":4194304,"blocks":["4d0ae8de149a01c08692f7f684f152ee64e16e0677b7290f02a0247cd9e534da"]}}}},"which":{"files":{"bin":{"files":{"which":{"size":985,"offset":"30107061","integrity":{"algorithm":"SHA256","hash":"055f0ac4eed1a1591d033d59462972968bf3483b4cc07e163589569c0fb999f0","blockSize":4194304,"blocks":["055f0ac4eed1a1591d033d59462972968bf3483b4cc07e163589569c0fb999f0"]}}}},"LICENSE":{"size":765,"offset":"30108046","integrity":{"algorithm":"SHA256","hash":"4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b","blockSize":4194304,"blocks":["4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b"]}},"package.json":{"size":565,"offset":"30108811","integrity":{"algorithm":"SHA256","hash":"29ebb73e7b7c155945bdb20b2387d3143847a444a98dae3096e62d98f7e3d077","blockSize":4194304,"blocks":["29ebb73e7b7c155945bdb20b2387d3143847a444a98dae3096e62d98f7e3d077"]}},"which.js":{"size":3184,"offset":"30109376","integrity":{"algorithm":"SHA256","hash":"50aaf374171df3a3452c4b2c3084e40e1ccb467e056425790268e13e38d5abfa","blockSize":4194304,"blocks":["50aaf374171df3a3452c4b2c3084e40e1ccb467e056425790268e13e38d5abfa"]}}}},"which-module":{"files":{"index.js":{"size":248,"offset":"30105530","integrity":{"algorithm":"SHA256","hash":"cd3b335884bb4d258e863128b87f90a8025ce97c9cde64b9114e8cfbfc71618c","blockSize":4194304,"blocks":["cd3b335884bb4d258e863128b87f90a8025ce97c9cde64b9114e8cfbfc71618c"]}},"LICENSE":{"size":731,"offset":"30105778","integrity":{"algorithm":"SHA256","hash":"852bf81203aa93aa89afc9f881ebb035322dc7334aaceff435c557634c94a815","blockSize":4194304,"blocks":["852bf81203aa93aa89afc9f881ebb035322dc7334aaceff435c557634c94a815"]}},"package.json":{"size":552,"offset":"30106509","integrity":{"algorithm":"SHA256","hash":"c424828460f8bed0b925457336b6a437c67463c952db1935452cf40ba65178ce","blockSize":4194304,"blocks":["c424828460f8bed0b925457336b6a437c67463c952db1935452cf40ba65178ce"]}}}},"wrappy":{"files":{"LICENSE":{"size":765,"offset":"30112560","integrity":{"algorithm":"SHA256","hash":"4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b","blockSize":4194304,"blocks":["4ec3d4c66cd87f5c8d8ad911b10f99bf27cb00cdfcff82621956e379186b016b"]}},"package.json":{"size":479,"offset":"30113325","integrity":{"algorithm":"SHA256","hash":"21738eaf963f20de6b530101eb1880d537b9a33025eec7dd9f9168dc4ccfef0e","blockSize":4194304,"blocks":["21738eaf963f20de6b530101eb1880d537b9a33025eec7dd9f9168dc4ccfef0e"]}},"wrappy.js":{"size":905,"offset":"30113804","integrity":{"algorithm":"SHA256","hash":"153453c4d84a3c2f13589c37055a7daff61d48475dcce554f7eedad15fc7b3e5","blockSize":4194304,"blocks":["153453c4d84a3c2f13589c37055a7daff61d48475dcce554f7eedad15fc7b3e5"]}}}},"ws":{"files":{"browser.js":{"size":176,"offset":"30114709","integrity":{"algorithm":"SHA256","hash":"010da44addea1d88b2b732540c3f1fd0cbcb28926b96623d4c64222e0ead2d0e","blockSize":4194304,"blocks":["010da44addea1d88b2b732540c3f1fd0cbcb28926b96623d4c64222e0ead2d0e"]}},"index.js":{"size":296,"offset":"30114885","integrity":{"algorithm":"SHA256","hash":"c2b0c9905540a51acb276523bb024ef3c11bd118b03a90d92962080ebd07fec9","blockSize":4194304,"blocks":["c2b0c9905540a51acb276523bb024ef3c11bd118b03a90d92962080ebd07fec9"]}},"lib":{"files":{"buffer-util.js":{"size":3044,"offset":"30115181","integrity":{"algorithm":"SHA256","hash":"da2088dcfa847be2b26a0c4fd46480e2a787b3120bcaceb98555654bbba53631","blockSize":4194304,"blocks":["da2088dcfa847be2b26a0c4fd46480e2a787b3120bcaceb98555654bbba53631"]}},"constants.js":{"size":268,"offset":"30118225","integrity":{"algorithm":"SHA256","hash":"2c2e8f6abbb7c2314d5736ef0a8d11f04ddc3cf4faf1c710df5d75c4170e937e","blockSize":4194304,"blocks":["2c2e8f6abbb7c2314d5736ef0a8d11f04ddc3cf4faf1c710df5d75c4170e937e"]}},"event-target.js":{"size":4396,"offset":"30118493","integrity":{"algorithm":"SHA256","hash":"6bad3e83c4a8f113cfc40ef2757ecbc727e67c5e16ea8447cdc6e12af2b1554a","blockSize":4194304,"blocks":["6bad3e83c4a8f113cfc40ef2757ecbc727e67c5e16ea8447cdc6e12af2b1554a"]}},"extension.js":{"size":6883,"offset":"30122889","integrity":{"algorithm":"SHA256","hash":"13b228a92d2dad9d1bffd09faaae6b64bfc1f713dd966010ad479a901c243a86","blockSize":4194304,"blocks":["13b228a92d2dad9d1bffd09faaae6b64bfc1f713dd966010ad479a901c243a86"]}},"limiter.js":{"size":1034,"offset":"30129772","integrity":{"algorithm":"SHA256","hash":"e0469d4b83f6ba764b15f80e1766b75c136fbff68f048f4c050f0b1c7f065f69","blockSize":4194304,"blocks":["e0469d4b83f6ba764b15f80e1766b75c136fbff68f048f4c050f0b1c7f065f69"]}},"permessage-deflate.js":{"size":14255,"offset":"30130806","integrity":{"algorithm":"SHA256","hash":"433cd5543ca3f3423c0eaf27b4b1fe09211276bf16090a839d73f5fe809727ba","blockSize":4194304,"blocks":["433cd5543ca3f3423c0eaf27b4b1fe09211276bf16090a839d73f5fe809727ba"]}},"receiver.js":{"size":12431,"offset":"30145061","integrity":{"algorithm":"SHA256","hash":"f7a6fda3723be1b60e15fc877f08601cfbc18eb8dbbe79983c7453f902742adc","blockSize":4194304,"blocks":["f7a6fda3723be1b60e15fc877f08601cfbc18eb8dbbe79983c7453f902742adc"]}},"sender.js":{"size":10679,"offset":"30157492","integrity":{"algorithm":"SHA256","hash":"3f7526f281342bbac168e366cf8018ed919f9288db3b52f36f69d637f20bd691","blockSize":4194304,"blocks":["3f7526f281342bbac168e366cf8018ed919f9288db3b52f36f69d637f20bd691"]}},"stream.js":{"size":3938,"offset":"30168171","integrity":{"algorithm":"SHA256","hash":"503e6773f58a9fd05ac87be76b8fa88848dbc9800f09154f5191a6768bb687f8","blockSize":4194304,"blocks":["503e6773f58a9fd05ac87be76b8fa88848dbc9800f09154f5191a6768bb687f8"]}},"validation.js":{"size":2494,"offset":"30172109","integrity":{"algorithm":"SHA256","hash":"257923e54135f38ba66cf9129c02765c448efa2272e710844b3923b879605e18","blockSize":4194304,"blocks":["257923e54135f38ba66cf9129c02765c448efa2272e710844b3923b879605e18"]}},"websocket-server.js":{"size":11768,"offset":"30174603","integrity":{"algorithm":"SHA256","hash":"7c89a125ad57d2033b1dc7c48f4d5bc3993d3f13435f75c73df371a490321feb","blockSize":4194304,"blocks":["7c89a125ad57d2033b1dc7c48f4d5bc3993d3f13435f75c73df371a490321feb"]}},"websocket.js":{"size":25137,"offset":"30186371","integrity":{"algorithm":"SHA256","hash":"7f670cc86ce0f960cda9fd0d4d74df9d23df313a89796173bb41b10defbd18fb","blockSize":4194304,"blocks":["7f670cc86ce0f960cda9fd0d4d74df9d23df313a89796173bb41b10defbd18fb"]}}}},"LICENSE":{"size":1106,"offset":"30211508","integrity":{"algorithm":"SHA256","hash":"3de284c8e6fa7e8437eff6f53695471e0332129a5b42a79361e17b7637de94b3","blockSize":4194304,"blocks":["3de284c8e6fa7e8437eff6f53695471e0332129a5b42a79361e17b7637de94b3"]}},"package.json":{"size":994,"offset":"30212614","integrity":{"algorithm":"SHA256","hash":"19a2b7f34222294e3d3f633b68c74ed86bf427af81d30fbfddb2ec8994e864a3","blockSize":4194304,"blocks":["19a2b7f34222294e3d3f633b68c74ed86bf427af81d30fbfddb2ec8994e864a3"]}}}},"y18n":{"files":{"index.js":{"size":5273,"offset":"30213608","integrity":{"algorithm":"SHA256","hash":"ca78904cb3c3dc166f0fe659d2fa554847b52405249dffe3074e11bb32991657","blockSize":4194304,"blocks":["ca78904cb3c3dc166f0fe659d2fa554847b52405249dffe3074e11bb32991657"]}},"LICENSE":{"size":731,"offset":"30218881","integrity":{"algorithm":"SHA256","hash":"2034cce3b6fafcddd642c4175e01d3ddfc332a53b9f20fdc46b1466dc89ac469","blockSize":4194304,"blocks":["2034cce3b6fafcddd642c4175e01d3ddfc332a53b9f20fdc46b1466dc89ac469"]}},"package.json":{"size":579,"offset":"30219612","integrity":{"algorithm":"SHA256","hash":"5af5ce596ab66c5f4165099be1903f770c6b3d54526667b513e5f55129460ff6","blockSize":4194304,"blocks":["5af5ce596ab66c5f4165099be1903f770c6b3d54526667b513e5f55129460ff6"]}}}},"yaml":{"files":{"browser":{"files":{"dist":{"files":{"compose":{"files":{"compose-collection.js":{"size":2086,"offset":"30220191","integrity":{"algorithm":"SHA256","hash":"fcf0ca700a00cc7320eda59d706d15d1af30ae22a41358dfb891e6580d1e4f60","blockSize":4194304,"blocks":["fcf0ca700a00cc7320eda59d706d15d1af30ae22a41358dfb891e6580d1e4f60"]}},"compose-doc.js":{"size":1506,"offset":"30222277","integrity":{"algorithm":"SHA256","hash":"b4f3c66746ddb8eb22e5a3ab0aa31b82eb0028c8fcd9b691d3ed08b5651bec71","blockSize":4194304,"blocks":["b4f3c66746ddb8eb22e5a3ab0aa31b82eb0028c8fcd9b691d3ed08b5651bec71"]}},"compose-node.js":{"size":3378,"offset":"30223783","integrity":{"algorithm":"SHA256","hash":"97341f6d1431335b44ebd6b125e41853ead7e18cad9a3bbf1db17c0ebdb06e14","blockSize":4194304,"blocks":["97341f6d1431335b44ebd6b125e41853ead7e18cad9a3bbf1db17c0ebdb06e14"]}},"compose-scalar.js":{"size":3475,"offset":"30227161","integrity":{"algorithm":"SHA256","hash":"d89ec139f528fff9d0d6b129113ce7a804a4a792be79bc3ce5bec757f89e06f1","blockSize":4194304,"blocks":["d89ec139f528fff9d0d6b129113ce7a804a4a792be79bc3ce5bec757f89e06f1"]}},"composer.js":{"size":8454,"offset":"30230636","integrity":{"algorithm":"SHA256","hash":"4c8c6cc237eb90888dc46dd83fcd6deba3443f12a9a8c6a6ea6207e820d75f46","blockSize":4194304,"blocks":["4c8c6cc237eb90888dc46dd83fcd6deba3443f12a9a8c6a6ea6207e820d75f46"]}},"resolve-block-map.js":{"size":4823,"offset":"30239090","integrity":{"algorithm":"SHA256","hash":"050748b83803743da1dad7835c6279d296f9402a32fc466ba34706f5b6b1e6ed","blockSize":4194304,"blocks":["050748b83803743da1dad7835c6279d296f9402a32fc466ba34706f5b6b1e6ed"]}},"resolve-block-scalar.js":{"size":7268,"offset":"30243913","integrity":{"algorithm":"SHA256","hash":"218dbd4be4cc12f75e64fc014ed866586981661585c2c230ca63304be18840ce","blockSize":4194304,"blocks":["218dbd4be4cc12f75e64fc014ed866586981661585c2c230ca63304be18840ce"]}},"resolve-block-seq.js":{"size":1602,"offset":"30251181","integrity":{"algorithm":"SHA256","hash":"f326d5748549307582876559efa3e5d05fbc450e12c51eac6d8b3edf5af4275e","blockSize":4194304,"blocks":["f326d5748549307582876559efa3e5d05fbc450e12c51eac6d8b3edf5af4275e"]}},"resolve-end.js":{"size":1239,"offset":"30252783","integrity":{"algorithm":"SHA256","hash":"e0a32e1b8c5649ea14152b0c0d45fbd64d46dbfa299a7328b71421e49ee48db2","blockSize":4194304,"blocks":["e0a32e1b8c5649ea14152b0c0d45fbd64d46dbfa299a7328b71421e49ee48db2"]}},"resolve-flow-collection.js":{"size":8596,"offset":"30254022","integrity":{"algorithm":"SHA256","hash":"9d7befc5eb97003f8b59ce8830445e58b625f1db6e1653ec9c6f4fbafbb773e5","blockSize":4194304,"blocks":["9d7befc5eb97003f8b59ce8830445e58b625f1db6e1653ec9c6f4fbafbb773e5"]}},"resolve-flow-scalar.js":{"size":7143,"offset":"30262618","integrity":{"algorithm":"SHA256","hash":"2baf0f6a318c7ff143476737aa5397a96f32e98d5c5014046f7819e8194f9f79","blockSize":4194304,"blocks":["2baf0f6a318c7ff143476737aa5397a96f32e98d5c5014046f7819e8194f9f79"]}},"resolve-props.js":{"size":5087,"offset":"30269761","integrity":{"algorithm":"SHA256","hash":"e2198dbc7e2d13c35462ea66e0950882333586e9dab540ffeb42ece3c038dcc3","blockSize":4194304,"blocks":["e2198dbc7e2d13c35462ea66e0950882333586e9dab540ffeb42ece3c038dcc3"]}},"util-contains-newline.js":{"size":1051,"offset":"30274848","integrity":{"algorithm":"SHA256","hash":"4810ffba0d74ebb913731e1369ea17f6fef20df2feb2ef0bd8553e439f4a6b78","blockSize":4194304,"blocks":["4810ffba0d74ebb913731e1369ea17f6fef20df2feb2ef0bd8553e439f4a6b78"]}},"util-empty-scalar-position.js":{"size":878,"offset":"30275899","integrity":{"algorithm":"SHA256","hash":"fca0f87db08d94d8e1677b9159ac62e94fc7f46987cf8b40de85aaf4c8c70ccc","blockSize":4194304,"blocks":["fca0f87db08d94d8e1677b9159ac62e94fc7f46987cf8b40de85aaf4c8c70ccc"]}},"util-flow-indent-check.js":{"size":535,"offset":"30276777","integrity":{"algorithm":"SHA256","hash":"df884cc223f4be8e1c00786ceb94a1353ba0a1fc429d6ec26efa3841562c25f2","blockSize":4194304,"blocks":["df884cc223f4be8e1c00786ceb94a1353ba0a1fc429d6ec26efa3841562c25f2"]}},"util-map-includes.js":{"size":527,"offset":"30277312","integrity":{"algorithm":"SHA256","hash":"61f49a230308e37abd54fbf5eb4e0c4c5ea7adf3a7065a5f8db75e3285e38261","blockSize":4194304,"blocks":["61f49a230308e37abd54fbf5eb4e0c4c5ea7adf3a7065a5f8db75e3285e38261"]}}}},"doc":{"files":{"anchors.js":{"size":2289,"offset":"30277839","integrity":{"algorithm":"SHA256","hash":"0e1cfde6a6c5a6b9327d0b8dd83e9be0b42fbf1177109e6956ec15127690edda","blockSize":4194304,"blocks":["0e1cfde6a6c5a6b9327d0b8dd83e9be0b42fbf1177109e6956ec15127690edda"]}},"applyReviver.js":{"size":1844,"offset":"30280128","integrity":{"algorithm":"SHA256","hash":"f09ad07a73144157cc584a8d9f890b6ca142abf8f24bc0031e9d24784ed815e8","blockSize":4194304,"blocks":["f09ad07a73144157cc584a8d9f890b6ca142abf8f24bc0031e9d24784ed815e8"]}},"createNode.js":{"size":3191,"offset":"30281972","integrity":{"algorithm":"SHA256","hash":"ef9ae2501465444da1f8d69128267ce49e3633d88413a99c34cda2be468c58d3","blockSize":4194304,"blocks":["ef9ae2501465444da1f8d69128267ce49e3633d88413a99c34cda2be468c58d3"]}},"directives.js":{"size":6024,"offset":"30285163","integrity":{"algorithm":"SHA256","hash":"a7473afc96cd72ca78396b85a77fbdcfb2bc37bf4d2d115448945e970814dd54","blockSize":4194304,"blocks":["a7473afc96cd72ca78396b85a77fbdcfb2bc37bf4d2d115448945e970814dd54"]}},"Document.js":{"size":12790,"offset":"30291187","integrity":{"algorithm":"SHA256","hash":"359e6c1fdae193cdae8ee8e93d22903d0479f8296b6208268edaada61a870d98","blockSize":4194304,"blocks":["359e6c1fdae193cdae8ee8e93d22903d0479f8296b6208268edaada61a870d98"]}}}},"errors.js":{"size":2016,"offset":"30303977","integrity":{"algorithm":"SHA256","hash":"7454fadf0ea430abc8bb5f43953f92db0ef14f358f763aae1323c3bb007ab924","blockSize":4194304,"blocks":["7454fadf0ea430abc8bb5f43953f92db0ef14f358f763aae1323c3bb007ab924"]}},"index.js":{"size":875,"offset":"30305993","integrity":{"algorithm":"SHA256","hash":"15217b280ce8567e74f77a366eb8cff4f475980b9bc2ac8cdb6e79d9ce6d123a","blockSize":4194304,"blocks":["15217b280ce8567e74f77a366eb8cff4f475980b9bc2ac8cdb6e79d9ce6d123a"]}},"log.js":{"size":386,"offset":"30306868","integrity":{"algorithm":"SHA256","hash":"2410e173d6f58b0bba92bc16336412b7fc8a905bee88fae89e17150806d4b2e4","blockSize":4194304,"blocks":["2410e173d6f58b0bba92bc16336412b7fc8a905bee88fae89e17150806d4b2e4"]}},"nodes":{"files":{"addPairToJSMap.js":{"size":3923,"offset":"30307254","integrity":{"algorithm":"SHA256","hash":"408d7f72c4fa6adf5d4d3ce633082175db3c8afb0dc55d9b0bb8cb6dced41745","blockSize":4194304,"blocks":["408d7f72c4fa6adf5d4d3ce633082175db3c8afb0dc55d9b0bb8cb6dced41745"]}},"Alias.js":{"size":3147,"offset":"30311177","integrity":{"algorithm":"SHA256","hash":"16c2d7edf9e5eff62b07717a390a2eac3e28dc7b00d1b71d1275004e9a782f31","blockSize":4194304,"blocks":["16c2d7edf9e5eff62b07717a390a2eac3e28dc7b00d1b71d1275004e9a782f31"]}},"Collection.js":{"size":5010,"offset":"30314324","integrity":{"algorithm":"SHA256","hash":"5e20098ae904a99ee988fb9044e52e820970a392ea0e2ec2c4e39e3ec463c513","blockSize":4194304,"blocks":["5e20098ae904a99ee988fb9044e52e820970a392ea0e2ec2c4e39e3ec463c513"]}},"Node.js":{"size":1892,"offset":"30319334","integrity":{"algorithm":"SHA256","hash":"64860749da9bbc79fcf953fd49d798e341ae004b71dd9cfd8246a6c25ad55352","blockSize":4194304,"blocks":["64860749da9bbc79fcf953fd49d798e341ae004b71dd9cfd8246a6c25ad55352"]}},"Pair.js":{"size":1206,"offset":"30321226","integrity":{"algorithm":"SHA256","hash":"381eba19818f244253bfbc4e1dcfbc4ee6bb6728941d8f915c30bfefed55a434","blockSize":4194304,"blocks":["381eba19818f244253bfbc4e1dcfbc4ee6bb6728941d8f915c30bfefed55a434"]}},"Scalar.js":{"size":711,"offset":"30322432","integrity":{"algorithm":"SHA256","hash":"6353bc6f6a26c26a7469023585c0a63259509d7a91ef257eba551a06421ec2cd","blockSize":4194304,"blocks":["6353bc6f6a26c26a7469023585c0a63259509d7a91ef257eba551a06421ec2cd"]}},"toJS.js":{"size":1305,"offset":"30323143","integrity":{"algorithm":"SHA256","hash":"17305318517033bf6f587c330a34093ed584bf833adb07e7927637f4e91b1431","blockSize":4194304,"blocks":["17305318517033bf6f587c330a34093ed584bf833adb07e7927637f4e91b1431"]}},"YAMLMap.js":{"size":4075,"offset":"30324448","integrity":{"algorithm":"SHA256","hash":"1e35bd441098a15e682ab79e4ccd58049851bb0db50842e7d6ec211b8738e5a0","blockSize":4194304,"blocks":["1e35bd441098a15e682ab79e4ccd58049851bb0db50842e7d6ec211b8738e5a0"]}},"YAMLSeq.js":{"size":3386,"offset":"30328523","integrity":{"algorithm":"SHA256","hash":"7835e398b9a8c744303f8f50c543bce4ba889ed61b0cfaf1d7080789d5af337b","blockSize":4194304,"blocks":["7835e398b9a8c744303f8f50c543bce4ba889ed61b0cfaf1d7080789d5af337b"]}}}},"parse":{"files":{"cst-scalar.js":{"size":9267,"offset":"30331909","integrity":{"algorithm":"SHA256","hash":"c3311893b63d507dedc9f33d6fdda4e0bc8ee3388978631f3f8270e44996562d","blockSize":4194304,"blocks":["c3311893b63d507dedc9f33d6fdda4e0bc8ee3388978631f3f8270e44996562d"]}},"cst-stringify.js":{"size":1775,"offset":"30341176","integrity":{"algorithm":"SHA256","hash":"275b500e3f1a0067d5d8671af5c536963a46d4921e49cf156547f796067b8810","blockSize":4194304,"blocks":["275b500e3f1a0067d5d8671af5c536963a46d4921e49cf156547f796067b8810"]}},"cst-visit.js":{"size":4054,"offset":"30342951","integrity":{"algorithm":"SHA256","hash":"fc22e8f79c930e8160a7d9ca22daba8c338083b3cf15d733e3e2fa2bf94f2030","blockSize":4194304,"blocks":["fc22e8f79c930e8160a7d9ca22daba8c338083b3cf15d733e3e2fa2bf94f2030"]}},"cst.js":{"size":2886,"offset":"30347005","integrity":{"algorithm":"SHA256","hash":"8bf6c87dc02b9375750d550a9099cb1cd1cd71ca9da68f1a0798844a0f76bf8f","blockSize":4194304,"blocks":["8bf6c87dc02b9375750d550a9099cb1cd1cd71ca9da68f1a0798844a0f76bf8f"]}},"lexer.js":{"size":23510,"offset":"30349891","integrity":{"algorithm":"SHA256","hash":"5f617df36ed82ed39d6cf66d9896844eaf4f3fecfcaf1327df637476fc39ec86","blockSize":4194304,"blocks":["5f617df36ed82ed39d6cf66d9896844eaf4f3fecfcaf1327df637476fc39ec86"]}},"line-counter.js":{"size":1419,"offset":"30373401","integrity":{"algorithm":"SHA256","hash":"2428d1b9a18ad7d8dabc7e12276e0fd90446c9e3433f1501e6bb43e111ad63c0","blockSize":4194304,"blocks":["2428d1b9a18ad7d8dabc7e12276e0fd90446c9e3433f1501e6bb43e111ad63c0"]}},"parser.js":{"size":34973,"offset":"30374820","integrity":{"algorithm":"SHA256","hash":"8ddbc025921ba40af3b652df10bf454c9380afdb4ba0cb944ea742c3df8aa235","blockSize":4194304,"blocks":["8ddbc025921ba40af3b652df10bf454c9380afdb4ba0cb944ea742c3df8aa235"]}}}},"public-api.js":{"size":4064,"offset":"30409793","integrity":{"algorithm":"SHA256","hash":"1d57e86de0c54d9de65bcc65e8cf71b1dbef3462ba2e33971fbde06ff84038b1","blockSize":4194304,"blocks":["1d57e86de0c54d9de65bcc65e8cf71b1dbef3462ba2e33971fbde06ff84038b1"]}},"schema":{"files":{"common":{"files":{"map.js":{"size":1256,"offset":"30413857","integrity":{"algorithm":"SHA256","hash":"aa2c96f61752f7df3203aa2a4892279c44898c7fdf051c78d26f30cb48b032e8","blockSize":4194304,"blocks":["aa2c96f61752f7df3203aa2a4892279c44898c7fdf051c78d26f30cb48b032e8"]}},"null.js":{"size":434,"offset":"30415113","integrity":{"algorithm":"SHA256","hash":"6666e819b0dd4c9eac1498e8520e23943abf2c9d92cee72b9c5607557800eb14","blockSize":4194304,"blocks":["6666e819b0dd4c9eac1498e8520e23943abf2c9d92cee72b9c5607557800eb14"]}},"seq.js":{"size":926,"offset":"30415547","integrity":{"algorithm":"SHA256","hash":"03253d9e5675eccbd682ce5823b180b7ab310b80351f34aabac571ad1c32c3ad","blockSize":4194304,"blocks":["03253d9e5675eccbd682ce5823b180b7ab310b80351f34aabac571ad1c32c3ad"]}},"string.js":{"size":421,"offset":"30416473","integrity":{"algorithm":"SHA256","hash":"830740273a4f0a39b94549377cb12183ab8ce558dfb12818f7b295fe261fc08e","blockSize":4194304,"blocks":["830740273a4f0a39b94549377cb12183ab8ce558dfb12818f7b295fe261fc08e"]}}}},"core":{"files":{"bool.js":{"size":607,"offset":"30416894","integrity":{"algorithm":"SHA256","hash":"9d4b1fe540d36d8e09cf5799b8abed53e4ee620425d3d6712e8a50c927752615","blockSize":4194304,"blocks":["9d4b1fe540d36d8e09cf5799b8abed53e4ee620425d3d6712e8a50c927752615"]}},"float.js":{"size":1393,"offset":"30417501","integrity":{"algorithm":"SHA256","hash":"95d9d01600301615b44059102d50c4127fff2e3b0d431763032c70151138c265","blockSize":4194304,"blocks":["95d9d01600301615b44059102d50c4127fff2e3b0d431763032c70151138c265"]}},"int.js":{"size":1324,"offset":"30418894","integrity":{"algorithm":"SHA256","hash":"dc7ae60f465273fd7e5dfd6b7f686ac47887fa02db3fe9ec603290003cc9baff","blockSize":4194304,"blocks":["dc7ae60f465273fd7e5dfd6b7f686ac47887fa02db3fe9ec603290003cc9baff"]}},"schema.js":{"size":480,"offset":"30420218","integrity":{"algorithm":"SHA256","hash":"92e75125989595b02d9b9f8d6788076d4c1ec173bfa4b0f04eabaaff86153dd9","blockSize":4194304,"blocks":["92e75125989595b02d9b9f8d6788076d4c1ec173bfa4b0f04eabaaff86153dd9"]}}}},"json":{"files":{"schema.js":{"size":1865,"offset":"30420698","integrity":{"algorithm":"SHA256","hash":"57b8deebfeea67a60b750a5024376e658bf874b324f0fef169061838ad34364a","blockSize":4194304,"blocks":["57b8deebfeea67a60b750a5024376e658bf874b324f0fef169061838ad34364a"]}}}},"Schema.js":{"size":1572,"offset":"30422563","integrity":{"algorithm":"SHA256","hash":"c596dad6477475a4f058e424ff761293065f572c0243f1ef322c9cbd470afb15","blockSize":4194304,"blocks":["c596dad6477475a4f058e424ff761293065f572c0243f1ef322c9cbd470afb15"]}},"tags.js":{"size":2463,"offset":"30424135","integrity":{"algorithm":"SHA256","hash":"517b4b80323deaa15665ceb781fe14f2da98b445c11d82a4b6ac3d4b31b26156","blockSize":4194304,"blocks":["517b4b80323deaa15665ceb781fe14f2da98b445c11d82a4b6ac3d4b31b26156"]}},"yaml-1.1":{"files":{"binary.js":{"size":2582,"offset":"30426598","integrity":{"algorithm":"SHA256","hash":"ec505b2fc73fa64c558dfb7535d393e4b3f6d56b85af46d219d0cf590971d74e","blockSize":4194304,"blocks":["ec505b2fc73fa64c558dfb7535d393e4b3f6d56b85af46d219d0cf590971d74e"]}},"bool.js":{"size":788,"offset":"30429180","integrity":{"algorithm":"SHA256","hash":"3a2ab56ec51f305f0e3975a828bcaf491997f816a4e8f9dd9fdce310275b1ea9","blockSize":4194304,"blocks":["3a2ab56ec51f305f0e3975a828bcaf491997f816a4e8f9dd9fdce310275b1ea9"]}},"float.js":{"size":1505,"offset":"30429968","integrity":{"algorithm":"SHA256","hash":"19faf1fe844147975a3a866b7ccbbff1c9f49854d3d2df3c5c4390e2165c2f24","blockSize":4194304,"blocks":["19faf1fe844147975a3a866b7ccbbff1c9f49854d3d2df3c5c4390e2165c2f24"]}},"int.js":{"size":2132,"offset":"30431473","integrity":{"algorithm":"SHA256","hash":"6c83bf34c4ecfa722eff2c252c8bdf95661777738c9971c4ccda3a5413218d80","blockSize":4194304,"blocks":["6c83bf34c4ecfa722eff2c252c8bdf95661777738c9971c4ccda3a5413218d80"]}},"omap.js":{"size":2433,"offset":"30433605","integrity":{"algorithm":"SHA256","hash":"963efca944311307cce8865b503d6f7e1089d6fbb6cb1bf3f1149ea4b86ca068","blockSize":4194304,"blocks":["963efca944311307cce8865b503d6f7e1089d6fbb6cb1bf3f1149ea4b86ca068"]}},"pairs.js":{"size":2760,"offset":"30436038","integrity":{"algorithm":"SHA256","hash":"3682328814240bd2b4590ac9760f28557f37926d457014b96757f8017e917b6a","blockSize":4194304,"blocks":["3682328814240bd2b4590ac9760f28557f37926d457014b96757f8017e917b6a"]}},"schema.js":{"size":813,"offset":"30438798","integrity":{"algorithm":"SHA256","hash":"318cd23c449908ca50395c551503d63ae5909761fe9fd60535e3761e7d86098b","blockSize":4194304,"blocks":["318cd23c449908ca50395c551503d63ae5909761fe9fd60535e3761e7d86098b"]}},"set.js":{"size":2793,"offset":"30439611","integrity":{"algorithm":"SHA256","hash":"adfb6c384f3b6b707d654c828710d731e64fd764decef12af05ddfbe549f3f7f","blockSize":4194304,"blocks":["adfb6c384f3b6b707d654c828710d731e64fd764decef12af05ddfbe549f3f7f"]}},"timestamp.js":{"size":3706,"offset":"30442404","integrity":{"algorithm":"SHA256","hash":"a47df32601dac2c82b704b3d3c2ffdbdc63c083661ff14af31ab6f40e617556b","blockSize":4194304,"blocks":["a47df32601dac2c82b704b3d3c2ffdbdc63c083661ff14af31ab6f40e617556b"]}}}}}},"stringify":{"files":{"foldFlowLines.js":{"size":4476,"offset":"30446110","integrity":{"algorithm":"SHA256","hash":"9156d6c2ca500670f30e385b0e9599270cbaac8d6c262ae31143c8be19a409cf","blockSize":4194304,"blocks":["9156d6c2ca500670f30e385b0e9599270cbaac8d6c262ae31143c8be19a409cf"]}},"stringify.js":{"size":4475,"offset":"30450586","integrity":{"algorithm":"SHA256","hash":"c977ebd1f430570ea486da80d793c4d29f72e5b228cb03343dd50cf83df7f6b8","blockSize":4194304,"blocks":["c977ebd1f430570ea486da80d793c4d29f72e5b228cb03343dd50cf83df7f6b8"]}},"stringifyCollection.js":{"size":5405,"offset":"30455061","integrity":{"algorithm":"SHA256","hash":"f9cd47fb95a54ebb5530c63df6ddfa3fd42487946cb82039fffd15f1e3c09420","blockSize":4194304,"blocks":["f9cd47fb95a54ebb5530c63df6ddfa3fd42487946cb82039fffd15f1e3c09420"]}},"stringifyComment.js":{"size":724,"offset":"30460466","integrity":{"algorithm":"SHA256","hash":"20d3dc6bebda3efc2394ca162455ce9e4691b6c60995b5b4418b30659e09e03e","blockSize":4194304,"blocks":["20d3dc6bebda3efc2394ca162455ce9e4691b6c60995b5b4418b30659e09e03e"]}},"stringifyDocument.js":{"size":3037,"offset":"30461190","integrity":{"algorithm":"SHA256","hash":"63f8054fbce46f7cf074fe488b1a1914e849bea104cdb3f7d6560d3538482ee1","blockSize":4194304,"blocks":["63f8054fbce46f7cf074fe488b1a1914e849bea104cdb3f7d6560d3538482ee1"]}},"stringifyNumber.js":{"size":718,"offset":"30464227","integrity":{"algorithm":"SHA256","hash":"d59926ae5c3764a283ec0ee3de848157eb38cff84a69266a9425f661dee30619","blockSize":4194304,"blocks":["d59926ae5c3764a283ec0ee3de848157eb38cff84a69266a9425f661dee30619"]}},"stringifyPair.js":{"size":4456,"offset":"30464945","integrity":{"algorithm":"SHA256","hash":"a4d9731a4bfa46d0163b0ce8c45b398bd59c9530f033e9124777d7810a1f8946","blockSize":4194304,"blocks":["a4d9731a4bfa46d0163b0ce8c45b398bd59c9530f033e9124777d7810a1f8946"]}},"stringifyString.js":{"size":12492,"offset":"30469401","integrity":{"algorithm":"SHA256","hash":"39fade7dd819f969490b0043f453e15ec50edd1b6cf6a24b7d3a9f3c596be1bb","blockSize":4194304,"blocks":["39fade7dd819f969490b0043f453e15ec50edd1b6cf6a24b7d3a9f3c596be1bb"]}}}},"util.js":{"size":498,"offset":"30481893","integrity":{"algorithm":"SHA256","hash":"b831a59695b71a9c3ffec99018a2372d764ef6d4f849e78c812d40bc9b88dade","blockSize":4194304,"blocks":["b831a59695b71a9c3ffec99018a2372d764ef6d4f849e78c812d40bc9b88dade"]}},"visit.js":{"size":9426,"offset":"30482391","integrity":{"algorithm":"SHA256","hash":"70fabca205baa68b75302cdaab1f0d5f440d39d0eba97fbd0cc68e358877caec","blockSize":4194304,"blocks":["70fabca205baa68b75302cdaab1f0d5f440d39d0eba97fbd0cc68e358877caec"]}}}},"index.js":{"size":191,"offset":"30491817","integrity":{"algorithm":"SHA256","hash":"5ae196b7abe55bed1d4d11f7eeba63aeda0c49fb73eb3c7359e3d6b9a080696b","blockSize":4194304,"blocks":["5ae196b7abe55bed1d4d11f7eeba63aeda0c49fb73eb3c7359e3d6b9a080696b"]}},"package.json":{"size":23,"offset":"30492008","integrity":{"algorithm":"SHA256","hash":"3ca9d4afd21425087cf31893b8f9f63c81b0b8408db5e343ca76e5f8aa26ab9a","blockSize":4194304,"blocks":["3ca9d4afd21425087cf31893b8f9f63c81b0b8408db5e343ca76e5f8aa26ab9a"]}}}},"dist":{"files":{"compose":{"files":{"compose-collection.js":{"size":2175,"offset":"30492031","integrity":{"algorithm":"SHA256","hash":"5b478192620335b878de2e33ed271274df165721f4cb17c47f170c2efb2fbc9b","blockSize":4194304,"blocks":["5b478192620335b878de2e33ed271274df165721f4cb17c47f170c2efb2fbc9b"]}},"compose-doc.js":{"size":1566,"offset":"30494206","integrity":{"algorithm":"SHA256","hash":"2ef37c7b60a167c32f8c7fbc44ac0d47644331c86a1bd0bad929ba78edb40970","blockSize":4194304,"blocks":["2ef37c7b60a167c32f8c7fbc44ac0d47644331c86a1bd0bad929ba78edb40970"]}},"compose-node.js":{"size":3517,"offset":"30495772","integrity":{"algorithm":"SHA256","hash":"53188525a243e3260a68520de02a9f1ce479cd9e1c1624112a84c262ed02860b","blockSize":4194304,"blocks":["53188525a243e3260a68520de02a9f1ce479cd9e1c1624112a84c262ed02860b"]}},"compose-scalar.js":{"size":3568,"offset":"30499289","integrity":{"algorithm":"SHA256","hash":"d22392e8324144017daae3e8602e86e981f22a06f7115c18d0e4db41ec457980","blockSize":4194304,"blocks":["d22392e8324144017daae3e8602e86e981f22a06f7115c18d0e4db41ec457980"]}},"composer.js":{"size":8606,"offset":"30502857","integrity":{"algorithm":"SHA256","hash":"85041935ee14318bf651671d524f2013b1f313155c665307b72cb6a9fc60e9d8","blockSize":4194304,"blocks":["85041935ee14318bf651671d524f2013b1f313155c665307b72cb6a9fc60e9d8"]}},"resolve-block-map.js":{"size":4979,"offset":"30511463","integrity":{"algorithm":"SHA256","hash":"e6ee5b135c226e3042b523f497da244054a3811f1a77450d21c83bae4994a047","blockSize":4194304,"blocks":["e6ee5b135c226e3042b523f497da244054a3811f1a77450d21c83bae4994a047"]}},"resolve-block-scalar.js":{"size":7321,"offset":"30516442","integrity":{"algorithm":"SHA256","hash":"edd49b7f7fd8ec8d301cf7768130682403720f9bd865f8b3e7ca27b795faf5cb","blockSize":4194304,"blocks":["edd49b7f7fd8ec8d301cf7768130682403720f9bd865f8b3e7ca27b795faf5cb"]}},"resolve-block-seq.js":{"size":1674,"offset":"30523763","integrity":{"algorithm":"SHA256","hash":"d381b91d2fb3d426a0c72c4f4b16fbd9c3cb3911e7360b8ef214a03e41e02e41","blockSize":4194304,"blocks":["d381b91d2fb3d426a0c72c4f4b16fbd9c3cb3911e7360b8ef214a03e41e02e41"]}},"resolve-end.js":{"size":1264,"offset":"30525437","integrity":{"algorithm":"SHA256","hash":"532bf56299183e75bb7c20db75321367c28393b66ecb8ffd540faedd9817f116","blockSize":4194304,"blocks":["532bf56299183e75bb7c20db75321367c28393b66ecb8ffd540faedd9817f116"]}},"resolve-flow-collection.js":{"size":8737,"offset":"30526701","integrity":{"algorithm":"SHA256","hash":"b87668308211e6432dedfe91b8e5b445d70d72e832af8b6740fe1fd72d4ba6d9","blockSize":4194304,"blocks":["b87668308211e6432dedfe91b8e5b445d70d72e832af8b6740fe1fd72d4ba6d9"]}},"resolve-flow-scalar.js":{"size":7205,"offset":"30535438","integrity":{"algorithm":"SHA256","hash":"8731f6842255ce9e3f447889e8b243bb48c07829c2f7e956355d3de65e217f9f","blockSize":4194304,"blocks":["8731f6842255ce9e3f447889e8b243bb48c07829c2f7e956355d3de65e217f9f"]}},"resolve-props.js":{"size":5114,"offset":"30542643","integrity":{"algorithm":"SHA256","hash":"8429ef3b00dee9ca47fe16e0466cb4af984b29d7bfc19603913295889750a6ef","blockSize":4194304,"blocks":["8429ef3b00dee9ca47fe16e0466cb4af984b29d7bfc19603913295889750a6ef"]}},"util-contains-newline.js":{"size":1081,"offset":"30547757","integrity":{"algorithm":"SHA256","hash":"60182618fc9fa669e74ab74f4231c15b5d24bc52ab0a419684bb827a00d69be6","blockSize":4194304,"blocks":["60182618fc9fa669e74ab74f4231c15b5d24bc52ab0a419684bb827a00d69be6"]}},"util-empty-scalar-position.js":{"size":912,"offset":"30548838","integrity":{"algorithm":"SHA256","hash":"d6963bb28c8aab3227891a413585d734413890facdd12225c8913c798953f662","blockSize":4194304,"blocks":["d6963bb28c8aab3227891a413585d734413890facdd12225c8913c798953f662"]}},"util-flow-indent-check.js":{"size":588,"offset":"30549750","integrity":{"algorithm":"SHA256","hash":"27636cd6bf77ff253aefd62b023d62d91ac4cfe3d6964c7f783b7c8693860172","blockSize":4194304,"blocks":["27636cd6bf77ff253aefd62b023d62d91ac4cfe3d6964c7f783b7c8693860172"]}},"util-map-includes.js":{"size":558,"offset":"30550338","integrity":{"algorithm":"SHA256","hash":"e0fa3819c5583fc5e457d354d01d65ba812f728dc462b43ff624cc1c7320debf","blockSize":4194304,"blocks":["e0fa3819c5583fc5e457d354d01d65ba812f728dc462b43ff624cc1c7320debf"]}}}},"doc":{"files":{"anchors.js":{"size":2387,"offset":"30550896","integrity":{"algorithm":"SHA256","hash":"6a618ede963d894666042cdaa8f23704971e85fb2aeb5f47ba4a4509253af0ce","blockSize":4194304,"blocks":["6a618ede963d894666042cdaa8f23704971e85fb2aeb5f47ba4a4509253af0ce"]}},"applyReviver.js":{"size":1871,"offset":"30553283","integrity":{"algorithm":"SHA256","hash":"2264f8b39534551aa037671d9c176a8da6094bf9f89365857743cef45eae7997","blockSize":4194304,"blocks":["2264f8b39534551aa037671d9c176a8da6094bf9f89365857743cef45eae7997"]}},"createNode.js":{"size":3236,"offset":"30555154","integrity":{"algorithm":"SHA256","hash":"58b4f460b26599422195467ca503762ec7e7190eec9638bf1e1466044d61ab73","blockSize":4194304,"blocks":["58b4f460b26599422195467ca503762ec7e7190eec9638bf1e1466044d61ab73"]}},"directives.js":{"size":6061,"offset":"30558390","integrity":{"algorithm":"SHA256","hash":"804f4591ffdf916a4e3cce7addcaa94d56ed06d78c2c400e6a2078d76e6d7e15","blockSize":4194304,"blocks":["804f4591ffdf916a4e3cce7addcaa94d56ed06d78c2c400e6a2078d76e6d7e15"]}},"Document.js":{"size":12969,"offset":"30564451","integrity":{"algorithm":"SHA256","hash":"61a7102fbca9e27bf9343c92aba9baa3d8d6f8d43bd2897c3fe672ab15d1ae2b","blockSize":4194304,"blocks":["61a7102fbca9e27bf9343c92aba9baa3d8d6f8d43bd2897c3fe672ab15d1ae2b"]}}}},"errors.js":{"size":2111,"offset":"30577420","integrity":{"algorithm":"SHA256","hash":"2268c1c1657c0935cc0d3c947d4052d75c87a8c827ae92f49dbc234027db3a8c","blockSize":4194304,"blocks":["2268c1c1657c0935cc0d3c947d4052d75c87a8c827ae92f49dbc234027db3a8c"]}},"index.js":{"size":1729,"offset":"30579531","integrity":{"algorithm":"SHA256","hash":"4f2e2e40d42e5bfc5c8ee4eddde062e7006b7983cf082058c4bf73272e09cf66","blockSize":4194304,"blocks":["4f2e2e40d42e5bfc5c8ee4eddde062e7006b7983cf082058c4bf73272e09cf66"]}},"log.js":{"size":421,"offset":"30581260","integrity":{"algorithm":"SHA256","hash":"c29fa1fe7ef2a75295298c1498c972f9cc3efe97688deeaa32eca167de35b61d","blockSize":4194304,"blocks":["c29fa1fe7ef2a75295298c1498c972f9cc3efe97688deeaa32eca167de35b61d"]}},"nodes":{"files":{"addPairToJSMap.js":{"size":3964,"offset":"30581681","integrity":{"algorithm":"SHA256","hash":"2530edce0d1f69734c58a303deca34c50ad48b345bbdeb8ab061c311ca23375c","blockSize":4194304,"blocks":["2530edce0d1f69734c58a303deca34c50ad48b345bbdeb8ab061c311ca23375c"]}},"Alias.js":{"size":3161,"offset":"30585645","integrity":{"algorithm":"SHA256","hash":"ca15419bb2e56cfbba9f221520b11e5f3be0f015d98846facdcb5572cceb814c","blockSize":4194304,"blocks":["ca15419bb2e56cfbba9f221520b11e5f3be0f015d98846facdcb5572cceb814c"]}},"Collection.js":{"size":5106,"offset":"30588806","integrity":{"algorithm":"SHA256","hash":"b077498f421efdf394423f3f8f124976f3792762c50a2112556753a3e089c283","blockSize":4194304,"blocks":["b077498f421efdf394423f3f8f124976f3792762c50a2112556753a3e089c283"]}},"Node.js":{"size":2192,"offset":"30593912","integrity":{"algorithm":"SHA256","hash":"27e9968470500643ffcf8bfc4e8870d1aa45a8774c67349beb903270401167c5","blockSize":4194304,"blocks":["27e9968470500643ffcf8bfc4e8870d1aa45a8774c67349beb903270401167c5"]}},"Pair.js":{"size":1294,"offset":"30596104","integrity":{"algorithm":"SHA256","hash":"98229ab9b19287f700e1becd64c2c53c01bc47864d58d689fa1376e216dfbc42","blockSize":4194304,"blocks":["98229ab9b19287f700e1becd64c2c53c01bc47864d58d689fa1376e216dfbc42"]}},"Scalar.js":{"size":757,"offset":"30597398","integrity":{"algorithm":"SHA256","hash":"7aa1ad72528f8be0b41c2e02930588935b326f4e357583ba4c206537da9db1eb","blockSize":4194304,"blocks":["7aa1ad72528f8be0b41c2e02930588935b326f4e357583ba4c206537da9db1eb"]}},"toJS.js":{"size":1323,"offset":"30598155","integrity":{"algorithm":"SHA256","hash":"e26cce3a094dd33bfa74504a3e6e847f41c3ad4437ee23d1616adf1af05f9660","blockSize":4194304,"blocks":["e26cce3a094dd33bfa74504a3e6e847f41c3ad4437ee23d1616adf1af05f9660"]}},"YAMLMap.js":{"size":4194,"offset":"30599478","integrity":{"algorithm":"SHA256","hash":"1d5f42fb1b25e3cf261373ed32898952915330031f3d7edcebfa440181a0b09f","blockSize":4194304,"blocks":["1d5f42fb1b25e3cf261373ed32898952915330031f3d7edcebfa440181a0b09f"]}},"YAMLSeq.js":{"size":3450,"offset":"30603672","integrity":{"algorithm":"SHA256","hash":"1ad7cf3ab57a38cdc62fdaf6214a5ffce02aa289603f1fe4cc4ae409f53324e8","blockSize":4194304,"blocks":["1ad7cf3ab57a38cdc62fdaf6214a5ffce02aa289603f1fe4cc4ae409f53324e8"]}}}},"parse":{"files":{"cst-scalar.js":{"size":9414,"offset":"30607122","integrity":{"algorithm":"SHA256","hash":"c40ad40f895d8ddd455bd8f021fe41e0dc20bb386ccd705dc58cb447880a3d30","blockSize":4194304,"blocks":["c40ad40f895d8ddd455bd8f021fe41e0dc20bb386ccd705dc58cb447880a3d30"]}},"cst-stringify.js":{"size":1799,"offset":"30616536","integrity":{"algorithm":"SHA256","hash":"4d14a7a286cff9c1a578ab15839388ea76f77ae79293db25b235394bcc377b51","blockSize":4194304,"blocks":["4d14a7a286cff9c1a578ab15839388ea76f77ae79293db25b235394bcc377b51"]}},"cst-visit.js":{"size":4074,"offset":"30618335","integrity":{"algorithm":"SHA256","hash":"a94717a78ef75305074a70a9e4f1a35fc4633ce84be345578e0356afa241e81d","blockSize":4194304,"blocks":["a94717a78ef75305074a70a9e4f1a35fc4633ce84be345578e0356afa241e81d"]}},"cst.js":{"size":3242,"offset":"30622409","integrity":{"algorithm":"SHA256","hash":"acc25760d010068844f36f4aefc7fe6f5f6048fd7f8fcc29d4290e154819d1a4","blockSize":4194304,"blocks":["acc25760d010068844f36f4aefc7fe6f5f6048fd7f8fcc29d4290e154819d1a4"]}},"lexer.js":{"size":23521,"offset":"30625651","integrity":{"algorithm":"SHA256","hash":"57896ebdb8205604e3b87090a56e2322e5bedab1e07945726951af724343208f","blockSize":4194304,"blocks":["57896ebdb8205604e3b87090a56e2322e5bedab1e07945726951af724343208f"]}},"line-counter.js":{"size":1445,"offset":"30649172","integrity":{"algorithm":"SHA256","hash":"ddfd11ca2cdd42d36bc6c3090a31c21e6bbcc90bf3498bf6aacfbb30c5d79436","blockSize":4194304,"blocks":["ddfd11ca2cdd42d36bc6c3090a31c21e6bbcc90bf3498bf6aacfbb30c5d79436"]}},"parser.js":{"size":35087,"offset":"30650617","integrity":{"algorithm":"SHA256","hash":"323d6d8c78dbe4110f3b114a81af76a03ca08fccc39f895323637da13fd5f2b4","blockSize":4194304,"blocks":["323d6d8c78dbe4110f3b114a81af76a03ca08fccc39f895323637da13fd5f2b4"]}}}},"public-api.js":{"size":4253,"offset":"30685704","integrity":{"algorithm":"SHA256","hash":"b724650ea5a164d57ffe5fa55be23f48c43e72064c661196d23506fa716376e5","blockSize":4194304,"blocks":["b724650ea5a164d57ffe5fa55be23f48c43e72064c661196d23506fa716376e5"]}},"schema":{"files":{"common":{"files":{"map.js":{"size":1290,"offset":"30689957","integrity":{"algorithm":"SHA256","hash":"bebbabfa9857ee13ead7bdfdbd638386feabeb8e611cc69a3017dac2e0965830","blockSize":4194304,"blocks":["bebbabfa9857ee13ead7bdfdbd638386feabeb8e611cc69a3017dac2e0965830"]}},"null.js":{"size":469,"offset":"30691247","integrity":{"algorithm":"SHA256","hash":"f5d5f694ea3a42ef136e0fbcc674dfd7aa0a3da2b8d62183fb750166a12e52bb","blockSize":4194304,"blocks":["f5d5f694ea3a42ef136e0fbcc674dfd7aa0a3da2b8d62183fb750166a12e52bb"]}},"seq.js":{"size":972,"offset":"30691716","integrity":{"algorithm":"SHA256","hash":"32ef365bd6764dc5490e5ddbe941a40e29907423bca78ad72355a543df34d84b","blockSize":4194304,"blocks":["32ef365bd6764dc5490e5ddbe941a40e29907423bca78ad72355a543df34d84b"]}},"string.js":{"size":457,"offset":"30692688","integrity":{"algorithm":"SHA256","hash":"51d0b3aafab2ffa4ad9d86656a3b92c4b4824d0a8806423882ea5f92a1bf8d11","blockSize":4194304,"blocks":["51d0b3aafab2ffa4ad9d86656a3b92c4b4824d0a8806423882ea5f92a1bf8d11"]}}}},"core":{"files":{"bool.js":{"size":635,"offset":"30693145","integrity":{"algorithm":"SHA256","hash":"9fa696b1efc38cf8c73a398f30d9f9841658aa5afd0b7a6b0822947c3991ba7a","blockSize":4194304,"blocks":["9fa696b1efc38cf8c73a398f30d9f9841658aa5afd0b7a6b0822947c3991ba7a"]}},"float.js":{"size":1504,"offset":"30693780","integrity":{"algorithm":"SHA256","hash":"0543e63e957cb434cfd75ba56494c7006cf48fcd36ccd55cdf2e20049c97deb4","blockSize":4194304,"blocks":["0543e63e957cb434cfd75ba56494c7006cf48fcd36ccd55cdf2e20049c97deb4"]}},"int.js":{"size":1407,"offset":"30695284","integrity":{"algorithm":"SHA256","hash":"f0e474254f6877d5dd23bb57017980931ab333a7eaa3d33872247a80d11f754d","blockSize":4194304,"blocks":["f0e474254f6877d5dd23bb57017980931ab333a7eaa3d33872247a80d11f754d"]}},"schema.js":{"size":509,"offset":"30696691","integrity":{"algorithm":"SHA256","hash":"481d7c64817b40090d519fb65bd83730dadd4c6baec1440b9bf85d29e52c046e","blockSize":4194304,"blocks":["481d7c64817b40090d519fb65bd83730dadd4c6baec1440b9bf85d29e52c046e"]}}}},"json":{"files":{"schema.js":{"size":1898,"offset":"30697200","integrity":{"algorithm":"SHA256","hash":"65f81c86c319135f6338e325ed19bb1263bf44ab9d59ee398ed9c17dc558862c","blockSize":4194304,"blocks":["65f81c86c319135f6338e325ed19bb1263bf44ab9d59ee398ed9c17dc558862c"]}}}},"Schema.js":{"size":1608,"offset":"30699098","integrity":{"algorithm":"SHA256","hash":"2dc254459f971911493da8444d6b6f07fe0bbb0ff15ea6ad921260523110d786","blockSize":4194304,"blocks":["2dc254459f971911493da8444d6b6f07fe0bbb0ff15ea6ad921260523110d786"]}},"tags.js":{"size":2704,"offset":"30700706","integrity":{"algorithm":"SHA256","hash":"dd95749d67f3c3aa7fb9055cdaa608d0d6c83822f7abdb095eb235f985ab31c7","blockSize":4194304,"blocks":["dd95749d67f3c3aa7fb9055cdaa608d0d6c83822f7abdb095eb235f985ab31c7"]}},"yaml-1.1":{"files":{"binary.js":{"size":2638,"offset":"30703410","integrity":{"algorithm":"SHA256","hash":"87b9514dba67f598706a1cf2f47a696a26624df9781887533589a848c73c2d21","blockSize":4194304,"blocks":["87b9514dba67f598706a1cf2f47a696a26624df9781887533589a848c73c2d21"]}},"bool.js":{"size":842,"offset":"30706048","integrity":{"algorithm":"SHA256","hash":"551c1756cc39075c83ae2b97deefb3266d4b710714682aa3430f08dddab2ad1e","blockSize":4194304,"blocks":["551c1756cc39075c83ae2b97deefb3266d4b710714682aa3430f08dddab2ad1e"]}},"float.js":{"size":1616,"offset":"30706890","integrity":{"algorithm":"SHA256","hash":"2027835dd5494116072c7bbb91c98d6b7edd00553084a20a0af58f2592487378","blockSize":4194304,"blocks":["2027835dd5494116072c7bbb91c98d6b7edd00553084a20a0af58f2592487378"]}},"int.js":{"size":2232,"offset":"30708506","integrity":{"algorithm":"SHA256","hash":"5ff72b08fecc3a924d4a76658a304859db5edb4fadf8893ee837aa06bba60a52","blockSize":4194304,"blocks":["5ff72b08fecc3a924d4a76658a304859db5edb4fadf8893ee837aa06bba60a52"]}},"omap.js":{"size":2529,"offset":"30710738","integrity":{"algorithm":"SHA256","hash":"a7cc935c87e30fc5ae05536309923a9054e2e950dcdb4e2f10289abda8abab57","blockSize":4194304,"blocks":["a7cc935c87e30fc5ae05536309923a9054e2e950dcdb4e2f10289abda8abab57"]}},"pairs.js":{"size":2843,"offset":"30713267","integrity":{"algorithm":"SHA256","hash":"f8d16fa642ba528e4478061963e7ff1d5a71aac7bfc1ad442f0de0a7cb13a202","blockSize":4194304,"blocks":["f8d16fa642ba528e4478061963e7ff1d5a71aac7bfc1ad442f0de0a7cb13a202"]}},"schema.js":{"size":860,"offset":"30716110","integrity":{"algorithm":"SHA256","hash":"65fec0662b9b0b6ae8b71392ec1c0649600033187dfa54a3db2eb64f45c38d76","blockSize":4194304,"blocks":["65fec0662b9b0b6ae8b71392ec1c0649600033187dfa54a3db2eb64f45c38d76"]}},"set.js":{"size":2857,"offset":"30716970","integrity":{"algorithm":"SHA256","hash":"5d21b2e795c256457858699eea37f0fb73aec05508b9e204acd7e0ac34dbb7ba","blockSize":4194304,"blocks":["5d21b2e795c256457858699eea37f0fb73aec05508b9e204acd7e0ac34dbb7ba"]}},"timestamp.js":{"size":3783,"offset":"30719827","integrity":{"algorithm":"SHA256","hash":"a15c7434a11dff8fd549082c4a9636f9b7e7a3a19f6c69ee828097920cb59431","blockSize":4194304,"blocks":["a15c7434a11dff8fd549082c4a9636f9b7e7a3a19f6c69ee828097920cb59431"]}}}}}},"stringify":{"files":{"foldFlowLines.js":{"size":4567,"offset":"30723610","integrity":{"algorithm":"SHA256","hash":"a958d7fc27b1bf75c1efa7c3488767c8fd4ae5205a17bef698e9c715fba6eefb","blockSize":4194304,"blocks":["a958d7fc27b1bf75c1efa7c3488767c8fd4ae5205a17bef698e9c715fba6eefb"]}},"stringify.js":{"size":4573,"offset":"30728177","integrity":{"algorithm":"SHA256","hash":"80ffa3c175cf687848bbdb2c0c8954d94b738bab4b00487058688accbeabb001","blockSize":4194304,"blocks":["80ffa3c175cf687848bbdb2c0c8954d94b738bab4b00487058688accbeabb001"]}},"stringifyCollection.js":{"size":5566,"offset":"30732750","integrity":{"algorithm":"SHA256","hash":"6802a1b34f7ff6a85df797ae268241a9e8d3e84a7ba36170fdf83e960055fede","blockSize":4194304,"blocks":["6802a1b34f7ff6a85df797ae268241a9e8d3e84a7ba36170fdf83e960055fede"]}},"stringifyComment.js":{"size":801,"offset":"30738316","integrity":{"algorithm":"SHA256","hash":"490bff57104b7cfdb1893f14528610bb4d0a63c29b314e122233cf308cf96662","blockSize":4194304,"blocks":["490bff57104b7cfdb1893f14528610bb4d0a63c29b314e122233cf308cf96662"]}},"stringifyDocument.js":{"size":3150,"offset":"30739117","integrity":{"algorithm":"SHA256","hash":"f07c091ad5944eff305ce99e7c43dbe2d7ae4d2dd03dcfc827e94f659bbee6eb","blockSize":4194304,"blocks":["f07c091ad5944eff305ce99e7c43dbe2d7ae4d2dd03dcfc827e94f659bbee6eb"]}},"stringifyNumber.js":{"size":748,"offset":"30742267","integrity":{"algorithm":"SHA256","hash":"2c9c304aeed54d212b299a97ab8e141fbb4a78bd87b8a4ab0ff45aa10de38026","blockSize":4194304,"blocks":["2c9c304aeed54d212b299a97ab8e141fbb4a78bd87b8a4ab0ff45aa10de38026"]}},"stringifyPair.js":{"size":4596,"offset":"30743015","integrity":{"algorithm":"SHA256","hash":"d3ab476294e642a49e6e3d217ba38318ccf7f101693709e7dbcc60249bbe7c6f","blockSize":4194304,"blocks":["d3ab476294e642a49e6e3d217ba38318ccf7f101693709e7dbcc60249bbe7c6f"]}},"stringifyString.js":{"size":12666,"offset":"30747611","integrity":{"algorithm":"SHA256","hash":"56ae2060aa4431b19c2616f4a40aba17e336388ab7970d969eefa26ac11a0bc1","blockSize":4194304,"blocks":["56ae2060aa4431b19c2616f4a40aba17e336388ab7970d969eefa26ac11a0bc1"]}}}},"test-events.js":{"size":4364,"offset":"30760277","integrity":{"algorithm":"SHA256","hash":"ab879970c4a39b2c9b386b208b9ba2d10de257d18e36aebc8df0177b647fd5d1","blockSize":4194304,"blocks":["ab879970c4a39b2c9b386b208b9ba2d10de257d18e36aebc8df0177b647fd5d1"]}},"util.js":{"size":838,"offset":"30764641","integrity":{"algorithm":"SHA256","hash":"3d46b4c3f04d19e9586b17c029a403bc6d118875fb9a304fbf99d93dbbdbe3d4","blockSize":4194304,"blocks":["3d46b4c3f04d19e9586b17c029a403bc6d118875fb9a304fbf99d93dbbdbe3d4"]}},"visit.js":{"size":9492,"offset":"30765479","integrity":{"algorithm":"SHA256","hash":"2cbab49a348567c5f8535504e6c87babf694193d15278fb89e50158ff8fcf25a","blockSize":4194304,"blocks":["2cbab49a348567c5f8535504e6c87babf694193d15278fb89e50158ff8fcf25a"]}}}},"LICENSE":{"size":738,"offset":"30774971","integrity":{"algorithm":"SHA256","hash":"5bba27375d93e9119f76c1015f7672cf9ad5f70952296e0842fb2243d6376869","blockSize":4194304,"blocks":["5bba27375d93e9119f76c1015f7672cf9ad5f70952296e0842fb2243d6376869"]}},"package.json":{"size":1851,"offset":"30775709","integrity":{"algorithm":"SHA256","hash":"1546344abbc9452ff009c9af53758df707578d2ae940294fba9ca1f5210b5d4f","blockSize":4194304,"blocks":["1546344abbc9452ff009c9af53758df707578d2ae940294fba9ca1f5210b5d4f"]}},"util.js":{"size":80,"offset":"30777560","integrity":{"algorithm":"SHA256","hash":"2f1db26f6cc426ef698210b592f40cec49be1b6c4b34e7f2d61904786242bd85","blockSize":4194304,"blocks":["2f1db26f6cc426ef698210b592f40cec49be1b6c4b34e7f2d61904786242bd85"]}}}},"yargs":{"files":{"index.js":{"size":860,"offset":"30807652","integrity":{"algorithm":"SHA256","hash":"db4466f9296f3eef86a3806ca004a03619f0186d606c499f9419842b77b36115","blockSize":4194304,"blocks":["db4466f9296f3eef86a3806ca004a03619f0186d606c499f9419842b77b36115"]}},"lib":{"files":{"apply-extends.js":{"size":1488,"offset":"30808512","integrity":{"algorithm":"SHA256","hash":"d475e451ec86dff19034dd5ef471a05b0502988ef4b3a8d8a6401c34fd721cd8","blockSize":4194304,"blocks":["d475e451ec86dff19034dd5ef471a05b0502988ef4b3a8d8a6401c34fd721cd8"]}},"argsert.js":{"size":2416,"offset":"30810000","integrity":{"algorithm":"SHA256","hash":"e5341d74bc0a71a72867b8d6e3d13f6ee51accbb54961aefe836cff2704557eb","blockSize":4194304,"blocks":["e5341d74bc0a71a72867b8d6e3d13f6ee51accbb54961aefe836cff2704557eb"]}},"command.js":{"size":14958,"offset":"30812416","integrity":{"algorithm":"SHA256","hash":"2aa41a348a05722b43896b006a382ec029e23598ea48ba6d749764ab214f0b12","blockSize":4194304,"blocks":["2aa41a348a05722b43896b006a382ec029e23598ea48ba6d749764ab214f0b12"]}},"completion-templates.js":{"size":1381,"offset":"30827374","integrity":{"algorithm":"SHA256","hash":"1850c60bb984e8638e35ebac8b04deeb8d71615f522221773e9206a49ee806df","blockSize":4194304,"blocks":["1850c60bb984e8638e35ebac8b04deeb8d71615f522221773e9206a49ee806df"]}},"completion.js":{"size":3905,"offset":"30828755","integrity":{"algorithm":"SHA256","hash":"14dd61bf6c141a51c0065f9f6d2b0359cf108d54f6214598208c932d3b607b46","blockSize":4194304,"blocks":["14dd61bf6c141a51c0065f9f6d2b0359cf108d54f6214598208c932d3b607b46"]}},"decamelize.js":{"size":1385,"offset":"30832660","integrity":{"algorithm":"SHA256","hash":"4d00607543032f94238f228d6d7364b287f87227ad403ad1574cdfa4f0416100","blockSize":4194304,"blocks":["4d00607543032f94238f228d6d7364b287f87227ad403ad1574cdfa4f0416100"]}},"is-promise.js":{"size":96,"offset":"30834045","integrity":{"algorithm":"SHA256","hash":"2e801ef9f28639ebd4586c750c266bbdf0ed9b084f13c3e5cb99d92dfe27f31a","blockSize":4194304,"blocks":["2e801ef9f28639ebd4586c750c266bbdf0ed9b084f13c3e5cb99d92dfe27f31a"]}},"levenshtein.js":{"size":2121,"offset":"30834141","integrity":{"algorithm":"SHA256","hash":"ea4b6861abd3f6a5305f274052fd98fd7fe1e3c83bd68ea3069708193c026440","blockSize":4194304,"blocks":["ea4b6861abd3f6a5305f274052fd98fd7fe1e3c83bd68ea3069708193c026440"]}},"middleware.js":{"size":2201,"offset":"30836262","integrity":{"algorithm":"SHA256","hash":"1dc40f0f7a22da8b8ae1c1399e3b2993372ea9fdbd23c33530d0e5155b9d6f27","blockSize":4194304,"blocks":["1dc40f0f7a22da8b8ae1c1399e3b2993372ea9fdbd23c33530d0e5155b9d6f27"]}},"obj-filter.js":{"size":269,"offset":"30838463","integrity":{"algorithm":"SHA256","hash":"9184dc83a84c652da1c592b3245509521171c9d4c52c6c5edbc5544dc0527a42","blockSize":4194304,"blocks":["9184dc83a84c652da1c592b3245509521171c9d4c52c6c5edbc5544dc0527a42"]}},"usage.js":{"size":15500,"offset":"30838732","integrity":{"algorithm":"SHA256","hash":"890e16773e73975440288a9be0a540bcb46b231b439374e3012a82ec426f82a1","blockSize":4194304,"blocks":["890e16773e73975440288a9be0a540bcb46b231b439374e3012a82ec426f82a1"]}},"validation.js":{"size":10083,"offset":"30854232","integrity":{"algorithm":"SHA256","hash":"b17705bcd2f27209c3cd04fd92b3dcd23f90247b28592cfa0924094a2bdd401d","blockSize":4194304,"blocks":["b17705bcd2f27209c3cd04fd92b3dcd23f90247b28592cfa0924094a2bdd401d"]}},"yerror.js":{"size":254,"offset":"30864315","integrity":{"algorithm":"SHA256","hash":"af993c92d4df6bb3bc1cf8de4cc886196b451c4456bd0f6e9f7702f39ee940de","blockSize":4194304,"blocks":["af993c92d4df6bb3bc1cf8de4cc886196b451c4456bd0f6e9f7702f39ee940de"]}}}},"LICENSE":{"size":1199,"offset":"30864569","integrity":{"algorithm":"SHA256","hash":"fe71524a15f30aab0f39af7165d38fc64a4269b7d2a0caffebc907355aec9c92","blockSize":4194304,"blocks":["fe71524a15f30aab0f39af7165d38fc64a4269b7d2a0caffebc907355aec9c92"]}},"locales":{"files":{"be.json":{"size":2258,"offset":"30865768","integrity":{"algorithm":"SHA256","hash":"e101ceedc8a5fe52ab7e31e784e9981f514c90c24fbf7f7d6b2ed2343127aaf5","blockSize":4194304,"blocks":["e101ceedc8a5fe52ab7e31e784e9981f514c90c24fbf7f7d6b2ed2343127aaf5"]}},"de.json":{"size":1568,"offset":"30868026","integrity":{"algorithm":"SHA256","hash":"ee014e12a3290edce634fe469b4507925af032c6c1453e29d5701e77d078fca8","blockSize":4194304,"blocks":["ee014e12a3290edce634fe469b4507925af032c6c1453e29d5701e77d078fca8"]}},"en.json":{"size":1648,"offset":"30869594","integrity":{"algorithm":"SHA256","hash":"024067cc5e29a11dcb81224422eed2664a83f7ad851bcf50cd622685ca8266ff","blockSize":4194304,"blocks":["024067cc5e29a11dcb81224422eed2664a83f7ad851bcf50cd622685ca8266ff"]}},"es.json":{"size":1639,"offset":"30871242","integrity":{"algorithm":"SHA256","hash":"54af51247df89a319cd5f57f9c60fc90c0ff2b17ad55f1b971ea83286276b786","blockSize":4194304,"blocks":["54af51247df89a319cd5f57f9c60fc90c0ff2b17ad55f1b971ea83286276b786"]}},"fr.json":{"size":1511,"offset":"30872881","integrity":{"algorithm":"SHA256","hash":"6097eb66d064a5a204ed2d2f687b01bff8473c1891531fa6a58fe79810cf3100","blockSize":4194304,"blocks":["6097eb66d064a5a204ed2d2f687b01bff8473c1891531fa6a58fe79810cf3100"]}},"hi.json":{"size":2645,"offset":"30874392","integrity":{"algorithm":"SHA256","hash":"d54f00659e8af714ab72e213ec33d432037ec61f3023da4a9ce7a511a649c34d","blockSize":4194304,"blocks":["d54f00659e8af714ab72e213ec33d432037ec61f3023da4a9ce7a511a649c34d"]}},"hu.json":{"size":1653,"offset":"30877037","integrity":{"algorithm":"SHA256","hash":"b1c5d51f31d5d2e06afe07ef72994754de09998d938d35da994c71f82faa28c8","blockSize":4194304,"blocks":["b1c5d51f31d5d2e06afe07ef72994754de09998d938d35da994c71f82faa28c8"]}},"id.json":{"size":1639,"offset":"30878690","integrity":{"algorithm":"SHA256","hash":"5e7e25a8005a080d6eaf0c3f57d7f8bcd23e665c8b8d65253e5b5d559d275e0b","blockSize":4194304,"blocks":["5e7e25a8005a080d6eaf0c3f57d7f8bcd23e665c8b8d65253e5b5d559d275e0b"]}},"it.json":{"size":1617,"offset":"30880329","integrity":{"algorithm":"SHA256","hash":"391cc753dc1791545e3a7a3c09fec65efe9c634e2a2097776fa2be18edf172e7","blockSize":4194304,"blocks":["391cc753dc1791545e3a7a3c09fec65efe9c634e2a2097776fa2be18edf172e7"]}},"ja.json":{"size":2030,"offset":"30881946","integrity":{"algorithm":"SHA256","hash":"f44d2e00c60a696e5aa83d59d6c20c1aa6fff0b0aee8c92fadc24b1f9ab092a9","blockSize":4194304,"blocks":["f44d2e00c60a696e5aa83d59d6c20c1aa6fff0b0aee8c92fadc24b1f9ab092a9"]}},"ko.json":{"size":1964,"offset":"30883976","integrity":{"algorithm":"SHA256","hash":"164d7c347b6a31fdc58dd71a39231bfd25a3d242f052ace5510791cc88112c80","blockSize":4194304,"blocks":["164d7c347b6a31fdc58dd71a39231bfd25a3d242f052ace5510791cc88112c80"]}},"nb.json":{"size":1467,"offset":"30885940","integrity":{"algorithm":"SHA256","hash":"d25ce1efb4570c36dace07ac87eadb04203db5208044c13417bf453e4d9a9581","blockSize":4194304,"blocks":["d25ce1efb4570c36dace07ac87eadb04203db5208044c13417bf453e4d9a9581"]}},"nl.json":{"size":1742,"offset":"30887407","integrity":{"algorithm":"SHA256","hash":"be1c9c43e3ca5845d8ec5922ab1d6a871dff6878501ba8a121fbdb99f114fe52","blockSize":4194304,"blocks":["be1c9c43e3ca5845d8ec5922ab1d6a871dff6878501ba8a121fbdb99f114fe52"]}},"nn.json":{"size":1459,"offset":"30889149","integrity":{"algorithm":"SHA256","hash":"dbface91834397a7033bc3a24b7926d514a350462535ae8ec05c1e7bd73341f7","blockSize":4194304,"blocks":["dbface91834397a7033bc3a24b7926d514a350462535ae8ec05c1e7bd73341f7"]}},"pirate.json":{"size":569,"offset":"30890608","integrity":{"algorithm":"SHA256","hash":"0e66add12f48117254852ebac22250ad18bbc859b5de40301dd047800be40e36","blockSize":4194304,"blocks":["0e66add12f48117254852ebac22250ad18bbc859b5de40301dd047800be40e36"]}},"pl.json":{"size":1835,"offset":"30891177","integrity":{"algorithm":"SHA256","hash":"b4bb9ccff921197d4415d743750fa15e8a0db171dd315141ecd8ab6d8f8b12db","blockSize":4194304,"blocks":["b4bb9ccff921197d4415d743750fa15e8a0db171dd315141ecd8ab6d8f8b12db"]}},"pt_BR.json":{"size":1750,"offset":"30893012","integrity":{"algorithm":"SHA256","hash":"c0b61ac8ef4b402ff0c8382c46a1fad3e21983ea78871c45533422cf16403321","blockSize":4194304,"blocks":["c0b61ac8ef4b402ff0c8382c46a1fad3e21983ea78871c45533422cf16403321"]}},"pt.json":{"size":1681,"offset":"30894762","integrity":{"algorithm":"SHA256","hash":"24581e1ce3b4e277291531ec609906748fb5c9ecee6b4816984fbd5ece65b5f9","blockSize":4194304,"blocks":["24581e1ce3b4e277291531ec609906748fb5c9ecee6b4816984fbd5ece65b5f9"]}},"ru.json":{"size":2326,"offset":"30896443","integrity":{"algorithm":"SHA256","hash":"1ff1339e9cfee663c48d7e411110cd3992216d81e7b5a5a72c4443d51f0634a7","blockSize":4194304,"blocks":["1ff1339e9cfee663c48d7e411110cd3992216d81e7b5a5a72c4443d51f0634a7"]}},"th.json":{"size":2704,"offset":"30898769","integrity":{"algorithm":"SHA256","hash":"963d94b3e74332f07002d15a346ba14a69c3eeafbf139d54a7b43fa462116145","blockSize":4194304,"blocks":["963d94b3e74332f07002d15a346ba14a69c3eeafbf139d54a7b43fa462116145"]}},"tr.json":{"size":1687,"offset":"30901473","integrity":{"algorithm":"SHA256","hash":"ba6f0f262b0b5912a578dbbc703d341ba1b50cc83b9fe1b111ecbcf3389ef2ec","blockSize":4194304,"blocks":["ba6f0f262b0b5912a578dbbc703d341ba1b50cc83b9fe1b111ecbcf3389ef2ec"]}},"zh_CN.json":{"size":1686,"offset":"30903160","integrity":{"algorithm":"SHA256","hash":"a1f0d24daac7a58afe6fcaef8520c6fbc4baebed03648637646042a3281d1f99","blockSize":4194304,"blocks":["a1f0d24daac7a58afe6fcaef8520c6fbc4baebed03648637646042a3281d1f99"]}},"zh_TW.json":{"size":1614,"offset":"30904846","integrity":{"algorithm":"SHA256","hash":"6d2e3750e1e7f4b73b6944e5a22cee98d00edc94227eb09d0bdff18b9a38ac12","blockSize":4194304,"blocks":["6d2e3750e1e7f4b73b6944e5a22cee98d00edc94227eb09d0bdff18b9a38ac12"]}}}},"node_modules":{"files":{"ansi-regex":{"files":{"index.js":{"size":367,"offset":"30906460","integrity":{"algorithm":"SHA256","hash":"b03490694d3582453bf41972298bd018f39886a72d895db6d5f98ee057462c62","blockSize":4194304,"blocks":["b03490694d3582453bf41972298bd018f39886a72d895db6d5f98ee057462c62"]}},"license":{"size":1109,"offset":"30906827","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":432,"offset":"30907936","integrity":{"algorithm":"SHA256","hash":"8d03c44ad44ae4daa3031bfe40212da65d008106563ce8d4f1daa6d96640515f","blockSize":4194304,"blocks":["8d03c44ad44ae4daa3031bfe40212da65d008106563ce8d4f1daa6d96640515f"]}}}},"emoji-regex":{"files":{"es2015":{"files":{"index.js":{"size":8143,"offset":"30908368","integrity":{"algorithm":"SHA256","hash":"ed2d085cd3fd0d43e559eab9d22118de16f08c863e41c90b922acb555eb7b0f8","blockSize":4194304,"blocks":["ed2d085cd3fd0d43e559eab9d22118de16f08c863e41c90b922acb555eb7b0f8"]}},"text.js":{"size":8144,"offset":"30916511","integrity":{"algorithm":"SHA256","hash":"12542e6fc4fbde51eda89fb7a1fd6d18a0ab313949220cb6020651ea323e1d2b","blockSize":4194304,"blocks":["12542e6fc4fbde51eda89fb7a1fd6d18a0ab313949220cb6020651ea323e1d2b"]}}}},"index.js":{"size":7391,"offset":"30924655","integrity":{"algorithm":"SHA256","hash":"b3e5150678165453f96401e87c1032999a5dd16a9c73c2269123c82b7fdf9fb2","blockSize":4194304,"blocks":["b3e5150678165453f96401e87c1032999a5dd16a9c73c2269123c82b7fdf9fb2"]}},"LICENSE-MIT.txt":{"size":1077,"offset":"30932046","integrity":{"algorithm":"SHA256","hash":"483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a","blockSize":4194304,"blocks":["483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a"]}},"package.json":{"size":882,"offset":"30933123","integrity":{"algorithm":"SHA256","hash":"1798b10a412d441adb3ab52fa3e6cd684cebb9d603d586df3b9dda1e21dd7d7e","blockSize":4194304,"blocks":["1798b10a412d441adb3ab52fa3e6cd684cebb9d603d586df3b9dda1e21dd7d7e"]}},"text.js":{"size":7392,"offset":"30934005","integrity":{"algorithm":"SHA256","hash":"6b19501c953416f4de375a9485b53c3d8fcc29036140c6fe2ea82db8117b562c","blockSize":4194304,"blocks":["6b19501c953416f4de375a9485b53c3d8fcc29036140c6fe2ea82db8117b562c"]}}}},"is-fullwidth-code-point":{"files":{"index.js":{"size":1393,"offset":"30941397","integrity":{"algorithm":"SHA256","hash":"bc9e2fb309b067655b6abbb764941ac48014366a3662db209cf0e9d0a4db54dd","blockSize":4194304,"blocks":["bc9e2fb309b067655b6abbb764941ac48014366a3662db209cf0e9d0a4db54dd"]}},"license":{"size":1119,"offset":"30942790","integrity":{"algorithm":"SHA256","hash":"6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c","blockSize":4194304,"blocks":["6fb9754611c20f6649f68805e8c990e83261f29316e29de9e6cedae607b8634c"]}},"package.json":{"size":481,"offset":"30943909","integrity":{"algorithm":"SHA256","hash":"48ff861924fc1250248e43bf2d2cbe2cbd36fada039f8766943ba0d5713d5858","blockSize":4194304,"blocks":["48ff861924fc1250248e43bf2d2cbe2cbd36fada039f8766943ba0d5713d5858"]}}}},"string-width":{"files":{"index.js":{"size":751,"offset":"30944390","integrity":{"algorithm":"SHA256","hash":"85747e89f4c8eecc82130834c3fade5dcb1ead57c3ed779088bb3f9bd7af0262","blockSize":4194304,"blocks":["85747e89f4c8eecc82130834c3fade5dcb1ead57c3ed779088bb3f9bd7af0262"]}},"license":{"size":1109,"offset":"30945141","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":594,"offset":"30946250","integrity":{"algorithm":"SHA256","hash":"2f8338a2258a645bd57d6111d948cd4e5a4fe75bad5b9e71cdbb6fd9a0714f9d","blockSize":4194304,"blocks":["2f8338a2258a645bd57d6111d948cd4e5a4fe75bad5b9e71cdbb6fd9a0714f9d"]}}}},"strip-ansi":{"files":{"index.js":{"size":220,"offset":"30946844","integrity":{"algorithm":"SHA256","hash":"586d0220463526ec46abd9a458e4c946124f9df915b97817fc2f49cdf6cd5101","blockSize":4194304,"blocks":["586d0220463526ec46abd9a458e4c946124f9df915b97817fc2f49cdf6cd5101"]}},"license":{"size":1109,"offset":"30947064","integrity":{"algorithm":"SHA256","hash":"48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0","blockSize":4194304,"blocks":["48da2f39e100d4085767e94966b43f4fa95ff6a0698fba57ed460914e35f94a0"]}},"package.json":{"size":516,"offset":"30948173","integrity":{"algorithm":"SHA256","hash":"73c93bc996f839339ef97fa378fb93cebad6698f0d1d1bd9b96f3e340ddc9318","blockSize":4194304,"blocks":["73c93bc996f839339ef97fa378fb93cebad6698f0d1d1bd9b96f3e340ddc9318"]}}}}}},"package.json":{"size":1249,"offset":"30948689","integrity":{"algorithm":"SHA256","hash":"9ea2d641c770973460d431e843293cb11920d74dc71ce6e74428b077032e6b04","blockSize":4194304,"blocks":["9ea2d641c770973460d431e843293cb11920d74dc71ce6e74428b077032e6b04"]}},"yargs.js":{"size":37483,"offset":"30949938","integrity":{"algorithm":"SHA256","hash":"6733500ae22a1b79a2483c3713e6393aae5cbbee457c3ee19160f2b4eb86e955","blockSize":4194304,"blocks":["6733500ae22a1b79a2483c3713e6393aae5cbbee457c3ee19160f2b4eb86e955"]}}}},"yargs-parser":{"files":{"index.js":{"size":27820,"offset":"30777640","integrity":{"algorithm":"SHA256","hash":"bd440915375300a39ad80b5b1345968cefd2f323ae06d5b716d947304e7f8566","blockSize":4194304,"blocks":["bd440915375300a39ad80b5b1345968cefd2f323ae06d5b716d947304e7f8566"]}},"lib":{"files":{"tokenize-arg-string.js":{"size":854,"offset":"30805460","integrity":{"algorithm":"SHA256","hash":"fdd31f7ca3601a254e138e3ceb338bafe76880769e179a090d2631864daad676","blockSize":4194304,"blocks":["fdd31f7ca3601a254e138e3ceb338bafe76880769e179a090d2631864daad676"]}}}},"LICENSE.txt":{"size":731,"offset":"30806314","integrity":{"algorithm":"SHA256","hash":"365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d","blockSize":4194304,"blocks":["365496ca1f56da40b23c9815fc40fa9005847b2f8f8fd1c1a4929ef25ec8cd1d"]}},"package.json":{"size":607,"offset":"30807045","integrity":{"algorithm":"SHA256","hash":"9311ab17646ba86723abc469b76ab650591ac27addbf3c0165d6beb44acc4d72","blockSize":4194304,"blocks":["9311ab17646ba86723abc469b76ab650591ac27addbf3c0165d6beb44acc4d72"]}}}},"ylru":{"files":{"History.md":{"size":443,"offset":"30987421","integrity":{"algorithm":"SHA256","hash":"fa25b784a8d294e071e29eac4d71a70d184455e219dde7a69324f351049e28be","blockSize":4194304,"blocks":["fa25b784a8d294e071e29eac4d71a70d184455e219dde7a69324f351049e28be"]}},"index.js":{"size":2337,"offset":"30987864","integrity":{"algorithm":"SHA256","hash":"dc49cde1a1c88082b63edacafe7f707dce8f8d2730e60233081313be25bbf58d","blockSize":4194304,"blocks":["dc49cde1a1c88082b63edacafe7f707dce8f8d2730e60233081313be25bbf58d"]}},"LICENSE":{"size":1090,"offset":"30990201","integrity":{"algorithm":"SHA256","hash":"015d479d4f084ecf7ef4fd753d3eb7e37e42c690076678a72a1358e091465643","blockSize":4194304,"blocks":["015d479d4f084ecf7ef4fd753d3eb7e37e42c690076678a72a1358e091465643"]}},"package.json":{"size":655,"offset":"30991291","integrity":{"algorithm":"SHA256","hash":"caaa7da926aaa505061f3699e851e0246761bc48ec9e454ee4e53df8777cbe3b","blockSize":4194304,"blocks":["caaa7da926aaa505061f3699e851e0246761bc48ec9e454ee4e53df8777cbe3b"]}}}}}},"package.json":{"size":1248,"offset":"30991946","integrity":{"algorithm":"SHA256","hash":"55f3f3ff92626ccf38c7c2085c8b3635cc1e374432cd2fbe06f3f34d343e54f0","blockSize":4194304,"blocks":["55f3f3ff92626ccf38c7c2085c8b3635cc1e374432cd2fbe06f3f34d343e54f0"]}}}}   Copyright (c) Electron contributors
Copyright (c) 2013-2020 GitHub Inc.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Disclaimer Statement
1. This software is only intended for the purpose of learning and researching network technology. Users must comply with the laws and regulations in their respective regions and must not use it for illegal purposes. The software will not be held responsible for any actions of the user.

2. Users must strictly abide by the laws, regulations, and policies of their own countries/regions when using this software. Any consequences or liabilities resulting from violations of relevant laws, regulations, and policies shall be borne by the user.

3. The software is not responsible for the transmission of content. Therefore, if any problems or consequences arise from the use of this software, the user shall bear all responsibility.

4. If the software violates any laws and regulations of the user's country/region, the user must immediately stop using it and bear the corresponding legal responsibility.

5. While using this software, the user acknowledges and agrees that the software cannot guarantee network stability, accuracy, timeliness, and security. The software will not be held responsible for any connection problems or inability to connect caused by network congestion, firewall restrictions, DNS pollution, operator interference, and other reasons.

6. The software does not provide technical support and is not responsible for any direct or indirect losses caused by the user's use of this software, including but not limited to property damage, data loss, and other forms of loss.


Links
Official Link: https://github.com/Fndroid/clash_for_windows_pkg
CFW Chinese version link: https://github.com/Z-Siqi/Clash-for-Windows_Chinese"use strict";(global.webpackChunkclash_win=global.webpackChunkclash_win||[]).push([[287],{37287:(e,n,s)=>{s.r(n),s.d(n,{conf:()=>r,language:()=>i});var t=s(89587),r={comments:{lineComment:"#",blockComment:["'''","'''"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],onEnterRules:[{beforeText:new RegExp("^\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async).*?:\\s*$"),action:{indentAction:t.Mj.IndentAction.Indent}}],folding:{offSide:!0,markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},i={defaultToken:"",tokenPostfix:".python",keywords:["False","None","True","and","as","assert","async","await","break","class","continue","def","del","elif","else","except","exec","finally","for","from","global","if","import","in","is","lambda","nonlocal","not","or","pass","print","raise","return","try","while","with","yield","int","float","long","complex","hex","abs","all","any","apply","basestring","bin","bool","buffer","bytearray","callable","chr","classmethod","cmp","coerce","compile","complex","delattr","dict","dir","divmod","enumerate","eval","execfile","file","filter","format","frozenset","getattr","globals","hasattr","hash","help","id","input","intern","isinstance","issubclass","iter","len","locals","list","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","reversed","range","raw_input","reduce","reload","repr","reversed","round","self","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","unichr","unicode","vars","xrange","zip","__dict__","__methods__","__members__","__class__","__bases__","__name__","__mro__","__subclasses__","__init__","__import__"],brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"}],tokenizer:{root:[{include:"@whitespace"},{include:"@numbers"},{include:"@strings"},[/[,:;]/,"delimiter"],[/[{}\[\]()]/,"@brackets"],[/@[a-zA-Z_]\w*/,"tag"],[/[a-zA-Z_]\w*/,{cases:{"@keywords":"keyword","@default":"identifier"}}]],whitespace:[[/\s+/,"white"],[/(^#.*$)/,"comment"],[/'''/,"string","@endDocString"],[/"""/,"string","@endDblDocString"]],endDocString:[[/[^']+/,"string"],[/\\'/,"string"],[/'''/,"string","@popall"],[/'/,"string"]],endDblDocString:[[/[^"]+/,"string"],[/\\"/,"string"],[/"""/,"string","@popall"],[/"/,"string"]],numbers:[[/-?0x([abcdef]|[ABCDEF]|\d)+[lL]?/,"number.hex"],[/-?(\d*\.)?\d+([eE][+\-]?\d+)?[jJ]?[lL]?/,"number"]],strings:[[/'$/,"string.escape","@popall"],[/'/,"string.escape","@stringBody"],[/"$/,"string.escape","@popall"],[/"/,"string.escape","@dblStringBody"]],stringBody:[[/[^\\']+$/,"string","@popall"],[/[^\\']+/,"string"],[/\\./,"string"],[/'/,"string.escape","@popall"],[/\\$/,"string"]],dblStringBody:[[/[^\\"]+$/,"string","@popall"],[/[^\\"]+/,"string"],[/\\./,"string"],[/"/,"string.escape","@popall"],[/\\$/,"string"]]}}}}]);"use strict";(global.webpackChunkclash_win=global.webpackChunkclash_win||[]).push([[295],{62295:(e,t,n)=>{n.r(t),n.d(t,{conf:()=>s,language:()=>r});var o=n(89587),i={defaultToken:"invalid",tokenPostfix:".ts",keywords:["abstract","any","as","asserts","bigint","boolean","break","case","catch","class","continue","const","constructor","debugger","declare","default","delete","do","else","enum","export","extends","false","finally","for","from","function","get","if","implements","import","in","infer","instanceof","interface","is","keyof","let","module","namespace","never","new","null","number","object","package","private","protected","public","override","readonly","require","global","return","set","static","string","super","switch","symbol","this","throw","true","try","type","typeof","undefined","unique","unknown","var","void","while","with","yield","async","await","of"],operators:["<=",">=","==","!=","===","!==","=>","+","-","**","*","/","%","++","--","<<","</",">>",">>>","&","|","^","!","~","&&","||","??","?",":","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=","@"],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,regexpctl:/[(){}\[\]\$\^|\-*+?\.]/,regexpesc:/\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:{root:[[/[{}]/,"delimiter.bracket"],{include:"common"}],common:[[/[a-z_$][\w$]*/,{cases:{"@keywords":"keyword","@default":"identifier"}}],[/[A-Z][\w\$]*/,"type.identifier"],{include:"@whitespace"},[/\/(?=([^\\\/]|\\.)+\/([dgimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/,{token:"regexp",bracket:"@open",next:"@regexp"}],[/[()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/!(?=([^=]|$))/,"delimiter"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,"number.float"],[/0[xX](@hexdigits)n?/,"number.hex"],[/0[oO]?(@octaldigits)n?/,"number.octal"],[/0[bB](@binarydigits)n?/,"number.binary"],[/(@digits)n?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],[/`/,"string","@string_backtick"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@jsdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],jsdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/,["regexp.escape.control","regexp.escape.control"]],[/[()]/,"regexp.escape.control"],[/@regexpctl/,"regexp.escape.control"],[/[^\\\/]/,"regexp"],[/@regexpesc/,"regexp.escape"],[/\\\./,"regexp.invalid"],[/(\/)([dgimsuy]*)/,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/,"regexp.escape.control"],[/\^/,"regexp.invalid"],[/@regexpesc/,"regexp.escape"],[/[^\]]/,"regexp"],[/\]/,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]],string_backtick:[[/\$\{/,{token:"delimiter.bracket",next:"@bracketCounting"}],[/[^\\`$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/`/,"string","@pop"]],bracketCounting:[[/\{/,"delimiter.bracket","@bracketCounting"],[/\}/,"delimiter.bracket","@pop"],{include:"common"}]}},s={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:o.Mj.IndentAction.IndentOutdent,appendText:" * "}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:o.Mj.IndentAction.None,appendText:" * "}},{beforeText:/^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:o.Mj.IndentAction.None,appendText:"* "}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:o.Mj.IndentAction.None,removeText:1}}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"',notIn:["string"]},{open:"'",close:"'",notIn:["string","comment"]},{open:"`",close:"`",notIn:["string","comment"]},{open:"/**",close:" */",notIn:["string"]}],folding:{markers:{start:new RegExp("^\\s*//\\s*#?region\\b"),end:new RegExp("^\\s*//\\s*#?endregion\\b")}}},r={defaultToken:"invalid",tokenPostfix:".js",keywords:["break","case","catch","class","continue","const","constructor","debugger","default","delete","do","else","export","extends","false","finally","for","from","function","get","if","import","in","instanceof","let","new","null","return","set","super","switch","symbol","this","throw","true","try","typeof","undefined","var","void","while","with","yield","async","await","of"],typeKeywords:[],operators:i.operators,symbols:i.symbols,escapes:i.escapes,digits:i.digits,octaldigits:i.octaldigits,binarydigits:i.binarydigits,hexdigits:i.hexdigits,regexpctl:i.regexpctl,regexpesc:i.regexpesc,tokenizer:i.tokenizer}}}]);"use strict";(global.webpackChunkclash_win=global.webpackChunkclash_win||[]).push([[585],{23585:(e,n,t)=>{t.r(n),t.d(n,{conf:()=>r,language:()=>o});var r={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{offSide:!0}},o={tokenPostfix:".yaml",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.square",open:"[",close:"]"}],keywords:["true","True","TRUE","false","False","FALSE","null","Null","Null","~"],numberInteger:/(?:0|[+-]?[0-9]+)/,numberFloat:/(?:0|[+-]?[0-9]+)(?:\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,numberOctal:/0o[0-7]+/,numberHex:/0x[0-9a-fA-F]+/,numberInfinity:/[+-]?\.(?:inf|Inf|INF)/,numberNaN:/\.(?:nan|Nan|NAN)/,numberDate:/\d{4}-\d\d-\d\d([Tt ]\d\d:\d\d:\d\d(\.\d+)?(( ?[+-]\d\d?(:\d\d)?)|Z)?)?/,escapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,tokenizer:{root:[{include:"@whitespace"},{include:"@comment"},[/%[^ ]+.*$/,"meta.directive"],[/---/,"operators.directivesEnd"],[/\.{3}/,"operators.documentEnd"],[/[-?:](?= )/,"operators"],{include:"@anchor"},{include:"@tagHandle"},{include:"@flowCollections"},{include:"@blockStyle"},[/@numberInteger(?![ \t]*\S+)/,"number"],[/@numberFloat(?![ \t]*\S+)/,"number.float"],[/@numberOctal(?![ \t]*\S+)/,"number.octal"],[/@numberHex(?![ \t]*\S+)/,"number.hex"],[/@numberInfinity(?![ \t]*\S+)/,"number.infinity"],[/@numberNaN(?![ \t]*\S+)/,"number.nan"],[/@numberDate(?![ \t]*\S+)/,"number.date"],[/(".*?"|'.*?'|.*?)([ \t]*)(:)( |$)/,["type","white","operators","white"]],{include:"@flowScalars"},[/[^#]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],object:[{include:"@whitespace"},{include:"@comment"},[/\}/,"@brackets","@pop"],[/,/,"delimiter.comma"],[/:(?= )/,"operators"],[/(?:".*?"|'.*?'|[^,\{\[]+?)(?=: )/,"type"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\},]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],array:[{include:"@whitespace"},{include:"@comment"},[/\]/,"@brackets","@pop"],[/,/,"delimiter.comma"],{include:"@flowCollections"},{include:"@flowScalars"},{include:"@tagHandle"},{include:"@anchor"},{include:"@flowNumber"},[/[^\],]+/,{cases:{"@keywords":"keyword","@default":"string"}}]],multiString:[[/^( +).+$/,"string","@multiStringContinued.$1"]],multiStringContinued:[[/^( *).+$/,{cases:{"$1==$S2":"string","@default":{token:"@rematch",next:"@popall"}}}]],whitespace:[[/[ \t\r\n]+/,"white"]],comment:[[/#.*$/,"comment"]],flowCollections:[[/\[/,"@brackets","@array"],[/\{/,"@brackets","@object"]],flowScalars:[[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'[^']*'/,"string"],[/"/,"string","@doubleQuotedString"]],doubleQuotedString:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],blockStyle:[[/[>|][0-9]*[+-]?$/,"operators","@multiString"]],flowNumber:[[/@numberInteger(?=[ \t]*[,\]\}])/,"number"],[/@numberFloat(?=[ \t]*[,\]\}])/,"number.float"],[/@numberOctal(?=[ \t]*[,\]\}])/,"number.octal"],[/@numberHex(?=[ \t]*[,\]\}])/,"number.hex"],[/@numberInfinity(?=[ \t]*[,\]\}])/,"number.infinity"],[/@numberNaN(?=[ \t]*[,\]\}])/,"number.nan"],[/@numberDate(?=[ \t]*[,\]\}])/,"number.date"]],tagHandle:[[/\![^ ]*/,"tag"]],anchor:[[/[&*][^ ]+/,"namespace"]]}}}}]);(()=>{"use strict";const e=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout((()=>{if(e.stack)throw new Error(e.message+"\n\n"+e.stack);throw e}),0)}}emit(e){this.listeners.forEach((t=>{t(e)}))}onUnexpectedError(e){this.unexpectedErrorHandler(e),this.emit(e)}onUnexpectedExternalError(e){this.unexpectedErrorHandler(e)}};function t(t){r(t)||e.onUnexpectedError(t)}function n(e){if(e instanceof Error){let{name:t,message:n}=e;return{$isError:!0,name:t,message:n,stack:e.stacktrace||e.stack}}return e}const i="Canceled";function r(e){return e instanceof Error&&e.name===i&&e.message===i}function s(e){const t=this;let n,i=!1;return function(){return i||(i=!0,n=e.apply(t,arguments)),n}}var o;!function(e){e.is=function(e){return e&&"object"==typeof e&&"function"==typeof e[Symbol.iterator]};const t=Object.freeze([]);e.empty=function(){return t},e.single=function*(e){yield e},e.from=function(e){return e||t},e.isEmpty=function(e){return!e||!0===e[Symbol.iterator]().next().done},e.first=function(e){return e[Symbol.iterator]().next().value},e.some=function(e,t){for(const n of e)if(t(n))return!0;return!1},e.find=function(e,t){for(const n of e)if(t(n))return n},e.filter=function*(e,t){for(const n of e)t(n)&&(yield n)},e.map=function*(e,t){let n=0;for(const i of e)yield t(i,n++)},e.concat=function*(...e){for(const t of e)for(const e of t)yield e},e.concatNested=function*(e){for(const t of e)for(const e of t)yield e},e.reduce=function(e,t,n){let i=n;for(const n of e)i=t(i,n);return i},e.slice=function*(e,t,n=e.length){for(t<0&&(t+=e.length),n<0?n+=e.length:n>e.length&&(n=e.length);t<n;t++)yield e[t]},e.consume=function(t,n=Number.POSITIVE_INFINITY){const i=[];if(0===n)return[i,t];const r=t[Symbol.iterator]();for(let t=0;t<n;t++){const t=r.next();if(t.done)return[i,e.empty()];i.push(t.value)}return[i,{[Symbol.iterator]:()=>r}]},e.equals=function(e,t,n=((e,t)=>e===t)){const i=e[Symbol.iterator](),r=t[Symbol.iterator]();for(;;){const e=i.next(),t=r.next();if(e.done!==t.done)return!1;if(e.done)return!0;if(!n(e.value,t.value))return!1}}}(o||(o={}));let a=null;var l;function u(e){return null==a||a.trackDisposable(e),e}function h(e){null==a||a.markAsDisposed(e)}function d(e,t){null==a||a.setParent(e,t)}class c extends Error{constructor(e){super(`Encountered errors while disposing of store. Errors: [${e.join(", ")}]`),this.errors=e}}function m(e){if(o.is(e)){let t=[];for(const n of e)if(n)try{n.dispose()}catch(e){t.push(e)}if(1===t.length)throw t[0];if(t.length>1)throw new c(t);return Array.isArray(e)?[]:e}if(e)return e.dispose(),e}function f(...e){const t=g((()=>m(e)));return function(e,t){if(a)for(const n of e)a.setParent(n,t)}(e,t),t}function g(e){const t=u({dispose:s((()=>{h(t),e()}))});return t}class _{constructor(){this._toDispose=new Set,this._isDisposed=!1,u(this)}dispose(){this._isDisposed||(h(this),this._isDisposed=!0,this.clear())}clear(){try{m(this._toDispose.values())}finally{this._toDispose.clear()}}add(e){if(!e)return e;if(e===this)throw new Error("Cannot register a disposable on itself!");return d(e,this),this._isDisposed?_.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(e),e}}_.DISABLE_DISPOSED_WARNING=!1;class p{constructor(){this._store=new _,u(this),d(this._store,this)}dispose(){h(this),this._store.dispose()}_register(e){if(e===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(e)}}p.None=Object.freeze({dispose(){}});class C{constructor(e){this.element=e,this.next=C.Undefined,this.prev=C.Undefined}}C.Undefined=new C(void 0);class L{constructor(){this._first=C.Undefined,this._last=C.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===C.Undefined}clear(){let e=this._first;for(;e!==C.Undefined;){const t=e.next;e.prev=C.Undefined,e.next=C.Undefined,e=t}this._first=C.Undefined,this._last=C.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){const n=new C(e);if(this._first===C.Undefined)this._first=n,this._last=n;else if(t){const e=this._last;this._last=n,n.prev=e,e.next=n}else{const e=this._first;this._first=n,n.next=e,e.prev=n}this._size+=1;let i=!1;return()=>{i||(i=!0,this._remove(n))}}shift(){if(this._first!==C.Undefined){const e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==C.Undefined){const e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==C.Undefined&&e.next!==C.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===C.Undefined&&e.next===C.Undefined?(this._first=C.Undefined,this._last=C.Undefined):e.next===C.Undefined?(this._last=this._last.prev,this._last.next=C.Undefined):e.prev===C.Undefined&&(this._first=this._first.next,this._first.prev=C.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;for(;e!==C.Undefined;)yield e.element,e=e.next}}const S="en";let b,N,E=!1,y=!1,A=!1,w=!1,v=!1,M=!1,K=!1,O=null,T=null;const R="object"==typeof self?self:"object"==typeof global?global:{};let V;void 0!==R.vscode&&void 0!==R.vscode.process?V=R.vscode.process:"undefined"!=typeof process&&(V=process);const I="string"==typeof(null===(l=null==V?void 0:V.versions)||void 0===l?void 0:l.electron)&&"renderer"===V.type;if("object"!=typeof navigator||I)if("object"==typeof V){E="win32"===V.platform,y="darwin"===V.platform,A="linux"===V.platform,w=A&&!!V.env.SNAP&&!!V.env.SNAP_REVISION,b=S,O=S;const e=V.env.VSCODE_NLS_CONFIG;if(e)try{const t=JSON.parse(e),n=t.availableLanguages["*"];b=t.locale,O=n||S,T=t._translationsConfigFile}catch(e){}v=!0}else console.error("Unable to resolve platform.");else N=navigator.userAgent,E=N.indexOf("Windows")>=0,y=N.indexOf("Macintosh")>=0,K=(N.indexOf("Macintosh")>=0||N.indexOf("iPad")>=0||N.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,A=N.indexOf("Linux")>=0,M=!0,b=navigator.language,O=b;let P=0;y?P=1:E?P=3:A&&(P=2);const x=E,k=y,D=function(){if(R.setImmediate)return R.setImmediate.bind(R);if("function"==typeof R.postMessage&&!R.importScripts){let e=[];R.addEventListener("message",(t=>{if(t.data&&t.data.vscodeSetImmediateId)for(let n=0,i=e.length;n<i;n++){const i=e[n];if(i.id===t.data.vscodeSetImmediateId)return e.splice(n,1),void i.callback()}}));let t=0;return n=>{const i=++t;e.push({id:i,callback:n}),R.postMessage({vscodeSetImmediateId:i},"*")}}if("function"==typeof(null==V?void 0:V.nextTick))return V.nextTick.bind(V);const e=Promise.resolve();return t=>e.then(t)}();const F=R.performance&&"function"==typeof R.performance.now;class U{constructor(e){this._highResolution=F&&e,this._startTime=this._now(),this._stopTime=-1}static create(e=!0){return new U(e)}stop(){this._stopTime=this._now()}elapsed(){return-1!==this._stopTime?this._stopTime-this._startTime:this._now()-this._startTime}_now(){return this._highResolution?R.performance.now():Date.now()}}var B;!function(e){function t(e){return(t,n=null,i)=>{let r,s=!1;return r=e((e=>{if(!s)return r?r.dispose():s=!0,t.call(n,e)}),null,i),s&&r.dispose(),r}}function n(e,t){return o(((n,i=null,r)=>e((e=>n.call(i,t(e))),null,r)))}function i(e,t){return o(((n,i=null,r)=>e((e=>{t(e),n.call(i,e)}),null,r)))}function r(e,t){return o(((n,i=null,r)=>e((e=>t(e)&&n.call(i,e)),null,r)))}function s(e,t,i){let r=i;return n(e,(e=>(r=t(r,e),r)))}function o(e){let t;const n=new H({onFirstListenerAdd(){t=e(n.fire,n)},onLastListenerRemove(){t.dispose()}});return n.event}function a(e,t,n=100,i=!1,r){let s,o,a,l=0;const u=new H({leakWarningThreshold:r,onFirstListenerAdd(){s=e((e=>{l++,o=t(o,e),i&&!a&&(u.fire(o),o=void 0),clearTimeout(a),a=setTimeout((()=>{const e=o;o=void 0,a=void 0,(!i||l>1)&&u.fire(e),l=0}),n)}))},onLastListenerRemove(){s.dispose()}});return u.event}function l(e,t=((e,t)=>e===t)){let n,i=!0;return r(e,(e=>{const r=i||!t(e,n);return i=!1,n=e,r}))}e.None=()=>p.None,e.once=t,e.map=n,e.forEach=i,e.filter=r,e.signal=function(e){return e},e.any=function(...e){return(t,n=null,i)=>f(...e.map((e=>e((e=>t.call(n,e)),null,i))))},e.reduce=s,e.debounce=a,e.latch=l,e.split=function(t,n){return[e.filter(t,n),e.filter(t,(e=>!n(e)))]},e.buffer=function(e,t=!1,n=[]){let i=n.slice(),r=e((e=>{i?i.push(e):o.fire(e)}));const s=()=>{i&&i.forEach((e=>o.fire(e))),i=null},o=new H({onFirstListenerAdd(){r||(r=e((e=>o.fire(e))))},onFirstListenerDidAdd(){i&&(t?setTimeout(s):s())},onLastListenerRemove(){r&&r.dispose(),r=null}});return o.event};class u{constructor(e){this.event=e}map(e){return new u(n(this.event,e))}forEach(e){return new u(i(this.event,e))}filter(e){return new u(r(this.event,e))}reduce(e,t){return new u(s(this.event,e,t))}latch(){return new u(l(this.event))}debounce(e,t=100,n=!1,i){return new u(a(this.event,e,t,n,i))}on(e,t,n){return this.event(e,t,n)}once(e,n,i){return t(this.event)(e,n,i)}}e.chain=function(e){return new u(e)},e.fromNodeEventEmitter=function(e,t,n=(e=>e)){const i=(...e)=>r.fire(n(...e)),r=new H({onFirstListenerAdd:()=>e.on(t,i),onLastListenerRemove:()=>e.removeListener(t,i)});return r.event},e.fromDOMEventEmitter=function(e,t,n=(e=>e)){const i=(...e)=>r.fire(n(...e)),r=new H({onFirstListenerAdd:()=>e.addEventListener(t,i),onLastListenerRemove:()=>e.removeEventListener(t,i)});return r.event},e.toPromise=function(e){return new Promise((n=>t(e)(n)))}}(B||(B={}));class q{constructor(e){this._listenerCount=0,this._invocationCount=0,this._elapsedOverall=0,this._name=`${e}_${q._idPool++}`}start(e){this._stopWatch=new U(!0),this._listenerCount=e}stop(){if(this._stopWatch){const e=this._stopWatch.elapsed();this._elapsedOverall+=e,this._invocationCount+=1,console.info(`did FIRE ${this._name}: elapsed_ms: ${e.toFixed(5)}, listener: ${this._listenerCount} (elapsed_overall: ${this._elapsedOverall.toFixed(2)}, invocations: ${this._invocationCount})`),this._stopWatch=void 0}}}q._idPool=0;class H{constructor(e){var t;this._disposed=!1,this._options=e,this._leakageMon=void 0,this._perfMon=(null===(t=this._options)||void 0===t?void 0:t._profName)?new q(this._options._profName):void 0}get event(){return this._event||(this._event=(e,t,n)=>{var i;this._listeners||(this._listeners=new L);const r=this._listeners.isEmpty();r&&this._options&&this._options.onFirstListenerAdd&&this._options.onFirstListenerAdd(this);const s=this._listeners.push(t?[e,t]:e);r&&this._options&&this._options.onFirstListenerDidAdd&&this._options.onFirstListenerDidAdd(this),this._options&&this._options.onListenerDidAdd&&this._options.onListenerDidAdd(this,e,t);const o=null===(i=this._leakageMon)||void 0===i?void 0:i.check(this._listeners.size),a=g((()=>{if(o&&o(),!this._disposed&&(s(),this._options&&this._options.onLastListenerRemove)){this._listeners&&!this._listeners.isEmpty()||this._options.onLastListenerRemove(this)}}));return n instanceof _?n.add(a):Array.isArray(n)&&n.push(a),a}),this._event}fire(e){var n,i;if(this._listeners){this._deliveryQueue||(this._deliveryQueue=new L);for(let t of this._listeners)this._deliveryQueue.push([t,e]);for(null===(n=this._perfMon)||void 0===n||n.start(this._deliveryQueue.size);this._deliveryQueue.size>0;){const[e,n]=this._deliveryQueue.shift();try{"function"==typeof e?e.call(void 0,n):e[0].call(e[1],n)}catch(e){t(e)}}null===(i=this._perfMon)||void 0===i||i.stop()}}dispose(){var e,t,n,i,r;this._disposed||(this._disposed=!0,null===(e=this._listeners)||void 0===e||e.clear(),null===(t=this._deliveryQueue)||void 0===t||t.clear(),null===(i=null===(n=this._options)||void 0===n?void 0:n.onLastListenerRemove)||void 0===i||i.call(n),null===(r=this._leakageMon)||void 0===r||r.dispose())}}function W(e){const t=[];for(const n of function(e){let t=[],n=Object.getPrototypeOf(e);for(;Object.prototype!==n;)t=t.concat(Object.getOwnPropertyNames(n)),n=Object.getPrototypeOf(n);return t}(e))"function"==typeof e[n]&&t.push(n);return t}function $(e){return e>=65&&e<=90}function j(e){return 55296<=e&&e<=56319}function G(e){return 56320<=e&&e<=57343}function z(e,t){return t-56320+(e-55296<<10)+65536}String.fromCharCode(65279);class Y{constructor(){this._data=JSON.parse("[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]")}static getInstance(){return Y._INSTANCE||(Y._INSTANCE=new Y),Y._INSTANCE}getGraphemeBreakType(e){if(e<32)return 10===e?3:13===e?2:4;if(e<127)return 0;const t=this._data,n=t.length/3;let i=1;for(;i<=n;)if(e<t[3*i])i*=2;else{if(!(e>t[3*i+1]))return t[3*i+2];i=2*i+1}return 0}}Y._INSTANCE=null;const Q="$initialize";let X;class Z{constructor(e,t,n,i){this.vsWorker=e,this.req=t,this.method=n,this.args=i,this.type=0}}class J{constructor(e,t,n,i){this.vsWorker=e,this.seq=t,this.res=n,this.err=i,this.type=1}}class ee{constructor(e,t,n,i){this.vsWorker=e,this.req=t,this.eventName=n,this.arg=i,this.type=2}}class te{constructor(e,t,n){this.vsWorker=e,this.req=t,this.event=n,this.type=3}}class ne{constructor(e,t){this.vsWorker=e,this.req=t,this.type=4}}class ie{constructor(e){this._workerId=-1,this._handler=e,this._lastSentReq=0,this._pendingReplies=Object.create(null),this._pendingEmitters=new Map,this._pendingEvents=new Map}setWorkerId(e){this._workerId=e}sendMessage(e,t){const n=String(++this._lastSentReq);return new Promise(((i,r)=>{this._pendingReplies[n]={resolve:i,reject:r},this._send(new Z(this._workerId,n,e,t))}))}listen(e,t){let n=null;const i=new H({onFirstListenerAdd:()=>{n=String(++this._lastSentReq),this._pendingEmitters.set(n,i),this._send(new ee(this._workerId,n,e,t))},onLastListenerRemove:()=>{this._pendingEmitters.delete(n),this._send(new ne(this._workerId,n)),n=null}});return i.event}handleMessage(e){e&&e.vsWorker&&(-1!==this._workerId&&e.vsWorker!==this._workerId||this._handleMessage(e))}_handleMessage(e){switch(e.type){case 1:return this._handleReplyMessage(e);case 0:return this._handleRequestMessage(e);case 2:return this._handleSubscribeEventMessage(e);case 3:return this._handleEventMessage(e);case 4:return this._handleUnsubscribeEventMessage(e)}}_handleReplyMessage(e){if(!this._pendingReplies[e.seq])return void console.warn("Got reply to unknown seq");let t=this._pendingReplies[e.seq];if(delete this._pendingReplies[e.seq],e.err){let n=e.err;return e.err.$isError&&(n=new Error,n.name=e.err.name,n.message=e.err.message,n.stack=e.err.stack),void t.reject(n)}t.resolve(e.res)}_handleRequestMessage(e){let t=e.req;this._handler.handleMessage(e.method,e.args).then((e=>{this._send(new J(this._workerId,t,e,void 0))}),(e=>{e.detail instanceof Error&&(e.detail=n(e.detail)),this._send(new J(this._workerId,t,void 0,n(e)))}))}_handleSubscribeEventMessage(e){const t=e.req,n=this._handler.handleEvent(e.eventName,e.arg)((e=>{this._send(new te(this._workerId,t,e))}));this._pendingEvents.set(t,n)}_handleEventMessage(e){this._pendingEmitters.has(e.req)?this._pendingEmitters.get(e.req).fire(e.event):console.warn("Got event for unknown req")}_handleUnsubscribeEventMessage(e){this._pendingEvents.has(e.req)?(this._pendingEvents.get(e.req).dispose(),this._pendingEvents.delete(e.req)):console.warn("Got unsubscribe for unknown req")}_send(e){let t=[];if(0===e.type)for(let n=0;n<e.args.length;n++)e.args[n]instanceof ArrayBuffer&&t.push(e.args[n]);else 1===e.type&&e.res instanceof ArrayBuffer&&t.push(e.res);this._handler.sendMessage(e,t)}}function re(e){return"o"===e[0]&&"n"===e[1]&&$(e.charCodeAt(2))}function se(e){return/^onDynamic/.test(e)&&$(e.charCodeAt(9))}function oe(e,t,n){const i=e=>function(){const n=Array.prototype.slice.call(arguments,0);return t(e,n)},r=e=>function(t){return n(e,t)};let s={};for(const t of e)se(t)?s[t]=r(t):re(t)?s[t]=n(t,void 0):s[t]=i(t);return s}class ae{constructor(e,t){this._requestHandlerFactory=t,this._requestHandler=null,this._protocol=new ie({sendMessage:(t,n)=>{e(t,n)},handleMessage:(e,t)=>this._handleMessage(e,t),handleEvent:(e,t)=>this._handleEvent(e,t)})}onmessage(e){this._protocol.handleMessage(e)}_handleMessage(e,t){if(e===Q)return this.initialize(t[0],t[1],t[2],t[3]);if(!this._requestHandler||"function"!=typeof this._requestHandler[e])return Promise.reject(new Error("Missing requestHandler or method: "+e));try{return Promise.resolve(this._requestHandler[e].apply(this._requestHandler,t))}catch(e){return Promise.reject(e)}}_handleEvent(e,t){if(!this._requestHandler)throw new Error("Missing requestHandler");if(se(e)){const n=this._requestHandler[e].call(this._requestHandler,t);if("function"!=typeof n)throw new Error(`Missing dynamic event ${e} on request handler.`);return n}if(re(e)){const t=this._requestHandler[e];if("function"!=typeof t)throw new Error(`Missing event ${e} on request handler.`);return t}throw new Error(`Malformed event name ${e}`)}initialize(e,t,n,i){this._protocol.setWorkerId(e);const r=oe(i,((e,t)=>this._protocol.sendMessage(e,t)),((e,t)=>this._protocol.listen(e,t)));return this._requestHandlerFactory?(this._requestHandler=this._requestHandlerFactory(r),Promise.resolve(W(this._requestHandler))):(t&&(void 0!==t.baseUrl&&delete t.baseUrl,void 0!==t.paths&&void 0!==t.paths.vs&&delete t.paths.vs,void 0!==typeof t.trustedTypesPolicy&&delete t.trustedTypesPolicy,t.catchError=!0,R.require.config(t)),new Promise(((e,t)=>{(0,R.require)([n],(n=>{this._requestHandler=n.create(r),this._requestHandler?e(W(this._requestHandler)):t(new Error("No RequestHandler!"))}),t)})))}}class le{constructor(e,t,n,i){this.originalStart=e,this.originalLength=t,this.modifiedStart=n,this.modifiedLength=i}getOriginalEnd(){return this.originalStart+this.originalLength}getModifiedEnd(){return this.modifiedStart+this.modifiedLength}}function ue(e,t){return(t<<5)-t+e|0}function he(e,t){t=ue(149417,t);for(let n=0,i=e.length;n<i;n++)t=ue(e.charCodeAt(n),t);return t}function de(e,t,n=32){const i=n-t;return(e<<t|(~((1<<i)-1)&e)>>>i)>>>0}function ce(e,t=0,n=e.byteLength,i=0){for(let r=0;r<n;r++)e[t+r]=i}function me(e,t=32){return e instanceof ArrayBuffer?Array.from(new Uint8Array(e)).map((e=>e.toString(16).padStart(2,"0"))).join(""):function(e,t,n="0"){for(;e.length<t;)e=n+e;return e}((e>>>0).toString(16),t/4)}class fe{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(67),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(e){const t=e.length;if(0===t)return;const n=this._buff;let i,r,s=this._buffLen,o=this._leftoverHighSurrogate;for(0!==o?(i=o,r=-1,o=0):(i=e.charCodeAt(0),r=0);;){let a=i;if(j(i)){if(!(r+1<t)){o=i;break}{const t=e.charCodeAt(r+1);G(t)?(r++,a=z(i,t)):a=65533}}else G(i)&&(a=65533);if(s=this._push(n,s,a),r++,!(r<t))break;i=e.charCodeAt(r)}this._buffLen=s,this._leftoverHighSurrogate=o}_push(e,t,n){return n<128?e[t++]=n:n<2048?(e[t++]=192|(1984&n)>>>6,e[t++]=128|(63&n)>>>0):n<65536?(e[t++]=224|(61440&n)>>>12,e[t++]=128|(4032&n)>>>6,e[t++]=128|(63&n)>>>0):(e[t++]=240|(1835008&n)>>>18,e[t++]=128|(258048&n)>>>12,e[t++]=128|(4032&n)>>>6,e[t++]=128|(63&n)>>>0),t>=64&&(this._step(),t-=64,this._totalLen+=64,e[0]=e[64],e[1]=e[65],e[2]=e[66]),t}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),me(this._h0)+me(this._h1)+me(this._h2)+me(this._h3)+me(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,ce(this._buff,this._buffLen),this._buffLen>56&&(this._step(),ce(this._buff));const e=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(e/4294967296),!1),this._buffDV.setUint32(60,e%4294967296,!1),this._step()}_step(){const e=fe._bigBlock32,t=this._buffDV;for(let n=0;n<64;n+=4)e.setUint32(n,t.getUint32(n,!1),!1);for(let t=64;t<320;t+=4)e.setUint32(t,de(e.getUint32(t-12,!1)^e.getUint32(t-32,!1)^e.getUint32(t-56,!1)^e.getUint32(t-64,!1),1),!1);let n,i,r,s=this._h0,o=this._h1,a=this._h2,l=this._h3,u=this._h4;for(let t=0;t<80;t++)t<20?(n=o&a|~o&l,i=1518500249):t<40?(n=o^a^l,i=1859775393):t<60?(n=o&a|o&l|a&l,i=2400959708):(n=o^a^l,i=3395469782),r=de(s,5)+n+u+i+e.getUint32(4*t,!1)&4294967295,u=l,l=a,a=de(o,30),o=s,s=r;this._h0=this._h0+s&4294967295,this._h1=this._h1+o&4294967295,this._h2=this._h2+a&4294967295,this._h3=this._h3+l&4294967295,this._h4=this._h4+u&4294967295}}fe._bigBlock32=new DataView(new ArrayBuffer(320));class ge{constructor(e){this.source=e}getElements(){const e=this.source,t=new Int32Array(e.length);for(let n=0,i=e.length;n<i;n++)t[n]=e.charCodeAt(n);return t}}function _e(e,t,n){return new Se(new ge(e),new ge(t)).ComputeDiff(n).changes}class pe{static Assert(e,t){if(!e)throw new Error(t)}}class Ce{static Copy(e,t,n,i,r){for(let s=0;s<r;s++)n[i+s]=e[t+s]}static Copy2(e,t,n,i,r){for(let s=0;s<r;s++)n[i+s]=e[t+s]}}class Le{constructor(){this.m_changes=[],this.m_originalStart=1073741824,this.m_modifiedStart=1073741824,this.m_originalCount=0,this.m_modifiedCount=0}MarkNextChange(){(this.m_originalCount>0||this.m_modifiedCount>0)&&this.m_changes.push(new le(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_originalCount++}AddModifiedElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class Se{constructor(e,t,n=null){this.ContinueProcessingPredicate=n,this._originalSequence=e,this._modifiedSequence=t;const[i,r,s]=Se._getElements(e),[o,a,l]=Se._getElements(t);this._hasStrings=s&&l,this._originalStringElements=i,this._originalElementsOrHash=r,this._modifiedStringElements=o,this._modifiedElementsOrHash=a,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(e){return e.length>0&&"string"==typeof e[0]}static _getElements(e){const t=e.getElements();if(Se._isStringArray(t)){const e=new Int32Array(t.length);for(let n=0,i=t.length;n<i;n++)e[n]=he(t[n],0);return[t,e,!0]}return t instanceof Int32Array?[[],t,!1]:[[],new Int32Array(t),!1]}ElementsAreEqual(e,t){return this._originalElementsOrHash[e]===this._modifiedElementsOrHash[t]&&(!this._hasStrings||this._originalStringElements[e]===this._modifiedStringElements[t])}ElementsAreStrictEqual(e,t){if(!this.ElementsAreEqual(e,t))return!1;return Se._getStrictElement(this._originalSequence,e)===Se._getStrictElement(this._modifiedSequence,t)}static _getStrictElement(e,t){return"function"==typeof e.getStrictElement?e.getStrictElement(t):null}OriginalElementsAreEqual(e,t){return this._originalElementsOrHash[e]===this._originalElementsOrHash[t]&&(!this._hasStrings||this._originalStringElements[e]===this._originalStringElements[t])}ModifiedElementsAreEqual(e,t){return this._modifiedElementsOrHash[e]===this._modifiedElementsOrHash[t]&&(!this._hasStrings||this._modifiedStringElements[e]===this._modifiedStringElements[t])}ComputeDiff(e){return this._ComputeDiff(0,this._originalElementsOrHash.length-1,0,this._modifiedElementsOrHash.length-1,e)}_ComputeDiff(e,t,n,i,r){const s=[!1];let o=this.ComputeDiffRecursive(e,t,n,i,s);return r&&(o=this.PrettifyChanges(o)),{quitEarly:s[0],changes:o}}ComputeDiffRecursive(e,t,n,i,r){for(r[0]=!1;e<=t&&n<=i&&this.ElementsAreEqual(e,n);)e++,n++;for(;t>=e&&i>=n&&this.ElementsAreEqual(t,i);)t--,i--;if(e>t||n>i){let r;return n<=i?(pe.Assert(e===t+1,"originalStart should only be one more than originalEnd"),r=[new le(e,0,n,i-n+1)]):e<=t?(pe.Assert(n===i+1,"modifiedStart should only be one more than modifiedEnd"),r=[new le(e,t-e+1,n,0)]):(pe.Assert(e===t+1,"originalStart should only be one more than originalEnd"),pe.Assert(n===i+1,"modifiedStart should only be one more than modifiedEnd"),r=[]),r}const s=[0],o=[0],a=this.ComputeRecursionPoint(e,t,n,i,s,o,r),l=s[0],u=o[0];if(null!==a)return a;if(!r[0]){const s=this.ComputeDiffRecursive(e,l,n,u,r);let o=[];return o=r[0]?[new le(l+1,t-(l+1)+1,u+1,i-(u+1)+1)]:this.ComputeDiffRecursive(l+1,t,u+1,i,r),this.ConcatenateChanges(s,o)}return[new le(e,t-e+1,n,i-n+1)]}WALKTRACE(e,t,n,i,r,s,o,a,l,u,h,d,c,m,f,g,_,p){let C=null,L=null,S=new Le,b=t,N=n,E=c[0]-g[0]-i,y=-1073741824,A=this.m_forwardHistory.length-1;do{const t=E+e;t===b||t<N&&l[t-1]<l[t+1]?(m=(h=l[t+1])-E-i,h<y&&S.MarkNextChange(),y=h,S.AddModifiedElement(h+1,m),E=t+1-e):(m=(h=l[t-1]+1)-E-i,h<y&&S.MarkNextChange(),y=h-1,S.AddOriginalElement(h,m+1),E=t-1-e),A>=0&&(e=(l=this.m_forwardHistory[A])[0],b=1,N=l.length-1)}while(--A>=-1);if(C=S.getReverseChanges(),p[0]){let e=c[0]+1,t=g[0]+1;if(null!==C&&C.length>0){const n=C[C.length-1];e=Math.max(e,n.getOriginalEnd()),t=Math.max(t,n.getModifiedEnd())}L=[new le(e,d-e+1,t,f-t+1)]}else{S=new Le,b=s,N=o,E=c[0]-g[0]-a,y=1073741824,A=_?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const e=E+r;e===b||e<N&&u[e-1]>=u[e+1]?(m=(h=u[e+1]-1)-E-a,h>y&&S.MarkNextChange(),y=h+1,S.AddOriginalElement(h+1,m+1),E=e+1-r):(m=(h=u[e-1])-E-a,h>y&&S.MarkNextChange(),y=h,S.AddModifiedElement(h+1,m+1),E=e-1-r),A>=0&&(r=(u=this.m_reverseHistory[A])[0],b=1,N=u.length-1)}while(--A>=-1);L=S.getChanges()}return this.ConcatenateChanges(C,L)}ComputeRecursionPoint(e,t,n,i,r,s,o){let a=0,l=0,u=0,h=0,d=0,c=0;e--,n--,r[0]=0,s[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const m=t-e+(i-n),f=m+1,g=new Int32Array(f),_=new Int32Array(f),p=i-n,C=t-e,L=e-n,S=t-i,b=(C-p)%2==0;g[p]=e,_[C]=t,o[0]=!1;for(let N=1;N<=m/2+1;N++){let m=0,E=0;u=this.ClipDiagonalBound(p-N,N,p,f),h=this.ClipDiagonalBound(p+N,N,p,f);for(let e=u;e<=h;e+=2){a=e===u||e<h&&g[e-1]<g[e+1]?g[e+1]:g[e-1]+1,l=a-(e-p)-L;const n=a;for(;a<t&&l<i&&this.ElementsAreEqual(a+1,l+1);)a++,l++;if(g[e]=a,a+l>m+E&&(m=a,E=l),!b&&Math.abs(e-C)<=N-1&&a>=_[e])return r[0]=a,s[0]=l,n<=_[e]&&N<=1448?this.WALKTRACE(p,u,h,L,C,d,c,S,g,_,a,t,r,l,i,s,b,o):null}const y=(m-e+(E-n)-N)/2;if(null!==this.ContinueProcessingPredicate&&!this.ContinueProcessingPredicate(m,y))return o[0]=!0,r[0]=m,s[0]=E,y>0&&N<=1448?this.WALKTRACE(p,u,h,L,C,d,c,S,g,_,a,t,r,l,i,s,b,o):(e++,n++,[new le(e,t-e+1,n,i-n+1)]);d=this.ClipDiagonalBound(C-N,N,C,f),c=this.ClipDiagonalBound(C+N,N,C,f);for(let m=d;m<=c;m+=2){a=m===d||m<c&&_[m-1]>=_[m+1]?_[m+1]-1:_[m-1],l=a-(m-C)-S;const f=a;for(;a>e&&l>n&&this.ElementsAreEqual(a,l);)a--,l--;if(_[m]=a,b&&Math.abs(m-p)<=N&&a<=g[m])return r[0]=a,s[0]=l,f>=g[m]&&N<=1448?this.WALKTRACE(p,u,h,L,C,d,c,S,g,_,a,t,r,l,i,s,b,o):null}if(N<=1447){let e=new Int32Array(h-u+2);e[0]=p-u+1,Ce.Copy2(g,u,e,1,h-u+1),this.m_forwardHistory.push(e),e=new Int32Array(c-d+2),e[0]=C-d+1,Ce.Copy2(_,d,e,1,c-d+1),this.m_reverseHistory.push(e)}}return this.WALKTRACE(p,u,h,L,C,d,c,S,g,_,a,t,r,l,i,s,b,o)}PrettifyChanges(e){for(let t=0;t<e.length;t++){const n=e[t],i=t<e.length-1?e[t+1].originalStart:this._originalElementsOrHash.length,r=t<e.length-1?e[t+1].modifiedStart:this._modifiedElementsOrHash.length,s=n.originalLength>0,o=n.modifiedLength>0;for(;n.originalStart+n.originalLength<i&&n.modifiedStart+n.modifiedLength<r&&(!s||this.OriginalElementsAreEqual(n.originalStart,n.originalStart+n.originalLength))&&(!o||this.ModifiedElementsAreEqual(n.modifiedStart,n.modifiedStart+n.modifiedLength));){const e=this.ElementsAreStrictEqual(n.originalStart,n.modifiedStart);if(this.ElementsAreStrictEqual(n.originalStart+n.originalLength,n.modifiedStart+n.modifiedLength)&&!e)break;n.originalStart++,n.modifiedStart++}let a=[null];t<e.length-1&&this.ChangesOverlap(e[t],e[t+1],a)&&(e[t]=a[0],e.splice(t+1,1),t--)}for(let t=e.length-1;t>=0;t--){const n=e[t];let i=0,r=0;if(t>0){const n=e[t-1];i=n.originalStart+n.originalLength,r=n.modifiedStart+n.modifiedLength}const s=n.originalLength>0,o=n.modifiedLength>0;let a=0,l=this._boundaryScore(n.originalStart,n.originalLength,n.modifiedStart,n.modifiedLength);for(let e=1;;e++){const t=n.originalStart-e,u=n.modifiedStart-e;if(t<i||u<r)break;if(s&&!this.OriginalElementsAreEqual(t,t+n.originalLength))break;if(o&&!this.ModifiedElementsAreEqual(u,u+n.modifiedLength))break;const h=(t===i&&u===r?5:0)+this._boundaryScore(t,n.originalLength,u,n.modifiedLength);h>l&&(l=h,a=e)}n.originalStart-=a,n.modifiedStart-=a;const u=[null];t>0&&this.ChangesOverlap(e[t-1],e[t],u)&&(e[t-1]=u[0],e.splice(t,1),t++)}if(this._hasStrings)for(let t=1,n=e.length;t<n;t++){const n=e[t-1],i=e[t],r=i.originalStart-n.originalStart-n.originalLength,s=n.originalStart,o=i.originalStart+i.originalLength,a=o-s,l=n.modifiedStart,u=i.modifiedStart+i.modifiedLength,h=u-l;if(r<5&&a<20&&h<20){const e=this._findBetterContiguousSequence(s,a,l,h,r);if(e){const[t,s]=e;t===n.originalStart+n.originalLength&&s===n.modifiedStart+n.modifiedLength||(n.originalLength=t-n.originalStart,n.modifiedLength=s-n.modifiedStart,i.originalStart=t+r,i.modifiedStart=s+r,i.originalLength=o-i.originalStart,i.modifiedLength=u-i.modifiedStart)}}}return e}_findBetterContiguousSequence(e,t,n,i,r){if(t<r||i<r)return null;const s=e+t-r+1,o=n+i-r+1;let a=0,l=0,u=0;for(let t=e;t<s;t++)for(let e=n;e<o;e++){const n=this._contiguousSequenceScore(t,e,r);n>0&&n>a&&(a=n,l=t,u=e)}return a>0?[l,u]:null}_contiguousSequenceScore(e,t,n){let i=0;for(let r=0;r<n;r++){if(!this.ElementsAreEqual(e+r,t+r))return 0;i+=this._originalStringElements[e+r].length}return i}_OriginalIsBoundary(e){return e<=0||e>=this._originalElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._originalStringElements[e])}_OriginalRegionIsBoundary(e,t){if(this._OriginalIsBoundary(e)||this._OriginalIsBoundary(e-1))return!0;if(t>0){const n=e+t;if(this._OriginalIsBoundary(n-1)||this._OriginalIsBoundary(n))return!0}return!1}_ModifiedIsBoundary(e){return e<=0||e>=this._modifiedElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._modifiedStringElements[e])}_ModifiedRegionIsBoundary(e,t){if(this._ModifiedIsBoundary(e)||this._ModifiedIsBoundary(e-1))return!0;if(t>0){const n=e+t;if(this._ModifiedIsBoundary(n-1)||this._ModifiedIsBoundary(n))return!0}return!1}_boundaryScore(e,t,n,i){return(this._OriginalRegionIsBoundary(e,t)?1:0)+(this._ModifiedRegionIsBoundary(n,i)?1:0)}ConcatenateChanges(e,t){let n=[];if(0===e.length||0===t.length)return t.length>0?t:e;if(this.ChangesOverlap(e[e.length-1],t[0],n)){const i=new Array(e.length+t.length-1);return Ce.Copy(e,0,i,0,e.length-1),i[e.length-1]=n[0],Ce.Copy(t,1,i,e.length,t.length-1),i}{const n=new Array(e.length+t.length);return Ce.Copy(e,0,n,0,e.length),Ce.Copy(t,0,n,e.length,t.length),n}}ChangesOverlap(e,t,n){if(pe.Assert(e.originalStart<=t.originalStart,"Left change is not less than or equal to right change"),pe.Assert(e.modifiedStart<=t.modifiedStart,"Left change is not less than or equal to right change"),e.originalStart+e.originalLength>=t.originalStart||e.modifiedStart+e.modifiedLength>=t.modifiedStart){const i=e.originalStart;let r=e.originalLength;const s=e.modifiedStart;let o=e.modifiedLength;return e.originalStart+e.originalLength>=t.originalStart&&(r=t.originalStart+t.originalLength-e.originalStart),e.modifiedStart+e.modifiedLength>=t.modifiedStart&&(o=t.modifiedStart+t.modifiedLength-e.modifiedStart),n[0]=new le(i,r,s,o),!0}return n[0]=null,!1}ClipDiagonalBound(e,t,n,i){if(e>=0&&e<i)return e;const r=t%2==0;if(e<0){return r===(n%2==0)?0:1}return r===((i-n-1)%2==0)?i-1:i-2}}if(void 0!==R.vscode&&void 0!==R.vscode.process){const e=R.vscode.process;X={get platform(){return e.platform},get arch(){return e.arch},get env(){return e.env},cwd:()=>e.cwd(),nextTick:e=>D(e)}}else X="undefined"!=typeof process?{get platform(){return process.platform},get arch(){return process.arch},get env(){return process.env},cwd:()=>process.env.VSCODE_CWD||process.cwd(),nextTick:e=>process.nextTick(e)}:{get platform(){return x?"win32":k?"darwin":"linux"},get arch(){},nextTick:e=>D(e),get env(){return{}},cwd:()=>"/"};const be=X.cwd,Ne=X.env,Ee=X.platform,ye=46,Ae=47,we=92,ve=58;class Me extends Error{constructor(e,t,n){let i;"string"==typeof t&&0===t.indexOf("not ")?(i="must not be",t=t.replace(/^not /,"")):i="must be";const r=-1!==e.indexOf(".")?"property":"argument";let s=`The "${e}" ${r} ${i} of type ${t}`;s+=". Received type "+typeof n,super(s),this.code="ERR_INVALID_ARG_TYPE"}}function Ke(e,t){if("string"!=typeof e)throw new Me(t,"string",e)}function Oe(e){return e===Ae||e===we}function Te(e){return e===Ae}function Re(e){return e>=65&&e<=90||e>=97&&e<=122}function Ve(e,t,n,i){let r="",s=0,o=-1,a=0,l=0;for(let u=0;u<=e.length;++u){if(u<e.length)l=e.charCodeAt(u);else{if(i(l))break;l=Ae}if(i(l)){if(o===u-1||1===a);else if(2===a){if(r.length<2||2!==s||r.charCodeAt(r.length-1)!==ye||r.charCodeAt(r.length-2)!==ye){if(r.length>2){const e=r.lastIndexOf(n);-1===e?(r="",s=0):(r=r.slice(0,e),s=r.length-1-r.lastIndexOf(n)),o=u,a=0;continue}if(0!==r.length){r="",s=0,o=u,a=0;continue}}t&&(r+=r.length>0?`${n}..`:"..",s=2)}else r.length>0?r+=`${n}${e.slice(o+1,u)}`:r=e.slice(o+1,u),s=u-o-1;o=u,a=0}else l===ye&&-1!==a?++a:a=-1}return r}function Ie(e,t){if(null===t||"object"!=typeof t)throw new Me("pathObject","Object",t);const n=t.dir||t.root,i=t.base||`${t.name||""}${t.ext||""}`;return n?n===t.root?`${n}${i}`:`${n}${e}${i}`:i}const Pe={resolve(...e){let t="",n="",i=!1;for(let r=e.length-1;r>=-1;r--){let s;if(r>=0){if(s=e[r],Ke(s,"path"),0===s.length)continue}else 0===t.length?s=be():(s=Ne[`=${t}`]||be(),(void 0===s||s.slice(0,2).toLowerCase()!==t.toLowerCase()&&s.charCodeAt(2)===we)&&(s=`${t}\\`));const o=s.length;let a=0,l="",u=!1;const h=s.charCodeAt(0);if(1===o)Oe(h)&&(a=1,u=!0);else if(Oe(h))if(u=!0,Oe(s.charCodeAt(1))){let e=2,t=e;for(;e<o&&!Oe(s.charCodeAt(e));)e++;if(e<o&&e!==t){const n=s.slice(t,e);for(t=e;e<o&&Oe(s.charCodeAt(e));)e++;if(e<o&&e!==t){for(t=e;e<o&&!Oe(s.charCodeAt(e));)e++;e!==o&&e===t||(l=`\\\\${n}\\${s.slice(t,e)}`,a=e)}}}else a=1;else Re(h)&&s.charCodeAt(1)===ve&&(l=s.slice(0,2),a=2,o>2&&Oe(s.charCodeAt(2))&&(u=!0,a=3));if(l.length>0)if(t.length>0){if(l.toLowerCase()!==t.toLowerCase())continue}else t=l;if(i){if(t.length>0)break}else if(n=`${s.slice(a)}\\${n}`,i=u,u&&t.length>0)break}return n=Ve(n,!i,"\\",Oe),i?`${t}\\${n}`:`${t}${n}`||"."},normalize(e){Ke(e,"path");const t=e.length;if(0===t)return".";let n,i=0,r=!1;const s=e.charCodeAt(0);if(1===t)return Te(s)?"\\":e;if(Oe(s))if(r=!0,Oe(e.charCodeAt(1))){let r=2,s=r;for(;r<t&&!Oe(e.charCodeAt(r));)r++;if(r<t&&r!==s){const o=e.slice(s,r);for(s=r;r<t&&Oe(e.charCodeAt(r));)r++;if(r<t&&r!==s){for(s=r;r<t&&!Oe(e.charCodeAt(r));)r++;if(r===t)return`\\\\${o}\\${e.slice(s)}\\`;r!==s&&(n=`\\\\${o}\\${e.slice(s,r)}`,i=r)}}}else i=1;else Re(s)&&e.charCodeAt(1)===ve&&(n=e.slice(0,2),i=2,t>2&&Oe(e.charCodeAt(2))&&(r=!0,i=3));let o=i<t?Ve(e.slice(i),!r,"\\",Oe):"";return 0!==o.length||r||(o="."),o.length>0&&Oe(e.charCodeAt(t-1))&&(o+="\\"),void 0===n?r?`\\${o}`:o:r?`${n}\\${o}`:`${n}${o}`},isAbsolute(e){Ke(e,"path");const t=e.length;if(0===t)return!1;const n=e.charCodeAt(0);return Oe(n)||t>2&&Re(n)&&e.charCodeAt(1)===ve&&Oe(e.charCodeAt(2))},join(...e){if(0===e.length)return".";let t,n;for(let i=0;i<e.length;++i){const r=e[i];Ke(r,"path"),r.length>0&&(void 0===t?t=n=r:t+=`\\${r}`)}if(void 0===t)return".";let i=!0,r=0;if("string"==typeof n&&Oe(n.charCodeAt(0))){++r;const e=n.length;e>1&&Oe(n.charCodeAt(1))&&(++r,e>2&&(Oe(n.charCodeAt(2))?++r:i=!1))}if(i){for(;r<t.length&&Oe(t.charCodeAt(r));)r++;r>=2&&(t=`\\${t.slice(r)}`)}return Pe.normalize(t)},relative(e,t){if(Ke(e,"from"),Ke(t,"to"),e===t)return"";const n=Pe.resolve(e),i=Pe.resolve(t);if(n===i)return"";if((e=n.toLowerCase())===(t=i.toLowerCase()))return"";let r=0;for(;r<e.length&&e.charCodeAt(r)===we;)r++;let s=e.length;for(;s-1>r&&e.charCodeAt(s-1)===we;)s--;const o=s-r;let a=0;for(;a<t.length&&t.charCodeAt(a)===we;)a++;let l=t.length;for(;l-1>a&&t.charCodeAt(l-1)===we;)l--;const u=l-a,h=o<u?o:u;let d=-1,c=0;for(;c<h;c++){const n=e.charCodeAt(r+c);if(n!==t.charCodeAt(a+c))break;n===we&&(d=c)}if(c!==h){if(-1===d)return i}else{if(u>h){if(t.charCodeAt(a+c)===we)return i.slice(a+c+1);if(2===c)return i.slice(a+c)}o>h&&(e.charCodeAt(r+c)===we?d=c:2===c&&(d=3)),-1===d&&(d=0)}let m="";for(c=r+d+1;c<=s;++c)c!==s&&e.charCodeAt(c)!==we||(m+=0===m.length?"..":"\\..");return a+=d,m.length>0?`${m}${i.slice(a,l)}`:(i.charCodeAt(a)===we&&++a,i.slice(a,l))},toNamespacedPath(e){if("string"!=typeof e)return e;if(0===e.length)return"";const t=Pe.resolve(e);if(t.length<=2)return e;if(t.charCodeAt(0)===we){if(t.charCodeAt(1)===we){const e=t.charCodeAt(2);if(63!==e&&e!==ye)return`\\\\?\\UNC\\${t.slice(2)}`}}else if(Re(t.charCodeAt(0))&&t.charCodeAt(1)===ve&&t.charCodeAt(2)===we)return`\\\\?\\${t}`;return e},dirname(e){Ke(e,"path");const t=e.length;if(0===t)return".";let n=-1,i=0;const r=e.charCodeAt(0);if(1===t)return Oe(r)?e:".";if(Oe(r)){if(n=i=1,Oe(e.charCodeAt(1))){let r=2,s=r;for(;r<t&&!Oe(e.charCodeAt(r));)r++;if(r<t&&r!==s){for(s=r;r<t&&Oe(e.charCodeAt(r));)r++;if(r<t&&r!==s){for(s=r;r<t&&!Oe(e.charCodeAt(r));)r++;if(r===t)return e;r!==s&&(n=i=r+1)}}}}else Re(r)&&e.charCodeAt(1)===ve&&(n=t>2&&Oe(e.charCodeAt(2))?3:2,i=n);let s=-1,o=!0;for(let n=t-1;n>=i;--n)if(Oe(e.charCodeAt(n))){if(!o){s=n;break}}else o=!1;if(-1===s){if(-1===n)return".";s=n}return e.slice(0,s)},basename(e,t){void 0!==t&&Ke(t,"ext"),Ke(e,"path");let n,i=0,r=-1,s=!0;if(e.length>=2&&Re(e.charCodeAt(0))&&e.charCodeAt(1)===ve&&(i=2),void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let o=t.length-1,a=-1;for(n=e.length-1;n>=i;--n){const l=e.charCodeAt(n);if(Oe(l)){if(!s){i=n+1;break}}else-1===a&&(s=!1,a=n+1),o>=0&&(l===t.charCodeAt(o)?-1==--o&&(r=n):(o=-1,r=a))}return i===r?r=a:-1===r&&(r=e.length),e.slice(i,r)}for(n=e.length-1;n>=i;--n)if(Oe(e.charCodeAt(n))){if(!s){i=n+1;break}}else-1===r&&(s=!1,r=n+1);return-1===r?"":e.slice(i,r)},extname(e){Ke(e,"path");let t=0,n=-1,i=0,r=-1,s=!0,o=0;e.length>=2&&e.charCodeAt(1)===ve&&Re(e.charCodeAt(0))&&(t=i=2);for(let a=e.length-1;a>=t;--a){const t=e.charCodeAt(a);if(Oe(t)){if(!s){i=a+1;break}}else-1===r&&(s=!1,r=a+1),t===ye?-1===n?n=a:1!==o&&(o=1):-1!==n&&(o=-1)}return-1===n||-1===r||0===o||1===o&&n===r-1&&n===i+1?"":e.slice(n,r)},format:Ie.bind(null,"\\"),parse(e){Ke(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const n=e.length;let i=0,r=e.charCodeAt(0);if(1===n)return Oe(r)?(t.root=t.dir=e,t):(t.base=t.name=e,t);if(Oe(r)){if(i=1,Oe(e.charCodeAt(1))){let t=2,r=t;for(;t<n&&!Oe(e.charCodeAt(t));)t++;if(t<n&&t!==r){for(r=t;t<n&&Oe(e.charCodeAt(t));)t++;if(t<n&&t!==r){for(r=t;t<n&&!Oe(e.charCodeAt(t));)t++;t===n?i=t:t!==r&&(i=t+1)}}}}else if(Re(r)&&e.charCodeAt(1)===ve){if(n<=2)return t.root=t.dir=e,t;if(i=2,Oe(e.charCodeAt(2))){if(3===n)return t.root=t.dir=e,t;i=3}}i>0&&(t.root=e.slice(0,i));let s=-1,o=i,a=-1,l=!0,u=e.length-1,h=0;for(;u>=i;--u)if(r=e.charCodeAt(u),Oe(r)){if(!l){o=u+1;break}}else-1===a&&(l=!1,a=u+1),r===ye?-1===s?s=u:1!==h&&(h=1):-1!==s&&(h=-1);return-1!==a&&(-1===s||0===h||1===h&&s===a-1&&s===o+1?t.base=t.name=e.slice(o,a):(t.name=e.slice(o,s),t.base=e.slice(o,a),t.ext=e.slice(s,a))),t.dir=o>0&&o!==i?e.slice(0,o-1):t.root,t},sep:"\\",delimiter:";",win32:null,posix:null},xe={resolve(...e){let t="",n=!1;for(let i=e.length-1;i>=-1&&!n;i--){const r=i>=0?e[i]:be();Ke(r,"path"),0!==r.length&&(t=`${r}/${t}`,n=r.charCodeAt(0)===Ae)}return t=Ve(t,!n,"/",Te),n?`/${t}`:t.length>0?t:"."},normalize(e){if(Ke(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===Ae,n=e.charCodeAt(e.length-1)===Ae;return 0===(e=Ve(e,!t,"/",Te)).length?t?"/":n?"./":".":(n&&(e+="/"),t?`/${e}`:e)},isAbsolute:e=>(Ke(e,"path"),e.length>0&&e.charCodeAt(0)===Ae),join(...e){if(0===e.length)return".";let t;for(let n=0;n<e.length;++n){const i=e[n];Ke(i,"path"),i.length>0&&(void 0===t?t=i:t+=`/${i}`)}return void 0===t?".":xe.normalize(t)},relative(e,t){if(Ke(e,"from"),Ke(t,"to"),e===t)return"";if((e=xe.resolve(e))===(t=xe.resolve(t)))return"";const n=e.length,i=n-1,r=t.length-1,s=i<r?i:r;let o=-1,a=0;for(;a<s;a++){const n=e.charCodeAt(1+a);if(n!==t.charCodeAt(1+a))break;n===Ae&&(o=a)}if(a===s)if(r>s){if(t.charCodeAt(1+a)===Ae)return t.slice(1+a+1);if(0===a)return t.slice(1+a)}else i>s&&(e.charCodeAt(1+a)===Ae?o=a:0===a&&(o=0));let l="";for(a=1+o+1;a<=n;++a)a!==n&&e.charCodeAt(a)!==Ae||(l+=0===l.length?"..":"/..");return`${l}${t.slice(1+o)}`},toNamespacedPath:e=>e,dirname(e){if(Ke(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===Ae;let n=-1,i=!0;for(let t=e.length-1;t>=1;--t)if(e.charCodeAt(t)===Ae){if(!i){n=t;break}}else i=!1;return-1===n?t?"/":".":t&&1===n?"//":e.slice(0,n)},basename(e,t){void 0!==t&&Ke(t,"ext"),Ke(e,"path");let n,i=0,r=-1,s=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let o=t.length-1,a=-1;for(n=e.length-1;n>=0;--n){const l=e.charCodeAt(n);if(l===Ae){if(!s){i=n+1;break}}else-1===a&&(s=!1,a=n+1),o>=0&&(l===t.charCodeAt(o)?-1==--o&&(r=n):(o=-1,r=a))}return i===r?r=a:-1===r&&(r=e.length),e.slice(i,r)}for(n=e.length-1;n>=0;--n)if(e.charCodeAt(n)===Ae){if(!s){i=n+1;break}}else-1===r&&(s=!1,r=n+1);return-1===r?"":e.slice(i,r)},extname(e){Ke(e,"path");let t=-1,n=0,i=-1,r=!0,s=0;for(let o=e.length-1;o>=0;--o){const a=e.charCodeAt(o);if(a!==Ae)-1===i&&(r=!1,i=o+1),a===ye?-1===t?t=o:1!==s&&(s=1):-1!==t&&(s=-1);else if(!r){n=o+1;break}}return-1===t||-1===i||0===s||1===s&&t===i-1&&t===n+1?"":e.slice(t,i)},format:Ie.bind(null,"/"),parse(e){Ke(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const n=e.charCodeAt(0)===Ae;let i;n?(t.root="/",i=1):i=0;let r=-1,s=0,o=-1,a=!0,l=e.length-1,u=0;for(;l>=i;--l){const t=e.charCodeAt(l);if(t!==Ae)-1===o&&(a=!1,o=l+1),t===ye?-1===r?r=l:1!==u&&(u=1):-1!==r&&(u=-1);else if(!a){s=l+1;break}}if(-1!==o){const i=0===s&&n?1:s;-1===r||0===u||1===u&&r===o-1&&r===s+1?t.base=t.name=e.slice(i,o):(t.name=e.slice(i,r),t.base=e.slice(i,o),t.ext=e.slice(r,o))}return s>0?t.dir=e.slice(0,s-1):n&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};xe.win32=Pe.win32=Pe,xe.posix=Pe.posix=xe;"win32"===Ee?Pe.normalize:xe.normalize,"win32"===Ee?Pe.resolve:xe.resolve,"win32"===Ee?Pe.relative:xe.relative,"win32"===Ee?Pe.dirname:xe.dirname,"win32"===Ee?Pe.basename:xe.basename,"win32"===Ee?Pe.extname:xe.extname,"win32"===Ee?Pe.sep:xe.sep;const ke=/^\w[\w\d+.-]*$/,De=/^\//,Fe=/^\/\//;function Ue(e,t){if(!e.scheme&&t)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${e.authority}", path: "${e.path}", query: "${e.query}", fragment: "${e.fragment}"}`);if(e.scheme&&!ke.test(e.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(e.path)if(e.authority){if(!De.test(e.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(Fe.test(e.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}const Be="",qe="/",He=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class We{constructor(e,t,n,i,r,s=!1){"object"==typeof e?(this.scheme=e.scheme||Be,this.authority=e.authority||Be,this.path=e.path||Be,this.query=e.query||Be,this.fragment=e.fragment||Be):(this.scheme=function(e,t){return e||t?e:"file"}(e,s),this.authority=t||Be,this.path=function(e,t){switch(e){case"https":case"http":case"file":t?t[0]!==qe&&(t=qe+t):t=qe}return t}(this.scheme,n||Be),this.query=i||Be,this.fragment=r||Be,Ue(this,s))}static isUri(e){return e instanceof We||!!e&&("string"==typeof e.authority&&"string"==typeof e.fragment&&"string"==typeof e.path&&"string"==typeof e.query&&"string"==typeof e.scheme&&"string"==typeof e.fsPath&&"function"==typeof e.with&&"function"==typeof e.toString)}get fsPath(){return Qe(this,!1)}with(e){if(!e)return this;let{scheme:t,authority:n,path:i,query:r,fragment:s}=e;return void 0===t?t=this.scheme:null===t&&(t=Be),void 0===n?n=this.authority:null===n&&(n=Be),void 0===i?i=this.path:null===i&&(i=Be),void 0===r?r=this.query:null===r&&(r=Be),void 0===s?s=this.fragment:null===s&&(s=Be),t===this.scheme&&n===this.authority&&i===this.path&&r===this.query&&s===this.fragment?this:new je(t,n,i,r,s)}static parse(e,t=!1){const n=He.exec(e);return n?new je(n[2]||Be,et(n[4]||Be),et(n[5]||Be),et(n[7]||Be),et(n[9]||Be),t):new je(Be,Be,Be,Be,Be)}static file(e){let t=Be;if(x&&(e=e.replace(/\\/g,qe)),e[0]===qe&&e[1]===qe){const n=e.indexOf(qe,2);-1===n?(t=e.substring(2),e=qe):(t=e.substring(2,n),e=e.substring(n)||qe)}return new je("file",t,e,Be,Be)}static from(e){const t=new je(e.scheme,e.authority,e.path,e.query,e.fragment);return Ue(t,!0),t}static joinPath(e,...t){if(!e.path)throw new Error("[UriError]: cannot call joinPath on URI without path");let n;return n=x&&"file"===e.scheme?We.file(Pe.join(Qe(e,!0),...t)).path:xe.join(e.path,...t),e.with({path:n})}toString(e=!1){return Xe(this,e)}toJSON(){return this}static revive(e){if(e){if(e instanceof We)return e;{const t=new je(e);return t._formatted=e.external,t._fsPath=e._sep===$e?e.fsPath:null,t}}return e}}const $e=x?1:void 0;class je extends We{constructor(){super(...arguments),this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=Qe(this,!1)),this._fsPath}toString(e=!1){return e?Xe(this,!0):(this._formatted||(this._formatted=Xe(this,!1)),this._formatted)}toJSON(){const e={$mid:1};return this._fsPath&&(e.fsPath=this._fsPath,e._sep=$e),this._formatted&&(e.external=this._formatted),this.path&&(e.path=this.path),this.scheme&&(e.scheme=this.scheme),this.authority&&(e.authority=this.authority),this.query&&(e.query=this.query),this.fragment&&(e.fragment=this.fragment),e}}const Ge={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function ze(e,t){let n,i=-1;for(let r=0;r<e.length;r++){const s=e.charCodeAt(r);if(s>=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57||45===s||46===s||95===s||126===s||t&&47===s)-1!==i&&(n+=encodeURIComponent(e.substring(i,r)),i=-1),void 0!==n&&(n+=e.charAt(r));else{void 0===n&&(n=e.substr(0,r));const t=Ge[s];void 0!==t?(-1!==i&&(n+=encodeURIComponent(e.substring(i,r)),i=-1),n+=t):-1===i&&(i=r)}}return-1!==i&&(n+=encodeURIComponent(e.substring(i))),void 0!==n?n:e}function Ye(e){let t;for(let n=0;n<e.length;n++){const i=e.charCodeAt(n);35===i||63===i?(void 0===t&&(t=e.substr(0,n)),t+=Ge[i]):void 0!==t&&(t+=e[n])}return void 0!==t?t:e}function Qe(e,t){let n;return n=e.authority&&e.path.length>1&&"file"===e.scheme?`//${e.authority}${e.path}`:47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?t?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,x&&(n=n.replace(/\//g,"\\")),n}function Xe(e,t){const n=t?Ye:ze;let i="",{scheme:r,authority:s,path:o,query:a,fragment:l}=e;if(r&&(i+=r,i+=":"),(s||"file"===r)&&(i+=qe,i+=qe),s){let e=s.indexOf("@");if(-1!==e){const t=s.substr(0,e);s=s.substr(e+1),e=t.indexOf(":"),-1===e?i+=n(t,!1):(i+=n(t.substr(0,e),!1),i+=":",i+=n(t.substr(e+1),!1)),i+="@"}s=s.toLowerCase(),e=s.indexOf(":"),-1===e?i+=n(s,!1):(i+=n(s.substr(0,e),!1),i+=s.substr(e))}if(o){if(o.length>=3&&47===o.charCodeAt(0)&&58===o.charCodeAt(2)){const e=o.charCodeAt(1);e>=65&&e<=90&&(o=`/${String.fromCharCode(e+32)}:${o.substr(3)}`)}else if(o.length>=2&&58===o.charCodeAt(1)){const e=o.charCodeAt(0);e>=65&&e<=90&&(o=`${String.fromCharCode(e+32)}:${o.substr(2)}`)}i+=n(o,!0)}return a&&(i+="?",i+=n(a,!1)),l&&(i+="#",i+=t?l:ze(l,!1)),i}function Ze(e){try{return decodeURIComponent(e)}catch(t){return e.length>3?e.substr(0,3)+Ze(e.substr(3)):e}}const Je=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function et(e){return e.match(Je)?e.replace(Je,(e=>Ze(e))):e}class tt{constructor(e,t){this.lineNumber=e,this.column=t}with(e=this.lineNumber,t=this.column){return e===this.lineNumber&&t===this.column?this:new tt(e,t)}delta(e=0,t=0){return this.with(this.lineNumber+e,this.column+t)}equals(e){return tt.equals(this,e)}static equals(e,t){return!e&&!t||!!e&&!!t&&e.lineNumber===t.lineNumber&&e.column===t.column}isBefore(e){return tt.isBefore(this,e)}static isBefore(e,t){return e.lineNumber<t.lineNumber||!(t.lineNumber<e.lineNumber)&&e.column<t.column}isBeforeOrEqual(e){return tt.isBeforeOrEqual(this,e)}static isBeforeOrEqual(e,t){return e.lineNumber<t.lineNumber||!(t.lineNumber<e.lineNumber)&&e.column<=t.column}static compare(e,t){let n=0|e.lineNumber,i=0|t.lineNumber;if(n===i){return(0|e.column)-(0|t.column)}return n-i}clone(){return new tt(this.lineNumber,this.column)}toString(){return"("+this.lineNumber+","+this.column+")"}static lift(e){return new tt(e.lineNumber,e.column)}static isIPosition(e){return e&&"number"==typeof e.lineNumber&&"number"==typeof e.column}}class nt{constructor(e,t,n,i){e>n||e===n&&t>i?(this.startLineNumber=n,this.startColumn=i,this.endLineNumber=e,this.endColumn=t):(this.startLineNumber=e,this.startColumn=t,this.endLineNumber=n,this.endColumn=i)}isEmpty(){return nt.isEmpty(this)}static isEmpty(e){return e.startLineNumber===e.endLineNumber&&e.startColumn===e.endColumn}containsPosition(e){return nt.containsPosition(this,e)}static containsPosition(e,t){return!(t.lineNumber<e.startLineNumber||t.lineNumber>e.endLineNumber)&&(!(t.lineNumber===e.startLineNumber&&t.column<e.startColumn)&&!(t.lineNumber===e.endLineNumber&&t.column>e.endColumn))}containsRange(e){return nt.containsRange(this,e)}static containsRange(e,t){return!(t.startLineNumber<e.startLineNumber||t.endLineNumber<e.startLineNumber)&&(!(t.startLineNumber>e.endLineNumber||t.endLineNumber>e.endLineNumber)&&(!(t.startLineNumber===e.startLineNumber&&t.startColumn<e.startColumn)&&!(t.endLineNumber===e.endLineNumber&&t.endColumn>e.endColumn)))}strictContainsRange(e){return nt.strictContainsRange(this,e)}static strictContainsRange(e,t){return!(t.startLineNumber<e.startLineNumber||t.endLineNumber<e.startLineNumber)&&(!(t.startLineNumber>e.endLineNumber||t.endLineNumber>e.endLineNumber)&&(!(t.startLineNumber===e.startLineNumber&&t.startColumn<=e.startColumn)&&!(t.endLineNumber===e.endLineNumber&&t.endColumn>=e.endColumn)))}plusRange(e){return nt.plusRange(this,e)}static plusRange(e,t){let n,i,r,s;return t.startLineNumber<e.startLineNumber?(n=t.startLineNumber,i=t.startColumn):t.startLineNumber===e.startLineNumber?(n=t.startLineNumber,i=Math.min(t.startColumn,e.startColumn)):(n=e.startLineNumber,i=e.startColumn),t.endLineNumber>e.endLineNumber?(r=t.endLineNumber,s=t.endColumn):t.endLineNumber===e.endLineNumber?(r=t.endLineNumber,s=Math.max(t.endColumn,e.endColumn)):(r=e.endLineNumber,s=e.endColumn),new nt(n,i,r,s)}intersectRanges(e){return nt.intersectRanges(this,e)}static intersectRanges(e,t){let n=e.startLineNumber,i=e.startColumn,r=e.endLineNumber,s=e.endColumn,o=t.startLineNumber,a=t.startColumn,l=t.endLineNumber,u=t.endColumn;return n<o?(n=o,i=a):n===o&&(i=Math.max(i,a)),r>l?(r=l,s=u):r===l&&(s=Math.min(s,u)),n>r||n===r&&i>s?null:new nt(n,i,r,s)}equalsRange(e){return nt.equalsRange(this,e)}static equalsRange(e,t){return!!e&&!!t&&e.startLineNumber===t.startLineNumber&&e.startColumn===t.startColumn&&e.endLineNumber===t.endLineNumber&&e.endColumn===t.endColumn}getEndPosition(){return nt.getEndPosition(this)}static getEndPosition(e){return new tt(e.endLineNumber,e.endColumn)}getStartPosition(){return nt.getStartPosition(this)}static getStartPosition(e){return new tt(e.startLineNumber,e.startColumn)}toString(){return"["+this.startLineNumber+","+this.startColumn+" -> "+this.endLineNumber+","+this.endColumn+"]"}setEndPosition(e,t){return new nt(this.startLineNumber,this.startColumn,e,t)}setStartPosition(e,t){return new nt(e,t,this.endLineNumber,this.endColumn)}collapseToStart(){return nt.collapseToStart(this)}static collapseToStart(e){return new nt(e.startLineNumber,e.startColumn,e.startLineNumber,e.startColumn)}static fromPositions(e,t=e){return new nt(e.lineNumber,e.column,t.lineNumber,t.column)}static lift(e){return e?new nt(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn):null}static isIRange(e){return e&&"number"==typeof e.startLineNumber&&"number"==typeof e.startColumn&&"number"==typeof e.endLineNumber&&"number"==typeof e.endColumn}static areIntersectingOrTouching(e,t){return!(e.endLineNumber<t.startLineNumber||e.endLineNumber===t.startLineNumber&&e.endColumn<t.startColumn)&&!(t.endLineNumber<e.startLineNumber||t.endLineNumber===e.startLineNumber&&t.endColumn<e.startColumn)}static areIntersecting(e,t){return!(e.endLineNumber<t.startLineNumber||e.endLineNumber===t.startLineNumber&&e.endColumn<=t.startColumn)&&!(t.endLineNumber<e.startLineNumber||t.endLineNumber===e.startLineNumber&&t.endColumn<=e.startColumn)}static compareRangesUsingStarts(e,t){if(e&&t){const n=0|e.startLineNumber,i=0|t.startLineNumber;if(n===i){const n=0|e.startColumn,i=0|t.startColumn;if(n===i){const n=0|e.endLineNumber,i=0|t.endLineNumber;if(n===i){return(0|e.endColumn)-(0|t.endColumn)}return n-i}return n-i}return n-i}return(e?1:0)-(t?1:0)}static compareRangesUsingEnds(e,t){return e.endLineNumber===t.endLineNumber?e.endColumn===t.endColumn?e.startLineNumber===t.startLineNumber?e.startColumn-t.startColumn:e.startLineNumber-t.startLineNumber:e.endColumn-t.endColumn:e.endLineNumber-t.endLineNumber}static spansMultipleLines(e){return e.endLineNumber>e.startLineNumber}}function it(e,t,n,i){return new Se(e,t,n).ComputeDiff(i)}class rt{constructor(e){const t=[],n=[];for(let i=0,r=e.length;i<r;i++)t[i]=ut(e[i],1),n[i]=ht(e[i],1);this.lines=e,this._startColumns=t,this._endColumns=n}getElements(){const e=[];for(let t=0,n=this.lines.length;t<n;t++)e[t]=this.lines[t].substring(this._startColumns[t]-1,this._endColumns[t]-1);return e}getStrictElement(e){return this.lines[e]}getStartLineNumber(e){return e+1}getEndLineNumber(e){return e+1}createCharSequence(e,t,n){const i=[],r=[],s=[];let o=0;for(let a=t;a<=n;a++){const t=this.lines[a],n=e?this._startColumns[a]:1,l=e?this._endColumns[a]:t.length+1;for(let e=n;e<l;e++)i[o]=t.charCodeAt(e-1),r[o]=a+1,s[o]=e,o++}return new st(i,r,s)}}class st{constructor(e,t,n){this._charCodes=e,this._lineNumbers=t,this._columns=n}getElements(){return this._charCodes}getStartLineNumber(e){return this._lineNumbers[e]}getStartColumn(e){return this._columns[e]}getEndLineNumber(e){return this._lineNumbers[e]}getEndColumn(e){return this._columns[e]+1}}class ot{constructor(e,t,n,i,r,s,o,a){this.originalStartLineNumber=e,this.originalStartColumn=t,this.originalEndLineNumber=n,this.originalEndColumn=i,this.modifiedStartLineNumber=r,this.modifiedStartColumn=s,this.modifiedEndLineNumber=o,this.modifiedEndColumn=a}static createFromDiffChange(e,t,n){let i,r,s,o,a,l,u,h;return 0===e.originalLength?(i=0,r=0,s=0,o=0):(i=t.getStartLineNumber(e.originalStart),r=t.getStartColumn(e.originalStart),s=t.getEndLineNumber(e.originalStart+e.originalLength-1),o=t.getEndColumn(e.originalStart+e.originalLength-1)),0===e.modifiedLength?(a=0,l=0,u=0,h=0):(a=n.getStartLineNumber(e.modifiedStart),l=n.getStartColumn(e.modifiedStart),u=n.getEndLineNumber(e.modifiedStart+e.modifiedLength-1),h=n.getEndColumn(e.modifiedStart+e.modifiedLength-1)),new ot(i,r,s,o,a,l,u,h)}}class at{constructor(e,t,n,i,r){this.originalStartLineNumber=e,this.originalEndLineNumber=t,this.modifiedStartLineNumber=n,this.modifiedEndLineNumber=i,this.charChanges=r}static createFromDiffResult(e,t,n,i,r,s,o){let a,l,u,h,d;if(0===t.originalLength?(a=n.getStartLineNumber(t.originalStart)-1,l=0):(a=n.getStartLineNumber(t.originalStart),l=n.getEndLineNumber(t.originalStart+t.originalLength-1)),0===t.modifiedLength?(u=i.getStartLineNumber(t.modifiedStart)-1,h=0):(u=i.getStartLineNumber(t.modifiedStart),h=i.getEndLineNumber(t.modifiedStart+t.modifiedLength-1)),s&&t.originalLength>0&&t.originalLength<20&&t.modifiedLength>0&&t.modifiedLength<20&&r()){const s=n.createCharSequence(e,t.originalStart,t.originalStart+t.originalLength-1),a=i.createCharSequence(e,t.modifiedStart,t.modifiedStart+t.modifiedLength-1);let l=it(s,a,r,!0).changes;o&&(l=function(e){if(e.length<=1)return e;const t=[e[0]];let n=t[0];for(let i=1,r=e.length;i<r;i++){const r=e[i],s=r.originalStart-(n.originalStart+n.originalLength),o=r.modifiedStart-(n.modifiedStart+n.modifiedLength);Math.min(s,o)<3?(n.originalLength=r.originalStart+r.originalLength-n.originalStart,n.modifiedLength=r.modifiedStart+r.modifiedLength-n.modifiedStart):(t.push(r),n=r)}return t}(l)),d=[];for(let e=0,t=l.length;e<t;e++)d.push(ot.createFromDiffChange(l[e],s,a))}return new at(a,l,u,h,d)}}class lt{constructor(e,t,n){this.shouldComputeCharChanges=n.shouldComputeCharChanges,this.shouldPostProcessCharChanges=n.shouldPostProcessCharChanges,this.shouldIgnoreTrimWhitespace=n.shouldIgnoreTrimWhitespace,this.shouldMakePrettyDiff=n.shouldMakePrettyDiff,this.originalLines=e,this.modifiedLines=t,this.original=new rt(e),this.modified=new rt(t),this.continueLineDiff=dt(n.maxComputationTime),this.continueCharDiff=dt(0===n.maxComputationTime?0:Math.min(n.maxComputationTime,5e3))}computeDiff(){if(1===this.original.lines.length&&0===this.original.lines[0].length)return 1===this.modified.lines.length&&0===this.modified.lines[0].length?{quitEarly:!1,changes:[]}:{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:1,modifiedStartLineNumber:1,modifiedEndLineNumber:this.modified.lines.length,charChanges:[{modifiedEndColumn:0,modifiedEndLineNumber:0,modifiedStartColumn:0,modifiedStartLineNumber:0,originalEndColumn:0,originalEndLineNumber:0,originalStartColumn:0,originalStartLineNumber:0}]}]};if(1===this.modified.lines.length&&0===this.modified.lines[0].length)return{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:this.original.lines.length,modifiedStartLineNumber:1,modifiedEndLineNumber:1,charChanges:[{modifiedEndColumn:0,modifiedEndLineNumber:0,modifiedStartColumn:0,modifiedStartLineNumber:0,originalEndColumn:0,originalEndLineNumber:0,originalStartColumn:0,originalStartLineNumber:0}]}]};const e=it(this.original,this.modified,this.continueLineDiff,this.shouldMakePrettyDiff),t=e.changes,n=e.quitEarly;if(this.shouldIgnoreTrimWhitespace){const e=[];for(let n=0,i=t.length;n<i;n++)e.push(at.createFromDiffResult(this.shouldIgnoreTrimWhitespace,t[n],this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges));return{quitEarly:n,changes:e}}const i=[];let r=0,s=0;for(let e=-1,n=t.length;e<n;e++){const o=e+1<n?t[e+1]:null,a=o?o.originalStart:this.originalLines.length,l=o?o.modifiedStart:this.modifiedLines.length;for(;r<a&&s<l;){const e=this.originalLines[r],t=this.modifiedLines[s];if(e!==t){{let n=ut(e,1),o=ut(t,1);for(;n>1&&o>1;){if(e.charCodeAt(n-2)!==t.charCodeAt(o-2))break;n--,o--}(n>1||o>1)&&this._pushTrimWhitespaceCharChange(i,r+1,1,n,s+1,1,o)}{let n=ht(e,1),o=ht(t,1);const a=e.length+1,l=t.length+1;for(;n<a&&o<l;){if(e.charCodeAt(n-1)!==e.charCodeAt(o-1))break;n++,o++}(n<a||o<l)&&this._pushTrimWhitespaceCharChange(i,r+1,n,a,s+1,o,l)}}r++,s++}o&&(i.push(at.createFromDiffResult(this.shouldIgnoreTrimWhitespace,o,this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges)),r+=o.originalLength,s+=o.modifiedLength)}return{quitEarly:n,changes:i}}_pushTrimWhitespaceCharChange(e,t,n,i,r,s,o){if(this._mergeTrimWhitespaceCharChange(e,t,n,i,r,s,o))return;let a;this.shouldComputeCharChanges&&(a=[new ot(t,n,t,i,r,s,r,o)]),e.push(new at(t,t,r,r,a))}_mergeTrimWhitespaceCharChange(e,t,n,i,r,s,o){const a=e.length;if(0===a)return!1;const l=e[a-1];return 0!==l.originalEndLineNumber&&0!==l.modifiedEndLineNumber&&(l.originalEndLineNumber+1===t&&l.modifiedEndLineNumber+1===r&&(l.originalEndLineNumber=t,l.modifiedEndLineNumber=r,this.shouldComputeCharChanges&&l.charChanges&&l.charChanges.push(new ot(t,n,t,i,r,s,r,o)),!0))}}function ut(e,t){const n=function(e){for(let t=0,n=e.length;t<n;t++){const n=e.charCodeAt(t);if(32!==n&&9!==n)return t}return-1}(e);return-1===n?t:n+1}function ht(e,t){const n=function(e,t=e.length-1){for(let n=t;n>=0;n--){const t=e.charCodeAt(n);if(32!==t&&9!==t)return n}return-1}(e);return-1===n?t:n+2}function dt(e){if(0===e)return()=>!0;const t=Date.now();return()=>Date.now()-t<e}function ct(e){return e<0?0:e>255?255:0|e}function mt(e){return e<0?0:e>4294967295?4294967295:0|e}class ft{constructor(e,t){this._prefixSumIndexOfResultBrand=void 0,this.index=e,this.remainder=t}}class gt{constructor(e){this.values=e,this.prefixSum=new Uint32Array(e.length),this.prefixSumValidIndex=new Int32Array(1),this.prefixSumValidIndex[0]=-1}insertValues(e,t){e=mt(e);const n=this.values,i=this.prefixSum,r=t.length;return 0!==r&&(this.values=new Uint32Array(n.length+r),this.values.set(n.subarray(0,e),0),this.values.set(n.subarray(e),e+r),this.values.set(t,e),e-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=e-1),this.prefixSum=new Uint32Array(this.values.length),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(i.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}changeValue(e,t){return e=mt(e),t=mt(t),this.values[e]!==t&&(this.values[e]=t,e-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=e-1),!0)}removeValues(e,t){e=mt(e),t=mt(t);const n=this.values,i=this.prefixSum;if(e>=n.length)return!1;let r=n.length-e;return t>=r&&(t=r),0!==t&&(this.values=new Uint32Array(n.length-t),this.values.set(n.subarray(0,e),0),this.values.set(n.subarray(e+t),e),this.prefixSum=new Uint32Array(this.values.length),e-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=e-1),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(i.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}getTotalSum(){return 0===this.values.length?0:this._getPrefixSum(this.values.length-1)}getPrefixSum(e){return e<0?0:(e=mt(e),this._getPrefixSum(e))}_getPrefixSum(e){if(e<=this.prefixSumValidIndex[0])return this.prefixSum[e];let t=this.prefixSumValidIndex[0]+1;0===t&&(this.prefixSum[0]=this.values[0],t++),e>=this.values.length&&(e=this.values.length-1);for(let n=t;n<=e;n++)this.prefixSum[n]=this.prefixSum[n-1]+this.values[n];return this.prefixSumValidIndex[0]=Math.max(this.prefixSumValidIndex[0],e),this.prefixSum[e]}getIndexOf(e){e=Math.floor(e),this.getTotalSum();let t=0,n=this.values.length-1,i=0,r=0,s=0;for(;t<=n;)if(i=t+(n-t)/2|0,r=this.prefixSum[i],s=r-this.values[i],e<s)n=i-1;else{if(!(e>=r))break;t=i+1}return new ft(i,e-s)}}class _t{constructor(e,t,n,i){this._uri=e,this._lines=t,this._eol=n,this._versionId=i,this._lineStarts=null,this._cachedTextValue=null}dispose(){this._lines.length=0}get version(){return this._versionId}getText(){return null===this._cachedTextValue&&(this._cachedTextValue=this._lines.join(this._eol)),this._cachedTextValue}onEvents(e){e.eol&&e.eol!==this._eol&&(this._eol=e.eol,this._lineStarts=null);const t=e.changes;for(const e of t)this._acceptDeleteRange(e.range),this._acceptInsertText(new tt(e.range.startLineNumber,e.range.startColumn),e.text);this._versionId=e.versionId,this._cachedTextValue=null}_ensureLineStarts(){if(!this._lineStarts){const e=this._eol.length,t=this._lines.length,n=new Uint32Array(t);for(let i=0;i<t;i++)n[i]=this._lines[i].length+e;this._lineStarts=new gt(n)}}_setLineText(e,t){this._lines[e]=t,this._lineStarts&&this._lineStarts.changeValue(e,this._lines[e].length+this._eol.length)}_acceptDeleteRange(e){if(e.startLineNumber!==e.endLineNumber)this._setLineText(e.startLineNumber-1,this._lines[e.startLineNumber-1].substring(0,e.startColumn-1)+this._lines[e.endLineNumber-1].substring(e.endColumn-1)),this._lines.splice(e.startLineNumber,e.endLineNumber-e.startLineNumber),this._lineStarts&&this._lineStarts.removeValues(e.startLineNumber,e.endLineNumber-e.startLineNumber);else{if(e.startColumn===e.endColumn)return;this._setLineText(e.startLineNumber-1,this._lines[e.startLineNumber-1].substring(0,e.startColumn-1)+this._lines[e.startLineNumber-1].substring(e.endColumn-1))}}_acceptInsertText(e,t){if(0===t.length)return;let n=t.split(/\r\n|\r|\n/);if(1===n.length)return void this._setLineText(e.lineNumber-1,this._lines[e.lineNumber-1].substring(0,e.column-1)+n[0]+this._lines[e.lineNumber-1].substring(e.column-1));n[n.length-1]+=this._lines[e.lineNumber-1].substring(e.column-1),this._setLineText(e.lineNumber-1,this._lines[e.lineNumber-1].substring(0,e.column-1)+n[0]);let i=new Uint32Array(n.length-1);for(let t=1;t<n.length;t++)this._lines.splice(e.lineNumber+t-1,0,n[t]),i[t-1]=n[t].length+this._eol.length;this._lineStarts&&this._lineStarts.insertValues(e.lineNumber,i)}}const pt=function(e=""){let t="(-?\\d*\\.\\d\\w*)|([^";for(const n of"`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?")e.indexOf(n)>=0||(t+="\\"+n);return t+="\\s]+)",new RegExp(t,"g")}();const Ct={maxLen:1e3,windowSize:15,timeBudget:150};function Lt(e,t,n,i,r=Ct){if(n.length>r.maxLen){let s=e-r.maxLen/2;return s<0?s=0:i+=s,Lt(e,t,n=n.substring(s,e+r.maxLen/2),i,r)}const s=Date.now(),o=e-1-i;let a=-1,l=null;for(let e=1;!(Date.now()-s>=r.timeBudget);e++){const i=o-r.windowSize*e;t.lastIndex=Math.max(0,i);const s=St(t,n,o,a);if(!s&&l)break;if(l=s,i<=0)break;a=i}if(l){let e={word:l[0],startColumn:i+1+l.index,endColumn:i+1+l.index+l[0].length};return t.lastIndex=0,e}return null}function St(e,t,n,i){let r;for(;r=e.exec(t);){const t=r.index||0;if(t<=n&&e.lastIndex>=n)return r;if(i>0&&t>i)return null}return null}class bt{constructor(e){let t=ct(e);this._defaultValue=t,this._asciiMap=bt._createAsciiMap(t),this._map=new Map}static _createAsciiMap(e){let t=new Uint8Array(256);for(let n=0;n<256;n++)t[n]=e;return t}set(e,t){let n=ct(t);e>=0&&e<256?this._asciiMap[e]=n:this._map.set(e,n)}get(e){return e>=0&&e<256?this._asciiMap[e]:this._map.get(e)||this._defaultValue}}class Nt{constructor(e,t,n){const i=new Uint8Array(e*t);for(let r=0,s=e*t;r<s;r++)i[r]=n;this._data=i,this.rows=e,this.cols=t}get(e,t){return this._data[e*this.cols+t]}set(e,t,n){this._data[e*this.cols+t]=n}}class Et{constructor(e){let t=0,n=0;for(let i=0,r=e.length;i<r;i++){let[r,s,o]=e[i];s>t&&(t=s),r>n&&(n=r),o>n&&(n=o)}t++,n++;let i=new Nt(n,t,0);for(let t=0,n=e.length;t<n;t++){let[n,r,s]=e[t];i.set(n,r,s)}this._states=i,this._maxCharCode=t}nextState(e,t){return t<0||t>=this._maxCharCode?0:this._states.get(e,t)}}let yt=null;let At=null;class wt{static _createLink(e,t,n,i,r){let s=r-1;do{const n=t.charCodeAt(s);if(2!==e.get(n))break;s--}while(s>i);if(i>0){const e=t.charCodeAt(i-1),n=t.charCodeAt(s);(40===e&&41===n||91===e&&93===n||123===e&&125===n)&&s--}return{range:{startLineNumber:n,startColumn:i+1,endLineNumber:n,endColumn:s+2},url:t.substring(i,s+1)}}static computeLinks(e,t=function(){return null===yt&&(yt=new Et([[1,104,2],[1,72,2],[1,102,6],[1,70,6],[2,116,3],[2,84,3],[3,116,4],[3,84,4],[4,112,5],[4,80,5],[5,115,9],[5,83,9],[5,58,10],[6,105,7],[6,73,7],[7,108,8],[7,76,8],[8,101,9],[8,69,9],[9,58,10],[10,47,11],[11,47,12]])),yt}()){const n=function(){if(null===At){At=new bt(0);const e=" \t<>'\"ã€ã€‚ï½¡ï½¤ï¼Œï¼Žï¼šï¼›â€˜ã€ˆã€Œã€Žã€”ï¼ˆï¼»ï½›ï½¢ï½£ï½ï¼½ï¼‰ã€•ã€ã€ã€‰â€™ï½€ï½žâ€¦";for(let t=0;t<e.length;t++)At.set(e.charCodeAt(t),1);const t=".,;";for(let e=0;e<t.length;e++)At.set(t.charCodeAt(e),2)}return At}();let i=[];for(let r=1,s=e.getLineCount();r<=s;r++){const s=e.getLineContent(r),o=s.length;let a=0,l=0,u=0,h=1,d=!1,c=!1,m=!1,f=!1;for(;a<o;){let e=!1;const o=s.charCodeAt(a);if(13===h){let t;switch(o){case 40:d=!0,t=0;break;case 41:t=d?0:1;break;case 91:m=!0,c=!0,t=0;break;case 93:m=!1,t=c?0:1;break;case 123:f=!0,t=0;break;case 125:t=f?0:1;break;case 39:t=34===u||96===u?0:1;break;case 34:t=39===u||96===u?0:1;break;case 96:t=39===u||34===u?0:1;break;case 42:t=42===u?1:0;break;case 124:t=124===u?1:0;break;case 32:t=m?0:1;break;default:t=n.get(o)}1===t&&(i.push(wt._createLink(n,s,r,l,a)),e=!0)}else if(12===h){let t;91===o?(c=!0,t=0):t=n.get(o),1===t?e=!0:h=13}else h=t.nextState(h,o),0===h&&(e=!0);e&&(h=1,d=!1,c=!1,f=!1,l=a+1,u=o),a++}13===h&&i.push(wt._createLink(n,s,r,l,o))}return i}}class vt{constructor(){this._defaultValueSet=[["true","false"],["True","False"],["Private","Public","Friend","ReadOnly","Partial","Protected","WriteOnly"],["public","protected","private"]]}navigateValueSet(e,t,n,i,r){if(e&&t){let n=this.doNavigateValueSet(t,r);if(n)return{range:e,value:n}}if(n&&i){let e=this.doNavigateValueSet(i,r);if(e)return{range:n,value:e}}return null}doNavigateValueSet(e,t){let n=this.numberReplace(e,t);return null!==n?n:this.textReplace(e,t)}numberReplace(e,t){let n=Math.pow(10,e.length-(e.lastIndexOf(".")+1)),i=Number(e),r=parseFloat(e);return isNaN(i)||isNaN(r)||i!==r?null:0!==i||t?(i=Math.floor(i*n),i+=t?n:-n,String(i/n)):null}textReplace(e,t){return this.valueSetsReplace(this._defaultValueSet,e,t)}valueSetsReplace(e,t,n){let i=null;for(let r=0,s=e.length;null===i&&r<s;r++)i=this.valueSetReplace(e[r],t,n);return i}valueSetReplace(e,t,n){let i=e.indexOf(t);return i>=0?(i+=n?1:-1,i<0?i=e.length-1:i%=e.length,e[i]):null}}vt.INSTANCE=new vt;const Mt=Object.freeze((function(e,t){const n=setTimeout(e.bind(t),0);return{dispose(){clearTimeout(n)}}}));var Kt;!function(e){e.isCancellationToken=function(t){return t===e.None||t===e.Cancelled||(t instanceof Ot||!(!t||"object"!=typeof t)&&("boolean"==typeof t.isCancellationRequested&&"function"==typeof t.onCancellationRequested))},e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:B.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:Mt})}(Kt||(Kt={}));class Ot{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Mt:(this._emitter||(this._emitter=new H),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}}class Tt{constructor(e){this._token=void 0,this._parentListener=void 0,this._parentListener=e&&e.onCancellationRequested(this.cancel,this)}get token(){return this._token||(this._token=new Ot),this._token}cancel(){this._token?this._token instanceof Ot&&this._token.cancel():this._token=Kt.Cancelled}dispose(e=!1){e&&this.cancel(),this._parentListener&&this._parentListener.dispose(),this._token?this._token instanceof Ot&&this._token.dispose():this._token=Kt.None}}class Rt{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(e,t){this._keyCodeToStr[e]=t,this._strToKeyCode[t.toLowerCase()]=e}keyCodeToStr(e){return this._keyCodeToStr[e]}strToKeyCode(e){return this._strToKeyCode[e.toLowerCase()]||0}}const Vt=new Rt,It=new Rt,Pt=new Rt,xt=new Array(230),kt={},Dt=[],Ft=Object.create(null),Ut=Object.create(null),Bt=[],qt=[];for(let e=0;e<=193;e++)Bt[e]=-1;for(let e=0;e<=126;e++)qt[e]=-1;var Ht,Wt,$t,jt,Gt,zt,Yt,Qt,Xt,Zt,Jt,en,tn,nn,rn,sn,on,an,ln,un,hn,dn,cn,mn,fn,gn,_n,pn,Cn,Ln,Sn,bn,Nn,En,yn,An;!function(){const e="",t=[[0,1,0,"None",0,"unknown",0,"VK_UNKNOWN",e,e],[0,1,1,"Hyper",0,e,0,e,e,e],[0,1,2,"Super",0,e,0,e,e,e],[0,1,3,"Fn",0,e,0,e,e,e],[0,1,4,"FnLock",0,e,0,e,e,e],[0,1,5,"Suspend",0,e,0,e,e,e],[0,1,6,"Resume",0,e,0,e,e,e],[0,1,7,"Turbo",0,e,0,e,e,e],[0,1,8,"Sleep",0,e,0,"VK_SLEEP",e,e],[0,1,9,"WakeUp",0,e,0,e,e,e],[31,0,10,"KeyA",31,"A",65,"VK_A",e,e],[32,0,11,"KeyB",32,"B",66,"VK_B",e,e],[33,0,12,"KeyC",33,"C",67,"VK_C",e,e],[34,0,13,"KeyD",34,"D",68,"VK_D",e,e],[35,0,14,"KeyE",35,"E",69,"VK_E",e,e],[36,0,15,"KeyF",36,"F",70,"VK_F",e,e],[37,0,16,"KeyG",37,"G",71,"VK_G",e,e],[38,0,17,"KeyH",38,"H",72,"VK_H",e,e],[39,0,18,"KeyI",39,"I",73,"VK_I",e,e],[40,0,19,"KeyJ",40,"J",74,"VK_J",e,e],[41,0,20,"KeyK",41,"K",75,"VK_K",e,e],[42,0,21,"KeyL",42,"L",76,"VK_L",e,e],[43,0,22,"KeyM",43,"M",77,"VK_M",e,e],[44,0,23,"KeyN",44,"N",78,"VK_N",e,e],[45,0,24,"KeyO",45,"O",79,"VK_O",e,e],[46,0,25,"KeyP",46,"P",80,"VK_P",e,e],[47,0,26,"KeyQ",47,"Q",81,"VK_Q",e,e],[48,0,27,"KeyR",48,"R",82,"VK_R",e,e],[49,0,28,"KeyS",49,"S",83,"VK_S",e,e],[50,0,29,"KeyT",50,"T",84,"VK_T",e,e],[51,0,30,"KeyU",51,"U",85,"VK_U",e,e],[52,0,31,"KeyV",52,"V",86,"VK_V",e,e],[53,0,32,"KeyW",53,"W",87,"VK_W",e,e],[54,0,33,"KeyX",54,"X",88,"VK_X",e,e],[55,0,34,"KeyY",55,"Y",89,"VK_Y",e,e],[56,0,35,"KeyZ",56,"Z",90,"VK_Z",e,e],[22,0,36,"Digit1",22,"1",49,"VK_1",e,e],[23,0,37,"Digit2",23,"2",50,"VK_2",e,e],[24,0,38,"Digit3",24,"3",51,"VK_3",e,e],[25,0,39,"Digit4",25,"4",52,"VK_4",e,e],[26,0,40,"Digit5",26,"5",53,"VK_5",e,e],[27,0,41,"Digit6",27,"6",54,"VK_6",e,e],[28,0,42,"Digit7",28,"7",55,"VK_7",e,e],[29,0,43,"Digit8",29,"8",56,"VK_8",e,e],[30,0,44,"Digit9",30,"9",57,"VK_9",e,e],[21,0,45,"Digit0",21,"0",48,"VK_0",e,e],[3,1,46,"Enter",3,"Enter",13,"VK_RETURN",e,e],[9,1,47,"Escape",9,"Escape",27,"VK_ESCAPE",e,e],[1,1,48,"Backspace",1,"Backspace",8,"VK_BACK",e,e],[2,1,49,"Tab",2,"Tab",9,"VK_TAB",e,e],[10,1,50,"Space",10,"Space",32,"VK_SPACE",e,e],[83,0,51,"Minus",83,"-",189,"VK_OEM_MINUS","-","OEM_MINUS"],[81,0,52,"Equal",81,"=",187,"VK_OEM_PLUS","=","OEM_PLUS"],[87,0,53,"BracketLeft",87,"[",219,"VK_OEM_4","[","OEM_4"],[89,0,54,"BracketRight",89,"]",221,"VK_OEM_6","]","OEM_6"],[88,0,55,"Backslash",88,"\\",220,"VK_OEM_5","\\","OEM_5"],[0,0,56,"IntlHash",0,e,0,e,e,e],[80,0,57,"Semicolon",80,";",186,"VK_OEM_1",";","OEM_1"],[90,0,58,"Quote",90,"'",222,"VK_OEM_7","'","OEM_7"],[86,0,59,"Backquote",86,"`",192,"VK_OEM_3","`","OEM_3"],[82,0,60,"Comma",82,",",188,"VK_OEM_COMMA",",","OEM_COMMA"],[84,0,61,"Period",84,".",190,"VK_OEM_PERIOD",".","OEM_PERIOD"],[85,0,62,"Slash",85,"/",191,"VK_OEM_2","/","OEM_2"],[8,1,63,"CapsLock",8,"CapsLock",20,"VK_CAPITAL",e,e],[59,1,64,"F1",59,"F1",112,"VK_F1",e,e],[60,1,65,"F2",60,"F2",113,"VK_F2",e,e],[61,1,66,"F3",61,"F3",114,"VK_F3",e,e],[62,1,67,"F4",62,"F4",115,"VK_F4",e,e],[63,1,68,"F5",63,"F5",116,"VK_F5",e,e],[64,1,69,"F6",64,"F6",117,"VK_F6",e,e],[65,1,70,"F7",65,"F7",118,"VK_F7",e,e],[66,1,71,"F8",66,"F8",119,"VK_F8",e,e],[67,1,72,"F9",67,"F9",120,"VK_F9",e,e],[68,1,73,"F10",68,"F10",121,"VK_F10",e,e],[69,1,74,"F11",69,"F11",122,"VK_F11",e,e],[70,1,75,"F12",70,"F12",123,"VK_F12",e,e],[0,1,76,"PrintScreen",0,e,0,e,e,e],[79,1,77,"ScrollLock",79,"ScrollLock",145,"VK_SCROLL",e,e],[7,1,78,"Pause",7,"PauseBreak",19,"VK_PAUSE",e,e],[19,1,79,"Insert",19,"Insert",45,"VK_INSERT",e,e],[14,1,80,"Home",14,"Home",36,"VK_HOME",e,e],[11,1,81,"PageUp",11,"PageUp",33,"VK_PRIOR",e,e],[20,1,82,"Delete",20,"Delete",46,"VK_DELETE",e,e],[13,1,83,"End",13,"End",35,"VK_END",e,e],[12,1,84,"PageDown",12,"PageDown",34,"VK_NEXT",e,e],[17,1,85,"ArrowRight",17,"RightArrow",39,"VK_RIGHT","Right",e],[15,1,86,"ArrowLeft",15,"LeftArrow",37,"VK_LEFT","Left",e],[18,1,87,"ArrowDown",18,"DownArrow",40,"VK_DOWN","Down",e],[16,1,88,"ArrowUp",16,"UpArrow",38,"VK_UP","Up",e],[78,1,89,"NumLock",78,"NumLock",144,"VK_NUMLOCK",e,e],[108,1,90,"NumpadDivide",108,"NumPad_Divide",111,"VK_DIVIDE",e,e],[103,1,91,"NumpadMultiply",103,"NumPad_Multiply",106,"VK_MULTIPLY",e,e],[106,1,92,"NumpadSubtract",106,"NumPad_Subtract",109,"VK_SUBTRACT",e,e],[104,1,93,"NumpadAdd",104,"NumPad_Add",107,"VK_ADD",e,e],[3,1,94,"NumpadEnter",3,e,0,e,e,e],[94,1,95,"Numpad1",94,"NumPad1",97,"VK_NUMPAD1",e,e],[95,1,96,"Numpad2",95,"NumPad2",98,"VK_NUMPAD2",e,e],[96,1,97,"Numpad3",96,"NumPad3",99,"VK_NUMPAD3",e,e],[97,1,98,"Numpad4",97,"NumPad4",100,"VK_NUMPAD4",e,e],[98,1,99,"Numpad5",98,"NumPad5",101,"VK_NUMPAD5",e,e],[99,1,100,"Numpad6",99,"NumPad6",102,"VK_NUMPAD6",e,e],[100,1,101,"Numpad7",100,"NumPad7",103,"VK_NUMPAD7",e,e],[101,1,102,"Numpad8",101,"NumPad8",104,"VK_NUMPAD8",e,e],[102,1,103,"Numpad9",102,"NumPad9",105,"VK_NUMPAD9",e,e],[93,1,104,"Numpad0",93,"NumPad0",96,"VK_NUMPAD0",e,e],[107,1,105,"NumpadDecimal",107,"NumPad_Decimal",110,"VK_DECIMAL",e,e],[92,0,106,"IntlBackslash",92,"OEM_102",226,"VK_OEM_102",e,e],[58,1,107,"ContextMenu",58,"ContextMenu",93,e,e,e],[0,1,108,"Power",0,e,0,e,e,e],[0,1,109,"NumpadEqual",0,e,0,e,e,e],[71,1,110,"F13",71,"F13",124,"VK_F13",e,e],[72,1,111,"F14",72,"F14",125,"VK_F14",e,e],[73,1,112,"F15",73,"F15",126,"VK_F15",e,e],[74,1,113,"F16",74,"F16",127,"VK_F16",e,e],[75,1,114,"F17",75,"F17",128,"VK_F17",e,e],[76,1,115,"F18",76,"F18",129,"VK_F18",e,e],[77,1,116,"F19",77,"F19",130,"VK_F19",e,e],[0,1,117,"F20",0,e,0,"VK_F20",e,e],[0,1,118,"F21",0,e,0,"VK_F21",e,e],[0,1,119,"F22",0,e,0,"VK_F22",e,e],[0,1,120,"F23",0,e,0,"VK_F23",e,e],[0,1,121,"F24",0,e,0,"VK_F24",e,e],[0,1,122,"Open",0,e,0,e,e,e],[0,1,123,"Help",0,e,0,e,e,e],[0,1,124,"Select",0,e,0,e,e,e],[0,1,125,"Again",0,e,0,e,e,e],[0,1,126,"Undo",0,e,0,e,e,e],[0,1,127,"Cut",0,e,0,e,e,e],[0,1,128,"Copy",0,e,0,e,e,e],[0,1,129,"Paste",0,e,0,e,e,e],[0,1,130,"Find",0,e,0,e,e,e],[0,1,131,"AudioVolumeMute",112,"AudioVolumeMute",173,"VK_VOLUME_MUTE",e,e],[0,1,132,"AudioVolumeUp",113,"AudioVolumeUp",175,"VK_VOLUME_UP",e,e],[0,1,133,"AudioVolumeDown",114,"AudioVolumeDown",174,"VK_VOLUME_DOWN",e,e],[105,1,134,"NumpadComma",105,"NumPad_Separator",108,"VK_SEPARATOR",e,e],[110,0,135,"IntlRo",110,"ABNT_C1",193,"VK_ABNT_C1",e,e],[0,1,136,"KanaMode",0,e,0,e,e,e],[0,0,137,"IntlYen",0,e,0,e,e,e],[0,1,138,"Convert",0,e,0,e,e,e],[0,1,139,"NonConvert",0,e,0,e,e,e],[0,1,140,"Lang1",0,e,0,e,e,e],[0,1,141,"Lang2",0,e,0,e,e,e],[0,1,142,"Lang3",0,e,0,e,e,e],[0,1,143,"Lang4",0,e,0,e,e,e],[0,1,144,"Lang5",0,e,0,e,e,e],[0,1,145,"Abort",0,e,0,e,e,e],[0,1,146,"Props",0,e,0,e,e,e],[0,1,147,"NumpadParenLeft",0,e,0,e,e,e],[0,1,148,"NumpadParenRight",0,e,0,e,e,e],[0,1,149,"NumpadBackspace",0,e,0,e,e,e],[0,1,150,"NumpadMemoryStore",0,e,0,e,e,e],[0,1,151,"NumpadMemoryRecall",0,e,0,e,e,e],[0,1,152,"NumpadMemoryClear",0,e,0,e,e,e],[0,1,153,"NumpadMemoryAdd",0,e,0,e,e,e],[0,1,154,"NumpadMemorySubtract",0,e,0,e,e,e],[0,1,155,"NumpadClear",0,e,0,e,e,e],[0,1,156,"NumpadClearEntry",0,e,0,e,e,e],[5,1,0,e,5,"Ctrl",17,"VK_CONTROL",e,e],[4,1,0,e,4,"Shift",16,"VK_SHIFT",e,e],[6,1,0,e,6,"Alt",18,"VK_MENU",e,e],[57,1,0,e,57,"Meta",0,"VK_COMMAND",e,e],[5,1,157,"ControlLeft",5,e,0,"VK_LCONTROL",e,e],[4,1,158,"ShiftLeft",4,e,0,"VK_LSHIFT",e,e],[6,1,159,"AltLeft",6,e,0,"VK_LMENU",e,e],[57,1,160,"MetaLeft",57,e,0,"VK_LWIN",e,e],[5,1,161,"ControlRight",5,e,0,"VK_RCONTROL",e,e],[4,1,162,"ShiftRight",4,e,0,"VK_RSHIFT",e,e],[6,1,163,"AltRight",6,e,0,"VK_RMENU",e,e],[57,1,164,"MetaRight",57,e,0,"VK_RWIN",e,e],[0,1,165,"BrightnessUp",0,e,0,e,e,e],[0,1,166,"BrightnessDown",0,e,0,e,e,e],[0,1,167,"MediaPlay",0,e,0,e,e,e],[0,1,168,"MediaRecord",0,e,0,e,e,e],[0,1,169,"MediaFastForward",0,e,0,e,e,e],[0,1,170,"MediaRewind",0,e,0,e,e,e],[114,1,171,"MediaTrackNext",119,"MediaTrackNext",176,"VK_MEDIA_NEXT_TRACK",e,e],[115,1,172,"MediaTrackPrevious",120,"MediaTrackPrevious",177,"VK_MEDIA_PREV_TRACK",e,e],[116,1,173,"MediaStop",121,"MediaStop",178,"VK_MEDIA_STOP",e,e],[0,1,174,"Eject",0,e,0,e,e,e],[117,1,175,"MediaPlayPause",122,"MediaPlayPause",179,"VK_MEDIA_PLAY_PAUSE",e,e],[0,1,176,"MediaSelect",123,"LaunchMediaPlayer",181,"VK_MEDIA_LAUNCH_MEDIA_SELECT",e,e],[0,1,177,"LaunchMail",124,"LaunchMail",180,"VK_MEDIA_LAUNCH_MAIL",e,e],[0,1,178,"LaunchApp2",125,"LaunchApp2",183,"VK_MEDIA_LAUNCH_APP2",e,e],[0,1,179,"LaunchApp1",0,e,0,"VK_MEDIA_LAUNCH_APP1",e,e],[0,1,180,"SelectTask",0,e,0,e,e,e],[0,1,181,"LaunchScreenSaver",0,e,0,e,e,e],[0,1,182,"BrowserSearch",115,"BrowserSearch",170,"VK_BROWSER_SEARCH",e,e],[0,1,183,"BrowserHome",116,"BrowserHome",172,"VK_BROWSER_HOME",e,e],[112,1,184,"BrowserBack",117,"BrowserBack",166,"VK_BROWSER_BACK",e,e],[113,1,185,"BrowserForward",118,"BrowserForward",167,"VK_BROWSER_FORWARD",e,e],[0,1,186,"BrowserStop",0,e,0,"VK_BROWSER_STOP",e,e],[0,1,187,"BrowserRefresh",0,e,0,"VK_BROWSER_REFRESH",e,e],[0,1,188,"BrowserFavorites",0,e,0,"VK_BROWSER_FAVORITES",e,e],[0,1,189,"ZoomToggle",0,e,0,e,e,e],[0,1,190,"MailReply",0,e,0,e,e,e],[0,1,191,"MailForward",0,e,0,e,e,e],[0,1,192,"MailSend",0,e,0,e,e,e],[109,1,0,e,109,"KeyInComposition",229,e,e,e],[111,1,0,e,111,"ABNT_C2",194,"VK_ABNT_C2",e,e],[91,1,0,e,91,"OEM_8",223,"VK_OEM_8",e,e],[0,1,0,e,0,e,0,"VK_CLEAR",e,e],[0,1,0,e,0,e,0,"VK_KANA",e,e],[0,1,0,e,0,e,0,"VK_HANGUL",e,e],[0,1,0,e,0,e,0,"VK_JUNJA",e,e],[0,1,0,e,0,e,0,"VK_FINAL",e,e],[0,1,0,e,0,e,0,"VK_HANJA",e,e],[0,1,0,e,0,e,0,"VK_KANJI",e,e],[0,1,0,e,0,e,0,"VK_CONVERT",e,e],[0,1,0,e,0,e,0,"VK_NONCONVERT",e,e],[0,1,0,e,0,e,0,"VK_ACCEPT",e,e],[0,1,0,e,0,e,0,"VK_MODECHANGE",e,e],[0,1,0,e,0,e,0,"VK_SELECT",e,e],[0,1,0,e,0,e,0,"VK_PRINT",e,e],[0,1,0,e,0,e,0,"VK_EXECUTE",e,e],[0,1,0,e,0,e,0,"VK_SNAPSHOT",e,e],[0,1,0,e,0,e,0,"VK_HELP",e,e],[0,1,0,e,0,e,0,"VK_APPS",e,e],[0,1,0,e,0,e,0,"VK_PROCESSKEY",e,e],[0,1,0,e,0,e,0,"VK_PACKET",e,e],[0,1,0,e,0,e,0,"VK_DBE_SBCSCHAR",e,e],[0,1,0,e,0,e,0,"VK_DBE_DBCSCHAR",e,e],[0,1,0,e,0,e,0,"VK_ATTN",e,e],[0,1,0,e,0,e,0,"VK_CRSEL",e,e],[0,1,0,e,0,e,0,"VK_EXSEL",e,e],[0,1,0,e,0,e,0,"VK_EREOF",e,e],[0,1,0,e,0,e,0,"VK_PLAY",e,e],[0,1,0,e,0,e,0,"VK_ZOOM",e,e],[0,1,0,e,0,e,0,"VK_NONAME",e,e],[0,1,0,e,0,e,0,"VK_PA1",e,e],[0,1,0,e,0,e,0,"VK_OEM_CLEAR",e,e]];let n=[],i=[];for(const e of t){const[t,r,s,o,a,l,u,h,d,c]=e;if(i[s]||(i[s]=!0,Dt[s]=o,Ft[o]=s,Ut[o.toLowerCase()]=s,r&&(Bt[s]=a,0!==a&&3!==a&&5!==a&&4!==a&&6!==a&&57!==a&&(qt[a]=s))),!n[a]){if(n[a]=!0,!l)throw new Error(`String representation missing for key code ${a} around scan code ${o}`);Vt.define(a,l),It.define(a,d||l),Pt.define(a,c||d||l)}u&&(xt[u]=a),h&&(kt[h]=a)}qt[3]=46}(),function(e){e.toString=function(e){return Vt.keyCodeToStr(e)},e.fromString=function(e){return Vt.strToKeyCode(e)},e.toUserSettingsUS=function(e){return It.keyCodeToStr(e)},e.toUserSettingsGeneral=function(e){return Pt.keyCodeToStr(e)},e.fromUserSettings=function(e){return It.strToKeyCode(e)||Pt.strToKeyCode(e)},e.toElectronAccelerator=function(e){if(e>=93&&e<=108)return null;switch(e){case 16:return"Up";case 18:return"Down";case 15:return"Left";case 17:return"Right"}return Vt.keyCodeToStr(e)}}(Ht||(Ht={}));class wn extends nt{constructor(e,t,n,i){super(e,t,n,i),this.selectionStartLineNumber=e,this.selectionStartColumn=t,this.positionLineNumber=n,this.positionColumn=i}toString(){return"["+this.selectionStartLineNumber+","+this.selectionStartColumn+" -> "+this.positionLineNumber+","+this.positionColumn+"]"}equalsSelection(e){return wn.selectionsEqual(this,e)}static selectionsEqual(e,t){return e.selectionStartLineNumber===t.selectionStartLineNumber&&e.selectionStartColumn===t.selectionStartColumn&&e.positionLineNumber===t.positionLineNumber&&e.positionColumn===t.positionColumn}getDirection(){return this.selectionStartLineNumber===this.startLineNumber&&this.selectionStartColumn===this.startColumn?0:1}setEndPosition(e,t){return 0===this.getDirection()?new wn(this.startLineNumber,this.startColumn,e,t):new wn(e,t,this.startLineNumber,this.startColumn)}getPosition(){return new tt(this.positionLineNumber,this.positionColumn)}setStartPosition(e,t){return 0===this.getDirection()?new wn(e,t,this.endLineNumber,this.endColumn):new wn(this.endLineNumber,this.endColumn,e,t)}static fromPositions(e,t=e){return new wn(e.lineNumber,e.column,t.lineNumber,t.column)}static liftSelection(e){return new wn(e.selectionStartLineNumber,e.selectionStartColumn,e.positionLineNumber,e.positionColumn)}static selectionsArrEqual(e,t){if(e&&!t||!e&&t)return!1;if(!e&&!t)return!0;if(e.length!==t.length)return!1;for(let n=0,i=e.length;n<i;n++)if(!this.selectionsEqual(e[n],t[n]))return!1;return!0}static isISelection(e){return e&&"number"==typeof e.selectionStartLineNumber&&"number"==typeof e.selectionStartColumn&&"number"==typeof e.positionLineNumber&&"number"==typeof e.positionColumn}static createWithDirection(e,t,n,i,r){return 0===r?new wn(e,t,n,i):new wn(n,i,e,t)}}class vn{constructor(e,t,n){this._tokenBrand=void 0,this.offset=0|e,this.type=t,this.language=n}toString(){return"("+this.offset+", "+this.type+")"}}!function(e){e[e.Unknown=0]="Unknown",e[e.Disabled=1]="Disabled",e[e.Enabled=2]="Enabled"}(Wt||(Wt={})),function(e){e[e.KeepWhitespace=1]="KeepWhitespace",e[e.InsertAsSnippet=4]="InsertAsSnippet"}($t||($t={})),function(e){e[e.Method=0]="Method",e[e.Function=1]="Function",e[e.Constructor=2]="Constructor",e[e.Field=3]="Field",e[e.Variable=4]="Variable",e[e.Class=5]="Class",e[e.Struct=6]="Struct",e[e.Interface=7]="Interface",e[e.Module=8]="Module",e[e.Property=9]="Property",e[e.Event=10]="Event",e[e.Operator=11]="Operator",e[e.Unit=12]="Unit",e[e.Value=13]="Value",e[e.Constant=14]="Constant",e[e.Enum=15]="Enum",e[e.EnumMember=16]="EnumMember",e[e.Keyword=17]="Keyword",e[e.Text=18]="Text",e[e.Color=19]="Color",e[e.File=20]="File",e[e.Reference=21]="Reference",e[e.Customcolor=22]="Customcolor",e[e.Folder=23]="Folder",e[e.TypeParameter=24]="TypeParameter",e[e.User=25]="User",e[e.Issue=26]="Issue",e[e.Snippet=27]="Snippet"}(jt||(jt={})),function(e){e[e.Deprecated=1]="Deprecated"}(Gt||(Gt={})),function(e){e[e.Invoke=0]="Invoke",e[e.TriggerCharacter=1]="TriggerCharacter",e[e.TriggerForIncompleteCompletions=2]="TriggerForIncompleteCompletions"}(zt||(zt={})),function(e){e[e.EXACT=0]="EXACT",e[e.ABOVE=1]="ABOVE",e[e.BELOW=2]="BELOW"}(Yt||(Yt={})),function(e){e[e.NotSet=0]="NotSet",e[e.ContentFlush=1]="ContentFlush",e[e.RecoverFromMarkers=2]="RecoverFromMarkers",e[e.Explicit=3]="Explicit",e[e.Paste=4]="Paste",e[e.Undo=5]="Undo",e[e.Redo=6]="Redo"}(Qt||(Qt={})),function(e){e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"}(Xt||(Xt={})),function(e){e[e.Text=0]="Text",e[e.Read=1]="Read",e[e.Write=2]="Write"}(Zt||(Zt={})),function(e){e[e.None=0]="None",e[e.Keep=1]="Keep",e[e.Brackets=2]="Brackets",e[e.Advanced=3]="Advanced",e[e.Full=4]="Full"}(Jt||(Jt={})),function(e){e[e.acceptSuggestionOnCommitCharacter=0]="acceptSuggestionOnCommitCharacter",e[e.acceptSuggestionOnEnter=1]="acceptSuggestionOnEnter",e[e.accessibilitySupport=2]="accessibilitySupport",e[e.accessibilityPageSize=3]="accessibilityPageSize",e[e.ariaLabel=4]="ariaLabel",e[e.autoClosingBrackets=5]="autoClosingBrackets",e[e.autoClosingDelete=6]="autoClosingDelete",e[e.autoClosingOvertype=7]="autoClosingOvertype",e[e.autoClosingQuotes=8]="autoClosingQuotes",e[e.autoIndent=9]="autoIndent",e[e.automaticLayout=10]="automaticLayout",e[e.autoSurround=11]="autoSurround",e[e.bracketPairColorization=12]="bracketPairColorization",e[e.guides=13]="guides",e[e.codeLens=14]="codeLens",e[e.codeLensFontFamily=15]="codeLensFontFamily",e[e.codeLensFontSize=16]="codeLensFontSize",e[e.colorDecorators=17]="colorDecorators",e[e.columnSelection=18]="columnSelection",e[e.comments=19]="comments",e[e.contextmenu=20]="contextmenu",e[e.copyWithSyntaxHighlighting=21]="copyWithSyntaxHighlighting",e[e.cursorBlinking=22]="cursorBlinking",e[e.cursorSmoothCaretAnimation=23]="cursorSmoothCaretAnimation",e[e.cursorStyle=24]="cursorStyle",e[e.cursorSurroundingLines=25]="cursorSurroundingLines",e[e.cursorSurroundingLinesStyle=26]="cursorSurroundingLinesStyle",e[e.cursorWidth=27]="cursorWidth",e[e.disableLayerHinting=28]="disableLayerHinting",e[e.disableMonospaceOptimizations=29]="disableMonospaceOptimizations",e[e.domReadOnly=30]="domReadOnly",e[e.dragAndDrop=31]="dragAndDrop",e[e.emptySelectionClipboard=32]="emptySelectionClipboard",e[e.extraEditorClassName=33]="extraEditorClassName",e[e.fastScrollSensitivity=34]="fastScrollSensitivity",e[e.find=35]="find",e[e.fixedOverflowWidgets=36]="fixedOverflowWidgets",e[e.folding=37]="folding",e[e.foldingStrategy=38]="foldingStrategy",e[e.foldingHighlight=39]="foldingHighlight",e[e.foldingImportsByDefault=40]="foldingImportsByDefault",e[e.unfoldOnClickAfterEndOfLine=41]="unfoldOnClickAfterEndOfLine",e[e.fontFamily=42]="fontFamily",e[e.fontInfo=43]="fontInfo",e[e.fontLigatures=44]="fontLigatures",e[e.fontSize=45]="fontSize",e[e.fontWeight=46]="fontWeight",e[e.formatOnPaste=47]="formatOnPaste",e[e.formatOnType=48]="formatOnType",e[e.glyphMargin=49]="glyphMargin",e[e.gotoLocation=50]="gotoLocation",e[e.hideCursorInOverviewRuler=51]="hideCursorInOverviewRuler",e[e.hover=52]="hover",e[e.inDiffEditor=53]="inDiffEditor",e[e.inlineSuggest=54]="inlineSuggest",e[e.letterSpacing=55]="letterSpacing",e[e.lightbulb=56]="lightbulb",e[e.lineDecorationsWidth=57]="lineDecorationsWidth",e[e.lineHeight=58]="lineHeight",e[e.lineNumbers=59]="lineNumbers",e[e.lineNumbersMinChars=60]="lineNumbersMinChars",e[e.linkedEditing=61]="linkedEditing",e[e.links=62]="links",e[e.matchBrackets=63]="matchBrackets",e[e.minimap=64]="minimap",e[e.mouseStyle=65]="mouseStyle",e[e.mouseWheelScrollSensitivity=66]="mouseWheelScrollSensitivity",e[e.mouseWheelZoom=67]="mouseWheelZoom",e[e.multiCursorMergeOverlapping=68]="multiCursorMergeOverlapping",e[e.multiCursorModifier=69]="multiCursorModifier",e[e.multiCursorPaste=70]="multiCursorPaste",e[e.occurrencesHighlight=71]="occurrencesHighlight",e[e.overviewRulerBorder=72]="overviewRulerBorder",e[e.overviewRulerLanes=73]="overviewRulerLanes",e[e.padding=74]="padding",e[e.parameterHints=75]="parameterHints",e[e.peekWidgetDefaultFocus=76]="peekWidgetDefaultFocus",e[e.definitionLinkOpensInPeek=77]="definitionLinkOpensInPeek",e[e.quickSuggestions=78]="quickSuggestions",e[e.quickSuggestionsDelay=79]="quickSuggestionsDelay",e[e.readOnly=80]="readOnly",e[e.renameOnType=81]="renameOnType",e[e.renderControlCharacters=82]="renderControlCharacters",e[e.renderFinalNewline=83]="renderFinalNewline",e[e.renderLineHighlight=84]="renderLineHighlight",e[e.renderLineHighlightOnlyWhenFocus=85]="renderLineHighlightOnlyWhenFocus",e[e.renderValidationDecorations=86]="renderValidationDecorations",e[e.renderWhitespace=87]="renderWhitespace",e[e.revealHorizontalRightPadding=88]="revealHorizontalRightPadding",e[e.roundedSelection=89]="roundedSelection",e[e.rulers=90]="rulers",e[e.scrollbar=91]="scrollbar",e[e.scrollBeyondLastColumn=92]="scrollBeyondLastColumn",e[e.scrollBeyondLastLine=93]="scrollBeyondLastLine",e[e.scrollPredominantAxis=94]="scrollPredominantAxis",e[e.selectionClipboard=95]="selectionClipboard",e[e.selectionHighlight=96]="selectionHighlight",e[e.selectOnLineNumbers=97]="selectOnLineNumbers",e[e.showFoldingControls=98]="showFoldingControls",e[e.showUnused=99]="showUnused",e[e.snippetSuggestions=100]="snippetSuggestions",e[e.smartSelect=101]="smartSelect",e[e.smoothScrolling=102]="smoothScrolling",e[e.stickyTabStops=103]="stickyTabStops",e[e.stopRenderingLineAfter=104]="stopRenderingLineAfter",e[e.suggest=105]="suggest",e[e.suggestFontSize=106]="suggestFontSize",e[e.suggestLineHeight=107]="suggestLineHeight",e[e.suggestOnTriggerCharacters=108]="suggestOnTriggerCharacters",e[e.suggestSelection=109]="suggestSelection",e[e.tabCompletion=110]="tabCompletion",e[e.tabIndex=111]="tabIndex",e[e.unusualLineTerminators=112]="unusualLineTerminators",e[e.useShadowDOM=113]="useShadowDOM",e[e.useTabStops=114]="useTabStops",e[e.wordSeparators=115]="wordSeparators",e[e.wordWrap=116]="wordWrap",e[e.wordWrapBreakAfterCharacters=117]="wordWrapBreakAfterCharacters",e[e.wordWrapBreakBeforeCharacters=118]="wordWrapBreakBeforeCharacters",e[e.wordWrapColumn=119]="wordWrapColumn",e[e.wordWrapOverride1=120]="wordWrapOverride1",e[e.wordWrapOverride2=121]="wordWrapOverride2",e[e.wrappingIndent=122]="wrappingIndent",e[e.wrappingStrategy=123]="wrappingStrategy",e[e.showDeprecated=124]="showDeprecated",e[e.inlayHints=125]="inlayHints",e[e.editorClassName=126]="editorClassName",e[e.pixelRatio=127]="pixelRatio",e[e.tabFocusMode=128]="tabFocusMode",e[e.layoutInfo=129]="layoutInfo",e[e.wrappingInfo=130]="wrappingInfo"}(en||(en={})),function(e){e[e.TextDefined=0]="TextDefined",e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"}(tn||(tn={})),function(e){e[e.LF=0]="LF",e[e.CRLF=1]="CRLF"}(nn||(nn={})),function(e){e[e.None=0]="None",e[e.Indent=1]="Indent",e[e.IndentOutdent=2]="IndentOutdent",e[e.Outdent=3]="Outdent"}(rn||(rn={})),function(e){e[e.Other=0]="Other",e[e.Type=1]="Type",e[e.Parameter=2]="Parameter"}(sn||(sn={})),function(e){e[e.Automatic=0]="Automatic",e[e.Explicit=1]="Explicit"}(on||(on={})),function(e){e[e.DependsOnKbLayout=-1]="DependsOnKbLayout",e[e.Unknown=0]="Unknown",e[e.Backspace=1]="Backspace",e[e.Tab=2]="Tab",e[e.Enter=3]="Enter",e[e.Shift=4]="Shift",e[e.Ctrl=5]="Ctrl",e[e.Alt=6]="Alt",e[e.PauseBreak=7]="PauseBreak",e[e.CapsLock=8]="CapsLock",e[e.Escape=9]="Escape",e[e.Space=10]="Space",e[e.PageUp=11]="PageUp",e[e.PageDown=12]="PageDown",e[e.End=13]="End",e[e.Home=14]="Home",e[e.LeftArrow=15]="LeftArrow",e[e.UpArrow=16]="UpArrow",e[e.RightArrow=17]="RightArrow",e[e.DownArrow=18]="DownArrow",e[e.Insert=19]="Insert",e[e.Delete=20]="Delete",e[e.Digit0=21]="Digit0",e[e.Digit1=22]="Digit1",e[e.Digit2=23]="Digit2",e[e.Digit3=24]="Digit3",e[e.Digit4=25]="Digit4",e[e.Digit5=26]="Digit5",e[e.Digit6=27]="Digit6",e[e.Digit7=28]="Digit7",e[e.Digit8=29]="Digit8",e[e.Digit9=30]="Digit9",e[e.KeyA=31]="KeyA",e[e.KeyB=32]="KeyB",e[e.KeyC=33]="KeyC",e[e.KeyD=34]="KeyD",e[e.KeyE=35]="KeyE",e[e.KeyF=36]="KeyF",e[e.KeyG=37]="KeyG",e[e.KeyH=38]="KeyH",e[e.KeyI=39]="KeyI",e[e.KeyJ=40]="KeyJ",e[e.KeyK=41]="KeyK",e[e.KeyL=42]="KeyL",e[e.KeyM=43]="KeyM",e[e.KeyN=44]="KeyN",e[e.KeyO=45]="KeyO",e[e.KeyP=46]="KeyP",e[e.KeyQ=47]="KeyQ",e[e.KeyR=48]="KeyR",e[e.KeyS=49]="KeyS",e[e.KeyT=50]="KeyT",e[e.KeyU=51]="KeyU",e[e.KeyV=52]="KeyV",e[e.KeyW=53]="KeyW",e[e.KeyX=54]="KeyX",e[e.KeyY=55]="KeyY",e[e.KeyZ=56]="KeyZ",e[e.Meta=57]="Meta",e[e.ContextMenu=58]="ContextMenu",e[e.F1=59]="F1",e[e.F2=60]="F2",e[e.F3=61]="F3",e[e.F4=62]="F4",e[e.F5=63]="F5",e[e.F6=64]="F6",e[e.F7=65]="F7",e[e.F8=66]="F8",e[e.F9=67]="F9",e[e.F10=68]="F10",e[e.F11=69]="F11",e[e.F12=70]="F12",e[e.F13=71]="F13",e[e.F14=72]="F14",e[e.F15=73]="F15",e[e.F16=74]="F16",e[e.F17=75]="F17",e[e.F18=76]="F18",e[e.F19=77]="F19",e[e.NumLock=78]="NumLock",e[e.ScrollLock=79]="ScrollLock",e[e.Semicolon=80]="Semicolon",e[e.Equal=81]="Equal",e[e.Comma=82]="Comma",e[e.Minus=83]="Minus",e[e.Period=84]="Period",e[e.Slash=85]="Slash",e[e.Backquote=86]="Backquote",e[e.BracketLeft=87]="BracketLeft",e[e.Backslash=88]="Backslash",e[e.BracketRight=89]="BracketRight",e[e.Quote=90]="Quote",e[e.OEM_8=91]="OEM_8",e[e.IntlBackslash=92]="IntlBackslash",e[e.Numpad0=93]="Numpad0",e[e.Numpad1=94]="Numpad1",e[e.Numpad2=95]="Numpad2",e[e.Numpad3=96]="Numpad3",e[e.Numpad4=97]="Numpad4",e[e.Numpad5=98]="Numpad5",e[e.Numpad6=99]="Numpad6",e[e.Numpad7=100]="Numpad7",e[e.Numpad8=101]="Numpad8",e[e.Numpad9=102]="Numpad9",e[e.NumpadMultiply=103]="NumpadMultiply",e[e.NumpadAdd=104]="NumpadAdd",e[e.NUMPAD_SEPARATOR=105]="NUMPAD_SEPARATOR",e[e.NumpadSubtract=106]="NumpadSubtract",e[e.NumpadDecimal=107]="NumpadDecimal",e[e.NumpadDivide=108]="NumpadDivide",e[e.KEY_IN_COMPOSITION=109]="KEY_IN_COMPOSITION",e[e.ABNT_C1=110]="ABNT_C1",e[e.ABNT_C2=111]="ABNT_C2",e[e.AudioVolumeMute=112]="AudioVolumeMute",e[e.AudioVolumeUp=113]="AudioVolumeUp",e[e.AudioVolumeDown=114]="AudioVolumeDown",e[e.BrowserSearch=115]="BrowserSearch",e[e.BrowserHome=116]="BrowserHome",e[e.BrowserBack=117]="BrowserBack",e[e.BrowserForward=118]="BrowserForward",e[e.MediaTrackNext=119]="MediaTrackNext",e[e.MediaTrackPrevious=120]="MediaTrackPrevious",e[e.MediaStop=121]="MediaStop",e[e.MediaPlayPause=122]="MediaPlayPause",e[e.LaunchMediaPlayer=123]="LaunchMediaPlayer",e[e.LaunchMail=124]="LaunchMail",e[e.LaunchApp2=125]="LaunchApp2",e[e.MAX_VALUE=126]="MAX_VALUE"}(an||(an={})),function(e){e[e.Hint=1]="Hint",e[e.Info=2]="Info",e[e.Warning=4]="Warning",e[e.Error=8]="Error"}(ln||(ln={})),function(e){e[e.Unnecessary=1]="Unnecessary",e[e.Deprecated=2]="Deprecated"}(un||(un={})),function(e){e[e.Inline=1]="Inline",e[e.Gutter=2]="Gutter"}(hn||(hn={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.TEXTAREA=1]="TEXTAREA",e[e.GUTTER_GLYPH_MARGIN=2]="GUTTER_GLYPH_MARGIN",e[e.GUTTER_LINE_NUMBERS=3]="GUTTER_LINE_NUMBERS",e[e.GUTTER_LINE_DECORATIONS=4]="GUTTER_LINE_DECORATIONS",e[e.GUTTER_VIEW_ZONE=5]="GUTTER_VIEW_ZONE",e[e.CONTENT_TEXT=6]="CONTENT_TEXT",e[e.CONTENT_EMPTY=7]="CONTENT_EMPTY",e[e.CONTENT_VIEW_ZONE=8]="CONTENT_VIEW_ZONE",e[e.CONTENT_WIDGET=9]="CONTENT_WIDGET",e[e.OVERVIEW_RULER=10]="OVERVIEW_RULER",e[e.SCROLLBAR=11]="SCROLLBAR",e[e.OVERLAY_WIDGET=12]="OVERLAY_WIDGET",e[e.OUTSIDE_EDITOR=13]="OUTSIDE_EDITOR"}(dn||(dn={})),function(e){e[e.TOP_RIGHT_CORNER=0]="TOP_RIGHT_CORNER",e[e.BOTTOM_RIGHT_CORNER=1]="BOTTOM_RIGHT_CORNER",e[e.TOP_CENTER=2]="TOP_CENTER"}(cn||(cn={})),function(e){e[e.Left=1]="Left",e[e.Center=2]="Center",e[e.Right=4]="Right",e[e.Full=7]="Full"}(mn||(mn={})),function(e){e[e.Off=0]="Off",e[e.On=1]="On",e[e.Relative=2]="Relative",e[e.Interval=3]="Interval",e[e.Custom=4]="Custom"}(fn||(fn={})),function(e){e[e.None=0]="None",e[e.Text=1]="Text",e[e.Blocks=2]="Blocks"}(gn||(gn={})),function(e){e[e.Smooth=0]="Smooth",e[e.Immediate=1]="Immediate"}(_n||(_n={})),function(e){e[e.Auto=1]="Auto",e[e.Hidden=2]="Hidden",e[e.Visible=3]="Visible"}(pn||(pn={})),function(e){e[e.LTR=0]="LTR",e[e.RTL=1]="RTL"}(Cn||(Cn={})),function(e){e[e.Invoke=1]="Invoke",e[e.TriggerCharacter=2]="TriggerCharacter",e[e.ContentChange=3]="ContentChange"}(Ln||(Ln={})),function(e){e[e.File=0]="File",e[e.Module=1]="Module",e[e.Namespace=2]="Namespace",e[e.Package=3]="Package",e[e.Class=4]="Class",e[e.Method=5]="Method",e[e.Property=6]="Property",e[e.Field=7]="Field",e[e.Constructor=8]="Constructor",e[e.Enum=9]="Enum",e[e.Interface=10]="Interface",e[e.Function=11]="Function",e[e.Variable=12]="Variable",e[e.Constant=13]="Constant",e[e.String=14]="String",e[e.Number=15]="Number",e[e.Boolean=16]="Boolean",e[e.Array=17]="Array",e[e.Object=18]="Object",e[e.Key=19]="Key",e[e.Null=20]="Null",e[e.EnumMember=21]="EnumMember",e[e.Struct=22]="Struct",e[e.Event=23]="Event",e[e.Operator=24]="Operator",e[e.TypeParameter=25]="TypeParameter"}(Sn||(Sn={})),function(e){e[e.Deprecated=1]="Deprecated"}(bn||(bn={})),function(e){e[e.Hidden=0]="Hidden",e[e.Blink=1]="Blink",e[e.Smooth=2]="Smooth",e[e.Phase=3]="Phase",e[e.Expand=4]="Expand",e[e.Solid=5]="Solid"}(Nn||(Nn={})),function(e){e[e.Line=1]="Line",e[e.Block=2]="Block",e[e.Underline=3]="Underline",e[e.LineThin=4]="LineThin",e[e.BlockOutline=5]="BlockOutline",e[e.UnderlineThin=6]="UnderlineThin"}(En||(En={})),function(e){e[e.AlwaysGrowsWhenTypingAtEdges=0]="AlwaysGrowsWhenTypingAtEdges",e[e.NeverGrowsWhenTypingAtEdges=1]="NeverGrowsWhenTypingAtEdges",e[e.GrowsOnlyWhenTypingBefore=2]="GrowsOnlyWhenTypingBefore",e[e.GrowsOnlyWhenTypingAfter=3]="GrowsOnlyWhenTypingAfter"}(yn||(yn={})),function(e){e[e.None=0]="None",e[e.Same=1]="Same",e[e.Indent=2]="Indent",e[e.DeepIndent=3]="DeepIndent"}(An||(An={}));class Mn{static chord(e,t){return function(e,t){return(e|(65535&t)<<16>>>0)>>>0}(e,t)}}Mn.CtrlCmd=2048,Mn.Shift=1024,Mn.Alt=512,Mn.WinCtrl=256;var Kn=function(e,t,n,i){return new(n||(n=Promise))((function(r,s){function o(e){try{l(i.next(e))}catch(e){s(e)}}function a(e){try{l(i.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,a)}l((i=i.apply(e,t||[])).next())}))};class On extends _t{get uri(){return this._uri}get eol(){return this._eol}getValue(){return this.getText()}getLinesContent(){return this._lines.slice(0)}getLineCount(){return this._lines.length}getLineContent(e){return this._lines[e-1]}getWordAtPosition(e,t){let n=Lt(e.column,function(e){let t=pt;if(e&&e instanceof RegExp)if(e.global)t=e;else{let n="g";e.ignoreCase&&(n+="i"),e.multiline&&(n+="m"),e.unicode&&(n+="u"),t=new RegExp(e.source,n)}return t.lastIndex=0,t}(t),this._lines[e.lineNumber-1],0);return n?new nt(e.lineNumber,n.startColumn,e.lineNumber,n.endColumn):null}words(e){const t=this._lines,n=this._wordenize.bind(this);let i=0,r="",s=0,o=[];return{*[Symbol.iterator](){for(;;)if(s<o.length){const e=r.substring(o[s].start,o[s].end);s+=1,yield e}else{if(!(i<t.length))break;r=t[i],o=n(r,e),s=0,i+=1}}}}getLineWords(e,t){let n=this._lines[e-1],i=this._wordenize(n,t),r=[];for(const e of i)r.push({word:n.substring(e.start,e.end),startColumn:e.start+1,endColumn:e.end+1});return r}_wordenize(e,t){const n=[];let i;for(t.lastIndex=0;(i=t.exec(e))&&0!==i[0].length;)n.push({start:i.index,end:i.index+i[0].length});return n}getValueInRange(e){if((e=this._validateRange(e)).startLineNumber===e.endLineNumber)return this._lines[e.startLineNumber-1].substring(e.startColumn-1,e.endColumn-1);let t=this._eol,n=e.startLineNumber-1,i=e.endLineNumber-1,r=[];r.push(this._lines[n].substring(e.startColumn-1));for(let e=n+1;e<i;e++)r.push(this._lines[e]);return r.push(this._lines[i].substring(0,e.endColumn-1)),r.join(t)}offsetAt(e){return e=this._validatePosition(e),this._ensureLineStarts(),this._lineStarts.getPrefixSum(e.lineNumber-2)+(e.column-1)}positionAt(e){e=Math.floor(e),e=Math.max(0,e),this._ensureLineStarts();let t=this._lineStarts.getIndexOf(e),n=this._lines[t.index].length;return{lineNumber:1+t.index,column:1+Math.min(t.remainder,n)}}_validateRange(e){const t=this._validatePosition({lineNumber:e.startLineNumber,column:e.startColumn}),n=this._validatePosition({lineNumber:e.endLineNumber,column:e.endColumn});return t.lineNumber!==e.startLineNumber||t.column!==e.startColumn||n.lineNumber!==e.endLineNumber||n.column!==e.endColumn?{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:n.lineNumber,endColumn:n.column}:e}_validatePosition(e){if(!tt.isIPosition(e))throw new Error("bad position");let{lineNumber:t,column:n}=e,i=!1;if(t<1)t=1,n=1,i=!0;else if(t>this._lines.length)t=this._lines.length,n=this._lines[t-1].length+1,i=!0;else{let e=this._lines[t-1].length+1;n<1?(n=1,i=!0):n>e&&(n=e,i=!0)}return i?{lineNumber:t,column:n}:e}}class Tn{constructor(e,t){this._host=e,this._models=Object.create(null),this._foreignModuleFactory=t,this._foreignModule=null}dispose(){this._models=Object.create(null)}_getModel(e){return this._models[e]}_getModels(){let e=[];return Object.keys(this._models).forEach((t=>e.push(this._models[t]))),e}acceptNewModel(e){this._models[e.url]=new On(We.parse(e.url),e.lines,e.EOL,e.versionId)}acceptModelChanged(e,t){if(!this._models[e])return;this._models[e].onEvents(t)}acceptRemovedModel(e){this._models[e]&&delete this._models[e]}computeDiff(e,t,n,i){return Kn(this,void 0,void 0,(function*(){const r=this._getModel(e),s=this._getModel(t);if(!r||!s)return null;const o=r.getLinesContent(),a=s.getLinesContent(),l=new lt(o,a,{shouldComputeCharChanges:!0,shouldPostProcessCharChanges:!0,shouldIgnoreTrimWhitespace:n,shouldMakePrettyDiff:!0,maxComputationTime:i}).computeDiff(),u=!(l.changes.length>0)&&this._modelsAreIdentical(r,s);return{quitEarly:l.quitEarly,identical:u,changes:l.changes}}))}_modelsAreIdentical(e,t){const n=e.getLineCount();if(n!==t.getLineCount())return!1;for(let i=1;i<=n;i++){if(e.getLineContent(i)!==t.getLineContent(i))return!1}return!0}computeMoreMinimalEdits(e,t){return Kn(this,void 0,void 0,(function*(){const n=this._getModel(e);if(!n)return t;const i=[];let r;t=t.slice(0).sort(((e,t)=>{if(e.range&&t.range)return nt.compareRangesUsingStarts(e.range,t.range);return(e.range?0:1)-(t.range?0:1)}));for(let{range:e,text:s,eol:o}of t){if("number"==typeof o&&(r=o),nt.isEmpty(e)&&!s)continue;const t=n.getValueInRange(e);if(s=s.replace(/\r\n|\n|\r/g,n.eol),t===s)continue;if(Math.max(s.length,t.length)>Tn._diffLimit){i.push({range:e,text:s});continue}const a=_e(t,s,!1),l=n.offsetAt(nt.lift(e).getStartPosition());for(const e of a){const t=n.positionAt(l+e.originalStart),r=n.positionAt(l+e.originalStart+e.originalLength),o={text:s.substr(e.modifiedStart,e.modifiedLength),range:{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:r.lineNumber,endColumn:r.column}};n.getValueInRange(o.range)!==o.text&&i.push(o)}}return"number"==typeof r&&i.push({eol:r,text:"",range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0}}),i}))}computeLinks(e){return Kn(this,void 0,void 0,(function*(){let t=this._getModel(e);return t?function(e){return e&&"function"==typeof e.getLineCount&&"function"==typeof e.getLineContent?wt.computeLinks(e):[]}(t):null}))}textualSuggest(e,t,n,i){return Kn(this,void 0,void 0,(function*(){const r=new U(!0),s=new RegExp(n,i),o=new Set;e:for(let n of e){const e=this._getModel(n);if(e)for(let n of e.words(s))if(n!==t&&isNaN(Number(n))&&(o.add(n),o.size>Tn._suggestionsLimit))break e}return{words:Array.from(o),duration:r.elapsed()}}))}computeWordRanges(e,t,n,i){return Kn(this,void 0,void 0,(function*(){let r=this._getModel(e);if(!r)return Object.create(null);const s=new RegExp(n,i),o=Object.create(null);for(let e=t.startLineNumber;e<t.endLineNumber;e++){let t=r.getLineWords(e,s);for(const n of t){if(!isNaN(Number(n.word)))continue;let t=o[n.word];t||(t=[],o[n.word]=t),t.push({startLineNumber:e,startColumn:n.startColumn,endLineNumber:e,endColumn:n.endColumn})}}return o}))}navigateValueSet(e,t,n,i,r){return Kn(this,void 0,void 0,(function*(){let s=this._getModel(e);if(!s)return null;let o=new RegExp(i,r);t.startColumn===t.endColumn&&(t={startLineNumber:t.startLineNumber,startColumn:t.startColumn,endLineNumber:t.endLineNumber,endColumn:t.endColumn+1});let a=s.getValueInRange(t),l=s.getWordAtPosition({lineNumber:t.startLineNumber,column:t.startColumn},o);if(!l)return null;let u=s.getValueInRange(l);return vt.INSTANCE.navigateValueSet(t,a,l,u,n)}))}loadForeignModule(e,t,n){const i=function(e,t){const n=e=>function(){const n=Array.prototype.slice.call(arguments,0);return t(e,n)};let i={};for(const t of e)i[t]=n(t);return i}(n,((e,t)=>this._host.fhr(e,t)));let r={host:i,getMirrorModels:()=>this._getModels()};return this._foreignModuleFactory?(this._foreignModule=this._foreignModuleFactory(r,t),Promise.resolve(W(this._foreignModule))):Promise.reject(new Error("Unexpected usage"))}fmr(e,t){if(!this._foreignModule||"function"!=typeof this._foreignModule[e])return Promise.reject(new Error("Missing requestHandler or method: "+e));try{return Promise.resolve(this._foreignModule[e].apply(this._foreignModule,t))}catch(e){return Promise.reject(e)}}}Tn._diffLimit=1e5,Tn._suggestionsLimit=1e4,"function"==typeof importScripts&&(R.monaco={editor:void 0,languages:void 0,CancellationTokenSource:Tt,Emitter:H,KeyCode:an,KeyMod:Mn,Position:tt,Range:nt,Selection:wn,SelectionDirection:Cn,MarkerSeverity:ln,MarkerTag:un,Uri:We,Token:vn});let Rn=!1;self.onmessage=e=>{Rn||function(e){if(Rn)return;Rn=!0;const t=new ae((e=>{self.postMessage(e)}),(t=>new Tn(t,e)));self.onmessage=e=>{t.onmessage(e.data)}}(null)}})();     €  0GSUB ‹%z  8   TOS/27OF  Œ   `cmapTäq  ô  ®glyf28ææ  !¬  ÑìheadX— S   à   6hhea[­   ¼   $hmtxÃ-ÿþ  ì  locaÂv~  ¤  maxp£      nameÉZä  ó˜  õpostÓú·Ñ  õ  «   ,    ,ÿÿÿþ.               ‚      Ÿ2ª#_<õ ,    |%°€    |%°€ÿÿÿý.-             ‚u         
 
   ÿ          
 0 > DFLT latn                      liga                     +    ¾ Ò   * ¾ Ò     M                         PfEd Àê`ëé,   G                     ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,ÿÿ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,ÿÿ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,  ,           ,     †     €     ,  
  † T       êˆêŒêÇêÉë	ëNëéÿÿ  ê`êŠêêÉêÌëëPÿÿ                 ` d Ô ÔNÔ    Á  ýO ì+ Ø/ ?w (' ~ - ö t ± Î 6M i u ˆ v å Ý Þ_ ¬ “ ¡Y: xK3B@4CJE> £9G       	 
        K L M N Q R      ! # $ % & ' ( ) * + , 0 1 2 3 4 5 7 8 : ; < > D E F G V X Z ] b d e f g h j k l m n o p q r s u w y | } €  ‚ ƒ „ … † ‡ ‰ ‹ Œ  Ž   ’ ” • –  — ˜ ™ ž Ÿ ¢ ¤ ¨ © « ­ ® ¯ ° ´ µ ¶ · ¸ ¹ º » À Â Ã Æ É Ê Ë Ì Ð Ñ Ò Ó Ô × Ù Ú Û Ü ß à ã ä ç è î ò ó ô õ ÷ ø ù ú û ü 	
#$%&)*,-.015678;<=?ADFHPQZ[\]^`abcdhjklopqstxyz{|€ Ä Å Ç È O P _ ` a SI ^ c \ J    Õ z  ªi   T ¿ æL ð  "! ê2 ñ þ Ir 9 Ö { ¥ Ï â ÿ " ï é . / =Nmgef › á [}~STUVWXR  C ë Šv Y ² ¾ ½ ¼ B A @  ³ š œ H W ‘ U  ¦ § í   Í n                                                                                                                                                                                                                                                                         (      ‚  ê`  ê`     êa  êa   Á  êb  êb    êc  êc    êd  êd     êe  êe   ý  êf  êf  O  êg  êg   ì  êh  êh  +  êi  êi   Ø  êj  êj  /  êk  êk   ?  êl  êl  w  êm  êm     ên  ên  (  êo  êo  '  êp  êp   ~  êq  êq   -  êr  êr   ö  ês  ês   t  êt  êt   ±  êu  êu   Î  êv  êv   6  êw  êw  M  êx  êx   i  êy  êy     êz  êz  u  ê{  ê{   ˆ  ê|  ê|   v  ê}  ê}    ê~  ê~   å  ê  ê   Ý  ê€  ê€   Þ  ê  ê  _  ê‚  ê‚   ¬  êƒ  êƒ   “  ê„  ê„   ¡  ê…  ê…  Y  ê†  ê†  :  ê‡  ê‡   x  êˆ  êˆ  K  êŠ  êŠ  3  ê‹  ê‹  B  êŒ  êŒ  @  ê  ê  4  ê  ê  C  ê‘  ê‘  J  ê’  ê’  E  ê“  ê“  >  ê”  ê”   £  ê•  ê•  9  ê–  ê–  G  ê—  ê—     ê˜  ê˜     ê™  ê™     êš  êš     ê›  ê›     êœ  êœ     ê  ê   	  êž  êž   
  êŸ  êŸ     ê   ê      ê¡  ê¡     ê¢  ê¢     ê£  ê£     ê¤  ê¤     ê¥  ê¥     ê¦  ê¦   K  ê§  ê§   L  ê¨  ê¨   M  ê©  ê©   N  êª  êª   Q  ê«  ê«   R  ê¬  ê¬     ê­  ê­     ê®  ê®     ê¯  ê¯     ê°  ê°     ê±  ê±   !  ê²  ê²   #  ê³  ê³   $  ê´  ê´   %  êµ  êµ   &  ê¶  ê¶   '  ê·  ê·   (  ê¸  ê¸   )  ê¹  ê¹   *  êº  êº   +  ê»  ê»   ,  ê¼  ê¼   0  ê½  ê½   1  ê¾  ê¾   2  ê¿  ê¿   3  êÀ  êÀ   4  êÁ  êÁ   5  êÂ  êÂ   7  êÃ  êÃ   8  êÄ  êÄ   :  êÅ  êÅ   ;  êÆ  êÆ   <  êÇ  êÇ   >  êÉ  êÉ   D  êÌ  êÌ   E  êÍ  êÍ   F  êÎ  êÎ   G  êÏ  êÏ   V  êÐ  êÐ   X  êÑ  êÑ   Z  êÒ  êÒ   ]  êÓ  êÓ   b  êÔ  êÔ   d  êÕ  êÕ   e  êÖ  êÖ   f  ê×  ê×   g  êØ  êØ   h  êÙ  êÙ   j  êÚ  êÚ   k  êÛ  êÛ   l  êÜ  êÜ   m  êÝ  êÝ   n  êÞ  êÞ   o  êß  êß   p  êà  êà   q  êá  êá   r  êâ  êâ   s  êã  êã   u  êä  êä   w  êå  êå   y  êæ  êæ   |  êç  êç   }  êè  êè   €  êé  êé     êê  êê   ‚  êë  êë   ƒ  êì  êì   „  êí  êí   …  êî  êî   †  êï  êï   ‡  êð  êð   ‰  êñ  êñ   ‹  êò  êò   Œ  êó  êó     êô  êô   Ž  êõ  êõ     êö  êö     ê÷  ê÷   ’  êø  êø   ”  êù  êù   •  êú  êú   –  êû  êû     êü  êü   —  êý  êý   ˜  êþ  êþ   ™  êÿ  êÿ   ž  ë   ë    Ÿ  ë  ë   ¢  ë  ë   ¤  ë  ë   ¨  ë  ë   ©  ë  ë   «  ë  ë   ­  ë  ë   ®  ë  ë   ¯  ë	  ë	   °  ë  ë   ´  ë  ë   µ  ë  ë   ¶  ë  ë   ·  ë  ë   ¸  ë  ë   ¹  ë  ë   º  ë  ë   »  ë  ë   À  ë  ë   Â  ë  ë   Ã  ë  ë   Æ  ë  ë   É  ë  ë   Ê  ë  ë   Ë  ë  ë   Ì  ë  ë   Ð  ë  ë   Ñ  ë  ë   Ò  ë  ë   Ó  ë  ë   Ô  ë   ë    ×  ë!  ë!   Ù  ë"  ë"   Ú  ë#  ë#   Û  ë$  ë$   Ü  ë%  ë%   ß  ë&  ë&   à  ë'  ë'   ã  ë(  ë(   ä  ë)  ë)   ç  ë*  ë*   è  ë+  ë+   î  ë,  ë,   ò  ë-  ë-   ó  ë.  ë.   ô  ë/  ë/   õ  ë0  ë0   ÷  ë1  ë1   ø  ë2  ë2   ù  ë3  ë3   ú  ë4  ë4   û  ë5  ë5   ü  ë6  ë6     ë7  ë7    ë8  ë8    ë9  ë9    ë:  ë:    ë;  ë;    ë<  ë<    ë=  ë=    ë>  ë>  	  ë?  ë?  
  ë@  ë@    ëA  ëA    ëB  ëB    ëC  ëC    ëD  ëD    ëE  ëE    ëF  ëF    ëG  ëG    ëH  ëH    ëI  ëI    ëJ  ëJ    ëK  ëK    ëL  ëL    ëM  ëM    ëN  ëN    ëP  ëP  #  ëQ  ëQ  $  ëR  ëR  %  ëS  ëS  &  ëT  ëT  )  ëU  ëU  *  ëV  ëV  ,  ëW  ëW  -  ëX  ëX  .  ëY  ëY  0  ëZ  ëZ  1  ë[  ë[  5  ë\  ë\  6  ë]  ë]  7  ë^  ë^  8  ë_  ë_  ;  ë`  ë`  <  ëa  ëa  =  ëb  ëb  ?  ëc  ëc  A  ëd  ëd  D  ëe  ëe  F  ëf  ëf  H  ëg  ëg  P  ëh  ëh  Q  ëi  ëi  Z  ëj  ëj  [  ëk  ëk  \  ël  ël  ]  ëm  ëm  ^  ën  ën  `  ëo  ëo  a  ëp  ëp  b  ëq  ëq  c  ër  ër  d  ës  ës  h  ët  ët  j  ëu  ëu  k  ëv  ëv  l  ëw  ëw  o  ëx  ëx  p  ëy  ëy  q  ëz  ëz  s  ë{  ë{  t  ë|  ë|  x  ë}  ë}  y  ë~  ë~  z  ë  ë  {  ë€  ë€  |  ë  ë  €  ë‚  ë‚    ëƒ  ëƒ   Ä  ë„  ë„   Å  ë…  ë…   Ç  ë†  ë†   È  ë‡  ë‡   O  ëˆ  ëˆ   P  ë‰  ë‰   _  ëŠ  ëŠ   `  ë‹  ë‹   a  ëŒ  ëŒ   S  ë  ë  I  ëŽ  ëŽ   ^  ë  ë   c  ë  ë   \  ë‘  ë‘   J  ë’  ë’     ë“  ë“      ë”  ë”   Õ  ë•  ë•   z  ë–  ë–     ë—  ë—   ª  ë˜  ë˜  i  ë™  ë™     ëš  ëš     ë›  ë›   T  ëœ  ëœ   ¿  ë  ë   æ  ëž  ëž    ëŸ  ëŸ  L  ë   ë    ð  ë¡  ë¡      ë¢  ë¢  "  ë£  ë£  !  ë¤  ë¤   ê  ë¥  ë¥  2  ë¦  ë¦   ñ  ë§  ë§   þ  ë¨  ë¨   I  ë©  ë©  r  ëª  ëª   9  ë«  ë«   Ö  ë¬  ë¬   {  ë­  ë­   ¥  ë®  ë®   Ï  ë¯  ë¯   â  ë°  ë°   ÿ  ë±  ë±   "  ë²  ë²   ï  ë³  ë³   é  ë´  ë´   .  ëµ  ëµ   /  ë¶  ë¶   =  ë·  ë·  N  ë¸  ë¸  m  ë¹  ë¹  g  ëº  ëº  e  ë»  ë»  f  ë¼  ë¼   ›  ë½  ë½    ë¾  ë¾    ë¿  ë¿   á  ëÀ  ëÀ   [  ëÁ  ëÁ  }  ëÂ  ëÂ    ëÃ  ëÃ  ~  ëÄ  ëÄ  S  ëÅ  ëÅ  T  ëÆ  ëÆ  U  ëÇ  ëÇ  V  ëÈ  ëÈ  W  ëÉ  ëÉ  X  ëÊ  ëÊ  R  ëË  ëË     ëÌ  ëÌ   C  ëÍ  ëÍ   ë  ëÎ  ëÎ   Š  ëÏ  ëÏ  v  ëÐ  ëÐ   Y  ëÑ  ëÑ   ²  ëÒ  ëÒ   ¾  ëÓ  ëÓ   ½  ëÔ  ëÔ   ¼  ëÕ  ëÕ   B  ëÖ  ëÖ   A  ë×  ë×   @  ëØ  ëØ     ëÙ  ëÙ   ³  ëÚ  ëÚ   š  ëÛ  ëÛ   œ  ëÜ  ëÜ   H  ëÝ  ëÝ   W  ëÞ  ëÞ    ëß  ëß   ‘  ëà  ëà   U  ëá  ëá     ëâ  ëâ   ¦  ëã  ëã   §  ëä  ëä   í  ëå  ëå     ëæ  ëæ     ëç  ëç   Í  ëè  ëè     ëé  ëé  n       ” Ô è2FZn‚–ª¾àöfÀìV¤Ò$@à”Ô^|äVÂ		0	B	Š	œ	®	À	Ò	ì	þ


(
T
‚
æD²ä2l†Ü6~¢ÎôRŒ°|Æê ’æP°Hl„”¤°ÄÒötŽ¨öf’¤Þ(Xrš®Êà4XŒžNtÂà&Jfˆºæ0\„Ü^ªâ0dÖ2j¼$l²òXz¨ºÖZx”°þ < p ž!!ˆ!Ô""##ª$&$®%B%€&"&œ'6'¸'ö(
(P(t( (à))d)Æ**0*v*Ö++T+x+ä,:,v,¦,ô-¬-Þ.D.¬/ /B/p/¬/þ0>0b0Ä0Ü0ø1Ž1¦1È1ú2^2|2Î2ú3(3n3”3´3Ú4
4j4„4Ú55@5x5¸5ì66L6†6Ê6ò7x7²8,8v9Z9’9Ä:*:N:œ:þ;V;œ;ð<h<¼==$=T=š=Ò=ê>>2>’>Æ?P?®@@`@Œ@òA"AHA A¼AÊB„BêCCˆCÐD@D¦DòEJExE®FFdF¾FæG
G.GNGrGÎHHHHnH¢HÜI:IlI¨J4JžKK`KÖLLHL¢LèMTMrMN~N°NÆNìO6OVOˆOÌP\P~P¸PøQQHQjQ R6RjR–RÜS”S¾T>TzTäUUFU¼UøV<V~VºW WLWpWºXRXªZª\`\Œ\°]:]^]Š]¢]ô^F^ä__._>_N_^_¾_þ`>`ˆ`Îa>aha¶b<bØccZcŒcÈdd`d¬dÌe&eFe„e°f
f(fìg\gþhvhºhö     ÿÿ,,  " 4 d  %4."2?>"'7>32'&4>2'.0=.'&'67676'6.".54>2,(ERE(&\&–)"

"X	‡	

	#<H<#–)E((E)!<

<b

	‹		[	


	0$<##<$0          (  %4'>7.&#>32"2>4.#""#	
%²''.''Å%
	%"'.''.'         %##5#5353qpp©pppp           #3375375#5353'#3ô		
	Î
		×áÏ¼&pp	8
Ÿ		Ÿ
8/&&©––q         Ì   7'573'7'78(88(¼(88(ƒ(89((98(       	  737'5#';^^NNƒ]]NÄÄN      ó 	  77'35#7ƒ]]NÄÄNò^^MN      ñ 	  ?5'#3©^^NÃÃN(]]NN      É á 	  7#'7537É//Š//hh      Ñ Ï 	  7'573#z//iic//      Ñ Ï 	  7'7#53'¢//hhÎ//      É á 	  ?3'#5^//²//ii      	   7'573#?5'#3O<<,éé,<<,éé,<<,,v<<,,      	  %'#735^^NM©^^NÃÃN            %''5'5Af:¨^V%è 5%%K9%!Ka      "  ' 6  %'.#";26?;2>"/37#3#6/3# K
X
L	7
8X	kl9*WELEL,áá	!+	P4}áá        , 5 =  73&'#7347#75367'535#37632.627'7654&#"8^K$&		pIr*- 	O
N!
9		HNOKKŽ		‰&	 ,*YNFO!        
     %'535#3;26'753#73HpJ
¼
ˆ&$n'‚.KKŽ
NOGK99         3 > G  7##"&'&5#'7676=4676763"3'&/226765#7"&462ô
AB	´X&†!.!!.!…  
**
]»!!.!!         ! 4  7&=4.'&326537"&53'76=4>û&BB	c%n		
f&!$)!)
&        á ô     7532#'32654#'3264&+^? "**%+'&8¼XD" 	        " & * . 2 6  #/#337375/#53#573#3#3'3#7#33#3#gg		cc	Œ]Yz^Z–9999999¼8888888
»

»¸©›¡&988      ô    #775'#53ê¨
MMDD–	ôVVôÛKKÒ      G q }  71#";#".'1&'5&754'1&'5&'1&+532>716=&71671>;35#"'1&'5&'1&=6'5&'1.+32#">54&q

	
	”	
"!ô

z
"!      G q ~ Š  71#";#".'1&'5&754'1&'5&'1&+532>716=&71671>;35#"'1&'5&'1&=6'5&'1.+32#632.6'77'7q

	
	”	
6!"Bô

z
	!"          )  %#5'##375'3#5'#'5#553757B	^	B		ô	¨KK–K
8	Kƒ&]K	8
Ká

	–

–*	

	+8K`+		*_         " ? [ d  632516=>&'..6#+0#1.="&=46;27>&'.547&>#"&462X"3)!		
69(		(r			$#		4$:		 &'+:51@:§//&&[	
		

$#		          3#'535'35#ô		ô	áááá	á		áB––&         1 9 I  754&"#'#;726?7'567135#56/7'#5462".5475Ì - 	&(%#"$%)'
m 	Ø  %#$&''              # ' + / 3 7 ; ? C G K O  #5##5##375#535#53#33##373##33#7#33##33#7#33##3'3#–		ô	áááá¼&&%
á		á×¨^^„„^       = y ‚  7.&/&'.?>54'.#"32>?654&/&/&'"&'&'.5&>?6323276?>273#537ë
)	
 "!
	
E			

/W>^W}'		
"! 

T		
	

E	ãW^>W       D €  ?#53#52#".54>?632?>2>?6'6/&/&"#"/.4>?64/&#"¢W=]X1	
"! 

)		

	
	E		¯X]=W#

 !!		'Z	E		
	        á   $ /  7#'##73'&'##51#"&54?4#"56323265¦=7¶"$	Q((Y>>7
&
      % ô  
    %#'777'#'7%’:4‹RP
):4é­S
I¤mb^S
I       ú   %/77Ÿ?8—î¼YO²       
     $ +  7#'773#3##33#'37''#'7737''F––––––––––J" /"Ø%&&h!LZ!       ó Á   ?#'7–QXXoRWW        Á ô   7'57oRWW–QXX        Ï ó   7'7'½RWW–QXX        ô Ï   7'73–QXX½RWW        ý ý   777'7''…UUUUUUU–UUUUUUU        ô ô    735#538¼––ô¼¼©–        –   %#5Ï–      ô     735#53'353#35#8©ƒƒpƒ&©Î¨¨–„ƒ©         â â   72"'.'&46767>–




	á


	
        2".46767>–!1
		!$!			!
1!$!			!$!		         * D  &"11>71676716&'1&'1&'1&'1&'".46767>2´
S!$!			!$!1
	

®			!$!		
1!$!       á â     72>4."7"&462'–##(##E((1K#(##(#K(            2".4>7.34&'>–$<##<H<##<LŸB;$âŸB;$#<H<##<H<#ƒ%Ÿ	7!%Ÿ	7        4 = F O  #375#533264&"##532653264&#"#.#53462"&'2"&4632"&46ô		ô	©+
8%%&
0
©q

8

y	



	ô		ôê%8á,	
		
&©

y







       ô       777'7'''!5!!5!5#35#¼  Çþúþú––––@  ƒKB	9         " , 6  7#5335'#5#4&"##35>.5#'37'3'#5'ƒ8–
 

A	

†%$|%&¨%/		¼	å	



¬dd$$[$dd          $  7''77/73##'57;35##3¢)ƒ&„&K&ƒK„„”zƒ&„Kƒ8„        è è   77'7''–DEEDDEE‰EDDEEDD        ö / 9  73#5264&'#'.'&'";#"&'.>76>537#'à!!
				&+_((¼ /!
#"vfe((      ö 2 <  73+53264&'#'.'&';#"&'.7>>'#5'73à!!%%
//		&+((¼ /!
+Hfe((       ö  .  73+"&'.>76>3264&+'.'&'"3à!!Œ		&+ƒ
¼ /!#"s
      ô     7'573757'X1188‘228¸^Ã1289128`»	              7#3'73##'57;35##3©^^Kƒ&„&K&ƒK„„ƒƒƒ&„Kƒ8„          "2>4.52–$<##<H<##<$33#<H<##<H<#óá3>3    
    ,      # + / 3 =  375'53375'5373#'7357375'#53#53'#375'		8

.%/		8

.%8	8

8	%Ÿ		9		
%%%%n::""	8

8	8&&%
8		8
9&&/

8		/%%ƒ	q		q	8&^%""         '  ?'5#'573#5#375375'#7#53#'K		á
Î	v#		–		KB„	X/	–		TK„	B"
]

]
KK	          #37375#5'#53ô		/6	z(
.á
©	/6	©Ÿ(!
–     ÿý- , 2 6 C J  7#5#.'35#>735#3654."327&7//62.67''«.-.	#<H<##<$7&L$G!"."'--.$<##<H<#JL&7$$&
 ! ?-%     , , 2 6 ?  7#5#.'35#>735#3654."327&7//264&"«.-.	#<H<##<$7&L$/ /!!/ '--.$<##<H<#JL&7$$U!!/!!           # 0  7//35#.'35#>735#2>4."©&L&T$y..-.^$<##<H<##<©L&LT$$.--.z#<H<##<H<#           ?3#'7'#3'53'KeD–©8^–¼yáC‹ƒ8»ó¼Ï         â      %#53#7#";26=4&3#áááááá@&&Î%^–ƒƒp      Ï –   73#^pp–      	   ( 0 : H  >.632>54.7.>64&7>/&#"&>IA;$6A:%& /%0.$‚(

T	
4	&86A;$7A:¨/*	 -/*Š)	!+.$9+       ô  $ 5  74."#26?5#'2"'.4676"'./577ô,2,5H5]*`*#((#ê¦¦

ÄŒ       ( % , 5 ? F  7."'#372677'67535#5'7'2#46.'53'357557'5‰ K82K*Ž0GGi¥ƒ		

	
K³VD_ /dF_n         % , 5 ?  7."'#372677'67535#5'7'2#46.'53'757'#‰ K82K©lVŽƒ		

	
K«qH9_D       ), % , 5 @  7."'#372677'67535#5'7'2#46.'53757'&'57‰ K82K¸€j¢	
ƒ		


K`QCgv~         ã ã       7>.6>&'&7#3#3l($!($)J8888Ô"($!($^#*;      á â     7"2>4.#57#5–##(##KKKá#(##(#^9       æ á    7#37#'73ºV,,V,:::áKKK3333      æ á   7#'73å+V,,V–KKK        á á    73'3'K–K#F#^ƒl=      á á   7#–K–á        ô ô    ?57'9]]]444–^^])455       ô ô   7'–^^^ô^^^        ã ã     7>.6'#3'53Ô"($"($'l($"($%KK        D L V  73+54'35#&#=&/7'773#'"&''7&'5#5357'7>2.34675#6X±\`¬	
†#-
4W 	8
J±
¬[\g#.
3;
	

		T
       	   #37755K>ƒiáÕ¼]L˜       	   3#7755/\„!]áÙ¼^B„      	 . 8  ?57'#+".=4.54>2#;265^©lVŽ

ÿqH9_D`

         7 D  7&'7'&'&7676'76767''7''726?".54?ÿ	Q	:a#	6:ä		Q:n#	:                 753'3#7#535%7'77q¨]]]]¨¨þúeeJqKK©­CDuc1         Ø ô    73#7#5T„ô¼¼¼¼     ÿý  $  7&'>.5#35#>'757'#†'#
-2#/1	,
#%(©YCŽK%2,2

¡q;-_D       ô  	   -  753767#&'#%!52>.3#'53>&'7a	‰iaþúÇ! 	%*'*%	q		8
q	
¼¼"*$+           7&'>54.5#35#>ï&:5
(23)*DEA#57#–.!
 /$;"K-         þ  	   #3''55ý\„!]áÙ¼^B„          7.4623/#3?#53¼  TP__Pa__O– Y²YJ²Y      ¼ ¼   7.462¼  –         	   %/#3?#53P__Pa__O¦Y²YJ²Y      ü     ?'77P––nôdd­“J             753>32#5."3#'"&462!04 '.)5Nu ÀK/."         ê 
   737'5#'"&462–
I11I/yI1tt1IA       ê 
   #7357'"&462–
I11II1tt1Iá           !  %5#.#"35>2#37264.304 '.)5Nu ÀK/."            35#53&á²²ááÊ²      +,   A I Y  75'77''7373#1'"&/'7'&'+535475'7354>2354&"5#2>54+[&('&&('t$",.+)$&$)*.,#$"kY%z›	"‹	&((&&)($"+)(* #$2-!!-         7526765#'573'5#337'5#'KU		ô	ák	.(//
»

­‘©	//yy/        á     %5'#37575#53'57=	©		©	=]––K99Ó#(		„		&#	kmp]
"           ) 2  73#'573?335#/##">4&2.467"264&ÉG		ô		G8“áB0AP !!.!!ô
¨

¨
¹–  !.!!.!        ô     3#'535#3#T–

–	ƒƒ/%%	ô		ôêá¼             3#'535###33535#á

á	ÎÎp8888	á		áØÏ&888             3#'535#3#5ô		ô	áá–%p&	ô		ôêá&%q&            3#'535264&"ô		ô	áq!!.!!	ô		ô	áá©!.!!.!           7#5'3#'535#¼^Bá

á	ÎÎ©p	á		áØÏ          3#'535#37'#ô		ô	áá%8^^8	ô		ôêá„8KK8         ô        ?3#'735#535#73#'535#535#&	^		^	KKKKz^		^	KKKKê

¨

	q
¨

¨Ÿ&%K       ÷
   35#7>7>.5B	B0"#

ab!,,B			##ba,,!'        	    #?577'7ø›,Mšì!–!šM,›Ë8
!–!            %'#5'#337'53#53753		^		/	¼	óK–©	„²
T		—U		gqq]K       ©     7"&462"&462"&462K

^^–          73##5#53535335#535#53#K88888áqqqz		ôá888ýg]ƒ%
Î	         ( 4  '.767>676'4&'&'&'7''7'7¡)&&0'&+!&&& !"&-------)7+'	"*..ô	"%*	NH
|///////         / C P T  #'73&'#/'7/5?'7?375'7'2..>>.635°4
&&--&&
'
	&,,&		&,-&&$	
#!" ^-&&
4
&&-,&		&,,&	
'
&&0
	4#!"!             7#35#'73##'57;35##3©^^&ƒ&„&K&ƒK„„ƒ&^^©ƒ&„Kƒ8„        ã    7'7'7#5'3#õ,CC,½%©-DC-8ƒ       ,,      #  73#'7355733#'75##;5#©]]]þç^^Îq^^^^^^]]]]¨p^^p^^^^         ' 2  "63234.347277'#"&54'./632–*!4#<§) /8áV7]	 3$<$,*& 4Îi3!       ô   !  74>2#4."3462"&7264&"#<H<#4<48 0  0 q#=##=#44!!/!!      * > P  7#54."#5467.5476762'2767654'."7#5#53735#5Ž 
	

	'½!1!¤o.

		¤ƒ11c1         	    ' 1 ; @  #'57335'32654#"42"35#57##535573732654#"42"Æ>
Î		‘ˆ¼8h<-- >¶		ô	á¨9L%%2=-j-=$%2         	    !  #'5733'#35#'57'?'7Æ>
Î		‘88„¼B	J"))$))">¶		ô	K9á–	BŽ#))D))"          % ) - 6  3335/#35#7##375'#'#57+577264&"&p	B>‘		B8ƒ88g–		–	(O]/%B	)>	ô	á98	q		q
K('P.A 	         ( . 7 ? I  %/#3533355375'#53##532'#3246'4#32'536'7##53#3>‘	q	BK8Å		Î

	¼¼–

B	
M!Ù>	g^B	)998	q		q	^]89&	8#9          ! + 2  735#75733#'5#'5733#5#/#'#3?35##35#&
Sk		Î
		Sk
gDqD;qhA¼k^K		
–		/	©

.%898K]       
   ,  73#'57357##737#/#37'7'7##467‘		ô		^…wTfzzPP1)+ô
»		Î
Ìgq–9I**               *  #535#'5##5733'#375#53#5'7#53Æ>
A8B	q	‘88ƒ		ƒ
pp21!8>¶	–	BKT	K9^
ƒ		ƒyp8!12        
  # ' + / 3 7 ; ? I  3#'5#335/5###5#'5#353535'#573#5#573#5#5;5#75#35/Î

»	KK&		
	&s8	^		ô	&»vT/

/á%&QQzy         	    %/#375#533'58q©©^K88Ü8á¨¨áK99       ,      ##375375'##5337#533Ûq9—;8&–9KK–^8,8¼9—á»q»8        #5'5]K^ YhhY           #5'53575#]K^p&^á YhhY q^^Y       û - S  7'6&'&'.7567676?67676'76?'>76&'/6&'1&767«
	
	
	
	
	%;		

			
	%		
G%%		#		;

           ''37''3
pqwwpqwppwqqw           777'#77'#pqvxpqv¡qqxèppx      î     7'3777'#àJKQQ£MLSRÿJJQQÎLLRR   ÿÿ.   + 2  73&'5##3#'57337#/#37>.67''‘	vU`o		^zzPP1($!($8-' ô
Tq			Î
69B"($!($R;4           $ (  73#5##3#'57337#/#373#73#?‘	wT^g		^zzPP&%&ô
Aq	Î
695pppij       %      73?'#5'#/#733###73?3Î	2	
l^	PgUG	½ºEm&„.

ÎÅ%91^       
    %#/#375#53?3'##533^		ô	áUwzPPzô
Î		»•q9        7 @ I  7'#'73?7'?5/7''7'#''7'57'77"&462264&"«

%--%
%,-%
'&--&'
4
'%--&'@&Ú--%

%+-%
%C-&'4
'%--&'4
'&-ƒ"       " & 9 L P  7#65&'&/&"&'&#"#375#535#5&57676762347676762##53ý				á
„]]8	
6^^^á			©		© –

©–           & 0 4  73#'573&'5#'5#'3#'5735462354.358KV		‘>B	q¼8A		q		3%
%^&	ô	>0	B999K
K		K
	788      ã,  %  7&'5#33567676&'&'&>7232Î 	"

ÎKK#0%KK.?	
(     ÿþ  * I U  7'7'7#&=.>323'>..676754&+'5732>.‹((#		5
È
		#((#	8((h		g›{
!h((²
        - 4 ? J W  7..'27>54'&'&#">56.'5>4.>'".>.>ù!*	
		$¨

	›	*
	_	-
%2
‚
{	    ÿþ ! - 9 J U a  7#".>75.>32.">'2>..676753>.6'77'7''i			,	È


  Ð^
_	Ÿ
ž{
C…Ø           ,  * 6 J V  7".>75.>36.#">'2>.#54&+'5732#5#53533#i
	,	È#((#8888Ð^
	_Ÿž/((		Å888        , 8 A J S \  7>54.#"32>54&'&'5.>2'".>"&462264&"'264&"5264&"T				Ð''/¾	_
^u
ƒ
Ÿ'/ˆH      ÿþ  * 6 W c  7".>75.>36.#">'2>..676754&+'5732>.6i
	,	È
	#((#
Ð^
	_Ÿž{
h((		ª	          # '  73#'573'5#37'#7'#7337#'#53#5390F

á	Îh*i6++6#Bl3
6?%.q	©		Z!0©Al ^p8mH89      ! l  %"&=6&'76767654/6'&'&#"&='&'&/.'.>75&7&'&547&?66676 	))		
 	
)*	ê-
..
	

/+

   ÿÿ  -, T  "26='&'&/./&7631767&'&5471&73263267613>54.–)E(.			

	
/)E,(E) :*

'	'
)
+:)E(       -,  j  "2>4.#"&=4&'>7654&'>4&'#"&/.+&/.#737+.>2–)E((ERE((E	  		
,
$7>7$
,,(ERE((ERE(þð#												
	,:>22>:,	    
        * 1 7 A H M S  2".4>.'65&'#36'564'#36'&'+#673&547##&'67#7>7Ÿ!8!!8B8!!8}	2,/AHC
		/,4,
&	/
7	B	%!8B8  8B8!K8
	
				
A
J1     ,  ' *  ?5'#";5#".6;7#'3#'535#73q&(8		8_2X9¨¨K8½'('K8¨Œ|–K9      ¼    %!!!!þúþú¼&        	    ! ) -  7'573573#75#7573#75#7375'##5(  ðÎ	&		&8	&		&8	&		&áÆ««™™……	uu}``PP      ,    %#'537#''7373ý	ÎaDK`&8	ýô¸aDKa&        ,  
      %#'5373#73#3#3#73#ý	8%%ƒ&&K&&8%%ƒ&&8	ýôÏ&8%&%&%8%       ,      & *  735#5#7573#75#7375'##5573#75#ýó%
%

%ƒ
%

%^
%

%&ôý%–

–	ƒƒ²¼		¼	©©³q		q	^^      Ï ô        73#3#3#73#3#3#^%%%%%%K%%%%%%ô&%&%&¼&%&%&        	    ! ) - 5 9 = A  3#3#'5#'573'35##'573'35##'573'35##'573'35+35#3&&	z&		&	%Œ8		8
9&&A&		&	%Œ8		8
9&&&&&&á	ôg	&		&
%	8

8
%–	&		&
9
8		8	&p       =  %.'."'."767654'.4>76767676	



	oo	
ab
	
	Ò	
		
	oo	
aa         %  7>&'.5#35#>&'6'7'5#ý<A8	B)HJ.1KF8B>+6E99!-B	">M<!"	&,6GK          '#'5##'5'7357335'w
8	&	8
wD&	8
%Klz		BB		zlX‚B		B‚D        ô â    , 0  735##5#3533'676764.'&'&+3537+532#3y11j.	  
¼¼qp11p001	
p.$
f        $ . ; ? C  733##'5#'5#'5735735.54625#3?3'1&'267'#373#ŸK	



	://
				
K	B–/	"5(	
	L8á	&
	9	4-6	
(a8n)&.
			3       	    7375/#7#533?3'##/#73ô	4	4ôá/V15	K51&	T‹Y	8„        ' + /  &'.>>7>&'.7'35##5¡)7<&+ !13&>@"*-,$ó755;2	”%KK      '     ?3#5#3#''75#áá]]~3 =%ôqq– ~±3V>   	         $ , 2 : @  7264&"'64'7'&'7'&"'62'67&477&7277'67z‡	#5!'K		#5!'K	Ÿ-!'K		#5'!W		#       #  0 9  7/7>#.7'.'35>7'7'264&"c=$()%2H>,­$))$$# +=Â<$&$4	'"C=%&	"
        $  ">'6.".>'264&"%>5HD*"- 4,=:#&')DI4=%,#á#:=,4 &g        à   7#727676?654.#73&©\&	V
&	-‡	‡	         1  7#'5#/?76?#'35737'"&'&/3ß“		PP	“€	?@	
!
}2	2}	}	##	        F   75#"111+321135#".=4&'&'67>=4676332>716716'5471676;5#"'5&'5&'1&=6'5&'1.#32#q	
	
			M	
	
			ô

	¼	

	        ª     7>&'&7"&462'"&462Œ
	)
	V^        9 E  #"'###'5?&54>6716.3573573?327>.6Õ#/	
8	^%,	 ^%		
	 +&
		+]#	Š 	$
_		B
	      / 6 9 = @ G  %'35#5##3#326735#'3#37/#53#326735"&'3'#7#?#"&'3^^:%%©%%:·/&vƒv& /©KKK–//–K-‹Š-      ÿý-     , 3  #3757'373#"'#37&762.67''™
oo
sÖ^aam!QT"'Q!m
+!"."LJJAA?BJ77
7J	=
 ! ?-%      ,     (  #3757'373#"'#37&7264&"™
oo
sÖ^aam!QT"'Q!m
 /!!/ LJJAA?BJ77
7J	!!/!!           3#'57737#''373
ss
ot^^aÓm
q"TQLm!QT"qLJJ9A??7JJ77yJ77J      (      #  ?3#'735?/7/73#'735^	&		&	)#F#2@A¿	&		&	ý

Î		Å¼¼ÂÀ°°

Î		Å¼¼        7  7"264&'7'373'#;#&=4&'.547>32á!!.!!	

#"

	'ƒ!.!!.!]R)

	
'	       õ ! +  7'#&=4&'.547>32#;265Û	
	'3)Š	
	
'.)           3#353#'5!#5'7#53UKá	ô	~czáKU		ôzc~        ô $ I  732+5326=4&+".=4>5+".=4>;#";2675.S9		9   :		:ô$L$        ô     753'3#7#5qKq––¼áK^^         ô      753'3#7#535&áááááááqKK©        
   3 k  73#573#3##3'?64'&'&"354?2335#2"./&'133?/+573?'4&#547>2+3»»»»»»»Ó% 9*88R:	         ô     753'!!7#5©©þúÎÎK^^       ô       %#5#5#5#=3#áÎƒƒ–––ô898–©       ô          7#3#33##373##33##3&%ÎÎÎÎÎÎÎÎÎÎÎô%&&¼%&&      #   ' 3 ?  7'5#"'&7>37'#&676763>.6>&'&¬dd(0GF$.	B+			PL	#, A#68!
J		$,;        %."#>2060%8@8%©++ 33         â   ' 3  7.#1"376'4&';'&5>&>&'>.6Ë
";
;A 	00	 "	&		ú
"*ww!aa!(		      ô     ?3#'735'54&"354628–––!.! –^^^^%!!%%%             7#54."#375'4>##53ô#(#¼©!.!p–¼¼©%""%pp8 !%ƒp          0  "3754623754.#53#53'54&"#54>2–$<#89#<\88©999 .!84<4#<$^^^^$<#á888 44          #375'#'#53?›
~	ô	ƒj Ùá¨K•		•8?…r        ô     ?3#'735#7#	ô		ô	ákd¼^ê

¨

•ŒŒR\I         Ï    73#7#'#5375##7w'!!(œ%$76Îzccc/-z++BB66       î     ?'.7/567'5&çr&@X××­@
¡


$=	,9Š=       î õ 8 B  7'.74>32#"5#"&4>367332654&#"77'32676#"Ä!&$
	%%	L	D '#'		"
<
 )
8$        , á     %!5!!5!5!5!,þÔ,þÔ,þÔ,Î©8        ë þ & ;  7'#711354./.7'67&/354>7Å((4Õ((	S
          ##3353?5/##53'3#–g		gT((TPÀÀ§^^%
K	ƒƒ&%K8	       
  %  ''5?5'#571?'7#'573¡tuutgggg#..q..rK¬KK¬K«B–B66B–BZ/../      ô   "  %'#353?54'7'56737/7€€+KI?BAB10AgggÂ22w^""G(((      	   '  75#'37'7357'#3#'573'7'7#À!!00n!!05!AA!11eA!11!Ac @@ 00“ @@ 0P  10- 01                 73#535##735375'533#q	–		/&„„ë		–

Œƒƒƒƒ		ƒ
K9^
ƒ		ƒ
&K         	    737'#'55#37''7'74II4	H;;..·  !    ÎHôH	^X;Ç;KI !  !       ,     #5#5#3#'5733#5#53533#²@K^KT		~68888A%KÏ	á	9Î888       ,   (  #/#35#53?335##533#5#53533#^		g^UwzPPz8888	Î
q%T8ô888      Ò    (  76.6.>&'7+7'7'326=,.	'.	F	
	
œM00MÅ	'.	'.
	
	%%0/%              3#'5353##33#ô		ô	á¼––qqqqKK
»

»	©©&      ,,         # ' + / 3 7 ; ? C K O S W [ _  7#53#53#53#53#53#53#73##53#5;#3#53#53#5353#53+5373#'7353#3#3#'3#%%%8&%ÎKƒƒƒ%–^^Î8989%%&K©©©©&&%ƒ               #  73#'73573#'735#33##3&©©©–^^^]áááá&%%&        ú % @ I R  %676'#&&"&'&12767654"'&'&5476722763'"264&3"264&	B	Sƒ!

JJÂ
	
 )

) xR     -   " .  3&'5##'535#"#7>..>8Ï	
]\^^Ã
	,,	
	d^ÌÏÏÏq
',,
K   
       $ - H b w ’ ž §  7.676'.>&76&'&6264&"3#"&="&=46;#"37&+"33>=26=4#+"&=#5&6;2#5326=354&+&'32#'">54&"&462«	

	+			œ""	"	‹
.&	.4""	"®		Õ	&	
	
¥
")	*5z
;,	,<J??=	v5*	)"
Ù
&       ,    ! %  #'57533533533535#3##33#ô¼&&%©¼¼&pppppppp,ôôþçô&88         ô 
     7/5??5'755¡lsskK
@9±^^q^&ô	~	  	~	wllk
00      # - B  %'5'54'&'&#"76?2>'&>&/&4?>&'5\9		D
]
–DR
	HO:\=8	D]*	³ªDQ5		
5I            72>4."7#'77–$<##<H<##<+$O#<H<##<H<#M+$O         /  737''7'.767>676'4&'&'&vUO$V)&&0'&+!&&& !"&`VO$Ž)7+'	"*..ô	"%*	NH
        # E  7##33535#'.>&'>.632#54&+"3;#"&75"&7546ô%%%%T
		&	

.	.			q&%%¸
			E3?	,2         Ï   ) =  2"&467"264&#"3;26=26'54&5&6;2#+"&=– .		
J	.	T2,	
+2T33??            -  73.'7#523#".54672>765#5"¼I(#3p	/\3",+ 0 q	
+3¼(I\3#
	pƒ +,"3Ì+
	q 03      á  7  %#"&'#+5#'735323>3#'&'.'>76?36
	<<	
6	M		MÎƒ
		
K
	K
	
ƒ       - 6 P  31&/576?67#3#'5#5467675.5>"'.'&67676Kƒ	
			[^
	
K
	
Œ6
MM	<<	
6˜       á  7  3#'5#5467675.53.'&/576?67Kƒ	
	
K	
K
	
ƒ6
	<<	
6	M		M         ( . 1  '.767>676'4&'&'&'7'77¡)&&0'&+!&&& !"&'TT:)7+'	"*..ô	"%*	NH
«88_N'      ð    755G©¥ápg¾_         â    ##35>='#5##.=3ƒ	%%	&;"p8	B+99+B	88s88         ï    ' /  7#'##73'&'1532#'32654#32654# >8n)#^((Y>>7/>4              #  3#'535##3'#5335#3#'#33#&ááááÎ¼¼––8KK%%9KKKKK¼¼¼¼8ƒK%8%      ë ë    ?3#'735B	–		–	„á		–		„„              3#'535#3#7#373#ô		ô	áá&&q&&%&&	ô		ôêá¼¼qq–       ô   7'#'##3?3735Ý!#5<
#	Cƒq}]Q2_„X         < @  "2>4.".>27."34>23546?>4&3#!8!!8B8!!8!008//
.!8B8  8B8!á/8008/ž			
^     
  "  7232#"&5467232#"&5467†# //™$ 0.ê3$+*&5N#3$+*&5N#         % 1 C N R V  7467'7.77.467''>4&'77>4&'#'7.>264.#3'#8	

	



K@h@	&6Ã&,1,&		M		!†&)&,1,B
‘!!‘	'$8%%           * 3 ?  736.75.>264&"27"&'77264&"33##5#53á ;@.9 .#31z.		/7%%%%Ÿ 9.@; /4'+/	
/8&%%      ô      # ' + / 3 7 ; ? C  %#";26=4&#53#3#373##3'3#7#3'3##33#53#7#33#Ï

ÏÏÏ9%ƒ]]ƒ&&^K88&&ôƒƒ–ƒ8988]           1  7264&"7'.767>676'4&'&'&– )&&0'&+!&&& !"&q  ¨)7+'	"*..ô	"%*	NH
      ë
   #53'.'.>5ê	B0"#

ab!,,B			##ba,,!'   
    *,   ! . 2 6 : > B G  7'7#";#.4673'7#'573'35#73#535##5#33##373##3'13#‹+<<+Ex

x
xddFx

2(d<<<<<<<<<<<**ó+(+þÿ
 

 
Œx
 
Œ<F‚È<<      	   7#53#5>&'7.>X2A
9@+$%+31%ô
A%?<0A5
#03,#03,            37'#5'7'73#¼0	00	00	00	0–KK;::[K      -   , 2 8  3&'5#3#535#'5"2>4.".4>27'7'7'þ		
êaN:k
×$$*$$ 	K	lV° 	Äl$*$$*$ˆ  '	         ò    7'7''75'òKKPP®MMRRyJKPPVMLSR      ©   %!5!þú–          & : D X a s {  †  762"'#53264&"'7546;#"77354#"6232?"&54?#5#"&54?4"5>72526275"&4625&'"'73#'735'735Ú	Œ',,;	,	7	}©©©p„ú	J4N(
 			¯				K]]]]&^q        â   ' : B F  77'546;5#"'3>4&"'#3=462"&#"&5&632&"27'375'3#<+)o
^ƒƒƒƒæ+*/	'\	
	–[ppp           7'32354.+7vKK=$'4&<)";LK<G'9&:   	     ( , 0 4 ; K S W [  7#535#"35#"'&'4=45676;#375#'#33#3##53#'73##5#"&=4635#";5#'35#ô©KP	
®KT
ƒ8BT		/		 &&99q–
²

&
Tqƒ88ê	q	^p9       ! 3  3#535#535#3#";#&75&677357'57'#F·

A888©8===+%1$&3%4	á	&––	
	²Z$1$Ž&3%5       / 8 A J  %4.'&=>."2>&'57>=>'462"&"&4627"&4624432»

g/á¡

Ž         + - 1 5 9 C J  #5#3#535#";#"'&'&=47676;5#3#33#7#375#53#ô©¼
TK®·Ä8—$vx&5°8–B	&
²¬‹V$&5ˆ88      ! % ) 3 7  #"735#"&=46;5#53#3#37507#37357'#'3#ý·===8©888A
Ï9$&5<²	
	––&	á‹‡W$Ž&5      & * . 2 6 =  %5'#";5#"'&'&=47676;#37'53'3#3##3#53#
·®KT
¼©–	8qŸ	²
&	B––ƒg88             3#'5#'535#3?3#35#ô		6/	zzá.
(	¼	6/	¼²©©
!(™^%            $  #37375#5'#53#53'33##5#53ô		/6	z(
.áKKK/&&&&	¼	/6	¼²(!
©–p&&&         ( . 7  "#37567653''67/6767675#5#76.6/.%$N	p8	!ó1j@@#$0/$H%·!	8q	N$%./Tj1@$/0$#8%8	     %  ( 5 >  757333#6737#&'?35#/#"&4623".4>2264&"	^l
	2	F3-lUgP
U&##B'·F

.„
q%1W$A''         & 3 <  73#6737#&'?37#/#573"&4623".4>2264&"‘		lVw	zzP
		^&##B'ô
»	
„1F
$A''         ô ô     7#52'234.234.^&&.N-3V3+38&¬-N.3V3K+3      ô 	    7375/#'73'3||>|>ƒo5t5o2"T¥||>>vo55""S             7553'#5'!©¤Ž0/ápg¾_/ff             75575'4©¥V¤¤ŽŽápg¾_umn__             755#'7537"©¥Ž=/ápg¾_Ž/ff         	  . :  ?57'#&671654'5.611.716'77'7'^©lVŽ(	+1	0$ ,ÿqH9_D

!            &  %/##375375#5335353#5/#53 	/		¼	/	K¨q]%q&^’ú	/	¼		/	 Î¨99%%K^&            # '  #5'##5#3#'57335#'??7'Ï
	q%8
.œ?&&zr9rg
a	 KK¼¼K99r8r‡	a        	    #'57335'##5335ú	ô		ØÎá"ƒK&Ø		ô	áÊKK99              #  735#3#'#573#7#5#533#53#3#'538¼¼&pp8	B8ó9B		B9á8B	K–%KKA
	A8–B		B          # '  7#535375#353535+335'7#'573#3B/%©	/8%/×%	Ÿ	„		„	%KKá%/
%/	²/%%/			^		&        ) 2 :  7''7.>&'54.>.677'76'6&#"l		GG$AB)	/2')$"($O
N!î5		EEE:7#*
d!($"($[NFO!        ,-    "7>.#".4>2#¿3	ddC87!''.&&,!8<sr&@A(»'.''.'           ! )  73#3#3#!7354>;2335#'##5#qKKKKKK«þô#p#¦pp¦–ô^K^©¨&Ïô8%%8        . 7 U ^  3#5#3#'535#5&''7&7'767537''264&"5&''7&7'767537''264&"ô	áƒ	áá]

					e				
z9„	Î/&©






/m





/				         # 7 ? S  7'573'##5##5##5#35##'573'##5#35##5##5##75'#753353353353353/		Î

A¼&		Î

Œ¼&Œ

Î			&Î
8		8
9&&ƒ	8

8	8&&ƒ	8

8	%%       ,,  7 C N  7'#''7'57'773775/7'/#'73?7/632.63264.ø44+,<,*44*,<,+122+

+22+

+`		¿<,*44+,<,+44+l
+22+
+22+K-   	           ' + /  #;#'573#'5737#33#'#37375'#7#33#Br<<f<<AK”<</^
	A			&Kp888			 qK%      $ E Q  7.7572>76763'67>=#&'&/&'&>."3›
	

		l		
	
	
h	
	
%	#<		<#	Ñ3	3Q1         #  755'#75375#5/3'53#'57Ï	©	^B	9DƒLKK:]\./å*

Ê	 		*œÔ­../          %  775'#175375'#5/3'5#53'7'Ï	©	^B	9DƒLKK{^]..å"

	Á	 		",œÔ­@..           " + 8  >.6>.7"&462"&462"&'>7'MG?( ;E?()<6"3;6"<^B
%*#	;F@'<E?·2=6!2<5_S	       
     " ,  35375'3##3'375'53'#37#'37'ƒ„q&&8&&8ƒƒƒ%%^&&88.:&%9%K^^q^^9&–H&&     ÿÿ, , 5 > G  %4.+"5>.">&'>;267>'462"&"&4627"&462	%$$%Î8gÅ
[$$r$$
IÂn             #375#53#53ÏÏƒ^^q^^ÏÏÏÏÏÏ            #375#535#53ÏÏÏÏÏÏÏÏÏ^^         M œ ¦  7&#.#21273#;>'&/.6?3267654'&'&&'54&'+46;5&67'#"&>;26?&'>73235&67>76&'&&/">4&#h


'}	

d	n
<

!

	
ƒú		#

	
			¹	
	

	
p       	      7'#7'7377#373'7´eRPPRíRªRR,,$$$·bb@d>>d@	OO4P„----      	  7'#7'7´eRPPR·bb@d>>d@       	     ?3'7''7#'5#xeRPPRƒ$$,jR·bb@d>>d@G--3O           ,  73#7'.767>676'4&'&'&qKK0)&&0'&+!&&& !"&¼K¨)7+'	"*..ô	"%*	NH
         	   35#53575'#3#		/%%Å		/&&
Î	¼á	Î
¼       ô    ?3#'7##7'7'353'7'7#3	ô		ô	ôqL'88(MI'77'Iqê

¨

ŸA'77((77'A          $ ( ,  7375'##575'#373375'##537'/7Õ2"^#&K%	X2#^O8%%%=v2""%K&m	
2#K	*&8&x=        5 > G P Y b  ">32>4.##.5&764&"'"&=4>2#7"&462"&>2'26."7"&>2"&462–0%#=##=#
,
3=448
ƒ
‹
%0$<G<$õ+ 33=4¼‹V@       ô      73##3'73#'735K–––––Îááá¼&p––––          " &  ?3#535##5'#37'#57'53'3##3ƒqKKq&ppp‹KKKK&KKô^^89^^^^8]          " & *  #353#3753#'#375'#533#3#73#qqKKpKD&]ppp^KKKKqKK88^^8^^q^–        ï    733'7#'7#7#‹>)!†(G6…E>>@
@ ‰H	c‰^„              %'#3?5'57'757^ƒ

^ƒ
 TT	W}WzzØ/BT/BT‘*F&'?,W=I9       	    %/#375#5533>‘		Î
8„q	BÙ>	ô		¶9ááB	–      â  !  7"#.673>."&462#Ø%::"'á #p''        ë  % ? J e  7>76'6'.#"5#35766'&75&76'767232?356&#"&476?7?5"&4625'&"‡
			P				
œ
		

_4L	


	?9/*                %#53#3'#3#3'#37#3'#5#3]]&&K©©%ÎÎ^pp–]]ƒƒp]]áK^K©99              7'#3?5'5'757ý]^		^]
zUUPYYY^TTá88q88q£2a.A551C2e.            )  35#7'3'?7>.6>&'&K–
	¼(K–v +*# "

&KbŸ!*%ƒ8Kx
# " T &       F   75#"111+321135#".=4&'&'67>=4676332>716716'5471676;5#"'5&'5&'1&=6'5&'1.#32#q	
	
			M	
	
		
ô

	¼	

           3#3##5##5#535#53533535ÎKKKKKKKKKKKKKKKKKKKKKK]KK          ) 5 B O S  #"&54676674.7733##5#53'''7'77.">'.>7#36


LdcS////l!!!!!!!:KK	%"dc‡///%!!!!!!!p		

4       á  " )  7#54&+;#5326=#"#53'7'#'7'Î
9
p7"!§!"¼	gg	%L"!!"        C  7".767&4767>7'7"276?6767>54''7&5#@
)68%D 	‰D#I 		100
&>86 Eõ&B%K		001      ô    375'53#535#535#535#535K––––&&KK&&Káá%á&&%       	      ! %  35335'537#373#7#373#35#'3#/	Ï	ê&8]&	ØÏÏØ	þú          ) 6 @ R  375'53'354#"6232?"&54?##5362"'264&"275"&4625&&&ááá£	+	E	©©¼©©: 			J	!	               %  375'3#73#'7#35373#'7#35&áááá88%8^99%9888K99999999        á 	   # ' +  735#35#7#3#375#/5?35'77'75&%/		/%ê/&&/	<T	.T	P?BBÎ	–
–ƒ
–'/	%/&WW      +  # '  7'>7#'7..''73''7g=6 '',1@:2'('.’ßç3'(*³1'('¾Ð     +  #  7'73'67.7'37'.>&'()=9EI0Í''.HE:<'‘'(/!:/('%: 0             # ' + /  #3753##53#5'3#3#533533#535#53'53ýá		á
áÎÎƒ888K888888K888888
Î		Î	8%8%%8%%9&&&&&%%%      '  # 0  #372>?4&'5&#"32'73'?øb}a**%I%TsT	
E}b*
"
%*!(J&Tt9
E          
    ?''7#733##3Ckd"ä™+n¨¨¨¨¨¨®]V"*&K&%&              *  ///?'?'77'77'77'#'#5#7Ó'>C
0/Cg*
8
#+!.9## ]
b.-MMs[8KaNI      #  G Q n  %'&"2?>=4&='"57473764"&54754?2621&327##54?17#"/.=46?62. YY		YY		M

$T		YYY	é55	j	55	j	Ÿ|4	g5j55     ,    $ ( 0 4 8  7#'"27#".4>2.3#3#7!!75!5!5!5!Ì&%S
		
	%þæ			þúþú©^^				»	ô		ôê¨&    ÿÿ   ò- -5;JPRW^cdnt  "+7656=#.'.>'370#61&31#&'&7333'#&'.7&74'56751?6736767167676?3761231716'27162'1&1#5&'#1&7141"'1&1"73'1641'65147"'4'&'&76767>.72576?6?651&?097.'21&'7"#2#0'4"4&671?6.77'''&'76'031256547…H#	2

&			T		6'Œà+
&						-@!
			

)


»z™ŸW      - Z ± Ï>  7#"&'&/"""&'&/.465'4676?'4>7>5'454>32'2;2?4/./=4>323265'.#"'&#"=."265#"/&62>&/.72767675?4>754?6?/&/&5'&/&""&/&"22>76?6=/&#""&/ù	

		
		~

C			
@


	[
	


		
	ä

	
	

        +      /77'7//ô"ô"á áM^=E2=		ò	
ñèß/7''            #375#53#535#53ýá		á
„]]q^^^^	ô		ôqgÏÏ^^        !    1 D W  7"&462>.7>."623.'&'&'&#"6467'7."'32767>>7#=’2Q!%9J%)–ˆ	×	%	 I 
 !! 
 7!	%&             375'53'75'&ááá›BB:ááóáá2BB;         á  
    73733'77#3733'767?,	+
,…=?d©qqB((z©++BCC      ô     %#53#5335#áááááááÎ&q&q&          6  7".?#.767>73+'"732?326=4&#f4#§n >	r	#	)J	B
gÑC	.hB          6  36+.=46;7627676&#'576."#"3Æ4#§m!=
r	
	)J
B
gÐC	.hB         / A M R h  %''7'&"32767672>4+".7677"'.7>;3737'7/'#'7'&/7>4&''':9		$"â*FI© ,
"#"Ê6#
+Š:;:ë'(:;%!·,FK… 
##"'$6@,}<<<       ô     # '  73##'5#53546;2+335##373#73#¼8ƒ8888^ƒƒ&&ô©©¼©ƒƒƒƒƒ         Ï   ?3#&ÒjÄ

f        Ï   '5Ä

fÒj       Ï   7'57h

f&Òj        Ï   %#'73Òih

f       ÿ >  %"&'67"&'&'7.'&513&'&'&767'5476762676	$+-**
		

å"
	
			
       " & *  7#'375'#3#375'#7#375'53#5#53ý ?

K		>!		8

:9		8
–8^%Î&&^^	K		K	^
8		8
VV
8		8z99ƒ%%%%          " & *  #3'375'#3#375'#737553#57#53ý8		9:

8		!>		K

? 
á%^8ƒ&&	8
VV
8		8
]
K		K
]
8/&&ƒ88ƒ&        # ' + / 3  7#'5'#5375'#3##37573375'3#3##53#53ý! 
	

%				 "		&	 C 
%
„889¼K G
%	&		&	%
G 	&		"  "		&ÅK8K        	  -  75'73''37'57#53'#3#'7'73#37#5""""bEEN888:9OEEO988:8²K!"K8K""Kg79--79--         	    ' + 3 7 ? C G K  '#5'75#'37'7#'573'35##'573'35##'573'35##'573'35+35#36(''(N%		%
&8

8	8&&B%		%
&8

8	8&&%%%%'RT'èRR''b	&		&
%	8

8
%–	&		&
9
8		8	&p            754>3.#375'3#5^)#.8&¼&&¼©% *%pppp      	   ' /  737'#'55#37'>'6'7'64'7'6'74II4	H;;..Å%&ÑHôH	^W;Æ:K%*$'+/         / [ _  73737575'5'#'##37#5/?53?3#'7#567>32#546?>4'1.'1&"#53 -
  	. /

/))((	 
-  .	  
-  -
((((q			
]       , B N Z b f j  74626?'."577>#"&"276?"./&'"&>4&'3#.54737!!75!5!5!5!e				s				ž		Ïþæ			þúþúT	"	


	
Î	ô		ôê¨&          7#'#'5'57573733#'37''/

/ .	  
-?F@ 
-  -
  	.  -
0FA       / 6  73737575'5'#'##37#5/?53?3#'737'' -
  	. /

/))((F@ 
-  .	  
-  -
(((( FA        ô    !  7375'#53535#35#'535#35#–qqq©		8		ô––©–^K	„	8&	^	    ÿÿ.   &  3&'5#3#535#'5>.67''ô	à]K8g	¤($!($8-' 
gS©
»t"($!($R;4     ,   + 1 7  3&'5#3#535#'5"2>4.".4>32'7'7''7'ô	à]K8g	Î##(##!!		0
gS©
»g#(##(#ƒ!.!C.        ,   +  3&'5#3#535#'5"2>4.".4>32ô	à]K8g	Î##(##!!
gS©
»g#(##(#ƒ!.!      ÿþ.  . 1  3&'5#3#535#'52'.'.7>76'ô	à]K8g	Î

	
:9
gS©
»g
	
	
K&K           #3#35#5375#53ô		g8–8g	áá
»

»²©         # 0 8 @  73535#5##3##33535#75##33535&"2?64"&4?7'762R–J	ŒŒ¢yÎ^–.	Œžy             3#'73'5#=3Ž{öƒkÖ_æÎÉ&KK        ô   '  735#5#'375>4&'5'#".4>2%
K		K
z#(##(#ƒ/8Z,2,)		),2,)		z##(##         á     5#";#35#5#"&46;#53ág^8&#^Ï^'ÏÏ     , ÷   ' 7 C  53!53!7#5##"&54?4#"563232651#531632"'32654&"þÔ€
"$
	?*^&&88	&
˜C;          #375#535#53ô		ô	áááá
Î		ÎÅ„&          / E Z z Š  7&'&7>2327354&'.=4>37."5#3532>4'.=>6>25'&26?5'.467#53#'573I			
k^
	

ÜKT		|'66&rë
	1.t

	`
	M	q	'67%      %- $ ? L  23'.=2>7>.'.">5//?—
!"

ˆ)		)
	4Q$	[,J&#

#'L	89" 		 "`'3k       %- $ ? i q  22'.=>7>.'.">5'#'54>?>4&'&"#'4>7673#'—
!"

ˆ)		)

`
,J&#

#'L	89" 		 "
a      %- $ ? S  22'.=>7>.'.">5/#'#37375'7—
!"

ˆ)		)

G%%%%%%%%,J&#

#'L	89" 		 "&&%%&&%%          +  7'.>267>54."75#5##335âPOH9?G0d'.&&E%&&¹&OP+EB#5€''-'K%%%%          #  7'.>267>54."'3#âPOH9?G0d'.&&]]¹&OP+EB#5€''-']      Æ                                                 '      
 $ .        R  	   e  	   s  	     	     	     	   ³  	 
 H Á  	  &	codiconRegularcodiconcodiconVersion 1.4codiconThe icon font for Visual Studio Codehttp://fontello.com c o d i c o n R e g u l a r c o d i c o n c o d i c o n V e r s i o n   1 . 4 c o d i c o n T h e   i c o n   f o n t   f o r   V i s u a l   S t u d i o   C o d e h t t p : / / f o n t e l l o . c o m                                 ‚	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ accountactivate-breakpointsaddarchive
arrow-both
arrow-down
arrow-leftarrow-rightarrow-small-downarrow-small-leftarrow-small-rightarrow-small-up
arrow-swaparrow-upazure-devopsazurebeaker-stopbeakerbell-dotbellboldbookbookmarkbracket-dotbracket-error	briefcase	broadcastbrowserbugcalendarcall-incomingcall-outgoingcase-sensitive	check-allcheck	checklistchevron-downchevron-leftchevron-right
chevron-upchrome-closechrome-maximizechrome-minimizechrome-restorecircle-filledcircle-large-filledcircle-large-outlinecircle-outlinecircle-slashcircuit-board	clear-allclippy	close-allclosecloud-downloadcloud-uploadcloudcodecollapse-all
color-modecombinecomment-discussioncommentcompass-activecompass-dotcompasscopycredit-carddash	dashboarddatabase	debug-alldebug-alt-small	debug-alt'debug-breakpoint-conditional-unverifieddebug-breakpoint-conditional debug-breakpoint-data-unverifieddebug-breakpoint-data$debug-breakpoint-function-unverifieddebug-breakpoint-functiondebug-breakpoint-log-unverifieddebug-breakpoint-logdebug-breakpoint-unsupporteddebug-consoledebug-continue-smalldebug-continuedebug-coveragedebug-disconnectdebug-line-by-linedebug-pausedebug-rerundebug-restart-framedebug-restartdebug-reverse-continuedebug-stackframe-activedebug-stackframe-dotdebug-stackframedebug-startdebug-step-backdebug-step-intodebug-step-outdebug-step-over
debug-stopdebugdesktop-downloaddevice-camera-videodevice-cameradevice-mobile
diff-addeddiff-ignoreddiff-modifieddiff-removeddiff-renameddiffdiscardediteditor-layoutellipsisempty-windowerrorexclude
expand-allexport
extensions
eye-closedeyefeedbackfile-binary	file-code
file-mediafile-pdffile-submodulefile-symlink-directoryfile-symlink-filefile-zipfilefilesfilter-filledfilterflame	fold-downfold-upfoldfolder-activefolder-libraryfolder-openedfoldergeargiftgist-secret
git-commitgit-compare	git-mergegit-pull-request-closedgit-pull-request-creategit-pull-request-draftgit-pull-requestgithub-action
github-altgithub-invertedgithubglobe
go-to-filegrabber
graph-left
graph-linegraph-scattergraphgrippergroup-by-ref-typehearthistoryhomehorizontal-rulehubotinboxinfoinspectissue-draftissue-reopenedissuesitalicjerseyjsonkebab-verticalkeylawlayers-active
layers-dotlayerslibrarylightbulb-autofix	lightbulblink-externallinklist-filter	list-flatlist-orderedlist-selection	list-treelist-unordered
live-shareloadinglocation
lock-smalllockmagnet	mail-readmailmarkdown	megaphonementionmenumerge	milestonemirrormortar-boardmovemultiple-windowsmutenew-file
new-folder
no-newlinenotenotebook-templatenotebookoctofaceopen-previeworganizationoutputpackagepaintcanpass-filledpass
person-addperson	pie-chartpinpinned-dirtypinnedplay-circleplayplugpreserve-casepreviewprimitive-squareprojectpulsequestionquoteradio-tower	reactionsrecord-keysrecordredo
referencesrefreshregexremote-explorerremoteremovereplace-allreplacereply
repo-clonerepo-force-pushrepo-forked	repo-pull	repo-pushreporeportrequest-changesrocketroot-folder-openedroot-folderrssruby	run-aboverun-all	run-below
run-errorssave-allsave-assavescreen-fullscreen-normalsearch-stopsearchserver-environmentserver-processserversettings-gearsettingsshieldsign-insign-outsmileysort-precedencesource-controlsplit-horizontalsplit-verticalsquirrel
star-empty	star-full	star-halfstop-circlesymbol-arraysymbol-booleansymbol-classsymbol-colorsymbol-constantsymbol-enum-membersymbol-enumsymbol-eventsymbol-fieldsymbol-filesymbol-interface
symbol-keysymbol-keywordsymbol-methodsymbol-miscsymbol-namespacesymbol-numericsymbol-operatorsymbol-parametersymbol-propertysymbol-rulersymbol-snippetsymbol-stringsymbol-structuresymbol-variablesync-ignoredsynctabletagtasklist	telescopeterminal-bashterminal-cmdterminal-debianterminal-linuxterminal-powershellterminal-tmuxterminal-ubuntuterminal	text-size
three-bars
thumbsdownthumbsuptoolstrashtriangle-downtriangle-lefttriangle-righttriangle-uptwittertype-hierarchy-subtype-hierarchy-supertype-hierarchyunfoldungroup-by-ref-typeunlockunmute
unverifiedvariable-groupverified-filledverifiedversions	vm-active
vm-connect
vm-outline
vm-runningvmwandwarningwatch
whitespace
whole-wordwindow	word-wrapworkspace-trustedworkspace-unknownworkspace-untrustedzoom-inzoom-out   wOF2    öh    ~¬ ö                       ƒßD` ë
Â|ŒÆFÅX 6$¢p ‚z [«\”ÖD–ü®k‡N¾ê)&‰ýLaØs¶e;DŸÛ9Z„’~³y€mÓøàAwDHÿ”DÙÿÿÿÿÿÿÛ’EØæìäœ½/—' ñkm+·1"åRÑ·¡ÖJËMRÚýiBÎ¢e&[ÌDvÙÎØ=ÒÜi@%*Ô!&ˆ	b*Î\.ëU¬>íùAµ
{ûÃ6Ùt¤•¨Ôõ´£½77“Yƒs÷ÓbdÆó~ž“©9çœM*[VÜ©D¥®—{aÕ¢Uæóå¥˜„Œh¯ÆÝzÍ)Ù”ÒæÒâq2-â°kõ`~áf*Ñ+• fåTÂx}.ˆ	÷<däs—q YÁ›‚_Â·pk¤IÁßÂE§ƒ£:îÞ;Ÿì:·ðC¸öÉTpU×—`úTç.LÄÃÅÎ_t#ri!=üïMÃ¼#=ØS1B¯ñá´¾ÇÍÆðK¸oDÑ™IT¡ÿÚ›þé¿-™ ‘-O
æ6[!)YçI2ïö‡ü(LO?µ˜9œÊÝJîNîÖ¹ #HœÈÈ¸Œ‹	b‚¨ ³ø—¢’pW"U8ã<at2’y2*¦Cle6¯d%yƒÕ
OœÜªˆ1¡³dK{0ƒ¹LÉ'<ðßi.gêÌ&Åºò*+ñAþƒðE(¥âú~¸¯ÊÌÿ@¨
¡ƒIÓ»'"ºçÏD÷Ì÷Tì÷ûÿÌz'°1ÉNÎåAbE„Š@€š5ê¯Q­*Ëªºê&
°.W€yÎ8S½ã";¦§¦âüê"ú­s¶ôßŽ9ów !ˆH‘¬ˆˆÁ7~þXëpZër)½Þ{ì­ã4šï»lnãûõ~r!!„‚•±bƒH¹¯÷UÿÉÉÉÉav6õ¿ës_ö›öÖ¶-7•þ÷µ\N$ˆ	"AD‚‘ ’ß+ð—{ÿojlÊ8ðÉ¶H#:•DÎ¾?lwß–?ŠÅ„J¯¡pÈÚV ›?ðãùÿ¿÷ákí}Î}¿·T°>¼	¥ó· pÀcx@cÐm6hôõÀ ¸GCÀ{¦cJÛ³ãYÚÞY^Ÿh"†E;–:÷á#K¬oH(«iJª~Ö’Š˜Yù&’æ¿nübJÝã©6ûÂxpÈÑÃtÃ1Í)óÞ€@¦‘cµ_sx€"èt{Èá™îMŒ‚¹Lv†<Ð¬Éîô$1›h6+&Câ&»*n²Yf²É·5¹¿ø÷HÖw×>µ©ã°ŸÎ—3†i¬ºÎUµ±åáÛÖÿÃ¶œƒŽÿ·ñ"bû+&~Æf[ÝäÂQŠ	*Æôu¢‰ü/Q'²KGˆl±®Ãó¶í·æ¿»‹ÿüÏØ²ïÇÚ÷)K8äÎÈpß9ÁQ9 E+WšY¦8ÑÀAe8Ï¬lh‰fÛÊûqîóx$'7í˜Pº3æCÂ})¤ý„~ŸMý’|¡Ix}º‘d<NÆL†Ã¥t6tyiÕ4.U‚ÚÑÜöO¢x˜`°6.’UilÐ?ý=ûp·Š™d%ª(°j-?Ø4³g¬‰À|3¦K›ñoìóãÆu.·…Úï!U&PêVƒŽrß­Ùp
¡PkP’À‡øZ¶ï[ùæp¹|Òd‹TÍîƒ±}½ç@†X‰ð)ý Û`k]¬Ô(j§ßx 'Š{ZÃ¶¹Õñˆ(£G·•Pñ‹a–ž dóA;øç%‹IÉBgŒ´Ð8Oýß¶D
u°—X‚[—b¬CHèaï"ÿJÓ2Q‰µDAFU]Ó¹‚çþó•.ûª¬ºva‚„Zj‚ ²‡\ÕÅÐ—þv_®Ý×îçH³›glÈI„Ù Y‚
òlð{Õú·ó…‹B¡x	AÐ´žžñÏ~o#™X‘bmºA¶A¾ïLÿFz8#=•X–.¥YÛ…¤±½»ÖÏzÕD?¿Ò¯üK-/Îá@Ë—zÎ%Èf/püTSë«œ[•}’É€¡Á°ít·v90`Iõ^GûÁÖØ}¹ª¯Òµ ¥ÌîJXH e|«×Õ;íÍ¦õBRh–öyK¦½WWJÒ?iOº`@ˆ’;ŽÌWªVÓ÷Ùà7ë™¹ó@óÖeÖŽ¡ˆ„äl’t/=¥¢%­H9Ï=cüß›e¥[ÙšÁÌîÅ+£PÎPƒá÷à´G:¶’•ï«Êÿóguÿ¬j‘ÙÕ¢
QÕ «bªlýÌ¬žÌ¬®ÑÀî5€Y3{0³Gˆ•³ÁA÷`°sJ®´.è	=ê”˜¥Òæ&i½3LÒséÒ0é9´M>ýïMí3e¯ÅÈóû‘QÖÙÍðœÏD÷õíóÙ¯»>ð{¨ÏF³k	6PK»Öô{Í¿ÕrU fv‹ 1*tÜ"9³Î…2>Tæl¦ RªPq 4V)36Sû÷•juER–‹”k¡jUõlr¯r-Ýò,wW¯û©o³ìç‰È|™	dþD‚ÀO$$
D	L.F&HH’	,V{’¥¢iw‡¤ªš‘äZ(Õ´Ê&E )Š¶DÉn-¶§íªîÝ=Ë&©äZV/U½¬û±çÖÇ¾g¹œçzïãç|¿ZõÍnÒÿ³GøH´AØ­Ì¬Çtñ:9î¦£<×i§öÌ¡þß#$ÎHú%"‘º ©‡]±— ’°X&‘Z‚ŠJ”˜e\y¥OÃ75«ÂœzZÏ:¢
}ãÞ¤pÛLìiÑ>B!”"r„½Ç{¾ÄÛÆíçŽ›sf¦ú¢*ª¢"""êÞïóî|éIvÙ÷³ýº»{ª*FDUUEEEŒcŒñÌÆ°>¨RgêÉ
1*U[ƒý4ú)šÄ"©zý•¯Þ¯˜óùÑ”êkÄœÆD8JS¤´k{’_ˆšJ2Ú¢¼Â…ÂaŒÂ„¯Rjˆm9@Ÿw‰5ŒBª®’ƒÅ}è´$;å*—à„`Óm0ÔVÚVfv%ø›ÌÄ5	P‚éý°T™³Þ^­çí×³h8V‹‹™@BÆÖë#¤XÒ6Úq„cœä{k°H]dqæ8ŽþçóÏ()À7Ž9÷ÛSN(ö*%å’iÿ+Ñó›Høz?Î³ë0ï«Ý_÷U\_îX>=|®fÈu`x[ÑëŒ_®ÁW²òË¶Æfa-£ú£ìí™/“c}‡¡Øêï,ïWéG¼ížKØ½úIÂÁÁ€¡`·‚_C`ûHŽ¿e =‡„¨’ÑºïŽ#PÛN Ü¬±¸QÂ‚A@x¯ÀÄv0¦ÿ—
¸|cOö`ØÖ+/¼ö¢Û_qÉ¥½hfèœŸtì¡'œ‡œý·féîí¸lã²ÍoQTtâÈÁ“†ÌxÂ¨!Ã88½ïØXWÖÍMe%)‚H&Ddž”ibhXCD~Å:ÞôB.ÂÑÐ@Ä›T’Ç!¡0m)F=wŠ•,³„ÚÖ|x¥¿iZ~dD gÓÄÑÁÜs	˜ê£Ð=}Äü öüÓ¡É…é
ÙmšÂƒö:7±A€Ý?ß-¾Ú<¼x5:ÑaÂÔ¡´;¿ÈfB@Ï‘ÀI!ð¼“@Nc	Ö¨ú¿{k&h3úPnµ ‰hÇA*ª;‰êR_@³ÑÈ3æð´Ú™sQ²´tž ÿ§ NÝ`‘xf%:g‘ŠÝ±YòHêóòØ]3ÈÕ©öÝÐ 2ÿðLNÂg–ÊrÊøÌ(íaNexT<$fûºÌGÙô#~\ðËXuÈo~Ì¹xÚ² ÜXÌs¥ÔX¡dóPïG.Hðø½˜_‡³øŠlWÃ£”ëôBQêGÌ–æIè‹_¸ôb¶ÉðZ±ÝuÔo¨YõdÑeQr9'<9à¾ªï\Ë_¢„Æl[¬ìY6XÔN+†ÕæZ6z[†«œªO©sÒÝ›,z D‹ÿÓ§ò¢ÊmäóF¸XlA|x£Y$e*¨( =çJkì¦Æ…Ð}ëUµÀN•l³=8 ŠÝ|¾ˆ±¬9låÍŠ eü«‡Rm¬@âºû*¥›äœ£%dHšŽo.€óƒ
Þ\dµs3ü¾³<Sr	½úÊ2µlÕ‚Lø–që_M.™<[%	ç
ÂÜkÅðŸ{‚é:œ…R¤ÛëïÎÑ6½‡æ0”g}û1Çnéº”GFvUþ^N$2
2$.Öª‡òADŸóT&O•rÄ “æã37+·Wå¯.!?h:ºiÅ¢-Ë7-_°(*<~š™œfäTCÔ×æªVõåu…%*¢hMN“[þÂŸ¬ã}/x¸=pÄHßôØt‚ÏçN[øØ+4¥Âd±C9 j«ŸYê¸~š`qšh“ø&ç]R°r4šÛ~04­ãX-oÞL³âå¾8¦

$ªr÷R|ÞJB‡Ø™ØÇ´„È“¤¥ÓñJé‰mGíÀ®¹ ’ ÷w\Ò Ü°¢ë`Ã)nÖ'ÊâÒ•Õ¤Ë‘øª[#’F¯¥.Ê™Á”^e°ËyÄðbik\Ô¸–ñ€dônenª¢².R7IAÆvÔç‘kL]§™ã=¶(ëseC}b4¦’Óâêà±=2°?.¸zA2ŒµŸo>]±b\×7ÔÜ~á+!bSfÚÆÈuú’û{äý–Vý%QÂ†;Ù}ÄýQA÷Ã÷¾íò}¹„1_ô;£˜ðÆåN"âgù/– áãwù÷²µ—ßH]£ ñðmoÔ:Q¹"»<GƒJ’EØ²kALÎQèÍŽ­°‚ô„øò§bo“ÚŒd€—`¥Îá(T‘ásõ9!A
·•­s¹ù&B ª*W»ñ$”‹1rsÒ7u;¡>º†—Ci‡úÉ³Òõ¾Ãu±²/ÂýS„¤9‚Ãõ0ã…S¸>Z@Âº¼e‚÷®ö®Ì¤÷¹òð¦¯ð=¿íD~@¤inÂ= aŠ{n‰øÿ:&väKBth|TPHƒÈøŽW=î^W:ÇA¶zdö0"B#ËÜ yá—ÀMWi¼ªÒ>IÆˆý%–Jö÷ð³ÓkÕŽ·œÆVÐüS%Ð«Ð æ]%c:¬ô¯ÀÉ„ë¤|*UY(ß±=—"‚·5ì*£lyá¶OÝ´=àpªØÆÄ	G¸oÙ®-¢®Ù5$-”N9?RñË’ÊÂè¤ÑœPÐÿÏÌs¬L¼³uF§â*dÅ„´PCšŽÇtdÌì8¦ dˆOd”ˆp@pÐ` ¨Æ’w×ö­ÔªT,kE"P’æã‡-B²«ƒÈ†n]½xÃv»¹íÒe]¼95K‡Ïì€doCY¿4W¶i[\Ú’+÷	‘aÙ‹	Ï4m@ð(êù«úg€3ªgd8#ŒBÿJ$Ëƒ¼bêž¦#Îñ>½|Š0e’á1‹˜"ÉÚ£”u ±ºZ5âòLdíƒ= óg 5§Í?EX)Ž¾Ü’‡Î’þ„²åá^ÑÄÌ"‡â#Ð–tŽXa¥·s6p—C¡Dv–Î‚Ù)S­lž&:„ò$&'ò©µssÍ,:ß©º!¹DDxÐx”CBjn‡¢´wT+íßQ¬ôZà‹vUõÓ[Ü§èŒûH;Û˜žïá»šì“qÕûÜ `¯.ZQŠF¹è³bÎ*£q¼É· e¸&,øŸcétºƒÅa·£cFHûÛÄd†óZ¡\Tð”uÑË$jHLâ\»)UOyÓf‡Ê¶¡ë\Ì×oICÌ7¬ÜCºGì¼¤ˆ­Ö5o©:àZÕG‚¨«3£P 9âÚµ q³÷Åàa·1±*hÞ);¢0Žm>©]A#ø¡Í¼H¹¬ÃEÛÙ˜7ÄÝ· {âÒ¡&z°+”c®’JÄ«òâ î ÝÌ'S²³?(¯c°9-MèBm”×¦ÈGøt z%T:YªÔäS}é±âC?”Ô†'ÙZt8µŒ˜s­Õ€@Z×F‰X°”‡”|i1.¡÷A÷m^;ßXmˆ_¸Ž›ÙŽ±©½Ö3Æt2„¶î~î©éû­8>Òûa`ý¼A×qÑ¦é2Kn“â¤¯œ¾{B™B)ë(‹_vÌK@õDC=e[ jJ®ÜÎìÍøžnB{ÐOI Ï¹µNnï£•¢¼ˆ‹D;æXsOœüÁëÜKi´²²´@Îs	øƒ¶×uŸÊVŸ¼|®‡uÃiÏ:^rum¡c.àR}=8H9ÕR	¤Ôc¤Ù•¡æƒ¥-õëò3! Š³	_úyƒ.4’–Èm—× §²Û-ÄŽ•Ÿmì
˜]™r:Gõû¬C¹§énïE#ï7œBB„ôÍÅ/(õôöIHÁÓêõž¶€ÚWq}ÔGuø#¡ÖXu/²>·0“·”YN¼ÌJ¢¨LdIúU¢4üWºe`ôº]²N§}¤}O»JÛ¨-ÒFiuZ™–‚<An"g7‘UH¢Ðü§ùVsSsL³K³LÓ¨ÉÐ„iê—êÛê+ê~µKmWç©ÕˆZ z¢:¯zGÕ£Z¡š«ªT%«POùRùDyFÙ£\¡´+s”QJ£Ràcû¿—‡Õ½1›•m‰.H"V9È8Ãc†ü¾üŠüœü=ù›òNy‰<QnKd/dÓ²s²}²²:YŽL'£ÌlÍí«ï~ûÐ„úñü©c7ÝpêVß¼jÞ°xÓ²n·r¡"U ¹¹¡¬¿šË{¯¡¼%Y¥Ç‰#‡ÍæØ!“FN^|0ØZå>°cò;MÞÈ6 P,ä’Ãƒ'ïÚ8Ø¥Ëö\ßŒ1Óñ#O7zªÎÕ}uQ7;T–¶¯)k—óÄˆ€à˜À ?l,¬}IwjdÔˆHð˜ˆ•Ž™áS0$T Aó*é’-Q8SYb$z6æÆ{êÊŠÓÖl”ík¬ØnË©¦:ó”“ª?†Ñÿ8ÞÛT×ºS}e«^–À™€½ÍšR«:Z'ƒ
`	,Þ" p<Åt|Ÿ<@8ÖŠò¨Êh_Å”ÀKqô…ö=ú&¾†¿fÀÓ;’¼]rùôÎ7h}“qÉ~
ä3ÈòÞÌv q^Ä[\vwã%‚40mSátêñ‘oiƒ£†·¸
¬¸†:=ÇIµ%€t=7ÈëLú…¨›ãMˆg.Ý$hæúß&Š{â“qÊSpvuœ$’ ÊŒdK$4:cèÇü´t´8ÅÞ+è7Ä‡"”v™ÇHÜsçóX(™YœñŒ4€)‘tñÖcÞ‘ê“âÙË9ñ:Ø %	 :/@èZkÍ6ÖOÀ™‚Jº$ñBSéC+¹nE#Æ•F ¤Š6*žÑÍÝ&c¨&2ë#6›E6Þ¾ãÏšæRlrâ[útdô«€š°³Í#Z+oIÚÂ?_ùíù;[€3Õ4NÕ	§d%z”%ÚFq‡vöÔò˜ŽQîNm
r3€#•Xn1<O
DR,OÄÏèWÊmüáô€4ð<û5ÈtEøˆùä4ƒb¢7¾À%ƒH3
£›Ãûœï2‹Aó4–ˆEK}Ô|ÞÉ‰-[ÌÑÓbºÎ¸dÀ‰Œ™zL«
²ÅL;Ÿ–b©<ë”eæ2ºT³8ðIâÞA41ž>-M‹%Ê×B_?%Ì—¡G ó°Ü0UcLC<ŠŠËPa$œÉ¢êËdA°à6Q»ËJšR„)]üp>Ý\Ýi	¾Äs™ñ¡¹œèÕêù/Ww‹3àþÕå™Äø„%Æ»ËO¸®t—Û+_mù·»Â Ä•W¤8æÛ¥+¶‡µÞ5.m	™9³øÙT¹mñ«tÀÐÜîŠOã­ìGó‰¾œŒZ¯œœaŒÎ:¾ªv‡ .\\eøÐ“GIíµMŽ0³ùµ×"n¦¡…Q®EhÞLó%‹Ä+÷´áê•ðÄE·ÛÅ¹Nö+õ0X¹±Iæ&y®bõ’‘/Xxñ@ï-¯L”êê+§!%å‰^LaÇÚn‡¶(’=ôÚ WÄ|©Þ
yÝlçe\jáÊWsS=È0Ek&©P€±%Z8*˜í'^Õ{â”éWšêh$l‘ä›	lq”•Ríæïh÷Œ(î…ÍÍ3š¸‚œùIXÄèò©_ÉøT?žvÙVŠ'^°R¦:”+'¹X,õtüý!Þó…ÍM“PØîÒCü ÛÉxí#ãb"éh™\“ôA –ó9µ‰[´$,üÂæûEN¥ÙÎS{”HŽº'´×¦¡÷ë}Ü(8âÒ	ú¬¨>™8=Óó8sûm¿åýžCg·ïXî«ßõ×ìØµ8Š„ÐÑhWjZ.»©êW ™´ý9pNxµƒ†Èï“ô¡ÛUŽÝº
d‰`„k¶¯J}HÜ¬UˆJ’!Ò26¼ùŠ˜=-ŸåR»vwv.)Ðb¦°ÃÛd˜`Š¾Ëmý ×!
š°×ñ~Û£frºß¡£]¾%³s4}05ÁYâkú2O­~XEÌ;6T®ÎPígAE-#:‹ä3Nîsûj"vß7=‰aÕw»—dh¯ÑkmUmÈ6À‰WHí„£ü^¡ïð®ã” ÎG˜Æòò]éú’ úEÚoLù– ø¡d†ÜÝÁR,Ñ4‰Ý)}*Vòm›1ñGÈ5“ŒíÞ<CºÜ“ŽÙ­‚kò03“£1ÀpÃ7¥+öC%D¥'Œ¾”"¤9x:‚\?¦&ä¤ôÜ—{º†ÔuŒžæÑYÔb•|A!;}!°š®-Ði~°²ràû¢{fL\ßlMçüz˜€c:AËIM®`™ ö¬šóØd?–ÿQ¤:G™D+'Ý5O™u*%ªÜÀB@ŽßØ(+‘bæ¦ ]ëan>ZM¢ãnlÁRæþeÓc›årvÞ‰ƒGÉ=ûB‘ w#ŒZ³}â²{¹ ÓQHKëÓß(ZÈ;¾Ø˜VC?Uú%P®yÖ’rc;qC³DÏyXGA(Îaî¸ÌsÉc‚»a´´—)»™[™('QMŠ’:É91W©;ÛÜ/$±Ó°}Ëá:ÅëAæiá^$­™6}ÕÞ¤H¹;™×+Š|¥r'ƒý,Ž±œ(æ3;fQZjH,õxß–;U¤‹“sö§a2øºè›°ØqtaŸok¾6´ùåJÁ-£-¿3â…¦„/€]d ‰Âê§ƒ™DOÃxñ®+H•µÝóËxIxdˆÛ–J|<—:hAÆ¯Î“Ð»2‹gtNCu£é‰ßÈ #M]&¥†Žª„õ*Æ¸ðCôuí$ßZ‚8EAô¼Úûì˜Ö^	J 1,zÎ5åQ0(=,¨/È¨Bcå¥T±TsåX”˜Û”¹cðÐÂ ÖS¸yÕQ—µn¾ H	ªýàSÏ¨nóX]«¥©qYÎ<”>éë„;SPƒ®ëE!D”§ûm†âKnèÐØXOûG*|µn$¨¶j3vJ”†®žÊ¢6’ÆN;UÏÈ(È–”ê*CÎU]é;Qªjší˜%)‚ó½”eºv¤ß÷ÅC‰&\ª®)Áƒ6‡.…¯µå½º)¦«D=²Ó2Ãð¨—»´Ét©¨FBêU»z£oØP§/y´”yï«Ž,µ‹›B‹&(Ž¦åwÖwp3ñÈÞ`³Nà®ŸÃÈ`w’¬,[®[ tk[$âòK‡›¯ßœVú–u‚]Ü©Ns}˜¦m)BŸ< %o@–Ä†4Ç´ù‘ºrV	„äû„vï]É°Y-]¶ZãýáR0CQ­SÏ,
î®ÂÐÝÅÄìG^44%}NLÞØ)«×³çõî~Ú[²Y¾’6éF-n®ƒ2ØIT¿¬•jGÌ{orè·´‚ZIÕš¨¦XË¼¤à%¯!ÁAb
„†jlm¦™.½Þ^r»ÅïÜŸ|È98á˜óô4–J}öy·×âtŠÍ‹6,YðÜÎ0hÂèi§z)í€AöÖ´n©*n,*eñŠ :ã5ØÏ—§¡!ñ'þÃ_ùÖ®VÑN¾IöQ/¡€Ë-Ÿ_Á©œƒN4S3D¥>;
,â¤ÆàýÙ#§>ÉpTboJˆš¥Ñ=‰×ÉãëceÌ‡£5ÑT„«÷µ¨"ÕÜ,0tÃF+¤2 š-†ˆëomÓAMü_½ð--Zmì‰ê¼ve²Å	”xâ0^Ì«-€U´Yó³¥zæ^~4v¢89­KË>'‚ò“*\rÌ·é°CVK°[rQ:LÀ_Ï2˜¹Š§å»’ø„Â/áÝ¶Ë½2ûI?£8© v¢6	û	¬ÙÊtèzÉVòË{+sÂ•¯(Þ&ô:ÑW™ÀÆ&¡l_§€-¹ƒ›*£erñŸ²ýÔ0Í(ývúË¢Çƒ* Ÿ¯@äªgˆ‚’,ß£:ñ>­[Lš¦Ö‹wžo~Ý+¼˜Ü8íWvöVãŠÈ¿:€þð¯ºÒ~–^Ì¸V,îwKßªo¼¸ÐêKý¦tÅo‚¯¢ö2¾.08ñb#?Õ*ãªæè°R:m¾‹¿€¢P²Vâ€¹*ºˆ‘ó@QÈf±dë[iÍ×†ƒ  »ŠÝµÕ8FÜê÷)©H72CQ
€=ìéâ%þÿŠAXk9ªm…tô‰DàS­‘ÊßÛ€Ò…ä¾ÆóqNæV¥Yïá©é›½øð±Úf.ìSÏ6\&ïx#œ­ß­=FS”µ¨Øž¨v‹n6/w›éPgPöjâ©•ÕÈÄ—$èQkBpYf%G4°{¹r3Nø™ØaŒ»°‰Ñþƒvò“Òå½1±…Q|ÑÄ½§!ý_Ê“ý¦h+P5ðr‰çïd™HàÔ]‰M`‚74Ý˜ÈÒNkyéCèm&‰~0¦“¤MV—˜$'Ýèz¨õƒ §ž§$íºñÂ[’® kK¦œ,æ¯b7FFä’ð7~åk/¸×…³(¯%´r#Xºu].«Ì³Š_ yeó¢°
„CjT¼Ú$WüŽa°^.%BÓë4ˆG¨Ü3qs¾·à2BJpY¼8zPIÙyò®
„ò
¾*|®ÉY€æu] 
x€­&žÇ…µ—fã…òÜi)¬ÍåÌLýÓëÕë¿$"n*…nª„Z¹Çäyt`|úÀØðÌÊlƒ(ô0 !“Ìw|öø}¹|üúC‡+¶Øañê¼ïÇŸ_3>ÓqÃ‡4ÕK‡Âš®×W—÷LÎ‚Âã£í}éÞØÉÜÑÒÀ¨%	mHHë
=/™é	HéIˆøB†
ƒ-&¶MÞÝën{ç-Àï7ÜÅ‹hê9á3=òÀCy°öróêeèÿW"«7[šc+¦ß+í#æLÏKêz·EÑDk|Xæ”Ü¶K¡ÛM”
–19*´¹Cç`Úv¯ño‰d‹Òn_³]“¼ÛÄôL+–ÁCÝR_âìûýd¸œÞ\Õ×	3ªó—Iðg92S6ñrædYÆIÕv1nþ‡®&i5á)»ú³2ižú“'ÀLhœ)ÙæaÓŽý) MýwæäXÆÞWûŒ)šžÊ¨M¯ñ%(9TzÜ’Ëø·¢™À®gºY’ø<´¸hN
°Ûl²
~x`\_Üsp´ßÅ©Ú„joQÁÊº[ç{R/‹BKÉë7ÍIü‘þÎdVSp7‘`.%_Ò•R ¬¹U}ÛÛ(8…”‰†gŽ»˜r-Z¼ _ f5¦†åö08¿†ª¿1qMvõÎ_éÞ¡Dëôå˜ðõÈÔ!`qL8D/ð0ŠôW|ÙPºú:}9f§o.¢±ž’%³Ü6F°2Íö>WWÈ x_<G@Å‡Œ¥sÔ/—6ô^	XQÄ¸Ê}Ø[®vùéÊ¢Å{F
e šƒ	‹Ô@}Ý«ÔgéA3!x¬/£ùé‡åôœ¦àxÑ˜ÎP2±œbÎ…F·Ñ|6¬]ê¸yx»®·˜ÑQ<çÈâÒ%YÇrH×xe2›¡9R®ƒÜ¶+x\‹g<•‡((ØÕü^¶Y]ÑÅ¨äïiÆÎ’lÓe5±BOr,¸G>h÷€ùæÛã¾¦Y…•ðL½Jç¶YJ±Êzqa1ñ¤5ÿ-ö*.¼”‘í“{ñEß—ï}`	tvf^¾à•Š/²…i¶ñ¯’C8…ËÌ2 9ôÕ›`åvøkŽ„]W”*”Ð•ýÂyMH}ßˆÚ …è16ÌZªÂsRÚUÔŠ»A4˜3ÛAMKÒ¶¨ïZ@=“ÉŠá.¥Ì¢Y@õ‘K ¤¿qÊ¯Ý£oîû* °M·opqnìŠh•:KÉY4ÿ$éÂ4_. µ;|–@ÀêÉšH“TŒÍa¾¹¤ÞÕ³~@s¥6oØ„&ãÓ|m½^Ä¯ÿZª±J‘66.8Ú?°§ZL9B*ÓÒD:µ}¨á¦HŽV¢EÊD«`¤.è,÷ìæarO^ò÷À¤ßÝ^R£'¹”¡'­—*:™JààmÀþ¤›¢ßxiþÙa$Qtiòb;,TØ	î¢rÆéYD®3ïôõxÄüH¸Eû_¹'ÖkpTH<5"4…íyDwZ *ž"¯5JL± PmáVYBYzO ŽµBía‹ÙÏú(\òDÑjù"Ž^cžÃ×2Ð¢ÓJaš®yk)êêDjvÙ„M³ÓÕ„€†âÍ7Ûá1¥²»µÐLîAIÕ(iUNiTá­ÎE[J¶”*æœ­^pÚ‹ùN½8Z+qTQûõAK‰écy•\¤pŠÅh/^2žF Û—w¬lc&»©ÃÊº[žöý8IhlJÇibhTb‰ r©bâ\$ÇYZšÕ=W©ä‰ð|ndMgóö’z¤a²ÕÊR³èÍü~3à¼z‡«¶ë:'E+(^G%K¯ê~BY|¦4Ú|ôŽN‹1úè¤<3ÆÏñJÂ%/NîcB3ÇG¤‹HþÅï|í)w:×Qv0AŸ“6‹•î:£Ûä½«ìD¿z5ŸKýà¦VqÎ$ÔÏ`26cüäÀÍûÿ-¤•™5¤½’ºŠö*´c¸ÿÒJl¡{ÚW×ÿ úz£…– ŽGÓHÊ¥óÂ +Â,O>ò†!ÜbodõâÍÌPü[*M½9Œ¸¡é`=§Ÿ{¹Žßzœ~Â‰š›zÚÌ€Ej*OIVfî`tæ€`‘²ÉÇÕü;z$.Ûþ?ãÓ>KüDÛ~ÙÍw¸â®ßtÕ½el»ôú|9ÃY?öCyðö~ý’v°`;½jÁ‹ Â3Žžùøaã‡¬ÉhæâÕ²Ú‚âä11<Sx¦ÑY8@~Æ:ÞõŠgŠ˜®«O+Æ8ÊU¶a%2GSDyh«j(õ†š$ˆtO†(ï²Â,rìŠ’,d¶¹”uÕ2G‰$8:’­¢O$!‚wÏYa	T.rÉá„¡-˜»z{¤ôNUº  ÊxYÓò¤·UÃý~Ì&#ˆŠ:Ç†NWÁU$â…ÕË*ú‚úê¨uÅÍ¢6º0_Çp-í!2G6ÿ­„úùC¬[üÈÁ(ô— ¶DÂ ‰—kn„z^…°Ô'=MF>Ï3®NšxÏcxòé¦ÃÜôa–½è«oaÂ¡QlL à69ð†ÿm%=!_’§ÖÌ÷v	'ìu›tI'…¶v¹,-«©Vðyõ Q‡><AGÑ’g¿B ýWi²Í Ë˜-PÙ Â3zŒëùsË·!Î0“é©ÄjÁ‘ôl=HësÏ5ŒIâðW‰‡úD{­ÖSwJÑÉŠ“#_O/]‘6‚gDÑØˆ&‹£ÉîÎID‹¦ëQI€îZIÞñ°h<@—ð/€^ÏÞ"0^”§¿)­d¥SÎŠHìé+îÇÓ²yàã î iZä'ÉŸ¶©¿ÔEígë<8TÍ;Ð	7É'Xä}Ñ°n…{xˆ`Ìç:$ brâ;±=äé„—hkÙøØÔé¤K\lN„µ¾Í³‡JÒ}TþÿdAH¬¿Ü¸t´ñªµs÷¬å´+%¦/òº§(¨¯)¸Äœ%	Glà xÜƒA‰A{¶mJLþ( GÒj<?ÜUS4¤JO²¯·_¸yí’]]·lÑÒ/†j7ÕØ¡cfqE6¶+¨lSZòE4cdX6£²Þ0ÇÿøsC8Jð¼sÛÎé½žøFE’n¡Ö[fá”%û
›Þ÷X­Ý¿¾±—+vAË*ï£ÊrHï¶Pjýj÷“
kØò•¡˜¢ÒÊ¢{ Òº+l'm„ø]û\‰PVEqâ€ý¼ÏÜ²Žªië£N
l°ÓÓiÎ,¤O×2iÇ1'Ðþ"¥}fœ»¤´¿“Ü	Jº]2 p-k†zì6Lg‰2‰x”ñ»×böl\àžÊîàw³Y­r\Õ]Œ$Êg‚Ø2c°‹;›³ßøŽÔÍUÈ.‰ V-&Hß\­$Ç¸“‹ü†k˜ÞìaRän—zhUTæ°zºhMQžGÏ€k‰ç°pì3™o&Eåy>["nêoÊp‰í9Qsç»Ü¶8/ÚŠûÎ‡ÆÃæ= h;mƒ¶Z<kh³h_¢XM‹œê<Uì(¥2“^$³GØÍ¦1¸¹4ßö*do¤°±6w¥xZ“:ì.épH•âj?žF&ƒ>„r¹òÖ	à€š°”æxí(ž!ëQŸ¨4iòn¤!„®l4ów>øœvRÇ —o5*±†<QŒÞ=l°±;¡[@œã½åMs´o÷íçS8zdô_¢2!´—iœslœâ‹ä(BÒ#>’å[iŽtþÄ3Œ‹—aks$î
_ä,]U¡fè–àà)×8ÚÙ±³âkKX1šâÛí6ÍšØÆK¯¡ö¬ªÕ‡´ecaâ‘¶l¶ÔÍþ@;UÊây®ø³<ÑÉÔïýÚ
ÿˆëÌ	4Æ¼àNèÁ|ˆ,L˜·vpùâªÆz¢¾Pýh§!ªÓÆ%
)yþ}åÛ¾p	Éc]‰;P §'Eèì_³w ó@Ëq×ëUi?U:à^‚hhßCß5O_ÀPøk† ‰ûÅ¤÷êÅ‹P®v¥<‹øNø«•<u–Fg.Ñ>œvAˆ ª×< \(Qe¢Pìôvè_I˜û&E%ö«³[Sÿp±1óªƒ•k/\3èO£”°ª‚Z9Õêˆq`Ã‚ŽŒžˆ„x4˜ÃÃƒ¢.;6|Û¯¿àŠ»x^ÏöÑçÏg8öÀCr eýº•‹¶nX½ë¶ÝjIQ…§›rÒ¨¡‡Ñ ew·«ºQ[ÖTY\Æä1cx~¤Æ†f;64üŽ¨O%Ó5ã’ÙzÍm!³cÝÆ¢]Ší©oz=½^)d:µôàz³ÉJÅ9 Ë©æˆ±œ¥'rÙê8XYäÌ(3…E…óe@³[ì€Ôw]#0uŽ¢ü½%“•Ìß=’)q¸‹’ÞÉ)ž%À°âè…ò~+Feïi¬Þú­forXæbóÐŠe‘ÈKcJ¥BÃ~QýÒ¶‚÷¸ ö®desœ“^ì9‰=Ä^ý…’¹{b.­ÇÉ½—Âã"véèîQ}“þvìšó/¶‡¥Ðnöéþ#ß#ýxrÇxÒëpB2)Î):ºèóxbnÌÏ	J ùÊ h]ƒÈÃÕ:)¥4'»áœø†²ýn0£]’O9ùsV¦<÷½þI>éSÖÄ5s9–EÞuoÓ¼²Ìh€ÒÈÏ½,srFªÏÕ„¼o¹ÜÓ´¬£ß¥	(k`Ä#ðtI6fÚW\Ï³vÅ¸)ázò'±†®('m1òt:V&_êT=–2]T-;-Ni¤´BýõöLÊ³íúGô°+¨p¢c:Ô,M¶“K´œp ÞYXp¾t:>ì¬é_r.o³T¨èzGÊ´!#n ‰IîgAér$Ë/N£ZnbÔS†åüÓ0ô1yí–Ÿõó†©×ý˜¼à´èvS´v–Wúâã|˜#ý‡oðSÁ®CÕW§/µà“÷ßœÝQh@„og˜‹rJAx\A—lÄ²µzÀ$á:œk%Ñ Ø, ¾Bé¬
<•|‘¨Óž†ÁÓll¢Åªˆ:ciEäÌ3êm[4k<»{TŒ€¬è+ùšÌ8ƒ9/!d_H5Â;„nÉm»b°xŽ/Ol+z$6YÇ ªt]¡Ó,­eÖúÆFúnl¥÷S:9FÇù^Àõ™ƒSçnï"/¼¶„®ý¡Žûx±GëÜŽP¹rÄ¹¼j¦¶<ºL(/ÊŽ)™Q`~º^!¨È¤âÞuÉ–¿n‚¿ƒ±Ãgsô¬ÒÊú«‹ŠPHBPtæý‡_yßSîu­K`¿ÞŠù=^Dš³£¾Íâ@.¦.äÝKmy‡‰`VQ_2ã8%IaƒöïÎ™=ßüL1:èúæg*›¨GòØ4-FýuoÇô]¤øzô*W®¾@ïXü#€ÕƒN‡Á;l0hgXñí¼~¤¥Yêýùp²¥o€mÊ/J†•Ó§‰3Í§¬;[>ƒ6æF§z
œsœíÜ«×CNÒ†2s.nÜ‘q8³ò¤ÕâNÙÁl ð(žõ¤ífÉç’ýa«whÙŠE2ñyÃŠ›8ÎNLÆQà¶C­u•9]ø³±näÃÙºÖ\Oî.ßëp3¿"Žœ¸ráêïç¼˜†ýné„ÁC;h²µ¶e]AuoŒDð;§¸€È˜TÁó»ôÌÃn·­“ê?œ£N¹ã ùÂÌj‘j8€®À…ùßK¢Ñx:¦z„o9ZÍ&‰jµR35sKƒ¶:Bïf¡±á.º; ¡ÏÒ„Ê'ý D4»³šqGŒÐ…dû„ÏÈ¯ñÞ³í,xê‡ÍZ´e&4+Ä®€ˆ‚˜ÖÞ/9+^_DøNÌÆjß=AÚ¢z„$WˆäW‰n&à…Û.‰gÄ™éïQMP žÌcŸÎ-%s÷†Jþ1jo‡ì»¨zŸŒêàk†-e›ïsCÙ8n¡n
@‚vbD.ÁöÎÙˆØßØ¥´}9dê€±fnžÖÈë\?oH
:"	uAC½>jªJ‰%MXäfÜëXìøðD
iw§´a¤|ò75¹­~Ú†(³²¹/JíFG vˆó¿³]¡‡ú?Ž¶×_qç·\y/¿×Îó?í§?÷8×HÇ7­[¼Ó–®[±hñæq†Q'Ž4Ã4SãHv×”5Õ5T5+šÈvúÄ†Ç¦yˆâoüƒ?ùÜKuÕnè®NbXpUåçót^cV:Qwm@F-/yV`ÑM7êysµö ¸‚Š:(oƒ®$‰†¢û¶Eº–è1_%8‡µq”×¦ÈGÔçlè×Ôù´HNGðôB$Ñ¸ù1í1uæA»xª«Ø¸:ÜÝÌx)B4,%&àµ£ÂV4”ú´ÕÂw³=b{bí¥ºl©sÆ?/”¢©®³lËüd¡¥Šeˆ;5º~£·ŠVŸfÊÅ"½œqŸ-<FèÝF¢Ò}Ûî
±á>¦¬ÌíÕ©§=U){õÄ@Žì›œÃYA{C*iGá¨Œ6õ!IïoãêxÉU'[½¦òž·”ÎTjÍKÑÁkf‹.KÑÕ CbOÍd¡|ÿ£g®ííFúEPTr›Œg†F­ñÚ<3ž~^°äÙ¤óéÕ@”îæa¥Ùðì–-‰ž>é½BÔÕ€Ó¶Aés8¦U@ö
µègÇ©ÐKít|"„Ñz>“tWiUÃíéqØ/LWE}5«<éÆr¨Œ¡ÌÒ;­˜oswZ¦V¼…šž#ú}À#<g7ÆdAß»©ŽIt Ý ìFüjnDif]Œÿ[9›>:Ig·<¥ê[™¿s„?Ká@³5$41yeÊïtºãê!Àñæöåufæ—ŠUEe,^AþKï&F&G‡øëšð`†4þÌßøÙÿv}êu/xÔµÎ¨}µT¢¯½©jÂ8‰®—¾œFç@µÞ§š‰–>;îÈe.Uþþ¸/m=6Ý1A©‚“¤vF}V\ã(¥ÁÚ‹Ý¦Z·)šÙš&#ý:è¸¶]ñdB=¢y)}/îiÁ»:ÙHfkæÒŽèÑ¶ k>F–p’¦l ‘'úá~6ˆ{¡ÑàQiœ²·n(ô»Oø¥ìbUÉ#¡Fî½§n—ôB`‚¢Qn¨V{Yêó3jQÛã=«ùN=A…cŒ.îŸuÇxÔMòö­Íá‡]½Ææ~Žnqø³±û(±±qzéŸ:#B$¿‹À9zy`%Äýîõþ¼k^´oìÞ8ìw–9#ˆ	„ˆäúä}¾Û—O8¾yÞucÑÊ=×wýEÿ¡d£g¾Y‡ŠíÛUœÿì¦ŠJœŠ½wm]<X9Yº°–×¥¼˜ŠˆÖÕ¨RE!g&6„ÌìÉ¸IGMÀxG‚Â µAñ.É‘E,RIjõUÅûZkŠTÿTjø¡èäînØz7W/ÞvM%§>ó¨i§»Þ”ÚIô{­›ªKÚ•7+N^s‘/éC³šXJ6çOªm¾LqiÎß±º¾vï¼¾qïº¾uïþNYn&gÐ‡‘-¹¹««ÇB<CÏˆbÀ€q¤ûˆÞS•æ!e¾4¥0—Yô‰Î†7Ú
ÄgÇ¤Ì¥'*šdIRÓóWzº‰×ë/ƒµ|½„jæsÃ"¢îƒœ¹\j¤…ñãï+G@†’TïÑÖ³Cªû,©”¼É]—XÈÄÛ MN·3Á1ÃsšswÐ?P—‚!‚Ågî¶Û kËßÓg.¥†;¦]ŽºÂè;=÷×¾î½¥Gf }gôØ™ÈTƒSf›µ^(åÌï8,MÍÙpº‘Ï
`.;1óÕ)_ç;Å¢jŠ¿ÁªÎÇ•¢Ù[®-ËÕ¢m¹F´/×ŠŽå:Ñ¹\/º–Û‹îŸa=4Õ8^‰`˜j[ƒf WïwÈÍÛâÆ+8CûÄØ‡þp^,§†‰ÈYÕ®àýn_ržN~
vxtÊ8ËáŠG
a*Þí	‘o™÷Ì©¸rTâ^ú<$ˆ¥*60JGÎ‘ƒ_T×¦§+_±‡!j|+ò S¶#ü¤.ÞQ _Ò2yÀ
Ï~1*ˆu_,
‚H{zñ¨/úéõFé"¦¦scW©Î¬EçŽÿµ|œ(ô5åLûÓøÖosx6Ù)EË‰™ÒåR•¥èœ.Ÿ!€{}ß}[}ùcn¡g×€h“2ÜÇ‹TÓ”ŒÄw„:VZË6}kD—ò­ËßF¤¹øÜá+ØñÐg³­‹n4¿*1RÉzc=*Dý`éô)¨$$“.jnóU]ÂFûÚ`wP#ˆc—Kp‹¿‰Ö7’;M½O% }°Lh—LW ¢Ì`k	ÛÙ¢Å*U£jû¦CôË,BiWæ´CvAÍÆPŠö“hB†)žûˆÛ÷#Ü£DßÊÍ(Ghpý¹Q–²yk½ƒŒê8W¯7ªÜDóÇ6âmDñ¡	²ó‹ml„Nïkf³Q#˜”.…¥ÊAG€šLŒY:@‰>ªsQL`À'†aœ´Lû©1¦¾LQ‰å1Š«“ó ¡æ£¸†øãÎ(±ú²–)iê”â¯·#«I*+Í-'MULÐ8A™û‚¨|¿Ý$÷“}£†Ú‚HðpxmæQNÛzg”Û7guŠäjt~öQä±ž×ÛQÌí+¡üÝ3=H¸±Ÿûîc´J%ž¼åG‰Š9ëª
*¡u!š¦²U²Cï!ÝVŠûPQeËÃOÓTUaþŒôÔéËa=ÀBú>øDîbô3¤vnä¦hÍñýoXõr7‡[³Aý˜õÓQA×|ÙÀ'%Yg/ŸÆÔBöÆ
ÂÔŠ+lîŽW_ÿR}ëÜ§€BKRÅ'ZE™žFC3Ô¬ ·ÀF&©QÎ­ñ˜ãqÕþçU^òÕ¼Ø+{!8õOóÀ'>ú!O÷ˆçÆƒuïxÕ­n¹âÞ»ñò‹/ÞT'y–<î€ÔÍkmÜvýÖK:ïãG™iÄÄAîsseçu½×Ô0Þá6Qn“¶¯ë¢ìïy E’ÿò=ßx½^çùÔÖá
ía~ÎS5•µ™ƒÚŸòF6Üg¸i·m¼òŒ( Ë¡ÙÕ–C¢‚&Üã•.íBef±Nß' 1ÑâYö¥ƒ¯VÐÚ8^?ñeÖÌUæÐœDÌº0T.åžk~¶<1©6Â©í¿ã©ÐæÆµø£K4`¦%I¿`•â9¡û˜¼fmœg~!o›®5ƒªf`{ó`€;üY¿aDTAƒ“"áãmä/ˆïÛG(Àj´ÊÇ¿j)Õ—l!ÂèÜ¨ÜþË‰š²Õ¶AÄ:ûzkÏ.ž h‹“±è·’ÄÎ¥ù)ê¾^a¡ãiJJPfÇuò…O@É?£õ$À†zûh9†AP=n¬Ðy£
Í^²+èÄz{=”ú®—˜¯Ü Ûøw•“Äé‹ì¨Ë#ÕFAd·ÈVç?”LQz4ŒC´5Eû\¹|´`™7ãû5AK&wS©s]mrò,è¸^ytX|*“”ød°ÅhUK@-gVe$™o}#,âocÇÝ=žIý$•†X5ÝSr¤«1ea%‘ÍvÎGˆÊ(í=¨ ÊÙô.‰Ë…Ž2Ço5VÑ«­Š+"*¼`¨ZþÂ»(/"Uµ•Ñø-Ð´p¬‡¨ÂØfáYÑ:éøÒ©I£
•l‚×hÕþ&å¤Š‘ªvš…/wSŠºàÏ\‰LY«äÖ~ÆJÔ+tf|„†¾Ë7Rëˆ²j¬:f¤²ÔwõÓÉã¿[ìöæ•ËÖìµþ9`üèc†OÞ¬Ûí[5UÖ—7/ÌOv3'¤ãƒþKÉƒ>4´ñ¢…-ô(¯N¥‚„¦â‚j)ä=K:ÞgIÀ(
 8fÁ×·ÿúwû³ÿÖ:{‡¯{Í+^~ö‘—žxùZeÕ}áãæ¤64Ç‚Å›_]{0~Ð¸ˆSª(h¬içØ7$Èu|j¢»7pô.hüçÅ<r`«'>µÑ¢ÕNÎØo»Òzú›{Ì
A†c(Ð[RÝcàÁÞ„	@¼)…p£xÔ‹vRAârªQ#óTìÛ÷	øˆî}ÍÀæ?ÔKÖÉ‹’œEçã‹–×hS¹ú³ÝB/¤¶¹MfÅÑ$nú;ÏPµ¸­Íà‰jžüÊiI§îEv`¤¸ò»÷€^¦Ëø	â™ŒEÞûÚÕ>j$(<Äa]`o	3d÷¥@‡aXy‚y M°EžR¾¢:ÃÃEÞ´NAeî#Û|È¼“.ˆsYw	eF?È¿.,Ö7“ujÖS™Ò“£p,´´Q´eOw…v5Š‰1øDiX×œ»§zÅ{<"<²ÌFdséÎ¢’á¢ÌüÒ<”Z0=,SÞ*«÷XD¢I¥rDÀ°NõFªb3=wÔê«7Íó½¯mS—ç±è–£ÇK€KX/8Xu1¬ÞkªÂê|=æ½I9^QMRgR-ÂH7Ä’ ¹+B9ƒ@liË‘Tn'5L»¼,:¢E	*æ²ß&÷¸º*§˜šßCÙŽLät}ÍB?Ì3VÜ"Âtª£Äé†,-=æòÔ=zB	ópöq¯¯ÂPe^hA.xg¬¤E„éØÃóÆ{AØ³×)Ä.ºŠ¼ê¥C=D ìRCýx"F®ÞóTGßá'/´)ÊJ„ù\ñðh´°
+=ÄHöÓ½—†+Lªœ^º·B_¹·…µüHœÞ$ñaS4èÿ¥ÝY¤xÝc´+dÀ!n[™ Ð„%{ ·f5²	-…)<§üH{Ã”ÿÈ×xfwsÃÜGd+gÃ·.)Á§¥¸˜–Ãa¿UÒë¢§‚$'a,¯±³¨tÊØ®¥^G™!Ol¡ŒFÞ£ æ!2G¸L!Î3•œoØV³cOÞ»õªšµ¿$§áã÷š	*Ï^åÃ(µ±òSÄŠd*P×ª¤J ´ñØ}hO}]Ò3…GSsÙ ¬ÅþXÊn2*n¯j„­	8ÚIÉ•ªéQü´£O‡|ã¢%þh^ÓékÆäªî‰ì¢BFeàü¦Q¨*Hj†	•FPèß7ÚÀ,dQ}ö,bÝð™mC‹zÑbö}M6Ÿjô<ž!ý6¼H~SpŒ4–/9‚ØEÁ…ÝÐmÙZNô²^ìÙpÿðº¾ÇŸç·8ÿÃF<Ò¨-k†MxLž÷ÂÒÊãVmå6×TMÐ+÷r<?x'á ü Bé!0‚Lr}ÝÑ;¸|ÝµWN4ñ±»xÇ¥Û¯ØrTúoÒÈ^†ÿë€#&¯¿öE­uuE5(]…\F‡æ c@LPFÑ	ýíS[oÚ˜Ø›yÞ}Hjª^LSUª	xÅ@M@MDGÂ¾aPA¡Å4-å¾÷7\v¿Y‡›6Åoqë‹TÝÇ~ÒáçÞøÉŠîn¤†k·Y¼ŒÚ4ï³;]óŸnäà!ÙZÞ½úŠ®7•DóylªÔ!bgy¶ŸóDpw¥², ý“âRÈr#ç
½óz!E>:•J¦îÜGeé$?Fj»WÄìO?9p}Ö±{ç-«)ŒCæ+ŒQu‚‡òÚ¸èa`V,>~8ô”a Nœ‚&ÐÇ'§´aà©o2NüÜ4ëyï‘%dµÂçuœ®mpï$‚«Ô¬]¦8*JS¦Ä§hFbt^t]Ö'ŽJeÇ@4dÎ^àØWäÀç¬‚$ ÿDnT—óøq„BÛc^òÏy«‘c<ñv}uÀn„ecŽFúˆe• ã·=jëÉg‹n8™xù~88ÒžŸtMp“5òpÝ^ø@cÛ+é†‹A(Ï“óB‘Àš–¬†ÅE˜eÞb8O¸ÉyÎLÉÍ¾º¼ØQ3éÖ¨*ð-:)ýk"hâÆ~²‰rÙ¤ä #jCSÖ‡Ä¾ò<Ì|tŽ‰Þ	àÏÁI]FiÐýÍÅ)%à:—jùn¹u8Ç@í¢jµ<è¡¿TSÇ2l6'^u>ù2I:›àÑ¼Eoô<Û-¶ÑÖ©ÏÔ!sW¬¸VèX3žT§ãKæÀ7:‚Xn·¿œ$‰5\÷Ô7#˜…mò4g`)Jåh1ß™ò‰uðêÎà®ž&lªR=!gJü!R”`­ÿ ŒÆ®¥“ÒŒ>a„¬\­å…Jcž U_}ÊZÆ×¹éÞIJµø£-àÔzG¤™ŽÂ²Œm£ÂûW ® Bønè‰]<KhAÔ
‘2žs†ÁA «kâ„ÚZ,èDåuº·N z“ÅU=ú íB™¾2 7]úÁ zÄkƒ*ßÀÞöcgÑóàt5ûòÚÉb©ržF¦ŠuëdL~¯õ°û˜WmêuËgXQþaÔ'5-¹ì§	ÄS%ŒPÚ&»£÷8ƒdv ozœ€ÍÄŽ<V²^(…Ñ°N%G¤˜If'kÃ$yö°öåÎùjnÝðOµv¿5§›»ì“Jõ€O„"ìÕP¹|žÙÜ1±Öa´ÿUFz*õxTë$=ZÝ^Ü‘ÒÕéËÞ¹¦—siVqÑ‰2'Ã¤Ò:¤BÛ&ƒ¥©è Ên!˜€Â´ÙlüPõRY7âþ(žó<F7¥¾/ l/Æ>—:‡E) œa±Rò¡wà¸Ç£ïcGsnA²\Ó`Ò:îãèWä	­çš…
ÛòéZÿ(½Í„–ÆIï¹ë½Š
ÁÑË6Lº½J|Oà,æâ‚ÙW<·br_5sô39$çXÁvQxs,¿6 ¦¢]è¡²6s•j»â²€D-d¾ç!øF5	ª¡Š› ­°ìà%œÆ<ÖáÄX{ëÃØ
Ú,Ìh,ÍI˜ƒ³k=Î„PhG!Œ¦µ9°RþÖq×’YÒ?Ú¨îr˜ÎpQ]JŸ°¤ÓÅ?_ÖBü/_«½¾¿Zý£­øù¢U®ï‹‘âzÜ]Æ °j³é2nL§^ålŠ*‘vúÞÜ†tœKŠJ½ rùl‡/Rx%EXmŸÈÕêm°àâ°`iMò„C\¾ª­Ù`¶ã4î<¿Éóò×ÛööÉy'ku‹¸|qó2kí7ž%˜˜•]°µg¥yæ‘=â;ù5dGØèì›Ÿ÷YË|*ÉøÞÉÂ¦¦F=I«””VCÞÓ’0°å@IH‡5 :8÷úÚ‹zÑ‡Ûþ%š ãKdyfzZm':ˆºýÏ[”Â{°iÍ¶;^³8×¢¨nÞøñÆáÓ˜K}ËR¦uÅ¥/Á>KÅ™Â²Ò ð=óæÆ©_„Û?HÓä®ec›tŽªAú´}¾*ñaÐ¢oêÕC¡N…Ð°Òºûv½%Hg[žyô‡.Ò„`Ð± ˜z†µ¶kKœñ«1!\@÷^£„ÊÝÚŽÁ€[íìþA©77L‰¿Iž0Ì(¹Ó0±6îãðÇ	?ZÙ\ªæV7¦yµÍ·îã.G®Â?™8sÓfgô_HÀ!¥Ù]—ëŒÿ7Öç?m£p!ðoKóPUÒÚ™µHº ÷ÆW¥ÑéÆÑc 'Z×Š2à2!ôð³&ÀÝ$J[ÃkpxJCqíÙ,º!R™y%!6h0ŒÂß]jE£6[Œ=»€ÉK€=xæâòV gAŒ…®‡ú»¾¦MŸôÉRLMåœþ8ò¿¾ÞM¨Rß§Z8öôP&AVÃÿ1Y½.g>Öt·'À™Íx;ì¦NÿŒÇøì²Ã lz¨ É=Ù'y»Ö|[)4g‡%çØƒu#¬m+†mð`¬AGgƒBvÖW¤å4X"zÈìúãnÖ­:ª¬Ý>‘E¿?hY1@ÿ›.'Ø°®sëÇþ…+‘¸LC¤aäÜ9P‰\öz½w4A®Àêê½~¼†úCÈ—îâPàOÖàhrº3îù8þöÇ8Õ•žU5C†êXÉ~201‹kòx3•x÷fjñÞÍ4âý›iÅ7Ó‰Ö^Fh¨5fááÊúdté¢ò/í9ÞCž)úPÌ÷LÂ}üS&–pš!›|x¢=Æu±êè$©9pä`—:dÊ½¦Mã¢…àƒ¬Í¶®vYú	¦nD4€èÖRëDµcJ– Ç*u]L5PP7d†Å4€7h~ƒßAGÊÈ¨FÂ:käH­^¾KÝÔVÿÓûfTí?þÏágØ^e±|OL” 	<Û*f 
xr}ìÂ¡3ìöy~÷·[¾óúE¶ƒÁûzô,˜~hÛú¨mqµÑ¦¿q£¨x¾3œï”.O2NH-±g†®Vn­|M/ú¡UE©xï´Düà6%7HÙ²`
_p®[÷øÂ+n¸æâK}Áçüä£ù“GÂC3 øÌ––l^¶ý6}°Ä?#Rªš:nø¤1S}Þ¤8Þ]W¢ s±”\Æ&b9)&êùk`DøHB +h ›ÿ„`)Ç=hdIØ ž0&ó©$2Èâæ;lXí‰^ì3îê7;Ã `”–•ŽÖØ“Q"šŽ¹Ž
Ù…ÐÛG‚%eÀ!ýñTYžxÈëG ÜÌ6iÈ`å#ß÷»RÀ6´þWÂ©ÓûÚãß/9>eÏOdmx‚áÛ ˆþ~ƒ;õh÷GÁ
(+5| kLˆðƒ4ààL×*.¦›ßz‡¢\G‘Ô™û‘®ZqºGœýKñÈú%\Ü¬œÃÏ*ˆ¿Ý¡”ÏÉ-RÕn‡· $ÍA¿í4ª¾pÞË91°›düFu»•ç¬bØ_üJ¼¢ÃÑ£´D
5.«Ä6¡w£+Üz_}h9õvdÄÕâ¾“|ð
Û=°dx¿Œ×pˆ– vf&àÆ?‚ãÒ5ARË,}R)ÔÏÚ„VI—‚öôå)UXê_œIæaÃße™K‡Ö¦wúoøIªÙHö`óéÈríìÉ=Ÿ\6XmÐÿÐÛ‡G¿¬7ùAÊ@×;êï3ZÁ æ¬æg¿Áà~ä)P&¸ËSp›J&¸FG~î‰‘àÆüÂ³Õ»qÏ…¿1‰¡cLq/SeÖqÒ¿S‚ç-n"}Ö³ÆÂÐÞ§ÁÇI8°Î¤*ïµcv§a8¦•£¬Z·gqFTÃàôŠÌ¥Ivf@dg)
s,±³?X´]Í•¡Ùü Š§ŸvBÐÁNV*'­ í¦ý‹úJèí®íáŽsk°ÕÎg4œcß¢”|­uÇ˜35ýyÀ$pt½‚U>åuHÝ	,›ÆŽ©øè¢RjÝPfgäÅŸNäÍé¥à!Ø9l#ìŠX/ŸV™Db#m‘&6Î…e1‚4—mÈƒTÙÎƒ”†æ‚#¤¤TL]é‚r-[a9ÿÚ¡)áÙN>8±Ä@Ñ”œgôC¤?ÑÐÒ×]¿ÔT†"ðú*ŽÙ•Û#ppëtˆl-ñÎÿ‹î!h.Í0N†Â8Ñ H‡öô£qprM-ÀìbæV¥iÈpØlUÑH:C±ÖÑú\dÎIìõ£9ƒ/iGÎ¸ë0’U3v&]Ç˜NÒçpoÏ0ÉÛ#RX¨N‰¡¢=‡¡—Jrœz9,ýÇO08.@”,Ç¹S3;þ£pìãó•fÕâÍ˜ô^<g:>SX´x§ò“1ÚË>Sò’é‡
R®w@=_	[›ü:Ìú±YV3ÆbÇ2™ÅNeÒÝØª‚ù*GÊ´¡Cñ|,h,·(ÌE¾F&DŸ•~ÌÑ¾éß}Ò9NÞOã–ŸTJ{Ó{;CT}êÀ\ÎVòA«"½àn­`0|ZI¼ÌÔ†ËÞéynÒ* ˜pƒ
¬
ŽÖ‘bEp!Hâ?ÄHÉ3ƒ ¸Áàm×«qR*Ü©©Þ¤õË«'°O€ò
B\ù•YØýÊœV¯´Æb9C‰s²‹)"Æ·YVú›"Õ¿8+±3ñÖš›8É1vKÏ;NÅîì¼¼T×Ý5x²¥ÀF1&ÈÀµð)"{-zd%¹Ä-îuÂÒ‘;Ì
­[q§9ÁVl¨iî„ÚŽz¹¸<ð˜ñeùm;žæIwºÙ9±²x)ø&á© «wìTqãüçlÎ²§vuð<;ãÙÄ;]BÇëµ\ÍQÀ9pº!Û]sl\÷XfVÎKi°öW[m°÷7iœ7ÿ½8/}ìM¯¸ß­®v¡sœäˆUr>Z»(sÅö&k]èî§ºŸÚ¢Ùý­AÛßt}ýaÏ°ºYëÐdz%ûHƒAoÁxõ¦ðR½Þ»œÝFQšï}GÆ¥äØ­…Øcµ1ú˜18…“TŠ?[ÄßVóû_m§ÿ)½Û=Êù8½ïŒ*•þv°Š¥8öðæ~ë@!~ÆßŠšñeÁÔ™æ/‡-Žº´2WˆÒA9ŠPjXŸ"”¶‰¥·Å·jû¬³ìHáã“ÆãÉ8c²+l:EhìGjVˆøRLµ¨P›‰³Ù§¿,ÀEÀB´¬¦ÃÛ>å»,4	õœƒ´ÔÀâjƒ†ÜlÄ¨[»¬ÛÿÔñ{ÎlD‰ S‹w¥ËžáV¨+’ êJŸ=A¹rßªP¡D¯ÊYô÷¨ÝÙÙcvÆóÌ„
 uSmßÔÓv\2cÆ³µ°„ï,
û€º¾Ôü«½lw¾ôª=¹Ù¨íU9p„jN<°¨÷ÿ* íuê:LëÑœ;Úñ4~'	2cFØl×‹%þøcÖ_ñ8vŒÂ‰õsêþU#èá  ‹DDPÆxñ‹’{ÐistÏ¹¯«¯ÁýJøÕàcE‹8ñ™ªGY6m’›,š›ÿ¸uëØ;îÝ{štšÇˆÿ4Ooêgûª/þxõêÝ›7pýns9"N‹•k"œtŠ&6Á5ÉvîZÙár¹Z:Åžº¤Ê–)SRŸ^ù—cdKé<;â=ÁŽM4jÒü””/ß°†ßâÐÂGƒÆ–â]²˜Àª&ªÚÙ1ÑÚÙ=1Â‘ hŠm'7ÎŸ¤$€%Jä+I…d)4R¥RK“F ]:¹ÄräÐÉW2R(Ô-ùè§HÑœòœb2+É÷O×òÓ¨§‡8\G—Épœysšp*Í„	*š_|N	/{Yi¿aß;ê“útÉ~ùKÙü+ä ×üËýS'ä0×2!Œ¢h©ÝÏµÌ§\Ñ² œ›¹–eŸSµZVRRW:½2˜É’ÅHŽvò°2gN€<,YâbÅ
?kÖ¸Ù²%ÈŽ>ðráB”+W"Ü¸æÎ|ù¤( ¦P!	EŠˆ+VLD%iMšÈiÑBŒ¬	ÔMš¤bÊEÓ¦©™1CÉ¬YªæÌÑ0ož²,[¦éÐ-¿übè·ßôýñ‡^þkùnw€›ëc¨c+n0«0 Ø—0éúì3cD—#L˜Xã¾kH	„AˆS’$ÙQ¹OQÓº^0ð¹]¡¨Çœäµ°GÀªÜ#¢ ˜6a“r™ªá!'¾0a”EŠ¤"^UI’¨K“FC¦Lš²eÓ’+—¶|ùt*¢«D	}*¨VÍ8µ<0ÖÕL€‚2Õ¤‰˜6æ:t°Ò¥›µ>2ûÙ
­ÈæŸ¨1G|ã)EÎÊj¼5´ùëë†`!&Œ „ ‚ÅIÓ¢ŒÅp™‰>ï5½³N\/k	66gç[ÒR3P>¿¶‘˜eˆm!¿ï”¬Œ;DñáFJ(1„()„)9DÉô,¾N_ÙoÆäT¨¥Üðå…®”öRAàTØ~Þ"Uû*Ãs,ÔÉˆÿLÆ{2`Â„S¦Ð˜1CÎ¼–-“ÆÛÛÙ+.\øråÊý(ï°]&ŸðC&ßç}øñcÇŸ¿þ	öÁúà¥fF¸pæ"Dð'Žƒ)œ¤Je!W.3ùò¹(PÀF¡BöŠ±T¢„›2eü”+ç
ÂQ¥JÎjÔU«–¿:uÂÕ«	
*@ƒ5	Ö¬Y-bÀÀDyÈO&ÜlöÂbÑ ‚<‚H(*`˜×8îAxCQ,M‹,kä8oyÞKAðAI¢eÙ+EQTÕ{MóQ×UÃ­VŸìv“ÃÁÇûFûÌ‡¬V{ívGï:].çÜng=§¼^Ç|>#~¿å§Ù¥K®\iqíZ7:ÜºÕíÎF÷îA=xÐêÑ£NOž´{ö¬)/>hÛ3ñ"«@ž/òÂ¬ø+X±ZÀ†Ívì¦qà°Œ§A\¸ÌâÆí<ñâ5‰Ÿ¯øñ'@À0A‚&-åmGT©¹ºQfb	MšæhÑ2E›¶téš§GÏ}úÆ00Ã¡fÌüdÎÜX²´ÅšµC6lì°eë;vÖÙ³·ËƒmŽœüãÆÍ*wî6xð´Ç‹ß|ùZãÇÏfn9b(fZ\Â0w8î‚ ÜFYOhÚÃ8cYWç>Þ œ˜CqJ}H’Eq­ªž5Í®;6¼=q$’ÿÉdÿE1HfV‹4šŸ£”1¥ ` >‘À05‚€Q”Ãðp P™L›†Ã!år©x<b>Ÿ\ à+bˆDhb1¥DB!•âÊd˜r9­BA T¢¨T µ[£aÔjêt‚õz/1‚Å0!8Î $Š¢§i(ÃbYaãy:A0K™$IŒ,‹UIª*AÓ˜u]„aH·Z¥ÙlÂívQ‡‹(`hH‚pÁ0QÁƒ¢$1Œ0Ž;VÃû¼^£Œ$M–D­5ÞqŒñùLr]÷M“‰šÙL€¼ÅBÃj¥h·Sr8h{½}>ùê‡å½ígº!dÀØƒ_J}dÙ[Q¼TÕ“1A[ŽV¸p-„ÏøðÍG€À<„9€ÍõÙgÍˆ±!F¬		¾øbR¤!S¹Úpø¸ïìþÿ³mý¥§=BÃKÂDüÑª!!F•$IlR¤HI“&'C†/YòT(ÐR¤ÈH‰’0Ê”ER¡"–*UiÔ¨É¤N]N40=š-Z*iÓVG‡®9ôè±Ñ§o.†.97o¼áã­·‚½óN¨÷Þ÷Áé>ú"ËW_åûæ‡"?ýRá·ßªüñG£¿þkvî\·z]º4ëÊ•×®-¹qcÓ­[;îÜ9pïÞ_{ôÈE~56zVdÃµm't9U£çìžw"]ÜKb\yçÅÇÊüô‚ÝKS€ŽÎŠ	QFËO« Q:EÃ­“"Í6féúdÊµKÂÛ¬ª¸S]53ûÖÆ1u·žaæ9m¾.gaÕáÓz;âºÎÛÅg–Yî¦VùŠÓ:·¬×ã6úÎoH³Õ6yÙ^cs3y(
S¤ÈZêÿÆÑ8¢‹6ü;ÇØóo÷æð¶hQŠ%K2ìØQçÈ‘e'N¤:ujÚ;`Ïž•yñbß«Wÿ¼ySîÝ»ä|Nçœ€ºpà¬… &DˆJ!ARD2d®P `…
•:4h¼ C× ˜0±Á†m‹ðà9B€€)bÄ,…¡+T¨"!‹ Ne	8J”ÈY’$’%sR¤¾¥¨•)Ã¡\91*H€€Q©’‚*µ"Ô©«^½)PP»4ø£Q#IMšìiÖlN‹q``8µjõS›6£Úµ;ßòûjbb ‘g=±áòŸ>+oæLA‰++ëÖÖx;¦åÄ‰áŸg÷;sâÄ¹sc_‡Z—.må•gå],Ì‰m×E eˆ¦FË¢ç8Ì¼`åë)ËâEŒ¦‘·ZÙØlœN|.¯ß¸lÖ¬I«Vm?ÏìH»g¾{z<óŸy}Ît•°°õ""¾5NLÌKââVIH¨‘”T˜!Ã|Ã…©Ùˆ ¼L’P”FšvÃØÌ²ž•.]§\¹ºåÉ3Î8aã5ÁDq“LÒe²ÉzäË×¯@>…
E)Ò›2µP®œV¡‚R¥Š£Z5›Z5ƒL5ÕP¦ÖP„gÔŒ´¬¾áÁã#¼ øð‹ áÏÌ%4HŠ—È’ÕNž‚VÆŒAÙqÔÀ‰W®ZP/V¬:ÉRÔ(W®Úœ9Iæ-¨°hQª%K
²Œ¶¹~W“õüî¶òà¦¹‡uNÁ*”G°’üŒ'ƒqäI0‚<ý˜°òìœy)‰+¯ê:CÞƒ·WÞsî†^÷±ê)è|{ô³³òã_0Ÿ«‰ô0vÏãÿìPÊG8™w—ê Œ-‚'ŽR¼ñ%†E.¾JÖRå¨@Å*D#8S¸Šë¸‹	6ÉÑÜabg”¤IŽt‰$}ºËÆïÀP‡½¼ÃoŠµ™É=[f­ýã•ÎpŽ}ÈWb…’ãXÄ6NñIkÚÓ“1Ñ}1X¾n`ã›ØìZ×®uoq+ÛTXdU)ä	ŒÃác›¸I˜ÔÑ¯éš98àÇÈÅ‘!„0"I ‰42É&—|Š(¡’jê€ÒDtó•ˆCjÐ†>``  À3~qx¹›~Æi2[54ÓAW½0ÔãL5×"K,·ÒvGTFåUW!Å”¥Ö5,¾¼´3Ì2§üŠ¯±®7'}ç·µáwÉ­½kº£MŽ«Ÿ¤¯<a2”è°àÌO‚4™ò©ÓfLQEa™¾-W6†±ÒêÑº"‹.®äzëoªJZõ©tKbÑ7¶a‘‹b$‘F)ªQÊð‘ÓUñü•ëSÊ—ÈX&Gy ?¸o Ï‘ÈñEO !D’ 	´0ÈJPØˆÞš®ôåªÔ¨‘ÙÒÂh;Þ‘óæ´ Š>Ù~Í_²GÔcûÂ¶³1ŸG+mp°ã¼öÍùÙÊ³þ‰f±ÚùèŽÔš×v‡KóÙÚÒ‰-X²GHÇxñãÖ¨ÿd*¯õ>`ôÌÑ_ýr7
ŠþZ¶£‹>¾íHAYdXÙÑVæÿó1/®¢êj®“îú|áFŠ‘ÿ“Y&Ä‡UBåTQõQB9æ«
*¡‚t3Ë:·KüºUO£fÊœå¶ðeÄ~¢YÝÒ]mix<ý]‰îó2Ð r”é²ä"P²t2° ¿œ1xßZo^[ÄÖ„Šv6SmG·a†áË Á‚ß\Ž:#ÿþ9Fò­æêM¬¶üÐ&P7z-Úÿ/1‹-JÌå4‰å"Ò¯ÍjfÐŒGþ²#2îøæ3ï^ÉIªKŠ^Ó¥‹NÚóDî+ñÇ/•Àg§°²ä›®­Îˆ¼.‘[Ÿ³™×¦à»•¡þyå4Óƒ…wxQï<q;éÇëÜ™û»Ûö™˜ªM-dS¶ž9øçy¬€–ÆW³ó¬&ç|¢ÑÇ>rÖïy×)'ƒ¾Ð¯GwthÓ¢YcÔ¨R	¢L‰"…òåÊ‰t©R$‹½jb",Â+\2wÌQf2³ÔŸ­Hû“ßµ>Z¶Œ×ôk¼êáË>9çr>Ã›>Ÿª™´ñ«©¦s9ßá<ý»õ?|ñ?ÊIÅÿ pÕXí\àïô_\àcŠÀçÎAàŸ”?Ê9çÿ¥¯écÌÿ?Ì¡ì÷Ö¯Äøwæ¿Äáý£Ô€þíòý\]ªCU­ÒU¦JTv_¡oœÏ Š¬×ßûÍûG.©¬ögHÂ(î©Ôî£Üû¾²O«ÂÚÞ•[ü©ÈU—ƒÛ`÷´GòT/qòë©½4Îä[/Ë0Ò¦o¬jAc±ÂX3pÓOñ¶ºúÞëƒ¾è«~mníÌÉ*9ù_{Ùûy¦r†S¡ÎŸwÓÏÿI3rÚçÏúZNßlo3o×¯í?0ÑÉ´2¯þz²†»›B[’{.ì¿Èx‡©¹ë-”÷ÝÁÄ_‹/Œÿ#Å|üSÿ|,sû^þUáXÿÇmøC×Ë6=>zåÑá‘nX]I|	R%Õ„Ê,êñûçØ…¯Ø§WÏÒœ	»ÎNÞ/Q1I3©–V7ÿÔìg(móøº(IhIÉÀ|)h ÔäÄ0á"A…	*N´H±¢Ä›%Y’D	ÒˆI!N’<YêT(R£D•e
éÓc@çOvòSœï)OÅÊ˜3É¿€ç¸˜Å²]Üâ#‰Ñ/<<«¯'¬vÇXA•e_h}ÚXñåÞa{ÙÕ¿‰'\Ø°gÉ+GÎBù)@„`!‚Äˆ(L´déòeK’!E¢\™ÒÄÉ/V‚b9Š”*T¢
D…rÕj”©S«^Ÿ^]`ú5kÐ¢G‡n Zuj×¤-ßòh"¬¦$*«* /¤,Í/!"µÉb>QQ‘T—ãCHÖÃ4õu@]ËÀ'HíwÔ.¦Çäa)¡‹'þDw{ka"Úí$zªi0–Ë´©Á„xº2\)19_Í¡ÀõP,l_ `¡Bø	àO$Fg“±’$0ã”N
‡(qRpI-•0œ <ºèÑ¡N…MjTÉÓ H‰6Cô1åÈ/Þ¼xòàÎ+ÎœØ³cË†5+–,˜åO¼ÅV[o»CÜw¹¯J­ÑÃ"cÓä5´Í­¬míÝÜ}‚CÃÓ³²sró‹ŠK* UÍ-°îÞÙ…¥Íƒ¿Ç–
n¼øÈÉ’-G®…Š+QÊÂj›LYrä‚jÐ¨I³–|„´jÓ¡ÓˆÑ‚é˜0iÊ´sæ-X´lÅªu6mÙ¶cÏ¾‡~R–Ÿµ®·f&)©ÓeûÿÊ“éÊÖDß®Öwe-òj0aû|Q·ÆÑÙÁ	_bð7¥È(DDFEÇNíþ‘Ü›‹ãün”çÂ@+‚WÐ:oépçÉXíÖÈvtèI4¹šcÃ0kcbÒø‰ßÿ7Ã”&‰ŽË²èòÛy¨5ß™˜™³/žxÆÜï¤YãÃcÔ3¯[Pü« ‘ª@¹BEŠ•(U¦R¼8DŠ-QŒXAVYÅù[i¹5Ö)>¼ÏCúŽåÀqçƒß¢áï7‰òû9Ön/kÉ‚#2¯²!YM6"ä·Âm°8o° ÜoÉÑòVÞ_Lu.K½6Ù”_[J§eÕxýÂÎ^$G«ÄÀS·‚NkmSÆ•à|# «m?­¢Úˆ£ˆ”O(ž$Ïìí¬j6Œ’ Õ¥sH+xëëßÿ‹ÆV¾ÿ ‰:Jm•« Ésˆ`½„
Z³ŒúBÇÈ]+ ŽjÕ¥nÞ¶t!}ä¶ùŒj¡Œ‚À"E‚ñvÿ{Ý»/ÐAgm3ëÆKˆÃ—Æ cÓ®4Ã°Ñ›†Cã›±ô·Tb€bœ¼;5|“8c(+¶Ï$¦ÀAëÜ’ÐT¾½=ÂçœnÃ"—y·¤ÛP 4Z¹5`!h¶YPŸ¨êDÕÝ2Î‘p zJÀÃ=Žz™áˆãFÚ†³qQµ¸ï¦n»ûqMh«®¢¡c]Áò%¼Â!˜¬ç|.žá‰ä«¼x¹&F„r©nŠBõ M—J…÷âÛLšò§C¨`N*Î~Šä£»JcÂ`ùÁAK¦ç"¼fåX˜þpÍHîå´ä8h/SJ8ÒÓ|½¹ˆn^|”{mUt:Î]€ËÂÊª«@'0õN¾‹a¥+ý	ÜjS7>rDÄÒ $”:GÀ6ÓF@œ:Œ¸QxB˜gV¢HŒ&{äd:¢”·/ýPl».¼zAVÌìÂâ–@@9~ª¥Aâ×¥jMBî•ÚÈFGs(.JjeSòÃ¸„¢M*÷íKFöÎº‡³Ãðï¥&C×ó— rÁ•¡{äVÂàU(ürÁÉ²m‹‰¢“k
<Zð	³°sÄ'Z þtþœGh»à÷ç•1”}dgÿ#õb†-ír±‘¦£e®’+ìý1ËŒ&,ˆá¡C¨I€)Ú^Ç8Ðyx~_^A©Ÿ0ÇR ŠQ‡˜§íP•ÆAE«Vçª‹ÒE”¤{u´¦Ðö¾xItRt[š&‚c[N$ªTéwŒÄƒ¶2¤ŠFD‰Ø1kŒ!¢8x½¿ð{—Ï.HÏ²¾g†2|¡Tžê¾êÅ•\ŒrÂ[‡9A•’µ6Ï9žç¤œQŽ|h†EDhöIÌbæ0»íwøyñ™N2¸ÓeˆÈÁË5Ì´Õ…å	†I¶äO;\wÃ¯YcÊpŸ‘?›é ë¯5¨‰XzÕŽÅê·ªìÆŠÃaNÚ–huî÷)Ø~ÃLÄRÕøÚYÙó;¥á€',%(~»‚mç¾ßmâ“÷@ü±MÐôaÝ6ÇVz0ââY7zD£ƒ/±ç^eGÏ <çâ@Ë¹V¡Šn%€X’ Ð¢Uõ€¼µ)ç–Ìë	øê”Jž›«ˆg¢È«ƒÑ-h[h·©µvùíNvqË]%ØˆV’9Pi Dï¤¡xpÀÏ \Æ$é¥ºÞ’)©áPØµ+ÞµF©¢LDñrºÉø8Ë³Pp‹[¡QœxéSzò7¦6ê˜Tba:Ý9An
K.pSæÃy­ªdÓºQ—žtÓŸR¹ä)D×Ë€NÕô±½ž'Bg“e†šh°¦pâàÇ'”jä›RˆÔ8ä¼Íê9Bõ¤ºXÌ7ƒ¥ü£¹Ãeq˜Wr”‰:D!˜5!ú ÔSSìë¢&ÐôÃc‡¼d†a (ùJÉ¢yD;«ˆŒô\äÓZúUv{~ïf IkmF¡`ìr(ì÷ 4»ºøÄ"Rà}§ÂM7•µ6-¤ÒJ°ù²Æ\ Xºèb;Cm–ºV?…8;S)Ä£.à£Ü;]¸-š·ÁeëBíß^Ï/ˆ¾	‹øÚ&¾®Š*‰4!ŒÔ ¾ŽKEzn^Râ}iHœØr£xAh	m+=£XLÐË	imŸ€¹ T‡Ú
õ½SM–ÀR3”¯gçŽ(þqšT¦´¸5	Ui+ªj%åc¡OÒˆ†xl;ÂÕ×ÛŸQç²O†„gµCvö‚î±aÁG jJ‚:¼Ÿ0¹ÍLœPD“AŠªyVÍLÆ9¾`¢iÙ	¡@)*õhðe`>Òïw2×Hå~6¡æ >H’ 0 ¿³¹(e¿ã
ÑM›ë­Ï1iäÿõº)2Ô³Mk²›M˜QK(\ƒ{"ùH=åœqø&CØ"Cµ¥/‰¼_Z@òÜ%ì²óyV,×€o’OP€s·¼g¨´ÚU·	izN’T(Ö©_ ¯M’“x°F2eˆMbD†ÂúÎŒ(©öÒsì5„ç_£ˆÜˆîœ4¯Þâ³+yl»Rõ,r&Éèª›å­¹R£6ÍÑ‘aFµ'Ø$Z`€‡æ¢›X³Fê’ˆ$*5ñóôÅ#öÀì1bˆæµkØ¬y“"`S´Ñsô˜6¸a¾³+gºu)3¨c&3¦­L'ªîT§¨ŸNZ“Ä¨#âH-±‰Ë@W]àc;«º—¦UQÝAÙë<hCÄ¿Ø	ê¨fZ\×uF¢3}Q¼êQérUOj”B”¯QùrRv‡¢TÑÖZ6%M{TÝT`½ŽÈ•EGŽ‚¤äûƒr´8Šé˜Ô1´‰¾öÊ•b&^wÐ›½úúŠrÒFQútf$sÕN¡AbAC&÷4ˆç5	{àéº‰’\¨ E!X:ØÔË›`#°Áj¤²¶A—þnžõ.©ÞõùöÒáNÀ†ùÍï¤'		>k¬ƒéVõZº]\SÓÜéÌF.Gæ•]·8¬mæjd&FŸD†¥¤ñã¾ÇS	ï+úX‘ò)FY€(Úô¸ÑÐP:S$™ŠÁ‚‘%ð‰tIÏÔ§dÀ˜J)-;Dd"zL½Džë·N“<‘<˜H39*ë³ÙfâŽ²ñbf¼7ïŒ4Ý²Wõ>á,k°  $E&¸œƒ{RŽ²Æ™P)¿d•%éÎ&…‡!MÑ»Ø×M4Ñl(–`ÁÚn(žÇqÝ†-cýÈ´Ê¼›_ãýl-Ñ[Ö¸€“†Q·`#Ê®‹ÑLÜOË´%qPÑ(û&Í4á=q¶ÞtÔº–´å‰vqqcó^ãß­¨[5Ç[½¼ÎQÖ+Š¨–~¿¾‡êU²Ó˜m“~óƒŸû…ë
â8²ã´*Vµ·-¨šºô´µg§a§GUZÔTæðÝE!E@i9\Ð°þßÖ°®Ø6x°Ý/ëë û.u]ìÄÔ³ã28¨q ‹>ÐØL`Ïž»J­‘?	 **˜lÑØ€]¢êåÛvØÁ²z;ÀOÞ„ƒ›ñBvim&ö‡äoÁÄPðÀ´j¿”‹è»—-šZšw¥´/©«å ‰ÈÔö¤«kýª%ÓÎ–ž,Ý!¥ömÖ„¡ìàL4z‘ŽÌ	¤´šš;tóÖ÷*æÕªš]®Î–aU¶ç')EÐ¼'š0{«fúÇªJò13\‰
ïO¶’‡å…§käPÛª§Ëi[®É4eÑ¾ÈˆÚ=^&ð–ç'7O½v¢]¾!êsgÞÄ„[ª™ÆEj˜KFE¤9"-ß„¯„œbGÍU.<â=lDùæ‚ž58'I}’S˜D×ñTSJ`Ôœ5WiÈÙŒ“>àjnÉ*/tÒ’‰ÕÖƒÖ3Ž¶qEºj«YŠ…$"À›‚¹mQsWdH˜ÁvƒòL§1[6¢y$2<¿˜žS23;i®žÒ«Þ4µn+ª`Ê»Íœ¬ÈØÔ/¸Qñp ƒ¤“›@ZpJš°·%§\-jg**—(ÿó4eê¹[õ|<èÌ¾V†FåÔEòSíºt °/‡®ëôûY†½È¨úý»ÞrîšŽP]ôÕç8aTŸ­ 7¶ÿ&ûT
¬k†¾ô}P{NÓý,{ŸX+²™­dÜ|PÞb¼J{¿5Iw˜óA¸(è¾ñT×ÁÆœ6lŸ}t„Õm§Ú³~òIö< ükMuåÛAräx”DÑì‹³Ü8»/\í)HýÈý0ø Q^Ï†r‰h¿ÒŠŒlsš!Wd’«ò8Š¢‹ÃqwìaDÛ÷§E²±ªLfêt\Ï³ónb3ëmó„>=LÒQdù}<†¶<¥têk‰xã®-æûNm(ÄZÒ 7]ùCorMãø}2Ø‘N§‹F™åHBŽ	N¹P)wô'›3_œ%„á{þÀwÉ+yê¿Æ7/U²ÝZv’&ŠêÙ°r§ŒÍ7‡´º‘Ú¡ö¼Û3 ÞŠ>WáÜÇ”¾u×O¡tØ˜GÀ"»ØÖI@ÊXº—(Uo…ë÷Þ|[ì‘rÉžËJÙf_EÎþ[Æu¬ÖlxÜí$¦ødC9,cü3}Ýº×½.aD™°ýXC×¦ÈáÂ>(C;hRÌRëg¶UcÎy¤maBQ+7ïÓ¢¹•\N§£{þ8ÊÜHº\èºƒäøxH}ãwø'	±	û2"Óö³âcGæ îÜçy€'Ä5ëRß'ÓÚéä¶KXb.XqC~¸ñ°ø‘^È¯¡²÷a—Sã¦VEKüžý‚+dîöw›\'5K¬EDM“¥è[ÒÂ:P¬'ÇóC$/&?½weåˆnCå&ÆyšÍSø†ªüÄß'Ïœ6å­{U'kIæÀÁÔ,qNÖšÓXXþ®æû’M+@x|ßi4øe“;·-ùÈQ®,¤†Ÿ‡rØÒˆ&B”ê“Ìs¹¨ûkj°T2DŠBi¼}„3ÑþæÚ®¿õ»µlTÖ•mc+QšìH*ºÛÕUò|¦­‘Öut´¾k¼1ƒï/†ØD¾éÌwsˆgI¯ÖÚ^¯5÷œç2® [lDJ#d<p<øÝ4?ÄG»†›Y;Â„ZAk'T°Ô;¦IÐ’¡‘ÿhC›¤÷úÙï|°ópˆÓ—sÌwöéJ<Wþªž"aÓogMxftMÞ	Êô›Ùwr_¾¤Ý··D±ˆ¸ƒ|+º×Ö;Ã(õÄ­ú^”R¥t”-‘$‡}+! 	$Gœm­ù<Ž^»à,W[[nÎý`+£µÔ¾A­µVüWC\µxº|ÞÂ=çë·ôKéÌÅX²ó<àøòÐ/ è=»*°xÑ4€ØH]u‘²â“£!äL-†Ý±QÉÜF’T2ifú¨–ß»PDßdA.*Ãaë¬»iô
BK`£ëåíV/ƒ§ß¶f¾)êö—ÎÈ;¤qoºÿöS p])r{Þà¥.n|üèLG.ÿÛ?™iøoMÌB%ÁK‹!”Â÷Ñvé±	ayµ÷8ðS#¯i,fp—Èbàí=Ð¥ÞKÎ–Õgz\‚ïÇRXÊM_‹ü<òUøe|'üîÀÉÒYúœÙffÀ¤pcïƒ ýÛÑ¯éà†Y;ýO;¼÷}ÎøkqõhíMs$HSØ'z7e4ƒª1%‹ó›ƒÅ5Öƒg‹š»|0Á²1ooÓWÿÝ<­–¹3ËÙìgÉÍaMŸáÃ²´„Y5Ii•Ç3Ì±Í˜\ßÂšïÁq)íÒ²¼=ÞEú°¼]ÖõÞ.x€oÿ‚„É#;6µñ Aè£°½Jy»\«”C½ ñÇK>sÝÏÌ?øqú]Æÿ|¼­Â¹´v{œ§û»¶/_Xžóü_uq]ûúÕÜyßÙZlúÐææfÖü[jé81ÛÄwâáùÛe¾N(Ká<§@#UŸŸÿÖ¢_æ?™]hu	,xàOwzºÌàzgÍ|z}þ‘ŒrcèËš3›9—.áTú.º{¯çÏvÝiú`ÍÆý~¼^#øg^9÷k^ç¾åT€±VÔ&[tÂYŽø†³ô†ñ¸WÚÈ¡iši¸_^P<±|³®³WâwMsiú5Oùp€}_:¢=Mjå8”úPÖ\ŠÊ\·‚b…,®×-ðpoäUn&V•«ËÐÍùãè?P"©K¡X´]RBó)¿:”‡‡g:NÁÁ<:˜büƒ4GäõØ6ŸÕzklÁní¾¼äR¦	ÁÃ!ë6—»ò¥®9÷•¹N_­y»q!móç«ÒœeüþÎÔÂÝÙôíÛ.ç³Ï3›êOŸwgI6 -Ïí:Þ áÁË2ÿÖ§ñ-'>Ý·Jñ¥¬…@ç8ñ[âÆ±¸À€ššn	Ãn/ƒ)Ôø¾{ÀÓx…—cº#NË¢½7Š¥¸äEs†’MÖ¼>«W°vZO0œö‚µÈö›ÈèGN»kÝZúýe ë¯“íH>´CÌì¤Á…ý*ÚNáÖðbœïÑ.íøG‰jv]ö!»"ó=úg÷TžŸHƒ¿ýúÛïê8úõ«}ß÷œŽ7»žíÿ†Ù²5Ã‡¡”E!ÙÓ¾°À8zÞg÷«®Þ®›§´Ø«ÑJÜªë×àc-4§îùbSKŽ¿þÁh1ß0Ö§iô’úÞï££uÁÿ'p`Fm(Nü÷)ÉPÅ*”þ|ßÆˆ=O@òå]BJ8mFm“»˜¨Mjqðý>È\•£*kªð!²299“íî}æR°Cß†7Q+PíKa)©Ê{~¹,5Ág@+òm *çÿmPDÞ,Ýæ¸{gÃ¡¤Ò>®€ª*£®©ÂY]ÃÓÀGà†Ê®’¨Áôy¬T(T÷€Ìó—ÈbhØï½ò?Œ|ºòÈùËà“äMÈ–Ç5Èª…d<y©“2p†Šˆ±~¸À\{ìq×Œöá…^&#K¤§wDÀ½U+ª <ƒn:¦¸cìó²FÖ/‹Š¿	„¿’º¢<jBÔqP%óÎ÷`™²ÖÅhQdº…{-ÁîÐZ‡3)”ÖdjéBÝÜ˜‰;ÕJeÛg—T’¶ïÑ>ˆá*–ÔÁÐ2¸ò?ºý©Tâ¬ÐÕê©®§"&f>X4wuU)¾ƒK¢NÒ»­ó,ÙéÝàs@rP’ { $×^àéñHsw{È-ŽTúD3@$¤aƒ# (dQÕ£fx€Sÿûj¨ömFÇ—ÿ¯y6£z0W<!xØÃn4öÃ…=±D,E‹Þ9È9 QYD`„1¡¢›“ŸcxI•Ì#:a(«ŠB»„º&:z±HÐÃ¼95Ga<—ƒnµšÕ;Š¾©¬ÅA„(Ü·†ÐN¹ˆ«º9ÿ¢–yç9pò˜pßy±_÷Š÷'0©ÈÅ\1N7À¶: ƒ@¤Œ— ‰xÒp0ãÔ±ÉÙ£¢z€Û›×êsèÄ’èÑØHŒmTËúšï4ëÙ»•Véãü­&àï«´ %W-ÀX	#4mØ€mØiÄóBƒ)OÙû^a;ÎNÓ)îå´X!õ
„QÐÃf_üÂµ¨pšE1‹HZN¦ëAZ#†)#§ªœÔ­ë‘Ä¬ >YÔ
Ë\D$jNº²çê_©g=ù$Pýº0"i©kÕÔb%LÌy¡»£OÀ`à$:2†Q‚¬–}eŸ´_›ê6ïøœn’=X]ÿÓÔEŠÐ~DO´°*‰•â¬F±%PíXÅºŠÈö¶Çx}—8‰‘Ú‹ók)ƒ,lI{¬¦ãŽ
¶ÄsÛ¬¨+x*¶™Ž!Ì÷‹^ IÑpMW(²,[ „¼Š¡!ÿ{c¿É ò?ž…’¶’Ê^:8½%× âl—) ×o7Š0.[3ØÕ}zMI«•u ð±é×FAà2I/#PòÿÅˆñëúÛ¸7›=&;Òù ßùÉ=y»“e*%ïzœÑ+J4Cp_Ì ¦Ê2ò=-O
­QŽlgE·ú¼oÎ Î¾qZ)ô_˜$Bíâ%ZÀu±mE%†Áb¿š
ä\¡õòWƒå  9í€·!tÃmBvJÛ "%ëbÕ„ÐªÁcÒšy÷ÎAr¡,T…l±!Lßb—Ö‚×´Ë»Û¸ÍÐ'×º–ŠŒŠ	Í·_Òi íÌƒãqú¤ø•Ë@(©d¹+ÁV£Ë–-aóµª¥ðyÚóžw³2Ã —VcŒ@5ç€XzC$ƒå ^¹N@·¦B (­³.îúáÈÄâZ”Öx=~GŒ­ëâ8‘«¬QŸ9€‘*p)â4uïÈ$`6;ÿ‚âìoØG1P…xHµˆ\BóÚâ25ÄX05ølJ1_¤ür*áÑ‡íGÀMý9=èTž!É¦„±ªøÿëß†–¹H}™Öœ!Ø—Û‚/v{o@lðÅÝ£	¦u-gªRJ)ôA6	œœã@b»0ªŽka5*RœÎðÃÄlN+:î’ÓÝUZÝÇÙñZ)·oP€-JîÒZnLÇˆ‚Õ`Í½=†ì [ÿÜN
[Ã°=8W7ÿF.x£ÍQ¯Ë[^ðîm(iÇÂ¸AÒ¢AÂg÷6Âßètüô(SZ”³£4âƒÁs2¾Ñòò»xåjþÐðé&%•Œaô¦Ýc§¨RúølglÐ¾ß£œó—èãô-ù.žrÆ‘OC¼JáÖ{ZHþÈçÒäiU‚ªÝ@ ÑPÔ‚ú6n¦!Ë¨Ô^Aˆ”Ûê’Çü¹¦Q¨srå@‹!¦:e{Ÿ£Œ5î÷9§€´nMP¤’ÚŽÉ±þ&zÀ»õ¤O|“žÍ~¼JéÐ1þRZÞ,o’—ÏƒIoævŽºú…kimUËJ›m oà3cQë¦dúI1,Áfæ†Õ—¬¹ ÿYc•úŠÕ×ô¢æ4–‚EF®¤eï„÷ÀŸ0çÆcSEç9ãµ{öáì+|úÜŸºPŠ6¸Áƒþ÷Ušÿß55ÃïmØOg:CçZR™N\ßŒi¼„di˜dí®<¹xàJî¬—%BlÛ©ª°™‘/PÕ‘òÃè†"ÐÄçw
L ¯™|;eï¦0×ÍªpîµÖ®ù­r"øÏ[ÉÊœÄwXa ë{X²›»äL,ÔZ„àK*Dì+Æ–fèÎÏãSƒÖq'8sþ5þ„³^ÙkQùCtÕÍïÄƒüú¤X
áMc b‰û¸^¦£¯^FAìÜ¡Hµò!~¼°3Í<0pÐan
ÿe
ï3þÏ}ù!òmÌƒáYrájëÉ‘¦ñËnMyœF»žy1­E™
ÇÓëhv\#Ñ’ ö†$ÊM\gª>öVR<wªÍù‰;ÂqŸ}Cq®BÐÜÔ¡Òy‡ç9**6Ók¾õ¦béøð§^­Lù¹zœúÜ)ø‡h1XŠK‚w”›µÃ¯MG`ÉÆzY\…ÜMFöí³¶Æ°C¤È@Z›Ÿ$/ä|úô…',Æë=Ýà’Ó±æç.°ïvgúgj2øSœG]œÐƒR†š™E÷ŒDn,–µûW0~¾¾¼lNãa¬BÛZÆí …™ÍL»Wáß;A€âA”ßÐzçoN/Bsô¬`!Øh|OP×‡žÆDÔ@o/kb÷¨ÀU2üÏX"˜D·˜]àŽ[cIú5#¹äTƒ!¾±à2 ÆÃ`¼R³®guÛ%,Vq„Ã¸e.,G™d¥ãòùµZŽý_H¤I`¨ãñ–ø„êàZšFg
| zd1²›{ƒR¾æ—wB`D>ëP:õ’hÉÄVUí}Jù3øùX[|ˆ3vGY€JüýPaúå´‚6&ö{H€yTtœƒP'Ïì!¼XÚÝÙª‚i…ñ,„:Îõé`•ÜÇâvš`°·k>Œr û-[â@™²r=†¸éÝ	SŠ×ìj?é¸®ªàŠB™za³,”în­¤O¨ï•‹|Šˆ C|4¡)QTûé~/¹MAQéÿÇc=lÍx)ýè}Â8û4—3½IwXõÎÃõþÚ˜¬óFÎ[b6îõ–-TÌ—ð>·Á^HÙáµ ~â;O+áC‘á|z©É§Ú;Š¾G61$ÂKûÛ.÷sM 	MåS’³`‚çP »‚YÃLì»á¯.*¼d<P\â›_HdwSN(ì®§¢tzÅ m<»õùBB7Q¨Ž&7G¹l‘pË«”ê¥ˆú!.£
ºE%óûCÑŸ_Mï…¢ºLÔ¹‘ðS,U Ö™FsšY\ÿ!nOAR”mŠwšUhrÞÅõ‡3 aåÛ½"€jŠÁìI8úöú>æoƒ¥mDi³'([²+÷ic,h	e¼àAÑ?%p†_ŽP†å€*ù±ô$OoãÏÔÌ|¿/Ï¼#œšgk@‘r­ó/²'zæémn§èœâû	Îß¥½AÁG9€)¼"!Â*K­e¸C•åAµ‰ocZŠ4ˆß<Ø|wF–Éa”zµC%ÈQ…1/ùQÂ½Qƒˆ^Òhx]ê„Råµl@c!Œ }’¤zH#•F¹c6DDa]zbð'`Ö-‚ÇÇ{#ƒ\S:ü‰ð]r ŒÞÁ‰xÇ—§¡nâ×p6Œ“&XlåÏ¡O%'¨M¦ª^”_PF‹²üÎFg,F-§ÖBOùaÌ~®Z‰Ê÷â£ŸË´´"0îÇ´ ¶¥oUæÇÍñ÷™§'.éù/¤e\YWÐÊÀ[Ÿþ‡Ý`øÕD´'ì>Njè¾
\¤ýˆ+§N+£Z!XÏ#©›&ŒlL{ÑÓÛÛ4- «ïIeFÑ×ùƒãOËÄ@‰©ùêÐJ Z Ï,¹0H0±\œ(lja97Š"ý‚‡/Æ„üR×{©l˜h°‰y¢ÖnVþ¤¦[ÎdÍr@%ÃärÆ÷Ùå(€âÆÂsþ!µã[8n?­T€õ!Bx¯ÙÍoà¬Áxûá•ßF9Üc7QçJú¬PeQÏÄáZ M1$ÌWz+J’Úf)²–¦H–4&Xr¨ „ƒdgÁ[ëV7ö¾ÿ;ü7¢F„Ð³&é”ãÙœÁÄ.‡Ù1\’å,Ge<Ï9Ì&mäe‡¢J&—%†7hm‰ó&§áW¬„8V\™ç€	¸ôF!)¿ñOzxhÔ©!Cã¿Ar9ÀQt–R<$£x‘{©¡­ëÝi£ØS$%–BBJº›LÂJR	¤­†/0>)èöob ¨@ ÝÀ)ÁN-X±JåÝ(ñ¢ayÁ¸
$ñE{h¼®|·ƒÞ»‘tN²Êo<pP[Ý’ßô2³ëæ>7¢ØACóh%«µ¹•GTÂ]_Æ½JC9=Œí4ßUŒîÿþ[É;«ùsür²c\Q]0n^xt*;y®­aYäÃšvîòßû¡@˜[2/¨.CøBl3ÝÓ”­È€$p(%ý"|–‡Ç¶é²‹šà¡1P@!qæ¨}@ö·‚Q	è&mËõX¥ßÅ]üýHSÀ÷zÈR9¡*äÂ”BÁ‚ë‚¹îg3ÖufD€ÑJ×%8ÿ©œˆ³Y¡c`“ØDC2.,@¥¢+?‚HFÀ{Fä¡‚X¡ýùÁ(ö6‹EäUKzH¶Æ{=ê}k”P@]ë,)Â[`¦F \mg¬cù‡½;8¸®Y‘Ê0XlS L÷ñá41˜BÑ0×Fóì¦o*žã•åœù7QCZF¢ç¼Š3+”|ô	oJŒÃÌñe×öýÐ‘í[ô2„„›^’¥G•UÃÙÁ³•dªV*®”V‹}Î¯ VcÿÎÛHÀp{ô{ËaÝìÛØ¨¦à6[D3"h@D„%¦a€Ò5eô+&]I¯‡ÁH]Jþ ë“BY~¢‡b®FLÃUøâ%:>…¨VqEŠäµ?ä ÃTLfEPº²¸ì ˜Å W/wUrLûwÛ ,:Ç-ÜSnà5¨]¼z¢€Å.æ¹»ÕñÑ…:ƒº«tÁÄ6vTÍŒüø£ÞSÐƒ0âiª…Gñ¢3PhBJlÂÀPã7}ŽIÀRÞ	é2å´Â9È¶\SŸE'ªÈ`O­F{P!}¿Y76ÓÐbEòUöÁ>Lú…|%ô3åc E@ ÑXFç¢Ñ÷%‡ÆHÜ)Í(}zZ—˜ª9hØ:VÈgz†pÝC¢‚€´°ÔÍ|"c>Í5ÄHMã‚<•v€Na]„<…´Kn@J=‹‚ùæò6g•JH0†Ž )ÀÅù7J"{*ÃGÇgLÍ •Jè6ª¦cäjƒtEì^ãý¸Ä¸Á.I0¿-ž¼CF…¢êØt	ìb“I,T¥† :²¨V³s5÷{‚©Å’Ñ0êFS`7¹'ôl‰8œò„ð´@¼ª×÷þ3%ƒÇ5{Óx²d¶Q‡~¾dŒdyœo}»m™ô^OÕq¿ýôñËêS5€Š“‡BáOá0¯Šƒ†Ëåz?è,B{ªš’B»}JÓ–3¾É=S\ù•ÿû»ê¬FŽuN½
îïv1üùõZµ;{Ï{ÚIœòŠ64L¤*ÐulÃÉðØÕL{ç~Š¿×ëšâµ _ë"#ô9&C¿Ë™íÅIù§xh¤·³ñÁgÝ3tM¨×qÜ©v„ªå41ú$8¡M†J˜~®n-Bx†MÑ˜°\àoŠ·Wl20Èñ‡i¶@„Þ·5ˆmî!*PfÒ°
íÆÀ¤Q/¡ïc³ÎMhíÿo>›“˜7çf"ª†í’-D¿ßB2µRæ¿õÔÕ‹-ŸaD(çÝ$E–{Y#?´§²’b%²žÃ*ù4‰£Mˆ3ˆ¨9º‘Ü“PØÁ BB2ï,·Ô•á¦{}:BéÏmÙ=>'w58€r¢RQOG6¹lV\ì³£HýsrA…hŒ4Ex;GfEƒ*Õå!FÚÿ¸)š	©ì(vÁpQ²)1flDâ/¥Ÿ-¸¨Ž$Ï¥üRpÏ^ã¥†…ÜÝN#ÿö^z÷+Û½o‹Î.Ðý·šÒŽ‚Ã¡ƒÇ;Ûc¥¼¨¡ïê0Ðˆ—Èö Í+À¦øn94Ýb_I6Wƒ0äHË—’)mÀPóë@naA2ÿB8Q83oûà•¹Í¯É=2[¹PeÐÁ“–ÿ%;¢| õDæýÈÙT˜OkñdB± ÀK{R –L#ÁiG hG„Ör¿©TÚO–†+å<Ü„ržlÌÊ4Ž±®ÛB"?þ8P@¯Ç¼#êSM„Ž¥y©^¥6šUi(ðºLrä`ˆ¬»öƒºë R‰aòÇö
õ|Îev]=TÜzôâå'zIbt¦v–ËÜ±úé…ÇóÔJ~Á„(pz!‰î,§ü¤µ|)ªÔ=…N‰ s¥3¾çÏ„o¢óJ]6aŒÖG¿²0ŒÁ@Žó~³ë™TZ~bbÒ~ˆkÐŒQšz([sðIÌSZœ$Íï^˜îßÙPe4ÎT!5ÎÛ ª,¥©È0Æ–5ºbÃ°:]Ê¢YÓëˆèŒÐKZè±á…ã³À|²øºŽ*$ò3UcÄŒJÎl`Òïpš ý±ÄÓfDóÚAñ°Ð-º7D·ˆÉ;ýÝq…RNŠCÂwà¢(ˆQß)D§{’FÆ2Th
v†”…ÿÌî¸ïÓîäž9’Ð -o¸2*Îkœ®¥F®ç°fØnþþiØý	÷woúO{xÊo¨¼ÑŠ¿ËÞÍÿÇwÑy2B{‚ÈÓÑª…}…3×8LÏ|x>­÷ŽÀÒ¸n©•^¼ù)Ÿ¨Ârÿ~ƒsÌÀxfŽ€0ñ	]7~è¼)óYõ¯d ã%‘_2%Û	`OqE,,åyCfTfç.²Ðúa½/!InD÷Pñ=[9ÿh-‚`å	ÔgéhE”‰¨ƒP-=l§ÁãôuZwíCw*„xùP	I»Q"¢£3ÝAÖá@É9fôá‡ÙbO‹§*{°6·HÛVŽ@—+QÚó\7½ÆÖ©Þ&/#‡²FÖf6ª'{ù|rL{¾ •¨öw(É¾1ä€¬"k<ŸÝ‹Q3àaÒä"Hãž<àáChóª=Ãa,Bc®®igªÖ
›>{õ }ÚˆƒµŠ#Œo!ÑC
zU*ÿ"?=
ÑàÆçt>`Ÿ8N­²ò~Ðµ+¸Êöt·e#YHmÐ™?,o\ƒŽ¹&f³~ŠÅlXÓP1B7–5Ä¶,—#ýô4©*ØIGÂãfÙF ÉDËr0u…›U…){æn
ÂàÄž».šE¼g©jÝËº‡ÿjE
rùçîÉ=ÐNˆØ!ð…LK=™ëS%oxKî¶…º¹hßƒ×Ïl“¼‘´©
í/¯ ËÎÁ!;0Ãƒ-9^ciÏ£ü1¨*$ãmÀl9§þ:fó^E[Ø¥Î·;3ÚÎO¨k`˜oÃÒ€Ë¨E3J_˜›FÉ‘ÅiÌyq¾sô±•×üãàîë˜}ÞËƒ{IÛ­J`Õ?Ý«„áí7ÅÛØ•è”<(lÙÈ‰•‡’Ú^¡7Ã-ò,«p¢Æª*Ê¯Ó‰7&úŸ!ú€ÿâìÿ¯!ný	iÜïá<?Ø·ò/™‰º¡ŠÍk3³_¸¥l”!÷œõçn·&Ø­Áú$Å¯÷‰í>’l#ïßqïpnÀøÕ™gpàQ£Âƒª¢n9RášŠ¯z@õ±Ë2{ŸêŸ›¯O
3ŸJ‘½[´{Œx0+;[y¢æ uVu¿ÎòD™#,¶;>ï'›iÙç•Í`C{MK:ö°N’Ú¸dz‰cÓ.;õ#-¨Á­¡±±®-X@©)¤…“ÂS%!)b?Æè;OÁöz ê^³à<šúfÙ<ár?½½¦÷9zW)ä.ÐFÍ†v]ã¥ŸÀ¢&ÁM%ÁP1½f¦h8ã3ÔÉ±º5;íÙºùó¸!Õï»tnøM9·Ë~ÝšìAéxØÍ2
üâ‘ÉvfÃ?àKæwê¤gUÜ°°»ÇbŸ‚¸d”xýô®rÿ ˜N²4Eˆ‘ÅŒEâd8‘%jJÀ#¢‡èÕYÈÉáC?Z.3ÿVg]½…©­ˆ’Ó²ßƒ3 ÊÎ£\Vtc´ˆÀÀYrÁ©Ñx&*žD~[8»wœH½tl2X9Ë&ôtFò¢Öç›ÂX ¨\8ÇÊ ‘?‘ÔQs0r¹¤Ûc/›!R¶(´tšÖùàLµ¤%÷3?tèWh(3­ÀCUp0—ŸÚC3·z7ÁVi6ƒæ"ÒŒƒaã°T7‘ý-µ½CÇÎ“jÑÁ)_þaÈEo‡ÀÉŸ„àNBz/mªµ¿0å¹íõÕÍ­5qííÓ§._9UIËø¢õS¾õæÉ3W¯õíKk[›k9©ñU	ü¡„Î[K±¯pRcù¶GéûÛÔõs$F¾Ý ²ÓLŠßøÍ©™,Ûªä|ÝQþPÒ.^€UÀï,R†ÿ?›c&Ø]¼q}B~Á½F­%Ú•‚¦ÊŒBð)úò\­{ÒwæAÁOŠ í}¦ÕˆoÉ¢4F÷rG‰T^¥MŸS8ÂÖL{ÿ€!Ÿ´ÀŒ¤íYöu2Ie)
´¿ê-76ÂñÔ«­¹Ü5¹àŠïe2µÙã^¨IÖL?[Z®‡Æ4(M<&@'Ò$âÎJ@ç®‡3©g,Â¢Ùf'—(Ž;»KìmÂØyîÇÍKëÅùû{`|“
7ç¥¡ Oµ|Ÿñ{ÇFÀfr\ÂçüŽÜxî§)Ìwd¸½Ê8ºñ¾]]N}7ºhBe;¾bÆ˜ãP˜:ä2ñý ²¸hÄ‘*RqÚ¸Üf„õcå¾X –Gž:¯b[ª6ïtm°-þV 4"EM+Æ¥Gº,±Z8ÿ
8/™h–Œÿ×#¨’:Û'[¥~‘Äœ¦õÒ=p/}MkÒîÑFJ‡ô>ÃÿGÃ¢Ø” Ò£‚x#&žbBÏ"ÿ¿™dï>F¦¬¯&RäG40!:½Û<‹l)säùiQûM˜Ì^~?·Ë[øÍžAþ/',Ÿ"ù6óÆ¸4B-.H¥´ê{"±é2¿è`ÉŠ Ë›óƒ™Jzlè'\þõóQ3³§û[2™2é¾*ûï†ã˜.ëm¤ÅaC„ÿv}¹ëØÄIí:ÀS²0ï—{gÛž¨·†¿!v+´*ð¿Œð¿Ö~Zâh‹UòKÕ’Þ/¯–ãìŽŒxbôçÕ¶4šV½®tÍCƒœëªiåÀãw‰)Á.4¸ËPêÔ"_¼
yYH+Þ·jŽùÉh3Ù_¾‡´@ÜçFd4q­}$vÈ´$Ì<–®pTÐ€6tN"”iÐý¢»Öíez}m:¯Võ4aÍ²oËN²ÍYxqÍí)–vÜWZ:Ö¾­yýiÊéoÍäâÉïÏäåÆ]!SAö-^"3ôñyÊÂé¾û“¨€<{×„ýÅÖ"{ûJ‰öàÖªä™ªC»@qÌ1#ÊwšêªCjÍœ0”…/ÂÛB0KþgFv†¥8Õª¾¼ó¾LÓñÁÜ]ª(¬UáiLèÈ6<aÅ¬eãÒrÞïÎQ‡j=/^ÿýï½%ö³jñ~kwgÍW3í{‰#ßÐÖª³ä(©ÄÃà@Á®9¾°¾ÀÁðÅ9ì	µ‰…ååþ)˜šS*öv/¬:°ü¤ì¨”þ÷gw\9BìË°›¿…>þê½¼É	èù7þAl{ïï[{¼¶¼öµ…×8”ù!åêV…@÷‰Æ1ùmÁïŽj¥„x„1¿Ü<õ§·Þ}–l@‹H‰€ÃÍÔ•æÄBILY¾åG|ó,£N<eÒ­*Ü÷’ÙÏ³€‚4
`ö`GÖXÜé¡€^ÒÜŽ+a!Ô”ûÂþš$Kóšù/½#b‹‹Üî< ˜¢yòR?¸ß5îì?¤*T’ 	«	ä¢1DìU=ü´.‡¤–|„Û–¶oðdï…’KÎ¶fhÕ³¨õ,«¯öøeQ›ÛÞÌñö±DPz[â°%’O\ögî³·ù¨ã—q¦ê~nOÖi8_ì­ÚŽ@Îóä(lO“SÃˆ@zKHß‡!ý09%ây¡XB@U4QÞ£î”åÊ®R
¸"WÝFQ;”â˜QŒõ)^h§ÁMfe4*!Dg9ðnÌlýe,ÕÊá2åþB¸Ãp¬-æ…ªyfÜ	ªâ$óFHê‡ÎéOIÖfÇæÞCgqn ¤;ýÍãÅ0:™;¢E.À>@†I‡{AQ}æ(å©Ï‰¸Â %Ù‡N3‡{7gÇ·Œ@ïÑØMSkbŠT+Z¼µY“Tš7È"<Ž÷þ
HZñòâÓàüýjîð/ò¯]¡Ã?èì‡üp€#ØéµCÆnÇ¿-e™
{¹¨•Ã”ž Û(OA]€š$9,Üe%XÕ<ûŽ—0XÎ?¢Ü@Êý!J9’W@^s'H{F¾Çw•¡+ä©½ãXM=¾/u»€N‹Pøiò¦_i-ƒ*ù ¬Ø§¡ý9’)ÝÂ^>§¸ûT]›®÷Ñú™ÇO=M5{IÄî+ÖL¾–­ç3pçCÕîÜ\×wñIõgµuýÓ²·ªÓäx^âÚè[ó!°¼‰ýU£‘(‹TOÒ›²ÈrÁuÃÿkˆväAðõÒæÁSDãæŠìüÉ9eš€ýsjñØ
’ÃëGà²0>‹N¬pçvpÿKºð&"ÂœoÀ¬R5
P¨¤OèCOvO4nŒz¹Ò‹wÍ]Enú¯ŠžüŸ¬·À
LtL jp¡Su‹×@¯mÛVg>O<u¿+ù±…d#k%sY8SbXª ðy·—£›S•=²¿À”Ö9	ä È–Œ¸/p÷>I0wÂ3Ñ8à!gø²pM·MÎIíÓØÈÂ,È¹R¦Ì$d79Ø<É|¿èË™Î¯&£—{þœ-¼!ƒ}îÖóŠèûc®óœ„{‚’e¨¼_«ûìM Þ
ÿ€*i)ùgNòCRª
ÈD‹|ù]JŸGü&ˆôqj€³<…—¢¯Ù]5¢@ý‡N°8È%ô&ÎlPÚümœ¶ïŽd(Ün~õËÓ';Ï—€÷Çmô+•®UY—bRð‹×—Žqe¼¿cmig¸º›k~÷ÝNc]Ýûá¶¾
\I–h ÓU ÏíÅ;€¤Œp±o^z©ø²‹ÝRžmaØ×v†ÇþKó°>Ž.ž^~=›—L^—ðÜ¦¹›â“$Z§jWüÿ~z[Ùxê¦Ìû¯éêÞÉÞ¶˜œ¥³$Ý'l‡·Ùå>ûvâ™’o½o0T¢¾aÞÙ¾ÎM~éú­9¯ósLåu”Ð§ÉYAéÎ¹! ^“"j¢&ÞùõT‘Ïg5N¹7?¦ö€:ÑÂ®x¼Küñš¾„¿a=ÑÄ]Æ[I›´¨‰5™«g‹©Ž‹ZÞ¬]ŠCû¬rò$âRÛœ:Ð`pªo×}›ü°áþ• €èfÄ±Ú³õW†l¦Ü-í%UYëç@á¨I'‹Áêò²#½	÷¬ÙÛ”ƒ÷ËÝ¨Ý+½Ÿ¿]­Pv}Ó~Ni,·hJ÷µahÞäªèi.úÔ¢&V~„ä“™C¢‡óY`FÎÒüá1q<ñ!•	µíq!7…¹PŸùJ…s;MÐßB°*ßÆÛ…{¨\ÌkŽ¦°MetÀK”|Rmgˆr¢ÊU¨YH/Í<HEà³ÓzQ‹»æé*WaSf(é)‘)2Ñ\WZo„üã~-:ø[sK¥ˆâ¹Œ¡l>ãñTŸ÷Vv¹Kçœ§’Œî)Ûs<À6šD3½ý3ñ}Û˜ßN}ýºô_?9/fQO¢Q4EM-êð+~gæ;Ò'Ž§H,DDrÎzêúë ˜¡³Òó}EùÏÔ“ÒGÙ²©è};¶„¹ëh‰÷ •dXï ¹s
ÈTA=vu8w!þvÄ Ò§áÂ;oùá›Xu/÷|–¶Ü»€¦ ÏÒÌ±7.¢«<£<Õ&YÓŽüÐÆzÉFbÄ=í(ïËüXBÕ¾¹‘è”^þÐ˜ÜnÌé#qO©â7Ç*èùr”K\¯ÐÜ{jƒÉ4÷¡ïF4oIÛ$=O…Œ”r®0"ÃBÚ[ŽÅÁ¤Ïv¾µ{f!Ò†(ÐËñ<¢¨Êû«Ò Ätæ“ßþ¬ytâ`ÚÛ/	y(\„|2oZŽ%±b•3`aý0 ÌˆýœóŽ]$9ðŠL 9–ÿÜ•”“&–þ¡)·˜€âÔK¦¾¡EŠïnÞÀ¯Æ:{HxÕvc*Ïû¿Áëï'Þ›¹A©…ž¡vº6ïIT&+ª°øÃz„¼9Ë”÷nâ¼íá×¦ÕÉ¾«pžæTAÚfé®!ÿ!¦KºKª<j¸ãR~r`Ä¹\`xð`}Ùùªb³+íšä³ôtFÁ>Žš&>Gªj\¿Ë7RÄ]yÿ9^²$9„¼&(Òa˜Q\˜Í&ÃÃXXÈÊ²@0S@A’^(FSEI×[¤³QÏ©^¥})²¿Úçù—ð3/UÖäoÈs#(žÞ7Ã$kd÷:Å®;¿}þiÐ÷zØç£ÁîE‚¬_fîv#ßSÙÉ~ÔÉoÒ«Þ;]oN4Åý^y-R¨dZ¬ŽÛ Y–ä´@©››Ù±
û¨|wÂ³³Õø\VXÕr¬ô$uø'£oX}á°u||YZP_ÙcÁˆ¹~Û‚N#Ÿ,»@fq¹Ì®@‹CàöY%+µ©Ù:˜²/Qê_&ß…òÂ
$~Âq¤¸ÛM&HÄé òšI¤c?@(_ÂÝ“§…z4E¦@¹YÔ¨>£Îb™IþhýÑ!·s‹­gy¦¯ÆÚIxÞ+ê)|Õe¤¦Ìó]÷Ù$c	‰”ÆÜ–Ä~ÍKnf¿²Ý!ðÄó’ÀN´ôáhQñà/º¶²Þ>å%‰: ÍzH^c(òÆWY`tšT“àrâÎ ×VÍí·vlq-aV'µbD|øðwFÝP`+¶…úáˆ7ohy<j+ÖÖšPÆÕ®ö®L¶jãý~ïee 1K&4#cJ«_˜œ»˜þ^/s-äáUNÏCÃ·Æ£3Æ;ŠÿòÚq¥]0Ú)Ô]èÎƒþ´6/jýD’™~-™'­y^›g­áU©ÂŸßó€Ç&£À€¡æ)Šãep$U¶¤±Èìq	¦åY‹“V¡$…à/¥â¡­A`r}¥7‚GA›²‚Ä²KÊà 9<mt—s¨`êŽÑ_
¼fùòN•­Síëo€ ¹–<.]`©®Ã²Ú´ÿZË`Á.Â'm ùÙw {-ž¿hðnqå²] }Nû'ÃO<Æk/ÙòwÃ{àò-Søþf/ÚÑZ7b•™õ”	ë£_^?¾úO!	Ô`ló=1ð|?fÉý˜Øøia_ƒ¯Lß]õ”'Rœ@<KæèèL%/ŒƒôVˆí†·ä²-[81}x¸Ke,ôBXj™_ˆÐ—E,TeDÒFØ´¡ä|G^[Óe<!ÛB­½BSw_ä˜á­‡Aùå6»v¾@Ì#îÝöÐ‰\.Ñ®ø©yŠ1<Kf‰†tæDeÄ=s•yžž2u´¹œ/ +WÝþÚäÙâÎçÕö¯¾JÏ‰X4Ù]ø/‹áŽ‚bØÿ+Ëá85ýn@GV#ï?_„¤µ±Ÿµ»êÜÎ$ó¤•­ùâ%~'÷Ó—•0ÍkÜÊÕ«&Îë">ÜLÉ0ÐDª±€_(.¼ð­É’Aš3;çSÀÃ1Ê†!É| 2 pÙ—B¶6mÄyJ³Æ Ù¸Ì9Ô>1XÈ÷•@¨G±$ìãF=Ì“ËOùÊ1¤aZöC´-0†Ÿ©!/ÌI÷Ê0Í™”ÃÝÖž#ß-´£$ª0µ@ž¹1€	oél>³M“6éè!¾àþì}jô‰¦04ŠÕ`ƒ‰§¯&ƒ’#?x{L»‡´Ñˆ‚Ò¨MNò*tô¨HåQ©Aô8æØÚ?ÝÓW.?°“ÿ‡¸3`½‹Ú‚óC<îÐã
]{/ÁQf/IgÈV%Ì²pÑBaüD¾Dñ
¾`ÅCçUºt
è+
ÓÇšzbüýDÿÿñWÚ+"/ç¥-‰¯œÏQÎÕ—ÄÉœeã%Á3í%Xƒ.‘kgŽà€ð1ß%œeov…q}ø­‰6€
G%UÖ02Ó¼ŠZÁÞäÑ½é±lC·ƒÿT_Ú²7=1nÂHIçˆ¶ÎZ‹S£a­)'ßO—â%ÝWò ¥™#1N&<7‚wcýí\Ùš[Ì{¿ßù£~áåó0îŽ?‘£ú”×¿Az0)Ö‹™Ù·ÏÕž9j²x­·ªÐ XÀþffÉ3j4ÀV’ˆ“ôs¾|êãÏ|ÌÏÄdjë¶ëè6¿mdò$öôÕÃ#xSëøDT.:zZÜ}2ÕÙZ1Ò¼Ð¾Sïg8™êîs÷ üÚHãM´®g¥RâktbÓ$i\)î«ó°ë¦£TÔ<µÔ[`&®²b7õ¼»Ñ;üÝ[+ÁjSÌ­ôqÁ§!ÕÙwÎýò‡WËfB%Ä,ß÷þ.'ï˜çïT³¸žFñ5û+àÇ7¸”¨Á²¬OÿþÜk×‡”DÞpã¨»³^³í9ÉZÌ7§~ —ÓeÐ˜d¹ôÊ0Ê»Ãç«/}z/ø¸óÓp:¸XQ&_©•'44:0Ý’ÇÆ0°q)Þ$Àík„ís{ÃÖVÅæn¤ÿ=µ×4Û'IÿŸº.B7æ“fEÍ „¢4w»ÕÊöù¾JJ‹ßÊÉáF°Ù8Ïí—ÕÇ}ú×ág·U,rÕz†”€.;¨ŸÇÉÉby2|2å_	;=É—ãH%.~é¯Ä¿ù	Nhè¦².¼0)±T&¢ñãIpÎGg¬rïõš¤žd„×êÔ,¹þ5’Á"N7°Î)1d˜›ìîÜÕç“JŠ’Çf3Iºoƒô‚G¸3ßÇfÐó°ö¥¼ˆTž¶2¶RÌ)w¢"ž)‘¼üã‹và–B?*yA$çÔõe†>ñ3bl»êÃ·Ÿz“LáÑäl7«€qóƒ}}Ï\½˜IÒ+Œ‘+6Ó á(–Âë—’ïðŽWí×R’=þêISçÌjB.ÛTGÌñ¡<-¤zMƒ»ñ¸CRI´+Ží¥uo©Á±CwmêÔýË=s£=üÏ
 )&ÇÔõûh­ÛåUI^‡³`>àv¶§€§U’eæƒe?'¼Üôd©ô¤'ªvœm±ælà¿´4»PôÀŠÛv‘úƒ]ë3œäg^{i5÷2Wø‡é©Ô >BòU›r¤R¨Œ.n×±®eø Ð““ˆÂ¹ð ‹Yl-eÄO†à'à	ŽÁ¡t&Rr=œá‡®’HžÀNiX/95XO•ÐÃ`¤*`.QjÖPpQGí!¼}ÔŠà„<ÙˆÊôd_<òÐº6Ì
PÏ»b»CµÅÀHkD	‚ÔœAÑÖrV	_Ó|Eî'X1
2|¢™m9I¢-9Î-1ýGþB(hâGåíÆ¥m¹¬Ó(	¹5%FÊá×ŒAØÎ|þ5"w‘½¬fú“¿gQÒúß”ËÞÇàÅ[•ÓËŽ¬~¾ÌÚ"zêÕÏm…ãå=f)ÍÐÓZnþQ(PáÞÉFEœ¥/â+Z(®³X2ö\’G*œ|•i`ÈŒx}±Õ7é¡ê°]ØË R¥‡pÂ};qî§æmŽ:WlC@\ëÆÀyÖ€såØ´ú•Ž‰ëi+=³šŽ­¡ÜŸÕõ°ï
êÂ“àFgl¶aÎ³5ïº(-)à‹­w%ÌŸ»N‰Ù»¿°œó-¥0ùo)µ;õÆô.Aét;=*xKrVípMÍ
ožàŒV==pdI–,“Í‡pëUŒdŽkQ¡ÕÊàQõšPÚ„—ñeÉá¸FqP>Û.“»rh*§–¥D¦_Óoö÷«¾Q®±«Pœ—‡v9„¶¹<Õ×™5øTÛ:$ö'“Ð«=]™P~‰ÂÈ¢ÌëV,pÛâ7m£™©DŠÇ§yŠÊ0úª†ckE{[¬…ÓL{­H³‘ šÈÝÍuøXÔ	¶Qi)UhwNQsÉ°Ø€“§î›|:ŸEDV·VÎÀ¥šj•FVè
ôÀÁÐÐ‡TPŠ›¿­%Áí7G|QJûEÄ#7žjãš‹´ZNEàqz±æÍÕma7uFJJ?HÂC“X‘Ö-Ë¶ºåqvRq­Ã>Whñ?MpDÙŒ2‹LÒd–{¹*¿Ï‡LnþDoóÊKœöS~0*¹ªH/!j]YRUˆjBî{È@ÚÖ¹¡jíà´íÀóMUIi¤k²OlBÓu1È‡ |²Ýd‰íi-üa !Ä	­Óˆç§ûîš€^UØš¾·3xår¹w|ªoÜ@¥¿Ç¹”/™ÞÑ``þPÅâEí4dŸ>œ+û•³çáC¼ïãœù5»)æ÷Åžéæû]NµRl‹†{|}=Oö½ /jÏIïs^%›³`õp]éHo’ŠŒy+ü(éÏ$ùòê­§F@QŒ4·!®Ï0¼÷ñ+àuAJo,Ÿ=<‹{4À.Ó%¦A£d­E¦:Ïsñ¾J£e¤™ÎåÈDûûÈx”ÑœØñŸØôŠ½ZNÃãÄ;Bï„îÎ¡ŽµQ
r2%­ÌŒŸ•TºûïXì(¯ ([™~Ó‰?é<›;ÙŸ…˜ª»M«/âÍ¸A\0%ïÝëÀ Kù‡r1d?¶ KÄuþJ„®PtO02§›%.æƒ‡æW§6cîú	œ.ÃÏÝ8¤Ä4p5»ãUÄ„­»Ø#÷.4ùù™Í'mcCÿÌ=umIvH;Ås·‡ÉX~^¹æM”im|cIý<ÿGi~ö9÷ûÓzKFÜ
mË¼u/Ú§w
zVwÌ†éÔ¨îV¿Á)Ú¨$ÄÍ`”¼·#NÔôC	@ÑmòbØŽéè¤œ³4üù÷Ó¬-’Ý0³µØÁÒµ:šV–—¿5­Ú½³ÎtìBÇæÊ©¬Î$äŠ¡KËáa hªK'×@•Èv»æ(Ç¥ÃIšO–hˆQÃàgÝPe"—dâ<r8öMÉò˜b ¯«ÑG*àz«j3\øao ûr|×ÖþAÙ?Ù ¨nô=ÁÙîS'§Æ´Ú[ÆÂc­Žè®Ðxeùƒs£üÓ$Ë•C¬Þu·WÛ-'ê«/qèœ¬WQ²	=išÝ¾ãÉTÌ0ø¡$ÀñþÞà£{f›Ÿ=Å7OE:lOÎ`Ø¸â6ÑñÝ’L«ÇË$¿æ×”/ƒ.iZãâ+×Üy‡nõ„òêU¹±´ààÝa®ä…þ¦#êßØÉFÿª±Ú&+¦nòûTd0­·VÝ‹vÊ+Áje×b×¥®Ñeði¢bœ!;H£ôéôS<åò3út
hO ‚ã¿·G£TVcx@ÅÜ`QÛ´>ÿiß;ßÒÿ¾w"»Iü^GÛÙ~Ïv)»ÛÅ	}`åæÕyZËãõ_ô˜µT¶S_*NÌÁ ð4°õôâœFãËËþÑUsa¹ŸÊ0GãŽ99ãk‚¶Küž5o£¡Q9^Ë¿à(Ö8\®—/ZÃÐ–ã:Î‚É,_Ãj¾–Ëë"XçeÒ‚º”"‹m'q"…±ãT¦“ß3½¡–~_ÃAîXg·9/fqÆÏR!Eú½…Zá »¯{Ø*ÅšêÜ'€)m¯5”b<¹@N¥äQ¹mÊ;vA”	Ÿò†R$1êüCdC\Ôça©‚}þPvd~¢Ü×?~ô“{<=dˆÜ§)~8·!K˜pûÉí	}6Ø;¢›Ï²wîþn¯‘ÄÄ ðŠ}U’}rkŸ·ž­×Q—1/ëÆ(Áºy€“?c¼ÿÛ¥_O…ÔœØ¾"zçwÅ_ÅJÄ´v¹ŠN1–de’•žŠZN&Å×!§¶7ù-Çu¾lJ® GGÐU…z|ó’ÄiUøþ\Òh#Ó€Ô³Ü[Ùßã$B¤BN›Æñl_pf_ ýW çí³œì;È¦²ÿÊ°›‚O>ãHù±T¯¼T8}d›‹ðšç…ûq§>Écólö‘^ìd¸¼ØX|4æjÝ‹ÄÜÒ±¡/-t®z{gASy±Nw@Í-Šª³Yo'®·†š"É¥JXùå¨è/}Ã=ñÿ®\}?«‰[yù!î‘ŸÀ îäJSî³kôM[©ÆÎ•à“©prdðÉ"¸&<iKËCaØZ·_ú3ø
y-ïÓo„÷áAy±-·Oá‹õBnÝc·j?V~Zþ®ê~ƒ/n¦;!!LARy&)áÛ¦é|]0ÕT–Ý•Ù"ùlÕ”vãˆ°ýXæ	_ý@ˆ.†„ð¶ýþ0ÝÏÿrpc2»ÑýNÍüöÏâ;ŽWM¼"·¶ÂméüEr¶/±9vÔŸ1¡Ú.ù ¨µ	§dh;+ºŠ}Šë-F¡Té|9m!ãlAÕ™7ËA«¶ëá}»|æ¢ PŠŠ¡»1kÈ·Üx>í†àGŸ–œëFPü !±¤»€µájæò„PZ%;ó'qü1šû+v2¦üSælýÀÈ·’…$\.-/×jûYõÕfî1ÐâÄnž§²¦¡úçäiªÌ³¹9câú”ãnWdÌ¢O?NïD@->µ@%à„v×ºäE®˜Äàê}1ÎÈ/¾bkÂß4Æ=<í=N°_LXª5Õ$[mQRõžHX*>4×M¬Û—ø|³f1á3ˆ!9Pf¢ýzÌ ÊÑ?‹Wé'y?‹šŸ†à?¾ðE%Æþ}ú•
åø_ãO>çìwƒWïÉP-Ü2úOÂÄÈÙŠÙ›¬õ7Köó),½Ÿ±Í¹Zšæ\1§Ùºb”óRÅM{ÌWÙY•5ÏD‡ÿeJXî•Û%dÇýlô5°ÙVgdlõ·:•»Ÿ¤Mÿþ[íRºc[Ì²¨,kªÿf6ãKŸm4.YSYÆ·pb¹¼<]0¬ß¼omoÛV¬ëê~XaÊ¬µ«ö[£e±!çìê3ÉÇ¡&ƒ!ž˜7
š¼b9}¡¶o&"Hf6ä|
ZÛ‚í2ÚÝ)
U£coêzî»‡3"*Ö2À’ˆtç¿¶æ5¸DÀ—×:Š–¥xaº>&#é„KØN.n¢$‘{lDwzAæÇƒ%‰×ã£z¿à
:`îù`YWY4Ë¿x½õ‘,Jx‹dk«V,©Vûµ­‚ÌÚåIÏÌx½2Ó¥0ftÖ4=iX"MÝPôbûÀó¢O£èýb;7ØšÍÈ¶eá5Æ©?#Ø
¦¥â€ðå¹’-ˆ˜ÜŸ‡r‘Ž€–ðÀõÑèµÆÓo*øùLNyòNåK+^ƒ\ó†Èn‚Ö—z`½+¸z´ò.2Œj½KÖ{ÑN¬Ûp—\ŠïJøçAG[Lî4ój=ËM}]½U`=-P}V4†Q^)`‰š²!ëö™¬¿zä|mâ&ÜtXŸ|Ñ<vÐBv¬­¿„ñÒâ÷ƒ.ðíµÅ;@«ñr“‹€pÔ®”¼Kï&ã@Ñ?zåÀ˜Bñ(²ƒ‚†¡dƒd Ï®2[ðØU_î2¡9^UxXwÒ®»3=ÈB˜‘¨‚\²àŽü†(‘G1dË€ã£(ƒ·á51á2Ç M†¢¬Šÿ[Àšªz¾;¢êÖ+kç™¥= OUÝMo¬0x^û­]ÿZ>¸/>‘÷æžïÕûëð³RÌf!ê~v®@Z¾J?;ÌÄÒƒL‘6/8±Z‘×°1¬žß€Åºí}_F¼s".–%üž·VO·ÿì}z«»ßLšÐÌ²÷ì?ÆÜìê5:tð/4N<,s	¥$“(¨	ü³76ædðG­Àu¼ÀÃÃ%Jê{¥-nÉ}š¼ÅKÍ•wOvÏ ‡*OíÑ™cÅÍü‹ž"Ï­åàùï²0JÛ*AÒõöñD)Ÿé2 òÿU8‰zv¬ôÆãÓôrí™úQZÍ×.]1b“À¯¡KkÃ¦ïöÕŒU'’~ø6¢5nMYý(L¼_·~ú76Ù ŠñE!«jG¸\)ákëëÀ=mkÂÅ¹“øç}wÇo)ûõ£±xÍŸïü>žõñd«Ú¯¿‘¾u¦ˆsˆ+T/Q‹µnz.‚“fŽE3«š|~Y@%wSób2JVúèŸ¾)xOó+|æ^\¹ûm‡-òÎ'MhØ„þlé±N~Ô¿Áqh‰zV •È>{©¹À1\ê]²HO`/7GbÊX¸’´Ci "¶œ”YÜ,ªL	·ûùuù«âü÷b(1‚I 0áøŽÿ7äv*Ò¿×­}J2Q^ßM‰xTrÝ*¡06¤•ƒûo—")H¸ßÛr,0ŠUvt9lma4ˆ³ë)(+é@[ñ¦’Ý@&kTM‹'öÊ	pŠ´†}vššS¿ ò¾[ñêÆò,\·¶—}ìaÆs¤ÿoÚÂÊÍ/f}JÎåæï¿µ”[N	%¶’_¼ñùB~¶G§-æ‹sß]..edÈ\t£ŠwôZ&%k«EâÏ¿¨%ƒÂëå‹F†bÂï«*„¦Í-ÍH cÍC(µ°þÑ£gxŠÙM"qÒT´Óéuc:èÃ½hr·^Š©ù­?THurÉ¿\~ýÂN”•Þó•§iàoòOõŒ½òÁls½•]]Ì<Ïjü{¿oºT§µ2 ój“øeôq´ÿ–ª6ˆJ4¬¢ô¥[ºèei=éì€Êø†¯­@ò…J}iì^8Üö÷WFžW©î		ØSÓD'ô-/	{”_¤+
¦«‹ÎsæÖgM2˜=ÚQ`‰<¯€;H_Kýsõ…–çæJçøÞ «%BEH¾¨€ý‰’ìC®ªžÄ¤QÆµÀ]ºþåõTâÜ-i]5NˆýÇï!]7O“SÚ+fgÀ¬z/{HÝ—(àµb“­¶–˜‹v•k#{I,…0#CÙŽéÕAÁ@9ÂœðÙYGyÆTˆÐcî¼uê(òKa…®e«ðî™!Y£Ã´¶‰±S–2‡‘X›*Þ‚ûãL3ºÕ2$³öù>Ä9;!×šf×Þ:}öòÕS§ö`]óÅc—‡¾0MÊ€_	Êº%¤åyEtªáN’[•[cv˜î€0K`ÉÅa,à«¥Ÿ?Hç‹W8/rÇÆ—HçŸ‡3‹Oõ#ªñ9’y|•æ™%€ÇN¼qÎnÆ!`‰ƒòÒË7f0ò\UjJ.v=O•¥1¶lE°½â>‘m)‚ºS–üÁ™ÂÁqÌÌ¿Hµ\Í!Âµ“³".¦fDöM³‘ùøÞ5¾¶òàU~ã£S­q˜Ö´?ð­h¹Í<ê0ððëc'#¼·as¥=ÅNp…ÑÌÓîÞ„½›mˆÞ¤ñŒT(§/ž¹â›°p¡³)6Á@¶5Jšw'Û^2PÂA½€^û"¬^t½ƒ÷Ya>1žX™»8¿‚‹óçæõ°‰6µJg¡ý:¶ÿ³ñ¾L_‘”´mœ&Ð®Ž{Šß¶¶5O£è!:ù™ŒÝˆƒ²_\ätÇÍéRkò]ý,xŽ-6h§²nZËêýžÎ˜U„™s…‘¹š¢–˜Múç”NP‡¢u“yhE's¯ë¨ô¤»Ó>0Æwýw	/J¥I:B)eQ{ kÎå!‰‚:
J´•‡ ãæø¢¦8,wý]¿ãEýé>I§šJ2Á’"w<Ê“ãó)ßn‡šé±ÊŒàðVÑ2Ásæ¡à_ç¥i6õ÷\‘Tòø¸¼DcìèÉÖ»<H3‰<<â`Êö”•²ß1gÃå/½¯¾‰\t!À2§»Ìw¼ª±Tb® QÑ+™è…ËrP¤n1¡Ô¦âÚ¢œ){ŸXàž†²¬S.*P¢³‹ù¸Öí,» s
©¥êÔ\‰’å9b7áázÇõ]À®'ÈŒ©ÔQ3ªtcbhf¨XKT!û©}±Í·ÛÑ§nËhÛ\á)2âödìoçãÞ&ÖÂÖý¢=L+Rùv‰|û…ÙÌÆì,›l¦õx+Ï·Ü­Iƒìèq¬!ìÐù—Ë±“Ø3J™Ø-ã,h}]1®æÞãåU˜|èÛf‡©t#^Ö\¹Æë¡¨Ãá;½¬n±|=3k	Ã(Ó@AÁÀEœVYæÆ ©5â‰ˆæò›“ðÿZÔòÐ¸Rd¹ë_çG¥/fšyäjQ2MùŒØD{˜ž+pÞ\ï†þ¼òqÎg¼2}ß·dLÐ¥´ÚücÞ÷3ôVLpëJr:Yo£wõ7Äîûy"¨ƒËÖœzªóÁ#NOrW„ùëZ°P2E¶Ø|…óD!þ_a’Û\‘¬K}é,By_!,iÃp]¯èC"Œ½Ž»¿Ž 12}ðõÕ gxùJO3Ô×Æu-ùïx×éº%×¹alÃ^^gÞè:nÚ)Lþ†kõÀð	²‹V}v,þˆ‘s®4{ŸÂál @’²º„Ÿ1¥¨¼h©t¯Ñ¸¨ÝX»íÕÆ~tX¾/ÕZ-œ7t¯¥„i^*È+BS`N±¬0i¾ól&×Wàob¾fýÄf¶ø@¾³"ÿu°P3Œÿb…¡«M¹îEÇ 0«¬ÎLlÄâù†[ë€µ—G_bKµH?]"ùŽŸ±Te­¸âÌ¸S0ó	¢ú6~Œ°Y“æpÐ®iGµÀŒ×xøãemÅüúöÕk‡)¼ 6íbÍÏ‰Í‹æTØ~(ãÅkë s¥S#ã”Í3ð”;EÜØBmjöÀ€ƒö>èƒia‡ˆø­Z­Ec>ÿÔÉC 	žÍR²!ù ®•O»/”`Uñ^=ji÷X¾eº‹†¨U“è™Ÿ­c‘þý€#oŸ"ºˆF^Ú¥?2K™[uÅgŒCŒÐL½Ýæu^ŽÄåJ;¼­r¨[<–Z!Øy@¡Â9“ºÄX” £àN¢À`ã
R„KIõ	Í AÑ˜ï©S–é>ãž]õók³‰ÜPiŸ–X›x“u>*œÎìû›ú1çÞôÃîÍç‘‘Æaý¾À2Ý"õ@§­fþNÚ­>çèÐ‚Ès']Qã §¬	<úÂyÔóñÝÑí/î•É>0“S…0Q÷ðMÞ‚ž´'øF¦ýÒn,VZoQ^Ö&@qôÁ`¤pçàúºÉ€å`j‡I¨0u³P€rÜÔAå~@³ƒ0°¾x­ìå@cãaHÁ:Ä‹Neå"^ÅYË@uÒ„35Æ~VÉt’ù–ÀKŠT¹)E+å\c™ôÐkœÄfñÆÓIH(/D¤?Ýl)Ðùº›RÚ©oþŽ&Üe‹eŽ†\ë~D»ìƒò¥ÎÞFÿ²½Ã?ÜÚlo¯ö>¦ý?Ó;ÕµÁÎ¥ñ«½l§ßáÙ?ÓÒVö}&ŽMÞÜNÿ´>|m+ÛÞ½¾Ñßc ÖÉ¬	ÚV]Ñ¬À©ä¶éÍ¥«‚í³Yò}½–¤øÉÛâ(ê¬,ïs!Þ¢æ+ðxU¾ÄeBA&»òŒ>ñiQ.ñ×®-˜6ÿÅçÖÞkÈ%U‰w ¼0$wIœÛy††©S~yQÕûY®ÇqÎ]iš2a˜ÊCSiˆ€'d\j¶¬¤B')Êh£ˆ“/¼süÜù˜mÂÝN9À?¿“¨* q§âå,(•WŠ|ˆòÎõ$zœZ(à¾Æ
[4ï¥ÒzÅa7âFƒâ•ÛVDÒbÚU9úâˆ>6ÆããÃgl•Ã”w5úu<Ø92ŸÏ°ï5$Ö.î†ödôÈ7é<Ô<‘=æÔ–á‡…amr\aSæ[<ðÚKOKLõ´ƒ±(š‘­ƒìHª¡I’<ûQbj"ÍŽÌ³{NÌ¥»ž-“þãéÚKvëÓ+«nw~Üs“rüàÉ–!Ï¢Žˆ_×èxBnO>kuî<£
%¢Å‚àüNšÿ@-ŸÄW—3Ö¬nÒÍšæìsö'Tvqm×N|–ØNÜ.s*?ÓÔÜ·á¾HGS‡…m_cpÖÃÒé“?ÏÌã7OóÊøðnI²»<ò¹L½`rÛ¼F”[ãš!ýp½ïÐQ’À/Ø³ºn`DÅž„Íä×Ìe¸YakE!z³ÁàÚªù!RBÕÞxW¸N¼öÚ9%Ü$®ÅY® _,³Åž²EàV-x×Šv
w…Kùb{k™€)â:9!ŠòS	šÖ¿bWí´´Û‹Ë”Ø‚¹j4`BSpbòIKeï–“Í3+Éu*2«}K™Å·­i6C¢Ñé6·ƒÜ)FQ8—
ÛUàº“QCã4¶›¸ ÏZ~§'û4#V²ús	‰1UoàöDs<©±ÏGuª˜…Áé}êo9”‹‹ëI¼âš³zà*\Q›lávÇ=—zÞnIÝ¦—N\¼’H\@Þâ6ÙwÛ©ä)AAª®âMêi‹#!.—tE¨)m u2 a—:Sp~{Ùwâ²I©vBÛ î\ÈY˜^
Êylê*‹žâÏ²žáÍ²<@ˆª Ð‡
¹˜ÉÄ¹ýÑÒÃIî¢×Û¼'¡ÊJ¥*¥«iL|w9Ss%šPç‘X |et—údÙ‚Uæ¼5îß¶6ž¼ž‰þÙ­8çGÏŽ—À9ô¿íÖ1L—Õì 0–Œ»l·ãÆÏ üè…%cHn:[„>
0U„u*s{Ã0u®rë ÎPonéÑÊ)ãGxÇºû·$µéO¬E]ƒ®4Ž°	:ØíÌd‡)q‚6P½ƒ<ÁC®ëŠáHò°ëáUˆ`n…—*Ì¶œŒiÓ(P Î‰œB`÷cA*Â£ÂÈa>öºÎ±¯•áI>
õëIÙäåàœü“k5ŒÚïƒ‘¶%î8/jÔJ*„È1oÉ)5Ã°xatÆIc
æKn’(èjùõÝöÌ±æš+r(ýfz'•0¦]ŠØH6.ÈÒi>Aòñó¡–µR·!µÜI±"áè.ÊùãÜ«$K™a^w*ßœU%¼²®©DòØ\D•U6î³e»­Óe?\6n {“š3h"»»à‚+÷ê(22yI±Lå¥€³¹•ã†yÔAˆš¡DT=RçOSµj:ÉYMµŸD<Þ,îBp'Ú8ÝªŒÉ€µf:´8û¬ìÌ-=¸+¬,È#vç—rïpñ‘IÝèRu=·Ea".ÔéÝE.wY'<;$Má…•Œ~CNåÅ¥ögì'3%ßÚBÀ\»]£IƒÀSõL»ÀÿMëH)‹ *ï×Ö6 ]>¹ØcRÿ¸qü×ÝIY.gýU,ñËNB»ZD©þœ—Hà[Ún¦2rc(Ë™²–YGQšÁkë—­’ô­#§Qº´ÌÕÕ+Ša„§àòÚµºÀ¾²qÕ²=ºSïnnÙ5
C¸—3ZÕýú¹Øï]dÙRÎ0•&ÓÕ&Õæ–ã=×Îæ— TÕ¼èX¸\”øê‘êP¸—–Cx	ÉŠó¶J¦ôáë"nÔ6Ú®°ñuÜ©êª—Õô‚5âZvïa	¬>ïy$ƒŸ–¹æL'ÀÐCæ+PgH±Ì½€SUþì3«t¬xÔëÓ3¿ÙÔJÁ¢úÅÓa,9}nnên›†X!èp1üUª,§’²€u?v¿¤‡:,bWp­82®ÃÝP›à”gØaÏ\³É7l? ;Ô§XÔFvJDr¹å$nØŸÙQ'òwã3r|çÇ„¦¿µõú †–O9bãUvvsmNH&Å72ðG5XÒÄp‰S‘sß°$}¸Ï¥üaœqÞœ’±ÂùÕvè–Ó.œY›â¥Ç ÿ¶ÁcÇÎ§dè2š¼°$ç`Aþt‚Šea¥h}èB}ZD3 î&Œ÷yë4£_d2°óM™¤¸(ºï¼‘ MºÕ;@auf–oXîˆwûßÁ×
ÎäÒƒ«.SÎÁ¹$zÍ†gùBf§B+4-¿éN%)ï´ªå¬‚¬»}ikB'
”Kn¢[
ysÿ]•élú..|=¥ù†sµÝ=§ž°yÅck„JML<ùð±ö±âðßâq9Xíá«Ê&—ËhàÛ5Ê‡ÿý?ü·‚e!;~Åía'Ïˆöë×¦6¦3‰óD³ýÁòÎÁjùp¥šï²N›ëüº(æ®Ùf>hŒ•ÄºƒÖ­ˆø˜#9w!ýqVÒyL¥h'ö¼SQ(BÒ6±xÁ^)àbåÑ:‰ Î¯åàÎ¿kN]ãÝ^Rmv
÷FYpÜºí™3QS(ŽK™#¡+(UmíÎó|æÝ~PÀ>üÉN»KHhÁ^UJ›”çè­,ÏÏ..Íª8<°ÐhóŠŠä	ÒØÅ‡âj¸Þè³ñùoaZF“AïG©8FÁXL` ³AíŒœÞJ4oµc²X$úeÍCÂ@
:îõCq¥¨fð–ûŒöšêU E‘+†Ì 
øçÈ²4!WVVÑw%1ÏÝÙýZýö×Sž
‚
¾’FÍå.|Û‰T´¸ÿ‡¸†q(þÜ¿Kges2Ò2Ò×G6Õ¡«ˆOûúÙ! ápT¡›?ön¸ðøœÞÜXEg<Šö×\Ÿî.Ü«·^È;ëËðÔÑ3==XW®?Ú”[L*sË¢n˜×›+€Zî›†´é;§gHÓÇÇÞÓ¢§½|ßíùv9ðU<Í¹,Õ˜0¤ø÷Ž—˜r Vr]Žº÷¥uU«É…P.q	ìùš@kp °dÛÃ0ƒë¥Éð“‘£ô"Á}ªïý¨|U,ð'_3 ¾}“ËAuÿ‹'ßKH^LVËÖWaÀMôH'œÇfT‰ Ã-³Š‰VYT9Þ]Œ±­¢‘H[ßÈè$R|îû4¬!ßÕŒWÎP¦6quHpwªÈÛ¨&^XT^*KáŠ-ðT1ˆ; wª×·•3¥.ÈÊ²U›ÙA»fê}å£9ô%kÐ²om$á¨>ÆÊ­€ÌpMÄÂÅ‚.g·ÈóñV4>Qî
î(F!Ä¦±Î ¤rv™•Öm§§¢qÒ–üV‚±ZÉwK‚ºmh&î,ªu=Ë¦îÓç94Ÿ&x’”,¼ÉªóVbXK«‹|»«ºÝ_®“Z}ÚáØ›.v¡|÷è·ZÍÝ»—*ô²ÞÚ9•lŸÈ9ã‘ƒyJÓ¬Ž9…0‚ÕÀ¹„ÂW‰,É¥.Ÿ÷£(ËOU`_àÂ€‘N‡ÑXª+3¸wçX,@ŽÂ$†íµCšÅÒ:å#K‹³óË+H}ý !¿[Á¶.‡ÚûÙ½ºpþ xÝñÚ û'Å'´V·
Û)4Ô ·°Ójí’{bìZ½{F³€ÿ5Jx•µO2¥áØ´‰H|øŽÏù%Û¢šE”æ?**.°­)z´s˜›œYW©.“5µã,×»ÌYßv·¶€úz’ÍÁàn"ÜíP/þÕ,kvÑši^/?Nƒ©þDš4{·êÎÜWüµµÔ.Š¼!Õ¶Â	\k,Ð5Ë–„›Ç
²3C£+ž™—Œ5â‚02º/Ar¹z›rèWD–OjÔå„,¥Tƒ#ä¨ÉEÉ†H[„Çã¦ãö½2Y,º((U·¸	õÄÉXT“PÝ¾ãïÔ6úf:ÌAà`€©„Pí•ÈÌ¢ÙDpõ§]U>ž&ó-30Hì­ÌÝCvø$%’Ÿÿ&î!iþh±<NeˆQÎV"¡Ë4“ú/rˆ°}š¥7ü	s¤_k·—'ÖA|@%<ZP­™×ÁŠbì”
tºRHuÃaý°7B?&Òî;»,{óc,¬Í´@j³Û7/ñ%­Åy&¡ß«©k½Êzjl˜ò)HÒ®Ê˜ëA.ucyK0AÈ£LZPÍÛÁýâV±ñ$ì!¹b¯þë‹Î.e·“Ç1„m&"£ŠÂXš{aÙ\Ë˜Ka<g,ÿ2‡€Ô»¤P¦}<ÖÝ§Ü–Xó`¯=JèˆðêöÎöm”'¾$RÿpŽv¤2â¤0Œ®Ô…ÙE©=\¡i˜ö¯›§—nl„lÿ>+È¼§*„;++lO}?$h4Ø vÌÊEW*gæ°šÖ¸íÛnBùÈ½Ñ¦DûVcŒ4ú|9lZeéH¡Yì `DÆÕ`s+&Æ0SH¾Hh’À5#	¹4q|¶*ZÚîÅ	-š1Ñ—óÔýßÎR’‚æî8Å ½[Ù:/TÞQP1•&jÞj‰[+¹™~Rå´vÞ×îBe"‰¼ãwt?ÜŠ&£B24¢‹Õò0ÌÈ}ÊJ”x4Ö3U¹Rè8hMöZ+Ñå –)Àm:2`˜°Øî+<`­‡ò¹8ŸÙäê.z)ÿL’>cSaVO½*uM¡èjirjÂÅÛŒ)Ð~ì;"‰J{vÄéôCªæ}’§·.Ð¦,ê1\Þ‹í»¥áíuëzðöð’#ùÍJsùÂ&pò´]”_,.¾ä~_‚o:lçnÂ ­9¨ìè"1rwÂZKm4ó>JÌq÷EvR¡=âkwN)2îÊ#šOÆ‘ÝÁâÏOOåçÕ~Ï°M­’:µ>²bòò3^ÙNíó¡ÍÁN¡&Çˆi[;ìUÇºèÈý‡Ÿç}|ºémxüË-+
w˜²?t&¹Çt~YÑ…*˜Q˜B°Õ:TàƒÏ^™ºdi4¤ˆC‘6É*%`×ÌH<ŸÏòùjÝ
ŠûPOß“ÚobÏ8ÿ·„&Aœ‚vºžáTô7s=yZ¸]I…@aùR/vÐuÀ¡qˆÖ'¥„™£(åÀLÉhU²½6_44?ðBhNÊ$\áõ8QÈDŒ»¤¾²z^ÎÕ¯oú,ÝÄÆ
Fè59ö_ÓëýD<OðnÖ]IKm…ó¦‡÷òÙ-‘ú(#¼`ø8G($/zÛK»=1Bˆ°IGœø:™’0¶~jN…Pg¡íå]’öƒ›Åº	ŠøXÛÜô ¥MAË™—¶EÓÀ™ò]s˜XœBÔ¤©La*Àu!/à¤Z%eÙ=Š´Û¡@Á§&%§Qs›V–+	¥F*(Cã]JÈµÊéQ¸ÓÝ{y|¿î4ÆKƒd“»n1W`ü(ÓIØåg×zÿ\cðãáÆføTá&Á¹êÚ	áÌ‹2ð9 ñCî\É!Ÿn›ØæÃóßåQ½p«ÐÄÕN—Ú³ïô¹Ì—Ï&«Ô¿˜Ï+Ìä˜äÍùÉ
±À¢.ÎÙ¼3[>A~¶äÞ3ú,?ýªP‘%öJÚÖ—`)8³A³OÈZá¹œ8:óµx±ÓüF>· ÚÖU;0Ü°­¤Åˆ÷öèe¤°Nî³¹7é·Ù®5Ñq›Ê;q;
›µEVääìõÉ¹…s`CDÖˆë›mø3'.Žào0Çc¯Ô.!¡/C”ucï¡ÚôG|ëº—lÏBàÃ¶ÓîJw2
XH²{c{Ý©ö[V„ŽCùP¥@î¤[Kˆk„,ç;ŽñÆ7Tï#jBn¦¤2ì}âvI–È1:<¶ë “«¦^W™	ÝˆF%—a"¥êqh@Ÿ4(šsúÆ

~-‹Iê°†‚l%‹Bç×BŸ©7}µhKpïyÈ×åÊ\X´|ø	8i+-)0Ënv”Ãö§¡w!ÙE€Á²ƒ-•s¿Ha-uy¥C¡´ß¾Š¤«	FÍB†àËet£ŸÛ¢$ƒ[<V?…õB™îŸ	YU4²y{‹ða‡vÝ@T¼íG×E`‰8V;ú‰¼ù/Œ6'È‰ ‚X/²)®§—6Çù;LQb»÷Ñ‘@õÎ›¬¦IøO›…ÍG—<<‹‰‰8-˜‹4ÎAOY8½&’2±½"ŸÙâ0¯4æÑ³ð¤ÓÝö-À?^NùÔP¼,,¾ °‰2(å­båÛõ)ôö•ÏÆW¶ªA…\õúI~I•ýä4 w±¶í¤EÛHòÛÅGtæâ\ï<¼¸<úå“Q¦U—Ú	Óƒ×/[}„­¨ÚÙf|èª´2MÂEŸ ?-¡‚fOÎ‘kFQÍIÌ‚Ýè¶Zgñá‘u˜ó9ý{ØÞ‰ê€b¨]ö^F·mz¤);^jQ2sízú·ßÈ¾¼…5§McvÌÏºãžg½<“N7Ó6e	$•ƒ Ê”ÒÅŠR„(Ý~(òÎá+ß¼?¾Ú-g¤[‹Y½~—RsŸœIo+ÂÒ(iÏªVf¬ÓüSÿ.¡~nÆuâøÔÇMÚ­“ãòc/zž¶j|`Ó×m³j`/¡š¤±ÃÃÒ?®¾Yû®µy¶çÊÛCþˆyG ç/Ë¯åå”ã¶€åaO–ó2dåm·vfê%Ä¹ÂÈvÿÄTò
y‹+›€çÞ×¦÷A5]°Ó#`~Í¦–ÂÄÑè*ŠJÚ|x)ŽÈýõQ&ÝPQ#7)ÎO+eæêJ1Úóx~Ý¯…ÉýEv	”Ð#È ‘og\ûÉqM½™y°¯ÉyE$K DChRŠ€‰»¨F0ˆÚ1[%ìnE¡?uUòãíÆä¡f’(s¨“«P²üïIó<=:±ƒ¾èÐê]ÔKB¿Æ™”yË ÖVp©ó†©Sá^u×î:¾.‹·6o¼®MFX#t^üÊì’1Ã²q¸ŸÄ7º­ùE<Å„ENu›šŠ©¹¢¡ÅôA‰jŠÄÅE¯SÂ ªÚ›”¢Oa¶ë…5ß@ZîÔÇ™á±IDæ¤Âˆ.ùsëî2ýÔ‹×.·—aØßù,“ãÒ¥cÇ~u›	$.(ªŒ]ò±ûÏdY>vY©-wz»äD>¤g¯œ!ü²—Ë-øª¤+¸=µ\ì-çPƒ£«l©»3vÎ¹¶ˆfø ¼¸yžÞõk1sW<N)[v¼E—NøÒãx± u‡›¬}šT„nÜ@fd÷™œ>åpÂV\„Ï†I®Í/OíÃÛÞqGU7õ=¸;êbœ¦ÊNiYnJQ~ÿøBMå=?iX¾í‹–@á²Ý¯ïk
!að	Ú¢îkøJCP³å¹U»g„!¦íKxÎÕr¤u!¶ýok³ÙpÀ€|ÕDP‹
Ë1l¹Â`*ï@·å.iPEw)Ítžœ?® ³:­ò.^Õ©(¬}M‰		®àwpæ­†•\/•5+­ÈM{¨¤Ì¾ŽLS‡k‡c7”‰Ôtz‹´¨Î…ªH–mI|)÷Ä)×9BÉm+²
°žôpm.åTÑ=¿^†Ïb\Î|}Éîä4;ÃVŽQa¿š‹ÛÀ^Lìûƒ-›´`»­eï9žÕk2ÐÅ{îp£,z~f"L¬8F¦f5^òðÒ¡ªÀª§ßÿ÷œ÷öò_Ôz—/pÈ‹xˆ@0äRšžãxÞØrí1`_ƒyª)ÄNR.u8n¦S&Ðë¢DŸfuybP¿-è?nû……xÔaÇ£JÁt™cAÆ(WX}*%A-·³êcTÈ/ãÑìÎóËrŽ–kÐ­HiµIÂ¸œ¥lž÷ÒÈ–báéæQiší<x°=k‹þŽ†I+ÈášäüßŸJ‘(ä+cÖŠol@d7¡¨C©ø·°„a©Õ¤¥Ë[¢©øý´iäx/ËL½‹5án‘Íä‹OÆvÙu…{=	ëÇ7·Nl\[b[1ï²÷ÜÄK*•¯I[–ý€¿§Á%ØÔ‘cŸ+AZJÞzÈ0=Ê¥'mr´ô‰H
ÚŸåœ·B0g‰AÕl
–pÏñiPKƒ¤²™M€J&ÒÔî1È .w';»²´vy‚®ÿÈÃ÷Šó›X²1C¥ý²ùè3=”F¼vŸ÷4žÌ!›?<¿t.öulLÄ$u’Dv0Ä”Ôƒ¬
XâNˆ+¼Lä\ª³	<¨€âoñÉ§ç]z¹ÙFÄ7¥oŸsgÄµùKS.QO†DG£Ló}íÖ}
¿ÁPé•˜sšÂS“ØÒ– 	×Jºohµ½Ñ­äÊ}d˜ˆ¸t¦>3Ù3¿Ê[÷gÜê.Ü7Œ~”ŠþÑ]¦WØƒuðšðOInäWy;Gof'ÙeNƒöþkfæ´‚¨+kQ¦ÿƒ)ª5ŠP‚egãHÕ¥,S)¸:š•Ø)Ô=& J“Ñ'¥žþ
ÿ—â+•%FoÇ¥Ôj~R&oJ½ïôÂˆ($|†Ÿæè¬U±Û¢ï“º
E Ê®(gCn:¢Ç7Ž•ÛÜóî±0,	§ ¨Èsn>tŠoMžŸã2kÒór¾ß+ó•(8ÅA$ÞÑ)n"ÖõD/û!ÐI„²üVJè	$ú±ÒO,ŸåUB?ñCŸè*LHÖ½{ŒeÄä«q¹ÕêŒõ£ä›b.mHÛõ-ÙLÓòË®;¹»|Ã!¥e
L©âêX ÝÁ» àg	rÆ-:à¶ÒI^:	gËOàÛÂµ„É¿W¡ÃYSb†áA®ÉùT»–Ë	6äüñ5"º§ïý&\ßPêrjáÏ´»† uóu>¾—D0Bi±àÜSêluR.»'p•ºÛz%l XB³íŒ%¯†­7+ÄfÞ8ƒû¥WÈM†4'o³;SÁbí½vÌíA¨…;IGÈ/Þ3måêÌ'¸ûsæøÂ—¥høÕè†Ýøaè‡oyívM©Ò(@W4e“xàLq£ÔÊ3,ûð¾x‚‡!Wn2eàí„£=žÛ'¯Ë¦^þzºšÁ=w· š©äö¡`}ÇH\#aï.7}œ{ÐoH,«\²ßQ.­}><¦]®‘h1ó	ïrš14–ðµ®ù	Î¸*W(¬|jÄ÷œ>$A£y¬Åw+œ÷È«Ý}ÆN{ï¬âI¨å,Yj**½auáª¶˜#cRa{ùûñöA4ÃÒXWeÛû×“/ÚQ„,—~ÀrÄ~ÓRQTC`‚#®×æikÃJlÚÔ•º]‰êJf°aŸAÇôÙ¡ã6¶½a›p‹ÙQ/oÇGx/Ý|Î†«ÆTõý6“oô o²×o®ÝO.‰£çîË êˆSÅ¡`ˆn–û¬×3¶äÐV5›ÔkyyÎLŽò¸7¶³Kirµˆ’J!ðuCŸDnæŠs×Ãeq¿L‹üÂ5"õ¥³Ò‹Ò©»³Ïô=ö:\½ÿÿÅÜÓ½ö,lL7’WM[ÈÌ—jB:œ	ü $'h Pó#Üø8Uño˜H>ÕÔi0D2â›£Áš0”¢7&ÓŸ‹+‰*ý¾ŽGsˆøÛ‚t—¾7@¯¼ãž…S‹âAöýžv¶·Z¥Bc.ë–õZ»Iñ¿È9Ãmô'Ò*øÈRÛ?Äâ¶ñ•ŽÕ$OøoX–·mEŸ›)_[³ö*Q±œƒzkHÞ™Ñ$Á|%Ÿøï…5œ«prˆ‹8×âc-.#õ»g{È¶BÊý¼É•°–}ºDÂž}×èÓmËÃ@R m*®\rºÊžSÈ3s¸‘wÀ«Œ×³ÅäÂÞ‹:EeäTÖ2i¦'uBeÂFÖ€ûnÌšÔvŸÙÔ«$±Ýàv­–)ö[Ðñ¸±xþlènÒÊ!£`¯I ´†)i.õqâgÚê‰*2l/àz¿_ 1»—÷*)Óö9ênu^ ¼!Ák©,gì×åHyÜO[^€Ñn¤ôîùÌ"Ýù!I*qË«=Òöâþ†h½Z[èv~–&„ª@:“¬eæIå·d?~ÇUÐ
&M¥j;¬ø9±ê0¹`16ôÚz•¨Í¸³“Š"¼T——oEÄÃþÀƒVÙâÅŒl¨˜N<i]‚äõZ1®êjPãÝ»wAe%3\´„„Ä»º«¤£Ç‚6±ÉÑ.Ý¼€1æ_Ðå¬ä²V±³¥g³ÀßDÜ ,Ñ¸ZÿzÝH§çÝpá<•s %­Éàü,ÎÝN‚¬-ôºÛÃ%ÃÊMÀ#pöŒ@ò¹ñeÜcR=d<ÞNKÍµp¯ÇŠÐúPÚíp×$Bå•Wªåe{¡–À“ &xV:ú7Ùæ&®ûù[•“%ž£šf¥¥æR/HÙ&ÅŽaìyM£üúgò]ñš¨K=¹	Ø•ÃÊ4Âñý„]IoF—.|¸.¡ªÖÚ7>4'ÏhsÝœ%ôðWY; r†¦5HïP.ãÎ^5bD+†”HêW[R+ÆEU­ïjê*F$pØziÙ®­¡Ý®?+}LµËG–3Ö¥G™÷¹w­B„A¼r%pÀ·r!—TBÂœx©]+-JÞ&uE¶þÈ^}5{Ë2¡¢f&¸Íi¾tvÃT(ŽÅ¹Øå#ŠR[ìÝ@¾—%1v‚ìœà­ÛE7Û9¬Éµýä¶‡êìpÁ9(+ä(ýG»„Ò\žþ£}N’|‘0çQÞ*xm›ämÏwvcÿ-å¡†…ÞêNÝ‘§ÝžªR£è¦îâemõ±4%¹KÓ†Xlñ0+ãJüé»4¬S#¤ÁPö™ö—šÿ*ÐÕ•qdX­Ç|‚5®·Ipßôíq0Ÿ¿Q‹['¹ûâw,b5fHRs·½×¸ä<çd%âõ‡5|¸Í‚Ú„×5aÁ÷œèÑG€mÇõóJ=¹ðÚ†…PL±1‡_“ Ð)‘CÅòÐpyôÙ}„fÜB%5‰çæu·€`Ó§•…}Y,VU<âÓï²öô1TìBu¢-0tQ#îòL<-g4r½Üê‰
y¥¬ÛîÈBÈ“‚Þ¾KN6ÊPf~¥®ã îÏTÁ{è|({Eß×üž;4õŠ·Ží(L>]^vHX‚šgðºq€†§À^ƒ9q‘4ó°3ap¯r§éuìC@lyÑóãTîê¸¥õÁ•‹¢º9a]K_3åš­J4Í$´=%„IúÍ›ÈÝÉ5âDó­˜ùÍMzŽÕ‡š‹z®‡âàPI¤Qžty ÊŠD§p­ìn5©%¿¬ûˆšÉ3ñMÃSG'#üEÕ¾=œJŸÆ7++¦¯™X´W!ôuä_·¹ëBgEem¿eƒÃ–çNïóP-qB5Ã"ÄM]»3Íë¦æq3[ê•Áúz¨ ‰d’ÑBmBÚˆ4]L•WH©nÏe“3H12³'êIÎ&q‚6²?iíµcbô¦DízÙ¨3´‘a$Þî:ìsXQñA©ŸŸIÛ-u8¬¥QÀÐ‘\—á+Z3è–ýJýÚ\ò¡ëU%wZÕ²üÌ†m±Ó««{_ýÝXPì í	:‹á¸2£$-Sm:´³(ÎæÒ2ÄÇ;”ëë ‹@HZíüì‹ÜHƒ“ÖèŠ~eqŠÂCÿvg«ïð't‚U$ÍÃ`Y‘»ñ»òÿ!ÀÍ&?Î°ÕÜ ø“Ù„7‘¶ßé[nûá}ª·[•ý˜	b‚éNZ÷bÖæÙè[Ã^ûk7O÷È’’mzÏñTh‚0ÕO:y®Mï¡‚æðÚ=8yJíxˆ_+yüÓ˜¾5:ª{©^±¿æßùÍ³æn¢v‚&á¥xìÈŒwxÈ°TÌâÒæd²/&»Ô½ê“T1þ=ê-D£â…P„4|:åi#§d:Æ¼OùzâÂ,òCÚ3:˜¿
é›H1 ä†"¤–®aÀ®aã¼Øu„àÜLºEeë¼Óâ/Ç|råô'ìô)ö‘çÔ"®x{¤ÕëþÅkDºöáé•DÙýrûï½ØåRœ[„¸ñMÂŒŸå¼ÙHÙûç¶Q2{@‘ç!aFURÜÝŠ$ƒ°–ÒÈ	%“ˆ(g-ûãŸ`óûóìÄq_ì*‚H€6b68;qÕ!‚û0š{ Z¯êª°{Å™ŠsåãÜä¡ W*;üªÊƒÒ´ãOÏœæ2zûMóîÕŸwü¤^Ë™ 
Äøœ<ÆFùºe32£s·E›fL-oÁ(IÌ‰ßƒ¤8_b`)p½£ù2—^Pé­g ¶q5(#-–FMXy5ÎNXÑëµ¸^ÚYý5žè.(H–›ÛU’Ú”?ÿ^cŠ’¦fC/=…Þ+ô#NDZ*)¤×Õ¬˜5åh/úÈâ0Mtçuºê7e#J¸Žè ½Ö­ù¦%•tXë8$F-Àa<„ˆâ=?Mùð Žšd¶±d#Ï3<=&\Ù:¤…©ÄäP°»´Ä}|‰Þ:9|³¹{ÑúVeøIoŸX™¹ï(Y‰µÝ	X°³Ïòs8[_v	wú¦PõâS²²OÿD3ÒhD yZœdÒ–	Eí†µ¤®ä¡53_ø5`5Õ¼rËÐ+§ í’8P'U:Lý$dÅž8Óüé<Qi¶Å…ÔòŒ·ÌFjEä	hüQ=¡™fçÜ GÿeÐÿVQÔ]‹ßÍåö«¿ì™l‡ÞîÛa4?ë„ë¸­y©!Àª~{ea¾K´ü;³aáX>ù¤I´Ì/Þ|‘Ô¯Ÿ5É=~·Au•i±Y%ýºé´Nü:þ»5™L¯©²&¿¸±[ä¡|½ÏÕ7zÒ•K¸XŸêÒä(öïqóA[<cQ6Ùg¶(p8ÈüôuÂÂø†À†Ñ‚ñ $æ²$fbOƒÙžy‹¦f‡¶ÈâçÚª»f?°­ZYï6£×ðc¥uG¼4¨
Z€&µ`¿¨>©^Õ–„…ïh²#[î¼§¡€8!éBÌÝxe×¯—°Í²)a{HþÌeú6$âš–rW"hlÑÑ3‰8ŸW—~ŸüÓ¡…=Ì)r!R9’WT^‘ŸÆì3™f1MSƒP(§ƒÁ &›–Ýð÷¨jmg>‹r-s4ˆX“ÙQUoÐ{7›•súŠ@F³kõ5A™¾òäŒ¯ø]õ,Óyl]óÌ˜9cÀžåüš šÁWÊˆ¥PcÐ¦2ˆ¯zú‘ ƒB=2Ç+Bç“+’Ú¥lËÎäÇŸÉ›»Gô&L_ì¦IRÞ¡5
]³x…úô-eÄ”°ê )aó“ƒB{Ú„–~Ðó-¬~6¬¥öJ¯4ºÖ.Mål÷ï³œóŽ¾Ž­ %]¡-“È\KL¡g=T|žÄêŠ½í1Ÿª77-+ß°ö8…u(yÄGaGŽ¶y—Cã‚6¹Š#'í@
QðS'ŸZ&‡¹óP4Ë<à§Ä¸%¸7Q·[5©E/äˆM—™–ò 4–5qXV%A|xl³ê¸ëð"³óÈñA „QÝÓœk yBÙ•›ùl/JÉÿku†ÈH›Í†ÙNT{*W{…Ž ¿2ù„Ö™æ¶¢žÉ>úôÆäx&äÒDØÌÍÈàAO,7ô¯BÚ?¯ïON[vÛhŒ™E].4´
¢N$ »k÷òH9S‰ä£«×t·0"Z/Ó¨ajÐÒÆÆüî@³´çÌ Ô‹’}¥a[ú‹’¿ç}ƒÂ­^wiz[±Jðí×·ƒX;ß¿*róÎ÷2évç{vP1¬IóÍ?{å«`…¨î¹h>•Œ^oŸƒDq°,ÄäACµkÒ#çš`†\!ëh¼•V`è.UNÀ‡ˆ°[¿*iS—0åX÷O	's¼HCë·œœAóˆ>ë6iY‹¹Äß•˜aj÷”lwˆé¨8‹í½	ýAœ¹ ˜§wŽþ@ˆV,p<0c2Á¡$Ï^ŽÝ~‘€ÀIl”?KÓªæA7ºÝ	ŽÒ‹Ã×Ë)-d~ Ñ¤ ìPþ hÂ.™M,¼žÕ)_ºHç/ÀšçMõù·•Äê<</,ày‘‚RéE(\¾`f·Mä
õqµÄH”pŒ#¢xAËŒ\þ)S†Q"±ÌÛ¼•{±ÿžCÐ.zòN¦&¼îùY¾%ª3Ñq°-Ö0½S·ðÙ×imzyë^­€iÇkÏÂ–¼ùé¦ðã×£w$ËßˆÚËv8\vÚøœÎôv ~™t­ðqŒàœO³=ˆü&KvúÔ¬Y´Ó)aíp°7„ï1RÈÀÁ'ê2;î–Î2Úd,Ã Õ›Ì)yÕj¨íÊ–lÈô¦;ÃlÔ‹ç$y3}mã+Õn-ßzc¯[K’<T–ööò’gz‡­¨ù;† ÊgŠ1³,HL#‡²f%\èmšUÁÅÉwæº›†ÏÅÔËâ¶1þ€ÑßF»cCñé[$Âádj7ÄÃR(ÿÞW£	øþÖ3”©¢Öó4[x‹å8HÆñuáúI&IÆoxœ¿ÝÌ™¬Êeí¥[7œBhR™¶»>•2voµ£sÂ††æ$ËH:	4ux'ÞBÆ%Ö¤ ñ­á¯ÕµO+‰n´Kr(0ÄÇðXéŸä'bëBÙjÎ&¤¬¹ÖŠõ€ú
?ïh<æ¥ÄId;22y(~ŽßŒzoõ¸•Éèîºfqäê,ÐXÄÿo5„©„)Í)Nó¤{ÿ×S++AÁ@Ü±—¢O Eø[^O_Ô#ò;ÆÒÅ¬•á•ì¬0â8ˆõÊ­‚“¢"á†¹¸æ²€9§¨ßjÄ›C”ïlu¨ûÏÒ¨o§9#†bþÁ’/$pF‡ž§Æ†$ï5ÎÆoLä0°±›EË°LÚÖöD¶
xÉ3møï+“p gUÃn…‹ÊÝþXóz™ sÊë5’Xj -]`[tR¤ƒ¥N®6qÀ³½qœÂm
ìõ÷uÕ€r”ú,G³…0iBƒ9Xðœîs¼ŒWñIŠñ:ØNêóö¶ÅÚå]ºyOvk]ÖÌ9XÙÖ´½óÉƒ_T†Ù½/Z/w=j-x¹’]}0Zb+¢ê*ŠÇì÷6§~8Bµ+ðÏÜO*„ ïH0Uë1.ëÑ‘“Ý‚[Û§ê*x¯Ø=ê‹ƒk°Å¸·3—${£î6!¸l±ßÔ¦~2xÅaâYmŒ õ}à¶FœH‚¦KXÇ$k Â¸Å%;¨%ÞR:ßDïMÈCë•<÷!S_^R¢çp€Ý=\j	ÙZìWAÜ‹	~KÎ.®Q8øÍTýïIžç„øûi.uÝ.$³,Á¦»·:Hi¬y¬Óã»y/"|÷nv#îPœüwZo·K³‡åäº®ŒÁê«Kœ`0MÜñlPpÜIAuøÎ‚Žš({1Ã,Ùè§ç”kì–_É’ÇìÙvãÖç²#"ÉzõPî5¹åInu‹Žƒ¡ã<-%}ä¢9§ö“…†ƒœx¨èÒû}[Æçß×uÐÈúÄý”œjîµÃ°.®°óß¸z‡b¹Ô‰}5³xã1afAÛBZ…Ç	RLÝÄÅln Yï mPëôZW»ŒwVŸ\d{ÔÁûª`DŽÔ-¨î{_³’' ‹¶#ôf
¾üÖ|Qw¹×]â	C“°´†IXó:TÇÓ6;éÇz®¼/§Í›l•H27qcB«D5þ£Ýÿº°·D:‰º[ºäfâ?wéîø”©Xó•Þ¤NñD¢n8ñÐ‘Ät%†ëÀÝ:&¯@<“aèý¦€G@ã`}N*ë@,ÜÚgGnnRï-åŽ…¤s#vÑÈÌ¬;Ýbð9³* ¡9?•Ïµ][Z±
kB%Bþ¸®¦Ž
¥´‹°ûË>u5YJ¼Á'Ó0ðOÍ@9PüÎÀg5yIÚf¨wqZnH_ôÙØ5‡¡ôòÒÉTj{)šÅ±jºOÒù³’ÃÃèZ2‡UZ1ãmF©ˆ zÃìj(ïqlX5´ê}˜a2ß‡ÈÓËaÔÙ"<ÿ¾¼V¹çÓ JÔ%¨EÂzÅ–ã1œÀ•D8ÕÂPñA*"c#EòAóøæ€EbäQÀ  îœÒûÅ3ØU'b˜lmZD4/žDµ«¼üzkÄý„²ó+)…§®Üòÿ0Ð¯¡€Ä.ÃUuN„/uòÄ.:º	¾âá!í©ß¿?½)Ïc•©3q—g:ˆYmÛã‰Œ»9ºUÉŽ<Ö2Û™Á»c<ÛžzeáEiq'£êÃIÇýø¸¾m±¢IAÅæ—Ø°}	î@pHg‹#uòTvU>øw«YoóÂ%?­¿]-„c]Æ5÷Æòj/k» åïÃœÑî¢­§ö=ªQÂræÖƒF—r¹hù×rsu ”lja×ÆÞÍ$ÈzK”nšÕ<fÐ(ÕÎ}ÖA`Ä†¾;<«‘é!txðŠbrÅ*Ûëÿ§ö+Ô¹QB¯‹ÑŽ;Ìdü3ñœØ´ÅPFoè”³Á?t òõeaÑ?´L¼*¾¿´ïJ‡H@DÃÆ3`Ö*!1À™k
5»šNMùÄUæ¾^>^ÍÐŽ;tgá¦NÔ~>iR¹Sg3XWa÷Ä|q€lWêõïE~íÌ5—íÖÌË&Q\÷;Åà^¾¨“ÿúNw	Õô«¡Ä,›®ª(ªÂÕQåù­c²:_^‹b_/[Îòå:ÕmBòy#çA–^qÝv$bY¯|%OÌW˜9É’·a¸¬¿Ü­šUDbi&2`iˆó<PL$¹vžEêÑi6¡-4ö±…Äà1o}oóŒØò,1ÁŸâ'8Î)ÕÕ"ï}¬hÇ|Á­òËÔ­õtNÒpj ã6R­ìÀµw×ô/õX` Ì6IJ9èâz‚û¶	·'Ç÷u©ÃÏkZYZ°,·YuÚHëMo !Øn;pwÖN# Þº·	vrÁh@©öšb¸1¿lÔÛÕ3>GJ“ÕÇÍä*ŒQLv”7´óÆÞ‚É˜âÓuz*'ä.ý¤zÝì4²Õª%†~G'7ìŒ…›D·;sþðºsx  ;ªèÝ?¾RKÌòäkàþ}dæð!ß§Ø®WóI”F{è/vå+©/§û¬¥ÁþQnÖ– ±×ëÎË³íÝtmçï]Lóe`Øš^çrwk^4Ì›†óóBÙÝÕçÑHõƒhfˆ½}Àk±Ý5|Ÿ3sÝc•íÌ¶O‚R±£þÄ¼ï1S]O»ŽÀà\„F¾ÛU7ÊpÍKh·áp´ó„›\Wß¨‘—·Ö¬¼±¨€×å…6È‰pxHŠpWÄÎžš¬¦å“že$bÀÔºçðE	%÷ŸkKbVoEÂ/Í™W(n--SƒeÑ¯U?•bÒõ¢Yy1#"˜€§ gqÈh^©*¾€=ÏX--Ç9å¶ÇüêàÆcå(¹*€ËªçP¶iÆÁØ](@4û„¦u¥siwfwF¹-•,óCÒQÛŸ¦ÕÜFš6Z)ø||V(Ì¨6m5Ý2qPˆ³Ri!¥µp?&ºb×,ÈŒÊJ©qd˜{4DÅ"—›$R97¡RYÂ_úU4w7¢!ÿh‰¦Ái¸‹áã8&;õ!³7æ˜°nœ0FkÕ1öNšØºGn¥Y9²<Û¶Õ÷º€ßÚš|Ãó6óêC<½!bkóÝ(üŠMñ¼ßÜd^¯¹´É7t2¼nõ€¥}Z¨›("ÛRšR]žA\]ª­'²ƒ>WYâe…áUøK¡pœpiÁm‡HúW Yô¢çÍqë$Š³°nÉ70Ù~Ñyñv/îh
±!Úe¸âcÁ‰8é‚¬Eô©MqÂØ:Œ‘ØIŽ5lÕäÝ@È:¿árÀÃ„ž‘ø”µÏ(Ì@Ô|Ü(¢ZÇÇjh•:Ax%¶ô9«0c_±ÓÜ`Ï8d<žÞÛÀHé”á*e=¨_‰Ž£9÷'Îîp£Ê&ÏS¿1¾\Ž¹2r;Øî
Eø® ±–4ŽƒÏïý|ª¶ÜI¸XAF;¨¢—pLU"h˜[‡„$2Þu>²Î¯¦$\ìsl¦r6OÑÿlŠ1¬SFö£Äþæ%v–'•$+l±Ä=¼˜ZçF¹C±Æ¥H0g¬"t²šKL´ËôÜm‘·æ:ZÁÏ+[±Ì1£ØÌ‹¸rôcBxùø'Ÿøˆ2\=Vs«¬ñäép¶×ºÊ9h*³Þä†%ÅKy“ÂvŠ¼„Ô£=Òÿ,QP¡Û}ŠÕâí_cÞ¹?N²½­;_´ ƒ"Y6a ÈW®p#rj†+VùÔ4´=íÓ–žSñÁ«º—ñ	Ù\hÛq_²õ>xüÂoØwyºµ±ÜA¢ Ø¤fc) ]eh>2vÂãg¤ÖGA.!ðGûËâ~x©`˜)ìíkB«kDÝ„Æ×·VªaÿÇ:ÎÆ‹y'‘ëÝcë8lÐ•aE’t²Æ®ÄÂès¬Bn=´r¢£5Æ½aj Ï±¼òjÿäf÷Ý |Å©Ð£sõ(iv‰€aQÎ%ìÞs!Ï`
S˜{ŒÌ6a‰™$«ÖÈý…$wì08)j¸ð%nQß^þbU÷èæÙ-T†;¹¸€Kxµ›Ý8i	ï‡Ê~ŠS:Í„‘¬ï'a‰	®4>g²bÔpLÍ1n<Žp·-ƒôNƒ;¸!éðu×ø‡yÞiú‡Õl&Úä,P†>¥z.\ã^EÒØÎ@d9$]yYa¢0jó/gócÁØ”|BÓ6*ð²Ÿ1ÆÕÛÅ}þílìQz‡}'Ÿƒÿ×x<2iä´ 4ôfe7à¹†šf’x(GŸØ\»—ú^Õub 4Z[õåPÙ“Š¥dÒ-o›™ƒN¿.üCqgî¢‹‰´kRwF	~C“)½®½Z€¤3ø*dÙxÐÙé×KørŸ¥Ýý6âéïJírœœe™XáŸÔÎi69ï°Ö‰Y¸"‡gjx”Ç]vº-Ø™£ÄãßœA«ˆ¾ÓÂoõC¼fŽ«—Cú,tëÁÍE|M…±«nó–‡ø±¸s›jŸŸ5]’hßiµù=â’fqxÓº	ö Ë_Ä‰À³“(Fh…™¸QqŽx” Ä_íç‚#ÈÖ8tkAp†´·Näd”7»Ô‡2*€2WÑ¬nm5ÏÓ
brð%è_²swóñÕOÇ¥}[·^f_¿“m=Ï{Zn_”ål}–Œè-é€s€8GïïÙêƒ"Î¢pYœc\îÓïÉÔe2Ó"3F¡æö?2Vš±.ƒû‰‘ÎêhÍL›eYžD	h	*V×dX5¥¤èŽ`—¡œJ‡pSÃvm?d± ž	U@Ø¤p	7pÃ•˜œcBsãþ5@%Òwœ?6Š€¿Hº5Ž;N<¿•„³ý“ùÉGÜ@]
®Ô½TŽ‰&Ñ·}ã†FEÁâ™èÃìl#ôí¬”¤µ<äxå³ÍˆÁ|Ç­Ö7Øì<[[åsøç	ßÉóíñ#œRë@·Ù‡¬û&ÛzYt¸º4ñmÖH·%Y´!©ýí‡¢ŸA?aIQô •CïœPÃƒ³–­—×rÝ€EZ5^ :·1sD0G¡A&=ƒ‹›°&`T9Pù‡ÚXåÈ¡ÇnžqÖS*Â 2ukK0 EÙ´9­•Ûr4ÚðbqC"’vÌ. YF¿€³HJÐìûQF¤`çdÀÿŸ–DÊÑIF3Q…[†Æz÷n®#vªÆ6ø º¼
ê æ+"¦7I˜3iÂ}ÖI„r±Ñ}<¯y#
“áŒ¨vZlÉy5g­SÕnèZx„,ò¨¶¡Ã,9ä²}Yª®= /,¾XóÁa9¾•+¿(Iº„´ =úå¬G“yß[p)‡lÎ¡ìå°qE%sª…ÕGØ
ˆ¿Ôèž˜ÀN[´çpkRŒfJ½r†H^ÞXcyo¾s¬îù/žIÚ”P2ÎPm!AÈmä¢&Z±)š˜iž›©Ïçg0½¾È´Ã¨ßüjèÄoUæ–ár¼Ò˜mKrHðC™Ÿ2-õZãÃE¡nÕŸT«ôiZYÜðY0ß·6ÈA–Z»ÁÂC4šb”s¯w³»i±áµg›ñ ü¶G¶^ÇŽ­Lf.“8ßÎhS™zçQš¢îçyT`&üNèA 	ÈÆ@Î	ðÅoF'I1òPJÕ¸ÕJ—¾ì£¹ó"6š@à§ŠëB£Žîå—xº	Ç‚#Áßzªs‡ÍMÇ/¿S¤¹ÉõÜÜTÛV. ©—+6xN§Ê<‰Páx Rì>Û4âAE*bW‚·à²'T—¢c&áö-æ°8µÍHýi9«ŸQ½×IIÈâ°}X{ùe²^Ô¼¿ÚEø´§¿,ît×§¸õ–áƒ“’ç†õ‘Ð^wÆæ}ßvoÂ„ƒKt~‘¿ãÀ[;®\­Àý¤µ‰™áÁ„<£†ÜBRÿË~Eê­äŸT3EÊ?ÉO²_o¥ê*Ò³ Ë“ØSe7¬Ìw©ö{…p±©ƒÆýS GÝKXîÈP‰[Ç!*ˆÀÞç!1®x{—¥?8í
†þ_¡Dršë…AôäJo—ç›«¤ØæªEó±ï¿ßñ²öª…ûnê."!åÂïÿX;ò@ H Ssðò¨Ì)fcCÑ"£LØ#Jó¤ÍË_–kÝ@+:jM†aý¿ËÚOX»y_¦8ˆ09ú`Fvz„:r\·NØ;LRsCÕ6Çh\zg”›ÅØM
GPðñ‡ŽÄnšöâþ0Hù9d9ëŽÑÓÍîL[wâ³óbŽaGÂŸvá0MÈäCk‡»3¼Õ‰#õéwJ×ìé‘(£dgö¤äfDí@ÝÊS)UÁï…Rm›XÒê¬A‚¾Æy.¼¡>!š'ú¿w%âÈ§<«5¶Ñ6“ÐÇíî5¥aÕ;[€Ž”Ðý“	à°£úbùû¼
ˆÂòò ÔÎñ;SJ‹öZ°üÍ¶ù&£uëo UB½ù€áiŒôCŒ¼Íµ×cˆì![ß¾!ÀA•	œ›°ß‚-)|¸3ïá³¢^h•
 V÷¢j”¯•lä-@ÇmXBKËù[Ð	qRdô'tuCõŽNÄœ‚ÁWÙ_ß·/|5xS>½i“i•é¥&`@
ÂK
0+ ÁÂûpÐ>í¡xW0Ç¡Þü€Úß4™¤$Mî[P¹z:>.2­(ŽÏ25]œâ©¡¬!ðÜpÈ PGš"±ð!¯J´*.ZT%>V˜fˆåQ¿¾c†qÿ¯¶4˜çü×E~—æ¯RùŸªSâ J7íØqjwZMK"¶nÕv>]!û¡bIýêfºi¸HKŒ 5Âä˜ãL<çû3lÆá˜É½(¤±Iš}ÔøLd4ÀÊ¤np(æG‚ €X	)˜`‚öÉ™z-Àð¼pO àšçèÄm!(}JŸÞÞ®ëŠÍÆ5F³®åZ…—äG.œÐŽ÷‡Ÿýß¡†(œMe'þkÓõÁ3Å[] bÇ×Ú´6înüþÓH;!¯•ÃÜ}ëàb	,Ë&ØdoŒ‚Ø°UXŒñåéÑ<M9žç	W³iSÍ¢_‡§3mNg1ú.ØÞ&ÃB–Sâlª­isµ)®$g~UùZé%$“b"›!¼ÿð¿~ :ÌŽ~Ê†ÒÄâ‘“¹§Ÿf6mR[ZÖÍç/LÙ“õÈl1%È²þ>63cI^ÎeGŸHÔSC” ÂŒ…pý:„gÃŸŸb˜¨ ³0ä”Ýá1F8ñ))D²Š<Åã žÎæ“x1òFDú>70:šöÇô‹î¹«.–Î.ÈK˜W]—ÁáyU”Ù_6;ÿ©¾º!Aëw–—º-yªpËB-Ý½{o¦dš/É‰ âGÐ*VÌI–4ÄÆñ$á_ç•Bhºµ¬[%·ï®µ—ïý¾ßN<R€k?ÑB°pÔñ<†_˜5
EÌMü2„pÇÈ¯Ð\äG¼\G!í‰@ Â3ÝWô¶d<‰;ÿ«³5÷…»ºÜ   Ü0•)å}“ðèy“>j¤vö«Îì¤¬,aP$ (wÏ….W0Ã–9C5­€§5µ›:Ÿ–WªÅ6§SØQ$ÃýŸUU÷÷GóŸ5&ÆÃŽY•ªmß®Áx´ç¡¡Þ?*öCÃJ^Cër¬Ìkhqö	Íc°ã¿ûvôœ„M!ëÔ†Ug¯˜7¬<K‹ D  mqy,`´ñŠ•u•âEÁk‡6ž5²å~¹™¯6B•VS&Å%Žý³2 ÕÜ‰Úë¼ÙÙE±¯§…ñªõhKÌâùižwA¶ù3åí‡ÙÝ»ÕêêÕ³RF<ŽoÂá…ª]@	"Š‚(³½¬í•¶ ‚[Ü-¼ž69P¹i“:s%èà†¶¶#-n¥k·þLQéò;V.¶t®c~ëßÜQäÈùm_+ä»0tç’ïžbÅÏ–×¿r.›óZˆÂ„1+·Éô!/Aƒ¤%£âlWBØ‘‘ÐW£ôèŒ;ðxÖ[©ûßÚŸõ›ÔÎŸ­¶lÕ·ÿÓ¿h[Ñ¼·³:©ERÆ ªˆƒ¡<Ç€Ý#«sgñ·tÎx?óK¦ttþ´H2ýø\=û»‹ôžkzvÚûÛkô"Ù>ïÛÓ—rÜÎBÙiú?Ã[uxÖÝùòåðŽ[Ml±]A¥cNÛÉÞ™Lôxg9íŸ’ï3¶Q8»n÷Œ§ï—•»˜i%·ç|Mñxï¸ö!Oç¼šŸ£çäØ«½ƒþ"h¹âŸx·AöœgðšžñÜu]S3³Þož3²øç¿‹9óŽêO1i>”@‘íººGgg=çþð¢rØsÓEt¾ú&ºö~Õèþ_ï¬{{ˆ™Á÷%º}µáØÿâ`ø
•;ƒ~ûúKçu½ÝƒàùÝ£?ßç~÷ôÿt	ý€_œ÷îò“eÎ>wšùtº:³äVZ‚ê…8 }Ë§RV±d8d<b&@ÇAq¹.§˜Xkþ¶\™¥ëŒulŽ\iæâ´±¹.W¬Öx‡AD%>gæ1Ìa£Óê¬dêHv¥º’;R¥¨q&aŽô¶¤…¤Ú’lHM¶mRL.›Ó$£%Î¸'’XÁÄ1àÖmçSÊ~äB8„ ZÞx¶ñœ¬P#VÝpc‡¦ñÉ*RA¾©ÀâAUï¯]Ó/ì·ZÖ8'ZÉ»)ËÔ5ÅÄ4ç«uæ†M|qØˆ$óÌ/*ñÌ µìxJ=DRœ~9òâ/!à\° õ*;ÚuÎŽh¤"2¥É°G»ŽôG8 PyÃ AÅªu¸Gòygy¼í„3Ûv7ÍÁ¾'
éø7ÍyÚª•ýˆ½X•j[qéÆãëöŸ[QjÕ?ßÈü1AËÿ	‡¹@DAK…ƒm½m”TW±3ÕlgsTX9Q~('œ~!Ø|©Gh”2¡ D¥¾eNáä+îš@‚'°¬&¡÷žðÊOý}?BÚG@\‡€;ÀÁqr±:R£§•iÙXWht=·}«°ÚÛÌ,Í±[®c Ç¼¾›6úÇŽ5¢S§UV•$­_ŸTò¿s›/Y&O‘!âtÅûq9‡ïËŒ1âFÄôëQÖ!¤#Ú.”,ü#ôL%’×^`±ª©JôëQãL§œöƒ^:ÅœÞ¼7ËŸ(hß´ Š`ReàEñªøáWÝÄ@ðoéÌêÙkQ>ó\\•ƒè™{µPÛ&¨’í¢°kP–µÈs²25Z<£´@ÀãÙˆý~¼±¿ôÆ>'*RXžC/nÚñfE–ù\ZÆ~,aqéÁ<¯\ü¤pWÏ«¸^'ˆÉêóöƒ*ƒ
ÏÛïNà¬$PÄ&×¥;$!™}ìóüñU¾=‚úVýXÀ°÷èº;ájžœ¾œRDàoÊÃ¶U«V‡»#Éáeón2ãä8Œi=Ú&ÑŸ!Hb$hsö’œÒuÊ;’òtm×óÆ/¹Ê¼¯4eÄ5R"´ÄªÈ‡Äª[˜7V>ê3h!˜§wo-œ…¿-ºaz$™žÑaäñxë0~{²V°b×.B‰ëGGþ²¹«ëyÌ¬ÖÉÿ™6«#ß–§×¤¤-KOiÿ‡[EÂ}ŠÒ²5†lDõd…“£‡3cÐ¬ÃÉÏc„}<u”ÂÔEtX¶,úÇÀ<GuµZ[s/itT()räqæ•æ˜èã™ýæ7sº¥7§î+*¡bA¶£ayœŒ	Ã•€5¼Å‘îéõæŒF¼ì•/ÿV2gªóq4òjûpdb!Y^¥Ž9àöÅ#KN2¦ÉÏºê}þ¹úoJ}¿€é¡ÕÕ¡3Ã	Tà8ÑÿÃêÓÝ{÷‘Â ˆ­‡ï2¡zcònLHpÍÌŽmˆÏ9s~’‚¥Í¨“ÊW¬(OüöUF`FccØ]™©‡ôÌ0]¹bâû `mj×ÿ³[¥=tV«ÚýO»V•ŠÊ*xÀ+äÇM’¤lT‰òæú¸V”\•zÄŸþI»ÿÊo©¯O¸árm;$"ñÓ¶™ÓªÌÿ‡“ë~w-ßƒ-œ^òùòçKAH¿âß7­±>‚°'¶ºÁ*ä·Ï›ÔN."£W<6~'Üvxg¡Ç‚Ô ¥PG©ƒzu]ð1bˆQ²#™Ó5O8o6UCe{©ÏKy©y	ÒñØŠ‰Bú˜`¼p±©ðW¨*náŠñDí±ÂŸo¬®–°c!³Ðƒ?«£z!>Ûq/„RËse½X¦	˜²îýš…¹ÎšÛ–ëB@N#ÁTã Ä˜ó˜™Ñà¨ãu¼c‘<Ô3vn¨iþ\dM´7q‹Ïî`=·WÉ+Â4Ú™×Î×.…ÐFôBÁ§/Z–œTYÙ'õ’?5^¼B-ýYté–ÜxdÓò³„gxK­ZD)ƒíï$P©A4jÂ;íƒ)"3¸M Q¨>õ:ò»¿“JÍ¿}.\dQi€›¬õàWaš³*V™˜jƒ)ù­´ÿhªœ—gn[<ÓF!ž\zˆœu–üËÜ|–4QâÎºœgÏ‚gª(=¨Ýª;èN-›Õ“FÒX¸%N²ÍG¼»	†PÔ°Ë´¸àu	 ó‡êÁüïÎœQGž¨,rÀJü8LYÓ×g&+
ævl§RÇŽ÷Þ)£µÓ§ûû•Ð#ãñ€ÌiÙ»·eiEKKÅù¡÷ß*ääÉG¾LTóGòÕD£
—?•K
¿¾o_‹™õ›çÉzKx»½Õ«7eÇjjÌ>µFBRËbÇG»ë¥êÂÄÖ•Ñ†j{uE+!ã.ƒ˜ãvã@WdÌ}…×¬[¼TwI­»ÛË8m‰Ì,VÅ
Lbó¾y×ºñm¼Ïò8‘§ž[Ñùà[ä)¥G^3YÃÖ´$†01D²Ÿž“ñ
¨ˆèo9¨74]T!½;”ïôjoh²žÏê*%<}þ®‚_OdmÊžxiýòNt¸Ê”åËNÈl©U0¯Øz"+×+
R”òïÉsÎ1Úè#ô6Æ½M”Xùë–àÁª%3ÚgÄX-Ùxg\'dpÕ¯ÕO_¢ös4Ž¾ëÏj"‚“Vyh]Â£F˜
ú.üwA2¿”Vh÷\äšewŸ”C‚WžrÖ¿ÛÝ­·f·L·™—'À\Ê³A<«·×‰ìDÏ‹®>ÍßsÙpc€Ž¸˜Ó®Á¯j ByÊãŒŸ<ú
·b/óº/ÿêîÝKÛÕ~}ùUÏbZåÐÛ	<oéi\<öÈÇWÇÒ¸´áhW5;†yò|ÖÑœ£S¾;Í´+a6æ<j»ñWÁÞlüŽ¢¾»™H
ˆqH8!Ï³käè(%@Dq¥­ï¡÷À›EÝÝÄ@(boÞ¾Ý‘Hjï^Úv¶{x((bÁ”²‰:e€+ž),`¸w‡wïò"i¼TöƒTð«ÐIÜpô§?ré»Fÿ?mÏ€jN,0güö­_6ÕF2¿!~ùï8t0Óf+žeöd¦õ§f–ÕºçPóš¦¢ÓJëf~¶øEdÎ‰?ÝÿŸk 2Aæ†‘N «Ã.BQPÊz£å†U°©Ý%Ý©šè–‘Š"B¯Bòíµ¡{+)Ït5LL,o¸—\´¾úoºº—Ô ‡¢Äos(p1îª
›ãZ]T[ÃÖ“Í•Øƒ$Ûµ(“óËš¨5HK^°dþË»ëB Ù3%Ry8Äo„êU5äC:—b&Tx6P#	*ÂhŠ1/ÛðB¨ØÂ=2ÊÖ¨uÉ91òy1x©ÒŽXõ è Æ+A¬L‡Ì›ÖæVX7M³±V\nÐÃÙ;	Sm~¨_Rq/?obÂÕðL*)ØJço¥ä]ÛÍ“Ç>üØXß¸$çÉ”ˆ8·ˆ|†ËÎ«—þîãc	¯j4DŽ½¯¸^é«ºÍ…ÅNl@¸o·…nã¡uY$ê(U˜'ÓV”ó
ï:ÝY#”d	’aSœCœðð2BTc00sX?"DWèE^…`ü“G›šv!Wþ@Ó@~ªë8&îµ9}áÔþD* U$§¤(m~%8\/y‘¤¯V7mR	Ÿ›û·x?²Æ˜’JÆ3Y3Z/|¿ÍH#ABå‰°ãÍ¤ä\ÛL"º-t7,ÏZYd-oP/ì0®\Ù}gìþùv`ÿíô,õÓúÿ„ä öB‘ó–²\¨uH£¼Õ,Cö7÷78Ò.aI4÷}½½²¬¶ pé×ù©¯×Æ·nÓ>Ì¯É¬Éª1ÔÈÇõ‰P^oaI|HþˆˆbG»ÝÄ@Ôuî-e¿Šsånq;Exc†CŒ•ÊuÃ(nCNË(Œ™Xš°7¥'§ÇJçZÕ–Ž÷&äÖåïÝ¿>—åd¡®|ŽÿÃï”|ýÙ%ß­]X²ðª‹ö©§µmÛ/jÖsNÐòÜòO¾$“Ôi\T‰;l1"üZq7íÅ
žÖ»¥*“]‡ÞŽGñg ¿çÊ*©£	pRŽÉd³]1õðjLPª6>áÚ•²„´~½Dá+)ð‹¢æ$)•66‘»©vùXØ¸: ÕÚ¾äþÂ4eÝSM&
³ÛùÓjŒŸSb‹ÚØ¨îÙÝx–uëìXŸ¯=Ö(šTU_~yE¬Î”ŒV‹ûN}bŸkï·ÌJH‚K
lDsAÒŸó&(;3HêNòc¸ŸìrãÍS{hŒv‰ÞöŸ™àP‚X•ôGÓ4XT””•@ÅÕæ[6X|§>ðÜ®•‘ÅK–®QÝvï¢_Ü°a,'õ*|‘âª:Z°Æ³^œØê]§µÅ‹5øý´û¤§ŸD.Û-Ñ·»qœf€Ô¾ÈòŠ¯v~¹´|fOvK=!°»{ÊQ¸M[$Ë-Çà#Ëj–‘"Ô›ìÂ—ÞN^Î!¸ •DØü¢‚‹ù7´7ÀD¨GŒÑ”§ãÜ×¸Ô×F•^ÍæõØ…­|w±ÕÛw5ÍÁËêW/©„U[:ÒêV/`zŽ™T÷ÀhÊˆÐåZ‚½IÛ "ZUõ[o¤§B/í9	BJùÝ"ÀÒ0QãÌ ó"SaNÚ¤«LÝq˜aPêR0'Y%Oqµ£id€°Ô<`Åªt8©9ó/uõ*+²nïìüîmûnôv›ü9”çù7À´'?þxÂHÃ,º2ÊŸ0þû.mÌè—«:­Zó¯¾	ã­¡êw‡©ü)Ä±êCˆÕ5`Aö©H•?ËUŸŽ¦A]+Ç™´‹00*Ìp4„Ôw”[°&ezÔ§¬Y@Q^Ó‰|DžÚµ Ýð0v¡aÙ{D^ùžJúÈ>Ve{Ù¾â×v8÷†YÿÜêÖù[V¬xÖ©Yl¸Ä™b&zFNŠ7÷èa8”sÈÀØ¦vÃ!âu`#+nä’yùÝh
D4'Ì®©góÍj>aDÊˆc$ZbŒíWCôï#MMozáÐœˆÃéŸ=š:rèàiD×GºÌØph0m°H»ºkàï¿._Ö jàUÜ¤z÷ÕøCÝºŽ¸'vgüDÚ ¼K\O÷^q±¯Ë1Õ5Õí€$Ò–¬Ê´=‚U‚_'ƒ)‚Òò¡UMÄ”<s%'$ÍS!	[ÃèZŸúUÂ]åÎù‘š;[kUU®JNNÙUÛw¨£î\~þü†îö¦…§N?ð¯¨zq"õ±9³ÿŒ¶”~<{ó«ø–+!WZâ_mžýq©åt± xbc2ðÏ€XŸ2ÆÃžðç‘zBf$`Ø§#Š”ÌlwFF‰í¯(Öå¡‰ÊÅ[ïß£®—­2H†0âí‚*ð^Q;¦ú,¯:Š4ý73Wy"-ÑŸïOL;QÉÅÁz"Õx!ï‚1íi+§b;±¬rˆ«s£ÎK³<L	<ñï–	[Hln«f]êÜ¨ó;xv¿ÄÕÌëûö¶–.Ùc±®(¬éì|¶³³f~ÁrÈ±w+ß’&G
ÉP’*7‰Î:
!ÇY³¼@“·Kòze‹¸ÈŽ„iš¶æ:/¼È¿ñÚbë–;ÖÅ¯©Ó×Õ•Ÿîß¯ŽmjRm[ÝPÑïGŽe„Ê¦Œ»?þèO­GFFT‡¹/ÁYu®Ó	Np·9YæN'œÀA²?Šáfq8Fë³jÙ_\†¤«ìÕ¨«Âñ(³ù®Ug\Ï9üœF®þÀ—˜Ò…\áìAÁüò2óËñ9z'S™~ô_!Üü9ØÜÐ´bÓ·†t ¦„zÙ§ø,¾½° ÞH˜BñS•h¡H öÃ°(>øÂÉQcÊ”„#ádœM}JE±7ÞŽ@Ðò!ìÊyL•|¼èóG8ˆÁ ñ)pCWÚe$A©±†o¢Ë‚7kGGéƒŽ`°©	Â’uÔUxR˜/É´XQ¦ ü!‡2°t6·ì÷£‹[6	#ƒ‘ RtB;Ci¿$†…¢o
¥Åx¾º®„Ë‰¶Òê°ÀT[Ž¾W`º#*"÷MµèŠrt¬›'Â$} ’²ÈUÎÕÀ™RYUNœ†
EiË‡£0´¸t=YV´“b|Òª-Ï×qESMCè¡!\¹
ß<pB‰³+Ÿ*ä<ªPÜX„ÒXlCvÔu5¨ ¥47!V†È³½V7„ÉŠg	áÿ3([Ñ\ËE3Ä®!B~Æ{“¶¯ûT¤qe¨xeÖmðŸÑ³°aV]œÁdˆËÅ'8®ßƒÕß/fµMGS÷™n'¶Á@ÊH¾B[8þ]äÈKd”{É$\¶cˆB(ð¾Ðm„8é{AŸÚš6(vµ·mÕt´÷ð¸=óçëž‚[fÍrw†*W.¢îdFú6?èÔé¸œ¯e,…wlÈ";Ô‹ì8(/èµCÀ9DZz>Y>M€çUB¦õð¨ú/
ÏKgÓ×j?W^«ÎçÞ%°¢	$¿´ ‡h³­¾ÞYos$‘3´!	á*äåA(&84ƒ)3-²aÛ.ä0m3­›0œQš§W²&‡$X'pŠ†: æüþ	Eåöé±{0¡s“(™uÀÉB¸¾/Hn£Š_œ—-í*Í‰†b¶3(AÄñŠÑ­›õ`çÛ9„5™RÂ~„o3‡ €¦c7GyÂ[ŽÃ=I@áD0ºÌ“éœŸ5æÌ~¹ô{Ý¢ÛÀËA¨B¦õè8LëC(„‡óéHyžYÞ7PÂ{\`¢¿¯×cöË2P\´Åˆ§÷ûùÄ‰ôx^ÿ„ùŒ'5¦oÉn-üPCºUùé€FFè_×ZßŽÚå%ßTñ¹EEžÇj©õPàÑÿj•õx=^¢(
D
¬
& °~þ7&9Ü ø”NJ	÷ùsa¥$x85)U˜.|“</âhWp¤áƒÿòÉ6"H+¤~ÿü}÷g&³¤° «’ð„¢ H& A÷Ižç9	nË> Òt½€È’bUž€±®ãxB*"2ú*#,:X²X½ËÎžš‰³ÅËsÿâ¬_•\VW÷&›‡Œ§xþ½º¤Á‚	âý/®.I]™³Õu+».QÈj¿Õ³mE(ô/ktjÛO+ÊæŒ hÉ¤v­¼@›¼ñ¨Œ8$$(ö¢"BUÁÙ–óQÅGucKéB8¤èß¢KK{Pd8iós'smÕÜ˜¥­ÌþÔøƒ²‚$”üz}P•º¤…~:3¶Qi[Œò«âÐ‡ûtk7Vq}†¥%Ô„t›£FÄ.jˆâ¼.Léòí`+{Þ’¦%PÌ ¶ùÞºàç…ç
ñ=Áó×ä½È£%ÔzÎ‡gåãi»çí= r6Y®Hd{ë%ÿTdeKJî´
ËÍ9;NÎõ¢+š½ÈÝ[Ù+gÆ°€‰Œë¬ø Æ0Õ•)e–rTÞÿ1÷g„C
’aZ`~ZÎzA¿È6ÔPÙç™A:s
¿EG†ŽfP_˜Ç+.˜¯â«áÏ¹GÖ°•¾ç™_åü¦Æ5¿ d­
teõŠÑ²S´#Tè¨¦ÊW‹¥§ŸÖ¶o×¨úàW‹r'ŠÇ}žÁjž›=åãøxVûîßhŠkë33Qw5‹?
Gä™ˆ‰	¯®^˜vüÁÜÐ'L˜Ö%šóL|ðJ‹?Æ'ºùMâáO&Ržiª%
cßÌ…<¨`µêo8ƒ%
G„A!Hôc‹PT b_.~9‘éR³F²Ž.»²·bd[S>3Q•­<€*þh2¾ahhnêÙÑˆ+š…
l[±‰˜8UêzŽôß…1G‘'ôåÊbhWÅúö¯³‰7òøÌ¬zRB².2éé£UzÌ«)»Œöaî	 o6!„7Iž…ÈA)XÊ"áˆl—I·Ðxâ=DIªÚ€pN¤	ªA_Œ<¡ÂQ0â\ýKîÔŽžÆá‚„ü/!Éãçòpã)"t—
öÒä4¢.ÎAlG=-«˜öÚrýä¡ñÚ©A*Q@AØŸ/Æ¢M…¥üýkN³àµýÇž¿ÿ5  ›
]ŸIµPkâ¤¯™5ðŒ'ªýFxb;Â>;¢Ç–ë¾EWm¶R)ª¤€&‘|G¿ürDóÑ|XèçxØ–Ž^ºd¨Ã£M6!h§ø‰NN…ï”²§7}Z˜¦‰Y„Z=ML×IèørÐwÀÀ‚:Ë)k”P#e†{@*#RÃÜeßp¥Ð.°D úþÀöï­±r þfV#«&b`G íß:Wñ‹¦ïæ.#Bô£€ e'½3½·“jëÓÌ9ß~›PÛÔ„0¥R{Ú,âÙ>¬LQ &X?‹(‹bQÑºú ÁdÁ“0´'ë€–ËÜµáž€†+&)Z!Xð)K¾ø]l~±¹ØÖïÁ;C”Öm/¬Ld2.­U	x/®Ü2'µï¢§r(C0áì42AñQ4È#Ìél1Ú!JÐùý~HºA®KÆOÑÄ-á¿z‘1æÈ_«¥U°è1 $ÄAÃ Œ·êÖ»Ö°õ£ªÆP“UÓ}'ëhÎ!u(§°:¡;¡(¡+áÍbû
	@$x©Â,Ý^EJÈ×°N" DÃŒüYkÎÊ„™aˆ­ ¬¥ß¥‘ÕIÆíÆ¤Õ¢ËÐEdôv¥T— ü"&=¹•&ÓsJjVÍ“KP¿½<r‚õcÎËÈS—CÚ°ñ:”_ Y¶œ¨®°¾“ÀÈÙ„yâöä›rvîò3ÆÝª«çþšÙ(¥‰$Uò­ÌUj7BxGž¬ÀˆÐržƒfJ¬Å+ì–½ØýÄïžŠ¼Î24†Â¸f['ý7Š¿¼úy«SÓVç‘¼ªô´ª<Y†hˆ”b¢‚²ló7¦ü•SŠÙ ì¿õteqoë](¾î0†g+çÜ­‘/aN5™Ã'Ôß¨9yb]Üú·ÛíYÃÄ‰ËWxFt°ýaS_ìHFÆqPæS²©hakáŽ¹s“ÑdkÙ$Y¤7¾ñÔ>á-Âý¿.ógŠ;Ë¹×¤3Éb¤1jèm*qâgRd‘Ÿ$·ƒžn¡¡f\8›Åf­w‚Ý”“dÒ¢DV4ÊÉfôŽÏ'„ÿ½6GÎ6½F£{Ù¬µÏîáÇ{=ìú7?q&2)u'‹: ²þ&+[ÂfI˜DÈžQí.Ì…þ!b¢¤¯:‰Ïµésè˜ûÓ%1»Î<ˆ/äµFb¥˜\¥–¤TêûKH¢F&V)›äÇö“0žcËM4weå¹Â"…9òµ“"Qh8\—ókÅÈD/ÛT™EïüÆº¤<WsÄX*žbùÈ§Þ6TúÚ*^ú#,äêÈÜêíÜË3ÄeÔ*Ìˆîåä¼ï}ô‹]øE†LÊ}Í^_Ò(1K9ÁNÃK> Ù•z¶…Ùr¼¬¿8{µößùÀHw0ÂŸWÚâ.ußÎ‰ñY·ü i-­Tìã+âÿeÇ6´Kû_€±åÎ¤rÝíQIëëD¦¬ÛRº¿+†x¯ç½ÎºrMê7¢²ÆVLôÎœ¤úlñÊ(AôzP«…0á®ÉàÍ?Bâ£ÜBÑÇ@û(ŠPè!}‹X¤ Ÿ°Åäw§æoX\è«‘èý¼`ÃÍÔÍ+Ç¹}³D:¤t]N„Œukiú r·øDè7†nä·•‡&¥… ^äÐþiwd}¸dào+ýB{ÝõQÚX×±ˆDÌÙ[öªYCC`$Ë”	ƒGªú³Ž¾Ç³Oö½ª/¤ÁK/
¼­EØÂ~†U„UŽÐ…Y1`AºÓ45¤zì(Á<ÿ~3!x
9å)ò!÷TGÚ¬»<§éë¸õÛð­Àõ±—Pí<D‹*V¼kšKeC0Ç÷)×ZeÁ°“­›ŸŒçÕÆžÎZëknœ0–ý‡ÅÍï~è°Cùýƒ~ÿŠÎ´UUjÚ»ïtu½ó®¦VUbb
ˆn™1±+*¹íÐ¶(	M@1AšÖd¢ß8oaãüÂµ{D¿³pCA%ÄcW
ž)ëš2ëfCŽ¬Êe­'¥ÔŽú‚ÂzXjD¶„PÈ¢’¼a2s‹í#«ˆPHîi…1Õõ|žþï
žRBïÇÜs§v½ðRUÌ,‰'òMU!Fâ+xÏAÖ+ñ
«ÜÇRÁ+«ˆé]–Ð§»„hmy±h­Ç,~´‘ÅbÔY‰õ£Ñ×?:³g›–aà†4‰®‘sÞf[:¨¤„XñHZáÂÂœA<#¡ÌiŒ‹ßh‹¶8ÈíæLV¼I+x§Y~Åûâ¯7Òšš,cÚ74áOq­!ù§Ž›ƒÀûçŸ²y;™N¯íTþÃKžíŒOý&/õ‰Ù½å•±-JkDÂc7§~øq²uŒ|ÅNJÐd	-çý	SÐØ"ÊaÅ˜áŸ Í'X²q‡H%!Í<	Bõ¼œ`‚Øß-l¬.võ¡C>v©ê8r5¤xï‘ŠWçíRçó¾jU„”áõà šÊ‹Ž(
ðì’3!1¦na,ý¶¡°;2*zŒÄ«ã¥ >ˆÕÀ”w Ba/P1,Œq|nz‚è£yþ‚K)w¨²7Ã0`Põ` É(„ðŠz¦óé'*°WW»1W(a·|Óö( óK^Å£öó¨Ÿ.	’wOL½6’iK+;¬xÊüðÙ«å'£„ó Cõ­ˆs&œ;m¨ÇžGàÕ“8ôªírrYSCÁŠi‹g>ómÂüo/­À–/¹qßÙäyŸŸÿØ–¿¨ýM-Þüœæú6=2ôh¶âžÅ…Y›ÛO&t®bŸ8p²ÝüqV!NŸ­G({¶Ê£-w~)9û7þŽ”'Ç¤W´ày©@ûžøƒ†-?3W—ö˜‡ßèêòŽ`Xª?…Ó%/¯w,ÓŽi‹#€ƒ|€xô‰0(9<\"¾?yV4ªÍ-OpnÈ±à=ÝHÂ×'û$®	Sr…ä¦á$UÇ>’£]zˆ²hoFðFxÙÃdX·×Z&ŒUtøvxM:r!8­×D¶—e/°c“vjæVŽÌ#;â¨¯Ì`HiŸtŽ;‹¼õY6³»£%þù†ª:©AÊ©ò¹ dÕÚ<£æÍ$(ZêÙßÆgÑ?gÖ-º´¼úm‹úOŸ®«×ÝKÿ+‰loÿWo¤ž«‹ÔÛ#aL£èlqÅ¥à¤<+‹’µrˆ³´KÇÍ9®ûûí{T·â2Z|Q)Sí…qPQ{eÖ°k‰Ýf¡]nò¢ü¢ù6 ³Æ¨Î††åé»ÙW!†¿àŠ¯ÐòYn‹ÜTÄóÝ	ÝkÖ’(QÊó<1µk5µ‡W“h¦_µfÍjÞVEµYúuhƒù>dƒmDSDe¯Hb%K½Q,Q¿OÑì¿¼?ÔþÜî1:h.$;oCÍ];v4!ùhƒâDÊéªaD§Õ&<ß[YI©hnØžn0ÿ?k'Q¢wÎ8pÛ":*8½&yeøÙE(ëÅææ•BsÁË )"‹Ì%,†²ÐûoÅñ ò*¬lÏµò¾Ÿ¡Q·ÕÐˆ7¼Z¼§¹9\‹×£
Â“Óþ"Èêø~ :…Øg\ŽFßäðÑ@ægmC›­¼+À)$`ì÷¤âexÚðw-9•¿è=4òWh¡6s·üž_+8”Vp½M+ÈK(íOÚ
y­.Ôé×·¬MiûfžzoâJ(;Â3dÓk€X­( É/®#¶Šææ}BsÅâóXšÁd€§%1ì×½šCD¤»½˜óû@€ÎÞÉW”,àí€Ve¬Vpj9e+fŒ¨®£PªŸa»\€¤ÌSe=æjy\—'” ”o!ÌS˜+¼Ú•ÐÊÎ†Gøu×ZáuˆwÚÅ\@9¼xÇ'¼VwMÆ†ûØf:•/]^"ý©XZñŽäOÒ’cŽœ¸b¢ØE>Ã"]íµn­8¢wWóu%PÊr—èÖAë¤gŠ-÷qëã…ACîêQ´ µ‡…ëO4‡ÉJnl$žEÕ…‹µílððyÀž<€ÃÜt¯¯ŸG°ÇÉÐÌMšå±,Ë4r±Â¸hÅ'K˜X]l´Â":VwþPoH,OëŠ„‰o	Ò¸ìùó.‚¥	žãS¯ž”›Sk™ŒìÓ)Áå»¢ŠmìÞ¼rá¯ÜÏJù¬èä¢ÔxÅ²ÖðÊmË"´ß¿³¼®|(ùð°ƒßíû¾ÇŸ–×¬ÿÎøtuÇúŽŽý„;¦ð±Ï4ÜóÔ­ãÖ§”âµÀœWg/ÇÖ{„žê—ý¸ã¼|öÓËÍËn‹«Ã‰8ž©:§°[y#yfÊ¸T•§àÖ¸5ÓÕÿÆ\äÌû¢’U/åFs~<xœ[ÍYãÖ£Å}ÿÎ	îñÈ˜šÛò}½ hßˆ:§j*QJÞóŠJîr+n`>^Xï¬ïYÏ†'.£ÐHvÄ½+~ú‡L<è³…¬”¦¼ç`Rê«=·ÁZ3Ûfë\ÿþª!ï¤iÞaŠ¨¨pI@ê¥ÃÖRVÛü¨h™Œâ€UáË2æ—úWÅ.()]à¥–òüŠ/­ök»Ýž“Íöûè„0Ž–Ë
äÕ
´RZyÉT@qÛé ©ñ­>Ì¤@aÑñSq¨:ûXšÍõe“81¥ð·×5VÖ‰b_À­û‚)¿Lô•]X±áø>Õ[A~‹æä|¯ÃÄïÞ€Ð’…VŽl³FÅ?&ü‚"0îÈÆ)âÎ~Ð<Óù`í5]€YÅþtÿ Ï¥)ÙÒúèª{ÛQŠ—d±‡ôö|Ovâš`NÙxœWÏ÷dfIãPrp‘Îª-¬é•,438%É¿}<&éÕÀo˜$NÃ±…Iâä¯³óKjár‡@sÑ¸^¹ž"F$á:Ö¤l‹ ÁÅ@Có|±áÏäSµù‘Ê’Š„¤Èu„±v‚«ˆvÚ-!à¼iŒ¢ ,Ä;t È«xyOeåf€êüê ®žá4§ÏrÍ?ãyÉÎ•Ek;7==l\»j~BÊAóÁ¬·ƒ%V¶<i¹¾ÂrJ›ë`ÁšëD3^æ0'>1aÉ0›m™Ø¬L0‡ƒLÈþÇU‚&À¨%Æ£Çæz·ø’7_‹/¸N´t'âåñþå’Ï.ÍÞ³ ½¿Øßh;÷[ÊÚöèOj”4 k*XÝVìØÖÞ…ƒ|„×…~¶9A-•ÂIÄbôIõKí)ƒ–Ï¢JúÃÂ^Ùçì!5lÃ&mMÆ¼‘fV	%!e*&Â·Fækød
oà³NQà)¯øÃ7°,²(zƒhÕÙÑ*g{¬Ú®ÝÈŽ”õ¡ç@›Ãò­zÔ²%¨?7Ø\h¤PãcÈŒ½WÝÕ¦¦‡Zk.¿7@bSï´ô‘ô4ÅØrgHo‹K÷;D…»Vèî´ê.–fQßƒû–/(í_¯ò;Û i„o_b7ZÐÏ¸ÐìUC…Ì!ìÿ´ð=ZV†¤M)>UU}”‘;IcÜ:ËÅ¸!ddŒŽú|M¢¥,ÈD	M•ÊžÐzíOÁêV[õºsã?^'B
#€@˜°_=
î\à*ÃÑ%·Ê¶®KŸC‚]9±LìJg®x¿|‹uU$ß=¸¹Z^Ù%"gËS}¥âÌ¬îèÜ¬dGZã9Y6¥Ö¤4ÝøÏÍ%n¬˜ÿ]"D‹ìü˜çÔzI¾MÜ fµò„5l½kÕ­Ó*+µªÊgMù››”]ŠÉù94åÃNi¶ÛÁÂ?À~Ï,	ÃÀ•Ã·C!9ü¦MêîÝ¹d_ÜìÑQ°zÑk§O»\š†Œé‚Wvr°€6²
îúú 8m˜„rÂ/ãˆÜüv±ai¤âBÅx…¿"m¨Mk»Þ6ÙæX÷Å$:Ê~ËÆÇ÷2‰·u+¶OÂÙßU¨sæ¹ôGü5AÎÑ5Ì:ÊÔöd"S›ò«†]Ü‹Á¢æÌ—¥³(˜¶:ïçZŒÊž~'o5(†ÌíÓ×Õ¥rÈ°SóßÃ²YX2¤íû1™O™ND"[ÞVç=1‹÷ý‘Nm­—s
Çµtþº¦3^X_ß!x!áÃoXp`gÛÎºÂ½âZqoVÉà*_yø­Ñµ¶Z7©WÍÌz$z;ÇÕ"@.‚šïåËãäY#›³î|½¬¢/F8ÂÝ8¨ÌZ§^Pð©+MÕ¢ŠK+¿¡ÚOÞ²	×­o¯cþ‡±¤Ï@*;+{sík<á.“õßÊ{½þHÏÚ€'àYûÜŽ“Ç÷ ™sÏ>§66¹WJò$â,ÕÞóó1ï°µ¶zž;óê¯~uóecøñ;	ÚÙÚt?qµ—f0"·¤'ƒì…`ÔFXöpëLd5Ÿ mfF#¸¨Ë²†(ÒöAL›M}ž‚§Ôû­q™î€({çÄìÅŠ'&Æï”àÅfÄ³rÙ†l%;+;Ê5'ñŠ$DQ;wþû®^ºH!DCpÏ©Îß•<Í÷e1eÅ2ÿ[ºô8¶\˜f8˜Ê„nq@z‰Æ3œ˜§ãD*vOÙ«NAeÚø…X/#	$’˜w«˜˜zñ?Q‹Mrµ‚˜{B	½fVaP²ð;Ë2ÃáLFgâS˜}Û]fæ?¼ˆÞ´?Pœ©èŸy[àpÏ×²z°lDS–qùå,bŒÝ%æ–†“®úí”ØS!2~x¼4÷tDu,5ºv.frÒ'»`*f)Í‰¶×<\užà:Ÿ2–5ƒJý¶]tö•†Óx;ºÐ
„üËëžæz†ØüLõrj—Ó£åé¢aO	ƒMA„õœÕe»s²©H—¡“í=ÎžéM®Ç.Ï²cºš\Ë+FªF±õÀ0•”Ì§äµ"¢õ`0
·Â%c}ªß©àÏqŒB0Ge>Ú½ã9ã^¯Žãî8Õ0éLs'µL°«°Ía8…( i	± enx}Ç¢x51$UI[òµjEþô6ów|`é$3t…=Ñˆ&ŽÒ9xÐ©|ëOrB”‘'îÎ3Û_Ð„’?Üùè£ßÆÎ¸"=Œ†™AýW­­ƒ5ƒ^OMV^T’ÿõ´¿b³µ7t8'í¼tÊ¥äo?÷8ŠƒåÚ°‚m)paeMý<Sæ·¢9g.v0òúÁÏ5¢›â«šº>hŒT5‚Pÿuý÷÷þ1ìTÆ¢®üúõÁìˆ¨Æ{[õdøˆ•0(f8Émhš¬¹Ôlïýá÷‹ÏÕì•‚;lé_…-îS;l/¼0ÐOú»Ståû°/ŽW!,ü‘­7WÍØzÃ*UšÓ-KÚ5x$
±ó4GÈGB	)46Š‚Q4ªXÀèFÍ7"gÐ#-½ÐZPÞk$°µB”ùJúGÕå§eœ:á´<jœé†A~:!—NlSN”ÌB’ð+287«W¹g®XûÞ‚l´qAy?~”rÉ„eN~~c¦ÜÈúõÅá¨;ƒ—ÆZÑÿ`!"!2š™),ÌÈ˜‘;£!M.wÆìsÂ³¶m›Eo%ŠK¢#Q¿iYS†žÿÇ·%u—\hûô³{ˆ³m÷>V$ªñÔ­Æ¸í}¨W÷14=ÝÔ±S˜h´ôb’e/v5'¿^Ëº{]CÙÐØ8qÙZGÿ×ä§A}fF®}â\ç\uðÞa¬”''˜åÆR¸a9Ãà}À›Íè’‚ö7\,sË
Rïö8×;å˜Úž·L{8Pá!˜@‰4]ã „¨or“3¨’éí.ÞÍÌé{¢0(ë˜vT×.õDæ)¯*|¼¬Ð@ñ@X4Ôø›t8°Z½ŸoC¦‘ï—¸
«ÅÜw]Øé‘Ï¯e¢*ÎáåQƒÑÌÚº,ð²€šågNç
›×Ç·‚ïÛ0‚‹t¤ƒv±.ºƒ•¢„i‹ØÆYÔFO”\ì‚¶cˆV§
ÔáÏÖàëLCê×ÆG’ùu„<6º«…C®fÃksórQÎEŸ£@¯¹ôS^°Äj:rÞ;²_`ë«Wì
uË_Æ¸µ¢¹¹bIýªæªÔÕyÐÐ“ê€Š~€ä­N5g­ž)˜ÄÁõú¾
kfMñSVw8vîŠbfãJfß\þñKyž'Ë*£Kbr¬°çLk«ærn'nÉÛÞ²=ïo-`®<ÈuyžSŸ÷l† qˆ³ó•++×Å×ð)Â}@W‚ÜžFGÌiaøõ•b3j–²×§eÆÒ#™ù,<ÅR|Žéåv·´ìÛÛÚìÇþVÙ²`H ¶WT{ne$+¢œ×ŸsAU’èÔ4HŸì„~r4ßÐ[A34³³KSÙsúó â!Qo%QgøÄ˜òö:RGâ3×(ƒ:"WJû»üŒ}×yþË/5Ý÷÷khï(’¥J^†íÑ`f>Mù­8‰"â8{C›ð8¤œñ‹ÅõÝj=¨"BÈŽ‹b#\¬CB“¼m\’¦ëÛá¤Ð¦åe>¿¬zº+¨áa‡ƒ+ìëñ¾õÓ5µe"Ó	5i0sãóÕªñ¥Åo~ð«§æw]I OeàN?Û «œÐÚÂp•¢=dºmw!ÔüûÃXÐQŠúÆNª˜A2ø‚–/1W—[àÿ©#Ÿ\ÇOõà_;w	rœ¼3fXõ+Â¤‹AŒkr2üPž§çD*ÂÅH*õp–v([Æ\L©©v$¡9VòXâÃáð‹Ü¯¹â~ßÜÀžV¼ÂðæíÒÂ¥ð$Éð?öXuu÷äæÍ‘ÚÞFÝEEkp·héîÈÅŒÂ°ŽjvÔÎRV1¹…õ¾?àñ*Täûq/@"—µ¾?—ð1›Z¨´ÿåâkûôU0êÝ$£¥Ã„bÂ½É‹€±À–‚KÅíùù³SUãõ¾7£CbíÞ‰±;q3Ž%îÀ'’Ö]a¿?m2zåšb-Ç”„7–5¤ÒäÓÝ6:Wÿ#1ÐÄPƒÃ ÅÐ¢"bÄDžgFgÔz–­,,hZ6`Š/ø"[™ç™&Bžª©y›Ó'QW™­ŒÝõËãŽƒ÷I+-Wõ‹UÖÕÞ.Ë!ùF{1Ýwl8)úŽJ‹væD$6LçóØçGíh;ã‘µòôÙ#¤#¥¸ÖYÕé5éóG<ÍdVëáxšS]Ñ¨Rûû¬ðûgˆJcWÆJïÝgypêÜz¨US&µÜËTëž6Ï!ÎÀŠAI
ÍÛy×"‰,háQW¼„
PT
RÏ8‘šÍ=½app#jìéi$¨»†!ë×FbG²(Ðœãã 8â˜§ûáQ0y~zDtK´~¾Úá“-“/ÄlÀ†Ñ»4ÓÝeg*IÇOáÙ¼ŠûZP×Ú¢˜£bªV:už‰ÍGŽƒÍÇßuÄ…ü&:>]½,žU‘þ„hdÄE‡]¿ú(S)6ÝD%¦¥d-L5Ée*R°ŠŸÑÊD¶öõõ(ãöVUùÝ¨v]ÜrÏÿÞóü§™YjÇü‡~¤¯Úu¾rsF
žà %ÂÃ8‚3ù×iäüŠì:×DL~EqÅÌÎ®õì9wè©M‚c'T¬7¬ê0V›–[×Iì~²E^l+TšL—PÑZ˜_‡yeÙßÕ-žŒ¹!0Õìi×›ì/0Ëmiû#¨$hï?H$œ]F?ÄÞû"(läñpÞ_ˆåcd¹\R‘\axsUYÞgŸo,=)ìtn5ÓÞÄÉÄ‘þq»CŠù5:ß5„øM­ ‹4BºÚÿ¾¾[cÔP­ˆÅÔ¾#î!^G’ìíª‚)ßöâ²ea^qa½GA2ï×ƒFv’æŠª„Ñ„>§“¹…ïó(‚F³“ X„u;ù¯ÉÃ"ç¶q
g;]öH¬wQBîÁE;÷±}¢±§ÚÇžå®Ÿ¥nß¢TÕ©êÓnCGbG‡Ú¸â™R××Ta
À¢ä¾÷–ÑÆ²žDctÍãŒA9ý÷3Î§&‡Cê­wô_÷CCŸ,ÃŽ:Z¸"¶çzþ¤AŽaE"‚wÆ1ÙîùÃ_ÐÔ]û’…
¦M¥Þ¸þ?½»Hˆp<2ûk¡éÂ(«{ìçžÆ G¸:Õ\„Š} ºÚ¸aN@£p§eéœ>ó¦ccü¤ZÁÖ%¤ÑËþuŽœtŽŒï¨aŽYMe‚5ÄæÄß1s`Ïìÿ»“©®_ï;Ù³ÏòÉÈT«ßŽ^¹b;éˆ¨°¡³cÑe•îÇ?j«–Õ„s&.¬e4‹Y×Í¨ÎrLuS ¹ß'p¢ÃSEª[~É5<œò5Ñ½à¹ÓÝý¯€Š]Îg÷Œ®&»g§%œ,€^>ød+£(ôš¡'©—ÐP‚W³]É5ÛMd"×äQô®Ú4gÁÒ—] XL<•]ž yœ´ß+ùqËœÞ^÷ªU//úØ3µtüÂ¸pA˜³ó»–÷ÊÔš%éiý¥ýié`‹¹:çìLlÕ3¤ƒ'²¬Uñ¤|Y©ƒÔÿR«µ·u×¬(¯†ÈÒyû´sWy(LÄ”IfkÚxöøµ¥%kÊ<Î%a„<$ƒ)ß¨êÿYlJÊ ÝÝŽ
G·ój„Š±'Wˆ1ÂAcÅ¤K«Œ_,µ)6ë‰Žß-©¶9	Ø–´sàállË²â¹9šdÅ–Ôî¼=©»;)¹Ï'ûGµ—úPëÜKq„£övjo­x÷‹˜ääè‡©LÍd'q×®GÐæêdêÖÈŽ%>dÊ§¹‘ö´®3Hÿ°KídnÙ5jt^ù–©º÷;HR,¡!‹2E·•í·²`‹K|ïÝ?²ž„ˆR±Ï"eÛ­¼ðOÄ'Þuå£UÍ¥UÉnRxÎ EäÏâ‹'âÆßk«ì3mƒ¿·6÷L[o„¼[òÄ¼²ÒºÁøŸ,=d†ævE¢	¡%‚h")Aì¶w˜_Hm‘Ú
<[£|–Î)ynôïªÓDÿ1bW‘¼°„„cª¤¹S2ïOYSÖ7O™¢3|sLk^‰5±o\ÝT0ZÚq{ž¹4TjNåñüYTð¡ÝÚ[˜‡œw­•„H-ÐyÚl<@¤õ}%.,Ñê8uËÄ	œéVÝŸ)O-%•ó-„+)»àaÞHÞÑe.È[ÛÎÐè«¶öÊKé‰qíÆªm¥äLü}Žg"Œ7ˆÀ‡Vã)ˆîêª6TRR${ãd?ö¶¤0iñ¬äzÁÓ4? U=¨(–+Ìf‹Ü_†È3õr¤Ï*§šM{°²ð¾29K¾³L~T˜³žý){>:­3uÃo9½–êòO:óÌÅí-»Eg\œ|UZé€½GY_
$´:G	qÎÐ4ã ³f´"+k]°¼N+õÓ]ÔË[d´-$V„Tk—S¾GäÖ5€QúæêÛYoK[—¾ˆ7§Æ®¹";
OÂï
'{º7ŽÌ7ÒDÐF(‰5øöÏ(sœ9Æœ`‚O¾^ækâ¯ÇÜÛaitôAãµ8Ê¶iï;x‘-Ú$ÝÐâsh3å#Bôhaà·”êú7îâ$la2’…4å€m\¨¸2#i6]OL¦N’7ufÞ?º}½É1SPüZ_ð2.T¼\dØ&¡BÊ£Cr%£™Ð‡»ÃVSFgW¥ý,—Ý’ú²Ÿr”1D ŠPÈ¥Jhæ?Ùu©<sZ!ˆ-è`ìBóî»ÙBî]Ì5÷‰ëÃ,¼lÁûð'^çqöiQÃž:*Ã=åÎSCyè±WÑ	H0hÎG¿Èwz£Øëÿ=¡e¶9Ç?¨Éä%AhæM'5ÏîwšË¡Œ¸ø,}^oN÷|sqoÃ¡È$(Êãrl½Y¾£äv$UîŽ¸Œ\+ý¦úNÈµ_|!®ŽYFý±47W&5»gd6šZ©|³ýÀ’‹m¯¡o+ó]ÂßÎùó»•ÿ?¬àÓç¶ØœÎ´4‚·ocšW`±eýÓÄ©áûóÌ—/-qQÛRSå¢“8ebmÖtÅ‹f³gØìg£Í[ûêÁßDâ3€•çûS¨>E¢d*/sHqÀ®w‹ãòSI	­‡m(„¼¤*ïD8´|rÌR¬œúª+ÏÉØ’=+ÈßK$¶LòÓÑjévÂ-"!J`Þ‘‹ônÑã±00»³sj©'‘%UÕž~ª[ü/²eÚ¯!'§qß#wzª½‰ìíðìa«ªÙµ¿±Ýï±àDX¦òôù~÷
é-Š	s‚Üã‡=2
(èCé‘0þ¤àU.Ÿ{ ãÅ¹åø¸jŽ-òñ@åÿÛ“¥Ýù*ã«;Z–òWøBuÎèmmï½WÑ” éÉ“£×­Ñ×¬YÙëméÚô5 çÌ°0¸•¿f2š'¤wÙß1ðÚÙ{æ¡;	9ï˜ò)Ô¸ªè	:p	ZT<ÍÔÍavø0zhqÐq×þ6âÒÅ§À¶XË¼ÿ)EPhF
3~Åç%×©*¢µëëäEþŠ XqågØ~ÓXÏë<2/­•‚R‘ëHö.’Cà"S ¯x¹oB’íÝS¢Ú¦æË¯šb× ÓgžTTkM¿£ûþ;--/<¤É°•¥,§XÁ5/BÜ
‰ÒÜæÏÐŸb¼Y2|<¸¥±èý÷‹`ò·œèè'¸xâ‡Ô1É« W„å®o1"„	dHñøÅ¤0¶"H&Üi-í>¬I‹Å7¤1ª),ÐQ9Åž†Y"y%ñ.òÞ°ð÷|Uø|šUžš_]¡‹÷,ýÔœ¿¼W•/AùPG@Ç\$ùU÷^BµùQÜ*ëWsü_øósÒ§‘¥þ+ß'›ÆŒDw%¯¸ØW#WLÊÜüáìšwygÔÙ=
³ŽÛšgšm+ÂHò;ÐˆËEÌ>lÃÌ¯½cø¢ë(ÍŽ×Œ1¤ê±C· „Ìÿ9Ï‹yÙkjŒv.ÄózÐ_dyJ"å&Ã ¥À²HH:uËÁ Oéj]AY
ôÉ†}'¶äòIËL/¯*3H}¨ÂúÀµÄOù¹»¹F§ŽæE(¡EÃÉ‘i’åé³eòGn»[åmÌ13Œæ/Ù6§õ§Ê˜‡§Nöì8%³7f®`»oŒ/­hö5Ë^*ÊbXµŠk+E?7àòœ_Tðiq©._€ç‡‘)âm§òu@’X1`/¡Æ¥¾„Ô˜\Ò}U)Ó‘›%·MÿLÛåßoµ§¹
q</Ã†"Æ…u° XA™Je~†­µ•ØPˆÊÍ}ïoèµ9s2UJsÖBK–€åW/¡‹’'ÿD$åÚiÿO¦9OgW0ÝfU©«²A›º«§M;eÅ«ÇÐˆÅ…¯:3^2;uNÐ=ïšûÚ¼îÈ…=¼¡»ÏÌ¿Û.lºº[pî=ÓI¦¯Ë»yÓ#þ¼„,k¶J£"'2ð×àWÁ:š—É:r§öÈP† ÙûEÎ÷WvZ"¸Z7Á,9þ*nðoÿ‚7õ½I
ëWÛ’˜áÞÖöJ”O£B?{nàWüDd¤dáÙQHÁ¼´å·…ç<á¤p·Ò ¸4›‚(˜"è/f#Üp\†KÆZÚN“bC»0íãúž½ÚãùIÐE‡;ÙëkžWÔ£íA¯$'½ rGÈ„¤Ì|Bðõ¤ŒP‘_¿]C×ƒûã™e4îÑ¬Ýj‹ý8ç| LÉÊE^@ªƒÈ@˜á»u?$Rh(’¸¸owŠØL
ªó¡ûÐIõ:‘Y”²ûtIBX}BømB>P}ûc¤`0uöìT†ê/·|÷…ª)ŸsÊûÈTÿQåÏ©-ùk{NÊ$OØ*¤¸ChÒ}bÀ›}.¯¨…RN;§å'/]MbqOW¥÷^ßÒ
9Åâr» éÚ…#†g5¼Ë%ÆÝÁeÛÒâÊ‹,èoð'N{4iªNµ*õYyŠ>‡É7L-ÃÓT9ñ'·÷Ï Ÿ”uÍ®—yÂ÷´uÍ0Y—-3YÆç»ˆÔŠ.–$/æ5„J¸Dø¢ÕBqOZmÂûï;¼×ÏùéI(ŒXQ1LšµážùYKûzVK‹W–
EQñE…íEEí…EñpÔçø´#yäù'ýÇÌKYhvÌsÁ÷]2†•!ëòç˜×Ä ÙY—hJZÈéƒßŠ)IEe(.¸1l…©‰4jÙŸ
R¢¿í©‚¿(•×‡E%ƒÎ¡¢Óþòûá[Û›Ê/K}Ó$EžÊð‡%¿Åbé}O’£-ðÀG]Eô¢®¤ªÊª*ÜîÝT	«íºÊqj—4(ä ˆ¨zfnD.^0IN¹ÝcÓu[—7Ã© VUì|ÔG¯](m? lø‹SÌ@Ñ‹‚ð”ãÊe“IÉúóÃëê4ÝkQ®ùÊXüèÛÌÁ©‹”ì²´œ×†ÛN`EQ0‘0…Õuc²M¢ÔÀOÁIÖš'«Æ¥ylá+úþçhrC‰Zs1¨ŸÌ¥»Ì©ÜRhNže4xW¹Ó™O%Ót®/}h¨'¿pj©^ê_L†8œ'¸Ö¬2”¼gÁiãK/ñ²à,FN§|þ%¼ÜMº=‹ó%¾øð»3j_vQ²g.ZùöAeÏŽö“ÖUA^¾³Ê¡Ù:1w¤kdß¸6ù^Î{“¥§X‰‘X"€PèÄKœ+ÕN^»24ºÍÌ3Ÿ( ÄjÂæO`pLã"ð¨Bç.Í´‚]J°ö¦„ïµK˜`Uš†Ð óD1j
­vù6‘Ò|ÚÒÐ¢Gûºíëº£Æ™¿ð?Rõ,Ë°ÏÚ>ˆ˜¿³wW?Õ2—›E¥®‘ØU»¶‰NIY¿x¶Ÿ^ƒnÅ´O®H[µå+†ßnÁ}üÍçvÉ[ùR¦bRw£cKd@{~Ç–9…4{µÚš3²°¡ÓË")‘Hô«xŽU.\.ó.\àµ%uVÆ÷ÃÎF³iÁôSB{ûJ+”Z‹¥ üêæùýjã»Ôm<'”ÁÄætŽ]Ž±ÖWÞÅ:u{¢ò°‹ûè!»‘ç¹	4ÁQA?	šlÏ«wÛ7Ÿé¢ì j8>¢¦S§¬‹YL>õt÷`ìñ†C§¤?çIÇG¹'Â‰à¿A •Ç	c7ó[¶@a ø—³w0G˜©Iô<alä‡¹|³Ë¢gArAÃÂO\
ãÖy*D]ùVÝù¦£·™+Mß,·;µÖ–î¦úu³>Ñ‚ß–eÔ7eÖèùÄùœÍÎJ©ªoMzZ&Ò²¬µ-í:–»dÜ®7H1))¢[Û*îíÅµï~²þ.FcûXA“@"Ì™Ãó'äÎÆóO>	q°^ò 8Uð+
ÏÚH^ºyþÑ ³ø·<²®øâ‘Mü¬—ššÀ`Uµ¼%„BÓ×¸"!âR$	î!ô(:hAàÑcð~+ç•E©(yF#çåR!ø‰Íu„°œ±„b)hž 	$ôfc‡=|pÁG–/”æã"þ”½%:üÓ¦GæáØ¡û©N’0ååú>Ø
‹dºà?ûä[‰|lK8FÅÁ§}Žúù)ˆiæÛ¿M²†­I{Á­“2³¥ÃÃêîÝª£Z;½¨1Z	_¸iÜÿçã<m{aãc±=Qž6ãý?3Ð#Ö¼îÅ€Ž†Û]¿È[‰+ð·?aO"ÇMëä~™hÇ
Ñ–Wð
€Ç 0ÙéÂD¡p¡È‰•u»ïŠbùOœÿÕƒY‰u5Kg3¿’·=¼råÃ¥M £í¦êiÓT×'å,õèˆªŽŒÖ4¶„[ÐN‡BW…Ÿzpk¨ìÔÿ—¢¤Ùâ £YG)”÷7F}Z>«‚¤äîXöÑîÖð]žcL÷vo­ã¾ãHH´K,£«Ð˜>£D‡B*†Y¥×Ìv°LîöÌ|´- \H†ßîæ‚Çm×1»ªŠœCð3+™½æ”íß/t§¾~¸4Ð“~éCkùš÷7Wãahz¨õƒK{Ù•tOzŠ´`õ÷cîÔæ£‡_|$ýÒ¡/ÑâœÉJjÑIõtÀeä¡”ÅÑJk<¥#¨³ë98bYLmÂÉ÷5m–MfE}ª±âçúOûì³ZOÏ ¤•ö`Ó˜7zÈ+KK«ï=z>³¬lE±‚¸¨Ìa"^¢áÆþ÷áE@<->€Æ5ÊKRÔ{QZ`Ì2£VgVé~ÙÐ x“ï^¸¯ÂÓ¨€º;¡ÄJÉ1žÑLFüù?Í³FGeÛÒsbJÐ.cÛ5²Ûå+MÜã×èósE±ÿC^Àv]<›ÍŠ=@Ñ¹ÿoŽ
ÍHkÌHeIXþý%ýþaÚkïuvé6’Ø,Ñÿ¥/‘ÓùÐÿà½Ý;í ?­ÇRÀ³¤ÌNí£ÑS÷f¦xÿ”&ìZ2bÎ^ïZQ1<Ò#!€—¿ž•·J÷+Ã­ásÿÔÏªà_}Ðf=ÍàŠpÕ™_äo¦”ô¤˜Œ¤ô”ÂQ‹°Kè@.IëC(†õåYÊ„£Î~‡<n9–ƒ÷E·Sø­l5g·§¥H)‹÷=O«Ðò\yQkøP”|_?zw‘9·/HÁ †/Až ƒÊdl…„¦Gß”í©&‘ˆb"ÐXY¶LÎ:P»€î0S…Ó‰?‡ö9	üíp@ògôç@IhÍT X¶QC@yñ%“ÌõeB+þ3+s!N/lž[Hs>^˜•ùgJ!½¹™^øx•4Ÿ˜—OHSØré_œz÷ó]ô¼¹ŽšÿãÑÓ»
hsô¼Çþ´mÛh»–A)ŒO –Ìq\Õ72>ê1:Ð?P;L‹##û/j}—Ä™EÖÁ(èŠøèÕ”1$iØ_2cç$‚ïGœùÝ|ªÏ'Eóµ¨¼9àè@>VC$p•wG+fWTgB1g(ã1 m™*eºyzo,:MD~j¸@}Ãˆë›ëJ˜JŠ²„Y×<¨#»éûÔ»áÜpr›ƒ“ÃýàMÒEAÏŽ@^ÕŽ¸–ßÖåUÑ³ã€tVÜÎÚ_QxÈ´õ½»‡†%pÈ&áCíñµ£†”{‹¾þòô {‰ØÌ1—b¤³+…Ù4ãÄ)ŠéèJƒ¡Gº:ò …î³ûûë¸![—oz»‘DãâåŠÈÜÜð°‰õë‘&{£P;•Àr²½àfë:ù(ÁÔÜ=el+f×Õ…ð…œÝ‘ÈfÚHŽ‰>"@rsæÿš€¬Ìz\cŸÚ64²¼•r<âxäg!w.ììÚ×ÕùV—­ I-@l{ÀÔvmÜBÄ•Jï*b²µú=¯ÙÞu’šXô’ªÈW‚Ô³õÃWyâÃ§‚Ê)I¿W!%‘õDQNrCæ¬\,…ª¦¦`¹³þ?“Õ¹ÊR¢>RŸ‰½ZŽmTÅ©6b{_eb >‚2'˜}‹4¾¾¾õÊÀof¥§G¤¤À)}›˜Þ#I¿¹þe[ÈÆC£ŸIèÍT6+UÍJ_ðÖWAÊ=V/=gh¢phÔé­¥X§êú¢çð@À\÷jûmUMjî;êä{Ô–›™´ëcõ°…×­SÁ£5ÜrÇZú·!B(ys¢ùBÅ¸y^{îÅ*WsÃŠ‰’+€È=ö[öïÏH@‹/¸iÖÙ³êîÝ</ªÑÎÁ°rQ›dŠOqM»vmÕùÆA¹+Vw{¥¨éËg³TùMS©Ë*.¡d–Ç­ºEÍåÚüTCrPNMm6\ÓØÚú1ðæ›­êX?ù÷_§–_ˆçëÿªT—pM6TwÐý‘³á§j˜XQ9“¯ŒÇÔ[1„BkÎ¶<IJ:êÉæüTÐ—¾#ùžìåINB™ˆ™–dû=ZJZý¾Èü¾¬‡‡(0<EA¤H?cQÝnšfÞkêhnÍ~o!‚:ýÑB”ÑÞØzñÀK›P>ÿÓât.ÙØÜ4¯9»ï@|jµá‹à/ÖHC×Ñ$Zÿnà¹ï¤:l¡õµBÀjG£Ñ˜x¼Iœ76½Éúµøµ5‘­k¦nÞÔ4Oü©ñ±µB¬°Ò
áVÑ¦]¼xgü¢–ua póóëÿ/\èt}}÷ÿÖÁk÷ü&´¸ßelžŸ¼7ÜýÚåZª¯»³¥Ì{xn^w\¼æIë4<£å†Ë'bx-—¾³ýƒöšôæ¾Ùi±´e4…ß4{“›s)”ÜÔ¼<a$a©(#°´ü¥‰˜Œ'¼’têÃð!ïGDY¡c‹x0!´6[uËõ|4G8 $¬BÂ.ãbu|ûv‹pƒFØV¯£iaZFõ•¼…Ë+ïx™{%Ï#ò `ˆ‘±
:ïy£óõ¢èáÒ‘
!J#Oâö¡R§ò™òëäïÈ¦MjØh™5ÑÚÅsàû?Œ¿¼fMCr6•üû©---3÷0é#,OµÛNzÏWs¥€óÒ½ArbŒmÅÃ¢ÛU¿î`C“Ûâé,H&¹j¼PÜFúa”
ÓÖs˜L„È,ë²ãè+ûîJ×Q`B‰}æUÐë~R€Ó(áÕånj¢îN"ŠA4«EöèÌ¡Ê®ÜeKE›µ_œ­m{ŒgÙ£®6Ì=Æ¶±,ËEÃ¥b‰!S[	Þ´3z„íó²G	Rœ.ñ;'ÝLwTÇrtÇ9§¸œã¥¨)²ä–nËv!ª‡túóLÂ1Ø ¾£qÏ;z9Œ´ËJ 1Í±®ó×ÒöXKß&ä¼Î·óê8Ïv¸8<Lÿº0ã4ïl²‘! ìë FêKd–ý$M¨;Ñë1.dIZû2™›éº×vâ9$:‚"––“•€´XEqÚþF{Ù®˜`÷‹iÞ#•ÔÕªF©±§Š¾Ð©0T]“´‚4ËÞûÛŠó_“'è{Ä™ô¬ë;|5Átæ6¾lfÃÛRNR»{0ð´². dZºKÙYD{þð•Í>,çÅ(jüV;¬¸íÇ„7XÊóÅˆFAöæŸímïc™j}ÅÞ¬$Ï“Åçl,õÍÕrô5çóÞºG:aØŠ4ä¦XîûÈ7EMÜx§€2‡â_áÞ¼Ã(!¦?rN3þÁîð‹ñÕÑeÒ¸Æºã“…³¼s)ëöd\[xœ[ÐéÆóàw):ï0ÙÞ¸¥3—¾k}kl'iD…n‡Ì‡ï4òcœE»òo!’ÖÊ~¥óGeÎèÏ…y;Øç«í^Û€²ïTyMCÓH³ãg–#–÷bœÈ’ôö»ºÛcO"ŒøÐ
³îÑß¹mÞšŠÙÜÄÎ˜OïŒŸé;½q¿™U˜6I–öL9%˜µƒôÖ!Blé|—ÑÃwÂv–õ‹¥Þy>°ÌËas^¿ç)}#	æ•ñš€JÄ¢ÉkBxTÚXo” Õƒ½Ø" Î¹é÷“´#;'ÀÜ…’„<Î´^žpUI]{‚¦™c4ÕØ*¸¦ë)þ5‚;µbÈ†W"oxfŸíçC¢»åŽUô*HPA½ÖiCªÿïùûÑ‘Ë¿ƒR™9ìÜvä÷ƒƒ=….±¹aRØ&pˆ04Œ¢Õ×ø€WfG‚(9oòØ´iÆ*–**‚72¾qfxU2ÿ‚>š—ÚêIm"Z“RÜvòH3);é¡sŒ&=Æ>Ñ‡‰\O‚±ºJÓü’ì‡~`Q[|xQÑ?³—ðôZ[š!çÎjðs2G.s"Ž_ÊxfÚïù|N)ÅfŽá@JëÊ˜KW6•fZïXÍæIsÖQŽS¤÷ÔK*‡úw¶×f:îvC´”$!ÔéAè¿|òÉÿï¦#uææ=ú«Ò6uŽ[Õ8V9×î{ÁpÜ¡ZpKÄÇû5Ìž†“<Q„2ôöÛ#¿}Û”sä	ÝÄ‹±²g3:§ }¥{x 
´ú&wue\/±~W?æT/ðýr¨Ò¹¬Ê²lyiÕrg°×w Q¥d: O‚³IÙóç›6n4-X J ò!	Âµ)á¥>‚íHýqrø"*|ŒR¾b…åÖFSvöW–Ù¥Êôÿþ=è ^º¼ˆJ+âý.É¥Ò©R“ø’H1$¿åûID«á-hè­¯ßIðþ'F-:ÂÞv¢">BZ•Ö­ªHÚ6ònÒ*!#3üp\í,µèà±ƒ‹µ8®6HBÐI÷Éúh¼ozvšS8ûéì²ðsËz°¦èSƒÆ˜>ü}YÁÑó£Ñ'x4Þ|à–¡¸RñJ ÚÚÓtV!	ù?æ‚~‚ÀzÁßº¥2ï-ªÝê(ûªy’²6ó
ÞP?­mÝ6®MKî	’û3.²`Ñ¢¯]w£û3ôÙfM [æ-ÊcTiF¾)â@wÌ9\ÃÐÞˆ	ž?áSþ/Ùm?\wm:Ö¯è9‹N5ý/˜#Vâ\E2iQç¾¥ˆiÏ²¬ÎB¤BIÖl“³eV¾U­=QÃ!Ð¢ÁCôËÉÁ ÅìÕe/ªElç¦ÜVšL@¨Ã/Ò:ò»s¨wVSar•€É+Úw†³'îçÝsÍ.9ÇÝ;Æ+‰ÈÔnÿ![jÉl}¡±j“ÿAÿâTåªº5×kêHá¤|cG^¡
,ÛQu!dt#R—ßÍ-›ï‹tmmæäd|¿“-–=£F,–ILnÕØÅÎ•µÁ:ï+r¨¶¸É¹6¸˜Ä·¾Ì„á™¯Cþþ§¥»Û9ô4àã™žÄ7BöZ§Åc¥ÍÕ¡€““>[çoó×éuðS‰Î«qâÇÏvñ³Ê9PÇ˜gZiiIÞJqÍêCøM	—¼xÛ\»Ó2ö?¡áÈéD=GÇ|Í¾®lþÁÓŠÂq‡ù~ØƒcÊ“ 2áFÆòYBÿb!â¾ž(åÿ[˜_¾çPh´ï7lË±fÌÒŒÈ¥ìÏê/"Ë´¥Õ>è3yRy9ÀvBæyf;“Ê$žÖ·làÎö„­AsE·¦óïØ:•Ÿï‘¥rŽÌlÚè¹ïiiñÌmîéìô”—»I’nurà¹ýgÎÔÖ¶GŽ®$Ó»î¬¬ØT~Akp»#û:^ÛÒ¥#˜‰™@œc„®¶l¥ÿ˜qÁg$,Ñ.ÝŒõv	0<þ˜1[,Èt¸æÇD8JvÝ>†»@¼x¨ÍX«™ÝW`!èÉ†*„à1³sìÙÌèd»NoÎw3¸ÿ3Û¢Þl¶Ë¢õ#óHÞ'Þòô†U&†»–ì{kJ”¦Høèª,@võ£u,U)RE³—†d4ÎÉ±ØBEÀ5Ó§Àx?ÞÒ‡c›ßŠO¢svwÃgÙßRŸB)©]žæ¥(5¥ëéßØ¢E³g?-R{š,V•TZu‹–ß}ÿ’aÉ›¯\F8(pøp—Ý>B-VÍ•©#v{×òjmël|=…¿Ð—ÏÙÆ`†ŠR³øß“£ Ù¶P]h ÐI+ÓuJ„Q}œ¦BUì˜[Yn! _2¼†€6"Àû¢?{IŒ8ÛÈcü)¤#¶Ìz„N?³_Ú)z?H±ÆW—éïZåäš¯³^A˜øÀøY¯i’Ÿ¸f¦)8«‘yý¨i2×oŠß€—æìð5iæv^L:Æ
Æ3}SÈ1K|ZPpŽ{\i—‡-hšäªµ$¼Õp[’¼‚*7}	J%ršGƒ¿|NÔ”G.Ë‚Ø3Y°Qb~¿°—èƒ‹»¥?	~jOû©Ï¼©;v9tUÚàGDŽã¦en˜³“£ÆJ{ú.Ê2ùCH†u»êSm½}0*¦Mj(ˆC€*¨«äÿ¬Ì(__S“6¡M‚5Œ¢Âù’æ½bH¥o¸ŸïøVò¿ôäˆA‘}Ç:#Èý^Esóž––¥E+Ê?­ôP y‹¯,Óïß'ÚãJØŸC-j©SÆÉqù @:	æÂ:l'p`:ŸeûM.ŸsåNÞÓ¿¼|ŽDyù‹SQ\bF™ï)&ÌÌNÙJ¢§¢™èÍ´t—'©A€hÌ°ˆn†GÑ±1¹k”!_KÙªÜ5;ûÍ{íH8¤Ò–Ø”~Q	£2”rŸËaŽLÉ4ZðñÆÁ¾kâ›KhzÉMãÇy‹Ï¹S
+9U-ŠTú–Fúª#E*ª8/xSŽåØÐ¬ö7lÎsÔF”]î#û9
×GÉ®-ñ$ó‹³tSðÆ¶l[]/‘ÝÏ^ÄàÕ'BìgÌòä¯<Oé+O`0Š¡Ï)¶YÝn€`PÖFÉb³j„^S—ó•ZsÖlÍ¹îí™©ÌyàìåC»3éÊHñ(¡rà¢áÃ 6p\ˆìOIMÌ‚*sA€>ß¦FŸWŒNJÎ*†‘(]b”¡¨lkLÇ]›¿~Qìü¯DÛä¶Åo,’;`íšQ%gø¶È«|UŠ?ñ­‘"¨Ul6ÁfWQ#D‚ö¿§™ðÏ*I€ qvÄÌ‘¥n{¿½ÍùDž&3Îi;V]}M'Qù»Ï\àˆÃØ:Å¾®G÷ùcV{Q¬ˆ³æÞæ=©ˆ¤‚;áfÉ‹7™ƒ)–V³øœ&¯‰ÃgUoD±9biizH:y¬N6ÀÄ‰ëÛµÕ¼5Ïz§lÅ"lÕ¬‹M]eÃi*˜i#S"»ºäí5Q¨ºÍýY5ónhÊ¢;\ÖèÝÝ:…	µùï¾v(’e‰áó‚¸æky}ò¾ýlî±ŒÖ—^ÒäÄ/)pÈ8Aø‘”bï“ÜºÕ&'…
ð’"IŠ’_Ù .\_<×p‘xÔVìŸÝCfU|ý©¤×Í<>XÚàÚÈø±_ê›õ€VØ½wŒ"oÃyÍÄYP%Ždu;/öÑ±ù‰ú;_Æ:#!ß5&Õ®Dl¹u!<È>Jÿ¿ª;ùAèóKÁ1Öä‰ZK­:©ÇMD™ËVÚ†Eå¯é}òÒ¦*‡°PµéÒ“½kò™†*!Ôô,+ën×Fg†XhF¼²À’Ê4Ž‰’rOm„hÃÃ4{ÎÂE÷~ä•.ÇSNÞvA£ßæl#rëšSF6wR'Âšs:ï§îwxhÍ3¼%ç´.é~ x%lI¢ØµÇCÉqç<•Os.Bâ<<'‡9?AB`¦kø¿zNüU‚¡0ŠÞ'lG,E.ñzç}ºMJ¢’$’ÿA.i^æ3º­x:ÒÕåéêªÿáÀ~yss9¿ã]ùç"ÆµI„Õ ”7ÚÞ¼| œ8çžzöt«ËµvêVSÐ˜líz~£J%¬s@—JUÊü£õ|VØñ’Á’•áí|œ‰£ÖŸeÚlY%wˆ}‹óX‘‚ãCø7&áyfÍG`	<€Å‡¶¼0`7æŸÆ¥L@-·qa®8Û…†D	ïk<šÈ¯šPk9“²°|"‹É;,L­3<L­Áqr‹.ÏéÌÓÍõYôG@}W2àmˆ2ð»&cg Ík6+ ñ­{M>dRáu5g‹’È‹æ"J¢±þÙµùÓÏzb×%qZ?Fw
Id…'@Z¦¶|l‰W£jKüÇ[¦Z6llÅo 4±=Ë”ˆ
#æewG}oµ²>e£ºn­óÙêƒî:]¾ˆ*y4#6‚&ðGóó³éŽ¹jcNJ1šÊæáèPI˜ç½óïÍ[·³û÷ûO}ì÷>$ Áv0Ý”uA½f™pCÂXD?q·²pÒÒ8¨”;üppEv.»s¦Wú’eìº¯ü^Ú**žVVØ>(I¦±ed…ï™Éïÿ-äA<‘æuûÎ˜õS‚Vwúm%R°þG³iùÏ¨yÈìúÍél!>S~±F%û\%BÉ÷f„.lÁ‘ÐÊ
O~Þ’˜ìÍddL@üDé‹ÙaÆ¹ÅdÉ'±ºHŸm¤T„J*ecY5[Ds¤KëgœP0ø¹èý/m²²S²#è“RÐ÷Üø$@¼¯—Á(Àö”¼µ«ÓÚkçÍ
]½ñØ‡~ðÚ‡Ý‰Á^tEÝèOØdïd/ÖåB1“Å‘ß^ÇË
š®ÊJ)±&:ç¹ÄÖ¨T
êÒÑ §AŠ3Ó°Ò£¨}]ÿì/‘^è6››d#[LìàízÂÎD‡­uÑ“imÐ~3uöìuÆÔÄŠ‚eCÙ€@¢6@·®†ö¡H,ËèV_6XA˜â­bN,ˆ!Œ ¦v(¯'`ˆ)PîáqáÑ„Hì=;½ý}únÝì–’Ù2q¿3«ØwÜ‘b·ç4½vêþPÂÚU‰Ê÷|ß¬Œ¹ž“¾/ÕNÐˆž˜ò}<0^ðœy•Tô¾_òä<'mäßØkÍ^‹ñãÜ‚¨a`ñrëCÉ³éò­TUU°\(˜ƒˆŸDÓ…SÝ‚oXÂrNâú oi¤´Ï˜ÏâN“ /;pí%mM áý(¸µfU|û¬o&×-ÎŠ¾žZñ‹ØÅIùTk×^2ã‡h˜w(Q’tÝ—3ÚÂ\mo7qÊÞi~Ðe¬£ï5ôTÖÅ2"ÄFêyå‘ùu(Q£ýÅæ¸4ÎÂmÝxÞ-ÈäØa+Ra'{‘”þýÙïn¥Ó³ÚùÒ8®êhïž=_co “/„…‘®»ÝÐ„»»XmÔ‘ø@]ÿ¿Zz	u´ŠPMÀý-÷Wn¿}øöW³JçŽÎ¯FÉkÓ­¬Žˆ4ycØç8œ˜pçšO=Ë·hÚ‘vf-aË‡WÖÜhJlJöþçüÌÇ£þùW_,°D.mÏøüÌÌ÷ÿý4(E"o¬ß¾mq÷NMæ_õ`ò ZNÕd4Ž,nGº$BbÑö'ož;qr÷ó“'¶—ÿ<àóE¨Ò†ù‚aUÚ ¯Éãog^`d0.0W*¸]Æ ëv…°]¾•¥øgPq ³'•©tNUvn¹"K–•ÎSÎ›w{ó³ZröV\:¨4„•p{{[ü%žB.Ní
}à|K¤Xõ>ÆîÛ´àq0r¶€Êÿ~ïAŒ¹%3ÿËïð†å¾8Æ«Ñµlg±$,2xnö¶TÀç$YJ?ŽâýŠL?mÓfHÀ@òiùSe›•D)Ê+ò©cËHŸ2|‰ßòÍõ[”ODµ@V„%°‚AU®ç=‚)xJ°é9ÖïSç#œûéKD/ô¢|è¤fÓ¦Ýð;?¦cð˜³ôz$9gŠXÄîÝV°Á2™ô”7L¼¨‹©•LKÊÑ‘$÷%Z×´Kk$iÙœÌ-[2+âœ~rJYû@I¤Ñk'ö#6,FíØæÇq‡QX„²WßMhûµðZMBy]#‘Hòênh&8ø)ôœÐÜˆ~$¨¢ßW«xßÇ’¹u"ä!û¿C4è·­#O®Uí]ñ5í1×«SÐró““¶ýa®>„’×VX8ð)^pªÕû]oËÍ HäÜ[Ÿ=vÍŽmŸ{?ßÂc9@è§Ïåyy˜ðÄ³J¶ü|Ê3ÖèéY„b¸oøúƒ¹jîÁT²”ó»-|y2mZ!ÑÅ5ÊæÊt?ÞÍl¦º©RfF^žÐ¿ˆe’XÉˆauAÝ>ÕÜ}µ{<DÞ&I]]&˜ŸqnK  &QÊëb ªˆ¥}ú©¸Pêñ
1öÛ ¯bm\?o˜Œ Î½=[’‘û×æå 3Ole	ËÛõ	é1	IÆ@BÜ‡¿‰KX.ÃÝù®ìsŸIyD*ì‰À“A¯8Í!Ñ\çë¹ ³Í­Ž’K¿›“(Èù§fâœï¤rÃêùSæoÌkÓÖ‚!pRò"HMš„=ÛÔ8†îŽ¥A¬vbþœQ“_‹^Õ£’¼¹ëôé]oJT»Tº€Që+¸gÓ™¸øÓŸ¹WÏ6‡„f^ ûxÅg}eç&V‹á5‚¡y½g™’õ}	Ï,b‘&£p”øuíiñÌ—MeÉå\û0‡8jH#uD³á–dP>‡Ôó`¡ñŠruá?v[Ú´¡ˆZ°€Áh™Ô&hj±ª%ÌÌGâF}À2ÔêpÜØØ‰qçÆ;G«¿þNçÆµ;o=¤?&BÏ»Yèiïˆ°|¨Ñ›ûU³¶[dY,9r¡o€ñ„œÖ¸é”aq]jZÌF}÷ôÝ×‰lsF’vÌý§ˆ¿ó¼Ën¿°K†@k4“´…•+Ám‹kó5k ‰™3$Rzz=½ˆÚµëôLÏÆ§€+ÔŠB¬<à#E®ú(í¼áŽnÂ:G­p']k˜ ®úbø‚üü´³ó‹ƒé±æ³cç#ð$ÏVð)ŒTnR–ûl›¶[Ìž-M¯©IŽËl}òMºÿ{VŽ4Ú?z½v{í/ƒšx…Ä›vuñTò'Zá<CÆ­üžp¸ByƒVãÖ({ãƒã×)5ç4AMA³C±œøY²¼>qa¡!ðÚ©<O'žb]nî©Sä&íÄ°ú£3åâ§PŽÌ.ý ù¿~˜ktMTîyœ_ÃÄrÌÐlF 2Go]gÈ|³G Y›Rf„ÍÚlZãþÑ™ñ.H¡¼ö9Vh/ÐáatÒ^¢w'ÁÉT'Êâ(ï\œb)[-œëÃfsºwàÀÀˆ®žîR$Kä"ú+(¨•Î?Ìãž/ó0_ºV®Í3¸°ÞÍå¥]I±/³É tê/Dw	Ù™Å4Vô2½uuhÆ]©Ú? B ‹ jhÕ§”:ÄW¼J(öd‚ ƒØ Dm¼ˆàÈîëB,jãän»ÝÝÛ7…÷h_Í!U6¢l•¹wuÔ¯¤CÂ$rŠ	Õ€jºö
 HêyC»#bø×_wqÍHjªÌf^˜âãƒfKÍú\u]j¦'Ë™>	‹ìÝ'q“]‚bðçŸŸëÙXû3†ýNX†€µMÁcÇc?1+Åþ#ÀÁo‚ö°%eÆ·M"¦ÈÓ²PÐM¡ˆ}„¢¢­²d
L¡H6të*éibš˜Lòm’T‰iŠÏuqñÖ¹°ðù7žís6IžJŠ?D¹¼®.Bß\@§B@9³»x¤xñ)*ž†h {Ÿ¨â0;Ö' GÍ„ÂzHà”€:*V1•ÏqüäOÛ1‰kÌE8-ÂÑ;…c¸“±Ât£7•öz !„1ª'ñ£"ŠKVqìîm|‰ö€Ñÿ?ÖI€Æ#vs¤Ÿ€õ¨EûÛ«øÉÇò“ÂðÕ?Ë7É‡kß!CLWÑæFû”‡[á-i—,{Yï6Új”—sâmÀ’JŠ2:HEÔÇ
&Vë$Ð!¹ÓÉ@1ê>¼yo:Ÿ¸Å M;ò®ôgÔÅïŸçÈ·Å)He
“Ï÷|–‡Åœa²0Yæ"þ–åt……AodÑ—¯ U>ùàá&atÈê™ÉÍñjDx°¬¹r*‹’æß·a<‡aœ{]b;WÇí)e£— h‚~R[g‹›õ¶mÇ#Ã§¡aÇbµÐ?. MÌ@ŒÆ¹säVÒ(Öáñz³‚Æ”§î¤M»ó'µMò@8Ö¥C,X1ß… ý¿z¼Ó+Ž˜ <»¾Y*  ¸ ¤íñ97Øq‰‚×íÒÈéýŠ90‹Åð˜èC;Ž2à™1ß-þÇp¹±U,äŒ	…c¡¸Õ(ÿ<›—¿HküzR%Zmª¤ÇÏŒº™ç™¦(È	, Ód`úþòˆ÷!4M=V¿÷ÛNgL%<öæüIn°¿nE‹3$Â®Xï‰Ûf:…Ë`ÀMÂ´–¥ZJJ&Ò‡/Iÿ2H.yoö\ ¥ÌÚ$“5YeÞ1ó,’	÷dff×üLÅÛ‰s¦As%RëAó?ÒF„VBß?5;ŠÎÔ‰¸AáÎ"Ô2&·s_{Ý¬ßoµZ‹{ôIÆö_,œï—ùTüB,0Jö‰OEßŸ¹Cö_ÕÿœÌÏÉÃSì›i‘JÄ’ 
ß§nÍÚdFÉê¦ø«gW™Î*J‡ Êæ¯`KOóz¿Î§¥±ë—|K÷äÎGós{hjîE¡á½¹ÿ<óŒÜ;ðº÷çáW³³_ž=ÊaÑ¾Ÿ&°Ù8Eï#ùå—•L«éö¢a<|_±(µpp”ÓfØEŸñméÈ±LëL}"F*Énª2tÌ´R¨VJÖÁ<0a¦#¹+Ýâ®d1g§ªé7üä²â>¦¸³Øs¶jGÕ ÊÈ@Æ6>Yñû¥ò¼¬LFýÀ­u/ëP(ÄSDÄÁ Ï¿I~ªÏS¾4ëZ&-s!lÛš@ê</£f…iÊz:4šŽ«Ú›™4ªVc«ÔÿŽ©ÔŸÿ'Eyã+PUž?9™9êÄð¹`Œvm‚²ýõ—A+®‰·{"Y aÃ	_ïŽgçO%ÎžÜQ0IrÌ…kòëm`H××üÛ¶¹oÞ<ƒ™éà
k±ÿÜRëÜGi¢øH+dš§õ¹õO5ˆçB8ÒŸ}Íbá»oßÆn¿ý®Ð7Î! SlP)Q|—oéUbJÛP¬––³úÊt';‡V|+ «hWZªtÅ˜À0&,‘4(´Œ Ü4úÝ`µ¢xð»yh6…bÐì4È‰€ …ÀÒr»£·Ån·c àTy±ö/Œ‰"(Œrþ2øO N!Ã09E,ø¯â/ûO 2µÜ1®–W8="úç vò‹Bäœ6?ø6]B@ºÂú¼ÀVŠ¢˜^$s©¾Äƒƒ.—+0ÝÍ˜Ž^W»"8ÒÆ+ÅJUë PÙÁR†º`Y“mÚ	)kxÌâ\:PÞÒë›¸;"æê×Mìµz”­ÌH—Á?óî¬•± 4¦
•c_ˆ‡<T!ÕÆ1XãLæ8ƒùÒH)ˆ@V¿1!â£)?ÞQ¨äñt­êG…²Õ’ÎÚî‹1sVÍ‰‰Û—9gåœYb‚§åž™; ö#±:	•½33ï$'ï®d")9§¥„¨”s¡Ågôî…KTéŽ~Îˆ{WYP»~Ý‰‡Á_~"”ghE‘úºZÛ/î&4¡4Ê9
uÖÕeEæqG„nMÄO®k¹ûkñ"íxÎµ„ÝÌñ.=ð40 JÐBòÓ÷sÿ-kþwîÏsL¸W6ÖRÜÿ6Sëm×òò˜Jb"ŒÛò0Ùiãõg¯¡úãøø’’Wÿ¼ÏUíbÎÅ¶Ö‹Ù$­­Uc^bD‘9šèE;Ç]†”ñŸ±LœÎO‘àüeéÅéŽ|¼0›çì|Î™$TŸïÌGÎyÞ^;§öÙ!Ùe!o_»Ÿ"44¬þí Ñè¾ã‘ÅÏÌí[û¤8³ñ#LcÛªÃçklŒuÁÇÂ¼ÿˆßëó‘dùÚüüAN <ƒØg>Æ~W¿jâ_ŠI´‘‚cLÇ,ÔCúf’p4—-ê¾Ç€}­µ5#}h(=CÝóAYk3Ò#`›&'?Ë„vY™ëY„b(69}K}äƒÄæ™[ýaÅHBíÐ¡¿§âØ7ÓýL~omK#ét\ ïVc£*Bßc×h¥×„éÄ…Æh<fP|d&Kœ¸ž›°™„µkãsæŒ(.vºÂKï„É‰“ÿøõ¨-ëµA%Ÿ®×šz-þ _µ¶°·lùç¥00"qî„Œ„bcôh@$ƒÍS;CTsËxÎø ’š›7u55uuí"#kH»TxCsó  èrm0,ða§¨¹Ál5Üo(êþvø`I7hÝ­uO¤RãÝÛjMþ¶¦FíRrõ¿@*9ôÍÚf}ù›E±º©_@öÝ´t¸Êû´ÿÛ£v¿ÙT6û¹à»¹sv^öÎžU^MDþ†Ý8~eª·³üä~üÆ¥ÉÙ{`ûö—“÷ù{¶þkÉ~/fOw%>ÁZô‚BÿA²¼z¹?óÛ²òÊ þÀLÞµ½ ËWÌ`ôNdÖ¼{ÄfÓS¨úÈÄJŽ©ÓQ):÷’îsû©DP¨Âû‡+×ÿÁ‹ÏÈXµrûötwÔÔ<½¾;ûkk ëgn—9éûÚoùHõ²WÃ‡%‘ëgØƒNç×Âé·ÄËœéÑü;º»ÛÓÕEª:ùº&vd4’l»l`ën}êjÑ}R˜yƒ§²bÂ““;Äfüe½{ƒ:…Cn—‹´šÝÊ¶zÃ1ÂŠ·´€1» œlß Y5$p6¥Æï'3Ÿu¸Ž1¯ª@†ßíçh{¶†§­†Ò.Büö²Ÿop9|HÁú+$ÖHÆÙ3M#ð‘wirü´ÂS­ ðI[¹ô£8†õ÷Šh¯¥ÿg¨GÈ	{ û‚¼¡ó'Ažúú
´b)ééí3jìSÑ~,`™hõu1o-9jL–$q#Y·“aêêI!PIv§«=n^læ7÷&c	çåŠÛùƒ'•?[¿ÈÈÌÍ0ÿ°®­Óãl¸—(	é{‰è=KÆý”¹Þ®ŽR¨þÈ’ÇäX¬ÙŽa;ìÃÿf?aÿ;NÃØgN2˜È	vT£ø‚)U²5·LbI¢¹}ZfÓiËv `Í-q®uI$YèNæPìBêLîhß¥?Ói’‘1-bÑ"–jlítÑNfˆ››Ãteã÷”nú“1ÂÕÌ†¿`ú^Ã‰Usà•.î©/.^jL"„Øe(Û5ÍÞ’*#ëî\ª-Fž×#4P9eÂ¼7+6Æ—êó´öí:=žUôGÌ8'µ4ÆÌÈÁ¸µ|‰í;NNâ|ÆFM20Æ‘™áÈd\Ø¸ý\\Èó5H±´qM/0ÒÎ£r:O­1ìC[E˜¡ÄôþÝtcÒ_{ã*C8B—Pî'©ö>‘D‹P„Ñ	´á
¸t±/=µËð?Ç¥Vƒ?4´ò·Ÿ.?¿?i€þ¿œšÃ.þÿWmh¿j[êIî¯®÷×ÿù´\Ûù·ÑØ ìõ<äÝ¿ù•ÿnÃÀ³~âûKm*rõ»á˜TO¼Ÿ IeÝ õð	ÀŒüŸx¿N¾óG‰îƒpúõœéq¯¬ýì÷_fVv7â¢M“ÙP1UÉ©/U…o£Ñ¶áª€VŒÚd4
Ñð®5õeÇ;ŽË'£[‚Ó¯e4óftŒ" ÂBŒUù‹½®ÃXšR“˜ÌÌ ¼µ²ZŒésx¢«CÿÜIØ%¹\¨v?UGwŠàìx‰šQz–“H¤½ÿ1.Œ›uãkÎû!ö¬ šR¶gí‚¾ÙÒlëúìì,)ÁÐF ïDªVîñÂfêV/j7ª«5ºbÇÄ<¥d›b³^ÞçÃ«Íg"K`µý¦³4ÞC½ :ý‘£e¼—nêÝµ|AhÒÃc8!!!`<Æœ>ªÕQS’‚”-	Û·ñ…¸p°.f|I!*Ü5g†þ¿y•,ÔÖ(†¼9`ZÙG?1R ÎY¿,\÷ó§Ïcæñ¨ü¨
1ðÐŠqH
§”êX Oæ´}Ò–?ô«5kÌZÃcŸbfõQ Û{­¬rÕ†ÊáŽÂI‡àtbˆê}¶è$;[WïÝ±úé¾þ6ùýZ.Ã#°9U‘x¢Ìf\ÂE÷Õâs´‹9™Í µk6Á	<qG'+"¯apÜ«Š <!ÁÈ+D‡­uLñ0'êz½¹ˆ›qÎz	Ê0îÿ)¸¡]Ü°áN‰y‡E—A¼ª¼òBUŒásíÕ)e{¢‡./ õ]©ÅVðÞ‹••­¹¯ø	uáÚñl ¸ÌŸØ
·¥ÔåÏ¤’ç|Ì/zÎ®îé¡	ÝÓCd²Ë°ñuíÚd<étjKÃ.Wx©&L¶4gèã‚Ëhn¦
–qS„**Ø¶¼íý¼%'ÛòBvö–ìË'Ø4@²@N5A˜Ñ§l/<=-E+QgÛU±$#Gœ§Ÿû‡3·ŒyÎ¡cÅSÕõíâ ~,õx2+ê6£-¨‘ =ÓŠîqâ½{ê³ÏžÎWd†,Þ–=ªô $~èZ‘	—Ð$¯nÇvw{&òªùEÙ²åÎžÎ.ÊÉR’²÷B¢?+¾YÝ ‘H2äÞÃ¦dŽ’
ÿ‡!ò­ñJƒ‚ïÏÙço_Ñ,%Ai,TI}V×aE®Õö_Ü­u/Æ
/«dòù¦\>q¸Cù<ã(ý|U¶ñ
ÂÊK5`t†šžÖEjj’’¯&,à8Œ”g3Iƒ…ºòŒÖž;¡{òƒõ€m+‹çí–|5#C–cÝ`Ð,G8?<‚³ÂŽß_¼æÞ5I+,êÎU,s½é(`ÏPç­¨œw`X¨òQþ\™ã“/"WÆGâÏ±7Í®sŽôg¾A½mmÚŠ€Ó*i"©A#¢1æ k‘È©tÁlÞ§`ÅÞ@®pQ÷ß†Š]ª‹Ÿ¦ÖªëâHƒ éµû9íw\ !}¨¶^þ.·m´«9Rà—Isö÷§ªç…æ.Ø¾AüBàu×+¾ßfØÆ«GÅ­µå¯Oþznïe†ë®cÖ›œcÀ·@zÝZF.Ì®­}Ã»º}ZÚÄi #ùxO|nî¶ðñ%X]Ý‰%b~!ÌOéNØÍëšæìIÈÍ9Þ%@=ÛÄ.¦H­v©tt20Ë2*¨an$bü™(Óßhëù0Œz`-#Oä©<M{‡¾‘Fï¡Ë0m#öëfžHò@3èä±îÑŸ¡aêlCñŸÁW†´PªCüVöA{n”=ÇžãÌX•î-3ÿX£g!²À¯"9x©JA‰ó¡€½S(**•w!lÿ¹m#]Ï¶Šm)Ãùýõ”¢|È>ÌÅ‹;…¤ß ±ÔCQqjSÐ|"ô¥¹± ºkÙà;Bò!¹ŽFomHR–D¦§‡mÜRÉšäÚ´_Tœ…ò†¢â?KéHþ*¥QY±ž&ò»~Êýiùáj¿šÝàî®ñ«>¼üÇ¼Ÿ~øN‰û¨?—<ÃûAï1xò¿bç…8½„þ­™;zíú9MÂ%Â1a7øî>«÷÷Ë>dëïÎ¼iYäà‹†¯F÷·éÛä½|;ôÛsô4c©ž;ÑË«Å¾”€Ñ¸LùÑu¯¿˜uWÞðØ­ÀªÉÜ\ÏýŠŠ§Ob5M=eá_Óo¤¦â{<è@¥€_Ç„=ò#·),*Âfo!»­tÔ¡1%ðê½Òë´ùiËQ_·ÚêŠöe`nÎ¾¶+6ÞdMð*?ì÷Ž­ék„L!«­–f·’Y“<PkJlÁ!°wÌ>ÿÍeÏ6¦¥6ÐÅ‡b!¦7¤¦õ<\ö&
ªÔµÐwè—Š’<@£Õ‚8zï¬ÀšbÛUØqÁi¡înOa‘ž„1·ÝäË–y.§(ÛÃì®HtdÁ yApfðÊÜûCø°Š2ËÊ^Š„cð‰cm×zÎÉŠrÖ÷Ôc€EGÌƒ“u2i"OºÄ“0DÏ9Ç`k¦'ý€ÐØO¥z¬Û…ÜÀ9isÈ´³PyNjc W¸ðoP©ýµö@Ædg£G­®ê9Mƒf”ÄƒìHCh7ÞR4{xz˜s¨<*%‹¶@ñè¸…K±¥ò¼¼«(¸ùŸ_ú¥ýHWÊfƒzøÏ<sÕJ¥}æä‘‚b?Xðÿ%…$ƒ|l/L=P@O‰J6EèrÊÜŽ5Š‘BÄÛuKÃ„Z¡ÎÔQ|C…/i²‘“©”ØðÅK´"ßU’@z¯ëZÿVüÍA9ü+hÊâpÑ½(‚:Ý¾šï<Yo‚9wgÖÞ3m°8 l^J4¼‘åùNã{µ¶`	K<éŽ›1ŠÚbë+ÁÃW´Ií—‘$¢˜9ØVWtQ	…\q.B„ýw9`µ]IL"bQEÁBv­"Öž&ä *A$ÑAf8 ]eVš”éæte¢üÔªô –‚Ô{×_s€ãƒ—.ê–'ê ÂÝå­]û‚ z½ÜsüÕ¼•‚2a.Á­kÏ0Ï¶Ê­—u­D]"sæ¸Gÿ[Ë=Ø­‚•ó††®Ýä(‡x`2¨¸±©äí¢W}{£>°isî“i%ãuò Ÿa{D¢Ò¢×†Ôµû'j´ÈW»ªVs(WøŸ{Ã» vJ,ÛÛŠYûOkvÏÃž*Ðoãé3-Þlu•he	®O„é%àÀ1aÅêÓ×f+QýÝ™·ôÙoÍÜÕ£–[Û@±Àl…+LFÆèÜCÝÝ‡£Ù¨îO(ëWç5×aà•ïWé+ÿáYÊ;SéŽ„@µŠ.‚ÔÍÿˆTN5í’3‰LŸ¤#'7Wìî1óý”©ZÎÜµœùÐçYd¡Ò’Rd•Zö;SÖgù¦øcXP[Ë)eÂ”ÝïÇoÐE€Ä}ìRòò<ÝÝÎ´÷¾V3¶vGKË_ù*¶ß|ÿOäÚµö´Ô4ÓüûíÅÖÖ¨^$ïcX@öàin®%?'ŠEék˜åYY‰Ä›ÆˆD®ÒõÙvíò{gé2‹u¦ÅVØN€ÿŽ¤åÔ	º*¿Ó!‚ù^)<tÈ³d	=ìKäÙn9ÂÉµ5@Ú!÷ÆI…;Ä|õÁƒâ­´1l,Cô›AËÃå{ä|/Vè¶$ô¡O4ÃLpybVöÅÅåÚÏ›‡rTcl{4Üšëµt^hÙ}E÷V½·r-–¡*ÄÞËJõç'@÷žìÕÑó§±_mÎ)sØlzÆæ¸l”-Öþváà»ïzc«¬š!æë='¾ç±“ˆ«Ièö45%¿0ï!ÊÀÃS+K‡ÞÍ—ygv#Ï3‘LÈÝÑÂ$èÕ¡“ØÉ?&AÎÐ\;Ž¯0ÓôS÷+ƒ´@ŠsU…(Vóz°2p²<ÛøžZÞ-+kèaëñmiäG¿—¡ÊÉûÞ‡æÃ4Ï©Ó!ºÂ®NÏŒ,2À­Æ öùU
ß;Bqr:3¨~uZã˜3ºí	4Gæ¨ŠGï@Yt´7ˆÍŸ°uûVùùÁßm›0¾ØÈ4¿t A¦ðæ5i4MQ6¯éÁjÝ ›T€aØúÍSSé°m³pŒŸ|z´	¿Ý:…=vV9g´ ‚Í¢–C6HâîOŸWÙyÈ›‹B©k6ÐB‹=PVyË{ÅŽI<;ƒfãðA¨‡àDbKK>á˜?ø@“µ ðÆ–ì*]Ú`8ø@Ô0„t5Â…y|ÔO…Àë+é§u« Ô@Â_¢;mrMµ²C'Àé§É7jÄ.b²h~g•0ÇÏ ”ãU¿ÔÐýŽÄ7Œø3÷ÿŽCÍžÍ]ƒg- ”Ïøïsµjì_,È>¦ÊåPßô˜á„.e¾¹*!šq<IkÕˆc¸w3¯${©°gšg™”ÕÕuöì~´’4õŽðéi¼‚®Ýo\¶Þ6ûˆ„9’¿¶ÓðdØ‚é ¶(ÝÝšpÉx{¹°ÀƒkÉ—Ò©Ì–.õVÏLý½ÂãÑë¥ÒÒÕõRŽu]“Ç‰µã OƒU*Ñ…æ Œ·
¢˜Œð˜å;ç˜=“Š~ç_r,D•)KÄq´ÚÎ\» Ü¶Ù¯ô½Áu™Ö†Eÿ‰çf&¾ûŽT/—ËON–EoƒKÂ&¾Œ_gq"èf„BP¨…#ìVJÕüv’zŒ£¾À/Ü•],Å[íJéf¡´@ƒódZ1h" ðî/¥:áB—`>=*( ¯`Ø;Osu04‚c4g¯ž$\Âò'_ôÿ®Ê? §ý}OT´<€jueut´Ÿl¿iHÄè­”Ç½%¹«çÍÛ¾½	ïœ6Žx¡§vç£°wçäÅœ‹WµkN×d¼èìQÓ c²zÈ4tU‡««GL#ƒ©ƒj>xèjÎÕ‹Ù“—„È(&b»qÃh-¦ô|‡ì² @†WåBþ“û1wyNýËjbbz¯£Rˆ8•²2-gü'eñ_¸>ZÑÔ€—È¤õæÚô\rô¨›®6a’›v¸¾:„ê0y”Œ2:Õ¨ `ÑÉç@nçnVêèmªõÑ•td€ñ¾ÆâÐÌ`ôéõ¡ú¨ ®0,ËÒf$Std²±­1r…Z•ÅÇ‡ì£ÒŠ8B¤¼©ÁLÖQÈ~MYaBŽHìÚ5êj·î×æ;–ZóÙþý½`\f¸ðêf‘±ïí7$âõ¼Ÿ¶óù›šd:VfZh/Â!a¸Ã&3¦=,q\í „}fKŸƒj¦_°¡Pë&dÔ;¬´`Tž¤õÀ¸°/Ntà²Ü¥<ûëKðnm­ÆÕ¨¹üö‚›œƒHKôöÓŽq­·~®ØÝö×lüy°ºz¾˜±¡>–3To±»P	05†¹jrºPå÷»uè²‚ª:ïÓÂæ²m)ïÔ±'O&ï¯Û×+Ñ	mË.DÛ%	˜!B"C£0†_ÂÀ™G1XW[¬‡â¡€¿ÆÜ[ãçö[ß›—Üoíµ…ä;;YHe³S?y7´0ßÖ®#4+E,`Q8ÈÑ“£xï~qÀ“[quÙá1Ã®]¼+3†nÄöOf»ùñÎ+Ñ…Wv>6·+UþK\pe×s]JùÙfXŽÅyžêÆ°±ÉÙ[§§³ËÓÕìi~K|ÈØüz|ñÔˆÇ““û ! ò@½a‚f¶…`w®“dvøwmI^Ë»Eü¨Ñf¶ŽH—·ý³:UB5Ë–½Sq"½Š¾Š^•~¢b3¯U=ÂD™#jhØcó·y8‡à8kˆ` ¤Ñ uŠôÓj*á@§ Z—¶õe›÷Á‰êoD¢oBD¢oEb–9- @ÄBÄ¯¼tU
á§ô»X!Â¤‡×ËMgwûšöœU<„“1*MþPC@--^tÔõÊœæ-6?K3‹•õóäj¸à¸ø™X"þìÃå((W?VŒ¼ÌX¡lÉŒ§f3ˆŠùö°w'üìË¯ÜacOX÷/A…Øí3~ŽµÄ¼Iñà„Ó-Ó®io,wM»pp¢|•Hãe»EÌ÷-f½•ôûJúôRáÿjci€€ö9%Fõ¢’t½Ã×Ù;åd¬|ñž·\`De9>›s
Ðºôƒä$iWŸy7›a¿{fµÖª$°¢ùFe0‰ËêD 1‡PtïmFÿ¶c^Ì§Ÿz×¿{j{01K˜…;öF]HútÔº‡þÍ2­1ç¹À)jºï5'6@£ï¢¡W·.ˆ{Ên>µ0ÀTÊ Û!M:L5’Ì´—59„ú-(©–|y_N(*É,'8 K¬ŸpDjþÙn¶RxúÌÏúQ)pæ¹¤0öw¨ÎB±fvÉXB·^´ùüº©$I_ZµÅ¨ÌY‹\ƒy1p'¤ðþµ³#ÀÍ¡½Â÷¯™]qˆƒNçI~rˆÓè´p`toGGšÅ—]æ’Ä
]ó”€Q;•A$®"jGîYC¬ýYñBEq	K“â–kÖ,jnQ—XÝupKð•¡8ˆÕÇe-ö‘ãæì®~#®Òî³Ä¸ª7€ÖrŸ{!fž;7›RË‘vy(eæéÎãzÒ6ù4vXµ·{!æ–¼}ûñ:x‹¶¢eïñxm;ßí “W)uÛÞûYo¦‚›ÊG.êLŸ•kçT¨Ÿ™–•©%óS:Óbö5Ó|ç¨³‚{rÔ„5¨3ÿ-ít[ÚØß´îCN8ûCU4 ‰ÊìdøV`‰È«Bd/JS5­³R–Ý»û.¨±53³¹÷Ðe2y}Âo•›ù} bš )CÔŽ–¢ÀS8!ºfî„5m2-6„"TG—Æà©)X>æS'žÞeNã$vN´Ç­xö°DOCÇ°1ò‘1xHo—ú»wa÷8©¿Ÿ-•¤ðâžÅ£Ñ,v`ÓÖApt9ïÔ‡dmB6l8ªa¬Ï~þ*ë
O	Çñ°;ÕUT*‹L#SÄ>Ýáv¬[9O®¾øVÖqLÂ`ÃÀ‘Ñ6ÛˆðR‚ <B)’¥)÷óî ÓIX2ZÚeÌvYÀƒ#+MØëzM‚Y<„ÞôE!!E„FÐÎ2Ê™/’Më-Šo\)ô=uüýbÒ)¾<íàuyÅ°¨4”#y*Y³þÎ:Ò%§h´SW°1’c\µ°-›ÔÓuwcö©!ÔÏ‚°é×€r$Lq9á×EÅ¯HkVzA Ë9öxÀ¹šÀÆ¼ˆ·¾HN¯×‰în\›8“D¡$¦,ÖO´Š´Ìvm„þú0wûâ¼—S)yáS‡%úˆ&J­VRŠƒ	Âú?bQ BJžI¸ÏÇüàÿ3žsÓ¼’µ~£o;¶ÀÞ—·Ñ¹ºB[–Ó7*~|2cúp¢Æ9—œNgB=À¨LÙ\ kL¸}Mê¤)BŽ‹ys|"	564ŸºP/TÞ
ùç°Wv±Tì1Um½S;¢
ŒÀV’”3{ä){f”¤ö¾œœ€„+g®eeÍSWy~fÆ#Ñ0/¥²2ež!1øQÈeŽƒG6}ü«o÷»Ê‚
Ãô‡Ïâ™E½rî·GerSÏ¢ìÑoˆ‚ŠnÜº¥‹ço°îãÿ‡øs¤³iGLð[ì³[Ï§üv™ðLÜ÷Ü¯ÒèríÓØ4ú~D@•èK÷:;]“SØ¾O¡¶,îäðÕi`úêð$—ãv[DL^ÝãŒ?ð_Œ¦4QqÜ‚Q
B}ö°Ù0û†Æa\ã-b6Ãˆ„ˆù™üÁš!HÑ˜.æŠlþU-)Ùx$(¢ûŸŽO´‰E”TøxæKÈTi•BÀ³CNÚL,æ)*ç?Í³>±ö9ûGçä'²Ÿ²AJÇÝ±h¬/Ðg‚”r>Ô#ŒÿoÀ©¤q¦°8‹9îú¢š²ž¦^«8Ÿ«1!gìv¥Ñ‡^CCc‚e8OÈq…ÿÑuðIaxj\†º>sEÇ
Á;Y´]tmÂ‡6R×lî0a~ížÖõÿÂ¤£k‹[ÿ{pÓ´¢º¾þ_KßõlÛµ/Lû¼k+¯F²ý×Z¬­¥íŠÐ@ÏAƒ»9’´Q¼([/m
ƒÂ4Gå©&ŠšG±»™•-
s°Í?JéËþ<zvê<™fyàDUqUv¼Ù÷PòúýUÃüŽªKyÕ|
²g3&ä!Én–¦üš‡5µá€Ò¼‡ª@û›ä±ZP_qªÍIuVßÅe]Ð#õC{9Êf´µ‹è+Â¬¨Ïâ4æ"¹“øYˆÅæ8¤ÂûžØ£=VG}·Óº»=yy$RƒsÜN×;ù.dõÚ^ÖxWöµx‹ýxOAÂ÷ÄQßr¥Rî·Q¢û°dFÂ{£ÿ×ÖªÄâªZí#,F2c7±q¡ÂÃ[ÿò[ŒþBÏ_éÃ07ëÇû¦fã¸äÑS©ë¤s9Òö’Sm’ãŒÆÅ'Œ“¬_rSüÕiáË±s¸“ÆtrGÓIî@;Ç×T¾Â>ÎùnNšloÎë`mhí£w¦ê®M™,‹O)´`­º©kKŸzç×peÑ0¯‡H	}õØ Nl£çïÅ,ïJÂÞó1/ üoÌsÞÆÜ.¶xüGÕd™ç³‡É“ÁêFßxÐNa¢Á“¿u EÜN[AAÐŽ9-å˜aqFN°óî“Hœ`{ªQö…U§ÓåþAùÈnð¬qw>°ö«	ºßî¢Âä”6[“mb­¤ûÓ	[SßÞe2YÙÃ!Ý×?¾V^åX²}#[®ôvë‹Ó*žŽLNžª ¯‰Ü“8³í+L8­2hž÷^áj»ècZÌšYçÖ «±¹ÝîÔðÕ)`êêðSSÏÏñ8•—¾Ñ¯¼¿ÌüãTÌ6”C£á23°‚|»ÅÞµéúXeðWw¥R“Pzu3I¥w·R`ð¹?F\žâjëtŠœ³°essWêª€~¿¦Ðõ$íÐu€vP˜" b>0ÓÚ×uv‚u´Fçl\qñög•pI7EU£iv•ô=Ê};F—£—_†.zÛ3.ù,Òö;ÒÛ£—³q_wÜËØadIjC¯=Äú¤Å­‰ar×.X‘7<|¥‘ëÉ¬¿î`¦¢„ÿ/§©¥Õ-Y–ýþgõk[d6%í—|J ’raDÓDàQë§ü²¬ˆ›'+§íx>ÉœÐV½sFæë2OÑ/á±¶HKoýÅ/‚Å-¼Î"ÑÏù‰“ÄB^ˆ0H ËîGÒ“ mƒ5zMžëU]®ç¼S[8°lµæíhû¦0Ø(>·ï™Ù"¯ óœqvý+n$J€—~Ð/ò£¶Í?fæB½¹]ih=ìf ñ\Ì{è-½DA?òíˆaâhdúH˜OÞx<¼ÎžfuåœÐ%kÉ;Ù‰K\,J=©çhVˆyùiÿœò-e‡öq—/?÷DbŽ¼ÓïP?~øöÿõƒhÎq!Î~Å•gÁöãÿÄ•mZ„JFwu/_k©]œ8Å&q’Má¢‘!?Ñg0øó‘«†[v•¨¼$L¤¦PÇ¨H%ùHän`cÛx¼6.Òey‘ó¬îã.Î8…EÌ»¿Òñq+¢"ÇIl¿°zeÖ÷G	=¿¯"bm‰AÀ'k Ì”×Y…%$áaÂa–×;Vˆ¯+.0Q&b÷0ñž¶§ˆ2}GÃì³o'3@2^¶~açÄ9ˆ‹OÄU"$i±=
@T8å>C{¿Œ°4ì]ã°Ç6ê'mÞ>Ž´Þ;eI[[/Ú¸b…Áò×ß’ÿë¤ˆR+d#ý¶0˜Òþ{Ó6_Îõ}ôùG¾³ÅTµP/DTÒt’xÏWÐ+†‰¹íŸÒtâBÓ’„ÄwQ¹u¨#‡å±‡›6>‰À‹º­ eÎYÉMžþ)Ž/.´ÚÎX‹Z>%Kù>)y?¨+A€ÅÀ¡wš¯²j£Â*°ê%gŸÁ>}¸:ºé(é`7FWŽck=A»Â²˜ñ˜*3ÿ¢V¶ûíÈ‚/c<T›3ÒS¦Åž”`yÐ”#Ö9/5<+‚6°?êß¸åì7Æ·åÂyŠ&D3A Ì©å°ú=œª«{ªàeÍ¢RzÙ5™[ÞÙß{c¶—ýUœ²’N‰ûÕÛ­}êV‰§…Š$ZÄWAIŸá}üz:Î£³FÔ?d™æßñ‚Æ]cËXý;žhæ¸ÂužX¸-gÞ‚`"
Vž1‹TÐýDr¤›ØL¬ÌÎ²ÒÙ’2•“›3•’ ~¢óE3ÍDžÿÔI0éEs¾Ñsky¶éõ«bê›‹—MÕÅô÷ÇÔAƒ†âÍbÀäãóf°@‹IX;?¶LÕ–Â”xµïR™”¶[IÚ\‹cªbQ™¿{cZà8x«ˆù©Ü¯÷ÊúÃuÚ|Q¼¤`…Ëîÿ¬ýº€e?åˆ˜ð×˜ÏmKFÙoŽ»í›qž½¸óx¢Äóž‡*#‹k‹òAã
CÂÛ4î
1¸£aÒ×îx‰¢¬·m‚WYü:V×ý–U_F%pWŸØIÄìtN‘èÎaúzcu¶Áu7=ít‘“¡f^nyù–VBxB t.cŠv:ƒsª^]·×Þû	Ýf^¿¾bU¥¹È\™]RbÁ¹«ªÊWfµÎ¦MÏâ.<Õ1BŽÚBQ…B­šüÛr4÷¼#ÔÛ
fC¼	‘g‰É¶x¦n8§d³Ä‘‚	,¼÷ÆŒ½† '`ñï5„B÷­˜ gUÜ€­Ó©pûÔæ3M”zá‹‚ñwÎ,â n9ssò¢‹&Æ0hØmö.ùâo¶#ýf&Fœ¸ÐH/L¬G\‹6Åàì|WÝÚ§€"ëì*‹‘P¸7UŠ©R… `ì@pãª³Ä2a2·´ô”¥	ú:ËœÓyß;aÏù¿|}ˆœp*ª7Q/Z€j~Èƒµ@¯Œ „%©8Ð…iòU­­Õë½ÌñÒ„GïRçñrs[×n–Z”Ù±éú¤Fìr‡Q½+š«+ˆh¹s‰Ñ!×[ã>N²3ßæÎµÓgLÇ¼yŒïwy+rä+˜_\«D¢@é2èÌÖ­&õ ƒ‚EIág‹ù¼µ7ÅÒ( EÁæmCCÛ6[Ö-õÚØìB#§ýæ´"Ö~ó«!Âÿ5¸òÀ‘9…3Xè]/ì&l¯3–n .|_à-rœ¼qœn ˆžìc„yž4pŽ?®Üÿpj~`iÛÛß	Â ;0–ÒvOÝÃq³Bâ†—{}b|ósgíýÚ½»Wà HNï‘Ð9"
m{ÉÜÊpx‡ów:pGíèAÂÔkuÕ¡§iz²@NŒ43Sàn}EñSC^ÃQ–3ÔgÏŠRç¦Dõ$¸â|{ym]-ãà7ßdlõN$ýf”¿/÷™w‚“#í3/:\1V‡ÂŠ|»¯¡[;Ìf<5Ð”hNÚ«ä­öÑ*L°nÚ‰¢¨3ÑÚ³gÚ>Tºä\¦#äëi´túF­q|”:ŸvF	—ËEôö‚Ã=—/WTxº–Ô¢Ê^(ªYQ	1Ú§Lå|®¯nÛõkÛ¦´/ÂB7úkåê>O(6ÊWc/vµ=ål“¾ä@V»
9`‰Ø^µLð¤…úg±wP¬sO»…ì­¡Ô _jD_¨?ÿÐ-!5÷¦™ž}áJ"==.U@Ûë¿ƒ+iŒQ`¹cHü^,öAÄ­ø­P#NÅX ÖÓ€ˆËö¹¬}FÐZ]t¾íE­¥¥³Ú755
ÙMîŒ™õf†ìîi7à
íGebØ	²°®³·tu}5Ìƒ6Üî­lmGöœÌ^³vbÍšÏ¶;²5‘á‰W:BÞÐûúØÄ©?Ž-æˆ×¶¾º6©DÍ?¯uÑÊ¡ëgr$)~3Žï—"ygÆÓÝãÛR(PŠ‘NÝÜòHó!‹iv`ÒÔÏ-7a± $¤u~ ymÍZÙuÏ–-3î´¢B@ÂÀÓ>xâ~òD>Ù4}.äcÊåò[Ø­ÀåJ™ä:$¼N«q¡~L&UÞ¢÷Ð2„´(Òº-"ô!´Ã=bª J .T£8º^%x¬ŸŽâ*	‘v;zŒ÷làmlÙ6£$íQº`Œv²ù¬Ö3Œ9êÏƒ¤54.îA”¶òî™»Õí`è\Ëé,úF†|Z>ªzÓõ_(z 0åxÎMÐûº¸_¯o-Ë›HÉ}p/+ëÞynÀšÚ‹àÙ^¦°ðÅ‡9¹=¨É0÷=†ôáƒŽKsÍ$"jŸ24F7à ÃzãA·èêèšA†õ¹|ñù²ž `.µòô`ðó$Œ½gLj§­ËÐ}“É$KM	µUeOPQÕ9.^Ø-œ£çÔ¢8ºIãr!Hˆ`í0%ýUL‚‰YG'7”þÏ#éc‚òÁ0îÑ§€1:8­ˆíS,îX"áè¹ÛËù÷¶rÞ·-ý@8œÄ{F.xN*üdæ½eO¤wlû°ïùº§Ÿ¼ÖÜDŸÿîåmçÓm|®¹vˆ«êê1ƒe•åØâs…Q³lVôïìÅöN±hqc‹3!à’	àó½ˆŸÐt<RÄíÍ¿ ÃN¤g²Xe¼³¨Ù—Å’6ó¥š~wÌD—HxS öØÑêlœ­·ßÎl¾¶£PÂè8ª¡±?©8ê<C`œgb¿r†9:faT|-b”KŒ2ëUœ,¢‹bP‰Rê½Ú¤¥­Íô@òoWò¤•›ïìpÿiO©/]–å‡W ù“ƒÇ¿· i†^1xàYA®“½ˆP0ä`õUQxFÛ=²&›p”¾A2¹Ô‹î¨÷_œ´â’°ß}ì‚Ïô}“-Îÿ.Ÿ›I¶’4»²3ß·M-Ó•Ž¤—B´ð°ç ûøú_Ù§ãY(+þ2û×'Ž³S ]Ë¼JH±Û­¸ízè'Ö“Õš©E“Y?´Å)qK<–€%o­MèX²Í¢úkf¸ñY,J^&'sBm)¦wZ „™·æ4µyÙô¬ˆú<æûÉ(Ù½sÍ”æ&39›lg¦w€»ÿ&ó Ç0,ÇuÓscvål6;{‡æ
/ÊßÌ=yøæ¼Z0ÕÇ!X‘©Ø°u)hJäÍoå)~ð¿=AB%€Ë=ðíÍØs}‰C¼Š­Ÿ>Ää*A™¦Ôœ:ó8ÚÊ‚/„3\·‡”„_˜ú¤8-€Ÿêäß:¥‚jPgMuvÕ©[|€Gnì' ©¹¼¹Q›Å%8¼@,à}Z¾ÞÁ¹ÔhöÚ¨ÙÏxN)¥ŽbÌsë© îê‡?Ë §'ŒLóYoy²ëJVÃœ™àC'ShdŠÍK®Åj¯ì|lYG¦å>h	³;ÐSÛRTtý¶@A"Ð¶MxmyQqËf.;‘ˆM»;!cSárLõÚ÷¢^»Ä¾‘(árXö;³Úì"ùñm6°e+Ø;“›•uº«ýÒc±œŽ—–š­’Õ±­ëüNïW±µÏ7ë¬lêþØ4A8?þ.Ž[ïÖf° ÛˆßF)ðsK‰®0€„À±i’ëac b{M@*³@RÅn8H\0ÜüÜÄ–¢¢;VÃ¯±%á1÷±6„…ê­ªfÅ‹¿22üýqð_/ÖÔ¨òê‘®Zø”nëýF>}ø‘øÜ$Wgñ‹ƒÐàKÃ}ÝO¡ƒíŽHúÊ»ºõÐ‰±§CPPÝW;6Ô×yä%Íùs$Aü£ŸYô°^y„ÿÅ‘šë2xÊQæ#K”-Å«ÝTãnõíôUÀÿaÃ³{× %8ùõõj®ìÉmñtŠÐ@/BáƒÏlM3wB3VÛË	zŠ
cÍTXäyÁê!Í®-”›ÍžÙ€âVU3ïÅ_éþþ¸å_/æÖ¨‚ò›,*’¶€Oþ|ƒ?¨«ÎÈÓ)öK•¾ãW«Q¨±ú53ÂÅõÏ²A¡ê¡ð•«º|i bj[X5ÆQé[>Ð)õÔ×ÿÁmnZŒ–sÍÂ2eTkÓˆ•Î·Ÿî²8)´4sÅ'¤˜ùÁ!«VÝ7„ž©÷D‡¾ÌïI²B…Ñ·~ÏR[)_BT˜ÐÖ³fÉÂ…$MßœH_£BßvBœNÞÂæÑá	6ôluŸ„~9?pr£ªTQgŒªsƒfTcÍEüB†F'yÍ¶…¦ñ#uÈ>!¹@22›Ñ£¾¯°ÍyÓÀÒÌIÈŽ©À8¬" %¥˜š‰Î‚ss‡tÏá<j•fe¯+R·Ýèá´óðƒz8jÏšÆŸ^Ïè³-¯UÿVò[õk-£=½½¯ÿ„ný£Ù´¼.øxŽh…³T
‡°è=æF¸ŽÔzíúÅÓf2¬‹œq“"á…Xñ=žþò~P9)`'ƒ~šÁ¼ÎdÁLÚUmÑ%ÎòYÁä
ÿ'¥Ïj ­µ–SŽðRë¢Æzk2Ö¾@‘cïÊÊ2ýD¿£¿p8[.\©¬·ð¬½v"
pŸt¤ïúzßqÎ%BÛRï¶ÊZíÓ{E”ÜsŠÞ{ª­Uê·ëø}N¢+øÅÓùµ_¦ËýºÓóKCÉùâŽÏÓóÔÜÅºø²œX\êÕRÎÆ£ý¬5w,Y/šÔEéþŽ9‘ŠKð‚–+eþf˜9Î`—¥¸¯•K`¿+! nÈÓêˆ“àyêŒãîNg´|°›°Tïˆ#4NvEÃŒà¼½˜ýIsïîZrþAEE?`¼*fvÚ\²¯Œgù™}/'!» ×\Ð×_9šbyû/¯šW* ! ‰êH÷F1ÂùýB[ÅÑLÖ}&s‚ÕÿFŽ­}[U/’qš8ËQØ’éó€Ç{p¯þ±Tü¾£<ÔÌÞí
ˆCÝva·0ûè#\…ƒê™Ù¨Šó’ŒfÙ©Ž‰Ô´W™ÛÑh‘™®À¹2€ñ?vù6ƒ±ú¥'%•µu,! ã àLŸqR—å€·r8§Œ-Ê!ÊÁ¼>pñ^ÕJõÈSßƒMMf‚¥ñHbûG,Þƒ;ˆ“tñ¢š¿iÎ`4*„+¤æF'Páºn§È)¡ÐÌ6š¶CEAßp&ùã÷V¸¼Z¥ª^~eÚm¡œd‹CÓ8ã"FŸ1ÜÅö|ƒAŸn‘×Sa×qåÈÉ‚úÒBü³‚ôGgîTTžÚŽê­;òäÐ}Aß¼è”9Þ=Ždq4[›xzHœ=ƒ8ëKf¢ßÜÜ<ˆ³>(À`Ì®Á®æi¯|¨SQ.¨ãF>×GÂh»èä88Bôe÷^YyZê(Äa•jø£8èª õsèx¾À›ïGãi¹Šk_:ÚGZÁÂëÈ}0¾–†0îËîÓ0‹X´K>é5VUlcÉì)–5.±¹ó¾×c2ø$&í³ŸÈ.2ë±ÖWÊ¿öÊœÔæL—‰aF¢9]š6î~ýQt«ú2Åàƒ¤‹#ã†j1Œ_¬w“3®­]»Îëë-`{|Þ\ÃF÷Íî[)¬_ÁÈýwxkeô•»5JÓJ’M°x±¿±­Áèß_@þ-ŒÿFožŒZó[cC‰£dqéoQUo(>>Ÿ7fÔÎ™s]õÛ8z»ý=Œa/v5x”Û¦ayY©¡½ØN³>[™.»øc½G²uÞJM˜i©ÿÌM¹¦«a×¬a›2ýÙSÿ¥&Ì_njñíl’Hš:}£-Y‹VË¼Ïbz˜³îÓ¦?3¯ñx%ŽmôaqšOO7¡Z½½õ`˜,‹^õ²ÔŽOï•€(j²ŽBŽ09bºkF,°€WÑ9AÈÚLónÇçeýå’5 0£3Æ"ÄçSPJr2X711½QéÚÕqÛx
Œ_Õ.‚kcÿ‘ðGxý§¬Ïçîüx[Ð¿(E•>¢¨>ö}ÁJiqy%~®ãí™6”“ï½åÚäÏÑçí<¹1
"YˆFícEGçw‡	¶Äi&È›ä[Ù-tP0«à@2”;øo¬’6Ÿ¡‘´Rb€	Hl÷‚ ˆöFÜ¹´«½°[*’	9µ˜¸ø×)ÏmV±ê$ø„@Ò-Î0r:(dÐ\vó™¼4§!sæ¾¦‚…q8X…0 Ö"[ ËA ˜°FÆ9"
ˆ†¦';ç¥o
9}îìò£EQ½Ä‚²ÈŸ‚1„ó|¦0îè= ?(±²ü¦’û?ìŒDÑdäàþ5³Ã¹ˆ¸ýv˜+Ü!ÕeÏSé7ç‰‘3ä)Á|J“¤ñý£ü÷_ígÊñK[ÐûM*xú¦\ãDuôÍ\µÒÌ%—õ fJ(Å‚%ö\tÀCd[”þÜ%îhoÏ Ó„zNÚ+ÓZYéÉËèèh§?môÈ²X/C¦CÌ\¹	WëÜâÙ§àNèP¬hŽuåŒæ0ø»8¯úŸ•+YR?x$4]S(N}`ÿKB“c{:²†ÓO•ôqvhN{{eŽja,ô\šç[à#‰€I7îö²TÑÎfu!öGNž‹r…¼h	Öqµ<”§åÆH¬(0’h®Ž;åªSx–wE+°%C€h@hå$Ø·³ª‡/xéO=»–›ÏøÆí<œföô¦Hmˆeº“Ô™ÐScáo–­š='¨¿º€U•µ£8O3»Ã°SF¬Ñc;’ø@ŸbóLxT*l?1ú¿ÃåY®€ÅSË›Ð ê~êºpêQOn®\m}u«u õ	Áž¿ÅšžieŽ³D'OBt
Ó$èzÎ‹YþÆ‹åIËðÔàÇÿJ˜Ù›Åü›Ç6Èº!<s
ÄmgÉéfSøYJº¼Qû²R”œ\+>rÃFÙœ~ÒË­•^þÅ/òÛØš‰uµ‹K§ O‹«öµ<é~Ò+¶:A>RÖ‚YAÖµ[F¾ÀxýkÃXWoûÙ×ë÷ñUV« Æ7Þš6 |¿Û¾9õq4Ÿ@ØK>ö8‚×GØÜñaÎíß:zLŽì³¢)P4|Â3Q}Ä©£Š£o‹4»‰»
E+Æð¹Í¦ƒUJ?¡þðå®§N"©{jÄK<žóBXüˆØ+ w[ß$èÁ¹Ï„ÍÃ	?;÷ Jò­¯l˜ˆÇvÔ [êÒµó£B©E†Âè¾Üšñ	š—ò.‚ôzWOŽ$Õ°JO%ôÈóúÑ>t¢EZ	|7’|ì÷do(×0TØ˜FòÙw<™d9ª¿3ƒ)üIÞ÷¬Š¤¹‹g¡,~ÁhÈë7tU!(ÏŠÒ™0184Ó&µk¹z»ƒlnÀÓsÉëYm¬½k×î´<ÖzžŽ·"Ÿy«xØr¯a†Å_AË›v=ñÖŽ«m-võÄ¿ÊÚÒžˆ‚®;Ö¯Zsð¿Áôp|KÒ³—“>Ž¦ŸùêSÆwÅ†H9Y±ŒúßóiéÛeKÁejß¡ŸhtKûÞ—’#Îúf‰`¥¦oÒÂ:•A¾)[Ÿ3}×ö$æyfyQöÀ¼>¢TÂ«³åþ@£“¿ŒPáùœ:í§!_YÂ==ˆš{Å²ˆƒÚDÖ è4H»æC£Ñy÷Z‚¹Fq|–‰IMK—ðÝƒƒn¾$=M-<aQ¹JA$I/%‘}”“U?#d.Ê`H¤"
´÷¥@ðr/$áß»Ç—NÞ—Ò.Î[) ‘IñÕÕ´b× ¸<ñ†J`2(Q¼Ÿ‚`>;§“l¡ÐC×5=AFòâd 'ù»ƒ9çÉOì´Xöîy^ôÆ»6Eáã¾´ÇZŠ7XK¾ Øíï§'>7ïAÞWåå‰þ™àð=ÝÝtëv’’U|ÞÌÓ§ÐcqO°ˆºƒ²ìv™Ý(N¯sò€üDQáäŒôÚç„œ°„ß·QÓ@bþŽ‰+ä6†¨&ž*:öGçL$ù;Dµµ¶î!<OwîØBœ làÒg®]Jð4oŠü|H!zØ‡$ð:ä!‘Á?yÐüVÇ2ehÈ ¨¨‚bþ ·ãX±¬ëï
±²ÝúÖŽ¨ìšÜ‚q¿:•ž\]h³½ÈÚÿXšÕtñ»<;dYŠÛ`ñ—­`Ù*¢¥Åè÷Áb›Ž©ƒHÇ4­k¾©ûôáóæ54,°_ýšÌL‰T,¹'¢Rô‰·%ÅÂ¹ÝèµËjø•×ŽA	½<ÝÝ2"©ŒfÃfñ! z‘›·ìT·D¯Šä½½ã¶;¹$Þ*Ì÷I±m=ébQGþÕïÊŒxº¹#=#¢;ˆÁyÀ ­ÕïGWqE‡³0„Ü5Â1sÓŽÔƒG™;­_ûÖÝA0dªìvëÛA‰ö²¨è… ÄHbO"øŽÓÀ¸ƒ0TÃÊ0O’j§¾{ûËG"…p>wa
0,ëkÐ:ôëÞu0ë&/g\æ'ódÇeXà©N©Ëµ/D"Ò…Á¯Âµ—í— Ì"¾®,/øèQ"F¿bè£4ÕèÙ‚-)|ïnS÷kÚS*‹Ê.ÚÐP9+Ž´.Þ´;*p~} ºßœb=ÚÎÚS"èÈ=%oÛÉ®–“Ôy<‘euNâ¬_œ0w÷ˆánŠ¢”Î(—BnVM:Qà–y½1 ŸzÜÆ<Þø¤ÚMV¡õÞé“l• 5ýú«Ò~f@9ª@°ÀÚ¢­iVž»âq0e
!$zÎÓéç[[=$ ¦—ˆ±cÈïZtTëë0'—]w·z3gNèQ5çTñkÿ|ïþºo0»t¨¯ïœÕêYÔê^'ÿ²Ù8®»ÛÒÜ¬ôš~&!°[<³ïÔ*QÚóU;RÔ!ßžïÊß.ï+:‚!Õ‡ÏÓ:ä‡`ú¼r]8Ïý;,Êá:CµèT³ª‹S ·rÍÑ†C‡Üþ·…{â™&·çê³J¸òjx£t!a ø‰$Ig-_2Xì¿£î­înÏù—ñåz¯ü¿SñTæ8ó$z>®9uƒcCéhzgpî¥û#/}fwA¨[S;ÎÂØ×¤šX0ÿeÑîô$5º¸x
,µ/åùîôMÜík>0%uf‡)ýU ®Ëú°h­É™¿<Àî69-›À+eû—eÕƒÖmøä€åC¨EQKÜÒ±šñÏ2¶oßX©ØÏ®õèï®à´Â TÍ']_¬ôÜ
>ÌrgîRŸQmN+oÏfÕ;ê£”í×{<àÃ±V\ý®cDežÖ>¨©,õõMxÎ}&~v®Oå7't_òmv¡ÙG›=²óö4Õ“ yÑ^"ö™¹fHI¾üªªgÆeÑiEG`ã‹;ÜÝù7°ÑrX6~`†6Y_´6|þ`3›Ü5¨³ôŸwK~‹M|+{í÷ŽÎ¸¸«µùxðo÷³²fcù€™Ã”—¾&ÏYÝE§ïú`Ìö~oHÍ¡gl:Ê§¹ªbç)¿òÃTÞÚZ?3oY”%& %"¢x_‰²,µˆø"ƒAßH£..–K_Œ¢Ò:4íIÙâŒœÀË’‚çê›Tg­`vÉ[¥
úÕìû–¢¹=|êòïÛpúõo^«Æjß|;CòV†¤±qVúë¶/öÌŸk]U §­>²ÿµà¯ïÙ`nRì\oU.²^á¯M­V~ç‡©Ÿžõ‹ç/¶dø§DDYÞ§²sÂ·}ÛVíßZÿ.•"^ÔÉkâEPhv±G™Ÿð€%Æy&eæÏ)E2þDÂ<ìç‚¸O`ïÃ7æøßÚmO…\p¡J¸qÌ…6¾T‹Øµ0a«pêê6¿Ù_÷ØŽŽ2wMSDp:þý¨>R˜v£CJ}óÚ™´Jøõç7>Ïœ0 šÿ¯—clÚW—
±ìíÑÂÀÜò	÷˜™½Þñ¢dýMG†øßÐ°¶?b$ìæ
zÊY)ŠuýŸiËŽì„ëog"+UX 9Àw÷¾ùú:„$cgrØR¼»3YL,p2¼÷§th›{¼/œ³äAw#ºWYu5öÙ²å…ˆ*Ï"KN|Ïñ;îÖ×?ÁÔ%OK}Ø<kÌ“z ç6`¦`dúå+Ÿ¦g¤ƒ6À³xØ×K¦&åS©Az2’…4»2œxXF{ŸúŽ»¨S¯ˆ…ÐàßÄ^Tu¹a¡‚BW´¢— t–G¿ujZTæäoÐÿ'y¢ bÚ,ë…=Ðð›Ç„åšÂY&Óv”žO­šºØÓ…*èþÕ­’¨Q{75¬èÆu»S×5FoÕTŠ°uõo<xŽ©Ò‚:ëuXêómÕ[?®ÞvqvéÛuÙ—~èî2óK1„â8Ø‚±1­{“JœâdS¿6v.E·%&†Ì¤3õw¿1FÃz:=Z/Í`L[ÓÁ›_¡a)Ã\û<­€P(i¼A
gA‡Å{&¸¥ºMjìX*E¹îoM“&Jò2¿ig‰7§)§Îœ¸îçN)TZÝ¨6zï€81¦y~BQH
	Â4 ü©ºº|Ûöï•´¡r§3Æ•å(aI
Ùî|‡àuõØU¥f«álU©\ßàz^B¼ñSÊ:½q²+Ò·öÜãc½\íÏÞ¬MlšÐ&³L1¾Y“f"„À "D%QC/
|mš¨
H‡k‚_'¡žqg`øØ
83@2(Ô²º<­áô	ž_Œ/æùÏLà{ã‚šíè¾ìüAvž¾!xÉ@?0î&tÐK7vŒèÄÄè;íFx×¤g—¦vxæ´!]9uÎJ]YÞzî”’n8$m½ Y2<!IHø‰B®ÔuŠ5]*‰)Ñ†1®!áîÐC²‹Ïm`ZÔ´ë’DdDðü<RXdú
ï–'F eÓ™÷žy_&»ËJºÃëe†ÖÄÖÖ;»²œÎ¡Üü¦Gd³kt Ëå|j53ÖÃrYëgÝm(¼7}©SZ²ëë@ùÃ«÷BGm§Œé¨–¯ó›Æ"26NtÄémøÕeLc">?Voã€xV’ÇpBÑø‹-ò›êõ«HôG¼°­'UÉIh“Ù“äÎ¥ß·­¹t‰Ý•üE„éB¾þXEÿeXº‘ãÿ¥”Ñ™tfo>_lL‹Èl"	5ðÛ×Ý“;¶Œ{%ý|ï}õÌðÜ‹;vX{ËÓ¾VÁ½BÞO¹01þúë==…7ÁoãÛ¤dÐ‹¼ö¤»]Ñ	%<¸P#
f8vªï*íú»¶IºK»ýGmò@­WwÈÈË:[›«i­mÚý%z»4šîH8Ìc›Â*gw¨>ut•M]D»=™F—þ4Vü%ƒŠµJ’É»ùÙÃ¿PpážÅÿ—ø¾ù÷ßÝÅ!/-Ê
ÜõÆUU5×hv6ÅúPIý¯Aì_¯ñkñùîˆýågÃˆÁûƒþÎrSvJˆºQû¿Ñ	gý	v°´oŒÆoÒRÐ”6îÍNá,gz*Ì´_ú5N ò¢$švJŒÂÉR~tBÇ s¡O“ê[ïŠ©óOýTBeRöÈ>(ò^²à,Î¤®¸pC¡bÒdšTVV€`¯'ÞÅþ€šQýÚT9‚	¯®ù¾é|Õxÿªd}„©sûÃQÏ]Ú~_2#è2 ’Sw‘ˆ=n›0ò»•XÕdueiP\WÑ ŠV¥>Œ
&ŠUzöU¢EFÜ9>ÅèJŽvôl4Äôo¼ÝÖ?oû‘é.P-Ù3ìåìÝÉ›úÃa½ø0|ók„<oø üd0¼/õÙühz€öñhfšÆóæs½T€|ÉóK—LL<ö#.K€ºÐbñ@»x1K"¸ˆ_W{Æ'–.«
¿µTÈ*~ßSÌ*’e£¡ù2NBe,‹ãÜ‡pò*ï7aº[Vì¬Rí[òì‚â×¢•ííÊô×OôêÌ2ñG'dy©Ò%N*ÀeŸU„P#7žœz;µŽØúú9nÞ;0ð—ô÷Û$Í]’®šÙ3›7+ßI–/ŸÙ¾½yéÖÎ´·s%ök>ýÌ{faë¸ÍjÈéG×ïBFû,ö)‹ÉÞk·cï)mo( Ä1¢ß·.LOO×Ý_[_WfÏ¾Q1Ë0sõŒY¼QAï!ì£ÙƒÅÊ£ÅÓáŸmÑ©Ô%K|³V¯.JUëÎÜ=+°rÝ‘OFFÆßÕéÞ	ÝÏÑöI¼ih”fÉ³>ö×¡H”Fžû. ðÃˆ=º‹×ÄH­ÚR68X¶×"âŒku{"JŸß†@lÀ×àÑÏjèöóCÑ{Wþ£eÈ}ê;æ²h_q›)sé´
¥…FŸ{ŽyŒB=Édž¤RŽÙç}´ÈknG½œ¡ýgåÞÃ:d?;¢¿J„P-ÖïFÝ¿ïU«÷jß×~h.£Ý8²K«Ý5²±™óéÄ„,&Çðè{Ré!1]ÿ2¾L¿‡¼€¶:k7ë&}ÞC«ÿ"¦ˆ¶Z9a±ÃÑŠ8Fðïy±¤þJÒÆÃ prO¶Ê0sw÷ùVF+ã[þgŠ¦uŠÈ›#B3ÃÓ8Ú‚Ð[pÁeQôÓÂvÌáÞbfŠU´ÁX«‡mÖú:lvRYŽ…¼à"Ë%JµÞ3Là1½.í£Îœ©œ„ñÒÙ7 @:’¹¥ä¥{í|©d‹zJø@ÌFH„Òû{îÔ:ÒqVE±É•)¹¸puæüñ’êõÓ·ˆh'cAÅ|´T>æ1*}2ùÛ€D0¯×r-¨ˆÏPB;uÁzdnÖù˜Pz'k.XÇi ­:`ÕóÂH/ò
O¦uI‹×qÄXŽ+\’M.ÿArù
ósJk¯\v%†>Ÿ5Ü8s{»VÉ1˜ÉÑûôÌ:¦Ÿ½×”o;/ ¾ÄA¨tmQLü¾åGÏSò–-2Ey¾}ð$ýÌú$,x¼ŸûlÑuÙŽzü‰ÁAñ%äè+µ†m¾óü’ëñ„¨’ŸÐ=(WåÁtÆÐ[l~+È†…Éì·†ôàòMY™Ú=G	—-^wtO0I8ð;ÝÒ#¾L˜EÉ}«“›ü%÷²>c”vü¾\-ûyníIæ0ì#âÅà³7î)¥gUOôŠ­š‚ûúF²ßÐe+ðÏBö¥á~*ýÖ´öìÜ¾uÍ
³C³·“OQÃÀlj˜û¦šÝ5…Ô|¨öß¼ü›žÍ5¬¶Ï•ûîk‹
L¹ˆþøÿ—oîW±ß× S8.5e®]òå&XÖ–È7&æøWÄhÉŸ=’Â5cÁÙ¦~åÔî†ßš3øÛZú±a`Ã»ÕÚ6áyš“ã‰î1É#÷»nÁÜ&T™uZÎŽ/Ïî5{jºéQ£'oÔçY·ôË4,^US§¦ˆÕGv1¬3@“at}`cWKâÐ\ÒÔ(ì
D‡¤-:“9øµjà4’¸éÍYš$wäA ß*ÍÇ/cÏ`$ÇoßÖWÉ×!øy¢IØ4•Gh^/@lõ”(Æ„æ{cEÁ£ÛdÙíØ’®JÛXd$$*!3&täcø·Ëøâ:Û¼.µµ×t7à*p„µŸ5x®~ŒÍ6‚Aû€½âƒØ
ûò¶¦ˆ?˜·Ñv#ö_›Øk«”Ÿöò¶ñ„xx6ó{/üÆ†ÙÜ­[l‚Bõa¼y~«æH½ž@@]WÇ†'Œæ
¥90pY`Ì;<n¨°ˆwE8C~âæf{ÆÉø“7’Júz²¹`¥"Ñš(þ+Þ;¡–‡2{~z¬Q]§£˜EG1Þƒ^VA? #àößI¢–’|€@òI‰d _ÀÅ$ ÖÐh$Ÿ’«FFÝXzÕ}:ÒÒ–+ãÏµYÔÌ„ImÑÌ˜¾ ì·E«róO¶t¿©µÃÒ²¬bÃ¯»&€"IŒéØðÝvìbt}Ï¤Z‡­Ó‘g_‡*³µŸ³%•ÑêSî:4àÙ4ëùüƒ½›þM"9rŒÆ‰ôw%	T†•«jH¤áeGHàÃLÈé$€À]Iàä’r î”!Á:úØ~À«†I$Z¦nU¸4-‰–BPKTZÖ
~
‚)8ðW¨Z‘`ƒte“ùf¾1¼ÊçœÔóÒsk¹Z.Ã©´s'Û›:ºò>d{‡'0m</éÕK_e¿Ò½’#˜÷™ˆ‰ž,ïìü‹}„•è+vºü{'#2[÷‚!ªù‰ØŠ[Á‘Õcæ_ÞðÔ×gï¿6
MÙÙ`ŽC&½¿#nNˆù€¤u<ÉsHiÜÁ÷I>¤6]!é?úÚû†#'‡yOôFŒMVETj™aÏJàv±
.5lM·§K|Èâ[›žÞYÉúe5@ÔõmÞ»Ïûxiç‚,â6ò’ºßi¹%yKbKÇès
¯Qeªe²õ ÐòÖ,SÉ¨×À o¦®Ëåq«ÙmØ¿Óáâ6ŒùÊÒ_5þþ(æ{h:&Aòý  š~±‚›;îjzK·˜q–C)£fƒ”EÔîësÆSx3%HÝ@%Ç$Ä©T–’7D¥‚‘U¸‰F#dÂ#ÎXE…Fø‹ò6ìš0á:
Eè=¶žo/Â8ý¯é‚‘õ3ÚÛ#õ¼·¼·Ç„OÒHkëÈNèrÞþ‡”¯÷xÜÞÞ cŒò8!¯ÔèÝ7ú5êwúÁ;Ô°ùD°ZöåÝYí‘û¥JÑÙîL^ÒŽüà½&|opÈ^\>|ùŸ9Áì¥fvö±Ù}‘Jß™N¡„gŒ³Óït\W°ð9•*£mÐé6ÐdEiÛË¼Õ­{þ=êâg“Ÿ„jÞŠÒ[Iù‰›â:úo§úÿQbînÆ“$¢ÓR H€ë’ÇW¼çû{4©MO#fÕÔZÀÑ[|ê·GoGß±êÃg‰è©sºzÆUk~_"ìi/M($Å—õÈÀ]°^ïÈl­¤°î)¾à“¾·=|ŽÁuœ};eÙËèÂYûHÂÖ„dÔKÁØ™[6·%“|È$ÞM éˆBp¢FÂšWZ'Ž8ÍŠ]YËfÐE><Žì—‘)
 ãÆ¦DnüEFãÑ|Š( ÒXq5+³^žŽ·–V³$³GúWZí(½ÈÀ¿o?<! Ûp¸ý{œq±´…´_Ñ‰‘ÖŽÆ¹j¥ÖeöÍßN èíÖ[‹Æ´ZySGR a]Ä5ÆÙøâöÓ‡…B±XÜæãvé;*ÌŸjÖ©îÃ ²/¨te×ÄL˜úÝ¥0Ÿ6±Øà£ë?Ý^–q=|	°C1¦Ñ~ÈœîçúZxó§tÌVvÙ¼–`ß¥T×“õ·“n÷3wà­dþhGSÛ•ÅÌ*2,Ú1I¡~ÿÕ“îýüˆBÂ!-…DGKÁÐËž T&õ¡ÜšË§Ð×ø$«4º:šnCð3y*˜ð¨]68{p¶#aä¡ðÿ‘¹ñD·ŠàSîÙæ%È9ê¤S§’Ôùö\\ &pŽ-ø2M {çê6¥Vz©òÈö¨mA\åê©w¼Ž1˜BN“Ü…`Ò“Lo¨S<F£'E­3Þ72¡ÕÙší«&>D™%‚ôñœ.ã/
^PÕ‚fÁ:È&8”È\¡nh}ìÛÔ­ú(¿þR.}ßÓY»n.±Ñ‹£Â±MD¥F–Ñcþ§¥ìªÝ×šå—•úZ¼*•«s­û^ûGN)muçiê¥<ŒT³ñ¡QþqEÛV´(`cV`]qJÑú"ŠüŸ«¾âUn‘dÅã)¥ø‹°]¶ú¢8ªhÙ²ºÎGsÚãýó$¼aQåKïØ¦Ž(wÆŽß@;¢Ü5ÆßCœ`.€³ü©àC$UqàÊôÏ™AGé,*­òßñ¼Áá—ªè xb.ç½b â®(Íü|ø‚<:ªìHüàâzT:ÄÑ8)±då¶°ËÆBÍÙðCº	œ¿0>†PpÌòtK€?¥Û£å8dÓ-ÝâçvãD@/æI–Äûå&|ÞÑ€Â¶®AÎãYðþž’¦éaúÐ"C®´èý”¬›•vZóQ%5´f`Ìþ¦!Ü°vXp‚ËM)í}åÂ…y"ÀÝðúüÚZ’Ú,ßq˜å)X›'‹’ÓNQÐà(Ve"?u¬(˜¦ à®0ã*eÀ7·Wœƒ½U˜:pUïAÎ‡šß	„Žëhmt‚ØÿÜdbö@HKPdp½éÿmR9•72ùØUðqúD5Æ”f…/Â¬Y+Q¨Œ™?}ýû"”B6¥Ûþ˜\™[cº8žºÌ%Á_JòŸLŠ<ÎŽüáËŽ#>žµ[|ÛlìD¿|cqÑlPÒDº8SK„–E³G>!¾¹V:™[`®_ÎÓ¼ŸV]ì¡¬'·Á/_RÎrAåÒ‚ºU±Rq†º—ÈÆüÏ8¤p¦8£üØ©FñldßÍŸˆ¶#¡iUDuÚ\VÛC±?½C”Àh£àÒ!ÀÎßËŠY±>LÂîãÂ!‡• £ êÎ±<VØ˜LŒár^nõcøµÂÔáÍ‚.*íE¡Nh+•v†»p‰~Á¬…ö½qÆƒxÎÌÕTjºàMÚÅ¢Où¸ZŸS›¾Ÿ"ûå^¤:Û!ûÇ‘Binûy‰ÄÅ¦Ói„1&72 Š¥o4_¿!ær|J8
ÙTf‚ÜþÐÝárÑ#
Œú]¿Ü4)Å‘6þE™¶à‘Vûókùæ'§óÒŽòtÚG@J<ªŽ³£N'ë}‰~¢íëhÿÄâÂ7ªkˆí€áoôøÍRV8“Ó¨~=ôÁÁ"äÂ}ˆ¸ÌS_ÇnÓ­e{ê)×–¡çßÙÎï_T9ùíU.pš<‚z­}¨2¾Aæf’@÷b¶[!&‘É÷	€U´Ì´âÖ<™¦å<ÃÊ4çØg;™s4Æwì,Ã±3´WþìY;È=9-ç-úò¹=ÀÄ³ÞÉ‹	²â÷¨wXñ"VH\)äÄäšñs»žÃæF×ú¹a¥ÈBÓ­é"óëÈ*ÆIºhy=f~J ÇÚÅŠXJ`~Ì±ÔÒÖÉVÈëjãÕæVþ’S…óêq‘HžöÃ¡ ó<R)é*Q!\àã‡¥`	ëh)°—¨p
QI°ˆâtÙoŒwfá<M’Ì„?˜ndò9œ¡G¬OÜÀû×œ>‹^÷‘+•«¥a´]´zÚFZ¸4Pµ$¡µd¶j¡\RÆšük)¯ˆGI ÇÐ#RFVJ'Awyƒ+áTJÄeðÿß¥ôŸªÕ×Fk)–×DMŒ$è¦BK˜4µ'®]»~è‡‡Þá|ð6ÎF®C‰Q ;‘X<ígå¿tÈ&³È’;‘+âm[/Jsû˜yâ“(°4óPóÉmþ¹þ$ß
ÌÌ[F—ËÜ+›Ó°îÅ™3H‘vôBœç¸—®¸4ÍpK(zh«})8‰=z²Ë£ìwÍlh˜‰ÎüÄ¥
!à L›\»dãâ–ê¼wÆ]¦/B~4Ó¤-"³‹˜Bó©ŽŽ\¢?Wš˜ó?ž´v%±úÚE¿kÑÖ¯Ÿì\Ù¤]j‰æºúïòäz•Ôõ]x<1žrù¸ã$ÉPž@ÊeVŒ¬œÓsŠ×aüû:#]Òqürx«xâ„Ü4oíµÚ|x1‚…µº§CÅªB¾šº=Š•h/þúÎW‰ùùxú^¹b(Ê…ðƒüóo™Loë`.ßêË;ÅË®ODÂ·i„-?Á˜€™Q3t/îà‹ñ¶•+Êh½UÖR­Øö{÷"Q-paþGuêÂ.Úý‘%5FîÂm=É¿£bXŸÜÖ×3áËc.y i5§YlK‰‘è|A–yja„v…Q;ŽŸý¦½êðvP’Tz©ÇK˜¡áÿ°…b\ [Í	ÏyÊ¤v¥yJU9¬Ix	D¼xÔ,©‹6£…A†ïÂ’y%Üµ;0=Pü§•	UR¼Æ¾¾^sìÒ%x~øNx2¢]Î(9m{[qr`<¯{u<i>šÎ›a$Ÿh¸ò/õç½s¥aàTòð›ÃÜŒÅ™¶sŽ°ø[V5öŸšu¼ü×›‹îüõ5êëÎ–GÉƒñm}Ùíû1«±ï¿¾aÏƒ\¬®Þ³{iº¼*ª2ËY–æÇÅ¢'‡O9µRy5[4XZ«TÖ…G¡.VvXSeÐ¦íý‡w¡ÅáuJÌ¨I=œpû‘ßYUN«çR?ü{9PoHà>R2³Ö€—0`Ò&PF‡ýhãFß„9Ó&,ÚüjÞž+ÕÈ^)2ÒjÊÜ8ÙŽ<8è=å9uÎÆ“†,[æÿ’w0J_oª /—[1³·•‡xoÁ(õâäÀJ}ýÛ`ŽF`«*ï¢F¢:0+Öè-&|¶5Ñ
xƒùæÐ0î>>á°¹ý˜ƒPb(Ùq€‹äMžêUÌZ·{:‰=+Æ3ëç¾s¬G$jÕª(ïd¢Ã95šuüuŒ¢®‰Ô½ßÌÿ>«=—8z­;ypí¶ºAþÿRS'ô3ƒçßœ§ÄÆwÏì'OjZâïÌÉ™ÐŸOK7¸=ç·ü`“ÓðäÎÉ%ÿÇ{l)@,Q±D›ÄiËÍ±£DB/VæÓý1)°ÍÆÀ¾Æ¬HA0þç*UˆªxoSµìºMY¡mÊQ?‹š^ÊbÛªºOž\Re›Hˆß¼6ôÑÒ9q·Î¨*ójyõ¬µ€5¯›ígÔ:f¯«‚<òæx P»û¯pHŸwñþX­ÖÔ˜%	ŠªÒåcˆÝŽ$+­:Ðì2k»dÚ#µQÅç»äÄaùUº¨ y†Æ «¶vìþEcýjæ0%TnûÐ¿6]¥Ò(K¯¶mU­VWM>®Ò_9«b#°:lJ[…‚“â°#É_h­aaxG~‘ŒØÐÄ†±³
<öÊv±»xéÕå/3&u%ÍºÁ5ÁÈ!ÖÛ<¶rÂ)›ÚmX"¶.¡û³)
/NIñy62y±“åš§ Åež}á[O&íü(`îÁÇ#0š=÷õp”á%¹³|–¬ïh¨õÕhwÛ¢"¬º@¾|¤èS¯!_í«¯ã¤_Ð5/„ '?=žå€ë á'Lì ©©gGùì	1ÇÚBV‰O”è¨odézM„ðÇ…KÖô´	„£|^Â¾|Rˆméòz_Tæ7ÿ%,éûû*æra¶¾ÒN+„Yø2=ß'<qNÌè_Î¸¥öÞÄEµÌçŸH@D¤Ë–!*–K§ƒ9º"‚}ZÚ<ùú¶ªÊã¨’½nœ=$ßÛÌÚÏ¼“=G{¶™õæŒ%[›PLàˆÜC®~“Å‹ƒ>spvç
¡¨lŒô0
–²é @q"tËžvªWs¢GävµbVÔyäRU†UnïøPò§Ý÷ždvªÏìú<ó<“gï-îµˆŠÈ™m[¦þÃwp¢l2ÓžÁ‹Ž†éD’Â»ã
8œV~X;@“ Ö”ÔBJ›€U,à™Žµî<2Ð•Œ‰;‹‡ëŠ„êÿÅ™Óé×@0“´í‰¢„ð‘vv~ž¹o°ÙÌa.ã?ŸSúðÄ°IœäõLO€pK~5t­Æ®±ˆ5Ó=ÌwínÒÉN–ÈÚ* –'y·˜FãE¨cêl(*þg¾aXãÖOgþ'~õ‚QUšàBK«û>Ð3úö1ªJQW‚ªÔx!ó»ºUÑô·x¿ÌpþÙ‡wÍ#ÀTp|uuCf´-Ç}´FºÁ£S2Ö¬ü/úÜZ§Ý¢Àw¦¾§†Â®±‚Üû”á©nœO rûÖ)iÄ·$)¼Bëª¦ct´ˆunQM†ëdiîÝ õá-Ã"1JŒ ã½H$ÇÐÌ¬L¾9ãshR°íh‰ 4v×¥ä­ýÀ9Âº0+T“…P::ÑãIN†Ü3‘»>Ë#Þ…lšÉ¶ûÞhŸeèŸtº˜˜V€ÌÇ©ÜávŽ–¯ƒXÍˆNdÜiëB¹§Îey|Øë zÒ°Ä²XœÒ,õÆb¯		âu‘Ñ´_' „(ý˜Â!uú£øÏ¸7½º†­Ñ"®É@°º„Ü—Û ¯·ƒÒÌ_€Øâ9žvï{l`@c	}Ðô—ç1mã8%²–µ#€èÀØ®zÙ‚1uû §hW¬¼á®0¯PÏ‹¼!„kÔîm)5ÅãÆ»Ì,!¬^Ôž…°lÈ¨üät&—–”œÍšÂ¯—x@fÅd÷ò€
á°‘‚MZ>"(âR¢aôàé§Áá 6¦îÙVÃËVùáàÖ-*†yóàÆÃìßZ"»êˆÖ1&ŸÐ!!m‡Û¯nRâZ$zÈŸƒ&Ž¹}ñGQb‚>­zS[#°V
×nðØ9h€ ß?Ÿ6†êl)œýû÷¯ŸLó•"þ’ãf`¾èºëÓ·Sû]ý£Î~t£%tìxW¡m‘ž%päJ'â?ÆLâ	8å8áò<äM/;»˜¾‚Ÿ³_}³jCÇ›vùÀ°áõé„æ¦?Pû%]™·6æõãóô$~2Ç/kbì6FežãsIÀ¸¤ë"°B
ÞÖD’€ˆ·Ž,µ·ìIhJivÎ*Æ†e>9©‘ÁîœÉE¶ü²ÚÐ?Æ½?/*ÈŠwm?-vŒßœF1„R	A¬ÜDÚænçÓÙ—§éê¬Ú.·S]ŠDâ0OHf‡6kBo›„ˆŠýX~&`x÷]–Xc8“À„àÞÙÁ¹ÄY¶³¾5-DæÙõÁ³iÕ&¾"Ÿmù‰Ìé“
÷P‹œ,BG{1âeD ÝG*	/Ùÿ$(J%gv™K!ÎÅE£b6î8urD´zRÅ!y[™Àžœ[qÿˆ´-Á¾w7z¿“â¿þÒü¹¿%ñèÙ(OÕê©…¼™cÐ@u~$­çÙèDÝ†Ï6öÈSuZ÷Ëo¶(‘æsµìæ -pz;3oawï`)®³·üm½3œœE^š¿» ß3ÏÅ]Ë¨Í)6éóô=ý²ôU¹Æú¾#>hÖ‚°¼€Õj7#üùW9yµB¨<É<T{Dù;âaÃQD¥`ü>À•ø£65etdÄç¥ªßžvTW;Œ«9ƒæF²AÄágýºÛ4©¬ÀN	Úœ,aM€å „‡˜†89ñ·WA„Ç‡0ÁðÁ0ÂðÏÅî<EÝ ©á*O(ÄDª¸ÌÃ]!ù¤qæhº©üÞ„’šô©´“ž¸cpË~ìç(1l¶ý|A#,˜¯ï±Þó×ž®1Ð$Ûzh¡}¦´¸”*—knlJµËÑ›ír&Ð-Í¢;³å£Ÿž]	.ó¡^5_.	ób|ÏüZ»¢ö×3¾1›/M¡'Sýî¿álÞ«Jgt•u•4È©¼ñ*œöq$ú,)!ˆçÃß}%ï^óÄq	pñ‰)Ó:P/w|Áº©t É#~Fî™4îÎîæŸ³%© Šgö~Ô¹d)W8Æ±m.×ƒfíS•Fºadø·É5ØAÌ‹ˆ¿ôp-h*8¼.R½XP¥»Ír"6¸Ó›‚‚mà0êO¨7â5óÖùaÞ”€‘	"<a	cå•J}UÔ"? ¶{7^à_Ä/®Òä ãT
ç¸ÔÂÜÑKÙ8¬E1+ðÏÛbq"4!#]ãµgp>0R*âSššzÑÆ’Ôõ·•…µ §¸/[‹öëÒ +1«'EPM‘@W”\û-¡¸Ó¦¡„Œ¥o`Ü8›¼¼À{èH|[…,´› Ê’ ãåtŒýŽ ?tè¼áâºµçõÇˆQÜøáÃ#ÂŸ)¯æo¹«}Æ¸FˆÁ®ºt:M}ƒ°Ç‰µ)• =›„DMMßýó®7þÏ.AâÀÂóçÂ#†ñÁ¨™ïB…t Ïêë?>R7~ÕPo…«ÐÊÍœÈZô~øáúläï¿êïÔ)ÏððfLÀ6ÏŸ¿˜åÒ‡ÊŽŠîì%ÕÓ|½Òœ™‰ªl,eú˜ÃG6˜®/¢hõH"‘"î·’ËÅU‰mŸ¥ŠúÍðsÉ­_r½Æw %­ŽDozÒtíø½Z.=BÐìFàaA=ÿ:7ãBŒ˜©®½€9èáç‰#µòÿëä—®æ’«g[¼Ë'‰—ÈJ~Mb‘ÜDÈRW[räWý¿«Ï~¬<9éPí['·0'1Öd¶¸ j@+c¨«ÏÐÔ®#Äu]·LÃ¸viI˜½#Ý‰ÊõgSD!í¿‹™J°z$*S5ö/g»;Qõ%©!šâ³ü°;q4d‡Mmånªð*˜>ÅEÃt0ó}|ÁË—%ýÔ¢-i8ùMÕßúqK&-³ÉA³À‚ä
Ä/BÅüÁOö	 €Ýê#jÚ?<»@+$‹ôˆ^e€­¿Ã£9÷nQ,\Û-"ïÒmx"PdDPd|ƒŽº0eî|ñ¦¾xC_<×°a9½Ã½£¤7FñK›ƒÿwž([w£I¹wKð³¢­ë]¿i½øÏÄœ¼ÝY¾çÔçÃ§§^vLqãúáÎ%àÛ–Orÿ	;QD‰àêèÉeù·ˆÁ&%„|3súz_Yˆ0]ŠÝÇ#ÍìŠn-F÷]üónÆ¡	æ”(›\D¯ûL(ú×‹Õ{T=û¦n´ÕTa&ù÷¦ía<lQÖuDg¹ò-¾k,¾Uî–-;ìâ—ÄËMp^Y‹ª1·{èG’ÑHZ¶\AfšK1]Ÿ¬T&Ï®ªÜÛÉ¬X3îÓi°Ÿ¬N ßÓbñØò±|`ët¾oN–wvùØPï$fÇ$ŠÎÎXµädê²ÅÞ¤VÉŒäçÄÙT»†M.ØKÜkêƒûZúÝ+®Þ™û&¡æ}GðçÅŠÂVˆh‚šØ¯CñÒÁ”ËËÿn_fˆ·¼jšGd-,]“—5Ñ”Å]ø¯7Ñùÿç	¹×Ê/“Ò<œ”ñŽìíQAØT¶h³Ïò#"8ËÒL‹
öè˜ŸˆœG^ÏLä‡Ñ¡=Ôq8NôÂ$œ?[r²UÒSý+|Ì¦YÊ™¼•sÔá4*W9û¥	täËd€²uã–Q÷è(&`©Ìóžó_&b/ˆlÀkäóéÑê”Ôyº“tò{Ž9%„ÄK`F‹˜Fz¸J8K‰µ+k+$›Kž½N‡A›*æË«gÕìx}àðÈæ5¬Ëu21^s3ÍÔ–+³QÂ‡¦)×
ËÓCòCyj¹ùÆG^‘ƒ\]$kÌ‡>‚ú=}6Æ<*[tUaÊdûïæß3°cï ^èöÆç9çñ”Eñ{µcG®ç°4eiž§§­äSOZÙ¾g ]àŸ¡ððÙÃÂ-ðÅòvóã]—kua¨–õAëc0z0°¹Ýu™Õßþ#h/DxÜvðhöà|ãÖHìr¡¥‰/Œ˜Îå½·ý÷T¸‹ä†¤Èý@€V¼òpŽÍá6ýtÂž›&Ôöaºx¯êDAdbEÀ¡1pê`ñ~-ƒ\«Ö<Êõi;¥oËølýVtjQº!ÕôräÁ‰æ˜3gÛ¸Ú¿Ó£ÜvŒ“ÓŸÍ–ÅŽˆy·N…›#6\Ÿ´7) ?™‰’.ŸÛ{mWRî1Km@Î°ÛGã'N$yú
Š½˜*¹%†<pI-ª@Òd KéfžRqÎrZ1ÌÛÿµj"fOÒD@}ÙX„f€‚Šu/Á³ø¨Y(©`!µ0HªeÉh€*=2Ýª‡H¡ÆpaST>Ü5§%{k¼•ðŒûfäˆ¾ü´yzÊìBöS|âQÖä8adO–b£Ç<5m~0ârq=ÇqqžÖàBÊªäå¾_±ïrN©ƒŠreNp¢BPßqÔ3Ò'sX‚Ü  ·iË(O…Ávf>\õ¡DYHDñÏË›y›…£[ jÇÎ¿çy&Î{ÎHÞÙñ*9Ê’P®!&ŠDoqà°L²OKÀÚK,¤>”€ÂÀæÏ™CñSÞzzW”å’Z”Z…Ø*8ïÎs–ýRTFU	~ë}¨òV½¢(C${µI™Š6½œè@¶ d²£Ê5—}}‚üô!rfÁBˆ°7÷}:5¹z¯H/õÍö¹­<z÷MÃŽÃ[pî{ÈS7¦y*}ñ(+nÌÇ¢|ñJÏïÆ°l"›ö.äaDIH_v¹°ÒÿçÄ$FUâY¯v]©ÈD€V„•@17&O2#?6DÀV×»†ü{,~cÊ¶|–³ÝsEmy.0Ö–VÌ2xYÚá˜¦Ë½*Ý7aèæ­s{ÿÀòÃ|ÂÐ|*š°üÂ-Ã”ÏÄ{ï_%Àáø û¨˜4w}ÚDxûï,+ˆdõæÅ`AÛØìmA8&¯×:-ßpÓ½Á£5.¸htc*ð¦ß2eš:=PW;àX{Uç—á;2â[ã76ÿêüz‚°¤GfXô$³¯Ö@0I@V>kP w¢©6ç.D¹}vÌC%303éýLŸr{+žIv»Q_U¬ßº£`F“’:Spr&5.N,É‡ì_Iy2­4„»Ó÷‹\h#GXº¢X,æxg.:I²	Œø½óÂØ§|Íîy7.ÀrÂâ47axÀ.Gú“‘ò™FÉ!ƒ‰t‹qm¥ÓÇ,õÁ?fí_}X²¨§êÛo{ŒÀú”„Ñ[=Å%¾Zž#k‰ªJŠ=`Â•2†®é½þe“níñãlzg`¾àÝX õÝ’¼BpDxUthGÏ)K\:–EëË¸\’™Ëî5ÆØBVá—[bJ¶|YÈ²Ç€B	ü>}´wrÿŽ+Ö¿ã± [4øåê‰c¸*ÿpYï…‡óU¸}Ô…á…]…3—Ã¿ñm–€¬[ÅLÇÍ±ÎcAº#s±Êï©‰Uæ÷d‚ÜÄƒ}ó¼[\œ™ù%má-—öe	×ý9Òg˜>e0\¿ƒ÷šÎ|Ýÿžý(1æ#Ž¾7‰âhc‘ç¾G®BÊDêÅM;MyÞ^Óª1öópˆYôÞþá†Ä†¢èµøIý]ôÈsÜ;­ßNæ-w¶y\TZ¬³áw>_Cq¿ÕúŠo;ûþaÖ7ÄÕV >,Œ«Š·j×Ô×{žºñ)Ûåy	‰×_^”x
°;5å­Èç¾ù¥/¼d³¼N{…Þk±Tg•›ùaá1Æ§%>=Æ„jïÃ¿_µ“‹`Ñuy×ð‡aDìMWÊ
ÝÜOáƒ!Û+©älQ‰‰¥ªDK< I{ÐÌŸOmº•2•0 %Ù%Ûúº`[Ð¦Ñ}pGÿÆ6‘c£Ü›%ÙÉ·ªq³‰??=å³ìåêr= 2IºÒl“‰ËLNêËi<`×ò4Ùº‹-ùý¨O Í'•SðÑ–S;ùü§¶|$8½­Ú@íI¬ÉÐ&Eû_¼,ïu—þò§ì?þÈx%FtkÔ“¾ ¼N·Œ;FåL7;·ÿ—PÃ‰ée:[áœÓ›ÎIÃzÙsF¥Ý-CÆÙ`6”¢Ÿ0béøÃÝNv¢1×ãêÒuDGKz½€èÈëµ÷ÙMÃñ†î¤àÌ›œÛt¯•îcišíói>ç(DhîÐ­ž!ëÎ?‚’º/ý0É„ÂÇñbu¾sIÃÊ•.hkîÝg‚ÀöÞ™>…ª<(ÚÑá¶a(†Ç¢6§t¶ÔoÒî|cXDOôJåÑ=Ãa	O6Üfqh¾ÃU™£²Å<Ž.÷PWåÕò8Ýâ=±øgûFì¥…ËŠ³:ƒN¸©ì³?Õ>0Oæ µSI|-A%È42Ð.Óø¡~æ@¶pð¡E»_ý~Ý˜m?É…QWà:Î¿žøb¦#7<m=—ÕkZÎÆDÀL	•kÌ|’iàîf±Þƒ—$”@\43ÆøxÜµÇ‚f¢\mB?R<êžNz âÛ«u‰Š/B¯Ô¹Åêü9—B.Fšø!“BÃîèöÆ5@XsîP5'%—3Á&è5bT/Å*öøÄ)
 "vz|Ü#SžÆ ü_&)÷a¾Jçv³\}„Ç=æBéË˜Y÷R	fÁœD^+ºvšùçtaä˜ÿ6°ù…m©[•1 ^5äw	4+¯êPŸdXnÂò~M)¶ÅdËM%‡p ›÷0ŒíVÝCÛ?Q
¾óÀ`‡Ü·ë	F÷1ò.Ç¯~L„„†"™°_ú÷bøÆ»¾éNÜîYd9Ý"\sÁÅ\–ÞkjŠ·¼¥—–;µS&½«pâe­HòÙ©S~èm¢î’ù¾yV©lú–Lþ–P)Ï¾é+Û•}bÍaØ¿öQ€v"3sBð¨Ö>¼æhn|z*SÙ Î?Àâ/˜ž)a‹½__¤…}ÈXAû0ßëh
X@ö‘¦[¤Š£ §wï~D:ÁJ¯ŽI…^;RŸUÿ¸êõŠÚu[‹;Å«~ü wîY’|HKÖÿ¨»ùúë$î³ÎÀÙU?=L®uo¶3+ßÝ·ˆ |*(†âÓY'HiïO\Ýë«nê~Z·´/Ãâç½¥në¯ 	ÇÂa8üXÂómI`Û›à¤³ñ|Í ¹›o—é²Tñ‘Áñµ’ÞKùO"ýþÏ¹rvF²¬²?\yA*½ ï·B=Àî`ÚL%@cÁpýwÐ`8øŸ‹Ñ ¬Ÿ}É*v‡\ÞÁ^%ùï!þôšþîÌ{mÚÞ8 ˜0Ðó«ù†÷fî®ìu9z£\¾tFÂ³ã­§³ýói‚ƒÁ=.?‰Â/„{DD›}vsoÿ©þ™¡†þ¾=»F€‡±Ô o“¿újú_¥5oWåèü¤$¾YÊc€xãÆ"0Â89le\+ûŽft]â¯uìds1]úL=hG¢Ø(=ò¬©†D¢6Ó0…—h÷n$ðñ÷ª¶×>ô’:«®„NA§R#¾8ÖìF3”„/b8‰p8³ƒŽ²90£ÜÅœ}º¯õ‡m·Óî|ÇiCz²…2‚IÜ+xe˜Ýd¶>qÇbè™-äßÙgfïˆœõüzmßýN²²šdß ÙøfõÝrõ¨wž‡òÁöh|åùú4@¤vÿRÅíäVîX _À-ðû€¿>"ÉÆ`kt°TCcå¨âHaTn(›"&‘4–´ó“Ô
 ìJbY@B8õ”	¸÷FZ4xWV6¶˜Ž½@Íøe»J çFÿbçdŽßn`ê…•óýšÀû±¼OÅé„…¨¶8@í¶ƒïÉdãqFØe+Î?ÙÌV;÷JžIŒkf2EÂƒÊœšf~znSrÔºå$¼›š6ßu"ÖÓÐðÖ|}f$$4ùÜYŽ½¿gtÞV˜ÏŸ°Ð
 Xåˆ_xV¹½ðµ9ËË>8ÊïBKU¡å¯<‹®%×ˆ·çD-ˆ‹#DÍn‰x)™$”É„Ž†VÇioŽçˆk%{>… O÷HjÅœøæ.w¯ÛÄ™ÖÁ¿¨àµùq¯O.©qÐ3'(êÄ3Tœ0¤÷Ž—v€ÄkMÍ®„DH”ß§ùà‡q—û›7œêf~v§ªú“ ã"Ë«ª«žó”k2dø)ŸXÃkOÏ©¾6o _àßåR8Å5|gÒëû‰4Ýò!â‰1Æ{b`øä‚‚mÛ&©ge™ùïGU±«>/îëëmÃ‚AO†»@ô‹ŸÿÞS¹wm¼„ÚFFZ[Ÿÿºv5ûª°6ugÓUÇ:;»»;¤Jð7Í%¾}§ª¬üÙÏÀënê=Ý>gÛ±c û,dãbÅÍ/ÚÕ=U{âgk„qéB—n¨À
û¯7dM’k™×ï)•ßÍ—~ßHG-"Ï}cAÞ‘Ô®:ß±ü	«¶n³ðms±G9aS–}˜â%>¹íþEbøÝá/Âr²wÁÄbw[ÜèßÆ«‘ÆËæ­‹‡¹™0³øq×Æ9p‰>}üé]ÝHñ{h]wwz]…g¹ù3gs†¡ªäÐEC
#ôX”®¾Å}Ô·Ã„»;×oÚu ëbÖ‚w/äÑ†£”¤ÚÕøJ:f¢•x¤þö	‡úPÿŸLx:cê³d+@ìKAÂ?Áô5'0˜øv…h	»Ó[$çÂ²Ñ³r®Š¾' xe}§]¥êYðañÛ™O HÏ]¸›f@ÿúa³Œ¢»{vû*šU†‰f†ßœ9­!Ú°EIãž¾"ìòf´ôÞFO‘I5G«ÑcF¹|“IÂñöºO]²ÛîÚsÄw‡ÓÉ¼ÁôÓ:ž¼7.øëúcŸâÜ“ô•E‚A˜Ôb” ’+Ä0Hq²vbD8Ô…ôÇH	ÄACj^sÆIÖýßÓkw»(ˆÌo”ðyX¯«<q1ñŸ®žš€¿­ ÿ‚²ä§_#:€âÕ^¨ñÄ›‡lð›O0çŠýÏÎšÊºª„IÊ'ÂähÇ#ÁG’æÖ˜ÊEH•«r¥ìàƒ5Iþšƒè!tdßÏ-I.DÃŽ——ØàµéB[CÛ½Uìöþ}'b™A‡ jƒF%9~[Ä9è­­‘¸lì,»Ð)Õaü5ðx\G´ÂÐ[Þ)€=- ¹ÅhŸ©b]`aqŠo#ÛùâÈ£²O=ŽÞn_He»ÙK\° ]\f&DîÖJGö™ÆœS-3L>—È–“#B*:ÎÊµNùÙ™®",ÒìwHÚ),ôÚ,Zh[3$¸8Ö!ñdE®¹áÌÄ™kÔË¢åóú¯è	€eôáÞ	0CîÄcG'7¹Ç¿zËj«ŸWŠ¡W^gØÐ.¦Žàœtp¿D#GŠ’Å.ÛDµuh	Ð‰2³wäY‡3FÙÇ·Ô¢5eM>!Ýf’î42sÄ¦ö™÷ð¢²Òµø©úÇäÐ§ÿ·Ë2 xàƒ#Ç¬*·>l´ü&ðhþ×ž¡<6Ç(Å¬ë/Œƒ¶fuÙ@n= [Ã#Ùó!rÉ¯Š'šr5®]Á,\VW–Ì¶¾»ÇÂÆNM_çlptGñÐ±]¤Òmhßpu²ø³êÍTU¹¯@66zËsg•úÏ5ý:Od¿–J-¤wðv3ô÷¡BN/¹Ã‘7`˜ðžu°LIññ.0‚ì,|ÜW%ø^TÛ3HW[ÜÄìKáÛn9|ÌVˆ”T“§ÂS˜ó@ ˆÄ'Ý6è:kû»ìµY˜rŠÏ¥
ØLOxí‘Ç¹ù©–/?º$Öþ…QœÓÇ_M¡Îv,ÐýVz{Âet6ñP4¡¥»£HAçn=fZhÏl…ê±ádÀ‘l›|g°T½ñLŠHrQwÛ<Dýé_ÈwÈ’ü^9ÞFPWÇ=Aèähß#Eí£h´Öðür”ÖðÄ—&‹îL•™›8ZÛŽá‡q†ª>XAÄá‚¹ëà
_Ü´fŽS!}Ih'å­—sëÌAõˆÚ3DÀ2nxã…yæBù²vÏ4ˆÍ0–î£(Î(„ME¯%OpÁäN¦©|Ìb€[‘£CìÜ¬èö†¯êh}MB ©Zmå¾ÁM3ô’sä.¹‘W2ÞÆM$!&9)Ò&Þ¬L’H¡L³{é;†^5Ú MI™å-a/{¤\GÖóDð†>&Oõ *ssúÜ?óŸ½ÑYƒ^¶oÄëð}¥Pß*„a½*¯>ÃôÔRWÍí}ƒâˆ®?oR
@ÅÚ­¸ÓÚ¢6?¶Ë¹|æ6’®Î*ÙU0h¯œZŒbçÛÅ"+&ìPeõ	ÐñÔ²O`X8ç(Ò$È—EÞ-Ü¾Ê@¿´]ŸÂÓHf¯Áœl²*&Ü”ÈçõO˜‹(nNáõjÅ5"cµÌù€¡´˜Š im³ŽKž vÝ~è@ê©DŽIÙ«§SÓs`V×žÙÙf¿:j©Ÿ§èµ“£²miJô’JøKcj<˜¥2¹EööMÔQXl1ý‚1ºuÞ_EÌ‰æëËo údîÏ‰ÙäãçÄ-óásŽÚž=§ü9sm\üyÀý.vÎ¸~'ì1è´SÎK9jØ¨‹NèwNËÎwº¤õ•I+ý«íÌ„'î˜&«Êí«ã·Ïöw¦ØJ©˜By³µ]‡Žå·-åŒ«0¥c.ðð5ìrz$Ž:aXòÉŸ>½ƒ[œhÒp#œO¸áEwá/EÂ´„÷ßï©r         COLR›Y­ "ø QlCPAL™ý˜… td  êFFTM”˜÷A „P   GDEF '4Y „l   GSUBq’î÷ „Œ  l€OS/24Ã
ƒ  ˜   `cmap%=·l  j¨  úcvt  D  v¤   gaspÿÿ  "ð   glyfú°¯< Gø ŒhheadFat     6hhea§  T   $hmtxdj#  ø  h®locaK—`t  v¨  ÑPmaxp4î  x    name“	ëG Ô`  æpost$µ´ ÖH L¦     ™™ÿz—J_<õ      ÝÃÓ    ÝÃˆÿåÿ¥Ý            Ýÿ¥ . ÿåÿý                   4Sã Y            @ .         Lf   GLf   õ  „   	      €  Aä¬      PfEd € #ÿÿÀÿÀ .Ý [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     9 r V ò Ç V Ç ¹ Õ Gœ   v • c œ    ~  Q  $       s'2LG#>P5->Z$P½£§¡®Ò½Åx@oy†l8      € 
n†bbe     Ð « ± Ó Ö Ò Ü Ó Ø € € €    U • Ë v « . ­ Ï Ø ´ z ž  ‘ b  3<knJ“§R   “ Õ           Ó û Á ^ ¹ ¹ ä â í ø  ONV 89SÃÁ\H   Y              ¹                                     _ œ ¼ €U     Ä         r (   ) Á Ç Ç Ç   x ² x Á ³ ³ ³ ¾ í —Ay…g†IIU]_•m‰      ¤ í Ô	 Û ã × × á é ö é ô  · Ä Ò á À Ó Ý      = t / ¤ ¥ « Õ  £      (           U U          æ Ë Ë Õ ß ¾ Â Å r Ë ¤ Ú Þ å ê ó Þ  ß € â ï ñ É £ ² ¼ ¿ œ) „-/< ù y w y Õ                                             Ž ›  U ,               Õ    Ž G œ   ¹ 0 « Õ .      U   d G ` U d d d d b   +       \        Í Ø ¨ å                                                    WRa5zPFTu{t  +       ø æ î ñ ÷ ù Õ   ò   « ¹ õ í ù ï Ø î ñ ì ü ü ÷ Ó   ú ÷ Ø å ê ü ê ï ï    —                  € « € € d U   ä Õ ä ò ò ò «   ¹ Ç Õ Õ ò ½ ä   Ò Ô Ë â Ú             < ® Ø ‘ “ q                   ®      D¤œVZQGGHKSHVkG_Svnj@FÈKPScM p                     ²        2 2 U w B$  n   J    Ç   k     Ä     Ç ò ë ì õ ø ê – ‹ ¬ ¬ AA Õ   N N       B 6 ô ÷ Ô ù è   ä ç Ñ Ô Ð Ö       kww}?¼®µÄTtYÀNbxz€{G   á ä ù æ ¸ Î Ì Þ è	  ÷ õ ù ú õ Î È © µ ³ ë Ã ä È É Õ Õ   /  -                                          l z ® ›     ¢ ©  – ø ø ø Û « « Æ À ¹ Ã ü ½               r å è Ø ì ¸ Ò Ô è ï ì ó   ù   Ó   ç ç ‡ Ÿ   Ç Õ Õ ò q ‘   Å Û                           ß  Ø à Þ ä ò ä      = œ           ò   ¿ À · ¹ Ë × | º Ã Ñ   x —   ½ ¹ Ù Ø Ñ Õ      g   }     n     k ° ¦ /  2sarw1]]]^xdk æ Ê ø     /                             ¹ ° Ï … ¦ … 7 4 * = * Ž  G œ       & Ê Ó         Ò                       ¶ ¼ ä ä ¹ ç · Õ ò µ é è ó ë ² ¹          Â r  ) 1    Ž& « ° ª œ žB û Ÿ úUT ™ ™ – •   Ü À ˜ Ê Ý ä ,   Ô ‰GGnd˜– F  B 6 9 < G  E   U Ú ˆ  d œ « « Õ ò « Ð Û          0 0                                                K       + E O * 9 · › †     ¿ Ù   ý í í í ¾ ¿ Ò × × Ý í ï r € Ž X d (6@                         z r r   %    h      ¼ ¹ Ö á       €T Õ ‹ ž     Ž Ž    *      ŽMa[Ppsi†VE¿ÎUPNx  b   + Õ d œ « ¹ Ç « a õ ÿ ã ø Ç Ë Ò Ô Ó Ü Þ                             ™ œ     h    ‚ ’ ’   j ® } ~ “ « m     9G           ™ w z … v$ Ñ ˜ ~   # 	 S     ‘           + rJzpt€QQ[~[Qh     h m u Š ] i  z   » Ø ã ä È Ö à à á ž ò Ì «       º       $ t   ò Ú ß ß å ü Á Ë â é Ù ß 
 ý C    > 7 & ( : q 5 k , 5  ‡ N– '  ‚ ±                                           ’fgœŽÌÂd``wd{dmQNgj>@S68aG’’¦°²²°±Mv…Vjvª—       U «A(       ,           Î ²  C     9 P _ = P ¹ 9 ? F F F F c D ¤ » é     + _             7 Z   ‡                                       ‘       ó ú ç ó ÷
         ï ½ « ¹ Ø „ ƒ Š ´ © Í ß     + 9  G S       -               r G "rHIGEHVZ•2.YN@R0[V<ru€ € »   ‰>bm{ED" b  " Ä Í Ä –        0               |L     9     ; ¡ [   {     } Ç Ç ä × ƒ µ ? T » ¿ ò ò Ü Ü     … \ \       2=r+    ) H (  F         ‡  W W V S [ R Q S ^ m Z a   [   X                 L T T   Ž   U    & w Í       B   U   & w Ž   U    , W  ¬    l       9 ® ‹ { Ì â ² ¡   0 Ä ¯ ¢ Î Ó     G =    k 4   Ø      œ     d   œ        Ê    € _ ò    G    G Ž ÿþ œ «   9 Š   r   d    d         Q P ¾ V {¯‘J<Ž   5 a  /  7   Ž U r U d G r r G U « r r « œ ¸ « U    + 9 9 G *  X C 6 F g r d v b Å ˜ » y Š ¡  ù | ØU  ÿý     í œ ì    Ç # Q R v v ’ ’ ¦ ¦  9 Â Ï " 9   +  œ dÿþ  ´ Ø õ • a Ç x ¯ b Ï   x © z  8 œ ] F F ¹ ” F   Ä    € 1 
        ( €     ò  x   
 « + «  œ9  : „ €  + G y +   Z wÿÿ I  Ã7  @ î ò&9 3  + ¢ ¤ + ò ? D &    a   + + U b       = + H ‰ R 	 < µ 	 r  . Ž  . Ž    H     . + 9    + + G œ ¹     . J Á T ‰ ª o Š    + N p , Ç r qc     { êe  &  ÌO  ¦'+$   X ä ä ú. B  $  q Œ Ž € Œ d i 6 9   D œ # ' “ û + 1 % 	   ¡ +| ¨ Z  <  . ™ ¶ `  b t æ ‹ ¥   . G d h ” 0 N U Þ r Õ Q ä   Ú . r r r r r ä Ã  G A AZZ œ + + + Y B ÿð 2 ¡ = V7   + B € U     + › ú< " ! $‚;= R R j € € \   ' ê ó I R `ty u u € j æd + k +    L L Ld Ü ü Ü ÃI  3   U d     9 +    € 
 &  * ¯ „ z e  I I 9 œ U 9   ¹ +   + Ç A   / 6 5 / ƒ d   Õ R Ó ? Õ r « Ò j i Œ Œ £ £ ´ ´   + d € ¹ + •    €           K S Õ %   Ã ì ì ä  :X ñ 0 B  T ì î ñ  ë Ž òÿýÿý ™ Ô 9   U Ž   & Œ  G G	 ó F   W  
 ¹Pÿÿ » MG Ü G \ 9     + a + 8 k T+++ k9# +  â + d € Ž â d € Ž U ò Ž ò « a  G     A U € ä d   U G b Õ € « Ç Ž « · © k ½ t U r € € € G + ò € œ  Ñ ; G Q   + €  'Z ½   ½ ÿû  @  ½ ½ J 2  > ? • v V Ð Ñ > ?    ì w :      ]  ` é d   F  Ž : bUr< F    « Õ œ € 9 +   E   d òrd   R L + ˆ 5 r ¹ ò + r ä  3       # Ç à  ù… L  Ž s þ WW) @ ú ðP   - + + Ã 9 9 Þ Q Ç åUs   < 9 9 m     €    ò¨ }ÿÿ Õ C z i Ous‹    U *  m | U  ä z BŠ €   Õ Z  %   <   ¡ —  ì Ü>   + + U US   • ² À Ô > ¶ £ M K ” Œ ‡           Š ¢ ¼ X r ± t · ó Ï Ž ‹ ‡ ž k ® m î Œ  ¾ Z ‡ Z k ± ¨ ‚ Á                                     5 % %    Œ œ œ   ¦ ( ( ž ž ” ª –   \ \ æ œ ‹ (                                      i  ©ÿü e € dŽ L N  ¥ ¡ œ ö ó Ø Ç ° T óÿþ Ð Í à  7             ÿ÷ • 1  5 h   U  5                                    ¹ S à|— T j c \ U º š Ç Î ò æ é è ã    ê À Ë È ë V ž W n f _ X ¹ Ç ã V ž ¼ É ¾ ï Ì é ãz W à ã                                   í æ ’N ¹ · ¶ ­  ‡  ü Å ê „ ¹ ’ ¹ † ª ª ² Ê ü ê µ Â ’ ö ö « ­ ’                                     z Å 5 @ v  '= Q p òot«ÿÿä œ 9 U ä þ« «  f   Ç    9ÿø d òÿú Ý Ž    . r õ ‘    ´   K4 € * s P L   á ÿ þ##4   Q d  s £ ÷ à„u  „  &    zÿü x = œ €+ Ç Ç a G Ž $ 3 { | d 9 +    T  % . < U $ È À ¹ Q  ++4 ¸ Ê   ò €   rŽ k    # + £ «0  & 2 ‰ a G  3 ì Ž Ž   Œ a :   r+ ^ ¹ ¹    ¹ Ç Õ  ÕU       U r Ž Ç ä ¹ œ    Õ G  Ç      r  r Ž ¹ Ç     Õ   +    ¹ œ      ä    ä 9 9 d +9 9 ò GG +   + d  d E     Ž ¹ Ž 9 9 U Ž « r ÇUr      U9r G H   U d d   G    U U « G 9 U  Ç  + ¹ «                             U Ç ò V «     2  ’           G ” Ü  5 [ Ó…J] #  ÿþ Ä Ø.@ + / 1  EL`WfzŽ L L r + G   Ž s  d O ä  • p „ d    G  ^ Bÿü Ç G   9       y ‡ n |  #œ   G   m  H  ? Q    . ? ä G   ®  d 1 ~  ! Ç   Ž       G #   — ~ n    7 Ž ¹ n  +   m _ M    U G   + Zÿùÿÿ K     @ ] â h Þ œ œ ŽQ ® 1 Þ t Ô å ê m  d ß $   f  p ‚  \  Œ $  x 
  ( d r « €ÿþ n G 8 Õÿüÿü « (E U  ‰  Q ”ÿý H  n t      U @ d] €   G Ã gÿÿ  ¹ r     U   Õ   œ € 9 ” ' C Õ Ž   Õ G œ ¤   “ G { Ú ÷ Y  |    + œ ª m ; ' ¬ q g “ J J   Y  W  ž ” ä    U ×8ÿû % «    9  r œ  Ç +  œ    G ¡ Õ œ Õ   U Ž    Ü Ú    £ P   
^  G 
 × “ ×   } 5 U ™ ¦ È Õ Õ 8 r œ  Ž ^ÿü  G     9 U ¹   M ×ÿû Ž  5   œÿþ   œ € ä ½ ø     d œ  « d œ+ ¬  U   ! Z" 3 	 /    + \1b   ¹ €      ˆ ½ ¹ I o            + o K K                 d ò             9 9                                    I ù           4     Ž           ô :           *           *            ÿý /            õÿù                + ¢6  Ë d    O   d d ò Ê ¹ Ê ä  3 ƒ × ¹   ò .     D œ 6 á Ž «  ¹ ƒ  œ œ œ œ ß € d V «   Ï 	 î   ” d  d   = r -   ’ÿÿ  0 ª / 
¤ ÿý       r   ¹   9 œ ˜ + œ          f ! L  G µ ä œ 1 œ           r ò Ç @ Ç     ­ û À ý ¶ ò ¹ » ò ‡ @  Í ­ ¶  Z — Ó b4? ö Q Ð £   Ñ Â9 ã ¹ 9 k 2 0 G ° ° t Â ‡ Ä ¹ } Á l Ã ú ï ´ÿù e6 m 6 ‰ ý ý ª r J d É  ­ ¶$ œ     þ ç # ­ é Ç Õ 2 ÿÿ   — ­ Õ ý À d Ÿ   í ± ï ¨ ä+ 	ÿú  ò # è G € ¹ r Ç ­ û À ¸ ¸k   . » º r ­ Ç 9   9   À ý ¶ ò  á Ò ¶Õä   & »   ¶ Ê ­ 9 9 ¹ 9 ¹ ¨ 9 9 Ç t Â ‡ Ä } 9  d ñ9(UU+ U$UG J 2 r r G @ rG -  ë § Æ œ –  Ê ð é 9 « ¥ G + 9/;1 ¬fx ö ‡ n 9 ² Õ ! ™ Ê œ « µÀ  ° O‹ Ç ­ ø ¤ ¤ è …G ý ô ä ‰ €  r ;‘;  £ L ¸ ª* 9 t2 Ç ‡ Ä r ¹ U d2 ò è Õ ¤    E ­ ¶ @ ÿ 9 U Õ S Æ ß ¯ ä t Â ‡ Ä } E y       Ž   G ‡    «œ   Ž   G9d+dœ     @ ‡     @ ‡N\N + G « ä 9 € } J1 ! ø  } r « @ ò Â ¹ ï ä ò ò Ä ¹ d « « ¹ G G @ @ « û J d È  ­ À ¶ ò$  ½ kdX  +  d X £ ” t Ñ ¿ U d G9 G 9  u d ô òd X U  d ” +   U  ” +  ôG9 G 9  u äGrU    = +* +hU   Ç   „ ž  × È   +  X    r Õ ƒ œ  Õ Ç  +  +g‡U   +X   X r ¶   & »   ¶ Ê ­ ý ¶                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      œ € ¹   r Ã œ ý @ €  ¤ ¹ ­  [ ‚ Õ Õ ¥ ‡ ” ß ô Ë U U€ € + G + G ä œ Ç r + G k d t ° ¹ Ì Ì Š Ô Ä î | Ý À È
# ù ‡ ©ÿü g5 m •5 ‰  œ € Ã œ ý' œ ÿ è++ œ ä Î' œ € œ   Ã œ ý' ­ Õ9 ® ¿ G € Ž ë ­ ¹ ¹ ¸ ¸   œ œ  › ÿ ß Ò Ç Â œ ¬ ü& € ¶ÇÕ ¶ Ê œ G G Ä î ¹ ¨ I c Ì Ì Š Ô d + Z 9 r € Z  R 9 V r>> ñ59UUd9 ë ÿ ¨ – Ë ñ í  U Á ä  «   0 9 ° Ê Q/  Ç   ¢B K ÷
 õ; þ G c Ô d Ä î t y \ k++ Î Î Š  ñ ° @ « ° ò G c Ì Š Ô Ä î    «œ ‡      G+  9œ          Gd«Îœ9+œ     @ ‡   @ ‡     1 x ÷"]l ‡] « @5 • ò d c Ç R Re @ « ü' ý Ë œ Ä ù ý ý ü Ä Ä « « Ä ü Ä G G @ @ 1 • x k £ Ü Ò ñ À 8   F  u • c Ü 9   G € v • d G = \ +       G G G                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            r    ä ¥ Ù Ë „ Ff[    : . 9 G           @           9 G 9           F b y € r Æ P ä Š Ë Ë Š c s Ó Ã í 9 t Ç C ä  Ä } 9 Â C Ž Â m Œ Ä À Š Ã À                                   N 
 w 1 H ý!N\1$\ .Nj#; [ i " > 1 i [ N 
 ý!R1+\N .; ` 0 > 8 i     M  H þ5R1YQ# C; _ + > f ^ 0   F 9 u G Ð ò ¹ w t Â ‡ Ä ¹ — Â i † Æ ¼ Œ ¹ ¹ ¼                                   % R ˜ ¥ ˜ W e W « G                                   R + U ´ œ N Õ           œ t ‡ ‡ 9 œ t ‡ ¹ ë ‡ € € 9 ^ œ Õ Î € Ç ¹ ² Y Y ¹ ¹                                   .  Œ € ¬ Œ           º + Ž Á ä « $ + «             œ  ¢ ¢ œ           c H • ^ ¹ Ì Ì Š Ô d Ä î œ Ç Â t Ä } ¹ H 9 € H h ‡ Ä ¼ c Ç ¹ d } ò h Ä ¹ ¼                                    U Á ä  r ¹ « «          ÿð D T   ´ g z ^ ² ’  b ‡ Œ P Û   œ+   U @ Ç U   @ Ç Ç            7     a  U    r 9 Ž 9 €9GG ¤ 9 €   )  9 € r                                   r € Ë Š œ Û Í ð s œ ù U Ç Ð Ð ” Ò É e ù a € Ï Ï ˆ ¡ Ò Ë p œ Í É Ë                                   × × Û  « ‘ § M P             œ Æ r d    ¹s           L U ? 9 ª r U G € Õ € ä ë Õ G € € g p ä [ V ^ € ä F 4 p ª ª                                   Ðx     ä   9 \ +U ·Z       9;     9 +                                   « œ œ œ Ã €mX ‹ ‹ +  ½ ½ ž         U d d  œ  G    Ž   @ ‡   ó ‡ @          ÿù 7 C Q Â Ï 8 (     Ž     G_ G           Õ · ä 9 % €  ÿû  Ô   ! A }  #  õ Ò   9   G  ;  œ d Å ³ « œ X  Ž«    ˆ äÿü b     Ž „ µ ã  Ç           * (   r     ÿþ  « « + G ƒ     9 A      Ç Ç 2 < . /ÿÿÿþ ë / | ]    1  U d G ? Ž 9r€dx G \   Õd œ p     G , Ç       Ç  7 q+   G G    _         9 9 î + d   ~   G  + ‹ + @U €   U r «   ( ( dG Õ 9 d € ä € µ(ÿþ _ Ç Ì Ž   i   Ñ  G*) 9 U 9 G G 9 O   +     d œ   ä  9   d Ë Î ‡ „  3 Y \ + ª   9   r     G t ~_ © xQ]   « x     Ž Ž Ç / & / ³(- C ª› ¨ r  r   œ   q p 9 þ 9 ò v v š š     Õ   6 = m {       p Ç Ž         Ž Ç G d d œ œ Î   G  9   + + d Ç      g +  Ž «     9 9   œ ¹ ä¹ 9   G   €  Ž Ç G +    9U     r ¹  d} X ˆ ¾ û9l€‰‚mS /    * d ¢ ß d dG G G G {   9 4 r a + a   d Õ 3 G ¹   rc< « U U «  xA  : z  ~ · +   GŽ + ò  r G w + Ç ò ä Õ Ÿ  Ž           T   + : T X + ,  UG u G dÿû   f  K | « «+     € ¬ š   A ì Ó  _  E % 1p~ º ² ' ¤ !O ª Ä Ç Bœ  H O h & § ) ) 9 ò U c  U 	 d P P d d æ F  Ž - V _      "    » œ  Ç + -  Ž z ¶ Õ G   Q Ž  ¥ ¶ ' 9 ò ð í ò í í ò ò ­ ~ r ~ ò ´ ò ò í ì ò ì ò ­ ò ò ò Ž § Ü €  U   € Ž ¹ ò ø   G ¾ © § ï Ð Ù ½ ý Ô ß í ÷ ª Ê « Ç  Ô ä ò ä « ¶ Í Ë ò « ÿ Ç Î í Ë Ô ¶ « Ê ï Õ í Ô Ê                                   D + ` Ç Ó[ ` ] r k ) l + « ` X ¹ l b „ ë ] X l                                    c & ' d	 « Ç Ç  ä 9  9 + l ~ vv j Ø ¾ ´ ° l            íÿý  7 Å á› 4 { ø “  ‹    ; O ¡ 1 Ô           i W Ž           ` 7 U ã             9 ¹   + U €  U U € œœ € U U + 9 d r h   G G ™+G ^ G +  œ ä Ž 9  r U 9  œ Õ œ d ¹ U r Ç «   Œ G + U ] D š ïDš   l S U Ž ¹  ò + G A  Ú\> »d ÿÿ Z ‚    Œ â Ä Ó‡    7   k „  À À «   «  « 0 «U     P O å # Ä ¦ Ö Þ Ø   d € Õ    G 9 B d r « d €   d € ƒ 5 € 	 d dd A w    Z m U € A  _ P(k P €   w 3 € d P w  G € A Ž € AKb |  3 d « ø [ 9 A « ø _ U ‡ U € A U A ^ ~  G   € € A   A d Ž 3G U « A ‡ d U C r P   Õ -  6   ‡ 3 € G     ^ ¹ÿÿ A Õ  U € A w ® » C   A   ™  ó,     P     Õ  Fÿþ 3 r   d dÿÿ Ž U 3 Ž M Ž 3 G  Õ  Ç ^ÿþ ‡ ‡   w U r U €[[ - ò U ë ¹ *ÿü ‚ œ h p Ç ¹ ¹ ¹                                     € Ç 9 g   9 Ç ¹   9 Ç ¹                                   U   Õ U ¹ ë  € U p ^ U  p ¹                                   < Z J œ ¨ Å r   ù  s  G  § F   e ^ ¯ €r r  9  Ç Ç Ž Ç                                    + + 9  t 9 9           9 r € ë Õ Õ Õ ¹ r ¹ ¹                                   r ò ë g r                                  EV ÿ    F Á K õ           õ   G zL r u  ®  ›  — ·   UGd €d 9 Nÿò  G 9 œ U  +         ÿûÿù Çÿù « ,  2     + « Ñ  G r r  U r ¿ œ U  « Ž r r Ž « Ž ä G 9 ! é G Q G   % G r d œG¹¹Ž« K 9 b ¹ Ž G d d r « œ Õ r  ò Ç r œ œ 9   G  ª U            ò    + G        G   9 Ç Ç  « 9 9 + U 9 U   Áò œ        ò Ç r  œ ¹     + Q G U    d   9 «    + G  9 U     9 U r ä œ     U 9 d B r ä ö    ´   ä U   P  9 œ œ Ç   Ž    9 8 3 œÕ   ¹ d      d      9 Õ œ  d œ Ô  9 Õ  ä3R     UŽ œ œ + + O   r € + 3 + + ++ ä        Õ Ç   ä «    #  ‹  Ç U U U « ä ä M  ä  G G   U Ž r Ž ¨     i ê Â í ¤ á ë ¤ ë é ç ë ¤                                  ¹ 9  " «¹ Õ   +d € Ç Ç Ç     9  |    X € œ d ‡ Ž Ž Ž Ž     «dM  9 œ G €  U r   « r r ¹ .   œ — P k ä  r ª ƒ G  d r x ä € î z A ˆ ¡ ¸ r … d r                                     ‚                                   § Í ã É Ç ï Û À Æ â Ë ä È å                                    {    # A z w w  U h  99    ¤ žÿú ! «U Ž              b O + ¹   r ŽUC 9 ? 9    ^ U   ¹ «   ¹ ¼ M K           +  ò Õ Õ + Õ  +      y < +  €  œ Ž    Ç ë 9 Ý    Ç « œ + Ç + + Gÿÿ  * A ˆ + d  ^ÿÿ    d U9   € ¹ «9   9 ^ « ª d d „ r  «Ç U g  6dÿû ( jÿû )¥–˜ÆD      ù  !    á Ã ,²  ¯ y Y N g Èm 
 XQ€d U œ   ä    Ž P 8 = V l  ·«  + 
 ò ¹ ‹ d ‰  òh  ÿü  ‚ ƒ Ž  Ž ©      Ï  ÿü . ‹ ‹ à×    †–[>>4M Ð Ï Æ º ” w w m UŽ G  + Õÿÿ Gd Gr   Ž    ™   Ä   . Â ± ( ñ ÷	 ( * )            I           € Ž d « Ö U à ± Ò ÷	@ ú Ç w   œ P y   b   /    d r œ U 9  d } d    ‡ Œ « d ò             ™ « † ’ }            Ü 0          ÿþ E 	 j	           jAru             v l V  Í d d d            i u ´ Á           +ÿü œ œ€   Õ  Ž +  * w €   p •   y ¤ %  @   d Ë £ â Õ Ð á I € ® z ‹8 ´ ´ µ ® µ8 á Ð á                                   A 	 ? ‡ [ d ÿï V  u o œ ê   Ä Â B U 9 Y  i c L ( Ð ¼  P T [ Ž # < Ì À â ç ‘ ® “ Á ¾ Ò Î Ü ë ƒ  í ¾             {G L ™ • x  µ ² Ê ²            x   4€  4  4  4  4            4W $! \"9+9$“ $          W" %!$Ž“($ G €           G Î Õ ï Å d u Î  ƒ · ÷ · × ‹ ƒ Ä ¹ u ¯ ö Ç t ¯ Ó 9 Ä º d „ d d Å ¹ º                                             G € Ž 0   9 € ë €                                   é ) ; Œ À ® ð3 EA[E % ¿ ® E ) ð À ® EA[ % )                                   j U › Ž Ç /   Ñ j Â è  € /   Æ ˆ ¼  Å /   Å r  Ã ¼ Ur È  Â ¼ ¼ Ç /                                   À åFA@   ·„5€ l   k 2 O e n tr . kœœ[… áD4   k O i n l áD0       k 2r e[… áD3ÿý ½  ˜˜ÿý Þÿý  ˜                                    ç ß ½ » Àx 
 å Ü º · ¾  å Û ß À                                  ÿø Ž   2 ‡ ñ ÕÇ z ± ` ý ú7     ‹               ’  , W ` e G s é ¶ ¸ ¶ D D œ 	 	 d  h Ó Æ Æ 1 Õ œ = Õ  U ¨ « d ž d Ç « U     Ë 
2 žC < 5   \ U S 9    ÿþ  > f    ú!  D –    < 5 .     <8ÿû h  ? T   >  ¡ ¯ T jG9 Þÿå ? » ï d Ž 
 % u $ ; ^ ¼ ¹3 Ç U X }  c f ò d c ‘     L     ' s e  ˆ h    o S Å Å 9 9 9 9 9poo  ¿ Dƒ'/ t .ÿü  g  ´ ¿ Ç Í99   † ë J  í Jr  ÿÿ  G r D F ç X ] d ‹ c Ü ý}  9 # U { { ` D 
 |i Î ¤ S … íJTs’     +    :H   o      æ ò   ‘  G ¶   $ U U U U n | « ¼ œ ¹ U d d d d d d U  %   wÿÿ |    * = Ê  /       Î ª M è w    a * w   `  Ç †   èg‰} G o ‡ U ¬ ù  ‡ c G  T   ‡ œ å ë —  4F 9 ¶ t Â           † U « Æ ¸ $ Ã 7 b Q z F ‘ Ÿ ‹ © z H Ï ˆ ´ z Îb ¹ ÿÿ xJX@ Õ Õ   Õ   !       
 ï Á     8   ¬pU š ‚ ) 4B % Å ¹ [ …  ? Ž Ñ V,Z j «  Å h  µ ¢  ªP Ž (   + U G ¿ R ` µ È Ì `ÿý ' $ `  Á M L ‚i Y  P ‚ ¹ ¼ Ä  Õ  ` ê   « $ d U 2 D n ×- \ w [ Z x “ ×ÿþ    œ $	 ÿ    $   Ãÿý   3 ˆ ž  0 e  ­  ¤ –    G ü $ R^ÿû m Òzÿý   ' U  G € W Ü # # « u l  y o i ’  è   8 P h 
 5 d ‹ Ñ ® ¢ t   ¨  X v? R l c  
 
 H f V V    ¹ @  >ÿÿ l a C     f Ä ¹ Õ     ö  ò µ ù b     € t ï ä v+ ,  =  ¯ ¸ d * < 5 Ì     © Ø „ Ç  v dg – Ó Ì À 4 Ü o Ú I Ù Û! € ` ¡ ÚT"  A  Ç ò ¹ Çÿý  P Ž    Å    0 Hÿþ   Š " C „  ÿþÿý  Ž µ & ¦ ¸ Ú ¾ ¼ ú @ @ @ \ V [ ¡ q 9   $<O/  Ô% " @ ¯ v _  5 4 w ƒ g   \   \ r ¯ ¬ ¹ ¹  f F ó ì X   ? é ä V Ã M 	ÿþ  - ) B ½ ¾ Ñ      • ý Q € Ç 
  U  L % 3 e 9  ^ r ! ! % ž Ô¼ â  f „ÿÿ $XQ           2   C k                       I ª s  Â 9 ª Ì 9 Š G Ž    Å t & Â Ž } „   $  / Ë h ‡                                   9 Ž Q ä d F ¼ Õ  5 t } # ² Õ ( Ž Õ d 0 C d                                   ¥   € ñ¥ õ - S U r <          z °  š ¿  „ “ ž± • •Tf á n U ¡ ’ Î q g X  € Œ Œ Ò l4 ç Þ : ‘ ‘ÿæ = Z L Z T ‡ Y ƒ L J ¿ Ý L M   € g G H)‚ * ^ 0 r / K ¬ Ë Ž Y y œ œU € € « œ € ò+,h ä  L à  L  Õ ' :Ž º Ú Ú  II ' +   : n_ À À   ¸ ¸ + + Ž > Z › r ‘ œ š!7qu *  . ð  !c U d „ æ ƒ d € u K P# ª Ë î ÷ ü	 · í í × Ü Ü Ä ¥ Ë « í í Õ Ü ¿ í ø ¥ Í ¯ À ò ò Ü í ø Ä ÿ ¿ Ü Ò À î í í                                   Ï ç Ê r â ò ‹ ‰ Ä Û r Ú ò ‰ ‚ Æ á r ã Œ r ¸ r Ç                                   q  + <  ö ö ´ þ  î r d Ÿ  í ± ï ¨ ä € — ¹ ý ò î ä ò                                   T Ä ñ û ¢ ¿ Ç õ û © ¿ ÿ õ Ð  ¢ Ó Ä  < ¥ Ž   Æ ¼ Ã ü ò ¥ ¢ ¿ ÿ  ä ô û ž ¿ ÿ û í í ‘ ± ñ ç è ò û ÿ ¹  œ ½ ý ó û  ½ ý ó Â †  WYY* 7 3 x x J9' J ð í ê - Y Á 9 + 9-= Ç ò ö Ç c „ Ä º û @  Â i „ Ä º   @ ‡  6 K 7 77 ý õ õ Ä Ž ò ç ó ó º º @                                                                                                                                                                                                                                                                                                                                                                                                                                                           A X ³ ¹ ¹           - Y Á « ‡ «           k k Ê 9 ½ 2 \ N ½ å ¥ ¥                                   r u ‘ Ž             d d ‹  ‹        Î Ì c o d t Ã U à à à à G £ v Ü Ü “ Ô Ã                                      %Å eA}‚ŒTs—%“¨¬A}T%’”¡eT™                                   i O ¹ ä Î f Ÿ f Ÿ œ – ä ä O Î ² – ß ß º O ¸ Î – ¥ è è                                   + q +      Ç Ç € Õ ï Å r  Å t ¹ × € Ç ~ š Í Ç Å ¹ Ç                                   â  d € 4 c Š d d ¹ 4 n Ç Ç ‡ { Ï ½ Ç Ç d g ˆ Ë 4 ¹ ½ d                                    À Å d Î Õ ë Z [ Ä Ë Ë ƒ [ + d € « Ô Ä Õ  Ä Í Õ Ë q  í Â d Ä                                   : d ‹ ¥ c k . . {  ˜ q ˜ V v f  – n – ‰  ”  k — — ^ p ‹ ‰                                    d Ç G € r Ž r 9 Â Â Ž Â î Ð d r G € d 9 À À d „ Ä º G r Â º                                   Ç U e {S { ¹ Õ Î Î ™ r õ † ‡ ¿ Ä } € ƒ ë     } \ \ ` æ ó Ÿ Ç Ç c „ ê º Ä G V ¾ î t a V Î Î ‹ Ô S ¯ 9 t ¯ ë ’ R ‡ ¦ Ä f H Æ ß     g a t ‘ Ï Ñ  ! _  V   V € U m O Ÿ ¯ ±   ©  Ç „ 9G ö  œ œ L 9 œÿü ã Ã ¡drk’k=     1  Ï   [     ) ) d  Ms£> ’ y @  L s Ñ È ÷ í} 2 G r ÷  Õ é +  N N N N   ä « Ç Ï « 8 Õ Ñ | ¹ Ç Õ \   9   9 d d r    k k Ì Ì-- š L ¹ U ¹ d € r Ž Ž ò « U r x « ÇU +   9 d × Ç   <       ˆ « Y s }7@ ß n X § € Ž Ç Â ë –	 q    j ~   '   A R d d   ä Ç ¡ + . Õd€  9 +GU ) $ A U d + ÿõ  ' 9 r   Z ’ ¿H= . ? 3 . € “ €  '     1 ò   þ ¥ £  1 a x 2    D & ê  5Š  \ %V  7 ¹ ¾ ¤ © f  ‚        ƒ – ¥  " # ` 1 ;     C e 9 1 ä e  » »  ¶ `¡·± ^Ã  „ j P ¶ ´ £'   , d Œ ¹ ä å Ú Ó Ó ð ” È d o ‡ ¡ « ¹ h i  % Ž ¹ G Ž Ç 5 G +   þ , ·,  i "ÿü   P| L  ¾ 	 ' B  C   9 «    ¾ ð Ê  A ˆÿþ  Š ƒ Œ ‘ é ú ù   y ¥ ˆ 9 ˆ y ˆ —  €  *sG  f Â Õ ñ   € Ž € Ž d €d e ¤ r ± p Ä Ç ² U r r € § d d d ‡      ò  Ž ˜ *  9  H ‡ £  \  +    + 	 —   ±  ¼ ú ¼ þ   _ ? S X › + G G < d d d œ œ      Õ G € Õ   + 8  D ¬ Ç5  : Ÿ  ÷ ¹ ¯ Ð  4   k p F 	, g g § T  Ž Z 4  °   « À À è : l Y* f ž ¤ ¢ V G T o) o-:Bº ß“ . Œ !  ÷  ) ’ Á r  šq
 é øx Y
X ° á { x ‹ * 7 ¨ Ú Ê Þ & 6 K  s U h œ U ¢ ÷ § ç ­ ‡ a — ™   ß $ Í T 0 ‚ p Í mc ï ï  › Ó © V Ø , «  ­  _ Ê C2 É  7 ƒ =  1  b & e # z 5 /  Ã Ì:   v ( « « Ç ä   « ¹ Ç 2 µ ‹ «    » Ç €  U Ú r + 	   Ü + « € Ç €    œ d œ d € ˆ a d | œ€ U Ž ò r Ž U   $   U r U d d G G U ä l (   X   ò ä « d 9 r —  + U } Ž œ d d œ r U d   G   € + d Ç r « ¹ œ « Ç ò    N N 1     i Qÿý    d d d           s • å   U ž M « U6. 9 9 4 Ü Ü + w  O ± ‡ ë ¥ \ þ F ‡ $ M « M P q N Î N Nr N N N @ N d † . +  E  \ À$ .9 ²    5U G ‹ G (    «       P  L][²0!, d ‡ Ü c ¤ ò  e   ò U r Ç  3   ú  3Ö   @ ìÿü ¹ Ç œ  Þ ( Ÿ ï ƒ U G ¥  — B œ H € ‰  H    3   d  ÿÿ Ž $ G (  G Ç  + & Ç+ G + Gd d dG+G+   + 9 G    ä     Æ ! Y ¼   +d ¹ r + Ž 3 : w Õ Õ r ò ò  ¡ U Ž Ž U d d œ + G ^ €  6 U œ  + G  e m \ p i s  › © c v  ¬ ¡ W ó þaV ³                Ô ¾  a ( (¸ ã Ÿ ç& ´ ° é ¼ ¸ ã Ÿ# ® £ ë ` °  æ$ Î § ì ( (                                   ( vÿÿ e 4 /U I +Žd + G ¹  ¼ d ê £  L @               d 9 Á           d d           X ¬ ‘ È } € G 3 T  _ G          A  iÈ  .+  u  * € E h    £     N r Õ Õ U " 6 C ˆ            d    	 | |   ä n n   d d d 	   ‹      ²   •   H G      z      ‘      “   ‘   s     G G r G ‰           ,     4     
ô     ,  
  4    ¾ €  > # * 9 © ®  < I ã!"!9!™!ª##(#Ï#ó#ú$Â%«%¶%À%þ&&&&&&& &#&&&*&/&:&@&B&S&`&c&f&h&{&&—&™&œ&¡&§&«&±&¾&Å&È&Ï&Ñ&Ô&ê&õ&ú&ý'''''''''!'('4'D'G'L'N'U'W'd'—'¡'°'¿)5+++P+U000=2—2™å
þÿÿ   # * 0 © ®  < I ã!"!9!”!©##(#Ï#é#ø$Â%ª%¶%À%û& &&&&&& &"&&&*&.&8&@&B&H&_&c&e&h&{&~&’&™&›& &§&ª&°&½&Ä&È&Î&Ñ&Ó&é&ð&÷&ý'''''''''!'('3'D'G'L'N'S'W'c'•'¡'°'¿)4+++P+U000=2—2™å
þÿÿÿàÿÚÿÕÿfÿbàßÖßÊß1ÞóÞÝÞƒÞtÝÜùÜSÜ:Ü6ÛoÚˆÚ~ÚuÚ;Ú:Ú1Ú/Ú-Ú+Ú'Ú%Ú$Ú"ÚÚÚÚÚÚ	ÙþÙüÙûÙúÙèÙæÙÔÙÓÙÒÙÏÙÊÙÈÙÄÙ¹Ù´Ù²Ù­Ù¬Ù«Ù—Ù’Ù‘ÙÙ‹Ù‰Ù‡Ù†Ù„ÙƒÙ‚Ù|ÙyÙsÙiÙZÙXÙTÙSÙOÙNÙCÙÙ
ØüØî×zÕ«Õ˜ÕeÕaÐ‡Ð{Î"Î!±­                                                                                                                                                                                                    À       ¤   #   #      *   *      0   9      ©   ©      ®   ®               <   <      I   I      ã   ã     !"  !"     !9  !9     !”  !™     !©  !ª     #  #     #(  #(   !  #Ï  #Ï   "  #é  #ó   #  #ø  #ú   .  $Â  $Â   1  %ª  %«   2  %¶  %¶   4  %À  %À   5  %û  %þ   6  &   &   :  &  &   ?  &  &   @  &  &   A  &  &   C  &  &   D  &   &    E  &"  &#   F  &&  &&   H  &*  &*   I  &.  &/   J  &8  &:   L  &@  &@   O  &B  &B   P  &H  &S   Q  &_  &`   ]  &c  &c   _  &e  &f   `  &h  &h   b  &{  &{   c  &~  &   d  &’  &—   f  &™  &™   l  &›  &œ   m  &   &¡   o  &§  &§   q  &ª  &«   r  &°  &±   t  &½  &¾   v  &Ä  &Å   x  &È  &È   z  &Î  &Ï   {  &Ñ  &Ñ   }  &Ó  &Ô   ~  &é  &ê   €  &ð  &õ   ‚  &÷  &ú   ˆ  &ý  &ý   Œ  '  '     '  '   Ž  '  '     '  '   •  '  '   –  '  '   —  '  '   ˜  '  '   ™  '!  '!   š  '(  '(   ›  '3  '4   œ  'D  'D   ž  'G  'G   Ÿ  'L  'L      'N  'N   ¡  'S  'U   ¢  'W  'W   ¥  'c  'd   ¦  '•  '—   ¨  '¡  '¡   «  '°  '°   ¬  '¿  '¿   ­  )4  )5   ®  +  +   °  +  +   ³  +P  +P   µ  +U  +U   ¶  00  00   ·  0=  0=   ¸  2—  2—   ¹  2™  2™   º  å
  å
   »  þ  þ   ¼ ð ð   ½ ðÏ ðÏ   ¾ ñp ñq   ¿ ñ~ ñ   Á ñŽ ñŽ   Ã ñ‘ ñš   Ä ñæ ñÿ   Î ò ò   è ò ò   ê ò/ ò/   ë ò2 ò:   ì òP òQ   õ ó  ó!   ÷ ó$ ó“   ó– ó—  ‰ ó™ ó›  ‹ óž óð  Ž óó óõ  á ó÷ ôý  ä ôÿ õ=  ë õI õN  * õP õg  0 õo õp  H õs õz  J õ‡ õ‡  R õŠ õ  S õ õ  W õ• õ–  X õ¤ õ¥  Z õ¨ õ¨  \ õ± õ²  ] õ¼ õ¼  _ õÂ õÄ  ` õÑ õÓ  c õÜ õÞ  f õá õá  i õã õã  j õè õè  k õï õï  l õó õó  m õú öO  n ö€ öÅ  Ä öË öÒ  
 öÕ ö×   öà öå   öé öé   öë öì   öð öð   öó öü   ÷à ÷ë  ) ù ù:  5 ù< ùE  d ùG ùx  n ùz ùË    ùÍ ùÿ  ò úp út  % úx úz  * ú€ ú†  - ú ú¨  4 ú° ú¶  M úÀ úÂ  T úÐ úÖ  W  b  c  ^  e  e  `  g  g  a  l  l  b  n  n  c  s  t  d  w  w  f      g                                             	
                                                                                                                                                                                                      D       T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T   T     Ì    @  Œ  À  (  d  œ  ä    <  t  Ì  D  ”  ì     4  Œ  H  	  
  
ì  ¨  H  l  @     @  \    Œ    ¨  Œ    <  ¬  T  x  ä  8  `  €      4  œ  Ô     L  ¤  `     è    D  Ð    D  ¨  Ð    h  ´  à       (  `  ˆ  ð     !L  !d  !´  "4  "X  "¬  #Ô  #ø  $  $4  $\  $”  $À  %$  %L  &  &¬  -Ü  .  .@  .Ð  /H  /ô  7È  7à  8<  8€  8   8è  9<  9”  :<  :T  :à  :ü  ;Œ  ;¨  ;à  <  Ex  EÈ  Eð  F  F4  F\  F„  G  GL  H  Iˆ  Iø  K8  K\  K˜  K¼  KÔ  Kø  LX  M$  M@  Md  Mè  NŒ  NÌ  Ot  OÔ  Pà  Q  Q\  Rd  RÌ  S  S8  Sh  S¼  Sè  TD  TŒ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  TÌ  U0  VD  V\  VÌ  Vð  W  WX  W”  WÄ  Wì  X  X,  X\  X¤  XÐ  Y  YH  Z  Zx  Zœ  Z¼  Zä  [”  [Ø  \¤  \à  \ø  ]4  ]„  ^¸  ^ø  `ˆ  `À  `ü  a   aè  b  bh  bœ  b¸  cì  d°  eD  e„  e¼  eä  f   f  fä  h@  i(  iX  i€  i¤  j  jH  jx  j°  jÌ  k4  kˆ  kØ  l  lD  l\  l”  l´  lÜ  lô  m\  m˜  mÀ  n  nh  n¬  nÜ  o   o0  oP  o¸  oè  p  p0  p\  p€  pÄ  pÜ  q  q8  q`  qŒ  q¸  x  x\  xˆ  xÔ  y  y0  yP  yt  yœ  z0  zø  {œ  {Ì  {ð  |  }@  }d  }”  ~   ~p  ~À  ~ø  (  L  Ì  €   €H  €p  €  €¼  €Ø  €ô    ¤  È  ‚  ‚$  ‚`  ‚”  ƒh  ƒÐ  ƒü  „4  …T  …˜  …¼  …ì  †$  †d  †ˆ  ‡$  ‡<  ‡ä  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆh  ˆ¬  ˆÈ  ‰p  Šœ  ŠØ  ‹@  ‹œ  ‹ì  Œ  Œ<  ŒX  Œp  Œ¸  ŒÔ  Œü  (  P  ˆ  °    Ð  ô     X     ‘L  ‘t  ‘Œ  ‘´  ‘Ü  ‘ø  ’  ’<  ’d  ’  ’´  ’Ø  ’ð  “  “<  “h  “”  “Ø  “ü  ”  •L  •Ì  •ä  –0  –\  —8  —ô  ˜8  šø  ›@  È  ð  ž  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  ž8  žœ  žÄ  žÜ  ¡à  ¢   ¢  ¢0  ¤`  ¤€  ¤à  ¥,  ¥Ì  ¦@  ¦X  ¦ˆ  ¦´  ¦Ü  §  §d  §  §¸  §ì  ¨H  ¨¸  ©  ©0  ©H  ©d  ©|  ©˜  ©°  ©Ô  «  «\  «Ô  «ô  ¬$  ¬d  ¬ô  ­0  ­T  ­¤  ­Ü  ®<  ±  ³h  ³ˆ  ³À  ³ô  ´”  ´À  ´ì  µ  µ(  µ\  µè  ¶  ¶<  ¶x  ¶¨  ¶¨  ¶¨  ¶¨  ¶¨  ¶¨  ¶¨  ¶¨  ¶ô  ·  ·P  ·h  ·€  ·¬  ·Ð  ¸  ¸   ¸T  ¸€  ¸¤  ¸Ì  ¸ø  ¹  ¹H  ¹p  ¹¤  ¹Ø  º  ºH  ºt  º¸  ºÜ  »  »T  »   ½  ½l  ½È  ½ð  ¾  ¾4  ¾ˆ  ¾´  ¾Ü  ¿  ¿(  ÃD  Ãl  Ã”  Ã¼  Ä  ÄL  ÅÄ  ÅÄ  ÅÄ  ÅÄ  ÅÄ  ÅÄ  ÅÄ  ÅÄ  ÅÄ  ÅÄ  Æ$  Æl  ÆŒ  Æ¸  Æð  Ç(  Çl  ÇÄ  È8  Èh  È”  ÈÐ  Èì  Êl  Ë  Ët  Ëì  Ì¸  ÍX  Íx  Íä  Î,  Ï  ÏD  Ï€  Ï¼  Ïø  Ð4  Ðd  Ñ   Ñ„  Òt  Òü  ÓX  Óˆ  Ó´  Óà  Óà  Óà  Óà  Óà  Óà  Óà  Ô<  Ô   Ôô  Õ´  ÕÜ  Õø  Ö  ÖT  ×4  ×t  ×”  ×À  Ø  Ø\  Ù@  Ù€  ÙÀ  Ùð  Ú  ÚX  Ú˜  ÚÄ  Úð  Û  Û@  Ût  ÛŒ  ÛÌ  Ü  Ü(  Üd  Ü˜  ÜÈ  Ý0  ÝH  Ý|  ÝÀ  ÝÜ  Þ  ÞD  Þl  Þ  Þ°  ÞÔ  Þì  ß  àÈ  åt  åÈ  æ  æ,  æT  ç8  çŒ  è  è,  è`  èŒ  è¸  èä  é0  éŒ  é¬  éü  êˆ  ê°  ëL  ë¤  ì0  ìè  í  íŒ  î  î<  îŒ  îÌ  ï4  ïÐ  ð|  ð°  ñh  ñÐ  òl  òÔ  ó,  óX  óÐ  ô  ôH  ôp  ôÄ  õ,  õt  úü  û0  û|  û°  ûÐ  ü   üL  üh  ü¤  üÜ  üô  ý  ý$  ý<  ý\  þ   þ4  þ\  þŒ  þ´  þÜ  ÿ  ü \ €   è  < T € ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤  @  à 	  
D 
` 
ˆ 
¬ H ¨ ô  $ < L d „ Ü ä 8 ´ ü t œ œ œ œ œ œ œ ô  < d à 4 ð , ˆ à L  ä  0 | Ä l   Ì   Œ ¸ Ü   p ” ¬ Ä Ü @ ¨ Ä                         \ œ t Ä < "Ø # $  $Ø % %< %t %˜ %˜ %˜ %˜ %˜ %à &, &T &œ &è '0 'x 'œ 'Ô *Ð *ü +¼ ,° ,Ì . .x .¤ /t /¼ /ì 00 0è 1  2\ 2ä 3 3œ 3À 3ä 4 4D 4 4¸ 4Ô 5 5P 5Œ 6˜ 6¼ 7˜ 8  8x 8¼ 8ô 9x 9” :  ; ;\ ;Œ =0 =p =œ ?| CÐ HÌ K4 L, N  OŒ Q Q Q Q Q Q Q Q Q Q Q Q Qt Q¸ Qè R Tð W  W$ W@ W` Wœ X@ X° Xô Yˆ Y´ Yà Yü ^@ ^° _ _0 _\ _ô `, `t `Ü a a, al a˜ a˜ a˜ a˜ a˜ a˜ a˜ a˜ a˜ a˜ a˜ a˜ aÔ bD b\ bx bÐ c cL ct c” d8 dl dÐ dè e˜ eð f f8 f` f| g gh gü h4 h` hØ i< i„ k l mŒ p@ pü q@ qœ qä s° vx v¤ vÌ w( wl wœ x4 x„ y, y„ zT zˆ zì {è }ä ~h ~” t Ð €p €Œ „t „ „À „ø … …T …| …è †X ‡ø ˆd ‰” Šì ‹ ‹ ‹” ‹Ì ‹ð Œ Œ  ŒD Œl Œˆ ŒÈ ˜ À ì Ž Ž<  ( T ‘À ’ “ü ”` ”„ ”À •  •D •p •° •ô –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –` –à — —8 —l — —è ˜ ˜8 ˜` ˜„ ˜  ™` ™à š  šd ¤Ä ¥h ¥¬ ¥Ð ¦  ¦( ¦X ¦À ¦ä ¦ü § §0 §p §À ¨ ¨8 ¨T ©  ©X ©| ª$ « «” «” «” «” «” «” «” «” «” «” «” «” «” «ð ¬ ¬4 ¬h ¬Ô ­T ­T ­¨ ­Ü ® ®\ ¯´ °° ±D ²è ³Œ µä ¶ ¶Œ ·è ¸p ¸  ¸è ¹ »¼ ¼ ¼8 ½T Àp À Â Âh Â€ Åì Æ ÆH Æ Ç0 Çx È  È0 ÈX È¼ ÈÜ É É8 Éx É¼ Éä Éü Ê ÊD Êl Ë Ë\ Ë„ Ë° ËÜ Ì Ìà Í Í0 ÍH Í` Í¤ ÍÈ Íô Ît Îì Ï Ï< Ïh ÏŒ Ï° ÏÜ Ð  Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð$ Ð| Ð¨ Ñ Ñ Ñˆ Ñ¬ Ñü Ó  ÓH Óx Ó¸ Õ  ÕÀ Ö\ Ö€ Ö¤ ÖÈ ØD Ø\ Ø„ Ù$ ÙP Ùt Ùt Ùt Ùt Ùt Ùt ÙÜ ÚÔ Úü Ü Ý$ Þ  à0 á¤ ä\ äˆ ä´ äØ å å\ å¬ æ  æT æ„ æ° æÐ æø ç ç< ç” çÀ çô è˜ èà éÀ ê êx ê¸ êô ë ë8 ë€ ë° ëØ ì ìH ìp ì˜ ìÜ í  íØ îX î” îÐ ï` ï¨ ïÐ ð` ð´ ðÜ ðü òL ò” óÔ ôT ô” õ” öx ö¤ öÐ ÷ ÷8 ÷p ÷œ ÷Ä ÷ì ø ø< øX ø| øÈ øô ù ù$ ù< ùx ù ú  ûÀ ûô ü üL üt ü˜ ü¼ üì ý8 ýÌ ýð þ( þ˜ ÿ  ÿx ÿÐ ÿè  8  €  d ¼ Ø ô  4 l ¼ ` ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì ì t ¼ ø | @ h  	  	T 	p 	 
T 
x  L Ü 4 ”  D l ä $ H ´  @ t ¼   L | À ð 4 „ ¬   < ¬ ô L x À ø  0 T l ¨ p ¼ è  @ h € œ ¸ à l 8 À  < ` Œ ¨ È ü L ¬ <  ¤  ð ! !° " "t "Œ #( #L #ˆ #´ #è $$ $L $° $ð %( %P &h &” &È '° (p (” (¸ (Ü ) )< )< )< )< )< )< )< )< )< )< )< )< )< )< )< )< )< )< ) )È )ì *  *@ *` +@ +d +œ +ô ,h - /D /| 0 3h 3¼ 3ø 8 84 8x :Ä ;„ ;Ü <° =˜ >d A€ BT B  Bô C0 C\ C€ CØ Cü D( DP Dx D” F, F, F, F, F, F, F, F, F€ F¨ FÐ G G  GÜ H HD Hx H¼ Hü I I4 IL I„ I° Ið J8 J„ J¸ K K$ K< Kd K¨ L< Lx L° LÜ M M0 ML M„ N˜ O  P P8 PÈ Q@ Q„ S UÜ Vˆ WØ XÄ \  \X \° \ð ] ]D ]| ]¬ ^ ^p ^p ^p ^p ^p ^p ^p ^p ^¸ ^ð _( _à `„ `„ `„ `ü dH e e e| e¤ eÌ fÈ g< g´ gè hÜ iL iŒ l lä m8 mp m¤ mØ mü n( nL n€ n€ n€ nÔ nø o o0 oP o„ oÀ qt qŒ q¤ qØ r rd rÀ st s´ sà t t8 t8 t8 t8 t u uˆ w0 x€ zP {0 {à }x ~P ~à | €¨ Ø ‚ ƒ„ ƒ¨ „H …, …T …Ä †8 †” ‡ ‡Œ ˆ ˆŒ ˆà ‰, ‰X ‰˜ Š Šˆ ‹( ‹T ŒÌ Œð  L x   Žl ŽÜ ` Œ ‘ ‘( ‘h ‘Ð ’@ ’p ’œ ’È ’ð “ “< “à ”Ü •L •Ä •ü –$ — —4 —X —” —Ø ˜$ ˜H ˜t ™Ä šh šü ›À œ4 œh œÜ | ž ž„ Ÿ`  @ ¡H ¡l £L ¥l §X ¨° ©Ì ªÈ « «È ¬ ¬, ¬H ¬Ì ­` ­œ ­Ô ®˜ ®à ¯ä ° °0 °P °Ð ±X ±„ ±Ø ²  ²ä ³l ³À ´4 ´€ ´Ô µD µ” µ¼ ¶ì · ·¤ ¸0 ¸ì ¹  ¹X ¹ä º ºÔ »` ¼¤ ¼ü ½ô ¾ ¾p ¿\ ¿ˆ ¿è Àˆ Àà Á¼ Ã¸ Ä Äd Å Åì Æ` ÆÄ Æü Ç0 ÇT Ç” ÇÜ È È¬ É  Ê$ Êd Ê” ÊÈ Ë  Ë˜ ËÀ Ëì Ì Ì@ Ìd Ìœ ÌÔ Ìø Í Í Íð Î ÎH Î  ÎØ Îü Ï, Ñ8 ÑP Ñt Ñ¤ ÑÐ Ò Ò\ Òˆ Òè Ó” Ó¼ Óà Ôd Ô¤ ÕT Õx ÕÌ Ö Ö4 ÖX Ö¨ ÖÌ × ×€ ×¨ ×Ø Ø0 Øx Ø  ØÄ ØØ ÙT Ù¸ Ú  ÚT Ú¤ Úì Û4 Ûh Ûè Ü, Ü| ÜÄ Ý ÝT Ýœ Ýä Þ, Þp Þ´ Þô à” á@ â$ â¨ ã ã äø åD å´ æ æ< æˆ ç¨ è èX è¸ èà é éà ê êŒ êÜ ë$ ëP ëŒ ì@ ìè í< í| íü îð ï ï„ ð ð˜ ð¼ ñ< ñŒ ò” óH óÀ ô° õ˜ ö öL öŒ ÷ˆ ø| øè ú¨ úè ûä ü¬ üè ý, ýd ýä þ$ þ` ÿ8 ÿ„ ÿä     D  h  Œ  È  ô  T 0 d ð  @ h è  \ ” Ð $  à 4 p Ü 0 l œ ä 0 h ˜ 	d 	˜ 
Ü 8 € ° ð L ˆ ô P    l ¬ Ð ô @  t Ô  P ø $ ` d ° ø ` È L ° ì 8   Ä œ È $ ô   X | ´ Ì ð  8 d  € ¸ è „ ´  ° ! !l !œ !Ä !ð "œ # #D #ì $( $Ä % %L %d %¨ %à &À '\ '¬ 'Ø (  (H (˜ (è ) )@ )p )˜ )¼ )ì *  *T *„ *À *ð +@ +| +Ø , ,€ ,Ü -, -ü .( .T .x .¼ .ð /` /ä 0\ 0˜ 1 2l 2¤ 2Ø 2ü 3  3¤ 44 4h 4œ 4À 5 5P 5À 64 6` 6˜ 6Ð 7 78 7x 7Ð 8 8˜ 8à 9Œ 9¼ : : ;$ <D <„ <¸ <ä = =L =¼ > >0 > >Ô ? ?, @ A A4 AX A” AÄ Aø B  BL Bà C CT Cœ CÀ Cè D\ DŒ Dô E E< EX Et E¸ F  F8 Fp F˜ G GD G„ G¼ Hl Hð I$ Id I¨ Iè J JD J„ JÔ K KH Kˆ K¼ L Ld Lˆ LÜ M  MÐ N  N< Nh N” O< O¤ OÈ P Pd P¬ PÐ Q Q< Q| Q´ QÜ R\ Rˆ R¼ Rä S SL S° Sì T TL T˜ U, UH U| U¨ Uè V  VL Vt V¸ VÜ W WL W” WÀ X0 X€ Xà Y$ Y„ Z Zh ZÜ [ [p [¸ \ \h \° \ð ]\ ]€ ]¤ ]Ð ]ô ^, ^d ^ˆ ^Ô _@ _ˆ `@ `¨ `ô a4 a€ aì b b\ b´ c c$ cÔ d0 e@ eh f( fx f° fè g g4 g` g´ gÜ h h4 h¸ hì iT i¸ j  jX kd k˜ kà l( ll l° m  md m¬ mø n@ nˆ nÌ o o` o„ o° p p4 pŒ p¼ qˆ q¬ qè r8 r r r r r r rÈ s s0 tP tŒ t¼ tì u uD uÈ v v@ v€ v° vè w wH wx w¨ wä xP x€ x¸ xä y( yP y„ z„ {¤ {ô | | |Ø }  }H } }¸ ~l   € È €  €X €¬ €Ð  D Œ Ä ‚ ‚ø ƒ  ƒP ƒ€ ƒ° ƒä „ „D „| „  „ø …X …Ô † †” †È ‡  ‡X ‡´ ‡ô ˆ  ˆX ˆ¬ ˆÄ ˆô ‰0 ‰d ‰˜ ‰Ô ŠH Š` Šˆ ‹  ‹< ‹` ‹˜ ‹ð Œ8 Œ\ Œ€ Œ´ Œü   L   Ô Ž ŽL Ž¤ Žø À ä l Œ ‘8 ‘¸ ’@ ’” ’à “ “X “” “Ô ” ”0 ”p ”” ”Ø ”ø • •` •„ •à –8 –¼ –Ü —X —¨ —Ì —ð ™ ™0 ™| ™´ ™ä › ›@ œT œ œø p è ž žT Ÿ Ÿ8 Ÿœ  $  t     ¼  ü ¡  ¡¤ ¢¼ ¢ø £< £¸ £ð ¤  ¤l ¤° ¤ô ¥@ ¥| ¥À ¦8 ¦¤ ¦ð §, §x §´ ¨ ¨  ¨à © ©H ©˜ ©Ø ª$ ªp «8 «` « «Ð «ø ¬$ ¬h ¬¸ ­  ­X ­| ­° ®( ®T ®€ ®¤ ¯ ¯| ¯ü °@ °| °¬ °Ä ± ±T ± ±ì ²l ²Ü ³ ³, ³P ³| ³È ´ ´P ´| ´ì µ, µ¤ µÔ ¶ ¶| ¶à · ·È ¸| ¸´ ¸Ð ¸ü ¹T ¹œ º4 º| »( »x »œ »À ¼( ¼L ¼d ¼ˆ ¼¬ ¼ø ½ ½H ½t ½˜ ½¼ ½è ¾@ ¾€ ¿ ¿4 ¿Ô À4 À” Á Át Â Â” Ã Ãd ÃÌ Ä  Äh Äœ ÄÀ Å ÅD Åx Å¤ Æ Æ„ ÆÔ Çd Ç Çà È È8 Èð É Éˆ É° Éà Ê4 Êh Ê  Ê¼ ÊØ Ë Ëœ Ì Ìh Ì¤ Ìü Íp ÍÌ ÎŒ Î¨ ÎÔ Ï Ï8 Ï` ÏÈ Ð ÑØ Ò  Òt Òœ Òà ÓD Ó| Óð Ô@ Ô Ôô Õh ÕÜ Öd Ö ÖÈ ×, ×Ü Ø, Øl Ø ØÀ Øä ÙÀ Ú Út Úø Ût Ü  Ü$ Ül Ü Ü Ü Ü Ü Ü Ý Ý\ Ý¨ Þ ß ßd àà á áP á¼ â â° ã˜ ãà å  å` æØ ç çd çÐ è è| é˜ ê ë  ë< ë¬ ì ìL ìL ìL ìL ìL ìL ìL ìL ìL ìL ìL ìL ìL ìL ìL ìL ìL ìL ì ìà í0 íh íÜ ï ïP ð\ ñT ñÐ ò  óô ô¤ õ$ õÄ õü ö` ö¸ ÷ø øä ùL ù” úd úÌ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûÈ ûè ü üP üt üÐ ýÜ þ þX þ˜ þè ÿŒ    L  °  ` ¤ ø 0 |   ð < d ° è $ l „ Ì Ì Ì Ì Ì Ì     4 t È   	 	` 	x 	Ø 
° 
ô È                                     < P t ¸ à  T œ Ä ì  P   8 œ ´ Ì ä ü  @ È ì , t   Ô Ø ¬ ø < d Œ ´ ô  , $ ø 8 P œ À   X Œ À  0 d d d d d d d d d d d d d d d d d d ¨ à \ Œ Ø  P œ è  l ¤ Ø  H „ ¨ ä \ Œ È    < !” "  "\ "ð #$ #T #€ $ $X $ $ô %D %h %¤ %à &X &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô &Ô 'H '° 'Ì (, (h (” (È (ð )0 )\ )„ )¬ *D *x *” *° *Ì +, +T +l +¨ +ì , ,x ,” ,¬ ,Ø - -L -h -Œ -¸ .Ø /4 /X /€ /ø 0@ 0d 1 1° 1Ì 1ð 2  2L 2| 2Ô 3 3@ 3„ 3Ü 4  4P 4 4Ä 5  58 5h 5€ 5  5Ð 6$ 6h 6´ 6ü 7D 7ˆ 7Ì 8 8P 8t 8¬ 8ø 9, 9„ 9Ø : :\ :ˆ :Ì <0 <X <p <˜ <Ø = =, =d =È =ð >4 >T >ˆ >  >¸ >ä ? ?T ?€ ?° ?ø @P @l @ˆ AH A´ B B4 Bd Bœ BÐ Bü C( CÌ D D¤ EL Ex E° EÔ Eø F¤ G„ H Hl H¤ HÔ I( I\ I¬ IÔ J K K\ K¨ L˜ LÌ M Mh M˜ MÄ Mì NP N| N¤ NÀ NØ O O< OT O€ O° OØ P P, PT Pp Pˆ PÀ Pì Q Q0 Q QÈ R R8 R\ RÐ Rô S$ Sˆ S° SÔ Sü T T4 TX T€ T˜ TÄ TÜ U U  U< U\ U” Uä Uü Vœ Vð W WT Wˆ W¤ WÐ Wè X X< X` XŒ XØ Xô Y, YH Y¨ YÀ YØ Yô ZØ [ [H [l [ [´ [ì \ \H \l \¬ \Ä \ì ]$ ]X ]p ]  ]È ]è ^$ ^< ^€ ^˜ _@ _x _œ _À _ü `0 `L `x `œ `È `ð a a, ad a„ a´ aØ aô b( bL bŒ b° bÔ c c0 cØ dX d d¬ dü eŒ eÄ eì f„ f¨ fÄ g  g0 gt g˜ g´ gÐ gì h$ h< h° i, iD i\ i¬ iÔ iì j j  j< jd jŒ j¤ j¼ jØ k k k k\ k¤ k¼ lD m  m, m¨ sÄ sð t t t t t tX tô u v( vL v  vÜ w w, w\ wà xx x¤ xø y$ yd yŒ yà z z( z¤ zÜ { {$ {T {„ {¬ {ì | |< |d }8 }¤ ~d ~œ ~ð X  Ô € €< €Ì   \   Ø ‚ ‚, ‚¤ ‚Ø ‚ü ƒŒ ƒä „` „Ô …D … †t †˜ ‡@ ˆ  ˆH ‰ ‰È Š Š\ Š¤ Šð ‹ ‹„ ‹¨ ‹à Œd \ € Ž$ Ž€ Ž° Ž° Žà 4 Ø  ’d ’Ä ’ð “  “| “¤ ”< ”x ”ì •4 •è – –À — —¨ ˜ ˜4 ˜´ ™, ™p š šh ›  ›$ ›ä œ\ œÈ œø   D Œ ž  žD žˆ žÈ Ÿx Ÿ¤ Ÿô  h  Œ  ä ¡ü ¢Œ ¢¸ ¢ä £¤ ¤< ¤  ¤Ä ¤ð ¥T ¥° ¥Ü ¦ ¦< ¦˜ ¦ì § §\ §Ü ¨, ¨X ¨„ ¨Ì ©x ©È ©ü ªL ªx ª¬ ªÐ ªÐ «8 «È ¬ˆ ¬Ô ­ ­@ ­p ­ˆ ®L ®x ®ä ¯( ¯¬ ¯ð ° °X °  ±h ±È ±ì ²$ ²p ²ä ³d ³œ ´ ´\ ´¸ µ µØ ¶T ¶€ ·´ ¸Ø ¹h ¹Ð º| ºÈ »$ »” ¼Ð ½@ ½¬ ¾\ ¾œ ¾ð ¿4 ¿˜ ¿¼ ¿ü Àt Àø Ád Á  ÁÌ Â ÂP Â˜ Ã Ã( Ãì ÄD Ä¼ Å< ÅŒ Å° Æ8 Æt Æì Ç ÇL Ç ÇÈ Èl É É0 Ép Ê  Ê¬ Ë” ËÜ Ì  Ì\ Ì Ì´ Í  Í< Ít ÍØ ÎP Îœ ÎØ Ï8 Ïx ÏÐ Ð$ Ðx Ðì Ñ0 Ñd Ñ¸ Ò\ Ò° Òð Ó< Óp Ô ÔL Õx Õ  Öü ×  ×Ü Ø  ØD Ø| ØÀ Ù Ù@ Ùp Ù¸ Ú8 Ú„ Úü ÛX ÛÄ Ûü Ü8 Ü€ Üô ÝL Ýx ÝÄ Þ  Þ˜ Þô ßÐ àH à¤ àÈ àì á$ áT áì â âè ã, ä  äl ä´ å  æ( æL æŒ æì ç` çÄ èH èŒ èè é é¨ éÔ ê  ê\ ê¬ êð ë( ëP ë¬ ëô ì4 ì” ìÌ ìü í( ít í° î î„ îô ï< ï¨ ð ðT ð| ðè ñ$ ñh ñ  ñô òH ò ò¸ óÈ ô8 ô  ôü õˆ öD öð ÷D ÷Œ ÷ä ø ø” øÄ ù  ù< ù< ù€ ùÔ ú ú¬ úô û ûˆ ûÈ ü ü< üh ü  þ þä ÿH ÿl ÿ¨ ÿì  (  l  ˜  Ô  ø  h ¤ Ô ø  d ˆ ¬ è è   L ˆ ¬ Ð ô D Ü L L L L L L ¬  h ¸ ¸ ¸ ¸ ¸ ¸   ` ¨ ì   L ð ð ð ð ð ð 	¨ 
T 
T 
T 
T 
T 
T       ¬ ¬ ¬ ¬ ¬ ¬  ´             \ ` œ  D D D D D D p @ @ @ @ @ @ Ü À À À À À À ` 8 8 8 8 8 8 D  0 0 0 0 0 0 ä à Ä | , Ü ” ” ” ” ” ” L d | ” Ø ü D € Ø L ´ Ø  < t ´ ô  4  X ! !p !° !Ø " "< "p "œ "ô #8 #¤ #Ø #ü $  $D $t $Ì $ä %@ %x %” %° %Ø & &$ &L &¼ '` ' ( (Œ (¸ ) )< )Œ )Ø *$ *d *° *ø +4 +„ , ,| ,ä -Ì .d .ô /8 /p 0p 0¨ 1 1d 1Ì 2< 2x 2¸ 3@ 3\ 5 5¬ 6< 6Ì 7 7D 7Œ 7ì 8d 8¬ 8¬ 8¬ 8¬ 8¬ 8¬ 8è 9X 9˜ 9ä : :D :x :È ;T ;¤ ;¤ ;¤ ;¤ ;¤ ;¤ ;Ì ;ì <$ < <À =  =p =À =Ü > >h >Ô ?( ?L ?d ?| ?¸ ?Ð ?ø @d @´ @Ü Ad A Aì B  Bd B¨ BÜ C CX Ct C¤ D DX DÌ E E\ EŒ E´ F F` F” FÔ Fü G  G„ G  GÐ H( H| I  I IH Ix IØ J4 J° K K8 Kh K˜ Kð L0 Lt L¤ LÀ M( MX M„ M° Mà N NX O@ Ox P  P, PX P” PÌ Q Q\ QÄ R$ S SX Sp S° SÈ T  T0 Td Tœ TÈ U Uh U¸ V0 V VÈ Và W Wl W´ WÐ Wø XT X¼ Y Y@ Yt Y¨ Yà Z4 ZT Zœ Zì [\ [Œ [¼ [ð \ \H \¤ \À \ð ]X ]¤ ]Ø ^ ^, ^H ^„ ^¬ ^ü _` _° ` `P `€ `  `Ì a0 aœ að b bh b€ bÀ bà bø c c8 c` c¤ cè d0 d` dˆ dØ e  e$ et eä f fx f” fà g gh g„ g¨ h  h” hØ i  iÄ j jÄ k4 k| kÀ kä l l( l¤ lÔ m m< mˆ mÌ mð n n4 nd n¤ nÈ nä o ol oÐ p p\ p p¸ q4 qP r r| r° s sŒ sà t0 tˆ tð uä v0 vd vÈ w  w( w wÔ x xx xà y yH y„ z` zÀ { {h {¨ |  |8 |œ } }l }´ }Ü ~ ~\ ~ ~ì L Œ Ä €< €h €œ €Ð  l ¬ ‚€ ‚Ä ‚ì ƒ ƒt ƒÔ „P „¼ … …4 …x …¤ …Ð †( †x †” †È ‡$ ‡À ˆ ˆ@ ˆd ˆœ ˆ´ ‰ ‰H ‰¨ ‰ì Š Š@ Š ‹x ‹Ü Œ Œ` Œˆ Œ´ Œä t ´ Ž  Ž` Ž¸  , \ ¸    Ô ‘4 ‘” ‘Ð ‘ô ’X ’¬ ’ô “, “` “œ “Ì “ð ” ”@ ”p ”¨ ”à • • •L •” –H –Ä —8 —d —À ˜ ˜H ˜t ˜Ü ™  ™d ™¨ ™ð š št š  ›  ›à œ@ œÀ 8 ¨ ž  žŒ žô Ÿ4 Ÿ„ ŸÀ    ˆ  Ü ¡8 ¡ ¡ä ¢8 ¢h ¢¸ ¢Ü £, £| £Ð ¤  ¤T ¤œ ¥ ¥p ¥Œ ¥´ ¥Ü ¦ ¦D ¦„ ¦¨ §ˆ §Ø ¨ ¨8 ¨` ¨€ ¨¬ ¨ü ©T ©„ ©¼ ª ªT ª¤ ªÈ « «T «˜ «è ¬ ¬h ¬¼ ¬Ü ­ ­X ­¤ ­È ® ®T ®” ®à ¯ ¯\ ¯¨ ¯ø °Œ °¬ °Ü ±  ±d ±˜ ±ì ²¬ ³0 ³P ³| ³È ´D ´€ ´¬ ´Ø ´ø µH µ” µ¸ ¶ ¶d ¶œ · ·4 ·X ·x ·œ ·ä ¸ ¸h ¸€ ¸À ¹ ¹H ¹” ¹¸ ¹Ð º ºH ºŒ ºØ »( »x »¸ ¼ ¼Ø ½t ½¤ ½ì ¾d ¾„ ¾´ ¾ô ¿ ¿l ¿´ ¿à À Àl ÀŒ ÀÈ Àü Á Át Á¼ Â8 Ât Â¤ Âô Ãl Ã˜ Ãè Ä ÄP Äp Ä Ä° Äô Å8 Å| Å¨ ÅÔ Æ$ Æ€ Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Æä Ç  ÇL Ç€ Ç¨ È È` È€ È  ÈÔ É É Éì ÊX Ê€ Êœ ÊÄ Ë0 Ëp Ë¸ Ëè Ì< Ìd Ì€ Ì° Í8 Í€ Í¼ Íì Î\ ÎÀ Îü Ï  Ïd Ï ÏÜ Ð( Ð€ Ð´ Ñ Ñ, ÑP Ñ Ñô Ò\ ÒÜ Ó$ ÓL Ó„ Ó¨ ÓÄ Óø Ô0 Ôˆ Ô´ ÔÜ Ôø Õ@ Õp Õ¨ ÕÔ Ö0 Öä × ×` ×” ×È Ø Ø` Ø” ØÌ Øì Ù Ù˜ Ùä Ú Ú4 Úl Ú¤ Û( Ûx Û¤ Ü, Ül ÜÐ Üè Ý, Ý  ÝÄ ÝÜ ÞP Þ| Þü ß$ ßp ß¸ ßÜ ßü à, àd àè á@ ál á¬ áà â âD âœ ã  ã` ãŒ ã¼ ãä ä  ä4 äˆ ä¬ äÌ äô å$ åŒ åà æ$ æp æ” ç ç0 ç„ ç¬ çü è èl èŒ è¬ èÜ é é˜ éä ê< êh ê” êÐ êè ë  ë8 ë` ë° ëÐ ëü ì ìh ì ìÀ í$ í@ í° íÌ íè î îH îü ï4 ï´ ïì ð ð8 ðp ñ( ñ| ñÈ ñø ò òL òÔ ó óÐ ô$ ôp ô  ôÈ õ  õ( õT õ  ö öh ö  öô ÷t ø0 øœ øÐ ù8 ùŒ ùà ú ú@ úx úô ûL üH ý ýp ýä þD þœ þÐ ÿ4 ÿˆ ÿü  H  ´  Œ è H x Ø , p Ô ü H €   \ ˆ Ø  D h   ì  ( X x   X „ Ø 	 	h 	ä 
 
< 
d 
° 
Ì 
ü 4 „ ° ü   `  Ø  , L x ˜ È ô $ t ¨ ü @ t Ä ø ( H | ¬ Ì   < Œ  € ´   @ x ¨ ì , h ˜ Ø  d ¤ ü d œ Ð  ˆ Ð    H ” ì < ` ¼ , € Ø 4 „ Ü 4 Œ Ä  l Ä   p À ì  <  ˆ ! !L !p !Ð !ô " "L "p " "ä # #p #” #¸ #ð $  $@ $œ $Ø $ü %X %| %  %ô &  &@ &” &Ì &ø ' 'p '´ ( (, (` (  (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä (Ä )H )` )œ )è *  *h *¨ *ð +8 +´ +ì ,8 ,p ,è -  -p -Ü .° .° .° .° .° .° / / / / / / /¸ 0T 0¬ 0¬ 0¬ 0¬ 0¬ 0¬ 0ô 1D 1l 1˜ 2 2x 3( 3ˆ 3¬ 3È 3ä 4 4˜ 4è 5  5€ 5¬ 5ô 6` 6À 7p 7Ì 7ð 8L 8¬ 8ô 9$ 9Ô 9ø : :\ :À ; ;\ ;ˆ ;è <8 <8 <8 <8 <8 <8 <8 <8 <8 <8 <8 <8 <8 <8 <8 <8 <8 <8 <È =˜ =¸ =ì >x ?H ?  ?Ø ?ø @ @X @„ @Ü A  A AP Aà B B8 Bh C Cl C  CÄ DT E0 F F” FÐ Fô G$ G\ G€ Gà Hp H¬ Hì I” Ið J4 J4 J4 JÀ K L  Lô MX M” Mä NH N€ N´ Nè OL OÜ P Ph QT Qˆ Q¼ Qô RD R” R¼ Rø Sp S¨ SÈ T  TL T¤ TÀ Tð UH Uœ UÌ Uô VH V´ W  WT W„ WÜ X0 X„ X„ X„ X„ X„ X„ X„ X„ X„ X„ X„ X„ X„ X„ X„ X„ X„ X„ XÜ YT Y¤ Yð Z@ Zà [ [d [´ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \à ]H ]| ]Ð ^ ^€ ^¤ ^¤ ^¤ ^¤ ^¤ ^¤ ^è _d _¬ `0 `X `€ `à a a` a˜ b0 b| c  c( cx c  cÈ cè dP dˆ dØ e e` eô fD f” f” f” f” f” f” f” f” f” f” f” f” f” f” f” f” f” f” fÔ g< gŒ gÜ h< hŒ hŒ hŒ hŒ hŒ hŒ h¸ i iX i iÄ j j¤ jè k8 k8 k8 k8 k8 k8 k kô l lŒ lü m` m` m` m` m` m` mÐ n8 n° nü o o0 oL ox o° p@ pœ pÈ q< ql qˆ qä rH r¼ s sx s  sÈ t tx tØ u( up u¼ uô v vœ w  w wl wÈ x  xh xh xh xh xh xh xh xh xh xh xh xh xh xh xh xh xh xh x¼ xè y yH yÈ yø zP z¤ zø zø zø zø zø zø {ø |Œ } }p }Ä ~ ~h ~Ð X Ì €( €l €¬ D ° ‚@ ‚| ƒ ƒx ƒœ „t „˜ „ô …\ …œ †t †è ‡8 ‡  ‡  ‡  ‡  ‡  ‡  ‡Ô ˆ8 ˆØ ‰H Š4 Š´ ‹$ ‹` ‹ˆ ‹Ü Œ  Œ$ Œh ŒŒ Œ¨ Œð $ D  È Ž Žx ŽÌ 4 l À À À À À À À À À À À À À À À À À À ì 0 p ¤ Ü ‘ ‘T ‘| ‘Ô ’( ’@ ’h ’¬ ’È ’ä “4 “€ “Ô ”, ”D ”l ”´ ”Ð ”ì •8 •¤ •ô –D –¸ — —T —¨ —ø —ø —ø —ø —ø —ø —ø —ø —ø —ø —ø —ø —ø —ø —ø —ø —ø —ø ˜, ˜¤ ˜¼ ™$ ™H ™ ™à › ›Ì œü œü œü œü œü œü , \  È ž  žœ Ÿ Ÿ8 ŸT Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ Ÿ¸ ŸÜ  l ¡ ¡d ¡˜ ¡´ ¡Ü ¢  ¢$ ¢h ¢” ¢´ ¢Ü £ £( £L £ £ô ¤4 ¤Ä ¥\ ¥¬ ¦ ¦P ¦ø §” ¨D ¨  ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü ¨ü © ©\ ©À ª ª< ªT ª¨ ªÌ ªì «H «l « «Ð ¬, ¬P ¬œ ¬Ô ¬ø ­H ­œ ® ®H ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®¤ ®È ®ä ¯  ¯ ¯0 ¯| ¯° ¯è °$ °H °d °¸ °Ô ±, ±T ±€ ²p ²Ä ²ø ³$ ³l ³¬ ³Ì ³ô ´ ´< ´X ´t ´ ´¸ ´Ð µ4 µ´ ¶( ¶„ ¶è ·0 ·° ·° ·° ·° ·° ·° ¸d ¸è ¹ ¹H ¹p ¹¨ ¹ø º` º¸ ºØ ºð »H »€ »° ¼ ¼H ¼H ¼H ¼H ¼H ¼H ¼œ ¼¼ ¼ä ½ ½| ½Ì ¾D ¾Œ ¿t ¿¼ ¿ü À| ÀÈ ÁD ÁŒ ÁÐ Áü Â@ ÂØ Ã Ã\ Ã Ã° Ãð Ä Äd Ä¨ Ål ÅØ Æ, Æd Æ¤ ÆÌ Ç4 È$ È@ Èd È€ È¤ ÈÈ É˜ ÉØ Ê< Êœ Ë Ë< Ëà Ìl Ì´ Í< Í\ Í| Î| ÎÌ ÎÌ ÎÌ ÎÌ ÎÌ ÎÌ Ï  Ï| Ï¼ Ð$ Ð¬ Ñ¬ Òì Ô  Õ” ÖT Ö€ ×$ Ø@ Øt Ù ÙT Ùp ÙŒ Ú4 Ú| ÚÄ Úè Û@ Û\ Ût Ûä Üt Ý  Ýt Ýà ÞX Þ| ßP ßx ß¬ à8 á  â âL âÈ ã< ãT ãx ãÀ ãô ä, äh ä€ ä¤ ää å åT åˆ å¼ åô æ æ8 æx æ˜ æø ç çT çÀ çø èd è  èÜ é éP é„ éÀ éô êT êˆ êô ë0 ëd ëœ ëà ì4 ì˜ ìÐ í í´ íì î( ï$ ï\ ïÌ ð( ð° ñŒ ñÄ ñü òh ò ó óÔ ô$ ôl ôÌ õ õl õ¸ õð öô ÷L ÷¤ ÷Ì ÷ô ø øT ø øÈ øì ù¨ ùÄ ùø ú  úP út úœ úÔ û„ ûÄ üd ü¸ üø ý4 þ( þ\ þœ þØ ÿ ÿL ÿˆ ÿÀ ÿü  t p ¬ è $ `   Ü Ø  L | Ü  T ˆ Ô ü ( P | ¬ ì  @ x ¸ , d ¬ È 	 	à 
 
ô H È  $ T p œ  <  ´ ˜ Ð $ X ” \ ˆ À  8 ` À 4 x ° Ô   , d  ´ ì  0 x À è  ` ˜ è   p   ô ( T ¨  T ¨ Ü  D ” È ô < h Œ ° Ô  P „ Ø  8 P ˆ ¸ ì  L „   P œ è  0 !D !ˆ !Ü "0 "˜ "è #  $\ $Ì $ð %L %h %À & &\ &„ &Ø &ü '  'D 'h '” 'Ì ( (x ) )p )˜ )À )è *$ *L *œ ,D ,| ,Ð -0 -Ð .  .0 /h /È 0p 0” 0Ð 0ô 1 1D 1l 1” 1¸ 1Ü 2  2( 2L 2p 2” 2¸ 2Ü 3  3$ 3H 3„ 3Ô 3ø 4\ 4À 4ä 5 5D 5¨ 6 6„ 6Ä 7  7@ 8Œ 8ü 9H 9| : :d ; ;L ; ;Ð ;ü <4 <P <à =  =ˆ =¤ =Ü >  >, >H >| >  >Ì ? ?< ?„ ?° ?ä @t A A< At A¬ B B8 BX B¸ BÐ Cˆ D0 DT EÈ Fä H I` Jp J˜ KT K° L$ M` NÈ P Q€ R S Sl S” SØ T  T< T¬ UD U| V VD W@ Wt Wœ WÄ Wø X  XH XŒ XÀ Y YH Y` Y˜ YÄ Z Z< Z\ ZÌ [, [P [Œ [¨ [ð \8 \l \Ì \è ]@ ]\ ]ˆ ]¼ ]ð ^ ^( ^| ^Ð _ _4 _X _° _ü `D `ˆ `¤ `À `Ø a aÈ b b8 bl b  b¼ bØ c< d4 d` dÀ e° f  f¤ fÌ fè g, gl gì hx h˜ hØ i iL i° iä j jl jŒ jÈ k k0 k” kÀ kì l$ lP lt lÄ m@ m„ oÈ oì p p@ ph p” p¼ pä q q< qd qŒ q¸ qà r r< rh r” rÄ rô s  sP s| s¤ sÐ sü t0 tt tÀ tè u\ uÌ uð v\ v€ v¤ vØ w w( wL w„ w´ wì xX x´ xà yP y¨ z zD zl z¸ zä { {( {T {¨ {Ì {ä {ü | |@ |l |˜ |ä }< }Ä }ü ~T ~€ ~° ~à  P x Ü €8 €  €¸  T „ Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì ‚H ‚” ‚Ì ƒ, ƒŒ ƒ¼ ƒø „( „L „ü …p †  †| †˜ †è ‡Œ ‡à ˆp ˆÀ ‰$ ‰P ‰¤ Š$ Š° Š° Š° Š° Š° Š° Š° Š° Š° Š° Š° Š° Š° Š° Š° Š° Š° Š° ‹h ‹¨ ‹ð Œ8 Œ¨ Œì 8 p ” ¸ Ž ’Œ ’¤ ’ì “$ “¤ “Ø ”ð •T –\ –Œ — —D —h —È ˜ ˜ô ˜ô ˜ô ˜ô ˜ô ˜ô š” šô › ›T ›¨ ›Ø œ4 œX œ˜ œÔ    d ¨ Ü ž0 ž ž° žÜ Ÿ Ÿø  4  4  4  4  4  4  Ä ¡ ¡< ¡< ¡< ¡< ¡< ¡< ¡¬ ¢À £p £° £° £° £° £° £° £ô ¤ ¤( ¤X ¤¼ ¥  ¥( ¥` ¥ˆ ¥° ¥Ø ¦ ¦0 ¦h ¦¬ § §T §” §À §ì ¨D ¨| ¨¨ ¨Ô ¨ø © ©p ©Œ ©Ä ©Ü ª< ªt ª¬ ªä ªø «0 «h «œ «è ¬$ ¬` ¬˜ ¬Ð ­ ­L ­„ ­¸ ­ì ®$ ®„ ®è ¯X ° °h °„ °¼ °ô ±˜ ² ²` ²° ³  ³H ³d ³ ³¸ ´4 µ, µø ¶< ¶X ¶ˆ ¶À ·( ·x ·¤ ·ü ¸< ¸x ¸´ ¸ð ¹  ¹X ¹ˆ ¹° ¹ä º »p »À »è ¼ ¼P ¼¼ ¼à ½ ½d ½  ¾ ¾Ä ¿  ¿h À, Àx À¨ ÀÐ Á Á0 Áx Â Â\ Âx ÂÈ Âä ÄL Æ, Èx È¤ Éü Ê„ Ë@ Ë¤ Ì Ì Ìt Ì” Ìü ÍD Íd Í„ Î@ Ï ÏŒ Ï´ Ð ÐX Ñd ÑÜ ÒX ÒÈ Ó0 Ó° Ô  Ô\ Ô„ Õ< Õx Õ¤ Öä ×  ×l ×Ô ØŒ Ø¸ Ù€ Ú\ ÚŒ Úü Û@ Ûl ÜH Ü| Ýˆ ÝÄ Þ˜ ß„ ßÔ ßø áL á„ â âÔ ã, ä„ äð å` æœ ç\ ç„ è˜ é êt ë` ë í íL í˜ îÐ ï ðÄ ñ8 ñh ñ„ ñü ò  òD ó ó< óX ô< õ  õP ö, öl ÷0 ÷X ø¸ ùä ú0 ú¼ ûÀ ûè üt üÄ ý„ ýÀ þ€ ÿ¨ ÿä  H  , Ì  @ ô Œ ´ , P t °  | | Ü Ä 	P 	Ô 
D 
  
è  l P t ° ü 4 Ø | \   x x ¨ ü   t Ø X Ü è h Ü Ü @ ¬ D x Ü <  T ¤ ô h ° H ° (  à !` !Ü "h # #, #Ä #ð $„ $° $ü %L %ä &„ &¬ '< 'x (  (D (ˆ (¼ (ô ), )P )l )Œ )à * *D *| *¤ *è +L +ˆ +Ü ,0 ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,„ ,ð -L -t -ì .< .¨ /< /t /Ä 0, 0À 0ø 1H 1H 1H 1H 1H 1H 1H 1H 1H 1H 1H 1H 1H 1H 1H 1H 1H 1H 1Œ 1Ø 1ü 2x 2Ä 2ä 3| 3  4$ 4€ 4Ð 5x 6 6¨ 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 6ô 7L 7” 8 8D 8¬ 8è 9  9H :4 ;, <  <H <p <ø =€ > ? ?h ?Ä @H AP AÐ Aô B BH B” B¸ Bô C CT Ct C¬ Cà Cà Cà Cà Cà Cà Cà Cà Cà Cà Cà Cà Cà Cà Cà Cà Cà Cà D D@ Dd Eà FX F| F  F  F  F  F  F  FÄ G  G$ GD Gh G  GØ H, H° I IX IX IX IX IX IX IX IX IX IX IX IX IX IX IX IX IX IX I I´ Iì JL JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ JÌ K K, KX K° Kè L L< L¤ LØ LØ LØ LØ LØ LØ M ML M€ M¤ Mè N( N\ N€ NÌ Nä O O0 Ol OÈ Oð P8 PT Pl Pˆ P¤ P¼ Pü Q4 Q  R, R\ R R¨ Rø SD Sx Sä TP Th T€ T˜ T¸ U¼ V  V0 VL V” V¸ Và Vü W( W| W° WÌ Wô X X4 XP Xl X¸ XØ Y YH Yh Yœ Yì Z Z@ Zt Z´ Zä [ [T [x [´ [è \  \P \| \  \ì ]$ ]T ]l ]ˆ ]Ä ^ ^@ ^€ ^œ ^Ð ^ü _4 _` _| _ì `( `\ `ˆ `¼ `ì a aL a a¸ aì bX b„ b¸ bä c cP cx c° cÈ d dD d¸ dì e0 eH ep f, fX f„ fœ f´ fø g4 g| g  g¼ gè h@ hœ hü i  i8 il iÄ ið j  j< j  jÜ jø k kH k¤ k¼ kÔ kü lL m m0 mH md m¨ mà n( nX nˆ n¬ nð o oH op o¨ p pL p˜ pà q4 ql qè r4 rP r” rä s sH st sà t  t` t˜ tà u u€ v, vÈ w$ w€ wÈ wø xH xt xŒ xÌ y, yP yŒ yè zd z| z¸ {X {¬ {Ð |( |T |x | |ô }4 }Ä ~  ~p ~ø 4 t ¨ € €h €˜ €Ð €ü $ ˆ Ä ð ‚H ‚  ‚È ‚à ƒ  ƒd ƒ| ƒÌ „  „P „ˆ „¤ „à … …4 …d …ˆ …  …Ü † †4 †X †t †œ †È ‡@ ‡€ ‡¸ ‡ø ˆ$ ˆ@ ˆd ˆ€ ‰@ ‰ ‰Ä ‰ì Š Š( ŠD Šˆ Š¤ Šø ‹\ ‹€ ‹¨ ‹Ð Œ Œ@ Œ€ ŒÐ  , h „ ¤ È à ø Ž Ž4 ŽL Žh Ž¼ Žô  < T p ” Ä ü 4 t ¼ ‘ ‘\ ‘¸ ’ ’d ’Ô “  “T “¨ ” ”x ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”Ä ”à •8 •d •¬ •ä –H –| –° –è — —@ —d —ˆ —À —ô ˜( ˜\ ˜” ˜ì ™ ™< ™` ™ ™¸ š8 št š¤ šÜ ›  ›h ›  ›Ø œ< œ” œÄ œÜ  À ä ž¤ ŸX ŸÌ Ÿð    ì ¡, ¡ˆ ¡è ¢€ £$ £p £È ¤0 ¤¨ ¤ä ¥8 ¥˜ ¥¼ ¦ø §0 §| §¬ ¨  ¨ ¨Œ ¨¸ ©P ©œ ©Ô ª ªX ª€ ªÈ ªü «P «| «Ä ¬  ¬p ¬à ­x ­x ­x ­x ­x ­x ­x ­x ­x ­x ­x ­x ­x ­x ­x ­x ­x ­x ­¸ ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ® ¯  ¯| ¯° ° °d °° ± ±| ±´ ² ²x ²° ²ä ³H ³¤ ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ³Ü ´ ´´ µ µL µŒ µÀ ¶ˆ · ·ˆ ¸Œ ¹Ä º ºL ºˆ ºÀ ºð »  »Ü ¼4 ¼l ¼ü ½, ½t ½˜ ½è ¾\ ¾Ü ¿ ¿ ¿ ¿ ¿ ¿ ¿À À  ÀX Àø Á< Â, Â¬ Ãt Ã¤ ÃÌ Ä  Ä@ Ä| Ä¨ ÄÌ Å Å” Å° Æ Æ( ÆX Æx Æ¨ ÆÄ Æä Ç Ç` Ç` Ç` Ç` Ç` Ç` Ç  ÇØ È ÈD È\ È¸ ÈÜ É É< ÉX É¬ ÉÔ Ê Ê¬ Êô Ë ËX Ët Ì€ ÌÄ Í( ÍH Íd Íˆ Í° Î Î8 Ïd Ï¸ Ð Ð8 Ð´ Ðì Ñ Ò ÒH Òl Ò¼ Ôh Ôð Õ, Õh Õô ×0 ×À ×ø ØŒ ØÔ Ù Ù, Ù` Ú ÚH Ú| Ú° ÚÔ Úø ÛL Ût Û Û¬ ÛÔ Ü, Üh Ü¨ Üü Ý ÝÐ Þ0 Þh Þ€ Þ¸ ÞØ ß ßD ßx ß¬ à à\ àœ àÈ á  á@ á\ á  áÄ áà áü â4 âP âh âÔ ã ãD ã€ ã° ä( äØ å åL åˆ å¸ æ4 æø ç ç| çì è èX è” èÀ èÜ é$ é@ é” é° éÌ ê ê$ ê  êÄ ëP ëˆ ëÄ ëô ìL ìt ì¸ ìì íD íx í¨ íà î  îh ï  ïT ï„ ð$ ðH ðx ðä ñ ñ@ ñ€ ñØ ò ò\ òü óH ól ó¸ ôL ô„ ô  ôÌ õ õD õl õŒ õ´ õÜ ö ö4 ö” ö° ÷ ÷T ÷ˆ ÷¤ ÷Ì ø ø0 øX øt øœ ø¸ øà øü ù$ ùd ù ù¸ ùÔ ùü ú úH úl ú ú´ úØ û4 ûl ûø ü4 ü” üÀ ý( ý` ýŒ ý¤ þ  þ` þ° þø ÿ˜ 	  	 8 	 p 	 ¨ 	 Ü 	ˆ 	 	d 	Ä 	0 	Œ 	Ð 	4 	Ü 	( 	Ô 	Ô 	Ô 	Ô 	Ô 	Ô 	P 	 	 	 	 	 	 	l 	 		H 		x 	
 	
À 	
è 	< 	t 	¨ 	 	$ 	H 	Œ 	L 	l 	 	 	Ì 	T 	Œ 	L 	Ü 	  	| 	Ä 	, 	ˆ 	¼ 	à 	 	D 	 	Ì 	 	4 	\ 	  	´ 	 	X 	” 	( 	p 	p 	p 	p 	p 	p 	ø 	0 	h 	¨ 	à 	  	T 	T 	T 	T 	T 	T 	Œ 	\ 	\ 	\ 	\ 	\ 	\ 	¸ 	( 	x 	” 	è 	è 	è 	è 	è 	è 	D 	¸ 	 	( 	x 	x 	x 	x 	x 	x 	à 	 Ô 	!€ 	"` 	" 	"ì 	#ˆ 	$H 	$H 	$H 	$H 	$H 	$H 	$è 	%  	%X 	%” 	%Ì 	%Ì 	%Ì 	%Ì 	%Ì 	%Ì 	%ô 	&Ð 	'( 	'l 	'¨ 	'ü 	(  	(D 	(p 	(¬ 	(Ø 	) 	)p 	)À 	)è 	*h 	+, 	+X 	+œ 	+Ü 	,ˆ 	,à 	-ì 	.0 	.T 	.´ 	.è 	/< 	/h 	/œ 	/Ð 	/ô 	00 	0p 	0ˆ 	0¸ 	0è 	1 	1t 	1  	1Ä 	2 	24 	2p 	2¬ 	2Ü 	3 	3H 	3p 	3´ 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	3Ø 	4” 	4ð 	5t 	5´ 	6` 	6” 	7H 	7€ 	7à 	8 	8< 	8t 	8˜ 	8´ 	8ð 	9  	9L 	9´ 	:ø 	;Ø 	< 	=ä 	> 	>¤ 	?ˆ 	@X 	@  	@Ø 	A  	A( 	Ax 	B 	B` 	B´ 	C  	CÈ 	DT 	D€ 	D  	DÐ 	E0 	EX 	E¸ 	F8 	F` 	Fˆ 	F¬ 	FÌ 	Fô 	G 	G8 	Gd 	GŒ 	GÄ 	Gð 	H 	H 	H 	H 	H 	H 	Hd 	HÀ 	I  	I| 	IÐ 	J  	JD 	Jl 	Jœ 	J¼ 	Jü 	K$ 	KL 	Kl 	K” 	K” 	K” 	K” 	K” 	K” 	Kà 	L@ 	M  	MÌ 	NÔ 	O  	Oø 	P¸ 	QÀ 	R€ 	Sˆ 	TH 	UP 	V 	W 	W 	W 	W 	W 	W 	WØ 	XÜ 	Y 	YH 	YŒ 	YÔ 	Z 	ZP 	Z| 	Z´ 	Zì 	[ 	[l 	[¨ 	\  	\L 	\L 	\L 	\L 	\L 	\L 	\Œ 	\¸ 	] 	]L 	]x 	]Ô 	^ 	^D 	^¸ 	_  	_d 	_  	_  	_  	_  	_  	_  	` 	`$ 	`\ 	`ˆ 	`à 	a` 	a¤ 	aÀ 	aè 	b 	b8 	bh 	b 	bÔ 	c 	c, 	c„ 	cØ 	d 	d$ 	dH 	dd 	d¼ 	dä 	e( 	eP 	eœ 	eä 	fh 	fÐ 	g  	gp 	gÈ 	h 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hd 	hŒ 	hÐ 	hô 	id 	i¼ 	ià 	j  	j$ 	jX 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jÀ 	jè 	k, 	k 	l 	l` 	l¼ 	m< 	m„ 	m´ 	nÀ 	oD 	oÀ 	oð 	p$ 	q4 	qˆ 	qø 	rø 	sd 	t  	t( 	tp 	tÌ 	uX 	vd 	v¼ 	w< 	wl 	x| 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y 	y` 	y€ 	y¬ 	yÐ 	yô 	z 	zD 	zÄ 	{D 	{| 	{ø 	|H 	|t 	|ô 	}T 	}Ô 	~X 	~¨ 	 	h 	¬ 	Ü 	€L 	€° 	€Ì 	 	€ 	Ì 	‚ 	‚@ 	‚\ 	‚x 	‚¤ 	‚ô 	ƒL 	ƒœ 	ƒÈ 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	„H 	…( 	† 	†È 	†ü 	‡0 	‡T 	‡Œ 	‡¼ 	‡ø 	ˆ8 	ˆt 	‰ 	‰ 	Š8 	Š” 	Š´ 	Šè 	‹ 	‹, 	‹ˆ 	‹Ì 	Œ@ 	Œ| 	Œ” 	Œì 	$ 	¼ 	ŽT 	ŽÈ 	 	à 	 	° 	Ì 	‘  	‘t 	’  	’¨ 	“ 	“ 	“ 	“à 	”` 	• 	•t 	•Ð 	–$ 	–€ 	–´ 	—d 	—ð 	˜L 	™< 	š 	šh 	šŒ 	›t 	œx 	œð 	ž  	ž” 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿ| 	Ÿè 	 d 	 ¬ 	¡t 	£, 	£P 	£ü 	¤< 	¤Ì 	¥t 	¥˜ 	¦ 	¦| 	¦Ä 	§Œ 	©, 	©d 	©à 	ª 	ª° 	«< 	«¨ 	¬$ 	¬ì 	®„ 	®ì 	¯4 	¯˜ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°$ 	°x 	°  	°ø 	±  	±À 	² 	²d 	²˜ 	²¼ 	³4 	³t 	³´ 	³à 	´ 	´d 	´° 	´ð 	µ 	µ, 	µ¨ 	¶4 	¶X 	¶„ 	¶¨ 	¶Ì 	¶ð 	· 	·@ 	·| 	·è 	¸ü 	¹ 	º$ 	ºD 	ºp 	º¸ 	ºì 	» 	»4 	»P 	»p 	»Œ 	»ð 	¼ 	¼T 	¿x 	¿À 	À 	Àx 	ÀÀ 	Àô 	ÁX 	Áè 	ÂH 	Âp 	Â¤ 	Âä 	Ã 	Ã€ 	Ã´ 	ÃÐ 	Ä 	Ä0 	ÄT 	Ä” 	Äì 	Å< 	Å” 	ÅÌ 	Åä 	Èl 	Èœ 	ÈÄ 	Èì 	É 	Ê8 	Ë  	Ëd 	ÍP 	Íx 	Íœ 	ÍÀ 	Íì 	Î0 	Î¼ 	ÏP 	Ïè 	Ð4 	Ðx 	Ð´ 	Ðð 	Ñ$ 	Ñ\ 	Ñ„ 	ÑÔ 	Ñø 	Ò< 	Ò” 	Õ, 	Õœ 	Ö 	Öt 	Ö˜ 	×@ 	×Ð 	Ø\ 	Øô 	Ùx 	Ú  	Úh 	Úô 	Ûp 	Û¨ 	Ü4 	Üt 	Ýp 	ÞP 	Þˆ 	Þ¼ 	ß< 	ßÐ 	ßü 	à4 	à€ 	à¼ 	á  	áH 	áŒ 	â  	â$ 	âd 	âÐ 	ã8 	ã 	ãÈ 	ä 	äl 	ä¨ 	å 	åp 	å˜ 	åÄ 	åð 	æT 	æ 	æÐ 	æì 	ç 	çd 	ç¤ 	çä 	è  	èL 	èx 	è 	èè 	é´ 	êx 	ê  	êè 	ë 	ëŒ 	ëÌ 	ìÌ 	í 	î 	îˆ 	î¬ 	îÔ 	îô 	ïl 	ï  	ïÜ 	ð  	ð8 	ðd 	ðœ 	ðÈ 	ðì 	ñ 	ñD 	ñè 	ò 	ò˜ 	òÈ 	ó< 	ót 	ó¨ 	óà 	ô8 	ôl 	ôœ 	ôØ 	õ” 	ö  	ö€ 	öÜ 	÷, 	÷| 	÷¸ 	ø  	ø@ 	ø\ 	ø  	øô 	ùH 	ù| 	ù¤ 	ùÔ 	ùü 	ú 	úH 	út 	úÔ 	úø 	ûD 	û` 	û€ 	ûÜ 	ü  	üP 	üŒ 	üÄ 	üð 	ý 	ýp 	ý˜ 	ý¸ 	ýÜ 	þ  	þ( 	þÄ 	ÿ$ 	ÿ´ 	ÿÜ 
  
 \ 
 ´ 
 
d 
´ 
ü 
  
x 
 
T 
œ 
Ø 
 
0 
\ 
€ 
Ø 
0 
p 
Œ 
È 
	\ 
	¤ 
	ì 

| 
$ 
\ 
Ð 
ð 
¬ 
ø 
@ 
d 
¸ 
H 
œ 
Ô 
  
D 
 
¼ 
P 
x 
¨ 
ô 
P 
Ä 
ð 
 
$ 
P 
t 
˜ 
Ä 
ð 
 
H 
| 
  
¼ 
à 
ü 
  
< 
h 
 
ð 
¬ 
h 
H 
Œ 
ä 
@ 
 
ø 
( 
X 
 
à 
$ 
( 
˜ 
è 
  
 L 
 œ 
 è 
!0 
!d 
!¤ 
"  
"8 
# 
#¨ 
$d 
%  
%Ü 
&h 
&œ 
&À 
'` 
'œ 
'À 
'Ü 
(T 
(” 
(È 
)  
)( 
)X 
)€ 
)¨ 
*, 
*¤ 
*ø 
+° 
+è 
, 
,X 
,˜ 
,Ì 
-ø 
.Ü 
/ð 
0 
0L 
0| 
0¸ 
0Ü 
1  
1t 
1È 
1ø 
2  
2h 
2€ 
2Ø 
2ô 
2ô 
2ô 
2ô 
2ô 
2ô 
3P 
3à 
48 
4Œ 
4Ô 
5Ð 
6 
6P 
6 
6Ô 
7< 
7t 
7¼ 
7ì 
8( 
8` 
8¸ 
9 
98 
9\ 
: 
:| 
:À 
:ü 
;8 
;p 
< 
<P 
<t 
<œ 
<ü 
=X 
>  
> 
>0 
>\ 
>„ 
>¬ 
>è 
?H 
?| 
?È 
@ 
@D 
@Œ 
@Ì 
A@ 
Aü 
Cp 
CÀ 
Dt 
E„ 
EØ 
F4 
Fˆ 
G4 
H| 
HÀ 
Hì 
I 
Ip 
I´ 
Jx 
JÜ 
K 
K¼ 
L 
LL 
L˜ 
LÄ 
MØ 
N$ 
Nt 
N˜ 
NÈ 
Nü 
O0 
Oˆ 
Oø 
P` 
P 
PÈ 
Q 
Q¤ 
R, 
Rd 
S@ 
S” 
T 
T¼ 
Tø 
U( 
Ut 
U¸ 
Uè 
V´ 
W0 
W¼ 
Wø 
X( 
XL 
X| 
X¸ 
Y8 
Yt 
Yè 
Z8 
Zh 
ZÄ 
[  
[8 
[p 
[¼ 
\ 
\H 
\l 
\  
\Ô 
\ô 
]Ì 
^ 
^0 
^d 
^Ä 
_  
_€ 
_Ø 
`\ 
a 
a  
aH 
aÀ 
b€ 
bÀ 
c 
cT 
c 
cÌ 
d@ 
dŒ 
dÐ 
e 
eh 
eÄ 
fT 
fÈ 
gl 
g¬ 
h 
i  
il 
iä 
j( 
k$ 
k 
l 
lˆ 
mÈ 
n  
nT 
n¼ 
o 
o¤ 
oü 
p0 
pˆ 
q@ 
q¼ 
r0 
s 
tX 
u 
u  
uì 
v8 
v| 
vì 
w, 
wd 
wœ 
wÀ 
x  
x| 
xð 
y¬ 
{ 
{h 
{  
{Ð 
| 
|T 
|” 
|ü 
}Œ 
}Ä 
~x 
~ð 
ì 
€À 
€ä 
„ 
Ì 
‚@ 
‚p 
ƒ@ 
ƒl 
„ 
…  
…D 
†h 
‡Ø 
ˆ 
ˆ( 
ˆT 
ˆ¸ 
‰ 
‰¤ 
Š 
ŠØ 
Šð 
‹| 
Œ8 
Œ´ 
Œð 
¼ 
ô 
ŽT 
Ð 
‘, 
’€ 
“ 
“  
“\ 
”  
”L 
”è 
•  
•L 
•À 
•ô 
–ä 
—H 
—„ 
—È 
˜$ 
˜` 
™L 
™˜ 
™Ô 
š$ 
šP 
š 
š´ 
šØ 
›ô 
œ 
œD 
œ¸ 
À 
ž4 
žX 
žÜ 
Ÿ 
ŸÐ 
 P 
 x 
 Ð 
 ø 
¡ 
¡| 
¡¨ 
¡è 
¢  
¢@ 
¢l 
¢° 
£ 
£T 
£œ 
£à 
¤ 
¤X 
¤˜ 
¤ü 
¥@ 
¥x 
¥Ü 
¦@ 
¦° 
¦è 
§ 
§D 
§€ 
§À 
¨  
¨X 
¨ˆ 
¨ð 
© 
©8 
©p 
©” 
©¼ 
©ä 
ª@ 
ªx 
ªü 
«$ 
«L 
«t 
«ð 
¬ 
¬8 
¬p 
¬ð 
­P 
­¨ 
­È 
® 
®D 
¯ 
° 
°X 
°¼ 
± 
±( 
±h 
±Œ 
±À 
±ô 
²< 
²€ 
²Ä 
³D 
³ˆ 
³È 
¶< 
·ä 
¸h 
¸Ô 
¹  
¹L 
ºH 
º” 
» 
»” 
»Ð 
¼ 
¼H 
¼” 
¼Ì 
½„ 
¿€ 
¿à 
À@ 
Àd 
ÀÀ 
Å` 
Åà 
Æ( 
Æl 
ÆÄ 
Ç$ 
È  
É 
Éˆ 
É¼ 
Êx 
ÊÜ 
Ëp 
Ë” 
Ëø 
Ì˜ 
Ì¸ 
Íp 
Í¨ 
ÍØ 
Î( 
Îl 
Î° 
Îø 
Ïh 
ÏÐ 
Ð 
ÐD 
Ð¨ 
Ðä 
ÑH 
Ñ¤ 
Ñä 
Ò$ 
Òˆ 
Ò¸ 
Òø 
Ó8 
Ó¼ 
Óà 
Ôˆ 
ÔÌ 
Õ 
Ö 
Öp 
Ö¸ 
Öì 
Ø 
Ø0 
ØÄ 
ÙH 
Ùx 
ÙÀ 
ÚD 
Úx 
Ú¨ 
Úä 
Û@ 
Û€ 
Ûø 
ÜH 
Ül 
Ý 
Ý  
Þ4 
ÞÔ 
ßT 
ßà 
à 
à8 
àd 
àŒ 
à´ 
á8 
áØ 
â  
â¬ 
ã  
ãl 
ã´ 
ä 
ä¬ 
å, 
åP 
åˆ 
åÄ 
æ 
æd 
ç 
ç¸ 
è  
èh 
è¤ 
éD 
éÜ 
êp 
êì 
ëH 
ë€ 
ëä 
ìT 
í 
íh 
í¸ 
íð 
î 
î4 
î¸ 
îÐ 
ï  
ï¤ 
ïÈ 
ð| 
ñ( 
ò 
ò¨ 
òÜ 
òÜ 
òÜ 
òÜ 
òÜ 
òÜ 
óp 
ô 
ô 
ô 
ô 
ô 
ô 
ôˆ 
ôÈ 
õ 
õX 
õ¬ 
õà 
õü 
ö$ 
öÈ 
÷  
÷ü 
øT 
ø¬ 
øô 
ùL 
ù¤ 
ú< 
úX 
ú  
û 
û` 
û˜ 
ûÄ 
ü  
ü” 
ü¼ 
üØ 
ý$ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
ýŒ 
þH 
þh 
þÈ 
þä 
ÿ  $  t  ¼  ô l Ä l   X ¤ à  T ø t ä x x x x x x x x x x x x x x x x x x ˜  < l  ¸ ø H 	0 	T 	x 	Ì 	Ì 	Ì 	Ì 	Ì 	Ì 	ø 
0 
` 
¬ 
ø \ ´ ì \ t ° è  „ Ø  „ ô   l ¬   X ¬ Ø  4 ” à  ˆ ´ è  ` ¸ ô P ¤ ü , l ¬  Œ È , œ Ô  ð ( ˆ È , À ø  ¸ à  ô p ¼  8 p ˜ à @ „ ¨ Ü    4  d    ´  ì ! !d !” !¼ "l "ð #˜ $L $° $ð %T % %´ %à &$ &P &t &œ &À &ô ', '° (¤ (ì )( +” ,  ,( ,` ,˜ ,Ü - -< -\ -x -˜ -¸ -Ô .$ .p .  .Ì / /$ /l /  /Ä /è 0 0¬ 1 1t 1Ì 2 2” 2à 3@ 3h 3 3¨ 3à 4 5X 5t 5 5´ 5Ð 6t 6˜ 6¼ 6Ø 7„ 7ø 8 8T 8x 8´ 9$ 9D 9h 9 9´ 9Ð :T ; ;| ;Ø ;ø < <T <| = =8 =l >  >œ >ì ?œ ?Ä ?à @< @p @¤ A A4 A  AØ B$ B” B¸ BÜ C C C C C C C C C C C C C C C C C C CD C¤ Cø D” Dð E< E Eð F$ FŒ GH G GÜ H4 Hœ HÔ ID Iè J, J Jè K< K° L L` L` L` L` L` L` L` L` L` L` L` L` L` L` L` L` L` L` Lˆ LÔ Lð Mh MÜ N N$ NP Nˆ O Oh O” O¬ OÔ P4 P¬ PÈ Pô QX QÈ R  RH R˜ R¼ RÜ SL Sœ Sô TT T¬ U U U U U U U U U U U U U U U U U U U” U¸ Uì VP VŒ V¬ W W€ Wø XL Xl XÔ Y< YŒ Yà Z ZX ZÌ [  [ [Ô \D \  \ø ]H ]˜ ^  ^8 ^ˆ ^Ø _X _¬ ` `h `ì aD at a° b  bh b¸ bÔ bü c cd cÌ d dp dÐ dì e0 e| e˜ e´ f fh f¸ g g( gx gà h0 h| h˜ i  iÄ j8 jÀ k k, kL k´ l@ l„ l¨ lÄ mÜ nP n˜ nä oL p pD px pà q< q” r  rT r¤ sˆ sÔ t tl tü uL u€ uä v< vŒ v¨ vü w\ w¬ wô x x y y0 y” z  zP z  zØ {$ {d {  {Ð | |L |œ }( }„ }Ô ~( ~| ~ì D ” è €< €ˆ €Ð   l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l Ä ‚0 ‚¤ ‚ô ƒD ƒD ƒD ƒD ƒD ƒD ƒœ „ „h „¸ … …\ …\ …\ …\ …\ …\ …¨ †( †T ‡4 ‡` ‡¸ ˆ$ ˆ¨ ˆÐ ˆð ‰@ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ð Š< Šp ŠÀ ŠÀ ŠÀ ŠÀ ŠÀ ŠÀ ‹  ‹L ‹È ‹ä Œ Œ0 ŒL Œp ŒŒ Œô 4 d ˆ ¤ Ž< Žì 8 ” ä  < X ˆ ¨ Ô ‘ ‘T ‘x ‘” ‘ü ’L ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ ’œ “ “t ” ”h ”ä •8 •¬ •è –  –| –´ –Ì —( —` —” ˜  ˜| ™ ™4 ™X ™” ™ô šT šà ›@ ›ˆ ›¼ œ œ” œä ( | Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì ž žØ Ÿ Ÿ@ ŸŒ Ÿè  h  Ð ¡0 ¡l ¡Ô ¡ø ¢ ¢Ð £4 £ˆ £ä ¤ ¤< ¤` ¥ ¥x ¥Ô ¦@ ¦ ¦¼ ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦Ø ¦ü §4 §d §„ §° §Ô §ü ¨0 ¨P ¨l ¨¼ ¨ô ©  ©x ©Ì ª ª8 ª„ ªØ «0 ¬Œ ¬¨ ¬ð ­\ ­¬ ® ®d ®¸ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯T ¯Œ ¯ä ° °„ °Ð ±  ±x ±° ²  ²p ²¬ ²Ð ²ô ³ ³L ³¨ ´  ´$ ´@ ´œ ´ì µT µ” ¶ ¶X ¶° ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ¶è ·@ ·” ¸ ¸\ ¸Ð ¹ ¹< ¹ ¹à º º$ º@ ºh ºì »\ »° ¼ ¼d ¼˜ ½, ½l ½à ¾0 ¾¤ ¾è ¿ ¿T ¿À ¿à À0 Àœ Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á Á  Áä Â Â, Âd Â¬ Ã4 Ã´ Ãà Å  ÅH Ål Å” Åô ÆL Æ¨ Çè È È8 Èh ÈŒ É° Éì Ê  ÊH Êl ÊŒ ÊÔ Ë4 ËX Ë| Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ë° Ì  Ì$ Ì€ ÌØ Í, Ít Íà Î Î8 ÎT Î| ÎÐ Îð Ï$ Ï\ Ï´ Ð Ðl Ð” Ð¼ Ðì Ñ ÑT Ñ¸ Ò ÒP Ò¨ Ó ÓX Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  Ó  ÓÄ Óô Ôt Ôœ ÔÄ Õ ÕT Õ€ Õ  Õ¼ Õè ÖP Ö| × ×< ×˜ ×Ð ØT Ø  Øð Ù, Ù, Ù, Ùx ÙÀ Ú Ú` Ú” ÚÌ Û$ Û@ Û` Û° Ü Ü4 Ü„ ÜÀ Ý Ý` Ý´ Ýè Þ@ Þ„ ß  ß@ ß\ ß ßÈ àÜ á, á€ áä â@ ât âØ ã ã< ã ãÈ ä˜ å( ål åÐ åÐ åÐ æˆ æä ç4 çœ çÔ è è` é êÄ ì¤ ìÔ í  íp íà îD î˜ îà ï ðH ð¸ ñô òô ôD õ€ õð ö öÀ ÷ü ûH ût ûŒ û¨ ûô ü üT üp ü  üØ ý ý< ýx þ  þ` þœ þÀ þä ÿ ÿ$ ÿ@ ÿ„ ÿÄ ÿð  (  T  ¬ è H è  8 x ¬ Ð   4 Ô ð  ( D ˆ Ä ð ` ¤  0 X t  ¬ È ô  4 X ˜ ° È ô 	  	` 	¬ 
`  Ì   Ø  8 l Œ À ø 4 \ ´ Ø ü ( ` ¼ Ø  ( Œ Ô ø 8 d ° Ô   , \  À è 4 \  8 Ð ô 0 ” è  P h  Ì  < ` Œ È ä @ X ˜  D h È  h P Ä  ` ¼ ø     H  p  ˜  À  è !$ !´ "` "Ü # #D # #¼ #ì $” $Ä % %, %p %” %° &0 &l &¤ &È 'X 'Ü 'ø ( (8 (d (  (Ô )  ), )à * *( *Ì +$ +¸ +Ü ,  ,L ,” ,Ô -  -$ -` -À . 0l 0° 1 2 2D 2| 2¬ 2Ô 3@ 3” 3Ð 4X 4¨ 4ä 5  5  5Ô 6T 6ˆ 6¸ 6ä 7P 7Œ 7À 7ø 8$ 8h 8¨ 8à 9H 9¸ 9ì ;4 ;P ;| <0 <° =( =` =Œ =Ø > >0 >t >” >È >ø ?\ @ @@ @p @ @° @Ð @ð A( AP Ax A¨ AØ B Bh C CT C” D Dh DÌ E E4 ET E´ Eì F¤ G0 Gh G¤ H0 Hd H° HÔ I ID IÀ J Jl Jœ Jø K0 K\ L L4 L¨ LÔ M  M8 Mp Mœ MØ N< Nt Nð O, O` OŒ OÀ Oø P8 Pl P¤ Pü Ql Qà R R8 R” RÀ Rì S@ Sœ Sà T  TD U U€ V( Vt VŒ VØ W4 WX W WØ X XL X€ X° Xð Y Y€ Y¬ Yì Z0 Zh Z¬ Zä [$ [` [” [à \x \” \¼ \ä ] ]@ ]l ]Ä ^ ^H ^ˆ ^è _< _ˆ ` `t `ì a cX dˆ f0 fh f˜ gL gœ gÔ gð h hD hl h” h¼ hà i id i” i¸ iÜ j jp jœ k k€ k¬ l ll m@ m” mô n nD n  nÈ o( oH od oÌ oð pX p| p´ pà q qH qä r( r  s s| sÀ sì t\ t” t° tÌ tè u u0 uX vP wè x  xL xh x€ xœ x´ xè y$ yD yŒ y° yü zd {$ {p |„ } ‚0 ‚p ‚Œ ‚° ‚Ü ƒ ƒT ƒŒ ƒ¬ ƒÈ ƒä „$ „< „ „´ „Ð „ì …( …P …à † †D †` † †¸ †Ü †ø ‡$ ‡Ì ˆX ˆ| ˆ¨ ˆÐ ‰ ‰@ ‰À ‰Ø Šp ‹ ‹¸ ‹Ô Œˆ t Ž ŽH Ž˜  ä  8 ` ° à ‘ ’  ’p •˜ •Ì – –œ —¸ ˜D ˜€ ˜¸ ™  ™h ™ü š š¨ ›  œL œh œ œÄ œè  4 ˆ Ä ž  ž< žœ žä Ÿ ŸX      ¡T ¡Ä ¡ð ¢ ¢@ ¢t £  £< ¤T ¤€ ¤Ì ¥@ ¥Ä ¥ð ¦, § §H §ˆ §¸ ¨Œ ©\ ©È ªP ª  ª¸ « «D ¬ ¬D ¬p ¬œ ­h ­„ ®T ®ì ¯, ¯h ¯œ ¯Ü ° °| °è ± ±@ ±„ ² ²D ²¼ ³  ³\ ³° µH ¶ ¶\ ¶¬ ·4 ·l ·Ð ¸¤ ¹T ¹ô ºP ºÐ »` ¼¸ ¼à ½  ½` ½ ½ð ¾d ¾¤ ¾à ¿( ¿P ¿| ¿¬ ¿Ø À À0 ÀX ÀŒ ÁÌ Â Âh Â´ Ã  ÃX Ã° Ä< Ä˜ Å0 Å` Åì Æ Æ¨ ÇX Çœ Çø É@ É¤ Êp Ë Ë( ËŒ Ë¤ Ëà Ì0 Ìp Í( Íˆ ÍÈ Î Î` Îx Ï Ï( ÏD Ïp Ïœ Ð< Ðh Ð” Ð¸ Ðä Ñ Ñ8 Ñd Ñˆ Ñ° ÑÈ Ñì Ò Ò< Ò¸ Òì Ó0 Ô Ô( Õ  Õ8 ÕÈ ÖŒ ×D ×| ×Ð ×ô Ø Ø0 ØH Ø` Ø| Ø´ ØÌ Øè Ù  Ù Ù4 ÙP Ù ÙÌ Ú” ÚÌ Úø Û Û@ Û| Ûè ÜL Üœ ÜÔ àì àì á á4 áX á| á  áÐ áü â0 âd â¬ âä ã ã4 ãh ã¤ ã¼ ä ä4 ät åL åx å¬ åè æì ç ç` çˆ ç¤ çÈ çü è è4 èl ê( ê êè ëT ë  ëð ì( ìT ì€ ì¸ ìì í, íœ íÀ ît ðÄ ñ$ ñp ñ¼ ñà òD òÌ óà ô( ô¬ ôü õœ öP öœ ÷H ÷Ø ÷Ø ÷Ø ÷Ø ÷Ø ÷Ø øH øl øØ ùô úŒ û ü° ý ýx ý¨ þH þ  ÿ ÿp ÿ” ÿ¸ 4 Ì  $ „ Ð ü 4 p ´ X ”  \ „ Ð Ø  \ 	 
 
¬ 
Ä p ì ° ” x ü ¨   ´  8 | ø x ü ¤ è ` à $ È ì ” È ü P ˆ ¸ ô h ´ Ô ô 4 œ À è D ˆ È 0 T | Ð  0 P t h ¬  , l ”   0 ” Ø    0  T  „  È ! !8 !d !˜ "¨ $¤ $È %˜ %Ô & &D &x &Ä ' 'T '€ ( (P (p (Œ (¬ (Ð )  )€ )° *, *” *È + +D ,Ô . 0 1, 1P 1¨ 2\ 2° 3D 3| 3¬ 4 4< 4p 4œ 4Ð 5H 5° 5Ø 6( 6 6ü 7\ 7€ 7ø 8P 8” 8Ü 94 9| 9´ : :T :ˆ :À ; ;l < <H <x <Ä <ì =$ =p =À > >( >X >” >à ? ?( ?T ?x ?¬ ?Ð @  @$ @H @” @ä AP Aˆ AÈ Aô B BD Bh B¤ BÌ Bð C CD Ct C¬ D DT D€ EL E€ E´ EÜ F FX F| F¤ G8 G´ GÜ H4 HX H| H  HÄ Hð I I` I¬ J JL J¤ Jð K KH KÐ KÐ KÐ KÐ KÐ KÐ LD L€ LÈ M M Nl Od OÈ Oì Pd P” Pì R€ R¼ Rø SH Sä T( U V VH V  X$ X` X° Y$ Yh YÐ ZÔ [¸ [ô \0 \  \ü ]< ]ð ^| ^| ^| ^| ^| ^| ^| ^| ^| ^| ^| ^| ^| ^| ^| ^| ^| ^| ^ð _( _\ _t _” _È `< `¤ `Ð a aH a| a° aÈ bD bp bð c cD c  d d` d¬ e  ed f f¨ f¨ f¨ f¨ f¨ f¨ fà g¬ gì gì gì gì gì gì h4 i i i i i i iÀ j jH j„ jÀ k kT k¨ kè l  lh lü lü lü lü lü lü md m  mÀ mü n nD nˆ n´ nÐ o ox oä p” pØ qT qð r¼ sH sì tœ u” uð vL và w$ wh wÔ xð y„ yÌ zh z¸ { {@ {p {p {p {À {ð |L |l } }@ ~ ~H ~€ ~¸ ~ô ( \ \ | œ À € €X €¤ Œ ‚L ‚L ‚ˆ ‚ˆ ‚ü ƒ  „` †P †P †ä †ä ‡< ‡< ‡¸ ‡¸ ˆ8 ˆ8 ˆŒ ˆŒ ‰ ‰ ‰” ‰” ‰ø Š$ Šd Š ‹( ‹x ‹° Œh     ™U   .± /<² í2±Ü<² í2 ± /<² í2²ü<² í233'3#ˆwffUþ«3    9ÿÀÇÀ   #!"&5463!2Ç!þä!!!!Ž!    rÿë … R ] n  2676754'&54326767632"#"'&=#"'#"'&/&'&'&54675727676767654#""w."
$%
5&$$"i1!"(	@*
!|

$gW+HW     V Ï ä\   26.54&#">œ*
!(\)
"#   ò‡¤ 
  4>32"&ò•	   Ïª\   %.5454632&#"G
*!ù
)"     Ç •9•   46?"&Ç !0! @C 5KK     V ª ”  !  7#"&'3265427#"&5467¦#!(!Ç*#!”(!#!Q*(!    Çÿë9 ë   747>2".Ç&k)44)!>!!>     ¹ kG   74>2#".¹*!Î		):.    Õ ‡+ Ü     6462"6462""&53Õ			0			8È9  G d2 
  4632"G			   œ¹2 
  462#".œ	$			   ÿÀ À   #!"&5463!2 !þr!!Ž!!!Ž!!   v !Šc    >32#"/##"&54?3'#Ò"Wz^S)>%ð	))P€  • $z^    )  46;2+"&5732>54&+32654&+•U)'8/ZB#	#4/<.*-2œÅ    c g    74632#"&74.#"26cXEDY);"EXó()--R-ÀH_aF#>-`G/=,-<<  œ …\    46;2+#"&573264&+œQ2BA1/	H++9:10:N	‡*      /ëR   / 8 @  632#"/##"&54?3'#746;2+"&5732654&+32654+fNnTL%ŒL +%#2+R</+*1!!Ù''Ht')'*,‹¯    àc $ 6  2#"&#"32632#"&54>46232+"&5¶(',,'+!BV%0“Nnc
9+)8
]F1(%Þ   v ‚	   2#"&#"32632#"&46U			''		
+>*   ~ vï	 
  $ 6 D  64632#"74.#"3264632#"74.#"32674232+"5~&'&C&&' D			'$2¡>** *J>**!J	Ld    iî!  5 > a ‚  46;2+32+"&574;2#"/##"&5732>54+74;2+32+32+"&574;2+32+32+".5	B		/'	

	'r-?+		9	
&
c?	
	-*	
*0

B	q@		-*				*/				B	

&
8		:/E8		S

&
'


	
&
'

	  Q !Â`   '  4>2"&5746;2+"&5732654.+Q	jI1F%RDMB-)*((>ûù(I1ES5*+      iò  2 U  432542#"/"574;2+32+32+"&57&54632376237632#"/#"'	M$	M$<		+(
(-		>h

f[‰eZ†

#
%


ƒ
gjjg
„]]     $ JäE  E  4632354632#"/#"&5%2#"&54632".#"3265#"&54>3$ll¢=24BB4%8"##)Â	w!2AH66G#"-
     JÜE   7  64>32#"&74&"32>74627632#"/#".56"3BA4"6˜"=!!JTAOX¥F9!I46H!]!--!"-#xJZ	?R`W
     Yô* ( 5 ? m  #"&#"#"&54>323264.54>324632#"&74&"267#"&#"#"&54>323264.54>32‹	
$+-	 
$ &7+*8-+7˜24°	
$!-	
$ 
				$
[-;<,/<-&&&&h	
      YÑ5  , 4 @ N  462326=462#"&574;2+"&573264&+462#".74632#"&5 )&5Ï5#+!-†
					

ii

k(2&i  '1Xš
µ
	s		    #î]  E  2"/&5463276#".54>3232654.54632#"&#"ñ]
+
^
BB€)*@.	
	0**>,#!#	
Zîî²²V(,7

$,5        y   2#!"&5473563Ç!!þr!	'y!ÿ !!   s ¢Ÿ   %'7ŸÙ778  ' Më l  :  $2'&'#"&#&&5&6327232&"+'&&57>?676H		

	


	l   2 QW i (  %1236323#"##&#&56367&7637'&Hi   L Qã i  +  %6'732"#4'"&"+76/&7263221Ly
\  G On k 3  %0'#&'&#'57670364"&16363'54'&#&#676'&7i
Y # Vn z  + 8 L  %&3077#>#'#'3''063245&437637#'#?6'#"75"67R!7o    > ƒp Ã %  %676#"&5''&"&67654167X

	Â	
    P ¤q ·   %2#&#".76c· 5 Zd ¬  $  %6231'&4'&00&'&7>7Lª,	  - TÔ Ä  8  %0&76'4>?0>1#&'&547&'&+6767.5?	}	


|G	
 > qV š   %7'Iš	
 Z °“ Ø   "  %326?'&7#"'6+"4;6+"4;Z		
$Æ    $ bM ±   %6'".>7?	°

	 P ¿Â Á    %27'6PqÁ ½ WÆ \   %'7Æ\   £ OË k 3  %>?674"320":376'"&#'&'&1©
Y § Tò z  , : M  %'#"'670&'7&7671736'62''7"'672#'"'&763''#"'5'&4?47À(:o	   ¡ ¤Â ·   %2'&##6¯· ® ZÝ ¬    %'0.54672636&5<1&6Æ
	ª	7	    Ò Tå |   %&'<64Ó	|
 ½ qÔ š 	  %&'.=Éš	  Å bî ±   %'&5.5&4'&7>Ó
°	

  x É› Ù    %/&7567/&76Ì    @ ¹Ü î  5 <  %6"'76'67"&<636'676/62&'0.?7#65J	eî	1
*  o Øž ë   %;76;#"'.'&r
ê    á” þ     %"=42"=42"=42ã   y ë ö     $"4"46"4„
ô   † î˜ ö     $"4"42"4˜			ö l Ðª à *  %7676'66'67'66''#"'&'#"546tÖ   8 ³Ú î  # P k  %&'&7676/27623'&544>?6&+7/&/#676'&?#"&/.'5&/&k)q	

É				       Ày 
  %!54?356;þò'ÕÀ€      Ày    3##'#5#57#53'673'67537((((!BG5/776-5B
4GByG..%%'G%/$%//       Ày   3##5#535œrr*rryG+GG+G € Ë¡ Ø 
   %/&736"=4;2#‰Í   
 Ày  
    #57#'63#%'3MNàB5IAM4y67
/%r-6%  n ¦Ÿ Ó   %6'&/75#672‰	
Ò	   † ©Ÿ ·   %>'†	ª	   b S° ¬   %3#&'&=‰'¬##  b S° ¡  5 S  %2&'&'6322622672&#"#"&"#"&"&56322622672&#"#"&"#"&#"561226226¥			


				

				j  e e¬ ™   %7'&e$#s&&        y   %#!"&5463!2 !þr!!Ž!@!! !!      «y 	  3#"&5469rr!!yþŽ! !  Ð ƒ4 “     72#&'3;#'767>721&Ð

“   « Uy   3#«ªªyþŽ     ± iO l  %"''.7&'&'&7".76076'0'&7&5&643&'&762'&6323>7237&76636'4H




©	




	   Ó Å ý ï   7#53ý**Å*   Ö Æ ý î    7'?>&#0'670&5432ã!Õ    Ò Ç ý Ò  (  72>32'>'"#"/#"'&'&76323íÐ	   Ü Í õ î   7&#'éî    Ó ‘- ï       7/'3&5753'#5ê	*
0*è
+**+  Ø •( ï  
     B k  7#533&#53&'5373#73#73#732756'.'5"#4&?.#73235#6'.0#'50"#0&?.#ë)–,+*+(.*****   € ù y   2!5Ç!þ€y!G€     € ‡  ù   7!!€€þ€ùr     €   ‡   75!#€€!€G!      €y 	  3#"&5469GG!!yþŽ! !     y   %#!"&5463!2 !þr!!Ž!@!! !!  U  y 	  2+Ç!!ry!ÿ !r     • H1     7276&'&"'.+732>3•
	


w		     Ë H â R 	  6432#Ë	H
    v ?+ ÷  + 9 q  7.'5?7632#"'"&1"''076&#"'&74>&76#&'2>3#47"#/&''6'.5'2343236326322326¹	
9	‡		M
	u9a			     « Uy   3#«ªªyþŽ    V  Y…     & . 6 > E M U ] d l t { ‚ Š ‘ ™ ¡ ¨ ® ¶ ¾ Æ Î Ö Þ æ í ó û	%-3:BJRZbiqv~…Œ”œ£«³»ÃËÓÛãëðø &.6>FNV^eksy‡  %&706236'4&7&7>2"3650&&74637>4"7&74607>&"7&7461"7460&7&5460601&&72612#&67&726&2617&?0&060&7&?0&:4&7'46127>5''467>47546167>475"60726"&74622#"47&?0"3245&7462"324'&746"324'"54627>0"7"56706&7"54270#&''&4206&7'&4246&7'<037465''04167&&74626&7&570:"&7&7462"?0&7&74603064"''462746"5'462260&75<2262#&''"&:?''"&4234612''.0274632'#.42372'.607&5'4&23>&5'0&23060&5'"<3062&/02342"''.:342"''"&:342:
	
n'

	
	 . nj    %#'.+63j		w     ­UB   '62&"¹"c#T##     Ï Š0  9  7535##5##5#'7507#"4;2#1?&5462507#"4;2#1Ïa
:


Š		Y



    Ø —/    &  $"54?&"54?"54?#5/7353*""I
þk%  ´ HN ß   . 8  73#75'3#5'6'&7&>?&76'#537#".5463ä	
	
		¬3				
{
   Y z ?‰  ( 9 A I Q Y a i q y € ˆ  — Ÿ § ¯ · ¿ Ç Î Õ Ý ä ê ò ø ÿ&,4:BHPX^flt|„Œ”œ£«³ºÁÈÐØßæíôû	%,4<DLT\dlt|„‹“›¡¨®¶¼  %7'&#0##"43276&/66?7#6767#&67626'0&"#&746'&42'2#&5066'4&"'.42'6'4&0'.62'70'2'4&06'460'2/066'"&06"&46'6'"&6"&06'6'4&060&06'6/06'06'74&1"'.5774&'.4'5'&'.1752&0'"&26'4&"2#"&46'6'"&2#"456'4&"2#"476'4&2#"47254&1"'.4'46"''0&6'42"''"&027462&''.47462&''.477<1&/07601&5'"&6463'/46'461'#.42'<2'2/06'6/0#0&57463&''4&37463&5/05462&5/7:3&7&54607:1&7&76307:0&7&56327:"&7&743046&5'&407062&5'&4672621&5'<0726&5'4&2620&7"5427>+"54236:#&7&542F

	5	¸M	
n2{'	    ž b •   73žÄb•Ž     ëòy   7#'63!2#3'777''''’0TŽT0809!0  0!908ëzz"4#=4>>4=#4"    ‘ ëod   %+7'''7777oÜ809!0  0!90ë"4#=4>>4=#4"  b •ž ë   7;#'’Ü0<Ä<ëVV        e 	   %7+7%#"&547žT!Çbÿ <bÇ!ëzÿ !ŽVVŽ!    3 @ç   &'&7326?3267ã(
p)

#)p   < Iß   &'&7326?3267Û
	"	

k#		#k   k ·¸ 6  67600&'&23##&47"4.5>?45z
			
    n Îr Ó   $"4rÓ J ‹£ Ð ,  %65&'&'&561674>376'676+d

	‹
	    Ÿ” ¦   $6¢  “ „Ò Ý ,  %."745&#'67676'&67&'&626Ò
	´


	 § Ï® Ö   $&6¬Ï  R IÉ €   %3&'&Rw
	"€		      y   2#!"&5463Ç!!þr!!y!ÿ !! !  “ Hl2€  %2#&'4##361."#&'4#&'&#&"#&1&767623>3&'&'"#.'&'&'&72'"'&'4#&33'&'4&#&#32'&'&1&5&'&7676545.'0'&32767676'"'&1&7236767654&'&'&7637676'&1'4'"1"0364'&"'0#'"10""#"#&047627265*'0'5&672163034.##&'&#0#636727070.'&72767454&'&743676'"'&727676'4"'&'&32321767654'&7633767654##&5&2;767654&#""'&'432767276&'"'456372756'&#.'476232326&#"'&'&762>3276'&'"'&'&570#"'&'&5&6223&#"&723034761#""7636#0&#6707#5670&'06367603230#&32767676#"#727253276'&4767636706163761636'"#"7636'&'&7632'&'&#37212&'&'"76#'&'&'&72'&'&'&'&'4'&"#"'&'4#&223"227676562360"1'&#0;27676h	
				
	


	

				
		
					

			
’
			
	

		
		
	     Õ$+* 
   632"'&'&43632!A)       y 	  2!5463Ç!þ !y!99!      y 	  7"&=!#9! !!99!      y    !! þ Ž         À 	  5!#!"&5 !þr!À€!!      À y 	  %!5463!2 þ !Ž!À€!!  Ó Id þ 	  %  7'7'7.'&5467&'&'6ø	59qþ		!	2#[     û S\ œ     $4242'"#'&6H	BBa.-   Á Za# $ :  %#'/654&'77773'#5&''7&'7327a%	
F

·		 (
	[    ^ 59 ˆ  %&0&5*&#461&'&6'"&'&&'.'0.557&74650&5".67.7427>7#7&6634&56:273276ˆ	
	


³	







			     ¹ yG   777''''777'7''' $$$$$$$$$$$$$$$  ¹ yG ? _ ` a b  %///????///?/???/777''''777'7'''7 







$$$$$$$$"ô







%$$$$$$$  ä ¤ Ü   6462"ä´    â ¢ Þ    $"&462&"264¢(     í ¿ È    6"46"4ý&Ç		    ø ° ·   642ø°      p   %æþpÿ ° O º… á   %65676?616122##OÁ	
   N ¹† æ  C  %#'5674567676?622#36727'#767&#767"767"71a	

¹		
		   V Â^ É   $&\É   8  a   -öþB¾
¡¡ÿ   9 …Í ® )  %?773:1#&'&5'#'7"&'9
)/ª
		
	   S jÈ ’ 5  %3#'27673037#'&''"/"'&'&'&7>37>sMR			Œ Ã Æð è   %76'Ã%å Á Äñ ê  7  %'7537636#'73634/3076/36'54'#5'&"'é('$Ä     ~¨ ®   %621'&'7"'&#?47276š	¦ \ ›ä% X  %7&'&4>76&7>3>16?6736762#2.3""'''/'6'./n			
	Ö
	    H °c Å   %&'&76*'P
¶      y 	   2!5463"&=!#Ç!þ !! !y!99!þŽ!99!    Y -î_   ) 7 E O  77'7'7777'7'777'7'7777'7'777'7'777'7'7€		ýDuR 	
Nú
		K		'
		½		¯		     y 	     2!54637/"&'!#%!!Ç!þ ! ,,++üþ9 þ y!ºº!Y,,,íc   ô …f    /77/L,,++""

""
f,,,

""

"       xY   /7L
""

""Y"

""

     2  †    5!!5!!& þ  þ†*       y      !!55!!#'#5#57#5353  þäÿ +œ¹¹œy€ò€€€U€      y   !!#5#535äþä+¹¹y88       y      %!+%3#"&5#5463!2!5  !Çÿ œc!œœ!Ž!ÿ ‡G!€€!9€G!!G€     ¹ ‡! ù   727#".54632&#"þ!‘!      Q à   %''7'7'77QÀ      y   2+'7#'#!"&546;7'7Ç!!bþè!!&	
y!ÿ !

! !

 	 _ qy    # - 7 A K U  7'3'#7'373'7'33'7'33'7'33'7'33'7'33'7'33'7'3c	$
 Ó##""#"b
þª

I























				   œ Žy   %3Žòòr  ¼ zE "  ##5#5&'2&35'?3676&6E"

 3.""	,/"JJ"     € dG+   6462"€:S::SžR;;R:   U  y 	  2+Ç!!ry!ÿ !r         À   %73#!"&=37×!þr!×%%³€!!€,      À y   2#7#'##5463Ç!×..×!y!€,,€!     Ä ‡< ù   ?/373'Û..%‡,,,,    ù y 	  2!5463Ç!þ !y!GG!      ‡ 	  =!#!"& !þr!@GG!!      ‡  ù   5!! þ ùr     Õy   #"&546;Õc9!!9kþª! !     r  y   2#!7'7'7'7'7'Ç!!þ«VVVVVVVVVVy!ÿ !%%%%%%%%%%     (×y 
  '63!2&#"Ã›	Ž	š##po    % Z 
   %7'654&547V£¤²¤¤ävÿ w6w w   ) Ö { 
  %#!"'732;›þr	œ"!zqq  Á Œ?  ' ;  %#/#?/3?3#/#?/3?3#/#?/3?3$QçI    Ç “9 ú   #  %#'#7'373#'#7'3##'#7'37#;ð	
		
	

7	
	

	

	

	
		   Ç À y   2!5Ç!þÇy!€¹     Ç   À   75!#Ç9!¹€!      Çy 	  #"&5463ÇŽ!!yþŽ! !  x Dˆ ’  7  776#&'.'&'.67"56'&62>74&'”

è
’	

     ²6MN     2#56'6'7û

I
			N  x ˆ ‚ B  %>57"'.?&'&'./'&;7676&&5476F"	$%	!{		
  Á &= <   7276#"'&76Ë	 .';	   ³M*   3#³šš*  ³ nM   3"'&'.= M'.[, [    ³ dM    73&'0.'3#µ–	šš­				t9    ¾ ëB % J i  64#2'0.77&34#&46&?64#2'".57&34#&46&?64#2''7&34#&46&?Òh4  í ¶ Û   %''77''77È   — pib  6 Q ’  %7#'6237&574337&5'43#'6237&574337&5?#'6237&574337&57'&/"''77'7757735335375735335533533577;8%(‡#³((		    A RÚ   31&'.'&5A™+$	  y — À   %7''&#4y	»   … « °   %7#'Š
«	  g t¹ ¢ B  %&#5&'.57/'054.5627677>>6731#'6'¤

‹   † ó– ø    %'7'‡ø     êž õ   %'''/7'77?™ñ    I WÔ    %3&'&'&I‹$$	    I ŽÔ   3#I‹‹x    U oÇ h  %0&'&76/'&767676.&0656<7>25&'&'&6076/&7>?2767636Å			

	ž				 ] r¿ Ø @  %"#'#''7&#"&5'&5674&/"&76'46?763672#·


	º		

	 _ ‰¿ Í /  %'&1"'&'65'&#"'6'77>3737067½B
	
¾  • ˜¹ ¸   %11'54763­­    m ‘ Å   %657'mÂ

    ‰ ¨¢ Â   %7757‰	À      @  ù   -5 þ  @rGr    ‡ @   -5 þ  ‡rGr   rz ì  , C  %"&5472654'"&4?5&'&'&66"&?5476?43*<*
%4%³		îì++%%#		#  ¤ KV = u y  %&#""&=#"'#"&#"#&7&73.766767>62'7#/0"&/'.7"'7"5'"'&'72632632&42M

		
	
	:`		
”		
     í 4    K  ''''657372''3#7"'4.74>&/70.54>7'77"
	c


    Ô ” ó ª   70'&727êª   . ¢   %'46+‚   	 † Ÿ   %7'		™     Û €@ ä    %'?707./0&&)
#	
€(	
c

  ™2 Ó   %7&/765''#	Ó1

    ¥# Í 
  %77'.'	Å  ”) ª   %3&'&67ª     Ò' ä   $6
	Ú

   ã Ï   6&'.54>2676.	 		
	

   × Ô( ô   %#6/6767676" 
Ù	     × Ô( ñ   %#6/6367616#" 
	Ù     á • Ù   64632"á©     é œ ë    6462#"6"4é	¬O  ö ¸
 Ì   642ö¸   é œ Â   %".'67632 
	œ    ô ¤  ¯   737#ôª     Ÿ
 ¯  
  $"4"=03
ª


  ¬ µ   $"4
µ		  · ÐI ç  	      7#&7#&7'&#7'#7'7·

	
}Ø		     Ä ‡ ï £    7"&376&?6#Æ#!Ž  Ò  ï ¢   7&?6Õ‚     á †< £     7''7'&62'"6÷	N$#!!™    À €  Û   70.561''&767477ú
)€
	(    Ó ˜ ï Ó   7'7'.?ÝÓ		
    Ý ¦ í Í   7"'#&577íÅ		     íy   7&=7!2¼Ÿš     k   #!"'í	!þrk	
ÿ !    ß ¼y   35469ƒ¼!yša!    = ˆ üG    7'./7>?264&"ë'
	''	
'`((9( Þ&&

''
E(9))   t ¹ Å   7#'#7'373¸è    / "Ñ^   %'7ÑÑÑÑÀžžž   ¤ e\   64632"¤6&"6L›L6"&6   ¥ ŽY ì 	  72.6¯+a	d*ì$(   « ’ Ç ½    73#3#«½    Õ v9 Ù       73#;#3+3#73#Õ9++½c     ’     %3#     y    ?!#!"2!'63]!þr£!þ£j@!r!@j  £ €     7'!!ùV]þ£À@€     ùj   7&547ùVÀ@j j     b 	  7#!"ä!þrJÿ !      õy 	  2&5463Çþ!yþ¶ !  ( ÝW$1<@E  27"#"7'074'264."#"'5'10'&'#"&"#&76#"'"723&'7624>2#"&/#'.70#67&107>>*'#&'&4?&/''67'67&'&3>76"60"+'.=#2&'.#&'5.7>;&'&'>'7070"6?"'67#"""'676767"/67632?"&#76?".'"+2>26367>?"'676&6747'274763&7&7'>6463>&'&32635&176#70.7.7"&7>=67&7&"."#6326'&0'7&'&'&6036'&6076'&#'7674'.'#7&#'672762767654>?67:7#326?7''&3&'673&&5Æ	

	
		
	

	
		







	

	
		


	

	
	
	A	
+
	
	
			


		
	
						
	        y      #5463!2!55!#%3#"&5ŽŽ!Ž!þä!þ9ŽU!yŽU!!UŽþŽŽN$ŽŽ$     y   !!#5#535Î2þÎ*¤¤y¤*¤¤*¤       y      75!!!!5##5353#5#Î2þäþÎ*¤ŽŽ¤Ž¤ŽrŽ¤¤ŽÎ¤Ž      y 	   2!54635!#!"&Ç!þ !9 !þr!y!GG!þÇGG!!    ¤  Ü   5!! þ Ü8  U   y   75!#U«!r9!   U y y   2!Ç!þUy!Ç        Uy 	  3#"&5469!!yþŽ! !    Uy 
      $ (  7&'7&'7'#'7?'7''677''73'	A	
-			.
!
!›”!
2$    T U' 9 ?  7'7'7''?'77/'57?'57'57''577''7F			ë	!!	$%#	!!		"!	1  	   < T@       # ' +  ?7''77???'7???		%												K												Ñuô      $ \   !!&54ðþ\ÿ     æ ö þ   7/&æ	  Ë8* 4  66720>>:>&'"&/&'##&Õ	  Ë á+   ) 7  6#*#.7>3'.'&>"&'&7'6"#'&>ß:



!


   Õ V ì f   72'&á	f     ß U ò c 
  76#'76ç	b    ¾ [B { .  %2#'+"/#"'&5&632323?467365

	
		{   Â V+ x     ?&"&'447ÜKu    Å U! v     ?&437"&45>3ÞMt
    c> x    %&67676#%		u  f< v  	  %&7632#	t     r 2ŽN   6462"rSvSSv…vSSvS    Ë _6 w   (  7#"'&'&7232"#&'&766162"56Ö,u  ¤ sP •   7>'&#".'&&7º
H& 
		‘	   Ú v& Ù 	  73&'&5ÚLÙ1  Þ z" Õ 	  73&'&5ÞDÕ-  å ‹ ’   7&'3ê7‹   ê ‚ ‹ 	  73#&'&ê,‹    ó z ‚   %&'3 z    Þ š  Õ   7&=3á"š-   š" Õ   %'53"š-     ß ’7   +  6&?'/&6337#723#&#'".'û	¼     € @€@   6462"€KjKKj‹jKKjK    â ³  Ì    7&?6'&6æ(´  ï Ç ü Ò   ?ï	Ì    ñ ˜ Ð     %77?#É     É ÷ á   7672"16Êý
     £ ~ ì 	  F  76'.46?3#&"/'&'.76337&76726'&5054323#'µ	
ŒN
		  ² … æ	    7#7''676'&762745»	Ô$"
<
     ¼ Î Ò Õ 
  72621&'¼Õ    ¿ ÿ Ñ   24&5/'7È		     œ ~]  & 1 c  ?7>376?"1'"&&7>##&"'&32?'#/#6;5456327416'&7657432/	®äWE
   ) …N Ô   %/#674?DÔ
"
    „ D|<   6462"„HhHHhŒhHHhH   - ÎF Ö   %#'#&743DÕ  / ÿ@   03''&'&7	   < Þd ù    %&/72#"/<ù	     ù 7I    4242ù7ÿ  
 y 9‡G         # '  >6&666&666&666&666&6ÕCv		€	±
µ

áÝþþ÷=øöÞÏ
µ

š		€	[C     w ¹ ‰ Ç   642w¹   y 9‰G         # ' +  $42$&6&&6&&6&&6&6wþôøöÞÏ
µ

š		€	[C¹2Cv		€	±
µ

áÝø    Õ Õ! ! % )  7737'76'177#7'/#73#73#Õ		
#
		'	     y 	   3#"&546!2+9UU!!¦!!UyþŽ! !!ÿ !r   Ž ry   3#ŽääyþŽ     › Ni- 4  %"#74#76/76/?6/?1???&	12


1†55(	3!!3	(    Iä^ 	  % 3 A S _  %3'7'3'7'7'777'7'7777'7'777'7'77'27#"&4632&#"'".5462²		=
[
<
ƒ ))   `!(!*<*¨e	C		f?
):)
!.!""++   U Ü q)   7#676'&74fÜ  , ˜O   3'?73'''#7?''J		
		- A	
	 	       y     7"'#25463'7#'#79Ò!þ.!P,66,+à!rþèà!6!66!6!       x 	    3'7'37&''5n6,,+,6/
	å.
	þ3!6!!6!6þŸ#XþÝ     p   &=åþpþÝ      y 	  2!5463Ç!þ !y!$$!    À    !! þ \       d  À   5!! þ À\     r 	   5!#!"&53'7'37 !þr!b		
d$!!     Õ +y   3#ÕVVyþŽ       ry   !&54699þŸ!yþŸ !    ïy   2#"'ÇþŸUayþŸa     Ž  h   7#Ža!aÿ !     G ¹y   %#!"&5463!2¹!ÿ !! !@!! !!   œ \d#   %##5#5353dH8HH8Ü8HH8GG  Nõ. 	   ' 1 ; E O Y c m w  ‹ •  '7'373'7'7/7'77'3737'7'7'7''373'/7'/7'7'7'77'373/7'7'7'7'7'373'/7'7‹
		

	
	 
.
		

	
	
		
	

		¶
	

		
     À ¹y    #5463'7#'#7¹¹!>!

"
y¹€!„     ¹ À y   2!5Ç!þ¹y!€¹     0 õ ‡G 	  3'7'37f!
"
(   « Uy    3#7'7#'#7«ªªp
!

!
yþŽ”       Õ  y 	   2+3'7'37Ç!!rK!

!
y!ÿ !r«      . — äC 	   ' 1  7'7'/7'3'7'37'7''7'7ž
>


		1
?( !! (@
	 

0$
	|&&&     À y 	  2!5463Ç!þ !y!€€!    \  À   5!! þ Àd      \ 	  =!#!"& !þr!@!!   U  y 	  %+32 !rr!@!r!     @ @   !! þ @ÿ     d ² Ž À   642d*²   G ‡ « ù 
  6462#"G*¨0!!     `  ’ À 	  7"&5462’«

	   U • œ À   7462#".U	«	  d Î Ž ë   6462"d×			    d • Ž Ü   6462"dª    d Î Ž Ü   642d*Î   d ¤ Ž Õ   7"&542Ž*À     b N 2    7'!7!Åcžþbc;ëGGGG      k 
  7&547Å;;cNNë++G9 9  + – ‡ î 	  7'7'373k##·!!""       y 	   2!5463"&=!#Ç!þ !! !y!ŽŽ!þŽ!!      N  ²    5!!!! þ  þ ²*    k  •   5!! þ •* 
 \ / ò 	   ' 1 ; E O Y c  7'7'373'7'373'7'373'7'373'7'3733'7'37'7'373''7'373'373'7'373'ÌM»

¥f=…ÞHA@Ž¢     y 	   '  =!#!"&2!5463'7#'#'7#'#7 !þr!Ç!þ !`		@!!Q!««!DA       \  •   5!! þ •9   è –\ 	   3'7'37''7'37z		      y 	  %63!2ìþ(Ž!V!ÿ     $ « 	  % 3 A  73'7'3'7'7'777'7'7777'7'777'7'77y		=
[
<
ƒe	C		f    Í îe  :  6462"7676'"'&72367>7>'.'&676.'&Í**º!
!'% 

«**Ö
	
    Ø œ* ß   72657/4#"'7'â	×   ¨ `A –   " 1 = H M U a h t ‚ ˆ ’ ¢ ° ¹ Ã Í Ò à î  7#&'&5&347672'"'"76762#20'&'"43275&'&76676&'0&6&547'&7676#"'&'&'"76#2"'"7676'&366762#&71&'&742047676'4"'&'&3267632#"7&7676'."'&762##3"/&1436¹	y		i 		3O	RNT	L-	
?Ib
l…		
			


	     å c k   %.67'2267 	

c     ›o" ú  1#""#"10#"#&03103"14&"#&'"'4&'&#"##'&1"#"#'"#"1'&#&#"56'&'&#&#0#&'&'&#"'0#"'&'4.4'&5&74'45454#&'&760726167673076765474'4542272767223:3636376767676367>327636763274327o
		
"      À   ?!#!"å!þrªy$      À y   2!'63Ç!þùæy!€«      ùk   7&=47æù«   |c !  2#"&#"32632#"&546((++(+"CUUc
9+)8
]FE]         y 	  =!#!"& !þr!@99!!      y  ù   5!! þ ù€     n 3 e — É û-  %27+"&""&""&""&""&#"&'632262262263232627#"&""&""&""&""&#"5632262262263232623275#"&""&""&""&""&#"5632262262263232623275"&""&""&""&""&#"5632262262263232623275#"&""&""&""&""&#"563226226226323262327'#"&""&""&""&""&#"67226226226323262327é

$

0'!!!!
   W m€ ~   %'6(~   R \¬ p   $"4¬Zp a ] h   $"4<h 5 àÇ^ Ç  07077?773730'3767067300330'0''0''''0''#7/00''7'0'0'0'0''?'63&17''0'''7'?0'7/7'7'7'7773'7'7'7'3'7m	
					
		^



			    z $„   %"=42„

(â P y® £    %6323#&'&76236#567063_
%B&ž""  F ‹~ ´   %&'&#"'&7632~

§
	
  T x¸ ´ 
  2  %707'&5?0'6323'7'74>7632'&76&'&T
Ž			&	
 u xª Ë 
   #  %'7651'''7573&72&"473#ªŽ	
6 { ƒ Ð   %3#{Ð@ t zŠ “   %37'#75x	“



   l¨ ~   %2&/

~        À   %!"'7!Çþræ!«€!   + “ Ž ò 	  73'7'3\&&ò$$$       y      2!55!#%3#"&5#5463Ç!þÕ+!þ9œc!œœ!y!dþŽ]$$2d!       y   !!#5#535Õ+þÕ9œœy88       y   %##5#5353 ÕVÕÕVëVŽŽVŽŽ  ø  Þ   %&'&'&47>
			    æ œ ©   %2'"&#&"'"'#&5430363232	
¤   î ž ï 
 "  7"'&472'"'''"766#22öë	O     ñ Þ ö   7&1276'631#''ô
á  ÷ ì ü ð   62"÷ð   ù í ú ï   70"4úï  Õ  òy   3#ÕyþŽ       Î  ë   5!! þ ë  ò y   3#òyþŽ       ²  Î   5!! þ Î  « kU   6462"«2F22FF22F2   
 ¹ wG 	   ' 1 ; E O Y c  3'7'37#'#7373'77'7#'7'373''#7'7#7'7'3737#'#7'77'7'37'#'#7' *%*)&*%  õ ‹ ¼   %#'&'&'0#'&762
	˜	
	  í ° á )  %&7"145"#65"'061"'27&167"10777
à	     Ü y   2#5Ç!äy!d  ù ¾ Ì   %7""&#55Ì   ï ± ¿   7376=25'&5ï¿   Ø Ö( ð /  %07&"1"&#67&767&762"&'&547&#ç		   î Ä Ú   
   %735757' Å    ñ Æ  Ú    %''5 Ç   ì Ô Ü        %7'7'7'7#'721'Õ  ü Á Ì   766*11"#01'üÉ     ü Á Ì    %'66*11"#"'0612307027'&& ÿÁ     ÷ ’/ ×  %&&&'>76'4765676506565256'&54'2454'54'456104'454&5"54103&'&0#64540&54'46567674636&67670167>#0007067>16&1636&6367036"202&2&#&'&#&'&'&'2454'"&#&	
	 	   Ó ’
 Ö ô  72&5'03&70214610.+&67#"45&267"'0363&'#"47147&50&523.1.'2145613474'4500505&5&503&76&54650616#0474&1&656167465630#47>54610456136'&4765676301#012"ì¤     ä ¤   7"&=39!ä!d    ú – ›   %6'"'=402š     ÷ –	 š    %2&#'"4'6š  Ø ’) £ 3  $"01'#&&'6&76&76266&5&7#'&7261"	    å ¥ Ý    %#5'53#" Ý8  ê ¥ Ý    %&#"=353# ¥  ü ¥ Ý   %&'53¨5    ê ½ Å   73#ê--Å   ï ± Ö   %77'&=5 Æ   ï ³ Ð 3  %&="=355'2263557725#'5=""&#67 µ       y 	  3#"&5469ÇÇ!!yþŽ! !    y 	  2+Ç!!Çy!ÿ !r     — WN)   %27#"&4632&#"/+>>+/#22k$>V>$2F2  ‘h î 	  %'7'7h##!½$#      $‡^    46;2+"&5732654&+IIRRELB-(*+,(<XJES5*-5       k    !! þ ª     € y Õ    73"&=4>32"&€U##Î*N	    « ² Õ Ü   73#«**Ü*   € ² « Ü   73#€++Ü*   € ò Õ   64632#"€ø	  d y ò Ü    73#73#d€Üccc    U y  ë      73#73#'3#73#U++€++q€‡r    k  Î   5!! þ Îc  ä • Î   72#".5<16ù
Î    Õ y+ • 
  6462#"Õ$     ä k •   %"54628y	    ò k • 
  74632"òy		
  ò'   42262"&ò$		  ò À Î   642òÀ   « ÜU      642&4242&42«d*Ü    Î y 	  %!5463!2 þ !Ž!Îr!!  ¹ •G ù   %+"&=46;2GVV²*  Ç •9 ë   %+"&=46;2988À  Õ •+ ë   %+"&=46;2+À   Õ Ü+ ÷   %1"5054>72V2÷  ò ¤ ë   %"&=462²*		  ½ ùC'   "4.#">>&2			  ä • ù   6462"ä²**        y 	  %!"&=!Çþr! !!99!  Ò €& –   ?6322>#"/Ò    Ô ‚$ ”   ?6322>1"/Ô
Ž    Ë Œ, G S ~  %'5/2''#&7'#'&'&673774>33:16/47632672>?"'+74#"'&'#'##7##7#.'&732737)
,	5äQQ3*  â •      7'77'672''''6=0.÷³''j   Ú †  Ö  	   ?.575:32>23'"'&î&	Ó
J        y 	  2!5463Ç!þ !y!@@!      € 	  =!#!"& !þr!@@@!!      €     !! þ  €       'g    &54#".54632››þg§§ —   ¡G â 	  %7'73'¢   À y   2!563Ç!þy!€¦       À   %!"'5!Çþrñ!¦€!       f   &54ñþf¦¦   < c ût  7'&6?"'.#6.5.7&7&7>?67>7>#7'"7#">?6767>'5653&57".573.53.75'&'73.7&526'&/7&/67267677'&672>'67*10#*6762>?6?"7>7>765476.546?6.5&6&'&7''70'&&''72762.53<.5'264'567>75¦
	
	
		
	
	


			
				f
		!	
	
		


	







#    ® d ô Ï   ?'3'¼'6dO)>     Ø dB ¯   %'?BD&85d0(	'   „i â   %/7i@
5â0.	B&   ‘ Ol1      '?'37'7#3#7'7þ/AhTD]p11N
	>>.BW4Q  “ ›D     /7'7@fD1+(+T  q 1M 	   ' 1 ; E O Y c m w  '7'373'7'373''7'3737'7'373'7'3737'7'373'7'3737'373'/373''373'/373''373'ˆ"ž)6			ÿ 			s5		ƒ			Ÿ			ß			cK		l				¶				È				   ® $a^ "  46;2+32+32+"&5®nNHHRr7AC      y     2!5#5!!#"&=3Ç!ÿ ÇÇ !þ½c!œy!UŽþŽŽU!!U     ë œy   #5463œœ!yŽU!      y   !!#5#535  ÿ dœœyŽVŽŽVŽ  D gÏ   3.=‰F#vv   ¤ Ž¾ ¤   %46?&'¤š    œ ¸    %.7&76 ‚	   V z~ ¦   %676&?67''&>'V
ž
	
  Z |z £ #  %#"'&76/"#>323&767767l	†
   Q –Z ¤ 
  %'7'45YŸ   G jÌ   %.=3‰…!jss G jÌ   %#3#&'5#535#53Ì:::999…ì0;;0,   H öX    "4X    K îÊ …  &56723274>'767632276."'&'&"'".77676#036'&5476'&/'&7274'5'5".5476?#7'&"Q


	
	 S wÂ Ö     , 2  $&6"&62&>30'?53#"&#'&7632>_D#Ä			
 H Ç` å   %0"&76.&>&#"&464>XÌ    V Ët ç '  %'4.4736'.5632327':&#dÑ
	 k ÄÊ ï  B  %67676&6&&"7"&67"&6&"46&6376.06.+.#kB	Ê
	
		  G WÔ   1  %676'&'4626'&70'&762&'.7>K	
	~

 _e   6_  S |Á © "  %6265?0'"&/#0&5'".S		
¨	 v ‰¤ Î     %"=42"=42"=42y‘8?C?;   	n £® É  
   ) 5 < A H  %77"&'57".&5?".&5?'"&5#&'5757&/p"($À			   j Ä£ Í     %'7'7'v#"É  @ [S w   %&7#6'&&Bo	    F WÕ „   %+1".5&7327Ô#"/0	r È [Û w   %6#"4654>3Ùo		   K iÐ)   3.=ŽB)]%	]  P oÌ#   %.=3Ž|o&WW&   S Ïº  @  %6'&'&4&#0"'&765&76:/'&7654'"#"&"&'456s
			&Ó	
	
 c ÁÁ Þ   %777277777'.'c
		1	Þ
    M lÎ Ø  : J  %767676?"'&'&'&6767676&'&'&'276767#"&M		


	


				




		

É


		
				





	

  p ,˜T 	   '  3'7'3'7'7#'#7'7'7'5'75	ƒm	€Tr		Ž^		      y      #5463!5323#"&57!+††!ÇþëÜ!þ †M!ë!Üy‡N!‡‡!²‡!NN!       Ü y    %!53!%#535 þÕþœœ†Ü‡‡‡       y   7!!#5#5353Õ+þÕ9œœ9Ü88         ¤    7!!#'#5#5Õ+þë9†¤‡‡  ² !c^    46;2+32+#".5²qQD
D	;A		`     y          #77#%35'35#7%'PPBwŽwwþ¹PP¾w¹PPPPþ¹w?8ÿ SSSSr88SSþÈ8Ž8:SS      	þw  
    %3%&'?57+'67f1g
þÉŠ­ŠÌ1g
yH
abaŽbaH
      y  " 4 E  %#'#+'#5!3#5#"'75#&=7#%3#5373237%3#53'5473'6; PPg1Š	wþÕÕw	ŠPP PPÕw	Šþ¹ÕPPg1Š	w•8HaSSŽŽSSba8Ç8ŽSSba"Ž8HaS      y   %3##5#5353+ÕÕVÕÕVëVŽŽVŽ  2 9ÎG   !!2œþdGþò   2 9ÎG   !2œþdœGþò   U Ž2 ò    6462"'&7&Î**”«**#	   w 
‰v 	   ' 1 ; E  %3'7'373'7'373'7'3'3'7'33'7'373'7'3'3'7'3 
!

!
wßxwßî   ¨





þÑ





  B ¢ r Þ   7&'&'.6'mª	    $ ä y   2#5Ç!Üy!\•     y   3##5#535$ÜÜHÜÜy•H••H•    n
¶R   27&'&656'34'7›8     y     #5463+53!#"&=ÜÜ!Ç!£ÜþÜ£!y•\!þÇ!••!\     J .¶R  / G  27&'&676'3&'7&65"6'4'767&!&67"6'&'767&x#þÏ8ý     y   2/7#'#'63Ç!Ó#,Óy!ÿ ™**™       ìk   %'#!"&547#7#
Óþr!Ó ##™! ™*     Ç 9 ü 
  7'373'ê#,,#
##¹**        y   %#5#53533#+VÕÕVÕÕŽVŽŽV  k 9•G   %7'##75#535'3‡y8yy8Î8kk8kk    ‡  ù  	   ?/!#'7#5!#Û%% Û%SÛ .‡F,r,,r,      ‡   %3#!"&=31%Û!þr!Û‡G!!G  Ä ‡< ù   73731'17Ä..%%%Í,,,,      ‡ 	  %#!"&=! !þr! @!!G    y y 	  2!5463Ç!þ !y!ÇÇ!  Ç ‡9   3#533533533+r€€     ò ù   3#ò  ë $ 
   4>32"&#5462ò#*	S  ì  t   %#5#5335##535'75tC

"  õ X
 m   ?õ

c

    ø k ‘    %2+"=4354"2‘
		
   ê Œ ¡   $"5'&67¡   – ß Ù-   3##5#533533Î--77  ‹ ’m-  (  73##575#153353353373##5#533533ÙY‰,õ<<C77     ¬ ê Â    3#¬   ¬ ¨ Â    "&462#542Â				P     ’x õ   %3##575#1533533533mXõ<<  A êW    3#A     A ¨W     "&462#542W				P   Õ ë+N   3##5#5335338NGG         À 	  =!#!"& !þr!@€€!!    N N22   6462"NC^CC^‘^CC^C    N À22   2#4‘^Cä2C//       y     5!!5!! þ  þ •Ž    •  ë   5!! þ ëV      ù 	  =!#!"& !þr!@¹¹!!    B +¸ è ˜  %&'&>?&>3&46&7&&6&&6.46&#63&'&'74.7.5&7&'17&54.7;0.7.1'#'/'#œw:A
$!% '
	"
	
-6u1 .lkoidiab+?
			
	

		"$**).+1    6 Ëg Ó ã ð þ'4BFZjw…‰›  %&0#&&&'&'6'6'6'6'+6'#'6'1/67/6741"/7"./7".5'721./7.=73.475.?.?&6?46?>?>;>;1>>16&6&2%#4'&&'467#&'&64766&#'&/.?"'>?37#4'&&'467#&'&64766&#''.<57"'>?37#4'&&'467#&'&64766&#''.?"'>?3i
	
	
	


	
	
	þñ


’


”


f		


		
	


		¸DD
	
DD
	DD
	
    ‰< §   %*+&342>7>54§    ‹7 ž   %"'452327670

‹  ô     %"'53"
    ÷ „ ‹ 	  $"'4527„   Ô é:    # / ; G  3#'#7'3'7'7'77'7'?3#'#7'37'/7''5'75þ8    ù › Ö   %"7654'&325672		›	

    è Æ# æ $  7'"'&?6?6362626''&'üÆ        œp   &547h44MGGi     ä ( ë   %3+"&+"="ëDD   ç –& è   %&+"=3+"	?	–AA   Ñ ž ä ¶   7&'&6Ô¶     Ô ¡ Ü ® 
  7&'4765×¡   Ð ‡; ¶    721'&7657".7Øc§  Ö ‹8 ®    7"'.1673237&5&67ô	

?‹    ã    7"'!#9Æ      9 G      73!!55!!47!!5!!yN9þ  þ Ç9þÇ9þÇ«$$k¼$r       y      *  !!!!&'!%3#7!!53%!#5##5456763!2Ç9þÇÇ þ  þNNÇ9þyNþÇN+NŽ$+r+NëN**Ny#NN       « Çy   3##5#5353yNN+NN+$+NN+U k1—H  2  &'&762262262##7'>'"&362&236'416{2		   {¨ ›   %63''0'#41&1&‡	—    w ŠÖ ã  .  %30#"&5&'&'&'&=;?6'&7<>¬
Î"% w Œ­ Î ! % ) - 1 5  %''&'7'&'7'7'7'373'7/7'7'­Á				   } ’¨ Ï   %6'6’Ë<<    ? ‚w ç )  %>54722"='1"#&'&7>36T
Å	  ¼ ˆß ë *  %6".#&76764&"'&7676'&76'&¾
â	

	
    ® ¾¹ Í   %"1054¹Í
   µ ŠÎ å    %'6326#"#&7"'&7232À	âS    Ä àØ ê   $>3230;#.Ää T HÈ z     %&'&6?"52672'6df

[	    t¤4 2  6&'632132'&7&'&7&&5&'465.		
%	 Y HÎ | 8  %&'&'7&#"4''67.'&6263:3676¿	h
 À fÔ z   %'3"'.'À	t	    N ÜÒ   " 6  %&'7'&&.7&7'77&7>377'6'&5&‡	
+
â

2"

    b á¾    %&5672&.&63&6767v3â  x Èª 3  %"&7>16&'&7&767636632127622626‘		È
	
	 z }à 
 !  %432"&""23262#.>3z%	
 úa
	 € ÷§     "&7672"+654'ˆ	  { æ¦ ÷ 
  %6>{õ  G zŽ º '  %#0&"&#"'".''&7&7>|º

		     y 	   2+!3#"&546Ç!!rþärr!!y!ÿ !rþŽ! !  # ž   %63#''5œ   á ˜ Ã   %&/
š
   ä ´ é   76361##"54>4'.5&é è	   ù „$ ý   7&6347676'&'&'.7ü

ø

  æ µ á    %#"5'353"4#;1#2""""ß)  ¸ „I øÈÍÐÙáâçèðõýÿ  %7>;"27232123"'&"#3#&#110&+'27&'"'"727"&4567'&67.'&723&'&702.'&53.#&/323&35.'5724&'65&7&567447.7474&?34&76106766362676647663&46521&1473&'70&76#67>5667>76367>?6707&7336'&6'43&54456&'&4&'&'&5&'42&'&1&'&.'&434#4464164616676656674166721>76&'2'3'.'4&67#663#"7&'"'7672765#72&#?B	

				cO

¶			&?=XR     Î ¦ ð ù  
  7'67'7ìºJ     Ì Ž î ¸    7#'"&47>57'Ý¨   Þ  ð œ   77+&637'èœ    è ˜  Ã   767è(!š( 	 ¦$ è  	  %/7º
#   Ž6 ¸    %#'0.5/'$¨   ã4 ù   %'74ù    òk   %#!"&5463!2òþrŽ@     ÷ | ï   7'.65ûï+!+  õ ë û ñ   642õë   ù ì þ ò   642ùì   ú ï  ô   642úï   õ ð û õ   642õð   Î š ì ¶   7&6Ó
¶  È ¸+ Ì  " 1 >  7&#"325#53#45#54322=3"=37##73#'#53''#5373#5Ó!Æ
	
   © EI5   7.4>7ùE/0000/  µ Q= ©   73.µˆ©##    ³ ©@*   %#&54>7=ˆ©

++
  ë ©? ·   %#>7?R-·     Ã s õ ˆ   7&''&Ô
%s
  ä Q6 —   %&'>2654&#&76766/	
•(  È Í#  %&'4'&'&'04'&'&'&'&'&'&#"#"'0'4#0'4'"&7"45010&5&7"45&505&'0'&5&1&'&5&'&'1"5&7147167#670167"6767656545454545467"47"070#0747061"75#>&'030&121&'21&'021.103&'021&'3&'2&'21&'20&52&':3&'23&'030&'41054565063637063#1#03'1"#0"#5"#6.#20&50&5"'3&'&'"'#0"'01"'
ò

   É  ñ ¸    723"7235&5232342>5"'2ð		
š       Õ À y   2!5Ç!þÕy!€¹     Õ   À   75!#Õ+!¹€!      Õy 	   #"&5463'7#'#7Õœ!!U%--%$yþŽ! !ò++++    / ‡ ¥ ÷ 	  73'7'37x-%$$%-Ì+++      p   &'6æþp°°V    - (ÎX   7-¡(0˜    k   %&'67 ÓÀ˜	:      # ä]   &54ÜÜ]     l ”c &  %2#"&54632".#"3265#"&54>3m'OABVUC1H"',+(--Þ+AT]FE]';*,:##   z ?'E A … É  0'0#&#&01"&'&76'5&"'&'&'4547>76727610#'&'&'.5676320#737676303'&'&3'&'&700376767045456?>3:37676727676'"5	
&

	
3	
		=


”
		
	
	   <` º C  %'0702727654'&/&'&/&74>76'4'&/2312'&'&'&#65\
	
	
		x

	     ªˆ ÿ F  %"65<56'&'"0'"&'&'&#65676767056&#47676767676€
	
ê    ® mO 
  ! - :  '57''57'7'7'75'7'37'7'37ý			<			˜			f				W		
	2	

	R	
		     › •d ë 	   ' 1  %3'7'37'373'73'7'37'373'73'7'37	
		P
	
		
	
±								Ã.KKK     w 	   !! þ 	’         y 	  %#!"&=! !þr! @!!9  ¢ T^V   3"&5¢¼7N7V¤'77'    © ]W          % * . 3  73#;#53#;#53#;#'3#53#3'#&'3'3#3&'Ë###$$$$$#####""j##j/#G""""#À$#k$$k#$G#k#H$G    p]   '&'#&'&##'7777`L))    –jV     7&"7&'7''í		n	£	E%%!$		$!   ø     73#ø   ø ›	 ¢   $"4	¢  ø ‹	 ’   $"4	’  Û Ñ& û ^  %'"'#'"'&##"'&#"/''57/676#"&?"'57""76727&#"76232>36"#"723$		
		ï   « yT   3#«©©Ž  « yT ž   %#5632T©"31Œ   Æ £8 Ó    7''77?77'#''Ý
J
Ò  À ‘< Ö    - 6 B L X  %/?376#"6?60#""#760#&"'&67?/''4&'"542'&'&#"143''&#&"172 *&*
®
%			     ¹ ¡ ü Ü     7/#//Õ((/.Ü!"!!	   Ã E Ü    %  7'#".57#757''761'761Ä0
	g'(-.©:
"!!!    ü ; è    %##"&/'7/&"4:	©	DMM  ½ ~E Œ $  %"&/#&'#7'27>227>363E	
	…         ‡ 	  7"&=!#9! !!GG!    r $Ž\    2#".=#"&=462354\

ŽŽ\ò	
]]òNN     à ã   %'6ã    å ” Ð 	  %3#"= Ð++    è — Í 	  %3+"= Í((     Ø é( '  %3'&'0464#'""#7'237&6?3"	
			î     ì œ Ë         %#7'#?#7#?#?#7#7œ""   ¸ ’G Ü O ¡  %764&4'#63254'&1'#52?4&57&/&'"6215&54.1&6326'&5&26636676320675672#3#'5'"3#&'&765&5&76767>5&+TØ

    Ò Å. Ë    %'"61'72#'.	YË   Ô Ì, Ú        %#&3"67'35#	G	Ú     è Í ñ   %6#&#&5462>;5332	é     ï Ë ä        7"/67#4?23'0#&42ý	ä		  ì Þ ý ç     73#'4467&ùç	     ó Þ ç  
    7&72"5/6'56óã         À 	  %#!"&=! !þr! @!!€  ù - ²    %#'3&²        y     =!%>3!2!#!"& þŽþøþr\ÈÈùþÖ	  Ó ¦- ó       %'#'#'73#7#-><D-Ú4M 
   + U     ! $ ' - 0 3  !!54&=!%#7'373#57#7#3'337'+3øþ  þí....4-.U
þà

m(((((((BM  ç Á è   74632#".ç		Ô		     ç ¶ Ý 
  74>32"&ç	Ê	    ‡ Ho ' J p  63>3432'&/"#.'.&6'.''&767>?27'/0.<?7&7>76&7676Œ
	q
&	

r	Å	
	Ä-
		
     Ÿ u@ 	    77#/77'?'7'#7'7¥h,ìp’       y 	  !5463!2 þ !Ž!9!!     Ç ‡9 ù   6462"Ç!0!!0¨0!!0!    Õ •+ ë   6462"Õ$$®$$    Õ •+ ë   %777''''777'7''' 
!!

!!
ë!

!!

   ò ² Î   6462"òº    q Ž í # , > F J Z b  7354#57363#'654&/735'#53?#5465'?3573#35&#"6"426577#'"&'#53 P?,()v
P	:	$E¿
-(	!
M0/	J	!	*?-M1     ‘  ˜ —   6"4˜—     k  y   5!! þ y  Å š; ö     %6.'.67&777&2/
ë' $$ '

	    Û ˆ$ ì   %3''5'27&67'7>&'$Á5$II$        !! þ         y      #5463!2!5#"&=3#5!ŽŽ!Ž!þäVU!Ž9ã!yŽU!!UŽþŽ!UŽŽU!     ß !!`   4632#".5ß		>	û     ùx   7'&'7'6-ÓÓÒÒÓÓÒÒxœœ››œœ››   ØA)n M  7&'&#"&/2>?"'432354&+673'67930"37&543237'626$
	\  à î"I   15&'&<>=6762A    Þ î$I  #  %5&'&7676255676'." 	î         ä ÿB ƒ}  #"&#"32632'21#&57#63254&#0'##"5&47#723'##'#7#43#7;#''&#7'7'715"'05&5637132636'4'"&76323#"&#"32632'21'"5#5#6325'0'"#"5"63#75'#"'#7#43#713#''&#7'7'315&'05&1363303263:5&"#"&56323#*#"32632'3211#"7#5#6324&#0#"#"5"143#721'#"'#7#43#7217'"'&#3'7'3211&='32;3263:54##.74321
		A  ò ø9     ;15;""5;"5ò9     ä ÿ@     $ ( , 0 8 = E L Q U Y ] e j r z }  … Š  1#0=3#7#157#65&47#61'03&63'"#77""=42#7#5#7##77#7'07"03'"#77"1"15021#7#3325#'330'303'5007&ô1+
 3 

       - S    %'7%&547ýÌÌþÏÌ-““	
ÿ 
Š“	
 
	   ýx   '&'7'67Ï"ÌÌ"ÏÏ"ÌÌ"Ïx!““!••!““!•     ùk   &54ææk««     = Ÿ € á   77'7'77^

­  œ \d$   6462"œ;R;;R—R;;R;      I`   %#"&5463232>=462I4$4#
|3+	
¾    ò Z'       $"42'&475&47³1QQ1<P11      y     !!!! þ  þ r     ¿ VI;    ##"'057&767Ghg;
	­®   À WG9   63/#"'57&76=	gg/

	
®®   · VA;   1#"5'&'&'&6Úgh	
®®
     ¹ W@9   +'#&'&'&52Ùgg	®®
	     Ë U5+   1&47 5555+'‡((‡'  × V)*   %&'64'67)ø>>   | <„D ÿ  467>7>7>7>7>7>76276767&2&&&.#&'.'.'.'.'&6'&6'&>'&>'&65&67>7>7">7&>7&67"&'67.'67.'67.'63.'6.'.'&4'&6'&6'!
#
$
#$"
			
	!


#
$!
			
$!
			
	!
#
$
#$	
				
!
#
$
#   º zF 
  %".5462  ):))z )):)   Ã Œ6     & / 7  2&'&'6767&'&'6&5472.'677&'6å6(;N			

	
	;57	
  	 Ñ ‡= Ý     ( 0 8 @ H  %&'63'"'&6'67'.'6767&'"&'6&'67&56&'06=&#		$§%$ ! B'       V *   !! þ *Ô     x l‡ {  %3!735353535375'55335'7363&3373535'5757'75'?3563377735735'734673&323735373333€þñ""z

   — lh Â    '  73#5#73##533'3#5##53373#5##533¥Ãs44M33ÂV88VV88VV88V       À y 	  2!5463Ç!þ!y!€€!     ½ Ä9F * 9 A  %#&'7&77&77&7&7>3666&&'&'&'&776432#&)^	

		


6	
Ä			



	
	n	  ¹ Ì<   %#'3'''77773B "! #Ì####     Ù ª î   7".4>32ú				ª		     Ø ª î    7"&4626"264ú	ª
D    Ñ1H ?  2#'#'''''''#36#"#'&#"'&#"432763216767>,
		G	   Õ ¤ À   73#ÕGGÀ       ¸  R „  %#!"&'63226226226323262327#"&#""&""&""&""&#"5632262262263232623275#"&""&""&""&""&#"563226226226323262327ÿþr 
			6&!      ª  Õ 0  %"&""&""&""&""&#"563226226226323262327 
°   q u   6#"&46328"		 .. 		Ü8+.B.    g | ƒ 	   '  ?'373'7'373'7'373'7'373l											ì



,



,

&



     fyy   !5469@þ‡!yþíÚ!     }  !   %!Çþ¶ƒ!á!        y    35#y$þc}%¨yþÒ_5       y   2#"&=Ç!þX!y!þË!.     n J•6 	   #'#7'#'7'‚%$©%%6#""#{####     @ @    !!!! þ  þ @ä       N 2   !! þ 2ä     k n    6"&462'#7'7#'ßD00D0d:////:n0D00D;"7""7"7  ° Z    6..76:
##
(F""     ¦ fP ñ   $.7>-
F:
#Õ"(F"     / 'ÑY         # ' + / 3 7 ; ? C G  %7?7?7?'7'7'7'777'77'7'777Z
@1@V
	þÁ@V	V@@@@@@@@T!	!5!
 5!	!5 	!4 	 4!	!Ó	!	L	 		L	:	!		 
H
M	:	 

	!	:	L	æL	L	L	L	L	M       €i   &54ooii€i  2 Nä  I  %6"&/+"'"#&'&'<63&'&6327>2?&'&6763226376à
 	
	
		}			
	
		    s à¯ ñ 	    %2'&/'6'.&'67ªì	  a é°
 &  632372#'&0"5'&'"&57"'&5a"	
   r ï¬   623#&'&50&4s
	   w ò§   %/45623•	
õ  1 fä ‘    &  %&#676'4#&'&72&'&6'7&'4634#Þ!	‘	f!   ] µÁ ß   %3#5‹6dß**   ] ]Á ½ "  %#'./&'&=2622>3226703¯
	t
   ] bÁ ­ - A d  %".'523262326232>703:1&#"#"&"#"."2""'.'63226721#"&""&"#"/3262326226g			1



$			—	"
    ^ ‹À · 	   %73'7'373'7'pF¦



   x m¦ ˜ 	  %77'7'Š‡


    d ½¹) i ”  %636760232>764#"#54636#"1326326"'3#&76/#547215&3'"#&7676'&50.7'&'2&''&'7776767677&'f

	
			
	
Û.				  k Þ¯ ð   %7/#"'&s	í  æ ¬7 þ   74>32"&æ	"Õ
"  Ê ‘S      # ) / 5 ; A G M S Y _ e k q w } ƒ ‰    "572&5&656&?676&?676&?676&?636&?#'634#&/36&'&/6&'&/6&'&/6&'&/6&5	(4<ELSUZZ[YVRKD<2([WQLE<2(			(4<ELSVZ   ø hm Ì Žà  %+5#'#11#1#15#5##1+5'+1'0=#1+1=1#5#1575##5#1=#+7=3?3737;67;7372?'35;5157;23#0#+'#5##'1=73726?6735;?67>7676?67676?1335747651;?676?1;1"7436?675;1311;76737;9##""#32;1+;;9+"##323##"#376373?67=';53'737;51#513536?1+?6735"#6753=++?57=+#""#"#####"7?p   $ Ì ?~½  %3+"#"+0#=#1505415737303:745;7;##3;52321'/#'#"#"#'+'#/&/#'"#&#&/.'&/#'10#'+03#"+03;9131311#;33;#23'"#/.'5;27"'"'#593?"'#'1#532;271'#'+'#'51;373&'"/"/5#5'5;;;'&'&/&'5135;3/&'.'&'4'5135;&'&5'4'5'=351;131'45&=71;2#"54654#"3254#&7"543&7632'"#&##654&547"'37432254#"3721#4554&53&53&7'"'&767654#"32'2#6#"'7#	Ü
	

	t
a
	N	 	     $ F þ \ ™ ô  7&547"'=#"&7"'63&73254#"#'67&54654'07236'"7&'27&33254#"2545'&54324.5473#"&7"470#4754326'2#6#"324#"#'743254#"372#4554&5&53&72'&'&767654#"32'2#6#"'7'2
	

	

	w	 	X	
Ì
	 	
    ¾ 4 þ \  7&547'=#"&7"'63&73254#"'63&54654'07276'&7"'63&73254#"6545'&54322		
ô
	 	      ‚ 4> Z µ  #"54?454"3254#"7&#67&36'#&1654&547&'623254#"&7"'63&7325463&547#"54?454&3254#&7"'63&76''&1654&547"'63254#"&7"'63&732546&5472
	

				 		™
	 	
   / ‚ F\ ] š  ?6&632'2#6#"3254'&'&7676#&7"47"4754452#6#"3254#"7'632324#"372#6'#"54&521&53&72#&54>50	

		
Œ	 	Ô
	      þ F\ > œ  '#63&5465'227236#"'&7"543&73254#"254&54372&632'2#6#"3254'&'&7636&7"47"#47544520#6#"3254"#"1	
	

V		O	 	   !…`   4627632#"/"&5mSfr@`tRj{p       y 	   =!#!"&2!5463 !þr!Ç!þ !@++!!Q!++!      k     =!&"264 ã:**:*kªªœ*:**:     ¹ yG   6462"¹*:**:£:**:*    ° yQ  4766'&6'&'&2322#"#"'"6723"'&&#7632'&#"'&#362"#&'&#"'&"'&2#"'&'&'&'.'&'"#"#&76727676'&##4"'&632>7676'"&1&3276767&'"'"1&7676327&'&#"76767676'&#>1632767'"'6746ò			

				
	  Ï ¥/ í      + 5 < J Q W ^ e l y € ‹ ’ ™ ¤ ¬ ¶  72&621""456763"&2&'&#"'&76623"&762#&6236#&"&676'72"'442'"376'"27&76120#"'0"74712374"&'6'03265&702'"567&1676'"&4726æ$
	&I	ê
@  … '{X   7/…{{!ZZ'1þÏ*ÞÞ    ¦ QZ/   %'7ZZZZQooÞ   … '{ À   %#7 Z!ö!Ào**     7 ý ²1   #&54>323632²
g
			     4 ý ´\  # ' + / 3  .#"&54632632'654#"''/7?o
(



	,	5	    * ä ¾O   !  2"2"26>#.'64676r	 
m
O!
		
  = Û « ë   7#"'&'6767632§#&ç  *
 ¿> 	  +  7&#67&76#&'&7#"76'&'&76n=! Š
 !,	
	
			   Ž òk 	  2#!ÇþÇkÿ V      Gk 
  3#".5469kþª    G  €k   3#G99kþª     œ &åZ 
  " -|  &'.7567467'6'&676%'&5'27>5'676'66762675'"1>3254'&.?0.67>46/'#6'6&'#'>6762'''&7676'&'1&/'''&7676'&'.=&#+'''&7632>/&'/&54##6+/7&546'&764#&'265/&?&5463&767:#&7676'&"&5'"/747&723''&'&63¼
þòÀ	!
	


	
	1


î


Ì		
		
		 	
		
#/
        y        %#!"&/!!7!!%!5!2!!!!üþr þ ¤\þ¤Xþ¨#þ¯\þ¤¤ þ *C$î$C#r%%       * V       !!3!!7!!!!5!!&¤\þ¤¤«Uþ ¤Xþ¤¤ þ  þ%¥	«-		      Ï «y   3#5469r«!yªq!   & ö …Q 	  3'7'37a$$.###   Ê †7 ý  ) 5  %#"./6717&54754320'4'#16'7"415#75-
	

 ¦!!<

     Ó Œ- Ÿ   %#"&/73267(	Ÿ
	
        y 	   2!5463!"&=!Ç!þ !Žþr! !y!UU!þŽ!UU!       k    !  =!'7'7&"27#".54632 Ò*&&
kªªv"&
    y 	  2!5463Ç!þ !y!++!      k 	  %!"&=!Çþr! !!++!  Ò ’! î   $"&462&#"327&&
’&    ŸU á 	  %'757'.¸  ¶ $g`   46232+"&5¶Oo>Þ    ¼ …D 	        ?'373'7'#7'7'+737/Ö*44**	"&…1111



				    ä À ë   73#ä88ë+   ä • À   73'ä8À   ¹ \G$      3#5#'7'#573'5#7ä**+r$+€**	{dŽŽd   ç {G Æ     73#73#/&?6ç+3 Æ66  · { ã ¾   7/&?6Þ }77    Õ y+ •    757'äG•     ò ¤ Ü   %7'5 Î**   µ kI	 3  %/'7'?.6?7/7?7'?E		É	
 	#
#"  é ˜ «    %&'.5'3767 
«	  è ˆH Ñ 	    727#&7'7"'3'&>7"&462î
)1

Ñ%
%2

    ó ó þ   $"4þ  ë I    ' . 6  2#"&54>6'57&57765'236//"6 	
	
	;k   ² lD ¾     %&?4"&5'&73673#@p “8GFO   ¹   À   75!#¹G!¹€!      ¹y 	  #"&5463¹€!!yþŽ! !    k   0&5ìþkþø       $   70'óV   ” å^ '  7777'''''7777'7''''€!JJ!!JJ!^J!!II!!      y   ##'#'#&=7'54737373ì%––%%––k\$$\\$$\        y /  %'+'#7&'#"'7&'567'6;67'37327 Ã	»Š8Š»	ÃÃ	»Š8Š»	Ãœ‡Š{{Š‡H‡Š{{Š‡  Â ‚> þ    62"&4264&"æ4$$4$*((þ$4$$4J((  r 9ŽC 	  3'7'3 !mX"XX"XmCg=f@?e=     ˜\        %  73#73#73#'3#733"&4627"5462"BBNNBB? !B!		Ö²‘,²,‘‰  ) X  	  !  627#"&'#"1#5"&4635254'2499Q			*ó
	‹

	'    1 [ f ¡    72#1"&546;24"U
¡
	      áqF  5 Q p Œ  3'.'467&'63667.'67"#&'#43#4'"#>74&'>7&230'0/>7&'636063"'&'465&'07>5 

L

™		«	Ç	F
)			    :q ‹  # 3 @ U  %32##&'"'&'"5367+&'0#67'&'0143670'&'&;20"1#0"1&'#63:32120/@L¶¦QQx;;w>v    |s  ‘  7&76767<1&'4654636730"676#033:3672#&'&#"1#&'&'#727:32730"#&'&'&'6&'&#0'340#4'&'567004â
	 $
#!Ó 	

	(  Ž \r/ ‹ ï  %"'+"''.57'//"'7&57".570.46?&'46?&?&?4?473&76236767626763776622&57'7&'5&'7&/"/"//'#'''#6226636734?4?4?&7672q

	#

			

	»				   & Æl 	   ' <  03465476""46'4'&743"#&672"5&"'"&76)	
5     « Ü ¸ ÿ    .46'7µ ÿ   ° ã ¸ ÿ    7'&74765&715&76µã   ª Û ± ô    ?65&757656ªÛ
   œ Âc'    7'7'757&?&?4?&?&?4?6?6;6777776626622#"57'7&=&=&/&/&'5"/"/"///#''#'#''##"5žÐ    ž Åa%     ) 3 : B L V _ f m t y  ‰ ’ œ ¦ ¯ ¹ Ã È Ò Û å ï ø  77';&?;#&57;&?;'"5711'4?3"?#"57#"54?#"54?"&?"?#"57#"6343"7421&"#&743".746"&#&6"&'&61"'6"#"5&6"&5&"'6"1&5&6"&'6"#45&6"#45&6#45&ž	
		Ì

	
	

    B ñL  
  $6'6&1Bþ $   7&+'6 %    56'&#"#1'6'2654'&6   û ÝW$ 
   632#654#54&5û	P!	$
	    Ÿ __ Â   6267"&545ØN78P8g5&(88(&  ú ÜX$   ) 5  5654#"#5632'2254#"25654'&547156'&
P		
	E  U ¢f í    %&'&54.7W	í	%    T ¡f î   * 4  %5&'5&675'6'&5&'&76'53'&7656^Ì


	F	     ™ •c À 	   %0'4>5'6'4.5`ÃÀ		
	     ™ ”d Á  # 6 F  %'&547654=76767654=4'&54?'6'&'&5&\Â•
	)
%	(
    – š Ÿ ¾   76'&?œš			     • ™ Ÿ ¿    754'&76?'65&'&74œ™		$		     o1   - A V  &"546762&'&542&'&'&546'#"&5&6&417#"54767>73			?Ñ8	
&
*
	
	6




H
  	  p1  ! 1 A Y r ‰ Ÿ »  27631&#*#"'&723236&"5476"'&'&5432'"305&'&5&&'454/&54632'"65656567654"&'476&541451'3254'&'&5&7276567#"5476767"ñ	

			s			Ó		


W
	
	%	
	
a	
)	
	+	
		

   Ü O   )  232#*#"'&32&/&'&7>76ï	":<		6:     À ‹> 	  3'7'3 ÿ0'''(1...  ˜ Ê Ó% 	   ( 1 9 F  7"'&'&76'7#'7&5"6/336'&'76&54'76'&#70"'&67¬	Ê

  Ê æ*     6324'&?6'&7'Ê	   Ý,)    ( 1  6'4'&7256'&7'&4565476&672"5ã/    ä y   3#ä88yþŽ     , Íd J L U   ¢ ¬ ÷ ùNPZ  ".#&'74>767676'"'&'.7674&"#''7'7&63:26/?6%".#&'74>767676'"'&'.7654&"#''7'7&63:26/7676#.#&'70>767276/&'.76765'&"#''7'7&6:26/?6&%#.#&'70>767276'"'&'.7654&"#''7'7&6:26/7676£	 	

85?)j
					95>)æ
 	

85?j
				95>)	
			R`	

	R`Ë	
	R`
			R`     @ @   !! þ @ÿ     Ô Ù,,   3731'17Ô"

"

       ‰ hw þ   %"&547326sFbF50Cþ1FF15C  G ‡Õ   '5ÕGGkk    G \Õ £   %3014.'&'04GŽ	£ n }®   %#5#53533“		îqq		  u® å    %632362#'&'&76'“á
	
  d t  º    %76'62'&76767'&'2r	
›	"    qª ö " N {  £  %&52&561&1067041676"&74"&0&565&765434?072620"13631"0+&14146767>7614367676"1#61201'1'#0'"76147<&270™ç 	@   ˜ ç¨ ö #  %623630''"5"'043&6#&7'4˜ó  – Á¨ ö , [ b l v  %"''0+&'043&6#&7#"'4"5463236322'616'1414&6'145"#&30;1201131271#0631"#6'&7"#76&¦	ç		
    F d4   "#5001#<1&'"5#10"2&#"54703"'&5"5#0'47&543034730670761451&'"#0430743255&76"#321#017041&63'0#0#10>&#_#      “7   3#{{7'  B æ ha   3#B&&a{  6 vA    %  462"74>32".462"74>32"&6

&

#     9 s>      42242&422429:#   <	 p=   462"<   G ë d\   3#G\q   Ž2   3#rr2  E g3   462"E





       d 	  5!#!"&5 !þr!d$!!    U \«$   !!UVþª$È    Ú ‚# þ   %".54632$‚$#    ˆxk  
         $ ' * - 0 3 6  #>32'3'7'7'7'7'77#'7#7'77'''J”(F	"%&&ê		I	
	%&&&#        œy 	  3#"&5469cc!!yþŽ! ! d  y 	  2+Ç!!cy!ÿ !r     œ dy   3#œÈÈyþŽ     « kU À   %3"&53326G2F2!*À#22#!*     « kU É   8 a t Å ä%  7#"'&'159#159&'&7632'"'45159=454;22+9#9#9#"#9#9#&7630323'#"'&'151&767272"9#91#9#99#9#91#9#99#9"#"'&767672199#0#&765499#19	9#99#"'&767632ÁL!M& AB&     Õ ‡+ ¤   6462"Õ$$		    ò ‡ ¤ 
  6462#"ò
			     « ‘3! % < z  %"'&67"#"4;272216367632"''"1.71'&'&66'"'&76'&&7627&'&'&7676'&'&'&76"
)	
	‘
!		
	    Ð ²     $42&"47'&676&

²!:   Û »G# ½  %0'4'<5''54.'/<5&'0'&'00'.'&''.'&'00*''&'#'&''#5'.5#.'#''5&56?&'34&'"#6.674#47#&7.#"'#'416547216146565&'"54767277#@!	
Á				    $ \  	      7&5!%!!5!!5!!5!!7!!4 þ þ  þ  þ  þ ðþ $UVVVU      ² y   !5463 ÿ !yÇŽ!      À ¤k   727#"&4632&#"ˆ$22$,,Ë2G2,=,    ë ãB   773#'''77#7'3''¸B	

	      òj   7&547ß «      x ¤ 	  7'7'373‡/./::/x""7!77!    0 “ ƒ Å   ?61732".'0
	š$   0 ˜ ƒ Ê   ?6176.'0
	ž$       ’ ó   ?7?7''''?''.,
Î	76	"    K !µ` *  >327>32#"&/#"/##"&545t45)585>®®
ö
³¹¹³     f 	  7#!"ã!þrLÿ !      ñy 	  	&5463!2ñþ!Žfþ´ !     y   #"&=32 þB	!¾	!@þÈ!8!      	þw   &'Õ 	þ. 
w þº   + À ¹N   77'''77'7''rN   E Ú Ÿ4 
  64632"E%ô&     O ä •*   6462"Où    * 1HO   6.>Ðl:_l:1^l:^l    9 @9@   6462"9KjKKj‹jKKjK    · @ ¼@   3#·@ÿ      › o ×2    ' 1 >  6"&462"&4626"&462'&7672>?3'&570#7654Ë


	


9ö


t(A
    † ? ì ª   %  7&'."654?/67>37?&'.#Ô	

“		8++       ‡ y 	   2!5463462"Ç!þ !Ž!0!!0y!99!Ñ0!!0!       y 	   3#"&546!2+9rr!!¦!!ryþŽ! !!ÿ !r   ¿ Y@&áæìòø $.5APYapx€˜¦±¶¼ÄËÒÞâ  %72636'"31302363'&1+"'&"#"5<5&#6'#6#'.76216'26763236/"'&764&637&#&'&6370245&362350#'&'&727&27&366'437'&76&767&323&#'&6=2?6'&'&76535&35&'&/2763&72?743216'&#.#&567.6'&76=036/26#&'"76327&274'"'&#'072'&#"7672232'&'"7'#'7656'&'"7/276#764'&'654'"'&'6#'623'&#'654'&"47674'&#"7263&'&3654'754'&6354'754537#"2361"3"32762'"#*764#&76#&#&376&#276201#*#76"#276#"#&#3763032#*"327;6"&3323#""2623632##&##2763476#2763'""#&3767260&#762363#"'"32737273632""6676#"'&2236176##"&'"432&75'&365273#"'"'7236'"'73&254'"&#26&/632'2"&#''602"'0.'#"&'"&#535'&'532437"5432>32"'63'543'0636#0#""2'2735427630#"5442>3""727#&#565"#57'27"47'>7636#"'6



	

		

			
	

	Œ
	em*)		-
	!	     Ù |- å     ' / 7 ?  6+"4;+"4;"=42+"4;7"=427"=42+"4;+"4;þ		$=

ä		;	:W		     y 	   3#"&546!2+9rr!!¦!!ryþŽ! !!ÿ !r   ý À Ë   %/ Ë     í É × 
  %"763&
	Ð    í É Ô   %"763&
Ð  í É Ò   %"7632&Ð   ¾ }G         73#'#'7'757'?'57'7ú

Gr‹wW
%
  ¿ A   $"&462A&6&&6Û6&&6&   Ò ¡. ñ   ?Ò..¡PP   × ¤) ë   ?×))¤GG   × ¤) ¶   ?×
=¤     Ý ¬! ¼   ?7777"'ß°	     í ® ¹       7#'7'7'7'7'î


¹     ï ´ Ö   %77''577'7'' Ö    r ‹y   %#!‹©©þç²«r     € dZ   %##d££äÀ«E  Ž A Ý þ  3  7'''77'7''777'"&'7'7''77767+Ë			

		j		Z		     X ? Ä «   777'''77'7''Ž«    d ù «@   462"d   ( Ì æm 	   ' 1  '7'7'3'7'373'7'3'3'7'3'7'7‡	I			¥			
M
		
		@






L
|


   6 2ØK  # 5 G  /?/3?/?/3?7/?/3?/?/3?Ÿ
	
	K		`
	9

ç

®

		

 @ <Î@ 	   '  3'7'33'7'373'7'33'7'3‡
		
		<
		
n
			@

Ü¹

    z !†`   4632354>32#"/#"&5zŒ
Œ>	»§û¹¥    r   y   75!#rŽ!r9!   r y   2!5Ç!þry!9r        y   !#"&546; þ€G!!GŽr! !r     %; [\ 
    .'&76>'&5#7&5424
	H      d? /  #'&'++767"'&?5#5##53;531353#5#1_

			
   h ˜c    74632#"&74."32>hUC+F'UCBVë&5'+(&ÁE],J,F]]F--,:-     y    %!546;!+ ÿ !Ç !ÇÀ€!¹€!       G    %#"&=73'7'37 Ç!Š		
À¹!€j      A y    %532'373' Ç!

	À¹!€a    	 ¼ yD ±    % 1 < V k x  7#&572>;#632#77#673263267#632+&'2767&'63232>232622632#&'63232>32263202"'632326Õ5=	O2	

N

	

§
    ¹ ¸G        " , 5 = A H O  7'67'757'5755'5''67&57"4'67'743"17''6#&505571Ò#K(#$T
=0/	sÓ
	
	
(		 	A

	     Ö œ)  ' 0  746?#".57#".'576=43'546Ö
S
æ+	
22
	+)	     á ¬ Æ    ( A Z s Œ  $+"4;#73'3'/&?'&654276/&?'&654276/&?'&654276/&?'&654276/&?'&65427677),¸      $ ¿ ÿ 	   ' 1  3'7'33'7'33'7'373'7'373'7'3n3?		# ÿ7P;

	J    }Ç] Í ã  6.1"&'".030633276.67>63631162#2#&1&'&0#"'#&'76.'"&#".&1&0#&#"&1.5"#"'""'&'05'"476#1&61"1465"&>55467632&2&'>54.C	
		!	
	
O*		


!	
	
#+	     j   7&547ü «      / õN 	   %  7'7''7'/77'7'76"&462å	
Å	s##Õ‡

	å‰$$      j º   ' 5 B O ] k  #'77'7'73''7''7'7'/7'7/777'75'75'577''7'77'?7'?''l6 ]m&&%,,t&&%,,X H''&++t''&++	 G B \      €  y 	  )  2#!2>7#"&54>77'7'Ç!!þ¹À-!&6(?u  y!ÿ !rþÝ)6'!.,>”""   T Í©% 	  '/7'¥  ""    Õ V©*   %267#"&54>7U-<',?6y&3>,
-'6   ‹  y 	  2#!Ç!!þÄy!ÿ !r    ž hëR ê ó  %676#'&'.'&7'".76254'.="54?"#".?"&/7./760&6>1"&'27.6?"&/7"./27607372?.>?"".'#7".'527667.>?&7632654&+727&'&#à	\^!		$	(

#		
'"

			„ý-

		 

#$0$# +"#!""#
p     ù Žy   #/#5?/671?3Ž''"!'	#1d$$$	 ,     ù Žy   3##5#5353U9999@++9  Ž _  † ]  %37'&'&"'&"'&'&'&&'.#./507>>76767627>767>í
				
			
				x				
	
		
			    Ž   } Y m Š › ´ Ö é
  %?'&'&"'&"'&'&'&&'.1./5070>676767627>2767>6>76"&'&"7767>27'."&/376'"&"'&36727676'&'&'&3276672>2761#'&'&'676'&"'&&67627676'&'&'&'&í
				
				
				þÈ
f			­	ã	


		
‹			

	¶	

€

	

o	
		
		
			&			

								

      Ž ‡   53#"&5ŽU!‡€!       } { E Ž  76'46'#"'&7#*.5434'&/.563276320636#".'6.76'#"'&7#*.5434'.=&'&563276320636#".'t
	



	


b		


.		


    * 1 7 q        642&"442"46"42"4,c4       ‡ Ž ù   53#ŽŽùr   ,   ‡ Ž ù     - 3 9 ? M S Y _ o  … ‹ š § « ¹ ¿ Å Ë Ù ß å ë ñ$*06<BFJPV\  7+"'#"?425"542"432#"432+"'#"?425"542"432#"432+"5#"?625"542"432#"432'7453+"'#"'7473+"5#""542"432&"5#57473+"5#5762+&#5+"'#"?425"542"432#"432+"5#"?425"542"432#"4327"542'7453"1#"'#"21#"'#"?643#"432425"542"432#"432'"542"432#"43262#425"542"432#"43245,"
441	*1Ê36M						/9	,     ù Žy   =46373#'!99ùG!€  Ž •± ®   $#".4>32±
		§    M j× Ñ     $"4'.76&6©&lÑL	    a YÚ Í  ! 3  $&6'32657'4&'&/46'&'4567>Ì			
	
€''G
	
	 [ Y­ ´ 	    %&'&76"4&ª1	©
+'(    P Dã ´     &  $"4&'&726&>&'6767>0'oW
 n	u$	
6   p @´ ¡   %3.5pD

¡4		
 s @° ™   %&'7°_6  i EÈ ¡      %7'7'4'.'&7's =
;Qf;:55:	9		    † k  p   $+"4; p  N” y   %+"=4;2”R#  G¤ _   %7'7''#		_	   V ¤Š Æ   %676#&'&`


	µ		 E ­Ø á    $&?/&6`á&    ¿ ¬Ø Ù   %/&6Ö·  Î ­Ü »   $"4Ü» U ²d Ü   %"=42d·  P ­r Ì   $&?j	Ì  N °ä á    $"46&6]–¾   x ™² ë  4  %#6'*'46'4&/#6'07272>3>37/‹
Ë

    y     2!'63'!!7!#!"Ç!þbOÇ;;þÅ²Ož!þry!9¹+V€9!  b N 2    7'!7!Åcžþbc;ëGGGG      k 
  7&547ÅcOOc;•G9 9G+  +  • ó 	  7'7'373t!!!((´''''    Õ  y 	  2+Ç!!òy!ÿ !r     d NG2        " & * - 2 6 9 =  2"&47775#7575'75'75&'7&77'67#53'67¦^CC^B
##'%,,'<	22&¤#S?&22='$,,<>2C^CC^"!:.'*-D-
7*2Fq!      œ k 	  3#"&5œr"c!   « y  ù 	  73#".5«UùU    ¹ ² ò Î   73#¹99Î   Ç ¤ ä Ü   73#ÇÜ8   « ‡  ù       73#73#73#3#53#«++Îr    a ND2   6462"aB_BB_‘^CC^C    õ · Ì 	  %3'7'3 Ì   ÿ ¥ Ö )  %6323/672>32767616&'&'Õ    ã £  Ú %  721'".'&5&547670>øÔ	     ø ¢	 ¦   777''ø¦     Ç ‡9 ù   $"&4629!0!!0Ø0!!0!   Ë ‹5 õ 
  $"&54>325,Ö,    Ò ’. î   $"&462.&&Ó&&   Ô ”, ì   $"&462,$$Ò$$   Ó ª- í 
  %'&5462-''$À

  Ü œ$ ä   $"&462$Ï   Þ ž" â   6462"Þ²    ™ !{^    4>;2+#".573264&+™N1@@/1		B--;	;//9I
ƒ)    œ  y 	  2#!Ç!!þÕy!ÿ !r       èy   7#"&546;œLLc!!cLLLLLLLLLLLLLLL0! !     h £c  -  %#"&54632#"/654."327'&54632N",BVUC+F''4'+(	2]FE],J,<*l!--,:
   í À   %#!"' íþrÀ«      « y   	    -%7'67''  þ  ÿ "Þú	ëúÞÜÀ**É´™™´¹¹    ‚ K à  , E `  7#0&'"&'56'&'&76>'7#&#"&6&"'065&&6&?6&21"'0654&6&?©	
	

(Kô	—     ’ y Ñ Ð 	  73#".5’?Ð7		    ’ y Ñ Ð   7#"'5#5353Ñ¯((!!       2 y 	   !5463!23"&5 þ !Ž!þdœ.A-@99!!Q‡ ..    j ù\  2 a Œ ¨  2&#"*&'&437&'&664&1&'5&/54&76'&7'>'&3>7&472546146?4'&7>'&276"74676=247546'&0>#6756?˜3#	

0#\ 		
	   ®V ³r   "=42³Y  } c æl   3  +"4;&&6?542>736'#&/"/¸$	
@

lí    ~ ¹d    "4"4¹dO   “ Î    "42"4ž;    « ä    "4&"4ä
$   m ; õ   7"&/"&/0#'''4.+1"'&>?'7&76''''6#"76'&4=4.7676/6>?"'&>767>ó	

á
			
	



	
     N  ²   5!! þ ²d    • y 	  2!5463Ç!þ !y!««!   •äy /  77777''''''77777'7'''''r#.#5.:6::6:.5#.##.$6.959959.6$.#y959.6$.##-#5.:6::6:.5#-##.$6.95 9 Î«@ 
  $462#"9!/"ð/!!   G Üœ2   $462"G##õ$$   ™ !y^  #  46;2#"/#"&5732654.+™Nn.$K	
bB..;d#+Q	
w`	  w Ü ¬" X  7&76?6322545&'&5670'&7676'&76"'01'&+'&#&=4"	ø	

		
  z ã ‘ ò 	  72046Œò   … ¾ Ï  Z d  7&'4743665"'&767>5"'&763226'4.'476#62762=47'&'0'6&"132µ
Õ
	     v À8$   ' T [  0"1">76'&76"26"66'&677&54564760#"&'##6'4'&7"54Á	O“	NO					
 $ ¾!  4 K  %6'&'476"#&'67&7>367654'&76#"1"'4765<146+"8
	^/Ó7? '	     Ñ ¾‡% q Æ  &5&74"054&5476&#"&'&760"01&'4'&''&'&'&'&770>;65&4&5..7676767676'&7676'&7676'"70656"1&7'.#&'&5&Y	€		

			    ˜ ¿  X \ j ‡  %&'&'.#7>767"36745.'&760#4#7676'&5476>707&7"3&66/&1"2'4/432032145031414162				
]ã

	


	B  ~ \$  ; I [ h v „ ‘ ¢ ­ ³ Á Ü õ  7=62/&320361056037'4300:505422050542'4'&546&744'&76"#74&7&63"54&56'4&1&6'4'&7&63054637"5&7'&5476232'064162#5&74&5&5464054&#'4563636332616'&5432313210#&2"=#"=#"&/3542ù0	2ºCFsT]€«ù
F/

=4>&
H       !Ýy 	  	&5463!2Ýþ,	!Žtþ­ !  #  _ 	  7#!"#Ô	!þrSÿ !    	 ÷t   7&	Ô
þ,!Sþ­  S  Ž8 
  '3731'e   ÿ Žn   
   7'37'/373'7|)8"L      Ê ÌX      7/735'373')S5	y     Ê Í   
   7573'7/5'373'º*‰ß    Ê Ìn   
   75737/7'373'7=1}ß#k   ‘5 ÍX     '737'£)1K#       y   2&'Ç!þHy!Bìa    Xy   73& ­þ¸ZþŸ      «y   &5463« !yþ¦ !        þ   7&'%éì|        ‚   7"'%#9ã!tB!      y      75!#2!5##54>33#"&5Ü$!!þÜG•9•\!•U$r!\••\Ý•$     y   !!#5#535Ü$þÜG••y•H••H•    + Î Œk   #"&4632U
	!--!	
87*.A.   r ß ã\ 	   ' 1  3'7'33'7'373'7'3'3'7'373'7'3«
		
		
<	
D		X
		
\	

Z






C






  J qÉ   %.5?>32‡#r/8  8/ z °¯ Ø     ' / 7 ? G O W  $+"4;6+"4;+"4;+"4;+"4;&+"4;+"4;+"4;&+"4;+"4;+"4;‰		













						Ö


   p æ¦   4:767.'&54&p
		 t é    62363.#""'&74&t   € à     %"=42"=42&"4…	á   Q xÂ   .5>32Á"!5,,5!    Q xÂ Ü   %3.Qq! Ü&11  [ x¸ £   %&'3‰"]x    ~ ~² ˜     %3#"44;#4;#‰)&#	˜   [   Ò 
  %636#.7]Â.	   Q ”z Ö   %&'632xœ#
6  £¨ Ú     %3#73#73#Ù67766   h ¸ °   %2326;2+"&#&h
0°		         y 	  %#!"&=! !þr! @!!9    y y 	  %!5463!2 þ !Ž!yÇ!!  h À ÕO   2./6žO,
I  m Ç ÐO   ".'&'62Ð	
4F/	0	    u Ï Å!  " >  623&'6322'"'&'777&#""&23"&#""&#"#&'2632262ª
		'			Þ
	
  Š( ´I   #  ''7'77''7'77''7'77“C   ] S*   7&'.?3¨2	ª	2[#H%%H#    i d   9.'&7þ#_	_     ’ è 7  72#&#+"567"=4334545"=43'4;272#&'â%
Û	/	
    z d ó ­   79&'>>;26ó)*–       À x 	  2!5463Ç!þ !x!!  » bE y  -  76'"#'0.5>36727'"&&7>:3ÞF	w     Ø h( ƒ   %0&"'&'&1&76326"

	

    ã u | 	  %#"5432{    ä õ   %"&2 8õ   È {8I  V f w  $2.54>272'7.76?'?'76'0#4236'4236'"122.+"4.7&'01776'7767&5041-
	8:ù%


  Ö €) ë   %9&54>737377))*
	À    
	   à  á  # 2 A Z s  76=&=77535'&'&6320'&'&6320'&'&6320'6=&=77535".6=&=77535ö
,6+	¡
.+
	   à ž Ë   +  7&56=&=7757&76=&=775"'&56=&=775éÇ(()    á € ©   %69&'623632
		£     ž ` ù U  %#'0'&'&#&/2?#"&/7&'&'1&'.?&57&'.?4'&6?6713

c

				
		     ò `c ù M  76767>?4?036574.7.57&7727672>21#''"&1'ò	

c	

			
	
		

    Ì •4 ù 	  %3'7'37(    (Ó&&&   « xU 	  %3'7'37A5445AÜ'=&&='=      y 	   =!#!"&2!5463 !þr!Ç!þ !@!!Q!!      N 2    5!!5!! þ  þ y+ä+    y     =!%#7'7#' þï5++++5yŽŽW 3  3 3    º }F 	  ?'373'Õ+55++}3 33 3         k 	  =!#!"& !þr!@++!!      k     !!!! þ  þ r        ùk   &54ææk««     $ ‰  ù 	  7'5'757u)(()Á##++"    t €     !!tŒþt €       ²h   &54¢¢h¨¨     ò žÄ æ 	   %7'373'7'373' 				p			ž     £ È 
  %7'265		Å   Ú ª! æ   7#ý$Gæ<    ß ­ á   ?ß­44   ß ­ ¼   73#è+	=¼  å ´ Â   763637677å
´
     ü È Î   642üÈ   Á „> ü     % +  7'6?&7'454&'77'63:1#"'6ÇIP	OÙ
%
	C#HI   Ë ‹2 Þ    ' 0 : B L W ` j t  ‡  6'6'26=2&'2>'7'&573'"&77'".77.773'&6723&6?37&6?36.?37.5777&"&7577&&5'0?5/7:5ú
'–
	
	
K
	
     â ‹ à    642'0'.57ù‹8	     é ¶ ô Ø   7.75ðÒ
    Ù ¤ Ì   72&'.=ý·   ß £ ü È   73&57æ

Å	

     ³ à   %7&' Ã!	 
 ¶ Ø   %7>5Ò	   ý ¤& Ì 	  %7'&67 $·
     C § v Ù        73#'3#3#73#3#'3#O+½

2   s ¨ Â 2  73+"'5&'.=373326?27>=/7¤	
	µ	
     òj   7&547ß «     > × {   6#"&54>32{	õ	   7 ñ ‡ %  7>&32332#""76.1"&#'637	ø   & Š ’ ô   7#&'"&76&/76467		ñ	  ( “  ê '  7#".#"7>4&/760>237‡ 
 		¸	
  : Ÿ } ä    73#535#535#75#7##3#7"57zC¥)	    q Ó ƒ Ø   7#42ƒÓ   5 Î L ä   7'56'#60'67EÚ  k  • è 	   7'373'7'373'ƒ			æ			»  ¤T Ü         # ' + /  %3#3#73#3#73#3#73#3#73#3#73#3#Ü88888   , Ú ÿ & O t  &'&'&'./#''762356&'54''&/'"'4636%6''&5''./#4&767Ø
Œ	‚ ÿ
2	

	
	     5 •Î õ     $ + 2 : ? H O U \ d k  726&4762".4&476&2&2>.264636&664&4%2>76&66&76".66&Ó
¦		xñ				       \ $   !! þ $È    ‡ É³ Ø   %7‡Ñ   N Í– Õ   $#!"43!–þÀ@Õ   – ×Â ç   %7–à	   ' ºà ã    $#!"43!#!"43!¤þÀ@@þS­ã    qƒ   %#"./>2ƒ	*)(*À
	
     ‚ q 5  %#"./>323*
	‚	
	    ± ¤ ô Ü         # ' + /  73#3#73#3#73#3#73#3#73#3#73#3#±Ü88888    ’ nc 1  #"&#"#".5463232654.54632W%+,B/	1!&!@.7*.9
	"-7
    f™/   .>7>={			  g ¼— ã    %32;6"&'m&ã    œ ÈÌ ù  '  %&76&'7"'3'6&'466#64&#&¢
Ù
   Ž ÍÔ ü $ =  %0326?'./'&4?'>7>67'73&/&54&š
	ì	
    Ì çÖ õ   %64'6Ìç	  Â ÎÑ ß   %'>Êß	  d ç¨ ,  %&/7''&?3&57"7=7&?&†
	
ì			    ` b¬ À   %39.=†&À.

.  ` “¬ À   %3#5†&LÀ--   w y” “   %&'3†y    d “¨ ¶  & @  %#>7'7+67>16&7>70627215.5:"/&'&†

®    {~+   "=42~#    d p¨ Ž  2  %&"&1.6'*&/2'6767657"14675ƒ
	
y   m ÃŒ æ   %760'&m
Ü	   nó Ð t ç  %676&#./&76364>'"'&72'".#763204&'4/7650'&7656?'07>'&7&74641&.'7&76676'.1'&74&'&74676&'&#&54632&'0#3&632&'&'676676276'&'".

	
¯
		¸) 
							
 )  Q W» k 
   %>3&7'&'&672Ri_   N J¿ m   %6""'&&7'4>276¿*	h			  g Z© m  #  %6'&'"'6776'"76'#'56g


=	
k j ž   "/32>37† 

  > ÊL Ø   %'&B
Ø	    @ Ðq ú #  %.67&766'&#>#>'&W
		Ð	
	    S Ãv Ü   %+67.776v
Ô	   6 è? ó   %&6'8ì 8 ã_ û   %&76'#&'67'0276[ø    a ¹¡ ó   %"&=#&74&/676‘	
¹		   G jÕ 	  3.5GŽ&5143"    ’ ë® ö   %."521ªì  ’ â¯ ð    %."#6&"63"ª	
è     Á¯ ý   %&4'&6'&7¯
ó	! ¦ Ã» ö   %"'&6?&'&>32´
Ð
  ° è·   %00'&4>1³ò
	    ² íÊ    %'>&105>3´	ó    ² êÏ ö   %0&7>3¶		ì ° âÏ ð 	   %0"76*&'672&"·è  ± ÁÄ ý   %4763'&746454&'&±
ó! M sÐ 	  %.=3ƒ"s.,,-0  v ‚« Ä   %#'"/"'"74>6ª		–

  … ºœ Ò   %#"&7454632œÆ  V Ëz #  %&'.#&7>7""5463&46322yÏ    j Ïˆ   %'4&7>56320zÐ
  v Ð~ ú   %"&474'&>54&5zú	    ª î° 
  %6&52&®ò
	 — í®    %&5704.611&­		
ó       y   2#!"&=!5Ç!!þr! y!ÿ !!Ž«       À Ü   5!!þòÜ    Î Uy   7#546;UU!Îr!    U Ày    3#73#UVVy««¹   « Î y   3#«UUy« A JÍ Î   %#''#75#'3#ª#### n ¢7>>7%DD  ( æ À      ) 3 =  %3#3#73#3'7'3'3'7'373'7'33'7'373'7'3€-
#.##G##GqX²+			3		’						W						        y 	    =!#!"&75!%72!5 !þr!Ý#þÜë!þÝ@!!tIJÝ!J       Q /  	  75!!3!Ý#þÝÝÜ$þ æIJIJ     œ Ýy   3#5>9¤Ý yÝ¨  , Ï ±N   3'?#'3?¯))*(31//0        G 	  5!#!"&5 !þr!G!!      E  …   5!! þ …@    ‚     !! þ  ~       þ =   !! þ =?      ; y 	  5463!2!Ž!;!!    Î ~8 Ÿ 
  " )  7&/?3'&"54762'#"&/?&'37åG	@1
   	 ² “N  I R \ f p z „ Ž ˜  %'.="'./&/&767>?76=.&62&06?:>7>'67.+&3'7'373'7'373'7'373'7'33'7'3'3'7'3'3'7'3?


	G
<		
			%		D			
		¡

	
+			("			9			("			      Œ Éc 	   '  3'7'33'7'373'7'33'7'30H	I
	
	!


	R·



/     C $ÜN    %!&57!%>7>7Çþ€€þkS&('3
!'$;&)&1cu     Qm   7'67&'äÒ;þÅÀª­­     äj   &54ÒÒjªª      ƒ  ý 	  7'7'7'D/*!*!/²/")"*  9  œy   3#9ccyþŽ     P t †     7'5k 
    _ = w ™  	   ?'73#3#_RU		  =  w =   7&'"#&762w
	  P  ˜ Ž     767667676467'"&#'3#73#_	
$	|  ¹ ùE 	   '  '/7''/7''/7''/7'÷C	    
 9 R œy  + A W m y † œ ² È  7'57'77''7'7'57'77''7'7'57'77''7'7'57'77''7'7'7'7''77/57'773''7''3#7'7'7''77''7'7''77''7'7''77'9		
		
		
		
c			
P	U				
			
			
J
	
		<
	
		>
	
		=
	
	
Í		
	
1



p		
	
8		
	
6
	
	
  ?7 –m   ##'#'5'57573733	



	]  FR ki   5757373F		R     F 5i    ' 1  3#'#'5'7#533#'5?#"'32654''/7'F%
	J%		§1Röè  F R          ##53#73#73#73#'3#'3#		%


			

-




			R6

   F ÿ &         3#3#7353#73#'3#'3#c


	

-




			&
	



	

     c ú s   3#c  D 4 ’ á     3 7  7#'575'#3#'575'#373###5#5#53535335#w#-33
,á

	Z W		  ¤ d\   6462"¤6L66LšL66L6    » {8   6327#"&4632&#"Û!#((#×. (:(    é ˜4 è 	  %7'5'75Ï				      y   2#!"&=35Ç!!þr!Õy!ÿ !!€¹    À Õy    #54635#5##335ÕÕ!r++**+y¹€!r+**+++    + Ü «\   3##5#535€+++**\*++++*  _ Wv)    727#".54632&#"?'7''ä/'=+/$22[!!#k$'+>$2F2R#$       y    !"&54%2SþÖ!Ç!þ­hþŸ! "!ÿ a   ðy  	  #67 ^þ­†S	þ¢sþ”a
þŸl      ày   3+69I^Iþ¢yþ”l 	  ëb 	   ' 1 ; E O Y  73'7'37#'#7'75#'#7'#'#7'7'#7'7#3'7'3?#7'7#3'7'37/373'ÁdR::5K@H^4m    Ày   3##5#5353œrr*rr*@+GG+G       y   2#!"&=35Ç!!þr!òy!ÿ !!€¹    À òy  
     # ( , 0 5 9 = B  #546374&"27'62'6'6&47&7&'7"'7'7'?'òò!cy¹€!B1^&
(&
     7 × Âb  	      # ' + / 3  &"7'72764''&'677''67'7'&'„)!*^JI/^EB0BCAAI/I     Z ú Ÿ?   462"Z     bxy   !5469?þˆ!yþéÞ!     ‡     %!ÇþÀy!ß!        y   2#"&=Ç!þ\#!£y!þÌ!4        y    35#x+þ]‡+¤yþÌ[4    ‘ !o^   #".546;2+#"&5ß0
¢	0	!		
	Þ      ù 	   %#!"&=!%!! !þr! þ  þ @!!«9      N 2    5!!5!! þ  þ ‡9ä9    ‡ y    5!!5463!2! þ !Ž!þ À9¹!!    ó ç
 ÷   7'6÷
ê

  ú ê ö   7523úì
     ç ‹ ï H M  7'&'#1"&160'75'##'#"7635&'.'.76'4&6374>2&'ü			

Ð
			(  ó Ú ù ã   7/42ùß     ÷ ­ ç 
   72&'.64"4ü
Î
	 
 ž% Ä   %77>'6'7''Ä	
      y         #532!!%!!5!!!!"'!#!!øøÇ!þ þ   ÿ  ÿ ÿ  þ 9!ð!Ç ÿ \þãŽUVr9   	   $ \       $ % ) 4  7&5!!&'.'!!5)!%!!5!!%4774753 þ þ   þ   ÿ  ÿ ÿ þø6EVVV9    Ð ä\ 	   ' 1 ; E O Y c m w  ‹ • Ÿ © ³  373'7373'?373'?373'7373'?373'?373'7'373'?373'?373'7373'77'373'7373'?373'7373'77'373'7373'?373'7				0			0			z		0			0			^		0		0		´		6		*		0		´		6		*		0		R













2











\





3









3









        y   %#!"&5463!2 !þr!!Ž!@!! !!    u Ä  -  76'&767367>7.'&'&'.'–+ã	u
	   ï «C   áBx  757&1'05&1<13334217575?5'#3=;737=#523+53+376#3433#"+*1"'7;773=?5'+=###&706.'52;3032122337012#4'6#74&7+'71#0='='#0&1435#5#0&152'"5#50&150553##36015301#737#6123650527'#0"#043'343#05"1+1#5'"15'#5#4'"5&#057130'5#'3'753='#+53?654;732143735&#/5'413ñ.
	Ç17
     ¸ ä    %#+'5232135:173+&1¼'  ­  ²   %;033*1/#'#3²   ½ ‹U$  " * 2 b ¢ ´ Ì ß é€‹ª´  %1'041330"57'01&54257301*1574023"#60&1#10303#'503031&'10&#257"10&#57;253#'#4;1;35#5#73=#53513##&1347211#5#0"#52733333#7524#7575'"5>33775'5'"0'676537'67653'#4'4&145'&0&5/5#/5#/57'5"1="1=#5#5#5'#5+5##&#&'21212#30101346"153'0&1'#30313&'41;5'+"4#&'&'5243'"=27&+'&0#67'"1##3#+"+4767'#4767#

H		
¼#"S=	



	
4
	7



    « Ð Î
 	  #476Ã	
    ¹ ¤ ý Ý  	   75#53#70#"57345#3ºB$¥9   Ø ¹6  " ) . 6 ; S ` p   œ ¯ ° » Â Ð Ý æ ò  771'7'57375735151;#####325757270'&#037#6#541"4041&100'2037'&05/0307#4"&1&1&372121''&2'5214'35'73741"1+3703/#"50#5331'3#4#'35;#&53'5'5+#33?3###5;7303410'#032=501Ø)	
 #ÄQ  „ g ä  # =  7&'&74/&7465.7>767'&'3.1.'"–=
—	
	

!	h	
Ž	   ƒ ¥ ¢ â   7.'&7672&767™¦
	   Š u}  . C  7.54721076767>'6'&5&76>7>7676¤
Ç	å	
.		3
	  g|  7 N  %27>7'"#"'6767"767>5>7>707&64'03.'&'1,1
p#
		
J  ´ Tl  B  %.'&'&53.7'&#"&'&'67&#"'&'7632632d6

ø	‘	

	
   © w_& <  %&'&'&''67676767275;=635'675"'635"'635'632''67'##/#67#"'75"'735&'735"#5#'"5'5#6+';=7537&#72;135+=35021=#53151#5174#5"'&'&'1##'05&'&'&'37&/#&5'#"5&#5#&5&"&1#5'5'050=;*?;;01717374341'7514743723&5#&5##&547_«			





		
	

	

	

	ü	







	
	
				
	  Í   î Ô   > H S  7#3#4"1&53413"&74&'7'5'=#5'=';5;"375'57311#533#5#5ÓÍ+	     ß ¸ ò É   7&'&'32537347è¸        y 	     =!#!"&5!!%!532!! !þr! þ  þäã!þäþä@!!Š9Ç9!C9      N y    5!!7!!!!546; þ äþäþ !«y+ò+9*Ž!    + Î ¹\ 
  #"&462¹!));*!*;))   9 Ü «N   "&462«"/!!/-/""/!    º Íp   77'''77'7''r	$7.::.7$		%6-99-6%p9-6%		$7.::.7$		%6-   G ë œ@   "&462œ##'##   S ÷ 4 
  4632"S		      y 	  463!2!!Ž!þ @!!9     y     !!!! þ  þ d       Ž  ò   =!! þ À2d    -j   ! + 5 ? I S ] g q { …  #"&46323'7'373'7'3753'7'33'7'3753'7'373'7'33'7'3753'7'373'7'33'7'3753'7'373'7'3<-)*+*N!%J$#$*G$*G$*   r Ž`   462326=4632#"&5r()	
V89U>š')š
ž6LK7     G y 	  %#"&546;Ž!!Ž! !    ¹y 	  %+32¹!€€!@!r!  " ¦} ø   %'&'.462x:ª
6   …¡ ñ   3  %'5735#'577'2#".5464#24"0#4"3"2521&	l		ñ;			# r …¡ ±      $&6"4"46"4{	.(±	# H éq(   %#".5462q
ý	
    I êo'   %"'&54>32#[
	ê
 G ìr   %7&#'>2gø E ýt   5&#"'7>2h

		 Hp/    7&#'>2&42f
		 V,c1    42V,    Z0_5    42Z0    • öŸ þ   %'7š
ö 2 ÍF þ   %&'&76'232<
Í   . øD 
  %&#"'6323Dø  Y ]c Ï   %"&6754'&6\ÎN	N		    N “x Ä   %&'.1&652w
˜
	    @ ’k È   %6"6767>76iÆ  R Z` ¿   %4&5&7W	¼L	 0 ˆ –   %23276'&73#"'&:
	
–	  [ kb q   $"4bq V i\ o   $"4\o  ï¡    $426š
ú	   < ¦— ø   %&763>76AD:
ª96	   …¡ þ   2 5  %7'5#3'4632"7"2502124#24"0#14"7'“	d	
ñJ	\     …G ±      $6&4242&428	('«	# r Í‡ þ   %6'&76323}	
Í   u ø‹ 
  %47232&#"uø	    ï*     "4&
	  €  y 	  2+Ç!!Gy!ÿ !r     € €y   !!€ ÿ yþŽ   » 4E ü     ?'7?áE/q>>=Š>>==>>=   	   y     ! + 5 ? I S  =!'7'7#/7'7'7?'7/7'7/7'7'7'77?'5#7'7/ ˜				

3
	&

.

*
	*

				yŽŽ2

"	
		

					

		
	"

   ‰ w ò 	   ' 1 ; E O  %7'7'7'7757'''?3''7'?7''7'7'7'77'37'	
"		



				z

)
		


 			Ù			
			
 


F			

			


   Hâ %  %#"'"'#"'&567676323&=3212Ü	#L$	~		ƒƒ   > j¿ 	  %.=3'j||  b º— .  %'474>76'&76'5>56&'&e	Â

		  m „™ ø &  %&'&>741"?'6'4&>76761210™
‰


  { ø“   >'&<&4#&#&{ E   
   ) 4 ? J U _ j u €  "'4'4"#'4"'&#"'&"'&7"'47#"'47"'47#'47#"'47"'4IX  D ‡»
  - D [ r ‰   · Î å ü  36376&1#"&74'36376&1#"&74'36376&1#"&74'36776&1#"&74'36776&1#"&74'36376&1#"&74'736376&1#"&74/36376&1#"&74/36376&1#"&74/36376&1#"&74/36376&1#"&74'E	P  " OÛ
  6  36376&1#"&74'&/"''.76762>76™:$L$	! ˆ		  b ^ ¹ í n  7#''6&"'6.'6.&'6.&'.'6.76&76'&7>'46'676'4656?¹
		
_'	
		

		
			
    >â ê   : N  %7''7'#73?#7'7'7'7%676'33#7.'.#'!#65<54&/… ,
	!þ©			È°$6	$
6"(,'<(=
/(
4=7    " GÜH#  6###''''02&'.#'&'.1&'"3'''''.'&5'"&'"5&57>34>70'"'4&'&674217'65&767&5'&5&'.7.7"747".7.7.45.7.7&7626>?'67'67676'&&6?62#7676.5&7>76>Õ							
		!		
 G
		
	


	
	

		

	
     Ä ‰= ä   73&'&/&/&'&Äy					ä	

	   Í Œ4 ä   735#5#5#&'5#&'5#&'Íg					ä&	7AKRXXQKA7	   Ä à=   326?0#<153267y**    – `j) 	  %3'7'37QBAABQÜ/M//M/M       À 	  7"&=!#9! !!€€!       o   7!!&'&54767òþòÙ
ëV„        # ] 
  !!&57'4êþòêÕÕ]€€       l í   ?76&'&67#"&54632>
!

	
  0 ¶ O Õ   7&'.'&767.3660LÀ
		  | !„`   &546327632"'DD		`,0¸¸	ö L ƒÂ ù      %75''7#[,,,,g,,v,,ƒ,,v,,h-,,-      y   2#!"&=!5Ç!!þr!y!ÿ !!€¹       Ày    $ . 8  !5463#7'7#''7#'#7'7#'#?'7#'#?'7#'#7þò!H,I$

*y¹€!				U			]0							   9 È Óq 	   ' 1  7'373'3'7'373'7'373'7'373'7'37y4w

J											9			5   ; !Å` &  &54632376237632#"&/#"&'=%:4:%
8444 »ÁÁ» 	ñªª    ¡ ,^ ýh  73"##2367236323373?3230#33613123233535272#"1#0#"03"##"15#""##1"#50'#5"5#5#"#"1"##0#00#"##&5456=#<5#&#45'&#5&47"/5"&'4#'"'#&5&'*#"&'0414'5#50'#5'#5&5345&/#'5"'"7076737234345253523726767673'4'4567367502336756541614'4'#&145021?2306;0ò	
	ý	
   [¥T 	   ' 1 ;  3'7'3'3'7'3'3'7'33'7'373'7'373'7'333¦>>=

 








 




    { !…` %  7'&54>327632#"/#"&547ÚH	77HXHHÌa	
	NN
	av
ee
       ‡ 	  =!#!"& !þr!?HH!!      ù y 	  2!5463Ç!þ !y"FF" 	 }"M    ' 7 B J R ^  373#5<5#'#73#'##7'7373#57#"'&547632654&"37##5#53##5#5;#3#3#}A;
	
8F*L""(""((		&			
%####   Ç ®9 ù '  %+"&47&47&546326262626329	V	Õ
  Ç y9 ¹ (  %#"'"'"'"'#".547&47&54739n±  ä À ä   6267"&547öÎ

    × ‹) ® ) S  7'&'"547&763&'&6&5426762'&'"547&763&'&6&5426762ð4›								  ƒ ‚ B     7676#&7&'&"&4'&72ƒ"÷
	(	
     µ 1O =    7&?7&'Çy4	     ? ¾  v â  %3'&+"'&'2>76;2'70>#6''"&/".7#"&54632'&76&#32654'&'&7&'.7>6'%7667#'3264&'"'&632#"&'&7>7>4&5''#&67>='&7676&'&147>38?	Ï	
			 	
B	
						;		É
/
			
/
	
  T -­ Ö   & H  73#73#'05#"&7>?32654&'&%32>54&/#"&547>76Þ%))¯	B	
9›



			
	    » ^E   $"=4.+"&=4;2+"1†^xx	  ¿ gA   3+"&+"&5¿‚

w		     Ç$ ã   $#".54>32$	Û     ²$ Î   %#".54632$	À	    ò Ç ã   $"&462Û   ò ² Î 
  $#".5462Å	    Ü Ç ù ã   6"&462ù		Û    Ü ² ù Î   7#".5462ù	À		     … ${`   +"&='&546327632{II
?@	@	hwwh	\\   \  y   2#'Ç!ò²y!@y     \   €   ?3#\²ò!y@!     \ •$   ••$dd     @ À@   57'ÀÀ••@€€dd      x   3#.57'462ÕùùÕÀÀx”H” €€      2  y    3#'6373##"\²òùÕÕùò²#yy”þ”y    =  S   ¡  %53#17'+##"''"1+&#&1#'#&10>37/'#"?555''5'7&'50'3&3".76&64>32'6672>1>316322650&54'"¹G!,	

	


Rä«!D	

		0	 r ¹ ë   %3#rGGëä + r ë   %3#+GGëä     p   &'&54767pæU°        ± 	  '7'7_9)
33
)93	(88(	     ) ‰ £   71##'.7>06&7.67>kU
	ä2
		
    H ‰ œ Õ 
    7&'./>3&'6#S6*	+*$<Õ-   ( ˆ ¥  9  7#'&'&7676'&'&#567636#373&'&'&163‘V		%	`T+	ˆ
	
23
	
    þy    !'63!2#!"'7þþH,Žþr,N"	þÑ	"   F 2 N 	   1!7F¸þHºNÿ Ž      k     !!7!pþÛKK%9q99     p 
  7!!&'7'67Û%þÛÁßßÜ8”ªª    ‡ $y^   %2+".54?#"&546;2Y	­		Žt¡	Ž^	ÆÄ   Nå"  /  2+"54;26=4&+"543!2+"54;26=4&+"543Ò##²ª		¥›$$±©		¤"&ˆ&		&ˆ&		   W "©f 2  4323543232+"#"'4547>76=##"=#"54; ~:;&L3~;:X===)E(7!A"^^   W ©l 8 L P T e i m  … ‰   47#"'&547676326;2+32+32#!"54;5#"4;#"'&5476763275#5#2#"'&'547275#5#2#"'&'&547675#5#2#"'&'&5476(
Á

,

,"

þÔ

$,

,	
3****
G+++4	
=+++A ÿ2?@@!†??Z@@*#
	„??Z@@)
	!ƒ??Z@@(     V ¥k ? K t | „  2+67632#"'&5456323326="#"'4547675#"4;54322+"=43'3267676;#"&=432676324+"3;2=É

!


		
	**Îv.%
!.>"L7?Pzf
{{
f"I	j
\	R>>`mmH


[$
		€		%(		(   S ­k 3 P d l   ´  "54;543232+#"'&'#"=47#"'&54767"43!2+#"'&547632326=#"'&54767632'"4;2#'"54;543232+#"'&'#"=47#"'&547672#"'&'&5476e

?,

$-)6		6		‹	
3&	%3		æ		h

4B

9--%#!	&. 

 '$´C

>!I

 )

!&%Â$    [ ¥g  [  7"54;2+32#!"54;572#"=4+327676323#"&=##"'4547>7#"#"=4;542‡ómþÌŠŽ!K
,",77

(@ n}FF¿@

J0:
	%%!

!   R ¯f  + 7 ?  2#"'&'&"#"'&5476762+"=432=4+"372+"43 ÿ5]	
_5O+		X7g!!°!!¨ ›–f	E,		0F"A	
*H	¸ Q  Q v
GG
»   Q ­k  ' ; ¢ ¦  7#"'&'&547632#"'&547676327#"'&'&547632"4;5#"54;5432354232+32+32#"'&54563232>=4+32=432+"&=42;5#"#"=4;57#3›#
		6+

+H1

1=oJ

D
K
@G2IIâq9,1/	žM(



)vm	[
2

88

2
[	’A)    S ªm G O S  747#"'&54767#"54;67632332+6;2#"'&547632326=##"574+"335# B(`

m	

±¾
s!		¤ÀŒ¤¤¤¤ª*J
¢

&Hº

>%   ^ |[ ' , 4  7#"'&547>=4;2#"'&545632326='3=4+"3ª
%!§!		¯±—¯H* \S<  þ
	JZ.>M		1   m ’k  # * 1 9  4232+"=#"&=46;"35;5754&+2>=#îee^^U	dd	Uˆ\\k_)‹LL‹.<V5C.<]5C    Z  j ) F V b j €  7"4;5#"54;54232+32+32+"54;572#"=4+"#"=4;54322+"&=4632=4+"37"=42#"'&5476323326542y		?2		23		3=		=P		½		UU
„<#g^UÂF)		Í






Ç00S	*		*	B

Õ

þò$
	  a žj : ` l x  2"=4+""=4;&'&5476323&'&5476323676322+"=4;67#"&=4>;2+2=4+"372=4+"3~ î %	3
	(	ÓB	3	•	D	lÂ¥

‰63-

-3±00&&Q
%		%
ˆ
		
     ÿÀ À    2"&4264&"–Ô––Ô– ^††¼†=iÀ–Ô––Ôþ²†¼††^>i=   [ °j  0 [ g { ƒ ‹  747#"'&54767632"5#"'&5476763232+#"'&5456323326=#"54;5#"4;2+'2+"=432#"'&'&5476754+";2=#Š-9.)»(

(			 

 ›

Û

%|‰
r

r
†Ž#5»@+"+ÌG	@ªDDçµ*		     ÿÀ À    "&462 –Ô––Ô*Ô––Ô–  X ¨S  0 <  "543!2+#"'&545632326=+".=46;22=4+"3c:%		=XX(K8ÿö²ci
[

[
     ÿÏ É 6 F  $#"'.7>6'&'&'.7>'&'&767>%327>'.#"ú1c#$>8J0("…=3
8IŸ(	1Å[J0)!…=38IŸ'þþm	[
(¢J='!7##.6>'/H		Z;2(¢J='!8##.6>'.I	‡**      2 À 	  2!5463Ç!þ !À!UU!    À y #  %$'5632632632632632632 #//þ°$$'×0	q #	       S D '  %5>3263263206326323>32 þ3.2!"î\
Á"!

        ¤   %!5632632632>32632>32 þ '$$M#       @ \ /  %&'#5&'#5&'#5#5#5>74>32 81B@@B1j"\v#››#„j 4K+
	+K4       ÿÛœ ~ #  %2#&=667606766723>766d!Í¼
	#$\!%h		    ÿÀ  o /  !"&=632323>326326320414632630>32Çþr!
!!2!@!	!"
l!  LÿÈ ¼ &  ".#'.>"/.òþ


	r2r 		þ    TÿÜäk   ?546?>;767232%&6i
(
	®þž¿

(þž®	&  TÿÜÞB 
   7>;5%&6?5Õþé
	äþžM(þ±®	&ç       N À 	  2!463Ç!þ !À!þÇ9!    ŽÿÀÕ•    73#6732Ž98¹€c@œ99þddþœd      ÿÀ  	  %  %#54;22#"&5323+54>ŽŽròr!Gr9!²òò#Ç!d9c!Ž  Uÿë¹@         # ' +  73#53#3#3#3#3#3#3#3#3#3#rŽ€Ž9  Ç¤      # 4  424274>32"&426462"42%27#"&4632Ž8¹G+þ••€d$		9$        À 	  2!463Ç!þ !À!þ€€!    &ÿæÚš …  %///"/&?&?&?/&4?/&6/&6/&6?62?6?6?6É)"		*	
&-
	*		))		)"		*	
- &
	*		!*¶&
	*		")		)"		*	
& -
	*		")		))		*	
-
  w 7‰I   6462"wPrPPr‡rPPrP    ÍÿÀ  Î 	  +5632 !új-.n!…‰’    ÿÀ9 y   72!"&=6€36ÿ !Yy4B!n       y À 	  2!463Ç!þ !À!þò!     ÿÀ  ‡ 	  5!#!"&5 !þr!‡Ž!!    BÿÜ¾ o  D  %"'#".'&6327673276"'"'#".'&6327623276232769###	!!		!!	#"#F#$	 !!!!!	$2V    ÿÀ  	  %  %#4>;22#"&5323+54>ŽŽròr!Gr9!Îþò*ä!GVc!Ž    U ¹@         # ' +  73#53#3#3#3#3#73#3#3#3#3#rŽ€$Ž 9    ÿù À 	  2!463Ç!þ !À!þrŽ!    & Ú¶ …  %///"/&?&?&?/&4?/&6/&6/&6?62?6?6?6É)"		*	
&-
	*		))		)"		*	
- &
	*		!*Ò
%
	*		!)	)!		+	% 
-	*		!)	)(
	*
-  w S‰e   6462"wPrPPr¤qPPqQ    ŽÿÀÕ$    737#5467;2Ž98¹€c@+99þÕòòò     ÿÀ  • 	  #  %#54;22#"&=323+54ŽŽròr!Gr9!\œœ#r!œG9!9    	 UÿÎ¹ Î         #  73#3#3#3#3#73#3#73#3#rŽc$ «    ÿÀ ²   "#4> 4_D(óM„¹²ó(D_4h¹„M      ÿÀÿÀ   4>3"Q‰½h_­~J@h¾‰Q+K}®_    ,ÿÀ • 
  4>3",J}®_tÄq@_®}K+rÄt     WÿÀ j 	  4>3"WqÄth°g@tÄr+f±h   ÿÀ ? 	  4>3"g°h\[@h±f*\\   ¬ÿÀ    4>3"¬[\{®@\\+¯{   ÿÀ \ $ ) . 3 8  %3##5#5355>74>32&5&'%3535735&Ç9ä8ä91B@@B18þã989q9k+9GG9+ 4K+
	+K4 >j>>jRÆ#BÆ„     ÀÕ¤     ( 0 < G K S W  27#"&463264242 4274>32"&462"64>32#"&462#".426462"42\@Öþä¹ÿ iG+\$9€d«™		„¡$		9  l 	Ûs #  %#".67>"'.6Û#G-3&.=<!)
*5-	1Qeo$"&'&2>%"!'D#   ÿÀ š &  %#!"&=4>76'&'.76 !þr"8$9aH),	*<$$=4{B,Zb!!g<5=5-9KMD
A	   ÿÀ « Ü   #07670>7>?««>
"@±      ÿÀÇ   !?6?Çþ9|\y@Ç5& Q   96ÉÀ W  2#"'#"'#"'#"1#"'#"'&'#"'0#"'0"#"&463263203:16326326326326326323°
	£
			
   ®` çš 
  462#"®q    ‹c Äœ   462"‹t   {n`œ    462"6462"{
		¼			x		


	     ÌlŠ§     462"'462#"._ 
ˆ
	  âe…ž 
   462#".4>32"&Rp
	…

    ²v â¦   462"²„   ¡L òž 
  4632"¡!d"     ÿÀ  - X t  %#7.7>?&'&"#.7>76'.'.'&'<.'./7!4'"#67>7
@9		ác&"	$þ¤@R%	;d#"

		I! 	
%	
3		
	&G    ÿïy ø 4  %'&'&''474>76'.76'./7s%ƒ				
	.%     0 	  -  '&>50767>7>7>7>7>   * 
..,9
9	"		    Ä  ê	  <  %'&'&'.'./4&6&'&'&''&767>762Ž	B
	…
Î©&	$!#!:&?
6     ¯ êW '  #"#"&#"#.'".54723632623U 	  ¢kq   #4.'632km:/0^:+
   Î ü; '  *#0#"&#""&#"&#"#"&#"'"&/432;7     Ó ýRb  ' 4  7"/./7"#&#"1#&4'4.5'7+&>57ô	 (ý

		"	
2*     ÿÀ À .  12.'&#"&562>6&67Ç!,""6#!	-
À!˜-!P
!*+   ÿÀ  [ (  1#!"&=>767>767>76 !þr!			# 
0&
!!%  G Ñ‡    + 3 > L  7"&46326"&4626#".4>32"&4632"&462#"&4627#".5462h	

{			r		%	M		µ


á		
E			IC
™‚
		   	 = Cè§     # + 6 ? L  $"4"&462"4 "&462"&46326"&4626#".54626"&54327#".5462=w

\[

þÐ:‘	…
Vx(		2þÞ

f-	€	
		  
  \èz     ( 3 ? J N ]  "&462#"5462&"4"47#".546326#".5462"&4632"&46326"4%#".54632¡N	t¨£
	W¬Â
0†Z{	)	
/›Z
1Ñ   ÿÀ À   <62"–Ô––ÔVÔ––Ô–     kÿùü§ ¥  '&'&'&76'&'&76.54.'.67>4&'.'.74>7>76676&'&767676&"76&'&'.'.67>&'&63276'&#"67>>n%;'

	

5			*+	
	

(
J0

§8I)$	#		2
	

	


	#

		    4ÿÐ¾­ Â  %"/67>'.'.547.'.56&#"'.76'."'6767>763:>7>.63#"#&#&'"&"#"54"#6>7>32­		!

			!0


	
	n
*		,
	


			
	     ;•¢ › ­  7&546727>7>2'.*3262'&'&'.5./'.'&54&#"'&54&'&#"72>7&'&46522(%K>	
	(	
			
	
Ï	
W>GIy 	

				
	    Øÿæ–  # > r  %#&>&465:.76&#.'&'&"'&1627232&54.'&5>'&'"7676767676Q2		c
		
		
	ü		
	/			
	      ÿÀ À       % * . 2 7 = C H M R W  2"&43&'73&'#3&'3#3#67#35#367#5367#3367'3&'#7&''36&'67#–Ô––Ô–,¸a&;mm€š;&am€œ,Uma&;;&am€œ,99,	*÷*#2*÷*#À–Ô––Ôx6./5œK	pd6ž	K.65/.66.d€K		K.65/.66./K&"<&"þÂ&"<&"   	 ÿùä‡     * 6 B J U  462"462"462"462"462#"$4>32#"&462#"6462"462#".d))q##))þý	wÙ	Üþ·2**J##Ž**X”ŠþË­     ÿÀœÀ   <63:30#"–j*A%%A*	jVÔ–KhthK   ÿùd‡     * 6 A  462"462"462"462"462#"462#"'462#".d))q##))þý	¢	]2**J##Ž**X”±€    œ •äN     4>32#"&462"œ<  ÿÀ À   2# j––jÀ–Ô–    ÿÀ À   <63"–jjVÔ–þ  ÿùäy    *   462"4632"462".6462#"9))q	³	9
2**[«j
       ò‡    & 1  6462#"462"462"462#"462#"€#**ƒ	3Ë#Ž**XŒ    dÿÀ À    #*&#.4670632 –j@PP@
j*Ô–Œ°Œ      ÿÁ ô¿   7.54>7dP@fŽApC 5&ÀXŒ“gCtE2BR    œÿùä‡     * 6 B   462"462"462"462"4632"462".6462#"9))##6))ý	³	9
2**J##Ž**X”«j
   • dN 
   462#"462#"G	3:Œ  	 ÿùä•    " - 9 E M X  462"4632"462"462"462#"$4>32#"&462#"6462"462#".d))q# )),þï	wÙ	Üþ·2**X#Ž))t¢ŠþË­    ÿÁ ¿ 	  $4&'6œP@fŽŽf@h°Œ“Î“    ÿÀ À   "&46 j––Àþ –Ô–  ÿÀ À    #2 –jj*Ô–    ÿù äy    )  462"462#"462#"'462#".d))e	¢	]2**[±€     ä‡    # +  $462"462"462"4>32#"&462"+##6**}Ë##Ž**X    ÿ¾µ   '>¯SªòW†ÉaµWòªSgÈ    ÊÿçØ â     %62&62"&6"&462µßÚ""ÞÈG"      ÿÀ À 	  %"&462 –Ô––Ô–Àj––Ô––j  ÿùä•    " . : B M  462"462"462"462#"$4>32#"&462#"6462"462#"U**¹)),þï	wË		Íþ~A))þò))t¢ŠþË­S  € 2€   .  62>"&5467#"&462#"&54>32ì(%	P`P	¹#«	^//‰#    _ÿÀ ¾   4'#"'>76.'&>5dI@i<–j[FK|!jMGpAj–9QA

    òÿëòk    #  $462"462#".462"6462"9))€¿))c			þ™­     C¹ 
   %67>701462"&'U,N¯    ÿÀ¡¾   01#"&54>7œ!|KF[j–<i@I

AQ9–jApGM     ÿëk    "  6462"462#".462"&462"d))€ì))c			þš­    G C æ    7&'462267'"&462æ,UHN’      ÿÀ À 	  %"&462 –Ô––Ô–Àj––Ô––j  ÿÃý½ g  "/#"'&/"#"'&?'.?'&4?'&6?'&7632376763276276327232#"#'#"/	+68	$22$	86++68	$22$	86+=2$	8	6++6	8	$22$	8	6++6	8	$2   G ¹y   %#".5462¹lM2U2lšlÀMl2U2MllM   Ž Kr  $ .  62>#"&5467#".5462"&462î$ ,+G¤


 ˜  r*y
     äÀ )  %/&"&?6./&6?>?62š
S'S
@[ +, [
Å
[((\
CQR   ÿþÿÀ¸ 
   * 7  &'&476&67>462"&7.76%>.'&6‹.	.
	½ç08þ:80¡7$-$7þV99•!	6	!
   œ 2äˆ   >76œ-›W,@'$^RI    « käŠ   7>76«GBT 8(Ü7,(CJE     ÿélF (  ?6/&&/./.?>?>ØE
"	G1
@

=

	@>
	3E$F    ÿÎò² 6   #"&4637276/7276/7276/7276/7276/76È*þø:));:))

((

((

()

))

)²*;þø(:;R:)
((

((

()

))

)  9ÿùÀ€    "&4766°þñ/! €	þñ !/	     Š ‚šŒ     '  6"/76"/76"/76"/76"/7Ã)(

.((

.((

/))

.))

‚)(
/((

.((

.))

.))

      ÿü À  " 5 E ] p  4>32"&'52+".4673!2+".54>;7"/.62'.>?>"&'&4?>ä 	
þr
		f9		þÁ			¤		
«|<	
		þÁ	  rÿÀ  ¤   %2+"&4632&54632>326§%44$ÿ  &%v5L5!/"


        •‡  " 9 S  4>2"&5'2#".54>;7"/.67>2&'.4>?>¹€
		T				k		€c		<				    d @G$   6462"dB^CC^ƒ^CC^C    ÿù    %2#!"&4632&54632>326‘.AA.þÂ))	
%1.
Ñ?Z?'8($%!      ÎÀ  " 7 O  4>2"&5'2#".54>;7"/.7>2'.4>?>¹€
		T				¤	
€c	<			
  d yG\ 
  64632"dB/5C^¼^B4/C      2 @   2#!"&4632&54>32>326‘.AA.þÂ))	

1#
?Z?'8(
&   ÿÀ¹ $    & 1  "&5&?"&'46?"&'4?#".'4?".5&?«)b)É)W)W)#9	?       ¤ À   2#!"&4632&54632>326Ž/CC/þ¹**	
&2 0
‡C^B);*%(#   ÿÇ Ž 
   ' 0 9 E  7#".'4?#"&'4?'&'4?"&'4?"&5&?&5&?".54?«))F))T)I)d)]›	jp
	     ÿÀï •  ; Y w • ³  6/"=&?'&65427/"=&?'&65427'5&?'&654276/"7'"=&?'&6542767/"=&?'&654276/"=&?'&65427Y•E·.J5,S      ÿÀV ²   "'&?#"&?21232È1H3126G‰@[€Vƒ  QÿÓÂÀ   >'.'.67>32&7¬+	h\q`c
T!#+""1‰3·,		
  P ß‚²  5  #"'&77>5&'&76#"'&'&'672>ôO"K95Q87x&:%:($1?1
N

	a	
    ¾ ½‰    , 9 F  67'476&'7262##"'&767.56#&'677#"#.5676°1¥''¨»M
	
!Se'	2JeCv	
!3
²D	7 ©X    Vh¨À $  3676'&#6.'4'67>32"05.­%K#+2Q
#9Kh\Y$%‘¥
"     ÿÀ˜      !&54630>32632632632—þ} 	
 @  { rÖ Î   %".54>32Ö
 	    ¯ Xþ §   %#".54632þ

 ‘ ì l   $"&462ì%%R&&  J %¯ Ž    $"&4627&'67¯4%E; < ;½ t    %0&'&'6 		U@-"= J	t1	    Ž ,Î ¡   %#"&4632Î			g	"1"     (Eq /  67>3..7.7.
>2

	%4"	L	?

!,;F     ‘L  "  7>?'.4?.'&>7)(Ó~D
    5 'A   ) 4 @ R  70767&'&47'4723>7&>767'&?6'/27677./>7@&	&
	

	 "80’			$#$	) U%	K		  a Ã ï ö   7&/7>?ï
)3 ç   ÿÛä¤   $"/&462äKj%É&Kj&É%&K%Ê%jK%Ê%  /ÿîÛš   %&/.6¡&-V%Ê%.V%—&U.%É&U.%   ÿÕê«   %&'.6Ø'þŒ'$'t'     7ÿüÝ -  "'&'.'.'.'.'.'&'&6Ï&%&

&%

&%&

%&

    $U\ 	  2#5#4ddôU\…^,)U^    Ž $â\ 
  %!&54632œþÿdGA`•q),^…rU   U ‡ r ¤   6462"U					    r ‡ Ž ¤   64632"r	     U y r •   6462"U			    d • Ž Î    6462"6462"dž			%  G • r Î    6462"462"U					º			  r • Ž ²   6462"rž			    r ¤ Ž À   6462"r¬    G ² » &  632&'#"'#"&547&546347&54>32>32–	

	*6	
    U Î œ       6462"6"4426"454>32"&d"+*å	+9		  « $ \ 
  %+&5462 2#ôddy#2),^……    r Ž$ 
  4>32"&r	   r ë ¹@     462"64632"462"Ž				3		%1    «
 à@   2&54632=46Õ	@	   œ ¹2   462"œ				   ¸1 ÖO 
  .>Å
2		   « $ò@    " - 5 = H T _ g s   ™ ¡ © ´ ¼  6462"462"6462"74>32"&74>32"&462"6462"'462#".462#"462#".462"74>32"&'"&54>324632"'4>32"&462"&462"4632"6462"äAM#9*			—	U				ñ?V3		dO%	?			W			"$G	S*			>9€1     U $ ä y   73#UyU     $ « Î   <62"2G22GVF22F2      @ \   2"&546Ç2@!/"d\uI!!^…  + k G ‡ 
  74>32"&+y    9 @ Ž ¤   7&'&547&54620632Žu	
  9 k  •    72"#"&46462"‡	E•  G • r ² 
  74>32"&G
	¤			    * q…   '&/7>'v
	.'#J$e'(ƒ  #LU#‚     °>ž 	  # % 1  %'&6767'&7>%&676'&"75&70
4



þï Te±¶È


E

3 	
7
    Xe ãˆ   &#6{Ki    C; _W   462"CC   6 ó Z    ! )  462"7462#".424>32"&7'&76P#I6
"/I			
   F þ Ã†    462"4632"FUhU		  g ñ— 7  00'&'&7&''&''&7&''&462666767Ý


	

	





]






	



   rB Ú‚    42&42ÌhB2   d ·h   "'&'&7&'&4626°:   v ¦V    462"&462"ƒ


		&

,		     bU wj   4632"b	[	  ÅY âu   462"Å		a   ˜ f Ý 	   %'&7>'&676\



£

Ø

I

	     »; ×W   462"»C   yG Á…   "'&7&1&66º




l




   Š' Û’ 
  $  4>32"&4>32#"&4>32"&Š	<‡	$&  ¡] É™   &7&µ



™



   Y ÆŒ    462"642a%    ùÿÔ    %'>7'6/26U•"¹.	—" 	••!¹&3#     |ÿÌ} £   7&/.'.4&'.7Ø¥*F9r¦F     ØÿÊ²    7/6'4ù¹¥¹
¥    U    º   %'6•º"•      S  T    T ÿý Ø¹  #  &'&'&6761&'.7>'ñ('e$"
)*n#T 	T …#U"[
$	 9     ð ïv   &'&'&7&1&'&'&756676361Æ T	e

9     ÿÀ À   %".54>2 )CbdbC)+540045+\60!!068bF;%%;Fb   Å   7"#.7>76+#.F) :("#USZK=AQ>@    í äÅ   %"'.'&6"Õ"(: )F.#@?OB=KZSU#
   œÿëÆ   #"&5>76«%	Q¤"ok1   ìÿëdÆ   "&5.'&6#U	%1ko"¤P	      ÿÀ  \   %".526 )CbdbC)!‹¨‹\60!!06+88   ÿÂü¹ '  %&76'"=456&'&'.'&766F[8*3$8!:2	'9J	\óA	B/¤Ç<LE	0,„  ÇÿÀ9 ‡   "574>:9r

++€  # Ý
   %'.#"&7>2¿,+!+69,!?$)$)$?<O9**9O   Q %¾   %'&''&7>2Ÿ '="4F0C,",C],Z44Z    R a¾4   %'&'5&7>2Ÿ (>!5F2C,",C–*
T00T     v š–@   %'&''&767>2|$4,9%
4##4Ä		#	B&&B    v Ä–j   %'&''&767>2|$4,9%
4##4ï$	A&&A    ’ òzx   '&''&767>2d#+
%/**	55   ’z˜   /'&767>32d#+%/!	*4'5  ¦I^¯   '&''&?>2L !%	!!c))  ¦Z^À   '&''&?>2L !%	!!t))   $äÀ   %#".54>2ä):B'1P?$,BQJQB,Î%:''D-.ZA))AZ  9 @Ç@    * 5 C K V ^ j r z … “  6462"%4>32"&4>32"&7462#".'4>32"&'4>32#".462"'462#".462"4>2"&462"462"4632"74>32#".9D	þä99+9æq(q(Ia			3			0Y			>			+H		?1		   ÂÿÂ:> 8  %&'&54767676767650'4'&'&'&/79(4ž
	
%
  Ïÿî:!   - < H  %7#"'&'6777#"'&'677#"'650'67'#"&#&'7677&'6767	'

			>	AF   "/Ñ½ )  '.#0#&'&&7>67>Ð6+,;9$	008"ƒ1
	 "6    9 >Û| $  '.'&'#0#"'.6766$5,66#'
B_BS1+09	/,L	1/>U,   ÿÂäÀ (   2&=.'&=46254626=4“/"3:UU=0"/!2F2‡!œ(k2)c!!Hû#22#Á‚   ò¤    & . 6 > F N Y e m u }  462"74>32"&4>32#"&462"462"462"462"6462"&462"%462#".462#"462"462"462"œ	”gM			lz1l			¾			U13			le	9	S_			0			Ml			%œ,		>			i	M		     ÿÇÞ]   77>546'&69gY !//BVo33aC>!
( R†Y	*-   + ëë¾ "  '&'&&'&&7>:14.5&76²9 	#;%	g?'	
	
     ÿÀö Ü   %2'"&=.325462>îSt!!uU'•'(’‡`Z	ZbC%¯­%A    œ ydÀ   "&54>2d-n-'..'FBBF*]88]   d yš¤   2#"&54>32>D*%a99c$*:¤D[+GG+[DÞ5FJC+    ÿþÿÇ´ L [  %'.&'&''>'&.767'.7>&'>&54672656767>7.7"'½!*#11#*!,	

+.!!%%!!.+

	é		˜'.		%))%		.'*#"
(".%

%."(
"#*      m Û    7/.7>>2/&ï
SS
SS¶
    ´ :Q    $/&66/	....»HH-HH     Ø C%1    $.?>'.?6

À
S
S
SS    õ §d ü   $&?6HH§..   • j ¿   6&?õHH¿..    a Š\     ' / 7 ?  $6..>.>.>.>&>>..>/QV{¨¼NÊ¶Ê–<=S   Ç {9 í   6462"Ç!0!!0/!!/"    xÿÀˆ Ö .  %2>"&=.543235.5462>7620HH0!9 ;I;H2W	4XX4	"-"A     ¯ †žÀ   #".547>2632y%F(( *W"L;(9+"$,J&    b †Q«   #".67>.632Q1+(F%(.)??(;L" )4     ÏÿÏ a 	  &7632H‘@V5;8H%C   ÿ¯ ú K   '&'&3262Þ6V.
&&"6H'"
.    ÿöìÂ :  %/"1'.7'&'0&9&5>7"'.76751676>766ì2""2
?7)&?/à)#$$	
79!-     x Išu 4  '&'&7#"''&>7&547.7>63:1&76>ˆ.0#("!6	2 ÿ
	((.3
M"		
5>
	     © È   7".5.'&>"ü%	ÈL	  zB è²   /&6?>â'
t6   ÿÀò ‡ -  %26?+"&'5#".=32534>Ž14$VV#	+9 /8/@,"			œœ    8 7Ä¿ S  %"/#"#&/"1"'&57'.?'&6?'4763276763276327432#"#'",!!'
$		$
'!!
(	$

$	(
7
$(	!!	'#

#'	!!	($
  œ •d\ 
  6462#"œ;R;.)ÐR::).     ]ÿÀ£ Ü   %'&'"&=.765462>œ0<##<0``::33:
§§     F MºÁ (  6&/.?'&6?>76/À.
/./0
//.N/-/0
.0.-
     F MºÁ -  &'0/45"''.?347'37>2'67¢
BJ- @.
`D-4c0!@-
HI-D0
a+  ¹ ÀGN   6462"¹*:**:ê;));*    ” Xõº  &  >&'&>'.>76Û		
 	,-5";^

±	
_;'6-+þö	
 
	   F ÌŽ   &7>32Ì	*8]8 S	.:E>:!f	+HLI9S 0R7+	 
  –±Ž     $ + 3 ; C K  /&6'677'673'67>/767'/&6/&6/&6&6/`sPŠ"E9C.
	.:
s"[.Q.     ÿàÇ :  %&54&&'"/&4?67&4>76&#"&>76>Œ!	4)+5<	





	(
1* .::Aq+1	)







17%&	3	!0mU"	    Ä ‡r·  %  2#"#&'.67>2#"1&'&760U
	/6 G,(·p/%€>U8:6    ÿÎ°¸ Q   6"&54'&"+"'"'"#"'5&'&'&'&'0'&76;2676>76>7¢48			$*		,fU

Uc	"‚E)B/		!F.YS14U:dµmËU

VÌmI§'   éµ   % 4 F  %.'>.'>'.'&76%.'>76'.'&67)!07s!/3u% "+<<#Ñ	
&€&$y"á(
)-;	.'C"      ‹éµ 	    &67..'&%>7.y
*-%X@
!)7L$=C&‹#L
	'n	.  € 3‘ ÷    %&'>&>80Jp!&Bq!#/ô$Ä     1ÿÍOL   .5676DìB_-
3 Á
:r[7  
ÿ·öÃ O  %&'&''.7'.'.'&67>7.'.7>76>7>Ï	/ 
F ! 	S))S	/ !! R**R´
)AYF$o8F)

)I%%I)
      ÿÀ À R  %".#"&='&6'.54676&676&7676.76>323666 <A%(M**.&+,GL0)0LG,+—%&VV
'E2DKH,+WHKD0E   ÿÁým  "  7>.546327462.Ç'E-6.%MƒNAc8$¤+3'1*70A*F]]FO<G)8J=     ÿÁü¿ N §  7.'&/#>7">767#"4>34=#"4>;546232.+#.".'&67&'&>704=#"4>;546232.+72.r	


	
 %				!) -!	
!5
)		8
'-7'	,&)&		dd2!
,			8#$?
––"
   ÿÌÿO   7.76".[747ƒ8.!9$5nYV:*7ƒ837O=71.(    ÿÓýa S  %.'&'.70&1'.6?'&4>7>"7>0"&">?_$ 2	vv
K0>
	/'B)*I'H4>.E"2=3Mvv			

	 ( ¤ø²  3 B  "'&7>746"'&72>7>"'&7676:

	
D
	(	'!2				9	!	3U      €ÿÀ€ ä   +"54>5462€9Ž95@5++:O%""%O:      ‡ À   #!"&54767632í!þr!0G\gJ(!/2!!509';G&      Ô Ç‡   7".'67632n(0	))Ô%9')1)    Ôí‡   '  "32>54&'2#"&'6764>3#"&n.0"(3#)4%#30( %„&8 ,'#3)%5/"9'N&2%    ò œr¤    6462"'462#".ò%5&&5%#Â5%%5&Ý$  ÿÁ u   2#"&54326@.7+–jiˆât,I.`ˆ‡aÌ   xx¿ I  346?>"2&"24.+24./">?".'.x0

1#
/



/
(
¿"	
#				

     ÿÀò‡   2#"&'.546U%! _,7IF:2[:6Y‡"*?	T=227;5 +,)    $ œÀ   22632#""&#".476&62			5				À			&.   
 ¡Ä   "'.'&6Ž*B;%Z'	"Q   «ÿÀr ‡   462"«:R;;RS::S:    + ‡ òN   6462"+:R;;RÁS::S:    « ²ry   6462"«:R;;RìS::S:    ÿëä$    $462"462";R;;RþÅ;R;;R—R;;R;7R;;R:    œ 2d ù 
  6462#"œ;R;.)lS::*.    9ÿÀ  ‡   462"9:S::SS::S:   ÿÂõ•   &'&67>Æ/-OO¬/4*P&^TF$R´-/)P]´/4    : 8Õ• H  &'.'&#"'&'.'&0'&'.>&#"67>"'.U.
%$G	#D


	@&[SF k,(9@G4'Q25‡L##	/!E%2(   „^ ¶¹   '&'4>¶	m#	    € œ ×   *  7&'&2".'&7670'&&'&'&4ªL
'		,

;*,    þc   #"&54#ÛƒRj–c¹H[’g3   + #äX   #"&54>¦tI^…X¤@Q\.   G >ÉN   #"&54Xqf@RuN8HrP)   y [y	          &6&6.&&6.&&6•aKrPnXœHN	N     +ÿÀ •   6462"+‰Ã‰‰ÃIÃ‰‰Ã‰     ( ¦ˆ   '&7&'.5>6¢)F
	BT!     Z_+¾   "'&676+4 D*!;²)
3	  w!a™   676'.6¢'Fq‘	
-
+( ÿÿ Ü é³   7"'&'.'.>Õ
(4"
&;,	Ü,
1 	  Iÿºw   !&&'.676467>7>0è,h}7)!&	(We')$	!7*e[&$'(sj'     G c   '&76.67>3ubL- , $  Ã %Ï±   6'&767>7>Žl$-%
$
¤*:bZQ
#!&(   7 `¹‹   767>76¹$(	N(j')	0E(g2  ÿÔœ ÿ   %>&54676767676&#"7676948K 5’ U9

 !-0¤969*$    @ ›=-   %.'&'&7>769j	MO¤	+	4&	  îÿÀÿõ   #"#"&63276r9$9
2
     òÿÀÿÜ   4632"ò8    &ÿÎÊ f   %+"76767>54Ê09	62!8 &/    9ÿÎß ²   %2+"&>7>54&#6r'F

>²F:+		#E  3 / •   72'&7>ò"R&EP@•5
?*    ÿë +    72#"&5'4		    + ±B¸ D  >.67.+>7&>.'>&767>3>7	WE$/
)(!
	$7"2	
4&'%

	#   ¢ÿ¶¿ í   %&/&>¤VcWb{.e2.'.d2.   ¤ÿÀ¶ é * . 2 6 : > B F J N R V Z ^  %''''&'7'&/4&57'&6776'7''77'77'7'77'7'77'7'?'?'³"&K	
T04S?00043W

	')Q"%T7w,#Gv7w8v,,   +ÿÀÕ\   2#"&"#".54>3226U+'+2$$2+'++*+\4$8lJ..Jl8$4    NÕ•   >32#"&'+	2\

	    ò2?Æ    "&5476/

'2M/

'A   ?P ö­   &'./>ö:)*/P"	+     Dÿ¼à`   6&'.'&'.6mj.,*0%,#VP
	?!,EW,#?Q"#1  &- ¹   '.'4>

D
80  2¸¾ "  >324>32'.' )13)Œ%Fw	
     ÿÁ y   632".54>32 FIb,>?'&3,- 23+kcT.W9,

(/C&3K(     8¾   >32.' )	$)#	w

     rb $  %"'&7>54.'&6G	
$%		*.L   a j†Ã   %"'&'.7>&'&6rnm
58Q'	kM«—W	1 VSJT	    ,z¹   &'.7>z
-01163 $C	3$     ÿÀä ¤   $462" C^CC^^CC^C   +ÿÀ ¤   6462"+B_BB_^CC^C    +ÿÁÕ’   .'.54676B/0#?&as4W1<-0%*J=KK,0y>9   UE‰¾ B  '&1'.''&75467&'4676'&#"'"76323>676"uW		-5)
*
3	
		    
 b ©8 
  ! 1 9 E Q Y h p  7'&/&'&''&7>7'&767&'05"1&76'&76'&'&76'6'&76''&76'"74>;6#.>…	
	kT
a
^½Êj	Ê	

7


	…;
TºÐ   ÿÎñ ž #  623:#".54>23ü	,$*@C+6QF$$,ž
*
/"
    ð ¥   %#"&7632ê9jMv}	uu4u!—-;?C     7ø »   %2"'&'&63â	A91

d{»	
'&"   ]ú 8  %&#"&""&"#"&'&'.'.67>72>323:î&% 
	*@$$@+
º  	   —å" 	  %"&546 åÈ@J@Õ  9      Áñ¹   2".54šÌ‹#%?2P2?%#¹XEE     = úÃœ    & 1 : C L  &'&676&'&>&7>'&'&6&'&676'&6&'&6'6'&6™
—
Ÿ	
0
È8		uÿ
‹	cCk<
>/    +cÕÀ    ""'&54632".8=-(‚S*Q8"(-‡0    HÿÀ¶•   2#"&/'&76 cJ™—	M•$	þ||%   ‰ÿØ‡     %/632'#"/632'462#". '!!"G!/!!c!…U!“!!/"    R %™N      2#"&464632.'&'03212d	
!!>")€
!@
E"/!ä!iÌJ!   	ÿÄ ½  &  '&'&476&7>6'"'.7'Ç/S


	ýS

	S-0S	


ýS	


S   <ÿüÄ„   %&'.'.'.>« C25
> C25#Þ52C 
52C >     µ yK   7"'&7>76ÇL#	C	y#L	C
    	 ý Ç½   '&'&476&7>Ç/S


	-0S	


    rÿÆN   "&'.'&'>?&7Õ
)*8
E 5)8' 	,CE+4E:)  ÿÎò²   6462"ŽÈŽŽÈ\ÈŽŽÈŽ    . %Ù     ' 5 =  %&?67&6/&6'&6'7&?6.>'6&7„[þ»i'
7	UVYb	F	
F
     ŽÿÎr ²   %2"'5463U5z5²ªª  ÿÎò«   %"#*#*.546762ò%/


/%{>5FsN"		"OÇ11Û    . Ù î     ' 3 ;  %&?67&6/&6'&6'7&?6.>'6&7„[þ»i'	
	TUXbEF
  ŽÿÎr •   %2"'5463Uª•¨¨  ÿÀò Î   ".5!,XI0&ä&1@'426%557+      GòT   6462"ŽÈŽŽÈ–oOOoO     \ä‡   %".54632 -gP€d2Y8!Jf\6!Et%9?!6  	 H †Æ;    % - 5 C K S  7/&6'&?6&?6'./&>'&6'&?6.>32#'&6'7&6'Û
^8f
e				–²		 È				¥	
		


…	]
2    ÿë    <62"–Ô––Ô>vSSvS        $   <62"–Ô––ÔZvTTvS     . /Ò   6462".{®{{®nZ??Z?    + kG8   7"&54632¹/_P>=Q[k,"/PU*",   9      ' /  7&6'7&?6&?6'&6'7&6'6&7B				#
q
`,				c				´8R@K   @« Î   '  %+"&46;2+".546;2+"&46;2«+
H	²?
	3    ÿÀò À   ".5!,XI0&ä&1@$003$224(      GòF   %#"&5462òAoBdŽ‹Î‹Í$>$O77BB     +ÿëÒ k  5 X u ‘  #"4;5#32+"=4;27"'&?'676&=4?6"7"'&=4767676&?4767"#'&67'/&75>&"/&65'/&=46#9+2GH82F$@þÿ.%)6V	
!+9 .&$

		*!

0'	(     + \Õ$   64632"+}X7/(}°—R;);   G kœ B Z  %"'&54>32#"32654'&'&'&7>32#"67>#".54632329 ,=!8.6&!.
)O$=Š%<)	k
 
!&/#
    œN ¿    .63%2%"&463!2óþ¹	Fþ¹		G	•	G	     ¹ ÎÀ    7".=462".=4632Ç3ë«		«ÖÖ	      ÿÜ  ù   54>32#"&EuFj–EuFj–k&B&S;'A'T   ÿù  
  <62#"–Ô–EuFjLvSS;'A&  .  Ò ù   64>32#"&.8a9W{{W9ao;2@Y@  J 2¿ Ü * 8  7"&4632676'&&'&7>32"276".5463276œ			#			)8z5

=@

5

=   Á h« ë #  %"'&'467&#"&76322676320!43
>3/I	0h
'&  T N€ Ü   %#".'&7672€31!>--@?5Kœ0&%     ‰ k† â  " 4  6"'&76'&&7>7".6326".54632>76é!0	.


%
1	 

<k

	5
	
9

     ª ¤ˆ   7"'&'&>ò	,	)¤Xt	pS    o ìø¤ 1  /4"1#".'&'&767&'&436.'"5>6ôÓ	4(K
G##]		
	     Š ² Í   6"'.676¿		

²*:EP1

    ÿÎ y   #!"&=&54>73 "þª"&5ä;S ' ²""² ', F   ¤ä ¹   %3#ÖÖ¹  ÿë+\   +"&=&546323+€G2 0B "°¯"&65    + 2Õ¤   2"'&54¤¸y,>=Ô¤`R#22ªR  N Á E  !'&>76767'&>7'&>3&>366767>63666­	þµ	


			„…	+93					
	 	
		     p ¤   # .  #'&7636#5'47676#76767#'&>76‡,
G+¨	+K0,.	QÒÌ³¯	‰Ž	Oðç	    ,ÿÎÓ Ý   %623#!"&5&'2323626œ(
!ÿ !
'WŠWÎÕ""Ì	))     Çÿù9 k   64632#"Ç!/"  r - ¼   7>7676&'.†9Y'Q&'q'G3ð5@%	$UÄ#N   q u"    .6R?gQ@PfAPfA  c ¿¦j 
   '&'&72'&'&e0q#	     ÿÀ+ 5   #"&54&467>232>+T;9U//!#  ÿë+ \   6462"TuTTu/!!/!    ÿËó¢   "'&462éþM
´5´þL    å Ù¥   #"&462Ù$(88P8E$9O88     { vHC   6.>òM*DM*vDM*DM    ê ª Ô   $"&462ª8O99OœP88P8  eÿËó Y   "/&462ékk5k
k   ÿËó¢   "'&462éþK
´5´
þL   & Ô õš   &/&6`nW(•%Wd    }B=   %#"&462B$'99O9Ý#8P88     Ì À ô   %"/&4?62:
1{
1

2

|

2

  OÿËó p   "/&462é‚
5‚     ÍS   #"#.'.767>32£
îF"e¾$O89¢$'h$8   ¦ ËK   6&>76r")á$
€2CšJ9U    ' L®     $"&54763276'3267"+"ˆ;&,y	L  + p« ª   %&&54632«*	%‡
   $ j² ±  "  %"'&54632'."7"67676&1)!"4!j

	9

     kÌh    #"'.'&54545&7%Â
LVOl¡h
/*10
	H	E     ¢Í²   #"'&'.?67232ÈÎ%v‚wb
{!Uq:  X È‡§  " 2 B  7"'5&'&767"&5.'&6#07"/&'&6"7"'&'&60‚
T	

OP
ÈF#%H	j
m	6T$	'V	0%
 )    äÿÎò •   %3"&=362É)OpO((nyG);;)G   ä ò Ü 
  6462#"äOpO$?$8PR::).     2Ï À   $"&462Ï;S;;S–;));*   ú &Û Ì    $"&462'"3264&™]BB]Bp))$55&1D11D] "1# . S§ ‰   %43232>#"&.-
"#"     BÿÆë£ $  #"'#0#"&546326'.'&'&76573±$3CA$<LK=%=><2}:*:^:@X&!%@	!
 ÿûä'   &  %>&'6'&'21'&7'6767'6''& #/(!$ª	
	)1/&eS$b	s6
   )º %  #"'&#"#"&'&76'4'&76732)	3.!	/78)
    $@ t„   476'4'&$	$ 	„		    ÿÅþ¹ S  "/#"'&/"#"'&?'.?'&6?'&76323?676327632232#"#<	**
0	
..
	.
**	.		--		.;"
3)+2
	#!		
2**3
"    q '”Q E  %&7676&'&767627>'.7>'."'&76,FJ7
	
3M# )c630+,'(A7,?	)?!_#,/3.9+;
     ŒÿÀt y   73#"'./ô€?y]..E    Ž 2q y   %"'&'673 OÎ 2  € N€ ¤   7!"&5€ KjK¤+    Œ yt À   $"&462tD`DD`«   d †”¾ )  %'.5467&546?&54767&7).^%
	ú	&!


  i Ž‡”   ,  7>7#"&'67"'67'2>7#"&Ò;L-
#]'#> hl%H175	½(-!@F#m


  6ÿÍÐ ‡   73#"'./îâ-%ZL%)	
‡
"P$$L  9 +Ì ‡   %#"'&'67!º6ƒ5
‚Q&'   Sä Î   7!"&5È†¼†Î?##     Œè»   7&767632#"74'$J;, '4(}Ok®MG9-,<9-     D ÷Ð»   &>32&&©'>&k* '3$!B.2135O,&
     œ$G‡   #  4>32#"&462#".74>32"&œR9Y		 J     #ÿÅß $  %#"'.?5.'&63!2,#	1B;*	P6.0 N""&#)+%C(4$     ' ¼Ù 
  $#".5462ÙZ;d:´ù$    “r¾   #"&54>32rB..A(2^/(%,     û ·Ùe   %#".5462ÙA.
A\Aö(.AA   + ¸
e   %*#"&5462
	/@A\Bö".AA   1 eÔ Í 
  %'&'67·¿­
CuŒC”/2	   % ”Ú é   767&'&'&(EwžJ	0Uc{6è!     	ÿÜú   %"&'&67632>÷…Ê…		

#&?$(B'"

qCRRCf
#'!!'#
f      Gòk 
   2"&46264&#"BnAÇAD00"&k'C(<VVxV¾
	      +ó þ $  77>7&.'.'&.A%6—3#(Y	ð(45:57	)N     ¡ ½b û   %2654&#"&546,0"&8û

	

    + OÊU 
  % 5  7"'&?6"/&67"&'4>372#'"'&6?6"?	!!¥

¾		‘
¾o	ª	
;
 | Šµ É 
  %"'&?6Š   ¨ _\D 
   "/&6"/&6Çy	¼     Z 3   %  7"'&?>7"'&?6'"#'.>†Ô


õ		
  ÿ¿ø³ +  %'.'&'&7>767>7>7>7636ñK?)GC"1!#""	'5)$ÂN`%
S4W	. 
$**     <ÿûÅƒ    ) 3 > I T  %6.67&7>%&7>7.>&&>&>'&67.>&%>'&6B,‰

þÂ

§
	z  	–	þë
#
	Ï	^R	+
»		"„			%     ÿÓì¹   "'&4?62w/þñxyþñ/   . È ÷‘   7''7'77ìFPP55QQçEPQ55PP    ™ÿ¿ % 	  "/7w/É0ŒÉŒ/   ¶ÿýj3   ?¶—q?ôþß    ` bM   &/&4?62D‚Kµ	Dê
Kµ	     ÿÉ Ã    /.6?>&/&>½5,+9()9()-Ž,+6():þ×()9,-    b  ²o    %'&6%6767'²
"&5,þÂ5,ƒ "
+6‚%
+6  t 2£a 
  6462#"tX~Y)F)?‹}YY>*E)     æ GŒ?     %#"'>'6.'&7.M4 
B#AÎ>EH #5* O"
%  ‹ x@    %&'6767&'6N"	 &?EÎ	4
 BC#     ¥ÿÅû   "'&462ûþâ+þâ   5‹»    "&462‹r¢rr¢I¢rr¢r   5J… 9 H  7#"'&'&676&'&676&'&676&'&7>'.7'&#"#767ø1+  (<2k)!I3
$	
	2U(2!"E
;$=ƒ !2(X!<+
		&B(m3@	´
    . lw¹ 9 N  #"'&'&676&'&676>'.7>'.'&6736'&'&#"3&'&67].;2(!D0	#
,K%0%N1H<0N9]|G;z1(R!9(			:$b/"82>C€     G =¹
   $"&462¹lšllšÎU<<U<   d Uœ ó   6462"d[‚[[‚ƒA//A.    h k˜\   232"&7>32ä84Z|Z\4L66L4     ” ël\   "&54>2l?Z?2:2$!!   0ÿÀÐN   %".'&62¹*7W6*`à`‡?F11F?Tss  N ²²y   "&762œ^¨^*ä$,FF,U    U Î«y 
  4>32"&U.O.GddŽd$'2G22   Þ –¢9 1  '.54'&&'.=".76'43267>€
	
Y
2

				
  r ùŽy 	  "&5462ŽSvSRxR<''""     Õ ùˆF   %"'6&/63276 
UKù     Qÿë¯• 	   "&546227"'&rC^CFXFþß@Þ@,È,G77ù%%7$$  ä‡²   462"ä”    ÿÎ  ë 
  <632"–jFuE–Ô"uT&B':T  ÚE+“ 
     "/&6"#&?6"/&6%9
x
		1   . Ò ë   7462"..{®{8ara8~-@@-22     r 2Îº   74>'>764&67666rV6
@$&2J78
#	".‡	     r @œ& 	  75>rNEH*@«	
	•    r NŽ   75>r@˜0NŽ Ž  r •œ Ü   75%r*•8     r ùŽy   ?2r€ `ù€"%  ä2³™   .'>66«g?*%
2-
    Ã+:³   .7>76 ÿ#!		+/!
     ÿÀòÀ   2#!"&5463¹""þŽ""À!þr!!Ž!  G ë Çy   +"&=46;2Ç!!!$!!!   A6 ¤•   &>3G
0!)N <    A 9 Ÿ 	    6"'&?6"/&6&"/&6[



­



\



@






9



    Z (Ñ Ÿ   %&/&6?6É	!		!	s		!		  Z EÑ »   %&/&6?6É	!		!			!		   œ @+ •    6462"6462"œ	i			HA  + $Õ¤  ! 1 A  %+"&=46;23+"&=46;2'46;2+"&5#+"&=46;29ÕÕœGGñ¹¹dd@rrrÍ€€     + $Õy   /  +"&=46;2+"&=46;2+"&=46;2Çdd¹¹GGUUUþäG   + $9 ¤   %+"&=46;29ÕÕ@G  ö™”   &/.?6€3=9  þ\‘   /&6?>=
"
	;   «]   "/&6?>I<   Y# Á‡   6&\E"$P70    B ò ŠV   6.6^
Q      ÿÌò Î   .5!&¹#9#ä&='N/"4%83)5'!  ÿð EòI   #"'&7&54632>ÛAoB40Ak*‹g;=!$>$(77B"     2 ¸:@   7&6632'&9:09-'<$ Ü5	(     ¡ ¼48   7>''6«(4	O.Î+*
#     = k< ï   7>#".G!*D!@=!Ü-  V k< £   77#"&VJQ!"a£   7 ‡Ÿ û    %"/.>#"&46;2€+
+#²
+		    ÿÀÀ   %#"'&'#"&54>32ç-".6CX}9b:Y}'R3"-R&}Y:b9}XC7-  + @€•   6462"+ddd¤ddd    B T9‡   7.7>5476ä9*	?R\
),3	#+)  € ‡ ò ù   6462"€!/""/¨0!!0!    UÿÀ«À 9 N  "&=.547&=4>3232>=46226=46272"&=.54>;2"#
		y!«€<ÝÝ<€
	‡‡		‡		‡	þH¶L2%J-   ÿÀ  Ü   54>32#"&EuFj–EuFj–N'A&S;&B&S   ò   %".5! "<-%ä&1I#&+&'557+    Žò 	  "&5462òŽÈŽ‹Î‹8OO86BB     + ¤Õk 
  64632"+}X:b9}°ÞR;.):     › ÎRÀ  5  $"'&76'.#"&4632&"'&76'.'".5463210.			

Z0/

Î0F		
**! 
0E	#&!!

    úÿÜÜ²   %#"&'.4767&56326?332ÕZ34$/,"	/'•D2 FIG#UW!K    †Ð¹    462";S;;S• < 4™ Î    $462""&462y			0

¸		
k		     ¾Ò¬    "'&6676"&4632j:*8
+~	§
   "ÿ½ z   %#".54>;2	#	®e2"
#@)	  ! P Ž   $"&462>z>>z}   $ I z   7"'&6676šE$
0]+	5I
  ‚ ¢´ Ó   %"&54>32´	º

	    )˜ Å    $"&462.6˜V¶s    ; 7a ]   %"'.>U[	   = d F   $.6PF   RÿÀ¤ -  %0#"'.?5.54>:132'"	9(	O2& 	ê1 )!.X6
 (E-$     Reœ¹ 
  #"&462œ!L8RSS¤S$  j Àƒ˜   >'&j:{RD*X
Nc    € Àr9   3#"&€U;!2E97+O    €$rN   462#"€GdG!-20	  \a”˜   "&'&6676ô/MA:	Fa    ÿÀÈk   %0#"'.?5&'&63!2'"	9(	O¤$@" )—	     ' ÁÇ€   "'&'&5462Ç1	[.6z¬zVoK'   ê Ò€Ä   7&?6ð	j|ÕÎÆ     ó NX   '.7>5&	&P#!  I'ªZ   "'#.74>76ïQHŒ­
['
)+
    RÿÀž] 3  %0#"'.?5.'&>54>26;2'"	9(	O*"$		Î1
E<,),	70A	 `3   `Žr     4ŽþÒrTT   tñ‹   >&'#"t /!,C

 y©À 
   462#"y
ž
   u [|Q   >'.>x5nI
7K=
F
(p1
!2K  u [{ ñ   703#"'&>óE6mñ .!5   € Ür 
  7462#".€GdGG2!8 ò	
    ›|z   "&7`Sz¯
   j†Q   "'&6>76öN1
+,6
>

     ÝA ó   %7&ó     ›: ß 	  %6767"&«.2
  æñ¯   #"'.7632332é)I>6'SB7

"8\   d òo   2+532>=4.'+5¹""U8		8o"ä"9ª9  +ÿÀ€k 	  +"&5€!ã!kþŽ!!r     kÿù@ ù   '  ".=46322"&=462"&=462y\	Tääääää  +€y   !#"'#"'#"'#"'#"'+U

yC   $€À   2#"'#"'#"'#"'#"&=463U		

"À*!9      Ž Yr   3#"3#"&=46'2	!2r&	i	&˜   Lÿÿ r 	   3+"&5%2+532>=4.+5LØŸ2!
rþùy—'	i	&     L t$r   2  7".=4622"&=462'53#"'#"'#"'#"'#"&'y?

yØ


tŒŒŒŒÊ,E     L>=²   32#"'#"'#"'#"'#"&=4r¥&

²&(+& d)Ã 	     "'&?6'"'&?6"'&?6¸

2

2FM
$	#c

2

2(	'
R
     ÜÿÀ´ ä 	  %+"&5´Ÿäþø  üÿæ” ‹   %  "&=462"&=462*&=462r>

‹‹‹‹‹‹  Ü œ´ ä   %#"'#"'#"'#"'#"'53´

Ø¸E  Ã °´$   2#"'#"'#"'#"'#"&=43Ž&

&$'*''    I	Â   '0'&7&/32>7>Õ
+
P	%YP
#
%   ÿÆ·w   %"/&4?>7·
,/y›
AFëA
,y/›
F  ßÛ›   %/.>762Ñ	‚

o
ð	‚
	

o
   3ÿùx8 	    "'&?6&"'&?6&"'&?6¿

«

«=

«

«=

«

«

«

«5

«

«5

«

«      ÿÀ À    "&462 –Ô––Ô*Ô––Ô–  U «k    "&462«dŽddŽŽddŽd  d $œ\ 
   "&54>32œ[‚[)I*A‚[[A+H)    ¤ À   462"¬     N UÀ    3#7462#".9²dd     9N ŽÀ    3#7462#".99²dd    +ÿÜ Ž²    3#3#rG99²dUþã   ÿÀ ŽN    462"3"53265326+7Ž			/Žcc     ÿÜä\    !  462"6462"74632#".3#11999HQþã   €ÿÀäÀ    462"2.546«"0/ ã5(<`   
 $ ˜@ 
 E  74>32"&7#"'#0##"&5467&5"&547&547"#"&46303>32Q		8

		9
Ô	
		  & ¤ |$ 
 #  64632"7#"'#"&463241462C1			¬c	   Z p¿   "'&1'&6?>h
				”
		    *` j    /&16?670`‡    ¯ÿÄ
   %./.'7ðx
I-<"(nxH9Z#-
    „ÿïØC 
   /7"/.46?62æ12Þ<G	<F	12¡<
G=
F	     z ÆM 	  /7»2?
	2     e ¸c   .'&4?6«((c((     ÿÎè$   2#"'+"&/5#"&463½	#ä#	$Ç""Ç$   IÿÎ· Î       %3'3+33#3&'˜
V++U+€**O$ÎÇñÿ  ÿ  ÿ  õ    I ²· Î   7!!Inþ–Î    9 ùÇ² >  #!".5463&54632>25463267&54632632632¸	þœ		
		

#				
   œ@œ‡      462"&462"4>32#"&€A¸H)		    U¹\  f  #46303632"#&54>3267&5463263263267&547&54632632632#654'654&"&#"#654&#"&¹8þÎ
		
*	;
							   9 ëÇ 	  !#!"&59ŽþŽ  ÿÀäÍ >  476'&'/"#"'&'#"#&'&'&'&767&=427h$R>	K	*	
K	>'-iA$!e	9	À+
$|0	&
®-OC

&	g_	
¿B)      ¡ä 	   7>77'&'&'&lcBC6ä[kRI0Â5(g,+,    ¹ ë9‡   +"&=4>;296  +ÿÎÕ2   %#!"&=463!2Õ!þÈ!!8!""ò""      ë \    #!"&463!2 !þr!!Ž;/!!/!    + ÎÕ ë   7!!+ªþVë     ÇÿÎ9• 	  2#463r•þc     A\¿¶    #"&?>3"&?6#ä	
`	-	`
	\
2
C

C
2
   ÿÙ  õ 
  <62#"–Ô–EuFj,vSS;'A&  / Ñ Ý 
  $#".5462Ñ{V9`8{¬[A2.@    6 Ê ü 
  %.=!Ê,HVVH,”..}   5 eË ø -  62>?#"&#"#"&"'.#"&/7ÜHD.#	
  (+¾
#   / Ñy   #".5462Ñ!8N*9`8{¬{)2-AA   ƒ Í}ˆ   #  $"&=462"&=462&"&=462s


w


w


ü	m		m8	m		m&	m		m   d2œÂ      "'&76"'&76&"'&76‡4	))v4	))v4	))a))C**))     ÿÂ | $  *.'.547>2Ñ/*
		
,./ iiG1o'KEp=o1      Õh(½   +".?6;2(?
#s?    Rÿö®* 	 E R Z  %"&?62/+"#'#'"/&/&6;2762725130202376276;&.'&>76>&&('+44+''"++"'û &1“%QJ3//3J!+..+!–0"]0-10    ÓÿÇ: {   "57463:32:g	
&&t

  ? Î ñ   %'.#"&7>2³(a13'%F.(-G6b::b   Õ @9* 
   462#"462#"Õ
		
®   r 2d    $462"4>32"&¿Õr     « \Ž Î    6462"462#"«š
¦(
     Ò_;Á   /&&576/&?6?6
¨	    j "³ î   %'&'#"'47>2–&91@+<((=U*
Q//Q   i X³   %'&'#"767>32–':1A,<( 0ˆ
'	L,(7  Œ ‹Ž"   %'&''&567>32w#/)4
%
/²
!	+#;     Œ ²ŽH   %'&''&567>2w#/)4	/ /Ø
	 <""<     £ ÛuT   %/'&767>32a!'#+	&ú	#0   £ øuq   /'&767>2a!'#+&&	//  ´)\†   '&''&767>32K"A	%   ´9\•   '&''&767>2K"Q$$     \ G Î   6"&462G­/""/!    +ÿÜ€” 
  6462#"+dd.N/F]¶[<e;      2èÀ   2#/#"#".54>3:122L+U!m+)7=qDÀ 6>G8cÕ	 :&    d \« Î 
  %#"&462«

•"/!!   € •+ Î    6"&=4>32".=462”€			•			  ¹ N ò k   7#"&46;2ä	N			  +ÿÀ€ m G  %1#+/#"'"".5*.5.7".5467>67>€			

+(*
\
		
*	*     •  2   62".³E	")"
2			   ÀŽ2    6462"$462"6á/""/!!/""/!      ÿë @    $462"#!"&=463!2Ž"/!!/þœd/!!/!*     € •+ Î    6"&=4>32".=462”€			•			  K 5µ    3#'#5'753 5K55K55K55K 5K56J66J65K  Sÿè­     ?7''7'7'Õ+ E\\E  E\\Eë”HE  E­­E  E   Õ À+   6462"Õ$$Ù##    %ÿÜé¨ 
    + 6 A L W  "/&63"'&?6"'&?6!"/&6"'&?63"/&6"/&63"'&?6ŽUUÜUUþÃUU˜ccþ°99Û	99 R8998œ9989€€		€€r9999      ÿÀ À   #!"&5463!2 !þr!!Ž!‡þr!!Ž!!     Ã  ¤ 
  %2&?6 *+¤€	€
   ì ‡“ 
  %"'&?6 	~‡	\		\   ì ‡ƒb 
  %"'&?6 op‡¹¹   ä •À   "&5Àþò     ÿÖÑ 
   " *  6462#""&462462"&"&462$462"Õ$‹-##PþÜ„#`/##ì   : ŒèŸ    "&462#"&54>32‹!!u
		‡!!ó
   X5‰g    462"XD  ñÿÞ= ¤   %2./&676 ..¤©
©
    0ÿì ¤ 
  %2&?6 	½¼¤	•		•   B r ¤   %2.6376 °	¯¤	
    ‚ 
  2/&762ÎÎcb   T ‚{ 
  2/&76h˜	—	{×Ø	   ìÿî» ¤ 
  %2/&76 §¦	¤”		”	   î IÁ ¤ 
  %2/&76 °	¯¤::
   ñ ‡Ô ¹   %2#".5&6372ÅÄÅ¹		   ÿÀ ‡ #  "'.'.54632"Ž	@ #
    ë \1 £   %"&?62# 		\""  Ž •ŽÀ    ".54632Ž +**+ M3-%^<A..A;E   ò ‡+ ¤   %#"&46;2		‡		 ÿýÿ¼§`   6&736¥0C!2/þ™
#ŸV
-!2^Ÿ"g  ÿýÿÅ ò   &'&?¹9ÚGþ÷	  ™ X©a   .76G20]c1"*32\ 0d]&    Ô ¡¸ 8 S   #&'&7>6'&'&7>7656'.7463'&'&"'&7>#&			
	9	!!,5#!
	m			
     ÿ¿³ ? ^  %617676#.67>'&.'&67>5&.6%"'.7>'&#&5&676´	
þ¤			

{	

c
?;
	'++3    9ÿëäN      462"462"462"UWŒ0‚ž    ¤ 9 Ü   <62"´     U \ä¤    %   462"462"462#"462#".r77
	þº	
{--		‡	
    Ž@€¹   "'#"&463276232rM%#A		;I@FFS

S       s ç[   &'&462Ñ$He7	$fH    & m î5   &>Ì"EH"E5"ID!IE    s [   62.'.'.6/$eH$7$Hf$	   mÚ5    6."HE"HE"EI!D   s Á 8  $6'&'&'.>7654'.>7656'"&:		
	¹
		  Œÿ½ ó ~ 9  .672>45&.67>5&.6767676Ù

>

     ÿë€ À 
    74>32"&462"&4632"
G~	
9
9·
	    GÿëÇ \    74>32#"&$462"GG9  G \œ     6462"%462#".462"G	
Ömy	
   	 è>S   %&'&76"
	ì2.   ÿÊù ù   %677''.'I'-Ê!,+9*	
%<A<  ³l ù   %'6fFù   ó Ås   %&67>76
Y
	@È)    F éà˜    7&67%6.XS.%6
O
>6ø95'™>''    ÿÅ ³¯   "&54'&765|+;	åÑ3mVT7	  ÿê Q    "&'46?6#"			   WÿÆ¶ª   "#.74776n	
9ý"?E7/:	hN	
%CX†Q
      Y‹   ) 7 E  "/.>"#'.>7"/&>"/.>"/.>	M 		 	äx$	%P 			E®		­	
ˆ¦    ß ]q   7'&7G
	 è	)099=    
 › ‰ 
  %/7à¦0¥½)¿)   ¹ÿ×E¬ 
  "#&76Éll)¸þH
  P à³A 
   .7>³	!%%
  ÿÿ ž ö‰   7'&6?". ¥0¦½s)¿)     »ÿ×G¬ 
  "'&6"7
ll)
¸þH  M â °C 
  &>.R%!	!	%  GÿÎÇ   %#"&=4632Ç&'
&ª4  Ü81©    "&4621##ˆ/!!/!  GÿÎGÀ    %"&5462#".5462G&4&'2'€&
'2'&&c44þ&
44     \ ±©      "&462#".5462'#"&4621##™#ç#ˆ/!!/!Ú/!!+!/!!   9 yU   *  $+".546;27+".546;2+"&46;2U€€€€€€€d7     ÿÎò    $#!"&463!2òþrŽ     ÿùò f -  %!5467676'&'67274>767>7¹$þ*$
+/23	@##
0	 ÿÎò ²   %2+"&=463¹'Ž'²A#UU#A ÿÎï ¤   +"&'26=.5453ïŽ/2r2 88    ÿÎ ò ²   72+"&=463¹Ž'²0UU#A    ÿÎ ï ¤   +"&'2>=.5453ïŽ ,r288      +  Õ N 
   74>32"&462"+Ž@+		  aÿß Ÿ ‰ 
  72"/&;‘‰   + • Õ   27#".5+p%!
!    8 Ç É Ý    72&4766'&'&4Á
_$	×

    k ¦ – µ   642k+¦   T+ ¬²   "&54632¬"P&<-    + Õ $    $462"6462"+†				    + $Õ ‡   $2'>n$UU‡	88    ­ò‡   "&#""=462ò(<C.C^CUU/CC  + •Õ   %#".526?Õ%!
*+ù!     ²É\   "  %2&4766'&'&4'"=4632Á
_$	Fä?3!1 ×

1+**+-((    k ¦– µ   $42k+¦ 9QÇ‡   &5462ÇGG*;)g		  #kÝº  # 7  "/0"1"&462062"&=&542#0"1"'&?<14O

	(T	

“


&		


   +ÿÀ G•   3#+•þ+     k dÀ   462"$$„##   â Îy   2!6'ò)+þðLKy(*XS     + 2 Ž2    7#"&46;2'#".546;2€GGGG2ã			  dÿë À   $!"=4;63232¹+þœ**V+>xP *989+    € 2 Õ ‡   6462"€##K##    Ž N ¹ y   6462"Ž[    âÿë •   %2!6'ò)+þðLK•' *WS  d Î¤    !"=4;63232¹+þœ**V+>x3*999+   € Õk   462"€##.$$   Ž2 ¹\ 
  462#"Ž
	>	
    UÿÀY Ü   "&'&676'454>;2òrc€	@>”6[:!    ò À   %".=462 À++     Ž ër¤   #".54>32r$"4/C2
4C    ò‡À   ".=4632 ‡   «ÿÜ ²     6462"462"4632"ä;ŠE;		     a v›    2&1.67>&7632Í
G!
N?'+(›(^.®G786    ÿÀL› @   6"&54'&##"'&5&'0&=6766767>76676767>58		#$3-8/I

Uc	499A	/1_	TN=
U9dµrlXL

UÍmBFL+
    Gä¤    462"G.A..A5A..A. ÿùÇ ¤ $ ' * - 0  %2#1#1#&5463&5463&54622517#35#351¤	999U2	

				*9    ÿÀÕÿù   3+ ÕÇ7       .À  9  7#'.>;2#2"&#'"&7>.'"'&63ªF))!:
/8		!%.
@	Dƒ\H#
":DbH+1=AL'	8bD:"
     &ù¤  '  7.>;2".7>.'b)-=/&Z,(%#%.&@{ZE$
":Db8}$EZ{@
8bD:"
     ANÀÀ  /  "&54&#"&>56;2#3#"&7>;2#"#H GG"N	"&(	

	(&"	   UÿÀ«k   4>;2#".'Uää9	þÇ

  € 2€2   %#"&=462;6=462Uªª2È		ÈÈ		È  ä  k   74;2+".5ä\G   dÿÎœ ù   %.546?U
N''6*!#ù#")N)%-G   ;òµ   "/&4?62Ò		Ò		Ò		Ò	®¤¤¤¤   ;óµ   "/&4?62ÒÒ		Ò		Ò	®¤¤¤¤  UÿÀ Ž \   7"&/5467r\V	V     G $ œ y   6462"G##=##    b @)   7".=&?6r
@9p		r9  Õ Ü+2   6462"Õ$$õ$$    € ¤€À   2#'.=463d\,\ÀGG   « ¤UÀ   3#'«ª?,?Àë11    Ç ¤9À   3#'Çr#,#Àþþ   ŽÿÀr ²   %"&5467&546;27 C^C H•5/CC/5		     «ÿÜU ‡   6462"«2F22FG22G2    ·ÿòI |   "/&?'&6;76232*""
"**"((((    ©BY¹   .67632'&#"¼$+-#.E    kÿÅŽ¡ *  #0'"/&7676767676'&'_/
$9-+,/ ,	–%6	3RA&c39'7
%'   ½ =B ð   767½.8M’9%Do     tÿÇ—¢ &  767#"'&/&'.54£, ,/+Z9#
—'$
8(57dR4	6     UÿÜ« ë    7!!"54>:UVþªÖV

ë¹99     rÿÀŽ    62!54¼ˆJþä     € Ü€À   2!54ËjKÿ ÀK5dd5    € Ü€²     ' / 7 ? G R Z b  462"6462"462"6462"&462"462"&462"6462"6462"4>32"&2462"&462"Ç:7;›T‚:~
	G›”,,#	  € N€ ê   7!"&5€ KjKê5KK5    G ¹ ù   $2"&=462326=4¥lšl	)I*A[ùLmmL*H*[A  +ÿÀÕÀ   #!"&5463!2Õ!þÈ!!8!!!Ž!!   òÿù‡   %"&5462r     € €y   % 3 ? K \ n  +"&46;2+"&54>;2+"&46;2+".546;2+"&46;2+"&46;2'+"&=4>;2+".=46;2Õ999999³999999£    q		³³	M	³³	E   œ ëd@   +"&=46;2dŽŽ      6Ø—         # ' + / 3 7 ; ? C G K O S W [ _  $4242"424242642$4242"4242426424242"424242642$4242"424242642vn4!•þžn4!•žn4!•þžn4!•‘ ..- .. ..- ..  Ñ 6å<      $42 42642 42Ñþììþì6ò     ;ÿûÅw      $462"$462"462"$462";(:((:þØ(:((:Ø(:((:þØ(:((:#:((:((:((:(:((:)):((:)  G ¹k    %  $462"$462"4632"$462#"G!0!!0þß!0!!0ß!!0þß!0!(0!!0!!0!!0!/"!!/""    Q 4 a      %6&7%&6'&6/6&7‘þÞ)åÙ(i((!    \ò$     3#%3#7!!œVVþrVVr ÿ $ÈÈÈÈÈ     òk    #3!535#5!5!òVVþVVärÿ $ÈGGÈGþñÈÈ  + $Õ\         # ' + / 3 7 ; ?  3#'3#'3#'3#'3#'3#'3#'3#3#'3#'3#'3#'3#'3#'3#'3#¹9999989Ž9999989\***************ä***************   € \«$    %53!53œþÕ\ÈÈÈÈ   ÿÁÿ¿    7"/6.'&4762n'4þâ4'""]3þâ4'"!   'ÿçÙ™    '  7"/6&'&47'7.67'7627M¬B-Þ¬‘¬\0:#	0:#‡¬ B-¹«-Bx««0	#:0	#u«-B   Z wÛ   %>76.76'&Z$6		Ø!5A     ½ÿÁ Ú ž   62"&=4Æ			žÁÁ    8 $L   &6
	
8    ö ¿…   #"/&'./>±;%	K  ½ÿß Ú Q    7557ÚQ  d     ÿöå Œ  '  7276'&6&'&'>5#"8;
m
3ˆ`!   ÿûÿå w d  %#"&54'.'&"#"&#"#"&#"&'47>37.6764&''.545&54>&'&163263232ò%L");3!	
&G	L!3	
"!.	%
+	
%BU	    ŸT   3267#".54˜?p'	T'   @ § °   7&'&6767676P	2,¨)+    × àd  *  74>32#"&'"'&#"43:26'46·
	ˆç
	#
!%2#  ½ ß Ú¼   2#".5154>Ì		¼ÁÁ   ½ í Ú£     5557Ú£  4  d    J (¶•   %#'#5'7#53'7537¶¥u
uu
u¥¥u
uu
uæu
t¥¥t
ut
t¥¥t
t  2 Í¬ 
   2#".54264&"«ªxxU8_7†fff¬x«x7_8Uþýfff      Íñ í 	   %#>;2#>;2ñ^
þ~]	Í	     > Âw    $+"&46;2$+"&46;2ÂþòW!!ò!!    ? OÁw    %#>;2%#>;2Á]
þÞ]O	ü  • tkJ    $"&462&"2>54,X??X?HG2(.(t>Y??Y‚2#''#   vÿÂŠ ã )  #"/#"'&7461>72616302302301„	jj	w*	èè	     VÿÀ©
   #  #"&46;23#"&46;24>32#"&·R		R		ÞSSÌ@$    Ðÿð/¿    $+"&46;2+"&46;2/(  h      Ñ  .¿    %#>;2#>;2.]] r    > Âw    6+"&46;2$+"&46;2<W!!ò!!     ? OÁw    7#>;2%#>;2œ](]Oü      žñ í    $+"&46;2+"&46;2ñþ“

Ö!!(!  ÿÀÐI 3 7 ; ?  %#3#3#3##5##5##5#535#535335#535335#5353335#5#75#Ð:::::::€€MMMM€DD€--:þª€€€€€Ó999>>>>>>9..9BB9hhÕ9999G99   ÿÀòb      3##3#'3#º88V9Ž99Ž99bþ^oþ‘Lu×’’   gQ¥   '.6B		
  ìz‘   6'.67Mj
	‹T	     w ˜{h 
   7"'&?67"'&?6d	d‰e	d˜OOpNN  :ÿÀòb      3#%3#73#3#äþVŽŽbþ^’’××oþ‘      	 S   %>32&#"5>24D"3$!:Er1+gA×*))'17IB4      # }   2&#"5>7>ÉD428Ag+%];3*+?0}
/))*/4B-=/,#".   ì^£   # / :  7/&?67/&?67/&?67/&?6"'&?6›-Y.}ó"G#Œ    ] Ï •   7'.6…	ø	
     õ Å1 	  '.76µ
     ` ‘ î    6'.67Áj
T	    é@ ~   '.6	i	
  d Ü €•   6"&=462xÜ	œœ    ÿÓ ä @ 	   463"&7'.#52E1
È
1E=G
		
G=   ! ù 
   72760#"'&'46Õ#8!/7Ž 	ùLH	w1%4	'  F ¿ ‘$   76'&54>7O	'	       ä$   #".547676€(<0&,$.56/';Y%=
$   Ž Î ¹ ù   6462"ŽÛ    : { À ¬   7"'&676 ,%{     bÿÇé¿ "  .7>'.'.'&7>2&¨ )sJ	$<?N"05w–8(

	18¨ƒ    U $Ç • 
  %4>32"&U!!/"\!/!!  r @« y   $4632"rQ < µ x    "&462 9Q::Q?Q99Q9  Fÿ¿íe    %/&?6''7&6?>Ó					‚		h		—'EF‚	¸		‚					‚	EE&–	     •²  #  "&46325'"&463273"&46329€#G#Ç#k9€HW»Ž     ÿëò‡ .  %3#5#+"&=##53346;.546326323Ç++"¹!VV!;)$7"$2"•U*!!9Ç9!-):."2#,			     « ÀÇk 
   "&4632462"9*;))!"/!!/$**;*!V/""/!     Õ Ü«@    462"462"ÕŒ     œ € ¤    73#&462"òŽŽV¤     2d ‡   %3#VV‡U  € ÀÇy     "&462#".54>2+2G22GÎ*!&!GG22G2r*!!  9 « Ü   %+"&=#5346;2«""UU"¤d!!8¸8!   + \ÕÀ   254."#54¨°}*.N^N.*À}X€1O--O1€€X      $  Ü    7+"&=46;2+"&=46;2U«@€€€   EÿÁŽ3  +  6#"&46325476"&46325467<***Í)+26Þ" .!ç!	 "¢    ÿÜ “  !  2#"'&7676'&.'&546.–Ô––jRB)	%$	.&	.“€¶)#A	
	
[ê
  d ù ¹N 
  462#"d##    òGk   462"ò##.$$  r ÀÇ   $462"r##Ù##  d @¹ • 
  $462#"d#Y#     ÿÀ ¿   %"&547450454621­SšÌšSu¤u;**O    Rb«™   "'&6676ùTF	F‰EUb
    Lÿø´ “   %"'&54/7­3ª/'QÆQ;!	I  +ÿÎÕ • 	  #!"&57!ÕþŽŽª     ˆÿÎ| ™     &'>76#*.'&76¹ 0	‡	
 2)I!?9
 U-1(
     5 \Ë • 
   ?3#"%"&547352	Œ
2g.	
	  r \Ž •    &  6462"6462"'462#".462#"«a»ã
m
     ¹ÿÎG¤    #6533#GŽVN2Vc,]¾d   ò‡hÁ   .=4LI	½	    + kÕk (  #".'#"&5#"&5##"&=4>7 B3-		:8:,4@k+=$$;+   r kŽj    1"&=67#"&=. ÿ'"~
=j O-99VSPT9
9a    ä kg   "&=6 gŒ99    ÿÁÿ¿ $ , 4 <  &#""/&4?32654'762264&"264&"264&"îT.';&ŒT-';ðJJ&.TŒ&;'.T&;TJJ    3 £€ 	   1 4  6"'&?6&"'&?6&"'&?67&6/'&'?'¢

9

9.

c

c/

d

dÑY		!	.

8
8&

d

d'

c
cñ*"		/    ÿÀþ ë   #!"&=463!2þ"þŽ""r"!!¹""     •þ ë   7!!äþëV      ‡þÀ    7!!'%äþÕþ+ëdÄuat      ‡á«   
     7373#%3#%7'7'799c9c c9cþ½O7ùaO`aOaëdddddÄS=S"R    z9À   ".54>2>9%?I?%)&-,')#VS99SV#		     # »   -  276"'&76'"'&7676'&3"'.&76N1E' "%	 !"É"A	
# 5%/ 

   ÇÿÀ    %#".54>2> $5%?%)&--&)ÅCG:&9SV#		  à 	ç Â  ! 4  %&"767632"'"'&7>76'&3"'.'&&76¤&5%#
¹ !Û!!

)z
	
   ÿôþ í 
   7#"&5467%#"/¸‘Ê
‘íq	e--?40	    ù jê\   6462"ùFdGGd±dGGdG   … Ý³
   $462"…ê   L ´ Ì4    #  '54;27+"572+'7##"=43Ÿ%K4SJ   j\   6462"GdGGd±dGGdG    Ž lq\   3#Žãã\ð  s - ¼   6462"s);**;W;**;*    þ -Œ ¼   6462"þ*;));W;**;*     Jp Ÿ 
   $4632"&4632"#¥	$c##    W…8    462"W W ¯… Ü 
  %4>32"&W	Æ
  ) ÝW
 
  $462#")	ê	
    @  À€   6462"@p pp p pp p    úÿÌ¾ ¼   %'»;!T¼§'î   ð ²  Ü 	  $"'&?6




²



 PÁ 
   >&"/76VdM"

i),],)i%)d    ¾Ø”   '&6?>Ò¥»	€º
¦    @ò@   /  7+"&=46;2+"&=46;2+"&=46;2œ99«88«99kªªªªª      yò     3#73#73#ŽŽ«ŽŽ«ŽŽŽŽŽŽŽ    - †Ò ÷  % :  %#"4;2#".47'#"4;2#"&547'#"4;2#"&547¶(9'„(9'ƒ(8'áOJOJO  +Õ@ 	    3"&5473#"&5473"&54,S#«T¬S#@

  + @Õ \     7#&54632#&5462#&5462}P¨P$¨P#@	
				   Ã h>     &  747&54632#"&732>54#"6324#Ã #'¡ 
Q&&  9ÿÊ õ$    !  1&/&=26."26."9¹¥«„
c$²®
‰~   ÿÊÇ$   ' / 3  656=676&#"276.#"2>&"27015¿‹?			E	
+

(	¯m³phI‡  9ÿÄÇ¿  +  01"'&=&/&5056?62"264&¿¬«ª"3		Š³²‰
	ˆt  Þ ¶E 
  " *  4632"2"&7>2#"&62"&6Þ"­	

	0			
 				-G;     Q  Ø À    62".2#".\
Z
ÀX	    Ç rÀ "  #.54>54&5467>;29U
	
2(/!pp!/(2

2  å ùTN    4'3#673 FoI29    UÿÜ • !  #.54>54&5467>;2ÇU

).H=p!.)2

2  s Îâ$    4'3#673ŽFoI9		      ÿÀe%   <62"i”hh”)”hh”i     <  Ù Ö     6462"462"462#"—n3		§R		     9 2ÇÀ 
  %!463!2Çþr!2U!  9ÿÀÇ v   "&=>#r!"xyb!@!9)!9!    m £Ez 
  64632"m@,1?YâY?1,?      ÿÎ ¾   6"&46325"&4632467ç
:S::)ÿ :S::*½þš#22F2»þú$22G2
       ¿  +  6#"&46325476#"&4632547Ê<)**…;)))¾6Ý !. â&6Ý !. â  €ÿÃU0   6#"&54>32547J<)*!/6Ý!â   ÿÀä{ /  732>?4>&#".5476./ÇGÇ	Ö4+
ÜŽ

þ«%#9	      ¤ Õ   7"&462k+@@U@ $¤9  ò ²€\     6462"6462"6462"òÂII   ¨2{   "/.>ä
2
     } C ç ¡   ?}X‹H   ÿÿÿ½P <  %6&'.7261065>7676756767626
#$e%(#/':
œ/#	&'j$
    Õ •Í   ?ÕÚÚ³ÚÚ    CÿÒ@ í &  7&'&767>16632&76Ž$
)
#
"

$(	
-.   z :  À    ?7º2r3¬22  i )³s    7i6þÊ6þÊ=6þË5þÊ  Oÿñ Í U     7/&64632#""4Œ


>-



5	    u4þ½   /&?6ó>
!

+
+ >

 s1ö“       42<2<2&42Àƒ18 “‘¤    42“    ‹¤¶    42‹¤      ÿÀ À   ".54>3!2#	È@È	þ8	   ÿÜäy   ! +  3+".53+"&5'!3+".5'3+"&5dH€V9ÿ dHrV9ŽþrþrŽþrŽþr  U k«•   +  %+".'53+"&5'3+"&5'3«8V€8V€8Vyþäþä  *ÿêò²   '>.762&P&"	s
$<&", s	  ÿÃ W    '/&76'62N			
,

		
"		

,
				  mÿá©    "&4?626"2?64ßC/˜C˜k˜˜/C˜*)˜ì˜˜   |ÿð–
   #  %'&462"'&462"'&462"hrrArrArrjrr1rr1rr   U ‡ 2     6&?6&?6&?6Ú	

B	

B	

ù	

B	

B	

    ÿÊ}9 <  &'&#"#"'&'&767267>3276'&'&46767632T$0)	%		$)6-		*%2$     ä ¤ä¤   '7äÖ*ñ•ñ*Ö  z @ Í  	  6"/&6¿+

+

@+

+

   B ®m    7BXþ¨Xþ¨Wþ©Wþ© ŠKù¹   /&?6î.-š-.  ÿÜ € @   729GG9  €@ À       462"6462"&462"6462"Ç		l	H%	3		%     ÿë •   !!!!!!!!!! þU«þU«þU«þU«þ  yGGGGª  ÕÿÀ» [ d y ›  %#"'&'676767276767654'&'&''.'&'67676767&'46767623265&'&'&/654'&'&#"67>67'+.54767'Œ	
		

	

		(B		œ		


								#!-*%W	À	
		˜	N	
     Z¦±   67!Z)GM_(þ´±"œ   ÿÀñ¼ "  "&'>54&'46763267>ñ"„š„"$b+,c
%k2:25ž42:2(7VY7
(     %ÿëêb   76<®
þjT$%û      d    $467&%&47r0"<<"þì$<<"0ƒzXGºG•)F+
GºGX  < Äz     &7%67&'>54.€$ LL þ˜L*" $ €V++
+K[
V@+C-     ÿÀ  ê   %#!"&/56 þräêñb     ¡ K’ $  7"'&'&54767&'&76761µ,,
X
	2
",3)K%I-
	<	S'9     — ;§ ½ 
   7"'&?67"'&?6§g
f©D	D;++H  ÿþö Å   "#&'&6767676P&¼|)&»	O35N    ì ¯‡‰   %0#"'&'.7>745~1			2
ð+&R'  Ü †B& 
     7"'&?6"'&?6""/&6í#

$**
ñ
+
@
    >¿¼ 
     "'&?6"'&?6"'&?6OPP 
0
0q
--49   ÿÀ À ,  %#&'##5#&'>7#53.'67353367 €$HVVH$€€$HVVHÎ;N)ƒòòƒ)
N;;N
)ƒòòƒ)
	(>'    +ÿÀ d²   "&5462S@¹þG  +ÿÕ d²   2#""54;²þ[¹     U \Õ¤   '&#'#'#767263?Í$M
<"VV:A*”	þò
	
    U \Õ¤   # , 5 ;  "&/5463:#52>?"5632323&=3#&763*#"752&¹1 &d9*i1

=#þÞ	);%Ÿ$@!?d.'(‡cUUddeþÈ	Udpcpdd   S Û•   62&&'&'&6\	

		      ÿÀ  Ü   %#!"&/5> þr
$ps£Üã707    •r ²Ž   462"•			z   ²d ëœ   4>32"&²
€
     Àr ÜŽ   462"Àz   Ô &w |  ! 6 H  7&>0"&"&>&"&7&>7>21&&>7>2&Ö	p2@		     >ÿÐØ Â   %&/&67%6Ó	
þ°	
P–›š     ¶  ’    7>'.5&7>'.'&À%

"€$V	=     £ Gc ù '  %'.5./&767.5'&>`
")GŒ	('
-     M ·fN '  #"'&'"#"'&='&67>;2[	r%[	6+K	%
#6	   K ™Á¹  *  #"#"'&76;2>7>32>76'&À1!@*+"5þ«	"	

‰#ñ	    ”N²   "&542"/!r‡""+   Œ\À   "'&7632#"54.« 6	
‡- +  ‡d Àœ   462"‡t   ŠÿÝ¨   &  7&/&6763'#.'&'7À §%l	
	61&g
:"
     ¢ÿî— "    %'4767#76&'&í
	%     ¼ –.L   .#'&'&7676	
$)5$@
   X ¼.    '.#&'&7>3267676õ	7 #'
     rÿÇ² = * T  %&'4.'4/&'0'4547654.47676323"&#'&5&7>7>76727127272>²ã		:	
b
    ±ÿÖ² = 
   %&'&'23"67670®	ÿ 
d
   tÿÀ¾ < 
    = H S ^ ~  %"'&?60"'&?6""5&376#0767676'4&5474?42"/&6"/&6""/&6"'./32767267676;21“$
þå		:	

		7

		S    · V ¨   7672'&'4º+$    ó S: ©   7&?2'"þ4!W/
	   Ï ¥D3 !  6&'&5&616'.#'&Ó+ :
   Ž øº   &76'&'&6ë*b 	.%     ‹\X¾ 1  27#"''&7>'&&'&'.>766768	

™

		     ‡ÿà£;  ' K  7&'5&6767'#.'&'73'>'&>56'.4."#'&×!•%k	
	8n
:	^'f
M"ã		9  žÿñ“ $    %'&36772&'&‹í	#     kÿÈ° ¬ ( T c  %#"'4.5.'&'4'&527674.7676323*.#5&5&7>7067670716323>'672'&'4°â,$>	
e
´4"   ®ÿ×° A    %&'&'23067670"¬
ÿ M     mÿÁ½ @ 
   ; F Q \ z  %"'&?6"'4?60"5&?6#767676'4&5&74?42"/&6"/&6"/&6/32727>767636"
	þâ
	>


	
	9


	
S	   î Q< ª   7&76376'"ù7&V0'     Œ" ó»   &76'&'&6ç'g
,#   a ûÍ "  61#*.'464'&+'&'&—-"		¯
(
   ¾ ™3X   "&/.>76-18`.!  Z Å:    '.'&'&5>3667676ñ%
.6     ‡ÿà£´  - Q ]  7"0&'5&67673'#.'&'73'>'&>56'.4."#'&'&'&6×	!–k8{
:	%%^ f
O	"
å		9ž!	#   Z Å9 #  '.'&'&5>3622674>76ñ%
	.6  kÿÈ° A ( T  %#"'4.5.'&'4'&527674.7676323*.#5&5&7>7067670716323>°â>	
e
    ± T ¬   7672'&'4´,$’4"     ¨$ ö "  '&'454/.#".6.67>ê
		p
     ‚Z ú½   #4.'.'.'&67>å6²
)
	     Á ™3Z   "&/4&'&76-$1LD2    ÿÀ y   #!"&/5> þrPNi[\yþ€G1>b  5ÿÜù ›   %6.>7>Å-Hj'9l=	%Y9&xY	u	-5*6
     %ÿæô ¡   %6.>7>À.Jm(:o>	&\;'P		|	-4
*5     %ÿîò œ   %60&'&7%À.þP¬	|	ˆ	†  š¹  !  '"./&'3'&7>‹	3
!
3µ0)	ž$,    ^’  : M a  '&764&+.>&6362'&>7>7>3>76'.'&765372&'&<546'7â
N!
3h
	sn	

	. 	&þõ	+    Œ^ õÆ   +&'.'&7636ë

.© 
	  œ >I²  [  >32"&'.'4.'5&'&'&'#4'.4>=4.76'>'6?0>4=3æ	"		 ]
	" 
	þæ*)" 	$!     œ >3N   1 T  &'6?0>4=3#"./#4.'5'"#4'&6?4.76'676?#°
nr!9FÆ	

."	*
)"*	      Òš¹   "  7'&>7>%/&7>(F	“0)ê/ª$,    ¦ ^’  / B  '&764&+.>&6362'.'&6'4'772'.'&45&'7â
	 s
n	

	þµ
	+
  ( <qÆ  r  +".7>'&#/&'&?6#/.'7&'&'&'#&'&6?4'5'#'67>76?73ë
		.›'3"
	,&$(© 


	
®	!L6	   ( apN  ' 6  '67>76?73&#'&/&'2&.'7g0	,&	"·%'	6		&œ
  ž < ! )  7#&'&6?4'5'63>?»
iL9     ž ;7  # 2  7'.674'5&/636?7.'7Ä
	"	
{

<#	'!!
  ”U ï±   &7>Ô­"'	   ª+ ê   3&764&'#".7>463:ân	
     –^ ÷»   6'.'.5&66î	
			
)¥#			       šN  4 K i  7'.'&>56&7672'.'&76&7>7'"./&'3''&>7>7>3>76ç	#v
B	3
!
3ê!
3,	H	
*&$	·	5 	&  \ <IN N  %.'7&'&'&'#4'&6?4'54/&'676?32>753'H

		&$1"¬! 	0"6	     \N   &'>?>?3&#'&/f 	#"		    æv@²   >32"&'.'æ	"		  
	  œ >IN F  %4.'5&'&'&'#4'.4>=4.76'>'6?0>4=3D
	"„*)" 	$!     ‹^ õÆ   +".7>'&#/&'&?6ë
		.© 


	
  ( <qN R  #/.'7&'&'&'#&'&6?4'5'#'67>76?73m'3"
	,&$(	!L6	       ÎkÀ   '3 k¤ÇœN<Dò     æ À   3'dœ¢MÀÅh    iÿÀ™   %"&5467&546;2K#Y~Y*$_Ü(3?YY?*F   ÿæs É   6462"C^CC^)^BB^C    © 
W °   $"/&?'&6;762322))(22(1001   ÿüÿù¤ " H c  ";265+"&/&6;24&#!#"#"546;2+".4=;26?61#>5464>I9c"rU
q!f9­
	¯
y&[
*
*†h&ò1 
2"
     e `ž½   ".546326;2ž4K:K5	Zc"b.|XX|.5%!    €ÿÎ€    +".=46;2€äÆ	

  dÿÀÿë   #!"&=463!2œþî	,

   Ž ü‘   0'476'.75&'˜
%
/%#	-
*   L ~ ­  3  %"'467>36'.7&'&67>?T*)>ª(	

¬		#
%	
	,
   N ƒ $ (  &".'&"&7623"&'´	#	
B?


¸lg    É?   "'&7672#*"!NU"#2#    ¥^¯   '&'"1&'&'&>767


r
	
	  ¡‘ ä»   >0'6.0.'&'&©
¬
     œ âÁ   0'&57'6761»	—   ö Ï0   %56?&'&'7(+
ö
	
  óeŽ   &'.67&5.76 #	

	  ØPZ   .'&76&øC/	[	
   Ç"†   /5776'&676 ÿ.w'
   °& ÎT   .76ÎC   Tÿú     %6'&47'"&= ÿ	   ó Î
 ø   %.1&5.>36ä ÿþÿÚß„ d  60'67>7'&''237&'.'&767&7&'./#&7>7>7&'&'3632>ƒ,/ )"6FJ&	
	
		'",!$37
*:
,!+
		
#	   ÐÿÀZ . 
   2'&47'6'#>l
 S   Í ¼q!   '.>5e 2    à éV   76'".7â!9&	
    Xo    ./67>724"WoF    7I AS   427
I

   _o      2"&424"'773#8.[

I^F  ÿÇù¹ 	    67''6&7 qÅP'e5ÅÏœGþ‚œG ÅqP'2	Å
8Gœþ,8Gœ   ÿÈø¸ 7 = C  '&676////&?'&67'&67'&647#'6E









#


0



#









#


0



þæÅ¸œÅ









#



0


#









#



0


’ÅðœÅ  ÿ÷ÿ·ÿÉ   %'&>‹NÖ=31›Ö=)>5M13=Ö›134‚u    •ÿ×H   '.7>û?>>V49jM?#HC‘?=EKQA     1 -Þ±   &'&>7>0Ú.@EJ<(:31]F0‘)P?:+$'Sj))0
	      H ¦ I  %$#".5.7>7>?.'5&&'".7>327>232 $þì"
#	'&&!		
Q+
GG%
AžUG-6!	))&			L9!   5 V      7&'.7>.4'./767t	'&*A­/r
×AG-"•%
H     h Ž Î Õ    6"'&7632#""'&7632#"®;¹-   ÿÀ  k   5!! þ k«  U NP ¡   7676767676#"&'UI6		
|%#k0	
	
   H ¦ I  %$#".5.7>7>?.'5&&'".7>327>232 $þì"
#	'&&!		
Q+
GG%
?žUG-6!	))&			E2.   5 f æ   7&'.7>.t	'&*A×AG-"      H ¦ F  %$#".5.7>6?./&&'".7>327>2 $þì"
#	'&&!		L+
GG$
		1žUG-65:N	 '	    X  À   %76#6'>7+4‚éÀF	   ¹ ÊJŠ   2"&'546326'*;*Š'6**H   SÿÐª‹ 	  7 \  #.7.?&'.'&'.5.564>:1.7>7>7>Ü
$B$	º	

#
	0+!,(µ
		


		
    à0 ;    426"4à50  |‹’œ     &?4&'"#7	Ž šœ    &?6— —Ž¡›    &?6ŸŽ  T|¨™     &756/>732¦þÔ	Ž   j‹ œ    /&6&6#&#/t     c mœ   /&6m‘   \Ž e›   /46e    UŽ ^™   /46^     º C y   %#./##46?6'	&9d0	
%%  šÿÀb  # C  656762#"'&7#"'&765>2#1'&'0&'&'>?3767¿‚)
69
	*
4%!8     Ç d6 €   73#Çoo€   Î b           %3#&42&"442"42"42"42"42				
     ò p ÷ u   642òp   æ p ê t   642æp   é p î t   642ép   è p ë t   73#èt   ã _ î …   7#53#3î_&    ‡ •    #!"43! þò•   \òÀ  0  2#"&5"&=46246 2"&5"&=4624ä		þU				ÀG			GG				G   ê Ü   3"&5ê,,		    À@   2#"'.54>36"
		"

  Ë û©‘    "&=7&763&5,¶	p@@	     ÈE8‡ 
  ".'#5 8!‡,',  ë&    #"&'573#"&5	

   VÿÐª‹ 	  3 V  #.7.?'&'.'.5.564>:1'.7>7>á	):)·			$				0+!,(µ

	'

'	
     žÿÀb  # C  674762#"'&7#"'&767>2'&'&'&'>?36767Â)99
	
,	
4%
2
    W|¨™     &756/>732¦þØ	Ž   n‹ „œ    5'46&6#&#/x	    f pœ   /&6p‘   _Ž i›   5'&6i    XŽ a™   '5&6a     ¹ G y   %#./##>?9-	-9d.	
%%	    Ç d9 €   73#Çrr€   ã _ î …   7#53#3î_&   VÿÐª‹ 	  0 P  #.7.?'&'&'.'.564>:1&7>7>7>â	(8(µ'	$
'	0+!,(µ

	'

'	
    žÿÀb  # E  654762#"'&7#"'&767462'&'.'&'>?3676Äz
77	
,	
4:
 5
  ¼ D y   %#./##>?7++7d.	
%%	    É d7 €   73#Énn€   ¾E   #*&'&'4.7>3>.;!‰+I     ï Ý   3"&5ï"

"

    Ì ú4h   "&54767>?65#&'.+	
M			     é&    #"&/7#"4;2    ã4E    "=42"=42ï.4  z{©‘   &763.	‚	   W|¨™     &756/>732¦þØ
	Ž   à0 ;    426"4à50   ã4E    "=42"=42ï.4   íÿçO Ä   '&'&'&6L.;o3-    æ XA ´   %'&".6''	´	0#	#     ’R©  '  6'.'60'.741&54>32
m!+	 Ur¸ 
  46#"&)'”-.    N- a   <6727'.5N	
P
			    ¹ Õ±•   #"&767'&7620¥
ÓÞ v{  ·
I   7&'6Í!
I
    ¶ÿØ Ú   %'.57076	$	'¿*@	( ‡     ­ X+ Ð   7>"&'Æ(¸ 	   ‡ ¼³   /&76¼&'	    ‡ÿÀY  	   #&7>76+<672>ëd:f	
/
 
%     <”   5.'&>"AB"A1&
-    Ci©   #".4>2iv  üsBÂ 
  .76(v  Å  TL   74&>76&ÆA21¸% #	0     êÿáV ´   %'.'&'*$
&´T6

7  „Ž ´³   '&>¬%&Ž  ¹ £SL   7>76'&¹A	1>½ C)    ’R©  %  6'.'630'.7&54>32S+
m+	 Uq¸   46#"&*
(”-. ÿÀX    %6+0&>7246F		/
%    ¹ Õ¯•   #"&767'&760¥
ÔÞv{   †ÿÀ ñÿè 	  #&7>ëd: 
   ªÿØR ¿ \ d l t  %&''&'&'067&'&'63&'1&'0721&'1'&'.5?27"63"2701"63'67&567&'67&'B	
		
	
	q;
	
%@<	Œ	E8    ªÿú! ˜   ! +  %#"'77#"'677"#"#"'454577#"'&	$%75/ " 5
:	
1     ²ÿÙ Ø ¶   7"'&'4>Ê
		¶
sIF	w    ÊÿÙ" º  .  71#&'4567676767673>76í		(º&GG#
 Ci©   ".5462i*v     üsAÂ 
  .76(v  ê E* ´   %'&'*´:	]     µ =" º   -  7&'67"'67676767673>76Ê8'¶#QW	
  Â  QL   7<676&ÂA	55·"G
  *R}   6'.'6m  Aiž   &'&765&.762i		p
	
	   ’ ÿ©   30'.7&54>32Â+
L+	    ö S* t   7'67øS    ö F% ³    %&'7&'7
JTO+:&7   « :0 ¿   %&7>?%<h

6   ­ÿÀX ˜ 
  $  %#"'4677#"'6776+0&>7246	$!42/ #X		/
	:
R%     ’R©  '  6'.'630'.741&54>32S+
m+	   ÿÎò k    %  72"&54>264&"$2"&4264&"\.A.$))XA..A.:))k .. $€))c.A..AR))   ÿÁ  z      62"&4264&"$2"&4264&"6M66M6B5%%5&aM66M6B5&&5%z6M66Mf%5&&5w6M66Mf%5&&5    z  M   %7zƒ„55   Å vä Î    %76&'&>7"#"'43P	7$Þ

¾
   5 ‘ ¡   74?32'.5.	#Ï'!!#  @ ß ˆ* 	  '"7>7z	
*%  v ½ ¦ ü   7'#&?6–É      ä º    &?µ 
	   '  Â ‡   76&'632&76d( $8
+

?!*!
   « 2   $+"&46;2«	€		€)			  = µ ”   $/&6µP		Pdd   Q  ½ ¦   6&?¥EE¦ll    p   Ü 0  7632632>>7>#".>54'.>–#5>	
!dHÉ

2	%0
	     ò + @   %"&54>32+$   o  g   %7o„„25'5  t ý Z   %7t„ƒ%55  « yò Î   %73«+yUU   ÿÿÿÜ  ë   %:#!"&?6?32œþ	"VV€


²ª	Ž
G

    ä \  ‡ 	  %#"&=463 ‡+	    œÿÜŽ ¤   73#å©G«¤È  9ÿÎÕ @    462"$462"9!/""/
!/!!//!!/""/!!/"     Uÿë¹ $ 
   7462#".462"U+     ä G y   6462"ä))2**    þ "/ k $  %#"&4323254&54654#"#"54>32+
	

Y
			   « À  Ü   %?«GÀ    « ¤d Ü   73#òr¹Ü8    \ U y   6+"&46;2U		q		    fÿÀÿZ   %/67>?ù3,	
þë%&
E-3'$      Æ ú¼   &/&462¾,M~

4M,~

     4 Œ²   72L2€2L2   ÇÿÀU N   462"Ç*;));;));*    ÿÀ N   "&=462@rr    ÿÀÀ c  &#6'056'#67&'&'67#"'&5477&'&'&'6767632>7&670136Ó	
4#LK K>LK!+7pQ W¨
®b.Ed;D

(k"7./',.6.(+0+)(452Q]„+!¸t•©ª˜/p))T#&h'&*.Gp4	%A),D(
#?(
D!  ÿë À   72132>7#"&5469
$+À@#(<•+'+dÎ@	6-&!    ÿÀÕ y   462"7L66L
M66M6  9 ‰ À    %5757dœRu¶nœdW|po ÿø _ • $  '.7>:37>7> 8	
 3C™!

‘5)&•G
F=!	&!     dÿÜ¹ Þ    75037673#".5d‘5
0+^hÇ:*.bja29  ò ¹ N   6462"ò:S::S&   ÿúÿÀî´ :  .'."&3'.76I*

	)%

	7			
]J;57§k*d,



L		J;§75   ÝÿÀî Ò 4  ?.'."&3Ýœ

	)%

	7			
7›



L		   ÿÏß Ž   %7 «z«  Ž2ò•    462"Ž**O))   ÿÀ 	  6767>?þñ,.%9Ù	
#(    ÿÎÇ 	  %?6?ÇþF!NLy2DCA;˜  .  Ÿ ç   ?.N	!!C#/.     rÿÜ…5    #?7'7«9"&.3	3'$7-i2?JàûA$

l5   õ n   
  %''7'7V3W×	J²A!    ‘ : ö     %'76?:|
%#&ƒ5#1-#2     ÿÀ    '7/ Ž
.!J 	@]5&!"IG:	 I2",      ÿÀ     2!>326323262326ß	þ 
:':
6@    ´0!    7''´L!(	D\h      %ô      ''//J!Ž‰Eh™K()ÿ #.
      ÿÀ  Z   62#!"&54>Åv^6$þr!$6Z
"
    K š œ   %"57463:32šO
	0X	
   4p±¸   ''&7>2¤
ƒ	   €ÿëœ Î   "/&76;2#×
G§	U	ÈÈ    *ÿë õ Ï   "&?62#:UUÇ		Ç   sÿë ¬ ¬   7#9¬Á    Pÿë Ïÿú    #'#É#V#  Lÿë Ó ¬  	  '&'7¬C@CÁ¯	¯     ) å›   2+"&4632>326322Â~

p

  á 7   %'."&7>2ðF+G
3"!3¨

K--K    ÿ —ñ5   %'&''&767>32Û!,%0	#	,¿

"	-!%>    þ ÁñT   %'&''&767>2Û",&1,,æ		 :"":    é×\   '&''&547>2Ä #'#"
..    ×y   /'&547>2Ä #
'#"$
--   #&Äƒ   '&''&?>2´ 
>%% #<Ä™   '&''&767>2´ 
T%%  4a±©   ''&7>2¤
t
	    ÿÁ  Z   462"–Ô––Ô?--?-     Q á T   %#".54>32á]RKX2Y7Uy*

     d Õ u   64>32#".d=(#=*#'O:1D")

		      'o¿   %.7>%H7r  s Ê¸    '"./%.?6	£_	þÖ
¸$s@A
@    £ ÖÛ³    './.756{C

ƒ#	³n@@   ÷ ð‰«   /./>Z#
	
(¦b@+B$    à (@ B   7>7>3#&á
	-,3   „  ’K   +"=4;2’G££    u u  ¼    $462"462".u	ž		  ÿÀç¼ ( + / 2 5 9 < ? G J O R Z ^ b f j n r z  2#!3!53#".=47571670563230309#7'7''7'?'/3546;57/73'325#35#35#35#35#35#754+32Ùþë4þó5Oû1444h!?"-(()/b4/e
GG
Œ'/½ç<GGHGGK	þÊ6oq9m"(!!L7þ¿/k:&&:`D9     „  ¼Y 
  3#"&=463®*Y9     ¼Y   3# Y9 & 9ð y   %#3#535#53ðÊÊk##   Hÿ Î 	   7!!".546%2+5 ÿ ä²]q	      ]î‰  	  7#'#5JRR¤´vì7RRi§v¢¢   ©‘   $"'&?1

\\©

]]    z £éo   $"/&?6Ú˜—¢
¢©——
£

£

 ÿü Üþ™     "/&?6"/&?6ò	IJRRÕzz„
…

+IIRRMzz
…

…
  x ]³     3#%3#…..þó;; R…     = zÖ        3#73#3#3#3#b]þ~---- --  œÿãÇH   !51–þÕH–ÏÏ     €ÿÎäÿë   2#!".5463Õ		þ¹		   +ÿë9 ²   %3#+²Ç  Çÿë  @   73#Ç99@U   Ç œ ¤     73#73#3#Ç998888¤999+9  a ö Œa   #57'54;2„+		OS=   Gÿë¹•   %#3#3!535#577¹þŽ¹D"U•@N€c¹D5U    Žÿùy Î     73#53#3#Ž9999²99NUÕ9G9  $ÿÎÜÿù   #!"&463!2Ü	þr		Ž	     3 ÈÍ©    %"/7''&?6Ã

W+C¯

¹

æ

X+&C¯
¸

    { ˆ`      7'7777'7[b'5ÂOOR
RýOO,G]mj(i†**     |  Ú @   7'7ÑU	U''    d $œ$   !!d8þÈ$ÿ    9 Ç@    2 D  7+"&546;2+"&546;2+"&546;2+".546;2rU	ãq$ ÿ  ÿ  ÿ      +ÿùÕN  %  $#!"&463!2#5##5##5##5&5463!2ÕþŽr9998999p!     ÿÜòÀ    $#!"&463!246?!òþVªþ;ÔÖþ83dd     ÿÎ ÿù   #!"&463!2 þ*		Ö     T@«œ 
  #!"&67 ”

þ¾œD   2äN   #!"&463!2ä	þV		ª@    % " À   %#4767>3232"ý
"@}h1-%9  . ¼¤ 
  462#"..*;))!\**;*!   <$ ®• 
  462#"<"/!E/!!    U 9 Ë ©  $ 2  7>'7.>76&7&765.	/	\	

		    $ " ^   %&'"'&&547>2"!
?#@7= 3    ÈÿêäS 0  25462>=4632&="&'&=4>ë

"-#	
	&99%


R–  »

.

?
+P
c
   À òA         # ' + / 3 7  $42&4264242&42642&4242642&42642&42642&42Å6-þû-HZ?Q$Q?u;?6H-Õ36$?7  ¹ 7 ó ?   7&'7&Ò	
7     Q á T   %#".54632á]RKXnT)M7!*

     «®   462"*;**;J;));*   +. œ    462"+!/!!/P/!!/"  + V€e :  %0"'&547676767676'45414'4'&'&/7		%ò
	

					
 4 u€P   . = I  %7#"'&'6777#"'&'677#"'6'<1367'#*#4'7677&'6767Z


		


	



-	
	/2  ¸ZìÀ (   #.#&'&&7>67>ê' #1
#	(˜	#		'
	  Ê ¯ò   '.'&'"'.6766»	& '&'
/D/s
##(".9""+=    \ À   -4>73!2 þ Ž\)    ò k y 	  >7>3!7€BþòG2þòÇ     € UŽJ   &/>76U& !."X$2.1K?9	
   ÿÀ  y   ".=!#9 @€€  rÿÀ« y   %3#4>54.4>Žd&ò?J>GGy			$
	  Ž y¹2 	  %546?3ŽyG,9UU  k  ¤ y   7"57463232¤9+?    7 ö S  7'."&7676767.767&767.767&7461&767&7&7>322ç5!5
		
		S
		
	
	
	
   @ ÇŸ   2+"&4632&54632>326¡

m

	Œ

	
   ÿÏþ Í   %'&/&/.=þ "2…3"É§

¨    #ÿÌÞv  $ 3 A N V  %#"'&5&65&/=4=%'4765%45&/432476'5 2"=E" !"$?%ª ÿþ¬uþh	$!,"#RKVR	L\
[	LC°°   += ol   "&>5.$#l		  £ ¸·–     2"=62"=2"=£…€–°°°°°°    «=ôŒ 
   "&7"&7®$#$"Œ		   0]tŒ 
  "&73$"Œ	   tþ  
  $'.546þ”jEuE”ÓëF1(#0  & qÙ   $.6Ù´´Ý@,.@,     2 nÐ   %.547'767'763277}OqPR3###$#E¬

	8/JLML
A   ‰ vx » 
  $#.546xF1 8 Fc¥		   a ï Œa   7#"=4;2…ïdd   Gÿë¹•   ?!G¹¹þŽÜ¹¹ñ  ÿù Ü   %3# Üã  3 ÈÍ©   $"/&?6¿¯¯

¹

¹

Î¯¯

¹

¹

  ì ÎqM 	  $"'&?6

\
\Î

]

]  Žÿù Ç N   73#Ž99NU   Ž y Î     73#73#3#Ž99²9999Î999G9   ÿÎ ÿù   #!"&463!2 þ*Ö     Œ ï ·a   7#"=4;2°ïdd   aÿøþ N 	   7"54632"5462—6g6
)))  :ÿù U k   #62Ur    N Žy 	  7"54>2ŽŽ"!¶hh$`??`   rÿùä•   ?!r¹¹þŽÜ¹¹ã +ÿù9 Ü   %3#+Üã  ^ Èø©   $"/&?6é¯¯

¹

¹

Î¯¯

¹

¹

  Î›M 	  $"'&?61

\

\Î

]

]  ¹ÿù ò N   73#¹99NU   ¹ ¤ Î     73#73#3#¹99²9999Î999G9   ëä@    +"&=46;2+"&=46;2äUUþÇUU      ÿÀ $   #!"&5463!2 þ8È$+   ¹ÿÀG•   3#3547546;29Ž@þ€€   Ç@9\     3#73#'3#ÇU*\    Õ $+ ë    73#73#Õ9ëÇÇÇ   	 ÿùä Î         #  %3#73#73#%3#73#73#3#73#73#U99þU99r99Îªªªªªªªªªªª     Õÿù+     73#73#Õ9   Uÿùä      %3#73#73#U99    ÿÀäÿë          3#73#73#73#73#73#73#73#99G9G99+++++++++++++++   ÿÀ  À 	  5!#!"&5 þ8Àä      À À    5%%7  þrŽŽÀZZ¹GG   ä ¤    7!!!!Èþ8Èþ8¤99     UÿÎ« ²   7!!UVþª²ä     rÿÀŽy   !!rþäyþG   Ž r ¤    73#3#Žääää¤99     Ç 9    3#3#ÇUÿ  ÿ     äÿÀÿù   3#ä889   ¹ ÎG\    3#3##5#¹ŽŽŽ99\99    œ \d2   3#œÈÈ2Ö  ÿÀò À 	  7!#!"&5äþVÀä    Îò ù   7!!äþù+      Àò Ü   7!!äþÜ     ÕÿÀ+ @   62#54î$V@UU  GÿÜ¹ @    $2#54$2#54}#Uþü#U@9999     ùòÀ     462"2!463%2#463Ç!0!!0íþÈp/!!/"99   ÇN9‡   3#Çrr‡9   SC ¬ $ 4  $6##0#"&4626'&"2?'&"1&?61	!%%
				j	"%
					
     ÿÀ À    +"&=46;2!#!"&5Urrþ« þ82r«þã      ù   2!463 þä  r ù 2    2!46372!4>3äþärþä     ÿùä Ü     7!!5!!!!Èþ8Èþ8Èþ8‡9Ž8r9     rÿÀŽ   !!rþäþ«   Ž r ù     73#53#3#Žääääää¤9Ž9r9   ¹ÿÀGÿù   3#¹ŽŽ9   Ç@9²   ##5#53539+++‡++++      ÿÜ À    7!!!%+ªþVÕþ  Üÿ Hœ   ÿÀ ÿÜ   !2!46Èþ $   Õÿù+ y 
  %2#54> VyUU	     ÿùäž       73#73#%3#'3#!5+99U9999U99Gäþ8•œœœœœœœ¥‰99     ÿÜäÿù   !!Èþ8     + •Õ ²      73#73#73#73#+99U99Ç99U99²   Îò   !!äþG      ² 2    #!"&=463!2#!"&=463!2 þäþä		d   ¹ÿÜGÿù   3#¹ŽŽ   œÿÀdÿÜ   3#œÈÈ$     @ 2   !! þ 2ò      iß   - S  7632#"/##"&54?3'#7#"546;2+"57>3237632#"/#"/#"&545K-	?
0+k	T"k
			ý|		)B
r‚ZZ	]__]	      ²+N   %+"&=4>;2+"¹!¹"ë!!*!   ä2 ²   +"&=46;2 «!!«!k!""   ÿÀÕ   !!"&5ÕþGþ«     ÿÀ  N    3#53#««ää9Ž9     äÿÀ y   !#!äÿ yþc     äN      %3#53#53#3# ääääääää¤9Ž9Ž9Ç9   9 «\    3#3#9U\þ«Uþ«   9ÿÀ« ù    3#3#5##5339rr«9999Ž99Ž9  d  ä \    73#73#dc\UUU    +@ ¹¿   46>.+##$
•*  9ÿÀ«ÿù   3#9rr9  9 k « ù   73#5##533Ž99ùŽ99Ž9   òÿÀò Ü   54>;2+"&òÇÇ$ää    G Àò ù  	   %2#5%3#73#Õ«ÿ «Ü G ò N   %3#G««N9  +ÿÜÕ ¤     7!!%3#'3#+ªþVq99U999È999  ÿÀG Ü 	  7!!"&=46+þäÜþää   ÀG Ü   7!!46+þÇÜ    +ÿÀ+ ¤      73#73#'3#!!+99Ç99d99c ÿ ¤99999VU    dÿÀ ò    73#dŽŽU    GÀ    7!!+"&=46;29þÇÇÇN9     d $ ò @   73#dŽŽ@   E $¦  $ : >  73#2+"547>7654&#"#"54627"54?63232+"=#3€UUB
	%F,	@

		 
Q=Q7     ÿÀ    #!"&5463!2 þ8È$     ë    2!463äþ   Ž y   462"Ž"/!!/(0!!0!   ¹2 •   #"&=46232ò+2G9  ÿÜä À     7!!5!!!!Èþ8Èþ8Èþ8k9Ž9r9    ŽÿÎ« Î   %3#ŽÎÿ      9ÿÀUÀ 	  2!4639þäÀþä    9¤UÀ   2!4639þäÀ  UÿÜ9 À     73#3#3#UääääääÀ999   ŽÿÀ \    3#3#ŽV\þdœþd    «ÿÀ ä    73#«99U   r ë•   462"r2F22FF22F2   ÇÿÀ    463!2#!"&Ç ÿ $þã   ù    2#5ää   U\äy     3#73#73#U99y  r\Çy    3#73#r9y ÿÀä Ü   %3#ÈÈÜþä      ÿÀÀ   2!"&5463 ÿ ÀþÈ      ¤À   2!463 þäÀ  ÿÀ ‡       73#53#53#53#3#ääääääääää‡9Ž8Ž9Ž9þär  UÿÀ¹ÿù    3#73#Urròrr999    2ò ¤    %3#53#ÖÖÖÖNr   9@ •   +"&=46;2 \    rÇ@    3#73#r9@+++  G À¹y         # ' + /  #?#7#7737#773'#?#7#73#7#?#7“F==BOS‰NT
F=>ËFSUOOB=@9rGGG€99rGr 	 H Î¸\         #  #?#73#7#?#73#7#7#?#7•JAB	OSÛJBBNTÛJKSFB$8qV8qV9q  ÿÀò À   #!"&=463!2òþVª$È     ‡ò ¤   7!!äþ¤     UÿÜ« k        73#73#73#3#73#73#U9988Ž99þã9988Ž99k9999999999   dy¹À  ! 1  2#"&547&5472#"&547&54>:#"&547&54tª‹À


     dÿÀœÀ   #!"&5463!2œÿ  $È   ÿùò‡   &7!_QQBQQAAAþôA    ÿùòk      # )  7!!&'&5!!&'!%!!6!!6!&'!!6Úþ0ä þ^¼þI¼þ0	Úþ­þ¾z	þ^	‡,rò+ÖV  G ¹3    7!!#GrþŽ¹uêyd:   ÿÀ  $   7!9Ž9@dd      kò@  	   %!7%!?!3«GþGV9þ898œuê¤99U++G:    U ¤«y    7!!%3#5353UVþª äªÎ*œ9     U Ü«¤     3#7!5?3'«ªä þªIUU·ªU¤™$+++   «¤UÀ   3#533GªŽÀ     G $¹ @   7!!GrþŽ@     9ÿÀÇ Î   7!!9ŽþrÎþò    U Àœ   !!UGþ¹G    ÿÀò    3#"&53+V9ŽV9þ«9þÇ     Çÿë9 ‡   73#Çrr‡œ    \ò‡   $  %2#"&5#"&463236%632!6329V\þÛ8²$cr9r9   	 +ÿëÕ Î         '  73#3#73#3#73#%3#%3#3#2#54+UäääþÇŽÅ8ÎGU+GG     ¹ NG ‡   73#¹ŽŽ‡9   «ÿÀUÿë   3#«ªª+     ë     +"&46;2+".4>;2r	VV—VV ÿ      G 	  =!#!"& !þr!@!!      E  †   5!! þ †A    ‚  Â   5!! þ Â@    À     !! þ  @       þ >   !! þ >@      ; y 	  2!5463Ç!þ !y!!      R 	  =!#!"& !þr!@!!      Q  œ   5!! þ œK    ›  æ   5!! þ æK    å 3   !! þ 3N      / y 	  !5463!2 þ !Ž!@!!     U [Õ¥   '&#"#"'&546327632Í&!CE$,%	 & CF$,”	þò	  Ç ù9$ 
   462#"6462#"Ç
:
					   ò Ü ë   642òÜ   V $ª Î '  $'&7'&7&67'&6&67&66'
		
`a
		
aac

//

##

//

##   « ²U\ # 2 6 C  2"&="&=&'#".=&542>54.#"24"72>54&#"ØP-		1


!2\4!!/	

		       y   3##5#535+ÕÕVÕÕyŽVŽŽVŽ        y 	   '  754#!"6?>&/.3!2¹&Q6\/u*X9þtc2z&Q6\/u*X9Œc2À:%@"L	>*G$N:%þþ@"L	>*G$  2 7Ê@3   &'/34&'&#"&"&74?&""&1&&74234;&#/67372?'7&7.5&5'''"'"'232&'62&#"'.#&#&#'#&7&/#&7>370;&'.#&7'4773764>&7'/&'.750'#&50'60'"'&'&'&'"437/67375&'432;2>?&7'7'&&'&'.5#'6?'>36?&/4'62476&'607675122767343&5&637&?&7>73&7&7&''4.7.5#'&/374.#'''''&54&#""#4>37&76767673&''"3&676547>72>?1"6267"&76327"'67>Ã



				

			

	
	 
.

A
	

	

		
		
		

	

		-		

      œ' 	  6.5&   ’" š'   2#"56–&   ÿ¼ò    >3!2/&7["	IØØ	þð
¡

¡
  ÿÜõÁ 1  %'&'&'.767'.>&54>676Ô%0()3.10+(0%'%%(88(%%'¥ /&!//!(- /95.((.59/  G ¼y 1  %&'&547.4676&'&>6766uIJ

$	'#

		%%"
%	R	##	
 
$$$#
$+(    ” `l6 0  %'"'&'".767'.>&5462676^



 
¸   Ü §$ î   $"&462$¼  ÿÀÖy    %"/&=4;264&"Ç'Ï)…¡(Ñ
)W    5 ù a    "&4664&"~+a++J   [! üÁ   &?6y

y

+

x

   Ó º í   %/&6°

À	
$

À
	  …ÿÀ  ;   "/&462úQQ  J ×ò '  7/"/./&/&J)
?6

?V)$"
l  ] åãl    # ,  6&'&'43656.6&76.x%	@ !)$(	8"HQ%	Aa+%(€&H"8	  # Ë ö¨    7'7#
«
—
µ
v
«
Ó
µ
      ·
²       77777x
x—
—¡
¡
y
y:x
x)—
—¡
¡


y
y     ·
²    7'7
—
=
—
N
—
ñ
–    ÿþ ¯Â    6.6.JoTJoS¸:DY;DxJSoJT@:ZD;YD   Ä Á  ý   6&?ì


ý


    Ø ¨ é    %/&6&'&462 




®Õ




¥   .`h› 	   62'&.



Š

 @Vs‰   7@)
)`)
)  +ÿÊö– *  2>#".#"4>54>7>/ :&!*(=6=/ )=ƒ /=6=(*%
(L+=J    / ¯‘    $#!"43!"542¤þšf fþš   1 º   %'&6°

þŸ

$

a

      G xÀ   x2À)3   E w h 
  %.676s		:) Lÿõ| Z 
  %.>z+( `ÿá’ F   $.>Š,))  WÿÍ¼ {    $.>.>ž)))( f BË t   $.>©((B  z .ß `   $.>½)).  Ž ó L   $.>Ñ)(   Lÿë«• & 4 B  2&3.547&'&6766'3>'67.>6&'&6Œ&------%%
u	
&î

Ø

1J6556J1	"<<"				     LÿÁ«½   #  2#"54>37!&547!'#".54;2/WW!¾þÄ$Z8UUÌ$$/µ

   r ¤Ž ù  6 P  7#"4;5#32+"=46;23#"4;5#32+"=4>;2+"4;5#32+"=46;2¹$$9#";Á$$9#":g%$8##	;¤9;9;9;     +ÿëÕ•   %#!"&5463!2ÕþªVV   GÿÀ  \   !".5463!2654&+"&46;2«þªV!dd$1.@.%-      Ù Ú "  7'"'.'".5467>« 				")d))
!$   Ž Õ$   %#"54>32Õ]?«.O3' r47U'E:");     s  Ú   74.7>7&‹!
Â	
	.	    ° Ã ú   7.'.4>76Â
Ú				   d k € ‡   6462"ds    O ¯~=  -  7#".'&'4327&'&54327'"'&5676&'.636—		+ö$ *%¼	G
    äÿÀ  \   #".546;2654&+"&46;2«¹¹!dd$1.@.%-       ¿ ¨   7#"54>32«…*5D
((   • Õ ð   %#"#".5476Õ>:)"
ž90l1&q 
9     p d    %#'7"&4632dÂ2&4%%€kPg))9(    „ – Ì ó   6"&54>32Ì	Ø'	     d N Ž y   6462"d[    ÿÀ $ '  %"&=4'#"'##".'".?63!2â
 -+!	L+ ô'€€B+!<'U 5;XZ      œ?   .#"54632Ž	+!3
    G Î d ë   6462"G		×			    ÿÀ $ 0  %"&=4'#".'##".'&'"#"&?>3263!2â‚0!5 ô'««6$1S*%*.#2R#.=     ^ ë îw   7"'&7632676&'&'&>Ž!(";ë
#((   BÿÀä@ '  %#"'##".'&767&'.>3676ä 
	‹	/$C>Q &ël=9IG*&89,	*    ÿü \äL  #  7"#"&7>'&6#%6#"&547ŽF-E"'/& 9,?D‡6"E8š*3)3C/*      Ç   ù   &  6462"4632"6"&=4.#"&4632Ç**ªY
O))
VG
	G  G ù œb    #".56462"œ	
	8@B   ÿÀ  P  %#"'&7>54'#.>?5&'+#4326?'#"&5467=4632>3232>Ì4	U	9+U*$		8)4",
Ð2!4-5/)+rŽ=    9 À U Ü   6462"9È      \¸     % + 3  5620"&'6'6'36'276'636'2'6'632ä
	
ú¤@NWe:9D*,:%&3<88I98L   ÿÀ  C  %"&=#.>?5&'+#4326?'&#&5467=4632>323262Ó-U	H+U08);):$Ö2cG \**€ª	=      ‡ G Ü    6462"620"&'+3È   y UÜ ò    & . 9 A  6462"6462"462#"462#"6462"462#"6462"yR;S
(Ê7X6X     ‡ dÎ ä 
   % 1 9 A  6462#"64632"462"462"74>32"&462"6462"‡	\3\"			9		#Ï			?UGO    n ë ÁÀ   4.472#".€

$.&&&2
  | ë ±š   4.432#".ˆ
% 	    Þ |¥   .76&D 	+##1	    # Þ tƒ   .472&N)$   œÿù  \   $462"œ))))    ÿÀÕ $  #"&547&'#".'".54632632µ
>-)%"	##J-6.Ru
>'I-ITIB     G ² d Î   6462"G		º      y  ¤   7".5463232•    mÿÉ¢   *  72+"763>7>'>+"7674674&'•	
¸!	 4$9+(?!	   ÿÁ ² W  *#"763.'./#0#"763.'.'".547632632>3>54.#"&4632  

0*	 
	!*	
	GP9"7IH%C&@:/1M	r$0(<'4@3	1!		8     H b%   462"H    Eg   & 4  #"&54'&&762"#&#"4326&/4&>*

2	¬C*		

	#
c8		    ?; Ž    67#/>?'p=P	
	  Q Z$ 
  &'467U$      ð -   #"&54*

	

  . Ó `    7'&&762"#&#"432^	ô	#
  ? Ð‡   ! ( /  67#/>?'7&.'677.p=†	#dP	
	L	&  ä Eg ~   %6&/4&>C*	p8		   GÿûòÁ " Ð  77456'&'&76'&5676'&547>.'&67632632326222>>327>7>76&74654&'&6'.746'.5>74&>76&>764362>26'.7>±
	
!n#			


	-$# 53CB3			
.
*#	2
		
			

								¿2&5$¢     Þ+ž   '..10.5462>32+0#!

?M'P-E
	,+#   ®K Ïl 
  "&4632Ï	

\


   ) ):   #&"*&5462)
3
    d žC    #0#".54>32#*.54>32ž""  1 ü §#   6&16œ	-7
:!  ~ÿÀòŠ 2  3276.546#".67>.'&76*	!P99"N99O%	
aJAC"+(G4#49/	
2'!QTE,*3-
$   Q ò‡   "'&7>32#"§

		$Q


		  ! ; › ¸ #  75656&'&76'&5476'&547>˜

	X				
(   ÇÿÎ« $ 
   #"&54632#"&54632 +      ÿÀ  ?  %#"&5"#"1##"&'&'.#"&54>32>;26.'&6 
 	G+-
$1**",2	

\*0)(	" *!
,3     Ž © ¹ Ä   74232>"&Ž¾	    @œ y 
  $ / 7  $462#"'462#".'462#".462#"6462"r
	E	9
		,e	      y d •     7"&/3"&/3"&/3U	"	"	‡    ÿÀ \ 3  #".5467>67>7.'2>6 
%2?Hr=(b:


#&\5FPN+%2<(N
	     ÿÀä    #".5632>7°2?Hr=(,/5N+(	$+%2<(14%
	"H.   G y r ¤ 
  64632"G
…
	     # Ú Ž~  &  7'&7676&#"76'&7676&#"76€
	

7	
		ã		  '
" 1		  '+B     ÿÁ 1 &  #!"&'&>&'.546 þ¸17	
		J
§ )'1$81(		/'
		<  —ÿÝÖ   7&>32#".›%4!=,<? 5!]$12"'4B[      ~ÿÝö* 1  "'.7>'&76&'&676&'&.7>b.0
E&#
!9	
.+9e‹OBE0 #U/)+	&%"	,	$"-P?;RWxD8  n> ù„   "'&>'4.76376¨%"S
   ÿÀ À 8  "&54"#"&5476254622=4.##"&54632Œ.G.G..Fb4'  /F\F/./WDHc#4@@66@?7w7E5'6@@6ì'XFì$8     ‡¤    462" 		  7ÿÀZƒ 
   =  2'&47'6'#42&".'&"&7623"&>l
œ
s	#	
 S9





   ŽÿÎ« @  )  ".?463232"./46323:o'+¿	'	
2		
"

"   ¹ÿÀÕ 2  $  ".?4>3232"./463232™*³	'*@	"	"   nÿîü2   %#"&4632ückiWWiG\+SOMªM#G      $ ò 
  7#"&54>32ò€*:)!€Å¡i8 $  + ‡ U ²   6462"+”      À æ+   .543276à
)&d
R
	$     m 49 !  7&'.676'&676.>äU 
376


#5ý>_#
(     _0 è¤   &6'&'&jN/	U*%  MI Õ½   &6'&'W
N.	n*%      ­ G   754&"=4632G	î0	+		   ÿÃ… <  #".''#".'&'&'".546326326'&#".54632ô%
I@
'b,q)-	 +(&&7„%O.R@j$,+W2
&   U. rJ 
  462#".U			<   G Ê ”   6"76?>'&"&'&6ªnP%%=	,2h(8'A    ÿÀüX '  %#"'#"'#".'&'".54632632ü)
$)!`.^G\+L'	21
 G2h(#G   + Ê U õ   6462"+×    Z ÊE“   &'&76676&&7>ú/$+*08 De‚=5				$0   ÿùÿÀ ² e  2+"546323"#"&546532".7>7&#".7>3266=4&#"32676'&6#"&546œ+9^	d .2#*

"
)6G,
*:@,O'=)	,-²A1Õh#27613$7,&1A,#K:,(OKLÕ%0&,7  ÿÿ Ç•  1  &'.76767&54624&4>32#".4Ÿ , &Q!%		     K2 j` 
  #".5462j		S
      ù 9 
  #"&532>9"
	    ÿ»iN  7 A  &?#"&46;4?2&?#"&46;4?2#"&4632b%		
b&‘""	+

	+
Q   ¤ ÖÀ 5  +&'"&>7><=".5464>324>À	

	
	¤"#
	B
		   @ ç !  #"&'.<54632>Î0T5Mo)&$-


@+XQ?&a< $	#'$
  ]@ y\   462"]H   âÿ×  
  $#".5462	    hÿ×˜k "  %1"&5"&5##"&5"&565462‰<PrPâ"vTŸM8QQ   ÞÿÀ"À    #".54>32462#".
>
•?*þAVV     œ @d À   6462#"œ;R;%)e6%%
   œ nd À   %&5462dddL0L€

00    Ž ¤r Î    6462"6462"Ž¬° QÿË  U   >'.7>&'&32#		#+2#


B)    ®ÿË    7+"767.67.'®%	2#,     1' >8    424211
   ÞÎº   "#&47>74ðX=	
=)""%(  t (2   %  72>76#"&?&'&67'67z
	%XQ,$!ø

2		
E7     Ô Kk   %'.'&476'&6.'!
í,1	'   å i^ ë 	  767&å	G(*Ö
<52  ê pZ ä   7&'6íA,47ä95<0     mÿÊ ¼ ‹   72+"76367<.5‰
*‹
 7'  ÿÅž 7  %#"&7.'&67&'+.>76'.45.'.7>67676j2e
	2	&%

#9$NŠA4&

#^	N='*"	#&9>  d & 
   %&'<5'.45.'
g/	>'& $=   ß 	@ =   7>"'&76ê	5	/"  $ÿÞ>2    &7672*42ë$
Ø

F     9 %b 
  #.542$
J		   ÝŠ   #".747>Ø'
9),
   fT €n   462"f\  p Ú x   %>.#'.676'&'476¹%&35ô
	
%     ‚ÿÊ¥   /  72+"7634>56&'7+"'674.'.'“
)¦&ˆ 7%;
2 -     ÿÅù >  %#"&7&'.''#.>7.'.5.'.7>676767>Ê	
";B
6	
&%

#9
7J>áxc0C+	(6&'"	#&   \ Ph
    767'&'6&'.ç$M;BŒ)d­0'8O*     ma   2&'&76&6	0a(    Œ Ý‘   #"&747>Ø'@*,
  Ð{ 
  6'.B(&
	  $$ 22   42$$  ÿÀ 8 D  %'&'#".4'#"'#".'.'.5<>32>7674&6326767232à 1/*)U
	L^ž*N)

.=
	
M    x À — Þ   7"&4632—			Ï			  
ÿÀö³ #  ".547.7662>Ú#2BVB2#
S6€6S
8<'--'<8$„##„  áˆ    &'>%.76Ô',þ'	,3#O5#3!O   ( Õ Þ  +  7.'&6'&!0727>7676m--@&K 
$";" :0
$)	":$  dÿùœ (   %#".5422>2œ!K04$#686#$		    rÿòŽ Ç 	  %"&5462ŽIŠIAšAw5PP5.""  « @U „ 
   6"&54>32"&462Õ			‰			v(((   € Î€ 
   6#".5462#".5462¹Øö   ÿþÿÅ ™ H  %"&54'#"&5<1"#"'0#"&54&'.5&'.67>21232ê	 #	!"	;
_k ´ãP\
##hE	‹¡
     n }:w   &#"&632>7>.'
 )!w$%4 .$	    G â r   6462"Gî    8 U+   "'.6>Ž$s"	$m$!*B  Õ UÅ   76&'.+r$"s$%B*!$  ÿü  Ü  !  %76&'.+'"'.6>­	
"s$¾œ$s"
%Ü-$ $mm$ )B    ÿüÿ¾À (  %6&'.+"'.6>'&54632Ø
 d&	 &d 
*
%iP4S2%
*" $$ "0H%JBIS#H1BJ%H0   « yU ²    6462"6462"«aŠ  (ÿ¿Ü¿ %  &'&'&/"&/./&6?67676 0Œ0%D<6"\˜š.0 F%HV EÿõÀ û   %'&76767676³ 
4óOa!*`   U KV¤    7':1>'<'7'23>'4++‹(I:z*YKk5Ý8`n4)Œ2v     ] uÀ    05&54#"74320&54#"5632iG‡+.#+/    ‰ÿÀÑ ì   ! - >  &>.4>32"&'>.'6.6'6&'&>¥	
N
	KD		
		
			

-		¥		I	   ÿÜú£ #  "'&'&'&'&&'&>7676ƒ'#T&	,)e$ 1!$%r<( /#i<
	1    Qk m‡ 
  4>32"&Qy   ”ÿëËT  " 3 C S d  "'.76'&6'"'&7>5&62'"'&>7676""'&67676"'"'&67>76"'"'&7676¸		
r
			€,		,(
&
%D"
"/-'



 	1|E
˜			
C
   ÿý c¤ 	   ? O a  6"'&?67"'&7>&'&6"'&7>2'."'&6>76'"'&6636q

ã

äk
1	!

Ã
""@+

	
	c
ã

ä£	"
 7	

	
	r0


   H $ óÃ  -  "#.746.'&6"'&4>76"…

-

-
	

&þ÷!		#
     ÿÙç­   %.'&7&'&7&'&666¨3<=@", 7$…#! ?¯=<3?? !#…$7 ,"   nÿÀ’µ 9  %1#".=.'1&547&547&'.662>7>ŒE++EK
	:	
Kr3M	M3T	"

"	T     tÿëŒ ë     76733#&'63"Ð"

"­ùð;’#L²  9n       †     #"&54>3264632". <S),'h55h*+(8S< ;-*

" -;    ²ò  #  7".54632>76!".'&632	d79i!¾',E$7d		²      9  $ > V o  %!"&463!2%#".'&>32"'&7>"%"&'4632>7>#"'.#.>3òþäþ¾/&%	 '+',
	)" 	%(0	
.),•				.
%	«+«	&
.«	+     UÿÞ«À %  ".54767&54>3216205462cH-QZQ-H+
	+R*Z3oNNo3Z*4     @ÿÎÀ@  !  .5467:7.54>3äE_YK5KY+K1wRMNþÀ@NM6\9     dÿù«    " * 2 :  6462"462#"462"6462"462"462"462"œI#Œ#;W##ßY$DÜ:J##    ]ÿÖ   %#"&54632É'[^$kEb3*qQ    €ÿÄ‡J    74632'&076#"&€A?3	6ICG <ó!6,E',£-'     – Ž   76'&76#".'"
+'*&4  ÿÚ´	   7>32#"&'&76656.aS*_F.*AZ*5i-5r7`#13!31#'!     G • € Î   62"&4XÎ    Ã  ý É   7"'&7>&'&6Ö
&.=+  gÿÀ…À  &  >32#".'>232"&u(hN"!$,+	q1œ24D6"
ö	%?K  ÿÿ û ,  2#"&'#"&'.67.>7>32>ò		.h<6x
	
%$4Dc-@"+"+#8$7H7!	
	6%3 XA$6   ²–V  !  %>7#".767#"#. "$G5*	À6$
3"9+	  ¹ •Ku   74>7"&¹&#!*¤+I1 	-I,		    r Î œ ù 
  7462#".r	
ä
     Ýk   %#"#".54>32Õ
436E#$; *C$#UCKÎ!.. &5@-.0"*37     ¤ + Æ   7"&54>+²
    ´ák   %&&54>32Õ
!¬Ak@*C$#UCKÎ	.0"*37     $ý  $  %4632#".0'6;#".'«2

 ›(Ç'$	[


   U ù r   462"U			     @‡b   & . A  >'.74632"64632"6462"%'.546320#	
c6		0þ×
	
A
êO	G   Õ Îd2     6462"462"&4632"ÕW7		éP		       ë  (  72.#"54632..5463232Œ
.O3$t	
(¥.#%#.‹
    œÿÀ¹ N  -  #".547>3245<>32".î

	z	$	
!!3
  € Ç ë   %"#*.54>32Ç& 
	,K-C`@
	.O.d     9 ² U Î   6462"9º    ” $³ Î 	  -  %"&5462#"".54.4632"&#"&7>32Q-#Z	+²	
[##(KK"	 \	"$4    'ÿùÕ ù   ?7777/' +9*99++œU­/**U+**8dGV   C ½» &  %".>7&5467&5&766ª)F^F)R<<Rï,"+  +",?_
		
_?   Õ Ü+$   %"5462+V$ù    Žr2    462"6462"Ž¬     ÿÀä Ë   %7"&5477777¹#†¼†
/++*9*9\eUyyUoU8GV    Á …   7#"&54632y:!Ý
    Õÿ¼“ A  5  &?#"&46;4?2&?#"&46;4?2&b%		
	+

	+

     G — 3  %2&#"&'.5467.&54>>&1>õ)3M0I
-;G4

%9
()" Ê)A
9;-
I04N	4%(,   œ ì Ç   6462"œø    3Î ß   %32#".7666"
.>	Ý
!	+E,     ¤ÿ»\ @  ;  &?#"&46;4?272+/&767>/4&43÷%
Y%
	+

	



     ê» -  %'&'"'&7>7=467&5&76601ä)Ü)R<<Rk	(||(	(1?_
		
_?1(    ÿÖª7  ) G  '.7>.?&?&/676'&?&?.=66U>	
	"	U


		%ð
*

	
)

	    lúd   ".3>756ò	X,+6'#`
ƒ> VU   (ï Ñ   %'".76ê&*D%6P$	” TR6     “ )_ ô   %'.7>^<S*;:'²$V:!  G N˜   '.7>KH68JR9,H9IT87@Q  {$ ´]   462"{4   ™Æ   %>76&'.7# #
)07Ó&	&	    ÚbSŸ   76.'ÚY


”		
  ÷=X{   76.5ø@
n
		   YÿÀ§    %2#"&'#"&64.632>
c:9
cc



     ÿáèÀ %  %&'".''.6767>2Ã	&&&	+F:F+Þ Q1%( 3  3 (%1Q 6*:HH:*    |ÿá„Ÿ    "&54672&"&4624$,MnM,$:.	

]b=RttR=bI


    kžœ   #"5<>2632•SB
	Ak!      ÿù j   "'&547.5463262632 ( zLz (7-$)b)$-7 (6	cc	6(/--     + ¦Õ5    &54632!2&'6ˆ4,##,448V-&%%&-V8  œ $d »     %"5462&462"7462#".5j * ™		_;;$22	
    ªÿÂÄÿë 
   6&74>'6&74>«è"		     mÿÌ}ÿö 
   6&74>'6&7>dß
     ; Î¿ #  #"&7&546?6&&'&>>32Ê@
	"
” 'P,
   . |m 	   &'&766462"$		<B				   ' ¿t þ   %2'.7>L
	ý
    ÿÍ ¾   $"76767'.'.'."1
'	v5\%  ¬ÿâÔD 9  %'.'.'."##"&54>32>54'432’))++/(
Ò	1S
$

$ 
     qÿó ¯ Ü   .>&'&>2Š


003  gÿà‹ 1    &7>&7>2¯FÚ@   “ÿñ Ù Ø   .'&>72Ä	

0:	24"   J G)$   %&7672)#/;R
]!4½45B1i/     JÿÔÙ^   ! ,  %&7>32'&>'&>&'4>36A73;R"%WEé>
!
º05B1,
ü$'      ¾›   .'&>76¼,DS		%   ÿÇ › j  %"&54'&5>74'&5>54''&#1&76'&74&'&'&7>&+"&6763263>67>32Á	 ('
J9
 	
$%#Në

(&=8- 9+0?+=  
D/E!	
M/4R    Yc v€   "&>v	w		     ÿ½þ• |  %#"'&'&54654'&54654''"#&56'&56&'&'&6'&#"+"767632>3672461>322>32ý
%'
#1	
	
$Š
!Y
/9B
,'%.D~5		O22U3   W6 sS   "&462s	J	   ÿ¿ìÀ @  "17476&'&267>&'&#"&#"&>7>7>32>732³9rU$!
	+'6N		^S(# 			"P=SSo#4!	
(


WS	#  ž Ü ×   6462"ží    ” 1‹ â   7676>&"&”9-Z$ ,‰3'.:8&	  ä T< Å   %6'&'&'47 	Ä1'/    À ²    462#"6462"GdG$2ÇGdGGddGG2%GdGGdG    Þâ„ 
   #"&462 "&462Ä&"11E01E00E1'1E00E11E0     Uÿë«@   $#".54>2«&5;P>!57<75äHP;&>g0$5    ×ÿë) 6   %"&54632)
    8ÿ÷ 4   "'..63>òU%
	(^!	
   ÿûÿÌÛ 4  %  "'.'.>%"'&7>2'.Ç?
"G	þB!^(	$U4!
	&+
   %ÿÌ È 0   "'&7>769	H!	@4'!     « \U ²  (  74>2#"&'574>32#".5'«q•	
		
	       ± x    64>7%.'&6912”
6	N*Y!"$:!;$   (ý¼    632'.%'&7632>	&
	
"ï"&

&²
(&*&&*&
)
     9 Ç¤   %#".=46;29r&B&S;r;SS&B';TT;;T   ÿÀò À   %+"&54>;2ò'?(È>P&B&È&B&2&5:8&B&&B     r $Ž y    74>32#"&2462"r	
	òN	##  œ Üd2  %  4>2"&/74>32#".=œ	
		
	     ÿÀòÀ     462"462"462#"2G22Gk2F22Fj2G2'#GG22G2þÝG22G2‡G22#'  ÇÿÜ9 N 
  4632"Ç!!0/!"     +2Õ¤ 
   462#".%462#".+!/!!9!/!!k""/!""/!     $äÀ    %+!".5>32äþÄ
#.G+":+#	‡!)A;H4$%/34/$  œ •d ë  (  74>2#"&/74>32#".=œÎ


	
	    ÿêä y   %2'&'#.5>326QK:0/5*/0"3.5y)	!	)""  
  äÀ     ' + 0 6 < @  %'62"&7&7&'627&'#%#&56'&56767ßH«@
))=rrLL4—dd29ûU]Sþ•OS_HcUY&U	//B
+y"13OOCR&˜"     ÿ½äÂ %  &"'&547.766247>á!4<9S2S9<8D!4!D8Àv’@@AA@@JPJ0"A!@33@!A"    G ¢¹w    7.72&'67>µ#Â
) #ÁgM	 ,C$,3Mg     ¡ÿÎd \   $"&462d9Q99Q3;**;)   Õÿâ+    %"&542+:V    œ Qd {    6462"6462"œ]  Õ &+ e   %#"&546+
++Q			     ÿÎî« /  %"&'.'.767.676632>Ì	"\6\"$		;G%&&

G;

ùL1	$	1L	$
++L"     Ìåš 	   ) 3  6.%./>"=426"5476"54'&6"'-6
Ã
-'Ö+V–)%$MH)Îvv)"''")     U«g    4'%'.'&76U!$
M	$"J
+-%
     Ž ‡r À    6"&54>32"&462Ç¼¯      ì k    2 A  7"'&7>'&7"#&&7>"'.'476'"'&7>'&"M*'I{B;D!>I'*M!D;BB
BB
      ÿúb E "  $#"'&#"#"'&632767542327]		
	!!

     Ü )$ _   %2+#"&=#".5463		
	_

	
  ÚÿÀ ¼ R  #7.'&>7632>3232>232ô!0b$K		
		
ÃL3:"
;)

    ÿÀê‚ .  3#>&'..'4.546>32êJ4ˆ!	0GL]!"6 T°5/)0-5-',  ùT/    "&462T   Á D Þ   7&"#*.54632D	
É		  £ š ë     %#*#".5462"#*#*.54627µ(())  P xƒR  &  %2&1>"'&7>32#"JY`^

	!µ	d

	
   ÿÀò!   6#*#".4>3267>Ç42?“**cV'!	"?UU+++);)+9,(   
ÿÀäy  /  %#*#"&'&3232>%"&54>:3:ä<2?“)0UU:X6)þµy\2+	)#ü;;  ^ ù i   %"'&327676Ç@#,%ùG


     9 Ç•    0'.54>46'&r
  	y%





		-  G @ r k   74>32"&G	U    
ÿ¸ ± -  %&'&4>767>7&'&6#4'.'K<+ 
&K
)' 
,ša‹u%&# &	/Y=#"
4Mþj*	    × ®   &&76 g·6G\-jh‰##    “ Ò    <>76"&462#L
T(


n
•


   ×/7¾   &'&'&32é$±,%    ˜ 
   '"'.'&"&54>32ì"	¬

˜	!þ‰

      = ¨3   '>767672“+ 	23
6C?j   y …   7&>76.+º%$>4    } wö   $.>»+++w4>$4>   5ÿÀË¤   #"&546?&54632KrsI.Y5r@eK,		Aa2K%
	:Ke     UÿÎ«@   %"&547&54632632«+QvQ+;*))*;Ü3;HH;3);;  ™  g ü 
   7462#".462"™	ŽÎ&&&  ¦ÿï\ ‡     "&'&>;2&462"6462"<0

Œ
u*	h    ÈBÀ   "0?>2B)#	¾
  ÕÿÀ+ @   73".5'ÕV@U		  Õÿê+ @ 
  53&'&"ÕVUV   8 3Æ•   %#!".54>32Æÿ 	0O--O0
%%YS7;VW  rÿúŽ ¤   62#"'&"#"&54»ŠI. '' .¤8#!.((.!#    œ Ad     762"."&=462"&=462Õ@
))~z	00A   ¸ý¤  $  #.67>".545&'>Õ<"

;M
	"<	M1$3\a


a\.0
  Ž $r \      $  $42"4242"423462#".462"G¹¹äŽN    ^?¢    4&'&6>&

í
	Y

    ÿüÿÜ³    ".547&'&676632>æ'IWrWI'		Q9>?8R9:4H&&H4;9
s""s
    ÿòçˆ     &676&'>"&5462i.*.*YIŠIAšAk&5#Nh6%N¼5PP5.""     G ²¹ ë 
   74>32"&%462#".G9Î
    ÿÜ \ 	  %"&5462 “Ú“˜Ð˜‡M^^MRƒƒ    Q ¤ "  ."&547&5463262>32Ä<39VJV93< 2$#</$2=HH=)$2&2$)     9$Ç‡    462"$462"9))))A))))    U@«k 
   462#".462"U	
+U	
    ¹ •G ²    6462"6462"¹jž							   ×ê“ 
   .5463232.'6Æ.A:(0à$A.mU.0):%#.U&   ÿÀð å   %"'.7>32>äLA&z&AL $3'3
 @PP@",#  M Z³y   %.#".5462³%"5"lŽlÀ&-	%Axx    × ) N 	  %"&5462) 2 ÿûÿÌ 4 9 m  %#"'&'#"'.'0#&'0"5"'0.501<5014>1076301>##"1#"'&767#"'&7>012011ù 1%	?	(^þí@	%1 !^(!!  Ž kr À  %  74>2"&/74>32#".=Ž«¤	
		
   ãæ¦    "&'.76>".'&Ó5	 	RN`’	39:&g'6Vg&     5 äÈƒ    '.76>'.¶!kŸ	h(4	I<AA<%
*     ÿÜîJ ,  %&#"&'&&767&7#>?#6762#"1&'Ì?=''=+!	 5>–>5  A(43(

		

	'		ii/	

   ë ?  %.'#&&'.'&46?"67&5462>4.5462ë>,!
,>[!/""/![a*#
	
#*'**'$*
**'    œ d ä  . ;  7464>32#"&/7<>2#"&'5>2#"'&œ		

				e
Î

m    ÿþ± 
   '.76>.”5:YñY:5”:5YY5:     è“    '.76>&|Q	EE	Q€PEEP  ÿëä¤   %#".5&4>32ä'04.9?4!#-B'2N/!ë-M6+,=\5 ('!
   œÿÎd ë   62"&54>ç2)3b3ë,?:(<<(:?     € € ë   )  762".67"&=462*&=4>32Ï:£	
Ò
	fP					
		    äÿÜ    65;"&'ä
   ½ÿò    "'&632762ä
    øÿòC    "&'&363276
    òÀ    462"$462#"2G22G2G2'#GG22G22G22#'     ÿÀòÀ   %"'.5>32ò)O6TR\&0L.$>-&
‡*D.	""X?A;H4$%/34/$  dÿëœ ¤   %#"'#"&5467  $2#..#2N'¤
#2&&2#2  œ $d ë  ( 2  74>2#"&/74>32#".=62#"'&œph#'"Î


	
	V   ÿÜòÀ   %"&5>32ò‚à‚&0L.$>-&
‡L__LA;H4$%/34/$     «ÿÀU k   462"«2F22FG22G2    d Tœ    6/.6'.'.>',"1@"+
 (56,,X%&6(      œ • Õ ë   74>2#"&/œÎ

   + •d ë   %4>32#".=+Î
	
	     ¬ $W g 	  762#"'&»h#'"\      $ò\    +"&46;2ò\AªA\\AªA‚[[‚[  U k«    6462"6462"U"/!!/Â!/""/F22F22F22F2 
 ÿÐé³   * 2 > Q \ d p x  7.#".5462'.676'.7>&.>'.7>.".54632&.'&>.>&.'&>.>î	
1A1¦	

Ø

	˜sØ1!ª	ñ		‘
sÛ 77S		L) ) $)

þI!6q	3( 
 %( (     ÿÀ¼ A  %+"'&76;&'.'.'&67>3465>&'&6'6øNG›
:	)$Z-*</	

|@t
LS%+

Z
	+
!rB%B @ 5:"
  !ÿå#p   7&'.'&'>2¡&#%
K
)72
-
ç!/8
W^%+
57$     Z& M   462"Z1  " +—   &76'&76.#+
	 ÿ
	B=-
e   3 v Á Ú   7&'&76¼	D
$%¨
  	 ^ ] Â   7.'&676Y
	¡-    / H Î ®   7'&766ÆD,!	       ï} 
  74>32"&4.CC]CÀ3W3oœoo    ÿø ùˆ    "&462"264²iGGiGQU<<U<t¨tt¨h”hh”      y ¤   6462"*:)):£:**:*    +   ó   6462"+**«**    \ ô} 
   7462#".4>2"&\	¶5=4B^Bä		3W33W3Noo  ÿøÿˆ    "&462"264·hGGhHQU<<U<t¨tt¨h”hh”    yª   %4>32"&));)À*:**    1 – ó   $462"1**«**  b Ð‹ ù   $462"bÜ  ÿÎØ n   #".'&76?6Ò&*7f	&'D      ¤   <62"–Ô––ÔŠ¥uu¥u     ¹ •G$   6462"¹*:**:¿;**;*    € \€\    2"&4264&"ËjKKjKc:**:*\KiLLi|*;**;      $ó ä   %#".5462ó-;L&0\@'˜¶˜À(+$06     Àó\ 	  %!4>2óþ'?^^^?'À52##25      7áI   $#".4>2á$;V,$F6+$:WXV;Ð .,$% .,,  ˆ Hx8   6462"ˆFdFFdŽdFFdF    ½ }C   6462"½'8''8¤8''8'    ¹ Î ò   6462"¹ß    IÿÀÄÀ   %#".'.>76¹%%	-+"


;2BxCù$?9)606R#3NF.#a  o ‡œž /  %"'&767>54'..'.67676U		!I''4-U+‡0?
 I(
	$=-
     A   7"'&767>'&.'&676¥		D0;	!A	/,
C
     +ÿÀÕÀ    %#"'.54>303>3232Õ(R2<*&!23!&=		 D–mm—C?  o  y  #  %"&4>54&52%4763#.r

þú	
$9"

	(  KÿÕµ     7.'665&>€C$$		

    KÿÕµ     7.'665&>€C$$		

       k    "'.54>7>322632œ6 K9ª9063
3&F99-!
00      ‡ò   %".54>762”1GwhwG1Ztä""     Íñ   %.#"'>762”095V%.u30Ztä       ² [   ".5422>2 )CafaC)%3ctc3%U91!!19
		
     dÿëœ2   26?"&= &N[‚[G$«A[[A«     ò    %"&=462$		ã   ÿÀ«À 9  %#"&'&'&7625462>0>2>«fG@`	
%
¡7GcU?L;'-&#­	

		    9ÿ¿ÃÀ C  75462'.=4"#".='.5'"'.="'.59eGA`	

	Þ8FdT?M;'#&

þÜ®
				
		   9ÿ¿ÃÀ ;  75463'.574&"&57'./'.5''.59fG@`	
%		Þ8GcU?L;'-%8ë®       ’ =  %&'&6?".'&4>37.'&>?#".5463!24+".'&76##		
	­#&-';L?UcG
		
	`@Gf        ’ 8  7#"&54>7676+"3!2+0â8Gc'C*L;'-&#­		fG*J/
&



   ÿùò„   +"&=47'"'"&/>7%6Õ?h†#L#	 º@	ž5
   I 6B/   6  7"/&>#3"&5'&>"".'#45&'&5462u
W	f	E¡
¡¿	¾	Rg³  ù (¨/   %#".546;26=4632f_	_'(··'    4 v¡   6'&762&>/&6E


”žŠ>Ò·:Ë     ÿºé« W  7.67>67'.467667'4.467667'.6767&67'&<>76&'&
Kgaqqj
p"%4 5:‹(É	m˜
	Ž¥	
¤š	£HI5l%gG58}$(;  ÿÜ ¹ y   2#"&54>32«@OH	O@+H     ÿÀä¤  "  2#"&54622"&54&#"&54>d		+9(*B#	F,$9+		 (È'A'.D ŽNÿ¿   2#"&54&#"&46œ.	' 	¿.	)	   ô –•©   %/&>J8Y–b}à    :ÿ¸ÄÂ B  %'.>72?6?6'&'""1.?6?6&5'&>Á&+ S6"	
K&)M(

!T,+L	SºC+5	-E
 JT,%	''N‡	–8    *ÿÀñ½ 6  %#!"&'.=4>7>&632323ñ

ÿ $$
"#"6 Á˜)M$>
	
  ÿÀñ ñ T  %";276+";276+";276+"&547&547&547&546;2+";276#G		ws

d]	
NNTT		~’






    *ÿÃñÀ 8  %"#"#"&6&'.=4>7>3!2ñ 6"#"
$$ 

¿

	
>$M)˜
  ñÀ P  %32'&+";2+"&547&547&547&546;2'&+";2'&+";2'&+"G{~		TTNN		]d

sw	î


   ÿÉÝŸ ]  %&'&'"&'&/".67>&6#'4.6762061'".>06'4.67>7/.67>Ë.11&ž	a‡		“		“Š	’*
&-	j.f14	#”			[~		
v‰		‰
€			‡'	%)			c*<   ÿýÿÁÃ 	   ) 4 ?  "'&?6"'&?6'"'&?6 "'&?6'"'&?6"'&?6"

2

2Vw
#	$§

2

2FM
$	#2

3
2'	(	m	5

2

2(	'
R
  /ÿÔ± a  %&'&'"&"'&/.>&6#'.67624>1'.6762261'".6762?/.6762÷/31$™		^‚{Ž	Ž
…	c)&+	g,m/2	%˜		^‚			{Ž			Ž	…	
	c)%+			f,=   GñR  7  7/&6756'&6736&?65%'77>7>3>Ù`I		5#	WS5	 Y»sJ»O@s  õ  \ T  %'.76?64>376&'?>37>27>74>ý7R'# ##3034,0"áv'H%"-
@?$J	mgoo`fI ÿù Y K  7&762>7'&762>3'&76267'&76273&67'&72&/
"0	,	4	31	3## #'RáIf`oogm	J$?@-!%H'   GðR  8  7/&6756'&6736&?6%'77>7>3>¾`I		5#WT5	Õ5Y»sK	
»]2s    CñR  5  7/&6756'&6736&?6%'?>7>3>Ù`I		6"	A[&7	 Y»sK‹7a0s    =ñR  5  7/&6756'&6736&?6%'?>7>3>Ù`I		6"	AY*7	 Y»sK‹=g0s    GñR  7  7/&6756'&6736&?6%'77>7>3>¾`I		5#	K`5	Õ5Y»sK§]2s      ;ñR  7  7/&6756'&6736&?6%'77>7>3>¾`I		5#	AX/5	Õ5Y»sK‹?[@s     + Í ÊT   7#7ÊŸ5Í‡    ¢ Á\q   # ÿ]ºq° 6 ÍÕT   %76j5Í‡‡  ÿëîŽ   %>?!4&/717˜+þV*,DTTè2µ®M²22(>¦¦¦     Ë S4 ¼   6462"Ë++q,,    d e› © 
   %462#".462#"V		ò	
‡			   kï £    $462"$462"·þG{    ÿÜä *    !"&54>3!2'!"&463!2ÕþV	ª		þV		ª		$		2    :ÿ§    %  462"6462"4632"&462#"‡5	©EI0		I
  OC±‹ 
     462#"%462#".462"O

6

©M



       2  À   <62"–Ô––Ô[;**;)     d yœ\   %".54>2œ(LPL( 23.41 Î'""'#:  :  d uœ Î 
  %"'<5270œ5Î5@¸@•  2       ò N Ü    6462"&462"ò_f  Ê _6 Ì    6&>6&>ô7u+		    ¹ ‡G ¤    6"&462".5462á9‡				  Ê _6 Ì    6.6.6à*¡		6    ä y ²   6462"äŠ     cþ  <  "'.5&""'.'.'&47>22>762üZ

"
Z	6Y*#*Y6
1-
  !
     3 zÍ    7'.54632&632&'&ÐN
(&!_+&&'	NáE);    ƒÿÀ}^   "/.762^kk8]	

þú	   × ï)^   $"'762&ï E

E     ¹	G•   "&54632G1,1- nMM	      ùÀ   46;2#"&'!¹	
	…M‡! M!   ò ù À   46;2#"&ò¹!M…²	! !M      .•ÒÀ 	  !2"&'69ŽvžvÀ     Ø ¤    2'.54632&'.6œe
wí%w
e¤PTU&&UTP    ß }    &'.54%6
ò
}n0U

U0  DÿÜ¼¤ #  2#!".7>=46;267d/	
	ÿ 	
	/0@0¤#þã9ªII#    œ\d¤   "&532673 );0@0.\*!  6ÿÀÀ   '5 [nXÀ¶þ¶!žA   áÿÀÊÀ   3á‘Xn[ÀAþb!J     Žr¤    3##'3Žää€9Ž¤r  «$UÀ     3#73#3#«ŽUÀ+++c    ÿÀòÀ   "./7'25347537?³.4SXR6*

³3GGÅ2' ,+ÅŒ 		     ¹G$   3#¹ŽŽ$  ƒ k|     0'&6?&/#"47Õ
$n&$9
J<@4(@##
 E-N'      @òÀ    3/'79+GG€VUV€GGÀ(þµê––êK(   œÿÀdy   3#œÈÈyþG     œ ùC   # HCH   œ •d ù   %#"&/53dS%2È¤U    œ ²dÀ    %#"&/535'dS%2ÈddÀä€€  ß•!À   '!!!À++     € @€‡    %'dä\+þ¹G     d œ¼  $  %"&/32>7&"&54732>54'7œ	 S@N9c5#[vS/&C/4&/\($gT;@+#3/D53#+@;  VÿÀ¬q  " 6  7.4>7>70.'#./267ì*"%
0	;			$&#|& !8#!
RXNÐ
$+# 7%U)p
"50& 	   «kU•   3".'«ª ( •	     ÿÎò• &  %'#"&/>75'>?2>?³AGU&NA?,(# d9Ñ
SDCˆ::S		U   ÿÎø• 
  '  7"/&6!"'&?6''"&5'267U9		8	Q	8		9\++-&+ÎGG		GGÇc þŠ		v c   ÏŒ¿ 	  "&746¦
   	ÿù÷•   %"+.67>3á
9>202.@ 		uO$Ouò7/D$!9B1MTU     î‹!¾   '"&5462!¥
    ÿÀÿx   %#'".67>32é	=LF24/C!
	yR$QzËL>P#=G5RXZ     ” ÏRk    '&6?'&æ	#8k!D#
ENN     d ‡œ¤   $"&=4&"#".=462”KjK[‚[‡V@\\@VVLmmLV  ÿÎü@   #!"&7>3!2Ûþr6%þÿ!!!  d ¤œÀ   $"&=4&"#".=462”KjK[‚[¤UA\\AUUMllMU    – Ž$ 	   73267#"&54>7l#-,G#**ý	*H<R#   =ÿëü$   %#!"&?>3!2àþ«%%ëÈ!!È""   r š½    &'%'&67r


	

B

21	2    -ÿßþ‡ ,  67>76?0.'.'.'-
.(44	 (l-!18'%!*"$
v			*5@"   ÿØü% "  7&'4176".'&Û,0> #+1/A#`3|"C#
	  ’ j%   %'.'07>67&/793)
		/9!j"()#	$C#'   ÿÿÿÂù ( 3 > I  7"&'&?6#&'&'&'&'&7"'&?6"'&?6"'&?6ƒo
1> #&)+#		3U(%).	¢"
""
"
  …X		
!"C#
	 .3k*+   ÿÄéT  /  #.'676&'&'&'&/.'&?6X›>/h5
–80Y://	
þ†"R*	
‰0+9   0ÿÒ¡ ,  *.'./767>7>é 6‘::
.
q62.771C	*`	K	    ª+`    &"&'.'`L6

	q+
S"   / Á Ç„   7&/6767½F##<	Â0D5    
ÿËé' 
    + N  %"'&?6"'&?6"'&?6"'&?6%&'&'.'&'&7>2I	


		
þ˜	DH('&;*¡Y
õ

+
'
%
©	4W"
D	
	   ¤ÿôþ y   %"&'.707÷)2/K  ÿÎø   +".'.#&'.?ø¼
			r		;Ñ³:Ü   ÿýÿ÷ù   %#".'&#"&>32327± à ,3k
3?E2)GB`5#21#4^98*	      ¤    726/&#"&5>9+"2F5 	*Mµ‚

¤		H   ÿë  ~ '  #".#"+.=>3òr#oXdJJd «+*r&     § Ö   %>7>.! 8A(Š	”
	     ÿÀü V   +"&##54&546?ëüS	[ç99*		k  ÿÜüÀ +  %#"&/&'&7>?65'677632j	&&&Ï xN&0 2	;>
9
	òHDU!B   r ¤ Ž¿   7#63Ž¤   ÿÆõ¾   ( 4 C Q g o w  Š •  2&54>'.>>&'>'.4632#"'4632#".&>.2'.54>.>.>"&462"&4632'.>o	$0:!
$		'-		A		K	p$
 :/#`		;		;A	L}
/ +mJ $64"(A	!		a"46$Jm* /	#	&
  ÿÎò¹ 3  %#!".=4675&'"#"&5467&54632#"'U:c

þZ

p;6

WC&=#
7C
25"%=,M#*=%     ¹ @ò· 4  %#!"=46750.'"&5467&54632#"4#œ"4þõ9*B39=
*™&(
#:9$ +    ÿÎGE 4  7#!"=4675.'"&5467&546322#"&#ò!4þõ:*

	
C38=
*'&(	":9# +     kò Ü 
   7#"&462#"&462U		

¤!/!!!/!!     9ÿÎÇw   7462#".9u¤usT7Z6œ[€€[Zt4^  œ ‡d À    6"&=462"&=462±		¢	‡  ˜ h y    %"'&6276'#".546;2 < h .G     + «Õ» '  2'./'&1'61'&546 7*$	@	[+!x»!"B	0&.'	=/?j    œ ‡d À    6"&=462"&=462±		¢	‡ fÿÜß ²   %#"&'.'57ª	7x+($#1=  !ÿÜ´ ²  "  %#"&'.=7"&676'
6þÒ86x+($#=Á6M79
$    LÿÜ Ç ²   "&>76'U
75$#(,79
$    wè í    6.>'.>\£
Ò.%-&D%.&     GÿÜ¹• 	  %"&5462¹jžjkœk²bttbc€€  µ 7K a   %"'&63276 "

7
		
    ä y •   %#".546;2y     œ ¤d Ü    6"&=4>32"&=462±	¢	¤   1 •Ñ² .  4.#"./#".67>32632Ç
		2! )63362*F9/*)$.==     œ ¤d Ü    6"&=4>32"&=462±	¢	¤   rÿÀ  2 	  !546;2 þr2#ä#2@$22$   òÿÜ€ 2   "&53E;Ž$:     Ç$«À   "&546322632«>h><<C#ZZ   @ÿÀÿ^  #  #".54>232>2#5462ÿ (6*G,+)H0#&þe$
Nþ©<<

   Ç$«\   "&54727«>h>¨C     + ¤ }   742"&54232>Ž0D0
|!00!
      ÿü ¤    %  7"&=462#".=462"&=462			H		|yyyîî    ­ Å     753."&462"&462û|>>÷166Ï&  û 6w €   753"û|PO11  À ?²_ 	  7462"&5ÀGdGGdGÏ;UUwTT<   ý mu ¼    %"'&763276#7#".546;2#9)	 )m:	   ¶ å» "  2'"/"'0'0/'&'4>399I<'(

3!E(;('!
#%!    ò Î€ ù    $"&=462"&=4632#dÎ				   ¹ÿÀ¹ 2    73#73#¹++Õ++2rrr    »ÿÀ¹ÿÎ   3#»þþ2   òÿÀ€ 2   '39GŽ@r   ‡9ëÀ    2#"54632632z0)³±4%À)..%4   @ÿÀ \ 2   73#@2r     Ž Ç 	  7"&5462Ž$8$'3&`#((#&AA   Í€£¼    &76767#07&'67"#"'&Ô
¬
€	%   ­ Å     753."&462"&462û|>>÷166É&  ¶»k   #"&/5!»%]*AV   œR     ' 1  "=42"=42"=42"=42"=42"&5462ä¸Ž22ä$8$'3& +++1+,+*+å#((#&AA   Zÿê  ª   %76 þº	?Ž#0ZT4#   — ‹oI     753"..>2.>Ð`"	¼

¡**ž'     Ó F ÿ Ž   7/&?6ì

‡32    bÿÅX    "#"'&>9"P(:.'4I5	.	 & 4 .u Ÿ   %./&7>^

		/ 	
( ?ÿÅ£ T   '&/6?ž$	/?G   öÿÂYÿú   >=>>#ö		&>
	   QÿÁ    76'.]
I#
.)8
#  Ð ¥0 Þ   753"Ð`>¸&&  £ ¬b 	  >.7¥:N3:M3!.>D[>C.      $l¸   /&'0/0''&7>
,6
.
70µ< 3
%	!5    Ñ Ë-    $&'&7676/"632'@
		Ë

"   ÂA/  !  "#&#&&76"'&'"&76å		P		 

   9ÿë™ |   %'&'25&'4>?67– 


<		%4  ã QW ¥   %&/&6?6N@	A•   ¹ G í … 
  7&7'&"&6Ò	

"x	
	    9ÿÀÇ 2 	  %2!5463r#2þr2#22$$2   kÿÀ•ÿæ    "  2#630#4>32#63012#5>s0Ç.
	&
&&&	
     2Î¹    547'&4?23ÉFþòFÈŽ22+     0GÐ    *#'&67ÌÇÇÅÅ9988  G À   6"&547547 ÿ¥	ŽP%%W    °ÿÈP 2   73&'° **299     °ÿùP 2   "/3)R     t Œ 	    753#"&'"&54>2"&462Â|)é077	¶



    Â 6> €   753"Â|PO11  ‡ ?y_   7462#"&5‡GdG 8!2GÏ;UU;'C&T<    Ä m< ¼    $"'&763276'#"&46;2#)R	 *m-		   ¹ ÎG ù    6"&=462"&=4632#ÍdÎ				    } åƒ• +  2'4'./&'0'0/*'&5463 8K'(	E>•J)5' 

$+H    ÁÿÀ¥ N   73#ÁääNŽ   lÿÀú N    %2#'#54>¥#2UäU'N2#9ŽŽ9'  Ã <H 
  %7&'7&'7'a8>ú	v'‹  ú Šr Ù    $"'&763276'#"&46;2#_S
 +Š.	    ï ë}    $".=462"&=4632#s	|ë     ´ ÀÐ« $  &'67&#0'&'&'.7>32À21?"I
N!+
)

	3#$    ÿùÿÀ ¿ ¤   62#"'#5&?6&54$	
		1!N	¤$	-O8!Y			
   e J ¶ ›   7/&?6«::N::   6ÿÀþ i   57&56K/H@cb   mÿÀ6 i   #'>76€IH(L@b&c  ÿÖÝ h    %176&66760.ÝS6C!	þ¼#66T?5(p
\(5 6ÿÔâ w   54>54&526		
 LV,		<   ‰ÿÔ6 w   .'>376,(3H		,&		  ý o ‡   753#"&'ýrN99     ý Ro ‚   753"ýrFk  ª [¯—    #"'&'&'&'&'.467&54>32«G27$	)4E;U2

?%    rÿÀ  g   %2!546;53«#2þr2#4|22$$255   JÿÆ Šÿû 
  01>.M		   d  ¤ B 
  701>.g1
   É  C   701>'.Ë2	
  ÿÜ D B   7>"&7
!   ­ ¸Å    6"&462"&462Ü÷í&     ¶ w» . Q  %#"#'#"/#"'7#"'&'#"&7"1"'&?6;2'2'"/"'0'0/'&'4>3y		4.9I<'(

3!

ûE(;('!
#%!   $ §N ¼   %#".546;2#D§	     œ0Ø³ *  #'.'&"&5&'4>7>?2Ö7#8 (60Ae
	
!     ÿÀ‡ e   !&7>‡þ°|H:L@-)/ N   ÿÝV  
  %01>.		    «À   %#!"&5463!2«"þÇ!!9N""9!     2Ž¤   %#!"&5463!2ŽþÇ9N9   þÿás    %01&64>453#.88j 	'	  ÿÀY    01#67'&'7#'7323KB
   çÿá‰ G    7.'4>016'&'7>õ
ˆ
"E "*

*" 
  ÿÀU     %2&#".'&6#>328	#9
			K		    # ² ©†  3 R Z  67654#"#"54>3232+"542+"=#"4;5422+"54767654#"#"5462#"4;2k
	&	N	&	 vvA!		
J!	
	
.   ­ Å     753"&"&462"&462û|@=÷077Ó&     éÿÀ‰ @   '39P @€   Ç ²«    6462"7462#".Ç**c*Ï))2)  Õ\ ù   %3#GGù$  Õ Àœ    6462"6462"ÕkÕ  2ÿÀ d k   7#54&/G
k"GG+

   H \ ƒ   7/&?6V



m	
	
   ÿÿ v E Ø   7.?2				      ‰ 5 ¿ 
  7&75*			
   ìÀ   01#"'&7>7>32ä3nc7	83X($		(9   —Û¿ 
   #"'67567#5676H=0@	2;E’£¢‘    ­ÿùÅ     753"&"&462"&462û|'/E÷RRô&     ÕÿÀœ N  %  7>2&'.74>7>54Õ
	
#Ç
			2
''
    ý mu ¼    $"'&763276'#".546;2#bR	 *m-	    À §²    6462"6462"À,  ,h--Æ----  Ç\ ë   %3#GGë$  dÿÀò \ 	  !546;2òþr2#ã$2@G#22#   Ÿ ?·- 	     753#"&'"&4632"&4632í|( 
ê	
[66·



   ÿê u    6.>7#"&46;2Âdãã0!!		     í `i «   753"í|Py22  ± j¤‰ 	  7462"&5±GeGGeGù<TTwTT;   ï ˜g ç    %"'&763276#7#"&46;2#+*
 )
˜:		  ¨­À !  2'"/"'0'0/'&54>3+8J<')

>+ÀK(;(&!
$3&   ä ùr$    6"&=4>32"&=462#ød			ù			    +ÿÀÕÿÜ   +"&46;2ÕŽŽ,   	ÿÀ€ ‡   %2!"./&63 9þä,	‡' 
y  ÿúÿÀr ‡   %2!"./&639þã,
‡' 
y    2Ž¤   %#!"&5463!2ŽþÇ9N9   ò Î€ ù    $"&=4632"&=462#x€Î				   ÿÀr    #'7#99@99 ÿÀY    "#7&/7#7327#G	##	 #ÿÀP 
    2#72&#".'&>3,	-	
#J
		    èÿàŠ E     %6'./6'.'4>|
	;~	

D	)")	
	!")	     G N d   7"&=462U	N	««  € N œ\   6"&=4>2”N	òò  ¹ N Õ Î   6"&=4632ÍN	dd     rÿÀ  2 	  !546;2 þr2#ä#2@$22$   ÇÿÀ« 2    7'733#73í+-f3.+@VrrV  ­ Å 
    753#"."&462"&462û|5÷077	Í&     û 6w €   753"û|PO11  À ?²_   74>2"&5À 8B8 GdGÏ'B''B'<TT<   ¸»À     326?#".#"#"&?4>2ºj0@
(.k
9			
}    ¸»@   326?#"."#"&7ºk/@	
/?.
@

  kÿÎ«ÿò   4632#".k		       , ‡ «   7#".547265c$'#«(('?   .ÿÀ Y :   73#.++:z   »ÿÀ¹    %#7«þGG    º1º²   "&""54>32ºG5G6)#59%'&'     rÿÀ  N 	  !546;2 þr2#ä#2@9#22#   ­ Å     %53"&462"&462 r9]÷@GG9%     Ç Î«2  !  2#".#"#".=435#326232œ

#ÇÇ+%%*29

99++     9 Î Ž2     462"462"&462"U			A			>			    ÿÀ Õ À "  7:#".54?5".46?Ž
9	9
ÀGGGG  9ÿè œ ²   7'75#&473#€01G;"11"Z     ÿÎ Ç    4?3#&!a!œ$))   Rr ¤   %53" rFk99     À [²{   7462#".5ÀGdGG2!8 ë<TTwU'B'  ý Šu Ù    %"'&763276#7#"&46;2#9)	 )Š:	   ¶»« !  2'&/"'0/0/'&'4>399I<%(

3!«E(:'$ 	$
#%     ò ë€    $"&=462"&=4632#dë   ÿÀu C   '326?%@ƒƒ  áÿÀ‘ Y 	   %#'7'?01#7>		-Œ-	YL%$$)	88	)$$%L     Ò Ü '   3#ÒÎÎ'K  ¶ÿò¼ 2   %41#"&'573026¨H99I

A\A0   ÕÿÀ ÿë   3#Õ*+    äÿÀ ÿÜ   3#ä$  ÿÀU @   !>2Uþ¯^{^@7II  ÿÀB /   !>2BþÕSkT@0??  &ÿÀ4 !   !>324þòK09'@*7,     »ÿÅ    1'&'&7>	2			    ² `$   71"/&4?62Zõ""    $ «»   1"/&4?62 %%

%~%

%%

%     ¶  ¼ b   %012"&469#=#MlMMb(     Ê ¨ T 	  %"&462#9.AA\AA.  ­ Å     753"&"&462"&462û|A<÷366Ð&     9ÿÀÇ 2 	  !546;2Çþr2#ä#2@$22$   9ÿÀÇÿë   !!54:Œþr    ¹ ÎG ù    6"&=462"&=4632ÍjÎ			     9 þÇÀ #  &'&#"&4>7>7>2š	1'(_1	A6A	&		11  ¹2GÀ   2+"&5'54ë*2tÀ788  ¨ÿÀW `   %#&74&47667>7>Tª  \
€x33    9ÿÎÇÿÜ   !!9Žþr$     9 ¡Ç$   %#"&54>2>Ç6I)Ru
'"4&4"'
þ"6'
     ÇÿÜ9 @   73".'Çr
@#  t Œ     753"&"&54>32#"&4632Â|&0E
÷

077Ù



     Â 6> €   753"Â|PO11  ‡ ?y_   6462"‡GdGGd“wUUwT    Ä m< ¼    $"'&763276'#"&46;2)R	 *m-		     }ÿÀƒ  ( 2  2'&/"'0'0''&546#546;2#546;2 9J<'*
D¿+	Õ+	E(;('#
$*Cþ1€€€   9$ äÀ   2#"'.54>76•!.$(
À. %      > è ! C  %.5'.'&'0.>'&7>74>7>21# ÿ				Ô


C
!	"#
   d@ ¹N    42242d9@   $ÇÀ   2#"'.54>76y .$(
À. %    ñ >ä è  =  %'&7>7>7>1'0&45"74&'&'0.636	Ï	
C
!

#"  9ÿÆ« y %  %&56.54&'0"1&764'.=3¤q.  ..6 (ÿÀµÿÙ    #&76&?6²6
„	@

    kÎ ù   %1#/67>7;2¶ v9î	OO	    U æŽ1   3"&5U919  U óŽ   53"U9# ÿ   + ù¹•   "&=¹*;)•U**U   UÿÆ È y )  7&54.54&'0"1&764'.4&573Áq.  .6    $\Àœ   3".5#'+Ž+%œ#2  UŽ2    "&/73#".5Ž  G@œN     42242G9@   JÿÀ ÒÿÙ    #&76&>76Ï7	…	@

     2 k ê ù   71#/67>7;2Ò	v 9î	OO	      r æ «1   3"&5r919    r ó «   53"r9# ÿ     G ù Õ•   "&=Õ);*•U**U    @\ Üœ   3".'#'GŽ+%œ#2   r «2    #"&5'73#"&'«	  G@œN     42242G9@   -ÿø ¸ ¬   7'­¬	«	    ÿË 9    7&7-	(  ëÿÙa Ð   .7654&/47>?>
2&*	

T6 ÿì© ê   './&'./&>76¡


";
_3    •kR   %+&46746kF$%¤#3$*G   § ©8   &'&7>7>	('   Æ º Ü Ó   7&6"76&ÊÎ	  œ  É Ã   6&?6§"	"    –ÿÅ$ ¥  (  7'&6#"#"&/5473727>?32>12§	v		
»  ÿ¿ ÿÓ   &6A	    ÊÿÀ¸   A  /"#"'&'"5732763270#"7'&74>765646577>163



	
­
?	G
	  ÿÀÁ     "#"#""5'67676767676±	
				    ðMP³ 
  &7>20)¬$,     KŒ   '&764&'#".>&6722C	
i	
	     éXVÃ $  +&'6'.#"&<&'..762676L


-£   9ÿÎÇw   %"&'.546;>3232Ç\z\Z9&C/¤ FWWF !DW(F-!   « •U Î    6"&=462"&=4632¿†•			     ¥ \ k    $"'&763276'#"&46;2?~

	
/0	C

		


5				     G À¹²    2"/".'0'0''&54> Qh
>
:?
+I²c:P9;53 76.    + ©Õ¾ W  #"'54'#"&'#"&''#&'#"&547&547&5467&54632>32>2632632Õ $

$
		
    9ÿÎÇ{   %2"&'.5463>2¤\z\[z[Ü! FWWF !NQQ    /dƒ¼ 
  '.7>r)'²
!*    ;9~   '&7>&/.7>2r			u

		
	    1 z‚ ¸   %6'&76g-±	     ¬ yW ¥   %'&6Mššz  f «³    '.?>7"#.?6›

		7Œ
Œ`93   x œµ°    &?67&?6¢=ššcJI    ö ¸y ã   %'.76kkjº
   ‡ M‹ Ï    %67>'&6''&&767>I

8~	
Š8
   nÿÜÕ m     6&?&?6"&=4627
*
ØmPP]
*
W	*		*  9   0   7'&6u56    ²ÿÜœ @    "&=4627"4;2#Æ«$	*		*M     Õ Ê k    %'&6'#"4;2»*
*
G
*
*
W    ! )‹Å # H  "#&'56&'&>5.&676276"'.'./562726?26120†	*þÿ
	
¤	þd   ™ © Ý ç   7363676254'&76¦Û	
   Ê ×f.   &#&#".7676632>C
F(	.9	
    œÿÀä @     462"&462"6462"ò%5&&5{ú6%%6%    «ÿÎU $ 
   4632"462"		x

  µÿÎÕ       '  462#".4242&4242462#".¹‡
$			+	 ÀÿÕÎÿä   42À+    w F   64&1&'&'&'&'&1721#"&Y

	&	  ° …f Þ    %&/#0#&'.'&'&676:e		7-Ë	    O 9  é   7&'>?>'&.d				P%=6	:    º„f   %'./4>7>l	'&
	Ï'
:3   ‹! {   74&Œ)KK    Ç Ž •   732+"&=46?äŽŽ•G	*   ­ }X µ   %'.7>FŒ
Œ
     ødM» 
  '.7>8	*'²!*	    8H›   '&7676'.7>2=

u		
    ¤ z…I    %'"&746327'".57463?	Ž:	{	ÀŽŽ   ¤ v‹H    %'"6327&576Gœœ<wÊœœ     è ¸k Ø   %'.76^kk¹	
	     … : Ñ  !  %>7>'.6''&&767>A8
‡		†8		

    G $r N 
  %4>32"&G
	9
   ýÿÙ¼ ™   %''7'77¼V22VV22
2VV21VW   ôÿÐÅ ¢   ''7'77``a`,```   äÿÀÕ ²    $2"&4264&"*eFFeFRM66M6²GdGGd7L66L     ‰ÿÉÇ ¤     $2"&4264&"''7'770Y>>Y>DM66M6&¤?X??X‰7L66L0   €ÿÀ ä $    62"&42>54&"))2		$))8

   TÆ $ F  '&'2'4&#">'..7:676'&'./7603726?>120M
*Æ
		
§þN
  rÿõ¶I    6&?%'&6‹"**YSRà     ;ÿõ ƒ    '&6y77	   ‘/ÄE   '&6º%&0 ; •ŽG   6711'.#4676&76.;	(
)#
C*
	
   	 w )   64&1&#&'&'&'&173232'"Y

		    £ }W Ô '  %"&+"10#'.'&'&6762>2V

8Ê
	
     L $ × !  7&'>?>2#**&bQ
	&8
=    Ä_c   %#..'&6_
'	Ú
)
&
  ¸ 1b M   7"632#Àš?    ªÿéh ž    $&?6&&?a§1GGf¥¥    * xt ¡ 	  %6'&76O%
›	  9ÿÀÇ N 
  !54>;2Çþr'ä#2@9'2#    t Œ     753&#"&54>2"&462Çr9]	ïN99Gý	


 2ÿÎ«ÿë    462#".74>32"&2\			$						     Ç R9 ¤   753"ÇrFk99  ‡ [y{   74>32#"&5‡ 8!2G 8!2Gë'C&T<'B'U;   Ä Š< Ù    %"'&763276#7#"&46;2# )	 )Š:		  rÿòƒ«  ) 2  2'&/"'0'&'0''&'463#4>3"7#4.#52 9J<%*

D?r(	ò"%«E(:'$#	$
#*CþG6%"'&+     ¹ ëG    6"&=462"&=4632#Ídë    UÿÇ «  
  462#".U$#    dÿÕ œ    462"d   2ÿÜ« @   #4."#462« 9 $/55    òÿÀ 2   73#ò2r   èÿÞŠ G    7/4>016'&'7>ö!ˆ	
"E
 @
)# 
  ÕÿÀœ 2   %3#53>7‰Ç(2rr4  ¤ÿÀÎÿæ      2#632#632#6#012#5>¬0õ(
	&
	&&&
	
    ÿÀ     #'.'&6?6.
@{
     , 5 s 	  7.>0
W  EÿÀ ¡ÿñ   #&6?6¡Y@  ­ Å     753"&"&462"&462û|'/E÷077Ù&     ¶ w» . Q  %#"#'#"/#"'7#"'&'#"&7"1"'&?6;2'2'"/"'0'0/'&'4>3y		4.9I<'(

3!

ûE(;('!
#%!    @ EN ¼    %#".546;2#.'&676DÔ	§	8	  ÿÿát    %01&64>53#&98j
	'	   ÿÀZ    01#67'.'53LBB
    9ÿÀÇ 2 	  !546;2Çþr2#ä#2@$22$   U ë«À 	  "&462«dŽddŽdU,>>Y>>-     Õ\+‘   462>"5Õ		Vy

  S ­•        $ (  462"!"43!2#7???77ä“þòþÌÒmþó !  Æÿá;    %01&64>53#& 8j
	'	    ßÿÀ!    01#67'&'7'7323B
  ¯ÿÞQ G    7/4>016'&'7>½!ˆ
"E
 @

)# 
  äÿÀ     %2&#".'&6#>2 	#9			K   t Œ     753"'"&54>2"&462Â|&0Eé077É



  Â 6> €   753"Â|PO11  ‡ ?y_   7462#"&5‡GdG 8!2GÏ;UU;'C&T<    Ä m< ¼    %"'&763276#7#"&46;2# )	 )m:		  } åƒ   2'"/"'0'0''&'463 2!<'*

D? &;('#	$
#*C   E »\   &  462#"&5/&?6'&?6'yOpO$>%8O,UTUT@þã   yN‡²   !5>32‡þò	-#DN1       ¶ À    &'5632657&54632&'œ%H@\-È-\@HA1š\@A-JJ-A@\š1A     ÿù d    =67'5.'&=67H%- +ä+#%)÷1AJ"3G'÷0G'JA1    ÿÀ  @    5732#%#546;+U!Õ Õ!U+)0G!GiiG!G   ŽÿÀrÿù    3#73#ŽÖ999      k  ¹    !  73#"'57#"4;23#"&/7"4;2#G+‡G*‡
$$$  G Ü¹    7".=462 "&=4632U		V		Ü		   ‡ æyÀ   .'&54632632yL%3('""'})Q	):''     ¶ ÇÀ   &'563265œ%H@\-A1š\@A-     ÿù œd   =67H%- +)÷1AJ"3G  « k  ¹    %3#"&/7"4;2#¹G*‡$    œ Ü¹   $"&=4632±		Ü	   ÿÀ Õ @   5732#+U!Õ)0G!G   ŽÿÀ œÿù   3#Ž9     k U ¹    73#"'57#"4;2G+‡
$   G Ü d   7".=462U		Ü	 9 ¶ À   &54632&'d-\@HJ-A@\š1A   dÿù d   '5.'&=67 +#% ÷0G'JA1 +ÿÀ  @   %#546; Õ!U+)iG!G dÿÀrÿù   3#d9 œ Ü¹   $"&=4632±		Ü	   ÿø N 	   2#"'6!2#"&46GGddG%""—%""%GddNdŽd6þÊdŽd       À `  8  7/6756320&#&'./67>32&'&'&'&ÚA
'),AM
KMA,)'	Eê
	„6!	!6„	
    @ À ª   # .  72742#"4#2542#"4!2#"&54232#"&542Ž@
2\Ž  ‡ y c  *  6"432#"424"4>"#"2#"&547&54632•äU
		

		
     ÿø òN 	  2#"'6GGddG%""NdŽd6       À ì`   7/675632ÚA
'),AM
ê
	„6!	     @  ² ª    72742#"4#2542#"4Ž@
Ž  ‡  ¤ c   6"432#"424"46•U
		
   ÿø N 	  2#"&46¹%""%GddNþÊdŽd    Á `   %0&#&'./67>32&'&'&'&&MA,)'	Eê!6„	
   N À ª 
   %2#"&54232#"&542r\Ž    \ y c   $"#"2#"&547&54632yU
		
    N À ª 
   %2#"&54232#"&542r\Ž     + yÕ ë    7#"&4632$"&462r

	c²!/"	/!!/"  GÿÀ¹w 
  7462#".GlšllM2U2œ[€€¶;e    « ¤U Ü    7".=4622"&=4>32¹‘¤   ä k ‡   %#"&46;2k  9 ÇÀ 8 Z  %#"#'#"/#"/#"'&'#"'&7"#"'&>?546;212/".'0/0''&54>g
				
.V9Wp
!B9D"
/O?


sh>T<787!;91   €ÿÀ€ N 	   #546;2#546;2€+	Õ+	@€€€   } åƒ   2'&/"'0'0''&546 9J<'*
DE(;('#
$*C  JÿÀÇÀ   '  #&76&>762#"'.54>76Ï7	…	õ .$(
@

 . %   1g‹Å #  "#&'56&'&>5.&676276†	*¤	     ! ) z N $  7"'.'./562726?26120u
	
)  øgTÆ $  '&'2'4&#">'..7:676M
*§       x 6 !  7'&'./7603726?>120u
		

    }ƒ«   2'&/"'0'&'0''&'463 9J<%*

D?«E(:'$#	$
#*C     rÿò€ k 	   #4>3"7#4.#52Ž(	ò"%6%"'&+   « •U Î    6"&=462"&=4632¿†•			     @ E u Š   7.'&676p	o	   ò Î€ ù    $"&=462"&=4632#dÎ				   ÂA/  !  "#&#&&76"'&'"&76å		P		 

    ¹ ÎG ù    6"&=462"&=4632#ÍdÎ				    ï ë}    $".=462"&=4632#s	|ë     ä ùr$    6"&=4>32"&=462#ød			ù			     ò Î€ ù    $"&=4632"&=462#x€Î				   ò ë€    $"&=462"&=4632#dë   Ä 
® X   %"&54>32®E`E6 0E1
   ¹ ÎG ù    6"&=462"&=4632ÍjÎ			     d@ ¹N    42242d9@    « •U Î    6"&=462"&=4632¿†•			     « •U Î    6"&=462"&=4632¿†•			     ¹ ëG    6"&=462"&=4632#Ídë    G Ü d   7".=462U		Ü	  G Ü¹    7".=462 "&=4632U		V		Ü		   @  ² ª    72742#"4#2542#"4Ž@
Ž  @ À ª   # .  72742#"4#2542#"4!2#"&54232#"&542Ž@
2\Ž  « ¤U Ü    7".=4622"&=4>32¹‘¤   û 6w €   753"û|PO11  JÿÆ Šÿû   .>n:	    d  ¤ B   6.>ˆ    È  A 
  6.7>í
    ÿÜ D B   7>"&
!      ­ ¸Å 
   7"&46326"&462Ü	
éÝ
  À ?²_   6462"ÀGdGGd“wUUwT    ¶ w» . N  %#"#'#"/#"'7#"'&'#"&7"1"'&?6;2'2'"/"'0'0/'&54>y		4.9I<'(
3

ûE(;('!	$
$%!   ò Î€ ù    $"&=462"&=4632jÎ			   $ §N ¼   %#".546;2D§	   ÿÀ‡ e   !&7>‡þ°|H:L@-)/ N   ÿÝV    .>:#	   ½ 2= ²   7533#5ÜG€‡++UU   kÿÀ• ‡   %2!546;7j+þÖ
U$#‡*66 d œ .    %0#"&/6"'&476œ

   X 2¨ U    %"&=462#"&=462œ	;	2  ÿÀ ýÿë   ?32#>3d+ ú%    +ÿë Õ ‰   7#"&'&=7Õ!-m=? ==   % ä ²   76=&'&54>32632ä&J(%3["'(3     d  œ .    7"&/6"'&476œ
  X 2 ¨ U    7"&=462*&=462œ	7		2   £ÿÀ] N    %3#'3#N«NŽŽŽ   ”ÿÀ«‡    %#"&'#53#5353j=(*>Ö2V8ù'59*Žþc+    t ò„¾   %6=&'#&5467#632i#:h ;*4Jò;	6A/,*;J4,    Ñ ­- ò    %"./7#"4;2-

5Ä      ¿?2    ".=4622"&=462Í		d				   ÿÀýÿë   ?32#>3d+ú%    UÿÀÕ ‰    %"&'&=73#5353Õ	,8-m=þÇV8?  ==d+     %ä ²   %6=&'&54>32632ä&J(%3["'(3    d 2 ä À   7533#5€G€‡99UU   ÿÀ8 ‡   !546;7328þÖ
U$#G+@66* Gÿùœ .    %#".5'6"'&476œ.	  9 2« \    $"&=462"&=462MM			2     GÿÀ  N    73#'3#ñªNŽŽŽ    9ÿÀœ‡    %#".'53#5353<'0Õ€U9ù&3.ŽþU9    ï+¾   %6=&'#&5467#632!:i;*4Jï;4A-**;J4.    u ­ Ñ ò 
   7#"&/7#"4;2Ñ
	5Ä      d ä2    "&=462"&=462x[					     ôÿÀïÿë    2#7>76;¹ }š++
+    ÿëÕ °   %#"&'&5153623Õ6$(9342N

"-6&VV     ò :è ë   %6515&'1&5467632è#!-V2#.A{$

,',+&$2B   d œ .    %0#"&/6"'&476œ

    X 2¨ U   & 5  $"&=4632"&=462"&=462".=462¡	@		Î		D	2  UÿÀ «    3#5353œV8$+   ÿÀ ýÿë   2#>;7Ç ú%	    d  œ .    7"&/6"'&476œ
  ”ÿÀ«‡    %#"&'#53#5353j=(*>Ö2V8ù'59*Žþc+   ÿÀýÿë   ?32#>3d+ ú     +ÿëÕ ‰    %"&'&=7%7"&=Õ	,8-m=þVm=2F2?  ====#11#   ÿÜä ²  6 C  %6=&'&54>32632#"&/>=4>3263230=&'26ä&J(%3ÿ 0B9((&J2F2["'(3%101('"'#11    ÿÜ ò ²   .  7#"./>=4>32632330=&'126ã0B%( &J2F2Z10	1("'#11  UÿÀ «    3#5353œV8$+   ÿÀ ýÿë 
  2#>;7Ç ú%   ”ÿëÕ‡    %#"&'#5"&=7j=(*>Ök2F2mù'59*Žü=#11#=    ÿÜò ²  +  %#"&/>=4>32632330=&'826ã0B9($3&J2F2Z101(2$"'#11  +ÿÀ« ‰    3#5353'"&=7œV8Ç2F2m$+v=#11#=  ÿÀýÿë 
  2#>;7Ç ú%  ÿÀ8 ‡   !546;7328þÖ
U$#G+@66*  ôÿÀrÿë   3#>9~%+  Gÿùœ .    %#".5'6"'&476œ.	  9 2« \    $"&=462"&=462MM			2     GÿÀ  N    73#'3#ñªNŽŽŽ    9ÿëÕ‡    %#".'5"'.5153623<'0ÕÇ$

"-342ù&3.ŽþÕ)6$VV      ï+¾   %6=&'#&5467#632!:i;*4Jï;4A-**;J4.    u ­ Ñ ò    7"&/7#"4;2Ñ5Ä    äÿÜ  ë '  >515&'1"&/67&5467632#4†"-#!-V-"@2#.AD6$,',+$6
(8$2B.@4    GÿÀœ    3#5353ŽU929 rÿÀïÿë   732r+@+   U 2Õ À   %533#5rG€‡99UU  ÿÀ  ‡   %3!54;¹Gÿ +G#‡Ç*6    ñ òÀ    26326=&'5664J$:e¼µJ4.#:8@s<   = ­ ˜ ò    7"&/7#"4;2˜5Ä    + «2    "&=462"&=462?[							    *ÿÀ9 N   %3#*NŽ  + 2 ‡ 
   3#"&'&5533#5+Õ=+(<äG€‡Ž*94(r99UU   ò À   4632632#"'&J4-5\B4JsA<9"   h ­Ã ò    %3#"&'7"4;2#h[	#Ä&    UÕ2     "&=462"&=462Íl							     ÿÀ  ‡   72!537Õ+ÿ G$#‡*Ç66  ÇÿÀ Ö N   73#ÇNŽ    ÿÀ«‡ 
   7#"&'53#5353Õ<(+=ÕÇV8ù'49*Žþc+   „ÿÀÿë    2#7>76;H~š+++   žÿëe °   %#".'45153623e7$$243N

"-"VV      :x ë   %6515&'1&54>3632x#!-V'.B{$

,',+&(B   ×ÿù, .    %#".'56"'&476,-	   È 2: \    6"&=4>32"&=462Ý	M2      ÿÀ,‡ 
   7#"&'53#5353Õ<(+=ÕIU9ù'49*ŽþU9   +ÿëÕ ‰    %"&'&=7%7"&=Õ	,8-m=þVm=2F2?  ====#11#   ÿÜä ²  ; I  %6=&'&54>32632#"./>=4>32632330=&'126ä&J(%3þÿ0B%( &J2F2["'(3%10	1("'#11   X 2¨ U   , 8  %"&=462#"&=462#"&=462*&=462œ	;	Ê	7		2    ÿÀ ýÿë   2#>;7Ç ú%	     ÿëÕ‡ 
   7#"&'5"&=7Õ<(+=Õ 2F2mù'49*Žü=#11#=   rÿÜŽ ë (  >535#&"#1"&/67&5467632#4#,343-#@	2#.BC6$VV$6
(8$2B.@4    ÕÿÀ+    3#5353V829  ƒÿÀ}ÿë    3#>32#7Ç}%™ }++   œÿëd °   %"'.5153623c

#-343N!6$VV   yr Î   %"'#?r*)0_+y00G     Õÿù+ .    %#".5'6"'&476+	.	   Ç 29 \    6"&=462"&=462Û	M		2    – Õ‡ 
  7#"&'5Õ<(+=Õù'49*Ž  + – ‡ 	  %53#".+Õ=+0ùŽŽ*9.  k À   %#'&'54>32632"'267 (€("065\>U=‹%0d/"e29>*99*    ÿÀ  ‡   %3!543ýÿ +‡Ç*   + 2¹ À 	   %3#"&5!533#5rG

þÕG€²+
	99UU   g ¬Ã Ã   %3#".'g\	
	Ã  ‡ ä¤ ò   %#"4;2œä UÕ2     "&=4632"&=4632i		[		     ÿëÕ‡ 
   7#"&'5"&=7Õ<(+=Õ 2F2mù'49*Žü=#11#=  ÿÜò ²  )  %#"./>=4>3263230=&'26ä0B%($3&J2F2Z10	1(2$"'#11    +ÿÀ« ‰    3#5353'"&=7œV8Ç2F2m$+v=#11#=  ÿÀýÿë   2#>;7Ç ú   X 2¨ U    $"&=4632"&=462¡	@		2  ÿÜ ò ²  (  7#"&/>=4>3263230=&'26ä0B9((&J2F2Z101('"'#11   ÿÀ ýÿë 
  2#>;7Ç ú%   X 2 ¨ U    6"&=462".=462¡		D	2  rÿÀ  2 	  !546;2 þr2#ä#2@$22$   ¶ÿò¼ 2   %4#"&'573026¨H99I

A\A0     ÿÀU @   !>2Uþ¯^{^@7II  ÿÀB /   !>2BþÕSkT@0??  &ÿÀ4 !   !>24þòK`J@*77  »ÿÅ    '&'&7>	2			     ² `$   7"/&4?62Zõ""     $ «»   "/&4?62 %%

%~%

%%

%  ¶  ¼ b 
  64632"¶M6#=#Ml(     Ê ¨ T 
  %"&4629.AA\A3
	   ­ Å     753"'"&46326"&462û|A<	
é366À
  ý mu ¼    $"'&763276'#".546;2bR	 *m-	  ¶ å»   2'"/"'0'0/'&54>99I<'(
3E(;('!	$
$%!   ÿÜr @   %3' r99@dd    œ AÔx   2#"&"#"5454>38', 	SBR!+'x"9$f5‘$9"    €ÿÀò @   %!54676;2¹ þŽ ª8
%22%
    ¹ÿÀ¹ @ 	  %2!5633Žÿ ª@xxk    ÿü ¤  '  2"&=.=4625462>=4”	)	)		 y.$$.yy!´´!y   r ù ^   #".54>2262 +S4+F,+)H.H(,N
   2m m   %53"hB@--     Em „   %53"hCZ**     Ã N­w   74>32#".5Ã 5 0ED1 5 à)E)X?=U&D(   qc ’   %"'&6276#8q    œ ²Ôx .  7#&54>2#54&&54.#"&/&4§
 ,&(&, 
		#,
		²&$8  8%
		    ý Âu æ    %"&=46323".=462#	]
Â   @ÿÀ«À   $  %#"=4;2##5462"&546322632Eá$
G>h><<œ <<

?#ZZ    €ÿÀò @ 	  !546;2òþŽ>&ª&>@2!--!   ÿÀr @   %3' r99@€€    ¤Îk   #"&/5!Î+j0J*V  ¹¹U     '  "=42"=42"=42"=42"=42Çò¹@@$***2+.+(+  ­ ¸Å    6"&462"&462Ü÷í&      K Ç    %#"=4;2#"&5462E·$8$'3&œ<#((#&AA     [ÿê  © 	  %7> þ»5#€#/T#04$    ‚ žƒž   '".#&765>&'	A4C	*(5$gt$2	     Õ Ž+ Ç 	  753#"&ÕV
¤##
    Õ §+ Ù   753"ÕV8¸!!  ¥ ­ež 
  >.7¨:M3:N3)1DI21AF2  ‡ ø„¯ +  #47>'416&&56&'./.4)*%)%	""
$7!:$

     ” ëu1    .>2.>º
Ä

)    ß Ä# á   %&'&676' 

Å
	     ô é ö   %'"=432'ê     Ë@     "'&#"&763"'&'"&76ìH

    U $« œ  !  7#"&54>3246326#"&54Ž
ä\	!
,	!,
!	   UÿÜ«”   74632#".UdG.O.$,/;3"¸[;e<'G3' 7U   € ëÕ@    462"€####  € N€ ‡    %462#".462")
œ))k   + ëÕ* 
  #!"&546ÕþªÕÕ

  G À¹2    7462".462#"G9ù""/""   + \Õ Î    7"&4632$#".5462r	c

•""/!	/"!    G ¹À    !454632"'&63276¸þlM2U2¹"

27O$>$þÔ

   ä N k   %#".4>;2N		    œ yd ²    7".=4622"&=462«	ª	y				     Ç ë9\   462"Ç!0!!0/!!/!   r ë ÕN   462"r))))   + ëŽN    462"6462#"+##ç)##)  GÿÀ¹x 	 "  !546;22#"&"#"5454>3¹þŽ>&ª&>º&, 	SBR!+'@2!--!†"9$f6’$9"  kÿÀ•ÿæ    "  2#632#4>32#63012#5>s0Æ.
	&
	
	
	&&	
  d ²› -  7#454>2#54&&54.#"&/&6n
14/31 
		#,
			²&-F'&G-
		   t ¸Œ    7"&54>2"&462£éÝ



  °ÿ×P @   ./3 ( 
))5	9  ¹ E @   73"./¹Œ@
		   Ì $4 m   753"&Ìh ( @--     Ì E4 „   753"ÌhDZ**  Š Ntw   74632#"&5ŠE0 66 0Eà?X)EQD&U=     Ô q* ’   %"'&63276# ÿq  Ä Â< æ    7"&=4623"&=462#Ð
^
Â    î œ «   %#"=4;2#œ    |ÿÀî N 	  %2!5463Œ&<þŽ@&N,"@@",   ÝÿÔ€ O   %'5KKXOss   À ^©†   2#"'&'&'&'&54>50DD03"6†X>>T-)E(     È ‹AE 
  %7&'7&'7(a8>÷	u&‹ 
 _ ¢   %"'&6276#5   # ¬G º   %#"=4;2#A¬    ù Ñq õ    %".=462#"&=4632#e
eÑ   ‡ pÜœ =  %0.'675&'&'&'&4#&57>32"'Ñ		

+0!		

8= ! 
Î4*0	-0D	$-     © È Ø 	  7"&462Øí  ÿüÿÀ Á Ÿ   62#"'#5&?6&54ƒ%
			1 N	Ÿ$		,K4 Y			
   g F ¹ —   7/&?6­::J9:   5ÿÀþ _   57&55L(F%@^!1   mÿÀ5 _   #./>75€$H)K@.$^     •ÿÔÕ ^    %76&6676.ÕPCþÇ7
#U:3j
	V	7 5ÿÔâ w   5654&5252	 MV,K 	<  ‰ÿÔ5 w   .'>375+(3H1,&	 K  9g    %53#"c!G:;   Ug    %53"c@h((      pÜ‡ *  %&&6767656'&>32&'6·	=(&J %!00‹
			

2!!C,     œ @Ôx   2#"&"#"5454>38 $	SBR!+'x!1f6’$9"  €ÿÀò m   %2!546;53Ž&>þŽ>&!h@-!22!---   Em „   %53"hCZ**     Ã N­w   74>32#".5Ã+ 6D1 5 à8()E)=U&D(  qc ’   %"'&63276#8q  œ ²Ô .  7#&54>32#54&&54.#"&/&4§
 13(*"
		#,
		²&-F''<%
		    ý Âu æ    $"&=462"&=462#

T
Â   ' œK «   %#"=4;2#Eœ    œ/Ø³ *  '.'&"&'4&&'4>7>?2Ö	9#< (60Be
!   ÿÿêt    %01"&64>53'&98j
'		    èÿèŠ Q    7'&54>016'&'7>ö"ˆ

"O
!@

)#!
   +ÿÀG    %3#+U +ÿÇG     462"'4>32"&+1		9     œ Ôx  (  2#"&"#"5454>3#"./8 $	SBR!+'3Œx!1f6’$9"þÈ	  m m   %53"&h"$"@--    äÿÀŽ @   '39Uª@€   ÎÿÀ¤ O  #  76&'.74>7>542Î$
	
#Ö
		
		
		@00	    ' œK «   %#"=4;2#Eœ    œ ²Ô ,  7#&54>2#54&&54.#"&/&4§
 13031 
		#,
		²&-F'&G-
		    €ÿÀò r 	  !546;2òþŽ>&ª&>@d!--!   œ rÔª   2#"&"#"5454>38', 	SBR!+'ª!9$f6’$9!     ÿê u    6.>7#"&46;2Âdãã0!!		     Um Ÿ   %53"&h!' q..    wm µ   %53"hCŒ))     Ã €­¨   462#".5ÃE`ED1 5 >XX>>T&D(   £c Ä   %"'&63276#8£  œ äÔ¿ /  7#&54>2#54&&54.#"&/&4§
!*)%(*"
		#,
		ä&$<'&=$

	  ý óu    %"&=4623"&=462#	
]
ó   ' ÎK Ü   %#"=4;2#EÎ    ­ ÜÅ&    "&462"&462Ü÷%    Õ ^¿†   74>32#".5Õ6 0ED1 5 ð)E(X>>T&C)   u ¢   %"'&6276#J   9 ¬] º   %#"=4;2#W¬    Ñ‡ õ    %".=462#".=462#{
f	Ñ    ® Áæœ /  7#454>32#714&&54.#"&/&4¹ #"31 		#,
		Á'4%'F-

    ¿ È×    $"&462"&462×Üü%    G N d   6"&=462[	N	««    € N œ\   7"&=462ŽN	òò  ŽÿÀ  N 	  !546;2 þŽ@&ª&<@@",,"  ÿÀ’ N   %#'’-;&NŽŽ    ëÿÀ¤ N    %#7'7;#22*Ž+2NŽ2NN2     ­ Pæ‡   2#"&"#"7<54>3J'+!RBR ,'‡!9$|’$9!     }    %53"&d N33**   V} ’   %53"d@j((     ¹ÿÀ¹ @ 	  %2!5633Žÿ ª@xx9   ¹+¹²    54>32¹ÿ 	7(#59%'&'  ¸»À  !  326?#"."#"&?4>32ºk/@	
/?.
k

	9	
}  ¸º@   326?#"."#".47¹k/@	
/>/@
		   ÿÀ ‡ «   7#5.547265'‡+#$p#pp#'??     œ @Ôx    2#"&"#"5<54>%&', SBR!+x!9$|’$9!  m m   %53"&h%%@--   œ ²Ôk '  7#&54 #54&&54.#"&/&4§
8
		#,
		²&‹Œ

	     ÿÀñ N 	  !546;2ñþŽ>&ª&>@@",,"   › OÓ†   2#".#"#"7454>37&, '3 S †"9$f5‘-
  ÿÿÀt C   '326?%@ƒƒ  ßÿÀ‘ Y 	   %#'7'?01#7> ÿ	-Ž-		YL%$$)	88	)$$%L     Ò À    3#ÒÎÎK  Ç ²«    2#"&"#"&=435#326232œ$##$ÇÇ+%%*999++    l {   %53"hI+PP     Sl ’   %53"hDh**     Â \¬…   74632"&5ÂE0 6DaEï>X(F(>UU>    b     %"'&63276#7  œ ÀÓ› /  7#454>32#54&&54.#"&/&6¦
!*)31 
		#,
	
	À&$=&&G-
			   ¬ ÆÄ 
   6"&54>32#"&462Û	÷
û
&

     ü Ðt ô    $"&=4>32".=462#
T
Ð   & ªJ ¹   %#"=4;2#Dª    €ÿÀò : 	  !54673òþŽ#ô%@2&	'     ¶  ¼ ?   %41#"&'5226¨H99IA\A>   ÇÿÀòÿë   3#Ç+++ ÕÿÀòÿÜ   3#Õ$  ¶ ¼ p   %012#"&54>9#=##=#6M#<p     Ê ¨ b 	  %"&462#9.AA\AA.  œ @Ôx   2#"&#"#"5454>38 $	
N'!R!+'x!1f6’$9"    /m m   %53"h9@--     GÿÀ¹ @ 
  !546;2¹þŽ>&ª.@2!-%    GÿÀ¹ÿë   !!GrþŽ+     Ä Â< æ    6"&=462"&=462Õ

T
Â    î œ «   %#"=4;2œ  ¹2GÀ   2+"&5'54ë*2tÀ788  ¨ÿÀW `   %#&74&47667>7>Tª  \
€x    IÿÎ»ÿÜ   !!IrþŽ$     cÿù›x  %  2#"&"#"5654>3#".'ì'&, 	SBR!+r
	
x"9$f6’$9"þÐ	     Ì 24 m   753"ÌhB@--  Ì E4 „   753"ÌhDZ**  Š Ntw   74632"&ŠE0 6DaEà?X)E)=UU  Ô q* ’   $"'&63276/q   dÿÀ› - 7 A  7#454>2#54&&54.#"&/&6#546;2#546;2n
14/31 
		#,
			+	Õ+	²&-F'&G-
		ö€€€    + À òÀ   2"&=46326œ$2;R:!À2#G*::*U"  ZÿË Â E  )  6&7.546&''&>54&7&54Ÿ/
"
0
( 	
##
	   9\ ä¤   ".'5#7Õ /¤HH     r «   #"&5'«	  €$ œ2   3#"&'€2  Z + Â E    7#&546#&54Â+/9+/9			   ? è  =  7'&7>7067>#4.5"&5./4'.6361.ÔA
:8/	,;8

   RÿÀ ËÿÜ    #"'&>;21#"&706;2#Æ!	t	@    9 2 ä ù   7#4>5/>?3ÌŽ		

9$Ã)"".    V ‡ Ç ¤   70#47614'3Äqo•   r Î «$   3"&5r9$9   $ÕÀ   #54632632ÕÇ"#2kGU"2  >ÿË¥ E  *  6&74.546&''&>54&7&54ƒ
/	#	/
(		
##
	     > +¥ E    %#&546#&54¥+/8+/9			     ñ >ä è  >  %'&7>7>7>1'0&45"74.'&'0.636	Ï	
C
!
"   5ÿÀ®ÿÜ    #"'4>;21#"&706;2#ª!	t
@  2Ç ù   %#4>5/>?3°	Ž

	9%Ã)"".  9 ‡ª ¤   %0#>414'3§qo• U ÎŽ$ 	  3#"&5U9$9 \Ç¤   "./#7¹ /¤HH  UŽ   "&/Ž   d$€2 
  3#".5d2  92z£    &76".'<O	Ž
	   ëÿÙa Ð   .7654&/47>?>1&*7

T6 ÿìª ê   './&'./&>76¡	#
			"& 
	
_3    ÿ •kS   %+&6'&6kF	.$¤<"?G    ¨ ª8   &'&7>7>	
1)$     –ÿÅ$ ¥  *  7'&6#"#"&/547:727>?32>12§	v
			
»   ËÿÀ¸   A  "&5"#"'&'0=32763272#7'&7>76746577>163	
—?	F
 ÿÀÁ     0#"1""/67676767674±	
				     ñMQ³ 
  &7>20)¬$,     KŒ   '&76.'#".7>46702Ci	
    íXWÀ   +&'46'&&'&76L
.£
	    ÿÎä•   2#"&"#".5454>ä89?0 y`x
	 0?• 0S5–N++%-0,
5S0      UÿÜ«” 
  64632"UdG.O.dŽ]¶;e<[     Á ? F   $"'&6276"D

,







     ä \ y   %#".546;2\     kä² +  7#&54>2#454&&54&#"&/&, 0>;6;>0 D.@+k?5X:((:X52
	(-+    « ‡U À    7".=46322"&=462¹‘‡    ÿÜ • \  %#"'#"'#"&'"'#"'#"'#"&547.547&547&547&5463&54632>326322ò		

			S-,P
			œ

				


%(*%		

     0 w¹² H  #".'#".'#".5'&'&767&54632>32632632632632¨	%#



	;	
O4	0)$!					    9ÿÜÇ‰   %2##"&'#.54>3>2¤		/D&9[		[z[ë"-G)XE NPP   ° …f Ø #  %&/#0#&'.'&'&67626e		*Ë	   Ê Úd.   &&#".767663>C
I*
.<     Q :  Þ   7&'>?6'&eR%=4*		:   aw¼ 
  '.7>b	,)³#,	    /3r›   '&76756&'#.7>2g

t

    eÅ   +&'&65&"&'&?6x	
-§		  Ç œª  $  &76&546&32+"&=46?p	—ŽŽ™	ÿ G	*   ­~c   %"&'./6'&6o
5Ù
#(5
       u 7 "  7"'&'./762227>37>12r
		

    s *   64&'"'"'&'&'457363#"V	

	  ¢ U Ô '  %"&#'#0#"'.'&'&>7>32>S	
	
)Ë	  B ”@   67'.#4676&74.B	%
%#
C
)    K & Í   7&'>?673*`		R(6+		=    ÷`P¼ 
  "&7>7
,
(´!, 
3K˜   '&7656'".>4632A	
u		


  õfVÆ   +&'&6'&&'&76N
,©  ;St®   &76&'<&F		š    þ «cZ   %'./46<&'&67676ZÐ	
$	3   GÿÀ¹ N 	  !546;2¹þŽ@%«&<@@",,"   c P›‡   2#"&"#"545>3 ÿ&, 	SBR!+'‡!9$f6’$9!    Ô * ¢   %"'&6276# ÿ    d Á›œ -  7#454>2#514&&54.#"&/&6n
14/31 
		#,
			Á',G&'F-

    Ä Ñ< õ    7".=4623".=462#Ð
]
Ñ    î ¬ º   %#"=4;2#¬    t ÈŒ    7"&54>2#"&462£é
í





     yÿòy k 	   #4>3"7#4.#52•(	ä"%6%"'&+   \ÿÇ ²  
  462#".\$#    kÿÕ ¤    462"k   +ÿÜ¤ @   #4."#462¤ 8!$/55   +ÿÎ¤ÿë 
   4>32"&24632#"+\$				    Î 2    73'Îd223GG   Î U2 ”   753#"Îdk))    Š ^t†   74632"&5ŠE0 6DaEð>X(E)>TT>    $m m   %53"h'@--     ÿÀu à   +  $"&=462"&=462##'.'&6?6		Y	ê.
¼ü{
     ñÿô R   %''.7>0>76€
//
	2@  //:

%

   Og™ 	  462"&5&&t     ° MÄt   %01##".'"&54>3>2Ä		@+0"


ATA	
×06. 

4DD4   uc ‘   %"'&763276#:	
u   @ EL ¤    %#"4;2#.'&676C

		Ó	•&	     « ÅÏ} *  014&#".5#"'.7>327>32Ä$	"(%>*0+9		
8(	'   ° ²Ä Å    $42 42²þì²   ò ë€ ù    %#"4;23#"4;2#]ë  GÿÀ¹ @ 	  !546;2¹þŽ>&ª&>@2!--!   c @›x   2#"&"#"5454>3 ÿ&, 	SBR!+'x"9$f6’$9"    Ì $4 m   753"Ìh'@--  Š Ntw   74632"&5ŠE0 6DaEà?X)E)=UU=    Ô q* ’   %"'&63276# ÿq  Ä Â< æ    6"&=462"&=462#Õ

T
Â     î œ «   %#"=4;2#œ     ÿþ À    7#"'632%2#"&46ÇcF@\@\\¤F`º\@œþÓ\\     ÿÀ Õ @   7#52£Õ¡@!G€    « k  ¹    %3#"'.'7#"4;2«UG‡% œ Ü¹   $"&=4632±		Ü	  ‡ æyÀ   .'&54632632yL%3('""'})Q	):''      œN   #"'5g/&N5H)B$     k U ‡   53#"'U
‡     « 2 ¹   7#"4;2+«   G Ü d   6"&=462[	Ü	   +ÿÀ  @   %3#546dœÕ!@€G!    ÿþ ÇÀ   7#"'632ÇcF@\¤F`º\@    9 ‡ À 	  2#"&46Õ@\\ÀþÓ\\   œ Ü¹   $"&=4632±		Ü	   ÿþ À    7#"'63254632#"&ÇcF@\r\@Fc¤F`º\@€€@\þF`      ÿÀ  @    7#52;#546£Õ¡¼£Õ@!G€€G!       N    #"'#"&=.=65g/& &/gN5H)B$<þÄ$B)H    k  ‡    53#"'%#"'.'5U
 ‡    «ù ¹    7#"4;2!"4;2#+£«    G Ü¹    6"&=462"&=462[	G		Ü			  d  N   #"&=.=6 &/gNþÄ$B)H    « k  ‡   %#"'.'5 ‡    Î «ù ¹   %"4;2#Õ« œ Ü¹   %"&=462«		Ü	    9ÿþ À   %54632#"&9\@Fc¤€@\þF`    +ÿÀ  @   %3#546]£Õ@€G!  œ Ü¹   %"&=462«		Ü	      ÿÀj   7!26360ò$þéM‹|bZ“LM'(     ÿø N    7#"'5>5672#"&46í]<%"	x9Î%""%Gdd}:K¢
|ÐþÊdŽd  @ À ª   # .  72742#"4'#"4325422#"&54232#"&542Ž
\Ž    ‡ y c  *  72#"424"464"4"#"2#"&547&54632Žòc
		

		
     ÿø í ü   7#"'5>56í]<%"	x9}:K¢
|  @  ² ª    72742#"4'#"432542Ž
Ž     ‡  ¤ c   72#"424"464"4Žc
		
     ÿÀ	k   6#!J„þ÷ZLJ'(WQ    ÿü Þ    76#"'56+x8]<+ô|:K
°   1 ƒ £ ® 
   7"4325423"43254284ƒ    x   ” g   7"424"464&432 	
   ÷ÿÀ k   !6767#&'&7> þ÷„ZþfQW('JL    "ÿü     %#"&'676Õ+<]8ô%°
K:|  ] ƒÏ ® 
   %"&54232#"&54232ÈNƒ l  ˆ g   %"&547&54632#"2 
	    ‡ æyÀ   .'&54632632yL%3('""'})Q	):''  ] ƒÏ ® 
   %"&54232#"&54232ÈNƒ  « ‡U À    7".=46322"&=462¹‘‡   @ÿÀ«À   #  %#"=4;2#5462"&546322632Eç$
G>h><<œ <<

?#ZZ 5ÿÔÕ ^   %76&6ÕPC:3j    •ÿÔ5 ^   7676.•7
#U:
	V	7     ò ~ @   73#"./òŒ@	     d ²› -  7#454>2#54&&54.#"&/&6n
14/31 
		#,
			²&-F'&G-
		   c @›x   2#"&"#"5654>ì'&, 	SBR!+x"9$f6’$9"    Çÿù9 @   73#".'Çr
	
@	    RÿÀÇÀ   .  #"'&>;21#"&706;2#2#"'.54>76Æ!	t	 .$(
@ . %      RÿÀÕÀ   '  #"'&>;21#"&706;2##54632632Æ!	t	^Ç"#2@«GU"2    eMœª   &76&546&p	™	   @ÿÀ«À    #5462"&546322632d$
G>h><<<<

?#ZZ  « ‡U À    7".=46322"&=462¹‘‡   ü ¼u à    $"&=462"&=462#		Y	¼   ' •L ¤   %#"4;2#C

		•    ý Âu æ    %"&=46323".=462#	]
Â   Ë@     "'&#"&763"'&'"&76ìH

    œ yd ²    7".=4622"&=462«	ª	y				     Ä Â< æ    7"&=4623"&=462#Ð
^
Â    ù Ñq õ    %".=462#"&=4632#e
eÑ   ý Âu æ    $"&=462"&=462#

T
Â    ý óu    %"&=4623"&=462#	
]
ó    Ñ‡ õ    %".=462#".=462#{
f	Ñ    ü Ðt ô    $"&=4>32".=462#
T
Ð    Ä ® f   %#".54>32®E0 6+0E?    Ä Â< æ    6"&=462"&=462Õ

T
Â    « ‡U À    7".=46322"&=462¹‘‡   « ‡U À    7".=46322"&=462¹‘‡   Ä Ñ< õ    7".=4623".=462#Ð
]
Ñ    ü ¼u à    $"&=462"&=462#		Y	¼    Ä Â< æ    6"&=462"&=462#Õ

T
Â     G Ü d   6"&=462[	Ü	    G Ü¹    6"&=462"&=462[	G		Ü			   @  ² ª    72742#"4'#"432542Ž
Ž     @ À ª   # .  72742#"4'#"4325422#"&54232#"&542Ž
\Ž    1 ƒ £ ® 
   7"4325423"43254284ƒ    • –j‡   753"&•Õ>U=ùŽŽ*99    x T‡À    2"&'5463265"'3269",NoNL4856\0*>µ)!8PP8d4L¼G29>.9    kÿÀ• ‡   %2!5463j+þÖ
‡*  £ÿÀ\ N    %3#'3#N«NŽŽŽ   ÜÿÀ« ²    73"&53#5353ÜGÀV8²+«+  Ò ¬. Ã   73"&'Ò\Ã   ñ ä ò   %#"4;2ä  À@2    "&=4632"&=4632Ô[		   8 –‡ 	  753#".8Õ>*0ùŽŽ*9.    T*À    2#".'5463265"'26Ü$N7%=$K5756\=U>µ"8P%?$d4L¼G29>*99     ÿÀ8 ‡   %2!5463+þÖ
‡*  FÿÀ  N    73#'3#ñ«NŽŽŽ    ÿÀœ ²    73"&53#5353GU9²+¹9     u ¬ Ñ Ã   73#".5u\	Ã     • ä ± ò   7#"4;2ªä   c ã2    ".=4622".=4>32qa				     ÜÿëÕ ²    73"&5"&=7ÜGù2F2m²+
=#11#=  9 –‡   753"&9Õ>U=ùŽŽ*99     T+À    2"&'5463265"'26Ý#NoNL4855\=U>µ"8PP8d4L¼G29>*99  ÿÀ9 ‡   %2!5463+þÖ
‡*  GÿÀ  N    73#'3#ò«NŽŽŽ    €ÿëÕ ²    73"&5"'.5153623€GU$

"-342²+9)6$VV   v ¬ Ò Ã 
  73#"&'v\		Ã     • ä ² ò   7#"4;2«ä   d ä2    ".=4623".=462r]						  GÿÀ« ²    73"&53#5353GGUV8²+«+     = ¬ ™ Ã 
  73#"&'=\
	Ã     \ ä y ò   7#"4;2rä   + «2    ".=4>322"&=4629c						       d¹‡ 	   %3#"&5%53#"&rG

þŽÕ0+=²+
	rŽŽ.9      k òÀ   7#'.=2675"'5632632ò(€(=U>56\'=",Ü0%n*99*G29Y0)!   ÿÀ  ‡   72!5Õ+ÿ ‡*Ç  GÿÀ, ²    73"&53#5353GG×U9²+¹9  GÿëÕ ²    73"&5"&=7GGŽ2F2m²+
=#11#=     G d Ž ²   73"&5GG²+       « Ã  &  #".'&'.7>3>".'&'567>Ã& @%	%
DþÄ

D.1¼Â+,
'$þè
¾?+˜    r 5º Ã   %3#rHHÃŽ   ÿÀ  ‡   72!53326?Õ+ÿ F‡*Ç"   ÿÿ{ ð   %#".'&'.7>3>*'*i
 	:ê6%ƒ	%	"  äÿÀ    73#ä;;T   ¥ÿë_ ®   %"&54767>?74'54.'S7L7
3~'&77&
    Ù  + 3 
   %#"./7#"4;2+		3

   Ë C8 g    6"&=462"&=462Ü

N

C  „ÿÀÿë   2#>76;32>?Hû	
	    F 5 v ! %  #"&'&54767>?56'.'3#õ 95
	<þ_HH?;/"$	
	Ž f «Æ í    %"&/7#"4;2Æ <Ã [Ò/     "&=462"&=462k		Y

    ÿÀ  ‡   %3326?3!54+G	Fÿ ‡	"Ç*    “ Öv &  #"&'&'5<767>7574'.'È 8 5
<?-!/"@
	   : « š í    7"&/7#"4;2š <Ã   . ¦/    "&=4>32"&=462?
Y

  9$ÇÀ  "  ".'5#7%2#"'.54>76Õ /2 .$(
¤HH. %    G >ä•  & E  "&='&7>7>7>1'0&45"74&'&'0.636Õ);*»	Ï	
•U**Uþ®
!

#"     @$ÇÀ    3".'#'%2#"'.54>76GŽ+%9 .$(
œ#2G. %      9ÿÀÕÀ   * 7  ".'5#7#54632632#"'4>;21#"&706;2#Õ /ŽÇ"#2+!	t
¤HH9GU"2þ2   GÿË¥•   2  "&=6&74.546&''&>54&7&54Õ);*<
/	#	/
•U**UþC		
##
	   9$ÕÀ    ".'5#7#54632632Õ /ŽÇ"#2¤HH9GU"2   FÿÀ¸À 	   !546;2 4632"¸þŽ>&ª&>þdG.O.dŽ@2!--!7Y>1,>    b Ašx   2#"&"#"7454>3þ'+!SAS x"9$f5‘-
    y$‡N 	  !#"&5y$>%8ON  €N€‹ 	  !5>2€ÿ CB@N   r@Ž«  %  2#!"4372##".5"&463276276‡þò§		N]     ÆÿÀ;  !  &'#>?&'4'&6?3:D
j			   Pÿç¯ O   ) 7  7/4>016'&'7>/&?631&?60'½!ˆ
"¢?>Ã>N
!@		)"!
%  äÿÀ     %2&#".'&601#7>32 	"8				T     Š )u 9    642242ŠË)     Ë 3 m   753"ËhBPP  Ë E3 „   753"ËhDZ**  Š Nsw   74632#"&5ŠD0 66 0Dà?X)EQD&U=     c ²š… ,  7#454>2#54&&54.#"&/&6m
22032
		#,		


²&-D#$D-
		     s ¸‹ 
   %"&4632"&54>32‹
é
	Ý



     Ó q) ’   7"'&6276#þq     Ã Â; æ     7"&=46323".=462#Ï^
Â   í œ «   %#"=4;2#œ    9ÿÀÇÀ 	   !546;2 4632"Çþr2#ä#2þŽdG.O.dŽ@$22$MY>1,>    t Œ   "  753#"./"&54>2"&462Â|)
!é077®



     ÇÿÀ:    #>?&'4'5>?9&
B	     CÿÞ½ G   ( 5  %/4>676+.//&?631&?6' ;;aTUºT @
((
F		    äÿÀ     %2&#".'&621#> 9	,		    "n 3    642242¿"     Ä m< ¼    %"'&763276#7#"&46;2# )	 )m:		  } åƒ   2'"/"'0'0''&'463 :I<'*

C@8';('#	$
#(7    9ÿÀÇÀ 	   !546;2 4632"Çþr>%È%>þŽdG.O.dŽ@);;)[Y>1,>    Â > g   753#".'Â|)
077     CÿÞ½ G   ( 5  %/4>676+.//&?631&?6' ;;`RQ¸Q @
((
F		    Ž !p 2    642242ŽÁ!     Â :> „   753"Â|PR22  m [“G   !#*.'&'.7>€'
	G !«
1,  Œ @t?   "&54767>?56'.'fD`D#  31HH1(
   Ä d< ¥    $"'&763276'#"4;2)R	 (d(     À Ç@ ï    6".=462"&=462ÐcÇ    Š Nsw 
  7462"&5ŠDaDDaDà?XX?=UU=     Ã Â; æ     7"&=46323".=462#Ï^
Â   À Ç@ ï    6".=462"&=462ÐcÇ    NÿÆ ë q  +  '&>5.7&'&.'.'&'&6z	
h%3	"$	!   
 H Ã  @  7'&'.'&767>6.767&76>7.'&7>"&P&p
$L				
    w þ ”   3#"&5w   1x Ñ·    6"&7#&6:	—		µ.##.   Hÿ¼ ù— 
  (  6'&"&76''.'&6723267_,
m
	N	‰þY     ý Hö Ã  ?  %'&'.'&767>6.767&76>7.'&7>"&C&#p
$L			
    ! ?Ð Ó   %#./&7.57'6;132Ð
&!"&»
 N š£ þ   %#".4543532£9Æ		
++ \ Í• å   %53"\9#Ù    1 ÓÀp   "&=À*;*pV**V  $7Ï~   ".=#7À%~G

G    \ á• ð 
  %#".=•ð    . ? Ý Ó   7#./&7.57'6;132Ý
&"!&»
  N£)     42242N9  j þ‡   3#"j  #xÄ·    6"&7#&6-	˜		µ.##. ;ÿ¼ì—   *  6'&".76''.'&>723267R,
m
	N	‰þY	  [ š ° þ   7+".543532°9Æ
		++     i Í ¢ å   753"i9#Ù  " þ éš   #54632632éÇ!#2EGU!2    >ÿÆÞp   4  "&='&765.7&'&.'.'&'&6Í*;*/h
pV**Vþk
3	"$	!    1 þÜš    ".5'#7#54632632Í /Ç!#2~GG9GU!2   i á ¢ ð   7#".=¢
ð     [ °)    42242[9    NÿÆ ë p  *  '&>5.7&'&3.'.'&'&6z	h
%3		 	$$	*!     
 H Ã ! F  7'&'.'&767>6.767&76>7.'<>7>"&P&p
$L			
  ý Hö Ã   B  %'&'.'&767>6.767&76>7.'&>7>"&C&1p
3$L	
   ! !Ð·   & .  %0.'#1&'.=/6;132'6"&7#&6Ð&!"&“	˜	»!=	
9!â.#	. R ©ž þ   %#".543532ž	

9	É	
++ 1 ÓÀp   "&=À*;*pV**V  +7Çw   3".5#'2Ž+%w#
1#  \ á• 
   %#".=73#"•ð  N£)     42242N9   . ! Ý Ó   7".'#1&'.=/6;132Ý&"!&»!=	
9!    ;ÿ¼ì— 
  +  6'&"&0236''.'&>723267R,
m	N	‰þY	   ` © ¬ þ   7+".4543532¬

	9
É
++   0 þ Ûš   2#"'.54>76 .. (
	š.@. 
   >ÿÆÞp   2  "&='&765.7&'&3.'.'&'&6Í*;*/h
pV**Vþk
3		 	$$	*     8 þÎš    3".5#'%2#"'.54676?Ž+%H .. (
w#
1#@.@.   i á ¢    7#".=73#"&5¢
ð   MÿÆ ë r  )  '&>5.7&76.'.'&'&6z	
h%(%	
#	/	*!   I Ï   @  7'&'.'&7>767263.767&72>7.'&76"&S'	
	+i
0%M
!
     Hÿ¼ ø— 
  *  6'&"&76''.'&>723267_,
m		
N	‰þY	    þ Iõ Ï   A  %'&'.'&7>767263.767&72>7.'&76&F'	
	*j
M
!		
    5 *» Ó   %&'#&'&676.5.'6;132»	
(
	!"É#$#	2 
 R ©ž þ   %#".543532ž	
9	É	
++  ãÕœ   #*.'&'.7>3>—Q#-— d	 1 ÓÀj   "&54767>=6=&'·	*;*'

E+*
  Y ã˜    %#"&/7#"4;2˜
'ó    Q# :     "=42"=42a?# #xÄ·    6"&7#&6-
˜		µ.##.  C * É Ó   7&'#&'&676.5.'6;132É	
(
	!"É#$#	2 
  ;ÿ¼ì— 
  *  6'&"&76''.'&67232>3R,	m		N‰þY   _ © « þ   7#".543532«

9	É
++     + ã ãœ   #".'&'.7>3>¤ Q#-—	*d	
	    >ÿÇÞj  5 K  #".54767>?6=&''&765.7&76.'.'&'&6Ä	*	'
²
h	E+
þ‰

(%	
#		/	*    f ã ¥    7#"&/7#"4;2¥
'ó  ^# ­:    "=42"=42n?#   0x Ñ¶    6"&7#&6:
˜		µ##.   ÿÀ ¼   %!6547>5>2òþ dG
! ,dÀ,€**c¨<
<     F &¹˜   2#"&"#"7454> &+%
bNb$!% ˜(;$y@##­	5%   9ÿÀÇ $ 	  !546;2Çþr2#ä#2@$22$   uÿÜ‹—   %3#535.5462‹6**ª*,RrRä;]HH2E'Jii  G ¤¹¯ *  7#454>2#054&&54&#"&/&S&:=8=:&
7&4
	
¤25U//U5,
 %	


    Ð ]0 |   %6"'&>2!	5	 y	   ò • ¤   $+"4;¤  ¹ ÀG ë    7".=4623".=462ÇlÀ				     w\‰ 	  "'6727‰,¹-
#¢#k
	  t Œ 	    753#"."&462"&462Â|
5÷077
Í&   Â 6> €   753"Â|PO11  ‡ ?y_   74632"&5‡G2!8 GdGÏ;U'B'<TT<    Ä m< ¼    $"'&763276'#"&46;2#)R	 *m-		   ¹ ÎG ù    $"&=4632"&=462#?€Î				   —\f|   #"'6732I,:<-"*'{

  Â > g 	  753#"&Â|)077	    i ]—™   #".'&'.7>7>-46@D #*8 E‘G1TW1	$%6     † BzC "  "&54767>=5&5.'kHdH
&!	32HH2(

    Æ a> §    $"'&763276'#"4;2+R	 )a-     ¼ ÉD ò    7"&=4622"&=4632ÊnÉ    Œ\t} 
  67327"Œ$/3%/Šf

     ¹ ÀG ë    7".=4623".=462ÇlÀ				     ¹ ÎG ù    $"&=4632"&=462#?€Î				   ¼ ÉD ò    7"&=4622"&=4632ÊnÉ    %ÿõã¶   #"#".'&'.7>7>KJNfc(;	U/m«eFu~	F?!+4I     RÿÎ­< %  %#"&54&>767>7574.'˜	.P/He

!6/
,â&.P0gG
)	
	     ˜ h È    6"&=4>32"&=462³	Ÿ	     ¥ \ a    $"'&763276'#"4;2?~

	
/0	>&

&


		


5     ˜ h È    6"&=4>32"&=462³	Ÿ	     Wÿï©%  2  '.'>76?32'&"62>7.#"½,,B41%5+f%

0(^(0<&39I(

,'%>c$%		8]\8 #   eÿÜ›k   6462"e[€[[€Q¥uu¥u    W ©©%   %.#"''>76?32œ<&3F%

,B41%©!#'%
	
,'%     « •U Î    6"&=462"&=4632¿†•			     G º¹¤    2&/"'0'&'0''&54> Qh5(28+I¤c:K
9-+0 76.   R ?­< A  7&54&>767>7574.'654&'#"'.'&'&'Z

!`
,	"(&| 
)		,* D/'   +ÿÎÕ… !  %2#"'"&'#"&54>32>326²		
_€_
			X7%A/ù!PkkP!AR&B+   U ë«²   4632".UdG0P+*S\S*9e2H$   ´ L k    $"'&63276'#"&46;2 @17				    œ Ü\²   #&7>7 /ª+²<
+99     N Î¹À     32>? '.>76462"U#>$/"+ÿ +$			++
‹  Õ+@   462"Õ$$   œÿÕd @   7&54616;20#".Ê.ª.%%   tÿëŒ   )  %"&'.5453536"&462"&54>2NhXÛ@--­&



   ‡ îy‡   &546;2.' #
?+/;
76)&43'(#     ‡y‡   '  &'#'6321#"&567'676732T#9:Ûcf	/d3LZ<
	(
C
!     9ÿÀÇ 2 	  !546;2Çþr2#ä#2@$22$   œÿÀ‚ 2   #6732»NT4'k@M%:    t Œ     753"&".4>2"&54>32Â|'/E

ð
077Ó





  ‡ ?yk   74632#"&5‡F21I 8!2GÏ=_`<'C&T<  ¹ ÎG ù    6"&=462".=462#ÍdÎ			  ë § ¼   %#".546;2#§	     ‡ 'x ­ - 3  %>+"'0".'&5467>626&"Z	


A			Q*B 			
	"
"


   € æ€‡   &54>;2.' %) 3=:3,#4*)%    €	€‡    )  &'"1'#6303#"&567"'676732Y %<=çil	1k6V`:		+F$!  9ÿÀÇ 2 	  !546;2Çþr?$Ç%?@#33#   ^ N§š   #".'&'.7>3>869‘"+?"Q’K3´4. &7     œÿÀ{ 2   %2#67c(f2NT28/M%  Õ + k 
  73#"&5ÕV	k9	  Î +2 r   7353"Îc>@22    € 2€?   %#".54767>?'45.'pK5/#
G!ý64L#/*
	    Ç N9 œ    %"&/7#"4;29&Gk	#  ¹ ÀG ë    7".=4622"&=462ÇrÀ				     ² ã|j   %"'.'.>76|?.=5ã
@  Y Î¯¨   &546;2.'1(&Z<+DQ%++6#;7IG98"     Y ý¯¨  ! .  &'"1'6303#"&'67'67>732{*2%QQþË3hT3"/" D}?():_(04   ¹ ÎG ù    6"&=462".=462#ÍdÎ			  ¹ ÀG ë    7".=4622"&=462ÇrÀ				     . ÀÒ¤   #".54>2Ò{W"@4&+PpP+),= ##  ÿÎò² !  2#"'#"&'#".54632>326É6M,BgiE.O6
 %6%4S/gO%Qd-S5   Œ ²t ã 
   7"'&?63"/&6Ÿ  ¾  ²   € ù€    %#"&46;2+"&46;2r++½++ù   ¬ T y    %"'&63276'#".546;2 #$#K   Œ ²t ã 
   7"'&?63"/&6Ÿ  ¾  ²   ºNFÀ 
  462#".º):)) ‡!!/"   +ÿÀÕ‡   $"&'.467>32Õb„b
4K+Ad¬. ITTI .!5T0iP   Ž ²r Î    %#".546;2+"&46;2d++		¢+		+²  Áÿþ? *   "'&763276%K
	


	
	
	    ä 2 N   %#".546;22     « kU ¤    $"&=462"&=462Mœk				   $ yß• 1  4.#"./#".67>32632Õ
2!!0		
(.*+/(*E80
08$#54   + \Õ y 
   %462#".462"¹þrk		    « kU ¤    $"&=462"&=462Mœk				    ÿÜ ¤   %#"&'.5467>32 @\4Oz~S7`?
¹1N-aKPk1U5     œ d Ü     62>"&54>6462"&462"õ
$*$
=•\	$$	K   2 N 
  %3#".= N  ¢$C»    #"'&7>26764'.&762 
	3

K$	
	'

?     ¢$C»    #"'&7>26764'.&762 
	3

K$	
	'

?     œ d Ü     62>"&54>6462"&462"õ
$*$
=•\	$$	K  cÿù›x  &  2#"&"#"545>3#"./ì'&, 	SBR!+r
	
x"9$f5‘$9"þÐ	   HÿÀ³À      %3#'3#01#"'&7>7>32U++Õ+++2ob8	83X(@€€€d		(9    •ÿÀk O  &  76&'.74>7>542•$
		
"Ö
		
		@	00
		   ^¨¿ 
   #"'67567+52ä6H=0¶	S1	-’Œ
¢‘   ¹ G @   73#¹ŽŽ@9   Ì 24 m   753"ÌhB@--  Ì E4 „   753"ÌhDZ**  Š Ntw 
  7462"&5ŠEaDDaEà?XX?=UU=     Ô q* ’   %"'&6276# ÿq    dÿÀ› - 2  7#454>2#54&&54.#"&/&6/3n
14/31 
		#,
			 1²&-F'&G-
		ç9   Ä Â< æ    7".=4623".=462#Ð
]
Â    î œ «   %#"=4;2#œ    œÿÀd N  $  7>2&'.74>7>54œ		
"È
		
2
''
  ÇÿÜ9 @   73"./Çr
@#
   Âÿù> g   753"Â|&0RR  t ?Œ_   %"&'.54>32>2632Œ
DZD
>L>	Ý	
4FF4
	

)44)  Ä m< ¼    %"'&763276#7#"&54>;2# )	 )m:	   }ÿÀƒ  $  2'"/"'0'0''&'463'53 2!<'*

D? &;('#	$
#*Cþ@+   ¹ ÎG ù    6"&=462"&=4>2#ÍdÎ			    HÿÀ³À      73#73#01#"'&7>7>32€++Õ++V2ob8	83X(2rrrd		(9  9ÿÀÈ 2 	  !'46;2Èþr>4«4=@,88,  €ÿÀ€ 2  	  763#72#€+Õ+.rrn  H³À   01#"'&7>7>32«2ob8	83X($		(9   hÿÀ™Œ    #".'&'.7>7>'532!/‡")
; K…&5 §/+$2þC+    ‡ =u8   %"&54767>?54'.'gFbF	Bû21GG1'

   Ä d< ¡    %#"4;2"'&763276#)	 )“/    ¼ Â@ ê    6"&=462"&=462ÏbÂ  c A›x   2#"&"#"545>3 ÿ&, 	SBR!+'x"9$f5‘$9"    Çÿù9 @   73#"./Çr
	
@	     ¹ÿÀG @    73#/3¹ŽŽU1@989   d ²› -  7#454>2#54&&54.#"&/&6n
14/31 
		#,
			²&-F'&G-
		   } åƒ   2'"/"'0'0''&'463 2!<'*

D? &;('#	$
#*C   òÿÀÿù   '531+  h X™Œ   #".'&'.7>7>2!/‡")
; K…&5 §/+$2    Ä Â< æ    7".=4623".=462#Ð
]
Â    ¹ ÎG ù    6"&=462"&=4>2#ÍdÎ			    ¼ Â@ ê    6"&=462"&=462ÏbÂ  ÿÀä‡   2#"&"#".5454>ä89?0 y`x
	 0?‡ 1S4–N++$./-
4S1      UÿÎ«…   6462#"UdŽd.?#GO¶€€[-Q;#   Á ? 8   $"'&63276"D







		   ä N k   %#"&46;2N				   \ä¤ -  7#&54>32#454&&54&#"&/&,%.41;>0 D.@+\	?,M7*(9X53	)-
*    rkŽÀ 
  5?77r*++*k++    ¹yG¤     462"&462"64632"òAj…  « yU ²    7".=4>322"&=462¹Žy			    « yU ²    7".=4>322"&=462¹Žy			   ÿðÿÅ À ]  %"&#'&'0767"".54>?*.4670'&7270'&2<>32>326#Ç		2A7eRv		


(U82	}2	yA*$)	%
"6%	 '2		%   DÿÎ»y 1  %2+"&5.5.'&634>7>32œq'	'&Ü+24
+$#	@    T¬Á  '  676''&'&%'&7&6767676U
	#
W
$		²)	
	+##+	
	)    ÿù} Y   %6'."&'&6326f
!&!	 .@T#

$	   o R   %&/#"'.?3267n
23

=:'!		!+   ´ H &   %&#"'&663276F#& 
				     g “™ ù    7/.>76&'&>À"¢""	ë###	
  z ›„ í    7/.7>76.6Ã
•ä	     ^ ¯¢ 
    ,  6462#"6462"'"'&6323"&463276 
	‰m=./		P		4'.»		-			   ² GN € &  $"''&5427632>54676542'!B
		
G   ’ÿÒm 
   "'&"'&67627676"Q4	>	%

     ÿÀŽÀ   %+".=463!2Ž
,r4" •
/>8&9MAò!  b Çb    .6>&·-6.¡&.	'.W2;"2;!?2!;2!   ‡ Ù‰³     .  "&464632"'"'.?>#"/&>Ü]	


BB	P	BB	*K	V		UU		V	    Œ t y "  %"'.#".7>32U
(	

		    P "“ ©  ,  %>>'&'.+"&'&767676		
2
!
	

5‡
3-,2*     Û •ò ë   %2#"&1#"&46;6ËÅÅë$$    ÿÎ ² 7  #".#"#"&+"'"&54>75462>?462 	!$+%/#[‚[$20!A>
.A\\A)     œ /€N     462"64632"".6œa"!/9?8 
/!"*<++<*    + ëd$   $462"+û    ÿÀÿ B / [  541>20414>320346210#"&'504'<!41>204146201462101"&'&<5&4#	"G`G##"G_H	****  Uÿë«@   6462"UdŽddŽOddd    @ cÀv   2#"1"5.''&54±žqJvqO)%7_
$%)O   Ç $9 ²   !  73"&'7#".=462"&=462Çr&		U		@
N				    U«À    2"&4264&#"¹ŽddŽdvjKK5#;"À2G22GN)   ÿÀÿ B / [  541>20414>320346210#"&'504'<!41>204146201462101"&'&<5&4#	"G`G##"G_H	****  @ $Àv  %  2#"1"5.''&543"&'±žqJ‡r&vqO)%7_
$%)OÅ
    Ç y9 ²    7#".=462"&=462ä		U		‡				   Ç $9 ²   !  73"&'7#".=462"&=462Çr&		U		@
N				    ÿÀòÀ   %".5462ò<RO*OR<ŽÈŽÎ/fI00If/dŽŽ    7 É&     .6>&"'&6276ŸB!GC!ÇBG!CG!E

,

BG!CF"ZB"FC!~



		    ÿÎ ¤   + / 3 7 ;  %3#%3#3###5##5#5#5353535353353335#;5#73#%3#r99þã99V999GVG999+V+ª9q99Èþ999dddGGGGdd9999rrrd       Å  "  2#".546$#"/&63267Ž)#6g#/ 6‡9'#!>-/9!     a Ÿ&  2 P  7"&'=47'.>#".5'547&'&6?6#"'4.#"&74>2â<

<U%&"*"ö
			
+þõ  ÿÀäÀ /  %#".=#"&="'"&=.5462ä$#ƒÂƒÜ'>-,,->'h||  U N«@   %  6462"6462"#"'00&1#"&54762U*;**;*;**;+		*Û;**;));**;):		     ÿþdÀ   2#"&'546326ÇA\cŠd;)	 À\@€F``Fª);   ÿÀr @ 	  %2!54639"þŽ!@!GG!   r Ü     6"&=462".=462†dÜ		   9ÿÀ9ÿù    3#'3#+ò999   Ž  ä ‡   73"&5ŽV$‡U     9 N9y   "&=>5€%G,KjKy!H5KK5V     € k ò ‡   7"&/ò&‡
 9ÿÀœ ²   #73œcU@ò    G ²Ã ô   %#+546;76Á	G!&	ä    G ²  ë   %#546;72 VUGVÜ	  ¤ « Î ¹   7#"4;2Ç«   9 N l    %#546;72%"&5 VUGVþ9 KjKÜ	Š™5KK5  € k ò ¹    73"&'7#"4;2€r&B‡
+      ÔQ&    7#".546326"&54>32S

þ
ý"    ) ÷I´   2'"/"'0'0''&546¹?QC,0K´M-A	',(&
*/K     k`¶   #*.'&'.7>7>ð$3‘	,?"Q®)9"³3/ &6     9 N9\   #"&54767>?'45'.')";#5K
G!6";#L4+
  € k ò ¹    7"&/7#"4;2ò&G‡
$   r Ü     6"&=462".=462†dÜ		   rÿÀŽ 2 
  !54>;2Žþä!Ž#$@$#*$    € y€À   #".=46;2€($2#V#2k«
«#22   Ë 	5 A   %4#"&546;326-!!@   Š Iu À   %3#"&"#"'5 u	>2>À.O(   œ c À   %"'5.5453c,Æ³$;;%   Û U$ q   %"'&6276 ÿU

  Í ™3 ¸    7#"=4;23#"=4;2Ø			I			™								     ð y †   %#"=4;2
y  s  :    7/&?6&?6'ÁBCwB  œ 2d À   72>753".5'©%2$	 & À-!&&
     ùÿÀ    73#ùU   UÿÀ« $ 	  !546;2«þª%"È"%@%11%   Çÿù9 5   %6"&546;32>0#,# 
4   Ð 0 G   753"Ð`1**  Ð !0 [   753"Ð`>4''  ” (l À   %"&'.54>3234130232l	4F4	®¢
(66(
   Ò L. ‰    $"'&763276'#"4;2?		
!		L	
$     É —7 ¸    6"&=462"&=4632Ø		M—   e › ,    7/&?6&?6'³BB“B  ùÿÀ    73#ùG   aÿÀŸ $ 	  !546;2ŸþÂ)¢#2@*2$   € y€ Î   74>32#".€#@'($À
     Ï 1 R   753Ïb1!11    Ï #1 i   753"Ïb<811  ˆ Fy8   #".'&'.7>3>'(*j
 .;26&ƒ
%	"(   ¡ 1\ ö "  %#"&54767>75545.'Q"'7
3Æ'"7'	
    Ò I.     %#"4;2"'&763276#	 	
	 u

,	
	    Ë ™3 ¸    7"&=4622"&=462ÕU		™     p ‘À 	  !  %!546;2/&?6&?6'€ÿ 2#V#2È>>‰>À«#22#þ¤  œ +d À   732>=3#"./©% (À.#",+    Í ™3 ¸    7#"=4;23#"=4;2Ø			I			™								     É —7 ¸    6"&=462"&=4632Ø		M—   Ë ™3 ¸    7"&=4622"&=462ÕU		™     ×ÿÀ ò    "&76'&;2ð
   ×ÿÔô Ú  %  7"56&/4327&7>732?0"òg		W'92/Y$
    Ûÿî îÿø   3#Û
    ãÀ !  603.76&54654632ä	!)²"(  «N ö£   462"«g##   ‘E ò²   2+"'&7>6Ï			
²		9		
    § ó'„   '&'&5'7'4>	
%*	;


	4	7  Mÿùÿ@ G j  74.1>/3>753>76'&#"&#"".&7>7>%#&#"'.7675367676'67>º
		+	
	1D			Ü


9
	(*$
  Pÿù Ô  + :  %67&27#"&#"".747762>32767'&05&76r	3+	
"
	+G
³	 **U		


     ÔTF 0 j  '"#&'.#'.762332>7676&#475&7"54>7605"'45676?>7614#'.63°¡		5<   œ D€½   25&>3ë1.6ã!½/5 ôô
(0#  G   #5""5$
ß     Æq¶   &'.6:E<3:  rÿÀ« N   #!"&=463!2«ÿ  $V    dÿÀ¹    #!"&=463!2¹þä$     ÿÀò ¤   * 7  54>32#54>32#504>32#54>32€òò		ò@99€€«
		«€€     ÿÎä Ü 	   !  7#".542"&542"&542"&542äV€$V $V€$Vkqœrrr¹r    ¹ ¤+ ù   726?+¹+	
Ü    Üœk   %7rqùrr  s@ À   .?3./€d+kG+    Lÿõ´\   .>*‹Ss‹SsŒRsŒ   U ë²   462"U;R::R%R;;R:   ? ×Â±  .  ?/#"&=%#"&5/&/.6?5OJ+:r:+x7(
[r!!r[
(   9 ÜÇÀ  2  ?3/#"&'=%"&='&/.6?53J	9*:~:*9	~ "1
Zq""qZ
1"     ª ÎV ì    $"'&6327&"'&6327R
+
i
+
ì     r ‡«À   4632#".r[A :*\A*H*$@\*:A\*H  U ¤«N   %!5«þªV¤ª*   GÿÀ¹ @ 	  %2!5463€!þŽ!@!GG!   €ÿÀ€ÿù    3#'3#rò999   Õ + ‡   73"&5ÕV$‡U     € N€y   "&=>5Ç%G,KjKy!H5KK5V     ä y •   6462#"ä
   ë « ¹   %#"4;2«  Õ + ‡ 
  73#"&5ÕV	‡U	  GÿÀ¹ @ 	  %2!5463€!þŽ!@!GG!   €ÿÀ€ÿù    3#'3#rò999   € N€l   "&5€ KjKl™5KK5  g Ô™&    "&462"&54>32š	"""   p ÷´    2'&/"'0'0'0'&546 ?QC,0
K´M-A',(
(/K   ä y ¹    6462#"7#"4;2ä
2    [ ô¥¨  -  #"&='&/.6?5777/#"&=—
3%2þî2%3
dP				Pd    V ùªÀ  0  #"&5/&/.'&6?53?3/#"&=œ	2&2þä2&2	†dP	++	Pd    ^ k§¶   #*.'&'.7>7>8$2‘"+?"Q®)9"³3/ &6  € N€\   "&54767>?5&=.'pKjK
G!64LL4+
    ä y ¹    6462#"7#"4;2ä
2    F ÌÃ  3  2/.'5'6&7>77.757&/.637Î
;$½!5;
+‹
"	\)M			4a\	"
     4 ÐÌÀ  0  ?3#'&/%.=7&/"&54>?3?7	,
<	<,	7q%*.
"	[p$$p[	"
	.*     p Î´   - :  2'&/"'0'0'0'&546"'&6327&"'&6327 ?QC,0
K—
+
i
+
´M-A',(
(/KÈ   ª ÎV ì    $"'&6327&"'&6327R
+
i
+
ì     ª ÎV ì    $"'&6327&"'&6327R
+
i
+
ì     Ð y­`   &?­Ó
µLÓµ  xö     >&6>&„*/*/BK*/*= r² 
    4>32".2"&4264&#"U			 $$+	£*;));H#    ÿÀ À   .'#"'632632,[<d))63GA1	 $A[$;5B€%3,~
\      ÿÀ+ @   %!532%þÕò$G€    äÿÀ òÿù   3#ä9      òy   "&=&'5>59%G,0&#0y!H)B$$-“   9 y « •   7"&/«&•	  \ « ‡ ¹   7#"4;2€«   + Ü ¹    7".=4623"&=46329l		Ü		 U @rk   3Ukÿ    · Ÿ†   %'.?µ³µ	 Z ~× ü    $.6&6.×/)/*M	—*/)	     œy»   #"&'&'563"#6323y)B&4$ *&@J3&¯$	
    ÿÀ+ @   72!5òþÕ@G€      
q    "&=&'5673

0&#0&Cu
!)B$$-•<K   9 k « ¹    73"&'7#"4;29r&B‡
+   ; ‹Wµ   %;
‹*ÿ     DW ô     $462""&4624&"2:##		à			/;));*Y##     †G¶   &&''567>	$ÛQ79	vJ       ò\ $  "&=&'567>?'45'.'â'#0	G 6'!"$$-†
  9 k « ¹    7"&/7#"4;2«&G‡
$   + Ü ¹    7".=4623"&=46329l		Ü		  «UÀ   462"«2F22FGG22G2   œÿëd   3#œÈÈþÖ     œÿëd j   75#œÈD+?a    œ Hd é   75œÈ©@a@  Ã Çd   3Ã¡N    €ÿÀ€@     +"&46;2+"&46;2€ÈÈÈÈ/þ¨  m3ü»    "'&7076‡

c73

XA  X°p   "/&47>š22  ‹ K¬l   7"/&4?62ø<		«<		T		<«		<    ‹ gl   7&4?62”		««		  +ÿë Ï   '7g<¨<<¨<    ÿÃ Ä    "/&4626"/&462tFFnn0FFUnn    ½ }0 ð   7'Ìddðdd    ½ § þ  	    7'6'>'7'&6Ì}
*

ð(")

    žÿÀ %   %"/7Ø(Op({¼§(pO'|Â       cZÀ 
  '5&54632âx¼z$O85œwÂz&58O   ÿìô 1 N  2&/&/"".'&6?>76>766.'&6767>Ê2! )(A+
		$,.%4',
#49^H*0!6  ,&Q
)&
<3
	
a	
&&*$ 	
)+	

!   ø Ï 
   761&'07010&1'&63ª

¡ï¡

¡Å

¡¡

¡       O y   12"/5463Ç!Ï9Ï!y!ÏÎ!   vúy 
  12"/63Ç$Ò0Ò$y ÒÒ    2€   %.'&54632632€P(7+)$$*Ñ+V	,=))    UÿÀ«    2"&42654.#"¹ŽddŽd|^C4/Cddd¸C/4B^  d ùœÀ   '73œœœ8Èy€€G    d ùœÀ    +733œœœ8ÈdœœyGG€    yœÀ   +53œŽdyG   œ Üd2    +"&46;2drr$$    ¹•   #7¹+Žd•€€   G •   #'3 Ž+U€    ÿë    3rŽÿ þÖ     ÿër•    73#Žrÿ ¹Ž+äþÖ*€€   Žÿër   3 rä*   ÿò J    2'01&'6!201&'&54>GGd	X8*""—%""*8X	.?JdG5B-þÓB5#?.    @ À ª   # .  7"432742'#"4325422#"&54232#"&542Ž0
\$    ‡ y c  *  >4"432#"424"6"#"2#"&547&54632‡òF
		

		
      ns   7"566./&$4q!				,*.¸½ +(%

,	     ó n s   >&#.'".54>Aq4.*,A½		$'     ‡ Êy¤   .'&54632632yL%%L'""'a)QQ)((     @ À ª   # .  7"432742'#"4325422#"&54232#"&542Ž0
\$   ÿùÿÂýÅ 9  %&'&'&'.'&>7&5'&76?676762>ò
?$WGH-	'>$9.		$
 *$,
.:(>'	)CAQ#/$   7ÿÄû‰ )  "0''.'.>'&462&'&>ò	 YQ_(&%#8N0
b++/
=11
0N7$%&(2©;;    C Þ ×r   &76±&!]!r'8!]!   Q é âŠ   '.4676³/!80N/ 	)  Â _V ó   $&76/'!]!ó'8!]!   Ï j`   %'.>562. 8	1Ï.!	 )  8 WoŠ 	   6'.76$&'&76†3="*æ5* ¥46?     ( Rk±    7'.'&767&'.>76•6$ä*6&Æ 'y?	,     „ Æ    560.!01&'&6760$9=;DE ((;=9$06…O5s-YY%45$-s5O      ÿÀ Õ @   7#532ÕÕœ!G€!    ŽÿÀ œÿù   #53œ@9    ÿæ ¡D   0154'5.'#"'*%")#D	9)"$ K    k U ¹    7#"'57"4;2#U
‡$    G Ü d   7".=462U		Ü	 _ÿæ D    #"'5&'&5476767>706 #)"JDþ´K $")9	     G Ü d   7".=462U		Ü	  Õ$+À   2+"&=#"&46;5462				¤	UU	     · ‡I@   ##5# IŽ@9€€  ä ‡ 	  %#546328ëdd   9ÿÀÇ À 
  %#!"&= ÇþŽÀr€€    % ;ÛR    %"/&?6'"/&?6ÇÀÀÇÇˆ>>G		G	@nnqq¹22		99	     €ÿÀ€ @     7#54627#54632#5462¹9c8d9GGdd$GG  ò”  %  46>.%46>.##	V##$
k+   ÿÇâ\   %.'&54632632âE,_K	I4@%%@4IàL–Ml33I44I   ÿû#²  # 7 H  "'&7>76#'"'&7>72#"'.'".5>7"'.'"&>8"	.
&
Õ	#	"8
	&#1
(M	M1M	     ÿÜ¤   7"1.'&54>32Á@NŸ%A&0&=
U>GkªV&A%fI^    Ôÿïþ¤   2'76/76r:R	CY.;AV:)¤R:2kSbcJ`*   ÿÎþ²  (  %.'&546326327.'&54632632`
m66m
8(22(8žL%%L(#"¨<tt<(8((8Ÿ)QQ)'    ÿÜþ¤   .'&54632>32þŸNNŸR:#<<#:RVªªV:R  R   !ÿþò‡  '  %"/&4?62%"/&4?62è

66

6þï

!!

!l6		67		7Ð"		""		"  A ¿k   .'&54632632¿
w;;w
>+6  6+>AA+>,,>     } Kƒ5   %.'&54632632ƒR((R+%%+í,XX,**   Ç ü¦ 	  7'&>åÇÈ	ÈÇÇ  #ÿÚæo   %.'&54632632æFEI3@%&@3IòM––M4I55I  ÿÃþÀ  1  %#"'#"'.=732476"/&í"#Q-þ&]

	R#	2P O

]     õÿñÕ Í 
  "/&6Á¾¾

¾¾

   Ò †< ì   %'&?>76<
!	Ü
      y  ë   %!.' 	
þrë
;   9ÿÀ Ç À   7'ÇGGÀÿ GG        Y þB   6/&=46ï		pp		p=ÑHHÑN   G • ¹   6462"G!0!!0·/!!/"     $ y    %#"'5326'&#">32 –jD<<Dh•};E``EÓFd3DÀ$:,>S    ; Åi   %.'&54632632Å{=={?-8!!8-?üB„„B-@--@  ÿÈø¸   / ?  7'&4?62"'&4?62""/&4?62'"/&4?62ðYYYY‚YYYYYYY0YYYàYYYYƒYYYY
YYY0YYY  œ \d$      7&47"'7627&4?'"/62à.ŒF..>.FÐ.FŒ..F^.  d 4œ¾   #".54.54632œ
'%_>?\#41
(*?\\   ÅÿÎ;ÿú   "&54>2262;(&(

  ³ @M8    "&='&679
55

//8
5——5

//    «ÿëU \ 	  %+"&=3UrªU    œÿùd k    "'&>376#"'"'&6?6"««	«««
9

    ÿÏôµ  $ 6 L  7'7>76/7'.'&'767'&7>?'"'./7?&0&?$î!$8 J<#	M?$!(/”
	,!%8 ?m,$8 J<#	ª!(/&?$"J<"
,!%8÷!(0&5  XÇ‡   7XPP7PP   ÿÀŽN   <62"u¥tt¥5¥tt¥u     Î¯o   7QPPPPQ ŽN À    462"Ž"/!!/p/!!/" «kä¤    462"«{  ÿëò•  7 O  %2+"54?#".546;22+"54?#"54>;22+"54?#"546;2Õ	œqcœr€V?9V?GV?9V?²		ª
ªGU
Sd
U
T      ÿ¾ À   7#'7#7'59«rrŽ*œ«V«œqŽGÀ+€VÈr«VrdG     ˆ «[   ?#/?#?/5?FK0*TSK"`5+.6 gL2E&,	<!$     ä ”\   %?#/?#?/5?2	"
#'
õ	+ 
 ÿüÿºË 	    6&/'.?'.?E4g+*4$J²G&:^%u ?µ+ggŠ¦]K<½Û>9'ƒ   bÿÃ¶° 	  %&'&6?“# uƒ#†Ã9‚E 9)Z&ë      ÿÀ À 8  %#"&'#"&545&'347./32367./7&54632 K5!9

%0F:dq1R- Vq
*K1$FfK55$,;ë(	 %5K %"0
&4E.A    ÿÀ À ,  %#"'#"&5467&546?&54>767&7Ý#=+h3I?0E&
	
"+4&1 v/+=C/"7*	4+##     Ž ¤€$ 
   74>32"&74>32"&Ž*Ž)ä&5%%&5%%  „ ™   -  74>32"&74>32"&&63!2#".'«
€¥ 1%
ä					w
    µ h N   62"'Ð|'f&N     ã;‡   5ã7;LC     ÿ¿ô¾ Z  7>&'"'.>14767>7>32#'&>/&3#"&'&¶KYS8W~‹6>#	G$;$(
	ƒ%@14BBfr
7


	
    Çÿõ¼ e   &'&667676%-%.":5@     *ÿêÎ    &'&'76&'1.&76L%i¹N	>>‡F%=F¦0.54©¹i%O
?>%Fˆ=F0.Q_54   (ÿØ[ ý   "/&?'&6;76232HI
G
XZ
G$44W3UU3W     ÿÎ ²   2#"'67.54–Ô–EuF?h2,2²uR6\5J;HQ.R    r ÎŽ   !  6462"6462#"'4>32"&äaôß      ÿÜò°   +  #"'#"&'.5467>32632 4632"ò"1.  .+=)%U6(E);þ$21"":+/ .2@$:þ¶$     ÿÓì¬ O  &/'&?'&'7'6?'&'7'6?'&7776777637'&/'Þ4+20
""
02+4"-6)-	0**/	-*6"     ÿÊô›  ' > T f  "&77632&'/7&'6327&#6'/"'7'673:3%#&'22327/?&'67'&'67?6e.!"!Ú"!.!æ/)&!Š).!&¬!!


(,!-"+-!,!"þ·("S)¤,!!,"

     ÿæô¶ + Z  ''&#"#76?7&/767'7"#"'&'632'"&'#'&67.'7'632>7
3-1.!!.1-3" .0$2??2$0. "!o%%"4(,/))/,(4"b&4	+%I4(""(4I%+	+F(   ÿþÿÎ	´  & 9 J Z n †  7"&?"'&7>372327"'&7>76"7#";>76'&"'&7>76"7#;>76'&"'&67>76'"'&67>72'9,—>'#=(.

š !.#>(.!!þÙ	3–MI/†		!]e˜LI”bZ•
´		Ï<3B<3BÃ1%2¬ ;"5 ;4AÄ,&1-&1þAV
     ÿÀäÀ   C  %+"'.547&5467>?3&"'#"&54>32326232632#"'Æ*ä$
UrU·

( 
l$/$%rrJÖ'		     «\Uy    +"&46;2UŽŽq		  «ÿùT$ <  %21"&=.54>3232>54.54>754>32#"&#"T#%+
&.&	"!&.&c"		   +ÿÀÕÀ > q  70#".=.54>3232654.54>75462#"&#"#"4;'&54632763232+32+#"&=#"4;Ö#	+'.'"! ~;)D	MLD);;;	
::õ#				
µi
rr
iB	B   GÿÜŽ¤    7#7'53T:œ::p;;;i;;bþs;;b   ƒÿÀšÀ =  %1"&=.546232654.54675462#".#"š:-.>/!(-4-5(%8	 %-4-v/9	"")'(5	"
)      y   !2#!"&5469Ž!þr!!yÿ !! !    ë 2   !! þ 2G     9 \Ç ²   7!!9Žþr²V     A j° ¥ 9  %"&'"#"'43"#"'&7>3267617632#'&#"
	1"
k					
	     ÿÀ $   !2#!"&/4>Èþ8$þÕ	+
       k   !2#!"&/4>Èþ8kþä

    dÀ   $462"6M66MšL66L6    +ëU    %!"&5463!2"3!254#ÕþV		ª	þMª+	 		ÿ 	ÿ    Ç 9k   3#Çrrkþ©     ÇÿÀ9    73#ÇrrU   2 g ² *  7#"4;'&5432763232+32+"=#"4;g"

(,,	'!!!"

"º=BB=&&     < ] ¨# 5  7"&=3.543232654.54675462#"&#"¨		£	

	    . u ¶ 7  7#".'#"4;<547#"4;632#"&#"32+032+32632¶//442
!‰.	%   / f ´ ,  72+32+"54654'#"4;&54632#"."„U

d #
Ê
 


	 ÿÿÿß í    %'&/&676367>ú
95L3–		!h%M1. Ø'#8³- ÿþÿê• %  >?62&/&7>£N•)%,J•."3¯%!7¯    ë «‡G   6462"ë-A..AØA..A-    ÿúæŠ $ F  "/&7675>7'>76'70367>7674/.·…	# 'J"
	„
 I,I"
	W.G#„	IG"œ			"2	
	-;9
-=-14    / („ …   %3'/N…    | 0}X   %1/6767}ž…»     ] 1 á º )  7/'&7>7>'&'&7'&66>Î	#	
"				  ÿåãÂ - Y  #"&470#&4743#"&47096?05267610101"&67#"&47215"&47#7107267076#1Î
G<þø
G; <G<G    ÿåÖš 
  ' 2 < O  %&77&"'&77"'&770#&77&"'&77"'&771#1/^	.0&þY^
	.0&Y
-=


‡	-<  ÿÀÀ   #!"&5463!2"þq!!"!!Ž!!   1 \‘ .  7#"4;'&54632763232+32+"&=#"4;;)D	LM	D);;;

;;ìi	ss	iA

A     ÿÜä "  "'&6?67676?62//9	
GC,+!G	B)4+I;$
+8dGCy
7#   U N d ²   73#U²d   d N œ À   75œÀ9	d   GÿÀG \    "&=462"&=462o¶@dddd  ? %« ¤    ???šõUûRÀV¢+)y>*,   Ž N« ¤   %!"&=463!2œÿ 		 		N	9		9	    9 $U y   %!"&=4>3!2Gÿ  $99    r N€ ²   %3#r²d € N¹ À   %5¹À9	d d ¤Õ ë   %32+"&=4?6¼G	Jë
#		%    x ¥Õ è   %&=4?6ÕI		JÝ#%  G ¤ ¹ ë   732+"&=4?6 	GJë
#		%  \ ¥ ¹ è   7&=4?6¹IJÝ#%    k¹²   %#"&=46;2€ª!!ª""k!Õ""Õ!   k«²   %#"&=46;2rª!!ª"k!Õ"Õ!   Õ@d²   3#Õ²r dÿëœ ‡   "&=462Œdd   œÿÃœ ‡    ?"&=462@UÉ8k+Ndd    pÿÃ Õ Y   ?y	U8k+N    ÿÀ k   %#!"&576;"&=463!2#32äþ8
r"EEóó

      ÿÀ ÿÛ   !#!"' þ8%   G [¹N   %#!"&=463!2¹þªVj		Ö    ,ÿøÕ 1 "  %+"'.'&+"0##"&?63!2Ô^
z
k

o		
	    ÇÿéF    #"74>56;2>n	c
     ÿÀ À  $  2#!"&54>;546;2'354&+"Ç!!þr!U"r"ÇªrN!þä!!9!!9      k N   %#!"&=4>3!2 !þr!Ž!¤!!q!       ‡ N   %#!"&=4>3!2 !þr!Ž!À!!U!     Ç ¤9 Ü   %+"&46;2988À  ÿÜä¤ 
   %"&4632"264ä†¼††^>i=Ô  À^††¼†=i       7 1ÉO    7'67'6Ä2du2dÇG2d#G2d  qÿ÷‰    %67'67d>#d3G„dd3    + y    %+"&=46;2 •V   ÿÀ À    ".54>3!23#9r+@Ž+þŽ   G ²« Ü   754>3!2G*²
	     GÿÜ«¤   #  5!#!".543!2#!".5;5#GdþÖ
G ÿ «GG¹¹
žŽŽ      ÿÀ À     "&462"264 –Ô––ÔX$$*Ô––Ô–Õ$$     âa    7'67'6½Ÿ	8qƒŸ	8qÇO9q&O9q  _ÿÞ¡¢    %67'67q9O q9P}q8	%q9     ÿëÇ•   546;2;2#!"&!]€!!þ«!$8!!ñ!!   ÿëä2   2#!"&526=46;2>3«""þŽ!"€2"Õ!!		Ž"     ÿë !  2#!"'.504532?>;2>3ÌþŽ	%€'!¸
:7!   ÿÀŽÀ   #!"5463!2Ž!þä9!!rU!   9ÿÀ  k   !2>=463!2¹þ€!"@"#'  9 ¤Uk   * 6  #!"&463!2#!"&463!2#!"&54>3!2#!"&463!2Uÿ  ÿ  ÿ  ÿ  \			<			6		A   î ÙÕÀ   "''7&462Í7€7	8	6€6	    +ÿÀÕÀ   ;#!"&54639
€!þÈ!!À€þÕ!!Ž!  d $ÕÀ   # 1 ? O [  ;#"&=+"&46;2+"&46;2#!"&463!2#!".5463!2#!".5463!2#!"&463!29
€€"*	rr		rr³þäþäþäþäÀ€!€lA	H			7		G9    ÿÀ y   #!"&5463!2 !þr!!Ž!!!G!!   ~ÿöŠ Ü  '  %#".54;2#"&547'#"&46;2#"5PRuO	
e

°	¢	š
·    À   2!546;2654'!2654'äþ /À     " õŠ  # 4  4232+"5'42326=42#".5#"&543232=42»
#b	
	H
	P2

23	> G$äk    % - 5 @ K   462"'462#".462"&4632"462"&462"'462#".01462"&Ç				+			33				,8			-3		"3						'     ÿÀò‡   #!"&5463!2ò"þŽ""r"!!U!!   +ÿÜÕ2   #!"&5463!2ÕþŽr   ‹ÿõ| Å  %  %#"4;2#"&547'#"546;2#"5IJh
H	[		(	’Š	¥    + ÜÕk 	  %!5463!2ÕþVrÜr  @ éC  $ 5  4232+"5'42326=42#"&5#"&543232=42Ù
	"
\	


79
	A#

#$	.  U ëÇ2    ( 3 @  $462"&4632"&462"&4632#"64632"7014>32"&«33					"#ó3							   €N€À    "&=462#".=462œä\		VV	V   ÿÀ    2##!"&="&=463Ç!!!þä!!!!!€!!€!!  UÿÜ«À    %#!"&=463!2#!"&=463!2«þäþäë¹þUœ   r ù ¤   +"&=46;2 rrŽ		 Ž•   #   +"&46;2+"&46;2+"&46;2ŽU		UU		UU		UAA	  « •U ë    7"&=462"&=462ÇŽ¤		8		8		8		    ÿÜä¤   2#!"&5463¹þŽ¤þŽr  ÿÎò²     " & * . 2 6 = A E L P T [  2#!"&5463#354&35'35#'#33535'#33535'35#"353535#;5#35#26=#¹""þŽ""r9UEUUUUVVVVVVrVVVVVVÇU9UUU99UaVVrVV«U²"þŽ""r"U9ãVVVqUVVrVVãUVVrVVÇ9UaVVrVVÇU9UUUU9U   (ÿëØ˜   "'.?>>/Gd
V‹œ
VR¸
V
þÕ
W—   (ÿëØ˜   "'&/&>76¹‹V
dRVœV
¸—W
þÕ
  dÿë ¹ ù 	  #546;2¹Uñ    Gÿëœ\ 	  #46;2œUU   Õÿë+ • 	  #546;2+VŽ    9ÿÀÇy   #!"&5463!2ÇþªV$€   dÿëœN   #!"&5463!2œþäG    €2€À   2!546;462dÿ 9$•GG    äy²   462"äŠ   € €   ) 7 E  %+"&54>;2+"&54>;2+"&46;2+".546;2+"&54>;2€€dääääää€€ù7AAA  µ uÀ€   %'7P›…†u›p†  ( èÿ¿    "/&462ÿ%4Y%4Y%Y4%Y    ÿþÿ½ Ã   70'&67Ç<œ^b4Ã<€J€=   _ y9   $"/&462y%4œ%4œD%œ4%œ  ÇÿÀ9ÿë   462"Ç!0!!04    ÌÿÎ4'   30#"&'Ìh
'ìm­V     Ž ÜrÀ   462#".ŽC^C4N/CC/4	    ÿÝü§ 5  %"#"'&7>/&6>/&7>76/&6÷E2.þú6JÓ(1 

¡	Ó3('7ç

è"Y2E(%6	Ó1(¡

¡	Ó5þû7'(è

ç"     ÿÈø¸   "'&4?62«/þ¾</B'B/<þ¾/   i )ç§       & ,  &?&?&?&?&?&?'&?‡

3



2



32

2F

a

2F

e

3G

d

2—

3

   ÿÀÄ    #!"&54626/&3ó
þV!Ét!ª
þtc     Ñ Ù¹À   "''7&54>32±	7€7	8	6€6	     ÿÀ¹À   ;#!"&5463€!þÇ""À€þÕ!!Ž!  G $¹À   # / = K W  ;#"&=+"&46;2+"&46;2#!"&463!2#!".5463!2#!".5463!2#!"&463!2€€!+rrrr³þãþãþãþãÀ€!€lA	B			B		A	A    * $¹ ²   %#"/.6?63¹U
!!
²Ž*)	   ) @ò ²   %2#"#"/&4?63Õr""²9!!    9  À   %#!"&5463!2 !þ«!Y	#N""C#    UÿÜä¤   %#!"&546323!2ä"þã"1"""V+"   9ÿÜÇ‡   %#!"&5463!2ÇþÈ8U   GÿÀÇk   #!"&54>3!2Ç!þò!!!!9"    GÿÀ«N   +"&54>;2«"ò!÷!!  9ÿÀ ÇÀ   3#"&546;#"€!=*'0	kþU!{.	   OÿÙ yR    '  "&4626"&4626"&54>327".5462y	



g

g_

  ÿÀ ty  - D Y  6#"&463"327676#"&463"327672#"&463"327676#"&463"3276b!!
	!!	!!	!!	
)		s
)
s	)
	
r
*	     òÀ   %#!"&5463!2ò"þŽ"Y%#N""C#    +ÿÜÕ¤   %#!"&546323!2Õ!þÈ!1*!""V+"   ÿÜ¹‡   %#!"&5463!2¹þ«U	U	  ÿÀ¹k   #!"&54>3!2¹!þÕ"+!!!9"    ÿÀœN   #!"&54>3!2œ!þñ"!!     ÿÀ œÀ   3#"&546;#"U">*&/	kþU!{.	   dÿÀœN        ! % ) - 1 5 9 = A E K O S W  3#73#7#5323#73#'3+3#73#73+3#73#'3+3#73#73#3#73#353#'3#73#'3#d**c99«9/l99r**ä99***c99r99999r**ä99***c99r99Õ**c99r9d99r**ä99N999889999999888889999999999999997r99999     œ ¤d ù   %+"&=46;2dŽŽÀ     \   2+"'#"&=463Ç!!¢0¢!!\!Ö""Ö!   ä $\   %"&5462@       2äk    %+"&546;2+"&546;2 ««ä««N ÿ      9 N ‡   %&#"#"&=4632632 +OLNã   NÇ‡   %463232#"&#" LO+Nã  ÿÎ Õ •   7+".>;2Õ*d		d*9#+*#9     dÿÎò •   2#!".4>3!2+ä		þª



V				$%$Ž    Ë ²  ù   %!"&63!2ôþð²#$G    Î Ç  ù 	  7"&>3!2ä	
Ü     ‡ÿëò y 	  !"&463!2æþ¶

J,5-Ž  „ÿöð y 	  7"&63!2¤
J\D"i      «²   +"&6;2«"99"N"ON"    3Ç²   2#!"&63!2+¹þ«U2		ON		c   Y2Ç•   !"&63!2»þ·I221c   \UÆ• 	  "&>3!2rIy$    + •   %+".4>;2!		!Î"!!    ª •    %2#!"&463!2+òþã²		(0(G   ÿÀ ¹ %  ".54>?62?622?6“%DxˆxD%E
E%›-5W/7iDDi7"A1*	JhhJ  9 \Ç ù   %#!"&=463!2ÇþªVyc     ÿÀ À   2##!"&46;4>3Ç!!!þ«!!À!/"þ«!!/"U   r2Ç\   5!r92*   ÿÀ ÇÀ   2#"'"&463246!"/!!À"þ£!!/"]     ÿÜ«¤ 
   , 8 F  "&54>32"&462$#!"&463!2#!".5463!2#!"&463!2#!"&463!2«Ef	ÿ 		 		ÿ 	 		ÿ 		 		ÿ 		 	“þaÜ		AAG  ÿÀ¹À   #!"&5463!2¹!þÇ""9!!!Ž!!   G $€\   ' 3 ? M  $#!".5463!2+"&46;2#!"&463!2#!"&463!2#!"&463!2#!".5463!2€þãÜ99äþãþãþãþãq	GA	B			B		  t ¹t   '&7676?6¹©
8¨"g—	‰		5
Š	     ~ > Ç '  %?"''5'7&547>76762%	
€	&  _ø¹   762"/&4h-		-		-		-	‚-

-		-		-	  © i¬l   ?'©¨[©-Ã©[¨-     x 6 ¡ a   7'&6?2¡		D Qä¤   7Q9Z8l8Z9 ]Ù™    7'7sZpZZDZ    ÿÃù¹   %.67626762äGMVNF1
:20L(:H:
1FNVMG1:#G4     yä\   %#!"&=463!2äþrŽ•«     $Ž \    6+"&46;2+"&46;2ÇrrØ
rrL
  « $ä \   $462"«4  
 x Í†     4 7 ; ? T W  %"54?63232+"=342&4"'"54?63232+"=342&4"'"54?63232+"=3^
Q,@	Q,@	Ú#
#==''#
"==''#
#      ÿÀ  Î   7!#!"&5"&=rŽ!þä!"/!ÎÕ!!!!Õ      ÿë 2   2#!"&5"&=4624>3Ç!!þä!"/!!/"2"Õ!!!!Õ""     Ž À+   %+"&=46;2+ccÜ  Ž äÀ 
   % 0 ; C K S [ c n  6462#"6462"6462"4>32"&74>32"&74>32"&462"6462"6462"6462"6462"7!546;2Ž
	,,~
9
	9
	r,,;Sþä!ª…		$
	
	
8ØdU!    Ç ä•   % 1 = I  $+"&46;2+"&46;2+"&54>;2+"&46;2+"&46;2+"&46;2ä	€€		€€		€€		€€0	ÇÇiVV›	3		33	i3			   /ÿÊ Ž 
  62.540Q+>>,ŽW33    & ³“   6.>76¦Y'†…57K.X^L65„†	    /ÿÊ³“    6.627.5461ó„59†…59ß:-+>>,.O…†95„†:)    ³ “G(    &?0gg(gg  ü\<    "&46I<    (¡~   "&54.'&'".5&632’
 '	
		 -Öµ "  "'&7>&'.#.672>Å
,
	$		     Cÿà Õ Ò   7#"&?>32¸:%
+!€"H    ª <þ    %#".4>32þZjRRjZî0R0.EDF-h  › <þ    $462"›))¥“hh“i    ‹ ÿR 	  %'"&4637 ÿÇÇ ‹5@6 ‡    ¨ °Ó, 
  $462#"¨
	Õ3$$    r  ²    62"&4264&"¤F22F2>/!!/"²2G22G\!/!!/    ²j 	  7%%5.467™þg

ùqþ¬q ,  r  k   $462"r);**;yŽddŽd    ÿÀ  ¤   #!"&=463!2 !þr!ª!!€    œ @d ¤   %"&5d;R;¤*::*     ÿÀ ÿù   "&5!#9! !@!!    q ÀÀ   ++"&=#"&?62†	D8D	p		G	VV	p		    p ÀŽÀ   2"/&6;546;2|	p		p	D8N	p		p	VV   9ÿÂ $ 	  0/&59Ç¥$¢  þÿÇÇ$   &?5Ç‹	$°m


¢  9 ‚Ç¿   "&/&4?62­¬

«ª¹†Š‰ˆ    òÿÄ š   ".=4632 <¸	¸	    v oŽ   %&=4'.'7Ž#
?><B7š´	*
2204(z    v ²   %&'.'?‰F?><)7î9
220!(   š ‡Ž   %54'.'7ŽT]7š´
DBH(z     š Ó   %&1.'7‰T]7îBH(   ø Ï 
   761&'07010&1'&63ª

¡ï¡

¡Å

¡¡

¡       O y   2"/5463Ç!Ï9Ï!y!ÏÎ!    vúy 	  2"/63Ç$Ò0Ò$y ÒÒ    Õ À*N   4;2+32+32+"&5Õ3&$$(6
<
     y d$   %  +"&46;2+"&46;2+"&46;2d	GG++			PU  6 $@   %#!"&?>3!2Ëþä0+\!«!!     = ,» Ï    76"1&'46101#5'&62÷¸
}mmÅ

„„

„  m m@   /5>3!2ü¼0"}+q!x!!  { ›ý@ 
  2"/63ÓËƒ#@}}      ÿÀ 2   #!"&5463!2 !þr!!Ž!!! ""   ÿÈø ˆ 
   76#&'35010/&60ª

¡ï¡

¡~

¡¡

¡      2   2"/5463Ç!Ï9Ï!2"ÏÎ"    /ú2 	  2"/63Ç$Ò0Ò$2!ÒÒ!   p ÎŽÀ   2"/&6;546;2|	p		p	E8\	p		p	HH   ÇÿÐ9 ² 
  &=462999!0!Ž""    Ž yä•   2!r/Cþª•B/«     y •   2#54_^Cä•B/««/      y ä•   2#54WR;È•B/««/     •    2+"&=#"&463är9  ÎŽ²   2+"&=463r²qª     •k   %+"&=46;2ÛÛµ–    Ÿk   '"/&'7'546;2EDG# "GDEÛKFD	G##G	DF       Ík   2"/>3üw
	x		kv
	w    Ž yä• 
  2#54.#r/Cä5•B/««5    ÇÿÀG 2   73#Ç€€2r   G $¹À   %#!"&5463!2¹!ÿ !! !\!!+!!   dNœ‡   54>3!2d 
N	     dœ\   !".=!#€ÿ 
8	**   œ yd\   3##"&/œÈŽ\Ç     œ y<\   7"&/53¹€GZyÇGs   Î yS\   7.>?3#&ÕGUoZù	GU‹s      ÿÀ À % 8  $2"&5'#"&462#>54&";46%54.54;2æ		ÕOqqŸp"NOpOO8Õþj«#	6
qŸppP93")8OOpOäO'+  Gÿó º ¤   7.547º!&,9!.R0

":      U T 
   7&'&6'&>7U$O
  9ÿÀ    !2>/463!:Õþd$+@&&&¯ñ	    ÿÀÕÀ   !".5463!2«
þV	!9Ž!     +ÿë€•   # / = L f  $+"&46;26+"&46;26+"&46;2#!"&463!2#!".5463!2#!".5463!2!"&'=4>;!2#€rrrrrrþÇ9þÇ9þÇ9þã	©			0			0	³		AA9  + • Õ$   7#"&'=4>3732¹rr•UU  dÿÀœÀ   ".5<>;2#œÈ@Žþr     ÇÿÀ À   ".54>;2# Ç@Žþr      äy     !!'&=#".=4>373546ä ÿ +G +		+ yþŽÕH**      ÿÀ À   !"&/4>73!2 þrŽŽ    ÿëä• ! % ) - 1 5 9 =  :+*.54>3#'757%'5757'5U		ª	¹È€HH9999¹H9999•þª		V	þþä¹c++d+G9+«++  g …Ç   / F  74632#".74&"2>746;2+32+"5746;2+32+"5g'(' l$4	4%o	4&  Ï ++  *#E
,r
,     +ÿë+• )  %3+*.5<>;:#5#3	«	«ÇÇkV		V	9þä    ÿÎò²    "&462òŽÈŽŽÈ$ÈŽŽÈŽ  Ž ry   7".54>;:#¹	Ž	
					þä	
     « @U@   3#«ªª@ÿ       ÿÀ À     2"&4277654&#"–Ô––Ô– N>þÁ1=iä>†^YBÀ–Ô––Ôþ²1?>N>i=IBY^†>    ÿÀ À   4>73!2#!".5Žþr‡þr   9 2ÇN       3#'3#'3#'3#'3#Ž99U99U88V99U99Nþäããªªrr99    9\ «‡ 	  4;2#9Ury     ÿù k   4>3!2#!".5Žþr2ÿ 
    œ $¹@   6462"œTvSSvwvSSvS    ¹ @œ$   6462"¹C^BB^ƒ^CC^C    ä kr ù   6462"ä);**;”;**;)   ¹$äN    462"¹0  9$ «N   +"&46;2«	G		G	B     ‡+À   '7#7'77äGVVUUG9V9U@9rG*U9UGG  G Î ä‡   77'7'377Ž*+++9*++ù+*++++9    ÿÎ«$ )  %27#!".=#"&'=432<>;3œÿ 8$$À»dŽ
-   €ÿÎ k ! ;  2#"'#".=4>373265<>;2#54.+"ò
$¸		œ	%þ˜’
Žkq		þc€	€€€     ÿÎòN   %#!".=46?!:òþŽr

  Ž9¹   /&6/

ƒ

,

ƒ

  Çr¹   76&Ñƒ

ƒ
,ƒ

ƒ
   G ¹$     &4€ 99ÿ 9$9«99«     +ÿëÕ     462"$462"«þt	     ò Ç   76&&ƒ

ƒ
ƒ

‚
    ÿÀ 2   !".54>3!2 þrŽ      9ÿëÕ½    % 0 8 @ K V d o z ‚ Š •  /&6462"4632"'4>32"&"4632"6462"6462"4>32"&4>32"&'4>32#"&5462#".64632"6462"&462"4>32"&ç




\.A--A*ò
	G	
;;
	
	Ž		
			G	
;›;
	Ÿ



þïA..A-c)j

	T2
>
	
		—	
D
	À
    U ¹ ë    $462"462"U**¤**s    $ k   %#!*.=4>37!2 þrŽ\Ö    ‡ä  !  2+".=4>;!3:+"&46ÇUþÇUU(>(rr(>(   @ä  - 9  #".=2654.#54>;+&473:"#!"&463!2©7Ö77Y	þV		ªTqTP   r ¤Ž ù    $#52463"Žþýà#U<#U    ¹ •G   74;2+"5¹rrùU     ÿëò² ( 1 : B K U a m  %3#'#+"&=.54623&54623'4.>7'"6?&37&5'3654'"630217&67&54='åE!Õ!;R:<C^C1%2 L)-W	-#B	
MÀœ**!!—0*::*/CC/'>	9ò0	U

l!0Q!!
	
&C!

     dÿÎr Î     $462"&462"+"&=46;29æá¦UUU }ÿÁÿ A 6  %7676&'636''./".'&4}
			
'



'   X' ™h   "&46†h  ˆ \‘    $"&46.462I“Sý   ¾o °   &462Òo  û}<¾    &462}    9vz¸    &462Lv    lU­–    &462U    €Á\    &462“    ‰ ÜÊ   $&462œÜ ‚  Ã á   $&462•  m d® ¥   $&462€d S ¡ m   %'&462""
b""     / ÷ p8   "&46]8   À Q   "&46>   „ C Å   6"&460Å    F I ‡   6"&466‡   *  k T   6"&46XT   dÿÿ ¥ @   6"&46’@   ¢ÿö ä 7   6"&46Ð7   ßÿý  >   $"&46>  d @d@    7&+532;#"'6¸**-O++%à'9%r9  d @d@   7#532>7>;#"Ž**++@9!	9#.!	   G ®y    55®ggg$V«þãU«   Gÿù¹‡  !  5#"&546;5+'732654'®gr#2/S;rfS;rggr#22V92#	(;S9Ž;S9UV92#	  G 2¹‡  !  %+654532654'75#"04546;5­S;#20gr-"S;rù;S2#	aV9!;S9     G  ò ²   6462"G2G22G9G22G2    { $ «    7#"4;2"5‘
wR    ÿÀ À   "&5463!2#9!!Ž!!@!Ž!!þr!    9 Çy  !  %'354&#"'6323#"&=#7#327rV92#	(;S9Ž;S9UV92#	gr#2/S;rfS;rggr#2   4ÿùÌ‡    %7'"'&?2?6'&"762<…(;¤;?:0*v*(?:0*v*)…(;¤„…(::?YD1))ò?YD1)))…(:   rÿëŽ•    %  2"&42654.#"6462"462#"ÅvSSvSkF2'#29NSvSSv2#'2FÐþŸ  a !Ÿ_    "&46 "&46‰_þû     + ¤Õ Ü    6462"$462"+a´     a !Ÿ_     "&462 "&462Ÿþû7þâ   
  ÿÀ À   # / ; G S [ f r  "&=462"&=462'2+"&463!2+"&46362"&4762"&47&462"'2"&4264&"'&462"'Ç9È9þÈ		(B(				(ÂjKKjK€**:*!¢(		k9þ89Ç		(B(		þæ		(5KjKKj|*:**!Ô(		    dÿÎ€² '  376;2##"./#*.=4>7€Ur	rU	2rþ8r
ª  ÕÿÎ€²   7576;2##"./Õr	Närþ8    3ÿåÛ   &462"¹þ€€€þ€   GÿÎÕ² # 4  376;2##"./#".=4>7"'&7654'&6dUr	rU		7	*+542rþ8rªã	"66#		+DC+    ¹ÿÎd²   7576;2##"./¹r	Närþ8    ÿÎÿ² ! 4  376;2##"&/#".=4>7"'&7>4&'&6VrrV		‚	&**&
+//+2rþ8rªþÇ!\e[!		$fqg$     rÿÎ²   7576;2##"&/rrNärþ8    c $Æ`   %"'&7654'&6v
?>

"%&"$
	3QP3	O,,P  < OŽ8   %"'&7654'&6Q	*+54O	"66#		+DC+     «NUÀ    +"&46;2U!8!!8Ÿ/""/!  UÿÀ«‡   +"&546;2«"ä""ä"!!U!!     Uÿù«N   !!UVþªNþ«   « U2 % 6  %2++".=#"&=46;546;2"&=4>;2#G+++cŽù+++	+ä		   »À    7/&6/&6©

y

Ý

y
Ù

x



y

  xÿÀäZ   #4'&//"&4?62ä90' F	)<(		G		A@=2
F	(<(	F &C   9† ¨   %'7†)F(b)G(  AÿÁþ ~   %"/&4?62í!0T(		"/!S)      >¾   6462"qŸppŸ®ŸqqŸp    : vH… 
  64632":O8%>$OpÆpO$?$8P     z 9 è ¨   7'À(F(¨(G)    ÿÁ ¾ ~   ?62"&4T	(T/""T)S!/  ~ >þ¾   6462"~pŸqqŸ®ŸqqŸp    · vÅ… 
  64632"·O8%>$OpÆpO$?$8P     + yG•   2#54&#"#54~vS92#(9•S;ŽŽ#2(ŽŽ;   ÿÀr Ü   #!"&=463!2r"ÿ !! "!!«!!    GÿÜÇ À   %'332>54&#"#7Çã­	­‡999dd ŽÿÜ  À 
  %#"/&?63 +,,ÀäYX  + yG•   2#54&"#54~vS92F29•S;ŽŽ#22#ŽŽ;   òÿÀòÀ ( 3  2#2#05#".=.5462'"2654.ò0&

&KjK€@)B@!		

ã	$15KK/   ÿÁþ½ & .   '"'.701&4?627&4?627&?&67664&"¢\.$c+Æ%8$.½[‚.$Å8+d#.‚    r yŽ•   2#54&"#54ÅvS92F29•S;ŽŽ#22#ŽŽ;   GÿÀ¹ Ü   #!"&=463!2¹!ÿ !! !!!«!!    w ¤ŽÀ   2#54&#"'> ;S92#.7LÀS;ŽŽ#2#.;  + Õ•   #!"&'54>54632Ž
þŽS;'A&%8 
!?+;S&A   ÇÿÀ9À    462""&53Õ$$*0!r„##þU!  ò @d‡   3'òr99‡þ¹UU     ä /r•    %"/&546;2"&2#7d--r
CU2DD	Gþ¹r.
þö.   Õ‡€¤   3#Õ««¤  Ÿ Rü¾ =  7>.'./76?>&'..ÕV&'5q  &0r
		5@U
& r

0	q
5    ÿÂ_0 7  %&'&4?>6'.>?2267(U'&6%r'&60r		5@U
&Ur
0	q	5   Ž Nr2   6462"ŽC^CC^‘^CC^C     ÿÀÂ  ( / 6 N Q o Œ  2#!/&4?64;2+"573254+3254+7632#"/##"&54?3'72#".#"32632#"&4646327632#"/#"5äþÍ	’	

±*,!ƒ*<	.)

 *)a	5	
)2		8	•Ub[þ·

L`Iu	'?!	
-D-	.8	(4	
=7	   ÿÁ Â  6 R a k  2#!/&4?64;2+32+32+"&574>325462#"/#"&5746;2+"&5732>54&+äþÍ	’	

°I
	40

06

K
†
]
]Ë
1167-3	,•Ub[þå	+	-	
¥
	|n¦
zm¥
:2.7#    ÿÀ Â  ' 3 V a o  &=#/&4?635464632#"&74&#"2674>32354>32#"/#"&5462#"'4632#"&5ö
	’	ž	’	

ž
þ<./<</.<¥8A
b
	bä
	

	abb[þv1AB01AA1) ))v
ƒu	°	
‚t
Ï		w

   ÿÀ Â  : E O [ g |  &=!"&=463!546#"&#"#"&54323254.546324632#"74&"264632#"74&"32>74323542#"/"5ö
	’	þÍ3
þô&&%B#$%&%B#)>>abUþ€	
	
]>)*)H>) )HCRIoQI     ÿÈ À  0 < J Z e  ++"&=#"&?62#"&54>;2+#"&574632#"&74.#"32674;2+"&5732654.+nV[× 	
	k	
 

`7,+87,+8™?3 ** ,%	33

	þº		‘R-=>,.<<.&'l'=&/U  ÿÎò² 	  %"&462òŽÈŽŽÈŽÀdŽŽÈŽŽd  T &¶N  ' 6 B  #"&546;2"&5747&54632#"&732>54.#"72654&#"‡9h+2%$3+-*:?			å:.#"+*#&0+4,	j     ÿÀ À     2"&44&#"6%327–Ô––Ô–ä†^T@A7þ8=i>T@þ¿7À–Ô––Ôj^†7þ¿@T>i=7A@    + Òk  " &  #"&54>;2"&564>2".4"g
C q3D33D3£g$		þóg>:5  5:>:5  5ÛÛ   :ÿç¼’   9 M V _ n w  632#"/##".54?3'#2#"&#"32632#"&54674;2+"&573254.+32>54+46;2+"&5732654&+r5K	93&	
((54®4"7
)
 0	--23*/){“
1Oº	##9+*9Ì
_	y‰	5.*3	 !   Tÿç¬ž  " B Y e { ˆ  7#"'#"&54>3246322>54&#""&#"32632#".54632462632#"'#".572654&#"#"'#"&546325462"32654&ß%E
C	
	!( L!$	FN$"E
æ*!
W

	"-	1		5.,
ð
-.5

K	    Xÿç­’  ? d } €  #"546;2"&5#"&5463232654&"&54>54.#"#"&5463272+"547>7654&#"#"&54632"&54?63232+"=3‰
	&I '$	
	
%¾Z
				
&"1	
='%%i™

e!$!



		c$!	$ !Ý
nS

oK   +ÿæË• $ , 5 A G X c i m u †  ?632#"/#"&547&54632327'"6544>2"&74"27632#".54764632"74"23###5#5%'#"&546325¶
%(!"&‚
$7B	[@#þ|ÇÇÇG9Gœ+!#5
	$	t	
4		ª	$,’*++GG+9+X$t    , g×;  ! 8 E e  7#"'#".54632>32264&#"7462632#"'#"&572654&#"7"&#"32632#".54>32¶%Ec

$	
EÀ
! !‚# ,	Xš

5#-

G
""    ÿÀò¿ &  %"&5477>'.677>'67òŽÈŽ:
*"( 5²dŽŽdYC8A+,0.9 9'#!$ A'78(   UÿÀ« ×   %"'&5477>4'6”GÆG3
E(k(.	FF	G2'.#A     G •œ ë   %76GÎ   uÿÄüK   %"'&4?>2ð'#þõ'3#'$'   G ‹5q   "/&?>23)R$Fr%$REr   d ²\   ?dŽŽÎŽŽ   ÿû °Å 
    "/&6"/&66"/&6œY98(9

9

k89V+9

9

   ÿÀ À 3  %2/.#"&547'#"&546>/&6326Ž/C
++	/C“/C
++	/C“¤C/	++
C/“C/	++
C/“  fÿÑïZ   .6&©þÊ"6#"6"þÊ#    «G¢ 0  #"&"/.>?627>9
	99c/' 
•
9
9d   KÿÁ u 
  %#"'7÷	
þ—CiC  |ÿÎÙ` 
    + 6 A L  "'&?6'"'&?6'"#&?6'"'&?6'"'&?6'"'&?6'"#&?6«555Q552U	U
+U	U
+V	V	*U	U
GU	U
+U	U
+V	V	     « $œ   7&?6'¹Ž*Ž\Ž+Ž    « $ •   ?/&¹G+yG*   + ¤œ   %'76ŽG*ÀG+     Î òÀ   &?6'Ž+Ž+     Î r@   7/&G+$G+   €N òÀ   '76äG+kG+   ¬ÿ³ é   './>?þab,!	,7!.      š _   '&7676'G%S%0    ÔË   &'&'.'&>76
 6))
#27	.		9     A ¹‘    462"&462"’\"_     ì ·7 Æ   73#ìKKÆ   Ó – ð ä   62&764'&7Ú
		ä,
		      rT 	  %#"/7;Tz*##zr&^_     _ ’    '76$4632#"õ	þf

 <O    1] 	  3#"&=46	]G		    E ê9   3#"&EôÎ     %ÿ÷ú‡ #  %+".546/&+"&=4632öx>Ã|NGm

	Ä3
 '.    1 •–U   %"'&'.".'&67>#‡Z'f%+k*i!•o
!~  p ùÎW    462"p'''' ~ÀI   4>32#".~	(	     º ‹ ë   %'7>!!?   ² „" ó    7"/&5746'7'Û!	Z>,E„!>[+E    'ÿÀÕ N   2#!"&4634623462¹þŠk1E1#22#   ¤ÿù¹2   2#"'3264&#A\\AI/x*::*2\\9:S:    !   ò Í    6"/&47>26#.67ò	
Œ	o	U		Œ	
	    O Ä–   '…?6?–@6?  ª |í¾     "/&462'&?6í	/		/	Øa

Œ
`

Œ
d	0		/	÷`



a

Œ
   Ä •P!   7Äu
u   Ç y Î   74>32"&Ç	#¤#  B Á@   %/&?6¯(°Í]L^   vÝ   %/&?6»ŠŠƒJ2J   ÀS   %7((ÍLK  œ iö Ï   %7œ(2(„KK    @G²    /&?6+"&46;2v2(?¶rrQ&K!þå     HÿÀœ Q     #7>'&>+5462‡?;§0;Ž9@~
	

ff

	
~r   OÿÀ² '   %#!"&'4?™þ×'FE     hÿð™ = 
  %#"'763!2™CWUB'76	  & 
Ù½   6462"&´€€´Š´´€    § Š‡– 
    $462#"462"6462"#2#‹%%÷2##0%%â    )ÿÚåP    "'&763!2 ¦a
´¹£°&"þÝKþã     ) 9å¯    %!"'&7632%!¸þŸ¦´
þS°9"þÝ+  9ÿÀ«Å   "/&54676þ#‰ˆ#	œ@+‰‰þÕ    òÿÜŽ¤   7òœœþÕ   UÿÜ ò¤   'U¤þÕ   c ƒ ƒ    7#!d:ƒ  ÿÀ À <  %'.54745126/'7675'73?'7'7>3#6ÿ~R0/S}*7@@@$ 1OkkO2 %@@@8©+x00x+*@@@$,	XNkkNU+%@@@)     U «k   %#!"&5463!2«þä2   	ÿÉ÷·   7&4?62"'âââ±âââ    d $œ\   7&?6'n

ˆ

ˆ

ˆ

¶

ˆ

ˆ

ˆ

    P N¾]   #!"&?62§þ¹™Sí

í
     P ?¾N   %&/&63!2™GI

ì

     d 2œk   7dœœ29þÇ     d œN   œœœNþÇ9   æ”„  !  32>32#".1'61ç			k$"e


'
"#    Fÿþ¹6 ^  >:>32'.=32654#"+#"&'.732>54&'>54#"h0@+		"#$
-$3-D?	 "

A'
		"		)'?.1=2%6p	.%   º h Û 	  72'&#"&7J8Û	     Ž €+²   &32432>'.>54&œG¤O(k$
d    -ÿáò­ U  7232>32>5422''3+0'./&'.54&#"763<>Ž	
	.0$

&	,2*D'.ë)<4 :

F		
    Vÿæ û À   7'&'&'.'&76c	= À1>X   _ÿÆ5 ›   3  72&'&67'>./.7>7æ
'


?			*	
N2
     ÿÀ À   %  ÿ ÿ ÀGþc     ÿÀ À     @ Gþc   ¥  ü      %'7/'%'5?<<d//£ ò
/ -I1,,       ¥  ü      57?'7?èº//W<<Ñ,S2.<
1  " ©î ô   +  %"'&54742"'&54742"'&5475420	d	Ué







    © T   + /  742"'&5442"'&54542"'&54'%Ð	_	P ÿ é


	





[36.    ð T   %  ÿ T31.     » ‡Ó‚   +"&54>G$Ú))‚)((/!#   œÿÀò •   #!"&=463!2òþè!›
     ÿÀG    #!"&=463!2Gÿ  $    ÇÿÀÇ k      %#54>32#54>32#54>32rV	r9
	Ç9	
	$dd"6BBBB
    +ÿÀ €k   +"&546;2€$r  -N }»   +"&546U(?(»0

0     Ž\    +"&46;27+".4>;2ŽU		UUU	*     ŽÿÀr²   #7rär@þ€€r    z,†Æ    "/&?6xhh

r

r

2hh

r

r

     ¶ ÑIM    %#"'&?632'3':u7<{q;Ñ``_    Õ + \   6462"Õ$$*    G !¹ |    7'&#"'54632'&#"=462r	
G	'@
@@     ÿÀ œ À   #"&=46;2œcG@È   § ¯ ü 	  7#&?62«œ22§22    ÿÀä À    73#546;2#€€HG¤ÕäÈ Q §õ ü 	  %#&?62ñœ23§22   ŽÿÀä ¤    %3#3#d€€Öää¤¹    ˜ò µ    6+".546;2+"&46;2«	€	€P	€		€­			    ¥ÿÜZ\ # '  7"/#"'&?'&76;763232+3#ý
		
				7VV¤l\    ¶ ²I.    7"/&76;2'7ý7u<=6;²aan__   
 'ÿëÙ† Y g u   ™ § ¸ Ë ×  3232+"&46;46;5.535.535.535.5353>53>53>53>562#".746&2#"&5>&2"&5>&2"&746&2"&5>2#".5>'2#".74>#2"&54>"2"&5>ÙvU+ä+8]6dJ@XH4/*

*;+4HX@Jd--	-	--	*14	U};a8Jl`@5N!2 0%
11
%0 *CN5@`lJc		





   9ÿùÇ‡   6462"9u¤uu¤n¤uu¤u    ò ²k   %"&=462Àœ		  ð ®WD    &?>@@Don  í ­‚    &?too@@  ò ²Ž Î   $+"&46;2Ž€€Æ   í m‚ Ó   $/&6‚oo…@@   í >S Ó   $/&6S@@Loo   ò 2 Î   %"&=462@€  ò ²k   75462"&òÀœ		œ   ­ > Ó   6&?6Å@@>oo    ~ m Ó   6&?6Œoom@@    r ² Î   646;2+"r€€º    ~ ­   >/~ooû@@    ò ²y   $"&=462²««   ´ ²E 
  %"/&6 	99²qr   ò ²N   $"&=462²€€   ò  Î   $"&=462««   í ²LE 
  %"'&?6 99²rq   ì ²w 
  %"'&?6 cd²	GH   ò ²Ž Î   %#"&46;2€€€²  ì kw Ô 
  %"/&6dcdkG	H   ò  Î   75462"&ò$œœ		   ­ ­B   6/­@@4oo   ò  Î   7462"&5òÀœ		   ò ²N   %"&=462À€  ò y Î   %#".=462	
Ž		+		     ŽÿÀ‚ ´   +"&=4>3272‚·
D3!¶	

  § ¸m¾   %".54>7>
,# 4
¸(*="
3C  Ü È;L   %"&67
È->+/$  €ÿë Õ ²   '  7#"&=4632"&=4625"&=462œ9$	cŽc		9		    ÿÎò ¤    "  73#"#%#.+5''2>4%3äUrÖrU«9r	V	r$9VV
9€€/     Uÿù«N   $"&462«dŽddŽêddd    ÿÀ  2   #  +"&46;2+"&46;2&#!"&463!2Žrrzrr	þ8		È,M			     € $€$   $"&462€KjKKjÙjKKjK   Ž 2r   $"&462rC^CC^Ó_BB_B   ¹ •  ²   %"&/632 ¤    ò ¤   %"&546?0Õ	
  ø › ¬   642ø›    Nò$   2"&4œÈŽŽÈŽ$?X??X    ®ä í    %&'5%&54â+þc®'9'    G Æ¹   2&"5> 3e!NÖN=D'%%'	   ¾1B¶   2#"&"#"546ñ##¶
 ,C   © §Vµ   "  462""&=46?254>3"&Î))k	­	[5%%5&		$	$((		    § »X2   2#4&/#"&/7'#<>å5& !	2

//"    ï(> 
  3#".#5ï"
>     ÐZ/‚    '&'.#'"'.762767>+
		  Ù`&~    "'.76236"'&54ì	,	{   ½_B¾ '  #&54>32#454&&54&#"&/&Â+_#&$     ýÿï+ # 	  %#"&5432'   Ôÿï # 	  7632#"&Ù    ß   ›    %"&=462"&=462 		$				qq		q   íDP 	   "'4613#P

     ÷[	a   27"'ú`   ªÿÂUÿß   462"ª2G22G5			    Ê ]4 Ã 	  %#.?3#GY]#45   « yU    7#".=462"&=4632ÇŽ‡rrr  Ç 9 ²   %3#5#'+++²dd     À,   %7 À[  Ô À    %'7 ,ÀH  ä À$   %'7 Àd   ò À   '7'7..  ä*    '7'ì0*     «ÿÀUÿÜ 
  4>32"&«'#22F22    ¶hJµ   "&547"41'676!),<,(‡'     Íw3   #''.5657326?3	!„     ËO6m )  6"'&/""'.54/&662762


l     ò  y   %2"&""56 yd  «ÿæU$    2##'#5#54632'&6769& $rrþù     ÿÿæ5  	  %2&74     Ç9n     3#&"42"4ï""r2S     Î%2›   "&462# *%"1##    í3Q 	   2"'&6;&27"'#
>

   Ë_5r    '&'3'3'ÓYe   Ô,$    53'73F    ¶ ÀJµ    '7'?"&547"41'676!),<,(..l'   «ÿæU$    ##'#5#54?32'&676;8= ii
þÿ     Êÿæ9ž 	   %2&74#".'&'.5>3> &0 ~#=     ï8   3#ï""8+  Õ%+   #"&54767>5765#&'&	i	
   í.I    #"&/7#"4;2


8
    Ô,$  	  '7'?F		  Ê.9ž   #".'&'.5>3>&0›#=   D D¼&  &  7&'&7&5462&5462.'>78GK%ü%17.87øC>	 t

t 
>C     +ÿÀÕ  	   !5463!2'2"&#"ÕþV2# #2Y@$22$Ï		   `ÿÀ “   7"'.'&c"FN| 
“ª;`&  ÇÿÁ ”   %04.5>76'&767676}<+'E"” (G3)   ÓÿÀ ”   %0'4.7>56'&767676œ	"{<+&F"”'d;)    [ Nœ š 
  %&67	š"	$    ` ~     7"".'&>„

		   ] N § š   70.'&76	š'"  r 2Ž•   6462"rSvSSvš“hh“h    k £•  <  7&47>22>3>0&'.'.+"'.1.m?(23			3î

		

   ) ëÍÄ $  >6766#"&'&67p	")
&1D(Cy"I+ ""
(  lÿÁ’a  *  6?'.7'.'&t(y1,‰!"FN	| 	Z	¬!*;a&    +ÿÀÕ  	  '  !5463!2'2"&#"'"".'&>ÕþV2# #2Yë

	@$22$Ï			    « U N   753"«ª&^9$  `ÿÀ, “   7"'.'&c"FN| 
“#+;`&   X N¡*   5  70.'&767"&?.6%2#4>46.'	!š'"Š


   ¹ ÎG ù    7".=4>322"&=462ÇrÎ		  lÿÁ’a  *  6?'.7'.'&t(y1,‰!"FN	| 	Z	¬!*;a&    b M¢   #".'&'.7>3>648Œ!$*+O‡I1¯2#*   „ 2|7   %"&54767>7554'.'mIfI

&"÷43II3)	  ë     %#"=4;2#    ] Nœ š 
   %&67'0.'&76	÷	š"	$'"    X Á¡*  )  "&?.6%2#4>46.'s!#


  lÿÁ“a  (  6?'.7'.'&t(y1,‰!"FN	| 	Z		¬!*;a&     jñ	 >  7&47>232>362"&'.'.+"'.'.fA	
(R0
	SS	
ê	
+)(((+
	     c Î é²   7"'.7472Õ 03+ÎDO(	5f 	    & ² òD   7".'&632ä2,1	 			²2""     ' $ ò ´   7"#&7>232#"#&9	*A(		t%$)'		n	     dÿÀ²  "  ".54676"'&7>54>2rD4->³+391@6Œ €.	 f5<s$  ²ÚD   %"&4632>76		+&*1,2²+"2    $Ù ´   %"'&"#".5463236"Ç
%t	(A*	$	m	') 	ÿÀœ ·   "&54&'&6”>-#9@.€UV"    «ÿùU º   6462"«2F22F1P99P8    Ç y9$   6462"Ç!0!!0«G22G2    Ç ù9@    6"'&54632"'&65462é
4
	ù#

#     ÿÎò² N X q |  š © · Ä Ó à ë ö !,6BMXcp|‰  7'&'&?6&'#"4;>/&5&6267542?632+3'"/&"=.03676'&'67676767&#75&'050'&#&'&#46767'0"176767#073&'&'010'7&'&'1302'021272747'3656704&'#?&5&'&'6763'74767#73&'&''7&'&''#6767'3676?6'&'#005&'&66'&467&707#7&734'&'.1?''7675_""		""*PO*""		""*OO*5/

C "
	
  "	
 (
.	
	D!I
	-.	
	D	@!
	-~5
/¼KL5JŠ5/
D5
/¼KL5J*OO*""		""*OP*""		""/J5U

 '
	" '
	>	!
	.
C	
!D	<
	.
C	
	 !;4K¼/
55
/=J5†4K¼/
55
/  ä N@   3#ä88@ò  9 NG¤    6+"&54>;26462"Ž	+		+	7*:**:l	
Æ;**;*     ÿÎä \   #!"&=463!2äþrŽU    9ÿÀÇ ²   ,  +".546;2$+"&46;2'+"&=4>;2Ž	+		+
9	+		+	WŽ#8<+	
	
c*$I    + $Õ @   $#!".5463!2ÕþrŽ8    lÿÁtÿê 3 h  #"'&#0&'"=41&547632326?22127##"'&#0&'"=41&547630326?22327t	
	©
	5
	
	  ~ÿÈUÿÞ    '4>67'&'>67'&-
³
8   v ›¶ . ]  '7&5&754'"6321?0?01?017&1"#//+/0##/5&7'7˜	
		ò¦

þù	 v‹ž 
  07'6'2w    j °†‹ '  &'&7>76727>272>7o
t%	.‹
Q		   Ø$ ýr   636&/4Ý

m--    ¾S³    "&462""—((  ´cÀ   0'&&'&5&76&'þ
#
£


	  ° ¶'S   ??#°"e9A    lÿÜJI   L  7#6&'7".5'676.'3&/6'./&/67>7¨* ZUe
	
28
#
$/,
	Ž'M
	G(O;   ÿÅóÁ  ‡  %#"'&'&676"#"/&>'."1"#"/#"'.?>6?'&767&'&6?>#"'.7>676'76'î@&&@ P/&-"&'
=
=60;	H

+
,

G1&D	–#

Ÿž	þøJiŸ
m¦&E&ßß1×:'"
þú	
		)'7    í ±3¨      777&'7&'7#1&5:9Û ÿýÿ½ `     &>K%!% 		%!%	     ÿË z :   7/67>?\ '



     7ÿ÷õµ    '/&6?&7>Ó"$L2sY:`µ"V`:Ys2L    Å …R 
  %/&767G23	o—32o	   á-¼À   "'&'&?>76¼
		]¤? ›[è¨   67›11    ÿÂ Ø •   3264&"?;-€Hde-fcG€   4 òþ¼   762"/&4@;";;";u;;";;"  { 9ò° 	  ?"/&4‡õvô#<¼ôvõ;"    ø ¶K   7øv-w   “ 6°   7'>7>Ï<	I­ hI
6=
Hh­I
    ÿÏ Ï s   >767>?'	#(1+%.5	()   ‹ . «   7/&?6þ
	;	
X
	;	
    ÿÌ   ?   />767>76 M	


		     ÿÀÆ   '&#'0>'&76ü

þ¯




Q
V
þ¯




Q

     ;ÿûò²   7;=zþÃu=zþÃ    O Þž    77O{þ†z‰{…z   ¡ ^K    &>n!&US %UK SU% SU   1ÿÀß¾ P  %#".54/&67676/&>36?>276?>7>7>Ì#@'(= 		
		

#
	'			%Ù		1'&0#>:Q	V(-š¾º$Ÿ	
¯

     Ôÿûb ›   %&'4767b!3+<‹'$
:*	     iÿ¿« 0  %#"'&67626=4>32>>>«YTg#


¡8J`‚,Z
	
	
    WÿÁ+À    %"&=462.54>7>3+}K"?(
¹ãÀþå+;9    Ž N œ Ü   ?3+"ŽU‡‡  ` ¢]´     7&/&6?6'#.?647Ó5
œ	'Æ
Âà
Õ!   7 ,ñ¸  # 3 C S  7./&6?6./&>?6/.?>3/.?>/.?>ž

-
n
8

& 

$
	
P

±

«

‰
Ñ

ãÖ
ä

Ë

þ½
	‹	
    UÿÀº 8  70766'&6767676?676".54>X				
!;P?$Ü*& 

,,%()1&7   ãÿöy —   %&5&767"x#6+ ?	‡(#
:*     ÿù À    %#!"&5463!23# !þr!!Ž!þ¹ŽŽ‡"" !!þÇU  9 ‡Ç‡   !!9Žþr‡ÿ    ¹ 2G N   73#¹ŽŽN    ÿÀ     #!"&463!2 þVª##     +ÿÜÕÿù          3#73#73#73#73#73#73#73#+9899999  Uÿë«• 	   !5463!2#!"&=!«þª þäVdþŽ+  €€À 	  !546;2€ÿ È   2ä   %#!"&=463!2äþŽ"V"\€!!    U $« y 	  %!5463!2«þª\88  U Î«$ 	  %#!"&=!«þäVë9  €ÿÀ€ N 	  +"&=!€È $r   œ d 2   $+"&46;2d	ª		ª)			  œ •Ç À 
  $4632"œ		¢
	    €ÿë€ \    +"&46;2'!!d	ª		ªÛ ÿ U  UÿÀ«À   "&=4675462O@dŽd@O£)ñGddGñ)     U Ü«£ %  4.'#"&'546756726=9?3
&A43?='	''dcc  +ÿÀÕ•   %".54632Õ	.NjN.	offoÎ,GJ22JG,cde  9 Ç•   %".54632Ç+IdI+fa0H4ù%<>**><%RJ%<     d •œ• 	  "&5462œY†Y[‚[6CC68OO     r ÀŽÀ 	  "&5462ŽO~OSvS28::8;SS     h ,˜ ¢    7'&'&5464>765ò*G55EEyD	)		 0     ÿùò‡   %#!"&5463!2òþVªV    í‡ 	  2&5463Õ	þ&‡þ‹V  G ‡¹N 
  %!5463!2¹þŽV‡¹   G 2 •   7".=3UÇ2Uc     2¹ •   %3+«•U   ™ 2¹ ²   %3&#"#632>327>u		²(

*   + ²œ$   #5d8q$999  ×±8   $"/&?6¢./

9

8Ü..

9

9

 G ²d Ü   %3#GÜ*  ^ Ü õ2    #5"1"&46324>32632612õ`	     G Î¹y   %#!"&=463!2¹þÈ8ëq    + •Õ@   %#!"&=463!2ÕþŽr²r    ÿÎò   #!"&5463!2òþVª    œ ù œ ù     71œù  äNd•   2+4&+5463G+•   Ž\   2+4&+5463ò+\    9 Ü ¹$   7+"&=46;2¹GGù    ‡ò‡   %#"#!"#".57>3!2òþŽ!8 ¤ª#$     r ëŽ•   +"&=4>;2Žäär   U ²«\   %#!".=463!2«þäÎ
r   9 yÇ$   %#!"&=463!2ÇþªV•r    ÿÎò Ü   %#!"&=463!2ò"þŽ""r"""!!    œ d       1+"&=46;2ÇŽŽãG     ÕkU²   2+4&+546399²   œ2y   2+4&+5463 9y   d ù ä@   +"&=46;2äGG  ¹ 2G y   %+"&=46;2Grr@+  UÿÀ«À   #!"&5463!2«þä$È   rÿÜŽ¤    %#!"&=463!2#!"&=463!2Žÿ  ÿ  Ü		¹		þV		¹		   Ç N9‡  !  +"&=46;2+"&=46;29VVVVN+þã		+     « Uy    '  3#3#7+"&=46;2+"&=46;2ÕVVVV€y+Ç+«ó		   ÿùâ‡      " & ) - 0 4  3!3737373'7'7'77'3'77'3'77'3'7'À"5þ¦5";6;7%#%“###“#%#`%? """@ """?-%‡þrŽ@@FFFF@(`Y^V[YY`[^Y;Œ9_çR6WWZâR6WWZâRŽ_      ÿÀ À    #!"&463!2#!"&463!2ÇþªVJþ8È¶   Œe¨‡   3#Œ‡"     GÿÀÕ‡   2#!"&5463œ!!þä!!‡!þ«!!U!  +ÿÀ¹‡   2#!"&5463€!!þä!!‡!þ«!!U!  U Ž ù   - 9  $#!".4>3!2#!".5463!2#!"&463!2+"&46;2Žþäþä	þä		rª		ªñ	P		V			G	  ]D‚n    &  "&462"&462"&4622"&54>32wJ

C
XD	
	     DJ ¨½   '.54632#4.#"z	

	
[
! 	     šJ ý½   '.54632#4&"Ï
	
[
!		    ïKS½   '.54632#4&"$	[!	   DJ¨½   '.54632#4&"z	
[
! 	  šy¶‡   3#š‡     ÿÀä 	  !#!"&5È"þª"þä!!     ä‡ 	  2!5463«"þ8"‡!GG!  lDn 
   (  "&4622"&462"&4632"&462~

WK	D

D	

		
   SJ¶½ \  2#4&#"'.5<1#4&#"'.5461#4&"'.5041#4&"'.5463262626„	

		
	
	

	88½ 		
		
		
		
!  UÿÜ« ë         # ' + / 3 7 ; ? C  73#73#73#73#3#73#73#73#73#3#73#73#73#73#3#73#73#œ99H88G99G99þã99G99H88G99G99þã99G99H88G99G99þã99G99H88ë999999999999999988888888899999    ŽÿÀò  
   462#".462"Ž$$$###     ¹ÿÜÇÿù   !!¹þò    ÿÀd ù   %462"&5$äÿ       Î€ ù   %+".56;232€H	H	ë  ò $Ž¤  #  %+"&=4>;25+"&=46;2Ž
dddd@
Gò     + @ŽÀ   73+"&546;2#"¹«"Ç!!ñÕ‡!!!¸     G ‡ €y   7"&=462€¤¸   AÿÄ â f   '.?6&&q'F')
0&F&	)    ÿ×M   &47>	"	"þñ)&þñ	   Úv¢    62"&64&"Ú.@..@.c*t..A..))  \#ùÀ     62"&64&"\.A..A.c)’..A..)) > ¡Û=     62"&64&">.A..A.c)..A--**  » Œ í   %"/&462)	½	)  d2€N   4>32#"&d@      Ã¯   	'6Ãþ O-J}þ O.  ÿÿÿÀ ¿    6.6r?)J>*r>J*?I*     ZÿÕì¸ 	  6&/ÃþÓ 7.}GþÒJ7.    ‚ÿé ¸ 	  6&/×þÓ #.‘GþÒJ#.    ÿÐÙŠ & 7 L a t  76'.'&765&'&76.'.6'4.'&746'4.'&7265.#&746'4.'&72	*	&	/'"„
	y	F\ 
)#	%-762
+3



	x2	
	F3

  §E   %&'.'&7676`$ªL     ÿÀL ô   %0L8A_4±!)7204   ÿÀ8   >ü<þÓ027) þÒ4_A8  ÑØ   76&/.$o

	n	

o

	n	

   ÑÖŠ      '6?'&'&7'77'767›cK	uddUJ	X   ŒAþ³    462"Œ"/!!/c/!!/"  â ’Š:   62"/&â~~.~~  Ä uß•     $462"&462">/`±–
EEŠ°nE
E   Ó ƒ™I    $462"&462"n¨¨    ‡ þ Ò     $+".546;2&&?/&6þHG@@AAz	Q–    ÿ×žµ =  %''&&'.=>&'&676Ž*3
@	
/3%G25$?%ì%
				/N'*    ÿÎ ²   2&'#"&4–Ô–2,2h?j–²uR.QH;Jt¥     7 ÉŽ   %'''7#7'7''77773'0)*ƒN7@:#:G()D>(?/DB#5G$@RFBk%&.J/@DRA=U5"(.   ÿÇð½  ;  %''''7#7'7''777737''7'7#77''''37£3KB-+¶k: NF3G(d-,YQ.PDKá)05#BD/?(>D)(G:#:@7Nƒ CP1NXHL•Å1/CaCOJXMQr>3-AR@$>/("5U=ARD@/J.'%kB      @ë@   %#"#!"#".57>3!2ëþœd]Ç     k À• ë   $#!"&463!2•	ÿ 		 	Þ     „ Ìu¯ 	  %#546;2uñ¹ÌÇ    ÿÎë y   %#!"&=463!2ëþdœ\qq    À @ y 	  73+"&5À€HyU     À $@ ¤ 	   %#546;2"&=462@€H+yN				     « ùU‡    ! ) 5   +"4;+"4;+"4;2&462"462"4632"Ujjjjjjª€9@l11     ÿâ ‚ 	   '.546'«€*€TþŽ" þšr#þä   «ÿâU‚   %7Uªª.r.   ÿþäe 	   '.546/«rŽr7þÇ ÿ 9     «ÿþUe   %7Uªª,.9.   0 ( «   7#'67>'.'&547.#.'&'.54&#&'.76'4.'&627:67676'432&/4#"1*604632>«				
			ŽZ


	

0	     « 2V:  , ¬  7"#56#&#"232562767"#0#1&54&5&'"17636'&54'&76&.4547>76034767456&#'.4767>'&67676'&767>2>016303®
"

	†
	

	
		
È0	P
[f						
			  U JÑ:  l  – ¢ Ð  %'&'&<6527&'4&5''.'&54.#572767:1'4.'&62'#"7">&4652#"1".'&"'.5&323'.76"".54'&#0"546'&'4?676276‰
	
) 	 


Z	L

!
   ÿÀ  Î 	  %!54>?g™þ .CÎŽ€œ
7     ÿÀ  ´  8 J a t  #57>7>7>?3%#6'&'#6&76'.1/>1.56&'#767>767./&7688
7%	
,Œ	"0	1`
B±		@.N	$	&)  ¢
¤'5	".5"	+ 
	$

"
   P c´4 +  2623:;&&#"#"&#&'.'./?6ä
	ž	#	"	"

	K=3¯#% $		QO     O y  0 ;  7#67'7#".5'76&'&57à
<r	(@1		)#     q¾4   2.&'&'.76.7"8!4N)4     qn   %#.'.'./=		Ö
	
  åÿÀ N   73#å++NŽ   #ÿÀÒ «    %#&"#>72&'#'#?%S9˜8S0!Y*U«96F&&1*.!š ##    Ä ª2 Ü   73#6ÏXnÜ    ¦ mOM      %+"&/4?2;23'#6?#6702M‡"XB=9©12
XB	    Ö¾    #6?2#54;74;2I;F=I55    ÞM_   *17396M
  ØRl   3+"5ØF8l   ÿÀ À 9 =  7#!".5704547'567'36?37367#yfSGD
þr'SfAM[þr>#  
c+	 *	  #‚gWWhþ«     d •œ2  + M  7<>7>&'.54>&2&#"#"=4.">d	
-	7*-
	´0)À		
6	
   € € ² $  $26?&"'.=326753>?:
F(F
8¤.$! ('(
  Õ \+ k   7632Õ	\    ÿ³ ÷ y   7#&'&4.'&-em
y#E#
1#$	1      ÿÀ À   #!".54>73!2 þrŽŽ     G $«¤  " e  232#"54254&44>;#".':32#"#"#*#"&54#"#"76765432>?632>54>324U++	
	+$		
	

	*
¤+(r	U
U     9ÿÜ µ 2  )  74>;2.#"#"&'464"54632#".r+

9

	

'
   BÿÀ¾k 	  %  7! 54672#".67>!2#"&6rþª
@9+++:Ž!1'f)'Z	'1!Ž     dÿëœÀ $  4>32"./&5467r8$,8H8•			Ur2d
+œFc     r ÀŽ‡ "  &70.#"4'&54>2ŽW
	"	Z
 181 
N:/CF2N%		   « @U Î    *  74632".>2&#"462"&Ç%(-2+	9
-P-r¤3	
   d œ2   $  6276"&5466462#"6462#"ÉnI
[‚[

–

•.RR.G*
*    € N€ ‡   7326?".'€+U&@/8/‡     ÿÀ À 	  %"&462 –Ô––Ô–Àj––Ô––j  dÿùœ  . <  7"'."&7>23"'.#"&7>32276"&546ä	"	Œ



	«nI
[‚[
À

		
			
9.RR.     € € y   7326?".'€+U&@1<1y!
    ƒ 8~ ] 	  %"/327 B/"[\"
28
    5ÿùËO  0 G b p  %"'&#"&7>2"'&#"&7>327"'.'.>!"'&7>36276"&546•##ª"#	Ð
		þ‹	xnI
[‚[
Ã



	
	
#	U.RR.     € @€ y   7326?".'€+U&@/8/y    	ÿô÷ Í 	   7.7>&>&š39VÄV92/3`}}`3  dÿùœ\      6462"74>32"&276"&546€¤		pnI
[‚[
îA--A.N%-A..g.RR.    dÿùœ ò  0 >  %"'&#"&7>2"'&#"&7>32276"&546•##ª"#	 nI
[‚[
Ã



	
=.RR.    d Üò² 	  "&5462ò*;);<$**rr     Aÿù¿  ' E  6276"&546'"'&767&#"&4632#"!"'.#"&7>232#"ÉnI
[‚[
+	)8$&			A
>Q>
			&$9(	‡.RR.

  w +‰ ù  0 I  $".'&62>7'"'."&7>32#"'.#"&7>32€	.2.	@<A

	
	‚3
	
		      àJ 
  #"&'73ØEšHx ¡7J)    #þ¾  #  "&54676723232654'&'&#"RN^”Ô”^N‡ži2*10+1»#%--%#f	
    Z’¦¾    '#&6767#[>+)þÎ)+>1¦  m•À   !67632•þØ7=@8	     U  « ë  4 N  $".'&632>7'#"&547&#"&54>3272#""&545"'&7>€	.2.	@(

		AÑ	

AWh


		


   € ¤ Ç   74>32#"&€

		Õ     A +°d  . G \  %"'&#"&7>2%"'&7>32#""'.#.67>".5&6327•##þÁ	 
.@


[	"	43Ã

J

	~
     yä    6462"$462"*;**;*;**;£:**:**:**:*     _ 9¡$  4 G  $".'&632>7%"'&7>2'&#"!"'&"&7>2€	.2.	(þö
#-$	!	B	$-#
		^  P °  - O  7"'&7>2'&#"!"'.#"&7>2#".'&>2>7>d	$-#
!0		!
#-$	1) '?#
5@5
Î]6
!*
""
  (ÿÑà r   %&/&76767>Í:'
"	E9'%    k ¯ E   $/7¯3344     P +°P  2 K b w  $#".5&6327#6#".'&6327"'..672>!"'&7>'.".5&6327Ž		
"$«	##Î
	

þÃ%!
	
Û	"	43å						2

	
”
     € € —   %01276"&546 -<KjK<‰
&CC&
   ÜÿÃ  )  .'&'&676676>6.76í,'b	 
 2/	2 
 	
&,.,‘)e2%2	!		!	2!e)      «ñ@ B  &47>222>362"0&'.'."&+"'.#.1Q($(R0
	S	
S	
#	
)$
$)
	     w ‰ t   $".'&62>7€	.2.	
(&(t		   3 9Í2  . E ` ~  $+"'1&5432?"'.#".5463:!"'&7>32#""&505#"'&7>3#"&507#"'&7>VcE9g

	þ‰		.”:«9s	k


					  € N€   $  74>32#"&2462#"#"&46;2€

		¹

È		È		Õ)V				  d Nœ Ü   %  %#"&46;2'#"&46;23#"&54>;2dÈ		È		”cc		³c	cN				r    P )°6 ! 4 G ] r  %#"'."&74>327"'."&7>!"'&7>'.01#"'#"&46;201#"'#"&46;2j!&!
	 )2
	+6þÃ6+	
1	H		c¸
Hc	3
	Â



			
			  w 2— ò  0 B  %"'&#"&7>2"'&#"&7>324>32&#"•##œ#"	?$9
Ã



	
’    Ü œ² 	  "&5462œ);*<;$**rr  G 2¹T  0 < P b  6#".'&63276".5&6327#"&46;2'"&54>32>76!".'&632ò	"$’	"$Crrê.	 
R
 	.É
	


	

	
”Ç     € 2€   "  74>32#"&2462#">€

		¹

£\P)/5Õ)r       A ¿b  ' A ] ~  "&4632>76!*.'&63"'&767&#"&4632#"!"'.#"&7>32#""//&676276276&/U.	 
R

	.þ¤	)8$&			A
>Q>
# 		&$9(	«.

!..!

.	

€	
				r8*

,::,

*8     Žÿär 
  ^  74>32"&7462#".#"5&72>54.#"1*&0&"50=05434502526;02>54.#"742Ž


% 

ä))§
	   € ² Ç   7462#".€	ä)	  Aÿñ°y  + B Ž  %"'&#"&7>2%"'&7>32#""'.#.67>"5&32>54."#'"0&4&<1=4147034732301>54."#&743•##þÁ	 
.@
	
!$ƒ% 	

	 Ã

_		+
º	   Kÿùæ “   %'.767>6æ!#"Q)D

		    b  ž   %'.767>6ûC"=E

"   |ÿä„ ù G ` y  %#"5&72>54.#"1*&0&"50=05434502526;02>54.#"742'"'.#"&7>23"'."&7>32)% 

j
Œ
	2
	u
		
	   Nä Ü    6462"$462#"*;**;*;*!x;));**;))!  3ÿòÍ2  + t ‘ ¨  %#"'&#"&7>2&2#"'&#"&7>+"'472>54."10#".10&4&5141650756;2>4.#&5627"'.#".5463:!"'&7>32#"”#%	û% 
"$	¿% 	]

	þ‰		.Ä“	



					    d œ$   &  74>32"&24632">?"&€

	¹	ê!H;8+![‚[ò
)
.	.RR  «ÿÁU y   %67"&=)$-P- -pb#22#c    øÿû p   "=3mm  [ œ  &  7"'&#"&7>32>?"&Ü#"	w!H;8+![‚[ß

	
N	.RR      ¤¹\    "&462¹6M66M&L66L6 9 Ü€$   $462"9ñ   A ¿  7 D  7"'&767&#"&4632#"!"'.#"&7>232#">?"&U	)8$&			A
>Q>
			&$9(	þ²!H;8+![‚[¤

	.RR  «ÿÁU y   %67"&=)$-P- -pb#22#c    øÿû p   "=3mm  _ ¡ ã  5 T  %#"'&#"&7>2'2#"#&"#"#&74>32"#"'&'&#""#"5476N44	"­ "	Ç
"%		»

	
	   U «p  - E  %#"'&#"&7>27".'&632!"&4632>5>N44	"O
		þÂ		
+%		í
				

  ‡ ¤y    74>32#"&2462#"‡


«

Õ
)   U « ù  2 N  %#"'."&74>2'#"&547&#"&463272#"#".545"'&7>j0<0
)2)‹

			AÑ				

# 				°


		


	   € œ€  
   6462#"6462"€		¤º)))   A "¿U  - E  "'&7>232#"!"'.#"&463:"#"'&#"&7>2U		.O.		a44	" 		Ô		  UÿÀ ä • 	  7"&5462ä*;*<<**rr   Aÿþ¿Œ  + G c ~  ".'&632!"&4632>5>"'&767&#"&54>32#"!"'.#"&7>32#"'.#""'&7>2œ
		þÂ		 
+)	)8$&		A
>Q>
A		&$9(	H	5-#"!2



¹		o	#  ^ :¢y  - ; I g  "#.7>32#"#"'.#"&4632""'&6763"'&6>76"'."&7>32,!D!,C"+Ÿ,585		)	
 	

	 
E‚	
     ~ ‚ § 
   6+"&?+"/&6Ð+Gµ+§	rrrr	
  ÿÀä @  1  %#"'#"&46326320%2#"'#"&546704146326Ç!!
þÕ!!
!/""/!     G )¹a   0 G ]  74>32#"&2462#"#"'&#"&7>27".'&632!"&4632>7>€

		¹

42	"^(þ¤ 
+Õ)q		Ñ

		
    ÿÎ Ž ¤ 	  7"&5462Ž);*<;**ss   € )€   0  74>32#"&2462#"#"'&#"&7>2€

		¹

44	"Õ)q		  € ¤€    74>32#"&2462#"€

		¹

Õ)     A )¿k  ) A  "'&7>32#"!"'.#"&4632#"'&#"&7>2U	 
.O.
 	a44	"						â		       Ž À   "&5462. ]–Ô–Hk$UAj––j+D'     A )¿k  ) A  "'&7>32#"!"'.#"&4632#"'&#"&7>2U	 
.O.
 	a41	"						â		     d œš  - C W f  #"'&632767#"'.5&6327'"'4>7>76"3"#.'&6"&5462'è

"	#¡

!ó)
â
)FnI
[‚[
,			$  
þò.RR.  Ž \r •   7>2&#"Ž)0)+G 8\    3 Í2  ( 9 V m  %#"'&#"&7>2'6".'&6326".'&632?"'.#".5463:!"'&7>32#"N44	"n	
 % 	#"Â	 % 
	"$/

	þ‰		.%		ž


					 GÿÀ  y   %2".GEt#yL4,02  U «Œ  - C  62'&#"#"'&74>7".'&632!"&4632>5>ÛJ:<O9Sû
		þÂ		 
+Ž )) ½



   « \U y   62#>ç2+	ªy	  A ²¿$  5  7"'&767&#"&4632#"!"'.#"&7>32#"U	)8$&			A
>Q>
A		&$8)	²	   ‡ Îy2    6462#"6462#"‡
–

ë*
*  d $œ •   %2+"&463d!!È!!•!/!!/!  U « ¤      # + / 3 7 =  %2+"&463#3.+3'#3'#3'"3535#;5#35#35#267#d**È**È1%**9**9**@11**9**9**@1¤*;**;*########U#
#######  C ½T   /  %#"&546327"'.'&6!"'&7>769"r!60þ¡	06!@6'—(#		#(    rÿÎŽ Ü    %3'3U99ã9Üþòþó   P »° é  #  7"'&&7>3"'.&7>Õ5B¾AÀ		     ÿÀ ÿù   462"–Ô––Ô/     Õ $+ \   6462"Õ$$4    - #·:  3 F W o  %"'.#"&54>32!"'&7>232#"6#".'&626".'&6327#"'&#"&74>2¤
þ˜	,Š	 
	EÂ	!$ 
	"$<45	#å
	
		

	 		     ÿ½ Á Y   7&7>6'&''.706.	!+
		+%		!  6ÿÍ û R #  70'&''.7461&6767676ö 	
%:

	

	     ‡ y2     6462"&462#"6462#"Ç!0!!0a
–

?;**;*Ö*
*    3 $Íy    9 G R  6462""'.#.463:!"'&7>232#*4>32"&24632"Õ$$Ë.

	þ‰		9


«

A)) 

		
	
2
)     € )€   0  74>32#"&2462#"#"'&#"&74>2€

		¹

43	"Õ)q		  G¹p  +  ".'&632!"&4632>7>«(þ¤ 
+

				
    ÿÀ À $  2&>32&#""'6.#"632.54–Ô–:2)
+>’>+	(12:À–j?n#/W<Ec1''1cEyI#n?j    Ž À   2&'2&'.#"63&54–Ô–

/:E%Iz 	
À–j%7.j   ^ ¬¢^ 
   >'&$.>^00
!000õC&:"!}C:&D:  ¹ÿÜG À   62"&=4ã:**:*À*U**U   ÿÿÿÀ ¶    72#6.76#&>32/\		ñ['
²Rk5$V9;TT8%UH0  Aÿë¿y 
  6 D O  74>32"&"'&7>32#"!"'.#.463:4>32"&24632"¹!**:*d	 
.O.		þØ


«

@'2F22		
	2
)    Õ @+ y   %2#4> Vy!    2ä À    $462"$462"U*;**;þ*;**;[;**;));**;)    U ‡«$    %4>32"&'462#".!..A.¹.A.. $Õ.A.. !..A.$   € ²€ ù    6462"6462"€¤Ç  A ¿y  " 7  %#"&46;2"'.#.463:!"'&7>32#"9rrl.		þ¦	 
.				
			    w $‰ ×   8  6462"6#".'&63276".5&6327Õ$$	"#’	"$=##³



     ® ÿø¼  : V  3+"54?#"&54?3232'3+"54?#"54?323203+"54?#"54?32320êZ=-
L<3ˆ
C-!9
.&f	9
'1' U


VH

@		?+76   »ÿ¾  + ?  #"&46;232+"547'#"4;232+"547'#"4;232+"547Ä-

X=3

YA"B	-&D49'!:
x		U		ƒ	@
6  C 9¼H ( X   $"'&""'&#"&76;2276227632'&#"'".54632#"&46324#"32>54&#""&546323"&4632#"&54>32#"32654.#"32654>32\--
	-	

Ï)
8'++++		)+9f 
)'8,=++=,		
)+    Aÿë¿y 
  6 N f  74>32"&"'&7>32#"!"'.#.463:"/"'&?'&676"/"'&?'&676¹!**:*d	 
.O.		é







ƒ







@'2F22		
	@















   ìˆ 
   462#".&'&676z!0!!þõ
'!!O""/!þ×!'     ÿÜä¤   6462"†¼††¼b¼††¼†    ™ £v ù    6"&54>32#".54632Ö²	à$	+    Ô{   '&'&'76767676767Æ	%#



B	
   ó&øÁ %   ''&'&'#.676676676ö'('###	
 ,êY %  '&'&'&'&'767676776ê  
'Y	    ÿ¼ñ»  Y   #"'#"&46323632632'#"'#"'#"'&'&''.7676762367>6326676R;)2***.)Ç		
+X9&$!B/*;*þ-	
#


#     ÿÍ… : €  '"'&'&'&'&'&'&'&'&7?67?677676#656.'"#"&'&'&'&&'.'0#'"'&'670723667600
!*&	*G8
'(*						


þP	
"
   å [ "  %.&'&'&&5&'61662å
--	()
$		  P ë°$    7"'&7632#"!"'&#".54632d.=4(4)3=.ë		    ÿù  Ü $  %7+"&='&'5'47546;27€j
YÈY
j€~È~†AA:::   ÿÀ È .  %"&'.'.767.676632>ü	)&g<g&)	i9+i	¥"9

**

9"?#2,1))00+#    Õ k+ «   62#".546ë*
«		     $é¢    6.%./>M	ÍM•
$
2    F!º~    4'&%'.'&76F&%
s
$&p !

  ÿþ \ ¸    4 C  7"'&7>2'&7"#&&7>"'.'436'"'&7>'&"
N*(I|C:D iI(3!
 D:C\C
C
C
   3ÿëÍ2  + ? \ s  %6"&'&62>7#"'&#"&7>2#"'&#"&7>27"'.#".5463:!"'&7>32#"
L„L
!323!#%	ª"$	 % 
Ò

	þ‰		.h77		]


					   r $Ž \   7326?#"&/#"&/#"&'rGG G9+2\*     ÿë  ² 
   %"&4&%#*.54€€þî	²3['7MM7'[   dÿëœ$   #  %6"&'&62>&462"6462"
L„L
!323!þšh77		v))))    dÿëœ j   %6"&'&62>
L„L
!323!h77		   ÿÿ Â¥  -  .'&'&>76676>6.76ç,'b 
 !8! 
 	9="w(e2%  	2)8C   Ž r$      $+"'1&5432?&462"6462"e!dF9ÒšWˆ))))     U«k  &   "'&7>32""'.#".54>321

@		6Z6@



		

  3ÿÇÍ2 M e y – ­  %#"'430>54.#0#5*&10&4&154161476;0>54."1&5637#"'&#"&7>2#"'&#"&7>27"'.#".5463:!"'&7>32#"7% 



8#%	ª"$	 % 
Ò

	þ‰		.	
	
£


					   Ž r$  " *  %#"'.#"#"'&7>32&462"6462"i26*6&Öš!Å))))   M³B  #   &'&7>'"&""'.&7>2@	"^6@   Ž  r$  ' /  %#"'.#"#"'&7>32&462"6462"i2"3Óš
	#Å))))   3 ùÍN  6  %"'.#".54632!"'&7>232#"¹
 	þ‰	

ù



     GÿÀ Õ À 	  7"&5462Õ);*<<**œœ   ÿÀýÈ /  &#""&'6.#"67.676632>ò	
!4"J*I"+
i9+i¼00+!4Ba1$K>'4!2,1))     Õ «+ ë   62"&546ë*ë		   ~ò À 	  ! /  72'&&'67#"#&#&#"#6&'4367&"#"'&76"#"!%'=\#@'%?=Ž
5  ÇÿÎ9 •   62"&=4è0!!0!•!U""U    ^ ¾¢p 
   >'&$.>^00
!000D&:"!~D:&D:   ÿþÿÀ ²    %#&>32!2#6.76ü['
þ/\¯TT8%UH0Rk57UT  ‡ 0y2  ) 4  %#"'."&74>32&462#"6462#"j0<0
	 )ã
–

;		
	­*
*  ‡ 2y2 " . 9  7&763232>76#".462#"6462#"–0

	 )
–

p	
	~*
*   ÿÀ À 	  5462"&5–Ô––Ô–Àj––Ô––j    w \‰\  % 0  &7>32'."462#"6462#"€	."	@<A		¤

))   U ²«N    $462"&462".A..Aç.A..Aà@..@..@..@.     r ,rN    ,  %#""'&7>'".547672"&54767I#<+-.¦		
¹
s



	
	  Uÿþ«À   2##"&'#546326A\.M.Ec;)	!À\@€.L,`Fª);   € N€y   "&=>5Ç%G,KjKy!H5KK5V    [ }Õ Ë   %&/76Ò eÀ	*   [  ï   %/?06ú	
F3
	.J
ë'*#     -ÿÀ} ¼   %6+"5'47xþì/-º:¹C      ò y •   6462"ò    UÿÀ« 2   7!!UVþª2r     ë « ¹   %#"4;2«  ¹ ÜG    7"&=4623".=462ÇnÜ		   * } ¤ Ë   76/.-e À*	    ÿü  ¤ ñ   76/&J.	
3F
ë#*'   ‚ÿÀÒ ¼   7+"'%&=4‡-0þìº{ C¹:  œ \ ˆ    %'7#R\UJ6ƒ(&A  h N™l    "&=.4635™KjK

 !5KK5!GA   p ÷‘´    2'&/"'0'0'"'&546 ?RB	,/	K´M-A',(
(/K   Ç k9 ¹ 
   73#"&'7#"4;2Çr	C‡
+  ¹ ÜG    7"&=46322"&=462Ç		tÜ		  ¹ ÜG    7"&=4623".=462ÇnÜ		   ¹ ÜG    7"&=46322"&=462Ç		tÜ		   ÿÀ y    !.46?!>4&/7Ç +þª	/++
 
b$U3‚44F3Og7B	F1O    € €y   #"&=.=>5Ç%G,0%	%0y!H)B$	$B)V  Ç y9 •   %"&/9&•	     9bÇ©  #  4#&'&'&'#67>376NG
9#9
G%ž			#    g @™\   %#5.=.54675!+V%0
 

0VB)66!)B   ÿÀ y "  !&546?34>54&/7Ç $þŽG++ä
b$U3‚44Ë9Og7C%!&O  9 Ç© 
  .  %"&=34#&'&'&'#67>376 V	NG
9#9
G%	—			#    Ç k9 ¹    73"&'7#"4;2Çr&B‡
+    ¹ ÜG    7"&=4622"&=462ÇtÜ		      ÿÀ y   !&546?3>4&/7Ç 'þœN++ò
b$U3‚44Ë9Og7B	F1O    9 Ç© 
  .  73#"&54#&'&'&'#67>376ÕV	=NG
9#9
G%‡U	l			#     Ç y9 ¹    %"&/7#"4;29&G•	  ¹ ÜG    7"&=4622"&=462ÇtÜ		     UÿÅ«‡   2##"&'#546326A\.M.Ec;)	!‡\@€.L,aEª*:    ÿÀ  ‡   %:!.54>73€	þr &&‡!25)   Õ + \   6462"Õ$$ ##    UÿÀ«$   *  "&=>5+7373#".=4?Ç%G,KjK+*Ç*G$!+5KK5:þ½99  ¹ ‡G ²    $"&=462"&=462?z‡				     ë G U   %#"4;2G  NÿÆ 
    +  "/&67"/&6"'&?6'"'&?6N99$5990N+	*	++++	*	++++    € €3   "&5€ KjK3™5KK5  UÿÀ« í 
   +  6"&54>32"&54>32+7373#".=4?š
˜*Ç*GÕ""þï99    p ¾{   2#&/"'0'0''&546 ?QC,0K{M-@','&
(/K   ^ @§‹   #*.'&'.7>3>869‘	+?"QƒK3´3. &7   UÿÀ«#   ) 6  %#".54767>?'4'.'+7373#".=4?p"<"0"
G m*Ç*Gá5";##/*
	þä99     NÿÆ 
    +  "/&67"/&6"'&?6'"'&?6N99$5990N+	*	++++	*	++++    p ‡{  ( 4  2#&/"'0'0''&546"&=462"&=462 ?QC,0K„z{M-@','&
(/Kô				   ¹ ‡G ²    $"&=462"&=462?z‡				     <ÿÎÄ¢   #".546?&54632.T4
oGDrn2+O0+	?]f69Hb    ZÿÝ¦G   %"&547&54632632¦)NtN):(('(:å2:GG:2)99  J ã·L    &'667"'&'4&56761r %þà 52
=O
2
     œ ¤d ù    6462"7462#".œ~½##*#  ¨  X –   !   "&'&6;2&4632"6462#":-

†

n	"			g			  Åƒ<Ã   "0767><
("	5¾
	  rÿåŽ ²    '7&770€þrGÍ		ÍG     ÿÀä Ü    !#?+9Vr9@;áá;   VíD ! H  %676'&'&6.6&'&6676676676'.'&6³3:9
þ¿%
9:3ê#F=96'		#
==
		"	

69=F    ù _ôL ! M  %"'&'&76&'&7645&6676'"7>76'&'&'&'&'&'&'&(':! 
Œm/
%		
c&82	GA‘	i8F
!=	!$
&	     _L ! L  7"'.'&766766766'"676&&7676'&&7676&&5&'&q
 !:'o/m
	%
cAG	28&»F8i	
	&
 "	=!         6&>(*(*£=2#=3   s è   $.>°*(*3=#2=   ÿÀùG  ,  7#7&54>32#7&'&547654'&7632bd!		‹d		/u±·5#A#5 Ð± 5R55    GÿÀ¹D  ,  7#&546547#7&'&547654'&707b	K	u±´ c 5 ¸± 5 c     tê9  +  2+"'&546!2+"'&547654'&76Q
*o*
9.6/JJ/7.     §ÿË¢ « & V  "#.'&7673&#&76723&'&672&74676'"76&'&'.#'&#'&<6$E	»	D(F
N'+-5

#[<>		4U

		
  F 1º š    7'76767&'4'67‰++’.0!S5)"   ÿÀ Ã     "0767>'757<
("	5×Ç+œþ œ+¾
	þ 9UrrU     eÿÐQ ¥ (  7>3>3>'&676°O	
 	%$4K	'\		

9X   ^ÿËY « & V  "'&676>23"3"'"7>76'&'&&7676'&'"&7676&'"&7654&'&ÄK	DF,1	F(D	+-*'N
5<[		$
Î
U4		
		

  ¯ÿÐ› ¥ &  %'46'.'&6762&'&672&'&672P'	K)F.	)	..\'X9
	  € N€y   !"&5€ KjKy«5KK5  rÿÀ€ÿù   3#r9  rŽ‡   3"./#5!€0L(	#yd
c    $ ºÀ   #"&5'546;276ª(U9	š<r!     9y rÀ    3#73#9+ÀGGG   ÿÀ¹2   %2!".5'53€!þÕr@!G	òò  Ç k9 ‡   %"&/9&‡
     Ç k9 ¹    73"&'7#"4;2Çr&B‡
+    ŽÿÀ¹ @   %2!5€!þÕ@!G€  Ç k9 ¹    %"&/7#"4;29&G‡
$  ÿÀ «2   73".5'53€+r@€	ò     +ÿÀÕ N    73#%3#+qq9qqNŽŽŽ   + Õ `    %'5353&'Õ'qþVq#3(	G88G    9 KÇ ½    73#%3#9qqrr½rrr    #û] F ‘  4>26754>22374>2254>2&346374>'"&545%##&'&/&7622254&=432635&322354325432					%2	0'	;'+=ö=+(;	'0	2&		
	Qp
	i{
	{s		y
	5"	'0;,!'4=+ƒƒ+=4'!,;0'	"5	
ys{{i	pQ  tdÀ 
  #  "'&?6#"/&67".=462O	*		*¤+	*	Id	7667	99     9 MÇ ¿    73#%3#9qqrr¿rrr   9 MÇ Â    73#%3#9qqrrÂror   9 FÇ ¿    73#%3#9qqrr·qyr   rŽ‡   "./#535€0L(	#‡d
U  €ÿÀ€ÿù    3#73#€ò999    ë œ «   %#"4;2œ  Õ k+ ‡   7>2Õk	  Õ k+ ¹    %#"4;2>2@«@	  Õ k+ «    %#"4;2>2@œ1	  ¹ ÎG ù    7".=4>322"&=462ÇrÎ		  r ÎŽ‡  " .  "./#535".=4>322"&=462€0L(	#Gr‡d
U¹		  ¹ ÎG ù    7".=4>322"&=462ÇrÎ		  ¹ ÎG ù    7".=4>322"&=462ÇrÎ		  rŽ‡   "./#5!Ž0L(	# yd
c  ò k ‡   6462"òs    ë k ¹    6462"7#"4;2òs@     g ™&     "&462"&54>323#"&5š	µV	"""»9	   r ÜŽ‡   +  "./#5!"&=4623".=462Ž0L(	# «nyd
c«		  EÿÀ  ‡   %2#".>«+œ$‡Ž 0-!  VÿÞº x   &>g"$#"
1;$
1<    ÿ ÀFÀ 	  2546
GÀšHâ    ÿéµŸ   4632'.5

((2$ƒU1!$J*+    ÿÀ » ‡   72+5>UB	
œ-‡j$Ž      FÿÞ ª x   6.6u#$"<1
$;1
     Á À ÿÁ 	  '6546ä>ÀàOˆ     Kÿé Ÿ    .'67&67>?4632ô$2O
	ƒ95C5,	+*
!!
B4C    õ Q£   $"&54>32Q=þÃ    õ Q
£   $".5462	Q=þÃ   ÿÎr2   ?<.'.'räd5)"	Îdär  %#	     ÿÎ Õ “   4>37&O&O2(U&'S&     G  ¹ y   6462"G!0!!0(0!!0!    z : À   .67>7 :(!eO&'0cJ=ÀCFe0'&Oe!(:  L¹y   2654.#">€y   r 2P   747>r
X_	$29
HB	§   u  N    73#'3#çrNGGG    ‡u¤ 
   462#".74>32"&2F22#'Ç'#22F2•			     ®@ Ë•   3#®•U   ‡ Ù¤   462" 		  ›-ç•   &762ç#+2	
U     2ç\   #"&546; çQ4PZ]YoG2'DQJ@>b     –^?    >'.6%&7>76=N
,9 ÿ2L
	H$
&1Q
.*	  —.Ðw    .6¶

h   ÿÜþ5     .6#!"&463!2ä	
iþã'þÐ ·ßF    &ÎF   ÿÀ ÿÜ   !! þ $  Uÿùò @   7!!Uþc@G    G \ò\   3#G««\ÿ    d yÕ À   %3#dqqÀG  €ÿù¹ 2   #"/#"&46;232«rEadEo		 d ÜÕ@   +".=46;2ÕUU2G	G  9ÿÎä @    "  462"6462"6462"'4>32"&9##<$$Ë!/""/“""/!$$$$"/!!/"9!/""  Nÿä y    " .  462"6462"6462"&462#"+"&46;2NIÞƒÓ««†		   ÿòÿë d R   #"?>G99
9
9    N r ù   7#".54632r	¤$2'#2    G ë ¹\   7#'3œ8rëq  9 @r•    %#!"&=463!2'2#5463rÿ  Çr\ª++   œ @    7"&=462"&=462¹		UN¹¹¹    U @  \   $#!".5463!2 þr	ŽT  ÿÎò $    "  6"&462"&54>32462"&462"r$$‹$Ñ$$Š##$$$=$$$$   +ÿÜä     "  6"&462"&462462"'4>32"&d‚æ‚(   ÿù  2   5!! þ 29    2  Ü   5!! þ Üª    2  N   5!! þ N    Ü  ù   %2!63Ï þ  ù    yò ²  ! 3 D T d  7+".=46;2+".=46;2+"&=4>;2+".=46;2+"&=46;2+"&=46;2G	UV		U	UV		‡											 ÿûÿÎ N   7.47>?+*O]g^M2G	+H.#þ€   ÿùÿÎ  ç   %7!7.73G¹þ+*!vÀ'þçG   ÇÿÎ ÿù   7!Ç2++    ÿù N  ÷   %#"#*#&72>76 C‘2T‡	 'C>c÷'$<G     « Ü N   ?>3&«72ŸMSÇÜG.  , «2 	  763,`‚:&«‡	%
     2   7&'!U+ð  2 „ r ¤   76762…      ÿÎ k   7.54>?>;+*	9$Õ2G	
	
U
þc       Ì  	   547.373UUÇ9«k,5·FVV   +ÿÎ     7!!U«þ+G     « ù{N   2+7rš9N9U  Ñ2{N   #732pŸŽ2    ÿÀä ²   73Ž@òò     GÿÀ¹ ²   73GŽVŽ@òò     rÿÀŽ ²   73r€€@òò     rÿÀŽ     #!"&463!2&+"&46;2Žÿ  	È		È,1     ²   %"'732ž2:ŽXCCZ   U 2«À   2".=4£ºN%=H=%À>Br
".''."
rB     r ‡Ž²   4>2"&r+,D,+SvS$.;		;.A\\    ¿ ‡A ²   $"'62"D\‡   œ2dy    2'.=4V3##3y
GG
  U ²«2    ".5%>7U	V2B&	++&@  ÿÔ ¤  	  73&7'h^Šh^ÁÐÊÁ	Ð     « 2U N    73#73#«ŽN    Ž @r •   %+"&=46;2rªª\  r \Žk   2+".=463Zäk	
¾¾  r \Ž ë   75!+".5rä²9r    Ž ²rN   %+".=46;2rªªÎd   « ÎU2   %+"&=46;2UŽŽÜ		H	   Ž yr •    73#73#Ž99«99•    ä2N   +".546;2@     Gÿø k   546?>3!G$&sk//
þŽ    9  Ç @   7+"&=46;2Çrr    !ÿÎ  $ 
  !"&/&>3! þ@Ç2	*
    é k 2 	  #"&?>3 ä$2Ç!U"    ‡    #"?63 Õ $Ž)=(  G k7k   3#"#46?>òE/!$&k++:k//
   Q • Ÿ1   7##67€
'
	À7e$    G @ € \   6+".546;2€T    ÿÀŽ ²   73‰|‰@òò  %ÿÀi ²   73%}J}@òò     G kG Û   72>7+"&=Ç .1f29¤	<<    r ² Ü    7#".54632"&4632œ	
	€	Ç	
		   d2+k 	  #546;2+ÇŽ2   œ@ ò\   +".546;2ò9	9	N   G   •   %#'3 9€¹Ž    ¹ \Õ   %"&=4632Õkœ    ¹ ÀÕ@   %"&=462ÕÎ

d Ž \   +"&=46;2 99$    «$ä@    +"&46;2ä	8  KÿÀD ²   73Kpp@òò     9ÿÀU N   &  #!"&463!2&+".546;2&+"&46;2Uÿ  Ç	ÇŽŽ,11  bÿÀ  ¥ 
   ?2327+"753#bB1 dÌ€99m78,ŽG     ¹‡ Õ²   #".=462Õ•		     Ž\ •    +"&46;2 99…  G yG‡   %+"&=46;2G7f7šÀ00Ž!!  d ¤+N   %+"&=4;2+"V!8V9Ü!!H**    d ë+2 	  7"&=3#œ!Ç"ë!!     r kŽ Û   62>7+"&=Ò\?7r7¤<<    « ²U Ü    7".54622"&462Õ

€Ç

	    œ@dy 	  #546;2dÈŽ@   ÕN+k    +".546;2+	8	8b		     rÿÀŽ N   #  #!"&463!2&+"&46;2&+"&46;2Žÿ  	È		ÈŽŽ,11      Ns ¥ 
  ?2327+"#K8$rm78     ò•À   "&=4632¤		    Çk9¤    +"&46;2988“  r yŽ•   %+"&=46;2Ž=r=!ªÀ00œ!   œ ¤d\   %+"&=46;2d"V""V"Ü!!H!!  œ ëd@ 	  7"&=3#Õ"È"ë!!     9ÿÎÇ $    6"&462462"Ž##ý##$$=$$      2   5!! þ 2  GÿÜ¹     6"&4624>32"&€     ¤òÀ   !"&463!2äþ8		È	¤    ª$GÄ  !   #"'#"'&7'&6?&7667'G7645I+++€7		7*		*7+""   U«N    #!"&54>3!2«þä>    ÿù 2    %#!"&=463!2!! !þr!!Ž!þ  þ ‡""r""Ç9    2  ù   5!! þ ùÇ      ù   %##5##5#5 UdŽdUùŽVVVVŽ    N  Ü 	  # 4 E  72+5!#"&=463+"&=46;2+"&=46;2+"&=46;2 ¹	8		8	€**	ñ*		*ÜUŽŽUU9GGGG         •   5!#!"&5 	þV•c	     ‡ 2 
  %!54>3!2 þ J53‡r  ò •  ²   %3#ò²    \  ‡   5!! þ ‡+   ñ \ 
   72#"'>+4632d#2ŽŽ2#!0\2#J#2+    +ÿÎÕ @    462"$462"+!/!!/!/!!//!!/""/!!/"     Gÿë¹ $    74>32#"& 462"G9     @  y    53#%3#ò\9     y    !!òþŽ      \ 9   2+547r     y¹ ë    %#!".=463!2%2+5¹þ¹	GþU¤	8		Ur  GÿÀ¹ \    +"&=46;2+"&=46;2œ$ddd     À @     7+"&=46;2+"&=46;2+	Õ		Îddd    9 2Ç \    73#%3#9r\***   Ç 29 \   73#Çrr\*   Çy9¤    +".546;29H
H—		      Üò2    #!"&463!2#!"&463!2òþ8		È	þ8		È$		5		  «‡UÀ    +"&46;2Urr¯  9ÿùÇ¤ 
  2!463Žþr!¤þŽr"     9ÿùÇ Ü   7!!9ŽþrÜã     +ÿëÕ\  !  #!".=463!2'#!"&=463!2ÕþrŽþÈ8Çd  U À«@   %#!".=463!2«þäÜH     9 Ç \   7!!9Žþr\G     U 2« \    73#%3#UVV VV\***       ‡   5!#!"&5 	þV‡U	   Á¹•   "'&7>72;2+Õ	4*++*
	(	  ò k  ‡   %3#ò‡  œd@   3#œÈÈ@9    ‡ $ 	  %!5463!2 þ ª‡r      ‡     5!!2#"'>+4632 þ d#2ŽŽ2#!0‡2#J#2+      ‡ä ë   1 B L  %+"&=46;2+"&=46;2+"&=46;2+"&=46;2'2+5€++d	*		*	þÕ++c*		*ÕG²*		**		**	**		Gd     @  \   53#\   ò @  \   %3#ò\  ÇÿÀ ä\   3#Ç\þd     rÿÀ9      73#53##5?#57Õ++++VÇŽŽ²rþñ   \œ@   %+"&=46;2œ€€k	Ç   œœÀ 	   #546;2$462#"œœ€ÿ "/!+>/!!     ¤€     3#73#3#++9+++++++*    k€ Î     %3#3#73#++++9++Î****     ¹€¤    3#3#¹99cdd¤99      k   #!"&=4>3!2ò!þr!.A32UŽ!!UfZ    N  y   5!! þ y+  + Õ \    72#"'>+4632€#2œ1xœ2##1\2##0S#20    Q N¯ \    762362Q4¢4N     GÿÎ¹ @    462"6462"G!0!!0ß!0!!0/!!/""/!!/"  Uÿëä@ 
  $  462#"6462#"!".5463!2dðaþ	q		9    ¤      3#73#73#GU€rrŽ²¹cccc/
*      N   #!"&=4?>3!2ò!þr!-
$3Ur!!U-G!    dÿëœ $ 
   462#"6462#"dð      k y     5!!%##5#5353&+"&46;2 þ ¹+++¹				•*œ++++e    9 Î y    3#6+"&46;2rG€Ç				2dž    « ù N  -  2+#5##5##5##5##5#"&463#!"&463!2òGþÇ9NG        %2#!"&=4>;2Ç!!þr!Tù!€!!d'      \ä ‡   7!!Èþ8‡+     +ÿÎÇ @    462"%4>32"&+!/!!/	!!/"/!!/"9!/""     Gÿë« $    74>32#"& 462#"G+     ¤ « ù    7#4>;#532dHG+	¤UU  9 r2   +"&46;2r	)			   U Ž2   +"&46;2Ž		)			    ÿù  ù %  %2#!"&5474&=4>37>;2Ç!!þU	œ$‡!!9      ÿù  \   747!#!"&5474&5í!þUN!     9ÿùÕ \ 	   #&5462#&5462â¨2G2ð¨2F2#22##22#  UÿÎ¹ @    462"6462"U"/!!/Ð!0!!0/!!/""/!!/"  rÿëœ $ 
   462#"6462#"râ    ä ù+   +".546;2+**	     œ •«     +"&46;2532'#>399€&vGGG'     ÿÎ  ù   / =  +"&=46;2+"&=46;2'+"&46;24>;2+"&ä++þœ++9			r				qqqˆ
     ÿêä„ 7  62:&".'.5'54>3>€+ª+

!+;;+!		y#-+r	
r
	2)$     ÿêä ™   627&".'.5'5‰îm!+;;+!	•g	
g     U ã«¤    $"7>23:&+"&46;2`ÀK/(	d		d	ëO	
O´    9 NÇ ‡    6+"&46;246;2+"«99»99v(  d œ @   $#!"&463!2œ	þò			3     B •¾ á 
   7"/&63"'&?6«UU¢UU•*+++   ry ¤    +"&46;2 	d		d	—  äy¤   3#ä88¤+  ö Ï0   %#"&?>320		ä		
     ÿù  ù   %2#!"&54>357>;7>;2Ë!þU	&3
%¬•!*!*!+!!+      N  k   767!!"Øþ\  ´ •ª Ü    %532'#67>3U!q…•G	GG   ÿÎä y    +"&=46;2+"&=46;2ä++þœ++qqq  ÿùä„ +  62:#!".5'54>3>€+ª+


þª
	y#-+rr
	2)$    äy‡   3#ä88‡  U ã«\   $"7>23:`ÀK/(ëO	
O    N  ù   ) 7  7+"&46;24>;2+"&+"&46;2+"&46;2G			r				þãDä
P$$+$     P ‡° Û   %#".'&6;2>76dÈ"È
#‡		     2ä k    73#%3#9999k999   9 2Ç k    7+"&46;2$+"&54>;2Ž
9
N  œ 2d k   $+"&46;2dŽŽZ   œyd¤   2#4639È¤   Çy9•   3#Çrr•   ÿù  ù    #".54>37546?>;2¹	
9#MUI5*"7.+U    Ž ‡µ Ü    %>3#"532Ž
=«

j+$ÜN
/*L    ÿëä„ 3  62:".'.5'54>3>€+ª+

	:*X*:	y#-+r
	
	r
	2)$     Î  ù    7+"&46;24>;2+"&G			r				ä
     9 NÇ ¤    6+"&46;2+"&46;2œD‹$$+$   8 ‡È Ý  *  7"'.'.>23"'&7>76«0
	¦9	0‡

 
   3 $Í R   $ '&76 76±þž


,


$



     œÿùd %   %"&54>23:6d:T:
$
    Õ \  Î   %+"&=46;2 		k		U    ä$   7'&54>73546?>;2#G99Ç
+#+5r    ¹ À«     %546;2+"&'46;2+".U	8		8	œ GdÎ++-+   d \Ç ‡   $#!"&463!2Ç	þÇ		9	{         ¤   %#!"&=463!2 !þr!!Ž!@!!+""      \ 	  !57>;þò+š«HU
      ¤ € ù 	  7#74>;€d	¤8
    dÿë N 
    462#"6462#"2!5463dðS!þ¹!c!¹¹!         ¤   %3#!"&=46;2¹G!þr!!+!\!!+""     \ ¹   2#57>3Ž¹+HU
  ÿÎä @     462"%4>32"&"462""/!!/4""/!Ž!/!!//!!/"9!/""/!!/"    9ÿëÇ $     462"$462#"&462"9DŸ    Õ \ N 	  2!5463Ç!þÕ"N!¹¹!  œ ¤ Ç$   3#œ++$€   U ñ   %+"&?>?6UÞ	!ÐLJ#.!     dÿù¡ l 
   $"&54>32462"¡	þÕZk     œ ë Ç   3#œ++  Ô 'ä ë   7"'.?>;2+"ä+$Ž		Ž	'`6		b
    $ : ²   70#"&5746
$
q	r    9ÿÎÕy    ?>;2+"&462"ëh!€¯!/""/hÚ Ú  b/!!/"    @¹@   %7>;2+"&
j
€\ÈÈ    Õ Õ •   7!!Õ ÿ •Ž     ÿëÕ •    %!7!462#".ÕþGªþ€yŽ    ä $Õy    %'?#6;2ÕŽc*+–¼hÜ8€Ž€  ÿÎ  Ë   $462"JiJJiiJJiJ  3ÿþÑ œ   $#".4>32Ñ/ $$ mA.$+%    R ± |   $"&462±''`''     2  k   5!! þ k9   ÿÀ  ‡      5!!3#73#73# þ U9988Ž99‡9rrrrr     U « @     73#73#73#U9988Ž99@+++++    Žk À 	  #"&=463 UÀU   œ \  ¤   %!"&/ ÿ 2¤H$    œ ‡  ¤   7!!œdþ·¤     + ¤ ¤ 	  %!"&54>; þŽ!BuzÕ¤6 U6  + ¹  	  !"&545ËQãa(#     O2ä‡ 
  (  2+67#"&=462+"&=46;2+Ü1\–			r	9		9	‡+*G999     ÿÎ À   6267>29+	
RC&@2+c*	^<G$#þœ   rÿÎ9 $    462"6"&462r##®##$$=$$  €ÿÜ+  
   4>32"&6"&462€«  +ÿù  ù 
  %!".=463 þd!ùÿ Ž!   3 Ü  ù   %!63 þ3!ù  +ÿù  2   %!".5 þd29     + 2  N   7!!+Õþ+N     + kä ²   ( 8 H  73#7+".=46;2+".=4>;2+"&=46;2+"&=46;2+UUª	Gdd		²G							 + œ Î    %#"&=46;2'";2=4#‡G		G	PG	Ž		Ž	«ŽŽ   ä À«   %+"&=46;2«ŽŽÜ   ÿÀ  ù 	  7!!"&=469Çþr/C!ùþÇC/Ž!     $   7.'!ÿ    N ¤   !! þ ¤V      k ‡   !! þ ‡     Õ¹À   2+#75#"&463Ž	*r+À	99#    Ç $  ù   7!!Ç9þÇùÕ       @ « Î    7+"&=4>;2'2#«99«\V
V   ä \ä Î  "  %+"&=46;2+".=46;2U9999y999  « ÎUy   3#5353GªGGGd      2ä ù 	  %!5463!2äþ8"V"2Ž!!  ÿÀä ‡ 	  7!+"&5ÈC/ä/C‡U/CC/     @ä À      73#73#73#73#VVrdd€dd€VVÀ€€€€€€€  #"ë³   %.>ØþW
ª
$r
r
    Hc­   /.>7L‰R‚%  ‹7mŸ    '.7>.>Å
¥z
,   ¤ä À      73#73#73#73#VVrdd€dd€VVÀ  Ç ë9y   3#5353+r+**d     UÿÀ« ù 	   5!+"&2!63UV"ä" þº GG!!    U @« À   7!!UVþªÀ€     U À« Ü   7!!4]FþªÜ    « @G Ü    73#73#«€Üœœœ    äyÀ   3#ä88ÀG  äk¤   3#ä88¤9  M y³ •   7&'!Tfy   y³ •   %53 ³y  ä¤ À   3#äÀ  k¤   3# ¤9     GÿÁ¹ ²   %3././ ¹#²1.;0		#)%%  GÿÄ  ²   %./ ²Ç#)%%   ÿÀ     5!! þ U  U ²«y   #!7#537!«þà#@U99U99   Ž ²r ë   73#Žääë9   rŽ$   !!rþä$    Ž ²r\    3#3#Žääªª\r   ¨ ¢ ç 
  7&'&4>?Ú,A
Þ,		     Hä Î   7!.'.'È_{hÎG	      ²ò Î   %#!".5463!2ò	þ8	ÈÀ   ÿÀ  …   547676#!"&56†l†6þ8l
	Š    i 
c    /&?>?Z	s
-.'s	r'.-
s  ê#l   &'&676'&'&'4>ò

	=


	    Â0)p   2763'&Ä	K     í â].   %"&#".'&'&76326V
 ù
  ¤ Ø 5   &'&/>76 	
 
#"   á9+w   /0'454&+"'&76	h	


     ë á_* !  %0#"'&'"'&'&'&76763276Y	 ù	    ¤ Ù!5   &'&/>76
 	#"   ë,$l   6'.'&6j
   éW   &6+&&'&76ðD  ç7(p   >2&7"&'&6ð
i
	     ë á]* %  %#0#"'&'"'&'&'&767613076Wø	   ¤ ×5   &'0&/>76
	
 
#"   ¹ @ä ²   %#73Õ@r      [Ö ù   7232&'&'&.H$CUG *³+L"ù
%&.   9 ³U ù 
  $2&'&54Aù
    Õ   2'.'.6Gc	Ž#R1T$	*    " fÕ ×   %"'&'&'7³$‰’&´¬Af);		
   « N¦ ¡   7676767676#"&'«H6	
DJ$k0	
	    ¹ ¤  Ü   %2+54&+463äÜ  ®´ ë   %"./72«	*&GÜ+     ®© Ý   %"./76œ*&4"²	     Õ À+ ù   %'?+99ë+      @ @   %#!"&=463!2 !þr!!Ž!y!!Ž!!    + ‡ œ ù   6462"+!/!!/¨0!!0!   d ‡Õ ù   $462"d!/!!/¨0!!0!   €ÿÀ€À   +"&546;2€!Ž!!Ž!!!Ž!!     Çÿë9 \   %2#".546 !!\!!    Ç ‡9 ù   %2#".546 !!ù!!    Ç$9•   2".546 !•!      ² •   %#!"&=463!2 !þr!!Ž!ë!!q!!      ² •  
     546;&5733#7+7UU!rGÚdãGãœGÞ!+d•U!Ù9ããÞ~!c  9ÿëÇ ²    73#%3#9GGGGG²ÇÇÇ    &æÀ 	  %!>3!2æþ6&%&t  | t†~   6462"|NnNNnÂnNNnN     ÿÀ  !   %!".57ùþ8	!EE   ú 2   %!763!2úþÈ
     X Pª¢ '  %#/"5'&?'"4?'&674276¦m@Z
Z@mm@Z
Z@þ	Z@mm@Z	Z@mm@Z     €ÿÀ ¹À   "&/4>2¹$	È	    œ •Ó²   46&5œîî‡
m

m
  dÿÀœÀ   #!"&5463!2œÿ  $È   ‡ « ² Õ   6462"‡·    Žÿër•  #   2+"&46;542+"&46;54>^		È		¹		È		¹•Ž€þ¥	+   Žÿër 2   "&=46;2+¢		È		¹+			     Ž Nr •   $2+"&46;54^		È		¹•+			    Ž Nr•  #  6"&=46;2+&"&=46;2+¢		È	¹			È		¹N	+”Ž€    ÿÀ À     2"&44&#"6%327–Ô––Ô–¹lM6- ÿþŽ2U26-ÿÀ–Ô––ÔjMlÿ-62U2 ÿ-     ¹ •   7#".=4>;¹		G    « r •   73#«ÇÇ•€  d Õ •   %2#5¹
U•G€    M ¤À <  %"'4&>7>'&#"765462&'.7>32#"‹	-	."-¤	3+		% ",(		   ÿÎò²   6462"ŽÈŽŽÈ\ÈŽŽÈŽ    9 kœs ) 5 A  %"547>'&#"765462'.7>32#".=46?!2+5Q*
			)	 "ä	+
+Î

	

'
	GG    œÿùœ‡ 
 D   4632"+".'=4#"+".=#"54>;76;2$gG9dA)c€rrò	    Gÿù ò ¤ (  7".463723546?2++*.5U	UU
‡rrr	    € ‡ ¹ À   6462"€˜    ÿÎò²    "&462òŽÈŽŽÈ$ÈŽŽÈŽ  Uÿùr‡  C R  462"+".=4#"+".=#".54>;76;2#".54632ò##gG9cï
		
A))c€rræ	_		
    r 2 ¼ – 
   6#".5462"&462¼
Š

E    ÿÀ À     2"&44&#"6%327–Ô––Ô–ä†^T@A7þ8=i>T@þ¿7À–Ô––Ôj^†7þ¿@T>i=7A@    « ²ä¤ !  2+"+".=4>3543ÕÇ	+/@+"UU  rÿÜŽ•   5  2+"&463"&54>;2#2+"&5'5432354		+r		+		]€€•*	
Çœ
œGG     r œ‡  ?  72+"&5'543235472+*+"=4>35432òVVªœ

#²r
r99€GG     ¹\Gy    2+"&463"&46;2#ä		U		y				   . Bú ¤    7"'632.!"'>32&d%>1	"$#	49&)k4( +&   ÿÀ  ‡      62"&4264&"$2"&4264&":S::S:F;**;*WS::S:F;**;*‡:S::Sq*;**;:S::Sq*;**;     œ « Ô ,  %1"#"+"&46;'0+"&46;47621ªœƒIŽ		€c%		r  — Q Ü   %3#"'&?'&63D
_		UÜ½
"m
`     P  ¹'   7"'&?654.'&6d+	+W+"-/U     k Î)    7"#'.>0#'&63276ÐU
U›Q	
9
þ

0
	     ä  @   $"&462/    $äX / 3 9 > Q s  %2#"&'#"1##"&463272'37'&63276#"#'63#67'#'72654'#"'&?&#"264&#"000*"1+€);;)%8:*);;)
!5X

9
+,H#C&š:*$
*G**%F'ë;R:0%':R;;(D	1%&dd(T¹*)A
A);**;):   r@ Õ\   ".546;2#€G@   ª+ ü}   076/.°
(f	     ƒP Ó    6#".>ª
Ÿ!
   G ² æ    %0#'&63276'#"&46;2wQ	
9
ãGG		²
    ²9   '9+U*     d G  #  %'&'4&5467'#"&5463267+


6	+(Î
*-	!G@*	,    ¤Ž2 	  7'9+#9+1*  rÿë€°  ! .  "'&"'65467>761#"&>7646+3G'
3
+
V		\9
þ¾

	#    xe!£   6#"&""'&7676'‰
	    ä `M Ü   %&'.5467+ÜG  ;U ‹   %76*>7%	%	
y	$  € « ²    $+".546;2+"&46;29	š	š{	œœ©		‰			    î L Î   %3#"'&7.?
Î¯
   z ° Ô 
   %"/&6'"/&6œcc“€œ= c		   A  Ÿ â   7"'&?'&6d'0A.v%1Š
  ˆ+ ü‡   >/.54&4Ž	
(	y


	   ¡\ Õ• 	  #".'&76Õ	
 •9
    ¸ ù€f   "'&"'65467>+3G'
3\9
    rÿë9°    %761#"&>7646
+
V		$

	#  …Y Ø    4'.'.'&636Ì		
"—     d G  #  %'&'4&5467'#"&5463267+


6	+(Î
*-	!G@*	,    rÿë€°  " /  "'&"'65467>761#"&>7646+
G'
3
+
V		\9
þ¾

	#   ÿÀ ²   6227>329+"3-5@@+c*;0+G$#þœ  ‚X ÔŸ   4'.'.'&>36È		"–   §ÿÀ  1 b  0##/&#"'&'0=5470:727>?32>127#0#*1""/7'&?6746?7>163503 			
1	6
		   ‘e%   67#'&76'4.	/	(
    ÍM-³ 
  &7>0)¬$,     ã 'Œ   '&76.'#".>46702	i	
	   ÉX2À   +&'46'&&'&76(

.£
	    2U£    &76".'<+Ž
	    ÇÿÙ= Ð !  .7654.5'47>?>í1&7

T6   ïÿì† ê   './&'./&>76}	#	"&;
_3    Û •GS   %+&6'&6GF	-$¤<"?G    À ƒ   '&76767>ü
	)""    ÆX2Ã    #&'6'.#"4&'..762676(

,£
  â •GR   %+&465>GF#$¤#3$*G   ËJ*±   &7>	'¬"%  ä$&‹   '&76'&#0'&76&672>		k


   ÈX/¸   #6'.'.'&66%



,§&
   å •GR   %+6&7>GF	 $¤ N%F    ÿÎò² 
  %"&4632òŽÈŽŽdBoAÀdŽŽÈŽAo   { uk  7   "&462#"/"&=4?'&?6;2#"/&'eI.
785 /
VþÃ|W		c6./*
'M      ÿÀ À     2"&44&#"6%327–Ô––Ô–ä†^T@A7þ8=i>T@þ¿7À–Ô––Ôj^†7þ¿@T>i=7A@    ÿÃý½   "/&4?62'.ÅÅ.Å,Å.ÅÅ.   #ÿãÞ   "/&4?62		¿		¿		¿		¿		¿		¿   A ¿   %/&?6©©©©©©   z X†2 B  %/#"/.?//#"'&?#"'&?&54627&5462|


'
	1 -Ê

bAA
b
M
..
<	%.  wÿë‰y +  %#"/"&=4&""&=.6?&5462}--
d$à
Ù		kk		Ù?   wÿë‰y +  %#"/#"&=#"&=#7.6?&5462}=;++;=
d$à
'‡\		\\		\‡'?   ÿëßy 1 _  7&'4'#"&=4&""&=#"'.767&5462'#"&=#"&=#75.?&5462#"þ			",	#
,Þ9*+9Q#Q
½		¬
	kk		¬PkVN		NN		NV[_  Uÿÿ¨‡  * k  7'&#"#&'&6766"1"'&'>7267#"'&'#".547#"'&4766767&'".547>26Í		 ú
		-

	


"++<+
+"
a
((
&q					
#

	++

#

    hÿÀÇ À   %3#!"&?>;rUÿ 2	µÀ«    $d À 	   %"&54626#!"&463!29UsU*É*+
þÚ

&‰'>>'  9 À9À    %2#46372# ãÇÜä		À   9 ¤ä¤   +"&=46;2ärr‡ÇÇ      Àä‡    $462"73# (««ÑÇ     ‡d ¤   $#!"&463!2d	þÖ		*›	      <è# ! B  &4>327627632#"/##"'%2#"&#"32632#".4>
)%)
($$a,	
.11
	…‰‰…ªyyÌ	 4A4  ¤ÿÄÿ¸   %"&=4'"/&4?62Á>.	Á		*		À	Ç?H__0.Á+Á	     ž ÑÁ   $"/&47>Ñ	ù		úž	ù		ú  ÿúÿåWB     '  6&?&&?&&?&?&?î
à

à!
µ

µ!
†

†Š
´
´5
†

†ì
ß

ß5
µ

µ5
†

†v
µ

µ!
†

†    ! ‡ § 
  7#"&'&676œ4

/Î '#+      š €   '&'".67>€
	*#		   « Îä ë   $462"«×			  U •äÀ   $"&=4&#"#"&5462Û	+9+•	ã
ã     ŽÿÀ«‡   $  #*#".54>2 462"74>32"&Ž

ÿ Ók
þ_    ÿÜòk  *  +".546;2!"&'&>332>2œUUÿ 6\	¹¹
\		þ|sU# (    ‡  À   $#%".54632 þä›  b NÇy   =  #".572+"#"&463021&5463".'&>32>7>¹2#'«	«%(% 
$$2'U	"
þÕ	


	   OÿÜ¹–     %5463+"&5654/63Ž€‹qcM²€cœœrR    + Æ Žk   7/&=4>ŽGGÒr    ¹ÿùá•   ) 8  "&572+5#"&463021&5463+"&575"&4?6023Ó2G2«	«¨q€€?S
$@#22#U#	
Ø¹€;A	U
    ÿù ò Î   72+"&5"&=4632Õ€
2€
€  ÿùä• 	  " - Y  2+!3#"&=4>;#3546;2354&+"2+"&5#"&5#"&5#"&5#"&5#"&54>3œþäëÈVrV	8 			NÇ ÿ Çÿ  +þÃ			   r Ž 
  " -  %2+5#3#"&=46;#53546;2354&+"rÖ·Ž8U8Î€¹¹€¹¹	     ÿÜä¤   ; F  2#!"&54634&#!"3!2623:#"&5#"'##"&4632264&#"ÇþrŽþŽrr	D	
2þäþÕ ÿ †+)+		 Ž ¹‡   %"&5462¹V		    Uÿùñ 2 	  #45462ð›-A.   C$À   +"&?6;2ÿ€G@
d  9  Î   %#!"&=4>3!2þÞ
""
     ?ÿä‡ 2   %#!"&=463!2‡þö
		     9 Yœ 
  7462#".9h“hhI0R0°$33H3(      A ^ Ÿ   6"&462^''„''    ÿÄÕ Ÿ    "&=462462"^''Œ''    ^ÿÄ¶    -  54>2#".'+"&46;2+"&46;2w			Œ	NNŒ	NNŒ				Œ	W		   U € 2   7!!U+þÕ2+      ÿÀ    $2"&=!"&54632!54ìþ8È¤	Ç9Õc   ¹ y ò Î   7#5463ò9ÎU9    « $ä Î   %2!534>3¹+þÇ	½(qU      $ ¹ y   7#5463¹yU8    r º ¹ 
  7>'.1@(1 " 	    ¹ yä ‡   7!!6¼(þÕ‡  ¼ ‡ä •   %!67äþØ•     M € Ç ã 
  7.7>u,-,‹&     K ‚ œ ã   7".67>.p
			%
‚		   + ÜÀ   2#54.#"#546œ5#2BÀ5rr2$rr/C   +N   77777!þãNþ¹    ò •Õy    2#54&"#544_B2G2yC/rr#22#rr/  ÕÿÀò   77777!Õþãþ¹    Õ + N   73#ÕVVN9   + @Õ2   %#!"&'54>54>2«þŽ6KTK6À!	!%66     Õ+\   462"Õ$$ ##   ÿÎò    #!"&463!2òþVª
     +ÿëÕ $   $#!"&463!2ÕþŽr     ÿëò 2   7!!äþ2G      ÿÀ     "&=4624632"& þ 2Ç		Ç9þÇ    $ä y 	  %2!5463Çþ8y88    s œ · 
  >&()3™     yÿÜœO 
 6  .676>3232+"&7674&##".'&62 “ !!!'
,G¡;
'	("	("E$
*'9&+58
    < ¾©   /.6?636³££¦	E]]_  +ÿëÕ•   3#'5«ª€€ª€•«€€«   ÿÎò²    #'575'#3a‘‘Â‘‘6€ª€€ª²‘Â‘‘Â‘þ¹««€     € ‡Õ2   %!'!¹þãU‡«    $ä¤ + / 3 7 ; ? C G K O S W [  %2#!".54>7'#"&46;02!2#!#"3%7##7##5##'#3'#35#37#37#7#3'#3'#3'#3ÕþÇ
)8		DIþä0550	..O)-J*.G-/B21J=9V=9Z10@õ	X
ªŽ9r   œÿÜ¹ 2    462#"6462"œ$¯##$
$$   ŽÿÎÇ @      "&462&"264"&462&"264ß/""/!-Â/""/!-2"/!!/4E"/!!/4  Yd¤   5d((d—K     ÿÀ ÿÜ   7!È@     ÇÿÜ9     %3#'3#+d+++   ë« 	  42#6ù*•@9  9ÿÎÇ$   %!5757573.4>75733Ž9þr99
*
9$9999    Ý ² ù   %#&;24	$²G$   ÿÜå ¥  $ 6 G X l  7#&75736542#&757365423#&757365423#&75765423%#&757365423#&757365423¨Å99þ9rAO?O      ÿÀ $       7373737!7!Ü*yrãäþ«Vþ9È€U9G    Ç $9 •    %#4>;2#4>;2+V	*	r8\>		  «ÿÜU    #<>;2UªV$		  œÿÀd \   *  %#"&46;2#".546;2#"&54>;2+VV
rrª	ª		@9		G   +ÿÀÕ À   %2#!"&=463¹þrÀÖÖ  ÇÿÀ9 N   73#ÇrrNŽ   + ]Õ ƒ _  %#''#"&/"'#"&/"''/#&'5#"&=#"5#"&/#"&/'0#./0#'#"&/./5!Õ	


	
			
	
		
ªa	"  +ÿÀÕ •    #"&=3#53G€@ÇÕÕÇ     GÿÀ¹ •    73#%3#GGG+GG•ÕÕÕ  ÿÿ y‡   #!"&7>7>76/X..þ#,W„"Q7;
	"*+K   mõ  ˜  .762676>>7&/#"&/#'#".5'"5#"&/"&'5&'5#'"&'5#"&5'#"&=#"&'5#"&/#'#'0"&/#"&/#.5#'"&ò		à/
	

		
	

vë
							
     * ‹ª\     &  67>7&/67>73&'åa 	 !
X##2Š!5	
>

\ZA!	*;LB<\- &"!b4!     AÿÈÀ H    7&47%&5Gu<R7!% !O  ˆÿÅx W    7&4?&5ŽæSeG!'!"@   +ÿÜÕ¡   & -  !"&5463!2"3!2654&#'##5#73'353«þªVþ™Vò6!*"Ú"76!*$ ÿ 9ÿ  Œ6++66+     d œ ò ' P ~  %2#"&=#"&="&=46;&5462#2#"&=#"&=".=46;&546232#"&=#"&=".=46;&54>32				q	å	µ.	<22<	.		.	<22<.		.<22<.				   ÿÛ À  # .  6#"''7&54632?"&472654.#"ç
=+XNX=,
'èM­- 		f
+>XNX+=
'
ZM­ -=
  ^ÿÙýx   .6&¶þ¶"K"K"þ¶"  ÿÿ É?À /  #*&"/.>?627>1
89d/'!	³$9
9d  ÿÀèÀ   .7>?2Õ+gNNg+,k21A•O”y__y”O    ÿÞø¤ 
  &>2 ø<(b''c'<"YJþ¶  ÿÞø¤   2¼<ø'cþ¶YÆ     dÿÜœ•     7!!!!!!d8þÈ8þÈ8þÈ\€€Ž   UÿÀ«¤   / ?  #!"&=463!2#!"&=463!2#!"&=463!2#!"&=463!2«þÂ>þÂ>þÂ>þÂ>“¢“¡  9¤rÀ   +"&=46;2r  °      ÿÀ  ²   5!#!". þr¹¹  € Ü€2   %+"&=46;2€ääë		9		  ¹G$    3#73#¹r$   « ëU ù    73#73#«99q99ù   9Nã­   2+"&4632&54632>326½l

	š 
    ÿÀà ²   %#!"'7>¢þr¢²íí     9ÿÀÇ ²   739—`—@òò     ^ÿÀ¢ ²   73^}J}@òò     «ÿÀU ²    #'3##7U9#9?@òòò     ªÿÜU ¥         3#53#'3#73#73#53#53#«ªªªªªªŽŽVVVVVV95/+&
	    d ‡œ2    7"=42+"=4;2r*ŽžŸ   d Üœ2     #!"43!#!"=43!2œþÖ*þÒ.2P 2Ç   2+"&4632&54632>326¡m

	}	
   „ÿÀ| ²   73„a6a@òò     rÿÀŽ ²   # + 7 E  #!"&463!2&+"&46;2&+"&46;2&+"4;'+"=4;2'+"&=4;2Žÿ  	È		ÈŽŽddJJ..,11+    ²  é    72326323#5>2#263232>3+
Ê¨Ê
é 	    « ¤ò Ü   %+"&=46;2ò	++²  Ç \ä À   %3#ÇÀd  U • ä ë   7>3#".'U  -¯G  g | Õ Ü   763'&g95b°,8(.   XØ ¿   %&'./Õ#kÊ¹
]	
)    X× © 
  7&'&d(´#kÊm%		 6$v   /&736o,,'JJ  d öÁ6   76/&gJJ/,,   ÚÙ™    /&?6/&?66					l						e						š	   ÿûÿ» ¥ `    7/&?62/77




		n





=






n





   (ÿèü¼    6&6%/762ši	jb*—Tu$Rj	i	$uT—*    j *Üœ    '7'7ëbb‡!+ þžh   ÿûÿ» Ä „   /&?6º



‚



F
	



‚



3
   )ÿë¡a   %'&>7>JNHA)Al./=(ÄA6-bŠ./(=   ¥eá¡    &6á2
2—2
2  ÆØ›   %"/&4?>U		o
'
Î		n
   –VÜœ   6–	
’
	   ˜†ÕÂ    &6Õ
3

2
 ÆX”    &62
b
2
 DM   &'362&']	



0



	     ÿÀ  y   %!5 þ y¹¹         \   5!! þ \U   $ä @   %  7+"&46;22+"&46;2+"&46;2ŽU		U«VV³	UU2   ù ¾«    6462"6462"ùzÊ?  Nz   &'&76'&éK.M$'F+    ! Üõ}   &'&67%6ñ;óqAKT%5
-:  QÑv 	  &7>·v     Ž:q   "  7.'&6547676767476%#/´.)15'ýT"!,*L^    X    * 2 :  4>32"&462#".462"462#"462"462"q*			)22		2	J     á ±œ ã    6462"6462"áƒÅ  ÃV‘   &'&'&ò(/&#`2"     , Ëþp   %/.7>úLó\N<è2383   ²ç 	  '&67>Ò		     ¶8Ó   "  >766"'&76674762"
5.!®-"R<JST ?		4
6	F    ¯ ÿœG   ! - 8 C  4>32".462"&4632#"&462#"&4632"&4632"	)22	2		2			     y ˆ.=   ?y——¦——     ¯¾    7"/&4?627"/&4?62yGGG F		F	GG	F		F GGG YÿÌ  u #  47667>4&4'&>"&'&Y,
$		#


$    N °| 	  '.?6°<(.(     g €@Y   7"/&4?62üe<		dˆd		<e    È zF ÷   $'.>@*5
	©)		    <Ž ·    %&>'Že*93¡e9*>3  m 4– ]   $&6–I   
 §¶      ?777=oGoþªn«oºn$nyoˆo   XJ €r   &6€^  Q É y   %5462>7674632#"&Q	'
"	'	 €¹\   #73¹9+G   dÕ@   #73Õq]+    U Àú@   %#!7#737#7333úþj{äù+U   œ2 Õ\   #73Õ9*2*      N÷2     #  #7!7!!7!!7!.'.'!ÇQwþyþ€yþs†00B9=-!9ä	2+*+q	1    •ò Î   7.'!F+ä	•	$    ä ²Ç À 
   ( 2  73+".573+"&573+"&573+"&573+"&5ä**+++9**+À   ÿÀ  @    462"$462"%6%%6[%6%%66%%6%%6%%6%  ÿÕë +    462"$462"$$g$$$$$$     ŽÿëÕ    !"&463!2Àþä			    Pÿüû }    0&54632&#"%67#4&r;)  .þÞ,:2#);. P	F.+     8ÿ÷ žš   &76EUU	’þn  = I { ¾   7'.?>W
KT
T    V Ÿ´   '.>„
		ƒ
	   l =ÿª    /.?6 462"’	g		ª[
[þ£		     r ä¨   '.>É*			)	
t			
   ·r ãŸ 
  .>â			„
	  « kÕ ‡   %#"&54>;2#Çk     ÿÀä @    6"&462"&462Ž%5&&5{&5%%5&6%%6%@%%6%%    +ÿÜÇ $ 
   3"&4632"&462r

U

     
ÿöù ;  ?'".5&6236?'7#"'.#"&>7>S%$"	?',&•R*
jc
!
{
+
)	   òÿëU $   #".546;2#9++   ¹ÿë    #"&46;2#GG    ‹ †¹@  # 6  %".'&63276'#"&46;2#'#".=46;2#9	K'*9..‡		U		+     d Ü r ù 	  7"=42#kÜ   ‰ å Å! 
  7&?6'Ž((ê((    Nî Î !  %.'&'.6?2>7á/+/#78-YtX-Î
!	

 	  ò W ñ 	  $"/&6…
~~W~	~ h +¸ {   $"/&462ª#"+#"    ÿÀ    #!"&/5> þr
$ps£þóF706 ÿü Hz ÷   %"&'&767>762rÿ  -

#	û	ã‡
†     ¨ y 
  7"/&6ž„„ HH    ‚   ¯   %&'&767>762øÿ .	ü›††   ƒ .ò á   /  %"#&?>/'"#&?>/!"#&?>/#0
(Š#0($/'.^7
-SF_6	.T_6	.T     Ž tå-   62'&'&67T0,
.9'	S	      ºä ü    73#%3#EÍB   Ž ˆå@   62'&'&67T0,
Ÿ.9:U     © ˜Ê7 
    +  7"'&?6"'&?6'"'&?6'"'&?6²¯¯^¯¯!¯¯"¯°É]]1]]]]]]   RÚ&   %'.7>ÓKk;S|V]zž&i$!	A      ÿÀ€ Î   !€þ€rò@G  L 6a 	  &676S   È #    4>2#"&462#"	U:		     ÏR^ˆ    .>/:&+:&R   cî_   $.>DÄ}˜Ä}c*[W *[W     ó$   %íþ-$fc    ÿü Š   $.>PÏ… Ð„,a\",a\   . ºÞ†   $.>K­p„­pº%KE%KE   ‹q    .>7hDOhD(#	(#  ‹Ž 	  >.F3OhDW!;	(     à ™Ù Ë     74>2"&4632"6462"à		r	b±
		 × éö   $&6í	é    ÿßí«   .'.>762Í	þê	(6˜
þê	!   ÿØö–    '.>76Ï'þê,V!)–'6þê,!     † Së ù    6&$&>%!|@!  – ¯á ú   %'Ö@ú@   ¯á   $&>¡!¯!!    ÇÊ   %'.67>Â

	å	

  [ ÓÄ0   %&'&76®ß   > ÷™R   $&>T$÷$#   >R   7>EFEF 4\    &>I##$  MuC    &dC  ÐÿÞ$ 2   &>ä!"!      Ïÿè 3   %'@3@   Æÿè <   &>Ú!!!     º   H   7.>7>2û
	




     ”  ü i   7&'&76ç     w 0 Ò ‹   6&>$0$#     w : Ç ‹   7'¼E‹F    m : È •   6&>‚#:#$     ¤+@   3#@œ     U ¾ œ@   3&54>Ž
@r%"    ŽÿÜÇ    462"Ž   G ² € Î   7+4732€2*¹	    ÿÀ € 2   462""/!!//""/!    +ÿÜ d    462"+    Õÿù¹ y    %2+"&=463#2+"&=463œryGGGG   ÿÿÿë ¨ o   7&7>#".V/,	>8  Gÿë  ¼ 5  ".53;26=42;26541653#"&54&#"#œ)%d0



r
4

>b'€
…

…	G+«	
	-	  dÿîò \   4"'&54>32"är)

#$  G ² \    7#46?32>=".54763!2#<.+«d9	9r¹²9]M'   rÿÀä 2 
  4>32"&r""/!"/!!     ä #  %!"546?54>37>;232ÕþG		G«
9'U7    Ž ¤ ò ù   746;2+".Ž!
+	H²;9   y  ¤ 
  %+532 ÏÏŽ	+      2  y   73#yG     ò @    7#"&=46;2!#"&=46;2		Â		     Õ N      7"&542#"&5423'.Ž,(,€
,€9
9##
#	
 ™ÿèú I   %"&".'&6ï"3&"4      Nâ Ã   %2+"&##4&546?Ú½ j
XÞj	))(	L     jã¿ 4  %#"'.'&7>?654&/6772x
7!º-*&:<
v.+Ö
				!">+     Ä ¼—¿ !  %'&'.7672172u"		9&#&*×)%N1 8     2ò N   %!"&463!2äþ8		È	2   ÿÀœ @    462"6462"&5%%5è&5%%56%%6%%6%%6%  .ÿà|      462"6462".û  Â ö½   .>?Ü	²r#       ± «†«    # 1  6&?6&?6&?6&>2/"&>?6&è''9=		Ç	9	85
5
ô:"	
ß	@


    (ÿÀ×¥ %  %6'&'&>56'&5465467>+G""!&†:•:/(7¸K!$ª!1
Í-9-
1H:  ñ V{¨   72>74>'&'&6&'ñ)		)|
n JTQ8
     ÷ Y‚¦   7:>76'.'&6.'÷			(
z	
3X{    	 W“½ "  %2>76'.'&>.'		
	
x

	>9(	noY	  Ušº   %62>76'.'&6&'

&	/u	?W
%iiU
     OÆ·   '&7436'&7>±$Zt  e¨	’‚   8Ò±   '&767>'4'.47>¯	45<!~#6’
PV(&(
  (ÿÇÑ£ 7  %7>'&'.'&6760'.5&7>7>:		!


	&8(	:(&¼Y,"!&# P&.	
Q:     * P@‘   74>76*(1,$%	
µ[!/:(-)((!	1   )ÿÒÐ¤ 6  %'.'&74>7>7>56&'.'&676Ê#|>,;'(1,$
#)
 È;4&.
G!/:(W;"L%!"B     ÿùõ‹ (  &'632+"&54>Ù
‘5L&(7,!œ'.,5'+(~E	( '1/Š5S4$&   I Y2b E  #"'#"'#"&54'&6325030=4'&632=4'&632=4'&6$$
X)e[
	/%"Zl,[
le%
    € @€$ 
    "&54>32#"&462#"&'=4;È

Í	
ÖÖ)2)Æ     ŽÿÓ y 4 8  %2&/&'.5?'7##5##5##5#53353353353767'õ-C	8!0M	R<	+ t;+    d œP  C z  7>?"&7"&=.543232654'.5475462#"'&#""&=.543232654'.54754632#"'&#"d!H;8+![‚[K

	â
		’	.RR­			
+
	

   «ÿÁU y   767"&5«&&6-P-yb#22#   ÖÿÐ* e 7  %#"&=.543232654'.5475462#"'&#"*

					

	     U ¤«p   % =  6462"6462"7".'&632!"&4632>5>Žˆ]
		þÂ		 

"Á))))q
				   à   Í   %'7 ¦fçÍ"f–    ± O G   %#"'&#"&74>32N44			   Ò * ð   $/76ð±"õì…·	    ÷ 1£ §   $&#"76˜
l	˜Qj  	 BÁ Ö        %7?????	



Y		/	.	.	.	.	    @ "L -   %7@*  ú  F   $:1#523 ÿF@@     Ç 9 N 	   %+5276'3#"&59	\	N,@@    w '‰% $ 3 B  $5#0*#"#"'&'.'&62767'#"&54>324>32#"&€	(		(	!,.,!õt!		!‰		     £òO @ P `  '.'&"&'.5.'&474267>77>66'&#"327676'&#"3276ïKK

7FF7þã*	#ê	*#7*'	



5	2	1	-	   ÿÜòÀ   6462"ŽÈŽŽÈjÈŽŽÈŽ    œ {yG   *  7&'&7>'.&462"74>32"&Ï

7Ž•€  
    Pÿºf Ã :  &'&676'&>?>76#2ö-&B	
	<3
O
4
*&!)'




		    y#¬‡  )  &'&76'.&'&7>'"."„:§$


f3   ÿÀ À   %"&54?632û–Ô–Ž.1%$ôj––j2/Œ     b 2ž ò  ( B  74>32&#"7"'&#"&7>2"'&#"&7>32¹$9
á#%¸"$2



	
     ôûµ *  %67676767061676?67677ñþx?i
	C
		
	    ñ{   %6?ëþîTxFT*U*P3*T%2	  /GÙ      /6%67061?ˆF{é%1T+T*2$T*Ue	:		
    À $ 
   $4632"$4632"¹

þ2		Ý))   ¤ä@  #  %+"&=46;2+"&=46;2ä	*		*	þ€	*		*²€€€     d 2œ y       73#'3#73#'467.%òGŽÕyGGGGG#F	)    r@ŽÀ   ".54>32Ž'>R>'&A';Sy!*  œ\d¯    "&462d;R;;R—""  U\«•   #!"&54>3!2«þò

r		    9ÿÜÇk 	  2!463«þrkþŽr    ÿÎò    #!"&=46;?32òþ8
›0

0›	0

0    d ²œ2    $462"&462"&5%%5Þ%5&&5×5&&5%%5&&5%     } Ëƒ    $462"&462"6  Ï  â         d 2œ y   $+"&46;2œòòd   ÿùäÀ 	  %"&462ä†¼††¼†Ü^……½……_   ‡ŒN  . A  $".'&62>?"'&#"&7>32"'&#"&7>2l&*&727" 	š ßI
	   ÿ½ ª G ‹  7/.762>5'.762>3'.762067'.7620'/&76&'&676?>07671?6017627676¾HT
4H	DO	OI
N	Q	TH
N

IO

OD
	H4
wAF
*	<
8A
A=
@
	0eFA
0@
=A
A8<	*     ‡ÿæx V    7"'.>?'56'0>Ÿ	!&Å
& V-8""8,    ŒÿðŠ…   '7474735472 t754lr€Ã  « k ä ù   7#"&=47632äµU    dÿÀ¤k 6  4622767;2546376+"&46;2#"&50<5d 
$)NrX<FdNÇ5 );35WcH.CC  ò ½r•    %#"547632547632++À.+¹¹     ÿÝýÀ )  767>76'.&'.6"5%
 c|@,3<[')*Þ<
5<)
	"&+0 		
NV  ™ ;| ¡   7.6'.ÉKG
;0P)#'"   « G€ š   7.6'.Ï3U	
<3]!   † ‡u ß   7".>763¼8-/m‡$$    ’ “x ×   7&676º3qt”      } ÀZ    7&67676¶"'F
fÄ&)      Ï\   7&67676¸:M(Ð      Ü Àœ¹   27272#Ü$$À–G2„    0ÿÀÇÀ P  7636=4>206154>320154>3254>32#"'&'&'&'&6B&dGY3Ù	

á
¥È		È©		´z		ÙGdK$)  ÿþ ˜o   &67&'.767>wˆ./<1>'H;
-&h#F(08
"&%"`!  E ? Á	    7&>7>76/&767>I
3&	5
?\+
	
+	
2-
   	 ¤ @    7/>&7>m		)	4Æ	‡=@  j ¶  ì   7'†#ì   	 C 6   76'."'&'&2.@d'0
—	3IB5    j o   6'.'.'4676Š'I	)'<?1;//h!`"%
&"	80(F  A ?¿	 !  %"6.'&'.7>76/¹
6	"4?	-2
	+
	
3R
   r ¤ø@    %&?&'.'&6”
	L(	Æ
tA?   u ¶˜ ì   %6{#ì*     J õ:   6/."&=46Ó (f0
*9T9	—
   vÿû† À   70'&767'.767'&7ò8\5*;	B-/À4	$
&*	''!     l ÷ O  6.767'.767'.767''&7>7>&'.'&63232>7ª#	 **>0)00>'.(
64	&-)B	G		&,		+ '	8	&
'$-    Vÿú”  3  %2"'&'6'//'&'.'&6?/d/

(

/
@1"(§6		è
z	
  .8[	     •{ H  017>76'&''&''&''&'.'&'.7>7>eL	M#,482

78*5;(7459")<'2$&#
 1#D
   Í[ 
  .'&632-	!-   dÿÎˆ„   %0'5754776?5'&?3#w
K&%Ž843	!C¹l67™;	8#)C	T]  dÿÀ¤	 0 4  7276767;25476376+"&46;2#"&'377"
$"Nr	X<Ed\	"3835WaFdLI   d ks  + 5 A  732+".=4601#"&=476327>'#'&7676m		[

:=8Ü;;*	U
'Ø
ETÄš	Q   ÿ¸îÂ 1  &'.67>.5&6>7>767>76:‹		 !#=7<5
.#0Z?
!1:”
6a#	$uY 
"$>   i O Ï2   7.'&6&~"'#)~0;
GK   u a È6   7.'&6&‹!„2=
	U3   ´ ;+   7&7>.µ$$q)kN5   Á G.   7>7>&Â otp4     +ÿÀÕk 	  %"&462Õ}°}}°}•X}}±}}Y ÿü ²  $ , K  $".'&6327&#"&4632"&462762 '&6>3226326j&(&57/•œo!8þ{7
3&&3W	
"["""™nn' 	    œd•   2#"./>32262%
	

•0	!  œ2dk   26?#"./œ4>2	
4#k		    €$ ²     462"462"€##Š<##     $ ²      462"$462"462"«##þƒX##u$$.<##     Õ y9 Ü   6462"Õ**–))     \ U²   462"##u$$   Ž\Õ¤ 
   4632"Ž		q

   +@ä¤     462"$462"«þpQ1   @ Uy   462#"
Q  * \Ô Î    6462"$462"*!/!!/!/!!/~/!!/""/!!/"     w ‰ t   $0".'41&62>7€	"3:3"	
(&(t
''
		     € ëŽN    4632#"6462#"€			²		)
)     ÿÀ À 	  %"&462 –Ô––Ô–Àj––Ô––j  p L   '  7'632&7#"'.7432'2#"&'47>Û!!*¥\º\L! 
±&&    • k ² " C  7"'&67>4.'.7>3"'.54>76¦	²
	     ÿÀ À 	  "&462µK–Ô––ÔKuKÔ––Ô–K    yÿÛåG   >7>&'.67Ýj9 So^	yjT	^oS    ¤  Ÿ   767>?'¤7S'!69*"	%R.'(96"
  % Tl›  8  7'.567&7>327"&54>76672v &

	&	î
!
03Y	30
"	î	>

&    ÿÃÿ¥ 	   .>&'&>¬jy$/þä/.JI-.;$ü#$yj     @ 2Ãk  ( = M [  %2+"#./3&'&#"&7>32'&#"&7>2'#"&7>6'.'.6@	@!O$#	»&"á	/		;?:
1	\	i

	


¡5
	
   ÿÀU N   %2"&="&=463G			Nk29      ÿÜÇ¤   <62"…½……½b¼††¼†     d G, 
    #".5462#"&462>&£		¶·QG5S%,%ô  Ë rò Ç   %2+"&54>3ËÙ
Ç#     £ ¸Fj   67>/7'&«6
%
P	QlF    â0f    7'76CCCC    Õ t+   
  %#6767+$S	t	     Ð $ »   %&5'?

»
5$
&    á t    %#7632&	
Œ     IÿÀ ß   7".6?Ë "[]2
##¨%     € €y   !#"&=.5€ 0%	%0y«)B$	$B)    ®< ç   3#®99C  zÿ¿€ »  
  %'73#
\ø»
Ä79   ‹ÿÄ Ú ,   7+27Õ	,%  8 ÒY í   %"'&#0#7X×    ´ ²Wc   /7'&6767>B

	Q		L;G	
    Ñ? î 	  %2"&769
î   t+ Œ   %#67+$t	   ´ ²Wc   67>/7'&6À	6
%	Q	P	
kG     µ4 Ük   3#µ''k7  ® ÒY    3#"'&#0#7®99ªCe     µ ÒYk    3#"'&#0#7µ''£k7]    8 ÒY í   %"'&#0#7X×    Ñ? î 	  %2"&769
î   á t? î 	   %2"&76#76329
&	
îb   Ð $ »   %&=0'
)»
W?
$    tY í    %"'&#0#7#67X$$×u	  á t    %#7632&	
Œ     A $¿$  5 ?  7"'&767&#"&4632#"!"'.#"&7>32#">"U	)8$&			A
>Q>
A		&$9(	Î[P)/5²	Ž    	ÿÄ Ú   %&'.'&>'.67>762
6 	p?Àhe)     ?ÿî ÷ ± -  7#"'&767#"'&7>76702163620ö".19
'#&¥;%"	 5*	&   ‡ ¤y    6462"6462#"‡–

Å!!)   [ N½…  " 8  &'&7>'.#"&46;27"'.#""&47632e"ùÈ		È		B	2
"?»				Þ %   d œ ¦   6276"&546ÉnI
[‚[
•.RR.     Çÿ½  7  6/#"'&?'&6?>776#"/&?'&6ß	-!@2
:@!ƒA!@:
2@!-		-=3ED<<DE3=-	  ÿïÿ·Ð   %.'&>úsgD‚\tÏ²öh²*eDh²,sg    V ¯© 
   .676.'&676 	+NB+'1"Ó@'C+MC&d'	'	     ZY    462" 0  u Á ¯ û   7&>76&w
	Ù
	   oÿþ® Ä   >76&'&63ÓkE	Hk	‹	-c=-   œÿÀG k   73"&5œ«-Q-kV"33"     êÿû ú \   "=3úZZ    H‰ £   77>?&'-S%=,1<m		   ÿÜòÀ   %#"&462òAoBdŽŽÈŽÎApAŽÈŽŽd     Ä \7 “ 
  64632"Ä!"0l     ÂÿÀv Ð   %+"&?57>37>i'.

	N	?Ot

Y	    BÿÇ¾‰  1 9 P X o  %"1&76'&'&63"'&'&76'&76'&#"432"&4627"'.#"&4632462"'"'&7>32#"?
#3	
$
Xî		
"	xî	"
0		
D			
	L
			9N		   U «  2 P  %#"'."&74>2'#"&547&#"&463272#"#".545"'&7>2j0<0
)2)‹

			AÑ				

					Ì





   9ÿëÇ }   !"&=463!2§þ²NQQ    Y § h 7 ; G K Y a e p x ¡ ª ´  7#"4;76323763232+32+#"54?##"54?#"4;7#7462#".4"7632#"5476462"64"462#"'42"5"/##"&54?'&54>32#7632'32?'7"3654p?	/- 2	s
		
9			
=	U	[		4

(						2
	%	     ÿÜòÀ   %#"&462òAoBdŽŽÈŽÎApAŽÈŽŽd     i é—$  0  %"'&#"&7>2"'&#"&7>32•##ª""	õ



   cÿ¿€ Ù J  %&'.76?>?>7>74>7>y_WXT	ZYMR;;YN';
R
N	T
SH
M
7
     L /´  * F  $".5462'%"'&767&#"&4632#"!"'.#"&7>32#"3fC
TxT	þé'5"%	=	$>:	=	%"6&>*LL*‚
	


	
    (ÿÀÖ ¤   "&54754>32nh~²~h 4e"
    Ð B8 ‡    6462"462"Ð

:


n





 ÿü@ !   .>2		   ¼ÿ× ñ    .>Ý)    ÿÀò   %01#"&'&546327632òŽdaŒ9)
 

»)9·dŽ‡a(99     P Úµ .  %.#"#&"#"'&'&766263>766¬
!	2FF5	ü		

     T Ì¦>   !&#"'.#"#&'&TR
	!$>!
%  [ ó®F   "./'/&'&76¡	A;­¦:	   Žÿâr Á 
  #  64632"'"&4632#"&54>32Â$$4«:) *¹ 





  #
Þ¾ =  2#"'#"'#*1#"'#"'#"'#"&4632632632632632:326»&&
	 	"‹ !(  < ©š  -   462"'#"'#"'&'#"&462>32632632md			a	     ÌÿÀj ü   %2#463;˜üu  À U  Õ   %"&46 %%Õ€&5%    âÿí8 > 
  %'.7>7'3  çÿ÷& -    %#&'7>?'&5>?&		     ‘C ä—   .>×Š   ® àJŠ   #.//>/67*	*	(	?*

	#     “šÎ %  7'.'&&'&4'&'&'&6766†	
&)(Es720!*	4"  Á Ï!   &?6Ì   ¾3 ÕN   /&6Õ9   Ò ý í   ?&Ò	     Î d  Ç   %"&46 Çc)    Ü U Õ   %"&54>&Õ€&
     ë d Ç   %"&46Çc)    ƒÿÀ Œ   &54632¨%F1	@#31EË  ÿÀU æ 
  %7#&54632J˜->,	¾(þÚ 6+>   ¡ Ü   %'7'\E=9%PÜH@,&;S    µ î   %'7'\M; V/îQ	* S0     í '! D   %'&676!8		     ¾3 ÕN   /&6Õ9   ÿÀ† Ñ   %2#.54>7>3V)	/Ñ-q""
!S	   FC Ô   %#*".7>7>76A4			
$Ç!4

  { óx¾   '.'&67>&'.'&
3"!
#9
*5
II
%  GÆ©   &>3&'.'&&'K
$
	
	u	+&&"  LÿÀ> †   "#"&'.67>ë)@
	=D1+$-0	/   ™ÿÀ ÿù   #"&7>; $+	
@#   • F ç }   76'=.5>Í	
j
   x$ á   .>Ñ$%%}%%%%   §D õ   %7'".56	ç%   ¼: ñ   %78ç
	   ³^|   67/>'´11#6!|,MN5#  µ ê Ç ù   7&?6Ãî		    ² Î1   /&6Î					   Ê Ë í ç   737&Ê"Ù   ² Î1   /&6Î					   ÿÀ† Ñ   %2#.54>7>3V	+	/Ñ-q""
!S	  x F ç    76'=.5>.>Í	
$%%j
%%%%    ÿù ‡ >  701'.'&>370&4>767&7>67>676#"&h$	
		 4"3&/'CH8<6M""H<½5!     ÿó ü† ?  70176&'.'.6'&66767&7>67>67>"L 			
	P5:@ 54-Q

=:/?#K3#

=8e"$
     4ÿùí‡  W  7&54>'3"'&'&'&#"'.=4767&'&67&'&>&'&617276=	H4 		
¨#
	'
	Ž!5½<H""M6<		8HF$	/&3"   ÿóû† >  %'.#.76'&76'&67&'&67&'&66'&76>´P	
			 
$"e8=

#3K#?/:=

Q-45 @;4   € |Ì    %"&767672.>7Ã¨	

#   ÿù ‡ >  701'.'&>370&4>7>7&7>67>676#"&h$	
		 4"3&/	'CH8<6M""H<½5!     4ÿùí‡  W  7&54>'3"'&'&'&#"'.=4767&'&67&'&>&'&617276=	H4 		
¨#
	'
	Ž!5½<H""M6<		8HA)	/&3"    ÿù ‡ >  701'.'&>370&4>7>7&7>67>676#"&h$	
		 4"3&/	'CH8<6M""H<½5!     4ÿùí‡  W  7&54>'3"'&'&'&#"'.=4767&'&67&'&>&'&617276=	H4 		
¨#
	'
	Ž!5½<H""M6<		8HG#	/&3"    ÿù ‡ >  701'.'&>370&4>7>7&7>67>676#"&h$	
		 4"3&/	$FH8<6M""H<½5!     4ÿùí‡  W  7&54>'3"'&'&'&#"'.=4767&'&67&'&>&'&617276=	H4 		
¨#
	'
	Ž!5½<H""M6<		8HG#	/&3"    ÿù ‡ >  701'.'&>370&4>767&7>67>676#"&h$	
		 4"3&/(BH8<6M""H<½5!     4ÿùí‡  W  7&54>'3"'&'&'&#"'.=4767&'&67&'&>&'&7617276=	H4 		
¨#
	'
	Ž!5½<H""M6<		8H@*/&3"    ÿù ‡ >  701'.'&>370&4>767&7>67>676#"&h$	
		 4"3&/,>H8<6M""H<½5!     4ÿùí‡  V  7&54>'3"'&'&'&#"'.=4767&'&67&'&>4'&7617276=	H4 		
¨#
	'
	Ž!5½<H""M6<		8H36/&3	"  W ”»`   #.?>3”'"	`#@+Š   ø¸,   '7463­,,$      Ö?    %#/4;236#'	ô $ Õ@Z 	   %5'4725'730+	
Öe   !DZ    #"574;2#';6&
<$  \ÿÀ¶ •   %2+57>3 B	"é¿>•¥+_   " ˆ§_  	  %#'3'>3 3A…
ˆµ  9 ²œ²   +"&=46;2œ %=žÙÙ    + ²Ž²   +"&=46;2Ž==žÙÙ    9 Ü€•   3#9GG•¹    $ ì¼J  
    %7#'7+5'#/&?6$!
Œ÷-0
 “ Ú°+   %#".57>;¡Ú88    ¨¶I   #  /&?6'.676'#"5'4;2©
 /%	   $ ôI 	  %'7376&	
ô  W ”»`   #.?>3”'"	`#@+Š  " ˆ§_  	  %#'3'>3 3A…
ˆµ    ó+5    %#/4;2'#"5'4;2'ô#    %DZ    #';6/7305	
!   !;-Z   #"574;2&<  $ ì¸?  
    %7#'7+5'#'7463$!
‰÷-0
,$    Ž¼J   /&?6° “ Ú°+   %#".57>;¡Ú88  ( ¨¶I     /&?6'.67636#©
~	 /%	    $ ÕI 	   %5'472/7376+		
Ö    G2¹À    #!"=467632762767°	þœ
&HG"p..C3WW3D    €@€•  	   '5'7'7 Hò•  GÿÀ¹‡  "  2#"&"#&54>!546;2  $	SBRÆþŽ@%«&<‡!2f6–, 
þ9@",,"    Î 22    753"ÎdFN33  Õ + ¢   %"'&6276#     ï ¬ º   %#"=4;2#¬    Å Ñ= õ    %".=462#"&=4632#1
eÑ  d Áœœ ,  7#454>2#714&&54.#"&/&4o 13031 		#,
		Á',G&'F-

     u È 
   6"&54>32"&462¤
÷ü

%  Î V2 y   753"Îd@j   q N    7'7353Æ7t'33'     ƒÿÀ} A  	  #'777å#?%]'%?@pp     ·ÿÀI N   #'7>*II@Ž     ÷ÿÀ	      642422#÷%	     · I ^    7'7'Ë5"'~'"^$22$  × ) N   $*#'*#&=4637&$$$$N**  ‹ ^u†   74>32"&5‹ 5 0EDbDð)E(X>>TT>    ƒ } N    %53'73@"½="9,,    Ä Š< Ù    $"'&763276'#"&46;2#)R	 *Š.		   ¹ ëG    $"&=4632"&=462#?€ë   uÿÀ‹ ?  	  77+'7%$)>r(>)@mm     ¯ÿÀQ N   #'3(P)¢@Ž     öÿÈ
     4242ö)    Ç 79 ‰   753Çr9P99    t [Œ{   %"&'.54>323>2232ŒDZD>L>	ú4FF4

)33)     ¯ Q `    7'7'Æ:&+‹+&`)(??(  Ó - F   $0"#'*1&=467*((((F..   9ÿÀÇ N 	  !546;2Çþr>%È%>@+)::)   Ä {< Á    $"'&763276'#"4;2)R	 ){,     º ãB    6"&=462"&=462Îdã  d ž²  +  $0"#'*1&=467#".'&'.7>7>*((((47‰ 
*<!LF..eH0¬1,%3  „ [x\    "&54767>=54'.'iHdH	C32HH2)
	    d Pœ‡   2#"&"#&54>3  $	SBR‡!2f6–, 
     d vž²   #".'&'.7>7>347‰ 
*<!LªH0¬1,%3    Å Ñ= õ    %".=462#"&=4632#1
eÑ  ¹ ëG    $"&=4632"&=462#?€ë   º ãB    6"&=462"&=462Îdã  GÿÀ¹ • 	  %2!5463€!þŽ!•!œœ!   € N€y   "&=>5Ç%G,KjKy!H5KK5V     ŽÿÀr @    73#73#ŽÖ@€€€    0 2Ð f  $  7'#05&7>32#&%#54>;761#C
	5y5

G			

	      2  ^    546332#'&%#546;72C5G< <G5CS     9ÿÀÇ 2    73!#539G9UG@rrr   y+ ‡   %#"4;2$y  € N€\   !"&5€ KjK\Ž5KK5   ë y+ ¹    %#"4;2#"4;2«2   € N€[   #"&54767>?'45.'p";#5K
'#!6";#K5*
	  ÿþk V   $&>. !!   éÿÖ9    .67676.	
  )Q j­   6'0#/0'.'&0¤	

#     ;a `‹ 
   (  0?6'4'2576'&'76'&'?2'&Kf    Œ °+   7&'./677Ï			%"#
°

	  ÀÿË ê &   >74>#&#&>È&!.    ® .T Ù &  %&/676&'.'?&	;
B?	%    ð L …   %/'4>7. 
c2.
	    3 t‹    %2#"&463~>     E 	Û’  5 P X  %0&#0'.#.'.762'4>7676'67610'.'&'&676&·
,†
	&#œ!Cy
È
*
"
"

#
	þì88  ÿéy ? *  %'.<6=6/>40>454&'a			
?	 	 AkŸ¥ +  6?13*#0#1"'".*#"574G1
	   [vd€ 
  0/&6dy  E‘e¥   '67670e
›    %TŸ±   + 4 > Z  "63632&'&'&'&".#&'&'"5'&607#5'42'"7542%6'.=0'.'&K		
	
þ®
¥	&'

	&
     ¿ÿË è &   67>'&#&>Ç

'2

.    ® .T Ù !  %&/676.'&'?&		;

B 
-
%  E 	Û’  4 K S  %0&#0'.#.'.762'467676'>7610'.'&'&676&·
,ˆ
*˜!@y
Ë!
'"'#
þë88 ÿõu /   %#&'.756'&7667i	/					    ) °+­  0  6'0#/0'.'&&'./6770¦			%"#
¤	

#ê

	    ÿþk V   $&>. !!   ð L …   %/'4>7. &*	c2.	     ÀÿË ê &   >74>"#&#&>È&!.   ® .T Ù ,  %&/676&'.'?&		;
B0%    E 	Û’   8 P X  %:3&#0'&'&#.'.762'4>7676'67610'.'&'&676&·
,†
	&#œ!Cy
È
*
"
"&#
	þì88 ÿé} ?   %'.?7&'6&6a	?	
    AkŸ¥ ,  6?13*#"##1"'".*#"574G1
	    [vd€ 
  0/&6dy   %TŸ±   + 4 > Z  "63632&'&'&'&".#&'&'"5'&607#5'42'"7542%6'.=0'.'&K		
	
þ®
¥	&'

	&
     ) °+­  0  6'0#/0'.'&&'./6770¦			%"#
¤	

#ê

	     j G†c   2#"&"#"5454>3ø-.
L<K
.-c;)]1…);     UÿÀ« L   %3!5!r9þªLŒ€     ò sV 
  462#".)$)  \rÀ    462"))z)) › ÿ ô   $462"›))­**   ŽÿÀr @    73#73#ŽÖU€€    Ç #+ y 	  75"&'Çc"@97
     / Ò „   +  753"71#+546;76>32#"&5+45&Çc>ö7	
þb
	6	a##'
		;
	       b 
  *  7462"&51+74>;7246332#'&Ž>X?>Y>sB+6BýÿB6ABÙ9PP98MM8m8    Ñ t ’   7"'&63276#øt   j ®†v ,  7#454>2#54&&54&#"&/&4t
-/+.-	
+(	
	®$(@##@)		  Â ½0 Þ    6"&=462"&=462#Ò

M	½     è ›	 ¨   %#"=4;2#›     ø¿   (  7.67%.>7>4&'T	
,i
	ö 
 !.=ç"%     € #s û     75#"&'&"&462"&462Çc
#Ö@97
®!  / Ò Ž   +  753"71#+546;76>32#"&5+45&Èc=õ7	
þb
	6	\22+
		;
	       K   +  74>32"&51+74>;7246332#'&1+>>W>qB+6BýÿB6ABÍ";!JhJJ4a8     Æ w. ½    7"'&763276#7#"4;2#ú$	#					w3   ˆ àku !  2'&/"'0'&'0'"''&5463ú1@4 #		;7u<#5"

%:  ¼ Ì7 ò    6"&=4632"&=462#Í
W
Ì     ÿÀrV 
    462#".3#73#)~Ö$)þÿU€€    Å #) y   75#".'Åc@97
	  / Ò ~  %  %1#+546;76>32#"&5+45&Ð7	
þb
	6	r
		;
	       w    %1+74>;7246332#'&B+6BýÿB6ABl8     Å G( Ž   753"Åc>\22  r hz   #".'&'.7>3>%-/w$	4
Cs=+”*
&-    Qa/   %#"&54767>?56'.'T0,>:ø-0>+#	     Ã q+ ©    $"'&763276'#"4;2H
"q
"     ¼ Æ2 é    7"&=4622"&=462È
`

Æ     UÿÀ« @   !54;2«þª9ÖF@9GG   rÿÖ« N   /«89*&R   È G+ Ž   753"Èc=\22   OcK   74>32"&51+>>W>Í";!JhJJ4  Â ½0 Þ    6"&=462"&=462#Ò

M	½     ¼ Ì7 ò    6"&=4632"&=462#Í
W
Ì     ¼ Æ2 é    7"&=4622"&=462È
`

Æ     Ç #+ y 	  75"&'Çc"@97
     / Ò Ž   +  753"71#+546;76>32#"&5+45&Çc>ö7	
þb
	6	\22+
		;
	     ÀÿÓ¬U   I  '.#0#"&7676274676&74&5465./#&'6.5&7X.%		Q		2U%+	$z<<,.
7	O	&12
  åÿÎÉV  # H  #"&654763#&7>7>76#32'&'.5>56&7>76º:½%&'			2
	ˆ *!    F¯ " >  630654?.5>76'&'&6'6#&76'&54&4>›		'/
	R1
	+\	.		   AR®   #"&'&6‹	„! @W‡¯   #"&7>……      ÈB   '&6È	¼¼''     · ú Ù)   .7>Ø
	
   „ õ 4   %761#&7Í	G '4  5 Á’   6'&7676y
				   €rÖ   &7637'"&'‰			€	    l  Ñ 0   7'"#'0'6>7 "F0	    ÿË ©S  2  7&/<>676'.54676767
%;	*2

	R
,
(#	-    ÿú kO  #  7&'47676'>7'676&X			 "	
		-#
•%
	    k %O  3  7'6?'67'7672676'./676.'¦		
	*2&	¸/			
   2 ¯ ©2   >276'".'.5.2
	#			0"		   O  s ¥   7/k$  e1 R   2&'&'67€	R     n= •h   'zh   tH ¹–   .6Ž–  r &ë- 	   %7'&2&'.54u+	N


û#$ˆ
    .p uœ   './7>f
š
     k` Â¦ #  4/&'4&.5&76±		
	œ	
 œ aè Ú   %676.'œ	s>2  œ †ó Å   %'ó 7Å? [ÿá¹x    %'&'4&5467''Ž+


$¤
).
 Gà   … zÿ   %7'«1'+Ü7	2     á ¾²ª 
 /  &'&6>7>.0#"&7>>‡&I	
	A1
{!‹	B	
		    DÿÈìV  /  %.'./>'4&'67276'761'.>7«#!&Y-	
	Ü
3ó 4c¯ #   +'&7>'&&'&'&"+0#&676r	
	®


  ÿË i    7&/<>677
%	  ÿú ­Q F  :'6?'&'47676.'4.5467676n	*	$	

Q	,
3&	-#$
#	-  k &P  6  7'6?'67'7672676'./7.76.'¦		
	*3&	¹/			

  O  q ¥   7/k"  i= •m   'wm   nF ¿Ÿ   &676'.pp   l^ É° "  6&&/0"56'&#'&'&4676¹				•	     á ¾ìª 
 6  &'&6>7>&'.0#"&7>>‡&I	
	&'1
{!‹	
3
	
		    DÿÈìV  (  %&'&'6'.'67276'761'.>7¬!&S-	
	Ú
3ò  0a¹   6+'464'&/"'&@" 
   ÿú ­R J  6'6?'&'67676.'4.547>56e&	
(	
	P	

3!	-&   ÿú kO  %  7&'67676.'>7'676&X		 "	
		-&	
•%
	     k &L  8  7'6?'67'7672676'./>'.'¦		
*3!	µ
			
	  2 ¯ ©/   >76'".'.5.2"			0"		    r %ë- 	   %7'&&'.54u+	N
û#$ˆ     eW Ã§   >2&"&7.s
&
		
		$  [ÿá¹x    %'&'4&5467''Ž+	
$¤
 Gà   … zÿ   %72'«.
'+Ü1	2     á ¾åª 
 7  &'&6>7>&'&'&0#"&7>72>‡&H
	'1{!	3		
		    DÿÈïV  )  %&'"'6'.'67276'761'.>7¬
 
		 S-	
	Ú5ò    3[¯   #4'.'.'&636

	
&¥	!	 ÿý Pð¯ R  /#.5&762633>3>767&'&62632327'>å
	@N

	*"	(	


#-



¬,>0'.*,

,##O  ½ gR­ " H  7"".'.7>?7676'"#676""./76'.6	9!
$&=)9&		
	r4     ÿÀ  }   5326363263232632;|1		"	b@«			« ˜oæ½    462"˜  †   ˜oç½ O  &#6'56'"#67"'&'65"#"'04504174'"'&'67676267&36716ß	
	
¬  ÿý >ð¯ W  *+"&'.'&67&762633>3>767&'&62672>7'>å	*# 	*"	(	
-'#-#%
¬.@.#,	+'%,
,##	
	O    Þ,N­ %  "#676""./76'.ý!
$—4  ÿý 9ð° \  #"'4764.5.7&762>323>3>767&'&>3263237'>å?
R*(		-@
#
1	&
¬.@/!#,!,#O       [t( .  #.'.65&'&767672>?632fz

#	
0-
#

   ˜oç½ N  &#6'56'"#67"'&'65"#"'=04174'"'&'67676267&36716ß	
	
¬   ÿÍº     %&76.5&''&'&'&76—l		 ÿç¯   '  %0#"'&'4'&5676'0"5&'.5676ª	~	   ’·¯   3"&37'43#5&7"& ¦  ÿé²  
    + 5 @  "'&376"'"5&?20'"'4?6""5&3760'"546?6#'"'&?6#"¢|


      º°  ( P  –  %7&/&'&'&/.5676322767676'&>:#'&'42632327:626366767632&#.#'."&747>20#"&=7#&
Z	Y$XŽ!	

	+þè			
	
ô		i%&2%	3Ñ*%	'k
3    çO1¥   462"çh$$   ß`…· 6  >>7'&'1.47>'&4'.'&'&>ô

°	
	
	    ½ cF Ë   %#'&'6?)		=»	"("-
  » aH Ì  /  %'"1&'"&76767032#"7&'7613027&>:
	b& -		.Y!'/    À «QD 5  &'&>'4.6?>./67>73>?6:


D+ xy³´    462"xŠ ÿÊ½      %&76&'&''&'&'&76—n	  ÿå±   '  %0#"5&'4.1676'"5&'4.1676ª€ ’·¯   3"&37'43#5&7"& ¦  ÿç´  
    + 6 A  "'4376"'"'&?6#"'"'&?2""'4376#"'"'4?20'"5&?60£~

   
 »°  2 T { Ž  %7&/&'.'31&'&/.567&322>76'&>:#6232367676676"1&#.'.747>3#"&=7&	#Z	](
	P
Œ&		Bþæ	*
	3
	
÷
		j'	+3	 	-Á*=
l	4     åR2ª   462#"'.46æ 	~	
   ÜgD½ %  >'&76&#&0'&'.'"'&5&ô		¶#     º gI Ç   %#'&'6?.
Â/)+
    · eM Ê  -  %"5''&'"&767676327&/74227&L	Ie,&'	
2)(-   ¾ ©UF +  "'./6.574&/7>;26?6;$

F

')	
 ÿÍº     %&76.5&''&'&'&76—l		 ÿç¯   '  %0#"'&'4'&5676'0"5&'.5676ª	~	   ÿé²  
    + 5 @  "'&376"'"5&?20'"'4?6""5&3760'"546?6#'"'&?6#"¢|


      º°  / Y ‹  %7&'./&'&'1&/.5676322767676'&>:0'&'42632327:626366767632&'".#'."&74#&
	Y$XŽ!	

$	þè			
e%&,	3Í*(	'  åO·¯    3"&37'43#5&7"&&5&>36 n	¦#  Û&B†   7463.0>þ	&
+/@86     ßb?¹   &'&>7>6.#.'æ 	y	
	"		     À «QD *  "&/>/6&/67>73>?6:
-

D
+	*   ÿø \²\   %".#&"#"&'&6;2+

0D	N<§;N

C\$	<19ZZ91<  Ž @ ²   %""&#? *+*‡+++    y”@   %"'&'&"#"&'&76;2+-%50§04y)		).'+"%%"+'.     r›G  6  #"&'&'&"#"&'&76;26'&+"3276762326}8(%	
	(8	!3§3),§-0#4"1 %.*1
	1*.%'x( "" ($+&		&+    2 Ž ù9   3&'²G«
9«     ‡ „$ ë   62.'&'&#">Î		ë#	
			#   ñÿÀ À   "&'&>3265462r&B(#2S@&!

2#Vþª;S   ÕÿûH M   %.6?635	6
	
	
  Ç Ü y    3#3#Ç9999y9+9   zÿ½D¿ $  .'.'.'&>762D"

/7+'	}'
\y,ˆ	 xG;$%&
   ±  Ö   7&'&'&7º	Ö	9& #-*2    `  ± ù   7010'.7>’
"ù+$+
9&/0  ?hŒ 	  ".62`	!
!	K   )~ƒ 	  .>u	%(&'	t%%    ý,mš    ./67&6#&1'1L
?	  ú 7zJ   >'&7476.'&.EY=-
	+P  7 PÆv   >.'&47L%(#	
[&yc&+.>    @  À   5!! þ À€   ÿÎ  Î   <62"–Ô––ÔjKKjK     ‹ ÅñÆ  "  &67676&'&>7676—½
´	HÉÆ›…
	2o	
}    ÿùò Î   & 2  6"&=4>32"&=462"&=4626"&=462"		w			¢”			2€€A€€€€1€€    ÿÀ  À   <62"–Ô––ÔjKKjK      ÿÜ 2   !##"&'# FpAb’
2ä5B0    ¤ ¤   <62"–Ô––ÔïjKKjK       • •   <62"–Ô––ÔàjKKjK       2    3#%3#ò2     ² ²   <62"–Ô––ÔýjKKjK      Àò¤ 
  462#".ŽÈŽŽdBoA2/CC^C5   +ò¤    "&54>32&`À‹AoBdŽ•>,4C/,    ’Ã      &?6'&?6016/&«77%   ÿÃ¼» - ]  /&'&767>7>.'&767>/.'&'&?54ž
J<

)(AA
/			“			/
AA()

	K<			)
!K?jp?KJIK?pi?K!	)
		    , Žš  -  6&/&767>26762#'&'&76Ä	%4&[&4%	ŽX0??!88!?>0Y
   W íol         # ' + /  42424242&42&4242424242642&42¦1D0¤5Z#&,$&+     ` ¡<   %!`Aþù2
þË     e — ¯ 	  %+"./—!Ö	
¯ -.     GºK    #*#"'&6712>7«+xx+c&6CK
	   s — È   62"#&'4054ÅuS>“AÈ   é †S —   7327é(#N”     ¶ “K ¼   %#"/=#(3¼%    5S “   %?N5QJ   ¸ 5 —   7/éF”QK  ¶ ” é °   7"'¶3°     DÿÚ¼Q   +"'4>;2>?4>¬	(ä'	
'.V&QþÈ,+9	á'%è     D¼p    "&462¼_º__ºU**  œÿÀUÀ   "&=.5462U7K72'7ää+6XX   	 ÷y Â Ê Ò Ú â æ ê î ò ö ú þ
"*2  %'#"/#"/#"/"&='#"&=#"&=##"&=##"&=#"&=#"'&?5#"'&?5#"'&?5#"'&?5#"'&?546276;5462354623546235462325462#"/#"5#76375#76375#76375#7635#75#75#75#5#75#75#75#5#75#75#75#5'#3275'#3275'#3275'#32Ý### '					' #####						##þ¼' ' ' ' UUU€ ' ' ' 'Â						7		)**++++++)		7d999«999«999«999·...    	ÿ×÷ %   "'&76;!6'&!" :&;!,þÚ,$12%$    d œx    $"&54632".5462”þÖ	Bþ¾Eþ»	     ÿÙõ|   "&54&#!"#".5463!2ë
(þä(
	<++<'
*((þÖ
*+<<+þÖ    hÿÀ˜   %"&5467&546;2J#Y~Y+#^Ü(3?YY?*F   Ó  ·   %2+"=#"=4?&·ªw  Æ > º !  %2+"=67654.#"/&76329n.!(%<&

	8  Æ  ? º 3  ?632654&+"=4;2>54&#"/&7632#"'&É						"#&				   1 0Å»   2#"#".'.67>6>++ 
&)7!1+)(»$=5(u""POA
     ÕÿÀ¹ N 	  %2+5|#$§N2Ž    œÿÀ€ N   %2+".=43>&(i9N22)  = ¦ [   67'&'&'.=1		$(€+
3
     ÕÿÜU 2   %2+"=434!G2	//   ÿÀ÷¤ $  #5'#"&/"54.4>7>32ä	
$*r3NGI`4¾kBNE9¹þ¹G¹,6G=7
  U @«    7#54>?#5dG@¹	ÕÕ  ¨Uµ   7¨VWT¤¢   «•U¿   632&#"« 5*
	>*·"  dÿÎ`· 	  5dñ4JJ2+¾
c‡†.     ž ï·   7&546?ý_`ï¢³  d @œ ‡   7326?"./dGU&N	"585#‡+		   Ç 29 y   %2#"&/&54637632+
k    «ÿÜU k    >?7&'7«	

€*+1H+C     U Ü«•   2#!"&46;546;2+"Žþä*9)9         ù   %#!"&=463!2 2#þª#22#V#2\#22#H#22#      \  ¤   5!! þ ¤H  Ë Šàž I M Q U Y ] a e i m q u y }  … ‰  ‘ • ™  ¡ ¥ © ­ ± µ ¹ ½ Á  7'7'7'7'7'77'?'?'?'?'?'??7?7?7'77'????7?7??7'7'777'7'???????7???????à"


"	!	 	,	!%	&*	"# *2+	m		(	 		!		,		-		(	$		%	%	;		%	%		;	<	<	%	<	<	!
 !	)&	%!"
!"!		



	5+	!	*					0		
		,			D		++	)	*	*	*	;			*			   ÿÁ É ‰   "&4?62	§
¦?
¦
¦   
 Ê”T   %'6&'6‹A/;OÊ0@	P   Ô¼|   %'6&'6³S;FbÔ;S
b  2ÿõ“ V   $462"2((((   ž aÂ # ' / 7 S ^  #"/&76767>767>6&"264&>.67&'&'767>767264&"Ï+.%/-(<

	Qg+,>. $"$&			Ž6A%-**A			ÂA)+$3!-9			   Cè¬ >  "'&767'&7'&7'&'&7&7676767276Ï






   < Äz    %&7%&'>54.'67ÄLL $$þø*" $L
++V€V–K[
V@+C-	
+   
 5 Èy  # 0 ; H [ o ~ Œ Ÿ  "'.>>7>"5432>76&'&6676"'&676"&'&63"'.7>'&'&'&7>3'#&'&'&7>'&7"'&&767"'.'"&46;2K
		,%	
+
Ü2
3

%
 

=&
I)
	 /

;EL		K
 
O


S


L
	9	     ò$ 	  %"&5462òŽÈŽˆÔˆŽ8OO8;[[   2ä$   6462"†¼††¼ydGGdG    \ ~¤   2"&4»Š__Š_/D..D   U k« 
  74>32"&U.O.GddŽdÀ'2F22    S e« Ì   %6"&'&7626œTXTXfXÀ   9òº ,  &'>?&#">?&>7>ò%=-
$%"#J43P#>%6‡)²	%; &)&"/$")   ÿÂù· -  .'.'.>7>'&""¥:,i_/9	(¬
		8?#
:>::,,0	º5   .´›    /  6&6>&0&5&+"6'3;-!/eK3+Y7(+;Í`-++B     ©<À   7.>72'.';#	
'/C:ì
#%% $.H,0   ÿÁý›   &'&67>ò%>&?ŠlRhC}elHZTN*IE>kD,3   ÿþ ü£   %'&67>%Gœ$ <G1–„=j0N201‘1"9 ~w"    æ‘   %&'&67>>‹7?+‹{-f9F*,,+7u{$   > J ^   %"&67>0e/#0"m`/Ml"D_!*ZV  f y9&   6&'&6Ÿ&J'&6%
E
!M      º ÿ   >.ª #
 #û"    ÿÀ½   >'&>76*/_/?:5v5k	& -KGI-f)`F@QS#! 	:   úÿþ: ;    42642ú+   ! ó       $42642642642&42!D"/je`  ÿ×ã½   '&'&>767>03b#& -K./_@<6y&"#! 	:HI-$A*cHAS    D ·Š   + 9 G U i } ‘ § ¼ Ð ä  72".767#"'&676"'&7672672"'&76"'&767272"'&76 721#"'&672767"'&6767276676#"'&672720#"'.7674&2##"#"'.67232#76#"'.747661#"'.7476ëˆ
A
		r	

4
		P

	þœ
Œ
z²#
¨
R	v
		h		\		þÀTÓþ­		a
z
	y
	   –ÿäØ`       "  $4264264242427462#".42ZHQ	…’yG‡¥/	n      3†Ÿ     #  $42&4632"462" 462" 42hê	Uþ $%		þ°    ÿöÈ·         642462"64264264242642

¢µ&ã=@ÍÕ¸. B[     426427  ÿÎü± 7  .'.'.'.'>&>?031#"".#I(
			*AG
K;((W


!?G&2+
     <ÿôë¤ +  !&'&'.'.'.'&'&'673ê5GA#*A&&?#AG5		>GB*     5ÿëÛ“ *  &'&'.'.'.'&'&'67Ø	-9:#'G5:8-
5	GA#   .ÿßÊ .  &'&'.'.'.'&'6'4567Å#GA:9-AU	
-      ÿÚªZ (  %#"&'.'.'.'.'&'67x	
	GB
AG#'%&UA  ÿÓ†@ )  %&'.'.'.'&'4&167671
	GAB&%NA&GG    ÿñþ¥ !  4>6.'.6@K!
0J&"6B\5-B =,-<9<@9    < @¼6    ! ,  7677462"462#"&462"&4632"ü:.šì		í37			†b
	    8 ùÏ '  2#&#"&=".54&>766766º)$

	
	>A
	$6-''    ÿûÿÃžf   %&>7>?3k#W35P52
+p3V$k35*	35P   hÿÿQH 	   '  %'&'&'67#&'&'67&'&2&'&27(C(¯+*z&'/ñ0š6&!5)¡%+&    ÿÔò®   7.67>µ;,;,,;,;    ? '‘~    / > O  &'73'&'&'70&'&&'7&'&&'70&'&&'6?&'&ZF&B&C'B&O;,?+?+?+  T 2 ˆ   + : I  #"'45.'6#"'&1.'#"'45.'#"'&5.'0#"'&5.'b&&<6'&6&6'&ˆ.+;	
7.+6.6/+     ÿÎò Î   ".5!,XI0&ä&12$1/3$224(      ž ô ù   74>"'	( ±	  > mß õ  &  7&76>>".'.5&76>F$%6-¨

     Uô| +  7&76767'6766767>'&67>&'";.		!
KGTœ´03$'1		&%9-0	
&     ¡ ùf 
  "&4632"/""0  -   ¯Y   #".54632	0	     T Õx+    7462#".64>32#"&Tã			ò  j —   7&'&>ù,


69è
	8    G ›¯   %.
676ž	/!¢	#/    9 ¡ ø   %.'.476/"“			
$/     Þ oX Í   %&&'&>V	/,¥		, ÿåÿ¥Û      &766.76 .776&a|0@4'0$]$|0@4'0$]$[|04@X'$]$Þ|04@X'$]$  ?ÿÿÁ    "&462Áq qq  qq q  »m   ''&76&76$

($

     ï Šœ7 !  %&'.'&'>;&7Š	!	
Ÿ
			
    d +3    7#"&54>276.76…{
	$"	Õ”$   Ž \d ë     6462"4632"&462"¹}	Á			ÂM	   
ÿÖƒ   .7>Ø5eŒ@mC"‰˜†d¡Ø.Tj5/E	     % ÎÙs   >'&769>coB=T$$^T;!$
#%#

  u ð¶«   '&7>7>>>¦KSN(&
	E"
%	
L     $ í ®]   '.7>®
%' *L	    ; Ý³q   7&7676>76476>>K!
/	)";Ñò	7	(&  ^ ðeY      462"7462#"."&462"4^


Ù}
.

&U     ¼ ê5   66îE1	   ¹ é& 	  6>ã+
 3–H   >>3,"
    Ç $Ž •      $462#"462#".462"U
-rm
*,   UÿÎ«²   #"&'&54>32I*8gD<a4P'$&ƒC`v_O@O   XÿÎ«   #"&'32654&I*8gD<aU2Aa)&ƒC`v_O>Iq\8o    }ÿù„   !#}Ìþx    t Û   %'3dÉçÚ    cÿÌ“   #"&'4>;2>5>T¨	

¨
	4Š
	þw‰	
þv+  fÿëƒ   #"&'7;2 %6#(%,0:þ<(     òÿëšƒ   #"&46;267%%%(#(:þ<0,     dZœ²     4œþÈ²XX    cWž‘    #*#"'&677>7Ž(bc'P+8‘		  ‘ Ço ð 
  6462#"‘A\A3.Ó
     ÿågÿÿ   3#ÊÊ    ÿ½Ã   3'&67>7>7>õ2z$%1Y!2p)(1P*3%%z2*P1()q0 Z      ë_  ! / >  7"'&767>7>"&56767"#.76767"'&767>"u*;	
D0L$
5@
3ð
[
i	6%?B"	
7

I:
	 `
o&     LÿÞ±|   + :  %"'&7>76"'&7>767"'&7676"'&7>"\
 
(

6
Ç
ì	&
f	


´
þ¤
	     ÿØ‡¤    .>[,E‚+D@°•#d°•#  ÿÙî£   &'&>7>æ*5<XzE<&NMA1"@90'`]=gO
#@   ÿõg‡ 
  %.>\8)=r&<{rã5\D
Wš‚W  ' g{  "  "327676'.'2#"&'&>76·86U27V27]8)6^9(mxH=P;<H>PUC5\D
UC5\D
  s Q.   %''7'7'77(*
&,(*
&¹;!;:9;;=8   e B= * Q  7"/&?'&4?'&6767676/#'27>3'&?'&?&//76Ê"	"
	B
)
..
%+	./
$V


    ~ ï   7''7'7'77ïÀ$$&#$$%#    ˆ w ö ) P  7"/&?'&4?'&67>76/#'27>'&?'&?&//76Æ

w
		
	4

    h T'          6&6&6&6&6&6&&&>&~z7/O		!ø3‘$pb   ÿÝ  ú   <62"–Ô––Ô0vTTvS      ÿö  
  <62#"–Ô–EuFjIvTT;&B& o ž” Ï   %145”Ï
   S ½Ÿs #  636&'&'&?>5&6Ú& $/)JV0-	%f
!    Å<F   /.4=;++F   Å!;k   /&4?66+++M   9 /Ç   $"&462Çu¤uu¤Ì\AA\A   9 NÇ+   %#"&54>32Ç%1= Ru5\6Ru½"A.3A    9 mÇJ 
   #".5462ÇuR6\5u¤	\@3.A   9 ‹Çh   %#".54>2ÇuR)I65\l\5ú.A)33     9 ªÇ‡ 
   "&54>32Çu¤u5\6RF[AA-3  p U“ r   %01#"'6“
r o a” ‘   %01454'6”‘
    o ” ° 	  %01456”°

      ¸ër 1  767>67>676767636&'.',1	5(!
		
	z‘~
þ
			
	    ¿ ™.| 
  '.7632),,	-CG/iB    Ãn 	   #  &'&76.>.67&'&76·

X

+ö

X		/	P		{		 D6dg 
   &>#E
D
  ƒ ÄöF      &'&>76'&7>'&7>œ
9	;
DH
   ”ts   '.7>76q,-CG/-)	3  ' º\   %'&7>‘ 3ß%o7&    / tÙ2   %&67>¡;=	¼%#D$"	     t ‰t 
   %.676'&'&676 ,E
7,h.Ì>1—
&-.u.Q8*-H

1    . „ ÚN   7"&'.76¦
%3/þ%D%L# ÿü v × 
  7&'.76x(7E*)7íD=5    ûH   %#"&54>32û&EV5k–+Da10^@(j)A6G?*0EL   g ‡Ÿ    $ . 8  %"&54>32.6762.'.6&67>&67>

B
0	
 M			Ó--$(%6()!
!-&*!E!     ÿÜòÀ .  7'&547>7>32'.67Õ!
$#	+	p+!B&_$‡	EU9	

4,$-.D5  "   ´ÿèà ‘   %'.5>767676767>7à :E

$%#‘4&			  ¿ à ‘   %'&67>76767>7à
@.I	;0* 	‘
	  Ç €`§   6&6767>EC	
/ˆ.s6/
O     Í ƒ\Š   672>7>EC	
n!s6&%
&"    9ÿÂä Q   %./676$V$Q


T		   9 ¥ Q   %7676?6?6?67'673>76j23   ÿÀä\   !ä+þŽ+\þdœ    ÿÀ Õ\   #ÇŽ+\þdœ  †ôÀ    #"'&?##763!ìr	_Ü?%R ÀŽ	xH_     ëÿù²        #73'#737#735#737#735#7²ÇjVŽVU9U++*+     Jÿù Ç        #73'#737#73'#737#73'#7Ç}ZC6Z66$6++*+    ÿç]Ã   &76"æ/þþ.Œþˆ	   í=]Ã    &'7./30ÃK
R  JÿÅðT   &76O'B%þ¢$5&E)þÑ!    r ÚðT    .57Ë%D	AT);	B     Ç ë   $"&5!B½…Ç…__   ÿÿ lÈi 
  &4632"†_>i=†½¶iJ!;"5J      }´X   64632"zW*M8!z­½[@).@   G ‡üN    2#"#"&46322>76Ö$@!=/CC/,!$&N+&5%  r Ž  Õ   6462"r);**;£    DÿÀºN 
   #267>54&!3"&'.546~~GMþã‚GN	Nþr(<$ :þr(<# ;  F õº`     4ºþŒ`kk    çÿï G   7'òG42  ‘ë´      %/7?677'6	Ù ¿Û4#þ.0´'5&¼8/U    y6 —   %7#	—   X ê¨, 	    .676$>&'&¨EJRIþ¶EJRI$$     ] ¤   7#"#1"&'.5 ¤.KT1C‹
‹C   dÿÜ •    %26767!3"&'& K8	þÇœK8	•¹/</¹/=    ‹ÿÜu    62"&'54ÏbD6b6  c y ²   6462"c\‚\\‚Š    ‡þµ   6#74>767ã	U		7,:³			¿Ë			  Üÿæ1 ‡   %3.7,)	‡	    ý 7% }   %3'7	
}'4 }i­¥   7 	/    ÿÈÌ‘   &67™–SjS8–àSþ–S    9ÿýö»   6.9S¥–/S¥–gT/–¥T0•    ÿÞ]"  # 0  62>76&'&1"'&'&5&76"&7676'"š6$"	$$:w!#	0(.6
HU[8€  # bÝk   %"5'&7>3Á–	

	hÙ

0.%'	     Sër  *  .>./&7'&/.7>Y¥6–"Tß$"+<
3(*Ú	
   U Úž   6.UC†/C†\B/…C/…    { @²w   6.{2om)1plE2*lp1*l    q¬@   76"'4#'&6}3	´     { <RZ   %"'.5'R$†	B	
	M†%*(< 

  ` (ER   %&'.5'E+‹
	K6ŒO"!+
%    D 	6K   %"'./6)—
	Z—V$$
&3	    
ÿÇG   %*&'./>57G"!+# $!	
/CNf
 6"!	264O     | $u â    70766>?Å+|>»?;H3SÔ|R) 3>  i•2    462"i  Î0k{      462"&462"'4>32"&@@K
	=,
  ¤ Š•{ 
   % -  4632"462"74>32"&462"462"â	
K[
	H\
	
I1    S ö¹ n  %"'&'"'&7'&''&''&4767&'&'&7&'&4767&'&4767&762676676266266­







"


	

















	


/









"





	











	

  …Y ï… 
   462#"6462#"…
	1
	f	
	
   ídL®    462"462"í'    Jdv 
  462#".J	
z	 TE€p 
   4632"T	
Q	  s:Ÿf 
  462#".s	
P	
 &ÉQ    462"2 ’ Ÿè2      462"4632"462"’	
&
	'   ÿõñ    >&&=67n€H/<þ\
“"*it	
o    ¿*   %"#"'&563³þ^YQÂœsW  	  ª« # 9 > P i  Ž Ÿ ²  2676?>767&"&'76&&7>76325%7%676&?547>7676#"&7'&767>7632"&7676&7"7>7636&7'&7632>;b)
!.'

'	
&(	
"	
þÑ
")%
-	‡(	 
ëF
	
!	Z	

W
		&¥}f	      ÉŒ   %5>7½þQCyO;‰te('716
'+(   + 0­ Ý    & 2  6"&4627"&4632"&4626#".5462#"&4632t]

U]	j	

d		$	)	
   tÔŽ   #"'&54?6ÈþJXS× núX     ƒÎŽ   "#"'&576ÈþSYS× nþX     ŒÐŽ & *  7'>77'767'73''77‰O@1'",2=UM23P<O@•== &"!n '%l"   : Œª ï ! , 4  7>372>767"&"&'7>7676>š)+!'

(
&'	8&)	 !&)Ç


	)(
 H ÐÏ ô   %667"'&n)%â     ² r  "  7&7>767>5>7>
 		²)	f	&    òy + 5 E P `  %#"'"'#"&7>7&'&54>32632>/4'6767&547&#"27&'&'76'&#"6ò+	9²9	+')&!!&":2ò	w	%Gyh&  å"G%	Ü6;$$
;6/"#?:
<&+3i'03+&   o -š0   / 9  7&'67672&'&'&'>7&'2&'67670'&'6767§

½	
)


$|/5
	
V   2Çk    * 2 = H P \ h w  6462"'4>32"&64632"64>32#"&462"6462#"462#"6462"'4>32".4632"#4>32#"&U			B	+	M[	0		M€3€+		D		þè–€    $ò$   2#".'"#"#"&546 jˆ %`>PŽ$[C!.?.9G   ‡ò Ü    %3#%3#Õþ9À9U8   fäS   %".'&'&#"#"&54>32« -17IEf9cf8*%7T@$
   \ò\  2  "327632332654.'2#".'"#"#"&54> 5`@D-.0%$	
6b=jˆ+`>PDmI3")/(''?$ZC03
?-';   æ²N   >.'6'.'æ1  5"
"H

		    ò Ód!   %#"&54>32d	!	"ú

    æG 
   #".5462G	   ÿåò ¤   %/&'5òO	

/bbœ)
0	
<<	&     ò Ç   %"/&676âO	

/bbÉq¶

0		=<
	  ‘  < b 	  7./‘«
b   í ã -  %"'&"&7<5&'&''&74&7&.'&7>à
!	-&)
	!Ì¿¸$	
-    G N¹ ¹ 	  %#!"&=!¹þÈr\]  ¶ \Ú ë   $#"&4632Ú'C(<VV<(C·' *;*      :ò ù   %/&'5òO		

/bbò*
0	
<<
%      eò   "/&67>?62âO	

/Ä

	c.

0

x
	<

    $ uÜ} "  ./.7>?>Ó	R#	
É	"	c
 ÿ1
	
x
;    UÿÀ« $ 
  #"&462«.O.GddŽd)   Uÿò«     3!!UVþª  U€«Ž   !!UVþªŽ    U\«À 
  #"&462«.O.GddŽdŽ)  nk’²    "&462’VxVVx  |r„«    "&462„MnMNmš  «|U  
   #".5462U2#'2F–
   ¼„D™ 
  462#".¼(8((Ž	   œ +d  
  $#".5462d;).;RÂY>1->    ¹ DG ç 
  $#".5462G*!*:·C0%"0    UÿÎ« 2   !#"&54>32«.O.Gd.O.Gd     dÿÜœ 2   $"&462œ[‚[[‚$$   d œN   !!d8þÈNþ¹   d Gœ «   $"&462œ[‚[[‚Ž**   d yœ2   !!d8þÈ2¹    d Çœ+    "&462œ[‚[[‚**  d ùœ‡   !!d8þÈ‡Ž    UN«² 
  #"&462«.O.GddŽd€*  ÿÀü¼ :  %/4&4>767>7>7>327>2©*65&T"	9
#0
8b	"%&55)Z8
0#
9   %ÿÍê^ E  $#"'76#"'"#"'&767>'&6676'&6676'&66767ä!!(*"=	/ d9(O026! (?/4º("C2	  (MM"1E+
)@ ?6.9&!
:@     ÿÄ½j @  7'>7>54&7>'&>'&'1µ"Y "$	&
+				


"	&fg4" '	

		
	    ÿÆ­¼ ?  74&4>767>7>7>327>²"	9
#	+
&	'w%&55)Z8
	
	    ÿéœ¬ F  #"'&6#"'&6'.#"'&76767&7667&766766”7> @(+F0#NL	(*
1D	#(@:	!%8J
 630	P(8f&J=#*)5A5/?(     wf§—   262'.5wŽ		
	   ÿÿÿÑø²   >'&'.>¯/{'";0<ÀC		"L“"	,9LQ$(	!::NNS     Kiª   6#'.67>ö7'.6,"!!›+;-&B`)"    | jÙƒ   .7>76&'’/	ƒF!"=%/b	     ÿåö‡   %'./'&'&'&57462ô@5		Aª	ŽÈ£F0	a>
+j5KJ54     Žò‡   2'&54œÈŽZHPÇ+‡K5)ByI!(5     œä‡   2'&54¢¼†XDHµ/‡G2'?kB )2    * ©Ö‡   2'&546 ,O9"UB?£3}‡+&<
^< */C   = S ò   %#'5'.5&6?J	G‰"
·A{A(i22Di   Ê k, Û   %/".5467Û/	     ÿûì Ç  & 5 D S  %/0*.54>3"#&76&'&6%"'&676""#&76&'&67"#&76&'&6 
}þ¥)º	
¾XY<VS"XY(SW     / ¶Ò}  6 d }  7"'&7>76"'&72>76.'&6"/'7#"'&54?'&67"#"'"6>76#&''>7463"['	! 
	•	'2	"


k	Ü!

"R	' &

^%B 
**1  J 
    #"'&?'&6"v		R	=	    ÿâú<   2".54•Ø ;bxa< <H5)N@&&@N)5      5úJ   2#"&546Hr?Œmn‹ŠJ#>(=OM??J   =ß ·   7>'&'..$^Y1(9;5)– 0
,       Kä ±   7$3'&'..'"¤5(9;	2(«1
*     sýœ   '&'>
.M3&
6”¬L->K:›$),$(
81L*    Î$EX   4>2'&Î
*	$#/

     ª/]i   &'&&'&76A(#f  M ÇËW 	   !  '&>76%&'&6.676'&676ƒ
.Vû	
6	
	}'  è}   42è#}  w F‰  0 H  7"'."&7>323"'."&7>32".'&62>7ä	Œ


		.2.	@<AÏ

		
		
1     ÿÙè³   .  467.'&&'632632%.'&54632632.C.)"k*K(#'"

	ˆ6$&þŸ&##H+.#&     ÿÂÿ½  ( =  .'&54632632.'&54632632%.'&54632632Þ21þÐ6$Q%

’5		5þˆ9	)(    a @Ÿq   /  64632#"6'&&767'..'&676œ;)..):
+		ç!		+~Y>1:1*

		

	   *ÿ¿G Ù G  %&'.76?4>?>7>07>7>@` VXT
YYMR;;YN';
R
N	T
SH
M
7
     w +‰2   .  6462#"6462#"".'&62>7‡
–

9	.2.	@<Aë*
*L   ÿò¤ Ç   %#"&54632¤!*<#9!)r6F     ÿÀä¤   <62"ŽÈŽŽÈNÈŽŽÈŽ     ` +• ø  ! 2  74>32#".'"'&7>'&7"'&7>'.ä
q:&
£	2"+N


I	
5			  ÿÎ¹À    462" 462"e%Ê     r¤    777E?N9 V	9 Ç k   7Ç+d     † l ¢  $  7"'&76'&'"74>37"'&5676¾
	•			
" ,,#&   Ä ûÁ   '450'&76ô;aM	v99™GU2¸3
      Ô l½   6.'6(5)¼Hj!HK8	  è  ± c   %'0&".5>©–	!—   g  ± P   %'&546±;
	E%	    ‰ ' Ÿ 	  %'76ñ&B%(I"I"'    } × {   $.6›$"%%    0Ä g   $.6¤5    G ïº  *  ".5463:>76"&'.'&6U	 
`
$ $

"
'		    o œ ’ %  %"'.#".'&6327>7>'462J
*	&
	
2		A
  ‡ £z' 	   7'.7>&'&676Ó  ” #å.	*/##    U «p  ' ?  %"#&&54627".'&632!"&4632>5>t5w-HbH'
		þÂ		
+ $>>$õ
				

     ¬ÿûW x   %"&'5673	/-N-.x#"01"!     ù 1	 x   %23"=2 x??     Ìÿ¿ 	   "&5462%"&54632ÿ+<*==þ{#1#2	**tt##`-;    ‡ ¶y 
   6462#"6462"‡

–Ó***   c œ ‰   %2+"&463c!Ç""‰!!/!     G 
¹y       & , 0 4 8 > R j  %2+"&54>3#3.+3'#3'#3'"3535#;5#35#35#267#%"&54>32>76!*.'&632c))Ç*!Ç1 ++9++9**@11%**8++9++@1þù.		 
R

	.	˜*;))!$

$$$$$$$V$$$$$$$$ø	

  ÿÃ è ' L  %#"'.'.'&'&764#"/4&5.'4&5.'&ý	,þè*(%4""'5:
	
     T ©Y¿ + a  "'&454&4&5.4&'4.5'267>?'&4'.5.'4&'.'Y
ò

°
|		     E † Ù   ?ZÅ€     6 š ß    7&?6&?67#	#X;	;Ðq))  ‡ ?yy   7462#"&5‡:~: -2GÕRRRR7(X>  œÿÀ N   7016"#'.œ#'2	$+'    åÿÀÿé   &'67î	@   ëÿÀd N   %"#67>54d
	!
%2'
%	   — ¹i   62>'.".'&>ö$		ý      ÿØ Õ Â       ?'7777c)I(@iÕ   4 @r ¢   %"'&L		#¢$   F Tu –   %&'57q)T/    9ÿÀÇ ¤    %".!546;2G	
€þr2#ä#2¤Ï$22$   ¶ J D   73#¶””D=   tÿùŒ     753"'"&54>2"&462Â|&0EéRRä



  Â 6> €   753"Â|PO11  † Ì{%    %#"&54>324>32#"&{õù		   U « l .  %#"/#"/#"/#"'&'#"'&7#"'&6?3š	)!		!)	F¨W   « KU   %#"'.546;>3232U!		p
,WX+     Æ n9 •    %&>5<52#"&5463.	^	n    ¸ TH j    7.'66&>Í
tf

     $/Û€ ) R  &'".7>4.>76&76>67><>3>6."Ì1&
		i	
	
	)%/
	.

	    Ã <= k   %"'&"&76+&	//@
   ˜É   '&'&'&'326¯ %  3  		&   çžW   623#"#&'540$ %T@  Ñ¯'   %"'&'&723267S %*
	3Ñ$	
&   7 ˜@7    462#".2767'&'&7!			t % 	3(			T		  &  b ç ìZ   7"&'263>"­*#9%ç$@  Q Ñ í'   #"&'6732367ì  3	
 %	&
	     z š8   ".>‹
		
	  ³   '&'&67]0,.
9g l.    *ª0   &'&676c@7D ,©¤(
   F .ƒÀ   3267&/.7169$*-0,"

4	
=zÀAoJ;"[I'13  ‘ FzÀ   7467.465>723‘0)1


?JBFl8 I†X7     Ÿ ­!   67&'6	JB!Y	   ‹* ›j   '67—*3    © lpŸ     ' /  7/?/?/?/?/?/7¸				:				2				( Š


@


F


=A>  zÿ½x $  '&''&'&76767>76?1‹/
2
6 1"%
		“K	#=9J3S   H(ºÀ   672&'676´19+'	²¼,ÀG D     ÏÿÎA ¬    676776'7Ï
\#BjWtÅ  ˆ gx   7g'/$(xN9'@%
k     ´N9À   2>53#"&503ç&:
£4,W
  zÿ½¶b 
 ,  >7'&''&'&767673723367j.8/
2
6!	(*'>		þÄ
		     ÎÿÆBÿÝ    &'652&'65A
	_
	&    b*ƒ   '7g *g>    ¹ÿÜG¤   &#"3G+$r$È  ÿÀ À   32'&'#&54&' .*%D	P*ÀSbR	4fE##9ãr0    ÿÿÿÀ À   "./>5&5&>?63 +"	D0YÀ¹+ã9		1”E`:	}…!     x /ˆÀ  # 4  #'7'>;2".'&74>7&'&567U*V*#	2š2	‡þš	
    J ßT   $42J
ß99 X ßb   $42X
ß99 @ Î{ 
  %"'&573q
8Ï(	   ÕŽ+¹ 	  #546;2+VŽ   Õÿý+« 	  #46;2+V‘    < @   "'&'&676 ,*C#+.@§b@@      <ô@    2'.#"&=4>32 ÿy.+#C*,
á
	@@@b	*
	*	   Õ •  ë   %"&=462ë	
•	*		*
       ‡  ù    $"&=462"&=462óþ‡HHHH    ! \ $   "'.'&76 
L)$o*&_     \ß$   2'.# j)L$_"      `€$    &'7'2&#"76€?4s'*	
G ®sÃ     ¤  Ü 	   %2+5!3#"&=46òþ*Ü88   ÿòô $  %+'.54764&676êüÊ	l"-%'%0!28K;'

  ÿçø  ( <  67>?2'%12&'&'&6?'47676.'&J1	-þ2
=C	c:
	E"

	 (
	"	  
ÿÀþ Í   $ / 7 ? J U ] l w ‚  "/67632"&54>32"&462".5462"&462"&462"&4627".54626"&462#"&54632>%4>32"&462#")	.					"'+		
þÄ
			:							
	ê	.		     ï -y y     6462"462"2462"ï"$[	     Á 6v Ò 
    + 6  7"'&?6""'&?6"'&?6"'&?6"#&?6Î	66
3


2*		*+
*¬.
&	$$
'

&''
  ÿË Ê   + 6 @ K V  73263276?2'".#&"&'.67"/&6""/&6"/&6"/&6"#'&6+LfE0"7~(%&	c´	,
45  

•  /(

    ÿÒ    7%'".#&#'&'.á/=7/	P	 "
     ÿÚý    7>76'&'.‰)U!	5,JPTnQ	j	
4	
	;    }   7&32767676'./‰)U1D"‘s

4		
8     8  Ó ª 
  % 3  7#.>&'&72>'&672>"'&>7676c
		

		8	š	-
	!	0	
	6     ÿÀÈ â   ' 5 @ N Z f  7&'.76'.766&'&>>&%>'".>3'.6'.6"'&8		-C

	


				7#	´)t	C-
1©	"	
	0   ¬ Š¦ ï    7.76&>#"É©	
È?   p  ” Á   %&>"r	¢

    U µz Ú   %&46Y·    š /g ì    $.642>".>¸4D4		Æl

		

   ‚ Ø~   %."54>32~?T?
!,	Ù

	
    )ÿÀ   " 0 :  %6'&676>'&&'&76'.5&76%&>&È(		
&
	$

þº$8´.)E7	51
ð			P:   4 µ×¯    &>7>'&'&7>9)9.3™8$*,
2(+:P		  B ùÌ¯   '&/&76Ç3.9)&"#
2
,*  % $á¾  # 3  74>2#".'76?>.'.76#"U$@P@$+0!!,,3
,		.r.		,‡*##*((˜,3)
	QQ	
;>  Å ô;3    '&676'.7>ò
	
G
		   ¹$GN    462"6462"¹W0     [ ‰ Ž ¿ 	   7'&74767"&7>Ž
	

     … µ ª × 	  7.76¦
·	
   ÿÀþÀ a  4&/6'0#"'.1&'&6?&'&>?"676&'632>.'Ì"
	,87,!	L'/CC/M	$&BA&		!";		


98'<@	j&			

%k  ?ÿìGf    &'&>76"&462Å/@	--†*:**:9<#ù:**:)   Ž 2r k        64242426424242œœ+\*     Ñ / b   $"&462/&&F''   V ò ¦S 
  '&676	 .@"	+ , êÄi 
  >'&;P@/95    Z òªS 
  >'.c. @+	"     j @–[   2#&'&'.>ä8,!Ø [w^    « ²U ò  %  74>2#"&'574>32"&'5«		€		Ü

       Ž !  %2'&'&74>32>"$$,"

Ž
$&1
  Å P> ’ 
  762"'&ÏH""    ÿÿ6 h   %>.

H"'  h  j   76.'&76Þ ,!		-G	     #Ô ë  1  7&'.67'&'&767>32>76#".6‰))

A*)$
 'D1 	M1		A7#
2	$).9
   µ J À (  %>&'.6.7>>2'&76J .Z.!M 4	!-
4F¢*68*"#'	$D6/E'    ¢ % ^   %6'&54 "..U	
   ÿÝÂ i  ( 6 D  7'.'&76'&'&'&27>7&'.76.'&4766'&676Ç	A-(07"<	5#ò	 (	0!26	,	&,	"#"	
-  ª k¬    6"&46264.'&76ó „

1	)  P Çþ¼ 
  $  %7&'&67'&'&3>'/6'6¤;	H5	
<	[ô"“
.   Žÿ»L @  7  &?#"&46;4?2&?#"&46;4?2E&
b%			+

	+
     ( ë lƒ   0'6'&'&>I	\$3'	!   N p•   #"&54632dK&k
    + • ³À   74>&#".54632U	

!#'•:,'!)<=E      U  ¤   %##"&46367>7 S;-EGddG!3+2ÎOQ'ZZ#<K   G‡ d¤   4>32"&G		•	     ¿ . ¤    " * 5 ;  2.6".67''&727#6&6&6''&767&63.67'&6 !;,!  EC G*<1	K$	&%,:MK"æ,,,!! ð
þó&(®   RÿÀ  %  %#&6'&&'.>7>7&'&26 ¼><		$AsV¦æ`Y1$
"IE!&l   ` G “ )  .'.".'>7676766'66Æ*#nK34*jÝp
HO$	



		8%(     µ3•   &'&'&2Ä		Œ
     ÈJ ñy   #"'.'Êy   Ì ã æ þ   6462"Ìë    ` . | Q 
  7#.>{	
	B   ÿý# ÊÄ   /01#'.63Åƒ§Lqg   'I —§   %  &'21676705&'6767'6767C'#	 .	&		

	
   $ÿÀÝ £   72>!>d@UV@þG#N!-
+ M<@N     ` "»• %  7>32&'&'&'.d+!&4			%%+-oF67& 65P"&D2*%G    Ôy   #*&47>¤!!Q

Ay"%
"C    Á@ ë[   #"&5473ë	(U	   M   î   7>76+".67>µ
/ :1$$D ß%Ä	
	??#0:    L  ¹ Ö   73".7>?3¹P)<	¾o*3F$    ‚   £   %>+"76A90$D Ð&&|	??'  i @  ¤   %>>.i(G&"
.”;
     Y ¯ ö™   >'676.e#('B	i	2+ '      T   >2>465'.	?	   P “ ¹ Ô   7'676²
KFÔ    ‚V §{   "&462§

p   ¹ G ù   %"&54>2G/0/
"
•>PP>!**    ¼$ ò‡   .>?Ç
	
$$&  Ä3 ät   &7Ñ3)    û‡  + E  *.546?2&..>7667>'&3&&.>79	[
A18!	
0,B	-0



 81A	$	
9D9:AA732S:1#))#
1:S237AA8>;   Õ+2    462"64632"Õ			0								   3<t   &547/3   A …8   7&#"&6727r"#!A `k#.<S    ` -ô8    &#"6'.'0&76'3&#"a	(""
.!#",$I.488Ä:S<.#k`  ê -     7&#">'/&6;2Ÿ
""(Œ

884.I$,

      ÿí N   %.5476'.'.54>32 œ8…naz+&$9#=$[‹6=eB•u'	,	# 6-'V  « ñ    #".54>2262.Õ	ªr&	’k1     $ÿÀõÀ   (  >32'&4.632#"&6%7.'Ç?!23þýGFTO
	
9@7I65õC,<1€7#5     d y  Ê   + 9  7"&=4276"&=4276".=4276"&=4276€
			+
	
*+
			Ÿ    U ¤ Î   753#U¹U¤*     2 ‹ Ã   %"&'>pA
“¯#    D $¹$  %  .6%".'.>7h!1
G4 	$% $%::P%90/#%#"#  nÿÉ’ n  ?  .6?#"&46;4?267>/4.6332+/.Ø0

$R	$

0
6$"	

		$
    × Û)   .5;6)

	
		

    -¤µ   .7>?2’&			  \ÿæ¤¢   ".54>2¤%BVB%	&0&	:eU11Ue:/  /     wÿô‰5   %".54>‰"1**1"0;;0Ä3U//U3//    [ Õµ   .>?n			50$6  Z þ¤µ  "  '.'&6?>?.54Ô,%.*”4	$ ‚6&"2
&&
6    xˆ 
   "&4632"&4632å -  £ -  H  -   -      “-md    "&462#".4>32É³T   × Û);    .546?)

	

	

    ÿþ Ó§ 
   &'.76>.¿(69›ˆPT
*-)5/"+vX8'v+%    Ôá    &'.76>'.£	%nÄ
n%-3
*GCCG*
3     ÿÜîJ -  %&#"&'&&767&70#>?#6762#"1&'Ì?=''=+!	 5>–>5  A(43(

		

	'		ii/	

     ÿôë ™ #  %21&&'&147">27>76&¼>,9A:,>d6dp)"',+)") 
LJ
     œÿüd ä  . 9  7464>32#"&/7<>2#"&'562#"'&œ		

				eB
Î

„  ÿÚÝ     %2#"'.'&72=_$0			 %?).,.     $ÿÚ ¤     2#"57>76&>323#"&ß d.+3t$þ]$^>	
		+1¤1ˆYC]þo)?%.M   	ÿâô    # / ; G  %7676?#"#?7'>.&/76'6'"'_7!kMK(_8P
ƒM"	lO"!M45
Wú$
=sL.aU^. %Q¢K=!M%
AZ  ÿÚÝ       %2#"'.'&726'.+32=_$0			Ÿ+?$
"& %?).,.… $:
    ÿ œ ¤  #  "#232767676'&'2#"57>76ß%n+D  d.+3t$’^98&L21ˆYC]       œ¤   2#"&'.7>"CO",-d ¤+K-J‰0    ÿã›    , 4 D P  7&'./7#'.='&?''.7>01'&76&'./7#>7>3		QWTÁN`ƒ	P&~7""	£LW!5ú%!#áz.^Uš
Q®?N=A	fF"

  $ÿÚ        7&>323#"&7327>7>'5#"7$^>	
		+1'"		6R)?%.M] 1
:		
%       œ¤  %  "323&'.'"'2#"&'.7>"
D+n%CO",-d ’2L&89^+K-J‰0   Ã >€ (   .76.67'&623234571&&''€D.44&DFF   ÿý àÁ 3 k  7'&54'&67>27>7>2>766&'&7627>.'4.5&62>&'.62'&&'ãWM
		


	G		


		

MWé1 /;#-	
	RR	
	-#

	;/ 1    ”ê    7&'.676>'&Å/I	ˆ{ˆ	I/ä<	,,	   Óê  
  6&6$'#
"0	º	1;##:   3 ¨Í ý    7&'.76>'.4«6		d²d		6Ü

     ˆÿÁx ÷   62".'&'.À€8$÷9)%'

'%)9     žÿ×\   # .  7&76&/74>&'.?&7632"¨
	
	€

O			<{

'¥     ‡ö 
   7.'&76476Gr

ÜU$"
!
     0ÿÃÐ»   %"&54>32ÐbÜb+aD3R1‹qWWqP‡Y3Vl    eÿÑ› á   %#".67.63!2ˆ!$%&##	y5!	"5!""       Î   ) 1 ?  7"&546323:"&5632324632"6"&462"'&76276Õ		›b6 ƒ,j,À
]					i   ­ gU – %  %'".'&".#5&7676>+"		•
     Ïä  "  7&5&4&'."76&76"<~Ô	     ¤ ^í±   1 E  6'&76&>'&76#"'&'&76.7>7&67676'&ß


.
´



$)	"	_*
#"	"
(2	
&	;

     – Rüº 
    + / 3 7 B N Y d o  #"&462#".54632"&462"&4632&&6&6"&54>32".5462#"&462$#".54626#".5462Ú	+			v*¢	þå		“ƒ			w
á†	    ÿÁæ­ 5  >&'.'&67>>&'&'&'.$;+<rN$3O2-6!$2;Œ8">p.6Vk7(	(1	(A#mJ    ÿÃæ­ 2  >&'..67>2>&'.$;+<rN$3O2	!4G
j}gp.6Vk7(	(
!	
"DV$*>  G$ r¤ 
   4>32"&4>32"&U					•	]   ü/¸   '&'.6&'&42„6)U
"    $ÿÁ ˆ   '.7>7> †™ƒ*?+)‰ˆþÄ-C48A4<$-     Rÿ÷é¾     7.'.7>'"&'&6&'&3{u
,

(/
F1$""	
/ ^Û½   '.'&>'&32Ù.(2fP%*4   ÿû . ›F   7.7>&96	,=A->	W(@)     m  Ê-   7'&'&762¼'!
 åB7:'   Ò y ²   6462"Ò‰   z9È©   .7>.50¯#

:5
	

 $   ÿýG©À %  2#.767>'&6.'&?"„rH
	)=>S KV7
	    PÅÅ #  0'.76326'&6".'&W	‚qG
C:R Ja6
	    Aýy ;  "'&76&'.1&?&'.?&'.?"'.47>Û


	 
%	
	4 $	@QW(0U)3	G
		8    'ÿ¿ùg 	   u  67'456767&6&56'&'.&'&7676765456&'&'&?&'.?"'"&='&'2>7676:36<Y(!	9			%	
			b'9$G
&		C	sn
	
G		
	'(	     UÿÍ§N    >&'&'& 462"|
	þÐ			$
	a      \¹À   ¹ ('!

@1($)%%d!#3    G \ À 
  4>?&'&G&76`5$$2%þœ<?,    € y€À   .54>?€@  -!&&-!$U.)//'!		%$0  W ;$ Þ   7"'.>>¹ka,Þ]
#8    Ü @ª Þ   %76.'.+G,6?Þ 8#  # Ý Î    7"'.6>776&'.'#€rb*ð*bÎ}	4F!!F4	  #ÿºÝ® .  6&'.+"'.6>'&>54>2¸T!
!T-

-


-R(- )B  B) -(R-  « NU •    6462"6462"«Oc  uÿÄÄ ¹  # :  .?>4.'>.?656%"&54.#".54632E
Ã
3/<	/	ƒ	
d"		ƒ	ƒ	9     l 'ÒÀ    %  7'7'5462354>32462#"Ù2	…	øËª
*VÍþ£	
     ÿÁ¶ T  &'&'.'&/&'5&'&74'&'&'"'#"'"&7>7>76;03>13œ
	)3			%				
%!	%
	0f
	;-( @
		$1?/F    y Pp«   % / ; D  >&747#"&'&'632'467#"&4730"66& 		

€!"	{}Q-
1
·#	     ox ‹”   462"o€   iÿ¿™ÿã 
  ! /  2&'&67'2&'&67&6?7&>?+'¯(D	
(¯	
(

    ’ Ò    <>76"&462"O
T(


n •


    =7¾  "  &'&'&32'>767672é$O+ 	2±,%‹
6C?j   èR˜ 
  '"'.'&ì"	˜	!   ÿÁ f  ) B  '>5467'>7>76&'.>76‘)
[
þU		(%'
f 7&3 1;?8?.,#5 %D¸)	#       < - 
  6"&54>32<

 

     8ÿÆ s  ! 4  67>?6&?>36.#qB	
	#	
þá8

#'+([	¤*+2&M	=Î.     P *9c  ! 0 H V  ?6.'.#76&'.76.'./076.'./>&'.+P.6	2š%	0	

"¶#$n&
U,51#W( /	  h ˜7   $"&462˜Y~YY~Þ~YY~Y   
ÿäör ^  #"/"&?'.?'.?'&6?'&6?'&6375>7>7>7676762#rä
&	##	%$
!!
$%	##	&
  		    !
	    5 &Ë™ z  70#&/&/&5/"&57'.?'.?'&6?'&6?'463?467>7>7676762#///æ&  dÿãœ ?   732+"546À€$8*ä*8?**     ‹ u å   $"&462uE`EE`¨X==X=   Ñ / | 
  %"&4632/&G+   ® R Ÿ     $"&462&#"&4632#"&4629	

	…


@E	




     ¢ «^ ñ    74>3"'.4.#2>2¢(µ(#ÂFF     tÿÎŒ Ú 
  # 0  6"&54>32#".4>32"'&7632#3"'&7632#®ïß
&V
&Èþô

   ÿÀ; ¬    73+"'&76&/+"&67>7û""·""	‡4.0
*;C&iL/ 
C     ÿÀø¾ H  "&632#.#+"46=#"./+"&>5&'.7>7>*°	


1X%6".39>5	('	u	95OQA T!TA“(#>
,    ¨™ ¸©   "4¸© 	  ”B Æ         #  6&&4&6&6&.&6.&F/3YFI	Á
     XÿÎ ð á  <  7+&47>7676&'&'&67'7673#.'&#"4757'&±4
3	J‘75

(^  vÿÑð $  $36?&'.'.'.'&767u


>E[	/1!@/ -a  ? ir ¸      $42&4242&42T!%iC0     RÿÀN Æ % B  732#*'"7>7>'.#.'&67'67626?.'"#&77&É,!
k
ŒE
 :	
     l. ˜O   '6'32>—	M  c ±_   '&72157>'&#"'.1676	&#
%    ÿÖþ· ‚  7&'&"'.72737677>'.2&'7.21#.7>7>7>72>7>>'&76'..'&'4.€
	3	&
)	
	

'
	M,*
ü%				,,1)&		!8
"!#O    
 lV ?   #"/"/#"/"/"///"&'0&#.3676'"&=&32416324162456365632454247434656741d73O	



	

%
	     
 ±• 0 < |  ##0&#.3676"&'0"1&""##*#"#"7>76"'''"&=7367>32167236746367630623:1217>'&#"'0'676#7%/	3&=
=V
%    H aw•       #  "/>76&6&>&6&6&6&&6o¢ 				4		x‡1


		qN	    f tŒ   42f  V Þ È   7&76#"&g1Y%pI2N+@€|3)	)@  V ÿ æ     ) =  %6&'>?7&'6#0"17'&367%>7#"'&î	M F	Ï
þt-RJ&;&w9"N		d
J#
)       Ž% 	  7"&676DS<C	D      Â‚  ! /  7"'.>76#"&54>;76"'.7>'	(*+!@

ˆˆò*
"5ë@

"þÞ     /¥-   %67676;	"*4©*$k+      ¯ K æ 	  7#"'&766ä    ¹ þy  "  %#"'&>32+"/&?632ð)	gZ6

A_U	þ¸	g5

>l	     @c q½   '&'&676]
³
2	'    ÿÀý~ Q  467>76676#".5.'+"5&7>76'./.'&65.&1,C!,		G
c
/,
(
3
'`%E		
1
H<A  > c š ð   7'&7>7'4>V	
	:~)
   ÿÿ __    "&5426'&_
[	W/
     lh œÂ   6".4>Ž		¼   a ‚ œ¥    &>"'&767676
#	¢þÝ #	     C€ z´   '.'&76`
	 

		   ÿ¾ä¾ J  6'&'&76&'&''&76'.4>'.#&'.76767>'&6&'&3tJb	
'P+
	#		
$¶
2-+	!¥DgZ=C66:%

    H <i   76"#'.>)g    b l€ 
   "&5632324l		L		|  f6 —µ    #'&/67>5j	'´T   ÄÿÀ ò    "'&?542Ñ@  ¹ÿÀ<     #"4;2"/542ë++C$   Õ ²+   6462"Õ$$Ë##     Î ë   $462" ×			  
   äk 
   ) 1 = H S [ c  7462#".<62"74>32"&7462#".462"'462#".74>32"&4632"&462"6462"(dV	+
							"@`€
SþÜk	Y
®		P	B			  ÿÜGÿë   #"4;2@++$     ‡   %".5462 !nân!•Ö•P…²²    ö $ôX 
     %"'&?6"'"'&?6'"'&?6 êëÎÎyy$ON*••9ÀÀ   
 ëk    $ / 7 ? L T \  $462"&462"&462"'462#".462#"&462"&462"4632"&462"&462"²Iu	d
	7						34ttc	þØ	
ba¢		P	B			   $X 
     7"#'&6'"/&6'"/&6ùëëÏÎyy$NO*••9ÀÀ     ò k y   $"542 k ÿ     µÿëK$  +  7&4?46?#9"&7>76'&>392Õ
 ]..Ü
¿&&4**4    ù ²d Ü   %2'.>?+++	Ü	     bÿÀ  ë A  7>726'&'#"5476#"&'&1#".54>'.#&67¹	%!"=-%+H á	<.4%		a8    è '  7672>32#".'.7.7>?676/+	
'? (			¤	3./       4 :   7&73&	    % ® ~   7"'&6767>2'"A&			%       /    76.™    € « œ Ç   6462"€³    t Í å 
   76'.7>.#""&u;	ì	
	  ïÿÎ $   "'&?542ü2'-  äÿÎd $    #"4;2"'&?542**''-  v Æ!   "'&6676™"

    +ÿëdÿù   #"4;2\**  , ÷ vG   7.6762/ü	&!      ô mŠ   6#&.546Z	

"‡ /  =ÿýìµ   %.''.76.7>ë[/7=6#.%>£ hH'($7@þÿ    › ç   %'.7&672›[/7=	$.875 hH4 H'D,  ¯ › Þ   7?'.»	
#=%9GÞ
h     ¸ +›=   .'.>ñ:'&)=:;KG
&!;0(     d\ €y   462"de	   *Ñ§ 	   &76>'.'˜=	Ù&p\‚@B/   <Ã    .76>ŒA"ô!S8H
	  
L   ð v    7"'&7676#!"'&'"546	7nd1½1cm7E==E  5 `æ ˆ   %"'&7>'.D	E4
	
 '+`		   Ì V3    %#"&54>323&„    ÿÜÿ¨   "'&'.6767>2×qV:Wq!>>9?=!=0>,"",>0=&;  ;&   þ?    %.'&546764. *7?#q1]]0q"?7)ó,)G(!*jLLj*!(G),      ÷
  "  %&'./415467646&'& #T:g2BA2g;T"àK!L	&nn&L!    © ²V Ý    6462"6462"©u¾  Ø †'”   %#>2'O†ˆ€€ˆ  „ÿã{    %"'&'&762b,'',*qh&&5   Ç = 0   %#"'&762>3
),      ` Ê ˆ   7"'.&7>»=.
	
5D	`	  v  ò Û    7#&'&626376'"&54ÓB2V+		$7F

8
Q(	
2     d c è ›   7'&6736Ì3,		(4k  g øÕ¿ 
  .76”&?0¿JN
'2  –q¹    "'.'"633#&7>76#ù,$$,DL!C..C!LD    Ó 3 z   %".7x3	6  Ì a °   %".7!®9
<	   À ’	   0*.5>(s	%5    ÿù/ ]   %5-Wd    36 z   %7#46+x6	3     a= °   %7#461 ®	<
9     4 ’I¿    2*146'&'&6(0?&5%	s¸<2'
NJ     Ü ó û   6&676ßý
   o ” Û   &  7'&6?67&5463676#'&7672Û.3/-
W2
7%		+X&
8

FS2
	(     ó*   $.>
ó   Ú ý ú'   &>Ý
   ý,'   $.>
ý
   I š¿_ 	  %  7327#".'"'&'4636!"'&7673Ì#*;R,
 	
 
,³
^3
&

&3    Ù h1 |   7327#"Ù -$z
     Û ;. O   7327#"Û+"M
   ! c¦ ›   %&/&6376=4(		,k  €ÿÀ›–   &  %'&6766'".5"'4>/
	-/3Ý!|		X	""#þ»1
   `ÿÀM,    %.#5&76.	˜	.
1   ¡ Ô‰–    76&'&'&7.>7§)	
'è
ü	bG#"     Úÿù ]   ?.Ü*Wd T ç¡,   &>7>œ 	
	
 " Õj ü   %2"&>7>3b$
ü

   N êµ  <  "'&76'&'&'&632"'&767676767>'&Ù<	$
"	6Î3	7' 
	/$ 	
	"Ö=	7     AÿÀøµ  6 X  "'&7>54'&54676"43276'&767676"'&'&'&'&'.'&7>0K	;	D<	?Û6	"
$	‹/	
=!(		3@U0D
	=	1]d"	
	 Ö 7
=    é õ$   2'&?>7ä&AA"
&,)"
$    ÿÀ¿ û   "'.547654.'&6µ?	'D	 @]1!"
D03*   ÇN9k    462"74>32#".Ç		MW					  òkÀ   632òkU+    ¹ÿùGy    "5462"&5462+V,6,,6,NØ$jj$"PP    Ç Ü9@   6462"Ç!0!!0ú))    Å$ 
  /&'&¹&.:.$	+     ì$   '&'&36¹'2l$	  ÿý Ã ö$   2"'&767>7ä,;-+&,)"
$+
     f h¯   "'.'"&>V


f	
  Pd ‚Ä   "#.76'&6p

		d
"		
    Ž ²r\    *  %462#".462#"6462"&4632"9	d(			‰		Î	^$    c ©Å   "'&7>&'&6“		
c)   d ÓÃ   "'&76'&6´
			d	   ÅÿÂÿ¼  % 9 M [ i w … ™ ¬ Ã Ó  "'&76'&676"'&7>5&>"'&67>7>""'&672>76#0"'"&>376"'.>76"'&676"'&676".'&632"'.67>7"'.54672#"'&>76"Ù
%	
	*
++	"
!		


e		,
	§e


&
!



	


5	@
I?	

>

	:'
	$		    ÿÁG  & ; N c {   "'.>76'"#.7>76'"'&7>32"'"'&7>'.'"'&7>32#"&'"'&7>32#'"'&7>72)		d
#	'
 	%2";	"	?
8

	3
			>		0		"		%		    f|  &  "'.&7>'"'&&'&>76S

%	%	     0ÿëÅ– "  2#".'&/5.'.47>¶|R.#)#

	*7–d9‚:%'8
    H §z   2+".'.7>3¶oI&3%2(;(zY0jM3(4I+"     @r • 
  $462#"$Y#   ÿþÿÀ  å W  %#"&5<6.'#".'.#".'.#"'&7>767&766363>322267>æ
	!	a,%	



/?
 ™7+
	'[7),
	T
   ÿôÖ Ý   %0&1'&'&7>'Ð!o#(8	˜$,5	5-      >† â  $  767>76776#"'&763>7>G* šh3)-Q&	?‡)	5%$
&    ÿÉ » -  &7>>7#".5467>'1!	*,#+BFR7*2D&<]3 
!1\*
.'.I&	!"-$#.^  Šÿèè ©   70>4&#676#.‘?) ³!@›8KF
"™C     "V dœ   &'&7646'N W#   CO t|   '&'67>n|  „ Ò Û   74>7267#".„0#>/)A'%6i	42.    ( R|   767>'	0*	$	  ÿÐÏ) :  7767676#&76'4.'.'"&7654&'†$/:	#
45	);	
&)
			I;
0:   ÿþÿÂj «  %#&'.5'&76'&''&#'''''#''.7654''''&7>76'77'656767#7>?#7>?'6767>76023263>6'û	
		

	6		&		
	


	.		
?	6	0N

&
!B	
	'   ÿý 8 « ²   76'.'&767>7‹8,
” *#   ; « ®   76'.'&767>7‹7
-
”	%%     Ž ë «   6462"Ž			ó    µ ¡	$   '.?7>764'.Ý

$	"
    + &ÿéÚR      ) / 8 D P W ` g p | ˆ ” ž ¨ ¯ ¶ ½ Æ Ï Ø á í ù 
&/7>CJS\enw  %'4/2''4'#'&5#"5''5&6?'45.5'42#"'.5'6'"'0''"''&5'#"5&67#"5&67#"'467'/&6?'&7'&7'&"''457'&5'&5''47>?547>3'&7676756?5&7>7'47>?'&5'&7>3754'5&?547''"''&7''&''4''475&'&7>7°	2	)		+=C/LKU2K	Ië		
&*
'	


¢
	¼ŸX	È!
ž Y*
!	-1
	S
 
 
'
>	xA	'9y	 	0f
	TS&Ù	B  ¦ÿò Y (  74&'7"#"76?'"?6276÷		.M(

  ¸ A% £   7.>762'".'&¿N	Š,    Ú ,\ ¡   7.>762#.'&ãS	‚4!
     ¾ \F   7>'.'&'.ÂM		æ!	)	(   ¼ bD   7>'.'&'.¿Pê,
'    
 ú f¾   , 6 ? H R [ e p {  >+67&54'.'60#"&'#"&'"&'"&/32&'7632&/636&'"./720&'r		r
 

	
 

Q		
KfH   @; ×© !  6'.'#.67>76Ž$
¤	#   @; º¤ !  '.'#.67>76Ž
¤	    @> n‹   .6767Y
R	   \ÿÆLe  ;  #'47>7423&&57#'&7>?"567>76v®
5
eþÖ	
	     V; ®{   6'0'&76767>Œ
z		  [ ­ ïº .  &7>33'.5&7>7767>5&'&%	
			(Ÿ	
  	1'
     ¡‚ ·—   462"¡ˆ		   q Z¤+   7676'.'6&>76Ç /$1H"E9	#&0   9 N:¤  9  7"&=463:3:.".5463:32U				Ã	•Õ
[PG*
KT   N ¤   5% þ  ‡99     ÿÉš¤ <  %6'&'&76763&5&7>3:276B!$!4T^12		1	º(.,--šx@!E<.(0^B;0-	   N#   %'.7>òQ1.89!~$T!05 $ Vø 	  %'.676ÙE*
©v,'/p     Vè ý 
   %6'&&'&676$ 42Î !ñ	g', < yÏ å    $4632#"462"<
g


Í
	@


  O o“ ®   %.7>	€    / [– ¤   %"1.'&6Ž [      ½     &'&67467'.'"!!j		ep	L=6

-C>5.E"		Y!ep62>#6,7B?     Ôÿ×é ä    7&76&7.'&7676å $%
Wm74 (B
 4Ð+X
5(  % %› ›   %&''.m*?"%4	
C"    " à a(   7"#&7>76*#à +    @ Ý áž    7"'&676#70#&7>76H	W+Ýƒ#     ¯^ ä   "'&7>3'"¸^     v qOJ    7'&'47636746&'67&ò	+ #'"&"W# +	     _ …;a    72'.76746&'6&¾6 #54"Ð"42# 6  ÿÀ «    %&'&6''&>ˆ)Ok)C-’-†-@Ee)kO)C-ë-†-E@  5 ë Õ‹   &'&4>2Ã
)3%
ƒ
%3)
     4* l    "'&76?67>4>32#"&†
	M		f	
2		   wm –Œ   4>32"&w			}			     ƒ, ÄY   "'&676'&6˜
,	    g þ ›=   7"'&676'&6q	þ      ÿÎ ‡ /  #54"/'4&"'".54"#4>2 r
r'5M^M5'G&		 G)FTCA,,ACTF     \ \¤¤   6462"\`ˆ``ˆ¼ˆ``ˆ`     ÿÜ    ;  %2#"&5"&5"&5"&=6!2"&5"&5"&5"&=6Ç			þœ																		     \ @¤‡   7474542#".\%þ%$54(.$©2'{{'2+%     rÿÁŽ‡  ' =  747&542".&'&'&6&6&6&6&676666.r Þ 5=8=5„Æ,!kk!,,,¼

8



H		H



8

    ¯ •Q2   %  462"64632""'&632>76Õ			0		4
-"

'						€


    ¬#TT    "#&7>'&3"'.&76"´#’##    ¹ ùG‡     632''42042¹+$y+**U     ¹NG•   >2''¹%&$y
++  ÿ¿Ä b  %'.#&"#&'&5.'&'.54>7>767&62676276&'.67>&'.'&þ'/	A


4
	H9,
!i%
(q'H	



	0$ (-'5)	
'7  f  ‚ ž   6462"f‰		    F EïÁ  -  7>762377>'.'&>76&&'.F
‹e J
>.7/P!4&$/,K$0 %,8K6&#  ó ˜ÃÈ *  7>46.'.7>&'.ó
,c44D5"	¬
'6&(0'5;			  ìÿÎq m  	  %7&6F
s'85$O!   6£ û   %0#&?6?'&6F
?e	
	sH6
137>;,
   X O¨º   (  0'&76'&7>.4>32"&462#"„<"/	 ÿ		}	d-$A	¹S     ë žŽ   0&547M*'!@Ž	4E    ë ;V   &54V
E  ?ÿË.¸    ?0#&"462"÷"
 Á .!!.5—.!!.!   éÿñ~ ä 
   %"/&6#"&46;5462pV*	6*	)	E	ÓÞ     äÿÃ8    "/&?6+	)
9**
    V ™ ÿÅ #  7"'.7>76'&'&'667³..&
! ™'%#*-   Ã ¾ûk   7&67>.'&&×"4>C

 /& Ì$P	-'$	     Mr hŽ   462"Mz   	ÿá 5  %007'.'&&'.54&/.6&50Ü(	
#(	
*$5	
­$×
<	
&.	    ÿþÿøúƒ /  >32#"#"#"&""'&"#"&54&'.'.		C%-›$\
7
'.
&JP
9
	!!
L	<G  ÿýúu 1  632#"'&#"&"&'&#"&54&'.'., KPZ!*'*
	,
&L)	*'*!
L	<N  - ña 6  >32&#"#"#"."&'."&54&'.'.<.-j!H!	*	

	?G3 #	V
9
9   ) R¿l )  6'&'&'.5.2S"^#(	

A6A!	%I#*	
	
9!-  B p¨] +  %"'&#"#"'&'.'&'.76323~	
<

)-B
8	/"
p
7 
!,	     ½ Ê# 
  6462#"½*Û     ¾ Þ"A 
  4>32"&¾*)   Ñ:   4632"Ñ	
   â ?   6& 	
    ä 7   6$	
    <ön (  67>3676'.'.5.'&'.6(4$:g3*$
	*L+	#8		Y'&2	,
$$
     Cöa   " .  7&'.'&'>?767&'66'#6­
#!#7,2C$žA
	*ø#Rt
!)	42--)&2T     rN    &6"7462#".
J			+	-   • Dœc    (  %&'&'&7>'&'&'4676'6'&a0	+	>„
¯-	
	CY	     ý ,  ´   %.7>;.76ce
	­		,   Q z û !  7>2"'.54>367>Ÿ	%.	ë
	

   €ÿÂô ‡   %6'&6766'&½':''—($ 9i$@„1!74!  ÇÿûË h   %"'>72>7>45Å'#*
!=*

h "
  
ÿÀ f 5  %"&=4'#"&'#".'&''.5467632>76â‚		E:¯)ô'rr6$1S*P(.#2RW"+   …h (  7.6762<67>&'&6&'&7;o4$"5?©% "	
()9<-!=+6$   U ² r Î   6462"U			º     k 5 —   7#"&'&32324
„  L  _   '&7>.36j

"   %i 5” 
   "5&76"'&76+v     3O J„    "5&7420"5&542;
\   eÿÑó£ 	 7  '&'&726'&476?'&?67767>?&'47>7>l	m

$	
			£þ–"	     9V ~›   % 0  "'&'&6#"'&'&6""'&'&6#""'&'&6J
~
   B « ó   74'&#&'&72767>76.nI	1	Ú6))5     ^ O Ž è   7&76#&?67s	¥<8/     r ^  ¯   74507674&4w£
!
  ! !ñ« 3  62326".'.#"&'&'.'&'.)	1<*->"N6<¦+%O	+_5	'!    ! !ñ« /  62326.'."&'&'.'&'.)	1<*-	C 
5$.@
¦+%O.P5	'!  % .Y­    ,  7>".#.766'&&76.à$

	%)«		
«)1	
   ž 3G‰  %  7>"#.#&'&76'#"#.7æ	
	;°$#
	6ë    Ô 68 Ó   7>#".'&'&76&6á	
	¯,    ¼ $ ö   %.'./Û*		Èk9'4    â §F   6762&54>7>'	
	
     ÏÉ{ #  %&'&7>7>7>#&	)-$
b
Ð+			2#   ÿÅù ;  %#"&7&'.''#.>7.'&'.'.7>676767>Ê	
";B
6	
)&%

#9
7J>áxc0C+	(6O*"	#&     f ä ñn    462">76.6f
"
'I\^			     „ R> ã    7?&'&4776'†‚{*„¸&&	
5 ÿÿÿâ|_    '&?6jþðI	7		7_þðm	6
	6  $  ~ a   7'lHaI   X:²•    &?6j	6		6:	6		7 Q3 Ÿ   $  '&?67&/7>"'7>76'&l^2#
"84			      ÿÀ« •   5!!«þU•Õ   ÿÀò²   2#'".'0'&'6@`§m>
K1LAGQ ²Dk?O4a0-PM      ÿÀò² ,  %#&'#"&'#"'632632632ò!c!/'=
#9#&&.$3%"H'#$"†	$3$(    ÿÀð¯   !ðþX…`@ïEw·     ÿÁýÀ :  %&'&46'.'.'&'.7>7>766è%,	#;
"$
	$/'I>
:b.3)	!'	
*9(&KB
    2 Q÷À 5  67>766&'.'.'.'.74676&'&I	$
	$/'I>
:
)œ•9(&KB
’	      ÿÁûx J  %67&'&46'.'.'&'.747217>2676'&66ù%,	#;

fO##	'23)	!'	
*	kR,

&
 	     CÿÀ–Å /  '.&'&767>'&'.7676a3%!	
		
<
%$#)
-D] dP¶	=A#%/oDC"&    k šb   '&76'&6v




$)	   ÿÛüQ 2  #"&#"&#"'.6746374634>36;26767>ì+ O*H(#!		
=a"..#&'@&!,	40!B
   Ä Ë   % , 3  %"5&3676'&62+"""146372+6372+6372+63
þº'
3*' xG   IÿÀ¸Á  (  "#"'&67.67632>#".# 	*//*"	¤þÕ:E:HhQZM
pyhH:E:  ªYV‡   "'&632676 /	(%
.Y
     s ]ˆ   74>32#".s%B&5"ED$Î3N    ÿÀò 5   %!>76>¥'	
þ((.(	#-6	;
    Â Ê> î    6"&=4632"&=462#Ó
X
Ê    9ÿÀÇ $   %2!4>3Ž	þr	$
#   ªÿÀVÿÜ   #62V¬r@     Ì 4 f 
  753+ÌhQQ  9ÿùÇ A  6  73"."676632&#".+267632>Ì
 
G
Ú
 
	4		     Š Nsw   7014>32#".Š61DD1,à)E)X?=U&7     G \°“ Y  &762>"&=4.#"&/654&54>?.46?.4>Á
#(*$	l	 1
c	)*%  Ž °t   2.#"'.>3226]	
.	;;
      ÿÀ  <   %!4>7>>Öþ 	!	"#,&$18	=		
    ÿÀï 3   %!.>76276Çþ8ŽŽ$2
    Å u; ¼    %#"&46;2"'&63276§		2     t Œ     753"'"&54>2"&462Â|&0Eé*==Ï



  &ÿùÚ B 1  %..+"&'.67663227632>±

G%X	@		
 
	   Â 6> €   753"Â|pU++  Ž @r\   2".'&546 +

=\
€**€!&     } åƒ˜ "  '&/'0'0/'&54>6;<='(
”@+>0("	%&    „ °|   2.#"'.63226d
!	1
@@""  ÿÀò 8   5> ?6:@G	
   ÿÀ  9 	  #67> ò9:7@.!	
  $ÿÀV A    #62'".'&6762632V¬r9G"		
 @+   ÿùÜ A $  %2>7632>..# 

#


   /ÿÀÑ $   %2!&63Ž #
þr
# $?%%?     Ë 3 e   753"ËhBPP  h jž¢   #".'&'.7>3>446ˆ ");!L›F1©1,$3   ‡ OyM   #"&54767>?54'.'j 8!2G	C3 8!G2(
	     9ÿÀÇ•  ?  %2!4>32&'24'&#6'&'&.546Ž	þr	Ž&D+
	\$
#U,59$+#@]    ŽÿÀrÿë   '7«rr@++     Q ¯ L      >&&>6&546&54 /ø &.J$$    äÿÀÿù   ' ++   d ‡€‹ 8  ".47>?&>.+64>.'.'+* 	&%"

."	2!"		$$	
D31+    Fÿùº2  /  ?//7'7#"&"#".47>322632 G99û

`B`

	9808 **ù		
   ¼ ÐD è    6+"&46;201+"&46;2àká


  Õ s2 «    %#"=4;26+"4;2
< œ     ÿÀï /   %!.>76 Çþ8`$2
  5 Ì \ 
      76'&>&>&'&6&&5&S<	&
'<Y
,P(!(+8!     t Œ     753"'"&54>2"&462Â|&0Eé077É



  } åƒ¯ 5  6'&/'&'&''&547>&'61>7*'=
0&
”	>0&%&   #ÿùÝ2  -  ?//7'7#"&"#".7>322>32 G99"
TDT
"R&$&$&R**ñ		     ² ÕN ò    6+"&46;201+".546;2Üzé						    Õ y2 ¼    %#"&46;26+"4;2
< §		     (ÿÀØ $   %!.>7:Ž!þV! Ü$

"    ŽÿÀrÿù   7#''7gªg/++     Õ s2 «    %6+"4;2'#"=4;2#(
< Œ   d j«½ 5  4'#".'&'.767&>.+63&'22&€a ")*&%"
R28y-59
Y1,,		 
*     0ÿùÐ2  %  %#"&"#"&76322632'?//7'7Â+
`B`
+b808bµG99+Ç**     C ½ L       >&&>76$&'4>3&54‚1
/C
&/J
$   d N«• 1  2&'24'&#6'&'&.546 &D+
	\y,59$+#@]  ¥ çZÀ   27#5Ãyµ¡ÙÙ     ÿÃñÀ #  3+"&5+"&526=46?7›3#¨©$3
.VV.
O'7þñ	7'DÏÏ   ÿùñ ‡      73#!5#'3#!5#òòãñòòòãñ$+++Ž+++  € y€À  	  7#7#7«+*Õ+*y<þ¼E     ñÿÎ$   3&5ñ$þ«    ¥ lå ¶   $&?6¼l"#   õ $òÀ   2#".67 !=C1 *39À$?)D>4Uyy+     -ÿÀ¨²   %#".'.>76œF
#.)	;3BwDë/m$0,1P#3NE/$`    S 3€ L  #"'&767>54'.6#"'&767>'&0"1.5.67676U+
	!H'(/9		!

 D3-Uh$=,	
/,C,

 I(
	     U y ä   6462"U*;**;£:**:*    r • Ç ë   6462"r##®$$    < ²À   7"#.7>32#"œ,1dTIT &²
F/9VF0 8
 z,ˆ   7432+&{4MM  ° } œ   732+"&=4673Î’’œI,    h 4 
  7'&76\88    šÿÝŒ D    "&=46327"=4;2#©				¸#	,		,	X    ¿ » p 
   %'&76#'#"=4;2«+,H¢¢,,Z     ° Ç î   7636762#54'&76Žã		
   „ÿÀÕ D 
    4632"&462"$462"Ü''66''    “ÿÏC '    462"462"ú|  žÿÏÇ       #  4>32".4242&4242462"©			‹”

#	0		  ±ÿÖ¿ÿå   42±*  • ƒF ¼   %'.7>4‘
‘…

     €q À   %6'&76U.¹
    • D ¬ 
  %'&756;ŸŸ€  T ¤›Â    '.?>7&#.?6‹
		B
c;5    f ¢¥¿ 
   '#&?67'#&?6’I ŸfML    á Àg ì   %'.76Ynn
Á   n Rz ×  !  %>7>'.6''&&767>6


:
‰	
	:
		 

    UÿÝÇ r 	  !  7'&?6'&?6"&=46326+ß				pSSg,Z	,		,	   ¡ 4P R 
  7"7542'¨ŸC   ’ÿëV ¤ 
   %"57432'+&?4G¤5JIpªª    ÎÿÀÇ ¹    $2"&42654.#"gIIgIUO7,'8¹IgIIg“8(,8O  qÿÊ¸ ª   "  %2#".4>2654.#"''7'77J.@@.22	O7,'8'  ª@[@3;3Í8(,8O1        gÿÀ Î '    62"&4264&"…++$'++:  Xÿ÷¦U 
   7'#&?6%'&756z)+,\UUß    ÿ÷ j  	  '&76`99 €:´Q 	  '"7>«'&;     ~c §   %6'&76<'
¢    Œ €tU    %'"&74637'"&?463,’
’<

	Å’
‘   Œ |zT 
   %'"=67#&?4;4¡¡>|Ð¡¡    Ò ¿Y á   %'.76LooÀ
	
   l >n Ù  !  %>7>'&6''"&767>.	;ƒ	Œ:	
  4 '` S 
  $462#"4
	3	    çÿÚ­ Ÿ   %''7'77­Y33YX434YY33XY   ÞÿÐ¶ ©   ''7'77ncccc,dcc   :ÿÖ ¹W    462"462#":%5%%5	
5%%5%Q	    ‘ÿÂÿ ²   .>54&47>76•Q2A:-&'"Á*	
	
5	*&1     ‘ÿÂÿ V   '&4>5767²"Á:XO^Q&	
.&1 ÿæÿï ˜;   7&7>?&#=FA
' X?		    =ÿô ˜/   .>7q'
	/?	'^MC     Z/»   >'.?6.&'Z!	/2	
'&L6)	&"	  LL ‚° 
  &76ZLC  Z9»   >&"&'Z!	/2)"L6)		 
    Tÿõu    6462"4632"Ñ’'&6
$6&'  ‡Éº   >76&&'&'.'.\P„
	
	}&'	     Y Çy  "  &&'&'>>'&'.6Š„
(¢Aþº
("$ 
"
7			'4*CH0'      ƒ +   7.'6ö	$ 
#D///4*C		  LÿÁ" &    7&?6&&'767+"#*#"Ã	c6&i.		N
     JÿÐ#   "  ./67>7>767>3232676‰
 ))P/		

  ¿      7"'63232636ö()     ÝÿÛ#    &".16767!%     LÿÅ"  
    + F  7'&6'&'&6'&'&6"'&'&6'&#*#"'&'7>76322¹		›+N*!	

	
,
     Mÿå      67>70>7M  ÿÓòk    75>4&'5>¨"*L1
þ:™{tjÉ#\n"2&¦      Ñó    2732654'Þ>WQMŒÜ0}	 -!3
|
    €œ‡     ".5462"&4626#".5462F$$ß(w

W     g Þ    # +  %".5462"&462.>&.>.>ÞþÄ
ˆ((â				Fa

[œ"(#  GÿÁ¹ ‰   7!#"&'.'Gr F3KL‰R'"+$<     H I¸ ˆ .  7!'&'.&"'&#""'.&'.&76&&Hp

	
	

	
	

ˆ				  )h<   &?6[



 ‚ Ó·   %&?6°ø   * \Õ1   %#".5462Õ*AI!99-}±}²"5JJ    ^ÿÇ£ l    ' 2 < G  "=42'"5'&6""5'&6'"/&600#&?6#&?47"1&?6f-

V
ä1

O9{{rryy,jjppyy+kk  0 „ÌÀ (  322#.7>?4&>36ñ$	,U8fj!
À
'$A3!	"     rNœ   &'&727>' ÿ,U	!3K"+	
9!     / ‰›i   '&727>'›^‰L9 ,Fo	;"^2 5a-   K Ô „   7&?6|		ö    ¬K ço   '.>Ô
L

  Ë Ä   7/&6ê
		ö

    Ž2rÀ   "&54>:rD\D‡!44!	  YÿÀ§³      2#!"&7>364224242Z
/þî/
"4"M"
þã
    yÿÜ‡ ù    %#"&763+32	”*ª*@#ùþã ÿ   œdJ   #54;2dÈœ#     œdN  	   2#633#3#NÄÈÈÈÈN UÿÀœU 
  &5463“%/,H5þ¹  €+›\ 
  #?6;2rò2	Ì+%  €ÿÀr2   #"&56;dÖÖ	@]þ£  «   k 
  74>32"&«#@$    œ \ Î   6462"œ"/!!/~/!!/"    € 2x2    6462"7#"4;2Õ&5%%5vêêW5&&5%ò     ò N9 •   6462"òc   +A»Æ   #"&/5476&'&G"  H:+
   ,jÃ 	  &'676j
º
	   h!Ÿ_   &?6›$$Q+	+	  äÿÊr  8  "'&''#'&'''&5'""'&7&7>o	g		

	
  ÿäß¶ (  .'&76'4.'&64>2>FAE*D.7T5%f2-(!&  #PG#8*
44    LÿìÑ5   $ 1  &'&>7.'&6'76'.'6&'.'¡S"œ 6!­'(%	33#	
	2	
O
%G5+)-N"<&,x7<&M*@D>u M$^'])8-    àÿÀ~  9  "#'&''0'&'''45'0"'47&7>{	?8
			     ÿÖäÃ   &'&7>'&76765ˆ$V:[–^8f.^3bGCO]lD	.     Lÿñ ÂU   .'&>7Â!&	'4+ !:A"d   ÿì¸Š    .'&6'76'.'&A

*#,($$	
..2T47£$4%3i!kW' *86%  Õÿød•   6&'.'D>24	*i1$€5CL-83+   ' é­   462"'C^CC^"Q::Q9   : é à*   71#"'632Ú%@,8" ù(
  Ž ëä@     462"4632"Ž			0	,1     º ìm 
  74>74º!,%ù.!
&1   Ú w |   6462"ÚVzVVzÃlMMlL    Ú wm 	  %0"&547m?T?PG;	R    ÿÓ]	   <62"f‘ff‘.ZZ[    I —îk   %.'&6727î=01@ùD+!+M= I —±i   0.'&6x0i#)8+!+M    ' yœ     " *  6462"64632"&42642462"462"'			Y		K1b	

K¡


K	
“!X


©    
 + Gœ     % - 5 A I T  642462#"&462"424>32"&462"6462"64632"&462"462#"G

			»þÿUx#l		kÈ		Ý			1þõ+		P			³z1   ÿéé	   '.<5762"ßºÉ&É»&m^a
		m   é(   7'&4?62"ßºº&»»& mmmm    : 3Æ   # / ; G S _ k w ƒ  › § ³ ¿  7'&?6'&?6'&?6'&?6/&?6'&?6'&?6'&?6/&?6'&?6'&?6'&?6/&?6'&?6'&?6'&?6ø...Ý-..Þ.-.Ý-.-óCBC  n D† ã   7>36&'&'&7>5&6à+%	@IR

×) _ $ W 	  %7"'4&_ G

  À …@ Ö   %/&4?6;///Å
   À –@ ç   %/&4?6;///Å   ÿÃþ è   %"/&=%62ôþ»

t	N

}…¼C¯6   ÿÝý   %"/&47%62ôþ»

t		E

t	Ÿ¼C¼C     ¸ GÕ^   %'57Õ¹dºc²k9sk9  ¸ GÕ%   %'57Õ¹dd¹²k9s9k  GÕ%   %57Õ¹¹²ksk    +ÿô ô „   7'57ôfcfc-99::   +ÿô ô J   7'57ôfcfc-99::   Žÿô ô J   7?ôfc-9:    >ÿÃÂ
   %".'&67>32~ $	.:+*+:.	$ -#"'ð 7%%7    Zÿñ¦	   %".'&67>2l&2%$%2&
':'ón.  .n
   › ü2   62#"&6£ / *%  r ÊŽ4 	  #"&7632†@NN@
||!!-    ‘ ùn&   #".7>2l''5AOB	  œ ùc   62"œ’   š Ýe ý   %&'.76676d	*-0+	=:	ö

		    ! úÝ¼   %?6F]@LýŠ4
5    7 üÝ¥   %#?FRSLý{.5  qb ‘    462"qp ul™ 
  4>32"&u
~  * {Ûv 3  .4#0"1277>767">54&'&B
	q?`#	"!\V!		Z# S	      = ût   &7;2&76	
\
iF%;S  ''    ,ôd   %.'&'54&54>767>&'6'&Ø“	#`!	55#Z		5A%    ./Ó§   .'&'67676Àqw7'SIH!   ðÿß }   %'674.=6			
}2		$?   ÿáê }  )  &'.'&'6767>77&'4>5ú	4=Fi
Îo2
	
“					 ?$!	$@5  ! J äA   7#72&546l# g6¶F« !    c ¨ß1   %&'&'47>7>2"'&­	!)	ä
	.	%     UÿÀ«2   !"&5UV+KjK2þ¹     dÿÐœ2   !"&5d8*C^C2þ¾     ¨6 ¶   $42*¨  „ÿÕ ÿ K     6&6&>&6©8H$QY    æÿÒÿì 
  462#"æ		&     ƒÿÕx W     # ' + / 3 7 ; ? C G K V Z ^  $&'&7>&766&6.676&&6&6.6&&6&6&.&67".672&6&c

N
0W‹1ÒÊ

:r	ƒ‘	]*RFB

	<Jl

.2
B   d ªœ2   %!'!‹þê8ªˆ   € ª€2   %#'!rä ªˆ    u Š‹ Í   6462"uQtQQt    °Nµ   %#7++°   K é²Q 3  >2>.&&#.'"'".'"'.'&"'&Q2?J=*2
		   P ü°h   462"Pg’gg’-  -  &Nµ   "=7N+±ƒ‡  #ªN¼    &6N*¸  ª |V*  9  7'&7674.67>32105&76&'&70&462¿


'	
#%

%#'
  ËÿÅ5 µ $  %0&56'&'0"1&76&54.67625]Z<C.)@J<p     îw    42242î		w



    ÷\d   "'&6276#\   üin   #"4;2i    	K.s   &&'&6q

     · ¡IN %  1##"&5654&/67>?3;	
`		 !;*)		   í?‚   "=&‚9

9     íJ‰   "/5‰88    ×b,µ 	  462"&×%#  ÜN&    "&=& )'   Üˆ    #5     ÄÿÁA    )  3"&'&67>76223#&76>2 ÿ(9?3 þ'   ¥ [/  @  %<5&76.'&704&636''&7>74.7>321F		‚#


#%
  ËÿÅ7      %&76'4.'4"&7>./35jDeT
'T
#'\1    « •UN   1#654&/67>?3Er%(9	T>
	    í>‚   &=&‚9
9    íJ‰   "/5‰88    Õd+¸   #"'&5466	&
¶,
    ÜN&Ÿ 	  #"&=&

Ÿ(
'  ¿ÿÁD©  ! 1  4&#"'5&67>76223#&762762ô2	H3©!
	þ"	   íw    42242í
	w



    ø]n    #"4;2'#"4;2]  ¥ |[*  ;  7'&7676<67>3214565&76&'&70.632º
Œ
5	1
&&
1
5
  ÍÿÅ5   )  %&56'4&'4"&764./33fDT'
 
#'\1     ¯ •QN   #654&/67>?>n49L6	
	     ÀÿÁC·  ( 8  #*&'&'.7>3>&67>76223#&742762!*

GG2´4	þ
     ò9^ 	  3#".5ò	^   òE^   53òN
   ÜM'œ   "&54767>?6'&'"	‰	  íwƒ    "=42"=42õ!w   øWm    #"4;2'#"4;2		W  ÄÿÁAÿß  #  &67>76223#&76>2Ê?3?   ÿˆ'    3"&' ÿ(    ¿ÿÁDÿß  !  &67>76223#&762762ÄH3?	   Ü‚&©   4&#"'5ô2	©!
	   ÒV3·   #*&'&'.7>3>!*

´4	     ÀÿÁCÿß  #  &67>76223#&742762ÅG2?   îw    42242î		w



    íw    42242í
	w



    íwƒ    "=42"=42õ!w   ÏG9¹ 
  &7>5.±'1     ç4   '&765&#0'&>467:*

f

	    ÊT@Ç   +&'&6'&&'&764	4§#	 

   rÿÀÌ¦  $ 1  &76".'&6&76'"'4?3#+	
7Aö’
,þ^

   â uSK   %".'./&6'&>N	%".¢
43H     òÿÃ‚ w   7'73&/÷[GbS
I	
     ‹ÿÞT ‘   %7"/"/4&>7>>:		8	cc  ‰ n5   6&74>767> -,	
	:Q

&    ÄA1¸   .7>70°) #  Û+‹   '&76'54&#'".>&636!a
	

     rÿÀÌÊ " - :  '#&'6'.#"4&'.'&7>7676'"5&?3#,	4dAö¥%	
þ#
     Ú mQG   %'.#'.>5>O7)*	''.N=  òÿÃ‚ v   7'7&/÷[GbS	H
    ‰ÿÞV    %:1/#./6&67>


:
		8!bb!    ‚ s. ú   7&&5>767>7>û&	+ 
		
úG&     ÆD6¹   &7>	.±)-    á0Œ $  '&76.#'0.7>4>7:&	
	
	d
	
  rÿÀÌÁ  $ 1  6'.'.'&6676'"5&?3#32IAö¨,

	
þ6
     ã nRG   %6'&>Q7	*X+/$$,    Œ q2 þ   %.74>767>	'%			)þF	
(   )f¦   &76".'&6&+	
’
,     rÿÀÌ  
   76'"'4?3#qAö

    ¸N8Ê "  '#&'6'.#"4&'.'&7>76,	4¥%	
   rÿÀÌ  
   76'"5&?3#qAö
    ÇO>Á   6'.'.'&6632¨,

	
   qÿÀã @ 	  !546;2ãþŽ>&ª&>@2!--!    AÅx   2#"&"#"5454>3)', 	SBR!+'x"9$f5‘$9"    +ÿÀ | 1   7#>>
G1l     <  ± ¾ #  7>76/'.74>7>7a1

	

		ƒ)	'	     } ` ×  %  7"#.5&6"#.5&6W
	
š	"  ö ^ m 
  %"&=3+ h*,
     ö E^ „   753"öhCZ**  ´ Nžw 
  7462"&5´E`EDbDà?XX?=UU=     þ qT ’   %"'&6276#)q     ²Å… ,  7#&54>2#74&&54.#"&/&4˜
 22031 		#,
		²&-D#$D-
		   î Âf æ    7".=4>23".=462#ú[
Â     œ< «   %#"=4;2#6œ    rÿÀ „ *   73#r*j  dÿÀò 2 	  !546;2òþr2#ã$2@$22$   Ÿ · 	    753#"."&54>32"&462í|& 
÷077
Å

&     } ` ×  '  7"#.5&6"#.5&6W
	
š"  í 6i €   753"í|PO11  ± ?¤_   7462#".5±GeGG2!8!Ï;UUwT&C'  ï mg ¼    %"'&763276#7#".546;2#+*
 )
m:	   ¨ å­ $  2'"/"'0'0/'&5463+2!<')	
D? &;('!
$*C     ä Îr ù    7".=4623".=462#òl			Î		   €ÿÀò 2 	  !546;2òþŽ2#Ç$2@$22$   — \à¨   #".'&'.7>7>p79‘",?"Q K3´3/!&6   ÿùd y   %3"&5V$yU    9j €   %53"c>N22     ¹ @¹N "  #".54767>?'4'.'©";#0"

G!6";#"/+
	   ý mu «    %"'&763276#7#"4;29)	 )m/    ò Î€ ù    %".=4>322"&=462 rÎ		     î Âf æ    7".=4>23".=462#ú[
Â     ä Îr ù    7".=4623".=462#òl			Î		   ò Î€ ù    %".=4>322"&=462 rÎ		     T $Aw   ,  7462#".7"'&'&&76"'&"&76ˆ
K#$	U&44ï,	K
'	þö

	    “ÄW   $462" 9Q::QÌQ::Q9  ÄÿÀâ ü   "&5462Ó			@			þâ   ñ „ñf     2#"'#"&4632022654.#"Ó,/BB/)>’D1'"1#B]C4'i0#&1E    ¢µH    &546327#"s1";n1":r"1žn#0    û w g   753&û|>>166   ¢ ]Ð™   7#".'&'.767>3>f
@D 
*	E‘	#.TW1	$   ¿ B³C "  #"&54767>='4'.'¤!8!2H
L3!8!H2(
  Ç a«À   '  %#"4;2"'&763276#7"&546322632G*
 )p>h><<š9â#ZZ   õ É} ò    %"&=4622"&=4>32oÉ   û w g   753&û|>>166   © ]É‚    #".'&'4.4>7>37Iw?C!#*	]'<FW1	
	   ¿ A³B    "&54767>=7'.'¤HdH
+#41II1)
		   ÿ aw §    %#"4;2"'&763276#G*
 )š9    õ É} ò    $"&=462"&=462_É     Ð ‹0 Ë   753"&Ð`"¡**      ¿‚´   '.'&'.7>>4'';5 0	<­9%@A
&	"%    ¢ «ae $  .76767>=545.'W:M5		
35&5:&		   Ó Á/ ù    $&'&7676/&632 @	
Á
$
     ÄB%  !  "#&#"&763"'&#&&762æ	P	


   ÿü¼   !#*.'&'.©a`&	9	ry
C2,     <ÿ×‹7 "  %"&54&4>767>?56'.'w	bŠb	 \	*á%DccD'
		
  ¥ " k    $"'&63276'#"&46;2E


&



		4			     Ž ‡9 À    7".=46322"&=462œ	’		‡    ÿë @    $462"#!"&=463!2Ž"/!!/þq/!!/!*     Æ a> §    %#"4;2"'&763276#)	 )š9    ¼ ^°_ !  "&54767>=5&5.'¡HdH
C	 41IH2)
	  Ã ‹>\   7&'7&'77ØA	)'‹+Ÿ;	  ü ~t Ä    %#"4;2"'&763276#D)	 )¶8    ò æz    $"&=4632"&=462eæ    ¥ yëµ '  &'.5#".'&'.7>3>&'ß 2"	
0
<5)	&(;+7L%3	)  ¢ ]Ð™   #".'&'.7>7>f37@D!#*8 E‘G1TW1	$%6     ¿ B³C "  #"&54767>='45.'¤!8!2H
C3!8!H2(
   ÿ aw §    %#"4;2"'&763276#G*
 )š9    0á³ (  '.'&"&'4'4>7>?2Þ 9#? *62Re	
"     äÿô G    7&56'4>16'&'õ'ˆE0
(



(
    ôÿö|    %0'673#&:D
j
	   ûÿéw g   753'&'.û|		
077	   ž ]Ø˜   #*.'&'.7>3>n46‰ 
*<!M‘G1«1"$4   ¿ A³B    "&54767>='45.'¤HdH
C41II1)
		    ÿ aw §    %#"4;2"'&763276#G*
 )š9    ûÿùw g   753"û|'/RR  í ?i ‘ 	  753#"&í|([66    í ^i ©   753"í|Pw22  ‘ „ÊÀ   #".'&'.7>7>`37Š "*<!M¸H0¬1,%3  ± i¥j    "&54767>='4'.'–HeG	D+31IH2)
	   ñ ‰i Ï    %#"4;2"'&763276#8*
	)Á8    ç ño    7".=46322"&=462õmñ    èÿßŠ E    %6./6'&'4>|~D	N.!B	     òÿÀ€    #'3U9*Ž@U     ûÿûw g   %&=46;2"'&
A
		(		     ÿ aw §    $"'&763276'#"4;2dS
 )a-     ¹ÿÀ¹    7!!¹ ÿ G      r ‡   %53 r9@GG9   œ }×¸   #".'&'.7>3>l47‰ #*<!M±G1«1"$4     ½ a±b   "&54767>755&5.'¢HdH

C#41II1)

	   ý u Ç    %#"4;2"'&763276#E)	 )º9    ó é{    $"&=4>32"&=4>32eé   û w i   753"û|A366   Z×–   #".'&'.7>7>l47‰
*<!MŽG1«0,$4    ½ ?±@    #"&54767>755&5.'¢ 9!2H

C 3!8!H2(
	  ý ^u ¤    %#"4;2"'&763276#E)	 )—9    ó Æ{ ï    $"&=462"&=462eÆ     Â > g   753"Â|&0077  † BzC    "&54767>=5&5.'kHdH
C32HH2(
     > è   @  %4.''.'&'0.676'&7>74>7>21#		Ø
C
!"#
  WÿÆ É y %  7.?3&74.54&'0"1&764\l.6'.  .    ÿÀË½   '  #&76&?6#".'&'.7>7>²7	…	'O#,@

ù
(c	
    kÍ ù   %#/67>7;2µ	"q"9î	OO	     Y Ñ‡   3"&5Y.#  Y ó‡   %53"Y.	ý		
    * ù¶Œ   #".54767>=6'&'®) 	
h) 		     7ÿÀ ë½ 
  )  &>763#&76#".'&'4.7>7>N	K7	% O",@

ö
(c	     3 k ë ù   7>7;2#/6K9"q"î	OO	   x Ñ §   3"&5x/#    x ó §   753"x/	ý		
  J >äŒ  ? ^  #".54767>?65&''&7>74>7>1'"<'"76&'&'0.636Í) 	
=			Ï
h) 	þÎ!

#"  9ÿÆ« y %  %&54.54&'0"1&764'.?3¤l.  ..6   'ÿÀµÿÙ    #&76&?6²7	…	@

  Ë½   #".'&'.7>7>ŽO#,¹
(c	
  J ù ÕŒ   #".54767>?65&'Í) 	
h) 	     ð >ä è  >  %'&7>74>7>1'"<'"76&'&'0.636			Ï
C!

#"    •iR   %+6&7>iF	 $¤ N%F    íJL±   &7>+'¬"% $H‹   '&76.+0'&76&672>A	k	

     êXQ¸   6'.'.'&66G




,§&    -ÿüÚ­   #*.'&'.7>7>I/A!b_&	9	R-j¢6J,ry
C=*2G
   Yÿ×§7 "  %"&5<6767>?74'.'“bŠb
]	*á%DccD'
		
  Á ? k    $"'&63276'#"&46;2"D



'



		4				    9ÿ×Çy   %"&'.546;>232Ç[|[ZrZ¥!FPPF!!DWWD!    + ¯Õ¾ P  #'"54'#"&'#"&'''&'5.7&547&5467&54632>32>2632632Õ		 #  





		
  9ÿ×Ç|   %2"&'.5463>2¤[|[[z[Þ!!FPPF!!NPP    -aƒ¸   '.7>s
'®
!' =6~›   '&7>&#'".7>2q		q

		    Ç ŽÁ  .  +6'.'4.5>632+"&=46?‰	% ŽŽ 	
þçG	*     ½b   %#./>47>t
&!
	Ò#	   òbIº   "&7>1
%³ 
%  9D˜   '&7>&'#.>463:;	w		

   öhQÁ   6'.'.5&66I
	
&ª 	

    Ä_a   %#.+6&7>_
(Ú=	%

  Ç 9 ‡   753Çr9N99G    c x´   #".'&'.7>3>3(‰ #**L­	#+¬1")   „ ]x^   "&54767>?54'.'iHdH	C41IH2)

  Ä }< Ã    %#"4;2"'&763276#)	 )µ8    º åB    6"&=462"&=462Îdå  û w g   753"û|'/077  @ Eu ¤   &  %#"4;2"'&763276#'.'&676E)	 )É	—9	     ÿÀ{ ï   )  $"&=462"&=462#'.'&6?6eú.
Æþò{
     Â > g   753"Â|&0077  i \œy   #".'&'.67>76''ü/'‰ #*T!
	t¬1	)	    „ AxB !  #"&54767>7554'.'i 9!2H		C	3 8"H2)

	
    Ä a< §    %#"4;2"'&763276#)	 )™8    º ÉB ñ    6"&=462".=462Î^É     ÿò òJ   2'01&'6GGd	X8*""JdG5B-     @  ² ª    7"432742'#"432542Ž0
$     ‡  ¤ c   >4"432#"424"‡F
		
   ÿò J   201&'&54>¹%""*8X	.?JþÓB5#?.     „ ÊÆ   560.0$9=;DE6…O5s-YY  6 „ Æ   01&'&676 ((;=9$06%45$-s5O  KÿÀ ÓÿÙ 
   &>763#&76N	K7	@

  7 ë½   #".'&'4.7>7>® O",¹
(c	     7Ë½  *  #".'&'4.7>7>#".'&'.7>7>® O",ìO#,¹
(c	
(c	
  7eŽÁ   +6'.'4.5>6‰	% 	
     ý ^u ¤    %#"4;2"'&763276#E)	 )—9    õ É} ò    %"&=4622"&=4>32oÉ   õ É} ò    $"&=462"&=462_É     ÄB%  !  "#&#"&763"'&#&&762æ	P	


   Ž ‡9 À    7".=46322"&=462œ	’		‡   ò æz    $"&=4632"&=462eæ    ç ño    7".=46322"&=462õmñ    ó é{    $"&=4>32"&=4>32eé   ó Æ{ ï    $"&=462"&=462eÆ     º åB    6"&=462"&=462Îdå  º ÉB ñ    6"&=462".=462Î^É    @  ² ª    7"432742'#"432542Ž0
$     AÿðÄp   2#*.'.'.7>ó6S0(G.)
Zp4=!+H;!	%?/K     XÿÜ¦   %#"&'&767>?74'.'’	BW	 \
*¶‰KD'	
	    ³ $M y  $  %#".'&76276'#".546;2C

!

*/J





     ¹ yG ¤    7".=4622"&=462Çry				   ¹ yG ¤    7".=4622"&=462Çry				   -ÿîÛŸ   #*.'&'.7>7>IGKb_&	9	R-j”bBry
C=*2F     YÿÎ§) &  %#"&'5<6767>5774'.'§$@.WH

]	*r&7/SN'
	
	     Á  ? d     "'&63276'#"&46;2"D



'
		
5		     « kU •    7"&=4622"&=462¹k     ‡ ¤y À    %#"&46;2+"&46;2k++±++¤  « kU •    7"&=4622"&=462¹k     kÿé• F   %'#.'.73’		Š	.ÈF  kÿÑ• o (  %>"'".'&5467>2;6p	%
P
	%

	#`	!!

(	(     Ê 6 4 	  %".62# :

    9ÿÀÇÀ ! L  2/".'0/0''&54>>#"'".'.5467>6 Wp
!B9D"
/O¶`
,*Àh>T<787!;91þ¨	'		  )	/
  ½ C 9 	  %".62# $
H
$



    2 ÖÁ   #*.'&'.7>7>GEJ`]&	8	Q+h·`Aow
A;)0F
     \ÿö£N    %"&54&4>767>?'4'.'`†`	Z		)ùEBa`C
'
		   NÿÀ² { *  %>#"'".'.5467>6…`
,*h	'		  )	/
   ½ C 9   $".62*$
H



     å l ~   %#"4;2$		$	l  ¥ «[ â    6"&=462"&=4632¿†«     ¥ «[ â    6"&=462"&=4632¿†«     rÿÔ‰n   %#&'.76&54>2ƒ):,-.+)Ò:$%E'Q*A!"@   u ”y   %#"&".4>2‹
/-42!+/,/+Ò4""%DUD&&C     ‘ Fo$   6#"&'>ðe@--@F!?8OP9;     Ž Îr@   7>2."Ž	#(#
&(&Î
      ¹ ë    <62"64632"%6%%6÷.!$.A;5%%5&gA.$ .    d    ²    $462"%4>32#"&r);**;þÉ*!)*;));*k* )   d Á›œ +  7#454>2#514&&54&#"&/&6n
23/31 
		. ,
	


Á',G&'F-

     ‹ÿÀu     ;##‹êG£9   ÿÀg   	  !3##54.U+9     ÿÀu     !3#54. U9@     ‹ÿò0     !#5 	¥	  ÿò0     .'3"		   ÿòu     !3#& UE	     ÿÀ  2  "  %2+>321>#"&=3>32632Ç!¤#$ñ–#21 r      ÿÀ     $2#"'!"&462!4Ä#þd#V##     ÿë  y     53#%3#73#€€€€GGUjŽ9\     Î 2    753"&ÎdN33**    Ì U4 “   753"ÌhDi**  cÿÕ” p  2  7##"&'&54&464>32>&62&#""'&76Ä
x
R4+	- 		0)'   o „    ) 7  7676'&'&%5<&7>'476"'.7"7>146r
	í
Ó	Y		!!
E		>    d (” ¤ 	   %&/&5436L)/d0;5!¤$2:	3   t Œ     ?3&#"&54>2"&462Âr=]	ï>I[%ý	


    Ã Õ= ù    6"&=462"&=462ÕUÕ    UÿÀ? ] 
  7#54763Ü2ê 1]-NU    àÿÀ¹ N   %2#>7W&<Ù
N,"@4  àÿÀ=ÿÓ   67à5@    àÿÀ] \   %#>72]
"9%

*N0GQ/  àÿÀ*    %#6
9(  GÿÀ" N   7#5463¿	Û@%N1 @",  £ÿÀ" \   7#.'26Ü$

8&,\,NJ,   v tŽ   #".'&'.7>3>//1{%
&
E‡?,™+'%     Ü $ Œ   73"&5ÜHŒI     Ü R$ ~   753"ÜH.a  “ [mA   #"&54767>?54'.'`2-@<	.3A-$		     Ô * º    $"'&6276'#"=4;2#/    Ã Õ= ù    6"&=462"&=462ÕUÕ     ÿÀÓÀ "  !"&546;0Òþg!!Ö(!C!@!Ž!	]A"B*	     ÿÀ­À "  !"&546;0«þŽ!!fT*
M@!Ž!	
;2
//=	    % ­ö¨ -  76'>.'.5.'.5&'&2j
)	O:


.

    Ãó<   %4.'&>176&'25¥)Ä
	
   ÿÅí˜  #  72'.>7>76&'.'676Z-	e
	¢   Å üŒ   61'&#.67>'Ù
†
	  ÿâž    #  32"'&32#"&32"'&732#"'&ZC

L?		‚4-Ms&žY*'!% $!  eÿëÁ    %'&7>7§!&	    A Î  ø   %6'&32“"		ô  } Ð 	   %?'&6&'.76Œ$"
ð 	¡
	  ‚ >Ú ©   %676&'‚*U5 Œ Sç ˆ   %'ç.-ˆ5) TÿÙÔV    %'&7>7>?'5‰	

O&…!
	#(
@Ò!  s Pý ×   %7'>¨;
1"	®)	&
	$
  —?æ“ 
  '.7>Ü'&S)
	     % ¯ö¨ +  66'6'&'.'.5&'&2f(
Q! 
3
   “ ¯ø<   %&'&'76&'25¨
	*°		   ÿÅëš  *  72'.>7>76'&'4.54.#&76Z-	e¤	
	
 ¨ ®ù Â 	  %0:?¨	(%¹	    ¬_¼t   6'"4¯
p A Î¤ ü   %6"'&32“"		ô  } Ð 
   %?'"&6&'.76Œ$# 
ð ¢
	    TÿÙÔV    %'&7>7>?'5‰


O&…!	
@Ò!    % ¯ö¨ +  26'6'&'.'.5&'&2f(
Q! 
3
    ’ ¯ø<   %6&'.776&'25¨		*°		>  ÿÅvÿù   72'.>7>7Z-	   ”Bå”   '.7>Ö



%‹	 $ ¡àx   ''&767'.7>2Ô


Q		
	
 eÿëïœ  #  6'.'.54>6'&7>7ë	#?!&~þ	  TÿÙ¨ …   %'&7>7>7‰	

…!
@ Dí˜   6&'.'676¸
	–    ™>ëš   6'&'4.54.#&76¸˜	
	
  Eïœ   6'.'.54>6ë	#~    iÿë— 4   %#"&/>326?3632—`7L
"	
    Oÿþ² Ï  :  7/&474&767>76?>.'&5'&676­-	-	

Î
J
	.2	F´.		K
F   ¹ ùG•   "&=>7ä)*:*•**    ä 
  0#"&'5    Î$2K     #"4;23#"4;23"&'çC@D     fÿÂa $   &'.'.763666D |	`"=	5  ŸÿÂaÿö  &  &'&663'676760270#".'D "¾
F
=#	     fÿÂ_    713727675&'.'.i34 |	    ŸÿÂ™ $   &'&76767>2'&¼"`	| =5    œ ÜdÀ   2"&=46326$2;R;"À2#+);;)9"     – -j ë "  %2#".#'654&/4>3A#*#ë	!
			  ä Î$   3"&5ä8$9    ä ä$   "/5$98    Oÿþ² Ý  7  71/&474&767>?>.'&/&676²--ÜZ	.1	G	Â.	Z	G	1     Î2K 
   !  #"&5'7#"4;23#"4;23#"&'C@/   ²HN²   2/"'0'0'&5463 ",$
(&²*%
	)    – ,j ë   %2#"&/67/4>3A#,##
ë 5	K    ß Õ!,   3".5ßB,B  ß ë!5   ./5!	5BB     º ôFˆ   "&=F):)ˆN))N   Oÿþ² Ê  :  7/&474&767>76?6.'&5'&676­--	

ÈJ
	.2	A¯.		KA  ¸ öH   "&54767>?6'&'@*<*	
i++
	    Î2K      #"&/7#"4;2'#"4;23#"4;2 (%C   – -j ë "  %#".#'654&/>762j#*#-&-
	°	 			

   ¥_Â   #".'&'4.7>7> !R
.½
*f	
  è Î   3#"&5è0
1
   è é   753è0ó$$
    + Õ ä   6462"+}°}}°))    q Ž Ü   7!#"&"#"7454u
L<K
Üg7“   + ²ÕÀ   %&"46762n25hÚh52bè##Ø   ÿÀ UN   #'3G9@W77    @ d• 
  4632"$Y#    \ G‡   462"i   ÿÜ d 2 	  7#".542dV$    ÿÀÇ .   %2!54632>3v#.þG-.0#)	  ÇÿÎ9 \   73#"'Çr56\.``   Ç #9 a   753"ÇrJ7**  € *€S   %2#*1"&'#"&463>2i		
8I9
			9L:ß/;;/3BB3  Õ G+ h   %"'&6276# G    ï r €   %#"=4;2#r    Å = ´    7".=4623".=462#Ñ
[
     r ²† ë    7#&7>?"&'ò$"d9ë  ÿÀÇ 2   %2!54632>3r#2þG	 22$+	    ÅÿÀ: @   73#".7Çr	@	&&   t ŒA   %#"1"&'0#"&547>2w	@P@	
DRDÆ0BB0,OO     ¹ ™G Ä    6"&=462"&=4>32Íj™			     × \) Ÿ    %#"&46;2#"&=46;2>>Š		.    €ÿÎƒ ó j |  %#0###/+"'"".5".5.7"547"1".547&'&>2'2676>63&547&'.627&'"''7>6x		
	



	

	V#"Â

 	

	t			  Ç !9 e   753"ÇrJ7..  ~ =‚ ÿ   2#".'&'.'> Wq#	 ÿ2‹
)
&	    š 'f þ "  %#"&54767>75545.'Z/*<

9É+/<*"    Í H3 |    %#"4;2"'&763276##		#p(

    Ç ˜9 º    6"&=4>32".=4>32×	O˜     Å = ´    7".=4623".=462#Ñ
[
     ¹ ™G Ä    6"&=462"&=4>32Íj™			     Ç ˜9 º    6"&=4>32".=4>32×	O˜     âÿ¹#   %>7&6'B61	!	1tD ,fMA=+{    ÿ¹%   7&'&76Ù1Cu14	60: A{+=AE},)    d §œ    %2>'&4?'.54r


Ýë	1	&    €ÿÀ€  
  57777€$    $@GG     4 UÌ Ù  "  7'.'&366'47>A‡$
Â

'#:		



  c A›”   2#"&"#"545>3 ÿ)*"	SBR!*)”*>%f5‘%>*    Š Nt“   74632"&5ŠG.+DaEàAr 4@=UU=  d ²›” *  7#454632#54&&54.#"&/&6n
WDEW
		#,
			²&ZZZ[
		   dÿÀœ @    #5'6;357&+ €*+9€*+++GU++G   ¹ ÀG ë    $"&=4>32'"&=462?rÀ			   4 UÌ Ù  "  7'.'&366'47>A‡$
Â

'#:		



  n ™’¤   2#"'.546767OO7D(	/"#¤OnN7!"1   Çÿø9 £   73"&5Çr!0!£r""     Ç A9 À   %"/599Àrq     ‡ PyN   "&=yGdGN…2GG2…   { ú~[   !".5#{+A"[a	    Ï h1 ±    %#".5'730#".51	

0
€1   ½ ÕC ý    6".=462"&=4>32ÎgÕ  Çÿø9 £   73"&5Çr!0!£r!!     Ç F9 Š   753"ÇrJ]--  dÿÀœ @   %2!54&/6;2>?d	ÿ *+		@%++#			  g j›¡   #".'&'.7>3>236‡ "(
)L™F0©0+)     ˆ OxL    "&54767>75545#4.'jFcG

B	30HG1(

	
    Ë j5 ³ 
   %#"&/7#"4;25	B…	!    4 UÌ Ù  "  %6'47>%'.'&36¿$
þ„Â:		





'#     ¹ ÀG ë    $"&=4>32'"&=462?rÀ			   ½ ÕC ý    6".=462"&=4>32ÎgÕ  dÿÀœ @   %2!5'6;7dÿ *+99@G++GUU   ÿÎä    %>5.#6'.5>3&€J(+=!eåJ(+=!e)xþ¹@xþ¹@   À Å@ ë    6"&=462"&=4632#Ò

YÅ    Å c= ­  &  %#"=4;2#".5&763276	
	
 	
ž;    d ²œ    %>'&4?'.54r


Ýõ	0	&    Î Q3 ‡  &  7231"/05&6321#"/05&76?2Þ		L	‡    Õ X, €    7'&6372'&ê	9}    ë § ¼   %#"&46;2§		  Z <¥†   2"&"#"7<54>3 )."XFW ".*†#<'‚š'<#    [ <¦†   012#"&"#"&54> *." WFX	".)†#<'š9l'<#    ÄÿÎ< 2   %&5<<22H    Ë  5 l   753#"Ëj# .>>    Ë ;4 z   753"ËiJN,,  ƒ F{… 	  7462"&5ƒIfIIfIæB]]„^^B   [ ´¤œ /  7#454>32#74&&54&#"&/&34e
#,+74!

1".
		
´	('?))K0
!
		    +ÿùÕ %  2.'4.54> !;*#%
>%!+C+ +		+ +    d ™œ ù    %>'&4?'.54r
ÝÜ	1	%   € Ù€•   2.'..&54>×R5
	%**%	
•).$$.)     «ÿÖU    %6/+"'&=466;2B**)

   Ôÿæ-     &7'6'7Ý	;
  Ä J< ¼ % 1  $##"/"'"/05&7&/&76327'#"&46;2/		  		    Õ Q+ y    %72'&''&63$	v   ÿÎä '  2".'.5> -P2%%/		J(+=DD
				
x     Ä c< •   $".5&763276	
		 	c     Í Q3 ‡  &  7231"/05&632##"/05&76?2Ý
	L
‡    Õ X+ €    7'&>372'&é	9}     Ë ?5    753"ËjDU**  q a‚   #".'&'.7>3>//2~ &
'
G{A--
)&      Hp4    %#".54767>?54'.'b4)	=ú/3*%
	     í ™ ¥   %#"4;2™  Â Ä> ê    6"&=462"&=462Ó

W
Ä    dÿÎœ     %"&5'2.54676'.6<#2#'Ð"2IH¾	&&    Ä J<  %  $##"/"'"/05&7&/&76327/		    : É'¿ .  &'&'.67>567>?4>323632'TX		

!	)'

1:    d 6 ü   #654&/763åŠ4:%>%4  ‹H ÚU    42242‹5H    ¥- À:   3"&5¥:   cb   ".5#53#
–b	

;   k “ õ Ý   7632#'632°mÊ77  .ÿÁÿ »  (  %>&76767&'&'&7636™ N
4-C^02m	*CU
	9
	?!7$2/U	     .ÿÍì £ (  %>7'&'&'&76;267.767Œ
1E].2f#4	B8
 /-%(  {  ó H 	  7&'&6ç!FI% 
"   ³: ! d n  7#&74'&'&767>37%2'.'.7>7>?&7>21267>326326%3#"&5i=0"		þé5Ê3,	3Z9&
		
4     ˜ ÿ Í:   ./5Í:44  q õ–   "&=õ'7&–O&&O    ˜ Í    "&/Í      V j   2#6'&'&'676?2î	u
	= "2"    v » é É    7"'&676#"'&676ÕU»     fQ ú²   2'&/"'0'0''&'463°##'#²#	&   ³. " h p  7#&74'4.'&767676%2'.'.71>7>?&7>21267>326326%3"&5j	<0	!			þç5É
")X9#	
			
5  –  Ë; 
  "./5Ë

;55  n ó‰   "&=ó'7'}5''A    – Ë;    #"&5'73#"Ë      ‰H ØU    42242‰5H     ³) ! d  7#&74'&'&767>37%2'.'.7>7>?&7>21267>326326i=0"		Ê3,	3Z9&
		
    ” Ï;    #"./7#"4;2Ï
%"    N Öd    "=42"=42œ:N   k l õ   63/€'2n8^Y    — Ò Ì:   3"&5—5:4&&    — ÿ Ì   53"—5	"
     ^	¾   #".'&'.7>3>Î;K *º7]
   p ô   "&54767>576'&'ì'7&	$

m''
    ‹H ÚU    42242‹5H    ‰H ØU    42242‰5H    N Öd    "=42"=42œ:N   dÿëœ²     462"7#467%'34&'Ç!0!!0vŽœ Žœk**Uþä‡44þä‡4    Ç@9•   462"Ç!0!!0Y##   G Ÿ¹    7.54>'.>?s$A"%ø,)5		5)   € Þ€‡   2.'."&.54ÈpH".."‡B>>  rÿÀŽ    072##>&'&€99
K\ZGþ¹(hSN
	    Ž$r\   2.#"> +G) ,\#			  r ÝŽ‡  #  "&.546352.'. ,#T::T#,	=CrrC=

  9ÿÀÇ 2 
  !546;2Çþr@#È.@$@/    ÂÿÎ> g 
  753&Â|%077	P    Â 2> €   753"Â|IO11  Ž @ri 	  7462"&Ž?f?LLLë:DD:N]]   Â Ä> ç    7"&=4623".=462Î
a
Ä   î ’ ¤   %#"4;2				’  Ð f0 †   $"'&6276:*f     dÿëœ    ?#467%'34&'rŽœ Žœùþä‡44þä‡4   rÿÀ    072##>&'&€9:

K\ZGþ¹(hSN
	     G •¹    7.540>'&4?r"?	
	5õ1	*4X  € Þ€‡   2.'."&.54ÈpH		‡B>>     dÿëœ ù   %!46?ŽþÈùÇG‡44     9ÿÀÇ 2 	  !546;2Çþr2#ä#2@$77$   Àÿÿ< ^   753#".'À|!2,,
    À 9<    753"À|MN11  d Zž–   #".'&'.7>7>347‰ #*<!LŽG1«0,$4  „ ?x@   "&54767>7554'.'iHdH		C 32HH2(
	   Ä ^< ¤    %#"4;2"'&763276#)	 )—9    º ÆB ï    6"&=462"&=462ÎeÆ  G š¹ 	   7.540>'&4?r?	
	5ö.$#T    rÿÀ    072##>&'&€9:

M^\Gþ¹(hSN
	     Â Ä> ç    7"&=4623".=462Î
a
Ä   º ÆB ï    6"&=462"&=462ÎeÆ  Ç\9À   462"Ç!0!!0z))   U N«k   64632#"UdG.O..?#G¢uT&B'5&  e yœ• +  26'.=&'.#'#.546)>#)		+K•3;!(
)*#A%EZ  { ± ­ ú   6&>†À   S ±… ú   $.>g±   {ÿÀ†    .67632>€&*2@	     ¹ G N   %26?3".'53 (
$
		
  Õk+¤ 
  462#"Õ${    Î 92    753#"Îd!G:;    Î U2 “   753"ÎdCd//  ™ ^f† 
  7462"&5™<U<<V;ð>XX>>TT>     rÿûŽ 	  !  753".#".54>32#"&4632Â|	(
	
ù	

077Ã

'     õ5^   2"&=4ü^   † z ¨ 0  %##9".'"5.66'&6>76z
('
¡)
)   ‡ ?yy   74>2"&‡
2H2
=x=Ï!7447!<TT     ¿ ÐA ö    %#"&=46;2#"&=46;2#5oÐ    Ä m<    $"'&63276)R 	m    }ÿÀ• 
  ,  73#&7;#52>5&546;2.'«
dÇd
U%C- 3=:2!T9
,(64*)%    €€„    &'&6&567"€ %		#ßik	&O?&/)G
   ƒ8~•    "#"'"6;0676732x--<=ôV_^		!     ë'l   2#".=46
		l


     }ÿÀ€ 2   %1!&73232>'5rÿ 	&2T
  \ á§±   &546;2.'/'$W:)BO	L!D"84FD65/
     \¦›    &'&6&'67¦)0,þáˆŠ1eQ2-&5[
'  `8¤±    &#"'#6367>732œ:;$ONþÆ!. zi&
   æ"!|   32+"&=46ý


|	,		,	  ó5i   32+"&=4> i  ŸÿÒa 2   2>?3#".'53 	( 

!
   Ç 9 k   753Çr9.==    Ç 19 †   753#"Çr "K;9    c Yž•   #".'&'.7>3>347‰ #**LG1«1")   „ =x?   "&54767>?54'.'iHdH	C	 ÿ41II1)

    ê – £   %#"4;2–  º ÅB î    6"&=462".=462Î^Å    Ä ]< }   %"'&763276# )	 )]   GÿÀ¹ 2   %7!546;2>3žþŽ2#È	$2  VÿÀy     6#6%067>'&q
þï	
 

   ¾ »B Ó    7+"&46;2+"&46;2â`Ç

   î  ¥    $"=42"=42   t Œ è    6#"&4632"&54>32£		ïÌ



	     aÿÕ9 2    467>'&73'gfr99!
XGG    V 4¬k 6  %#"'&'#'&'#"&"#"'&5>545454>2¦JBR!+''&, Še	$9""9$    Î 2 e   753#"Îd!*;;    Î 82 w   753"Îd@M**  ‹ Btj   74632#"&5‹D1661DÔ>X(ERC&T>     Ô `*    %2'&"&763 ÿ    S ¥ž e  "##554&&54&#"''.'5''&54'&6#&547"1"'&723>702567&'&76362367632˜
		. 
	
			
	-6%	0(6


		& &			(   ¯ ¤Q å    7"&4?62'&462"è	
1				¶
	
	  9ÿÀÇ 2   %7!546;2>3¬
þr2#ä	$2  tÿûŒ 	     753"."&54>32#"&4632Â|	(
÷

077Ã



   ¯ÿáQ I 
   7.'4>6'./6½5
ˆ
	(E0 #)
)#		/  ë ¤ À    6"=42"=42ù¤    ’ ˜n ¼    7"'&66763"'&676Ä
		

m

˜

   RÿÕ ˜    467>'&Y!
     ‡ ?y_   7462#"&‡GdG(9&SÏ;UU;"E)\  ¦ »Z þ    6&4?62>2"/&¶
	
I

	»	
	
2
	
	    Ä j< Š   62'&#"'&7×R 	Š     f å¢­ D  "''&/"'0'&'0'&''&547'&7276767&'&1"76676—
<

"&"<"2;(
"	$
$
	

.    HÿÀˆ ò     /  6+"&46;2+"&46;26#6%067>'&Üz1
þÓ
é						þÿ

   Æÿá;    %&6?3?#0	'"		
	   ßÿÀ&    %2#>?&/66727	    g Ä§Š 	   - 7  676&''&'"76#"'47672'.'.56'"76üFÀ
ýs		\
(V	     aÿÕ9 2    467>'&73#".'gfr		
!
X
		   t ZŽv   #".'&'.7>3>..2|%
&
Eo@,š,(%     ‘ Bl)   %#".54767>?56'.'_A-3=ð.-A2$			   Ï `0    %2'&"&763 ÿ!	   ÿ÷© b   %.54632©1B-. E	'    Ñ § ]   %2".##"./&546326O%3,)

F]	     "ö‰ 7  %."&'.'4>7>3>22§M2$1", >	
	7

$	(/4

!     ! UÐi L a r ‡ –  7+&747.'"1"&66766767&7&'&676#"&16763676"'&7>.'&6#"'&%"'&7>'.7&76#"'."#"'&767ü$(	$	$&	#)	"–þÜ
		¶	
m·		
21 
	y	Ñ  _ Y§f  9 R ¤  767&766'&#"1&7&7676'&/.676"'&70"##"'&7&'&676"#"'#"1&56''&#"#"54'"'&#"'&767&'&667674'&66767&'&63h		 	
P		>

	
Ï
! 	*	

!

	
   kE† 
  ".5462.
k	     ÿíó V 
   %72&'%0'&7>3¨
!þµ(+'5	$62(   V 4û{   2&/&#>7-J/# „j82+{*6+("	@?_,    ÿÐÈ ° "  ?676&'.#"&0&*?'! !	\[#$-Z9

L
,	    V Zº|    .'&>73³	$$)-"8#('
	6,


-y	0M0#	  € #°   62".#"&/47>¹1-		¤ÀTSœdH     Uÿù	˜   676"&#"&/47>”,&#)$	oÀTSc#)   m. õƒ   &'67À5O"ƒ@     OÿÀºÁ  % 2 > L X g  #"'.>7>326"'&76"'&76"'&76"54'476"'&767"5&74542œ	"A1O	*OO+þÃ!©

þ#    ŸÿØ€´   #  2#"'&3226"'&542'"'&542w	
LSH>Im´þ$    ¯ÿìã¿ m  %.'&&'.'&'&'.3#'0&4>76461'6&676061'<676563'4&>763/6&676Ú	 	 	&,
	&
#*
	)&
	(
	 ?
	=–\yŒ	€Š",
m=   ±ÿïêÀ V  %.'&&'.'&5&'4.1'&76"6#'&76061'&76061'&76;/&76á	!		!&-
&$
*	*
'	)!A	=•\yŒŒƒŠ%*n>:   ÿÁ¸R p  %.'&'.'&'&'&/.67>"?'.676061'.67>&7'.67>?/.67>1§	
@"r		Gc
\l	kbj 	T
)N
!jA[	Vcc[	b 	M+     ÿÀ½U p  %.'&'.'0'&/.6762&6/0.467>061'.67>061'.7>?/0.67623«	(@rGb\kkdj!S
T	 !i
B	[Uc	d]b
N	   © 7= ¼ 
    %"/&66"/&6"/&6]\"K
KYY7))+I
I=<  ÿÄò« 3  './.".=&547>3.>7622«"B		++C<%*		LB@ž§

r66ÖÖÇ

%0%    Çy9¤   4>2"&Ç6$*$•   	 „ÿÕ¤z    + 7 D O Z e  "542'"'&676'"'&6376'"'"676'"'"676'"'&5676'"'43727"'&62"'&?6E?%D!KE
 F	SZZ_ˆ! +þq,-,2/		“R+	,    ÿÕçz    ( 3 > I U a m x … Ž ˜ ¦ ± ¼ Ç Ò Ý è ó ý
  "542"'&?6"'&?6""'&?6"&'&?6"'&?6"&'&?6""'&676'"'&672'"'&676#4"'&676#'"'&6767'&5432'"'&?2#5"'&7676#""/&6"/&6"#'&6"#'&6"/&6"#'&6"#'&6#'"63'"#&'"67"543676#+**++++++,,,t9'D%K!3	D;	FZZ_EDB?™ !*++**+++,+,,DE?B-+þq12201

,-,./33	
%,	+*12211

3
	-  9  Ç ®   %3#"&'356€G*)!®G)&A G yÇ\   %53G€yãã  öÿÓ³    %'X[b[ZbZ    YÇ‡ 	   2#54633#".'356«€G)  ‡ G)A     œ ²•   753œ€²ãã   œÿÀQÀ 
   "&472#5463Q5&$O€-%6$è  L  È   7'®ZbZÈ[aZ    9ÿù ¦ f 
  7"&47¦5%$%5$     œ ÛÇj      3#3#'3#3#G€€€€«€€€€1 ÿüÿ¼úº   /&72ÈþÔ

´

ºÈþÔ

´

    ÞÄ   &'.?6ú

N%



%O

   Ïê«   7.'.'7bNI(%"%(JO    ã ¤T    ( 3  $&767&?6'"'&5'42"&5&?6&542/"
,	"		

2Ú	+			
   Ã „< ü   7#7'.'&7ß
(			à
	(   ¡ a< ü   67.6767²`*Óa   dNÕÀ    462"d!/!!/p/!!/" r\Ç²    462"r##u$$ kUÎ¹    7Î<;'¹((< ’UÎ‘   '7Î<U(    k}¦¹   k;¹(    = ¤   "'&7>542G$)	$ ?
*    ÿÀ…E   '&4762"E=<		þñ8=		<þð    ÿÜh(    ''dd«de(dd«de    ÿñT<     ''7'@(ç)ò«<(ç(ñ«  1 ,    ''««    ÿÁÿ¿ g  62"'&'.'&'&'&"&47676'&'&7>76267>'.'&'&47>7676s,	(	.
!	"(,	(	.
!		5	(~,(	5		
	!
	(	,(	5		!
.	(	    Ï ÍŽ   ?Ï›c›ó›c›    ÿÖ§   .7>?0s(.A@²4OTL)?>8?YY<  ÿÁÅ     01"&47076.'2­>þ¾X? AÖ*1þÖ%5ª>=þ¾>X Aþ9+2þÕ5%   [  # 
    & * .  '.>&6"&4626"&462"&4626&64&6Ÿ# -0A-þ=



`¦Ž7<

‹u$   @ê«    .6¿)	$

V($	
     •ò ë   7!!äþëV      ò   2#"'&'&54œÈŽ!i=dG&K5&5     ;ä À    7&'!567&&ÈÀUU     kòk   6462"ŽÈŽŽÈ¶jKKjK    ) ‡×\   7462".)~²~:ctc:ò,>>,11     ) ä×\    "&5462&Q¢y~²~@5',>>,'  d ²G   " - 5  462#".4>32"&74>32"&4>32"&462"Ž*
	c
	9
Ž		%     \ K   7'+11K11    MÿÝ ‹    7'Z1111   sb±    '€11 11 £2áp   '°10p01 >'‰¿   >"'&#&6b	
´		"0C    ’ + ¼    7&'6'4'&16» !S#  yÿÂ ¼ 0 	  7"&4765¼.H6      9j !  '".'&"&47>23>'2iC0*8C0 *7#	0/#8*  @ Ûj<   "'4'4.'452i!
		
    ŒÿH    '"&#&".#&7>2367>ú	D/ +7%D/+7	B	FT%
     L ) Š g   7'Y11g11    s  è Æ    7'7'€11E01A10“11  Ñ a Ÿ   7'Þ11Ÿ11    È ¶ ô   7'Õ11ô10    ÷ ‡5 Å   %'11Å10   í Û+   'û0111   ¬Œy    %'7'*01?11ê11œ00    }»J   'Š11J00  2ÿòÎŽ   6462"2yªyyªkªyyªy    G ¹y   6462"Glšllšsšllšl    r 2ŽN   7''7'7' O0YY0OO0YY0ONY0OO0YY0OO0  ÷ Ls É   ?÷0L™0}    ·	3   %'	0Lç0|  Õ ”+ ë 
  7462#".Õ$À$    é ¨ ×   7462#".é
À
	  + Õ\      75!5!5!5!+ªþVªþVªþVªÜcd+  ÿëòÀ    !46;2!46;2!òþ	Ž	þGŽÇ+þdœ    N+²r 7 C   2"&5"&5"&5"&5"&=4624>324624624"&=462	¬r																			:				   N Ç² 5 A   2"&5"&5"&5"&5"&=4>324624624624"&=462
¬	
								;		   N d² « 9 E  %2"&5"&5"&5#"&5"&=46246246324624>"&=462	
		
	«							
								
		
G				     N  ² G C O  %2"&5"&5"&5#"&5"&=4>324>324>324>324>"&=462	
			
	G						
									G		      ÿÀ ÿë   2#!"&=463òþ		     ä2•   "&=462 2++    « •U@ 
  6462#"«2F2'#ÇG22#'     Ç À9   %#"&=46;2$HHÀ		  Ï\ øy   2'Ø	y     «ÿÀUN    3##"&53ä88UrªN9þ«þñ  8ÿ¾ ¥ {   '&?>†@?>…
’	  Õ†~½   .6?6rŒ	Œ 	     ÑR{¨   '&6d…
†	W11  | e îu   7"#&76'&7>32#"–

1	e
<6%!		#!:@	    ¹2‡   462"¹##K##   Ç@ y   462"ÇQ   ÕÿÀ 2   2+"54â2þÇ9   \N¤¹   2#54+"#5463r+ä+¹9999    ÿÀ W   #!".'54>37!2 þx
ˆ	     9 kÇ ‡   7!!9Žþr‡      ÿù  ë     5!!!!!! þ 9ŽþrŽþrëc9     9 Ç 2   7!!9Žþr2     d ²œ  #  7#"&=46;23#"&=46;2Žü²9999  d ²œ Î 
   %3+"&5%3+"&5d8ÿ 8Î    r ÀŽ ë    %3#%3#rÿ ë+++  ÿëû&   #'.'&=û	þê†&Š“
HŠ     ÿî ² Ô 	  73&'.'&5­	†ÔæH      vû„   62'.'&67<	‰
þî†}I’H  k ± Ó æ   6462"k,,Á    k ± Å Ø   7#"&541>¦"Ò	  Ì ä4 
  64632"Ì,ó     Ì ä&
   #"&5045>" -•K   462#".-,1

	  -‡=   #"&505>g"7	    š—   '76	0I0	J
'X(	  ÿÄ¤f   %"&47>??¤8;¦u;	/I-+2IH\I:u¥;
&X"%I2W  L \Õ à   %'76‡C	(X'	×7	0I0   Åÿ½   ! C D  #"#'0504137'&6373031211##'1&1<157'&43730:1210QIIËDD„³   ¹¤GÀ   #"&46;29rr¤     UÿÚŽ²    % 5  3#73#"&=462#"&=46;23#"&=46;2¹rÇ			'ì²þÇ	UU‚     ¹@G•    3#73#¹r•UUU   dÿëœN   !"&54>3!2€ÿ  +þÕ   € €2  !  %#"&=46;2#"&=46;2rääääÀV	V¹	     rÿÀŽÿÜ    4632#".4632"r 2   Ž •r$    #"4;2#"4;2kÖÖÖÖ€  Ž • «$    #"4;2#"4;2¤€   òN•   3#ò•G  «U\ 	  546;2«r++    UÿÀ«$   2+"&50763U "ä"
3$>XX!!l¿  ryCÀ   >;2+"r#VV+‡     xy@¤   6323+"x!<&@	V+#    «U   #"4;2Nœœ     Ç $9 À 
  %"&5467 9!0!ÀD !!2  UÿÀ    "'.#"&4632ò
7A		BL@
&  +ÿëd•   !!+9þÇ•þV    ÿÀŽÀ    !"&/463!22#!"&563rþªrþŽ‡+þr+  9 Uy   ) 9 G U a  !"&54>3!2!".5463!2!"&463!2!"&463!2!"&54>3!2!"&54>3!2!"&463!2Gÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  \		899999		    d  y  ! 3 E W i {  #"&=46;2#"&=46;2#"&=46;2#"&=4>;2#"&=46;2#"&=46;2#"&=4>;2õ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ\899999  ×  À  %  7.>7>"7.>?6Ü¤¼Þñ	•
ûÝÈ
   ÇÿÀ ÿù   !2#!"&46ä ÿ       ÿÀÇ‡   <62"…½……½E½……½…     < ¶    7"'.5>367>76Œ)$\+3!


T.;

-     K¼ â   7"'.>67>76t2%	,l*+\ 

$a-:K	5		8   „¤   7"'.>>76f,!

'fUV
	 \.;„
1

	4  
 ÿÓ|  . D R _ l x … “ ¡  7"'&>76"7"'&4>76#7"'&>76"7"'&76#"'&'&6"'&'&67"'&'&67"'&'&6%"'&76#"%"'&76"j		
;	
=	A
m

H

5

(		þ«2	¸3 	,,  3	3 	.	H"=
þë

	


	
(		£3%*
O 	
      ÿÀÂ   "  62"&42>54&">/&761E11E1S#1##Ý#G:3#|
g1E11E^##1#°#3:G#
|    Æ¹u   &'&'7674632² (	
	8/!(#4348(  ÿÖšT    7>7&''>7Bw5D‡p
U*;¸CXƒ)4 .l>q3J–     ˆÿñx2   %."&'.73&5462d;R;‡ UU 8OO8    « 7U è   %"&76&5267Q1H10*1*<<*44  YÿÉ ã S   .6†*&8)%4*8%)8&     sÿÜ É 2   .6É#"#     }ÿæ À )   .6À
    ÿÉ§ S   &>B%)8&*7&8)%8*   7ÿÜ 2   &>M"$"#   @ÿæƒ )   &>Q    ß ÷!   %"'&6676÷  n ’ [  -  7"'."&7>3"'&7>3'.ã	
!
9
     X B¬À  ) 1 9  7.7>?2&'&4?.462"6462"°

§&ì!/!!/¦!/!!/ù9&	',G¢/!!/""/!!/"   § k[  )  2.+46?&54&4632'"&4¹G˜@
$		+c9   €k€¤    462"6462"€¶{     Ž Ür² 
  4632"ŽC/4C^X?1,?    Ç@9\ 
   462#".462#"Ç		U	N    Â éE8 	  2#".>-' 8('   ë5   &6;2"'î#   – @j Ò  5 6  7"'&7654.1&5&763"'&5676'&6' ¾@	"#"#	G  	 Éù¹   $&4?62¼½É½¼  q 10 ï   7'&4?62"~

w

w
;

w

w
     ÿÀ% å   %'76ˆŒ‰C6I‰Œˆ6C    ÿÝ ê ª      ?777{{|{{	|{{/{{|	{{|{{  j * Ö   7'72ŒŠ‹ÖŠ‹  ~ > Å   ?~ƒ½ƒ      å ‚  &  7&546&'&'654&'67> 

«

 å49	#
	*6	)
6	6    'ÿùÙ   %".54632Ù.PdP.udBc4Ò4=1  1=4%    ‡òN   #"&54632ò#BU8t~‚p8Z>" ÿ!07A$+    Àã>   6462"…¼……¼å4%%4%    A ¿     ! )  7"'&'67#'&'&'"'&'3277676ò-# 3oS3 #-Œ	'
¦+$	*53)	"Q+
)	2`0'	    R Ê®)     %  676352&&'6772&#"676&òS3 #--# 3Þ&v)"	)35*	$•)A   d kUÀ   3#dññÀþ«     d kU   3#dññª    k ÇÀ 
  <62#":S:-*ÏddG.O-  ä kÇÀ 
  64632"äB/5C^Ïd.N/Fd     ÇÿÀ $   !.=Çÿ 	ª$>$!0¹  ¡ÿÎò²   #&'54&'3Ç+í)â&ªf7*VÇ2RU  + Î €\ 
  4>32"&+# );**   . ý €\ 
  >32..+2) 
 Õ \Ç     # ) 1 9 A G  #5323#"4;23#"4;23#"4;23#"4;#5323#"4;23#"4;23#"4;23#"4;ë211+Ü211+¹  d Ç y   $462"d))2**  € 2Ç y   $462"€G    2ò²    " - 5  462"4632"6462"462"462#".6462"dX		»Ép		Š
	Œy	Z     9 Ü Õ•     462"462"74>32"&9I

BI–		   + @ò² 
   ( 0  462#".4632"6462"462#"&462"r	
G¿»œ	
þØp   Gÿëœ @   $462"G####  Uÿùœ @   $462"U   )ÿÀØL   '&'&746?Î.5X‡5#L!0P5Y8#2*!   $ÿù×Á   >76'&76’%T$?9^TCC;5
I&:	8;H`V94=H     A 5²®   676'&76¥R=/('TI69.+IS
'',>VJ-+69   U «\ 
  462#".U$2#   d «\   462"d*   +$ Õ•    462"6462"+A##85##     ÿËü5   %'.'.'&704&656ûdC82&&$ùù·CDK
7!C    ÿõ !ÿ”   >'.'.'&C>B!/3<KdC82&&${
!:-DL7G   Cè‚     * 2 > L W _ k s { † ’ š ¢ ª ² ½ Å Í Õ  6462"462"&462"462"6462#"&462"4>32"&4>32#"&'&/632&462"4632"6462"462"&4632"34>32".462"462"&462"462"4>32"&$462"6462"462"å	³[[
	.	AO		@		MTi>…qV			k			8			;þM[Hï— :	
=					-			<*w.;	[			_		!^P>    ' 5+ ð    $20&/&'4>32Ã
	M	›     9ÿÀÇÀ   '''''''7777777Ç@      r Ž‡   # / ; G R  %#"&46;23#"&46;2#"&46;23#"&46;2!"&463!2#"&46;2462#".ŽŽl99xŽŽl99ÿ  99¿!0!!Î								9								U9		G!!/"     ÿÁ À   %#"'.547632 PHf{="(ROa3]#K¼_SI>#e5`TP*#M    Z «p   %#"'&547632«/(TG.1+6E>94ÀN.(/0EO,593  ’ Mp/   %#"&5462p3/??^AÀ5C0/@@     ¿ }H 	  $#"&4632H)''ß9))9(   Ì¿ "  6#&54656&6&6&4.'&>K&!L#¾"5b?:1h]	$  H •»ž   #.676.'&6¢ 	
	
V6H5-+ " = ›Ç,   %"'&7>76M
>
C!›I
N   .ÿÁÍz  +  %"'.'&6%#&'454>¿I?þç(("MD
Ä0$


+	µ9'
	^h/.M4)   ? O ³Y   67>#.>X	

	 # +.4I6     3 T ¾ æ   7"'.'&6®"C=
TN

I
    .  µ î   7"'&7>76"<	@I	*
%/     €ÿÀ€À *  #4&'476.54>7332>4&53€/58315' R
K%C
R 'EM""    “ ym ²    %#65#67_ÀÃÚ²     €ÿÀ€ ô   '  %2>7&".'3#4&'4#4>7+˜
N,(31 /5$!Î*z$A$%C



K3%    ÿù N   %+".=7! \f[gZvvÁcLNcq   ' ¶Ú;    7'653&53Bj¸	5EJ;:KF6   2 ^ 	  !5463!2 þÙ2     ÿù  Ì  #  7#".=0%+>7&4167533%gZÌ]f$42¾.E)Nc
cL)E.

     ÿÎ ²   ''5463!2¹GÇ99ÇGVkþœ9––9d9    1 ú¹‡    !!3767GrþŽ}
57Y‡%3D    ò ?Ïk    %.'3'3'Ï75
Y×ú3%DSþÔ%%      yGy   %#5326=3(y»»(    ÿÈx·   &7>&54äb2
:2·Xo6U5-
YR DW5     þ v   '&74.>	t    'v   '4.46
	t"     ¥ vfI   #">'.'#.7>7%,*	
.I6)5 &4	'/<   £ xfI   #&>'.''&767>7%,2	
.I6)4$4
	,!'1    ÿÇù¹   762"&4*#aE#þú#aE#Ea#þú#Ea    1ÿñÏ    " - ; F N V a i q  6462"462#"462"&462"462#"4632#".>#.462"462"'462#".462"462"1!"2"!Š		*!1)"L"!„!6	-"‹,!     a !Ÿ_   ?a˜¦˜Ç˜¦˜    x ºI 	  6"'&?6‘

m

nº

m

n   2ÿÃ« ù 9  %#"'#".'&'./73276'&?&'7417œ	
4!%

98%4$$" Õ/C/!@@(
*G4
	      Ÿ ©   #  6&>%'6?6&'7'&?>&!$/$X+Ô#)¢#/#/.)));2:))-&     ¼ä¿   !  6&>$.?>.?>/	l		¾¬*		)*)	)  DÿÇ´U   64>32#".D2D%Ll1U2%D2fQI6tS6\5 5    &ÿÇ•U   74>32"&&1D%Mkk™kŽ)I6t¥uu  ê ýÏD   %"'.'6767’3':	ý

	*  ÿÇwU   74>32#".1D&LllL2U1Ž)I6t¥u5\     5ÿú9#   6462"5LlLLlQ{WW{W   Š/ù¹     "&54>32&"265Ú0 7/68$$  ÿõ^¶   %?þÉUÀU    \ 7¥ 
  %"'&6$	´µhþ™      ¹Mb 
  7"'&7%6,þó¹ˆ‡ %ÿÉíL   "'&67676'&7676…4$ 0-6+'!%
761	&%CN@"5B924(   VÿÊo   ( 4  %6&'&76''&6>'&7>6.7.76&À$#	$"(
	,(,,**#Fk	
	f!#!$   ÿì ³6 
  "'&6ªšš9þÈ  7ÿì ³_ 
  "'&6ªjjcþ  ¹ ! Ó 8   7&76Ñ+

  ¾ % Î 4   7&76Í,  ¤ ' ¾ >   7&76¼1

  © + º :   7&76¸2  f Ò×À    767&7&f×VM'‘¢<ˆz      è­Á   %.'76W+c,<¡2è	¡/"   ‚ÿì ²‰   "5&6ª  Žþr   ÿìÞ ± 
  "'&7%6ª+þÖ³´   ÿìÌ ï 
  "'&7%6ª	þèññ   ÿì¦; 
  "'&76ªòñ>þÂ   ŸüÂ   %".'.<>Ù	#'4Oz-9U2AX'	Ÿ
"
223+#	  ƒÿ¿ â 7 8  7'0''&6&'.67&7'4>76670612;63676á

	

$   –ÿî Ö Q    7.76'&6Ï%  -W

  ¥ ( Ø P   6.'&&'&6¹	P      9Ãµ $  <.767&7>72À =|RA6*#\&B5&<KZ.!-j	Ip7:*(BF"E>1  "ÿÏÍY    &'4.#.>Ê
+22Š 6 	20*	.˜‚    #ÿÝÎ` !  &'4.#.7>Ê!
+22‰¢	20*	 jm`    ` ËZ    767&&'7`	B8Cþù&
     1ÿñÐ 	  76.4vþŠvþŠ  ; ¾†   '±þŠ†þŠ    ÿÊõ³    /76/&'&?ë

		þc

	œ

	þb
	  ÿÚå®    '7'&'¾'	þV*	z(	þn*
    ið²  ' <  %?62"/&4'?62"/&4?62"/&47›ë%%%%
·ì""‹%

%%%Ø     CÿÙºn  *  7'"&/7/67674?0>7>76.'s	¿u
**B 8

	
ã@DA    eÿâ  A   7''7'l	
A
   9 ¥ M   7'7'?'9		
     1 »êy  ,  '.'&632%>3#'6/µ#)#p 		
	
		n	
:  ä D —   ?'ä`z   e . ø ´   760547>ª!=:	³
:3     wd>   6462":S::S±S::S:    » ƒd=   7>7&'&#&Ã-%28Wå%.8%/7))    » w] ñ 
  %#"'&76R2WÂ#)7     ‰
 
 $  7676/''&'07'7'7 /	#!Ž	Ì-	k			  _È Ý   %6'"'.'&'&>3	M
96Ø	Z

      ¶Ãº    '&5467''7'7'7ç	C·
	.a	mQ 
   `ÿÕ q 8   7*&17'e
8  ¡ÿ÷ãn    0/7''?½





n7þó   ·àt   75'5'7·

	o
  ±ÿûÂ g   %7'7¶
g**    ^ÿýºÀ   5  %7'4>5%'/?1'&#7'7'7&>54?>µ	þê<
			X
"Œí		
		    Ã Ø V   %'7'Ç
	
	V"*     l Œ  !  7/&?6/&7''?'7†I			Ð
"#
A     „ m › Â 
  71'57'‰

	Â    j s  Â   7'7'7}
Â
'     Pÿâ k >   7/757'7j

:	
   ¶` á½   /7'½	
	
	½   ´R É´ 	  '7'7Á´(  £S ¹º   '7/?¹		
·	
    ÿÀN '   %/'#7'7'67065&7>=2>4

	&-	    'ÿÎN %   %1/7'.			%    ÿÁ8
 	 #  %'7'7'''&'07'7'71ù	&î			    ÿÂ+ "   %'7/?+		
      ± =   '?'76			  , ¤ >    7'7'3 ÿ%    dÿÎœ y   7!"&'.'d8
KHK
y‡

K"     Œÿùt Ú   %".7>2k	
2>2
	?H?¡;22;     ¹]GŽ   "./4762C
%Rs
	
     äNk    "=42"=42ò*N   å+:   "'&63276 +

   Ú t& ¶   %2'"'"=#.36542>$''     Ó “- í !  6&/&?'&?676/ñ

•


  Ó “- í $  %&'0/5"''&?347'76267&	

Õ


  ð ° Ñ 
  7462#".ð	

À

	    ” l Ú 	  %"&7>2^5n58>8¡:[[:   È @8 ¢   %'&'"='&76542>6
	!
!j
		::     d \œ •   7462#".d[‚[[A :*y
  o d‘ Ž 
  64632"oU<'C'Uxp
	     ‡ dy²   7&54>54&5462"‰2H2+˜m"6446,3	    ¡ d_¤    $"'&7>&'3&">2$H 	‚	n%.%d*0&!!&0*   « dU2   $"'&7>&'36 
r
 d$7!!7$    ¹G‹   "&547>?C*:*	=s**  h (˜X   6462"hY~YY~~YY~Y    i (vF  0 >  76'&'7'&&".'&'67>7676#"'67>676‘Ê	 %!
-.H	"|
Ë#	*#	Þ8    *ùV "  6&546776767676&JLc-BR&$Lc6/11Fk3:E$+,.$C )5    % EÙ< 2  77676767>7676'&'&6'&'&'&7676Z*)$,NB			>T]Q
¿
#8	

@&*	    ŽÿÜÇ ¤    62"&=4$2"&=4Ÿ¤ŽŽŽŽ     ¹2œ¤   3#¹ãã¤r  GÿÀr@      3#73#73#2"&=4ä89ý@¹¹¹¹¹€€  ŽÿÀÇÀ     $2"&=42#4$2#4X¨99•;þãþã     Ç2Ž¤    3#3#53ÇÇ¤rr    5 SÇ ¤   %2"&/763¶
+¯RRU¤	!	+    G @€2       3#3#%3#'3#73#ä99 99+92Öò     + Nœ y   %!".5463!2†þ»
	EN

	   ‚>¹   7"/&4?62y,µ,‘,µ,    ÿËõ3   "'&462õ"þì##þì  þÿÇù Â   %"/&462]Œ!.Œ!.²Œ.!Œ.!   , #”    7&?6&?6J

²

”

²	
Ä

²

Ï
	²

  · º	   %'7<;ö<;  ,ÿêÖ ”   #  %"&4?62"&4?62"&4?62PSOO    á ß± 	  7"/71ÅçÅ    i  ÿ–   %"'&4?62õ
þ¬S


Tþ­    " ¯–   '.76?62ý3'G ++2]2'6$>*3  ÿü † ¬5   .7$#"V82!8U"     ÿÈâ Þ   %#"&54>72>×
9M`)Kl'4H'v98(gE &    +× à   %#"&54632½HZ_MgkLHw )	1&'7(     )¹ Ä   %#"&54>32¢;P]
	IX+J, C:3&-!#   P gÍ Ô   %"'&7>76"`
/-g
,# | Áù¸   467"&|#
'/',W!&*.*))     L RÝ=    4>32"&462"˜	
	þ´9P99P ÿ
$${##    ÿÁ Ý     * 2  6462"462"6462"462"&462#"462"ˆøˆe		«			Éxxß¬   ¾ ~ÌŒ   '7ÌÜ2ötö2Ü  	ÿÉ Ô   .>jTBiSA7BiSAiT    'ÿç ÷ ·   .>rA
3RA
33RA
3RA    B ®m    7BXþ¨Xþ¨Wþ©Wþ¨  ÿÝ d $   72**  C  • U 	  6"/&6‡*

*

*

*

    Xò²   %.#"'.54>76 Õ
#N4B[vë#  #Ç      ˆä ê   6 .."'&&5ÈKjKêU

    9ÿÝÇ1      "3264ÇþrŽo°S%K;XS#TFI1?F’  «ÿÎU 	   #"&54>2262U'#2      \ò²   %4.".54>76 Õ)@T@)vë# 

 #Ç    \ò   24.".54 'HR1)@T@)1# 

 r    \ò Ü   624.".54ˆðz)@T@)Ü) 

 )  ¾ ¹Œ   %  $&'&>36.5462.7> ÿ
)
4	2#7bþœd	
þœ
cþ      ð ‡Œ    $&5&>36.5>	
3#
dþœ
	d
þ   ÿóý…    '.7>'&'&6?6¨22ä…%…%Cþ½
Dþ»    Ê0èN    462"Ê			9			   èn    " * 2 : L \ m  ‘ ¤ ´ É   462"4632"462"462"462"462"462"&5'46372"&5'46?2&5'46?2&/46376"&/4>376"&/4>?2&'5&6376&'5&>372Ê												þÆOOOONONONONOOOOO9			#		$		$$$$)		-		-		-		-		-		-		,		    A  ¡`  # 2 C S d  ".5'46376#&5'46372#&5'46?6&/46376#"&/46?6&'5&6376#O######>0]01\     ˆ  Ûv   # / ; G S _ k w ƒ   '5&?2#'5&3765'4?2#'5&376'5&?6#5'4376'5&?6#"'5&376'5&?6#"'5&?65'4?6#"'5&?2    !       c!!!!!!"!"!"  ÿþÿ¾ ö ¶   .767'7´GCQA*CGAQ    ? Ò 
  76.…613Ç631    Š LË‹ 	   * 5  6"'&?6'"'&?6"'&?6'"'&?6"'&?6¼  ‡ˆ)À	À?yxRØ×r  À	À-ˆ‡G×ØWxy   ƒ Eö¶ 
   7"'&?6"'&?6Œyxtçè¾èçyxy  Œ L Ñ   76.‘#
-1Ê
1-   ‘ Qì¬   'çây¬çty  é ©Ö   %.76ä^Y13ç¼1Y^2ç    ú ºÝ 	  %.76í1@@*/èÆ*@@10è    ù ¹Â   $.6…_-"[`,!æ_\!,`["    ÈÑ   $.76ŽX.1ÐöXSÐ1   ×Ã    .6šW,OX,WP,XO   ÿÀò¤   6462"ŽÈŽŽÈNÈŽŽÈŽ    ÿÜòÀ   74>32#"&AoBdŽAoBdŽÎBoAŽdApAŽ     y k‡\    %+"&46;2'46?#‡øøÿpqðv
¤44	   ¥[I 
  +"&67 NªI$    ˆx     +"4;xââ      9 Ç•   6462"9u¤uu¤|¥tt¥u    ˆxe 
  46?#ˆpqð&55	
   y _‡  %  #5##5##5##5&546;2+"&46;2q	Ã
øø	
	¡		   ˆ ùx     +"4;3#xââÄ¦¦  — ‰i   # /  7+"=4;2+"=4;2+"=4;2+"=4;2µ





´





x





<





˜rrrrrrr   q   '  %+"&46;25#5##5##5##5&546;2q	Ä		Ä	Ã
			}
			   € r€    $+"&46;2€	â		â‡			    2š   %7777#777'7'5/5'57#) "/¸*Y 7     2Wl   77777#777'7'5/5'H "c	þú1   *ÿÞ  õ 2 A  %'.'.'&76'&76&'&766'&7>ê:
		1	
0



‚
	+
	%*		  s Sº     %6676'&676~	 	

“*		    G @k Î     %4>32"&462#"462"N						À91   «²   /7P%9¦ Q9%¥     f ¾e   7'&6ö„ƒÉ„ƒ    ÂÿÑï þ    ?62"/&4'762"&4è?œ?œHH™?œ?œHH  Õ ©) ü   ?6&á00Á/0    ñÿáß Ï     $6/6/>/0	‰
	ŠH	Š
	‰
˜

—¼
‰		Š6	Š

‰3
—
—  ‹ 5±   '57-!±!	  r ]¥   7'   € k€  $  %2+"&=46372+"&=4>3räää•r	   Ž kr ò    73#53#Žääää€‡     €ÿù€y  "  2+"&=4632+"&=4>3räääy		þ«	     Žÿùrd    3#3#ŽäääädþÀ   dÿÎ œ²   "&546;2#r2	È		þ8	     €ÿÎ œ²   "&5462”2	È		þ8 dÿÎ²   "&546;2#r		2	È		þ8	   ÿÎ²   "&5462•2	È		þ8     eÿÎ–: 0  >'&6#"&'&67>&'67A' 
'6 *J3…%#01#		#*-&/C     ¤$2² 
   "264.2"&4ë

,;**;)Ž		$*;));     rÿá{, $  7676&'&7>7ÑI(7
*1E5,&$T	3-<O0
   ±  z,    7&'6?.'7676Þ	
	
7C(7)þØH=    pÿÎ„—  #  "1>7605.>7#"&'&'ë2"	H0*J2ŽþG"-&    Ä?r   45&74726k     Çks    4504505ÈGs    ² ˆŒ«    6'&'.'&7>6/4é!¥ª
þÿ  Uÿù«k   !"&5463!2œþÈ		8		U		þ«  r ŽN   !!rþäNþÇ   r ŽN   %!Žþä9    € $€@   !!€ ÿ @þä   § $€@   3#Y'€Y@MÏ  d œ\    !5!3ŽþÖ8þÖNþ¹G    d œ\    %!7!#œþÈ*Gþ¹9  dÿÎœ² 1 S  3!2>?67>:3676:34632>26!&/"&5"'./'.#5&vþÈ
		þï8&t		
þ‚   ‡ÿÛy© M –  "4;676632&76762632632+"54'&&5&#"&716'&"1'&#"'&#2+'#"'"&'1#"''&'#"4;276327632674'&6327476743Œ

		Ø



	e		þ



		   ÿÀ À   !"&5463!2òþä@äþ  ÿÀ ¼ 	  "'#ø@øþ    ÿÜä¤   !!Èþ8¤þ8   ÿÜä¤   !È$È   òÿÜ¤   3#ò¤þ8      ²ä Î   75!È²  Ž Nù¹   6&47628þÈN8þÈ   ˜ X þ ¿   7'&4?62"Õ78_77    *ÿë ä ¥   7>*![>!€">[!  ÿÉ ï ¯    '&?67/&7ª˜



—
;

A-—



—


’A
	    9 \ ¤ —   7'>U5$\   ÿÐñ± 
     76>&Ôållh±/Â[Z­S  H î¯     7>>&à
5~"C0+M¡*~;q[   ‡ÿ×ó³  ;  .&7676&#"'.'&4>?676767<#)B-e)G
	=!/"

0B	'0{ ?	þ­
	(
	
@*
=W+'
     £ e]   61632767>_IQ)†E
DV&œ    ÿ×øª / 7 A K U  "'.767&7>?&7>67>'&'776'767&7676'7"67&'&!,
70ŒM%P
-%3,	46G>,mE>?"6>
)!./ C!
 ,/]?$$	\/,RB@C•'-?   \ N    $ ,  7&'774'&'67767&'67"&'2x 
d	…
	
n	"
^	/½
	d	 ! ÿí÷›   & 4 A N [ h u ƒ   ª · Ä Ð Ý ê ÷*7DR_ly†“ ­  "'&76'&"7"'&76'&"7"#&&767"'&"'4327"'&'&67"'&'&67"'&'&67"'&'&67"#&&36'"'&7632#""7"'&7676'"'&7676'"'&76"'"'&'&6'0#&'&6"#&676"'&7676""'&7676"'&7676"'&7676""'&676""'&'&6"'&'&6'"'&76767"'&76727"'&"5&367"'&'&67"'&'&67"'&'&67"'&'"637"#&"&367"1&&76'"'&76'&0Ax(&
!	/E-

%
6
_E+96+!K 
 &	(
!8

z/
	*
$	]8	,	
S"    +ÿÎÕ@   !"./+ªD).)
@þ¶	
	     @äy   !!Èþ8y9    äx   462"†¼††¼(/!!/!   @ä² 
  462#"†¼†=i>^a/""    +NÕ®   4632#"+}X:b99b:Xj(     	 H÷R   %"&5462265462 f‘€¶€BrH”h		]‚‚]		EsD     — @i y   %"&5462>i=X='('m    " ¿   !'aŸRþý«¿î¯ø   ± 1    %#73 ï#/1Ý      1 ú   7'3±˜»&1Ý;     ¼ l |   %73254'767l°9eO
4  ú ] l   642ú]   ¼ÿÍo e    7#"'75264&#57&#"327à
³

°		6
(I

O

  þ 1< O   6462"þ9		     a¿   !73þülõ¥   _ÿÀ v   3#_þ¿     ? ÷ L   273#"'&=4632j
	 
"	  S ç°   7SP


P`P


Q    X ì þ’     '  &?6&?6&?6&?6&?6¨A
A
B
B
B
B
B
B
AB
ƒA
A
A
A
A
A
AA
B
B
   ›ÿÐÏ   "/&462Ïü	û û		û  + Á Þt   6"/&?6Þ	x



yÑy



y     GÿÎ¹N   !!GrþŽNþ€   G Ü¹À   462#"Glšl"-9M^CC/#    <ÿÏ Œ +   &76763V .%# <  d ùœ¤   462"d[‚[[‚+G22G2   dÿÎœ@   !!d8þÈ@þŽ   d ëœ•   462#"d[‚[*: AF22#   œ dk   # =  %#"=4;2#"=4;2#"=4;2>32.'&632\¸¸2dd#¸¸d


y99G
++     œ d\    0  %#"=4;2#"4;2#"4;2>32&'&'&632\¸¸2dd#¸¸d
,y999
#!"    ÿÀ ÿÜ   >2„°€@
    ÿÎ \    .'6V/$     ÿÌ g N   .7Q'0);<5     ÕÿÎ²   +"&546;2						¸		     G •«•   %!"&=463!2ŽþÖ*•ÇÇ    € ùr\   ,  7#"&46;23#"&46;2'#"&46;2òddn9		9ÖÖ	ùG    Õ y •   73#ÕGG•   ÿÒò” 2  63232"/&#"&547>?&7>?«9$9	$&Gd
/*…==@=.  ÿìä 5  63236"/&#".547>?.7>?°4$2	"$C^*€	9
:+#:+	   + Ö 6  63232./&#"&547>?.7>?¶0!/
2&=;'t2#=
:	2&    8 Ö ’   Y9<   ÿÝ› ‡  9  7262#&'.'&>7>7>76'.' 6¢B	S‡5#v		   D ‚¬{   - : J  >&#"'&7>?#&467>32&7>76.'#.'&76g+ J"%:¨+/	0)†K1	+'=5

& 7
m83/
!.	s
	

     ¬ 5œ6   ) 1  %.7662'"&'3.#&47>'.6'.6*Pr9
+q-C"Õ

·
   Ç À õ Û 
  7>'&Ì	Ô

  5ÿõ K 	   %62'&'&>'.t	3I?     °··  '  $"'&?54?6"'.#".54632G

=!

AhFG	1%ó

=; 

;AG(    :ÿÏâ·  ' 5 C  %"'&7>32#"&"/&='&6"'&?6"/&/&6	%1GE`@

!=

v

/011a110/°(CA;

 ;=

þØ

/_a00a_/   ŸÿÝb à   64632#"Ÿ9(--()kL"<G<"   +$   6&>T5IX5H+-\U-\U     ÷ +Û$   $.6MH6XH5FU\-U\-    ¹GGŽ    462#".74>32"&¹Uk

			  ¯ ÐRb   64632#"¯0!&!û=*"  Ð21“   462"Ð))N((   ÿÈé¾ P  %'.'.'.#.'.67>76'.'.7>&'&'&Í D $,	
11.?	W##+	 F(&/	"0}R3
	3%:( %LB1:;B)"	(.2(#(-

B(+
	%0F    4 8. "  7&76'./"#&5>7î#q8#÷	4(-		('/
"      ÿÐÚ¶  ! / ; M Y g { ‡ — ¥ · Ì ã  '&'767271#*1&'32767#&'232767'&'&'7'&'&'676763'&'6767'&'6767'0&'&'43670&'&'6327#"'&'&'6767&'0'&'&746103'&767"&'&767:1"&1&#01&'63&'&'&57461'&'0456767o	6
½
"	&
˜
	=





J
(	Y



H
		:			j



?9
	
0
T

M
	"

Fþc"	   k Á ú.   >'&.z/6,
&&EL   p à ó   7&.75632&© 8ñ	     F ä´  /  7#.6767'.676‘		Ç		ì!"*
"	!"*
"	   	ÿÕº´  0 F `  7'&7>&'&6"'&7>72#*#&'&>76'&7>&'&6		ƒ	2,+	-	

	
ñ	"
*"!p	"		©;&"
!2		
*"!    ,ÿÕö ç  ,  %'.'".636&76.'&6'"å	+'%	+,19	‚
	"	«	2!
"&;  gÿÞ˜•   ".547>32Y?(HPI(@/))/R*Z3oNNo3Z*&&  gÿÞ˜2   632".54€3ML4(HPI()		&53oNNo35     §RY•   4>2&#*#§	%2%	&1R	
    TÿÎ©  "  .54>327.54632æ=U	!.'U1wR'þù, Rw  ÿåm"  -  "'.>7>3"'&7>&'<>36ÔQ

-iY-
)S`*.rS!-Yi-     Ž ûr&   3#Žää&+  Z Á¦ 
   +  7676'&7>'"&"'&'&6'#.76[
 ].
ïR
.Õ"	,.	  4ÿÀ q   '&>7>546/=	*>F#

S)    ÿÀñ0  / F W j  &'&'&'4>?6%"767>76/!".'&'&6?6%"/&'&6723"'&?63676Ã*þXPE, %EPþß9-@	X	@-9>)S
#F¸	!	X40

04   °ÿÀP @   7 PPP0€€    ÿÀ` 	  7462"& 6T68P8€EKKESmm   «ÿëU   7462#".«1H1%‡DEED(>$I     À à@P   462"À&4&€''0    À ð@P 	  462"&À&4&&4&''  è@`   462"èI			   :	ÅÈ    "54.#"432"54>32#"ø.Q*/W11W/*Q.
 O:>U$$U>:O    lÿ¿™ g   73#"'./ó¦
!B8g	I  	  Y § Î    %#"'&'67!%4632#".‰(_`'þÈbE-N,bE-N,7##]


   *‰M²    &6?‰ 	   f oV¹ 
   6".'&&76&'&6'DNADJE¸þºWx]     ž ® í Ü    6"&462#"&562í
)Õ	$	     ¤ ˜ ó ®   6.542ó*¦	     ¢ Ù ë 	   7'.56''.76ë""ã
	


   V
 Úi     & 1  4647'&676''&676''&676''4>76Ú9%/				     Gc ku   &6k"p   T œM‹    # - 7 ; ? C G Q U Y  &6'&>76'&676'4>76''&676''&676&&6&6&6&7'&7>&&4&s

Ú%	
$$+
 %	
1#  	
+
$		
	
p©



>



	
	/#:	,
1
&
2	
'/#     o [¼‹ 	     '&7>&60#&7>76Œœ)43/0&‡

!þò7\63W4 ) ­s È 	  %6'.)%%½
  o ‘ ¨   762"o1À11À”   - Ær Ü 
  %4>".-	
Ï	    : Þx ó   %4>32"&:ç   B ïÍI     & 0  $6&6'6'.76'.76'.76'.B9$/

		

	õ!	   ºBÝQ    &6»"B  ß ¹Ói    ! % ) - 1 ; F P   &66'.76'.76'.>&6&6&676&'&76.'&76&'&»	
ó$$'!					G	
‰


	


	5'@/2(;		
				  “B¹k     66&“h&)     . r û ö   7.'"&54"ñ$E,":'r
$	     Œ m ç ¿     7'&>76''&676''&676æ	"	""!’				
		
    ! © ¼ ð 	     #  7'&676''&676&&6&6&6&º		
!

$
 	
È


	   Ü 2 ñ 	  7'&6762	ë   ÷ q`¦   %"'&676
+/	+)qP¶$!¯L    '     " , 0 4 8 < @  6&6'&676''&676'&6&&7'&7>&..2"&2"&2"8


		-	
	
	õE		
		'
*2

41-4.0**&    ) í V 	   2&'&6E	

    ’ e   %"74.'&6.#.e-'
#"'	     Á h † 	  %'.76""r
	
	     r } 	    & 0 : >  %'.76&"&647'4676''4676''&676''&676&&6
9/0	
				"ˆ	  
  jJ      # ' 1 5 9  6&6'&676''&676&&6&6&6&7'&7>&&4&Ÿ¿ 	*
$		
	
þ‘


		
	/#:
+
1
&
2

&.#     š iŸ 	    '&7>&2"7>76·„;((
 Ž1*    u‰ Ð 
    &  $4632"&6&6'6'.76'.9+.	
	
|	
"				   q º¬ Þ 	   %6'.76'.r
	Ð	
     Ö¿ ã   $42"Ö 
 ½\ ö 	   %&676&676$%('à	
	

	  é v¶ ü    $&66'.	ËÛ

W	
	     ø ‡} û     ! + 7  >&6'6.'&>76&'&76&'&76.'&ø&		©!;)D

);
			   x Ø ÿ     27#&7>x ÿ&&    Y 8§ ¨   6265"&=»ŠbbŠb:  :   
 ¥b Æ 	  %&676++¯


  ìtŸ 	   ) - 1 5 9  %&6765&>76'&6767&6766&6.6.6.6""		(,("ö
#	
	 

!
		   X™|¶    &6_™  ° ¥fÁ 	    * 4 >  &7>4>2#"&6'.6'.76'.74'"&Vœ



%%)) !Ÿ	»
	K


     áC¥ 
      $ (  6'.76'.>&6&6&6&6á
	
+

&
!(				

*1 0,     {ÿÎ‘«   6&'.546546÷BX0CF':¦:6þõ#/-þ$4   x Œ¦   &676.œ$.4+X
%'**($!K
<
   ‹|›   &676&ª(-&L	!#d*A
	2   * d ƒ   70'4'.'&76‚	*êw$    7 ê S 	  7&7>A
		ë  ¨l•  !  "'&7676'"7>76&'&	220(3
 5	!""d

  Ú:;t    "'&76767"7654&'"
	:	


)	
    ÊÿÕ~ Z    7?Êž&Y^i^    ÞÿÝZ û     ?'?Þ9{BGDUŽiŸZ2  &  Â Z   7.7623'&:		^./6     6 5ö² /  7&7>7>3&&'L
Vu09B

Iv4W&7\=RM2"  èÄL   '7&FO-T
<.   K 7õ² #  &'#4'56767&'6767>763óO&#vE	Te!#


	!',
ª@	hk{^#    ÿÇó²   #"'&7>7&'67672ò>yZV6//6V.	!KO²TUbKKKKc+8#:&  s ó ¬…   6.'&6©	,2     UÿÚ«   6&'&'.546’4ž0-.!#!OMB
* .    hÿç‡ à  . B W t ƒ  %"'&767>54""#&76'&'.'&6"'&76'.76'"'&76'&'&76"#.76.'.767"'&7636"

k/	

–	'						h	:!	G
y
	
@”     œÿù— Ó  ( =  7"'&676'&"'&76'&'&'&6767"'&'"'&676«
Ì
	
$„
‹±  Uÿ½¤   677'.546’.(€x,6-#%t($$3$-A# .    ¢ Ôb‰   7.67>0'&&·
! 
,	#ì)3E!     ÷ ¼¨g (  %.7>&'&67676726'&U
,#	
!	Æ		 #$     §X ô±   &'&76Ù

a		$    çeF±   67>676'.'ç
	„		
   ­'D®  ( 5 B  #"7>762'.7"'&'&67"'&7676"'&7676µ$
	
	'	'+
#W	
			     ‡ ô¢|    - 7  %"1&75>&'&67"'&763""#&&76"54'&6W
)ü
ô	== #?     a 'T ë  0  7"'&767>76""'&7676&'&76p


°	U%	
 .     — •i²   %#"'.#"#"'&?5462^	0	B¯	5	E¡¡    ™ •g Ü -  %241#"'.#"#"'&703327>232`0©	5	    ÿÑð_  +  &'&>'467>4'.76.¾	)B/		} ,1P$@HZF3 " @)S	 (-w7\3@"\  ÿéð¤  2 B R b r  &>'467>4.'.76.54.'"'&"&7632"'&"&7632"'&"&7632"'&"&7632¾	?.
		} ,17		

	

	

	

@HZ,)
" @)S	 (-w7\	
2F€	+	*	+	  ß ×¯Æ   $.>VM*EN)×M\6M\   $ÿÀ3 ï   73+"=05&7>7Šg!!ä1ïÚ		‡P     ÍÿÀÜ   1+"=4675v1ä!!*P‡		Ú   T × Æ 
  &>76&[%'E)ME:9'6\M5  0 $   %6545&4.'.'.7>	r
$	&,ÛPX
2
!	
    ‚  Ð  "  77>76&'&>7476&®3"
"
O LÂ6$	.*X


,!p!	!	  p²   ".'.7s	B6²9?     Í <²   /&7>77)+²86!    m x0 
   %4>32".462#"- !¡		y c!”W    .6u'

   ï Æ´r   64632"ï:)$:QøG3 $2   À ù   %4'632#"'41%7 Î	#     ï É5: 
  %.5475#Õ#4    bG 
  74>32"&";"4JJhKÕ4C_CC    › b ï 
  7467#<›E6H6i7H4?     Ó g ´   6.>ôg    ©ÿÓÕ ã   74>32#"&©(E)>X(E)>X[%>%P8%>%P     V f¤c & F j  7>7>32&'&>'.'>7>7632&&6'.%626'.'.'&>54&4ò
	

—

§

w
M	
   Ø2r¹   &676'&ä'&

%
2$R


     ,ÿÒUA   %.'.'&4>32U+20"
!^†ˆ'2'("35  m   «ÿÒÔA   74632&'.«†^!
"02+ˆLm  53"('2  ÿÎsN   %".54.>2c)>)	0F0	,;33;,2$(($2  ­ÿù?•    76'.'.7>¼56O3'k3;=K-7!  ÿìG   "'&7676767676)S#D
R&N&c,$0:')]  _ ^ ð   )  7"'&74#"/&&767"'&676k	U!'d'		*	b(		%   Ê ¡X ö    %"'&&767"#&&76!		$'/'	,¡4  C 5ž   ,  '&>7>6.'.'6.7>ê.EB2%<Î"'(#(0+˜D
#1?æ	2*ã#3#t.H,G 2 yÓ 
  %'.7>ÌH&= «2
-
	,  É ?¶ˆ   (  %'.'&6'6'&7>.'&542‚'
	&

		ò
þç     ÿäë¹ 
  6462#"ŠÂŠ?l@amÂŠŠa@l>     7 2 ø=    ' /  6462"&462"&4>32#"&64>32#"&462"ßˆ


1
		
HJ


:

U


[
\	


    ƒ 3§Š     * 2 :  $462"462"462"6462"&462#"462"6462"uU³æ#¨'

Ù0V


?ðšÒ		    = •M       6426424264242=õº¥©•×˜û    :¥a         42426426424242642êhbKnsU«u#o    1 ¿   # 9 Q i  767>767'67>767/>?>767/67>?>7'67>?>71$< A)Ð!8>Ì4F0%*
"M<*&	E
	?
+B%
E
	?*Ü'@:#Ó&=8;M"
)%/E4<!*
?	E	&ƒ!*?	
E	%    ÿÍö¶   %&'&'&'./&7676à:%`''5,!	£8&==-[&&/0)&'4   bÿç•C 	  % 4 =  7&/'.'&'./&'./.'b6B:$f#	0C
%07#r*
í+NF1w”	
	=>"	&Q4
‘	    & ¢Ž    ( 1  427"&547&546326&61&54632&54632&*2					T8	  eG {]   462"e		M

   # Ÿv        427462#".424264242H/a%=P	0(H/    zV Šf   42zV  5 ‹      4264242642="G;;Kf     /  Š        4264264242&42642/
 CEG'

	-

    ú Å«   '&7>7>U&
/#%1	$504   ÃÿÜÞ 7  "'&'&'&'&'&'.767676'&/&'&c.11.2	.	$?#!&&"		$' 	@    Ì 7q   7"'&767>45&>36ß	<%	)B7	/	!5    : @Ÿ «   %"/&6/"ZC	+@M4
   ¨š   6&'&7>o6 ‘	8+   ¨—   "'&7&767>5676¢6
	i8	

	     vj Š}   42vj  ( ­’ 1  '&54>3014547&46267&5463247&546321M
		6	
	
8   «ÿÏ  %   462"«ddd$$    «ÿù     7!!«Uþ«     Ç yä ² 
  64632"ÇS;'A'TvŠ     ä ŠÇ ²   74>32"&ä*/CC^Bž    • k :  #"'&'&5."'0#0"1'.?>0132>5454632ÿ	
$]]$
	kjj@@j@	
		    « k 
  4>32"&«.N.Gddd@$   ¹ ñ` 
  462#".¹\[[A*H*@	   Ç ãE   462"ÇTuSSu+   2D ÎŸ   6/2}ƒ†D9    µ!/Z   '&6&Lm$&6     ‹Hµ   6/‹ryžVK    i_ 
  "#"#"1'&6W	F[;/    «ÿÜ  2   462"«ddd$$    ÿò« + 	  %462"& 5A52G2

	   « 9   %3# ««92   $« N   $462" 2G22G0   +œ G   %4>32"&));*9     +• ;   %62"YY3   »ÿçï     '  76#&546%'"&'45&'&6"=42Ç$	#•	5vv5	¹
Š

Š   Ç kä ¤   74>32"&Ç&4'A'TvS‡
     €ÿär    462"4>32"&‡C^CC^J 8!2GGdG	     ÿê Û  + E  767"&'%6'.>?>7>".54632&'&#"7Ÿ0I	.D.9		
þ€&

	Ü	 
	¦4*	+   Uÿùœ   % 5462œþ¹^Œ]`ggHmm   ÿøæ9 ) 7 N V  %>743#"'#"'&'6=327%&'&#"&7>%#"&54732654&462"£
		 zt"
*rƒþ¦	!-2G1,?“!!@!(%$:68A„0
	

	&   Ú Çø Ñ   $42ÚÇ

  rÿÜŽ²    /  4632"7"&5462462"7".54632r	#<##r##<$	þn$$     +ÿÎÕ¤ ) 1 9 E  $"&=4632>54&#"#".54>32462"&462"7"&5462<# (!&B&)>$/,U##î##<##@9"";#/5,Br$$$$     	 5÷A  A  #".546;2+"&57>3237>32#"/#"/#".547J(	ˆ( 	
,+",/-

ºÓ
’’
Ï—››—
    ÿÀ À   463!2#!"&5!Ž!!þr!‡!!þr!!    Ü !$p    #"&5462462#"&5$

DM

mª	  + @Õ@    '!¹ŽªŽ@ÿ €€    « ‡U ù   73#«ªªùr   €ÿë€•    !7'!€ÿ €€ ŽþVŽ  Ç k9   3#Çrrª  € \d@   753€ä\ä      $œ1   ?P½PáP½P     ÿÀ À   463!2#!"&!Ž!!þr!Ž!!þr!!    œ \€@   %'3€ää\ä   d $j*   ?d¶P¶t¶P¶    œ @€$   #€ä$ä   d Hx\   7dPÄPPÄP   € @d$   #€ää$ä   ˆ Hœ\   ?ˆÄPÄ˜ÄPÄ    a œy   2+'73264&+5 A[[A9ff9);;)ry\\9UV9:S:9     d Ÿy   %5#"&46;#";5Ÿf9A[[Arr);;)9\U9\\9:S:9   | !„` G K  7#".546;76323763232+32+#"&54?##"&54?#"&46;7#Ä&

,
*
	&

,&

,
*
	&

,+**Ú		G
@G
@3	
G
@G
@3   œÿÀdÀ   +"&546;2d"V""V"!!Ž!!    € ¤Ç Ü   $+"&46;2ÇÌ   U «k   6462"UdŽddŽyŽddŽd    Ž Nr2   6462"ŽC^CC^‘^CC^C    ò ‡[2   %"/&=462GG@‡+d		\&   rÿÜŽ¤ !  $!4>7>54.'.5'!+&
þä&

&Ì!G#M
!G#M!  ŽÿÜr$    %2#47>3265&54.'3+!ä!(¨k29+
! %!
   UÿÀ«À    #!"&463!2#!"&463!2«þäþä¶       2   %#!"&=463!2 þ8È2ã    $ 2Ü  $ 4 F W g w ‡ ˜ « ¾ Î Þ î þ 0>JXgv„’   7+".=46;2+"&=46;2+"&=46;2+".=46;2+"&=46;2+"&=46;2+"&=46;2+"&=46;2+".=46;2+"&=4>;2+"&=4>;2+"&=46;2+"&=46;2+"&=46;2+"&=46;2+".=46;2+"&=46;2+"&=46;2$+".546;2+"&46;2+"&46;2+"&46;26+".546;2+"&46;2+"&46;2+"&46;2N9		9		9	9	9		9		8þ		9	8999		9		þÎ			G	ª		ª	þêA		A		9		9	B	9	8²GG¾   U $«k    75!!UV««þª$GGGÇ  r $«\   %55««ŽŽÀœ‚‚8‚‚    U $Ž\   ?7'U«ŽŽÀœ‚‚þÈ‚‚     d 2œk   #!7# œ‚‚þÈ‚‚k«ŽŽ   d œN   %'3'!3 œ‚‚8‚‚«ŽŽ    G $¹\  
  %55;#€«ŽŽ«99Àœ‚‚8‚‚þÈ     G $¹\  
  ?7'+3€«ŽŽ«99Àœ‚‚þÈ‚‚8  U $«\   
  3#3#U¹¹99d99\œœ8þÈ8þÈ   äMÀ   #".=462j9    lÿ¾˜ í   "'.762&/ƒll@þþÛÛ   ( žÛ‰   $"/&676Æ

¼»
ÅžÉ

¾¾

É      ÿÇä‘    "&462ä…»„„»¾††¾†  X  «X 
  %#"&462«-N.FddŒc¬.P.edd     ®     2'$2&4ˆF2xþÃFx®2GzzG   ò ¤U@   %#"&=463232GG9¤€r  äNy   3#ä88y+  «Á²    2+"&463'.>9rÊ		²–   dÿùœ2   6462"d[‚[[‚U\\\    9ÿÎÇ\ 
   2#".54264&"®¤uuR6\5†‚[[‚[\t¥u6[6Sï\\\  r Ž$     + 6 C K  %#".546;2'4>32"&462"'4>32"&4632"&4632"6462"€ŽŽ”^	«	ÝÍ		‡		Ž	ÿ 		ä		«]	^	   — 2" ¸ 	  6"'&?6±

c

c2

d

d   ÿÀòÀ   2#!"&=#4œÈŽþVÀŽdòòd    +ÿùÕ¤     "264$2"&4Mšllšlþï°}}°}‡l™mm™‰~°}}°   U $«y   + 7 ? G O W  #".=462".=462'2+".54>3!2+"&463/&6#6&75&6'3&?6œ8		




ä









ä




k	þÏ–v








Ð









  } ¼ 	  6&76/ttö12  Ž r¤   3"54.'.= r¤9+#"¹¹"#   œ $d\    3#3#HH€HH\þÈ8þÈ   d $œ\   !!d8þÈ\þÈ   d $œ\   6462"d[‚[[‚‚[[‚[    œ \d$   %+"&=46;2d	ª		ª	k		ª		  r $«\   r9þÇ\œœ    U $Ž\   %ŽþÇ\þÈœ    d $œ\   %#!"&5463!2œÿ  @     ÿÀ À  " 5 E [ s † ›  4>32"&'52+".4673!2+".54>;7"/.62./.7>7'.>?>"&'&4?>4>32"&'5ä 	
þr
		f>			
		þÁ			T	¤		
«|þÂ		î	
		þÁ	!
	    G ‡ä¤ !  2"&547#"'#"&4632>326€);;R;-#22#.$2N:S::*#2G2$2$      ÿù    %2#!"&4632>326326¹**þ¹/CC/
0 2&
‡*:*C^B"'%    €ÿÎ+¤ &  74622>75462#".=€
#+		j		þ–
  + ² ‡   2#"./!#"&=46@l?þ‰‡1V2Ml   d ²Ç‡   2"./##"&'546åaR/+/‡1V2
2V    Ç ²d‡   2+"&/46+$)‡2C'Pi    rÿÀŽ Ü 
  74>32"&r&A';SSvSN'A&SvSS    « ÎUy   4632"«2# 2F G2 $2  ¹NGÀ   +"&=46;2GVVk9     œNdk    +".546;2d	ª	ªb		     « NU ë   %2++"&=&5463@		\		ëd		e	  Ç 9@    "  $"&462"&462#"&4622"&462"	U		q		P			      ò$    "&462	   ‡ç  7  7#"/"'&?'&6'&>76%#"/"'&?'&>76”
=


w"3

3


¢	

)
3

41
!

    ÷² # G k  ³ ×  #"/"=#"'&?'&65427#"/"=#"'&?'&65427#"/"=#"'&?'&65427%#"/"=#"'&?'&654276#"/"=#"'&?'&65427#"/"=#"'&?'&654276‹3•1¨



`



í

		

		ê
		

		Æ	

	


   ÿÁóÅ   2.'&>76ß	
2%$
4(0^>ž¿
34=/Q)-	#cgg'd     N MŒy   7>7#&'.54>7ìv-X#;&0W*þY'¬Q!HT9  N M   7&'.5>Ë,
K4[6(
"(X    1ÿÙ Ç o   62"&4]>,,>,o,>,,>      Ü ‡ "  "&547&""&545054>2 (?'AdA'?("7^z^7"

     ÿù \ 1  %#!"&54>767>35462354622ñ#þr#	0
V/0y		
00

	Q)R  	 i y— ù     ( 3 ; G R `  $"&462"&54>32#"&4632"&462"&4632&"&462".5462#"&462#"&46325@f
	£r&h'Ñ
ò



$








F


	   Q ³n    #"/.>76”­
fG›nþõ
^

Cï ÿý é¿    #  7.7.'7.7.°&$	#i&$	#	¡'#	#	…&$	#	€?>">>	"9?>"E?>"     Žó¢    "&54632>.é	ŽÈŽ‹g07/.0,78OO86B	4	    ÎDÀ  3  $"'&76'.#"&4632&"'&76'.'"&4632"0/		Y0.		

Î0F		**! 
0E	#&!!

  ÿ·òÀ :  %.''.7.54676&7>.>3232632>ÌBE9D !E8-$
7=2		$'
+-!@/%%¯+	#^D$n7 "
'	#E2'(JF?  &   dÿÎˆ ó   %0'5754746337€K&%Ž93$²	l67™;	4     d kkŠ 	  " =  #54>32#54>#32+".=4601#"&=47632k9A9«m		m®®º;;*	U
'  dÿÀ¤ ² 0  7276767;25476376+"&46;2#"&'3"
$"Nr	X<Ed\	"3835WaF     s  Œ` '  %"&="&="&=.5462ŒPyPÒ''AMM     • · î   6462"•%%Ñ%%    å yj  %  %".4>32#"'0#0"1#"&54762j Y
		
äc
		
	    ÿÀÿÀ  2 H b  7#"&'.54632677&'67&54632#"'%"&5467>32&'2#"&547&'654'676œ
ð

þ“
‹
@	

Õ"			"
ä	
	  U «V   1  727"'&'7#4&461>7674.'7#4Ù*7&W&C	j!’	7")j[É3*–\G*     ž ka$  # /  710.50612127632&#"&676325&·"		T#		¿(!S	†(.    M /°t @ g ™  %27"#*1"'0"1&'&#&'&'&'.#""##0"1"#"#"'&'732654'727'"&5&6725&7>70#&00'654&#"&'#654&'5>54&'5033["+
	#!,	
+˜"#& )")
ß+( "6@#++”"	'I0$)+
",,"
!)	   «ÿëU• %  2++"&5#"&=46;546;2G+++kþÇ9	     U #«    2#!"&=463/&?6œ		þÈ		ö	£			©4 6 kÑ	 	  %'7'7Ñ; ;' 8'¶<3/3.<    . dØ  1  %"/&?'&676"'274?'&57/70‘6$3$
36!&$$&d/	+/+88A!'
'!	    9ÿëž•   %6#"&4632'#'&#"32
9HX}}XG9A[[A/+}°}*\\     9ÿùÇ‡       2"&44.'657677®¤uu¤ue$?&o´S$Z/$~:Nn‡u¤uu¤R'E+Œg(mrL lrY;/'f  4ÿôÌŒ    .6676&''"»¥l|¥l¾GfM;3#('Œ|¥l|¥þõbG>_
+$1'.(   Ü G$ Ž   6462"Ü\    Ü ò$9   462"Ü  
 +ÿëÕ• E K Q Y _ e k q w }  %2+"/"&=&'"&4?&'#".546;67'&667546276'3&'7&4&"2'67'3677&'#5&'67'67#Ç(

.<<.((

.<<.

(@<V‰<%$$ 1%<jV<=W‰>%M1%>jWÎ<.

((.<<.

((

.<V<1]U<§##Å<%1Œ=1]X>> %1    w 0‰$   4  74>32"&24632"&7>32'."€

	¹	Î	."	@<Aò
)
    @ä Î    $462"$462"U*;**;þ*;**;j;));**;));*    O $±6  % 6 I Y  $"'..5&67>"'&7>'."'..67>"'&7>'&326?#"&'¢5	BþÃB

5
4
4

è

44!9$$ù	



	K





Z    ± O e     $".'&63276'27"'"	43	hLF$		$##    ‡ €yr 
   $"&4632&"32>542dGG2!7!Y@.. €GdG!7!2€.@.      ë   «    "&=462		€		€	    ¥ 9[ d   %#"&54>;2EŠ	
Š	
9	
		    \ N     $"&462&"264dGGdGXA..A.GdGGd€.@..@     þ ²«\   2"&='7#"&463•	ddL		\	€		Mbb     Fÿù¸q 6  .7>&#"#"'0.'&#"&'&6763267632¬	!!
&L
K&R'oŒ9$($o'“¬Q[“  ‡ y    $"&462&"2642dGGdGY@..@.GdGGd.A..A     $ äÜU +  $".'&#""&476322>767632"'&#"!B7	&%#)4*#%&
ä		""	  M ³ G   %"'&".67632œ,Ô,	.uu.	  « 2UN    3#3#«**€**Nþäþä    M9³r    "'.7>3276uê.		
+kq%
		9   P °o  , M ^  7"&54>32&'.''32654'&".'&>&54632'"627654&œ-6Z2&	%C(*2º8+&%C(*"#@	Ê- 	!.r	þÔ
	!.#(2€		  q @ŽA    "&462#".5462Ç$$à$'##Ä$  N 9 ò    6"&462&"2>54ÑM66M6H)96M66MX    Î ²r :  %"'&'&67>'&#".76&'&54>32765462k%	,'%I
%E4&	$"$7M0
		"     NÿØ¡v P X  %#"'&'.6767&754&""&=4&"".=.#"&4632666?6'6™0	

		.	0s("		1&¢		º		º		º

«@F*	(!)$   N ²p  6  %!"&463!2'#"&7>54&"+"&46;&5463232œþÈ		8
	q
+8H8+
q		?*R54S*?	
	G
:+44*:
4,=LM=,3   rÿùÀ k   %5ÀN29r   N •v >  %2#".574&""&=4.#"".=4.#"&463266€		!*	

		.G! ¬		º		º	º

œ@)  N «k (  2"&="/"&4?'&4627#"&463•
©88FG88©p		k
£		p©88GF88©    N  Àx : C  %2'#"&46326'&'.#"#"&=4.#"&463266>4&#"r",* !
1		"				%*
!#ª$&"	š!'0A@Z     @ ¹g ' O  %"'&=&=.4?67676"&="'&=&=.4?67676"&=2N
GjO
O
NN
GjO
O
NÕ4D	2Bd	4D	4D	c		4D¹4D	2Bd	4D	4D	c		4D     N ²s Q  $+#"'.'##"'&67>7#"&54>;.'.>3>7632²	0	‚	0	
1

€	1	Â$8	33	9#	
(@!8  8!@(  dÿÀœÀ ,  !&547&54>76'&"#&547&5462Œ	þÚ	&$#$$;R;$$#$C	

	17Q
.*::*.
Q	h   †ÿÕz®  & 5  "'."&7>2"'&#"&762"'&7632#&"9 	!,!		&X¯:86<FVF|	
	
ƒþÜ     .ÿÀÒ½ (  %&'3#2#!".5463#267&54>?Ò?WN.		þÖ
	.NW?+>>	I7-Ÿ0="+?
	?+"=0#UG=EBW  +ÿÀÕ² 4  %"'3#2#!".5463#267#"&46323.54623632k. N-		þÖ
	-N .,>>,:R:,>>2!+=
	=+!>Y>	!);;)->Y>    ÿëã”   4>>.%8>99>8%/CB	N<1$9/))/9$&\LAJG]   Eÿ»»Å   /&?6®®®<		ó		ó		ó		   ÿÀò    %"&5472>54Á1ŽÈŽ19btb9"+5KK5+"55     \ 9 Î¹ )  7"'&67>54.'.54>762€
9) 4/%))  À 92¹ *  7"'&67>54.'.54>762ä


9) 4/%)   $ 9•¹ +  %"'&67>54.'.54>762G	
	
9)3/%))     .ÿùõ¼  ! 4  %"/&?632/&'&?66;2'#'"5'4«	<F,+‰=F,4ó	t	U$c+I $mc,IþÏS8   9ÿùú „   "&=46;265'#GŽ		,	U	W    ²ÿÎ¹  $  "/&?632/."656729UU		<LA		a2V

U
«	~'   ÿú§]  $  /&'&5&?66"#&/&7¥%s˜	þœIJ	
3Rs%
N‡,yS     Ï   76?6/&76"u
’ñuY	  5 aË 7  2#".'.#"327#"&46323264&#"&'&'6l'8,-#6  ,%'88'-#6!
-8',". 
%8N8". , 	&    U2«‡    462"U$$K##  Gÿù¥X  ! , 4  "&4?6&'7'#"'.?&'7'2"&54>264&"º*	H&%7¼
2`Ó/CC^C4F22F2+	*	G!(`€d	B^CC/4Ç2G22G   ÿÙ¹x   &67>a"K#"J" ‹KØ˜    "/&462Ø		[		     ¡À   /&4?62ý/[3F
;/Z	3G
    GÿÙåx   .6&Ÿþµ#K"K"þ¶"   (K u˜   &4?629		K		    Ü äÀ   7'&4?62";3y3yä3y3y    ÿÀò '  %##"&'#7#5#"&46;5332+>7#²@0	8R/Gm0@@$B,++8++,B$¸\,G)YC\\*=áá=*     «UÀ    2#".542654.#"ÝF22# C$	À2G2#N#    $œ²   %53Uþ¹GG$GGþ¹   $y²   k$þ¹²þ•#G   ÿÝ £ c   &'?6&'%K

XX
J     ÿÝ ¥ `  
    &'7&'7'?67'7%'%
%5W?;+
ED	      ÿÀ N    462"  )       P  Ð    >/P
W
Vx
W
W    ÿÖ ß › 
    64632"&462"6/­
z:21
zS21     L 	 Ô ‘    6462#"&462"¸t	t			    ]ÿÝã c   /&6?>ÛX

KJ
X   [ÿÝã `  
    7'/'7''&76?6Û55I;VDE7	   ²ÿÀ     462"²  )    0 °    $&?›V
W
W
W  !ÿÖê ›     $462"6462"&?!\?12zD12  , 	´ ‘    $462"6462#",c	t		  d $ò²   7'3«GGG$GGG     ‡ $ò²   'òþ¹$²Gþ¹#     Ü\$¤   462"Üq   cÿâq [  7#0#"'&'&547>54'.5467654#".54632##"'"øE?)1#)
(LK%L&/<2^]02!*!
_&¼
		
	+

     ¤ +d       423#73#'3#73#¤****Xö777¿777  òÿÜ‚      75&'5"&5'5462ò	¦vykj~ 		AG    m D   7&?68Az²    e m›D    7/&6&?6ÆBÐB…²½²  mèD   %/&6âA…²    ÿÜ  ‡   #  72"&5463#"&546272"&5463Ó
C^C
Eª	;R;	•
C^C
‡	&&	«	""	«	&&	    ò ¤   "&5462•þ€€		   U«¤      462"462#"$4632"äŸ	{E	
  r*Žk   '&"&54>32Ž5Ž5E.1 
2		     ÇÿÉ ä \   "&=462ä		)w     § 
  74>32"&5[5Rss¤sâ5[5s¤tt    3 8ƒ Ú   7!".3P.LZL-Ú,J,,J   N« ‡   $#!"&463!2«þcv     ÿ¾³ g    &?6'&6%/@0/5	„
„…	…	     ú    '.#&67¾#mL C$     kœ ‡   $#!"&463!2œþ		c     3 Ãƒ ò 
  7462#".3c‹bbF-N-Ú

   ÖôF   ".47>ß
 		     ÿÀ À X `  %2+"/+"&=&'"/&4?&'#"&=46;67'&4?>67546;2762264&"ä0""""00""""ã^CC^Cë""00""""00""C^CC^    @ÿûÀ…  ( @ J T [ d n u ~ ‰ ”  ¨  %#"'"'#"'&7&763262632'">'&674545&'&'6"6.'.#6'405761>7&'73&'067."67&6767&#"27&'&'267&'76&'32xH
!)R)!
HH
!)R)!
@'|





	E !	E C³''Š³'À>$^^$>>$^^$&ƒ;		=;		§*$

$-&¸&P*$

$-&  ì ¬ Ô   62"&4øÔ   ÿüÿë.  # 6 F  7..>32#67#&546326.#".5473326'3"&547326–*!8+8ZE©*EY9*9"),*!%ë%*;*À#87*fA<<Af*78#†
	) ))	
     ¹ \GÀ   4>?"&¹	+8+/0!	 0H‹‹    ÇÿÀ9 k   74>32.Ç&	(4"*

     œ 2d •   $+"&54>;2dddx)  ÿÎýµ   "&762#&	Þ		Þ	2«þT     Þ "F    6462"4>32#"&5Þ				&	©	  (ÿÀØÀ   $#"'&?#"&?6323ÑÐh	c¬
Ðh	c¬ë´[À´[À  Ÿ fa(    $"&462&"264(P99P9G4%%4%f9P99Pg%4$$4     ï   ‰    "&=462



f

f    ƒ .«r  ! -  %#"&46;22"&='7#"&463"&4?627n

n
[


PO<

r!
!
.


D
g

>OO

K!
!
   U é ßr   32+'"&=46ff
<OP


r
OO>

g
     GÿÀ¹   '¹þÄ"‘Är     ÿÀ i ‡   7'[[‡UrZ    ¥ „äy   57ä?yn‡gU      )äÀ   '7ä?þÄ[ñ—yŒÄ^  — † · 
   7"'&?67"'&?6«**˜++d  B \­–    7"/&?6?6'?'€+		ÕVÿ óI\*

ä	G¹:°:    œÿÈGÿë   ".54632G),)2$' 			  HÿÜœ¤ *  +.54>?6'.4'53U
*UUä[4 3y##87K )	    €ÿÈd¼    ".54>3227#".5&'d4>57#rK))¤	þA		    ‰g[}   ".5472X182š}  XUx   6'673#"”	0A#	*44d	
	     H ·œ   7"'6723327>3òt67XY58· %   
 ÿÜö´   ( 3 > O [ k v   ".=462"#'&7>7"'&6?6""/&6%"'&?6'"/&676#"&46;27"'.?>"/&6!"'&?6 drs·`
`M	N	þ÷IIR €€Š%lkþ—	XX$c		c@$$	


Õhhii+r
sc		b
{{>>@	?   ÿÊ À  " 3 H Y h  +"/&?6"/4&54732"6&?632*1'#"'0&5&'&5'&63.'>3226&'.?6?k*
€
$	fòO	0….3-+W[E-Ö1OS@ü	
3a=W 
|	
z
JžmL]Væ
!Je
JYþz	@-	,GtW		H&  
 3 Ïy  + 8 C S f ~  › ¬  "'.7>>7>"5&7:>76""'&6676"'&676#".'&62"#.7>'&'"'&7>732#"'"'&7>'&7"'&&767"'.'"&4632H

)	% ê2
0	;%H)		+
/
8	IO		J

 	@V	T
	8		    ÀÇÀ   2 G a  4>2"&/2#".46?!2#".54>;7"/.7>2'.>?>Çä		þ«
		T		#	¤	
Žq	<				    d \d\   6462"dKjKKj§jKKjK     ÿÀ  Ü   %2#!"&4632&54632>326Ž/CC/þ¹**	
&2 0
¤C^C*;)&'"   ÿÿÿÀÖ Ž    % . 7  7"&'4?".5&?'"&5&?"&5&?"&'4?"&'4?œ)(E)e))W)]£	±     Ž rr   $"&=4622>=4627n;.H1Õ		Õ

Õ		Õ1     $ ŽÜ  0  6"&4767>3232676762#".'&#"B*%4 4Ž 		
 	     GÿÙåx   .6&Ÿþµ#K"K"þ¶"   (K u˜   &4?629		K		   \wÀ   '.467>G0'\CC$"E9:"²BD[+0JU#"	  Gÿë¹ Î   %3"&=3265œjžj]~]ÎG;aa;GG.RR.  ÇÿÜ9    +"&=46;29<<   yä   7462#"&Æ9k@_…Î))'6  + ¤Õ¤   74>32".+5d<[z4hrh4Ü2[;zN    & ²Ú™  #  %"&54'&6676#"'&6676d	&);ö.;('
	²mV	PllP		$e1     Ç Î9@ $  2+#".=#".546;54632+	  ÿÀÕ 2 	  #54&#52Õ+$2$+2   +ÿÀº 2    %2#54.#524>3"#ˆZ+$	9	+   Gÿë Õ²  $  723"3"#"&=462#526=4&#y$22$•8H2$8$2+8    + Î º²  %  2#"#52>=4&#523"&=4>3"ˆ/$2'•H898+2$8'+     GÿÎœ•    23"3"#"&=46"&=462y7•8HþVª    dÿÎ€ ²   %463"&5d•ä    dÿÀœÀ    '  %"&=462#54625"&=4625"&=œÿ 8ëªþ+UVª«UU     dÿÀ€À      463"&5#546'463"&57"&=3dä•ä¹rUãäãU GÿÀÕÀ    %23"#546#526=3yp2$+$$2+ +NºÀ    "#52>=3'533"&ˆr+$2k$9+2  G NÕÀ    "&=33"2#526=4&#y$2'k$92$8'+8     kº   2#"#526=4.#52ˆ
H
8    + N2   %3"&=4>3"V$2'Ü8+2$8'+   ÿÎ  #  23"3"#"&=462#526=4&#yæ$22$8Hc2$8$2+8  ÿë º •   72#"#526=4&#52ˆ•H8   +ÿÎ  ²   73"&=463"V$22$\8+2$8$2+   9 ‡Ç ù   %#!"&=463!2ÇþªV¤8    GÿÎ¹\    "&5462"&5462€9@þ«Uþ«U    À y    $#!"&463!27#"&/&5463!2 þ8È+ªLkªèc   ÿÀÿ² % 1 =  #"&/&54&4>332>?2 +"&46;2+"&46;2ÿ:ªLr|R&C0(þ99I99‡
	
	þ_     ä Î\   %"&=462ëU  ÿÎÇ  
  %%?6?yNþF!NLçþçDCA\6  ÿÀ     '7/ Ž
.!J#@]5&!"Ih[	K2
    ÿÀ   	  %2!5463äþ ++   ÆÿàH½   '.7>ò
U		°
  ! Ÿþ´   ./%.?6Ñ¾o
þ¥´)‡K		KK    Y ¬Ç¯   './.?6èO™(¯€K	
!K   ¼ Ëg§    /./6H(	§sJ	N     ÿÀò z   7!"&5äŽÈŽz]'66'     ò ×   64632#"Žd1Z@'AoBdSM7"+  + ~À   754&""&5462ò2G2B^C~Ð$22$/CC/Ð    d ‡ä² 
   $462#"4632"d[					    ¹ • Õ ²   6462"¹ž			    r ² Ž Î   6462"rº    + ù G 
  4632"+    Žk «‡   462"Ž			s   3 gÍ Ä   $"&5462&GŽnxªxŸ
	++	
   : 0Æ Ÿ   6462":t¤tt¤P.!!.     w I‰ …   %2"&46 ("[\[[…	   Õ \+ ~   73"&5ÕV$~		     Õ p+    6462"Õ$$x		    r ßN   7"&=462"&54&"€.@.*ß	 ..     ò À€&   %".=4.#""&5462r);*À		**  ò ëÕÀ   #   "&54&""&5462462"&462"Í2G2C^B³			"#22#/CC/7Á  ÿÀü •   "&54>32#9!7hDBg8 @#4004#   ¡ ‹ ‰   7>7"#"".'¡IX!N_45    Uÿë 2   4632#"U6'**'
	  Ž 	 «‡   3"5Ž‡þŽ     Ž-aÃ   46&5Ž †† •00 r2     42242H++++   U ÀÕ2       42"4242 42+9¹þ€++++G++++     dN Ü\   +"=4;2ÜjjR  d$ Ç@   2+7À\@     œ «N   3#œN9  + À¹2       4224242 429++þr++++G++++     G Àä$     $42 42642ÕþcòÀ++++9++    ^ Î¿   %!2=4+7!#"œþÖUÕ    € ÎŽ ù   #  7+"=4;2+"=4;2+"=4;2Ç99d99c99Õ      TòQ    %.'&'!%73Û.yde'äþøwjaN&ŸX   6 Té • 	  7!.'&6³.yde	•4   U ¤Ç À   # / ; G S  7+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2r998999«     œ2 Ç•    "=42"=42ÇU9U9    @À   %#".5462Nd    +ÿùä k   7!!".'+¹þÇ,kr"!    G ‡ y   767>?&#"G* ++*‡G9#G   ‡Õ¤   &#"54&'V**++¤VG@9‡'    Nò k   7!!"&46Öþ*		k		   e V Ö Í   7/&6Ò
^
d
e
    m ­] ,  '&'.'&''&''&7>7>76, '	?
k\#*


(   \ Ÿ¬²  #  #'&7637>76726'.76«&X?**"9-þÛ
	ˆ1#*×	    p3 ñ«   &'&6é-*kƒ+(&   iV»   '&7676.'.“		!4
	e	*	   s? «x   462"sP   M j   462"V	   ›M Ô†   462"›^   ©\ Æx   462"©		d   c ½ u Ï 	  7'&6i
¿	   v ¯ Ž Â 	  7.'7Œ
°
    ‚ Ö   %&'4>7%62}	þë3!	Ã’	˜   ¬ g Ð  
   76'.6'.¶	
	|  ¡ U ð Ž   7:>24"547>Á			Š
    WÿÐÉ –   %&'&>7%6Å	þë3!	‚‘
	˜     ó C S   %2>21&547>
		N   þ ," D 
   %6'.6'.	
		A  a õ í   %/&6ð‘Y  V ¾ ø 	  %6&'&_'
ó     ³ =J ñ ,  %1/&?&''.54?5


			ð


	*
	7
		
-   ÿÏ}   %  '&726?3#'&726?3r0/+	¾0/+	

		

		  ÿÀü $   !"'&3!2>7«þqŽ#@    2 w   746546\]
C202C¹.#         @   %#&'&+"&=32 Kš 
qŽ&#2	    Ô kg Ô 
  #  7"'&?6"'&?6"#.?>è



.0	™



 	
    ¾ÿôÆ;  & F  %3#.'&'7'67/&67>'&>56'.'&v"	]
3¨A
;

D!+/	#	Y	¾	
9
   ÿÇè @ , W  %2#&'.54&'.#4'#"74>76<&1437:&/&5&7>7467>167'4323>36ÜÙ6@8
	]	   a Ç.9   '.#&'&'&5>3227676
>	)
0	2
     ( V Ž ½   6462"(**t++    ( W  ¼ #  7#&'&'7&'677&'41677&iŒ   ¸ Â " 
  %"5&?6¼    ãÿÖæ A    %&'&'6206767âÿL    	 Ÿÿ¿ó ?  ' 2 ; F f q | ‡  %4216767654&54767"'&?6""5&?60"5&376"1'&62#'.5'32727>7676'"/&6"/&6""5'&60æ
#õ&

	
	,

>	

	*
	
     ç TI ©   7672'&'4ê,%1    & Po ©   %&74376'"13#U0'     ´¾   &76'&'46*e	.%  °`}Á 0  7#"''&7>'&&'&"'.>76676]			


	   é ži[   1*#'.'&676?	 
5*%#@'  ¼ÿóÅ;  % F  %23.'&'7'/&676?>'&>56'.'&v#
Z

	8c
;

E##W	˜	8

  ÿÇè « % M \  %#&'.'4/.#4'#"74>764&14372&/&5&7>74767>347'432>16'676'&'&ÑÏ6,$@8	Q	 4!    ¸ Â " 
  %"5&?6¼    ãÿÖæ A    %&'&'62067670âÿ	M 	 Ÿÿ¿ó ?  % 0 : E _ j u €  %42#6767654&54767"'&?6""5&?60"546376"1'&62#/32727>7676'"/&6"/&6""5'&60æ
"õ&+

,

>,
	*
	
    # Pr ©   %&76?6#&.7&T1&    ®"¶   &54'&'&>h
)!  £aÊ $  6#0"*.5&6&'&#/"'&¸*$
©!	$

    ë i[   1'#.4>76?
-5*&!,    ` Ã/:   '".#&'&'&5>322265676 !+/
8

  °ÿóÅ´  % F R  %23.'&'7'/&676?>'&>56'.'&'&'&6v#
Z

	8c
;

%%E##W	˜	8

Ÿ!	#    ÿÇè @ % M  %#&'.'4/.#4'#"74>764&14372&/&5&7>74767>347'432>16ÑÏ6@8	Q	    æ SH ª   7676'&'&é,$3!  $ Pp ©   %&74?6#&/5%T1&     Î$ !  '&'54'5.#".6.67>

p
     §Z½   4.'.'.'&67>
	6²
)

	  ì i\   1'#.'&76?
)
&!5*&!V%     ( V}Á 0 8  7#"''&7>'&&'&"'.>76676 462"]			þÑ**


	þ×++   ( VÊ $ ,  6#0"*.5&6&'&#/"'&462"¸*$
{**©!	$

þÜ++     ( V½  !  4.'.'.'&67>462"
	6×**²
)

	þ·++   vÿë&   "'&76;2#ïb
èw	þë
 ÿÿÿë'   "&762#ww
þë
     eÿë ´ ö   7#Œ(Oöþõ   4ÿë å     7#'#Ü	1w(1  /ÿë é ö    &'7´(]S$]ò		ò  Uÿëó Ü  $  "&54>767&#52653'3276'&«)

&!,	!
!
+	"%$&(!#0! +"   IÿÀè·    2+"&'&63!".=76.92"ÿ !! ".<6'    +ÿÀ€ÿë   2!54>3rþ«	 Ž ÎäN   %2+"4;&=475462ÜGÜ99   d ëÇ   $46;2+"dGGó   + À€À   %+"&=46;2€!ã!!ã!ù!!Ž!!  G Üd¤   %+"&=46;2dããùŽ  ¹N9y   3#¹€€y+   ò õÅ  $  4.'#.6760&>.ï E !B­*'*'(GH ;+.,.     ¼ÿÐš*   >7€Ä §0""þÚ	  òêÅ  &  '"'.7>74616?>6.²! E B'*'·HG

; .,.,    dÿÐD*   .7€§ 0 &"   ê ² ß 
  %#"&462
	É   £ cÝ    %/&?6'/&?6«



)



þ



(



m



)



­



(



     ÿÂªj  !  72'./&'&67&/.'.6N!! H0cHD„‡€** ãþÇ*ò(    L ý½   >'&6?6€S
þò	ä•
Sÿ 	
9ò  @  Õ• 	   7'&7>35632#4&Ç@?@$Ø‡@@@     ø Ï 
   761&'07010&1'&63ª

¡ï¡

¡Å

¡¡

¡     ÿ÷Ê¤   &'575475474732Ê¼ôV&$"%þÆÍ&Y ,    ÿÀø3 =  727;2?676767;25476;24+"&46;2#"&=23; !-

%.(yœ £kgs³	!LS$M%P…’o     ÁŽ³   + 6  32+"&=46#"&=47632"5476327476;2#7¡9UkYY€€*[G99  d À$¹   #75463546346$À$$–Ö„2G   9ÿÀÐÀ J  %#"&=4>246=4>206154>20154>327>7>¾3YGd&Ù)$KdGÙ	z´	©È	È¥
	á
  ÁÿüV š   %##&5&767M	!2+<'$:*  dÿÎˆ í   %0'575476?€K&%Ž94r²	l67™;	8    d k”˜ $ 5 P  %#"/4&4>767>2&'32+".=4601#"&=47632^^.	,
êm		À±¤–			ž;;*	U
'  XÿÛò  7  767>761'.3267>.'&&'&54>7XX' Le& {Iw
#!Œ4( 	)!
9	
%*	    ¬ÿÖ H   %'&'&676"
/		("

     ‘ ´S þ   7>76'&¼+3aÙ	

  È ÄwN   @	<N
	    }ÿã  \   %"'&632 .
;N	 (2    €ÿá ò \   7"'&5>32ò
	,N		
+*   Gÿö3    763262#"'&&G9:8	
=5	@9 $	$   3ÿó €   7>32>'&&E	,%,
9

>!	
.   T ÎÀ   7/.7>†		@"o	  ÿÄ ¦ m   7&67>•]A3 Og!     _ E4    763262'"'.&_47$&\	

    G ò' .  7&67>32&'&'&'&7676767676'&X'\oj	W,3*"5)3		7!A†_8V )+%		
4 AÿÊö    '.'&'&6767>?>õ
2&
#			$#
&2     ò Î¼   "/&4?62Â;"<;"u";;";   i ¾W   %'7¾;<Þwy<;Þw   ÈÿÄýÿø   >?".'È		.    à à¡   7wJw*wJw   . ï Ñ’    77.vvwwvvvw    +ÿÂþ •   /7'654&"32Ç-fcG€--€Gcf-   9‡° 	  %"/7{;"ôv¼";õv   u ¶
K   ?uwwÔww    ÿÃ ¶    #"/.>6Û	þõš#uï
¶#þeŽ#lq     *ÿêÕ•   %"/"&4?'&462762<#Œ$##À#$Œ##   €ÿë€• %  2++"&5#"&=46;546;2rVVV2	ÿ  	UU     Eÿë»•    & ) , / 2 5  %+"/#"&?'&6;76232#'#3373'7#73'‚5j55j55j55j%A!0b00b1 @² !AA!r @qA À]\\]]\\8UUU ÿ888ª888   hÿÜò¤   %"/&4?62è
	//~

~//Ð/ŸŸ//šš  ÿÎ ÕŸ  '  7"/&4?62"/&4?62Ì		!!		!

!!

!343//(!

!!

!   ÿÜä¤ 7  %2+"/"&="&4?#"&46;'&4625462762Ç‚bccb‚‚bccbÜcb‚‚bccb‚‚bc  ÿÙç§ ?  6?62?6/&"/.&?6&/&4?>/&6ÁW
@

ee

@
WWH	sg

@
 

ee

@
WW
@

ee

@
ZW
   £ÿÀ]À /  %"/#"&'='&4?'&762543276E


11

EE


11

E8E

0AA0


EE

0AA0


E    ðz 4  %0*//'&6?'".7>'&7676ìB98ì^B8
8ì^—! B^ˆ	! B^ˆ      îz 7  %2/'&?'&4>737'".>3?>76#â^ì	88B	^ì	89ú	ˆ^B !	‰]	B !     ÿÜä¤   # / 7 ? G O  "&=462"&=462'32+"&46!32+"&46'/&6/&6#6&76&7ãrr(rrr

k

:

k

x

k

:

k

‡rrþØrrf 

k

þÆ

k



k

:

k

     ÿÕë«   %"/"&4?'&4627622®
®®
¯®
®®
À®
®¯
®®
®®
   N ²r   %"/"&4?'&4627622uuv

vv
uu
Àu
vv

vu
uu
   rÿÎœ¤ ' 4  $"&=4632>54&#""&546324>32"&#(!#T:)?#/,U#@9
"4L/5,B`
$     ÕÿÎ+¤    462"7"&5462Õ$$=$$$$    ÕÿÎ+¤    462"7"&5462Õ$$=$$$$    UÿÀ«¿  !  >2.54>2462" +.*%$
	;-%*.+:*:**:‡/ 1--%;8H /þI;));*     "ÿÀÞÀ \  %'&'&/&'&'&'4&5'&5676?3276'&7476?7>56/7676?Þ(*-1	

 7		Ô
1 $	
"+;'		2	
     6ÿÝ×• /  %.'&77>'.677>'>7×&./&@2-5		%&"Õ'G0)	(3[6;4(."!()!.!  CÿÃ¸   %.'&54632632¸
t:9t
<+55/«?||?*=++/   ˆÿÊ¦  1  >5&'.67'.676'./Z

	

			*!-+
	+2U	"#
    ÿÜä¤   ./&'&54632>32¯5"…=8|%R:#<<# –äFzm@6 :R      ²ÿˆ   !&'7%þ
þ8›)	›      ßþ–  
  #?&'%ù?þC©AF¨    ûa 
  7&'%7Ý¶ÎÙßâE
¯R  ÿÜä¤   %2+"&=#"&46;5462¹Ž$ŽŽ$ë$ŽŽ$ŽŽ   •ä ë   $#!"&463!2äþŽrÒ$$     ÿëä•     $#!"&463!2$462"462"äþŽrþü!0!!0!!0!!0Ò$$Z/!!/!þè/!!/!   d $œ\   7355#d€¸¸€ùcœœc   ÿðú‡ ( 5  "&547&#".67632632*&'&#"'2654.;vZl=(&)	..>PP>0*7"Ck•/<ELE%WJ_O--!N_KáN+:<<;+&!   ÿù ‡   %#!"&5463!2 !þr!!Ž!2!!!!   	 ?÷+ 2 = G  &#"#"&547&+"#"&547&#"&76326;26324'32>74'326ê"<8! 16!
!61 !8<"$'0-+
+-0'$ÿ 7;'Â;7 '!)9+12+3,,3+21+9)
*'"0 0"&+!      | zn   ##"'7326=#%U3V;&	$4?ngf;T/3#f     | zs   %'354&#"'6323%V?4$	&;V3gl#2/S;l   ÿÀ À   2#!"&5463Ç!!þr!!À!þr!!Ž!  ä $\   2+"&5463\þä    n R’.   /&?6{íí"  n R’.   6/&7…íí"   d $œ\   %#'7œ€¸¸ùrcœœc  d $œ\   %#5#7#9rcœœc$€¸¸  d $œ\   3'359cœœc\€¸¸€     	ÿÍ÷¢   "/&?'&6;76232tt!+rŽ-(,r+,SS‹Q'ˆˆ'Q‹     ÿÀ À    2"&4264&"–Ô––Ô–¹ŽddŽdÀ–Ô––ÔþëdŽddŽ    ‹ uc    74>2#".4"‹/@// #¥`Á6116:62%%TÍÍ      y  U  %".'.#"#".'.#"&463232>7>232>7>32#"€																	y			  ÿòü€ ?  %#"'&/.##"'&'&'&'&.76322767>32÷P"&"H		
"%<!+.²	$2


7«

$DŽ  ² !,^   #".546;2"&5ê
?!	û  • $kc (  %2+"547>7654&#"#"&54632H#“#
/$>*$0^
5+);"3!7	     ÿÀ À    "&462 –Ô––Ô*Ô––Ô–  H ¶u ; q }  747#"'&547>7654+"54;543232#"'&'#"57#"'&547>7#"=4;2+327654;2+.=72=4+"3‰)"	T

-¤+.*$!!z!!
*j}'*7

7		i®DVG=\\‹(•LL    G ¶u D } ‘ ¥ ¹  2+#"'&'#"=47#"'&54767#"54;5#"'547676327432676323267674;"'&=#"'&54767'23#"'&5476767#"'&'&5476322"#"'&'&5476Ç#').
7#e7&J
!)% 	p"	&Z


$‰'>%0E29ƒJsŒT&
"	&p:*	'8Yu	%/	1       ic 4  #"&54>3232>54&"&54>54&#"#"&54632W$3-<
		
<$,,*-6-$    z !ic    7"&54?63232+"=3™c	@<<i
	
³‡	&""&µ{      e^ ,  7632#"&5463232654&#"#"&50?>;2+é(35%C-j
Sò6(%6!#]     ‘ oc  *  74>767632632#".732654&#"‘'1
		&6?0!3EŒRB			;'-A1     !p^   #"&546;2#".547"qŸ
m
!ß

	    “ mc  # /  747&54632#"&732654&#"72654&#"“/!7((8"/.?E
ƒ3'&//&)490m	   ‘ oc  )  %#"&547>7'#"&546324.#"32>o'1
			.'6?02=E

õRB3;'-A@.     s mc !  2#"&#"32632#".546
'$(',,'+!,E&Uc9+)8
+J.E]     ÿÀ  ú 
  %#!"&= ÿþ8ú¬rr    ÿÜ  k      !!5!!5!!?! þ  þ  þ ª99*    GÿÀ¹À 	  2!46ÎdU2þŽ2Àþ+Õ    GÿÜ¹y   ' 5   "546324"54624&"54624"54624&MšllM2U2‡dU2lšl2:šllšl‡dU2lšl2’Jn  rÿÀŽ¿  	    63#67#2##ÇUªV¾þñþ	ÿþ÷þ    G ‡¹ Î   %"546324& 2U2lM&D2l²  ‰‘    6 A  #"4;2"56462"64"7#"&547>75#"&54>324&#"32ž
)//*%Ÿ			
			qa2&&2&PP6 	     –                 @       * ž        é              A  	      	   0  	  T H  	   É  	   ù  	  # T w e m o j i   M o z i l l a  Twemoji Mozilla  R e g u l a r  Regular  F o n t F o r g e   2 . 0   :   T w e m o j i   M o z i l l a   :   5 - 7 - 2 0 2 1  FontForge 2.0 : Twemoji Mozilla : 5-7-2021  T w e m o j i   M o z i l l a  Twemoji Mozilla  V e r s i o n   0 . 6 . 0  Version 0.6.0  T w e m o j i M o z i l l a  TwemojiMozilla          ÿÛ                    4S    	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~		€		‚	ƒ	„	…	†	‡	ˆ	‰	Š	‹	Œ		Ž			‘	’	“	”	•	–	—	˜	™	š	›	œ		ž	Ÿ	 	¡	¢	£	¤	¥	¦	§	¨	©	ª	«	¬	­	®	¯	°	±	²	³	´	µ	¶	·	¸	¹	º	»	¼	½	¾	¿	À	Á	Â	Ã	Ä	Å	Æ	Ç	È	É	Ê	Ë	Ì	Í	Î	Ï	Ð	Ñ	Ò	Ó	Ô	Õ	Ö	×	Ø	Ù	Ú	Û	Ü	Ý	Þ	ß	à	á	â	ã	ä	å	æ	ç	è	é	ê	ë	ì	í	î	ï	ð	ñ	ò	ó	ô	õ	ö	÷	ø	ù	ú	û	ü	ý	þ	ÿ
 








	























 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~

€

‚
ƒ
„
…
†
‡
ˆ
‰
Š
‹
Œ

Ž


‘
’
“
”
•
–
—
˜
™
š
›
œ

ž
Ÿ
 
¡
¢
£
¤
¥
¦
§
¨
©
ª
«
¬
­
®
¯
°
±
²
³
´
µ
¶
·
¸
¹
º
»
¼
½
¾
¿
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
ð
ñ
ò
ó
ô
õ
ö
÷
ø
ù
ú
û
ü
ý
þ
ÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ           	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  €  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ  Ž   ‘ ’ “ ” • – — ˜ ™ š › œ  ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ! !!!!!!!!!	!
!!!!!!!!!!!!!!!!!!!!!! !!!"!#!$!%!&!'!(!)!*!+!,!-!.!/!0!1!2!3!4!5!6!7!8!9!:!;!<!=!>!?!@!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z![!\!]!^!_!`!a!b!c!d!e!f!g!h!i!j!k!l!m!n!o!p!q!r!s!t!u!v!w!x!y!z!{!|!}!~!!€!!‚!ƒ!„!…!†!‡!ˆ!‰!Š!‹!Œ!!Ž!!!‘!’!“!”!•!–!—!˜!™!š!›!œ!!ž!Ÿ! !¡!¢!£!¤!¥!¦!§!¨!©!ª!«!¬!­!®!¯!°!±!²!³!´!µ!¶!·!¸!¹!º!»!¼!½!¾!¿!À!Á!Â!Ã!Ä!Å!Æ!Ç!È!É!Ê!Ë!Ì!Í!Î!Ï!Ð!Ñ!Ò!Ó!Ô!Õ!Ö!×!Ø!Ù!Ú!Û!Ü!Ý!Þ!ß!à!á!â!ã!ä!å!æ!ç!è!é!ê!ë!ì!í!î!ï!ð!ñ!ò!ó!ô!õ!ö!÷!ø!ù!ú!û!ü!ý!þ!ÿ" """""""""	"
"""""""""""""""""""""" "!"""#"$"%"&"'"(")"*"+","-"."/"0"1"2"3"4"5"6"7"8"9":";"<"=">"?"@"A"B"C"D"E"F"G"H"I"J"K"L"M"N"O"P"Q"R"S"T"U"V"W"X"Y"Z"["\"]"^"_"`"a"b"c"d"e"f"g"h"i"j"k"l"m"n"o"p"q"r"s"t"u"v"w"x"y"z"{"|"}"~""€""‚"ƒ"„"…"†"‡"ˆ"‰"Š"‹"Œ""Ž"""‘"’"“"”"•"–"—"˜"™"š"›"œ""ž"Ÿ" "¡"¢"£"¤"¥"¦"§"¨"©"ª"«"¬"­"®"¯"°"±"²"³"´"µ"¶"·"¸"¹"º"»"¼"½"¾"¿"À"Á"Â"Ã"Ä"Å"Æ"Ç"È"É"Ê"Ë"Ì"Í"Î"Ï"Ð"Ñ"Ò"Ó"Ô"Õ"Ö"×"Ø"Ù"Ú"Û"Ü"Ý"Þ"ß"à"á"â"ã"ä"å"æ"ç"è"é"ê"ë"ì"í"î"ï"ð"ñ"ò"ó"ô"õ"ö"÷"ø"ù"ú"û"ü"ý"þ"ÿ# #########	#
###################### #!#"###$#%#&#'#(#)#*#+#,#-#.#/#0#1#2#3#4#5#6#7#8#9#:#;#<#=#>#?#@#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#[#\#]#^#_#`#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#{#|#}#~##€##‚#ƒ#„#…#†#‡#ˆ#‰#Š#‹#Œ##Ž###‘#’#“#”#•#–#—#˜#™#š#›#œ##ž#Ÿ# #¡#¢#£#¤#¥#¦#§#¨#©#ª#«#¬#­#®#¯#°#±#²#³#´#µ#¶#·#¸#¹#º#»#¼#½#¾#¿#À#Á#Â#Ã#Ä#Å#Æ#Ç#È#É#Ê#Ë#Ì#Í#Î#Ï#Ð#Ñ#Ò#Ó#Ô#Õ#Ö#×#Ø#Ù#Ú#Û#Ü#Ý#Þ#ß#à#á#â#ã#ä#å#æ#ç#è#é#ê#ë#ì#í#î#ï#ð#ñ#ò#ó#ô#õ#ö#÷#ø#ù#ú#û#ü#ý#þ#ÿ$ $$$$$$$$$	$
$$$$$$$$$$$$$$$$$$$$$$ $!$"$#$$$%$&$'$($)$*$+$,$-$.$/$0$1$2$3$4$5$6$7$8$9$:$;$<$=$>$?$@$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$[$\$]$^$_$`$a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z${$|$}$~$$€$$‚$ƒ$„$…$†$‡$ˆ$‰$Š$‹$Œ$$Ž$$$‘$’$“$”$•$–$—$˜$™$š$›$œ$$ž$Ÿ$ $¡$¢$£$¤$¥$¦$§$¨$©$ª$«$¬$­$®$¯$°$±$²$³$´$µ$¶$·$¸$¹$º$»$¼$½$¾$¿$À$Á$Â$Ã$Ä$Å$Æ$Ç$È$É$Ê$Ë$Ì$Í$Î$Ï$Ð$Ñ$Ò$Ó$Ô$Õ$Ö$×$Ø$Ù$Ú$Û$Ü$Ý$Þ$ß$à$á$â$ã$ä$å$æ$ç$è$é$ê$ë$ì$í$î$ï$ð$ñ$ò$ó$ô$õ$ö$÷$ø$ù$ú$û$ü$ý$þ$ÿ% %%%%%%%%%	%
%%%%%%%%%%%%%%%%%%%%%% %!%"%#%$%%%&%'%(%)%*%+%,%-%.%/%0%1%2%3%4%5%6%7%8%9%:%;%<%=%>%?%@%A%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%[%\%]%^%_%`%a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%{%|%}%~%%€%%‚%ƒ%„%…%†%‡%ˆ%‰%Š%‹%Œ%%Ž%%%‘%’%“%”%•%–%—%˜%™%š%›%œ%%ž%Ÿ% %¡%¢%£%¤%¥%¦%§%¨%©%ª%«%¬%­%®%¯%°%±%²%³%´%µ%¶%·%¸%¹%º%»%¼%½%¾%¿%À%Á%Â%Ã%Ä%Å%Æ%Ç%È%É%Ê%Ë%Ì%Í%Î%Ï%Ð%Ñ%Ò%Ó%Ô%Õ%Ö%×%Ø%Ù%Ú%Û%Ü%Ý%Þ%ß%à%á%â%ã%ä%å%æ%ç%è%é%ê%ë%ì%í%î%ï%ð%ñ%ò%ó%ô%õ%ö%÷%ø%ù%ú%û%ü%ý%þ%ÿ& &&&&&&&&&	&
&&&&&&&&&&&&&&&&&&&&&& &!&"&#&$&%&&&'&(&)&*&+&,&-&.&/&0&1&2&3&4&5&6&7&8&9&:&;&<&=&>&?&@&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&[&\&]&^&_&`&a&b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z&{&|&}&~&&€&&‚&ƒ&„&…&†&‡&ˆ&‰&Š&‹&Œ&&Ž&&&‘&’&“&”&•&–&—&˜&™&š&›&œ&&ž&Ÿ& &¡&¢&£&¤&¥&¦&§&¨&©&ª&«&¬&­&®&¯&°&±&²&³&´&µ&¶&·&¸&¹&º&»&¼&½&¾&¿&À&Á&Â&Ã&Ä&Å&Æ&Ç&È&É&Ê&Ë&Ì&Í&Î&Ï&Ð&Ñ&Ò&Ó&Ô&Õ&Ö&×&Ø&Ù&Ú&Û&Ü&Ý&Þ&ß&à&á&â&ã&ä&å&æ&ç&è&é&ê&ë&ì&í&î&ï&ð&ñ&ò&ó&ô&õ&ö&÷&ø&ù&ú&û&ü&ý&þ&ÿ' '''''''''	'
'''''''''''''''''''''' '!'"'#'$'%'&'''(')'*'+','-'.'/'0'1'2'3'4'5'6'7'8'9':';'<'='>'?'@'A'B'C'D'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'['\']'^'_'`'a'b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'{'|'}'~''€''‚'ƒ'„'…'†'‡'ˆ'‰'Š'‹'Œ''Ž'''‘'’'“'”'•'–'—'˜'™'š'›'œ''ž'Ÿ' '¡'¢'£'¤'¥'¦'§'¨'©'ª'«'¬'­'®'¯'°'±'²'³'´'µ'¶'·'¸'¹'º'»'¼'½'¾'¿'À'Á'Â'Ã'Ä'Å'Æ'Ç'È'É'Ê'Ë'Ì'Í'Î'Ï'Ð'Ñ'Ò'Ó'Ô'Õ'Ö'×'Ø'Ù'Ú'Û'Ü'Ý'Þ'ß'à'á'â'ã'ä'å'æ'ç'è'é'ê'ë'ì'í'î'ï'ð'ñ'ò'ó'ô'õ'ö'÷'ø'ù'ú'û'ü'ý'þ'ÿ( (((((((((	(
(((((((((((((((((((((( (!("(#($(%(&('((()(*(+(,(-(.(/(0(1(2(3(4(5(6(7(8(9(:(;(<(=(>(?(@(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z([(\(](^(_(`(a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(t(u(v(w(x(y(z({(|(}(~((€((‚(ƒ(„(…(†(‡(ˆ(‰(Š(‹(Œ((Ž(((‘(’(“(”(•(–(—(˜(™(š(›(œ((ž(Ÿ( (¡(¢(£(¤(¥(¦(§(¨(©(ª(«(¬(­(®(¯(°(±(²(³(´(µ(¶(·(¸(¹(º(»(¼(½(¾(¿(À(Á(Â(Ã(Ä(Å(Æ(Ç(È(É(Ê(Ë(Ì(Í(Î(Ï(Ð(Ñ(Ò(Ó(Ô(Õ(Ö(×(Ø(Ù(Ú(Û(Ü(Ý(Þ(ß(à(á(â(ã(ä(å(æ(ç(è(é(ê(ë(ì(í(î(ï(ð(ñ(ò(ó(ô(õ(ö(÷(ø(ù(ú(û(ü(ý(þ(ÿ) )))))))))	)
)))))))))))))))))))))) )!)")#)$)%)&)')()))*)+),)-).)/)0)1)2)3)4)5)6)7)8)9):);)<)=)>)?)@)A)B)C)D)E)F)G)H)I)J)K)L)M)N)O)P)Q)R)S)T)U)V)W)X)Y)Z)[)\)])^)_)`)a)b)c)d)e)f)g)h)i)j)k)l)m)n)o)p)q)r)s)t)u)v)w)x)y)z){)|)})~))€))‚)ƒ)„)…)†)‡)ˆ)‰)Š)‹)Œ))Ž)))‘)’)“)”)•)–)—)˜)™)š)›)œ))ž)Ÿ) )¡)¢)£)¤)¥)¦)§)¨)©)ª)«)¬)­)®)¯)°)±)²)³)´)µ)¶)·)¸)¹)º)»)¼)½)¾)¿)À)Á)Â)Ã)Ä)Å)Æ)Ç)È)É)Ê)Ë)Ì)Í)Î)Ï)Ð)Ñ)Ò)Ó)Ô)Õ)Ö)×)Ø)Ù)Ú)Û)Ü)Ý)Þ)ß)à)á)â)ã)ä)å)æ)ç)è)é)ê)ë)ì)í)î)ï)ð)ñ)ò)ó)ô)õ)ö)÷)ø)ù)ú)û)ü)ý)þ)ÿ* *********	*
********************** *!*"*#*$*%*&*'*(*)***+*,*-*.*/*0*1*2*3*4*5*6*7*8*9*:*;*<*=*>*?*@*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*\*]*^*_*`*a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*{*|*}*~**€**‚*ƒ*„*…*†*‡*ˆ*‰*Š*‹*Œ**Ž***‘*’*“*”*•*–*—*˜*™*š*›*œ**ž*Ÿ* *¡*¢*£*¤*¥*¦*§*¨*©*ª*«*¬*­*®*¯*°*±*²*³*´*µ*¶*·*¸*¹*º*»*¼*½*¾*¿*À*Á*Â*Ã*Ä*Å*Æ*Ç*È*É*Ê*Ë*Ì*Í*Î*Ï*Ð*Ñ*Ò*Ó*Ô*Õ*Ö*×*Ø*Ù*Ú*Û*Ü*Ý*Þ*ß*à*á*â*ã*ä*å*æ*ç*è*é*ê*ë*ì*í*î*ï*ð*ñ*ò*ó*ô*õ*ö*÷*ø*ù*ú*û*ü*ý*þ*ÿ+ +++++++++	+
++++++++++++++++++++++ +!+"+#+$+%+&+'+(+)+*+++,+-+.+/+0+1+2+3+4+5+6+7+8+9+:+;+<+=+>+?+@+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+[+\+]+^+_+`+a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+{+|+}+~++€++‚+ƒ+„+…+†+‡+ˆ+‰+Š+‹+Œ++Ž+++‘+’+“+”+•+–+—+˜+™+š+›+œ++ž+Ÿ+ +¡+¢+£+¤+¥+¦+§+¨+©+ª+«+¬+­+®+¯+°+±+²+³+´+µ+¶+·+¸+¹+º+»+¼+½+¾+¿+À+Á+Â+Ã+Ä+Å+Æ+Ç+È+É+Ê+Ë+Ì+Í+Î+Ï+Ð+Ñ+Ò+Ó+Ô+Õ+Ö+×+Ø+Ù+Ú+Û+Ü+Ý+Þ+ß+à+á+â+ã+ä+å+æ+ç+è+é+ê+ë+ì+í+î+ï+ð+ñ+ò+ó+ô+õ+ö+÷+ø+ù+ú+û+ü+ý+þ+ÿ, ,,,,,,,,,	,
,,,,,,,,,,,,,,,,,,,,,, ,!,",#,$,%,&,',(,),*,+,,,-,.,/,0,1,2,3,4,5,6,7,8,9,:,;,<,=,>,?,@,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,[,\,],^,_,`,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,{,|,},~,,€,,‚,ƒ,„,…,†,‡,ˆ,‰,Š,‹,Œ,,Ž,,,‘,’,“,”,•,–,—,˜,™,š,›,œ,,ž,Ÿ, ,¡,¢,£,¤,¥,¦,§,¨,©,ª,«,¬,­,®,¯,°,±,²,³,´,µ,¶,·,¸,¹,º,»,¼,½,¾,¿,À,Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,Ñ,Ò,Ó,Ô,Õ,Ö,×,Ø,Ù,Ú,Û,Ü,Ý,Þ,ß,à,á,â,ã,ä,å,æ,ç,è,é,ê,ë,ì,í,î,ï,ð,ñ,ò,ó,ô,õ,ö,÷,ø,ù,ú,û,ü,ý,þ,ÿ- ---------	-
---------------------- -!-"-#-$-%-&-'-(-)-*-+-,---.-/-0-1-2-3-4-5-6-7-8-9-:-;-<-=->-?-@-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-[-\-]-^-_-`-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-{-|-}-~--€--‚-ƒ-„-…-†-‡-ˆ-‰-Š-‹-Œ--Ž---‘-’-“-”-•-–-—-˜-™-š-›-œ--ž-Ÿ- -¡-¢-£-¤-¥-¦-§-¨-©-ª-«-¬-­-®-¯-°-±-²-³-´-µ-¶-·-¸-¹-º-»-¼-½-¾-¿-À-Á-Â-Ã-Ä-Å-Æ-Ç-È-É-Ê-Ë-Ì-Í-Î-Ï-Ð-Ñ-Ò-Ó-Ô-Õ-Ö-×-Ø-Ù-Ú-Û-Ü-Ý-Þ-ß-à-á-â-ã-ä-å-æ-ç-è-é-ê-ë-ì-í-î-ï-ð-ñ-ò-ó-ô-õ-ö-÷-ø-ù-ú-û-ü-ý-þ-ÿ. .........	.
...................... .!.".#.$.%.&.'.(.).*.+.,.-.../.0.1.2.3.4.5.6.7.8.9.:.;.<.=.>.?.@.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.[.\.].^._.`.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.{.|.}.~..€..‚.ƒ.„.….†.‡.ˆ.‰.Š.‹.Œ..Ž...‘.’.“.”.•.–.—.˜.™.š.›.œ..ž.Ÿ. .¡.¢.£.¤.¥.¦.§.¨.©.ª.«.¬.­.®.¯.°.±.².³.´.µ.¶.·.¸.¹.º.».¼.½.¾.¿.À.Á.Â.Ã.Ä.Å.Æ.Ç.È.É.Ê.Ë.Ì.Í.Î.Ï.Ð.Ñ.Ò.Ó.Ô.Õ.Ö.×.Ø.Ù.Ú.Û.Ü.Ý.Þ.ß.à.á.â.ã.ä.å.æ.ç.è.é.ê.ë.ì.í.î.ï.ð.ñ.ò.ó.ô.õ.ö.÷.ø.ù.ú.û.ü.ý.þ.ÿ/ /////////	/
////////////////////// /!/"/#/$/%/&/'/(/)/*/+/,/-/.///0/1/2/3/4/5/6/7/8/9/:/;/</=/>/?/@/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/[/\/]/^/_/`/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/{/|/}/~//€//‚/ƒ/„/…/†/‡/ˆ/‰/Š/‹/Œ//Ž///‘/’/“/”/•/–/—/˜/™/š/›/œ//ž/Ÿ/ /¡/¢/£/¤/¥/¦/§/¨/©/ª/«/¬/­/®/¯/°/±/²/³/´/µ/¶/·/¸/¹/º/»/¼/½/¾/¿/À/Á/Â/Ã/Ä/Å/Æ/Ç/È/É/Ê/Ë/Ì/Í/Î/Ï/Ð/Ñ/Ò/Ó/Ô/Õ/Ö/×/Ø/Ù/Ú/Û/Ü/Ý/Þ/ß/à/á/â/ã/ä/å/æ/ç/è/é/ê/ë/ì/í/î/ï/ð/ñ/ò/ó/ô/õ/ö/÷/ø/ù/ú/û/ü/ý/þ/ÿ0 000000000	0
0000000000000000000000 0!0"0#0$0%0&0'0(0)0*0+0,0-0.0/000102030405060708090:0;0<0=0>0?0@0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00€00‚0ƒ0„0…0†0‡0ˆ0‰0Š0‹0Œ00Ž000‘0’0“0”0•0–0—0˜0™0š0›0œ00ž0Ÿ0 0¡0¢0£0¤0¥0¦0§0¨0©0ª0«0¬0­0®0¯0°0±0²0³0´0µ0¶0·0¸0¹0º0»0¼0½0¾0¿0À0Á0Â0Ã0Ä0Å0Æ0Ç0È0É0Ê0Ë0Ì0Í0Î0Ï0Ð0Ñ0Ò0Ó0Ô0Õ0Ö0×0Ø0Ù0Ú0Û0Ü0Ý0Þ0ß0à0á0â0ã0ä0å0æ0ç0è0é0ê0ë0ì0í0î0ï0ð0ñ0ò0ó0ô0õ0ö0÷0ø0ù0ú0û0ü0ý0þ0ÿ1 111111111	1
1111111111111111111111 1!1"1#1$1%1&1'1(1)1*1+1,1-1.1/101112131415161718191:1;1<1=1>1?1@1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1[1\1]1^1_1`1a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1{1|1}1~11€11‚1ƒ1„1…1†1‡1ˆ1‰1Š1‹1Œ11Ž111‘1’1“1”1•1–1—1˜1™1š1›1œ11ž1Ÿ1 1¡1¢1£1¤1¥1¦1§1¨1©1ª1«1¬1­1®1¯1°1±1²1³1´1µ1¶1·1¸1¹1º1»1¼1½1¾1¿1À1Á1Â1Ã1Ä1Å1Æ1Ç1È1É1Ê1Ë1Ì1Í1Î1Ï1Ð1Ñ1Ò1Ó1Ô1Õ1Ö1×1Ø1Ù1Ú1Û1Ü1Ý1Þ1ß1à1á1â1ã1ä1å1æ1ç1è1é1ê1ë1ì1í1î1ï1ð1ñ1ò1ó1ô1õ1ö1÷1ø1ù1ú1û1ü1ý1þ1ÿ2 222222222	2
2222222222222222222222 2!2"2#2$2%2&2'2(2)2*2+2,2-2.2/202122232425262728292:2;2<2=2>2?2@2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X2Y2Z2[2\2]2^2_2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2{2|2}2~22€22‚2ƒ2„2…2†2‡2ˆ2‰2Š2‹2Œ22Ž222‘2’2“2”2•2–2—2˜2™2š2›2œ22ž2Ÿ2 2¡2¢2£2¤2¥2¦2§2¨2©2ª2«2¬2­2®2¯2°2±2²2³2´2µ2¶2·2¸2¹2º2»2¼2½2¾2¿2À2Á2Â2Ã2Ä2Å2Æ2Ç2È2É2Ê2Ë2Ì2Í2Î2Ï2Ð2Ñ2Ò2Ó2Ô2Õ2Ö2×2Ø2Ù2Ú2Û2Ü2Ý2Þ2ß2à2á2â2ã2ä2å2æ2ç2è2é2ê2ë2ì2í2î2ï2ð2ñ2ò2ó2ô2õ2ö2÷2ø2ù2ú2û2ü2ý2þ2ÿ3 333333333	3
3333333333333333333333 3!3"3#3$3%3&3'3(3)3*3+3,3-3.3/303132333435363738393:3;3<3=3>3?3@3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3[3\3]3^3_3`3a3b3c3d3e3f3g3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3{3|3}3~33€33‚3ƒ3„3…3†3‡3ˆ3‰3Š3‹3Œ33Ž333‘3’3“3”3•3–3—3˜3™3š3›3œ33ž3Ÿ3 3¡3¢3£3¤3¥3¦3§3¨3©3ª3«3¬3­3®3¯3°3±3²3³3´3µ3¶3·3¸3¹3º3»3¼3½3¾3¿3À3Á3Â3Ã3Ä3Å3Æ3Ç3È3É3Ê3Ë3Ì3Í3Î3Ï3Ð3Ñ3Ò3Ó3Ô3Õ3Ö3×3Ø3Ù3Ú3Û3Ü3Ý3Þ3ß3à3á3â3ã3ä3å3æ3ç3è3é3ê3ë3ì3í3î3ï3ð3ñ3ò3ó3ô3õ3ö3÷3ø3ù3ú3û3ü3ý3þ3ÿ4 444444444	4
4444444444444444444444 4!4"4#4$4%4&4'4(4)4*4+4,4-4.4/404142434445464748494:4;4<4=4>4?4@4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z4[4\4]4^4_4`4a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x4y4z4{4|4}4~44€44‚4ƒ4„4…4†4‡4ˆ4‰4Š4‹4Œ44Ž444‘4’4“4”4•4–4—4˜4™4š4›4œ44ž4Ÿ4 4¡4¢4£4¤4¥4¦4§4¨4©4ª4«4¬4­4®4¯4°4±4²4³4´4µ4¶4·4¸4¹4º4»4¼4½4¾4¿4À4Á4Â4Ã4Ä4Å4Æ4Ç4È4É4Ê4Ë4Ì4Í4Î4Ï4Ð4Ñ4Ò4Ó4Ô4Õ4Ö4×4Ø4Ù4Ú4Û4Ü4Ý4Þ4ß4à4á4â4ã4ä4å4æ4ç4è4é4ê4ë4ì4í4î4ï4ð4ñ4ò4ó4ô4õ4ö4÷4ø4ù4ú4û4ü4ý4þ4ÿ5 555555555	5
5555555555555555555555 5!5"5#5$5%5&5'5(5)5*5+5,5-5.5/505152535455565758595:5;5<5=5>5?5@5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Qu23u2au30u31u32u33u34u35u36u37u38u39ua9uaeu200du203cu2049u20e3u2122u2139u2194u2195u2196u2197u2198u2199u21a9u21aau231au231bu2328u23cfu23e9u23eau23ebu23ecu23edu23eeu23efu23f0u23f1u23f2u23f3u23f8u23f9u23fau24c2u25aau25abu25b6u25c0u25fbu25fcu25fdu25feu2600u2601u2602u2603u2604u260eu2611u2614u2615u2618u261du2620u2622u2623u2626u262au262eu262fu2638u2639u263au2640u2642u2648u2649u264au264bu264cu264du264eu264fu2650u2651u2652u2653u265fu2660u2663u2665u2666u2668u267bu267eu267fu2692u2693u2694u2695u2696u2697u2699u269bu269cu26a0u26a1u26a7u26aau26abu26b0u26b1u26bdu26beu26c4u26c5u26c8u26ceu26cfu26d1u26d3u26d4u26e9u26eau26f0u26f1u26f2u26f3u26f4u26f5u26f7u26f8u26f9u26fau26fdu2702u2705u2708u2709u270au270bu270cu270du270fu2712u2714u2716u271du2721u2728u2733u2734u2744u2747u274cu274eu2753u2754u2755u2757u2763u2764u2795u2796u2797u27a1u27b0u27bfu2934u2935u2b05u2b06u2b07u2b1bu2b1cu2b50u2b55u3030u303du3297u3299ue50aufe0fu1f004u1f0cfu1f170u1f171u1f17eu1f17fu1f18eu1f191u1f192u1f193u1f194u1f195u1f196u1f197u1f198u1f199u1f19au1f1e6u1f1e7u1f1e8u1f1e9u1f1eau1f1ebu1f1ecu1f1edu1f1eeu1f1efu1f1f0u1f1f1u1f1f2u1f1f3u1f1f4u1f1f5u1f1f6u1f1f7u1f1f8u1f1f9u1f1fau1f1fbu1f1fcu1f1fdu1f1feu1f1ffu1f201u1f202u1f21au1f22fu1f232u1f233u1f234u1f235u1f236u1f237u1f238u1f239u1f23au1f250u1f251u1f300u1f301u1f302u1f303u1f304u1f305u1f306u1f307u1f308u1f309u1f30au1f30bu1f30cu1f30du1f30eu1f30fu1f310u1f311u1f312u1f313u1f314u1f315u1f316u1f317u1f318u1f319u1f31au1f31bu1f31cu1f31du1f31eu1f31fu1f320u1f321u1f324u1f325u1f326u1f327u1f328u1f329u1f32au1f32bu1f32cu1f32du1f32eu1f32fu1f330u1f331u1f332u1f333u1f334u1f335u1f336u1f337u1f338u1f339u1f33au1f33bu1f33cu1f33du1f33eu1f33fu1f340u1f341u1f342u1f343u1f344u1f345u1f346u1f347u1f348u1f349u1f34au1f34bu1f34cu1f34du1f34eu1f34fu1f350u1f351u1f352u1f353u1f354u1f355u1f356u1f357u1f358u1f359u1f35au1f35bu1f35cu1f35du1f35eu1f35fu1f360u1f361u1f362u1f363u1f364u1f365u1f366u1f367u1f368u1f369u1f36au1f36bu1f36cu1f36du1f36eu1f36fu1f370u1f371u1f372u1f373u1f374u1f375u1f376u1f377u1f378u1f379u1f37au1f37bu1f37cu1f37du1f37eu1f37fu1f380u1f381u1f382u1f383u1f384u1f385u1f386u1f387u1f388u1f389u1f38au1f38bu1f38cu1f38du1f38eu1f38fu1f390u1f391u1f392u1f393u1f396u1f397u1f399u1f39au1f39bu1f39eu1f39fu1f3a0u1f3a1u1f3a2u1f3a3u1f3a4u1f3a5u1f3a6u1f3a7u1f3a8u1f3a9u1f3aau1f3abu1f3acu1f3adu1f3aeu1f3afu1f3b0u1f3b1u1f3b2u1f3b3u1f3b4u1f3b5u1f3b6u1f3b7u1f3b8u1f3b9u1f3bau1f3bbu1f3bcu1f3bdu1f3beu1f3bfu1f3c0u1f3c1u1f3c2u1f3c3u1f3c4u1f3c5u1f3c6u1f3c7u1f3c8u1f3c9u1f3cau1f3cbu1f3ccu1f3cdu1f3ceu1f3cfu1f3d0u1f3d1u1f3d2u1f3d3u1f3d4u1f3d5u1f3d6u1f3d7u1f3d8u1f3d9u1f3dau1f3dbu1f3dcu1f3ddu1f3deu1f3dfu1f3e0u1f3e1u1f3e2u1f3e3u1f3e4u1f3e5u1f3e6u1f3e7u1f3e8u1f3e9u1f3eau1f3ebu1f3ecu1f3edu1f3eeu1f3efu1f3f0u1f3f3u1f3f4u1f3f5u1f3f7u1f3f8u1f3f9u1f3fau1f3fbu1f3fcu1f3fdu1f3feu1f3ffu1f400u1f401u1f402u1f403u1f404u1f405u1f406u1f407u1f408u1f409u1f40au1f40bu1f40cu1f40du1f40eu1f40fu1f410u1f411u1f412u1f413u1f414u1f415u1f416u1f417u1f418u1f419u1f41au1f41bu1f41cu1f41du1f41eu1f41fu1f420u1f421u1f422u1f423u1f424u1f425u1f426u1f427u1f428u1f429u1f42au1f42bu1f42cu1f42du1f42eu1f42fu1f430u1f431u1f432u1f433u1f434u1f435u1f436u1f437u1f438u1f439u1f43au1f43bu1f43cu1f43du1f43eu1f43fu1f440u1f441u1f442u1f443u1f444u1f445u1f446u1f447u1f448u1f449u1f44au1f44bu1f44cu1f44du1f44eu1f44fu1f450u1f451u1f452u1f453u1f454u1f455u1f456u1f457u1f458u1f459u1f45au1f45bu1f45cu1f45du1f45eu1f45fu1f460u1f461u1f462u1f463u1f464u1f465u1f466u1f467u1f468u1f469u1f46au1f46bu1f46cu1f46du1f46eu1f46fu1f470u1f471u1f472u1f473u1f474u1f475u1f476u1f477u1f478u1f479u1f47au1f47bu1f47cu1f47du1f47eu1f47fu1f480u1f481u1f482u1f483u1f484u1f485u1f486u1f487u1f488u1f489u1f48au1f48bu1f48cu1f48du1f48eu1f48fu1f490u1f491u1f492u1f493u1f494u1f495u1f496u1f497u1f498u1f499u1f49au1f49bu1f49cu1f49du1f49eu1f49fu1f4a0u1f4a1u1f4a2u1f4a3u1f4a4u1f4a5u1f4a6u1f4a7u1f4a8u1f4a9u1f4aau1f4abu1f4acu1f4adu1f4aeu1f4afu1f4b0u1f4b1u1f4b2u1f4b3u1f4b4u1f4b5u1f4b6u1f4b7u1f4b8u1f4b9u1f4bau1f4bbu1f4bcu1f4bdu1f4beu1f4bfu1f4c0u1f4c1u1f4c2u1f4c3u1f4c4u1f4c5u1f4c6u1f4c7u1f4c8u1f4c9u1f4cau1f4cbu1f4ccu1f4cdu1f4ceu1f4cfu1f4d0u1f4d1u1f4d2u1f4d3u1f4d4u1f4d5u1f4d6u1f4d7u1f4d8u1f4d9u1f4dau1f4dbu1f4dcu1f4ddu1f4deu1f4dfu1f4e0u1f4e1u1f4e2u1f4e3u1f4e4u1f4e5u1f4e6u1f4e7u1f4e8u1f4e9u1f4eau1f4ebu1f4ecu1f4edu1f4eeu1f4efu1f4f0u1f4f1u1f4f2u1f4f3u1f4f4u1f4f5u1f4f6u1f4f7u1f4f8u1f4f9u1f4fau1f4fbu1f4fcu1f4fdu1f4ffu1f500u1f501u1f502u1f503u1f504u1f505u1f506u1f507u1f508u1f509u1f50au1f50bu1f50cu1f50du1f50eu1f50fu1f510u1f511u1f512u1f513u1f514u1f515u1f516u1f517u1f518u1f519u1f51au1f51bu1f51cu1f51du1f51eu1f51fu1f520u1f521u1f522u1f523u1f524u1f525u1f526u1f527u1f528u1f529u1f52au1f52bu1f52cu1f52du1f52eu1f52fu1f530u1f531u1f532u1f533u1f534u1f535u1f536u1f537u1f538u1f539u1f53au1f53bu1f53cu1f53du1f549u1f54au1f54bu1f54cu1f54du1f54eu1f550u1f551u1f552u1f553u1f554u1f555u1f556u1f557u1f558u1f559u1f55au1f55bu1f55cu1f55du1f55eu1f55fu1f560u1f561u1f562u1f563u1f564u1f565u1f566u1f567u1f56fu1f570u1f573u1f574u1f575u1f576u1f577u1f578u1f579u1f57au1f587u1f58au1f58bu1f58cu1f58du1f590u1f595u1f596u1f5a4u1f5a5u1f5a8u1f5b1u1f5b2u1f5bcu1f5c2u1f5c3u1f5c4u1f5d1u1f5d2u1f5d3u1f5dcu1f5ddu1f5deu1f5e1u1f5e3u1f5e8u1f5efu1f5f3u1f5fau1f5fbu1f5fcu1f5fdu1f5feu1f5ffu1f600u1f601u1f602u1f603u1f604u1f605u1f606u1f607u1f608u1f609u1f60au1f60bu1f60cu1f60du1f60eu1f60fu1f610u1f611u1f612u1f613u1f614u1f615u1f616u1f617u1f618u1f619u1f61au1f61bu1f61cu1f61du1f61eu1f61fu1f620u1f621u1f622u1f623u1f624u1f625u1f626u1f627u1f628u1f629u1f62au1f62bu1f62cu1f62du1f62eu1f62fu1f630u1f631u1f632u1f633u1f634u1f635u1f636u1f637u1f638u1f639u1f63au1f63bu1f63cu1f63du1f63eu1f63fu1f640u1f641u1f642u1f643u1f644u1f645u1f646u1f647u1f648u1f649u1f64au1f64bu1f64cu1f64du1f64eu1f64fu1f680u1f681u1f682u1f683u1f684u1f685u1f686u1f687u1f688u1f689u1f68au1f68bu1f68cu1f68du1f68eu1f68fu1f690u1f691u1f692u1f693u1f694u1f695u1f696u1f697u1f698u1f699u1f69au1f69bu1f69cu1f69du1f69eu1f69fu1f6a0u1f6a1u1f6a2u1f6a3u1f6a4u1f6a5u1f6a6u1f6a7u1f6a8u1f6a9u1f6aau1f6abu1f6acu1f6adu1f6aeu1f6afu1f6b0u1f6b1u1f6b2u1f6b3u1f6b4u1f6b5u1f6b6u1f6b7u1f6b8u1f6b9u1f6bau1f6bbu1f6bcu1f6bdu1f6beu1f6bfu1f6c0u1f6c1u1f6c2u1f6c3u1f6c4u1f6c5u1f6cbu1f6ccu1f6cdu1f6ceu1f6cfu1f6d0u1f6d1u1f6d2u1f6d5u1f6d6u1f6d7u1f6e0u1f6e1u1f6e2u1f6e3u1f6e4u1f6e5u1f6e9u1f6ebu1f6ecu1f6f0u1f6f3u1f6f4u1f6f5u1f6f6u1f6f7u1f6f8u1f6f9u1f6fau1f6fbu1f6fcu1f7e0u1f7e1u1f7e2u1f7e3u1f7e4u1f7e5u1f7e6u1f7e7u1f7e8u1f7e9u1f7eau1f7ebu1f90cu1f90du1f90eu1f90fu1f910u1f911u1f912u1f913u1f914u1f915u1f916u1f917u1f918u1f919u1f91au1f91bu1f91cu1f91du1f91eu1f91fu1f920u1f921u1f922u1f923u1f924u1f925u1f926u1f927u1f928u1f929u1f92au1f92bu1f92cu1f92du1f92eu1f92fu1f930u1f931u1f932u1f933u1f934u1f935u1f936u1f937u1f938u1f939u1f93au1f93cu1f93du1f93eu1f93fu1f940u1f941u1f942u1f943u1f944u1f945u1f947u1f948u1f949u1f94au1f94bu1f94cu1f94du1f94eu1f94fu1f950u1f951u1f952u1f953u1f954u1f955u1f956u1f957u1f958u1f959u1f95au1f95bu1f95cu1f95du1f95eu1f95fu1f960u1f961u1f962u1f963u1f964u1f965u1f966u1f967u1f968u1f969u1f96au1f96bu1f96cu1f96du1f96eu1f96fu1f970u1f971u1f972u1f973u1f974u1f975u1f976u1f977u1f978u1f97au1f97bu1f97cu1f97du1f97eu1f97fu1f980u1f981u1f982u1f983u1f984u1f985u1f986u1f987u1f988u1f989u1f98au1f98bu1f98cu1f98du1f98eu1f98fu1f990u1f991u1f992u1f993u1f994u1f995u1f996u1f997u1f998u1f999u1f99au1f99bu1f99cu1f99du1f99eu1f99fu1f9a0u1f9a1u1f9a2u1f9a3u1f9a4u1f9a5u1f9a6u1f9a7u1f9a8u1f9a9u1f9aau1f9abu1f9acu1f9adu1f9aeu1f9afu1f9b0u1f9b1u1f9b2u1f9b3u1f9b4u1f9b5u1f9b6u1f9b7u1f9b8u1f9b9u1f9bau1f9bbu1f9bcu1f9bdu1f9beu1f9bfu1f9c0u1f9c1u1f9c2u1f9c3u1f9c4u1f9c5u1f9c6u1f9c7u1f9c8u1f9c9u1f9cau1f9cbu1f9cdu1f9ceu1f9cfu1f9d0u1f9d1u1f9d2u1f9d3u1f9d4u1f9d5u1f9d6u1f9d7u1f9d8u1f9d9u1f9dau1f9dbu1f9dcu1f9ddu1f9deu1f9dfu1f9e0u1f9e1u1f9e2u1f9e3u1f9e4u1f9e5u1f9e6u1f9e7u1f9e8u1f9e9u1f9eau1f9ebu1f9ecu1f9edu1f9eeu1f9efu1f9f0u1f9f1u1f9f2u1f9f3u1f9f4u1f9f5u1f9f6u1f9f7u1f9f8u1f9f9u1f9fau1f9fbu1f9fcu1f9fdu1f9feu1f9ffu1fa70u1fa71u1fa72u1fa73u1fa74u1fa78u1fa79u1fa7au1fa80u1fa81u1fa82u1fa83u1fa84u1fa85u1fa86u1fa90u1fa91u1fa92u1fa93u1fa94u1fa95u1fa96u1fa97u1fa98u1fa99u1fa9au1fa9bu1fa9cu1fa9du1fa9eu1fa9fu1faa0u1faa1u1faa2u1faa3u1faa4u1faa5u1faa6u1faa7u1faa8u1fab0u1fab1u1fab2u1fab3u1fab4u1fab5u1fab6u1fac0u1fac1u1fac2u1fad0u1fad1u1fad2u1fad3u1fad4u1fad5u1fad6ue0062ue0063ue0065ue0067ue006cue006eue0073ue0074ue0077ue007fu1f004_layer0u1f004_layer1u1f0cf_layer1u1f0cf_layer10u1f0cf_layer2u1f0cf_layer3u1f0cf_layer4u1f0cf_layer5u1f0cf_layer6u1f0cf_layer7u1f0cf_layer8u1f0cf_layer9u1f170_layer0u1f170_layer1u1f171_layer1u1f17e_layer1u1f17f_layer1u1f18e_layer1u1f191_layer1u1f192_layer1u1f192_layer2u1f193_layer1u1f194_layer1u1f195_layer1u1f196_layer1u1f197_layer1u1f198_layer1u1f199_layer1u1f19a_layer1u1f1e6-1f1e8_layer0u1f1e6-1f1e8_layer1u1f1e6-1f1e8_layer10u1f1e6-1f1e8_layer11u1f1e6-1f1e8_layer12u1f1e6-1f1e8_layer13u1f1e6-1f1e8_layer14u1f1e6-1f1e8_layer15u1f1e6-1f1e8_layer16u1f1e6-1f1e8_layer17u1f1e6-1f1e8_layer18u1f1e6-1f1e8_layer19u1f1e6-1f1e8_layer2u1f1e6-1f1e8_layer20u1f1e6-1f1e8_layer21u1f1e6-1f1e8_layer22u1f1e6-1f1e8_layer23u1f1e6-1f1e8_layer24u1f1e6-1f1e8_layer25u1f1e6-1f1e8_layer26u1f1e6-1f1e8_layer27u1f1e6-1f1e8_layer28u1f1e6-1f1e8_layer29u1f1e6-1f1e8_layer3u1f1e6-1f1e8_layer30u1f1e6-1f1e8_layer31u1f1e6-1f1e8_layer32u1f1e6-1f1e8_layer33u1f1e6-1f1e8_layer34u1f1e6-1f1e8_layer35u1f1e6-1f1e8_layer36u1f1e6-1f1e8_layer37u1f1e6-1f1e8_layer38u1f1e6-1f1e8_layer39u1f1e6-1f1e8_layer4u1f1e6-1f1e8_layer40u1f1e6-1f1e8_layer5u1f1e6-1f1e8_layer6u1f1e6-1f1e8_layer7u1f1e6-1f1e8_layer8u1f1e6-1f1e8_layer9u1f1e6-1f1e9_layer0u1f1e6-1f1e9_layer1u1f1e6-1f1e9_layer10u1f1e6-1f1e9_layer2u1f1e6-1f1e9_layer3u1f1e6-1f1e9_layer4u1f1e6-1f1e9_layer5u1f1e6-1f1e9_layer6u1f1e6-1f1e9_layer7u1f1e6-1f1e9_layer8u1f1e6-1f1e9_layer9u1f1e6-1f1ea_layer0u1f1e6-1f1ea_layer1u1f1e6-1f1ea_layer2u1f1e6-1f1ea_layer3u1f1e6-1f1eb_layer0u1f1e6-1f1eb_layer1u1f1e6-1f1eb_layer10u1f1e6-1f1eb_layer11u1f1e6-1f1eb_layer12u1f1e6-1f1eb_layer2u1f1e6-1f1eb_layer3u1f1e6-1f1eb_layer4u1f1e6-1f1eb_layer5u1f1e6-1f1eb_layer6u1f1e6-1f1eb_layer7u1f1e6-1f1eb_layer8u1f1e6-1f1eb_layer9u1f1e6-1f1ec_layer0u1f1e6-1f1ec_layer1u1f1e6-1f1ec_layer2u1f1e6-1f1ec_layer3u1f1e6-1f1ec_layer4u1f1e6-1f1ee_layer1u1f1e6-1f1ee_layer2u1f1e6-1f1ee_layer3u1f1e6-1f1ee_layer4u1f1e6-1f1ee_layer5u1f1e6-1f1ee_layer6u1f1e6-1f1ee_layer7u1f1e6-1f1ee_layer8u1f1e6-1f1ee_layer9u1f1e6-1f1f1_layer0u1f1e6-1f1f1_layer1u1f1e6-1f1f1_layer2u1f1e6-1f1f2_layer0u1f1e6-1f1f2_layer1u1f1e6-1f1f2_layer2u1f1e6-1f1f4_layer0u1f1e6-1f1f4_layer1u1f1e6-1f1f4_layer2u1f1e6-1f1f4_layer3u1f1e6-1f1f4_layer4u1f1e6-1f1f6_layer1u1f1e6-1f1f7_layer2u1f1e6-1f1f7_layer3u1f1e6-1f1f7_layer4u1f1e6-1f1f7_layer5u1f1e6-1f1f7_layer6u1f1e6-1f1f7_layer7u1f1e6-1f1f8_layer1u1f1e6-1f1f8_layer10u1f1e6-1f1f8_layer11u1f1e6-1f1f8_layer12u1f1e6-1f1f8_layer2u1f1e6-1f1f8_layer3u1f1e6-1f1f8_layer4u1f1e6-1f1f8_layer5u1f1e6-1f1f8_layer6u1f1e6-1f1f8_layer7u1f1e6-1f1f8_layer8u1f1e6-1f1f8_layer9u1f1e6-1f1f9_layer1u1f1e6-1f1fa_layer1u1f1e6-1f1fc_layer0u1f1e6-1f1fc_layer1u1f1e6-1f1fc_layer2u1f1e6-1f1fc_layer3u1f1e6-1f1fd_layer0u1f1e6-1f1fd_layer1u1f1e6-1f1fd_layer2u1f1e6-1f1ff_layer2u1f1e6-1f1ff_layer3u1f1e6_1f1e8u1f1e6_1f1e9u1f1e6_1f1eau1f1e6_1f1ebu1f1e6_1f1ecu1f1e6_1f1eeu1f1e6_1f1f1u1f1e6_1f1f2u1f1e6_1f1f4u1f1e6_1f1f6u1f1e6_1f1f7u1f1e6_1f1f8u1f1e6_1f1f9u1f1e6_1f1fau1f1e6_1f1fcu1f1e6_1f1fdu1f1e6_1f1ffu1f1e7-1f1e6_layer0u1f1e7-1f1e6_layer1u1f1e7-1f1e6_layer2u1f1e7-1f1e7_layer3u1f1e7-1f1e9_layer1u1f1e7-1f1ea_layer2u1f1e7-1f1eb_layer0u1f1e7-1f1eb_layer1u1f1e7-1f1eb_layer2u1f1e7-1f1ec_layer0u1f1e7-1f1ec_layer1u1f1e7-1f1ec_layer2u1f1e7-1f1ed_layer0u1f1e7-1f1ed_layer1u1f1e7-1f1ee_layer1u1f1e7-1f1ee_layer2u1f1e7-1f1ee_layer3u1f1e7-1f1ee_layer4u1f1e7-1f1ee_layer5u1f1e7-1f1ef_layer0u1f1e7-1f1ef_layer1u1f1e7-1f1ef_layer2u1f1e7-1f1f1_layer1u1f1e7-1f1f1_layer10u1f1e7-1f1f1_layer2u1f1e7-1f1f1_layer3u1f1e7-1f1f1_layer4u1f1e7-1f1f1_layer5u1f1e7-1f1f1_layer6u1f1e7-1f1f1_layer7u1f1e7-1f1f1_layer8u1f1e7-1f1f1_layer9u1f1e7-1f1f2_layer1u1f1e7-1f1f2_layer10u1f1e7-1f1f2_layer11u1f1e7-1f1f2_layer12u1f1e7-1f1f2_layer13u1f1e7-1f1f2_layer14u1f1e7-1f1f2_layer2u1f1e7-1f1f2_layer3u1f1e7-1f1f2_layer4u1f1e7-1f1f2_layer5u1f1e7-1f1f2_layer6u1f1e7-1f1f2_layer7u1f1e7-1f1f2_layer8u1f1e7-1f1f2_layer9u1f1e7-1f1f3_layer1u1f1e7-1f1f3_layer2u1f1e7-1f1f3_layer3u1f1e7-1f1f3_layer4u1f1e7-1f1f3_layer5u1f1e7-1f1f4_layer10u1f1e7-1f1f4_layer11u1f1e7-1f1f4_layer12u1f1e7-1f1f4_layer13u1f1e7-1f1f4_layer14u1f1e7-1f1f4_layer15u1f1e7-1f1f4_layer16u1f1e7-1f1f4_layer17u1f1e7-1f1f4_layer18u1f1e7-1f1f4_layer19u1f1e7-1f1f4_layer20u1f1e7-1f1f4_layer21u1f1e7-1f1f4_layer22u1f1e7-1f1f4_layer23u1f1e7-1f1f4_layer24u1f1e7-1f1f4_layer25u1f1e7-1f1f4_layer26u1f1e7-1f1f4_layer27u1f1e7-1f1f4_layer3u1f1e7-1f1f4_layer4u1f1e7-1f1f4_layer5u1f1e7-1f1f4_layer6u1f1e7-1f1f4_layer7u1f1e7-1f1f4_layer8u1f1e7-1f1f4_layer9u1f1e7-1f1f6_layer0u1f1e7-1f1f6_layer1u1f1e7-1f1f6_layer2u1f1e7-1f1f6_layer3u1f1e7-1f1f6_layer4u1f1e7-1f1f7_layer1u1f1e7-1f1f7_layer2u1f1e7-1f1f7_layer3u1f1e7-1f1f7_layer4u1f1e7-1f1f7_layer5u1f1e7-1f1f7_layer6u1f1e7-1f1f8_layer0u1f1e7-1f1f8_layer1u1f1e7-1f1f8_layer2u1f1e7-1f1f9_layer0u1f1e7-1f1f9_layer1u1f1e7-1f1f9_layer2u1f1e7-1f1fb_layer0u1f1e7-1f1fb_layer1u1f1e7-1f1fb_layer2u1f1e7-1f1fc_layer1u1f1e7-1f1fc_layer2u1f1e7-1f1fe_layer0u1f1e7-1f1fe_layer1u1f1e7-1f1fe_layer2u1f1e7-1f1fe_layer3u1f1e7-1f1fe_layer4u1f1e7-1f1fe_layer5u1f1e7-1f1ff_layer1u1f1e7-1f1ff_layer10u1f1e7-1f1ff_layer11u1f1e7-1f1ff_layer12u1f1e7-1f1ff_layer13u1f1e7-1f1ff_layer14u1f1e7-1f1ff_layer15u1f1e7-1f1ff_layer16u1f1e7-1f1ff_layer17u1f1e7-1f1ff_layer18u1f1e7-1f1ff_layer19u1f1e7-1f1ff_layer2u1f1e7-1f1ff_layer20u1f1e7-1f1ff_layer21u1f1e7-1f1ff_layer22u1f1e7-1f1ff_layer23u1f1e7-1f1ff_layer24u1f1e7-1f1ff_layer25u1f1e7-1f1ff_layer26u1f1e7-1f1ff_layer27u1f1e7-1f1ff_layer28u1f1e7-1f1ff_layer29u1f1e7-1f1ff_layer3u1f1e7-1f1ff_layer30u1f1e7-1f1ff_layer31u1f1e7-1f1ff_layer32u1f1e7-1f1ff_layer33u1f1e7-1f1ff_layer34u1f1e7-1f1ff_layer35u1f1e7-1f1ff_layer36u1f1e7-1f1ff_layer37u1f1e7-1f1ff_layer38u1f1e7-1f1ff_layer39u1f1e7-1f1ff_layer4u1f1e7-1f1ff_layer40u1f1e7-1f1ff_layer41u1f1e7-1f1ff_layer42u1f1e7-1f1ff_layer5u1f1e7-1f1ff_layer6u1f1e7-1f1ff_layer7u1f1e7-1f1ff_layer8u1f1e7-1f1ff_layer9u1f1e7_1f1e6u1f1e7_1f1e7u1f1e7_1f1e9u1f1e7_1f1eau1f1e7_1f1ebu1f1e7_1f1ecu1f1e7_1f1edu1f1e7_1f1eeu1f1e7_1f1efu1f1e7_1f1f1u1f1e7_1f1f2u1f1e7_1f1f3u1f1e7_1f1f4u1f1e7_1f1f6u1f1e7_1f1f7u1f1e7_1f1f8u1f1e7_1f1f9u1f1e7_1f1fbu1f1e7_1f1fcu1f1e7_1f1feu1f1e7_1f1ffu1f1e8-1f1e6_layer0u1f1e8-1f1e6_layer1u1f1e8-1f1e6_layer2u1f1e8-1f1e8_layer1u1f1e8-1f1e8_layer2u1f1e8-1f1e8_layer3u1f1e8-1f1e9_layer0u1f1e8-1f1e9_layer1u1f1e8-1f1e9_layer2u1f1e8-1f1eb_layer0u1f1e8-1f1eb_layer1u1f1e8-1f1eb_layer2u1f1e8-1f1eb_layer3u1f1e8-1f1eb_layer4u1f1e8-1f1ec_layer0u1f1e8-1f1ec_layer1u1f1e8-1f1ec_layer2u1f1e8-1f1ed_layer0u1f1e8-1f1ed_layer1u1f1e8-1f1f0_layer1u1f1e8-1f1f1_layer0u1f1e8-1f1f1_layer1u1f1e8-1f1f1_layer3u1f1e8-1f1f2_layer0u1f1e8-1f1f2_layer2u1f1e8-1f1f3_layer1u1f1e8-1f1f4_layer0u1f1e8-1f1f4_layer1u1f1e8-1f1f4_layer2u1f1e8-1f1f5_layer0u1f1e8-1f1f7_layer1u1f1e8-1f1f7_layer10u1f1e8-1f1f7_layer3u1f1e8-1f1f7_layer4u1f1e8-1f1f7_layer5u1f1e8-1f1f7_layer6u1f1e8-1f1f7_layer7u1f1e8-1f1f7_layer8u1f1e8-1f1f7_layer9u1f1e8-1f1fa_layer1u1f1e8-1f1fa_layer2u1f1e8-1f1fa_layer3u1f1e8-1f1fb_layer0u1f1e8-1f1fb_layer1u1f1e8-1f1fb_layer2u1f1e8-1f1fb_layer3u1f1e8-1f1fc_layer0u1f1e8-1f1fc_layer1u1f1e8-1f1fc_layer2u1f1e8-1f1fd_layer1u1f1e8-1f1fd_layer2u1f1e8-1f1fd_layer3u1f1e8-1f1fd_layer4u1f1e8-1f1fe_layer1u1f1e8-1f1fe_layer2u1f1e8-1f1fe_layer3u1f1e8-1f1ff_layer0u1f1e8-1f1ff_layer1u1f1e8-1f1ff_layer2u1f1e8_1f1e6u1f1e8_1f1e8u1f1e8_1f1e9u1f1e8_1f1ebu1f1e8_1f1ecu1f1e8_1f1edu1f1e8_1f1eeu1f1e8_1f1f0u1f1e8_1f1f1u1f1e8_1f1f2u1f1e8_1f1f3u1f1e8_1f1f4u1f1e8_1f1f5u1f1e8_1f1f7u1f1e8_1f1fau1f1e8_1f1fbu1f1e8_1f1fcu1f1e8_1f1fdu1f1e8_1f1feu1f1e8_1f1ffu1f1e8_layer1u1f1e9-1f1ea_layer0u1f1e9-1f1ea_layer1u1f1e9-1f1ec_layer1u1f1e9-1f1ec_layer10u1f1e9-1f1ec_layer11u1f1e9-1f1ec_layer12u1f1e9-1f1ec_layer13u1f1e9-1f1ec_layer2u1f1e9-1f1ec_layer3u1f1e9-1f1ec_layer4u1f1e9-1f1ec_layer5u1f1e9-1f1ec_layer6u1f1e9-1f1ec_layer7u1f1e9-1f1ec_layer8u1f1e9-1f1ec_layer9u1f1e9-1f1ef_layer1u1f1e9-1f1ef_layer3u1f1e9-1f1f0_layer0u1f1e9-1f1f0_layer1u1f1e9-1f1f2_layer1u1f1e9-1f1f2_layer10u1f1e9-1f1f2_layer11u1f1e9-1f1f2_layer12u1f1e9-1f1f2_layer13u1f1e9-1f1f2_layer14u1f1e9-1f1f2_layer15u1f1e9-1f1f2_layer2u1f1e9-1f1f2_layer3u1f1e9-1f1f2_layer4u1f1e9-1f1f2_layer5u1f1e9-1f1f2_layer6u1f1e9-1f1f2_layer7u1f1e9-1f1f2_layer8u1f1e9-1f1f2_layer9u1f1e9-1f1f4_layer1u1f1e9-1f1f4_layer10u1f1e9-1f1f4_layer11u1f1e9-1f1f4_layer12u1f1e9-1f1f4_layer13u1f1e9-1f1f4_layer14u1f1e9-1f1f4_layer15u1f1e9-1f1f4_layer16u1f1e9-1f1f4_layer17u1f1e9-1f1f4_layer18u1f1e9-1f1f4_layer19u1f1e9-1f1f4_layer2u1f1e9-1f1f4_layer20u1f1e9-1f1f4_layer21u1f1e9-1f1f4_layer22u1f1e9-1f1f4_layer4u1f1e9-1f1f4_layer5u1f1e9-1f1f4_layer6u1f1e9-1f1f4_layer7u1f1e9-1f1f4_layer8u1f1e9-1f1f4_layer9u1f1e9-1f1ff_layer0u1f1e9-1f1ff_layer1u1f1e9-1f1ff_layer2u1f1e9-1f1ff_layer3u1f1e9_1f1eau1f1e9_1f1ecu1f1e9_1f1efu1f1e9_1f1f0u1f1e9_1f1f2u1f1e9_1f1f4u1f1e9_1f1ffu1f1e9_layer1u1f1ea-1f1e6_layer1u1f1ea-1f1e6_layer2u1f1ea-1f1e6_layer3u1f1ea-1f1e6_layer4u1f1ea-1f1e6_layer5u1f1ea-1f1e6_layer6u1f1ea-1f1e6_layer7u1f1ea-1f1e8_layer1u1f1ea-1f1e8_layer10u1f1ea-1f1e8_layer11u1f1ea-1f1e8_layer12u1f1ea-1f1e8_layer13u1f1ea-1f1e8_layer14u1f1ea-1f1e8_layer15u1f1ea-1f1e8_layer16u1f1ea-1f1e8_layer2u1f1ea-1f1e8_layer3u1f1ea-1f1e8_layer4u1f1ea-1f1e8_layer5u1f1ea-1f1e8_layer6u1f1ea-1f1e8_layer7u1f1ea-1f1e8_layer8u1f1ea-1f1e8_layer9u1f1ea-1f1ea_layer2u1f1ea-1f1ec_layer3u1f1ea-1f1ec_layer4u1f1ea-1f1ec_layer5u1f1ea-1f1ec_layer6u1f1ea-1f1ec_layer7u1f1ea-1f1ed_layer0u1f1ea-1f1ed_layer1u1f1ea-1f1ed_layer2u1f1ea-1f1ed_layer3u1f1ea-1f1ed_layer4u1f1ea-1f1f7_layer0u1f1ea-1f1f7_layer1u1f1ea-1f1f7_layer2u1f1ea-1f1f7_layer3u1f1ea-1f1f9_layer4u1f1ea-1f1f9_layer5u1f1ea-1f1f9_layer6u1f1ea-1f1f9_layer7u1f1ea-1f1f9_layer8u1f1ea-1f1fa_layer1u1f1ea_1f1e6u1f1ea_1f1e8u1f1ea_1f1eau1f1ea_1f1ecu1f1ea_1f1edu1f1ea_1f1f7u1f1ea_1f1f8u1f1ea_1f1f9u1f1ea_1f1fau1f1ea_layer1u1f1eb-1f1ee_layer0u1f1eb-1f1ee_layer1u1f1eb-1f1ee_layer2u1f1eb-1f1ef_layer1u1f1eb-1f1ef_layer10u1f1eb-1f1ef_layer11u1f1eb-1f1ef_layer12u1f1eb-1f1ef_layer13u1f1eb-1f1ef_layer14u1f1eb-1f1ef_layer2u1f1eb-1f1ef_layer3u1f1eb-1f1ef_layer4u1f1eb-1f1ef_layer5u1f1eb-1f1ef_layer6u1f1eb-1f1ef_layer7u1f1eb-1f1ef_layer8u1f1eb-1f1ef_layer9u1f1eb-1f1f0_layer1u1f1eb-1f1f0_layer10u1f1eb-1f1f0_layer11u1f1eb-1f1f0_layer12u1f1eb-1f1f0_layer13u1f1eb-1f1f0_layer14u1f1eb-1f1f0_layer2u1f1eb-1f1f0_layer3u1f1eb-1f1f0_layer4u1f1eb-1f1f0_layer5u1f1eb-1f1f0_layer6u1f1eb-1f1f0_layer7u1f1eb-1f1f0_layer8u1f1eb-1f1f0_layer9u1f1eb-1f1f2_layer1u1f1eb-1f1f4_layer0u1f1eb-1f1f4_layer1u1f1eb-1f1f4_layer2u1f1eb-1f1f4_layer3u1f1eb_1f1eeu1f1eb_1f1efu1f1eb_1f1f0u1f1eb_1f1f2u1f1eb_1f1f4u1f1eb_1f1f7u1f1eb_layer1u1f1ec-1f1e7_layer0u1f1ec-1f1e7_layer1u1f1ec-1f1e7_layer2u1f1ec-1f1e7_layer3u1f1ec-1f1e9_layer1u1f1ec-1f1e9_layer2u1f1ec-1f1e9_layer3u1f1ec-1f1e9_layer4u1f1ec-1f1e9_layer5u1f1ec-1f1ea_layer0u1f1ec-1f1ea_layer1u1f1ec-1f1ea_layer2u1f1ec-1f1ea_layer3u1f1ec-1f1ea_layer4u1f1ec-1f1eb_layer0u1f1ec-1f1eb_layer1u1f1ec-1f1eb_layer2u1f1ec-1f1ec_layer1u1f1ec-1f1ec_layer2u1f1ec-1f1ed_layer1u1f1ec-1f1ed_layer2u1f1ec-1f1ed_layer3u1f1ec-1f1ee_layer0u1f1ec-1f1ee_layer1u1f1ec-1f1ee_layer10u1f1ec-1f1ee_layer11u1f1ec-1f1ee_layer12u1f1ec-1f1ee_layer13u1f1ec-1f1ee_layer14u1f1ec-1f1ee_layer15u1f1ec-1f1ee_layer16u1f1ec-1f1ee_layer2u1f1ec-1f1ee_layer3u1f1ec-1f1ee_layer4u1f1ec-1f1ee_layer5u1f1ec-1f1ee_layer6u1f1ec-1f1ee_layer7u1f1ec-1f1ee_layer8u1f1ec-1f1ee_layer9u1f1ec-1f1f1_layer0u1f1ec-1f1f1_layer2u1f1ec-1f1f1_layer3u1f1ec-1f1f2_layer2u1f1ec-1f1f2_layer3u1f1ec-1f1f5_layer1u1f1ec-1f1f5_layer2u1f1ec-1f1f5_layer3u1f1ec-1f1f6_layer10u1f1ec-1f1f6_layer11u1f1ec-1f1f6_layer12u1f1ec-1f1f6_layer13u1f1ec-1f1f6_layer14u1f1ec-1f1f6_layer15u1f1ec-1f1f6_layer16u1f1ec-1f1f6_layer3u1f1ec-1f1f6_layer4u1f1ec-1f1f6_layer5u1f1ec-1f1f6_layer6u1f1ec-1f1f6_layer7u1f1ec-1f1f6_layer8u1f1ec-1f1f6_layer9u1f1ec-1f1f7_layer0u1f1ec-1f1f7_layer1u1f1ec-1f1f7_layer2u1f1ec-1f1f7_layer3u1f1ec-1f1f8_layer1u1f1ec-1f1f8_layer10u1f1ec-1f1f8_layer11u1f1ec-1f1f8_layer12u1f1ec-1f1f8_layer13u1f1ec-1f1f8_layer14u1f1ec-1f1f8_layer15u1f1ec-1f1f8_layer16u1f1ec-1f1f8_layer17u1f1ec-1f1f8_layer18u1f1ec-1f1f8_layer19u1f1ec-1f1f8_layer2u1f1ec-1f1f8_layer20u1f1ec-1f1f8_layer21u1f1ec-1f1f8_layer3u1f1ec-1f1f8_layer4u1f1ec-1f1f8_layer5u1f1ec-1f1f8_layer6u1f1ec-1f1f8_layer7u1f1ec-1f1f8_layer8u1f1ec-1f1f8_layer9u1f1ec-1f1f9_layer0u1f1ec-1f1f9_layer10u1f1ec-1f1f9_layer11u1f1ec-1f1f9_layer12u1f1ec-1f1f9_layer13u1f1ec-1f1f9_layer14u1f1ec-1f1f9_layer2u1f1ec-1f1f9_layer3u1f1ec-1f1f9_layer4u1f1ec-1f1f9_layer5u1f1ec-1f1f9_layer6u1f1ec-1f1f9_layer7u1f1ec-1f1f9_layer8u1f1ec-1f1f9_layer9u1f1ec-1f1fa_layer1u1f1ec-1f1fa_layer10u1f1ec-1f1fa_layer11u1f1ec-1f1fa_layer12u1f1ec-1f1fa_layer13u1f1ec-1f1fa_layer14u1f1ec-1f1fa_layer15u1f1ec-1f1fa_layer16u1f1ec-1f1fa_layer2u1f1ec-1f1fa_layer3u1f1ec-1f1fa_layer4u1f1ec-1f1fa_layer5u1f1ec-1f1fa_layer6u1f1ec-1f1fa_layer7u1f1ec-1f1fa_layer8u1f1ec-1f1fa_layer9u1f1ec-1f1fc_layer0u1f1ec-1f1fc_layer1u1f1ec-1f1fc_layer2u1f1ec-1f1fc_layer3u1f1ec-1f1fe_layer1u1f1ec-1f1fe_layer2u1f1ec-1f1fe_layer3u1f1ec-1f1fe_layer4u1f1ec_1f1e6u1f1ec_1f1e7u1f1ec_1f1e9u1f1ec_1f1eau1f1ec_1f1ebu1f1ec_1f1ecu1f1ec_1f1edu1f1ec_1f1eeu1f1ec_1f1f1u1f1ec_1f1f2u1f1ec_1f1f3u1f1ec_1f1f5u1f1ec_1f1f6u1f1ec_1f1f7u1f1ec_1f1f8u1f1ec_1f1f9u1f1ec_1f1fau1f1ec_1f1fcu1f1ec_1f1feu1f1ec_layer1u1f1ed-1f1f0_layer1u1f1ed-1f1f0_layer2u1f1ed-1f1f0_layer3u1f1ed-1f1f0_layer4u1f1ed-1f1f3_layer2u1f1ed-1f1f7_layer0u1f1ed-1f1f7_layer1u1f1ed-1f1f7_layer3u1f1ed-1f1f7_layer4u1f1ed-1f1f7_layer5u1f1ed-1f1f7_layer6u1f1ed-1f1f9_layer10u1f1ed-1f1f9_layer11u1f1ed-1f1f9_layer12u1f1ed-1f1f9_layer13u1f1ed-1f1f9_layer2u1f1ed-1f1f9_layer3u1f1ed-1f1f9_layer4u1f1ed-1f1f9_layer5u1f1ed-1f1f9_layer6u1f1ed-1f1f9_layer7u1f1ed-1f1f9_layer8u1f1ed-1f1f9_layer9u1f1ed-1f1fa_layer2u1f1ed_1f1f0u1f1ed_1f1f2u1f1ed_1f1f3u1f1ed_1f1f7u1f1ed_1f1f9u1f1ed_1f1fau1f1ed_layer1u1f1ee-1f1e8_layer10u1f1ee-1f1e8_layer11u1f1ee-1f1e8_layer12u1f1ee-1f1e8_layer13u1f1ee-1f1e8_layer14u1f1ee-1f1e8_layer3u1f1ee-1f1e8_layer4u1f1ee-1f1e8_layer5u1f1ee-1f1e8_layer6u1f1ee-1f1e8_layer7u1f1ee-1f1e8_layer8u1f1ee-1f1e8_layer9u1f1ee-1f1e9_layer1u1f1ee-1f1f1_layer0u1f1ee-1f1f1_layer1u1f1ee-1f1f1_layer2u1f1ee-1f1f1_layer3u1f1ee-1f1f2_layer1u1f1ee-1f1f2_layer2u1f1ee-1f1f2_layer3u1f1ee-1f1f2_layer4u1f1ee-1f1f3_layer2u1f1ee-1f1f3_layer3u1f1ee-1f1f3_layer4u1f1ee-1f1f3_layer5u1f1ee-1f1f3_layer6u1f1ee-1f1f6_layer3u1f1ee-1f1f6_layer4u1f1ee-1f1f7_layer3u1f1ee-1f1f7_layer4u1f1ee-1f1f7_layer5u1f1ee-1f1f7_layer6u1f1ee-1f1f8_layer0u1f1ee_1f1e8u1f1ee_1f1e9u1f1ee_1f1eau1f1ee_1f1f1u1f1ee_1f1f2u1f1ee_1f1f3u1f1ee_1f1f4u1f1ee_1f1f6u1f1ee_1f1f7u1f1ee_1f1f8u1f1ee_1f1f9u1f1ee_layer1u1f1ef-1f1ea_layer1u1f1ef-1f1ea_layer2u1f1ef-1f1ea_layer3u1f1ef-1f1ea_layer4u1f1ef-1f1ea_layer5u1f1ef-1f1ea_layer6u1f1ef-1f1ea_layer7u1f1ef-1f1f2_layer1u1f1ef-1f1f2_layer2u1f1ef-1f1f4_layer3u1f1ef-1f1f4_layer4u1f1ef-1f1f5_layer1u1f1ef_1f1eau1f1ef_1f1f2u1f1ef_1f1f4u1f1ef_1f1f5u1f1ef_layer1u1f1f0-1f1ea_layer10u1f1f0-1f1ea_layer3u1f1f0-1f1ea_layer4u1f1f0-1f1ea_layer5u1f1f0-1f1ea_layer6u1f1f0-1f1ea_layer7u1f1f0-1f1ea_layer8u1f1f0-1f1ea_layer9u1f1f0-1f1ec_layer1u1f1f0-1f1ec_layer2u1f1f0-1f1ec_layer3u1f1f0-1f1ec_layer4u1f1f0-1f1ed_layer1u1f1f0-1f1ed_layer2u1f1f0-1f1ed_layer3u1f1f0-1f1ee_layer1u1f1f0-1f1ee_layer2u1f1f0-1f1ee_layer3u1f1f0-1f1ee_layer4u1f1f0-1f1ee_layer5u1f1f0-1f1ee_layer6u1f1f0-1f1ee_layer7u1f1f0-1f1ee_layer8u1f1f0-1f1ee_layer9u1f1f0-1f1f2_layer5u1f1f0-1f1f2_layer6u1f1f0-1f1f3_layer0u1f1f0-1f1f3_layer1u1f1f0-1f1f3_layer2u1f1f0-1f1f3_layer3u1f1f0-1f1f3_layer4u1f1f0-1f1f5_layer1u1f1f0-1f1f5_layer2u1f1f0-1f1f5_layer3u1f1f0-1f1f7_layer1u1f1f0-1f1f7_layer2u1f1f0-1f1f7_layer3u1f1f0-1f1fc_layer3u1f1f0-1f1fe_layer1u1f1f0-1f1fe_layer10u1f1f0-1f1fe_layer11u1f1f0-1f1fe_layer12u1f1f0-1f1fe_layer13u1f1f0-1f1fe_layer2u1f1f0-1f1fe_layer3u1f1f0-1f1fe_layer4u1f1f0-1f1fe_layer5u1f1f0-1f1fe_layer6u1f1f0-1f1fe_layer7u1f1f0-1f1fe_layer8u1f1f0-1f1fe_layer9u1f1f0-1f1ff_layer1u1f1f0-1f1ff_layer2u1f1f0-1f1ff_layer3u1f1f0-1f1ff_layer4u1f1f0-1f1ff_layer5u1f1f0-1f1ff_layer6u1f1f0-1f1ff_layer7u1f1f0-1f1ff_layer8u1f1f0-1f1ff_layer9u1f1f0_1f1eau1f1f0_1f1ecu1f1f0_1f1edu1f1f0_1f1eeu1f1f0_1f1f2u1f1f0_1f1f3u1f1f0_1f1f5u1f1f0_1f1f7u1f1f0_1f1fcu1f1f0_1f1feu1f1f0_1f1ffu1f1f0_layer1u1f1f1-1f1e6_layer0u1f1f1-1f1e6_layer1u1f1f1-1f1e6_layer2u1f1f1-1f1e7_layer2u1f1f1-1f1e7_layer3u1f1f1-1f1e8_layer1u1f1f1-1f1e8_layer2u1f1f1-1f1e8_layer3u1f1f1-1f1ee_layer2u1f1f1-1f1ee_layer3u1f1f1-1f1ee_layer4u1f1f1-1f1ee_layer5u1f1f1-1f1ee_layer6u1f1f1-1f1f0_layer1u1f1f1-1f1f0_layer2u1f1f1-1f1f0_layer3u1f1f1-1f1f0_layer4u1f1f1-1f1f7_layer0u1f1f1-1f1f7_layer1u1f1f1-1f1f7_layer2u1f1f1-1f1f7_layer3u1f1f1-1f1f8_layer3u1f1f1-1f1f8_layer4u1f1f1-1f1fb_layer0u1f1f1-1f1fe_layer0u1f1f1-1f1fe_layer1u1f1f1-1f1fe_layer2u1f1f1-1f1fe_layer3u1f1f1-1f1fe_layer4u1f1f1_1f1e6u1f1f1_1f1e7u1f1f1_1f1e8u1f1f1_1f1eeu1f1f1_1f1f0u1f1f1_1f1f7u1f1f1_1f1f8u1f1f1_1f1f9u1f1f1_1f1fau1f1f1_1f1fbu1f1f1_1f1feu1f1f1_layer1u1f1f2-1f1e6_layer1u1f1f2-1f1e9_layer3u1f1f2-1f1e9_layer4u1f1f2-1f1e9_layer5u1f1f2-1f1e9_layer6u1f1f2-1f1e9_layer7u1f1f2-1f1e9_layer8u1f1f2-1f1e9_layer9u1f1f2-1f1ea_layer2u1f1f2-1f1ea_layer3u1f1f2-1f1ea_layer4u1f1f2-1f1ea_layer5u1f1f2-1f1ea_layer6u1f1f2-1f1ea_layer7u1f1f2-1f1ec_layer1u1f1f2-1f1ec_layer2u1f1f2-1f1ed_layer1u1f1f2-1f1ed_layer2u1f1f2-1f1ed_layer3u1f1f2-1f1f0_layer0u1f1f2-1f1f0_layer1u1f1f2-1f1f0_layer2u1f1f2-1f1f2_layer3u1f1f2-1f1f3_layer2u1f1f2-1f1f3_layer3u1f1f2-1f1f3_layer4u1f1f2-1f1f4_layer1u1f1f2-1f1f4_layer2u1f1f2-1f1f4_layer3u1f1f2-1f1f5_layer1u1f1f2-1f1f5_layer10u1f1f2-1f1f5_layer11u1f1f2-1f1f5_layer12u1f1f2-1f1f5_layer13u1f1f2-1f1f5_layer14u1f1f2-1f1f5_layer15u1f1f2-1f1f5_layer16u1f1f2-1f1f5_layer17u1f1f2-1f1f5_layer18u1f1f2-1f1f5_layer19u1f1f2-1f1f5_layer2u1f1f2-1f1f5_layer20u1f1f2-1f1f5_layer21u1f1f2-1f1f5_layer22u1f1f2-1f1f5_layer23u1f1f2-1f1f5_layer24u1f1f2-1f1f5_layer25u1f1f2-1f1f5_layer26u1f1f2-1f1f5_layer3u1f1f2-1f1f5_layer4u1f1f2-1f1f5_layer5u1f1f2-1f1f5_layer6u1f1f2-1f1f5_layer7u1f1f2-1f1f5_layer8u1f1f2-1f1f5_layer9u1f1f2-1f1f6_layer1u1f1f2-1f1f6_layer3u1f1f2-1f1f7_layer1u1f1f2-1f1f7_layer2u1f1f2-1f1f7_layer3u1f1f2-1f1f8_layer1u1f1f2-1f1f8_layer2u1f1f2-1f1f8_layer3u1f1f2-1f1f8_layer4u1f1f2-1f1f8_layer5u1f1f2-1f1f8_layer6u1f1f2-1f1f8_layer7u1f1f2-1f1f8_layer8u1f1f2-1f1f9_layer10u1f1f2-1f1f9_layer2u1f1f2-1f1f9_layer3u1f1f2-1f1f9_layer4u1f1f2-1f1f9_layer5u1f1f2-1f1f9_layer6u1f1f2-1f1f9_layer7u1f1f2-1f1f9_layer8u1f1f2-1f1f9_layer9u1f1f2-1f1fa_layer3u1f1f2-1f1fb_layer1u1f1f2-1f1fb_layer2u1f1f2-1f1fc_layer3u1f1f2-1f1fd_layer0u1f1f2-1f1fd_layer1u1f1f2-1f1fd_layer2u1f1f2-1f1fd_layer3u1f1f2-1f1fd_layer4u1f1f2-1f1fd_layer5u1f1f2-1f1fd_layer6u1f1f2-1f1fd_layer7u1f1f2-1f1fd_layer8u1f1f2-1f1fd_layer9u1f1f2-1f1fe_layer1u1f1f2-1f1fe_layer2u1f1f2-1f1fe_layer3u1f1f2-1f1fe_layer4u1f1f2-1f1ff_layer4u1f1f2-1f1ff_layer5u1f1f2-1f1ff_layer6u1f1f2-1f1ff_layer7u1f1f2-1f1ff_layer8u1f1f2_1f1e6u1f1f2_1f1e8u1f1f2_1f1e9u1f1f2_1f1eau1f1f2_1f1ebu1f1f2_1f1ecu1f1f2_1f1edu1f1f2_1f1f0u1f1f2_1f1f1u1f1f2_1f1f2u1f1f2_1f1f3u1f1f2_1f1f4u1f1f2_1f1f5u1f1f2_1f1f6u1f1f2_1f1f7u1f1f2_1f1f8u1f1f2_1f1f9u1f1f2_1f1fau1f1f2_1f1fbu1f1f2_1f1fcu1f1f2_1f1fdu1f1f2_1f1feu1f1f2_1f1ffu1f1f2_layer1u1f1f3-1f1e6_layer0u1f1f3-1f1e6_layer1u1f1f3-1f1e6_layer2u1f1f3-1f1e6_layer3u1f1f3-1f1e6_layer4u1f1f3-1f1e6_layer5u1f1f3-1f1e6_layer6u1f1f3-1f1e8_layer3u1f1f3-1f1e8_layer4u1f1f3-1f1e8_layer5u1f1f3-1f1e8_layer6u1f1f3-1f1e8_layer7u1f1f3-1f1ea_layer1u1f1f3-1f1eb_layer0u1f1f3-1f1eb_layer2u1f1f3-1f1eb_layer3u1f1f3-1f1ec_layer0u1f1f3-1f1ee_layer10u1f1f3-1f1ee_layer11u1f1f3-1f1ee_layer12u1f1f3-1f1ee_layer13u1f1f3-1f1ee_layer14u1f1f3-1f1ee_layer2u1f1f3-1f1ee_layer4u1f1f3-1f1ee_layer5u1f1f3-1f1ee_layer6u1f1f3-1f1ee_layer7u1f1f3-1f1ee_layer8u1f1f3-1f1ee_layer9u1f1f3-1f1f5_layer0u1f1f3-1f1f5_layer1u1f1f3-1f1f5_layer2u1f1f3-1f1f7_layer2u1f1f3-1f1fa_layer5u1f1f3-1f1fa_layer6u1f1f3-1f1ff_layer1u1f1f3-1f1ff_layer2u1f1f3_1f1e6u1f1f3_1f1e8u1f1f3_1f1eau1f1f3_1f1ebu1f1f3_1f1ecu1f1f3_1f1eeu1f1f3_1f1f1u1f1f3_1f1f4u1f1f3_1f1f5u1f1f3_1f1f7u1f1f3_1f1fau1f1f3_1f1ffu1f1f3_layer1u1f1f4-1f1f2_layer0u1f1f4-1f1f2_layer1u1f1f4-1f1f2_layer2u1f1f4-1f1f2_layer3u1f1f4-1f1f2_layer4u1f1f4_1f1f2u1f1f4_layer1u1f1f5-1f1e6_layer0u1f1f5-1f1e6_layer1u1f1f5-1f1e6_layer2u1f1f5-1f1eb_layer2u1f1f5-1f1eb_layer3u1f1f5-1f1eb_layer4u1f1f5-1f1eb_layer5u1f1f5-1f1ec_layer2u1f1f5-1f1ec_layer3u1f1f5-1f1ed_layer2u1f1f5-1f1ed_layer3u1f1f5-1f1ed_layer4u1f1f5-1f1f0_layer0u1f1f5-1f1f0_layer2u1f1f5-1f1f0_layer3u1f1f5-1f1f2_layer0u1f1f5-1f1f2_layer1u1f1f5-1f1f2_layer10u1f1f5-1f1f2_layer11u1f1f5-1f1f2_layer2u1f1f5-1f1f2_layer3u1f1f5-1f1f2_layer4u1f1f5-1f1f2_layer5u1f1f5-1f1f2_layer6u1f1f5-1f1f2_layer7u1f1f5-1f1f2_layer8u1f1f5-1f1f2_layer9u1f1f5-1f1f3_layer1u1f1f5-1f1f3_layer10u1f1f5-1f1f3_layer11u1f1f5-1f1f3_layer12u1f1f5-1f1f3_layer13u1f1f5-1f1f3_layer14u1f1f5-1f1f3_layer15u1f1f5-1f1f3_layer16u1f1f5-1f1f3_layer17u1f1f5-1f1f3_layer18u1f1f5-1f1f3_layer19u1f1f5-1f1f3_layer2u1f1f5-1f1f3_layer3u1f1f5-1f1f3_layer4u1f1f5-1f1f3_layer5u1f1f5-1f1f3_layer6u1f1f5-1f1f3_layer7u1f1f5-1f1f3_layer8u1f1f5-1f1f3_layer9u1f1f5-1f1f7_layer0u1f1f5-1f1f7_layer1u1f1f5-1f1f7_layer2u1f1f5-1f1f7_layer3u1f1f5-1f1f9_layer1u1f1f5-1f1f9_layer2u1f1f5-1f1f9_layer3u1f1f5-1f1f9_layer4u1f1f5-1f1f9_layer5u1f1f5-1f1f9_layer6u1f1f5-1f1f9_layer7u1f1f5-1f1fc_layer1u1f1f5-1f1fe_layer10u1f1f5-1f1fe_layer11u1f1f5-1f1fe_layer12u1f1f5-1f1fe_layer13u1f1f5-1f1fe_layer3u1f1f5-1f1fe_layer4u1f1f5-1f1fe_layer5u1f1f5-1f1fe_layer6u1f1f5-1f1fe_layer7u1f1f5-1f1fe_layer8u1f1f5-1f1fe_layer9u1f1f5_1f1e6u1f1f5_1f1eau1f1f5_1f1ebu1f1f5_1f1ecu1f1f5_1f1edu1f1f5_1f1f0u1f1f5_1f1f1u1f1f5_1f1f2u1f1f5_1f1f3u1f1f5_1f1f7u1f1f5_1f1f8u1f1f5_1f1f9u1f1f5_1f1fcu1f1f5_1f1feu1f1f5_layer1u1f1f6-1f1e6_layer0u1f1f6-1f1e6_layer1u1f1f6_1f1e6u1f1f6_layer1u1f1f7-1f1ea_layer1u1f1f7-1f1ea_layer2u1f1f7-1f1f8_layer10u1f1f7-1f1f8_layer11u1f1f7-1f1f8_layer12u1f1f7-1f1f8_layer2u1f1f7-1f1f8_layer3u1f1f7-1f1f8_layer4u1f1f7-1f1f8_layer5u1f1f7-1f1f8_layer6u1f1f7-1f1f8_layer7u1f1f7-1f1f8_layer8u1f1f7-1f1f8_layer9u1f1f7-1f1fc_layer1u1f1f7-1f1fc_layer2u1f1f7-1f1fc_layer3u1f1f7-1f1fc_layer4u1f1f7-1f1fc_layer5u1f1f7_1f1eau1f1f7_1f1f4u1f1f7_1f1f8u1f1f7_1f1fau1f1f7_1f1fcu1f1f7_layer1u1f1f8-1f1e6_layer1u1f1f8-1f1e6_layer2u1f1f8-1f1e6_layer3u1f1f8-1f1e6_layer4u1f1f8-1f1e6_layer5u1f1f8-1f1e6_layer6u1f1f8-1f1e6_layer7u1f1f8-1f1e6_layer8u1f1f8-1f1e7_layer0u1f1f8-1f1e7_layer1u1f1f8-1f1e7_layer2u1f1f8-1f1e7_layer3u1f1f8-1f1e7_layer4u1f1f8-1f1e7_layer5u1f1f8-1f1e7_layer6u1f1f8-1f1e7_layer7u1f1f8-1f1e7_layer8u1f1f8-1f1e8_layer0u1f1f8-1f1e8_layer1u1f1f8-1f1e8_layer2u1f1f8-1f1e8_layer3u1f1f8-1f1e8_layer4u1f1f8-1f1ea_layer0u1f1f8-1f1ea_layer1u1f1f8-1f1ec_layer2u1f1f8-1f1ec_layer3u1f1f8-1f1ed_layer1u1f1f8-1f1ed_layer10u1f1f8-1f1ed_layer11u1f1f8-1f1ed_layer12u1f1f8-1f1ed_layer13u1f1f8-1f1ed_layer2u1f1f8-1f1ed_layer3u1f1f8-1f1ed_layer4u1f1f8-1f1ed_layer5u1f1f8-1f1ed_layer6u1f1f8-1f1ed_layer7u1f1f8-1f1ed_layer8u1f1f8-1f1ed_layer9u1f1f8-1f1ee_layer0u1f1f8-1f1ee_layer1u1f1f8-1f1ee_layer3u1f1f8-1f1ee_layer4u1f1f8-1f1ee_layer5u1f1f8-1f1ee_layer6u1f1f8-1f1f0_layer3u1f1f8-1f1f0_layer4u1f1f8-1f1f0_layer5u1f1f8-1f1f0_layer6u1f1f8-1f1f2_layer1u1f1f8-1f1f2_layer10u1f1f8-1f1f2_layer11u1f1f8-1f1f2_layer12u1f1f8-1f1f2_layer2u1f1f8-1f1f2_layer3u1f1f8-1f1f2_layer4u1f1f8-1f1f2_layer5u1f1f8-1f1f2_layer6u1f1f8-1f1f2_layer7u1f1f8-1f1f2_layer8u1f1f8-1f1f2_layer9u1f1f8-1f1f3_layer3u1f1f8-1f1f4_layer1u1f1f8-1f1f7_layer0u1f1f8-1f1f7_layer1u1f1f8-1f1f7_layer2u1f1f8-1f1f7_layer3u1f1f8-1f1f8_layer1u1f1f8-1f1f8_layer3u1f1f8-1f1f8_layer4u1f1f8-1f1f8_layer5u1f1f8-1f1f9_layer1u1f1f8-1f1f9_layer2u1f1f8-1f1f9_layer3u1f1f8-1f1fb_layer10u1f1f8-1f1fb_layer11u1f1f8-1f1fb_layer12u1f1f8-1f1fb_layer13u1f1f8-1f1fb_layer14u1f1f8-1f1fb_layer15u1f1f8-1f1fb_layer16u1f1f8-1f1fb_layer2u1f1f8-1f1fb_layer3u1f1f8-1f1fb_layer4u1f1f8-1f1fb_layer5u1f1f8-1f1fb_layer6u1f1f8-1f1fb_layer7u1f1f8-1f1fb_layer8u1f1f8-1f1fb_layer9u1f1f8-1f1fd_layer10u1f1f8-1f1fd_layer11u1f1f8-1f1fd_layer2u1f1f8-1f1fd_layer3u1f1f8-1f1fd_layer4u1f1f8-1f1fd_layer5u1f1f8-1f1fd_layer6u1f1f8-1f1fd_layer7u1f1f8-1f1fd_layer8u1f1f8-1f1fd_layer9u1f1f8-1f1fe_layer3u1f1f8-1f1ff_layer10u1f1f8-1f1ff_layer11u1f1f8-1f1ff_layer12u1f1f8-1f1ff_layer2u1f1f8-1f1ff_layer3u1f1f8-1f1ff_layer4u1f1f8-1f1ff_layer5u1f1f8-1f1ff_layer6u1f1f8-1f1ff_layer7u1f1f8-1f1ff_layer8u1f1f8-1f1ff_layer9u1f1f8_1f1e6u1f1f8_1f1e7u1f1f8_1f1e8u1f1f8_1f1e9u1f1f8_1f1eau1f1f8_1f1ecu1f1f8_1f1edu1f1f8_1f1eeu1f1f8_1f1efu1f1f8_1f1f0u1f1f8_1f1f1u1f1f8_1f1f2u1f1f8_1f1f3u1f1f8_1f1f4u1f1f8_1f1f7u1f1f8_1f1f8u1f1f8_1f1f9u1f1f8_1f1fbu1f1f8_1f1fdu1f1f8_1f1feu1f1f8_1f1ffu1f1f8_layer1u1f1f9-1f1e6_layer1u1f1f9-1f1e6_layer10u1f1f9-1f1e6_layer11u1f1f9-1f1e6_layer12u1f1f9-1f1e6_layer13u1f1f9-1f1e6_layer14u1f1f9-1f1e6_layer15u1f1f9-1f1e6_layer16u1f1f9-1f1e6_layer17u1f1f9-1f1e6_layer18u1f1f9-1f1e6_layer19u1f1f9-1f1e6_layer2u1f1f9-1f1e6_layer20u1f1f9-1f1e6_layer21u1f1f9-1f1e6_layer22u1f1f9-1f1e6_layer23u1f1f9-1f1e6_layer24u1f1f9-1f1e6_layer25u1f1f9-1f1e6_layer3u1f1f9-1f1e6_layer4u1f1f9-1f1e6_layer5u1f1f9-1f1e6_layer6u1f1f9-1f1e6_layer7u1f1f9-1f1e6_layer8u1f1f9-1f1e6_layer9u1f1f9-1f1e8_layer1u1f1f9-1f1e8_layer10u1f1f9-1f1e8_layer11u1f1f9-1f1e8_layer12u1f1f9-1f1e8_layer13u1f1f9-1f1e8_layer14u1f1f9-1f1e8_layer15u1f1f9-1f1e8_layer16u1f1f9-1f1e8_layer17u1f1f9-1f1e8_layer18u1f1f9-1f1e8_layer2u1f1f9-1f1e8_layer3u1f1f9-1f1e8_layer4u1f1f9-1f1e8_layer5u1f1f9-1f1e8_layer6u1f1f9-1f1e8_layer7u1f1f9-1f1e8_layer8u1f1f9-1f1e8_layer9u1f1f9-1f1eb_layer0u1f1f9-1f1eb_layer1u1f1f9-1f1eb_layer2u1f1f9-1f1eb_layer3u1f1f9-1f1eb_layer4u1f1f9-1f1eb_layer5u1f1f9-1f1eb_layer6u1f1f9-1f1ec_layer0u1f1f9-1f1ec_layer1u1f1f9-1f1ec_layer2u1f1f9-1f1ec_layer3u1f1f9-1f1ed_layer0u1f1f9-1f1ed_layer1u1f1f9-1f1ed_layer2u1f1f9-1f1ed_layer3u1f1f9-1f1ed_layer4u1f1f9-1f1ef_layer3u1f1f9-1f1ef_layer4u1f1f9-1f1f0_layer1u1f1f9-1f1f0_layer2u1f1f9-1f1f1_layer1u1f1f9-1f1f1_layer2u1f1f9-1f1f1_layer3u1f1f9-1f1f2_layer1u1f1f9-1f1f2_layer10u1f1f9-1f1f2_layer11u1f1f9-1f1f2_layer12u1f1f9-1f1f2_layer13u1f1f9-1f1f2_layer14u1f1f9-1f1f2_layer2u1f1f9-1f1f2_layer3u1f1f9-1f1f2_layer4u1f1f9-1f1f2_layer5u1f1f9-1f1f2_layer6u1f1f9-1f1f2_layer7u1f1f9-1f1f2_layer8u1f1f9-1f1f2_layer9u1f1f9-1f1f3_layer1u1f1f9-1f1f3_layer2u1f1f9-1f1f3_layer3u1f1f9-1f1f4_layer0u1f1f9-1f1f4_layer1u1f1f9-1f1f4_layer2u1f1f9-1f1f7_layer1u1f1f9-1f1f9_layer0u1f1f9-1f1f9_layer1u1f1f9-1f1f9_layer2u1f1f9-1f1fb_layer1u1f1f9-1f1fb_layer4u1f1f9-1f1fc_layer0u1f1f9-1f1fc_layer1u1f1f9-1f1fc_layer2u1f1f9-1f1fc_layer3u1f1f9-1f1ff_layer0u1f1f9-1f1ff_layer1u1f1f9-1f1ff_layer2u1f1f9-1f1ff_layer3u1f1f9_1f1e6u1f1f9_1f1e8u1f1f9_1f1e9u1f1f9_1f1ebu1f1f9_1f1ecu1f1f9_1f1edu1f1f9_1f1efu1f1f9_1f1f0u1f1f9_1f1f1u1f1f9_1f1f2u1f1f9_1f1f3u1f1f9_1f1f4u1f1f9_1f1f7u1f1f9_1f1f9u1f1f9_1f1fbu1f1f9_1f1fcu1f1f9_1f1ffu1f1f9_layer1u1f1fa-1f1ec_layer0u1f1fa-1f1ec_layer1u1f1fa-1f1ec_layer2u1f1fa-1f1ec_layer4u1f1fa-1f1ec_layer5u1f1fa-1f1ec_layer6u1f1fa-1f1ec_layer7u1f1fa-1f1ec_layer8u1f1fa-1f1ec_layer9u1f1fa-1f1f2_layer0u1f1fa-1f1f2_layer1u1f1fa-1f1f2_layer3u1f1fa-1f1f3_layer0u1f1fa-1f1f3_layer1u1f1fa-1f1f3_layer10u1f1fa-1f1f3_layer11u1f1fa-1f1f3_layer12u1f1fa-1f1f3_layer13u1f1fa-1f1f3_layer14u1f1fa-1f1f3_layer15u1f1fa-1f1f3_layer16u1f1fa-1f1f3_layer2u1f1fa-1f1f3_layer3u1f1fa-1f1f3_layer4u1f1fa-1f1f3_layer5u1f1fa-1f1f3_layer6u1f1fa-1f1f3_layer7u1f1fa-1f1f3_layer8u1f1fa-1f1f3_layer9u1f1fa-1f1fe_layer0u1f1fa-1f1fe_layer1u1f1fa-1f1fe_layer2u1f1fa-1f1fe_layer3u1f1fa-1f1fe_layer4u1f1fa-1f1fe_layer5u1f1fa-1f1fe_layer6u1f1fa-1f1ff_layer0u1f1fa-1f1ff_layer2u1f1fa-1f1ff_layer3u1f1fa-1f1ff_layer4u1f1fa_1f1e6u1f1fa_1f1ecu1f1fa_1f1f2u1f1fa_1f1f3u1f1fa_1f1f8u1f1fa_1f1feu1f1fa_1f1ffu1f1fa_layer1u1f1fb-1f1e6_layer0u1f1fb-1f1e6_layer1u1f1fb-1f1e6_layer10u1f1fb-1f1e6_layer11u1f1fb-1f1e6_layer12u1f1fb-1f1e6_layer13u1f1fb-1f1e6_layer14u1f1fb-1f1e6_layer15u1f1fb-1f1e6_layer16u1f1fb-1f1e6_layer17u1f1fb-1f1e6_layer18u1f1fb-1f1e6_layer19u1f1fb-1f1e6_layer2u1f1fb-1f1e6_layer20u1f1fb-1f1e6_layer21u1f1fb-1f1e6_layer22u1f1fb-1f1e6_layer23u1f1fb-1f1e6_layer24u1f1fb-1f1e6_layer25u1f1fb-1f1e6_layer26u1f1fb-1f1e6_layer27u1f1fb-1f1e6_layer28u1f1fb-1f1e6_layer3u1f1fb-1f1e6_layer4u1f1fb-1f1e6_layer5u1f1fb-1f1e6_layer6u1f1fb-1f1e6_layer7u1f1fb-1f1e6_layer8u1f1fb-1f1e6_layer9u1f1fb-1f1e8_layer0u1f1fb-1f1e8_layer2u1f1fb-1f1e8_layer3u1f1fb-1f1ea_layer1u1f1fb-1f1ea_layer3u1f1fb-1f1ec_layer1u1f1fb-1f1ec_layer2u1f1fb-1f1ec_layer3u1f1fb-1f1ec_layer4u1f1fb-1f1ec_layer5u1f1fb-1f1ec_layer6u1f1fb-1f1ec_layer7u1f1fb-1f1ec_layer8u1f1fb-1f1ee_layer1u1f1fb-1f1ee_layer2u1f1fb-1f1ee_layer3u1f1fb-1f1ee_layer4u1f1fb-1f1ee_layer5u1f1fb-1f1ee_layer6u1f1fb-1f1f3_layer1u1f1fb-1f1fa_layer1u1f1fb-1f1fa_layer2u1f1fb-1f1fa_layer3u1f1fb-1f1fa_layer4u1f1fb-1f1fa_layer5u1f1fb_1f1e6u1f1fb_1f1e8u1f1fb_1f1eau1f1fb_1f1ecu1f1fb_1f1eeu1f1fb_1f1f3u1f1fb_1f1fau1f1fb_layer1u1f1fc-1f1eb_layer5u1f1fc-1f1f8_layer0u1f1fc-1f1f8_layer1u1f1fc-1f1f8_layer2u1f1fc_1f1ebu1f1fc_1f1f8u1f1fc_layer1u1f1fd-1f1f0_layer1u1f1fd-1f1f0_layer2u1f1fd_1f1f0u1f1fd_layer1u1f1fe-1f1ea_layer0u1f1fe-1f1ea_layer2u1f1fe-1f1f9_layer1u1f1fe-1f1f9_layer10u1f1fe-1f1f9_layer11u1f1fe-1f1f9_layer12u1f1fe-1f1f9_layer13u1f1fe-1f1f9_layer14u1f1fe-1f1f9_layer15u1f1fe-1f1f9_layer16u1f1fe-1f1f9_layer17u1f1fe-1f1f9_layer2u1f1fe-1f1f9_layer3u1f1fe-1f1f9_layer4u1f1fe-1f1f9_layer5u1f1fe-1f1f9_layer6u1f1fe-1f1f9_layer7u1f1fe-1f1f9_layer8u1f1fe-1f1f9_layer9u1f1fe_1f1eau1f1fe_1f1f9u1f1fe_layer1u1f1ff-1f1e6_layer0u1f1ff-1f1e6_layer1u1f1ff-1f1e6_layer2u1f1ff-1f1e6_layer3u1f1ff-1f1e6_layer4u1f1ff-1f1e6_layer5u1f1ff-1f1f2_layer1u1f1ff-1f1f2_layer2u1f1ff-1f1f2_layer3u1f1ff-1f1fc_layer0u1f1ff-1f1fc_layer1u1f1ff-1f1fc_layer2u1f1ff-1f1fc_layer3u1f1ff-1f1fc_layer4u1f1ff-1f1fc_layer5u1f1ff-1f1fc_layer6u1f1ff-1f1fc_layer7u1f1ff-1f1fc_layer8u1f1ff_1f1e6u1f1ff_1f1f2u1f1ff_1f1fcu1f1ff_layer1u1f201_layer1u1f202_layer1u1f21a_layer1u1f22f_layer1u1f232_layer1u1f233_layer1u1f234_layer1u1f235_layer1u1f236_layer1u1f237_layer1u1f238_layer1u1f239_layer1u1f23a_layer1u1f250_layer0u1f250_layer1u1f251_layer0u1f251_layer1u1f300_layer0u1f301_layer0u1f301_layer1u1f301_layer2u1f301_layer3u1f301_layer4u1f301_layer5u1f301_layer6u1f302_layer0u1f302_layer1u1f302_layer2u1f303_layer0u1f303_layer1u1f303_layer2u1f303_layer3u1f303_layer4u1f304_layer0u1f304_layer1u1f304_layer2u1f304_layer3u1f304_layer4u1f305_layer0u1f305_layer3u1f305_layer4u1f306_layer2u1f306_layer3u1f307_layer0u1f307_layer1u1f307_layer2u1f307_layer3u1f307_layer4u1f307_layer5u1f308_layer0u1f308_layer1u1f308_layer2u1f308_layer3u1f308_layer4u1f308_layer5u1f309_layer1u1f309_layer2u1f30a_layer0u1f30a_layer1u1f30b_layer0u1f30b_layer1u1f30b_layer10u1f30b_layer11u1f30b_layer12u1f30b_layer13u1f30b_layer14u1f30b_layer15u1f30b_layer16u1f30b_layer17u1f30b_layer2u1f30b_layer3u1f30b_layer4u1f30b_layer5u1f30b_layer6u1f30b_layer7u1f30b_layer8u1f30b_layer9u1f30c_layer1u1f30c_layer2u1f30c_layer3u1f30c_layer4u1f30c_layer5u1f30d_layer0u1f30d_layer1u1f30e_layer1u1f30f_layer1u1f30f_layer2u1f310_layer0u1f311_layer1u1f312_layer1u1f312_layer2u1f312_layer3u1f313_layer0u1f313_layer1u1f313_layer2u1f313_layer3u1f314_layer0u1f314_layer1u1f314_layer2u1f314_layer3u1f315_layer1u1f316_layer1u1f317_layer0u1f317_layer1u1f317_layer2u1f317_layer3u1f319_layer0u1f319_layer1u1f31a_layer0u1f31a_layer1u1f31a_layer2u1f31b_layer0u1f31b_layer1u1f31b_layer2u1f31c_layer0u1f31c_layer1u1f31c_layer2u1f31d_layer0u1f31e_layer0u1f31e_layer1u1f31e_layer2u1f31f_layer0u1f31f_layer1u1f320_layer1u1f320_layer2u1f320_layer3u1f321_layer0u1f321_layer1u1f321_layer2u1f324_layer0u1f324_layer2u1f325_layer0u1f325_layer1u1f325_layer2u1f326_layer0u1f326_layer1u1f326_layer2u1f326_layer3u1f327_layer0u1f327_layer1u1f328_layer1u1f329_layer0u1f32a_layer0u1f32a_layer1u1f32a_layer2u1f32a_layer3u1f32a_layer4u1f32c_layer0u1f32c_layer1u1f32c_layer2u1f32c_layer3u1f32c_layer4u1f32c_layer5u1f32c_layer6u1f32c_layer7u1f32c_layer8u1f32c_layer9u1f32d_layer0u1f32d_layer1u1f32d_layer2u1f32d_layer3u1f32e_layer0u1f32e_layer1u1f32e_layer10u1f32e_layer11u1f32e_layer12u1f32e_layer13u1f32e_layer14u1f32e_layer15u1f32e_layer16u1f32e_layer18u1f32e_layer19u1f32e_layer2u1f32e_layer20u1f32e_layer21u1f32e_layer22u1f32e_layer23u1f32e_layer24u1f32e_layer25u1f32e_layer3u1f32e_layer4u1f32e_layer5u1f32e_layer6u1f32e_layer7u1f32e_layer8u1f32e_layer9u1f32f_layer0u1f32f_layer1u1f32f_layer10u1f32f_layer11u1f32f_layer12u1f32f_layer13u1f32f_layer14u1f32f_layer15u1f32f_layer16u1f32f_layer17u1f32f_layer18u1f32f_layer19u1f32f_layer2u1f32f_layer20u1f32f_layer21u1f32f_layer22u1f32f_layer23u1f32f_layer24u1f32f_layer3u1f32f_layer4u1f32f_layer5u1f32f_layer6u1f32f_layer7u1f32f_layer8u1f32f_layer9u1f330_layer0u1f330_layer1u1f330_layer2u1f330_layer3u1f330_layer4u1f330_layer5u1f331_layer0u1f332_layer0u1f332_layer1u1f332_layer2u1f332_layer3u1f332_layer4u1f332_layer5u1f332_layer6u1f332_layer7u1f332_layer8u1f332_layer9u1f333_layer1u1f333_layer2u1f334_layer0u1f334_layer1u1f334_layer2u1f334_layer3u1f335_layer0u1f335_layer1u1f336_layer0u1f336_layer1u1f337_layer0u1f337_layer1u1f337_layer2u1f338_layer0u1f338_layer1u1f338_layer2u1f338_layer3u1f338_layer4u1f338_layer5u1f338_layer6u1f338_layer7u1f339_layer0u1f339_layer1u1f339_layer2u1f33a_layer0u1f33a_layer1u1f33a_layer2u1f33a_layer3u1f33a_layer4u1f33a_layer5u1f33b_layer0u1f33b_layer1u1f33b_layer2u1f33c_layer0u1f33c_layer1u1f33c_layer2u1f33c_layer3u1f33d_layer0u1f33d_layer1u1f33d_layer2u1f33d_layer3u1f33e_layer0u1f33e_layer1u1f33f_layer0u1f33f_layer1u1f33f_layer2u1f33f_layer3u1f340_layer0u1f341_layer0u1f342_layer0u1f342_layer1u1f343_layer0u1f343_layer1u1f343_layer2u1f344_layer0u1f344_layer1u1f344_layer2u1f344_layer3u1f344_layer4u1f345_layer0u1f345_layer1u1f346_layer0u1f346_layer1u1f347_layer0u1f347_layer1u1f347_layer2u1f347_layer3u1f347_layer4u1f347_layer5u1f347_layer6u1f348_layer0u1f348_layer1u1f348_layer2u1f348_layer3u1f349_layer0u1f349_layer1u1f349_layer2u1f349_layer3u1f34a_layer0u1f34a_layer1u1f34a_layer2u1f34b_layer0u1f34b_layer1u1f34b_layer2u1f34b_layer3u1f34c_layer0u1f34c_layer1u1f34c_layer2u1f34c_layer3u1f34c_layer4u1f34c_layer5u1f34c_layer6u1f34c_layer7u1f34c_layer8u1f34c_layer9u1f34d_layer0u1f34d_layer1u1f34d_layer2u1f34e_layer0u1f34e_layer1u1f34e_layer2u1f34f_layer1u1f350_layer0u1f350_layer1u1f351_layer0u1f351_layer1u1f351_layer2u1f351_layer3u1f352_layer0u1f352_layer1u1f352_layer2u1f352_layer3u1f353_layer0u1f353_layer1u1f353_layer2u1f354_layer0u1f354_layer1u1f354_layer2u1f354_layer3u1f354_layer4u1f354_layer5u1f354_layer6u1f355_layer0u1f355_layer1u1f355_layer2u1f355_layer3u1f356_layer0u1f356_layer1u1f356_layer2u1f357_layer0u1f357_layer1u1f358_layer0u1f358_layer1u1f358_layer2u1f359_layer0u1f359_layer1u1f359_layer2u1f35a_layer0u1f35a_layer1u1f35a_layer2u1f35a_layer3u1f35b_layer0u1f35b_layer1u1f35b_layer2u1f35b_layer3u1f35b_layer4u1f35b_layer5u1f35c_layer0u1f35c_layer1u1f35c_layer2u1f35c_layer3u1f35c_layer4u1f35c_layer5u1f35c_layer6u1f35d_layer0u1f35d_layer1u1f35d_layer2u1f35d_layer3u1f35d_layer4u1f35d_layer5u1f35d_layer6u1f35d_layer7u1f35d_layer8u1f35d_layer9u1f35e_layer0u1f35e_layer1u1f35e_layer2u1f35f_layer0u1f35f_layer1u1f35f_layer2u1f35f_layer3u1f35f_layer4u1f360_layer0u1f360_layer1u1f360_layer2u1f360_layer3u1f360_layer4u1f361_layer0u1f361_layer1u1f361_layer2u1f361_layer3u1f361_layer4u1f362_layer0u1f362_layer1u1f362_layer2u1f362_layer3u1f362_layer4u1f363_layer0u1f363_layer1u1f363_layer10u1f363_layer11u1f363_layer12u1f363_layer2u1f363_layer3u1f363_layer4u1f363_layer5u1f363_layer6u1f363_layer7u1f363_layer8u1f363_layer9u1f364_layer0u1f364_layer1u1f364_layer2u1f364_layer3u1f365_layer0u1f365_layer1u1f366_layer0u1f366_layer1u1f366_layer2u1f366_layer3u1f366_layer4u1f366_layer5u1f367_layer0u1f367_layer1u1f367_layer2u1f367_layer3u1f367_layer4u1f367_layer5u1f368_layer0u1f368_layer1u1f368_layer2u1f368_layer3u1f368_layer4u1f368_layer5u1f368_layer6u1f369_layer0u1f369_layer1u1f369_layer2u1f369_layer3u1f369_layer4u1f369_layer5u1f369_layer6u1f369_layer7u1f36a_layer0u1f36a_layer1u1f36b_layer0u1f36b_layer1u1f36b_layer2u1f36b_layer3u1f36b_layer4u1f36c_layer0u1f36c_layer1u1f36c_layer2u1f36c_layer3u1f36c_layer4u1f36d_layer0u1f36d_layer1u1f36d_layer2u1f36d_layer3u1f36e_layer2u1f36e_layer3u1f36e_layer4u1f36e_layer5u1f36f_layer0u1f36f_layer1u1f36f_layer2u1f36f_layer3u1f36f_layer4u1f36f_layer5u1f36f_layer6u1f36f_layer7u1f370_layer0u1f370_layer10u1f370_layer2u1f370_layer3u1f370_layer4u1f370_layer5u1f370_layer6u1f370_layer7u1f370_layer8u1f370_layer9u1f371_layer0u1f371_layer1u1f371_layer10u1f371_layer11u1f371_layer12u1f371_layer13u1f371_layer14u1f371_layer2u1f371_layer3u1f371_layer4u1f371_layer5u1f371_layer6u1f371_layer7u1f371_layer8u1f371_layer9u1f372_layer0u1f372_layer1u1f372_layer3u1f372_layer4u1f372_layer5u1f372_layer6u1f372_layer7u1f373_layer0u1f373_layer1u1f373_layer2u1f373_layer3u1f374_layer0u1f375_layer0u1f375_layer2u1f375_layer3u1f375_layer4u1f375_layer5u1f376_layer0u1f376_layer1u1f376_layer10u1f376_layer2u1f376_layer3u1f376_layer4u1f376_layer5u1f376_layer6u1f376_layer7u1f376_layer8u1f376_layer9u1f377_layer0u1f377_layer1u1f377_layer2u1f377_layer3u1f377_layer4u1f377_layer5u1f378_layer0u1f378_layer1u1f378_layer2u1f378_layer3u1f378_layer4u1f379_layer0u1f379_layer1u1f379_layer10u1f379_layer11u1f379_layer2u1f379_layer3u1f379_layer4u1f379_layer5u1f379_layer6u1f379_layer7u1f379_layer8u1f379_layer9u1f37a_layer0u1f37a_layer1u1f37a_layer2u1f37a_layer3u1f37a_layer4u1f37b_layer0u1f37b_layer1u1f37b_layer2u1f37b_layer3u1f37b_layer4u1f37b_layer5u1f37b_layer6u1f37b_layer7u1f37b_layer8u1f37c_layer0u1f37c_layer1u1f37c_layer2u1f37c_layer3u1f37d_layer0u1f37d_layer1u1f37d_layer2u1f37d_layer3u1f37d_layer4u1f37d_layer5u1f37d_layer6u1f37d_layer7u1f37d_layer8u1f37d_layer9u1f37e_layer0u1f37e_layer1u1f37e_layer2u1f37e_layer3u1f37e_layer4u1f37e_layer5u1f37e_layer6u1f37e_layer7u1f37f_layer0u1f37f_layer1u1f37f_layer2u1f37f_layer3u1f37f_layer4u1f37f_layer5u1f37f_layer6u1f380_layer0u1f380_layer1u1f380_layer2u1f381_layer0u1f381_layer1u1f381_layer2u1f381_layer3u1f381_layer4u1f382_layer1u1f382_layer2u1f382_layer3u1f382_layer4u1f382_layer5u1f382_layer6u1f382_layer7u1f383_layer0u1f383_layer1u1f383_layer2u1f384_layer0u1f384_layer1u1f384_layer10u1f384_layer11u1f384_layer12u1f384_layer13u1f384_layer2u1f384_layer3u1f384_layer4u1f384_layer5u1f384_layer6u1f384_layer7u1f384_layer8u1f384_layer9u1f385-1f3fb_layer0u1f385-1f3fb_layer1u1f385-1f3fb_layer2u1f385-1f3fb_layer3u1f385-1f3fb_layer4u1f385-1f3fb_layer5u1f385-1f3fb_layer6u1f385-1f3fb_layer7u1f385-1f3fb_layer8u1f385-1f3fb_layer9u1f385-1f3ff_layer4u1f385_1f3fbu1f385_1f3fcu1f385_1f3fdu1f385_1f3feu1f385_1f3ffu1f386_layer1u1f386_layer2u1f386_layer3u1f386_layer4u1f387_layer0u1f387_layer1u1f387_layer10u1f387_layer11u1f387_layer12u1f387_layer13u1f387_layer14u1f387_layer15u1f387_layer2u1f387_layer3u1f387_layer4u1f387_layer5u1f387_layer6u1f387_layer7u1f387_layer8u1f387_layer9u1f388_layer0u1f388_layer1u1f388_layer2u1f388_layer3u1f389_layer0u1f389_layer1u1f389_layer2u1f389_layer3u1f389_layer4u1f389_layer5u1f389_layer6u1f389_layer7u1f38a_layer0u1f38a_layer1u1f38a_layer2u1f38a_layer3u1f38a_layer4u1f38a_layer5u1f38a_layer6u1f38a_layer7u1f38a_layer8u1f38a_layer9u1f38b_layer0u1f38b_layer1u1f38b_layer2u1f38b_layer3u1f38b_layer4u1f38b_layer5u1f38b_layer6u1f38b_layer7u1f38b_layer8u1f38b_layer9u1f38c_layer0u1f38c_layer1u1f38c_layer2u1f38c_layer3u1f38c_layer4u1f38c_layer5u1f38d_layer0u1f38d_layer1u1f38d_layer2u1f38d_layer3u1f38d_layer4u1f38d_layer5u1f38d_layer6u1f38e_layer0u1f38e_layer1u1f38e_layer10u1f38e_layer11u1f38e_layer12u1f38e_layer13u1f38e_layer14u1f38e_layer15u1f38e_layer16u1f38e_layer17u1f38e_layer2u1f38e_layer3u1f38e_layer4u1f38e_layer5u1f38e_layer6u1f38e_layer7u1f38e_layer8u1f38e_layer9u1f38f_layer0u1f38f_layer1u1f38f_layer10u1f38f_layer2u1f38f_layer3u1f38f_layer4u1f38f_layer5u1f38f_layer6u1f38f_layer7u1f38f_layer8u1f38f_layer9u1f390_layer0u1f390_layer1u1f390_layer2u1f390_layer3u1f390_layer4u1f391_layer1u1f391_layer2u1f391_layer3u1f391_layer4u1f391_layer5u1f392_layer0u1f392_layer1u1f392_layer2u1f392_layer3u1f392_layer4u1f392_layer5u1f393_layer0u1f393_layer1u1f393_layer2u1f393_layer3u1f393_layer4u1f393_layer5u1f393_layer6u1f396_layer0u1f396_layer1u1f396_layer2u1f396_layer3u1f396_layer4u1f396_layer5u1f397_layer0u1f397_layer1u1f397_layer2u1f397_layer3u1f399_layer0u1f399_layer1u1f399_layer2u1f399_layer3u1f399_layer4u1f399_layer5u1f39a_layer0u1f39a_layer1u1f39a_layer2u1f39a_layer3u1f39b_layer1u1f39b_layer2u1f39b_layer3u1f39b_layer4u1f39b_layer5u1f39e_layer0u1f39e_layer1u1f39e_layer2u1f39e_layer3u1f39f_layer0u1f39f_layer1u1f3a0_layer0u1f3a0_layer1u1f3a0_layer10u1f3a0_layer11u1f3a0_layer2u1f3a0_layer3u1f3a0_layer4u1f3a0_layer5u1f3a0_layer6u1f3a0_layer7u1f3a0_layer8u1f3a0_layer9u1f3a1_layer0u1f3a1_layer1u1f3a1_layer10u1f3a1_layer11u1f3a1_layer12u1f3a1_layer2u1f3a1_layer3u1f3a1_layer4u1f3a1_layer5u1f3a1_layer6u1f3a1_layer7u1f3a1_layer8u1f3a1_layer9u1f3a2_layer0u1f3a2_layer1u1f3a2_layer10u1f3a2_layer11u1f3a2_layer12u1f3a2_layer2u1f3a2_layer3u1f3a2_layer4u1f3a2_layer5u1f3a2_layer6u1f3a2_layer7u1f3a2_layer8u1f3a2_layer9u1f3a3_layer0u1f3a3_layer1u1f3a3_layer2u1f3a3_layer3u1f3a3_layer4u1f3a3_layer5u1f3a3_layer6u1f3a3_layer7u1f3a3_layer8u1f3a3_layer9u1f3a4_layer0u1f3a4_layer1u1f3a4_layer2u1f3a5_layer0u1f3a5_layer1u1f3a5_layer2u1f3a5_layer3u1f3a5_layer4u1f3a6_layer1u1f3a6_layer2u1f3a7_layer0u1f3a7_layer1u1f3a7_layer2u1f3a8_layer0u1f3a8_layer1u1f3a8_layer2u1f3a8_layer3u1f3a8_layer4u1f3a9_layer0u1f3a9_layer1u1f3a9_layer2u1f3aa_layer0u1f3aa_layer1u1f3aa_layer2u1f3aa_layer3u1f3aa_layer4u1f3aa_layer5u1f3aa_layer6u1f3aa_layer7u1f3aa_layer8u1f3ab_layer0u1f3ab_layer1u1f3ac_layer0u1f3ac_layer1u1f3ac_layer2u1f3ac_layer3u1f3ad_layer0u1f3ad_layer1u1f3ad_layer2u1f3ad_layer3u1f3ae_layer0u1f3ae_layer1u1f3ae_layer10u1f3ae_layer11u1f3ae_layer2u1f3ae_layer3u1f3ae_layer4u1f3ae_layer5u1f3ae_layer6u1f3ae_layer7u1f3ae_layer8u1f3ae_layer9u1f3af_layer1u1f3af_layer5u1f3af_layer6u1f3af_layer7u1f3af_layer8u1f3b0_layer1u1f3b0_layer2u1f3b0_layer3u1f3b0_layer4u1f3b0_layer5u1f3b1_layer2u1f3b2_layer0u1f3b2_layer1u1f3b2_layer2u1f3b2_layer3u1f3b2_layer4u1f3b3_layer0u1f3b3_layer1u1f3b3_layer2u1f3b3_layer3u1f3b3_layer4u1f3b3_layer5u1f3b4_layer0u1f3b4_layer1u1f3b4_layer2u1f3b5_layer0u1f3b6_layer0u1f3b6_layer1u1f3b7_layer0u1f3b7_layer1u1f3b7_layer2u1f3b7_layer3u1f3b7_layer4u1f3b8_layer0u1f3b8_layer1u1f3b8_layer2u1f3b8_layer3u1f3b8_layer4u1f3b8_layer5u1f3b8_layer6u1f3b8_layer7u1f3b8_layer8u1f3b8_layer9u1f3b9_layer0u1f3b9_layer1u1f3b9_layer2u1f3ba_layer0u1f3ba_layer1u1f3ba_layer2u1f3ba_layer3u1f3ba_layer4u1f3bb_layer0u1f3bb_layer1u1f3bb_layer2u1f3bb_layer3u1f3bb_layer4u1f3bb_layer5u1f3bb_layer6u1f3bc_layer0u1f3bc_layer1u1f3bd_layer0u1f3bd_layer1u1f3bd_layer2u1f3be_layer1u1f3be_layer2u1f3bf_layer0u1f3bf_layer1u1f3bf_layer2u1f3bf_layer3u1f3bf_layer4u1f3bf_layer5u1f3bf_layer6u1f3c0_layer1u1f3c1_layer0u1f3c1_layer1u1f3c1_layer4u1f3c1_layer5u1f3c2-1f3fb_layer0u1f3c2-1f3fb_layer1u1f3c2-1f3fb_layer10u1f3c2-1f3fb_layer11u1f3c2-1f3fb_layer12u1f3c2-1f3fb_layer13u1f3c2-1f3fb_layer2u1f3c2-1f3fb_layer3u1f3c2-1f3fb_layer4u1f3c2-1f3fb_layer5u1f3c2-1f3fb_layer6u1f3c2-1f3fb_layer7u1f3c2-1f3fb_layer8u1f3c2-1f3fb_layer9u1f3c2_1f3fbu1f3c2_1f3fcu1f3c2_1f3fdu1f3c2_1f3feu1f3c2_1f3ff"u1f3c3-1f3fb-200d-2640-fe0f_layer0"u1f3c3-1f3fb-200d-2640-fe0f_layer1#u1f3c3-1f3fb-200d-2640-fe0f_layer10#u1f3c3-1f3fb-200d-2640-fe0f_layer11"u1f3c3-1f3fb-200d-2640-fe0f_layer2"u1f3c3-1f3fb-200d-2640-fe0f_layer3"u1f3c3-1f3fb-200d-2640-fe0f_layer4"u1f3c3-1f3fb-200d-2640-fe0f_layer5"u1f3c3-1f3fb-200d-2640-fe0f_layer6"u1f3c3-1f3fb-200d-2640-fe0f_layer7"u1f3c3-1f3fb-200d-2640-fe0f_layer8"u1f3c3-1f3fb-200d-2640-fe0f_layer9"u1f3c3-1f3fb-200d-2642-fe0f_layer0"u1f3c3-1f3fb-200d-2642-fe0f_layer1"u1f3c3-1f3fb-200d-2642-fe0f_layer2"u1f3c3-1f3fb-200d-2642-fe0f_layer3"u1f3c3-1f3fb-200d-2642-fe0f_layer4"u1f3c3-1f3fb-200d-2642-fe0f_layer5"u1f3c3-1f3fb-200d-2642-fe0f_layer6"u1f3c3-1f3fb-200d-2642-fe0f_layer7"u1f3c3-1f3fb-200d-2642-fe0f_layer8"u1f3c3-1f3fb-200d-2642-fe0f_layer9u1f3c3-1f3fb_layer0u1f3c3-1f3fb_layer10u1f3c3-1f3fb_layer2u1f3c3-1f3fb_layer5u1f3c3-1f3fb_layer7u1f3c3-1f3fb_layer8u1f3c3-1f3fb_layer9u1f3c3_1f3fbu1f3c3_1f3fb_200d_2640_fe0fu1f3c3_1f3fb_200d_2642_fe0fu1f3c3_1f3fcu1f3c3_1f3fc_200d_2640_fe0fu1f3c3_1f3fc_200d_2642_fe0fu1f3c3_1f3fdu1f3c3_1f3fd_200d_2640_fe0fu1f3c3_1f3fd_200d_2642_fe0fu1f3c3_1f3feu1f3c3_1f3fe_200d_2640_fe0fu1f3c3_1f3fe_200d_2642_fe0fu1f3c3_1f3ffu1f3c3_1f3ff_200d_2640_fe0fu1f3c3_1f3ff_200d_2642_fe0fu1f3c3_200d_2640_fe0fu1f3c3_200d_2642_fe0f"u1f3c4-1f3fb-200d-2640-fe0f_layer0"u1f3c4-1f3fb-200d-2640-fe0f_layer1"u1f3c4-1f3fb-200d-2640-fe0f_layer2"u1f3c4-1f3fb-200d-2640-fe0f_layer3"u1f3c4-1f3fb-200d-2640-fe0f_layer4"u1f3c4-1f3fb-200d-2640-fe0f_layer5"u1f3c4-1f3fb-200d-2640-fe0f_layer6"u1f3c4-1f3fb-200d-2640-fe0f_layer7"u1f3c4-1f3fb-200d-2640-fe0f_layer8"u1f3c4-1f3fb-200d-2642-fe0f_layer4"u1f3c4-1f3fb-200d-2642-fe0f_layer5"u1f3c4-1f3fb-200d-2642-fe0f_layer6"u1f3c4-1f3fb-200d-2642-fe0f_layer7"u1f3c4-1f3fb-200d-2642-fe0f_layer8u1f3c4-1f3fb_layer10u1f3c4-1f3fb_layer4u1f3c4-1f3fb_layer5u1f3c4-1f3fb_layer6u1f3c4-1f3fb_layer7u1f3c4-1f3fb_layer8u1f3c4-1f3fb_layer9"u1f3c4-1f3fc-200d-2640-fe0f_layer7"u1f3c4-1f3fc-200d-2640-fe0f_layer8"u1f3c4-1f3fc-200d-2642-fe0f_layer6"u1f3c4-1f3fc-200d-2642-fe0f_layer7u1f3c4_1f3fbu1f3c4_1f3fb_200d_2640_fe0fu1f3c4_1f3fb_200d_2642_fe0fu1f3c4_1f3fcu1f3c4_1f3fc_200d_2640_fe0fu1f3c4_1f3fc_200d_2642_fe0fu1f3c4_1f3fdu1f3c4_1f3fd_200d_2640_fe0fu1f3c4_1f3fd_200d_2642_fe0fu1f3c4_1f3feu1f3c4_1f3fe_200d_2640_fe0fu1f3c4_1f3fe_200d_2642_fe0fu1f3c4_1f3ffu1f3c4_1f3ff_200d_2640_fe0fu1f3c4_1f3ff_200d_2642_fe0fu1f3c4_200d_2640_fe0fu1f3c4_200d_2642_fe0fu1f3c5_layer0u1f3c5_layer1u1f3c5_layer2u1f3c5_layer3u1f3c5_layer4u1f3c6_layer0u1f3c6_layer1u1f3c6_layer2u1f3c6_layer3u1f3c7-1f3fb_layer0u1f3c7-1f3fb_layer1u1f3c7-1f3fb_layer10u1f3c7-1f3fb_layer11u1f3c7-1f3fb_layer12u1f3c7-1f3fb_layer13u1f3c7-1f3fb_layer14u1f3c7-1f3fb_layer15u1f3c7-1f3fb_layer16u1f3c7-1f3fb_layer17u1f3c7-1f3fb_layer18u1f3c7-1f3fb_layer19u1f3c7-1f3fb_layer2u1f3c7-1f3fb_layer20u1f3c7-1f3fb_layer3u1f3c7-1f3fb_layer4u1f3c7-1f3fb_layer5u1f3c7-1f3fb_layer6u1f3c7-1f3fb_layer7u1f3c7-1f3fb_layer8u1f3c7-1f3fb_layer9u1f3c7_1f3fbu1f3c7_1f3fcu1f3c7_1f3fdu1f3c7_1f3feu1f3c7_1f3ffu1f3c8_layer0u1f3c8_layer1u1f3c9_layer0u1f3c9_layer1u1f3c9_layer2"u1f3ca-1f3fb-200d-2640-fe0f_layer0"u1f3ca-1f3fb-200d-2640-fe0f_layer1"u1f3ca-1f3fb-200d-2640-fe0f_layer2"u1f3ca-1f3fb-200d-2640-fe0f_layer3"u1f3ca-1f3fb-200d-2640-fe0f_layer4"u1f3ca-1f3fb-200d-2642-fe0f_layer0"u1f3ca-1f3fb-200d-2642-fe0f_layer1u1f3ca-1f3fb_layer0u1f3ca-1f3fb_layer1u1f3ca_1f3fbu1f3ca_1f3fb_200d_2640_fe0fu1f3ca_1f3fb_200d_2642_fe0fu1f3ca_1f3fcu1f3ca_1f3fc_200d_2640_fe0fu1f3ca_1f3fc_200d_2642_fe0fu1f3ca_1f3fdu1f3ca_1f3fd_200d_2640_fe0fu1f3ca_1f3fd_200d_2642_fe0fu1f3ca_1f3feu1f3ca_1f3fe_200d_2640_fe0fu1f3ca_1f3fe_200d_2642_fe0fu1f3ca_1f3ffu1f3ca_1f3ff_200d_2640_fe0fu1f3ca_1f3ff_200d_2642_fe0fu1f3ca_200d_2640_fe0fu1f3ca_200d_2642_fe0f"u1f3cb-1f3fb-200d-2640-fe0f_layer0"u1f3cb-1f3fb-200d-2640-fe0f_layer1#u1f3cb-1f3fb-200d-2640-fe0f_layer10#u1f3cb-1f3fb-200d-2640-fe0f_layer11#u1f3cb-1f3fb-200d-2640-fe0f_layer12#u1f3cb-1f3fb-200d-2640-fe0f_layer13#u1f3cb-1f3fb-200d-2640-fe0f_layer14#u1f3cb-1f3fb-200d-2640-fe0f_layer15#u1f3cb-1f3fb-200d-2640-fe0f_layer16#u1f3cb-1f3fb-200d-2640-fe0f_layer17#u1f3cb-1f3fb-200d-2640-fe0f_layer18#u1f3cb-1f3fb-200d-2640-fe0f_layer19"u1f3cb-1f3fb-200d-2640-fe0f_layer2#u1f3cb-1f3fb-200d-2640-fe0f_layer20#u1f3cb-1f3fb-200d-2640-fe0f_layer21#u1f3cb-1f3fb-200d-2640-fe0f_layer22#u1f3cb-1f3fb-200d-2640-fe0f_layer23#u1f3cb-1f3fb-200d-2640-fe0f_layer24#u1f3cb-1f3fb-200d-2640-fe0f_layer25#u1f3cb-1f3fb-200d-2640-fe0f_layer26"u1f3cb-1f3fb-200d-2640-fe0f_layer3"u1f3cb-1f3fb-200d-2640-fe0f_layer4"u1f3cb-1f3fb-200d-2640-fe0f_layer5"u1f3cb-1f3fb-200d-2640-fe0f_layer6"u1f3cb-1f3fb-200d-2640-fe0f_layer7"u1f3cb-1f3fb-200d-2640-fe0f_layer8"u1f3cb-1f3fb-200d-2640-fe0f_layer9"u1f3cb-1f3fb-200d-2642-fe0f_layer0"u1f3cb-1f3fb-200d-2642-fe0f_layer1#u1f3cb-1f3fb-200d-2642-fe0f_layer13#u1f3cb-1f3fb-200d-2642-fe0f_layer14#u1f3cb-1f3fb-200d-2642-fe0f_layer15#u1f3cb-1f3fb-200d-2642-fe0f_layer16#u1f3cb-1f3fb-200d-2642-fe0f_layer17#u1f3cb-1f3fb-200d-2642-fe0f_layer18#u1f3cb-1f3fb-200d-2642-fe0f_layer19#u1f3cb-1f3fb-200d-2642-fe0f_layer24u1f3cb-1f3fb_layer0u1f3cb-1f3fb_layer1u1f3cb-1f3fb_layer13u1f3cb-1f3fb_layer14u1f3cb-1f3fb_layer20u1f3cb-1f3fb_layer21u1f3cb-1f3fb_layer22u1f3cb-1f3fb_layer23u1f3cb-1f3fb_layer24u1f3cb-1f3fb_layer4u1f3cb-1f3fb_layer8#u1f3cb-1f3ff-200d-2640-fe0f_layer10u1f3cb-1f3ff_layer24u1f3cb_1f3fbu1f3cb_1f3fb_200d_2640_fe0fu1f3cb_1f3fb_200d_2642_fe0fu1f3cb_1f3fcu1f3cb_1f3fc_200d_2640_fe0fu1f3cb_1f3fc_200d_2642_fe0fu1f3cb_1f3fdu1f3cb_1f3fd_200d_2640_fe0fu1f3cb_1f3fd_200d_2642_fe0fu1f3cb_1f3feu1f3cb_1f3fe_200d_2640_fe0fu1f3cb_1f3fe_200d_2642_fe0fu1f3cb_1f3ffu1f3cb_1f3ff_200d_2640_fe0fu1f3cb_1f3ff_200d_2642_fe0fu1f3cb_fe0f_200d_2640_fe0fu1f3cb_fe0f_200d_2642_fe0f"u1f3cc-1f3fb-200d-2640-fe0f_layer0"u1f3cc-1f3fb-200d-2640-fe0f_layer1#u1f3cc-1f3fb-200d-2640-fe0f_layer10#u1f3cc-1f3fb-200d-2640-fe0f_layer11#u1f3cc-1f3fb-200d-2640-fe0f_layer12#u1f3cc-1f3fb-200d-2640-fe0f_layer13#u1f3cc-1f3fb-200d-2640-fe0f_layer14"u1f3cc-1f3fb-200d-2640-fe0f_layer2"u1f3cc-1f3fb-200d-2640-fe0f_layer3"u1f3cc-1f3fb-200d-2640-fe0f_layer4"u1f3cc-1f3fb-200d-2640-fe0f_layer5"u1f3cc-1f3fb-200d-2640-fe0f_layer6"u1f3cc-1f3fb-200d-2640-fe0f_layer7"u1f3cc-1f3fb-200d-2640-fe0f_layer8"u1f3cc-1f3fb-200d-2640-fe0f_layer9"u1f3cc-1f3fb-200d-2642-fe0f_layer0"u1f3cc-1f3fb-200d-2642-fe0f_layer1#u1f3cc-1f3fb-200d-2642-fe0f_layer10#u1f3cc-1f3fb-200d-2642-fe0f_layer11#u1f3cc-1f3fb-200d-2642-fe0f_layer12#u1f3cc-1f3fb-200d-2642-fe0f_layer13#u1f3cc-1f3fb-200d-2642-fe0f_layer15"u1f3cc-1f3fb-200d-2642-fe0f_layer2"u1f3cc-1f3fb-200d-2642-fe0f_layer4"u1f3cc-1f3fb-200d-2642-fe0f_layer5"u1f3cc-1f3fb-200d-2642-fe0f_layer6"u1f3cc-1f3fb-200d-2642-fe0f_layer7"u1f3cc-1f3fb-200d-2642-fe0f_layer8"u1f3cc-1f3fb-200d-2642-fe0f_layer9u1f3cc-1f3fb_layer1u1f3cc-1f3fb_layer10u1f3cc-1f3fb_layer12u1f3cc-1f3fb_layer13u1f3cc-1f3fb_layer14u1f3cc-1f3fb_layer17u1f3cc-1f3fb_layer2u1f3cc-1f3fb_layer3u1f3cc-1f3fb_layer8u1f3cc-1f3fb_layer9"u1f3cc-fe0f-200d-2640-fe0f_layer10u1f3cc_1f3fbu1f3cc_1f3fb_200d_2640_fe0fu1f3cc_1f3fb_200d_2642_fe0fu1f3cc_1f3fcu1f3cc_1f3fc_200d_2640_fe0fu1f3cc_1f3fc_200d_2642_fe0fu1f3cc_1f3fdu1f3cc_1f3fd_200d_2640_fe0fu1f3cc_1f3fd_200d_2642_fe0fu1f3cc_1f3feu1f3cc_1f3fe_200d_2640_fe0fu1f3cc_1f3fe_200d_2642_fe0fu1f3cc_1f3ffu1f3cc_1f3ff_200d_2640_fe0fu1f3cc_1f3ff_200d_2642_fe0fu1f3cc_fe0f_200d_2640_fe0fu1f3cc_fe0f_200d_2642_fe0fu1f3cd_layer0u1f3cd_layer1u1f3cd_layer10u1f3cd_layer11u1f3cd_layer12u1f3cd_layer13u1f3cd_layer14u1f3cd_layer15u1f3cd_layer2u1f3cd_layer3u1f3cd_layer4u1f3cd_layer5u1f3cd_layer6u1f3cd_layer7u1f3cd_layer8u1f3cd_layer9u1f3ce_layer0u1f3ce_layer1u1f3ce_layer10u1f3ce_layer2u1f3ce_layer3u1f3ce_layer4u1f3ce_layer5u1f3ce_layer6u1f3ce_layer7u1f3ce_layer8u1f3ce_layer9u1f3cf_layer0u1f3cf_layer1u1f3cf_layer2u1f3cf_layer3u1f3cf_layer4u1f3d0_layer1u1f3d1_layer0u1f3d1_layer1u1f3d1_layer2u1f3d2_layer0u1f3d2_layer1u1f3d2_layer2u1f3d3_layer0u1f3d3_layer1u1f3d3_layer2u1f3d3_layer3u1f3d4_layer0u1f3d4_layer1u1f3d4_layer2u1f3d4_layer3u1f3d4_layer4u1f3d4_layer5u1f3d4_layer6u1f3d4_layer7u1f3d4_layer8u1f3d4_layer9u1f3d5_layer0u1f3d5_layer1u1f3d5_layer10u1f3d5_layer11u1f3d5_layer12u1f3d5_layer13u1f3d5_layer14u1f3d5_layer15u1f3d5_layer16u1f3d5_layer2u1f3d5_layer3u1f3d5_layer4u1f3d5_layer5u1f3d5_layer6u1f3d5_layer7u1f3d5_layer8u1f3d5_layer9u1f3d6_layer0u1f3d6_layer1u1f3d6_layer2u1f3d6_layer3u1f3d6_layer4u1f3d6_layer5u1f3d6_layer6u1f3d6_layer7u1f3d7_layer0u1f3d7_layer1u1f3d7_layer2u1f3d7_layer3u1f3d7_layer4u1f3d7_layer5u1f3d8_layer0u1f3d8_layer1u1f3d8_layer10u1f3d8_layer11u1f3d8_layer2u1f3d8_layer3u1f3d8_layer4u1f3d8_layer5u1f3d8_layer6u1f3d8_layer7u1f3d8_layer8u1f3d8_layer9u1f3da_layer0u1f3da_layer1u1f3da_layer2u1f3da_layer3u1f3da_layer4u1f3da_layer5u1f3da_layer6u1f3db_layer0u1f3db_layer1u1f3db_layer2u1f3db_layer3u1f3db_layer4u1f3db_layer5u1f3db_layer6u1f3dc_layer0u1f3dc_layer1u1f3dc_layer2u1f3dc_layer4u1f3dc_layer5u1f3dc_layer6u1f3dc_layer7u1f3dc_layer8u1f3dd_layer1u1f3dd_layer3u1f3dd_layer4u1f3dd_layer5u1f3dd_layer6u1f3dd_layer7u1f3dd_layer8u1f3de_layer0u1f3de_layer1u1f3de_layer2u1f3de_layer3u1f3de_layer4u1f3de_layer5u1f3de_layer6u1f3de_layer7u1f3de_layer8u1f3df_layer0u1f3df_layer1u1f3df_layer2u1f3df_layer3u1f3df_layer4u1f3df_layer5u1f3df_layer6u1f3df_layer7u1f3df_layer8u1f3df_layer9u1f3e0_layer0u1f3e0_layer1u1f3e0_layer2u1f3e0_layer3u1f3e0_layer4u1f3e0_layer5u1f3e0_layer6u1f3e1_layer0u1f3e1_layer1u1f3e1_layer10u1f3e1_layer2u1f3e1_layer3u1f3e1_layer4u1f3e1_layer5u1f3e1_layer6u1f3e1_layer7u1f3e1_layer8u1f3e1_layer9u1f3e2_layer0u1f3e2_layer1u1f3e2_layer2u1f3e2_layer3u1f3e2_layer4u1f3e2_layer5u1f3e2_layer6u1f3e2_layer7u1f3e2_layer8u1f3e3_layer0u1f3e3_layer1u1f3e3_layer2u1f3e3_layer3u1f3e3_layer4u1f3e3_layer5u1f3e3_layer6u1f3e3_layer7u1f3e3_layer8u1f3e4_layer0u1f3e4_layer1u1f3e4_layer2u1f3e4_layer3u1f3e4_layer4u1f3e4_layer5u1f3e4_layer6u1f3e4_layer7u1f3e4_layer8u1f3e5_layer0u1f3e5_layer1u1f3e5_layer2u1f3e5_layer3u1f3e5_layer4u1f3e5_layer5u1f3e5_layer6u1f3e5_layer7u1f3e6_layer0u1f3e6_layer1u1f3e6_layer2u1f3e6_layer3u1f3e6_layer4u1f3e6_layer5u1f3e6_layer6u1f3e6_layer7u1f3e6_layer8u1f3e6_layer9u1f3e7_layer1u1f3e7_layer2u1f3e8_layer0u1f3e8_layer1u1f3e8_layer2u1f3e8_layer3u1f3e8_layer4u1f3e8_layer5u1f3e8_layer6u1f3e8_layer7u1f3e8_layer8u1f3e9_layer10u1f3e9_layer7u1f3e9_layer8u1f3ea_layer0u1f3ea_layer1u1f3ea_layer10u1f3ea_layer2u1f3ea_layer3u1f3ea_layer4u1f3ea_layer5u1f3ea_layer6u1f3ea_layer7u1f3ea_layer8u1f3ea_layer9u1f3eb_layer0u1f3eb_layer1u1f3eb_layer10u1f3eb_layer11u1f3eb_layer2u1f3eb_layer3u1f3eb_layer4u1f3eb_layer5u1f3eb_layer6u1f3eb_layer7u1f3eb_layer8u1f3eb_layer9u1f3ec_layer0u1f3ec_layer1u1f3ec_layer10u1f3ec_layer11u1f3ec_layer2u1f3ec_layer3u1f3ec_layer4u1f3ec_layer5u1f3ec_layer6u1f3ec_layer7u1f3ec_layer8u1f3ec_layer9u1f3ed_layer0u1f3ed_layer1u1f3ed_layer2u1f3ed_layer3u1f3ed_layer4u1f3ed_layer5u1f3ee_layer0u1f3ee_layer1u1f3ee_layer2u1f3ef_layer0u1f3ef_layer1u1f3ef_layer2u1f3ef_layer3u1f3ef_layer4u1f3ef_layer5u1f3ef_layer6u1f3f0_layer0u1f3f0_layer1u1f3f0_layer2u1f3f0_layer3u1f3f0_layer4u1f3f0_layer5u1f3f0_layer6u1f3f0_layer7u1f3f0_layer8u1f3f3-fe0f-200d-1f308_layer0u1f3f3-fe0f-200d-1f308_layer1u1f3f3-fe0f-200d-1f308_layer2u1f3f3-fe0f-200d-1f308_layer3u1f3f3-fe0f-200d-1f308_layer4u1f3f3-fe0f-200d-1f308_layer5!u1f3f3-fe0f-200d-26a7-fe0f_layer0!u1f3f3-fe0f-200d-26a7-fe0f_layer1!u1f3f3-fe0f-200d-26a7-fe0f_layer2!u1f3f3-fe0f-200d-26a7-fe0f_layer3!u1f3f3-fe0f-200d-26a7-fe0f_layer4u1f3f3_fe0f_200d_1f308u1f3f3_fe0f_200d_26a7_fe0fu1f3f3_layer4u1f3f4-200d-2620-fe0f_layer1u1f3f4-200d-2620-fe0f_layer2u1f3f4-200d-2620-fe0f_layer3u1f3f4-200d-2620-fe0f_layer41u1f3f4-e0067-e0062-e0065-e006e-e0067-e007f_layer11u1f3f4-e0067-e0062-e0073-e0063-e0074-e007f_layer11u1f3f4-e0067-e0062-e0077-e006c-e0073-e007f_layer21u1f3f4-e0067-e0062-e0077-e006c-e0073-e007f_layer31u1f3f4-e0067-e0062-e0077-e006c-e0073-e007f_layer4u1f3f4_200d_2620_fe0f*u1f3f4_e0067_e0062_e0065_e006e_e0067_e007f*u1f3f4_e0067_e0062_e0073_e0063_e0074_e007f*u1f3f4_e0067_e0062_e0077_e006c_e0073_e007fu1f3f5_layer0u1f3f5_layer1u1f3f5_layer2u1f3f5_layer3u1f3f5_layer4u1f3f7_layer0u1f3f7_layer1u1f3f7_layer2u1f3f8_layer0u1f3f8_layer1u1f3f8_layer10u1f3f8_layer11u1f3f8_layer2u1f3f8_layer3u1f3f8_layer4u1f3f8_layer5u1f3f8_layer6u1f3f8_layer7u1f3f8_layer8u1f3f8_layer9u1f3f9_layer0u1f3f9_layer1u1f3f9_layer10u1f3f9_layer2u1f3f9_layer3u1f3f9_layer4u1f3f9_layer5u1f3f9_layer6u1f3f9_layer7u1f3f9_layer8u1f3f9_layer9u1f3fa_layer0u1f3fa_layer1u1f3fa_layer2u1f3fb_layer0u1f400_layer0u1f400_layer1u1f400_layer2u1f400_layer3u1f400_layer4u1f400_layer5u1f400_layer6u1f401_layer0u1f401_layer1u1f401_layer2u1f401_layer3u1f401_layer4u1f401_layer5u1f402_layer0u1f402_layer1u1f402_layer2u1f403_layer0u1f403_layer2u1f404_layer0u1f404_layer1u1f404_layer2u1f404_layer3u1f405_layer0u1f405_layer1u1f405_layer2u1f406_layer0u1f406_layer1u1f406_layer2u1f406_layer3u1f407_layer0u1f407_layer1u1f407_layer2u1f407_layer3u1f407_layer4u1f407_layer5u1f407_layer6u1f407_layer7u1f408-200d-2b1b_layer0u1f408-200d-2b1b_layer1u1f408-200d-2b1b_layer2u1f408-200d-2b1b_layer3u1f408-200d-2b1b_layer4u1f408-200d-2b1b_layer5u1f408_200d_2b1bu1f408_layer3u1f408_layer4u1f408_layer5u1f408_layer6u1f409_layer0u1f409_layer1u1f409_layer2u1f409_layer3u1f409_layer4u1f409_layer5u1f409_layer6u1f409_layer7u1f409_layer8u1f40a_layer0u1f40a_layer1u1f40a_layer2u1f40a_layer3u1f40a_layer4u1f40b_layer0u1f40b_layer1u1f40b_layer2u1f40c_layer0u1f40c_layer1u1f40c_layer2u1f40c_layer3u1f40d_layer0u1f40d_layer1u1f40d_layer2u1f40e_layer4u1f40f_layer0u1f40f_layer1u1f40f_layer2u1f40f_layer3u1f40f_layer4u1f40f_layer5u1f40f_layer6u1f410_layer0u1f410_layer1u1f410_layer2u1f410_layer3u1f410_layer4u1f411_layer0u1f411_layer1u1f411_layer2u1f411_layer3u1f412_layer0u1f412_layer1u1f412_layer2u1f412_layer3u1f413_layer0u1f413_layer1u1f413_layer2u1f413_layer3u1f414_layer0u1f414_layer1u1f414_layer2u1f414_layer3u1f414_layer4u1f414_layer5u1f415-200d-1f9ba_layer0u1f415-200d-1f9ba_layer1u1f415-200d-1f9ba_layer10u1f415-200d-1f9ba_layer11u1f415-200d-1f9ba_layer12u1f415-200d-1f9ba_layer13u1f415-200d-1f9ba_layer14u1f415-200d-1f9ba_layer15u1f415-200d-1f9ba_layer2u1f415-200d-1f9ba_layer3u1f415-200d-1f9ba_layer4u1f415-200d-1f9ba_layer5u1f415-200d-1f9ba_layer6u1f415-200d-1f9ba_layer7u1f415-200d-1f9ba_layer8u1f415-200d-1f9ba_layer9u1f415_200d_1f9bau1f415_layer0u1f415_layer1u1f415_layer2u1f415_layer3u1f415_layer4u1f415_layer6u1f415_layer8u1f415_layer9u1f416_layer0u1f416_layer1u1f417_layer0u1f417_layer1u1f417_layer2u1f417_layer3u1f417_layer4u1f417_layer5u1f417_layer6u1f418_layer0u1f418_layer1u1f418_layer2u1f419_layer0u1f419_layer1u1f419_layer2u1f419_layer3u1f419_layer4u1f41a_layer0u1f41a_layer1u1f41a_layer2u1f41b_layer0u1f41b_layer1u1f41b_layer2u1f41b_layer3u1f41b_layer4u1f41c_layer0u1f41c_layer1u1f41c_layer2u1f41d_layer0u1f41d_layer1u1f41d_layer2u1f41d_layer3u1f41e_layer0u1f41e_layer1u1f41e_layer2u1f41e_layer3u1f41f_layer0u1f41f_layer1u1f41f_layer2u1f41f_layer3u1f41f_layer4u1f41f_layer5u1f420_layer0u1f420_layer1u1f420_layer2u1f420_layer3u1f420_layer4u1f421_layer0u1f421_layer1u1f421_layer2u1f421_layer3u1f421_layer4u1f421_layer5u1f421_layer6u1f422_layer0u1f422_layer1u1f422_layer2u1f422_layer3u1f422_layer4u1f423_layer0u1f423_layer1u1f423_layer2u1f423_layer3u1f423_layer4u1f424_layer0u1f424_layer1u1f424_layer2u1f424_layer3u1f424_layer4u1f425_layer0u1f425_layer1u1f426_layer0u1f426_layer1u1f426_layer2u1f426_layer3u1f426_layer4u1f426_layer5u1f426_layer6u1f426_layer7u1f426_layer8u1f427_layer0u1f427_layer1u1f427_layer2u1f427_layer3u1f428_layer0u1f428_layer1u1f428_layer2u1f429_layer0u1f429_layer1u1f429_layer10u1f429_layer11u1f429_layer12u1f429_layer2u1f429_layer3u1f429_layer4u1f429_layer5u1f429_layer6u1f429_layer7u1f429_layer8u1f429_layer9u1f42a_layer0u1f42a_layer1u1f42b_layer0u1f42b_layer1u1f42c_layer0u1f42c_layer1u1f42c_layer2u1f42c_layer3u1f42d_layer0u1f42d_layer1u1f42d_layer2u1f42d_layer3u1f42d_layer4u1f42d_layer5u1f42d_layer6u1f42d_layer7u1f42e_layer0u1f42e_layer1u1f42e_layer2u1f42e_layer3u1f42e_layer4u1f42e_layer5u1f42f_layer0u1f42f_layer1u1f42f_layer2u1f42f_layer3u1f42f_layer4u1f42f_layer5u1f42f_layer6u1f430_layer0u1f430_layer1u1f430_layer2u1f430_layer3u1f430_layer4u1f430_layer5u1f431_layer0u1f431_layer1u1f431_layer2u1f431_layer3u1f431_layer4u1f431_layer5u1f431_layer6u1f432_layer0u1f432_layer1u1f432_layer2u1f432_layer3u1f432_layer4u1f432_layer5u1f433_layer0u1f433_layer1u1f433_layer2u1f433_layer3u1f433_layer4u1f434_layer0u1f434_layer1u1f434_layer2u1f434_layer3u1f434_layer4u1f434_layer5u1f435_layer0u1f435_layer1u1f435_layer2u1f435_layer3u1f435_layer4u1f435_layer5u1f435_layer6u1f436_layer0u1f436_layer1u1f436_layer2u1f436_layer3u1f436_layer4u1f436_layer5u1f436_layer6u1f436_layer7u1f437_layer0u1f437_layer1u1f437_layer3u1f438_layer0u1f438_layer1u1f438_layer2u1f438_layer3u1f438_layer4u1f439_layer1u1f439_layer2u1f439_layer3u1f439_layer4u1f439_layer5u1f439_layer6u1f43a_layer0u1f43a_layer1u1f43a_layer2u1f43a_layer3u1f43a_layer4u1f43b-200d-2744-fe0f_layer0u1f43b-200d-2744-fe0f_layer1u1f43b-200d-2744-fe0f_layer2u1f43b-200d-2744-fe0f_layer4u1f43b-200d-2744-fe0f_layer5u1f43b-200d-2744-fe0f_layer6u1f43b-200d-2744-fe0f_layer7u1f43b-200d-2744-fe0f_layer8u1f43b_200d_2744_fe0fu1f43b_layer0u1f43b_layer2u1f43b_layer4u1f43b_layer5u1f43c_layer2u1f43c_layer3u1f43c_layer5u1f43c_layer6u1f43c_layer8u1f43c_layer9u1f43d_layer0u1f43d_layer1u1f43e_layer0u1f43f_layer0u1f43f_layer1u1f43f_layer2u1f43f_layer3u1f43f_layer4u1f43f_layer5u1f43f_layer6u1f440_layer0u1f440_layer1u1f440_layer2u1f440_layer3u1f440_layer4u1f440_layer5u1f440_layer6u1f440_layer7u1f440_layer8"u1f441-fe0f-200d-1f5e8-fe0f_layer0"u1f441-fe0f-200d-1f5e8-fe0f_layer1"u1f441-fe0f-200d-1f5e8-fe0f_layer2"u1f441-fe0f-200d-1f5e8-fe0f_layer3u1f441_fe0f_200d_1f5e8_fe0fu1f441_layer0u1f441_layer1u1f441_layer2u1f441_layer3u1f441_layer4u1f441_layer5u1f442-1f3fb_layer0u1f442-1f3fb_layer1u1f442-1f3fb_layer2u1f442_1f3fbu1f442_1f3fcu1f442_1f3fdu1f442_1f3feu1f442_1f3ffu1f443-1f3fb_layer0u1f443-1f3fb_layer1u1f443-1f3fb_layer2u1f443-1f3ff_layer2u1f443_1f3fbu1f443_1f3fcu1f443_1f3fdu1f443_1f3feu1f443_1f3ffu1f444_layer0u1f444_layer1u1f444_layer2u1f445_layer0u1f445_layer1u1f445_layer2u1f446-1f3fb_layer0u1f446_1f3fbu1f446_1f3fcu1f446_1f3fdu1f446_1f3feu1f446_1f3ffu1f447-1f3fb_layer0u1f447-1f3fd_layer0u1f447_1f3fbu1f447_1f3fcu1f447_1f3fdu1f447_1f3feu1f447_1f3ffu1f448-1f3fb_layer0u1f448_1f3fbu1f448_1f3fcu1f448_1f3fdu1f448_1f3feu1f448_1f3ffu1f449-1f3fb_layer0u1f449_1f3fbu1f449_1f3fcu1f449_1f3fdu1f449_1f3feu1f449_1f3ffu1f44a-1f3fb_layer0u1f44a-1f3fb_layer1u1f44a-1f3fb_layer2u1f44a_1f3fbu1f44a_1f3fcu1f44a_1f3fdu1f44a_1f3feu1f44a_1f3ffu1f44b-1f3fb_layer0u1f44b-1f3fb_layer1u1f44b-1f3fb_layer2u1f44b-1f3fb_layer3u1f44b-1f3fb_layer4u1f44b_1f3fbu1f44b_1f3fcu1f44b_1f3fdu1f44b_1f3feu1f44b_1f3ffu1f44c-1f3fb_layer0u1f44c-1f3fb_layer1u1f44c_1f3fbu1f44c_1f3fcu1f44c_1f3fdu1f44c_1f3feu1f44c_1f3ffu1f44d-1f3fb_layer0u1f44d-1f3fb_layer1u1f44d_1f3fbu1f44d_1f3fcu1f44d_1f3fdu1f44d_1f3feu1f44d_1f3ffu1f44e-1f3fb_layer0u1f44e-1f3fb_layer1u1f44e_1f3fbu1f44e_1f3fcu1f44e_1f3fdu1f44e_1f3feu1f44e_1f3ffu1f44f-1f3fb_layer0u1f44f-1f3fb_layer1u1f44f-1f3fb_layer2u1f44f_1f3fbu1f44f_1f3fcu1f44f_1f3fdu1f44f_1f3feu1f44f_1f3ffu1f450-1f3fb_layer0u1f450-1f3fb_layer1u1f450-1f3fb_layer2u1f450-1f3fc_layer0u1f450-1f3fd_layer0u1f450-1f3fe_layer0u1f450-1f3ff_layer0u1f450_1f3fbu1f450_1f3fcu1f450_1f3fdu1f450_1f3feu1f450_1f3ffu1f450_layer0u1f451_layer0u1f451_layer1u1f451_layer2u1f451_layer3u1f451_layer4u1f451_layer5u1f451_layer6u1f451_layer7u1f451_layer8u1f451_layer9u1f452_layer0u1f452_layer1u1f452_layer2u1f452_layer3u1f452_layer4u1f452_layer5u1f452_layer6u1f452_layer7u1f453_layer0u1f453_layer1u1f454_layer1u1f454_layer2u1f454_layer3u1f454_layer4u1f454_layer5u1f454_layer6u1f455_layer0u1f455_layer1u1f455_layer2u1f455_layer3u1f456_layer0u1f456_layer1u1f456_layer2u1f456_layer3u1f457_layer0u1f457_layer1u1f457_layer2u1f458_layer0u1f458_layer1u1f458_layer2u1f458_layer3u1f458_layer4u1f458_layer5u1f458_layer6u1f459_layer0u1f459_layer1u1f45a_layer0u1f45a_layer1u1f45a_layer2u1f45b_layer0u1f45b_layer1u1f45b_layer2u1f45b_layer3u1f45b_layer4u1f45c_layer0u1f45c_layer1u1f45c_layer2u1f45d_layer0u1f45d_layer1u1f45d_layer2u1f45e_layer0u1f45e_layer1u1f45e_layer2u1f45e_layer3u1f45f_layer0u1f45f_layer1u1f45f_layer2u1f45f_layer3u1f45f_layer4u1f45f_layer5u1f460_layer0u1f460_layer1u1f461_layer0u1f461_layer1u1f461_layer2u1f462_layer0u1f462_layer1u1f462_layer2u1f463_layer0u1f464_layer0u1f465_layer0u1f465_layer1u1f466-1f3fb_layer0u1f466-1f3fb_layer1u1f466-1f3fb_layer2u1f466-1f3fb_layer3u1f466-1f3fb_layer4u1f466-1f3ff_layer2u1f466_1f3fbu1f466_1f3fcu1f466_1f3fdu1f466_1f3feu1f466_1f3ffu1f467-1f3fb_layer0u1f467-1f3fb_layer1u1f467-1f3fb_layer2u1f467-1f3fb_layer3u1f467-1f3fb_layer4u1f467-1f3fb_layer5u1f467-1f3fb_layer6u1f467-1f3fb_layer7u1f467-1f3fb_layer8u1f467-1f3ff_layer7u1f467_1f3fbu1f467_1f3fcu1f467_1f3fdu1f467_1f3feu1f467_1f3ffu1f468-1f3fb-200d-1f33e_layer0u1f468-1f3fb-200d-1f33e_layer1u1f468-1f3fb-200d-1f33e_layer10u1f468-1f3fb-200d-1f33e_layer11u1f468-1f3fb-200d-1f33e_layer12u1f468-1f3fb-200d-1f33e_layer13u1f468-1f3fb-200d-1f33e_layer14u1f468-1f3fb-200d-1f33e_layer2u1f468-1f3fb-200d-1f33e_layer3u1f468-1f3fb-200d-1f33e_layer4u1f468-1f3fb-200d-1f33e_layer5u1f468-1f3fb-200d-1f33e_layer6u1f468-1f3fb-200d-1f33e_layer7u1f468-1f3fb-200d-1f33e_layer8u1f468-1f3fb-200d-1f33e_layer9u1f468-1f3fb-200d-1f373_layer1u1f468-1f3fb-200d-1f373_layer10u1f468-1f3fb-200d-1f373_layer11u1f468-1f3fb-200d-1f373_layer12u1f468-1f3fb-200d-1f373_layer14u1f468-1f3fb-200d-1f373_layer2u1f468-1f3fb-200d-1f373_layer8u1f468-1f3fb-200d-1f373_layer9u1f468-1f3fb-200d-1f37c_layer0u1f468-1f3fb-200d-1f37c_layer1u1f468-1f3fb-200d-1f37c_layer10u1f468-1f3fb-200d-1f37c_layer11u1f468-1f3fb-200d-1f37c_layer12u1f468-1f3fb-200d-1f37c_layer13u1f468-1f3fb-200d-1f37c_layer14u1f468-1f3fb-200d-1f37c_layer15u1f468-1f3fb-200d-1f37c_layer2u1f468-1f3fb-200d-1f37c_layer3u1f468-1f3fb-200d-1f37c_layer4u1f468-1f3fb-200d-1f37c_layer5u1f468-1f3fb-200d-1f37c_layer6u1f468-1f3fb-200d-1f37c_layer7u1f468-1f3fb-200d-1f37c_layer8u1f468-1f3fb-200d-1f37c_layer9u1f468-1f3fb-200d-1f393_layer0u1f468-1f3fb-200d-1f393_layer1u1f468-1f3fb-200d-1f393_layer10u1f468-1f3fb-200d-1f393_layer11u1f468-1f3fb-200d-1f393_layer12u1f468-1f3fb-200d-1f393_layer2u1f468-1f3fb-200d-1f393_layer3u1f468-1f3fb-200d-1f393_layer4u1f468-1f3fb-200d-1f393_layer5u1f468-1f3fb-200d-1f393_layer6u1f468-1f3fb-200d-1f393_layer7u1f468-1f3fb-200d-1f393_layer8u1f468-1f3fb-200d-1f393_layer9u1f468-1f3fb-200d-1f3a4_layer0u1f468-1f3fb-200d-1f3a4_layer1u1f468-1f3fb-200d-1f3a4_layer10u1f468-1f3fb-200d-1f3a4_layer11u1f468-1f3fb-200d-1f3a4_layer12u1f468-1f3fb-200d-1f3a4_layer13u1f468-1f3fb-200d-1f3a4_layer14u1f468-1f3fb-200d-1f3a4_layer15u1f468-1f3fb-200d-1f3a4_layer2u1f468-1f3fb-200d-1f3a4_layer3u1f468-1f3fb-200d-1f3a4_layer4u1f468-1f3fb-200d-1f3a4_layer5u1f468-1f3fb-200d-1f3a4_layer6u1f468-1f3fb-200d-1f3a4_layer7u1f468-1f3fb-200d-1f3a4_layer8u1f468-1f3fb-200d-1f3a4_layer9u1f468-1f3fb-200d-1f3a8_layer0u1f468-1f3fb-200d-1f3a8_layer10u1f468-1f3fb-200d-1f3a8_layer11u1f468-1f3fb-200d-1f3a8_layer12u1f468-1f3fb-200d-1f3a8_layer13u1f468-1f3fb-200d-1f3a8_layer2u1f468-1f3fb-200d-1f3a8_layer4u1f468-1f3fb-200d-1f3a8_layer6u1f468-1f3fb-200d-1f3a8_layer7u1f468-1f3fb-200d-1f3a8_layer8u1f468-1f3fb-200d-1f3a8_layer9u1f468-1f3fb-200d-1f3eb_layer0u1f468-1f3fb-200d-1f3eb_layer1u1f468-1f3fb-200d-1f3eb_layer10u1f468-1f3fb-200d-1f3eb_layer11u1f468-1f3fb-200d-1f3eb_layer12u1f468-1f3fb-200d-1f3eb_layer13u1f468-1f3fb-200d-1f3eb_layer2u1f468-1f3fb-200d-1f3eb_layer4u1f468-1f3fb-200d-1f3ed_layer1u1f468-1f3fb-200d-1f3ed_layer10u1f468-1f3fb-200d-1f3ed_layer11u1f468-1f3fb-200d-1f3ed_layer12u1f468-1f3fb-200d-1f3ed_layer13u1f468-1f3fb-200d-1f3ed_layer14u1f468-1f3fb-200d-1f3ed_layer15u1f468-1f3fb-200d-1f3ed_layer16u1f468-1f3fb-200d-1f3ed_layer17u1f468-1f3fb-200d-1f3ed_layer18u1f468-1f3fb-200d-1f3ed_layer2u1f468-1f3fb-200d-1f3ed_layer3u1f468-1f3fb-200d-1f3ed_layer6u1f468-1f3fb-200d-1f3ed_layer8u1f468-1f3fb-200d-1f3ed_layer9u1f468-1f3fb-200d-1f4bb_layer0u1f468-1f3fb-200d-1f4bb_layer1u1f468-1f3fb-200d-1f4bb_layer10u1f468-1f3fb-200d-1f4bb_layer2u1f468-1f3fb-200d-1f4bb_layer3u1f468-1f3fb-200d-1f4bb_layer4u1f468-1f3fb-200d-1f4bb_layer5u1f468-1f3fb-200d-1f4bb_layer6u1f468-1f3fb-200d-1f4bb_layer7u1f468-1f3fb-200d-1f4bb_layer8u1f468-1f3fb-200d-1f4bb_layer9u1f468-1f3fb-200d-1f4bc_layer1u1f468-1f3fb-200d-1f4bc_layer11u1f468-1f3fb-200d-1f4bc_layer13u1f468-1f3fb-200d-1f4bc_layer14u1f468-1f3fb-200d-1f4bc_layer15u1f468-1f3fb-200d-1f4bc_layer16u1f468-1f3fb-200d-1f4bc_layer2u1f468-1f3fb-200d-1f4bc_layer3u1f468-1f3fb-200d-1f4bc_layer4u1f468-1f3fb-200d-1f4bc_layer5u1f468-1f3fb-200d-1f4bc_layer6u1f468-1f3fb-200d-1f4bc_layer7u1f468-1f3fb-200d-1f4bc_layer8u1f468-1f3fb-200d-1f4bc_layer9u1f468-1f3fb-200d-1f527_layer10u1f468-1f3fb-200d-1f527_layer11u1f468-1f3fb-200d-1f527_layer12u1f468-1f3fb-200d-1f527_layer13u1f468-1f3fb-200d-1f527_layer14u1f468-1f3fb-200d-1f527_layer8u1f468-1f3fb-200d-1f527_layer9u1f468-1f3fb-200d-1f52c_layer0u1f468-1f3fb-200d-1f52c_layer1u1f468-1f3fb-200d-1f52c_layer10u1f468-1f3fb-200d-1f52c_layer11u1f468-1f3fb-200d-1f52c_layer12u1f468-1f3fb-200d-1f52c_layer13u1f468-1f3fb-200d-1f52c_layer14u1f468-1f3fb-200d-1f52c_layer2u1f468-1f3fb-200d-1f52c_layer3u1f468-1f3fb-200d-1f52c_layer4u1f468-1f3fb-200d-1f52c_layer5u1f468-1f3fb-200d-1f52c_layer6u1f468-1f3fb-200d-1f52c_layer7u1f468-1f3fb-200d-1f52c_layer8u1f468-1f3fb-200d-1f52c_layer9u1f468-1f3fb-200d-1f680_layer1u1f468-1f3fb-200d-1f680_layer10u1f468-1f3fb-200d-1f680_layer11u1f468-1f3fb-200d-1f680_layer12u1f468-1f3fb-200d-1f680_layer13u1f468-1f3fb-200d-1f680_layer14u1f468-1f3fb-200d-1f680_layer15u1f468-1f3fb-200d-1f680_layer16u1f468-1f3fb-200d-1f680_layer17u1f468-1f3fb-200d-1f680_layer2u1f468-1f3fb-200d-1f680_layer3u1f468-1f3fb-200d-1f680_layer4u1f468-1f3fb-200d-1f692_layer0u1f468-1f3fb-200d-1f692_layer1u1f468-1f3fb-200d-1f692_layer10u1f468-1f3fb-200d-1f692_layer11u1f468-1f3fb-200d-1f692_layer12u1f468-1f3fb-200d-1f692_layer13u1f468-1f3fb-200d-1f692_layer2u1f468-1f3fb-200d-1f692_layer3u1f468-1f3fb-200d-1f692_layer4u1f468-1f3fb-200d-1f692_layer5u1f468-1f3fb-200d-1f692_layer6u1f468-1f3fb-200d-1f692_layer7u1f468-1f3fb-200d-1f692_layer8u1f468-1f3fb-200d-1f692_layer9/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer0/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer10u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer100u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer110u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer120u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer140u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer150u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer160u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer170u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer180u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer19/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer20u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer200u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer210u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer22/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer3/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer4/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer5/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer6/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer7/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer8/u1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer90u1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff_layer22u1f468-1f3fb-200d-1f9af_layer0u1f468-1f3fb-200d-1f9af_layer1u1f468-1f3fb-200d-1f9af_layer10u1f468-1f3fb-200d-1f9af_layer11u1f468-1f3fb-200d-1f9af_layer12u1f468-1f3fb-200d-1f9af_layer13u1f468-1f3fb-200d-1f9af_layer14u1f468-1f3fb-200d-1f9af_layer2u1f468-1f3fb-200d-1f9af_layer3u1f468-1f3fb-200d-1f9af_layer4u1f468-1f3fb-200d-1f9af_layer5u1f468-1f3fb-200d-1f9af_layer6u1f468-1f3fb-200d-1f9af_layer7u1f468-1f3fb-200d-1f9af_layer8u1f468-1f3fb-200d-1f9af_layer9u1f468-1f3fb-200d-1f9b0_layer0u1f468-1f3fb-200d-1f9b0_layer1u1f468-1f3fb-200d-1f9b0_layer2u1f468-1f3fb-200d-1f9b0_layer3u1f468-1f3fb-200d-1f9b1_layer3u1f468-1f3fb-200d-1f9b2_layer0u1f468-1f3fb-200d-1f9bc_layer0u1f468-1f3fb-200d-1f9bc_layer1u1f468-1f3fb-200d-1f9bc_layer10u1f468-1f3fb-200d-1f9bc_layer11u1f468-1f3fb-200d-1f9bc_layer12u1f468-1f3fb-200d-1f9bc_layer13u1f468-1f3fb-200d-1f9bc_layer14u1f468-1f3fb-200d-1f9bc_layer15u1f468-1f3fb-200d-1f9bc_layer16u1f468-1f3fb-200d-1f9bc_layer17u1f468-1f3fb-200d-1f9bc_layer18u1f468-1f3fb-200d-1f9bc_layer19u1f468-1f3fb-200d-1f9bc_layer2u1f468-1f3fb-200d-1f9bc_layer20u1f468-1f3fb-200d-1f9bc_layer21u1f468-1f3fb-200d-1f9bc_layer22u1f468-1f3fb-200d-1f9bc_layer23u1f468-1f3fb-200d-1f9bc_layer24u1f468-1f3fb-200d-1f9bc_layer25u1f468-1f3fb-200d-1f9bc_layer3u1f468-1f3fb-200d-1f9bc_layer4u1f468-1f3fb-200d-1f9bc_layer5u1f468-1f3fb-200d-1f9bc_layer6u1f468-1f3fb-200d-1f9bc_layer7u1f468-1f3fb-200d-1f9bc_layer8u1f468-1f3fb-200d-1f9bc_layer9u1f468-1f3fb-200d-1f9bd_layer0u1f468-1f3fb-200d-1f9bd_layer1u1f468-1f3fb-200d-1f9bd_layer10u1f468-1f3fb-200d-1f9bd_layer11u1f468-1f3fb-200d-1f9bd_layer12u1f468-1f3fb-200d-1f9bd_layer13u1f468-1f3fb-200d-1f9bd_layer14u1f468-1f3fb-200d-1f9bd_layer15u1f468-1f3fb-200d-1f9bd_layer16u1f468-1f3fb-200d-1f9bd_layer17u1f468-1f3fb-200d-1f9bd_layer18u1f468-1f3fb-200d-1f9bd_layer19u1f468-1f3fb-200d-1f9bd_layer2u1f468-1f3fb-200d-1f9bd_layer20u1f468-1f3fb-200d-1f9bd_layer21u1f468-1f3fb-200d-1f9bd_layer22u1f468-1f3fb-200d-1f9bd_layer23u1f468-1f3fb-200d-1f9bd_layer3u1f468-1f3fb-200d-1f9bd_layer4u1f468-1f3fb-200d-1f9bd_layer5u1f468-1f3fb-200d-1f9bd_layer6u1f468-1f3fb-200d-1f9bd_layer7u1f468-1f3fb-200d-1f9bd_layer8u1f468-1f3fb-200d-1f9bd_layer9"u1f468-1f3fb-200d-2695-fe0f_layer0"u1f468-1f3fb-200d-2695-fe0f_layer1#u1f468-1f3fb-200d-2695-fe0f_layer10"u1f468-1f3fb-200d-2695-fe0f_layer2"u1f468-1f3fb-200d-2695-fe0f_layer3"u1f468-1f3fb-200d-2695-fe0f_layer4"u1f468-1f3fb-200d-2695-fe0f_layer5"u1f468-1f3fb-200d-2695-fe0f_layer6"u1f468-1f3fb-200d-2695-fe0f_layer7"u1f468-1f3fb-200d-2695-fe0f_layer8"u1f468-1f3fb-200d-2695-fe0f_layer9"u1f468-1f3fb-200d-2696-fe0f_layer1#u1f468-1f3fb-200d-2696-fe0f_layer10#u1f468-1f3fb-200d-2696-fe0f_layer11#u1f468-1f3fb-200d-2696-fe0f_layer12#u1f468-1f3fb-200d-2696-fe0f_layer13#u1f468-1f3fb-200d-2696-fe0f_layer14#u1f468-1f3fb-200d-2696-fe0f_layer15"u1f468-1f3fb-200d-2696-fe0f_layer2"u1f468-1f3fb-200d-2696-fe0f_layer5"u1f468-1f3fb-200d-2696-fe0f_layer7"u1f468-1f3fb-200d-2696-fe0f_layer8"u1f468-1f3fb-200d-2696-fe0f_layer9"u1f468-1f3fb-200d-2708-fe0f_layer0"u1f468-1f3fb-200d-2708-fe0f_layer1#u1f468-1f3fb-200d-2708-fe0f_layer10#u1f468-1f3fb-200d-2708-fe0f_layer11#u1f468-1f3fb-200d-2708-fe0f_layer12#u1f468-1f3fb-200d-2708-fe0f_layer13#u1f468-1f3fb-200d-2708-fe0f_layer14#u1f468-1f3fb-200d-2708-fe0f_layer15"u1f468-1f3fb-200d-2708-fe0f_layer2"u1f468-1f3fb-200d-2708-fe0f_layer3"u1f468-1f3fb-200d-2708-fe0f_layer4"u1f468-1f3fb-200d-2708-fe0f_layer5"u1f468-1f3fb-200d-2708-fe0f_layer6"u1f468-1f3fb-200d-2708-fe0f_layer8"u1f468-1f3fb-200d-2708-fe0f_layer93u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer03u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer13u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer23u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer33u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer43u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer53u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer63u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer03u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer14u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer104u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer113u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer23u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer33u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer43u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer53u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer63u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer73u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer83u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer94u1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff_layer11>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer0>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer1>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer2>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer3>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer0>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer1>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer2>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer3>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer4>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer5>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer6>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer7>u1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff_layer6u1f468-1f3fb_layer0u1f468-1f3fb_layer1u1f468-1f3fb_layer2u1f468-1f3fb_layer3u1f468-1f3fb_layer4u1f468-1f3fc-200d-1f692_layer11u1f468-1f3fc-200d-1f692_layer9/u1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb_layer3u1f468-1f3fc-200d-1f9bc_layer2u1f468-1f3fc-200d-1f9bc_layer3u1f468-1f3fc-200d-1f9bd_layer2u1f468-1f3fc-200d-1f9bd_layer3"u1f468-1f3fc-200d-2695-fe0f_layer5"u1f468-1f3fc-200d-2695-fe0f_layer7u1f468-1f3fe-200d-1f9b0_layer1#u1f468-1f3fe-200d-2696-fe0f_layer13u1f468-1f3ff-200d-1f33e_layer7u1f468-1f3ff-200d-1f37c_layer6u1f468-1f3ff-200d-1f393_layer8u1f468-1f3ff-200d-1f3a4_layer12u1f468-1f3ff-200d-1f4bb_layer6u1f468-1f3ff-200d-1f4bc_layer11u1f468-1f3ff-200d-1f52c_layer6u1f468-1f3ff-200d-1f680_layer1u1f468-1f3ff-200d-1f692_layer100u1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb_layer10u1f468-1f3ff-200d-1f9b0_layer1u1f468-1f3ff-200d-1f9b1_layer1"u1f468-1f3ff-200d-2695-fe0f_layer63u1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb_layer53u1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff_layer5>u1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer2>u1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff_layer2u1f468-1f3ff_layer2u1f468-200d-1f3a8_layer1u1f468-200d-1f3a8_layer10u1f468-200d-1f3a8_layer11u1f468-200d-1f3a8_layer12u1f468-200d-1f3a8_layer13u1f468-200d-1f3a8_layer2u1f468-200d-1f3a8_layer3u1f468-200d-1f3a8_layer4u1f468-200d-1f3a8_layer5u1f468-200d-1f3a8_layer6u1f468-200d-1f3a8_layer8u1f468-200d-1f3a8_layer9#u1f468-200d-1f466-200d-1f466_layer0#u1f468-200d-1f466-200d-1f466_layer1$u1f468-200d-1f466-200d-1f466_layer10$u1f468-200d-1f466-200d-1f466_layer11$u1f468-200d-1f466-200d-1f466_layer12$u1f468-200d-1f466-200d-1f466_layer13$u1f468-200d-1f466-200d-1f466_layer14$u1f468-200d-1f466-200d-1f466_layer15$u1f468-200d-1f466-200d-1f466_layer16#u1f468-200d-1f466-200d-1f466_layer2#u1f468-200d-1f466-200d-1f466_layer3#u1f468-200d-1f466-200d-1f466_layer4#u1f468-200d-1f466-200d-1f466_layer5#u1f468-200d-1f466-200d-1f466_layer6#u1f468-200d-1f466-200d-1f466_layer7#u1f468-200d-1f466-200d-1f466_layer8#u1f468-200d-1f466-200d-1f466_layer9u1f468-200d-1f466_layer0u1f468-200d-1f466_layer1u1f468-200d-1f466_layer10u1f468-200d-1f466_layer11u1f468-200d-1f466_layer2u1f468-200d-1f466_layer3u1f468-200d-1f466_layer4u1f468-200d-1f466_layer5u1f468-200d-1f466_layer6u1f468-200d-1f466_layer7u1f468-200d-1f466_layer8u1f468-200d-1f466_layer9$u1f468-200d-1f467-200d-1f466_layer10$u1f468-200d-1f467-200d-1f466_layer11$u1f468-200d-1f467-200d-1f466_layer12$u1f468-200d-1f467-200d-1f466_layer13$u1f468-200d-1f467-200d-1f466_layer14#u1f468-200d-1f467-200d-1f466_layer3#u1f468-200d-1f467-200d-1f466_layer7#u1f468-200d-1f467-200d-1f466_layer8#u1f468-200d-1f467-200d-1f466_layer9$u1f468-200d-1f467-200d-1f467_layer12$u1f468-200d-1f467-200d-1f467_layer13$u1f468-200d-1f467-200d-1f467_layer14#u1f468-200d-1f467-200d-1f467_layer3#u1f468-200d-1f467-200d-1f467_layer7#u1f468-200d-1f467-200d-1f467_layer8#u1f468-200d-1f467-200d-1f467_layer9u1f468-200d-1f467_layer1u1f468-200d-1f467_layer10u1f468-200d-1f467_layer11u1f468-200d-1f467_layer12u1f468-200d-1f467_layer2u1f468-200d-1f467_layer3u1f468-200d-1f467_layer4u1f468-200d-1f467_layer5u1f468-200d-1f467_layer7u1f468-200d-1f467_layer8u1f468-200d-1f467_layer9.u1f468-200d-1f468-200d-1f466-200d-1f466_layer0.u1f468-200d-1f468-200d-1f466-200d-1f466_layer1/u1f468-200d-1f468-200d-1f466-200d-1f466_layer10/u1f468-200d-1f468-200d-1f466-200d-1f466_layer11/u1f468-200d-1f468-200d-1f466-200d-1f466_layer12.u1f468-200d-1f468-200d-1f466-200d-1f466_layer2.u1f468-200d-1f468-200d-1f466-200d-1f466_layer3.u1f468-200d-1f468-200d-1f466-200d-1f466_layer4.u1f468-200d-1f468-200d-1f466-200d-1f466_layer5.u1f468-200d-1f468-200d-1f466-200d-1f466_layer6.u1f468-200d-1f468-200d-1f466-200d-1f466_layer7.u1f468-200d-1f468-200d-1f466-200d-1f466_layer8.u1f468-200d-1f468-200d-1f466-200d-1f466_layer9$u1f468-200d-1f468-200d-1f466_layer13$u1f468-200d-1f468-200d-1f466_layer14$u1f468-200d-1f468-200d-1f466_layer15$u1f468-200d-1f468-200d-1f466_layer16$u1f468-200d-1f468-200d-1f466_layer17#u1f468-200d-1f468-200d-1f466_layer9/u1f468-200d-1f468-200d-1f467-200d-1f466_layer14/u1f468-200d-1f468-200d-1f467-200d-1f466_layer15/u1f468-200d-1f468-200d-1f467-200d-1f466_layer17/u1f468-200d-1f468-200d-1f467-200d-1f466_layer19.u1f468-200d-1f468-200d-1f467-200d-1f467_layer9$u1f468-200d-1f468-200d-1f467_layer13$u1f468-200d-1f468-200d-1f467_layer14$u1f468-200d-1f468-200d-1f467_layer15$u1f468-200d-1f468-200d-1f467_layer16$u1f468-200d-1f468-200d-1f467_layer17$u1f468-200d-1f468-200d-1f467_layer18$u1f468-200d-1f468-200d-1f467_layer19#u1f468-200d-1f468-200d-1f467_layer9.u1f468-200d-1f469-200d-1f466-200d-1f466_layer0.u1f468-200d-1f469-200d-1f466-200d-1f466_layer1.u1f468-200d-1f469-200d-1f466-200d-1f466_layer2.u1f468-200d-1f469-200d-1f466-200d-1f466_layer4.u1f468-200d-1f469-200d-1f466-200d-1f466_layer5.u1f468-200d-1f469-200d-1f466-200d-1f466_layer6.u1f468-200d-1f469-200d-1f466-200d-1f466_layer7/u1f468-200d-1f469-200d-1f467-200d-1f467_layer10/u1f468-200d-1f469-200d-1f467-200d-1f467_layer14/u1f468-200d-1f469-200d-1f467-200d-1f467_layer15/u1f468-200d-1f469-200d-1f467-200d-1f467_layer16/u1f468-200d-1f469-200d-1f467-200d-1f467_layer18/u1f468-200d-1f469-200d-1f467-200d-1f467_layer19/u1f468-200d-1f469-200d-1f467-200d-1f467_layer21/u1f468-200d-1f469-200d-1f467-200d-1f467_layer23u1f468-200d-1f680_layer0u1f468-200d-1f680_layer1u1f468-200d-1f680_layer12u1f468-200d-1f680_layer13u1f468-200d-1f680_layer14u1f468-200d-1f680_layer15u1f468-200d-1f680_layer16u1f468-200d-1f680_layer17u1f468-200d-1f680_layer2u1f468-200d-1f680_layer3u1f468-200d-1f680_layer4u1f468-200d-1f680_layer7u1f468-200d-1f680_layer8u1f468_1f3fbu1f468_1f3fb_200d_1f33eu1f468_1f3fb_200d_1f373u1f468_1f3fb_200d_1f37cu1f468_1f3fb_200d_1f384u1f468_1f3fb_200d_1f393u1f468_1f3fb_200d_1f3a4u1f468_1f3fb_200d_1f3a8u1f468_1f3fb_200d_1f3ebu1f468_1f3fb_200d_1f3edu1f468_1f3fb_200d_1f4bbu1f468_1f3fb_200d_1f4bcu1f468_1f3fb_200d_1f527u1f468_1f3fb_200d_1f52cu1f468_1f3fb_200d_1f680u1f468_1f3fb_200d_1f692(u1f468_1f3fb_200d_1f91d_200d_1f468_1f3fc(u1f468_1f3fb_200d_1f91d_200d_1f468_1f3fd(u1f468_1f3fb_200d_1f91d_200d_1f468_1f3fe(u1f468_1f3fb_200d_1f91d_200d_1f468_1f3ffu1f468_1f3fb_200d_1f9afu1f468_1f3fb_200d_1f9b0u1f468_1f3fb_200d_1f9b1u1f468_1f3fb_200d_1f9b2u1f468_1f3fb_200d_1f9b3u1f468_1f3fb_200d_1f9bcu1f468_1f3fb_200d_1f9bdu1f468_1f3fb_200d_2695_fe0fu1f468_1f3fb_200d_2696_fe0fu1f468_1f3fb_200d_2708_fe0f,u1f468_1f3fb_200d_2764_fe0f_200d_1f468_1f3fb,u1f468_1f3fb_200d_2764_fe0f_200d_1f468_1f3fc,u1f468_1f3fb_200d_2764_fe0f_200d_1f468_1f3fd,u1f468_1f3fb_200d_2764_fe0f_200d_1f468_1f3fe,u1f468_1f3fb_200d_2764_fe0f_200d_1f468_1f3ff7u1f468_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f468_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f468_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f468_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f468_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ffu1f468_1f3fcu1f468_1f3fc_200d_1f33eu1f468_1f3fc_200d_1f373u1f468_1f3fc_200d_1f37cu1f468_1f3fc_200d_1f384u1f468_1f3fc_200d_1f393u1f468_1f3fc_200d_1f3a4u1f468_1f3fc_200d_1f3a8u1f468_1f3fc_200d_1f3ebu1f468_1f3fc_200d_1f3edu1f468_1f3fc_200d_1f4bbu1f468_1f3fc_200d_1f4bcu1f468_1f3fc_200d_1f527u1f468_1f3fc_200d_1f52cu1f468_1f3fc_200d_1f680u1f468_1f3fc_200d_1f692(u1f468_1f3fc_200d_1f91d_200d_1f468_1f3fb(u1f468_1f3fc_200d_1f91d_200d_1f468_1f3fd(u1f468_1f3fc_200d_1f91d_200d_1f468_1f3fe(u1f468_1f3fc_200d_1f91d_200d_1f468_1f3ffu1f468_1f3fc_200d_1f9afu1f468_1f3fc_200d_1f9b0u1f468_1f3fc_200d_1f9b1u1f468_1f3fc_200d_1f9b2u1f468_1f3fc_200d_1f9b3u1f468_1f3fc_200d_1f9bcu1f468_1f3fc_200d_1f9bdu1f468_1f3fc_200d_2695_fe0fu1f468_1f3fc_200d_2696_fe0fu1f468_1f3fc_200d_2708_fe0f,u1f468_1f3fc_200d_2764_fe0f_200d_1f468_1f3fb,u1f468_1f3fc_200d_2764_fe0f_200d_1f468_1f3fc,u1f468_1f3fc_200d_2764_fe0f_200d_1f468_1f3fd,u1f468_1f3fc_200d_2764_fe0f_200d_1f468_1f3fe,u1f468_1f3fc_200d_2764_fe0f_200d_1f468_1f3ff7u1f468_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f468_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f468_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f468_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f468_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ffu1f468_1f3fdu1f468_1f3fd_200d_1f33eu1f468_1f3fd_200d_1f373u1f468_1f3fd_200d_1f37cu1f468_1f3fd_200d_1f384u1f468_1f3fd_200d_1f393u1f468_1f3fd_200d_1f3a4u1f468_1f3fd_200d_1f3a8u1f468_1f3fd_200d_1f3ebu1f468_1f3fd_200d_1f3edu1f468_1f3fd_200d_1f4bbu1f468_1f3fd_200d_1f4bcu1f468_1f3fd_200d_1f527u1f468_1f3fd_200d_1f52cu1f468_1f3fd_200d_1f680u1f468_1f3fd_200d_1f692(u1f468_1f3fd_200d_1f91d_200d_1f468_1f3fb(u1f468_1f3fd_200d_1f91d_200d_1f468_1f3fc(u1f468_1f3fd_200d_1f91d_200d_1f468_1f3fe(u1f468_1f3fd_200d_1f91d_200d_1f468_1f3ffu1f468_1f3fd_200d_1f9afu1f468_1f3fd_200d_1f9b0u1f468_1f3fd_200d_1f9b1u1f468_1f3fd_200d_1f9b2u1f468_1f3fd_200d_1f9b3u1f468_1f3fd_200d_1f9bcu1f468_1f3fd_200d_1f9bdu1f468_1f3fd_200d_2695_fe0fu1f468_1f3fd_200d_2696_fe0fu1f468_1f3fd_200d_2708_fe0f,u1f468_1f3fd_200d_2764_fe0f_200d_1f468_1f3fb,u1f468_1f3fd_200d_2764_fe0f_200d_1f468_1f3fc,u1f468_1f3fd_200d_2764_fe0f_200d_1f468_1f3fd,u1f468_1f3fd_200d_2764_fe0f_200d_1f468_1f3fe,u1f468_1f3fd_200d_2764_fe0f_200d_1f468_1f3ff7u1f468_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f468_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f468_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f468_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f468_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ffu1f468_1f3feu1f468_1f3fe_200d_1f33eu1f468_1f3fe_200d_1f373u1f468_1f3fe_200d_1f37cu1f468_1f3fe_200d_1f384u1f468_1f3fe_200d_1f393u1f468_1f3fe_200d_1f3a4u1f468_1f3fe_200d_1f3a8u1f468_1f3fe_200d_1f3ebu1f468_1f3fe_200d_1f3edu1f468_1f3fe_200d_1f4bbu1f468_1f3fe_200d_1f4bcu1f468_1f3fe_200d_1f527u1f468_1f3fe_200d_1f52cu1f468_1f3fe_200d_1f680u1f468_1f3fe_200d_1f692(u1f468_1f3fe_200d_1f91d_200d_1f468_1f3fb(u1f468_1f3fe_200d_1f91d_200d_1f468_1f3fc(u1f468_1f3fe_200d_1f91d_200d_1f468_1f3fd(u1f468_1f3fe_200d_1f91d_200d_1f468_1f3ffu1f468_1f3fe_200d_1f9afu1f468_1f3fe_200d_1f9b0u1f468_1f3fe_200d_1f9b1u1f468_1f3fe_200d_1f9b2u1f468_1f3fe_200d_1f9b3u1f468_1f3fe_200d_1f9bcu1f468_1f3fe_200d_1f9bdu1f468_1f3fe_200d_2695_fe0fu1f468_1f3fe_200d_2696_fe0fu1f468_1f3fe_200d_2708_fe0f,u1f468_1f3fe_200d_2764_fe0f_200d_1f468_1f3fb,u1f468_1f3fe_200d_2764_fe0f_200d_1f468_1f3fc,u1f468_1f3fe_200d_2764_fe0f_200d_1f468_1f3fd,u1f468_1f3fe_200d_2764_fe0f_200d_1f468_1f3fe,u1f468_1f3fe_200d_2764_fe0f_200d_1f468_1f3ff7u1f468_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f468_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f468_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f468_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f468_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ffu1f468_1f3ffu1f468_1f3ff_200d_1f33eu1f468_1f3ff_200d_1f373u1f468_1f3ff_200d_1f37cu1f468_1f3ff_200d_1f384u1f468_1f3ff_200d_1f393u1f468_1f3ff_200d_1f3a4u1f468_1f3ff_200d_1f3a8u1f468_1f3ff_200d_1f3ebu1f468_1f3ff_200d_1f3edu1f468_1f3ff_200d_1f4bbu1f468_1f3ff_200d_1f4bcu1f468_1f3ff_200d_1f527u1f468_1f3ff_200d_1f52cu1f468_1f3ff_200d_1f680u1f468_1f3ff_200d_1f692(u1f468_1f3ff_200d_1f91d_200d_1f468_1f3fb(u1f468_1f3ff_200d_1f91d_200d_1f468_1f3fc(u1f468_1f3ff_200d_1f91d_200d_1f468_1f3fd(u1f468_1f3ff_200d_1f91d_200d_1f468_1f3feu1f468_1f3ff_200d_1f9afu1f468_1f3ff_200d_1f9b0u1f468_1f3ff_200d_1f9b1u1f468_1f3ff_200d_1f9b2u1f468_1f3ff_200d_1f9b3u1f468_1f3ff_200d_1f9bcu1f468_1f3ff_200d_1f9bdu1f468_1f3ff_200d_2695_fe0fu1f468_1f3ff_200d_2696_fe0fu1f468_1f3ff_200d_2708_fe0f,u1f468_1f3ff_200d_2764_fe0f_200d_1f468_1f3fb,u1f468_1f3ff_200d_2764_fe0f_200d_1f468_1f3fc,u1f468_1f3ff_200d_2764_fe0f_200d_1f468_1f3fd,u1f468_1f3ff_200d_2764_fe0f_200d_1f468_1f3fe,u1f468_1f3ff_200d_2764_fe0f_200d_1f468_1f3ff7u1f468_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f468_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f468_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f468_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f468_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ffu1f468_200d_1f33eu1f468_200d_1f373u1f468_200d_1f37cu1f468_200d_1f384u1f468_200d_1f393u1f468_200d_1f3a4u1f468_200d_1f3a8u1f468_200d_1f3ebu1f468_200d_1f3edu1f468_200d_1f466u1f468_200d_1f466_200d_1f466u1f468_200d_1f467u1f468_200d_1f467_200d_1f466u1f468_200d_1f467_200d_1f467u1f468_200d_1f468_200d_1f466'u1f468_200d_1f468_200d_1f466_200d_1f466u1f468_200d_1f468_200d_1f467'u1f468_200d_1f468_200d_1f467_200d_1f466'u1f468_200d_1f468_200d_1f467_200d_1f467u1f468_200d_1f469_200d_1f466'u1f468_200d_1f469_200d_1f466_200d_1f466u1f468_200d_1f469_200d_1f467'u1f468_200d_1f469_200d_1f467_200d_1f466'u1f468_200d_1f469_200d_1f467_200d_1f467u1f468_200d_1f4bbu1f468_200d_1f4bcu1f468_200d_1f527u1f468_200d_1f52cu1f468_200d_1f680u1f468_200d_1f692u1f468_200d_1f9afu1f468_200d_1f9b0u1f468_200d_1f9b1u1f468_200d_1f9b2u1f468_200d_1f9b3u1f468_200d_1f9bcu1f468_200d_1f9bdu1f468_200d_2695_fe0fu1f468_200d_2696_fe0fu1f468_200d_2708_fe0f u1f468_200d_2764_fe0f_200d_1f468+u1f468_200d_2764_fe0f_200d_1f48b_200d_1f468u1f469-1f3fb-200d-1f33e_layer0u1f469-1f3fb-200d-1f33e_layer1u1f469-1f3fb-200d-1f33e_layer10u1f469-1f3fb-200d-1f33e_layer11u1f469-1f3fb-200d-1f33e_layer12u1f469-1f3fb-200d-1f33e_layer13u1f469-1f3fb-200d-1f33e_layer2u1f469-1f3fb-200d-1f33e_layer3u1f469-1f3fb-200d-1f33e_layer4u1f469-1f3fb-200d-1f33e_layer5u1f469-1f3fb-200d-1f33e_layer6u1f469-1f3fb-200d-1f33e_layer7u1f469-1f3fb-200d-1f33e_layer8u1f469-1f3fb-200d-1f373_layer0u1f469-1f3fb-200d-1f373_layer1u1f469-1f3fb-200d-1f373_layer10u1f469-1f3fb-200d-1f373_layer11u1f469-1f3fb-200d-1f373_layer14u1f469-1f3fb-200d-1f373_layer9u1f469-1f3fb-200d-1f37c_layer0u1f469-1f3fb-200d-1f37c_layer1u1f469-1f3fb-200d-1f37c_layer2u1f469-1f3fb-200d-1f37c_layer3u1f469-1f3fb-200d-1f37c_layer4u1f469-1f3fb-200d-1f37c_layer5u1f469-1f3fb-200d-1f37c_layer6u1f469-1f3fb-200d-1f37c_layer7u1f469-1f3fb-200d-1f37c_layer8u1f469-1f3fb-200d-1f37c_layer9u1f469-1f3fb-200d-1f384_layer0u1f469-1f3fb-200d-1f384_layer1u1f469-1f3fb-200d-1f384_layer10u1f469-1f3fb-200d-1f384_layer11u1f469-1f3fb-200d-1f384_layer12u1f469-1f3fb-200d-1f384_layer2u1f469-1f3fb-200d-1f384_layer3u1f469-1f3fb-200d-1f384_layer4u1f469-1f3fb-200d-1f384_layer5u1f469-1f3fb-200d-1f384_layer6u1f469-1f3fb-200d-1f384_layer7u1f469-1f3fb-200d-1f384_layer8u1f469-1f3fb-200d-1f384_layer9u1f469-1f3fb-200d-1f393_layer0u1f469-1f3fb-200d-1f393_layer1u1f469-1f3fb-200d-1f393_layer10u1f469-1f3fb-200d-1f393_layer11u1f469-1f3fb-200d-1f393_layer2u1f469-1f3fb-200d-1f393_layer3u1f469-1f3fb-200d-1f393_layer4u1f469-1f3fb-200d-1f393_layer5u1f469-1f3fb-200d-1f393_layer6u1f469-1f3fb-200d-1f393_layer7u1f469-1f3fb-200d-1f393_layer8u1f469-1f3fb-200d-1f393_layer9u1f469-1f3fb-200d-1f3a4_layer0u1f469-1f3fb-200d-1f3a4_layer1u1f469-1f3fb-200d-1f3a4_layer10u1f469-1f3fb-200d-1f3a4_layer11u1f469-1f3fb-200d-1f3a4_layer12u1f469-1f3fb-200d-1f3a4_layer13u1f469-1f3fb-200d-1f3a4_layer14u1f469-1f3fb-200d-1f3a4_layer15u1f469-1f3fb-200d-1f3a4_layer16u1f469-1f3fb-200d-1f3a4_layer17u1f469-1f3fb-200d-1f3a4_layer18u1f469-1f3fb-200d-1f3a4_layer2u1f469-1f3fb-200d-1f3a4_layer3u1f469-1f3fb-200d-1f3a4_layer4u1f469-1f3fb-200d-1f3a4_layer5u1f469-1f3fb-200d-1f3a4_layer6u1f469-1f3fb-200d-1f3a4_layer7u1f469-1f3fb-200d-1f3a4_layer8u1f469-1f3fb-200d-1f3a4_layer9u1f469-1f3fb-200d-1f3a8_layer0u1f469-1f3fb-200d-1f3a8_layer1u1f469-1f3fb-200d-1f3a8_layer2u1f469-1f3fb-200d-1f3a8_layer3u1f469-1f3fb-200d-1f3a8_layer4u1f469-1f3fb-200d-1f3a8_layer5u1f469-1f3fb-200d-1f3a8_layer6u1f469-1f3fb-200d-1f3a8_layer7u1f469-1f3fb-200d-1f3a8_layer8u1f469-1f3fb-200d-1f3eb_layer13u1f469-1f3fb-200d-1f3eb_layer14u1f469-1f3fb-200d-1f3eb_layer15u1f469-1f3fb-200d-1f3eb_layer16u1f469-1f3fb-200d-1f3eb_layer4u1f469-1f3fb-200d-1f3eb_layer5u1f469-1f3fb-200d-1f3ed_layer1u1f469-1f3fb-200d-1f3ed_layer2u1f469-1f3fb-200d-1f3ed_layer8u1f469-1f3fb-200d-1f3ed_layer9u1f469-1f3fb-200d-1f4bb_layer0u1f469-1f3fb-200d-1f4bb_layer1u1f469-1f3fb-200d-1f4bb_layer13u1f469-1f3fb-200d-1f4bb_layer2u1f469-1f3fb-200d-1f4bb_layer3u1f469-1f3fb-200d-1f4bb_layer4u1f469-1f3fb-200d-1f4bb_layer5u1f469-1f3fb-200d-1f4bb_layer6u1f469-1f3fb-200d-1f4bb_layer7u1f469-1f3fb-200d-1f4bb_layer8u1f469-1f3fb-200d-1f4bb_layer9u1f469-1f3fb-200d-1f4bc_layer10u1f469-1f3fb-200d-1f4bc_layer11u1f469-1f3fb-200d-1f4bc_layer12u1f469-1f3fb-200d-1f4bc_layer13u1f469-1f3fb-200d-1f4bc_layer14u1f469-1f3fb-200d-1f4bc_layer15u1f469-1f3fb-200d-1f4bc_layer2u1f469-1f3fb-200d-1f4bc_layer3u1f469-1f3fb-200d-1f4bc_layer4u1f469-1f3fb-200d-1f4bc_layer5u1f469-1f3fb-200d-1f4bc_layer6u1f469-1f3fb-200d-1f4bc_layer7u1f469-1f3fb-200d-1f4bc_layer8u1f469-1f3fb-200d-1f4bc_layer9u1f469-1f3fb-200d-1f527_layer1u1f469-1f3fb-200d-1f527_layer12u1f469-1f3fb-200d-1f527_layer13u1f469-1f3fb-200d-1f527_layer14u1f469-1f3fb-200d-1f527_layer15u1f469-1f3fb-200d-1f527_layer3u1f469-1f3fb-200d-1f527_layer4u1f469-1f3fb-200d-1f527_layer8u1f469-1f3fb-200d-1f52c_layer0u1f469-1f3fb-200d-1f52c_layer1u1f469-1f3fb-200d-1f52c_layer10u1f469-1f3fb-200d-1f52c_layer11u1f469-1f3fb-200d-1f52c_layer12u1f469-1f3fb-200d-1f52c_layer13u1f469-1f3fb-200d-1f52c_layer2u1f469-1f3fb-200d-1f52c_layer3u1f469-1f3fb-200d-1f52c_layer4u1f469-1f3fb-200d-1f52c_layer5u1f469-1f3fb-200d-1f52c_layer6u1f469-1f3fb-200d-1f52c_layer7u1f469-1f3fb-200d-1f52c_layer8u1f469-1f3fb-200d-1f52c_layer9u1f469-1f3fb-200d-1f680_layer0u1f469-1f3fb-200d-1f680_layer1u1f469-1f3fb-200d-1f680_layer12u1f469-1f3fb-200d-1f680_layer13u1f469-1f3fb-200d-1f680_layer2u1f469-1f3fb-200d-1f680_layer3u1f469-1f3fb-200d-1f680_layer4u1f469-1f3fb-200d-1f680_layer5u1f469-1f3fb-200d-1f692_layer0u1f469-1f3fb-200d-1f692_layer1u1f469-1f3fb-200d-1f692_layer10u1f469-1f3fb-200d-1f692_layer11u1f469-1f3fb-200d-1f692_layer13u1f469-1f3fb-200d-1f692_layer14u1f469-1f3fb-200d-1f692_layer2u1f469-1f3fb-200d-1f692_layer4u1f469-1f3fb-200d-1f692_layer5u1f469-1f3fb-200d-1f692_layer6u1f469-1f3fb-200d-1f692_layer7u1f469-1f3fb-200d-1f692_layer8u1f469-1f3fb-200d-1f692_layer9/u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer0/u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer10u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer100u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer110u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer13/u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer2/u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer3/u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer4/u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer5/u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer6/u1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc_layer70u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer140u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer150u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer160u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer170u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer180u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer190u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer200u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer210u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer240u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer250u1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc_layer27u1f469-1f3fb-200d-1f9af_layer10u1f469-1f3fb-200d-1f9af_layer11u1f469-1f3fb-200d-1f9af_layer12u1f469-1f3fb-200d-1f9af_layer13u1f469-1f3fb-200d-1f9af_layer14u1f469-1f3fb-200d-1f9af_layer3u1f469-1f3fb-200d-1f9af_layer5u1f469-1f3fb-200d-1f9af_layer6u1f469-1f3fb-200d-1f9af_layer7u1f469-1f3fb-200d-1f9af_layer8u1f469-1f3fb-200d-1f9af_layer9u1f469-1f3fb-200d-1f9b0_layer0u1f469-1f3fb-200d-1f9b0_layer1u1f469-1f3fb-200d-1f9b0_layer2u1f469-1f3fb-200d-1f9b0_layer3u1f469-1f3fb-200d-1f9b0_layer4u1f469-1f3fb-200d-1f9b0_layer5u1f469-1f3fb-200d-1f9b1_layer0u1f469-1f3fb-200d-1f9b1_layer5u1f469-1f3fb-200d-1f9b2_layer0u1f469-1f3fb-200d-1f9bc_layer2u1f469-1f3fb-200d-1f9bc_layer22u1f469-1f3fb-200d-1f9bc_layer3u1f469-1f3fb-200d-1f9bc_layer4u1f469-1f3fb-200d-1f9bc_layer5u1f469-1f3fb-200d-1f9bc_layer6u1f469-1f3fb-200d-1f9bc_layer7u1f469-1f3fb-200d-1f9bc_layer8u1f469-1f3fb-200d-1f9bd_layer0u1f469-1f3fb-200d-1f9bd_layer1u1f469-1f3fb-200d-1f9bd_layer2u1f469-1f3fb-200d-1f9bd_layer25u1f469-1f3fb-200d-1f9bd_layer3u1f469-1f3fb-200d-1f9bd_layer4u1f469-1f3fb-200d-1f9bd_layer5u1f469-1f3fb-200d-1f9bd_layer6u1f469-1f3fb-200d-1f9bd_layer7u1f469-1f3fb-200d-1f9bd_layer8"u1f469-1f3fb-200d-2695-fe0f_layer0"u1f469-1f3fb-200d-2695-fe0f_layer1#u1f469-1f3fb-200d-2695-fe0f_layer10#u1f469-1f3fb-200d-2695-fe0f_layer11#u1f469-1f3fb-200d-2695-fe0f_layer12#u1f469-1f3fb-200d-2695-fe0f_layer13#u1f469-1f3fb-200d-2695-fe0f_layer14"u1f469-1f3fb-200d-2695-fe0f_layer2"u1f469-1f3fb-200d-2695-fe0f_layer3"u1f469-1f3fb-200d-2695-fe0f_layer4"u1f469-1f3fb-200d-2695-fe0f_layer5"u1f469-1f3fb-200d-2695-fe0f_layer6"u1f469-1f3fb-200d-2695-fe0f_layer7"u1f469-1f3fb-200d-2695-fe0f_layer8"u1f469-1f3fb-200d-2695-fe0f_layer9"u1f469-1f3fb-200d-2696-fe0f_layer1#u1f469-1f3fb-200d-2696-fe0f_layer10#u1f469-1f3fb-200d-2696-fe0f_layer11"u1f469-1f3fb-200d-2696-fe0f_layer3"u1f469-1f3fb-200d-2696-fe0f_layer4"u1f469-1f3fb-200d-2696-fe0f_layer5"u1f469-1f3fb-200d-2696-fe0f_layer6"u1f469-1f3fb-200d-2696-fe0f_layer7"u1f469-1f3fb-200d-2696-fe0f_layer8"u1f469-1f3fb-200d-2696-fe0f_layer9"u1f469-1f3fb-200d-2708-fe0f_layer0"u1f469-1f3fb-200d-2708-fe0f_layer2"u1f469-1f3fb-200d-2708-fe0f_layer3"u1f469-1f3fb-200d-2708-fe0f_layer5"u1f469-1f3fb-200d-2708-fe0f_layer6"u1f469-1f3fb-200d-2708-fe0f_layer8"u1f469-1f3fb-200d-2708-fe0f_layer93u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer03u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer14u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer104u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer114u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer123u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer33u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer43u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer53u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer63u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb_layer73u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer03u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc_layer74u1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff_layer123u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb_layer03u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb_layer13u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb_layer33u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb_layer43u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb_layer53u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb_layer64u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc_layer104u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc_layer114u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc_layer124u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc_layer133u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc_layer73u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc_layer84u1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff_layer13>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer0>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer1>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer2>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer3>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer1>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer2>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc_layer3>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer0>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer1>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer2>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer3>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer4>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer5>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer6>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer7>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer8>u1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff_layer6u1f469-1f3fb_layer5u1f469-1f3fc-200d-1f33e_layer10u1f469-1f3fc-200d-1f3a4_layer3u1f469-1f3fc-200d-1f3a4_layer6u1f469-1f3fc-200d-1f3eb_layer5u1f469-1f3fc-200d-1f692_layer10u1f469-1f3fc-200d-1f692_layer4u1f469-1f3fc-200d-1f692_layer5/u1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb_layer4/u1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb_layer4u1f469-1f3fc-200d-1f9bc_layer7u1f469-1f3fe-200d-1f33e_layer12u1f469-1f3fe-200d-1f9b0_layer5#u1f469-1f3fe-200d-2696-fe0f_layer10"u1f469-1f3fe-200d-2696-fe0f_layer6u1f469-1f3ff-200d-1f33e_layer9u1f469-1f3ff-200d-1f37c_layer9u1f469-1f3ff-200d-1f384_layer6u1f469-1f3ff-200d-1f393_layer9u1f469-1f3ff-200d-1f3a4_layer14u1f469-1f3ff-200d-1f3a8_layer6u1f469-1f3ff-200d-1f4bb_layer7u1f469-1f3ff-200d-1f4bc_layer13u1f469-1f3ff-200d-1f52c_layer8u1f469-1f3ff-200d-1f680_layer0u1f469-1f3ff-200d-1f692_layer11u1f469-1f3ff-200d-1f9b0_layer5u1f469-1f3ff-200d-1f9b1_layer4#u1f469-1f3ff-200d-2695-fe0f_layer12#u1f469-1f3ff-200d-2696-fe0f_layer10"u1f469-1f3ff-200d-2708-fe0f_layer83u1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb_layer63u1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff_layer6>u1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb_layer2>u1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff_layer2>u1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb_layer2#u1f469-200d-1f466-200d-1f466_layer0#u1f469-200d-1f466-200d-1f466_layer1#u1f469-200d-1f466-200d-1f466_layer2#u1f469-200d-1f466-200d-1f466_layer3#u1f469-200d-1f466-200d-1f466_layer4#u1f469-200d-1f466-200d-1f466_layer5#u1f469-200d-1f466-200d-1f466_layer6#u1f469-200d-1f466-200d-1f466_layer7u1f469-200d-1f466_layer0u1f469-200d-1f466_layer1u1f469-200d-1f466_layer2u1f469-200d-1f466_layer3u1f469-200d-1f466_layer4u1f469-200d-1f466_layer5u1f469-200d-1f466_layer6u1f469-200d-1f466_layer7#u1f469-200d-1f467-200d-1f467_layer4u1f469-200d-1f467_layer0u1f469-200d-1f467_layer1u1f469-200d-1f467_layer2u1f469-200d-1f467_layer3u1f469-200d-1f467_layer4u1f469-200d-1f467_layer5u1f469-200d-1f467_layer6u1f469-200d-1f467_layer7/u1f469-200d-1f469-200d-1f466-200d-1f466_layer11/u1f469-200d-1f469-200d-1f466-200d-1f466_layer12/u1f469-200d-1f469-200d-1f466-200d-1f466_layer13/u1f469-200d-1f469-200d-1f466-200d-1f466_layer14.u1f469-200d-1f469-200d-1f466-200d-1f466_layer4.u1f469-200d-1f469-200d-1f466-200d-1f466_layer8.u1f469-200d-1f469-200d-1f466-200d-1f466_layer9$u1f469-200d-1f469-200d-1f466_layer11/u1f469-200d-1f469-200d-1f467-200d-1f467_layer11$u1f469-200d-1f469-200d-1f467_layer11u1f469_1f3fbu1f469_1f3fb_200d_1f33eu1f469_1f3fb_200d_1f373u1f469_1f3fb_200d_1f37cu1f469_1f3fb_200d_1f384u1f469_1f3fb_200d_1f393u1f469_1f3fb_200d_1f3a4u1f469_1f3fb_200d_1f3a8u1f469_1f3fb_200d_1f3ebu1f469_1f3fb_200d_1f3edu1f469_1f3fb_200d_1f4bbu1f469_1f3fb_200d_1f4bcu1f469_1f3fb_200d_1f527u1f469_1f3fb_200d_1f52cu1f469_1f3fb_200d_1f680u1f469_1f3fb_200d_1f692(u1f469_1f3fb_200d_1f91d_200d_1f468_1f3fc(u1f469_1f3fb_200d_1f91d_200d_1f468_1f3fd(u1f469_1f3fb_200d_1f91d_200d_1f468_1f3fe(u1f469_1f3fb_200d_1f91d_200d_1f468_1f3ff(u1f469_1f3fb_200d_1f91d_200d_1f469_1f3fc(u1f469_1f3fb_200d_1f91d_200d_1f469_1f3fd(u1f469_1f3fb_200d_1f91d_200d_1f469_1f3fe(u1f469_1f3fb_200d_1f91d_200d_1f469_1f3ffu1f469_1f3fb_200d_1f9afu1f469_1f3fb_200d_1f9b0u1f469_1f3fb_200d_1f9b1u1f469_1f3fb_200d_1f9b2u1f469_1f3fb_200d_1f9b3u1f469_1f3fb_200d_1f9bcu1f469_1f3fb_200d_1f9bdu1f469_1f3fb_200d_2695_fe0fu1f469_1f3fb_200d_2696_fe0fu1f469_1f3fb_200d_2708_fe0f,u1f469_1f3fb_200d_2764_fe0f_200d_1f468_1f3fb,u1f469_1f3fb_200d_2764_fe0f_200d_1f468_1f3fc,u1f469_1f3fb_200d_2764_fe0f_200d_1f468_1f3fd,u1f469_1f3fb_200d_2764_fe0f_200d_1f468_1f3fe,u1f469_1f3fb_200d_2764_fe0f_200d_1f468_1f3ff,u1f469_1f3fb_200d_2764_fe0f_200d_1f469_1f3fb,u1f469_1f3fb_200d_2764_fe0f_200d_1f469_1f3fc,u1f469_1f3fb_200d_2764_fe0f_200d_1f469_1f3fd,u1f469_1f3fb_200d_2764_fe0f_200d_1f469_1f3fe,u1f469_1f3fb_200d_2764_fe0f_200d_1f469_1f3ff7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ff7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fb7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fc7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fd7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fe7u1f469_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3ffu1f469_1f3fcu1f469_1f3fc_200d_1f33eu1f469_1f3fc_200d_1f373u1f469_1f3fc_200d_1f37cu1f469_1f3fc_200d_1f384u1f469_1f3fc_200d_1f393u1f469_1f3fc_200d_1f3a4u1f469_1f3fc_200d_1f3a8u1f469_1f3fc_200d_1f3ebu1f469_1f3fc_200d_1f3edu1f469_1f3fc_200d_1f4bbu1f469_1f3fc_200d_1f4bcu1f469_1f3fc_200d_1f527u1f469_1f3fc_200d_1f52cu1f469_1f3fc_200d_1f680u1f469_1f3fc_200d_1f692(u1f469_1f3fc_200d_1f91d_200d_1f468_1f3fb(u1f469_1f3fc_200d_1f91d_200d_1f468_1f3fd(u1f469_1f3fc_200d_1f91d_200d_1f468_1f3fe(u1f469_1f3fc_200d_1f91d_200d_1f468_1f3ff(u1f469_1f3fc_200d_1f91d_200d_1f469_1f3fb(u1f469_1f3fc_200d_1f91d_200d_1f469_1f3fd(u1f469_1f3fc_200d_1f91d_200d_1f469_1f3fe(u1f469_1f3fc_200d_1f91d_200d_1f469_1f3ffu1f469_1f3fc_200d_1f9afu1f469_1f3fc_200d_1f9b0u1f469_1f3fc_200d_1f9b1u1f469_1f3fc_200d_1f9b2u1f469_1f3fc_200d_1f9b3u1f469_1f3fc_200d_1f9bcu1f469_1f3fc_200d_1f9bdu1f469_1f3fc_200d_2695_fe0fu1f469_1f3fc_200d_2696_fe0fu1f469_1f3fc_200d_2708_fe0f,u1f469_1f3fc_200d_2764_fe0f_200d_1f468_1f3fb,u1f469_1f3fc_200d_2764_fe0f_200d_1f468_1f3fc,u1f469_1f3fc_200d_2764_fe0f_200d_1f468_1f3fd,u1f469_1f3fc_200d_2764_fe0f_200d_1f468_1f3fe,u1f469_1f3fc_200d_2764_fe0f_200d_1f468_1f3ff,u1f469_1f3fc_200d_2764_fe0f_200d_1f469_1f3fb,u1f469_1f3fc_200d_2764_fe0f_200d_1f469_1f3fc,u1f469_1f3fc_200d_2764_fe0f_200d_1f469_1f3fd,u1f469_1f3fc_200d_2764_fe0f_200d_1f469_1f3fe,u1f469_1f3fc_200d_2764_fe0f_200d_1f469_1f3ff7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ff7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fb7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fc7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fd7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fe7u1f469_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3ffu1f469_1f3fdu1f469_1f3fd_200d_1f33eu1f469_1f3fd_200d_1f373u1f469_1f3fd_200d_1f37cu1f469_1f3fd_200d_1f384u1f469_1f3fd_200d_1f393u1f469_1f3fd_200d_1f3a4u1f469_1f3fd_200d_1f3a8u1f469_1f3fd_200d_1f3ebu1f469_1f3fd_200d_1f3edu1f469_1f3fd_200d_1f4bbu1f469_1f3fd_200d_1f4bcu1f469_1f3fd_200d_1f527u1f469_1f3fd_200d_1f52cu1f469_1f3fd_200d_1f680u1f469_1f3fd_200d_1f692(u1f469_1f3fd_200d_1f91d_200d_1f468_1f3fb(u1f469_1f3fd_200d_1f91d_200d_1f468_1f3fc(u1f469_1f3fd_200d_1f91d_200d_1f468_1f3fe(u1f469_1f3fd_200d_1f91d_200d_1f468_1f3ff(u1f469_1f3fd_200d_1f91d_200d_1f469_1f3fb(u1f469_1f3fd_200d_1f91d_200d_1f469_1f3fc(u1f469_1f3fd_200d_1f91d_200d_1f469_1f3fe(u1f469_1f3fd_200d_1f91d_200d_1f469_1f3ffu1f469_1f3fd_200d_1f9afu1f469_1f3fd_200d_1f9b0u1f469_1f3fd_200d_1f9b1u1f469_1f3fd_200d_1f9b2u1f469_1f3fd_200d_1f9b3u1f469_1f3fd_200d_1f9bcu1f469_1f3fd_200d_1f9bdu1f469_1f3fd_200d_2695_fe0fu1f469_1f3fd_200d_2696_fe0fu1f469_1f3fd_200d_2708_fe0f,u1f469_1f3fd_200d_2764_fe0f_200d_1f468_1f3fb,u1f469_1f3fd_200d_2764_fe0f_200d_1f468_1f3fc,u1f469_1f3fd_200d_2764_fe0f_200d_1f468_1f3fd,u1f469_1f3fd_200d_2764_fe0f_200d_1f468_1f3fe,u1f469_1f3fd_200d_2764_fe0f_200d_1f468_1f3ff,u1f469_1f3fd_200d_2764_fe0f_200d_1f469_1f3fb,u1f469_1f3fd_200d_2764_fe0f_200d_1f469_1f3fc,u1f469_1f3fd_200d_2764_fe0f_200d_1f469_1f3fd,u1f469_1f3fd_200d_2764_fe0f_200d_1f469_1f3fe,u1f469_1f3fd_200d_2764_fe0f_200d_1f469_1f3ff7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ff7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fb7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fc7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fd7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fe7u1f469_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3ffu1f469_1f3feu1f469_1f3fe_200d_1f33eu1f469_1f3fe_200d_1f373u1f469_1f3fe_200d_1f37cu1f469_1f3fe_200d_1f384u1f469_1f3fe_200d_1f393u1f469_1f3fe_200d_1f3a4u1f469_1f3fe_200d_1f3a8u1f469_1f3fe_200d_1f3ebu1f469_1f3fe_200d_1f3edu1f469_1f3fe_200d_1f4bbu1f469_1f3fe_200d_1f4bcu1f469_1f3fe_200d_1f527u1f469_1f3fe_200d_1f52cu1f469_1f3fe_200d_1f680u1f469_1f3fe_200d_1f692(u1f469_1f3fe_200d_1f91d_200d_1f468_1f3fb(u1f469_1f3fe_200d_1f91d_200d_1f468_1f3fc(u1f469_1f3fe_200d_1f91d_200d_1f468_1f3fd(u1f469_1f3fe_200d_1f91d_200d_1f468_1f3ff(u1f469_1f3fe_200d_1f91d_200d_1f469_1f3fb(u1f469_1f3fe_200d_1f91d_200d_1f469_1f3fc(u1f469_1f3fe_200d_1f91d_200d_1f469_1f3fd(u1f469_1f3fe_200d_1f91d_200d_1f469_1f3ffu1f469_1f3fe_200d_1f9afu1f469_1f3fe_200d_1f9b0u1f469_1f3fe_200d_1f9b1u1f469_1f3fe_200d_1f9b2u1f469_1f3fe_200d_1f9b3u1f469_1f3fe_200d_1f9bcu1f469_1f3fe_200d_1f9bdu1f469_1f3fe_200d_2695_fe0fu1f469_1f3fe_200d_2696_fe0fu1f469_1f3fe_200d_2708_fe0f,u1f469_1f3fe_200d_2764_fe0f_200d_1f468_1f3fb,u1f469_1f3fe_200d_2764_fe0f_200d_1f468_1f3fc,u1f469_1f3fe_200d_2764_fe0f_200d_1f468_1f3fd,u1f469_1f3fe_200d_2764_fe0f_200d_1f468_1f3fe,u1f469_1f3fe_200d_2764_fe0f_200d_1f468_1f3ff,u1f469_1f3fe_200d_2764_fe0f_200d_1f469_1f3fb,u1f469_1f3fe_200d_2764_fe0f_200d_1f469_1f3fc,u1f469_1f3fe_200d_2764_fe0f_200d_1f469_1f3fd,u1f469_1f3fe_200d_2764_fe0f_200d_1f469_1f3fe,u1f469_1f3fe_200d_2764_fe0f_200d_1f469_1f3ff7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ff7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fb7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fc7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fd7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fe7u1f469_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3ffu1f469_1f3ffu1f469_1f3ff_200d_1f33eu1f469_1f3ff_200d_1f373u1f469_1f3ff_200d_1f37cu1f469_1f3ff_200d_1f384u1f469_1f3ff_200d_1f393u1f469_1f3ff_200d_1f3a4u1f469_1f3ff_200d_1f3a8u1f469_1f3ff_200d_1f3ebu1f469_1f3ff_200d_1f3edu1f469_1f3ff_200d_1f4bbu1f469_1f3ff_200d_1f4bcu1f469_1f3ff_200d_1f527u1f469_1f3ff_200d_1f52cu1f469_1f3ff_200d_1f680u1f469_1f3ff_200d_1f692(u1f469_1f3ff_200d_1f91d_200d_1f468_1f3fb(u1f469_1f3ff_200d_1f91d_200d_1f468_1f3fc(u1f469_1f3ff_200d_1f91d_200d_1f468_1f3fd(u1f469_1f3ff_200d_1f91d_200d_1f468_1f3fe(u1f469_1f3ff_200d_1f91d_200d_1f469_1f3fb(u1f469_1f3ff_200d_1f91d_200d_1f469_1f3fc(u1f469_1f3ff_200d_1f91d_200d_1f469_1f3fd(u1f469_1f3ff_200d_1f91d_200d_1f469_1f3feu1f469_1f3ff_200d_1f9afu1f469_1f3ff_200d_1f9b0u1f469_1f3ff_200d_1f9b1u1f469_1f3ff_200d_1f9b2u1f469_1f3ff_200d_1f9b3u1f469_1f3ff_200d_1f9bcu1f469_1f3ff_200d_1f9bdu1f469_1f3ff_200d_2695_fe0fu1f469_1f3ff_200d_2696_fe0fu1f469_1f3ff_200d_2708_fe0f,u1f469_1f3ff_200d_2764_fe0f_200d_1f468_1f3fb,u1f469_1f3ff_200d_2764_fe0f_200d_1f468_1f3fc,u1f469_1f3ff_200d_2764_fe0f_200d_1f468_1f3fd,u1f469_1f3ff_200d_2764_fe0f_200d_1f468_1f3fe,u1f469_1f3ff_200d_2764_fe0f_200d_1f468_1f3ff,u1f469_1f3ff_200d_2764_fe0f_200d_1f469_1f3fb,u1f469_1f3ff_200d_2764_fe0f_200d_1f469_1f3fc,u1f469_1f3ff_200d_2764_fe0f_200d_1f469_1f3fd,u1f469_1f3ff_200d_2764_fe0f_200d_1f469_1f3fe,u1f469_1f3ff_200d_2764_fe0f_200d_1f469_1f3ff7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fb7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fc7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fd7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3fe7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f468_1f3ff7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fb7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fc7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fd7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3fe7u1f469_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f469_1f3ffu1f469_200d_1f33eu1f469_200d_1f373u1f469_200d_1f37cu1f469_200d_1f384u1f469_200d_1f393u1f469_200d_1f3a4u1f469_200d_1f3a8u1f469_200d_1f3ebu1f469_200d_1f3edu1f469_200d_1f466u1f469_200d_1f466_200d_1f466u1f469_200d_1f467u1f469_200d_1f467_200d_1f466u1f469_200d_1f467_200d_1f467u1f469_200d_1f469_200d_1f466'u1f469_200d_1f469_200d_1f466_200d_1f466u1f469_200d_1f469_200d_1f467'u1f469_200d_1f469_200d_1f467_200d_1f466'u1f469_200d_1f469_200d_1f467_200d_1f467u1f469_200d_1f4bbu1f469_200d_1f4bcu1f469_200d_1f527u1f469_200d_1f52cu1f469_200d_1f680u1f469_200d_1f692u1f469_200d_1f9afu1f469_200d_1f9b0u1f469_200d_1f9b1u1f469_200d_1f9b2u1f469_200d_1f9b3u1f469_200d_1f9bcu1f469_200d_1f9bdu1f469_200d_2695_fe0fu1f469_200d_2696_fe0fu1f469_200d_2708_fe0f u1f469_200d_2764_fe0f_200d_1f468 u1f469_200d_2764_fe0f_200d_1f469+u1f469_200d_2764_fe0f_200d_1f48b_200d_1f468+u1f469_200d_2764_fe0f_200d_1f48b_200d_1f469u1f46a_layer0u1f46a_layer1u1f46a_layer10u1f46a_layer12u1f46a_layer13u1f46a_layer14u1f46a_layer15u1f46a_layer16u1f46a_layer17u1f46a_layer2u1f46a_layer3u1f46a_layer4u1f46a_layer5u1f46a_layer7u1f46a_layer8u1f46a_layer9u1f46b-1f3fb_layer10u1f46b-1f3fb_layer9u1f46b_1f3fbu1f46b_1f3fcu1f46b_1f3fdu1f46b_1f3feu1f46b_1f3ffu1f46c-1f3fb_layer8u1f46c_1f3fbu1f46c_1f3fcu1f46c_1f3fdu1f46c_1f3feu1f46c_1f3ffu1f46d-1f3fb_layer10u1f46d-1f3fb_layer9u1f46d-1f3fc_layer10u1f46d_1f3fbu1f46d_1f3fcu1f46d_1f3fdu1f46d_1f3feu1f46d_1f3ff"u1f46e-1f3fb-200d-2640-fe0f_layer0"u1f46e-1f3fb-200d-2640-fe0f_layer1#u1f46e-1f3fb-200d-2640-fe0f_layer10#u1f46e-1f3fb-200d-2640-fe0f_layer11#u1f46e-1f3fb-200d-2640-fe0f_layer12#u1f46e-1f3fb-200d-2640-fe0f_layer13#u1f46e-1f3fb-200d-2640-fe0f_layer14#u1f46e-1f3fb-200d-2640-fe0f_layer15#u1f46e-1f3fb-200d-2640-fe0f_layer16"u1f46e-1f3fb-200d-2640-fe0f_layer2"u1f46e-1f3fb-200d-2640-fe0f_layer3"u1f46e-1f3fb-200d-2640-fe0f_layer4"u1f46e-1f3fb-200d-2640-fe0f_layer5"u1f46e-1f3fb-200d-2640-fe0f_layer6"u1f46e-1f3fb-200d-2640-fe0f_layer7"u1f46e-1f3fb-200d-2640-fe0f_layer8"u1f46e-1f3fb-200d-2640-fe0f_layer9"u1f46e-1f3fb-200d-2642-fe0f_layer0"u1f46e-1f3fb-200d-2642-fe0f_layer1#u1f46e-1f3fb-200d-2642-fe0f_layer10#u1f46e-1f3fb-200d-2642-fe0f_layer11#u1f46e-1f3fb-200d-2642-fe0f_layer12#u1f46e-1f3fb-200d-2642-fe0f_layer13"u1f46e-1f3fb-200d-2642-fe0f_layer4"u1f46e-1f3fb-200d-2642-fe0f_layer5u1f46e-1f3fb_layer0u1f46e-1f3fb_layer1u1f46e-1f3fb_layer11u1f46e-1f3fb_layer13u1f46e-1f3fb_layer2u1f46e-1f3fb_layer3u1f46e-1f3fb_layer4u1f46e-1f3fb_layer5u1f46e-1f3fb_layer6"u1f46e-1f3ff-200d-2640-fe0f_layer4"u1f46e-1f3ff-200d-2640-fe0f_layer8u1f46e-1f3ff_layer6u1f46e_1f3fbu1f46e_1f3fb_200d_2640_fe0fu1f46e_1f3fb_200d_2642_fe0fu1f46e_1f3fcu1f46e_1f3fc_200d_2640_fe0fu1f46e_1f3fc_200d_2642_fe0fu1f46e_1f3fdu1f46e_1f3fd_200d_2640_fe0fu1f46e_1f3fd_200d_2642_fe0fu1f46e_1f3feu1f46e_1f3fe_200d_2640_fe0fu1f46e_1f3fe_200d_2642_fe0fu1f46e_1f3ffu1f46e_1f3ff_200d_2640_fe0fu1f46e_1f3ff_200d_2642_fe0fu1f46e_200d_2640_fe0fu1f46e_200d_2642_fe0fu1f46f-200d-2640-fe0f_layer0u1f46f-200d-2640-fe0f_layer1u1f46f-200d-2640-fe0f_layer10u1f46f-200d-2640-fe0f_layer11u1f46f-200d-2640-fe0f_layer12u1f46f-200d-2640-fe0f_layer13u1f46f-200d-2640-fe0f_layer14u1f46f-200d-2640-fe0f_layer15u1f46f-200d-2640-fe0f_layer16u1f46f-200d-2640-fe0f_layer17u1f46f-200d-2640-fe0f_layer18u1f46f-200d-2640-fe0f_layer19u1f46f-200d-2640-fe0f_layer2u1f46f-200d-2640-fe0f_layer20u1f46f-200d-2640-fe0f_layer21u1f46f-200d-2640-fe0f_layer22u1f46f-200d-2640-fe0f_layer23u1f46f-200d-2640-fe0f_layer3u1f46f-200d-2640-fe0f_layer4u1f46f-200d-2640-fe0f_layer5u1f46f-200d-2640-fe0f_layer6u1f46f-200d-2640-fe0f_layer7u1f46f-200d-2640-fe0f_layer8u1f46f-200d-2640-fe0f_layer9u1f46f-200d-2642-fe0f_layer0u1f46f-200d-2642-fe0f_layer1u1f46f-200d-2642-fe0f_layer12u1f46f-200d-2642-fe0f_layer13u1f46f-200d-2642-fe0f_layer14u1f46f-200d-2642-fe0f_layer16u1f46f-200d-2642-fe0f_layer17u1f46f-200d-2642-fe0f_layer18u1f46f-200d-2642-fe0f_layer19u1f46f-200d-2642-fe0f_layer2u1f46f-200d-2642-fe0f_layer20u1f46f-200d-2642-fe0f_layer3u1f46f-200d-2642-fe0f_layer5u1f46f-200d-2642-fe0f_layer6u1f46f-200d-2642-fe0f_layer7u1f46f-200d-2642-fe0f_layer8u1f46f_200d_2640_fe0fu1f46f_200d_2642_fe0fu1f46f_layer0u1f46f_layer1u1f46f_layer10u1f46f_layer11u1f46f_layer12u1f46f_layer13u1f46f_layer15u1f46f_layer16u1f46f_layer17u1f46f_layer18u1f46f_layer19u1f46f_layer2u1f46f_layer20u1f46f_layer3u1f46f_layer5u1f46f_layer6u1f46f_layer7u1f46f_layer8u1f46f_layer9"u1f470-1f3fb-200d-2640-fe0f_layer0"u1f470-1f3fb-200d-2640-fe0f_layer1"u1f470-1f3fb-200d-2640-fe0f_layer2"u1f470-1f3fb-200d-2640-fe0f_layer3"u1f470-1f3fb-200d-2640-fe0f_layer4"u1f470-1f3fb-200d-2640-fe0f_layer5"u1f470-1f3fb-200d-2640-fe0f_layer6"u1f470-1f3fb-200d-2640-fe0f_layer7"u1f470-1f3fb-200d-2640-fe0f_layer8"u1f470-1f3fb-200d-2642-fe0f_layer2"u1f470-1f3fb-200d-2642-fe0f_layer3"u1f470-1f3fb-200d-2642-fe0f_layer4"u1f470-1f3fb-200d-2642-fe0f_layer6"u1f470-1f3fb-200d-2642-fe0f_layer7"u1f470-1f3fb-200d-2642-fe0f_layer8u1f470-1f3fb_layer2u1f470-1f3fb_layer4u1f470-1f3fb_layer5u1f470-1f3fb_layer6u1f470-1f3fb_layer7u1f470-1f3fb_layer8"u1f470-1f3ff-200d-2640-fe0f_layer7"u1f470-1f3ff-200d-2642-fe0f_layer7u1f470-1f3ff_layer7u1f470_1f3fbu1f470_1f3fb_200d_2640_fe0fu1f470_1f3fb_200d_2642_fe0fu1f470_1f3fcu1f470_1f3fc_200d_2640_fe0fu1f470_1f3fc_200d_2642_fe0fu1f470_1f3fdu1f470_1f3fd_200d_2640_fe0fu1f470_1f3fd_200d_2642_fe0fu1f470_1f3feu1f470_1f3fe_200d_2640_fe0fu1f470_1f3fe_200d_2642_fe0fu1f470_1f3ffu1f470_1f3ff_200d_2640_fe0fu1f470_1f3ff_200d_2642_fe0fu1f470_200d_2640_fe0fu1f470_200d_2642_fe0fu1f471-1f3fb_layer0u1f471-1f3fb_layer1u1f471-1f3fb_layer2u1f471-1f3fb_layer3u1f471-1f3ff_layer2u1f471-200d-2640-fe0f_layer2u1f471-200d-2640-fe0f_layer3u1f471-200d-2640-fe0f_layer4u1f471-200d-2642-fe0f_layer1u1f471-200d-2642-fe0f_layer3u1f471_1f3fbu1f471_1f3fb_200d_2640_fe0fu1f471_1f3fb_200d_2642_fe0fu1f471_1f3fcu1f471_1f3fc_200d_2640_fe0fu1f471_1f3fc_200d_2642_fe0fu1f471_1f3fdu1f471_1f3fd_200d_2640_fe0fu1f471_1f3fd_200d_2642_fe0fu1f471_1f3feu1f471_1f3fe_200d_2640_fe0fu1f471_1f3fe_200d_2642_fe0fu1f471_1f3ffu1f471_1f3ff_200d_2640_fe0fu1f471_1f3ff_200d_2642_fe0fu1f471_200d_2640_fe0fu1f471_200d_2642_fe0fu1f471_layer2u1f472-1f3fb_layer0u1f472-1f3fb_layer1u1f472-1f3fb_layer2u1f472-1f3fb_layer3u1f472-1f3fb_layer4u1f472-1f3fb_layer5u1f472_1f3fbu1f472_1f3fcu1f472_1f3fdu1f472_1f3feu1f472_1f3ff"u1f473-1f3fb-200d-2640-fe0f_layer1"u1f473-1f3fb-200d-2640-fe0f_layer2"u1f473-1f3fb-200d-2640-fe0f_layer8"u1f473-1f3fb-200d-2640-fe0f_layer9"u1f473-1f3fb-200d-2642-fe0f_layer0"u1f473-1f3fb-200d-2642-fe0f_layer1"u1f473-1f3fb-200d-2642-fe0f_layer2"u1f473-1f3fb-200d-2642-fe0f_layer3"u1f473-1f3fb-200d-2642-fe0f_layer4"u1f473-1f3fb-200d-2642-fe0f_layer5"u1f473-1f3fb-200d-2642-fe0f_layer6"u1f473-1f3fb-200d-2642-fe0f_layer7"u1f473-1f3fb-200d-2642-fe0f_layer8u1f473-1f3fb_layer0u1f473-1f3fb_layer1u1f473-1f3fb_layer10u1f473-1f3fb_layer2u1f473-1f3fb_layer3u1f473-1f3fb_layer4u1f473-1f3fb_layer5u1f473-1f3fb_layer6u1f473-1f3fb_layer7u1f473-1f3fb_layer8u1f473-1f3fb_layer9"u1f473-1f3ff-200d-2642-fe0f_layer4u1f473-1f3ff_layer6u1f473_1f3fbu1f473_1f3fb_200d_2640_fe0fu1f473_1f3fb_200d_2642_fe0fu1f473_1f3fcu1f473_1f3fc_200d_2640_fe0fu1f473_1f3fc_200d_2642_fe0fu1f473_1f3fdu1f473_1f3fd_200d_2640_fe0fu1f473_1f3fd_200d_2642_fe0fu1f473_1f3feu1f473_1f3fe_200d_2640_fe0fu1f473_1f3fe_200d_2642_fe0fu1f473_1f3ffu1f473_1f3ff_200d_2640_fe0fu1f473_1f3ff_200d_2642_fe0fu1f473_200d_2640_fe0fu1f473_200d_2642_fe0fu1f474-1f3fb_layer0u1f474-1f3fb_layer1u1f474-1f3fb_layer2u1f474-1f3fb_layer3u1f474-1f3fb_layer4u1f474-1f3ff_layer2u1f474_1f3fbu1f474_1f3fcu1f474_1f3fdu1f474_1f3feu1f474_1f3ffu1f475-1f3fb_layer0u1f475-1f3fb_layer1u1f475-1f3fb_layer2u1f475-1f3fb_layer3u1f475-1f3fb_layer4u1f475-1f3fb_layer5u1f475-1f3fb_layer6u1f475-1f3fb_layer7u1f475-1f3ff_layer5u1f475_1f3fbu1f475_1f3fcu1f475_1f3fdu1f475_1f3feu1f475_1f3ffu1f476-1f3fb_layer0u1f476-1f3fb_layer1u1f476-1f3fb_layer2u1f476-1f3fb_layer3u1f476-1f3fc_layer3u1f476-1f3ff_layer1u1f476_1f3fbu1f476_1f3fcu1f476_1f3fdu1f476_1f3feu1f476_1f3ff"u1f477-1f3fb-200d-2640-fe0f_layer1#u1f477-1f3fb-200d-2640-fe0f_layer11#u1f477-1f3fb-200d-2640-fe0f_layer12#u1f477-1f3fb-200d-2640-fe0f_layer13"u1f477-1f3fb-200d-2640-fe0f_layer2"u1f477-1f3fb-200d-2640-fe0f_layer3"u1f477-1f3fb-200d-2640-fe0f_layer4"u1f477-1f3fb-200d-2640-fe0f_layer5"u1f477-1f3fb-200d-2640-fe0f_layer6"u1f477-1f3fb-200d-2640-fe0f_layer7"u1f477-1f3fb-200d-2640-fe0f_layer8"u1f477-1f3fb-200d-2640-fe0f_layer9#u1f477-1f3fb-200d-2642-fe0f_layer10"u1f477-1f3fb-200d-2642-fe0f_layer2"u1f477-1f3fb-200d-2642-fe0f_layer3"u1f477-1f3fb-200d-2642-fe0f_layer5"u1f477-1f3fb-200d-2642-fe0f_layer6"u1f477-1f3fb-200d-2642-fe0f_layer7"u1f477-1f3fb-200d-2642-fe0f_layer8"u1f477-1f3fb-200d-2642-fe0f_layer9u1f477-1f3fb_layer0u1f477-1f3fb_layer1u1f477-1f3fb_layer11u1f477-1f3fb_layer6u1f477-1f3fb_layer7u1f477-1f3fb_layer8u1f477-1f3fb_layer9"u1f477-1f3fc-200d-2640-fe0f_layer1"u1f477-1f3fc-200d-2640-fe0f_layer2"u1f477-1f3fc-200d-2640-fe0f_layer3"u1f477-1f3fc-200d-2640-fe0f_layer8"u1f477-1f3fc-200d-2642-fe0f_layer7"u1f477-1f3fc-200d-2642-fe0f_layer9u1f477-1f3fc_layer6"u1f477-1f3ff-200d-2640-fe0f_layer9"u1f477-1f3ff-200d-2642-fe0f_layer8u1f477-1f3ff_layer9u1f477_1f3fbu1f477_1f3fb_200d_2640_fe0fu1f477_1f3fb_200d_2642_fe0fu1f477_1f3fcu1f477_1f3fc_200d_2640_fe0fu1f477_1f3fc_200d_2642_fe0fu1f477_1f3fdu1f477_1f3fd_200d_2640_fe0fu1f477_1f3fd_200d_2642_fe0fu1f477_1f3feu1f477_1f3fe_200d_2640_fe0fu1f477_1f3fe_200d_2642_fe0fu1f477_1f3ffu1f477_1f3ff_200d_2640_fe0fu1f477_1f3ff_200d_2642_fe0fu1f477_200d_2640_fe0fu1f477_200d_2642_fe0fu1f478-1f3fb_layer0u1f478-1f3fb_layer1u1f478-1f3fb_layer2u1f478-1f3fb_layer3u1f478-1f3fb_layer4u1f478-1f3fb_layer5u1f478-1f3fb_layer6u1f478-1f3fb_layer7u1f478-1f3ff_layer7u1f478_1f3fbu1f478_1f3fcu1f478_1f3fdu1f478_1f3feu1f478_1f3ffu1f479_layer0u1f479_layer1u1f479_layer10u1f479_layer2u1f479_layer3u1f479_layer4u1f479_layer5u1f479_layer6u1f479_layer7u1f479_layer8u1f479_layer9u1f47a_layer0u1f47a_layer1u1f47a_layer2u1f47a_layer3u1f47a_layer4u1f47a_layer5u1f47b_layer0u1f47b_layer1u1f47b_layer2u1f47c-1f3fb_layer0u1f47c-1f3fb_layer1u1f47c-1f3fb_layer2u1f47c-1f3fb_layer3u1f47c-1f3fb_layer4u1f47c-1f3fc_layer0u1f47c-1f3fe_layer2u1f47c-1f3fe_layer3u1f47c-1f3ff_layer3u1f47c_1f3fbu1f47c_1f3fcu1f47c_1f3fdu1f47c_1f3feu1f47c_1f3ffu1f47d_layer0u1f47d_layer1u1f47e_layer0u1f47f_layer1u1f47f_layer2u1f480_layer0u1f480_layer1"u1f481-1f3fb-200d-2640-fe0f_layer0"u1f481-1f3fb-200d-2640-fe0f_layer1#u1f481-1f3fb-200d-2640-fe0f_layer10"u1f481-1f3fb-200d-2640-fe0f_layer2"u1f481-1f3fb-200d-2640-fe0f_layer3"u1f481-1f3fb-200d-2640-fe0f_layer4"u1f481-1f3fb-200d-2640-fe0f_layer5"u1f481-1f3fb-200d-2640-fe0f_layer6"u1f481-1f3fb-200d-2640-fe0f_layer7"u1f481-1f3fb-200d-2640-fe0f_layer8"u1f481-1f3fb-200d-2640-fe0f_layer9"u1f481-1f3fb-200d-2642-fe0f_layer5"u1f481-1f3fb-200d-2642-fe0f_layer6"u1f481-1f3fb-200d-2642-fe0f_layer8"u1f481-1f3fb-200d-2642-fe0f_layer9u1f481-1f3fb_layer0u1f481-1f3fb_layer4u1f481-1f3fb_layer5#u1f481-1f3ff-200d-2640-fe0f_layer10u1f481_1f3fbu1f481_1f3fb_200d_2640_fe0fu1f481_1f3fb_200d_2642_fe0fu1f481_1f3fcu1f481_1f3fc_200d_2640_fe0fu1f481_1f3fc_200d_2642_fe0fu1f481_1f3fdu1f481_1f3fd_200d_2640_fe0fu1f481_1f3fd_200d_2642_fe0fu1f481_1f3feu1f481_1f3fe_200d_2640_fe0fu1f481_1f3fe_200d_2642_fe0fu1f481_1f3ffu1f481_1f3ff_200d_2640_fe0fu1f481_1f3ff_200d_2642_fe0fu1f481_200d_2640_fe0fu1f481_200d_2642_fe0f"u1f482-1f3fb-200d-2640-fe0f_layer0"u1f482-1f3fb-200d-2640-fe0f_layer1#u1f482-1f3fb-200d-2640-fe0f_layer10"u1f482-1f3fb-200d-2640-fe0f_layer2"u1f482-1f3fb-200d-2640-fe0f_layer3"u1f482-1f3fb-200d-2640-fe0f_layer4"u1f482-1f3fb-200d-2640-fe0f_layer5"u1f482-1f3fb-200d-2640-fe0f_layer6"u1f482-1f3fb-200d-2640-fe0f_layer7"u1f482-1f3fb-200d-2640-fe0f_layer8"u1f482-1f3fb-200d-2640-fe0f_layer9"u1f482-1f3fb-200d-2642-fe0f_layer0#u1f482-1f3fb-200d-2642-fe0f_layer10"u1f482-1f3fb-200d-2642-fe0f_layer2"u1f482-1f3fb-200d-2642-fe0f_layer3"u1f482-1f3fb-200d-2642-fe0f_layer4"u1f482-1f3fb-200d-2642-fe0f_layer5"u1f482-1f3fb-200d-2642-fe0f_layer6"u1f482-1f3fb-200d-2642-fe0f_layer7"u1f482-1f3fb-200d-2642-fe0f_layer9u1f482-1f3fb_layer0u1f482-1f3fb_layer1u1f482-1f3fb_layer2u1f482-1f3fb_layer3u1f482-1f3fb_layer4u1f482-1f3fb_layer5u1f482-1f3fb_layer6u1f482-1f3fb_layer7u1f482-1f3fb_layer8u1f482-1f3fb_layer9"u1f482-1f3ff-200d-2640-fe0f_layer5"u1f482-1f3ff-200d-2642-fe0f_layer6u1f482-1f3ff_layer7u1f482_1f3fbu1f482_1f3fb_200d_2640_fe0fu1f482_1f3fb_200d_2642_fe0fu1f482_1f3fcu1f482_1f3fc_200d_2640_fe0fu1f482_1f3fc_200d_2642_fe0fu1f482_1f3fdu1f482_1f3fd_200d_2640_fe0fu1f482_1f3fd_200d_2642_fe0fu1f482_1f3feu1f482_1f3fe_200d_2640_fe0fu1f482_1f3fe_200d_2642_fe0fu1f482_1f3ffu1f482_1f3ff_200d_2640_fe0fu1f482_1f3ff_200d_2642_fe0fu1f482_200d_2640_fe0fu1f482_200d_2642_fe0fu1f483-1f3fb_layer0u1f483-1f3fb_layer1u1f483-1f3fb_layer2u1f483-1f3fb_layer3u1f483-1f3fb_layer4u1f483-1f3fb_layer5u1f483-1f3fb_layer6u1f483-1f3fb_layer7u1f483-1f3fb_layer8u1f483-1f3fb_layer9u1f483_1f3fbu1f483_1f3fcu1f483_1f3fdu1f483_1f3feu1f483_1f3ffu1f484_layer0u1f484_layer1u1f484_layer2u1f484_layer3u1f484_layer4u1f485-1f3fb_layer0u1f485-1f3fb_layer1u1f485-1f3fb_layer2u1f485-1f3fb_layer3u1f485-1f3fb_layer4u1f485_1f3fbu1f485_1f3fcu1f485_1f3fdu1f485_1f3feu1f485_1f3ff"u1f486-1f3fb-200d-2640-fe0f_layer0"u1f486-1f3fb-200d-2640-fe0f_layer1#u1f486-1f3fb-200d-2640-fe0f_layer10#u1f486-1f3fb-200d-2640-fe0f_layer11#u1f486-1f3fb-200d-2640-fe0f_layer12"u1f486-1f3fb-200d-2640-fe0f_layer2"u1f486-1f3fb-200d-2640-fe0f_layer3"u1f486-1f3fb-200d-2640-fe0f_layer4"u1f486-1f3fb-200d-2640-fe0f_layer5"u1f486-1f3fb-200d-2640-fe0f_layer6"u1f486-1f3fb-200d-2640-fe0f_layer7"u1f486-1f3fb-200d-2640-fe0f_layer8"u1f486-1f3fb-200d-2640-fe0f_layer9"u1f486-1f3fb-200d-2642-fe0f_layer0"u1f486-1f3fb-200d-2642-fe0f_layer1"u1f486-1f3fb-200d-2642-fe0f_layer2"u1f486-1f3fb-200d-2642-fe0f_layer4"u1f486-1f3fb-200d-2642-fe0f_layer5"u1f486-1f3fb-200d-2642-fe0f_layer6"u1f486-1f3fb-200d-2642-fe0f_layer7"u1f486-1f3fb-200d-2642-fe0f_layer8"u1f486-1f3fb-200d-2642-fe0f_layer9u1f486-1f3fb_layer2u1f486-1f3fb_layer4u1f486-1f3fb_layer5u1f486-1f3fb_layer6u1f486-1f3fb_layer7"u1f486-1f3fe-200d-2642-fe0f_layer6#u1f486-1f3ff-200d-2642-fe0f_layer10u1f486-200d-2640-fe0f_layer12u1f486_1f3fbu1f486_1f3fb_200d_2640_fe0fu1f486_1f3fb_200d_2642_fe0fu1f486_1f3fcu1f486_1f3fc_200d_2640_fe0fu1f486_1f3fc_200d_2642_fe0fu1f486_1f3fdu1f486_1f3fd_200d_2640_fe0fu1f486_1f3fd_200d_2642_fe0fu1f486_1f3feu1f486_1f3fe_200d_2640_fe0fu1f486_1f3fe_200d_2642_fe0fu1f486_1f3ffu1f486_1f3ff_200d_2640_fe0fu1f486_1f3ff_200d_2642_fe0fu1f486_200d_2640_fe0fu1f486_200d_2642_fe0f"u1f487-1f3fb-200d-2640-fe0f_layer0"u1f487-1f3fb-200d-2640-fe0f_layer1#u1f487-1f3fb-200d-2640-fe0f_layer10"u1f487-1f3fb-200d-2640-fe0f_layer2"u1f487-1f3fb-200d-2640-fe0f_layer3"u1f487-1f3fb-200d-2640-fe0f_layer4"u1f487-1f3fb-200d-2640-fe0f_layer5"u1f487-1f3fb-200d-2640-fe0f_layer6"u1f487-1f3fb-200d-2640-fe0f_layer7"u1f487-1f3fb-200d-2640-fe0f_layer8"u1f487-1f3fb-200d-2640-fe0f_layer9"u1f487-1f3fb-200d-2642-fe0f_layer0"u1f487-1f3fb-200d-2642-fe0f_layer1"u1f487-1f3fb-200d-2642-fe0f_layer2"u1f487-1f3fb-200d-2642-fe0f_layer3"u1f487-1f3fb-200d-2642-fe0f_layer5"u1f487-1f3fb-200d-2642-fe0f_layer6"u1f487-1f3fb-200d-2642-fe0f_layer8"u1f487-1f3fb-200d-2642-fe0f_layer9u1f487-1f3fb_layer2u1f487-1f3fb_layer5u1f487-1f3fb_layer6"u1f487-1f3ff-200d-2640-fe0f_layer8u1f487_1f3fbu1f487_1f3fb_200d_2640_fe0fu1f487_1f3fb_200d_2642_fe0fu1f487_1f3fcu1f487_1f3fc_200d_2640_fe0fu1f487_1f3fc_200d_2642_fe0fu1f487_1f3fdu1f487_1f3fd_200d_2640_fe0fu1f487_1f3fd_200d_2642_fe0fu1f487_1f3feu1f487_1f3fe_200d_2640_fe0fu1f487_1f3fe_200d_2642_fe0fu1f487_1f3ffu1f487_1f3ff_200d_2640_fe0fu1f487_1f3ff_200d_2642_fe0fu1f487_200d_2640_fe0fu1f487_200d_2642_fe0fu1f488_layer0u1f488_layer1u1f488_layer2u1f488_layer3u1f488_layer4u1f488_layer5u1f489_layer0u1f489_layer1u1f489_layer2u1f489_layer3u1f489_layer4u1f489_layer5u1f489_layer6u1f489_layer7u1f48a_layer0u1f48a_layer1u1f48b_layer0u1f48c_layer1u1f48c_layer2u1f48c_layer3u1f48c_layer4u1f48d_layer0u1f48d_layer1u1f48d_layer2u1f48d_layer3u1f48d_layer4u1f48e_layer0u1f48e_layer1u1f48e_layer2u1f48e_layer3u1f48e_layer4u1f48f-1f3fb_layer0u1f48f-1f3fb_layer1u1f48f-1f3fb_layer2u1f48f-1f3fb_layer3u1f48f-1f3fb_layer4u1f48f-1f3fb_layer5u1f48f-1f3ff_layer1u1f48f_1f3fbu1f48f_1f3fcu1f48f_1f3fdu1f48f_1f3feu1f48f_1f3ffu1f490_layer0u1f490_layer1u1f490_layer2u1f490_layer3u1f490_layer4u1f490_layer5u1f490_layer6u1f490_layer7u1f491-1f3fb_layer0u1f491-1f3fb_layer1u1f491-1f3fb_layer2u1f491-1f3fb_layer3u1f491-1f3fb_layer4u1f491-1f3fb_layer5u1f491-1f3fb_layer8u1f491-1f3ff_layer5u1f491_1f3fbu1f491_1f3fcu1f491_1f3fdu1f491_1f3feu1f491_1f3ffu1f492_layer0u1f492_layer1u1f492_layer2u1f492_layer3u1f492_layer4u1f492_layer5u1f492_layer6u1f493_layer0u1f493_layer1u1f494_layer0u1f494_layer1u1f495_layer0u1f496_layer0u1f496_layer1u1f497_layer1u1f497_layer2u1f498_layer0u1f498_layer1u1f498_layer2u1f498_layer3u1f498_layer4u1f49d_layer1u1f49d_layer2u1f49d_layer3u1f49d_layer4u1f49e_layer0u1f49f_layer1u1f4a0_layer0u1f4a0_layer1u1f4a1_layer0u1f4a1_layer1u1f4a1_layer2u1f4a1_layer3u1f4a1_layer4u1f4a2_layer0u1f4a3_layer0u1f4a3_layer1u1f4a3_layer2u1f4a3_layer3u1f4a3_layer4u1f4a4_layer0u1f4a5_layer0u1f4a5_layer1u1f4a5_layer2u1f4a6_layer0u1f4a7_layer0u1f4a8_layer0u1f4a9_layer0u1f4a9_layer1u1f4a9_layer2u1f4a9_layer3u1f4aa-1f3fb_layer0u1f4aa-1f3fb_layer1u1f4aa-1f3fb_layer2u1f4aa_1f3fbu1f4aa_1f3fcu1f4aa_1f3fdu1f4aa_1f3feu1f4aa_1f3ffu1f4ab_layer0u1f4ab_layer1u1f4ac_layer0u1f4ac_layer1u1f4ad_layer0u1f4ae_layer0u1f4ae_layer1u1f4ae_layer2u1f4af_layer0u1f4b0_layer0u1f4b0_layer1u1f4b0_layer2u1f4b1_layer0u1f4b1_layer1u1f4b2_layer0u1f4b3_layer0u1f4b3_layer1u1f4b3_layer2u1f4b3_layer3u1f4b4_layer0u1f4b4_layer1u1f4b4_layer2u1f4b4_layer3u1f4b4_layer4u1f4b4_layer5u1f4b4_layer6u1f4b5_layer6u1f4b6_layer6u1f4b7_layer6u1f4b8_layer0u1f4b8_layer1u1f4b8_layer2u1f4b8_layer3u1f4b8_layer4u1f4b8_layer5u1f4b8_layer6u1f4b8_layer7u1f4b8_layer8u1f4b9_layer0u1f4b9_layer1u1f4b9_layer2u1f4ba_layer0u1f4ba_layer1u1f4ba_layer10u1f4ba_layer11u1f4ba_layer12u1f4ba_layer13u1f4ba_layer14u1f4ba_layer15u1f4ba_layer16u1f4ba_layer17u1f4ba_layer2u1f4ba_layer3u1f4ba_layer4u1f4ba_layer5u1f4ba_layer6u1f4ba_layer7u1f4ba_layer8u1f4ba_layer9u1f4bb_layer0u1f4bb_layer1u1f4bb_layer2u1f4bb_layer3u1f4bb_layer4u1f4bc_layer0u1f4bc_layer1u1f4bc_layer2u1f4bc_layer3u1f4bd_layer1u1f4bd_layer2u1f4bd_layer3u1f4bd_layer4u1f4be_layer0u1f4be_layer1u1f4be_layer2u1f4bf_layer0u1f4bf_layer1u1f4bf_layer2u1f4c1_layer0u1f4c1_layer1u1f4c2_layer1u1f4c3_layer0u1f4c3_layer1u1f4c3_layer2u1f4c4_layer0u1f4c4_layer1u1f4c4_layer2u1f4c5_layer0u1f4c5_layer1u1f4c5_layer2u1f4c5_layer3u1f4c5_layer4u1f4c6_layer0u1f4c6_layer1u1f4c6_layer2u1f4c6_layer3u1f4c6_layer4u1f4c6_layer5u1f4c6_layer6u1f4c7_layer0u1f4c7_layer1u1f4c7_layer2u1f4c7_layer3u1f4c7_layer4u1f4c8_layer0u1f4c8_layer1u1f4c8_layer2u1f4c9_layer2u1f4ca_layer2u1f4ca_layer3u1f4ca_layer4u1f4cb_layer0u1f4cb_layer1u1f4cb_layer2u1f4cb_layer3u1f4cb_layer4u1f4cc_layer0u1f4cc_layer1u1f4cc_layer2u1f4cc_layer3u1f4cd_layer0u1f4cd_layer1u1f4cd_layer2u1f4ce_layer0u1f4cf_layer0u1f4cf_layer1u1f4d0_layer0u1f4d1_layer0u1f4d1_layer1u1f4d1_layer2u1f4d1_layer3u1f4d1_layer4u1f4d2_layer0u1f4d2_layer1u1f4d2_layer2u1f4d2_layer3u1f4d2_layer4u1f4d2_layer5u1f4d2_layer6u1f4d2_layer7u1f4d3_layer0u1f4d3_layer1u1f4d3_layer2u1f4d3_layer3u1f4d3_layer4u1f4d3_layer5u1f4d3_layer6u1f4d4_layer6u1f4d6_layer0u1f4d6_layer1u1f4d6_layer2u1f4d6_layer3u1f4d6_layer4u1f4da_layer0u1f4da_layer1u1f4da_layer10u1f4da_layer11u1f4da_layer2u1f4da_layer3u1f4da_layer4u1f4da_layer5u1f4da_layer6u1f4da_layer7u1f4da_layer8u1f4da_layer9u1f4db_layer0u1f4db_layer1u1f4dc_layer0u1f4dc_layer1u1f4dc_layer2u1f4dc_layer3u1f4dd_layer0u1f4dd_layer1u1f4dd_layer2u1f4dd_layer3u1f4dd_layer4u1f4dd_layer5u1f4dd_layer6u1f4dd_layer7u1f4dd_layer8u1f4de_layer0u1f4df_layer1u1f4df_layer2u1f4df_layer3u1f4df_layer4u1f4e0_layer0u1f4e0_layer1u1f4e0_layer2u1f4e0_layer3u1f4e0_layer4u1f4e1_layer0u1f4e1_layer1u1f4e1_layer2u1f4e1_layer3u1f4e1_layer4u1f4e1_layer5u1f4e1_layer6u1f4e2_layer0u1f4e2_layer1u1f4e2_layer2u1f4e2_layer3u1f4e2_layer4u1f4e3_layer0u1f4e3_layer1u1f4e3_layer2u1f4e4_layer0u1f4e4_layer1u1f4e4_layer2u1f4e4_layer3u1f4e5_layer3u1f4e6_layer0u1f4e6_layer1u1f4e6_layer2u1f4e6_layer3u1f4e6_layer4u1f4e6_layer5u1f4e6_layer6u1f4e6_layer7u1f4e7_layer1u1f4e7_layer2u1f4e7_layer3u1f4e7_layer4u1f4e8_layer0u1f4e8_layer1u1f4e8_layer2u1f4e8_layer3u1f4e8_layer4u1f4e9_layer0u1f4e9_layer1u1f4e9_layer2u1f4e9_layer3u1f4e9_layer4u1f4ea_layer0u1f4ea_layer1u1f4ea_layer2u1f4ea_layer3u1f4ea_layer4u1f4eb_layer4u1f4ec_layer2u1f4ec_layer3u1f4ec_layer4u1f4ec_layer5u1f4ee_layer0u1f4ee_layer1u1f4ee_layer2u1f4ee_layer3u1f4ee_layer4u1f4ee_layer5u1f4ee_layer6u1f4ef_layer0u1f4ef_layer1u1f4ef_layer2u1f4f0_layer0u1f4f0_layer1u1f4f0_layer2u1f4f0_layer3u1f4f1_layer0u1f4f2_layer0u1f4f2_layer1u1f4f3_layer0u1f4f3_layer1u1f4f4_layer1u1f4f4_layer2u1f4f5_layer0u1f4f5_layer1u1f4f5_layer2u1f4f5_layer3u1f4f6_layer0u1f4f6_layer1u1f4f7_layer0u1f4f7_layer1u1f4f7_layer2u1f4f7_layer3u1f4f7_layer4u1f4f7_layer5u1f4f7_layer6u1f4f8_layer5u1f4f8_layer6u1f4f9_layer0u1f4f9_layer1u1f4fa_layer0u1f4fa_layer1u1f4fa_layer2u1f4fa_layer3u1f4fa_layer4u1f4fb_layer0u1f4fb_layer1u1f4fb_layer2u1f4fb_layer3u1f4fc_layer0u1f4fc_layer1u1f4fc_layer2u1f4fc_layer3u1f4fc_layer4u1f4fd_layer0u1f4fd_layer1u1f4ff_layer0u1f4ff_layer1u1f4ff_layer10u1f4ff_layer11u1f4ff_layer12u1f4ff_layer13u1f4ff_layer14u1f4ff_layer15u1f4ff_layer16u1f4ff_layer17u1f4ff_layer18u1f4ff_layer19u1f4ff_layer2u1f4ff_layer3u1f4ff_layer4u1f4ff_layer5u1f4ff_layer6u1f4ff_layer7u1f4ff_layer8u1f4ff_layer9u1f500_layer1u1f500_layer2u1f500_layer3u1f501_layer1u1f502_layer1u1f502_layer2u1f502_layer3u1f503_layer0u1f503_layer1u1f504_layer1u1f505_layer0u1f505_layer1u1f505_layer2u1f505_layer3u1f506_layer0u1f507_layer0u1f507_layer1u1f507_layer2u1f509_layer0u1f509_layer1u1f50a_layer0u1f50a_layer1u1f50a_layer2u1f50a_layer3u1f50b_layer0u1f50b_layer1u1f50b_layer2u1f50b_layer3u1f50c_layer0u1f50c_layer1u1f50d_layer0u1f50d_layer1u1f50d_layer2u1f50d_layer3u1f50e_layer0u1f50e_layer1u1f50e_layer2u1f50e_layer3u1f50f_layer0u1f50f_layer1u1f50f_layer2u1f50f_layer3u1f510_layer0u1f510_layer2u1f511_layer0u1f512_layer0u1f512_layer1u1f513_layer0u1f514_layer0u1f514_layer1u1f516_layer6u1f516_layer7u1f516_layer8u1f517_layer0u1f517_layer1u1f518_layer1u1f519_layer0u1f51a_layer0u1f51b_layer0u1f51c_layer0u1f51d_layer0u1f51e_layer0u1f51e_layer1u1f51e_layer2u1f51f_layer1u1f520_layer1u1f521_layer1u1f522_layer1u1f523_layer1u1f524_layer1u1f525_layer0u1f525_layer1u1f526_layer0u1f526_layer1u1f526_layer2u1f526_layer3u1f526_layer4u1f527_layer0u1f528_layer0u1f528_layer1u1f529_layer0u1f529_layer1u1f529_layer2u1f529_layer3u1f529_layer4u1f529_layer5u1f529_layer6u1f529_layer7u1f52a_layer0u1f52a_layer1u1f52a_layer2u1f52a_layer3u1f52b_layer0u1f52b_layer1u1f52b_layer2u1f52b_layer3u1f52b_layer4u1f52b_layer5u1f52b_layer6u1f52b_layer7u1f52b_layer8u1f52b_layer9u1f52c_layer0u1f52c_layer1u1f52c_layer2u1f52c_layer3u1f52c_layer4u1f52c_layer5u1f52c_layer6u1f52c_layer7u1f52d_layer0u1f52d_layer1u1f52d_layer2u1f52d_layer3u1f52d_layer4u1f52d_layer5u1f52d_layer6u1f52e_layer0u1f52e_layer1u1f52e_layer2u1f52e_layer3u1f52f_layer1u1f52f_layer2u1f530_layer0u1f530_layer1u1f530_layer2u1f531_layer0u1f531_layer1u1f532_layer1u1f536_layer0u1f538_layer0u1f53a_layer0u1f53b_layer0u1f53c_layer1u1f53d_layer1u1f549_layer1u1f549_layer2u1f54a_layer0u1f54a_layer1u1f54a_layer2u1f54a_layer3u1f54a_layer4u1f54b_layer0u1f54b_layer1u1f54b_layer2u1f54b_layer3u1f54b_layer4u1f54b_layer5u1f54b_layer6u1f54c_layer0u1f54c_layer1u1f54c_layer2u1f54c_layer3u1f54c_layer4u1f54c_layer5u1f54c_layer6u1f54d_layer0u1f54d_layer1u1f54d_layer10u1f54d_layer11u1f54d_layer12u1f54d_layer2u1f54d_layer3u1f54d_layer4u1f54d_layer5u1f54d_layer6u1f54d_layer7u1f54d_layer8u1f54d_layer9u1f54e_layer1u1f550_layer1u1f550_layer2u1f550_layer3u1f551_layer3u1f552_layer3u1f553_layer3u1f554_layer3u1f555_layer3u1f556_layer2u1f556_layer3u1f557_layer3u1f558_layer3u1f559_layer3u1f55a_layer2u1f55a_layer3u1f55b_layer3u1f55c_layer2u1f55c_layer3u1f55d_layer3u1f55e_layer3u1f55f_layer3u1f560_layer2u1f566_layer3u1f567_layer2u1f567_layer3u1f56f_layer0u1f56f_layer1u1f56f_layer2u1f56f_layer3u1f56f_layer4u1f570_layer0u1f570_layer1u1f570_layer2u1f570_layer3u1f570_layer4u1f570_layer5u1f570_layer6u1f570_layer7u1f573_layer0u1f573_layer1u1f573_layer2"u1f574-1f3fb-200d-2640-fe0f_layer0"u1f574-1f3fb-200d-2640-fe0f_layer1#u1f574-1f3fb-200d-2640-fe0f_layer10#u1f574-1f3fb-200d-2640-fe0f_layer11#u1f574-1f3fb-200d-2640-fe0f_layer12#u1f574-1f3fb-200d-2640-fe0f_layer13"u1f574-1f3fb-200d-2640-fe0f_layer2"u1f574-1f3fb-200d-2640-fe0f_layer3"u1f574-1f3fb-200d-2640-fe0f_layer4"u1f574-1f3fb-200d-2640-fe0f_layer5"u1f574-1f3fb-200d-2640-fe0f_layer6"u1f574-1f3fb-200d-2640-fe0f_layer7"u1f574-1f3fb-200d-2640-fe0f_layer8"u1f574-1f3fb-200d-2640-fe0f_layer9"u1f574-1f3fb-200d-2642-fe0f_layer0"u1f574-1f3fb-200d-2642-fe0f_layer1#u1f574-1f3fb-200d-2642-fe0f_layer10#u1f574-1f3fb-200d-2642-fe0f_layer11#u1f574-1f3fb-200d-2642-fe0f_layer12#u1f574-1f3fb-200d-2642-fe0f_layer13#u1f574-1f3fb-200d-2642-fe0f_layer14#u1f574-1f3fb-200d-2642-fe0f_layer15#u1f574-1f3fb-200d-2642-fe0f_layer16#u1f574-1f3fb-200d-2642-fe0f_layer17#u1f574-1f3fb-200d-2642-fe0f_layer18"u1f574-1f3fb-200d-2642-fe0f_layer2"u1f574-1f3fb-200d-2642-fe0f_layer3"u1f574-1f3fb-200d-2642-fe0f_layer4"u1f574-1f3fb-200d-2642-fe0f_layer5"u1f574-1f3fb-200d-2642-fe0f_layer6"u1f574-1f3fb-200d-2642-fe0f_layer7"u1f574-1f3fb-200d-2642-fe0f_layer8"u1f574-1f3fb-200d-2642-fe0f_layer9u1f574-1f3fb_layer12u1f574-1f3fb_layer3u1f574-1f3fb_layer4u1f574-1f3fb_layer5u1f574-1f3fb_layer6u1f574-1f3fb_layer7u1f574-1f3fb_layer8u1f574-1f3fc_layer5u1f574_1f3fbu1f574_1f3fb_200d_2640_fe0fu1f574_1f3fb_200d_2642_fe0fu1f574_1f3fcu1f574_1f3fc_200d_2640_fe0fu1f574_1f3fc_200d_2642_fe0fu1f574_1f3fdu1f574_1f3fd_200d_2640_fe0fu1f574_1f3fd_200d_2642_fe0fu1f574_1f3feu1f574_1f3fe_200d_2640_fe0fu1f574_1f3fe_200d_2642_fe0fu1f574_1f3ffu1f574_1f3ff_200d_2640_fe0fu1f574_1f3ff_200d_2642_fe0fu1f574_fe0f_200d_2640_fe0fu1f574_fe0f_200d_2642_fe0f"u1f575-1f3fb-200d-2640-fe0f_layer0"u1f575-1f3fb-200d-2640-fe0f_layer1#u1f575-1f3fb-200d-2640-fe0f_layer10#u1f575-1f3fb-200d-2640-fe0f_layer11#u1f575-1f3fb-200d-2640-fe0f_layer12"u1f575-1f3fb-200d-2640-fe0f_layer2"u1f575-1f3fb-200d-2640-fe0f_layer3"u1f575-1f3fb-200d-2640-fe0f_layer4"u1f575-1f3fb-200d-2640-fe0f_layer5"u1f575-1f3fb-200d-2640-fe0f_layer7"u1f575-1f3fb-200d-2640-fe0f_layer8"u1f575-1f3fb-200d-2640-fe0f_layer9"u1f575-1f3fb-200d-2642-fe0f_layer0"u1f575-1f3fb-200d-2642-fe0f_layer1#u1f575-1f3fb-200d-2642-fe0f_layer10"u1f575-1f3fb-200d-2642-fe0f_layer3"u1f575-1f3fb-200d-2642-fe0f_layer5"u1f575-1f3fb-200d-2642-fe0f_layer9u1f575-1f3fb_layer4u1f575-1f3fb_layer5u1f575-1f3fb_layer6"u1f575-1f3fc-200d-2642-fe0f_layer2"u1f575-1f3fc-200d-2642-fe0f_layer3"u1f575-1f3fc-200d-2642-fe0f_layer9u1f575_1f3fbu1f575_1f3fb_200d_2640_fe0fu1f575_1f3fb_200d_2642_fe0fu1f575_1f3fcu1f575_1f3fc_200d_2640_fe0fu1f575_1f3fc_200d_2642_fe0fu1f575_1f3fdu1f575_1f3fd_200d_2640_fe0fu1f575_1f3fd_200d_2642_fe0fu1f575_1f3feu1f575_1f3fe_200d_2640_fe0fu1f575_1f3fe_200d_2642_fe0fu1f575_1f3ffu1f575_1f3ff_200d_2640_fe0fu1f575_1f3ff_200d_2642_fe0fu1f575_fe0f_200d_2640_fe0fu1f575_fe0f_200d_2642_fe0fu1f576_layer0u1f577_layer0u1f577_layer1u1f577_layer2u1f577_layer3u1f577_layer4u1f577_layer5u1f577_layer6u1f577_layer7u1f577_layer8u1f577_layer9u1f578_layer0u1f579_layer0u1f579_layer1u1f579_layer2u1f579_layer3u1f579_layer4u1f57a-1f3fb_layer0u1f57a-1f3fb_layer1u1f57a-1f3fb_layer2u1f57a-1f3fb_layer3u1f57a-1f3fb_layer4u1f57a-1f3fb_layer5u1f57a-1f3fb_layer6u1f57a-1f3fb_layer7u1f57a-1f3fb_layer8u1f57a-1f3fb_layer9u1f57a_1f3fbu1f57a_1f3fcu1f57a_1f3fdu1f57a_1f3feu1f57a_1f3ffu1f587_layer0u1f587_layer1u1f58a_layer0u1f58a_layer1u1f58a_layer2u1f58a_layer3u1f58a_layer4u1f58a_layer5u1f58b_layer0u1f58b_layer1u1f58b_layer2u1f58b_layer3u1f58c_layer0u1f58c_layer1u1f58c_layer2u1f58c_layer3u1f58d_layer0u1f58d_layer1u1f58d_layer2u1f58d_layer3u1f590-1f3fb_layer0u1f590-1f3fb_layer1u1f590_1f3fbu1f590_1f3fcu1f590_1f3fdu1f590_1f3feu1f590_1f3ffu1f595-1f3fb_layer0u1f595-1f3fb_layer1u1f595-1f3fb_layer2u1f595_1f3fbu1f595_1f3fcu1f595_1f3fdu1f595_1f3feu1f595_1f3ffu1f596-1f3fb_layer0u1f596-1f3fb_layer1u1f596-1f3fb_layer2u1f596-1f3fb_layer3u1f596_1f3fbu1f596_1f3fcu1f596_1f3fdu1f596_1f3feu1f596_1f3ffu1f5a5_layer0u1f5a5_layer1u1f5a5_layer2u1f5a5_layer3u1f5a5_layer4u1f5a8_layer0u1f5a8_layer1u1f5a8_layer2u1f5a8_layer3u1f5a8_layer4u1f5a8_layer5u1f5a8_layer6u1f5a8_layer7u1f5a8_layer8u1f5b1_layer0u1f5b1_layer1u1f5b2_layer0u1f5b2_layer1u1f5b2_layer2u1f5b2_layer3u1f5b2_layer4u1f5bc_layer0u1f5bc_layer1u1f5bc_layer2u1f5bc_layer3u1f5bc_layer4u1f5bc_layer5u1f5bc_layer6u1f5bc_layer7u1f5bc_layer8u1f5bc_layer9u1f5c2_layer0u1f5c2_layer1u1f5c2_layer2u1f5c2_layer3u1f5c2_layer4u1f5c2_layer5u1f5c2_layer6u1f5c3_layer0u1f5c3_layer1u1f5c3_layer2u1f5c3_layer3u1f5c3_layer4u1f5c3_layer5u1f5c3_layer6u1f5c3_layer7u1f5c3_layer8u1f5c3_layer9u1f5c4_layer0u1f5c4_layer1u1f5c4_layer2u1f5c4_layer3u1f5d1_layer0u1f5d1_layer1u1f5d2_layer0u1f5d2_layer1u1f5d2_layer2u1f5d2_layer3u1f5d2_layer4u1f5d2_layer5u1f5d2_layer6u1f5d2_layer7u1f5d2_layer8u1f5d3_layer0u1f5d3_layer1u1f5d3_layer2u1f5d3_layer3u1f5d3_layer4u1f5d3_layer5u1f5dc_layer0u1f5dc_layer1u1f5dc_layer2u1f5dc_layer3u1f5dc_layer4u1f5dc_layer5u1f5dc_layer6u1f5dd_layer0u1f5dd_layer1u1f5dd_layer2u1f5dd_layer3u1f5dd_layer4u1f5dd_layer5u1f5dd_layer6u1f5de_layer0u1f5de_layer1u1f5de_layer2u1f5de_layer3u1f5de_layer4u1f5de_layer5u1f5e1_layer0u1f5e1_layer1u1f5e1_layer2u1f5e1_layer3u1f5e1_layer4u1f5e1_layer5u1f5e1_layer6u1f5e1_layer7u1f5e3_layer0u1f5e3_layer1u1f5e8_layer0u1f5ef_layer0u1f5ef_layer1u1f5f3_layer0u1f5f3_layer1u1f5f3_layer2u1f5f3_layer3u1f5f3_layer4u1f5f3_layer5u1f5f3_layer6u1f5fa_layer0u1f5fa_layer1u1f5fa_layer2u1f5fa_layer3u1f5fa_layer4u1f5fa_layer5u1f5fa_layer6u1f5fb_layer0u1f5fb_layer1u1f5fb_layer2u1f5fb_layer3u1f5fb_layer4u1f5fb_layer5u1f5fc_layer0u1f5fc_layer1u1f5fc_layer2u1f5fc_layer3u1f5fc_layer4u1f5fc_layer5u1f5fc_layer6u1f5fd_layer1u1f5fd_layer2u1f5fd_layer3u1f5fd_layer4u1f5fd_layer5u1f5fe_layer0u1f5fe_layer1u1f5fe_layer2u1f5ff_layer0u1f5ff_layer1u1f5ff_layer2u1f5ff_layer3u1f600_layer1u1f600_layer2u1f601_layer0u1f601_layer1u1f601_layer2u1f601_layer3u1f602_layer1u1f602_layer2u1f602_layer3u1f603_layer1u1f604_layer1u1f605_layer3u1f606_layer1u1f607_layer1u1f607_layer2u1f607_layer3u1f607_layer4u1f607_layer5u1f608_layer2u1f609_layer1u1f609_layer2u1f60a_layer1u1f60a_layer2u1f60b_layer1u1f60b_layer2u1f60b_layer3u1f60c_layer1u1f60d_layer1u1f60d_layer2u1f60e_layer1u1f60e_layer2u1f60f_layer1u1f610_layer1u1f611_layer1u1f612_layer1u1f613_layer1u1f613_layer2u1f614_layer1u1f615_layer1u1f616_layer1u1f617_layer1u1f618_layer1u1f618_layer2u1f618_layer3u1f618_layer4u1f619_layer1u1f61a_layer1u1f61a_layer2u1f61b_layer1u1f61b_layer2u1f61b_layer3u1f61c_layer1u1f61c_layer2u1f61c_layer3u1f61d_layer1u1f61d_layer2u1f61d_layer3u1f61e_layer1u1f61f_layer1u1f61f_layer2u1f620_layer1u1f622_layer1u1f622_layer2u1f622_layer3u1f623_layer1u1f624_layer1u1f624_layer2u1f624_layer3u1f625_layer1u1f625_layer2u1f626_layer1u1f627_layer1u1f627_layer2u1f628_layer1u1f628_layer3u1f629_layer1u1f629_layer2u1f62a_layer1u1f62a_layer2u1f62b_layer1u1f62b_layer2u1f62b_layer3u1f62c_layer1u1f62c_layer2u1f62c_layer3u1f62d_layer1u1f62d_layer2u1f62d_layer3u1f62d_layer4u1f62d_layer5u1f62e-200d-1f4a8_layer1u1f62e-200d-1f4a8_layer2u1f62e-200d-1f4a8_layer3u1f62e_200d_1f4a8u1f62e_layer1u1f62f_layer1u1f630_layer1u1f630_layer4u1f631_layer0u1f631_layer1u1f631_layer2u1f631_layer3u1f631_layer4u1f632_layer1u1f632_layer2u1f633_layer1u1f633_layer2u1f633_layer3u1f633_layer4u1f634_layer1u1f634_layer2u1f634_layer3u1f635-200d-1f4ab_layer1u1f635_200d_1f4abu1f635_layer1u1f636-200d-1f32b-fe0f_layer0u1f636-200d-1f32b-fe0f_layer1u1f636-200d-1f32b-fe0f_layer2u1f636-200d-1f32b-fe0f_layer3u1f636-200d-1f32b-fe0f_layer4u1f636-200d-1f32b-fe0f_layer5u1f636-200d-1f32b-fe0f_layer6u1f636-200d-1f32b-fe0f_layer7u1f636-200d-1f32b-fe0f_layer8u1f636_200d_1f32b_fe0fu1f637_layer1u1f637_layer2u1f638_layer0u1f638_layer1u1f638_layer2u1f638_layer3u1f638_layer4u1f638_layer5u1f638_layer6u1f639_layer7u1f63a_layer5u1f63b_layer5u1f63b_layer7u1f63c_layer5u1f63c_layer6u1f63d_layer5u1f63e_layer5u1f63e_layer6u1f63f_layer5u1f63f_layer6u1f63f_layer7u1f640_layer0u1f640_layer1u1f640_layer4u1f640_layer5u1f640_layer6u1f640_layer7u1f641_layer1u1f642_layer1u1f643_layer0u1f643_layer1u1f644_layer1u1f644_layer2"u1f645-1f3fb-200d-2640-fe0f_layer0"u1f645-1f3fb-200d-2640-fe0f_layer1#u1f645-1f3fb-200d-2640-fe0f_layer10#u1f645-1f3fb-200d-2640-fe0f_layer11#u1f645-1f3fb-200d-2640-fe0f_layer12"u1f645-1f3fb-200d-2640-fe0f_layer2"u1f645-1f3fb-200d-2640-fe0f_layer3"u1f645-1f3fb-200d-2640-fe0f_layer4"u1f645-1f3fb-200d-2640-fe0f_layer5"u1f645-1f3fb-200d-2640-fe0f_layer6"u1f645-1f3fb-200d-2640-fe0f_layer7"u1f645-1f3fb-200d-2640-fe0f_layer8"u1f645-1f3fb-200d-2640-fe0f_layer9"u1f645-1f3fb-200d-2642-fe0f_layer0"u1f645-1f3fb-200d-2642-fe0f_layer1"u1f645-1f3fb-200d-2642-fe0f_layer2"u1f645-1f3fb-200d-2642-fe0f_layer4"u1f645-1f3ff-200d-2640-fe0f_layer5"u1f645-1f3ff-200d-2642-fe0f_layer4u1f645_1f3fbu1f645_1f3fb_200d_2640_fe0fu1f645_1f3fb_200d_2642_fe0fu1f645_1f3fcu1f645_1f3fc_200d_2640_fe0fu1f645_1f3fc_200d_2642_fe0fu1f645_1f3fdu1f645_1f3fd_200d_2640_fe0fu1f645_1f3fd_200d_2642_fe0fu1f645_1f3feu1f645_1f3fe_200d_2640_fe0fu1f645_1f3fe_200d_2642_fe0fu1f645_1f3ffu1f645_1f3ff_200d_2640_fe0fu1f645_1f3ff_200d_2642_fe0fu1f645_200d_2640_fe0fu1f645_200d_2642_fe0f"u1f646-1f3fb-200d-2640-fe0f_layer1"u1f646-1f3fb-200d-2640-fe0f_layer2"u1f646-1f3fb-200d-2640-fe0f_layer3"u1f646-1f3fb-200d-2640-fe0f_layer6"u1f646-1f3fb-200d-2642-fe0f_layer0"u1f646-1f3fb-200d-2642-fe0f_layer2"u1f646-1f3fb-200d-2642-fe0f_layer3"u1f646-1f3fb-200d-2642-fe0f_layer4"u1f646-1f3fb-200d-2642-fe0f_layer5u1f646-1f3fb_layer2u1f646-1f3fb_layer3u1f646-1f3fb_layer4"u1f646-1f3ff-200d-2642-fe0f_layer5u1f646_1f3fbu1f646_1f3fb_200d_2640_fe0fu1f646_1f3fb_200d_2642_fe0fu1f646_1f3fcu1f646_1f3fc_200d_2640_fe0fu1f646_1f3fc_200d_2642_fe0fu1f646_1f3fdu1f646_1f3fd_200d_2640_fe0fu1f646_1f3fd_200d_2642_fe0fu1f646_1f3feu1f646_1f3fe_200d_2640_fe0fu1f646_1f3fe_200d_2642_fe0fu1f646_1f3ffu1f646_1f3ff_200d_2640_fe0fu1f646_1f3ff_200d_2642_fe0fu1f646_200d_2640_fe0fu1f646_200d_2642_fe0f"u1f647-1f3fb-200d-2640-fe0f_layer0"u1f647-1f3fb-200d-2640-fe0f_layer1"u1f647-1f3fb-200d-2640-fe0f_layer2"u1f647-1f3fb-200d-2640-fe0f_layer3"u1f647-1f3fb-200d-2640-fe0f_layer4"u1f647-1f3fb-200d-2640-fe0f_layer5"u1f647-1f3fb-200d-2640-fe0f_layer6"u1f647-1f3fb-200d-2642-fe0f_layer2"u1f647-1f3fb-200d-2642-fe0f_layer3"u1f647-1f3fb-200d-2642-fe0f_layer4u1f647-1f3fb_layer1u1f647-1f3fb_layer3u1f647-1f3fb_layer6"u1f647-1f3fe-200d-2642-fe0f_layer4"u1f647-1f3ff-200d-2640-fe0f_layer4u1f647_1f3fbu1f647_1f3fb_200d_2640_fe0fu1f647_1f3fb_200d_2642_fe0fu1f647_1f3fcu1f647_1f3fc_200d_2640_fe0fu1f647_1f3fc_200d_2642_fe0fu1f647_1f3fdu1f647_1f3fd_200d_2640_fe0fu1f647_1f3fd_200d_2642_fe0fu1f647_1f3feu1f647_1f3fe_200d_2640_fe0fu1f647_1f3fe_200d_2642_fe0fu1f647_1f3ffu1f647_1f3ff_200d_2640_fe0fu1f647_1f3ff_200d_2642_fe0fu1f647_200d_2640_fe0fu1f647_200d_2642_fe0fu1f648_layer0u1f648_layer1u1f648_layer10u1f648_layer2u1f648_layer3u1f648_layer4u1f648_layer5u1f648_layer6u1f648_layer7u1f648_layer8u1f648_layer9u1f649_layer0u1f649_layer1u1f649_layer7u1f649_layer8u1f649_layer9u1f64a_layer10u1f64a_layer11u1f64a_layer6u1f64a_layer7u1f64a_layer8u1f64a_layer9"u1f64b-1f3fb-200d-2640-fe0f_layer1#u1f64b-1f3fb-200d-2640-fe0f_layer10"u1f64b-1f3fb-200d-2640-fe0f_layer2"u1f64b-1f3fb-200d-2640-fe0f_layer3"u1f64b-1f3fb-200d-2640-fe0f_layer4"u1f64b-1f3fb-200d-2640-fe0f_layer5"u1f64b-1f3fb-200d-2640-fe0f_layer9"u1f64b-1f3fb-200d-2642-fe0f_layer1u1f64b-1f3fb_layer0u1f64b-1f3fb_layer5u1f64b-1f3fb_layer9u1f64b_1f3fbu1f64b_1f3fb_200d_2640_fe0fu1f64b_1f3fb_200d_2642_fe0fu1f64b_1f3fcu1f64b_1f3fc_200d_2640_fe0fu1f64b_1f3fc_200d_2642_fe0fu1f64b_1f3fdu1f64b_1f3fd_200d_2640_fe0fu1f64b_1f3fd_200d_2642_fe0fu1f64b_1f3feu1f64b_1f3fe_200d_2640_fe0fu1f64b_1f3fe_200d_2642_fe0fu1f64b_1f3ffu1f64b_1f3ff_200d_2640_fe0fu1f64b_1f3ff_200d_2642_fe0fu1f64b_200d_2640_fe0fu1f64b_200d_2642_fe0fu1f64c-1f3fb_layer0u1f64c-1f3fb_layer1u1f64c-1f3fb_layer2u1f64c-1f3fb_layer3u1f64c-1f3fb_layer4u1f64c-1f3fc_layer2u1f64c-1f3ff_layer2u1f64c_1f3fbu1f64c_1f3fcu1f64c_1f3fdu1f64c_1f3feu1f64c_1f3ffu1f64c_layer2"u1f64d-1f3fb-200d-2640-fe0f_layer4"u1f64d-1f3fb-200d-2640-fe0f_layer5"u1f64d-1f3fb-200d-2640-fe0f_layer7"u1f64d-1f3fb-200d-2640-fe0f_layer8"u1f64d-1f3fb-200d-2642-fe0f_layer2u1f64d-1f3fb_layer5u1f64d-1f3fb_layer6"u1f64d-1f3fe-200d-2640-fe0f_layer4"u1f64d-1f3ff-200d-2640-fe0f_layer6u1f64d-1f3ff_layer6u1f64d_1f3fbu1f64d_1f3fb_200d_2640_fe0fu1f64d_1f3fb_200d_2642_fe0fu1f64d_1f3fcu1f64d_1f3fc_200d_2640_fe0fu1f64d_1f3fc_200d_2642_fe0fu1f64d_1f3fdu1f64d_1f3fd_200d_2640_fe0fu1f64d_1f3fd_200d_2642_fe0fu1f64d_1f3feu1f64d_1f3fe_200d_2640_fe0fu1f64d_1f3fe_200d_2642_fe0fu1f64d_1f3ffu1f64d_1f3ff_200d_2640_fe0fu1f64d_1f3ff_200d_2642_fe0fu1f64d_200d_2640_fe0fu1f64d_200d_2642_fe0f"u1f64e-1f3fb-200d-2640-fe0f_layer4"u1f64e-1f3fb-200d-2640-fe0f_layer6"u1f64e-1f3fb-200d-2642-fe0f_layer3"u1f64e-1f3fb-200d-2642-fe0f_layer5"u1f64e-1f3fe-200d-2640-fe0f_layer4u1f64e_1f3fbu1f64e_1f3fb_200d_2640_fe0fu1f64e_1f3fb_200d_2642_fe0fu1f64e_1f3fcu1f64e_1f3fc_200d_2640_fe0fu1f64e_1f3fc_200d_2642_fe0fu1f64e_1f3fdu1f64e_1f3fd_200d_2640_fe0fu1f64e_1f3fd_200d_2642_fe0fu1f64e_1f3feu1f64e_1f3fe_200d_2640_fe0fu1f64e_1f3fe_200d_2642_fe0fu1f64e_1f3ffu1f64e_1f3ff_200d_2640_fe0fu1f64e_1f3ff_200d_2642_fe0fu1f64e_200d_2640_fe0fu1f64e_200d_2642_fe0fu1f64f-1f3fb_layer0u1f64f-1f3fb_layer1u1f64f-1f3fb_layer2u1f64f-1f3fb_layer3u1f64f-1f3fb_layer4u1f64f-1f3fb_layer5u1f64f-1f3fb_layer6u1f64f-1f3fb_layer7u1f64f-1f3fb_layer8u1f64f_1f3fbu1f64f_1f3fcu1f64f_1f3fdu1f64f_1f3feu1f64f_1f3ffu1f64f_layer8u1f680_layer0u1f680_layer1u1f680_layer2u1f680_layer3u1f680_layer4u1f680_layer5u1f681_layer0u1f681_layer1u1f681_layer2u1f681_layer3u1f681_layer4u1f681_layer5u1f681_layer6u1f681_layer7u1f681_layer8u1f681_layer9u1f682_layer0u1f682_layer1u1f682_layer10u1f682_layer11u1f682_layer12u1f682_layer13u1f682_layer2u1f682_layer3u1f682_layer4u1f682_layer5u1f682_layer6u1f682_layer7u1f682_layer8u1f682_layer9u1f683_layer1u1f683_layer2u1f683_layer3u1f683_layer4u1f683_layer5u1f683_layer6u1f683_layer7u1f684_layer1u1f684_layer2u1f684_layer3u1f684_layer4u1f684_layer5u1f684_layer6u1f684_layer7u1f684_layer8u1f685_layer1u1f685_layer3u1f685_layer4u1f685_layer5u1f685_layer6u1f686_layer0u1f686_layer1u1f686_layer2u1f686_layer3u1f686_layer4u1f686_layer5u1f686_layer6u1f686_layer7u1f686_layer8u1f686_layer9u1f687_layer1u1f687_layer2u1f687_layer3u1f687_layer4u1f687_layer5u1f687_layer6u1f687_layer7u1f687_layer8u1f687_layer9u1f688_layer1u1f688_layer2u1f688_layer3u1f688_layer4u1f688_layer5u1f688_layer6u1f688_layer7u1f688_layer8u1f689_layer0u1f689_layer1u1f689_layer10u1f689_layer11u1f689_layer12u1f689_layer13u1f689_layer14u1f689_layer15u1f689_layer16u1f689_layer17u1f689_layer18u1f689_layer2u1f689_layer3u1f689_layer4u1f689_layer5u1f689_layer6u1f689_layer7u1f689_layer8u1f689_layer9u1f68a_layer10u1f68a_layer11u1f68a_layer12u1f68a_layer13u1f68a_layer3u1f68a_layer4u1f68a_layer5u1f68a_layer6u1f68a_layer7u1f68a_layer8u1f68a_layer9u1f68b_layer1u1f68b_layer10u1f68b_layer2u1f68b_layer3u1f68b_layer4u1f68b_layer5u1f68b_layer6u1f68b_layer7u1f68b_layer8u1f68b_layer9u1f68c_layer0u1f68c_layer1u1f68c_layer10u1f68c_layer2u1f68c_layer3u1f68c_layer4u1f68c_layer5u1f68c_layer6u1f68c_layer7u1f68c_layer8u1f68c_layer9u1f68d_layer0u1f68d_layer1u1f68d_layer10u1f68d_layer11u1f68d_layer12u1f68d_layer2u1f68d_layer3u1f68d_layer4u1f68d_layer5u1f68d_layer6u1f68d_layer7u1f68d_layer8u1f68d_layer9u1f68e_layer0u1f68e_layer1u1f68e_layer10u1f68e_layer2u1f68e_layer3u1f68e_layer4u1f68e_layer7u1f68e_layer8u1f68e_layer9u1f68f_layer0u1f68f_layer1u1f68f_layer2u1f68f_layer3u1f68f_layer4u1f68f_layer5u1f68f_layer6u1f690_layer0u1f690_layer1u1f690_layer2u1f690_layer3u1f690_layer4u1f690_layer5u1f690_layer6u1f691_layer0u1f691_layer3u1f691_layer4u1f691_layer5u1f692_layer0u1f692_layer1u1f692_layer2u1f692_layer3u1f692_layer4u1f692_layer5u1f692_layer6u1f692_layer7u1f693_layer0u1f693_layer1u1f693_layer2u1f693_layer3u1f693_layer4u1f693_layer5u1f693_layer6u1f694_layer0u1f694_layer1u1f694_layer2u1f694_layer3u1f694_layer4u1f694_layer5u1f694_layer6u1f694_layer7u1f694_layer8u1f695_layer0u1f695_layer1u1f695_layer4u1f695_layer5u1f696_layer0u1f696_layer1u1f696_layer10u1f696_layer2u1f696_layer3u1f696_layer4u1f696_layer5u1f696_layer6u1f696_layer7u1f696_layer8u1f696_layer9u1f697_layer0u1f697_layer1u1f698_layer1u1f698_layer3u1f698_layer4u1f698_layer5u1f698_layer6u1f698_layer7u1f699_layer0u1f699_layer1u1f699_layer4u1f699_layer5u1f69a_layer0u1f69a_layer1u1f69a_layer2u1f69a_layer4u1f69b_layer0u1f69b_layer1u1f69b_layer3u1f69b_layer4u1f69b_layer5u1f69c_layer0u1f69c_layer1u1f69c_layer10u1f69c_layer11u1f69c_layer12u1f69c_layer13u1f69c_layer2u1f69c_layer3u1f69c_layer4u1f69c_layer5u1f69c_layer6u1f69c_layer7u1f69c_layer8u1f69c_layer9u1f69d_layer0u1f69d_layer1u1f69d_layer2u1f69d_layer3u1f69d_layer4u1f69d_layer5u1f69d_layer6u1f69d_layer7u1f69d_layer8u1f69e_layer0u1f69e_layer2u1f69e_layer3u1f69e_layer4u1f69e_layer5u1f69e_layer6u1f69e_layer7u1f69e_layer8u1f69e_layer9u1f69f_layer0u1f69f_layer1u1f69f_layer2u1f69f_layer3u1f69f_layer4u1f69f_layer5u1f69f_layer6u1f69f_layer7u1f69f_layer8u1f6a0_layer0u1f6a0_layer1u1f6a0_layer2u1f6a0_layer3u1f6a0_layer4u1f6a0_layer5u1f6a0_layer6u1f6a0_layer7u1f6a1_layer0u1f6a1_layer4u1f6a1_layer5u1f6a1_layer6u1f6a1_layer7u1f6a2_layer0u1f6a2_layer1u1f6a2_layer10u1f6a2_layer11u1f6a2_layer12u1f6a2_layer2u1f6a2_layer3u1f6a2_layer4u1f6a2_layer5u1f6a2_layer6u1f6a2_layer7u1f6a2_layer8u1f6a2_layer9"u1f6a3-1f3fb-200d-2640-fe0f_layer0"u1f6a3-1f3fb-200d-2640-fe0f_layer1"u1f6a3-1f3fb-200d-2640-fe0f_layer2"u1f6a3-1f3fb-200d-2640-fe0f_layer3"u1f6a3-1f3fb-200d-2640-fe0f_layer4"u1f6a3-1f3fb-200d-2640-fe0f_layer5"u1f6a3-1f3fb-200d-2640-fe0f_layer6"u1f6a3-1f3fb-200d-2640-fe0f_layer7"u1f6a3-1f3fb-200d-2640-fe0f_layer8"u1f6a3-1f3fb-200d-2642-fe0f_layer6"u1f6a3-1f3fb-200d-2642-fe0f_layer7"u1f6a3-1f3fb-200d-2642-fe0f_layer8u1f6a3-1f3fb_layer5u1f6a3-1f3fb_layer6u1f6a3-1f3fb_layer7u1f6a3-1f3fb_layer8u1f6a3-1f3fb_layer9u1f6a3_1f3fbu1f6a3_1f3fb_200d_2640_fe0fu1f6a3_1f3fb_200d_2642_fe0fu1f6a3_1f3fcu1f6a3_1f3fc_200d_2640_fe0fu1f6a3_1f3fc_200d_2642_fe0fu1f6a3_1f3fdu1f6a3_1f3fd_200d_2640_fe0fu1f6a3_1f3fd_200d_2642_fe0fu1f6a3_1f3feu1f6a3_1f3fe_200d_2640_fe0fu1f6a3_1f3fe_200d_2642_fe0fu1f6a3_1f3ffu1f6a3_1f3ff_200d_2640_fe0fu1f6a3_1f3ff_200d_2642_fe0fu1f6a3_200d_2640_fe0fu1f6a3_200d_2642_fe0fu1f6a4_layer0u1f6a4_layer1u1f6a4_layer10u1f6a4_layer3u1f6a4_layer4u1f6a4_layer5u1f6a4_layer6u1f6a4_layer7u1f6a4_layer8u1f6a4_layer9u1f6a5_layer0u1f6a5_layer1u1f6a5_layer3u1f6a6_layer0u1f6a6_layer1u1f6a6_layer2u1f6a6_layer3u1f6a7_layer0u1f6a7_layer1u1f6a7_layer2u1f6a8_layer0u1f6a8_layer1u1f6a8_layer2u1f6a8_layer3u1f6a8_layer4u1f6a9_layer0u1f6a9_layer1u1f6aa_layer0u1f6aa_layer1u1f6aa_layer2u1f6aa_layer3u1f6aa_layer4u1f6aa_layer5u1f6ab_layer0u1f6ac_layer0u1f6ac_layer1u1f6ac_layer2u1f6ac_layer3u1f6ad_layer0u1f6ad_layer1u1f6ae_layer1u1f6ae_layer2u1f6ae_layer3u1f6af_layer0u1f6af_layer1u1f6af_layer2u1f6af_layer3u1f6b0_layer1u1f6b0_layer2u1f6b1_layer1u1f6b1_layer2u1f6b2_layer0u1f6b2_layer1u1f6b2_layer2u1f6b2_layer3u1f6b2_layer4u1f6b2_layer5u1f6b2_layer6u1f6b3_layer1u1f6b3_layer2"u1f6b4-1f3fb-200d-2640-fe0f_layer0"u1f6b4-1f3fb-200d-2640-fe0f_layer1#u1f6b4-1f3fb-200d-2640-fe0f_layer10#u1f6b4-1f3fb-200d-2640-fe0f_layer11#u1f6b4-1f3fb-200d-2640-fe0f_layer12#u1f6b4-1f3fb-200d-2640-fe0f_layer13#u1f6b4-1f3fb-200d-2640-fe0f_layer14"u1f6b4-1f3fb-200d-2640-fe0f_layer2"u1f6b4-1f3fb-200d-2640-fe0f_layer3"u1f6b4-1f3fb-200d-2640-fe0f_layer4"u1f6b4-1f3fb-200d-2640-fe0f_layer6"u1f6b4-1f3fb-200d-2640-fe0f_layer7"u1f6b4-1f3fb-200d-2640-fe0f_layer8"u1f6b4-1f3fb-200d-2640-fe0f_layer9"u1f6b4-1f3fb-200d-2642-fe0f_layer0"u1f6b4-1f3fb-200d-2642-fe0f_layer1u1f6b4-1f3fb_layer13u1f6b4-1f3fb_layer14u1f6b4-1f3fb_layer2#u1f6b4-1f3fd-200d-2640-fe0f_layer12#u1f6b4-1f3fd-200d-2640-fe0f_layer14u1f6b4_1f3fbu1f6b4_1f3fb_200d_2640_fe0fu1f6b4_1f3fb_200d_2642_fe0fu1f6b4_1f3fcu1f6b4_1f3fc_200d_2640_fe0fu1f6b4_1f3fc_200d_2642_fe0fu1f6b4_1f3fdu1f6b4_1f3fd_200d_2640_fe0fu1f6b4_1f3fd_200d_2642_fe0fu1f6b4_1f3feu1f6b4_1f3fe_200d_2640_fe0fu1f6b4_1f3fe_200d_2642_fe0fu1f6b4_1f3ffu1f6b4_1f3ff_200d_2640_fe0fu1f6b4_1f3ff_200d_2642_fe0fu1f6b4_200d_2640_fe0fu1f6b4_200d_2642_fe0f"u1f6b5-1f3fb-200d-2640-fe0f_layer0u1f6b5-1f3fb_layer2u1f6b5_1f3fbu1f6b5_1f3fb_200d_2640_fe0fu1f6b5_1f3fb_200d_2642_fe0fu1f6b5_1f3fcu1f6b5_1f3fc_200d_2640_fe0fu1f6b5_1f3fc_200d_2642_fe0fu1f6b5_1f3fdu1f6b5_1f3fd_200d_2640_fe0fu1f6b5_1f3fd_200d_2642_fe0fu1f6b5_1f3feu1f6b5_1f3fe_200d_2640_fe0fu1f6b5_1f3fe_200d_2642_fe0fu1f6b5_1f3ffu1f6b5_1f3ff_200d_2640_fe0fu1f6b5_1f3ff_200d_2642_fe0fu1f6b5_200d_2640_fe0fu1f6b5_200d_2642_fe0f"u1f6b6-1f3fb-200d-2640-fe0f_layer0"u1f6b6-1f3fb-200d-2640-fe0f_layer1"u1f6b6-1f3fb-200d-2640-fe0f_layer2"u1f6b6-1f3fb-200d-2640-fe0f_layer3"u1f6b6-1f3fb-200d-2640-fe0f_layer4"u1f6b6-1f3fb-200d-2640-fe0f_layer5"u1f6b6-1f3fb-200d-2640-fe0f_layer6"u1f6b6-1f3fb-200d-2640-fe0f_layer7"u1f6b6-1f3fb-200d-2640-fe0f_layer8"u1f6b6-1f3fb-200d-2640-fe0f_layer9"u1f6b6-1f3fb-200d-2642-fe0f_layer4"u1f6b6-1f3fb-200d-2642-fe0f_layer7u1f6b6-1f3fb_layer4u1f6b6-1f3fb_layer5u1f6b6-1f3fb_layer6u1f6b6-1f3fb_layer7u1f6b6_1f3fbu1f6b6_1f3fb_200d_2640_fe0fu1f6b6_1f3fb_200d_2642_fe0fu1f6b6_1f3fcu1f6b6_1f3fc_200d_2640_fe0fu1f6b6_1f3fc_200d_2642_fe0fu1f6b6_1f3fdu1f6b6_1f3fd_200d_2640_fe0fu1f6b6_1f3fd_200d_2642_fe0fu1f6b6_1f3feu1f6b6_1f3fe_200d_2640_fe0fu1f6b6_1f3fe_200d_2642_fe0fu1f6b6_1f3ffu1f6b6_1f3ff_200d_2640_fe0fu1f6b6_1f3ff_200d_2642_fe0fu1f6b6_200d_2640_fe0fu1f6b6_200d_2642_fe0fu1f6b7_layer0u1f6b7_layer1u1f6b7_layer2u1f6b8_layer0u1f6b8_layer1u1f6b8_layer2u1f6b8_layer3u1f6b9_layer1u1f6ba_layer1u1f6bb_layer1u1f6bc_layer1u1f6bd_layer0u1f6bd_layer1u1f6bd_layer2u1f6bd_layer3u1f6bd_layer4u1f6bd_layer5u1f6be_layer1u1f6bf_layer0u1f6bf_layer1u1f6bf_layer2u1f6c0-1f3fb_layer0u1f6c0-1f3fb_layer1u1f6c0-1f3fb_layer2u1f6c0-1f3fb_layer3u1f6c0-1f3fb_layer4u1f6c0-1f3fb_layer5u1f6c0-1f3fb_layer6u1f6c0_1f3fbu1f6c0_1f3fcu1f6c0_1f3fdu1f6c0_1f3feu1f6c0_1f3ffu1f6c2_layer1u1f6c2_layer2u1f6c2_layer3u1f6c3_layer1u1f6c3_layer2u1f6c4_layer1u1f6c5_layer1u1f6c5_layer2u1f6cb_layer0u1f6cb_layer1u1f6cb_layer2u1f6cb_layer3u1f6cb_layer4u1f6cb_layer5u1f6cb_layer6u1f6cb_layer7u1f6cb_layer8u1f6cb_layer9u1f6cc-1f3fb_layer0u1f6cc-1f3fb_layer1u1f6cc-1f3fb_layer2u1f6cc-1f3fb_layer3u1f6cc-1f3fb_layer4u1f6cc-1f3fb_layer5u1f6cc-1f3fb_layer6u1f6cc-1f3fb_layer7u1f6cc-1f3fb_layer8u1f6cc_1f3fbu1f6cc_1f3fcu1f6cc_1f3fdu1f6cc_1f3feu1f6cc_1f3ffu1f6cd_layer0u1f6cd_layer1u1f6cd_layer2u1f6cd_layer3u1f6ce_layer0u1f6ce_layer1u1f6ce_layer2u1f6ce_layer3u1f6ce_layer4u1f6cf_layer0u1f6cf_layer1u1f6cf_layer2u1f6cf_layer4u1f6d0_layer1u1f6d0_layer2u1f6d1_layer0u1f6d1_layer1u1f6d2_layer0u1f6d2_layer1u1f6d2_layer2u1f6d2_layer3u1f6d5_layer0u1f6d5_layer1u1f6d5_layer10u1f6d5_layer2u1f6d5_layer3u1f6d5_layer4u1f6d5_layer5u1f6d5_layer6u1f6d5_layer7u1f6d5_layer8u1f6d5_layer9u1f6d6_layer0u1f6d6_layer1u1f6d6_layer2u1f6d6_layer3u1f6d6_layer4u1f6d6_layer5u1f6d6_layer6u1f6d6_layer7u1f6d6_layer8u1f6d6_layer9u1f6d7_layer1u1f6d7_layer2u1f6e0_layer0u1f6e0_layer1u1f6e0_layer2u1f6e1_layer0u1f6e1_layer1u1f6e1_layer2u1f6e2_layer0u1f6e2_layer1u1f6e2_layer2u1f6e3_layer1u1f6e3_layer10u1f6e3_layer11u1f6e3_layer12u1f6e3_layer2u1f6e3_layer3u1f6e3_layer4u1f6e3_layer5u1f6e3_layer6u1f6e3_layer7u1f6e3_layer8u1f6e3_layer9u1f6e4_layer2u1f6e4_layer6u1f6e4_layer7u1f6e4_layer8u1f6e5_layer0u1f6e5_layer1u1f6e5_layer2u1f6e5_layer3u1f6e5_layer4u1f6e5_layer5u1f6e9_layer0u1f6e9_layer1u1f6e9_layer10u1f6e9_layer11u1f6e9_layer12u1f6e9_layer13u1f6e9_layer2u1f6e9_layer3u1f6e9_layer4u1f6e9_layer5u1f6e9_layer6u1f6e9_layer7u1f6e9_layer8u1f6e9_layer9u1f6eb_layer0u1f6eb_layer1u1f6eb_layer2u1f6eb_layer3u1f6eb_layer4u1f6eb_layer5u1f6eb_layer6u1f6eb_layer7u1f6eb_layer8u1f6ec_layer3u1f6ec_layer4u1f6ec_layer5u1f6ec_layer6u1f6ec_layer7u1f6ec_layer8u1f6f0_layer0u1f6f0_layer1u1f6f0_layer10u1f6f0_layer2u1f6f0_layer3u1f6f0_layer4u1f6f0_layer5u1f6f0_layer6u1f6f0_layer7u1f6f0_layer8u1f6f0_layer9u1f6f3_layer0u1f6f3_layer1u1f6f3_layer2u1f6f3_layer3u1f6f3_layer4u1f6f3_layer5u1f6f3_layer7u1f6f4_layer0u1f6f4_layer1u1f6f4_layer2u1f6f4_layer3u1f6f4_layer4u1f6f4_layer5u1f6f4_layer6u1f6f4_layer7u1f6f4_layer8u1f6f4_layer9u1f6f5_layer0u1f6f5_layer1u1f6f5_layer2u1f6f5_layer3u1f6f5_layer4u1f6f5_layer5u1f6f5_layer6u1f6f5_layer7u1f6f5_layer8u1f6f6_layer0u1f6f6_layer2u1f6f6_layer3u1f6f7_layer0u1f6f7_layer1u1f6f7_layer2u1f6f7_layer3u1f6f7_layer4u1f6f7_layer5u1f6f7_layer6u1f6f7_layer7u1f6f7_layer8u1f6f8_layer0u1f6f8_layer1u1f6f8_layer10u1f6f8_layer11u1f6f8_layer12u1f6f8_layer2u1f6f8_layer3u1f6f8_layer4u1f6f8_layer5u1f6f8_layer6u1f6f8_layer7u1f6f8_layer8u1f6f8_layer9u1f6f9_layer0u1f6f9_layer1u1f6f9_layer10u1f6f9_layer11u1f6f9_layer12u1f6f9_layer13u1f6f9_layer14u1f6f9_layer15u1f6f9_layer16u1f6f9_layer17u1f6f9_layer18u1f6f9_layer2u1f6f9_layer3u1f6f9_layer4u1f6f9_layer5u1f6f9_layer6u1f6f9_layer7u1f6f9_layer8u1f6f9_layer9u1f6fa_layer0u1f6fa_layer1u1f6fa_layer10u1f6fa_layer11u1f6fa_layer2u1f6fa_layer3u1f6fa_layer4u1f6fa_layer5u1f6fa_layer6u1f6fa_layer7u1f6fa_layer8u1f6fa_layer9u1f6fb_layer0u1f6fb_layer3u1f6fb_layer4u1f6fb_layer5u1f6fb_layer6u1f6fc_layer0u1f6fc_layer1u1f6fc_layer2u1f6fc_layer3u1f6fc_layer4u1f6fc_layer5u1f6fc_layer6u1f6fc_layer7u1f6fc_layer8u1f6fc_layer9u1f90c-1f3fb_layer0u1f90c-1f3fb_layer1u1f90c-1f3fb_layer2u1f90c-1f3fb_layer3u1f90c-1f3fb_layer4u1f90c-1f3fb_layer5u1f90c-1f3fb_layer6u1f90c-1f3fb_layer7u1f90c-1f3fb_layer8u1f90c-1f3fb_layer9u1f90c_1f3fbu1f90c_1f3fcu1f90c_1f3fdu1f90c_1f3feu1f90c_1f3ffu1f90f-1f3fb_layer0u1f90f-1f3fb_layer1u1f90f_1f3fbu1f90f_1f3fcu1f90f_1f3fdu1f90f_1f3feu1f90f_1f3ffu1f910_layer1u1f910_layer2u1f911_layer1u1f911_layer2u1f911_layer3u1f912_layer1u1f912_layer2u1f912_layer3u1f912_layer4u1f912_layer5u1f912_layer6u1f912_layer7u1f913_layer2u1f913_layer3u1f913_layer4u1f913_layer5u1f914_layer0u1f914_layer1u1f914_layer2u1f914_layer3u1f915_layer0u1f915_layer1u1f915_layer2u1f915_layer3u1f915_layer4u1f916_layer0u1f916_layer1u1f916_layer10u1f916_layer2u1f916_layer3u1f916_layer4u1f916_layer5u1f916_layer6u1f916_layer7u1f916_layer8u1f916_layer9u1f917_layer0u1f917_layer1u1f917_layer2u1f917_layer3u1f918-1f3fb_layer0u1f918-1f3fb_layer1u1f918-1f3fb_layer2u1f918-1f3fb_layer3u1f918_1f3fbu1f918_1f3fcu1f918_1f3fdu1f918_1f3feu1f918_1f3ffu1f919-1f3fb_layer0u1f919-1f3fb_layer1u1f919-1f3fb_layer2u1f919-1f3fb_layer3u1f919-1f3fb_layer4u1f919-1f3fb_layer5u1f919-1f3fb_layer6u1f919_1f3fbu1f919_1f3fcu1f919_1f3fdu1f919_1f3feu1f919_1f3ffu1f91a-1f3fb_layer0u1f91a-1f3fb_layer1u1f91a_1f3fbu1f91a_1f3fcu1f91a_1f3fdu1f91a_1f3feu1f91a_1f3ffu1f91b-1f3fb_layer0u1f91b-1f3fb_layer1u1f91b-1f3fb_layer2u1f91b-1f3fb_layer3u1f91b-1f3fb_layer4u1f91b_1f3fbu1f91b_1f3fcu1f91b_1f3fdu1f91b_1f3feu1f91b_1f3ffu1f91c-1f3fb_layer0u1f91c-1f3fb_layer1u1f91c-1f3fb_layer2u1f91c-1f3fb_layer3u1f91c-1f3fb_layer4u1f91c_1f3fbu1f91c_1f3fcu1f91c_1f3fdu1f91c_1f3feu1f91c_1f3ffu1f91d_layer0u1f91d_layer1u1f91d_layer2u1f91d_layer3u1f91d_layer4u1f91e-1f3fb_layer0u1f91e-1f3fb_layer1u1f91e-1f3fb_layer2u1f91e_1f3fbu1f91e_1f3fcu1f91e_1f3fdu1f91e_1f3feu1f91e_1f3ffu1f91f-1f3fb_layer0u1f91f-1f3fb_layer1u1f91f-1f3fb_layer2u1f91f-1f3fb_layer3u1f91f-1f3fb_layer4u1f91f_1f3fbu1f91f_1f3fcu1f91f_1f3fdu1f91f_1f3feu1f91f_1f3ffu1f920_layer0u1f920_layer1u1f920_layer2u1f920_layer3u1f921_layer0u1f921_layer1u1f921_layer10u1f921_layer2u1f921_layer4u1f921_layer5u1f921_layer6u1f921_layer7u1f921_layer8u1f921_layer9u1f922_layer0u1f922_layer1u1f922_layer2u1f923_layer0u1f923_layer1u1f923_layer2u1f923_layer3u1f923_layer4u1f924_layer1u1f924_layer2u1f925_layer0u1f925_layer1u1f925_layer2#u1f926-1f3fb-200d-2640-fe0f_layer10#u1f926-1f3fb-200d-2640-fe0f_layer11#u1f926-1f3fb-200d-2640-fe0f_layer12#u1f926-1f3fb-200d-2640-fe0f_layer13#u1f926-1f3fb-200d-2640-fe0f_layer14#u1f926-1f3fb-200d-2640-fe0f_layer15"u1f926-1f3fb-200d-2640-fe0f_layer2"u1f926-1f3fb-200d-2640-fe0f_layer4"u1f926-1f3fb-200d-2640-fe0f_layer5"u1f926-1f3fb-200d-2640-fe0f_layer6"u1f926-1f3fb-200d-2640-fe0f_layer7"u1f926-1f3fb-200d-2640-fe0f_layer8"u1f926-1f3fb-200d-2640-fe0f_layer9#u1f926-1f3fb-200d-2642-fe0f_layer10"u1f926-1f3fb-200d-2642-fe0f_layer7u1f926-1f3fb_layer4"u1f926-1f3fe-200d-2640-fe0f_layer4u1f926-1f3fe_layer4"u1f926-1f3ff-200d-2640-fe0f_layer7"u1f926-1f3ff-200d-2640-fe0f_layer9#u1f926-1f3ff-200d-2642-fe0f_layer10"u1f926-1f3ff-200d-2642-fe0f_layer7"u1f926-1f3ff-200d-2642-fe0f_layer9u1f926-1f3ff_layer15u1f926_1f3fbu1f926_1f3fb_200d_2640_fe0fu1f926_1f3fb_200d_2642_fe0fu1f926_1f3fcu1f926_1f3fc_200d_2640_fe0fu1f926_1f3fc_200d_2642_fe0fu1f926_1f3fdu1f926_1f3fd_200d_2640_fe0fu1f926_1f3fd_200d_2642_fe0fu1f926_1f3feu1f926_1f3fe_200d_2640_fe0fu1f926_1f3fe_200d_2642_fe0fu1f926_1f3ffu1f926_1f3ff_200d_2640_fe0fu1f926_1f3ff_200d_2642_fe0fu1f926_200d_2640_fe0fu1f926_200d_2642_fe0fu1f927_layer1u1f927_layer2u1f927_layer3u1f928_layer1u1f928_layer2u1f929_layer1u1f929_layer3u1f92a_layer0u1f92a_layer1u1f92a_layer2u1f92a_layer3u1f92a_layer4u1f92a_layer5u1f92a_layer6u1f92a_layer7u1f92b_layer0u1f92b_layer1u1f92b_layer2u1f92b_layer3u1f92c_layer1u1f92c_layer2u1f92c_layer3u1f92d_layer0u1f92d_layer1u1f92d_layer2u1f92e_layer1u1f92e_layer2u1f92e_layer3u1f92e_layer4u1f92e_layer5u1f92f_layer0u1f92f_layer1u1f92f_layer2u1f92f_layer3u1f92f_layer4u1f92f_layer5u1f92f_layer6u1f930-1f3fb_layer0u1f930-1f3fb_layer1u1f930-1f3fb_layer10u1f930-1f3fb_layer11u1f930-1f3fb_layer12u1f930-1f3fb_layer13u1f930-1f3fb_layer14u1f930-1f3fb_layer15u1f930-1f3fb_layer16u1f930-1f3fb_layer17u1f930-1f3fb_layer2u1f930-1f3fb_layer3u1f930-1f3fb_layer4u1f930-1f3fb_layer5u1f930-1f3fb_layer6u1f930-1f3fb_layer7u1f930-1f3fb_layer8u1f930-1f3fb_layer9u1f930-1f3ff_layer16u1f930_1f3fbu1f930_1f3fcu1f930_1f3fdu1f930_1f3feu1f930_1f3ffu1f931-1f3fb_layer0u1f931-1f3fb_layer1u1f931-1f3fb_layer10u1f931-1f3fb_layer11u1f931-1f3fb_layer12u1f931-1f3fb_layer13u1f931-1f3fb_layer2u1f931-1f3fb_layer3u1f931-1f3fb_layer4u1f931-1f3fb_layer5u1f931-1f3fb_layer6u1f931-1f3fb_layer7u1f931-1f3fb_layer8u1f931-1f3fb_layer9u1f931-1f3ff_layer8u1f931_1f3fbu1f931_1f3fcu1f931_1f3fdu1f931_1f3feu1f931_1f3ffu1f931_layer0u1f931_layer2u1f932-1f3fb_layer0u1f932-1f3fb_layer1u1f932-1f3fb_layer2u1f932-1f3fb_layer3u1f932-1f3fb_layer4u1f932-1f3fc_layer0u1f932-1f3fc_layer2u1f932-1f3fd_layer0u1f932-1f3fd_layer2u1f932-1f3fe_layer0u1f932-1f3fe_layer2u1f932-1f3ff_layer0u1f932-1f3ff_layer2u1f932_1f3fbu1f932_1f3fcu1f932_1f3fdu1f932_1f3feu1f932_1f3ffu1f932_layer0u1f932_layer2u1f933-1f3fb_layer0u1f933-1f3fb_layer1u1f933-1f3fb_layer10u1f933-1f3fb_layer11u1f933-1f3fb_layer12u1f933-1f3fb_layer13u1f933-1f3fb_layer2u1f933-1f3fb_layer3u1f933-1f3fb_layer4u1f933-1f3fb_layer5u1f933-1f3fb_layer6u1f933-1f3fb_layer7u1f933-1f3fb_layer8u1f933-1f3fb_layer9u1f933_1f3fbu1f933_1f3fcu1f933_1f3fdu1f933_1f3feu1f933_1f3ffu1f933_layer0u1f933_layer1u1f933_layer10u1f933_layer11u1f933_layer12u1f933_layer5u1f933_layer6u1f933_layer7u1f933_layer8u1f933_layer9u1f934-1f3fb_layer4u1f934-1f3fb_layer5u1f934_1f3fbu1f934_1f3fcu1f934_1f3fdu1f934_1f3feu1f934_1f3ff"u1f935-1f3fb-200d-2640-fe0f_layer0"u1f935-1f3fb-200d-2640-fe0f_layer1#u1f935-1f3fb-200d-2640-fe0f_layer10#u1f935-1f3fb-200d-2640-fe0f_layer11#u1f935-1f3fb-200d-2640-fe0f_layer12#u1f935-1f3fb-200d-2640-fe0f_layer13#u1f935-1f3fb-200d-2640-fe0f_layer14"u1f935-1f3fb-200d-2640-fe0f_layer2"u1f935-1f3fb-200d-2640-fe0f_layer3"u1f935-1f3fb-200d-2640-fe0f_layer4"u1f935-1f3fb-200d-2640-fe0f_layer5"u1f935-1f3fb-200d-2640-fe0f_layer6"u1f935-1f3fb-200d-2640-fe0f_layer7"u1f935-1f3fb-200d-2640-fe0f_layer8"u1f935-1f3fb-200d-2640-fe0f_layer9"u1f935-1f3fb-200d-2642-fe0f_layer1#u1f935-1f3fb-200d-2642-fe0f_layer10#u1f935-1f3fb-200d-2642-fe0f_layer11"u1f935-1f3fb-200d-2642-fe0f_layer2"u1f935-1f3fb-200d-2642-fe0f_layer3"u1f935-1f3fb-200d-2642-fe0f_layer4"u1f935-1f3fb-200d-2642-fe0f_layer5"u1f935-1f3fb-200d-2642-fe0f_layer7"u1f935-1f3fb-200d-2642-fe0f_layer8"u1f935-1f3fb-200d-2642-fe0f_layer9u1f935-1f3fb_layer0u1f935-1f3fb_layer10u1f935-1f3fb_layer11u1f935-1f3fb_layer8u1f935-1f3fb_layer9"u1f935-1f3fc-200d-2640-fe0f_layer0u1f935-1f3fc_layer9#u1f935-1f3ff-200d-2640-fe0f_layer13#u1f935-1f3ff-200d-2642-fe0f_layer11u1f935-1f3ff_layer12u1f935_1f3fbu1f935_1f3fb_200d_2640_fe0fu1f935_1f3fb_200d_2642_fe0fu1f935_1f3fcu1f935_1f3fc_200d_2640_fe0fu1f935_1f3fc_200d_2642_fe0fu1f935_1f3fdu1f935_1f3fd_200d_2640_fe0fu1f935_1f3fd_200d_2642_fe0fu1f935_1f3feu1f935_1f3fe_200d_2640_fe0fu1f935_1f3fe_200d_2642_fe0fu1f935_1f3ffu1f935_1f3ff_200d_2640_fe0fu1f935_1f3ff_200d_2642_fe0fu1f935_200d_2640_fe0fu1f935_200d_2642_fe0fu1f936_1f3fbu1f936_1f3fcu1f936_1f3fdu1f936_1f3feu1f936_1f3ff"u1f937-1f3fb-200d-2640-fe0f_layer1"u1f937-1f3fb-200d-2640-fe0f_layer2"u1f937-1f3fb-200d-2640-fe0f_layer3"u1f937-1f3fb-200d-2640-fe0f_layer4"u1f937-1f3fb-200d-2640-fe0f_layer5"u1f937-1f3fb-200d-2640-fe0f_layer6"u1f937-1f3fb-200d-2640-fe0f_layer8"u1f937-1f3fb-200d-2642-fe0f_layer5"u1f937-1f3fb-200d-2642-fe0f_layer8u1f937-1f3fb_layer2u1f937_1f3fbu1f937_1f3fb_200d_2640_fe0fu1f937_1f3fb_200d_2642_fe0fu1f937_1f3fcu1f937_1f3fc_200d_2640_fe0fu1f937_1f3fc_200d_2642_fe0fu1f937_1f3fdu1f937_1f3fd_200d_2640_fe0fu1f937_1f3fd_200d_2642_fe0fu1f937_1f3feu1f937_1f3fe_200d_2640_fe0fu1f937_1f3fe_200d_2642_fe0fu1f937_1f3ffu1f937_1f3ff_200d_2640_fe0fu1f937_1f3ff_200d_2642_fe0fu1f937_200d_2640_fe0fu1f937_200d_2642_fe0f"u1f938-1f3fb-200d-2640-fe0f_layer0"u1f938-1f3fb-200d-2640-fe0f_layer1#u1f938-1f3fb-200d-2640-fe0f_layer10#u1f938-1f3fb-200d-2640-fe0f_layer11#u1f938-1f3fb-200d-2640-fe0f_layer12#u1f938-1f3fb-200d-2640-fe0f_layer13#u1f938-1f3fb-200d-2640-fe0f_layer14"u1f938-1f3fb-200d-2640-fe0f_layer2"u1f938-1f3fb-200d-2640-fe0f_layer3"u1f938-1f3fb-200d-2640-fe0f_layer4"u1f938-1f3fb-200d-2640-fe0f_layer5"u1f938-1f3fb-200d-2640-fe0f_layer6"u1f938-1f3fb-200d-2640-fe0f_layer7"u1f938-1f3fb-200d-2640-fe0f_layer8"u1f938-1f3fb-200d-2640-fe0f_layer9#u1f938-1f3fb-200d-2642-fe0f_layer11#u1f938-1f3fb-200d-2642-fe0f_layer12"u1f938-1f3fb-200d-2642-fe0f_layer3"u1f938-1f3fb-200d-2642-fe0f_layer4"u1f938-1f3fb-200d-2642-fe0f_layer9u1f938-1f3fb_layer0u1f938-1f3fb_layer1u1f938-1f3fb_layer11u1f938-1f3fb_layer12u1f938-1f3fb_layer3u1f938-1f3fb_layer4u1f938-1f3fb_layer5u1f938-1f3fb_layer6u1f938-1f3fb_layer8u1f938-1f3fb_layer9u1f938_1f3fbu1f938_1f3fb_200d_2640_fe0fu1f938_1f3fb_200d_2642_fe0fu1f938_1f3fcu1f938_1f3fc_200d_2640_fe0fu1f938_1f3fc_200d_2642_fe0fu1f938_1f3fdu1f938_1f3fd_200d_2640_fe0fu1f938_1f3fd_200d_2642_fe0fu1f938_1f3feu1f938_1f3fe_200d_2640_fe0fu1f938_1f3fe_200d_2642_fe0fu1f938_1f3ffu1f938_1f3ff_200d_2640_fe0fu1f938_1f3ff_200d_2642_fe0fu1f938_200d_2640_fe0fu1f938_200d_2642_fe0f"u1f939-1f3fb-200d-2640-fe0f_layer0"u1f939-1f3fb-200d-2640-fe0f_layer1#u1f939-1f3fb-200d-2640-fe0f_layer10#u1f939-1f3fb-200d-2640-fe0f_layer11#u1f939-1f3fb-200d-2640-fe0f_layer12#u1f939-1f3fb-200d-2640-fe0f_layer13"u1f939-1f3fb-200d-2640-fe0f_layer2"u1f939-1f3fb-200d-2640-fe0f_layer3"u1f939-1f3fb-200d-2640-fe0f_layer4"u1f939-1f3fb-200d-2640-fe0f_layer5"u1f939-1f3fb-200d-2640-fe0f_layer6"u1f939-1f3fb-200d-2640-fe0f_layer7"u1f939-1f3fb-200d-2640-fe0f_layer8"u1f939-1f3fb-200d-2640-fe0f_layer9"u1f939-1f3fb-200d-2642-fe0f_layer1"u1f939-1f3fb-200d-2642-fe0f_layer2"u1f939-1f3fb-200d-2642-fe0f_layer3"u1f939-1f3fb-200d-2642-fe0f_layer4"u1f939-1f3fb-200d-2642-fe0f_layer5"u1f939-1f3fb-200d-2642-fe0f_layer6"u1f939-1f3fb-200d-2642-fe0f_layer8u1f939-1f3fb_layer1u1f939-1f3fb_layer11u1f939-1f3fb_layer12u1f939-1f3fb_layer2u1f939-1f3fb_layer3u1f939-1f3fb_layer4u1f939-1f3fb_layer5u1f939-1f3fb_layer6"u1f939-1f3fd-200d-2640-fe0f_layer0#u1f939-1f3fe-200d-2642-fe0f_layer11"u1f939-1f3fe-200d-2642-fe0f_layer2"u1f939-1f3fe-200d-2642-fe0f_layer3"u1f939-1f3ff-200d-2640-fe0f_layer7"u1f939-1f3ff-200d-2642-fe0f_layer6u1f939-1f3ff_layer6u1f939-200d-2640-fe0f_layer2u1f939-200d-2642-fe0f_layer2u1f939_1f3fbu1f939_1f3fb_200d_2640_fe0fu1f939_1f3fb_200d_2642_fe0fu1f939_1f3fcu1f939_1f3fc_200d_2640_fe0fu1f939_1f3fc_200d_2642_fe0fu1f939_1f3fdu1f939_1f3fd_200d_2640_fe0fu1f939_1f3fd_200d_2642_fe0fu1f939_1f3feu1f939_1f3fe_200d_2640_fe0fu1f939_1f3fe_200d_2642_fe0fu1f939_1f3ffu1f939_1f3ff_200d_2640_fe0fu1f939_1f3ff_200d_2642_fe0fu1f939_200d_2640_fe0fu1f939_200d_2642_fe0fu1f93a_layer0u1f93a_layer1u1f93a_layer2u1f93a_layer3u1f93a_layer4u1f93a_layer5u1f93a_layer6u1f93c-200d-2640-fe0f_layer0u1f93c-200d-2640-fe0f_layer1u1f93c-200d-2640-fe0f_layer10u1f93c-200d-2640-fe0f_layer11u1f93c-200d-2640-fe0f_layer12u1f93c-200d-2640-fe0f_layer13u1f93c-200d-2640-fe0f_layer14u1f93c-200d-2640-fe0f_layer15u1f93c-200d-2640-fe0f_layer16u1f93c-200d-2640-fe0f_layer17u1f93c-200d-2640-fe0f_layer18u1f93c-200d-2640-fe0f_layer19u1f93c-200d-2640-fe0f_layer2u1f93c-200d-2640-fe0f_layer20u1f93c-200d-2640-fe0f_layer21u1f93c-200d-2640-fe0f_layer3u1f93c-200d-2640-fe0f_layer4u1f93c-200d-2640-fe0f_layer5u1f93c-200d-2640-fe0f_layer6u1f93c-200d-2640-fe0f_layer7u1f93c-200d-2640-fe0f_layer8u1f93c-200d-2640-fe0f_layer9u1f93c-200d-2642-fe0f_layer11u1f93c-200d-2642-fe0f_layer12u1f93c-200d-2642-fe0f_layer14u1f93c-200d-2642-fe0f_layer16u1f93c-200d-2642-fe0f_layer18u1f93c-200d-2642-fe0f_layer19u1f93c-200d-2642-fe0f_layer20u1f93c-200d-2642-fe0f_layer7u1f93c-200d-2642-fe0f_layer8u1f93c-200d-2642-fe0f_layer9u1f93c_200d_2640_fe0fu1f93c_200d_2642_fe0fu1f93c_layer12u1f93c_layer13u1f93c_layer14u1f93c_layer15u1f93c_layer2u1f93c_layer20u1f93c_layer5u1f93c_layer6u1f93c_layer7u1f93c_layer8u1f93c_layer9"u1f93d-1f3fb-200d-2640-fe0f_layer0"u1f93d-1f3fb-200d-2640-fe0f_layer1"u1f93d-1f3fb-200d-2640-fe0f_layer2"u1f93d-1f3fb-200d-2640-fe0f_layer3"u1f93d-1f3fb-200d-2640-fe0f_layer4"u1f93d-1f3fb-200d-2642-fe0f_layer0"u1f93d-1f3fb-200d-2642-fe0f_layer1u1f93d-1f3fb_layer0u1f93d-1f3fb_layer1u1f93d-1f3fb_layer5u1f93d_1f3fbu1f93d_1f3fb_200d_2640_fe0fu1f93d_1f3fb_200d_2642_fe0fu1f93d_1f3fcu1f93d_1f3fc_200d_2640_fe0fu1f93d_1f3fc_200d_2642_fe0fu1f93d_1f3fdu1f93d_1f3fd_200d_2640_fe0fu1f93d_1f3fd_200d_2642_fe0fu1f93d_1f3feu1f93d_1f3fe_200d_2640_fe0fu1f93d_1f3fe_200d_2642_fe0fu1f93d_1f3ffu1f93d_1f3ff_200d_2640_fe0fu1f93d_1f3ff_200d_2642_fe0fu1f93d_200d_2640_fe0fu1f93d_200d_2642_fe0f"u1f93e-1f3fb-200d-2640-fe0f_layer0"u1f93e-1f3fb-200d-2640-fe0f_layer1#u1f93e-1f3fb-200d-2640-fe0f_layer10"u1f93e-1f3fb-200d-2640-fe0f_layer2"u1f93e-1f3fb-200d-2640-fe0f_layer3"u1f93e-1f3fb-200d-2640-fe0f_layer4"u1f93e-1f3fb-200d-2640-fe0f_layer5"u1f93e-1f3fb-200d-2640-fe0f_layer6"u1f93e-1f3fb-200d-2640-fe0f_layer7"u1f93e-1f3fb-200d-2640-fe0f_layer8"u1f93e-1f3fb-200d-2640-fe0f_layer9"u1f93e-1f3fb-200d-2642-fe0f_layer0"u1f93e-1f3fb-200d-2642-fe0f_layer1#u1f93e-1f3fb-200d-2642-fe0f_layer10"u1f93e-1f3fb-200d-2642-fe0f_layer2"u1f93e-1f3fb-200d-2642-fe0f_layer3"u1f93e-1f3fb-200d-2642-fe0f_layer4"u1f93e-1f3fb-200d-2642-fe0f_layer5"u1f93e-1f3fb-200d-2642-fe0f_layer6"u1f93e-1f3fb-200d-2642-fe0f_layer7"u1f93e-1f3fb-200d-2642-fe0f_layer8u1f93e-1f3fb_layer0u1f93e-1f3fb_layer1u1f93e-1f3fb_layer2u1f93e-1f3fb_layer3u1f93e-1f3fb_layer6u1f93e-1f3fb_layer7u1f93e-1f3fb_layer8u1f93e-1f3fb_layer9u1f93e_1f3fbu1f93e_1f3fb_200d_2640_fe0fu1f93e_1f3fb_200d_2642_fe0fu1f93e_1f3fcu1f93e_1f3fc_200d_2640_fe0fu1f93e_1f3fc_200d_2642_fe0fu1f93e_1f3fdu1f93e_1f3fd_200d_2640_fe0fu1f93e_1f3fd_200d_2642_fe0fu1f93e_1f3feu1f93e_1f3fe_200d_2640_fe0fu1f93e_1f3fe_200d_2642_fe0fu1f93e_1f3ffu1f93e_1f3ff_200d_2640_fe0fu1f93e_1f3ff_200d_2642_fe0fu1f93e_200d_2640_fe0fu1f93e_200d_2642_fe0fu1f93f_layer0u1f93f_layer1u1f93f_layer3u1f93f_layer4u1f93f_layer5u1f93f_layer6u1f93f_layer7u1f93f_layer8u1f93f_layer9u1f940_layer0u1f940_layer1u1f940_layer2u1f940_layer3u1f940_layer4u1f940_layer5u1f940_layer6u1f940_layer7u1f941_layer0u1f941_layer1u1f941_layer10u1f941_layer11u1f941_layer2u1f941_layer3u1f941_layer4u1f941_layer5u1f941_layer6u1f941_layer7u1f941_layer8u1f941_layer9u1f942_layer0u1f942_layer1u1f942_layer2u1f942_layer3u1f943_layer0u1f943_layer1u1f943_layer10u1f943_layer2u1f943_layer3u1f943_layer4u1f943_layer5u1f943_layer6u1f943_layer7u1f943_layer8u1f943_layer9u1f944_layer0u1f945_layer0u1f945_layer1u1f945_layer2u1f945_layer3u1f947_layer2u1f947_layer3u1f948_layer3u1f949_layer3u1f94a_layer0u1f94a_layer1u1f94a_layer2u1f94a_layer3u1f94a_layer4u1f94b_layer0u1f94b_layer1u1f94b_layer2u1f94b_layer3u1f94b_layer4u1f94b_layer5u1f94b_layer6u1f94b_layer7u1f94b_layer8u1f94c_layer0u1f94c_layer1u1f94c_layer2u1f94d_layer0u1f94d_layer1u1f94d_layer2u1f94d_layer3u1f94d_layer4u1f94d_layer5u1f94d_layer6u1f94e_layer1u1f94e_layer2u1f94f_layer0u1f94f_layer1u1f94f_layer2u1f94f_layer3u1f94f_layer4u1f94f_layer5u1f950_layer0u1f950_layer1u1f950_layer2u1f951_layer0u1f951_layer1u1f951_layer2u1f951_layer3u1f951_layer4u1f951_layer5u1f952_layer0u1f952_layer1u1f952_layer2u1f952_layer3u1f952_layer4u1f952_layer5u1f952_layer6u1f952_layer7u1f952_layer8u1f953_layer0u1f953_layer1u1f953_layer2u1f953_layer3u1f953_layer4u1f953_layer5u1f954_layer0u1f954_layer1u1f955_layer0u1f955_layer1u1f955_layer2u1f956_layer0u1f956_layer1u1f956_layer2u1f957_layer0u1f957_layer10u1f957_layer11u1f957_layer2u1f957_layer3u1f957_layer4u1f957_layer5u1f957_layer6u1f957_layer7u1f957_layer8u1f957_layer9u1f958_layer0u1f958_layer2u1f958_layer3u1f958_layer4u1f958_layer5u1f958_layer6u1f959_layer0u1f959_layer1u1f959_layer2u1f959_layer3u1f959_layer4u1f959_layer5u1f959_layer6u1f959_layer7u1f959_layer8u1f959_layer9u1f95a_layer0u1f95a_layer1u1f95b_layer0u1f95b_layer1u1f95b_layer2u1f95b_layer3u1f95b_layer4u1f95b_layer5u1f95b_layer6u1f95b_layer7u1f95b_layer8u1f95c_layer0u1f95c_layer1u1f95c_layer2u1f95d_layer0u1f95d_layer1u1f95d_layer2u1f95d_layer3u1f95d_layer4u1f95d_layer5u1f95d_layer6u1f95d_layer7u1f95d_layer8u1f95e_layer0u1f95e_layer1u1f95e_layer10u1f95e_layer11u1f95e_layer12u1f95e_layer13u1f95e_layer2u1f95e_layer3u1f95e_layer4u1f95e_layer5u1f95e_layer6u1f95e_layer7u1f95e_layer8u1f95e_layer9u1f95f_layer0u1f95f_layer1u1f95f_layer10u1f95f_layer11u1f95f_layer12u1f95f_layer2u1f95f_layer3u1f95f_layer4u1f95f_layer5u1f95f_layer6u1f95f_layer7u1f95f_layer8u1f95f_layer9u1f960_layer0u1f960_layer1u1f960_layer2u1f960_layer3u1f960_layer4u1f960_layer5u1f960_layer6u1f961_layer0u1f961_layer1u1f961_layer2u1f961_layer3u1f961_layer4u1f962_layer0u1f962_layer1u1f962_layer2u1f962_layer3u1f963_layer0u1f963_layer1u1f963_layer2u1f963_layer3u1f963_layer4u1f964_layer0u1f964_layer1u1f964_layer10u1f964_layer11u1f964_layer12u1f964_layer13u1f964_layer2u1f964_layer3u1f964_layer4u1f964_layer5u1f964_layer6u1f964_layer7u1f964_layer8u1f964_layer9u1f965_layer0u1f965_layer1u1f965_layer10u1f965_layer2u1f965_layer3u1f965_layer4u1f965_layer5u1f965_layer6u1f965_layer7u1f965_layer8u1f965_layer9u1f966_layer0u1f966_layer1u1f966_layer10u1f966_layer11u1f966_layer12u1f966_layer2u1f966_layer3u1f966_layer4u1f966_layer5u1f966_layer6u1f966_layer7u1f966_layer8u1f966_layer9u1f967_layer0u1f967_layer1u1f967_layer10u1f967_layer2u1f967_layer3u1f967_layer4u1f967_layer5u1f967_layer6u1f967_layer7u1f967_layer8u1f967_layer9u1f968_layer0u1f968_layer1u1f968_layer2u1f969_layer0u1f969_layer1u1f969_layer2u1f969_layer3u1f969_layer4u1f969_layer5u1f969_layer6u1f96a_layer0u1f96a_layer1u1f96a_layer2u1f96a_layer3u1f96a_layer4u1f96a_layer5u1f96a_layer6u1f96a_layer7u1f96a_layer8u1f96b_layer0u1f96b_layer1u1f96b_layer10u1f96b_layer11u1f96b_layer12u1f96b_layer13u1f96b_layer14u1f96b_layer15u1f96b_layer16u1f96b_layer17u1f96b_layer2u1f96b_layer3u1f96b_layer4u1f96b_layer5u1f96b_layer6u1f96b_layer7u1f96b_layer8u1f96b_layer9u1f96c_layer0u1f96c_layer1u1f96c_layer2u1f96c_layer3u1f96c_layer4u1f96d_layer0u1f96d_layer1u1f96d_layer2u1f96d_layer3u1f96e_layer0u1f96e_layer1u1f96e_layer2u1f96e_layer3u1f96e_layer4u1f96e_layer5u1f96e_layer6u1f96e_layer7u1f96e_layer8u1f96f_layer0u1f96f_layer1u1f96f_layer2u1f96f_layer3u1f96f_layer4u1f96f_layer5u1f96f_layer6u1f96f_layer7u1f96f_layer8u1f970_layer1u1f970_layer2u1f970_layer3u1f971_layer1u1f971_layer2u1f972_layer1u1f972_layer2u1f973_layer0u1f973_layer1u1f973_layer10u1f973_layer11u1f973_layer12u1f973_layer2u1f973_layer3u1f973_layer4u1f973_layer5u1f973_layer6u1f973_layer7u1f973_layer8u1f973_layer9u1f974_layer1u1f974_layer2u1f974_layer3u1f975_layer1u1f975_layer3u1f975_layer4u1f975_layer5u1f976_layer1u1f976_layer2u1f976_layer3u1f976_layer4u1f976_layer5u1f977-1f3fb_layer0u1f977-1f3fb_layer1u1f977-1f3fb_layer10u1f977-1f3fb_layer11u1f977-1f3fb_layer12u1f977-1f3fb_layer13u1f977-1f3fb_layer14u1f977-1f3fb_layer2u1f977-1f3fb_layer3u1f977-1f3fb_layer4u1f977-1f3fb_layer5u1f977-1f3fb_layer6u1f977-1f3fb_layer8u1f977-1f3fb_layer9u1f977_1f3fbu1f977_1f3fcu1f977_1f3fdu1f977_1f3feu1f977_1f3ffu1f978_layer1u1f978_layer2u1f978_layer3u1f978_layer4u1f978_layer5u1f978_layer7u1f97a_layer1u1f97a_layer2u1f97a_layer3u1f97a_layer4u1f97a_layer5u1f97a_layer6u1f97a_layer7u1f97a_layer8u1f97b_layer0u1f97b_layer1u1f97b_layer10u1f97b_layer11u1f97b_layer12u1f97b_layer13u1f97b_layer14u1f97b_layer2u1f97b_layer3u1f97b_layer4u1f97b_layer5u1f97b_layer6u1f97b_layer7u1f97b_layer8u1f97b_layer9u1f97c_layer0u1f97c_layer1u1f97c_layer2u1f97c_layer3u1f97c_layer4u1f97c_layer5u1f97c_layer6u1f97c_layer7u1f97c_layer8u1f97d_layer0u1f97d_layer1u1f97d_layer2u1f97d_layer3u1f97d_layer4u1f97d_layer5u1f97d_layer6u1f97d_layer7u1f97e_layer0u1f97e_layer1u1f97e_layer2u1f97e_layer3u1f97e_layer4u1f97e_layer5u1f97f_layer0u1f97f_layer1u1f97f_layer2u1f980_layer0u1f980_layer1u1f980_layer10u1f980_layer11u1f980_layer12u1f980_layer13u1f980_layer14u1f980_layer2u1f980_layer3u1f980_layer4u1f980_layer5u1f980_layer6u1f980_layer7u1f980_layer8u1f980_layer9u1f981_layer0u1f981_layer1u1f981_layer10u1f981_layer2u1f981_layer3u1f981_layer4u1f981_layer5u1f981_layer6u1f981_layer7u1f981_layer8u1f981_layer9u1f982_layer0u1f982_layer1u1f982_layer2u1f982_layer3u1f982_layer4u1f982_layer5u1f982_layer6u1f982_layer7u1f983_layer0u1f983_layer1u1f983_layer2u1f983_layer3u1f983_layer4u1f983_layer5u1f983_layer6u1f984_layer0u1f984_layer1u1f984_layer2u1f984_layer3u1f984_layer4u1f984_layer5u1f984_layer6u1f984_layer7u1f985_layer0u1f985_layer1u1f985_layer2u1f985_layer3u1f986_layer0u1f986_layer1u1f986_layer2u1f986_layer3u1f986_layer4u1f986_layer5u1f986_layer6u1f986_layer7u1f987_layer0u1f987_layer2u1f987_layer3u1f987_layer4u1f987_layer5u1f987_layer6u1f987_layer7u1f987_layer8u1f987_layer9u1f988_layer0u1f988_layer1u1f988_layer2u1f988_layer3u1f988_layer4u1f988_layer5u1f989_layer0u1f989_layer1u1f989_layer10u1f989_layer2u1f989_layer3u1f989_layer4u1f989_layer5u1f989_layer6u1f989_layer7u1f989_layer8u1f989_layer9u1f98a_layer0u1f98a_layer1u1f98a_layer2u1f98a_layer3u1f98a_layer4u1f98b_layer0u1f98b_layer1u1f98b_layer2u1f98b_layer3u1f98b_layer4u1f98b_layer5u1f98b_layer6u1f98b_layer7u1f98b_layer8u1f98b_layer9u1f98c_layer0u1f98c_layer1u1f98c_layer2u1f98c_layer3u1f98c_layer4u1f98c_layer5u1f98d_layer0u1f98d_layer1u1f98d_layer2u1f98d_layer3u1f98d_layer4u1f98d_layer5u1f98e_layer0u1f98e_layer1u1f98e_layer2u1f98e_layer3u1f98e_layer4u1f98f_layer0u1f98f_layer1u1f98f_layer2u1f98f_layer3u1f98f_layer4u1f98f_layer5u1f98f_layer6u1f98f_layer7u1f990_layer0u1f990_layer1u1f990_layer2u1f990_layer3u1f990_layer4u1f991_layer0u1f991_layer1u1f991_layer2u1f991_layer3u1f991_layer4u1f991_layer5u1f991_layer6u1f991_layer7u1f992_layer0u1f992_layer1u1f992_layer2u1f992_layer3u1f992_layer4u1f992_layer5u1f993_layer2u1f993_layer3u1f993_layer4u1f993_layer5u1f993_layer6u1f993_layer7u1f993_layer8u1f994_layer0u1f994_layer1u1f994_layer2u1f994_layer3u1f994_layer4u1f994_layer5u1f994_layer6u1f994_layer7u1f994_layer8u1f995_layer0u1f995_layer1u1f995_layer2u1f995_layer3u1f996_layer0u1f996_layer1u1f996_layer10u1f996_layer2u1f996_layer3u1f996_layer4u1f996_layer5u1f996_layer6u1f996_layer7u1f996_layer8u1f996_layer9u1f997_layer0u1f997_layer1u1f997_layer2u1f997_layer3u1f997_layer4u1f997_layer5u1f997_layer6u1f998_layer0u1f998_layer1u1f998_layer2u1f998_layer3u1f998_layer4u1f998_layer5u1f999_layer0u1f999_layer1u1f999_layer2u1f999_layer3u1f999_layer4u1f99a_layer0u1f99a_layer1u1f99a_layer10u1f99a_layer11u1f99a_layer12u1f99a_layer2u1f99a_layer3u1f99a_layer4u1f99a_layer5u1f99a_layer6u1f99a_layer7u1f99a_layer8u1f99a_layer9u1f99b_layer0u1f99b_layer1u1f99b_layer2u1f99b_layer3u1f99b_layer4u1f99b_layer5u1f99b_layer6u1f99c_layer0u1f99c_layer1u1f99c_layer10u1f99c_layer2u1f99c_layer3u1f99c_layer4u1f99c_layer5u1f99c_layer6u1f99c_layer7u1f99c_layer8u1f99c_layer9u1f99d_layer0u1f99d_layer1u1f99d_layer10u1f99d_layer11u1f99d_layer12u1f99d_layer2u1f99d_layer3u1f99d_layer4u1f99d_layer5u1f99d_layer6u1f99d_layer7u1f99d_layer8u1f99d_layer9u1f99e_layer0u1f99e_layer1u1f99e_layer10u1f99e_layer11u1f99e_layer12u1f99e_layer13u1f99e_layer14u1f99e_layer15u1f99e_layer16u1f99e_layer17u1f99e_layer18u1f99e_layer19u1f99e_layer2u1f99e_layer20u1f99e_layer21u1f99e_layer22u1f99e_layer23u1f99e_layer24u1f99e_layer25u1f99e_layer3u1f99e_layer4u1f99e_layer5u1f99e_layer6u1f99e_layer7u1f99e_layer8u1f99e_layer9u1f99f_layer0u1f99f_layer1u1f99f_layer10u1f99f_layer2u1f99f_layer3u1f99f_layer4u1f99f_layer5u1f99f_layer6u1f99f_layer7u1f99f_layer8u1f99f_layer9u1f9a0_layer0u1f9a0_layer1u1f9a0_layer10u1f9a0_layer2u1f9a0_layer3u1f9a0_layer4u1f9a0_layer5u1f9a0_layer6u1f9a0_layer7u1f9a0_layer8u1f9a0_layer9u1f9a1_layer0u1f9a1_layer1u1f9a1_layer2u1f9a2_layer0u1f9a2_layer1u1f9a2_layer2u1f9a2_layer3u1f9a2_layer4u1f9a2_layer5u1f9a3_layer0u1f9a3_layer1u1f9a3_layer2u1f9a3_layer3u1f9a3_layer4u1f9a3_layer5u1f9a3_layer6u1f9a4_layer0u1f9a4_layer1u1f9a4_layer10u1f9a4_layer11u1f9a4_layer12u1f9a4_layer13u1f9a4_layer2u1f9a4_layer3u1f9a4_layer4u1f9a4_layer5u1f9a4_layer6u1f9a4_layer7u1f9a4_layer8u1f9a4_layer9u1f9a5_layer0u1f9a5_layer1u1f9a5_layer2u1f9a5_layer3u1f9a5_layer4u1f9a5_layer5u1f9a5_layer6u1f9a5_layer7u1f9a5_layer8u1f9a6_layer0u1f9a6_layer1u1f9a6_layer10u1f9a6_layer11u1f9a6_layer12u1f9a6_layer13u1f9a6_layer2u1f9a6_layer3u1f9a6_layer4u1f9a6_layer5u1f9a6_layer6u1f9a6_layer7u1f9a6_layer8u1f9a6_layer9u1f9a7_layer0u1f9a7_layer1u1f9a7_layer2u1f9a7_layer3u1f9a7_layer4u1f9a7_layer5u1f9a7_layer6u1f9a7_layer7u1f9a7_layer8u1f9a8_layer0u1f9a8_layer1u1f9a8_layer2u1f9a8_layer3u1f9a9_layer0u1f9a9_layer1u1f9a9_layer10u1f9a9_layer2u1f9a9_layer3u1f9a9_layer4u1f9a9_layer5u1f9a9_layer6u1f9a9_layer7u1f9a9_layer8u1f9a9_layer9u1f9aa_layer0u1f9aa_layer1u1f9aa_layer2u1f9aa_layer3u1f9aa_layer4u1f9aa_layer5u1f9aa_layer6u1f9aa_layer7u1f9aa_layer8u1f9ab_layer0u1f9ab_layer1u1f9ab_layer2u1f9ab_layer3u1f9ab_layer4u1f9ab_layer5u1f9ab_layer6u1f9ab_layer7u1f9ab_layer8u1f9ab_layer9u1f9ac_layer0u1f9ac_layer1u1f9ac_layer2u1f9ac_layer3u1f9ac_layer4u1f9ad_layer0u1f9ad_layer1u1f9ad_layer10u1f9ad_layer11u1f9ad_layer2u1f9ad_layer3u1f9ad_layer4u1f9ad_layer5u1f9ad_layer6u1f9ad_layer7u1f9ad_layer8u1f9ad_layer9u1f9ae_layer0u1f9ae_layer10u1f9ae_layer11u1f9ae_layer2u1f9ae_layer6u1f9ae_layer9u1f9af_layer0u1f9af_layer1u1f9af_layer2u1f9af_layer3u1f9b0_layer0u1f9b0_layer1u1f9b1_layer1u1f9b2_layer0u1f9b4_layer0u1f9b4_layer1u1f9b4_layer2u1f9b5-1f3fb_layer0u1f9b5-1f3fb_layer1u1f9b5_1f3fbu1f9b5_1f3fcu1f9b5_1f3fdu1f9b5_1f3feu1f9b5_1f3ffu1f9b6-1f3fb_layer0u1f9b6-1f3fb_layer1u1f9b6_1f3fbu1f9b6_1f3fcu1f9b6_1f3fdu1f9b6_1f3feu1f9b6_1f3ffu1f9b7_layer0u1f9b7_layer1"u1f9b8-1f3fb-200d-2640-fe0f_layer0"u1f9b8-1f3fb-200d-2640-fe0f_layer1#u1f9b8-1f3fb-200d-2640-fe0f_layer10"u1f9b8-1f3fb-200d-2640-fe0f_layer2"u1f9b8-1f3fb-200d-2640-fe0f_layer3"u1f9b8-1f3fb-200d-2640-fe0f_layer4"u1f9b8-1f3fb-200d-2640-fe0f_layer5"u1f9b8-1f3fb-200d-2640-fe0f_layer7"u1f9b8-1f3fb-200d-2640-fe0f_layer8"u1f9b8-1f3fb-200d-2640-fe0f_layer9"u1f9b8-1f3fb-200d-2642-fe0f_layer0"u1f9b8-1f3fb-200d-2642-fe0f_layer1#u1f9b8-1f3fb-200d-2642-fe0f_layer10"u1f9b8-1f3fb-200d-2642-fe0f_layer3"u1f9b8-1f3fb-200d-2642-fe0f_layer4"u1f9b8-1f3fb-200d-2642-fe0f_layer5"u1f9b8-1f3fb-200d-2642-fe0f_layer6"u1f9b8-1f3fb-200d-2642-fe0f_layer7"u1f9b8-1f3fb-200d-2642-fe0f_layer8u1f9b8-1f3fb_layer0u1f9b8-1f3fb_layer1u1f9b8-1f3fb_layer11u1f9b8-1f3fb_layer12u1f9b8-1f3fb_layer2u1f9b8-1f3fb_layer3u1f9b8-1f3fb_layer5u1f9b8-1f3fb_layer6u1f9b8_1f3fbu1f9b8_1f3fb_200d_2640_fe0fu1f9b8_1f3fb_200d_2642_fe0fu1f9b8_1f3fcu1f9b8_1f3fc_200d_2640_fe0fu1f9b8_1f3fc_200d_2642_fe0fu1f9b8_1f3fdu1f9b8_1f3fd_200d_2640_fe0fu1f9b8_1f3fd_200d_2642_fe0fu1f9b8_1f3feu1f9b8_1f3fe_200d_2640_fe0fu1f9b8_1f3fe_200d_2642_fe0fu1f9b8_1f3ffu1f9b8_1f3ff_200d_2640_fe0fu1f9b8_1f3ff_200d_2642_fe0fu1f9b8_200d_2640_fe0fu1f9b8_200d_2642_fe0f"u1f9b9-1f3fb-200d-2640-fe0f_layer0"u1f9b9-1f3fb-200d-2640-fe0f_layer1#u1f9b9-1f3fb-200d-2640-fe0f_layer10"u1f9b9-1f3fb-200d-2640-fe0f_layer2"u1f9b9-1f3fb-200d-2640-fe0f_layer6"u1f9b9-1f3fb-200d-2640-fe0f_layer7"u1f9b9-1f3fb-200d-2640-fe0f_layer8"u1f9b9-1f3fb-200d-2640-fe0f_layer9"u1f9b9-1f3fb-200d-2642-fe0f_layer0#u1f9b9-1f3fb-200d-2642-fe0f_layer10"u1f9b9-1f3fb-200d-2642-fe0f_layer3"u1f9b9-1f3fb-200d-2642-fe0f_layer6"u1f9b9-1f3fb-200d-2642-fe0f_layer7"u1f9b9-1f3fb-200d-2642-fe0f_layer8"u1f9b9-1f3fb-200d-2642-fe0f_layer9u1f9b9-1f3fb_layer0u1f9b9-1f3fb_layer1u1f9b9-1f3fb_layer10u1f9b9-1f3fb_layer5u1f9b9-1f3fb_layer7u1f9b9-1f3fb_layer8"u1f9b9-1f3fc-200d-2640-fe0f_layer3u1f9b9_1f3fbu1f9b9_1f3fb_200d_2640_fe0fu1f9b9_1f3fb_200d_2642_fe0fu1f9b9_1f3fcu1f9b9_1f3fc_200d_2640_fe0fu1f9b9_1f3fc_200d_2642_fe0fu1f9b9_1f3fdu1f9b9_1f3fd_200d_2640_fe0fu1f9b9_1f3fd_200d_2642_fe0fu1f9b9_1f3feu1f9b9_1f3fe_200d_2640_fe0fu1f9b9_1f3fe_200d_2642_fe0fu1f9b9_1f3ffu1f9b9_1f3ff_200d_2640_fe0fu1f9b9_1f3ff_200d_2642_fe0fu1f9b9_200d_2640_fe0fu1f9b9_200d_2642_fe0fu1f9ba_layer0u1f9ba_layer1u1f9ba_layer2u1f9ba_layer3u1f9ba_layer4u1f9bb-1f3fb_layer0u1f9bb-1f3fb_layer1u1f9bb-1f3fb_layer2u1f9bb-1f3fb_layer3u1f9bb-1f3fb_layer4u1f9bb-1f3fb_layer5u1f9bb-1f3fb_layer6u1f9bb_1f3fbu1f9bb_1f3fcu1f9bb_1f3fdu1f9bb_1f3feu1f9bb_1f3ffu1f9bc_layer0u1f9bc_layer1u1f9bc_layer10u1f9bc_layer11u1f9bc_layer12u1f9bc_layer13u1f9bc_layer14u1f9bc_layer15u1f9bc_layer16u1f9bc_layer17u1f9bc_layer2u1f9bc_layer3u1f9bc_layer4u1f9bc_layer5u1f9bc_layer6u1f9bc_layer7u1f9bc_layer8u1f9bc_layer9u1f9bd_layer0u1f9bd_layer1u1f9bd_layer10u1f9bd_layer11u1f9bd_layer12u1f9bd_layer13u1f9bd_layer14u1f9bd_layer15u1f9bd_layer2u1f9bd_layer3u1f9bd_layer4u1f9bd_layer5u1f9bd_layer6u1f9bd_layer7u1f9bd_layer8u1f9bd_layer9u1f9be_layer0u1f9be_layer1u1f9be_layer2u1f9be_layer3u1f9be_layer4u1f9be_layer5u1f9be_layer6u1f9be_layer7u1f9bf_layer0u1f9bf_layer1u1f9bf_layer2u1f9bf_layer3u1f9bf_layer4u1f9bf_layer5u1f9bf_layer6u1f9bf_layer7u1f9bf_layer8u1f9bf_layer9u1f9c0_layer0u1f9c0_layer1u1f9c0_layer2u1f9c0_layer3u1f9c1_layer0u1f9c1_layer1u1f9c1_layer10u1f9c1_layer11u1f9c1_layer2u1f9c1_layer3u1f9c1_layer4u1f9c1_layer5u1f9c1_layer6u1f9c1_layer7u1f9c1_layer8u1f9c1_layer9u1f9c2_layer0u1f9c2_layer1u1f9c2_layer2u1f9c2_layer3u1f9c2_layer4u1f9c3_layer0u1f9c3_layer1u1f9c3_layer2u1f9c3_layer3u1f9c3_layer4u1f9c3_layer5u1f9c3_layer6u1f9c3_layer7u1f9c3_layer8u1f9c3_layer9u1f9c4_layer0u1f9c4_layer1u1f9c4_layer2u1f9c5_layer0u1f9c5_layer1u1f9c5_layer2u1f9c5_layer3u1f9c5_layer4u1f9c6_layer0u1f9c6_layer1u1f9c6_layer10u1f9c6_layer2u1f9c6_layer3u1f9c6_layer4u1f9c6_layer5u1f9c6_layer6u1f9c6_layer7u1f9c6_layer8u1f9c6_layer9u1f9c7_layer2u1f9c7_layer3u1f9c7_layer4u1f9c7_layer5u1f9c7_layer6u1f9c7_layer7u1f9c7_layer8u1f9c8_layer0u1f9c8_layer1u1f9c8_layer2u1f9c8_layer3u1f9c8_layer4u1f9c8_layer5u1f9c8_layer6u1f9c8_layer7u1f9c9_layer0u1f9c9_layer1u1f9c9_layer10u1f9c9_layer2u1f9c9_layer3u1f9c9_layer4u1f9c9_layer5u1f9c9_layer6u1f9c9_layer7u1f9c9_layer8u1f9c9_layer9u1f9ca_layer0u1f9ca_layer1u1f9ca_layer2u1f9ca_layer3u1f9ca_layer4u1f9ca_layer5u1f9ca_layer6u1f9ca_layer7u1f9cb_layer0u1f9cb_layer1u1f9cb_layer10u1f9cb_layer11u1f9cb_layer12u1f9cb_layer13u1f9cb_layer2u1f9cb_layer3u1f9cb_layer4u1f9cb_layer5u1f9cb_layer6u1f9cb_layer7u1f9cb_layer8u1f9cb_layer9"u1f9cd-1f3fb-200d-2640-fe0f_layer0"u1f9cd-1f3fb-200d-2640-fe0f_layer1#u1f9cd-1f3fb-200d-2640-fe0f_layer10#u1f9cd-1f3fb-200d-2640-fe0f_layer11#u1f9cd-1f3fb-200d-2640-fe0f_layer12"u1f9cd-1f3fb-200d-2640-fe0f_layer2"u1f9cd-1f3fb-200d-2640-fe0f_layer3"u1f9cd-1f3fb-200d-2640-fe0f_layer4"u1f9cd-1f3fb-200d-2640-fe0f_layer5"u1f9cd-1f3fb-200d-2640-fe0f_layer6"u1f9cd-1f3fb-200d-2640-fe0f_layer7"u1f9cd-1f3fb-200d-2640-fe0f_layer8"u1f9cd-1f3fb-200d-2640-fe0f_layer9"u1f9cd-1f3fb-200d-2642-fe0f_layer0"u1f9cd-1f3fb-200d-2642-fe0f_layer1"u1f9cd-1f3fb-200d-2642-fe0f_layer2"u1f9cd-1f3fb-200d-2642-fe0f_layer3"u1f9cd-1f3fb-200d-2642-fe0f_layer4"u1f9cd-1f3fb-200d-2642-fe0f_layer5"u1f9cd-1f3fb-200d-2642-fe0f_layer6"u1f9cd-1f3fb-200d-2642-fe0f_layer7"u1f9cd-1f3fb-200d-2642-fe0f_layer8"u1f9cd-1f3fb-200d-2642-fe0f_layer9u1f9cd-1f3fb_layer0u1f9cd-1f3fb_layer1u1f9cd-1f3fb_layer2u1f9cd-1f3fb_layer3u1f9cd-1f3fb_layer4u1f9cd-1f3fb_layer5u1f9cd-1f3fb_layer6u1f9cd-1f3fb_layer7u1f9cd-1f3fb_layer8#u1f9cd-1f3fc-200d-2640-fe0f_layer13"u1f9cd-1f3fc-200d-2640-fe0f_layer9#u1f9cd-1f3fc-200d-2642-fe0f_layer10"u1f9cd-1f3fc-200d-2642-fe0f_layer7u1f9cd-1f3fc_layer3u1f9cd-1f3fc_layer9#u1f9cd-1f3ff-200d-2640-fe0f_layer10"u1f9cd-1f3ff-200d-2642-fe0f_layer8u1f9cd-1f3ff_layer7u1f9cd_1f3fbu1f9cd_1f3fb_200d_2640_fe0fu1f9cd_1f3fb_200d_2642_fe0fu1f9cd_1f3fcu1f9cd_1f3fc_200d_2640_fe0fu1f9cd_1f3fc_200d_2642_fe0fu1f9cd_1f3fdu1f9cd_1f3fd_200d_2640_fe0fu1f9cd_1f3fd_200d_2642_fe0fu1f9cd_1f3feu1f9cd_1f3fe_200d_2640_fe0fu1f9cd_1f3fe_200d_2642_fe0fu1f9cd_1f3ffu1f9cd_1f3ff_200d_2640_fe0fu1f9cd_1f3ff_200d_2642_fe0fu1f9cd_200d_2640_fe0fu1f9cd_200d_2642_fe0f"u1f9ce-1f3fb-200d-2640-fe0f_layer0"u1f9ce-1f3fb-200d-2640-fe0f_layer1"u1f9ce-1f3fb-200d-2640-fe0f_layer2"u1f9ce-1f3fb-200d-2640-fe0f_layer3"u1f9ce-1f3fb-200d-2640-fe0f_layer4"u1f9ce-1f3fb-200d-2640-fe0f_layer5"u1f9ce-1f3fb-200d-2640-fe0f_layer6"u1f9ce-1f3fb-200d-2640-fe0f_layer7"u1f9ce-1f3fb-200d-2642-fe0f_layer0"u1f9ce-1f3fb-200d-2642-fe0f_layer1"u1f9ce-1f3fb-200d-2642-fe0f_layer2"u1f9ce-1f3fb-200d-2642-fe0f_layer3"u1f9ce-1f3fb-200d-2642-fe0f_layer4"u1f9ce-1f3fb-200d-2642-fe0f_layer5"u1f9ce-1f3fb-200d-2642-fe0f_layer6u1f9ce-1f3fb_layer0u1f9ce-1f3fb_layer1u1f9ce-1f3fb_layer2u1f9ce-1f3fb_layer3u1f9ce-1f3fb_layer6"u1f9ce-1f3fc-200d-2640-fe0f_layer3"u1f9ce-1f3fc-200d-2640-fe0f_layer5"u1f9ce-1f3fc-200d-2642-fe0f_layer2"u1f9ce-1f3fc-200d-2642-fe0f_layer4u1f9ce-1f3fc_layer2u1f9ce_1f3fbu1f9ce_1f3fb_200d_2640_fe0fu1f9ce_1f3fb_200d_2642_fe0fu1f9ce_1f3fcu1f9ce_1f3fc_200d_2640_fe0fu1f9ce_1f3fc_200d_2642_fe0fu1f9ce_1f3fdu1f9ce_1f3fd_200d_2640_fe0fu1f9ce_1f3fd_200d_2642_fe0fu1f9ce_1f3feu1f9ce_1f3fe_200d_2640_fe0fu1f9ce_1f3fe_200d_2642_fe0fu1f9ce_1f3ffu1f9ce_1f3ff_200d_2640_fe0fu1f9ce_1f3ff_200d_2642_fe0fu1f9ce_200d_2640_fe0fu1f9ce_200d_2642_fe0f"u1f9cf-1f3fb-200d-2640-fe0f_layer0"u1f9cf-1f3fb-200d-2640-fe0f_layer1#u1f9cf-1f3fb-200d-2640-fe0f_layer10#u1f9cf-1f3fb-200d-2640-fe0f_layer11#u1f9cf-1f3fb-200d-2640-fe0f_layer12"u1f9cf-1f3fb-200d-2640-fe0f_layer2"u1f9cf-1f3fb-200d-2640-fe0f_layer3"u1f9cf-1f3fb-200d-2640-fe0f_layer4"u1f9cf-1f3fb-200d-2640-fe0f_layer5"u1f9cf-1f3fb-200d-2640-fe0f_layer6"u1f9cf-1f3fb-200d-2640-fe0f_layer7"u1f9cf-1f3fb-200d-2640-fe0f_layer8"u1f9cf-1f3fb-200d-2640-fe0f_layer9"u1f9cf-1f3fb-200d-2642-fe0f_layer0"u1f9cf-1f3fb-200d-2642-fe0f_layer1#u1f9cf-1f3fb-200d-2642-fe0f_layer10"u1f9cf-1f3fb-200d-2642-fe0f_layer2"u1f9cf-1f3fb-200d-2642-fe0f_layer3"u1f9cf-1f3fb-200d-2642-fe0f_layer4"u1f9cf-1f3fb-200d-2642-fe0f_layer5"u1f9cf-1f3fb-200d-2642-fe0f_layer6u1f9cf-1f3fb_layer0u1f9cf-1f3fb_layer1u1f9cf-1f3fb_layer2u1f9cf-1f3fb_layer3u1f9cf-1f3fb_layer4u1f9cf-1f3fb_layer5u1f9cf-1f3fb_layer6"u1f9cf-1f3ff-200d-2640-fe0f_layer7"u1f9cf-1f3ff-200d-2642-fe0f_layer6u1f9cf-1f3ff_layer6u1f9cf_1f3fbu1f9cf_1f3fb_200d_2640_fe0fu1f9cf_1f3fb_200d_2642_fe0fu1f9cf_1f3fcu1f9cf_1f3fc_200d_2640_fe0fu1f9cf_1f3fc_200d_2642_fe0fu1f9cf_1f3fdu1f9cf_1f3fd_200d_2640_fe0fu1f9cf_1f3fd_200d_2642_fe0fu1f9cf_1f3feu1f9cf_1f3fe_200d_2640_fe0fu1f9cf_1f3fe_200d_2642_fe0fu1f9cf_1f3ffu1f9cf_1f3ff_200d_2640_fe0fu1f9cf_1f3ff_200d_2642_fe0fu1f9cf_200d_2640_fe0fu1f9cf_200d_2642_fe0fu1f9d0_layer1u1f9d0_layer2u1f9d0_layer3u1f9d0_layer4u1f9d0_layer5u1f9d1-1f3fb-200d-1f33e_layer2u1f9d1-1f3fb-200d-1f33e_layer4u1f9d1-1f3fb-200d-1f33e_layer5u1f9d1-1f3fb-200d-1f33e_layer6u1f9d1-1f3fb-200d-1f33e_layer7u1f9d1-1f3fb-200d-1f373_layer2u1f9d1-1f3fb-200d-1f373_layer4u1f9d1-1f3fb-200d-1f373_layer5u1f9d1-1f3fb-200d-1f373_layer6u1f9d1-1f3fb-200d-1f373_layer7u1f9d1-1f3fb-200d-1f37c_layer1u1f9d1-1f3fb-200d-1f37c_layer3u1f9d1-1f3fb-200d-1f37c_layer4u1f9d1-1f3fb-200d-1f37c_layer5u1f9d1-1f3fb-200d-1f37c_layer6u1f9d1-1f3fb-200d-1f384_layer1u1f9d1-1f3fb-200d-1f384_layer2u1f9d1-1f3fb-200d-1f384_layer3u1f9d1-1f3fb-200d-1f384_layer4u1f9d1-1f3fb-200d-1f384_layer5u1f9d1-1f3fb-200d-1f393_layer8u1f9d1-1f3fb-200d-1f3a4_layer10u1f9d1-1f3fb-200d-1f3a4_layer11u1f9d1-1f3fb-200d-1f3a4_layer12u1f9d1-1f3fb-200d-1f3a4_layer13u1f9d1-1f3fb-200d-1f3a4_layer9u1f9d1-1f3fb-200d-1f3a8_layer2u1f9d1-1f3fb-200d-1f3a8_layer3u1f9d1-1f3fb-200d-1f3a8_layer4u1f9d1-1f3fb-200d-1f3a8_layer6u1f9d1-1f3fb-200d-1f3eb_layer11u1f9d1-1f3fb-200d-1f3eb_layer4u1f9d1-1f3fb-200d-1f3eb_layer5u1f9d1-1f3fb-200d-1f3eb_layer7u1f9d1-1f3fb-200d-1f3eb_layer8u1f9d1-1f3fb-200d-1f3eb_layer9u1f9d1-1f3fb-200d-1f3ed_layer2u1f9d1-1f3fb-200d-1f4bb_layer1u1f9d1-1f3fb-200d-1f4bb_layer2u1f9d1-1f3fb-200d-1f4bb_layer3u1f9d1-1f3fb-200d-1f4bb_layer4u1f9d1-1f3fb-200d-1f4bb_layer5u1f9d1-1f3fb-200d-1f4bb_layer6u1f9d1-1f3fb-200d-1f4bc_layer14u1f9d1-1f3fb-200d-1f4bc_layer7u1f9d1-1f3fb-200d-1f4bc_layer8u1f9d1-1f3fb-200d-1f527_layer5u1f9d1-1f3fb-200d-1f527_layer8u1f9d1-1f3fb-200d-1f52c_layer1u1f9d1-1f3fb-200d-1f52c_layer3u1f9d1-1f3fb-200d-1f52c_layer4u1f9d1-1f3fb-200d-1f52c_layer5u1f9d1-1f3fb-200d-1f52c_layer6u1f9d1-1f3fb-200d-1f680_layer4u1f9d1-1f3fb-200d-1f680_layer6u1f9d1-1f3fb-200d-1f680_layer7u1f9d1-1f3fb-200d-1f680_layer8u1f9d1-1f3fb-200d-1f680_layer9u1f9d1-1f3fb-200d-1f692_layer5u1f9d1-1f3fb-200d-1f692_layer8/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer0/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer10u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer100u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer110u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer120u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer130u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer14/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer2/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer3/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer4/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer5/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer6/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb_layer90u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc_layer110u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc_layer13/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc_layer6/u1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc_layer9u1f9d1-1f3fb-200d-1f9af_layer12u1f9d1-1f3fb-200d-1f9af_layer7u1f9d1-1f3fb-200d-1f9af_layer8u1f9d1-1f3fb-200d-1f9af_layer9u1f9d1-1f3fb-200d-1f9b0_layer0u1f9d1-1f3fb-200d-1f9b0_layer1u1f9d1-1f3fb-200d-1f9b0_layer2u1f9d1-1f3fb-200d-1f9b1_layer0u1f9d1-1f3fb-200d-1f9b1_layer1u1f9d1-1f3fb-200d-1f9b2_layer0u1f9d1-1f3fb-200d-1f9bc_layer4u1f9d1-1f3fb-200d-1f9bc_layer5u1f9d1-1f3fb-200d-1f9bc_layer6u1f9d1-1f3fb-200d-1f9bc_layer7u1f9d1-1f3fb-200d-1f9bd_layer4u1f9d1-1f3fb-200d-1f9bd_layer5u1f9d1-1f3fb-200d-1f9bd_layer6u1f9d1-1f3fb-200d-1f9bd_layer7"u1f9d1-1f3fb-200d-2695-fe0f_layer1"u1f9d1-1f3fb-200d-2695-fe0f_layer3"u1f9d1-1f3fb-200d-2695-fe0f_layer4"u1f9d1-1f3fb-200d-2695-fe0f_layer5"u1f9d1-1f3fb-200d-2695-fe0f_layer6"u1f9d1-1f3fb-200d-2696-fe0f_layer2"u1f9d1-1f3fb-200d-2696-fe0f_layer6"u1f9d1-1f3fb-200d-2696-fe0f_layer7"u1f9d1-1f3fb-200d-2708-fe0f_layer2"u1f9d1-1f3fb-200d-2708-fe0f_layer4"u1f9d1-1f3fb-200d-2708-fe0f_layer5"u1f9d1-1f3fb-200d-2708-fe0f_layer6"u1f9d1-1f3fb-200d-2708-fe0f_layer7>u1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc_layer0>u1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc_layer1>u1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc_layer2>u1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc_layer43u1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc_layer03u1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc_layer6/u1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb_layer2/u1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb_layer4/u1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc_layer4u1f9d1-1f3fc-200d-1f9bc_layer6"u1f9d1-1f3fe-200d-2696-fe0f_layer6u1f9d1-1f3ff-200d-1f33e_layer7u1f9d1-1f3ff-200d-1f373_layer7u1f9d1-1f3ff-200d-1f37c_layer6u1f9d1-1f3ff-200d-1f384_layer4u1f9d1-1f3ff-200d-1f3a4_layer13u1f9d1-1f3ff-200d-1f4bb_layer6u1f9d1-1f3ff-200d-1f52c_layer6u1f9d1-1f3ff-200d-1f680_layer9"u1f9d1-1f3ff-200d-2695-fe0f_layer6"u1f9d1-1f3ff-200d-2708-fe0f_layer7>u1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb_layer1u1f9d1_1f3fbu1f9d1_1f3fb_200d_1f33eu1f9d1_1f3fb_200d_1f373u1f9d1_1f3fb_200d_1f37cu1f9d1_1f3fb_200d_1f384u1f9d1_1f3fb_200d_1f393u1f9d1_1f3fb_200d_1f3a4u1f9d1_1f3fb_200d_1f3a8u1f9d1_1f3fb_200d_1f3ebu1f9d1_1f3fb_200d_1f3edu1f9d1_1f3fb_200d_1f4bbu1f9d1_1f3fb_200d_1f4bcu1f9d1_1f3fb_200d_1f527u1f9d1_1f3fb_200d_1f52cu1f9d1_1f3fb_200d_1f680u1f9d1_1f3fb_200d_1f692(u1f9d1_1f3fb_200d_1f91d_200d_1f9d1_1f3fb(u1f9d1_1f3fb_200d_1f91d_200d_1f9d1_1f3fc(u1f9d1_1f3fb_200d_1f91d_200d_1f9d1_1f3fd(u1f9d1_1f3fb_200d_1f91d_200d_1f9d1_1f3fe(u1f9d1_1f3fb_200d_1f91d_200d_1f9d1_1f3ffu1f9d1_1f3fb_200d_1f9afu1f9d1_1f3fb_200d_1f9b0u1f9d1_1f3fb_200d_1f9b1u1f9d1_1f3fb_200d_1f9b2u1f9d1_1f3fb_200d_1f9b3u1f9d1_1f3fb_200d_1f9bcu1f9d1_1f3fb_200d_1f9bdu1f9d1_1f3fb_200d_2695_fe0fu1f9d1_1f3fb_200d_2696_fe0fu1f9d1_1f3fb_200d_2708_fe0f7u1f9d1_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fc7u1f9d1_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fd7u1f9d1_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fe7u1f9d1_1f3fb_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3ff,u1f9d1_1f3fb_200d_2764_fe0f_200d_1f9d1_1f3fc,u1f9d1_1f3fb_200d_2764_fe0f_200d_1f9d1_1f3fd,u1f9d1_1f3fb_200d_2764_fe0f_200d_1f9d1_1f3fe,u1f9d1_1f3fb_200d_2764_fe0f_200d_1f9d1_1f3ffu1f9d1_1f3fcu1f9d1_1f3fc_200d_1f33eu1f9d1_1f3fc_200d_1f373u1f9d1_1f3fc_200d_1f37cu1f9d1_1f3fc_200d_1f384u1f9d1_1f3fc_200d_1f393u1f9d1_1f3fc_200d_1f3a4u1f9d1_1f3fc_200d_1f3a8u1f9d1_1f3fc_200d_1f3ebu1f9d1_1f3fc_200d_1f3edu1f9d1_1f3fc_200d_1f4bbu1f9d1_1f3fc_200d_1f4bcu1f9d1_1f3fc_200d_1f527u1f9d1_1f3fc_200d_1f52cu1f9d1_1f3fc_200d_1f680u1f9d1_1f3fc_200d_1f692(u1f9d1_1f3fc_200d_1f91d_200d_1f9d1_1f3fb(u1f9d1_1f3fc_200d_1f91d_200d_1f9d1_1f3fc(u1f9d1_1f3fc_200d_1f91d_200d_1f9d1_1f3fd(u1f9d1_1f3fc_200d_1f91d_200d_1f9d1_1f3fe(u1f9d1_1f3fc_200d_1f91d_200d_1f9d1_1f3ffu1f9d1_1f3fc_200d_1f9afu1f9d1_1f3fc_200d_1f9b0u1f9d1_1f3fc_200d_1f9b1u1f9d1_1f3fc_200d_1f9b2u1f9d1_1f3fc_200d_1f9b3u1f9d1_1f3fc_200d_1f9bcu1f9d1_1f3fc_200d_1f9bdu1f9d1_1f3fc_200d_2695_fe0fu1f9d1_1f3fc_200d_2696_fe0fu1f9d1_1f3fc_200d_2708_fe0f7u1f9d1_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fb7u1f9d1_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fd7u1f9d1_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fe7u1f9d1_1f3fc_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3ff,u1f9d1_1f3fc_200d_2764_fe0f_200d_1f9d1_1f3fb,u1f9d1_1f3fc_200d_2764_fe0f_200d_1f9d1_1f3fd,u1f9d1_1f3fc_200d_2764_fe0f_200d_1f9d1_1f3fe,u1f9d1_1f3fc_200d_2764_fe0f_200d_1f9d1_1f3ffu1f9d1_1f3fdu1f9d1_1f3fd_200d_1f33eu1f9d1_1f3fd_200d_1f373u1f9d1_1f3fd_200d_1f37cu1f9d1_1f3fd_200d_1f384u1f9d1_1f3fd_200d_1f393u1f9d1_1f3fd_200d_1f3a4u1f9d1_1f3fd_200d_1f3a8u1f9d1_1f3fd_200d_1f3ebu1f9d1_1f3fd_200d_1f3edu1f9d1_1f3fd_200d_1f4bbu1f9d1_1f3fd_200d_1f4bcu1f9d1_1f3fd_200d_1f527u1f9d1_1f3fd_200d_1f52cu1f9d1_1f3fd_200d_1f680u1f9d1_1f3fd_200d_1f692(u1f9d1_1f3fd_200d_1f91d_200d_1f9d1_1f3fb(u1f9d1_1f3fd_200d_1f91d_200d_1f9d1_1f3fc(u1f9d1_1f3fd_200d_1f91d_200d_1f9d1_1f3fd(u1f9d1_1f3fd_200d_1f91d_200d_1f9d1_1f3fe(u1f9d1_1f3fd_200d_1f91d_200d_1f9d1_1f3ffu1f9d1_1f3fd_200d_1f9afu1f9d1_1f3fd_200d_1f9b0u1f9d1_1f3fd_200d_1f9b1u1f9d1_1f3fd_200d_1f9b2u1f9d1_1f3fd_200d_1f9b3u1f9d1_1f3fd_200d_1f9bcu1f9d1_1f3fd_200d_1f9bdu1f9d1_1f3fd_200d_2695_fe0fu1f9d1_1f3fd_200d_2696_fe0fu1f9d1_1f3fd_200d_2708_fe0f7u1f9d1_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fb7u1f9d1_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fc7u1f9d1_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fe7u1f9d1_1f3fd_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3ff,u1f9d1_1f3fd_200d_2764_fe0f_200d_1f9d1_1f3fb,u1f9d1_1f3fd_200d_2764_fe0f_200d_1f9d1_1f3fc,u1f9d1_1f3fd_200d_2764_fe0f_200d_1f9d1_1f3fe,u1f9d1_1f3fd_200d_2764_fe0f_200d_1f9d1_1f3ffu1f9d1_1f3feu1f9d1_1f3fe_200d_1f33eu1f9d1_1f3fe_200d_1f373u1f9d1_1f3fe_200d_1f37cu1f9d1_1f3fe_200d_1f384u1f9d1_1f3fe_200d_1f393u1f9d1_1f3fe_200d_1f3a4u1f9d1_1f3fe_200d_1f3a8u1f9d1_1f3fe_200d_1f3ebu1f9d1_1f3fe_200d_1f3edu1f9d1_1f3fe_200d_1f4bbu1f9d1_1f3fe_200d_1f4bcu1f9d1_1f3fe_200d_1f527u1f9d1_1f3fe_200d_1f52cu1f9d1_1f3fe_200d_1f680u1f9d1_1f3fe_200d_1f692(u1f9d1_1f3fe_200d_1f91d_200d_1f9d1_1f3fb(u1f9d1_1f3fe_200d_1f91d_200d_1f9d1_1f3fc(u1f9d1_1f3fe_200d_1f91d_200d_1f9d1_1f3fd(u1f9d1_1f3fe_200d_1f91d_200d_1f9d1_1f3fe(u1f9d1_1f3fe_200d_1f91d_200d_1f9d1_1f3ffu1f9d1_1f3fe_200d_1f9afu1f9d1_1f3fe_200d_1f9b0u1f9d1_1f3fe_200d_1f9b1u1f9d1_1f3fe_200d_1f9b2u1f9d1_1f3fe_200d_1f9b3u1f9d1_1f3fe_200d_1f9bcu1f9d1_1f3fe_200d_1f9bdu1f9d1_1f3fe_200d_2695_fe0fu1f9d1_1f3fe_200d_2696_fe0fu1f9d1_1f3fe_200d_2708_fe0f7u1f9d1_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fb7u1f9d1_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fc7u1f9d1_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fd7u1f9d1_1f3fe_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3ff,u1f9d1_1f3fe_200d_2764_fe0f_200d_1f9d1_1f3fb,u1f9d1_1f3fe_200d_2764_fe0f_200d_1f9d1_1f3fc,u1f9d1_1f3fe_200d_2764_fe0f_200d_1f9d1_1f3fd,u1f9d1_1f3fe_200d_2764_fe0f_200d_1f9d1_1f3ffu1f9d1_1f3ffu1f9d1_1f3ff_200d_1f33eu1f9d1_1f3ff_200d_1f373u1f9d1_1f3ff_200d_1f37cu1f9d1_1f3ff_200d_1f384u1f9d1_1f3ff_200d_1f393u1f9d1_1f3ff_200d_1f3a4u1f9d1_1f3ff_200d_1f3a8u1f9d1_1f3ff_200d_1f3ebu1f9d1_1f3ff_200d_1f3edu1f9d1_1f3ff_200d_1f4bbu1f9d1_1f3ff_200d_1f4bcu1f9d1_1f3ff_200d_1f527u1f9d1_1f3ff_200d_1f52cu1f9d1_1f3ff_200d_1f680u1f9d1_1f3ff_200d_1f692(u1f9d1_1f3ff_200d_1f91d_200d_1f9d1_1f3fb(u1f9d1_1f3ff_200d_1f91d_200d_1f9d1_1f3fc(u1f9d1_1f3ff_200d_1f91d_200d_1f9d1_1f3fd(u1f9d1_1f3ff_200d_1f91d_200d_1f9d1_1f3fe(u1f9d1_1f3ff_200d_1f91d_200d_1f9d1_1f3ffu1f9d1_1f3ff_200d_1f9afu1f9d1_1f3ff_200d_1f9b0u1f9d1_1f3ff_200d_1f9b1u1f9d1_1f3ff_200d_1f9b2u1f9d1_1f3ff_200d_1f9b3u1f9d1_1f3ff_200d_1f9bcu1f9d1_1f3ff_200d_1f9bdu1f9d1_1f3ff_200d_2695_fe0fu1f9d1_1f3ff_200d_2696_fe0fu1f9d1_1f3ff_200d_2708_fe0f7u1f9d1_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fb7u1f9d1_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fc7u1f9d1_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fd7u1f9d1_1f3ff_200d_2764_fe0f_200d_1f48b_200d_1f9d1_1f3fe,u1f9d1_1f3ff_200d_2764_fe0f_200d_1f9d1_1f3fb,u1f9d1_1f3ff_200d_2764_fe0f_200d_1f9d1_1f3fc,u1f9d1_1f3ff_200d_2764_fe0f_200d_1f9d1_1f3fd,u1f9d1_1f3ff_200d_2764_fe0f_200d_1f9d1_1f3feu1f9d1_200d_1f33eu1f9d1_200d_1f373u1f9d1_200d_1f37cu1f9d1_200d_1f384u1f9d1_200d_1f393u1f9d1_200d_1f3a4u1f9d1_200d_1f3a8u1f9d1_200d_1f3ebu1f9d1_200d_1f3edu1f9d1_200d_1f4bbu1f9d1_200d_1f4bcu1f9d1_200d_1f527u1f9d1_200d_1f52cu1f9d1_200d_1f680u1f9d1_200d_1f692u1f9d1_200d_1f91d_200d_1f9d1u1f9d1_200d_1f9afu1f9d1_200d_1f9b0u1f9d1_200d_1f9b1u1f9d1_200d_1f9b2u1f9d1_200d_1f9b3u1f9d1_200d_1f9bcu1f9d1_200d_1f9bdu1f9d1_200d_2695_fe0fu1f9d1_200d_2696_fe0fu1f9d1_200d_2708_fe0fu1f9d2-1f3fb_layer0u1f9d2-1f3fb_layer1u1f9d2-1f3fb_layer2u1f9d2-1f3fb_layer3u1f9d2-1f3ff_layer3u1f9d2_1f3fbu1f9d2_1f3fcu1f9d2_1f3fdu1f9d2_1f3feu1f9d2_1f3ffu1f9d3-1f3fb_layer0u1f9d3-1f3fb_layer1u1f9d3-1f3fb_layer2u1f9d3-1f3fb_layer3u1f9d3-1f3fb_layer4u1f9d3-1f3ff_layer3u1f9d3_1f3fbu1f9d3_1f3fcu1f9d3_1f3fdu1f9d3_1f3feu1f9d3_1f3ff"u1f9d4-1f3fb-200d-2640-fe0f_layer5"u1f9d4-1f3fb-200d-2640-fe0f_layer6"u1f9d4-1f3fb-200d-2640-fe0f_layer7"u1f9d4-1f3fb-200d-2642-fe0f_layer4"u1f9d4-1f3fb-200d-2642-fe0f_layer5u1f9d4-1f3fb_layer0u1f9d4-1f3fb_layer1u1f9d4-1f3fb_layer2u1f9d4-1f3fb_layer3u1f9d4-1f3fb_layer4u1f9d4-1f3fb_layer5u1f9d4-1f3ff_layer5u1f9d4_1f3fbu1f9d4_1f3fb_200d_2640_fe0fu1f9d4_1f3fb_200d_2642_fe0fu1f9d4_1f3fcu1f9d4_1f3fc_200d_2640_fe0fu1f9d4_1f3fc_200d_2642_fe0fu1f9d4_1f3fdu1f9d4_1f3fd_200d_2640_fe0fu1f9d4_1f3fd_200d_2642_fe0fu1f9d4_1f3feu1f9d4_1f3fe_200d_2640_fe0fu1f9d4_1f3fe_200d_2642_fe0fu1f9d4_1f3ffu1f9d4_1f3ff_200d_2640_fe0fu1f9d4_1f3ff_200d_2642_fe0fu1f9d4_200d_2640_fe0fu1f9d4_200d_2642_fe0fu1f9d5-1f3fb_layer1u1f9d5-1f3fb_layer2u1f9d5-1f3fb_layer3u1f9d5-1f3fb_layer7u1f9d5_1f3fbu1f9d5_1f3fcu1f9d5_1f3fdu1f9d5_1f3feu1f9d5_1f3ff"u1f9d6-1f3fb-200d-2640-fe0f_layer0"u1f9d6-1f3fb-200d-2640-fe0f_layer1#u1f9d6-1f3fb-200d-2640-fe0f_layer10#u1f9d6-1f3fb-200d-2640-fe0f_layer13#u1f9d6-1f3fb-200d-2640-fe0f_layer14#u1f9d6-1f3fb-200d-2640-fe0f_layer15#u1f9d6-1f3fb-200d-2640-fe0f_layer16#u1f9d6-1f3fb-200d-2640-fe0f_layer17#u1f9d6-1f3fb-200d-2640-fe0f_layer18#u1f9d6-1f3fb-200d-2640-fe0f_layer19"u1f9d6-1f3fb-200d-2640-fe0f_layer2"u1f9d6-1f3fb-200d-2640-fe0f_layer3"u1f9d6-1f3fb-200d-2640-fe0f_layer6"u1f9d6-1f3fb-200d-2640-fe0f_layer7#u1f9d6-1f3fb-200d-2642-fe0f_layer12#u1f9d6-1f3fb-200d-2642-fe0f_layer13"u1f9d6-1f3fb-200d-2642-fe0f_layer4"u1f9d6-1f3fb-200d-2642-fe0f_layer6u1f9d6-1f3fb_layer10u1f9d6-1f3fb_layer11u1f9d6-1f3fb_layer12u1f9d6-1f3fb_layer13u1f9d6-1f3fb_layer14u1f9d6-1f3fb_layer15u1f9d6-1f3fb_layer16u1f9d6-1f3fb_layer17u1f9d6-1f3fb_layer5u1f9d6-1f3fb_layer6u1f9d6-1f3fb_layer7u1f9d6-1f3fb_layer8u1f9d6-1f3fb_layer9u1f9d6-1f3ff_layer10u1f9d6_1f3fbu1f9d6_1f3fb_200d_2640_fe0fu1f9d6_1f3fb_200d_2642_fe0fu1f9d6_1f3fcu1f9d6_1f3fc_200d_2640_fe0fu1f9d6_1f3fc_200d_2642_fe0fu1f9d6_1f3fdu1f9d6_1f3fd_200d_2640_fe0fu1f9d6_1f3fd_200d_2642_fe0fu1f9d6_1f3feu1f9d6_1f3fe_200d_2640_fe0fu1f9d6_1f3fe_200d_2642_fe0fu1f9d6_1f3ffu1f9d6_1f3ff_200d_2640_fe0fu1f9d6_1f3ff_200d_2642_fe0fu1f9d6_200d_2640_fe0fu1f9d6_200d_2642_fe0f"u1f9d7-1f3fb-200d-2640-fe0f_layer0"u1f9d7-1f3fb-200d-2640-fe0f_layer1#u1f9d7-1f3fb-200d-2640-fe0f_layer10#u1f9d7-1f3fb-200d-2640-fe0f_layer11#u1f9d7-1f3fb-200d-2640-fe0f_layer12#u1f9d7-1f3fb-200d-2640-fe0f_layer13#u1f9d7-1f3fb-200d-2640-fe0f_layer14"u1f9d7-1f3fb-200d-2640-fe0f_layer2"u1f9d7-1f3fb-200d-2640-fe0f_layer3"u1f9d7-1f3fb-200d-2640-fe0f_layer4"u1f9d7-1f3fb-200d-2640-fe0f_layer5"u1f9d7-1f3fb-200d-2640-fe0f_layer6"u1f9d7-1f3fb-200d-2640-fe0f_layer7"u1f9d7-1f3fb-200d-2640-fe0f_layer8"u1f9d7-1f3fb-200d-2640-fe0f_layer9#u1f9d7-1f3fb-200d-2642-fe0f_layer10#u1f9d7-1f3fb-200d-2642-fe0f_layer11#u1f9d7-1f3fb-200d-2642-fe0f_layer12#u1f9d7-1f3fb-200d-2642-fe0f_layer14#u1f9d7-1f3fb-200d-2642-fe0f_layer15"u1f9d7-1f3fb-200d-2642-fe0f_layer3"u1f9d7-1f3fb-200d-2642-fe0f_layer4"u1f9d7-1f3fb-200d-2642-fe0f_layer7u1f9d7-1f3fb_layer11u1f9d7-1f3fb_layer12u1f9d7-1f3fb_layer14u1f9d7-1f3fb_layer2u1f9d7-1f3fb_layer3u1f9d7-1f3fb_layer4u1f9d7-1f3fb_layer9#u1f9d7-1f3fc-200d-2640-fe0f_layer13#u1f9d7-1f3fc-200d-2642-fe0f_layer13u1f9d7-1f3fc_layer4u1f9d7_1f3fbu1f9d7_1f3fb_200d_2640_fe0fu1f9d7_1f3fb_200d_2642_fe0fu1f9d7_1f3fcu1f9d7_1f3fc_200d_2640_fe0fu1f9d7_1f3fc_200d_2642_fe0fu1f9d7_1f3fdu1f9d7_1f3fd_200d_2640_fe0fu1f9d7_1f3fd_200d_2642_fe0fu1f9d7_1f3feu1f9d7_1f3fe_200d_2640_fe0fu1f9d7_1f3fe_200d_2642_fe0fu1f9d7_1f3ffu1f9d7_1f3ff_200d_2640_fe0fu1f9d7_1f3ff_200d_2642_fe0fu1f9d7_200d_2640_fe0fu1f9d7_200d_2642_fe0f"u1f9d8-1f3fb-200d-2640-fe0f_layer0"u1f9d8-1f3fb-200d-2640-fe0f_layer1#u1f9d8-1f3fb-200d-2640-fe0f_layer10#u1f9d8-1f3fb-200d-2640-fe0f_layer11#u1f9d8-1f3fb-200d-2640-fe0f_layer12"u1f9d8-1f3fb-200d-2640-fe0f_layer2"u1f9d8-1f3fb-200d-2640-fe0f_layer3"u1f9d8-1f3fb-200d-2640-fe0f_layer4"u1f9d8-1f3fb-200d-2640-fe0f_layer5"u1f9d8-1f3fb-200d-2640-fe0f_layer6"u1f9d8-1f3fb-200d-2640-fe0f_layer7"u1f9d8-1f3fb-200d-2640-fe0f_layer8"u1f9d8-1f3fb-200d-2640-fe0f_layer9"u1f9d8-1f3fb-200d-2642-fe0f_layer1#u1f9d8-1f3fb-200d-2642-fe0f_layer10#u1f9d8-1f3fb-200d-2642-fe0f_layer11"u1f9d8-1f3fb-200d-2642-fe0f_layer6"u1f9d8-1f3fb-200d-2642-fe0f_layer7"u1f9d8-1f3fb-200d-2642-fe0f_layer8"u1f9d8-1f3fb-200d-2642-fe0f_layer9u1f9d8-1f3fb_layer1u1f9d8-1f3fb_layer10u1f9d8-1f3fb_layer11u1f9d8-1f3fb_layer6u1f9d8-1f3fb_layer7u1f9d8-1f3fb_layer8u1f9d8-1f3fb_layer9u1f9d8_1f3fbu1f9d8_1f3fb_200d_2640_fe0fu1f9d8_1f3fb_200d_2642_fe0fu1f9d8_1f3fcu1f9d8_1f3fc_200d_2640_fe0fu1f9d8_1f3fc_200d_2642_fe0fu1f9d8_1f3fdu1f9d8_1f3fd_200d_2640_fe0fu1f9d8_1f3fd_200d_2642_fe0fu1f9d8_1f3feu1f9d8_1f3fe_200d_2640_fe0fu1f9d8_1f3fe_200d_2642_fe0fu1f9d8_1f3ffu1f9d8_1f3ff_200d_2640_fe0fu1f9d8_1f3ff_200d_2642_fe0fu1f9d8_200d_2640_fe0fu1f9d8_200d_2642_fe0f"u1f9d9-1f3fb-200d-2640-fe0f_layer0"u1f9d9-1f3fb-200d-2640-fe0f_layer1#u1f9d9-1f3fb-200d-2640-fe0f_layer10#u1f9d9-1f3fb-200d-2640-fe0f_layer11#u1f9d9-1f3fb-200d-2640-fe0f_layer12#u1f9d9-1f3fb-200d-2640-fe0f_layer13#u1f9d9-1f3fb-200d-2640-fe0f_layer14"u1f9d9-1f3fb-200d-2640-fe0f_layer2"u1f9d9-1f3fb-200d-2640-fe0f_layer3"u1f9d9-1f3fb-200d-2640-fe0f_layer4"u1f9d9-1f3fb-200d-2640-fe0f_layer5"u1f9d9-1f3fb-200d-2640-fe0f_layer6"u1f9d9-1f3fb-200d-2640-fe0f_layer7"u1f9d9-1f3fb-200d-2640-fe0f_layer8"u1f9d9-1f3fb-200d-2640-fe0f_layer9"u1f9d9-1f3fb-200d-2642-fe0f_layer0"u1f9d9-1f3fb-200d-2642-fe0f_layer1"u1f9d9-1f3fb-200d-2642-fe0f_layer3"u1f9d9-1f3fb-200d-2642-fe0f_layer4"u1f9d9-1f3fb-200d-2642-fe0f_layer5"u1f9d9-1f3fb-200d-2642-fe0f_layer6u1f9d9-1f3fb_layer3u1f9d9-1f3fb_layer4u1f9d9-1f3fb_layer5u1f9d9-1f3fb_layer6u1f9d9-1f3fb_layer7"u1f9d9-1f3ff-200d-2640-fe0f_layer8"u1f9d9-1f3ff-200d-2642-fe0f_layer4u1f9d9-1f3ff_layer7u1f9d9_1f3fbu1f9d9_1f3fb_200d_2640_fe0fu1f9d9_1f3fb_200d_2642_fe0fu1f9d9_1f3fcu1f9d9_1f3fc_200d_2640_fe0fu1f9d9_1f3fc_200d_2642_fe0fu1f9d9_1f3fdu1f9d9_1f3fd_200d_2640_fe0fu1f9d9_1f3fd_200d_2642_fe0fu1f9d9_1f3feu1f9d9_1f3fe_200d_2640_fe0fu1f9d9_1f3fe_200d_2642_fe0fu1f9d9_1f3ffu1f9d9_1f3ff_200d_2640_fe0fu1f9d9_1f3ff_200d_2642_fe0fu1f9d9_200d_2640_fe0fu1f9d9_200d_2642_fe0f"u1f9da-1f3fb-200d-2640-fe0f_layer0"u1f9da-1f3fb-200d-2640-fe0f_layer1#u1f9da-1f3fb-200d-2640-fe0f_layer10#u1f9da-1f3fb-200d-2640-fe0f_layer13"u1f9da-1f3fb-200d-2640-fe0f_layer2"u1f9da-1f3fb-200d-2640-fe0f_layer4"u1f9da-1f3fb-200d-2640-fe0f_layer7"u1f9da-1f3fb-200d-2640-fe0f_layer9#u1f9da-1f3fb-200d-2642-fe0f_layer10#u1f9da-1f3fb-200d-2642-fe0f_layer11"u1f9da-1f3fb-200d-2642-fe0f_layer2"u1f9da-1f3fb-200d-2642-fe0f_layer4"u1f9da-1f3fb-200d-2642-fe0f_layer5"u1f9da-1f3fb-200d-2642-fe0f_layer6"u1f9da-1f3fb-200d-2642-fe0f_layer7"u1f9da-1f3fb-200d-2642-fe0f_layer8"u1f9da-1f3fb-200d-2642-fe0f_layer9u1f9da-1f3fb_layer10u1f9da-1f3fb_layer4u1f9da-1f3fb_layer5u1f9da-1f3fb_layer6u1f9da-1f3fb_layer7u1f9da-1f3fb_layer8u1f9da-1f3fb_layer9"u1f9da-1f3fc-200d-2642-fe0f_layer2#u1f9da-1f3ff-200d-2642-fe0f_layer11u1f9da-1f3ff_layer10u1f9da-200d-2642-fe0f_layer10u1f9da_1f3fbu1f9da_1f3fb_200d_2640_fe0fu1f9da_1f3fb_200d_2642_fe0fu1f9da_1f3fcu1f9da_1f3fc_200d_2640_fe0fu1f9da_1f3fc_200d_2642_fe0fu1f9da_1f3fdu1f9da_1f3fd_200d_2640_fe0fu1f9da_1f3fd_200d_2642_fe0fu1f9da_1f3feu1f9da_1f3fe_200d_2640_fe0fu1f9da_1f3fe_200d_2642_fe0fu1f9da_1f3ffu1f9da_1f3ff_200d_2640_fe0fu1f9da_1f3ff_200d_2642_fe0fu1f9da_200d_2640_fe0fu1f9da_200d_2642_fe0f"u1f9db-1f3fb-200d-2640-fe0f_layer1#u1f9db-1f3fb-200d-2640-fe0f_layer10#u1f9db-1f3fb-200d-2640-fe0f_layer11#u1f9db-1f3fb-200d-2640-fe0f_layer12#u1f9db-1f3fb-200d-2640-fe0f_layer13#u1f9db-1f3fb-200d-2640-fe0f_layer14"u1f9db-1f3fb-200d-2640-fe0f_layer2"u1f9db-1f3fb-200d-2640-fe0f_layer3"u1f9db-1f3fb-200d-2640-fe0f_layer4"u1f9db-1f3fb-200d-2640-fe0f_layer5"u1f9db-1f3fb-200d-2640-fe0f_layer6"u1f9db-1f3fb-200d-2640-fe0f_layer7"u1f9db-1f3fb-200d-2640-fe0f_layer8"u1f9db-1f3fb-200d-2640-fe0f_layer9"u1f9db-1f3fb-200d-2642-fe0f_layer1#u1f9db-1f3fb-200d-2642-fe0f_layer10#u1f9db-1f3fb-200d-2642-fe0f_layer11"u1f9db-1f3fb-200d-2642-fe0f_layer2"u1f9db-1f3fb-200d-2642-fe0f_layer3"u1f9db-1f3fb-200d-2642-fe0f_layer7"u1f9db-1f3fb-200d-2642-fe0f_layer8u1f9db-1f3fb_layer1u1f9db-1f3fb_layer10u1f9db-1f3fb_layer11u1f9db-1f3fb_layer12u1f9db-1f3fb_layer4u1f9db-1f3fb_layer5u1f9db-1f3fb_layer6u1f9db-1f3fb_layer7u1f9db-1f3fb_layer8u1f9db-1f3fb_layer9u1f9db-200d-2642-fe0f_layer7u1f9db_1f3fbu1f9db_1f3fb_200d_2640_fe0fu1f9db_1f3fb_200d_2642_fe0fu1f9db_1f3fcu1f9db_1f3fc_200d_2640_fe0fu1f9db_1f3fc_200d_2642_fe0fu1f9db_1f3fdu1f9db_1f3fd_200d_2640_fe0fu1f9db_1f3fd_200d_2642_fe0fu1f9db_1f3feu1f9db_1f3fe_200d_2640_fe0fu1f9db_1f3fe_200d_2642_fe0fu1f9db_1f3ffu1f9db_1f3ff_200d_2640_fe0fu1f9db_1f3ff_200d_2642_fe0fu1f9db_200d_2640_fe0fu1f9db_200d_2642_fe0f"u1f9dc-1f3fb-200d-2640-fe0f_layer0"u1f9dc-1f3fb-200d-2640-fe0f_layer1#u1f9dc-1f3fb-200d-2640-fe0f_layer10#u1f9dc-1f3fb-200d-2640-fe0f_layer11#u1f9dc-1f3fb-200d-2640-fe0f_layer12"u1f9dc-1f3fb-200d-2640-fe0f_layer2"u1f9dc-1f3fb-200d-2640-fe0f_layer3"u1f9dc-1f3fb-200d-2640-fe0f_layer4"u1f9dc-1f3fb-200d-2640-fe0f_layer5"u1f9dc-1f3fb-200d-2640-fe0f_layer6"u1f9dc-1f3fb-200d-2640-fe0f_layer7"u1f9dc-1f3fb-200d-2640-fe0f_layer8"u1f9dc-1f3fb-200d-2640-fe0f_layer9"u1f9dc-1f3fb-200d-2642-fe0f_layer0"u1f9dc-1f3fb-200d-2642-fe0f_layer1#u1f9dc-1f3fb-200d-2642-fe0f_layer10"u1f9dc-1f3fb-200d-2642-fe0f_layer5"u1f9dc-1f3fb-200d-2642-fe0f_layer6"u1f9dc-1f3fb-200d-2642-fe0f_layer7"u1f9dc-1f3fb-200d-2642-fe0f_layer8"u1f9dc-1f3fb-200d-2642-fe0f_layer9u1f9dc-1f3fb_layer0u1f9dc-1f3fb_layer10u1f9dc-1f3fb_layer11u1f9dc-1f3fb_layer2u1f9dc-1f3fb_layer6u1f9dc-1f3fb_layer7u1f9dc-1f3fb_layer8u1f9dc-1f3fb_layer9#u1f9dc-1f3ff-200d-2640-fe0f_layer10"u1f9dc-1f3ff-200d-2642-fe0f_layer9u1f9dc-1f3ff_layer11u1f9dc_1f3fbu1f9dc_1f3fb_200d_2640_fe0fu1f9dc_1f3fb_200d_2642_fe0fu1f9dc_1f3fcu1f9dc_1f3fc_200d_2640_fe0fu1f9dc_1f3fc_200d_2642_fe0fu1f9dc_1f3fdu1f9dc_1f3fd_200d_2640_fe0fu1f9dc_1f3fd_200d_2642_fe0fu1f9dc_1f3feu1f9dc_1f3fe_200d_2640_fe0fu1f9dc_1f3fe_200d_2642_fe0fu1f9dc_1f3ffu1f9dc_1f3ff_200d_2640_fe0fu1f9dc_1f3ff_200d_2642_fe0fu1f9dc_200d_2640_fe0fu1f9dc_200d_2642_fe0f"u1f9dd-1f3fb-200d-2640-fe0f_layer0"u1f9dd-1f3fb-200d-2640-fe0f_layer1#u1f9dd-1f3fb-200d-2640-fe0f_layer10#u1f9dd-1f3fb-200d-2640-fe0f_layer11#u1f9dd-1f3fb-200d-2640-fe0f_layer12#u1f9dd-1f3fb-200d-2640-fe0f_layer13"u1f9dd-1f3fb-200d-2640-fe0f_layer2"u1f9dd-1f3fb-200d-2640-fe0f_layer3"u1f9dd-1f3fb-200d-2640-fe0f_layer4"u1f9dd-1f3fb-200d-2640-fe0f_layer5"u1f9dd-1f3fb-200d-2640-fe0f_layer6"u1f9dd-1f3fb-200d-2640-fe0f_layer7"u1f9dd-1f3fb-200d-2640-fe0f_layer8"u1f9dd-1f3fb-200d-2640-fe0f_layer9"u1f9dd-1f3fb-200d-2642-fe0f_layer0#u1f9dd-1f3fb-200d-2642-fe0f_layer10"u1f9dd-1f3fb-200d-2642-fe0f_layer8"u1f9dd-1f3fb-200d-2642-fe0f_layer9u1f9dd-1f3fb_layer0u1f9dd-1f3fb_layer1u1f9dd-1f3fb_layer2u1f9dd-1f3fb_layer3u1f9dd-1f3fb_layer4u1f9dd-1f3fb_layer5u1f9dd-1f3fb_layer6u1f9dd-1f3fb_layer7u1f9dd-1f3fb_layer8u1f9dd-1f3fb_layer9"u1f9dd-1f3ff-200d-2640-fe0f_layer7u1f9dd-1f3ff_layer7u1f9dd_1f3fbu1f9dd_1f3fb_200d_2640_fe0fu1f9dd_1f3fb_200d_2642_fe0fu1f9dd_1f3fcu1f9dd_1f3fc_200d_2640_fe0fu1f9dd_1f3fc_200d_2642_fe0fu1f9dd_1f3fdu1f9dd_1f3fd_200d_2640_fe0fu1f9dd_1f3fd_200d_2642_fe0fu1f9dd_1f3feu1f9dd_1f3fe_200d_2640_fe0fu1f9dd_1f3fe_200d_2642_fe0fu1f9dd_1f3ffu1f9dd_1f3ff_200d_2640_fe0fu1f9dd_1f3ff_200d_2642_fe0fu1f9dd_200d_2640_fe0fu1f9dd_200d_2642_fe0fu1f9de-200d-2640-fe0f_layer0u1f9de-200d-2640-fe0f_layer1u1f9de-200d-2640-fe0f_layer10u1f9de-200d-2640-fe0f_layer11u1f9de-200d-2640-fe0f_layer12u1f9de-200d-2640-fe0f_layer13u1f9de-200d-2640-fe0f_layer14u1f9de-200d-2640-fe0f_layer2u1f9de-200d-2640-fe0f_layer4u1f9de-200d-2640-fe0f_layer5u1f9de-200d-2640-fe0f_layer6u1f9de-200d-2642-fe0f_layer1u1f9de-200d-2642-fe0f_layer10u1f9de-200d-2642-fe0f_layer11u1f9de-200d-2642-fe0f_layer2u1f9de-200d-2642-fe0f_layer3u1f9de-200d-2642-fe0f_layer4u1f9de-200d-2642-fe0f_layer6u1f9de-200d-2642-fe0f_layer7u1f9de-200d-2642-fe0f_layer8u1f9de-200d-2642-fe0f_layer9u1f9de_200d_2640_fe0fu1f9de_200d_2642_fe0fu1f9de_layer1u1f9de_layer10u1f9de_layer11u1f9de_layer12u1f9de_layer13u1f9de_layer14u1f9de_layer2u1f9de_layer3u1f9de_layer4u1f9de_layer5u1f9de_layer6u1f9de_layer7u1f9de_layer8u1f9de_layer9u1f9df-200d-2640-fe0f_layer0u1f9df-200d-2640-fe0f_layer1u1f9df-200d-2640-fe0f_layer10u1f9df-200d-2640-fe0f_layer11u1f9df-200d-2640-fe0f_layer12u1f9df-200d-2640-fe0f_layer2u1f9df-200d-2640-fe0f_layer3u1f9df-200d-2640-fe0f_layer4u1f9df-200d-2640-fe0f_layer5u1f9df-200d-2640-fe0f_layer6u1f9df-200d-2640-fe0f_layer7u1f9df-200d-2640-fe0f_layer8u1f9df-200d-2640-fe0f_layer9u1f9df-200d-2642-fe0f_layer0u1f9df-200d-2642-fe0f_layer1u1f9df-200d-2642-fe0f_layer10u1f9df-200d-2642-fe0f_layer11u1f9df-200d-2642-fe0f_layer12u1f9df-200d-2642-fe0f_layer13u1f9df-200d-2642-fe0f_layer3u1f9df-200d-2642-fe0f_layer4u1f9df-200d-2642-fe0f_layer5u1f9df-200d-2642-fe0f_layer6u1f9df-200d-2642-fe0f_layer7u1f9df-200d-2642-fe0f_layer8u1f9df-200d-2642-fe0f_layer9u1f9df_200d_2640_fe0fu1f9df_200d_2642_fe0fu1f9df_layer11u1f9df_layer2u1f9df_layer5u1f9df_layer6u1f9df_layer7u1f9e0_layer0u1f9e0_layer1u1f9e0_layer2u1f9e0_layer3u1f9e0_layer4u1f9e2_layer0u1f9e2_layer1u1f9e2_layer2u1f9e2_layer3u1f9e2_layer4u1f9e3_layer0u1f9e3_layer1u1f9e3_layer2u1f9e3_layer3u1f9e3_layer4u1f9e4_layer0u1f9e4_layer1u1f9e4_layer2u1f9e4_layer3u1f9e4_layer4u1f9e5_layer0u1f9e5_layer1u1f9e5_layer2u1f9e5_layer3u1f9e6_layer0u1f9e6_layer1u1f9e6_layer2u1f9e6_layer3u1f9e6_layer4u1f9e6_layer5u1f9e6_layer6u1f9e6_layer7u1f9e6_layer8u1f9e7_layer0u1f9e7_layer1u1f9e7_layer2u1f9e7_layer3u1f9e7_layer4u1f9e7_layer5u1f9e8_layer0u1f9e8_layer1u1f9e8_layer2u1f9e8_layer3u1f9e8_layer4u1f9e8_layer5u1f9e8_layer6u1f9e8_layer7u1f9e8_layer8u1f9e8_layer9u1f9e9_layer0u1f9ea_layer0u1f9ea_layer1u1f9ea_layer2u1f9ea_layer3u1f9ea_layer4u1f9eb_layer0u1f9eb_layer1u1f9eb_layer2u1f9eb_layer3u1f9eb_layer4u1f9eb_layer5u1f9eb_layer6u1f9ec_layer0u1f9ec_layer1u1f9ec_layer10u1f9ec_layer11u1f9ec_layer12u1f9ec_layer13u1f9ec_layer14u1f9ec_layer15u1f9ec_layer16u1f9ec_layer17u1f9ec_layer2u1f9ec_layer3u1f9ec_layer4u1f9ec_layer5u1f9ec_layer6u1f9ec_layer7u1f9ec_layer8u1f9ec_layer9u1f9ed_layer1u1f9ed_layer2u1f9ed_layer3u1f9ed_layer4u1f9ed_layer5u1f9ed_layer6u1f9ed_layer7u1f9ee_layer0u1f9ee_layer1u1f9ee_layer2u1f9ee_layer3u1f9ee_layer4u1f9ee_layer5u1f9ee_layer6u1f9ef_layer0u1f9ef_layer1u1f9ef_layer10u1f9ef_layer11u1f9ef_layer2u1f9ef_layer3u1f9ef_layer4u1f9ef_layer5u1f9ef_layer6u1f9ef_layer7u1f9ef_layer8u1f9ef_layer9u1f9f0_layer0u1f9f0_layer1u1f9f0_layer2u1f9f0_layer3u1f9f0_layer4u1f9f0_layer5u1f9f0_layer6u1f9f0_layer7u1f9f1_layer0u1f9f1_layer1u1f9f1_layer2u1f9f1_layer3u1f9f1_layer4u1f9f1_layer5u1f9f1_layer6u1f9f1_layer7u1f9f1_layer8u1f9f2_layer0u1f9f2_layer1u1f9f2_layer2u1f9f2_layer3u1f9f3_layer0u1f9f3_layer1u1f9f3_layer2u1f9f3_layer3u1f9f3_layer4u1f9f3_layer5u1f9f3_layer6u1f9f3_layer7u1f9f4_layer0u1f9f4_layer1u1f9f4_layer2u1f9f4_layer3u1f9f4_layer4u1f9f4_layer5u1f9f4_layer6u1f9f5_layer0u1f9f5_layer1u1f9f5_layer2u1f9f5_layer3u1f9f5_layer4u1f9f6_layer0u1f9f6_layer1u1f9f6_layer2u1f9f6_layer3u1f9f6_layer4u1f9f6_layer5u1f9f6_layer6u1f9f7_layer0u1f9f7_layer1u1f9f7_layer2u1f9f8_layer0u1f9f8_layer1u1f9f8_layer10u1f9f8_layer11u1f9f8_layer12u1f9f8_layer13u1f9f8_layer14u1f9f8_layer15u1f9f8_layer16u1f9f8_layer17u1f9f8_layer2u1f9f8_layer3u1f9f8_layer4u1f9f8_layer5u1f9f8_layer6u1f9f8_layer7u1f9f8_layer8u1f9f8_layer9u1f9f9_layer0u1f9f9_layer1u1f9f9_layer2u1f9f9_layer3u1f9f9_layer4u1f9f9_layer5u1f9fa_layer0u1f9fa_layer1u1f9fa_layer2u1f9fa_layer3u1f9fa_layer4u1f9fa_layer5u1f9fb_layer0u1f9fb_layer1u1f9fb_layer2u1f9fb_layer3u1f9fb_layer4u1f9fb_layer5u1f9fb_layer6u1f9fb_layer7u1f9fb_layer8u1f9fc_layer0u1f9fc_layer1u1f9fc_layer10u1f9fc_layer11u1f9fc_layer12u1f9fc_layer2u1f9fc_layer3u1f9fc_layer4u1f9fc_layer5u1f9fc_layer6u1f9fc_layer7u1f9fc_layer8u1f9fc_layer9u1f9fd_layer0u1f9fd_layer1u1f9fd_layer2u1f9fd_layer3u1f9fe_layer0u1f9fe_layer1u1f9ff_layer0u1f9ff_layer1u1f9ff_layer2u1f9ff_layer3u1fa70_layer0u1fa70_layer1u1fa70_layer2u1fa70_layer3u1fa70_layer4u1fa70_layer5u1fa70_layer6u1fa71_layer0u1fa71_layer1u1fa71_layer2u1fa72_layer0u1fa72_layer1u1fa72_layer2u1fa72_layer3u1fa73_layer0u1fa73_layer1u1fa73_layer2u1fa73_layer3u1fa74_layer0u1fa74_layer1u1fa74_layer2u1fa74_layer3u1fa74_layer4u1fa79_layer0u1fa79_layer1u1fa79_layer2u1fa79_layer3u1fa7a_layer0u1fa7a_layer1u1fa7a_layer2u1fa80_layer0u1fa80_layer1u1fa80_layer2u1fa80_layer3u1fa80_layer4u1fa80_layer5u1fa81_layer0u1fa81_layer1u1fa81_layer2u1fa81_layer3u1fa81_layer4u1fa82_layer0u1fa82_layer1u1fa82_layer10u1fa82_layer11u1fa82_layer12u1fa82_layer13u1fa82_layer14u1fa82_layer15u1fa82_layer2u1fa82_layer3u1fa82_layer4u1fa82_layer5u1fa82_layer6u1fa82_layer7u1fa82_layer8u1fa82_layer9u1fa83_layer0u1fa83_layer1u1fa83_layer2u1fa83_layer3u1fa84_layer0u1fa84_layer1u1fa84_layer2u1fa84_layer3u1fa84_layer4u1fa85_layer0u1fa85_layer1u1fa85_layer10u1fa85_layer11u1fa85_layer12u1fa85_layer13u1fa85_layer14u1fa85_layer15u1fa85_layer16u1fa85_layer17u1fa85_layer18u1fa85_layer19u1fa85_layer2u1fa85_layer20u1fa85_layer21u1fa85_layer22u1fa85_layer23u1fa85_layer24u1fa85_layer25u1fa85_layer26u1fa85_layer27u1fa85_layer3u1fa85_layer30u1fa85_layer31u1fa85_layer32u1fa85_layer4u1fa85_layer5u1fa85_layer6u1fa85_layer7u1fa85_layer8u1fa85_layer9u1fa86_layer0u1fa86_layer1u1fa86_layer10u1fa86_layer11u1fa86_layer12u1fa86_layer13u1fa86_layer14u1fa86_layer15u1fa86_layer16u1fa86_layer2u1fa86_layer3u1fa86_layer4u1fa86_layer5u1fa86_layer6u1fa86_layer7u1fa86_layer8u1fa86_layer9u1fa90_layer0u1fa90_layer1u1fa90_layer2u1fa90_layer3u1fa91_layer0u1fa91_layer1u1fa91_layer2u1fa91_layer3u1fa91_layer4u1fa91_layer5u1fa91_layer6u1fa91_layer7u1fa92_layer0u1fa92_layer1u1fa92_layer2u1fa92_layer3u1fa92_layer4u1fa92_layer5u1fa92_layer6u1fa93_layer0u1fa93_layer1u1fa93_layer2u1fa94_layer0u1fa94_layer1u1fa94_layer2u1fa94_layer3u1fa94_layer4u1fa94_layer5u1fa95_layer0u1fa95_layer1u1fa95_layer2u1fa95_layer3u1fa95_layer4u1fa95_layer5u1fa95_layer6u1fa96_layer0u1fa96_layer1u1fa96_layer2u1fa96_layer3u1fa96_layer4u1fa96_layer5u1fa96_layer6u1fa97_layer0u1fa97_layer1u1fa97_layer2u1fa97_layer3u1fa97_layer4u1fa97_layer5u1fa97_layer6u1fa98_layer0u1fa98_layer1u1fa98_layer10u1fa98_layer2u1fa98_layer3u1fa98_layer4u1fa98_layer5u1fa98_layer6u1fa98_layer7u1fa98_layer8u1fa98_layer9u1fa99_layer0u1fa99_layer1u1fa99_layer10u1fa99_layer11u1fa99_layer12u1fa99_layer3u1fa99_layer4u1fa99_layer5u1fa99_layer6u1fa99_layer7u1fa99_layer8u1fa99_layer9u1fa9a_layer0u1fa9a_layer1u1fa9a_layer2u1fa9a_layer3u1fa9a_layer4u1fa9b_layer0u1fa9b_layer1u1fa9b_layer2u1fa9b_layer3u1fa9b_layer4u1fa9b_layer5u1fa9b_layer6u1fa9c_layer0u1fa9c_layer1u1fa9c_layer2u1fa9c_layer3u1fa9c_layer4u1fa9c_layer5u1fa9c_layer6u1fa9c_layer7u1fa9d_layer0u1fa9d_layer1u1fa9d_layer2u1fa9d_layer3u1fa9d_layer4u1fa9d_layer5u1fa9d_layer6u1fa9d_layer7u1fa9e_layer0u1fa9e_layer1u1fa9e_layer2u1fa9e_layer3u1fa9e_layer4u1fa9e_layer5u1fa9e_layer6u1fa9e_layer7u1fa9e_layer8u1fa9f_layer0u1fa9f_layer1u1fa9f_layer2u1fa9f_layer3u1fa9f_layer4u1fa9f_layer5u1faa0_layer0u1faa0_layer1u1faa0_layer2u1faa0_layer3u1faa0_layer4u1faa1_layer0u1faa1_layer1u1faa1_layer2u1faa1_layer3u1faa2_layer0u1faa2_layer1u1faa2_layer2u1faa3_layer0u1faa3_layer1u1faa3_layer2u1faa3_layer3u1faa3_layer4u1faa3_layer5u1faa3_layer6u1faa4_layer0u1faa4_layer1u1faa4_layer2u1faa4_layer3u1faa4_layer4u1faa4_layer5u1faa4_layer6u1faa4_layer7u1faa4_layer8u1faa4_layer9u1faa5_layer0u1faa5_layer1u1faa5_layer2u1faa5_layer3u1faa6_layer0u1faa6_layer1u1faa6_layer10u1faa6_layer2u1faa6_layer3u1faa6_layer4u1faa6_layer5u1faa6_layer6u1faa6_layer7u1faa6_layer8u1faa6_layer9u1faa7_layer0u1faa7_layer1u1faa7_layer2u1faa7_layer3u1faa8_layer0u1faa8_layer1u1faa8_layer2u1faa8_layer3u1faa8_layer4u1faa8_layer5u1faa8_layer6u1faa8_layer7u1faa8_layer8u1fab0_layer0u1fab0_layer1u1fab0_layer2u1fab0_layer3u1fab0_layer4u1fab0_layer5u1fab0_layer6u1fab0_layer7u1fab1_layer0u1fab1_layer1u1fab1_layer2u1fab1_layer3u1fab1_layer4u1fab2_layer0u1fab2_layer1u1fab2_layer2u1fab2_layer3u1fab2_layer4u1fab2_layer5u1fab2_layer6u1fab2_layer7u1fab2_layer8u1fab2_layer9u1fab3_layer0u1fab3_layer1u1fab3_layer2u1fab3_layer3u1fab3_layer4u1fab3_layer5u1fab3_layer6u1fab3_layer7u1fab3_layer8u1fab4_layer0u1fab4_layer1u1fab4_layer10u1fab4_layer11u1fab4_layer12u1fab4_layer13u1fab4_layer14u1fab4_layer15u1fab4_layer16u1fab4_layer17u1fab4_layer18u1fab4_layer19u1fab4_layer2u1fab4_layer20u1fab4_layer21u1fab4_layer22u1fab4_layer23u1fab4_layer24u1fab4_layer25u1fab4_layer26u1fab4_layer27u1fab4_layer28u1fab4_layer29u1fab4_layer3u1fab4_layer30u1fab4_layer31u1fab4_layer32u1fab4_layer33u1fab4_layer34u1fab4_layer35u1fab4_layer36u1fab4_layer37u1fab4_layer38u1fab4_layer39u1fab4_layer4u1fab4_layer40u1fab4_layer41u1fab4_layer42u1fab4_layer43u1fab4_layer5u1fab4_layer6u1fab4_layer7u1fab4_layer8u1fab4_layer9u1fab5_layer0u1fab5_layer1u1fab5_layer2u1fab5_layer3u1fab5_layer4u1fab5_layer5u1fab5_layer6u1fab5_layer7u1fab5_layer8u1fab6_layer0u1fab6_layer1u1fab6_layer2u1fab6_layer3u1fab6_layer4u1fac0_layer0u1fac0_layer1u1fac0_layer10u1fac0_layer11u1fac0_layer2u1fac0_layer3u1fac0_layer4u1fac0_layer5u1fac0_layer6u1fac0_layer7u1fac0_layer8u1fac0_layer9u1fac1_layer0u1fac1_layer1u1fac1_layer2u1fac1_layer3u1fac2_layer0u1fac2_layer1u1fac2_layer2u1fac2_layer3u1fac2_layer4u1fac2_layer5u1fad0_layer0u1fad0_layer1u1fad0_layer10u1fad0_layer11u1fad0_layer2u1fad0_layer3u1fad0_layer4u1fad0_layer5u1fad0_layer6u1fad0_layer7u1fad0_layer8u1fad0_layer9u1fad1_layer0u1fad1_layer1u1fad1_layer2u1fad1_layer3u1fad2_layer0u1fad2_layer1u1fad2_layer2u1fad2_layer3u1fad2_layer4u1fad2_layer5u1fad2_layer6u1fad3_layer1u1fad3_layer2u1fad3_layer3u1fad3_layer4u1fad3_layer5u1fad3_layer6u1fad4_layer0u1fad4_layer1u1fad4_layer10u1fad4_layer11u1fad4_layer12u1fad4_layer13u1fad4_layer14u1fad4_layer15u1fad4_layer2u1fad4_layer3u1fad4_layer4u1fad4_layer5u1fad4_layer6u1fad4_layer7u1fad4_layer8u1fad4_layer9u1fad5_layer0u1fad5_layer1u1fad5_layer10u1fad5_layer11u1fad5_layer12u1fad5_layer13u1fad5_layer14u1fad5_layer15u1fad5_layer16u1fad5_layer17u1fad5_layer18u1fad5_layer19u1fad5_layer2u1fad5_layer3u1fad5_layer4u1fad5_layer5u1fad5_layer6u1fad5_layer7u1fad5_layer8u1fad5_layer9u1fad6_layer0u1fad6_layer1u1fad6_layer2u1fad6_layer3u1fad6_layer4u203c_layer0u2049_layer0u2122_layer0u2139_layer0u2139_layer1u2194_layer1u2194_layer2u2195_layer1u2195_layer2u2196_layer1u2196_layer2u2197_layer0u2197_layer1u2197_layer2u2198_layer1u2198_layer2u2199_layer1u2199_layer2u21a9_layer1u21aa_layer1u23-fe0f-20e3_layer1u231a_layer0u231a_layer1u231a_layer2u231a_layer3u231a_layer4u231b_layer0u231b_layer1u231b_layer2u2328_layer0u2328_layer1u23_fe0f_20e3u23cf_layer1u23e9_layer1u23ea_layer1u23eb_layer1u23ec_layer1u23ed_layer1u23ee_layer1u23ef_layer1u23f0_layer0u23f0_layer1u23f0_layer2u23f0_layer3u23f0_layer4u23f0_layer5u23f0_layer6u23f1_layer0u23f1_layer1u23f1_layer2u23f1_layer3u23f1_layer4u23f1_layer5u23f2_layer0u23f2_layer2u23f2_layer3u23f2_layer4u23f3_layer1u23f8_layer1u23f9_layer1u23fa_layer1u25aa_layer0u25b6_layer1u25c0_layer1u25fd_layer0u2600_layer0u2601_layer0u2601_layer1u2602_layer0u2602_layer1u2602_layer2u2602_layer3u2603_layer0u2603_layer1u2603_layer2u2603_layer3u2603_layer4u2603_layer5u2603_layer6u2603_layer7u2603_layer8u2604_layer0u2604_layer1u2604_layer2u2604_layer3u260e_layer0u260e_layer1u260e_layer2u2611_layer1u2614_layer4u2615_layer3u2615_layer5u2618_layer0u261d-1f3fb_layer0u261d-1f3fb_layer1u261d-1f3fb_layer2u261d_1f3fbu261d_1f3fcu261d_1f3fdu261d_1f3feu261d_1f3ffu2620_layer0u2620_layer1u2620_layer2u2620_layer3u2622_layer1u2623_layer1u2623_layer2u2626_layer1u2626_layer2u262a_layer1u262a_layer2u262a_layer3u262e_layer1u262f_layer1u262f_layer2u262f_layer3u2638_layer1u2639_layer1u263a_layer1u263a_layer2u263a_layer3u2640_layer1u2640_layer2u2640_layer3u2642_layer1u2642_layer2u2648_layer1u2649_layer1u2649_layer2u264a_layer1u264a_layer2u264a_layer3u264b_layer1u264b_layer2u264c_layer1u264c_layer2u264d_layer1u264e_layer1u264f_layer1u264f_layer2u2650_layer1u2651_layer1u2652_layer1u2653_layer1u265f_layer0u265f_layer1u2660_layer0u2663_layer0u2665_layer0u2666_layer0u2668_layer0u2668_layer1u2668_layer2u2668_layer3u267b_layer0u267b_layer1u267b_layer2u267b_layer3u267b_layer4u267e_layer1u267f_layer1u267f_layer2u2692_layer0u2692_layer1u2692_layer3u2692_layer4u2692_layer5u2692_layer6u2693_layer0u2693_layer1u2694_layer0u2694_layer1u2694_layer10u2694_layer11u2694_layer12u2694_layer13u2694_layer14u2694_layer15u2694_layer2u2694_layer3u2694_layer4u2694_layer5u2694_layer6u2694_layer7u2694_layer8u2694_layer9u2695_layer1u2695_layer2u2695_layer3u2695_layer4u2696_layer0u2696_layer1u2696_layer2u2696_layer3u2696_layer4u2696_layer5u2696_layer6u2697_layer0u2697_layer1u2697_layer2u2697_layer3u2697_layer4u2697_layer5u2697_layer6u2697_layer7u2697_layer8u2699_layer0u269b_layer1u269b_layer2u269c_layer0u269c_layer1u269c_layer2u269c_layer3u26a0_layer0u26a0_layer1u26a1_layer0u26a7_layer1u26a7_layer2u26a7_layer3u26a7_layer4u26b0_layer0u26b0_layer1u26b0_layer2u26b0_layer3u26b0_layer4u26b0_layer5u26b1_layer0u26b1_layer1u26b1_layer2u26b1_layer3u26b1_layer4u26b1_layer5u26bd_layer1u26bd_layer2u26be_layer2u26c5_layer0u26c5_layer1u26c5_layer2u26c8_layer2u26ce_layer1u26ce_layer2u26cf_layer0u26cf_layer1u26cf_layer2u26d1_layer0u26d1_layer1u26d1_layer2u26d1_layer3u26d1_layer4u26d1_layer5u26d3_layer0u26d3_layer1u26d3_layer10u26d3_layer11u26d3_layer12u26d3_layer13u26d3_layer14u26d3_layer15u26d3_layer2u26d3_layer3u26d3_layer4u26d3_layer5u26d3_layer6u26d3_layer7u26d3_layer8u26d3_layer9u26d4_layer1u26e9_layer0u26e9_layer1u26e9_layer2u26e9_layer3u26f0_layer1u26f0_layer3u26f1_layer0u26f1_layer1u26f1_layer2u26f1_layer3u26f1_layer4u26f2_layer0u26f2_layer1u26f2_layer10u26f2_layer11u26f2_layer12u26f2_layer14u26f2_layer15u26f2_layer16u26f2_layer2u26f2_layer3u26f2_layer4u26f2_layer5u26f2_layer6u26f2_layer7u26f2_layer8u26f2_layer9u26f3_layer0u26f3_layer1u26f3_layer2u26f3_layer3u26f3_layer4u26f4_layer0u26f4_layer1u26f4_layer10u26f4_layer11u26f4_layer12u26f4_layer2u26f4_layer3u26f4_layer4u26f4_layer5u26f4_layer6u26f4_layer7u26f4_layer8u26f4_layer9u26f5_layer0u26f5_layer1u26f5_layer3u26f5_layer4u26f5_layer5u26f7-1f3fb_layer1u26f7-1f3fb_layer10u26f7-1f3fb_layer11u26f7-1f3fb_layer12u26f7-1f3fb_layer13u26f7-1f3fb_layer14u26f7-1f3fb_layer15u26f7-1f3fb_layer16u26f7-1f3fb_layer17u26f7-1f3fb_layer18u26f7-1f3fb_layer19u26f7-1f3fb_layer2u26f7-1f3fb_layer20u26f7-1f3fb_layer3u26f7-1f3fb_layer4u26f7-1f3fb_layer5u26f7-1f3fb_layer6u26f7-1f3fb_layer7u26f7-1f3fb_layer8u26f7-1f3fb_layer9u26f7_1f3fbu26f7_1f3fcu26f7_1f3fdu26f7_1f3feu26f7_1f3ffu26f8_layer0u26f8_layer1u26f8_layer2u26f8_layer3u26f8_layer4!u26f9-1f3fb-200d-2640-fe0f_layer0!u26f9-1f3fb-200d-2640-fe0f_layer1"u26f9-1f3fb-200d-2640-fe0f_layer10"u26f9-1f3fb-200d-2640-fe0f_layer11"u26f9-1f3fb-200d-2640-fe0f_layer12!u26f9-1f3fb-200d-2640-fe0f_layer2!u26f9-1f3fb-200d-2640-fe0f_layer3!u26f9-1f3fb-200d-2640-fe0f_layer4!u26f9-1f3fb-200d-2640-fe0f_layer5!u26f9-1f3fb-200d-2640-fe0f_layer6!u26f9-1f3fb-200d-2640-fe0f_layer7!u26f9-1f3fb-200d-2640-fe0f_layer8!u26f9-1f3fb-200d-2640-fe0f_layer9!u26f9-1f3fb-200d-2642-fe0f_layer0!u26f9-1f3fb-200d-2642-fe0f_layer1!u26f9-1f3fb-200d-2642-fe0f_layer2!u26f9-1f3fb-200d-2642-fe0f_layer3!u26f9-1f3fb-200d-2642-fe0f_layer4!u26f9-1f3fb-200d-2642-fe0f_layer5!u26f9-1f3fb-200d-2642-fe0f_layer6!u26f9-1f3fb-200d-2642-fe0f_layer7!u26f9-1f3fb-200d-2642-fe0f_layer8!u26f9-1f3fb-200d-2642-fe0f_layer9u26f9-1f3fb_layer0u26f9-1f3fb_layer1u26f9-1f3fb_layer5u26f9-1f3fb_layer6u26f9-1f3fb_layer7u26f9-1f3fb_layer8u26f9-1f3fb_layer9 u26f9-fe0f-200d-2640-fe0f_layer8 u26f9-fe0f-200d-2642-fe0f_layer7u26f9_1f3fbu26f9_1f3fb_200d_2640_fe0fu26f9_1f3fb_200d_2642_fe0fu26f9_1f3fcu26f9_1f3fc_200d_2640_fe0fu26f9_1f3fc_200d_2642_fe0fu26f9_1f3fdu26f9_1f3fd_200d_2640_fe0fu26f9_1f3fd_200d_2642_fe0fu26f9_1f3feu26f9_1f3fe_200d_2640_fe0fu26f9_1f3fe_200d_2642_fe0fu26f9_1f3ffu26f9_1f3ff_200d_2640_fe0fu26f9_1f3ff_200d_2642_fe0fu26f9_fe0f_200d_2640_fe0fu26f9_fe0f_200d_2642_fe0fu26f9_layer8u26fa_layer0u26fa_layer1u26fa_layer2u26fa_layer3u26fa_layer4u26fd_layer0u26fd_layer1u26fd_layer2u26fd_layer3u26fd_layer4u26fd_layer5u26fd_layer6u26fd_layer7u2702_layer0u2702_layer1u2702_layer2u2702_layer3u2702_layer4u2708_layer0u2708_layer1u2708_layer2u2708_layer3u2709_layer1u270a-1f3fb_layer0u270a-1f3fb_layer1u270a-1f3fb_layer2u270a_1f3fbu270a_1f3fcu270a_1f3fdu270a_1f3feu270a_1f3ffu270b-1f3fb_layer0u270b-1f3fb_layer1u270b-1f3fb_layer2u270b_1f3fbu270b_1f3fcu270b_1f3fdu270b_1f3feu270b_1f3ffu270c-1f3fb_layer0u270c-1f3fb_layer1u270c_1f3fbu270c_1f3fcu270c_1f3fdu270c_1f3feu270c_1f3ffu270d-1f3fb_layer0u270d-1f3fb_layer1u270d-1f3fb_layer10u270d-1f3fb_layer11u270d-1f3fb_layer2u270d-1f3fb_layer3u270d-1f3fb_layer4u270d-1f3fb_layer5u270d-1f3fb_layer6u270d-1f3fb_layer7u270d-1f3fb_layer8u270d-1f3fb_layer9u270d_1f3fbu270d_1f3fcu270d_1f3fdu270d_1f3feu270d_1f3ffu270f_layer0u270f_layer1u270f_layer2u270f_layer3u270f_layer4u270f_layer5u2712_layer0u2712_layer2u2712_layer3u2714_layer0u2716_layer0u271d_layer1u2721_layer1u2728_layer0u2728_layer1u2733_layer1u2734_layer0u2744_layer0u2744_layer1u2744_layer2u2747_layer2u274c_layer0u274e_layer1u2753_layer0u2755_layer0u2757_layer0u2763_layer0u2764-fe0f-200d-1f525_layer0u2764-fe0f-200d-1f525_layer1u2764-fe0f-200d-1f525_layer2u2764-fe0f-200d-1f525_layer3u2764-fe0f-200d-1fa79_layer0u2764-fe0f-200d-1fa79_layer1u2764-fe0f-200d-1fa79_layer2u2764-fe0f-200d-1fa79_layer3u2764_fe0f_200d_1f525u2764_fe0f_200d_1fa79u2795_layer0u2796_layer0u2797_layer0u27a1_layer1u27b0_layer0u27bf_layer0u27bf_layer1u2934_layer1u2935_layer1u2a-fe0f-20e3_layer0u2a-fe0f-20e3_layer1u2a-fe0f-20e3_layer2u2a-fe0f-20e3_layer3u2a_fe0f_20e3u2b05_layer1u2b06_layer1u2b07_layer1u2b50_layer0u2b55_layer0u30-fe0f-20e3_layer1u3030_layer0u303d_layer0u30_fe0f_20e3u31-fe0f-20e3_layer1u31_fe0f_20e3u32-fe0f-20e3_layer1u3297_layer0u3297_layer1u3299_layer1u32_fe0f_20e3u33-fe0f-20e3_layer1u33_fe0f_20e3u34-fe0f-20e3_layer1u34_fe0f_20e3u35-fe0f-20e3_layer1u35_fe0f_20e3u36-fe0f-20e3_layer1u36_fe0f_20e3u37-fe0f-20e3_layer1u37_fe0f_20e3u38-fe0f-20e3_layer1u38_fe0f_20e3u39-fe0f-20e3_layer1u39_fe0f_20e3
ua9_layer1ue50a_layer0ue50a_layer1ue50a_layer2ue50a_layer3ue50a_layer4ue50a_layer5ue50a_layer6     ÿÿ   ù     Säb                     	                            $  ! '  " )  # +  $ -  % /  & 1  ' 3  ( 5  ) 7  * 9  + @  , F  - K  . N  / P  0 R  1 T  2 V  3 W  4 X  5 Z  6 \  7 ]  8 ^  9 _  : `  ; b  < d  = h 	 > q  ? u  @ x  A z  B   C …  D †  E ‰  F   G   H “  I –  J š  K œ  L    M ¢  N ¤  O ¨  P ¬  Q ¯  R ±  S ´  T ¸  U »  V ¾  W À  X Â  Y Å  Z Ç  [ É  \ Ë  ] Í  ^ Ï  _ Ð  ` Ñ  a Ò  b Ó  c ×  d Ü  e Þ  f á  g è  h ê  i ú  j ÿ  k 	 l  m  n  o  p  q  r  s   t!  u'  v-  w0  x3  y;  z>  {A  |D  }G  ~M  ]  €_  c  ‚i  ƒn  „s  …„  †‰  ‡—  ˆ  ‰²  Š·  ‹Ã  ŒÈ  Ð  ŽÕ  ×  Û  ‘ß  ’â  “å  ”è  •ô  –ú  —þ  ˜ÿ  ™   š  ›  œ    ž	  Ÿ     ¡  ¢  £  ¤  ¥  ¦  §  ¨  ©  ª  «  ¬  ­  ®   ¯"  °$  ±&  ²(  ³*  ´+  µ,  ¶-  ·.  ¸/  ¹0  º2  »4  ½;  ¾=  ¿H  ÀJ  ÁL  ÂN  ÃP  ÄR  ÅT  ÆW  ÇY  È[  É]  Ê_  Ëa  Ìc  Íe  Îg  Ïi  Ðk  Ñm  Òo  Óq  Ôs  Õu  Öw  ×y  Ø{  Ù}  Ú  Û  Üƒ  Ý…  Þ‡  ß‰  à‹  á  â  ã‘  ä“  å•  æ—  ç™  è›  é  êŸ  ë¡  ì£  í¥  î§  ï©  ð«  ñ­  ò¯  ó±  ô³  õµ  ö·  ÷¹  øº  ùÁ  úÄ  ûÉ  üÎ  ýÓ  þ×  ÿÝ  ã æ è ú       	
 
       $ & ) , / 2 5 7 ; > A D H J L N  S !Y 
"c #g $ %š &  '¡ 
(« )® *² +´ ,¶ -¹ .Á /Ä 0Ê 1Í 2Ñ 3Õ 4× 5Û 6Ü 7Ý 8ß 9â :ç ;é <ë =ò >ö ?ú @ý A 
B C D E F G H I! J( K, L/ M1 N4 O7 P; QA RH 
SR TU UZ V_ Wd Xi Yv Zz [| \‚ ]ˆ ^ _— `™ až b£ c§ d­ eµ fÀ gÏ h× iÛ jÜ kâ lí mó nø o p	 	q r 
s  t( u/ v2 w7 x? yB zP 
{Z |_ }o ~s { 
€… 
 ‚• ƒœ „® …¹ †¾ ‡Ä ˆÊ ‰Ñ Š× ‹Û Œá å Žë ï ñ ‘ý ’
 “ 
”! •$ –) —, ˜/ ™4 š7 	›@ œB F žJ ŸV 	 _ ¡e ¢h £m ¤s ¥v ¦w §y ¨~ 
©ˆ ª‹ « ¬— ­™ ®œ ¯Ÿ °¦ ±¨ ²® ³¼ ´Ç µÒ ¶× ·Û ¸ð ¹ò ºõ »û ¼ ½( ¾8 ¿C ÀH ÁJ ÂM ÃP ÄT 
Å^ Æo Çw È} É‰ Ê Ë” Ì› 	Í¤ 	Î­ 	Ï¶ 
ÐÀ ÑÈ ÒÓ 	ÓÜ 	Ôå 	Õî Öö 
×  Ø 	Ù Ú Û" Ü. Ý: Þ@ ßC àJ 	áS âX ã] äb åe æq ç| è é€ ê ë‚ ìƒ í„ î‹ ï‘ ð” ñ— ò› óž ô¢ õª ö± 	÷º ø¿ ùÂ úÆ ûÉ üÎ ýÕ þÚ ÿÞ  â æ ì ÷ ù 	  	 	 	 		 
	 	 	 	! 	& 	- 	2 	7 	< 	@ 		I 	M 	P 	] 	_ 	a 	e 	m 	s 	z 	€ 	‡  	 !	’ "	˜ #	Ÿ $	§ %	« &	° '	· (	¼ )	Â 
*	Ì +	Î ,	Ï -	Ö 	.	ß /	å 0	è 1	ë 2	î 3	ñ 4	ò 5	ó 6	ô 7	õ 8	ø 9	ý :	ÿ ;
 <
 =
 >
	 
?
 @
 A
 B
$ C
( D
, E
/ F
6 G
8 H
; I
@ J
C K
F L
J M
P N
R O
U P
X Q
Y R
Z S
\ T
a 	U
j V
o W
u X
‡ Y
ž Z
³ [
Í \
Û ]
ð 	^
ù _
þ ` a b c d! e/ f7 gB hH iK jP kR lS mV nX 
ob pn 
qx r} s‚ 	t‹ 
u• v› w£ x¥ y¦ z« {° |µ }» ~Ã Ï €Ö Ø ‚Ú ƒÛ „Ý …à †å ‡æ ˆç ‰è Šé ‹î Œð ò Žõ ú û ‘  ’ “ ” • – — ˜ ™ š › œ  ž Ÿ   ¡! ¢( £/ ¤6 ¥= 	¦F §I ¨[ ©` ªd «i ¬l ­o ®r ¯t °v ±y ²| ³ ´ˆ µ ¶ ·“ ¸˜ ¹ º¡ »¤ ¼¥ ½§ ¾¨ ¿­ Àµ Á¼ ÂÃ ÃÉ ÄÎ ÅÔ ÆÚ Çà Èì Éî Êò 	Ëû Ìü Í Î Ï Ð Ñ Ò Ó Ô% Õ* Ö/ ×4 Ø9 Ù> ÚE ÛI ÜP ÝS ÞW ßY à[ á] â` ãd äf åm æt çv è{ é ê„ ë† ìš íž î  ï¤ ð¦ ñ¨ ò¬ ó­ ô° õ² ö´ ÷¸ ø¼ ù¾ úÂ ûÆ üÊ ýÍ þÎ ÿÐ  Ò Ô × 	à â ä å æ ç 	è 
é ì î ð ò ô ö ø ú ÿ    
  
   ' + / 2 4 6  8 !9 ": #; $< %= &> '? (@ )B *D +G ,L -S .Z /g 0i 1m 2q 3u 4y 5} 6 7… 8‰ 9 :‘ ;• <™ = >¡ ?¥ @© A­ B° C´ D¸ E¼ FÀ GÄ HÈ IÍ JÕ KØ Lê M÷ Nø 
O P Q 
R S T U V" W& X( Y+ Z/ [0 \5 	]> ^@ _E 
`O aV 
b` cd df 	eo fu g| hƒ i‰ j‘ k“ l” m– n o¤ pª q± r· sº t¾ uÁ vÅ wÉ xÌ yÏ zÓ {Ö |Ü }ß ~â å €é ë ‚î ƒñ „ó …õ †÷ ‡ù ˆü ‰þ Š  ‹ Œ 	 Ž   ‘ ’ “ ”! •# –% —) ˜+ ™/ š2 ›4 œ7 ; ž> ŸA  E ¡I ¢O £Q ¤S ¥X ¦] §` ¨e ©i ªk «m ¬p ­w ® ¯† °Ž ±• ²› ³¢ ´ª µ² ¶´ ·¶ ¸¸ ¹» ºÇ »Í ¼Ô ½ß 
¾é ¿õ 
Àÿ Á Â Ã 	Ä Å! 
Æ+ Ç9 ÈA 	ÉJ ÊQ 
Ë[ 
Ìe 	Ín Î Ï Ðš Ñ¥ Ò² Ó½ ÔÄ ÕË ÖÑ ×Ù Øà 	Ùé Úï Ûú Üþ Ý Þ ß à á% 	â. 
ã8 	äA åI æQ ç^ 
èh és êw ë{ ì~ íƒ î… ï‹ ðŒ ñ ò“ ó— ô› õž ö¢ ÷© ø­ ù¼ úÌ 	ûÕ üØ ýÜ þÞ ÿà  â ä ê ì ï ö û ÿ  	 
 
 	  # ( + - 1 < 
F I L O R _ 	h o } 	† 	 š  ¢ 
!¬ 	"µ #¹ 	$Â %Ï &â 'î (õ 
)ÿ *  + , - . / 0 1 2 3	 4
 5 
6 7 8 9 : ;  <( =. >2 ?7 @B AF BJ CQ DS EX F] Gb He Ij Jn Ky L| M N„ O‡ P˜ Qœ RŸ S£ T« U¯ V³ W¶ X¼ YÃ ZÕ [â \ç ]õ ^û _ ` 	a b+ c9 d@ eU f[ gg 
hq iy j… k‰ l” m• n™ o p¡ q¥ rª 	s³ t¶ u½ vÀ wÆ xÉ yÏ 	zØ {Þ |à }ã ~æ ò €ù 
 ‚ 	ƒ „ 	… †( ‡5 ˆ< ‰A ŠE ‹J ŒX c Žp { ~ ‘… 	’Ž “  ”¥ •© 	–² 	—» ˜¿ ™Â šÅ ›Ò œÖ Ü žâ Ÿò  ú 	¡ ¢ 	£ ¤# ¥) ¦, §; ¨F ©N ªU «] ¬a ­i 
®s ¯y °„ ±‰ 
²“ ³™ ´Ÿ µ¤ ¶¬ ·± ¸¹ ¹¿ 	ºÈ 	»Ñ ¼Õ ½à ¾ç ¿í Àò Áÿ Â Ã Ä Å8 ÆC ÇN ÈR ÉX Ê_ Ëm 	Ìv Í„ 	Î Ï‘ Ðœ 	Ñ¥ 
Ò¯ Ó´ ÔÀ ÕÌ ÖÐ ×Ò ØÔ ÙÕ Ú× ÛÚ ÜÜ ÝÞ Þà ßí àø áý â ã ä& å. 
æ8 ç< èH éM 
êW ëZ ì_ íj 	îs ï{ ð† ñŽ òœ 
ó¦ ô® õ¹ ö¿ ÷Ã øÇ ùÌ úÒ ûÚ üí ýþ þ
 ÿ  " / ; 
E T ` e f k 	p 
u y 	‚ ˆ 
’ “ ˜ Ÿ ± ¹ À Ì Ô 	Ý á é ð õ ü ÿ     	!& "3 #7 $9 %= &D 'G (K )O *T +U ,Y -\ .b /g 0w 1{ 2€ !3¡ 4² 5¶ 6¾ 7Å 8È 9Î 	:× ;Þ <å =ð >ý ? @	 A B 	C" D( E- F1 G4 H; 
IE JI KT LX 	Ma Ni On 
Px 	Q ,R­ 	S¶ T» UÇ VË WÑ XÝ Yá Zè [ï \ÿ ]  )A L P ] b p s 	v 
{ } … ’ ” š ž ¡ ¤¦ ¥© ¦­ §¯ ¨² ©µ ª¸ «º ¬À ­Ã ®Î ¯á °ç ± ² ³ ´ µ ¶ · ¸! +ôL õO öS ÷V ø[ ù^ ú` ûc üi ým þp ÿr  u x ƒ ‡ ‹ Ž “ — Dš E F¯ G³ Hµ IÅ JÜ xà yè zù {ü | }	 ~  	€ ¦  §# ¨6 ©I ªK «O )R *U +Y ,_ -d .g /j 0n 1 2ƒ 3‡ 4Š 5Ž 6Ÿ 7£ 8½ 9Ì :Ý ;á Uæ Vë Wñ Xô Yû Z 	 }  ~    €    $ ‚ ) ƒ 0 „ B … G † N ‡ Q • T – \ — _ ˜ d Ö f × q Ø v Ù z 
Ú „ Û ‹ Ü  Ý ” Þ ˜ ß œ à ® 
ÿ ¸ 	  » 	 ¿ 	 Ã 	 Ê 	 Ï 	 Ó 	 Ø 	 Û 	 Þ 		 à 	o å 	p ç 	q é 
	r ó 	s û 	t þ 	u! 	v! 	w! 	x! 	y! 	z! 	{! 	|!3 	}!7 	~!; 	!H 	€!S 	!W 	‚!Z 	ƒ!^ 
	„!h 	…!m 		¬!v 	­!} 	®!… 	¯!ˆ 	°!Œ 	±!Ž 	²! 	³!  	´!£ 	µ!¦ 	¶!© 	·!° 	¾!· 
!¼ 
!¿ 
!Á 
!Ç 
	!Ë 

!Ð 
!Ô 
!Ö 
!â 
!ú 
!þ 
" 
"
 
" 
" 
*" 
+" 
,"" 
-"/ 
."2 
Ÿ"8 	
 "A 	
¡"J 
¢"O 
£"S 
¤"U 
¥"Y 
¦"k 
§"r 
¨"u 
©"| 
ª" 
«"Œ 
¬" 
­"’ 
®"– 
¯"œ 
°"  
±"± 
²"½ 
³"Á "Î "ì # # # # #  # !# "#" ##1 $#5 %#8 &#: '#= 
(#G )#K S#O T#Q 
U#[ V#_ W#p X#t Y#{ ‘#€ ’# “#¡ ”#¥ •#² –#¹ —#» #Á ž#Ç ¢#Ê ·#Í ¸#Ð Ì#â Í#è Î#ì 	[#õ 
\#ÿ 
]$	 
^$ 
_$ 
³$' ´$5 µ$C ¶$Q ·$_ Õ$m Ö$x ×$„ 
Ø$Ž Ù$™ Ú$¥ 
Û$¯ Ü$º Ý$Æ 
Þ$Ð ß$Û à$ç 
á$ñ â$ü ã% 
ä% å% 
ÿ%(  %3 	%< 	%E %P 
%Z 
%d %o 
%y 
%ƒ 	%Ž 

%˜ 
%¢ %­ 
%· 
%Á 
%Ë 
.%Õ /%ê 0%ÿ 1& 2&) A&> B&D C&I D&N E&T F&Y G&^ H&d I&i J&n K&t L&y M&~ N&„ O&‰ P&Ž Q&“ „&˜ …&± †&Ì ‡&å ˆ&þ ‰' Š'2 ‹'K Œ'f ' Ž'˜ '³ 'Ì ‘'å ’(  “( ”(4 ½(M ¾(a ¿(p À(€ Á(” Â(£ Ã(³ Ä(Ç Å(Ö Æ(æ Ç(ú È)	 É) Ê)- Ë)< Ì)L Í)[ ò)k ó)q þ)v ÿ){  )} ) P)„ œ)Š n)š 	)£ š)§ ›)ª œ)­ )° ž)³ £)¶ ¤)¹ ¥)¼ ¦)¿ §)Â ¯)Å °)Æ ±)Ç ²)È ³)É ¶)Ê ·)Ë ¸)Ì ¹)Í º)Î ¼)Ï ½)Ð ¾)Ñ ¿)Ò À)Ó Â)Ô Ã)Õ Ä)Ö Å)× Æ)Ø Ê)Ù Ë)Ü Ì)ß Í)â Î)å Ô)è Õ)í Ö)ò ×)÷ Ø)ü Û* Ü* Ý* Þ* ß*	 â* ã* ä* å* æ* é* ê* ë* ì* í* ñ* ò*" ó*% ô*( õ*+ ý*. þ*1 ÿ*4  *7 *: [*= \*B ]*G ^*L _*Q j*V 	k*_ 	l*h 	m*q 	n*z 	e*ƒ f*ˆ g*— h*¦ i*¶ 
j*À k*Í l*Ý m*ë n*ù o+ p+ q+( r+7 s+F t+X u+f v+} w+” x+« y+Â z+Ñ {+Õ |+Ù }+Ü ~+à +ú €, , ‚,- ƒ,= „,D …,Q †,^ ‡,k ˆ,x ‰,} 	Š,† 	‹, 	Œ,˜ 	,¡ Ž,¦ ,µ ,Ä ‘,Ô 
’,Þ “,ë ”,û •-	 –- —-* ˜-5 ™-F š-U ›-d œ-v -… ž-› Ÿ-²  -É ¡-à ¢-ï £-ó ¤-÷ ¥-ú ¦-þ §. ¨.2 ©.> ª.N «.^ ¬.k ­.r ®. ¯.Œ °.™ 	±.¢ ².§ 	³.° 	´.¹ 	µ.Â ¶.Ç ·.Ö ¸.å ¹.õ 
º.ÿ »/ ¼/ ½/* ¾/8 ¿/K À/V Á/g Â/v Ã/… Ä/— Å/¦ Æ/¼ Ç/Ó È/ê É0 Ê0 Ë0 Ì0 Í0 Î0 Ï0: Ð0S Ñ0_ Ò0o Ó0 Ô0Œ Õ0™ Ö0  ×0­ Ø0º 	Ù0Ã 	Ú0Ì Û0Ñ 	Ü0Ú 	Ý0ã Þ0è ß0÷ à1 á1 
â1  ã1- ä1= å1K æ1Y ç1l è1w é1ˆ ê1— ë1¦ ì1¸ í1Ç î1Ý ï1ô ð2 ñ2" ò21 ó25 ô29 õ2< ö2@ ÷2[ ø2t ù2€ ú2‘ û2¡ ü2® ý2» þ2È ÿ2Ï  2Ü 	2å 	2î 	2÷ 2ü 	3 3
 3 3( 	38 

3B 3O 3_ 3m 3{ 3Ž 3™ 3ª 3¹ 3È 3Û 3ê 4  4 4. 4E 4T 4X 4\ 4_ 4c 4~  4— !4£ "4´ #4Ä $4Ñ %4Þ &4ë '4ø (4ÿ 	)5 	*5 	+5 	,5# -5( .57 /5F 05V 
15` 25m 35} 45‹ 55™ 65¬ 75¸ 85É 95Ö :5å ;5ö <6 =6 >63 ?6H @6_ A6r B6Š C6Ÿ D6µ E6Í F6Ø G6é H6ø I7 J7 K7( L77 M7; N7? O7B P7F Q7a R7z S7† T7– U7¦ V7­ Å7² Æ7¸ Ç7Ç È7× É7ê Ê7÷ Ë8 Ì8 Í8( Î89 Ï8O Ð8] Ñ8m Ò8} Ó8 Ô8£ Õ8² Ö8Ë ×8ä Ø8ý Ù9 Ú92 Û9N Ü9j Ý9† Þ9– ß9œ à9¢ á9¦ â9¬ ã9Ç ä9á å9ð æ9ÿ ç: è: é:, ê:: ë:H ì:V í:^ î:m ï:| ð:‹ ñ:š ò:  	ó:© 	ô:² 	õ:» 	ö:Ä 	÷:Í 	ø:Ö 	ù:ß 	ú:è 	û:ñ ü:÷ ý; þ; ÿ;)  ;6 ;F ;Z ;i ;{ ;‘ ;Ÿ ;¯ ;¿ 	;Ñ 
;å ;ö < <' <@ <Y <t < <¬ <È <Ø <Þ <ä <è <î =
 =$ =3 =B =T =b =o  =} !=‹ "=™ #=¨ $=° %=¿ &=Î '=Ý 	(=æ )=ì 	*=õ 	+=þ 	,> 	-> 	.> 	/>" 	0>+ 	1>4 2>: 3>I 4>Y 5>l 6>y 7>‰ 8> 9>¬ :>¾ ;>Ô <>â =>ò >? ?? @?( A?9 B?Q C?j D?ƒ E?œ F?· G?Ó H?ï I@ J@ K@! L@' M@+ N@1 O@M P@g Q@v R@… S@— T@¥ U@³ V@À W@Î X@Ü Y@ë Z@ú [A \A ]A  	^A) 	_A2 `A8 	aAA 	bAJ 	cAS 	dA\ 	eAe 	fAn 	gAw hA} iA jAž kA± lA¾ mAÎ nAâ oAñ pB qB rB' sB7 tBG uBY vBm wB~ xB– yB¯ zBÈ {Bá |Bü }C ~C4 CP €C` Cf ‚Cl ƒCp „Cv …C’ †C¬ ‡C» ˆCÌ ‰CÞ ŠCì ‹Cú ŒD D ŽD# D2 DA ‘DP ’DX “Dg 	”Dp 	•Dy 	–D‚ —Dˆ 	˜D‘ 	™Dš 	šD£ 	›D¬ 	œDµ 	D¾ žDÄ ŸDÔ  Då ¡Dø ¢E £E ¤E( ¥E7 ¦EI §E_ ¨Em ©E} ªE «EŸ ¬E´ ­EÅ ®EÝ ¯Eö °F ±F( ²FC ³F_ ´F{ µF— ¶F§ ·F­ ¸F³ ¹F· ºF½ »FÙ ¼Fó ½G ¾G ¿G% ÀG3 ÁGA ÂGO ÃG] ÄGj ÅGy ÆGˆ ÇG— ÈG¦ ÉG® 	ÊG· 	ËGÀ 	ÌGÉ 	ÍGÒ ÎGØ 	ÏGá 	ÐGê 	ÑGó 	ÒGü 	ÓH ÔH ÕH$ ÖH7 ×HD ØHT ÙHh ÚHw ÛH‰ ÜHŸ ÝH¬ ÞH¾ ßHÌ àHÜ áHî âI ãI äI1 åIH æIa çIo èI éI êI¡ ëIµ ìIÆ íIÖ îIÜ ïIâ ðIæ ñIì òJ óJ" ôJ1 õJ@ öJR ÷J_ øJg ùJm 	Jv J J¤ J» JÒ Jé Jþ K K( K= KR Kk K… KŸ K¹ DKÓ EKá FKò GL  HL IL JL- KL; LLL MLZ NLh OLy PL‡ QL• RL¦ SL´ TLÅ }LÓ ~Lë ªM  	«M	 	¬M 	­M 	®M$ 	¯M- 	°M6 	±M? 	²MH 	³MQ 	´MZ 	µMc 	¶Ml 	·Mu 	¸M~ 	¹M‡ 	ºM 	ÅM™ ÆM ÇM£ ÈM§ ÉM« ÊM± ËMµ ÌM¹ ÍM¿ ÎMÃ ÏMÇ ÐMÍ ÑMÑ ÒMÕ ÓMÛ ÔMß 	ÕMè ÝMí ÞMô ßMû àN áN	 üN ýN 
þN% 	ÿN.  N9 
NC 	NL NW 
Na 	Nj Nu 
N 	Nˆ 	N“ 

N 	N¦ 
N° 	N¹ N¾ NÃ NÈ NÍ !NÒ "NÚ #Nâ $Nê %Nò ,Nú -Nþ .O /O 0O
 VO WO XO) YO5 ZOC [OR \O_ ]Om ^O| _O‰ `O— aO¦ bO³ cOÁ dOÐ eOÝ fOì pOù qP rP	 sP tP ’P! “P& ”P+ •P0 –P5 ±P: 
²PD ³PO 
´PY 
µPc ¶Pn 
·Px 
¸P‚ ¹P 
ºP— 
»P¡ ¼P¬ 
½P¶ 
¾PÀ ¿PË 
ÀPÕ ÁPà 
ãPê äPö åQ æQ çQ èQ# éQ. êQ: ëQE ìQP íQ\ îQg ïQr ðQ~ ñQ‰ òQ” óQŸ þQª 
ÿQ´ 
 Q¾ 
QÈ 
QÒ 
QÜ Qá Qæ Që Qð 0Qõ 	1Qþ 2R 3R 	4R 5R, 6R7 	7R@ 8RM 9RX 	:Ra ;Rn 
<Rx 	=R >RŽ ?R™ @R¦ XR± 
YR» ZRÆ 
[RÐ 
\RÚ ]Rå 
^Rï 
_Rù `S 
aS 
bS cS# 
dS- 
eS7 fSB 
gSL hSW 
Sa Sg ‘Sm ’Ss “Sy ¤S ¥S‹ ¦S— §S£ ¨S¯ ßS» àS¾ áSÁ âSÄ ãSÇ SÊ SÛ Sé Sü  T !T "T/ #TA $TO %Tb &Tt 'T‚ (T• )T§ *Tµ +TÈ ,TÖ ETé FTö GU HU IU JU* KU7 LUD MUQ NU^ OUk PUx QU… RU’ SUŸ TU¬ UU¹ qUÆ 
rUÐ 
sUÚ 
tUä 
uUî 
ŒUø Uú ŽUü Uþ V  ”V •V –V —V ˜V V žV ŸV  V ¡V!  ŒV%   V)  «V+ 	 àV4  áV@  âVM  ãVY  äVe  åVr  æV~  çVŠ  èV—  éV£  êV¯  ëV¼  ìVÈ  íVÔ  îVá  ïVí  ðVú  þW  ÿW ! W !W !W !W& !W, !W2 !W9 !W? !WE !	WL !
WR !WX !W_ !We !Wl !Wr !Wy ! W€ !!Wˆ !"W !#W– !$Wž !%W¥ !&W¬ !'W´ !(W» !)WÂ !*WÉ !+WÐ !,W× !-Wß !.Wæ !PWî 
!QWø !RX 
!SX 
!TX !UX" 
!VX, 
!WX6 !XXA 
!YXK 
!ZXU ![X` 
!\Xj 
!]Xt !^X 
!_X‰ !`X” 
!hXž !iX£ !jX¨ !kX­ !lX² !xX· !yX¾ 	!zXÇ 	!{XÐ !|X× 	!}Xà 	!~Xé !Xð 	!€Xù 	!Y !‚Y	 !ƒY 	!„Y !…Y! 	!†Y* 	!‡Y3 	!ˆY< 	!ŽYE !YL 	!YU !‘Y\ !’Yc 	!“Yl !”Ys !•Yz 	!–Yƒ !—YŠ !˜Y‘ !™Y™ !šY  !›Y§ 	!œY° !Y· 	!žYÀ !¨YÇ 	!©YÐ 	!ªYÙ 	!«Yâ 	!¬Yë 	"æYô 
"çYþ 	"èZ 	"éZ 
"êZ 	"ëZ# 	"ìZ, 
"íZ6 	"îZ? 	"ïZH 
"ðZR 	"ñZ[ 	"òZd 
"óZn 	"ôZw 	"õZ€ 	"öZ‰ 	#HZ’ #IZ¡ #JZ° #KZ¾ #LZÍ #MZÜ #NZê #OZù #P[ #Q[ #R[% #S[4 #T[B #U[Q #V[` #W[n #X[} #[[‹ #\[› #][« #^[º #_[Ê #`[Ú #a[é #b[ù #c\	 #d\ #e\( #f\8 #g\G #h\W #i\g #j\v #k\† #|\• 	#}\ž 
#~\¨ 	#\± 	#€\º 
#\Ä 	#‚\Í 	#ƒ\Ö 
#„\à 	#…\é 	#†\ò 
#‡\ü 	#ˆ] 	#‰] 
#Š] 	#‹]! 
#Œ]+ 	#©]4 #ª]; #«]B #¬]I #­]P #É]W 	#Ê]` 	#Ë]i 	#Ì]r 	#Í]{ 	$¬]„ 
$­]Ž 
$®]˜ 
$¯]¢ 
$°]¬ 
$³]¶ $´]¸ $µ]º $¶]¼ $·]¾ $ä]À $å]Ä $æ]È $ç]Ì $è]Ð $ð]Ô $ñ]Û $ò]â $ó]é $ô]ð $÷]÷ $ø]ù $ù]û $ú]ý $û]ÿ %^ %^ %^ %^ %^ %^ %^ %^$ %^) %^. %^3 %^6 %^9 %^< %^? %"^B %#^G %$^L %%^Q %&^V %Z^[ %[^l %\^| %]^Œ %^^ %_^­ %`^½ %a^Î %b^Þ %c^î %d^þ %e_ %f_ %g_. %h_> %i_L %j_\ %£_l %¤_~ %¥_ %¦_¢ %§_´ %·_Æ %¸_Ô %¹_â %º_ð %»_þ %Ë` %Ì` %Í` %Î` %Ï`  %à`% %á`3 %â`A %ã`O %ä`] %ñ`k %ò`q %ó`w %ô`} %õ`ƒ &`‰ &`• &`¤ &`± &`¾ &`Î &`Û & `è &!`ø &"a &#a &$a" &%a/ &&a< &'aL &(aY &)ai &*av &+aƒ &,a &-a &.aª &9a· 	&:aÀ 
&;aÊ 
&<aÔ 	&=aÝ 
&>aç 
&?añ 	&@aú 
&Ab 
&Bb 	&Cb 
&Db! 
&Eb+ 	&Fb4 
&Gb> 
&HbH 
&IbR 
&hb\ &ibi &jbx &kb… &lb’ &mb¡ &nb® &ob» &pbÊ &qb× &rbä &sbó &tc  &uc &vc &wc) &xc8 &ŸcE & cS &¡ca &¢cl &£cz &¤cˆ &¥c“ &¦c¡ &§c° &¨c» &©cÉ &ªc× &«cæ &¬cô &­d &®d &¯d &×d& &Ød< &îdQ &ïdW &ðd\ &ñda &òdg &ódl &ôdq &õdw &öd| &÷d &ød‡ &ùdŒ &úd‘ &ûd— &üdœ &ýd¡ &þd¦ 'd« 'd· 'dÂ 'dÍ ' dÙ '!dä '"dï '#dû '$e '%e '&e ''e( '(e3 ')e? '*eJ '+eU ',e` (£ek (¤e{ (¥e‹ (¦e› (§e« *‚e» *ƒe½ *„e¿ *…eÁ *†eÃ *‰eÅ *ŠeÇ *‹eÉ *ŒeË *eÍ *«eÏ *¬eÜ *­eé *®eô *¯f *°f *±f *²f& *³f3 *´f> *µfK *¶fX *·fc *¸fp *¹f} *ºfˆ *»f• *Òf  *Óf« *Ôf¶ *ÕfÁ *ÖfÌ *×fØ *Øfã *Ùfî *Úfú *Ûg *Üg *Ýg *Þg' *ßg2 *àg> *ágI *âgU *ïg` *ðgg *ñgn *ògu *óg| +³gƒ 	+´gŒ +µg™ 
+¶g£ 
+·g­ +¸g» +¹gÆ 
+ºgÐ +»gÞ +¼gé 
+½gó +¾h +¿h 
+Àh +Áh$ +Âh/ +Ãh= +ÝhH +ÞhO +ßhW +àh^ +áhf 	+âho +ãhw +äh 	+åhˆ +æh +çh˜ 	+èh¡ +éh© +êh± 	+ëhº +ìhÂ 	+íhË ,hÓ ,hÞ ,hë ,hö ,i ,i ,i ,i$ ,i1 ,i< ,iG ,iT ,i_ ,ij ,iw ,i‚ ,i ,¥iš ,¦iž ,§i¬ ,¨i» ,©iË ,ªiÑ ,«iÞ ,¬iî ,­iû ,®j ,¯j ,°j& ,±j5 ,²jC ,³jR ,´jd ,µjs ,¶j„ ,·j— ,¸jª ,¹j½ ,ºjÐ ,»jß ,¼jã ,½jç ,¾jê ,¿jî ,Àk ,Ák! ,Âk- ,Ãk; ,ÄkK 	,ÅkT 	,Æk] 	,Çkf 	,Èko ,Ék| ,Êk‰ ,Ëk– ,Ìk£ ,Ík§ ,Îkµ ,ÏkÄ ,ÐkÔ ,ÑkÚ ,Òkç ,Ók÷ ,Ôl ,Õl ,Öl$ ,×l/ ,Øl> ,ÙlL ,Úl[ ,Ûlm ,Ül| ,Ýl ,Þl¡ ,ßlµ ,àlÉ ,álÝ ,âlì ,ãlð ,älô ,ål÷ ,ælû ,çm ,èm/ ,ém; ,êmI ,ëmY 	,ìmb 	,ímk 	,îmt 	,ïm} ,ðmŠ ,ñm— ,òm¤ ,óm± ,ômµ ,õmÃ ,ömÒ ,÷mâ ,ømè ,ùmõ ,ún ,ûn ,ün ,ýn2 ,þn= ,ÿnL - nZ -ni -n{ -nŠ -n -n± -nÃ -n× -në -	nú -
nþ -o -o -o	 -o$ -o= -oI -oW -og 	-op 	-oy 	-o‚ 	-o‹ -o˜ -o¥ -o² -o¿ -oÃ -oÒ -oá -oñ -o÷ - p -!p -"p! -#p- -$pA -%pL -&p[ -'pi -(px -)pŠ -*p™ -+p¬ -,pÀ --pÔ -.pæ -/pú -0q	 -1q -2q -3q -4q -5q3 -6qL -7qX -8qh -9qx 	-:q 	-;qŠ 	-<q“ 	-=qœ ->q© -?q¶ -@qÃ -AqÐ -BqÔ -Cqã -Dqò -Er -Fr -Gr -Hr% -Ir2 -Jr> -KrR -Lr] -Mrl -Nrz -Or‰ -Pr› -Qrª -Rr½ -SrÑ -Trå -Urù -Vs -Ws -Xs -Ys" -Zs% -[s) -\sD -]s] -^si -_sy -`s‰ 	-as’ 	-bs› 	-cs¤ 	-ds­ -esº -fsÇ -gsÔ -hsá -isï -jsþ -kt -lt -mt! -nt1 -ot> -ptJ -qt^ -rti -stx -tt† -ut• -vt§ -wt¶ -xtÈ -yt× -ztÛ -{tß -|tâ -}tæ -~u -u -€u& -u4 -‡uD -ˆuH -‰uL -ŠuP -‹uT -’uX -“u] -”ub -•ug -–ul -£uq -¤uw -¥u -¦u… -§u‹ -¨u“ -©u™ -ªuŸ -«u§ -¬u­ -­u³ -®u» -¯uÁ -°uÇ -±uÏ -²uÕ -³uÝ -¸uã -¹uë -ºuó -»uû -¼v -Ýv -Þv -ßv2 -àvA -ávT -âvh -ãvw -ävŠ -åvž -æv­ -çvÀ -èvÔ -évã -êvö -ëw
 -ìw -íw- .w< .wL .w[ .wk .w| .wŒ .w .w® .w¾ .wÏ .wà .wð .x .x .x" .x3 .xC .;xT .<x` .=xm .>xy .?x… .@x’ .Axž .Bxª .Cx· .DxÃ .ExÏ .FxÜ .Gxè .Hxô .Iy .Jy .Ky .iy& .jy3 .kyB .lyN .my[ .nyj .oyv .pyƒ .qy’ .ryž .sy« .tyº .uyÆ .vyÓ .wyâ .xyî .yyý .–z	 .—z .˜z" .™z. .šz9 .›zG .œzS .z^ .žzl .Ÿzx . zƒ .¡z‘ .¢z .£z¨ .¤z¶ .¥zÂ .¦zÐ .ÇzÜ .Èzé .Ézø .Ê{ .Ë{ .Ì{  .Í{, .Î{9 .Ï{H .Ð{T .Ñ{a .Ò{p .Ó{| .Ô{‰ .Õ{˜ .Ö{¤ .×{³ .ø{À .ù{Ì .ú{Ù .û{ä .ü{ð .ý{ý .þ| .ÿ| / |! /|, /|8 /|E /|P /|\ /|i /|t /| /'|Œ 
/(|– /)|¤ /*|¯ 
/+|¹ /,|Ç /-|Ò 
/.|Ü //|ê /0|õ 
/1|ÿ /2} /3} 
/4}" /5}0 /6}; /7}I /M}T /N}c /w}o /x}| 2L}Š 2}Œ 2Ž} 2}’ 2}• 2‘}˜ 3}› 3€}° 3}Å 3‚}Ú 3ƒ}ï 3©~ 3ª~ 3«~ 3¬~* 3­~7 3®~D 3¯~P 3°~] 3±~j 3²~v 3³~ƒ 3´~ 3µ~œ 3¶~© 3·~¶ 3¸~Â 3¹~Î 3Õ~Ù 3Ö~Ü 3×~ß 3Ø~â 3Ù~å 3Ý~è 3Þ~ë 3ß~î 3à~ñ 3á~ô 3ä~÷ 3å~ú 3æ~ý 3ç  3è 3õ 3ö 3÷ 3ø* 3ù6 4B 4F 4,J 45N 47P 4<R 4>T 4@V 4BX 4DZ 4F\ 4H^ 4J` Ý4KÝ
/2- 2. 2/20 21 t 22 23 t 24 25 t 26 27 28 29 2: 20 2; 2< d 2= 2> t 2? 28 2@ 2B2C Ã2D Ý2EÜ2F C2G@2H 2I 2J Ã2K :t 2M t 2N 28 2O t 2P t 2Q t 2R t 2S t 2T 2U Â2V 2WÂ2X 2Y  2Z Â2[Á2\ :2]P2^Ü2_ C2` :2a 2bK1 2c C2d :2e 2G@2f 2I t 2g t 2h t 2i  	† 2j2j  t 2k 28 2l $  $2m  2m2n … 2o Ý2p O2q C2r>2s 2t>2u O2v O2wÁ2xN2y 2zÁ2{ 2| 2} }2~O22€2Ü2‚ 2ƒ 2„ t 
2…¡2q C2r>2s 2t>2†OÞ ÃN ÝßÜ2‡ Ýám2ˆR2‰ Ä2Š´2‹‡2Œ‡2’ Ý2“ :2” :2•K7 2– æ 7 2— 2˜ t 2™ 2š t 2› 2œ 2 t 2ž t 2Ÿ 2  2¡ t 2¢  1 Â2£5 1 Â2¤62¥52¦5t Õ2§ 2¨ 2© t 
2ª 2« t 2¬ t 2­ 2® t 2¯ 2° 2± t 2² 2³ t 2´ 2µ t 2¶ t 2· t 2¸ 2¹ t 2º t 2» t 2¼ t 2½ 2¾2¿ C2À2Á2Â 2Ã 2Ä 2Å 2Æ 2Ç 2ÈA2É Ä2Ê Ä2Ë Ä2Ì Ä"“2Í t 
2Î 2Ï 2Ðò2Ñò2Ñò2Ò C2Ó 2Ô 2Õ C2Ö 
2× 
2Ø Ý2Ù›2àR2áã2â12ã 2ä 2å Â2æ Ý2ç›2ÚR2Ûã2Ü12Ý 2Þ 2ß Ât 2è 2é 2ê 2ë 2ì C2í C2î C2ï 2ð 2ñ 2ò 2ó’2ô O2õ—2ö’2÷’2ø O2ù›2ú“2ûK2ü Ct 2ý 2þ 2ÿ>3 L3L3 3 Â3N3 t 3 3 3 3	 "  "3
 Á3 3é3R3 3 Á3R3 Á3R3 3 3R"Ü3 Ý3" O'zó3 2u O2v O2wÁ2xN2y 2zÁ2{ 2| 3 3 3 O] Z O3Ot 3 3 3 3  3! C3"R3# Á3$ Õ3% 3& 	3' 3(ô3) O30ô31 O32ô33 O34 O35ô36 O37 O3*ô3+ O3,ô3-õ3.ô3/õ 38 39 3: 3; :3< ©Èª « ¬ ­ ® ù :3=Iü :3> : G3? 3@ C3A 3B O3C 3D Ã3E O3LK3M 3N—3O O3PK3Q”3R }3S”3F“3G¡3HÑô—3I”3J“3K }3T Ä3U ¼3V :3W 3X 3Y Õ3Z Û3^ 3_ 3` Ý3a C3b Ý3c 3d C3e Ý3[ 
3\ C3] Ý; 3fÐ3g"Ð 3h 3i 3j  $^ O3kö3v3x”3y3z”3{ 3|ö3}”3~’3l¡3m”3n‡3o›3p’3q3r’3s3tö3u¨3w 3„ Ã3… Ã3†  3‡  3ˆ 3 ‡3¡¡3˜ Ý3™s3š Ý3¢¢3£¡3¤‡3º 3¦s3Ÿ‡3 Á3» 3¼ Â3½ :3¾ 3¿@3À Ã3Á 3ÂK3Ã 3Ä Ã3Å O3Æ C3ÇK3È 3É Ã3Ê 3Ë Ý3Ì Ãt Ä2… 3Í C3Î 3Ï Ý3Ð C® Ý3Ñ Ã¿ ÃÀ O3Ò´3Ó‡3Ô‡3Ú´3Û‡3Ü´3â´3ã‡2Œ‡3é´3êÀ3í´3îÀ3ï´3ðÀ3ñ 3ò 3ó´3ô‡3ë´3ì 3úR3û Õ3ü Â3ý :3þ Ý3ÿ Ã4  Ã3û C44 C44t 4 t 4 4 4 Ât Ä4	 4
4 }4 }4 }t Äs 4 4 t Ä4 4 4 Ý4 Ý4 4 µ 44 4!t 4" 4#4$ 
4% t 4& t 4' t 4- t 4. t 4/ tt  40 41 43 :44 Â49 4: 49 4; 4L Ã4M C4N O4O Ý4P Ý4Q :4R h  i h  j l m n o p q r 	s 
k t u t v t w t 
x t y t z t { | t } t ~ t  t € t  t ‚ t ƒ t „ t u t v t  t K t  t ¬ t < t [ t ˆ t ™ t á t 	
 t 	† t 	¸ t 	¿ t 
 t 
 t 
/ t 
´ t * t Z t ˜ t Ÿ t £ t ¹ t Ï t Ð t 
Ñ t Ò t ÄÓ t Ô t 
Õ t Ö t × t Ø t Ù t Ú t Û t Ü Ý Þ ß à á â }ã Oä Ýå Oæ=çÜè Ýé Cê ë>ì 
í?î :ï Âð ñ Âò ó@ô ¼õAö Âò ó@÷ 
ø ì íBù :ú Âû Âü ý@þBÿ :  ÂCDEFGHt¨= 	 

  :I :  JJ  J ÝKKKKKKKt > :L M!Ü" }# ¼" }$ ¼" }% ¼& ¼' " C(N" ) C*N+ Â, - C. Â/N0 1 C2 Â3N" 4 Â) 5 C* Â+N6 7 C8 Â9N" 0 C2N3 Â: ; Â< C=N> :? @ ÂA :B C ÂD :E = Â> :F G ÂH I J t 
K L M N ÝO P :Q … R OS T U OV W X OYOZ O[OZ O\O] Z O^P_ C` CaQb ÝâÜã Oä Ýå OçÜè Ýc¡d¡e¡f¡g¡h¡i Ýj Ãk Ãl ÃmRnSo p Âq@r@| ƒ „@… †R‡ ÁˆR‰ Âs Ât ÁuRv w@x y y@z Ä{ Û} ~  Û€  ‚ Š Â‹ –RœTUžVŸW  Á¡@¢ ÁŒ RŽR  Ä‘ Û’ “@”@• Ä— Û˜ Û™ š Ä› £ Á¤X¥X¦X§X¨ © Äª « ¼¬A­ ¼®A¯ ¼°A± ¼²A³ ¼ª ´ ¼µA¶ Á·R¸A¹ ¼º Ä»A¼Y½ Ä¾ Ä¿ ÕÀZÁZÂ Ã Ä Å Æ Ç ÕÈ ÂÉAÊ 	Ë Ì ÄÍ ÄÎZÏ ÕÐ Ñ ÂÒAÓ Ô[Õ ÄÖ Ý× OØ Ù ¼Ú Û\Ü ÄÝ ÂÞ Äß Äà Ûá ¼â]ã Ää åRæ Áç Ûè ÄéOê Ãë ìZíZîZï ð Äñ>ò Äó Äô õ öL÷>ø ù ú Ûû Äü ¼ý Äþ ¼ÿ@   4   ¼ ¼ Ä Â Ä	@
  Â@ ÛA Â@  Á ¼  Â  Ä  ÄA  Û  ¼^ Ä   Ä! ¼" # $ % Ä&Z'R( ) Â* Ä+ ,R-@. / Â0 1 2 3 Á4 5 6 Á7 Á8_9 ::  ; Ý< := > 	?`@ ÝAaBbC D  E ÝF G ÝH ÃI ÕJ K LcM NaObP ÂQ@R@S T ÕU V ÃW XRYdZ@[ \ ] Â^ _ `ea ÂbfcedgeRfhg h ÛiRjRk ClRm ÝnRo  p Ýt 	u v Õw :x :y Oz O{ Äq Är s | } ~i Õ€ Oj‚ Âƒ „ Â… †@‡ ˆ ‰ Š ‹kŒl ÕŽ  Z‘@’m“ ” • –m—m˜ ™Zš › }œ nžmŸ Á m¡ ¢ £ Ý¤ ¥ ¦ §Ü¨Ü© ª « ¬ ÂAaBb­ Á®m¯ Â° ± ² ³ ´@µ ¶ · Â¸ ¹aAb» ¼ O½ ¾ ¿ À OÁ Â ºZÃ :Ä :Ê Ë Ì OÍ Î Ï Ð ¼Ñ ¼Å ÄÆoÇpÈ É ÝÒ :Ó CJ ÂÔ ÄÕ ¼ÖR×qØ@Ù :Ú CÛÜÜ Ý ÃÞ :N Cß Oà Äá Ûâ ¼ã ä æ }ç ÝèPé ê }ë }ì }í }å¡îPï Ýð Ýñ 	ò ó ôPõ Ýö ÷ ¼ø ùPú Ýý Ýþ ÿ Â  Á  r Äû ¼üA  Â  	  
    Os Â      Ý  Ã O Ý O Ã Ã Ã Ã Ã Ã  Ã! Ý"t# Á$X%u&@' (u) O*Y+v, - . / 0 1 	2 Õ3w4w5x6Y7YÞP8 Ý9 :Z; < Õ=y>z? @{A|B C ¼HAI ¼JAK ¼LAM ¼NAO ¼D ÂE F ÛG P‡Q‡R S‡T U~V  W‡XYbt 
` a bÜc Âd 
e Âl Âm Ân Âo Âp Âq Âr Âs Âf Âg Âh iÜjÜkÜtxuˆvˆwxx y Õz 	{L| Ä} ¼~  Â€ : ‚ ƒ „ …L† Ä‡ ¼ˆ ‰ ÂŠ 4‹ Œ 	 Ž Û ¼A‘ ¼’A“ Û”‰• C– —‰˜ C™ š Ä›@œ Ä@ž ¼ŸR  ¼¡Š¢‹«Œ¬ Â­ :®Ü¯ :° 	±Š²‹£¤Ž¥¡¦ Â§Ü¨ :© 	ª³ Ý´ ¶ C· ¸ ¹ 4ºZ» ¼ ½ 4µ¡¾ Ã¿AÀ ÄÁAÂ t 
Ã ÂÄ ÄÅ Æ OÇ ÁÈ ÁÉ Ê ÁË Ì 	Í ÎÏ :Ð‘ÑxÒwÓxÔÕ Ö O× Ø Ù Ú Û Ü ÂÝ Þ Âß :à Cá Ãâ :ã Cä Cå Ýæ :ç Ãè 
t Ýé’êYë 4ì :í Oî¡ïNðÜñ }ò Õó ô õ Âø ùPú Ýû“ü ý”þ Âÿ ö :÷   ÝKKP >	M
 ¼•“¡ Z O ÝP Ý ” Õ Û“ L“ O Ý   4  4  
! " Ã# C$P%& '( C) Ý*P+t , - . C/0 1R2 ¼3 
4 5 Â67 C8>9 : Õ; < = 4> ? Ý@ÜAÜB ÝC ÃD{E{F ÝG :H ÛI ¼JMK LM–P–Q–R–S–T’U ÂV ÄW—N OP" X … ' s Y˜Z [ \™®] Ý^ O_ ` a " Obc 	d e Õf g Oh Ýi j Ýk lm 4n o 4p qOrOsOtxušv Ýw›xxyˆz :{Ü| :} Ý~ :ˆ€ C C‚ Cƒ„ O…†x‡ Ýˆx‰xŠ Ý‹œŒ :|Ž Ýœ :‘|’P“” 
• – " Ä— Û˜ ™ Oš › 
œ  ž 
Ÿ¡"  N¡P¢K¡P¢K£¤ O¥”¦ O« Õ¬”­’®¡¯”°‡±›²’§¨’©ª Î‡ÅPÐ¡ÇsÈ ÝÑ¢É¡Ò‡Ó ÔsÏ‡æ ç”è ÛéÜõ‡ö‡÷ ø‡ù :ú’ô’       Â Á Á :m% :' Á( :) *¦+ ¼, :-Ü :¦‡    4! Ý" ¼# Û$‡&K3 4 O5 6 Ý7 O?‡@s>¡:x; < w‡xsf Ãg :€‡U‡V‡W‡‡p‡q‡r‡s‡y¡z Á`–a–cµdµvµ{ |‡}‡~ Á •‡²¹¸º¹»¥ Cœ‡« Ý Àº»» Ý³º°‡´sµ‡¶ ±¹¨»·‡›sª CÎ ÃÏ :Ö Ä× ÃØ ÃÙ ÝÚ ÄÛ CÜ ÝÝ Ð CÑ :Ò ÄÓ ÝÔ CÕ :ÞÁß á â :ãÂä åNæ ç }è Âà éRê Áë :ì í "  î Ãï Áð ñ ò óô Cõ öR÷ Âø Ýù :úIû ü :ýÃþ ÿ : GÃÄÅ  ¼A ¼A ¼A ¼A ¼  Â :	 
@ O  }  C @   CEÆI Ç! C" :# Â& :' ( )@* C+ Â, Á- $ C% Cì }í Cù :ú Â. /R0 Á1È2 :3 4 5 :6 Ý7›8 Ý9 O:›; Ý< = Â> @? @ A ÄBAC  D } E ÂF G ÁHRIAJ ¼K }L :M CN ¼O P 
Q RASÜTÉU CV¦W CXHY¦ZÊ[Ë\Ê]G^ 	_@` Âa Cb Cc Ád 1 ¼e ¼f 	h Âi Äj@k Âl Cm Cn Áo g ÄpÌqÍrÌs t u v w x CyKz C{ |K} Ý~  Ý€  ‚ ƒ „@… Á† Ý‡KˆR‰ Š ‹ ÝŒ Ã ÃŽ  O ‘ ’ “ C” Ý• :– Ý—K˜P™ ÝšK› OœÜt ¡ž 
Ÿ Á  Á¡ Â¢ £@¤ ¥@¦ § ÂŸ   ¡Z¢ £Î¤ ¥Î© ª §Z¨ Õ«K¬ :® ¯ Ý° C± ² ³ ´Zµ ­ 	¶ Â·Ïº » Â¼@½U¾ ¿@À 
ÁÐ¸  ¹ 	Â ÂÃÈÆ Ç@ÈÈÉ Ê Ë ÂÌ ÍÂÄZÅ Î Ï  Ð 	Ñ ÁÒKÓÔ :Õ Ö ×ØRÙ CÚÛ CÜ ÃÝÏÞ Ýß 
àKáÑâ 
ã CäÑåPæ Ý¡P¢K¡P¢Kô O¡P¢K¡P¢KôJ   Â   R	 Á
  : Ã Ã Ã  
 
  Ã O Ý ÁR Ã   	   	   Ý! Á"Û# Á$}$€$$‚$…% Õ& C' C( C)Ü* :+ C, Õ- Ý. Ý/ Ý0Z1 2 Á3 Ý4 :54 6 Ã7 Ý89: Ý; < := :> Â? :@ A B ÃCZD ÃEZF ÝG ÃH :IZJœKßL :QàRáSœTâUAV ÄW :XAY ZA[ Ä\A] ¼^A_ ¼` :a Äb c d e :f gLh Âi j k Äl : :m% :' Ám :n :o Cp Oq Ãr :s Ot Âu v Âw Ox Ýy :z { O| :} Â~ãä€ :|‚ ƒ „ O… :† O‡ Oˆ ‰ Š ‹ :Rž ÁŸR å¡å™Û¢ › :£ Á¤RŽR¥Z¦ :§ Á¨ © Oª 4« ¬ Á­ :® Ã¯ C° :± ² ³>´ µ :¶ Ý· C¸ Ã¹Lº>» ¼ ½>¾¿ÀÁÂ ÂÃ ÝÄ ÃÅÆÇ ÈÉ Ê Ë 4Ì Í 4Î 
Ï Ð ÂÑ Ò Ó :ÔRÕRÖ Á×RØ :Ù ÁÚ Û ÄÜ ÄÝAÞ :ß ¼à Ãá Ââ ã ä Oå æ ç Âè é ê ë Ââ ã ì í î ï ð ñ :ò 	ó ô õ ö :÷Üø ù Ãú Cû :ü Ãý C C Ý C C Ý Ã Ã Ýþ Cÿ :  Ã	 Á
 : Á :æçèæ ÃZ ÃZ C C CÛ Ã@ ÝÜ ÁÛ Â  !Ü" Â#Û$ %Û& Ã'Z( Ý) * :+Z, Â-œ. Â/ :0á1’2à3A4 Ä5 :6A7 8A9 : ; < = :> Á? :@ :A ÁB CRDäEäFãGäH :I|JãK L MRNåO :P QRRéSZT Õ¬ U :V•W ÄX Y :Z ¼ Â[ Õ\@] Â^ Õ_ Á`Ûa Cb Ýc Cd Ýe :o Á!Üp Á  qRrÛoÛ! Cs  t Ý  uÛv Cq w CxÛyÜz { |ê}R~ : €ê ‚êƒÜ„ O…P† :‡Üˆ O‰PŠ :‹Ü‘ O’ :“Ü”ë• :–Ü—‡˜´™´Ÿ‡ ´¡ ¨à© ª « ¬ Õ­ ®‡´‡»‡Á‡Ç‡È´É´Ï´Ð‡ÑOÒOÓOÙ´Ú‡àðáñçðèñî´ïsðð´÷‡ø‡    Â ¼ò	 
  Â          t }  	 óó 
     ! " # 
$ 
% &¡' ( ) * 
+ }, - Ã. 
/ 0>1 2L3 4a567 Õ8 9 : ; < Á= Û> Ä?ô@õAõB :CPD E 	F G ÝH I :J KRL ÁM N O ÁPRQ R 
S T 
U‡V‡W X ÁY ` a b c‡d‡eöf Ág h Ã‡Ä‡Å Æ ÁÇ  ‡ö Á ~ ú û‡‡ Á s.¡‡ Á	 ü Ã4 Cý þ‡ÿ‡  Á  ¼÷ ø‡üÀý‡þ :ÿà Y‡0À‡
 úö  û Á#K$ :% &‡'À(‡* + Á,  ‡)K- :. /‡0À‡ 3 Á  "‡#’$ :%Å&‡'À(‡* + Á, ÷ ø‡üÀý‡þ :ÿà Y‡0À‡ úö  û ÁÀ‡ :	‡'À(‡
 ö,  Á8¸9‡<À= >‡? Á@ !¸" #š2: 4; ‡€‡Š :Œ‡gÀ Ž‡ Á ‘ : :‚‡ƒ :„‡]À… †‡‡ Áˆ ‰ :‹ :’  – ¡‡žÀ¢ £‡¤ Á¥ ¦ »£¼‡Ö ½ ¾ Á×‡Ø Ù ÁÚ ÄÛÁÜ ~ ïsð ò‡óÀô‡õ Áö ÷‡ø  ùñ¡‡  ÁÏ‡Uö Á UL&‡'( *´EF5 :> :?‡žÀR I‡J ÁK Q := G4 g h‡iöj Ák lÐmbn u :v x :y z { | Â} :~ 	 w €YÜ‚ :ƒw„ :…à† O‡ :ˆ›Ž OŠ‡‹ Œ — Ý˜ :™"LšL›œ Ý :­ Ÿs¡¡¢‡®‡¯ Á¥s¦À§‡  Ö × :Ø‡ÙÀÚ Û‡Ü ÁÝ Þ :ß ÃÕÜÎ :ô õ‡ö ÷ ø‡ù ú‡û ü 	ý‡ Õ Z Â ‡	 
 PPs¡( ‡)‡* Á+,‡ A›B’T EsF¡U‡V ÁJ K›C’i Ýj k l m n Ão Ýpqrs Ýt Ãu :v Cwˆxšy ® Ýz Ã{ Ã| O} ~›O€O‚›ƒ„O… †‡Oˆ‡‰ Š Á‹ Œ  ”A• Ä– — Õ˜ ™ Õš › Âœ  Ãž CŸ‡  Á¡ \s´¡¢‡U ÁV W ©ÈªZ« ¬Z­ ® ¯ ° ±š² ³ ´ µ ¶šµZ· Õ¸ ¹ º » Â¼ ½ 	µOµÅµšµµ ¾w¿wÀšÁwÂZ´ t ÃÜÄ Å ä¡Æ Ç ÝÈ ÂÉ ÃÊ ÝË Ì ÝÍÎÏœÐšÑ ÒˆÓxÔÜÕOÖO×ØãÙÜÚ :Û Ü´Ý‡Þ´äwå æç¸èé ê Õë Õìˆíwîãï’ð :ñ’ò :ó ô :õÿöP÷!ø ù"ú!û@ü ý!÷ ¼ø#ù Äú ¼û@ü þ ¼÷¸øOù ú¸û@ü ÿ¸÷ ø$ùLú û@ü    ¼# Ä ¼ @ ¼ O	 Ý
 Ä  ’›› ÝO  O›››’OO¸’›› Ý Ý ›!O"%#›$&% &&' Ýt :( ) *@+Ü,- . O/P0 Ý1Ü/ 0 1@2 
3 2 
4 5 Ý6 O7 Ã8 O9 Ý: Ã;'< C=¦>Ü?Z@ :A OB CC DÜEZF ÃG :H ÝI J CK ÃL ÝM ON L ÝM OO“L ÝM OP ¼Q“R S ÁT U ÝV :W ÃX Y Z Ã[ \ :] Ã^ _ Ã` Âa :b Âc Od Ýe Ãf Cg>h i Ýj Ok l Âm n o Cp :q Ýr Os :t Cu :v Ýp Áq Ýr Os ÁtRu Áw Op 	q Ýr Os t u 	x 
y :z Ã{ O| ÝpAq Ýr Os ¼t ÄuAp 
q Ýr Os t u 
p q Ýr Os t u } ~  Ý‚ Ãƒ 
„ … Ý† Ã‡ ˆ  Ý€ Ã‰ ŠÜ‹ Œ(@Ž Á Ý Ã‘ C’R“ Õ” Â• :– Ý— Ã˜®™•š C› œ Ä :ž CŸ•  Ý¡ Ã¢ Ã£ Ý¤ C¥ Ý¦ Ý§ ¨ © ª Ý« C¬ ­ Ã® ¯ ° 
±R² ³ Á´ ±R² ³ Áµ Ä¶ · Á¸R¹Rº Ã» Ý¼ Ý½ O® Ý¾ Ã¿ ÃÀ OÁ CÂ Ã ÝÄ ÃÅ ÃÆ OÇ ÝÈ ÃÉ ÃÊ OË Ì ÁÍ ÃÎ :Ï ÃÐ Ì ÁÍ ÃÎ :Ï ÃÑ Ì ÁÎ :Ò ÝÓ ÃÔ OÕ ÃÑ Ì ÁÍ ÃÎ :Ð Ö C× Ø 	Ù :Ú OÛ ÝÜ CÝ Þ ß à Ãá Ýâ Ãã äy åæ ç è ç é ê ë 4ì í 4î ï ð ñ Còó Ýôõ ö ÷Üòó Ýôõ ö ø ù úû Cüýþÿ   C : Ã : C Ý 4 C	 }
P :                   t   ! " t # t $ % & ' ( t ) * + , - . /P0 Ý1 /P0 Ý2P3 Ý4P5 Ý6P7P8 Ý9 O: Ä;Ü<›=>›? C@PA¡B›C CDPE¡FKG H CI :JKG K ÁL ÁMKN OKN P Q P Q 1 pKqÜr sKt OuKR S TÜUPVP" 
W¡XYZ[\] 4^Ü_ t `Üt a t b t c t d t e f g Âh CiPj CkPl ÂmPn o CpPq Cr ÝsPt Ou ÝvPw Ox ÝyKz{Ü| } ~ ÄA€J ¼‚ Äƒ Û„Ü… Â† C‡ CˆP‰PŠ’‹ CŒK OŽ›YY‘ˆ’)“ :”›•ã–*—L˜>t ™ÜšÜrÜ› Cœ+,ž ÂŸ Ât   t   " " ¡ ¡ ¢ ¢ £à¤àt ¥ t ¦ t § ¨ © ¼ª Ã« Ý¬ ¼­ ¼® 4¯ :° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼Ð½ :ÁÂ’ÃÄ’ÅÆ :Ç’È Â¾ Â¿’À’t É " ÃÊ OË CÌ C" ÃÊ OË CÍ C" ÃÊ OË CÎ C" ÃÊ OË CÏ C" ÃÊ OË CÐ C" ÃÊ OË CÑ C" ÃÊ OÒ CÓ C" ÃÊ OÒ CÔ C" ÃÊ OÒ CÕ C" ÃÊ OÒ CÖ C" ÃÊ O×’Ø’" ÃÊ O×’Ù’" ÃÊ OÚ’Û’" ÃÊ OÚ’Ü’" ÃÊ OÚ’Ý’" ÃÊ OÚ’Þ’" ÃÊ Oß CÐ C" ÃÊ Oß C" ÃÊ Oß CÓ C" ÃÊ Oß CÔ C" ÃÊ Oß CÕ C" ÃÊ Oß CÖ C" ÃÊ Oß Cà C" ÃÊ Oá Câ Cã’ä Oåxæšç Ýè é ê 	ë ìÜí Áî Áï ðñ-ò Ý‡ C0 : : ‡‡ Á0 C C O :Ü Ã
 C :. C2 :3 C4 :? @‡A Á6 :7 C> :; C0 :1 CVWXYZ[\]^_`a Cb ÃcYdef Cg :hIi‡j´k :l‡m‡n o p :v Ãw Cx Áy Âz{ Â| } ~ Ã C€ C‚ ƒ Á„ Ý… 	† ‡ Õˆ :‰ Š‡‹´‘‡’‡“´™´š‡›‡œ´µ¢ Ý£O¤›¥ O¦Ü§’¨ O©Oª :« ¬ O­›®Ü¯›° Ã± :² C³ Ã´ Ýµ>¶ :·ä¸ã¹ºO» :¼’½à¾ :¿ˆÀ ÁšÂwÃáÄ’ÅÅÆœÇÈ’É ÝÊ OËÜÌ›Í’ÎxÏOÐàÑ OÒ :Ó CÔ :Õ OÖ›×’Ø CÙ Ú ÝÛ ÃÜ :Ý CÞ Cß Cà Cá Câ Ýã ä :å Cæ ç’è’é›ê’ëYìYíàîï’ðñòó’ôõ Ãö C÷ Ýø Où ÃúOû›ü ÝýRþãÿ1       Â s  
   O ’  	 : 
  O   O  Á  Ý  O    }  ¼  Ä  ¼ I  :  O K  Ý K       2    !K " Ot } #3 $4 %4 &3 '4 ( } )A *A + C , Ý - C . C" Â /5 0  1 Â 25 3  45 1 Â 55 6  7O 1 Â 85 6  1 Â 95 6  1 Â 95 6  :O 1 Â ;5 6 " Â <5 =  >O ?“ @ Â"LšL A 1 Â B5 C5E Â D6 E5" Â F5 G7 H8E Â I5E Â J5 K E Â L : M5E Â N5 1 Â O5 1 Â P5 1 Â Q5 1 Â R5 SO 1 Â T5 1 Â U5 1 Â V5 1 Â W5" Â X5 Y5 Z  [  1 Â \5E Â ]6 ^5 1 Â _9 `: a¦ 1 Â b9 cÜ d : `: a¦ 1 Â e9 f: g¦" Â h5E Â i5 j5 1 Â k5 1Y k : 1 Â l5 m5 nOE Â o5E Â p5 qÜ r O 1 Â s5 tO 1 Â u5 1 Â v5 w5 1 Â x v5 y5 1 Â z5 { E Â |5 }OE Â ~5  Ý €5 1 Â 5 ‚  ƒ5E Â „5 …O †5 ‡O ˆàE Â 5E Â Ž5 1 Â 5 tO x 5 ‘ Â ’ “Ü ”5 •x 1 Â –5 —Ü 1 Â ˜6 ™Ü š : ›5" Â œ5   ž¸ 1 Â ¡5 1 Â v5 1 Â ¬5 ­Ü ® Â ¯à °œ ± Â ²á ³ : ´Ü ® Â ¯à °œ ± Â ²á ³ : ´Ü µO ® Â ¯à °œ ± Â ²á ¶ : ´Ü ® Â ¯à °œ ± Â ²á · : ´Ü ¸  ® Â ¯à °œ ± Â ²á ¹ : º : ® Â ¯à °œ ± Â ²á » : ® Â ¯à °œ ± Â ²á ¼ : ½ : ® Â ¯à °œ ± Â ²á ¾ : ¿ : ÀO Á Â Âà °œ ± Â Ãá Ä : ÅÜ Æx" Â Ç5" Â È5 É Â Ê5" Â Ëÿ Ì> Ó¡( )‡ Ô Á Õ  ÖÀ ×‡ Øs Ù¡ ÏÀ Ð‡ Ñs( )‡ ús û‡ ü Á ù !s! !À!‡! ! Á!O!/ã!0ä!2 :!3|!4ã!5A!6ã!7ä!8ã!9ã!1A!:ä!;ä!/ã!4ã!0ä!2 :!3|!<ã!=A!>ä!:ä!;ä!/ã!0ä!2 :!3|!Aã!Bä!Cã!Dä!?ã!@A!Ms‡!F¡( )‡!N Á ù !H‡!I´!Os!a‡!bÀ!m´!d‡!eO s!o¡( ‡)‡!s Á!t  s!o¡( ‡)‡!‹ Á ù !Ÿ—! ”!¡À!¢‡!£—!¤”!¥À!¦‡!­À!® 	!¯ !° Â!± !² 4!³ 	!´ C!µ Ã!¶ Ã!· C!¸ Â!¹ Â!º !» Ã!¼ Ã!½ C!¾a!¿N!ÄÂ!Å 	!Æ !ÇN!ÈÏ!ÉÁ!Ê Á!ËU!À !Á Õ!Â !Ã !¾a!ÌÂ!Í :!Î ¼!Ï@!Ð !Ñ Ä!Ò !¾a!ÓÈ!Ô !ÕN!Ö  !×Ð!ØÂ!Ù 
!Ú@!¾a!Û!ÕN!Ü !Ý 
!Þ !ß !àÐ!áÂ!âU!ãÐ!äÂ!åÐ!æ  !ç !è !é 
 :!êU!ëÂ!ìÐ!í!î !ïÂ!ð !ñ !òU!¾a!ó!ô!õ !öÁ!÷ !øÁ!ù !ú !ûÐ!üÂ"U"Ð"Â"	Á"
Ï""U" !ý ¼!þ !ÿ :" Ï"Ð"Ï"a"Â"a!àÐ!áÂ!âU"Ð"Â"Á"Ï""U" " ¼" " :"Ï!¾a"Â" :"  " C"È"  "  "! "" " 	"#U"$ Ý"&a"'È"( 4") Ã"* "+Â", :"- "% ". :"/ Ã"3 Ã"4 Ý"5 Ý"6 Â"7 C"8 }"9 ": "0 "1 C"2 :"; Ä"<Ï">Ð"?  "@ ¼"( 4") Ã"A "B@"C Õ"=Z"DÏ"EÏ"FÈ"G "HU"I "J "K Ý"L C"M O"N Ã"O :"P Ã"Q "R Ý"M O"O :"S Ã"T "U "V Ý"W "XÜ"Y :"ZP"[ "\ "] "^ O"_ :"` C"a :"b O"c "d "e C"f Ý"g :"h "i Ý"j C"k Ã"l "mÜ"n Ý"o Â"a :"b Ý"p "q "r :"s Â"u "v Â"w "x "y "z C"{@"| Ý"t Ã"} "~¡"a :"b Ý"r :" "u¡"€ " Â"‚ 
"ƒ "„ 
"… :"† "O :"S Ý"‡¡"ˆ "‰ "Š Â"‹ "O :"Œ Ý" Ã"Ž Â"‹ " :" Ý"‘ Ä"’ Ý"“ Ä"˜ :"™¡"š Ä"› Â"œ Ä" :"ž Â"Ÿ@"” "• C"– ¼"—A" Ï"¡a"¢Ï"£È"¤"¥È"¦  "§ ¼"¨ "©!¾a"ªÂ"« :"¬@"­ Ä"® ¼"¯ "° "± C"²Â"³ "´ "µU"¶Á"·Ð"¸ "¹Â"ºÁ"»Â"¼ "½ 
"¾ }"¿Ï"ÀÐ"ÁU"Â "ÃÂ"¿Ï"ÀÐ"ÁU"Ä "Å }"Æ "ÇN"È :"É"ÍÐ"Î C"Ï Ã"Ð "Ñ  "Ò"ÓÏ"ÔÈ"Ê "Ë 	"ÌÂ"Õ 4"Ö Á"× "Ø "Ù”"á‡"â‡"ã "ä‡"ås"÷ ¼"ø ; "ú Â"û 	"ü "ý ¼"þ Á"ÿ 	#  "ù :## Är Â# ## Ä# Â# # Â#	 :#
 Ã# # # Ã# Ý#B# C# #ã# #C#*#C#*# #R# O# C# Ý# 4# _ ï # #  #! #" 4## #$ #% ï 
#& #' #" 4#( #) #% #* Õ#+ :#, #- #. #/ :#0 C#" 4#1 #2 #% #A‡#;À#E #<¢#+ :#=K#>K#?K#@K#5 :#6¢#7‡#8¡#Cs#D¡#Y Ä#A‡#Z #;À#<¢#+ :#= O#> O#? O#@ O#5 :#6¢#7‡#8¡#Cs#D¡#l :#mÀ#r¸#s #x‡#y‡#z #{s#u‡# 4#Ž # # Â#‘ 4#’ Â#“ 4t 
#” t Õ#• t #– t #— #˜K#™ O#š Ã#› O#œ Ý#Kt 
#ž #Ÿ C#  Ã#¡ #¢‡#£ #¤ Ã#¥ Ý#¦ Ã#§ Ý#¨ Ã#¤ Ã#¥ Ý#¦ Ã#§ Ý#¨ Ãt 
#®Ü#¯Ü#°Üt 
#±Ü#²Üt 
#³Üt 
#´Ü#µÜ#¶ Ý#· Ý#¸x#¹D#º{#»D#¼Å#½Å#¾Å#¿Å#À Á#ÁL#Â #Ã#Ä ¼#Å 
#Æ #Ç‡#È #Î #Ï #Ð Â#Ñ>#Ò #Ó #Ô #Õ Á#Ö Á#× Á#Ø Á#Ù 
#Ù #Ú ¼t #Û #Ü #Ý #Þ Ý#ß Ý#à C#á O#â :#ãE#äF#æ #çF#è #éF#êE#ë #ì :#íG#åE#îR#ï #ð Á#ñH#òI#ó #ô #õ #öJ#÷Kt 
#ø #ù #úP#û #ü C#ý Ý#þ #ÿ 
$  $ 
$ Ã ( }$ Ä$Ü$R$	Â$
U$ Ý$U$ C$ C$ ¼$L$ Ä ( }$ Ä$Ü$ Á$	 Ý$
Â$U$Ð$ ¼$ C$ C$ O$ $ Ý$ ; $ C$ C$ $  Ý$! $" Ý$# 
$$ $% $& C$ :$ Õ$ $ Õ$'D$( Ý$)Ü$*’$+O$, Ý$-’$.O$/›$'D$( Ý$)Ü$0’$1O$2 Ý$3’$4O$5›$6 Ã$7 $9 Ã$: Ý$; Ý$< Ã$= Ã$> }$? Ã$@ $8 $A $B Ý$C Ý$D Ý$E 
$F Ý; $G $H :$I $J $K $L Ã$M $N $O $P $Q Õ$R $S :$T Ã$U $V $W $X :$Y $Z :$[ ; $\ $] Â$^ O$_)$`à$a)$b)$c Á$d Á$eR$fã$g $h $l’$m’$n›$o Ý$p O$qO$r$s$i$j$k$t 	$u $ $€ $ }$‚U$ƒÐ$„ $… $† }$v $w $x }$yU$zÐ${ $| $} }$~ $‡ Ã$ˆ $‹ :$Œ Ã$M$Ž ¼$A$ ¼$‘ $’ :$‰ Ã$Š $“ "O :"S Ý$”¡$•N$– Ã$— Ý$˜ :$™ $š $› }$œ Õ$ Ã$ž $Ÿ $  
$¡ " "š"Å"" Át t t tštÅtt Á$¢´$£´$¤À$¥´$¦À$§´$¨À$©´$ª´$«‡µ  µ Á$±‡$²´" Â$¸5$¹ Ã 1 Â$º5$»D$¼ " Â$½5$¾ $¿5$À Ý$ÁY$Â’$ÃO" Â M5$Ä>$Å $Æ>$Ç :$ÈF$É>$ÊE$Ë>$Ì Â$Í5$Î  $ÏÈ$Ð$Ñ $Ò $Ô Â$Õ $Ö 
$× $Ø $Ù $Ú $ÛÜ$Ó Ý$Ü Â$Ý5$Þ $ßP$à´$á‡$â‡$ã‡$é‡$ê´$ë‡$ì´$í‡$î´$ï‡$õ´$ö‡$ü‡$ý´$þ´$ÿ´% ‡%‡%´%´%	´%
‡%´% Â%´%‡% Â%´%‡%‡%‡%´%‡% ´%!‡%' Â%(5%)Q%*5%+ %, %. Eá%/ %0 %1 %26%3Y%45%-ˆ%5 Ä%6 :%7A%8F%9>%: %;>%<R" Â%=5%> }%? Â%@5%A !Ms( ‡)‡%Q  Ô Á%J¡%K¡%L %M´%NS%B‡%C´%O Á%E´%F %Gs 1 Â%k5%l Ý%mÜE Â%n5%o5E Â%p5 0 %qJ%rF%sÿ%t :%u :%v>%w:%x¦%y %zF%{>%|E%}> 1Y%~ :% :%€ % Â%‚5%ƒ %F%„>%…W%†X%‡X%ˆX%‰F%ŠE%‹Y%ŒZ%>%Ž Ý% O%%‘%š%›%œ%%ž%Ÿ% %¡À%’‡%“´%” %•‡%– %—ã%˜ %™ö%¼%©‡%½ %°‡%± Â%²‡%³ã%´ %µö%ª %« %¬ Ä%­‡%Ð´%¿‡%Ñ´%Á‡%Â´%å‡%æ‡%ÙÏ%ÚN%Û }%ê´%ë´%ì‡%í‡%î‡%ç‡%è‡%é‡%×sD‡Ã F ÁG %ï Ã%ð O& :&0& C&	[&
 :&‡À&ÿ& :& &‡& Á& tu‡yz‡{ | Á} ~bb€bvbwxb( &/s&8‡&1¡&2x&3‡&4s&7 Á Õ &^‡&_‡&R‡&b‡&c &d¡&e Ý&Ws&f Ý&g¡&M Ý&`‡&as&zs&Ž‡&‘À&’ &“‡&” Á&• &†&{ ¼&| &} &À&‡&~¡&° Ý&± Ã&² Ý&³Ü&´ :&µ C&¶ C&·¡&¸À&ÝÀ&ÆÀ&Ç¡&ß‡&às&á‡&âs&ã &º C&Í Ã&Ù Ã&Ú‡&ÛÀ&Ü‡&Ð C&À‡&Ñ‡&Ò‡&Þ &ë‡&ìs&ê¡&æ &ç\&í]'¡'¢' Ý'‡'¡'¡'‡'‡' 's'	 
'‡'- C'. :'-^'/ }'0 :'1¡'2_'3 '4 :'5 Â'6Å'7`'8 Û'9Å':Å';Å'<Y'=à'>œ'?œ'Bœ'C)'Dœ'Eœ'Fœ'Gx'HÜ'Iw'@c'AY'Js'K O'L Â'M 'N Ý'Oa'Qb'Rc'Sb'Td'Ue'V'WP'X Ý'P 'Y Ã'Z Ý'[f'\f']g  '^ '_h  '^ Ý'`i  '^j'ak'b 'c Ã'd Ý'e 	'f O'g O'h Ã'i C'j Ý'k Ã'l Ã'm :'n :'o :'p 'q C'r Ã's :'t 
'u :'v :'w 'x 'y :"l'zm'{ '| '} '~ ' '€ ' O'‚ 'ƒn'„ '…A'†A'‡ Û'ˆ•'‰ 'Šo'‹ ¼'Œ ¼' ¼'Ž Ä' ¼' Ä'‘ Ä'’ Ä'“ Ä'” '•Z'–@'— Õ'˜@'™ Õ'šR'› Á'œ Ä' 'žp'Ÿ"' !'¡ '¢ ÝH C'¥ Ä'¦ ¼'§•'¨ :'© 'ª '« O'¬ '£ Õ'¤ Û'­ :7 :'® '¯@'° Á'± Ä'² '³q'´ 'µ Ä'¶ Ä'· '¸ Á'¹ 'º Õ'» Ä'¼!'½}'¾ª'¿ Ý'À 'ÁP'ÂP'ÃP'Ä Ý'Å 'Æ O'ÇP'ÈR'É Á'Ê Á'Ë Á'Ì Á'Í Ä'Î Û'Ï Û'Ð Û'Ñ•'Ò•'Ó :'Ôr'ÕÉ'ÚE'Ûz'ÜE'Ýz'ÞE'ßs'àt'ás'Öt'×u'Øz'Ùv'â 'ã 'ç 'è 'é 'ê 'ë 'ì 'í 'î 'ä Â'å Â'æ Â'ïx'ð 'ñã'ò 'óã'ô Ý'õ›'ö O'÷ Ã'ø C'ù 'ú 'û Á'ü 'ý Á'þ 'ÿ 	(  Õ( ( Ã( Ý(P( Ý(
 Ý( ( ( }( O( }(>( (>( ( (	 (ë(w(Ü(w(Ü( Ã( Ã(Ü(w(ë(x( Ä( ¼("A(# ¼($ ¼(% ¼(& ¼(' ¼(( ¼() ¼( ¼(  ¼(! ¼(* (+ 	(- 	(. (/ (0 (1 Â(2 (3 (4 Â(, (5 (6y(7@(8 (9 (: 	(;@(<@(=  (>Ð(? (@ (A (B Ä(C Â(D (E (F (G (H Ã(I Ã(R  (S ¼(T ¼(U Û(V Û(W ¼(X ¼(Y Ã(J Ã(K  (L Ý(M  (N Ý(O  (P Â(Q (Z ¼([z(\A(] Ä(^ Û(_ Ä(`{(a|(b Ä(c (d (e}(f (g (h (i (j}(k}(l Á(mR(n Ý(o (p Á(q (rm(sR(tR" Â(u5(v (w % Â(x5(y " Â(z5({O(| Â(}5(~(‚ (ƒ Õ(„ (… }(† (‡ }(ˆ 
(~ ( Õ(€ Ä" Â(‰>(Š5(‹>" Õ(Œ : j :(Z(Ž Õ(O"—(”(‘ (’”(“¡(”¡(•(– C(œ 4( :(ž 4(Ÿ :(  :> :(¡ :(¢ 4(— :(˜ C(™ :(š C(›‡¡ " Â(¨>(© :(ª (« Á(¬ $Ç :(­ :" Â(®>(¯ (°>(± (² (³>(´ (µ (¶ (· ¼(½ Ä(¾ (¿€(À ¼(Á (Â (Ã(Ä (¸ (¹ Ä(º ¼(» (¼ (Å›(Æ O(Ç O(ÈÜ(Éˆ(Ê (ËÜ(Ì Ý(Í›(Î›(Ï›(Ð›(Ñ›(Ò Ý(Ó Ý(Ô O(Õ :(Ö Á(× (Ø :(Ù :(Ú (Û :(ÜN(ÝA(ÞR(ß 	(à 	(æ 	(ç 	(è 	(é (ê 	(ë :(ì (í (á (â (ã (ä (å 	(î (ï Â(ñ (òÜ(ó Â(ôÜ(õ Â(öÛ(÷@(øÛ(ðR(ù²(ú²(û…(ü…(ý‚(þ‚(ÿ :) ²) ) ) ) Á)) :) C)‚)	ƒ)
‚)„) :)…)†)‡) :) O) Â) :)R) Á) O) :)A) Â)Ü) :) C~ C) C)ˆ) C)  :)!ˆ)" Ã)# Ã)$ Ã)% C)& :)' C)( )) C)* :)+ ), ). )/ )0 Á)1 )2 Á)3 )4 :)5 Â)- )6 )7 	)8œ)9 ):Û);”)<”)= )> :)? :)@”)A )B :)C :)D :)E )F Á)GÛ)HÜ)I Á)JÛ)K)L)M C)N)O Ã)P C)QA)RA)SA)T Ä)U :)V C)W Ã)X C)Y Ã)Z Ý)[ Ý)\ :)]Ü)^ )_ )` )a )b :)c Õ)d Õ)eZ)f )g )h Õ)iZ)j :)k )l‰)m Â)n )o :)p‰> O? :)q :)r O)s C)t :)u C)v :)w :)xÏ)y )zm){m)|R)}  )~N) Á)€R)A)‚ Ä)ƒ 4)„ ¼)…Š)†‹)ˆŒ)‰)ŠŒ)‹Œ)Œ )Œ)ŽŠ) :)‡Š)Ž)‘)’Ž)“Ž)”Ž)• :)–)—ã)˜R)™ä)š :)›R)œã) Á)žR)Ÿ Á)  :)¡ Á)¢ :)£ :)§ :)¨ Û)© Ä)ª )« Ä)¬ Ä)­ 
)® :)¤ 
)¥ :)¦ )¯ Ã)°›)±Ü)²’)³ C)´ :)µ›)¶ C)· C)¹ C)º )» )¼ Ä)½ Õ)¾ )¿ ¼)À :)¸ ¼)Á Ã)Â :)Æ Ã)Ç O)È :)É Ã)Ê C)Ë O)Ì :)Í C)Ã C)Ä C)Å :)Î )Ï )Ú )á )â )ã )ä )å‘)æ )ç )Ð )Ñ )Ò 	)Ó )Ô )Õ‘)Ö 	)× )Ø )Ù )Û )Ü :)Ý :)Þ Õ)ß )à )è)é)ë)ì 4)í C)î C)ï C)ð Ý)ñ O)ò Ý)ê O)ó ¼)ô ¼)ö ¼)÷ ¼)ø ¼)ù ¼)ú ¼)ûA)ü Ä)ýA)õ•)þ)ÿ Ã*  Os O* O* Ý* :* Ý* O* * * Á*	’*
“* :* *”*•* C* Ý* O* * * Á* Ã* :* Ã* Ã* C* Ã* Ý*–* *Ž*Ž* —*! :*"Ü*# :*$ :*%Ž*&Ž*+*,*-Ž*.*/ :*0 :*1Ž*2Ž*'*(’*)’**’*3˜*4˜*5™*6š*7™*8 :*9@*:›*;˜*< :*= O*> O*? O*@ Õ*AZ*C O*D :*E Õ*FZ*GZ*H Õ*I Õ*J :*B Õ*K *L Á*M Ý*N O*O *P *Q *R O*S *T Á*U“*V Á*Wœ*X :*Y *Z Á*[ Á*\ *] Á*^ Á*_ *` :*aR*b Ã*c Ã*d Ã*g :*h C*i Ã*j C*k Ã*l :*m C*n Ã*e :*f Ý*oRž Á*rR å™Ûš *s :¤ ÁŽ Á*t*pž*q*u Ý*v *w :*x :*y‡*zJ*y‡*{ *|‡*y‡*z O*}@*~Ÿ*R*€‡*´*‡‡*ˆ´*Ž O*›*£ 	*¤ 	*§ *¨‡)À*© *ª‡- Á*™ 
*’ }/ Á*¥ *¦ *Ë :*Ì Ã(‡)À*‡*Î *ª‡*Ï *Ð Ã*Â 4*Í Á*ã *ä¡*å¢*æ¢*ç *è C*é Ã*ê‡*ë´*ì C*í Ã*î Ý*ô C*õ :*þ :*ÿ :+  + :+ + :+ + *ö C*÷ *ø *ù :*ú C*û Ý*ü :*ý C+ + + :+ :+ + :+ + C+ C+ C+ :+	 C+
 :+ + C+ :+ C+ Ý+ Ã+ Ã+ Ý+ Ã+ Ã+ Ý+ C+ Ý+  Ã+! Ý+"P+# +$ 	+% +& Ý+' +( +) +* ++ +,¡+- +0 Á+1 }+2@+3 Â+4 Â+5 +6 +7 Ä+. +/L+8 C+9 Ý+:Ü+; C+< Ý+=£+> +? Â+@ +A Õ+B@+C Â+D Ý+E Ã+F@+G Ã+H O+I Ã+J¤+K¥+L¦+M¦+N¦+O§+P¨+R¨+S§+T¨+U§+V©+Wª+X +Y Ä+Q ÛÞaN Ý+Z +[ +\ +]«+^¬+_ +` +a Ã+b Ý+c@+d +e Â+f@+g +h Â+im+j­+l Ý+m C+n Ä+o +p Ý+q Ã+r Ã+s Ý+k O+tÜ+u+v+w+x®+y¯+z+{+|P+}°+‚ Ý+ƒ O+„±+…L+† +‡ }+ˆ +‰ +~L+ :+€ :+ :+¡‡+¢ +£s+® +¥‡+¦À+§‡+¨ +© Á+¯ :+Ó‡+Ô‡+Ü +Ös+Û :+Ð¸+Ñ +×‡,s, ,‡,À,‡, Á,	 +ú¡+ðs+ñ‡+òO 1F,>,ÿ,  :,!’,",t ,u‡,v Á -‚ -ƒ‡-„ Á-… -Œ-‡-Ž Á- --œ -‡-ž -Ÿ‡-  Á-¡ L -´>-µ -¶‡Šö‹ Œ Á-· -½ O-¾ O-Ç O-È O3‡-× -Ø‡-ÙÀ-Ú‡-Û Á-Ï -ÐÀ-Ñ¡-Ò¢-Ós-Ô¡-Õs-Ö»-Æº-î C-ï Ã.‡.	‡. -õ :.À.À-øÀ-ù¢.‡-û¡.‡.s. ¢. :-ô C.  .4‡.%‡.&À.'À.(‡.7s.8 .9‡.:À.5‡.6 Á.L¢.Ss.T‡.aÀ.b.c‡.d Á.e .Ns.OR.P .Q¼.R‡.z½.{½.„ L‡.Œ‡.À.Žs. .‡.‘ Á.‹  :.¼ .­ Á.±‡.ÀÀ.Á :.Â‡.Ã Á.Ä .Å‡.½ Á.¾ Á.¿Ü.í‡.Ù‡.ð´.ÞÀ.ßÁ.àÀ.ñ‡.òÀ.ó>.ô‡.î Á.ï / /s/‡/À/ / ‡/! Á/" /#‡/$  }/O>/U Â/V }/WÃ/X :/Y }/Z /[ /\ 
/P>/QM/RM/S /T /]s/^¡/z Ý/d Ý/e Ã/{ :/| Ý/} C/i Ã/_ /` Ã/y :/~ Õ/ /€Z/ Õ/‚ Õµ /ƒÄ/„ :/…”/†”/‡—/ˆ 	/‰ /Š 	/‹ /Œ 	/ :/Ž C/ C/ Ã/‘ C/’ /“ 
/” /• /– /—”/˜”/™ /š”/› /œ”/ /ž Â/ŸÅ/ Æ/¡Ç/¢È/£È/¤È/¥@/¦ /§ Â/¨ Â/© Â/ª Á/« /¬ Â/­ Õ/® /¯Å/° Ý/±É/²P/³Ê/´ Ý/µ Ã/¶ Ã/· O/¸ Ý/¹ Õ/º Ã/»Ü/¼ Ä/½ /Æ /Ç Õ/È /É Ä/Ê /Ë /Ì Õ/Í /¾ Ä/¿ /À /Á /Â /Ã /Ä>/Å " /Î /ÏÜ/Ð Ý/Ñ :/Ò /ÓP/ÔÜ/Õ Ý/Ö/×“/Ø /Ù ¼/Ú /Ûã/Ü C/Ý /à /á :/â C/ã C/ä :/å Ý/æ /ç Õ/ÞÜ/ß Ä/è :/é /ê Ý/ë /ì Ý/íK/î :/ï :/ð Á/ñ 	/òR/ó Á/ô 	/õ Á/ö 	/÷ Á/ø 	/ù Ý/ú /û Ý/ü /ý :/þ :/ÿ Ý0  0O0 :0¸0Ü0 C0 Ã0 0 Ý0	 Ã0
 Â0@0 0 0 Á0>0 0 0 
0 
0 0 0 0 0 Ã0 C0 Ã0 Á0 Á0% Á0& 	0' 0( Á0) :0*R0+ :0,Ë0 Á0R0R0  Á0!R0"R0# :0$Ë0- Á0. C0/ Â00 01 02 
03 Á04 Á05R06 07R08109 O0: Ã0; Ý0< O0= O0>Ü0? Ã0@ C0A Ý0B Ý0CÜ0G Ý0HÜ0I Õ0JZ0KÌ0L Ý0MÜ0N Ý0D Ý0EÜ0FÜ0O 0P Â0Q 0R 0S Ý0T Ã0UÍ0V 0W }0X :0YZ0Z Õ0[Z0\Z0] Õ0^Z0_Z0`0aÅ0b0cÎ0dO0eO0fÏ0gÅ0hD0iD0jD0k }0l 
0m 0n 
0o ÖY0pR0q Á0rÐ0sÑ0t0u Ã0v0w 0x 	0y Ã0z 0{ Õ0| Ã0} 0~ 
0 
0€ 0 0‚ C0ƒ C0Š C0‹ C0Œ C0 C0Ž 	0 0 0‘ :0„ Ã0… }0† Ã0‡ }0ˆZ0‰ 0’ Ý0“ 0” Á0• Â0– :0— C0˜ O0™Ü0š 0› Ä0œÒ0§ 0° Â0´ 0µ Õ0¶ 0· Â0¸ Õ0¹ 0 0ž Õ0ŸL0  0¡A0¢ 0£ 0¤ 0¥Ò0¦ Â0¨ Ä0© 0ªÒ0« Â0¬A0­ Õ0® 0¯ 0¹ 0 0±L0² Õ0³ Ä0º 0»Ü0Ã :0Ä Ä0Å Õ0Æ 0Ç 0ÈÜ0É :0Ê 0¼ 0½ 0¾ 0¿ Ä0À Ý0Á O0Â 0Ë Â0Ì 0ÍÓ0Î 0ÏÔ0Ð Á0Ñ Á0Ò Á0ÓÔ0ÔR0ÕÔ0Ö Á0× Ä0Ø Ä0Ù ¼0Ú O0Û ¼0ÜA0Ý Û0Þ 0ß C0à Ý0á 0âÕ0ã 0ä 40å 0æ Â0ç’0è :0éœ0êÜ0ë Ý0ì :0í’œ‘|0îÖ0ï×0ð Á0ñ 0òØ0óÙ0ôÚ0õ@0öR0÷ 0øÜ0ùÜ0ú :0û 	0üÛ0ý 0ÿ 1  Á1 Á1 1 1 1R1@0þ 1 1 ÂÊ@1 1@1 1 1 1 Â1 1	 1
 1 1 Ý1 Ã1 Á1 	1 Â1 Ã1 O1 1 Õ1 	1 C1 O1R1  1!R1" 1#R1$ 1%ã1& 1' Â1( Â1) 1* 1+ Á1, 1- 1.@1/ 10R11 12¡13Ü14 15 Á16 17 Á18ä19ã1:1;Ü1<ã1=ã1>R1?Ý1@Ý1AÞ1Bß1C Ã1D Ý1E 1F O1G 1H 
1I¡1J }1K 1L 1M 1N¨1O Ã1P :1Q 1Rà1Sá1T Â1U 1V 1W 1X Á1Yâ1Zâ1[ Ý1\ Ã1]ã1^ä1_›1`›1b C1c Ý1d Ý1e C1f›1gR1h{1iD1aÅ1jR1k O1l C1m Á1n C1o Ã1p Ý1q Ã1r C1s O1t Ã1u O1v C1w1x1y1zå1{å1| 1}1~1Ý1€æ1ç1‚Þ1ƒè1„A1…A1†A1‡ Ä1ˆ ¼1‰A1Š Ä1‹ ¼1Œ ¼1 Ä1Ž 1 1 1‘ Á1’ 1“R1” 1• 1– 1— Á1˜é1£ 1®A1¹A1¾A1¿A1ÀA1ÁA1ÂA1™A1šA1›A1œ ¼1A1žA1ŸA1  ¼1¡ ¼1¢ ¼1¤ ¼1¥ ¼1¦ ¼1§ ¼1¨ Ä1© Ä1ª ¼1« Ä1¬ Ä1­ Ä1¯ ¼1° ¼1± Ä1² Û1³•1´ Û1µ Û1¶ Û1· Û1¸•1º•1»•1¼•1½ Á1Ã 1Ä Á1Å@1Æ 1Ç Á1ÈR1ÉR1Ê :1Ë Á1Ì Á1ÍR1Î Á1Ï 1Ð Á1ÑZ1Ò 1Õ 	1Ö Õ1×Z1Ø Õ1Ù Õ1ÚZ1Ûê1Üë1Óë1Ôë1ÝZ1Þ Õ1ß 1à Õ1á 1â 
1ã 1ä 
1å 1æ 
1ç ¼1è Ä1ëì1ìí1íí1îì1ïí1ðL1ñì1òí1éî1êî1óA1ô ¼1õ ¼1ö Ä1÷ï1ø Á1ù Á1ú Á1ûA1üï1ýð7!1þq1ÿ 2 !2 Á2q2ñ2 Â2 2@2 2@2@2 2 Á2R2R2 2 2@2	@2
 2 2 :2 :2  C2! Ã2" Ã2# Ý2$ 2%@2& :2' :2 C2 :2 2 Õ2@2 2 
2 Ã2 
2 Ã2( 
2) 2* 2+ 
2, 
… † ‘ œ § © ª « ¬ ­ ‡ ˆ ‰ Š ‹ Œ  Ž   ’ “ ” • – — ˜ ™ š ›  ž Ÿ   ¡ ¢ £ ¤ ¥  ¦ !¨ !® "¯ #± $² %³ "´ $µ ¶ · $¸ "° &¹ 'º  » (¼ )½ (¾ *Â +Ã Ä Å ,Æ Ç È É ¿ À Á Ê Ë (Ì -Í .Î /… Ï 0Ð Ñ 1Ò Ó 1Ô Õ 1Ö × 2¤ ¥  ¦ !¨ !Ø 3Ù 4Ú 3Û 5Ü 6Ý 7Þ (ß 8à 9á :â 9® ;ã ® <Ý  ä =å >æ =ç >è ?é @® ê Aî  ï Bð Bñ ò Có Dô Eõ Dë ì Cí 4Ý  ö F… ÷ ¤ ¥  ¦ !¨ !ø Gù ú Hû 9ü Iý Hþ JÝ KÛ Lÿ   Ü M N O P® Q¯ Q± R 4® S T¯ (± U V W X -   Y Z   /®    /! [" /# [$ /% -& \' ]®  ( ^* _+ `, a- ^. b/ c0 1 c) d… !2 48 e9 : !; f< g= h> i? 43 44 j5 h6 7 4¤ ¥  ¦ !¨ !® k@ (A  B lC lD l® mÝ fÛ nW X oY oZ o[ n\ f] mE pF oG oH nI fJ mK pL qM mN O 4P rQ pR nS mT U sV t^ u_ v` wa 4b x® yc zd {e |f }g h i ~j k (l €m n o Xp ‚q ƒÝ  r <s (t „u …v w …x …y …® 8z †…  ‡› Ÿ ˆ  ˆ¡ ˆ¢ ˆ£ ‰{ | Š} Š~ ‹ Œ€   ‹‚ Œƒ ‹„ Œ† ‡ Šˆ 4‰ ŽŠ ‹ Œ ‘ Ž ’ ‰‘ “’ “ ” ”• •– — –˜ 4™ ”š œ – 4ž ‰¹ nº  » n® —¼ f½ ˜¾ —¿ ™À šÁ ›Â œÃ  Ä Å IÆ HÇ žÈ ŸÉ  Ê ¡Ë ¯ ¢±   £… Ì ¤ ¥  ¦ !¨ !Í ¤Î  Þ ¥Ï Ð ¦¯ §Ñ U® ¨Ò ©Ó PÔ ªÕ «Ö F¯ ¬±  ® ­×  Ý ®Ù  Ú ¯Û °Ü ±Ý ²Þ °ß ±Ø °Ø ³à  á ´â ã µä  å ¶æ ·ç ­è ¸é ® ¹ê ºë ì »í º®  î ¼ï ¼ð ñ ½ò  ó ¾	 ¿
 À (®    Á  Â Â Â Â Â Â Â   Ã Ä¤ ¥  ¦ !¨ !ò Å Æó   ½ Ç  ® È  # -$ -% (& (' ( É) Ê* Ë Ê Ì   Ë! Ì" 4® Í+ 6 ®  : Í; ®< = > Í? , ®- ®. Í/ Î0 Î1 Ï2 3 44 Ð5 Ð7 ®8 ®9 ®@ ÑA  B ÒC Ò® ÓL ÔM ÕN ÖO P Q ÃR C® ×S Ø[ Ù\ Ù] Ø^ ×_ Ú` Ûa b ÜT ÚU ÂV ØW ×X ÝY Z Á
 ( Þc  ® (Ý  Û ®d ße  f ßg  h ßi (j àk  l ám án âo ãp äq å® ÓL ÔM ÕN ÖO P Q ÃR CÝ æÛ ²Ü ç èr æs æt æu æv æØ éw ê‚ ƒƒ  „ ë… ì… 4‹ Œ H Ž í î ï‘ ï’ ï† ð‡ ïˆ 4‰ Š ï¤ ¥  ¦ !¨ !… “ ñ™ òš ó› òœ  ôž Ÿ õ  ” 4• ö– ö— ÷˜ ø¤ ¥  ¦ !¨ !Ø ù¡ ¢  £ ú¤ F¥ úÖ F¯ ¬±   £ û -­ ® !¯  ° !Ø /± ü² -³ /´ -µ -¶  · \¸ \¹  º \» ý¼ þ½ ÿØ  ¾ \¿  ¦À PÁ §Â 4ÃÄ  ÌÍÎ 4Ï 4ÐÑ 4Ò 4ÓÅÆ 4Ç 4ÈÉÊËÔÓ  Õ  ÖÛ	×  Ø¯ /± -®Ù (Ú —Û þ®	Ý  Û âã
ä 4å æ 4ç è 4é Ü 4Ý Þ 4ß àáâêë  ìí  … îùü ýþÿ  ïð ñòóô 4õ ö÷øúû¤ ¥  ¦ !¨ !±  	
 ! !"#® $ %&'( ))))))  ! -" W# /$ 4Ø W% & -' (( /® ¨= > ? @ ¨… ÷ ¤ ¥  ¦ !¨ !  r*A+B  C,Û nD nE F,G-®.Ó/L M0N/O.P1Q1R1S H.I J.K0  2T3® ê¯  ±4a5b6c 4d7e8f4g4\4] ^9_:` Ó;h  ¯<±  =i ƒj  k ƒl>® !m?n?o p?	@Ý  qArBs  tCuB®    Á  Â Â Â Â Â Â Â   Ã Ä¤ ¥  ¦ !¨ !	 (Ý  Û vDwD	EÝ  qFxGy z {H|IpJq  ÖK¯L±  ®  ‰MŠ Â‹ ŒN ÂŽ OØ y (‘Pi (j àk  ’ /“ ®  ”Q®RÝSÛ (›  œ ( ž (Ÿ   (¡Sš ® \¢ Â£ \¤ Â¥ Â®T¦U§ ¨V®  © /ª «¬­W® -¯  ° ±  Þ ûßXÄ /Ã  ’Y² ³ ´ Wµ /¶ -· (¸ ØZ¹  º[» ®  ¼ Ç½\¾ :i àj /k  ¿ (… À]Å^Æ !Ç È_É`Ê`Ë]Ì ÁaÂ`Ã`Äb¤ ¥  ¦ !¨ !®cÍ ÂÎ ÂÏ ÂÐ ÂÑ ÂÒ ÂÓ ÂÔ ÂÕ Ââ /ã ‚ä ® ×Ý  å —æ  Ødç è 4é -® 8Ó ­êeëfìfí 4îf®gïhðiñjògókô  õ ‚ö ® žÝ  Û/÷ :ølmnTo   FTpùqØ  ú (ûrüsý þ Øo	 ÑÞ  Ó / ¯ ;± Â	 	 
	t	 Â	 Ä	 	 Â® Â 	 Â	 ¼	 
	 Â	 Â	 ÂÖ F¯ ¬±  Îu	v	  ® µ	 	  	 	w	x	 w¯y± - /	zÝ{Û|	! ®}±~	"	#	$®€	% P	& 	' ® ;	( 	3	;‚	<ƒ	=„	> 	?	@	A	)	*…	+†	,†	-‡	.ˆ	/	0…	1†	2…	4†	5…	6†	7…	8†	9…	:†®‰	B  s  	C ØŠ	D‹	EŒ	FŒ… 	G 	H	I 4	JŽ	K	L	M‘	N 4¤ ¥  ¦ !¨ !A ´@  	P ´	Q ´	R ´	S Ã	T Ý	U Ý	V Ý	W’	O ÃÂzÃ“Ä”	X•Ø H	Yv	Z ® ÄÝ Û (	[ 	\–	] /	^  	_ Û	` ¼	a 	b Â	c ¼	d Â	e Á® 	f  	g—	h Â	i Â®˜Ý (Û™›  	j 	k˜	l (	m 	n (	‡ ž	ˆ ë	‰  	Š Ò	‹ I	Œ ë	 I® žÝšÛ›	Ž (	œ	 (	‘ (	’ (Ý  	“cž	” m±  	• m	–  	—Ÿ±  ® ;Ý  	 r  	ž ;	Ÿ 	 ¡	¡ ¼	¢¢	£¡	˜ 	™ 
	š Â	› 	œ    £T¤| Xp ‚q  	¤¥	¥¦	¦ ® ­&X	§ …§¤ ¥  ¦ !¨ !	¨¨	©§… 	ª u	« !¤ ¥  ¦ !¨ !	¹ —	º  	»©	¼  	½  	À  	Áª	Â H	—«±  ® /L  	Ã¬	Ä­	Å /	Æ®® (ê /	Ç 	È -® /Ó¯	É  	Ê -	Ë -	Ì°¼  	Í 	Î Ó  Ô±	Ï²	Ð Â	Ó 4	Ô¡	Õ³	Ö Â	× 4	Ø  	Ù :	Ú  	Ñ ž	Ò  … 	Û 	æ´	ç	è	é	ê´	ë´	ì´	íµ	Ü´	Ý´	Þ	ß	à¶	á´	â	ã	ä	å¤ ¥  ¦ !¨ !	î·	ï  	ð¸	ñ i (j¹k  ’ H®R	ò n	ó Â	ô n	õ 	öº	÷º	ø éØ»	ù¼	¯Ý  Û n	þ 4	ÿ  
  4
  
 Ã
 4
  	ú 	û½	ü½	ý½
¾
  Ø¿
À
Á¯ ­± - /ÝÂ	  
Ã
Ä
 
 Ä
!Â
"Ã
#Â
$ 
Ä
Ã
  C «Ý ªÛ  ®Å
%Æ
&p
'Æ
(p
)ÆØÇ
0 
1 
2 
3 
4 
5 
6 
7 
8È
9É
: -
; 
< 
= 
> 
? 
@ 
AÊ
BË
CÌ
D  
E ài Hj (k  ’¹
FÍ
GÎ®  ß F
H 
I  … 
J  
OÁ
PÏ
QÐ
RÑ
SÒ
TÓ
UÁ
V 4
K  
LÔ
M  
N 4¤ ¥  ¦ !¨ !
W ×
X  ÝÕ
Y ×
Z¨
[ 
\ Ù| Xp ‚q  
WÖ
X  Ý×
] 
^Ö
_ 
`×   [T .ÞØ
a  
e 
f 
gÙ
h Ý
i Ã
jÚ
kÛ
lÛ
b O
cÜ
d Ã¯Ý±Þß
mÝØ G
n 
oà
p  
qá
râû (
s ýL ÿ
t  
u è
v þØ Æ
w I
x H
y 4® èÝ  
ã
‚ä
ƒ 
„ä
… 
†ä
‡ 
ˆä
z 
{å
| 
}æ
~å
ç
€å®èÓé
‹  
Œê
ë
Žé
ì
 
‘ 
’í
‰î
ŠêÝ  Û /c (
“ à®ïºð
—ñ
˜ 
™ð
š 
›ð
œ 
 4
ž 
” 4
•ò
–ó… 
µô
Àõ
Çö
È÷
Éø
Ê÷
Ëø
Ì÷
Íù
¶ú
·÷
¸ø
¹÷
ºø
»û
¼ 
½ü
¾ü
¿ 
Áü
Â 4
Ãý
Äú
Åþ
Æþ¤ ¥  ¦ !¨ !… 
Î 
Øÿ
Ù 
Ú
Û
Ü
Ý
Þ
ß
Ï
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×¤ ¥  ¦ !¨ !¯± Ç
à
á  
â
ã  
ä F
å 
æ 
ç	
è I
é H
ê 
ë

ì  
í
î  
ï
ijRk  
ð 
ñ ® 
ò 
óØ  
ô R
õ (
ö ®
÷
ý
þ
ÿ  
ø
ù
ú
û
ü Ør rr	 u
®   /   (… I¤ ¥   !¨ !¤ ¥  ¦ !¨ !   [ (Óh”+,- (r ./0 (12345  	g6 78 @ A B C D E FG9:;<=> ? 45  	g6 H¯I  J K ÂL M ÁN O!
W [P /Q  R ["\  g#q#r$s$t#u%v%w$]#^#_$` 4a b$c$d$e$f$h%i%j&k&l&m&n&o$p$x £¼ .y -z £	 ´{ Û ê| … } ~'(€ )‚Àƒ*„*¤ ¥  ¦ !¨ !®  …+†,‡-ˆ ‰.Š/Ø0‹ÁÓ HŒ ž (Ž111
à F
á  
â
ã  
ä F™ š /› ­œ ®2 3¡4¤ (  ¥ /®  ¦5¯N°  ± 
² 
³ 
´ 
µ 
¶ 
§,¨5©  ª « Ý¬ C­ Ý® Ãº6»¼ (½7¾8¿  Ø9À:Á (Â‡Ã  Ä‡Å;Æ ÇWÈ<É;Ê‡Ë (P}Q}R S}T U~V  W}XYbP€Q€R S€T U~V  W€XYbPQR ST U~V  WXYbP‚Q‚R S‚TƒU„V  W‚XYbP…Q…R S…Z 4U†V  W…XYb¥”¦ O« Õ¬”­’®¡¯”°}±›²’§¨’©ª ¥”¦ O« Õ¬”­’®¡¯”°€±›²’§¨’©ª ¥”¦ O« Õ¬”­’®¡¯”°ž±›²’§¨’©ª ¥”¦ O« Õ¬”­’®¡¯”°‚±›²’§¨’©ª ¥”¦ O« Õ¬”­’®¡¯”°…±›²’§¨’©ª Î}ÅPÐ¡ÇsÈ ÝÑ¢É¡Ò}Ó :ÔsÏ}¸}¹P¼ ½ ¾ Ý¿ 	À Á}Â}Ã :º »}Ä}ÅPÆ”Ç“È ÝÉŸÊ}Ë :Ì Í}Î€ÅPÐ¡ÇsÈ ÝÑ¢É¡Ò€Ó£ÔsÏ€¸€¹P¼ ½ ¾ Ý¿ 	À Á€Â€Ã£º »€Ä€ÅPÆ”Ç“È ÝÉŸÊ€Ë£Ì Í€ÎžÅPÐ¡ÇsÈ ÝÑ¢É¡ÒžÓ¤ÔsÏž¸ž¹P¼ ½ ¾ Ý¿ 	À ÁžÂžÃ¤º »žÄžÅPÆ”Ç“È ÝÉŸÊžË¤Ì ÍžÎ‚ÅPÐ¡ÇsÈ ÝÑ¢É¡Ò‚ÓƒÔsÏ‚¸‚¹P¼ ½ ¾ Ý¿ 	À Á‚Â‚Ãƒº »‚Ä‚ÅPÆ”Ç“È ÝÉŸÊ‚ËƒÌ Í‚Î…ÅPÐ¡ÇsÈ ÝÑ¢É¡Ò…Ó¥ÔsÏ…¸…¹P¼ ½ ¾ Ý¿ 	À Á…Â…Ã¥º »…Ä…ÅPÆ”Ç“È ÝÉŸÊ…Ë¥Ì Í…¸‡¹P¼ ½ ¾ Ý¿ 	À Á‡Â‡Ã º »‡Ä‡ÅPÆ”Ç“È ÝÉŸÊ‡Ë Ì Í‡æ ç”è ÛéÜõ}ö}÷ :ø}ù :ú’ô’æ ç”è ÛéÜê}ë}ì :í :î’æ ç”è ÛéÜï}ð}ñ :ò’ó’æ ç”è ÛéÜõ€ö€÷£ø€ù :ú’ô’æ ç”è ÛéÜê€ë€ì£û£ü :î’æ ç”è ÛéÜï€ð€ý£þ :ò’ó’æ ç”è ÛéÜõžöž÷¤øžù :ú’ô’æ ç”è ÛéÜêžëžì¤û¤ü :î’æ ç”è ÛéÜïžðžý¤þ :ò’ó’æ ç”è ÛéÜõ‚ö‚÷ƒø‚ù :ú’ô’æ ç”è ÛéÜê‚ë‚ìƒûƒü :î’æ ç”è ÛéÜï‚ð‚ýƒþ :ò’ó’æ ç”è ÛéÜõ…ö…÷¥ø…ù :ú’ô’æ ç”è ÛéÜê…ë…ì¥û¥ü :î’æ ç”è ÛéÜï…ð…ý¥þ :ò’ó’æ ç”è ÛéÜê‡ë‡ì û ü :î’æ ç”è ÛéÜï‡ð‡ý þ :ò’ó’ :m% :' Á( :) *¦+ ¼, :-Ü :¦ :   4! Ý" ¼# Û$&K :m% :' Á( :) *¦+ ¼, :-Ü :¦§£   4! Ý" ¼# Û$§&K :m% :' Á( :) *¦+ ¼, :-Ü :¦¤   4! Ý" ¼# Û$&K :m% :' Á( :) *¦+ ¼, :-Ü :¦¨ƒ   4! Ý" ¼# Û$¨&K :m% :' Á( :) *¦+ ¼, :-Ü :¦©¥   4! Ý" ¼# Û$©&K?}@s>¡:ª; < 8}9 :ª; < =}> :«; < ?€@s>¡:¬; < 8€9 :¬; < =€> :­; < ?ž@s>¡:®; < 89 :®; < => :¯; < ?‚@s>¡:°; < 8‚9 :°; < =‚> :±; < ?…@s>¡:²; < 8…9 :²; < =…> :³; < 8‡9 :´; < =‡> :´; < w}xsf Ãg :€}U}V}W}}p}q}r}s}y¡z Á`–a–cµdµvµ{ :|}}}~ Á R :S}^ f Ãg :h}i :j}k :l ÁT U}V}W}X}Y}Z}[}\}] _ Á`–a–bµcµdµeµm}n f Ãg :h}i :j}k :l ÁT U}V}W}o}p}q}r}s}t¶u Á`–a–cµdµvµw€xsf Ãg :€€U€V€W€€p€q€r€s€y¡z Á`–a–cµdµvµ{£|€}€~ Á R£S€^ f Ãg :h€i£j€k£l ÁT U€V€W€X€Y€Z€[€\€] _ Á`–a–bµcµdµeµm€n f Ãg :h€i£j€k£l ÁT U€V€W€o€p€q€r€s€t¶u Á`–a–cµdµvµwžxsf Ãg :€žUžVžWžžpžqžržsžy¡z Á`–a–cµdµvµ{¤|ž}ž~ Á R¤Sž^ f Ãg :hži¤jžk¤l ÁT UžVžWžXžYžZž[ž\ž] _ Á`–a–bµcµdµeµmžn f Ãg :hži¤jžk¤l ÁT UžVžWžožpžqžržsžt¶u Á`–a–cµdµvµw‚xsf Ãg :€‚U‚V‚W‚‚p‚q‚r‚s‚y¡z Á`–a–cµdµvµ{ƒ|‚}‚~„ RƒS‚^ f Ãg :h‚iƒj‚kƒl„T U‚V‚W‚X‚Y‚Z‚[‚\‚] _ Á`–a–bµcµdµeµm‚n f Ãg :h‚iƒj‚kƒl„T U‚V‚W‚o‚p‚q‚r‚s‚t¶u Á`–a–cµdµvµw…xsf Ãg :€…U…V…W……p…q…r…s…y¡z Á`–a–cµdµvµ{¥|…}…~†ƒ 4R¥S…^ f Ãg :h…i¥j…k¥l†‚ 4U…V…W…X…Y…Z…[…\…] _ Á`–a–bµcµdµeµm…n f Ãg :h…i¥j…k¥l†‚ 4U…V…W…o…p…q…r…s…t¶u Á`–a–cµdµvµR S‡^ f Ãg :h‡i j‡k l ÁT U‡V‡W‡X‡Y‡Z‡[‡\‡] _ Á`–a–bµcµdµeµm‡n f Ãg :h‡i j‡k l ÁT U‡V‡W‡o‡p‡q‡r‡s‡t¶u Á`–a–cµdµvµ•}²¹¸º¹»¥ Cœ}« Ý ·º»» Ý³º°}´sµ}¶ :±¹¨»·}›sª C•·– œ} ž CŸ Ý ·¡}¢ £ —}˜ Õ™ :š C› ¤¸¥ C« Ý ·¬ ­ }® ¯ °}± ¦ Ä§}¨—© Ý› Äª C•€²¹¸º¹»¥ Cœ€« Ý ¼º»» Ý³º°€´sµ€¶£±¹¨»·€›sª C•¼– œ€ ž CŸ Ý ¼¡€¢ £ —€˜ Õ™£š C› ¤¸¥ C« Ý ¼¬ ­ }® ¯ °€± ¦ Ä§€¨—© Ý› Äª C•ž²¹¸º¹»¥ Cœž« Ý ½º»» Ý³º°ž´sµž¶¤±¹¨»·ž›sª C•½– œ ž CŸ Ý ½¡¢ £ —˜ Õ™¤š C› ¤¸¥ C« Ý ½¬ ­ }® ¯ °± ¦ Ä§¨—© Ý› Äª C•‚²¹¸º¹»¥ Cœ‚« Ý ¾º»» Ý³º°‚´sµ‚¶ƒ±¹¨»·‚›sª C•¾– œ‚ ž CŸ Ý ¾¡‚¢ £ —‚˜ Õ™ƒš C› ¤¸¥ C« Ý ¾¬ ­ }® ¯ °‚± ¦ Ä§‚¨—© Ý› Äª C•…²¹¸º¹»¥ Cœ…« Ý ¿º»» Ý³º°…´sµ…¶¥±¹¨»·…›sª C•¿– œ… ž CŸ Ý ¿¡…¢ £ —…˜ Õ™¥š C› ¤¸¥ C« Ý ¿¬ ­ }® ¯ °…± ¦ Ä§…¨—© Ý› Äª C•‡– œ‡ ž CŸ Ý  Â¡‡¢ £ ¼‡˜ Õ™ š C› ¤¸¥ C« Ý  Â¬ ­ }® ¯ °‡± ¦ Ä§‡¨—© Ý› Äª CçÒèÓéÔêÕëÖì×íØîÙï  ðÙñØØõö :÷  ø  Ø  ùÚØ  ú ú®  Ô âû ü ý 4J :K :LÝM CNÞO :ŒR Á” Á•R–å— Á˜ Á™Ûš › :Ž Á 	 :‘ 	’Z“Üf Ýg Ch O  i ÝjÛk l :m :ŒŽ —}˜ª™ª—€˜¬™¬—˜®™®—‚˜°™°—…˜²™²Ÿ} «¡ Ÿ€ ­¡ Ÿ ¯¡ Ÿ‚ ±¡ƒŸ… ³¢ 4®}®€®®‚®…´}´€µ´‚´…»}»€»»‚»…Á}Á€ÁÁ‚Á…Ç}ÈªÉªÇ€È¬É¬ÇÈ®É®Ç‚È°É°Ç…È²É²ÏªÐ}ÑOÒOÓOÏ¬Ð€ÑOÒOÓOÏ®ÐžÑOÒOÓOÏ°Ð‚ÑOÒOÓOÏ²Ð…ÑOÒOÓOÙªÚ}Ù¬Ú€Ù®ÚžÙ°Ú‚Ù²Ú…àáìà§áíàžáîà¨áïà©á²çèìç§èíçžèîç¨èïç©è²îªïsð}î¬ïsð€î®ïsðî°ïsð‚î²ïsð…öª÷}ø}ù¬÷€ø€ú®÷øû°÷‚ø‚ü²÷…ø…U}V}W X ÁY :U€V€W X ÁY£UVW X ÁY¤U‚V‚WƒX„YƒU…V…Z 4X†Y¥` :a :b :c}d}eöf Ág h :`£a£b£c€d€eöf Ág h£`¤a¤b¤cdeöf Ág h¤`ƒaƒbƒc‚d‚eöf„gƒhƒ`¥a¥b¥c…d…eöf†i 4h¥Ã}Ä}Å Æ ÁÇ :o ÄpAv}w·x}y Áz :{ | } q Ár Ás :t Cu Co O~ 
ƒ}w·x}y Áz :{ „ Ý… Ã O€ Ã Á€ Á‚ Ý† ‡}Ž·} :‘ Á’ “÷” O• }ˆ ‰ ÛŠ}‹ Œ} P}Q}R S}T U~V  W}XYb– :— C› Äœ ¼}ž·Ÿ}  Á¡ ¢ :˜ :™ Cš Â£¤ :«ø¬ø­ù®ú¯ú°±û²¥¦¦ Á§ü¨ }©ýªþ³ Äw·¸}x}¹ :{ º Á» C¼R½ ¼´ 
µ ¶ Â·}¾R¿ ¼Ä o OÅ}w·x}¹ :{ º ÁÀ ÃÁ ÂÜÃ o Æ :Ð}Ñ w·x}Ò Áz :Ó·Ô·Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õ ÄÖ}Ø·Ù}Ú ÁÛ :Ü Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™ëìûíÒ Ááüz :âÉãä¦åÿo Ýv}w·x}y Áz :{ | 
ó 
ô î 
ï ðÜñ Cò Cõ Ýö}ü·ý}þ Áÿ :   CÜ ÷Üø ùú Oû o O Õ  :}w·x}y Áz :{   Â O :	 
‡ O Ý 	 :}·} Á : ö Õ :})K- :. /}0·1}2 :3 Á  !£"€"€#’$ :%Å&€'¼(€*£+ Á,  :})K- :. /}0·1}2 :3 Á  !¤"ž"ž#’$ :%Å&ž'½(ž*¤+ Á,  :})K- :. /}0·1}2 :3 Á  !ƒ"‚"‚#’$ :%Å&‚'¾(‚*ƒ+„,  :})K- :. /}0·1}2 :3 Á  !¥"…"…#’$ :%Å&…'¿(…*¥+†4 45 Ý6 < := :> Ã? :@ :A}B}C :7¸8 9 Ä:}; :DE F ÁGJDE F ÁH :IF ÁE DE F ÁG OJ}K}V :] :^ _ ` Äa Cb :c :L :M N :O P :Q R S CT U W :X}Y CZ Ý[ :\ Cd}e}p :u :v w x Äy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t}| }}·€} Á‚ :ƒ „ Ý…Ü† :~ Ýo :‡ OŽ}w·x}Ï{  Á‘ Ã’ 
ˆÜ‰ :Š C‹ Œ Á}“ O” :›}œ·}ž ÁŸ :¡   :¡ C• –š— Ã˜ :™Üš¢ :£}¤“¥”¦ Á§ ¨ © :ª}­“®”¯ Á° ±£²€³“´”« Á¬ ¨ © :ª}­“®”¯ Á° ±¤²ž³“´”« Á¬ ¨ © :ª}­“®”¯ Á° ±ƒ²‚³“´”«„¬ ¨ © :ª}­“®”¯ Á° ±¥²…³“´”«†µ 4¨ ¶}· :¸ ¹ Á¨ º}» :¼ ½ Á¾€¿£À Á Á¨ º}» :¼ ½ Á¾ž¿¤À Á Á¨ º}» :¼ ½ Á¾‚¿ƒÀ Á„¨ º}» :¼ ½ Á¾…¿¥Â 4Á†¨ Ã€Ä€Å Æ ÁÇ£o ÄpAv€w¼x€y Áz£{ | } q Ár Ás :t Cu Co O~ 
ƒ€w¼x€y Áz£{ „ Ý… Ã O€ Ã Á€ Á‚ Ý† ‡€Ž¼€£‘ Á’ “÷” O• }ˆ ‰ ÛŠ€‹ Œ€ P€Q€R S€T U~V  W€XYb– :— C› Äœ ¼€ž¼Ÿ€  Á¡ ¢£˜ :™ Cš Â£§¤ :«ø¬ø­ù®ú¯ú°§±²§¥¦¦ Á§ü¨ }©ýªþ³ Äw¼¸€x€¹£{ º Á» C¼R½ ¼´ 
µ ¶ Â·€¾R¿ ¼Ä o OÅ€w¼x€¹£{ º ÁÀ ÃÁ ÂÜÃ o Æ :Ð€Ñ w¼x€Ò Áz£Ó¼Ô¼Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õ ÄÖ€Ø¼Ù€Ú ÁÛ£Ü Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™ë§ìí§Ò Ááüz£âÉãä¦åÿo Ýv€w¼x€y Áz£{ | 
ó 
ô î 
ï ðÜñ Cò Cõ Ýö€ü¼ý€þ Áÿ£   CÜ ÷Üø ùú Oû o O Õ  :€w¼x€y Áz£{   Â O :	 
‡ O Ý 	 :€¼€ ÁÉ£ È :ö Õ£€)KÊ :. /€0¼1€2£3 Á  "}"}#’$ :%Å&}'·(}* :+ Á, £€)K- :. /€0¼1€2£3 Á  !¤"ž"ž#’$ :%Å&ž'½(ž*¤+ Á, £€)K- :. /€0¼1€2£3 Á  !ƒ"‚"‚#’$ :%Å&‚'¾(‚*ƒ+„, £€)K- :. /€0¼1€2£3 Á  !¥"…"…#’$ :%Å&…'¿(…*¥+†4 45 Ý6 < := :> Ã? :@ :A€B€C£7¸8 9 Ä:€; :D§E F ÁGJD€E F ÁH£I§F ÁE D§E F ÁG OJ€K€Ë£Ì :] :^ _ ` Äa Cb :c :L :M N :O P :Q R S CT U W :X€Y CZ Ý[ :\ Cd€e€Í£Î :u :v w x Äy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t€| }€¼€€ ÁÏ£ƒ Ð :„ Ý…Ü† :~ Ýo :‡ OŽ€w¼x€Ï{  Á‘ Ã’ 
ˆÜ‰ :Š C‹ Œ Á€“ O” :›€œ¼€ž ÁŸ£¡   :¡ C• –š— Ã˜ :™Üš©£ª€­“®”¯ Á° ± :²}³“´”« Á¬ ¨ ¢££€¤“¥”¦ Á§ ¨ ©£ª€­“®”¯ Á° ±¤²ž³“´”« Á¬ ¨ ©£ª€­“®”¯ Á° ±ƒ²‚³“´”«„¬ ¨ ©£ª€­“®”¯ Á° ±¥²…³“´”«†µ 4¨ º€»£¼ ½ Á¾}¿ :À Á Á¨ ¶€·£¸ ¹ Á¨ º€»£¼ ½ Á¾ž¿¤À Á Á¨ º€»£¼ ½ Á¾‚¿ƒÀ Á„¨ º€»£¼ ½ Á¾…¿¥Â 4Á†¨ ÃÄÅ Æ ÁÇ¤o ÄpAvw½xy Áz¤{ | } q Ár Ás :t Cu Co O~ 
ƒw½xy Áz¤{ „ Ý… Ã O€ Ã Á€ Á‚ Ý† ‡žŽ½ž¤‘ Á’ “÷” O• }ˆ ‰ ÛŠž‹ Œž PQR ST U~V  WXYb– :— C› Äœ ¼ž½Ÿ  Á¡ ¢¤˜ :™ Cš Â£ž¤ :«ø¬ø­ù®ú¯ú°ž±²ž¥¦¦ Á§ü¨ }©ýªþ³ Äw½¸x¹¤{ º Á» C¼R½ ¼´ 
µ ¶ Â·¾R¿ ¼Ä o OÅw½x¹¤{ º ÁÀ ÃÁ ÂÜÃ o Æ :ÐÑ w½xÒ Áz¤Ó½Ô½Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õ ÄÖØ½ÙÚ ÁÛ¤Ü Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™ëžìížÒ Áz¤áüâÉãä¦åÿo Ývw½xy Áz¤{ | 
ó 
ô î 
ï ðÜñ Cò Cõ Ýöü½ýþ Áÿ¤   CÜ ÷Üø ùú Oû o O Õ  :w½xy Áz¤{   Â O :	 
‡ O Ý 	 :½ ÁÉ¤ È :ö Õ¤ž)KÊ :. /ž0½1ž2¤3 Á  "}"}#’$ :%Å&}'·(}* :+ Á, ¤ž)K- :. /ž0½1ž2¤3 Á  !£"€"€#’$ :%Å&€'¼(€*£+ Á, ¤ž)K- :. /ž0½1ž2¤3 Á  !ƒ"‚"‚#’$ :%Å&‚'¾(‚*ƒ+„, ¤ž)K- :. /ž0½1ž2¤3 Á  !¥"…"…#’$ :%Å&…'¿(…*¥+†4 45 Ý6 < := :> Ã? :@ :AžBžC¤7¸8 9 Ä:ž; :DžE F ÁGJDE F ÁH¤IžF ÁE DžE F ÁG OJžKžË¤Ì :] :^ _ ` Äa Cb :c :L :M N :O P :Q R S CT U W :XžY CZ Ý[ :\ CdžežÍ¤Î :u :v w x Äy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :tž| }½€ ÁÏ¤ƒ Ð :„ Ý…Ü† :~ Ýo :‡ OŽw½xÏ{  Á‘ Ã’ 
ˆÜ‰ :Š C‹ Œ Á“ O” :›œ½ž ÁŸ¤¡   :¡ C• –š— Ã˜ :™Üš©¤ªž­“®”¯ Á° ± :²}³“´”« Á¬ ¨ ©¤ªž­“®”¯ Á° ±£²€³“´”« Á¬ ¨ ¢¤£ž¤“¥”¦ Á§ ¨ ©¤ªž­“®”¯ Á° ±ƒ²‚³“´”«„¬ ¨ ©¤ªž­“®”¯ Á° ±¥²…³“´”«†µ 4¨ ºž»¤¼ ½ Á¾}¿ :À Á Á¨ ºž»¤¼ ½ Á¾€¿£À Á Á¨ ¶ž·¤¸ ¹ Á¨ ºž»¤¼ ½ Á¾‚¿ƒÀ Á„¨ ºž»¤¼ ½ Á¾…¿¥Â 4Á†¨ Ã‚Ä‚ÅƒÆ„Çƒo ÄpAv‚w¾x‚y„zƒ{ƒ| } q Ár Ás :t Cu Co O~ 
ƒ‚w¾x‚y„zƒ{ƒ„ Ý… Ã O€ Ã Á€ Á‚ Ý† ‡‚Ž¾‚ƒ‘„’ “÷” O• }ˆ ‰ ÛŠ‚‹ Œ‚ P‚Q‚R S‚TƒU„V  W‚XYb– :— C› Äœ ¼‚ž¾Ÿ‚ „¡ƒ¢ƒ˜ :™ Cš Â£¨¤ :«ø¬ø­ù®ú¯ú°¨±²¨¥¦¦§ü¨ }©ýªþ³ Äw¾¸‚x‚¹ƒ{ƒº„» C¼R½ ¼´ 
µ ¶ Â·‚¾R¿ ¼Ä o OÅ‚w¾x‚¹ƒ{ƒº„À ÃÁ ÂÜÃ o Æ :Ð‚Ñ w¾x‚Ò„zƒÓ¾Ô¾Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õ ÄÖ‚Ø¾Ù‚Ú„ÛƒÜƒÝ OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™ë¨ìí¨ÒzƒáüâÉãä¦åÿo Ýv‚w¾x‚y„zƒ{ƒ| 
ó 
ô î 
ï ðÜñ Cò Cõ Ýö‚ü¾ý‚þ„ÿƒ ƒ CÜ ÷Üø ùú Oû o O Õ  :‚w¾x‚y„zƒ{ƒ  Â O :	 
‡ O Ý 	 :‚¾‚„ÉƒƒÈ :ö Õƒ‚)KÊ :. /‚0¾1‚2ƒ3„  "}"}#’$ :%Å&}'·(}* :+ Á, ƒ‚)K- :. /‚0¾1‚2ƒ3„  !£"€"€#’$ :%Å&€'¼(€*£+ Á, ƒ‚)K- :. /‚0¾1‚2ƒ3„  !¤"ž"ž#’$ :%Å&ž'½(ž*¤+ Á, ƒ‚)K- :. /‚0¾1‚2ƒ3„  !¥"…"…#’$ :%Å&…'¿(…*¥+†4 45 Ý6 < := :> Ã? :@ :A‚B‚Cƒ7¸8 9 Ä:‚; :D¨Ñ F„GJD‚EƒF„HƒI¨F„E D¨Ñ F„G OJ‚K‚ËƒÌ :] :^ _ ` Äa Cb :c :L :M N :O P :Q R S CT U W :X‚Y CZ Ý[ :\ Cd‚e‚ÍƒÎ :u :v w x Äy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t‚| }‚¾€‚„ÏƒƒƒÐ :„ Ý…Ü† :~ Ýo :‡ OŽ‚w¾x‚Ï{ƒº„‘ Ã’ 
ˆÜ‰ :Š CÒ Á‹ Œ Á‚“ O” :›‚œ¾‚ž„Ÿƒ¡ƒ  :¡ C• –š— Ã˜ :™Üš©ƒª‚­“®”¯„° ± :²}³“´”« Á¬ ¨ ©ƒª‚­“®”¯„° ±£²€³“´”« Á¬ ¨ ©ƒª‚­“®”¯„° ±¤²ž³“´”« Á¬ ¨ ¢ƒ£‚¤“¥”¦„§ ¨ ©ƒª‚­“®”¯„° ±¥²…³“´”«†µ 4¨ º‚»ƒ¼ ½„¾}¿ :À Á Á¨ º‚»ƒ¼ ½„¾€¿£À Á Á¨ º‚»ƒ¼ ½„¾ž¿¤À Á Á¨ ¶‚·ƒ¸ ¹„¨ º‚»ƒ¼ ½„¾…¿¥Â 4Á†¨ Ã…Ä…ä 4Æ†Ç¥o ÄpAv…w¿x…y†z¥Ó 4| } q Ár Ás :t Cu Co O~ 
ƒ…w¿x…y†z¥Ó 4„ Ý… Ã O€ Ã Á€ Á‚ Ý† ‡…Ž¿…¥‘†Ô 4“÷” O• }ˆ ‰ ÛŠ…‹ Œ… P…Q…R S…Z 4U†V  W…XYb– :— C› Äœ ¼…ž¿Ÿ… †Õ 4¢¥˜ :™ Cš Â£©¤ :«ø¬ø­ù®ú¯ú°©±	²©¥¦¦
Ö 4¨ }©ýªþ³ Äw¿¸…x…¹¥Ó 4º†» C¼R½ ¼´ 
µ ¶ Â·…¾R¿ ¼Ä o OÅ…w¿x…¹¥Ó 4º†À ÃÁ ÂÜÃ o Æ :Ð…Ñ w¿x…Ò†z¥Ó¿Ô¿Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õ ÄÖ…Ø¿Ù…Ú†Û¥× 4Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™ë©ì	í©Ò
Ø 4z¥âÉãä¦åÿo Ýv…w¿x…y†z¥Ó 4| 
ó 
ô î 
ï ðÜñ Cò Cõ Ýö…ü¿ý…þ†ÿ¥Ù 4 CÜ ÷Üø ùú Oû o OÚ : Õ  :…w¿x…y†z¥Ó 4  Â O :	 
‡ O Ý 	 :…¿…†É¥Û 4È :ö Õ¥…)KÊ :. /…0¿1…2¥3†Ü 4"}"}#’$ :%Å&}'·(}* :+ Á, ¥…)K- :. /…0¿1…2¥3†Ü 4!£"€"€#’$ :%Å&€'¼(€*£+ Á, ¥…)K- :. /…0¿1…2¥3†Ü 4!¤"ž"ž#’$ :%Å&ž'½(ž*¤+ Á, ¥…)K- :. /…0¿1…2¥3†Ü 4!ƒ"‚"‚#’$ :%Å&‚'¾(‚*ƒ+„, 5 Ý6 < := :> Ã? :@ :A…B…C¥7¸8 9 Ä:…; :D©Ý 4F†GJD…Þ 4F†H¥I©F†Þ 4D©Ý 4F†G OJ…K…Ë¥Ì :] :^ _ ` Äa Cb :c :L :M N :O P :Q R S CT U W :X…Y CZ Ý[ :\ Cd…e…Í¥Î :u :v w x Äy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t…| }…¿€…†Ï¥ß 4Ð :„ Ý…Ü† :~ Ýo :‡ OŽ…w¿x…ÏÓ 4º†‘ Ã’ 
ˆÜ‰ :Š CÒ Á‹ Œ Á…“ O” :›…œ¿…ž†Ÿ¥Õ 4  :¡ C• –š— Ã˜ :™Üš©¥ª…­“®”¯†à 4± :²}³“´”« Á¬ ¨ ©¥ª…­“®”¯†à 4±£²€³“´”« Á¬ ¨ ©¥ª…­“®”¯†à 4±¤²ž³“´”« Á¬ ¨ ©¥ª…­“®”¯†à 4±ƒ²‚³“´”«„¬ ¨ ¢¥£…¤“¥”¦†á 4¨ º…»¥â 4½†¾}¿ :À Á Á¨ º…»¥â 4½†¾€¿£À Á Á¨ º…»¥â 4½†¾ž¿¤À Á Á¨ º…»¥â 4½†¾‚¿ƒÀ Á„¨ ¶…·¥ã 4¹†¨ o ÄpAv‡wÀx‡y Áz { | } q Ár Ás :t Cu Co O~ 
ƒ‡wÀx‡y Áz { „ Ý… Ã O€ Ã Á€ Á‚ Ý† ‡‡ŽÀ‡ ‘ Á’ “÷” O• }ˆ ‰ ÛŠ‡‹ Œ‡ P‡Q‡R S‡T U~V  W‡XYb– :— C› Äœ ¼‡žÀŸ‡  Á¡ ¢ ˜ :™ Cš Â£ð¤ :«ø¬ø­ù®ú¯ú°ð±²ð¥¦¦ Á§ü¨ }©ýªþ³ ÄåÀê‡ë‡ì í î Á» CïRð ¼æ 
ç è Âé‡¾R¿ ¼Ä o OÅ‡wÀx‡¹ { º ÁÀ ÃÁ ÂÜÃ o Æ :Ð‡Ñ wÀx‡Ò Áz ÓÀÔÀÇ OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
‡‡ 	ã
  }‡ ã ñ‡òúû‡ü ýãþ ÿ } ‡ óãô õ }ö‡÷ øãù ‡"#‡$ %ã
 & '‡( Õ Õ ã! ñ‡òú‡ü ýãþ  }‡ ã ‡ Õãñ‡òú‡ü ýãþ  ‡ Õóãô  ‡ Õøãù )‡*./‡0 1ã2 3“4;‡+ ,ã- 6 }7‡8 9ã: )‡*./‡0 1ã2 3“45‡+ ,ã- ÿ } ‡ óãô õ }ö‡÷ øãù )‡*./‡0 1ã2 3“4H‡+ ,ã- A B‡C ÕD‡E FãG )‡*./‡0 1ã2 3“45‡+ ,ã- ÿ }<‡= óã> ‡? Õøã)‡*./‡0 1ã2 3“4@‡+ ,ã-  ‡ Õóãô  ‡ Õøãù I‡J K.L‡MYNãO 3“4;‡+ ,ã- 6 }7‡8 9ã: I‡J K.L‡MYNãO 3“45‡+ ,ã- ÿ } ‡ óãô õ }ö‡÷ øãù I‡J K.L‡MYNãO 3“4H‡+ ,ã- A B‡C ÕD‡E FãG I‡J K.L‡MYNãO 3“45‡+ ,ã- ÿ }<‡= óã> ‡? ÕøãI‡J K.L‡MYNãO 3“4P‡+ ,ã- Q R‡S ÕãT U ‡V ÕãW Õ ÄÖ‡ØÀÙ‡Ú ÁÛ Ü Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™ëðìíðzzÒ ÁáüâÉãä¦åÿo Ýv‡wÀx‡y Áz { | 
ó 
ô î 
ï ðÜñ Cò Cõ Ýö‡üÀý‡þ Áÿ    CÜ ÷Üø ùú Oû X OY Õ` a :b‡åÀë‡c Ád í   ÂZ O[ :\ ]‡^ _O Ý 	 :‡À‡ ÁÉ  È :ö Õ5 Ý6 < := :> Ã? :@ :A‡B‡C 7¸8 9 Ä:‡; :D‡E F ÁGJD‡E F ÁH I‡F ÁE D‡E F ÁG OJ‡K‡Ë Ì :] :^ _ ` Äa Cb :c :L :M N :O P :Q R S CT U W :X‡Y CZ Ý[ :\ Cd‡e‡Í Î :u :v w x Äy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t‡| }‡À€‡ ÁÏ ƒ Ð :„ Ý…Ü† :~ Ýo :‡ OŽ‡wÀx‡Ï{  Á‘ Ã’ 
ˆÜ‰ :Š C‹ Œ Á‡“ O” :›‡œÀ‡ž ÁŸ ¡   :¡ C• –š— Ã˜ :™Üš¢ £‡¤“¥”¦ Á§ ¨ ¶‡· ¸ ¹ Á¨  :}ö Á :~ WAX :]}^·_}`öa :b c Á¸}Y ÄZ 
[ C\ Ás :d Oe 
X :]}^·_}`öa :b i Áf Ýg Ã O€ Áh}‚ Ýj k :l}m·n}o :p}qör Ás “>” O• }ˆ ‰ ÛŠ}‹ Œ} tu}yz}{ | Á} ~bb€bvbwxb :‚ C… †>‡}ˆ·‰}Šö‹ Œ Áƒ :„}˜ :™ Cš Â :Ž˜™š›œžûŸZ ‘’ Á“ü”Z•–ý—þ  :¡ ¢·£}¤ö¥ :¦ § Á¨ C¼R½ ¼´ 
µ ¶ Â·}¾R¿ ¼Ä d ­ :®}¢·£}¤ö¥ :¦ § Á¸}©>ªM«>¬Md ¯ :° X :]}^·_}`ö± Á² :¸}Ó·Ô·Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
³ ´ :¶}··¸}¹öº :» ¼ Á½}Ý OÞ Oß Ãµ O¾ÉàÜÄ—Å ÄÆHÇÿÈ™É :ÊËû¾¿À ÁÁüÂ :ÃY ÝÌ 
ðÜÑ :Ò}^·_}`öÓ :¸}b ± ÁÍ Î 
Ï Ð CÔ ÝÕ :Ú}Û·Ü}ÝöÞ :ß}à á ÁÖ C×ÜØ ÙÜø ùú Oû â Oã Õæ ç :è :é}¢·£}¤ö¥ :¦ƒ§ Áä å Â O :	 
‡ Oêëð Ý 	ñ :ò}ó·ô}õöö :ì í Áöî Õï÷ :ø}ü·ý}þ :ÿà Y}0·1}ù :úö  û Á!£"€#K$ :% &€'¼(€*£+ Á, ÷ :ø}ü·ý}þ :ÿà Y}0·1}ù :úö  û Á!¤"ž#K$ :% &ž'½(ž*¤+ Á, ÷ :ø}ü·ý}þ :ÿà Y}0·1}ù :úö  û Á!ƒ"‚#K$ :% &‚'¾(‚*ƒ+„, ÷ :ø}ü·ý}þ :ÿà Y}0·1}ù :úö  û Á!¥"…#K$ :% &…'¿(…*¥+†4 4÷ :ø}ü·ý}þ :ÿà Y}0·1}ù :úö  û Á£€¼€ :	€'¼(€
£ö,  Á÷ :ø}ü·ý}þ :ÿà Y}0·1}ù :úö  û Á¤ž½ž :	ž'½(ž
¤ö,  Á÷ :ø}ü·ý}þ :ÿà Y}0·1}ù :úö  û Áƒ‚¾‚ :	‚'¾(‚
ƒö, „÷ :ø}ü·ý}þ :ÿà Y}0·1}ù :úö  û Á¥…¿… :	…'¿(…
¥ö4 4†5 Ý6 < : :> Ã : :}} : :¸ }; :Jö ÁJ  :}ö Á  : ö Á  Oö Á O Ì :] :! # $}%}& :' :(a Cc :L :M N :O P :Q R S CT U W :"}Y CZ Ý[ :\ C) :* :+ - .}/}0 :1 :2y z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :,}3 4 :: :; Ý<Ü= :> Ý?}@·A}5ö6 :7 8 Á9}d :B}¢·EÏF}GöH ÁIUJLKUC DÜŠ CŒ Á}L O” :M :N}ˆ·O}Pöƒ :Q R Á  :¡ C• –š— Ã˜ :™ÜšS :T®X}YöZ Á[ \ ´¸²}U ÁV W ] :T®X}YöZ Á[ ^£\ ´¸²€U ÁV W ] :T®X}YöZ Á[ ^¤\ ´¸²žU ÁV W ] :T®X}YöZ Á[ ^ƒ\ ´¸²‚U„V W ] :T®X}YöZ Á[ ^¥\ ´¸²…U†_ 4W ` :a¥b}cöd Áe ¨ ] :T®X}YöZ Á[ j£k´f€göh Ái ¨ ] :T®X}YöZ Á[ j¤k´fžgöh Ái ¨ ] :T®X}YöZ Á[ jƒk´f‚göh„i ¨ ] :T®X}YöZ Á[ j¥k´f…göh†l 4¨ m :n}o p Á¿ :¨ m :q}r s Á¾€¿£À Á Á¨ m :q}r s Á¾ž¿¤À Á Á¨ m :q}r s Á¾‚¿ƒÀ Á„¨ m :q}r s Á¾…¿¥Â 4Á†¨ t :u}v w Áx :y}z { Á| t :u}v w Áx£y€z { Á| t :u}v w Áx¤yžz { Á| t :u}v w Áxƒy‚z {„| t :u}v w Áx¥y…} 4{†| £€ö Á£~ Y ÄZ 
WAX£]€^¼_€`öa£b  Á[ C\ Ás :¸€d Oe 
X£]€^¼_€`öa£b i Áf Ýg Ã O€ Áh€‚ Ýj k£l€m¼n€o£p€qör Ás “>” O• }ˆ ‰ ÛŠ€‹ Œ€ tu€yz€{ | Á} ~bb€bvbwxbL :‚ C… †>M£‡€ˆ¼‰€Šö‹ Œ Áƒ£„€˜ :™ Cš Â :Ž§˜€›™œ§žŸZ§ ‘’ Á“ü”Z•§–ý—þ £¡ ¢¼£€¤ö¥£¦ § Á¨ C¼R½ ¼´ 
µ ¶ Â·€¾R¿ ¼Ä d  £‚ :®€¢¼£€¤ö¥£¦ § Á¸€©>ªM«>¬Md ¯ :° X£]€^¼_€`ö± Á²£¸€Ó¼Ô¼Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
³ ´£¶€·¼¸€¹öº£» ¼ Á½€Ý OÞ Oß Ãµ O¾ÉàÜÄ—Å ÄÆHÇÿÈ™É£Ê§Ë¾§¿À ÁÁüÂ£Ã§Y ÝÌ 
ðÜÑ£Ò€^¼_€`öÓ£¸€b ± ÁÍ Î 
Ï Ð CÔ ÝÕ£Ú€Û¼Ü€ÝöÞ£ß€à á ÁÖ C×ÜØ ÙÜø ùú Oû â Oã Õæ ç :è£é€¢¼£€¤ö¥£¦ƒ§ Áä å Â O :	 
‡ Oêëð Ý 	„£… :ò€ó¼ô€õöƒ£ì í ÁÈ :öî Õï÷£ø€ü¼ý€† :ÿà Y€0¼1€ù£úö  û Á"}#K$ :% &}'·(}* :+ Á, ÷£ø€ü¼ý€þ :ÿà Y€0¼1€ù£úö  û Á!¤"ž#K$ :% &ž'½(ž*¤+ Á, ÷£ø€ü¼ý€þ :ÿà Y€0¼1€ù£úö  û Á!ƒ"‚#K$ :% &‚'¾(‚*ƒ+„, ÷£ø€ü¼ý€þ :ÿà Y€0¼1€ù£úö  û Á!¥"…#K$ :% &…'¿(…*¥+†4 4÷£ø€ü¼ý€‡ :ÿà Y€0¼1€ù£úö  û Á}·} :	}'·(}
 :ö,  Á÷£ø€ü¼ý€þ :ÿà Y€0¼1€ù£úö  û Á¤ž½ž :	ž'½(ž
¤ö,  Á÷£ø€ü¼ý€þ :ÿà Y€0¼1€ù£úö  û Áƒ‚¾‚ :	‚'¾(‚
ƒö, „÷£ø€ü¼ý€þ :ÿà Y€0¼1€ù£úö  û Á¥…¿… :	…'¿(…
¥ö4 4†5 Ý6 < : :> Ã : :€€££¸ €; :J§ö ÁJ £€ö Á £ §ö Á  O§ö Á O Ì :] :! # $€%€&£ˆ£(a Cb :c :L :M N :O P :Q R S CT U W :"€Y CZ Ý[ :\ C) :* :+ - .€/€0£1£2y z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :,€3 4£: :; Ý<Ü= :> Ý?€@¼A€5ö6£7 8 Á9€d :B€¢¼EÏF€GöH ÁIUJLKUC DÜŠ CŒ Á€L O” :M£N€ˆ¼O€Pöƒ£Q R Á  :¡ C• –š— Ã˜ :™Üš]£T®X€YöZ Á[ ^ :\ ´¸²}U ÁV W S£T®X€YöZ Á[ \ ´¸²€U ÁV W ]£T®X€YöZ Á[ ^¤\ ´¸²žU ÁV W ]£T®X€YöZ Á[ ^ƒ\ ´¸²‚U„V W ]£T®X€YöZ Á[ ^¥\ ´¸²…U†_ 4W ]£T®X€YöZ Á[ j :k´f}göh Ái ¨ `£a¥b€cöd Áe ¨ ]£T®X€YöZ Á[ j¤k´fžgöh Ái ¨ ]£T®X€YöZ Á[ jƒk´f‚göh„i ¨ ]£T®X€YöZ Á[ j¥k´f…göh†l 4¨ m£q€r s Á¾}¿ :À Á Á¨ m£n€o p Á¿£¨ m£q€r s Á¾ž¿¤À Á Á¨ m£q€r s Á¾‚¿ƒÀ Á„¨ m£q€r s Á¾…¿¥Â 4Á†¨ t£u€v w Áx :y}z { Á| t£u€v w Áx£y€z { Á| t£u€v w Áx¤yžz { Á| t£u€v w Áxƒy‚z {„| t£u€v w Áx¥y…} 4{†| ¤ö Á¤~ Y ÄZ 
WAX¤]^½_`öa¤b c Á¸[ C\ Ás :d Oe 
X¤]^½_`öa¤b i Áf Ýg Ã O€ Áh‚ Ýj k¤lžm½nžo¤pžqör Ás “>” O• }ˆ ‰ ÛŠž‹ Œž tuyz{ | Á} ~bb€bvbwxbL :‚ C… †>M¤‡ˆ½‰Šö‹ Œ Áƒ¤„˜ :™ Cš Â :Žž˜€›™œžžŸZž ‘’ Á“ü”Z•ž–ý—þ ¤¡ ¢½£¤ö¥¤¦ § Á¨ C¼R½ ¼´ 
µ ¶ Â·¾R¿ ¼Ä d  ¤‚ :®¢½£¤ö¥¤¦ § Á¸©>ªM«>¬Md ¯ :° X¤]^½_`ö± Á²¤¸Ó½Ô½Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
³ ´¤¶·½¸¹öº¤» ¼ Á½Ý OÞ Oß Ãµ O¾ÉàÜÄ—Å ÄÆHÇÿÈ™É¤ÊžË¾ž¿À ÁÁüÂ¤ÃžY ÝÌ 
ðÜÑ¤Ò^½_`öÓ¤¸b ± ÁÍ Î 
Ï Ð CÔ ÝÕ¤ÚÛ½ÜÝöÞ¤ßà á ÁÖ C×ÜØ ÙÜø ùú Oû â Oã Õæ ç :è¤é¢½£¤ö¥¤¦ § Áä å Â O :	 
‡ Oêëð Ý 	„¤… :òó½ôõöƒ¤ì í ÁÈ :öî Õï÷¤øžü½ýž† :ÿà Yž0½1žù¤úö  û Á"}#K$ :% &}'·(}* :+ Á, ÷¤øžü½ýžþ :ÿà Yž0½1žù¤úö  û Á!£"€#K$ :% &€'¼(€*£+ Á, ÷¤øžü½ýžþ :ÿà Yž0½1žù¤úö  û Á!ƒ"‚#K$ :% &‚'¾(‚*ƒ+„, ÷¤øžü½ýžþ :ÿà Yž0½1žù¤úö  û Á!¥"…#K$ :% &…'¿(…*¥+†4 4÷¤øžü½ýž‡ :ÿà Yž0½1žù¤úö  û Á}·} :	}'·(}
 :ö,  Á÷¤øžü½ýžþ :ÿà Yž0½1žù¤úö  û Á£€¼€ :	€'¼(€
£ö,  Á÷¤øžü½ýžþ :ÿà Yž0½1žù¤úö  û Áƒ‚¾‚ :	‚'¾(‚
ƒö, „÷¤øžü½ýžþ :ÿà Yž0½1žù¤úö  û Á¥…¿… :	…'¿(…
¥ö4 4†5 Ý6 < : :> Ã : :žž¤¤¸ ž; :Jžö ÁJ ¤ö Á ¤ žö Á  Ožö Á O Ì :] :! # $ž%ž&¤ˆ¤(a Cb :c :L :M N :O P :Q R S CT U W :"žY CZ Ý[ :\ C) :* :+ - .ž/ž0¤1¤2y z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :,ž3 4 :: :; Ý<Ü= :> Ý?@½A5ö6 :7 8 Á9d :B¢½EÏFGöH ÁIUJLKUC DÜŠ CŒ ÁL O” :M¤Nˆ½OPöƒ¤Q R Á  :¡ C• –š— Ã˜ :™Üš]¤T®XžYöZ Á[ ^ :\ ´¸²}U ÁV W ]¤T®XžYöZ Á[ ^£\ ´¸²€U ÁV W S¤T®XžYöZ Á[ \ ´¸²žU ÁV W ]¤T®XžYöZ Á[ ^ƒ\ ´¸²‚U„V W ]¤T®XžYöZ Á[ ^¥\ ´¸²…U†_ 4W ]¤T®XžYöZ Á[ j :k´f}göh Ái ¨ ]¤T®XžYöZ Á[ j£k´f€göh Ái ¨ `¤a¥bžcöd Áe ¨ ]¤T®XžYöZ Á[ jƒk´f‚göh„i ¨ ]¤T®XžYöZ Á[ j¥k´f…göh†l 4¨ m¤qžr s Á¾}¿ :À Á Á¨ m¤qžr s Á¾€¿£À Á Á¨ m¤nžo p Á¿¤¨ m¤qžr s Á¾‚¿ƒÀ Á„¨ m¤qžr s Á¾…¿¥Â 4Á†¨ t¤užv w Áx :y}z { Á| t¤užv w Áx£y€z { Á| t¤užv w Áx¤yžz { Á| t¤užv w Áxƒy‚z {„| t¤užv w Áx¥y…} 4{†| ƒ‚ö„ƒ~ƒY ÄZ 
WAXƒ]‚^¾_‚`öaƒbƒ±„¸‚‰ Á[ C\ Ás :d Oe 
Xƒ]‚^¾_‚`öaƒbƒ±„f Ýg Ã O Á€ Áh‚‚ Ýj kƒl‚m¾n‚oƒp‚qör„s “>” O• }ˆ ‰ ÛŠ‚‹ Œ‚ tu‚yz‚{ |„}ƒ~bb€bvbwxbL :‚ C… †>Mƒ‡‚ˆ¾‰‚Šö‹ƒŒ„ƒƒ„‚˜ :™ Cš Â :Ž¨˜€›™œ¨žŸZ¨ ‘’“ƒ”Z•¨–ý—þ ƒ¡ ¢¾£‚¤ö¥ƒ¦ƒ§„¨ C¼R½ ¼´ 
µ ¶ Â·‚¾R¿ ¼Ä d  ƒ‚ :®‚¢¾£‚¤ö¥ƒ¦ƒ§„¸‚©>ªM«>¬Md ¯ :° Xƒ]‚^¾_‚`ö±„²ƒ¸‚Ó¾Ô¾Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
³ ´ƒ¶‚·¾¸‚¹öºƒ»ƒ¼„½‚Ý OÞ Oß Ãµ O¾ÉàÜÄ—Å ÄÆHÇÿÈ™ÉƒÊ¨Ë¾¨¿À„ÁüÂƒÃ¨Y ÝÌ 
ðÜÑƒÒ‚^¾_‚`öÓƒ¸‚bƒ±„Í Î 
Ï Ð CÔ ÝÕƒÚ‚Û¾Ü‚ÝöÞƒß‚àƒá„Ö C×ÜØ ÙÜø ùú Oû â Oã Õæ ç :èƒé‚¢¾£‚¤ö¥ƒ¦ƒ§„ä å Â O :	 
‡ Oêëð Ý 	„ƒ… :ò‚ó¾ô‚õöƒƒìƒí„È :öî Õï÷ƒø‚ü¾ý‚† :ÿà Y‚0¾1‚ùƒúö  û„"}#K$ :% &}'·(}* :+ Á, ÷ƒø‚ü¾ý‚þ :ÿà Y‚0¾1‚ùƒúö  û„!£"€#K$ :% &€'¼(€*£+ Á, ÷ƒø‚ü¾ý‚þ :ÿà Y‚0¾1‚ùƒúö  û„!¤"ž#K$ :% &ž'½(ž*¤+ Á, ÷ƒø‚ü¾ý‚þ :ÿà Y‚0¾1‚ùƒúö  û„!¥"…#K$ :% &…'¿(…*¥+†4 4÷ƒø‚ü¾ý‚‡ :ÿà Y‚0¾1‚ùƒúö  û„}·} :	}'·(}
 :ö,  Á÷ƒø‚ü¾ý‚þ :ÿà Y‚0¾1‚ùƒúö  û„£€¼€ :	€'¼(€
£ö,  Á÷ƒø‚ü¾ý‚þ :ÿà Y‚0¾1‚ùƒúö  û„¤ž½ž :	ž'½(ž
¤ö,  Á÷ƒø‚ü¾ý‚þ :ÿà Y‚0¾1‚ùƒúö  û„¥…¿… :	…'¿(…
¥ö4 4†5 Ý6 < : :> Ã : :‚‚ƒƒ¸ ‚; :J¨ö„JŠ ƒ‚ö„ƒƒ ¨ö„  O¨ö„ OŠ Ì :] :! # $‚%‚&ƒˆƒ(a Cb :c :L :M N :O P :Q R S CT U W :"‚Y CZ Ý[ :\ C) :* :+ - .‚/‚0ƒ1ƒ2y z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :,‚3 4ƒ: :; Ý<Ü= :> Ý?‚@¾A‚5ö6ƒ7ƒ8„9‚d :B‚¢¾EÏF‚GöŒ„IUJLKU‹ƒDÜŠ CÒ Á‹ Œ Á‚L O” :MƒN‚ˆ¾O‚PöƒƒQƒR„  :¡ C• –š— Ã˜ :™Üš]ƒT®X‚YöZ„[ ^ :\ ´¸²}U ÁV W ]ƒT®X‚YöZ„[ ^£\ ´¸²€U ÁV W ]ƒT®X‚YöZ„[ ^¤\ ´¸²žU ÁV W SƒT®X‚YöZ„[ \ ´¸²‚U„V W ]ƒT®X‚YöZ„[ ^¥\ ´¸²…U†_ 4W ]ƒT®X‚YöZ„[ j :k´f}göh Ái ¨ ]ƒT®X‚YöZ„[ j£k´f€göh Ái ¨ ]ƒT®X‚YöZ„[ j¤k´fžgöh Ái ¨ `ƒa¥b‚cöd„e ¨ ]ƒT®X‚YöZ„[ j¥k´f…göh†l 4¨ mƒq‚r s„¾}¿ :À Á Á¨ mƒq‚r s„¾€¿£À Á Á¨ mƒq‚r s„¾ž¿¤À Á Á¨ mƒn‚o p„¿ƒ¨ mƒq‚r s„¾…¿¥Â 4Á†¨ tƒu‚v w„x :y}z { Á| tƒu‚v w„x£y€z { Á| tƒu‚v w„x¤yžz { Á| tƒu‚v w„xƒy‚z {„| tƒu‚v w„x¥y…} 4{†| ¥…ö†¥™ 4Y ÄZ 
WAX¥]…^¿_…`öa¥ 4±†¸…‰ Á[ C\ Ás :d Oe 
X¥]…^¿_…`öa¥ 4±†f Ýg Ã O Á€ Áh…‚ Ýj k¥l…m¿n…o¥p…qör†Ž 4“>” O• }ˆ ‰ ÛŠ…‹ Œ… tu…yz…{ |† 4~bb€bvbwxbL :‚ C… †>M¥‡…ˆ¿‰…Šö 4Œ†ƒ¥„…˜ :™ Cš Â :Ž©˜™š›œ©ž	ŸZ© ‘’
‘ 4”Z•©–ý—þ ¥¡ ¢¿£…¤ö¥¥’ 4§†¨ C¼R½ ¼´ 
µ ¶ Â·…¾R¿ ¼Ä d  ¥‚ :®…¢¿£…¤ö¥¥’ 4§†¸…©>ªM«>¬Md ¯ :° X¥]…^¿_…`ö±†²¥¸…Ó¿Ô¿Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
³ ´¥¶…·¿¸…¹öº¥“ 4¼†½…Ý OÞ Oß Ãµ O¾ÉàÜÄ—Å ÄÆHÇÿÈ™É¥Ê©Ë	¾©¿À†” 4Â¥Ã©Y ÝÌ 
ðÜÑ¥Ò…^¿_…`öÓ¥¸… 4±†Í Î 
Ï Ð CÔ ÝÕ¥Ú…Û¿Ü…ÝöÞ¥ß…• 4á†Ö C×ÜØ ÙÜø ùú Oû – :â Oã Õæ ç :è¥é…¢¿£…¤ö¥¥’ 4§†ä å Â O :	 
‡ Oêëð Ý 	„¥… :ò…ó¿ô…õöƒ¥— 4í†È :öî Õï÷¥ø…ü¿ý…† :ÿà Y…0¿1…ù¥úöÜ 4û†"}#K$ :% &}'·(}* :+ Á, ÷¥ø…ü¿ý…þ :ÿà Y…0¿1…ù¥úöÜ 4û†!£"€#K$ :% &€'¼(€*£+ Á, ÷¥ø…ü¿ý…þ :ÿà Y…0¿1…ù¥úöÜ 4û†!¤"ž#K$ :% &ž'½(ž*¤+ Á, ÷¥ø…ü¿ý…þ :ÿà Y…0¿1…ù¥úöÜ 4û†!ƒ"‚#K$ :% &‚'¾(‚*ƒ+„, ÷¥ø…ü¿ý…‡ :ÿà Y…0¿1…ù¥úöÜ 4û†}·} :	}'·(}
 :ö,  Á÷¥ø…ü¿ý…þ :ÿà Y…0¿1…ù¥úöÜ 4û†£€¼€ :	€'¼(€
£ö,  Á÷¥ø…ü¿ý…þ :ÿà Y…0¿1…ù¥úöÜ 4û†¤ž½ž :	ž'½(ž
¤ö,  Á÷¥ø…ü¿ý…þ :ÿà Y…0¿1…ù¥úöÜ 4û†ƒ‚¾‚ :	‚'¾(‚
ƒö, „5 Ý6 < : :> Ã : :……¥¥¸ …; :J©ö†J˜ 4¥…ö†™ 4¥ ©ö†™ 4 O©ö† O˜ 4Ì :] :! # $…%…&¥ˆ¥(a Cb :c :L :M N :O P :Q R S CT U W :"…Y CZ Ý[ :\ C) :* :+ - .…/…0¥1¥2y z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :,…3 4¥: :; Ý<Ü= :> Ý?…@¿A…5ö6¥š 48†9…d :B…¢¿EÏF…GöŒ†IUJLKU› 4DÜŠ CÒ Á‹ Œ Á…L O” :M¥N…ˆ¿O…Pöƒ¥œ 4R†  :¡ C• –š— Ã˜ :™Üš]¥T®X…YöZ† 4^ :\ ´¸²}U ÁV W ]¥T®X…YöZ† 4^£\ ´¸²€U ÁV W ]¥T®X…YöZ† 4^¤\ ´¸²žU ÁV W ]¥T®X…YöZ† 4^ƒ\ ´¸²‚U„V W S¥T®X…YöZ† 4\ ´¸²…U†_ 4W ]¥T®X…YöZ† 4j :k´f}göh Ái ¨ ]¥T®X…YöZ† 4j£k´f€göh Ái ¨ ]¥T®X…YöZ† 4j¤k´fžgöh Ái ¨ ]¥T®X…YöZ† 4jƒk´f‚göh„i ¨ `¥a¥b…cöd†ž 4¨ m¥q…Ÿ 4s†¾}¿ :À Á Á¨ m¥q…Ÿ 4s†¾€¿£À Á Á¨ m¥q…Ÿ 4s†¾ž¿¤À Á Á¨ m¥q…Ÿ 4s†¾‚¿ƒÀ Á„¨ m¥n…  4p†¿¥¨ t¥u…¡ 4w†x :y}z { Á| t¥u…¡ 4w†x£y€z { Á| t¥u…¡ 4w†x¤yžz { Á| t¥u…¡ 4w†xƒy‚z {„| t¥u…¡ 4w†x¥y…} 4{†| Y ÄZ 
WAX ]‡^À_‡`öa b c Á¸‡[ C\ Ás :d Oe 
X ]‡^À_‡`öa b i Áf Ýg Ã O€ Áh‡‚ Ýj k l‡mÀn‡o p‡qör Ás “>” O• }ˆ ‰ ÛŠ‡‹ Œ‡ tu‡yz‡{ | Á} ~bb€bvbwxbL :‚ C… †>M ‡‡ˆÀ‰‡Šö‹ Œ Áƒ „‡˜ :™ Cš Â :Žð˜€›™œðžŸZð ‘’ Á“ü”Z•ð–ý—þ  ¡ ¢À£‡¤ö¥ ¦ § Á¨ C¼R½ ¼´ 
µ ¶ Â·‡¾R¿ ¼Ä d   ‚ :®‡¢À£‡¤ö¥ ¦ § Á¸‡©>ªM«>¬Md ¯ :° X ]‡^À_‡`ö± Á² ¸‡ÓÀÔÀÇ OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
ª‡« ¬­®‡¯Y°ã±  }‡ ã ¢‡£ ¤¥¦‡§Y¨ã© ÿ } ‡ óãô õ }ö‡÷ øãù ³‡´ µ¶·‡¸Y¹ãº & '‡( Õ Õ ã! ¢‡£ ¤¥¦‡§Y¨ã© ÿ }<‡= óã> ‡? Õøã¢‡£ ¤¥²‡§Y¨ã©  ‡ Õóãô  ‡ Õøãù I‡J K.¿‡MYNãO À Á 4Â‡¼Y½ã¾ 6 }7‡8 9ã: I‡J K.¿‡MYNãO À Á 4»‡¼Y½ã¾ ÿ } ‡ óãô õ }ö‡÷ øãù I‡J K.¿‡MYNãO À Á 4Ä‡¼Y½ã¾ A B‡C ÕD‡E FãG I‡J K.¿‡MYNãO À Á 4»‡¼Y½ã¾ ÿ }<‡= óã> ‡? ÕøãI‡J K.¿‡MYNãO À Á 4Ã‡¼Y½ã¾  ‡ Õóãô  ‡ Õøãù ³ ´ ¶‡·À¸‡¹öº » ¼ Á½‡Ý OÞ Oß Ãµ O¾ÉàÜæ—ç ÄÆHÇÿÈ™ÉzÊðË¾ð¿À ÁÁüÂzÃðY ÝÌ 
ðÜÑ Ò‡^À_‡`öÓ ¸‡b ± ÁÍ Î 
Ï Ð CÔ ÝÕ Ú‡ÛÀÜ‡ÝöÞ ß‡à á ÁÖ C×ÜØ ÙÜø ùú Oû â Oã Õæ ç :è é‡¢À£‡¤ö¥ ¦ § Áä å Â O :	 
‡ Oêëð Ý 	„ … :ò‡óÀô‡õöƒ ì í ÁÈ :öî Õï5 Ý6 < : :> Ã : :‡‡  ¸ ‡; :J‡ö ÁJ  ‡ö Á   ‡ö Á  O‡ö Á O Ì :] :! # $‡%‡& ˆ (a Cb :c :L :M N :O P :Q R S CT U W :"‡Y CZ Ý[ :\ C) :* :+ - .‡/‡0 1 2y z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :,‡3 4 : :; Ý<Ü= :> Ý?‡@ÀA‡5ö6 7 8 Á9‡d :B‡¢ÀEÏF‡GöH ÁIUJLKUC DÜŠ CŒ Á‡L O” :M N‡ˆÀO‡Pöƒ Q R Á  :¡ C• –š— Ã˜ :™ÜšS T®X‡YöZ Á[ \ ´¸²‡U ÁV W ` a¥b‡cöd Áe ¨ m n‡o p Á¿ ¨ t u‡v w Áx y‡z { Á| ÷ :ø}ü·ý}þ :ÿà Y}0·}
 :úö  û Á#K$ :% &}'·(}* :+ Á, ÷£ø€ü¼ý€þ :ÿà Y€0¼€
£úö  û Á#K$ :% &€'¼(€*£+ Á, ÷¤øžü½ýžþ :ÿà Yž0½ž
¤úö  û Á#K$ :% &ž'½(ž*¤+ Á, ÷ƒø‚ü¾ý‚þ :ÿà Y‚0¾‚
ƒúö  û„#K$ :% &‚'¾(‚*ƒ+„, ÷¥ø…ü¿ý…þ :ÿà Y…0¿…
¥úöÜ 4û†#K$ :% &…'¿(…*¥+†4 4 :})K- :. /}0·} :3 Á  "}#’$ :%Å&}'·(}* :+ Á, £€)K- :. /€0¼€£3 Á  "€#’$ :%Å&€'¼(€*£+ Á, ¤ž)K- :. /ž0½ž¤3 Á  "ž#’$ :%Å&ž'½(ž*¤+ Á, ƒ‚)K- :. /‚0¾‚ƒ3„  "‚#’$ :%Å&‚'¾(‚*ƒ+„, ¥…)K- :. /…0¿…¥3†Ü 4"…#’$ :%Å&…'¿(…*¥+†4 4÷ :ø}ü·ý}þ :ÿà Y}0·} :úö  û Á·}	}'·(}
 :ö,  Á÷£ø€ü¼ý€þ :ÿà Y€0¼€£úö  û Á¼€ :	€'¼(€
£ö,  Á÷¤øžü½ýžþ :ÿà Yž0½ž¤úö  û Á½ž :	ž'½(ž
¤ö,  Á÷ƒø‚ü¾ý‚þ :ÿà Y‚0¾‚ƒúö  û„¾‚ :	‚'¾(‚
ƒö, „÷¥ø…ü¿ý…þ :ÿà Y…0¿…¥úöÜ 4û†¿… :	…'¿(…
¥ö4 4†8¸9}<·= :>}? Á@ !¸" #š2: 4; ¸  :(})·*}+ :,}-ö. / Á!¸" #š$% &' 0¸1}ž·Ÿ}6 Á7 :¡ !¸" #š23 45 8¸9€<¼=£>€? Á@ !¸" #š2: 4; ¸ £(€)¼*€+£,€-ö. / Á!¸" #š$% &' 0¸1€ž¼Ÿ€6 Á7£¡ !¸" #š23 45 8¸9ž<½=¤>ž? Á@ !¸" #š2: 4; ¸ ¤()½*+¤,-ö. / Á!¸" #š$% &' 0¸1ž½Ÿ6 Á7¤¡ !¸" #š23 45 8¸9‚<¾=ƒ>‚?„@ !¸" #š2: 4; ¸ ƒ(‚)¾*‚+ƒ,‚-ö.ƒ/„!¸" #š$% &' 0¸1‚ž¾Ÿ‚6„7ƒ¡ƒ!¸" #š23 45 8¸9…<¿=¥>…?†C 4!¸" #š2: 4; ¸ ¥(…)¿A…+¥,…-öB 4/†!¸" #š$% &' 0¸1…ž¿Ÿ…6†7¥Õ 4!¸" #š23 45 ¸  (‡)À*‡+ ,‡-ö. / Á!¸" #š$% &' 0¸1‡žÀŸ‡6 Á7 ¡ !¸" #š23 45 U‡V‡a :f‡gÀh i‡j köl W ÁX :Y :Z‡[ :\‡]À^‡_ `öb c Ád :e :m‡n‡v :x‡gÀy z‡{ | Ál X :Y :o‡p :q‡]Àr‡s t Áu w :’  – ¡}ž·¢ :£}¤ Á¥ ¦ ’  “ :” •}– :—ö˜ Á™ š ’  – ›}œ·}Ÿ :ž ÁŸ   ’  – ¡€ž¼¢££€¤ Á¥ ¦ ’  “£” •€–£—ö˜ Á™ š ’  – ›€œ¼€Ÿ£ž ÁŸ   ’  – ¡žž½¢¤£ž¤ Á¥ ¦ ’  “¤” •ž–¤—ö˜ Á™ š ’  – ›žœ½žŸ¤ž ÁŸ   ’  – ¡‚ž¾¢ƒ£‚¤„¥ ¦ ’  “ƒ” •‚–ƒ—ö˜„™ š ’  – ›‚œ¾‚Ÿƒž„Ÿ   ’  – ¡…ž¿¢¥£…¤†© 4¦ ’  “¥” •…–¥—ö˜†§ 4š ’  – ›…œ¿…Ÿ¥ž†¨ 4  ’  “ ” •‡– —ö˜ Á™ š ’  – ›‡œÀ‡Ÿ ž ÁŸ   »£¼}½ ¾ Á£}ö Á£~ D}E F ÁG£»£¼€½ ¾ Á£€ö Á£~ D€E F ÁG£»£¼ž½ ¾ Á£ö Á£~ DE F ÁG£»£¼‚½ ¾„£‚ö„£~ƒD‚EƒF„G£»£¼…¿ 4¾†£…ö†£™ 4D…Þ 4F†G££‡À Á‡Â £ö Á~ D‡Ã F ÁÄ G£×}Ø Ù ÁÚ ÄÛÁÜ ~ ×€Ø Ù ÁÚ ÄÛÁÜ ~ ×Ø Ù ÁÚ ÄÛÁÜ ~ ×‚Ø Ù„Ú ÄÛÁÜ ~ƒ×…Ø Ù†Ú ÄÛÁÜ ™ 4ïsð :ò}ó·ô}õ Áö ÷}ø  ùñ¡L â>ã}ˆ·‰}Šö‹ Œ Áä  åæ Äç ¼è}é}ê ë Áì :í  îïsð£ò€ó¼ô€õ Áö ÷€ø  ùñ¡L â>ã€ˆ¼‰€Šö‹ Œ Áä  åæ Äç ¼è€é€ê ë Áì£í  îïsð¤òžó½ôžõ Áö ÷žø  ùñ¡L â>ãˆ½‰Šö‹ Œ Áä  åæ Äç ¼èéê ë Áì¤í  îïsðƒò‚ó¾ô‚õ„ö ÷‚ø  ùñ¡L â>ã‚ˆ¾‰‚Šö‹ƒŒ„ä  åæ Äç ¼è‚é‚êƒë„ìƒí  îïsð¥ò…ó¿ô…õ†û 4÷…ø  ùñ¡L â>ã…ˆ¿‰…Šö 4Œ†ä  åæ Äç ¼è…é…ú 4ë†ì¥í  îL â>ã‡ˆÀ‰‡Šö‹ Œ Áä  åæ Äç ¼è‡é‡ê ë Áì í  î}  Á€  Á  Á‚ƒ„… 4†Ï}Uö Á ULÏ€Uö Á ULÏU  Á ULÏ‚Uö„ƒULÏ…Uö†  4UL&}' ( )«&€'( *­&'( *¯&‚'( *±&…+ 4( *³EF5 :> :?}ž·H :I}J ÁK = G4 L1 :5 :6}7·8}9ö: :; < Á„}23 4 “5 :> :?}ž·@}A ÁB :C D= 4 EF5 :> :?€ž¼R£I€J ÁK Q := G4 LL£M :N :6€7¼8€9öO£; < Á„€23 4 “5 :> :?€ž¼@€A ÁP£C Q :D= 4 EF5 :> :?žž½R¤IžJ ÁK Q := G4 LL¤M :N :67½89öO¤; < Á„23 4 “5 :> :?ž½@A ÁP¤C Q :D= 4 EF5 :> :?‚ž¾RƒI‚J„K Q := G4 LLƒM :N :6‚7¾8‚9öOƒ;ƒ<„„‚23 4 “5 :> :?‚ž¾@‚A„PƒCƒQ :D= 4 EF5 :> :?…ž¿R¥I…J†U 4Q := G4 LL¥M :N :6…7¿8…9öO¥S 4<†„…23 4 “5 :> :?…ž¿@…A†P¥T 4Q :D= 4 LL M :N :6‡7À8‡9öO ; < Á„‡23 4 “5 :> :?‡žÀ@‡A ÁP C Q :D= 4 g :h}iöj Ák :lÐmbn g£h€iöj Ák£lÐmbn g¤hiöj Ák¤lÐmbn gƒh‚iöj„kƒlÐmbnƒg¥h…iöj†k¥lÐmbo 4‰ OŠ}‹ :Œ Ž OŠ€‹£Œ Ž OŠ‹¤Œ Ž OŠ‚ƒƒŽ OŠ…‹¥‘ 4­ :Ÿs¡¡¢}®}¯ Á¥s¦·§}  ž :Ÿ¡¢}£}¤ö¥¦·§}¨ Á  Ÿ ¡¸¢}¥ ¦·©}ª Á  «}¬ :­£Ÿs¡¡¢€®€¯ Á¥s¦¼§€  ž£Ÿ¡¢€£€¤ö¥¦¼§€¨ Á  Ÿ ¡¸¢€¥ ¦¼©€ª Á  «€¬£­¤Ÿs¡¡¢ž®ž¯ Á¥s¦½§ž  ž¤Ÿ¡¢£¤ö¥¦½§¨ Á  Ÿ ¡¸¢¥ ¦½©ª Á  «¬¤­ƒŸs¡¡¢‚®‚¯„¥s¦¾§‚  žƒŸ¡¢‚£‚¤ö¥¦¾§‚¨„  Ÿ ¡¸¢‚¥ ¦¾©‚ª„ ƒ«‚¬ƒ­¥Ÿs¡¡¢…®…¯†¥s¦¿§…° 4ž¥Ÿ¡¢…£…¤ö¥¦¿§…¨†° 4Ÿ ¡¸¢…¥ ¦¿©…ª†° 4«…¬¥ž Ÿ¡¢‡£‡¤ö¥¦À§‡¨ Á  Ÿ ¡¸¢‡¥ ¦À©‡ª Á  «‡¬ Ö × :Ø}Ù·Ú :Û}Ü ÁÝ Þ :ß ÃÕÜÎ :Â Ã :Å :Æ}ÇöÈ É ÁÊ :Ë ÃÌÜÄ :Í Ã :Ï}Ð·Ñ}Ò ÁÓ Ô :Ë ÃÕÜÎ :Ö × :Ø€Ù¼Ú£Û€Ü ÁÝ Þ :ß ÃÕÜÎ :Â Ã :Å£Æ€ÇöÈ É ÁÊ :Ë ÃÌÜÄ :Í Ã :Ï€Ð¼Ñ€Ò ÁÓ Ô :Ë ÃÕÜÎ :Ö × :ØžÙ½Ú¤ÛžÜ ÁÝ Þ :ß ÃÕÜÎ :Â Ã :Å¤ÆÇöÈ É ÁÊ :Ë ÃÌÜÄ :Í Ã :ÏÐ½ÑÒ ÁÓ Ô :Ë ÃÕÜÎ :Ö × :Ø‚Ù¾ÚƒÛ‚Ü„Ý Þ :ß ÃÕÜÎ :Â Ã :ÅƒÆ‚ÇöÈƒÉ„Ê :Ë ÃÌÜÄ :Í Ã :Ï‚Ð¾Ñ‚Ò„ÓƒÔ :Ë ÃÕÜÎ :Ö × :Ø…Ù¿Ú¥Û…Ü†â 4Þ :ß ÃÕÜÎ :Â Ã :Å¥Æ…Çöà 4É†Ê :Ë ÃÌÜÄ :Í Ã :Ï…Ð¿Ñ…Ò†á 4Ô :Ë ÃÕÜÎ :Â Ã :Å Æ‡ÇöÈ É ÁÊ :Ë ÃÌÜÄ :Í Ã :Ï‡ÐÀÑ‡Ò ÁÓ Ô :Ë ÃÕÜÎ :ô õ}ö ÷ :ø}ù :ú}û ü 	ý}ô õ€ö ÷£ø€ù£ú€û ü 	ý€ô õžö ÷¤øžù¤úžû ü 	ýžô õ‚ö ÷ƒø‚ùƒú‚û ü 	ý‚ô õ…ö ÷¥ø…ù¥ú…û ü 	ý…}	 
 PP€	 
 PP	 
 PP‚	 
 PP…	 
 PPs¡( :})}* Á+ª,} ¥¥¥¥}}ö Áª} }  !¸}"}#}$¥% Á&ª'} s¡(£€)€* Á+¬,€ ££££€€ö Á¼€ €  !¸€"€#€$£% Á&¼'€ s¡(¤ž)ž* Á+®,ž ¤¤¤¤ö Á®   !¸"#$¤% Á&®' s¡(ƒ‚)‚*„+°,‚ ƒƒƒƒ‚‚ö„°‚ƒ‚  !¸‚"‚#‚-ƒ%„&°'‚s¡(¥…)…*†+²,…. 4¥¥¥¥……ö†²…¥…  !¸…"…#…$¥%†&²'…. 4    ‡‡ö Á‡/ ‡  !¸‡"‡#‡$ % Á&´'‡ A›B’T :EsF¡U}V ÁJ K›C’A›B’D :EFG}HöI ÁJ K›C’L›M’N :O F¸P}Q ÁJ R›S’A›B’T£EsF¡U€V ÁJ K›C’A›B’D£EFG€HöI ÁJ K›C’L›M’N£O F¸P€Q ÁJ R›S’A›B’T¤EsF¡UžV ÁJ K›C’A›B’D¤EFGHöI ÁJ K›C’L›M’N¤O F¸PQ ÁJ R›S’A›B’TƒEsF¡U‚V„J K›C’A›B’DƒEFG‚HöI„JƒK›C’L›M’NƒO F¸P‚Q±JƒR›S’A›B’T¥EsF¡U…V†W 4K›C’A›B’D¥EFG…HöI†W 4K›C’L›M’N¥O F¸P…Q†W 4R›S’A›B’D EFG‡HöI ÁJ K›C’L›M’N O F¸P‡Q ÁJ R›S’ˆ}‰ Š Á‹ :Œ : ˆ€‰ Š Á‹£Œ£ ˆž‰ Š Á‹¤Œ¤ ˆ‚‰ Š„‹ƒŒƒ ˆ…Ž 4Š†‹¥Œ¥ œ : Ãž CŸ}  Á¡ \s´¡¢}U ÁV W œ£ Ãž CŸ€  Á¡ \s´¡¢€U ÁV W œ¤ Ãž CŸž  Á¡ \s´¡¢žU ÁV W œƒ Ãž CŸ‚ „¡ \s´¡¢‚U„V W œ¥ Ãž CŸ… †£ 4\s´¡¢…U†_ 4W ÜªÝ}ÞªÜ¬Ý€Þ¬Ü®ÝžÞ®Ü°Ý‚Þ°Ü²Ý…Þ²} C0 : :}} Á0 C C O :Ü Ã
 C :ó :ôù :ú¦û¦üýþ.ÿ/ Põ :ö÷¦ø :} C0 : :}} Á :0 C C O Ü Ã	 :
 C :€ C0 : :£€€ Á0 C C O :Ü Ã
 C :ó£ô§ù£ú¦û¦ü§ýþ.ÿ/ Põ :ö§÷¦ø :€ C0 : :€€ Á£0 C C O Ü Ã	 :
 C :ž C0 : :¤žž Á0 C C O :Ü Ã
 C :ó¤ôžù¤ú¦û¦üžýþ.ÿ/ Põ :öž÷¦ø :ž C0 : :žž Á¤0 C C O Ü Ã	 :
 C :‚ C0 : :ƒ‚‚„0 C C O :Ü Ã
 C :óƒô¨ùƒú¦û¦ü¨ýþ„ÿ/ Põ :ö¨÷¦ø :‚ C0 : :‚‚„ƒ0 C C O Ü Ã	 :
 C :… C0 : :¥……†0 C C O :Ü Ã
 C :ó¥ô©ù¥ú¦û¦ü©ýþ†ÿ/ Põ :ö©÷¦ø :… C0 : :……†¥0 C C O Ü Ã	 :
 C :ózôðùzú¦û¦üðýþ.ÿ/ Põ :öð÷¦ø :‡ C0 : :‡‡ Á 0 C C O Ü Ã	 :
 C :. C2 :3 C4 :? :@}A Á6 :7 C> :; C0 :1 C- :. C2 :3 C4 :5}˜ Á6 :7 C8 :/ C0 :1 C9 C:´2 :< :5}= ˜ Á6 :7 C> :; C0 :1 C. C2 :3 C4 :?£@€A Á6 :7 C> :; C0 :1 C-£. C2 :3 C4 :5€˜ Á6 :7 C8 :/ C0 :1 C9 C:´B :C£5€= ˜ Á6 :7 CD :; C0 :1 C. C2 :3 C4 :?¤@žA Á6 :7 C> :; C0 :1 C-¤. C2 :3 C4 :5˜ Á6 :7 C8 :/ C0 :1 C9 C:´B :C¤5= ˜ Á6 :7 CD :; C0 :1 C. C2 :3 C4 :?ƒ@‚A„6 :7 C> :; C0 :1 C-ƒ. C2 :3 C4 :5‚˜„6 :7 C8 :/ C0 :1 C9 C:´B :Cƒ5‚= ˜„6 :7 C> :; C0 :1 C. C2 :3 C4 :?¥@…A†6 :7 C> :; C0 :1 C-¥. C2 :3 C4 :5…˜†6 :7 C8 :/ C0 :1 C9 C:´B :C¥5…= ˜†6 :7 C> :; C0 :1 C- . C2 :3 C4 :5‡˜ Á6 :7 C8 :/ C0 :1 C9 C:´B :C 5‡= ˜ Á6 :7 C> :; C0 :1 Cg :hIi}jªk :l}m}n :o p :g :hIi€j¬k :l€m€n£o p :g :hIižj®k :lžmžn¤o p :g :hIi‚j°k :l‚m‚nƒo p :g :hIi…j²k :l…m…n¥o p :Š}‹ªŠ€‹¬Š‹®Š‚‹°Š…‹²‘}’}“«‘€’€“­‘’“¯‘‚’‚“±‘…’…“³™ªš}›}œª™¬š€›€œ¬™®š›œ®™°š‚›‚œ°™²š…›…œ²" Â ‰5 Š; ‹<" Â Ÿ5 ¢< £ Â ¤5 ¥= ¦< §= ¨< ©; ª= Ó¡( :)} Ô Á Õ  Ö· ×} Øs Ù¡ Ï· Ð} Ñs Í : Î} Òö Ó Ô Á Õ  Ö· ×} Ø Ù Ï· Ð} Ñ Ú} Û : Ü Á Ó¸ Ý  Ö· ×} Ø  Ù¸ Ï· Ð} Ñ  Ó¡(£)€ Ô Á Õ  Ö¼ ×€ Øs Ù¡ Ï¼ Ð€ Ñs Í£ Î€ Òö Ó Ô Á Õ  Ö¼ ×€ Ø Ù Ï¼ Ð€ Ñ Ú€ Û£ Ü Á Ó¸ Ý  Ö¼ ×€ Ø  Ù¸ Ï¼ Ð€ Ñ  Ó¡(¤)ž Ô Á Õ  Ö½ ×ž Øs Ù¡ Ï½ Ðž Ñs Í¤ Î Òö Ó Ô Á Õ  Ö½ × Ø Ù Ï½ Ð Ñ Ú Û¤ Ü Á Ó¸ Ý  Ö½ × Ø  Ù¸ Ï½ Ð Ñ  Ó¡(ƒ)‚ Ô„ Õ  Ö¾ ×‚ Øs Ù¡ Ï¾ Ð‚ Ñs Íƒ Î‚ Òö Ó Ô„ Õƒ Ö¾ ×‚ Ø Ù Ï¾ Ð‚ Ñ Ú‚ Ûƒ Ü„ Ó¸ Ýƒ Ö¾ ×‚ Ø  Ù¸ Ï¾ Ð‚ Ñ  Ó¡(¥)… Ô† Þ 4 Ö¿ ×… Øs Ù¡ Ï¿ Ð… Ñs Í¥ Î… Òö Ó Ô† Þ 4 Ö¿ ×… Ø Ù Ï¿ Ð… Ñ Ú… Û¥ Ü† Ó¸ ß 4 Ö¿ ×… Ø  Ù¸ Ï¿ Ð… Ñ  Í  Î‡ Òö Ó Ô Á Õ  ÖÀ ×‡ Ø Ù ÏÀ Ð‡ Ñ Ú? Û  Ü Á Ó¸ Ý  Ö@ ×? Ø  Ù¸ Ï@ Ð? Ñ ( :)} ús û} ü Á ù  Í : ñ ò óö Ô Á Õ  ô õ$ : ö  ÷ ø Á ù (£)€ ús û€ ü Á ù  Í£ ñ ò§ óö Ô Á Õ  ô§ õ§$£ ö  ÷§ ø Á ù (¤)ž ús ûž ü Á ù  Í¤ ñ òž óö Ô Á Õ  ôž õž$¤ ö  ÷ž ø Á ù (ƒ)‚ ús û‚ ü„ ù  Íƒ ñ ò¨ óö Ô„ Õ  ô¨ õ¨$ƒ ö  ÷¨ ø„ ù (¥)… ús û… ü† ý 4 Í¥ ñ ò© óö Ô† Þ 4 ô© õ©$¥ ö  ÷© ø† ý 4 Í  ñ ò‡ óö Ô Á Õ  ô‡ õ‡$  ö  ÷‡ ø Á ù !s! :!·!}! ! Á!O! :!!·!}! ! Á!O! !·!}!}! :! ! Á!O!s!£!¼!€! ! Á!O!£!!¼!€! ! Á!O! !¼!€!€!£! ! Á!O!s!¤!½!ž! ! Á!O!¤!!½!! ! Á!O! !½!!!¤! ! Á!O!s!ƒ!¾!‚! !„!O!ƒ!!¾!‚!ƒ!„!O! !¾!‚!‚!ƒ!„!O!s!¥!¿!…! 4!†!O!¥!!¿!…! 4!†!O! !¿!…!…!¥! 4!†!O! !!À!‡! ! Á!O! !À!‡!‡! ! ! Á!O!Ms}!F¡( :)}!N Á ù !H}!Iª!Os Í :!E}!G :!H}!I«!J Ô Á Õ }!Kö!F"}!L Á ù #}$ :!H}!Iª!J !F¸ò}!Ms€!F¡(£)€!N Á ù !H€!I¬!Os Í£!E€!G£!H€!I­!J Ô Á Õ €!F!Kö"€!L Á ù #€$£!H€!I¬!J !F¸ò€!Msž!F¡(¤)ž!N Á ù !Hž!I®!Os Í¤!E!G¤!H!I¯!J Ô Á Õ !Kö!F"!L Á ù #$¤!H!I®!J !F¸ò!Ms‚!F¡(ƒ)‚!N„ ù !H‚!I°!Os Íƒ!E‚!Gƒ!H‚!I±!J Ô„ Õƒ‚!Kö!F"‚!L„ ùƒ#‚$ƒ!H‚!I°!J !F¸ò‚!Ms…!F¡(¥)…!N† ý 4!H…!I²!Os Í¥!E…!G¥!H…!I³!J Ô† Þ 4…!Kö!F"…!L† ý 4#…$¥!H…!I²!J !F¸ò… Í !E‡!G !H‡!I´!J Ô Á Õ ‡!Kö!F"‡!L Á ù #‡$ !H‡!I´!J !F¸ò‡!a}!b·!cª!d}!eO!a€!b¼!f¬!d€!eO!a!b½!f®!d!eO!a‚!b¾!f°!d‚!eO!a…!b¿!g²!d…!eO s!o¡( :})}!s Á!t  Í : }!E}!n :!o= !p Á!qö"} ù !r Á#}$ :  !¸ò}ò} s!o¡(£€)€!s Á!t  Í£ €!E€!n£!o= !p Á!qö"€ ù !r Á#€$£  !¸ò€ò€ s!o¡(¤ž)ž!s Á!t  Í¤ !E!n¤!o= !p Á!qö" ù !r Á#$¤  !¸òò s!o¡(ƒ‚)‚!s„!t  Íƒ ‚!E‚!uƒ!o!p„!qö"‚ ùƒ!r„#‚$ƒ  !¸ò‚ò‚ s!o¡(¥…)…!s†!w 4 Í¥ …!E…!n¥!o!v 4!p†!qö"… ý 4!r†#…$¥  !¸ò…ò… Í  ‡!E‡!n !o= !p Á!qö"‡ ù !r Á#‡$   !¸ò‡ò‡ s!o¡( :})}!‹ Á ù  Í : }!E}!‰ :!o!Šö Õ  Ô Á  !¸"}!‹ Á ù !Œ}$ : s!o¡(£€)€!‹ Á ù  Í£ €!E€!‰£!o!Šö Õ  Ô Á  !¸"€!‹ Á ù !Œ€$£ s!o¡(¤ž)ž!‹ Á ù  Í¤ !E!‰¤!o!Šö Õ  Ô Á  !¸"!‹ Á ù !Œ$¤ s!o¡(ƒ‚)‚!‹„ ù  Íƒ ‚!E‚!ƒ!o!Šö Ô„  !¸"‚!‹„ ùƒ!Œ‚$ƒ s!o¡(¥…)…!‹† ý 4 Í¥ …!E…!‰¥!o!Šö Þ 4 Ô†  !¸"…!‹† ý 4!Œ…$¥ Í  ‡!E‡!‰ !o!Šö Õ  Ô Á  !¸"‡!‹ Á ù !Œ‡$ !Ÿ—! ”!¡·!¢}!£—!¤”!¥·!¦}!§·!Ÿ—! ”!¡¼!¢€!¥¼!£—!¤”!¦€!§¼!Ÿ—! ”!¡½!¢!£—!¤”!¥½!¦!§½!Ÿ—! ”!¡¾!¢‚!£—!¤”!¥¾!¦‚!§¾!Ÿ—! ”!¡¿!¢…!£—!¤”!¥¿!¦…!§¿"Õ 4"Ö Á"× "Ø "Ù”"á}"â}"ã :"ä}"ås"Õ 4"Ö Á"× "Ø "Ù”"Ú}"Û :"Ü}"Ý "Õ 4"Ö Á"× "Ø "Ù”"Ú}"Þ :"ß}"à Ä"Õ 4"Ö Á"× "Ø "Ù”"á€"â€"ã£"ä€"ås"Õ 4"Ö Á"× "Ø "Ù”"Ú€"Û£"Ü€"Ý "Õ 4"Ö Á"× "Ø "Ù”"Ú€"Þ£"ß€"à Ä"Õ 4"Ö Á"× "Ø "Ù”"áž"âž"ã¤"äž"ås"Õ 4"Ö Á"× "Ø "Ù”"Úž"Û¤"Üž"Ý "Õ 4"Ö Á"× "Ø "Ù”"Úž"Þ¤"ßž"à Ä"Õ 4"Ö Á"× "Ø "Ù”"á‚"â‚"ãƒ"ä‚"ås"Õ 4"Ö Á"× "Ø "Ù”"Ú‚"Ûƒ"Ü‚"Ý "Õ 4"Ö Á"× "Ø "Ù”"Ú‚"Þƒ"ß‚"à Ä"Õ 4"Ö Á"× "Ø "Ù”"á…"â…"ã¥"ä…"ås"Õ 4"Ö Á"× "Ø "Ù”"Ú…"Û¥"Ü…"Ý "Õ 4"Ö Á"× "Ø "Ù”"Ú…"Þ¥"ß…"à Ä"Õ 4"Ö Á"× "Ø "Ù”"Ú‡"Û "Ü‡"Ý "Õ 4"Ö Á"× "Ø "Ù”"Ú‡"Þ "ß‡"à Ä#A}#;·#E :#<¢#+ :#=K#>K#?K#@K#5 :#6¢#7}#8¡#Cs#D¡#3}#4}#: :#;·#< 	#+ :#=K#>K#?K#@K#5 :#6 	#7}#8 #9 #A}#B :#;·#<¸#+ :#=K#>K#?K#@K#5 :#6¸#7}#8Ÿ#9 #A€#;¼#E£#<¢#+ :#=K#>K#?K#@K#5 :#6¢#7€#8¡#Cs#D¡#3€#4€#:£#;¼#< 	#+ :#=K#>K#?K#@K#5 :#6 	#7€#8 #9 #A€#B£#;¼#<¸#+ :#=K#>K#?K#@K#5 :#6¸#7€#8Ÿ#9 #Až#;½#E¤#<¢#+ :#=K#>K#?K#@K#5 :#6¢#7ž#8¡#Cs#D¡#3#4#:¤#;½#< 	#+ :#=K#>K#?K#@K#5 :#6 	#F#8 #G #A#B¤#;½#<¸#+ :#=K#>K#?K#@K#5 :#6¸#7#8Ÿ#9 #A‚#;¾#Eƒ#<¢#+ :#=K#>K#?K#@K#5 :#6¢#7‚#8¡#Cs#D¡#3‚#4‚#:ƒ#;¾#< 	#+ :#=K#>K#?K#@K#5 :#6 	#7‚#8 #9 #A‚#Bƒ#;¾#<¸#+ :#=K#>K#?K#@K#5 :#6¸#7‚#8Ÿ#9 #A…#;¿#E¥#<¢#+ :#=K#>K#?K#@K#5 :#6¢#7…#8¡#Cs#D¡#3…#4…#:¥#;¿#< 	#+ :#=K#>K#?K#@K#5 :#6 	#7…#8 #9 #A…#B¥#;¿#<¸#+ :#=K#>K#?K#@K#5 :#6¸#7…#8Ÿ#9 #3‡#4‡#: #;À#< 	#+ :#=K#>K#?K#@K#5 :#6 	#7‡#8 #9 #A‡#B #;À#<¸#+ :#=K#>K#?K#@K#5 :#6¸#7‡#8Ÿ#9 #Y Ä#A}#Z :#;·#<¢#+ :#= O#> O#? O#@ O#5 :#6¢#7}#8¡#Cs#D¡#Y Ä#3}#4}#: :#;·#< 	#+ :#= O#> O#? O#@ O#5 :#6 	#7}#8 #9 #Y Ä#A}#B :#;·#<¸#+ :#= O#> O#? O#@ O#5 :#6¸#7}#8Ÿ#9 #Y Ä#A€#Z£#;¼#<¢#+ :#= O#> O#? O#@ O#5 :#6¢#7€#8¡#Cs#D¡#Y Ä#3€#4€#:£#;¼#< 	#+ :#= O#> O#? O#@ O#5 :#6 	#7€#8 #9 #Y Ä#A€#B£#;¼#<¸#+ :#= O#> O#? O#@ O#5 :#6¸#7€#8Ÿ#9 #Y Ä#Až#Z¤#;½#<¢#+ :#= O#> O#? O#@ O#5 :#6¢#7ž#8¡#Cs#D¡#Y Ä#3#4#:¤#;½#< 	#+ :#= O#> O#? O#@ O#5 :#6 	#F#8 #G #Y Ä#A#B¤#;½#<¸#+ :#= O#> O#? O#@ O#5 :#6¸#7#8Ÿ#9 #Y Ä#A‚#Zƒ#;¾#<¢#+ :#= O#> O#? O#@ O#5 :#6¢#7‚#8¡#Cs#D¡#Y Ä#3‚#4‚#:ƒ#;¾#< 	#+ :#= O#> O#? O#@ O#5 :#6 	#7‚#8 #9 #Y Ä#A‚#Bƒ#;¾#<¸#+ :#= O#> O#? O#@ O#5 :#6¸#7‚#8Ÿ#9 #Y Ä#A…#Z¥#;¿#<¢#+ :#= O#> O#? O#@ O#5 :#6¢#7…#8¡#Cs#D¡#Y Ä#3…#4…#:¥#;¿#< 	#+ :#= O#> O#? O#@ O#5 :#6 	#7…#8 #9 #Y Ä#A…#B¥#;¿#<¸#+ :#= O#> O#? O#@ O#5 :#6¸#7…#8Ÿ#9 #Y Ä#3‡#4‡#: #;À#< 	#+ :#= O#> O#? O#@ O#5 :#6 	#7‡#8 #9 #Y Ä#A‡#B #;À#<¸#+ :#= O#> O#? O#@ O#5 :#6¸#7‡#8Ÿ#9 #l :#m·#r¸#s #x}#y}#z :#{s#u}#l :#m·#n}#o}#p :#q :#r¸#s #t#u}#l :#m·#n}#o}#v :#r¸#s #w Ä#u}#l :#m¼#r¸#s #x€#y€#z£#{s#u€#l :#m¼#n€#o€#p£#q£#r¸#s #t#u€#l :#m¼#n€#o€#v£#r¸#s #w Ä#u€#l :#m½#r¸#s #xž#yž#z¤#{s#už#l :#m½#nž#ož#p¤#q¤#r¸#s #t#už#l :#m½#nž#ož#v¤#r¸#s #w Ä#už#l :#m¾#r¸#s #x‚#y‚#zƒ#{s#u‚#l :#m¾#n‚#o‚#pƒ#qƒ#r¸#s #t#u‚#l :#m¾#n‚#o‚#vƒ#r¸#s #w Ä#u‚#l :#m¿#r¸#s #x…#y…#z¥#{s#u…#l :#m¿#n…#o…#p¥#q¥#r¸#s #t#u…#l :#m¿#n…#o…#v¥#r¸#s #w Ä#u…#l :#mÀ#n‡#o‡#p #q #r¸#s #t#u‡#l :#mÀ#n‡#o‡#v #r¸#s #w Ä#u‡#¢}#£ :#¤ Ã#¥ Ý#¦ Ã#§ Ý#¨ Ã#¢€#££#¤ Ã#¥ Ý#¦ Ã#§ Ý#¨ Ã#¢#£¤#¤ Ã#¥ Ý#¦ Ã#§ Ý#¨ Ã#¢‚#£ƒ#¤ Ã#¥ Ý#¦ Ã#§ Ý#¨ Ã#¢…#£¥#¤ Ã#¥ Ý#¦ Ã#§ Ý#¨ Ã#À Á#ÁL#Â #Ã#Ä ¼#Å 
#Æ #Ç}#È :#À Á#ÁL#Â #Ã#Ä ¼#Å 
#Æ #Ç€#È£#À Á#ÁL#Â #Ã#Ä ¼#Å 
#Æ #Ç#È¤#À Á#ÁL#Â #Ã#Ä ¼#Å 
#Æ #Ç‚#Èƒ#À Á#ÁL#Â #Ã#Ä ¼#Å 
#Æ #Ç…#È¥$¢ª$£ª$¤·$¥ª$¦·$§ª$¨·$©ª$ªª$«}$¢¬$£¬$¤¼$¥¬$¦¼$§¬$¨¼$©¬$ª¬$«€$¢®$£®$¤½$¥®$¦½$§®$¨½$©®$ª®$«ž$¢°$£°$¤¾$¥°$¦¾$§°$¨¾$©°$ª°$«‚$¢²$£²$¤¿$¥²$¦¿$§²$¨¿$©²$ª²$«…$±}$²ª$±€$²¬$±ž$²®$±‚$²°$±…$²²$àª$á}$â}$ã}$à¬$á€$â€$ã€$à®$áž$âž$ãž$à°$á‚$â‚$ã‚$à²$á…$â…$ã…$é}$êª$ë}$ìª$í}$îª$ï}$é€$ê¬$ë€$ì¬$í€$î¬$ï€$é$ê®$ë$ì®$í$î®$ï$é‚$ê°$ë‚$ì°$í‚$î°$ï‚$é…$ê²$ë…$ì²$í…$î²$ï…$õª$ö}$õ¬$ö€$õ®$ö$õ°$ö‚$õ²$ö…$ü}$ýª$þª$ÿª% }$ü€% €$ý¬$þ¬$ÿ¬$ü% $ý®$þ®$ÿ®$ü‚% ‚$ý°$þ°$ÿ°$ü…% …$ý²$þ²$ÿ²%}%ª%ª%	ª%
}%€%
€%¬%¬%	¬%%
%®%®%	®%‚%
‚%°%°%	°%…%
…%²%²%	²%ª%}%}%¬%€%€%®%ž%ž%°%‚%‚%²%…%…%}%ª%}% ª%!}%€%¬%€% ¬%!€%%®%% ®%!%‚%°%‚% °%!‚%…%²%…% ²%!…!Ms( :})}%Q : Ô Á%J¡%K¡%L %Mª%NS%B}%Cª%O Á%Eª%F %Gs Í :!M%H}!G :%I :%J%K%L %Mª%NS%B}%Cª%Dö%Eª%F 	%G!M !F¸"} Ô Á!Œ}$ :%J¸%Pª%L %NS%O Á%Eª%FT%B}%Cª%G !Ms(£€)€%Q£ Ô Á%J¡%K¡%L %M¬%NS%B€%C¬%O Á%E¬%F %Gs Í£!M%H€!G£%I£%J%K%L %M¬%NS%B€%C¬%Dö%E¬%F 	%G!M !F¸"€ Ô Á!Œ€$£%J¸%P¬%L %NS%O Á%E¬%FT%B€%C¬%G !Ms(¤ž)ž%Q¤ Ô Á%J¡%K¡%L %M®%NS%Bž%C®%O Á%E®%F %Gs Í¤!M%H!G¤%I¤%J%K%L %M®%NS%B%C®%Dö%E®%F 	%G!M !F¸" Ô Á!Œ$¤%J¸%P®%L %NS%O Á%E®%FT%B%C®%G !Ms(ƒ‚)‚%Sƒ Ô„%J¡%K¡%M°%NS%B‚%C°%O„%E°%F %Gs Íƒ!M%H‚!Gƒ%Rƒ%J%K%M°%NS%B‚%C°%Dö%E°%F 	%G!M !F¸"‚ Ô Á!Œ‚$ƒ%J¸%P°%Lƒ%NU%O„%E°%FV%B‚%C°%G !Ms(¥…)…%Q¥ Ô†%J¡%K¡%T 4%M²%U 4%B…%C²%O†%E²%Y 4%Gs Í¥!M%H…!G¥%I¥%J%K%T 4%M²%U 4%B…%C²%Dö%E²%F 	%G!M !F¸"… Ô Á!Œ…$¥%J¸%W²%P²%X†%V 4%B…%C²%G  Í !M%H‡!G %I %J%K%L %M´%NS%B‡%C´%Dö%E´%F 	%G!M !F¸"‡ Ô Á!Œ‡$ %J¸%P´%L %NS%O Á%E´%FT%B‡%C´%G %%‘%š%›%œ%%ž%Ÿ% %¡·%’}%“ª%” :%•}%– :%—ã%˜ %™ö%%‘%š%›%œ%%ž%Ÿ% %¡¼%’€%“¬%”£%•€%–£%—ã%˜ %™ö%%‘%š%›%œ%%ž%Ÿ% %¡½%’%“®%”¤%•%–¤%—ã%˜ %™ö%%‘%š%›%œ%%ž%Ÿ% %¡¾%’‚%“°%”ƒ%•‚%–ƒ%—„%˜ƒ%™ö%%‘%š%›%œ%%ž%Ÿ% %¡¿%’…%“²%”¥%•…%–¥%—†%¢ 4%™ö%¨%©}%®ª%¯ :%°}%±·%²}%³ã%´ %µö%ª :%« :%¬ Ä%­}%¨%©€%®¬%¯£%°€%±¼%²€%³ã%´ %µö%ª£%«£%¬ Ä%­€%¨%©%®®%¯¤%°%±½%²%³ã%´ %µö%ª¤%«¤%¬ Ä%­%¨%©‚%®°%¯ƒ%°‚%±¾%²‚%³„%´ %µö%ªƒ%«ƒ%¬ Ä%­‚%¨%©…%®²%¯¥%°…%±¿%²…%³†%¶ 4%µö%ª¥%«¥%¬ Ä%­…%¾ª%¿}%Àª%Á}%Âª%Ã¬%¿€%Ä¬%Á€%Â¬%Å®%¿%Æ®%Á%Â®%Ç°%¿‚%È°%Á‚%Â°%É²%¿…%Ê²%Á…%Â²%Ò}%Óª%Ø}%ÙÏ%ÚN%Û }%Üª%Ý}%Þ}%ß}%Ô}%Õ}%Ö}%× ¼%Ò€%Ó¬%Ø€%ÙÏ%ÚN%Û }%Ü¬%Ý€%Þ€%ß€%Ô€%Õ€%Ö€%× ¼%Ò%Ó®%Ø%ÙÏ%ÚN%Û }%Ü®%Ý%Þ%ß%Ô%Õ%Ö%× ¼%Ò‚%Ó°%Ø‚%ÙÏ%ÚN%Û }%Ü°%Ý‚%Þ‚%ß‚%Ô‚%Õ‚%Ö‚%× ¼%Ò…%Ó²%Ø…%ÙÏ%ÚN%Û }%Ü²%Ý…%Þ…%ß…%Ô…%Õ…%Ö…%× ¼D}Ã F ÁG :%ï Ã%ð OD€Ã F ÁG£%ï Ã%ð ODÃ F ÁG¤%ï Ã%ð OD‚ÃƒF„Gƒ%ï Ã%ð OD…Þ 4F†G¥%ï Ã%ð O& :&0& C&	[&
 :&}·&ÿ& :&}& Á& %ö :%÷}%ý·%þ0%ÿ C& [& :&ÿ& :&}%øö%ù Á%ú %û :%ü}| :&0& C&	[&
 :&}·&}&ÿ& :& Á& Ï :& :&0& C&	[&
 :&€¼&ÿ& :&£&€& Á& &£3 :%÷€%ý¼%þ0%ÿ C& [& :&ÿ& :&€%øö%ù Á%ú %û£%ü€| :&0& C&	[&
 :&€¼&€&ÿ& :& Á& Ï£& :&0& C&	[&
 :&ž½&ÿ& :&¤&ž& Á& &¤3 :%÷ž%ý½%þ0%ÿ C& [& :&ÿ& :&ž%øö%ù Á%ú %û¤%üž| :&0& C&	[&
 :&ž½&ž&ÿ& :& Á& Ï¤& :&0& C&	[&
 :&‚¾&ÿ& :&ƒ&‚&„& &ƒ3 :%÷‚%ý¾%þ0%ÿ C& [& :&ÿ& :&‚%øö%ù„%ú %ûƒ%ü‚| :&0& C&	[&
 :&‚¾&‚&ÿ& :&„& Ïƒ& :&0& C&	[&
 :&…¿&ÿ& :&¥&…&†& 4&¥3 :%÷…%ý¿%þ0%ÿ C& [& :&ÿ& :&…%øö%ù†& 4%û¥%ü…| :&0& C&	[&
 :&…¿&…&ÿ& :&†& 4Ï¥& 3 :%÷‡%ýÀ%þ0%ÿ C& [& :&ÿ& :&‡%øö%ù Á%ú %û %ü‡| :&0& C&	[&
 :&‡À&‡&ÿ& :& Á& Ï tu}yz}{ | Á} ~bb€bvbwxbtu€yz€{ | Á} ~bb€bvbwxbtuyz{ | Á} ~bb€bvbwxbtu‚yz‚{ |„}ƒ~bb€bvbwxbtu…yz…{ |† 4~bb€bvbwxb( :&/s&8}&1¡&2ª&3}&4s&7 Á Õ  Í :&/&0}&1&2ª&3}&4 Ô Á&5ö Õ &/ &1¸&2ª&3}&4 &6}#}$ :&7ã Õ (£&/s&8€&1¡&2¬&3€&4s&7 Á Õ  Í£&/&0€&1&2¬&3€&4 Ô Á&5ö Õ &/ &1¸&2¬&3€&4 &6€#€$£&7ã Õ (¤&/s&8ž&1¡&2®&3ž&4s&7 Á Õ  Í¤&/&0&1&2®&3&4 Ô Á&5ö Õ &/ &1¸&2®&3&4 &6#$¤&7ã Õ (ƒ&/s&8‚&1¡&2°&3‚&4s&7„ Õ  Íƒ&/&0‚&1&2°&3‚&4 Ô„&5ö Õƒ&/ &1¸&2°&3‚&4 &6‚#‚$ƒ&7„ Õ (¥&/s&8…&1¡&2²&3…&4s&7† Þ 4 Í¥&/&0…&1&2²&3…&4 Ô†&5ö Þ 4&/ &1¸&2²&3…&4 &6…#…$¥&7† Þ 4 Í &/&0‡&1&2x&3‡&4 Ôã&5ö Õ &/ &1¸&2x&3‡&4 &6‡#‡$ &7ã Õ &^}&_}&R}&b}&c :&d¡&e Ý&Ws&f Ý&g¡&M Ý&`}&as&J}&K :&Q}&R}&S}&T :&U &V Ý&W &X Ý&L &M Ý&N 	&O}&P &J}&Q}&R}&[}&\ :&U 
&V Ý&W &X Ý&] 
&M Ý&Y}&Z &^€&_€&R€&b€&c£&d¡&e Ý&Ws&f Ý&g¡&M Ý&`€&as&J€&K£&Q€&R€&S€&T£&U &V Ý&W &X Ý&L &M Ý&N 	&O€&P &J€&Q€&R€&[€&\£&U 
&V Ý&W &X Ý&] 
&M Ý&Y€&Z &^ž&_ž&Rž&bž&c¤&d¡&e Ý&Ws&f Ý&g¡&M Ý&`ž&as&Jž&K¤&Qž&Rž&Sž&T¤&U &V Ý&W &X Ý&L &M Ý&N 	&Ož&P &Jž&Qž&Rž&[ž&\¤&U 
&V Ý&W &X Ý&] 
&M Ý&Yž&Z &^‚&_‚&R‚&b‚&cƒ&d¡&e Ý&Ws&f Ý&g¡&M Ý&`‚&as&J‚&Kƒ&Q‚&R‚&S‚&Tƒ&U &V Ý&W &X Ý&L &M Ý&N 	&O‚&P &J‚&Q‚&R‚&[‚&\ƒ&U 
&V Ý&W &X Ý&] 
&M Ý&Y‚&Z &^…&_…&R…&b…&c¥&d¡&e Ý&Ws&f Ý&g¡&M Ý&`…&as&J…&K¥&Q…&R…&S…&T¥&U &V Ý&W &X Ý&L &M Ý&N 	&O…&P &J…&Q…&R…&[…&\¥&U 
&V Ý&W &X Ý&] 
&M Ý&Y…&Z &J‡&K &Q‡&R‡&S‡&T &U &V Ý&W &X Ý&L &M Ý&N 	&O‡&P &J‡&Q‡&R‡&[‡&\ &U 
&V Ý&W &X Ý&] 
&M Ý&Y‡&Z &zs&Ž}&‘·&’ :&“}&” Á&• &†&{ ¼&| &} &·&}&~¡&y :&z &}&€·&}&‚ö&ƒ :&„ &… Á&†&{ ¼&| &} &~>&z Ä&‡}&ˆ·&‰}&Š Á&‹ :&Œ &†& ¼&| &} &zs&Ž€&‘¼&’£&“€&” Á&• &†&{ ¼&| &} &¼&€&~¡&y£&z &€&€¼&€&‚ö&ƒ£&„ &… Á&†&{ ¼&| &} &~>&z Ä&‡€&ˆ¼&‰€&Š Á&‹£&Œ &†& ¼&| &} &zs&Žž&‘½&’¤&“ž&” Á&• &†&{ ¼&| &} &½&ž&~¡&– &y¤&z &&€½&&‚ö&ƒ¤&„ &… Á&†&{ ¼&| &} &~>&z Ä&‡&ˆ½&‰&Š Á&‹¤&Œ &†& ¼&| &} &zs&Ž‚&‘¾&’ƒ&“‚&”„&• &†&{ ¼&| &} &¾&‚&~¡&yƒ&z &‚&€¾&‚&‚ö&ƒƒ&„ƒ&…„&†&{ ¼&| &} &~>&z Ä&‡‚&˜¾&™‚&Š„&‹ƒ&Œƒ&†&{ ¼&| &} &— Ä&¾&‚&~ ¼&zs&Ž…&‘¿&’¥&“…&”†&œ 4&†&{ ¼&| &} &¿&…&~¡&y¥&z &…&€¿&…&‚ö&ƒ¥&š 4&…†&†&{ ¼&| &} &~>&z Ä&‡…&ˆ¿&‰…&Š†&‹¥&› 4&†& ¼&| &} &y &z &‡&€À&‡&‚ö&ƒ &„ &… Á&†&{ ¼&| &} &~>&z Ä&‡‡&žÀ&‰‡&Š Á&‹ &Œ &†& ¼&| &} &· &¸À&ÃÀ&ÆÀ&Ç &È‡&É &Ê‡&Ë &Ì &¹ &º 	&» &¼‡&½À&¾‡&¿ 	&À‡&Á‡&Â‡&Ä &Å &·A&¸À&ÃÀ&ÆÀ&ÇA&È‡&É Ä&Ô‡&Õ Ä&Ö &º¸&Í &Î &¼‡&ÏÀ&¾‡&Ð¸&À‡&Ñ‡&Ò‡&Ó &ë}&ìs&ê¡&æ &ç\&í]&ä}&å &æ &ç\&è]&é}&ê &æ &ç\&è]&ë€&ìs&ê¡&æ &ç\&í]&ä€&å &æ &ç\&è]&é€&ê &æ &ç\&è]&ëž&ìs&ê¡&æ &ç\&í]&ä&å &æ &ç\&è]&é&ê &æ &ç\&è]&ë‚&ìs&ê¡&æ &ç\&í]&ä‚&å &æ &ç\&è]&é‚&ê &æ &ç\&è]&ë…&ìs&ê¡&æ &ç\&í]&ä…&å &æ &ç\&è]&é…&ê &æ &ç\&è]&ä‡&å &æ &ç\&è]&é‡&ê &æ &ç\&è]'¡'¢' Ý'}'¡'¡'}'}' :'s'	 
'}&ÿ '  	' Ý'}'}' :' 	' 	' '	 
'}'
”'“' Ý'}'}' :'”'”' '	 
'}'¡'¢' Ý'€'¡'¡'€'€'£'s'	 
'€&ÿ '  	' Ý'€'€'£' 	' 	' '	 
'€'
”'“' Ý'€'€'£'”'”' '	 
'€'¡'¢' Ý'ž'¡'¡'ž'ž'¤'s'	 
'ž&ÿ '  	' Ý'ž'ž'¤' 	' 	' '	 
'ž'
”'“' Ý'ž'ž'¤'”'”' '	 
'ž'¡'¢' Ý'‚'¡'¡'‚'‚'ƒ's'	 
'‚&ÿ '  	' Ý'‚'‚'ƒ' 	' 	' '	 
'‚'
”'“' Ý'‚'‚'ƒ'”'”' '	 
'‚'¡'¢' Ý'…'¡'¡'…'…'¥'s'	 
'…&ÿ '  	' Ý'…'…'¥' 	' 	' '	 
'…'
”'“' Ý'…'…'¥'”'”' '	 
'…&ÿ '  	' Ý'‡'‡' ' 	' 	' '	 
'‡'
”'“' Ý'‡'‡' '”'”' '	 
'‡(•(– C(œ 4( :(ž 4(Ÿ :(  :> :(¡ :(¢ 4(— :(˜ C(™ :(š C(›}¡ (•(– C(œ 4( :(ž 4(Ÿ :(  :> :(¡ :(¢ 4(— :(˜ C(™ :(š C(›€¡ (•(– C(œ 4( :(ž 4(Ÿ :(  :> :(¡ :(¢ 4(— :(˜ C(™ :(š C(›ž¡ (•(– C(œ 4( :(ž 4(Ÿ :(  :> :(¡ :(¢ 4(— :(˜ C(™ :(š C(›‚¡ (•(– C(œ 4( :(ž 4(Ÿ :(  :> :(¡ :(¢ 4(— :(˜ C(™ :(š C(›…Õ 4*€}*ª*€€*¬*€*®*€‚*°*€…*²*‡}*ˆª*‡€*ˆ¬*‡*ˆ®*‡‚*ˆ°*‡…*ˆ²*£ 	*¤ 	*§ *¨})·*© :*ª}- Á*™ 
*’ }/ Á*¥ *¦ * :*‘ 	*“ *” *•}*– )·*—}*˜ :*™ 
*’ }-ö/ Á*š 	*› *” *}*ž *Ÿ·* }*¡ :*¢ 
¡ }*œ Á*£ 	*¤ 	*§ *¨€)¼*©£*ª€- Á*™ 
*’ }/ Á*¥ *¦ *£*‘ 	*“ *” *•€*– )¼*—€*˜£*™ 
*’ }-ö/ Á*š 	*› *” *€*ž *Ÿ¼* €*¡£*¢ 
¡ }*œ Á*£ 	*¤ 	*§ *¨ž)½*©¤*ªž- Á*™ 
*’ }/ Á*¥ *¦ *¤*‘ 	*“ *” *•ž*– )½*—ž*˜¤*™ 
*’ }-ö/ Á*š 	*› *” *ž*ž *Ÿ½* ž*¡¤*¢ 
¡ }*œ Á*£ 	*¤ 	*§ *¨‚)¾*©ƒ*ª‚-„*™ 
*’ }/„*¥ *¦ *ƒ*‘ 	*“ *” *•‚*– )¾*—‚*˜ƒ*™ 
*’ }-ö/„*š 	*› *” *‚*ž *Ÿ¾* ‚*¡ƒ*¢ 
¡ }*œ„*£ 	*¤ 	*§ *¨…)¿*©¥*ª…-†*™ 
*’ }/†*¥ *¦ *¥*‘ 	*“ *” *•…*– )¿*—…*˜¥*™ 
*’ }-ö/†*š 	*› *” *…*ž *Ÿ¿* …*¡¥*¢ 
¡ }*œ†* *‘ 	*“ *” *•‡*– )À*—‡*˜ *™ 
*’ }-ö/ Á*š 	*› *” *‡*ž *ŸÀ* ‡*¡ *¢ 
¡ }*œ Á*Ë :*Ì Ã(})·*}*Î :*ª}*Ï *Ð Ã*Â 4*Í Á*¼ :*½ Ã*¿ Ã(})·*}*À :*Á *Â 4*Ã Á*¾ Ã*Ä :*½ Ã*¿ Ã*Æ}*Ÿ·* }*Ç :*È *É 4*Ê Á*Å Ã*Ë :*Ì Ã(€)¼*€*Î£*ª€*Ï *Ð Ã*Â 4*Í Á*“ :*½ Ã*¿ Ã*Ñ£(€)¼*€*À£*Á *Â 4*Ã Á*¾ Ã*Ä :*½ Ã*¿ Ã*Æ€*Ÿ¼* €*Ç£*È *É 4*Ê Á*Å Ã*Ë :*Ì Ã(ž)½*ž*Î¤*ªž*Ï *Ð Ã*Â 4*Í Á*“ :*½ Ã*¿ Ã*Ñ¤(ž)½*ž*À¤*Á *Â 4*Ã Á*¾ Ã*Ä :*½ Ã*¿ Ã*Æž*Ÿ½* ž*Ç¤*È *É 4*Ê Á*Å Ã*Ë :*Ì Ã(‚)¾*‚*Îƒ*ª‚*Ï *Ð Ã*Â 4*Í„*“ :*½ Ã*¿ Ã*Ñƒ(‚)¾*‚*Àƒ*Á *Â 4*Ã„*¾ Ã*Ä :*½ Ã*¿ Ã*Æ‚*Ÿ¾* ‚*Çƒ*È *É 4*Ê„*Å Ã*Ë :*Ì Ã(…)¿*…*Î¥*ª…*Ï *Ð Ã*Â 4*Í†*“ :*½ Ã*¿ Ã*Ñ¥(…)¿*…*À¥*Á *Â 4*Ã†*¾ Ã*Ä :*½ Ã*¿ Ã*Æ…*Ÿ¿* …*Ç¥*È *É 4*Ê†*Å Ã*“ :*½ Ã*¿ Ã*Ñ (‡)À*‡*À *Á *Â 4*Ã Á*¾ Ã*Ä :*½ Ã*¿ Ã*Æ‡*ŸÀ* ‡*Ç *È *É 4*Ê Á*Å Ã*è C*é Ã*ê}*ëª*ì C*í Ã*î Ý*è C*é Ã*ê€*ë¬*ì C*í Ã*î Ý*è C*é Ã*êž*ë®*ì C*í Ã*î Ý*è C*é Ã*ê‚*ë°*ì C*í Ã*î Ý*è C*é Ã*ê…*ë²*ì C*í Ã*î Ý+¡}+¢ +£s+¤ :+¥}+¦·+§}+¨ +© Á+Š}+‹ + :++‘}+’·+“ :+”}+• :+– :+Œ +ö+Ž Á+—}+˜ +™ Ä+š}+›·+œ :+}+ž :+Ÿ +  Á+¡€+¢ +£s+®£+¥€+¦¼+§€+¨ +© Á+¯ :+Š€+‹ +£++‘€+’¼+“£+”€+•£+«£+Œ +ö+Ž Á+ª :+—€+˜ +™ Ä+š€+›¼+œ£+€+­£+Ÿ +  Á+¬ :+¡ž+¢ +£s+®¤+¥ž+¦½+§ž+¨ +© Á+¯ :+Šž+‹ +¤++‘ž+’½+“¤+”ž+•¤+«¤+Œ +ö+Ž Á+ª :+—ž+˜ +™ Ä+šž+›½+œ¤+ž+­¤+Ÿ +  Á+¬ :+¡‚+¢ +£s+®ƒ+¥‚+¦¾+§‚+¨ +©„+¯ :+Š‚+‹ +ƒ++‘‚+’¾+“ƒ+”‚+•ƒ+«ƒ+Œ +ö+Ž„+ª :+—‚+˜ +™ Ä+š‚+›¾+œƒ+‚+­ƒ+Ÿ + „+¬ :+¡…+¢ +£s+®¥+¥…+¦¿+§…+² 4+©†+¯ :+Š…+‹ +¥++‘…+’¿+“¥+”…+•¥+«¥+° 4+ö+Ž†+ª :+—…+˜ +™ Ä+š…+›¿+œ¥+…+­¥+± 4+ †+¬ :+Š‡+‹ + ++‘‡+’À+“ +”‡+• +« +Œ +ö+Ž Á+ª :+—‡+˜ +™ Ä+š‡+›À+œ +‡+­ +Ÿ +  Á+¬ :+Ó}+Ô}+Õ :+Ös+Ð¸+Ñ +×}+Ä}+Å}+Æ :+Ç :+È+É¸+Ê +Ë}+Ì}+Í}+Î :+Ï Ä+Ð¸+Ñ +Ò}+Ó€+Ô€+Ü£+Ös+Û :+Ð¸+Ñ +×€+Ä€+Å€+Æ£+Ø£+È+Ù :+É¸+Ê +Ë€+Ì€+Í€+Ú£+Ï Ä+Û :+Ð¸+Ñ +Ò€+Óž+Ôž+Ü¤+Ös+Û :+Ð¸+Ñ +×ž+Äž+Åž+Æ¤+Ø¤+È+Ù :+É¸+Ê +Ëž+Ìž+Íž+Ú¤+Ï Ä+Û :+Ð¸+Ñ +Òž+Ó‚+Ô‚+Üƒ+Ös+Û :+Ð¸+Ñ +×‚+Ä‚+Å‚+Æƒ+Øƒ+È+Ù :+É¸+Ê +Ë‚+Ì‚+Í‚+Úƒ+Ï Ä+Û :+Ð¸+Ñ +Ò‚+Ó…+Ô…+Ü¥+Ös+Û :+Ð¸+Ñ +×…+Ä…+Å…+Æ¥+Ø¥+È+Ù :+É¸+Ê +Ë…+Ì…+Í…+Ú¥+Ï Ä+Û :+Ð¸+Ñ +Ò…+Ä‡+Å‡+Æ +Ø +È+Ù :+É¸+Ê +Ë‡+Ì‡+Í‡+Ú +Ï Ä+Û :+Ð¸+Ñ +Ò‡,s, :,},·,}, Á,	 +ú¡+ðs+ñ}+òO+î+ï :+ó}+ô·+õ}+öö+÷ :+ø +ù Á+ú+ð+ñ}+òO+û +ü}+þ·+ÿ},  Á, :, +ú¸+ð +ñ}+ýO,s,£,€,¼,€, Á,	 +ú¡+ðs+ñ€+òO+î+ï£+ó€+ô¼+õ€+öö+÷£+ø +ù Á+ú+ð+ñ€+òO+û +ü€+þ¼+ÿ€,  Á,£, +ú¸+ð +ñ€+ýO,s,¤,ž,½,ž, Á,	 +ú¡+ðs+ñž+òO+î+ï¤+óž+ô½+õž+öö+÷¤+ø +ù Á+ú+ð+ñž+òO+û +üž+þ½+ÿž,  Á,¤, +ú¸+ð +ñž+ýO,s,ƒ,‚,¾,‚,„,	 +ú¡+ðs+ñ‚+òO+î+ïƒ+ó‚+ô¾+õ‚+öö+÷ƒ+ø +ù„+ú+ð+ñ‚+òO+û +ü‚+þ¾+ÿ‚, „,ƒ, +ú¸+ð +ñ‚+ýO,s,¥,…,¿,…,†, 4+ú¡+ðs+ñ…+òO+î+ï¥+ó…+ô¿+õ…+öö+÷¥,
 4+ù†+ú+ð+ñ…+òO+û +ü…+þ¿+ÿ…, †,¥, 4+ú¸+ð +ñ…+ýO+î+ï +ó‡+ôÀ+õ‡+öö+÷ +ø +ù Á+ú+ð+ñ‡+òO+û +ü‡+þÀ+ÿ‡,  Á, , +ú¸+ð +ñ‡+ýO,t :,u},v Á o ÄpA,#}å·,$ :,%},& Á,' | } r Ás :t Cu Co O~ 
,(}w·,) :,*},+ Á,, „ Ý… Ã O€ Ã Á€ Á‚ Ý†s,-}Ž·,. :,/},0 Á,1 “ ” O• }ˆ ‰ ÛŠ}‹sŒ}sR ,2,3},4 Á,5 ,6b– :— C›sœ¡¡}ž·¢ :£},7 Á¥ ˜ :™ Cš Â£}¤ :«²¬²­³®´¯´°}±·,<µ,8},9¦,: Á,; ©ýªþ³så·,= :,>},? Á,' ,@ CïRð ¼æ 
ç è Âé}¾R¿ ¼Ä o Ý,B Ã,C}w·,D :,E},F Á,, ,AÜo Æ :,G}Ñ å·,= :,>},? Á,' Ó·Ô·Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õs,H},I·,J :,K},L Á,M Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™,OÉ,P}ì·,D :,E},F Á,, ,Nÿo Ý,#}ì·,= :,E},Q Á,, | 
,R 
ðÜÍ Î 
Ï Ð Cõ Ý,S}ü·,T :,U},V Á,W  CÜ ÷Üø ùú Oû X OY Õ` a :,X}å·,Y :,Z},[ Á,\   ÂZ O[ :\ ]‡^ _O Ý 	 :,]}·¢ :,^},7 Á¥ È :ö Õ,_},` ¼,f :,g Ã,h},i·,j}3 Á  ,k ,a :,bs,c},d·,e}+ Á, ,_},` ¼,f :,g Ã,h},i·,n}3 Á  ,o€,k ,l :,bs,m£,c€,d¼,e€+ Á, ,_},` ¼,f :,g Ã,h},i·,n}3 Á  ,ož,k ,l :,bs,m¤,cž,d½,ež+ Á, ,_},` ¼,f :,g Ã,h},i·,n}3 Á  ,o‚,k ,l :,bs,mƒ,c‚,d¾,e‚+„, ,_},` ¼,f :,g Ã,h},i·,n}3 Á  ,o…,k ,l :,bs,m¥,c…,d¿,e…+†4 45 Ý6 < := :> Ã? :@ :,q},r},s :7¸8 ,ps:}; :,tJ,u},v Á ,w},x :,v Á ,y},v Á ,t O,u},v Á Ì :] :^ _ ,z},{},| :,}sa Cc :L :M N :O P :Q R S CT U W :X}Y CZ Ý[ :\ CÎ :u :v w ,~},},€ :,sy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t}| ,‚}·,ƒ :,„},… Á,† Ð :„ Ý…Ü† :~ Ýo :‡ O,‡}w·,YÏ,Z},ˆ Á,‰ ‘ ÃˆÜ‰ :Š CŒ Á}“ O” :,Š}œ·,‹ :,Œ}, Á,Ž   :¡ C• –š— Ã˜ :™Üš,}, ,‘ Á‹ :,’€À Á ÁŒ£ ,}, ,‘ Á‹ :,’žÀ Á ÁŒ¤ ,}, ,‘ Á‹ :,’‚À Á„Œƒ ,}, ,‘ Á‹ :,’…Â 4Á†Œ¥ ,“ : Ãž CŸ}  Á¡ ,”£\s´¡¢€U ÁV W ,“ : Ãž CŸ}  Á¡ ,”¤\s´¡¢žU ÁV W ,“ : Ãž CŸ}  Á¡ ,”ƒ\s´¡¢‚U„V W ,“ : Ãž CŸ}  Á¡ ,”¥\s´¡¢…U†_ 4W ,t£,u€,v Á o ÄpA,#€å¼,$£,%€,& Á,' | } r Ás :t Cu Co O~ 
,(€w¼,)£,*€,+ Á,, „ Ý… Ã O€ Ã Á€ Á‚ Ý†s,-€Ž¼,.£,/€,0 Á,1 “ ” O• }ˆ ‰ ÛŠ€‹sŒ€sR ,2,3€,4 Á,5 ,6b– :— C›sœ¡¡€ž¼¢££€,7 Á¥ ˜ :™ Cš Â£€¤ :«²¬²­³®´¯´°€±¼,<µ,8€,9¦,: Á,; ©ýªþ³så¼,=£,>€,? Á,' ,@ CïRð ¼æ 
ç è Âé€¾R¿ ¼Ä o Ý,B Ã,C€w¼,D£,E€,F Á,, ,AÜo Æ :,G€Ñ å¼,=£,>€,? Á,' Ó¼Ô¼Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õs,H€,I¼,J£,K€,L Á,M Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™,OÉ,P€ì¼,D£,E€,F Á,, ,Nÿo Ý,#€ì¼,=£,E€,Q Á,, | 
,R 
ðÜÍ Î 
Ï Ð Cõ Ý,S€ü¼,T£,U€,V Á,W  CÜ ÷Üø ùú Oû X OY Õ` a :,X€å¼,Y£,Z€,[ Á,\   ÂZ O[ :\ ]‡^ _O Ý 	 :,]€¼¢£,^€,7 Á¥ È :ö Õ,_€,` ¼,• :,g Ã,–£,h€,i¼,n€3 Á  ,o},k ,a :,bs,c},d·,e}+ Á, ,_€,` ¼,• :,g Ã,—£,h€,i¼,j€3 Á  ,k ,l :,bs,c€,d¼,e€+ Á, ,_€,` ¼,• :,g Ã,–£,h€,i¼,n€3 Á  ,ož,k ,l :,bs,m¤,cž,d½,ež+ Á, ,_€,` ¼,• :,g Ã,–£,h€,i¼,n€3 Á  ,o‚,k ,l :,bs,mƒ,c‚,d¾,e‚+„, ,_€,` ¼,• :,g Ã,–£,h€,i¼,n€3 Á  ,o…,k ,l :,bs,m¥,c…,d¿,e…+†4 45 Ý6 < := :> Ã? :@ :,q€,r€,s£7¸8 ,ps:€; :,tJ,u€,v Á ,w€,x£,v Á ,y€,v Á ,t O,u€,v Á Ì :] :^ _ ,z€,{€,˜£,}sa Cb :c :L :M N :O P :Q R S CT U W :X€Y CZ Ý[ :\ CÎ :u :v w ,~€,€,€£,sy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t€| ,‚€¼,ƒ£,„€,… Á,† Ð :„ Ý…Ü† :~ Ýo :‡ O,‡€w¼,YÏ,Z€,ˆ Á,‰ ‘ ÃˆÜ‰ :Š CŒ Á€“ O” :,Š€œ¼,‹£,Œ€, Á,Ž   :¡ C• –š— Ã˜ :™Üš,€, ,‘ Á‹£,’}À Á ÁŒ : ,€, ,‘ Á‹£,’žÀ Á ÁŒ¤ ,€, ,‘ Á‹£,’‚À Á„Œƒ ,€, ,‘ Á‹£,’…Â 4Á†Œ¥ ,“£ Ãž CŸ€  Á¡ ,” :\s´¡¢}U ÁV W ,“£ Ãž CŸ€  Á¡ ,”¤\s´¡¢žU ÁV W ,“£ Ãž CŸ€  Á¡ ,”ƒ\s´¡¢‚U„V W ,“£ Ãž CŸ€  Á¡ ,”¥\s´¡¢…U†_ 4W ,t¤,už,v Á o ÄpA,#žå½,$¤,%ž,& Á,' | } r Ás :t Cu Co O~ 
,(žw½,)¤,*ž,+ Á,, „ Ý… Ã O€ Ã Á€ Á‚ Ý†s,-žŽ½,.¤,/ž,0 Á,1 “ ” O• }ˆ ‰ ÛŠž‹sŒžsR ,2,3ž,4 Á,5 ,6b– :— C›sœ¡¡žž½¢¤£ž,7 Á¥ ˜ :™ Cš Â£ž¤ :«²¬²­³®´¯´°ž±½,<µ,8ž,9¦,: Á,; ©ýªþ³så½,=¤,>ž,? Á,' ,@ CïRð ¼æ 
ç è Âéž¾R¿ ¼Ä o Ý,B Ã,Cžw½,D¤,Ež,F Á,, ,AÜo Æ :,GžÑ å½,=¤,>ž,? Á,' Ó½Ô½Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õs,Hž,I½,J¤,Kž,L Á,M Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™,OÉ,Pžì½,D¤,Ež,F Á,, ,Nÿo Ý,#žì½,=¤,Ež,Q Á,, | 
,R 
ðÜÍ Î 
Ï Ð Cõ Ý,Sžü½,T¤,Už,V Á,W  CÜ ÷Üø ùú Oû X OY Õ` a :,Xžå½,Y¤,Zž,[ Á,\   ÂZ O[ :\ ]‡^ _O Ý 	 :,]ž½¢¤,^ž,7 Á¥ È :ö Õ,_ž,` ¼,• :,g Ã,–¤,hž,i½,nž3 Á  ,o},k ,a :,bs,c},d·,e}+ Á, ,_ž,` ¼,• :,g Ã,–¤,hž,i½,nž3 Á  ,o€,k ,l :,bs,m£,c€,d¼,e€+ Á, ,_ž,` ¼,• :,g Ã,—¤,hž,i½,jž3 Á  ,k ,l :,bs,cž,d½,ež+ Á, ,_ž,` ¼,• :,g Ã,–¤,hž,i½,nž3 Á  ,o‚,k ,l :,bs,mƒ,c‚,d¾,e‚+„, ,_ž,` ¼,• :,g Ã,–¤,hž,i½,nž3 Á  ,o…,k ,l :,bs,m¥,c…,d¿,e…+†4 45 Ý6 < := :> Ã? :@ :,qž,rž,s¤7¸8 ,ps:ž; :,tJ,už,v Á ,wž,x¤,v Á ,yž,v Á ,t O,už,v Á Ì :] :^ _ ,zž,{ž,˜¤,}sa Cb :c :L :M N :O P :Q R S CT U W :XžY CZ Ý[ :\ CÎ :u :v w ,~ž,ž,€¤,sy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :tž| ,‚ž½,ƒ¤,„ž,… Á,† Ð :„ Ý…Ü† :~ Ýo :‡ O,‡žw½,YÏ,Zž,ˆ Á,‰ ‘ ÃˆÜ‰ :Š CŒ Áž“ O” :,Šžœ½,‹¤,Œž, Á,Ž   :¡ C• –š— Ã˜ :™Üš,ž, ,‘ Á‹¤,’}À Á ÁŒ : ,ž, ,‘ Á‹¤,’€À Á ÁŒ£ ,ž, ,‘ Á‹¤,’‚À Á„Œƒ ,ž, ,‘ Á‹¤,’…Â 4Á†Œ¥ ,“¤ Ãž CŸž  Á¡ ,” :\s´¡¢}U ÁV W ,“¤ Ãž CŸž  Á¡ ,”£\s´¡¢€U ÁV W ,“¤ Ãž CŸž  Á¡ ,”ƒ\s´¡¢‚U„V W ,“¤ Ãž CŸž  Á¡ ,”¥\s´¡¢…U†_ 4W ,tƒ,u‚,v„ o ÄpA,#‚å¾,$ƒ,%‚,?„,' | } q Ár Ás :t Cu Co O~ 
,(‚w¾,)ƒ,*‚,+„,, „ Ý… Ã O€ Ã Á€ Á‚ Ý†s,-‚Ž¾,.ƒ,/‚,0„,1 “ ” O• }ˆ ‰ ÛŠ‚‹sŒ‚sR ,2,3‚,4„,5 ,6b– :— C›sœ¡¡‚ž¾¢ƒ£‚,7„¥ ˜ :™ Cš Â£‚¤ :«²¬²­³®´¯´°‚±¾,<µ,8‚,9¦,:„,; ©ýªþ³så¾,=ƒ,>‚,?„,' ,@ CïRð ¼æ 
ç è Âé‚¾R¿ ¼Ä o Ý,B Ã,C‚w¾,Dƒ,E‚,F„,, ,AÜo Æ :,G‚Ñ å¾,=ƒ,>‚,?„,' Ó¾Ô¾Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õs,H‚,I¾,Jƒ,K‚,L„,M Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™,OÉ,P‚ì¾,Dƒ,E‚,F„,, ,Nÿo Ý,#‚ì¾,=ƒ,E‚,Q„,, | 
,R 
ðÜÍ Î 
Ï Ð Cõ Ý,S‚ü¾,Tƒ,U‚,V„,W  CÜ ÷Üø ùú Oû X OY Õ` a :,X‚å¾,Yƒ,Z‚,[„,\   ÂZ O[ :\ ]‡^ _O Ý 	 :,]‚¾¢ƒ,^‚,7„¥ È :ö Õ,_‚,` ¼,• :,g Ã,–ƒ,h‚,i¾,n‚3„  ,o},k ,a :,bs,c},d·,e}+ Á, ,_‚,` ¼,• :,g Ã,–ƒ,h‚,i¾,n‚3„  ,o€,k ,l :,bs,m£,c€,d¼,e€+ Á, ,_‚,` ¼,• :,g Ã,–ƒ,h‚,i¾,n‚3„  ,ož,k ,l :,bs,m¤,cž,d½,ež+ Á, ,_‚,` ¼,• :,g Ã,—ƒ,h‚,i¾,j‚3„  ,k ,l :,bs,c‚,d¾,e‚+„, ,_‚,` ¼,• :,g Ã,–ƒ,h‚,i¾,n‚3„  ,o…,k ,l :,bs,m¥,c…,d¿,e…+†4 45 Ý6 < := :> Ã? :@ :,q‚,r‚,sƒ7¸8 ,ps:‚; :,tJ,u‚,v„ ,w‚,xƒ,v„ ,y‚,v„ ,t O,u‚,v„ Ì :] :^ _ ,z‚,{‚,˜ƒ,}sa Cb :c :L :M N :O P :Q R S CT U W :X‚Y CZ Ý[ :\ CÎ :u :v w ,~‚,‚,€ƒ,sy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t‚| ,‚‚¾,ƒƒ,„‚,…„,† Ð :„ Ý…Ü† :~ Ýo :‡ O,‡‚w¾,YÏ,Z‚,™„,\ ‘ ÃˆÜ‰ :Š CÒ Á‹ Œ Á‚“ O” :,Š‚œ¾,‹ƒ,Œ‚,„,Ž   :¡ C• –š— Ã˜ :™Üš,‚, ,‘„‹ƒ,’}À Á ÁŒ : ,‚, ,‘„‹ƒ,’€À Á ÁŒ£ ,‚, ,‘„‹ƒ,’žÀ Á ÁŒ¤ ,‚, ,‘„‹ƒ,’…Â 4Á†Œ¥ ,“ƒ Ãž CŸ‚ „¡ ,” :\s´¡¢}U ÁV W ,“ƒ Ãž CŸ‚ „¡ ,”£\s´¡¢€U ÁV W ,“ƒ Ãž CŸ‚ „¡ ,”¤\s´¡¢žU ÁV W ,“ƒ Ãž CŸ‚ „¡ ,”¥\s´¡¢…U†_ 4W ,t¥,u…,v†™ 4o ÄpA,#…å¿,$¥,%…,?†,š 4| } q Ár Ás :t Cu Co O~ 
,(…w¿,)¥,*…,+†,› 4„ Ý… Ã O€ Ã Á€ Á‚ Ý†s,-…Ž¿,.¥,/…,0†,œ 4“ ” O• }ˆ ‰ ÛŠ…‹sŒ…sR ,2,3…,4†, 4,6b– :— C›sœ¡¡…ž¿¢¥£…,7†© 4˜ :™ Cš Â£…¤ :«²¬²­³®´¯´°…±¿,<µ,8…,9¦,:†,ž 4©ýªþ³så¿,=¥,>…,?†,š 4,@ CïRð ¼æ 
ç è Âé…¾R¿ ¼Ä o Ý,B Ã,C…w¿,D¥,E…,F†,› 4,AÜo Æ :,G…Ñ å¿,=¥,>…,?†,š 4Ó¿Ô¿Ç OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õs,H…,I¿,J¥,K…,L†,Ÿ 4Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™,OÉ,P…ì¿,D¥,E…,F†,› 4,Nÿo Ý,#…ì¿,=¥,E…,Q†,› 4| 
,R 
ðÜÍ Î 
Ï Ð Cõ Ý,S…ü¿,T¥,U…,V†,  4 CÜ ÷Üø ùú Oû X OY Õ` a :,X…å¿,Y¥,Z…,[†,¡ 4  ÂZ O[ :\ ]‡^ _O Ý 	 :,]…¿¢¥,^…,7†© 4È :ö Õ,_…,` ¼,• :,g Ã,–¥,h…,i¿,n…3†Ü 4,o},k ,a :,bs,c},d·,e}+ Á, ,_…,` ¼,• :,g Ã,–¥,h…,i¿,n…3†Ü 4,o€,k ,l :,bs,m£,c€,d¼,e€+ Á, ,_…,` ¼,• :,g Ã,–¥,h…,i¿,n…3†Ü 4,ož,k ,l :,bs,m¤,cž,d½,ež+ Á, ,_…,` ¼,• :,g Ã,–¥,h…,i¿,n…3†Ü 4,o‚,k ,l :,bs,mƒ,c‚,d¾,e‚+„, ,_…,` ¼,• :,g Ã,—¥,h…,i¿,j…3†Ü 4,k ,l :,bs,c…,d¿,e…+†4 45 Ý6 < := :> Ã? :@ :,q…,r…,s¥7¸8 ,ps:…; :,tJ,u…,v†™ 4,w…,x¥,v†™ 4,y…,v†™ 4,t O,u…,v†™ 4Ì :] :^ _ ,z…,{…,˜¥,}sa Cb :c :L :M N :O P :Q R S CT U W :X…Y CZ Ý[ :\ CÎ :u :v w ,~…,…,€¥,sy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t…| ,‚…¿,ƒ¥,„…,…†,¢ 4Ð :„ Ý…Ü† :~ Ýo :‡ O,‡…w¿,YÏ,Z…,™†,¡ 4‘ ÃˆÜ‰ :Š CÒ Á‹ Œ Á…“ O” :,Š…œ¿,‹¥,Œ…,†,£ 4  :¡ C• –š— Ã˜ :™Üš,…,¤ 4,‘†‹¥,’}À Á ÁŒ : ,…,¤ 4,‘†‹¥,’€À Á ÁŒ£ ,…,¤ 4,‘†‹¥,’žÀ Á ÁŒ¤ ,…,¤ 4,‘†‹¥,’‚À Á„Œƒ ,“¥ Ãž CŸ… †£ 4,” :\s´¡¢}U ÁV W ,“¥ Ãž CŸ… †£ 4,”£\s´¡¢€U ÁV W ,“¥ Ãž CŸ… †£ 4,”¤\s´¡¢žU ÁV W ,“¥ Ãž CŸ… †£ 4,”ƒ\s´¡¢‚U„V W o ÄpA,#‡åÀ,$ ,%‡,& Á,' | } r Ás :t Cu Co O~ 
,(‡wÀ,) ,*‡,+ Á,, „ Ý… Ã O€ Ã Á€ Á‚ Ý†s,-‡ŽÀ,. ,/‡,0 Á,1 “ ” O• }ˆ ‰ ÛŠ‡‹sŒ‡sR ,2,3‡,4 Á,5 ,6b– :— C›sœ¡¡‡žÀ¢ £‡,7 Á¥ ˜ :™ Cš Â£‡¤ :«²¬²­³®´¯´°‡±À,<µ,8‡,9¦,: Á,; ©ýªþ³såÀ,= ,>‡,? Á,' ,@ CïRð ¼æ 
ç è Âé‡¾R¿ ¼Ä o Ý,B Ã,C‡wÀ,D ,E‡,F Á,, ,AÜo Æ :,G‡Ñ åÀ,= ,>‡,? Á,' ÓÀÔÀÇ OÈ OÉ :Ê CË ÃÌ Í‡Î Ï 
Õs,H‡,IÀ,J ,K‡,L Á,M Ý OÞ Oß Ã× O¾ÉàÜæ—ç Äè¦éHê™,OÉ,P‡ìÀ,D ,E‡,F Á,, ,Nÿo Ý,#‡ìÀ,= ,E‡,Q Á,, | 
,R 
ðÜÍ Î 
Ï Ð Cõ Ý,S‡üÀ,T ,U‡,V Á,W  CÜ ÷Üø ùú Oû X OY Õ` a :,X‡åÀ,Y ,Z‡,[ Á,\   ÂZ O[ :\ ]‡^ _O Ý 	 :,]‡À¢ ,^‡,7 Á¥ È :ö Õ,_‡,` ¼,• :,g Ã,— ,h‡,iÀ,j‡3 Á  ,k ,l :,bs,c‡,dÀ,e‡+ Á, 5 Ý6 < := :> Ã? :@ :,q‡,r‡,s 7¸8 ,ps:‡; :,tJ,u‡,v Á ,w‡,x ,v Á ,y‡,v Á ,t O,u‡,v Á Ì :] :^ _ ,z‡,{‡,˜ ,}sa Cb :c :L :M N :O P :Q R S CT U W :X‡Y CZ Ý[ :\ CÎ :u :v w ,~‡,‡,€ ,sy z { :f :g h :i j Ck Cl Cm :n Co :q r Cs :t‡| ,‚‡À,ƒ ,„‡,… Á,† Ð :„ Ý…Ü† :~ Ýo :‡ O,‡‡wÀ,YÏ,Z‡,ˆ Á,‰ ‘ ÃˆÜ‰ :Š CŒ Á‡“ O” :,Š‡œÀ,‹ ,Œ‡, Á,Ž   :¡ C• –š— Ã˜ :™Üš-‚ :-ƒ}-„ Á-… -‚£-ƒ€-„ Á-… -‚¤-ƒž-„ Á-… -‚ƒ-ƒ‚-„„-… -‚¥-ƒ…-„†-† 4-Œ-}-Ž Á- --Œ-€-Ž Á- --Œ-ž-Ž Á- --Œ-‚-Ž„- --Œ-…-Ž†-‘ 4--œ :-}-ž :-Ÿ}-  Á-¡  :} Á : -—¥-˜ :-™}Ã}Ä}Å Æ Á-š :-›}-œ£-€-ž£-Ÿ€-  Á-¡ £€ Á£ -—À-˜£-™€Ã€Ä€Å Æ Á-š£-›€-œ¤-ž-ž¤-Ÿž-  Á-¡ ¤ž Á¤ -—¶-˜¤-™žÃžÄžÅ Æ Á-š¤-›ž-œƒ-‚-žƒ-Ÿ‚- „-¡ ƒ‚„ƒ -—·-˜ƒ-™‚Ã‚Ä‚Å Æ„-šƒ-›‚-œ¥-…-ž¥-Ÿ…- †-¢ 4¥…†¥™ 4-—¸-˜¥-™…Ã…Ä…ä 4Æ†-š¥-›… ‡ Á  -—´-˜ -™‡Ã‡Ä‡Å Æ Á-š -›‡L -´>-µ -¶}Šö‹ Œ Á-· L -´>-µ -¶€Šö‹ Œ Á-· L -´>-µ -¶Šö‹ Œ Á-· L -´>-µ -¶‚Šö‹ Œ„-· L -´>-µ -¶…Šö 4Œ†-· -½ O-¾ O-Ç O-È O3}-× :-Ø}-Ù·-Ú}-Û Á-Ï -Ð·-Ñ¡-Ò¢-Ós-Ô¡-Õs-Ö»-Æº-½ O-¾ O-Ç O-È O3}4 :-É}-Ê·A}5ö-¿ :7 8 Á-À -Á¹-Â>-Ã>-Ä -Å -Æº-½ O-¾ O-Ç O-È O-Í Ä|}-Î}·€} ÁÏ :ƒ -Ë Ä-Ì Û-Æº-½ O-¾ O-Ç O-È O3€-×£-Ø€-Ù¼-Ú€-Û Á-Ï -Ð¼-Ñ¡-Ò¢-Ós-Ô¡-Õs-Ö»-Æº-½ O-¾ O-Ç O-È O3€4£-É€-Ê¼A€5ö-¿£7 8 Á-À -Á¹-Â>-Ã>-Ä -Å -Æº-½ O-¾ O-Ç O-È O-Í Ä|€-Î€¼€€ ÁÏ£ƒ -Ë Ä-Ì Û-Æº-½ O-¾ O-Ç O-È O3ž-×¤-Øž-Ù½-Úž-Û Á-Ï -Ð½-Ñ¡-Ò¢-Ós-Ô¡-Õs-Ö»-Æº-½ O-¾ O-Ç O-È O3ž4¤-Éž-Ê½Až5ö-¿¤7 8 Á-À -Á¹-Â>-Ã>-Ä -Å -Æº-½ O-¾ O-Ç O-È O-Í Ä|ž-Îž½€ž ÁÏ¤ƒ -Ë Ä-Ì Û-Æº-½ O-¾ O-Ç O-È O3‚-×ƒ-Ø‚-Ù¾-Ú‚-Û„-Ï -Ð¾-Ñ¡-Ò¢-Ós-Ô¡-Õs-Ö»-Æº-½ O-¾ O-Ç O-È O3‚4ƒ-É‚-Ê¾A‚5ö-¿ƒ7 8„-À -Á¹-Â>-Ã>-Ä -Å -Æº-½ O-¾ O-Ç O-È O-Í Ä|‚-Î‚¾€‚„Ïƒƒ -Ë Ä-Ì Û-Æº-½ O-¾ O-Ç O-È O3…-×¥-Ø…-Ù¿-Ú…-Û†-Ü 4-Ð¿-Ñ¡-Ò¢-Ós-Ô¡-Õs-Ö»-Æº-½ O-¾ O-Ç O-È O3…4¥-É…-Ê¿A…5ö-¿¥š 48†-À -Á¹-Â>-Ã>-Ä -Å -Æº-½ O-¾ O-Ç O-È O-Í Ä|…-Î…¿€…†Ï¥ß 4-Ë Ä-Ì Û-Æº-½ O-¾ O-Ç O-È O3‡4 -É‡-ÊÀA‡5ö-¿ 7 8 Á-À -Á¹-Â>-Ã>-Ä -Å -Æº-½ O-¾ O-Ç O-È O-Í Ä|‡-Î‡À€‡ ÁÏ ƒ -Ë Ä-Ì Û-Æº-î C-ï Ã.}.	}.
 :.·.·-ø·-ù¢.}-û¡.}.s. ¢. :-ô C-î C-ï Ã-õ :-ö·-÷·-ø·-ù 	-ú}-û -ü}-ð}-ñ -ò :-ó :-ô C-î C-ï Ã-õ :.·.·-ø·-ù¸.}-ûŸ-ü}-ý}-þ -ÿ :-ô C. ¸.}-î C-ï Ã.€.	€.£-õ :.¼.¼-ø¼-ù¢.€-û¡.€.s. ¢. :-ô C-î C-ï Ã-õ :-ö¼-÷¼-ø¼-ù 	-ú€-û -ü€-ð€-ñ . :.£-ó£-ô C-î C-ï Ã-õ :.¼.¼-ø¼-ù¸.€-ûŸ-ü€-ý€-þ . :.£-ô C. ¸.€-î C-ï Ã.ž.	ž.¤-õ :.½.½-ø½-ù¢.ž-û¡.ž.s. ¢. :-ô C-î C-ï Ã-õ :-ö½-÷½-ø½-ù 	-ú-û -ü-ð-ñ . :.¤-ó¤-ô C-î C-ï Ã-õ :.½.½-ø½-ù¸.-ûŸ-ü-ý-þ . :.¤-ô C. ¸.-î C-ï Ã.‚.	‚.ƒ-õ :.¾.¾-ø¾-ù¢.‚-û¡.‚.s. ¢. :-ô C-î C-ï Ã-õ :-ö¾-÷¾-ø¾-ù 	-ú‚-û -ü‚-ð‚-ñ . :.ƒ-óƒ-ô C-î C-ï Ã-õ :.¾.¾-ø¾-ù¸.‚-ûŸ-ü‚-ý‚-þ . :.ƒ-ô C. ¸.‚-î C-ï Ã.….	….¥-õ :.¿.¿-ø¿-ù¢.…-û¡.….s. ¢. :-ô C-î C-ï Ã-õ :-ö¿-÷¿-ø¿-ù 	-ú…-û -ü…-ð…-ñ . :.¥-ó¥-ô C-î C-ï Ã-õ :.¿.¿-ø¿-ù¸.…-ûŸ-ü…-ý…-þ . :.¥-ô C. ¸.…-î C-ï Ã-õ :-öÀ-÷À-øÀ-ù 	-ú‡-û -ü‡-ð‡-ñ . :. -ó -ô C-î C-ï Ã-õ :.À.À-øÀ-ù¸.‡-ûŸ-ü‡-ý‡-þ . :. -ô C. ¸.‡.  .4}.%}.&·.'·.(}.7s.8 :.9}.:·.5}.6 Á.  .!}.%}.&·.'·.(}.) :.*.+}.,·."}.#ö.$ Á.  .-}.%}.&·.'·.(}.0 Ä.1}.2·.3}.. Á./ :.  .4€.%€.&¼.'¼.(€.7s.8£.9€.:¼.5€.6 Á.  .!€.%€.&¼.'¼.(€.)£.*.+€.,¼."€.#ö.$ Á.  .-€.%€.&¼.'¼.(€.0 Ä.1€.2¼.3€.. Á./£.  .4ž.%ž.&½.'½.(ž.7s.8¤.9ž.:½.5ž.6 Á.  .!ž.%ž.&½.'½.(ž.)¤.*.+ž.,½."ž.#ö.$ Á.  .-ž.%ž.&½.'½.(ž.0 Ä.1ž.2½.3ž.. Á./¤.  .4‚.%‚.&¾.'¾.(‚.7s.8ƒ.9‚.:¾.5‚.6„.  .!‚.%‚.&¾.'¾.(‚.)ƒ.*.+‚.,¾."‚.#ö.$„.  .-‚.%‚.&¾.'¾.(‚.0 Ä.1‚.2¾.3‚..„./ƒ.  .4….%….&¿.'¿.(….7s.8¥.9….:¿.5….6†.  .!….%….&¿.'¿.(….)¥.*.+….,¿."….#ö.$†.  .-….%….&¿.'¿.(….0 Ä.1….2¿.3…..†./¥.  .!‡.%‡.&À.'À.(‡.) .*.+‡.,À."‡.#ö.$ Á.  .-‡.%‡.&À.'À.(‡.0 Ä.1‡.2À.3‡.. Á./ .L¢.Ss.T}.a·.b.c}.d Á.e .Ns.OR.P .Q¼.R}.L :.M.S .T}.U·.V}.Wö.X Á.Y .Z.N .OR.P .Q¼.R}.[ .\¸.L :.]}.^ ._ Á.`  .N .OR.P .Q¼.R}.L¢.Ss.T€.a¼.b.c€.d Á.e .Ns.OR.P .Q¼.R€.L :.M.S .T€.U¼.V€.Wö.X Á.Y .Z.N .OR.P .Q¼.R€.[ .\¸.L :.]€.^ ._ Á.`  .N .OR.P .Q¼.R€.L¢.Ss.Tž.a½.b.cž.d Á.e .Ns.OR.P .Q¼.Rž.L :.M.S .T.U½.V.Wö.X Á.Y .Z.N .OR.P .Q¼.R.[ .\¸.L :.].^ ._ Á.`  .N .OR.P .Q¼.R.L¢.Ss.T‚.a¾.b.c‚.d„.e .Ns.OR.P .Q¼.R‚.L :.M.S .T‚.U¾.V‚.Wö.X„.Y .Z.N .OR.P .Q¼.R‚.[ .\¸.L :.]‚.^ ._„.`  .N .OR.P .Q¼.R‚.L¢.Ss.T….a¿.b.c….d†.h 4.Ns.OR.P .Q¼.R….L :.M.S .T….U¿.V….Wö.X†.f 4.Z.N .OR.P .Q¼.R….[ .\¸.L :.]….g 4._†.`  .N .OR.P .Q¼.R….L :.M.S .T‡.UÀ.V‡.Wö.X Á.Y .Z.N .OR.P .Q¼.R‡.[ .\¸.L :.]‡.^ ._ Á.`  .N .OR.P .Q¼.R‡.z½.{½.„ L}.Œ}.·.Žs. :.}.‘ Á.‹ .z½.{½.~ L}. :6}7·.€}9ö. :.|}; < Á.} Ä.z½.{½.„ L}.… :.†}.‡·.ˆ}.‰ :.Š Á.‚ ¼.ƒ .z½.{½.„ L€.Œ€.¼.Žs.£.€.‘ Á.‹ .z½.{½.~ L€.£6€7¼.€€9ö.£.|€; < Á.} Ä.z½.{½.’ L€.…£.†€.‡¼.ˆ€.‰£.Š Á.‚ ¼.ƒ .z½.{½.„ Lž.Œž.½.Žs.¤.ž.‘ Á.‹ .z½.{½.~ L.¤67½.€9ö.¤.|; < Á.} Ä.z½.{½.„ L.…¤.†.‡½.ˆ.‰¤.Š Á.‚ ¼.ƒ .z½.{½.„ L‚.Œ‚.¾.Žs.ƒ.‚.‘„.‹ .z½.{½.~ L‚.ƒ6‚7¾.€‚9ö.ƒ.|‚; <„.} Ä.z½.{½.„ L‚.…ƒ.†‚.‡¾.ˆ‚.‰ƒ.Š„.‚ ¼.ƒ .z½.{½.„ L….Œ….¿.Žs.¥.….‘†.” 4.z½.{½.~ L….¥6…7¿.€…9ö.¥.|…S 4<†.} Ä.z½.{½.„ L….…¥.†….‡¿.ˆ….‰¥.Š†.‚ ¼.“ 4.z½.{½.~ L‡. 6‡7À.€‡9ö. .|‡; < Á.} Ä.z½.{½.„ L‡.… .†‡.‡À.ˆ‡.‰ .Š Á.• ¼.ƒ  :.¼ .­ Á.±}.À·.Á :.Â}.Ã Á.Ä .Å}.½ Á.¾ Á.¿Ü :.§ .­ Á.® :.¯ :.°}.±}.²·.³}.´ :.¨ .© Á.ª}.« Á.¬Ü :.µ .¸ O.¹ Ã,]}·}.º Á.»Ü .¶}.· : :.¼ .­ Á.±€.À¼.Á :.Â€.Ã Á.Ä .Å€.½ Á.¾ Á.¿Ü :.§ .­ Á.® :.¯ :.°€.±€.²¼.³€.´ :.¨ .© Á.ª€.« Á.¬Ü :.µ .¸ O.¹ Ã,]€¼€.º Á.»Ü .¶€.· : :.¼ .­ Á.±ž.À½.Á :.Âž.Ã Á.Ä .Åž.½ Á.¾ Á.¿Ü :.§ .­ Á.® :.¯ :.°.±.²½.³.´ :.¨ .© Á.ª.« Á.¬Ü :.µ .¸ O.¹ Ã,]½.º Á.»Ü .¶.· : :.¼ .­ Á.±‚.À¾.Á :.Â‚.Ã„.Ä .Å‚.½„.¾„.¿Ü :.§ .­ Á.® :.¯ :.°‚.±‚.²¾.³‚.´ :.¨ .©„.ª‚.«„.¬Ü :.µ .¸ O.¹ Ã,]‚¾‚.º„.»Ü .¶‚.· : :.¼ .­ Á.±….À¿.Á :.Â….Ã†.Ä .Å….½†.¾†.¿Ü :.§ .­ Á.® :.¯ :.°….±….²¿.³….´ :.¨ .©†.ª….«†.¬Ü :.µ .¸ O.¹ Ã,]…¿….º†.»Ü .¶….· : :.§ .­ Á.® :.¯ :.°‡.±‡.²À.³‡.´ :.¨ .© Á.ª‡.« Á.¬Ü :.µ .¸ O.¹ Ã,]‡À‡.Æã.»Ü .­ Á.¶‡.· :.í}.Ù}.ð´.ÞÀ.ßÁ.àÀ.ñ}.ò·.ó>.ô}.î Á.ï .Ø¾.Ù}.Ý¿.ÞÀ.ßÁ.àÀ.á}.â·.ã}.äö.Ú .Û Á.Ü¾.å}.æª.ÞÂ.ßæ.àÂ.è}.é·.ê}.ë Á.ì .çæ.í€.Ù€.ð´.ÞÀ.ßÁ.àÀ.ñ€.ò¼.ó>.ô€.î Á.ï .Ø¾.Ù€.Ý¿.ÞÀ.ßÁ.àÀ.á€.â¼.ã€.äö.Ú .Û Á.Ü¾.å€.æ¬.ÞÂ.ßæ.àÂ.è€.é¼.ê€.ë Á.ì .çæ.íž.Ùž.ð´.ÞÀ.ßÁ.àÀ.ñž.ò½.ó>.ôž.î Á.ï .Ø¾.Ùž.Ý¿.ÞÀ.ßÁ.àÀ.áž.â½.ãž.äö.Ú .Û Á.Ü¾.åž.æ®.ÞÂ.ßæ.àÂ.èž.é½.êž.ë Á.ì .çæ.í‚.Ù‚.ð´.ÞÀ.ßÁ.àÀ.ñ‚.ò¾.ó>.ô‚.î„.ï .Ø¾.Ù‚.Ý¿.ÞÀ.ßÁ.àÀ.á‚.â¾.ã‚.äö.Ú .Û„.Ü¾.å‚.æ°.ÞÂ.ßæ.àÂ.è‚.é¾.ê‚.ë„.ì .çæ.í….Ù….ð´.ÞÀ.ßÁ.àÀ.ñ….ò¿.ó>.ô….î†.÷ 4.Ø¾.Ù….Ý¿.ÞÀ.ßÁ.àÀ.á….â¿.ã….äö.õ 4.Û†.Ü¾.å….æ².ÞÂ.ßæ.àÂ.è….é¿.ê….ë†.ö 4.çæ.Ø¾.Ù‡.Ý¿.ÞÀ.ßÁ.àÀ.á‡.âÀ.ã‡.äö.Ú .Û Á.Ü¾.å‡.æ´.ÞÂ.ßæ.àÂ.è‡.éÀ.ê‡.ë Á.ì .çæ/ /s/}/·/ / }/! Á/" /#}/$ /	 /
 Õ/ / ¼/}/·/}/ / Á/ö/}/ / / Õ/ /  ,]}·} Á /}/ / / /s/€/¼/ / €/! Á/" /#€/$ /	 /
 Õ/ / ¼/€/¼/€/ / Á/ö/€/ / / Õ/ /  ,]€¼€ Á /€/ / / /s/ž/½/ / ž/! Á/" /#ž/$ /	 /
 Õ/ / ¼//½// / Á/ö// / / Õ/ /  ,]½ Á // / / /s/‚/¾/ / ‚/!„/" /#‚/$ /	ƒ/
 Õ/ƒ/ ¼/‚/¾/‚/ /„/ö/‚/ƒ/ƒ/ Õ/ƒ/ƒ ,]‚¾‚„ /‚/ƒ/ƒ/ /s/…/¿/ / …/!†/& 4/#…/$ /	¥/
 Õ/¥/ ¼/…/¿/…/% 4/†/ö/…/¥/¥/ Õ/¥/¥ ,]…¿…†Û 4/…/¥/¥/	 /
 Õ/ / ¼/‡/À/‡/ / Á/ö/‡/ / / Õ/ /  ,]‡À‡ Á /‡/ / /8 :/9 :/? Â3 }/@ }/A /B }5ö7 8 /: :/; }/< }/= 	/> Â }/C }/F }/G /H 
.­ /I>/JM/KM/L /D /E 4/] /^ /b Ý/c :/d Ý/e Ã/f Ý/g C/h :/i Ã/_ /` Ã/a Ý/jR/k Ý/ Ã/p Ý/q Ã/r C/s :/t /u Á/v 
/l /m Ã/n›/o Ýt 2A 2Šª2‹}2Œ}2Š¬2‹€2Œ€2Š®2‹ž2Œž2Š°2‹‚2Œ‚2Š²2‹…2Œ…$^ O3kö3v3x”3y3z”3{ 3|ö3}”3~’3l¡3m”3n}3o›3p’3q3r’3s3tö3u¨3w $^ O3kö3v3x”3y3z”3{ 3|ö3}”3~’3l¡3m”3n€3o›3p’3q3r’3s3tö3u¨3w $^ O3kö3v3x”3y3z”3{ 3|ö3}”3~’3l¡3m”3nž3o›3p’3q3r’3s3tö3u¨3w $^ O3kö3v3x”3y3z”3{ 3|ö3}”3~’3l¡3m”3n‚3o›3p’3q3r’3s3tö3u¨3w $^ O3kö3v3x”3y3z”3{ 3|ö3}”3~’3l¡3m”3n…3o›3p’3q3r’3s3tö3u¨3w 3 }3¡¡3˜ Ý3™s3š Ý3¢¢3£¡3¤}3¥ :3¦s3Ÿ}3Œ 3 Á3‰}3Š 3Ž Ý3 3 Ý3‘ 	3’ 3“}3” :3• 3‹}3Œ 3 Á3–}3—”3˜ Ý3™“3š Ý3›Ÿ3œ}3 :3ž 3Ÿ}3Œ 3 Á3 €3¡¡3˜ Ý3™s3š Ý3¢¢3£¡3¤€3¥£3¦s3Ÿ€3Œ 3 Á3‰€3Š 3Ž Ý3 3 Ý3‘ 	3’ 3“€3”£3• 3‹€3Œ 3 Á3–€3—”3˜ Ý3™“3š Ý3›Ÿ3œ€3£3ž 3Ÿ€3Œ 3 Á3 ž3¡¡3˜ Ý3™s3š Ý3¢¢3£¡3¤ž3¥¤3¦s3Ÿž3Œ 3 Á3‰ž3Š 3Ž Ý3 3 Ý3‘ 	3’ 3“ž3”¤3• 3‹ž3Œ 3 Á3–ž3—”3˜ Ý3™“3š Ý3›Ÿ3œž3¤3ž 3Ÿž3Œ 3 Á3 ‚3¡¡3˜ Ý3™s3š Ý3¢¢3£¡3¤‚3¥ƒ3¦s3Ÿ‚3Œ 3 Á3‰‚3Š 3Ž Ý3 3 Ý3‘ 	3’ 3“‚3”ƒ3• 3‹‚3Œ 3 Á3–‚3—”3˜ Ý3™“3š Ý3›Ÿ3œ‚3ƒ3ž 3Ÿ‚3Œ 3 Á3 …3¡¡3˜ Ý3™s3š Ý3¢¢3£¡3¤…3¥¥3¦s3Ÿ…3Œ 3 Á3‰…3Š 3Ž Ý3 3 Ý3‘ 	3’ 3“…3”¥3• 3‹…3Œ 3 Á3–…3—”3˜ Ý3™“3š Ý3›Ÿ3œ…3¥3ž 3Ÿ…3Œ 3 Á3‰‡3Š 3Ž Ý3 3 Ý3‘ 	3’ 3“‡3§ 3• 3‹‡3 Á3–‡3—”3˜ Ý3™“3š Ý3›Ÿ3œ‡3¨ 3ž 3Ÿ‡3 Á3Òª3Ó}3Ô}3Ò¬3Ó€3Ô€3Ò®3Óž3Ôž3Ò°3Ó‚3Ô‚3Ò²3Ó…3Ô…3Úª3Û}3Üª3Ú¬3Û€3Ü¬3Ú®3Û3Ü®3Ú°3Û‚3Ü°3Ú²3Û…3Ü²3âª3ã}2Œ}3â¬3ã€2Œ€3â®3ãž2Œž3â°3ã‚2Œ‚3â²3ã…2Œ…3éª3ê·3íª3î·3ïª3ð·3ñ 3ò 3óª3ô}3ëª3ì 3é¬3ê¼3í¬3î¼3ï¬3ð¼3ñ 3ò 3ó¬3ô€3ë¬3ì 3é®3ê½3í®3î½3ï®3ð½3ñ 3ò 3ó®3ô3ë®3ì 3é°3ê¾3í°3î¾3ï°3ð¾3ñ 3ò 3ó°3ô‚3ë°3ì 3é²3ê¿3í²3î¿3ï²3ð¿3ñ 3ò 3ó²3ô…3ë²3ì 4 4 Â4 4 Â4 4  44È4( 4) 4* 4+ t 42 t 46 t 48 t 4= t 4? t 4A t 4C t 4E t 4G t 4I   ÷ ÷     èçæÿ1¾ÿD.Ýÿî¬Uÿ3¬ÿÿˆ7UÿÌf’ÿŸ»íÿ!fÿ ÿ™f"ÿÿÿÿÿÃˆ;ÿôÿ}$ ÿH…(ÿ½ˆdÿG)ÿžŸhÿHÿÖ±:ÿ”tÿÙÜÏÿDE<ÿ§¾Ñÿaz“ÿ~˜¯ÿiºÿ?l»ÿÿA_ÿâÒÿîîîÿ+Ïÿ:Ðÿ¨  ÿ ßþÿ³Çÿg‘¯ÿA‚ÿÿ( ìÿ6z ÿ ÓÿW[ÿÿÑüÿÆr ÿ&Îÿ2ÌÌÿ ™ÿÿÿÌ™ÿ äÿ   ÿ Ùÿ ¨òÿ 3 ÿ&ÎÿÖùÿ3/)ÿµ_&ÿÛªuÿI¿üÿ5„ÿ@eÁÿb†íÿ!½ÿ •Øÿufÿ Âÿÿ 9œÿ9)íÿÝ‰Aÿ4Òÿ Îÿÿ¥S ÿ4 àÿÃ˜ ÿe® ÿ‰1-ÿíèáÿÑûÿ& ÿ&ÇÿÿMj ÿA*ôÿ3èþÿ,#îÿIž ÿ-+ïÿ&Öÿn– ÿ:µÿ-èÿQ‡ ÿ$Îÿ¾äöÿ–­¼ÿfffÿ´Sÿ#ÎêÿR^ÿ".ÿ àÿÿÑ´dÿÌÌÌÿ^Ëäÿ+ZŸÿà÷ÿ&Ïÿ4y ÿ+Õÿ-Z ÿ£èÿçççÿÞ¦ ÿ
}³ÿf²2ÿííîÿ‡*ÿÙùÿÜÿ:› ÿßþÿv' ÿÔéËÿùÉˆÿÉ« ÿBàúÿNÿÿ!Õÿÿh( ÿììíÿW¦Jÿ>1Èÿ‡> ÿ 	sÿ  ÿ K³ÿ ”(ÿ­­­ÿÿ™fÿÓÓÓÿÿ×žÿÈj ÿ ÈZÿØÿÿ<Øÿÿ!!xÿ&‰ÿMÔûÿ _›ÿ € ÿ  €ÿÿ ÿÖ÷ÿ!Îÿ‚0 ÿ(—(ÿC• ÿJÞûÿ$Üÿ'-Óÿ ÷ÿ`ž ÿ›Bÿ'-Ôÿ-!ÌÿA…(ÿ)ÞÿÞÿÿŒ@"ÿ( Îÿ•$ ÿ+ ÿ%ÎÿXËôÿA¨ÜÿäÅ‰ÿ0‰ÿ* ÿ+Ïÿ“8 ÿ' ÏÿÑ÷ÿèùÿ­! ÿBŠÿ9Æÿÿ;‘\ÿ×ÿ~EÿÍÿÿ$íÿOiÁÿMÌÿÿµª™ÿU²wÿç²jÿ+­ÿ0Æÿ?k ÿ ` ÿ?i ÿ¶v}ÿ Ôÿÿb- ÿ8k™ÿFÎÿÿ4“Tÿ3b ÿ4Òÿ
Æÿ ÄÿÿnYêÿ²¢ôÿ#íÿ¢Nÿ ÝÿÿF¾mÿˆÓ¦ÿçÒŽÿÝÖÌÿÙ‘Hÿ “¿ÿ=z ÿÄÿ š>ÿÞ‰Bÿ8ëÿ'Èÿÿ
ÝüÿÚÿ¯Gÿ™3 ÿ Ìÿÿ€5 ÿå¿hÿÑÿÿ6K–ÿQ¦ ÿòÿÿGgºÿ–¨×ÿÆÏéÿÄr ÿ!QÿY‹Ýÿ=Ïþÿ ÿÿÝ²uÿ½e ÿÄu:ÿ^z ÿ0‰ÿ	ÝüÿÚÿÝùÿÚÿ ñÿÿ3Ðÿ+Ìÿ,v<ÿŠ!ÿ`” ÿˆ$ ÿ!ãÿÎsÿ×ÿÿ)f£ÿ;š ÿ°^ÿW­Íÿ ?’ÿÿ ÿcbeÿ²°­ÿ-Ljÿ=q ÿ¦Zÿ lÿ—”‹ÿköÿðøÿ Áÿ ¼ÿÿÐ—Iÿ$~Cÿº¶±ÿ0lÿ¸úÿªðùÿÏâÿ{) ÿÝ{ÿë¯fÿ1„œÿp’ÿ H{ÿ£Vÿ§W&ÿ–ÿÝ“ÿ3ÒÿŸ  ÿj ÿµñÿ>*ÍÿMoCÿ©hÿZ›ÀÿŒÿÑëÿ'¾ÿÇ†Lÿ©§¥ÿ&Üÿb›ÿ>ˆÿÿ¸8 ÿÜøÿˆÿ3™ÿÿ€  ÿ³ffÿ<z ÿ Úÿ@Ÿ#ÿgféÿŒÅ{ÿ—8 ÿ((×ÿ7+ÎÿF’ ÿH Õÿ #ÿšBÿÒÿÿ/íÿ f ÿ »ÿ¡.ÿ$àÿ†Ûÿ)ZñÿÆÿÿ3Ž=ÿ¢Oÿ'íÿx4 ÿPÐùÿÛÿ Pÿ4“ÿc1ÿ=I ÿÊ¯ ÿÿÌfÿ‰²ÿ=Øÿÿ ·ÿÿ)!ÿAV ÿ [ÿÿ0
¿ÿmdSÿDj ÿ¹ýÿ-'ÁÿÞ¡ ÿ90žÿ çÿFž#ÿJr ÿ2=üÿ:~ ÿ  Òÿ æÿÿ:µÿ9(êÿ2²4ÿËþÿ/'Äÿ—Q ÿÏùÿ^x ÿ6¶ÿÿåµÿµ&kÿŒŠŒÿ y ÿ 8ÿ ÞÿãÿÿŽB!ÿ@%Îÿ3dÿÅÿÿ"ŸÿS²wÿ4ªúÿÍÝöÿ\•ÿÉÀ²ÿm ÿ ÕÿÿQ¥ ÿGh ÿf ÿ áüÿhq ÿ5Aíÿ­5 ÿ æúÿRàÿ+°ÿIš ÿL¿©ÿõÝ»ÿŸðâÿ(®ÿ‹G ÿ‹@"ÿE/ÝÿPáÿÿwJ ÿÛÿ“R ÿ#Ùÿ>ÿÿÿcÿ¨8 ÿ F ÿ<ÜÿÈ’ ÿ  Êÿgš ÿÖÕÔÿÌMÿêÿìUÿ)r ÿÍš‚ÿÖ­Jÿ Þÿÿ'q ÿ=ÿÿf3ÿ  ÿÿ ÿÿÿv@ÿ<6Æÿ.¹íÿ=` ÿÒúÿ5l ÿºQ ÿ3[!ÿ((ÖÿVØüÿ‡? ÿ§j ÿ ÌþÿÿÅÿÉl6ÿ`Ø ÿ 1]ÿ bÏÿ_¬ÿ¤] ÿ$ îÿ¢N
ÿä¶^ÿëÏ ÿs²‹ÿ\eÿúøõÿ?… ÿBïýÿ#ãÿ?~7ÿ-
´ÿÈìÿ`ÿŸ ÿÌÿÿ“~ÿ  æÿ‡*ÿÜÿÚúÿ_r½ÿâ°cÿ0ˆÿ¶¶¶ÿ¹^>ÿ Ùÿÿ±ÿ§]=ÿ  §ÿéæÀÿ!u®ÿëéÇÿÿÂŸÿÖ£ ÿÃ¨ÿ0Ìÿ#£Ùÿùšÿm«Øÿçúûÿ Äþÿ(§ ÿ-ðÿ>Ÿÿÿ’ÿÿàþÿ[ºÿd& ÿ Ëþÿ•# ÿNj ÿ-§ÿH&)ÿ  Ìÿ Ñþÿf®)ÿE7Êÿ)®úÿ  Áÿ	ãÿ±—[ÿ  þÿ•  ÿÝ£ ÿ5Ðûÿ»[ ÿ ÙÿÜüÿ  Ùÿœ¦œÿ4#²ÿn;<ÿÛ’KÿƒÙÿÿµ™ ÿ ßýÿ¡¡¡ÿ+œËÿµ´´ÿ$ìÿ)a ÿµÆÿÿ Qœÿ ÆøÿC•7ÿÇ ÿ=Æôÿ3 §ÿh&ÿ%ÚÿÎýÿ¥J$ÿP¦Ðÿíííÿ.Ôÿ08Þÿ¶ÿÿMz ÿ Šÿ }ïÿ Òÿÿ	’1ÿPþÿªNtÿLH?ÿ¶èÿÿr>ÿYSHÿ¬g‡ÿ' ëÿ ñÿLËÿÿ?\ÿ˜g"ÿ]TKÿ(_éÿÂ¸ªÿØªÿê·Ëÿvh[ÿì­]ÿ¦™ˆÿ•ˆxÿ‚žÙÿ¦»÷ÿ½½½ÿ…‚€ÿ¦¦¦ÿØØØÿ3R©ÿG/Úÿº«ôÿ 'sÿ-¸÷ÿSb ÿlˆÿÿ†“âÿêéæÿ˜•“ÿòòñÿ[iªÿz’ÌÿS ¹ÿB ŽÿqÖÿÿã±üÿ›ƒÿÿ¸rÓÿÜÒùÿ—€ùÿ8KŠÿƒŸÚÿÌÂ²ÿc²ÿby²ÿ oÌÿ>túÿïëäÿF&ÿµª™™ˆØýÿ@«üÿèøÿÿ5ªúÿ#q?ÿ!dÿÎÞ÷ÿ^u·ÿÔÓÑÿ¢Òóÿˆ«ÕÿW~¯ÿ*5`ÿ4Z‘ÿ>S|ÿ$.=ÿ]Üÿÿ4»ÿëêèÿ"eòÿJÑÿ™¶ÿÿáª'ÿ’W ÿáª&ÿ=71ÿFA9ÿugÿÙ”;ÿ™cÿ³åÆÿÿæ¥Pÿ   3Â‡:ÿXËýÿ´ªšÿ&ñÿôÝ½ÿˆ«Ôÿª{5ÿÁ‰BÿUÝÿ 9Æÿåÿÿ";–ÿ ÿ 1bÿ¡ÑòÿW~®ÿ>T|ÿ”ªàÿ‚˜Øÿw ÒÿjÆÿ`‹·ÿR€ªÿ>`ÿ6V„ÿ)5Xÿ&2TÿE–ïÿ†weÿ“f:ÿ­Âîÿ—g*ÿ•‘ŽÿÁÀ·ÿ­§ ÿ–Áâÿz›ÌÿIj›ÿ1AfÿUÊùÿB@Aÿ[YXÿñññÿÀ¶¨ÿY±xÿ2 ½ÿß×ÍÿÀ¾¼ÿÜÖÌÿóïéÿ Ptÿ±ÈÚÿÁÜñÿÞÔÿÿqnmÿ¬©§ÿÿùòÿ‚ ˆÿ X5ÿ>ÿ Òúÿ Pÿÿ ÿÿúÎ[ÿ¸©õÿ$Îÿ++'ÿªªæÿÉÃÿmgÿNÌÿÿpZçÿ¸çþÿ™ÝÿÿRi¿ÿ„ž×ÿµÇôÿà’Bÿ&#ÿ÷¼wÿ	8ÿ=t­ÿ<^‹ÿ”©ßÿwŸÑÿ`Š¶ÿ>aÿ^ÛÿÿG•îÿë˜ÿÓ LÿFdÃÿ)?€ÿ2ßÿz^ ÿëÆŒÿ˜cÿÎ‘Aÿ¬Àìÿ"fÿCABÿ\YYÿù÷ôÿÿÿÿfÌ¼¨ÿ]žÎÿ_óÿÿ?:2ÿ”¿àÿzšËÿJjšÿ4[‘ÿ2Bgÿ$.>ÿTÉøÿÙ“;ÿ™cÿÊh’ÿ¨PtÿÁ¨ÿ¢Usÿ.Rÿ2 ÞÿÖŽªÿY=ÿnKÿ"fÿvòÿ_÷ÿÿ÷ÊŒÿ†9Uÿ/œãÿàÓ­ÿêáÁÿóìÒÿº«òÿW¡åÿ€¹íÿ‹Ò§ÿé¸ËÿÁ»®ÿNšÿìçàÿ=Ÿãÿ"ÿ6H…ÿÔÞGÿ‡ÿÿÿ“‹}ÿOjÁÿ´©˜ÿpaTÿ3FŠÿÝÖÍÿiuÿ¹É?ÿ Efÿ’xÿÿp[çÿF1ÞÿGfÿnYèÿíçÞÿù÷óÿÝÕÉÿGeÿLÕýÿD¿õÿ<›ÿ­ìÿ@V¬ÿ@]ÿD€ÿÿRÇÿl ÿÿ!fM!f&OiÁæOiÁ³ˆÔ¦ÿ Rÿ©’ôÿ.EÿPµÿ]‚ÿÝªdÿOÿ5I‰ÿ%Iÿ+GwÿW¯wÿ?]ÿ$lóÿ\Îÿìçßÿ?Ðÿÿ­ÿÿ"“NÿÎ–<ÿµäÆÿ ~âÿ ¹ÿÿa½ôÿa«éÿ>—äÿŸ˜Œÿ2 ¾ÿ Ržÿwpbÿ;ŠÿÿA|ÿUêâÿ(Ê¾ÿxÛÿ%2|ÿuÖÿ¹íÿ—”’ÿ$…áÿ.’åÿ(zÑÿ‚Øÿÿ9`ÿP|©ÿX­ÿDžgÿKVêÿSrùÿ E™ÿ-¦âÿLHBÿA¡fÿ–ÿÿÕÍÁÿš7`ÿ•‡uÿlbSÿ|îÿ5Äÿf`Tÿ)Luÿp>ÿ:‘\ÿU±wÿ2.)ÿŽ§ÿYf„ÿ¬¸Êÿ‰ÿ‚žÚÿ·éÿÿ!f™àÿD\zÿÇÒâÿ `âÿ¹Ùÿ TÄÿT‘Àÿ;I“ÿ w7ÿ œHÿ”ÉòÿC™ÿ!tëÿeûüÿ©ãÿT™Óÿ¦ÖíÿY§âÿ)XÁÿ8“ÿU­ ÿ‰ÎÄÿyÓÿyÓ€<P¥ÿêáÏ€ÔÂ›ÿq¤Óÿ§Òìÿbxÿÿ3/Þÿ@Uÿÿ^`ÿÿ3ÿ"+Mÿ)&!ÿâ}¤ÿÿÿÿ³VŒúÿÿð°ÿÿß«ÿÍ´,ÿ]AÝÿa1ÿD¦fÿ‡OÿàšSÿ¹{+ÿ2<úÿ,(Üÿ,(³ÿ3éÿÿàhÿc¿ÿ5@“ÿÖÌÿÿ½ÿªv)ÿ|Vÿ§ºêÿÕÞ÷ÿÒTéÿ ^èÿ:R¤ÿÿ%OFÿ:8ÿ5wqÿd££ÿ2pgÿ.µÿÿÿÿ€cÝÿ]4¿ÿªŒëÿ=ÿQÿ Žùÿ“‘(ÿÁ¸=ÿíèá€§Žïÿ]4¿ÙsPÖÿ<N ÿâÚ÷ÿdHØÿ·dXÿrC3ÿV3%ÿP›ÿbÌÇÿEO–ÿ	yÖÿÄ¾³ÿÛÕÆÿôñíÿ§™ˆÿ         Ú‡o    ÝÃÓ    ÝÃÞ            4R             
  , DFLT      ÿÿ    ccmp              k «\ht€Œ˜¤°¼ÈÔàì@<fºÔ^ªä.`ú,†¨\		x	‚	ô	þ
(
Ò\–ÐâìþBl:2 Ò¤À*:dŽ¸â6`Š´Þ2\†°!œ5 5J5t5ž6l6†7T8"8L99D9n9˜:f::º;ˆ<V<€<ª=x>F>p>š>Ä?–@h@’@¼@æAAA(A6BBÒC DnD˜EfF4F^G,GúHÈI–IÀIêJJ>JhJ’J¼JæKK:KdL2L\L†L°LÚMMÒMüNÊO˜PfP€QNRRFRpRšShT6T`U.UüVÊc.cXc‚dPdzeHffäg²h€iNjjêk  2L  ¼   4,  ¼   45  ¼   47  ¼   4<  ¼   4>  ¼   4@  ¼   4B  ¼   4D  ¼   4F  ¼   4H  ¼   4J  ¼       $2 è2Ž é2 ê2 ë2‘ ì      $3 è3€ é3 ê3‚ ë3ƒ ì  $ 0 < H T ` l x „  œ ¨ ´ º À Æ Ì3ª è  O ¼3­ é  O ¼3® é  P ¼3· ì  P ¼3° ê  O ¼3± ê  P ¼3« è  P ¼3³ ë  O ¼3´ ë  P ¼3¶ ì  O ¼3¸  ¼  O ¼3¹  ¼  P ¼3² ë3¬ é3µ ì3© è3¯ ê      $3Õ è3Ö é3× ê3Ø ë3Ù ì      $3Ý è3Þ é3ß ê3à ë3á ì      $3ä è3å é3æ ê3ç ë3è ì      $3õ è3ö é3÷ ê3ø ë3ù ì   4  ¼ 4  ¼ +  $ * 0 6 < B H N T Z ` f l r x ~ „	  Ü  Ð  Ò  Ó  Ô  Ö  Ù  Ú  Ñ
  Þ  ß  à  á  â  ä  å  ç  , 2 8 > D J P V \ b h n t z € † Œ ’ ˜ ž ¤®  Ú¤  Î¦  Ñ§  Ò¨  Ó©  Ôª  Õ«  Ö¬  ×­  Ù¥  Ï¯  Û°  Ü±  Þ²  ß³  à´  áµ  ã¶  ä·  æ¸  ç  * 0 6 < B H N T Z ` f l r x ~ „ Š  – œþ  Ûô  Îö  Ñ÷  Óø  Ôù  Õú  Öû  Øü  Ùý  Úõ  Ðÿ  Ü   Ý  ß  â  ã  ä  å  æ  ç     " ( . 4D  ÒE  ÔF  ×G  ØH  ÚI  ÜJ  ç 	     & , 2 8 > Dx  Îy  Ðz  Ò{  Ô|  Õ}  ß~  à  á€  â       & ,¦  Ö§  ×¨  Ø©  Úª  Ü«  ß  ( . 4 : @ F L R X ^ d j p v | ‚ ˆ Ž ”2  Ú)  Î+  Ñ,  Ò-  Ó.  Ô/  Õ0  Ö1  Ù*  Ï3  Û4  Ý5  Þ6  ß7  à8  á9  â:  ä;  æ       & ,U  ØV  ÚW  ÛX  ßY  áZ  â    $ * 0 6 < B H N T‚  Û}  Ð  Ò€  Ù  Ú~  Ñƒ  Ü„  Þ…  ß†  à‡  á  
   •  Ò–  Ú—  Ü˜  Ý    $ * 0 6 < B H N TÛ  ÛÖ  ÒØ  ÕÙ  ÖÚ  Ú×  ÔÜ  ÝÝ  ßÞ  äß  æà  ç    $ * 0 6 < B H N T	  ßÿ  Î	  Ð	  Ö	  Ø	   Ï	  à	  á	  â	  ã		  æ  0 6 < B H N T Z ` f l r x ~ „ Š  – œ ¢ ¨ ® ´	z  Ü	o  Î	q  Ñ	r  Ò	s  Ó	t  Ô	u  Õ	v  Ø	w  Ù	x  Ú	y  Û	p  Ð	{  Ý	|  Þ	}  ß	~  à	  á	€  â	  ã	‚  ä	ƒ  å	„  æ	…  ç     & , 2 8 > D J P V \	²  Ù	¬  Î	®  Ò	¯  Ó	°  Ô	±  Ö	­  Ð	³  Ü	´  Ý	µ  ß	¶  â	·  ç  	¾  Ú   $ * 0 6 < B H N T Z ` f l
  Ú
  Î
  Ó
  Ô
	  Õ

  Ø
  Ù
  Ò
  Û
  ß
  à
  á
  ä
  æ  
  Î      $
*  Ò
+  Ü
,  à
-  â
.  ä  , 2 8 > D J P V \ b h n t z € † Œ ’ ˜ ž ¤
©  Ù
Ÿ  Î
¡  Ð
¢  Ñ
£  Ò
¤  Ô
¥  Õ
¦  Ö
§  ×
¨  Ø
   Ï
ª  Ú
«  Û
¬  Ü
­  ß
®  à
¯  á
°  ã
±  å
²  æ
³  ç  $ * 0 6 < B H N T Z ` f l r x ~ „!  Ù  Î  Ñ  Ó  Ô  Õ  ×   Ø  Ð"  Ú#  Û$  Ü%  ß&  á'  ã(  ä)  ç     " ( . 4S  ÎT  ÔU  ÚV  ÛW  àX  æY  ç     " ( . 4‘  Î’  Ð“  Ò”  Ô•  Ö–  Û—  â     Óž  à  ¢  Ø   ·  Ò¸  á    Ì  ÎÍ  ÚÎ  ä      $[ è\ é] ê^ ë_ ì      $³ è´ éµ ê¶ ë· ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â ÈÖ è  O ¼Ù é  O ¼Ú é  P ¼ã ì  P ¼Ü ê  O ¼Ý ê  P ¼× è  P ¼ß ë  O ¼à ë  P ¼â ì  O ¼ä   O ¼å   P ¼Þ ëØ éá ìÕ èÛ ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È  è  O ¼ é  O ¼ é  P ¼ ì  P ¼ ê  O ¼ ê  P ¼ è  P ¼	 ë  O ¼
 ë  P ¼ ì  O ¼   O ¼   P ¼ ë é ìÿ è ê      $. è/ é0 ê1 ë2 ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â ÈB è  O ¼E é  O ¼F é  P ¼O ì  P ¼H ê  O ¼I ê  P ¼C è  P ¼K ë  O ¼L ë  P ¼N ì  O ¼P   O ¼Q   P ¼J ëD éM ìA èG ê  $ 0 < H T ` l x „  œ ¨ ´ º À Æ Ì… è  O ¼ˆ é  O ¼‰ é  P ¼’ ì  P ¼‹ ê  O ¼Œ ê  P ¼† è  P ¼Ž ë  O ¼ ë  P ¼‘ ì  O ¼“  ¼  O ¼”  ¼  P ¼ ë‡ é ì„ èŠ ê  $ 0 < H T ` l x „  œ ¨ ´ º À Æ Ì¾ è  O ¼Á é  O ¼Â é  P ¼Ë ì  P ¼Ä ê  O ¼Å ê  P ¼¿ è  P ¼Ç ë  O ¼È ë  P ¼Ê ì  O ¼Ì  ¼  O ¼Í  ¼  P ¼Æ ëÀ éÉ ì½ èÃ ê   ó  ¼  q ¼ò  ¼  ÿ  
  * :ÿ a^`cag  a^d_eg a^fbdgþ   E ¼  P   ³  œ  à  n   ž ¼    ¼ k ¼      $š è› éœ ê ëž ì      $£ è¤ é¥ ê¦ ë§ ì      $¯ è° é± ê² ë³ ì      $¶ è· é¸ ê¹ ëº ì      $¼ è½ é¾ ê¿ ëÀ ì      $Â èÃ éÄ êÅ ëÆ ì      $Ê èË éÌ êÍ ëÎ ì      $Ô èÕ éÖ ê× ëØ ì      $Û èÜ éÝ êÞ ëß ì      $â èã éä êå ëæ ì      $é èê éë êì ëí ì      $ñ èò éó êô ëõ ì      $ý èþ éÿ ê  ë ì      $[ è\ é] ê^ ë_ ì      $j èk él êm ën ì óèþ*@Vl‚˜®ÄÚð2H^tŠ ¶Ìâø 2DVhzŒž°ÂÔæø
.@Rdvˆš¬¾Ðâò"2BRbr‚’¢²ÂÒâò"2BRbr‚œ¨´ÀÌØäðü ,8DP\ht€Œ˜¤®¸ÂÌÖàêôþ				&	0	:	D	N	X	b	l	v	€	Š	”	ž	¨	²	¼	Æ	Ð	Ú	ä	î	ø



 
*
4
>
H
R
\
f
p
z
„
Ž
˜
¢
¬
¶
À
Ê
Ô
Þ
è
ò
ü$.8BLV`jt~ˆ’œ¦°ºÄÎØâìö 
(2<FPZdnx‚Œ– ª´¾ÈÒÜæðú&.6>FNV^fnv~†Ž–ž¦®¶¾ÆÎÔÚàæ° 
é  § ¼ x UèÙ 
ê  § ¼ x Ué‰ 
è  § ¼ x UéŠ 
è  § ¼ x Uê‹ 
è  § ¼ x UëŒ 
è  § ¼ x Uì( 
ì  § ¼ x Uè) 
ì  § ¼ x Ué* 
ì  § ¼ x Uê 
ë  § ¼ x Uì 
ë  § ¼ x Uë 
ë  § ¼ x Uêˆ 
è  § ¼ x Uè± 
é  § ¼ x Ué² 
é  § ¼ x Uê³ 
é  § ¼ x Uë´ 
é  § ¼ x Uì 
ë  § ¼ x Ué  
ë  § ¼ x UèØ 
ê  § ¼ x Uè+ 
ì  § ¼ x UëÚ 
ê  § ¼ x UêÛ 
ê  § ¼ x UëÜ 
ê  § ¼ x Uì, 
ì  § ¼ x Uì® é  § ¼ Uë¯ é  § ¼ Uì% ì  § ¼ Uê$ ì  § ¼ Uéƒ è  § ¼ Uè# ì  § ¼ Uè„ è  § ¼ Ué… è  § ¼ Uê† è  § ¼ Uëÿ ë  § ¼ Uìþ ë  § ¼ Uëý ë  § ¼ Uêü ë  § ¼ UéÓ ê  § ¼ Uèû ë  § ¼ UèÕ ê  § ¼ UêÖ ê  § ¼ Uë× ê  § ¼ Uì‡ è  § ¼ Uì' ì  § ¼ Uì& ì  § ¼ Uë« é  § ¼ Uè¬ é  § ¼ Ué­ é  § ¼ UêÔ ê  § ¼ UéV   § ¼ x Uð ë F Uìw è F Uëí ë F Uèu è F Uév è F Uêx è F UìÈ ê F UìÇ ê F UëÆ ê F UéÅ ê F Uèî ë F Ué é F Uèï ë F Uê  é F Uìž é F Uê ì F Uè ì F Ué ì F Uê ì F UëŸ é F UëD  V T T?  U T T<  U S SA  V S SC  V T S>  U T SU   § ¼ UW  V S;  U S9  T S=  U TB  V T:  T T@  V S7  S S" ì   ¼  ì  i ¼ú ë   ¼ù ë  j ¼ø ë  i ¼Ò ê   ¼Ñ ê  j ¼! ì  j ¼ª é   ¼© é  j ¼¨ é  i ¼‚ è   ¼ è  j ¼€ è  i ¼Ð ê  i ¼Ë ê ×Ì ê ØÍ ê ÙÎ ê âÏ ê ã é h é q‘ é y’ é ˆ“ é ”” é ˜• é Û– é Ý— é ¨˜ é ©™ é š é › é Äœ é ÖÞ ë 3g è hà ë qá ë yâ ë ˆã ë ”ä ë ˜å ë Ûæ ë Ýç ë ¨è ë ©é ë ê ë ë ë Äì ë Öy è Õz è Ö{ è ×| è Øñ ë Õò ë Öó ë ×ô ë Øõ ë Ùö ë â÷ ë ã¡ é Õ¢ é Ö£ é ×¤ é Ø¥ é Ù¦ é â§ é ã} è Ù~ è â è ãk è ”l è ˜m è Ûn è Ý ì 3 ì h ì q	 ì y
 ì ˆ ì ” ì ˜ ì Û ì Ý ì ¨ ì © ì  ì  ì Ä ì Öo è ¨p è ©q è r è  ì Õ ì Ö ì × ì Ø ì Ù ì â ì ãs è Ät è Öf è 3¶ ê 3· ê h¸ ê q¹ ê yº ê ˆ» ê ”¼ ê ˜½ ê Û¾ ê Ý¿ ê ¨À ê ©Á ê Â ê Ã ê ÄÄ ê Öh è qi è yj è ˆŽ é 3É ê ÕÊ ê Öß ë hT    ¼S   j ¼R   i ¼3  ˜2  ”1  ˆ0  y/  q.  h-  36  S4  Û8  TE  ¨F  ©5  ÝH  I  ÄJ  ÖK  ÕL  ÖM  ×N  ØO  ÙP  âQ  ãG  µ êÝ ë ì ée è7p†œ²ÈÞô
 6LbxŽ¤ºÐæü(>Tj€–¬ÂØî0F\rˆž´Êàö"8Ndz¦¼Îàò(:L^p‚”¦¸ÊÜî $6HZl~¢´ÆØêü		 	2	D	V	h	z	Œ	ž	°	Â	Ô	æ	ø



.
@
R
d
t
„
”
¤
´
Ä
Ô
ä
ô$4DTdt„”¤´ÄÔäô$4DTdt„”¤´ÄÔäô$2@LXdp|ˆ” ¬¸ÄÐÜèô $0<FPZdnx‚Œ– ª´¾ÈÒÜæðú",6@JT^hr|†š¤®¸ÂÌÖàêôþ&0:DNXblv€Š”ž¨²¼ÆÐÚäîø *4>HR\fpz„Ž˜¢¬¶ÀÊÔÞèòü$.8BLV`jt~ˆ’œ¦®¶¾ÆÎÖÞæîöþ&.6>FNV^flrx~a 
ê  § ¼ x Uìb 
ê  § ¼ x Vè` 
ê  § ¼ x Uëf 
ê  § ¼ x Vìe 
ê  § ¼ x Vëd 
ê  § ¼ x VêÒ 
ì  § ¼ x VìÑ 
ì  § ¼ x VëÐ 
ì  § ¼ x VêÏ 
ì  § ¼ x VéÎ 
ì  § ¼ x VèÍ 
ì  § ¼ x UìÌ 
ì  § ¼ x Uë_ 
ê  § ¼ x Uê^ 
ê  § ¼ x Ué] 
ê  § ¼ x Uè“ 
ë  § ¼ x Uè” 
ë  § ¼ x Ué• 
ë  § ¼ x Uê– 
ë  § ¼ x Uë— 
ë  § ¼ x Uì˜ 
ë  § ¼ x Vè™ 
ë  § ¼ x Véñ 
è  § ¼ x Uèò 
è  § ¼ x Uéó 
è  § ¼ x Uêô 
è  § ¼ x Uëõ 
è  § ¼ x Uìö 
è  § ¼ x Vè÷ 
è  § ¼ x Véø 
è  § ¼ x Vêù 
è  § ¼ x Vëú 
è  § ¼ x VìË 
ì  § ¼ x UêÊ 
ì  § ¼ x UéÉ 
ì  § ¼ x Uèš 
ë  § ¼ x Vê› 
ë  § ¼ x Vëœ 
ë  § ¼ x Vì0 
é  § ¼ x Vì/ 
é  § ¼ x Vë. 
é  § ¼ x Vê- 
é  § ¼ x Vé, 
é  § ¼ x Vè+ 
é  § ¼ x Uì* 
é  § ¼ x Uëc 
ê  § ¼ x Vé) 
é  § ¼ x Uê( 
é  § ¼ x Ué' 
é  § ¼ x Uèê è  § ¼ Uë  é  § ¼ Uë" é  § ¼ Vè# é  § ¼ Vé$ é  § ¼ Vê% é  § ¼ Vë& é  § ¼ Vì é  § ¼ Uê é  § ¼ Ué é  § ¼ Uè¿ ì  § ¼ UèÀ ì  § ¼ UéÁ ì  § ¼ UêÂ ì  § ¼ UëÃ ì  § ¼ UìÄ ì  § ¼ VèÅ ì  § ¼ VéÆ ì  § ¼ VêÇ ì  § ¼ VëÈ ì  § ¼ Vìð è  § ¼ Vìï è  § ¼ Vëî è  § ¼ Vêí è  § ¼ Véì è  § ¼ Vèë è  § ¼ Uìç è  § ¼ Uè’ ë  § ¼ Vì‘ ë  § ¼ Vë ë  § ¼ Vê ë  § ¼ VéŽ ë  § ¼ Vè ë  § ¼ UìŒ ë  § ¼ Uë‹ ë  § ¼ UêŠ ë  § ¼ Ué‰ ë  § ¼ UèS ê  § ¼ UèT ê  § ¼ UéU ê  § ¼ UêV ê  § ¼ UëW ê  § ¼ UìX ê  § ¼ VèY ê  § ¼ VéZ ê  § ¼ Vê[ ê  § ¼ Vë\ ê  § ¼ Vìé è  § ¼ Uêè è  § ¼ Ué! é  § ¼ Uìù   § ¼ x Vø   § ¼ x U³ ì F Vê² ì F Vé± ì F Vè° ì F Uë¯ ì F UêÕ è F UéÖ è F Uê× è F UëØ è F UìÙ è F VéÚ è F VêA ê F UèB ê F UéC ê F UëD ê F UìE ê F VèF ê F VéG ê F VëH ê F VìÛ è F VëÜ è F Vìz ë F Uì{ ë F Vè| ë F Vé} ë F Vê~ ë F Vìw ë F Uèx ë F Uéy ë F Uê é F Uè é F Uê é F Uë é F Uì é F Vè­ ì F Uè é F Vê é F Vë é F Vì´ ì F Vë® ì F Uéä  V T Så  V T Tâ  V S S|   § x Uö   § ¼ U÷   § ¼ Và  T Tá  V SÝ  S Sß  T Sã  V TP ê  i ¼Q ê  j ¼† ë  i ¼R ê   ¼ é   ¼å è  j ¼æ è   ¼~   § U¾ ì   ¼½ ì  j ¼¼ ì  i ¼ä è  i ¼ é  i ¼ é  j ¼ˆ ë   ¼‡ ë  j ¼¶ ì Öo ë Ûq ë ¨r ë ©s ë t ë u ë Äv ë Ön ë ˜m ë ”l ë ˆk ë yj ë qi ë hh ë 3È è q ë Õ€ ë Ö ë ×‚ ë Øƒ ë Ù„ ë â… ë ãÇ è hO ê ãN ê âM ê ÙL ê ØK ê ×J ê ÖI ê Õ@ ê Ö? ê Ä> ê = ê < ê ©; ê ¨: ê Ý9 ê Û8 ê ˜7 ê ”6 ê ˆ5 ê y4 ê q3 ê h2 ê 3É è yž ì 3Ÿ ì h  ì q¡ ì y¢ ì ˆ£ ì ”¤ ì ˜¥ ì Û¦ ì Ý§ ì ¨¨ ì ©© ì ª ì « ì Ä¬ ì ÖÊ è ˆ é ã é â é Ù é Ø é × é Ö é Õµ ì Õp ë Ý· ì ×¸ ì Ø¹ ì Ùº ì â» ì ã
 é Ö	 é Ä é  é  é © é ¨ é Ý é Û é ˜ é ”  é ˆÿ é yþ é qý é hü é 3Ë è ”ã è ãâ è âá è Ùà è Øß è ×Þ è ÖÝ è ÕÌ è ˜Í è ÛÎ è ÝÏ è ¨Ð è ©Ñ è Ò è Ó è ÄÔ è ÖÆ è 3ó   i ¼ô   j ¼õ    ¼Ø  ”Þ  T×  ˆÖ  yÕ  qÔ  hÓ  3æ  ¨ç  ©è  é  ê  ÄÚ  Ûì  Õí  Öî  ×ï  Øð  Ùñ  âò  ãÛ  ÝÜ  SÙ  ˜ë  Ö ìÅ èû ég ë1 ê      $ è é ê ë ì      $ è é ê ë ì      $ è é ê ë ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â ÈE è  O ¼H é  O ¼I é  P ¼R ì  P ¼K ê  O ¼L ê  P ¼F è  P ¼N ë  O ¼O ë  P ¼Q ì  O ¼S   O ¼T   P ¼M ëG éP ìD èJ ê   }   O ¼~   P ¼  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È« è  O ¼® é  O ¼¯ é  P ¼¸ ì  P ¼± ê  O ¼² ê  P ¼¬ è  P ¼´ ë  O ¼µ ë  P ¼· ì  O ¼¹   O ¼º   P ¼³ ë­ é¶ ìª è° ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â ÈÆ è  O ¼É é  O ¼Ê é  P ¼Ó ì  P ¼Ì ê  O ¼Í ê  P ¼Ç è  P ¼Ï ë  O ¼Ð ë  P ¼Ò ì  O ¼Ô   O ¼Õ   P ¼Î ëÈ éÑ ìÅ èË ê      $Ý èÞ éß êà ëá ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â Èý è  O ¼  é  O ¼ é  P ¼
 ì  P ¼ ê  O ¼ ê  P ¼þ è  P ¼ ë  O ¼ ë  P ¼	 ì  O ¼   O ¼   P ¼ ëÿ é ìü è ê      $ è é ê ë ì      $! è" é# ê$ ë% ì      $, è- é. ê/ ë0 ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â ÈW è  O ¼Z é  O ¼[ é  P ¼d ì  P ¼] ê  O ¼^ ê  P ¼X è  P ¼` ë  O ¼a ë  P ¼c ì  O ¼e   O ¼f   P ¼_ ëY éb ìV è\ ê      $p èq ér ês ët ì      $’ è“ é” ê• ë– ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È² è  O ¼µ é  O ¼¶ é  P ¼¿ ì  P ¼¸ ê  O ¼¹ ê  P ¼³ è  P ¼» ë  O ¼¼ ë  P ¼¾ ì  O ¼À   O ¼Á   P ¼º ë´ é½ ì± è· ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â Èä è  O ¼ç é  O ¼è é  P ¼ñ ì  P ¼ê ê  O ¼ë ê  P ¼å è  P ¼í ë  O ¼î ë  P ¼ð ì  O ¼ò   O ¼ó   P ¼ì ëæ éï ìã èé ê      $þ èÿ é  ê ë ì      $ è é ê ë ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È1 è  O ¼4 é  O ¼5 é  P ¼> ì  P ¼7 ê  O ¼8 ê  P ¼2 è  P ¼: ë  O ¼; ë  P ¼= ì  O ¼?   O ¼@   P ¼9 ë3 é< ì0 è6 ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â ÈY è  O ¼\ é  O ¼] é  P ¼f ì  P ¼_ ê  O ¼` ê  P ¼Z è  P ¼b ë  O ¼c ë  P ¼e ì  O ¼g   O ¼h   P ¼a ë[ éd ìX è^ ê      $ è é‘ ê’ ë“ ì      $¤ è¥ é¦ ê§ ë¨ ì      $ß èà éá êâ ëã ì  $ 0 < H T ` l x „  œ ¨ ´ º À Æ Ì è  O ¼  é  O ¼! é  P ¼* ì  P ¼# ê  O ¼$ ê  P ¼ è  P ¼& ë  O ¼' ë  P ¼) ì  O ¼+  ¼  O ¼,  ¼  P ¼% ë é( ì è" ê  $ 0 < H T ` l x „  œ ¨ ´ º À Æ ÌF è  O ¼I é  O ¼J é  P ¼S ì  P ¼L ê  O ¼M ê  P ¼G è  P ¼O ë  O ¼P ë  P ¼R ì  O ¼T  ¼  O ¼U  ¼  P ¼N ëH éQ ìE èK ê      $q èr és êt ëu ì      $Œ è éŽ ê ë ì      $” è• é– ê— ë˜ ì      $ èž éŸ ê  ë¡ ì   Œ  •      ˜   «    ¼  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È á è  O ¼ ä é  O ¼ å é  P ¼ î ì  P ¼ ç ê  O ¼ è ê  P ¼ â è  P ¼ ê ë  O ¼ ë ë  P ¼ í ì  O ¼ ï   O ¼ ð   P ¼ é ë ã é ì ì à è æ ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È ÿ è  O ¼! é  O ¼! é  P ¼! ì  P ¼! ê  O ¼! ê  P ¼!  è  P ¼! ë  O ¼!	 ë  P ¼! ì  O ¼!   O ¼!   P ¼! ë! é!
 ì þ è! ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È! è  O ¼!" é  O ¼!# é  P ¼!, ì  P ¼!% ê  O ¼!& ê  P ¼!  è  P ¼!( ë  O ¼!) ë  P ¼!+ ì  O ¼!-   O ¼!.   P ¼!' ë!! é!* ì! è!$ ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È!Q è  O ¼!T é  O ¼!U é  P ¼!^ ì  P ¼!W ê  O ¼!X ê  P ¼!R è  P ¼!Z ë  O ¼![ ë  P ¼!] ì  O ¼!_   O ¼!`   P ¼!Y ë!S é!\ ì!P è!V ê      $!h è!i é!j ê!k ë!l ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È!y è  O ¼!| é  O ¼!} é  P ¼!† ì  P ¼! ê  O ¼!€ ê  P ¼!z è  P ¼!‚ ë  O ¼!ƒ ë  P ¼!… ì  O ¼!‡   O ¼!ˆ   P ¼! ë!{ é!„ ì!x è!~ ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È! è  O ¼!’ é  O ¼!“ é  P ¼!œ ì  P ¼!• ê  O ¼!– ê  P ¼! è  P ¼!˜ ë  O ¼!™ ë  P ¼!› ì  O ¼!   O ¼!ž   P ¼!— ë!‘ é!š ì!Ž è!” ê      $!¨ è!© é!ª ê!« ë!¬ ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È"ç è  O ¼"ê é  O ¼"ë é  P ¼"ô ì  P ¼"í ê  O ¼"î ê  P ¼"è è  P ¼"ð ë  O ¼"ñ ë  P ¼"ó ì  O ¼"õ   O ¼"ö   P ¼"ï ë"é é"ò ì"æ è"ì ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È#I è  O ¼#L é  O ¼#M é  P ¼#V ì  P ¼#O ê  O ¼#P ê  P ¼#J è  P ¼#R ë  O ¼#S ë  P ¼#U ì  O ¼#W   O ¼#X   P ¼#Q ë#K é#T ì#H è#N ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È#\ è  O ¼#_ é  O ¼#` é  P ¼#i ì  P ¼#b ê  O ¼#c ê  P ¼#] è  P ¼#e ë  O ¼#f ë  P ¼#h ì  O ¼#j   O ¼#k   P ¼#d ë#^ é#g ì#[ è#a ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È#} è  O ¼#€ é  O ¼# é  P ¼#Š ì  P ¼#ƒ ê  O ¼#„ ê  P ¼#~ è  P ¼#† ë  O ¼#‡ ë  P ¼#‰ ì  O ¼#‹   O ¼#Œ   P ¼#… ë# é#ˆ ì#| è#‚ ê      $#© è#ª é#« ê#¬ ë#­ ì      $#É è#Ê é#Ë ê#Ì ë#Í ì      $$¬ è$­ é$® ê$¯ ë$° ì      $$³ è$´ é$µ ê$¶ ë$· ì      $$ä è$å é$æ ê$ç ë$è ì      $$ð è$ñ é$ò ê$ó ë$ô ì      $$÷ è$ø é$ù ê$ú ë$û ì      $% è% é% ê% ë% ì      $% è% é% ê% ë% ì      $% è% é% ê% ë% ì      $%" è%# é%$ ê%% ë%& ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È%[ è  O ¼%^ é  O ¼%_ é  P ¼%h ì  P ¼%a ê  O ¼%b ê  P ¼%\ è  P ¼%d ë  O ¼%e ë  P ¼%g ì  O ¼%i   O ¼%j   P ¼%c ë%] é%f ì%Z è%` ê      $%£ è%¤ é%¥ ê%¦ ë%§ ì      $%· è%¸ é%¹ ê%º ë%» ì      $%Ë è%Ì é%Í ê%Î ë%Ï ì      $%à è%á é%â ê%ã ë%ä ì      $%ñ è%ò é%ó ê%ô ë%õ ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È& è  O ¼& é  O ¼& é  P ¼&' ì  P ¼&  ê  O ¼&! ê  P ¼& è  P ¼&# ë  O ¼&$ ë  P ¼&& ì  O ¼&(   O ¼&)   P ¼&" ë& é&% ì& è& ê      $&* è&+ é&, ê&- ë&. ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È&: è  O ¼&= é  O ¼&> é  P ¼&G ì  P ¼&@ ê  O ¼&A ê  P ¼&; è  P ¼&C ë  O ¼&D ë  P ¼&F ì  O ¼&H   O ¼&I   P ¼&B ë&< é&E ì&9 è&? ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È&i è  O ¼&l é  O ¼&m é  P ¼&v ì  P ¼&o ê  O ¼&p ê  P ¼&j è  P ¼&r ë  O ¼&s ë  P ¼&u ì  O ¼&w   O ¼&x   P ¼&q ë&k é&t ì&h è&n ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È&  è  O ¼&£ é  O ¼&¤ é  P ¼&­ ì  P ¼&¦ ê  O ¼&§ ê  P ¼&¡ è  P ¼&© ë  O ¼&ª ë  P ¼&¬ ì  O ¼&®   O ¼&¯   P ¼&¨ ë&¢ é&« ì&Ÿ è&¥ ê   &×   O ¼&Ø   P ¼  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È&ï è  O ¼&ò é  O ¼&ó é  P ¼&ü ì  P ¼&õ ê  O ¼&ö ê  P ¼&ð è  P ¼&ø ë  O ¼&ù ë  P ¼&û ì  O ¼&ý   O ¼&þ   P ¼&÷ ë&ñ é&ú ì&î è&ô ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È' è  O ¼'  é  O ¼'! é  P ¼'* ì  P ¼'# ê  O ¼'$ ê  P ¼' è  P ¼'& ë  O ¼'' ë  P ¼') ì  O ¼'+   O ¼',   P ¼'% ë' é'( ì' è'" ê      $(£ è(¤ é(¥ ê(¦ ë(§ ì      $*‚ è*ƒ é*„ ê*… ë*† ì      $*‰ è*Š é*‹ ê*Œ ë* ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È*¬ è  O ¼*¯ é  O ¼*° é  P ¼*¹ ì  P ¼*² ê  O ¼*³ ê  P ¼*­ è  P ¼*µ ë  O ¼*¶ ë  P ¼*¸ ì  O ¼*º   O ¼*»   P ¼*´ ë*® é*· ì*« è*± ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È*Ó è  O ¼*Ö é  O ¼*× é  P ¼*à ì  P ¼*Ù ê  O ¼*Ú ê  P ¼*Ô è  P ¼*Ü ë  O ¼*Ý ë  P ¼*ß ì  O ¼*á   O ¼*â   P ¼*Û ë*Õ é*Þ ì*Ò è*Ø ê      $*ï è*ð é*ñ ê*ò ë*ó ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È+´ è  O ¼+· é  O ¼+¸ é  P ¼+Á ì  P ¼+º ê  O ¼+» ê  P ¼+µ è  P ¼+½ ë  O ¼+¾ ë  P ¼+À ì  O ¼+Â   O ¼+Ã   P ¼+¼ ë+¶ é+¿ ì+³ è+¹ ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È+Þ è  O ¼+á é  O ¼+â é  P ¼+ë ì  P ¼+ä ê  O ¼+å ê  P ¼+ß è  P ¼+ç ë  O ¼+è ë  P ¼+ê ì  O ¼+ì   O ¼+í   P ¼+æ ë+à é+é ì+Ý è+ã ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È, è  O ¼, é  O ¼, é  P ¼, ì  P ¼, ê  O ¼, ê  P ¼, è  P ¼, ë  O ¼, ë  P ¼, ì  O ¼,   O ¼,   P ¼, ë, é, ì, è, ê Ý¼Òèþ*@Vl‚˜®ÄÚð2H^t†˜ª¼Îàò(:L^p‚”¦¸ÊÜìü,<L\l|Œœ¬¼ÌÜìü,<L\lx„œ¨´ÀÌØäðü ,6@JT^hr|†š¤®¸ÂÌÖàêôþ&0:DNXblv€Š”ž¨²¼ÆÐÚäîø				 	*	4	>	H	R	\	f	p	z	„	Ž	˜	¢	¬	¶	À	Ê	Ô	Þ	è	ò	ü



$
.
8
B
L
V
`
j
t
~
ˆ
’
œ
¦
°
º
Ä
Î
Ø
â
ì
ö 
(2<FPZdnx‚Œ–ž¦®¶¾ÆÎÖÞæîöþ&.6>FLRX^-; 
ë  § ¼ x öê- 
ê  § ¼ x öë-b 
ì  § ¼ x öê-a 
ì  § ¼ x öé-` 
ì  § ¼ x öè,Ä 
è  § ¼ x öé,Å 
è  § ¼ x öê,Æ 
è  § ¼ x öë,Ç 
è  § ¼ x öì-< 
ë  § ¼ x öì-c 
ì  § ¼ x öë-: 
ë  § ¼ x öé-9 
ë  § ¼ x öè,ë 
é  § ¼ x öè,ì 
é  § ¼ x öê,í 
é  § ¼ x öë,î 
é  § ¼ x öì- 
ê  § ¼ x öì- 
ê  § ¼ x öé- 
ê  § ¼ x öè-e ì  § ¼ öé-@ ë  § ¼ öì-? ë  § ¼ öê-f ì  § ¼ öê- ê  § ¼ öì- ê  § ¼ öë,È è  § ¼ öé,É è  § ¼ öê,Ê è  § ¼ öë,Ë è  § ¼ öì,ï é  § ¼ öè,ð é  § ¼ öê,ñ é  § ¼ öë,ò é  § ¼ öì-g ì  § ¼ öë- ê  § ¼ öé- ê  § ¼ öè-> ë  § ¼ öé-= ë  § ¼ öè-d ì  § ¼ öè,ß é F öë,µ è F öè,¶ è F öé- ê F öì- ê F öë- ê F öê- ê F öé- ê F öè,· è F öê,¸ è F öë,¹ è F öì-* ë F öè-+ ë F öé-, ë F öê-- ë F öë-. ë F öì-U ì F öì-T ì F öë-S ì F öê,à é F öì-R ì F öé,Þ é F öê,Ý é F öé,Ü é F öè-Q ì F öè-w  F ö-] ì  i ¼,Á è  i ¼,Ã è   ¼- ê  j ¼-8 ë   ¼-7 ë  j ¼-6 ë  i ¼,Â è  j ¼-^ ì  j ¼-_ ì   ¼,è é  i ¼,é é  j ¼,ê é   ¼- ê   ¼- ê  i ¼,÷ ê y,ø ê ˆ,ù ê ”,ú ê ˜,û ê Û,ü ê Ý,ý ê ¨,þ ê ©,ÿ ê -  ê - ê Ä- ê Ö,´ è Ö,¦ è 3,¨ è q,© è y,Í é 3- ê Õ-	 ê Ö-
 ê ×- ê Ø- ê Ù- ê â- ê ã,Î é h,Ï é q,Ð é y,Ñ é ˆ,Ò é ”,§ è h,Ó é ˜,Ô é Û,Õ é Ý,Ö é ¨,× é ©,Ø é - ë 3- ë h- ë q- ë y- ë ˆ-  ë ”-! ë ˜-" ë Û-# ë Ý-$ ë ¨-% ë ©-& ë -' ë -( ë Ä-) ë Ö,Ù é ,Ú é Ä,Û é Ö,ª è ˆ,« è ”-/ ë Õ-0 ë Ö-1 ë ×-2 ë Ø-3 ë Ù-4 ë â-5 ë ã,º è Õ,» è Ö,¼ è ×,á é Õ,â é Ö,ã é ×,ä é Ø,å é Ù,æ é â,ç é ã,½ è Ø,¾ è Ù-B ì 3-C ì h-D ì q-E ì y-F ì ˆ-G ì ”-H ì ˜-I ì Û-J ì Ý-K ì ¨-L ì ©-M ì -N ì -O ì Ä-P ì Ö,¿ è â,À è ã,¬ è ˜,­ è Û,® è Ý-V ì Õ-W ì Ö-X ì ×-Y ì Ø-Z ì Ù-[ ì â-\ ì ã,¯ è ¨,° è ©,± è ,² è ,³ è Ä,ô ê 3,õ ê h,ö ê q-    ¼-€   j ¼-   i ¼-s  -h  3-i  h-j  q-k  y-l  ˆ-m  ”-n  ˜-o  Û-p  Ý-q  ¨-r  ©-~  ã-t  -u  Ä-v  Ö-}  â-x  Õ-y  Ö-z  ×-{  Ø-|  Ù,¥ è,ó ê-A ì,Ì é- ë      $-‡ è-ˆ é-‰ ê-Š ë-‹ ì      $-’ è-“ é-” ê-• ë-– ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È-¤ è  O ¼-§ é  O ¼-¨ é  P ¼-± ì  P ¼-ª ê  O ¼-« ê  P ¼-¥ è  P ¼-­ ë  O ¼-® ë  P ¼-° ì  O ¼-²   O ¼-³   P ¼-¬ ë-¦ é-¯ ì-£ è-© ê      $-¸ è-¹ é-º ê-» ë-¼ ì  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È-Þ è  O ¼-á é  O ¼-â é  P ¼-ë ì  P ¼-ä ê  O ¼-å ê  P ¼-ß è  P ¼-ç ë  O ¼-è ë  P ¼-ê ì  O ¼-ì   O ¼-í   P ¼-æ ë-à é-é ì-Ý è-ã ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È. è  O ¼. é  O ¼. é  P ¼. ì  P ¼. ê  O ¼. ê  P ¼. è  P ¼. ë  O ¼. ë  P ¼. ì  O ¼.   O ¼.   P ¼. ë. é. ì. è. ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È.< è  O ¼.? é  O ¼.@ é  P ¼.I ì  P ¼.B ê  O ¼.C ê  P ¼.= è  P ¼.E ë  O ¼.F ë  P ¼.H ì  O ¼.J   O ¼.K   P ¼.D ë.> é.G ì.; è.A ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È.j è  O ¼.m é  O ¼.n é  P ¼.w ì  P ¼.p ê  O ¼.q ê  P ¼.k è  P ¼.s ë  O ¼.t ë  P ¼.v ì  O ¼.x   O ¼.y   P ¼.r ë.l é.u ì.i è.o ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È.— è  O ¼.š é  O ¼.› é  P ¼.¤ ì  P ¼. ê  O ¼.ž ê  P ¼.˜ è  P ¼.  ë  O ¼.¡ ë  P ¼.£ ì  O ¼.¥   O ¼.¦   P ¼.Ÿ ë.™ é.¢ ì.– è.œ ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È.È è  O ¼.Ë é  O ¼.Ì é  P ¼.Õ ì  P ¼.Î ê  O ¼.Ï ê  P ¼.É è  P ¼.Ñ ë  O ¼.Ò ë  P ¼.Ô ì  O ¼.Ö   O ¼.×   P ¼.Ð ë.Ê é.Ó ì.Ç è.Í ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È.ù è  O ¼.ü é  O ¼.ý é  P ¼/ ì  P ¼.ÿ ê  O ¼/  ê  P ¼.ú è  P ¼/ ë  O ¼/ ë  P ¼/ ì  O ¼/   O ¼/   P ¼/ ë.û é/ ì.ø è.þ ê  $ 0 < H T ` l x „  œ ¦ ° ¶ ¼ Â È/( è  O ¼/+ é  O ¼/, é  P ¼/5 ì  P ¼/. ê  O ¼// ê  P ¼/) è  P ¼/1 ë  O ¼/2 ë  P ¼/4 ì  O ¼/6   O ¼/7   P ¼/0 ë/* é/3 ì/' è/- ê   /M   O ¼/N   P ¼   /w   O ¼/x   P ¼  1     D D  ˆ ˆ  Š Š  ‘ ”  § §  Î ç zz .²´ /·· 2º¼ 3áâ 6õõ 8 9(( :.0 ;3= >SV IXe Mii [np \rt _|| b~~ c—— dKL eQQ gWY h¢¢ k©ª l¹» n¿Ã qçç vøú w z {55 |88 }AE ~GH ƒOO …Yb †df žž “ÛÜ ”Þß –áá ˜òô ™ö œ<!DOCTYPE html><html><head><meta charset=utf-8><title>Clash for Windows</title><script defer=defer src=renderer.js></script></head><body><div id=app></div><script>if (process.env.NODE_ENV !== 'development') window.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')</script></body></html>(()=>{var e={228:e=>{e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r},e.exports.default=e.exports,e.exports.__esModule=!0},858:e=>{e.exports=function(e){if(Array.isArray(e))return e},e.exports.default=e.exports,e.exports.__esModule=!0},646:(e,t,n)=>{var r=n(228);e.exports=function(e){if(Array.isArray(e))return r(e)},e.exports.default=e.exports,e.exports.__esModule=!0},926:e=>{function t(e,t,n,r,o,i,a){try{var c=e[i](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,o)}e.exports=function(e){return function(){var n=this,r=arguments;return new Promise((function(o,i){var a=e.apply(n,r);function c(e){t(a,o,i,c,s,"next",e)}function s(e){t(a,o,i,c,s,"throw",e)}c(void 0)}))}},e.exports.default=e.exports,e.exports.__esModule=!0},713:e=>{e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.default=e.exports,e.exports.__esModule=!0},860:e=>{e.exports=function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)},e.exports.default=e.exports,e.exports.__esModule=!0},884:e=>{e.exports=function(e,t){var n=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=n){var r,o,i=[],a=!0,c=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){c=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(c)throw o}}return i}},e.exports.default=e.exports,e.exports.__esModule=!0},521:e=>{e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},206:e=>{e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},38:(e,t,n)=>{var r=n(858),o=n(884),i=n(379),a=n(521);e.exports=function(e,t){return r(e)||o(e,t)||i(e,t)||a()},e.exports.default=e.exports,e.exports.__esModule=!0},319:(e,t,n)=>{var r=n(646),o=n(860),i=n(379),a=n(206);e.exports=function(e){return r(e)||o(e)||i(e)||a()},e.exports.default=e.exports,e.exports.__esModule=!0},379:(e,t,n)=>{var r=n(228);e.exports=function(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}},e.exports.default=e.exports,e.exports.__esModule=!0},757:(e,t,n)=>{e.exports=n(666)},666:e=>{var t=function(e){"use strict";var t,n=Object.prototype,r=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function s(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{s({},"")}catch(e){s=function(e,t,n){return e[t]=n}}function l(e,t,n,r){var o=t&&t.prototype instanceof b?t:b,i=Object.create(o.prototype),a=new P(r||[]);return i._invoke=function(e,t,n){var r=p;return function(o,i){if(r===f)throw new Error("Generator is already running");if(r===h){if("throw"===o)throw i;return T()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var c=_(a,n);if(c){if(c===m)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===p)throw r=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=f;var s=u(e,t,n);if("normal"===s.type){if(r=n.done?h:d,s.arg===m)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r=h,n.method="throw",n.arg=s.arg)}}}(e,n,a),i}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var p="suspendedStart",d="suspendedYield",f="executing",h="completed",m={};function b(){}function g(){}function y(){}var w={};w[i]=function(){return this};var v=Object.getPrototypeOf,x=v&&v(v(I([])));x&&x!==n&&r.call(x,i)&&(w=x);var k=y.prototype=b.prototype=Object.create(w);function C(e){["next","throw","return"].forEach((function(t){s(e,t,(function(e){return this._invoke(t,e)}))}))}function M(e,t){function n(o,i,a,c){var s=u(e[o],e,i);if("throw"!==s.type){var l=s.arg,p=l.value;return p&&"object"==typeof p&&r.call(p,"__await")?t.resolve(p.__await).then((function(e){n("next",e,a,c)}),(function(e){n("throw",e,a,c)})):t.resolve(p).then((function(e){l.value=e,a(l)}),(function(e){return n("throw",e,a,c)}))}c(s.arg)}var o;this._invoke=function(e,r){function i(){return new t((function(t,o){n(e,r,t,o)}))}return o=o?o.then(i,i):i()}}function _(e,n){var r=e.iterator[n.method];if(r===t){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=t,_(e,n),"throw"===n.method))return m;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var o=u(r,e.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,m;var i=o.arg;return i?i.done?(n[e.resultName]=i.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,m):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function S(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function P(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function I(e){if(e){var n=e[i];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function n(){for(;++o<e.length;)if(r.call(e,o))return n.value=e[o],n.done=!1,n;return n.value=t,n.done=!0,n};return a.next=a}}return{next:T}}function T(){return{value:t,done:!0}}return g.prototype=k.constructor=y,y.constructor=g,g.displayName=s(y,c,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,y):(e.__proto__=y,s(e,c,"GeneratorFunction")),e.prototype=Object.create(k),e},e.awrap=function(e){return{__await:e}},C(M.prototype),M.prototype[a]=function(){return this},e.AsyncIterator=M,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new M(l(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},C(k),s(k,c,"Generator"),k[i]=function(){return this},k.toString=function(){return"[object Generator]"},e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=I,P.prototype={constructor:P,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(O),!e)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function o(r,o){return c.type="throw",c.arg=e,n.next=r,o&&(n.method="next",n.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(s&&l){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(s){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!l)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,m):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),m},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),O(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;O(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:I(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),m}},e}(e.exports);try{regeneratorRuntime=t}catch(e){Function("r","regeneratorRuntime = r")(t)}},354:e=>{"use strict";e.exports=require("@fndroid/network-interface")},113:e=>{"use strict";e.exports=require("electron-window-bounds")},948:e=>{"use strict";e.exports=require("fix-path")},793:e=>{"use strict";e.exports=require("lodash")},298:e=>{"use strict";e.exports=require("electron")},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r);var e=n(319),t=n.n(e),o=n(38),i=n.n(o),a=n(713),c=n.n(a),s=n(926),l=n.n(s),u=n(757),p=n.n(u);require("@vue/reactivity");const d=require("axios");var f=n.n(d),h=n(298);function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function b(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?m(Object(n),!0).forEach((function(t){c()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var g,y,w,v,x,k=n(298).TouchBar,C=k.TouchBarButton,M=n(17),_=n(147),S=n(793),O=n(948);global.__static=n(17).join(__dirname,"/static").replace(/\\/g,"\\\\"),O(),h.app.disableHardwareAcceleration(),h.app.commandLine.appendSwitch("disable-features","OutOfBlinkCors"),"darwin"===process.platform&&h.app.dock.hide();var P,I=[],T="file://".concat(__dirname,"/index.html");function j(){return"linux"===process.platform}function L(){g&&("win32"===process.platform?g.isMinimized()?g.restore():g.show():(g.setVisibleOnAllWorkspaces(!0),setTimeout((function(){g.show(),g.setVisibleOnAllWorkspaces(!1)}),1)))}function D(){var e,r;(g=new h.BrowserWindow({height:603,width:850,minWidth:850,minHeight:603,backgroundColor:h.nativeTheme.shouldUseDarkColors?"#272531":"#f5f5f5",useContentSize:!0,show:!1,minimizable:!0,frame:!1,titleBarStyle:"hidden",icon:j()?M.join(__static,"imgs","icon_512.png"):void 0,webPreferences:{nodeIntegration:!0,webSecurity:!0,nodeIntegrationInWorker:!1,contextIsolation:!1,preload:M.resolve(M.join(__dirname,"preload.js"))}})).setMenu(null),g.webContents.on("will-navigate",(function(e){return e.preventDefault()})),g.loadURL(T,{userAgent:"ClashforWindows/".concat(h.app.getVersion())}),g.webContents.on("render-process-gone",(e=l()(p().mark((function e(t,n){var r,o;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n.reason,"darwin"!==process.platform){e.next=3;break}return e.abrupt("return");case 3:if("crashed"!==r){e.next=10;break}return o={type:"error",title:"Clash for Windows",message:"ä»ªè¡¨æ¿å´©æºƒäº†!",buttons:["Reload","Exit"]},e.next=7,h.dialog.showMessageBox(g,o);case 7:0===e.sent.response?A():h.app.quit();case 10:case"end":return e.stop()}}),e)}))),function(t,n){return e.apply(this,arguments)})),h.ipcMain.handle("start-download",(function(e,t,n){g.webContents.downloadURL(t),x=n})),g.webContents.session.on("will-download",(function(e,t,n){x&&(t.setSavePath(x),t.on("updated",(function(e,n){"interrupted"===n?g.webContents.send("download","interrupted"):"progressing"===n&&(t.isPaused()?g.webContents.send("download","paused"):g.webContents.send("download","downloading",t.getReceivedBytes()/t.getTotalBytes()))})),t.once("done",(function(e,t){"completed"===t?g.webContents.send("download","completed"):g.webContents.send("download","failed",t)})),x=null)})),h.ipcMain.handle("app",(function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];switch(t){case"isPackaged":return h.app.isPackaged;case"getPath":return h.app.getPath.apply(h.app,r);case"getAppPath":return h.app.getAppPath();case"getName":return h.app.getName();case"getVersion":return h.app.getVersion();case"setLoginItemSettings":return h.app.setLoginItemSettings.apply(h.app,r);case"relaunch":return h.app.relaunch();case"exit":return h.app.exit.apply(h.app,r);case"quit":return h.app.quit()}})),h.ipcMain.handle("window",(function(e,t){for(var n,r,o=arguments.length,i=new Array(o>2?o-2:0),a=2;a<o;a++)i[a-2]=arguments[a];switch(t){case"close":return g.close();case"minimize":return g.minimize();case"maximize":return g.maximize();case"unmaximize":return g.unmaximize();case"setAlwaysOnTop":return(n=g).setAlwaysOnTop.apply(n,i);case"isVisible":return g.isVisible();case"isMaximized":return g.isMaximized();case"setFullScreen":return(r=g).setFullScreen.apply(r,i);case"reload":return g.reload()}})),g.on("hide",(function(){g.webContents.send("window-event","hide")})),g.on("show",(function(){"darwin"===process.platform&&h.app.dock.show(),g.webContents.send("window-event","show")})),g.on("close",(function(e){if(h.app.isQuiting)h.globalShortcut.unregisterAll(),h.app.exit();else{if(e.preventDefault(),"darwin"===process.platform&&g.isFullScreen())return void g.setFullScreen(!1);g.webContents.send("window-event","close"),v?(g.blur(),g.hide(),"darwin"===process.platform&&h.app.dock.hide()):g.minimize()}return!1})),g.on("maximize",(function(e){g.webContents.send("window-event","maximize")})),g.on("unmaximize",(function(e){g.webContents.send("window-event","unmaximize")})),g.on("enter-full-screen",(function(e){g.webContents.send("window-event","enter-full-screen")})),g.on("leave-full-screen",(function(e){g.webContents.send("window-event","leave-full-screen")})),g.on("session-end",(function(e){e.preventDefault(),g.webContents.send("app-exit")})),h.ipcMain.handle("webContent",(function(e,t){if("toggleDevTools"===t)return g.webContents.toggleDevTools()})),h.ipcMain.handle("dialog",(r=l()(p().mark((function e(t,n){var r,o,i,a=arguments;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(r=a.length,o=new Array(r>2?r-2:0),i=2;i<r;i++)o[i-2]=a[i];e.t0=n,e.next="showMessageBox"===e.t0?4:"showOpenDialogSync"===e.t0?7:8;break;case 4:return e.next=6,h.dialog.showMessageBox.apply(h.dialog,[g].concat(o));case 6:return e.abrupt("return",e.sent);case 7:return e.abrupt("return",h.dialog.showOpenDialogSync.apply(h.dialog,[g].concat(o)));case 8:case"end":return e.stop()}}),e)}))),function(e,t){return r.apply(this,arguments)})),h.ipcMain.handle("globalShortcut",(function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];switch(t){case"register":return h.globalShortcut.register(r[0],(function(){g.webContents.send("shortcut-pressed",r[0])}));case"unregister":return h.globalShortcut.unregister.apply(h.globalShortcut,r);case"isRegistered":return h.globalShortcut.isRegistered.apply(h.globalShortcut,r)}})),h.ipcMain.handle("nativeTheme",(function(e,t){if("shouldUseDarkColors"===t)return h.nativeTheme.shouldUseDarkColors})),h.nativeTheme.on("updated",(function(){g.webContents.send("native-theme-updated",h.nativeTheme.shouldUseDarkColors)})),h.ipcMain.handle("powerSaveBlocker",(function(e,t){for(var n,r,o=arguments.length,i=new Array(o>2?o-2:0),a=2;a<o;a++)i[a-2]=arguments[a];switch(t){case"start":return(n=powerSaveBlocker).start.apply(n,i);case"stop":return(r=powerSaveBlocker).stop.apply(r,i)}})),h.ipcMain.on("set-allow-unsafe-urls",(function(e,t){I=t})),g.setTouchBar(new k({items:[new C({label:"General",backgroundColor:"#505050",click:function(){g.webContents.send("menu-item-change","general")}}),new C({label:"Proxies",backgroundColor:"#505050",click:function(){g.webContents.send("menu-item-change","proxy")}}),new C({label:"Profiles",backgroundColor:"#505050",click:function(){g.webContents.send("menu-item-change","server")}}),new C({label:"Logs",backgroundColor:"#505050",click:function(){g.webContents.send("menu-item-change","log")}}),new C({label:"è¿žæŽ¥",backgroundColor:"#505050",click:function(){g.webContents.send("menu-item-change","connection")}}),new C({label:"Settings",backgroundColor:"#505050",click:function(){g.webContents.send("menu-item-change","setting")}}),new C({label:"Feedback",backgroundColor:"#505050",click:function(){g.webContents.send("menu-item-change","about")}})]})),h.powerMonitor.on("suspend",(function(){g.webContents.send("power-event","suspend")})),h.powerMonitor.on("resume",(function(){g.webContents.send("power-event","resume")})),h.ipcMain.handle("window-control",(function(e,t){switch(t){case"hide":h.app.quit();break;case"show":L();break;case"show-or-hide":g.isVisible()&&g.isFocused()?h.app.quit():L()}})),h.ipcMain.on("cleanup-done",(function(e){h.app.isQuiting=!0,h.app.quit()})),h.ipcMain.on("status-changed",(function(e,t){try{"darwin"!==process.platform&&v.setImage(t)}catch(e){}})),h.ipcMain.on("show-notification",(function(e,t){var n=M.join(global.__static,"imgs/logo_64.png"),r=new h.Notification(b(b({},t),{},{icon:"darwin"!==process.platform?h.nativeImage.createFromPath(n):null})),o=t.folder,i=t.url;o&&r.on("click",(function(){h.shell.openPath(t.folder)})),i&&r.on("click",(function(){h.shell.openExternal(i)})),r.show()})),h.ipcMain.on("clash-core-info",(function(e,t){var n=t.port,r=t.secret;n>0&&(P=f().create({baseURL:"http://127.0.0.1:".concat(n,"/"),timeout:5e3,headers:{Authorization:"Bearer ".concat(r)}}))}));var o,a={systemProxyChecked:!1,tunModeChecked:!1,mixinChecked:!1,isReady:!1,menuMode:"",menuStyle:0,isShowDelayIcon:!1},s=function(e){return h.nativeImage.createFromPath(M.join(__static,"imgs","tray-proxy-".concat(e,".png"))).resize({width:8,height:8})},u=(s("default"),s("online")),d=s("offline"),m=(o=l()(p().mark((function e(){var n,r,o,c,s,l,f,m,b,y,w,v;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=[],e.prev=1,j()&&2!==!a.menuStyle){e.next=12;break}return e.next=5,Promise.all([P.get("/proxies"),P.get("/providers/proxies")]);case 5:r=e.sent,o=i()(r,2),c=o[0],s=o[1],l=(null==c?void 0:c.data)||{},f=l.proxies,m=(null==s?void 0:s.data)||{},b=m.providers,f&&((y=Object.entries(f).reduce((function(e,n){var r=i()(n,2),o=r[0],a=r[1];return"Selector"===(a||{}).type?[].concat(t()(e),[{name:o,all:a.all,now:a.now}]):e}),[])).sort((function(e,t){var n=f.GLOBAL.all;return n.findIndex((function(t){return t===e.name}))-n.findIndex((function(e){return e===t.name}))})),w=Object.entries(b).reduce((function(e,n){var r=i()(n,2),o=(r[0],(r[1]||{}).proxies),a=void 0===o?[]:o;return[].concat(t()(e),t()(a))})),n=y.map((function(e){var t=e.name,n=e.all,r=e.now;return{label:t,submenu:n.map((function(e){var n=w.find((function(t){return t.name===e}))||[];return{label:e,type:"radio",checked:e===r,icon:a.isShowDelayIcon?n.alive?u:d:null,click:function(){P&&P.put("/proxies/".concat(encodeURIComponent(t)),{name:e}).then((function(e){204===e.status&&(g.webContents.send("persist-selected-proxy"),g.webContents.send("break-connections",t))})).catch((function(e){}))}}}))}})));case 12:e.next=16;break;case 14:e.prev=14,e.t0=e.catch(1);case 16:return v=[[{label:"ä»£ç†ç»„",enabled:!1}].concat(t()(n)),[{label:"ä»£ç†ç»„",submenu:n}],[]][a.menuStyle||0],e.abrupt("return",[{label:"ä»ªè¡¨ç›˜",click:L},{label:"è¿è¡Œä»»åŠ¡æ è„šæœ¬",visible:"linux"!==process.platform,click:function(){return g.webContents.send("run-tray-script")}},{type:"separator"},{label:"&ç³»ç»Ÿä»£ç†",type:"checkbox",id:"system-proxy",checked:a.systemProxyChecked,enabled:a.isReady,visible:"linux"!==process.platform,click:function(e){var t=e.checked;g.webContents.send("system-proxy-changed",t)}},{label:"TUN æ¨¡å¼",type:"checkbox",id:"tun",enabled:a.isReady,checked:a.tunModeChecked,click:function(e){var t=e.checked;g.webContents.send("tun-changed",t)}},{label:"æ··åˆé…ç½®",type:"checkbox",id:"mixin",enabled:a.isReady,checked:a.mixinChecked,click:function(e){var t=e.checked;g.webContents.send("mixin-changed",t)}},{type:"separator"},{label:"ä»£ç†æ¨¡å¼",id:"mode",enabled:!1},{label:"å…¨å±€",type:"radio",id:"mode-global",enabled:a.isReady,checked:"global"===a.menuMode,click:function(){return g.webContents.send("mode-changed","global")}},{label:"è§„åˆ™",type:"radio",id:"mode-rule",enabled:a.isReady,checked:"rule"===a.menuMode,click:function(){return g.webContents.send("mode-changed","rule")}},{label:"ç›´è¿ž",type:"radio",id:"mode-direct",enabled:a.isReady,checked:"direct"===a.menuMode,click:function(){return g.webContents.send("mode-changed","direct")}},{label:"è„šæœ¬",type:"radio",id:"mode-script",enabled:a.isReady,checked:"script"===a.menuMode,click:function(){return g.webContents.send("mode-changed","script")}},{type:"separator"}].concat(t()(v),[{type:"separator"},{label:"è¿žæŽ¥",id:"connection",enabled:!1},{label:"å…³é—­å…¨éƒ¨",type:"normal",enabled:a.isReady,click:function(){P.delete("/connections")}},{type:"separator"},{label:"æ›´å¤š",submenu:[{label:"åˆ‡æ¢Devå·¥å…·",click:function(){g.webContents.toggleDevTools()}},{label:"å°†ä»ªè¡¨æ¿ç§»è‡³æœ€è¿‘çš„æ˜¾ç¤ºå™¨",click:function(){g.setBounds(B(g.getBounds())),L()}},{label:"é‡å¯",click:function(){h.app.relaunch(),h.app.exit(0)}},{label:"å¼ºåˆ¶é€€å‡º",click:function(){h.app.isQuiting=!0,h.app.quit()}}]},{type:"separator"},{label:"é€€å‡º",click:function(){return g.webContents.send("app-exit")}}]));case 18:case"end":return e.stop()}}),e,null,[[1,14]])}))),function(){return o.apply(this,arguments)}),S=function(){var e;if(!v){var t=h.nativeImage.createFromPath(M.join(__static,"imgs","logo_64_eyes.png")).resize({width:24,height:24});t.setTemplateImage(!0);var n=M.join(__static,"tray","win","tray_normal.ico"),r=M.join(__static,"imgs","logo_reverse_32.png"),o=(e={},c()(e,"win32",n),c()(e,"darwin",t),c()(e,"linux",r),e)[process.platform];(v=new h.Tray(o)).setToolTip("Clash for Windows"),v.on("right-click",(function(){m().then((function(e){v.popUpContextMenu(h.Menu.buildFromTemplate(e))}))})),v.on("click",(function(){"darwin"!==process.platform&&L()})),v.on("mouse-down",L)}};S(),h.ipcMain.handle("tray-create-destroy",(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"create";"create"===t&&S(),"destroy"===t&&v&&(v.destroy(),v=null)}));var O=h.Menu.buildFromTemplate([{label:"ä»ªè¡¨ç›˜",click:L},{type:"separator"},{label:"TUN æ¨¡å¼",type:"checkbox",id:"tun",enabled:!1,click:function(e){var t=e.checked;g.webContents.send("tun-changed",t)}},{label:"æ··åˆé…ç½®",type:"checkbox",id:"mixin",enabled:!1,click:function(e){var t=e.checked;g.webContents.send("mixin-changed",t)}},{type:"separator"},{label:"ä»£ç†æ¨¡å¼",id:"mode",enabled:!1},{label:"å…¨å±€",type:"radio",id:"mode-global",enabled:!1,click:function(){return g.webContents.send("mode-changed","global")}},{label:"è§„åˆ™",type:"radio",id:"mode-rule",enabled:a.isReady,checked:"rule"===a.menuMode,click:function(){return g.webContents.send("mode-changed","rule")}},{label:"ç›´è¿ž",type:"radio",id:"mode-direct",enabled:!1,click:function(){return g.webContents.send("mode-changed","direct")}},{label:"è„šæœ¬",type:"radio",id:"mode-script",enabled:!1,click:function(){return g.webContents.send("mode-changed","script")}},{type:"separator"},{label:"æ›´å¤š",submenu:[{label:"åˆ‡æ¢Devå·¥å…·",click:function(){g.webContents.toggleDevTools()}},{label:"å°†ä»ªè¡¨æ¿ç§»è‡³æœ€è¿‘çš„æ˜¾ç¤ºå™¨",click:function(){g.setBounds(B(g.getBounds())),L()}},{label:"é‡å¯",click:function(){h.app.relaunch(),h.app.exit(0)}},{label:"å¼ºåˆ¶é€€å‡º",click:function(){h.app.isQuiting=!0,h.app.quit()}}]},{type:"separator"},{label:"é€€å‡º",click:function(){return g.webContents.send("app-exit")}}]);function D(){j()&&v&&v.setContextMenu(O)}D(),h.ipcMain.on("clash-core-status-change",(function(e,t){if(a.isReady=!0,j()){var n=O.getMenuItemById("system-proxy");n&&(n.enabled=1!==t);var r=O.getMenuItemById("mixin");r&&(r.enabled=1!==t);var o=O.getMenuItemById("tun");o&&(o.enabled=1!==t),["global","rule","direct","script"].forEach((function(e){var n=O.getMenuItemById("mode-".concat(e));n&&(n.enabled=1!==t)})),D()}})),h.ipcMain.handle("tray-proxies-style",(function(e,t){a.menuStyle=t})),h.ipcMain.handle("tray-proxies-icon",(function(e,t){a.isShowDelayIcon=t})),h.ipcMain.on("mode-changed",(function(e,t){if(a.menuMode=t,j()){var n="mode-".concat(t),r=O.getMenuItemById(n);r&&(r.checked=!0),D()}})),h.ipcMain.on("system-proxy-changed",(function(e,t){a.systemProxyChecked=t})),h.ipcMain.on("mixin-changed",(function(e,t){if(a.mixinChecked=t,j()){var n=O.getMenuItemById("mixin");n&&(n.checked=t),D()}})),h.ipcMain.on("tun-changed",(function(e,t){if(a.tunModeChecked=t,j()){var n=O.getMenuItemById("tun");n&&(n.checked=t),D()}})),h.ipcMain.on("enhanced-tray-click",L),h.ipcMain.on("speed-update",(function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"#fff";try{if(v){var o=h.nativeImage.createFromDataURL(t);if("win32"===process.platform){if(60===n)return void(y&&(y.destroy(),y=null,w=0));var i=o.crop({x:0,y:0,width:n+8,height:69}),a=M.join(h.app.getPath("temp"),"cfw-sub.html"),c=i.getSize(),s=c.width,l=c.height;_.writeFileSync(a,'\n          <body style="position:relative;background-color:'.concat(r,';overflow:hidden;-webkit-app-region:drag;margin:0;width:100%;height:100%;box-sizing:border-box;">\n            <img id="img" style="height:100%;width:100%;" src="').concat(i.toDataURL(),'" />\n            <div style="position:absolute;width:50%;height:100%;top:0;left:50%;-webkit-app-region:no-drag;" onclick="handleClick()"></div>\n          </body>\n          <script>\n            const { ipcRenderer } = require(\'electron\');\n            ipcRenderer.on(\'speed-update-win\', (e, url, bgc) => {\n              document.getElementById("img").src = url;\n              document.body.style.backgroundColor = bgc;\n            })\n            const handleClick = () => {\n              ipcRenderer.send(\'enhanced-tray-click\');\n            }\n          <\/script>\n          ')),y||(y=new h.BrowserWindow({show:!0,alwaysOnTop:!0,closable:!1,focusable:!1,frame:!1,useContentSize:!0,maximizable:!1,transparent:!0,minimizable:!1,resizable:!1,webPreferences:{nodeIntegration:!0,contextIsolation:!1}})).loadFile(a),y.show(),y.webContents.send("speed-update-win",i.toDataURL(),r),w!==n&&y.setBounds({height:Math.ceil(l/2.8),width:Math.ceil(s/2.8)}),w=n}if("darwin"===process.platform){var u=(""===t?h.nativeImage.createFromPath(M.join(__static,"imgs","logo_64_eyes.png")):o.crop({x:0,y:0,width:n,height:69})).resize({height:23});u.setTemplateImage(!0),v.setImage(u)}}}catch(e){}}));var E,z,F=[{label:h.app.name,submenu:[{role:"about"},{type:"separator"},{role:"services"},{type:"separator"},{role:"hide"},{role:"hideothers"},{role:"unhide"},{label:"Close",accelerator:"Command+W",click:function(){}},{type:"separator"},{label:"é€€å‡º Clash for Windows",accelerator:"Command+Q",click:function(){g.webContents.send("app-exit")}}]},{role:"editMenu"},{label:"View",submenu:[{role:"reload"},{role:"forceReload"},{role:"toggleDevTools"},{type:"separator"},{role:"resetZoom"},{role:"zoomIn",accelerator:"CmdOrCtrl+="},{role:"zoomOut"},{type:"separator"},{role:"togglefullscreen"}]},{role:"windowMenu"},{role:"help",submenu:[{label:"Github",click:(z=l()(p().mark((function e(){var t,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=n(298),r=t.shell,e.next=3,r.openExternal("https://github.com/Fndroid/clash_for_windows_pkg");case 3:case"end":return e.stop()}}),e)}))),function(){return z.apply(this,arguments)})},{label:"Document",click:(E=l()(p().mark((function e(){var t,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=n(298),r=t.shell,e.next=3,r.openExternal("https://docs.cfw.lbyczf.com/");case 3:case"end":return e.stop()}}),e)}))),function(){return E.apply(this,arguments)})}]}];h.Menu.setApplicationMenu(h.Menu.buildFromTemplate(F)),h.ipcMain.handle("wlan-status-wanted",R)}function R(){if(g)try{n(354).addEventListener("wlan-status-changed",(function(e,t){e?g.webContents.send("wlan-status-listen-error",JSON.stringify(e)):g.webContents.send("wlan-status-changed",t)}))}catch(e){g.webContents.send("wlan-status-listen-error",e.message)}}function A(){h.app.relaunch(),h.app.exit(0)}var E,z=h.app.requestSingleInstanceLock();function B(e){var t=e.x,n=e.y,r=h.screen.getAllDisplays().find((function(e){var r=e.bounds;if(r){var o=r.x,i=r.y,a=r.width,c=r.height;return S.inRange(t,o,o+a)&&S.inRange(n,i,i+c)}}));if(!r){var o=h.screen.getDisplayNearestPoint({x:t,y:n}).bounds;if(o)return{x:o.x,y:o.y}}return{x:t,y:n}}h.app.setAppUserModelId("com.lbyczf.clashwin"),h.app.setAsDefaultProtocolClient("clash"),h.app.setName("Clash for Windows"),h.app.setAboutPanelOptions({version:""}),h.app.on("open-url",(function(e,t){g.webContents.send("app-open",[t])})),z?(h.app.on("second-instance",(function(e,t,n){g&&(g.webContents.send("app-open",t),g.isMinimized()&&g.restore(),L())})),h.app.on("ready",(function(){n(113).init(),h.powerMonitor.on("shutdown",(function(e){e.preventDefault(),g.webContents.send("app-exit"),setTimeout((function(){h.app.isQuiting=!0,h.app.quit()}),5e3)})),D()}))):h.app.quit(),h.app.on("activate",(function(){null===g?D():L()})),h.app.on("certificate-error",(E=l()(p().mark((function e(t,n,r,o,i,a){var c,s;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:c=fales;try{s=new URL(r),c="raw.githubusercontent.com"===s.host&&"/Fndroid/ads/master/ads_v2.json"===s.path}catch(e){}if(!c&&!I.includes(r)){e.next=7;break}t.preventDefault(),a(!0),e.next=13;break;case 7:return e.next=9,h.dialog.showMessageBox({type:"warning",buttons:["Trust","Cancel"],title:"Certificate Error",message:"Failed verify the certificate for ".concat(r,". This may be because the certificate is self-signed or the certificate authority is not recognized. Do you want to trust this certificate?")});case 9:0===e.sent.response&&h.dialog.showCertificateTrustDialog(g,{certificate:i,message:"If you keep seeing this error, you need to go to Keychain APP to trust the certificate."}).catch((function(e){console.error(e)})),a(!1);case 13:case"end":return e.stop()}}),e)}))),function(e,t,n,r,o,i){return E.apply(this,arguments)}))})(),module.exports=r})();/*! For license information please see renderer.js.LICENSE.txt */
(()=>{var e,t,i={67228:e=>{e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n},e.exports.default=e.exports,e.exports.__esModule=!0},22858:e=>{e.exports=function(e){if(Array.isArray(e))return e},e.exports.default=e.exports,e.exports.__esModule=!0},23646:(e,t,i)=>{var n=i(67228);e.exports=function(e){if(Array.isArray(e))return n(e)},e.exports.default=e.exports,e.exports.__esModule=!0},48926:e=>{function t(e,t,i,n,o,s,r){try{var a=e[s](r),l=a.value}catch(e){return void i(e)}a.done?t(l):Promise.resolve(l).then(n,o)}e.exports=function(e){return function(){var i=this,n=arguments;return new Promise((function(o,s){var r=e.apply(i,n);function a(e){t(r,o,s,a,l,"next",e)}function l(e){t(r,o,s,a,l,"throw",e)}a(void 0)}))}},e.exports.default=e.exports,e.exports.__esModule=!0},59713:e=>{e.exports=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},e.exports.default=e.exports,e.exports.__esModule=!0},46860:e=>{e.exports=function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)},e.exports.default=e.exports,e.exports.__esModule=!0},13884:e=>{e.exports=function(e,t){var i=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=i){var n,o,s=[],r=!0,a=!1;try{for(i=i.call(e);!(r=(n=i.next()).done)&&(s.push(n.value),!t||s.length!==t);r=!0);}catch(e){a=!0,o=e}finally{try{r||null==i.return||i.return()}finally{if(a)throw o}}return s}},e.exports.default=e.exports,e.exports.__esModule=!0},80521:e=>{e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},98206:e=>{e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},6479:(e,t,i)=>{var n=i(37316);e.exports=function(e,t){if(null==e)return{};var i,o,s=n(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)i=r[o],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s},e.exports.default=e.exports,e.exports.__esModule=!0},37316:e=>{e.exports=function(e,t){if(null==e)return{};var i,n,o={},s=Object.keys(e);for(n=0;n<s.length;n++)i=s[n],t.indexOf(i)>=0||(o[i]=e[i]);return o},e.exports.default=e.exports,e.exports.__esModule=!0},63038:(e,t,i)=>{var n=i(22858),o=i(13884),s=i(60379),r=i(80521);e.exports=function(e,t){return n(e)||o(e,t)||s(e,t)||r()},e.exports.default=e.exports,e.exports.__esModule=!0},319:(e,t,i)=>{var n=i(23646),o=i(46860),s=i(60379),r=i(98206);e.exports=function(e){return n(e)||o(e)||s(e)||r()},e.exports.default=e.exports,e.exports.__esModule=!0},50008:e=>{function t(i){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=t=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),t(i)}e.exports=t,e.exports.default=e.exports,e.exports.__esModule=!0},60379:(e,t,i)=>{var n=i(67228);e.exports=function(e,t){if(e){if("string"==typeof e)return n(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?n(e,t):void 0}},e.exports.default=e.exports,e.exports.__esModule=!0},87757:(e,t,i)=>{e.exports=i(35666)},24883:(e,t,i)=>{"use strict";i.d(t,{Z:()=>n});const n={put:function(e,t){window.localStorage.setItem(e,JSON.stringify(t))},get:function(e){var t=window.localStorage.getItem(e);if(""!==t)try{return JSON.parse(t)}catch(t){console.error("get [".concat(e,"] from cache failed with error:"),t)}}}},51792:(e,t,i)=>{"use strict";i.d(t,{F:()=>C,b:()=>x});var n,o,s=i(319),r=i.n(s),a=i(63038),l=i.n(a),c=i(48926),d=i.n(c),h=i(87757),u=i.n(h),g=i(58583),p=i(54387),f=i.n(p),m=i(8369),v=i(57147),_=i(71017),b=i(59273),w=(i(72298),i(24793)),y={},C=function(e,t){y[e]=t},x=function(e){return y[e]||0},S=function(e){return e.map((function(e){return{label:e,kind:g.languages.CompletionItemKind.Keyword,insertText:e,insertTextRules:g.languages.CompletionItemInsertTextRule.InsertAsSnippet}}))},k=(n=d()(u().mark((function e(t,i,n){var o,s,a,c,h,p,m,v,_,b;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=1,o=t.split(/\r?\n/).reduce((function(e,t){var i=t.match(/name:\s"?(.+?)"?$/)||[],n=l()(i,2),o=(n[0],n[1]);return o&&e.push(o),e}),["DIRECT","REJECT","GLOBAL"]),s=function(){var e=d()(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,f().get("https://raw.githubusercontent.com/Fndroid/clash-vscode/master/snippets/".concat(t,".code-snippets"),{validateStatus:function(e){return!0}});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),a={},e.next=7,s(n);case 7:if(c=e.sent,h=c.status,p=c.data,200===h){e.next=19;break}return e.next=13,s("top");case 13:m=e.sent,v=m.status,_=m.data,200===v&&(a=_),e.next=20;break;case 19:a=p;case 20:b=Object.entries(a).map((function(e){var t=l()(e,2),s=(t[0],t[1]),r=s.prefix,a=s.body,c="string"==typeof a?a:null==a?void 0:a.join("\n");return{label:r,kind:g.languages.CompletionItemKind.Snippet,insertText:"rules"===n&&o.length>0?c.replace(/\:policy/g,"|".concat(o.join(",").replace(/\|/g,"\\\\"),"|")):c,insertTextRules:g.languages.CompletionItemInsertTextRule.InsertAsSnippet,range:i}})),e.t0=n,e.next="rules"===e.t0?24:"proxy-groups"===e.t0?25:26;break;case 24:case 25:return e.abrupt("return",[].concat(r()(b),r()(S(o))));case 26:return e.abrupt("return",b);case 27:return e.abrupt("return",[].concat(r()(b),r()(["proxy-groups","rules"].includes(n)?groupNameItems:[])));case 30:return e.prev=30,e.t1=e.catch(1),e.abrupt("return",[]);case 33:case"end":return e.stop()}}),e,null,[[1,30]])}))),function(e,t,i){return n.apply(this,arguments)});g.languages.registerCompletionItemProvider("yaml",{provideCompletionItems:(o=d()(u().mark((function e(t,i){var n,o,s,a,l;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:i.lineNumber,endColumn:i.column}),o=t.getWordUntilPosition(i),s={startLineNumber:i.lineNumber,endLineNumber:i.lineNumber,startColumn:o.startColumn,endColumn:o.endColumn},1!==o.startColumn){e.next=8;break}return e.next=6,k(t.getValue(),s,"top");case 6:return e.t0=e.sent,e.abrupt("return",{suggestions:e.t0});case 8:if(!((a=r()("\n".concat(n).matchAll(/\n(\S+?)\s*:/g))).length>0)){e.next=15;break}return l=a[a.length-1][1],e.next=13,k(t.getValue(),s,l);case 13:return e.t1=e.sent,e.abrupt("return",{suggestions:e.t1});case 15:return e.next=17,k(t.getValue(),s,"top");case 17:return e.t2=e.sent,e.abrupt("return",{suggestions:e.t2});case 19:case"end":return e.stop()}}),e)}))),function(e,t){return o.apply(this,arguments)})});var L,N,D,I=function(e,t){var i=b.Z.state.app.clashPath;return(0,_.join)(i,"providers",e,t+".yaml")};g.languages.registerCodeLensProvider("yaml",{provideCodeLenses:(L=d()(u().mark((function e(t){var i,n,o,s,r,a,l,c,d;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=[],n=1;case 2:if(!(n<=t.getLineCount())){e.next=17;break}if(o=t.getLineContent(n),s={startLineNumber:n,endLineNumber:n,startColumn:1,endColumn:1},!/url:\s(.+?)$/.test(o)){e.next=14;break}return r=w.trim(RegExp.$1,"\" '"),e.next=9,(0,m.Ll)(r);case 9:a=e.sent,l=I("proxy",a),c=I("rule",a),(d=(0,v.existsSync)(l)?l:(0,v.existsSync)(c)?c:"")?i.push({range:s,id:n,command:{id:"openFile",title:"æ˜¾ç¤ºå®žé™…æ–‡ä»¶",arguments:[d]}}):i.push({range:s,id:n,command:{id:"copyURLMD5",title:"å¤åˆ¶ URL MD5",arguments:[a]}});case 14:n++,e.next=2;break;case 17:return e.abrupt("return",{lenses:i,dispose:function(){}});case 18:case"end":return e.stop()}}),e)}))),function(e){return L.apply(this,arguments)})}),g.editor.registerCommand("openFile",(N=d()(u().mark((function e(t,n){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i(72298).shell.showItemInFolder(n);case 1:case"end":return e.stop()}}),e)}))),function(e,t){return N.apply(this,arguments)})),g.editor.registerCommand("copyURLMD5",(D=d()(u().mark((function e(t,n){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i(72298).clipboard.writeText("".concat(n,".yaml")),(0,m.vC)({title:"MD5 Copied",message:"MD5: ".concat(n)});case 2:case"end":return e.stop()}}),e)}))),function(e,t){return D.apply(this,arguments)}))},27458:(e,t,i)=>{"use strict";i.d(t,{A7:()=>w,Kz:()=>b,Qz:()=>_});var n,o,s,r,a=i(48926),l=i.n(a),c=i(87757),d=i.n(c),h=i(72378),u=i(32081),g=(i(72298),i(57147)),p=(i(71017),i(83566)),f=i(59273),m=(n=l()(d().mark((function e(){var t,i,n=arguments;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=n.length>0&&void 0!==n[0]&&n[0],i=n.length>1?n[1]:void 0,e.abrupt("return",new Promise((function(e,n){var o=i.replace(/"/g,'\\"').replace(/\n/g," "),s='powershell.exe -ExecutionPolicy Bypass -Command "'.concat(o,'"'),r=function(t,i,o){t&&n(t),e({stderr:o.toString(),stdout:i.toString()})};t?(0,h.exec)(s,{},r):(0,u.exec)(s,r)})));case 3:case"end":return e.stop()}}),e)}))),function(){return n.apply(this,arguments)}),v="Work with Clash for Windows.",_=(o=l()(d().mark((function e(){var t,i,n,o,s,r;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((0,p.Kr)()){e.next=2;break}return e.abrupt("return");case 2:return t='Get-NetFirewallRule -Description "'.concat(v,'" | ? {$_.Enabled -eq "True"} | Get-NetFirewallApplicationFilter'),e.prev=3,e.next=6,m(!1,t);case 6:return i=e.sent,n=i.stderr,o=i.stdout,s=f.Z.getters.clashBinaryPath,r=(0,g.realpathSync)(s),e.abrupt("return",""===n&&(o.includes(s)||o.includes(r)));case 14:e.prev=14,e.t0=e.catch(3),console.error("get firewall rule status failed with error:",e.t0);case 17:return e.abrupt("return",!1);case 18:case"end":return e.stop()}}),e,null,[[3,14]])}))),function(){return o.apply(this,arguments)}),b=(s=l()(d().mark((function e(){var t;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((0,p.Kr)()){e.next=2;break}return e.abrupt("return");case 2:return t='\nRemove-NetFirewallRule -Description "'.concat(v,'" -ErrorAction SilentlyContinue \n; \'TCP\', \'UDP\' | ForEach-Object {\n    New-NetFirewallRule\n        -DisplayName "Clash å†…æ ¸"\n        -Profile "Private, Public"\n        -Description "').concat(v,'"\n        -Direction Inbound\n        -Protocol $_\n        -Action Allow\n        -Program "').concat((0,g.realpathSync)(f.Z.getters.clashBinaryPath),'"\n        | Out-Null\n}'),e.prev=3,e.next=6,m(!0,t);case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error("add firewall rule failed with error:",e.t0);case 11:case"end":return e.stop()}}),e,null,[[3,8]])}))),function(){return s.apply(this,arguments)}),w=(r=l()(d().mark((function e(){var t;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if((0,p.Kr)()){e.next=2;break}return e.abrupt("return");case 2:return t='Remove-NetFirewallRule -Description "'.concat(v,'" -ErrorAction SilentlyContinue'),e.prev=3,e.next=6,m(!0,t);case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error("remove firewall rule failed with error:",e.t0);case 11:case"end":return e.stop()}}),e,null,[[3,8]])}))),function(){return r.apply(this,arguments)})},8369:(e,t,i)=>{"use strict";i.d(t,{uR:()=>P,uQ:()=>U,wi:()=>q,Ll:()=>O,EP:()=>W,fl:()=>V,Mf:()=>K,Sr:()=>$,e8:()=>Z,XW:()=>z,vC:()=>B,c0:()=>F,nM:()=>H,F0:()=>R,Dc:()=>A});var n=i(50008),o=i.n(n),s=i(319),r=i.n(s),a=i(59713),l=i.n(a),c=i(48926),d=i.n(c),h=i(87757),u=i.n(h);const g=require("crypto");var p=i(57147),f=i(71017);require("http");var m=i(11442),v=i.n(m),_=i(59273),b=i(72298),w=(i(10605),i(24883)),y=i(81518),C=i(83566);const x=require("bignumber.js");var S=i.n(x);function k(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function L(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?k(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):k(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var N,D,I,E,T,M,A=function(e){return new Promise((function(t){return setTimeout(t,e)}))},O=function(e){return(0,g.createHash)("md5").update(e).digest("hex")},P=function e(t){p.existsSync(t)&&(p.readdirSync(t).forEach((function(i,n){var o=f.join(t,i);p.lstatSync(o).isDirectory()?e(o):p.unlinkSync(o)})),p.rmdirSync(t))},R=(N=d()(u().mark((function e(t,i,n){var o,s;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:o=p.readFileSync(t).toString(),(s=v().parseDocument(o)).set(i,n),p.writeFileSync(t,s.toString());case 4:case"end":return e.stop()}}),e)}))),function(e,t,i){return N.apply(this,arguments)}),F=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=_.Z.state.app.settings.showNotifications;void 0!==o&&o&&(new Notification(e,L({body:t,silent:!0},i)).onclick=function(){!0!==(null==i?void 0:i.hideWindowOnClick)&&b.ipcRenderer.invoke("window-control","show"),n()})},B=(D=d()(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,b.ipcRenderer.invoke("dialog","showMessageBox",L({title:"Clash for Windows"},t));case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)}))),function(e){return D.apply(this,arguments)}),V=(I=d()(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,B({type:"question",buttons:["æ˜¯","å¦"],message:"æ‚¨ç¡®å®šè¦æ‰“å¼€æ­¤ URL?",detail:t});case 2:0===e.sent.response&&b.shell.openExternal(t);case 5:case"end":return e.stop()}}),e)}))),function(e){return I.apply(this,arguments)}),W=function(e){return JSON.parse(JSON.stringify(e))},H=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=["B","KB","MB","GB","TB","PB","EB"],o=0;S()(e).dividedBy(1024).isGreaterThan(1)&&o<n.length;)e=S()(e).dividedBy(1024),o++;return"".concat(e.toFixed(t)).concat(i?" ":"").concat(n[o])},z=(E=d()(u().mark((function e(t){var i,n,o,s,a,l,c;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=t.method,n=t.target,o=t.checkTimes,s=void 0===o?10:o,a=t.ags,l=void 0===a?[]:a,c=0;case 2:return e.next=5,i.apply(void 0,r()(l));case 5:if(e.t0=e.sent,e.t1=n,e.t0!==e.t1){e.next=9;break}return e.abrupt("return");case 9:return e.next=11,A(1e3);case 11:if(!((c+=1)>=s)){e.next=14;break}return e.abrupt("return");case 14:e.next=2;break;case 16:case"end":return e.stop()}}),e)}))),function(e,t){if(e.length<=t)return e;var i=parseInt(t/2),n=t-i;return e.slice(0,i)+"..."+e.slice(-n)}),j=null,U=(T=d()(u().mark((function e(){var t;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,b.ipcRenderer.invoke("app","getVersion");case 2:return t=e.sent,null===j&&(j=w.Z.get(y.Z.LAST_VERSION_CODE)||"",w.Z.put(y.Z.LAST_VERSION_CODE,t)),e.abrupt("return",j!==t);case 5:case"end":return e.stop()}}),e)}))),function(){return T.apply(this,arguments)}),$=function(e){var t=e||{},i=t.ipv6,n=void 0!==i&&i,o=t.nameServers,s=void 0===o?["114.114.114.114","223.5.5.5","8.8.8.8"]:o,a=t.fallbackServers,l=void 0===a?[]:a,c=t.defaultNameservers,d=void 0===c?[]:c,h=t.fakeIPFilters,u=t.nameserverPolicy,g=void 0===u?{}:u,p=t.stackType,f=void 0===p?0:p,m=t.interfaceName,v=void 0===m?"":m,_=t.isAutoDetectInterface,b=void 0===_||_,w=t.dnsHijacks,y=void 0===w?[]:w,x=t.isAutoRedir,S=t.isAutoRedirAutoRoute,k={dns:{enable:!0,ipv6:n,"enhanced-mode":"fake-ip","default-nameserver":d,nameserver:s,fallback:l,"nameserver-policy":g},tun:{enable:!0,stack:["gvisor","system"][f],"auto-route":!0}};return k.dns["fake-ip-filter"]=void 0===h?["+.stun.*.*","+.stun.*.*.*","+.stun.*.*.*.*","+.stun.*.*.*.*.*","*.n.n.srv.nintendo.net","+.stun.playstation.net","xbox.*.*.microsoft.com","*.*.xboxlive.com"].concat(r()((0,C.Kr)()?["*.msftncsi.com","*.msftconnecttest.com","WORKGROUP"]:(0,C.V5)()?["apps.apple.com"]:[])):h,b?k.tun["auto-detect-interface"]=!0:k["interface-name"]=v,k.tun["dns-hijack"]=y,(0,C.IJ)()&&(k["auto-redir"]={enable:x,"auto-route":S}),0===d.length&&delete k.dns["default-nameserver"],k},K=function e(t){return Object.values(t).map((function(t){return"object"===o()(t)?e(t):t})).join("\n")},q=function(e){return e>0&&e<65536},Z=(M=d()(u().mark((function e(t,i){var n,o,s;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=null===_.Z||void 0===_.Z||null===(n=_.Z.getters)||void 0===n?void 0:n.clashAxiosClient){e.next=3;break}throw new Error("Clash Core is not ready");case 3:return e.next=5,s.get("/dns/query",{params:{name:t,type:i}});case 5:if(e.t1=o=e.sent,e.t0=null===e.t1,e.t0){e.next=9;break}e.t0=void 0===o;case 9:if(!e.t0){e.next=13;break}e.t2=void 0,e.next=14;break;case 13:e.t2=o.data;case 14:return e.abrupt("return",e.t2);case 15:case"end":return e.stop()}}),e)}))),function(e,t){return M.apply(this,arguments)})},97520:(e,t,i)=>{"use strict";i.d(t,{Z:()=>u,r:()=>h});var n=i(50008),o=i.n(n),s=i(32081),r=i(22037),a=i(41808),l=i(83566);function c(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);"Object"===i&&e.constructor&&(i=e.constructor.name);if("Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return d(e,t)}(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,r=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return r=e.done,e},e:function(e){a=!0,s=e},f:function(){try{r||null==i.return||i.return()}finally{if(a)throw s}}}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}var h=function(){var e=[],t=(0,r.networkInterfaces)();return Object.keys(t).forEach((function(i){t[i].forEach((function(t){!0!==t.internal&&"IPv6"!==t.family&&e.push({name:i,address:t.address})}))})),e};const u=function(){if((0,l.V5)()){var e=(0,s.execSync)("netstat -nr | grep default ").toString().split("\n").map((function(e){return e.split(/\s+/).filter((function(e){return e}))})).filter((function(e){return 4===e.length&&(0,a.isIPv4)(e[1])})),t=(0,r.networkInterfaces)();if(e.length>0){var i,n=c(e);try{for(n.s();!(i=n.n()).done;){var d=i.value[3];if(Object.keys(t).includes(d))return d}}catch(e){n.e(e)}finally{n.f()}}if(Object.keys(t).includes("en0"))return"en0"}else if((0,l.Kr)()){var h=(0,s.execSync)("route print 0.0.0.0 mask 0.0.0.0",{windowsHide:!0}).toString().split("\n").map((function(e){return e.split(/\s+/).filter((function(e){return e}))})).filter((function(e){return 5===e.length&&e.slice(0,4).every((function(e){return(0,a.isIP)(e)}))&&NaN!==parseInt(e[4])})),u=(0,r.networkInterfaces)();if(delete u["cfw-tap"],h.length>0){var g,p=c(h.sort((function(e,t){return parseInt(e[4])-parseInt(t[4])})));try{var f=function(){for(var e=g.value[3],t=0,i=Object.keys(u);t<i.length;t++){var n=i[t];if(u[n].find((function(t){return t.address===e})))return{v:n}}};for(p.s();!(g=p.n()).done;){var m=f();if("object"===o()(m))return m.v}}catch(e){p.e(e)}finally{p.f()}}if(Object.keys(u).includes("ä»¥å¤ªç½‘"))return"ä»¥å¤ªç½‘";if(Object.keys(u).includes("WLAN"))return"WLAN"}return null}},71289:(e,t,i)=>{"use strict";i.d(t,{ZP:()=>c});var n=i(24793),o=i(59273),s=[],r=function(e){var t=s.find((function(t){return t.id===e}));t&&-1!==t.intervalId&&(clearInterval(t.intervalId),s=s.filter((function(t){return t.id!==e})))},a=function(e){var t=s.find((function(t){return t.id===e}));t&&(clearInterval(t.intervalId),t.intervalId=-1)},l=function(e){var t=s.find((function(t){return t.id===e}));t&&-1===t.intervalId&&(t.intervalId=setInterval(t.callback,t.interval))};const c={add:function(e,t){var i=(0,n.uniqueId)(),r=o.Z.state.app.isWindowShow?setInterval(e,t):-1;return s.push({id:i,intervalId:r,callback:e,interval:t}),i},stop:r,stopAll:function(){s.forEach((function(e){return r(e.id)}))},pause:a,pauseAll:function(){s.forEach((function(e){return a(e.id)}))},resume:l,resumeAll:function(){s.forEach((function(e){return l(e.id)}))},getAll:function(){return s}}},419:(e,t,i)=>{"use strict";i.d(t,{rF:()=>G});var n=i(48926),o=i.n(n),s=i(63038),r=i.n(s),a=i(59713),l=i.n(a),c=i(87757),d=i.n(c),h=i(59273),u=i(54387),g=i.n(u),p=i(57147),f=i.n(p),m=i(71017),v=i.n(m),_=i(96206),b=i(11442),w=i.n(b),y=i(24793),C=i.n(y),x=i(319),S=i.n(x),k=i(50008),L=i.n(k),N=i(24793),D=Symbol(),I=Symbol(),E=Symbol(),T=function(e,t){var i=function(e){var t=[],i=D,n="",o=!1,s="";e:for(var r=0;r<e.length;r++){var a=e[r];if("-"===a&&r===e.length-1){i=E,t.push(s);break e}if("("!==a)if(")"!==a)if(o)s+=a;else switch(a){case".":t.push(s),s="";break;case"+":i=I;case"=":t.push(s),n=e.slice(r+1);break e;default:s+=a}else o=!1;else o=!0}return{path:t,opertation:i,value:n}}(t);!function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:D,o=e.proxies,s=void 0===o?[]:o,r=e["proxy-groups"],a=void 0===r?[]:r,l=t.slice(0,-1),c=t[t.length-1],d=i;try{d=JSON.parse(i)}catch(e){}var h=N.reduce(l,(function(e,i,n){var o=e[i];if(void 0!==o)return o;if(Array.isArray(e)){var s=e.find((function(e){return e.name===i}));if(s)return s}if(t.length>n+1){var r=t[n+1];parseInt(r)>=0?e[i]=[]:e[i]={}}else e[i]={};return e[i]}),e),u=Array.isArray(h),g=function(e){if(/^\[\](shuffledProxyNames|proxyNames|groupNames)\|?(.+)?$/.test(e)){var t=RegExp.$1,i=RegExp.$2||"",n=[];return"proxyNames"===t&&(n=s),"groupNames"===t&&(n=a),"shuffledProxyNames"===t&&(n=N.shuffle(s)),n.map((function(e){return e.name})).filter((function(e){return new RegExp(i).test(e)}))}return null}(d);switch(n){case D:if(g)h[c]=g;else{var p=L()(h[c]);h[c]="number"===p?1*d:"boolean"===p?"boolean"==typeof d?d:"true"===d:d}break;case I:u?h.splice.apply(h,[c,0].concat(S()(g||[d]))):h[c]=g||d;break;case E:u?parseInt(c)>-1?h.splice(c,1):h.splice(h.findIndex((function(e){return e.name===c})),1):delete h[c]}}(e,i.path,i.value,i.opertation)},M=i(8369);const A=require("node-diff3"),O=require("content-disposition");var P=i(71893),R=i.n(P);const F=require("hpagent");function B(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(!e)return;if("string"==typeof e)return V(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);"Object"===i&&e.constructor&&(i=e.constructor.name);if("Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return V(e,t)}(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,r=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return r=e.done,e},e:function(e){a=!0,s=e},f:function(){try{r||null==i.return||i.return()}finally{if(a)throw s}}}}function V(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}function W(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function H(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?W(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):W(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var z,j,U=i(75110),$=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=h.Z.state.app.settings.headersText,o={};if(n)try{var s=w().parse(n).headers;o=void 0===s?{}:s}catch(e){}return(0,u.get)(e,H(H({validateStatus:function(){return!0}},t),{},{headers:H(H({pragma:"no-cache"},i),o),responseType:"text",transformResponse:[function(e){return e}]}))},K=function(e){var t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=h.Z.state.app.settings.headersText,s={};if(o)try{var r=w().parse(o).headers;s=void 0===r?{}:r}catch(e){}var a=h.Z.state.app.confData,l=a["mixed-port"],c=a.authentication,d=void 0===c?[]:c,u=R()(e,{agent:new F.HttpsProxyAgent({proxy:"http://".concat(d.length>0?d[0]+"@":"","127.0.0.1:").concat(l)}),headers:H(H({pragma:"no-cache"},n),s)});return null===(t=i.cancelToken)||void 0===t||t.promise.then((function(e){u.cancel(e)})),u},q=function(e){var t={};return/upload=(.+?)(;|$)/.test(e)&&(t.upload=parseInt(RegExp.$1.trim())),/download=(.+?)(;|$)/.test(e)&&(t.download=parseInt(RegExp.$1.trim())),/total=(.+?)(;|$)/.test(e)&&(t.total=parseInt(RegExp.$1.trim())),/expire=(.+?)(;|$)/.test(e)&&(t.expire=parseInt(RegExp.$1.trim())),t},Z=function(e){try{return e.split("\n").reduce((function(e,t){var i=t.split(":"),n=r()(i,2),o=n[0],s=n[1];return e[o.trim()]=s.trim(),e}),{})}catch(e){return{}}},G=(z=o()(d().mark((function e(t){var i,n,o,s,r,a,l,c,u,g,p,m,_,b,w,y,C,x,S,k,L,N,D,I,E,T,M,P,R,F,B,V,W,z,j,U,G,Q,X,J,ee,te,ie,ne,oe,se,re,ae,le,ce;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=t.url,n=t.cancelToken,o=void 0===n?null:n,s=t.headersString,r=void 0===s?"":s,e.prev=1,a=h.Z.state.app.settings.updateProfileThroughClashProxy,l=void 0,c=void 0,u={},void 0===a||!a){e.next=18;break}return e.next=9,K(i,{cancelToken:o},Z(r));case 9:g=e.sent,p=g.body,m=g.statusCode,_=g.headers,l=p,c=m,u=_,e.next=27;break;case 18:return e.next=20,$(i,{cancelToken:o},Z(r));case 20:b=e.sent,w=b.data,y=b.status,C=b.headers,l=w,c=y,u=C;case 27:x="config.yaml",S=(new Date).getTime()+".yml";try{x=v().basename(i)}catch(e){console.error(e.stack)}/([^\/]*?)(?:$|\?)/.test(i)&&(x=decodeURIComponent(RegExp.$1.trim())),L=(k=u)["profile-update-interval"],N=void 0===L?0:L,D=k["profile-web-page-url"],I=void 0===D?"":D,E=k["content-disposition"],T=k["subscription-userinfo"],M=void 0===T?"":T;try{(F=null===(P=(0,O.parse)(E))||void 0===P||null===(R=P.parameters)||void 0===R?void 0:R.filename)&&(x=F)}catch(e){}if(B=parseInt(N)||0,V=h.Z.state.app.profilesPath,W=v().join(V,S),z=-1,200!==c){e.next=63;break}return e.next=40,Y(i,l,!0);case 40:if(j=e.sent,U=h.Z.state.app.profiles.files,(Q=(G=void 0===U?[]:U).findIndex((function(e){return e.url===i})))>-1?(X=G[Q],J=H({},X),ee=J.time,W=v().join(V,ee),h.Z.commit("CHANGE_PROFILE",{index:Q,profile:H(H({},X),{},{subInfo:q(M||j),homeWeb:I})}),z=Q):(te={time:S,name:x,url:i,selected:[],interval:B,subInfo:q(M||j),homeWeb:I},h.Z.commit("APPEND_PROFILE",{profile:te}),z=G.length),ne=W.slice(0,-4)+".base.yml",oe=W.slice(0,-4)+".change.yml",!f().existsSync(ne)||!f().existsSync(oe)){e.next=59;break}if(se=f().readFileSync(ne).toString(),re=f().readFileSync(oe).toString(),!/<{7}[\S\s]+?={7}[\S\s]+?>{7}/.test(re)){e.next=51;break}return e.abrupt("return",{success:!1,message:'æ›´æ”¹åŒ…å«å†²çª, "ä¿®æ”¹(diff)æ–‡ä»¶" ä»¥è§£å†³é—®é¢˜'});case 51:if(ae=(0,A.merge)(re,se,j,{stringSeparator:/\n|\r\n/}),le=ae.conflict,ce=ae.result,f().writeFileSync(ne,j),f().writeFileSync(oe,ce.join("\n")),!le){e.next=58;break}return e.abrupt("return",{success:!1,message:'æ— æ³•åˆå¹¶é…ç½®æ–‡ä»¶, "ä¿®æ”¹æ–‡ä»¶" ä»¥è§£å†³é—®é¢˜.'});case 58:ie=ce.join("\n");case 59:return f().writeFileSync(W,ie||j),e.abrupt("return",{success:!0,targetIndex:z});case 63:return e.abrupt("return",{success:!1,message:"ä¸‹è½½èµ„æ–™(".concat(i,") å¤±è´¥ï¼Œé”™è¯¯ï¼šHTTP å“åº”çŠ¶æ€ä»£ç (").concat(c,")")});case 64:e.next=72;break;case 66:if(e.prev=66,e.t0=e.catch(1),console.error(e.t0),!e.t0.message){e.next=72;break}return e.abrupt("return",{success:!1,message:"ä¸‹è½½èµ„æ–™(".concat(i,") å¤±è´¥ï¼Œé”™è¯¯: ").concat(e.t0.message)});case 72:return e.abrupt("return",{success:!1,message:"æœªçŸ¥é”™è¯¯"});case 73:case"end":return e.stop()}}),e,null,[[1,66]])}))),function(e){return z.apply(this,arguments)}),Y=(j=o()(d().mark((function e(t,n){var o,s,r,a,l,c,u,p,m,v,b,y,C,x,S,k,L,N,D,I,E,T,A,O,P,R,F,V,W,z,j=arguments;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=j.length>2&&void 0!==j[2]&&j[2],e.prev=1,r=h.Z.state.app.profiles.files,a=null!==(s=(void 0===r?[]:r).find((function(e){return e.url===t})))&&void 0!==s?s:{url:t},e.t0=_.Console,e.t1=f(),e.next=8,h.Z.dispatch("getParserLogPath");case 8:if(e.t2=e.sent,e.t3=e.t1.createWriteStream.call(e.t1,e.t2),l=new e.t0(e.t3),c={axios:i(54387),yaml:i(11442),homeDir:h.Z.state.app.clashPath,console:o?l:console,notify:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];(0,M.c0)(e,t,i)}},u=h.Z.state.app.settings.profileParsersText,p=[],u)try{m=w().parse(u),v=m.parsers,p=(void 0===v?[]:v)||[]}catch(e){}b=p.filter((function(e){var i=e.url,n=e.reg;return i?i===t:n?new RegExp(n).test(t):void 0})),y=n,C=B(b),e.prev=18,C.s();case 20:if((x=C.n()).done){e.next=58;break}if(S=x.value,k=S.code,L=S.file,N=S.yaml,D=S.remote,!k){e.next=28;break}return I=U("'use strict';\n".concat(k)),e.next=27,I.parse(y,c,a);case 27:y=e.sent;case 28:if(!L){e.next=40;break}if(E=f().readFileSync(L,"utf-8"),!/\.ya?ml$/.test(L)){e.next=35;break}T=w().parse(E),y=Q(y,T),e.next=40;break;case 35:if(!/\.js$/.test(L)){e.next=40;break}return A=U("'use strict';\n".concat(E),L),e.next=39,A.parse(y,c,a);case 39:y=e.sent;case 40:if(N&&(y=Q(y,N)),!D){e.next=56;break}if(O=D.url,P=D.cache,R=void 0!==P&&P,O){e.next=45;break}throw new Error("Remote parser url is required");case 45:return e.next=47,g().get(O,{headers:{"cache-control":R?"max-age=3600":"no-cache"}});case 47:if(F=e.sent,V=F.data,200===(W=F.status)){e.next=52;break}throw new Error("Remote parser download failed with status: ".concat(W));case 52:return z=U("'use strict';\n".concat(V)),e.next=55,z.parse(y,c,a);case 55:y=e.sent;case 56:e.next=20;break;case 58:e.next=63;break;case 60:e.prev=60,e.t4=e.catch(18),C.e(e.t4);case 63:return e.prev=63,C.f(),e.finish(63);case 66:return e.abrupt("return",y);case 69:throw e.prev=69,e.t5=e.catch(1),H(H({},e.t5),{},{message:"[Parser Error] "+e.t5.message});case 72:case"end":return e.stop()}}),e,null,[[1,69],[18,60,63,66]])}))),function(e,t){return j.apply(this,arguments)}),Q=function(e,t){var i={},n=t["append-rules"],o=void 0===n?[]:n,s=t["prepend-rules"],r=void 0===s?[]:s,a=t["append-proxies"],l=void 0===a?[]:a,c=t["prepend-proxies"],d=void 0===c?[]:c,h=t["append-proxy-groups"],u=void 0===h?[]:h,g=t["prepend-proxy-groups"],p=void 0===g?[]:g,f=t["mix-proxy-providers"],m=void 0===f?{}:f,v=t["mix-rule-providers"],_=void 0===v?{}:v,b=t["mix-object"],y=void 0===b?{}:b,x=t.commands,S=void 0===x?[]:x,k=t["key-orders"],L=void 0===k?[]:k,N=w().parse(e),D=C().cloneDeep(N),I=N.rules,E=void 0===I?[]:I,M=N.proxies,A=void 0===M?[]:M,O=N["proxy-groups"],P=void 0===O?[]:O,R=N["proxy-providers"],F=void 0===R?{}:R,V=N["rule-providers"],W=void 0===V?{}:V;(r||o)&&(D.rules=r.concat(null!=E?E:[]).concat(o)),(d||l)&&(D.proxies=d.concat(null!=A?A:[]).concat(l)),(p||u)&&(D["proxy-groups"]=p.concat(null!=P?P:[]).concat(u)),m&&(D["proxy-providers"]=H(H({},F),m)),_&&(D["rule-providers"]=H(H({},W),_));var z,j=B(S);try{for(j.s();!(z=j.n()).done;){var U=z.value;T(D,U)}}catch(e){j.e(e)}finally{j.f()}return L.length>0&&(i.sortMapEntries=function(e,t){var i=e.key,n=t.key,o=L.findIndex((function(e){return e===i.value})),s=L.findIndex((function(e){return e===n.value}));return(-1===o?1/0:o)-(-1===s?1/0:s)}),w().stringify(H(H({},D),y),i)}},1581:(e,t,i)=>{"use strict";i.d(t,{lJ:()=>m,ay:()=>f,TX:()=>v});var n=i(48926),o=i.n(n),s=i(87757),r=i.n(s),a=i(8369),l=i(59273);const c=require("original-fs");var d,h=i(11442),u=i(75110),g=i.n(u),p=i(96206),f=Symbol(),m=Symbol(),v=(d=o()(r().mark((function e(t,n){var o,s,d,u,v,_,b,w;return r().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=i(54387),e.t1=i(11442),e.t2=l.Z.state.app.clashPath,e.t3=p.Console,e.t4=c.createWriteStream,e.next=7,l.Z.dispatch("getScriptLogPath");case 7:if(e.t5=e.sent,e.t6=(0,e.t4)(e.t5),e.t7=new e.t3(e.t6),e.t8=a.c0,e.t9=a.vC,e.t10=a.e8,o={axios:e.t0,yaml:e.t1,homeDir:e.t2,console:e.t7,notify:e.t8,dialog:e.t9,resolveHost:e.t10},s=l.Z.state.app.settings.scriptsText,d={},s)try{u=(0,h.parse)(s),v=u.scripts,d=v||{}}catch(e){}_=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(null==e?void 0:e.code)||"",i=(null==e?void 0:e.file)||"";if(t)return g()("'use strict';\n".concat(t)).run;if(i){var n=(0,c.readFileSync)(i,"utf8");return g()("'use strict';\n".concat(n),i).run}return function(){return""}},e.t11=n,e.next=e.t11===f?21:e.t11===m?24:27;break;case 21:return b=d.proxy,_(b)(t,o),e.abrupt("break",27);case 24:return w=d.profile,_(w)(t,o),e.abrupt("break",27);case 27:case"end":return e.stop()}}),e)}))),function(e,t){return d.apply(this,arguments)})},44224:(e,t,i)=>{"use strict";i.r(t),i.d(t,{installService:()=>k,needUpdate:()=>N,status:()=>y,statusService:()=>S,uninstallService:()=>L,updateService:()=>D});var n,o,s,r,a=i(48926),l=i.n(a),c=i(59713),d=i.n(c),h=i(87757),u=i.n(h),g=i(83566),p=i(59273),f=i(72378),m=i(71017),v=i(57147),_=i(8369),b=(i(11442),i(54387)),w='<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n    <dict>\n        <key>Label</key>\n        <string>com.lbyczf.cfw.helper</string>\n        <key>Program</key>\n        <string>helperPath</string>\n        <key>RunAtLoad</key>\n        <true/>\n        <key>KeepAlive</key>\n        <true/>\n        <key>HardResourceLimits</key>\n        <dict>\n            <key>NumberOfFiles</key>\n            <integer>10240</integer>\n        </dict>\n        <key>SoftResourceLimits</key>\n        <dict>\n            <key>NumberOfFiles</key>\n            <integer>10240</integer>\n        </dict>\n    </dict>\n</plist>',y={Active:Symbol(),Inactive:Symbol(),NonExistent:Symbol(),Unknown:Symbol()},C=function(e){return new Promise((function(t,i){(0,f.exec)(e,{name:"Clash for Windows"},(function(e,n,o){e&&i(e),o&&i(o),n&&t(n.toString()),t("")}))}))},x=function(){var e,t=p.Z.getters.filesPath,i=(e={},d()(e,g.Ml,"darwin/x64/service"),d()(e,g.UD,"darwin/arm64/service"),e)[(0,g.$Q)()];return(0,m.join)(t,i)},S=(n=l()(u().mark((function e(){var t,i,n,o;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,t=p.Z.state.app.clashPath,""===(i=void 0===t?"":t)||(0,v.existsSync)((0,m.join)(i,"service"))){e.next=4;break}return e.abrupt("return",y.Inactive);case 4:return e.next=6,b.get("http://127.0.0.1:53000/ping",{timeout:5e3});case 6:return n=e.sent,o=n.status,e.abrupt("return",200===o?y.Active:y.Inactive);case 11:e.prev=11,e.t0=e.catch(0);case 13:return e.abrupt("return",y.Unknown);case 14:case"end":return e.stop()}}),e,null,[[0,11]])}))),function(){return n.apply(this,arguments)}),k=(o=l()(u().mark((function e(){var t,i,n,o;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=p.Z.state.app.clashPath,i=(0,m.join)(t,"service"),(0,v.existsSync)(i)||(0,v.mkdirSync)(i),n=(0,m.join)(t,"service","clash-core-service"),o="/Library/LaunchDaemons/com.lbyczf.cfw.helper.plist",e.next=7,C('cp "'.concat((0,m.join)(x(),"clash-core-service"),'" "').concat((0,m.join)(n),'" ; chmod 655 "').concat(n,'" ; chown root:wheel "').concat(n,'" ;  echo "').concat(w.replace("helperPath",n),'" > ').concat(o," ; launchctl load -w ").concat(o));case 7:case"end":return e.stop()}}),e)}))),function(){return o.apply(this,arguments)}),L=(s=l()(u().mark((function e(){var t,i;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t="/Library/LaunchDaemons/com.lbyczf.cfw.helper.plist",i=(0,m.join)(p.Z.state.app.clashPath,"service"),e.next=4,C("launchctl unload ".concat(t," ; rm ").concat(t)+((0,v.existsSync)(i)?" ; rm -rf ".concat(i):""));case 4:case"end":return e.stop()}}),e)}))),function(){return s.apply(this,arguments)}),N=function(){var e=p.Z.state.app.clashPath,t=(0,m.join)(e,"service");if(!(0,v.existsSync)(t))return!1;var i=(0,m.join)(e,"service","clash-core-service");if(!(0,v.existsSync)(i))return!1;var n=(0,m.join)(x(),"clash-core-service"),o=function(e){return(0,_.Ll)((0,v.readFileSync)(e))};return o(i)!==o(n)},D=(r=l()(u().mark((function e(){var t,i,n,o;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=p.Z.state.app.clashPath,i=(0,m.join)(t,"service"),(0,v.existsSync)(i)||(0,v.mkdirSync)(i),n=(0,m.join)(t,"service","clash-core-service"),o="/Library/LaunchDaemons/com.lbyczf.cfw.helper.plist",e.next=7,C('cp "'.concat((0,m.join)(x(),"clash-core-service"),'" "').concat((0,m.join)(n),'" ; chmod 611 "').concat(n,'" ; chown root:wheel "').concat(n,'" ; launchctl unload ').concat(o,' ; echo "').concat(w.replace("helperPath",n),'" > ').concat(o," ; launchctl load -w ").concat(o));case 7:case"end":return e.stop()}}),e)}))),function(){return r.apply(this,arguments)})},33130:(e,t,i)=>{"use strict";i.r(t),i.d(t,{installService:()=>N,needUpdate:()=>I,status:()=>C,statusService:()=>L,uninstallService:()=>D,updateService:()=>E});var n=i(48926),o=i.n(n),s=i(59713),r=i.n(s),a=i(87757),l=i.n(a),c=i(83566),d=i(59273),h=i(72378),u=i(71017),g=i(57147),p=i(8369),f=(i(11442),i(54387)),m=i(72298);require("fs-extra");var v,_,b,w,y,C={Active:Symbol(),Inactive:Symbol(),NonExistent:Symbol(),Unknown:Symbol()},x=function(e){return new Promise((function(t,i){(0,h.exec)(e,{name:"Clash for Windows"},(function(e,n,o){e&&i(e),o&&i(o),n&&t(n.toString()),t("")}))}))},S=function(){var e,t=d.Z.getters.filesPath,i=(e={},r()(e,c.bV,"linux/x64/service"),r()(e,c.tU,"linux/arm64/service"),e)[(0,c.$Q)()];return(0,u.join)(t,i)},k=(v=o()(l().mark((function e(){return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,m.ipcRenderer.invoke("app","getPath","temp");case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)}))),function(){return v.apply(this,arguments)}),L=(_=o()(l().mark((function e(){var t,i,n,o;return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,t=d.Z.state.app.clashPath,""===(i=void 0===t?"":t)||(0,g.existsSync)((0,u.join)(i,"service"))){e.next=4;break}return e.abrupt("return",C.Inactive);case 4:return e.next=6,f.get("http://127.0.0.1:53000/ping",{timeout:5e3});case 6:return n=e.sent,o=n.status,e.abrupt("return",200===o?C.Active:C.Inactive);case 11:e.prev=11,e.t0=e.catch(0);case 13:return e.abrupt("return",C.Unknown);case 14:case"end":return e.stop()}}),e,null,[[0,11]])}))),function(){return _.apply(this,arguments)}),N=(b=o()(l().mark((function e(){var t,i,n,o;return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=d.Z.state.app.clashPath,i=(0,u.join)(t,"service"),(0,g.existsSync)(i)||(0,g.mkdirSync)(i),n=(0,u.join)(t,"service","clash-core-service"),o=(0,u.join)("/usr/lib/systemd/system","clash-core-service.service"),e.next=7,x('cp "'.concat((0,u.join)(S(),"clash-core-service"),'" "').concat((0,u.join)(n),'" ; chmod 655 "').concat((0,u.join)(n),'" ; chown root "').concat((0,u.join)(n),'" ; echo "').concat("[Unit]\nDescription=Clash core service created by Clash for Windows\nAfter=network-online.target nftables.service iptables.service\n\n[Service]\nType=simple\nExecStart=helperPath\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target".replace("helperPath",n),'" > ').concat(o," ; systemctl enable clash-core-service; systemctl start clash-core-service"));case 7:case"end":return e.stop()}}),e)}))),function(){return b.apply(this,arguments)}),D=(w=o()(l().mark((function e(){var t,i,n,o;return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.t0=u.join,e.next=4,k();case 4:if(e.t1=e.sent,t=(0,e.t0)(e.t1,"cfw-clash-service-installer"),!(0,g.existsSync)(t)){e.next=10;break}return e.next=9,x("".concat(t,"/installer.sh uninstall"));case 9:(0,g.existsSync)(t)&&(0,p.uR)(t);case 10:e.next=14;break;case 12:e.prev=12,e.t2=e.catch(0);case 14:return i=(0,u.join)("/usr/lib/systemd/system","clash-core-service.service"),n=d.Z.state.app.clashPath,o=(0,u.join)(n,"service"),e.next=19,x("systemctl stop clash-core-service; systemctl disable clash-core-service; rm -rf ".concat(i)+((0,g.existsSync)(o)?" ; rm -rf ".concat(o):""));case 19:case"end":return e.stop()}}),e,null,[[0,12]])}))),function(){return w.apply(this,arguments)}),I=function(){var e=d.Z.state.app.clashPath,t=(0,u.join)(e,"service");if(!(0,g.existsSync)(t))return!1;var i=(0,u.join)(e,"service","clash-core-service");if(!(0,g.existsSync)(i))return!1;var n=(0,u.join)(S(),"clash-core-service"),o=function(e){return(0,p.Ll)((0,g.readFileSync)(e))};return o(i)!==o(n)},E=(y=o()(l().mark((function e(){return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,D();case 2:return e.next=4,N();case 4:case"end":return e.stop()}}),e)}))),function(){return y.apply(this,arguments)})},34668:(e,t,i)=>{"use strict";i.r(t),i.d(t,{installService:()=>A,needUpdate:()=>R,status:()=>S,statusService:()=>M,uninstallService:()=>O,updateService:()=>F});var n,o,s,r,a,l,c,d=i(48926),h=i.n(d),u=i(59713),g=i.n(u),p=i(87757),f=i.n(p),m=i(83566),v=i(59273),_=i(54387),b=i.n(_),w=i(72378),y=i(71017),C=i(57147),x=i(8369),S=(i(11442),{Active:Symbol(),Inactive:Symbol(),NonExistent:Symbol(),Unknown:Symbol()}),k=process.env.ProgramW6432||process.env.ProgramFiles||"C:\\Program Files",L=(0,y.join)(k,"Clash for Windows Service"),N=function(e){return new Promise((function(t,i){(0,w.exec)(e,{name:"ClashforWindows"},(function(e,n,o){e&&i(e),o&&i(o),n&&t(n.toString()),t("")}))}))},D=function(){var e,t=v.Z.getters.filesPath,i=(e={},g()(e,m.Ap,"win/ia32/service"),g()(e,m.J4,"win/x64/service"),g()(e,m.Vm,"win/arm64/service"),e)[(0,m.$Q)()];return(0,y.join)(t,i)},I=(n=h()(f().mark((function e(){var t,i,n,o,s,r,a,l,c,d=arguments;return f().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=d.length>0&&void 0!==d[0]?d[0]:[],n=(i=d.length>1&&void 0!==d[1]?d[1]:{}).runAfter,o=void 0===n?"":n,s=i.runBefore,r=void 0===s?"":s,!(0,m.Kr)()){e.next=9;break}return a=(0,y.join)(v.Z.state.app.clashPath,"service"),l=t.map((function(e){var t=e.cmd,i=e.options,n=void 0===i?[]:i;return'"'.concat((0,y.join)(a,"service.exe"),'" ').concat(t," ").concat(n.join(" "))})).join(" & "),e.next=7,N([r,l,o].filter((function(e){return e})).join(" & "));case 7:return c=e.sent,e.abrupt("return",c);case 9:return e.abrupt("return","");case 10:case"end":return e.stop()}}),e)}))),function(){return n.apply(this,arguments)}),E=(o=h()(f().mark((function e(){var t,i,n,o,s,r,a,l,c,d=arguments;return f().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=d.length>0&&void 0!==d[0]?d[0]:[],n=(i=d.length>1&&void 0!==d[1]?d[1]:{}).runAfter,o=void 0===n?"":n,s=i.runBefore,r=void 0===s?"":s,!(0,m.Kr)()){e.next=9;break}return a=L,l=t.map((function(e){var t=e.cmd,i=e.options,n=void 0===i?[]:i;return'"'.concat((0,y.join)(a,"service.exe"),'" ').concat(t," ").concat(n.join(" "))})).join(" & "),e.next=7,N([r,l].filter((function(e){return e})).join(" & ")+(o?" && ".concat(o):""));case 7:return c=e.sent,e.abrupt("return",c);case 9:return e.abrupt("return","");case 10:case"end":return e.stop()}}),e)}))),function(){return o.apply(this,arguments)}),T=(s=h()(f().mark((function e(){var t,i,n,o,s,r,a,l,c=arguments;return f().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=c.length>0&&void 0!==c[0]?c[0]:[],n=(i=c.length>1&&void 0!==c[1]?c[1]:{}).runAfter,o=void 0===n?"":n,s=i.runBefore,r=void 0===s?"":s,!(0,m.Kr)()){e.next=8;break}return a=t.map((function(e){var t=e.cmd,i=e.options,n=void 0===i?[]:i;return"schtasks /".concat(t,' /tn "Clash Core Service" ').concat(n.join(" "))})).join(" & "),e.next=6,N([r,a].filter((function(e){return e})).join(" & ")+(o?" && ".concat(o):""));case 6:return l=e.sent,e.abrupt("return",l);case 8:return e.abrupt("return","");case 9:case"end":return e.stop()}}),e)}))),function(){return s.apply(this,arguments)}),M=(r=h()(f().mark((function e(){var t,i;return f().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,b().get("http://127.0.0.1:53000/ping",{timeout:5e3});case 3:return t=e.sent,i=t.status,e.abrupt("return",200===i?S.Active:S.Inactive);case 8:e.prev=8,e.t0=e.catch(0);case 10:return e.abrupt("return",S.Unknown);case 11:case"end":return e.stop()}}),e,null,[[0,8]])}))),function(){return r.apply(this,arguments)}),A=(a=h()(f().mark((function e(){var t,i,n=arguments;return f().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=n.length>0&&void 0!==n[0]?n[0]:0,i={serviceExePath:(0,y.join)(D(),"clash-core-service.exe"),winswExePath:(0,y.join)(D(),"service.exe"),configPath:(0,y.join)(D(),"../../common/service.yml"),schtaskConfigPath:(0,y.join)(D(),"../../common/schtasks.xml")},0!==t){e.next=5;break}return e.next=5,T([{cmd:"create",options:['/ru "SYSTEM"','/xml "'.concat((0,y.join)(L,"schtasks.xml"),'"')]},{cmd:"change",options:['/tr "\\"'.concat((0,y.join)(L,"clash-core-service.exe"),'\\""')]},{cmd:"run"}],{runBefore:'mkdir "'.concat(L,'" & copy "').concat(i.serviceExePath,'" "').concat(L,'" /Y & copy "').concat(i.schtaskConfigPath,'" "').concat(L,'" /Y ')});case 5:if(1!==t){e.next=8;break}return e.next=8,E([{cmd:"install"},{cmd:"start"}],{runBefore:'mkdir "'.concat(L,'" & copy "').concat(i.serviceExePath,'" "').concat(L,'" /Y & copy "').concat(i.winswExePath,'" "').concat(L,'" /Y & copy "').concat(i.configPath,'" "').concat(L,'" /Y ')});case 8:case"end":return e.stop()}}),e)}))),function(){return a.apply(this,arguments)}),O=(l=h()(f().mark((function e(){var t,i;return f().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t={serviceExePath:(0,y.join)(D(),"clash-core-service.exe"),winswExePath:(0,y.join)(D(),"service.exe"),configPath:(0,y.join)(D(),"../../common/service.yml")},i=(0,y.join)(v.Z.state.app.clashPath,"service"),!P()){e.next=7;break}return e.next=5,I([{cmd:"stop"},{cmd:"uninstall"}],{runAfter:'icacls.exe "'.concat(i,'" /remove:d Everyone & rmdir /s /q "').concat(i,'"')});case 5:case 10:e.next=14;break;case 7:if(!(0,C.existsSync)((0,y.join)(L,"schtasks.xml"))){e.next=12;break}return e.next=10,T([{cmd:"end"},{cmd:"delete",options:["/F"]}],{runAfter:'timeout /t 2 & rmdir "'.concat(L,'" /s /q')});case 12:return e.next=14,E([{cmd:"stop"},{cmd:"uninstall"}],{runBefore:'copy "'.concat(t.configPath,'" "').concat(L,'" /Y '),runAfter:'timeout /t 2 & rmdir "'.concat(L,'" /s /q')});case 14:case"end":return e.stop()}}),e)}))),function(){return l.apply(this,arguments)}),P=function(){var e=(0,y.join)(v.Z.state.app.clashPath,"service"),t=(0,y.join)(e,"service.yml"),i=(0,y.join)(e,"service.exe");return(0,C.existsSync)(e)&&(0,C.existsSync)(t)&&(0,C.existsSync)(i)},R=function(){if(P())return!0;if(!(0,C.existsSync)(L))return!1;var e=(0,y.join)(L,"clash-core-service.exe");if(!(0,C.existsSync)(e))return!1;var t=(0,y.join)(D(),"clash-core-service.exe"),i=function(e){return(0,x.Ll)((0,C.readFileSync)(e))};return i(e)!==i(t)},F=(c=h()(f().mark((function e(){var t;return f().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=(0,C.existsSync)((0,y.join)(L,"schtasks.xml"))?0:1,e.next=3,O();case 3:return e.next=5,A(t);case 5:case"end":return e.stop()}}),e)}))),function(){return c.apply(this,arguments)})},58511:(e,t,i)=>{"use strict";i.d(t,{S:()=>c});var n=i(63038),o=i.n(n),s=i(32081),r=i(83566);function a(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(!e)return;if("string"==typeof e)return l(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);"Object"===i&&e.constructor&&(i=e.constructor.name);if("Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return l(e,t)}(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,r=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return r=e.done,e},e:function(e){a=!0,s=e},f:function(){try{r||null==i.return||i.return()}finally{if(a)throw s}}}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}var c=function(){if((0,r.Kr)()||(0,r.V5)()){var e,t=(0,r.Kr)()?"chcp 65001 && netsh wlan show interfaces":"/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport --getinfo",i=(0,s.execSync)(t).toString().split("\n"),n=[],l={},c=a(i.entries());try{for(c.s();!(e=c.n()).done;){var d=o()(e.value,2),h=d[0],u=d[1].split(": "),g=o()(u,2),p=g[0],f=g[1];if(p&&f){var m=p.trim(),v=f.trim();if(!m||!v)continue;m in l&&(n.push(l),l={}),l[m]=v}h===i.length-1&&(n.push(l),l={})}}catch(e){c.e(e)}finally{c.f()}return n}return[]}},19102:(e,t,i)=>{"use strict";i.d(t,{p:()=>f});var n,o=i(59713),s=i.n(o),r=i(48926),a=i.n(r),l=i(87757),c=i.n(l),d=i(59273),h=i(83566),u=i(54387),g=i.n(u),p=i(71017),f=(n=a()(c().mark((function e(){var t,i,n,o,r,a,l,u,f=arguments;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=f.length>0&&void 0!==f[0]?f[0]:[],(0,h.V5)()){e.next=3;break}return e.abrupt("return",!1);case 3:return n=d.Z.state.app.isDevMode?(0,p.join)((0,p.resolve)("./"),"/static/files"):d.Z.getters.filesPath,o=(t={},s()(t,h.UD,"arm64"),s()(t,h.Ml,"x64"),t)[(0,h.Vk)()],r=(0,p.join)(n,"darwin",o),e.prev=6,e.next=9,g().post("http://127.0.0.1:53000/command",{path:(0,p.join)(r,"sysproxy"),args:i});case 9:return a=e.sent,l=a.status,u=a.data,e.abrupt("return",{success:200===l,output:u});case 15:e.prev=15,e.t0=e.catch(6);case 17:return e.abrupt("return",{success:!1,data:""});case 18:case"end":return e.stop()}}),e,null,[[6,15]])}))),function(){return n.apply(this,arguments)})},84695:(e,t,i)=>{"use strict";i.d(t,{_:()=>m});var n,o,s=i(48926),r=i.n(s),a=i(87757),l=i.n(a),c=i(83566),d=i(32081),h=i(71017),u=i(59273),g=i(72298),p=(i(54387),"cfw-update".concat((0,c.V5)()?".dmg":".exe")),f=(n=r()(l().mark((function e(t){var i,n;return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,g.ipcRenderer.invoke("app","getPath","temp");case 2:return i=e.sent,n=(0,h.join)(i,p),e.next=6,g.ipcRenderer.invoke("start-download",t,n);case 6:return u.Z.commit("SET_UPDATE_DOWNLOAD_PROGRESS",{progress:.01}),e.next=9,new Promise((function(e,t){g.ipcRenderer.on("download",(function(i,o,s){"downloading"===o&&u.Z.commit("SET_UPDATE_DOWNLOAD_PROGRESS",{progress:s}),"completed"===o&&(u.Z.commit("SET_UPDATE_DOWNLOAD_PROGRESS",{progress:null}),e(n)),"failed"===o&&(u.Z.commit("SET_UPDATE_DOWNLOAD_PROGRESS",{progress:null}),t(s))}))}));case 9:return e.abrupt("return",e.sent);case 10:case"end":return e.stop()}}),e)}))),function(e){return n.apply(this,arguments)}),m=(o=r()(l().mark((function e(t,i){var n,o,s,r;return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,f(t);case 2:if(n=e.sent){e.next=5;break}return e.abrupt("return");case 5:return e.next=7,g.ipcRenderer.invoke("app","getName");case 7:return o=e.sent,(0,c.V5)()&&(s=(0,d.execSync)("hdiutil attach '".concat(n,"' -nobrowse")),/\/Volumes\/(Clash for Windows.+?)\n/.test(s)&&(r=RegExp.$1,(0,d.execSync)("rm -rf '/Applications/".concat(o,".app' && cp -R '/Volumes/").concat(r,"/").concat(o,".app' '/Applications/").concat(o,".app'")),(0,d.execSync)("hdiutil eject '/Volumes/".concat(r,"'"),{stdio:["ignore","ignore","ignore"]}))),e.abrupt("return",n);case 10:case"end":return e.stop()}}),e)}))),function(e,t){return o.apply(this,arguments)})},8359:(e,t,i)=>{"use strict";i.d(t,{Z:()=>n});const n=(0,i(83566).V5)()?["127.0.0.1","192.168.0.0/16","10.0.0.0/8","172.16.0.0/12","100.64.0.0/10","17.0.0.0/8","localhost","*.local","169.254.0.0/16","224.0.0.0/4","240.0.0.0/4"]:["localhost","127.*","10.*","172.16.*","172.17.*","172.18.*","172.19.*","172.20.*","172.21.*","172.22.*","172.23.*","172.24.*","172.25.*","172.26.*","172.27.*","172.28.*","172.29.*","172.30.*","172.31.*","192.168.*","<local>"]},10870:(e,t,i)=>{"use strict";i.d(t,{Z:()=>n});const n='function FindProxyForURL(url, host) {\n  return "PROXY 127.0.0.1:%mixed-port%; SOCKS5 127.0.0.1:%mixed-port%; DIRECT;"\n}'},83566:(e,t,i)=>{"use strict";i.d(t,{$Q:()=>g,Ap:()=>o,IJ:()=>m,J4:()=>n,Kr:()=>p,Ml:()=>a,UD:()=>l,V5:()=>f,Vk:()=>u,Vm:()=>r,bV:()=>c,tU:()=>d});var n=Symbol(),o=Symbol(),s=Symbol(),r=Symbol(),a=Symbol(),l=Symbol(),c=Symbol(),d=Symbol(),h=Symbol(),u=function(){if("win32"===process.platform){if("x64"===process.arch)return n;if("ia32"===process.arch)return o;if("arm"===process.arch)return s;if("arm64"===process.arch)return r}if("darwin"===process.platform){if("x64"===process.arch)return a;if("arm64"===process.arch)return l}if("linux"===process.platform){if("x64"===process.arch)return c;if("arm64"===process.arch)return d}return h},g=function(){var e=u();return[o,s].includes(e)?o:e},p=function(){return[s,r,o,n].includes(u())},f=function(){return[a,l].includes(u())},m=function(){return[c,d].includes(u())}},33182:(e,t,i)=>{"use strict";i.d(t,{Z:()=>o,r:()=>n});var n={INIT:Symbol(),DEFAULT:Symbol(),SYSTEM_PROXY:Symbol()},o={CONNECTED:Symbol(),DISCONNECTED:Symbol()}},81518:(e,t,i)=>{"use strict";i.d(t,{Z:()=>n});const n={SYSTEM_PROXY:"systemProxy",LAST_CLASH_PID:"lastClashPID",LAST_USER_EXE_PIDS:"lastUserExePids",LAST_LOG_FILE_PATH:"lastLogFilePath",AD_IMAGES:"adImages",CONNECTION_ORDER_INDEX:"connectionOrderIndex",CONNECTION_ORDER_REVERSE_TAGS:"connectionOrderReverseTags",AUTO_LAUNCH:"autoLaunch",GEOIP_URL:"geoipDownloadRawURL",GEOIP_TOKEN:"geoipDownloadToken",TAP_INFO:"tapInfo",PROXY_SHOW_SEC_IDXS:"proxyShowSecIdxs",PROXY_HIDE_TIMEOUT_SEC_NAMES:"proxyHideTimeoutSecNames",PROXY_FILTER_KEYWORD:"proxyFilterKeyword",IS_PIN_ENABLED:"isPinEnabled",MENU_ITEM_ORDER:"menuItemOrder",CURRENT_ROUTE_PATH:"currentRoutePath",DETECTED_INTERFACE_NAME:"detectedInterfaceName",SYSTEM_PROXY_COMMAND:"systemProxyCommand",IS_DIFF_EIDTOR_SEPARATED:"isDiffEditorSeparated",IS_LIGHTWEIGHT_MODE_CLOSE:"isLightweightModeClose",IS_MIXIN:"isProfileMixin",LAST_VERSION_CODE:"lastVersionCode",ROUTER_HIJACK_MAC_ADDRESSES:"routerHijackMacAddresses",DHCP_MAC_ALIAS:"dhcpMacAlias",TUN_SETTINGS:"tunSettings",IS_TUN:"isTunEnabled",LOG_MOUDLE_LEVEL:"logModuleLevel",LOG_MODULE_STYLE:"logModuleStyle",LOG_MODULE_SEARCH_TEXT:"logModuleSearchText",CONNECTION_MODULE_SEARCH_TEXT:"connectionModuleSearchText",TEST_SCRIPT_CONTENT:"testScriptContent"}},59273:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});var n=i(70538),o=i(23321),s=i.n(o),r=i(11068);n.ZP.use(s());const a=new(s().Store)({modules:r.default,strict:!1,plugins:[function(e){e.subscribe((function(t){["CHANGE_PROFILES","CHANGE_PROFILES_INDEX","CHANGE_PROFILE","APPEND_PROFILE","DELETE_PROFILE"].includes(t.type)&&e.commit("SAVE_PROFILES")}))}]})},23726:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>F});var n=i(48926),o=i.n(n),s=i(319),r=i.n(s),a=i(59713),l=i.n(a),c=i(63038),d=i.n(c),h=i(87757),u=i.n(h),g=i(57147),p=i.n(g),f=i(11442),m=i.n(f),v=i(71017),_=i.n(v),b=i(54387),w=i.n(b),y=i(71893),C=i.n(y),x=i(24793),S=i.n(x),k=i(56796),L=i(33182),N=i(24883),D=i(81518),I=i(83566),E=function(e,t){var i,n=null!==(i=N.Z.get(D.Z.MENU_ITEM_ORDER))&&void 0!==i?i:[],o=n.findIndex((function(t){return t===e.title}));return-1===o?1:o-n.findIndex((function(e){return e===t.title}))},T=i(72298);function M(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function A(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?M(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):M(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var O={mixedPort:function(e){return e.confData["mixed-port"]||0},controllerPort:function(e){var t=e.confData["external-controller"];if(t){var i=t.split(":"),n=d()(i,2),o=(n[0],n[1]);return parseInt(o.trim())||0}return 0},secret:function(e){var t=e.confData.secret,i=void 0===t?"":t;return i},clashAxiosClient:function(e,t){var i=t.controllerPort,n=t.secret;return i>0?w().create({baseURL:"http://127.0.0.1:".concat(i,"/"),timeout:5e3,headers:{Authorization:"Bearer ".concat(n)}}):null},clashGotClient:function(e,t){var i=t.controllerPort,n=t.secret;return i>0?C().extend({baseUrl:"http://127.0.0.1:".concat(i),headers:{Authorization:"Bearer ".concat(n)}}):null},clashWSClient:function(e,t){return function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=t.controllerPort,o=t.secret;if(n>0){/^\//.test(e)||(e="/"+e);var s="ws://127.0.0.1:".concat(n).concat(e,"?token=").concat(o).concat(i.length>0?"&".concat(i.join("&")):"");return new k(s)}return null}},resourcesPath:function(e){return e.isDevMode?"":""!==e.exePath?_().join(_().dirname(e.exePath),(0,I.V5)()?"../Resources":"./resources"):""},filesPath:function(e,t){return""!==t.resourcesPath?_().join(t.resourcesPath,"static/files"):"static/files"},clashBinaryPath:function(e,t){var i,n,o=(i={},l()(i,I.Ap,_().join(t.filesPath,"win","ia32")),l()(i,I.J4,_().join(t.filesPath,"win","x64")),l()(i,I.Vm,_().join(t.filesPath,"win","arm64")),l()(i,I.Ml,_().join(t.filesPath,"darwin","x64")),l()(i,I.UD,_().join(t.filesPath,"darwin","arm64")),l()(i,I.bV,_().join(t.filesPath,"linux","x64")),l()(i,I.tU,_().join(t.filesPath,"linux","arm64")),i)[(0,I.$Q)()],s=(n={},l()(n,I.Ap,"clash-win32.exe"),l()(n,I.J4,"clash-win64.exe"),l()(n,I.Vm,"clash-win-arm64.exe"),l()(n,I.Ml,"./clash-darwin"),l()(n,I.UD,"./clash-darwin"),l()(n,I.bV,"./clash-linux"),l()(n,I.tU,"./clash-linux"),n)[(0,I.$Q)()];return _().join(o,s)},theme:function(e){if(0===Object.keys(e.settings).length)return"unknown";if(e.settings){var t=e.settings,i=t.theme,n=void 0===i?0:i,o=t.systemTheme;return void 0!==o&&o?e.shouldUseDarkTheme?"dark":"light":["light","dark","red","2077"][n]}return"light"},menuItemsWithOrder:function(e){return r()(e.menuItems).sort(E)},fontFamily:function(e){var t=e.settings,i=t.fontFamily,n=void 0===i?"":i,o=t.useSystemEmoji,s=void 0!==o&&o,r=n.split(",").map((function(e){return'"'.concat(S().trim(e,' "'),'"')})),a="".concat(r.join(","),', "Microsoft Yahei", "PingFang SC", "system-ui", å¾®è½¯é›…é»‘');return s?a:"".concat(a,', "TwemojiMozilla"')}},P={SET_IS_DEV_MODE:function(e,t){var i=t.isDevMode;e.isDevMode=i,i&&(e.isWindowShow=!0)},CHANGE_IS_MIXIN_ENABLE:function(e,t){var i=t.isMixin;e.isMixinEnable=i,""===e.matchedSSID&&N.Z.put(D.Z.IS_MIXIN,i)},SET_CLASH_PATH:function(e,t){var i=t.path;e.clashPath=_().normalize(i)},SET_CLASH_STATUS:function(e,t){var i=t.status;i!==L.Z.CONNECTED&&i!==L.Z.DISCONNECTED||(e.clashStatus=i)},SET_PROFILES_PATH:function(e,t){var i=t.path;e.profilesPath=_().normalize(i)},SET_CONF_DATA:function(e,t){var i=t.data;e.confData=i},LOAD_PROFILES:function(e){var t=p().readFileSync(_().join(e.profilesPath,"list.yml"),"utf8"),i=m().parse(t,{merge:!0,schema:"yaml-1.1"}),n=i.files,o=i.index;e.profiles={files:n,index:o}},SAVE_PROFILES:function(e){p().writeFileSync(_().join(e.profilesPath,"list.yml"),m().stringify(e.profiles))},CHANGE_PROFILES:function(e,t){var i=t.profiles;e.profiles=A(A({},e.profiles),{},{files:i})},CHANGE_PROFILES_INDEX:function(e,t){var i=t.index;e.profiles=A(A({},e.profiles),{},{index:i})},CHANGE_PROFILE:function(e,t){var i=t.index,n=t.profile;if(n){var o=e.profiles.files.slice();o[i]=n,e.profiles=A(A({},e.profiles),{},{files:o})}},DELETE_PROFILE:function(e,t){var i=t.index,n=e.profiles.files.slice();n.splice(i,1),e.profiles=A(A({},e.profiles),{},{files:n})},APPEND_PROFILE:function(e,t){var i=t.profile,n=e.profiles.files,o=void 0===n?[]:n;i&&(e.profiles=A(A({},e.profiles),{},{files:[].concat(r()(o),[i])}))},SET_LOG_FILE_PATH:function(e,t){var i=t.path,n=_().normalize(i);e.logFilePath=n,N.Z.put(D.Z.LAST_LOG_FILE_PATH,n)},SET_EXE_PATH:function(e,t){var i=t.path;e.exePath=_().normalize(i)},APPEND_ERROR:function(e,t){var i=t.error;e.errors=[].concat(r()(e.errors),[i])},CHANGE_STATUS:function(e,t){var i=t.status;e.status=i},ADD_AXIOS_FLYING_REQUEST_COUNT:function(e,t){var i=t.count;e.clashAxiosFlyingRequestCount+=i},SET_SETTINGS_OBJECT:function(e,t){var i=t.obj;e.settings=i},SAVE_SETTINGS_OBJECT:function(e,t){var i=t.obj;e.settings=i,p().writeFileSync(_().join(e.clashPath,"cfw-settings.yaml"),m().stringify(i))},SET_SHOULD_USE_DARK_THEME:function(e,t){var i=t.shouldUseDarkTheme;e.shouldUseDarkTheme=i},SET_DETECTED_INTERFACE_NAME:function(e,t){var i=t.interfaceName;e.detectedInterfaceName=i,N.Z.put(D.Z.DETECTED_INTERFACE_NAME,i)},SET_IS_WINDOW_SHOW:function(e,t){var i=t.isShow;e.isWindowShow=i},SET_IS_APP_SUSPEND:function(e,t){var i=t.isSuspend;e.isAppSuspend=i},SET_INNER_SERVER_PORT:function(e,t){var i=t.port;e.innerServerPort=i},SET_IS_LOCAL_MODE:function(e,t){var i=t.isLocal;e.isLocalMode=i},SET_IS_LAUNCHING:function(e,t){var i=t.isLaunching;e.isLaunching=i},SET_MENU_ITEMS:function(e,t){var i=t.items;e.menuItems=i},SET_UPDATE_DOWNLOAD_PROGRESS:function(e,t){var i=t.progress;e.updateDownloadProgress=i},SET_IS_SYSTEM_PROXY_ON:function(e,t){var i=t.isOn;e.isSystemProxyOn=i,""===e.matchedSSID&&N.Z.put(D.Z.SYSTEM_PROXY,i)},SET_IS_SUB_VIEW_SHOW:function(e,t){t.isShow?e.isSubViewShow=!0:setTimeout((function(){e.isSubViewShow=!1}),50)},SET_CURRENT_ROUTE_PATH:function(e,t){var i=t.path;e.currentRoutePath=i,N.Z.put(D.Z.CURRENT_ROUTE_PATH,i)},ADD_PROFILE_REFRESH_TIMES:function(e,t){var i=t.times,n=void 0===i?1:i;e.profileRefreshTimes+=n},CHANGE_MODE:function(e,t){var i=t.mode;["direct","rule","global","script"].includes(i)&&(e.mode=i)},SET_ROUTER_HIJACK_MAC_ADDRESSES:function(e,t){var i=t.addresses;e.routerHijackMacAddresses=i,N.Z.put(D.Z.ROUTER_HIJACK_MAC_ADDRESSES,i)},SET_CURRENT_PROFILE_PAYLOAD:function(e,t){var i=t.payload;e.currentProfilePayload=i},SET_IS_SILENT_UPGRADED:function(e,t){var i=t.isUpgraded;e.isSilentUpgraded=i},SET_TUN_SETTINGS:function(e,t){var i=t.settings;e.tunSettings=i,N.Z.put(D.Z.TUN_SETTINGS,i)},CHANGE_IS_TUN_ENABLE:function(e,t){var i=t.isTun;e.isTunEnable=i,""===e.matchedSSID&&N.Z.put(D.Z.IS_TUN,i)},SET_IS_FIREWALL_RULE_EXIST:function(e,t){var i=t.isExist;e.isFirewallRuleExist=i},SET_USER_DNS:function(e,t){var i=t.dns;e.userDNS=i},SET_MATCHED_SSID:function(e,t){var i=t.ssid;e.matchedSSID=i}},R={getMode:function(e){return o()(u().mark((function t(){var i,n,o,s,r,a,l;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=e.commit,n=e.getters,!(o=n.clashAxiosClient)){t.next=9;break}return t.next=5,o.get("/configs").catch((function(e){}));case 5:s=t.sent,r=s.status,a=s.data,200===r&&(l=a.mode,i("CHANGE_MODE",{mode:l}));case 9:case"end":return t.stop()}}),t)})))()},setMode:function(e,t){return o()(u().mark((function i(){var n,o,s,r,a;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(n=e.commit,o=e.getters,s=t.mode,!(r=o.clashAxiosClient)){i.next=9;break}return i.next=6,r.patch("/configs",{mode:s}).catch((function(e){}));case 6:a=i.sent,204===a.status&&n("CHANGE_MODE",{mode:s});case 9:case"end":return i.stop()}}),i)})))()},getParserLogPath:function(){return o()(u().mark((function e(){var t;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,T.ipcRenderer.invoke("app","getPath","temp");case 2:return t=e.sent,e.abrupt("return",_().join(t,"cfw-parser.log"));case 4:case"end":return e.stop()}}),e)})))()},getScriptLogPath:function(){return o()(u().mark((function e(){var t;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,T.ipcRenderer.invoke("app","getPath","temp");case 2:return t=e.sent,e.abrupt("return",_().join(t,"cfw-script.log"));case 4:case"end":return e.stop()}}),e)})))()}};const F={state:{isDevMode:!1,clashPath:"",clashStatus:L.Z.DISCONNECTED,profilesPath:"",profiles:{},confData:{},logFilePath:N.Z.get(D.Z.LAST_LOG_FILE_PATH)||"",isMixinEnable:N.Z.get(D.Z.IS_MIXIN)||!1,exePath:"",errors:[],status:L.r.INIT,clashAxiosFlyingRequestCount:0,settings:{},shouldUseDarkTheme:!1,detectedInterfaceName:N.Z.get(D.Z.DETECTED_INTERFACE_NAME)||"",isWindowShow:!1,isAppSuspend:!1,innerServerPort:0,isLocalMode:!0,isLaunching:!0,menuItems:[{title:"ä¸»é¡µ",path:"/home/general"},{title:"ä»£ç†",path:"/home/proxy"},{title:"é…ç½®",path:"/home/server"},{title:"æ—¥å¿—",path:"/home/log"},{title:"è¿žæŽ¥",path:"/home/connection"},{title:"è®¾ç½®",path:"/home/setting"},{title:"å…³äºŽ",path:"/home/about"}],updateDownloadProgress:null,isSystemProxyOn:N.Z.get(D.Z.SYSTEM_PROXY)||!1,isSubViewShow:!1,currentRoutePath:N.Z.get(D.Z.CURRENT_ROUTE_PATH)||"/home/general",profileRefreshTimes:0,mode:"rule",routerHijackMacAddresses:N.Z.get(D.Z.ROUTER_HIJACK_MAC_ADDRESSES)||[],currentProfilePayload:{},isSilentUpgraded:!1,tunSettings:N.Z.get(D.Z.TUN_SETTINGS),isTunEnable:N.Z.get(D.Z.IS_TUN)||!1,isFirewallRuleExist:!1,userDNS:null,matchedSSID:""},getters:O,mutations:P,actions:R}},11068:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>s});var n=i(54265),o={};n.keys().forEach((function(e){"./index.js"!==e&&(o[e.replace(/(\.\/|\.js)/g,"")]=n(e).default)}));const s=o},546:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-action-bar {\n\twhite-space: nowrap;\n\theight: 100%;\n}\n\n.monaco-action-bar .actions-container {\n\tdisplay: flex;\n\tmargin: 0 auto;\n\tpadding: 0;\n\theight: 100%;\n\twidth: 100%;\n\talign-items: center;\n}\n\n.monaco-action-bar.vertical .actions-container {\n\tdisplay: inline-block;\n}\n\n.monaco-action-bar .action-item {\n\tdisplay: block;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n\tposition: relative;  /* DO NOT REMOVE - this is the key to preventing the ghosting icon bug in Chrome 42 */\n}\n\n.monaco-action-bar .action-item.disabled {\n\tcursor: default;\n}\n\n.monaco-action-bar .action-item .icon,\n.monaco-action-bar .action-item .codicon {\n\tdisplay: block;\n}\n\n.monaco-action-bar .action-item .codicon {\n\tdisplay: flex;\n\talign-items: center;\n\twidth: 16px;\n\theight: 16px;\n}\n\n.monaco-action-bar .action-label {\n\tfont-size: 11px;\n\tpadding: 3px;\n\tborder-radius: 5px;\n}\n\n.monaco-action-bar .action-item.disabled .action-label,\n.monaco-action-bar .action-item.disabled .action-label::before,\n.monaco-action-bar .action-item.disabled .action-label:hover {\n\topacity: 0.4;\n}\n\n/* Vertical actions */\n\n.monaco-action-bar.vertical {\n\ttext-align: left;\n}\n\n.monaco-action-bar.vertical .action-item {\n\tdisplay: block;\n}\n\n.monaco-action-bar.vertical .action-label.separator {\n\tdisplay: block;\n\tborder-bottom: 1px solid #bbb;\n\tpadding-top: 1px;\n\tmargin-left: .8em;\n\tmargin-right: .8em;\n}\n\n.monaco-action-bar .action-item .action-label.separator {\n\twidth: 1px;\n\theight: 16px;\n\tmargin: 5px 4px !important;\n\tcursor: default;\n\tmin-width: 1px;\n\tpadding: 0;\n\tbackground-color: #bbb;\n}\n\n.secondary-actions .monaco-action-bar .action-label {\n\tmargin-left: 6px;\n}\n\n/* Action Items */\n.monaco-action-bar .action-item.select-container {\n\toverflow: hidden; /* somehow the dropdown overflows its container, we prevent it here to not push */\n\tflex: 1;\n\tmax-width: 170px;\n\tmin-width: 60px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-right: 10px;\n}\n\n.monaco-action-bar .action-item.action-dropdown-item {\n\tdisplay: flex;\n}\n\n.monaco-action-bar .action-item.action-dropdown-item > .action-label {\n\tmargin-right: 1px;\n}\n",""]);const a=r},96513:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-aria-container {\n\tposition: absolute; /* try to hide from window but not from screen readers */\n\tleft:-999em;\n}",""]);const a=r},71470:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-text-button {\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\twidth: 100%;\n\tpadding: 4px;\n\ttext-align: center;\n\tcursor: pointer;\n\tjustify-content: center;\n\talign-items: center;\n}\n\n.monaco-text-button:focus {\n\toutline-offset: 2px !important;\n}\n\n.monaco-text-button:hover {\n\ttext-decoration: none !important;\n}\n\n.monaco-button.disabled:focus,\n.monaco-button.disabled {\n\topacity: 0.4 !important;\n\tcursor: default;\n}\n\n.monaco-text-button > .codicon {\n\tmargin: 0 0.2em;\n\tcolor: inherit !important;\n}\n\n.monaco-button-dropdown {\n\tdisplay: flex;\n\tcursor: pointer;\n}\n\n.monaco-button-dropdown > .monaco-dropdown-button {\n\tmargin-left: 1px;\n}\n\n.monaco-description-button {\n\tflex-direction: column;\n}\n\n.monaco-description-button .monaco-button-label {\n\tfont-weight: 500;\n}\n\n.monaco-description-button .monaco-button-description {\n\tfont-style: italic;\n}\n",""]);const a=r},98093:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-custom-checkbox {\n\tmargin-left: 2px;\n\tfloat: left;\n\tcursor: pointer;\n\toverflow: hidden;\n\topacity: 0.7;\n\twidth: 20px;\n\theight: 20px;\n\tborder: 1px solid transparent;\n\tpadding: 1px;\n\tbox-sizing:\tborder-box;\n\t-moz-user-select: none;\n\t     user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n}\n\n.monaco-custom-checkbox:hover,\n.monaco-custom-checkbox.checked {\n\topacity: 1;\n}\n\n.hc-black .monaco-custom-checkbox {\n\tbackground: none;\n}\n\n.hc-black .monaco-custom-checkbox:hover {\n\tbackground: none;\n}\n\n.monaco-custom-checkbox.monaco-simple-checkbox {\n\theight: 18px;\n\twidth: 18px;\n\tborder: 1px solid transparent;\n\tborder-radius: 3px;\n\tmargin-right: 9px;\n\tmargin-left: 0px;\n\tpadding: 0px;\n\topacity: 1;\n\tbackground-size: 16px !important;\n}\n\n/* hide check when unchecked */\n.monaco-custom-checkbox.monaco-simple-checkbox:not(.checked)::before {\n\tvisibility: hidden;\n}\n",""]);const a=r},7543:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.codicon-wrench-subaction {\n\topacity: 0.5;\n}\n\n@keyframes codicon-spin {\n\t100% {\n\t\ttransform:rotate(360deg);\n\t}\n}\n\n.codicon-sync.codicon-modifier-spin,\n.codicon-loading.codicon-modifier-spin,\n.codicon-gear.codicon-modifier-spin,\n.codicon-notebook-state-executing.codicon-modifier-spin {\n\t/* Use steps to throttle FPS to reduce CPU usage */\n\tanimation: codicon-spin 1.5s steps(30) infinite;\n}\n\n.codicon-modifier-disabled {\n\topacity: 0.4;\n}\n\n/* custom speed & easing for loading icon */\n.codicon-loading,\n.codicon-tree-item-loading::before {\n\tanimation-duration: 1s !important;\n\tanimation-timing-function: cubic-bezier(0.53, 0.21, 0.29, 0.67) !important;\n}\n",""]);const a=r},6921:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>u});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s),a=i(61667),l=i.n(a),c=new URL(i(73251),i.b),d=r()(o()),h=l()(c);d.push([e.id,`/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n@font-face {\n\tfont-family: "codicon";\n\tfont-display: block;\n\tsrc: url(${h}) format("truetype");\n}\n\n.codicon[class*='codicon-'] {\n\tfont: normal normal normal 16px/1 codicon;\n\tdisplay: inline-block;\n\ttext-decoration: none;\n\ttext-rendering: auto;\n\ttext-align: center;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n\t-moz-user-select: none;\n\t     user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n}\n\n/* icon rules are dynamically created in codiconStyles */\n`,""]);const u=d},75730:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.context-view {\n\tposition: absolute;\n\tz-index: 2500;\n}\n\n.context-view.fixed {\n\tall: initial;\n\tfont-family: inherit;\n\tfont-size: 13px;\n\tposition: fixed;\n\tz-index: 2500;\n\tcolor: inherit;\n}\n",""]);const a=r},55448:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-count-badge {\n\tpadding: 3px 6px;\n\tborder-radius: 11px;\n\tfont-size: 11px;\n\tmin-width: 18px;\n\tmin-height: 18px;\n\tline-height: 11px;\n\tfont-weight: normal;\n\ttext-align: center;\n\tdisplay: inline-block;\n\tbox-sizing: border-box;\n}\n\n.monaco-count-badge.long {\n\tpadding: 2px 3px;\n\tborder-radius: 2px;\n\tmin-height: auto;\n\tline-height: normal;\n}\n",""]);const a=r},15159:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-dropdown {\n\theight: 100%;\n\tpadding: 0;\n}\n\n.monaco-dropdown > .dropdown-label {\n\tcursor: pointer;\n\theight: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.monaco-dropdown > .dropdown-label > .action-label.disabled {\n\tcursor: default;\n}\n\n.monaco-dropdown-with-primary {\n\tdisplay: flex !important;\n\tflex-direction: row;\n\tborder-radius: 5px;\n}\n\n.monaco-dropdown-with-primary > .action-container > .action-label {\n\tmargin-right: 0;\n}\n\n.monaco-dropdown-with-primary > .dropdown-action-container > .monaco-dropdown > .dropdown-label .codicon[class*='codicon-'] {\n\tfont-size: 12px;\n\tpadding-left: 0px;\n\tpadding-right: 0px;\n\tline-height: 16px;\n\tmargin-left: -3px;\n}\n\n.monaco-dropdown-with-primary > .dropdown-action-container > .monaco-dropdown > .dropdown-label > .action-label {\n\tdisplay: block;\n\tbackground-size: 16px;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n}\n",""]);const a=r},90071:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/* ---------- Find input ---------- */\n\n.monaco-findInput {\n\tposition: relative;\n}\n\n.monaco-findInput .monaco-inputbox {\n\tfont-size: 13px;\n\twidth: 100%;\n}\n\n.monaco-findInput > .controls {\n\tposition: absolute;\n\ttop: 3px;\n\tright: 2px;\n}\n\n.vs .monaco-findInput.disabled {\n\tbackground-color: #E1E1E1;\n}\n\n/* Theming */\n.vs-dark .monaco-findInput.disabled {\n\tbackground-color: #333;\n}\n\n/* Highlighting */\n.monaco-findInput.highlight-0 .controls {\n\tanimation: monaco-findInput-highlight-0 100ms linear 0s;\n}\n.monaco-findInput.highlight-1 .controls {\n\tanimation: monaco-findInput-highlight-1 100ms linear 0s;\n}\n.hc-black .monaco-findInput.highlight-0 .controls,\n.vs-dark  .monaco-findInput.highlight-0 .controls {\n\tanimation: monaco-findInput-highlight-dark-0 100ms linear 0s;\n}\n.hc-black .monaco-findInput.highlight-1 .controls,\n.vs-dark  .monaco-findInput.highlight-1 .controls {\n\tanimation: monaco-findInput-highlight-dark-1 100ms linear 0s;\n}\n\n@keyframes monaco-findInput-highlight-0 {\n\t0% { background: rgba(253, 255, 0, 0.8); }\n\t100% { background: transparent; }\n}\n@keyframes monaco-findInput-highlight-1 {\n\t0% { background: rgba(253, 255, 0, 0.8); }\n\t/* Made intentionally different such that the CSS minifier does not collapse the two animations into a single one*/\n\t99% { background: transparent; }\n}\n\n@keyframes monaco-findInput-highlight-dark-0 {\n\t0% { background: rgba(255, 255, 255, 0.44); }\n\t100% { background: transparent; }\n}\n@keyframes monaco-findInput-highlight-dark-1 {\n\t0% { background: rgba(255, 255, 255, 0.44); }\n\t/* Made intentionally different such that the CSS minifier does not collapse the two animations into a single one*/\n\t99% { background: transparent; }\n}",""]);const a=r},70223:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-hover {\n\tcursor: default;\n\tposition: absolute;\n\toverflow: hidden;\n\tz-index: 50;\n\t-moz-user-select: text;\n\t     user-select: text;\n\t-webkit-user-select: text;\n\t-ms-user-select: text;\n\tbox-sizing: initial;\n\tanimation: fadein 100ms linear;\n\tline-height: 1.5em;\n}\n\n.monaco-hover.hidden {\n\tdisplay: none;\n}\n\n.monaco-hover .hover-contents:not(.html-hover-contents) {\n\tpadding: 4px 8px;\n}\n\n.monaco-hover .markdown-hover > .hover-contents:not(.code-hover-contents) {\n\tmax-width: 500px;\n\tword-wrap: break-word;\n}\n\n.monaco-hover .markdown-hover > .hover-contents:not(.code-hover-contents) hr {\n\tmin-width: 100%;\n}\n\n.monaco-hover p,\n.monaco-hover .code,\n.monaco-hover ul {\n\tmargin: 8px 0;\n}\n\n.monaco-hover code {\n\tfont-family: var(--monaco-monospace-font);\n}\n\n.monaco-hover hr {\n\tbox-sizing: border-box;\n\tborder-left: 0px;\n\tborder-right: 0px;\n\tmargin-top: 4px;\n\tmargin-bottom: -4px;\n\tmargin-left: -8px;\n\tmargin-right: -8px;\n\theight: 1px;\n}\n\n.monaco-hover p:first-child,\n.monaco-hover .code:first-child,\n.monaco-hover ul:first-child {\n\tmargin-top: 0;\n}\n\n.monaco-hover p:last-child,\n.monaco-hover .code:last-child,\n.monaco-hover ul:last-child {\n\tmargin-bottom: 0;\n}\n\n/* MarkupContent Layout */\n.monaco-hover ul {\n\tpadding-left: 20px;\n}\n.monaco-hover ol {\n\tpadding-left: 20px;\n}\n\n.monaco-hover li > p {\n\tmargin-bottom: 0;\n}\n\n.monaco-hover li > ul {\n\tmargin-top: 0;\n}\n\n.monaco-hover code {\n\tborder-radius: 3px;\n\tpadding: 0 0.4em;\n}\n\n.monaco-hover .monaco-tokenized-source {\n\twhite-space: pre-wrap;\n}\n\n.monaco-hover .hover-row.status-bar {\n\tfont-size: 12px;\n\tline-height: 22px;\n}\n\n.monaco-hover .hover-row.status-bar .actions {\n\tdisplay: flex;\n\tpadding: 0px 8px;\n}\n\n.monaco-hover .hover-row.status-bar .actions .action-container {\n\tmargin-right: 16px;\n\tcursor: pointer;\n}\n\n.monaco-hover .hover-row.status-bar .actions .action-container .action .icon {\n\tpadding-right: 4px;\n}\n\n.monaco-hover .markdown-hover .hover-contents .codicon {\n\tcolor: inherit;\n\tfont-size: inherit;\n\tvertical-align: middle;\n}\n\n.monaco-hover .hover-contents a.code-link:hover,\n.monaco-hover .hover-contents a.code-link {\n\tcolor: inherit;\n}\n\n.monaco-hover .hover-contents a.code-link:before {\n\tcontent: '(';\n}\n\n.monaco-hover .hover-contents a.code-link:after {\n\tcontent: ')';\n}\n\n.monaco-hover .hover-contents a.code-link > span {\n\ttext-decoration: underline;\n\t/** Hack to force underline to show **/\n\tborder-bottom: 1px solid transparent;\n\ttext-underline-position: under;\n}\n\n/** Spans in markdown hovers need a margin-bottom to avoid looking cramped: https://github.com/microsoft/vscode/issues/101496 **/\n.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents):not(.html-hover-contents) span {\n\tmargin-bottom: 4px;\n\tdisplay: inline-block;\n}\n\n.monaco-hover-content .action-container a {\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t -ms-user-select: none;\n\t     user-select: none;\n}\n\n.monaco-hover-content .action-container.disabled {\n\tpointer-events: none;\n\topacity: 0.4;\n\tcursor: default;\n}\n",""]);const a=r},56388:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* ---------- Icon label ---------- */\n\n.monaco-icon-label {\n\tdisplay: flex; /* required for icons support :before rule */\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.monaco-icon-label::before {\n\n\t/* svg icons rendered as background image */\n\tbackground-size: 16px;\n\tbackground-position: left center;\n\tbackground-repeat: no-repeat;\n\tpadding-right: 6px;\n\twidth: 16px;\n\theight: 22px;\n\tline-height: inherit !important;\n\tdisplay: inline-block;\n\n\t/* fonts icons */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n\tvertical-align: top;\n\n\tflex-shrink: 0; /* fix for https://github.com/microsoft/vscode/issues/13787 */\n}\n\n.monaco-icon-label > .monaco-icon-label-container {\n\tmin-width: 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tflex: 1;\n}\n\n.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name {\n\tcolor: inherit;\n\twhite-space: pre; /* enable to show labels that include multiple whitespaces */\n}\n\n.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name > .label-separator {\n\tmargin: 0 2px;\n\topacity: 0.5;\n}\n\n.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-description-container > .label-description {\n\topacity: .7;\n\tmargin-left: 0.5em;\n\tfont-size: 0.9em;\n\twhite-space: pre; /* enable to show labels that include multiple whitespaces */\n}\n\n.monaco-icon-label.nowrap > .monaco-icon-label-container > .monaco-icon-description-container > .label-description{\n\twhite-space: nowrap\n}\n\n.vs .monaco-icon-label > .monaco-icon-label-container > .monaco-icon-description-container > .label-description {\n\topacity: .95;\n}\n\n.monaco-icon-label.italic > .monaco-icon-label-container > .monaco-icon-name-container > .label-name,\n.monaco-icon-label.italic > .monaco-icon-label-container > .monaco-icon-description-container > .label-description {\n\tfont-style: italic;\n}\n\n.monaco-icon-label.deprecated {\n\ttext-decoration: line-through;\n\topacity: 0.66;\n}\n\n/* make sure apply italic font style to decorations as well */\n.monaco-icon-label.italic::after {\n\tfont-style: italic;\n}\n\n.monaco-icon-label.strikethrough > .monaco-icon-label-container > .monaco-icon-name-container > .label-name,\n.monaco-icon-label.strikethrough > .monaco-icon-label-container > .monaco-icon-description-container > .label-description {\n\ttext-decoration: line-through;\n}\n\n.monaco-icon-label::after {\n\topacity: 0.75;\n\tfont-size: 90%;\n\tfont-weight: 600;\n\tmargin: auto 16px 0 5px; /* https://github.com/microsoft/vscode/issues/113223 */\n\ttext-align: center;\n}\n\n/* make sure selection color wins when a label is being selected */\n.monaco-list:focus .selected .monaco-icon-label, /* list */\n.monaco-list:focus .selected .monaco-icon-label::after\n{\n\tcolor: inherit !important;\n}\n\n.monaco-list-row.focused.selected .label-description,\n.monaco-list-row.selected .label-description {\n\topacity: .8;\n}\n",""]);const a=r},76153:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-inputbox {\n\tposition: relative;\n\tdisplay: block;\n\tpadding: 0;\n\tbox-sizing:\tborder-box;\n\n\t/* Customizable */\n\tfont-size: inherit;\n}\n\n.monaco-inputbox.idle {\n\tborder: 1px solid transparent;\n}\n\n.monaco-inputbox > .ibwrapper > .input,\n.monaco-inputbox > .ibwrapper > .mirror {\n\n\t/* Customizable */\n\tpadding: 4px;\n}\n\n.monaco-inputbox > .ibwrapper {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.monaco-inputbox > .ibwrapper > .input {\n\tdisplay: inline-block;\n\tbox-sizing:\tborder-box;\n\twidth: 100%;\n\theight: 100%;\n\tline-height: inherit;\n\tborder: none;\n\tfont-family: inherit;\n\tfont-size: inherit;\n\tresize: none;\n\tcolor: inherit;\n}\n\n.monaco-inputbox > .ibwrapper > input {\n\ttext-overflow: ellipsis;\n}\n\n.monaco-inputbox > .ibwrapper > textarea.input {\n\tdisplay: block;\n\t-ms-overflow-style: none; /* IE 10+: hide scrollbars */\n\tscrollbar-width: none; /* Firefox: hide scrollbars */\n\toutline: none;\n}\n\n.monaco-inputbox > .ibwrapper > textarea.input::-webkit-scrollbar {\n\tdisplay: none; /* Chrome + Safari: hide scrollbar */\n}\n\n.monaco-inputbox > .ibwrapper > textarea.input.empty {\n\twhite-space: nowrap;\n}\n\n.monaco-inputbox > .ibwrapper > .mirror {\n\tposition: absolute;\n\tdisplay: inline-block;\n\twidth: 100%;\n\ttop: 0;\n\tleft: 0;\n\tbox-sizing: border-box;\n\twhite-space: pre-wrap;\n\tvisibility: hidden;\n\tword-wrap: break-word;\n}\n\n/* Context view */\n\n.monaco-inputbox-container {\n\ttext-align: right;\n}\n\n.monaco-inputbox-container .monaco-inputbox-message {\n\tdisplay: inline-block;\n\toverflow: hidden;\n\ttext-align: left;\n\twidth: 100%;\n\tbox-sizing:\tborder-box;\n\tpadding: 0.4em;\n\tfont-size: 12px;\n\tline-height: 17px;\n\tmargin-top: -1px;\n\tword-wrap: break-word;\n}\n\n/* Action bar support */\n.monaco-inputbox .monaco-action-bar {\n\tposition: absolute;\n\tright: 2px;\n\ttop: 4px;\n}\n\n.monaco-inputbox .monaco-action-bar .action-item {\n\tmargin-left: 2px;\n}\n\n.monaco-inputbox .monaco-action-bar .action-item .codicon {\n\tbackground-repeat: no-repeat;\n\twidth: 16px;\n\theight: 16px;\n}\n",""]);const a=r},80407:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-keybinding {\n\tdisplay: flex;\n\talign-items: center;\n\tline-height: 10px;\n}\n\n.monaco-keybinding > .monaco-keybinding-key {\n\tdisplay: inline-block;\n\tborder-style: solid;\n\tborder-width: 1px;\n\tborder-radius: 3px;\n\tvertical-align: middle;\n\tfont-size: 11px;\n\tpadding: 3px 5px;\n\tmargin: 0 2px;\n}\n\n.monaco-keybinding > .monaco-keybinding-key:first-child {\n\tmargin-left: 0;\n}\n\n.monaco-keybinding > .monaco-keybinding-key:last-child {\n\tmargin-right: 0;\n}\n\n.monaco-keybinding > .monaco-keybinding-key-separator {\n\tdisplay: inline-block;\n}\n\n.monaco-keybinding > .monaco-keybinding-key-chord-separator {\n\twidth: 6px;\n}\n",""]);const a=r},33967:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-list {\n\tposition: relative;\n\theight: 100%;\n\twidth: 100%;\n\twhite-space: nowrap;\n}\n\n.monaco-list.mouse-support {\n\t-moz-user-select: none;\n\t     user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n}\n\n.monaco-list > .monaco-scrollable-element {\n\theight: 100%;\n}\n\n.monaco-list-rows {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.monaco-list.horizontal-scrolling .monaco-list-rows {\n\twidth: auto;\n\tmin-width: 100%;\n}\n\n.monaco-list-row {\n\tposition: absolute;\n\tbox-sizing: border-box;\n\toverflow: hidden;\n\twidth: 100%;\n}\n\n.monaco-list.mouse-support .monaco-list-row {\n\tcursor: pointer;\n\ttouch-action: none;\n}\n\n/* for OS X ballistic scrolling */\n.monaco-list-row.scrolling {\n\tdisplay: none !important;\n}\n\n/* Focus */\n.monaco-list.element-focused,\n.monaco-list.selection-single,\n.monaco-list.selection-multiple {\n\toutline: 0 !important;\n}\n\n/* Dnd */\n.monaco-drag-image {\n\tdisplay: inline-block;\n\tpadding: 1px 7px;\n\tborder-radius: 10px;\n\tfont-size: 12px;\n\tposition: absolute;\n\tz-index: 1000;\n}\n\n/* Type filter */\n\n.monaco-list-type-filter {\n\tdisplay: flex;\n\talign-items: center;\n\tposition: absolute;\n\tborder-radius: 2px;\n\tpadding: 0px 3px;\n\tmax-width: calc(100% - 10px);\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\ttext-align: right;\n\tbox-sizing: border-box;\n\tcursor: all-scroll;\n\tfont-size: 13px;\n\tline-height: 18px;\n\theight: 20px;\n\tz-index: 1;\n\ttop: 4px;\n}\n\n.monaco-list-type-filter.dragging {\n\ttransition: top 0.2s, left 0.2s;\n}\n\n.monaco-list-type-filter.ne {\n\tright: 4px;\n}\n\n.monaco-list-type-filter.nw {\n\tleft: 4px;\n}\n\n.monaco-list-type-filter > .controls {\n\tdisplay: flex;\n\talign-items: center;\n\tbox-sizing: border-box;\n\ttransition: width 0.2s;\n\twidth: 0;\n}\n\n.monaco-list-type-filter.dragging > .controls,\n.monaco-list-type-filter:hover > .controls {\n\twidth: 36px;\n}\n\n.monaco-list-type-filter > .controls > * {\n\tborder: none;\n\tbox-sizing: border-box;\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tbackground: none;\n\twidth: 16px;\n\theight: 16px;\n\tflex-shrink: 0;\n\tmargin: 0;\n\tpadding: 0;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n}\n\n.monaco-list-type-filter > .controls > .filter {\n\tmargin-left: 4px;\n}\n\n.monaco-list-type-filter-message {\n\tposition: absolute;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tpadding: 40px 1em 1em 1em;\n\ttext-align: center;\n\twhite-space: normal;\n\topacity: 0.7;\n\tpointer-events: none;\n}\n\n.monaco-list-type-filter-message:empty {\n\tdisplay: none;\n}\n\n/* Electron */\n\n.monaco-list-type-filter {\n\tcursor: grab;\n}\n\n.monaco-list-type-filter.dragging {\n\tcursor: grabbing;\n}\n",""]);const a=r},64147:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>p});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s),a=i(61667),l=i.n(a),c=new URL(i(4768),i.b),d=new URL(i(35555),i.b),h=r()(o()),u=l()(c),g=l()(d);h.push([e.id,`/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-mouse-cursor-text {\n\tcursor: text;\n}\n\n/* The following selector looks a bit funny, but that is needed to cover all the workbench and the editor!! */\n.vs-dark .mac .monaco-mouse-cursor-text, .hc-black .mac .monaco-mouse-cursor-text,\n.vs-dark.mac .monaco-mouse-cursor-text, .hc-black.mac .monaco-mouse-cursor-text {\n\tcursor: -webkit-image-set(url(${u}) 1x, url(${g}) 2x) 5 8, text;\n}\n`,""]);const p=h},56127:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-progress-container {\n\twidth: 100%;\n\theight: 5px;\n\toverflow: hidden; /* keep progress bit in bounds */\n}\n\n.monaco-progress-container .progress-bit {\n\twidth: 2%;\n\theight: 5px;\n\tposition: absolute;\n\tleft: 0;\n\tdisplay: none;\n}\n\n.monaco-progress-container.active .progress-bit {\n\tdisplay: inherit;\n}\n\n.monaco-progress-container.discrete .progress-bit {\n\tleft: 0;\n\ttransition: width 100ms linear;\n}\n\n.monaco-progress-container.discrete.done .progress-bit {\n\twidth: 100%;\n}\n\n.monaco-progress-container.infinite .progress-bit {\n\tanimation-name: progress;\n\tanimation-duration: 4s;\n\tanimation-iteration-count: infinite;\n\tanimation-timing-function: linear;\n\ttransform: translate3d(0px, 0px, 0px);\n}\n\n/**\n * The progress bit has a width: 2% (1/50) of the parent container. The animation moves it from 0% to 100% of\n * that container. Since translateX is relative to the progress bit size, we have to multiple it with\n * its relative size to the parent container:\n * parent width: 5000%\n *    bit width: 100%\n * translateX should be as follow:\n *  50%: 5000% * 50% - 50% (set to center) = 2450%\n * 100%: 5000% * 100% - 100% (do not overflow) = 4900%\n */\n@keyframes progress { from { transform: translateX(0%) scaleX(1) } 50% { transform: translateX(2500%) scaleX(3) } to { transform: translateX(4900%) scaleX(1) } }\n",""]);const a=r},19667:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n:root {\n\t--sash-size: 4px;\n}\n\n.monaco-sash {\n\tposition: absolute;\n\tz-index: 35;\n\ttouch-action: none;\n}\n\n.monaco-sash.disabled {\n\tpointer-events: none;\n}\n\n.monaco-sash.mac.vertical {\n\tcursor: col-resize;\n}\n\n.monaco-sash.vertical.minimum {\n\tcursor: e-resize;\n}\n\n.monaco-sash.vertical.maximum {\n\tcursor: w-resize;\n}\n\n.monaco-sash.mac.horizontal {\n\tcursor: row-resize;\n}\n\n.monaco-sash.horizontal.minimum {\n\tcursor: s-resize;\n}\n\n.monaco-sash.horizontal.maximum {\n\tcursor: n-resize;\n}\n\n.monaco-sash.disabled {\n\tcursor: default !important;\n\tpointer-events: none !important;\n}\n\n.monaco-sash.vertical {\n\tcursor: ew-resize;\n\ttop: 0;\n\twidth: var(--sash-size);\n\theight: 100%;\n}\n\n.monaco-sash.horizontal {\n\tcursor: ns-resize;\n\tleft: 0;\n\twidth: 100%;\n\theight: var(--sash-size);\n}\n\n.monaco-sash:not(.disabled) > .orthogonal-drag-handle {\n\tcontent: \" \";\n\theight: calc(var(--sash-size) * 2);\n\twidth: calc(var(--sash-size) * 2);\n\tz-index: 100;\n\tdisplay: block;\n\tcursor: all-scroll;\n\tposition: absolute;\n}\n\n.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)\n\t> .orthogonal-drag-handle.start,\n.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)\n\t> .orthogonal-drag-handle.end {\n\tcursor: nwse-resize;\n}\n\n.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)\n\t> .orthogonal-drag-handle.end,\n.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)\n\t> .orthogonal-drag-handle.start {\n\tcursor: nesw-resize;\n}\n\n.monaco-sash.vertical > .orthogonal-drag-handle.start {\n\tleft: calc(var(--sash-size) * -0.5);\n\ttop: calc(var(--sash-size) * -1);\n}\n.monaco-sash.vertical > .orthogonal-drag-handle.end {\n\tleft: calc(var(--sash-size) * -0.5);\n\tbottom: calc(var(--sash-size) * -1);\n}\n.monaco-sash.horizontal > .orthogonal-drag-handle.start {\n\ttop: calc(var(--sash-size) * -0.5);\n\tleft: calc(var(--sash-size) * -1);\n}\n.monaco-sash.horizontal > .orthogonal-drag-handle.end {\n\ttop: calc(var(--sash-size) * -0.5);\n\tright: calc(var(--sash-size) * -1);\n}\n\n.monaco-sash:before {\n\tcontent: '';\n\tpointer-events: none;\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\ttransition: background-color 0.1s ease-out;\n\tbackground: transparent;\n}\n\n.monaco-sash.vertical:before {\n\twidth: var(--sash-hover-size);\n\tleft: calc(50% - (var(--sash-hover-size) / 2));\n}\n\n.monaco-sash.horizontal:before {\n\theight: var(--sash-hover-size);\n\ttop: calc(50% - (var(--sash-hover-size) / 2));\n}\n\n/** Debug **/\n\n.monaco-sash.debug {\n\tbackground: cyan;\n}\n\n.monaco-sash.debug.disabled {\n\tbackground: rgba(0, 255, 255, 0.2);\n}\n\n.monaco-sash.debug:not(.disabled) > .orthogonal-drag-handle {\n\tbackground: red;\n}\n",""]);const a=r},51022:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Arrows */\n.monaco-scrollable-element > .scrollbar > .scra {\n\tcursor: pointer;\n\tfont-size: 11px !important;\n}\n\n.monaco-scrollable-element > .visible {\n\topacity: 1;\n\n\t/* Background rule added for IE9 - to allow clicks on dom node */\n\tbackground:rgba(0,0,0,0);\n\n\ttransition: opacity 100ms linear;\n}\n.monaco-scrollable-element > .invisible {\n\topacity: 0;\n\tpointer-events: none;\n}\n.monaco-scrollable-element > .invisible.fade {\n\ttransition: opacity 800ms linear;\n}\n\n/* Scrollable Content Inset Shadow */\n.monaco-scrollable-element > .shadow {\n\tposition: absolute;\n\tdisplay: none;\n}\n.monaco-scrollable-element > .shadow.top {\n\tdisplay: block;\n\ttop: 0;\n\tleft: 3px;\n\theight: 3px;\n\twidth: 100%;\n}\n.monaco-scrollable-element > .shadow.left {\n\tdisplay: block;\n\ttop: 3px;\n\tleft: 0;\n\theight: 100%;\n\twidth: 3px;\n}\n.monaco-scrollable-element > .shadow.top-left-corner {\n\tdisplay: block;\n\ttop: 0;\n\tleft: 0;\n\theight: 3px;\n\twidth: 3px;\n}\n",""]);const a=r},5785:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-split-view2 {\n\tposition: relative;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.monaco-split-view2 > .sash-container {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tpointer-events: none;\n}\n\n.monaco-split-view2 > .sash-container > .monaco-sash {\n\tpointer-events: initial;\n}\n\n.monaco-split-view2 > .monaco-scrollable-element {\n\twidth: 100%;\n\theight: 100%;\n}\n\n.monaco-split-view2 > .monaco-scrollable-element > .split-view-container {\n\twidth: 100%;\n\theight: 100%;\n\twhite-space: nowrap;\n\tposition: relative;\n}\n\n.monaco-split-view2 > .monaco-scrollable-element > .split-view-container > .split-view-view {\n\twhite-space: initial;\n\tposition: absolute;\n}\n\n.monaco-split-view2 > .monaco-scrollable-element > .split-view-container > .split-view-view:not(.visible) {\n\tdisplay: none;\n}\n\n.monaco-split-view2.vertical > .monaco-scrollable-element > .split-view-container > .split-view-view {\n\twidth: 100%;\n}\n\n.monaco-split-view2.horizontal > .monaco-scrollable-element > .split-view-container > .split-view-view {\n\theight: 100%;\n}\n\n.monaco-split-view2.separator-border > .monaco-scrollable-element > .split-view-container > .split-view-view:not(:first-child)::before {\n\tcontent: ' ';\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tz-index: 5;\n\tpointer-events: none;\n\tbackground-color: var(--separator-border);\n}\n\n.monaco-split-view2.separator-border.horizontal > .monaco-scrollable-element > .split-view-container > .split-view-view:not(:first-child)::before {\n\theight: 100%;\n\twidth: 1px;\n}\n\n.monaco-split-view2.separator-border.vertical > .monaco-scrollable-element > .split-view-container > .split-view-view:not(:first-child)::before {\n\theight: 1px;\n\twidth: 100%;\n}\n",""]);const a=r},39771:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,'/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-table {\n\tdisplay: flex;\n\tflex-direction: column;\n\tposition: relative;\n\theight: 100%;\n\twidth: 100%;\n\twhite-space: nowrap;\n}\n\n.monaco-table > .monaco-split-view2 {\n\tborder-bottom: 1px solid transparent;\n}\n\n.monaco-table > .monaco-list {\n\tflex: 1;\n}\n\n.monaco-table-tr {\n\tdisplay: flex;\n\theight: 100%;\n}\n\n.monaco-table-th {\n\twidth: 100%;\n\theight: 100%;\n\tfont-weight: bold;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.monaco-table-th,\n.monaco-table-td {\n\tbox-sizing: border-box;\n\tflex-shrink: 0;\n\toverflow: hidden;\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n}\n\n.monaco-table > .monaco-split-view2 .monaco-sash.vertical::before {\n\tcontent: "";\n\tposition: absolute;\n\tleft: calc(var(--sash-size) / 2);\n\twidth: 0;\n\tborder-left: 1px solid transparent;\n}\n\n.monaco-table > .monaco-split-view2,\n.monaco-table > .monaco-split-view2 .monaco-sash.vertical::before {\n\ttransition: border-color 0.2s ease-out;\n}\n/*\n.monaco-table:hover > .monaco-split-view2,\n.monaco-table:hover > .monaco-split-view2 .monaco-sash.vertical::before {\n\tborder-color: rgba(204, 204, 204, 0.2);\n} */\n',""]);const a=r},90078:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-tl-row {\n\tdisplay: flex;\n\theight: 100%;\n\talign-items: center;\n\tposition: relative;\n}\n\n.monaco-tl-indent {\n\theight: 100%;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 16px;\n\tpointer-events: none;\n}\n\n.hide-arrows .monaco-tl-indent {\n\tleft: 12px;\n}\n\n.monaco-tl-indent > .indent-guide {\n\tdisplay: inline-block;\n\tbox-sizing: border-box;\n\theight: 100%;\n\tborder-left: 1px solid transparent;\n\ttransition: border-color 0.1s linear;\n}\n\n.monaco-tl-twistie,\n.monaco-tl-contents {\n\theight: 100%;\n}\n\n.monaco-tl-twistie {\n\tfont-size: 10px;\n\ttext-align: right;\n\tpadding-right: 6px;\n\tflex-shrink: 0;\n\twidth: 16px;\n\tdisplay: flex !important;\n\talign-items: center;\n\tjustify-content: center;\n\ttransform: translateX(3px);\n}\n\n.monaco-tl-contents {\n\tflex: 1;\n\toverflow: hidden;\n}\n\n.monaco-tl-twistie::before {\n\tborder-radius: 20px;\n}\n\n.monaco-tl-twistie.collapsed::before {\n\ttransform: rotate(-90deg);\n}\n\n.monaco-tl-twistie.codicon-tree-item-loading::before {\n\t/* Use steps to throttle FPS to reduce CPU usage */\n\tanimation: codicon-spin 1.25s steps(30) infinite;\n}\n",""]);const a=r},82749:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.quick-input-widget {\n\tposition: absolute;\n\twidth: 600px;\n\tz-index: 2000;\n\tpadding: 0 1px 1px 1px;\n\tleft: 50%;\n\tmargin-left: -300px;\n}\n\n.quick-input-titlebar {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.quick-input-left-action-bar {\n\tdisplay: flex;\n\tmargin-left: 4px;\n\tflex: 1;\n}\n\n.quick-input-title {\n\tpadding: 3px 0px;\n\ttext-align: center;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n\n.quick-input-right-action-bar {\n\tdisplay: flex;\n\tmargin-right: 4px;\n\tflex: 1;\n}\n\n.quick-input-right-action-bar > .actions-container {\n\tjustify-content: flex-end;\n}\n\n.quick-input-titlebar .monaco-action-bar .action-label.codicon {\n\tbackground-position: center;\n\tbackground-repeat: no-repeat;\n\tpadding: 2px;\n}\n\n.quick-input-description {\n\tmargin: 6px;\n}\n\n.quick-input-header .quick-input-description {\n\tmargin: 4px 2px;\n}\n\n.quick-input-header {\n\tdisplay: flex;\n\tpadding: 6px 6px 0px 6px;\n\tmargin-bottom: -2px;\n}\n\n.quick-input-widget.hidden-input .quick-input-header {\n\t/* reduce margins and paddings when input box hidden */\n\tpadding: 0;\n\tmargin-bottom: 0;\n}\n\n.quick-input-and-message {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex-grow: 1;\n\tmin-width: 0;\n\tposition: relative;\n}\n\n.quick-input-check-all {\n\talign-self: center;\n\tmargin: 0;\n}\n\n.quick-input-filter {\n\tflex-grow: 1;\n\tdisplay: flex;\n\tposition: relative;\n}\n\n.quick-input-box {\n\tflex-grow: 1;\n}\n\n.quick-input-widget.show-checkboxes .quick-input-box,\n.quick-input-widget.show-checkboxes .quick-input-message {\n\tmargin-left: 5px;\n}\n\n.quick-input-visible-count {\n\tposition: absolute;\n\tleft: -10000px;\n}\n\n.quick-input-count {\n\talign-self: center;\n\tposition: absolute;\n\tright: 4px;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.quick-input-count .monaco-count-badge {\n\tvertical-align: middle;\n\tpadding: 2px 4px;\n\tborder-radius: 2px;\n\tmin-height: auto;\n\tline-height: normal;\n}\n\n.quick-input-action {\n\tmargin-left: 6px;\n}\n\n.quick-input-action .monaco-text-button {\n\tfont-size: 11px;\n\tpadding: 0 6px;\n\tdisplay: flex;\n\theight: 27.5px;\n\talign-items: center;\n}\n\n.quick-input-message {\n\tmargin-top: -1px;\n\tpadding: 5px 5px 2px 5px;\n\toverflow-wrap: break-word;\n}\n\n.quick-input-message > .codicon {\n\tmargin: 0 0.2em;\n\tvertical-align: text-bottom;\n}\n\n.quick-input-progress.monaco-progress-container {\n\tposition: relative;\n}\n\n.quick-input-progress.monaco-progress-container,\n.quick-input-progress.monaco-progress-container .progress-bit {\n\theight: 2px;\n}\n\n.quick-input-list {\n\tline-height: 22px;\n\tmargin-top: 6px;\n}\n\n.quick-input-widget.hidden-input .quick-input-list {\n\tmargin-top: 0; /* reduce margins when input box hidden */\n}\n\n.quick-input-list .monaco-list {\n\toverflow: hidden;\n\tmax-height: calc(20 * 22px);\n}\n\n.quick-input-list .quick-input-list-entry {\n\tbox-sizing: border-box;\n\toverflow: hidden;\n\tdisplay: flex;\n\theight: 100%;\n\tpadding: 0 6px;\n}\n\n.quick-input-list .quick-input-list-entry.quick-input-list-separator-border {\n\tborder-top-width: 1px;\n\tborder-top-style: solid;\n}\n\n.quick-input-list .monaco-list-row[data-index=\"0\"] .quick-input-list-entry.quick-input-list-separator-border {\n\tborder-top-style: none;\n}\n\n.quick-input-list .quick-input-list-label {\n\toverflow: hidden;\n\tdisplay: flex;\n\theight: 100%;\n\tflex: 1;\n}\n\n.quick-input-list .quick-input-list-checkbox {\n\talign-self: center;\n\tmargin: 0;\n}\n\n.quick-input-list .quick-input-list-rows {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n\tflex: 1;\n\tmargin-left: 5px;\n}\n\n.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-rows {\n\tmargin-left: 10px;\n}\n\n.quick-input-widget .quick-input-list .quick-input-list-checkbox {\n\tdisplay: none;\n}\n.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-checkbox {\n\tdisplay: inline;\n}\n\n.quick-input-list .quick-input-list-rows > .quick-input-list-row {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.quick-input-list .quick-input-list-rows > .quick-input-list-row .monaco-icon-label,\n.quick-input-list .quick-input-list-rows > .quick-input-list-row .monaco-icon-label .monaco-icon-label-container > .monaco-icon-name-container {\n\tflex: 1; /* make sure the icon label grows within the row */\n}\n\n.quick-input-list .quick-input-list-rows > .quick-input-list-row .codicon[class*='codicon-'] {\n\tvertical-align: text-bottom;\n}\n\n.quick-input-list .quick-input-list-rows .monaco-highlighted-label span {\n\topacity: 1;\n}\n\n.quick-input-list .quick-input-list-entry .quick-input-list-entry-keybinding {\n\tmargin-right: 8px; /* separate from the separator label or scrollbar if any */\n}\n\n.quick-input-list .quick-input-list-label-meta {\n\topacity: 0.7;\n\tline-height: normal;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n\n.quick-input-list .monaco-highlighted-label .highlight {\n\tfont-weight: bold;\n}\n\n.quick-input-list .quick-input-list-entry .quick-input-list-separator {\n\tmargin-right: 8px; /* separate from keybindings or actions */\n}\n\n.quick-input-list .quick-input-list-entry-action-bar {\n\tdisplay: flex;\n\tflex: 0;\n\toverflow: visible;\n}\n\n.quick-input-list .quick-input-list-entry-action-bar .action-label {\n\t/*\n\t * By default, actions in the quick input action bar are hidden\n\t * until hovered over them or selected.\n\t */\n\tdisplay: none;\n}\n\n.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon {\n\tmargin-right: 4px;\n\tpadding: 0px 2px 2px 2px;\n}\n\n.quick-input-list .quick-input-list-entry-action-bar {\n\tmargin-top: 1px;\n\tmargin-right: 4px; /* separate from scrollbar */\n}\n\n.quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible,\n.quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label,\n.quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label {\n\tdisplay: flex;\n}\n\n/* focused items in quick pick */\n.quick-input-list .monaco-list-row.focused .monaco-keybinding-key,\n.quick-input-list .monaco-list-row.focused .quick-input-list-entry .quick-input-list-separator {\n\tcolor: inherit\n}\n.quick-input-list .monaco-list-row.focused .monaco-keybinding-key {\n\tbackground: none;\n}\n",""]);const a=r},22729:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .inputarea {\n\tmin-width: 0;\n\tmin-height: 0;\n\tmargin: 0;\n\tpadding: 0;\n\tposition: absolute;\n\toutline: none !important;\n\tresize: none;\n\tborder: none;\n\toverflow: hidden;\n\tcolor: transparent;\n\tbackground-color: transparent;\n}\n/*.monaco-editor .inputarea {\n\tposition: fixed !important;\n\twidth: 800px !important;\n\theight: 500px !important;\n\ttop: initial !important;\n\tleft: initial !important;\n\tbottom: 0 !important;\n\tright: 0 !important;\n\tcolor: black !important;\n\tbackground: white !important;\n\tline-height: 15px !important;\n\tfont-size: 14px !important;\n}*/\n.monaco-editor .inputarea.ime-input {\n\tz-index: 10;\n}\n",""]);const a=r},67615:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .view-overlays .current-line {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tbox-sizing: border-box;\n}\n\n.monaco-editor .margin-view-overlays .current-line {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tbox-sizing: border-box;\n}\n\n.monaco-editor .margin-view-overlays .current-line.current-line-margin.current-line-margin-both {\n\tborder-right: 0;\n}\n",""]);const a=r},32429:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/*\n\tKeeping name short for faster parsing.\n\tcdr = core decorations rendering (div)\n*/\n.monaco-editor .lines-content .cdr {\n\tposition: absolute;\n}",""]);const a=r},84891:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .glyph-margin {\n\tposition: absolute;\n\ttop: 0;\n}\n\n/*\n\tKeeping name short for faster parsing.\n\tcgmr = core glyph margin rendering (div)\n*/\n.monaco-editor .margin-view-overlays .cgmr {\n\tposition: absolute;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n",""]);const a=r},52073:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .lines-content .core-guide {\n\tposition: absolute;\n\tbox-sizing: border-box;\n}\n",""]);const a=r},1715:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .margin-view-overlays .line-numbers {\n\tfont-variant-numeric: tabular-nums;\n\tposition: absolute;\n\ttext-align: right;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tbox-sizing: border-box;\n\tcursor: default;\n\theight: 100%;\n}\n\n.monaco-editor .relative-current-line-number {\n\ttext-align: left;\n\tdisplay: inline-block;\n\twidth: 100%;\n}\n\n.monaco-editor .margin-view-overlays .line-numbers.lh-odd {\n\tmargin-top: 1px;\n}\n",""]);const a=r},19523:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Uncomment to see lines flashing when they're painted */\n/*.monaco-editor .view-lines > .view-line {\n\tbackground-color: none;\n\tanimation-name: flash-background;\n\tanimation-duration: 800ms;\n}\n@keyframes flash-background {\n\t0%   { background-color: lightgreen; }\n\t100% { background-color: none }\n}*/\n\n.mtkcontrol {\n\tcolor: rgb(255, 255, 255) !important;\n\tbackground: rgb(150, 0, 0) !important;\n}\n\n.monaco-editor.no-user-select .lines-content,\n.monaco-editor.no-user-select .view-line,\n.monaco-editor.no-user-select .view-lines {\n\t-moz-user-select: none;\n\t     user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n}\n\n.monaco-editor .view-lines {\n\twhite-space: nowrap;\n}\n\n.monaco-editor .view-line {\n\tposition: absolute;\n\twidth: 100%;\n}\n\n.monaco-editor .mtkz {\n\tdisplay: inline-block;\n}\n\n/* TODO@tokenization bootstrap fix */\n/*.monaco-editor .view-line > span > span {\n\tfloat: none;\n\tmin-height: inherit;\n\tmargin-left: inherit;\n}*/\n",""]);const a=r},55228:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n.monaco-editor .lines-decorations {\n\tposition: absolute;\n\ttop: 0;\n\tbackground: white;\n}\n\n/*\n\tKeeping name short for faster parsing.\n\tcldr = core lines decorations rendering (div)\n*/\n.monaco-editor .margin-view-overlays .cldr {\n\tposition: absolute;\n\theight: 100%;\n}",""]);const a=r},63490:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/*\n\tKeeping name short for faster parsing.\n\tcmdr = core margin decorations rendering (div)\n*/\n.monaco-editor .margin-view-overlays .cmdr {\n\tposition: absolute;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}",""]);const a=r},27751:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* START cover the case that slider is visible on mouseover */\n.monaco-editor .minimap.slider-mouseover .minimap-slider {\n\topacity: 0;\n\ttransition: opacity 100ms linear;\n}\n.monaco-editor .minimap.slider-mouseover:hover .minimap-slider {\n\topacity: 1;\n}\n.monaco-editor .minimap.slider-mouseover .minimap-slider.active {\n\topacity: 1;\n}\n/* END cover the case that slider is visible on mouseover */\n\n.monaco-editor .minimap-shadow-hidden {\n\tposition: absolute;\n\twidth: 0;\n}\n.monaco-editor .minimap-shadow-visible {\n\tposition: absolute;\n\tleft: -6px;\n\twidth: 6px;\n}\n.monaco-editor.no-minimap-shadow .minimap-shadow-visible {\n\tposition: absolute;\n\tleft: -1px;\n\twidth: 1px;\n}\n",""]);const a=r},57789:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n.monaco-editor .overlayWidgets {\n\tposition: absolute;\n\ttop: 0;\n\tleft:0;\n}",""]);const a=r},97073:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .view-ruler {\n\tposition: absolute;\n\ttop: 0;\n}",""]);const a=r},30458:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .scroll-decoration {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\theight: 6px;\n}",""]);const a=r},43147:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/*\n\tKeeping name short for faster parsing.\n\tcslr = core selections layer rendering (div)\n*/\n.monaco-editor .lines-content .cslr {\n\tposition: absolute;\n}\n\n.monaco-editor\t\t\t.top-left-radius\t\t{ border-top-left-radius: 3px; }\n.monaco-editor\t\t\t.bottom-left-radius\t\t{ border-bottom-left-radius: 3px; }\n.monaco-editor\t\t\t.top-right-radius\t\t{ border-top-right-radius: 3px; }\n.monaco-editor\t\t\t.bottom-right-radius\t{ border-bottom-right-radius: 3px; }\n\n.monaco-editor.hc-black .top-left-radius\t\t{ border-top-left-radius: 0; }\n.monaco-editor.hc-black .bottom-left-radius\t\t{ border-bottom-left-radius: 0; }\n.monaco-editor.hc-black .top-right-radius\t\t{ border-top-right-radius: 0; }\n.monaco-editor.hc-black .bottom-right-radius\t{ border-bottom-right-radius: 0; }\n",""]);const a=r},26649:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n.monaco-editor .cursors-layer {\n\tposition: absolute;\n\ttop: 0;\n}\n\n.monaco-editor .cursors-layer > .cursor {\n\tposition: absolute;\n\toverflow: hidden;\n}\n\n/* -- smooth-caret-animation -- */\n.monaco-editor .cursors-layer.cursor-smooth-caret-animation > .cursor {\n\ttransition: all 80ms;\n}\n\n/* -- block-outline-style -- */\n.monaco-editor .cursors-layer.cursor-block-outline-style > .cursor {\n\tbox-sizing: border-box;\n\tbackground: transparent !important;\n\tborder-style: solid;\n\tborder-width: 1px;\n}\n\n/* -- underline-style -- */\n.monaco-editor .cursors-layer.cursor-underline-style > .cursor {\n\tborder-bottom-width: 2px;\n\tborder-bottom-style: solid;\n\tbackground: transparent !important;\n\tbox-sizing: border-box;\n}\n\n/* -- underline-thin-style -- */\n.monaco-editor .cursors-layer.cursor-underline-thin-style > .cursor {\n\tborder-bottom-width: 1px;\n\tborder-bottom-style: solid;\n\tbackground: transparent !important;\n\tbox-sizing: border-box;\n}\n\n@keyframes monaco-cursor-smooth {\n\t0%,\n\t20% {\n\t\topacity: 1;\n\t}\n\t60%,\n\t100% {\n\t\topacity: 0;\n\t}\n}\n\n@keyframes monaco-cursor-phase {\n\t0%,\n\t20% {\n\t\topacity: 1;\n\t}\n\t90%,\n\t100% {\n\t\topacity: 0;\n\t}\n}\n\n@keyframes monaco-cursor-expand {\n\t0%,\n\t20% {\n\t\ttransform: scaleY(1);\n\t}\n\t80%,\n\t100% {\n\t\ttransform: scaleY(0);\n\t}\n}\n\n.cursor-smooth {\n\tanimation: monaco-cursor-smooth 0.5s ease-in-out 0s 20 alternate;\n}\n\n.cursor-phase {\n\tanimation: monaco-cursor-phase 0.5s ease-in-out 0s 20 alternate;\n}\n\n.cursor-expand > .cursor {\n\tanimation: monaco-cursor-expand 0.5s ease-in-out 0s 20 alternate;\n}\n",""]);const a=r},61927:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/* ---------- DiffEditor ---------- */\n\n.monaco-diff-editor .diffOverview {\n\tz-index: 9;\n}\n\n.monaco-diff-editor .diffOverview .diffViewport {\n\tz-index: 10;\n}\n\n/* colors not externalized: using transparancy on background */\n.monaco-diff-editor.vs\t\t\t.diffOverview { background: rgba(0, 0, 0, 0.03); }\n.monaco-diff-editor.vs-dark\t\t.diffOverview { background: rgba(255, 255, 255, 0.01); }\n\n.monaco-scrollable-element.modified-in-monaco-diff-editor.vs\t\t.scrollbar { background: rgba(0,0,0,0); }\n.monaco-scrollable-element.modified-in-monaco-diff-editor.vs-dark\t.scrollbar { background: rgba(0,0,0,0); }\n.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-black\t.scrollbar { background: none; }\n\n.monaco-scrollable-element.modified-in-monaco-diff-editor .slider {\n\tz-index: 10;\n}\n.modified-in-monaco-diff-editor\t\t\t\t.slider.active { background: rgba(171, 171, 171, .4); }\n.modified-in-monaco-diff-editor.hc-black\t.slider.active { background: none; }\n\n/* ---------- Diff ---------- */\n\n.monaco-editor .insert-sign,\n.monaco-diff-editor .insert-sign,\n.monaco-editor .delete-sign,\n.monaco-diff-editor .delete-sign {\n\tfont-size: 11px !important;\n\topacity: 0.7 !important;\n\tdisplay: flex !important;\n\talign-items: center;\n}\n.monaco-editor.hc-black .insert-sign,\n.monaco-diff-editor.hc-black .insert-sign,\n.monaco-editor.hc-black .delete-sign,\n.monaco-diff-editor.hc-black .delete-sign {\n\topacity: 1;\n}\n\n.monaco-editor .inline-deleted-margin-view-zone {\n\ttext-align: right;\n}\n.monaco-editor .inline-added-margin-view-zone {\n\ttext-align: right;\n}\n\n/* ---------- Inline Diff ---------- */\n\n.monaco-editor .view-zones .view-lines .view-line span {\n\tdisplay: inline-block;\n}\n\n.monaco-editor .margin-view-zones .lightbulb-glyph:hover {\n\tcursor: pointer;\n}\n",""]);const a=r},44914:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-diff-editor .diff-review-line-number {\n\ttext-align: right;\n\tdisplay: inline-block;\n}\n\n.monaco-diff-editor .diff-review {\n\tposition: absolute;\n\t-moz-user-select: none;\n\t     user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n}\n\n.monaco-diff-editor .diff-review-summary {\n\tpadding-left: 10px;\n}\n\n.monaco-diff-editor .diff-review-shadow {\n\tposition: absolute;\n}\n\n.monaco-diff-editor .diff-review-row {\n\twhite-space: pre;\n}\n\n.monaco-diff-editor .diff-review-table {\n\tdisplay: table;\n\tmin-width: 100%;\n}\n\n.monaco-diff-editor .diff-review-row {\n\tdisplay: table-row;\n\twidth: 100%;\n}\n\n.monaco-diff-editor .diff-review-spacer {\n\tdisplay: inline-block;\n\twidth: 10px;\n\tvertical-align: middle;\n}\n\n.monaco-diff-editor .diff-review-spacer > .codicon {\n\tfont-size: 9px !important;\n}\n\n.monaco-diff-editor .diff-review-actions {\n\tdisplay: inline-block;\n\tposition: absolute;\n\tright: 10px;\n\ttop: 2px;\n}\n\n.monaco-diff-editor .diff-review-actions .action-label {\n\twidth: 16px;\n\theight: 16px;\n\tmargin: 2px 0;\n}\n",""]);const a=r},89783:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* -------------------- IE10 remove auto clear button -------------------- */\n\n::-ms-clear {\n\tdisplay: none;\n}\n\n/* All widgets */\n/* I am not a big fan of this rule */\n.monaco-editor .editor-widget input {\n\tcolor: inherit;\n}\n\n/* -------------------- Editor -------------------- */\n\n.monaco-editor {\n\tposition: relative;\n\toverflow: visible;\n\t-webkit-text-size-adjust: 100%;\n}\n\n/* -------------------- Misc -------------------- */\n\n.monaco-editor .overflow-guard {\n\tposition: relative;\n\toverflow: hidden;\n}\n\n.monaco-editor .view-overlays {\n\tposition: absolute;\n\ttop: 0;\n}\n\n/*\n.monaco-editor .auto-closed-character {\n\topacity: 0.3;\n}\n*/\n",""]);const a=r},5952:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .selection-anchor {\n\tbackground-color: #007ACC;\n\twidth: 2px !important;\n}\n",""]);const a=r},20300:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .bracket-match {\n\tbox-sizing: border-box;\n}\n",""]);const a=r},33856:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .contentWidgets .codicon-light-bulb,\n.monaco-editor .contentWidgets .codicon-lightbulb-autofix {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.monaco-editor .contentWidgets .codicon-light-bulb:hover,\n.monaco-editor .contentWidgets .codicon-lightbulb-autofix:hover {\n\tcursor: pointer;\n}\n",""]);const a=r},98616:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .codelens-decoration {\n\toverflow: hidden;\n\tdisplay: inline-block;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.monaco-editor .codelens-decoration > span,\n.monaco-editor .codelens-decoration > a {\n\t-moz-user-select: none;\n\t     user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\twhite-space: nowrap;\n\tvertical-align: sub;\n}\n\n.monaco-editor .codelens-decoration > a {\n\ttext-decoration: none;\n}\n\n.monaco-editor .codelens-decoration > a:hover {\n\tcursor: pointer;\n}\n\n.monaco-editor .codelens-decoration .codicon {\n\tvertical-align: middle;\n\tcolor: currentColor !important;\n}\n\n.monaco-editor .codelens-decoration > a:hover .codicon::before {\n\tcursor: pointer;\n}\n\n@keyframes fadein {\n\t0% { opacity: 0; visibility: visible;}\n\t100% { opacity: 1; }\n}\n\n.monaco-editor .codelens-decoration.fadein {\n\tanimation: fadein 0.1s linear;\n}\n",""]);const a=r},64176:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>u});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s),a=i(61667),l=i.n(a),c=new URL(i(94748),i.b),d=r()(o()),h=l()(c);d.push([e.id,`/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.colorpicker-widget {\n\theight: 190px;\n\t-moz-user-select: none;\n\t     user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n}\n\n.monaco-editor .colorpicker-hover:focus {\n\toutline: none;\n}\n\n\n/* Header */\n\n.colorpicker-header {\n\tdisplay: flex;\n\theight: 24px;\n\tposition: relative;\n\tbackground: url(${h});\n\tbackground-size: 9px 9px;\n\t-ms-interpolation-mode: nearest-neighbor;\n\t    image-rendering: pixelated;\n}\n\n.colorpicker-header .picked-color {\n\twidth: 216px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tline-height: 24px;\n\tcursor: pointer;\n\tcolor: white;\n\tflex: 1;\n}\n\n.colorpicker-header .picked-color .codicon {\n\tcolor: inherit;\n\tfont-size: 14px;\n\tposition: absolute;\n\tleft: 8px;\n}\n\n.colorpicker-header .picked-color.light {\n\tcolor: black;\n}\n\n.colorpicker-header .original-color {\n\twidth: 74px;\n\tz-index: inherit;\n\tcursor: pointer;\n}\n\n\n/* Body */\n\n.colorpicker-body {\n\tdisplay: flex;\n\tpadding: 8px;\n\tposition: relative;\n}\n\n.colorpicker-body .saturation-wrap {\n\toverflow: hidden;\n\theight: 150px;\n\tposition: relative;\n\tmin-width: 220px;\n\tflex: 1;\n}\n\n.colorpicker-body .saturation-box {\n\theight: 150px;\n\tposition: absolute;\n}\n\n.colorpicker-body .saturation-selection {\n\twidth: 9px;\n\theight: 9px;\n\tmargin: -5px 0 0 -5px;\n\tborder: 1px solid rgb(255, 255, 255);\n\tborder-radius: 100%;\n\tbox-shadow: 0px 0px 2px rgba(0, 0, 0, 0.8);\n\tposition: absolute;\n}\n\n.colorpicker-body .strip {\n\twidth: 25px;\n\theight: 150px;\n}\n\n.colorpicker-body .hue-strip {\n\tposition: relative;\n\tmargin-left: 8px;\n\tcursor: grab;\n\tbackground: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n}\n\n.colorpicker-body .opacity-strip {\n\tposition: relative;\n\tmargin-left: 8px;\n\tcursor: grab;\n\tbackground: url(${h});\n\tbackground-size: 9px 9px;\n\t-ms-interpolation-mode: nearest-neighbor;\n\t    image-rendering: pixelated;\n}\n\n.colorpicker-body .strip.grabbing {\n\tcursor: grabbing;\n}\n\n.colorpicker-body .slider {\n\tposition: absolute;\n\ttop: 0;\n\tleft: -2px;\n\twidth: calc(100% + 4px);\n\theight: 4px;\n\tbox-sizing: border-box;\n\tborder: 1px solid rgba(255, 255, 255, 0.71);\n\tbox-shadow: 0px 0px 1px rgba(0, 0, 0, 0.85);\n}\n\n.colorpicker-body .strip .overlay {\n\theight: 150px;\n\tpointer-events: none;\n}\n`,""]);const u=d},41221:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor.vs .dnd-target {\n\tborder-right: 2px dotted black;\n\tcolor: white; /* opposite of black */\n}\n.monaco-editor.vs-dark .dnd-target {\n\tborder-right: 2px dotted #AEAFAD;\n\tcolor: #51504f; /* opposite of #AEAFAD */\n}\n.monaco-editor.hc-black .dnd-target {\n\tborder-right: 2px dotted #fff;\n\tcolor: #000; /* opposite of #fff */\n}\n\n.monaco-editor.mouse-default .view-lines,\n.monaco-editor.vs-dark.mac.mouse-default .view-lines,\n.monaco-editor.hc-black.mac.mouse-default .view-lines {\n\tcursor: default;\n}\n.monaco-editor.mouse-copy .view-lines,\n.monaco-editor.vs-dark.mac.mouse-copy .view-lines,\n.monaco-editor.hc-black.mac.mouse-copy .view-lines {\n\tcursor: copy;\n}",""]);const a=r},11897:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Find widget */\n.monaco-editor .find-widget {\n\tposition: absolute;\n\tz-index: 35;\n\theight: 33px;\n\toverflow: hidden;\n\tline-height: 19px;\n\ttransition: transform 200ms linear;\n\tpadding: 0 4px;\n\tbox-sizing: border-box;\n\ttransform: translateY(calc(-100% - 10px)); /* shadow (10px) */\n}\n\n.monaco-editor .find-widget textarea {\n\tmargin: 0px;\n}\n\n.monaco-editor .find-widget.hiddenEditor {\n\tdisplay: none;\n}\n\n/* Find widget when replace is toggled on */\n.monaco-editor .find-widget.replaceToggled > .replace-part {\n\tdisplay: flex;\n}\n\n.monaco-editor .find-widget.visible  {\n\ttransform: translateY(0);\n}\n\n.monaco-editor .find-widget .monaco-inputbox.synthetic-focus {\n\toutline: 1px solid -webkit-focus-ring-color;\n\toutline-offset: -1px;\n}\n\n.monaco-editor .find-widget .monaco-inputbox .input {\n\tbackground-color: transparent;\n\tmin-height: 0;\n}\n\n.monaco-editor .find-widget .monaco-findInput .input {\n\tfont-size: 13px;\n}\n\n.monaco-editor .find-widget > .find-part,\n.monaco-editor .find-widget > .replace-part {\n\tmargin: 4px 0 0 17px;\n\tfont-size: 12px;\n\tdisplay: flex;\n}\n\n.monaco-editor .find-widget > .find-part .monaco-inputbox,\n.monaco-editor .find-widget > .replace-part .monaco-inputbox {\n\tmin-height: 25px;\n}\n\n\n.monaco-editor .find-widget > .replace-part .monaco-inputbox > .ibwrapper > .mirror {\n\tpadding-right: 22px;\n}\n\n.monaco-editor .find-widget > .find-part .monaco-inputbox > .ibwrapper > .input,\n.monaco-editor .find-widget > .find-part .monaco-inputbox > .ibwrapper > .mirror,\n.monaco-editor .find-widget > .replace-part .monaco-inputbox > .ibwrapper > .input,\n.monaco-editor .find-widget > .replace-part .monaco-inputbox > .ibwrapper > .mirror {\n\tpadding-top: 2px;\n\tpadding-bottom: 2px;\n}\n\n.monaco-editor .find-widget > .find-part .find-actions {\n\theight: 25px;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-editor .find-widget > .replace-part .replace-actions {\n\theight: 25px;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-editor .find-widget .monaco-findInput {\n\tvertical-align: middle;\n\tdisplay: flex;\n\tflex:1;\n}\n\n.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element {\n\t/* Make sure textarea inherits the width correctly */\n\twidth: 100%;\n}\n\n.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element .scrollbar.vertical {\n\t/* Hide vertical scrollbar */\n\topacity: 0;\n}\n\n.monaco-editor .find-widget .matchesCount {\n\tdisplay: flex;\n\tflex: initial;\n\tmargin: 0 0 0 3px;\n\tpadding: 2px 0 0 2px;\n\theight: 25px;\n\tvertical-align: middle;\n\tbox-sizing: border-box;\n\ttext-align: center;\n\tline-height: 23px;\n}\n\n.monaco-editor .find-widget .button {\n\twidth: 16px;\n\theight: 16px;\n\tpadding: 3px;\n\tborder-radius: 5px;\n\tflex: initial;\n\tmargin-left: 3px;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\tcursor: pointer;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n/* find in selection button */\n.monaco-editor .find-widget .codicon-find-selection {\n\twidth: 22px;\n\theight: 22px;\n\tpadding: 3px;\n\tborder-radius: 5px;\n}\n\n.monaco-editor .find-widget .button.left {\n\tmargin-left: 0;\n\tmargin-right: 3px;\n}\n\n.monaco-editor .find-widget .button.wide {\n\twidth: auto;\n\tpadding: 1px 6px;\n\ttop: -1px;\n}\n\n.monaco-editor .find-widget .button.toggle {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 3px;\n\twidth: 18px;\n\theight: 100%;\n\tborder-radius: 0;\n\tbox-sizing: border-box;\n}\n\n.monaco-editor .find-widget .button.toggle.disabled {\n\tdisplay: none;\n}\n\n.monaco-editor .find-widget .disabled {\n\topacity: 0.3;\n\tcursor: default;\n}\n\n.monaco-editor .find-widget > .replace-part {\n\tdisplay: none;\n}\n\n.monaco-editor .find-widget > .replace-part > .monaco-findInput {\n\tposition: relative;\n\tdisplay: flex;\n\tvertical-align: middle;\n\tflex: auto;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n}\n\n.monaco-editor .find-widget > .replace-part > .monaco-findInput > .controls {\n\tposition: absolute;\n\ttop: 3px;\n\tright: 2px;\n}\n\n/* REDUCED */\n.monaco-editor .find-widget.reduced-find-widget .matchesCount {\n\tdisplay:none;\n}\n\n/* NARROW (SMALLER THAN REDUCED) */\n.monaco-editor .find-widget.narrow-find-widget {\n\tmax-width: 257px !important;\n}\n\n/* COLLAPSED (SMALLER THAN NARROW) */\n.monaco-editor .find-widget.collapsed-find-widget {\n\tmax-width: 170px !important;\n}\n\n.monaco-editor .find-widget.collapsed-find-widget .button.previous,\n.monaco-editor .find-widget.collapsed-find-widget .button.next,\n.monaco-editor .find-widget.collapsed-find-widget .button.replace,\n.monaco-editor .find-widget.collapsed-find-widget .button.replace-all,\n.monaco-editor .find-widget.collapsed-find-widget > .find-part .monaco-findInput .controls {\n\tdisplay:none;\n}\n\n.monaco-editor .findMatch {\n\tanimation-duration: 0;\n\tanimation-name: inherit !important;\n}\n\n.monaco-editor .find-widget .monaco-sash {\n\tleft: 0 !important;\n}\n\n.monaco-editor.hc-black .find-widget .button:before {\n\tposition: relative;\n\ttop: 1px;\n\tleft: 2px;\n}\n",""]);const a=r},88830:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,'/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .margin-view-overlays .codicon-folding-expanded,\n.monaco-editor .margin-view-overlays .codicon-folding-collapsed {\n\tcursor: pointer;\n\topacity: 0;\n\ttransition: opacity 0.5s;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: 140%;\n\tmargin-left: 2px;\n}\n\n.monaco-editor .margin-view-overlays:hover .codicon,\n.monaco-editor .margin-view-overlays .codicon.codicon-folding-collapsed,\n.monaco-editor .margin-view-overlays .codicon.alwaysShowFoldIcons {\n\topacity: 1;\n}\n\n.monaco-editor .inline-folded:after {\n\tcolor: grey;\n\tmargin: 0.1em 0.2em 0 0.2em;\n\tcontent: "â‹¯";\n\tdisplay: inline;\n\tline-height: 1em;\n\tcursor: pointer;\n}\n',""]);const a=r},36310:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* marker zone */\n\n.monaco-editor .peekview-widget .head .peekview-title .severity-icon {\n\tdisplay: inline-block;\n\tvertical-align: text-top;\n\tmargin-right: 4px;\n}\n\n.monaco-editor .marker-widget {\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.monaco-editor .marker-widget > .stale {\n\topacity: 0.6;\n\tfont-style: italic;\n}\n\n.monaco-editor .marker-widget .title {\n\tdisplay: inline-block;\n\tpadding-right: 5px;\n}\n\n.monaco-editor .marker-widget .descriptioncontainer {\n\tposition: absolute;\n\twhite-space: pre;\n\t-moz-user-select: text;\n\t     user-select: text;\n\t-webkit-user-select: text;\n\t-ms-user-select: text;\n\tpadding: 8px 12px 0 20px;\n}\n\n.monaco-editor .marker-widget .descriptioncontainer .message {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.monaco-editor .marker-widget .descriptioncontainer .message .details {\n\tpadding-left: 6px;\n}\n\n.monaco-editor .marker-widget .descriptioncontainer .message .source,\n.monaco-editor .marker-widget .descriptioncontainer .message span.code {\n\topacity: 0.6;\n}\n\n.monaco-editor .marker-widget .descriptioncontainer .message a.code-link {\n\topacity: 0.6;\n\tcolor: inherit;\n}\n\n.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:before {\n\tcontent: '(';\n}\n\n.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:after {\n\tcontent: ')';\n}\n\n.monaco-editor .marker-widget .descriptioncontainer .message a.code-link > span {\n\ttext-decoration: underline;\n\t/** Hack to force underline to show **/\n\tborder-bottom: 1px solid transparent;\n\ttext-underline-position: under;\n}\n\n.monaco-editor .marker-widget .descriptioncontainer .filename {\n\tcursor: pointer;\n}\n",""]);const a=r},45291:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .goto-definition-link {\n\ttext-decoration: underline;\n\tcursor: pointer;\n}",""]);const a=r},70835:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* -- zone widget */\n.monaco-editor .zone-widget .zone-widget-container.reference-zone-widget {\n\tborder-top-width: 1px;\n\tborder-bottom-width: 1px;\n}\n\n.monaco-editor .reference-zone-widget .inline {\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n\n.monaco-editor .reference-zone-widget .messages {\n\theight: 100%;\n\twidth: 100%;\n\ttext-align: center;\n\tpadding: 3em 0;\n}\n\n.monaco-editor .reference-zone-widget .ref-tree {\n\tline-height: 23px;\n}\n\n.monaco-editor .reference-zone-widget .ref-tree .reference {\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n\n.monaco-editor .reference-zone-widget .ref-tree .reference-file {\n\tdisplay: inline-flex;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .selected .reference-file {\n\tcolor: inherit !important;\n}\n\n.monaco-editor .reference-zone-widget .ref-tree .reference-file .count {\n\tmargin-right: 12px;\n\tmargin-left: auto;\n}\n\n/* High Contrast Theming */\n\n.monaco-editor.hc-black .reference-zone-widget .ref-tree .reference-file {\n\tfont-weight: bold;\n}\n",""]);const a=r},20074:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .suggest-preview-additional-widget {\n\twhite-space: nowrap;\n}\n\n.monaco-editor .suggest-preview-additional-widget .content-spacer {\n\tcolor: transparent;\n\twhite-space: pre;\n}\n\n.monaco-editor .suggest-preview-additional-widget .button {\n\tdisplay: inline-block;\n\tcursor: pointer;\n\ttext-decoration: underline;\n\ttext-underline-position: under;\n}\n\n.monaco-editor .ghost-text-hidden {\n\topacity: 0;\n\tfont-size: 0;\n}\n\n.monaco-editor .ghost-text-decoration {\n\tfont-style: italic;\n}\n\n.monaco-editor .suggest-preview-text {\n\tfont-style: italic;\n}\n",""]);const a=r},7547:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n.monaco-editor .detected-link,\n.monaco-editor .detected-link-active {\n\ttext-decoration: underline;\n\ttext-underline-position: under;\n}\n\n.monaco-editor .detected-link-active {\n\tcursor: pointer;\n}\n",""]);const a=r},23565:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .monaco-editor-overlaymessage {\n\tpadding-bottom: 8px;\n\tz-index: 10000;\n}\n\n.monaco-editor .monaco-editor-overlaymessage.below {\n\tpadding-bottom: 0;\n\tpadding-top: 8px;\n\tz-index: 10000;\n}\n\n@keyframes fadeIn {\n\tfrom { opacity: 0; }\n\tto { opacity: 1; }\n}\n.monaco-editor .monaco-editor-overlaymessage.fadeIn {\n\tanimation: fadeIn 150ms ease-out;\n}\n\n@keyframes fadeOut {\n\tfrom { opacity: 1; }\n\tto { opacity: 0; }\n}\n.monaco-editor .monaco-editor-overlaymessage.fadeOut {\n\tanimation: fadeOut 100ms ease-out;\n}\n\n.monaco-editor .monaco-editor-overlaymessage .message {\n\tpadding: 1px 4px;\n}\n\n.monaco-editor .monaco-editor-overlaymessage .anchor {\n\twidth: 0 !important;\n\theight: 0 !important;\n\tborder-color: transparent;\n\tborder-style: solid;\n\tz-index: 1000;\n\tborder-width: 8px;\n\tposition: absolute;\n}\n\n.monaco-editor .monaco-editor-overlaymessage:not(.below) .anchor.top,\n.monaco-editor .monaco-editor-overlaymessage.below .anchor.below {\n\tdisplay: none;\n}\n\n.monaco-editor .monaco-editor-overlaymessage.below .anchor.top {\n\tdisplay: inherit;\n\ttop: -8px;\n}\n",""]);const a=r},8955:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .parameter-hints-widget {\n\tz-index: 10;\n\tdisplay: flex;\n\tflex-direction: column;\n\tline-height: 1.5em;\n}\n\n.monaco-editor .parameter-hints-widget > .phwrapper {\n\tmax-width: 440px;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.monaco-editor .parameter-hints-widget.multiple {\n\tmin-height: 3.3em;\n\tpadding: 0;\n}\n\n.monaco-editor .parameter-hints-widget.visible {\n\ttransition: left .05s ease-in-out;\n}\n\n.monaco-editor .parameter-hints-widget p,\n.monaco-editor .parameter-hints-widget ul {\n\tmargin: 8px 0;\n}\n\n.monaco-editor .parameter-hints-widget .monaco-scrollable-element,\n.monaco-editor .parameter-hints-widget .body {\n\tdisplay: flex;\n\tflex: 1;\n\tflex-direction: column;\n\tmin-height: 100%;\n}\n\n.monaco-editor .parameter-hints-widget .signature {\n\tpadding: 4px 5px;\n}\n\n.monaco-editor .parameter-hints-widget .docs {\n\tpadding: 0 10px 0 5px;\n\twhite-space: pre-wrap;\n}\n\n.monaco-editor .parameter-hints-widget .docs.empty {\n\tdisplay: none;\n}\n\n.monaco-editor .parameter-hints-widget .docs .markdown-docs {\n\twhite-space: initial;\n}\n\n.monaco-editor .parameter-hints-widget .docs .markdown-docs code {\n\tfont-family: var(--monaco-monospace-font);\n}\n\n.monaco-editor .parameter-hints-widget .docs .code {\n\twhite-space: pre-wrap;\n}\n\n.monaco-editor .parameter-hints-widget .docs code {\n\tborder-radius: 3px;\n\tpadding: 0 0.4em;\n}\n\n.monaco-editor .parameter-hints-widget .controls {\n\tdisplay: none;\n\tflex-direction: column;\n\talign-items: center;\n\tmin-width: 22px;\n\tjustify-content: flex-end;\n}\n\n.monaco-editor .parameter-hints-widget.multiple .controls {\n\tdisplay: flex;\n\tpadding: 0 2px;\n}\n\n.monaco-editor .parameter-hints-widget.multiple .button {\n\twidth: 16px;\n\theight: 16px;\n\tbackground-repeat: no-repeat;\n\tcursor: pointer;\n}\n\n.monaco-editor .parameter-hints-widget .button.previous {\n\tbottom: 24px;\n}\n\n.monaco-editor .parameter-hints-widget .overloads {\n\ttext-align: center;\n\theight: 12px;\n\tline-height: 12px;\n\topacity: 0.5;\n\tfont-family: var(--monaco-monospace-font);\n}\n\n.monaco-editor .parameter-hints-widget .signature .parameter.active {\n\tfont-weight: bold;\n}\n\n.monaco-editor .parameter-hints-widget .documentation-parameter > .parameter {\n\tfont-weight: bold;\n\tmargin-right: 0.5em;\n}\n",""]);const a=r},62384:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .peekview-widget .head {\n\tbox-sizing: border-box;\n\tdisplay: flex;\n}\n\n.monaco-editor .peekview-widget .head .peekview-title {\n\tdisplay: flex;\n\talign-items: center;\n\tfont-size: 13px;\n\tmargin-left: 20px;\n\tmin-width: 0;\n}\n\n.monaco-editor .peekview-widget .head .peekview-title.clickable {\n\tcursor: pointer;\n}\n\n.monaco-editor .peekview-widget .head .peekview-title .dirname:not(:empty) {\n\tfont-size: 0.9em;\n\tmargin-left: 0.5em;\n}\n\n.monaco-editor .peekview-widget .head .peekview-title .meta {\n\twhite-space: nowrap;\n}\n\n.monaco-editor .peekview-widget .head .peekview-title .dirname {\n\twhite-space: nowrap;\n}\n\n.monaco-editor .peekview-widget .head .peekview-title .filename {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.monaco-editor .peekview-widget .head .peekview-title .meta:not(:empty)::before {\n\tcontent: '-';\n\tpadding: 0 0.3em;\n}\n\n.monaco-editor .peekview-widget .head .peekview-actions {\n\tflex: 1;\n\ttext-align: right;\n\tpadding-right: 2px;\n}\n\n.monaco-editor .peekview-widget .head .peekview-actions > .monaco-action-bar {\n\tdisplay: inline-block;\n}\n\n.monaco-editor .peekview-widget .head .peekview-actions > .monaco-action-bar,\n.monaco-editor .peekview-widget .head .peekview-actions > .monaco-action-bar > .actions-container {\n\theight: 100%;\n}\n\n.monaco-editor .peekview-widget > .body {\n\tborder-top: 1px solid;\n\tposition: relative;\n}\n\n.monaco-editor .peekview-widget .head .peekview-title .codicon {\n\tmargin-right: 4px;\n}\n\n.monaco-editor .peekview-widget .monaco-list .monaco-list-row.focused .codicon {\n\tcolor: inherit !important;\n}\n",""]);const a=r},57255:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .rename-box {\n\tz-index: 100;\n\tcolor: inherit;\n}\n\n.monaco-editor .rename-box.preview {\n\tpadding: 3px 3px 0 3px;\n}\n\n.monaco-editor .rename-box .rename-input {\n\tpadding: 3px;\n\twidth: calc(100% - 6px);\n}\n\n.monaco-editor .rename-box .rename-label {\n\tdisplay: none;\n\topacity: .8;\n}\n\n.monaco-editor .rename-box.preview .rename-label {\n\tdisplay: inherit;\n}\n",""]);const a=r},50695:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .snippet-placeholder {\n\tmin-width: 2px;\n\toutline-style: solid;\n\toutline-width: 1px;\n}\n\n.monaco-editor .finish-snippet-placeholder {\n\toutline-style: solid;\n\toutline-width: 1px;\n}\n",""]);const a=r},41948:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n/* Suggest widget*/\n\n.monaco-editor .suggest-widget {\n\twidth: 430px;\n\tz-index: 40;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.monaco-editor .suggest-widget.message {\n\tflex-direction: row;\n\talign-items: center;\n}\n\n.monaco-editor .suggest-widget,\n.monaco-editor .suggest-details {\n\tflex: 0 1 auto;\n\twidth: 100%;\n\tborder-style: solid;\n\tborder-width: 1px;\n}\n\n.monaco-editor.hc-black .suggest-widget,\n.monaco-editor.hc-black .suggest-details {\n\tborder-width: 2px;\n}\n\n/* Styles for status bar part */\n\n\n.monaco-editor .suggest-widget .suggest-status-bar {\n\tbox-sizing: border-box;\n\tdisplay: none;\n\tflex-flow: row nowrap;\n\tjustify-content: space-between;\n\twidth: 100%;\n\tfont-size: 80%;\n\tpadding: 0 4px 0 4px;\n\tborder-top: 1px solid transparent;\n\toverflow: hidden;\n}\n\n.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar {\n\tdisplay: flex;\n}\n\n.monaco-editor .suggest-widget .suggest-status-bar .left {\n\tpadding-right: 8px;\n}\n\n.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-label {\n\topacity: 0.5;\n\tcolor: inherit;\n}\n\n.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label {\n\tmargin-right: 0;\n}\n\n.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label::after {\n\tcontent: ', ';\n\tmargin-right: 0.3em;\n}\n\n.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore,\n.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore {\n\tdisplay: none;\n}\n\n.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label {\n\twidth: 100%;\n}\n\n/* Styles for Message element for when widget is loading or is empty */\n\n.monaco-editor .suggest-widget>.message {\n\tpadding-left: 22px;\n}\n\n/** Styles for the list element **/\n\n.monaco-editor .suggest-widget>.tree {\n\theight: 100%;\n\twidth: 100%;\n}\n\n.monaco-editor .suggest-widget .monaco-list {\n\t-moz-user-select: none;\n\t     user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n}\n\n/** Styles for each row in the list element **/\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row {\n\tdisplay: flex;\n\t-mox-box-sizing: border-box;\n\tbox-sizing: border-box;\n\tpadding-right: 10px;\n\tbackground-repeat: no-repeat;\n\tbackground-position: 2px 2px;\n\twhite-space: nowrap;\n\tcursor: pointer;\n\ttouch-action: none;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents {\n\tflex: 1;\n\theight: 100%;\n\toverflow: hidden;\n\tpadding-left: 2px;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main {\n\tdisplay: flex;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: pre;\n\tjustify-content: space-between;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left, .monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right {\n\tdisplay: flex;\n}\n\n.monaco-editor .suggest-widget:not(.frozen) .monaco-highlighted-label .highlight {\n\tfont-weight: bold;\n}\n\n/** ReadMore Icon styles **/\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close,\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore::before {\n\tcolor: inherit;\n\topacity: 1;\n\tfont-size: 14px;\n\tcursor: pointer;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close {\n\tposition: absolute;\n\ttop: 6px;\n\tright: 2px;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close:hover,\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:hover {\n\topacity: 1;\n}\n\n/** signature, qualifier, type/details opacity **/\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label {\n\topacity: 0.7;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\topacity: 0.6;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label {\n\tmargin-left: 12px;\n\topacity: 0.4;\n\tfont-size: 85%;\n\tline-height: initial;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\talign-self: center;\n}\n\n/** Type Info and icon next to the label in the focused completion item **/\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label {\n\tfont-size: 85%;\n\tmargin-left: 1.1em;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source {\n\tdisplay: inline;\n}\n\n/** Details: if using CompletionItem#details, show on focus **/\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label {\n\tdisplay: none;\n}\n\n.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label {\n\tdisplay: inline;\n}\n\n/** Details: if using CompletionItemLabel#details, always show **/\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label,\n.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label {\n\tdisplay: inline;\n}\n\n/** Ellipsis on hover **/\n\n.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label {\n\twidth: calc(100% - 26px);\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left {\n\tflex-shrink: 1;\n\tflex-grow: 1;\n\toverflow: hidden;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label {\n\tflex-shrink: 0;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label {\n\tmax-width: 100%;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label {\n\tflex-shrink: 1;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right {\n\toverflow: hidden;\n\tflex-shrink: 4;\n\tmax-width: 70%;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore {\n\tdisplay: inline-block;\n\tposition: absolute;\n\tright: 10px;\n\twidth: 18px;\n\theight: 18px;\n\tvisibility: hidden;\n}\n\n/** Do NOT display ReadMore when docs is side/below **/\n\n.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore, .monaco-editor .suggest-widget.docs-below .monaco-list .monaco-list-row>.contents>.main>.right>.readMore {\n\tdisplay: none !important;\n}\n\n/** Do NOT display ReadMore when using plain CompletionItemLabel (details/documentation might not be resolved) **/\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.right>.readMore {\n\tdisplay: none;\n}\n\n/** Focused item can show ReadMore, but can't when docs is side/below **/\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore {\n\tdisplay: inline-block;\n}\n\n.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore,\n.monaco-editor .suggest-widget.docs-below .monaco-list .monaco-list-row>.contents>.main>.right>.readMore {\n\tdisplay: none;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row:hover>.contents>.main>.right>.readMore {\n\tvisibility: visible;\n}\n\n/** Styles for each row in the list **/\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated {\n\topacity: 0.66;\n\ttext-decoration: unset;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container {\n\ttext-decoration: line-through;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label::before {\n\theight: 100%;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon {\n\tdisplay: block;\n\theight: 16px;\n\twidth: 16px;\n\tmargin-left: 2px;\n\tbackground-repeat: no-repeat;\n\tbackground-size: 80%;\n\tbackground-position: center;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.hide {\n\tdisplay: none;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row .suggest-icon {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-right: 4px;\n}\n\n.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .icon, .monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .suggest-icon::before {\n\tdisplay: none;\n}\n\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.customcolor .colorspan {\n\tmargin: 0 0 0 0.3em;\n\tborder: 0.1em solid #000;\n\twidth: 0.7em;\n\theight: 0.7em;\n\tdisplay: inline-block;\n}\n\n/** Styles for the docs of the completion item in focus **/\n\n.monaco-editor .suggest-details-container {\n\tz-index: 41;\n}\n\n.monaco-editor .suggest-details {\n\tdisplay: flex;\n\tflex-direction: column;\n\tcursor: default;\n}\n\n.monaco-editor .suggest-details.no-docs {\n\tdisplay: none;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element {\n\tflex: 1;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body {\n\tbox-sizing: border-box;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type {\n\tflex: 2;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\topacity: 0.7;\n\twhite-space: pre;\n\tmargin: 0 24px 0 0;\n\tpadding: 4px 0 12px 5px;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type.auto-wrap {\n\twhite-space: normal;\n\tword-break: break-all;\n}\n\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs {\n\tmargin: 0;\n\tpadding: 4px 5px;\n\twhite-space: pre-wrap;\n}\n\n.monaco-editor .suggest-details.no-type>.monaco-scrollable-element>.body>.docs {\n\tmargin-right: 24px;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs {\n\tpadding: 0;\n\twhite-space: initial;\n\tmin-height: calc(1rem + 8px);\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div,\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>span:not(:empty) {\n\tpadding: 4px 5px;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:first-child {\n\tmargin-top: 0;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:last-child {\n\tmargin-bottom: 0;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .monaco-tokenized-source {\n\twhite-space: pre;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs .code {\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .codicon {\n\tvertical-align: sub;\n}\n\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>p:empty {\n\tdisplay: none;\n}\n\n.monaco-editor .suggest-details code {\n\tborder-radius: 3px;\n\tpadding: 0 0.4em;\n}\n\n.monaco-editor .suggest-details ul {\n\tpadding-left: 20px;\n}\n\n.monaco-editor .suggest-details ol {\n\tpadding-left: 20px;\n}\n\n.monaco-editor .suggest-details p code {\n\tfont-family: var(--monaco-monospace-font);\n}\n",""]);const a=r},26993:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n.monaco-editor .zone-widget {\n\tposition: absolute;\n\tz-index: 10;\n}\n\n\n.monaco-editor .zone-widget .zone-widget-container {\n\tborder-top-style: solid;\n\tborder-bottom-style: solid;\n\tborder-top-width: 0;\n\tborder-bottom-width: 0;\n\tposition: relative;\n}\n",""]);const a=r},6916:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .accessibilityHelpWidget {\n\tpadding: 10px;\n\tvertical-align: middle;\n\toverflow: scroll;\n}",""]);const a=r},44825:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>p});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s),a=i(61667),l=i.n(a),c=new URL(i(6161),i.b),d=new URL(i(51096),i.b),h=r()(o()),u=l()(c),g=l()(d);h.push([e.id,`/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .iPadShowKeyboard {\n\twidth: 58px;\n\tmin-width: 0;\n\theight: 36px;\n\tmin-height: 0;\n\tmargin: 0;\n\tpadding: 0;\n\tposition: absolute;\n\tresize: none;\n\toverflow: hidden;\n\tbackground: url(${u}) center center no-repeat;\n\tborder: 4px solid #F6F6F6;\n\tborder-radius: 4px;\n}\n\n.monaco-editor.vs-dark .iPadShowKeyboard {\n\tbackground: url(${g}) center center no-repeat;\n\tborder: 4px solid #252526;\n}`,""]);const p=h},63523:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-editor .tokens-inspect-widget {\n\tz-index: 50;\n\t-moz-user-select: text;\n\t     user-select: text;\n\t-webkit-user-select: text;\n\t-ms-user-select: text;\n\tpadding: 10px;\n}\n\n.tokens-inspect-separator {\n\theight: 1px;\n\tborder: 0;\n}\n\n.monaco-editor .tokens-inspect-widget .tm-token {\n\tfont-family: var(--monaco-monospace-font);\n}\n\n.monaco-editor .tokens-inspect-widget .tm-token-length {\n\tfont-weight: normal;\n\tfont-size: 60%;\n\tfloat: right;\n}\n\n.monaco-editor .tokens-inspect-widget .tm-metadata-table {\n\twidth: 100%;\n}\n\n.monaco-editor .tokens-inspect-widget .tm-metadata-value {\n\tfont-family: var(--monaco-monospace-font);\n\ttext-align: right;\n}\n\n.monaco-editor .tokens-inspect-widget .tm-token-type {\n\tfont-family: var(--monaco-monospace-font);\n}\n",""]);const a=r},52674:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.quick-input-widget {\n\tfont-size: 13px;\n}\n\n.quick-input-widget .monaco-highlighted-label .highlight,\n.quick-input-widget .monaco-highlighted-label .highlight {\n\tcolor: #0066BF;\n}\n\n.vs .quick-input-widget .monaco-list-row.focused .monaco-highlighted-label .highlight,\n.vs .quick-input-widget .monaco-list-row.focused .monaco-highlighted-label .highlight {\n\tcolor: #9DDDFF;\n}\n\n.vs-dark .quick-input-widget .monaco-highlighted-label .highlight,\n.vs-dark .quick-input-widget .monaco-highlighted-label .highlight {\n\tcolor: #0097fb;\n}\n\n.hc-black .quick-input-widget .monaco-highlighted-label .highlight,\n.hc-black .quick-input-widget .monaco-highlighted-label .highlight {\n\tcolor: #F38518;\n}\n\n.monaco-keybinding > .monaco-keybinding-key {\n\tbackground-color: rgba(221, 221, 221, 0.4);\n\tborder: solid 1px rgba(204, 204, 204, 0.4);\n\tborder-bottom-color: rgba(187, 187, 187, 0.4);\n\tbox-shadow: inset 0 -1px 0 rgba(187, 187, 187, 0.4);\n\tcolor: #555;\n}\n\n.hc-black .monaco-keybinding > .monaco-keybinding-key {\n\tbackground-color: transparent;\n\tborder: solid 1px rgb(111, 195, 223);\n\tbox-shadow: none;\n\tcolor: #fff;\n}\n\n.vs-dark .monaco-keybinding > .monaco-keybinding-key {\n\tbackground-color: rgba(128, 128, 128, 0.17);\n\tborder: solid 1px rgba(51, 51, 51, 0.6);\n\tborder-bottom-color: rgba(68, 68, 68, 0.6);\n\tbox-shadow: inset 0 -1px 0 rgba(68, 68, 68, 0.6);\n\tcolor: #ccc;\n}\n",""]);const a=r},12450:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,'/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\n/* Default standalone editor fonts */\n.monaco-editor {\n\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "HelveticaNeue-Light", system-ui, "Ubuntu", "Droid Sans", sans-serif;\n\t--monaco-monospace-font: "SF Mono", Monaco, Menlo, Consolas, "Ubuntu Mono", "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label {\n\tstroke-width: 1.2px;\n}\n\n.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,\n.monaco-editor.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label {\n\tstroke-width: 1.2px;\n}\n\n.monaco-hover p {\n\tmargin: 0;\n}\n\n/* See https://github.com/microsoft/monaco-editor/issues/2168#issuecomment-780078600 */\n.monaco-aria-container {\n\tposition: absolute !important;\n\ttop: 0; /* avoid being placed underneath a sibling element */\n\theight: 1px;\n\twidth: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tclip: rect(1px, 1px, 1px, 1px);\n\t-webkit-clip-path: inset(50%);\n\t        clip-path: inset(50%);\n}\n\n/* The hc-black theme is already high contrast optimized */\n.monaco-editor.hc-black {\n\t-ms-high-contrast-adjust: none;\n}\n/* In case the browser goes into high contrast mode and the editor is not configured with the hc-black theme */\n@media screen and (-ms-high-contrast:active) {\n\n\t/* current line highlight */\n\t.monaco-editor.vs .view-overlays .current-line,\n\t.monaco-editor.vs-dark .view-overlays .current-line {\n\t\tborder-color: windowtext !important;\n\t\tborder-left: 0;\n\t\tborder-right: 0;\n\t}\n\n\t/* view cursors */\n\t.monaco-editor.vs .cursor,\n\t.monaco-editor.vs-dark .cursor {\n\t\tbackground-color: windowtext !important;\n\t}\n\t/* dnd target */\n\t.monaco-editor.vs .dnd-target,\n\t.monaco-editor.vs-dark .dnd-target {\n\t\tborder-color: windowtext !important;\n\t}\n\n\t/* selected text background */\n\t.monaco-editor.vs .selected-text,\n\t.monaco-editor.vs-dark .selected-text {\n\t\tbackground-color: highlight !important;\n\t}\n\n\t/* allow the text to have a transparent background. */\n\t.monaco-editor.vs .view-line,\n\t.monaco-editor.vs-dark .view-line {\n\t\t-ms-high-contrast-adjust: none;\n\t}\n\n\t/* text color */\n\t.monaco-editor.vs .view-line span,\n\t.monaco-editor.vs-dark .view-line span {\n\t\tcolor: windowtext !important;\n\t}\n\t/* selected text color */\n\t.monaco-editor.vs .view-line span.inline-selected-text,\n\t.monaco-editor.vs-dark .view-line span.inline-selected-text {\n\t\tcolor: highlighttext !important;\n\t}\n\n\t/* allow decorations */\n\t.monaco-editor.vs .view-overlays,\n\t.monaco-editor.vs-dark .view-overlays {\n\t\t-ms-high-contrast-adjust: none;\n\t}\n\n\t/* various decorations */\n\t.monaco-editor.vs .selectionHighlight,\n\t.monaco-editor.vs-dark .selectionHighlight,\n\t.monaco-editor.vs .wordHighlight,\n\t.monaco-editor.vs-dark .wordHighlight,\n\t.monaco-editor.vs .wordHighlightStrong,\n\t.monaco-editor.vs-dark .wordHighlightStrong,\n\t.monaco-editor.vs .reference-decoration,\n\t.monaco-editor.vs-dark .reference-decoration {\n\t\tborder: 2px dotted highlight !important;\n\t\tbackground: transparent !important;\n\t\tbox-sizing: border-box;\n\t}\n\t.monaco-editor.vs .rangeHighlight,\n\t.monaco-editor.vs-dark .rangeHighlight {\n\t\tbackground: transparent !important;\n\t\tborder: 1px dotted activeborder !important;\n\t\tbox-sizing: border-box;\n\t}\n\t.monaco-editor.vs .bracket-match,\n\t.monaco-editor.vs-dark .bracket-match {\n\t\tborder-color: windowtext !important;\n\t\tbackground: transparent !important;\n\t}\n\n\t/* find widget */\n\t.monaco-editor.vs .findMatch,\n\t.monaco-editor.vs-dark .findMatch,\n\t.monaco-editor.vs .currentFindMatch,\n\t.monaco-editor.vs-dark .currentFindMatch {\n\t\tborder: 2px dotted activeborder !important;\n\t\tbackground: transparent !important;\n\t\tbox-sizing: border-box;\n\t}\n\t.monaco-editor.vs .find-widget,\n\t.monaco-editor.vs-dark .find-widget {\n\t\tborder: 1px solid windowtext;\n\t}\n\n\t/* list - used by suggest widget */\n\t.monaco-editor.vs .monaco-list .monaco-list-row,\n\t.monaco-editor.vs-dark .monaco-list .monaco-list-row {\n\t\t-ms-high-contrast-adjust: none;\n\t\tcolor: windowtext !important;\n\t}\n\t.monaco-editor.vs .monaco-list .monaco-list-row.focused,\n\t.monaco-editor.vs-dark .monaco-list .monaco-list-row.focused {\n\t\tcolor: highlighttext !important;\n\t\tbackground-color: highlight !important;\n\t}\n\t.monaco-editor.vs .monaco-list .monaco-list-row:hover,\n\t.monaco-editor.vs-dark .monaco-list .monaco-list-row:hover {\n\t\tbackground: transparent !important;\n\t\tborder: 1px solid highlight;\n\t\tbox-sizing: border-box;\n\t}\n\n\t/* scrollbars */\n\t.monaco-editor.vs .monaco-scrollable-element > .scrollbar,\n\t.monaco-editor.vs-dark .monaco-scrollable-element > .scrollbar {\n\t\t-ms-high-contrast-adjust: none;\n\t\tbackground: background !important;\n\t\tborder: 1px solid windowtext;\n\t\tbox-sizing: border-box;\n\t}\n\t.monaco-editor.vs .monaco-scrollable-element > .scrollbar > .slider,\n\t.monaco-editor.vs-dark .monaco-scrollable-element > .scrollbar > .slider {\n\t\tbackground: windowtext !important;\n\t}\n\t.monaco-editor.vs .monaco-scrollable-element > .scrollbar > .slider:hover,\n\t.monaco-editor.vs-dark .monaco-scrollable-element > .scrollbar > .slider:hover {\n\t\tbackground: highlight !important;\n\t}\n\t.monaco-editor.vs .monaco-scrollable-element > .scrollbar > .slider.active,\n\t.monaco-editor.vs-dark .monaco-scrollable-element > .scrollbar > .slider.active {\n\t\tbackground: highlight !important;\n\t}\n\n\t/* overview ruler */\n\t.monaco-editor.vs .decorationsOverviewRuler,\n\t.monaco-editor.vs-dark .decorationsOverviewRuler {\n\t\topacity: 0;\n\t}\n\n\t/* minimap */\n\t.monaco-editor.vs .minimap,\n\t.monaco-editor.vs-dark .minimap {\n\t\tdisplay: none;\n\t}\n\n\t/* squiggles */\n\t.monaco-editor.vs .squiggly-d-error,\n\t.monaco-editor.vs-dark .squiggly-d-error {\n\t\tbackground: transparent !important;\n\t\tborder-bottom: 4px double #E47777;\n\t}\n\t.monaco-editor.vs .squiggly-c-warning,\n\t.monaco-editor.vs-dark .squiggly-c-warning {\n\t\tborder-bottom: 4px double #71B771;\n\t}\n\t.monaco-editor.vs .squiggly-b-info,\n\t.monaco-editor.vs-dark .squiggly-b-info {\n\t\tborder-bottom: 4px double #71B771;\n\t}\n\t.monaco-editor.vs .squiggly-a-hint,\n\t.monaco-editor.vs-dark .squiggly-a-hint {\n\t\tborder-bottom: 4px double #6c6c6c;\n\t}\n\n\t/* contextmenu */\n\t.monaco-editor.vs .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,\n\t.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label {\n\t\t-ms-high-contrast-adjust: none;\n\t\tcolor: highlighttext !important;\n\t\tbackground-color: highlight !important;\n\t}\n\t.monaco-editor.vs .monaco-menu .monaco-action-bar.vertical .action-menu-item:hover .action-label,\n\t.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:hover .action-label {\n\t\t-ms-high-contrast-adjust: none;\n\t\tbackground: transparent !important;\n\t\tborder: 1px solid highlight;\n\t\tbox-sizing: border-box;\n\t}\n\n\t/* diff editor */\n\t.monaco-diff-editor.vs .diffOverviewRuler,\n\t.monaco-diff-editor.vs-dark .diffOverviewRuler {\n\t\tdisplay: none;\n\t}\n\t.monaco-editor.vs .line-insert,\n\t.monaco-editor.vs-dark .line-insert,\n\t.monaco-editor.vs .line-delete,\n\t.monaco-editor.vs-dark .line-delete {\n\t\tbackground: transparent !important;\n\t\tborder: 1px solid highlight !important;\n\t\tbox-sizing: border-box;\n\t}\n\t.monaco-editor.vs .char-insert,\n\t.monaco-editor.vs-dark .char-insert,\n\t.monaco-editor.vs .char-delete,\n\t.monaco-editor.vs-dark .char-delete {\n\t\tbackground: transparent !important;\n\t}\n}\n\n/*.monaco-editor.vs [tabindex="0"]:focus {\n\toutline: 1px solid rgba(0, 122, 204, 0.4);\n\toutline-offset: -1px;\n\topacity: 1 !important;\n}\n\n.monaco-editor.vs-dark [tabindex="0"]:focus {\n\toutline: 1px solid rgba(14, 99, 156, 0.6);\n\toutline-offset: -1px;\n\topacity: 1 !important;\n}*/\n',""]);const a=r},29593:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.monaco-action-bar .action-item.menu-entry .action-label.icon {\n\twidth: 16px;\n\theight: 16px;\n\tbackground-repeat: no-repeat;\n\tbackground-position: 50%;\n\tbackground-size: 16px;\n}\n\n.monaco-action-bar .action-item.menu-entry .action-label {\n\tbackground-image: var(--menu-entry-icon-light);\n}\n\n.vs-dark .monaco-action-bar .action-item.menu-entry .action-label,\n.hc-black .monaco-action-bar .action-item.menu-entry .action-label {\n\tbackground-image: var(--menu-entry-icon-dark);\n}\n\n\n.monaco-dropdown-with-default {\n\tdisplay: flex !important;\n\tflex-direction: row;\n\tborder-radius: 5px;\n}\n\n.monaco-dropdown-with-default > .action-container > .action-label {\n\tmargin-right: 0;\n}\n\n.monaco-dropdown-with-default > .action-container.menu-entry > .action-label.icon {\n\twidth: 16px;\n\theight: 16px;\n\tbackground-repeat: no-repeat;\n\tbackground-position: 50%;\n\tbackground-size: 16px;\n}\n\n.monaco-dropdown-with-default > .action-container.menu-entry > .action-label {\n\tbackground-image: var(--menu-entry-icon-light);\n}\n\n.vs-dark .monaco-dropdown-with-default > .action-container.menu-entry > .action-label,\n.hc-black .monaco-dropdown-with-default > .action-container.menu-entry > .action-label {\n\tbackground-image: var(--menu-entry-icon-dark);\n}\n\n.monaco-dropdown-with-default > .dropdown-action-container > .monaco-dropdown > .dropdown-label .codicon[class*='codicon-'] {\n\tfont-size: 12px;\n\tpadding-left: 0px;\n\tpadding-right: 0px;\n\tline-height: 16px;\n\tmargin-left: -3px;\n}\n\n.monaco-dropdown-with-default > .dropdown-action-container > .monaco-dropdown > .dropdown-label > .action-label {\n\tdisplay: block;\n\tbackground-size: 16px;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n}\n",""]);const a=r},52021:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.context-view .monaco-menu {\n\tmin-width: 130px;\n}\n\n",""]);const a=r},66853:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>u});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s),a=i(61667),l=i.n(a),c=new URL(i(49944),i.b),d=r()(o()),h=l()(c);d.push([e.id,`/*\n! tailwindcss v3.0.23 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box; /* 1 */\n  border-width: 0; /* 2 */\n  border-style: solid; /* 2 */\n  border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured \`sans\` font-family by default.\n*/\n\nhtml {\n  line-height: 1.5; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n  -moz-tab-size: 4; /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4; /* 3 */\n  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from \`html\` so users can set them as a class directly on the \`html\` element.\n*/\n\nbody {\n  margin: 0; /* 1 */\n  line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0; /* 1 */\n  color: inherit; /* 2 */\n  border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured \`mono\` font family by default.\n2. Correct the odd \`em\` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent \`sub\` and \`sup\` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0; /* 1 */\n  border-color: inherit; /* 2 */\n  border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  line-height: inherit; /* 1 */\n  color: inherit; /* 1 */\n  margin: 0; /* 2 */\n  padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button; /* 1 */\n  background-color: transparent; /* 2 */\n  background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional \`:invalid\` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to \`inherit\` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. é‡å¯ the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1; /* 1 */\n  color: #9ca3af; /* 2 */\n}\n\ninput:-ms-input-placeholder, textarea:-ms-input-placeholder {\n  opacity: 1; /* 1 */\n  color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1; /* 1 */\n  color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role="button"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements \`display: block\` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add \`vertical-align: middle\` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block; /* 1 */\n  vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/*\nEnsure the default browser behavior of the \`hidden\` attribute.\n*/\n\n[hidden] {\n  display: none;\n}\n  @font-face {\n    font-family: 'Material Icons';\n    src: url(${h}) format('woff2');\n  }\n\n*, ::before, ::after {\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n.icon {\n    font-family: 'Material Icons';\n    font-weight: normal;\n    font-style: normal;\n    font-size: 18px; /* Preferred icon size */\n    display: inline-block;\n    line-height: 1;\n    text-transform: none;\n    letter-spacing: normal;\n    word-wrap: normal;\n    white-space: nowrap;\n    direction: ltr;\n    text-rendering: optimizeLegibility;\n    font-feature-settings: 'liga';\n    -webkit-font-smoothing: antialiased;\n  }\n.visible {\n  visibility: visible;\n}\n.static {\n  position: static;\n}\n.fixed {\n  position: fixed;\n}\n.absolute {\n  position: absolute;\n}\n.relative {\n  position: relative;\n}\n.top-0 {\n  top: 0px;\n}\n.left-0 {\n  left: 0px;\n}\n.left-1\\/2 {\n  left: 50%;\n}\n.top-1\\/2 {\n  top: 50%;\n}\n.top-\\[32px\\] {\n  top: 32px;\n}\n.right-2 {\n  right: 0.5rem;\n}\n.bottom-3 {\n  bottom: 0.75rem;\n}\n.left-\\[calc\\(50\\%\\+85px\\)\\] {\n  left: calc(50% + 85px);\n}\n.left-3 {\n  left: 0.75rem;\n}\n.top-8 {\n  top: 2rem;\n}\n.bottom-6 {\n  bottom: 1.5rem;\n}\n.top-\\[25px\\] {\n  top: 25px;\n}\n.left-\\[170px\\] {\n  left: 170px;\n}\n.z-10 {\n  z-index: 10;\n}\n.z-\\[120\\] {\n  z-index: 120;\n}\n.z-50 {\n  z-index: 50;\n}\n.mx-4 {\n  margin-left: 1rem;\n  margin-right: 1rem;\n}\n.mt-\\[1000px\\] {\n  margin-top: 1000px;\n}\n.mr-\\[20px\\] {\n  margin-right: 20px;\n}\n.mr-2 {\n  margin-right: 0.5rem;\n}\n.mt-\\[2px\\] {\n  margin-top: 2px;\n}\n.ml-\\[5px\\] {\n  margin-left: 5px;\n}\n.mr-4 {\n  margin-right: 1rem;\n}\n.ml-1 {\n  margin-left: 0.25rem;\n}\n.mr-\\[15px\\] {\n  margin-right: 15px;\n}\n.mb-\\[10px\\] {\n  margin-bottom: 10px;\n}\n.mb-1 {\n  margin-bottom: 0.25rem;\n}\n.block {\n  display: block;\n}\n.inline-block {\n  display: inline-block;\n}\n.flex {\n  display: flex;\n}\n.grid {\n  display: grid;\n}\n.list-item {\n  display: list-item;\n}\n.hidden {\n  display: none;\n}\n.h-full {\n  height: 100%;\n}\n.h-4\\/5 {\n  height: 80%;\n}\n.h-\\[calc\\(100\\%-300px\\)\\] {\n  height: calc(100% - 300px);\n}\n.h-\\[40px\\] {\n  height: 40px;\n}\n.h-fit {\n  height: -moz-fit-content;\n  height: fit-content;\n}\n.h-\\[90px\\] {\n  height: 90px;\n}\n.h-\\[35px\\] {\n  height: 35px;\n}\n.h-3\\/5 {\n  height: 60%;\n}\n.h-2 {\n  height: 0.5rem;\n}\n.h-\\[1px\\] {\n  height: 1px;\n}\n.h-\\[calc\\(100\\%_-_25px\\)\\] {\n  height: calc(100% - 25px);\n}\n.h-\\[18px\\] {\n  height: 18px;\n}\n.max-h-\\[500px\\] {\n  max-height: 500px;\n}\n.min-h-\\[400px\\] {\n  min-height: 400px;\n}\n.w-full {\n  width: 100%;\n}\n.w-3\\/5 {\n  width: 60%;\n}\n.w-\\[calc\\(100\\%-200px\\)\\] {\n  width: calc(100% - 200px);\n}\n.w-fit {\n  width: -moz-fit-content;\n  width: fit-content;\n}\n.w-\\[90px\\] {\n  width: 90px;\n}\n.w-2 {\n  width: 0.5rem;\n}\n.w-\\[80px\\] {\n  width: 80px;\n}\n.w-\\[calc\\(100\\%_-_170px\\)\\] {\n  width: calc(100% - 170px);\n}\n.w-\\[500px\\] {\n  width: 500px;\n}\n.w-\\[18px\\] {\n  width: 18px;\n}\n.w-\\[200px\\] {\n  width: 200px;\n}\n.min-w-\\[500px\\] {\n  min-width: 500px;\n}\n.max-w-full {\n  max-width: 100%;\n}\n.max-w-\\[350px\\] {\n  max-width: 350px;\n}\n.max-w-\\[120px\\] {\n  max-width: 120px;\n}\n.flex-1 {\n  flex: 1 1 0%;\n}\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\n.flex-shrink {\n  flex-shrink: 1;\n}\n.flex-grow {\n  flex-grow: 1;\n}\n.flex-grow-0 {\n  flex-grow: 0;\n}\n.-translate-x-1\\/2 {\n  --tw-translate-x: -50%;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1\\/2 {\n  --tw-translate-y: -50%;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-\\[2px\\] {\n  --tw-translate-y: 2px;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-translate-y-1 {\n  --tw-translate-y: -0.25rem;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n  --tw-rotate: 90deg;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes bounce {\n\n  0%, 100% {\n    transform: translateY(-25%);\n    animation-timing-function: cubic-bezier(0.8,0,1,1);\n  }\n\n  50% {\n    transform: none;\n    animation-timing-function: cubic-bezier(0,0,0.2,1);\n  }\n}\n.animate-bounce {\n  animation: bounce 1s infinite;\n}\n.cursor-pointer {\n  cursor: pointer;\n}\n.cursor-move {\n  cursor: move;\n}\n.select-text {\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n}\n.resize {\n  resize: both;\n}\n.grid-cols-2 {\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-4 {\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n.flex-col {\n  flex-direction: column;\n}\n.flex-wrap {\n  flex-wrap: wrap;\n}\n.items-center {\n  align-items: center;\n}\n.items-baseline {\n  align-items: baseline;\n}\n.justify-center {\n  justify-content: center;\n}\n.justify-between {\n  justify-content: space-between;\n}\n.gap-\\[20px\\] {\n  gap: 20px;\n}\n.gap-1 {\n  gap: 0.25rem;\n}\n.gap-2 {\n  gap: 0.5rem;\n}\n.gap-3 {\n  gap: 0.75rem;\n}\n.gap-x-\\[20px\\] {\n  -moz-column-gap: 20px;\n       column-gap: 20px;\n}\n.gap-x-1 {\n  -moz-column-gap: 0.25rem;\n       column-gap: 0.25rem;\n}\n.gap-y-1 {\n  row-gap: 0.25rem;\n}\n.gap-x-3 {\n  -moz-column-gap: 0.75rem;\n       column-gap: 0.75rem;\n}\n.gap-x-\\[2px\\] {\n  -moz-column-gap: 2px;\n       column-gap: 2px;\n}\n.gap-x-4 {\n  -moz-column-gap: 1rem;\n       column-gap: 1rem;\n}\n.gap-x-5 {\n  -moz-column-gap: 1.25rem;\n       column-gap: 1.25rem;\n}\n.gap-x-2 {\n  -moz-column-gap: 0.5rem;\n       column-gap: 0.5rem;\n}\n.overflow-auto {\n  overflow: auto;\n}\n.overflow-hidden {\n  overflow: hidden;\n}\n.overflow-clip {\n  overflow: clip;\n}\n.overflow-y-auto {\n  overflow-y: auto;\n}\n.text-ellipsis {\n  text-overflow: ellipsis;\n}\n.whitespace-normal {\n  white-space: normal;\n}\n.whitespace-pre {\n  white-space: pre;\n}\n.whitespace-pre-wrap {\n  white-space: pre-wrap;\n}\n.break-words {\n  overflow-wrap: break-word;\n}\n.break-all {\n  word-break: break-all;\n}\n.rounded-md {\n  border-radius: 0.375rem;\n}\n.rounded {\n  border-radius: 0.25rem;\n}\n.rounded-\\[10px\\] {\n  border-radius: 10px;\n}\n.rounded-full {\n  border-radius: 9999px;\n}\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n.rounded-2xl {\n  border-radius: 1rem;\n}\n.rounded-br-none {\n  border-bottom-right-radius: 0px;\n}\n.rounded-tr-none {\n  border-top-right-radius: 0px;\n}\n.border {\n  border-width: 1px;\n}\n.border-\\[1px\\] {\n  border-width: 1px;\n}\n.border-b {\n  border-bottom-width: 1px;\n}\n.\\!border-b-0 {\n  border-bottom-width: 0px !important;\n}\n.border-solid {\n  border-style: solid;\n}\n.border-\\[color\\:var\\(--bc\\)\\] {\n  border-color: var(--bc);\n}\n.border-\\[color\\:rgb\\(85\\2c 79\\2c 79\\)\\] {\n  --tw-border-opacity: 1;\n  border-color: rgb(85 79 79 / var(--tw-border-opacity));\n}\n.border-b-\\[color\\:var\\(--bc\\)\\] {\n  border-bottom-color: var(--bc);\n}\n.border-opacity-50 {\n  --tw-border-opacity: 0.5;\n}\n.bg-\\[color\\:var\\(--bgc\\)\\] {\n  background-color: var(--bgc);\n}\n.bg-\\[color\\:var\\(--mask-c\\)\\] {\n  background-color: var(--mask-c);\n}\n.bg-\\[color\\:var\\(--mbgc\\)\\] {\n  background-color: var(--mbgc);\n}\n.bg-\\[color\\:var\\(--proxy-item-bgc\\)\\] {\n  background-color: var(--proxy-item-bgc);\n}\n.bg-black {\n  --tw-bg-opacity: 1;\n  background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n.bg-\\[color\\:var\\(--proxy-item-selected-border-c\\)\\] {\n  background-color: var(--proxy-item-selected-border-c);\n}\n.bg-green-400 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(74 222 128 / var(--tw-bg-opacity));\n}\n.bg-red-400 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(248 113 113 / var(--tw-bg-opacity));\n}\n.bg-gray-400 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(156 163 175 / var(--tw-bg-opacity));\n}\n.bg-\\[\\#1E1E1E\\] {\n  --tw-bg-opacity: 1;\n  background-color: rgb(30 30 30 / var(--tw-bg-opacity));\n}\n.bg-\\[color\\:\\#14A53A\\] {\n  --tw-bg-opacity: 1;\n  background-color: rgb(20 165 58 / var(--tw-bg-opacity));\n}\n.bg-\\[\\#6f6f6f\\] {\n  --tw-bg-opacity: 1;\n  background-color: rgb(111 111 111 / var(--tw-bg-opacity));\n}\n.bg-\\[color\\:\\#1C1C1C\\] {\n  --tw-bg-opacity: 1;\n  background-color: rgb(28 28 28 / var(--tw-bg-opacity));\n}\n.bg-cyan-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(6 182 212 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-\\[color\\:\\#2c2a38\\] {\n  --tw-bg-opacity: 1;\n  background-color: rgb(44 42 56 / var(--tw-bg-opacity));\n}\n.bg-gray-300 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.bg-\\[color\\:\\#64646480\\] {\n  background-color: #64646480;\n}\n.bg-opacity-80 {\n  --tw-bg-opacity: 0.8;\n}\n.p-4 {\n  padding: 1rem;\n}\n.p-2 {\n  padding: 0.5rem;\n}\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n.py-3 {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n}\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n.py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n.px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n.py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n.px-6 {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n.py-\\[2px\\] {\n  padding-top: 2px;\n  padding-bottom: 2px;\n}\n.px-5 {\n  padding-left: 1.25rem;\n  padding-right: 1.25rem;\n}\n.py-4 {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n.pl-3 {\n  padding-left: 0.75rem;\n}\n.pr-6 {\n  padding-right: 1.5rem;\n}\n.pt-3 {\n  padding-top: 0.75rem;\n}\n.pb-3 {\n  padding-bottom: 0.75rem;\n}\n.pt-2 {\n  padding-top: 0.5rem;\n}\n.pl-4 {\n  padding-left: 1rem;\n}\n.pr-4 {\n  padding-right: 1rem;\n}\n.pb-2 {\n  padding-bottom: 0.5rem;\n}\n.pr-1 {\n  padding-right: 0.25rem;\n}\n.text-center {\n  text-align: center;\n}\n.font-sans {\n  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";\n}\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n.text-base {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n.text-\\[14px\\] {\n  font-size: 14px;\n}\n.text-\\[10px\\] {\n  font-size: 10px;\n}\n.text-lg {\n  font-size: 1.125rem;\n  line-height: 1.75rem;\n}\n.text-\\[20px\\] {\n  font-size: 20px;\n}\n.font-normal {\n  font-weight: 400;\n}\n.capitalize {\n  text-transform: capitalize;\n}\n.text-\\[color\\:var\\(--fgc\\)\\] {\n  color: var(--fgc);\n}\n.text-\\[color\\:var\\(--feedback-link-c\\)\\] {\n  color: var(--feedback-link-c);\n}\n.text-\\[color\\:var\\(--general-settings-icon-c\\)\\] {\n  color: var(--general-settings-icon-c);\n}\n.text-\\[color\\:var\\(--log-item-payload-c\\)\\] {\n  color: var(--log-item-payload-c);\n}\n.text-\\[color\\:var\\(--proxy-item-latency-offline-c\\)\\] {\n  color: var(--proxy-item-latency-offline-c);\n}\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.text-red-500 {\n  --tw-text-opacity: 1;\n  color: rgb(239 68 68 / var(--tw-text-opacity));\n}\n.text-\\[\\#FFAD00\\] {\n  --tw-text-opacity: 1;\n  color: rgb(255 173 0 / var(--tw-text-opacity));\n}\n.text-\\[\\#D44545\\] {\n  --tw-text-opacity: 1;\n  color: rgb(212 69 69 / var(--tw-text-opacity));\n}\n.text-\\[\\#13AF42\\] {\n  --tw-text-opacity: 1;\n  color: rgb(19 175 66 / var(--tw-text-opacity));\n}\n.text-\\[\\#41b883\\] {\n  --tw-text-opacity: 1;\n  color: rgb(65 184 131 / var(--tw-text-opacity));\n}\n.opacity-60 {\n  opacity: 0.6;\n}\n.opacity-40 {\n  opacity: 0.4;\n}\n.opacity-80 {\n  opacity: 0.8;\n}\n.opacity-50 {\n  opacity: 0.5;\n}\n.opacity-70 {\n  opacity: 0.7;\n}\n.shadow-2xl {\n  --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n  --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-xl {\n  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n  outline: 2px solid transparent;\n  outline-offset: 2px;\n}\n.outline {\n  outline-style: solid;\n}\n.blur {\n  --tw-blur: blur(8px);\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition {\n  transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n.transition-all {\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n.duration-200 {\n  transition-duration: 200ms;\n}\n.ease-in-out {\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.ease-in {\n  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n}\n.ease-out {\n  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n}\n\ninput {\n  border-radius: 0.25rem;\n  border-width: 1px;\n  border-style: solid;\n  border-color: var(--bc);\n  background-color: var(--bgc);\n}\n\ninput::-moz-placeholder {\n  color: var(--input-phc);\n}\n\ninput:-ms-input-placeholder {\n  color: var(--input-phc);\n}\n\ninput::placeholder {\n  color: var(--input-phc);\n}\n\ntextarea {\n  border-radius: 0.25rem;\n  border-width: 1px;\n  border-style: solid;\n  border-color: var(--bc);\n  background-color: var(--bgc);\n}\n\ntextarea::-moz-placeholder {\n  color: var(--input-phc);\n}\n\ntextarea:-ms-input-placeholder {\n  color: var(--input-phc);\n}\n\ntextarea::placeholder {\n  color: var(--input-phc);\n}\n\n.theme-light {\n  animation: fade 0.2s ease-in-out;\n}\n\n:root {\n  --bgc: #fff;\n  --fgc: #000;\n  --bc: #dcdcdc;\n  --mbgc: #f5f5f5;\n  --shadow: rgba(50, 50, 50, 0.1);\n  --general-item-bgc: #f1f1f1;\n  --general-title-c: #2c3e50;\n  --general-clickable-border-c: rgba(50, 50, 50, 0.2);\n  --general-interface-card-bgc: #fff;\n  --general-interface-card-fgc: #17224f;\n  --general-interface-card-quote-bgc: rgb(213, 213, 213);\n  --general-settings-icon-c: #2c3e50;\n  --proxy-fake-item-bgc: #e3e3e3;\n  --proxy-item-now-fgc: #ffffff;\n  --proxy-item-now-bgc: rgb(146, 146, 146);\n  --proxy-item-type-bgc: rgb(146, 146, 146);\n  --proxy-item-type-fgc: #fff;\n  --proxy-item-border-c: rgba(75, 75, 75, 0.185);\n  --proxy-item-selected-border-c: #41b883;\n  --proxy-item-bgc: rgba(41, 41, 41, 0.05);\n  --proxy-item-hint-c: rgb(128, 128, 128);\n  --proxy-item-subs-fgc: #fff;\n  --proxy-item-subs-bgc: rgb(226, 226, 226);\n  --proxy-item-subs-used-bgc: #f57983;\n  --proxy-item-latency-online-c: #41b883;\n  --proxy-item-latency-offline-c: rgb(236, 5, 5);\n  --mode-switcher-selected-bgc: #4c4b4b;\n  --mode-switcher-selected-fgc: #fff;\n  --mode-switcher-normal-bgc: #fff;\n  --mode-switcher-normal-fgc: #747474;\n  --log-item-border-c: rgba(50, 50, 50, 0.1);\n  --log-item-rule-c: rgba(50, 50, 50, 0.7);\n  --log-item-payload-c: rgb(4, 92, 133);\n  --log-list-border-c: rgba(202, 202, 202, 0.342);\n  --profile-card-bgc: #f5f5f5;\n  --profile-card-hint-c: #1d2b63;\n  --profile-list-item-bgc: #7e7b7b;\n  --profile-list-item-cur-bgc: #464646;\n  --feedback-link-c: rgb(1, 159, 245);\n  --status-bgc: #ebebeb;\n  --status-close-hover: rgba(50, 50, 50, 0.2);\n  --switch-bgc: #c7bfbf;\n  --switch-bgc-second: #bdb3b3;\n  --menu-fgc: rgb(116, 125, 136);\n  --scroll-bar-bgc: rgb(202, 200, 198);\n  --input-bgc: #f1f1f1;\n  --input-phc: rgb(163, 163, 163);\n  --error-text: rgb(250, 19, 19);\n  --mask-c: rgba(50, 50, 50, 0.6);\n  --setting-input-bgc: #fff;\n  --setting-item-hover-bgc: rgba(50, 50, 50, 0.2);\n}\n\n.theme-dark {\n  animation: fade 0.2s ease-in-out;\n  --bgc: #2c2a38;\n  --fgc: rgb(255, 255, 255);\n  --bc: rgb(85, 79, 79);\n  --mbgc: #42424e;\n  --shadow: rgba(214, 214, 214, 0.1);\n  --general-item-bgc: #606068;\n  --general-title-c: rgb(233, 233, 233);\n  --general-clickable-border-c: rgb(149, 149, 149);\n  --general-interface-card-bgc: #686675;\n  --general-interface-card-fgc: #fff;\n  --general-interface-card-quote-bgc: #494757;\n  --general-settings-icon-c: #c2c8ce;\n  --proxy-fake-item-bgc: #32323f;\n  --proxy-item-now-fgc: rgb(206, 206, 206);\n  --proxy-item-now-bgc: rgb(92, 92, 92);\n  --proxy-item-type-bgc: rgb(92, 92, 92);\n  --proxy-item-type-fgc: rgb(206, 206, 206);\n  --proxy-item-border-c: rgba(199, 199, 199, 0.185);\n  --proxy-item-selected-border-c: rgb(0, 170, 0);\n  --proxy-item-bgc: rgba(255, 255, 255, 0.05);\n  --proxy-item-hint-c: rgb(167, 167, 167);\n  --proxy-item-subs-fgc: rgb(180, 180, 180);\n  --proxy-item-subs-bgc: rgb(90, 90, 90);\n  --proxy-item-subs-used-bgc: #92484e;\n  --proxy-item-latency-online-c: rgb(20, 160, 20);\n  --proxy-item-latency-offline-c: rgb(219, 75, 75);\n  --mode-switcher-selected-bgc: #3aa1cc;\n  --mode-switcher-selected-fgc: #fff;\n  --mode-switcher-normal-bgc: #42424e;\n  --mode-switcher-normal-fgc: #adadad;\n  --log-item-border-c: rgb(73, 66, 66);\n  --log-item-rule-c: rgba(224, 224, 224, 0.712);\n  --log-item-payload-c: rgb(95, 190, 202);\n  --log-list-border-c: rgb(98, 98, 98);\n  --profile-card-bgc: #42424e;\n  --profile-card-hint-c: #3aa1cc;\n  --profile-list-item-bgc: #3f3f49;\n  --profile-list-item-cur-bgc: #5f5f5f;\n  --feedback-link-c: rgb(23, 136, 197);\n  --status-bgc: #343442;\n  --status-close-hover: rgba(250, 250, 250, 0.2);\n  --switch-bgc: #413c3c;\n  --switch-bgc-second: #332f2f;\n  --menu-fgc: rgb(212, 212, 212);\n  --scroll-bar-bgc: #4d4d5a;\n  --input-bgc: rgba(105, 105, 105, 0.822);\n  --input-phc: rgb(163, 163, 163);\n  --error-text: rgb(255, 95, 95);\n  --mask-c: rgba(77, 77, 77, 0.8);\n  --setting-input-bgc: rgba(46, 46, 46, 0.8);\n  --setting-item-hover-bgc: rgba(255, 255, 255, 0.3);\n}\n\n.theme-red {\n  animation: fade 0.2s ease-in-out;\n  --bgc: #f8b74f;\n  --fgc: #d33928;\n  --bc: #da141e3f;\n  --mbgc: #ffc76d;\n  --shadow: rgba(214, 214, 214, 0.1);\n  --general-item-bgc: #eda94c;\n  --general-title-c: #b72d29;\n  --general-clickable-border-c: #da141e3f;\n  --general-interface-card-bgc: #c74f55;\n  --general-interface-card-fgc: #fff;\n  --general-interface-card-quote-bgc: #850f15;\n  --general-settings-icon-c: #c54b36;\n  --proxy-fake-item-bgc: #c28f3d;\n  --proxy-item-now-fgc: rgb(226, 226, 226);\n  --proxy-item-now-bgc: rgb(184, 112, 4);\n  --proxy-item-type-bgc: rgb(184, 112, 4);\n  --proxy-item-type-fgc: rgb(226, 226, 226);\n  --proxy-item-border-c: #f39908;\n  --proxy-item-selected-border-c: #1bb406c9;\n  --proxy-item-bgc: #fdc975;\n  --proxy-item-hint-c: #995e00;\n  --proxy-item-subs-fgc: rgb(209, 209, 209);\n  --proxy-item-subs-bgc: rgba(151, 151, 151, 0.295);\n  --proxy-item-subs-used-bgc: #b3585f;\n  --proxy-item-latency-online-c: rgb(22, 167, 22);\n  --proxy-item-latency-offline-c: rgb(223, 9, 9);\n  --mode-switcher-selected-bgc: #b72e29c9;\n  --mode-switcher-selected-fgc: #fff;\n  --mode-switcher-normal-bgc: #c28f3d;\n  --mode-switcher-normal-fgc: #d6d6d6;\n  --log-item-border-c: #da141e3f;\n  --log-item-rule-c: rgb(63, 63, 63);\n  --log-item-payload-c: rgb(13, 80, 143);\n  --log-list-border-c: #da141e3f;\n  --profile-card-bgc: #10105a;\n  --profile-card-hint-c: #3aa1cc;\n  --profile-list-item-bgc: #a77018;\n  --profile-list-item-cur-bgc: #da141e99;\n  --feedback-link-c: #b72d29;\n  --status-bgc: #e8a84a;\n  --status-close-hover: rgba(250, 250, 250, 0.2);\n  --switch-bgc: #d39126;\n  --switch-bgc-second: #be8222;\n  --menu-fgc: #da141ecb;\n  --scroll-bar-bgc: #b72e29a4;\n  --input-bgc: #d39126;\n  --input-phc: rgba(170, 66, 66, 0.4);\n  --error-text: rgb(255, 0, 0);\n  --mask-c: rgba(50, 50, 50, 0.6);\n  --setting-input-bgc: #d39126;\n  --setting-item-hover-bgc: rgba(255, 255, 255, 0.2);\n}\n\n.theme-2077 {\n  animation: fade 0.2s ease-in-out;\n  --bgc: #136377;\n  --fgc: #fcec0c;\n  --bc: #0691b485;\n  --mbgc: #084a5a;\n  --shadow: rgba(214, 214, 214, 0.1);\n  --general-item-bgc: #084a5a;\n  --general-title-c: #f8ed53;\n  --general-clickable-border-c: #dde9373f;\n  --general-interface-card-bgc: #0e5668;\n  --general-interface-card-fgc: #fff;\n  --general-interface-card-quote-bgc: #09303a;\n  --general-settings-icon-c: #c0e732ef;\n  --proxy-fake-item-bgc: #043441;\n  --proxy-item-now-fgc: rgb(207, 245, 146);\n  --proxy-item-now-bgc: #064453;\n  --proxy-item-type-bgc: #064453;\n  --proxy-item-type-fgc: rgb(207, 245, 146);\n  --proxy-item-border-c: rgba(6, 49, 70, 0.411);\n  --proxy-item-selected-border-c: #f8ed53;\n  --proxy-item-bgc: #09738dea;\n  --proxy-item-hint-c: #bbb33f;\n  --proxy-item-subs-fgc: #fff;\n  --proxy-item-subs-bgc: rgb(78, 138, 111);\n  --proxy-item-subs-used-bgc: #b4555d;\n  --proxy-item-latency-online-c: rgb(68, 196, 68);\n  --proxy-item-latency-offline-c: rgb(255, 101, 101);\n  --mode-switcher-selected-bgc: #dfd43f;\n  --mode-switcher-selected-fgc: #000;\n  --mode-switcher-normal-bgc: #58482c;\n  --mode-switcher-normal-fgc: #c5c5c5;\n  --log-item-border-c: rgb(73, 66, 66);\n  --log-item-rule-c: rgba(224, 224, 224, 0.712);\n  --log-item-payload-c: rgb(95, 190, 202);\n  --log-list-border-c: rgb(98, 98, 98);\n  --profile-card-bgc: #58482c;\n  --profile-card-hint-c: #3aa1cc;\n  --profile-list-item-bgc: #043441;\n  --profile-list-item-cur-bgc: #b4aa39;\n  --feedback-link-c: #a5dbe9;\n  --status-bgc: #fcec0c;\n  --status-close-hover: rgba(250, 250, 250, 0.2);\n  --switch-bgc: #837a00;\n  --switch-bgc-second: #968c03;\n  --menu-fgc: #c79707;\n  --scroll-bar-bgc: #eede00cb;\n  --input-bgc: rgba(2, 45, 53, 0.822);\n  --input-phc: rgb(163, 163, 163);\n  --error-text: rgb(255, 95, 95);\n  --mask-c: rgba(50, 50, 50, 0.6);\n  --setting-input-bgc: rgba(2, 45, 53, 0.822);\n  --setting-item-hover-bgc: rgba(255, 255, 255, 0.2);\n}\n\n.theme-unknown {\n  display: none;\n}\n\n@keyframes fade {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n\n.fade {\n  animation: fade 0.2s ease-in-out;\n}\n\n.placeholder\\:text-\\[color\\:rgb\\(163\\2c 163\\2c 163\\)\\]::-moz-placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(163 163 163 / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-\\[color\\:rgb\\(163\\2c 163\\2c 163\\)\\]:-ms-input-placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(163 163 163 / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-\\[color\\:rgb\\(163\\2c 163\\2c 163\\)\\]::placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(163 163 163 / var(--tw-text-opacity));\n}\n\n.hover\\:bg-\\[color\\:var\\(--proxy-item-bgc\\)\\]:hover {\n  background-color: var(--proxy-item-bgc);\n}\n\n.hover\\:bg-\\[color\\:var\\(--status-close-hover\\)\\]:hover {\n  background-color: var(--status-close-hover);\n}\n\n.hover\\:bg-\\[\\#ff5050d7\\]:hover {\n  background-color: #ff5050d7;\n}`,""]);const u=d},45777:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n*,\n*::after,\n*::before {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-user-drag: none;\n  cursor: default;\n}\n* {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n  cursor: default;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\nbody {\n  font-family: 'Noto Sans CJK', sans-serif;\n  font-weight: 500;\n  overflow: hidden;\n  background-color: var(--bgc);\n}\ninput {\n  font-family: inherit;\n}\n",""]);const a=r},81283:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\nmain[data-v-68cbbc92] {\n  display: flex;\n  justify-content: space-between;\n}\nmain > div[data-v-68cbbc92] {\n}\n.left-side[data-v-68cbbc92] {\n  display: flex;\n  flex-direction: column;\n  /* flex: 0 0 20%; */\n  width: 170px;\n  height: calc(100vh - 25px);\n}\n.right-side[data-v-68cbbc92] {\n  z-index: 2;\n  flex-grow: 1;\n  width: calc(100vw - 170px);\n  height: calc(100vh - 25px);\n}\n.welcome[data-v-68cbbc92] {\n  color: #555;\n  font-size: 23px;\n  margin-bottom: 10px;\n}\n.title[data-v-68cbbc92] {\n  color: #2c3e50;\n  font-size: 20px;\n  font-weight: bold;\n  margin-bottom: 6px;\n}\n.title.alt[data-v-68cbbc92] {\n  font-size: 18px;\n  margin-bottom: 10px;\n}\n.doc p[data-v-68cbbc92] {\n  color: black;\n  margin-bottom: 10px;\n}\n.doc button[data-v-68cbbc92] {\n  font-size: 0.8em;\n  cursor: pointer;\n  outline: none;\n  padding: 0.75em 2em;\n  border-radius: 2em;\n  display: inline-block;\n  color: #fff;\n  background-color: #4fc08d;\n  transition: all 0.15s ease;\n  box-sizing: border-box;\n  border: 1px solid #4fc08d;\n}\n.doc button.alt[data-v-68cbbc92] {\n  color: #42b983;\n  background-color: transparent;\n}\n.clash-status-main[data-v-68cbbc92] {\n  display: flex;\n  align-items: center;\n  position: absolute;\n  height: 40px;\n  bottom: 0px;\n  width: 170px;\n  left: 0px;\n  justify-content: center;\n  z-index: 2;\n}\n.clash-status-hint[data-v-68cbbc92] {\n  margin-left: 6px;\n  font-size: 0.75em;\n  letter-spacing: 0px;\n  cursor: pointer;\n}\n.clash-status-icon[data-v-68cbbc92] {\n  width: 12px;\n  height: 12px;\n  border-radius: 10px;\n  /* box-shadow: 0px 0px 3px 2px rgba(0, 0, 0, 0.4); */\n}\n.clash-running[data-v-68cbbc92] {\n  background-color: #41b883;\n}\n.clash-set-dns[data-v-68cbbc92] {\n  background-color: rgb(231, 217, 26);\n}\n.clash-stopped[data-v-68cbbc92] {\n  background-color: red;\n}\n.cloud[data-v-68cbbc92] {\n  position: fixed;\n  /* opacity: 0.2; */\n  bottom: 110px;\n  left: calc(50% + 80px);\n  transform: translateX(-50%);\n  width: 40%;\n  /* height: 150vh; */\n  pointer-events: none;\n}\n.opacicy[data-v-68cbbc92] {\n  opacity: 0.2;\n}\n.latern[data-v-68cbbc92] {\n  position: fixed;\n  opacity: 0.7;\n  top: 30px;\n  left: 125px;\n  width: 50px;\n  pointer-events: none;\n}\n",""]);const a=r},37919:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n#main-about-view[data-v-4a737543] {\n  display: flex;\n  flex-direction: column;\n  padding: 10px 30px;\n  gap: 3px;\n}\n.title[data-v-4a737543] {\n  margin-bottom: 0px;\n  /* font-weight: normal; */\n  font-size: 1.1em;\n}\n.ad-img-list[data-v-4a737543] {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  margin-top: 10px;\n  gap: 10px;\n}\n",""]);const a=r},51232:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n.header[data-v-357ec510] {\n  margin-top: 10px;\n  display: flex;\n  height: 100px;\n  width: calc(100vw - 170px);\n  justify-content: center;\n  align-items: center;\n}\n.title[data-v-357ec510] {\n  /* margin: 20px auto; */\n}\n.title-name[data-v-357ec510] {\n  display: inline-block;\n  cursor: pointer;\n}\n.new-version-tag[data-v-357ec510] {\n  display: inline-block;\n  color: #fff;\n  padding: 2px 4px;\n  background-color: rgba(170, 38, 38, 0.8);\n  border-radius: 3px;\n  font-size: 0.65em;\n  position: relative;\n  top: -8px;\n  left: 2px;\n}\n.item-left[data-v-357ec510] {\n  display: flex;\n  font-weight: 500;\n  font-size: 1em;\n  align-items: center;\n}\n.item-right[data-v-357ec510] {\n  font-size: 15px;\n  font-weight: normal;\n  display: flex;\n  align-items: center;\n}\n.control-icon[data-v-357ec510] {\n  width: 20px;\n  height: 20px;\n  margin-right: 20px;\n  margin-top: 2px;\n  cursor: pointer;\n}\n.systemCheckbox[data-v-357ec510] {\n  width: 20px;\n  height: 20px;\n}\n.systemCheckbox[data-v-357ec510]:checked {\n  background-color: #233376;\n  border: none;\n}\n.hiddenInput[data-v-357ec510] {\n  width: 1px;\n  height: 1px;\n  opacity: 0;\n}\n.version[data-v-357ec510] {\n  font-size: 0.5em;\n  /* display: inline; */\n  margin-left: 10px;\n  font-weight: normal;\n  cursor: pointer;\n  margin-top: 15px;\n}\n.checkmark-container[data-v-357ec510] {\n  display: block;\n  position: relative;\n  padding-left: 22px;\n  margin-bottom: 22px;\n  cursor: pointer;\n  font-size: 22px;\n}\n.checkmark-container input[data-v-357ec510] {\n  position: absolute;\n  opacity: 0;\n  cursor: pointer;\n  height: 0;\n  width: 0;\n}\n.system-checkmark[data-v-357ec510] {\n  cursor: pointer;\n  position: absolute;\n  top: 0;\n  border-radius: 20px;\n  left: 0;\n  height: 25px;\n  width: 25px;\n  background-color: #fff;\n  box-shadow: 0px 0px 5px 1px rgba(50, 50, 50, 0.5);\n}\n.checkmark-container:hover input ~ .system-checkmark[data-v-357ec510] {\n  background-color: #fff;\n}\n.checkmark-container input:checked ~ .system-checkmark[data-v-357ec510] {\n  background-color: #464646;\n}\n.system-checkmark-unknown[data-v-357ec510] {\n  background-color: #beb9b9;\n}\n\n/* Create the checkmark/indicator (hidden when not checked) */\n.system-checkmark[data-v-357ec510]:after {\n  content: '';\n  position: absolute;\n  display: none;\n}\n\n/* Show the checkmark when checked */\n.checkmark-container input:checked ~ .system-checkmark[data-v-357ec510]:after {\n  display: block;\n}\n\n/* Style the checkmark/indicator */\n.checkmark-container .system-checkmark[data-v-357ec510]:after {\n  left: 8px;\n  top: 5px;\n  width: 6px;\n  height: 9px;\n  border: solid white;\n  border-width: 0 3px 3px 0;\n  transform: rotate(45deg);\n}\n.interface-address[data-v-357ec510] {\n  font-size: 1em;\n}\n.interface-name[data-v-357ec510] {\n  font-size: 0.8em;\n  margin-left: 15px;\n}\n.edit-btn[data-v-357ec510] {\n  width: 25px;\n  height: 25px;\n  border-radius: 4px;\n  cursor: pointer;\n  background-color: #464646;\n  box-shadow: 0px 0px 5px 1px rgba(50, 50, 50, 0.3);\n}\n.edit-btn > img[data-v-357ec510] {\n  width: 17px;\n  height: 17px;\n  margin: 5px;\n  cursor: pointer;\n}\n.empty-div[data-v-357ec510] {\n  height: 50px;\n}\n",""]);const a=r},75169:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n#error-title[data-v-9ba71ad8] {\n  /* color: rgb(231, 73, 73); */\n  font-size: 1.1em;\n}\n.error-hint[data-v-9ba71ad8] {\n}\n",""]);const a=r},64608:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n.warning[data-v-6acd51f2] {\n  color: red;\n}\n.btns[data-v-6acd51f2] {\n  display: flex;\n  width: 280px;\n  justify-content: space-between;\n  align-items: center;\n}\n.button[data-v-6acd51f2] {\n  font-size: 0.8em;\n  height: 30px;\n  line-height: 30px;\n  color: #fff;\n  width: 70px;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n}\n.button-on[data-v-6acd51f2] {\n  background-color: rgba(14, 151, 185, 0.959);\n}\n.button-off[data-v-6acd51f2] {\n  background-color: rgba(243, 61, 61, 0.801);\n}\n.button-clear[data-v-6acd51f2] {\n  background-color: rgba(23, 156, 6, 0.904);\n}\n.debugdark[data-v-6acd51f2] {\n  color: rgb(155, 155, 2);\n}\n.debug[data-v-6acd51f2] {\n  color: rgb(238, 238, 57);\n}\n.info[data-v-6acd51f2] {\n  color: #13af42;\n}\n.warn[data-v-6acd51f2] {\n  color: #d44545;\n}\n.error[data-v-6acd51f2] {\n  color: #d44545;\n}\n",""]);const a=r},23601:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n.hint[data-v-4f5120b9] {\n  font-size: 0.8em;\n  color: #000;\n  letter-spacing: 1px;\n  text-align: left;\n}\n.bold-icon[data-v-4f5120b9] {\n  font-size: 0.75em;\n  letter-spacing: 1px;\n  padding: 0 1px;\n  /* font-weight: bolder; */\n}\n",""]);const a=r},69791:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n#main-run-time-view[data-v-05e7144a] {\n  /* color: #000; */\n  display: flex;\n  align-items: flex-end;\n  padding-bottom: 40px;\n}\n.timer-text[data-v-05e7144a] {\n  text-align: center;\n  width: 100%;\n}\n",""]);const a=r},38489:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\ninput[data-v-820f0efe] {\n  cursor: text;\n  width: calc(100vw - 230px);\n  height: 45px;\n  font-size: 1em;\n  padding: 0 10px 0 10px;\n}\ninput[data-v-820f0efe]:focus {\n  outline: none;\n}\n.remote-view[data-v-820f0efe] {\n  display: flex;\n  align-items: center;\n  justify-content: space-around;\n}\n.local-view[data-v-820f0efe] {\n  right: 0;\n  margin: 0 2vw 20px 1vw;\n}\n.list-view[data-v-820f0efe] > :last-child {\n  margin-bottom: 25px;\n}\n.item-local[data-v-820f0efe] {\n  /* background: radial-gradient(\n    ellipse at top left,\n    rgb(112, 143, 158) 30%,\n    rgba(97, 147, 172, 0.9) 100%\n  ); */\n}\n.item-name-top[data-v-820f0efe] {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  cursor: pointer;\n  font-size: 15px;\n}\n.item-name-top > div[data-v-820f0efe] {\n  max-width: calc((80vw - 80px) / 2 - 65px);\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  overflow: hidden;\n}\n.item-time[data-v-820f0efe] {\n  cursor: pointer;\n}\n.item-expired[data-v-820f0efe] {\n  color: rgb(250, 73, 73);\n}\n.item-parser[data-v-820f0efe] {\n  font-size: 0.8em;\n}\n.item-time-now[data-v-820f0efe] {\n  color: rgb(158, 255, 113);\n}\n.btns-container[data-v-820f0efe] {\n  display: flex;\n  align-items: center;\n  width: -moz-fit-content;\n  width: fit-content;\n  justify-content: space-between;\n}\n.update-all-btn[data-v-820f0efe] {\n}\n.confirm[data-v-820f0efe] {\n  height: 45px;\n  color: white;\n  cursor: pointer;\n  line-height: 45px;\n  text-align: center;\n  background-color: #7e7b7b;\n  border-radius: 3px;\n  padding-left: 10px;\n  padding-right: 10px;\n  font-size: 0.85em;\n  box-shadow: 0px 2px 20px 2px rgba(50, 50, 50, 0.1);\n  width: -moz-fit-content;\n  width: fit-content;\n  white-space: nowrap;\n}\n.confirm-left[data-v-820f0efe] {\n  padding: auto 30px;\n}\n.confirm-right[data-v-820f0efe] {\n  margin-left: 10px;\n}\n.confirm-copy[data-v-820f0efe] {\n  border-radius: 5px;\n}\n.btn-error[data-v-820f0efe] {\n  background-color: #ec2658;\n}\n.btn-success[data-v-820f0efe] {\n  background-color: #8ade4e;\n}\n.btn-loading[data-v-820f0efe] {\n  box-shadow: 2px 2px 5px 1px rgba(50, 50, 50, 0.1);\n}\n.hint-normal[data-v-820f0efe] {\n  text-align: center;\n  font-size: 1em;\n  font-weight: 500;\n}\n.hint-error[data-v-820f0efe] {\n  color: #ec2658;\n}\n.copy-icon[data-v-820f0efe] {\n  flex-shrink: 0;\n  height: 45px;\n  width: 45px;\n  padding: 10px;\n  cursor: pointer;\n}\n.clear-icon[data-v-820f0efe] {\n  height: 45px;\n  width: 45px;\n  padding: 13px;\n  position: absolute;\n  right: 5px;\n}\n.rotating[data-v-820f0efe] {\n  animation: downloading-820f0efe 1s infinite;\n  animation-timing-function: linear;\n}\n@keyframes downloading-820f0efe {\nfrom {\n    transform: rotate(0deg);\n}\nto {\n    transform: rotate(360deg);\n}\n}\n.animate-cycle[data-v-820f0efe] {\n  animation: cycle-820f0efe 2s infinite;\n  animation-timing-function: ease-in-out;\n}\n@keyframes cycle-820f0efe {\n0% {\n    top: 0px;\n}\n50% {\n    top: 40%;\n}\n100% {\n    top: 0px;\n}\n}\n.expand-enter-active[data-v-820f0efe] {\n  animation: expand-820f0efe 0.5s;\n  animation-timing-function: ease-in-out;\n}\n@keyframes expand-820f0efe {\n0% {\n    height: 20%;\n    top: 40%;\n}\n100% {\n    height: 100%;\n    top: 0;\n}\n}\n",""]);const a=r},72132:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n.floating[data-v-9e0b3cf4] {\n  /* background-color: #fff; */\n  position: fixed;\n  left: 170px;\n  height: 60px;\n  width: calc(100vw - 170px);\n  display: flex;\n  justify-content: space-between;\n  padding: 0 50px 0 40px;\n  align-items: center;\n  box-shadow: 2px 2px 4px 1px rgba(50, 50, 50, 0.2);\n}\n.floating-right[data-v-9e0b3cf4] {\n  display: flex;\n  justify-content: flex-end;\n}\n.hint[data-v-9e0b3cf4] {\n  font-size: 1.1em;\n}\n.main-btn[data-v-9e0b3cf4] {\n  cursor: pointer;\n  margin-left: 20px;\n  box-shadow: 0px 0px 4px 1px rgba(50, 50, 50, 0.2);\n  text-align: center;\n  padding: 5px 0;\n  width: 80px;\n  border-radius: 5px;\n  color: #fff;\n}\n.reload[data-v-9e0b3cf4] {\n  background-color: rgb(199, 202, 16);\n}\n.save[data-v-9e0b3cf4] {\n  background-color: rgba(49, 167, 227, 1);\n}\n.drag[data-v-9e0b3cf4] {\n  /* background-color: #fff; */\n  display: flex;\n  padding: 0px 0px 20px 0px;\n  margin-top: 60px;\n  left: 20vw;\n  height: calc(100% - 70px);\n  width: calc(100vw - 170px);\n  max-width: 900px;\n}\n.proxy > div[data-v-9e0b3cf4] {\n  direction: ltr;\n}\n.proxy > draggable[data-v-9e0b3cf4] {\n  direction: ltr;\n}\n.section-title[data-v-9e0b3cf4] {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin: 20px 0px 0px 0px;\n  font-size: 0.8em;\n}\nh2[data-v-9e0b3cf4] {\n}\nimg[data-v-9e0b3cf4] {\n  width: 20px;\n  height: 20px;\n  margin-left: 10px;\n  cursor: pointer;\n}\n.add-icon[data-v-9e0b3cf4] {\n  background-color: #677a94;\n  border-radius: 5px;\n  color: white;\n  font-size: 0.9em;\n  letter-spacing: 1px;\n  padding: 3px 10px;\n  cursor: pointer;\n  box-shadow: 0px 0px 4px 1px rgba(50, 50, 50, 0.2);\n}\n.type-icon[data-v-9e0b3cf4] {\n}\n.left-item[data-v-9e0b3cf4] {\n  background-color: #373948;\n}\n.right-item[data-v-9e0b3cf4] {\n  background-color: #65517a;\n}\n.group-type[data-v-9e0b3cf4] {\n  font-size: 0.7em;\n}\n.proxy-item[data-v-9e0b3cf4] {\n  opacity: 0.8;\n  cursor: pointer;\n  font-size: 1em;\n  padding: 5px 10px;\n  margin: 10px 0px;\n  display: flex;\n  color: #fff;\n  border-radius: 5px;\n  justify-content: space-between;\n  align-items: center;\n  box-shadow: 0px 0px 4px 1px rgba(50, 50, 50, 0.2);\n}\n",""]);const a=r},44332:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\ninput[data-v-f638b328] {\n  margin: 5px 0;\n  font-size: 1.1em;\n  padding: 0 5px;\n}\ninput[type='radio'][data-v-f638b328] {\n  height: 20px;\n  width: 20px;\n  vertical-align: middle;\n  margin-right: 5px;\n}\ninput[type='checkbox'][data-v-f638b328] {\n  width: 20px;\n  height: 20px;\n  vertical-align: middle;\n  margin-right: 5px;\n}\nlabel[data-v-f638b328] {\n  font-size: 1.1em;\n  vertical-align: middle;\n}\ninput[data-v-f638b328]:focus {\n  outline: none;\n}\n.input-view[data-v-f638b328] {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n}\n.cipher-list[data-v-f638b328] {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  /* grid-column-gap: 30px; */\n  /* grid-auto-rows: minmax(40px, auto); */\n}\n.ss-list[data-v-f638b328] {\n  display: flex;\n  flex-direction: column;\n}\n.vmess-list[data-v-f638b328] {\n  display: flex;\n  flex-direction: column;\n}\n.proxy-type-list[data-v-f638b328] {\n  display: flex;\n  justify-content: flex-start;\n}\n.group-type-list[data-v-f638b328] {\n  display: flex;\n  justify-content: flex-start;\n}\n.group-type-list > div[data-v-f638b328] {\n  margin-right: 30px;\n}\n.proxy-type-list > div[data-v-f638b328] {\n  margin-right: 30px;\n}\n.btns[data-v-f638b328] {\n  margin-top: 20px;\n  display: flex;\n  justify-content: space-around;\n}\n.btn[data-v-f638b328] {\n  padding: 5px 10px;\n  font-size: 1.1em;\n  text-align: center;\n  width: 100px;\n  border-radius: 4px;\n  /* box-shadow: 1px 1px 5px 1px rgba(50, 50, 50, 0.5); */\n}\n.cancel[data-v-f638b328] {\n  background-color: #c0c0c0c0;\n}\n.confirm[data-v-f638b328] {\n  background-color: #375df3;\n  color: #fff;\n}\n",""]);const a=r},82611:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n#main-log-view[data-v-459dde1e] {\n  height: 100%;\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n}\n.ctl-icon[data-v-459dde1e] {\n  width: 22px;\n  height: 22px;\n  cursor: pointer;\n  margin-left: 10px;\n}\n.emoji-name[data-v-459dde1e] {\n  display: flex;\n  align-items: center;\n}\n.header[data-v-459dde1e] {\n  display: flex;\n  justify-content: space-between;\n  padding: 0 50px 0 40px;\n  align-items: center;\n  height: 60px;\n}\n.header-btns[data-v-459dde1e] {\n  display: flex;\n  justify-content: flex-end;\n}\n.filter-view[data-v-459dde1e] {\n  width: calc(100vw - 170px);\n  height: 50px;\n}\n.filter-view input[data-v-459dde1e] {\n  margin: 0px 40px 10px 40px;\n  cursor: text;\n  width: calc(100vw - 250px);\n  height: 40px;\n  padding: 0px 10px;\n  border-radius: 5px;\n  font-size: 1.1em;\n}\n.filter-view input[data-v-459dde1e]:focus {\n  outline: none;\n  /* box-shadow: 0px 4px 10px 2px rgba(50, 50, 50, 0.4); */\n}\n.btn[data-v-459dde1e] {\n  cursor: pointer;\n  box-shadow: 0px 0px 4px 1px rgba(50, 50, 50, 0.2);\n  margin-left: 20px;\n  width: 80px;\n  text-align: center;\n  padding: 5px 10px;\n  border-radius: 5px;\n  color: #fff;\n}\n.btn-add[data-v-459dde1e] {\n  background-color: rgba(49, 167, 227, 1);\n}\n.btn-save[data-v-459dde1e] {\n  background-color: rgba(65, 184, 131, 1);\n}\n.btn-back[data-v-459dde1e] {\n  background-color: rgb(224, 221, 34);\n}\n.title[data-v-459dde1e] {\n  font-size: 1.1em;\n  margin-bottom: 0px;\n}\n.log-item[data-v-459dde1e] {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 5px 20px;\n  width: 100%;\n  border-bottom: 1px solid rgba(50, 50, 50, 0.1);\n}\n.left[data-v-459dde1e] {\n  flex-grow: 1;\n  padding-right: 40px;\n  overflow: hidden;\n}\n.right-main[data-v-459dde1e] {\n  display: flex;\n  align-items: center;\n}\nimg[data-v-459dde1e] {\n  margin-left: 10px;\n  width: 25px;\n  height: 25px;\n}\n.url[data-v-459dde1e] {\n  font-size: 18px;\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n}\n.rule-set[data-v-459dde1e] {\n  color: rgb(255, 94, 0);\n}\n.right[data-v-459dde1e] {\n  font-size: 1em;\n  padding: 5px 10px;\n  border-radius: 4px;\n  color: #fff;\n  opacity: 0.8;\n  box-shadow: 0px 0px 4px 1px rgba(50, 50, 50, 0.2);\n}\n",""]);const a=r},54280:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,'\n.modal-mask[data-v-eea841c4] {\n  position: fixed;\n  z-index: 9998;\n  top: 0;\n  left: 170px;\n  width: calc(100vw - 170px);\n  height: 100vh;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: table;\n  transition: opacity 0.3s ease;\n}\n.modal-wrapper[data-v-eea841c4] {\n  display: table-cell;\n  vertical-align: middle;\n}\n.modal-header h3[data-v-eea841c4] {\n  margin-top: 0;\n  color: #42b983;\n}\n.modal-body[data-v-eea841c4] {\n  margin: 20px 0;\n}\n.modal-default-button[data-v-eea841c4] {\n  float: right;\n}\n\n/*\n * The following styles are auto-applied to elements with\n * transition="modal" when their visibility is toggled\n * by Vue.js.\n *\n * You can easily play with the modal transition by editing\n * these styles.\n */\n.modal-enter[data-v-eea841c4] {\n  opacity: 0;\n}\n.modal-leave-active[data-v-eea841c4] {\n  opacity: 0;\n}\n.modal-enter .modal-container[data-v-eea841c4],\n.modal-leave-active .modal-container[data-v-eea841c4] {\n  transform: scale(1.1);\n}\ninput[data-v-eea841c4]:focus {\n  outline: none;\n}\ninput[data-v-eea841c4] {\n  height: 40px;\n  width: 100%;\n  font-size: 18px;\n  padding: 0 10px;\n}\n.rule-type-group[data-v-eea841c4] {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  grid-row-gap: 10px;\n  grid-column-gap: 10px;\n  grid-auto-rows: minmax(30px, auto);\n}\n.rule-type-item[data-v-eea841c4] {\n  text-align: center;\n  line-height: 30px;\n  border-radius: 5px;\n  color: #fff;\n  padding: 5px 10px;\n  background-color: rgba(101, 81, 122, 0.6);\n}\n.rule-type-selected[data-v-eea841c4] {\n  background-color: rgba(101, 81, 122, 1);\n}\n.rule-proxy-group[data-v-eea841c4] {\n  margin-bottom: 60px;\n  display: grid;\n  grid-template-columns: repeat(1, 1fr);\n  grid-row-gap: 10px;\n  grid-column-gap: 10px;\n  grid-auto-rows: minmax(30px, auto);\n}\n.rule-proxy-item[data-v-eea841c4] {\n  text-align: center;\n  line-height: 30px;\n  border-radius: 5px;\n  color: #fff;\n  padding: 5px 10px;\n  background-color: rgba(55, 57, 72, 0.6);\n}\n.rule-proxy-selected[data-v-eea841c4] {\n  background-color: rgba(55, 57, 72, 1);\n}\n.rule-section-title[data-v-eea841c4] {\n  font-size: 1em;\n  color: rgba(166, 165, 164, 1);\n  margin-top: 10px;\n  margin-bottom: 5px;\n}\n.rule-floating-btns[data-v-eea841c4] {\n  right: calc(80vw - 585px);\n  bottom: calc(100vh - 450px);\n  display: flex;\n}\n.rule-floating-btns > div[data-v-eea841c4] {\n  font-size: 0.8em;\n  width: 80px;\n  height: 35px;\n  margin-left: 10px;\n  line-height: 50px;\n  text-align: center;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  border-radius: 3px;\n  color: #fff;\n}\n.rule-floating-cancel[data-v-eea841c4] {\n  background-color: rgba(65, 184, 131, 1);\n}\n.rule-floating-ok[data-v-eea841c4] {\n  background-color: rgba(58, 86, 197, 1);\n}\n',""]);const a=r},73316:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n.secret-hint[data-v-fc0cd1de] {\n    position: absolute;\n    top: 0px;\n    right: -1.5rem\n}\n",""]);const a=r},88525:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\n.navigator[data-v-35f836ea] {\n\n    top: 0px;\n\n    z-index: 120;\n\n    height: 100%;\n\n    --tw-border-opacity: 1;\n\n    border-color: rgb(133 133 133 / var(--tw-border-opacity));\n\n    --tw-bg-opacity: 1;\n\n    background-color: rgb(30 30 30 / var(--tw-bg-opacity))\n}\n.navigator[data-v-35f836ea] .item {\n\n    --tw-text-opacity: 1;\n\n    color: rgb(223 223 223 / var(--tw-text-opacity))\n}\n",""]);const a=r},30020:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"\ninput[data-v-05227e49] {\n    border-radius: 0.25rem;\n    border-width: 1px;\n    border-style: solid;\n    --tw-border-opacity: 1;\n    border-color: rgb(85 79 79 / var(--tw-border-opacity));\n    --tw-bg-opacity: 1;\n    background-color: rgb(44 42 56 / var(--tw-bg-opacity))\n}\ninput[data-v-05227e49]::-moz-placeholder {\n    --tw-text-opacity: 1;\n    color: rgb(163 163 163 / var(--tw-text-opacity))\n}\ninput[data-v-05227e49]:-ms-input-placeholder {\n    --tw-text-opacity: 1;\n    color: rgb(163 163 163 / var(--tw-text-opacity))\n}\ninput[data-v-05227e49]::placeholder {\n    --tw-text-opacity: 1;\n    color: rgb(163 163 163 / var(--tw-text-opacity))\n}\n",""]);const a=r},46485:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>u});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s),a=i(61667),l=i.n(a),c=new URL(i(9665),i.b),d=r()(o()),h=l()(c);d.push([e.id,`@font-face{font-family:"TwemojiMozilla";src:url(${h}) format("truetype")}.clickable{cursor:pointer}.clickable *{cursor:pointer}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none}.no-esc{outline:none}`,""]);const u=d},69674:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".wrapper[data-v-68cbbc92]{height:100vh;width:100vw;overflow:hidden}",""]);const a=r},40771:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".chat-list[data-v-4a737543]{display:flex;justify-content:left;flex-wrap:wrap}",""]);const a=r},16466:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".scrolly[data-v-4a737543]{overflow-y:auto}.scrolly[data-v-4a737543]::-webkit-scrollbar{width:16px}.scrolly[data-v-4a737543]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.scrolly[data-v-4a737543]::-webkit-scrollbar-corner{background-color:var(--bgc)}",""]);const a=r},46073:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".ad-img[data-v-34599eb0]{width:100%;width:620px;height:150px;border-radius:3px}.placeholder[data-v-34599eb0]{line-height:150px;color:#fff;background-color:#e2e2e2;display:flex;align-items:center;justify-content:center}.placeholder div[data-v-34599eb0]{margin-right:10px;color:#fff}.placeholder img[data-v-34599eb0]{width:30px}.error-img[data-v-34599eb0]{display:flex;width:620px;height:150px;background-color:#e2e2e2;align-items:center;justify-content:center}.error-img div[data-v-34599eb0]{margin-right:10px;color:#858585}.error-img img[data-v-34599eb0]{width:30px}.twinkling[data-v-34599eb0]{animation:twinkling-34599eb0 2s infinite;animation-timing-function:ease-in-out}@keyframes twinkling-34599eb0{0%{background-color:#e9e9e9}50%{background-color:#d4d4d4}100%{background-color:#e9e9e9}}",""]);const a=r},87133:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-connection-view[data-v-39b270f2]{overflow:hidden;display:flex;justify-content:space-between;flex-direction:column;height:100%;position:relative}.main-connection-view .header[data-v-39b270f2]{height:40px;display:flex;justify-content:space-between;align-items:center;margin:auto 20px;flex-shrink:0}.main-connection-view .header .search-area[data-v-39b270f2]{position:relative;flex-grow:1;margin:0 10px 0 5px}.main-connection-view .header .search-area .search-box[data-v-39b270f2]{padding:0 22px 0 4px;outline:none;height:25px;border-radius:4px;line-height:25px;font-size:14px;width:100%}.main-connection-view .control-view[data-v-39b270f2]{display:flex;padding:0 20px 10px 16px;justify-content:space-between;height:40px;flex-shrink:0}.main-connection-view .control-view .labels[data-v-39b270f2]{display:flex;align-items:center;color:#fff;flex-shrink:1}.main-connection-view .control-view .labels .label[data-v-39b270f2]{width:65px;height:28px;font-size:14px;font-weight:normal;margin:0 5px 0 0;padding:0 8px;line-height:25px;cursor:pointer;background-color:rgba(100,100,100,.5);border-radius:3px}.main-connection-view .control-view .labels .label-selected[data-v-39b270f2]{background-color:rgba(14,184,65,.932)}.main-connection-view .control-view .labels .label-selected-reverse[data-v-39b270f2]{background-color:#0f6bb1}.title[data-v-39b270f2]{height:40px;display:flex;align-items:center}.title div[data-v-39b270f2]:first-child{font-size:20px;display:flex;align-items:baseline}.title div:first-child span[data-v-39b270f2]{font-size:12px;margin-left:6px}.header-right[data-v-39b270f2]{display:flex;align-items:center}.total-hint[data-v-39b270f2]{font-size:15px;white-space:nowrap}.scroll-view[data-v-39b270f2]{height:calc(100% - 60px);width:calc(100% - 0px);overflow-y:auto}.scroll-view[data-v-39b270f2]::-webkit-scrollbar{width:16px}.scroll-view[data-v-39b270f2]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.scroll-view[data-v-39b270f2]::-webkit-scrollbar-corner{background-color:var(--bgc)}.conn-item[data-v-39b270f2]{padding:1px 20px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--log-list-border-c)}.conn-item-closed[data-v-39b270f2]{opacity:.7}.conn-item-top[data-v-39b270f2]{display:flex;justify-content:space-between}.conn-host[data-v-39b270f2]{font-size:14px;font-weight:500}.close-btn[data-v-39b270f2]{width:23px;height:23px;border-radius:15px;cursor:pointer;opacity:.8}.close-btn *[data-v-39b270f2]{cursor:pointer}.close-btn[data-v-39b270f2]:hover{opacity:1}.item-icon[data-v-39b270f2]{width:19px;margin:2px;height:19px}.close-all-btn[data-v-39b270f2]{padding:0 10px;margin-left:10px;text-align:center;height:30px;line-height:28px;cursor:pointer;background-color:rgba(243,61,61,.801);border-radius:3px;color:#fff;flex-shrink:0;height:28px;font-size:14px;font-weight:normal}.conn-labels[data-v-39b270f2]{font-size:11px;display:flex;margin-bottom:3px;flex-wrap:wrap}.conn-labels>div[data-v-39b270f2]{margin-right:5px;margin-top:1px;padding:2px 4px;color:#fff;font-weight:normal;border-radius:3px}.conn1[data-v-39b270f2]{background-color:rgba(194,104,25,.8)}.conn2[data-v-39b270f2]{background-color:rgba(193,131,16,0.7725490196)}.conn4[data-v-39b270f2]{background-color:rgba(85,152,52,0.8078431373)}.conn3[data-v-39b270f2]{background-color:rgba(0,134,76,0.7882352941)}.conn5[data-v-39b270f2]{background-color:#428ee4}.conn6[data-v-39b270f2]{background-color:#4c10ae}.conn7[data-v-39b270f2]{background-color:#8b8b00}.button-control[data-v-39b270f2]{padding:0 10px;text-align:center;height:25px;font-weight:normal;line-height:25px;cursor:pointer;border-radius:3px;color:#fff}.button-resume[data-v-39b270f2]{background-color:rgba(14,151,185,.959)}.button-pause[data-v-39b270f2]{background-color:rgba(243,61,61,.801)}.selected-top[data-v-39b270f2]{border-bottom-right-radius:10px}.selected-bottom[data-v-39b270f2]{border-top-right-radius:10px}.item-none[data-v-39b270f2]{background-color:var(--mbgc);color:var(--menu-fgc)}.scrolly[data-v-39b270f2]{overflow-y:auto}.scrolly[data-v-39b270f2]::-webkit-scrollbar{width:16px}.scrolly[data-v-39b270f2]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.scrolly[data-v-39b270f2]::-webkit-scrollbar-corner{background-color:var(--bgc)}",""]);const a=r},68361:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main[data-v-947c6bac]{width:100%;height:100%;position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#000;z-index:10}.main *[data-v-947c6bac]{user-select:text}.main[data-v-947c6bac] *{user-select:text}.card-main[data-v-947c6bac]{border-radius:2px;max-width:60%;max-height:90%;min-width:420px;height:fit-content;display:flex;flex-direction:column;justify-content:space-around;box-shadow:0px 0px 10px 3px rgba(14,14,14,.164)}.card-content[data-v-947c6bac]{width:100%;height:100%;display:flex;flex-direction:column}.content-title[data-v-947c6bac]{font-size:20px;line-height:60px;height:60px}.content-list[data-v-947c6bac]{overflow-y:auto;overflow-x:hidden;flex-grow:1}.content-list[data-v-947c6bac]::-webkit-scrollbar{width:4px;background-color:rgba(151,151,151,0.4117647059)}.content-list[data-v-947c6bac]::-webkit-scrollbar-thumb{background-color:#3e3c4d}.content-item[data-v-947c6bac]{border-bottom:1px solid rgba(50,50,50,.1);display:flex;align-items:baseline;flex-direction:column;justify-content:center;word-break:break-word}.item-key[data-v-947c6bac]{font-size:16px}.item-value[data-v-947c6bac]{font-size:14px}",""]);const a=r},5464:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-general-view[data-v-357ec510]{display:flex;flex-direction:column;justify-content:space-between;height:calc(100vh - 25px)}.content[data-v-357ec510]{padding:5px;flex-grow:1;overflow:hidden;display:flex;justify-content:space-between;flex-direction:column;margin:0 auto;width:70vw;height:80vh;max-height:600px;max-width:650px}.item[data-v-357ec510]{position:relative;padding:0px 20px;font-size:1.1em;display:flex;align-items:center;justify-content:space-between;border-radius:3px;height:100%;transition:background-color .3s}.item[data-v-357ec510]:hover{background-color:var(--general-item-bgc)}.title[data-v-357ec510]{color:var(--general-title-c);font-size:2em;font-weight:500;cursor:pointer;display:flex;align-items:center}.clickable[data-v-357ec510]{cursor:pointer;border-bottom-style:dashed;border-bottom-width:1px;border-bottom-color:var(--general-clickable-border-c)}.interfaces-card[data-v-357ec510]{position:fixed;left:calc(170px + (100vw - 170px)/2);transform:translate(-50%);bottom:20px;background-color:var(--general-interface-card-bgc);padding:10px 30px;border-radius:5px;max-height:50vh;overflow-y:auto;box-shadow:1px 1px 10px 2px rgba(50,50,50,.3);z-index:2000}.interfaces-card[data-v-357ec510]::-webkit-scrollbar{width:16px}.interfaces-card[data-v-357ec510]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.interfaces-card[data-v-357ec510]::-webkit-scrollbar-corner{background-color:var(--bgc)}.interfaces-content[data-v-357ec510]{color:var(--general-interface-card-fgc);display:flex;align-items:flex-end;margin:10px 0px;align-items:center}.copy-icon[data-v-357ec510]{margin-right:10px;margin-top:2px;cursor:pointer}.copy-icon *[data-v-357ec510]{cursor:pointer}.tun-settings-icon[data-v-357ec510]{width:24px;height:24px;padding:2px;margin-left:10px;border-radius:5px;cursor:pointer}.tun-settings-icon *[data-v-357ec510]{cursor:pointer}.tun-settings-icon[data-v-357ec510]:hover{background-color:rgba(54,54,54,.26)}",""]);const a=r},57726:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".error-hint[data-v-9ba71ad8]{font-size:14px;cursor:pointer;background-color:var(--bgc);color:var(--fgc);border:1px solid var(--bc);border-radius:3px;box-shadow:0px 0px 2px 1px var(--shadow);padding:6px 15px}#error-view-main[data-v-9ba71ad8]{display:flex;flex-direction:column;align-items:center;justify-content:center;flex-grow:1;padding-bottom:60px}#error-view-main .error-content[data-v-9ba71ad8]{font-size:15px;border:1px solid rgba(175,175,175,.178);padding:10px;max-height:100px;overflow-y:auto;margin-top:10px;margin-left:40px;margin-right:40px;color:#e74949}#error-view-main .error-content[data-v-9ba71ad8]::-webkit-scrollbar{width:16px}#error-view-main .error-content[data-v-9ba71ad8]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}#error-view-main .error-content[data-v-9ba71ad8]::-webkit-scrollbar-corner{background-color:var(--bgc)}.error-hints[data-v-9ba71ad8]{display:flex;flex-direction:column;align-items:center}.loading-hint[data-v-9ba71ad8]{font-size:22px;margin-bottom:40px}.error-btns[data-v-9ba71ad8]{display:flex;margin-top:30px}.error-btns div[data-v-9ba71ad8]{width:150px;text-align:center;margin:0 20px}",""]);const a=r},57059:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".list[data-v-d9b850ea]{overflow-y:auto}.list[data-v-d9b850ea]::-webkit-scrollbar{width:16px}.list[data-v-d9b850ea]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.list[data-v-d9b850ea]::-webkit-scrollbar-corner{background-color:var(--bgc)}.if-list *[data-v-d9b850ea]{user-select:text}.if-list[data-v-d9b850ea] *{user-select:text}",""]);const a=r},46907:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-tun-settings-view[data-v-47896be6]{width:calc(100% - 170px);height:calc(100% - 25px);position:absolute;top:25px;left:170px;color:#000}.main-tun-settings-view .content[data-v-47896be6]{border-radius:3px;width:600px;position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);padding:10px 20px;font-size:14px;font-weight:bold}.main-tun-settings-view .content .title[data-v-47896be6]{font-size:16px;margin-bottom:5px}.main-tun-settings-view .content .hint[data-v-47896be6]{opacity:.8}.main-tun-settings-view .content .hint span[data-v-47896be6]{opacity:1;font-weight:bold}.main-tun-settings-view .content .pannel[data-v-47896be6]{display:flex;height:100%;gap:10px}.main-tun-settings-view .content .pannel .left[data-v-47896be6]{width:300px;border-radius:5px;padding:5px 10px;max-height:430px;overflow:auto;overflow-y:auto}.main-tun-settings-view .content .pannel .left[data-v-47896be6]::-webkit-scrollbar{width:16px}.main-tun-settings-view .content .pannel .left[data-v-47896be6]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.main-tun-settings-view .content .pannel .left[data-v-47896be6]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-tun-settings-view .content .pannel .left>div[data-v-47896be6]{margin-bottom:5px}.main-tun-settings-view .content .pannel .left .flex[data-v-47896be6]{height:30px;align-items:center;justify-content:space-between;display:flex}.main-tun-settings-view .content .pannel .left .flex input[data-v-47896be6]{width:120px;text-align:center;outline:none;border-radius:3px;height:25px}.main-tun-settings-view .content .pannel .right[data-v-47896be6]{width:300px;padding:5px 10px;border-radius:4px;max-height:430px;overflow:auto;overflow-y:auto}.main-tun-settings-view .content .pannel .right[data-v-47896be6]::-webkit-scrollbar{width:16px}.main-tun-settings-view .content .pannel .right[data-v-47896be6]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.main-tun-settings-view .content .pannel .right[data-v-47896be6]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-tun-settings-view .content .pannel .right *[data-v-47896be6]{user-select:text}.main-tun-settings-view .content .pannel .right[data-v-47896be6] *{user-select:text}.main-tun-settings-view .content .btns[data-v-47896be6]{display:flex}.main-tun-settings-view .content .btns div[data-v-47896be6]:nth-child(2){width:10px}.main-tun-settings-view .content .btns .btn[data-v-47896be6]{flex-grow:2;background-color:#41b883;color:#fff;height:30px;margin-top:10px;line-height:30px;text-align:center;border-radius:3px}",""]);const a=r},37911:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-tun-settings-view[data-v-b6dface2]{width:calc(100% - 170px);height:calc(100% - 25px);position:absolute;top:25px;left:170px;color:#000}.main-tun-settings-view .content[data-v-b6dface2]{border-radius:3px;width:600px;position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);padding:10px 20px;font-size:14px;font-weight:bold}.main-tun-settings-view .content .title[data-v-b6dface2]{font-size:16px;margin-bottom:5px}.main-tun-settings-view .content .pannel[data-v-b6dface2]{display:flex;height:100%}.main-tun-settings-view .content .pannel .left[data-v-b6dface2]{width:300px;border-radius:5px;padding:5px 10px;max-height:430px;overflow:auto;overflow-y:auto}.main-tun-settings-view .content .pannel .left[data-v-b6dface2]::-webkit-scrollbar{width:16px}.main-tun-settings-view .content .pannel .left[data-v-b6dface2]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.main-tun-settings-view .content .pannel .left[data-v-b6dface2]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-tun-settings-view .content .pannel .left>div[data-v-b6dface2]{margin-bottom:5px}.main-tun-settings-view .content .pannel .left .flex[data-v-b6dface2]{height:30px;align-items:center;justify-content:space-between;display:flex}.main-tun-settings-view .content .pannel .left .flex input[data-v-b6dface2]{width:120px;text-align:center;outline:none;border-radius:3px;height:25px}.main-tun-settings-view .content .pannel .right[data-v-b6dface2]{width:300px;margin-left:10px;border-radius:4px;max-height:430px;overflow:auto;overflow-y:auto}.main-tun-settings-view .content .pannel .right[data-v-b6dface2]::-webkit-scrollbar{width:16px}.main-tun-settings-view .content .pannel .right[data-v-b6dface2]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.main-tun-settings-view .content .pannel .right[data-v-b6dface2]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-tun-settings-view .content .pannel .right *[data-v-b6dface2]{user-select:text}.main-tun-settings-view .content .pannel .right[data-v-b6dface2] *{user-select:text}.main-tun-settings-view .content .pannel .right pre[data-v-b6dface2]{width:100%;height:100%;padding:5px;font-weight:normal;font-family:Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace}.main-tun-settings-view .content .btns[data-v-b6dface2]{display:flex;gap:4px}.main-tun-settings-view .content .btns div[data-v-b6dface2]:nth-child(1){background-color:rgba(0,0,0,0);color:#d44545;border:1px solid #d44545;flex-grow:1}.main-tun-settings-view .content .btns div[data-v-b6dface2]:nth-child(2){background-color:rgba(0,0,0,0);color:var(--fgc);opacity:.7;border:1px solid var(--fgc);flex-grow:1}.main-tun-settings-view .content .btns .btn[data-v-b6dface2]{flex-grow:3;background-color:#41b883;color:#fff;height:30px;margin-top:10px;line-height:30px;text-align:center;border-radius:3px}",""]);const a=r},11892:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-log-view[data-v-6acd51f2]{height:100%;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between}.main-log-view .title[data-v-6acd51f2]{padding:0 20px;font-size:20px;height:80px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--bc)}.main-log-view .title .text .hint[data-v-6acd51f2]{font-size:16px;font-weight:normal}.log-item[data-v-6acd51f2]{display:flex;justify-content:space-between;flex-direction:column;padding:5px 10px 5px 20px;border-bottom:1px solid var(--log-item-border-c)}.rule[data-v-6acd51f2]{font-size:14px;color:var(--log-item-rule-c);display:flex;align-items:center;flex-wrap:wrap}.rule div[data-v-6acd51f2]{margin-right:5px}.rule .payload[data-v-6acd51f2]{color:var(--log-item-payload-c)}.log-list[data-v-6acd51f2]{height:calc(100% - 80px);overflow-y:auto}.log-list[data-v-6acd51f2]::-webkit-scrollbar{width:16px}.log-list[data-v-6acd51f2]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.log-list[data-v-6acd51f2]::-webkit-scrollbar-corner{background-color:var(--bgc)}.log-list .empty-list[data-v-6acd51f2]{font-size:18px;color:gray;width:100%;height:100%;display:flex;align-items:center;flex-direction:column;justify-content:center}.log-list .empty-list div[data-v-6acd51f2]:last-child{font-size:14px}.url[data-v-6acd51f2]{word-break:break-all;white-space:normal;display:flex;flex-direction:column;flex-grow:1}.url .name[data-v-6acd51f2]{font-size:16px}.url div[data-v-6acd51f2]{margin-right:5px}.proxy-name[data-v-6acd51f2]{font-size:14px;margin:auto 0px auto 20px;min-width:50%;display:flex;justify-content:flex-end;word-break:break-all}.left[data-v-6acd51f2]{display:flex}",""]);const a=r},79928:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".menu[data-v-149ea1bd]{background-color:var(--bgc);color:var(--fgc);list-style-type:none;border-bottom:1px solid var(--bc);position:relative;display:flex;flex-direction:column;height:400px;justify-content:space-between}.item[data-v-149ea1bd]{flex-grow:1;font-size:1em;cursor:pointer;display:flex;align-items:center}.item-draggable .item[data-v-149ea1bd]{-webkit-user-drag:element}.item-none[data-v-149ea1bd]{background-color:var(--mbgc);color:var(--menu-fgc)}.running-time[data-v-149ea1bd]{flex-grow:1;color:var(--fgc)}.traffic[data-v-149ea1bd]{margin-top:0px;color:var(--fgc)}.main-main-menu[data-v-149ea1bd]{z-index:2;height:100%;display:flex;flex-direction:column}.main-main-menu .stop-btn[data-v-149ea1bd]{cursor:pointer;position:absolute;top:515px;left:20px;border-radius:20px;color:#fff;height:30px;width:130px;line-height:30px;text-align:center;font-size:14px;font-weight:normal;background-color:#d14444;box-shadow:0px 0px 15px 1px rgba(49,49,49,.3);transform:all .3s}.drag-item[data-v-149ea1bd]{background-color:#41b883;color:#fff}.ghost-item[data-v-149ea1bd]{opacity:0}.shaking1[data-v-149ea1bd]{margin:2px 0;transform-origin:center;animation:shake-rotate-149ea1bd 400ms infinite}.shaking2[data-v-149ea1bd]{margin:2px 0;transform-origin:center;animation:shake-rotate-149ea1bd 400ms infinite;animation-delay:100ms}.shaking3[data-v-149ea1bd]{margin:2px 0;transform-origin:center;animation:shake-rotate-149ea1bd 400ms infinite;animation-delay:200ms}.clickable[data-v-149ea1bd]{cursor:pointer;text-align:center;width:100%}.selected-top[data-v-149ea1bd]{border-bottom-right-radius:10px}.selected-bottom[data-v-149ea1bd]{border-top-right-radius:10px}@keyframes shake-rotate-149ea1bd{0%{transform:rotate(0deg)}12.5%{transform:rotate(0.5deg)}25%{-webkit-transform:rotate(1.2deg)}37.5%{transform:rotate(0.5deg)}50%{transform:rotate(0deg)}62.5%{transform:rotate(-0.5deg)}75%{transform:rotate(-1.2deg)}87.5%{transform:rotate(-0.5deg)}100%{transform:rotate(0deg)}}",""]);const a=r},73816:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".grid[data-v-4f5120b9]{background-color:var(--mbgc);padding:0;width:100%;text-align:center;flex:1;display:flex;align-items:center;font-size:.8em;letter-spacing:.5px}.grid div[data-v-4f5120b9]{width:100%;display:flex;align-items:baseline;padding:0 40px;justify-content:space-between}.main-clash-traffic-view[data-v-4f5120b9]{height:80px;display:flex;flex-direction:column;border-bottom:1px solid var(--bc)}",""]);const a=r},26534:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-provider-view[data-v-3e34584d]{width:calc(100% - 170px);height:calc(100% - 25px);position:absolute;top:25px;right:0;display:flex;justify-content:center;align-items:center;z-index:10;font-size:16px}.main-provider-view .card[data-v-3e34584d]{display:flex;flex-direction:column;height:100%;width:100%}.main-provider-view .card .header[data-v-3e34584d]{min-height:80px;height:80px;border-bottom:1px solid var(--bc);background-color:var(--bgc);width:100%}.main-provider-view .card .header .buttons[data-v-3e34584d]{height:100%;width:100%;display:flex;align-items:center;justify-content:center}.main-provider-view .card .header .buttons .btn[data-v-3e34584d]{font-size:16px;color:var(--mode-switcher-selected-fgc);background-color:var(--mode-switcher-selected-bgc);border-radius:3px;height:35px;padding:0 20px;width:fit-content}.main-provider-view .card .header .buttons .btn[data-v-3e34584d]:first-child{margin-right:30px}.main-provider-view .content[data-v-3e34584d]{padding:5px 0 40px 0;flex-grow:1;display:flex;flex-direction:column;height:100%;width:100%;overflow-y:auto}.main-provider-view .content[data-v-3e34584d]::-webkit-scrollbar{width:16px}.main-provider-view .content[data-v-3e34584d]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.main-provider-view .content[data-v-3e34584d]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-provider-view .content .title[data-v-3e34584d]{margin-top:10px;font-size:16px;text-align:center;padding-bottom:10px;border-bottom:1px solid var(--bc)}.main-provider-view .content .items .provider-item[data-v-3e34584d]{padding:7px 35px 7px 45px;border-bottom:1px solid var(--bc)}.main-provider-view .content .items .provider-item .provider-item-main[data-v-3e34584d]{display:flex;align-items:center}.main-provider-view .content .items .provider-item .provider-item-main .name-type[data-v-3e34584d]{display:flex;align-items:center}.main-provider-view .content .items .provider-item .provider-item-main .name-type .name[data-v-3e34584d]{font-size:16px;max-width:180px;overflow:clip;white-space:nowrap;text-overflow:ellipsis}.main-provider-view .content .items .provider-item .provider-item-main .update-hint[data-v-3e34584d]{font-size:14px;color:var(--proxy-item-hint-c)}.main-provider-view .content .items .provider-item .provider-item-main .error-hint[data-v-3e34584d]{color:var(--proxy-item-latency-offline-c);font-size:12px;max-width:500px;text-overflow:ellipsis;white-space:normal;overflow:hidden}.main-provider-view .content .items .provider-item .provider-item-main .empty[data-v-3e34584d]{flex-grow:1}.main-provider-view .content .items .provider-item .provider-item-main .icon-btn[data-v-3e34584d]{width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:3px}.main-provider-view .content .items .provider-item .provider-item-main .icon-btn[data-v-3e34584d]:hover{background-color:rgba(0,0,0,.123)}.main-provider-view .content .items .provider-item .provider-item-main .icon-btn:hover *[data-v-3e34584d]{cursor:pointer}.main-provider-view .content .items .provider-item .provider-item-main .icon-btn .rotating[data-v-3e34584d]{animation:downloading-3e34584d 1s infinite;animation-timing-function:linear}@keyframes downloading-3e34584d{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.main-provider-view .content .items .provider-item .provider-item-main .icon-btn svg[data-v-3e34584d]{width:20px;height:20px;fill:var(--fgc)}.main-provider-view .content .items .provider-item .time[data-v-3e34584d]{font-size:14px}.main-provider-view .content .items .provider-item .proxies[data-v-3e34584d]{display:grid;grid-template-columns:repeat(auto-fill, 130px);font-size:14px}.main-provider-view .content .items .provider-item .proxies .proxy-item[data-v-3e34584d]{height:80px}",""]);const a=r},8137:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".fake-item[data-v-0729f95b]{height:45px;background-color:var(--proxy-fake-item-bgc);box-shadow:none}.fake-section[data-v-0729f95b]{background-color:var(--proxy-fake-item-bgc);height:50px;width:300px;margin-top:20px;margin-left:40px}#main-proxy-view[data-v-0729f95b]{height:100%;display:flex;flex-direction:column;overflow:hidden}.scroll-view[data-v-0729f95b]{margin-top:88px;padding-bottom:70px;flex-grow:1;height:calc(100% - 80px);overflow-y:auto}.scroll-view[data-v-0729f95b]::-webkit-scrollbar{width:16px}.scroll-view[data-v-0729f95b]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.scroll-view[data-v-0729f95b]::-webkit-scrollbar-corner{background-color:var(--bgc)}.scroll-view .proxy-item[data-v-0729f95b]{margin:4px 6px;display:flex;align-items:center;flex-grow:1;transition:all .3s}.scroll-view .proxy-item .indicator[data-v-0729f95b]{width:4px;min-width:4px;background-color:var(--proxy-item-border-c);height:calc(100% - 2px);border-radius:10px;margin-right:4px}.scroll-view .proxy-item .info[data-v-0729f95b]{height:100%;padding:7px 0;background:var(--proxy-item-bgc);flex-grow:1;display:flex;border-radius:3px;justify-content:space-between;align-items:center}.scroll-view .proxy-item .info .left[data-v-0729f95b]{flex-grow:1;margin-left:10px;word-break:break-all}.scroll-view .proxy-item .info .left .item-bottom[data-v-0729f95b]{display:flex;font-size:12px;align-items:center;margin-top:2px;color:var(--proxy-item-hint-c)}.scroll-view .proxy-item .info .left .item-bottom .item-hint[data-v-0729f95b]{margin-right:5px}.scroll-view .proxy-item .info .left .item-bottom .item-udp[data-v-0729f95b]{font-size:9px;padding:0 3px;border:1px solid var(--proxy-item-border-c);border-radius:3px;word-break:keep-all}.scroll-view .proxy-item .info .time[data-v-0729f95b]{min-width:70px;text-align:right;font-size:12px;padding:12px 14px 12px 12px;cursor:pointer}.scroll-view .proxy-item .info .offline[data-v-0729f95b]{color:var(--proxy-item-latency-offline-c);font-weight:normal}.scroll-view .proxy-item .info .online[data-v-0729f95b]{color:var(--proxy-item-latency-online-c)}.scroll-view .selected .indicator[data-v-0729f95b]{background-color:var(--proxy-item-selected-border-c)}.proxy-section[data-v-0729f95b]{font-size:1.2em;font-weight:normal;padding:7px 10px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;position:sticky;top:-1px;background-color:var(--bgc);transition:all .3s}.proxy-section[data-v-0729f95b]:hover{border-radius:5px;background-color:var(--general-item-bgc);cursor:pointer}.proxy-section .proxy-section-right[data-v-0729f95b]{display:flex;align-items:flex-end;height:100%;fill:var(--fgc)}.proxy-section .proxy-hint[data-v-0729f95b]{font-size:13px;display:inline;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proxy-section .proxy-hint-type[data-v-0729f95b]{font-size:10px;margin-left:10px;color:var(--proxy-item-type-fgc);background:var(--proxy-item-type-bgc);padding:0 4px;border-radius:3px}.proxy-section .proxy-hint-type-selector[data-v-0729f95b]{background:#41b883}.proxy-section .proxy-hint-line[data-v-0729f95b]{width:10px;height:1px}.empty-hint[data-v-0729f95b]{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;color:rgba(143,143,143,.795)}.empty-hint div[data-v-0729f95b]:first-child{font-size:22px}.empty-hint div[data-v-0729f95b]:last-child{font-size:14px;margin-top:10px}.empty-hint div:last-child span[data-v-0729f95b]{color:#008cff}",""]);const a=r},71717:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".flick[data-v-0729f95b]{opacity:.1}.proxy-list[data-v-0729f95b]{margin:0px 20px 0 30px}.proxy-items[data-v-0729f95b]{display:flex;flex-wrap:wrap;justify-content:space-around}.proxy-items>i[data-v-0729f95b]{margin:0px 6px;flex-grow:1;height:0}.item-name[data-v-0729f95b]{font-size:14px;display:flex;align-items:center;overflow:hidden;word-break:break-all}.proxy-hint-loadbalance[data-v-0729f95b]{font-size:.7em;margin-left:5px;overflow:hidden;padding-bottom:2px}.proxy-item[data-v-0729f95b] div,span[data-v-0729f95b]{cursor:pointer}.proxy-section-name[data-v-0729f95b]{font-size:1.05em;display:flex;align-items:center;max-width:500px}.proxy-section-name-left[data-v-0729f95b]{display:flex;align-items:flex-end;flex-shrink:0;font-size:17px}.proxy-section-test-btn[data-v-0729f95b]{cursor:pointer;height:40px;width:30px}.sec-icon[data-v-0729f95b]{height:30px;width:30px;padding:5px;display:flex;align-items:center;justify-content:center}.sec-icon[data-v-0729f95b]:hover{border-radius:5px;background-color:rgba(187,187,187,.5);cursor:pointer}.filter-keyword[data-v-0729f95b]{position:fixed;bottom:10px;right:45px;width:150px;height:30px}.filter-keyword input[data-v-0729f95b]{width:150px;padding:0 10px;border:none;background-color:#494949;border-radius:5px;height:30px;color:#fff;top:0;right:5px;position:absolute}.filter-keyword input[data-v-0729f95b]:focus{outline:none}.filter-keyword div[data-v-0729f95b]{width:30px;height:30px;position:absolute;right:0px;top:0px;display:flex;align-items:center;justify-content:center;background-color:#494949;border-radius:5px}.filter-keyword div img[data-v-0729f95b]{height:20px;width:20px}.fall-fade-enter-active[data-v-0729f95b]{transition:all .2s ease-in-out}.fall-fade-enter[data-v-0729f95b],.fall-fade-leave-to[data-v-0729f95b]{transform:translateY(-10px);opacity:0}.move-right-enter-active[data-v-0729f95b]{transition:all .2s ease}.move-right-leave-to[data-v-0729f95b],.move-right-enter[data-v-0729f95b]{transform:scaleX(0.1);transform-origin:right}",""]);const a=r},52062:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".selected[data-v-357c3e79]{color:var(--mode-switcher-selected-fgc);background-color:var(--mode-switcher-selected-bgc)}.normal[data-v-357c3e79]{color:var(--mode-switcher-normal-fgc);background-color:var(--mode-switcher-normal-bgc)}.main[data-v-357c3e79]{border-bottom:1px solid var(--bc)}#main-mode-switcher[data-v-357c3e79]{padding:auto 20px;width:calc(100vw - 170px);height:80px;position:fixed}#main-mode-switcher .btns[data-v-357c3e79]{height:100%;align-items:center;margin:0 auto;display:flex;max-width:600px;justify-content:space-between}#main-mode-switcher .btns .btn[data-v-357c3e79]{margin:0 0;font-weight:500;font-size:1.2em;width:120px;height:40px;text-align:center;line-height:40px;border-radius:6px;box-shadow:1px 1px 5px 2px rgba(70,70,70,.1);cursor:pointer}",""]);const a=r},63329:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-router-view[data-v-74ff0369]{height:100%;width:100%;position:relative}.main-router-view .header[data-v-74ff0369]{height:80px;border-bottom:1px solid var(--bc);font-size:20px;display:flex;justify-content:space-between;align-items:center;padding:0 20px}.main-router-view .header .btn[data-v-74ff0369]{font-size:16px;padding:5px 15px;margin-right:10px;text-align:center;font-weight:normal;cursor:pointer;border-radius:3px;color:#fff}.main-router-view .header .btn-start[data-v-74ff0369]{background-color:#535353}.main-router-view .header .btn-stop[data-v-74ff0369]{background-color:#41b883}.main-router-view .list[data-v-74ff0369]{font-size:16px;padding:20px 20px 20px 30px;height:calc(100% - 80px);overflow-y:auto}.main-router-view .list[data-v-74ff0369]::-webkit-scrollbar{width:16px}.main-router-view .list[data-v-74ff0369]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.main-router-view .list[data-v-74ff0369]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-router-view .list .item[data-v-74ff0369]{margin:10px 0px;display:flex;align-items:center;justify-content:space-between}.main-router-view .list .item .left .name Input[data-v-74ff0369]{font-size:16px;border:none;outline:none;background-color:rgba(255,255,255,0);color:var(--fgc)}.main-router-view .list .item .left .ip[data-v-74ff0369]{font-size:12px;color:var(--proxy-item-hint-c)}.main-router-view .list .item .right[data-v-74ff0369]{font-size:14px;display:flex;align-items:center}.main-router-view .list .item .right .btn[data-v-74ff0369]{padding:5px 10px;text-align:center;font-weight:normal;cursor:pointer;border-radius:3px;background-color:rgba(216,216,216,.452);margin-left:10px}",""]);const a=r},22736:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,'.main-router-config-view[data-v-0ffa25f2]{background-color:rgba(50,50,50,.6);width:100%;height:100%;position:absolute;top:0px;left:0px;color:#000}.main-router-config-view .content[data-v-0ffa25f2]{border-radius:3px;width:500px;position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);padding:20px;font-size:14px;font-weight:bold}.main-router-config-view .content .title[data-v-0ffa25f2]{font-size:16px;margin-bottom:5px}.main-router-config-view .content .sec[data-v-0ffa25f2]{margin:10px 0;border-radius:3px;padding:5px 0px}.main-router-config-view .content .sec .flex[data-v-0ffa25f2]{display:flex}.main-router-config-view .content .sec span[data-v-0ffa25f2]{margin-right:3px}.main-router-config-view .content .sec span[data-v-0ffa25f2]::after{content:" :"}.main-router-config-view .content .sec input[data-v-0ffa25f2]{text-align:center;width:120px;margin-right:20px;border-radius:3px;outline:none;font-weight:normal;background-color:rgba(0,0,0,0)}.main-router-config-view .content .btn[data-v-0ffa25f2]{background-color:#41b883;color:#fff;height:30px;line-height:30px;text-align:center;border-radius:3px}',""]);const a=r},98319:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".card[data-v-820f0efe]{position:fixed;padding:0 35px;height:80px;width:calc(100vw - 170px);display:flex;justify-content:space-between;background-color:var(--bgc);border-bottom:1px solid var(--bc)}.list-item[data-v-820f0efe]{background-color:var(--bgc);margin:4px 6px;display:flex;justify-content:space-between;position:relative;width:295px;flex-grow:1}.list-item .item-subinfo[data-v-820f0efe]{width:fit-content}.list-item .item-subinfo .item-subinfo-texts[data-v-820f0efe]{display:flex;font-size:11px;color:var(--proxy-item-hint-c)}.list-item .item-subinfo .item-subinfo-texts div[data-v-820f0efe]{margin-right:10px}.list-item .item-subinfo .item-subinfo-texts div[data-v-820f0efe]:last-child{margin-right:0}.list-item .item-subinfo .progress[data-v-820f0efe]{background-color:var(--proxy-item-subs-bgc);text-align:center;height:3px;width:100%;color:var(--proxy-item-subs-fgc);position:relative;border-radius:3px;margin-bottom:2px}.list-item .item-subinfo .progress .percent[data-v-820f0efe]{border-radius:3px;width:100%;top:0;left:0;position:absolute;height:100%;background-color:var(--proxy-item-subs-used-bgc)}.list-item .indicator[data-v-820f0efe]{margin-right:4px;margin-top:2px;width:4px;height:calc(100% - 4px);border-radius:10px;background-color:var(--proxy-item-border-c)}.list-item .item-info[data-v-820f0efe]{padding:4px 5px;background-color:var(--proxy-item-bgc);display:flex;align-items:center;justify-content:flex-start;flex-grow:1;max-width:calc(100% - 8px);border-radius:3px;height:100%;position:relative}.list-item .item-info .refresh-icon[data-v-820f0efe]{width:18px;height:18px;position:absolute;right:3px;top:3px}.list-item .item-info .item-name[data-v-820f0efe]{cursor:pointer;margin-left:5px;flex-grow:1;width:calc(100% - 50px);font-size:15px}.list-item .item-info .item-name .item-name-bottom[data-v-820f0efe]{font-size:13px;cursor:pointer;max-width:calc(100% - 10px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-weight:normal;color:var(--proxy-item-hint-c)}.list-item .item-info .item-edit-zone[data-v-820f0efe]{background-color:var(--bgc);box-shadow:0px 0px 4px 0px rgba(0,0,0,.3);border-radius:5px;position:absolute;width:175px;display:flex;flex-wrap:wrap;justify-content:space-between;right:30px;z-index:1}.list-item .item-icon[data-v-820f0efe]{width:30px;height:30px;cursor:pointer;border-radius:5px;display:flex;align-items:center;justify-content:center;transition:background-color .3s;cursor:pointer}.list-item .item-icon *[data-v-820f0efe]{cursor:pointer}.list-item .item-icon[data-v-820f0efe]:hover{background-color:rgba(189,189,189,.534)}.list-item .item-icon>svg[data-v-820f0efe]{width:18px;height:18px;fill:var(--fgc)}.list-item .item-disabled[data-v-820f0efe]{cursor:not-allowed}.list-item .item-disabled>svg[data-v-820f0efe]{fill:gray}.list-item .more[data-v-820f0efe]{position:absolute;right:0;width:30px;height:100%;display:flex;align-items:center;justify-content:center;border-top-right-radius:3px;border-bottom-right-radius:3px}.list-item .more[data-v-820f0efe]:hover{background-color:rgba(128,128,128,.1)}.list-item .more>svg[data-v-820f0efe]{height:18px;fill:var(--fgc)}.main[data-v-820f0efe]{display:flex;flex-direction:column;height:100%}#main-server-view[data-v-820f0efe]{height:100%}.list-view[data-v-820f0efe]{margin-top:80px;height:calc(100% - 80px);width:100%;overflow-y:auto;display:flex;flex-wrap:wrap;padding:10px 20px 20px 30px;align-content:flex-start}.list-view[data-v-820f0efe]::-webkit-scrollbar{width:16px}.list-view[data-v-820f0efe]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.list-view[data-v-820f0efe]::-webkit-scrollbar-corner{background-color:var(--bgc)}.list-view>*[data-v-820f0efe]{-webkit-user-drag:element}.list-view i[data-v-820f0efe]{width:295px;margin:0px 6px;flex-grow:1;height:0}.input-container[data-v-820f0efe]{display:flex;flex-grow:1;overflow:hidden;padding-right:5px;justify-content:space-between;position:relative;z-index:1}.input-container input[data-v-820f0efe]{padding-right:40px}",""]);const a=r},69953:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-config-view[data-v-9e0b3cf4]{height:100%;position:fixed}.main-config-view .proxy-group[data-v-9e0b3cf4]{flex:1;overflow-y:auto;padding:0px 20px 20px 15px}.main-config-view .proxy-group[data-v-9e0b3cf4]::-webkit-scrollbar{width:16px}.main-config-view .proxy-group[data-v-9e0b3cf4]::-webkit-scrollbar-thumb{background-color:rgba(101,81,122,.7);border-radius:100px;border:3px solid var(--bgc)}.main-config-view .proxy-group[data-v-9e0b3cf4]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-config-view .proxy[data-v-9e0b3cf4]{flex:1;overflow-y:auto;direction:rtl;padding:0px 15px 20px 20px}.main-config-view .proxy[data-v-9e0b3cf4]::-webkit-scrollbar{width:16px}.main-config-view .proxy[data-v-9e0b3cf4]::-webkit-scrollbar-thumb{background-color:rgba(55,57,72,.7);border-radius:100px;border:3px solid var(--bgc)}.main-config-view .proxy[data-v-9e0b3cf4]::-webkit-scrollbar-corner{background-color:var(--bgc)}.dragArea[data-v-9e0b3cf4]{min-height:1px}.dragArea>*[data-v-9e0b3cf4]{-webkit-user-drag:element}",""]);const a=r},5504:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main[data-v-f638b328]{position:fixed;left:170px;top:30px;width:calc(100vw - 170px);height:100%;background-color:var(--bgc);padding:10px 30px;overflow-y:auto}.main[data-v-f638b328]::-webkit-scrollbar{width:16px}.main[data-v-f638b328]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.main[data-v-f638b328]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main input[data-v-f638b328]{color:var(--fgc);background-color:var(--bgc)}",""]);const a=r},52845:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".qrcode-view-main[data-v-2c37fa0d]{position:fixed;left:170px;top:25px;height:100%;width:calc(100vw - 170px);display:flex;justify-content:center;align-items:center;background-color:rgba(50,50,50,.6);z-index:100}.qrcode-view-main .content[data-v-2c37fa0d]{width:250px;background-color:#fff;box-shadow:0px 0px 10px 3px rgba(14,14,14,.164);border-radius:2px;padding:10px 10px 20px 10px;display:flex;flex-direction:column;justify-content:space-between;align-items:center}.qrcode-view-main .content img[data-v-2c37fa0d]{width:230px;height:230px}.qrcode-view-main .content .url[data-v-2c37fa0d]{font-size:12px;width:200px;overflow-wrap:anywhere;text-decoration:underline;cursor:pointer;color:#0f7bd3}.qrcode-view-main .content .btn[data-v-2c37fa0d]{margin-top:10px;height:45px;color:#fff;cursor:pointer;line-height:45px;text-align:center;background-color:#7e7b7b;border-radius:3px;padding-left:10px;padding-right:10px;font-size:.85em;box-shadow:0px 2px 20px 2px rgba(50,50,50,.1);width:200px}",""]);const a=r},53640:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".rule[data-v-459dde1e]{font-size:13px;color:var(--log-item-rule-c)}.log-item[data-v-459dde1e]{display:flex;justify-content:space-between;align-items:center;padding:5px 20px;border-bottom:1px solid var(--log-item-border-c)}.log-list[data-v-459dde1e]{width:calc(100% - 0px);border:0px solid rgba(50,50,50,.2);height:calc(100% - 100px);border-style:dashed;padding:10px 20px;overflow-y:auto}.log-list[data-v-459dde1e]::-webkit-scrollbar{width:16px}.log-list[data-v-459dde1e]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.log-list[data-v-459dde1e]::-webkit-scrollbar-corner{background-color:var(--bgc)}",""]);const a=r},21732:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".model-title[data-v-eea841c4]{display:flex;font-size:1.2em;justify-content:space-between}.modal-container[data-v-eea841c4]{width:500px;margin:0px auto;padding:20px 30px;background-color:var(--bgc);border-radius:2px;box-shadow:0 2px 8px rgba(0,0,0,.33);transition:all .3s ease}.modal-container input[data-v-eea841c4]{color:var(--fgc);background-color:var(--bgc)}.scroll-view[data-v-eea841c4]{margin-top:20px;max-height:400px;padding:0 10px;overflow-y:auto}.scroll-view[data-v-eea841c4]::-webkit-scrollbar{width:16px}.scroll-view[data-v-eea841c4]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.scroll-view[data-v-eea841c4]::-webkit-scrollbar-corner{background-color:var(--bgc)}",""]);const a=r},90596:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-setting-view[data-v-fc0cd1de]{height:100%}.main-setting-view .blur[data-v-fc0cd1de]{filter:blur(15px)}.main-setting-view .title[data-v-fc0cd1de]{height:80px;border-bottom:1px solid var(--bc);font-size:20px;background-color:var(--bgc);display:flex;justify-content:space-between;align-items:center;padding:0 20px}.main-setting-view .title .btns[data-v-fc0cd1de]{height:100%;display:flex;align-items:center;gap:10px}.main-setting-view .title .btns .btn[data-v-fc0cd1de]{cursor:pointer;font-size:14px;color:var(--error-text);font-weight:normal;padding:5px 15px;border-radius:3px;background-color:var(--general-item-bgc)}.main-setting-view .content[data-v-fc0cd1de]{overflow-y:auto;padding:10px 10px 20px 10px;height:calc(100% - 80px)}.main-setting-view .content[data-v-fc0cd1de]::-webkit-scrollbar{width:16px}.main-setting-view .content[data-v-fc0cd1de]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.main-setting-view .content[data-v-fc0cd1de]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-setting-view .quit-btns[data-v-fc0cd1de]{display:flex;align-items:center;justify-content:center;margin-top:30px}.main-setting-view .quit-btns .btn[data-v-fc0cd1de]{background-color:rgba(255,30,0,.8);margin:0 7px;padding:5px 20px;color:#fff;border-radius:3px;font-size:14px;text-align:center}.main-setting-view .item[data-v-fc0cd1de]{font-weight:normal;display:flex;justify-content:space-between;align-items:center;height:35px;padding:0 10px;transition:all .3s}.main-setting-view .item .short-input[data-v-fc0cd1de]{width:190px}.main-setting-view .item .shorter-input[data-v-fc0cd1de]{width:156px}.main-setting-view .item .hint[data-v-fc0cd1de]{margin-left:10px}.main-setting-view .item .interface-hint[data-v-fc0cd1de]{margin-right:10px}.main-setting-view .item[data-v-fc0cd1de]:hover{background:var(--setting-item-hover-bgc);border-radius:3px}.main-setting-view .edit-hint[data-v-fc0cd1de]{background-color:rgba(0,0,0,.4);position:fixed;top:25px;width:calc(100% - 170px);height:calc(100vh - 25px);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center}.main-setting-view .edit-hint div[data-v-fc0cd1de]:first-child{font-size:20px}.main-setting-view .edit-hint div[data-v-fc0cd1de]:nth-child(2){font-size:16px;margin-top:20px}.main-setting-view .edit-hint .btn[data-v-fc0cd1de]{font-size:18px;margin-top:40px;background-color:rgba(26,26,26,.7);padding:4px 12px;border-radius:3px;cursor:pointer}",""]);const a=r},6357:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,"input[data-v-2ddf36e7]::-webkit-outer-spin-button,input[data-v-2ddf36e7]::-webkit-inner-spin-button{-webkit-appearance:none}.main-key-capture[data-v-2ddf36e7]{position:relative;width:200px}.main-key-capture input[data-v-2ddf36e7]{width:100%;text-align:center;border:none;outline-style:none;background-color:var(--setting-input-bgc);color:var(--fgc);height:26px;box-shadow:1px 1px 4px 1px rgba(50,50,50,.04);border-radius:2px}.main-key-capture input[data-v-2ddf36e7]::placeholder{color:var(--input-phc)}.main-key-capture .suffix[data-v-2ddf36e7]{position:absolute;right:10px;top:0;height:25px;line-height:25px;color:var(--menu-fgc);font-size:13px}.main-key-capture .hint[data-v-2ddf36e7]{position:absolute;font-size:12px;top:0;padding:0 10px;border-radius:13px;height:26px;line-height:26px;text-align:center;color:#fff;background-color:#535353;opacity:1;transform:translateX(calc(-100% - 10px));transition:all 300ms}.main-key-capture .hint-hide[data-v-2ddf36e7]{opacity:0}",""]);const a=r},69083:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-more-hint[data-v-6a8f4af4]{display:flex;align-items:center}.main-more-hint .text[data-v-6a8f4af4]{color:var(--menu-fgc);font-size:13px}.main-more-hint .tirangle[data-v-6a8f4af4]{width:0;height:0;margin-left:5px;margin-top:2px;border-top:4px solid rgba(0,0,0,0);border-bottom:4px solid rgba(0,0,0,0);border-left:6px solid var(--menu-fgc)}",""]);const a=r},44804:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-setting-section[data-v-18adce47]{margin:0px 2% 10px 2%;font-size:15px;width:96%}.main-setting-section .title[data-v-18adce47]{font-size:16px;height:34px;line-height:34px}.main-setting-section .content[data-v-18adce47]{background-color:var(--general-item-bgc);padding:5px 5px;border-radius:3px}",""]);const a=r},91778:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-settings-separator[data-v-26bdfd95]{height:1px;width:100%;opacity:.5;background-color:var(--scroll-bar-bgc);margin:5px auto}",""]);const a=r},19572:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-simple-input[data-v-0f00486f]{position:relative;width:250px}.main-simple-input input[data-v-0f00486f]{width:100%;text-align:center;border:none;outline-style:none;background-color:var(--setting-input-bgc);color:var(--fgc);height:25px;box-shadow:1px 1px 4px 1px rgba(50,50,50,.04);border-radius:2px}.main-simple-input .suffix[data-v-0f00486f]{position:absolute;right:10px;top:0;height:25px;line-height:25px;color:var(--menu-fgc);font-size:13px}",""]);const a=r},28698:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main[data-v-65878d23]{height:25px;width:100vw;background-color:var(--status-bgc);color:var(--fgc);display:flex;justify-content:space-between;align-items:center}.main .empty[data-v-65878d23]{flex-grow:1;height:100%;display:flex;flex-direction:column}.main .empty .top[data-v-65878d23]{height:5px}.main .empty .top .left[data-v-65878d23]{height:100%;background-color:var(--proxy-item-latency-online-c)}.main .empty .bottom[data-v-65878d23]{flex-grow:1;-webkit-app-region:drag}.title[data-v-65878d23]{font-size:.75em;font-weight:100;letter-spacing:1px}.close[data-v-65878d23]{-webkit-app-region:no-drag;cursor:pointer;display:flex;align-items:center;justify-content:center;width:45px;height:100%;display:flex;align-items:center}.close span[data-v-65878d23]{text-align:center;cursor:pointer;height:20px;width:20px}",""]);const a=r},59374:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-button-view[data-v-f3b3ccf8]{height:26px;width:90px;text-align:center;line-height:26px;background-color:#6777ef;border-radius:1500px;color:#fff;font-size:.78em;display:flex;align-items:center;justify-content:center;cursor:pointer}.main-button-view *[data-v-f3b3ccf8]{cursor:pointer}.main-button-view .line[data-v-f3b3ccf8]{display:flex;height:100%;width:100%;justify-content:center;align-items:center}.main-button-view .line .box[data-v-f3b3ccf8]{border-radius:20px;transform:scale(0.5, 0.5);background-color:#b3b3b3}.main-button-view .line .large[data-v-f3b3ccf8]{height:8px;width:8px;margin-left:2px;margin-right:2px}.main-button-view .line .small[data-v-f3b3ccf8]{height:5px;width:5px;margin-left:1px;margin-right:1px}.animation-delay1[data-v-f3b3ccf8]{animation:wave-f3b3ccf8 1s linear 0s infinite}.animation-delay2[data-v-f3b3ccf8]{animation:wave-f3b3ccf8 1s linear .2s infinite}.animation-delay3[data-v-f3b3ccf8]{animation:wave-f3b3ccf8 1s linear .4s infinite}.animation-delay4[data-v-f3b3ccf8]{animation:wave-f3b3ccf8 1s linear .6s infinite}.animation-delay5[data-v-f3b3ccf8]{animation:wave-f3b3ccf8 1s linear .8s infinite}@keyframes wave-f3b3ccf8{from{background-color:#f8f8f8;transform:scale(1.1, 1.1)}to{background-color:#adadad;transform:scale(0.5, 0.5)}}",""]);const a=r},33509:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-check-box[data-v-1c767bad]{display:flex;justify-content:flex-start;align-items:center}.main-check-box svg[data-v-1c767bad]{margin-top:1px}.main-check-box .slot[data-v-1c767bad]{margin-left:5px}",""]);const a=r},70406:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-edit-list-view .item[data-v-3ea6d831]{display:flex;margin-bottom:5px;height:25px}.main-edit-list-view .item input[data-v-3ea6d831]{width:calc(100% - 30px);outline:none;border-top-left-radius:3px;border-bottom-left-radius:3px;padding:0 10px;flex-grow:1}.main-edit-list-view .btn-add[data-v-3ea6d831]{width:100%;height:25px;border-radius:3px;border:1px solid #41b883;display:flex;justify-content:center;align-items:center}.main-edit-list-view .btn-remove[data-v-3ea6d831]{height:100%;width:30px;border-top-right-radius:3px;border-bottom-right-radius:3px;display:flex;justify-content:center;align-items:center;background-color:#d44545;border-left-color:rgba(0,0,0,0)}",""]);const a=r},84234:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-edit-object-view input[data-v-352b843a]{width:calc(100% - 30px);outline:none;border-top-left-radius:3px;border-bottom-left-radius:3px;padding:0 10px;flex-grow:1}.main-edit-object-view .item[data-v-352b843a]{display:flex;margin-bottom:5px;height:25px}.main-edit-object-view .btn-add[data-v-352b843a]{width:100%;height:25px;border-radius:3px;border:1px solid #41b883;display:flex;justify-content:center;align-items:center}.main-edit-object-view .btn-remove[data-v-352b843a]{height:100%;width:30px;border-radius:3px;display:flex;justify-content:center;align-items:center;background-color:#d44545;border-left-color:rgba(0,0,0,0)}",""]);const a=r},82681:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-hint-view[data-v-6e240a95]{position:relative}.main-hint-view .hint[data-v-6e240a95]{font-size:12px;background-color:#242424;padding:3px 5px;border-radius:3px;color:#fff;position:fixed;z-index:1000;white-space:nowrap;line-height:13px;font-weight:normal}",""]);const a=r},11061:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".content[data-v-d4bbbea2]{position:fixed;background-color:var(--general-interface-card-bgc);color:var(--general-interface-card-fgc);padding:8px 10px;border-radius:6px;font-size:14px;z-index:1000;box-shadow:0px 0px 8px 2px rgba(0,0,0,.2);width:300px;overflow:hidden}.content a[data-v-d4bbbea2]{color:#8abdf8;text-decoration:none;cursor:pointer}.content .quote[data-v-d4bbbea2]{background-color:var(--general-interface-card-quote-bgc);padding:0 4px;border-radius:4px}.content li[data-v-d4bbbea2]{list-style:inside}.info-icon-main[data-v-d4bbbea2]{position:relative;display:flex;align-items:center;margin-left:4px}",""]);const a=r},41044:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,'.main-proxy-navigator[data-v-298f5540]{position:absolute;height:calc(100% - 105px);display:flex;flex-direction:column;top:105px;right:20px;overflow-y:scroll;overflow-x:clip;transition:transform .2s;background-color:var(--bgc);border-color:var(--bc);border-width:0;border-style:solid}.main-proxy-navigator[data-v-298f5540]::before,.main-proxy-navigator[data-v-298f5540]::after{content:"";margin:auto}.main-proxy-navigator[data-v-298f5540]::-webkit-scrollbar{display:none}.main-proxy-navigator .item[data-v-298f5540]{font-size:12px;font-weight:normal;transition:all .1s;white-space:nowrap;padding-left:5px;z-index:2;color:var(--fgc)}.main-proxy-navigator .item-selected[data-v-298f5540]{color:var(--proxy-item-selected-border-c)}.main-proxy-navigator .item-hover[data-v-298f5540]{font-weight:bold}.main-proxy-navigator .item-error[data-v-298f5540]{color:var(--proxy-item-latency-offline-c)}',""]);const a=r},65939:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-select-view[data-v-e458e7bc]{display:flex;align-items:center;justify-content:space-between}.item[data-v-e458e7bc]{color:#fff;height:26px;font-size:.8em;line-height:25px;padding:0 6px;text-align:center;cursor:pointer;min-width:50px;transition:all .3s}.item-single[data-v-e458e7bc]{background-color:var(--switch-bgc)}.item-double[data-v-e458e7bc]{background-color:var(--switch-bgc-second)}.item-first[data-v-e458e7bc]{border-top-left-radius:6px;border-bottom-left-radius:6px}.item-last[data-v-e458e7bc]{border-top-right-radius:6px;border-bottom-right-radius:6px}.item-selected[data-v-e458e7bc]{background-color:#179bbb;flex-grow:1}",""]);const a=r},18228:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main[data-v-37d0be30]{border:2px solid var(--switch-bgc);background-color:var(--switch-bgc);border-radius:40px;width:34px;height:20px;box-shadow:0px 0px 5px 1px rgba(50,50,50,0);display:flex;padding:0 2px;align-items:center}.main *[data-v-37d0be30]{cursor:pointer}.text[data-v-37d0be30]{display:flex;justify-content:space-between;align-items:center;width:calc(100% - 0px);height:calc(100% - 4px)}.base[data-v-37d0be30]{width:calc(100% - 17px);height:100%}.text-font[data-v-37d0be30]{letter-spacing:0px;text-align:center;font-size:12px;margin-bottom:8px;color:#fff}.tint-right[data-v-37d0be30]{background-color:#d44545;border-radius:20px;width:12px}.tint-left[data-v-37d0be30]{background-color:#13af42;border-radius:20px;width:12px}.move-left-enter-active[data-v-37d0be30]{transition:all .2s ease}.move-left-leave-active[data-v-37d0be30]{transition:all .1s ease-out}.move-left-enter[data-v-37d0be30],.move-left-leave-to[data-v-37d0be30]{transform:translateX(-10px);opacity:0}.move-right-enter-active[data-v-37d0be30]{transition:all .2s ease}.move-right-leave-active[data-v-37d0be30]{transition:all .1s ease-out}.move-right-enter[data-v-37d0be30],.move-right-leave-to[data-v-37d0be30]{transform:translateX(10px);opacity:0}",""]);const a=r},56932:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".tray-order-main[data-v-40749f51]{display:flex;align-items:center;font-size:13px}.tray-order-main .title[data-v-40749f51]{margin-right:5px}.tray-order-main .list[data-v-40749f51]{height:28px;display:flex;justify-content:center;align-items:center;min-width:40px;border-radius:3px;background-color:#e2e2e2;padding:3px 5px}.tray-order-main .list img[data-v-40749f51]{-webkit-user-drag:element;display:flex;align-items:center;justify-content:center;height:16px;margin:0 2px}.tray-order-main .left-list[data-v-40749f51]{margin-right:10px}",""]);const a=r},59480:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-alert-view-plugin[data-v-12619986]{width:100%;height:calc(100% - 25px);position:fixed;top:25px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#000;z-index:10}.main-alert-view-plugin *[data-v-12619986]{user-select:text}.main-alert-view-plugin[data-v-12619986] *{user-select:text}.main-alert-view-plugin .card-main[data-v-12619986]{border-radius:2px;display:flex;flex-direction:column;justify-content:space-around;width:50%}.main-alert-view-plugin .card-main .card-content[data-v-12619986]{padding:15px 20px}.main-alert-view-plugin .card-main .card-content .content-title[data-v-12619986]{font-size:1.2em;margin-bottom:15px}.main-alert-view-plugin .card-main .card-content .content-content[data-v-12619986]{font-size:15px;text-overflow:inherit;word-wrap:break-word;max-height:200px;overflow-y:auto}.main-alert-view-plugin .card-main .card-content .content-content[data-v-12619986]::-webkit-scrollbar{width:16px}.main-alert-view-plugin .card-main .card-content .content-content[data-v-12619986]::-webkit-scrollbar-thumb{background-color:var(--scroll-bar-bgc);border-radius:100px;border:3px solid var(--bgc)}.main-alert-view-plugin .card-main .card-content .content-content[data-v-12619986]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-alert-view-plugin .card-main .card-content .card-btns[data-v-12619986]{margin-top:20px;display:flex;justify-content:space-around}.main-alert-view-plugin .card-main .card-content .card-btns .btn[data-v-12619986]{cursor:pointer;color:#fff;width:100px;height:40px;text-align:center;line-height:40px;border-radius:3px}.main-alert-view-plugin .card-main .card-content .card-btns .btn-cancel[data-v-12619986]{background-color:#676475}.main-alert-view-plugin .card-main .card-content .card-btns .btn-ok[data-v-12619986]{background-color:#3e3c4d}",""]);const a=r},21417:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-code-view[data-v-35f836ea]{width:100%;height:calc(100% - 25px);position:fixed;top:25px;left:0px;display:flex;flex-direction:column;justify-content:space-between;z-index:100}.main-code-view .card[data-v-35f836ea]{width:calc(100% - 200px);height:calc(100% - 100px);border-radius:5px;position:absolute;top:50px;left:100px;overflow:hidden;box-shadow:0px 0px 10px rgba(0,0,0,.5)}.main-code-view .card .editor[data-v-35f836ea]{width:100%;height:calc(100% + 1px)}.main-code-view .card .error[data-v-35f836ea]{position:absolute;bottom:20px;left:50%;transform:translateX(-50%);box-shadow:0px 0px 10px rgba(0,0,0,.3);padding:10px 12px;border-radius:10px;background-color:#3d3d3d;display:flex;align-items:center}.main-code-view .card .error div[data-v-35f836ea]:first-child{color:#ff5252;font-weight:normal;font-size:14px;flex-shrink:1;white-space:pre-wrap}.main-code-view .card .error div[data-v-35f836ea]:last-child{height:26px;width:26px;padding:3px;flex-shrink:0}.main-code-view .card .error div[data-v-35f836ea]:last-child:hover{background-color:rgba(160,160,160,.534);border-radius:3px}.main-code-view .card .btns[data-v-35f836ea]{position:absolute;bottom:0px;right:0px;display:flex;z-index:100;color:#fff;margin-right:35px;margin-bottom:10px;font-size:14px}.main-code-view .card .btns div[data-v-35f836ea]{margin-left:10px;width:30px;height:30px;text-align:center;border-radius:3px;box-shadow:0px 0px 10px rgba(0,0,0,.2)}.main-code-view .card .btns div svg[data-v-35f836ea]{width:24px;height:24px;margin:3px;fill:#fff}.main-code-view .card .btns .abort-btn[data-v-35f836ea]{margin-bottom:10px;background-color:#ea4079}.main-code-view .card .btns .save-btn[data-v-35f836ea]{background-color:#41b883}",""]);const a=r},57565:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-diff-view[data-v-c878e8f6]{width:100%;height:calc(100% - 25px);position:fixed;top:25px;left:0px;display:flex;flex-direction:column;justify-content:space-between;z-index:100}.main-diff-view .card[data-v-c878e8f6]{width:calc(100% - 100px);height:calc(100% - 100px);border-radius:5px;position:absolute;top:50px;left:50px;overflow:hidden;box-shadow:0px 0px 10px rgba(0,0,0,.5)}.main-diff-view .card .editor[data-v-c878e8f6]{width:100%;height:calc(100% + 1px)}.main-diff-view .card .btns[data-v-c878e8f6]{position:absolute;bottom:0px;right:0px;display:flex;z-index:100;color:#fff;margin-right:50px;margin-bottom:10px;font-size:14px}.main-diff-view .card .btns div[data-v-c878e8f6]{margin-left:10px;width:30px;height:30px;text-align:center;border-radius:3px;box-shadow:0px 0px 10px rgba(0,0,0,.2)}.main-diff-view .card .btns div svg[data-v-c878e8f6]{width:24px;height:24px;margin:3px;fill:#fff}.main-diff-view .card .btns .abort-btn[data-v-c878e8f6]{margin-bottom:10px;background-color:#ea4079}.main-diff-view .card .btns .save-btn[data-v-c878e8f6]{background-color:#41b883}.main-diff-view .card .btns .change-btn-off[data-v-c878e8f6]{background-color:#797979}.main-diff-view .card .btns .change-btn-on[data-v-c878e8f6]{background-color:#41b883}",""]);const a=r},14333:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-dns-view[data-v-6e0989c7]{width:100%;height:calc(100% - 25px);position:fixed;top:25px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#000;z-index:1000;font-weight:normal}.main-dns-view *[data-v-6e0989c7]{user-select:text}.main-dns-view[data-v-6e0989c7] *{user-select:text}.card-main[data-v-6e0989c7]{border-radius:2px;min-width:450px;max-width:650px;width:fit-content;max-height:calc(100% - 40px)}.card-content[data-v-6e0989c7]{position:relative;display:flex;flex-direction:column;justify-content:space-around;transition:all .3s ease}.content-items[data-v-6e0989c7]{overflow-y:auto;overflow-x:hidden;max-height:360px}.content-items[data-v-6e0989c7]::-webkit-scrollbar{width:4px;background-color:rgba(151,151,151,0.4117647059)}.content-items[data-v-6e0989c7]::-webkit-scrollbar-thumb{background-color:#3e3c4d}.error-hint[data-v-6e0989c7]{font-size:.9em;color:red;margin:10px 20px 0 20px}.p[data-v-6e0989c7]{position:relative;margin-top:18px}.p span[data-v-6e0989c7]{position:absolute;top:-17px;left:4px;padding:0 6px;background-color:var(--bgc);margin-top:5px;color:var(--fgc);opacity:.8;font-size:14px}.p .c[data-v-6e0989c7]{border:1px solid var(--bc);padding:8px 8px 4px 8px;border-radius:3px;font-size:13px}",""]);const a=r},4216:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-input-view-plugin[data-v-15034054]{width:100%;height:calc(100% - 25px);position:fixed;top:25px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#000;z-index:1000}.card-main[data-v-15034054]{border-radius:2px;max-width:390px;max-height:calc(100% - 40px)}.card-content[data-v-15034054]{position:relative;display:flex;flex-direction:column;justify-content:space-around}.content-title[data-v-15034054]{margin:15px 20px 0 20px;font-size:1.2em;margin-bottom:15px}.content-hint[data-v-15034054]{font-size:.9em;margin:-5px 20px 5px 20px;color:#179bbb}.content-items[data-v-15034054]{border-top:1px solid rgba(128,128,128,.178);border-bottom:1px solid rgba(128,128,128,.178);overflow-y:auto;overflow-x:hidden;max-height:360px;padding:0 20px}.content-items[data-v-15034054]::-webkit-scrollbar{width:4px;background-color:rgba(151,151,151,0.4117647059)}.content-items[data-v-15034054]::-webkit-scrollbar-thumb{background-color:#3e3c4d}.content-item[data-v-15034054]{display:flex;margin:5px 0px 10px 0px;align-items:baseline;flex-direction:column;justify-content:space-between;height:fit-content}.item-key[data-v-15034054]{margin-bottom:5px;font-size:16px}.error-hint[data-v-15034054]{font-size:.9em;color:red;margin:10px 20px 0 20px}.card-btns[data-v-15034054]{margin-top:10px;margin-bottom:20px;display:flex;justify-content:space-around}.btn[data-v-15034054]{cursor:pointer;color:#fff;width:100px;height:40px;text-align:center;line-height:40px;border-radius:3px}.btn-cancel[data-v-15034054]{background-color:#676475}.btn-ok[data-v-15034054]{background-color:#3e3c4d}span[data-v-15034054]{color:red}textarea[data-v-15034054]{cursor:pointer;font-size:14px;outline:none;padding:10px 5px;width:350px;resize:none;font-family:inherit;max-height:200px;overflow-y:auto}",""]);const a=r},80574:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-menu-view-plugin[data-v-00ec68dc]{width:100%;height:calc(100% - 25px);position:fixed;top:25px;display:flex;flex-direction:column;align-items:center;justify-content:center;background-color:rgba(255,255,255,0);color:#000;z-index:100}.main-menu-view-plugin .card-main[data-v-00ec68dc]{border-radius:2px;background-color:#414141;display:flex;flex-direction:column;justify-content:space-around;width:fit-content}.main-menu-view-plugin .card-main .card-content[data-v-00ec68dc]{position:fixed;background-color:#4e4e4e;overflow-y:scroll;font-weight:normal;box-shadow:2px 2px 8px 2px rgba(0,0,0,.2);padding:5px 0;font-size:13px;border-radius:5px}.main-menu-view-plugin .card-main .card-content[data-v-00ec68dc]::-webkit-scrollbar{display:none}.main-menu-view-plugin .card-main .card-content .item[data-v-00ec68dc]{margin:2px 5px;padding:5px 10px;border-radius:3px;color:#fff;display:flex;align-items:center;justify-content:flex-start;min-width:150px}.main-menu-view-plugin .card-main .card-content .item[data-v-00ec68dc]:hover{background-color:#302a2a}.main-menu-view-plugin .card-main .card-content .item div[data-v-00ec68dc]{flex:1;white-space:nowrap}.main-menu-view-plugin .card-main .card-content .item-disabled[data-v-00ec68dc]{margin:2px 10px 5px 10px;padding:5px 5px;color:#d1d1d1;display:flex;align-items:center;justify-content:flex-start;min-width:150px;border-bottom:1px solid rgba(128,128,128,.514)}.main-menu-view-plugin .card-main .card-content .indicator[data-v-00ec68dc]{position:sticky;bottom:-5px;left:0;width:100%;height:30px;display:flex;align-items:center;justify-content:center}",""]);const a=r},5424:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-script-view[data-v-05227e49]{width:100%;height:calc(100% - 25px);position:fixed;top:25px;left:0px;display:flex;flex-direction:column;justify-content:space-between;z-index:100}.main-script-view .card[data-v-05227e49]{width:calc(100% - 200px);height:calc(100% - 100px);border-radius:5px;position:absolute;top:50px;left:100px;overflow:hidden;box-shadow:0px 0px 10px rgba(0,0,0,.5)}.main-script-view .card .metadata[data-v-05227e49]{width:100%;flex-grow:0}.main-script-view .card .metadata div[data-v-05227e49]{display:flex;align-items:center}.main-script-view .card .metadata div span[data-v-05227e49]{margin-right:10px}.main-script-view .card .metadata div input[data-v-05227e49]{flex-grow:1;outline:none;padding:2px 8px}.main-script-view .card .editor-code[data-v-05227e49]{width:100%;flex-grow:1}.main-script-view .card .error[data-v-05227e49]{position:absolute;bottom:20px;left:50%;transform:translateX(-50%);box-shadow:0px 0px 10px rgba(0,0,0,.3);padding:10px 12px;border-radius:10px;background-color:#3d3d3d;display:flex;align-items:center}.main-script-view .card .error div[data-v-05227e49]:first-child{color:#ff5252;font-weight:normal;font-size:14px;flex-shrink:1;white-space:pre-wrap}.main-script-view .card .error div[data-v-05227e49]:last-child{height:26px;width:26px;padding:3px;flex-shrink:0}.main-script-view .card .error div[data-v-05227e49]:last-child:hover{background-color:rgba(160,160,160,.534);border-radius:3px}.main-script-view .card .btns[data-v-05227e49]{position:absolute;bottom:0px;right:0px;display:flex;z-index:100;color:#fff;margin-right:35px;margin-bottom:10px;font-size:14px}.main-script-view .card .btns div[data-v-05227e49]{margin-left:10px;width:30px;height:30px;text-align:center;border-radius:3px;box-shadow:0px 0px 10px rgba(0,0,0,.2)}.main-script-view .card .btns div svg[data-v-05227e49]{width:24px;height:24px;margin:3px;fill:#fff}.main-script-view .card .btns .abort-btn[data-v-05227e49]{margin-bottom:10px;background-color:#ea4079}.main-script-view .card .btns .save-btn[data-v-05227e49]{background-color:#41b883}",""]);const a=r},62608:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var n=i(8081),o=i.n(n),s=i(23645),r=i.n(s)()(o());r.push([e.id,".main-select-view-plugin[data-v-0826c2c0]{width:100%;height:calc(100% - 25px);position:fixed;top:25px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#000;z-index:10}.main-select-view-plugin .card-main[data-v-0826c2c0]{border-radius:2px;display:flex;flex-direction:column;justify-content:space-around;width:50%}.main-select-view-plugin .card-main .card-content[data-v-0826c2c0]{padding:15px 20px}.main-select-view-plugin .card-main .card-content .content-title[data-v-0826c2c0]{font-size:1.2em;margin-bottom:10px}.main-select-view-plugin .card-main .card-content .content-message[data-v-0826c2c0]{margin:5px 0 10px 0;max-height:60vh;overflow-x:hidden;word-break:break-word;overflow-y:auto}.main-select-view-plugin .card-main .card-content .content-message[data-v-0826c2c0]::-webkit-scrollbar{width:16px}.main-select-view-plugin .card-main .card-content .content-message[data-v-0826c2c0]::-webkit-scrollbar-thumb{background-color:#cac8c6;border-radius:100px;border:3px solid var(--bgc)}.main-select-view-plugin .card-main .card-content .content-message[data-v-0826c2c0]::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-select-view-plugin .card-main .card-content .check-list[data-v-0826c2c0]{display:flex;flex-direction:column;margin:5px 0 10px 0}.main-select-view-plugin .card-main .card-content .check-list .check-item[data-v-0826c2c0]{display:flex;align-items:center}.main-select-view-plugin .card-main .card-content .check-list .check-item .check-text[data-v-0826c2c0]{margin-left:5px}.main-select-view-plugin .card-main .card-content .btns[data-v-0826c2c0]{display:flex;justify-content:flex-start;flex-wrap:wrap}.main-select-view-plugin .card-main .card-content .btns .btn[data-v-0826c2c0]{border-radius:3px;text-align:center;height:35px;line-height:35px;flex-shrink:1;color:#fff;background-color:#3e3c4d;border-radius:5px;cursor:pointer;margin:5px 5px 5px 5px}.main-select-view-plugin .card-main .card-content .btns .btn *[data-v-0826c2c0]:hover{cursor:pointer}.main-select-view-plugin .card-main .card-content .btns .btn span[data-v-0826c2c0]{padding:0 10px}.main-select-view-plugin .card-main .card-content .btns .last-btn[data-v-0826c2c0]{background-color:#727070}.main-select-view-plugin .html-list[data-v-0826c2c0]{margin-bottom:12px}.main-select-view-plugin .html-list[data-v-0826c2c0] ul{max-height:60vh;overflow-y:auto;list-style-position:inside;list-style-type:disc}.main-select-view-plugin .html-list[data-v-0826c2c0] ul::-webkit-scrollbar{width:16px}.main-select-view-plugin .html-list[data-v-0826c2c0] ul::-webkit-scrollbar-thumb{background-color:#cac8c6;border-radius:100px;border:3px solid var(--bgc)}.main-select-view-plugin .html-list[data-v-0826c2c0] ul::-webkit-scrollbar-corner{background-color:var(--bgc)}.main-select-view-plugin .html-list[data-v-0826c2c0] ul code{background-color:var(--general-item-bgc);border-radius:3px;padding:0 4px;font-family:inherit}.main-select-view-plugin .html-list[data-v-0826c2c0] a{cursor:pointer;color:var(--feedback-link-c)}",""]);const a=r},23645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var i="",n=void 0!==t[5];return t[4]&&(i+="@supports (".concat(t[4],") {")),t[2]&&(i+="@media ".concat(t[2]," {")),n&&(i+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),i+=e(t),n&&(i+="}"),t[2]&&(i+="}"),t[4]&&(i+="}"),i})).join("")},t.i=function(e,i,n,o,s){"string"==typeof e&&(e=[[null,e,void 0]]);var r={};if(n)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(r[l]=!0)}for(var c=0;c<e.length;c++){var d=[].concat(e[c]);n&&r[d[0]]||(void 0!==s&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=s),i&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=i):d[2]=i),o&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=o):d[4]="".concat(o)),t.push(d))}},t}},61667:e=>{"use strict";e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},8081:e=>{"use strict";e.exports=function(e){return e[1]}},58583:(e,t,i)=>{var n;self.MonacoEnvironment=(n={editorWorkerService:"editor.worker.js"},{globalAPI:!1,getWorkerUrl:function(e,t){var o=i.p,s=(o?o.replace(/\/$/,"")+"/":"")+n[t];if(/^((http:)|(https:)|(file:)|(\/\/))/.test(s)){var r=String(window.location),a=r.substr(0,r.length-window.location.hash.length-window.location.search.length-window.location.pathname.length);if(s.substring(0,a.length)!==a){/^(\/\/)/.test(s)&&(s=window.location.protocol+s);var l=new Blob(["/*"+t+'*/importScripts("'+s+'");'],{type:"application/javascript"});return URL.createObjectURL(l)}}return s}}),i(29477),i(17355),i(17084),i(84594),i(62015),i(9093),i(53832),i(77956),i(89098),i(76522),i(18728),i(42834),i(7441),i(81372),i(92142),i(62943),i(23111),i(44818),i(42698),i(62097),i(92729),i(10365),i(67247),i(19646),i(83554),i(80638),i(87586),i(43818),i(97830),i(42408),i(80674),i(34800),i(38486),i(40517),i(97720),i(78944),i(98936),i(45048),i(4454),i(81955),i(93379),i(88250),i(15662),i(19720),i(77847),i(31725),i(70185),i(43497),i(99453),i(60661),e.exports=i(86211),i(94199),i(43763),i(83187)},16268:(e,t,i)=>{"use strict";i.d(t,{$W:()=>v,Dt:()=>m,G6:()=>p,MG:()=>f,Pf:()=>u,WP:()=>r,fX:()=>a,i7:()=>g,ie:()=>l,mX:()=>c,px:()=>s,vU:()=>h});var n=i(4669);class o{constructor(){this._zoomLevel=0,this._lastZoomLevelChangeTime=0,this._onDidChangeZoomLevel=new n.Q5,this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event,this._zoomFactor=1}getZoomLevel(){return this._zoomLevel}getTimeSinceLastZoomLevelChanged(){return Date.now()-this._lastZoomLevelChangeTime}getZoomFactor(){return this._zoomFactor}getPixelRatio(){let e=document.createElement("canvas").getContext("2d");return(window.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1)}}function s(){return o.INSTANCE.getZoomLevel()}function r(){return o.INSTANCE.getTimeSinceLastZoomLevelChanged()}function a(e){return o.INSTANCE.onDidChangeZoomLevel(e)}function l(){return o.INSTANCE.getZoomFactor()}function c(){return o.INSTANCE.getPixelRatio()}o.INSTANCE=new o;const d=navigator.userAgent,h=d.indexOf("Firefox")>=0,u=d.indexOf("AppleWebKit")>=0,g=d.indexOf("Chrome")>=0,p=!g&&d.indexOf("Safari")>=0,f=!g&&!p&&u,m=d.indexOf("Android")>=0,v=window.matchMedia&&window.matchMedia("(display-mode: standalone)").matches},10161:(e,t,i)=>{"use strict";i.d(t,{D:()=>s});var n=i(16268),o=i(1432);const s={clipboard:{writeText:o.tY||document.queryCommandSupported&&document.queryCommandSupported("copy")||!!(navigator&&navigator.clipboard&&navigator.clipboard.writeText),readText:o.tY||!!(navigator&&navigator.clipboard&&navigator.clipboard.readText)},keyboard:o.tY||n.$W?0:navigator.keyboard||n.G6?1:2,touch:"ontouchstart"in window||navigator.maxTouchPoints>0,pointerEvents:window.PointerEvent&&("ontouchstart"in window||window.navigator.maxTouchPoints>0||navigator.maxTouchPoints>0)}},23547:(e,t,i)=>{"use strict";i.d(t,{P$:()=>s,TN:()=>o,go:()=>n});const n={RESOURCES:"ResourceURLs",DOWNLOAD_URL:"DownloadURL",FILES:"Files",TEXT:i(81170).vW.text,TERMINALS:"Terminals"};class o{constructor(e){this.data=e}update(){}getData(){return this.data}}const s={CurrentDragAndDropData:void 0}},65321:(e,t,i)=>{"use strict";i.d(t,{$:()=>pe,$Z:()=>fe,Ay:()=>Z,Ce:()=>ce,Cp:()=>me,D6:()=>M,DI:()=>B,Dx:()=>T,FK:()=>W,Fx:()=>U,Gw:()=>b,H$:()=>ve,If:()=>H,Lo:()=>w,OO:()=>q,PO:()=>g,R3:()=>le,RE:()=>x,Re:()=>te,Ro:()=>O,Uh:()=>_e,Uw:()=>p,V3:()=>be,Y_:()=>E,_0:()=>se,_h:()=>Ce,_q:()=>xe,dS:()=>Y,dp:()=>R,fk:()=>J,go:()=>ae,i:()=>F,jL:()=>k,j_:()=>C,jg:()=>j,jt:()=>we,lI:()=>S,mc:()=>de,mu:()=>_,nm:()=>m,qV:()=>y,tw:()=>ie,uB:()=>Se,uN:()=>ee,uU:()=>$,vL:()=>oe,vY:()=>G,w:()=>V,wY:()=>ye,wn:()=>z,xQ:()=>P,zB:()=>ne});var n=i(16268),o=i(10161),s=i(59069),r=i(23938),a=i(15393),l=i(17301),c=i(4669),d=i(5976),h=i(66663),u=i(1432);function g(e){for(;e.firstChild;)e.firstChild.remove()}function p(e){var t;return null!==(t=null==e?void 0:e.isConnected)&&void 0!==t&&t}class f{constructor(e,t,i,n){this._node=e,this._type=t,this._handler=i,this._options=n||!1,this._node.addEventListener(this._type,this._handler,this._options)}dispose(){this._handler&&(this._node.removeEventListener(this._type,this._handler,this._options),this._node=null,this._handler=null)}}function m(e,t,i,n){return new f(e,t,i,n)}function v(e){return function(t){return e(new r.n(t))}}let _=function(e,t,i,n){let o=i;return"click"===t||"mousedown"===t?o=v(i):"keydown"!==t&&"keypress"!==t&&"keyup"!==t||(o=function(e){return function(t){return e(new s.y(t))}}(i)),m(e,t,o,n)},b=function(e,t,i){return w(e,v(t),i)};function w(e,t,i){return m(e,u.gn&&o.D.pointerEvents?ie.POINTER_DOWN:ie.MOUSE_DOWN,t,i)}function y(e,t,i){return m(e,u.gn&&o.D.pointerEvents?ie.POINTER_UP:ie.MOUSE_UP,t,i)}function C(e,t){return m(e,"mouseout",(i=>{let n=i.relatedTarget;for(;n&&n!==e;)n=n.parentNode;n!==e&&t(i)}))}function x(e,t){return m(e,"pointerout",(i=>{let n=i.relatedTarget;for(;n&&n!==e;)n=n.parentNode;n!==e&&t(i)}))}let S,k,L=null;class N{constructor(e,t=0){this._runner=e,this.priority=t,this._canceled=!1}dispose(){this._canceled=!0}execute(){if(!this._canceled)try{this._runner()}catch(e){(0,l.dL)(e)}}static sort(e,t){return t.priority-e.priority}}!function(){let e=[],t=null,i=!1,n=!1,o=()=>{for(i=!1,t=e,e=[],n=!0;t.length>0;){t.sort(N.sort),t.shift().execute()}n=!1};k=(t,n=0)=>{let s=new N(t,n);return e.push(s),i||(i=!0,function(e){if(!L){const e=e=>setTimeout((()=>e((new Date).getTime())),0);L=self.requestAnimationFrame||self.msRequestAnimationFrame||self.webkitRequestAnimationFrame||self.mozRequestAnimationFrame||self.oRequestAnimationFrame||e}L.call(self,e)}(o)),s},S=(e,i)=>{if(n){let n=new N(e,i);return t.push(n),n}return k(e,i)}}();const D=function(e,t){return t};class I extends d.JT{constructor(e,t,i,n=D,o=8){super();let s=null,r=0,l=this._register(new a._F),c=()=>{r=(new Date).getTime(),i(s),s=null};this._register(m(e,t,(e=>{s=n(s,e);let t=(new Date).getTime()-r;t>=o?(l.cancel(),c()):l.setIfNotSet(c,o-t)})))}}function E(e,t,i,n,o){return new I(e,t,i,n,o)}function T(e){return document.defaultView.getComputedStyle(e,null)}function M(e){if(e!==document.body)return new O(e.clientWidth,e.clientHeight);if(u.gn&&window.visualViewport)return new O(window.visualViewport.width,window.visualViewport.height);if(window.innerWidth&&window.innerHeight)return new O(window.innerWidth,window.innerHeight);if(document.body&&document.body.clientWidth&&document.body.clientHeight)return new O(document.body.clientWidth,document.body.clientHeight);if(document.documentElement&&document.documentElement.clientWidth&&document.documentElement.clientHeight)return new O(document.documentElement.clientWidth,document.documentElement.clientHeight);throw new Error("Unable to figure out browser width and height")}class A{static convertToPixels(e,t){return parseFloat(t)||0}static getDimension(e,t,i){let n=T(e),o="0";return n&&(o=n.getPropertyValue?n.getPropertyValue(t):n.getAttribute(i)),A.convertToPixels(e,o)}static getBorderLeftWidth(e){return A.getDimension(e,"border-left-width","borderLeftWidth")}static getBorderRightWidth(e){return A.getDimension(e,"border-right-width","borderRightWidth")}static getBorderTopWidth(e){return A.getDimension(e,"border-top-width","borderTopWidth")}static getBorderBottomWidth(e){return A.getDimension(e,"border-bottom-width","borderBottomWidth")}static getPaddingLeft(e){return A.getDimension(e,"padding-left","paddingLeft")}static getPaddingRight(e){return A.getDimension(e,"padding-right","paddingRight")}static getPaddingTop(e){return A.getDimension(e,"padding-top","paddingTop")}static getPaddingBottom(e){return A.getDimension(e,"padding-bottom","paddingBottom")}static getMarginLeft(e){return A.getDimension(e,"margin-left","marginLeft")}static getMarginTop(e){return A.getDimension(e,"margin-top","marginTop")}static getMarginRight(e){return A.getDimension(e,"margin-right","marginRight")}static getMarginBottom(e){return A.getDimension(e,"margin-bottom","marginBottom")}}class O{constructor(e,t){this.width=e,this.height=t}with(e=this.width,t=this.height){return e!==this.width||t!==this.height?new O(e,t):this}static is(e){return"object"==typeof e&&"number"==typeof e.height&&"number"==typeof e.width}static lift(e){return e instanceof O?e:new O(e.width,e.height)}static equals(e,t){return e===t||!(!e||!t)&&(e.width===t.width&&e.height===t.height)}}function P(e){let t=e.offsetParent,i=e.offsetTop,n=e.offsetLeft;for(;null!==(e=e.parentNode)&&e!==document.body&&e!==document.documentElement;){i-=e.scrollTop;const o=K(e)?null:T(e);o&&(n-="rtl"!==o.direction?e.scrollLeft:-e.scrollLeft),e===t&&(n+=A.getBorderLeftWidth(e),i+=A.getBorderTopWidth(e),i+=e.offsetTop,n+=e.offsetLeft,t=e.offsetParent)}return{left:n,top:i}}function R(e,t,i){"number"==typeof t&&(e.style.width=`${t}px`),"number"==typeof i&&(e.style.height=`${i}px`)}function F(e){let t=e.getBoundingClientRect();return{left:t.left+B.scrollX,top:t.top+B.scrollY,width:t.width,height:t.height}}const B=new class{get scrollX(){return"number"==typeof window.scrollX?window.scrollX:document.body.scrollLeft+document.documentElement.scrollLeft}get scrollY(){return"number"==typeof window.scrollY?window.scrollY:document.body.scrollTop+document.documentElement.scrollTop}};function V(e){let t=A.getMarginLeft(e)+A.getMarginRight(e);return e.offsetWidth+t}function W(e){let t=A.getBorderLeftWidth(e)+A.getBorderRightWidth(e),i=A.getPaddingLeft(e)+A.getPaddingRight(e);return e.offsetWidth-t-i}function H(e){let t=A.getBorderTopWidth(e)+A.getBorderBottomWidth(e),i=A.getPaddingTop(e)+A.getPaddingBottom(e);return e.offsetHeight-t-i}function z(e){let t=A.getMarginTop(e)+A.getMarginBottom(e);return e.offsetHeight+t}function j(e,t){for(;e;){if(e===t)return!0;e=e.parentNode}return!1}function U(e,t,i){for(;e&&e.nodeType===e.ELEMENT_NODE;){if(e.classList.contains(t))return e;if(i)if("string"==typeof i){if(e.classList.contains(i))return null}else if(e===i)return null;e=e.parentNode}return null}function $(e,t,i){return!!U(e,t,i)}function K(e){return e&&!!e.host&&!!e.mode}function q(e){return!!Z(e)}function Z(e){for(;e.parentNode;){if(e===document.body)return null;e=e.parentNode}return K(e)?e:null}function G(){let e=document.activeElement;for(;null==e?void 0:e.shadowRoot;)e=e.shadowRoot.activeElement;return e}function Y(e=document.getElementsByTagName("head")[0]){let t=document.createElement("style");return t.type="text/css",t.media="screen",e.appendChild(t),t}let Q=null;function X(){return Q||(Q=Y()),Q}function J(e,t,i=X()){i&&t&&i.sheet.insertRule(e+"{"+t+"}",0)}function ee(e,t=X()){if(!t)return;let i=function(e){var t,i;return(null===(t=null==e?void 0:e.sheet)||void 0===t?void 0:t.rules)?e.sheet.rules:(null===(i=null==e?void 0:e.sheet)||void 0===i?void 0:i.cssRules)?e.sheet.cssRules:[]}(t),n=[];for(let t=0;t<i.length;t++){-1!==i[t].selectorText.indexOf(e)&&n.push(t)}for(let e=n.length-1;e>=0;e--)t.sheet.deleteRule(n[e])}function te(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&1===e.nodeType&&"string"==typeof e.nodeName}const ie={CLICK:"click",AUXCLICK:"auxclick",DBLCLICK:"dblclick",MOUSE_UP:"mouseup",MOUSE_DOWN:"mousedown",MOUSE_OVER:"mouseover",MOUSE_MOVE:"mousemove",MOUSE_OUT:"mouseout",MOUSE_ENTER:"mouseenter",MOUSE_LEAVE:"mouseleave",MOUSE_WHEEL:"wheel",POINTER_UP:"pointerup",POINTER_DOWN:"pointerdown",POINTER_MOVE:"pointermove",CONTEXT_MENU:"contextmenu",WHEEL:"wheel",KEY_DOWN:"keydown",KEY_PRESS:"keypress",KEY_UP:"keyup",LOAD:"load",BEFORE_UNLOAD:"beforeunload",UNLOAD:"unload",ABORT:"abort",ERROR:"error",RESIZE:"resize",SCROLL:"scroll",FULLSCREEN_CHANGE:"fullscreenchange",WK_FULLSCREEN_CHANGE:"webkitfullscreenchange",SELECT:"select",CHANGE:"change",SUBMIT:"submit",RESET:"reset",FOCUS:"focus",FOCUS_IN:"focusin",FOCUS_OUT:"focusout",BLUR:"blur",INPUT:"input",STORAGE:"storage",DRAG_START:"dragstart",DRAG:"drag",DRAG_ENTER:"dragenter",DRAG_LEAVE:"dragleave",DRAG_OVER:"dragover",DROP:"drop",DRAG_END:"dragend",ANIMATION_START:n.Pf?"webkitAnimationStart":"animationstart",ANIMATION_END:n.Pf?"webkitAnimationEnd":"animationend",ANIMATION_ITERATION:n.Pf?"webkitAnimationIteration":"animationiteration"},ne={stop:function(e,t){e.preventDefault?e.preventDefault():e.returnValue=!1,t&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)}};function oe(e){let t=[];for(let i=0;e&&e.nodeType===e.ELEMENT_NODE;i++)t[i]=e.scrollTop,e=e.parentNode;return t}function se(e,t){for(let i=0;e&&e.nodeType===e.ELEMENT_NODE;i++)e.scrollTop!==t[i]&&(e.scrollTop=t[i]),e=e.parentNode}class re extends d.JT{constructor(e){super(),this._onDidFocus=this._register(new c.Q5),this.onDidFocus=this._onDidFocus.event,this._onDidBlur=this._register(new c.Q5),this.onDidBlur=this._onDidBlur.event;let t=j(document.activeElement,e),i=!1;const n=()=>{i=!1,t||(t=!0,this._onDidFocus.fire())},o=()=>{t&&(i=!0,window.setTimeout((()=>{i&&(i=!1,t=!1,this._onDidBlur.fire())}),0))};this._refreshStateHandler=()=>{j(document.activeElement,e)!==t&&(t?o():n())},this._register(m(e,ie.FOCUS,n,!0)),this._register(m(e,ie.BLUR,o,!0))}}function ae(e){return new re(e)}function le(e,...t){if(e.append(...t),1===t.length&&"string"!=typeof t[0])return t[0]}function ce(e,t){return e.insertBefore(t,e.firstChild),t}function de(e,...t){e.innerText="",le(e,...t)}const he=/([\w\-]+)?(#([\w\-]+))?((\.([\w\-]+))*)/;var ue;function ge(e,t,i,...n){let o=he.exec(t);if(!o)throw new Error("Bad use of emmet");i=Object.assign({},i||{});let s,r=o[1]||"div";return s=e!==ue.HTML?document.createElementNS(e,r):document.createElement(r),o[3]&&(s.id=o[3]),o[4]&&(s.className=o[4].replace(/\./g," ").trim()),Object.keys(i).forEach((e=>{const t=i[e];void 0!==t&&(/^on\w+$/.test(e)?s[e]=t:"selected"===e?t&&s.setAttribute(e,"true"):s.setAttribute(e,t))})),s.append(...n),s}function pe(e,t,...i){return ge(ue.HTML,e,t,...i)}function fe(...e){for(let t of e)t.style.display="",t.removeAttribute("aria-hidden")}function me(...e){for(let t of e)t.style.display="none",t.setAttribute("aria-hidden","true")}function ve(e){return Array.prototype.slice.call(document.getElementsByTagName(e),0)}function _e(e){const t=window.devicePixelRatio*e;return Math.max(1,Math.floor(t))/window.devicePixelRatio}function be(e){window.open(e,"_blank","noopener")}function we(e){const t=()=>{e(),i=k(t)};let i=k(t);return(0,d.OF)((()=>i.dispose()))}function ye(e){return e?`url('${h.Gi.asBrowserUri(e).toString(!0).replace(/'/g,"%27")}')`:"url('')"}function Ce(e){return`'${e.replace(/'/g,"%27")}'`}!function(e){e.HTML="http://www.w3.org/1999/xhtml",e.SVG="http://www.w3.org/2000/svg"}(ue||(ue={})),pe.SVG=function(e,t,...i){return ge(ue.SVG,e,t,...i)},h.WX.setPreferredWebSchema(/^https:/.test(window.location.href)?"https":"http");class xe extends c.Q5{constructor(){super(),this._subscriptions=new d.SL,this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1},this._subscriptions.add(m(window,"keydown",(e=>{if(e.defaultPrevented)return;const t=new s.y(e);if(6!==t.keyCode||!e.repeat){if(e.altKey&&!this._keyStatus.altKey)this._keyStatus.lastKeyPressed="alt";else if(e.ctrlKey&&!this._keyStatus.ctrlKey)this._keyStatus.lastKeyPressed="ctrl";else if(e.metaKey&&!this._keyStatus.metaKey)this._keyStatus.lastKeyPressed="meta";else if(e.shiftKey&&!this._keyStatus.shiftKey)this._keyStatus.lastKeyPressed="shift";else{if(6===t.keyCode)return;this._keyStatus.lastKeyPressed=void 0}this._keyStatus.altKey=e.altKey,this._keyStatus.ctrlKey=e.ctrlKey,this._keyStatus.metaKey=e.metaKey,this._keyStatus.shiftKey=e.shiftKey,this._keyStatus.lastKeyPressed&&(this._keyStatus.event=e,this.fire(this._keyStatus))}}),!0)),this._subscriptions.add(m(window,"keyup",(e=>{e.defaultPrevented||(!e.altKey&&this._keyStatus.altKey?this._keyStatus.lastKeyReleased="alt":!e.ctrlKey&&this._keyStatus.ctrlKey?this._keyStatus.lastKeyReleased="ctrl":!e.metaKey&&this._keyStatus.metaKey?this._keyStatus.lastKeyReleased="meta":!e.shiftKey&&this._keyStatus.shiftKey?this._keyStatus.lastKeyReleased="shift":this._keyStatus.lastKeyReleased=void 0,this._keyStatus.lastKeyPressed!==this._keyStatus.lastKeyReleased&&(this._keyStatus.lastKeyPressed=void 0),this._keyStatus.altKey=e.altKey,this._keyStatus.ctrlKey=e.ctrlKey,this._keyStatus.metaKey=e.metaKey,this._keyStatus.shiftKey=e.shiftKey,this._keyStatus.lastKeyReleased&&(this._keyStatus.event=e,this.fire(this._keyStatus)))}),!0)),this._subscriptions.add(m(document.body,"mousedown",(()=>{this._keyStatus.lastKeyPressed=void 0}),!0)),this._subscriptions.add(m(document.body,"mouseup",(()=>{this._keyStatus.lastKeyPressed=void 0}),!0)),this._subscriptions.add(m(document.body,"mousemove",(e=>{e.buttons&&(this._keyStatus.lastKeyPressed=void 0)}),!0)),this._subscriptions.add(m(window,"blur",(()=>{this.resetKeyStatus()})))}get keyStatus(){return this._keyStatus}resetKeyStatus(){this.doResetKeyStatus(),this.fire(this._keyStatus)}doResetKeyStatus(){this._keyStatus={altKey:!1,shiftKey:!1,ctrlKey:!1,metaKey:!1}}static getInstance(){return xe.instance||(xe.instance=new xe),xe.instance}dispose(){super.dispose(),this._subscriptions.dispose()}}function Se(e,t){const i=window.matchMedia(e);"function"==typeof i.addEventListener?i.addEventListener("change",t):i.addListener(t)}},4850:(e,t,i)=>{"use strict";i.d(t,{Y:()=>o,p:()=>s});var n=i(4669);class o{constructor(e,t,i){const o=e=>this.emitter.fire(e);this.emitter=new n.Q5({onFirstListenerAdd:()=>e.addEventListener(t,o,i),onLastListenerRemove:()=>e.removeEventListener(t,o,i)})}get event(){return this.emitter.event}dispose(){this.emitter.dispose()}}function s(e){return e.preventDefault(),e.stopPropagation(),e}},38626:(e,t,i)=>{"use strict";i.d(t,{X:()=>o,Z:()=>n});class n{constructor(e){this.domNode=e,this._maxWidth=-1,this._width=-1,this._height=-1,this._top=-1,this._left=-1,this._bottom=-1,this._right=-1,this._fontFamily="",this._fontWeight="",this._fontSize=-1,this._fontFeatureSettings="",this._lineHeight=-1,this._letterSpacing=-100,this._className="",this._display="",this._position="",this._visibility="",this._backgroundColor="",this._layerHint=!1,this._contain="none",this._boxShadow=""}setMaxWidth(e){this._maxWidth!==e&&(this._maxWidth=e,this.domNode.style.maxWidth=this._maxWidth+"px")}setWidth(e){this._width!==e&&(this._width=e,this.domNode.style.width=this._width+"px")}setHeight(e){this._height!==e&&(this._height=e,this.domNode.style.height=this._height+"px")}setTop(e){this._top!==e&&(this._top=e,this.domNode.style.top=this._top+"px")}unsetTop(){-1!==this._top&&(this._top=-1,this.domNode.style.top="")}setLeft(e){this._left!==e&&(this._left=e,this.domNode.style.left=this._left+"px")}setBottom(e){this._bottom!==e&&(this._bottom=e,this.domNode.style.bottom=this._bottom+"px")}setRight(e){this._right!==e&&(this._right=e,this.domNode.style.right=this._right+"px")}setFontFamily(e){this._fontFamily!==e&&(this._fontFamily=e,this.domNode.style.fontFamily=this._fontFamily)}setFontWeight(e){this._fontWeight!==e&&(this._fontWeight=e,this.domNode.style.fontWeight=this._fontWeight)}setFontSize(e){this._fontSize!==e&&(this._fontSize=e,this.domNode.style.fontSize=this._fontSize+"px")}setFontFeatureSettings(e){this._fontFeatureSettings!==e&&(this._fontFeatureSettings=e,this.domNode.style.fontFeatureSettings=this._fontFeatureSettings)}setLineHeight(e){this._lineHeight!==e&&(this._lineHeight=e,this.domNode.style.lineHeight=this._lineHeight+"px")}setLetterSpacing(e){this._letterSpacing!==e&&(this._letterSpacing=e,this.domNode.style.letterSpacing=this._letterSpacing+"px")}setClassName(e){this._className!==e&&(this._className=e,this.domNode.className=this._className)}toggleClassName(e,t){this.domNode.classList.toggle(e,t),this._className=this.domNode.className}setDisplay(e){this._display!==e&&(this._display=e,this.domNode.style.display=this._display)}setPosition(e){this._position!==e&&(this._position=e,this.domNode.style.position=this._position)}setVisibility(e){this._visibility!==e&&(this._visibility=e,this.domNode.style.visibility=this._visibility)}setBackgroundColor(e){this._backgroundColor!==e&&(this._backgroundColor=e,this.domNode.style.backgroundColor=this._backgroundColor)}setLayerHinting(e){this._layerHint!==e&&(this._layerHint=e,this.domNode.style.transform=this._layerHint?"translate3d(0px, 0px, 0px)":"")}setBoxShadow(e){this._boxShadow!==e&&(this._boxShadow=e,this.domNode.style.boxShadow=e)}setContain(e){this._contain!==e&&(this._contain=e,this.domNode.style.contain=this._contain)}setAttribute(e,t){this.domNode.setAttribute(e,t)}removeAttribute(e){this.domNode.removeAttribute(e)}appendChild(e){this.domNode.appendChild(e.domNode)}removeChild(e){this.domNode.removeChild(e.domNode)}}function o(e){return new n(e)}},48764:(e,t,i)=>{"use strict";i.d(t,{BO:()=>s,IY:()=>o,az:()=>r});var n=i(65321);function o(e,t={}){const i=r(t);return i.textContent=e,i}function s(e,t={}){const i=r(t);return l(i,function(e,t){const i={type:1,children:[]};let n=0,o=i;const s=[],r=new a(e);for(;!r.eos();){let e=r.next();const i="\\"===e&&0!==d(r.peek(),t);if(i&&(e=r.next()),!i&&c(e,t)&&e===r.peek()){r.advance(),2===o.type&&(o=s.pop());const i=d(e,t);if(o.type===i||5===o.type&&6===i)o=s.pop();else{const e={type:i,children:[]};5===i&&(e.index=n,n++),o.children.push(e),s.push(o),o=e}}else if("\n"===e)2===o.type&&(o=s.pop()),o.children.push({type:8});else if(2!==o.type){const t={type:2,content:e};o.children.push(t),s.push(o),o=t}else o.content+=e}2===o.type&&(o=s.pop());s.length;return i}(e,!!t.renderCodeSegments),t.actionHandler,t.renderCodeSegments),i}function r(e){const t=e.inline?"span":"div",i=document.createElement(t);return e.className&&(i.className=e.className),i}class a{constructor(e){this.source=e,this.index=0}eos(){return this.index>=this.source.length}next(){const e=this.peek();return this.advance(),e}peek(){return this.source[this.index]}advance(){this.index++}}function l(e,t,i,o){let s;if(2===t.type)s=document.createTextNode(t.content||"");else if(3===t.type)s=document.createElement("b");else if(4===t.type)s=document.createElement("i");else if(7===t.type&&o)s=document.createElement("code");else if(5===t.type&&i){const e=document.createElement("a");e.href="#",i.disposables.add(n.mu(e,"click",(e=>{i.callback(String(t.index),e)}))),s=e}else 8===t.type?s=document.createElement("br"):1===t.type&&(s=e);s&&e!==s&&e.appendChild(s),s&&Array.isArray(t.children)&&t.children.forEach((e=>{l(s,e,i,o)}))}function c(e,t){return 0!==d(e,t)}function d(e,t){switch(e){case"*":return 3;case"_":return 4;case"[":return 5;case"]":return 6;case"`":return t?7:0;default:return 0}}},57974:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c,e:()=>l});var n=i(65321),o=i(70262),s=i(23938),r=i(5976),a=i(1432);function l(e,t){let i=new s.n(t);return i.preventDefault(),{leftButton:i.leftButton,buttons:i.buttons,posx:i.posx,posy:i.posy}}class c{constructor(){this._hooks=new r.SL,this._mouseMoveEventMerger=null,this._mouseMoveCallback=null,this._onStopCallback=null}dispose(){this.stopMonitoring(!1),this._hooks.dispose()}stopMonitoring(e,t){if(!this.isMonitoring())return;this._hooks.clear(),this._mouseMoveEventMerger=null,this._mouseMoveCallback=null;const i=this._onStopCallback;this._onStopCallback=null,e&&i&&i(t)}isMonitoring(){return!!this._mouseMoveEventMerger}startMonitoring(e,t,i,r,l){if(this.isMonitoring())return;this._mouseMoveEventMerger=i,this._mouseMoveCallback=r,this._onStopCallback=l;const c=o.E.getSameOriginWindowChain(),d=a.gn?"pointermove":"mousemove",h=c.map((e=>e.window.document)),u=n.Ay(e);u&&h.unshift(u);for(const e of h)this._hooks.add(n.Y_(e,d,(e=>{e.buttons===t?this._mouseMoveCallback(e):this.stopMonitoring(!0)}),((e,t)=>this._mouseMoveEventMerger(e,t)))),this._hooks.add(n.nm(e,"mouseup",(e=>this.stopMonitoring(!0))));if(o.E.hasDifferentOriginAncestor()){let e=c[c.length-1];this._hooks.add(n.nm(e.window.document,"mouseout",(e=>{"html"===new s.n(e).target.tagName.toLowerCase()&&this.stopMonitoring(!0)}))),this._hooks.add(n.nm(e.window.document,"mouseover",(e=>{"html"===new s.n(e).target.tagName.toLowerCase()&&this.stopMonitoring(!0)}))),this._hooks.add(n.nm(e.window.document.body,"mouseleave",(e=>{this.stopMonitoring(!0)})))}}}},70262:(e,t,i)=>{"use strict";i.d(t,{E:()=>r});let n=!1,o=null;function s(e){if(!e.parent||e.parent===e)return null;try{let t=e.location,i=e.parent.location;if("null"!==t.origin&&"null"!==i.origin&&t.origin!==i.origin)return n=!0,null}catch(e){return n=!0,null}return e.parent}class r{static getSameOriginWindowChain(){if(!o){o=[];let e,t=window;do{e=s(t),e?o.push({window:t,iframeElement:t.frameElement||null}):o.push({window:t,iframeElement:null}),t=e}while(t)}return o.slice(0)}static hasDifferentOriginAncestor(){return o||this.getSameOriginWindowChain(),n}static getPositionOfChildWindowRelativeToAncestorWindow(e,t){if(!t||e===t)return{top:0,left:0};let i=0,n=0,o=this.getSameOriginWindowChain();for(const e of o){if(i+=e.window.scrollY,n+=e.window.scrollX,e.window===t)break;if(!e.iframeElement)break;let o=e.iframeElement.getBoundingClientRect();i+=o.top,n+=o.left}return{top:i,left:n}}}},59069:(e,t,i)=>{"use strict";i.d(t,{y:()=>c});var n=i(16268),o=i(22258),s=i(8313),r=i(1432);const a=r.dz?256:2048,l=r.dz?2048:256;class c{constructor(e){this._standardKeyboardEventBrand=!0;let t=e;this.browserEvent=t,this.target=t.target,this.ctrlKey=t.ctrlKey,this.shiftKey=t.shiftKey,this.altKey=t.altKey,this.metaKey=t.metaKey,this.keyCode=function(e){if(e.charCode){let t=String.fromCharCode(e.charCode).toUpperCase();return o.kL.fromString(t)}const t=e.keyCode;if(3===t)return 7;if(n.vU){if(59===t)return 80;if(107===t)return 81;if(109===t)return 83;if(r.dz&&224===t)return 57}else if(n.Pf){if(91===t)return 57;if(r.dz&&93===t)return 57;if(!r.dz&&92===t)return 57}return o.H_[t]||0}(t),this.code=t.code,this.ctrlKey=this.ctrlKey||5===this.keyCode,this.altKey=this.altKey||6===this.keyCode,this.shiftKey=this.shiftKey||4===this.keyCode,this.metaKey=this.metaKey||57===this.keyCode,this._asKeybinding=this._computeKeybinding(),this._asRuntimeKeybinding=this._computeRuntimeKeybinding()}preventDefault(){this.browserEvent&&this.browserEvent.preventDefault&&this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent&&this.browserEvent.stopPropagation&&this.browserEvent.stopPropagation()}toKeybinding(){return this._asRuntimeKeybinding}equals(e){return this._asKeybinding===e}_computeKeybinding(){let e=0;5!==this.keyCode&&4!==this.keyCode&&6!==this.keyCode&&57!==this.keyCode&&(e=this.keyCode);let t=0;return this.ctrlKey&&(t|=a),this.altKey&&(t|=512),this.shiftKey&&(t|=1024),this.metaKey&&(t|=l),t|=e,t}_computeRuntimeKeybinding(){let e=0;return 5!==this.keyCode&&4!==this.keyCode&&6!==this.keyCode&&57!==this.keyCode&&(e=this.keyCode),new s.QC(this.ctrlKey,this.shiftKey,this.altKey,this.metaKey,e)}}},23938:(e,t,i)=>{"use strict";i.d(t,{n:()=>r,q:()=>a});var n=i(16268),o=i(70262),s=i(1432);class r{constructor(e){this.timestamp=Date.now(),this.browserEvent=e,this.leftButton=0===e.button,this.middleButton=1===e.button,this.rightButton=2===e.button,this.buttons=e.buttons,this.target=e.target,this.detail=e.detail||1,"dblclick"===e.type&&(this.detail=2),this.ctrlKey=e.ctrlKey,this.shiftKey=e.shiftKey,this.altKey=e.altKey,this.metaKey=e.metaKey,"number"==typeof e.pageX?(this.posx=e.pageX,this.posy=e.pageY):(this.posx=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,this.posy=e.clientY+document.body.scrollTop+document.documentElement.scrollTop);let t=o.E.getPositionOfChildWindowRelativeToAncestorWindow(self,e.view);this.posx-=t.left,this.posy-=t.top}preventDefault(){this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent.stopPropagation()}}class a{constructor(e,t=0,i=0){if(this.browserEvent=e||null,this.target=e?e.target||e.targetNode||e.srcElement:null,this.deltaY=i,this.deltaX=t,e){let t=e,i=e;if(void 0!==t.wheelDeltaY)this.deltaY=t.wheelDeltaY/120;else if(void 0!==i.VERTICAL_AXIS&&i.axis===i.VERTICAL_AXIS)this.deltaY=-i.detail/3;else if("wheel"===e.type){const t=e;t.deltaMode===t.DOM_DELTA_LINE?n.vU&&!s.dz?this.deltaY=-e.deltaY/3:this.deltaY=-e.deltaY:this.deltaY=-e.deltaY/40}if(void 0!==t.wheelDeltaX)n.G6&&s.ED?this.deltaX=-t.wheelDeltaX/120:this.deltaX=t.wheelDeltaX/120;else if(void 0!==i.HORIZONTAL_AXIS&&i.axis===i.HORIZONTAL_AXIS)this.deltaX=-e.detail/3;else if("wheel"===e.type){const t=e;t.deltaMode===t.DOM_DELTA_LINE?n.vU&&!s.dz?this.deltaX=-e.deltaX/3:this.deltaX=-e.deltaX:this.deltaX=-e.deltaX/40}0===this.deltaY&&0===this.deltaX&&e.wheelDelta&&(this.deltaY=e.wheelDelta/120)}}preventDefault(){this.browserEvent&&this.browserEvent.preventDefault()}stopPropagation(){this.browserEvent&&this.browserEvent.stopPropagation()}}},10553:(e,t,i)=>{"use strict";i.d(t,{o:()=>c,t:()=>n});var n,o=i(65321),s=i(9488),r=i(49898),a=i(5976),l=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r};!function(e){e.Tap="-monaco-gesturetap",e.Change="-monaco-gesturechange",e.Start="-monaco-gesturestart",e.End="-monaco-gesturesend",e.Contextmenu="-monaco-gesturecontextmenu"}(n||(n={}));class c extends a.JT{constructor(){super(),this.dispatched=!1,this.activeTouches={},this.handle=null,this.targets=[],this.ignoreTargets=[],this._lastSetTapCountTime=0,this._register(o.nm(document,"touchstart",(e=>this.onTouchStart(e)),{passive:!1})),this._register(o.nm(document,"touchend",(e=>this.onTouchEnd(e)))),this._register(o.nm(document,"touchmove",(e=>this.onTouchMove(e)),{passive:!1}))}static addTarget(e){return c.isTouchDevice()?(c.INSTANCE||(c.INSTANCE=new c),c.INSTANCE.targets.push(e),{dispose:()=>{c.INSTANCE.targets=c.INSTANCE.targets.filter((t=>t!==e))}}):a.JT.None}static ignoreTarget(e){return c.isTouchDevice()?(c.INSTANCE||(c.INSTANCE=new c),c.INSTANCE.ignoreTargets.push(e),{dispose:()=>{c.INSTANCE.ignoreTargets=c.INSTANCE.ignoreTargets.filter((t=>t!==e))}}):a.JT.None}static isTouchDevice(){return"ontouchstart"in window||navigator.maxTouchPoints>0}dispose(){this.handle&&(this.handle.dispose(),this.handle=null),super.dispose()}onTouchStart(e){let t=Date.now();this.handle&&(this.handle.dispose(),this.handle=null);for(let i=0,o=e.targetTouches.length;i<o;i++){let o=e.targetTouches.item(i);this.activeTouches[o.identifier]={id:o.identifier,initialTarget:o.target,initialTimeStamp:t,initialPageX:o.pageX,initialPageY:o.pageY,rollingTimestamps:[t],rollingPageX:[o.pageX],rollingPageY:[o.pageY]};let s=this.newGestureEvent(n.Start,o.target);s.pageX=o.pageX,s.pageY=o.pageY,this.dispatchEvent(s)}this.dispatched&&(e.preventDefault(),e.stopPropagation(),this.dispatched=!1)}onTouchEnd(e){let t=Date.now(),i=Object.keys(this.activeTouches).length;for(let o=0,r=e.changedTouches.length;o<r;o++){let r=e.changedTouches.item(o);if(!this.activeTouches.hasOwnProperty(String(r.identifier))){console.warn("move of an UNKNOWN touch",r);continue}let a=this.activeTouches[r.identifier],l=Date.now()-a.initialTimeStamp;if(l<c.HOLD_DELAY&&Math.abs(a.initialPageX-s.Gb(a.rollingPageX))<30&&Math.abs(a.initialPageY-s.Gb(a.rollingPageY))<30){let e=this.newGestureEvent(n.Tap,a.initialTarget);e.pageX=s.Gb(a.rollingPageX),e.pageY=s.Gb(a.rollingPageY),this.dispatchEvent(e)}else if(l>=c.HOLD_DELAY&&Math.abs(a.initialPageX-s.Gb(a.rollingPageX))<30&&Math.abs(a.initialPageY-s.Gb(a.rollingPageY))<30){let e=this.newGestureEvent(n.Contextmenu,a.initialTarget);e.pageX=s.Gb(a.rollingPageX),e.pageY=s.Gb(a.rollingPageY),this.dispatchEvent(e)}else if(1===i){let e=s.Gb(a.rollingPageX),i=s.Gb(a.rollingPageY),n=s.Gb(a.rollingTimestamps)-a.rollingTimestamps[0],o=e-a.rollingPageX[0],r=i-a.rollingPageY[0];const l=this.targets.filter((e=>a.initialTarget instanceof Node&&e.contains(a.initialTarget)));this.inertia(l,t,Math.abs(o)/n,o>0?1:-1,e,Math.abs(r)/n,r>0?1:-1,i)}this.dispatchEvent(this.newGestureEvent(n.End,a.initialTarget)),delete this.activeTouches[r.identifier]}this.dispatched&&(e.preventDefault(),e.stopPropagation(),this.dispatched=!1)}newGestureEvent(e,t){let i=document.createEvent("CustomEvent");return i.initEvent(e,!1,!0),i.initialTarget=t,i.tapCount=0,i}dispatchEvent(e){if(e.type===n.Tap){const t=(new Date).getTime();let i=0;i=t-this._lastSetTapCountTime>c.CLEAR_TAP_COUNT_TIME?1:2,this._lastSetTapCountTime=t,e.tapCount=i}else e.type!==n.Change&&e.type!==n.Contextmenu||(this._lastSetTapCountTime=0);for(let t=0;t<this.ignoreTargets.length;t++)if(e.initialTarget instanceof Node&&this.ignoreTargets[t].contains(e.initialTarget))return;this.targets.forEach((t=>{e.initialTarget instanceof Node&&t.contains(e.initialTarget)&&(t.dispatchEvent(e),this.dispatched=!0)}))}inertia(e,t,i,s,r,a,l,d){this.handle=o.jL((()=>{let o=Date.now(),h=o-t,u=0,g=0,p=!0;i+=c.SCROLL_FRICTION*h,a+=c.SCROLL_FRICTION*h,i>0&&(p=!1,u=s*i*h),a>0&&(p=!1,g=l*a*h);let f=this.newGestureEvent(n.Change);f.translationX=u,f.translationY=g,e.forEach((e=>e.dispatchEvent(f))),p||this.inertia(e,o,i,s,r+u,a,l,d+g)}))}onTouchMove(e){let t=Date.now();for(let i=0,o=e.changedTouches.length;i<o;i++){let o=e.changedTouches.item(i);if(!this.activeTouches.hasOwnProperty(String(o.identifier))){console.warn("end of an UNKNOWN touch",o);continue}let r=this.activeTouches[o.identifier],a=this.newGestureEvent(n.Change,r.initialTarget);a.translationX=o.pageX-s.Gb(r.rollingPageX),a.translationY=o.pageY-s.Gb(r.rollingPageY),a.pageX=o.pageX,a.pageY=o.pageY,this.dispatchEvent(a),r.rollingPageX.length>3&&(r.rollingPageX.shift(),r.rollingPageY.shift(),r.rollingTimestamps.shift()),r.rollingPageX.push(o.pageX),r.rollingPageY.push(o.pageY),r.rollingTimestamps.push(t)}this.dispatched&&(e.preventDefault(),e.stopPropagation(),this.dispatched=!1)}}c.SCROLL_FRICTION=-.005,c.HOLD_DELAY=700,c.CLEAR_TAP_COUNT_TIME=400,l([r.H],c,"isTouchDevice",null)},76033:(e,t,i)=>{"use strict";i.d(t,{Y:()=>u,g:()=>g});var n=i(16268),o=i(23547),s=i(65321),r=i(10553),a=i(74741),l=i(5976),c=i(1432),d=i(98401),h=(i(82016),i(63580));class u extends l.JT{constructor(e,t,i={}){super(),this.options=i,this._context=e||this,this._action=t,t instanceof a.aU&&this._register(t.onDidChange((e=>{this.element&&this.handleActionChangeEvent(e)})))}handleActionChangeEvent(e){void 0!==e.enabled&&this.updateEnabled(),void 0!==e.checked&&this.updateChecked(),void 0!==e.class&&this.updateClass(),void 0!==e.label&&(this.updateLabel(),this.updateTooltip()),void 0!==e.tooltip&&this.updateTooltip()}get actionRunner(){return this._actionRunner||(this._actionRunner=this._register(new a.Wi)),this._actionRunner}set actionRunner(e){this._actionRunner=e}getAction(){return this._action}isEnabled(){return this._action.enabled}setActionContext(e){this._context=e}render(e){const t=this.element=e;this._register(r.o.addTarget(e));const i=this.options&&this.options.draggable;i&&(e.draggable=!0,n.vU&&this._register((0,s.nm)(e,s.tw.DRAG_START,(e=>{var t;return null===(t=e.dataTransfer)||void 0===t?void 0:t.setData(o.go.TEXT,this._action.label)})))),this._register((0,s.nm)(t,r.t.Tap,(e=>this.onClick(e,!0)))),this._register((0,s.nm)(t,s.tw.MOUSE_DOWN,(e=>{i||s.zB.stop(e,!0),this._action.enabled&&0===e.button&&t.classList.add("active")}))),c.dz&&this._register((0,s.nm)(t,s.tw.CONTEXT_MENU,(e=>{0===e.button&&!0===e.ctrlKey&&this.onClick(e)}))),this._register((0,s.nm)(t,s.tw.CLICK,(e=>{s.zB.stop(e,!0),this.options&&this.options.isMenu||this.onClick(e)}))),this._register((0,s.nm)(t,s.tw.DBLCLICK,(e=>{s.zB.stop(e,!0)}))),[s.tw.MOUSE_UP,s.tw.MOUSE_OUT].forEach((e=>{this._register((0,s.nm)(t,e,(e=>{s.zB.stop(e),t.classList.remove("active")})))}))}onClick(e,t=!1){var i;s.zB.stop(e,!0);const n=d.Jp(this._context)?(null===(i=this.options)||void 0===i?void 0:i.useEventAsContext)?e:{preserveFocus:t}:this._context;this.actionRunner.run(this._action,n)}focus(){this.element&&(this.element.tabIndex=0,this.element.focus(),this.element.classList.add("focused"))}blur(){this.element&&(this.element.blur(),this.element.tabIndex=-1,this.element.classList.remove("focused"))}setFocusable(e){this.element&&(this.element.tabIndex=e?0:-1)}get trapsArrowNavigation(){return!1}updateEnabled(){}updateLabel(){}updateTooltip(){}updateClass(){}updateChecked(){}dispose(){this.element&&(this.element.remove(),this.element=void 0),super.dispose()}}class g extends u{constructor(e,t,i={}){super(e,t,i),this.options=i,this.options.icon=void 0!==i.icon&&i.icon,this.options.label=void 0===i.label||i.label,this.cssClass=""}render(e){super.render(e),this.element&&(this.label=(0,s.R3)(this.element,(0,s.$)("a.action-label"))),this.label&&(this._action.id===a.Z0.ID?this.label.setAttribute("role","presentation"):this.options.isMenu?this.label.setAttribute("role","menuitem"):this.label.setAttribute("role","button")),this.options.label&&this.options.keybinding&&this.element&&((0,s.R3)(this.element,(0,s.$)("span.keybinding")).textContent=this.options.keybinding),this.updateClass(),this.updateLabel(),this.updateTooltip(),this.updateEnabled(),this.updateChecked()}focus(){this.label&&(this.label.tabIndex=0,this.label.focus())}blur(){this.label&&(this.label.tabIndex=-1)}setFocusable(e){this.label&&(this.label.tabIndex=e?0:-1)}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this.getAction().label)}updateTooltip(){let e=null;this.getAction().tooltip?e=this.getAction().tooltip:!this.options.label&&this.getAction().label&&this.options.icon&&(e=this.getAction().label,this.options.keybinding&&(e=h.N({key:"titleLabel",comment:["action title","action keybinding"]},"{0} ({1})",e,this.options.keybinding))),e&&this.label&&(this.label.title=e)}updateClass(){this.cssClass&&this.label&&this.label.classList.remove(...this.cssClass.split(" ")),this.options.icon?(this.cssClass=this.getAction().class,this.label&&(this.label.classList.add("codicon"),this.cssClass&&this.label.classList.add(...this.cssClass.split(" "))),this.updateEnabled()):this.label&&this.label.classList.remove("codicon")}updateEnabled(){this.getAction().enabled?(this.label&&(this.label.removeAttribute("aria-disabled"),this.label.classList.remove("disabled")),this.element&&this.element.classList.remove("disabled")):(this.label&&(this.label.setAttribute("aria-disabled","true"),this.label.classList.add("disabled")),this.element&&this.element.classList.add("disabled"))}updateChecked(){this.label&&(this.getAction().checked?this.label.classList.add("checked"):this.label.classList.remove("checked"))}}},90317:(e,t,i)=>{"use strict";i.d(t,{o:()=>h});var n=i(65321),o=i(59069),s=i(76033),r=i(74741),a=i(4669),l=i(5976),c=i(98401),d=(i(82016),function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))});class h extends l.JT{constructor(e,t={}){var i,l,c,d,h,u;let g,p;switch(super(),this.triggerKeyDown=!1,this.focusable=!0,this._onDidBlur=this._register(new a.Q5),this.onDidBlur=this._onDidBlur.event,this._onDidCancel=this._register(new a.Q5({onFirstListenerAdd:()=>this.cancelHasListener=!0})),this.onDidCancel=this._onDidCancel.event,this.cancelHasListener=!1,this._onDidRun=this._register(new a.Q5),this.onDidRun=this._onDidRun.event,this._onBeforeRun=this._register(new a.Q5),this.onBeforeRun=this._onBeforeRun.event,this.options=t,this._context=null!==(i=t.context)&&void 0!==i?i:null,this._orientation=null!==(l=this.options.orientation)&&void 0!==l?l:0,this._triggerKeys={keyDown:null!==(d=null===(c=this.options.triggerKeys)||void 0===c?void 0:c.keyDown)&&void 0!==d&&d,keys:null!==(u=null===(h=this.options.triggerKeys)||void 0===h?void 0:h.keys)&&void 0!==u?u:[3,10]},this.options.actionRunner?this._actionRunner=this.options.actionRunner:(this._actionRunner=new r.Wi,this._register(this._actionRunner)),this._register(this._actionRunner.onDidRun((e=>this._onDidRun.fire(e)))),this._register(this._actionRunner.onBeforeRun((e=>this._onBeforeRun.fire(e)))),this._actionIds=[],this.viewItems=[],this.focusedItem=void 0,this.domNode=document.createElement("div"),this.domNode.className="monaco-action-bar",!1!==t.animated&&this.domNode.classList.add("animated"),this._orientation){case 0:g=[15],p=[17];break;case 1:g=[16],p=[18],this.domNode.className+=" vertical"}this._register(n.nm(this.domNode,n.tw.KEY_DOWN,(e=>{const t=new o.y(e);let i=!0;const n="number"==typeof this.focusedItem?this.viewItems[this.focusedItem]:void 0;g&&(t.equals(g[0])||t.equals(g[1]))?i=this.focusPrevious():p&&(t.equals(p[0])||t.equals(p[1]))?i=this.focusNext():t.equals(9)&&this.cancelHasListener?this._onDidCancel.fire():t.equals(14)?i=this.focusFirst():t.equals(13)?i=this.focusLast():t.equals(2)&&n instanceof s.Y&&n.trapsArrowNavigation?i=this.focusNext():this.isTriggerKeyEvent(t)?this._triggerKeys.keyDown?this.doTrigger(t):this.triggerKeyDown=!0:i=!1,i&&(t.preventDefault(),t.stopPropagation())}))),this._register(n.nm(this.domNode,n.tw.KEY_UP,(e=>{const t=new o.y(e);this.isTriggerKeyEvent(t)?(!this._triggerKeys.keyDown&&this.triggerKeyDown&&(this.triggerKeyDown=!1,this.doTrigger(t)),t.preventDefault(),t.stopPropagation()):(t.equals(2)||t.equals(1026))&&this.updateFocusedItem()}))),this.focusTracker=this._register(n.go(this.domNode)),this._register(this.focusTracker.onDidBlur((()=>{n.vY()!==this.domNode&&n.jg(n.vY(),this.domNode)||(this._onDidBlur.fire(),this.focusedItem=void 0,this.triggerKeyDown=!1)}))),this._register(this.focusTracker.onDidFocus((()=>this.updateFocusedItem()))),this.actionsList=document.createElement("ul"),this.actionsList.className="actions-container",this.actionsList.setAttribute("role","toolbar"),this.options.ariaLabel&&this.actionsList.setAttribute("aria-label",this.options.ariaLabel),this.domNode.appendChild(this.actionsList),e.appendChild(this.domNode)}isTriggerKeyEvent(e){let t=!1;return this._triggerKeys.keys.forEach((i=>{t=t||e.equals(i)})),t}updateFocusedItem(){for(let e=0;e<this.actionsList.children.length;e++){const t=this.actionsList.children[e];if(n.jg(n.vY(),t)){this.focusedItem=e;break}}}get context(){return this._context}set context(e){this._context=e,this.viewItems.forEach((t=>t.setActionContext(e)))}get actionRunner(){return this._actionRunner}set actionRunner(e){e&&(this._actionRunner=e,this.viewItems.forEach((t=>t.actionRunner=e)))}getContainer(){return this.domNode}push(e,t={}){const i=Array.isArray(e)?e:[e];let o=c.hj(t.index)?t.index:null;i.forEach((e=>{const i=document.createElement("li");let r;i.className="action-item",i.setAttribute("role","presentation"),this.options.allowContextMenu||this._register(n.nm(i,n.tw.CONTEXT_MENU,(e=>{n.zB.stop(e,!0)}))),this.options.actionViewItemProvider&&(r=this.options.actionViewItemProvider(e)),r||(r=new s.g(this.context,e,t)),r.actionRunner=this._actionRunner,r.setActionContext(this.context),r.render(i),this.focusable&&r instanceof s.Y&&0===this.viewItems.length&&r.setFocusable(!0),null===o||o<0||o>=this.actionsList.children.length?(this.actionsList.appendChild(i),this.viewItems.push(r),this._actionIds.push(e.id)):(this.actionsList.insertBefore(i,this.actionsList.children[o]),this.viewItems.splice(o,0,r),this._actionIds.splice(o,0,e.id),o++)})),"number"==typeof this.focusedItem&&this.focus(this.focusedItem)}clear(){(0,l.B9)(this.viewItems),this.viewItems=[],this._actionIds=[],n.PO(this.actionsList)}length(){return this.viewItems.length}focus(e){let t,i=!1;if(void 0===e?i=!0:"number"==typeof e?t=e:"boolean"==typeof e&&(i=e),i&&void 0===this.focusedItem){const e=this.viewItems.findIndex((e=>e.isEnabled()));this.focusedItem=-1===e?void 0:e,this.updateFocus()}else void 0!==t&&(this.focusedItem=t),this.updateFocus()}focusFirst(){return this.focusedItem=this.length()>1?1:0,this.focusPrevious()}focusLast(){return this.focusedItem=this.length()<2?0:this.length()-2,this.focusNext()}focusNext(){if(void 0===this.focusedItem)this.focusedItem=this.viewItems.length-1;else if(this.viewItems.length<=1)return!1;const e=this.focusedItem;let t;do{if(this.options.preventLoopNavigation&&this.focusedItem+1>=this.viewItems.length)return this.focusedItem=e,!1;this.focusedItem=(this.focusedItem+1)%this.viewItems.length,t=this.viewItems[this.focusedItem]}while(this.focusedItem!==e&&this.options.focusOnlyEnabledItems&&!t.isEnabled());return this.updateFocus(),!0}focusPrevious(){if(void 0===this.focusedItem)this.focusedItem=0;else if(this.viewItems.length<=1)return!1;const e=this.focusedItem;let t;do{if(this.focusedItem=this.focusedItem-1,this.focusedItem<0){if(this.options.preventLoopNavigation)return this.focusedItem=e,!1;this.focusedItem=this.viewItems.length-1}t=this.viewItems[this.focusedItem]}while(this.focusedItem!==e&&this.options.focusOnlyEnabledItems&&!t.isEnabled());return this.updateFocus(!0),!0}updateFocus(e,t){void 0===this.focusedItem&&this.actionsList.focus({preventScroll:t});for(let i=0;i<this.viewItems.length;i++){const n=this.viewItems[i],o=n;if(i===this.focusedItem){let i=!0;c.mf(o.focus)||(i=!1),this.options.focusOnlyEnabledItems&&c.mf(n.isEnabled)&&!n.isEnabled()&&(i=!1),i?o.focus(e):this.actionsList.focus({preventScroll:t})}else c.mf(o.blur)&&o.blur()}}doTrigger(e){if(void 0===this.focusedItem)return;const t=this.viewItems[this.focusedItem];if(t instanceof s.Y){const i=null===t._context||void 0===t._context?e:t._context;this.run(t._action,i)}}run(e,t){return d(this,void 0,void 0,(function*(){yield this._actionRunner.run(e,t)}))}dispose(){(0,l.B9)(this.viewItems),this.viewItems=[],this._actionIds=[],this.getContainer().remove(),super.dispose()}}},85152:(e,t,i)=>{"use strict";i.d(t,{Z9:()=>u,i7:()=>g,wW:()=>h});var n=i(65321),o=i(1432);i(56130);const s=2e4;let r,a,l,c,d;function h(e){r=document.createElement("div"),r.className="monaco-aria-container";const t=()=>{const e=document.createElement("div");return e.className="monaco-alert",e.setAttribute("role","alert"),e.setAttribute("aria-atomic","true"),r.appendChild(e),e};a=t(),l=t();const i=()=>{const e=document.createElement("div");return e.className="monaco-status",e.setAttribute("role","complementary"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),r.appendChild(e),e};c=i(),d=i(),e.appendChild(r)}function u(e){r&&(a.textContent!==e?(n.PO(l),p(a,e)):(n.PO(a),p(l,e)))}function g(e){r&&(o.dz?u(e):c.textContent!==e?(n.PO(d),p(c,e)):(n.PO(c),p(d,e)))}function p(e,t){n.PO(e),t.length>s&&(t=t.substr(0,s)),e.textContent=t,e.style.visibility="hidden",e.style.visibility="visible"}},28609:(e,t,i)=>{"use strict";i.d(t,{a:()=>o});var n=i(73046);i(93998),i(36709);function o(e){let t=e.definition;for(;t instanceof n.lA;)t=t.definition;return`.codicon-${e.id}:before { content: '${t.fontCharacter}'; }`}},67488:(e,t,i)=>{"use strict";i.d(t,{Z:()=>l});var n=i(65321),o=i(41264),s=i(36248),r=i(97295);i(74965);const a={badgeBackground:o.Il.fromHex("#4D4D4D"),badgeForeground:o.Il.fromHex("#FFFFFF")};class l{constructor(e,t){this.count=0,this.options=t||Object.create(null),(0,s.jB)(this.options,a,!1),this.badgeBackground=this.options.badgeBackground,this.badgeForeground=this.options.badgeForeground,this.badgeBorder=this.options.badgeBorder,this.element=(0,n.R3)(e,(0,n.$)(".monaco-count-badge")),this.countFormat=this.options.countFormat||"{0}",this.titleFormat=this.options.titleFormat||"",this.setCount(this.options.count||0)}setCount(e){this.count=e,this.render()}setTitleFormat(e){this.titleFormat=e,this.render()}render(){this.element.textContent=(0,r.WU)(this.countFormat,this.count),this.element.title=(0,r.WU)(this.titleFormat,this.count),this.applyStyles()}style(e){this.badgeBackground=e.badgeBackground,this.badgeForeground=e.badgeForeground,this.badgeBorder=e.badgeBorder,this.applyStyles()}applyStyles(){if(this.element){const e=this.badgeBackground?this.badgeBackground.toString():"",t=this.badgeForeground?this.badgeForeground.toString():"",i=this.badgeBorder?this.badgeBorder.toString():"";this.element.style.backgroundColor=e,this.element.style.color=t,this.element.style.borderWidth=i?"1px":"",this.element.style.borderStyle=i?"solid":"",this.element.style.borderColor=i}}}},34650:(e,t,i)=>{"use strict";i.d(t,{q:()=>r});var n=i(65321),o=i(56811),s=i(36248);class r{constructor(e,t){this.supportIcons=t,this.text="",this.title="",this.highlights=[],this.didEverRender=!1,this.domNode=document.createElement("span"),this.domNode.className="monaco-highlighted-label",e.appendChild(this.domNode)}get element(){return this.domNode}set(e,t=[],i="",n){e||(e=""),n&&(e=r.escapeNewLines(e,t)),this.didEverRender&&this.text===e&&this.title===i&&s.fS(this.highlights,t)||(this.text=e,this.title=i,this.highlights=t,this.render())}render(){const e=[];let t=0;for(const i of this.highlights){if(i.end===i.start)continue;if(t<i.start){const s=this.text.substring(t,i.start);e.push(n.$("span",void 0,...this.supportIcons?(0,o.T)(s):[s])),t=i.end}const s=this.text.substring(i.start,i.end),r=n.$("span.highlight",void 0,...this.supportIcons?(0,o.T)(s):[s]);i.extraClasses&&r.classList.add(i.extraClasses),e.push(r),t=i.end}if(t<this.text.length){const i=this.text.substring(t);e.push(n.$("span",void 0,...this.supportIcons?(0,o.T)(i):[i]))}n.mc(this.domNode,...e),this.title?this.domNode.title=this.title:this.domNode.removeAttribute("title"),this.didEverRender=!0}static escapeNewLines(e,t){let i=0,n=0;return e.replace(/\r\n|\r|\n/g,((e,o)=>{n="\r\n"===e?-1:0,o+=i;for(const e of t)e.end<=o||(e.start>=o&&(e.start+=n),e.end>=o&&(e.end+=n));return i+=n,"âŽ"}))}}},48801:(e,t,i)=>{"use strict";i.d(t,{g:()=>m});var n=i(65321),o=i(34650),s=i(15393),r=i(71050),a=i(59365),l=i(5976),c=i(98401),d=i(63580),h=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class u{constructor(e,t,i){this.hoverDelegate=e,this.target=t,this.fadeInAnimation=i}update(e,t){var i;return h(this,void 0,void 0,(function*(){if(this._cancellationTokenSource&&(this._cancellationTokenSource.dispose(!0),this._cancellationTokenSource=void 0),this.isDisposed)return;let n;if(void 0===e||(0,c.HD)(e)||e instanceof HTMLElement)n=e;else if((0,c.mf)(e.markdown)){this._hoverWidget||this.show((0,d.N)("iconLabel.loading","æ­£åœ¨åŠ è½½..."),t),this._cancellationTokenSource=new r.A;const i=this._cancellationTokenSource.token;if(n=yield e.markdown(i),this.isDisposed||i.isCancellationRequested)return}else n=null!==(i=e.markdown)&&void 0!==i?i:e.markdownNotSupportedFallback;this.show(n,t)}))}show(e,t){const i=this._hoverWidget;if(this.hasContent(e)){const n={content:e,target:this.target,showPointer:"element"===this.hoverDelegate.placement,hoverPosition:2,skipFadeInAnimation:!this.fadeInAnimation||!!i};this._hoverWidget=this.hoverDelegate.showHover(n,t)}null==i||i.dispose()}hasContent(e){return!!e&&(!(0,a.Fr)(e)||!!e.value)}get isDisposed(){var e;return null===(e=this._hoverWidget)||void 0===e?void 0:e.isDisposed}dispose(){var e,t;null===(e=this._hoverWidget)||void 0===e||e.dispose(),null===(t=this._cancellationTokenSource)||void 0===t||t.dispose(!0),this._cancellationTokenSource=void 0}}var g=i(36248),p=i(61134);i(24997);class f{constructor(e){this._element=e}get element(){return this._element}set textContent(e){this.disposed||e===this._textContent||(this._textContent=e,this._element.textContent=e)}set className(e){this.disposed||e===this._className||(this._className=e,this._element.className=e)}set empty(e){this.disposed||e===this._empty||(this._empty=e,this._element.style.marginLeft=e?"0":"")}dispose(){this.disposed=!0}}class m extends l.JT{constructor(e,t){super(),this.customHovers=new Map,this.domNode=this._register(new f(n.R3(e,n.$(".monaco-icon-label")))),this.labelContainer=n.R3(this.domNode.element,n.$(".monaco-icon-label-container"));const i=n.R3(this.labelContainer,n.$("span.monaco-icon-name-container"));this.descriptionContainer=this._register(new f(n.R3(this.labelContainer,n.$("span.monaco-icon-description-container")))),(null==t?void 0:t.supportHighlights)||(null==t?void 0:t.supportIcons)?this.nameNode=new _(i,!!t.supportIcons):this.nameNode=new v(i),(null==t?void 0:t.supportDescriptionHighlights)?this.descriptionNodeFactory=()=>new o.q(n.R3(this.descriptionContainer.element,n.$("span.label-description")),!!t.supportIcons):this.descriptionNodeFactory=()=>this._register(new f(n.R3(this.descriptionContainer.element,n.$("span.label-description")))),this.hoverDelegate=null==t?void 0:t.hoverDelegate}get element(){return this.domNode.element}setLabel(e,t,i){const n=["monaco-icon-label"];i&&(i.extraClasses&&n.push(...i.extraClasses),i.italic&&n.push("italic"),i.strikethrough&&n.push("strikethrough")),this.domNode.className=n.join(" "),this.setupHover((null==i?void 0:i.descriptionTitle)?this.labelContainer:this.element,null==i?void 0:i.title),this.nameNode.setLabel(e,i),(t||this.descriptionNode)&&(this.descriptionNode||(this.descriptionNode=this.descriptionNodeFactory()),this.descriptionNode instanceof o.q?(this.descriptionNode.set(t||"",i?i.descriptionMatches:void 0),this.setupHover(this.descriptionNode.element,null==i?void 0:i.descriptionTitle)):(this.descriptionNode.textContent=t||"",this.setupHover(this.descriptionNode.element,(null==i?void 0:i.descriptionTitle)||""),this.descriptionNode.empty=!t))}setupHover(e,t){const i=this.customHovers.get(e);if(i&&(i.dispose(),this.customHovers.delete(e)),t)if(this.hoverDelegate){const i=function(e,t,i){let o,r;const a=(t,i)=>{var n;t&&(null==r||r.dispose(),r=void 0),i&&(null==o||o.dispose(),o=void 0),null===(n=e.onDidHideHover)||void 0===n||n.call(e)},c=(n,o,a)=>new s._F((()=>h(this,void 0,void 0,(function*(){r&&!r.isDisposed||(r=new u(e,a||t,n>0),yield r.update(i,o))}))),n),d=n.nm(t,n.tw.MOUSE_OVER,(()=>{if(o)return;const i=new l.SL;i.add(n.nm(t,n.tw.MOUSE_LEAVE,(e=>a(!1,e.fromElement===t)),!0)),i.add(n.nm(t,n.tw.MOUSE_DOWN,(()=>a(!0,!0)),!0));const s={targetElements:[t],dispose:()=>{}};if(void 0===e.placement||"mouse"===e.placement){const e=e=>s.x=e.x+10;i.add(n.nm(t,n.tw.MOUSE_MOVE,e,!0))}i.add(c(e.delay,!1,s)),o=i}),!0);return{show:e=>{a(!1,!0),c(0,e)},hide:()=>{a(!0,!0)},update:e=>h(this,void 0,void 0,(function*(){i=e,yield null==r?void 0:r.update(i)})),dispose:()=>{d.dispose(),a(!0,!0)}}}(this.hoverDelegate,e,t);i&&this.customHovers.set(e,i)}else!function(e,t){(0,c.HD)(t)?e.title=t:(null==t?void 0:t.markdownNotSupportedFallback)?e.title=t.markdownNotSupportedFallback:e.removeAttribute("title")}(e,t);else e.removeAttribute("title")}dispose(){super.dispose();for(const e of this.customHovers.values())e.dispose();this.customHovers.clear()}}class v{constructor(e){this.container=e,this.label=void 0,this.singleLabel=void 0}setLabel(e,t){if(this.label!==e||!(0,g.fS)(this.options,t))if(this.label=e,this.options=t,"string"==typeof e)this.singleLabel||(this.container.innerText="",this.container.classList.remove("multiple"),this.singleLabel=n.R3(this.container,n.$("a.label-name",{id:null==t?void 0:t.domId}))),this.singleLabel.textContent=e;else{this.container.innerText="",this.container.classList.add("multiple"),this.singleLabel=void 0;for(let i=0;i<e.length;i++){const o=e[i],s=(null==t?void 0:t.domId)&&`${null==t?void 0:t.domId}_${i}`;n.R3(this.container,n.$("a.label-name",{id:s,"data-icon-label-count":e.length,"data-icon-label-index":i,role:"treeitem"},o)),i<e.length-1&&n.R3(this.container,n.$("span.label-separator",void 0,(null==t?void 0:t.separator)||"/"))}}}}class _{constructor(e,t){this.container=e,this.supportIcons=t,this.label=void 0,this.singleLabel=void 0}setLabel(e,t){if(this.label!==e||!(0,g.fS)(this.options,t))if(this.label=e,this.options=t,"string"==typeof e)this.singleLabel||(this.container.innerText="",this.container.classList.remove("multiple"),this.singleLabel=new o.q(n.R3(this.container,n.$("a.label-name",{id:null==t?void 0:t.domId})),this.supportIcons)),this.singleLabel.set(e,null==t?void 0:t.matches,void 0,null==t?void 0:t.labelEscapeNewLines);else{this.container.innerText="",this.container.classList.add("multiple"),this.singleLabel=void 0;const i=(null==t?void 0:t.separator)||"/",s=function(e,t,i){if(!i)return;let n=0;return e.map((e=>{const o={start:n,end:n+e.length},s=i.map((e=>p.e.intersect(o,e))).filter((e=>!p.e.isEmpty(e))).map((({start:e,end:t})=>({start:e-n,end:t-n})));return n=o.end+t.length,s}))}(e,i,null==t?void 0:t.matches);for(let r=0;r<e.length;r++){const a=e[r],l=s?s[r]:void 0,c=(null==t?void 0:t.domId)&&`${null==t?void 0:t.domId}_${r}`,d=n.$("a.label-name",{id:c,"data-icon-label-count":e.length,"data-icon-label-index":r,role:"treeitem"});new o.q(n.R3(this.container,d),this.supportIcons).set(a,l,void 0,null==t?void 0:t.labelEscapeNewLines),r<e.length-1&&n.R3(d,n.$("span.label-separator",void 0,i))}}}}},56811:(e,t,i)=>{"use strict";i.d(t,{T:()=>r});var n=i(65321),o=i(73046);const s=new RegExp(`(\\\\)?\\$\\((${o.dT.iconNameExpression}(?:${o.dT.iconModifierExpression})?)\\)`,"g");function r(e){const t=new Array;let i,n=0,o=0;for(;null!==(i=s.exec(e));){o=i.index||0,t.push(e.substring(n,o)),n=(i.index||0)+i[0].length;const[,s,r]=i;t.push(s?`$(${r})`:a({id:r}))}return n<e.length&&t.push(e.substring(n)),t}function a(e){const t=n.$("span");return t.classList.add(...o.dT.asClassNameArray(e)),t}},77927:(e,t,i)=>{"use strict";i.d(t,{p:()=>b,W:()=>_});var n=i(65321),o=i(4850),s=i(48764),r=i(90317),a=i(85152),l=i(9802),c=i(93794),d=i(41264),h=i(4669);class u{constructor(e,t=0,i=e.length,n=t-1){this.items=e,this.start=t,this.end=i,this.index=n}current(){return this.index===this.start-1||this.index===this.end?null:this.items[this.index]}next(){return this.index=Math.min(this.index+1,this.end),this.current()}previous(){return this.index=Math.max(this.index-1,this.start-1),this.current()}first(){return this.index=this.start,this.current()}last(){return this.index=this.end-1,this.current()}}class g{constructor(e=[],t=10){this._initialize(e),this._limit=t,this._onChange()}getHistory(){return this._elements}add(e){this._history.delete(e),this._history.add(e),this._onChange()}next(){return this._currentPosition()!==this._elements.length-1?this._navigator.next():null}previous(){return 0!==this._currentPosition()?this._navigator.previous():null}current(){return this._navigator.current()}first(){return this._navigator.first()}last(){return this._navigator.last()}has(e){return this._history.has(e)}_onChange(){this._reduceToLimit();const e=this._elements;this._navigator=new u(e,0,e.length,e.length)}_reduceToLimit(){const e=this._elements;e.length>this._limit&&this._initialize(e.slice(e.length-this._limit))}_currentPosition(){const e=this._navigator.current();return e?this._elements.indexOf(e):-1}_initialize(e){this._history=new Set;for(const t of e)this._history.add(t)}get _elements(){const e=[];return this._history.forEach((t=>e.push(t))),e}}var p=i(36248),f=(i(58946),i(63580));const m=n.$,v={inputBackground:d.Il.fromHex("#3C3C3C"),inputForeground:d.Il.fromHex("#CCCCCC"),inputValidationInfoBorder:d.Il.fromHex("#55AAFF"),inputValidationInfoBackground:d.Il.fromHex("#063B49"),inputValidationWarningBorder:d.Il.fromHex("#B89500"),inputValidationWarningBackground:d.Il.fromHex("#352A05"),inputValidationErrorBorder:d.Il.fromHex("#BE1100"),inputValidationErrorBackground:d.Il.fromHex("#5A1D1D")};class _ extends c.${constructor(e,t,i){var s;super(),this.state="idle",this.maxHeight=Number.POSITIVE_INFINITY,this._onDidChange=this._register(new h.Q5),this.onDidChange=this._onDidChange.event,this._onDidHeightChange=this._register(new h.Q5),this.onDidHeightChange=this._onDidHeightChange.event,this.contextViewProvider=t,this.options=i||Object.create(null),(0,p.jB)(this.options,v,!1),this.message=null,this.placeholder=this.options.placeholder||"",this.tooltip=null!==(s=this.options.tooltip)&&void 0!==s?s:this.placeholder||"",this.ariaLabel=this.options.ariaLabel||"",this.inputBackground=this.options.inputBackground,this.inputForeground=this.options.inputForeground,this.inputBorder=this.options.inputBorder,this.inputValidationInfoBorder=this.options.inputValidationInfoBorder,this.inputValidationInfoBackground=this.options.inputValidationInfoBackground,this.inputValidationInfoForeground=this.options.inputValidationInfoForeground,this.inputValidationWarningBorder=this.options.inputValidationWarningBorder,this.inputValidationWarningBackground=this.options.inputValidationWarningBackground,this.inputValidationWarningForeground=this.options.inputValidationWarningForeground,this.inputValidationErrorBorder=this.options.inputValidationErrorBorder,this.inputValidationErrorBackground=this.options.inputValidationErrorBackground,this.inputValidationErrorForeground=this.options.inputValidationErrorForeground,this.options.validationOptions&&(this.validation=this.options.validationOptions.validation),this.element=n.R3(e,m(".monaco-inputbox.idle"));let a=this.options.flexibleHeight?"textarea":"input",c=n.R3(this.element,m(".ibwrapper"));if(this.input=n.R3(c,m(a+".input.empty")),this.input.setAttribute("autocorrect","off"),this.input.setAttribute("autocapitalize","off"),this.input.setAttribute("spellcheck","false"),this.onfocus(this.input,(()=>this.element.classList.add("synthetic-focus"))),this.onblur(this.input,(()=>this.element.classList.remove("synthetic-focus"))),this.options.flexibleHeight){this.maxHeight="number"==typeof this.options.flexibleMaxHeight?this.options.flexibleMaxHeight:Number.POSITIVE_INFINITY,this.mirror=n.R3(c,m("div.mirror")),this.mirror.innerText="Â ",this.scrollableElement=new l.NB(this.element,{vertical:1}),this.options.flexibleWidth&&(this.input.setAttribute("wrap","off"),this.mirror.style.whiteSpace="pre",this.mirror.style.wordWrap="initial"),n.R3(e,this.scrollableElement.getDomNode()),this._register(this.scrollableElement),this._register(this.scrollableElement.onScroll((e=>this.input.scrollTop=e.scrollTop)));const t=this._register(new o.Y(document,"selectionchange")),i=h.ju.filter(t.event,(()=>{const e=document.getSelection();return(null==e?void 0:e.anchorNode)===c}));this._register(i(this.updateScrollDimensions,this)),this._register(this.onDidHeightChange(this.updateScrollDimensions,this))}else this.input.type=this.options.type||"text",this.input.setAttribute("wrap","off");this.ariaLabel&&this.input.setAttribute("aria-label",this.ariaLabel),this.placeholder&&!this.options.showPlaceholderOnFocus&&this.setPlaceHolder(this.placeholder),this.tooltip&&this.setTooltip(this.tooltip),this.oninput(this.input,(()=>this.onValueChange())),this.onblur(this.input,(()=>this.onBlur())),this.onfocus(this.input,(()=>this.onFocus())),this.ignoreGesture(this.input),setTimeout((()=>this.updateMirror()),0),this.options.actions&&(this.actionbar=this._register(new r.o(this.element)),this.actionbar.push(this.options.actions,{icon:!0,label:!1})),this.applyStyles()}onBlur(){this._hideMessage(),this.options.showPlaceholderOnFocus&&this.input.setAttribute("placeholder","")}onFocus(){this._showMessage(),this.options.showPlaceholderOnFocus&&this.input.setAttribute("placeholder",this.placeholder||"")}setPlaceHolder(e){this.placeholder=e,this.input.setAttribute("placeholder",e)}setTooltip(e){this.tooltip=e,this.input.title=e}setAriaLabel(e){this.ariaLabel=e,e?this.input.setAttribute("aria-label",this.ariaLabel):this.input.removeAttribute("aria-label")}getAriaLabel(){return this.ariaLabel}get inputElement(){return this.input}get value(){return this.input.value}set value(e){this.input.value!==e&&(this.input.value=e,this.onValueChange())}get height(){return"number"==typeof this.cachedHeight?this.cachedHeight:n.wn(this.element)}focus(){this.input.focus()}blur(){this.input.blur()}hasFocus(){return document.activeElement===this.input}select(e=null){this.input.select(),e&&(this.input.setSelectionRange(e.start,e.end),e.end===this.input.value.length&&(this.input.scrollLeft=this.input.scrollWidth))}isSelectionAtEnd(){return this.input.selectionEnd===this.input.value.length&&this.input.selectionStart===this.input.selectionEnd}enable(){this.input.removeAttribute("disabled")}disable(){this.blur(),this.input.disabled=!0,this._hideMessage()}get width(){return n.w(this.input)}set width(e){if(this.options.flexibleHeight&&this.options.flexibleWidth){let t=0;if(this.mirror){t=(parseFloat(this.mirror.style.paddingLeft||"")||0)+(parseFloat(this.mirror.style.paddingRight||"")||0)}this.input.style.width=e-t+"px"}else this.input.style.width=e+"px";this.mirror&&(this.mirror.style.width=e+"px")}set paddingRight(e){this.options.flexibleHeight&&this.options.flexibleWidth?this.input.style.width=`calc(100% - ${e}px)`:this.input.style.paddingRight=e+"px",this.mirror&&(this.mirror.style.paddingRight=e+"px")}updateScrollDimensions(){if("number"!=typeof this.cachedContentHeight||"number"!=typeof this.cachedHeight||!this.scrollableElement)return;const e=this.cachedContentHeight,t=this.cachedHeight,i=this.input.scrollTop;this.scrollableElement.setScrollDimensions({scrollHeight:e,height:t}),this.scrollableElement.setScrollPosition({scrollTop:i})}showMessage(e,t){this.message=e,this.element.classList.remove("idle"),this.element.classList.remove("info"),this.element.classList.remove("warning"),this.element.classList.remove("error"),this.element.classList.add(this.classForType(e.type));const i=this.stylesForType(this.message.type);this.element.style.border=i.border?`1px solid ${i.border}`:"",(this.hasFocus()||t)&&this._showMessage()}hideMessage(){this.message=null,this.element.classList.remove("info"),this.element.classList.remove("warning"),this.element.classList.remove("error"),this.element.classList.add("idle"),this._hideMessage(),this.applyStyles()}validate(){let e=null;return this.validation&&(e=this.validation(this.value),e?(this.inputElement.setAttribute("aria-invalid","true"),this.showMessage(e)):this.inputElement.hasAttribute("aria-invalid")&&(this.inputElement.removeAttribute("aria-invalid"),this.hideMessage())),null==e?void 0:e.type}stylesForType(e){switch(e){case 1:return{border:this.inputValidationInfoBorder,background:this.inputValidationInfoBackground,foreground:this.inputValidationInfoForeground};case 2:return{border:this.inputValidationWarningBorder,background:this.inputValidationWarningBackground,foreground:this.inputValidationWarningForeground};default:return{border:this.inputValidationErrorBorder,background:this.inputValidationErrorBackground,foreground:this.inputValidationErrorForeground}}}classForType(e){switch(e){case 1:return"info";case 2:return"warning";default:return"error"}}_showMessage(){if(!this.contextViewProvider||!this.message)return;let e,t,i=()=>e.style.width=n.w(this.element)+"px";this.contextViewProvider.showContextView({getAnchor:()=>this.element,anchorAlignment:1,render:t=>{if(!this.message)return null;e=n.R3(t,m(".monaco-inputbox-container")),i();const o={inline:!0,className:"monaco-inputbox-message"},r=this.message.formatContent?(0,s.BO)(this.message.content,o):(0,s.IY)(this.message.content,o);r.classList.add(this.classForType(this.message.type));const a=this.stylesForType(this.message.type);return r.style.backgroundColor=a.background?a.background.toString():"",r.style.color=a.foreground?a.foreground.toString():"",r.style.border=a.border?`1px solid ${a.border}`:"",n.R3(e,r),null},onHide:()=>{this.state="closed"},layout:i}),t=3===this.message.type?f.N("alertErrorMessage","Error: {0}",this.message.content):2===this.message.type?f.N("alertWarningMessage","Warning: {0}",this.message.content):f.N("alertInfoMessage","Info: {0}",this.message.content),a.Z9(t),this.state="open"}_hideMessage(){this.contextViewProvider&&("open"===this.state&&this.contextViewProvider.hideContextView(),this.state="idle")}onValueChange(){this._onDidChange.fire(this.value),this.validate(),this.updateMirror(),this.input.classList.toggle("empty",!this.value),"open"===this.state&&this.contextViewProvider&&this.contextViewProvider.layout()}updateMirror(){if(!this.mirror)return;const e=this.value,t=10===e.charCodeAt(e.length-1)?" ":"";(e+t).replace(/\u000c/g,"")?this.mirror.textContent=e+t:this.mirror.innerText="Â ",this.layout()}style(e){this.inputBackground=e.inputBackground,this.inputForeground=e.inputForeground,this.inputBorder=e.inputBorder,this.inputValidationInfoBackground=e.inputValidationInfoBackground,this.inputValidationInfoForeground=e.inputValidationInfoForeground,this.inputValidationInfoBorder=e.inputValidationInfoBorder,this.inputValidationWarningBackground=e.inputValidationWarningBackground,this.inputValidationWarningForeground=e.inputValidationWarningForeground,this.inputValidationWarningBorder=e.inputValidationWarningBorder,this.inputValidationErrorBackground=e.inputValidationErrorBackground,this.inputValidationErrorForeground=e.inputValidationErrorForeground,this.inputValidationErrorBorder=e.inputValidationErrorBorder,this.applyStyles()}applyStyles(){const e=this.inputBackground?this.inputBackground.toString():"",t=this.inputForeground?this.inputForeground.toString():"",i=this.inputBorder?this.inputBorder.toString():"";this.element.style.backgroundColor=e,this.element.style.color=t,this.input.style.backgroundColor="inherit",this.input.style.color=t,this.element.style.borderWidth=i?"1px":"",this.element.style.borderStyle=i?"solid":"",this.element.style.borderColor=i}layout(){if(!this.mirror)return;const e=this.cachedContentHeight;this.cachedContentHeight=n.wn(this.mirror),e!==this.cachedContentHeight&&(this.cachedHeight=Math.min(this.cachedContentHeight,this.maxHeight),this.input.style.height=this.cachedHeight+"px",this._onDidHeightChange.fire(this.cachedContentHeight))}insertAtCursor(e){const t=this.inputElement,i=t.selectionStart,n=t.selectionEnd,o=t.value;null!==i&&null!==n&&(this.value=o.substr(0,i)+e+o.substr(n),t.setSelectionRange(i+1,i+1),this.layout())}dispose(){this._hideMessage(),this.message=null,this.actionbar&&this.actionbar.dispose(),super.dispose()}}class b extends _{constructor(e,t,i){const n=f.N({key:"history.inputbox.hint",comment:["æ–‡æœ¬å°†ä»¥ â‡… åŠ ä¸Šä¸€ä¸ªç©ºæ ¼ä½œä¸ºå‰ç¼€ï¼Œç„¶åŽç”¨ä½œè¾“å…¥å­—æ®µä¿ç•™åŽ†å²è®°å½•çš„æç¤º"]},"æŸ¥çœ‹åŽ†å²è®°å½•"),o=` or â‡… ${n}`,s=` (â‡… ${n})`;super(e,t,i),this.history=new g(i.history,100);const r=()=>{if(i.showHistoryHint&&i.showHistoryHint()&&!this.placeholder.endsWith(o)&&!this.placeholder.endsWith(s)&&this.history.getHistory().length){const e=this.placeholder.endsWith(")")?o:s,t=this.placeholder+e;i.showPlaceholderOnFocus&&document.activeElement!==this.input?this.placeholder=t:this.setPlaceHolder(t)}};this.observer=new MutationObserver(((e,t)=>{e.forEach((e=>{e.target.textContent||r()}))})),this.observer.observe(this.input,{attributeFilter:["class"]}),this.onfocus(this.input,(()=>r())),this.onblur(this.input,(()=>{const e=e=>{if(this.placeholder.endsWith(e)){const t=this.placeholder.slice(0,this.placeholder.length-e.length);return i.showPlaceholderOnFocus?this.placeholder=t:this.setPlaceHolder(t),!0}return!1};e(s)||e(o)}))}dispose(){super.dispose(),this.observer&&(this.observer.disconnect(),this.observer=void 0)}addToHistory(){this.value&&this.value!==this.getCurrentValue()&&this.history.add(this.value)}showNextValue(){this.history.has(this.value)||this.addToHistory();let e=this.getNextValue();e&&(e=e===this.value?this.getNextValue():e),e&&(this.value=e,a.i7(this.value))}showPreviousValue(){this.history.has(this.value)||this.addToHistory();let e=this.getPreviousValue();e&&(e=e===this.value?this.getPreviousValue():e),e&&(this.value=e,a.i7(this.value))}getCurrentValue(){let e=this.history.current();return e||(e=this.history.last(),this.history.next()),e}getPreviousValue(){return this.history.previous()||this.history.first()}getNextValue(){return this.history.next()||this.history.last()}}},25707:(e,t,i)=>{"use strict";i.d(t,{kX:()=>x,Bv:()=>N});var n=i(16268),o=i(23547),s=i(65321),r=i(4850),a=i(10553),l=i(9802),c=i(9488),d=i(15393),h=i(49898),u=i(4669),g=i(5976),p=i(36248),f=i(61134),m=i(76633);function v(e,t){const i=[];for(let n of t){if(e.start>=n.range.end)continue;if(e.end<n.range.start)break;const t=f.e.intersect(e,n.range);f.e.isEmpty(t)||i.push({range:t,size:n.size})}return i}function _({start:e,end:t},i){return{start:e+i,end:t+i}}class b{constructor(){this.groups=[],this._size=0}splice(e,t,i=[]){const n=i.length-t,o=v({start:0,end:e},this.groups),s=v({start:e+t,end:Number.POSITIVE_INFINITY},this.groups).map((e=>({range:_(e.range,n),size:e.size}))),r=i.map(((t,i)=>({range:{start:e+i,end:e+i+1},size:t.size})));this.groups=function(...e){return function(e){const t=[];let i=null;for(let n of e){const e=n.range.start,o=n.range.end,s=n.size;i&&s===i.size?i.range.end=o:(i={range:{start:e,end:o},size:s},t.push(i))}return t}(e.reduce(((e,t)=>e.concat(t)),[]))}(o,r,s),this._size=this.groups.reduce(((e,t)=>e+t.size*(t.range.end-t.range.start)),0)}get count(){const e=this.groups.length;return e?this.groups[e-1].range.end:0}get size(){return this._size}indexAt(e){if(e<0)return-1;let t=0,i=0;for(let n of this.groups){const o=n.range.end-n.range.start,s=i+o*n.size;if(e<s)return t+Math.floor((e-i)/n.size);t+=o,i=s}return t}indexAfter(e){return Math.min(this.indexAt(e)+1,this.count)}positionAt(e){if(e<0)return-1;let t=0,i=0;for(let n of this.groups){const o=n.range.end-n.range.start,s=i+o;if(e<s)return t+(e-i)*n.size;t+=o*n.size,i=s}return-1}}class w{constructor(e){this.renderers=e,this.cache=new Map}alloc(e){let t=this.getTemplateCache(e).pop();if(!t){const i=(0,s.$)(".monaco-list-row");t={domNode:i,templateId:e,templateData:this.getRenderer(e).renderTemplate(i)}}return t}release(e){e&&this.releaseRow(e)}releaseRow(e){const{domNode:t,templateId:i}=e;t&&(t.classList.remove("scrolling"),function(e){try{e.parentElement&&e.parentElement.removeChild(e)}catch(e){}}(t));this.getTemplateCache(i).push(e)}getTemplateCache(e){let t=this.cache.get(e);return t||(t=[],this.cache.set(e,t)),t}dispose(){this.cache.forEach(((e,t)=>{for(const i of e){this.getRenderer(t).disposeTemplate(i.templateData),i.templateData=null}})),this.cache.clear()}getRenderer(e){const t=this.renderers.get(e);if(!t)throw new Error(`No renderer found for ${e}`);return t}}var y=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r};const C={useShadows:!0,verticalScrollMode:1,setRowLineHeight:!0,setRowHeight:!0,supportDynamicHeights:!1,dnd:{getDragElements:e=>[e],getDragURI:()=>null,onDragStart(){},onDragOver:()=>!1,drop(){}},horizontalScrolling:!1,transformOptimization:!0,alwaysConsumeMouseWheel:!0};class x{constructor(e){this.elements=e}update(){}getData(){return this.elements}}class S{constructor(e){this.elements=e}update(){}getData(){return this.elements}}class k{constructor(){this.types=[],this.files=[]}update(e){if(e.types&&this.types.splice(0,this.types.length,...e.types),e.files){this.files.splice(0,this.files.length);for(let t=0;t<e.files.length;t++){const i=e.files.item(t);i&&(i.size||i.type)&&this.files.push(i)}}}getData(){return{types:this.types,files:this.files}}}class L{constructor(e){(null==e?void 0:e.getSetSize)?this.getSetSize=e.getSetSize.bind(e):this.getSetSize=(e,t,i)=>i,(null==e?void 0:e.getPosInSet)?this.getPosInSet=e.getPosInSet.bind(e):this.getPosInSet=(e,t)=>t+1,(null==e?void 0:e.getRole)?this.getRole=e.getRole.bind(e):this.getRole=e=>"listitem",(null==e?void 0:e.isChecked)?this.isChecked=e.isChecked.bind(e):this.isChecked=e=>{}}}class N{constructor(e,t,i,n=C){if(this.virtualDelegate=t,this.domId="list_id_"+ ++N.InstanceCount,this.renderers=new Map,this.renderWidth=0,this._scrollHeight=0,this.scrollableElementUpdateDisposable=null,this.scrollableElementWidthDelayer=new d.vp(50),this.splicing=!1,this.dragOverAnimationStopDisposable=g.JT.None,this.dragOverMouseY=0,this.canDrop=!1,this.currentDragFeedbackDisposable=g.JT.None,this.onDragLeaveTimeout=g.JT.None,this.disposables=new g.SL,this._onDidChangeContentHeight=new u.Q5,this._horizontalScrolling=!1,n.horizontalScrolling&&n.supportDynamicHeights)throw new Error("Horizontal scrolling and dynamic heights not supported simultaneously");this.items=[],this.itemId=0,this.rangeMap=new b;for(const e of i)this.renderers.set(e.templateId,e);this.cache=this.disposables.add(new w(this.renderers)),this.lastRenderTop=0,this.lastRenderHeight=0,this.domNode=document.createElement("div"),this.domNode.className="monaco-list",this.domNode.classList.add(this.domId),this.domNode.tabIndex=0,this.domNode.classList.toggle("mouse-support","boolean"!=typeof n.mouseSupport||n.mouseSupport),this._horizontalScrolling=(0,p.CJ)(n,(e=>e.horizontalScrolling),C.horizontalScrolling),this.domNode.classList.toggle("horizontal-scrolling",this._horizontalScrolling),this.additionalScrollHeight=void 0===n.additionalScrollHeight?0:n.additionalScrollHeight,this.accessibilityProvider=new L(n.accessibilityProvider),this.rowsContainer=document.createElement("div"),this.rowsContainer.className="monaco-list-rows";(0,p.CJ)(n,(e=>e.transformOptimization),C.transformOptimization)&&(this.rowsContainer.style.transform="translate3d(0px, 0px, 0px)"),this.disposables.add(a.o.addTarget(this.rowsContainer)),this.scrollable=new m.Rm((0,p.CJ)(n,(e=>e.smoothScrolling),!1)?125:0,(e=>(0,s.jL)(e))),this.scrollableElement=this.disposables.add(new l.$Z(this.rowsContainer,{alwaysConsumeMouseWheel:(0,p.CJ)(n,(e=>e.alwaysConsumeMouseWheel),C.alwaysConsumeMouseWheel),horizontal:1,vertical:(0,p.CJ)(n,(e=>e.verticalScrollMode),C.verticalScrollMode),useShadows:(0,p.CJ)(n,(e=>e.useShadows),C.useShadows),mouseWheelScrollSensitivity:n.mouseWheelScrollSensitivity,fastScrollSensitivity:n.fastScrollSensitivity},this.scrollable)),this.domNode.appendChild(this.scrollableElement.getDomNode()),e.appendChild(this.domNode),this.scrollableElement.onScroll(this.onScroll,this,this.disposables),this.disposables.add((0,s.nm)(this.rowsContainer,a.t.Change,(e=>this.onTouchChange(e)))),this.disposables.add((0,s.nm)(this.scrollableElement.getDomNode(),"scroll",(e=>e.target.scrollTop=0))),this.disposables.add((0,s.nm)(this.domNode,"dragover",(e=>this.onDragOver(this.toDragEvent(e))))),this.disposables.add((0,s.nm)(this.domNode,"drop",(e=>this.onDrop(this.toDragEvent(e))))),this.disposables.add((0,s.nm)(this.domNode,"dragleave",(e=>this.onDragLeave(this.toDragEvent(e))))),this.disposables.add((0,s.nm)(this.domNode,"dragend",(e=>this.onDragEnd(e)))),this.setRowLineHeight=(0,p.CJ)(n,(e=>e.setRowLineHeight),C.setRowLineHeight),this.setRowHeight=(0,p.CJ)(n,(e=>e.setRowHeight),C.setRowHeight),this.supportDynamicHeights=(0,p.CJ)(n,(e=>e.supportDynamicHeights),C.supportDynamicHeights),this.dnd=(0,p.CJ)(n,(e=>e.dnd),C.dnd),this.layout()}get contentHeight(){return this.rangeMap.size}get horizontalScrolling(){return this._horizontalScrolling}set horizontalScrolling(e){if(e!==this._horizontalScrolling){if(e&&this.supportDynamicHeights)throw new Error("Horizontal scrolling and dynamic heights not supported simultaneously");if(this._horizontalScrolling=e,this.domNode.classList.toggle("horizontal-scrolling",this._horizontalScrolling),this._horizontalScrolling){for(const e of this.items)this.measureItemWidth(e);this.updateScrollWidth(),this.scrollableElement.setScrollDimensions({width:(0,s.FK)(this.domNode)}),this.rowsContainer.style.width=`${Math.max(this.scrollWidth||0,this.renderWidth)}px`}else this.scrollableElementWidthDelayer.cancel(),this.scrollableElement.setScrollDimensions({width:this.renderWidth,scrollWidth:this.renderWidth}),this.rowsContainer.style.width=""}}updateOptions(e){void 0!==e.additionalScrollHeight&&(this.additionalScrollHeight=e.additionalScrollHeight,this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight})),void 0!==e.smoothScrolling&&this.scrollable.setSmoothScrollDuration(e.smoothScrolling?125:0),void 0!==e.horizontalScrolling&&(this.horizontalScrolling=e.horizontalScrolling),void 0!==e.mouseWheelScrollSensitivity&&this.scrollableElement.updateOptions({mouseWheelScrollSensitivity:e.mouseWheelScrollSensitivity}),void 0!==e.fastScrollSensitivity&&this.scrollableElement.updateOptions({fastScrollSensitivity:e.fastScrollSensitivity})}splice(e,t,i=[]){if(this.splicing)throw new Error("Can't run recursive splices.");this.splicing=!0;try{return this._splice(e,t,i)}finally{this.splicing=!1,this._onDidChangeContentHeight.fire(this.contentHeight)}}_splice(e,t,i=[]){const n=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),o={start:e,end:e+t},s=f.e.intersect(n,o),r=new Map;for(let e=s.start;e<s.end;e++){const t=this.items[e];if(t.dragStartDisposable.dispose(),t.row){let i=r.get(t.templateId);i||(i=[],r.set(t.templateId,i));const n=this.renderers.get(t.templateId);n&&n.disposeElement&&n.disposeElement(t.element,e,t.row.templateData,t.size),i.push(t.row)}t.row=null}const a={start:e+t,end:this.items.length},l=f.e.intersect(a,n),c=f.e.relativeComplement(a,n),d=i.map((e=>({id:String(this.itemId++),element:e,templateId:this.virtualDelegate.getTemplateId(e),size:this.virtualDelegate.getHeight(e),width:void 0,hasDynamicHeight:!!this.virtualDelegate.hasDynamicHeight&&this.virtualDelegate.hasDynamicHeight(e),lastDynamicHeightWidth:void 0,row:null,uri:void 0,dropTarget:!1,dragStartDisposable:g.JT.None})));let h;0===e&&t>=this.items.length?(this.rangeMap=new b,this.rangeMap.splice(0,0,d),h=this.items,this.items=d):(this.rangeMap.splice(e,t,d),h=this.items.splice(e,t,...d));const u=i.length-t,p=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight),m=_(l,u),v=f.e.intersect(p,m);for(let e=v.start;e<v.end;e++)this.updateItemInDOM(this.items[e],e);const w=f.e.relativeComplement(m,p);for(const e of w)for(let t=e.start;t<e.end;t++)this.removeItemFromDOM(t);const y=c.map((e=>_(e,u))),C=[{start:e,end:e+i.length},...y].map((e=>f.e.intersect(p,e))),x=this.getNextToLastElement(C);for(const e of C)for(let t=e.start;t<e.end;t++){const e=this.items[t],i=r.get(e.templateId),n=null==i?void 0:i.pop();this.insertItemInDOM(t,x,n)}for(const e of r.values())for(const t of e)this.cache.release(t);return this.eventuallyUpdateScrollDimensions(),this.supportDynamicHeights&&this._rerender(this.scrollTop,this.renderHeight),h.map((e=>e.element))}eventuallyUpdateScrollDimensions(){this._scrollHeight=this.contentHeight,this.rowsContainer.style.height=`${this._scrollHeight}px`,this.scrollableElementUpdateDisposable||(this.scrollableElementUpdateDisposable=(0,s.jL)((()=>{this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight}),this.updateScrollWidth(),this.scrollableElementUpdateDisposable=null})))}eventuallyUpdateScrollWidth(){this.horizontalScrolling?this.scrollableElementWidthDelayer.trigger((()=>this.updateScrollWidth())):this.scrollableElementWidthDelayer.cancel()}updateScrollWidth(){if(!this.horizontalScrolling)return;let e=0;for(const t of this.items)void 0!==t.width&&(e=Math.max(e,t.width));this.scrollWidth=e,this.scrollableElement.setScrollDimensions({scrollWidth:0===e?0:e+10})}rerender(){if(this.supportDynamicHeights){for(const e of this.items)e.lastDynamicHeightWidth=void 0;this._rerender(this.lastRenderTop,this.lastRenderHeight)}}get length(){return this.items.length}get renderHeight(){return this.scrollableElement.getScrollDimensions().height}element(e){return this.items[e].element}domElement(e){const t=this.items[e].row;return t&&t.domNode}elementHeight(e){return this.items[e].size}elementTop(e){return this.rangeMap.positionAt(e)}indexAt(e){return this.rangeMap.indexAt(e)}indexAfter(e){return this.rangeMap.indexAfter(e)}layout(e,t){let i={height:"number"==typeof e?e:(0,s.If)(this.domNode)};this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,i.scrollHeight=this.scrollHeight),this.scrollableElement.setScrollDimensions(i),void 0!==t&&(this.renderWidth=t,this.supportDynamicHeights&&this._rerender(this.scrollTop,this.renderHeight)),this.horizontalScrolling&&this.scrollableElement.setScrollDimensions({width:"number"==typeof t?t:(0,s.FK)(this.domNode)})}render(e,t,i,n,o,s=!1){const r=this.getRenderRange(t,i),a=f.e.relativeComplement(r,e),l=f.e.relativeComplement(e,r),c=this.getNextToLastElement(a);if(s){const t=f.e.intersect(e,r);for(let e=t.start;e<t.end;e++)this.updateItemInDOM(this.items[e],e)}for(const e of a)for(let t=e.start;t<e.end;t++)this.insertItemInDOM(t,c);for(const e of l)for(let t=e.start;t<e.end;t++)this.removeItemFromDOM(t);void 0!==n&&(this.rowsContainer.style.left=`-${n}px`),this.rowsContainer.style.top=`-${t}px`,this.horizontalScrolling&&void 0!==o&&(this.rowsContainer.style.width=`${Math.max(o,this.renderWidth)}px`),this.lastRenderTop=t,this.lastRenderHeight=i}insertItemInDOM(e,t,i){const n=this.items[e];n.row||(n.row=null!=i?i:this.cache.alloc(n.templateId));const o=this.accessibilityProvider.getRole(n.element)||"listitem";n.row.domNode.setAttribute("role",o);const r=this.accessibilityProvider.isChecked(n.element);void 0!==r&&n.row.domNode.setAttribute("aria-checked",String(!!r)),n.row.domNode.parentElement||(t?this.rowsContainer.insertBefore(n.row.domNode,t):this.rowsContainer.appendChild(n.row.domNode)),this.updateItemInDOM(n,e);const a=this.renderers.get(n.templateId);if(!a)throw new Error(`No renderer found for template id ${n.templateId}`);a&&a.renderElement(n.element,e,n.row.templateData,n.size);const l=this.dnd.getDragURI(n.element);n.dragStartDisposable.dispose(),n.row.domNode.draggable=!!l,l&&(n.dragStartDisposable=(0,s.nm)(n.row.domNode,"dragstart",(e=>this.onDragStart(n.element,l,e)))),this.horizontalScrolling&&(this.measureItemWidth(n),this.eventuallyUpdateScrollWidth())}measureItemWidth(e){if(!e.row||!e.row.domNode)return;e.row.domNode.style.width=n.vU?"-moz-fit-content":"fit-content",e.width=(0,s.FK)(e.row.domNode);const t=window.getComputedStyle(e.row.domNode);t.paddingLeft&&(e.width+=parseFloat(t.paddingLeft)),t.paddingRight&&(e.width+=parseFloat(t.paddingRight)),e.row.domNode.style.width=""}updateItemInDOM(e,t){e.row.domNode.style.top=`${this.elementTop(t)}px`,this.setRowHeight&&(e.row.domNode.style.height=`${e.size}px`),this.setRowLineHeight&&(e.row.domNode.style.lineHeight=`${e.size}px`),e.row.domNode.setAttribute("data-index",`${t}`),e.row.domNode.setAttribute("data-last-element",t===this.length-1?"true":"false"),e.row.domNode.setAttribute("data-parity",t%2==0?"even":"odd"),e.row.domNode.setAttribute("aria-setsize",String(this.accessibilityProvider.getSetSize(e.element,t,this.length))),e.row.domNode.setAttribute("aria-posinset",String(this.accessibilityProvider.getPosInSet(e.element,t))),e.row.domNode.setAttribute("id",this.getElementDomId(t)),e.row.domNode.classList.toggle("drop-target",e.dropTarget)}removeItemFromDOM(e){const t=this.items[e];if(t.dragStartDisposable.dispose(),t.row){const i=this.renderers.get(t.templateId);i&&i.disposeElement&&i.disposeElement(t.element,e,t.row.templateData,t.size),this.cache.release(t.row),t.row=null}this.horizontalScrolling&&this.eventuallyUpdateScrollWidth()}getScrollTop(){return this.scrollableElement.getScrollPosition().scrollTop}setScrollTop(e,t){this.scrollableElementUpdateDisposable&&(this.scrollableElementUpdateDisposable.dispose(),this.scrollableElementUpdateDisposable=null,this.scrollableElement.setScrollDimensions({scrollHeight:this.scrollHeight})),this.scrollableElement.setScrollPosition({scrollTop:e,reuseAnimation:t})}get scrollTop(){return this.getScrollTop()}set scrollTop(e){this.setScrollTop(e)}get scrollHeight(){return this._scrollHeight+(this.horizontalScrolling?10:0)+this.additionalScrollHeight}get onMouseClick(){return u.ju.map(this.disposables.add(new r.Y(this.domNode,"click")).event,(e=>this.toMouseEvent(e)))}get onMouseDblClick(){return u.ju.map(this.disposables.add(new r.Y(this.domNode,"dblclick")).event,(e=>this.toMouseEvent(e)))}get onMouseMiddleClick(){return u.ju.filter(u.ju.map(this.disposables.add(new r.Y(this.domNode,"auxclick")).event,(e=>this.toMouseEvent(e))),(e=>1===e.browserEvent.button))}get onMouseDown(){return u.ju.map(this.disposables.add(new r.Y(this.domNode,"mousedown")).event,(e=>this.toMouseEvent(e)))}get onContextMenu(){return u.ju.any(u.ju.map(this.disposables.add(new r.Y(this.domNode,"contextmenu")).event,(e=>this.toMouseEvent(e))),u.ju.map(this.disposables.add(new r.Y(this.domNode,a.t.Contextmenu)).event,(e=>this.toGestureEvent(e))))}get onTouchStart(){return u.ju.map(this.disposables.add(new r.Y(this.domNode,"touchstart")).event,(e=>this.toTouchEvent(e)))}get onTap(){return u.ju.map(this.disposables.add(new r.Y(this.rowsContainer,a.t.Tap)).event,(e=>this.toGestureEvent(e)))}toMouseEvent(e){const t=this.getItemIndexFromEventTarget(e.target||null),i=void 0===t?void 0:this.items[t];return{browserEvent:e,index:t,element:i&&i.element}}toTouchEvent(e){const t=this.getItemIndexFromEventTarget(e.target||null),i=void 0===t?void 0:this.items[t];return{browserEvent:e,index:t,element:i&&i.element}}toGestureEvent(e){const t=this.getItemIndexFromEventTarget(e.initialTarget||null),i=void 0===t?void 0:this.items[t];return{browserEvent:e,index:t,element:i&&i.element}}toDragEvent(e){const t=this.getItemIndexFromEventTarget(e.target||null),i=void 0===t?void 0:this.items[t];return{browserEvent:e,index:t,element:i&&i.element}}onScroll(e){try{const t=this.getRenderRange(this.lastRenderTop,this.lastRenderHeight);this.render(t,e.scrollTop,e.height,e.scrollLeft,e.scrollWidth),this.supportDynamicHeights&&this._rerender(e.scrollTop,e.height,e.inSmoothScrolling)}catch(t){throw console.error("Got bad scroll event:",e),t}}onTouchChange(e){e.preventDefault(),e.stopPropagation(),this.scrollTop-=e.translationY}onDragStart(e,t,i){if(!i.dataTransfer)return;const n=this.dnd.getDragElements(e);if(i.dataTransfer.effectAllowed="copyMove",i.dataTransfer.setData(o.go.TEXT,t),i.dataTransfer.setDragImage){let e;this.dnd.getDragLabel&&(e=this.dnd.getDragLabel(n,i)),void 0===e&&(e=String(n.length));const t=(0,s.$)(".monaco-drag-image");t.textContent=e,document.body.appendChild(t),i.dataTransfer.setDragImage(t,-10,-10),setTimeout((()=>document.body.removeChild(t)),0)}this.currentDragData=new x(n),o.P$.CurrentDragAndDropData=new S(n),this.dnd.onDragStart&&this.dnd.onDragStart(this.currentDragData,i)}onDragOver(e){if(e.browserEvent.preventDefault(),this.onDragLeaveTimeout.dispose(),o.P$.CurrentDragAndDropData&&"vscode-ui"===o.P$.CurrentDragAndDropData.getData())return!1;if(this.setupDragAndDropScrollTopAnimation(e.browserEvent),!e.browserEvent.dataTransfer)return!1;if(!this.currentDragData)if(o.P$.CurrentDragAndDropData)this.currentDragData=o.P$.CurrentDragAndDropData;else{if(!e.browserEvent.dataTransfer.types)return!1;this.currentDragData=new k}const t=this.dnd.onDragOver(this.currentDragData,e.element,e.index,e.browserEvent);if(this.canDrop="boolean"==typeof t?t:t.accept,!this.canDrop)return this.currentDragFeedback=void 0,this.currentDragFeedbackDisposable.dispose(),!1;let i;if(e.browserEvent.dataTransfer.dropEffect="boolean"!=typeof t&&0===t.effect?"copy":"move",i="boolean"!=typeof t&&t.feedback?t.feedback:void 0===e.index?[-1]:[e.index],i=(0,c.EB)(i).filter((e=>e>=-1&&e<this.length)).sort(((e,t)=>e-t)),i=-1===i[0]?[-1]:i,n=this.currentDragFeedback,s=i,Array.isArray(n)&&Array.isArray(s)?(0,c.fS)(n,s):n===s)return!0;var n,s;if(this.currentDragFeedback=i,this.currentDragFeedbackDisposable.dispose(),-1===i[0])this.domNode.classList.add("drop-target"),this.rowsContainer.classList.add("drop-target"),this.currentDragFeedbackDisposable=(0,g.OF)((()=>{this.domNode.classList.remove("drop-target"),this.rowsContainer.classList.remove("drop-target")}));else{for(const e of i){const t=this.items[e];t.dropTarget=!0,t.row&&t.row.domNode.classList.add("drop-target")}this.currentDragFeedbackDisposable=(0,g.OF)((()=>{for(const e of i){const t=this.items[e];t.dropTarget=!1,t.row&&t.row.domNode.classList.remove("drop-target")}}))}return!0}onDragLeave(e){var t,i;this.onDragLeaveTimeout.dispose(),this.onDragLeaveTimeout=(0,d.Vg)((()=>this.clearDragOverFeedback()),100),this.currentDragData&&(null===(i=(t=this.dnd).onDragLeave)||void 0===i||i.call(t,this.currentDragData,e.element,e.index,e.browserEvent))}onDrop(e){if(!this.canDrop)return;const t=this.currentDragData;this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.currentDragData=void 0,o.P$.CurrentDragAndDropData=void 0,t&&e.browserEvent.dataTransfer&&(e.browserEvent.preventDefault(),t.update(e.browserEvent.dataTransfer),this.dnd.drop(t,e.element,e.index,e.browserEvent))}onDragEnd(e){this.canDrop=!1,this.teardownDragAndDropScrollTopAnimation(),this.clearDragOverFeedback(),this.currentDragData=void 0,o.P$.CurrentDragAndDropData=void 0,this.dnd.onDragEnd&&this.dnd.onDragEnd(e)}clearDragOverFeedback(){this.currentDragFeedback=void 0,this.currentDragFeedbackDisposable.dispose(),this.currentDragFeedbackDisposable=g.JT.None}setupDragAndDropScrollTopAnimation(e){if(!this.dragOverAnimationDisposable){const e=(0,s.xQ)(this.domNode).top;this.dragOverAnimationDisposable=(0,s.jt)(this.animateDragAndDropScrollTop.bind(this,e))}this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationStopDisposable=(0,d.Vg)((()=>{this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)}),1e3),this.dragOverMouseY=e.pageY}animateDragAndDropScrollTop(e){if(void 0===this.dragOverMouseY)return;const t=this.dragOverMouseY-e,i=this.renderHeight-35;t<35?this.scrollTop+=Math.max(-14,Math.floor(.3*(t-35))):t>i&&(this.scrollTop+=Math.min(14,Math.floor(.3*(t-i))))}teardownDragAndDropScrollTopAnimation(){this.dragOverAnimationStopDisposable.dispose(),this.dragOverAnimationDisposable&&(this.dragOverAnimationDisposable.dispose(),this.dragOverAnimationDisposable=void 0)}getItemIndexFromEventTarget(e){const t=this.scrollableElement.getDomNode();let i=e;for(;i instanceof HTMLElement&&i!==this.rowsContainer&&t.contains(i);){const e=i.getAttribute("data-index");if(e){const t=Number(e);if(!isNaN(t))return t}i=i.parentElement}}getRenderRange(e,t){return{start:this.rangeMap.indexAt(e),end:this.rangeMap.indexAfter(e+t-1)}}_rerender(e,t,i){const n=this.getRenderRange(e,t);let o,s;e===this.elementTop(n.start)?(o=n.start,s=0):n.end-n.start>1&&(o=n.start+1,s=this.elementTop(o)-e);let r=0;for(;;){const a=this.getRenderRange(e,t);let l=!1;for(let e=a.start;e<a.end;e++){const t=this.probeDynamicHeight(e);0!==t&&this.rangeMap.splice(e,1,[this.items[e]]),r+=t,l=l||0!==t}if(!l){0!==r&&this.eventuallyUpdateScrollDimensions();const t=f.e.relativeComplement(n,a);for(const e of t)for(let t=e.start;t<e.end;t++)this.items[t].row&&this.removeItemFromDOM(t);const l=f.e.relativeComplement(a,n);for(const e of l)for(let t=e.start;t<e.end;t++){const e=t+1,i=e<this.items.length?this.items[e].row:null,n=i?i.domNode:null;this.insertItemInDOM(t,n)}for(let e=a.start;e<a.end;e++)this.items[e].row&&this.updateItemInDOM(this.items[e],e);if("number"==typeof o){const t=this.scrollable.getFutureScrollPosition().scrollTop-e,n=this.elementTop(o)-s+t;this.setScrollTop(n,i)}return void this._onDidChangeContentHeight.fire(this.contentHeight)}}}probeDynamicHeight(e){const t=this.items[e];if(this.virtualDelegate.getDynamicHeight){const e=this.virtualDelegate.getDynamicHeight(t.element);if(null!==e){const i=t.size;return t.size=e,t.lastDynamicHeightWidth=this.renderWidth,e-i}}if(!t.hasDynamicHeight||t.lastDynamicHeightWidth===this.renderWidth)return 0;if(this.virtualDelegate.hasDynamicHeight&&!this.virtualDelegate.hasDynamicHeight(t.element))return 0;const i=t.size;if(!this.setRowHeight&&t.row){let e=t.row.domNode.offsetHeight;return t.size=e,t.lastDynamicHeightWidth=this.renderWidth,e-i}const n=this.cache.alloc(t.templateId);n.domNode.style.height="",this.rowsContainer.appendChild(n.domNode);const o=this.renderers.get(t.templateId);return o&&(o.renderElement(t.element,e,n.templateData,void 0),o.disposeElement&&o.disposeElement(t.element,e,n.templateData,void 0)),t.size=n.domNode.offsetHeight,this.virtualDelegate.setDynamicHeight&&this.virtualDelegate.setDynamicHeight(t.element,t.size),t.lastDynamicHeightWidth=this.renderWidth,this.rowsContainer.removeChild(n.domNode),this.cache.release(n),t.size-i}getNextToLastElement(e){const t=e[e.length-1];if(!t)return null;const i=this.items[t.end];return i&&i.row?i.row.domNode:null}getElementDomId(e){return`${this.domId}_${e}`}dispose(){if(this.items){for(const e of this.items)if(e.row){const t=this.renderers.get(e.row.templateId);t&&(t.disposeElement&&t.disposeElement(e.element,-1,e.row.templateData,void 0),t.disposeTemplate(e.row.templateData))}this.items=[]}this.domNode&&this.domNode.parentNode&&this.domNode.parentNode.removeChild(this.domNode),(0,g.B9)(this.disposables)}}N.InstanceCount=0,y([h.H],N.prototype,"onMouseClick",null),y([h.H],N.prototype,"onMouseDblClick",null),y([h.H],N.prototype,"onMouseMiddleClick",null),y([h.H],N.prototype,"onMouseDown",null),y([h.H],N.prototype,"onContextMenu",null),y([h.H],N.prototype,"onTouchStart",null),y([h.H],N.prototype,"onTap",null)},43799:(e,t,i)=>{"use strict";i.d(t,{WK:()=>M,wD:()=>V,aV:()=>q,sx:()=>B,cK:()=>I,hD:()=>E,wn:()=>R,Zo:()=>P});var n=i(65321),o=i(4850),s=i(59069),r=i(10553),a=i(85152);class l{constructor(e){this.spliceables=e}splice(e,t,i){this.spliceables.forEach((n=>n.splice(e,t,i)))}}var c=i(9488),d=i(15393),h=i(41264),u=i(49898),g=i(4669),p=i(75392),f=i(5976),m=i(59870),v=i(36248),_=i(1432),b=i(98401);i(60408);class w extends Error{constructor(e,t){super(`ListError [${e}] ${t}`)}}var y,C=i(25707),x=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},S=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class k{constructor(e){this.trait=e,this.renderedElements=[]}get templateId(){return`template:${this.trait.trait}`}renderTemplate(e){return e}renderElement(e,t,i){const n=this.renderedElements.findIndex((e=>e.templateData===i));if(n>=0){const e=this.renderedElements[n];this.trait.unrender(i),e.index=t}else{const e={index:t,templateData:i};this.renderedElements.push(e)}this.trait.renderIndex(t,i)}splice(e,t,i){const n=[];for(const o of this.renderedElements)o.index<e?n.push(o):o.index>=e+t&&n.push({index:o.index+i-t,templateData:o.templateData});this.renderedElements=n}renderIndexes(e){for(const{index:t,templateData:i}of this.renderedElements)e.indexOf(t)>-1&&this.trait.renderIndex(t,i)}disposeTemplate(e){const t=this.renderedElements.findIndex((t=>t.templateData===e));t<0||this.renderedElements.splice(t,1)}}class L{constructor(e){this._trait=e,this.length=0,this.indexes=[],this.sortedIndexes=[],this._onChange=new g.Q5,this.onChange=this._onChange.event}get trait(){return this._trait}get renderer(){return new k(this)}splice(e,t,i){var n;t=Math.max(0,Math.min(t,this.length-e));const o=i.length-t,s=e+t,r=[...this.sortedIndexes.filter((t=>t<e)),...i.map(((t,i)=>t?i+e:-1)).filter((e=>-1!==e)),...this.sortedIndexes.filter((e=>e>=s)).map((e=>e+o))],a=this.length+o;if(this.sortedIndexes.length>0&&0===r.length&&a>0){const t=null!==(n=this.sortedIndexes.find((t=>t>=e)))&&void 0!==n?n:a-1;r.push(Math.min(t,a-1))}this.renderer.splice(e,t,i.length),this._set(r,r),this.length=a}renderIndex(e,t){t.classList.toggle(this._trait,this.contains(e))}unrender(e){e.classList.remove(this._trait)}set(e,t){return this._set(e,[...e].sort(j),t)}_set(e,t,i){const n=this.indexes,o=this.sortedIndexes;this.indexes=e,this.sortedIndexes=t;const s=z(o,e);return this.renderer.renderIndexes(s),this._onChange.fire({indexes:e,browserEvent:i}),n}get(){return this.indexes}contains(e){return(0,c.ry)(this.sortedIndexes,e,j)>=0}dispose(){(0,f.B9)(this._onChange)}}x([u.H],L.prototype,"renderer",null);class N extends L{constructor(e){super("selected"),this.setAriaSelected=e}renderIndex(e,t){super.renderIndex(e,t),this.setAriaSelected&&(this.contains(e)?t.setAttribute("aria-selected","true"):t.setAttribute("aria-selected","false"))}}class D{constructor(e,t,i){this.trait=e,this.view=t,this.identityProvider=i}splice(e,t,i){if(!this.identityProvider)return this.trait.splice(e,t,i.map((()=>!1)));const n=this.trait.get().map((e=>this.identityProvider.getId(this.view.element(e)).toString())),o=i.map((e=>n.indexOf(this.identityProvider.getId(e).toString())>-1));this.trait.splice(e,t,o)}}function I(e){return"INPUT"===e.tagName||"TEXTAREA"===e.tagName}function E(e){return!!e.classList.contains("monaco-editor")||!e.classList.contains("monaco-list")&&(!!e.parentElement&&E(e.parentElement))}class T{constructor(e,t,i){this.list=e,this.view=t,this.disposables=new f.SL,this.multipleSelectionDisposables=new f.SL,this.onKeyDown.filter((e=>3===e.keyCode)).on(this.onEnter,this,this.disposables),this.onKeyDown.filter((e=>16===e.keyCode)).on(this.onUpArrow,this,this.disposables),this.onKeyDown.filter((e=>18===e.keyCode)).on(this.onDownArrow,this,this.disposables),this.onKeyDown.filter((e=>11===e.keyCode)).on(this.onPageUpArrow,this,this.disposables),this.onKeyDown.filter((e=>12===e.keyCode)).on(this.onPageDownArrow,this,this.disposables),this.onKeyDown.filter((e=>9===e.keyCode)).on(this.onEscape,this,this.disposables),!1!==i.multipleSelectionSupport&&this.onKeyDown.filter((e=>(_.dz?e.metaKey:e.ctrlKey)&&31===e.keyCode)).on(this.onCtrlA,this,this.multipleSelectionDisposables)}get onKeyDown(){return g.ju.chain(this.disposables.add(new o.Y(this.view.domNode,"keydown")).event).filter((e=>!I(e.target))).map((e=>new s.y(e)))}updateOptions(e){void 0!==e.multipleSelectionSupport&&(this.multipleSelectionDisposables.clear(),e.multipleSelectionSupport&&this.onKeyDown.filter((e=>(_.dz?e.metaKey:e.ctrlKey)&&31===e.keyCode)).on(this.onCtrlA,this,this.multipleSelectionDisposables))}onEnter(e){e.preventDefault(),e.stopPropagation(),this.list.setSelection(this.list.getFocus(),e.browserEvent)}onUpArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusPrevious(1,!1,e.browserEvent);const t=this.list.getFocus()[0];this.list.setAnchor(t),this.list.reveal(t),this.view.domNode.focus()}onDownArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusNext(1,!1,e.browserEvent);const t=this.list.getFocus()[0];this.list.setAnchor(t),this.list.reveal(t),this.view.domNode.focus()}onPageUpArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusPreviousPage(e.browserEvent);const t=this.list.getFocus()[0];this.list.setAnchor(t),this.list.reveal(t),this.view.domNode.focus()}onPageDownArrow(e){e.preventDefault(),e.stopPropagation(),this.list.focusNextPage(e.browserEvent);const t=this.list.getFocus()[0];this.list.setAnchor(t),this.list.reveal(t),this.view.domNode.focus()}onCtrlA(e){e.preventDefault(),e.stopPropagation(),this.list.setSelection((0,c.w6)(this.list.length),e.browserEvent),this.list.setAnchor(void 0),this.view.domNode.focus()}onEscape(e){this.list.getSelection().length&&(e.preventDefault(),e.stopPropagation(),this.list.setSelection([],e.browserEvent),this.list.setAnchor(void 0),this.view.domNode.focus())}dispose(){this.disposables.dispose(),this.multipleSelectionDisposables.dispose()}}x([u.H],T.prototype,"onKeyDown",null),function(e){e[e.Idle=0]="Idle",e[e.Typing=1]="Typing"}(y||(y={}));const M=new class{mightProducePrintableCharacter(e){return!(e.ctrlKey||e.metaKey||e.altKey)&&(e.keyCode>=31&&e.keyCode<=56||e.keyCode>=21&&e.keyCode<=30||e.keyCode>=93&&e.keyCode<=102||e.keyCode>=80&&e.keyCode<=90)}};class A{constructor(e,t,i,n){this.list=e,this.view=t,this.keyboardNavigationLabelProvider=i,this.delegate=n,this.enabled=!1,this.state=y.Idle,this.automaticKeyboardNavigation=!0,this.triggered=!1,this.previouslyFocused=-1,this.enabledDisposables=new f.SL,this.disposables=new f.SL,this.updateOptions(e.options)}updateOptions(e){void 0===e.enableKeyboardNavigation||!!e.enableKeyboardNavigation?this.enable():this.disable(),void 0!==e.automaticKeyboardNavigation&&(this.automaticKeyboardNavigation=e.automaticKeyboardNavigation)}enable(){if(this.enabled)return;const e=g.ju.chain(this.enabledDisposables.add(new o.Y(this.view.domNode,"keydown")).event).filter((e=>!I(e.target))).filter((()=>this.automaticKeyboardNavigation||this.triggered)).map((e=>new s.y(e))).filter((e=>this.delegate.mightProducePrintableCharacter(e))).forEach((e=>{e.stopPropagation(),e.preventDefault()})).map((e=>e.browserEvent.key)).event,t=g.ju.debounce(e,(()=>null),800);g.ju.reduce(g.ju.any(e,t),((e,t)=>null===t?null:(e||"")+t))(this.onInput,this,this.enabledDisposables),t(this.onClear,this,this.enabledDisposables),this.enabled=!0,this.triggered=!1}disable(){this.enabled&&(this.enabledDisposables.clear(),this.enabled=!1,this.triggered=!1)}onClear(){var e;const t=this.list.getFocus();if(t.length>0&&t[0]===this.previouslyFocused){const i=null===(e=this.list.options.accessibilityProvider)||void 0===e?void 0:e.getAriaLabel(this.list.element(t[0]));i&&(0,a.Z9)(i)}this.previouslyFocused=-1}onInput(e){if(!e)return this.state=y.Idle,void(this.triggered=!1);const t=this.list.getFocus(),i=t.length>0?t[0]:0,n=this.state===y.Idle?1:0;this.state=y.Typing;for(let t=0;t<this.list.length;t++){const o=(i+t+n)%this.list.length,s=this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(this.view.element(o)),r=s&&s.toString();if(void 0===r||(0,p.Ji)(e,r))return this.previouslyFocused=i,this.list.setFocus([o]),void this.list.reveal(o)}}dispose(){this.disable(),this.enabledDisposables.dispose(),this.disposables.dispose()}}class O{constructor(e,t){this.list=e,this.view=t,this.disposables=new f.SL;g.ju.chain(this.disposables.add(new o.Y(t.domNode,"keydown")).event).filter((e=>!I(e.target))).map((e=>new s.y(e))).filter((e=>!(2!==e.keyCode||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey))).on(this.onTab,this,this.disposables)}onTab(e){if(e.target!==this.view.domNode)return;const t=this.list.getFocus();if(0===t.length)return;const i=this.view.domElement(t[0]);if(!i)return;const n=i.querySelector("[tabIndex]");if(!(n&&n instanceof HTMLElement&&-1!==n.tabIndex))return;const o=window.getComputedStyle(n);"hidden"!==o.visibility&&"none"!==o.display&&(e.preventDefault(),e.stopPropagation(),n.focus())}dispose(){this.disposables.dispose()}}function P(e){return _.dz?e.browserEvent.metaKey:e.browserEvent.ctrlKey}function R(e){return e.browserEvent.shiftKey}const F={isSelectionSingleChangeEvent:P,isSelectionRangeChangeEvent:R};class B{constructor(e){this.list=e,this.disposables=new f.SL,this._onPointer=new g.Q5,this.onPointer=this._onPointer.event,!1!==e.options.multipleSelectionSupport&&(this.multipleSelectionController=this.list.options.multipleSelectionController||F),this.mouseSupport=void 0===e.options.mouseSupport||!!e.options.mouseSupport,this.mouseSupport&&(e.onMouseDown(this.onMouseDown,this,this.disposables),e.onContextMenu(this.onContextMenu,this,this.disposables),e.onMouseDblClick(this.onDoubleClick,this,this.disposables),e.onTouchStart(this.onMouseDown,this,this.disposables),this.disposables.add(r.o.addTarget(e.getHTMLElement()))),g.ju.any(e.onMouseClick,e.onMouseMiddleClick,e.onTap)(this.onViewPointer,this,this.disposables)}updateOptions(e){void 0!==e.multipleSelectionSupport&&(this.multipleSelectionController=void 0,e.multipleSelectionSupport&&(this.multipleSelectionController=this.list.options.multipleSelectionController||F))}isSelectionSingleChangeEvent(e){return!!this.multipleSelectionController&&this.multipleSelectionController.isSelectionSingleChangeEvent(e)}isSelectionRangeChangeEvent(e){return!!this.multipleSelectionController&&this.multipleSelectionController.isSelectionRangeChangeEvent(e)}isSelectionChangeEvent(e){return this.isSelectionSingleChangeEvent(e)||this.isSelectionRangeChangeEvent(e)}onMouseDown(e){E(e.browserEvent.target)||document.activeElement!==e.browserEvent.target&&this.list.domFocus()}onContextMenu(e){if(E(e.browserEvent.target))return;const t=void 0===e.index?[]:[e.index];this.list.setFocus(t,e.browserEvent)}onViewPointer(e){if(!this.mouseSupport)return;if(I(e.browserEvent.target)||E(e.browserEvent.target))return;const t=e.index;return void 0===t?(this.list.setFocus([],e.browserEvent),this.list.setSelection([],e.browserEvent),void this.list.setAnchor(void 0)):this.isSelectionRangeChangeEvent(e)||this.isSelectionChangeEvent(e)?this.changeSelection(e):(this.list.setFocus([t],e.browserEvent),this.list.setAnchor(t),(i=e.browserEvent)instanceof MouseEvent&&2===i.button||this.list.setSelection([t],e.browserEvent),void this._onPointer.fire(e));var i}onDoubleClick(e){if(I(e.browserEvent.target)||E(e.browserEvent.target))return;if(this.isSelectionChangeEvent(e))return;const t=this.list.getFocus();this.list.setSelection(t,e.browserEvent)}changeSelection(e){const t=e.index;let i=this.list.getAnchor();if(this.isSelectionRangeChangeEvent(e)){if(void 0===i){const e=this.list.getFocus()[0];i=null!=e?e:t,this.list.setAnchor(i)}const n=Math.min(i,t),o=Math.max(i,t),s=(0,c.w6)(n,o+1),r=this.list.getSelection(),a=function(e,t){const i=e.indexOf(t);if(-1===i)return[];const n=[];let o=i-1;for(;o>=0&&e[o]===t-(i-o);)n.push(e[o--]);n.reverse(),o=i;for(;o<e.length&&e[o]===t+(o-i);)n.push(e[o++]);return n}(z(r,[i]),i);if(0===a.length)return;const l=z(s,function(e,t){const i=[];let n=0,o=0;for(;n<e.length||o<t.length;)if(n>=e.length)i.push(t[o++]);else if(o>=t.length)i.push(e[n++]);else{if(e[n]===t[o]){n++,o++;continue}e[n]<t[o]?i.push(e[n++]):o++}return i}(r,a));this.list.setSelection(l,e.browserEvent),this.list.setFocus([t],e.browserEvent)}else if(this.isSelectionSingleChangeEvent(e)){const i=this.list.getSelection(),n=i.filter((e=>e!==t));this.list.setFocus([t]),this.list.setAnchor(t),i.length===n.length?this.list.setSelection([...n,t],e.browserEvent):this.list.setSelection(n,e.browserEvent)}}dispose(){this.disposables.dispose()}}class V{constructor(e,t){this.styleElement=e,this.selectorSuffix=t}style(e){const t=this.selectorSuffix&&`.${this.selectorSuffix}`,i=[];e.listBackground&&(e.listBackground.isOpaque()?i.push(`.monaco-list${t} .monaco-list-rows { background: ${e.listBackground}; }`):_.dz||console.warn(`List with id '${this.selectorSuffix}' was styled with a non-opaque background color. This will break sub-pixel antialiasing.`)),e.listFocusBackground&&(i.push(`.monaco-list${t}:focus .monaco-list-row.focused { background-color: ${e.listFocusBackground}; }`),i.push(`.monaco-list${t}:focus .monaco-list-row.focused:hover { background-color: ${e.listFocusBackground}; }`)),e.listFocusForeground&&i.push(`.monaco-list${t}:focus .monaco-list-row.focused { color: ${e.listFocusForeground}; }`),e.listActiveSelectionBackground&&(i.push(`.monaco-list${t}:focus .monaco-list-row.selected { background-color: ${e.listActiveSelectionBackground}; }`),i.push(`.monaco-list${t}:focus .monaco-list-row.selected:hover { background-color: ${e.listActiveSelectionBackground}; }`)),e.listActiveSelectionForeground&&i.push(`.monaco-list${t}:focus .monaco-list-row.selected { color: ${e.listActiveSelectionForeground}; }`),e.listActiveSelectionIconForeground&&i.push(`.monaco-list${t}:focus .monaco-list-row.selected .codicon { color: ${e.listActiveSelectionIconForeground}; }`),e.listFocusAndSelectionBackground&&i.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${t}:focus .monaco-list-row.selected.focused { background-color: ${e.listFocusAndSelectionBackground}; }\n\t\t\t`),e.listFocusAndSelectionForeground&&i.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${t}:focus .monaco-list-row.selected.focused { color: ${e.listFocusAndSelectionForeground}; }\n\t\t\t`),e.listInactiveFocusForeground&&(i.push(`.monaco-list${t} .monaco-list-row.focused { color:  ${e.listInactiveFocusForeground}; }`),i.push(`.monaco-list${t} .monaco-list-row.focused:hover { color:  ${e.listInactiveFocusForeground}; }`)),e.listInactiveSelectionIconForeground&&i.push(`.monaco-list${t} .monaco-list-row.focused .codicon { color:  ${e.listInactiveSelectionIconForeground}; }`),e.listInactiveFocusBackground&&(i.push(`.monaco-list${t} .monaco-list-row.focused { background-color:  ${e.listInactiveFocusBackground}; }`),i.push(`.monaco-list${t} .monaco-list-row.focused:hover { background-color:  ${e.listInactiveFocusBackground}; }`)),e.listInactiveSelectionBackground&&(i.push(`.monaco-list${t} .monaco-list-row.selected { background-color:  ${e.listInactiveSelectionBackground}; }`),i.push(`.monaco-list${t} .monaco-list-row.selected:hover { background-color:  ${e.listInactiveSelectionBackground}; }`)),e.listInactiveSelectionForeground&&i.push(`.monaco-list${t} .monaco-list-row.selected { color: ${e.listInactiveSelectionForeground}; }`),e.listHoverBackground&&i.push(`.monaco-list${t}:not(.drop-target) .monaco-list-row:hover:not(.selected):not(.focused) { background-color: ${e.listHoverBackground}; }`),e.listHoverForeground&&i.push(`.monaco-list${t} .monaco-list-row:hover:not(.selected):not(.focused) { color:  ${e.listHoverForeground}; }`),e.listSelectionOutline&&i.push(`.monaco-list${t} .monaco-list-row.selected { outline: 1px dotted ${e.listSelectionOutline}; outline-offset: -1px; }`),e.listFocusOutline&&i.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${t}:focus .monaco-list-row.focused { outline: 1px solid ${e.listFocusOutline}; outline-offset: -1px; }\n\t\t\t`),e.listInactiveFocusOutline&&i.push(`.monaco-list${t} .monaco-list-row.focused { outline: 1px dotted ${e.listInactiveFocusOutline}; outline-offset: -1px; }`),e.listHoverOutline&&i.push(`.monaco-list${t} .monaco-list-row:hover { outline: 1px dashed ${e.listHoverOutline}; outline-offset: -1px; }`),e.listDropBackground&&i.push(`\n\t\t\t\t.monaco-list${t}.drop-target,\n\t\t\t\t.monaco-list${t} .monaco-list-rows.drop-target,\n\t\t\t\t.monaco-list${t} .monaco-list-row.drop-target { background-color: ${e.listDropBackground} !important; color: inherit !important; }\n\t\t\t`),e.listFilterWidgetBackground&&i.push(`.monaco-list-type-filter { background-color: ${e.listFilterWidgetBackground} }`),e.listFilterWidgetOutline&&i.push(`.monaco-list-type-filter { border: 1px solid ${e.listFilterWidgetOutline}; }`),e.listFilterWidgetNoMatchesOutline&&i.push(`.monaco-list-type-filter.no-matches { border: 1px solid ${e.listFilterWidgetNoMatchesOutline}; }`),e.listMatchesShadow&&i.push(`.monaco-list-type-filter { box-shadow: 1px 1px 1px ${e.listMatchesShadow}; }`),e.tableColumnsBorder&&i.push(`\n\t\t\t\t.monaco-table:hover > .monaco-split-view2,\n\t\t\t\t.monaco-table:hover > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: ${e.tableColumnsBorder};\n\t\t\t}`),this.styleElement.textContent=i.join("\n")}}const W={listFocusBackground:h.Il.fromHex("#7FB0D0"),listActiveSelectionBackground:h.Il.fromHex("#0E639C"),listActiveSelectionForeground:h.Il.fromHex("#FFFFFF"),listActiveSelectionIconForeground:h.Il.fromHex("#FFFFFF"),listFocusAndSelectionBackground:h.Il.fromHex("#094771"),listFocusAndSelectionForeground:h.Il.fromHex("#FFFFFF"),listInactiveSelectionBackground:h.Il.fromHex("#3F3F46"),listInactiveSelectionIconForeground:h.Il.fromHex("#FFFFFF"),listHoverBackground:h.Il.fromHex("#2A2D2E"),listDropBackground:h.Il.fromHex("#383B3D"),treeIndentGuidesStroke:h.Il.fromHex("#a9a9a9"),tableColumnsBorder:h.Il.fromHex("#cccccc").transparent(.2)},H={keyboardSupport:!0,mouseSupport:!0,multipleSelectionSupport:!0,dnd:{getDragURI:()=>null,onDragStart(){},onDragOver:()=>!1,drop(){}}};function z(e,t){const i=[];let n=0,o=0;for(;n<e.length||o<t.length;)if(n>=e.length)i.push(t[o++]);else if(o>=t.length)i.push(e[n++]);else{if(e[n]===t[o]){i.push(e[n]),n++,o++;continue}e[n]<t[o]?i.push(e[n++]):i.push(t[o++])}return i}const j=(e,t)=>e-t;class U{constructor(e,t){this._templateId=e,this.renderers=t}get templateId(){return this._templateId}renderTemplate(e){return this.renderers.map((t=>t.renderTemplate(e)))}renderElement(e,t,i,n){let o=0;for(const s of this.renderers)s.renderElement(e,t,i[o++],n)}disposeElement(e,t,i,n){let o=0;for(const s of this.renderers)s.disposeElement&&s.disposeElement(e,t,i[o],n),o+=1}disposeTemplate(e){let t=0;for(const i of this.renderers)i.disposeTemplate(e[t++])}}class ${constructor(e){this.accessibilityProvider=e,this.templateId="a18n"}renderTemplate(e){return e}renderElement(e,t,i){const n=this.accessibilityProvider.getAriaLabel(e);n?i.setAttribute("aria-label",n):i.removeAttribute("aria-label");const o=this.accessibilityProvider.getAriaLevel&&this.accessibilityProvider.getAriaLevel(e);"number"==typeof o?i.setAttribute("aria-level",`${o}`):i.removeAttribute("aria-level")}disposeTemplate(e){}}class K{constructor(e,t){this.list=e,this.dnd=t}getDragElements(e){const t=this.list.getSelectedElements();return t.indexOf(e)>-1?t:[e]}getDragURI(e){return this.dnd.getDragURI(e)}getDragLabel(e,t){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(e,t)}onDragStart(e,t){this.dnd.onDragStart&&this.dnd.onDragStart(e,t)}onDragOver(e,t,i,n){return this.dnd.onDragOver(e,t,i,n)}onDragLeave(e,t,i,n){var o,s;null===(s=(o=this.dnd).onDragLeave)||void 0===s||s.call(o,e,t,i,n)}onDragEnd(e){this.dnd.onDragEnd&&this.dnd.onDragEnd(e)}drop(e,t,i,n){this.dnd.drop(e,t,i,n)}}class q{constructor(e,t,i,o,s=H){var r;this.user=e,this._options=s,this.focus=new L("focused"),this.anchor=new L("anchor"),this.eventBufferer=new g.E7,this._ariaLabel="",this.disposables=new f.SL,this._onDidDispose=new g.Q5,this.onDidDispose=this._onDidDispose.event;const a=this._options.accessibilityProvider&&this._options.accessibilityProvider.getWidgetRole?null===(r=this._options.accessibilityProvider)||void 0===r?void 0:r.getWidgetRole():"list";this.selection=new N("listbox"!==a),(0,v.jB)(s,W,!1);const c=[this.focus.renderer,this.selection.renderer];this.accessibilityProvider=s.accessibilityProvider,this.accessibilityProvider&&(c.push(new $(this.accessibilityProvider)),this.accessibilityProvider.onDidChangeActiveDescendant&&this.accessibilityProvider.onDidChangeActiveDescendant(this.onDidChangeActiveDescendant,this,this.disposables)),o=o.map((e=>new U(e.templateId,[...c,e])));const d=Object.assign(Object.assign({},s),{dnd:s.dnd&&new K(this,s.dnd)});if(this.view=new C.Bv(t,i,o,d),this.view.domNode.setAttribute("role",a),s.styleController)this.styleController=s.styleController(this.view.domId);else{const e=(0,n.dS)(this.view.domNode);this.styleController=new V(e,this.view.domId)}if(this.spliceable=new l([new D(this.focus,this.view,s.identityProvider),new D(this.selection,this.view,s.identityProvider),new D(this.anchor,this.view,s.identityProvider),this.view]),this.disposables.add(this.focus),this.disposables.add(this.selection),this.disposables.add(this.anchor),this.disposables.add(this.view),this.disposables.add(this._onDidDispose),this.disposables.add(new O(this,this.view)),("boolean"!=typeof s.keyboardSupport||s.keyboardSupport)&&(this.keyboardController=new T(this,this.view,s),this.disposables.add(this.keyboardController)),s.keyboardNavigationLabelProvider){const e=s.keyboardNavigationDelegate||M;this.typeLabelController=new A(this,this.view,s.keyboardNavigationLabelProvider,e),this.disposables.add(this.typeLabelController)}this.mouseController=this.createMouseController(s),this.disposables.add(this.mouseController),this.onDidChangeFocus(this._onFocusChange,this,this.disposables),this.onDidChangeSelection(this._onSelectionChange,this,this.disposables),this.accessibilityProvider&&(this.ariaLabel=this.accessibilityProvider.getWidgetAriaLabel()),!1!==this._options.multipleSelectionSupport&&this.view.domNode.setAttribute("aria-multiselectable","true")}get onDidChangeFocus(){return g.ju.map(this.eventBufferer.wrapEvent(this.focus.onChange),(e=>this.toListEvent(e)))}get onDidChangeSelection(){return g.ju.map(this.eventBufferer.wrapEvent(this.selection.onChange),(e=>this.toListEvent(e)))}get domId(){return this.view.domId}get onMouseClick(){return this.view.onMouseClick}get onMouseDblClick(){return this.view.onMouseDblClick}get onMouseMiddleClick(){return this.view.onMouseMiddleClick}get onPointer(){return this.mouseController.onPointer}get onMouseDown(){return this.view.onMouseDown}get onTouchStart(){return this.view.onTouchStart}get onTap(){return this.view.onTap}get onContextMenu(){let e=!1;const t=g.ju.chain(this.disposables.add(new o.Y(this.view.domNode,"keydown")).event).map((e=>new s.y(e))).filter((t=>e=58===t.keyCode||t.shiftKey&&68===t.keyCode)).map(o.p).filter((()=>!1)).event,i=g.ju.chain(this.disposables.add(new o.Y(this.view.domNode,"keyup")).event).forEach((()=>e=!1)).map((e=>new s.y(e))).filter((e=>58===e.keyCode||e.shiftKey&&68===e.keyCode)).map(o.p).map((({browserEvent:e})=>{const t=this.getFocus(),i=t.length?t[0]:void 0;return{index:i,element:void 0!==i?this.view.element(i):void 0,anchor:void 0!==i?this.view.domElement(i):this.view.domNode,browserEvent:e}})).event,n=g.ju.chain(this.view.onContextMenu).filter((t=>!e)).map((({element:e,index:t,browserEvent:i})=>({element:e,index:t,anchor:{x:i.pageX+1,y:i.pageY},browserEvent:i}))).event;return g.ju.any(t,i,n)}get onKeyDown(){return this.disposables.add(new o.Y(this.view.domNode,"keydown")).event}get onDidFocus(){return g.ju.signal(this.disposables.add(new o.Y(this.view.domNode,"focus",!0)).event)}createMouseController(e){return new B(this)}updateOptions(e={}){var t;this._options=Object.assign(Object.assign({},this._options),e),this.typeLabelController&&this.typeLabelController.updateOptions(this._options),void 0!==this._options.multipleSelectionController&&(this._options.multipleSelectionSupport?this.view.domNode.setAttribute("aria-multiselectable","true"):this.view.domNode.removeAttribute("aria-multiselectable")),this.mouseController.updateOptions(e),null===(t=this.keyboardController)||void 0===t||t.updateOptions(e),this.view.updateOptions(e)}get options(){return this._options}splice(e,t,i=[]){if(e<0||e>this.view.length)throw new w(this.user,`Invalid start index: ${e}`);if(t<0)throw new w(this.user,`Invalid delete count: ${t}`);0===t&&0===i.length||this.eventBufferer.bufferEvents((()=>this.spliceable.splice(e,t,i)))}rerender(){this.view.rerender()}element(e){return this.view.element(e)}get length(){return this.view.length}get contentHeight(){return this.view.contentHeight}get scrollTop(){return this.view.getScrollTop()}set scrollTop(e){this.view.setScrollTop(e)}get ariaLabel(){return this._ariaLabel}set ariaLabel(e){this._ariaLabel=e,this.view.domNode.setAttribute("aria-label",e)}domFocus(){this.view.domNode.focus({preventScroll:!0})}layout(e,t){this.view.layout(e,t)}setSelection(e,t){for(const t of e)if(t<0||t>=this.length)throw new w(this.user,`Invalid index ${t}`);this.selection.set(e,t)}getSelection(){return this.selection.get()}getSelectedElements(){return this.getSelection().map((e=>this.view.element(e)))}setAnchor(e){if(void 0!==e){if(e<0||e>=this.length)throw new w(this.user,`Invalid index ${e}`);this.anchor.set([e])}else this.anchor.set([])}getAnchor(){return(0,c.Xh)(this.anchor.get(),void 0)}getAnchorElement(){const e=this.getAnchor();return void 0===e?void 0:this.element(e)}setFocus(e,t){for(const t of e)if(t<0||t>=this.length)throw new w(this.user,`Invalid index ${t}`);this.focus.set(e,t)}focusNext(e=1,t=!1,i,n){if(0===this.length)return;const o=this.focus.get(),s=this.findNextIndex(o.length>0?o[0]+e:0,t,n);s>-1&&this.setFocus([s],i)}focusPrevious(e=1,t=!1,i,n){if(0===this.length)return;const o=this.focus.get(),s=this.findPreviousIndex(o.length>0?o[0]-e:0,t,n);s>-1&&this.setFocus([s],i)}focusNextPage(e,t){return S(this,void 0,void 0,(function*(){let i=this.view.indexAt(this.view.getScrollTop()+this.view.renderHeight);i=0===i?0:i-1;const n=this.view.element(i),o=this.getFocusedElements()[0];if(o!==n){const n=this.findPreviousIndex(i,!1,t);n>-1&&o!==this.view.element(n)?this.setFocus([n],e):this.setFocus([i],e)}else{const n=this.view.getScrollTop();this.view.setScrollTop(n+this.view.renderHeight-this.view.elementHeight(i)),this.view.getScrollTop()!==n&&(this.setFocus([]),yield(0,d.Vs)(0),yield this.focusNextPage(e,t))}}))}focusPreviousPage(e,t){return S(this,void 0,void 0,(function*(){let i;const n=this.view.getScrollTop();i=0===n?this.view.indexAt(n):this.view.indexAfter(n-1);const o=this.view.element(i),s=this.getFocusedElements()[0];if(s!==o){const n=this.findNextIndex(i,!1,t);n>-1&&s!==this.view.element(n)?this.setFocus([n],e):this.setFocus([i],e)}else{const i=n;this.view.setScrollTop(n-this.view.renderHeight),this.view.getScrollTop()!==i&&(this.setFocus([]),yield(0,d.Vs)(0),yield this.focusPreviousPage(e,t))}}))}focusLast(e,t){if(0===this.length)return;const i=this.findPreviousIndex(this.length-1,!1,t);i>-1&&this.setFocus([i],e)}focusFirst(e,t){this.focusNth(0,e,t)}focusNth(e,t,i){if(0===this.length)return;const n=this.findNextIndex(e,!1,i);n>-1&&this.setFocus([n],t)}findNextIndex(e,t=!1,i){for(let n=0;n<this.length;n++){if(e>=this.length&&!t)return-1;if(e%=this.length,!i||i(this.element(e)))return e;e++}return-1}findPreviousIndex(e,t=!1,i){for(let n=0;n<this.length;n++){if(e<0&&!t)return-1;if(e=(this.length+e%this.length)%this.length,!i||i(this.element(e)))return e;e--}return-1}getFocus(){return this.focus.get()}getFocusedElements(){return this.getFocus().map((e=>this.view.element(e)))}reveal(e,t){if(e<0||e>=this.length)throw new w(this.user,`Invalid index ${e}`);const i=this.view.getScrollTop(),n=this.view.elementTop(e),o=this.view.elementHeight(e);if((0,b.hj)(t)){const e=o-this.view.renderHeight;this.view.setScrollTop(e*(0,m.u)(t,0,1)+n)}else{const e=n+o,t=i+this.view.renderHeight;n<i&&e>=t||(n<i||e>=t&&o>=this.view.renderHeight?this.view.setScrollTop(n):e>=t&&this.view.setScrollTop(e-this.view.renderHeight))}}getRelativeTop(e){if(e<0||e>=this.length)throw new w(this.user,`Invalid index ${e}`);const t=this.view.getScrollTop(),i=this.view.elementTop(e),n=this.view.elementHeight(e);if(i<t||i+n>t+this.view.renderHeight)return null;const o=n-this.view.renderHeight;return Math.abs((t-i)/o)}getHTMLElement(){return this.view.domNode}style(e){this.styleController.style(e)}toListEvent({indexes:e,browserEvent:t}){return{indexes:e,elements:e.map((e=>this.view.element(e))),browserEvent:t}}_onFocusChange(){const e=this.focus.get();this.view.domNode.classList.toggle("element-focused",e.length>0),this.onDidChangeActiveDescendant()}onDidChangeActiveDescendant(){var e;const t=this.focus.get();if(t.length>0){let i;(null===(e=this.accessibilityProvider)||void 0===e?void 0:e.getActiveDescendantId)&&(i=this.accessibilityProvider.getActiveDescendantId(this.view.element(t[0]))),this.view.domNode.setAttribute("aria-activedescendant",i||this.view.getElementDomId(t[0]))}else this.view.domNode.removeAttribute("aria-activedescendant")}_onSelectionChange(){const e=this.selection.get();this.view.domNode.classList.toggle("selection-none",0===e.length),this.view.domNode.classList.toggle("selection-single",1===e.length),this.view.domNode.classList.toggle("selection-multiple",e.length>1)}dispose(){this._onDidDispose.fire(),this.disposables.dispose(),this._onDidDispose.dispose()}}x([u.H],q.prototype,"onDidChangeFocus",null),x([u.H],q.prototype,"onDidChangeSelection",null),x([u.H],q.prototype,"onContextMenu",null),x([u.H],q.prototype,"onKeyDown",null),x([u.H],q.prototype,"onDidFocus",null)},96542:(e,t,i)=>{"use strict";i.d(t,{S:()=>n});i(44156);const n="monaco-mouse-cursor-text"},73098:(e,t,i)=>{"use strict";i.d(t,{g:()=>_,l:()=>u});var n=i(65321),o=i(4850),s=i(10553),r=i(15393),a=i(49898),l=i(4669),c=i(5976),d=i(1432),h=(i(44118),function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r});var u;!function(e){e.North="north",e.South="south",e.East="east",e.West="west"}(u||(u={}));const g=new l.Q5;const p=new l.Q5;class f{constructor(){this.disposables=new c.SL}get onPointerMove(){return this.disposables.add(new o.Y(window,"mousemove")).event}get onPointerUp(){return this.disposables.add(new o.Y(window,"mouseup")).event}dispose(){this.disposables.dispose()}}h([a.H],f.prototype,"onPointerMove",null),h([a.H],f.prototype,"onPointerUp",null);class m{constructor(e){this.el=e,this.disposables=new c.SL}get onPointerMove(){return this.disposables.add(new o.Y(this.el,s.t.Change)).event}get onPointerUp(){return this.disposables.add(new o.Y(this.el,s.t.End)).event}dispose(){this.disposables.dispose()}}h([a.H],m.prototype,"onPointerMove",null),h([a.H],m.prototype,"onPointerUp",null);class v{constructor(e){this.factory=e}get onPointerMove(){return this.factory.onPointerMove}get onPointerUp(){return this.factory.onPointerUp}dispose(){}}h([a.H],v.prototype,"onPointerMove",null),h([a.H],v.prototype,"onPointerUp",null);class _ extends c.JT{constructor(e,t,i){super(),this.hoverDelay=300,this.hoverDelayer=this._register(new r.vp(this.hoverDelay)),this._state=3,this._onDidEnablementChange=this._register(new l.Q5),this.onDidEnablementChange=this._onDidEnablementChange.event,this._onDidStart=this._register(new l.Q5),this.onDidStart=this._onDidStart.event,this._onDidChange=this._register(new l.Q5),this.onDidChange=this._onDidChange.event,this._onDidReset=this._register(new l.Q5),this.onDidReset=this._onDidReset.event,this._onDidEnd=this._register(new l.Q5),this.onDidEnd=this._onDidEnd.event,this.linkedSash=void 0,this.orthogonalStartSashDisposables=this._register(new c.SL),this.orthogonalStartDragHandleDisposables=this._register(new c.SL),this.orthogonalEndSashDisposables=this._register(new c.SL),this.orthogonalEndDragHandleDisposables=this._register(new c.SL),this.el=(0,n.R3)(e,(0,n.$)(".monaco-sash")),i.orthogonalEdge&&this.el.classList.add(`orthogonal-edge-${i.orthogonalEdge}`),d.dz&&this.el.classList.add("mac");const a=this._register(new o.Y(this.el,"mousedown")).event;this._register(a((e=>this.onPointerStart(e,new f)),this));const h=this._register(new o.Y(this.el,"dblclick")).event;this._register(h(this.onPointerDoublePress,this));const u=this._register(new o.Y(this.el,"mouseenter")).event;this._register(u((()=>_.onMouseEnter(this))));const v=this._register(new o.Y(this.el,"mouseleave")).event;this._register(v((()=>_.onMouseLeave(this)))),this._register(s.o.addTarget(this.el));const b=l.ju.map(this._register(new o.Y(this.el,s.t.Start)).event,(e=>{var t;return Object.assign(Object.assign({},e),{target:null!==(t=e.initialTarget)&&void 0!==t?t:null})}));this._register(b((e=>this.onPointerStart(e,new m(this.el))),this));const w=this._register(new o.Y(this.el,s.t.Tap)).event,y=l.ju.map(l.ju.filter(l.ju.debounce(w,((e,t)=>{var i;return{event:t,count:(null!==(i=null==e?void 0:e.count)&&void 0!==i?i:0)+1}}),250),(({count:e})=>2===e)),(({event:e})=>{var t;return Object.assign(Object.assign({},e),{target:null!==(t=e.initialTarget)&&void 0!==t?t:null})}));this._register(y(this.onPointerDoublePress,this)),"number"==typeof i.size?(this.size=i.size,0===i.orientation?this.el.style.width=`${this.size}px`:this.el.style.height=`${this.size}px`):(this.size=4,this._register(g.event((e=>{this.size=e,this.layout()})))),this._register(p.event((e=>this.hoverDelay=e))),this.hidden=!1,this.layoutProvider=t,this.orthogonalStartSash=i.orthogonalStartSash,this.orthogonalEndSash=i.orthogonalEndSash,this.orientation=i.orientation||0,1===this.orientation?(this.el.classList.add("horizontal"),this.el.classList.remove("vertical")):(this.el.classList.remove("horizontal"),this.el.classList.add("vertical")),this.el.classList.toggle("debug",false),this.layout()}get state(){return this._state}set state(e){this._state!==e&&(this.el.classList.toggle("disabled",0===e),this.el.classList.toggle("minimum",1===e),this.el.classList.toggle("maximum",2===e),this._state=e,this._onDidEnablementChange.fire(e))}get orthogonalStartSash(){return this._orthogonalStartSash}set orthogonalStartSash(e){if(this.orthogonalStartDragHandleDisposables.clear(),this.orthogonalStartSashDisposables.clear(),e){const t=t=>{this.orthogonalStartDragHandleDisposables.clear(),0!==t&&(this._orthogonalStartDragHandle=(0,n.R3)(this.el,(0,n.$)(".orthogonal-drag-handle.start")),this.orthogonalStartDragHandleDisposables.add((0,c.OF)((()=>this._orthogonalStartDragHandle.remove()))),this.orthogonalStartDragHandleDisposables.add(new o.Y(this._orthogonalStartDragHandle,"mouseenter")).event((()=>_.onMouseEnter(e)),void 0,this.orthogonalStartDragHandleDisposables),this.orthogonalStartDragHandleDisposables.add(new o.Y(this._orthogonalStartDragHandle,"mouseleave")).event((()=>_.onMouseLeave(e)),void 0,this.orthogonalStartDragHandleDisposables))};this.orthogonalStartSashDisposables.add(e.onDidEnablementChange(t,this)),t(e.state)}this._orthogonalStartSash=e}get orthogonalEndSash(){return this._orthogonalEndSash}set orthogonalEndSash(e){if(this.orthogonalEndDragHandleDisposables.clear(),this.orthogonalEndSashDisposables.clear(),e){const t=t=>{this.orthogonalEndDragHandleDisposables.clear(),0!==t&&(this._orthogonalEndDragHandle=(0,n.R3)(this.el,(0,n.$)(".orthogonal-drag-handle.end")),this.orthogonalEndDragHandleDisposables.add((0,c.OF)((()=>this._orthogonalEndDragHandle.remove()))),this.orthogonalEndDragHandleDisposables.add(new o.Y(this._orthogonalEndDragHandle,"mouseenter")).event((()=>_.onMouseEnter(e)),void 0,this.orthogonalEndDragHandleDisposables),this.orthogonalEndDragHandleDisposables.add(new o.Y(this._orthogonalEndDragHandle,"mouseleave")).event((()=>_.onMouseLeave(e)),void 0,this.orthogonalEndDragHandleDisposables))};this.orthogonalEndSashDisposables.add(e.onDidEnablementChange(t,this)),t(e.state)}this._orthogonalEndSash=e}onPointerStart(e,t){n.zB.stop(e);let i=!1;if(!e.__orthogonalSashEvent){const n=this.getOrthogonalSash(e);n&&(i=!0,e.__orthogonalSashEvent=!0,n.onPointerStart(e,new v(t)))}if(this.linkedSash&&!e.__linkedSashEvent&&(e.__linkedSashEvent=!0,this.linkedSash.onPointerStart(e,new v(t))),!this.state)return;const o=(0,n.H$)("iframe");for(const e of o)e.style.pointerEvents="none";const s=e.pageX,r=e.pageY,a=e.altKey,l={startX:s,currentX:s,startY:r,currentY:r,altKey:a};this.el.classList.add("active"),this._onDidStart.fire(l);const h=(0,n.dS)(this.el),u=()=>{let e="";e=i?"all-scroll":1===this.orientation?1===this.state?"s-resize":2===this.state?"n-resize":d.dz?"row-resize":"ns-resize":1===this.state?"e-resize":2===this.state?"w-resize":d.dz?"col-resize":"ew-resize",h.textContent=`* { cursor: ${e} !important; }`},g=new c.SL;u(),i||this.onDidEnablementChange(u,null,g);t.onPointerMove((e=>{n.zB.stop(e,!1);const t={startX:s,currentX:e.pageX,startY:r,currentY:e.pageY,altKey:a};this._onDidChange.fire(t)}),null,g),t.onPointerUp((e=>{n.zB.stop(e,!1),this.el.removeChild(h),this.el.classList.remove("active"),this._onDidEnd.fire(),g.dispose();for(const e of o)e.style.pointerEvents="auto"}),null,g),g.add(t)}onPointerDoublePress(e){const t=this.getOrthogonalSash(e);t&&t._onDidReset.fire(),this.linkedSash&&this.linkedSash._onDidReset.fire(),this._onDidReset.fire()}static onMouseEnter(e,t=!1){e.el.classList.contains("active")?(e.hoverDelayer.cancel(),e.el.classList.add("hover")):e.hoverDelayer.trigger((()=>e.el.classList.add("hover")),e.hoverDelay).then(void 0,(()=>{})),!t&&e.linkedSash&&_.onMouseEnter(e.linkedSash,!0)}static onMouseLeave(e,t=!1){e.hoverDelayer.cancel(),e.el.classList.remove("hover"),!t&&e.linkedSash&&_.onMouseLeave(e.linkedSash,!0)}clearSashHoverState(){_.onMouseLeave(this)}layout(){if(0===this.orientation){const e=this.layoutProvider;this.el.style.left=e.getVerticalSashLeft(this)-this.size/2+"px",e.getVerticalSashTop&&(this.el.style.top=e.getVerticalSashTop(this)+"px"),e.getVerticalSashHeight&&(this.el.style.height=e.getVerticalSashHeight(this)+"px")}else{const e=this.layoutProvider;this.el.style.top=e.getHorizontalSashTop(this)-this.size/2+"px",e.getHorizontalSashLeft&&(this.el.style.left=e.getHorizontalSashLeft(this)+"px"),e.getHorizontalSashWidth&&(this.el.style.width=e.getHorizontalSashWidth(this)+"px")}}hide(){this.hidden=!0,this.el.style.display="none",this.el.setAttribute("aria-hidden","true")}getOrthogonalSash(e){if(e.target&&e.target instanceof HTMLElement)return e.target.classList.contains("orthogonal-drag-handle")?e.target.classList.contains("start")?this.orthogonalStartSash:this.orthogonalEndSash:void 0}dispose(){super.dispose(),this.el.remove()}}},9802:(e,t,i)=>{"use strict";i.d(t,{s$:()=>T,NB:()=>I,$Z:()=>E});var n=i(16268),o=i(65321),s=i(38626),r=i(23938),a=i(57974),l=i(93794),c=i(15393);const d=11;class h extends l.${constructor(e){super(),this._onActivate=e.onActivate,this.bgDomNode=document.createElement("div"),this.bgDomNode.className="arrow-background",this.bgDomNode.style.position="absolute",this.bgDomNode.style.width=e.bgWidth+"px",this.bgDomNode.style.height=e.bgHeight+"px",void 0!==e.top&&(this.bgDomNode.style.top="0px"),void 0!==e.left&&(this.bgDomNode.style.left="0px"),void 0!==e.bottom&&(this.bgDomNode.style.bottom="0px"),void 0!==e.right&&(this.bgDomNode.style.right="0px"),this.domNode=document.createElement("div"),this.domNode.className=e.className,this.domNode.classList.add(...e.icon.classNamesArray),this.domNode.style.position="absolute",this.domNode.style.width="11px",this.domNode.style.height="11px",void 0!==e.top&&(this.domNode.style.top=e.top+"px"),void 0!==e.left&&(this.domNode.style.left=e.left+"px"),void 0!==e.bottom&&(this.domNode.style.bottom=e.bottom+"px"),void 0!==e.right&&(this.domNode.style.right=e.right+"px"),this._mouseMoveMonitor=this._register(new a.Z),this.onmousedown(this.bgDomNode,(e=>this._arrowMouseDown(e))),this.onmousedown(this.domNode,(e=>this._arrowMouseDown(e))),this._mousedownRepeatTimer=this._register(new c.zh),this._mousedownScheduleRepeatTimer=this._register(new c._F)}_arrowMouseDown(e){this._onActivate(),this._mousedownRepeatTimer.cancel(),this._mousedownScheduleRepeatTimer.cancelAndSet((()=>{this._mousedownRepeatTimer.cancelAndSet((()=>this._onActivate()),1e3/24)}),200),this._mouseMoveMonitor.startMonitoring(e.target,e.buttons,a.e,(e=>{}),(()=>{this._mousedownRepeatTimer.cancel(),this._mousedownScheduleRepeatTimer.cancel()})),e.preventDefault()}}var u=i(5976);class g extends u.JT{constructor(e,t,i){super(),this._visibility=e,this._visibleClassName=t,this._invisibleClassName=i,this._domNode=null,this._isVisible=!1,this._isNeeded=!1,this._rawShouldBeVisible=!1,this._shouldBeVisible=!1,this._revealTimer=this._register(new c._F)}setVisibility(e){this._visibility!==e&&(this._visibility=e,this._updateShouldBeVisible())}setShouldBeVisible(e){this._rawShouldBeVisible=e,this._updateShouldBeVisible()}_applyVisibilitySetting(){return 2!==this._visibility&&(3===this._visibility||this._rawShouldBeVisible)}_updateShouldBeVisible(){const e=this._applyVisibilitySetting();this._shouldBeVisible!==e&&(this._shouldBeVisible=e,this.ensureVisibility())}setIsNeeded(e){this._isNeeded!==e&&(this._isNeeded=e,this.ensureVisibility())}setDomNode(e){this._domNode=e,this._domNode.setClassName(this._invisibleClassName),this.setShouldBeVisible(!1)}ensureVisibility(){this._isNeeded?this._shouldBeVisible?this._reveal():this._hide(!0):this._hide(!1)}_reveal(){this._isVisible||(this._isVisible=!0,this._revealTimer.setIfNotSet((()=>{this._domNode&&this._domNode.setClassName(this._visibleClassName)}),0))}_hide(e){this._revealTimer.cancel(),this._isVisible&&(this._isVisible=!1,this._domNode&&this._domNode.setClassName(this._invisibleClassName+(e?" fade":"")))}}var p=i(1432);class f extends l.${constructor(e){super(),this._lazyRender=e.lazyRender,this._host=e.host,this._scrollable=e.scrollable,this._scrollByPage=e.scrollByPage,this._scrollbarState=e.scrollbarState,this._visibilityController=this._register(new g(e.visibility,"visible scrollbar "+e.extraScrollbarClassName,"invisible scrollbar "+e.extraScrollbarClassName)),this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._mouseMoveMonitor=this._register(new a.Z),this._shouldRender=!0,this.domNode=(0,s.X)(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this._visibilityController.setDomNode(this.domNode),this.domNode.setPosition("absolute"),this.onmousedown(this.domNode.domNode,(e=>this._domNodeMouseDown(e)))}_createArrow(e){const t=this._register(new h(e));this.domNode.domNode.appendChild(t.bgDomNode),this.domNode.domNode.appendChild(t.domNode)}_createSlider(e,t,i,n){this.slider=(0,s.X)(document.createElement("div")),this.slider.setClassName("slider"),this.slider.setPosition("absolute"),this.slider.setTop(e),this.slider.setLeft(t),"number"==typeof i&&this.slider.setWidth(i),"number"==typeof n&&this.slider.setHeight(n),this.slider.setLayerHinting(!0),this.slider.setContain("strict"),this.domNode.domNode.appendChild(this.slider.domNode),this.onmousedown(this.slider.domNode,(e=>{e.leftButton&&(e.preventDefault(),this._sliderMouseDown(e,(()=>{})))})),this.onclick(this.slider.domNode,(e=>{e.leftButton&&e.stopPropagation()}))}_onElementSize(e){return this._scrollbarState.setVisibleSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollSize(e){return this._scrollbarState.setScrollSize(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}_onElementScrollPosition(e){return this._scrollbarState.setScrollPosition(e)&&(this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded()),this._shouldRender=!0,this._lazyRender||this.render()),this._shouldRender}beginReveal(){this._visibilityController.setShouldBeVisible(!0)}beginHide(){this._visibilityController.setShouldBeVisible(!1)}render(){this._shouldRender&&(this._shouldRender=!1,this._renderDomNode(this._scrollbarState.getRectangleLargeSize(),this._scrollbarState.getRectangleSmallSize()),this._updateSlider(this._scrollbarState.getSliderSize(),this._scrollbarState.getArrowSize()+this._scrollbarState.getSliderPosition()))}_domNodeMouseDown(e){e.target===this.domNode.domNode&&this._onMouseDown(e)}delegateMouseDown(e){const t=this.domNode.domNode.getClientRects()[0].top,i=t+this._scrollbarState.getSliderPosition(),n=t+this._scrollbarState.getSliderPosition()+this._scrollbarState.getSliderSize(),o=this._sliderMousePosition(e);i<=o&&o<=n?e.leftButton&&(e.preventDefault(),this._sliderMouseDown(e,(()=>{}))):this._onMouseDown(e)}_onMouseDown(e){let t,i;if(e.target===this.domNode.domNode&&"number"==typeof e.browserEvent.offsetX&&"number"==typeof e.browserEvent.offsetY)t=e.browserEvent.offsetX,i=e.browserEvent.offsetY;else{const n=o.i(this.domNode.domNode);t=e.posx-n.left,i=e.posy-n.top}const n=this._mouseDownRelativePosition(t,i);this._setDesiredScrollPositionNow(this._scrollByPage?this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(n):this._scrollbarState.getDesiredScrollPositionFromOffset(n)),e.leftButton&&(e.preventDefault(),this._sliderMouseDown(e,(()=>{})))}_sliderMouseDown(e,t){const i=this._sliderMousePosition(e),n=this._sliderOrthogonalMousePosition(e),o=this._scrollbarState.clone();this.slider.toggleClassName("active",!0),this._mouseMoveMonitor.startMonitoring(e.target,e.buttons,a.e,(e=>{const t=this._sliderOrthogonalMousePosition(e),s=Math.abs(t-n);if(p.ED&&s>140)return void this._setDesiredScrollPositionNow(o.getScrollPosition());const r=this._sliderMousePosition(e)-i;this._setDesiredScrollPositionNow(o.getDesiredScrollPositionFromDelta(r))}),(()=>{this.slider.toggleClassName("active",!1),this._host.onDragEnd(),t()})),this._host.onDragStart()}_setDesiredScrollPositionNow(e){const t={};this.writeScrollPosition(t,e),this._scrollable.setScrollPositionNow(t)}updateScrollbarSize(e){this._updateScrollbarSize(e),this._scrollbarState.setScrollbarSize(e),this._shouldRender=!0,this._lazyRender||this.render()}isNeeded(){return this._scrollbarState.isNeeded()}}class m{constructor(e,t,i,n,o,s){this._scrollbarSize=Math.round(t),this._oppositeScrollbarSize=Math.round(i),this._arrowSize=Math.round(e),this._visibleSize=n,this._scrollSize=o,this._scrollPosition=s,this._computedAvailableSize=0,this._computedIsNeeded=!1,this._computedSliderSize=0,this._computedSliderRatio=0,this._computedSliderPosition=0,this._refreshComputedValues()}clone(){return new m(this._arrowSize,this._scrollbarSize,this._oppositeScrollbarSize,this._visibleSize,this._scrollSize,this._scrollPosition)}setVisibleSize(e){const t=Math.round(e);return this._visibleSize!==t&&(this._visibleSize=t,this._refreshComputedValues(),!0)}setScrollSize(e){const t=Math.round(e);return this._scrollSize!==t&&(this._scrollSize=t,this._refreshComputedValues(),!0)}setScrollPosition(e){const t=Math.round(e);return this._scrollPosition!==t&&(this._scrollPosition=t,this._refreshComputedValues(),!0)}setScrollbarSize(e){this._scrollbarSize=Math.round(e)}setOppositeScrollbarSize(e){this._oppositeScrollbarSize=Math.round(e)}static _computeValues(e,t,i,n,o){const s=Math.max(0,i-e),r=Math.max(0,s-2*t),a=n>0&&n>i;if(!a)return{computedAvailableSize:Math.round(s),computedIsNeeded:a,computedSliderSize:Math.round(r),computedSliderRatio:0,computedSliderPosition:0};const l=Math.round(Math.max(20,Math.floor(i*r/n))),c=(r-l)/(n-i),d=o*c;return{computedAvailableSize:Math.round(s),computedIsNeeded:a,computedSliderSize:Math.round(l),computedSliderRatio:c,computedSliderPosition:Math.round(d)}}_refreshComputedValues(){const e=m._computeValues(this._oppositeScrollbarSize,this._arrowSize,this._visibleSize,this._scrollSize,this._scrollPosition);this._computedAvailableSize=e.computedAvailableSize,this._computedIsNeeded=e.computedIsNeeded,this._computedSliderSize=e.computedSliderSize,this._computedSliderRatio=e.computedSliderRatio,this._computedSliderPosition=e.computedSliderPosition}getArrowSize(){return this._arrowSize}getScrollPosition(){return this._scrollPosition}getRectangleLargeSize(){return this._computedAvailableSize}getRectangleSmallSize(){return this._scrollbarSize}isNeeded(){return this._computedIsNeeded}getSliderSize(){return this._computedSliderSize}getSliderPosition(){return this._computedSliderPosition}getDesiredScrollPositionFromOffset(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize-this._computedSliderSize/2;return Math.round(t/this._computedSliderRatio)}getDesiredScrollPositionFromOffsetPaged(e){if(!this._computedIsNeeded)return 0;const t=e-this._arrowSize;let i=this._scrollPosition;return t<this._computedSliderPosition?i-=this._visibleSize:i+=this._visibleSize,i}getDesiredScrollPositionFromDelta(e){if(!this._computedIsNeeded)return 0;const t=this._computedSliderPosition+e;return Math.round(t/this._computedSliderRatio)}}var v=i(73046);const _=(0,v.CM)("scrollbar-button-left",v.lA.triangleLeft),b=(0,v.CM)("scrollbar-button-right",v.lA.triangleRight);class w extends f{constructor(e,t,i){const n=e.getScrollDimensions(),o=e.getCurrentScrollPosition();if(super({lazyRender:t.lazyRender,host:i,scrollbarState:new m(t.horizontalHasArrows?t.arrowSize:0,2===t.horizontal?0:t.horizontalScrollbarSize,2===t.vertical?0:t.verticalScrollbarSize,n.width,n.scrollWidth,o.scrollLeft),visibility:t.horizontal,extraScrollbarClassName:"horizontal",scrollable:e,scrollByPage:t.scrollByPage}),t.horizontalHasArrows){const e=(t.arrowSize-d)/2,i=(t.horizontalScrollbarSize-d)/2;this._createArrow({className:"scra",icon:_,top:i,left:e,bottom:void 0,right:void 0,bgWidth:t.arrowSize,bgHeight:t.horizontalScrollbarSize,onActivate:()=>this._host.onMouseWheel(new r.q(null,1,0))}),this._createArrow({className:"scra",icon:b,top:i,left:void 0,bottom:void 0,right:e,bgWidth:t.arrowSize,bgHeight:t.horizontalScrollbarSize,onActivate:()=>this._host.onMouseWheel(new r.q(null,-1,0))})}this._createSlider(Math.floor((t.horizontalScrollbarSize-t.horizontalSliderSize)/2),0,void 0,t.horizontalSliderSize)}_updateSlider(e,t){this.slider.setWidth(e),this.slider.setLeft(t)}_renderDomNode(e,t){this.domNode.setWidth(e),this.domNode.setHeight(t),this.domNode.setLeft(0),this.domNode.setBottom(0)}onDidScroll(e){return this._shouldRender=this._onElementScrollSize(e.scrollWidth)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(e.scrollLeft)||this._shouldRender,this._shouldRender=this._onElementSize(e.width)||this._shouldRender,this._shouldRender}_mouseDownRelativePosition(e,t){return e}_sliderMousePosition(e){return e.posx}_sliderOrthogonalMousePosition(e){return e.posy}_updateScrollbarSize(e){this.slider.setHeight(e)}writeScrollPosition(e,t){e.scrollLeft=t}updateOptions(e){this.updateScrollbarSize(2===e.horizontal?0:e.horizontalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._visibilityController.setVisibility(e.horizontal),this._scrollByPage=e.scrollByPage}}const y=(0,v.CM)("scrollbar-button-up",v.lA.triangleUp),C=(0,v.CM)("scrollbar-button-down",v.lA.triangleDown);class x extends f{constructor(e,t,i){const n=e.getScrollDimensions(),o=e.getCurrentScrollPosition();if(super({lazyRender:t.lazyRender,host:i,scrollbarState:new m(t.verticalHasArrows?t.arrowSize:0,2===t.vertical?0:t.verticalScrollbarSize,0,n.height,n.scrollHeight,o.scrollTop),visibility:t.vertical,extraScrollbarClassName:"vertical",scrollable:e,scrollByPage:t.scrollByPage}),t.verticalHasArrows){const e=(t.arrowSize-d)/2,i=(t.verticalScrollbarSize-d)/2;this._createArrow({className:"scra",icon:y,top:e,left:i,bottom:void 0,right:void 0,bgWidth:t.verticalScrollbarSize,bgHeight:t.arrowSize,onActivate:()=>this._host.onMouseWheel(new r.q(null,0,1))}),this._createArrow({className:"scra",icon:C,top:void 0,left:i,bottom:e,right:void 0,bgWidth:t.verticalScrollbarSize,bgHeight:t.arrowSize,onActivate:()=>this._host.onMouseWheel(new r.q(null,0,-1))})}this._createSlider(0,Math.floor((t.verticalScrollbarSize-t.verticalSliderSize)/2),t.verticalSliderSize,void 0)}_updateSlider(e,t){this.slider.setHeight(e),this.slider.setTop(t)}_renderDomNode(e,t){this.domNode.setWidth(t),this.domNode.setHeight(e),this.domNode.setRight(0),this.domNode.setTop(0)}onDidScroll(e){return this._shouldRender=this._onElementScrollSize(e.scrollHeight)||this._shouldRender,this._shouldRender=this._onElementScrollPosition(e.scrollTop)||this._shouldRender,this._shouldRender=this._onElementSize(e.height)||this._shouldRender,this._shouldRender}_mouseDownRelativePosition(e,t){return t}_sliderMousePosition(e){return e.posy}_sliderOrthogonalMousePosition(e){return e.posx}_updateScrollbarSize(e){this.slider.setWidth(e)}writeScrollPosition(e,t){e.scrollTop=t}updateOptions(e){this.updateScrollbarSize(2===e.vertical?0:e.verticalScrollbarSize),this._scrollbarState.setOppositeScrollbarSize(0),this._visibilityController.setVisibility(e.vertical),this._scrollByPage=e.scrollByPage}}var S=i(4669),k=i(76633);i(87101);class L{constructor(e,t,i){this.timestamp=e,this.deltaX=t,this.deltaY=i,this.score=0}}class N{constructor(){this._capacity=5,this._memory=[],this._front=-1,this._rear=-1}isPhysicalMouseWheel(){if(-1===this._front&&-1===this._rear)return!1;let e=1,t=0,i=1,n=this._rear;for(;;){const o=n===this._front?e:Math.pow(2,-i);if(e-=o,t+=this._memory[n].score*o,n===this._front)break;n=(this._capacity+n-1)%this._capacity,i++}return t<=.5}accept(e,t,i){const n=new L(e,t,i);n.score=this._computeScore(n),-1===this._front&&-1===this._rear?(this._memory[0]=n,this._front=0,this._rear=0):(this._rear=(this._rear+1)%this._capacity,this._rear===this._front&&(this._front=(this._front+1)%this._capacity),this._memory[this._rear]=n)}_computeScore(e){if(Math.abs(e.deltaX)>0&&Math.abs(e.deltaY)>0)return 1;let t=.5;-1===this._front&&-1===this._rear||this._memory[this._rear];return this._isAlmostInt(e.deltaX)&&this._isAlmostInt(e.deltaY)||(t+=.25),Math.min(Math.max(t,0),1)}_isAlmostInt(e){return Math.abs(Math.round(e)-e)<.01}}N.INSTANCE=new N;class D extends l.${constructor(e,t,i){super(),this._onScroll=this._register(new S.Q5),this.onScroll=this._onScroll.event,this._onWillScroll=this._register(new S.Q5),e.style.overflow="hidden",this._options=function(e){const t={lazyRender:void 0!==e.lazyRender&&e.lazyRender,className:void 0!==e.className?e.className:"",useShadows:void 0===e.useShadows||e.useShadows,handleMouseWheel:void 0===e.handleMouseWheel||e.handleMouseWheel,flipAxes:void 0!==e.flipAxes&&e.flipAxes,consumeMouseWheelIfScrollbarIsNeeded:void 0!==e.consumeMouseWheelIfScrollbarIsNeeded&&e.consumeMouseWheelIfScrollbarIsNeeded,alwaysConsumeMouseWheel:void 0!==e.alwaysConsumeMouseWheel&&e.alwaysConsumeMouseWheel,scrollYToX:void 0!==e.scrollYToX&&e.scrollYToX,mouseWheelScrollSensitivity:void 0!==e.mouseWheelScrollSensitivity?e.mouseWheelScrollSensitivity:1,fastScrollSensitivity:void 0!==e.fastScrollSensitivity?e.fastScrollSensitivity:5,scrollPredominantAxis:void 0===e.scrollPredominantAxis||e.scrollPredominantAxis,mouseWheelSmoothScroll:void 0===e.mouseWheelSmoothScroll||e.mouseWheelSmoothScroll,arrowSize:void 0!==e.arrowSize?e.arrowSize:11,listenOnDomNode:void 0!==e.listenOnDomNode?e.listenOnDomNode:null,horizontal:void 0!==e.horizontal?e.horizontal:1,horizontalScrollbarSize:void 0!==e.horizontalScrollbarSize?e.horizontalScrollbarSize:10,horizontalSliderSize:void 0!==e.horizontalSliderSize?e.horizontalSliderSize:0,horizontalHasArrows:void 0!==e.horizontalHasArrows&&e.horizontalHasArrows,vertical:void 0!==e.vertical?e.vertical:1,verticalScrollbarSize:void 0!==e.verticalScrollbarSize?e.verticalScrollbarSize:10,verticalHasArrows:void 0!==e.verticalHasArrows&&e.verticalHasArrows,verticalSliderSize:void 0!==e.verticalSliderSize?e.verticalSliderSize:0,scrollByPage:void 0!==e.scrollByPage&&e.scrollByPage};t.horizontalSliderSize=void 0!==e.horizontalSliderSize?e.horizontalSliderSize:t.horizontalScrollbarSize,t.verticalSliderSize=void 0!==e.verticalSliderSize?e.verticalSliderSize:t.verticalScrollbarSize,p.dz&&(t.className+=" mac");return t}(t),this._scrollable=i,this._register(this._scrollable.onScroll((e=>{this._onWillScroll.fire(e),this._onDidScroll(e),this._onScroll.fire(e)})));const n={onMouseWheel:e=>this._onMouseWheel(e),onDragStart:()=>this._onDragStart(),onDragEnd:()=>this._onDragEnd()};this._verticalScrollbar=this._register(new x(this._scrollable,this._options,n)),this._horizontalScrollbar=this._register(new w(this._scrollable,this._options,n)),this._domNode=document.createElement("div"),this._domNode.className="monaco-scrollable-element "+this._options.className,this._domNode.setAttribute("role","presentation"),this._domNode.style.position="relative",this._domNode.style.overflow="hidden",this._domNode.appendChild(e),this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode),this._domNode.appendChild(this._verticalScrollbar.domNode.domNode),this._options.useShadows?(this._leftShadowDomNode=(0,s.X)(document.createElement("div")),this._leftShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._leftShadowDomNode.domNode),this._topShadowDomNode=(0,s.X)(document.createElement("div")),this._topShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._topShadowDomNode.domNode),this._topLeftShadowDomNode=(0,s.X)(document.createElement("div")),this._topLeftShadowDomNode.setClassName("shadow"),this._domNode.appendChild(this._topLeftShadowDomNode.domNode)):(this._leftShadowDomNode=null,this._topShadowDomNode=null,this._topLeftShadowDomNode=null),this._listenOnDomNode=this._options.listenOnDomNode||this._domNode,this._mouseWheelToDispose=[],this._setListeningToMouseWheel(this._options.handleMouseWheel),this.onmouseover(this._listenOnDomNode,(e=>this._onMouseOver(e))),this.onnonbubblingmouseout(this._listenOnDomNode,(e=>this._onMouseOut(e))),this._hideTimeout=this._register(new c._F),this._isDragging=!1,this._mouseIsOver=!1,this._shouldRender=!0,this._revealOnScroll=!0}dispose(){this._mouseWheelToDispose=(0,u.B9)(this._mouseWheelToDispose),super.dispose()}getDomNode(){return this._domNode}getOverviewRulerLayoutInfo(){return{parent:this._domNode,insertBefore:this._verticalScrollbar.domNode.domNode}}delegateVerticalScrollbarMouseDown(e){this._verticalScrollbar.delegateMouseDown(e)}getScrollDimensions(){return this._scrollable.getScrollDimensions()}setScrollDimensions(e){this._scrollable.setScrollDimensions(e,!1)}updateClassName(e){this._options.className=e,p.dz&&(this._options.className+=" mac"),this._domNode.className="monaco-scrollable-element "+this._options.className}updateOptions(e){void 0!==e.handleMouseWheel&&(this._options.handleMouseWheel=e.handleMouseWheel,this._setListeningToMouseWheel(this._options.handleMouseWheel)),void 0!==e.mouseWheelScrollSensitivity&&(this._options.mouseWheelScrollSensitivity=e.mouseWheelScrollSensitivity),void 0!==e.fastScrollSensitivity&&(this._options.fastScrollSensitivity=e.fastScrollSensitivity),void 0!==e.scrollPredominantAxis&&(this._options.scrollPredominantAxis=e.scrollPredominantAxis),void 0!==e.horizontal&&(this._options.horizontal=e.horizontal),void 0!==e.vertical&&(this._options.vertical=e.vertical),void 0!==e.horizontalScrollbarSize&&(this._options.horizontalScrollbarSize=e.horizontalScrollbarSize),void 0!==e.verticalScrollbarSize&&(this._options.verticalScrollbarSize=e.verticalScrollbarSize),void 0!==e.scrollByPage&&(this._options.scrollByPage=e.scrollByPage),this._horizontalScrollbar.updateOptions(this._options),this._verticalScrollbar.updateOptions(this._options),this._options.lazyRender||this._render()}_setListeningToMouseWheel(e){if(this._mouseWheelToDispose.length>0!==e&&(this._mouseWheelToDispose=(0,u.B9)(this._mouseWheelToDispose),e)){const e=e=>{this._onMouseWheel(new r.q(e))};this._mouseWheelToDispose.push(o.nm(this._listenOnDomNode,o.tw.MOUSE_WHEEL,e,{passive:!1}))}}_onMouseWheel(e){const t=N.INSTANCE;{const i=window.devicePixelRatio/(0,n.ie)();p.ED||p.IJ?t.accept(Date.now(),e.deltaX/i,e.deltaY/i):t.accept(Date.now(),e.deltaX,e.deltaY)}let i=!1;if(e.deltaY||e.deltaX){let n=e.deltaY*this._options.mouseWheelScrollSensitivity,o=e.deltaX*this._options.mouseWheelScrollSensitivity;this._options.scrollPredominantAxis&&(Math.abs(n)>=Math.abs(o)?o=0:n=0),this._options.flipAxes&&([n,o]=[o,n]);const s=!p.dz&&e.browserEvent&&e.browserEvent.shiftKey;!this._options.scrollYToX&&!s||o||(o=n,n=0),e.browserEvent&&e.browserEvent.altKey&&(o*=this._options.fastScrollSensitivity,n*=this._options.fastScrollSensitivity);const r=this._scrollable.getFutureScrollPosition();let a={};if(n){const e=50*n,t=r.scrollTop-(e<0?Math.floor(e):Math.ceil(e));this._verticalScrollbar.writeScrollPosition(a,t)}if(o){const e=50*o,t=r.scrollLeft-(e<0?Math.floor(e):Math.ceil(e));this._horizontalScrollbar.writeScrollPosition(a,t)}if(a=this._scrollable.validateScrollPosition(a),r.scrollLeft!==a.scrollLeft||r.scrollTop!==a.scrollTop){this._options.mouseWheelSmoothScroll&&t.isPhysicalMouseWheel()?this._scrollable.setScrollPositionSmooth(a):this._scrollable.setScrollPositionNow(a),i=!0}}let o=i;!o&&this._options.alwaysConsumeMouseWheel&&(o=!0),!o&&this._options.consumeMouseWheelIfScrollbarIsNeeded&&(this._verticalScrollbar.isNeeded()||this._horizontalScrollbar.isNeeded())&&(o=!0),o&&(e.preventDefault(),e.stopPropagation())}_onDidScroll(e){this._shouldRender=this._horizontalScrollbar.onDidScroll(e)||this._shouldRender,this._shouldRender=this._verticalScrollbar.onDidScroll(e)||this._shouldRender,this._options.useShadows&&(this._shouldRender=!0),this._revealOnScroll&&this._reveal(),this._options.lazyRender||this._render()}renderNow(){if(!this._options.lazyRender)throw new Error("Please use `lazyRender` together with `renderNow`!");this._render()}_render(){if(this._shouldRender&&(this._shouldRender=!1,this._horizontalScrollbar.render(),this._verticalScrollbar.render(),this._options.useShadows)){const e=this._scrollable.getCurrentScrollPosition(),t=e.scrollTop>0,i=e.scrollLeft>0,n=i?" left":"",o=t?" top":"",s=i||t?" top-left-corner":"";this._leftShadowDomNode.setClassName(`shadow${n}`),this._topShadowDomNode.setClassName(`shadow${o}`),this._topLeftShadowDomNode.setClassName(`shadow${s}${o}${n}`)}}_onDragStart(){this._isDragging=!0,this._reveal()}_onDragEnd(){this._isDragging=!1,this._hide()}_onMouseOut(e){this._mouseIsOver=!1,this._hide()}_onMouseOver(e){this._mouseIsOver=!0,this._reveal()}_reveal(){this._verticalScrollbar.beginReveal(),this._horizontalScrollbar.beginReveal(),this._scheduleHide()}_hide(){this._mouseIsOver||this._isDragging||(this._verticalScrollbar.beginHide(),this._horizontalScrollbar.beginHide())}_scheduleHide(){this._mouseIsOver||this._isDragging||this._hideTimeout.cancelAndSet((()=>this._hide()),500)}}class I extends D{constructor(e,t){(t=t||{}).mouseWheelSmoothScroll=!1;const i=new k.Rm(0,(e=>o.jL(e)));super(e,t,i),this._register(i)}setScrollPosition(e){this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}}class E extends D{constructor(e,t,i){super(e,t,i)}setScrollPosition(e){e.reuseAnimation?this._scrollable.setScrollPositionSmooth(e,e.reuseAnimation):this._scrollable.setScrollPositionNow(e)}getScrollPosition(){return this._scrollable.getCurrentScrollPosition()}}class T extends I{constructor(e,t){super(e,t),this._element=e,this.onScroll((e=>{e.scrollTopChanged&&(this._element.scrollTop=e.scrollTop),e.scrollLeftChanged&&(this._element.scrollLeft=e.scrollLeft)})),this.scanDomNode()}scanDomNode(){this.setScrollDimensions({width:this._element.clientWidth,scrollWidth:this._element.scrollWidth,height:this._element.clientHeight,scrollHeight:this._element.scrollHeight}),this.setScrollPosition({scrollLeft:this._element.scrollLeft,scrollTop:this._element.scrollTop})}}},23937:(e,t,i)=>{"use strict";i.d(t,{M:()=>_,z:()=>b});var n=i(65321),o=i(73098),s=i(9802),r=i(9488),a=i(41264),l=i(4669),c=i(5976),d=i(59870),h=i(76633),u=i(98401);i(62466);const g={separatorBorder:a.Il.transparent};class p{constructor(e,t,i,n){this.container=e,this.view=t,this.disposable=n,this._cachedVisibleSize=void 0,"number"==typeof i?(this._size=i,this._cachedVisibleSize=void 0,e.classList.add("visible")):(this._size=0,this._cachedVisibleSize=i.cachedVisibleSize)}set size(e){this._size=e}get size(){return this._size}get visible(){return void 0===this._cachedVisibleSize}setVisible(e,t){e!==this.visible&&(e?(this.size=(0,d.u)(this._cachedVisibleSize,this.viewMinimumSize,this.viewMaximumSize),this._cachedVisibleSize=void 0):(this._cachedVisibleSize="number"==typeof t?t:this.size,this.size=0),this.container.classList.toggle("visible",e),this.view.setVisible&&this.view.setVisible(e))}get minimumSize(){return this.visible?this.view.minimumSize:0}get viewMinimumSize(){return this.view.minimumSize}get maximumSize(){return this.visible?this.view.maximumSize:0}get viewMaximumSize(){return this.view.maximumSize}get priority(){return this.view.priority}get snap(){return!!this.view.snap}set enabled(e){this.container.style.pointerEvents=e?"":"none"}layout(e,t){this.layoutContainer(e),this.view.layout(this.size,e,t)}dispose(){return this.disposable.dispose(),this.view}}class f extends p{layoutContainer(e){this.container.style.top=`${e}px`,this.container.style.height=`${this.size}px`}}class m extends p{layoutContainer(e){this.container.style.left=`${e}px`,this.container.style.width=`${this.size}px`}}var v,_;!function(e){e[e.Idle=0]="Idle",e[e.Busy=1]="Busy"}(v||(v={})),function(e){e.Distribute={type:"distribute"},e.Split=function(e){return{type:"split",index:e}},e.Invisible=function(e){return{type:"invisible",cachedVisibleSize:e}}}(_||(_={}));class b extends c.JT{constructor(e,t={}){var i,o;super(),this.size=0,this.contentSize=0,this.proportions=void 0,this.viewItems=[],this.sashItems=[],this.state=v.Idle,this._onDidSashChange=this._register(new l.Q5),this.onDidSashChange=this._onDidSashChange.event,this._onDidSashReset=this._register(new l.Q5),this._startSnappingEnabled=!0,this._endSnappingEnabled=!0,this.orientation=u.o8(t.orientation)?0:t.orientation,this.inverseAltBehavior=!!t.inverseAltBehavior,this.proportionalLayout=!!u.o8(t.proportionalLayout)||!!t.proportionalLayout,this.getSashOrthogonalSize=t.getSashOrthogonalSize,this.el=document.createElement("div"),this.el.classList.add("monaco-split-view2"),this.el.classList.add(0===this.orientation?"vertical":"horizontal"),e.appendChild(this.el),this.sashContainer=(0,n.R3)(this.el,(0,n.$)(".sash-container")),this.viewContainer=(0,n.$)(".split-view-container"),this.scrollable=new h.Rm(125,n.jL),this.scrollableElement=this._register(new s.$Z(this.viewContainer,{vertical:0===this.orientation?null!==(i=t.scrollbarVisibility)&&void 0!==i?i:1:2,horizontal:1===this.orientation?null!==(o=t.scrollbarVisibility)&&void 0!==o?o:1:2},this.scrollable)),this.onDidScroll=this.scrollableElement.onScroll,this._register(this.onDidScroll((e=>{this.viewContainer.scrollTop=e.scrollTop,this.viewContainer.scrollLeft=e.scrollLeft}))),(0,n.R3)(this.el,this.scrollableElement.getDomNode()),this.style(t.styles||g),t.descriptor&&(this.size=t.descriptor.size,t.descriptor.views.forEach(((e,t)=>{const i=u.o8(e.visible)||e.visible?e.size:{type:"invisible",cachedVisibleSize:e.size},n=e.view;this.doAddView(n,i,t,!0)})),this.contentSize=this.viewItems.reduce(((e,t)=>e+t.size),0),this.saveProportions())}get orthogonalStartSash(){return this._orthogonalStartSash}set orthogonalStartSash(e){for(const t of this.sashItems)t.sash.orthogonalStartSash=e;this._orthogonalStartSash=e}get orthogonalEndSash(){return this._orthogonalEndSash}set orthogonalEndSash(e){for(const t of this.sashItems)t.sash.orthogonalEndSash=e;this._orthogonalEndSash=e}get startSnappingEnabled(){return this._startSnappingEnabled}set startSnappingEnabled(e){this._startSnappingEnabled!==e&&(this._startSnappingEnabled=e,this.updateSashEnablement())}get endSnappingEnabled(){return this._endSnappingEnabled}set endSnappingEnabled(e){this._endSnappingEnabled!==e&&(this._endSnappingEnabled=e,this.updateSashEnablement())}style(e){e.separatorBorder.isTransparent()?(this.el.classList.remove("separator-border"),this.el.style.removeProperty("--separator-border")):(this.el.classList.add("separator-border"),this.el.style.setProperty("--separator-border",e.separatorBorder.toString()))}addView(e,t,i=this.viewItems.length,n){this.doAddView(e,t,i,n)}layout(e,t){const i=Math.max(this.size,this.contentSize);if(this.size=e,this.layoutContext=t,this.proportions)for(let t=0;t<this.viewItems.length;t++){const i=this.viewItems[t];i.size=(0,d.u)(Math.round(this.proportions[t]*e),i.minimumSize,i.maximumSize)}else{const t=(0,r.w6)(this.viewItems.length),n=t.filter((e=>1===this.viewItems[e].priority)),o=t.filter((e=>2===this.viewItems[e].priority));this.resize(this.viewItems.length-1,e-i,void 0,n,o)}this.distributeEmptySpace(),this.layoutViews()}saveProportions(){this.proportionalLayout&&this.contentSize>0&&(this.proportions=this.viewItems.map((e=>e.size/this.contentSize)))}onSashStart({sash:e,start:t,alt:i}){for(const e of this.viewItems)e.enabled=!1;const o=this.sashItems.findIndex((t=>t.sash===e)),s=(0,c.F8)((0,n.nm)(document.body,"keydown",(e=>a(this.sashDragState.current,e.altKey))),(0,n.nm)(document.body,"keyup",(()=>a(this.sashDragState.current,!1)))),a=(e,t)=>{const i=this.viewItems.map((e=>e.size));let n,a,l=Number.NEGATIVE_INFINITY,c=Number.POSITIVE_INFINITY;if(this.inverseAltBehavior&&(t=!t),t){if(o===this.sashItems.length-1){const e=this.viewItems[o];l=(e.minimumSize-e.size)/2,c=(e.maximumSize-e.size)/2}else{const e=this.viewItems[o+1];l=(e.size-e.maximumSize)/2,c=(e.size-e.minimumSize)/2}}if(!t){const e=(0,r.w6)(o,-1),t=(0,r.w6)(o+1,this.viewItems.length),s=e.reduce(((e,t)=>e+(this.viewItems[t].minimumSize-i[t])),0),l=e.reduce(((e,t)=>e+(this.viewItems[t].viewMaximumSize-i[t])),0),c=0===t.length?Number.POSITIVE_INFINITY:t.reduce(((e,t)=>e+(i[t]-this.viewItems[t].minimumSize)),0),d=0===t.length?Number.NEGATIVE_INFINITY:t.reduce(((e,t)=>e+(i[t]-this.viewItems[t].viewMaximumSize)),0),h=Math.max(s,d),u=Math.min(c,l),g=this.findFirstSnapIndex(e),p=this.findFirstSnapIndex(t);if("number"==typeof g){const e=this.viewItems[g],t=Math.floor(e.viewMinimumSize/2);n={index:g,limitDelta:e.visible?h-t:h+t,size:e.size}}if("number"==typeof p){const e=this.viewItems[p],t=Math.floor(e.viewMinimumSize/2);a={index:p,limitDelta:e.visible?u+t:u-t,size:e.size}}}this.sashDragState={start:e,current:e,index:o,sizes:i,minDelta:l,maxDelta:c,alt:t,snapBefore:n,snapAfter:a,disposable:s}};a(t,i)}onSashChange({current:e}){const{index:t,start:i,sizes:n,alt:o,minDelta:s,maxDelta:r,snapBefore:a,snapAfter:l}=this.sashDragState;this.sashDragState.current=e;const c=e-i,d=this.resize(t,c,n,void 0,void 0,s,r,a,l);if(o){const e=t===this.sashItems.length-1,i=this.viewItems.map((e=>e.size)),n=e?t:t+1,o=this.viewItems[n],s=o.size-o.maximumSize,r=o.size-o.minimumSize,a=e?t-1:t+1;this.resize(a,-d,i,void 0,void 0,s,r)}this.distributeEmptySpace(),this.layoutViews()}onSashEnd(e){this._onDidSashChange.fire(e),this.sashDragState.disposable.dispose(),this.saveProportions();for(const e of this.viewItems)e.enabled=!0}onViewChange(e,t){const i=this.viewItems.indexOf(e);i<0||i>=this.viewItems.length||(t="number"==typeof t?t:e.size,t=(0,d.u)(t,e.minimumSize,e.maximumSize),this.inverseAltBehavior&&i>0?(this.resize(i-1,Math.floor((e.size-t)/2)),this.distributeEmptySpace(),this.layoutViews()):(e.size=t,this.relayout([i],void 0)))}resizeView(e,t){if(this.state!==v.Idle)throw new Error("Cant modify splitview");if(this.state=v.Busy,e<0||e>=this.viewItems.length)return;const i=(0,r.w6)(this.viewItems.length).filter((t=>t!==e)),n=[...i.filter((e=>1===this.viewItems[e].priority)),e],o=i.filter((e=>2===this.viewItems[e].priority)),s=this.viewItems[e];t=Math.round(t),t=(0,d.u)(t,s.minimumSize,Math.min(s.maximumSize,this.size)),s.size=t,this.relayout(n,o),this.state=v.Idle}distributeViewSizes(){const e=[];let t=0;for(const i of this.viewItems)i.maximumSize-i.minimumSize>0&&(e.push(i),t+=i.size);const i=Math.floor(t/e.length);for(const t of e)t.size=(0,d.u)(i,t.minimumSize,t.maximumSize);const n=(0,r.w6)(this.viewItems.length),o=n.filter((e=>1===this.viewItems[e].priority)),s=n.filter((e=>2===this.viewItems[e].priority));this.relayout(o,s)}getViewSize(e){return e<0||e>=this.viewItems.length?-1:this.viewItems[e].size}doAddView(e,t,i=this.viewItems.length,s){if(this.state!==v.Idle)throw new Error("Cant modify splitview");this.state=v.Busy;const a=(0,n.$)(".split-view-view");i===this.viewItems.length?this.viewContainer.appendChild(a):this.viewContainer.insertBefore(a,this.viewContainer.children.item(i));const d=e.onDidChange((e=>this.onViewChange(p,e))),h=(0,c.OF)((()=>this.viewContainer.removeChild(a))),u=(0,c.F8)(d,h);let g;g="number"==typeof t?t:"split"===t.type?this.getViewSize(t.index)/2:"invisible"===t.type?{cachedVisibleSize:t.cachedVisibleSize}:e.minimumSize;const p=0===this.orientation?new f(a,e,g,u):new m(a,e,g,u);if(this.viewItems.splice(i,0,p),this.viewItems.length>1){let e={orthogonalStartSash:this.orthogonalStartSash,orthogonalEndSash:this.orthogonalEndSash};const t=0===this.orientation?new o.g(this.sashContainer,{getHorizontalSashTop:e=>this.getSashPosition(e),getHorizontalSashWidth:this.getSashOrthogonalSize},Object.assign(Object.assign({},e),{orientation:1})):new o.g(this.sashContainer,{getVerticalSashLeft:e=>this.getSashPosition(e),getVerticalSashHeight:this.getSashOrthogonalSize},Object.assign(Object.assign({},e),{orientation:0})),n=0===this.orientation?e=>({sash:t,start:e.startY,current:e.currentY,alt:e.altKey}):e=>({sash:t,start:e.startX,current:e.currentX,alt:e.altKey}),s=l.ju.map(t.onDidStart,n)(this.onSashStart,this),a=l.ju.map(t.onDidChange,n)(this.onSashChange,this),d=l.ju.map(t.onDidEnd,(()=>this.sashItems.findIndex((e=>e.sash===t)))),h=d(this.onSashEnd,this),u=t.onDidReset((()=>{const e=this.sashItems.findIndex((e=>e.sash===t)),i=(0,r.w6)(e,-1),n=(0,r.w6)(e+1,this.viewItems.length),o=this.findFirstSnapIndex(i),s=this.findFirstSnapIndex(n);("number"!=typeof o||this.viewItems[o].visible)&&("number"!=typeof s||this.viewItems[s].visible)&&this._onDidSashReset.fire(e)})),g=(0,c.F8)(s,a,h,u,t),p={sash:t,disposable:g};this.sashItems.splice(i-1,0,p)}let _;a.appendChild(e.element),"number"!=typeof t&&"split"===t.type&&(_=[t.index]),s||this.relayout([i],_),this.state=v.Idle,s||"number"==typeof t||"distribute"!==t.type||this.distributeViewSizes()}relayout(e,t){const i=this.viewItems.reduce(((e,t)=>e+t.size),0);this.resize(this.viewItems.length-1,this.size-i,void 0,e,t),this.distributeEmptySpace(),this.layoutViews(),this.saveProportions()}resize(e,t,i=this.viewItems.map((e=>e.size)),n,o,s=Number.NEGATIVE_INFINITY,a=Number.POSITIVE_INFINITY,l,c){if(e<0||e>=this.viewItems.length)return 0;const h=(0,r.w6)(e,-1),u=(0,r.w6)(e+1,this.viewItems.length);if(o)for(const e of o)(0,r.zI)(h,e),(0,r.zI)(u,e);if(n)for(const e of n)(0,r.al)(h,e),(0,r.al)(u,e);const g=h.map((e=>this.viewItems[e])),p=h.map((e=>i[e])),f=u.map((e=>this.viewItems[e])),m=u.map((e=>i[e])),v=h.reduce(((e,t)=>e+(this.viewItems[t].minimumSize-i[t])),0),_=h.reduce(((e,t)=>e+(this.viewItems[t].maximumSize-i[t])),0),b=0===u.length?Number.POSITIVE_INFINITY:u.reduce(((e,t)=>e+(i[t]-this.viewItems[t].minimumSize)),0),w=0===u.length?Number.NEGATIVE_INFINITY:u.reduce(((e,t)=>e+(i[t]-this.viewItems[t].maximumSize)),0),y=Math.max(v,w,s),C=Math.min(b,_,a);let x=!1;if(l){const e=this.viewItems[l.index],i=t>=l.limitDelta;x=i!==e.visible,e.setVisible(i,l.size)}if(!x&&c){const e=this.viewItems[c.index],i=t<c.limitDelta;x=i!==e.visible,e.setVisible(i,c.size)}if(x)return this.resize(e,t,i,n,o,s,a);for(let e=0,i=t=(0,d.u)(t,y,C);e<g.length;e++){const t=g[e],n=(0,d.u)(p[e]+i,t.minimumSize,t.maximumSize);i-=n-p[e],t.size=n}for(let e=0,i=t;e<f.length;e++){const t=f[e],n=(0,d.u)(m[e]-i,t.minimumSize,t.maximumSize);i+=n-m[e],t.size=n}return t}distributeEmptySpace(e){const t=this.viewItems.reduce(((e,t)=>e+t.size),0);let i=this.size-t;const n=(0,r.w6)(this.viewItems.length-1,-1),o=n.filter((e=>1===this.viewItems[e].priority)),s=n.filter((e=>2===this.viewItems[e].priority));for(const e of s)(0,r.zI)(n,e);for(const e of o)(0,r.al)(n,e);"number"==typeof e&&(0,r.al)(n,e);for(let e=0;0!==i&&e<n.length;e++){const t=this.viewItems[n[e]],o=(0,d.u)(t.size+i,t.minimumSize,t.maximumSize);i-=o-t.size,t.size=o}}layoutViews(){this.contentSize=this.viewItems.reduce(((e,t)=>e+t.size),0);let e=0;for(const t of this.viewItems)t.layout(e,this.layoutContext),e+=t.size;this.sashItems.forEach((e=>e.sash.layout())),this.updateSashEnablement(),this.updateScrollableElement()}updateScrollableElement(){0===this.orientation?this.scrollableElement.setScrollDimensions({height:this.size,scrollHeight:this.contentSize}):this.scrollableElement.setScrollDimensions({width:this.size,scrollWidth:this.contentSize})}updateSashEnablement(){let e=!1;const t=this.viewItems.map((t=>e=t.size-t.minimumSize>0||e));e=!1;const i=this.viewItems.map((t=>e=t.maximumSize-t.size>0||e)),n=[...this.viewItems].reverse();e=!1;const o=n.map((t=>e=t.size-t.minimumSize>0||e)).reverse();e=!1;const s=n.map((t=>e=t.maximumSize-t.size>0||e)).reverse();let a=0;for(let e=0;e<this.sashItems.length;e++){const{sash:n}=this.sashItems[e];a+=this.viewItems[e].size;const l=!(t[e]&&s[e+1]),c=!(i[e]&&o[e+1]);if(l&&c){const i=(0,r.w6)(e,-1),s=(0,r.w6)(e+1,this.viewItems.length),l=this.findFirstSnapIndex(i),c=this.findFirstSnapIndex(s),d="number"==typeof l&&!this.viewItems[l].visible,h="number"==typeof c&&!this.viewItems[c].visible;d&&o[e]&&(a>0||this.startSnappingEnabled)?n.state=1:h&&t[e]&&(a<this.contentSize||this.endSnappingEnabled)?n.state=2:n.state=0}else n.state=l&&!c?1:!l&&c?2:3}}getSashPosition(e){let t=0;for(let i=0;i<this.sashItems.length;i++)if(t+=this.viewItems[i].size,this.sashItems[i].sash===e)return t;return 0}findFirstSnapIndex(e){for(const t of e){const e=this.viewItems[t];if(e.visible&&e.snap)return t}for(const t of e){const e=this.viewItems[t];if(e.visible&&e.maximumSize-e.minimumSize>0)return;if(!e.visible&&e.snap)return t}}dispose(){super.dispose(),this.viewItems.forEach((e=>e.dispose())),this.viewItems=[],this.sashItems.forEach((e=>e.disposable.dispose())),this.sashItems=[]}}},93794:(e,t,i)=>{"use strict";i.d(t,{$:()=>l});var n=i(65321),o=i(59069),s=i(23938),r=i(10553),a=i(5976);class l extends a.JT{onclick(e,t){this._register(n.nm(e,n.tw.CLICK,(e=>t(new s.n(e)))))}onmousedown(e,t){this._register(n.nm(e,n.tw.MOUSE_DOWN,(e=>t(new s.n(e)))))}onmouseover(e,t){this._register(n.nm(e,n.tw.MOUSE_OVER,(e=>t(new s.n(e)))))}onnonbubblingmouseout(e,t){this._register(n.j_(e,(e=>t(new s.n(e)))))}onkeydown(e,t){this._register(n.nm(e,n.tw.KEY_DOWN,(e=>t(new o.y(e)))))}onkeyup(e,t){this._register(n.nm(e,n.tw.KEY_UP,(e=>t(new o.y(e)))))}oninput(e,t){this._register(n.nm(e,n.tw.INPUT,t))}onblur(e,t){this._register(n.nm(e,n.tw.BLUR,t))}onfocus(e,t){this._register(n.nm(e,n.tw.FOCUS,t))}ignoreGesture(e){r.o.ignoreTarget(e)}}},74741:(e,t,i)=>{"use strict";i.d(t,{Wi:()=>l,Z0:()=>c,aU:()=>a,eZ:()=>h,wY:()=>d});var n=i(4669),o=i(5976),s=i(63580),r=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class a extends o.JT{constructor(e,t="",i="",o=!0,s){super(),this._onDidChange=this._register(new n.Q5),this.onDidChange=this._onDidChange.event,this._enabled=!0,this._id=e,this._label=t,this._cssClass=i,this._enabled=o,this._actionCallback=s}get id(){return this._id}get label(){return this._label}set label(e){this._setLabel(e)}_setLabel(e){this._label!==e&&(this._label=e,this._onDidChange.fire({label:e}))}get tooltip(){return this._tooltip||""}set tooltip(e){this._setTooltip(e)}_setTooltip(e){this._tooltip!==e&&(this._tooltip=e,this._onDidChange.fire({tooltip:e}))}get class(){return this._cssClass}set class(e){this._setClass(e)}_setClass(e){this._cssClass!==e&&(this._cssClass=e,this._onDidChange.fire({class:e}))}get enabled(){return this._enabled}set enabled(e){this._setEnabled(e)}_setEnabled(e){this._enabled!==e&&(this._enabled=e,this._onDidChange.fire({enabled:e}))}get checked(){return this._checked}set checked(e){this._setChecked(e)}_setChecked(e){this._checked!==e&&(this._checked=e,this._onDidChange.fire({checked:e}))}run(e,t){return r(this,void 0,void 0,(function*(){this._actionCallback&&(yield this._actionCallback(e))}))}}class l extends o.JT{constructor(){super(...arguments),this._onBeforeRun=this._register(new n.Q5),this.onBeforeRun=this._onBeforeRun.event,this._onDidRun=this._register(new n.Q5),this.onDidRun=this._onDidRun.event}run(e,t){return r(this,void 0,void 0,(function*(){if(!e.enabled)return;let i;this._onBeforeRun.fire({action:e});try{yield this.runAction(e,t)}catch(e){i=e}this._onDidRun.fire({action:e,error:i})}))}runAction(e,t){return r(this,void 0,void 0,(function*(){yield e.run(t)}))}}class c extends a{constructor(e){super(c.ID,e,e?"separator text":"separator"),this.checked=!1,this.enabled=!1}}c.ID="vs.actions.separator";class d{constructor(e,t,i,n){this.tooltip="",this.enabled=!0,this.checked=!1,this.id=e,this.label=t,this.class=n,this._actions=i}get actions(){return this._actions}dispose(){}run(){return r(this,void 0,void 0,(function*(){}))}}class h extends a{constructor(){super(h.ID,s.N("submenu.empty","(empty)"),void 0,!1)}}h.ID="vs.actions.empty"},9488:(e,t,i)=>{"use strict";function n(e,t=0){return e[e.length-(1+t)]}function o(e){if(0===e.length)throw new Error("Invalid tail call");return[e.slice(0,e.length-1),e[e.length-1]]}function s(e,t,i=((e,t)=>e===t)){if(e===t)return!0;if(!e||!t)return!1;if(e.length!==t.length)return!1;for(let n=0,o=e.length;n<o;n++)if(!i(e[n],t[n]))return!1;return!0}function r(e,t,i){let n=0,o=e.length-1;for(;n<=o;){const s=(n+o)/2|0,r=i(e[s],t);if(r<0)n=s+1;else{if(!(r>0))return s;o=s-1}}return-(n+1)}function a(e,t){let i=0,n=e.length;if(0===n)return 0;for(;i<n;){const o=Math.floor((i+n)/2);t(e[o])?n=o:i=o+1}return i}function l(e,t,i){if((e|=0)>=t.length)throw new TypeError("invalid index");let n=t[Math.floor(t.length*Math.random())],o=[],s=[],r=[];for(let e of t){const t=i(e,n);t<0?o.push(e):t>0?s.push(e):r.push(e)}return e<o.length?l(e,o,i):e<o.length+r.length?r[0]:l(e-(o.length+r.length),s,i)}function c(e,t){const i=[];let n;for(const o of e.slice(0).sort(t))n&&0===t(n[0],o)?n.push(o):(n=[o],i.push(n));return i}function d(e){return e.filter((e=>!!e))}function h(e){return!Array.isArray(e)||0===e.length}function u(e){return Array.isArray(e)&&e.length>0}function g(e,t=(e=>e)){const i=new Set;return e.filter((e=>{const n=t(e);return!i.has(n)&&(i.add(n),!0)}))}function p(e,t){const i=function(e,t){for(let i=e.length-1;i>=0;i--){if(t(e[i]))return i}return-1}(e,t);if(-1!==i)return e[i]}function f(e,t){return e.length>0?e[0]:t}function m(e){return[].concat(...e)}function v(e,t){let i="number"==typeof t?e:0;"number"==typeof t?i=e:(i=0,t=e);const n=[];if(i<=t)for(let e=i;e<t;e++)n.push(e);else for(let e=i;e>t;e--)n.push(e);return n}function _(e,t,i){const n=e.slice(0,t),o=e.slice(t);return n.concat(i,o)}function b(e,t){const i=e.indexOf(t);i>-1&&(e.splice(i,1),e.unshift(t))}function w(e,t){const i=e.indexOf(t);i>-1&&(e.splice(i,1),e.push(t))}function y(e){return Array.isArray(e)?e:[e]}function C(e,t,i,n){const o=x(e,t),s=e.splice(o,i);return function(e,t,i){const n=x(e,t),o=e.length,s=i.length;e.length=o+s;for(let t=o-1;t>=n;t--)e[t+s]=e[t];for(let t=0;t<s;t++)e[t+n]=i[t]}(e,o,n),s}function x(e,t){return t<0?Math.max(t+e.length,0):Math.min(t,e.length)}i.d(t,{EB:()=>g,Gb:()=>n,H9:()=>S,HW:()=>l,JH:()=>o,Of:()=>u,XY:()=>h,Xh:()=>f,Zv:()=>_,_2:()=>y,al:()=>w,dF:()=>p,db:()=>C,fS:()=>s,kX:()=>d,lG:()=>a,ry:()=>r,vM:()=>c,w6:()=>v,xH:()=>m,zI:()=>b});class S{constructor(e){this.items=e,this.firstIdx=0,this.lastIdx=this.items.length-1}takeWhile(e){let t=this.firstIdx;for(;t<this.items.length&&e(this.items[t]);)t++;const i=t===this.firstIdx?null:this.items.slice(this.firstIdx,t);return this.firstIdx=t,i}takeFromEndWhile(e){let t=this.lastIdx;for(;t>=0&&e(this.items[t]);)t--;const i=t===this.lastIdx?null:this.items.slice(t+1,this.lastIdx+1);return this.lastIdx=t,i}peek(){return this.items[this.firstIdx]}}},35146:(e,t,i)=>{"use strict";function n(e,t){if(!e)throw new Error(t?`Assertion failed (${t})`:"Assertion Failed")}i.d(t,{ok:()=>n})},15393:(e,t,i)=>{"use strict";i.d(t,{J8:()=>a,PG:()=>l,Ps:()=>f,To:()=>b,Ue:()=>w,Vg:()=>p,Vs:()=>g,_F:()=>m,eP:()=>c,jT:()=>y,pY:()=>_,rH:()=>u,vp:()=>h,zh:()=>v});var n=i(71050),o=i(17301),s=i(5976),r=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function a(e){return!!e&&"function"==typeof e.then}function l(e){const t=new n.A,i=e(t.token),s=new Promise(((e,n)=>{const s=t.token.onCancellationRequested((()=>{s.dispose(),t.dispose(),n((0,o.F0)())}));Promise.resolve(i).then((i=>{s.dispose(),t.dispose(),e(i)}),(e=>{s.dispose(),t.dispose(),n(e)}))}));return new class{cancel(){t.cancel()}then(e,t){return s.then(e,t)}catch(e){return this.then(void 0,e)}finally(e){return s.finally(e)}}}function c(e,t,i){return Promise.race([e,new Promise((e=>t.onCancellationRequested((()=>e(i)))))])}class d{constructor(){this.activePromise=null,this.queuedPromise=null,this.queuedPromiseFactory=null}queue(e){if(this.activePromise){if(this.queuedPromiseFactory=e,!this.queuedPromise){const e=()=>{this.queuedPromise=null;const e=this.queue(this.queuedPromiseFactory);return this.queuedPromiseFactory=null,e};this.queuedPromise=new Promise((t=>{this.activePromise.then(e,e).then(t)}))}return new Promise(((e,t)=>{this.queuedPromise.then(e,t)}))}return this.activePromise=e(),new Promise(((e,t)=>{this.activePromise.then((t=>{this.activePromise=null,e(t)}),(e=>{this.activePromise=null,t(e)}))}))}}class h{constructor(e){this.defaultDelay=e,this.timeout=null,this.completionPromise=null,this.doResolve=null,this.doReject=null,this.task=null}trigger(e,t=this.defaultDelay){return this.task=e,this.cancelTimeout(),this.completionPromise||(this.completionPromise=new Promise(((e,t)=>{this.doResolve=e,this.doReject=t})).then((()=>{if(this.completionPromise=null,this.doResolve=null,this.task){const e=this.task;return this.task=null,e()}}))),this.timeout=setTimeout((()=>{this.timeout=null,this.doResolve&&this.doResolve(null)}),t),this.completionPromise}isTriggered(){return null!==this.timeout}cancel(){this.cancelTimeout(),this.completionPromise&&(this.doReject&&this.doReject((0,o.F0)()),this.completionPromise=null)}cancelTimeout(){null!==this.timeout&&(clearTimeout(this.timeout),this.timeout=null)}dispose(){this.cancel()}}class u{constructor(e){this.delayer=new h(e),this.throttler=new d}trigger(e,t){return this.delayer.trigger((()=>this.throttler.queue(e)),t)}dispose(){this.delayer.dispose()}}function g(e,t){return t?new Promise(((i,n)=>{const s=setTimeout((()=>{r.dispose(),i()}),e),r=t.onCancellationRequested((()=>{clearTimeout(s),r.dispose(),n((0,o.F0)())}))})):l((t=>g(e,t)))}function p(e,t=0){const i=setTimeout(e,t);return(0,s.OF)((()=>clearTimeout(i)))}function f(e,t=(e=>!!e),i=null){let n=0;const o=e.length,s=()=>{if(n>=o)return Promise.resolve(i);const r=e[n++];return Promise.resolve(r()).then((e=>t(e)?Promise.resolve(e):s()))};return s()}class m{constructor(e,t){this._token=-1,"function"==typeof e&&"number"==typeof t&&this.setIfNotSet(e,t)}dispose(){this.cancel()}cancel(){-1!==this._token&&(clearTimeout(this._token),this._token=-1)}cancelAndSet(e,t){this.cancel(),this._token=setTimeout((()=>{this._token=-1,e()}),t)}setIfNotSet(e,t){-1===this._token&&(this._token=setTimeout((()=>{this._token=-1,e()}),t))}}class v{constructor(){this._token=-1}dispose(){this.cancel()}cancel(){-1!==this._token&&(clearInterval(this._token),this._token=-1)}cancelAndSet(e,t){this.cancel(),this._token=setInterval((()=>{e()}),t)}}class _{constructor(e,t){this.timeoutToken=-1,this.runner=e,this.timeout=t,this.timeoutHandler=this.onTimeout.bind(this)}dispose(){this.cancel(),this.runner=null}cancel(){this.isScheduled()&&(clearTimeout(this.timeoutToken),this.timeoutToken=-1)}schedule(e=this.timeout){this.cancel(),this.timeoutToken=setTimeout(this.timeoutHandler,e)}get delay(){return this.timeout}set delay(e){this.timeout=e}isScheduled(){return-1!==this.timeoutToken}onTimeout(){this.timeoutToken=-1,this.runner&&this.doRun()}doRun(){this.runner&&this.runner()}}let b;b="function"!=typeof requestIdleCallback||"function"!=typeof cancelIdleCallback?e=>{const t=setTimeout((()=>{const t=Date.now()+15;e(Object.freeze({didTimeout:!0,timeRemaining:()=>Math.max(0,t-Date.now())}))}));let i=!1;return{dispose(){i||(i=!0,clearTimeout(t))}}}:(e,t)=>{const i=requestIdleCallback(e,"number"==typeof t?{timeout:t}:void 0);let n=!1;return{dispose(){n||(n=!0,cancelIdleCallback(i))}}};class w{constructor(e){this._didRun=!1,this._executor=()=>{try{this._value=e()}catch(e){this._error=e}finally{this._didRun=!0}},this._handle=b((()=>this._executor()))}dispose(){this._handle.dispose()}get value(){if(this._didRun||(this._handle.dispose(),this._executor()),this._error)throw this._error;return this._value}get isInitialized(){return this._didRun}}var y;!function(e){e.settled=function(e){return r(this,void 0,void 0,(function*(){let t;const i=yield Promise.all(e.map((e=>e.then((e=>e),(e=>{t||(t=e)})))));if(void 0!==t)throw t;return i}))},e.withAsyncBody=function(e){return new Promise(((t,i)=>r(this,void 0,void 0,(function*(){try{yield e(t,i)}catch(e){i(e)}}))))}}(y||(y={}))},53060:(e,t,i)=>{"use strict";i.d(t,{Ag:()=>l,Cg:()=>h,KN:()=>s,Q$:()=>d,T4:()=>c,mP:()=>r,oq:()=>a});const n="undefined"!=typeof Buffer;let o;class s{constructor(e){this.buffer=e,this.byteLength=this.buffer.byteLength}static wrap(e){return n&&!Buffer.isBuffer(e)&&(e=Buffer.from(e.buffer,e.byteOffset,e.byteLength)),new s(e)}toString(){return n?this.buffer.toString():(o||(o=new TextDecoder),o.decode(this.buffer))}}function r(e,t){return e[t+0]<<0>>>0|e[t+1]<<8>>>0}function a(e,t,i){e[i+0]=255&t,t>>>=8,e[i+1]=255&t}function l(e,t){return e[t]*Math.pow(2,24)+e[t+1]*Math.pow(2,16)+e[t+2]*Math.pow(2,8)+e[t+3]}function c(e,t,i){e[i+3]=t,t>>>=8,e[i+2]=t,t>>>=8,e[i+1]=t,t>>>=8,e[i]=t}function d(e,t){return e[t]}function h(e,t,i){e[i]=t}},71050:(e,t,i)=>{"use strict";i.d(t,{A:()=>a,T:()=>s});var n=i(4669);const o=Object.freeze((function(e,t){const i=setTimeout(e.bind(t),0);return{dispose(){clearTimeout(i)}}}));var s;!function(e){e.isCancellationToken=function(t){return t===e.None||t===e.Cancelled||(t instanceof r||!(!t||"object"!=typeof t)&&("boolean"==typeof t.isCancellationRequested&&"function"==typeof t.onCancellationRequested))},e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:n.ju.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:o})}(s||(s={}));class r{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?o:(this._emitter||(this._emitter=new n.Q5),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}}class a{constructor(e){this._token=void 0,this._parentListener=void 0,this._parentListener=e&&e.onCancellationRequested(this.cancel,this)}get token(){return this._token||(this._token=new r),this._token}cancel(){this._token?this._token instanceof r&&this._token.cancel():this._token=s.Cancelled}dispose(e=!1){e&&this.cancel(),this._parentListener&&this._parentListener.dispose(),this._token?this._token instanceof r&&this._token.dispose():this._token=s.None}}},73046:(e,t,i)=>{"use strict";i.d(t,{CM:()=>r,JL:()=>a,dT:()=>c,fK:()=>s,lA:()=>l});var n=i(4669);const o=new class{constructor(){this._icons=new Map,this._onDidRegister=new n.Q5}add(e){const t=this._icons.get(e.id);t?e.description?t.description=e.description:console.error(`Duplicate registration of codicon ${e.id}`):(this._icons.set(e.id,e),this._onDidRegister.fire(e))}get(e){return this._icons.get(e)}get all(){return this._icons.values()}get onDidRegister(){return this._onDidRegister.event}},s=o;function r(e,t){return new l(e,t)}function a(e){return e?e.replace(/\$\((.*?)\)/g,((e,t)=>` ${t} `)).trim():""}class l{constructor(e,t,i){this.id=e,this.definition=t,this.description=i,o.add(this)}get classNames(){return"codicon codicon-"+this.id}get classNamesArray(){return["codicon","codicon-"+this.id]}get cssSelector(){return".codicon.codicon-"+this.id}}var c;!function(e){e.iconNameSegment="[A-Za-z0-9]+",e.iconNameExpression="[A-Za-z0-9\\-]+",e.iconModifierExpression="~[A-Za-z]+";const t=new RegExp(`^(${e.iconNameExpression})(${e.iconModifierExpression})?$`);function i(e){if(e instanceof l)return["codicon","codicon-"+e.id];const n=t.exec(e.id);if(!n)return i(l.error);let[,o,s]=n;const r=["codicon","codicon-"+o];return s&&r.push("codicon-modifier-"+s.substr(1)),r}e.asClassNameArray=i,e.asClassName=function(e){return i(e).join(" ")},e.asCSSSelector=function(e){return"."+i(e).join(".")}}(c||(c={})),function(e){e.add=new e("add",{fontCharacter:"\\ea60"}),e.plus=new e("plus",e.add.definition),e.gistNew=new e("gist-new",e.add.definition),e.repoCreate=new e("repo-create",e.add.definition),e.lightbulb=new e("lightbulb",{fontCharacter:"\\ea61"}),e.lightBulb=new e("light-bulb",{fontCharacter:"\\ea61"}),e.repo=new e("repo",{fontCharacter:"\\ea62"}),e.repoDelete=new e("repo-delete",{fontCharacter:"\\ea62"}),e.gistFork=new e("gist-fork",{fontCharacter:"\\ea63"}),e.repoForked=new e("repo-forked",{fontCharacter:"\\ea63"}),e.gitPullRequest=new e("git-pull-request",{fontCharacter:"\\ea64"}),e.gitPullRequestAbandoned=new e("git-pull-request-abandoned",{fontCharacter:"\\ea64"}),e.recordKeys=new e("record-keys",{fontCharacter:"\\ea65"}),e.keyboard=new e("keyboard",{fontCharacter:"\\ea65"}),e.tag=new e("tag",{fontCharacter:"\\ea66"}),e.tagAdd=new e("tag-add",{fontCharacter:"\\ea66"}),e.tagRemove=new e("tag-remove",{fontCharacter:"\\ea66"}),e.person=new e("person",{fontCharacter:"\\ea67"}),e.personFollow=new e("person-follow",{fontCharacter:"\\ea67"}),e.personOutline=new e("person-outline",{fontCharacter:"\\ea67"}),e.personFilled=new e("person-filled",{fontCharacter:"\\ea67"}),e.gitBranch=new e("git-branch",{fontCharacter:"\\ea68"}),e.gitBranchCreate=new e("git-branch-create",{fontCharacter:"\\ea68"}),e.gitBranchDelete=new e("git-branch-delete",{fontCharacter:"\\ea68"}),e.sourceControl=new e("source-control",{fontCharacter:"\\ea68"}),e.mirror=new e("mirror",{fontCharacter:"\\ea69"}),e.mirrorPublic=new e("mirror-public",{fontCharacter:"\\ea69"}),e.star=new e("star",{fontCharacter:"\\ea6a"}),e.starAdd=new e("star-add",{fontCharacter:"\\ea6a"}),e.starDelete=new e("star-delete",{fontCharacter:"\\ea6a"}),e.starEmpty=new e("star-empty",{fontCharacter:"\\ea6a"}),e.comment=new e("comment",{fontCharacter:"\\ea6b"}),e.commentAdd=new e("comment-add",{fontCharacter:"\\ea6b"}),e.alert=new e("alert",{fontCharacter:"\\ea6c"}),e.warning=new e("warning",{fontCharacter:"\\ea6c"}),e.search=new e("search",{fontCharacter:"\\ea6d"}),e.searchSave=new e("search-save",{fontCharacter:"\\ea6d"}),e.logOut=new e("log-out",{fontCharacter:"\\ea6e"}),e.signOut=new e("sign-out",{fontCharacter:"\\ea6e"}),e.logIn=new e("log-in",{fontCharacter:"\\ea6f"}),e.signIn=new e("sign-in",{fontCharacter:"\\ea6f"}),e.eye=new e("eye",{fontCharacter:"\\ea70"}),e.eyeUnwatch=new e("eye-unwatch",{fontCharacter:"\\ea70"}),e.eyeWatch=new e("eye-watch",{fontCharacter:"\\ea70"}),e.circleFilled=new e("circle-filled",{fontCharacter:"\\ea71"}),e.primitiveDot=new e("primitive-dot",{fontCharacter:"\\ea71"}),e.closeDirty=new e("close-dirty",{fontCharacter:"\\ea71"}),e.debugBreakpoint=new e("debug-breakpoint",{fontCharacter:"\\ea71"}),e.debugBreakpointDisabled=new e("debug-breakpoint-disabled",{fontCharacter:"\\ea71"}),e.debugHint=new e("debug-hint",{fontCharacter:"\\ea71"}),e.primitiveSquare=new e("primitive-square",{fontCharacter:"\\ea72"}),e.edit=new e("edit",{fontCharacter:"\\ea73"}),e.pencil=new e("pencil",{fontCharacter:"\\ea73"}),e.info=new e("info",{fontCharacter:"\\ea74"}),e.issueOpened=new e("issue-opened",{fontCharacter:"\\ea74"}),e.gistPrivate=new e("gist-private",{fontCharacter:"\\ea75"}),e.gitForkPrivate=new e("git-fork-private",{fontCharacter:"\\ea75"}),e.lock=new e("lock",{fontCharacter:"\\ea75"}),e.mirrorPrivate=new e("mirror-private",{fontCharacter:"\\ea75"}),e.close=new e("close",{fontCharacter:"\\ea76"}),e.removeClose=new e("remove-close",{fontCharacter:"\\ea76"}),e.x=new e("x",{fontCharacter:"\\ea76"}),e.repoSync=new e("repo-sync",{fontCharacter:"\\ea77"}),e.sync=new e("sync",{fontCharacter:"\\ea77"}),e.clone=new e("clone",{fontCharacter:"\\ea78"}),e.desktopDownload=new e("desktop-download",{fontCharacter:"\\ea78"}),e.beaker=new e("beaker",{fontCharacter:"\\ea79"}),e.microscope=new e("microscope",{fontCharacter:"\\ea79"}),e.vm=new e("vm",{fontCharacter:"\\ea7a"}),e.deviceDesktop=new e("device-desktop",{fontCharacter:"\\ea7a"}),e.file=new e("file",{fontCharacter:"\\ea7b"}),e.fileText=new e("file-text",{fontCharacter:"\\ea7b"}),e.more=new e("more",{fontCharacter:"\\ea7c"}),e.ellipsis=new e("ellipsis",{fontCharacter:"\\ea7c"}),e.kebabHorizontal=new e("kebab-horizontal",{fontCharacter:"\\ea7c"}),e.mailReply=new e("mail-reply",{fontCharacter:"\\ea7d"}),e.reply=new e("reply",{fontCharacter:"\\ea7d"}),e.organization=new e("organization",{fontCharacter:"\\ea7e"}),e.organizationFilled=new e("organization-filled",{fontCharacter:"\\ea7e"}),e.organizationOutline=new e("organization-outline",{fontCharacter:"\\ea7e"}),e.newFile=new e("new-file",{fontCharacter:"\\ea7f"}),e.fileAdd=new e("file-add",{fontCharacter:"\\ea7f"}),e.newFolder=new e("new-folder",{fontCharacter:"\\ea80"}),e.fileDirectoryCreate=new e("file-directory-create",{fontCharacter:"\\ea80"}),e.trash=new e("trash",{fontCharacter:"\\ea81"}),e.trashcan=new e("trashcan",{fontCharacter:"\\ea81"}),e.history=new e("history",{fontCharacter:"\\ea82"}),e.clock=new e("clock",{fontCharacter:"\\ea82"}),e.folder=new e("folder",{fontCharacter:"\\ea83"}),e.fileDirectory=new e("file-directory",{fontCharacter:"\\ea83"}),e.symbolFolder=new e("symbol-folder",{fontCharacter:"\\ea83"}),e.logoGithub=new e("logo-github",{fontCharacter:"\\ea84"}),e.markGithub=new e("mark-github",{fontCharacter:"\\ea84"}),e.github=new e("github",{fontCharacter:"\\ea84"}),e.terminal=new e("terminal",{fontCharacter:"\\ea85"}),e.console=new e("console",{fontCharacter:"\\ea85"}),e.repl=new e("repl",{fontCharacter:"\\ea85"}),e.zap=new e("zap",{fontCharacter:"\\ea86"}),e.symbolEvent=new e("symbol-event",{fontCharacter:"\\ea86"}),e.error=new e("error",{fontCharacter:"\\ea87"}),e.stop=new e("stop",{fontCharacter:"\\ea87"}),e.variable=new e("variable",{fontCharacter:"\\ea88"}),e.symbolVariable=new e("symbol-variable",{fontCharacter:"\\ea88"}),e.array=new e("array",{fontCharacter:"\\ea8a"}),e.symbolArray=new e("symbol-array",{fontCharacter:"\\ea8a"}),e.symbolModule=new e("symbol-module",{fontCharacter:"\\ea8b"}),e.symbolPackage=new e("symbol-package",{fontCharacter:"\\ea8b"}),e.symbolNamespace=new e("symbol-namespace",{fontCharacter:"\\ea8b"}),e.symbolObject=new e("symbol-object",{fontCharacter:"\\ea8b"}),e.symbolMethod=new e("symbol-method",{fontCharacter:"\\ea8c"}),e.symbolFunction=new e("symbol-function",{fontCharacter:"\\ea8c"}),e.symbolConstructor=new e("symbol-constructor",{fontCharacter:"\\ea8c"}),e.symbolBoolean=new e("symbol-boolean",{fontCharacter:"\\ea8f"}),e.symbolNull=new e("symbol-null",{fontCharacter:"\\ea8f"}),e.symbolNumeric=new e("symbol-numeric",{fontCharacter:"\\ea90"}),e.symbolNumber=new e("symbol-number",{fontCharacter:"\\ea90"}),e.symbolStructure=new e("symbol-structure",{fontCharacter:"\\ea91"}),e.symbolStruct=new e("symbol-struct",{fontCharacter:"\\ea91"}),e.symbolParameter=new e("symbol-parameter",{fontCharacter:"\\ea92"}),e.symbolTypeParameter=new e("symbol-type-parameter",{fontCharacter:"\\ea92"}),e.symbolKey=new e("symbol-key",{fontCharacter:"\\ea93"}),e.symbolText=new e("symbol-text",{fontCharacter:"\\ea93"}),e.symbolReference=new e("symbol-reference",{fontCharacter:"\\ea94"}),e.goToFile=new e("go-to-file",{fontCharacter:"\\ea94"}),e.symbolEnum=new e("symbol-enum",{fontCharacter:"\\ea95"}),e.symbolValue=new e("symbol-value",{fontCharacter:"\\ea95"}),e.symbolRuler=new e("symbol-ruler",{fontCharacter:"\\ea96"}),e.symbolUnit=new e("symbol-unit",{fontCharacter:"\\ea96"}),e.activateBreakpoints=new e("activate-breakpoints",{fontCharacter:"\\ea97"}),e.archive=new e("archive",{fontCharacter:"\\ea98"}),e.arrowBoth=new e("arrow-both",{fontCharacter:"\\ea99"}),e.arrowDown=new e("arrow-down",{fontCharacter:"\\ea9a"}),e.arrowLeft=new e("arrow-left",{fontCharacter:"\\ea9b"}),e.arrowRight=new e("arrow-right",{fontCharacter:"\\ea9c"}),e.arrowSmallDown=new e("arrow-small-down",{fontCharacter:"\\ea9d"}),e.arrowSmallLeft=new e("arrow-small-left",{fontCharacter:"\\ea9e"}),e.arrowSmallRight=new e("arrow-small-right",{fontCharacter:"\\ea9f"}),e.arrowSmallUp=new e("arrow-small-up",{fontCharacter:"\\eaa0"}),e.arrowUp=new e("arrow-up",{fontCharacter:"\\eaa1"}),e.bell=new e("bell",{fontCharacter:"\\eaa2"}),e.bold=new e("bold",{fontCharacter:"\\eaa3"}),e.book=new e("book",{fontCharacter:"\\eaa4"}),e.bookmark=new e("bookmark",{fontCharacter:"\\eaa5"}),e.debugBreakpointConditionalUnverified=new e("debug-breakpoint-conditional-unverified",{fontCharacter:"\\eaa6"}),e.debugBreakpointConditional=new e("debug-breakpoint-conditional",{fontCharacter:"\\eaa7"}),e.debugBreakpointConditionalDisabled=new e("debug-breakpoint-conditional-disabled",{fontCharacter:"\\eaa7"}),e.debugBreakpointDataUnverified=new e("debug-breakpoint-data-unverified",{fontCharacter:"\\eaa8"}),e.debugBreakpointData=new e("debug-breakpoint-data",{fontCharacter:"\\eaa9"}),e.debugBreakpointDataDisabled=new e("debug-breakpoint-data-disabled",{fontCharacter:"\\eaa9"}),e.debugBreakpointLogUnverified=new e("debug-breakpoint-log-unverified",{fontCharacter:"\\eaaa"}),e.debugBreakpointLog=new e("debug-breakpoint-log",{fontCharacter:"\\eaab"}),e.debugBreakpointLogDisabled=new e("debug-breakpoint-log-disabled",{fontCharacter:"\\eaab"}),e.briefcase=new e("briefcase",{fontCharacter:"\\eaac"}),e.broadcast=new e("broadcast",{fontCharacter:"\\eaad"}),e.browser=new e("browser",{fontCharacter:"\\eaae"}),e.bug=new e("bug",{fontCharacter:"\\eaaf"}),e.calendar=new e("calendar",{fontCharacter:"\\eab0"}),e.caseSensitive=new e("case-sensitive",{fontCharacter:"\\eab1"}),e.check=new e("check",{fontCharacter:"\\eab2"}),e.checklist=new e("checklist",{fontCharacter:"\\eab3"}),e.chevronDown=new e("chevron-down",{fontCharacter:"\\eab4"}),e.dropDownButton=new e("drop-down-button",e.chevronDown.definition),e.chevronLeft=new e("chevron-left",{fontCharacter:"\\eab5"}),e.chevronRight=new e("chevron-right",{fontCharacter:"\\eab6"}),e.chevronUp=new e("chevron-up",{fontCharacter:"\\eab7"}),e.chromeClose=new e("chrome-close",{fontCharacter:"\\eab8"}),e.chromeMaximize=new e("chrome-maximize",{fontCharacter:"\\eab9"}),e.chromeMinimize=new e("chrome-minimize",{fontCharacter:"\\eaba"}),e.chromeRestore=new e("chrome-restore",{fontCharacter:"\\eabb"}),e.circleOutline=new e("circle-outline",{fontCharacter:"\\eabc"}),e.debugBreakpointUnverified=new e("debug-breakpoint-unverified",{fontCharacter:"\\eabc"}),e.circleSlash=new e("circle-slash",{fontCharacter:"\\eabd"}),e.circuitBoard=new e("circuit-board",{fontCharacter:"\\eabe"}),e.clearAll=new e("clear-all",{fontCharacter:"\\eabf"}),e.clippy=new e("clippy",{fontCharacter:"\\eac0"}),e.closeAll=new e("close-all",{fontCharacter:"\\eac1"}),e.cloudDownload=new e("cloud-download",{fontCharacter:"\\eac2"}),e.cloudUpload=new e("cloud-upload",{fontCharacter:"\\eac3"}),e.code=new e("code",{fontCharacter:"\\eac4"}),e.collapseAll=new e("collapse-all",{fontCharacter:"\\eac5"}),e.colorMode=new e("color-mode",{fontCharacter:"\\eac6"}),e.commentDiscussion=new e("comment-discussion",{fontCharacter:"\\eac7"}),e.compareChanges=new e("compare-changes",{fontCharacter:"\\eafd"}),e.creditCard=new e("credit-card",{fontCharacter:"\\eac9"}),e.dash=new e("dash",{fontCharacter:"\\eacc"}),e.dashboard=new e("dashboard",{fontCharacter:"\\eacd"}),e.database=new e("database",{fontCharacter:"\\eace"}),e.debugContinue=new e("debug-continue",{fontCharacter:"\\eacf"}),e.debugDisconnect=new e("debug-disconnect",{fontCharacter:"\\ead0"}),e.debugPause=new e("debug-pause",{fontCharacter:"\\ead1"}),e.debugRestart=new e("debug-restart",{fontCharacter:"\\ead2"}),e.debugStart=new e("debug-start",{fontCharacter:"\\ead3"}),e.debugStepInto=new e("debug-step-into",{fontCharacter:"\\ead4"}),e.debugStepOut=new e("debug-step-out",{fontCharacter:"\\ead5"}),e.debugStepOver=new e("debug-step-over",{fontCharacter:"\\ead6"}),e.debugStop=new e("debug-stop",{fontCharacter:"\\ead7"}),e.debug=new e("debug",{fontCharacter:"\\ead8"}),e.deviceCameraVideo=new e("device-camera-video",{fontCharacter:"\\ead9"}),e.deviceCamera=new e("device-camera",{fontCharacter:"\\eada"}),e.deviceMobile=new e("device-mobile",{fontCharacter:"\\eadb"}),e.diffAdded=new e("diff-added",{fontCharacter:"\\eadc"}),e.diffIgnored=new e("diff-ignored",{fontCharacter:"\\eadd"}),e.diffModified=new e("diff-modified",{fontCharacter:"\\eade"}),e.diffRemoved=new e("diff-removed",{fontCharacter:"\\eadf"}),e.diffRenamed=new e("diff-renamed",{fontCharacter:"\\eae0"}),e.diff=new e("diff",{fontCharacter:"\\eae1"}),e.discard=new e("discard",{fontCharacter:"\\eae2"}),e.editorLayout=new e("editor-layout",{fontCharacter:"\\eae3"}),e.emptyWindow=new e("empty-window",{fontCharacter:"\\eae4"}),e.exclude=new e("exclude",{fontCharacter:"\\eae5"}),e.extensions=new e("extensions",{fontCharacter:"\\eae6"}),e.eyeClosed=new e("eye-closed",{fontCharacter:"\\eae7"}),e.fileBinary=new e("file-binary",{fontCharacter:"\\eae8"}),e.fileCode=new e("file-code",{fontCharacter:"\\eae9"}),e.fileMedia=new e("file-media",{fontCharacter:"\\eaea"}),e.filePdf=new e("file-pdf",{fontCharacter:"\\eaeb"}),e.fileSubmodule=new e("file-submodule",{fontCharacter:"\\eaec"}),e.fileSymlinkDirectory=new e("file-symlink-directory",{fontCharacter:"\\eaed"}),e.fileSymlinkFile=new e("file-symlink-file",{fontCharacter:"\\eaee"}),e.fileZip=new e("file-zip",{fontCharacter:"\\eaef"}),e.files=new e("files",{fontCharacter:"\\eaf0"}),e.filter=new e("filter",{fontCharacter:"\\eaf1"}),e.flame=new e("flame",{fontCharacter:"\\eaf2"}),e.foldDown=new e("fold-down",{fontCharacter:"\\eaf3"}),e.foldUp=new e("fold-up",{fontCharacter:"\\eaf4"}),e.fold=new e("fold",{fontCharacter:"\\eaf5"}),e.folderActive=new e("folder-active",{fontCharacter:"\\eaf6"}),e.folderOpened=new e("folder-opened",{fontCharacter:"\\eaf7"}),e.gear=new e("gear",{fontCharacter:"\\eaf8"}),e.gift=new e("gift",{fontCharacter:"\\eaf9"}),e.gistSecret=new e("gist-secret",{fontCharacter:"\\eafa"}),e.gist=new e("gist",{fontCharacter:"\\eafb"}),e.gitCommit=new e("git-commit",{fontCharacter:"\\eafc"}),e.gitCompare=new e("git-compare",{fontCharacter:"\\eafd"}),e.gitMerge=new e("git-merge",{fontCharacter:"\\eafe"}),e.githubAction=new e("github-action",{fontCharacter:"\\eaff"}),e.githubAlt=new e("github-alt",{fontCharacter:"\\eb00"}),e.globe=new e("globe",{fontCharacter:"\\eb01"}),e.grabber=new e("grabber",{fontCharacter:"\\eb02"}),e.graph=new e("graph",{fontCharacter:"\\eb03"}),e.gripper=new e("gripper",{fontCharacter:"\\eb04"}),e.heart=new e("heart",{fontCharacter:"\\eb05"}),e.home=new e("home",{fontCharacter:"\\eb06"}),e.horizontalRule=new e("horizontal-rule",{fontCharacter:"\\eb07"}),e.hubot=new e("hubot",{fontCharacter:"\\eb08"}),e.inbox=new e("inbox",{fontCharacter:"\\eb09"}),e.issueClosed=new e("issue-closed",{fontCharacter:"\\eba4"}),e.issueReopened=new e("issue-reopened",{fontCharacter:"\\eb0b"}),e.issues=new e("issues",{fontCharacter:"\\eb0c"}),e.italic=new e("italic",{fontCharacter:"\\eb0d"}),e.jersey=new e("jersey",{fontCharacter:"\\eb0e"}),e.json=new e("json",{fontCharacter:"\\eb0f"}),e.kebabVertical=new e("kebab-vertical",{fontCharacter:"\\eb10"}),e.key=new e("key",{fontCharacter:"\\eb11"}),e.law=new e("law",{fontCharacter:"\\eb12"}),e.lightbulbAutofix=new e("lightbulb-autofix",{fontCharacter:"\\eb13"}),e.linkExternal=new e("link-external",{fontCharacter:"\\eb14"}),e.link=new e("link",{fontCharacter:"\\eb15"}),e.listOrdered=new e("list-ordered",{fontCharacter:"\\eb16"}),e.listUnordered=new e("list-unordered",{fontCharacter:"\\eb17"}),e.liveShare=new e("live-share",{fontCharacter:"\\eb18"}),e.loading=new e("loading",{fontCharacter:"\\eb19"}),e.location=new e("location",{fontCharacter:"\\eb1a"}),e.mailRead=new e("mail-read",{fontCharacter:"\\eb1b"}),e.mail=new e("mail",{fontCharacter:"\\eb1c"}),e.markdown=new e("markdown",{fontCharacter:"\\eb1d"}),e.megaphone=new e("megaphone",{fontCharacter:"\\eb1e"}),e.mention=new e("mention",{fontCharacter:"\\eb1f"}),e.milestone=new e("milestone",{fontCharacter:"\\eb20"}),e.mortarBoard=new e("mortar-board",{fontCharacter:"\\eb21"}),e.move=new e("move",{fontCharacter:"\\eb22"}),e.multipleWindows=new e("multiple-windows",{fontCharacter:"\\eb23"}),e.mute=new e("mute",{fontCharacter:"\\eb24"}),e.noNewline=new e("no-newline",{fontCharacter:"\\eb25"}),e.note=new e("note",{fontCharacter:"\\eb26"}),e.octoface=new e("octoface",{fontCharacter:"\\eb27"}),e.openPreview=new e("open-preview",{fontCharacter:"\\eb28"}),e.package_=new e("package",{fontCharacter:"\\eb29"}),e.paintcan=new e("paintcan",{fontCharacter:"\\eb2a"}),e.pin=new e("pin",{fontCharacter:"\\eb2b"}),e.play=new e("play",{fontCharacter:"\\eb2c"}),e.run=new e("run",{fontCharacter:"\\eb2c"}),e.plug=new e("plug",{fontCharacter:"\\eb2d"}),e.preserveCase=new e("preserve-case",{fontCharacter:"\\eb2e"}),e.preview=new e("preview",{fontCharacter:"\\eb2f"}),e.project=new e("project",{fontCharacter:"\\eb30"}),e.pulse=new e("pulse",{fontCharacter:"\\eb31"}),e.question=new e("question",{fontCharacter:"\\eb32"}),e.quote=new e("quote",{fontCharacter:"\\eb33"}),e.radioTower=new e("radio-tower",{fontCharacter:"\\eb34"}),e.reactions=new e("reactions",{fontCharacter:"\\eb35"}),e.references=new e("references",{fontCharacter:"\\eb36"}),e.refresh=new e("refresh",{fontCharacter:"\\eb37"}),e.regex=new e("regex",{fontCharacter:"\\eb38"}),e.remoteExplorer=new e("remote-explorer",{fontCharacter:"\\eb39"}),e.remote=new e("remote",{fontCharacter:"\\eb3a"}),e.remove=new e("remove",{fontCharacter:"\\eb3b"}),e.replaceAll=new e("replace-all",{fontCharacter:"\\eb3c"}),e.replace=new e("replace",{fontCharacter:"\\eb3d"}),e.repoClone=new e("repo-clone",{fontCharacter:"\\eb3e"}),e.repoForcePush=new e("repo-force-push",{fontCharacter:"\\eb3f"}),e.repoPull=new e("repo-pull",{fontCharacter:"\\eb40"}),e.repoPush=new e("repo-push",{fontCharacter:"\\eb41"}),e.report=new e("report",{fontCharacter:"\\eb42"}),e.requestChanges=new e("request-changes",{fontCharacter:"\\eb43"}),e.rocket=new e("rocket",{fontCharacter:"\\eb44"}),e.rootFolderOpened=new e("root-folder-opened",{fontCharacter:"\\eb45"}),e.rootFolder=new e("root-folder",{fontCharacter:"\\eb46"}),e.rss=new e("rss",{fontCharacter:"\\eb47"}),e.ruby=new e("ruby",{fontCharacter:"\\eb48"}),e.saveAll=new e("save-all",{fontCharacter:"\\eb49"}),e.saveAs=new e("save-as",{fontCharacter:"\\eb4a"}),e.save=new e("save",{fontCharacter:"\\eb4b"}),e.screenFull=new e("screen-full",{fontCharacter:"\\eb4c"}),e.screenNormal=new e("screen-normal",{fontCharacter:"\\eb4d"}),e.searchStop=new e("search-stop",{fontCharacter:"\\eb4e"}),e.server=new e("server",{fontCharacter:"\\eb50"}),e.settingsGear=new e("settings-gear",{fontCharacter:"\\eb51"}),e.settings=new e("settings",{fontCharacter:"\\eb52"}),e.shield=new e("shield",{fontCharacter:"\\eb53"}),e.smiley=new e("smiley",{fontCharacter:"\\eb54"}),e.sortPrecedence=new e("sort-precedence",{fontCharacter:"\\eb55"}),e.splitHorizontal=new e("split-horizontal",{fontCharacter:"\\eb56"}),e.splitVertical=new e("split-vertical",{fontCharacter:"\\eb57"}),e.squirrel=new e("squirrel",{fontCharacter:"\\eb58"}),e.starFull=new e("star-full",{fontCharacter:"\\eb59"}),e.starHalf=new e("star-half",{fontCharacter:"\\eb5a"}),e.symbolClass=new e("symbol-class",{fontCharacter:"\\eb5b"}),e.symbolColor=new e("symbol-color",{fontCharacter:"\\eb5c"}),e.symbolConstant=new e("symbol-constant",{fontCharacter:"\\eb5d"}),e.symbolEnumMember=new e("symbol-enum-member",{fontCharacter:"\\eb5e"}),e.symbolField=new e("symbol-field",{fontCharacter:"\\eb5f"}),e.symbolFile=new e("symbol-file",{fontCharacter:"\\eb60"}),e.symbolInterface=new e("symbol-interface",{fontCharacter:"\\eb61"}),e.symbolKeyword=new e("symbol-keyword",{fontCharacter:"\\eb62"}),e.symbolMisc=new e("symbol-misc",{fontCharacter:"\\eb63"}),e.symbolOperator=new e("symbol-operator",{fontCharacter:"\\eb64"}),e.symbolProperty=new e("symbol-property",{fontCharacter:"\\eb65"}),e.wrench=new e("wrench",{fontCharacter:"\\eb65"}),e.wrenchSubaction=new e("wrench-subaction",{fontCharacter:"\\eb65"}),e.symbolSnippet=new e("symbol-snippet",{fontCharacter:"\\eb66"}),e.tasklist=new e("tasklist",{fontCharacter:"\\eb67"}),e.telescope=new e("telescope",{fontCharacter:"\\eb68"}),e.textSize=new e("text-size",{fontCharacter:"\\eb69"}),e.threeBars=new e("three-bars",{fontCharacter:"\\eb6a"}),e.thumbsdown=new e("thumbsdown",{fontCharacter:"\\eb6b"}),e.thumbsup=new e("thumbsup",{fontCharacter:"\\eb6c"}),e.tools=new e("tools",{fontCharacter:"\\eb6d"}),e.triangleDown=new e("triangle-down",{fontCharacter:"\\eb6e"}),e.triangleLeft=new e("triangle-left",{fontCharacter:"\\eb6f"}),e.triangleRight=new e("triangle-right",{fontCharacter:"\\eb70"}),e.triangleUp=new e("triangle-up",{fontCharacter:"\\eb71"}),e.twitter=new e("twitter",{fontCharacter:"\\eb72"}),e.unfold=new e("unfold",{fontCharacter:"\\eb73"}),e.unlock=new e("unlock",{fontCharacter:"\\eb74"}),e.unmute=new e("unmute",{fontCharacter:"\\eb75"}),e.unverified=new e("unverified",{fontCharacter:"\\eb76"}),e.verified=new e("verified",{fontCharacter:"\\eb77"}),e.versions=new e("versions",{fontCharacter:"\\eb78"}),e.vmActive=new e("vm-active",{fontCharacter:"\\eb79"}),e.vmOutline=new e("vm-outline",{fontCharacter:"\\eb7a"}),e.vmRunning=new e("vm-running",{fontCharacter:"\\eb7b"}),e.watch=new e("watch",{fontCharacter:"\\eb7c"}),e.whitespace=new e("whitespace",{fontCharacter:"\\eb7d"}),e.wholeWord=new e("whole-word",{fontCharacter:"\\eb7e"}),e.window=new e("window",{fontCharacter:"\\eb7f"}),e.wordWrap=new e("word-wrap",{fontCharacter:"\\eb80"}),e.zoomIn=new e("zoom-in",{fontCharacter:"\\eb81"}),e.zoomOut=new e("zoom-out",{fontCharacter:"\\eb82"}),e.listFilter=new e("list-filter",{fontCharacter:"\\eb83"}),e.listFlat=new e("list-flat",{fontCharacter:"\\eb84"}),e.listSelection=new e("list-selection",{fontCharacter:"\\eb85"}),e.selection=new e("selection",{fontCharacter:"\\eb85"}),e.listTree=new e("list-tree",{fontCharacter:"\\eb86"}),e.debugBreakpointFunctionUnverified=new e("debug-breakpoint-function-unverified",{fontCharacter:"\\eb87"}),e.debugBreakpointFunction=new e("debug-breakpoint-function",{fontCharacter:"\\eb88"}),e.debugBreakpointFunctionDisabled=new e("debug-breakpoint-function-disabled",{fontCharacter:"\\eb88"}),e.debugStackframeActive=new e("debug-stackframe-active",{fontCharacter:"\\eb89"}),e.debugStackframeDot=new e("debug-stackframe-dot",{fontCharacter:"\\eb8a"}),e.debugStackframe=new e("debug-stackframe",{fontCharacter:"\\eb8b"}),e.debugStackframeFocused=new e("debug-stackframe-focused",{fontCharacter:"\\eb8b"}),e.debugBreakpointUnsupported=new e("debug-breakpoint-unsupported",{fontCharacter:"\\eb8c"}),e.symbolString=new e("symbol-string",{fontCharacter:"\\eb8d"}),e.debugReverseContinue=new e("debug-reverse-continue",{fontCharacter:"\\eb8e"}),e.debugStepBack=new e("debug-step-back",{fontCharacter:"\\eb8f"}),e.debugRestartFrame=new e("debug-restart-frame",{fontCharacter:"\\eb90"}),e.callIncoming=new e("call-incoming",{fontCharacter:"\\eb92"}),e.callOutgoing=new e("call-outgoing",{fontCharacter:"\\eb93"}),e.menu=new e("menu",{fontCharacter:"\\eb94"}),e.expandAll=new e("expand-all",{fontCharacter:"\\eb95"}),e.feedback=new e("feedback",{fontCharacter:"\\eb96"}),e.groupByRefType=new e("group-by-ref-type",{fontCharacter:"\\eb97"}),e.ungroupByRefType=new e("ungroup-by-ref-type",{fontCharacter:"\\eb98"}),e.account=new e("account",{fontCharacter:"\\eb99"}),e.bellDot=new e("bell-dot",{fontCharacter:"\\eb9a"}),e.debugConsole=new e("debug-console",{fontCharacter:"\\eb9b"}),e.library=new e("library",{fontCharacter:"\\eb9c"}),e.output=new e("output",{fontCharacter:"\\eb9d"}),e.runAll=new e("run-all",{fontCharacter:"\\eb9e"}),e.syncIgnored=new e("sync-ignored",{fontCharacter:"\\eb9f"}),e.pinned=new e("pinned",{fontCharacter:"\\eba0"}),e.githubInverted=new e("github-inverted",{fontCharacter:"\\eba1"}),e.debugAlt=new e("debug-alt",{fontCharacter:"\\eb91"}),e.serverProcess=new e("server-process",{fontCharacter:"\\eba2"}),e.serverEnvironment=new e("server-environment",{fontCharacter:"\\eba3"}),e.pass=new e("pass",{fontCharacter:"\\eba4"}),e.stopCircle=new e("stop-circle",{fontCharacter:"\\eba5"}),e.playCircle=new e("play-circle",{fontCharacter:"\\eba6"}),e.record=new e("record",{fontCharacter:"\\eba7"}),e.debugAltSmall=new e("debug-alt-small",{fontCharacter:"\\eba8"}),e.vmConnect=new e("vm-connect",{fontCharacter:"\\eba9"}),e.cloud=new e("cloud",{fontCharacter:"\\ebaa"}),e.merge=new e("merge",{fontCharacter:"\\ebab"}),e.exportIcon=new e("export",{fontCharacter:"\\ebac"}),e.graphLeft=new e("graph-left",{fontCharacter:"\\ebad"}),e.magnet=new e("magnet",{fontCharacter:"\\ebae"}),e.notebook=new e("notebook",{fontCharacter:"\\ebaf"}),e.redo=new e("redo",{fontCharacter:"\\ebb0"}),e.checkAll=new e("check-all",{fontCharacter:"\\ebb1"}),e.pinnedDirty=new e("pinned-dirty",{fontCharacter:"\\ebb2"}),e.passFilled=new e("pass-filled",{fontCharacter:"\\ebb3"}),e.circleLargeFilled=new e("circle-large-filled",{fontCharacter:"\\ebb4"}),e.circleLargeOutline=new e("circle-large-outline",{fontCharacter:"\\ebb5"}),e.combine=new e("combine",{fontCharacter:"\\ebb6"}),e.gather=new e("gather",{fontCharacter:"\\ebb6"}),e.table=new e("table",{fontCharacter:"\\ebb7"}),e.variableGroup=new e("variable-group",{fontCharacter:"\\ebb8"}),e.typeHierarchy=new e("type-hierarchy",{fontCharacter:"\\ebb9"}),e.typeHierarchySub=new e("type-hierarchy-sub",{fontCharacter:"\\ebba"}),e.typeHierarchySuper=new e("type-hierarchy-super",{fontCharacter:"\\ebbb"}),e.gitPullRequestCreate=new e("git-pull-request-create",{fontCharacter:"\\ebbc"}),e.runAbove=new e("run-above",{fontCharacter:"\\ebbd"}),e.runBelow=new e("run-below",{fontCharacter:"\\ebbe"}),e.notebookTemplate=new e("notebook-template",{fontCharacter:"\\ebbf"}),e.debugRerun=new e("debug-rerun",{fontCharacter:"\\ebc0"}),e.workspaceTrusted=new e("workspace-trusted",{fontCharacter:"\\ebc1"}),e.workspaceUntrusted=new e("workspace-untrusted",{fontCharacter:"\\ebc2"}),e.workspaceUnspecified=new e("workspace-unspecified",{fontCharacter:"\\ebc3"}),e.terminalCmd=new e("terminal-cmd",{fontCharacter:"\\ebc4"}),e.terminalDebian=new e("terminal-debian",{fontCharacter:"\\ebc5"}),e.terminalLinux=new e("terminal-linux",{fontCharacter:"\\ebc6"}),e.terminalPowershell=new e("terminal-powershell",{fontCharacter:"\\ebc7"}),e.terminalTmux=new e("terminal-tmux",{fontCharacter:"\\ebc8"}),e.terminalUbuntu=new e("terminal-ubuntu",{fontCharacter:"\\ebc9"}),e.terminalBash=new e("terminal-bash",{fontCharacter:"\\ebca"}),e.arrowSwap=new e("arrow-swap",{fontCharacter:"\\ebcb"}),e.copy=new e("copy",{fontCharacter:"\\ebcc"}),e.personAdd=new e("person-add",{fontCharacter:"\\ebcd"}),e.filterFilled=new e("filter-filled",{fontCharacter:"\\ebce"}),e.wand=new e("wand",{fontCharacter:"\\ebcf"}),e.debugLineByLine=new e("debug-line-by-line",{fontCharacter:"\\ebd0"}),e.inspect=new e("inspect",{fontCharacter:"\\ebd1"}),e.layers=new e("layers",{fontCharacter:"\\ebd2"}),e.layersDot=new e("layers-dot",{fontCharacter:"\\ebd3"}),e.layersActive=new e("layers-active",{fontCharacter:"\\ebd4"}),e.compass=new e("compass",{fontCharacter:"\\ebd5"}),e.compassDot=new e("compass-dot",{fontCharacter:"\\ebd6"}),e.compassActive=new e("compass-active",{fontCharacter:"\\ebd7"}),e.azure=new e("azure",{fontCharacter:"\\ebd8"}),e.issueDraft=new e("issue-draft",{fontCharacter:"\\ebd9"}),e.gitPullRequestClosed=new e("git-pull-request-closed",{fontCharacter:"\\ebda"}),e.gitPullRequestDraft=new e("git-pull-request-draft",{fontCharacter:"\\ebdb"}),e.debugAll=new e("debug-all",{fontCharacter:"\\ebdc"}),e.debugCoverage=new e("debug-coverage",{fontCharacter:"\\ebdd"}),e.runErrors=new e("run-errors",{fontCharacter:"\\ebde"}),e.folderLibrary=new e("folder-library",{fontCharacter:"\\ebdf"}),e.debugContinueSmall=new e("debug-continue-small",{fontCharacter:"\\ebe0"}),e.beakerStop=new e("beaker-stop",{fontCharacter:"\\ebe1"}),e.graphLine=new e("graph-line",{fontCharacter:"\\ebe2"}),e.graphScatter=new e("graph-scatter",{fontCharacter:"\\ebe3"}),e.pieChart=new e("pie-chart",{fontCharacter:"\\ebe4"}),e.bracket=new e("bracket",e.json.definition),e.bracketDot=new e("bracket-dot",{fontCharacter:"\\ebe5"}),e.bracketError=new e("bracket-error",{fontCharacter:"\\ebe6"}),e.lockSmall=new e("lock-small",{fontCharacter:"\\ebe7"}),e.azureDevops=new e("azure-devops",{fontCharacter:"\\ebe8"}),e.verifiedFilled=new e("verified-filled",{fontCharacter:"\\ebe9"})}(l||(l={}))},6626:(e,t,i)=>{"use strict";i.d(t,{E:()=>o,r:()=>s});const n=Object.prototype.hasOwnProperty;function o(e,t){for(let i in e)if(n.call(e,i)){if(!1===t({key:i,value:e[i]},(function(){delete e[i]})))return}}class s{constructor(){this.map=new Map}add(e,t){let i=this.map.get(e);i||(i=new Set,this.map.set(e,i)),i.add(t)}delete(e,t){const i=this.map.get(e);i&&(i.delete(t),0===i.size&&this.map.delete(e))}forEach(e,t){const i=this.map.get(e);i&&i.forEach(t)}}},41264:(e,t,i)=>{"use strict";function n(e,t){const i=Math.pow(10,t);return Math.round(e*i)/i}i.d(t,{Il:()=>a,VS:()=>o,tx:()=>r});class o{constructor(e,t,i,o=1){this._rgbaBrand=void 0,this.r=0|Math.min(255,Math.max(0,e)),this.g=0|Math.min(255,Math.max(0,t)),this.b=0|Math.min(255,Math.max(0,i)),this.a=n(Math.max(Math.min(1,o),0),3)}static equals(e,t){return e.r===t.r&&e.g===t.g&&e.b===t.b&&e.a===t.a}}class s{constructor(e,t,i,o){this._hslaBrand=void 0,this.h=0|Math.max(Math.min(360,e),0),this.s=n(Math.max(Math.min(1,t),0),3),this.l=n(Math.max(Math.min(1,i),0),3),this.a=n(Math.max(Math.min(1,o),0),3)}static equals(e,t){return e.h===t.h&&e.s===t.s&&e.l===t.l&&e.a===t.a}static fromRGBA(e){const t=e.r/255,i=e.g/255,n=e.b/255,o=e.a,r=Math.max(t,i,n),a=Math.min(t,i,n);let l=0,c=0;const d=(a+r)/2,h=r-a;if(h>0){switch(c=Math.min(d<=.5?h/(2*d):h/(2-2*d),1),r){case t:l=(i-n)/h+(i<n?6:0);break;case i:l=(n-t)/h+2;break;case n:l=(t-i)/h+4}l*=60,l=Math.round(l)}return new s(l,c,d,o)}static _hue2rgb(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e}static toRGBA(e){const t=e.h/360,{s:i,l:n,a:r}=e;let a,l,c;if(0===i)a=l=c=n;else{const e=n<.5?n*(1+i):n+i-n*i,o=2*n-e;a=s._hue2rgb(o,e,t+1/3),l=s._hue2rgb(o,e,t),c=s._hue2rgb(o,e,t-1/3)}return new o(Math.round(255*a),Math.round(255*l),Math.round(255*c),r)}}class r{constructor(e,t,i,o){this._hsvaBrand=void 0,this.h=0|Math.max(Math.min(360,e),0),this.s=n(Math.max(Math.min(1,t),0),3),this.v=n(Math.max(Math.min(1,i),0),3),this.a=n(Math.max(Math.min(1,o),0),3)}static equals(e,t){return e.h===t.h&&e.s===t.s&&e.v===t.v&&e.a===t.a}static fromRGBA(e){const t=e.r/255,i=e.g/255,n=e.b/255,o=Math.max(t,i,n),s=o-Math.min(t,i,n),a=0===o?0:s/o;let l;return l=0===s?0:o===t?((i-n)/s%6+6)%6:o===i?(n-t)/s+2:(t-i)/s+4,new r(Math.round(60*l),a,o,e.a)}static toRGBA(e){const{h:t,s:i,v:n,a:s}=e,r=n*i,a=r*(1-Math.abs(t/60%2-1)),l=n-r;let[c,d,h]=[0,0,0];return t<60?(c=r,d=a):t<120?(c=a,d=r):t<180?(d=r,h=a):t<240?(d=a,h=r):t<300?(c=a,h=r):t<=360&&(c=r,h=a),c=Math.round(255*(c+l)),d=Math.round(255*(d+l)),h=Math.round(255*(h+l)),new o(c,d,h,s)}}class a{constructor(e){if(!e)throw new Error("é¢œè‰²éœ€è¦ä¸€ä¸ªå€¼");if(e instanceof o)this.rgba=e;else if(e instanceof s)this._hsla=e,this.rgba=s.toRGBA(e);else{if(!(e instanceof r))throw new Error("æ— æ•ˆé¢œè‰²å‚æ•°");this._hsva=e,this.rgba=r.toRGBA(e)}}static fromHex(e){return a.Format.CSS.parseHex(e)||a.red}get hsla(){return this._hsla?this._hsla:s.fromRGBA(this.rgba)}get hsva(){return this._hsva?this._hsva:r.fromRGBA(this.rgba)}equals(e){return!!e&&o.equals(this.rgba,e.rgba)&&s.equals(this.hsla,e.hsla)&&r.equals(this.hsva,e.hsva)}getRelativeLuminance(){return n(.2126*a._relativeLuminanceForComponent(this.rgba.r)+.7152*a._relativeLuminanceForComponent(this.rgba.g)+.0722*a._relativeLuminanceForComponent(this.rgba.b),4)}static _relativeLuminanceForComponent(e){const t=e/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}isLighter(){return(299*this.rgba.r+587*this.rgba.g+114*this.rgba.b)/1e3>=128}isLighterThan(e){return this.getRelativeLuminance()>e.getRelativeLuminance()}isDarkerThan(e){return this.getRelativeLuminance()<e.getRelativeLuminance()}lighten(e){return new a(new s(this.hsla.h,this.hsla.s,this.hsla.l+this.hsla.l*e,this.hsla.a))}darken(e){return new a(new s(this.hsla.h,this.hsla.s,this.hsla.l-this.hsla.l*e,this.hsla.a))}transparent(e){const{r:t,g:i,b:n,a:s}=this.rgba;return new a(new o(t,i,n,s*e))}isTransparent(){return 0===this.rgba.a}isOpaque(){return 1===this.rgba.a}opposite(){return new a(new o(255-this.rgba.r,255-this.rgba.g,255-this.rgba.b,this.rgba.a))}toString(){return this._toString||(this._toString=a.Format.CSS.format(this)),this._toString}static getLighterColor(e,t,i){if(e.isLighterThan(t))return e;i=i||.5;const n=e.getRelativeLuminance(),o=t.getRelativeLuminance();return i=i*(o-n)/o,e.lighten(i)}static getDarkerColor(e,t,i){if(e.isDarkerThan(t))return e;i=i||.5;const n=e.getRelativeLuminance();return i=i*(n-t.getRelativeLuminance())/n,e.darken(i)}}a.white=new a(new o(255,255,255,1)),a.black=new a(new o(0,0,0,1)),a.red=new a(new o(255,0,0,1)),a.blue=new a(new o(0,0,255,1)),a.cyan=new a(new o(0,255,255,1)),a.lightgrey=new a(new o(211,211,211,1)),a.transparent=new a(new o(0,0,0,0)),function(e){let t;!function(t){let i;!function(t){function i(e){const t=e.toString(16);return 2!==t.length?"0"+t:t}function n(e){switch(e){case 48:return 0;case 49:return 1;case 50:return 2;case 51:return 3;case 52:return 4;case 53:return 5;case 54:return 6;case 55:return 7;case 56:return 8;case 57:return 9;case 97:case 65:return 10;case 98:case 66:return 11;case 99:case 67:return 12;case 100:case 68:return 13;case 101:case 69:return 14;case 102:case 70:return 15}return 0}t.formatRGB=function(t){return 1===t.rgba.a?`rgb(${t.rgba.r}, ${t.rgba.g}, ${t.rgba.b})`:e.Format.CSS.formatRGBA(t)},t.formatRGBA=function(e){return`rgba(${e.rgba.r}, ${e.rgba.g}, ${e.rgba.b}, ${+e.rgba.a.toFixed(2)})`},t.formatHSL=function(t){return 1===t.hsla.a?`hsl(${t.hsla.h}, ${(100*t.hsla.s).toFixed(2)}%, ${(100*t.hsla.l).toFixed(2)}%)`:e.Format.CSS.formatHSLA(t)},t.formatHSLA=function(e){return`hsla(${e.hsla.h}, ${(100*e.hsla.s).toFixed(2)}%, ${(100*e.hsla.l).toFixed(2)}%, ${e.hsla.a.toFixed(2)})`},t.formatHex=function(e){return`#${i(e.rgba.r)}${i(e.rgba.g)}${i(e.rgba.b)}`},t.formatHexA=function(t,n=!1){return n&&1===t.rgba.a?e.Format.CSS.formatHex(t):`#${i(t.rgba.r)}${i(t.rgba.g)}${i(t.rgba.b)}${i(Math.round(255*t.rgba.a))}`},t.format=function(t){return t.isOpaque()?e.Format.CSS.formatHex(t):e.Format.CSS.formatRGBA(t)},t.parseHex=function(t){const i=t.length;if(0===i)return null;if(35!==t.charCodeAt(0))return null;if(7===i){const i=16*n(t.charCodeAt(1))+n(t.charCodeAt(2)),s=16*n(t.charCodeAt(3))+n(t.charCodeAt(4)),r=16*n(t.charCodeAt(5))+n(t.charCodeAt(6));return new e(new o(i,s,r,1))}if(9===i){const i=16*n(t.charCodeAt(1))+n(t.charCodeAt(2)),s=16*n(t.charCodeAt(3))+n(t.charCodeAt(4)),r=16*n(t.charCodeAt(5))+n(t.charCodeAt(6)),a=16*n(t.charCodeAt(7))+n(t.charCodeAt(8));return new e(new o(i,s,r,a/255))}if(4===i){const i=n(t.charCodeAt(1)),s=n(t.charCodeAt(2)),r=n(t.charCodeAt(3));return new e(new o(16*i+i,16*s+s,16*r+r))}if(5===i){const i=n(t.charCodeAt(1)),s=n(t.charCodeAt(2)),r=n(t.charCodeAt(3)),a=n(t.charCodeAt(4));return new e(new o(16*i+i,16*s+s,16*r+r,(16*a+a)/255))}return null}}(i=t.CSS||(t.CSS={}))}(t=e.Format||(e.Format={}))}(a||(a={}))},49898:(e,t,i)=>{"use strict";function n(e,t,i){let n=null,o=null;if("function"==typeof i.value?(n="value",o=i.value,0!==o.length&&console.warn("Memoize should only be used in functions with zero parameters")):"function"==typeof i.get&&(n="get",o=i.get),!o)throw new Error("not supported");const s=`$memoize$${t}`;i[n]=function(...e){return this.hasOwnProperty(s)||Object.defineProperty(this,s,{configurable:!1,enumerable:!1,writable:!1,value:o.apply(this,e)}),this[s]}}i.d(t,{H:()=>n})},2484:(e,t,i)=>{"use strict";i.d(t,{Hs:()=>d,a$:()=>r});class n{constructor(e,t,i,n){this.originalStart=e,this.originalLength=t,this.modifiedStart=i,this.modifiedLength=n}getOriginalEnd(){return this.originalStart+this.originalLength}getModifiedEnd(){return this.modifiedStart+this.modifiedLength}}var o=i(89954);class s{constructor(e){this.source=e}getElements(){const e=this.source,t=new Int32Array(e.length);for(let i=0,n=e.length;i<n;i++)t[i]=e.charCodeAt(i);return t}}function r(e,t,i){return new d(new s(e),new s(t)).ComputeDiff(i).changes}class a{static Assert(e,t){if(!e)throw new Error(t)}}class l{static Copy(e,t,i,n,o){for(let s=0;s<o;s++)i[n+s]=e[t+s]}static Copy2(e,t,i,n,o){for(let s=0;s<o;s++)i[n+s]=e[t+s]}}class c{constructor(){this.m_changes=[],this.m_originalStart=1073741824,this.m_modifiedStart=1073741824,this.m_originalCount=0,this.m_modifiedCount=0}MarkNextChange(){(this.m_originalCount>0||this.m_modifiedCount>0)&&this.m_changes.push(new n(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_originalCount++}AddModifiedElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class d{constructor(e,t,i=null){this.ContinueProcessingPredicate=i,this._originalSequence=e,this._modifiedSequence=t;const[n,o,s]=d._getElements(e),[r,a,l]=d._getElements(t);this._hasStrings=s&&l,this._originalStringElements=n,this._originalElementsOrHash=o,this._modifiedStringElements=r,this._modifiedElementsOrHash=a,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(e){return e.length>0&&"string"==typeof e[0]}static _getElements(e){const t=e.getElements();if(d._isStringArray(t)){const e=new Int32Array(t.length);for(let i=0,n=t.length;i<n;i++)e[i]=(0,o.Cv)(t[i],0);return[t,e,!0]}return t instanceof Int32Array?[[],t,!1]:[[],new Int32Array(t),!1]}ElementsAreEqual(e,t){return this._originalElementsOrHash[e]===this._modifiedElementsOrHash[t]&&(!this._hasStrings||this._originalStringElements[e]===this._modifiedStringElements[t])}ElementsAreStrictEqual(e,t){if(!this.ElementsAreEqual(e,t))return!1;return d._getStrictElement(this._originalSequence,e)===d._getStrictElement(this._modifiedSequence,t)}static _getStrictElement(e,t){return"function"==typeof e.getStrictElement?e.getStrictElement(t):null}OriginalElementsAreEqual(e,t){return this._originalElementsOrHash[e]===this._originalElementsOrHash[t]&&(!this._hasStrings||this._originalStringElements[e]===this._originalStringElements[t])}ModifiedElementsAreEqual(e,t){return this._modifiedElementsOrHash[e]===this._modifiedElementsOrHash[t]&&(!this._hasStrings||this._modifiedStringElements[e]===this._modifiedStringElements[t])}ComputeDiff(e){return this._ComputeDiff(0,this._originalElementsOrHash.length-1,0,this._modifiedElementsOrHash.length-1,e)}_ComputeDiff(e,t,i,n,o){const s=[!1];let r=this.ComputeDiffRecursive(e,t,i,n,s);return o&&(r=this.PrettifyChanges(r)),{quitEarly:s[0],changes:r}}ComputeDiffRecursive(e,t,i,o,s){for(s[0]=!1;e<=t&&i<=o&&this.ElementsAreEqual(e,i);)e++,i++;for(;t>=e&&o>=i&&this.ElementsAreEqual(t,o);)t--,o--;if(e>t||i>o){let s;return i<=o?(a.Assert(e===t+1,"originalStart should only be one more than originalEnd"),s=[new n(e,0,i,o-i+1)]):e<=t?(a.Assert(i===o+1,"modifiedStart should only be one more than modifiedEnd"),s=[new n(e,t-e+1,i,0)]):(a.Assert(e===t+1,"originalStart should only be one more than originalEnd"),a.Assert(i===o+1,"modifiedStart should only be one more than modifiedEnd"),s=[]),s}const r=[0],l=[0],c=this.ComputeRecursionPoint(e,t,i,o,r,l,s),d=r[0],h=l[0];if(null!==c)return c;if(!s[0]){const r=this.ComputeDiffRecursive(e,d,i,h,s);let a=[];return a=s[0]?[new n(d+1,t-(d+1)+1,h+1,o-(h+1)+1)]:this.ComputeDiffRecursive(d+1,t,h+1,o,s),this.ConcatenateChanges(r,a)}return[new n(e,t-e+1,i,o-i+1)]}WALKTRACE(e,t,i,o,s,r,a,l,d,h,u,g,p,f,m,v,_,b){let w=null,y=null,C=new c,x=t,S=i,k=p[0]-v[0]-o,L=-1073741824,N=this.m_forwardHistory.length-1;do{const t=k+e;t===x||t<S&&d[t-1]<d[t+1]?(f=(u=d[t+1])-k-o,u<L&&C.MarkNextChange(),L=u,C.AddModifiedElement(u+1,f),k=t+1-e):(f=(u=d[t-1]+1)-k-o,u<L&&C.MarkNextChange(),L=u-1,C.AddOriginalElement(u,f+1),k=t-1-e),N>=0&&(e=(d=this.m_forwardHistory[N])[0],x=1,S=d.length-1)}while(--N>=-1);if(w=C.getReverseChanges(),b[0]){let e=p[0]+1,t=v[0]+1;if(null!==w&&w.length>0){const i=w[w.length-1];e=Math.max(e,i.getOriginalEnd()),t=Math.max(t,i.getModifiedEnd())}y=[new n(e,g-e+1,t,m-t+1)]}else{C=new c,x=r,S=a,k=p[0]-v[0]-l,L=1073741824,N=_?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const e=k+s;e===x||e<S&&h[e-1]>=h[e+1]?(f=(u=h[e+1]-1)-k-l,u>L&&C.MarkNextChange(),L=u+1,C.AddOriginalElement(u+1,f+1),k=e+1-s):(f=(u=h[e-1])-k-l,u>L&&C.MarkNextChange(),L=u,C.AddModifiedElement(u+1,f+1),k=e-1-s),N>=0&&(s=(h=this.m_reverseHistory[N])[0],x=1,S=h.length-1)}while(--N>=-1);y=C.getChanges()}return this.ConcatenateChanges(w,y)}ComputeRecursionPoint(e,t,i,o,s,r,a){let c=0,d=0,h=0,u=0,g=0,p=0;e--,i--,s[0]=0,r[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const f=t-e+(o-i),m=f+1,v=new Int32Array(m),_=new Int32Array(m),b=o-i,w=t-e,y=e-i,C=t-o,x=(w-b)%2==0;v[b]=e,_[w]=t,a[0]=!1;for(let S=1;S<=f/2+1;S++){let f=0,k=0;h=this.ClipDiagonalBound(b-S,S,b,m),u=this.ClipDiagonalBound(b+S,S,b,m);for(let e=h;e<=u;e+=2){c=e===h||e<u&&v[e-1]<v[e+1]?v[e+1]:v[e-1]+1,d=c-(e-b)-y;const i=c;for(;c<t&&d<o&&this.ElementsAreEqual(c+1,d+1);)c++,d++;if(v[e]=c,c+d>f+k&&(f=c,k=d),!x&&Math.abs(e-w)<=S-1&&c>=_[e])return s[0]=c,r[0]=d,i<=_[e]&&S<=1448?this.WALKTRACE(b,h,u,y,w,g,p,C,v,_,c,t,s,d,o,r,x,a):null}const L=(f-e+(k-i)-S)/2;if(null!==this.ContinueProcessingPredicate&&!this.ContinueProcessingPredicate(f,L))return a[0]=!0,s[0]=f,r[0]=k,L>0&&S<=1448?this.WALKTRACE(b,h,u,y,w,g,p,C,v,_,c,t,s,d,o,r,x,a):(e++,i++,[new n(e,t-e+1,i,o-i+1)]);g=this.ClipDiagonalBound(w-S,S,w,m),p=this.ClipDiagonalBound(w+S,S,w,m);for(let n=g;n<=p;n+=2){c=n===g||n<p&&_[n-1]>=_[n+1]?_[n+1]-1:_[n-1],d=c-(n-w)-C;const l=c;for(;c>e&&d>i&&this.ElementsAreEqual(c,d);)c--,d--;if(_[n]=c,x&&Math.abs(n-b)<=S&&c<=v[n])return s[0]=c,r[0]=d,l>=v[n]&&S<=1448?this.WALKTRACE(b,h,u,y,w,g,p,C,v,_,c,t,s,d,o,r,x,a):null}if(S<=1447){let e=new Int32Array(u-h+2);e[0]=b-h+1,l.Copy2(v,h,e,1,u-h+1),this.m_forwardHistory.push(e),e=new Int32Array(p-g+2),e[0]=w-g+1,l.Copy2(_,g,e,1,p-g+1),this.m_reverseHistory.push(e)}}return this.WALKTRACE(b,h,u,y,w,g,p,C,v,_,c,t,s,d,o,r,x,a)}PrettifyChanges(e){for(let t=0;t<e.length;t++){const i=e[t],n=t<e.length-1?e[t+1].originalStart:this._originalElementsOrHash.length,o=t<e.length-1?e[t+1].modifiedStart:this._modifiedElementsOrHash.length,s=i.originalLength>0,r=i.modifiedLength>0;for(;i.originalStart+i.originalLength<n&&i.modifiedStart+i.modifiedLength<o&&(!s||this.OriginalElementsAreEqual(i.originalStart,i.originalStart+i.originalLength))&&(!r||this.ModifiedElementsAreEqual(i.modifiedStart,i.modifiedStart+i.modifiedLength));){const e=this.ElementsAreStrictEqual(i.originalStart,i.modifiedStart);if(this.ElementsAreStrictEqual(i.originalStart+i.originalLength,i.modifiedStart+i.modifiedLength)&&!e)break;i.originalStart++,i.modifiedStart++}let a=[null];t<e.length-1&&this.ChangesOverlap(e[t],e[t+1],a)&&(e[t]=a[0],e.splice(t+1,1),t--)}for(let t=e.length-1;t>=0;t--){const i=e[t];let n=0,o=0;if(t>0){const i=e[t-1];n=i.originalStart+i.originalLength,o=i.modifiedStart+i.modifiedLength}const s=i.originalLength>0,r=i.modifiedLength>0;let a=0,l=this._boundaryScore(i.originalStart,i.originalLength,i.modifiedStart,i.modifiedLength);for(let e=1;;e++){const t=i.originalStart-e,c=i.modifiedStart-e;if(t<n||c<o)break;if(s&&!this.OriginalElementsAreEqual(t,t+i.originalLength))break;if(r&&!this.ModifiedElementsAreEqual(c,c+i.modifiedLength))break;const d=(t===n&&c===o?5:0)+this._boundaryScore(t,i.originalLength,c,i.modifiedLength);d>l&&(l=d,a=e)}i.originalStart-=a,i.modifiedStart-=a;const c=[null];t>0&&this.ChangesOverlap(e[t-1],e[t],c)&&(e[t-1]=c[0],e.splice(t,1),t++)}if(this._hasStrings)for(let t=1,i=e.length;t<i;t++){const i=e[t-1],n=e[t],o=n.originalStart-i.originalStart-i.originalLength,s=i.originalStart,r=n.originalStart+n.originalLength,a=r-s,l=i.modifiedStart,c=n.modifiedStart+n.modifiedLength,d=c-l;if(o<5&&a<20&&d<20){const e=this._findBetterContiguousSequence(s,a,l,d,o);if(e){const[t,s]=e;t===i.originalStart+i.originalLength&&s===i.modifiedStart+i.modifiedLength||(i.originalLength=t-i.originalStart,i.modifiedLength=s-i.modifiedStart,n.originalStart=t+o,n.modifiedStart=s+o,n.originalLength=r-n.originalStart,n.modifiedLength=c-n.modifiedStart)}}}return e}_findBetterContiguousSequence(e,t,i,n,o){if(t<o||n<o)return null;const s=e+t-o+1,r=i+n-o+1;let a=0,l=0,c=0;for(let t=e;t<s;t++)for(let e=i;e<r;e++){const i=this._contiguousSequenceScore(t,e,o);i>0&&i>a&&(a=i,l=t,c=e)}return a>0?[l,c]:null}_contiguousSequenceScore(e,t,i){let n=0;for(let o=0;o<i;o++){if(!this.ElementsAreEqual(e+o,t+o))return 0;n+=this._originalStringElements[e+o].length}return n}_OriginalIsBoundary(e){return e<=0||e>=this._originalElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._originalStringElements[e])}_OriginalRegionIsBoundary(e,t){if(this._OriginalIsBoundary(e)||this._OriginalIsBoundary(e-1))return!0;if(t>0){const i=e+t;if(this._OriginalIsBoundary(i-1)||this._OriginalIsBoundary(i))return!0}return!1}_ModifiedIsBoundary(e){return e<=0||e>=this._modifiedElementsOrHash.length-1||this._hasStrings&&/^\s*$/.test(this._modifiedStringElements[e])}_ModifiedRegionIsBoundary(e,t){if(this._ModifiedIsBoundary(e)||this._ModifiedIsBoundary(e-1))return!0;if(t>0){const i=e+t;if(this._ModifiedIsBoundary(i-1)||this._ModifiedIsBoundary(i))return!0}return!1}_boundaryScore(e,t,i,n){return(this._OriginalRegionIsBoundary(e,t)?1:0)+(this._ModifiedRegionIsBoundary(i,n)?1:0)}ConcatenateChanges(e,t){let i=[];if(0===e.length||0===t.length)return t.length>0?t:e;if(this.ChangesOverlap(e[e.length-1],t[0],i)){const n=new Array(e.length+t.length-1);return l.Copy(e,0,n,0,e.length-1),n[e.length-1]=i[0],l.Copy(t,1,n,e.length,t.length-1),n}{const i=new Array(e.length+t.length);return l.Copy(e,0,i,0,e.length),l.Copy(t,0,i,e.length,t.length),i}}ChangesOverlap(e,t,i){if(a.Assert(e.originalStart<=t.originalStart,"Left change is not less than or equal to right change"),a.Assert(e.modifiedStart<=t.modifiedStart,"Left change is not less than or equal to right change"),e.originalStart+e.originalLength>=t.originalStart||e.modifiedStart+e.modifiedLength>=t.modifiedStart){const o=e.originalStart;let s=e.originalLength;const r=e.modifiedStart;let a=e.modifiedLength;return e.originalStart+e.originalLength>=t.originalStart&&(s=t.originalStart+t.originalLength-e.originalStart),e.modifiedStart+e.modifiedLength>=t.modifiedStart&&(a=t.modifiedStart+t.modifiedLength-e.modifiedStart),i[0]=new n(o,s,r,a),!0}return i[0]=null,!1}ClipDiagonalBound(e,t,i,n){if(e>=0&&e<n)return e;const o=t%2==0;if(e<0){return o===(i%2==0)?0:1}return o===((n-i-1)%2==0)?n-1:n-2}}},17301:(e,t,i)=>{"use strict";i.d(t,{B8:()=>u,Cp:()=>s,F0:()=>c,L6:()=>h,VV:()=>l,b1:()=>d,dL:()=>o,ri:()=>r});const n=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout((()=>{if(e.stack)throw new Error(e.message+"\n\n"+e.stack);throw e}),0)}}emit(e){this.listeners.forEach((t=>{t(e)}))}onUnexpectedError(e){this.unexpectedErrorHandler(e),this.emit(e)}onUnexpectedExternalError(e){this.unexpectedErrorHandler(e)}};function o(e){l(e)||n.onUnexpectedError(e)}function s(e){l(e)||n.onUnexpectedExternalError(e)}function r(e){if(e instanceof Error){let{name:t,message:i}=e;return{$isError:!0,name:t,message:i,stack:e.stacktrace||e.stack}}return e}const a="Canceled";function l(e){return e instanceof Error&&e.name===a&&e.message===a}function c(){const e=new Error(a);return e.name=e.message,e}function d(e){return e?new Error(`Illegal argument: ${e}`):new Error("Illegal argument")}function h(e){return e?new Error(`Illegal state: ${e}`):new Error("Illegal state")}class u extends Error{constructor(e){super("NotSupported"),e&&(this.message=e)}}},4669:(e,t,i)=>{"use strict";i.d(t,{D0:()=>h,E7:()=>u,K3:()=>d,Q5:()=>c,ZD:()=>g,ju:()=>n});var n,o=i(17301),s=i(5976),r=i(91741),a=i(84013);!function(e){function t(e){return(t,i=null,n)=>{let o,s=!1;return o=e((e=>{if(!s)return o?o.dispose():s=!0,t.call(i,e)}),null,n),s&&o.dispose(),o}}function i(e,t){return a(((i,n=null,o)=>e((e=>i.call(n,t(e))),null,o)))}function n(e,t){return a(((i,n=null,o)=>e((e=>{t(e),i.call(n,e)}),null,o)))}function o(e,t){return a(((i,n=null,o)=>e((e=>t(e)&&i.call(n,e)),null,o)))}function r(e,t,n){let o=n;return i(e,(e=>(o=t(o,e),o)))}function a(e){let t;const i=new c({onFirstListenerAdd(){t=e(i.fire,i)},onLastListenerRemove(){t.dispose()}});return i.event}function l(e,t,i=100,n=!1,o){let s,r,a,l=0;const d=new c({leakWarningThreshold:o,onFirstListenerAdd(){s=e((e=>{l++,r=t(r,e),n&&!a&&(d.fire(r),r=void 0),clearTimeout(a),a=setTimeout((()=>{const e=r;r=void 0,a=void 0,(!n||l>1)&&d.fire(e),l=0}),i)}))},onLastListenerRemove(){s.dispose()}});return d.event}function d(e,t=((e,t)=>e===t)){let i,n=!0;return o(e,(e=>{const o=n||!t(e,i);return n=!1,i=e,o}))}e.None=()=>s.JT.None,e.once=t,e.map=i,e.forEach=n,e.filter=o,e.signal=function(e){return e},e.any=function(...e){return(t,i=null,n)=>(0,s.F8)(...e.map((e=>e((e=>t.call(i,e)),null,n))))},e.reduce=r,e.debounce=l,e.latch=d,e.split=function(t,i){return[e.filter(t,i),e.filter(t,(e=>!i(e)))]},e.buffer=function(e,t=!1,i=[]){let n=i.slice(),o=e((e=>{n?n.push(e):r.fire(e)}));const s=()=>{n&&n.forEach((e=>r.fire(e))),n=null},r=new c({onFirstListenerAdd(){o||(o=e((e=>r.fire(e))))},onFirstListenerDidAdd(){n&&(t?setTimeout(s):s())},onLastListenerRemove(){o&&o.dispose(),o=null}});return r.event};class h{constructor(e){this.event=e}map(e){return new h(i(this.event,e))}forEach(e){return new h(n(this.event,e))}filter(e){return new h(o(this.event,e))}reduce(e,t){return new h(r(this.event,e,t))}latch(){return new h(d(this.event))}debounce(e,t=100,i=!1,n){return new h(l(this.event,e,t,i,n))}on(e,t,i){return this.event(e,t,i)}once(e,i,n){return t(this.event)(e,i,n)}}e.chain=function(e){return new h(e)},e.fromNodeEventEmitter=function(e,t,i=(e=>e)){const n=(...e)=>o.fire(i(...e)),o=new c({onFirstListenerAdd:()=>e.on(t,n),onLastListenerRemove:()=>e.removeListener(t,n)});return o.event},e.fromDOMEventEmitter=function(e,t,i=(e=>e)){const n=(...e)=>o.fire(i(...e)),o=new c({onFirstListenerAdd:()=>e.addEventListener(t,n),onLastListenerRemove:()=>e.removeEventListener(t,n)});return o.event},e.toPromise=function(e){return new Promise((i=>t(e)(i)))}}(n||(n={}));class l{constructor(e){this._listenerCount=0,this._invocationCount=0,this._elapsedOverall=0,this._name=`${e}_${l._idPool++}`}start(e){this._stopWatch=new a.G(!0),this._listenerCount=e}stop(){if(this._stopWatch){const e=this._stopWatch.elapsed();this._elapsedOverall+=e,this._invocationCount+=1,console.info(`did FIRE ${this._name}: elapsed_ms: ${e.toFixed(5)}, listener: ${this._listenerCount} (elapsed_overall: ${this._elapsedOverall.toFixed(2)}, invocations: ${this._invocationCount})`),this._stopWatch=void 0}}}l._idPool=0;class c{constructor(e){var t;this._disposed=!1,this._options=e,this._leakageMon=void 0,this._perfMon=(null===(t=this._options)||void 0===t?void 0:t._profName)?new l(this._options._profName):void 0}get event(){return this._event||(this._event=(e,t,i)=>{var n;this._listeners||(this._listeners=new r.S);const o=this._listeners.isEmpty();o&&this._options&&this._options.onFirstListenerAdd&&this._options.onFirstListenerAdd(this);const a=this._listeners.push(t?[e,t]:e);o&&this._options&&this._options.onFirstListenerDidAdd&&this._options.onFirstListenerDidAdd(this),this._options&&this._options.onListenerDidAdd&&this._options.onListenerDidAdd(this,e,t);const l=null===(n=this._leakageMon)||void 0===n?void 0:n.check(this._listeners.size),c=(0,s.OF)((()=>{if(l&&l(),!this._disposed&&(a(),this._options&&this._options.onLastListenerRemove)){this._listeners&&!this._listeners.isEmpty()||this._options.onLastListenerRemove(this)}}));return i instanceof s.SL?i.add(c):Array.isArray(i)&&i.push(c),c}),this._event}fire(e){var t,i;if(this._listeners){this._deliveryQueue||(this._deliveryQueue=new r.S);for(let t of this._listeners)this._deliveryQueue.push([t,e]);for(null===(t=this._perfMon)||void 0===t||t.start(this._deliveryQueue.size);this._deliveryQueue.size>0;){const[e,t]=this._deliveryQueue.shift();try{"function"==typeof e?e.call(void 0,t):e[0].call(e[1],t)}catch(e){(0,o.dL)(e)}}null===(i=this._perfMon)||void 0===i||i.stop()}}dispose(){var e,t,i,n,o;this._disposed||(this._disposed=!0,null===(e=this._listeners)||void 0===e||e.clear(),null===(t=this._deliveryQueue)||void 0===t||t.clear(),null===(n=null===(i=this._options)||void 0===i?void 0:i.onLastListenerRemove)||void 0===n||n.call(i),null===(o=this._leakageMon)||void 0===o||o.dispose())}}class d extends c{constructor(e){super(e),this._isPaused=0,this._eventQueue=new r.S,this._mergeFn=null==e?void 0:e.merge}pause(){this._isPaused++}resume(){if(0!==this._isPaused&&0==--this._isPaused)if(this._mergeFn){const e=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(e))}else for(;!this._isPaused&&0!==this._eventQueue.size;)super.fire(this._eventQueue.shift())}fire(e){this._listeners&&(0!==this._isPaused?this._eventQueue.push(e):super.fire(e))}}class h extends d{constructor(e){var t;super(e),this._delay=null!==(t=e.delay)&&void 0!==t?t:100}fire(e){this._handle||(this.pause(),this._handle=setTimeout((()=>{this._handle=void 0,this.resume()}),this._delay)),super.fire(e)}}class u{constructor(){this.buffers=[]}wrapEvent(e){return(t,i,n)=>e((e=>{const n=this.buffers[this.buffers.length-1];n?n.push((()=>t.call(i,e))):t.call(i,e)}),void 0,n)}bufferEvents(e){const t=[];this.buffers.push(t);const i=e();return this.buffers.pop(),t.forEach((e=>e())),i}}class g{constructor(){this.listening=!1,this.inputEvent=n.None,this.inputEventListener=s.JT.None,this.emitter=new c({onFirstListenerDidAdd:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onLastListenerRemove:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(e){this.inputEvent=e,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=e(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}}},15527:(e,t,i)=>{"use strict";i.d(t,{KM:()=>a,fn:()=>r,oP:()=>c,vY:()=>l});var n=i(88721),o=i(1432),s=i(97295);function r(e){return-1===e.indexOf("/")&&(e=function(e){return e.replace(/[\\/]/g,n.KR.sep)}(e)),/^[a-zA-Z]:(\/|$)/.test(e)&&(e="/"+e),e}function a(e,t,i,o=n.ir){if(e===t)return!0;if(!e||!t)return!1;if(t.length>e.length)return!1;if(i){if(!(0,s.ok)(e,t))return!1;if(t.length===e.length)return!0;let i=t.length;return t.charAt(t.length-1)===o&&i--,e.charAt(i)===o}return t.charAt(t.length-1)!==o&&(t+=o),0===e.indexOf(t)}function l(e){const t=(0,n.Fv)(e);return o.ED?!(e.length>3)&&(c(t)&&(2===e.length||92===t.charCodeAt(2))):t===n.KR.sep}function c(e){return!!o.ED&&(((t=e.charCodeAt(0))>=65&&t<=90||t>=97&&t<=122)&&58===e.charCodeAt(1));var t}},75392:(e,t,i)=>{"use strict";i.d(t,{CL:()=>z,EW:()=>j,Ji:()=>r,KZ:()=>w,Oh:()=>L,ir:()=>a,jB:()=>N,l7:()=>$,mB:()=>D,or:()=>s});var n=i(43702),o=i(97295);function s(...e){return function(t,i){for(let n=0,o=e.length;n<o;n++){const o=e[n](t,i);if(o)return o}return null}}const r=function(e,t,i){if(!i||i.length<t.length)return null;let n;n=e?o.ok(i,t):0===i.indexOf(t);if(!n)return null;return t.length>0?[{start:0,end:t.length}]:[]}.bind(void 0,!0);function a(e,t){const i=t.toLowerCase().indexOf(e.toLowerCase());return-1===i?null:[{start:i,end:i+e.length}]}function l(e,t,i,n){if(i===e.length)return[];if(n===t.length)return null;if(e[i]===t[n]){let o=null;return(o=l(e,t,i+1,n+1))?m({start:n,end:n+1},o):null}return l(e,t,i,n+1)}function c(e){return 97<=e&&e<=122}function d(e){return 65<=e&&e<=90}function h(e){return 48<=e&&e<=57}function u(e){return 32===e||9===e||10===e||13===e}const g=new Set;function p(e){return u(e)||g.has(e)}function f(e){return c(e)||d(e)||h(e)}function m(e,t){return 0===t.length?t=[e]:e.end===t[0].start?t[0].start=e.start:t.unshift(e),t}function v(e,t){for(let i=t;i<e.length;i++){const t=e.charCodeAt(i);if(d(t)||h(t)||i>0&&!f(e.charCodeAt(i-1)))return i}return e.length}function _(e,t,i,n){if(i===e.length)return[];if(n===t.length)return null;if(e[i]!==t[n].toLowerCase())return null;{let o=null,s=n+1;for(o=_(e,t,i+1,n+1);!o&&(s=v(t,s))<t.length;)o=_(e,t,i+1,s),s++;return null===o?null:m({start:n,end:n+1},o)}}function b(e,t){if(!t)return null;if(0===(t=t.trim()).length)return null;if(!function(e){let t=0,i=0,n=0,o=0;for(let s=0;s<e.length;s++)n=e.charCodeAt(s),d(n)&&t++,c(n)&&i++,u(n)&&o++;return 0!==t&&0!==i||0!==o?t<=5:e.length<=30}(e))return null;if(t.length>60)return null;const i=function(e){let t=0,i=0,n=0,o=0,s=0;for(let r=0;r<e.length;r++)s=e.charCodeAt(r),d(s)&&t++,c(s)&&i++,f(s)&&n++,h(s)&&o++;return{upperPercent:t/e.length,lowerPercent:i/e.length,alphaPercent:n/e.length,numericPercent:o/e.length}}(t);if(!function(e){const{upperPercent:t,lowerPercent:i,alphaPercent:n,numericPercent:o}=e;return i>.2&&t<.8&&n>.6&&o<.2}(i)){if(!function(e){const{upperPercent:t,lowerPercent:i}=e;return 0===i&&t>.6}(i))return null;t=t.toLowerCase()}let n=null,o=0;for(e=e.toLowerCase();o<t.length&&null===(n=_(e,t,0,o));)o=v(t,o+1);return n}function w(e,t,i=!1){if(!t||0===t.length)return null;let n=null,o=0;for(e=e.toLowerCase(),t=t.toLowerCase();o<t.length&&null===(n=y(e,t,0,o,i));)o=C(t,o+1);return n}function y(e,t,i,n,o){if(i===e.length)return[];if(n===t.length)return null;if(s=e.charCodeAt(i),r=t.charCodeAt(n),s===r||p(s)&&p(r)){let s=null,r=n+1;if(s=y(e,t,i+1,n+1,o),!o)for(;!s&&(r=C(t,r))<t.length;)s=y(e,t,i+1,r,o),r++;return null===s?null:m({start:n,end:n+1},s)}return null;var s,r}function C(e,t){for(let i=t;i<e.length;i++)if(p(e.charCodeAt(i))||i>0&&p(e.charCodeAt(i-1)))return i;return e.length}"`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?".split("").forEach((e=>g.add(e.charCodeAt(0))));const x=s(r,b,a),S=s(r,b,(function(e,t){return l(e.toLowerCase(),t.toLowerCase(),0,0)})),k=new n.z6(1e4);function L(e,t,i=!1){if("string"!=typeof e||"string"!=typeof t)return null;let n=k.get(e);n||(n=new RegExp(o.un(e),"i"),k.set(e,n));const s=n.exec(t);return s?[{start:s.index,end:s.index+s[0].length}]:i?S(e,t):x(e,t)}function N(e,t,i,n,o,s){const r=Math.min(13,e.length);for(;i<r;i++){const r=j(e,t,i,n,o,s,!1);if(r)return r}return[0,s]}function D(e){if(void 0===e)return[];const t=[],i=e[1];for(let n=e.length-1;n>1;n--){const o=e[n]+i,s=t[t.length-1];s&&s.end===o?s.end=o+1:t.push({start:o,end:o+1})}return t}const I=128;function E(){const e=[],t=[];for(let e=0;e<=I;e++)t[e]=0;for(let i=0;i<=I;i++)e.push(t.slice(0));return e}function T(e){const t=[];for(let i=0;i<=e;i++)t[i]=0;return t}const M=T(2*I),A=T(2*I),O=E(),P=E(),R=E(),F=!1;function B(e,t,i,n,o){function s(e,t,i=" "){for(;e.length<t;)e=i+e;return e}let r=` |   |${n.split("").map((e=>s(e,3))).join("|")}\n`;for(let n=0;n<=i;n++)r+=0===n?" |":`${t[n-1]}|`,r+=e[n].slice(0,o+1).map((e=>s(e.toString(),3))).join("|")+"\n";return r}function V(e,t){if(t<0||t>=e.length)return!1;const i=e.codePointAt(t);switch(i){case 95:case 45:case 46:case 32:case 47:case 92:case 39:case 34:case 58:case 36:case 60:case 40:case 91:return!0;case void 0:return!1;default:return!!o.C8(i)}}function W(e,t){if(t<0||t>=e.length)return!1;switch(e.charCodeAt(t)){case 32:case 9:return!0;default:return!1}}function H(e,t,i){return t[e]!==i[e]}var z;function j(e,t,i,n,o,s,r){const a=e.length>I?I:e.length,l=n.length>I?I:n.length;if(i>=a||s>=l||a-i>l-s)return;if(!function(e,t,i,n,o,s,r=!1){for(;t<i&&o<s;)e[t]===n[o]&&(r&&(M[t]=o),t+=1),o+=1;return t===i}(t,i,a,o,s,l,!0))return;!function(e,t,i,n,o,s){let r=e-1,a=t-1;for(;r>=i&&a>=n;)o[r]===s[a]&&(A[r]=a,r--),a--}(a,l,i,s,t,o);let c=1,d=1,h=i,u=s;const g=[!1];for(c=1,h=i;h<a;c++,h++){const r=M[h],p=A[h],f=h+1<a?A[h+1]:l;for(d=r-s+1,u=r;u<f;d++,u++){let a=Number.MIN_SAFE_INTEGER,f=!1;u<=p&&(a=U(e,t,h,i,n,o,u,l,s,0===O[c-1][d-1],g));let m=0;a!==Number.MAX_SAFE_INTEGER&&(f=!0,m=a+P[c-1][d-1]);const v=u>r,_=v?P[c][d-1]+(O[c][d-1]>0?-5:0):0,b=u>r+1&&O[c][d-1]>0,w=b?P[c][d-2]+(O[c][d-2]>0?-5:0):0;if(b&&(!v||w>=_)&&(!f||w>=m))P[c][d]=w,R[c][d]=3,O[c][d]=0;else if(v&&(!f||_>=m))P[c][d]=_,R[c][d]=2,O[c][d]=0;else{if(!f)throw new Error("not possible");P[c][d]=m,R[c][d]=1,O[c][d]=O[c-1][d-1]+1}}}if(F&&function(e,t,i,n){e=e.substr(t),i=i.substr(n),console.log(B(P,e,e.length,i,i.length)),console.log(B(R,e,e.length,i,i.length)),console.log(B(O,e,e.length,i,i.length))}(e,i,n,s),!g[0]&&!r)return;c--,d--;const p=[P[c][d],s];let f=0,m=0;for(;c>=1;){let e=d;do{const t=R[c][e];if(3===t)e-=2;else{if(2!==t)break;e-=1}}while(e>=1);f>1&&t[i+c-1]===o[s+d-1]&&!H(e+s-1,n,o)&&f+1>O[c][e]&&(e=d),e===d?f++:f=1,m||(m=e),c--,d=e-1,p.push(d)}l===a&&(p[0]+=2);const v=m-a;return p[0]-=v,p}function U(e,t,i,n,o,s,r,a,l,c,d){if(t[i]!==s[r])return Number.MIN_SAFE_INTEGER;let h=1,u=!1;return r===i-n?h=e[i]===o[r]?7:5:!H(r,o,s)||0!==r&&H(r-1,o,s)?!V(s,r)||0!==r&&V(s,r-1)?(V(s,r-1)||W(s,r-1))&&(h=5,u=!0):h=5:(h=e[i]===o[r]?7:5,u=!0),h>1&&i===n&&(d[0]=!0),u||(u=H(r,o,s)||V(s,r-1)||W(s,r-1)),i===n?r>l&&(h-=u?3:5):h+=c?u?2:0:u?0:1,r+1===a&&(h-=u?3:5),h}function $(e,t,i,n,o,s,r){return function(e,t,i,n,o,s,r,a){let l=j(e,t,i,n,o,s,a);if(l&&!r)return l;if(e.length>=3){const t=Math.min(7,e.length-1);for(let r=i+1;r<t;r++){const t=K(e,r);if(t){const e=j(t,t.toLowerCase(),i,n,o,s,a);e&&(e[0]-=3,(!l||e[0]>l[0])&&(l=e))}}}return l}(e,t,i,n,o,s,!0,r)}function K(e,t){if(t+1>=e.length)return;const i=e[t],n=e[t+1];return i!==n?e.slice(0,t)+n+i+e.slice(t+2):void 0}!function(e){e.Default=[-100,0],e.isDefault=function(e){return!e||2===e.length&&-100===e[0]&&0===e[1]}}(z||(z={}))},88289:(e,t,i)=>{"use strict";function n(e){const t=this;let i,n=!1;return function(){return n||(n=!0,i=e.apply(t,arguments)),i}}i.d(t,{I:()=>n})},14118:(e,t,i)=>{"use strict";i.d(t,{EQ:()=>I,Qc:()=>E});var n=i(15393),o=i(15527),s=i(43702),r=i(88721),a=i(97295);const l="**",c="/",d="[/\\\\]",h="[^/\\\\]",u=/\//g;function g(e){switch(e){case 0:return"";case 1:return`${h}*?`;default:return`(?:${d}|${h}+${d}|${d}${h}+)*?`}}function p(e,t){if(!e)return[];const i=[];let n=!1,o=!1,s="";for(const r of e){switch(r){case t:if(!n&&!o){i.push(s),s="";continue}break;case"{":n=!0;break;case"}":n=!1;break;case"[":o=!0;break;case"]":o=!1}s+=r}return s&&i.push(s),i}function f(e){if(!e)return"";let t="";const i=p(e,c);if(i.every((e=>e===l)))t=".*";else{let e=!1;i.forEach(((n,o)=>{if(n===l)return void(e||(t+=g(2),e=!0));let s=!1,r="",u=!1,m="";for(const e of n)if("}"!==e&&s)r+=e;else if(!u||"]"===e&&m)switch(e){case"{":s=!0;continue;case"[":u=!0;continue;case"}":const i=`(?:${p(r,",").map((e=>f(e))).join("|")})`;t+=i,s=!1,r="";break;case"]":t+="["+m+"]",u=!1,m="";break;case"?":t+=h;continue;case"*":t+=g(1);continue;default:t+=a.ec(e)}else{let t;t="-"===e?e:"^"!==e&&"!"!==e||m?e===c?"":a.ec(e):"^",m+=t}o<i.length-1&&(i[o+1]!==l||o+2<i.length)&&(t+=d),e=!1}))}return t}const m=/^\*\*\/\*\.[\w\.-]+$/,v=/^\*\*\/([\w\.-]+)\/?$/,_=/^{\*\*\/[\*\.]?[\w\.-]+\/?(,\*\*\/[\*\.]?[\w\.-]+\/?)*}$/,b=/^{\*\*\/[\*\.]?[\w\.-]+(\/(\*\*)?)?(,\*\*\/[\*\.]?[\w\.-]+(\/(\*\*)?)?)*}$/,w=/^\*\*((\/[\w\.-]+)+)\/?$/,y=/^([\w\.-]+(\/[\w\.-]+)*)\/?$/,C=new s.z6(1e4),x=function(){return!1},S=function(){return null};function k(e,t){if(!e)return S;let i;i="string"!=typeof e?e.pattern:e,i=i.trim();const n=`${i}_${!!t.trimForExclusions}`;let o,s=C.get(n);if(s)return L(s,e);if(m.test(i)){const e=i.substr(4);s=function(t,n){return"string"==typeof t&&t.endsWith(e)?i:null}}else s=(o=v.exec(N(i,t)))?function(e,t){const i=`/${e}`,n=`\\${e}`,o=function(o,s){return"string"!=typeof o?null:s?s===e?t:null:o===e||o.endsWith(i)||o.endsWith(n)?t:null},s=[e];return o.basenames=s,o.patterns=[t],o.allBasenames=s,o}(o[1],i):(t.trimForExclusions?b:_).test(i)?function(e,t){const i=T(e.slice(1,-1).split(",").map((e=>k(e,t))).filter((e=>e!==S)),e),n=i.length;if(!n)return S;if(1===n)return i[0];const o=function(t,n){for(let o=0,s=i.length;o<s;o++)if(i[o](t,n))return e;return null},s=i.find((e=>!!e.allBasenames));s&&(o.allBasenames=s.allBasenames);const r=i.reduce(((e,t)=>t.allPaths?e.concat(t.allPaths):e),[]);r.length&&(o.allPaths=r);return o}(i,t):(o=w.exec(N(i,t)))?D(o[1].substr(1),i,!0):(o=y.exec(N(i,t)))?D(o[1],i,!1):function(e){try{const t=new RegExp(`^${f(e)}$`);return function(i){return t.lastIndex=0,"string"==typeof i&&t.test(i)?e:null}}catch(e){return S}}(i);return C.set(n,s),L(s,e)}function L(e,t){return"string"==typeof t?e:function(i,n){return o.KM(i,t.base)?e(r.Gf(t.base,i),n):null}}function N(e,t){return t.trimForExclusions&&e.endsWith("/**")?e.substr(0,e.length-2):e}function D(e,t,i){const n=r.ir===r.KR.sep,o=n?e:e.replace(u,r.ir),s=r.ir+o,a=r.KR.sep+e,l=i?function(i,r){return"string"!=typeof i||i!==o&&!i.endsWith(s)&&(n||i!==e&&!i.endsWith(a))?null:t}:function(i,s){return"string"!=typeof i||i!==o&&(n||i!==e)?null:t};return l.allPaths=[(i?"*/":"./")+e],l}function I(e,t,i){return!(!e||"string"!=typeof t)&&E(e)(t,void 0,i)}function E(e,t={}){if(!e)return x;if("string"==typeof e||function(e){const t=e;return t&&"string"==typeof t.base&&"string"==typeof t.pattern}(e)){const i=k(e,t);if(i===S)return x;const n=function(e,t){return!!i(e,t)};return i.allBasenames&&(n.allBasenames=i.allBasenames),i.allPaths&&(n.allPaths=i.allPaths),n}return function(e,t){const i=T(Object.getOwnPropertyNames(e).map((i=>function(e,t,i){if(!1===t)return S;const o=k(e,i);if(o===S)return S;if("boolean"==typeof t)return o;if(t){const i=t.when;if("string"==typeof i){const t=(t,s,r,a)=>{if(!a||!o(t,s))return null;const l=a(i.replace("$(basename)",r));return(0,n.J8)(l)?l.then((t=>t?e:null)):l?e:null};return t.requiresSiblings=!0,t}}return o}(i,e[i],t))).filter((e=>e!==S))),o=i.length;if(!o)return S;if(!i.some((e=>!!e.requiresSiblings))){if(1===o)return i[0];const e=function(e,t){for(let n=0,o=i.length;n<o;n++){const o=i[n](e,t);if(o)return o}return null},t=i.find((e=>!!e.allBasenames));t&&(e.allBasenames=t.allBasenames);const n=i.reduce(((e,t)=>t.allPaths?e.concat(t.allPaths):e),[]);return n.length&&(e.allPaths=n),e}const s=function(e,t,n){let o;for(let s=0,a=i.length;s<a;s++){const a=i[s];a.requiresSiblings&&n&&(t||(t=r.EZ(e)),o||(o=t.substr(0,t.length-r.DZ(e).length)));const l=a(e,t,o,n);if(l)return l}return null},a=i.find((e=>!!e.allBasenames));a&&(s.allBasenames=a.allBasenames);const l=i.reduce(((e,t)=>t.allPaths?e.concat(t.allPaths):e),[]);l.length&&(s.allPaths=l);return s}(e,t)}function T(e,t){const i=e.filter((e=>!!e.basenames));if(i.length<2)return e;const n=i.reduce(((e,t)=>{const i=t.basenames;return i?e.concat(i):e}),[]);let o;if(t){o=[];for(let e=0,i=n.length;e<i;e++)o.push(t)}else o=i.reduce(((e,t)=>{const i=t.patterns;return i?e.concat(i):e}),[]);const s=function(e,t){if("string"!=typeof e)return null;if(!t){let i;for(i=e.length;i>0;i--){const t=e.charCodeAt(i-1);if(47===t||92===t)break}t=e.substr(i)}const i=n.indexOf(t);return-1!==i?o[i]:null};s.basenames=n,s.patterns=o,s.allBasenames=n;const r=e.filter((e=>!e.basenames));return r.push(s),r}},89954:(e,t,i)=>{"use strict";i.d(t,{Cv:()=>a,SP:()=>s,vp:()=>o,yP:()=>h});var n=i(97295);function o(e){return s(e,0)}function s(e,t){switch(typeof e){case"object":return null===e?r(349,t):Array.isArray(e)?(i=e,n=r(104579,n=t),i.reduce(((e,t)=>s(t,e)),n)):function(e,t){return t=r(181387,t),Object.keys(e).sort().reduce(((t,i)=>(t=a(i,t),s(e[i],t))),t)}(e,t);case"string":return a(e,t);case"boolean":return function(e,t){return r(e?433:863,t)}(e,t);case"number":return r(e,t);case"undefined":return r(937,t);default:return r(617,t)}var i,n}function r(e,t){return(t<<5)-t+e|0}function a(e,t){t=r(149417,t);for(let i=0,n=e.length;i<n;i++)t=r(e.charCodeAt(i),t);return t}function l(e,t,i=32){const n=i-t;return(e<<t|(~((1<<n)-1)&e)>>>n)>>>0}function c(e,t=0,i=e.byteLength,n=0){for(let o=0;o<i;o++)e[t+o]=n}function d(e,t=32){return e instanceof ArrayBuffer?Array.from(new Uint8Array(e)).map((e=>e.toString(16).padStart(2,"0"))).join(""):function(e,t,i="0"){for(;e.length<t;)e=i+e;return e}((e>>>0).toString(16),t/4)}class h{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(67),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(e){const t=e.length;if(0===t)return;const i=this._buff;let o,s,r=this._buffLen,a=this._leftoverHighSurrogate;for(0!==a?(o=a,s=-1,a=0):(o=e.charCodeAt(0),s=0);;){let l=o;if(n.ZG(o)){if(!(s+1<t)){a=o;break}{const t=e.charCodeAt(s+1);n.YK(t)?(s++,l=n.rL(o,t)):l=65533}}else n.YK(o)&&(l=65533);if(r=this._push(i,r,l),s++,!(s<t))break;o=e.charCodeAt(s)}this._buffLen=r,this._leftoverHighSurrogate=a}_push(e,t,i){return i<128?e[t++]=i:i<2048?(e[t++]=192|(1984&i)>>>6,e[t++]=128|(63&i)>>>0):i<65536?(e[t++]=224|(61440&i)>>>12,e[t++]=128|(4032&i)>>>6,e[t++]=128|(63&i)>>>0):(e[t++]=240|(1835008&i)>>>18,e[t++]=128|(258048&i)>>>12,e[t++]=128|(4032&i)>>>6,e[t++]=128|(63&i)>>>0),t>=64&&(this._step(),t-=64,this._totalLen+=64,e[0]=e[64],e[1]=e[65],e[2]=e[66]),t}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),d(this._h0)+d(this._h1)+d(this._h2)+d(this._h3)+d(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,c(this._buff,this._buffLen),this._buffLen>56&&(this._step(),c(this._buff));const e=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(e/4294967296),!1),this._buffDV.setUint32(60,e%4294967296,!1),this._step()}_step(){const e=h._bigBlock32,t=this._buffDV;for(let i=0;i<64;i+=4)e.setUint32(i,t.getUint32(i,!1),!1);for(let t=64;t<320;t+=4)e.setUint32(t,l(e.getUint32(t-12,!1)^e.getUint32(t-32,!1)^e.getUint32(t-56,!1)^e.getUint32(t-64,!1),1),!1);let i,n,o,s=this._h0,r=this._h1,a=this._h2,c=this._h3,d=this._h4;for(let t=0;t<80;t++)t<20?(i=r&a|~r&c,n=1518500249):t<40?(i=r^a^c,n=1859775393):t<60?(i=r&a|r&c|a&c,n=2400959708):(i=r^a^c,n=3395469782),o=l(s,5)+i+d+n+e.getUint32(4*t,!1)&4294967295,d=c,c=a,a=l(r,30),r=s,s=o;this._h0=this._h0+s&4294967295,this._h1=this._h1+r&4294967295,this._h2=this._h2+a&4294967295,this._h3=this._h3+c&4294967295,this._h4=this._h4+d&4294967295}}h._bigBlock32=new DataView(new ArrayBuffer(320))},59365:(e,t,i)=>{"use strict";i.d(t,{CP:()=>r,Fr:()=>a,W5:()=>s,oR:()=>l,v1:()=>c});var n=i(17301),o=i(21212);class s{constructor(e="",t=!1){var i,o,s;if(this.value=e,"string"!=typeof this.value)throw(0,n.b1)("value");"boolean"==typeof t?(this.isTrusted=t,this.supportThemeIcons=!1,this.supportHtml=!1):(this.isTrusted=null!==(i=t.isTrusted)&&void 0!==i?i:void 0,this.supportThemeIcons=null!==(o=t.supportThemeIcons)&&void 0!==o&&o,this.supportHtml=null!==(s=t.supportHtml)&&void 0!==s&&s)}appendText(e,t=0){var i;return this.value+=(i=this.supportThemeIcons?(0,o.Qo)(e):e,i.replace(/[\\`*_{}[\]()#+\-!]/g,"\\$&")).replace(/([ \t]+)/g,((e,t)=>"&nbsp;".repeat(t.length))).replace(/\>/gm,"\\>").replace(/\n/g,1===t?"\\\n":"\n\n"),this}appendMarkdown(e){return this.value+=e,this}appendCodeblock(e,t){return this.value+="\n```",this.value+=e,this.value+="\n",this.value+=t,this.value+="\n```\n",this}}function r(e){return a(e)?!e.value:!Array.isArray(e)||e.every(r)}function a(e){return e instanceof s||!(!e||"object"!=typeof e)&&!("string"!=typeof e.value||"boolean"!=typeof e.isTrusted&&void 0!==e.isTrusted||"boolean"!=typeof e.supportThemeIcons&&void 0!==e.supportThemeIcons)}function l(e){return e?e.replace(/\\([\\`*_{}[\]()#+\-.!])/g,"$1"):e}function c(e){const t=[],i=e.split("|").map((e=>e.trim()));e=i[0];const n=i[1];if(n){const e=/height=(\d+)/.exec(n),i=/width=(\d+)/.exec(n),o=e?e[1]:"",s=i?i[1]:"",r=isFinite(parseInt(s)),a=isFinite(parseInt(o));r&&t.push(`width="${s}"`),a&&t.push(`height="${o}"`)}return{href:e,dimensions:t}}},21212:(e,t,i)=>{"use strict";i.d(t,{Gt:()=>f,Ho:()=>p,Qo:()=>c,f$:()=>h,x$:()=>g});var n=i(73046),o=i(75392),s=i(97295);const r="$(",a=new RegExp(`\\$\\(${n.dT.iconNameExpression}(?:${n.dT.iconModifierExpression})?\\)`,"g"),l=new RegExp(`(\\\\)?${a.source}`,"g");function c(e){return e.replace(l,((e,t)=>t?e:`\\${e}`))}const d=new RegExp(`\\\\${a.source}`,"g");function h(e){return e.replace(d,(e=>`\\${e}`))}const u=new RegExp(`(\\s)?(\\\\)?${a.source}(\\s)?`,"g");function g(e){return-1===e.indexOf(r)?e:e.replace(u,((e,t,i,n)=>i?e:t||n||""))}function p(e){const t=e.indexOf(r);return-1===t?{text:e}:function(e,t){const i=[];let n="";function o(e){if(e){n+=e;for(const t of e)i.push(d)}}let s,a,l=-1,c="",d=0,h=t;const u=e.length;o(e.substr(0,t));for(;h<u;){if(s=e[h],a=e[h+1],s===r[0]&&a===r[1])l=h,o(c),c=r,h++;else if(")"===s&&-1!==l){d+=h-l+1,l=-1,c=""}else-1!==l?/^[a-z0-9\-]$/i.test(s)?c+=s:(o(c),l=-1,c=""):o(s);h++}return o(c),{text:n,iconOffsets:i}}(e,t)}function f(e,t,i=!1){const{text:n,iconOffsets:r}=t;if(!r||0===r.length)return(0,o.Oh)(e,n,i);const a=(0,s.j3)(n," "),l=n.length-a.length,c=(0,o.Oh)(e,a,i);if(c)for(const e of c){const t=r[e.start+l]+l;e.start+=t,e.end+=t}return c}},44742:(e,t,i)=>{"use strict";i.d(t,{R:()=>n,a:()=>o});class n{constructor(e){this._prefix=e,this._lastId=0}nextId(){return this._prefix+ ++this._lastId}}const o=new n("id#")},53725:(e,t,i)=>{"use strict";var n;i.d(t,{$:()=>n}),function(e){e.is=function(e){return e&&"object"==typeof e&&"function"==typeof e[Symbol.iterator]};const t=Object.freeze([]);e.empty=function(){return t},e.single=function*(e){yield e},e.from=function(e){return e||t},e.isEmpty=function(e){return!e||!0===e[Symbol.iterator]().next().done},e.first=function(e){return e[Symbol.iterator]().next().value},e.some=function(e,t){for(const i of e)if(t(i))return!0;return!1},e.find=function(e,t){for(const i of e)if(t(i))return i},e.filter=function*(e,t){for(const i of e)t(i)&&(yield i)},e.map=function*(e,t){let i=0;for(const n of e)yield t(n,i++)},e.concat=function*(...e){for(const t of e)for(const e of t)yield e},e.concatNested=function*(e){for(const t of e)for(const e of t)yield e},e.reduce=function(e,t,i){let n=i;for(const i of e)n=t(n,i);return n},e.slice=function*(e,t,i=e.length){for(t<0&&(t+=e.length),i<0?i+=e.length:i>e.length&&(i=e.length);t<i;t++)yield e[t]},e.consume=function(t,i=Number.POSITIVE_INFINITY){const n=[];if(0===i)return[n,t];const o=t[Symbol.iterator]();for(let t=0;t<i;t++){const t=o.next();if(t.done)return[n,e.empty()];n.push(t.value)}return[n,{[Symbol.iterator]:()=>o}]},e.equals=function(e,t,i=((e,t)=>e===t)){const n=e[Symbol.iterator](),o=t[Symbol.iterator]();for(;;){const e=n.next(),t=o.next();if(e.done!==t.done)return!1;if(e.done)return!0;if(!i(e.value,t.value))return!1}}}(n||(n={}))},22258:(e,t,i)=>{"use strict";i.d(t,{H_:()=>a,Vd:()=>u,gx:()=>f,kL:()=>p});class n{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(e,t){this._keyCodeToStr[e]=t,this._strToKeyCode[t.toLowerCase()]=e}keyCodeToStr(e){return this._keyCodeToStr[e]}strToKeyCode(e){return this._strToKeyCode[e.toLowerCase()]||0}}const o=new n,s=new n,r=new n,a=new Array(230),l={},c=[],d=Object.create(null),h=Object.create(null),u=[],g=[];for(let e=0;e<=193;e++)u[e]=-1;for(let e=0;e<=126;e++)g[e]=-1;var p;function f(e,t){return(e|(65535&t)<<16>>>0)>>>0}!function(){const e="",t=[[0,1,0,"None",0,"unknown",0,"VK_UNKNOWN",e,e],[0,1,1,"Hyper",0,e,0,e,e,e],[0,1,2,"Super",0,e,0,e,e,e],[0,1,3,"Fn",0,e,0,e,e,e],[0,1,4,"FnLock",0,e,0,e,e,e],[0,1,5,"Suspend",0,e,0,e,e,e],[0,1,6,"Resume",0,e,0,e,e,e],[0,1,7,"Turbo",0,e,0,e,e,e],[0,1,8,"Sleep",0,e,0,"VK_SLEEP",e,e],[0,1,9,"WakeUp",0,e,0,e,e,e],[31,0,10,"KeyA",31,"A",65,"VK_A",e,e],[32,0,11,"KeyB",32,"B",66,"VK_B",e,e],[33,0,12,"KeyC",33,"C",67,"VK_C",e,e],[34,0,13,"KeyD",34,"D",68,"VK_D",e,e],[35,0,14,"KeyE",35,"E",69,"VK_E",e,e],[36,0,15,"KeyF",36,"F",70,"VK_F",e,e],[37,0,16,"KeyG",37,"G",71,"VK_G",e,e],[38,0,17,"KeyH",38,"H",72,"VK_H",e,e],[39,0,18,"KeyI",39,"I",73,"VK_I",e,e],[40,0,19,"KeyJ",40,"J",74,"VK_J",e,e],[41,0,20,"KeyK",41,"K",75,"VK_K",e,e],[42,0,21,"KeyL",42,"L",76,"VK_L",e,e],[43,0,22,"KeyM",43,"M",77,"VK_M",e,e],[44,0,23,"KeyN",44,"N",78,"VK_N",e,e],[45,0,24,"KeyO",45,"O",79,"VK_O",e,e],[46,0,25,"KeyP",46,"P",80,"VK_P",e,e],[47,0,26,"KeyQ",47,"Q",81,"VK_Q",e,e],[48,0,27,"KeyR",48,"R",82,"VK_R",e,e],[49,0,28,"KeyS",49,"S",83,"VK_S",e,e],[50,0,29,"KeyT",50,"T",84,"VK_T",e,e],[51,0,30,"KeyU",51,"U",85,"VK_U",e,e],[52,0,31,"KeyV",52,"V",86,"VK_V",e,e],[53,0,32,"KeyW",53,"W",87,"VK_W",e,e],[54,0,33,"KeyX",54,"X",88,"VK_X",e,e],[55,0,34,"KeyY",55,"Y",89,"VK_Y",e,e],[56,0,35,"KeyZ",56,"Z",90,"VK_Z",e,e],[22,0,36,"Digit1",22,"1",49,"VK_1",e,e],[23,0,37,"Digit2",23,"2",50,"VK_2",e,e],[24,0,38,"Digit3",24,"3",51,"VK_3",e,e],[25,0,39,"Digit4",25,"4",52,"VK_4",e,e],[26,0,40,"Digit5",26,"5",53,"VK_5",e,e],[27,0,41,"Digit6",27,"6",54,"VK_6",e,e],[28,0,42,"Digit7",28,"7",55,"VK_7",e,e],[29,0,43,"Digit8",29,"8",56,"VK_8",e,e],[30,0,44,"Digit9",30,"9",57,"VK_9",e,e],[21,0,45,"Digit0",21,"0",48,"VK_0",e,e],[3,1,46,"Enter",3,"Enter",13,"VK_RETURN",e,e],[9,1,47,"Escape",9,"Escape",27,"VK_ESCAPE",e,e],[1,1,48,"Backspace",1,"Backspace",8,"VK_BACK",e,e],[2,1,49,"Tab",2,"Tab",9,"VK_TAB",e,e],[10,1,50,"Space",10,"Space",32,"VK_SPACE",e,e],[83,0,51,"Minus",83,"-",189,"VK_OEM_MINUS","-","OEM_MINUS"],[81,0,52,"Equal",81,"=",187,"VK_OEM_PLUS","=","OEM_PLUS"],[87,0,53,"BracketLeft",87,"[",219,"VK_OEM_4","[","OEM_4"],[89,0,54,"BracketRight",89,"]",221,"VK_OEM_6","]","OEM_6"],[88,0,55,"Backslash",88,"\\",220,"VK_OEM_5","\\","OEM_5"],[0,0,56,"IntlHash",0,e,0,e,e,e],[80,0,57,"Semicolon",80,";",186,"VK_OEM_1",";","OEM_1"],[90,0,58,"Quote",90,"'",222,"VK_OEM_7","'","OEM_7"],[86,0,59,"Backquote",86,"`",192,"VK_OEM_3","`","OEM_3"],[82,0,60,"Comma",82,",",188,"VK_OEM_COMMA",",","OEM_COMMA"],[84,0,61,"Period",84,".",190,"VK_OEM_PERIOD",".","OEM_PERIOD"],[85,0,62,"Slash",85,"/",191,"VK_OEM_2","/","OEM_2"],[8,1,63,"CapsLock",8,"CapsLock",20,"VK_CAPITAL",e,e],[59,1,64,"F1",59,"F1",112,"VK_F1",e,e],[60,1,65,"F2",60,"F2",113,"VK_F2",e,e],[61,1,66,"F3",61,"F3",114,"VK_F3",e,e],[62,1,67,"F4",62,"F4",115,"VK_F4",e,e],[63,1,68,"F5",63,"F5",116,"VK_F5",e,e],[64,1,69,"F6",64,"F6",117,"VK_F6",e,e],[65,1,70,"F7",65,"F7",118,"VK_F7",e,e],[66,1,71,"F8",66,"F8",119,"VK_F8",e,e],[67,1,72,"F9",67,"F9",120,"VK_F9",e,e],[68,1,73,"F10",68,"F10",121,"VK_F10",e,e],[69,1,74,"F11",69,"F11",122,"VK_F11",e,e],[70,1,75,"F12",70,"F12",123,"VK_F12",e,e],[0,1,76,"PrintScreen",0,e,0,e,e,e],[79,1,77,"ScrollLock",79,"ScrollLock",145,"VK_SCROLL",e,e],[7,1,78,"Pause",7,"PauseBreak",19,"VK_PAUSE",e,e],[19,1,79,"Insert",19,"Insert",45,"VK_INSERT",e,e],[14,1,80,"Home",14,"Home",36,"VK_HOME",e,e],[11,1,81,"PageUp",11,"PageUp",33,"VK_PRIOR",e,e],[20,1,82,"Delete",20,"Delete",46,"VK_DELETE",e,e],[13,1,83,"End",13,"End",35,"VK_END",e,e],[12,1,84,"PageDown",12,"PageDown",34,"VK_NEXT",e,e],[17,1,85,"ArrowRight",17,"RightArrow",39,"VK_RIGHT","Right",e],[15,1,86,"ArrowLeft",15,"LeftArrow",37,"VK_LEFT","Left",e],[18,1,87,"ArrowDown",18,"DownArrow",40,"VK_DOWN","Down",e],[16,1,88,"ArrowUp",16,"UpArrow",38,"VK_UP","Up",e],[78,1,89,"NumLock",78,"NumLock",144,"VK_NUMLOCK",e,e],[108,1,90,"NumpadDivide",108,"NumPad_Divide",111,"VK_DIVIDE",e,e],[103,1,91,"NumpadMultiply",103,"NumPad_Multiply",106,"VK_MULTIPLY",e,e],[106,1,92,"NumpadSubtract",106,"NumPad_Subtract",109,"VK_SUBTRACT",e,e],[104,1,93,"NumpadAdd",104,"NumPad_Add",107,"VK_ADD",e,e],[3,1,94,"NumpadEnter",3,e,0,e,e,e],[94,1,95,"Numpad1",94,"NumPad1",97,"VK_NUMPAD1",e,e],[95,1,96,"Numpad2",95,"NumPad2",98,"VK_NUMPAD2",e,e],[96,1,97,"Numpad3",96,"NumPad3",99,"VK_NUMPAD3",e,e],[97,1,98,"Numpad4",97,"NumPad4",100,"VK_NUMPAD4",e,e],[98,1,99,"Numpad5",98,"NumPad5",101,"VK_NUMPAD5",e,e],[99,1,100,"Numpad6",99,"NumPad6",102,"VK_NUMPAD6",e,e],[100,1,101,"Numpad7",100,"NumPad7",103,"VK_NUMPAD7",e,e],[101,1,102,"Numpad8",101,"NumPad8",104,"VK_NUMPAD8",e,e],[102,1,103,"Numpad9",102,"NumPad9",105,"VK_NUMPAD9",e,e],[93,1,104,"Numpad0",93,"NumPad0",96,"VK_NUMPAD0",e,e],[107,1,105,"NumpadDecimal",107,"NumPad_Decimal",110,"VK_DECIMAL",e,e],[92,0,106,"IntlBackslash",92,"OEM_102",226,"VK_OEM_102",e,e],[58,1,107,"ContextMenu",58,"ContextMenu",93,e,e,e],[0,1,108,"Power",0,e,0,e,e,e],[0,1,109,"NumpadEqual",0,e,0,e,e,e],[71,1,110,"F13",71,"F13",124,"VK_F13",e,e],[72,1,111,"F14",72,"F14",125,"VK_F14",e,e],[73,1,112,"F15",73,"F15",126,"VK_F15",e,e],[74,1,113,"F16",74,"F16",127,"VK_F16",e,e],[75,1,114,"F17",75,"F17",128,"VK_F17",e,e],[76,1,115,"F18",76,"F18",129,"VK_F18",e,e],[77,1,116,"F19",77,"F19",130,"VK_F19",e,e],[0,1,117,"F20",0,e,0,"VK_F20",e,e],[0,1,118,"F21",0,e,0,"VK_F21",e,e],[0,1,119,"F22",0,e,0,"VK_F22",e,e],[0,1,120,"F23",0,e,0,"VK_F23",e,e],[0,1,121,"F24",0,e,0,"VK_F24",e,e],[0,1,122,"æ‰“å¼€",0,e,0,e,e,e],[0,1,123,"Help",0,e,0,e,e,e],[0,1,124,"Select",0,e,0,e,e,e],[0,1,125,"Again",0,e,0,e,e,e],[0,1,126,"Undo",0,e,0,e,e,e],[0,1,127,"Cut",0,e,0,e,e,e],[0,1,128,"Copy",0,e,0,e,e,e],[0,1,129,"Paste",0,e,0,e,e,e],[0,1,130,"Find",0,e,0,e,e,e],[0,1,131,"AudioVolumeMute",112,"AudioVolumeMute",173,"VK_VOLUME_MUTE",e,e],[0,1,132,"AudioVolumeUp",113,"AudioVolumeUp",175,"VK_VOLUME_UP",e,e],[0,1,133,"AudioVolumeDown",114,"AudioVolumeDown",174,"VK_VOLUME_DOWN",e,e],[105,1,134,"NumpadComma",105,"NumPad_Separator",108,"VK_SEPARATOR",e,e],[110,0,135,"IntlRo",110,"ABNT_C1",193,"VK_ABNT_C1",e,e],[0,1,136,"KanaMode",0,e,0,e,e,e],[0,0,137,"IntlYen",0,e,0,e,e,e],[0,1,138,"Convert",0,e,0,e,e,e],[0,1,139,"NonConvert",0,e,0,e,e,e],[0,1,140,"Lang1",0,e,0,e,e,e],[0,1,141,"Lang2",0,e,0,e,e,e],[0,1,142,"Lang3",0,e,0,e,e,e],[0,1,143,"Lang4",0,e,0,e,e,e],[0,1,144,"Lang5",0,e,0,e,e,e],[0,1,145,"Abort",0,e,0,e,e,e],[0,1,146,"Props",0,e,0,e,e,e],[0,1,147,"NumpadParenLeft",0,e,0,e,e,e],[0,1,148,"NumpadParenRight",0,e,0,e,e,e],[0,1,149,"NumpadBackspace",0,e,0,e,e,e],[0,1,150,"NumpadMemoryStore",0,e,0,e,e,e],[0,1,151,"NumpadMemoryRecall",0,e,0,e,e,e],[0,1,152,"NumpadMemoryClear",0,e,0,e,e,e],[0,1,153,"NumpadMemoryAdd",0,e,0,e,e,e],[0,1,154,"NumpadMemorySubtract",0,e,0,e,e,e],[0,1,155,"NumpadClear",0,e,0,e,e,e],[0,1,156,"NumpadClearEntry",0,e,0,e,e,e],[5,1,0,e,5,"Ctrl",17,"VK_CONTROL",e,e],[4,1,0,e,4,"Shift",16,"VK_SHIFT",e,e],[6,1,0,e,6,"Alt",18,"VK_MENU",e,e],[57,1,0,e,57,"Meta",0,"VK_COMMAND",e,e],[5,1,157,"ControlLeft",5,e,0,"VK_LCONTROL",e,e],[4,1,158,"ShiftLeft",4,e,0,"VK_LSHIFT",e,e],[6,1,159,"AltLeft",6,e,0,"VK_LMENU",e,e],[57,1,160,"MetaLeft",57,e,0,"VK_LWIN",e,e],[5,1,161,"ControlRight",5,e,0,"VK_RCONTROL",e,e],[4,1,162,"ShiftRight",4,e,0,"VK_RSHIFT",e,e],[6,1,163,"AltRight",6,e,0,"VK_RMENU",e,e],[57,1,164,"MetaRight",57,e,0,"VK_RWIN",e,e],[0,1,165,"BrightnessUp",0,e,0,e,e,e],[0,1,166,"BrightnessDown",0,e,0,e,e,e],[0,1,167,"MediaPlay",0,e,0,e,e,e],[0,1,168,"MediaRecord",0,e,0,e,e,e],[0,1,169,"MediaFastForward",0,e,0,e,e,e],[0,1,170,"MediaRewind",0,e,0,e,e,e],[114,1,171,"MediaTrackNext",119,"MediaTrackNext",176,"VK_MEDIA_NEXT_TRACK",e,e],[115,1,172,"MediaTrackPrevious",120,"MediaTrackPrevious",177,"VK_MEDIA_PREV_TRACK",e,e],[116,1,173,"MediaStop",121,"MediaStop",178,"VK_MEDIA_STOP",e,e],[0,1,174,"Eject",0,e,0,e,e,e],[117,1,175,"MediaPlayPause",122,"MediaPlayPause",179,"VK_MEDIA_PLAY_PAUSE",e,e],[0,1,176,"MediaSelect",123,"LaunchMediaPlayer",181,"VK_MEDIA_LAUNCH_MEDIA_SELECT",e,e],[0,1,177,"LaunchMail",124,"LaunchMail",180,"VK_MEDIA_LAUNCH_MAIL",e,e],[0,1,178,"LaunchApp2",125,"LaunchApp2",183,"VK_MEDIA_LAUNCH_APP2",e,e],[0,1,179,"LaunchApp1",0,e,0,"VK_MEDIA_LAUNCH_APP1",e,e],[0,1,180,"SelectTask",0,e,0,e,e,e],[0,1,181,"LaunchScreenSaver",0,e,0,e,e,e],[0,1,182,"BrowserSearch",115,"BrowserSearch",170,"VK_BROWSER_SEARCH",e,e],[0,1,183,"BrowserHome",116,"BrowserHome",172,"VK_BROWSER_HOME",e,e],[112,1,184,"BrowserBack",117,"BrowserBack",166,"VK_BROWSER_BACK",e,e],[113,1,185,"BrowserForward",118,"BrowserForward",167,"VK_BROWSER_FORWARD",e,e],[0,1,186,"BrowserStop",0,e,0,"VK_BROWSER_STOP",e,e],[0,1,187,"BrowserRefresh",0,e,0,"VK_BROWSER_REFRESH",e,e],[0,1,188,"BrowserFavorites",0,e,0,"VK_BROWSER_FAVORITES",e,e],[0,1,189,"ZoomToggle",0,e,0,e,e,e],[0,1,190,"MailReply",0,e,0,e,e,e],[0,1,191,"MailForward",0,e,0,e,e,e],[0,1,192,"MailSend",0,e,0,e,e,e],[109,1,0,e,109,"KeyInComposition",229,e,e,e],[111,1,0,e,111,"ABNT_C2",194,"VK_ABNT_C2",e,e],[91,1,0,e,91,"OEM_8",223,"VK_OEM_8",e,e],[0,1,0,e,0,e,0,"VK_CLEAR",e,e],[0,1,0,e,0,e,0,"VK_KANA",e,e],[0,1,0,e,0,e,0,"VK_HANGUL",e,e],[0,1,0,e,0,e,0,"VK_JUNJA",e,e],[0,1,0,e,0,e,0,"VK_FINAL",e,e],[0,1,0,e,0,e,0,"VK_HANJA",e,e],[0,1,0,e,0,e,0,"VK_KANJI",e,e],[0,1,0,e,0,e,0,"VK_CONVERT",e,e],[0,1,0,e,0,e,0,"VK_NONCONVERT",e,e],[0,1,0,e,0,e,0,"VK_ACCEPT",e,e],[0,1,0,e,0,e,0,"VK_MODECHANGE",e,e],[0,1,0,e,0,e,0,"VK_SELECT",e,e],[0,1,0,e,0,e,0,"VK_PRINT",e,e],[0,1,0,e,0,e,0,"VK_EXECUTE",e,e],[0,1,0,e,0,e,0,"VK_SNAPSHOT",e,e],[0,1,0,e,0,e,0,"VK_HELP",e,e],[0,1,0,e,0,e,0,"VK_APPS",e,e],[0,1,0,e,0,e,0,"VK_PROCESSKEY",e,e],[0,1,0,e,0,e,0,"VK_PACKET",e,e],[0,1,0,e,0,e,0,"VK_DBE_SBCSCHAR",e,e],[0,1,0,e,0,e,0,"VK_DBE_DBCSCHAR",e,e],[0,1,0,e,0,e,0,"VK_ATTN",e,e],[0,1,0,e,0,e,0,"VK_CRSEL",e,e],[0,1,0,e,0,e,0,"VK_EXSEL",e,e],[0,1,0,e,0,e,0,"VK_EREOF",e,e],[0,1,0,e,0,e,0,"VK_PLAY",e,e],[0,1,0,e,0,e,0,"VK_ZOOM",e,e],[0,1,0,e,0,e,0,"VK_NONAME",e,e],[0,1,0,e,0,e,0,"VK_PA1",e,e],[0,1,0,e,0,e,0,"VK_OEM_CLEAR",e,e]];let i=[],n=[];for(const e of t){const[t,p,f,m,v,_,b,w,y,C]=e;if(n[f]||(n[f]=!0,c[f]=m,d[m]=f,h[m.toLowerCase()]=f,p&&(u[f]=v,0!==v&&3!==v&&5!==v&&4!==v&&6!==v&&57!==v&&(g[v]=f))),!i[v]){if(i[v]=!0,!_)throw new Error(`String representation missing for key code ${v} around scan code ${m}`);o.define(v,_),s.define(v,y||_),r.define(v,C||y||_)}b&&(a[b]=v),w&&(l[w]=v)}g[3]=46}(),function(e){e.toString=function(e){return o.keyCodeToStr(e)},e.fromString=function(e){return o.strToKeyCode(e)},e.toUserSettingsUS=function(e){return s.keyCodeToStr(e)},e.toUserSettingsGeneral=function(e){return r.keyCodeToStr(e)},e.fromUserSettings=function(e){return s.strToKeyCode(e)||r.strToKeyCode(e)},e.toElectronAccelerator=function(e){if(e>=93&&e<=108)return null;switch(e){case 16:return"Up";case 18:return"Down";case 15:return"Left";case 17:return"Right"}return o.keyCodeToStr(e)}}(p||(p={}))},8030:(e,t,i)=>{"use strict";i.d(t,{X4:()=>r,jC:()=>a,xo:()=>s});var n=i(63580);class o{constructor(e,t,i=t){this.modifierLabels=[null],this.modifierLabels[2]=e,this.modifierLabels[1]=t,this.modifierLabels[3]=i}toLabel(e,t,i){if(0===t.length)return null;const n=[];for(let o=0,s=t.length;o<s;o++){const s=t[o],r=i(s);if(null===r)return null;n[o]=l(s,r,this.modifierLabels[e])}return n.join(" ")}}const s=new o({ctrlKey:"âŒƒ",shiftKey:"â‡§",altKey:"âŒ¥",metaKey:"âŒ˜",separator:""},{ctrlKey:n.N({key:"ctrlKey",comment:["This is the short form for the Control key on the keyboard"]},"Ctrl"),shiftKey:n.N({key:"shiftKey",comment:["This is the short form for the Shift key on the keyboard"]},"Shift"),altKey:n.N({key:"altKey",comment:["This is the short form for the Alt key on the keyboard"]},"Alt"),metaKey:n.N({key:"windowsKey",comment:["This is the short form for the Windows key on the keyboard"]},"Windows"),separator:"+"},{ctrlKey:n.N({key:"ctrlKey",comment:["This is the short form for the Control key on the keyboard"]},"Ctrl"),shiftKey:n.N({key:"shiftKey",comment:["This is the short form for the Shift key on the keyboard"]},"Shift"),altKey:n.N({key:"altKey",comment:["This is the short form for the Alt key on the keyboard"]},"Alt"),metaKey:n.N({key:"superKey",comment:["This is the short form for the Super key on the keyboard"]},"Super"),separator:"+"}),r=new o({ctrlKey:n.N({key:"ctrlKey.long",comment:["This is the long form for the Control key on the keyboard"]},"Control"),shiftKey:n.N({key:"shiftKey.long",comment:["This is the long form for the Shift key on the keyboard"]},"Shift"),altKey:n.N({key:"altKey.long",comment:["This is the long form for the Alt key on the keyboard"]},"Alt"),metaKey:n.N({key:"cmdKey.long",comment:["This is the long form for the Command key on the keyboard"]},"Command"),separator:"+"},{ctrlKey:n.N({key:"ctrlKey.long",comment:["This is the long form for the Control key on the keyboard"]},"Control"),shiftKey:n.N({key:"shiftKey.long",comment:["This is the long form for the Shift key on the keyboard"]},"Shift"),altKey:n.N({key:"altKey.long",comment:["This is the long form for the Alt key on the keyboard"]},"Alt"),metaKey:n.N({key:"windowsKey.long",comment:["This is the long form for the Windows key on the keyboard"]},"Windows"),separator:"+"},{ctrlKey:n.N({key:"ctrlKey.long",comment:["This is the long form for the Control key on the keyboard"]},"Control"),shiftKey:n.N({key:"shiftKey.long",comment:["This is the long form for the Shift key on the keyboard"]},"Shift"),altKey:n.N({key:"altKey.long",comment:["This is the long form for the Alt key on the keyboard"]},"Alt"),metaKey:n.N({key:"superKey.long",comment:["This is the long form for the Super key on the keyboard"]},"Super"),separator:"+"}),a=new o({ctrlKey:"Ctrl",shiftKey:"Shift",altKey:"Alt",metaKey:"Cmd",separator:"+"},{ctrlKey:"Ctrl",shiftKey:"Shift",altKey:"Alt",metaKey:"Super",separator:"+"});function l(e,t,i){if(null===t)return"";const n=[];return e.ctrlKey&&n.push(i.ctrlKey),e.shiftKey&&n.push(i.shiftKey),e.altKey&&n.push(i.altKey),e.metaKey&&n.push(i.metaKey),""!==t&&n.push(t),n.join(i.separator)}},8313:(e,t,i)=>{"use strict";i.d(t,{BQ:()=>l,QC:()=>r,X_:()=>a,f1:()=>c,gm:()=>o});var n=i(17301);function o(e,t){if(0===e)return null;const i=(65535&e)>>>0,n=(4294901760&e)>>>16;return new a(0!==n?[s(i,t),s(n,t)]:[s(i,t)])}function s(e,t){const i=!!(2048&e),n=!!(256&e);return new r(2===t?n:i,!!(1024&e),!!(512&e),2===t?i:n,255&e)}class r{constructor(e,t,i,n,o){this.ctrlKey=e,this.shiftKey=t,this.altKey=i,this.metaKey=n,this.keyCode=o}equals(e){return this.ctrlKey===e.ctrlKey&&this.shiftKey===e.shiftKey&&this.altKey===e.altKey&&this.metaKey===e.metaKey&&this.keyCode===e.keyCode}isModifierKey(){return 0===this.keyCode||5===this.keyCode||57===this.keyCode||6===this.keyCode||4===this.keyCode}toChord(){return new a([this])}isDuplicateModifierCase(){return this.ctrlKey&&5===this.keyCode||this.shiftKey&&4===this.keyCode||this.altKey&&6===this.keyCode||this.metaKey&&57===this.keyCode}}class a{constructor(e){if(0===e.length)throw(0,n.b1)("parts");this.parts=e}}class l{constructor(e,t,i,n,o,s){this.ctrlKey=e,this.shiftKey=t,this.altKey=i,this.metaKey=n,this.keyLabel=o,this.keyAriaLabel=s}}class c{}},68843:(e,t,i)=>{"use strict";i.d(t,{D:()=>c,p:()=>l});var n=i(15527),o=i(66663),s=i(1432),r=i(95935),a=i(70666);function l(e){if(!e)return;"string"==typeof e&&(e=a.o.file(e));const t=(0,r.EZ)(e)||(e.scheme===o.lg.file?e.fsPath:e.path);return s.ED&&(0,n.vY)(t)?c(t):t}function c(e){return(0,n.oP)(e)?e.charAt(0).toUpperCase()+e.slice(1):e}},5976:(e,t,i)=>{"use strict";i.d(t,{B9:()=>u,F8:()=>g,JT:()=>m,Jz:()=>_,OF:()=>p,SL:()=>f,Wf:()=>h,XK:()=>v,dk:()=>c});var n=i(88289),o=i(53725);let s=null;function r(e){return null==s||s.trackDisposable(e),e}function a(e){null==s||s.markAsDisposed(e)}function l(e,t){null==s||s.setParent(e,t)}function c(e){return null==s||s.markAsSingleton(e),e}class d extends Error{constructor(e){super(`Encountered errors while disposing of store. Errors: [${e.join(", ")}]`),this.errors=e}}function h(e){return"function"==typeof e.dispose&&0===e.dispose.length}function u(e){if(o.$.is(e)){let t=[];for(const i of e)if(i)try{i.dispose()}catch(e){t.push(e)}if(1===t.length)throw t[0];if(t.length>1)throw new d(t);return Array.isArray(e)?[]:e}if(e)return e.dispose(),e}function g(...e){const t=p((()=>u(e)));return function(e,t){if(s)for(const i of e)s.setParent(i,t)}(e,t),t}function p(e){const t=r({dispose:(0,n.I)((()=>{a(t),e()}))});return t}class f{constructor(){this._toDispose=new Set,this._isDisposed=!1,r(this)}dispose(){this._isDisposed||(a(this),this._isDisposed=!0,this.clear())}clear(){try{u(this._toDispose.values())}finally{this._toDispose.clear()}}add(e){if(!e)return e;if(e===this)throw new Error("Cannot register a disposable on itself!");return l(e,this),this._isDisposed?f.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(e),e}}f.DISABLE_DISPOSED_WARNING=!1;class m{constructor(){this._store=new f,r(this),l(this._store,this)}dispose(){a(this),this._store.dispose()}_register(e){if(e===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(e)}}m.None=Object.freeze({dispose(){}});class v{constructor(){this._isDisposed=!1,r(this)}get value(){return this._isDisposed?void 0:this._value}set value(e){var t;this._isDisposed||e===this._value||(null===(t=this._value)||void 0===t||t.dispose(),e&&l(e,this),this._value=e)}clear(){this.value=void 0}dispose(){var e;this._isDisposed=!0,a(this),null===(e=this._value)||void 0===e||e.dispose(),this._value=void 0}clearAndLeak(){const e=this._value;return this._value=void 0,e&&l(e,null),e}}class _{constructor(e){this.object=e}dispose(){}}},91741:(e,t,i)=>{"use strict";i.d(t,{S:()=>o});class n{constructor(e){this.element=e,this.next=n.Undefined,this.prev=n.Undefined}}n.Undefined=new n(void 0);class o{constructor(){this._first=n.Undefined,this._last=n.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===n.Undefined}clear(){let e=this._first;for(;e!==n.Undefined;){const t=e.next;e.prev=n.Undefined,e.next=n.Undefined,e=t}this._first=n.Undefined,this._last=n.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){const i=new n(e);if(this._first===n.Undefined)this._first=i,this._last=i;else if(t){const e=this._last;this._last=i,i.prev=e,e.next=i}else{const e=this._first;this._first=i,i.next=e,e.prev=i}this._size+=1;let o=!1;return()=>{o||(o=!0,this._remove(i))}}shift(){if(this._first!==n.Undefined){const e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==n.Undefined){const e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==n.Undefined&&e.next!==n.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===n.Undefined&&e.next===n.Undefined?(this._first=n.Undefined,this._last=n.Undefined):e.next===n.Undefined?(this._last=this._last.prev,this._last.next=n.Undefined):e.prev===n.Undefined&&(this._first=this._first.next,this._first.prev=n.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;for(;e!==n.Undefined;)yield e.element,e=e.next}}},43702:(e,t,i)=>{"use strict";i.d(t,{Id:()=>h,Y9:()=>g,z6:()=>f});var n,o,s=i(97295);class r{constructor(){this._value="",this._pos=0}reset(e){return this._value=e,this._pos=0,this}next(){return this._pos+=1,this}hasNext(){return this._pos<this._value.length-1}cmp(e){return e.charCodeAt(0)-this._value.charCodeAt(this._pos)}value(){return this._value[this._pos]}}class a{constructor(e=!0){this._caseSensitive=e}reset(e){return this._value=e,this._from=0,this._to=0,this.next()}hasNext(){return this._to<this._value.length}next(){this._from=this._to;let e=!0;for(;this._to<this._value.length;this._to++){if(46===this._value.charCodeAt(this._to)){if(!e)break;this._from++}else e=!1}return this}cmp(e){return this._caseSensitive?(0,s.TT)(e,this._value,0,e.length,this._from,this._to):(0,s.j_)(e,this._value,0,e.length,this._from,this._to)}value(){return this._value.substring(this._from,this._to)}}class l{constructor(e=!0,t=!0){this._splitOnBackslash=e,this._caseSensitive=t}reset(e){return this._value=e.replace(/\\$|\/$/,""),this._from=0,this._to=0,this.next()}hasNext(){return this._to<this._value.length}next(){this._from=this._to;let e=!0;for(;this._to<this._value.length;this._to++){const t=this._value.charCodeAt(this._to);if(47===t||this._splitOnBackslash&&92===t){if(!e)break;this._from++}else e=!1}return this}cmp(e){return this._caseSensitive?(0,s.TT)(e,this._value,0,e.length,this._from,this._to):(0,s.j_)(e,this._value,0,e.length,this._from,this._to)}value(){return this._value.substring(this._from,this._to)}}class c{constructor(e){this._ignorePathCasing=e,this._states=[],this._stateIdx=0}reset(e){return this._value=e,this._states=[],this._value.scheme&&this._states.push(1),this._value.authority&&this._states.push(2),this._value.path&&(this._pathIterator=new l(!1,!this._ignorePathCasing(e)),this._pathIterator.reset(e.path),this._pathIterator.value()&&this._states.push(3)),this._value.query&&this._states.push(4),this._value.fragment&&this._states.push(5),this._stateIdx=0,this}next(){return 3===this._states[this._stateIdx]&&this._pathIterator.hasNext()?this._pathIterator.next():this._stateIdx+=1,this}hasNext(){return 3===this._states[this._stateIdx]&&this._pathIterator.hasNext()||this._stateIdx<this._states.length-1}cmp(e){if(1===this._states[this._stateIdx])return(0,s.zY)(e,this._value.scheme);if(2===this._states[this._stateIdx])return(0,s.zY)(e,this._value.authority);if(3===this._states[this._stateIdx])return this._pathIterator.cmp(e);if(4===this._states[this._stateIdx])return(0,s.qu)(e,this._value.query);if(5===this._states[this._stateIdx])return(0,s.qu)(e,this._value.fragment);throw new Error}value(){if(1===this._states[this._stateIdx])return this._value.scheme;if(2===this._states[this._stateIdx])return this._value.authority;if(3===this._states[this._stateIdx])return this._pathIterator.value();if(4===this._states[this._stateIdx])return this._value.query;if(5===this._states[this._stateIdx])return this._value.fragment;throw new Error}}class d{constructor(){this.height=1}rotateLeft(){const e=this.right;return this.right=e.left,e.left=this,this.updateHeight(),e.updateHeight(),e}rotateRight(){const e=this.left;return this.left=e.right,e.right=this,this.updateHeight(),e.updateHeight(),e}updateHeight(){this.height=1+Math.max(this.heightLeft,this.heightRight)}balanceFactor(){return this.heightRight-this.heightLeft}get heightLeft(){var e,t;return null!==(t=null===(e=this.left)||void 0===e?void 0:e.height)&&void 0!==t?t:0}get heightRight(){var e,t;return null!==(t=null===(e=this.right)||void 0===e?void 0:e.height)&&void 0!==t?t:0}}class h{constructor(e){this._iter=e}static forUris(e=(()=>!1)){return new h(new c(e))}static forStrings(){return new h(new r)}static forConfigKeys(){return new h(new a)}clear(){this._root=void 0}set(e,t){const i=this._iter.reset(e);let n;this._root||(this._root=new d,this._root.segment=i.value());const o=[];for(n=this._root;;){const e=i.cmp(n.segment);if(e>0)n.left||(n.left=new d,n.left.segment=i.value()),o.push([-1,n]),n=n.left;else if(e<0)n.right||(n.right=new d,n.right.segment=i.value()),o.push([1,n]),n=n.right;else{if(!i.hasNext())break;i.next(),n.mid||(n.mid=new d,n.mid.segment=i.value()),o.push([0,n]),n=n.mid}}const s=n.value;n.value=t,n.key=e;for(let e=o.length-1;e>=0;e--){const t=o[e][1];t.updateHeight();const i=t.balanceFactor();if(i<-1||i>1){const i=o[e][0],n=o[e+1][0];if(1===i&&1===n)o[e][1]=t.rotateLeft();else if(-1===i&&-1===n)o[e][1]=t.rotateRight();else if(1===i&&-1===n)t.right=o[e+1][1]=o[e+1][1].rotateRight(),o[e][1]=t.rotateLeft();else{if(-1!==i||1!==n)throw new Error;t.left=o[e+1][1]=o[e+1][1].rotateLeft(),o[e][1]=t.rotateRight()}if(e>0)switch(o[e-1][0]){case-1:o[e-1][1].left=o[e][1];break;case 1:o[e-1][1].right=o[e][1];break;case 0:o[e-1][1].mid=o[e][1]}else this._root=o[0][1]}}return s}get(e){var t;return null===(t=this._getNode(e))||void 0===t?void 0:t.value}_getNode(e){const t=this._iter.reset(e);let i=this._root;for(;i;){const e=t.cmp(i.segment);if(e>0)i=i.left;else if(e<0)i=i.right;else{if(!t.hasNext())break;t.next(),i=i.mid}}return i}has(e){const t=this._getNode(e);return!(void 0===(null==t?void 0:t.value)&&void 0===(null==t?void 0:t.mid))}delete(e){return this._delete(e,!1)}deleteSuperstr(e){return this._delete(e,!0)}_delete(e,t){var i;const n=this._iter.reset(e),o=[];let s=this._root;for(;s;){const e=n.cmp(s.segment);if(e>0)o.push([-1,s]),s=s.left;else if(e<0)o.push([1,s]),s=s.right;else{if(!n.hasNext())break;n.next(),o.push([0,s]),s=s.mid}}if(s){if(t?(s.left=void 0,s.mid=void 0,s.right=void 0,s.height=1):(s.key=void 0,s.value=void 0),!s.mid&&!s.value)if(s.left&&s.right){const e=this._min(s.right),{key:t,value:i,segment:n}=e;this._delete(e.key,!1),s.key=t,s.value=i,s.segment=n}else{const e=null!==(i=s.left)&&void 0!==i?i:s.right;if(o.length>0){const[t,i]=o[o.length-1];switch(t){case-1:i.left=e;break;case 0:i.mid=e;break;case 1:i.right=e}}else this._root=e}for(let e=o.length-1;e>=0;e--){const t=o[e][1];t.updateHeight();const i=t.balanceFactor();if(i>1?(t.right.balanceFactor()>=0||(t.right=o[e+1][1]=o[e+1][1].rotateRight()),o[e][1]=t.rotateLeft()):i<-1&&(t.left.balanceFactor()<=0||(t.left=o[e+1][1]=o[e+1][1].rotateLeft()),o[e][1]=t.rotateRight()),e>0)switch(o[e-1][0]){case-1:o[e-1][1].left=o[e][1];break;case 1:o[e-1][1].right=o[e][1];break;case 0:o[e-1][1].mid=o[e][1]}else this._root=o[0][1]}}}_min(e){for(;e.left;)e=e.left;return e}findSubstr(e){const t=this._iter.reset(e);let i,n=this._root;for(;n;){const e=t.cmp(n.segment);if(e>0)n=n.left;else if(e<0)n=n.right;else{if(!t.hasNext())break;t.next(),i=n.value||i,n=n.mid}}return n&&n.value||i}findSuperstr(e){const t=this._iter.reset(e);let i=this._root;for(;i;){const e=t.cmp(i.segment);if(e>0)i=i.left;else if(e<0)i=i.right;else{if(!t.hasNext())return i.mid?this._entries(i.mid):void 0;t.next(),i=i.mid}}}forEach(e){for(const[t,i]of this)e(i,t)}*[Symbol.iterator](){yield*this._entries(this._root)}*_entries(e){e&&(e.left&&(yield*this._entries(e.left)),e.value&&(yield[e.key,e.value]),e.mid&&(yield*this._entries(e.mid)),e.right&&(yield*this._entries(e.right)))}}class u{constructor(e,t){this.uri=e,this.value=t}}class g{constructor(e,t){this[n]="ResourceMap",e instanceof g?(this.map=new Map(e.map),this.toKey=null!=t?t:g.defaultToKey):(this.map=new Map,this.toKey=null!=e?e:g.defaultToKey)}set(e,t){return this.map.set(this.toKey(e),new u(e,t)),this}get(e){var t;return null===(t=this.map.get(this.toKey(e)))||void 0===t?void 0:t.value}has(e){return this.map.has(this.toKey(e))}get size(){return this.map.size}clear(){this.map.clear()}delete(e){return this.map.delete(this.toKey(e))}forEach(e,t){void 0!==t&&(e=e.bind(t));for(let[t,i]of this.map)e(i.value,i.uri,this)}*values(){for(let e of this.map.values())yield e.value}*keys(){for(let e of this.map.values())yield e.uri}*entries(){for(let e of this.map.values())yield[e.uri,e.value]}*[(n=Symbol.toStringTag,Symbol.iterator)](){for(let[,e]of this.map)yield[e.uri,e.value]}}g.defaultToKey=e=>e.toString();class p{constructor(){this[o]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){var e;return null===(e=this._head)||void 0===e?void 0:e.value}get last(){var e;return null===(e=this._tail)||void 0===e?void 0:e.value}has(e){return this._map.has(e)}get(e,t=0){const i=this._map.get(e);if(i)return 0!==t&&this.touch(i,t),i.value}set(e,t,i=0){let n=this._map.get(e);if(n)n.value=t,0!==i&&this.touch(n,i);else{switch(n={key:e,value:t,next:void 0,previous:void 0},i){case 0:case 2:default:this.addItemLast(n);break;case 1:this.addItemFirst(n)}this._map.set(e,n),this._size++}return this}delete(e){return!!this.remove(e)}remove(e){const t=this._map.get(e);if(t)return this._map.delete(e),this.removeItem(t),this._size--,t.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");const e=this._head;return this._map.delete(e.key),this.removeItem(e),this._size--,e.value}forEach(e,t){const i=this._state;let n=this._head;for(;n;){if(t?e.bind(t)(n.value,n.key,this):e(n.value,n.key,this),this._state!==i)throw new Error("LinkedMap got modified during iteration.");n=n.next}}keys(){const e=this,t=this._state;let i=this._head;const n={[Symbol.iterator]:()=>n,next(){if(e._state!==t)throw new Error("LinkedMap got modified during iteration.");if(i){const e={value:i.key,done:!1};return i=i.next,e}return{value:void 0,done:!0}}};return n}values(){const e=this,t=this._state;let i=this._head;const n={[Symbol.iterator]:()=>n,next(){if(e._state!==t)throw new Error("LinkedMap got modified during iteration.");if(i){const e={value:i.value,done:!1};return i=i.next,e}return{value:void 0,done:!0}}};return n}entries(){const e=this,t=this._state;let i=this._head;const n={[Symbol.iterator]:()=>n,next(){if(e._state!==t)throw new Error("LinkedMap got modified during iteration.");if(i){const e={value:[i.key,i.value],done:!1};return i=i.next,e}return{value:void 0,done:!0}}};return n}[(o=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(e){if(e>=this.size)return;if(0===e)return void this.clear();let t=this._head,i=this.size;for(;t&&i>e;)this._map.delete(t.key),t=t.next,i--;this._head=t,this._size=i,t&&(t.previous=void 0),this._state++}addItemFirst(e){if(this._head||this._tail){if(!this._head)throw new Error("Invalid list");e.next=this._head,this._head.previous=e}else this._tail=e;this._head=e,this._state++}addItemLast(e){if(this._head||this._tail){if(!this._tail)throw new Error("Invalid list");e.previous=this._tail,this._tail.next=e}else this._head=e;this._tail=e,this._state++}removeItem(e){if(e===this._head&&e===this._tail)this._head=void 0,this._tail=void 0;else if(e===this._head){if(!e.next)throw new Error("Invalid list");e.next.previous=void 0,this._head=e.next}else if(e===this._tail){if(!e.previous)throw new Error("Invalid list");e.previous.next=void 0,this._tail=e.previous}else{const t=e.next,i=e.previous;if(!t||!i)throw new Error("Invalid list");t.previous=i,i.next=t}e.next=void 0,e.previous=void 0,this._state++}touch(e,t){if(!this._head||!this._tail)throw new Error("Invalid list");if(1===t||2===t)if(1===t){if(e===this._head)return;const t=e.next,i=e.previous;e===this._tail?(i.next=void 0,this._tail=i):(t.previous=i,i.next=t),e.previous=void 0,e.next=this._head,this._head.previous=e,this._head=e,this._state++}else if(2===t){if(e===this._tail)return;const t=e.next,i=e.previous;e===this._head?(t.previous=void 0,this._head=t):(t.previous=i,i.next=t),e.next=void 0,e.previous=this._tail,this._tail.next=e,this._tail=e,this._state++}}toJSON(){const e=[];return this.forEach(((t,i)=>{e.push([i,t])})),e}fromJSON(e){this.clear();for(const[t,i]of e)this.set(t,i)}}class f extends p{constructor(e,t=1){super(),this._limit=e,this._ratio=Math.min(Math.max(0,t),1)}get limit(){return this._limit}set limit(e){this._limit=e,this.checkTrim()}get(e,t=2){return super.get(e,t)}peek(e){return super.get(e,0)}set(e,t){return super.set(e,t,2),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}}},33720:(e,t,i)=>{"use strict";let n;i.d(t,{Qc:()=>s,Th:()=>o}),e=i.hmd(e),function(){function t(e){n=e()}t.amd=!0,function(i,n){"object"==typeof exports?e.exports=n():t.amd?t(n):(i="undefined"!=typeof globalThis?globalThis:i||self).marked=n()}(this,(function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}function i(e,i){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,i){if(e){if("string"==typeof e)return t(e,i);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(e,i):void 0}}(e))||i&&e&&"number"==typeof e.length){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n={exports:{}};function o(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}n.exports={defaults:{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:o,changeDefaults:function(e){n.exports.defaults=e}};var s=/[&<>"']/,r=/[&<>"']/g,a=/[<>"']|&(?!#?\w+;)/,l=/[<>"']|&(?!#?\w+;)/g,c={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},d=function(e){return c[e]};var h=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function u(e){return e.replace(h,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var g=/(^|[^\[])\^/g;var p=/[^\w:]/g,f=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;var m={},v=/^[^:]+:\/*[^/]*$/,_=/^([^:]+:)[\s\S]*$/,b=/^([^:]+:\/*[^/]*)[\s\S]*$/;function w(e,t){m[" "+e]||(v.test(e)?m[" "+e]=e+"/":m[" "+e]=y(e,"/",!0));var i=-1===(e=m[" "+e]).indexOf(":");return"//"===t.substring(0,2)?i?t:e.replace(_,"$1")+t:"/"===t.charAt(0)?i?t:e.replace(b,"$1")+t:e+t}function y(e,t,i){var n=e.length;if(0===n)return"";for(var o=0;o<n;){var s=e.charAt(n-o-1);if(s!==t||i){if(s===t||!i)break;o++}else o++}return e.substr(0,n-o)}var C=function(e,t){if(t){if(s.test(e))return e.replace(r,d)}else if(a.test(e))return e.replace(l,d);return e},x=u,S=function(e,t){e=e.source||e,t=t||"";var i={replace:function(t,n){return n=(n=n.source||n).replace(g,"$1"),e=e.replace(t,n),i},getRegex:function(){return new RegExp(e,t)}};return i},k=function(e,t,i){if(e){var n;try{n=decodeURIComponent(u(i)).replace(p,"").toLowerCase()}catch(e){return null}if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}t&&!f.test(i)&&(i=w(t,i));try{i=encodeURI(i).replace(/%25/g,"%")}catch(e){return null}return i},L={exec:function(){}},N=function(e){for(var t,i,n=1;n<arguments.length;n++)for(i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},D=function(e,t){var i=e.replace(/\|/g,(function(e,t,i){for(var n=!1,o=t;--o>=0&&"\\"===i[o];)n=!n;return n?"|":" |"})).split(/ \|/),n=0;if(i[0].trim()||i.shift(),i[i.length-1].trim()||i.pop(),i.length>t)i.splice(t);else for(;i.length<t;)i.push("");for(;n<i.length;n++)i[n]=i[n].trim().replace(/\\\|/g,"|");return i},I=y,E=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var i=e.length,n=0,o=0;o<i;o++)if("\\"===e[o])o++;else if(e[o]===t[0])n++;else if(e[o]===t[1]&&--n<0)return o;return-1},T=function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},M=function(e,t){if(t<1)return"";for(var i="";t>1;)1&t&&(i+=e),t>>=1,e+=e;return i+e},A=n.exports.defaults,O=I,P=D,R=C,F=E;function B(e,t,i,n){var o=t.href,s=t.title?R(t.title):null,r=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){n.state.inLink=!0;var a={type:"link",raw:i,href:o,title:s,text:r,tokens:n.inlineTokens(r,[])};return n.state.inLink=!1,a}return{type:"image",raw:i,href:o,title:s,text:R(r)}}var V=function(){function e(e){this.options=e||A}var t=e.prototype;return t.space=function(e){var t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}},t.code=function(e){var t=this.rules.block.code.exec(e);if(t){var i=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?i:O(i,"\n")}}},t.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var i=t[0],n=function(e,t){var i=e.match(/^(\s+)(?:```)/);if(null===i)return t;var n=i[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=n.length?e.slice(n.length):e})).join("\n")}(i,t[3]||"");return{type:"code",raw:i,lang:t[2]?t[2].trim():t[2],text:n}}},t.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var i=t[2].trim();if(/#$/.test(i)){var n=O(i,"#");this.options.pedantic?i=n.trim():n&&!/ $/.test(n)||(i=n.trim())}var o={type:"heading",raw:t[0],depth:t[1].length,text:i,tokens:[]};return this.lexer.inline(o.text,o.tokens),o}},t.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},t.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var i=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],tokens:this.lexer.blockTokens(i,[]),text:i}}},t.list=function(e){var t=this.rules.block.list.exec(e);if(t){var i,n,o,s,r,a,l,c,d,h,u=t[1].trim(),g=u.length>1,p={type:"list",raw:"",ordered:g,start:g?+u.slice(0,-1):"",loose:!1,items:[]};u=g?"\\d{1,9}\\"+u.slice(-1):"\\"+u,this.options.pedantic&&(u=g?u:"[*+-]");for(var f=new RegExp("^( {0,3}"+u+")((?: [^\\n]*| *)(?:\\n[^\\n]*)*(?:\\n|$))");e&&!this.rules.block.hr.test(e)&&(t=f.exec(e));){d=t[2].split("\n"),this.options.pedantic?(s=2,h=d[0].trimLeft()):(s=t[2].search(/[^ ]/),s=t[1].length+(s>4?1:s),h=d[0].slice(s-t[1].length)),a=!1,i=t[0],!d[0]&&/^ *$/.test(d[1])&&(i=t[1]+d.slice(0,2).join("\n")+"\n",p.loose=!0,d=[]);var m=new RegExp("^ {0,"+Math.min(3,s-1)+"}(?:[*+-]|\\d{1,9}[.)])");for(r=1;r<d.length;r++){if(c=d[r],this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g,"  ")),m.test(c)){i=t[1]+d.slice(0,r).join("\n")+"\n";break}if(a){if(!(c.search(/[^ ]/)>=s)&&c.trim()){i=t[1]+d.slice(0,r).join("\n")+"\n";break}h+="\n"+c.slice(s)}else c.trim()||(a=!0),c.search(/[^ ]/)>=s?h+="\n"+c.slice(s):h+="\n"+c}p.loose||(l?p.loose=!0:/\n *\n *$/.test(i)&&(l=!0)),this.options.gfm&&(n=/^\[[ xX]\] /.exec(h))&&(o="[ ] "!==n[0],h=h.replace(/^\[[ xX]\] +/,"")),p.items.push({type:"list_item",raw:i,task:!!n,checked:o,loose:!1,text:h}),p.raw+=i,e=e.slice(i.length)}p.items[p.items.length-1].raw=i.trimRight(),p.items[p.items.length-1].text=h.trimRight(),p.raw=p.raw.trimRight();var v=p.items.length;for(r=0;r<v;r++)this.lexer.state.top=!1,p.items[r].tokens=this.lexer.blockTokens(p.items[r].text,[]),p.items[r].tokens.some((function(e){return"space"===e.type}))&&(p.loose=!0,p.items[r].loose=!0);return p}},t.html=function(e){var t=this.rules.block.html.exec(e);if(t){var i={type:"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:t[0]};return this.options.sanitize&&(i.type="paragraph",i.text=this.options.sanitizer?this.options.sanitizer(t[0]):R(t[0]),i.tokens=[],this.lexer.inline(i.text,i.tokens)),i}},t.def=function(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{type:"def",tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}},t.table=function(e){var t=this.rules.block.table.exec(e);if(t){var i={type:"table",header:P(t[1]).map((function(e){return{text:e}})),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(i.header.length===i.align.length){i.raw=t[0];var n,o,s,r,a=i.align.length;for(n=0;n<a;n++)/^ *-+: *$/.test(i.align[n])?i.align[n]="right":/^ *:-+: *$/.test(i.align[n])?i.align[n]="center":/^ *:-+ *$/.test(i.align[n])?i.align[n]="left":i.align[n]=null;for(a=i.rows.length,n=0;n<a;n++)i.rows[n]=P(i.rows[n],i.header.length).map((function(e){return{text:e}}));for(a=i.header.length,o=0;o<a;o++)i.header[o].tokens=[],this.lexer.inlineTokens(i.header[o].text,i.header[o].tokens);for(a=i.rows.length,o=0;o<a;o++)for(r=i.rows[o],s=0;s<r.length;s++)r[s].tokens=[],this.lexer.inlineTokens(r[s].text,r[s].tokens);return i}}},t.lheading=function(e){var t=this.rules.block.lheading.exec(e);if(t){var i={type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:[]};return this.lexer.inline(i.text,i.tokens),i}},t.paragraph=function(e){var t=this.rules.block.paragraph.exec(e);if(t){var i={type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1],tokens:[]};return this.lexer.inline(i.text,i.tokens),i}},t.text=function(e){var t=this.rules.block.text.exec(e);if(t){var i={type:"text",raw:t[0],text:t[0],tokens:[]};return this.lexer.inline(i.text,i.tokens),i}},t.escape=function(e){var t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:R(t[1])}},t.tag=function(e){var t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^<a /i.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):R(t[0]):t[0]}},t.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var i=t[2].trim();if(!this.options.pedantic&&/^</.test(i)){if(!/>$/.test(i))return;var n=O(i.slice(0,-1),"\\");if((i.length-n.length)%2==0)return}else{var o=F(t[2],"()");if(o>-1){var s=(0===t[0].indexOf("!")?5:4)+t[1].length+o;t[2]=t[2].substring(0,o),t[0]=t[0].substring(0,s).trim(),t[3]=""}}var r=t[2],a="";if(this.options.pedantic){var l=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r);l&&(r=l[1],a=l[3])}else a=t[3]?t[3].slice(1,-1):"";return r=r.trim(),/^</.test(r)&&(r=this.options.pedantic&&!/>$/.test(i)?r.slice(1):r.slice(1,-1)),B(t,{href:r?r.replace(this.rules.inline._escapes,"$1"):r,title:a?a.replace(this.rules.inline._escapes,"$1"):a},t[0],this.lexer)}},t.reflink=function(e,t){var i;if((i=this.rules.inline.reflink.exec(e))||(i=this.rules.inline.nolink.exec(e))){var n=(i[2]||i[1]).replace(/\s+/g," ");if(!(n=t[n.toLowerCase()])||!n.href){var o=i[0].charAt(0);return{type:"text",raw:o,text:o}}return B(i,n,i[0],this.lexer)}},t.emStrong=function(e,t,i){void 0===i&&(i="");var n=this.rules.inline.emStrong.lDelim.exec(e);if(n&&(!n[3]||!i.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var o=n[1]||n[2]||"";if(!o||o&&(""===i||this.rules.inline.punctuation.exec(i))){var s,r,a=n[0].length-1,l=a,c=0,d="*"===n[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(d.lastIndex=0,t=t.slice(-1*e.length+a);null!=(n=d.exec(t));)if(s=n[1]||n[2]||n[3]||n[4]||n[5]||n[6])if(r=s.length,n[3]||n[4])l+=r;else if(!((n[5]||n[6])&&a%3)||(a+r)%3){if(!((l-=r)>0)){if(r=Math.min(r,r+l+c),Math.min(a,r)%2){var h=e.slice(1,a+n.index+r);return{type:"em",raw:e.slice(0,a+n.index+r+1),text:h,tokens:this.lexer.inlineTokens(h,[])}}var u=e.slice(2,a+n.index+r-1);return{type:"strong",raw:e.slice(0,a+n.index+r+1),text:u,tokens:this.lexer.inlineTokens(u,[])}}}else c+=r}}},t.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var i=t[2].replace(/\n/g," "),n=/[^ ]/.test(i),o=/^ /.test(i)&&/ $/.test(i);return n&&o&&(i=i.substring(1,i.length-1)),i=R(i,!0),{type:"codespan",raw:t[0],text:i}}},t.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},t.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2],[])}},t.autolink=function(e,t){var i,n,o=this.rules.inline.autolink.exec(e);if(o)return n="@"===o[2]?"mailto:"+(i=R(this.options.mangle?t(o[1]):o[1])):i=R(o[1]),{type:"link",raw:o[0],text:i,href:n,tokens:[{type:"text",raw:i,text:i}]}},t.url=function(e,t){var i;if(i=this.rules.inline.url.exec(e)){var n,o;if("@"===i[2])o="mailto:"+(n=R(this.options.mangle?t(i[0]):i[0]));else{var s;do{s=i[0],i[0]=this.rules.inline._backpedal.exec(i[0])[0]}while(s!==i[0]);n=R(i[0]),o="www."===i[1]?"http://"+n:n}return{type:"link",raw:i[0],text:n,href:o,tokens:[{type:"text",raw:n,text:n}]}}},t.inlineText=function(e,t){var i,n=this.rules.inline.text.exec(e);if(n)return i=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(n[0]):R(n[0]):n[0]:R(this.options.smartypants?t(n[0]):n[0]),{type:"text",raw:n[0],text:i}},e}(),W=L,H=S,z=N,j={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)( [^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:W,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};j.def=H(j.def).replace("label",j._label).replace("title",j._title).getRegex(),j.bullet=/(?:[*+-]|\d{1,9}[.)])/,j.listItemStart=H(/^( *)(bull) */).replace("bull",j.bullet).getRegex(),j.list=H(j.list).replace(/bull/g,j.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+j.def.source+")").getRegex(),j._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",j._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,j.html=H(j.html,"i").replace("comment",j._comment).replace("tag",j._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),j.paragraph=H(j._paragraph).replace("hr",j.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",j._tag).getRegex(),j.blockquote=H(j.blockquote).replace("paragraph",j.paragraph).getRegex(),j.normal=z({},j),j.gfm=z({},j.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)\\|?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),j.gfm.table=H(j.gfm.table).replace("hr",j.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",j._tag).getRegex(),j.pedantic=z({},j.normal,{html:H("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",j._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:W,paragraph:H(j.normal._paragraph).replace("hr",j.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",j.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var U={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:W,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_*]*?\*[^_*]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^_*]*?\_[^_*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:W,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};U.punctuation=H(U.punctuation).replace(/punctuation/g,U._punctuation).getRegex(),U.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,U.escapedEmSt=/\\\*|\\_/g,U._comment=H(j._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),U.emStrong.lDelim=H(U.emStrong.lDelim).replace(/punct/g,U._punctuation).getRegex(),U.emStrong.rDelimAst=H(U.emStrong.rDelimAst,"g").replace(/punct/g,U._punctuation).getRegex(),U.emStrong.rDelimUnd=H(U.emStrong.rDelimUnd,"g").replace(/punct/g,U._punctuation).getRegex(),U._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,U._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,U._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,U.autolink=H(U.autolink).replace("scheme",U._scheme).replace("email",U._email).getRegex(),U._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,U.tag=H(U.tag).replace("comment",U._comment).replace("attribute",U._attribute).getRegex(),U._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,U._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,U._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,U.link=H(U.link).replace("label",U._label).replace("href",U._href).replace("title",U._title).getRegex(),U.reflink=H(U.reflink).replace("label",U._label).getRegex(),U.reflinkSearch=H(U.reflinkSearch,"g").replace("reflink",U.reflink).replace("nolink",U.nolink).getRegex(),U.normal=z({},U),U.pedantic=z({},U.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:H(/^!?\[(label)\]\((.*?)\)/).replace("label",U._label).getRegex(),reflink:H(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",U._label).getRegex()}),U.gfm=z({},U.normal,{escape:H(U.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/}),U.gfm.url=H(U.gfm.url,"i").replace("email",U.gfm._extended_email).getRegex(),U.breaks=z({},U.gfm,{br:H(U.br).replace("{2,}","*").getRegex(),text:H(U.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var $={block:j,inline:U},K=V,q=n.exports.defaults,Z=$.block,G=$.inline,Y=M;function Q(e){return e.replace(/---/g,"â€”").replace(/--/g,"â€“").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1â€˜").replace(/'/g,"â€™").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1â€œ").replace(/"/g,"â€").replace(/\.{3}/g,"â€¦")}function X(e){var t,i,n="",o=e.length;for(t=0;t<o;t++)i=e.charCodeAt(t),Math.random()>.5&&(i="x"+i.toString(16)),n+="&#"+i+";";return n}var J=function(){function t(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||q,this.options.tokenizer=this.options.tokenizer||new K,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};var t={block:Z.normal,inline:G.normal};this.options.pedantic?(t.block=Z.pedantic,t.inline=G.pedantic):this.options.gfm&&(t.block=Z.gfm,this.options.breaks?t.inline=G.breaks:t.inline=G.gfm),this.tokenizer.rules=t}t.lex=function(e,i){return new t(i).lex(e)},t.lexInline=function(e,i){return new t(i).inlineTokens(e)};var i,n,o,s=t.prototype;return s.lex=function(e){var t;for(e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g,"    "),this.blockTokens(e,this.tokens);t=this.inlineQueue.shift();)this.inlineTokens(t.src,t.tokens);return this.tokens},s.blockTokens=function(e,t){var i,n,o,s,r=this;for(void 0===t&&(t=[]),this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((function(n){return!!(i=n.call({lexer:r},e,t))&&(e=e.substring(i.raw.length),t.push(i),!0)}))))if(i=this.tokenizer.space(e))e=e.substring(i.raw.length),i.type&&t.push(i);else if(i=this.tokenizer.code(e))e=e.substring(i.raw.length),!(n=t[t.length-1])||"paragraph"!==n.type&&"text"!==n.type?t.push(i):(n.raw+="\n"+i.raw,n.text+="\n"+i.text,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(i=this.tokenizer.fences(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.heading(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.hr(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.blockquote(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.list(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.html(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.def(e))e=e.substring(i.raw.length),!(n=t[t.length-1])||"paragraph"!==n.type&&"text"!==n.type?this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title}):(n.raw+="\n"+i.raw,n.text+="\n"+i.raw,this.inlineQueue[this.inlineQueue.length-1].src=n.text);else if(i=this.tokenizer.table(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.lheading(e))e=e.substring(i.raw.length),t.push(i);else if(o=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=1/0,i=e.slice(1),n=void 0;r.options.extensions.startBlock.forEach((function(e){"number"==typeof(n=e.call({lexer:this},i))&&n>=0&&(t=Math.min(t,n))})),t<1/0&&t>=0&&(o=e.substring(0,t+1))}(),this.state.top&&(i=this.tokenizer.paragraph(o)))n=t[t.length-1],s&&"paragraph"===n.type?(n.raw+="\n"+i.raw,n.text+="\n"+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):t.push(i),s=o.length!==e.length,e=e.substring(i.raw.length);else if(i=this.tokenizer.text(e))e=e.substring(i.raw.length),(n=t[t.length-1])&&"text"===n.type?(n.raw+="\n"+i.raw,n.text+="\n"+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=n.text):t.push(i);else if(e){var a="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(a);break}throw new Error(a)}return this.state.top=!0,t},s.inline=function(e,t){this.inlineQueue.push({src:e,tokens:t})},s.inlineTokens=function(e,t){var i,n,o,s=this;void 0===t&&(t=[]);var r,a,l,c=e;if(this.tokens.links){var d=Object.keys(this.tokens.links);if(d.length>0)for(;null!=(r=this.tokenizer.rules.inline.reflinkSearch.exec(c));)d.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,r.index)+"["+Y("a",r[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(r=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,r.index)+"["+Y("a",r[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(r=this.tokenizer.rules.inline.escapedEmSt.exec(c));)c=c.slice(0,r.index)+"++"+c.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(l=""),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(n){return!!(i=n.call({lexer:s},e,t))&&(e=e.substring(i.raw.length),t.push(i),!0)}))))if(i=this.tokenizer.escape(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.tag(e))e=e.substring(i.raw.length),(n=t[t.length-1])&&"text"===i.type&&"text"===n.type?(n.raw+=i.raw,n.text+=i.text):t.push(i);else if(i=this.tokenizer.link(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(i.raw.length),(n=t[t.length-1])&&"text"===i.type&&"text"===n.type?(n.raw+=i.raw,n.text+=i.text):t.push(i);else if(i=this.tokenizer.emStrong(e,c,l))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.codespan(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.br(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.del(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.autolink(e,X))e=e.substring(i.raw.length),t.push(i);else if(this.state.inLink||!(i=this.tokenizer.url(e,X))){if(o=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=1/0,i=e.slice(1),n=void 0;s.options.extensions.startInline.forEach((function(e){"number"==typeof(n=e.call({lexer:this},i))&&n>=0&&(t=Math.min(t,n))})),t<1/0&&t>=0&&(o=e.substring(0,t+1))}(),i=this.tokenizer.inlineText(o,Q))e=e.substring(i.raw.length),"_"!==i.raw.slice(-1)&&(l=i.raw.slice(-1)),a=!0,(n=t[t.length-1])&&"text"===n.type?(n.raw+=i.raw,n.text+=i.text):t.push(i);else if(e){var h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}throw new Error(h)}}else e=e.substring(i.raw.length),t.push(i);return t},i=t,o=[{key:"rules",get:function(){return{block:Z,inline:G}}}],(n=null)&&e(i.prototype,n),o&&e(i,o),t}(),ee=n.exports.defaults,te=k,ie=C,ne=function(){function e(e){this.options=e||ee}var t=e.prototype;return t.code=function(e,t,i){var n=(t||"").match(/\S*/)[0];if(this.options.highlight){var o=this.options.highlight(e,n);null!=o&&o!==e&&(i=!0,e=o)}return e=e.replace(/\n$/,"")+"\n",n?'<pre><code class="'+this.options.langPrefix+ie(n,!0)+'">'+(i?e:ie(e,!0))+"</code></pre>\n":"<pre><code>"+(i?e:ie(e,!0))+"</code></pre>\n"},t.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},t.html=function(e){return e},t.heading=function(e,t,i,n){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+n.slug(i)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},t.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},t.list=function(e,t,i){var n=t?"ol":"ul";return"<"+n+(t&&1!==i?' start="'+i+'"':"")+">\n"+e+"</"+n+">\n"},t.listitem=function(e){return"<li>"+e+"</li>\n"},t.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},t.paragraph=function(e){return"<p>"+e+"</p>\n"},t.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},t.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},t.tablecell=function(e,t){var i=t.header?"th":"td";return(t.align?"<"+i+' align="'+t.align+'">':"<"+i+">")+e+"</"+i+">\n"},t.strong=function(e){return"<strong>"+e+"</strong>"},t.em=function(e){return"<em>"+e+"</em>"},t.codespan=function(e){return"<code>"+e+"</code>"},t.br=function(){return this.options.xhtml?"<br/>":"<br>"},t.del=function(e){return"<del>"+e+"</del>"},t.link=function(e,t,i){if(null===(e=te(this.options.sanitize,this.options.baseUrl,e)))return i;var n='<a href="'+ie(e)+'"';return t&&(n+=' title="'+t+'"'),n+=">"+i+"</a>"},t.image=function(e,t,i){if(null===(e=te(this.options.sanitize,this.options.baseUrl,e)))return i;var n='<img src="'+e+'" alt="'+i+'"';return t&&(n+=' title="'+t+'"'),n+=this.options.xhtml?"/>":">"},t.text=function(e){return e},e}(),oe=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,i){return""+i},t.image=function(e,t,i){return""+i},t.br=function(){return""},e}(),se=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var i=e,n=0;if(this.seen.hasOwnProperty(i)){n=this.seen[e];do{i=e+"-"+ ++n}while(this.seen.hasOwnProperty(i))}return t||(this.seen[e]=n,this.seen[i]=0),i},t.slug=function(e,t){void 0===t&&(t={});var i=this.serialize(e);return this.getNextSafeSlug(i,t.dryrun)},e}(),re=ne,ae=oe,le=se,ce=n.exports.defaults,de=x,he=function(){function e(e){this.options=e||ce,this.options.renderer=this.options.renderer||new re,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new ae,this.slugger=new le}e.parse=function(t,i){return new e(i).parse(t)},e.parseInline=function(t,i){return new e(i).parseInline(t)};var t=e.prototype;return t.parse=function(e,t){void 0===t&&(t=!0);var i,n,o,s,r,a,l,c,d,h,u,g,p,f,m,v,_,b,w,y="",C=e.length;for(i=0;i<C;i++)if(h=e[i],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[h.type])||!1===(w=this.options.extensions.renderers[h.type].call({parser:this},h))&&["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(h.type))switch(h.type){case"space":continue;case"hr":y+=this.renderer.hr();continue;case"heading":y+=this.renderer.heading(this.parseInline(h.tokens),h.depth,de(this.parseInline(h.tokens,this.textRenderer)),this.slugger);continue;case"code":y+=this.renderer.code(h.text,h.lang,h.escaped);continue;case"table":for(c="",l="",s=h.header.length,n=0;n<s;n++)l+=this.renderer.tablecell(this.parseInline(h.header[n].tokens),{header:!0,align:h.align[n]});for(c+=this.renderer.tablerow(l),d="",s=h.rows.length,n=0;n<s;n++){for(l="",r=(a=h.rows[n]).length,o=0;o<r;o++)l+=this.renderer.tablecell(this.parseInline(a[o].tokens),{header:!1,align:h.align[o]});d+=this.renderer.tablerow(l)}y+=this.renderer.table(c,d);continue;case"blockquote":d=this.parse(h.tokens),y+=this.renderer.blockquote(d);continue;case"list":for(u=h.ordered,g=h.start,p=h.loose,s=h.items.length,d="",n=0;n<s;n++)v=(m=h.items[n]).checked,_=m.task,f="",m.task&&(b=this.renderer.checkbox(v),p?m.tokens.length>0&&"paragraph"===m.tokens[0].type?(m.tokens[0].text=b+" "+m.tokens[0].text,m.tokens[0].tokens&&m.tokens[0].tokens.length>0&&"text"===m.tokens[0].tokens[0].type&&(m.tokens[0].tokens[0].text=b+" "+m.tokens[0].tokens[0].text)):m.tokens.unshift({type:"text",text:b}):f+=b),f+=this.parse(m.tokens,p),d+=this.renderer.listitem(f,_,v);y+=this.renderer.list(d,u,g);continue;case"html":y+=this.renderer.html(h.text);continue;case"paragraph":y+=this.renderer.paragraph(this.parseInline(h.tokens));continue;case"text":for(d=h.tokens?this.parseInline(h.tokens):h.text;i+1<C&&"text"===e[i+1].type;)d+="\n"+((h=e[++i]).tokens?this.parseInline(h.tokens):h.text);y+=t?this.renderer.paragraph(d):d;continue;default:var x='Token with "'+h.type+'" type was not found.';if(this.options.silent)return void console.error(x);throw new Error(x)}else y+=w||"";return y},t.parseInline=function(e,t){t=t||this.renderer;var i,n,o,s="",r=e.length;for(i=0;i<r;i++)if(n=e[i],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[n.type])||!1===(o=this.options.extensions.renderers[n.type].call({parser:this},n))&&["escape","html","link","image","strong","em","codespan","br","del","text"].includes(n.type))switch(n.type){case"escape":case"text":s+=t.text(n.text);break;case"html":s+=t.html(n.text);break;case"link":s+=t.link(n.href,n.title,this.parseInline(n.tokens,t));break;case"image":s+=t.image(n.href,n.title,n.text);break;case"strong":s+=t.strong(this.parseInline(n.tokens,t));break;case"em":s+=t.em(this.parseInline(n.tokens,t));break;case"codespan":s+=t.codespan(n.text);break;case"br":s+=t.br();break;case"del":s+=t.del(this.parseInline(n.tokens,t));break;default:var a='Token with "'+n.type+'" type was not found.';if(this.options.silent)return void console.error(a);throw new Error(a)}else s+=o||"";return s},e}(),ue=J,ge=he,pe=V,fe=ne,me=oe,ve=se,_e=N,be=T,we=C,ye=n.exports.getDefaults,Ce=n.exports.changeDefaults,xe=n.exports.defaults;function Se(e,t,i){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(i=t,t=null),t=_e({},Se.defaults,t||{}),be(t),i){var n,o=t.highlight;try{n=ue.lex(e,t)}catch(e){return i(e)}var s=function(e){var s;if(!e)try{t.walkTokens&&Se.walkTokens(n,t.walkTokens),s=ge.parse(n,t)}catch(t){e=t}return t.highlight=o,e?i(e):i(null,s)};if(!o||o.length<3)return s();if(delete t.highlight,!n.length)return s();var r=0;return Se.walkTokens(n,(function(e){"code"===e.type&&(r++,setTimeout((function(){o(e.text,e.lang,(function(t,i){if(t)return s(t);null!=i&&i!==e.text&&(e.text=i,e.escaped=!0),0===--r&&s()}))}),0))})),void(0===r&&s())}try{var a=ue.lex(e,t);return t.walkTokens&&Se.walkTokens(a,t.walkTokens),ge.parse(a,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+we(e.message+"",!0)+"</pre>";throw e}}return Se.options=Se.setOptions=function(e){return _e(Se.defaults,e),Ce(Se.defaults),Se},Se.getDefaults=ye,Se.defaults=xe,Se.use=function(){for(var e=this,t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];var o,s=_e.apply(void 0,[{}].concat(i)),r=Se.defaults.extensions||{renderers:{},childTokens:{}};i.forEach((function(t){if(t.extensions&&(o=!0,t.extensions.forEach((function(e){if(!e.name)throw new Error("extension name required");if(e.renderer){var t=r.renderers?r.renderers[e.name]:null;r.renderers[e.name]=t?function(){for(var i=arguments.length,n=new Array(i),o=0;o<i;o++)n[o]=arguments[o];var s=e.renderer.apply(this,n);return!1===s&&(s=t.apply(this,n)),s}:e.renderer}if(e.tokenizer){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");r[e.level]?r[e.level].unshift(e.tokenizer):r[e.level]=[e.tokenizer],e.start&&("block"===e.level?r.startBlock?r.startBlock.push(e.start):r.startBlock=[e.start]:"inline"===e.level&&(r.startInline?r.startInline.push(e.start):r.startInline=[e.start]))}e.childTokens&&(r.childTokens[e.name]=e.childTokens)}))),t.renderer&&function(){var e=Se.defaults.renderer||new fe,i=function(i){var n=e[i];e[i]=function(){for(var o=arguments.length,s=new Array(o),r=0;r<o;r++)s[r]=arguments[r];var a=t.renderer[i].apply(e,s);return!1===a&&(a=n.apply(e,s)),a}};for(var n in t.renderer)i(n);s.renderer=e}(),t.tokenizer&&function(){var e=Se.defaults.tokenizer||new pe,i=function(i){var n=e[i];e[i]=function(){for(var o=arguments.length,s=new Array(o),r=0;r<o;r++)s[r]=arguments[r];var a=t.tokenizer[i].apply(e,s);return!1===a&&(a=n.apply(e,s)),a}};for(var n in t.tokenizer)i(n);s.tokenizer=e}(),t.walkTokens){var i=Se.defaults.walkTokens;s.walkTokens=function(n){t.walkTokens.call(e,n),i&&i(n)}}o&&(s.extensions=r),Se.setOptions(s)}))},Se.walkTokens=function(e,t){for(var n,o=function(){var e=n.value;switch(t(e),e.type){case"table":for(var o,s=i(e.header);!(o=s()).done;){var r=o.value;Se.walkTokens(r.tokens,t)}for(var a,l=i(e.rows);!(a=l()).done;)for(var c,d=i(a.value);!(c=d()).done;){var h=c.value;Se.walkTokens(h.tokens,t)}break;case"list":Se.walkTokens(e.items,t);break;default:Se.defaults.extensions&&Se.defaults.extensions.childTokens&&Se.defaults.extensions.childTokens[e.type]?Se.defaults.extensions.childTokens[e.type].forEach((function(i){Se.walkTokens(e[i],t)})):e.tokens&&Se.walkTokens(e.tokens,t)}},s=i(e);!(n=s()).done;)o()},Se.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=_e({},Se.defaults,t||{}),be(t);try{var i=ue.lexInline(e,t);return t.walkTokens&&Se.walkTokens(i,t.walkTokens),ge.parseInline(i,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+we(e.message+"",!0)+"</pre>";throw e}},Se.Parser=ge,Se.parser=ge.parse,Se.Renderer=fe,Se.TextRenderer=me,Se.Lexer=ue,Se.lexer=ue.lex,Se.Tokenizer=pe,Se.Slugger=ve,Se.parse=Se,Se}))}();n.Parser,n.parser;var o=n.Renderer,s=(n.TextRenderer,n.Lexer,n.lexer,n.Tokenizer,n.Slugger,n.parse)},23897:(e,t,i)=>{"use strict";i.d(t,{Q:()=>s});var n=i(53060),o=i(70666);function s(e){let t=JSON.parse(e);return t=r(t),t}function r(e,t=0){if(!e||t>200)return e;if("object"==typeof e){switch(e.$mid){case 1:return o.o.revive(e);case 2:return new RegExp(e.source,e.flags)}if(e instanceof n.KN||e instanceof Uint8Array)return e;if(Array.isArray(e))for(let i=0;i<e.length;++i)e[i]=r(e[i],t+1);else for(const i in e)Object.hasOwnProperty.call(e,i)&&(e[i]=r(e[i],t+1))}return e}},81170:(e,t,i)=>{"use strict";i.d(t,{G8:()=>p,bS:()=>g,sA:()=>u,vW:()=>n});var n,o=i(14118),s=i(66663),r=i(88721),a=i(95935),l=i(97295);!function(e){e.text="text/plain",e.binary="application/octet-stream",e.unknown="application/unknown",e.markdown="text/markdown",e.latex="text/latex"}(n||(n={}));let c=[],d=[],h=[];function u(e,t=!1){const i=function(e){return{id:e.id,mime:e.mime,filename:e.filename,extension:e.extension,filepattern:e.filepattern,firstline:e.firstline,userConfigured:e.userConfigured,filenameLowercase:e.filename?e.filename.toLowerCase():void 0,extensionLowercase:e.extension?e.extension.toLowerCase():void 0,filepatternLowercase:e.filepattern?(0,o.Qc)(e.filepattern.toLowerCase()):void 0,filepatternOnPath:!!e.filepattern&&e.filepattern.indexOf(r.KR.sep)>=0}}(e);c.push(i),i.userConfigured?h.push(i):d.push(i),t&&!i.userConfigured&&c.forEach((e=>{e.mime===i.mime||e.userConfigured||(i.extension&&e.extension===i.extension&&console.warn(`Overwriting extension <<${i.extension}>> to now point to mime <<${i.mime}>>`),i.filename&&e.filename===i.filename&&console.warn(`Overwriting filename <<${i.filename}>> to now point to mime <<${i.mime}>>`),i.filepattern&&e.filepattern===i.filepattern&&console.warn(`Overwriting filepattern <<${i.filepattern}>> to now point to mime <<${i.mime}>>`),i.firstline&&e.firstline===i.firstline&&console.warn(`Overwriting firstline <<${i.firstline}>> to now point to mime <<${i.mime}>>`))}))}function g(e){e?(c=c.filter((e=>!e.userConfigured)),h=[]):(c=[],d=[],h=[])}function p(e,t){let i;if(e)switch(e.scheme){case s.lg.file:i=e.fsPath;break;case s.lg.data:i=a.Vb.parseMetaData(e).get(a.Vb.META_DATA_LABEL);break;default:i=e.path}if(!i)return[n.unknown];i=i.toLowerCase();const o=(0,r.EZ)(i),u=f(i,o,h);if(u)return[u,n.text];const g=f(i,o,d);if(g)return[g,n.text];if(t){const e=function(e){(0,l.uS)(e)&&(e=e.substr(1));if(e.length>0)for(let t=c.length-1;t>=0;t--){const i=c[t];if(!i.firstline)continue;const n=e.match(i.firstline);if(n&&n.length>0)return i.mime}return null}(t);if(e)return[e,n.text]}return[n.unknown]}function f(e,t,i){var n;let o=null,s=null,r=null;for(let a=i.length-1;a>=0;a--){const l=i[a];if(t===l.filenameLowercase){o=l;break}if(l.filepattern&&(!s||l.filepattern.length>s.filepattern.length)){const i=l.filepatternOnPath?e:t;(null===(n=l.filepatternLowercase)||void 0===n?void 0:n.call(l,i))&&(s=l)}l.extension&&(!r||l.extension.length>r.extension.length)&&t.endsWith(l.extensionLowercase)&&(r=l)}return o?o.mime:s?s.mime:r?r.mime:null}},66663:(e,t,i)=>{"use strict";i.d(t,{Gi:()=>l,WX:()=>r,lg:()=>n});var n,o=i(1432),s=i(70666);!function(e){e.inMemory="inmemory",e.vscode="vscode",e.internal="private",e.walkThrough="walkThrough",e.walkThroughSnippet="walkThroughSnippet",e.http="http",e.https="https",e.file="file",e.mailto="mailto",e.untitled="untitled",e.data="data",e.command="command",e.vscodeRemote="vscode-remote",e.vscodeRemoteResource="vscode-remote-resource",e.userData="vscode-userdata",e.vscodeCustomEditor="vscode-custom-editor",e.vscodeNotebook="vscode-notebook",e.vscodeNotebookCell="vscode-notebook-cell",e.vscodeNotebookCellMetadata="vscode-notebook-cell-metadata",e.vscodeNotebookCellOutput="vscode-notebook-cell-output",e.vscodeInteractive="vscode-interactive",e.vscodeInteractiveInput="vscode-interactive-input",e.vscodeSettings="vscode-settings",e.vscodeWorkspaceTrust="vscode-workspace-trust",e.vscodeTerminal="vscode-terminal",e.webviewPanel="webview-panel",e.vscodeWebview="vscode-webview",e.extension="extension",e.vscodeFileResource="vscode-file",e.tmp="tmp"}(n||(n={}));const r=new class{constructor(){this._hosts=Object.create(null),this._ports=Object.create(null),this._connectionTokens=Object.create(null),this._preferredWebSchema="http",this._delegate=null}setPreferredWebSchema(e){this._preferredWebSchema=e}rewrite(e){if(this._delegate)return this._delegate(e);const t=e.authority;let i=this._hosts[t];i&&-1!==i.indexOf(":")&&(i=`[${i}]`);const r=this._ports[t],a=this._connectionTokens[t];let l=`path=${encodeURIComponent(e.path)}`;return"string"==typeof a&&(l+=`&tkn=${encodeURIComponent(a)}`),s.o.from({scheme:o.$L?this._preferredWebSchema:n.vscodeRemoteResource,authority:`${i}:${r}`,path:"/vscode-remote-resource",query:l})}};class a{asBrowserUri(e,t){const i=this.toUri(e,t);return i.scheme===n.vscodeRemote?r.rewrite(i):i.scheme===n.file&&(o.tY||"function"==typeof o.li.importScripts&&o.li.origin===`${n.vscodeFileResource}://${a.FALLBACK_AUTHORITY}`)?i.with({scheme:n.vscodeFileResource,authority:i.authority||a.FALLBACK_AUTHORITY,query:null,fragment:null}):i}toUri(e,t){return s.o.isUri(e)?e:s.o.parse(t.toUrl(e))}}a.FALLBACK_AUTHORITY="vscode-app";const l=new a},59870:(e,t,i)=>{"use strict";function n(e,t,i){return Math.min(Math.max(e,t),i)}i.d(t,{n:()=>o,u:()=>n});class o{constructor(){this._n=1,this._val=0}update(e){return this._val=this._val+(e-this._val)/this._n,this._n+=1,this}get value(){return this._val}}},36248:(e,t,i)=>{"use strict";i.d(t,{CJ:()=>h,I8:()=>o,_A:()=>s,fS:()=>d,jB:()=>c,rs:()=>a});var n=i(98401);function o(e){if(!e||"object"!=typeof e)return e;if(e instanceof RegExp)return e;const t=Array.isArray(e)?[]:{};return Object.keys(e).forEach((i=>{e[i]&&"object"==typeof e[i]?t[i]=o(e[i]):t[i]=e[i]})),t}function s(e){if(!e||"object"!=typeof e)return e;const t=[e];for(;t.length>0;){const e=t.shift();Object.freeze(e);for(const i in e)if(r.call(e,i)){const n=e[i];"object"!=typeof n||Object.isFrozen(n)||t.push(n)}}return e}const r=Object.prototype.hasOwnProperty;function a(e,t){return l(e,t,new Set)}function l(e,t,i){if((0,n.Jp)(e))return e;const o=t(e);if(void 0!==o)return o;if((0,n.kJ)(e)){const n=[];for(const o of e)n.push(l(o,t,i));return n}if((0,n.Kn)(e)){if(i.has(e))throw new Error("Cannot clone recursive data-structure");i.add(e);const n={};for(let o in e)r.call(e,o)&&(n[o]=l(e[o],t,i));return i.delete(e),n}return e}function c(e,t,i=!0){return(0,n.Kn)(e)?((0,n.Kn)(t)&&Object.keys(t).forEach((o=>{o in e?i&&((0,n.Kn)(e[o])&&(0,n.Kn)(t[o])?c(e[o],t[o],i):e[o]=t[o]):e[o]=t[o]})),e):t}function d(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(typeof e!=typeof t)return!1;if("object"!=typeof e)return!1;if(Array.isArray(e)!==Array.isArray(t))return!1;let i,n;if(Array.isArray(e)){if(e.length!==t.length)return!1;for(i=0;i<e.length;i++)if(!d(e[i],t[i]))return!1}else{const o=[];for(n in e)o.push(n);o.sort();const s=[];for(n in t)s.push(n);if(s.sort(),!d(o,s))return!1;for(i=0;i<o.length;i++)if(!d(e[o[i]],t[o[i]]))return!1}return!0}function h(e,t,i){const n=t(e);return void 0===n?i:n}},88721:(e,t,i)=>{"use strict";i.d(t,{EZ:()=>k,XX:()=>S,DZ:()=>L,Fv:()=>y,KR:()=>w,Gf:()=>x,DB:()=>C,ir:()=>N,Ku:()=>b});var n=i(1432);let o;if(void 0!==n.li.vscode&&void 0!==n.li.vscode.process){const e=n.li.vscode.process;o={get platform(){return e.platform},get arch(){return e.arch},get env(){return e.env},cwd:()=>e.cwd(),nextTick:e=>(0,n.xS)(e)}}else o="undefined"!=typeof process?{get platform(){return process.platform},get arch(){return process.arch},get env(){return process.env},cwd:()=>process.env.VSCODE_CWD||process.cwd(),nextTick:e=>process.nextTick(e)}:{get platform(){return n.ED?"win32":n.dz?"darwin":"linux"},get arch(){},nextTick:e=>(0,n.xS)(e),get env(){return{}},cwd:()=>"/"};const s=o.cwd,r=o.env,a=o.platform,l=46,c=47,d=92,h=58;class u extends Error{constructor(e,t,i){let n;"string"==typeof t&&0===t.indexOf("not ")?(n="must not be",t=t.replace(/^not /,"")):n="must be";const o=-1!==e.indexOf(".")?"property":"argument";let s=`The "${e}" ${o} ${n} of type ${t}`;s+=". Received type "+typeof i,super(s),this.code="ERR_INVALID_ARG_TYPE"}}function g(e,t){if("string"!=typeof e)throw new u(t,"string",e)}function p(e){return e===c||e===d}function f(e){return e===c}function m(e){return e>=65&&e<=90||e>=97&&e<=122}function v(e,t,i,n){let o="",s=0,r=-1,a=0,d=0;for(let h=0;h<=e.length;++h){if(h<e.length)d=e.charCodeAt(h);else{if(n(d))break;d=c}if(n(d)){if(r===h-1||1===a);else if(2===a){if(o.length<2||2!==s||o.charCodeAt(o.length-1)!==l||o.charCodeAt(o.length-2)!==l){if(o.length>2){const e=o.lastIndexOf(i);-1===e?(o="",s=0):(o=o.slice(0,e),s=o.length-1-o.lastIndexOf(i)),r=h,a=0;continue}if(0!==o.length){o="",s=0,r=h,a=0;continue}}t&&(o+=o.length>0?`${i}..`:"..",s=2)}else o.length>0?o+=`${i}${e.slice(r+1,h)}`:o=e.slice(r+1,h),s=h-r-1;r=h,a=0}else d===l&&-1!==a?++a:a=-1}return o}function _(e,t){if(null===t||"object"!=typeof t)throw new u("pathObject","Object",t);const i=t.dir||t.root,n=t.base||`${t.name||""}${t.ext||""}`;return i?i===t.root?`${i}${n}`:`${i}${e}${n}`:n}const b={resolve(...e){let t="",i="",n=!1;for(let o=e.length-1;o>=-1;o--){let a;if(o>=0){if(a=e[o],g(a,"path"),0===a.length)continue}else 0===t.length?a=s():(a=r[`=${t}`]||s(),(void 0===a||a.slice(0,2).toLowerCase()!==t.toLowerCase()&&a.charCodeAt(2)===d)&&(a=`${t}\\`));const l=a.length;let c=0,u="",f=!1;const v=a.charCodeAt(0);if(1===l)p(v)&&(c=1,f=!0);else if(p(v))if(f=!0,p(a.charCodeAt(1))){let e=2,t=e;for(;e<l&&!p(a.charCodeAt(e));)e++;if(e<l&&e!==t){const i=a.slice(t,e);for(t=e;e<l&&p(a.charCodeAt(e));)e++;if(e<l&&e!==t){for(t=e;e<l&&!p(a.charCodeAt(e));)e++;e!==l&&e===t||(u=`\\\\${i}\\${a.slice(t,e)}`,c=e)}}}else c=1;else m(v)&&a.charCodeAt(1)===h&&(u=a.slice(0,2),c=2,l>2&&p(a.charCodeAt(2))&&(f=!0,c=3));if(u.length>0)if(t.length>0){if(u.toLowerCase()!==t.toLowerCase())continue}else t=u;if(n){if(t.length>0)break}else if(i=`${a.slice(c)}\\${i}`,n=f,f&&t.length>0)break}return i=v(i,!n,"\\",p),n?`${t}\\${i}`:`${t}${i}`||"."},normalize(e){g(e,"path");const t=e.length;if(0===t)return".";let i,n=0,o=!1;const s=e.charCodeAt(0);if(1===t)return f(s)?"\\":e;if(p(s))if(o=!0,p(e.charCodeAt(1))){let o=2,s=o;for(;o<t&&!p(e.charCodeAt(o));)o++;if(o<t&&o!==s){const r=e.slice(s,o);for(s=o;o<t&&p(e.charCodeAt(o));)o++;if(o<t&&o!==s){for(s=o;o<t&&!p(e.charCodeAt(o));)o++;if(o===t)return`\\\\${r}\\${e.slice(s)}\\`;o!==s&&(i=`\\\\${r}\\${e.slice(s,o)}`,n=o)}}}else n=1;else m(s)&&e.charCodeAt(1)===h&&(i=e.slice(0,2),n=2,t>2&&p(e.charCodeAt(2))&&(o=!0,n=3));let r=n<t?v(e.slice(n),!o,"\\",p):"";return 0!==r.length||o||(r="."),r.length>0&&p(e.charCodeAt(t-1))&&(r+="\\"),void 0===i?o?`\\${r}`:r:o?`${i}\\${r}`:`${i}${r}`},isAbsolute(e){g(e,"path");const t=e.length;if(0===t)return!1;const i=e.charCodeAt(0);return p(i)||t>2&&m(i)&&e.charCodeAt(1)===h&&p(e.charCodeAt(2))},join(...e){if(0===e.length)return".";let t,i;for(let n=0;n<e.length;++n){const o=e[n];g(o,"path"),o.length>0&&(void 0===t?t=i=o:t+=`\\${o}`)}if(void 0===t)return".";let n=!0,o=0;if("string"==typeof i&&p(i.charCodeAt(0))){++o;const e=i.length;e>1&&p(i.charCodeAt(1))&&(++o,e>2&&(p(i.charCodeAt(2))?++o:n=!1))}if(n){for(;o<t.length&&p(t.charCodeAt(o));)o++;o>=2&&(t=`\\${t.slice(o)}`)}return b.normalize(t)},relative(e,t){if(g(e,"from"),g(t,"to"),e===t)return"";const i=b.resolve(e),n=b.resolve(t);if(i===n)return"";if((e=i.toLowerCase())===(t=n.toLowerCase()))return"";let o=0;for(;o<e.length&&e.charCodeAt(o)===d;)o++;let s=e.length;for(;s-1>o&&e.charCodeAt(s-1)===d;)s--;const r=s-o;let a=0;for(;a<t.length&&t.charCodeAt(a)===d;)a++;let l=t.length;for(;l-1>a&&t.charCodeAt(l-1)===d;)l--;const c=l-a,h=r<c?r:c;let u=-1,p=0;for(;p<h;p++){const i=e.charCodeAt(o+p);if(i!==t.charCodeAt(a+p))break;i===d&&(u=p)}if(p!==h){if(-1===u)return n}else{if(c>h){if(t.charCodeAt(a+p)===d)return n.slice(a+p+1);if(2===p)return n.slice(a+p)}r>h&&(e.charCodeAt(o+p)===d?u=p:2===p&&(u=3)),-1===u&&(u=0)}let f="";for(p=o+u+1;p<=s;++p)p!==s&&e.charCodeAt(p)!==d||(f+=0===f.length?"..":"\\..");return a+=u,f.length>0?`${f}${n.slice(a,l)}`:(n.charCodeAt(a)===d&&++a,n.slice(a,l))},toNamespacedPath(e){if("string"!=typeof e)return e;if(0===e.length)return"";const t=b.resolve(e);if(t.length<=2)return e;if(t.charCodeAt(0)===d){if(t.charCodeAt(1)===d){const e=t.charCodeAt(2);if(63!==e&&e!==l)return`\\\\?\\UNC\\${t.slice(2)}`}}else if(m(t.charCodeAt(0))&&t.charCodeAt(1)===h&&t.charCodeAt(2)===d)return`\\\\?\\${t}`;return e},dirname(e){g(e,"path");const t=e.length;if(0===t)return".";let i=-1,n=0;const o=e.charCodeAt(0);if(1===t)return p(o)?e:".";if(p(o)){if(i=n=1,p(e.charCodeAt(1))){let o=2,s=o;for(;o<t&&!p(e.charCodeAt(o));)o++;if(o<t&&o!==s){for(s=o;o<t&&p(e.charCodeAt(o));)o++;if(o<t&&o!==s){for(s=o;o<t&&!p(e.charCodeAt(o));)o++;if(o===t)return e;o!==s&&(i=n=o+1)}}}}else m(o)&&e.charCodeAt(1)===h&&(i=t>2&&p(e.charCodeAt(2))?3:2,n=i);let s=-1,r=!0;for(let i=t-1;i>=n;--i)if(p(e.charCodeAt(i))){if(!r){s=i;break}}else r=!1;if(-1===s){if(-1===i)return".";s=i}return e.slice(0,s)},basename(e,t){void 0!==t&&g(t,"ext"),g(e,"path");let i,n=0,o=-1,s=!0;if(e.length>=2&&m(e.charCodeAt(0))&&e.charCodeAt(1)===h&&(n=2),void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let r=t.length-1,a=-1;for(i=e.length-1;i>=n;--i){const l=e.charCodeAt(i);if(p(l)){if(!s){n=i+1;break}}else-1===a&&(s=!1,a=i+1),r>=0&&(l===t.charCodeAt(r)?-1==--r&&(o=i):(r=-1,o=a))}return n===o?o=a:-1===o&&(o=e.length),e.slice(n,o)}for(i=e.length-1;i>=n;--i)if(p(e.charCodeAt(i))){if(!s){n=i+1;break}}else-1===o&&(s=!1,o=i+1);return-1===o?"":e.slice(n,o)},extname(e){g(e,"path");let t=0,i=-1,n=0,o=-1,s=!0,r=0;e.length>=2&&e.charCodeAt(1)===h&&m(e.charCodeAt(0))&&(t=n=2);for(let a=e.length-1;a>=t;--a){const t=e.charCodeAt(a);if(p(t)){if(!s){n=a+1;break}}else-1===o&&(s=!1,o=a+1),t===l?-1===i?i=a:1!==r&&(r=1):-1!==i&&(r=-1)}return-1===i||-1===o||0===r||1===r&&i===o-1&&i===n+1?"":e.slice(i,o)},format:_.bind(null,"\\"),parse(e){g(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const i=e.length;let n=0,o=e.charCodeAt(0);if(1===i)return p(o)?(t.root=t.dir=e,t):(t.base=t.name=e,t);if(p(o)){if(n=1,p(e.charCodeAt(1))){let t=2,o=t;for(;t<i&&!p(e.charCodeAt(t));)t++;if(t<i&&t!==o){for(o=t;t<i&&p(e.charCodeAt(t));)t++;if(t<i&&t!==o){for(o=t;t<i&&!p(e.charCodeAt(t));)t++;t===i?n=t:t!==o&&(n=t+1)}}}}else if(m(o)&&e.charCodeAt(1)===h){if(i<=2)return t.root=t.dir=e,t;if(n=2,p(e.charCodeAt(2))){if(3===i)return t.root=t.dir=e,t;n=3}}n>0&&(t.root=e.slice(0,n));let s=-1,r=n,a=-1,c=!0,d=e.length-1,u=0;for(;d>=n;--d)if(o=e.charCodeAt(d),p(o)){if(!c){r=d+1;break}}else-1===a&&(c=!1,a=d+1),o===l?-1===s?s=d:1!==u&&(u=1):-1!==s&&(u=-1);return-1!==a&&(-1===s||0===u||1===u&&s===a-1&&s===r+1?t.base=t.name=e.slice(r,a):(t.name=e.slice(r,s),t.base=e.slice(r,a),t.ext=e.slice(s,a))),t.dir=r>0&&r!==n?e.slice(0,r-1):t.root,t},sep:"\\",delimiter:";",win32:null,posix:null},w={resolve(...e){let t="",i=!1;for(let n=e.length-1;n>=-1&&!i;n--){const o=n>=0?e[n]:s();g(o,"path"),0!==o.length&&(t=`${o}/${t}`,i=o.charCodeAt(0)===c)}return t=v(t,!i,"/",f),i?`/${t}`:t.length>0?t:"."},normalize(e){if(g(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===c,i=e.charCodeAt(e.length-1)===c;return 0===(e=v(e,!t,"/",f)).length?t?"/":i?"./":".":(i&&(e+="/"),t?`/${e}`:e)},isAbsolute:e=>(g(e,"path"),e.length>0&&e.charCodeAt(0)===c),join(...e){if(0===e.length)return".";let t;for(let i=0;i<e.length;++i){const n=e[i];g(n,"path"),n.length>0&&(void 0===t?t=n:t+=`/${n}`)}return void 0===t?".":w.normalize(t)},relative(e,t){if(g(e,"from"),g(t,"to"),e===t)return"";if((e=w.resolve(e))===(t=w.resolve(t)))return"";const i=e.length,n=i-1,o=t.length-1,s=n<o?n:o;let r=-1,a=0;for(;a<s;a++){const i=e.charCodeAt(1+a);if(i!==t.charCodeAt(1+a))break;i===c&&(r=a)}if(a===s)if(o>s){if(t.charCodeAt(1+a)===c)return t.slice(1+a+1);if(0===a)return t.slice(1+a)}else n>s&&(e.charCodeAt(1+a)===c?r=a:0===a&&(r=0));let l="";for(a=1+r+1;a<=i;++a)a!==i&&e.charCodeAt(a)!==c||(l+=0===l.length?"..":"/..");return`${l}${t.slice(1+r)}`},toNamespacedPath:e=>e,dirname(e){if(g(e,"path"),0===e.length)return".";const t=e.charCodeAt(0)===c;let i=-1,n=!0;for(let t=e.length-1;t>=1;--t)if(e.charCodeAt(t)===c){if(!n){i=t;break}}else n=!1;return-1===i?t?"/":".":t&&1===i?"//":e.slice(0,i)},basename(e,t){void 0!==t&&g(t,"ext"),g(e,"path");let i,n=0,o=-1,s=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return"";let r=t.length-1,a=-1;for(i=e.length-1;i>=0;--i){const l=e.charCodeAt(i);if(l===c){if(!s){n=i+1;break}}else-1===a&&(s=!1,a=i+1),r>=0&&(l===t.charCodeAt(r)?-1==--r&&(o=i):(r=-1,o=a))}return n===o?o=a:-1===o&&(o=e.length),e.slice(n,o)}for(i=e.length-1;i>=0;--i)if(e.charCodeAt(i)===c){if(!s){n=i+1;break}}else-1===o&&(s=!1,o=i+1);return-1===o?"":e.slice(n,o)},extname(e){g(e,"path");let t=-1,i=0,n=-1,o=!0,s=0;for(let r=e.length-1;r>=0;--r){const a=e.charCodeAt(r);if(a!==c)-1===n&&(o=!1,n=r+1),a===l?-1===t?t=r:1!==s&&(s=1):-1!==t&&(s=-1);else if(!o){i=r+1;break}}return-1===t||-1===n||0===s||1===s&&t===n-1&&t===i+1?"":e.slice(t,n)},format:_.bind(null,"/"),parse(e){g(e,"path");const t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;const i=e.charCodeAt(0)===c;let n;i?(t.root="/",n=1):n=0;let o=-1,s=0,r=-1,a=!0,d=e.length-1,h=0;for(;d>=n;--d){const t=e.charCodeAt(d);if(t!==c)-1===r&&(a=!1,r=d+1),t===l?-1===o?o=d:1!==h&&(h=1):-1!==o&&(h=-1);else if(!a){s=d+1;break}}if(-1!==r){const n=0===s&&i?1:s;-1===o||0===h||1===h&&o===r-1&&o===s+1?t.base=t.name=e.slice(n,r):(t.name=e.slice(n,o),t.base=e.slice(n,r),t.ext=e.slice(o,r))}return s>0?t.dir=e.slice(0,s-1):i&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};w.win32=b.win32=b,w.posix=b.posix=w;const y="win32"===a?b.normalize:w.normalize,C="win32"===a?b.resolve:w.resolve,x="win32"===a?b.relative:w.relative,S="win32"===a?b.dirname:w.dirname,k="win32"===a?b.basename:w.basename,L="win32"===a?b.extname:w.extname,N="win32"===a?b.sep:w.sep},1432:(e,t,i)=>{"use strict";var n;i.d(t,{$L:()=>S,ED:()=>w,IJ:()=>C,OS:()=>D,WE:()=>L,dz:()=>y,gn:()=>k,li:()=>m,r:()=>T,tY:()=>x,xS:()=>N});const o="en";let s,r,a=!1,l=!1,c=!1,d=!1,h=!1,u=!1,g=!1,p=null,f=null;const m="object"==typeof self?self:"object"==typeof global?global:{};let v;void 0!==m.vscode&&void 0!==m.vscode.process?v=m.vscode.process:"undefined"!=typeof process&&(v=process);const _="string"==typeof(null===(n=null==v?void 0:v.versions)||void 0===n?void 0:n.electron)&&"renderer"===v.type;if("object"!=typeof navigator||_)if("object"==typeof v){a="win32"===v.platform,l="darwin"===v.platform,c="linux"===v.platform,d=c&&!!v.env.SNAP&&!!v.env.SNAP_REVISION,s=o,p=o;const e=v.env.VSCODE_NLS_CONFIG;if(e)try{const t=JSON.parse(e),i=t.availableLanguages["*"];s=t.locale,p=i||o,f=t._translationsConfigFile}catch(e){}h=!0}else console.error("Unable to resolve platform.");else r=navigator.userAgent,a=r.indexOf("Windows")>=0,l=r.indexOf("Macintosh")>=0,g=(r.indexOf("Macintosh")>=0||r.indexOf("iPad")>=0||r.indexOf("iPhone")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,c=r.indexOf("Linux")>=0,u=!0,s=navigator.language,p=s;let b=0;l?b=1:a?b=3:c&&(b=2);const w=a,y=l,C=c,x=h,S=u,k=g,L=r,N=function(){if(m.setImmediate)return m.setImmediate.bind(m);if("function"==typeof m.postMessage&&!m.importScripts){let e=[];m.addEventListener("message",(t=>{if(t.data&&t.data.vscodeSetImmediateId)for(let i=0,n=e.length;i<n;i++){const n=e[i];if(n.id===t.data.vscodeSetImmediateId)return e.splice(i,1),void n.callback()}}));let t=0;return i=>{const n=++t;e.push({id:n,callback:i}),m.postMessage({vscodeSetImmediateId:n},"*")}}if("function"==typeof(null==v?void 0:v.nextTick))return v.nextTick.bind(v);const e=Promise.resolve();return t=>e.then(t)}(),D=l||g?2:a?1:3;let I=!0,E=!1;function T(){if(!E){E=!0;const e=new Uint8Array(2);e[0]=1,e[1]=2;const t=new Uint16Array(e.buffer);I=513===t[0]}return I}},61134:(e,t,i)=>{"use strict";var n;i.d(t,{e:()=>n}),function(e){function t(e,t){if(e.start>=t.end||t.start>=e.end)return{start:0,end:0};const i=Math.max(e.start,t.start),n=Math.min(e.end,t.end);return n-i<=0?{start:0,end:0}:{start:i,end:n}}function i(e){return e.end-e.start<=0}e.intersect=t,e.isEmpty=i,e.intersects=function(e,n){return!i(t(e,n))},e.relativeComplement=function(e,t){const n=[],o={start:e.start,end:Math.min(t.start,e.end)},s={start:Math.max(t.end,e.start),end:e.end};return i(o)||n.push(o),i(s)||n.push(s),n}}(n||(n={}))},95935:(e,t,i)=>{"use strict";i.d(t,{AH:()=>f,EZ:()=>u,Hx:()=>h,SF:()=>c,Vb:()=>v,Vo:()=>p,XX:()=>g,Xy:()=>d,i3:()=>m,z_:()=>l});var n=i(15527),o=i(66663),s=i(88721),r=i(97295),a=i(70666);function l(e){return(0,a.q)(e,!0)}const c=new class{constructor(e){this._ignorePathCasing=e}compare(e,t,i=!1){return e===t?0:(0,r.qu)(this.getComparisonKey(e,i),this.getComparisonKey(t,i))}isEqual(e,t,i=!1){return e===t||!(!e||!t)&&this.getComparisonKey(e,i)===this.getComparisonKey(t,i)}getComparisonKey(e,t=!1){return e.with({path:this._ignorePathCasing(e)?e.path.toLowerCase():void 0,fragment:t?null:void 0}).toString()}joinPath(e,...t){return a.o.joinPath(e,...t)}basenameOrAuthority(e){return u(e)||e.authority}basename(e){return s.KR.basename(e.path)}dirname(e){if(0===e.path.length)return e;let t;return e.scheme===o.lg.file?t=a.o.file(s.XX(l(e))).path:(t=s.KR.dirname(e.path),e.authority&&t.length&&47!==t.charCodeAt(0)&&(console.error(`dirname("${e.toString})) resulted in a relative path`),t="/")),e.with({path:t})}normalizePath(e){if(!e.path.length)return e;let t;return t=e.scheme===o.lg.file?a.o.file(s.Fv(l(e))).path:s.KR.normalize(e.path),e.with({path:t})}resolvePath(e,t){if(e.scheme===o.lg.file){const i=a.o.file(s.DB(l(e),t));return e.with({authority:i.authority,path:i.path})}return t=n.fn(t),e.with({path:s.KR.resolve(e.path,t)})}}((()=>!1)),d=c.isEqual.bind(c),h=c.basenameOrAuthority.bind(c),u=c.basename.bind(c),g=c.dirname.bind(c),p=c.joinPath.bind(c),f=c.normalizePath.bind(c),m=c.resolvePath.bind(c);var v;!function(e){e.META_DATA_LABEL="label",e.META_DATA_DESCRIPTION="description",e.META_DATA_SIZE="size",e.META_DATA_MIME="mime",e.parseMetaData=function(t){const i=new Map;t.path.substring(t.path.indexOf(";")+1,t.path.lastIndexOf(";")).split(";").forEach((e=>{const[t,n]=e.split(":");t&&n&&i.set(t,n)}));const n=t.path.substring(0,t.path.indexOf(";"));return n&&i.set(e.META_DATA_MIME,n),i}}(v||(v={}))},76633:(e,t,i)=>{"use strict";i.d(t,{Rm:()=>r});var n=i(4669),o=i(5976);class s{constructor(e,t,i,n,o,s){this._scrollStateBrand=void 0,e|=0,t|=0,i|=0,n|=0,o|=0,s|=0,this.rawScrollLeft=i,this.rawScrollTop=s,e<0&&(e=0),i+e>t&&(i=t-e),i<0&&(i=0),n<0&&(n=0),s+n>o&&(s=o-n),s<0&&(s=0),this.width=e,this.scrollWidth=t,this.scrollLeft=i,this.height=n,this.scrollHeight=o,this.scrollTop=s}equals(e){return this.rawScrollLeft===e.rawScrollLeft&&this.rawScrollTop===e.rawScrollTop&&this.width===e.width&&this.scrollWidth===e.scrollWidth&&this.scrollLeft===e.scrollLeft&&this.height===e.height&&this.scrollHeight===e.scrollHeight&&this.scrollTop===e.scrollTop}withScrollDimensions(e,t){return new s(void 0!==e.width?e.width:this.width,void 0!==e.scrollWidth?e.scrollWidth:this.scrollWidth,t?this.rawScrollLeft:this.scrollLeft,void 0!==e.height?e.height:this.height,void 0!==e.scrollHeight?e.scrollHeight:this.scrollHeight,t?this.rawScrollTop:this.scrollTop)}withScrollPosition(e){return new s(this.width,this.scrollWidth,void 0!==e.scrollLeft?e.scrollLeft:this.rawScrollLeft,this.height,this.scrollHeight,void 0!==e.scrollTop?e.scrollTop:this.rawScrollTop)}createScrollEvent(e,t){const i=this.width!==e.width,n=this.scrollWidth!==e.scrollWidth,o=this.scrollLeft!==e.scrollLeft,s=this.height!==e.height,r=this.scrollHeight!==e.scrollHeight,a=this.scrollTop!==e.scrollTop;return{inSmoothScrolling:t,oldWidth:e.width,oldScrollWidth:e.scrollWidth,oldScrollLeft:e.scrollLeft,width:this.width,scrollWidth:this.scrollWidth,scrollLeft:this.scrollLeft,oldHeight:e.height,oldScrollHeight:e.scrollHeight,oldScrollTop:e.scrollTop,height:this.height,scrollHeight:this.scrollHeight,scrollTop:this.scrollTop,widthChanged:i,scrollWidthChanged:n,scrollLeftChanged:o,heightChanged:s,scrollHeightChanged:r,scrollTopChanged:a}}}class r extends o.JT{constructor(e,t){super(),this._scrollableBrand=void 0,this._onScroll=this._register(new n.Q5),this.onScroll=this._onScroll.event,this._smoothScrollDuration=e,this._scheduleAtNextAnimationFrame=t,this._state=new s(0,0,0,0,0,0),this._smoothScrolling=null}dispose(){this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),super.dispose()}setSmoothScrollDuration(e){this._smoothScrollDuration=e}validateScrollPosition(e){return this._state.withScrollPosition(e)}getScrollDimensions(){return this._state}setScrollDimensions(e,t){const i=this._state.withScrollDimensions(e,t);this._setState(i,Boolean(this._smoothScrolling)),this._smoothScrolling&&this._smoothScrolling.acceptScrollDimensions(this._state)}getFutureScrollPosition(){return this._smoothScrolling?this._smoothScrolling.to:this._state}getCurrentScrollPosition(){return this._state}setScrollPositionNow(e){const t=this._state.withScrollPosition(e);this._smoothScrolling&&(this._smoothScrolling.dispose(),this._smoothScrolling=null),this._setState(t,!1)}setScrollPositionSmooth(e,t){if(0===this._smoothScrollDuration)return this.setScrollPositionNow(e);if(this._smoothScrolling){e={scrollLeft:void 0===e.scrollLeft?this._smoothScrolling.to.scrollLeft:e.scrollLeft,scrollTop:void 0===e.scrollTop?this._smoothScrolling.to.scrollTop:e.scrollTop};const i=this._state.withScrollPosition(e);if(this._smoothScrolling.to.scrollLeft===i.scrollLeft&&this._smoothScrolling.to.scrollTop===i.scrollTop)return;let n;n=t?new c(this._smoothScrolling.from,i,this._smoothScrolling.startTime,this._smoothScrolling.duration):this._smoothScrolling.combine(this._state,i,this._smoothScrollDuration),this._smoothScrolling.dispose(),this._smoothScrolling=n}else{const t=this._state.withScrollPosition(e);this._smoothScrolling=c.start(this._state,t,this._smoothScrollDuration)}this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame((()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())}))}_performSmoothScrolling(){if(!this._smoothScrolling)return;const e=this._smoothScrolling.tick(),t=this._state.withScrollPosition(e);return this._setState(t,!0),this._smoothScrolling?e.isDone?(this._smoothScrolling.dispose(),void(this._smoothScrolling=null)):void(this._smoothScrolling.animationFrameDisposable=this._scheduleAtNextAnimationFrame((()=>{this._smoothScrolling&&(this._smoothScrolling.animationFrameDisposable=null,this._performSmoothScrolling())}))):void 0}_setState(e,t){const i=this._state;i.equals(e)||(this._state=e,this._onScroll.fire(this._state.createScrollEvent(i,t)))}}class a{constructor(e,t,i){this.scrollLeft=e,this.scrollTop=t,this.isDone=i}}function l(e,t){const i=t-e;return function(t){return e+i*(1-function(e){return Math.pow(e,3)}(1-t))}}class c{constructor(e,t,i,n){this.from=e,this.to=t,this.duration=n,this.startTime=i,this.animationFrameDisposable=null,this._initAnimations()}_initAnimations(){this.scrollLeft=this._initAnimation(this.from.scrollLeft,this.to.scrollLeft,this.to.width),this.scrollTop=this._initAnimation(this.from.scrollTop,this.to.scrollTop,this.to.height)}_initAnimation(e,t,i){if(Math.abs(e-t)>2.5*i){let r,a;return e<t?(r=e+.75*i,a=t-.75*i):(r=e-.75*i,a=t+.75*i),n=l(e,r),o=l(a,t),s=.33,function(e){return e<s?n(e/s):o((e-s)/(1-s))}}var n,o,s;return l(e,t)}dispose(){null!==this.animationFrameDisposable&&(this.animationFrameDisposable.dispose(),this.animationFrameDisposable=null)}acceptScrollDimensions(e){this.to=e.withScrollPosition(this.to),this._initAnimations()}tick(){return this._tick(Date.now())}_tick(e){const t=(e-this.startTime)/this.duration;if(t<1){const e=this.scrollLeft(t),i=this.scrollTop(t);return new a(e,i,!1)}return new a(this.to.scrollLeft,this.to.scrollTop,!0)}combine(e,t,i){return c.start(e,t,i)}static start(e,t,i){i+=10;const n=Date.now()-10;return new c(e,t,n,i)}}},14603:(e,t,i)=>{"use strict";i.d(t,{Z:()=>s});var n,o=i(97295);!function(e){e[e.Ignore=0]="Ignore",e[e.Info=1]="Info",e[e.Warning=2]="Warning",e[e.Error=3]="é”™è¯¯"}(n||(n={})),function(e){const t="error",i="warning",n="info";e.fromValue=function(s){return s?o.qq(t,s)?e.Error:o.qq(i,s)||o.qq("warn",s)?e.Warning:o.qq(n,s)?e.Info:e.Ignore:e.Ignore},e.toString=function(o){switch(o){case e.Error:return t;case e.Warning:return i;case e.Info:return n;default:return"ignore"}}}(n||(n={}));const s=n},84013:(e,t,i)=>{"use strict";i.d(t,{G:()=>s});var n=i(1432);const o=n.li.performance&&"function"==typeof n.li.performance.now;class s{constructor(e){this._highResolution=o&&e,this._startTime=this._now(),this._stopTime=-1}static create(e=!0){return new s(e)}stop(){this._stopTime=this._now()}elapsed(){return-1!==this._stopTime?this._stopTime-this._startTime:this._now()-this._startTime}_now(){return this._highResolution?n.li.performance.now():Date.now()}}},97295:(e,t,i)=>{"use strict";function n(e){return!e||"string"!=typeof e||0===e.trim().length}i.d(t,{$i:()=>z,C8:()=>q,GF:()=>g,HO:()=>R,IO:()=>p,K7:()=>K,Kw:()=>Y,LC:()=>v,Mh:()=>D,P1:()=>I,PJ:()=>Q,Qe:()=>j,R1:()=>u,RP:()=>W,S6:()=>X,TT:()=>y,Ut:()=>B,V8:()=>_,WU:()=>s,YK:()=>T,YU:()=>r,ZG:()=>E,ZH:()=>A,ab:()=>U,c1:()=>Z,df:()=>k,ec:()=>a,fi:()=>J,fy:()=>l,j3:()=>c,j_:()=>x,m5:()=>n,mK:()=>S,mr:()=>f,oH:()=>te,oL:()=>d,ok:()=>N,ow:()=>b,qq:()=>L,qu:()=>w,rL:()=>M,uS:()=>G,un:()=>h,uq:()=>m,vH:()=>P,xe:()=>$,zY:()=>C});const o=/{(\d+)}/g;function s(e,...t){return 0===t.length?e:e.replace(o,(function(e,i){const n=parseInt(i,10);return isNaN(n)||n<0||n>=t.length?e:t[n]}))}function r(e){return e.replace(/[<>&]/g,(function(e){switch(e){case"<":return"&lt;";case">":return"&gt;";case"&":return"&amp;";default:return e}}))}function a(e){return e.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g,"\\$&")}function l(e,t=" "){return d(c(e,t),t)}function c(e,t){if(!e||!t)return e;const i=t.length;if(0===i||0===e.length)return e;let n=0;for(;e.indexOf(t,n)===n;)n+=i;return e.substring(n)}function d(e,t){if(!e||!t)return e;const i=t.length,n=e.length;if(0===i||0===n)return e;let o=n,s=-1;for(;s=e.lastIndexOf(t,o-1),-1!==s&&s+i===o;){if(0===s)return"";o=s}return e.substring(0,o)}function h(e){return e.replace(/[\-\\\{\}\+\?\|\^\$\.\,\[\]\(\)\#\s]/g,"\\$&").replace(/[\*]/g,".*")}function u(e){return e.replace(/\*/g,"")}function g(e,t,i={}){if(!e)throw new Error("Cannot create regex from empty string");t||(e=a(e)),i.wholeWord&&(/\B/.test(e.charAt(0))||(e="\\b"+e),/\B/.test(e.charAt(e.length-1))||(e+="\\b"));let n="";return i.global&&(n+="g"),i.matchCase||(n+="i"),i.multiline&&(n+="m"),i.unicode&&(n+="u"),new RegExp(e,n)}function p(e){if("^"===e.source||"^$"===e.source||"$"===e.source||"^\\s*$"===e.source)return!1;return!(!e.exec("")||0!==e.lastIndex)}function f(e){return(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")}function m(e){return e.split(/\r\n|\r|\n/)}function v(e){for(let t=0,i=e.length;t<i;t++){const i=e.charCodeAt(t);if(32!==i&&9!==i)return t}return-1}function _(e,t=0,i=e.length){for(let n=t;n<i;n++){const i=e.charCodeAt(n);if(32!==i&&9!==i)return e.substring(t,n)}return e.substring(t,i)}function b(e,t=e.length-1){for(let i=t;i>=0;i--){const t=e.charCodeAt(i);if(32!==t&&9!==t)return i}return-1}function w(e,t){return e<t?-1:e>t?1:0}function y(e,t,i=0,n=e.length,o=0,s=t.length){for(;i<n&&o<s;i++,o++){let n=e.charCodeAt(i),s=t.charCodeAt(o);if(n<s)return-1;if(n>s)return 1}const r=n-i,a=s-o;return r<a?-1:r>a?1:0}function C(e,t){return x(e,t,0,e.length,0,t.length)}function x(e,t,i=0,n=e.length,o=0,s=t.length){for(;i<n&&o<s;i++,o++){let r=e.charCodeAt(i),a=t.charCodeAt(o);if(r===a)continue;if(r>=128||a>=128)return y(e.toLowerCase(),t.toLowerCase(),i,n,o,s);S(r)&&(r-=32),S(a)&&(a-=32);const l=r-a;if(0!==l)return l}const r=n-i,a=s-o;return r<a?-1:r>a?1:0}function S(e){return e>=97&&e<=122}function k(e){return e>=65&&e<=90}function L(e,t){return e.length===t.length&&0===x(e,t)}function N(e,t){const i=t.length;return!(t.length>e.length)&&0===x(e,t,0,i)}function D(e,t){let i,n=Math.min(e.length,t.length);for(i=0;i<n;i++)if(e.charCodeAt(i)!==t.charCodeAt(i))return i;return n}function I(e,t){let i,n=Math.min(e.length,t.length);const o=e.length-1,s=t.length-1;for(i=0;i<n;i++)if(e.charCodeAt(o-i)!==t.charCodeAt(s-i))return i;return n}function E(e){return 55296<=e&&e<=56319}function T(e){return 56320<=e&&e<=57343}function M(e,t){return t-56320+(e-55296<<10)+65536}function A(e,t,i){const n=e.charCodeAt(i);if(E(n)&&i+1<t){const t=e.charCodeAt(i+1);if(T(t))return M(n,t)}return n}function O(e,t){const i=e.charCodeAt(t-1);if(T(i)&&t>1){const n=e.charCodeAt(t-2);if(E(n))return M(n,i)}return i}function P(e,t){const i=ee.getInstance(),n=t,o=e.length,s=A(e,o,t);t+=s>=65536?2:1;let r=i.getGraphemeBreakType(s);for(;t<o;){const n=A(e,o,t),s=i.getGraphemeBreakType(n);if(J(r,s))break;t+=n>=65536?2:1,r=s}return t-n}function R(e,t){const i=ee.getInstance(),n=t,o=O(e,t);t-=o>=65536?2:1;let s=i.getGraphemeBreakType(o);for(;t>0;){const n=O(e,t),o=i.getGraphemeBreakType(n);if(J(o,s))break;t-=n>=65536?2:1,s=o}return n-t}const F=/(?:[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05F4\u0608\u060B\u060D\u061B-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u0710\u0712-\u072F\u074D-\u07A5\u07B1-\u07EA\u07F4\u07F5\u07FA-\u0815\u081A\u0824\u0828\u0830-\u0858\u085E-\u08BD\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFD3D\uFD50-\uFDFC\uFE70-\uFEFC]|\uD802[\uDC00-\uDD1B\uDD20-\uDE00\uDE10-\uDE33\uDE40-\uDEE4\uDEEB-\uDF35\uDF40-\uDFFF]|\uD803[\uDC00-\uDCFF]|\uD83A[\uDC00-\uDCCF\uDD00-\uDD43\uDD50-\uDFFF]|\uD83B[\uDC00-\uDEBB])/;function B(e){return F.test(e)}const V=/(?:[\u231A\u231B\u23F0\u23F3\u2600-\u27BF\u2B50\u2B55]|\uD83C[\uDDE6-\uDDFF\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F\uDE80-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD00-\uDDFF\uDE70-\uDED6])/;function W(e){return V.test(e)}const H=/^[\t\n\r\x20-\x7E]*$/;function z(e){return H.test(e)}const j=/[\u2028\u2029]/;function U(e){return j.test(e)}function $(e){for(let t=0,i=e.length;t<i;t++)if(K(e.charCodeAt(t)))return!0;return!1}function K(e){return(e=+e)>=11904&&e<=55215||e>=63744&&e<=64255||e>=65281&&e<=65374}function q(e){return e>=127462&&e<=127487||8986===e||8987===e||9200===e||9203===e||e>=9728&&e<=10175||11088===e||11093===e||e>=127744&&e<=128591||e>=128640&&e<=128764||e>=128992&&e<=129003||e>=129280&&e<=129535||e>=129648&&e<=129750}const Z=String.fromCharCode(65279);function G(e){return!!(e&&e.length>0&&65279===e.charCodeAt(0))}function Y(e,t=!1){return!!e&&(t&&(e=e.replace(/\\./g,"")),e.toLowerCase()!==e)}function Q(e){return(e%=52)<26?String.fromCharCode(97+e):String.fromCharCode(65+e-26)}function X(e){return ee.getInstance().getGraphemeBreakType(e)}function J(e,t){return 0===e?5!==t&&7!==t:(2!==e||3!==t)&&(4===e||2===e||3===e||(4===t||2===t||3===t||(8!==e||8!==t&&9!==t&&11!==t&&12!==t)&&((11!==e&&9!==e||9!==t&&10!==t)&&((12!==e&&10!==e||10!==t)&&(5!==t&&13!==t&&(7!==t&&(1!==e&&((13!==e||14!==t)&&(6!==e||6!==t)))))))))}class ee{constructor(){this._data=JSON.parse("[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]")}static getInstance(){return ee._INSTANCE||(ee._INSTANCE=new ee),ee._INSTANCE}getGraphemeBreakType(e){if(e<32)return 10===e?3:13===e?2:4;if(e<127)return 0;const t=this._data,i=t.length/3;let n=1;for(;n<=i;)if(e<t[3*n])n*=2;else{if(!(e>t[3*n+1]))return t[3*n+2];n=2*n+1}return 0}}function te(e,t){if(0===e)return 0;const i=function(e,t){let i=O(t,e);e-=ie(i);for(;ne(i)||65039===i||8419===i;){if(0===e)return;i=O(t,e),e-=ie(i)}if(!q(i))return;if(e>=0){const i=O(t,e);8205===i&&(e-=ie(i))}return e}(e,t);if(void 0!==i)return i;return e-=ie(O(t,e))}function ie(e){return e>=65536?2:1}function ne(e){return 127995<=e&&e<=127999}ee._INSTANCE=null},98401:(e,t,i)=>{"use strict";function n(e){return Array.isArray(e)}function o(e){return"string"==typeof e}function s(e){return!("object"!=typeof e||null===e||Array.isArray(e)||e instanceof RegExp||e instanceof Date)}function r(e){return"number"==typeof e&&!isNaN(e)}function a(e){return!0===e||!1===e}function l(e){return void 0===e}function c(e){return!d(e)}function d(e){return l(e)||null===e}function h(e,t){if(!e)throw new Error(t?`Unexpected type, expected '${t}'`:"Unexpected type")}function u(e){if(d(e))throw new Error("Assertion Failed: argument is undefined or null");return e}function g(e){return"function"==typeof e}function p(e,t){const i=Math.min(e.length,t.length);for(let n=0;n<i;n++)f(e[n],t[n])}function f(e,t){if(o(t)){if(typeof e!==t)throw new Error(`argument does not match constraint: typeof ${t}`)}else if(g(t)){try{if(e instanceof t)return}catch(e){}if(!d(e)&&e.constructor===t)return;if(1===t.length&&!0===t.call(void 0,e))return;throw new Error("argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true")}}function m(e){const t=[];for(const i of function(e){let t=[],i=Object.getPrototypeOf(e);for(;Object.prototype!==i;)t=t.concat(Object.getOwnPropertyNames(i)),i=Object.getPrototypeOf(i);return t}(e))"function"==typeof e[i]&&t.push(i);return t}function v(e,t){const i=e=>function(){const i=Array.prototype.slice.call(arguments,0);return t(e,i)};let n={};for(const t of e)n[t]=i(t);return n}function _(e){return null===e?void 0:e}function b(e,t="Unreachable"){throw new Error(t)}i.d(t,{$E:()=>m,$K:()=>c,D8:()=>p,HD:()=>o,IU:()=>v,Jp:()=>d,Kn:()=>s,cW:()=>u,f6:()=>_,hj:()=>r,jn:()=>a,kJ:()=>n,mf:()=>g,o8:()=>l,p_:()=>h,vE:()=>b})},85427:(e,t,i)=>{"use strict";function n(e){return e<0?0:e>255?255:0|e}function o(e){return e<0?0:e>4294967295?4294967295:0|e}i.d(t,{A:()=>o,K:()=>n})},70666:(e,t,i)=>{"use strict";i.d(t,{o:()=>u,q:()=>_});var n=i(88721),o=i(1432);const s=/^\w[\w\d+.-]*$/,r=/^\//,a=/^\/\//;function l(e,t){if(!e.scheme&&t)throw new Error(`[UriError]: è·³è½¬æ–¹æ¡ˆ is missing: {scheme: "", authority: "${e.authority}", path: "${e.path}", query: "${e.query}", fragment: "${e.fragment}"}`);if(e.scheme&&!s.test(e.scheme))throw new Error("[UriError]: è·³è½¬æ–¹æ¡ˆ contains illegal characters.");if(e.path)if(e.authority){if(!r.test(e.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(a.test(e.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}const c="",d="/",h=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class u{constructor(e,t,i,n,o,s=!1){"object"==typeof e?(this.scheme=e.scheme||c,this.authority=e.authority||c,this.path=e.path||c,this.query=e.query||c,this.fragment=e.fragment||c):(this.scheme=function(e,t){return e||t?e:"file"}(e,s),this.authority=t||c,this.path=function(e,t){switch(e){case"https":case"http":case"file":t?t[0]!==d&&(t=d+t):t=d}return t}(this.scheme,i||c),this.query=n||c,this.fragment=o||c,l(this,s))}static isUri(e){return e instanceof u||!!e&&("string"==typeof e.authority&&"string"==typeof e.fragment&&"string"==typeof e.path&&"string"==typeof e.query&&"string"==typeof e.scheme&&"string"==typeof e.fsPath&&"function"==typeof e.with&&"function"==typeof e.toString)}get fsPath(){return _(this,!1)}with(e){if(!e)return this;let{scheme:t,authority:i,path:n,query:o,fragment:s}=e;return void 0===t?t=this.scheme:null===t&&(t=c),void 0===i?i=this.authority:null===i&&(i=c),void 0===n?n=this.path:null===n&&(n=c),void 0===o?o=this.query:null===o&&(o=c),void 0===s?s=this.fragment:null===s&&(s=c),t===this.scheme&&i===this.authority&&n===this.path&&o===this.query&&s===this.fragment?this:new p(t,i,n,o,s)}static parse(e,t=!1){const i=h.exec(e);return i?new p(i[2]||c,C(i[4]||c),C(i[5]||c),C(i[7]||c),C(i[9]||c),t):new p(c,c,c,c,c)}static file(e){let t=c;if(o.ED&&(e=e.replace(/\\/g,d)),e[0]===d&&e[1]===d){const i=e.indexOf(d,2);-1===i?(t=e.substring(2),e=d):(t=e.substring(2,i),e=e.substring(i)||d)}return new p("file",t,e,c,c)}static from(e){const t=new p(e.scheme,e.authority,e.path,e.query,e.fragment);return l(t,!0),t}static joinPath(e,...t){if(!e.path)throw new Error("[UriError]: cannot call joinPath on URI without path");let i;return i=o.ED&&"file"===e.scheme?u.file(n.Ku.join(_(e,!0),...t)).path:n.KR.join(e.path,...t),e.with({path:i})}toString(e=!1){return b(this,e)}toJSON(){return this}static revive(e){if(e){if(e instanceof u)return e;{const t=new p(e);return t._formatted=e.external,t._fsPath=e._sep===g?e.fsPath:null,t}}return e}}const g=o.ED?1:void 0;class p extends u{constructor(){super(...arguments),this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=_(this,!1)),this._fsPath}toString(e=!1){return e?b(this,!0):(this._formatted||(this._formatted=b(this,!1)),this._formatted)}toJSON(){const e={$mid:1};return this._fsPath&&(e.fsPath=this._fsPath,e._sep=g),this._formatted&&(e.external=this._formatted),this.path&&(e.path=this.path),this.scheme&&(e.scheme=this.scheme),this.authority&&(e.authority=this.authority),this.query&&(e.query=this.query),this.fragment&&(e.fragment=this.fragment),e}}const f={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function m(e,t){let i,n=-1;for(let o=0;o<e.length;o++){const s=e.charCodeAt(o);if(s>=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57||45===s||46===s||95===s||126===s||t&&47===s)-1!==n&&(i+=encodeURIComponent(e.substring(n,o)),n=-1),void 0!==i&&(i+=e.charAt(o));else{void 0===i&&(i=e.substr(0,o));const t=f[s];void 0!==t?(-1!==n&&(i+=encodeURIComponent(e.substring(n,o)),n=-1),i+=t):-1===n&&(n=o)}}return-1!==n&&(i+=encodeURIComponent(e.substring(n))),void 0!==i?i:e}function v(e){let t;for(let i=0;i<e.length;i++){const n=e.charCodeAt(i);35===n||63===n?(void 0===t&&(t=e.substr(0,i)),t+=f[n]):void 0!==t&&(t+=e[i])}return void 0!==t?t:e}function _(e,t){let i;return i=e.authority&&e.path.length>1&&"file"===e.scheme?`//${e.authority}${e.path}`:47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?t?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,o.ED&&(i=i.replace(/\//g,"\\")),i}function b(e,t){const i=t?v:m;let n="",{scheme:o,authority:s,path:r,query:a,fragment:l}=e;if(o&&(n+=o,n+=":"),(s||"file"===o)&&(n+=d,n+=d),s){let e=s.indexOf("@");if(-1!==e){const t=s.substr(0,e);s=s.substr(e+1),e=t.indexOf(":"),-1===e?n+=i(t,!1):(n+=i(t.substr(0,e),!1),n+=":",n+=i(t.substr(e+1),!1)),n+="@"}s=s.toLowerCase(),e=s.indexOf(":"),-1===e?n+=i(s,!1):(n+=i(s.substr(0,e),!1),n+=s.substr(e))}if(r){if(r.length>=3&&47===r.charCodeAt(0)&&58===r.charCodeAt(2)){const e=r.charCodeAt(1);e>=65&&e<=90&&(r=`/${String.fromCharCode(e+32)}:${r.substr(3)}`)}else if(r.length>=2&&58===r.charCodeAt(1)){const e=r.charCodeAt(0);e>=65&&e<=90&&(r=`${String.fromCharCode(e+32)}:${r.substr(2)}`)}n+=i(r,!0)}return a&&(n+="?",n+=i(a,!1)),l&&(n+="#",n+=t?l:m(l,!1)),n}function w(e){try{return decodeURIComponent(e)}catch(t){return e.length>3?e.substr(0,3)+w(e.substr(3)):e}}const y=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function C(e){return e.match(y)?e.replace(y,(e=>w(e))):e}},67746:(e,t,i)=>{"use strict";i.d(t,{Jq:()=>o,X5:()=>n,jG:()=>s});const n={ctrlCmd:!1,alt:!1};var o,s;!function(e){e[e.Blur=1]="Blur",e[e.Gesture=2]="Gesture",e[e.Other=3]="Other"}(o||(o={})),function(e){e[e.NONE=0]="NONE",e[e.FIRST=1]="FIRST",e[e.SECOND=2]="SECOND",e[e.LAST=3]="LAST"}(s||(s={}))},25552:(e,t,i)=>{"use strict";i.d(t,{H:()=>a});var n=i(89587),o={},s={},r=function(){function e(e){var t=this;this._languageId=e,this._loadingTriggered=!1,this._lazyLoadPromise=new Promise((function(e,i){t._lazyLoadPromiseResolve=e,t._lazyLoadPromiseReject=i}))}return e.getOrCreate=function(t){return s[t]||(s[t]=new e(t)),s[t]},e.prototype.whenLoaded=function(){return this._lazyLoadPromise},e.prototype.load=function(){var e=this;return this._loadingTriggered||(this._loadingTriggered=!0,o[this._languageId].loader().then((function(t){return e._lazyLoadPromiseResolve(t)}),(function(t){return e._lazyLoadPromiseReject(t)}))),this._lazyLoadPromise},e}();function a(e){var t=e.id;o[t]=e,n.Mj.register(e);var i=r.getOrCreate(t);n.Mj.setMonarchTokensProvider(t,i.whenLoaded().then((function(e){return e.language}))),n.Mj.onLanguage(t,(function(){i.load().then((function(e){n.Mj.setLanguageConfiguration(t,e.conf)}))}))}},89587:(e,t,i)=>{"use strict";i.d(t,{Mj:()=>n.languages});var n=i(58583)},43763:(e,t,i)=>{"use strict";i.r(t),(0,i(25552).H)({id:"javascript",extensions:[".js",".es6",".jsx",".mjs"],firstLine:"^#!.*\\bnode",filenames:["jakefile"],aliases:["JavaScript","javascript","js"],mimetypes:["text/javascript"],loader:function(){return i.e(295).then(i.bind(i,62295))}})},83187:(e,t,i)=>{"use strict";i.r(t),(0,i(25552).H)({id:"python",extensions:[".py",".rpy",".pyw",".cpy",".gyp",".gypi"],aliases:["Python","py"],firstLine:"^#!/.*\\bpython[0-9.-]*\\b",loader:function(){return i.e(287).then(i.bind(i,37287))}})},94199:(e,t,i)=>{"use strict";i.r(t),(0,i(25552).H)({id:"yaml",extensions:[".yaml",".yml"],aliases:["YAML","yaml","YML","yml"],mimetypes:["application/x-yaml","text/x-yaml"],loader:function(){return i.e(585).then(i.bind(i,23585))}})},89052:(e,t,i)=>{"use strict";i.d(t,{V:()=>m,P:()=>p});var n=i(16268),o=i(4669),s=i(5976),r=i(1432),a=i(64141);class l{constructor(e,t){this.chr=e,this.type=t,this.width=0}fulfill(e){this.width=e}}class c{constructor(e,t){this._bareFontInfo=e,this._requests=t,this._container=null,this._testElements=null}read(){this._createDomElements(),document.body.appendChild(this._container),this._readFromDomElements(),document.body.removeChild(this._container),this._container=null,this._testElements=null}_createDomElements(){const e=this._bareFontInfo.getMassagedFontFamily(n.G6?a.hL.fontFamily:null),t=document.createElement("div");t.style.position="absolute",t.style.top="-50000px",t.style.width="50000px";const i=document.createElement("div");i.style.fontFamily=e,i.style.fontWeight=this._bareFontInfo.fontWeight,i.style.fontSize=this._bareFontInfo.fontSize+"px",i.style.fontFeatureSettings=this._bareFontInfo.fontFeatureSettings,i.style.lineHeight=this._bareFontInfo.lineHeight+"px",i.style.letterSpacing=this._bareFontInfo.letterSpacing+"px",t.appendChild(i);const o=document.createElement("div");o.style.fontFamily=e,o.style.fontWeight="bold",o.style.fontSize=this._bareFontInfo.fontSize+"px",o.style.fontFeatureSettings=this._bareFontInfo.fontFeatureSettings,o.style.lineHeight=this._bareFontInfo.lineHeight+"px",o.style.letterSpacing=this._bareFontInfo.letterSpacing+"px",t.appendChild(o);const s=document.createElement("div");s.style.fontFamily=e,s.style.fontWeight=this._bareFontInfo.fontWeight,s.style.fontSize=this._bareFontInfo.fontSize+"px",s.style.fontFeatureSettings=this._bareFontInfo.fontFeatureSettings,s.style.lineHeight=this._bareFontInfo.lineHeight+"px",s.style.letterSpacing=this._bareFontInfo.letterSpacing+"px",s.style.fontStyle="italic",t.appendChild(s);const r=[];for(const e of this._requests){let t;0===e.type&&(t=i),2===e.type&&(t=o),1===e.type&&(t=s),t.appendChild(document.createElement("br"));const n=document.createElement("span");c._render(n,e),t.appendChild(n),r.push(n)}this._container=t,this._testElements=r}static _render(e,t){if(" "===t.chr){let t="Â ";for(let e=0;e<8;e++)t+=t;e.innerText=t}else{let i=t.chr;for(let e=0;e<8;e++)i+=i;e.textContent=i}}_readFromDomElements(){for(let e=0,t=this._requests.length;e<t;e++){const t=this._requests[e],i=this._testElements[e];t.fulfill(i.offsetWidth/256)}}}var d=i(54534),h=i(56345),u=i(27374);class g{constructor(){this._keys=Object.create(null),this._values=Object.create(null)}has(e){const t=e.getId();return!!this._values[t]}get(e){const t=e.getId();return this._values[t]}put(e,t){const i=e.getId();this._keys[i]=e,this._values[i]=t}remove(e){const t=e.getId();delete this._keys[t],delete this._values[t]}getValues(){return Object.keys(this._keys).map((e=>this._values[e]))}}function p(){f.INSTANCE.clearCache()}class f extends s.JT{constructor(){super(),this._onDidChange=this._register(new o.Q5),this.onDidChange=this._onDidChange.event,this._cache=new g,this._evictUntrustedReadingsTimeout=-1}dispose(){-1!==this._evictUntrustedReadingsTimeout&&(clearTimeout(this._evictUntrustedReadingsTimeout),this._evictUntrustedReadingsTimeout=-1),super.dispose()}clearCache(){this._cache=new g,this._onDidChange.fire()}_writeToCache(e,t){this._cache.put(e,t),t.isTrusted||-1!==this._evictUntrustedReadingsTimeout||(this._evictUntrustedReadingsTimeout=setTimeout((()=>{this._evictUntrustedReadingsTimeout=-1,this._evictUntrustedReadings()}),5e3))}_evictUntrustedReadings(){const e=this._cache.getValues();let t=!1;for(const i of e)i.isTrusted||(t=!0,this._cache.remove(i));t&&this._onDidChange.fire()}readConfiguration(e){if(!this._cache.has(e)){let t=f._actualReadConfiguration(e);(t.typicalHalfwidthCharacterWidth<=2||t.typicalFullwidthCharacterWidth<=2||t.spaceWidth<=2||t.maxDigitWidth<=2)&&(t=new u.pR({zoomLevel:n.px(),pixelRatio:n.mX(),fontFamily:t.fontFamily,fontWeight:t.fontWeight,fontSize:t.fontSize,fontFeatureSettings:t.fontFeatureSettings,lineHeight:t.lineHeight,letterSpacing:t.letterSpacing,isMonospace:t.isMonospace,typicalHalfwidthCharacterWidth:Math.max(t.typicalHalfwidthCharacterWidth,5),typicalFullwidthCharacterWidth:Math.max(t.typicalFullwidthCharacterWidth,5),canUseHalfwidthRightwardsArrow:t.canUseHalfwidthRightwardsArrow,spaceWidth:Math.max(t.spaceWidth,5),middotWidth:Math.max(t.middotWidth,5),wsmiddotWidth:Math.max(t.wsmiddotWidth,5),maxDigitWidth:Math.max(t.maxDigitWidth,5)},!1)),this._writeToCache(e,t)}return this._cache.get(e)}static createRequest(e,t,i,n){const o=new l(e,t);return i.push(o),n&&n.push(o),o}static _actualReadConfiguration(e){const t=[],i=[],o=this.createRequest("n",0,t,i),s=this.createRequest("ï½",0,t,null),r=this.createRequest(" ",0,t,i),l=this.createRequest("0",0,t,i),d=this.createRequest("1",0,t,i),h=this.createRequest("2",0,t,i),g=this.createRequest("3",0,t,i),p=this.createRequest("4",0,t,i),f=this.createRequest("5",0,t,i),m=this.createRequest("6",0,t,i),v=this.createRequest("7",0,t,i),_=this.createRequest("8",0,t,i),b=this.createRequest("9",0,t,i),w=this.createRequest("â†’",0,t,i),y=this.createRequest("ï¿«",0,t,null),C=this.createRequest("Â·",0,t,i),x=this.createRequest(String.fromCharCode(11825),0,t,null),S="|/-_ilm%";for(let e=0,n=8;e<n;e++)this.createRequest(S.charAt(e),0,t,i),this.createRequest(S.charAt(e),1,t,i),this.createRequest(S.charAt(e),2,t,i);!function(e,t){new c(e,t).read()}(e,t);const k=Math.max(l.width,d.width,h.width,g.width,p.width,f.width,m.width,v.width,_.width,b.width);let L=e.fontFeatureSettings===a.n0.OFF;const N=i[0].width;for(let e=1,t=i.length;L&&e<t;e++){const t=N-i[e].width;if(t<-.001||t>.001){L=!1;break}}let D=!0;L&&y.width!==N&&(D=!1),y.width>w.width&&(D=!1);const I=n.WP()>2e3;return new u.pR({zoomLevel:n.px(),pixelRatio:n.mX(),fontFamily:e.fontFamily,fontWeight:e.fontWeight,fontSize:e.fontSize,fontFeatureSettings:e.fontFeatureSettings,lineHeight:e.lineHeight,letterSpacing:e.letterSpacing,isMonospace:L,typicalHalfwidthCharacterWidth:o.width,typicalFullwidthCharacterWidth:s.width,canUseHalfwidthRightwardsArrow:D,spaceWidth:r.width,middotWidth:C.width,wsmiddotWidth:x.width,maxDigitWidth:k},I)}}f.INSTANCE=new f;class m extends h.fv{constructor(e,t,i=null,o){super(e,t),this.accessibilityService=o,this._elementSizeObserver=this._register(new d.I(i,t.dimension,(()=>this._recomputeOptions()))),this._register(f.INSTANCE.onDidChange((()=>this._recomputeOptions()))),this._validatedOptions.get(10)&&this._elementSizeObserver.startObserving(),this._register(n.fX((e=>this._recomputeOptions()))),this._register(this.accessibilityService.onDidChangeScreenReaderOptimized((()=>this._recomputeOptions()))),this._recomputeOptions()}static applyFontInfoSlow(e,t){e.style.fontFamily=t.getMassagedFontFamily(n.G6?a.hL.fontFamily:null),e.style.fontWeight=t.fontWeight,e.style.fontSize=t.fontSize+"px",e.style.fontFeatureSettings=t.fontFeatureSettings,e.style.lineHeight=t.lineHeight+"px",e.style.letterSpacing=t.letterSpacing+"px"}static applyFontInfo(e,t){e.setFontFamily(t.getMassagedFontFamily(n.G6?a.hL.fontFamily:null)),e.setFontWeight(t.fontWeight),e.setFontSize(t.fontSize),e.setFontFeatureSettings(t.fontFeatureSettings),e.setLineHeight(t.lineHeight),e.setLetterSpacing(t.letterSpacing)}observeReferenceElement(e){this._elementSizeObserver.observe(e)}updatePixelRatio(){this._recomputeOptions()}static _getExtraEditorClassName(){let e="";return n.G6||n.MG||(e+="no-user-select "),n.G6&&(e+="no-minimap-shadow "),r.dz&&(e+="mac "),e}_getEnvConfiguration(){return{extraEditorClassName:m._getExtraEditorClassName(),outerWidth:this._elementSizeObserver.getWidth(),outerHeight:this._elementSizeObserver.getHeight(),emptySelectionClipboard:n.Pf||n.vU,pixelRatio:n.mX(),zoomLevel:n.px(),accessibilitySupport:this.accessibilityService.isScreenReaderOptimized()?2:this.accessibilityService.getAccessibilitySupport()}}readConfiguration(e){return f.INSTANCE.readConfiguration(e)}}},54534:(e,t,i)=>{"use strict";i.d(t,{I:()=>o});var n=i(5976);class o extends n.JT{constructor(e,t,i){super(),this.referenceDomElement=e,this.changeCallback=i,this.width=-1,this.height=-1,this.resizeObserver=null,this.measureReferenceDomElementToken=-1,this.measureReferenceDomElement(!1,t)}dispose(){this.stopObserving(),super.dispose()}getWidth(){return this.width}getHeight(){return this.height}startObserving(){"undefined"!=typeof ResizeObserver?!this.resizeObserver&&this.referenceDomElement&&(this.resizeObserver=new ResizeObserver((e=>{e&&e[0]&&e[0].contentRect?this.observe({width:e[0].contentRect.width,height:e[0].contentRect.height}):this.observe()})),this.resizeObserver.observe(this.referenceDomElement)):-1===this.measureReferenceDomElementToken&&(this.measureReferenceDomElementToken=setInterval((()=>this.observe()),100))}stopObserving(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),-1!==this.measureReferenceDomElementToken&&(clearInterval(this.measureReferenceDomElementToken),this.measureReferenceDomElementToken=-1)}observe(e){this.measureReferenceDomElement(!0,e)}measureReferenceDomElement(e,t){let i=0,n=0;t?(i=t.width,n=t.height):this.referenceDomElement&&(i=this.referenceDomElement.clientWidth,n=this.referenceDomElement.clientHeight),i=Math.max(5,i),n=Math.max(5,n),this.width===i&&this.height===n||(this.width=i,this.height=n,e&&this.changeCallback())}}},18728:(e,t,i)=>{"use strict";i.r(t),i.d(t,{CoreEditingCommands:()=>N,CoreEditorCommand:()=>b,CoreNavigationCommands:()=>C,EditorScroll_:()=>w,RevealLine_:()=>y});var n=i(63580),o=i(16268),s=i(98401),r=i(85152),a=i(16830),l=i(11640),c=i(33181),d=i(50187),h=i(24314);class u{static columnSelect(e,t,i,n,o,s){let r=Math.abs(o-i)+1,a=i>o,l=n>s,u=n<s,g=[];for(let o=0;o<r;o++){let r=i+(a?-o:o),p=c.io.columnFromVisibleColumn2(e,t,r,n),f=c.io.columnFromVisibleColumn2(e,t,r,s),m=c.io.visibleColumnFromColumn2(e,t,new d.L(r,p)),v=c.io.visibleColumnFromColumn2(e,t,new d.L(r,f));if(u){if(m>s)continue;if(v<n)continue}if(l){if(v>n)continue;if(m<s)continue}g.push(new c.rS(new h.e(r,p,r,p),0,new d.L(r,f),0))}if(0===g.length)for(let e=0;e<r;e++){const n=i+(a?-e:e),o=t.getLineMaxColumn(n);g.push(new c.rS(new h.e(n,o,n,o),0,new d.L(n,o),0))}return{viewStates:g,reversed:a,fromLineNumber:i,fromVisualColumn:n,toLineNumber:o,toVisualColumn:s}}static columnSelectLeft(e,t,i){let n=i.toViewVisualColumn;return n>0&&n--,u.columnSelect(e,t,i.fromViewLineNumber,i.fromViewVisualColumn,i.toViewLineNumber,n)}static columnSelectRight(e,t,i){let n=0;const o=Math.min(i.fromViewLineNumber,i.toViewLineNumber),s=Math.max(i.fromViewLineNumber,i.toViewLineNumber);for(let i=o;i<=s;i++){const o=t.getLineMaxColumn(i),s=c.io.visibleColumnFromColumn2(e,t,new d.L(i,o));n=Math.max(n,s)}let r=i.toViewVisualColumn;return r<n&&r++,this.columnSelect(e,t,i.fromViewLineNumber,i.fromViewVisualColumn,i.toViewLineNumber,r)}static columnSelectUp(e,t,i,n){const o=n?e.pageSize:1,s=Math.max(1,i.toViewLineNumber-o);return this.columnSelect(e,t,i.fromViewLineNumber,i.fromViewVisualColumn,s,i.toViewVisualColumn)}static columnSelectDown(e,t,i,n){const o=n?e.pageSize:1,s=Math.min(t.getLineCount(),i.toViewLineNumber+o);return this.columnSelect(e,t,i.fromViewLineNumber,i.fromViewVisualColumn,s,i.toViewVisualColumn)}}var g=i(31380),p=i(83814),f=i(23582),m=i(29102),v=i(38819),_=i(49989);class b extends a._l{runEditorCommand(e,t,i){const n=t._getViewModel();n&&this.runCoreEditorCommand(n,i||{})}}var w,y,C;!function(e){e.description={description:"Scroll editor in the given direction",args:[{name:"Editor scroll argument object",description:"Property-value pairs that can be passed through this argument:\n\t\t\t\t\t* 'to': A mandatory direction value.\n\t\t\t\t\t\t```\n\t\t\t\t\t\t'up', 'down'\n\t\t\t\t\t\t```\n\t\t\t\t\t* 'by': Unit to move. Default is computed based on 'to' value.\n\t\t\t\t\t\t```\n\t\t\t\t\t\t'line', 'wrappedLine', 'page', 'halfPage'\n\t\t\t\t\t\t```\n\t\t\t\t\t* 'value': Number of units to move. Default is '1'.\n\t\t\t\t\t* 'revealCursor': If 'true' reveals the cursor if it is outside view port.\n\t\t\t\t",constraint:function(e){if(!s.Kn(e))return!1;const t=e;return!!s.HD(t.to)&&(!(!s.o8(t.by)&&!s.HD(t.by))&&(!(!s.o8(t.value)&&!s.hj(t.value))&&!(!s.o8(t.revealCursor)&&!s.jn(t.revealCursor))))},schema:{type:"object",required:["to"],properties:{to:{type:"string",enum:["up","down"]},by:{type:"string",enum:["line","wrappedLine","page","halfPage"]},value:{type:"number",default:1},revealCursor:{type:"boolean"}}}}]},e.RawDirection={Up:"up",Down:"down"},e.RawUnit={Line:"line",WrappedLine:"wrappedLine",Page:"page",HalfPage:"halfPage"},e.parse=function(t){let i,n;switch(t.to){case e.RawDirection.Up:i=1;break;case e.RawDirection.Down:i=2;break;default:return null}switch(t.by){case e.RawUnit.Line:n=1;break;case e.RawUnit.WrappedLine:n=2;break;case e.RawUnit.Page:n=3;break;case e.RawUnit.HalfPage:n=4;break;default:n=2}return{direction:i,unit:n,value:Math.floor(t.value||1),revealCursor:!!t.revealCursor,select:!!t.select}}}(w||(w={})),function(e){e.description={description:"Reveal the given line at the given logical position",args:[{name:"Reveal line argument object",description:"Property-value pairs that can be passed through this argument:\n\t\t\t\t\t* 'lineNumber': A mandatory line number value.\n\t\t\t\t\t* 'at': Logical position at which line has to be revealed.\n\t\t\t\t\t\t```\n\t\t\t\t\t\t'top', 'center', 'bottom'\n\t\t\t\t\t\t```\n\t\t\t\t",constraint:function(e){if(!s.Kn(e))return!1;const t=e;return!(!s.hj(t.lineNumber)&&!s.HD(t.lineNumber))&&!(!s.o8(t.at)&&!s.HD(t.at))},schema:{type:"object",required:["lineNumber"],properties:{lineNumber:{type:["number","string"]},at:{type:"string",enum:["top","center","bottom"]}}}}]},e.RawAtArgument={Top:"top",Center:"center",Bottom:"bottom"}}(y||(y={}));class x{constructor(e){e.addImplementation(1e4,"code-editor",((e,t)=>{const i=e.get(l.$).getFocusedCodeEditor();return!(!i||!i.hasTextFocus())&&this._runEditorCommand(e,i,t)})),e.addImplementation(1e3,"generic-dom-input-textarea",((e,t)=>{const i=document.activeElement;return!!(i&&["input","textarea"].indexOf(i.tagName.toLowerCase())>=0)&&(this.runDOMCommand(),!0)})),e.addImplementation(0,"generic-dom",((e,t)=>{const i=e.get(l.$).getActiveCodeEditor();return!!i&&(i.focus(),this._runEditorCommand(e,i,t))}))}_runEditorCommand(e,t,i){const n=this.runEditorCommand(e,t,i);return n||!0}}!function(e){class t extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,[p.P.moveTo(e,e.getPrimaryCursorState(),this._inSelectionMode,t.position,t.viewPosition)]),e.revealPrimaryCursor(t.source,!0)}}e.MoveTo=(0,a.fK)(new t({id:"_moveTo",inSelectionMode:!1,precondition:void 0})),e.MoveToSelect=(0,a.fK)(new t({id:"_moveToSelect",inSelectionMode:!0,precondition:void 0}));class i extends b{runCoreEditorCommand(e,t){e.model.pushStackElement();const i=this._getColumnSelectResult(e,e.getPrimaryCursorState(),e.getCursorColumnSelectData(),t);e.setCursorStates(t.source,3,i.viewStates.map((e=>c.Vi.fromViewState(e)))),e.setCursorColumnSelectData({isReal:!0,fromViewLineNumber:i.fromLineNumber,fromViewVisualColumn:i.fromVisualColumn,toViewLineNumber:i.toLineNumber,toViewVisualColumn:i.toVisualColumn}),i.reversed?e.revealTopMostCursor(t.source):e.revealBottomMostCursor(t.source)}}e.ColumnSelect=(0,a.fK)(new class extends i{constructor(){super({id:"columnSelect",precondition:void 0})}_getColumnSelectResult(e,t,i,n){const o=e.model.validatePosition(n.position),s=e.coordinatesConverter.validateViewPosition(new d.L(n.viewPosition.lineNumber,n.viewPosition.column),o);let r=n.doColumnSelect?i.fromViewLineNumber:s.lineNumber,a=n.doColumnSelect?i.fromViewVisualColumn:n.mouseColumn-1;return u.columnSelect(e.cursorConfig,e,r,a,s.lineNumber,n.mouseColumn-1)}}),e.CursorColumnSelectLeft=(0,a.fK)(new class extends i{constructor(){super({id:"cursorColumnSelectLeft",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:3599,linux:{primary:0}}})}_getColumnSelectResult(e,t,i,n){return u.columnSelectLeft(e.cursorConfig,e,i)}}),e.CursorColumnSelectRight=(0,a.fK)(new class extends i{constructor(){super({id:"cursorColumnSelectRight",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:3601,linux:{primary:0}}})}_getColumnSelectResult(e,t,i,n){return u.columnSelectRight(e.cursorConfig,e,i)}});class s extends i{constructor(e){super(e),this._isPaged=e.isPaged}_getColumnSelectResult(e,t,i,n){return u.columnSelectUp(e.cursorConfig,e,i,this._isPaged)}}e.CursorColumnSelectUp=(0,a.fK)(new s({isPaged:!1,id:"cursorColumnSelectUp",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:3600,linux:{primary:0}}})),e.CursorColumnSelectPageUp=(0,a.fK)(new s({isPaged:!0,id:"cursorColumnSelectPageUp",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:3595,linux:{primary:0}}}));class l extends i{constructor(e){super(e),this._isPaged=e.isPaged}_getColumnSelectResult(e,t,i,n){return u.columnSelectDown(e.cursorConfig,e,i,this._isPaged)}}e.CursorColumnSelectDown=(0,a.fK)(new l({isPaged:!1,id:"cursorColumnSelectDown",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:3602,linux:{primary:0}}})),e.CursorColumnSelectPageDown=(0,a.fK)(new l({isPaged:!0,id:"cursorColumnSelectPageDown",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:3596,linux:{primary:0}}}));class g extends b{constructor(){super({id:"cursorMove",precondition:void 0,description:p.N.description})}runCoreEditorCommand(e,t){const i=p.N.parse(t);i&&this._runCursorMove(e,t.source,i)}_runCursorMove(e,t,i){e.model.pushStackElement(),e.setCursorStates(t,3,g._move(e,e.getCursorStates(),i)),e.revealPrimaryCursor(t,!0)}static _move(e,t,i){const n=i.select,o=i.value;switch(i.direction){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:return p.P.simpleMove(e,t,i.direction,n,o,i.unit);case 11:case 13:case 12:case 14:return p.P.viewportMove(e,t,i.direction,n,o);default:return null}}}e.CursorMoveImpl=g,e.CursorMove=(0,a.fK)(new g);class f extends b{constructor(e){super(e),this._staticArgs=e.args}runCoreEditorCommand(e,t){let i=this._staticArgs;-1===this._staticArgs.value&&(i={direction:this._staticArgs.direction,unit:this._staticArgs.unit,select:this._staticArgs.select,value:e.cursorConfig.pageSize}),e.model.pushStackElement(),e.setCursorStates(t.source,3,p.P.simpleMove(e,e.getCursorStates(),i.direction,i.select,i.value,i.unit)),e.revealPrimaryCursor(t.source,!0)}}e.CursorLeft=(0,a.fK)(new f({args:{direction:0,unit:0,select:!1,value:1},id:"cursorLeft",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:15,mac:{primary:15,secondary:[288]}}})),e.CursorLeftSelect=(0,a.fK)(new f({args:{direction:0,unit:0,select:!0,value:1},id:"cursorLeftSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:1039}})),e.CursorRight=(0,a.fK)(new f({args:{direction:1,unit:0,select:!1,value:1},id:"cursorRight",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:17,mac:{primary:17,secondary:[292]}}})),e.CursorRightSelect=(0,a.fK)(new f({args:{direction:1,unit:0,select:!0,value:1},id:"cursorRightSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:1041}})),e.CursorUp=(0,a.fK)(new f({args:{direction:2,unit:2,select:!1,value:1},id:"cursorUp",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:16,mac:{primary:16,secondary:[302]}}})),e.CursorUpSelect=(0,a.fK)(new f({args:{direction:2,unit:2,select:!0,value:1},id:"cursorUpSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:1040,secondary:[3088],mac:{primary:1040},linux:{primary:1040}}})),e.CursorPageUp=(0,a.fK)(new f({args:{direction:2,unit:2,select:!1,value:-1},id:"cursorPageUp",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:11}})),e.CursorPageUpSelect=(0,a.fK)(new f({args:{direction:2,unit:2,select:!0,value:-1},id:"cursorPageUpSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:1035}})),e.CursorDown=(0,a.fK)(new f({args:{direction:3,unit:2,select:!1,value:1},id:"cursorDown",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:18,mac:{primary:18,secondary:[300]}}})),e.CursorDownSelect=(0,a.fK)(new f({args:{direction:3,unit:2,select:!0,value:1},id:"cursorDownSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:1042,secondary:[3090],mac:{primary:1042},linux:{primary:1042}}})),e.CursorPageDown=(0,a.fK)(new f({args:{direction:3,unit:2,select:!1,value:-1},id:"cursorPageDown",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:12}})),e.CursorPageDownSelect=(0,a.fK)(new f({args:{direction:3,unit:2,select:!0,value:-1},id:"cursorPageDownSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:1036}})),e.CreateCursor=(0,a.fK)(new class extends b{constructor(){super({id:"createCursor",precondition:void 0})}runCoreEditorCommand(e,t){let i;i=t.wholeLine?p.P.line(e,e.getPrimaryCursorState(),!1,t.position,t.viewPosition):p.P.moveTo(e,e.getPrimaryCursorState(),!1,t.position,t.viewPosition);const n=e.getCursorStates();if(n.length>1){const o=i.modelState?i.modelState.position:null,s=i.viewState?i.viewState.position:null;for(let i=0,r=n.length;i<r;i++){const r=n[i];if((!o||r.modelState.selection.containsPosition(o))&&(!s||r.viewState.selection.containsPosition(s)))return n.splice(i,1),e.model.pushStackElement(),void e.setCursorStates(t.source,3,n)}}n.push(i),e.model.pushStackElement(),e.setCursorStates(t.source,3,n)}}),e.LastCursorMoveToSelect=(0,a.fK)(new class extends b{constructor(){super({id:"_lastCursorMoveToSelect",precondition:void 0})}runCoreEditorCommand(e,t){const i=e.getLastAddedCursorIndex(),n=e.getCursorStates(),o=n.slice(0);o[i]=p.P.moveTo(e,n[i],!0,t.position,t.viewPosition),e.model.pushStackElement(),e.setCursorStates(t.source,3,o)}});class v extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,p.P.moveToBeginningOfLine(e,e.getCursorStates(),this._inSelectionMode)),e.revealPrimaryCursor(t.source,!0)}}e.CursorHome=(0,a.fK)(new v({inSelectionMode:!1,id:"cursorHome",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:14,mac:{primary:14,secondary:[2063]}}})),e.CursorHomeSelect=(0,a.fK)(new v({inSelectionMode:!0,id:"cursorHomeSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:1038,mac:{primary:1038,secondary:[3087]}}}));class _ extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,this._exec(e.getCursorStates())),e.revealPrimaryCursor(t.source,!0)}_exec(e){const t=[];for(let i=0,n=e.length;i<n;i++){const n=e[i],o=n.modelState.position.lineNumber;t[i]=c.Vi.fromModelState(n.modelState.move(this._inSelectionMode,o,1,0))}return t}}e.CursorLineStart=(0,a.fK)(new _({inSelectionMode:!1,id:"cursorLineStart",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:0,mac:{primary:287}}})),e.CursorLineStartSelect=(0,a.fK)(new _({inSelectionMode:!0,id:"cursorLineStartSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:0,mac:{primary:1311}}}));class C extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,p.P.moveToEndOfLine(e,e.getCursorStates(),this._inSelectionMode,t.sticky||!1)),e.revealPrimaryCursor(t.source,!0)}}e.CursorEnd=(0,a.fK)(new C({inSelectionMode:!1,id:"cursorEnd",precondition:void 0,kbOpts:{args:{sticky:!1},weight:0,kbExpr:m.u.textInputFocus,primary:13,mac:{primary:13,secondary:[2065]}},description:{description:"Go to End",args:[{name:"args",schema:{type:"object",properties:{sticky:{description:n.N("stickydesc","Stick to the end even when going to longer lines"),type:"boolean",default:!1}}}}]}})),e.CursorEndSelect=(0,a.fK)(new C({inSelectionMode:!0,id:"cursorEndSelect",precondition:void 0,kbOpts:{args:{sticky:!1},weight:0,kbExpr:m.u.textInputFocus,primary:1037,mac:{primary:1037,secondary:[3089]}},description:{description:"Select to End",args:[{name:"args",schema:{type:"object",properties:{sticky:{description:n.N("stickydesc","Stick to the end even when going to longer lines"),type:"boolean",default:!1}}}}]}}));class S extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,this._exec(e,e.getCursorStates())),e.revealPrimaryCursor(t.source,!0)}_exec(e,t){const i=[];for(let n=0,o=t.length;n<o;n++){const o=t[n],s=o.modelState.position.lineNumber,r=e.model.getLineMaxColumn(s);i[n]=c.Vi.fromModelState(o.modelState.move(this._inSelectionMode,s,r,0))}return i}}e.CursorLineEnd=(0,a.fK)(new S({inSelectionMode:!1,id:"cursorLineEnd",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:0,mac:{primary:291}}})),e.CursorLineEndSelect=(0,a.fK)(new S({inSelectionMode:!0,id:"cursorLineEndSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:0,mac:{primary:1315}}}));class k extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,p.P.moveToBeginningOfBuffer(e,e.getCursorStates(),this._inSelectionMode)),e.revealPrimaryCursor(t.source,!0)}}e.CursorTop=(0,a.fK)(new k({inSelectionMode:!1,id:"cursorTop",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:2062,mac:{primary:2064}}})),e.CursorTopSelect=(0,a.fK)(new k({inSelectionMode:!0,id:"cursorTopSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:3086,mac:{primary:3088}}}));class L extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,p.P.moveToEndOfBuffer(e,e.getCursorStates(),this._inSelectionMode)),e.revealPrimaryCursor(t.source,!0)}}e.CursorBottom=(0,a.fK)(new L({inSelectionMode:!1,id:"cursorBottom",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:2061,mac:{primary:2066}}})),e.CursorBottomSelect=(0,a.fK)(new L({inSelectionMode:!0,id:"cursorBottomSelect",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:3085,mac:{primary:3090}}}));class N extends b{constructor(){super({id:"editorScroll",precondition:void 0,description:w.description})}runCoreEditorCommand(e,t){const i=w.parse(t);i&&this._runEditorScroll(e,t.source,i)}_runEditorScroll(e,t,i){const n=this._computeDesiredScrollTop(e,i);if(i.revealCursor){const o=e.getCompletelyVisibleViewRangeAtScrollTop(n);e.setCursorStates(t,3,[p.P.findPositionInViewportIfOutside(e,e.getPrimaryCursorState(),o,i.select)])}e.setScrollTop(n,0)}_computeDesiredScrollTop(e,t){if(1===t.unit){const i=e.getCompletelyVisibleViewRange(),n=e.coordinatesConverter.convertViewRangeToModelRange(i);let o;o=1===t.direction?Math.max(1,n.startLineNumber-t.value):Math.min(e.model.getLineCount(),n.startLineNumber+t.value);const s=e.coordinatesConverter.convertModelPositionToViewPosition(new d.L(o,1));return e.getVerticalOffsetForLineNumber(s.lineNumber)}let i;i=3===t.unit?e.cursorConfig.pageSize*t.value:4===t.unit?Math.round(e.cursorConfig.pageSize/2)*t.value:t.value;const n=(1===t.direction?-1:1)*i;return e.getScrollTop()+n*e.cursorConfig.lineHeight}}e.EditorScrollImpl=N,e.EditorScroll=(0,a.fK)(new N),e.ScrollLineUp=(0,a.fK)(new class extends b{constructor(){super({id:"scrollLineUp",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:2064,mac:{primary:267}}})}runCoreEditorCommand(t,i){e.EditorScroll._runEditorScroll(t,i.source,{direction:1,unit:2,value:1,revealCursor:!1,select:!1})}}),e.ScrollPageUp=(0,a.fK)(new class extends b{constructor(){super({id:"scrollPageUp",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:2059,win:{primary:523},linux:{primary:523}}})}runCoreEditorCommand(t,i){e.EditorScroll._runEditorScroll(t,i.source,{direction:1,unit:3,value:1,revealCursor:!1,select:!1})}}),e.ScrollLineDown=(0,a.fK)(new class extends b{constructor(){super({id:"scrollLineDown",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:2066,mac:{primary:268}}})}runCoreEditorCommand(t,i){e.EditorScroll._runEditorScroll(t,i.source,{direction:2,unit:2,value:1,revealCursor:!1,select:!1})}}),e.ScrollPageDown=(0,a.fK)(new class extends b{constructor(){super({id:"scrollPageDown",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:2060,win:{primary:524},linux:{primary:524}}})}runCoreEditorCommand(t,i){e.EditorScroll._runEditorScroll(t,i.source,{direction:2,unit:3,value:1,revealCursor:!1,select:!1})}});class D extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,[p.P.word(e,e.getPrimaryCursorState(),this._inSelectionMode,t.position)]),e.revealPrimaryCursor(t.source,!0)}}e.WordSelect=(0,a.fK)(new D({inSelectionMode:!1,id:"_wordSelect",precondition:void 0})),e.WordSelectDrag=(0,a.fK)(new D({inSelectionMode:!0,id:"_wordSelectDrag",precondition:void 0})),e.LastCursorWordSelect=(0,a.fK)(new class extends b{constructor(){super({id:"lastCursorWordSelect",precondition:void 0})}runCoreEditorCommand(e,t){const i=e.getLastAddedCursorIndex(),n=e.getCursorStates(),o=n.slice(0),s=n[i];o[i]=p.P.word(e,s,s.modelState.hasSelection(),t.position),e.model.pushStackElement(),e.setCursorStates(t.source,3,o)}});class I extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,[p.P.line(e,e.getPrimaryCursorState(),this._inSelectionMode,t.position,t.viewPosition)]),e.revealPrimaryCursor(t.source,!1)}}e.LineSelect=(0,a.fK)(new I({inSelectionMode:!1,id:"_lineSelect",precondition:void 0})),e.LineSelectDrag=(0,a.fK)(new I({inSelectionMode:!0,id:"_lineSelectDrag",precondition:void 0}));class E extends b{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode}runCoreEditorCommand(e,t){const i=e.getLastAddedCursorIndex(),n=e.getCursorStates(),o=n.slice(0);o[i]=p.P.line(e,n[i],this._inSelectionMode,t.position,t.viewPosition),e.model.pushStackElement(),e.setCursorStates(t.source,3,o)}}e.LastCursorLineSelect=(0,a.fK)(new E({inSelectionMode:!1,id:"lastCursorLineSelect",precondition:void 0})),e.LastCursorLineSelectDrag=(0,a.fK)(new E({inSelectionMode:!0,id:"lastCursorLineSelectDrag",precondition:void 0})),e.ExpandLineSelection=(0,a.fK)(new class extends b{constructor(){super({id:"expandLineSelection",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:2090}})}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,p.P.expandLineSelection(e,e.getCursorStates())),e.revealPrimaryCursor(t.source,!0)}}),e.CancelSelection=(0,a.fK)(new class extends b{constructor(){super({id:"cancelSelection",precondition:m.u.hasNonEmptySelection,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:9,secondary:[1033]}})}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,[p.P.cancelSelection(e,e.getPrimaryCursorState())]),e.revealPrimaryCursor(t.source,!0)}}),e.RemoveSecondaryCursors=(0,a.fK)(new class extends b{constructor(){super({id:"removeSecondaryCursors",precondition:m.u.hasMultipleSelections,kbOpts:{weight:1,kbExpr:m.u.textInputFocus,primary:9,secondary:[1033]}})}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,[e.getPrimaryCursorState()]),e.revealPrimaryCursor(t.source,!0),(0,r.i7)(n.N("removedCursor","Removed secondary cursors"))}}),e.RevealLine=(0,a.fK)(new class extends b{constructor(){super({id:"revealLine",precondition:void 0,description:y.description})}runCoreEditorCommand(e,t){const i=t,n=i.lineNumber||0;let o="number"==typeof n?n+1:parseInt(n)+1;o<1&&(o=1);const s=e.model.getLineCount();o>s&&(o=s);const r=new h.e(o,1,o,e.model.getLineMaxColumn(o));let a=0;if(i.at)switch(i.at){case y.RawAtArgument.Top:a=3;break;case y.RawAtArgument.Center:a=1;break;case y.RawAtArgument.Bottom:a=4}const l=e.coordinatesConverter.convertModelRangeToViewRange(r);e.revealRange(t.source,!1,l,a,0)}}),e.SelectAll=new class extends x{constructor(){super(a.Sq)}runDOMCommand(){o.vU&&(document.activeElement.focus(),document.activeElement.select()),document.execCommand("selectAll")}runEditorCommand(e,t,i){const n=t._getViewModel();n&&this.runCoreEditorCommand(n,i)}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates("keyboard",3,[p.P.selectAll(e,e.getPrimaryCursorState())])}},e.SetSelection=(0,a.fK)(new class extends b{constructor(){super({id:"setSelection",precondition:void 0})}runCoreEditorCommand(e,t){e.model.pushStackElement(),e.setCursorStates(t.source,3,[c.Vi.fromModelSelection(t.selection)])}})}(C||(C={}));const S=v.Ao.and(m.u.textInputFocus,m.u.columnSelection);function k(e,t){_.W.registerKeybindingRule({id:e,primary:t,when:S,weight:1})}function L(e){return e.register(),e}var N;k(C.CursorColumnSelectLeft.id,1039),k(C.CursorColumnSelectRight.id,1041),k(C.CursorColumnSelectUp.id,1040),k(C.CursorColumnSelectPageUp.id,1035),k(C.CursorColumnSelectDown.id,1042),k(C.CursorColumnSelectPageDown.id,1036),function(e){class t extends a._l{runEditorCommand(e,t,i){const n=t._getViewModel();n&&this.runCoreEditingCommand(t,n,i||{})}}e.CoreEditingCommand=t,e.LineBreakInsert=(0,a.fK)(new class extends t{constructor(){super({id:"lineBreakInsert",precondition:m.u.writable,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:0,mac:{primary:301}}})}runCoreEditingCommand(e,t,i){e.pushUndoStop(),e.executeCommands(this.id,f.u.lineBreakInsert(t.cursorConfig,t.model,t.getCursorStates().map((e=>e.modelState.selection))))}}),e.Outdent=(0,a.fK)(new class extends t{constructor(){super({id:"outdent",precondition:m.u.writable,kbOpts:{weight:0,kbExpr:v.Ao.and(m.u.editorTextFocus,m.u.tabDoesNotMoveFocus),primary:1026}})}runCoreEditingCommand(e,t,i){e.pushUndoStop(),e.executeCommands(this.id,f.u.outdent(t.cursorConfig,t.model,t.getCursorStates().map((e=>e.modelState.selection)))),e.pushUndoStop()}}),e.Tab=(0,a.fK)(new class extends t{constructor(){super({id:"tab",precondition:m.u.writable,kbOpts:{weight:0,kbExpr:v.Ao.and(m.u.editorTextFocus,m.u.tabDoesNotMoveFocus),primary:2}})}runCoreEditingCommand(e,t,i){e.pushUndoStop(),e.executeCommands(this.id,f.u.tab(t.cursorConfig,t.model,t.getCursorStates().map((e=>e.modelState.selection)))),e.pushUndoStop()}}),e.DeleteLeft=(0,a.fK)(new class extends t{constructor(){super({id:"deleteLeft",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:1,secondary:[1025],mac:{primary:1,secondary:[1025,294,257]}}})}runCoreEditingCommand(e,t,i){const[n,o]=g.A.deleteLeft(t.getPrevEditOperationType(),t.cursorConfig,t.model,t.getCursorStates().map((e=>e.modelState.selection)),t.getCursorAutoClosedCharacters());n&&e.pushUndoStop(),e.executeCommands(this.id,o),t.setPrevEditOperationType(2)}}),e.DeleteRight=(0,a.fK)(new class extends t{constructor(){super({id:"deleteRight",precondition:void 0,kbOpts:{weight:0,kbExpr:m.u.textInputFocus,primary:20,mac:{primary:20,secondary:[290,276]}}})}runCoreEditingCommand(e,t,i){const[n,o]=g.A.deleteRight(t.getPrevEditOperationType(),t.cursorConfig,t.model,t.getCursorStates().map((e=>e.modelState.selection)));n&&e.pushUndoStop(),e.executeCommands(this.id,o),t.setPrevEditOperationType(3)}}),e.Undo=new class extends x{constructor(){super(a.n_)}runDOMCommand(){document.execCommand("undo")}runEditorCommand(e,t,i){if(t.hasModel()&&!0!==t.getOption(80))return t.getModel().undo()}},e.Redo=new class extends x{constructor(){super(a.kz)}runDOMCommand(){document.execCommand("redo")}runEditorCommand(e,t,i){if(t.hasModel()&&!0!==t.getOption(80))return t.getModel().redo()}}}(N||(N={}));class D extends a.mY{constructor(e,t,i){super({id:e,precondition:void 0,description:i}),this._handlerId=t}runCommand(e,t){const i=e.get(l.$).getFocusedCodeEditor();i&&i.trigger("keyboard",this._handlerId,t)}}function I(e,t){L(new D("default:"+e,e)),L(new D(e,e,t))}I("type",{description:"ç±»åž‹",args:[{name:"args",schema:{type:"object",required:["text"],properties:{text:{type:"string"}}}}]}),I("replacePreviousChar"),I("compositionType"),I("compositionStart"),I("compositionEnd"),I("paste"),I("cut")},35715:(e,t,i)=>{"use strict";i.d(t,{Fz:()=>v,Nl:()=>m,RA:()=>f,pd:()=>n});var n,o=i(16268),s=i(65321),r=i(15393),a=i(4669),l=i(5976),c=i(81170),d=i(1432),h=i(97295),u=i(15887),g=i(50187),p=i(3860);!function(e){e.Tap="-monaco-textarea-synthetic-tap"}(n||(n={}));const f={forceCopyWithSyntaxHighlighting:!1};class m{constructor(){this._lastState=null}set(e,t){this._lastState={lastCopiedValue:e,data:t}}get(e){return this._lastState&&this._lastState.lastCopiedValue===e?this._lastState.data:(this._lastState=null,null)}}m.INSTANCE=new m;class v extends l.JT{constructor(e,t){super(),this.textArea=t,this._onFocus=this._register(new a.Q5),this.onFocus=this._onFocus.event,this._onBlur=this._register(new a.Q5),this.onBlur=this._onBlur.event,this._onKeyDown=this._register(new a.Q5),this.onKeyDown=this._onKeyDown.event,this._onKeyUp=this._register(new a.Q5),this.onKeyUp=this._onKeyUp.event,this._onCut=this._register(new a.Q5),this.onCut=this._onCut.event,this._onPaste=this._register(new a.Q5),this.onPaste=this._onPaste.event,this._onType=this._register(new a.Q5),this.onType=this._onType.event,this._onCompositionStart=this._register(new a.Q5),this.onCompositionStart=this._onCompositionStart.event,this._onCompositionUpdate=this._register(new a.Q5),this.onCompositionUpdate=this._onCompositionUpdate.event,this._onCompositionEnd=this._register(new a.Q5),this.onCompositionEnd=this._onCompositionEnd.event,this._onSelectionChangeRequest=this._register(new a.Q5),this.onSelectionChangeRequest=this._onSelectionChangeRequest.event,this._host=e,this._textArea=this._register(new b(t)),this._asyncTriggerCut=this._register(new r.pY((()=>this._onCut.fire()),0)),this._asyncFocusGainWriteScreenReaderContent=this._register(new r.pY((()=>this.writeScreenReaderContent("asyncFocusGain")),0)),this._textAreaState=u.un.EMPTY,this._selectionChangeListener=null,this.writeScreenReaderContent("ctor"),this._hasFocus=!1,this._isDoingComposition=!1,this._nextCommand=0;let i=null;this._register(s.mu(t.domNode,"keydown",(e=>{(109===e.keyCode||this._isDoingComposition&&1===e.keyCode)&&e.stopPropagation(),e.equals(9)&&e.preventDefault(),i=e,this._onKeyDown.fire(e)}))),this._register(s.mu(t.domNode,"keyup",(e=>{this._onKeyUp.fire(e)}))),this._register(s.nm(t.domNode,"compositionstart",(e=>{if(u.al&&console.log("[compositionstart]",e),!this._isDoingComposition){if(this._isDoingComposition=!0,d.dz&&this._textAreaState.selectionStart===this._textAreaState.selectionEnd&&this._textAreaState.selectionStart>0&&this._textAreaState.value.substr(this._textAreaState.selectionStart-1,1)===e.data){if(i&&i.equals(109)&&("ArrowRight"===i.code||"ArrowLeft"===i.code)||o.vU)return u.al&&console.log("[compositionstart] Handling long press case on macOS + arrow key or Firefox",e),this._textAreaState=new u.un(this._textAreaState.value,this._textAreaState.selectionStart-1,this._textAreaState.selectionEnd,this._textAreaState.selectionStartPosition?new g.L(this._textAreaState.selectionStartPosition.lineNumber,this._textAreaState.selectionStartPosition.column-1):null,this._textAreaState.selectionEndPosition),void this._onCompositionStart.fire({revealDeltaColumns:-1})}o.Dt?this._onCompositionStart.fire({revealDeltaColumns:-this._textAreaState.selectionStart}):(this._setAndWriteTextAreaState("compositionstart",u.un.EMPTY),this._onCompositionStart.fire({revealDeltaColumns:0}))}})));const l=e=>{const t=this._textAreaState,i=u.un.readFromTextArea(this._textArea);return[i,u.un.deduceInput(t,i,e)]},c=()=>{const e=this._textAreaState,t=u.un.readFromTextArea(this._textArea);return[t,u.un.deduceAndroidCompositionInput(e,t)]},p=e=>{const t=this._textAreaState,i=u.un.selectedText(e);return[i,{text:i.value,replacePrevCharCnt:t.selectionEnd-t.selectionStart,replaceNextCharCnt:0,positionDelta:0}]};this._register(s.nm(t.domNode,"compositionupdate",(e=>{if(u.al&&console.log("[compositionupdate]",e),o.Dt){const[t,i]=c();return this._textAreaState=t,this._onType.fire(i),void this._onCompositionUpdate.fire(e)}const[t,i]=p(e.data||"");this._textAreaState=t,this._onType.fire(i),this._onCompositionUpdate.fire(e)}))),this._register(s.nm(t.domNode,"compositionend",(e=>{if(u.al&&console.log("[compositionend]",e),!this._isDoingComposition)return;if(this._isDoingComposition=!1,o.Dt){const[e,t]=c();return this._textAreaState=e,this._onType.fire(t),void this._onCompositionEnd.fire()}const[t,i]=p(e.data||"");this._textAreaState=t,this._onType.fire(i),(o.i7||o.vU)&&(this._textAreaState=u.un.readFromTextArea(this._textArea)),this._onCompositionEnd.fire()}))),this._register(s.nm(t.domNode,"input",(()=>{if(this._textArea.setIgnoreSelectionChangeTime("received input event"),this._isDoingComposition)return;const[e,t]=l(d.dz);0===t.replacePrevCharCnt&&1===t.text.length&&h.ZG(t.text.charCodeAt(0))||(this._textAreaState=e,0===this._nextCommand?""===t.text&&0===t.replacePrevCharCnt||this._onType.fire(t):(""===t.text&&0===t.replacePrevCharCnt||this._firePaste(t.text,null),this._nextCommand=0))}))),this._register(s.nm(t.domNode,"cut",(e=>{this._textArea.setIgnoreSelectionChangeTime("received cut event"),this._ensureClipboardGetsEditorSelection(e),this._asyncTriggerCut.schedule()}))),this._register(s.nm(t.domNode,"copy",(e=>{this._ensureClipboardGetsEditorSelection(e)}))),this._register(s.nm(t.domNode,"paste",(e=>{if(this._textArea.setIgnoreSelectionChangeTime("received paste event"),_.canUseTextData(e)){const[t,i]=_.getTextData(e);""!==t&&this._firePaste(t,i)}else this._textArea.getSelectionStart()!==this._textArea.getSelectionEnd()&&this._setAndWriteTextAreaState("paste",u.un.EMPTY),this._nextCommand=1}))),this._register(s.nm(t.domNode,"focus",(()=>{const e=this._hasFocus;this._setHasFocus(!0),o.G6&&!e&&this._hasFocus&&this._asyncFocusGainWriteScreenReaderContent.schedule()}))),this._register(s.nm(t.domNode,"blur",(()=>{this._isDoingComposition&&(this._isDoingComposition=!1,this.writeScreenReaderContent("blurWithoutCompositionEnd"),this._onCompositionEnd.fire()),this._setHasFocus(!1)}))),this._register(s.nm(t.domNode,n.Tap,(()=>{o.Dt&&this._isDoingComposition&&(this._isDoingComposition=!1,this.writeScreenReaderContent("tapWithoutCompositionEnd"),this._onCompositionEnd.fire())})))}_installSelectionChangeListener(){let e=0;return s.nm(document,"selectionchange",(t=>{if(!this._hasFocus)return;if(this._isDoingComposition)return;if(!o.i7)return;const i=Date.now(),n=i-e;if(e=i,n<5)return;const s=i-this._textArea.getIgnoreSelectionChangeTime();if(this._textArea.resetSelectionChangeTime(),s<100)return;if(!this._textAreaState.selectionStartPosition||!this._textAreaState.selectionEndPosition)return;const r=this._textArea.getValue();if(this._textAreaState.value!==r)return;const a=this._textArea.getSelectionStart(),l=this._textArea.getSelectionEnd();if(this._textAreaState.selectionStart===a&&this._textAreaState.selectionEnd===l)return;const c=this._textAreaState.deduceEditorPosition(a),d=this._host.deduceModelPosition(c[0],c[1],c[2]),h=this._textAreaState.deduceEditorPosition(l),u=this._host.deduceModelPosition(h[0],h[1],h[2]),g=new p.Y(d.lineNumber,d.column,u.lineNumber,u.column);this._onSelectionChangeRequest.fire(g)}))}dispose(){super.dispose(),this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null)}focusTextArea(){this._setHasFocus(!0),this.refreshFocusState()}isFocused(){return this._hasFocus}refreshFocusState(){const e=s.Ay(this.textArea.domNode);e?this._setHasFocus(e.activeElement===this.textArea.domNode):s.Uw(this.textArea.domNode)?this._setHasFocus(document.activeElement===this.textArea.domNode):this._setHasFocus(!1)}_setHasFocus(e){this._hasFocus!==e&&(this._hasFocus=e,this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null),this._hasFocus&&(this._selectionChangeListener=this._installSelectionChangeListener()),this._hasFocus&&this.writeScreenReaderContent("focusgain"),this._hasFocus?this._onFocus.fire():this._onBlur.fire())}_setAndWriteTextAreaState(e,t){this._hasFocus||(t=t.collapseSelection()),t.writeToTextArea(e,this._textArea,this._hasFocus),this._textAreaState=t}writeScreenReaderContent(e){this._isDoingComposition||this._setAndWriteTextAreaState(e,this._host.getScreenReaderContent(this._textAreaState))}_ensureClipboardGetsEditorSelection(e){const t=this._host.getDataToCopy(_.canUseTextData(e)),i={version:1,isFromEmptySelection:t.isFromEmptySelection,multicursorText:t.multicursorText,mode:t.mode};m.INSTANCE.set(o.vU?t.text.replace(/\r\n/g,"\n"):t.text,i),_.canUseTextData(e)?_.setTextData(e,t.text,t.html,i):this._setAndWriteTextAreaState("copy or cut",u.un.selectedText(t.text))}_firePaste(e,t){t||(t=m.INSTANCE.get(e)),this._onPaste.fire({text:e,metadata:t})}}class _{static canUseTextData(e){return!!e.clipboardData}static getTextData(e){if(e.clipboardData){e.preventDefault();const t=e.clipboardData.getData(c.vW.text);let i=null;const n=e.clipboardData.getData("vscode-editor-data");if("string"==typeof n)try{i=JSON.parse(n),1!==i.version&&(i=null)}catch(e){}return[t,i]}throw new Error("ClipboardEventUtils.getTextData: Cannot use text data!")}static setTextData(e,t,i,n){if(e.clipboardData)return e.clipboardData.setData(c.vW.text,t),"string"==typeof i&&e.clipboardData.setData("text/html",i),e.clipboardData.setData("vscode-editor-data",JSON.stringify(n)),void e.preventDefault();throw new Error("ClipboardEventUtils.setTextData: Cannot use text data!")}}class b extends l.JT{constructor(e){super(),this._actual=e,this._ignoreSelectionChangeTime=0}setIgnoreSelectionChangeTime(e){this._ignoreSelectionChangeTime=Date.now()}getIgnoreSelectionChangeTime(){return this._ignoreSelectionChangeTime}resetSelectionChangeTime(){this._ignoreSelectionChangeTime=0}getValue(){return this._actual.domNode.value}setValue(e,t){const i=this._actual.domNode;i.value!==t&&(this.setIgnoreSelectionChangeTime("setValue"),i.value=t)}getSelectionStart(){return"backward"===this._actual.domNode.selectionDirection?this._actual.domNode.selectionEnd:this._actual.domNode.selectionStart}getSelectionEnd(){return"backward"===this._actual.domNode.selectionDirection?this._actual.domNode.selectionStart:this._actual.domNode.selectionEnd}setSelectionRange(e,t,i){const n=this._actual.domNode;let r=null;const a=s.Ay(n);r=a?a.activeElement:document.activeElement;const l=r===n,c=n.selectionStart,d=n.selectionEnd;if(l&&c===t&&d===i)o.vU&&window.parent!==window&&n.focus();else{if(l)return this.setIgnoreSelectionChangeTime("setSelectionRange"),n.setSelectionRange(t,i),void(o.vU&&window.parent!==window&&n.focus());try{const e=s.vL(n);this.setIgnoreSelectionChangeTime("setSelectionRange"),n.focus(),n.setSelectionRange(t,i),s._0(n,e)}catch(e){}}}}},15887:(e,t,i)=>{"use strict";i.d(t,{al:()=>r,ee:()=>l,un:()=>a});var n=i(97295),o=i(50187),s=i(24314);const r=!1;class a{constructor(e,t,i,n,o){this.value=e,this.selectionStart=t,this.selectionEnd=i,this.selectionStartPosition=n,this.selectionEndPosition=o}toString(){return"[ <"+this.value+">, selectionStart: "+this.selectionStart+", selectionEnd: "+this.selectionEnd+"]"}static readFromTextArea(e){return new a(e.getValue(),e.getSelectionStart(),e.getSelectionEnd(),null,null)}collapseSelection(){return new a(this.value,this.value.length,this.value.length,null,null)}writeToTextArea(e,t,i){r&&console.log("writeToTextArea "+e+": "+this.toString()),t.setValue(e,this.value),i&&t.setSelectionRange(e,this.selectionStart,this.selectionEnd)}deduceEditorPosition(e){if(e<=this.selectionStart){const t=this.value.substring(e,this.selectionStart);return this._finishDeduceEditorPosition(this.selectionStartPosition,t,-1)}if(e>=this.selectionEnd){const t=this.value.substring(this.selectionEnd,e);return this._finishDeduceEditorPosition(this.selectionEndPosition,t,1)}const t=this.value.substring(this.selectionStart,e);if(-1===t.indexOf(String.fromCharCode(8230)))return this._finishDeduceEditorPosition(this.selectionStartPosition,t,1);const i=this.value.substring(e,this.selectionEnd);return this._finishDeduceEditorPosition(this.selectionEndPosition,i,-1)}_finishDeduceEditorPosition(e,t,i){let n=0,o=-1;for(;-1!==(o=t.indexOf("\n",o+1));)n++;return[e,i*t.length,n]}static selectedText(e){return new a(e,0,e.length,null,null)}static deduceInput(e,t,i){if(!e)return{text:"",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0};r&&(console.log("------------------------deduceInput"),console.log("PREVIOUS STATE: "+e.toString()),console.log("CURRENT STATE: "+t.toString()));let o=e.value,s=e.selectionStart,a=e.selectionEnd,l=t.value,c=t.selectionStart,d=t.selectionEnd;const h=o.substring(a),u=l.substring(d),g=n.P1(h,u);l=l.substring(0,l.length-g),o=o.substring(0,o.length-g);const p=o.substring(0,s),f=l.substring(0,c),m=n.Mh(p,f);if(l=l.substring(m),o=o.substring(m),c-=m,s-=m,d-=m,a-=m,r&&(console.log("AFTER DIFFING PREVIOUS STATE: <"+o+">, selectionStart: "+s+", selectionEnd: "+a),console.log("AFTER DIFFING CURRENT STATE: <"+l+">, selectionStart: "+c+", selectionEnd: "+d)),i&&c===d&&o.length>0){let e=null;if(c===l.length?l.startsWith(o)&&(e=l.substring(o.length)):l.endsWith(o)&&(e=l.substring(0,l.length-o.length)),null!==e&&e.length>0&&(/\uFE0F/.test(e)||n.RP(e)))return{text:e,replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0}}if(c===d){if(o===l&&0===s&&a===o.length&&c===l.length&&-1===l.indexOf("\n")&&n.xe(l))return{text:"",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0};const e=p.length-m;return r&&console.log("REMOVE PREVIOUS: "+(p.length-m)+" chars"),{text:l,replacePrevCharCnt:e,replaceNextCharCnt:0,positionDelta:0}}return{text:l,replacePrevCharCnt:a-s,replaceNextCharCnt:0,positionDelta:0}}static deduceAndroidCompositionInput(e,t){if(!e)return{text:"",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:0};if(r&&(console.log("------------------------deduceAndroidCompositionInput"),console.log("PREVIOUS STATE: "+e.toString()),console.log("CURRENT STATE: "+t.toString())),e.value===t.value)return{text:"",replacePrevCharCnt:0,replaceNextCharCnt:0,positionDelta:t.selectionEnd-e.selectionEnd};const i=Math.min(n.Mh(e.value,t.value),e.selectionEnd),o=Math.min(n.P1(e.value,t.value),e.value.length-e.selectionEnd),s=e.value.substring(i,e.value.length-o),a=t.value.substring(i,t.value.length-o),l=e.selectionStart-i,c=e.selectionEnd-i,d=t.selectionStart-i,h=t.selectionEnd-i;return r&&(console.log("AFTER DIFFING PREVIOUS STATE: <"+s+">, selectionStart: "+l+", selectionEnd: "+c),console.log("AFTER DIFFING CURRENT STATE: <"+a+">, selectionStart: "+d+", selectionEnd: "+h)),{text:a,replacePrevCharCnt:c,replaceNextCharCnt:s.length-c,positionDelta:h-a.length}}}a.EMPTY=new a("",0,0,null,null);class l{static _getPageOfLine(e,t){return Math.floor((e-1)/t)}static _getRangeForPage(e,t){const i=e*t,n=i+1,o=i+t;return new s.e(n,1,o+1,1)}static fromEditorSelection(e,t,i,n,r){const c=l._getPageOfLine(i.startLineNumber,n),d=l._getRangeForPage(c,n),h=l._getPageOfLine(i.endLineNumber,n),u=l._getRangeForPage(h,n),g=d.intersectRanges(new s.e(1,1,i.startLineNumber,i.startColumn));let p=t.getValueInRange(g,1);const f=t.getLineCount(),m=t.getLineMaxColumn(f),v=u.intersectRanges(new s.e(i.endLineNumber,i.endColumn,f,m));let _,b=t.getValueInRange(v,1);if(c===h||c+1===h)_=t.getValueInRange(i,1);else{const e=d.intersectRanges(i),n=u.intersectRanges(i);_=t.getValueInRange(e,1)+String.fromCharCode(8230)+t.getValueInRange(n,1)}if(r){const e=500;p.length>e&&(p=p.substring(p.length-e,p.length)),b.length>e&&(b=b.substring(0,e)),_.length>2*e&&(_=_.substring(0,e)+String.fromCharCode(8230)+_.substring(_.length-e,_.length))}return new a(p+_+b,p.length,p.length+_.length,new o.L(i.startLineNumber,i.startColumn),new o.L(i.endLineNumber,i.endColumn))}}},39925:(e,t,i)=>{"use strict";i.d(t,{yy:()=>m,Dl:()=>v,ZF:()=>b,YQ:()=>_});var n=i(97295),o=i(24314),s=i(71050),r=i(5976),a=i(16830),l=i(38819),c=i(91741),d=i(72065),h=i(65026),u=i(63580);const g=(0,d.yh)("IEditorCancelService"),p=new l.uy("cancellableOperation",!1,(0,u.N)("cancellableOperation","Whether the editor runs a cancellable operation, e.g. like 'Peek References'"));(0,h.z)(g,class{constructor(){this._tokens=new WeakMap}add(e,t){let i,n=this._tokens.get(e);return n||(n=e.invokeWithinContext((e=>({key:p.bindTo(e.get(l.i6)),tokens:new c.S}))),this._tokens.set(e,n)),n.key.set(!0),i=n.tokens.push(t),()=>{i&&(i(),n.key.set(!n.tokens.isEmpty()),i=void 0)}}cancel(e){const t=this._tokens.get(e);if(!t)return;const i=t.tokens.pop();i&&(i.cancel(),t.key.set(!t.tokens.isEmpty()))}},!0);class f extends s.A{constructor(e,t){super(t),this.editor=e,this._unregister=e.invokeWithinContext((t=>t.get(g).add(e,this)))}dispose(){this._unregister(),super.dispose()}}(0,a.fK)(new class extends a._l{constructor(){super({id:"editor.cancelOperation",kbOpts:{weight:100,primary:9},precondition:p})}runEditorCommand(e,t){e.get(g).cancel(t)}});class m{constructor(e,t){if(this.flags=t,0!=(1&this.flags)){const t=e.getModel();this.modelVersionId=t?n.WU("{0}#{1}",t.uri.toString(),t.getVersionId()):null}else this.modelVersionId=null;0!=(4&this.flags)?this.position=e.getPosition():this.position=null,0!=(2&this.flags)?this.selection=e.getSelection():this.selection=null,0!=(8&this.flags)?(this.scrollLeft=e.getScrollLeft(),this.scrollTop=e.getScrollTop()):(this.scrollLeft=-1,this.scrollTop=-1)}_equals(e){if(!(e instanceof m))return!1;const t=e;return this.modelVersionId===t.modelVersionId&&(this.scrollLeft===t.scrollLeft&&this.scrollTop===t.scrollTop&&(!(!this.position&&t.position||this.position&&!t.position||this.position&&t.position&&!this.position.equals(t.position))&&!(!this.selection&&t.selection||this.selection&&!t.selection||this.selection&&t.selection&&!this.selection.equalsRange(t.selection))))}validate(e){return this._equals(new m(e,this.flags))}}class v extends f{constructor(e,t,i,n){super(e,n),this._listener=new r.SL,4&t&&this._listener.add(e.onDidChangeCursorPosition((e=>{i&&o.e.containsPosition(i,e.position)||this.cancel()}))),2&t&&this._listener.add(e.onDidChangeCursorSelection((e=>{i&&o.e.containsRange(i,e.selection)||this.cancel()}))),8&t&&this._listener.add(e.onDidScrollChange((e=>this.cancel()))),1&t&&(this._listener.add(e.onDidChangeModel((e=>this.cancel()))),this._listener.add(e.onDidChangeModelContent((e=>this.cancel()))))}dispose(){this._listener.dispose(),super.dispose()}}class _ extends s.A{constructor(e,t){super(t),this._listener=e.onDidChangeContent((()=>this.cancel()))}dispose(){this._listener.dispose(),super.dispose()}}class b{constructor(e,t,i){this._visiblePosition=e,this._visiblePositionScrollDelta=t,this._cursorPosition=i}static capture(e){let t=null,i=0;if(0!==e.getScrollTop()){const n=e.getVisibleRanges();if(n.length>0){t=n[0].getStartPosition();const o=e.getTopForPosition(t.lineNumber,t.column);i=e.getScrollTop()-o}}return new b(t,i,e.getPosition())}restore(e){if(this._visiblePosition){const t=e.getTopForPosition(this._visiblePosition.lineNumber,this._visiblePosition.column);e.setScrollTop(t+this._visiblePositionScrollDelta)}}restoreRelativeVerticalPositionOfCursor(e){const t=e.getPosition();if(!this._cursorPosition||!t)return;const i=e.getTopForLineNumber(t.lineNumber)-e.getTopForLineNumber(this._cursorPosition.lineNumber);e.setScrollTop(e.getScrollTop()+i)}}},43256:(e,t,i)=>{"use strict";i.d(t,{$:()=>Ee});var n=i(65321);var o=Object.hasOwnProperty,s=Object.setPrototypeOf,r=Object.isFrozen,a=Object.getPrototypeOf,l=Object.getOwnPropertyDescriptor,c=Object.freeze,d=Object.seal,h=Object.create,u="undefined"!=typeof Reflect&&Reflect,g=u.apply,p=u.construct;g||(g=function(e,t,i){return e.apply(t,i)}),c||(c=function(e){return e}),d||(d=function(e){return e}),p||(p=function(e,t){return new(Function.prototype.bind.apply(e,[null].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(t))))});var f,m=L(Array.prototype.forEach),v=L(Array.prototype.pop),_=L(Array.prototype.push),b=L(String.prototype.toLowerCase),w=L(String.prototype.match),y=L(String.prototype.replace),C=L(String.prototype.indexOf),x=L(String.prototype.trim),S=L(RegExp.prototype.test),k=(f=TypeError,function(){for(var e=arguments.length,t=Array(e),i=0;i<e;i++)t[i]=arguments[i];return p(f,t)});function L(e){return function(t){for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return g(e,t,n)}}function N(e,t){s&&s(e,null);for(var i=t.length;i--;){var n=t[i];if("string"==typeof n){var o=b(n);o!==n&&(r(t)||(t[i]=o),n=o)}e[n]=!0}return e}function D(e){var t=h(null),i=void 0;for(i in e)g(o,e,[i])&&(t[i]=e[i]);return t}function I(e,t){for(;null!==e;){var i=l(e,t);if(i){if(i.get)return L(i.get);if("function"==typeof i.value)return L(i.value)}e=a(e)}return function(e){return console.warn("fallback value for",e),null}}var E=c(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),T=c(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),M=c(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),A=c(["animate","color-profile","cursor","discard","fedropshadow","feimage","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),O=c(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),P=c(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),R=c(["#text"]),F=c(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),B=c(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),V=c(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),W=c(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),H=d(/\{\{[\s\S]*|[\s\S]*\}\}/gm),z=d(/<%[\s\S]*|[\s\S]*%>/gm),j=d(/^data-[\-\w.\u00B7-\uFFFF]/),U=d(/^aria-[\-\w]+$/),$=d(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),K=d(/^(?:\w+script|data):/i),q=d(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function G(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}var Y=function(){return"undefined"==typeof window?null:window};var Q=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Y(),i=function(t){return e(t)};if(i.version="2.3.1",i.removed=[],!t||!t.document||9!==t.document.nodeType)return i.isSupported=!1,i;var n=t.document,o=t.document,s=t.DocumentFragment,r=t.HTMLTemplateElement,a=t.Node,l=t.Element,d=t.NodeFilter,h=t.NamedNodeMap,u=void 0===h?t.NamedNodeMap||t.MozNamedAttrMap:h,g=t.Text,p=t.Comment,f=t.DOMParser,L=t.trustedTypes,Q=l.prototype,X=I(Q,"cloneNode"),J=I(Q,"nextSibling"),ee=I(Q,"childNodes"),te=I(Q,"parentNode");if("function"==typeof r){var ie=o.createElement("template");ie.content&&ie.content.ownerDocument&&(o=ie.content.ownerDocument)}var ne=function(e,t){if("object"!==(void 0===e?"undefined":Z(e))||"function"!=typeof e.createPolicy)return null;var i=null,n="data-tt-policy-suffix";t.currentScript&&t.currentScript.hasAttribute(n)&&(i=t.currentScript.getAttribute(n));var o="dompurify"+(i?"#"+i:"");try{return e.createPolicy(o,{createHTML:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+o+" could not be created."),null}}(L,n),oe=ne&&Re?ne.createHTML(""):"",se=o,re=se.implementation,ae=se.createNodeIterator,le=se.createDocumentFragment,ce=se.getElementsByTagName,de=n.importNode,he={};try{he=D(o).documentMode?o.documentMode:{}}catch(e){}var ue={};i.isSupported="function"==typeof te&&re&&void 0!==re.createHTMLDocument&&9!==he;var ge=H,pe=z,fe=j,me=U,ve=K,_e=q,be=$,we=null,ye=N({},[].concat(G(E),G(T),G(M),G(O),G(R))),Ce=null,xe=N({},[].concat(G(F),G(B),G(V),G(W))),Se=null,ke=null,Le=!0,Ne=!0,De=!1,Ie=!1,Ee=!1,Te=!1,Me=!1,Ae=!1,Oe=!1,Pe=!0,Re=!1,Fe=!0,Be=!0,Ve=!1,We={},He=null,ze=N({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),je=null,Ue=N({},["audio","video","img","source","image","track"]),$e=null,Ke=N({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),qe="http://www.w3.org/1998/Math/MathML",Ze="http://www.w3.org/2000/svg",Ge="http://www.w3.org/1999/xhtml",Ye=Ge,Qe=!1,Xe=null,Je=o.createElement("form"),et=function(e){Xe&&Xe===e||(e&&"object"===(void 0===e?"undefined":Z(e))||(e={}),e=D(e),we="ALLOWED_TAGS"in e?N({},e.ALLOWED_TAGS):ye,Ce="ALLOWED_ATTR"in e?N({},e.ALLOWED_ATTR):xe,$e="ADD_URI_SAFE_ATTR"in e?N(D(Ke),e.ADD_URI_SAFE_ATTR):Ke,je="ADD_DATA_URI_TAGS"in e?N(D(Ue),e.ADD_DATA_URI_TAGS):Ue,He="FORBID_CONTENTS"in e?N({},e.FORBID_CONTENTS):ze,Se="FORBID_TAGS"in e?N({},e.FORBID_TAGS):{},ke="FORBID_ATTR"in e?N({},e.FORBID_ATTR):{},We="USE_PROFILES"in e&&e.USE_PROFILES,Le=!1!==e.ALLOW_ARIA_ATTR,Ne=!1!==e.ALLOW_DATA_ATTR,De=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ie=e.SAFE_FOR_TEMPLATES||!1,Ee=e.WHOLE_DOCUMENT||!1,Ae=e.RETURN_DOM||!1,Oe=e.RETURN_DOM_FRAGMENT||!1,Pe=!1!==e.RETURN_DOM_IMPORT,Re=e.RETURN_TRUSTED_TYPE||!1,Me=e.FORCE_BODY||!1,Fe=!1!==e.SANITIZE_DOM,Be=!1!==e.KEEP_CONTENT,Ve=e.IN_PLACE||!1,be=e.ALLOWED_URI_REGEXP||be,Ye=e.NAMESPACE||Ge,Ie&&(Ne=!1),Oe&&(Ae=!0),We&&(we=N({},[].concat(G(R))),Ce=[],!0===We.html&&(N(we,E),N(Ce,F)),!0===We.svg&&(N(we,T),N(Ce,B),N(Ce,W)),!0===We.svgFilters&&(N(we,M),N(Ce,B),N(Ce,W)),!0===We.mathMl&&(N(we,O),N(Ce,V),N(Ce,W))),e.ADD_TAGS&&(we===ye&&(we=D(we)),N(we,e.ADD_TAGS)),e.ADD_ATTR&&(Ce===xe&&(Ce=D(Ce)),N(Ce,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&N($e,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(He===ze&&(He=D(He)),N(He,e.FORBID_CONTENTS)),Be&&(we["#text"]=!0),Ee&&N(we,["html","head","body"]),we.table&&(N(we,["tbody"]),delete Se.tbody),c&&c(e),Xe=e)},tt=N({},["mi","mo","mn","ms","mtext"]),it=N({},["foreignobject","desc","title","annotation-xml"]),nt=N({},T);N(nt,M),N(nt,A);var ot=N({},O);N(ot,P);var st=function(e){_(i.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=oe}catch(t){e.remove()}}},rt=function(e,t){try{_(i.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){_(i.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Ce[e])if(Ae||Oe)try{st(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},at=function(e){var t=void 0,i=void 0;if(Me)e="<remove></remove>"+e;else{var n=w(e,/^[\r\n\t ]+/);i=n&&n[0]}var s=ne?ne.createHTML(e):e;if(Ye===Ge)try{t=(new f).parseFromString(s,"text/html")}catch(e){}if(!t||!t.documentElement){t=re.createDocument(Ye,"template",null);try{t.documentElement.innerHTML=Qe?"":s}catch(e){}}var r=t.body||t.documentElement;return e&&i&&r.insertBefore(o.createTextNode(i),r.childNodes[0]||null),Ye===Ge?ce.call(t,Ee?"html":"body")[0]:Ee?t.documentElement:r},lt=function(e){return ae.call(e.ownerDocument||e,e,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT,null,!1)},ct=function(e){return"object"===(void 0===a?"undefined":Z(a))?e instanceof a:e&&"object"===(void 0===e?"undefined":Z(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},dt=function(e,t,n){ue[e]&&m(ue[e],(function(e){e.call(i,t,n,Xe)}))},ht=function(e){var t,n=void 0;if(dt("beforeSanitizeElements",e,null),!((t=e)instanceof g||t instanceof p||"string"==typeof t.nodeName&&"string"==typeof t.textContent&&"function"==typeof t.removeChild&&t.attributes instanceof u&&"function"==typeof t.removeAttribute&&"function"==typeof t.setAttribute&&"string"==typeof t.namespaceURI&&"function"==typeof t.insertBefore))return st(e),!0;if(w(e.nodeName,/[\u0080-\uFFFF]/))return st(e),!0;var o=b(e.nodeName);if(dt("uponSanitizeElement",e,{tagName:o,allowedTags:we}),!ct(e.firstElementChild)&&(!ct(e.content)||!ct(e.content.firstElementChild))&&S(/<[/\w]/g,e.innerHTML)&&S(/<[/\w]/g,e.textContent))return st(e),!0;if("select"===o&&S(/<template/i,e.innerHTML))return st(e),!0;if(!we[o]||Se[o]){if(Be&&!He[o]){var s=te(e)||e.parentNode,r=ee(e)||e.childNodes;if(r&&s)for(var a=r.length-1;a>=0;--a)s.insertBefore(X(r[a],!0),J(e))}return st(e),!0}return e instanceof l&&!function(e){var t=te(e);t&&t.tagName||(t={namespaceURI:Ge,tagName:"template"});var i=b(e.tagName),n=b(t.tagName);if(e.namespaceURI===Ze)return t.namespaceURI===Ge?"svg"===i:t.namespaceURI===qe?"svg"===i&&("annotation-xml"===n||tt[n]):Boolean(nt[i]);if(e.namespaceURI===qe)return t.namespaceURI===Ge?"math"===i:t.namespaceURI===Ze?"math"===i&&it[n]:Boolean(ot[i]);if(e.namespaceURI===Ge){if(t.namespaceURI===Ze&&!it[n])return!1;if(t.namespaceURI===qe&&!tt[n])return!1;var o=N({},["title","style","font","a","script"]);return!ot[i]&&(o[i]||!nt[i])}return!1}(e)?(st(e),!0):"noscript"!==o&&"noembed"!==o||!S(/<\/no(script|embed)/i,e.innerHTML)?(Ie&&3===e.nodeType&&(n=e.textContent,n=y(n,ge," "),n=y(n,pe," "),e.textContent!==n&&(_(i.removed,{element:e.cloneNode()}),e.textContent=n)),dt("afterSanitizeElements",e,null),!1):(st(e),!0)},ut=function(e,t,i){if(Fe&&("id"===t||"name"===t)&&(i in o||i in Je))return!1;if(Ne&&!ke[t]&&S(fe,t));else if(Le&&S(me,t));else{if(!Ce[t]||ke[t])return!1;if($e[t]);else if(S(be,y(i,_e,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==C(i,"data:")||!je[e]){if(De&&!S(ve,y(i,_e,"")));else if(i)return!1}else;}return!0},gt=function(e){var t=void 0,n=void 0,o=void 0,s=void 0;dt("beforeSanitizeAttributes",e,null);var r=e.attributes;if(r){var a={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ce};for(s=r.length;s--;){var l=t=r[s],c=l.name,d=l.namespaceURI;if(n=x(t.value),o=b(c),a.attrName=o,a.attrValue=n,a.keepAttr=!0,a.forceKeepAttr=void 0,dt("uponSanitizeAttribute",e,a),n=a.attrValue,!a.forceKeepAttr&&(rt(c,e),a.keepAttr))if(S(/\/>/i,n))rt(c,e);else{Ie&&(n=y(n,ge," "),n=y(n,pe," "));var h=e.nodeName.toLowerCase();if(ut(h,o,n))try{d?e.setAttributeNS(d,c,n):e.setAttribute(c,n),v(i.removed)}catch(e){}}}dt("afterSanitizeAttributes",e,null)}},pt=function e(t){var i=void 0,n=lt(t);for(dt("beforeSanitizeShadowDOM",t,null);i=n.nextNode();)dt("uponSanitizeShadowNode",i,null),ht(i)||(i.content instanceof s&&e(i.content),gt(i));dt("afterSanitizeShadowDOM",t,null)};return i.sanitize=function(e,o){var r=void 0,l=void 0,c=void 0,d=void 0,h=void 0;if((Qe=!e)&&(e="\x3c!--\x3e"),"string"!=typeof e&&!ct(e)){if("function"!=typeof e.toString)throw k("toString is not a function");if("string"!=typeof(e=e.toString()))throw k("dirty is not a string, aborting")}if(!i.isSupported){if("object"===Z(t.toStaticHTML)||"function"==typeof t.toStaticHTML){if("string"==typeof e)return t.toStaticHTML(e);if(ct(e))return t.toStaticHTML(e.outerHTML)}return e}if(Te||et(o),i.removed=[],"string"==typeof e&&(Ve=!1),Ve);else if(e instanceof a)1===(l=(r=at("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===l.nodeName||"HTML"===l.nodeName?r=l:r.appendChild(l);else{if(!Ae&&!Ie&&!Ee&&-1===e.indexOf("<"))return ne&&Re?ne.createHTML(e):e;if(!(r=at(e)))return Ae?null:oe}r&&Me&&st(r.firstChild);for(var u=lt(Ve?e:r);c=u.nextNode();)3===c.nodeType&&c===d||ht(c)||(c.content instanceof s&&pt(c.content),gt(c),d=c);if(d=null,Ve)return e;if(Ae){if(Oe)for(h=le.call(r.ownerDocument);r.firstChild;)h.appendChild(r.firstChild);else h=r;return Pe&&(h=de.call(n,h,!0)),h}var g=Ee?r.outerHTML:r.innerHTML;return Ie&&(g=y(g,ge," "),g=y(g,pe," ")),ne&&Re?ne.createHTML(g):g},i.setConfig=function(e){et(e),Te=!0},i.clearConfig=function(){Xe=null,Te=!1},i.isValidAttribute=function(e,t,i){Xe||et({});var n=b(e),o=b(t);return ut(n,o,i)},i.addHook=function(e,t){"function"==typeof t&&(ue[e]=ue[e]||[],_(ue[e],t))},i.removeHook=function(e){ue[e]&&v(ue[e])},i.removeHooks=function(e){ue[e]&&(ue[e]=[])},i.removeAllHooks=function(){ue={}},i}();Q.version,Q.isSupported;const X=Q.sanitize,J=(Q.setConfig,Q.clearConfig,Q.isValidAttribute,Q.addHook),ee=Q.removeHook;Q.removeHooks,Q.removeAllHooks;var te=i(4850),ie=i(48764),ne=i(23938),oe=i(56811),se=i(15393),re=i(71050),ae=i(17301),le=i(4669),ce=i(59365),de=i(21212),he=i(44742),ue=i(5976),ge=i(33720),pe=i(23897),fe=i(66663),me=i(36248),ve=i(95935),_e=i(97295),be=i(70666);function we(e,t={},i={}){var o;const s=new ue.SL;let r=!1;const a=s.add(new re.A),l=(0,ie.az)(t),c=function(t){let i;try{i=(0,pe.Q)(decodeURIComponent(t))}catch(e){}return i?(i=(0,me.rs)(i,(t=>e.uris&&e.uris[t]?be.o.revive(e.uris[t]):void 0)),encodeURIComponent(JSON.stringify(i))):t},d=function(t,i){const n=e.uris&&e.uris[t];if(!n)return t;let o=be.o.revive(n);return i?t.startsWith(fe.lg.data+":")?t:fe.Gi.asBrowserUri(o).toString(!0):be.o.parse(t).toString()===o.toString()?t:(o.query&&(o=o.with({query:c(o.query)})),o.toString())};let h;const u=new Promise((e=>h=e)),g=new ge.Th;if(g.image=(e,i,n)=>{let o=[],s=[];if(e){({href:e,dimensions:o}=(0,ce.v1)(e)),e=d(e,!0);try{const i=be.o.parse(e);t.baseUrl&&i.scheme===fe.lg.file&&(e=(0,ve.i3)(t.baseUrl,e).toString())}catch(e){}s.push(`src="${e}"`)}return n&&s.push(`alt="${n}"`),i&&s.push(`title="${i}"`),o.length&&(s=s.concat(o)),"<img "+s.join(" ")+">"},g.link=(i,n,o)=>{if(i===o&&(o=(0,ce.oR)(o)),i=d(i,!1),t.baseUrl){/^\w[\w\d+.-]*:/.test(i)||(i=(0,ve.i3)(t.baseUrl,i).toString())}return n=(0,ce.oR)(n),!(i=(0,ce.oR)(i))||i.match(/^data:|javascript:/i)||i.match(/^command:/i)&&!e.isTrusted||i.match(/^command:(\/\/\/)?_workbench\.downloadResource/i)?o:`<a href="#" data-href="${i=i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}" title="${n||i}">${o}</a>`},g.paragraph=e=>`<p>${e}</p>`,t.codeBlockRenderer&&(g.code=(e,i)=>{const o=t.codeBlockRenderer(i,e),s=he.a.nextId();return(0,se.eP)(Promise.all([o,u]),a.token).then((e=>{var i;if(!r&&e){const o=l.querySelector(`div[data-code="${s}"]`);o&&n.mc(o,e[0]),null===(i=t.asyncRenderCallback)||void 0===i||i.call(t)}})).catch((()=>{})),`<div class="code" data-code="${s}">${(0,_e.YU)(e)}</div>`}),t.actionHandler){const e=t.actionHandler.disposables.add(new te.Y(l,"click")),i=t.actionHandler.disposables.add(new te.Y(l,"auxclick"));t.actionHandler.disposables.add(le.ju.any(e.event,i.event)((e=>{const i=new ne.n(e);if(!i.leftButton&&!i.middleButton)return;let n=i.target;if("A"===n.tagName||(n=n.parentElement,n&&"A"===n.tagName))try{const e=n.dataset.href;e&&t.actionHandler.callback(e,i)}catch(e){(0,ae.dL)(e)}finally{i.preventDefault()}})))}e.supportHtml||(i.sanitizer=t=>(e.isTrusted?t.match(/^(<span[^>]+>)|(<\/\s*span>)$/):void 0)?t:"",i.sanitize=!0,i.silent=!0),i.renderer=g;let p=null!==(o=e.value)&&void 0!==o?o:"";p.length>1e5&&(p=`${p.substr(0,1e5)}â€¦`),e.supportThemeIcons&&(p=(0,de.f$)(p));let f=ge.Qc(p,i);if(e.supportThemeIcons){f=(0,oe.T)(f).map((e=>"string"==typeof e?e:e.outerHTML)).join("")}if(l.innerHTML=function(e,t){const{config:i,allowedSchemes:n}=function(e){const t=[fe.lg.http,fe.lg.https,fe.lg.mailto,fe.lg.data,fe.lg.file,fe.lg.vscodeFileResource,fe.lg.vscodeRemote,fe.lg.vscodeRemoteResource];e.isTrusted&&t.push(fe.lg.command);return{config:{ALLOWED_TAGS:["ul","li","p","b","i","code","blockquote","ol","h1","h2","h3","h4","h5","h6","hr","em","pre","table","thead","tbody","tr","th","td","div","del","a","strong","br","img","span"],ALLOWED_ATTR:["href","data-href","target","title","src","alt","class","style","data-code","width","height","align"],ALLOW_UNKNOWN_PROTOCOLS:!0},allowedSchemes:t}}(e);J("uponSanitizeAttribute",((e,t)=>{if("style"!==t.attrName&&"class"!==t.attrName);else{if("SPAN"===e.tagName){if("style"===t.attrName)return void(t.keepAttr=/^(color\:#[0-9a-fA-F]+;)?(background-color\:#[0-9a-fA-F]+;)?$/.test(t.attrValue));if("class"===t.attrName)return void(t.keepAttr=/^codicon codicon-[a-z\-]+( codicon-modifier-[a-z\-]+)?$/.test(t.attrValue))}t.keepAttr=!1}}));const o=document.createElement("a");J("afterSanitizeAttributes",(e=>{for(const t of["href","src"])e.hasAttribute(t)&&(o.href=e.getAttribute(t),n.includes(o.protocol.replace(/:$/,""))||e.removeAttribute(t))}));try{return X(t,Object.assign(Object.assign({},i),{RETURN_TRUSTED_TYPE:!0}))}finally{ee("uponSanitizeAttribute"),ee("afterSanitizeAttributes")}}(e,f),h(),t.asyncRenderCallback)for(const e of l.getElementsByTagName("img")){const i=s.add(n.nm(e,"load",(()=>{i.dispose(),t.asyncRenderCallback()})))}return{element:l,dispose:()=>{r=!0,a.cancel(),s.dispose()}}}var ye,Ce=i(50988),xe=i(71531),Se=i(55713),ke=i(44101),Le=i(89052),Ne=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},De=function(e,t){return function(i,n){t(i,n,e)}},Ie=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let Ee=class e{constructor(e,t,i){this._options=e,this._modeService=t,this._openerService=i,this._onDidRenderAsync=new le.Q5,this.onDidRenderAsync=this._onDidRenderAsync.event}dispose(){this._onDidRenderAsync.dispose()}render(e,t,i){if(!e){return{element:document.createElement("span"),dispose:()=>{}}}const n=new ue.SL;return{element:n.add(we(e,Object.assign(Object.assign({},this._getRenderOptions(e,n)),t),i)).element,dispose:()=>n.dispose()}}_getRenderOptions(t,i){return{baseUrl:this._options.baseUrl,codeBlockRenderer:(t,i)=>Ie(this,void 0,void 0,(function*(){var n,o,s,r;let a;t?a=this._modeService.getModeIdForLanguageName(t):this._options.editor&&(a=null===(n=this._options.editor.getModel())||void 0===n?void 0:n.getLanguageId()),a||(a="plaintext"),this._modeService.triggerMode(a);const l=null!==(o=yield ke.RW.getPromise(a))&&void 0!==o?o:void 0,c=document.createElement("span");if(c.innerHTML=null!==(r=null===(s=e._ttpTokenizer)||void 0===s?void 0:s.createHTML(i,this._modeService.languageIdCodec,l))&&void 0!==r?r:(0,Se.C)(i,this._modeService.languageIdCodec,l),this._options.editor){const e=this._options.editor.getOption(43);Le.V.applyFontInfoSlow(c,e)}else this._options.codeBlockFontFamily&&(c.style.fontFamily=this._options.codeBlockFontFamily);return c})),asyncRenderCallback:()=>this._onDidRenderAsync.fire(),actionHandler:{callback:e=>this._openerService.open(e,{fromUserGesture:!0,allowContributedOpeners:!0,allowCommands:t.isTrusted}).catch(ae.dL),disposables:i}}}};Ee._ttpTokenizer=null===(ye=window.trustedTypes)||void 0===ye?void 0:ye.createPolicy("tokenizeToString",{createHTML:(e,t,i)=>(0,Se.C)(e,t,i)}),Ee=Ne([De(1,xe.h),De(2,Ce.v4)],Ee)},65520:(e,t,i)=>{"use strict";i.d(t,{CL:()=>o,Pi:()=>r,QI:()=>s});var n=i(96518);function o(e){return!(!e||"function"!=typeof e.getEditorType)&&e.getEditorType()===n.g.ICodeEditor}function s(e){return!(!e||"function"!=typeof e.getEditorType)&&e.getEditorType()===n.g.IDiffEditor}function r(e){return o(e)?e:s(e)?e.getModifiedEditor():null}},16830:(e,t,i)=>{"use strict";i.d(t,{AJ:()=>b,QG:()=>I,Qr:()=>N,R6:()=>C,Sq:()=>P,Uc:()=>n,_K:()=>E,_l:()=>y,f:()=>k,fK:()=>L,jY:()=>x,kz:()=>O,mY:()=>_,n_:()=>A,rn:()=>D,sb:()=>S});var n,o=i(63580),s=i(70666),r=i(11640),a=i(50187),l=i(51200),c=i(88216),d=i(84144),h=i(94565),u=i(38819),g=i(49989),p=i(89872),f=i(10829),m=i(98401),v=i(43557);class _{constructor(e){this.id=e.id,this.precondition=e.precondition,this._kbOpts=e.kbOpts,this._menuOpts=e.menuOpts,this._description=e.description}register(){if(Array.isArray(this._menuOpts)?this._menuOpts.forEach(this._registerMenuItem,this):this._menuOpts&&this._registerMenuItem(this._menuOpts),this._kbOpts){const e=Array.isArray(this._kbOpts)?this._kbOpts:[this._kbOpts];for(const t of e){let e=t.kbExpr;this.precondition&&(e=e?u.Ao.and(e,this.precondition):this.precondition);const i={id:this.id,weight:t.weight,args:t.args,when:e,primary:t.primary,secondary:t.secondary,win:t.win,linux:t.linux,mac:t.mac};g.W.registerKeybindingRule(i)}}h.P.registerCommand({id:this.id,handler:(e,t)=>this.runCommand(e,t),description:this._description})}_registerMenuItem(e){d.BH.appendMenuItem(e.menuId,{group:e.group,command:{id:this.id,title:e.title,icon:e.icon,precondition:this.precondition},when:e.when,order:e.order})}}class b extends _{constructor(){super(...arguments),this._implementations=[]}addImplementation(e,t,i){return this._implementations.push({priority:e,name:t,implementation:i}),this._implementations.sort(((e,t)=>t.priority-e.priority)),{dispose:()=>{for(let e=0;e<this._implementations.length;e++)if(this._implementations[e].implementation===i)return void this._implementations.splice(e,1)}}}runCommand(e,t){const i=e.get(v.VZ);i.trace(`Executing Command '${this.id}' which has ${this._implementations.length} bound.`);for(const n of this._implementations){const o=n.implementation(e,t);if(o){if(i.trace(`Command '${this.id}' was handled by '${n.name}'.`),"boolean"==typeof o)return;return o}}i.trace(`The Command '${this.id}' was not handled by any implementation.`)}}class w extends _{constructor(e,t){super(t),this.command=e}runCommand(e,t){return this.command.runCommand(e,t)}}class y extends _{static bindToContribution(e){return class extends y{constructor(e){super(e),this._callback=e.handler}runEditorCommand(t,i,n){e(i)&&this._callback(e(i),n)}}}runCommand(e,t){const i=e.get(r.$),n=i.getFocusedCodeEditor()||i.getActiveCodeEditor();if(n)return n.invokeWithinContext((e=>{if(e.get(u.i6).contextMatchesRules((0,m.f6)(this.precondition)))return this.runEditorCommand(e,n,t)}))}}class C extends y{constructor(e){super(C.convertOptions(e)),this.label=e.label,this.alias=e.alias}static convertOptions(e){let t;function i(t){return t.menuId||(t.menuId=d.eH.EditorContext),t.title||(t.title=e.label),t.when=u.Ao.and(e.precondition,t.when),t}return t=Array.isArray(e.menuOpts)?e.menuOpts:e.menuOpts?[e.menuOpts]:[],Array.isArray(e.contextMenuOpts)?t.push(...e.contextMenuOpts.map(i)):e.contextMenuOpts&&t.push(i(e.contextMenuOpts)),e.menuOpts=t,e}runEditorCommand(e,t,i){return this.reportTelemetry(e,t),this.run(e,t,i||{})}reportTelemetry(e,t){e.get(f.b).publicLog2("editorActionInvoked",{name:this.label,id:this.id})}}class x extends C{constructor(){super(...arguments),this._implementations=[]}addImplementation(e,t){return this._implementations.push([e,t]),this._implementations.sort(((e,t)=>t[0]-e[0])),{dispose:()=>{for(let e=0;e<this._implementations.length;e++)if(this._implementations[e][1]===t)return void this._implementations.splice(e,1)}}}run(e,t,i){for(const n of this._implementations){const o=n[1](e,t,i);if(o){if("boolean"==typeof o)return;return o}}}}function S(e,t){h.P.registerCommand(e,(function(e,...i){const[n,o]=i;(0,m.p_)(s.o.isUri(n)),(0,m.p_)(a.L.isIPosition(o));const r=e.get(l.q).getModel(n);if(r){const e=a.L.lift(o);return t(r,e,...i.slice(2))}return e.get(c.S).createModelReference(n).then((e=>new Promise(((n,s)=>{try{n(t(e.object.textEditorModel,a.L.lift(o),i.slice(2)))}catch(e){s(e)}})).finally((()=>{e.dispose()}))))}))}function k(e,t){h.P.registerCommand(e,(function(e,...i){const[n]=i;(0,m.p_)(s.o.isUri(n));const o=e.get(l.q).getModel(n);return o?t(o,...i.slice(1)):e.get(c.S).createModelReference(n).then((e=>new Promise(((n,o)=>{try{n(t(e.object.textEditorModel,i.slice(1)))}catch(e){o(e)}})).finally((()=>{e.dispose()}))))}))}function L(e){return T.INSTANCE.registerEditorCommand(e),e}function N(e){const t=new e;return T.INSTANCE.registerEditorAction(t),t}function D(e){return T.INSTANCE.registerEditorAction(e),e}function I(e){T.INSTANCE.registerEditorAction(e)}function E(e,t){T.INSTANCE.registerEditorContribution(e,t)}!function(e){e.getEditorCommand=function(e){return T.INSTANCE.getEditorCommand(e)},e.getEditorActions=function(){return T.INSTANCE.getEditorActions()},e.getEditorContributions=function(){return T.INSTANCE.getEditorContributions()},e.getSomeEditorContributions=function(e){return T.INSTANCE.getEditorContributions().filter((t=>e.indexOf(t.id)>=0))},e.getDiffEditorContributions=function(){return T.INSTANCE.getDiffEditorContributions()}}(n||(n={}));class T{constructor(){this.editorContributions=[],this.diffEditorContributions=[],this.editorActions=[],this.editorCommands=Object.create(null)}registerEditorContribution(e,t){this.editorContributions.push({id:e,ctor:t})}getEditorContributions(){return this.editorContributions.slice(0)}getDiffEditorContributions(){return this.diffEditorContributions.slice(0)}registerEditorAction(e){e.register(),this.editorActions.push(e)}getEditorActions(){return this.editorActions.slice(0)}registerEditorCommand(e){e.register(),this.editorCommands[e.id]=e}getEditorCommand(e){return this.editorCommands[e]||null}}function M(e){return e.register(),e}T.INSTANCE=new T,p.B.add("editor.contributions",T.INSTANCE);const A=M(new b({id:"undo",precondition:void 0,kbOpts:{weight:0,primary:2104},menuOpts:[{menuId:d.eH.MenubarEditMenu,group:"1_do",title:o.N({key:"miUndo",comment:["&& denotes a mnemonic"]},"&&Undo"),order:1},{menuId:d.eH.CommandPalette,group:"",title:o.N("undo","Undo"),order:1}]}));M(new w(A,{id:"default:undo",precondition:void 0}));const O=M(new b({id:"redo",precondition:void 0,kbOpts:{weight:0,primary:2103,secondary:[3128],mac:{primary:3128}},menuOpts:[{menuId:d.eH.MenubarEditMenu,group:"1_do",title:o.N({key:"miRedo",comment:["&& denotes a mnemonic"]},"&&Redo"),order:2},{menuId:d.eH.CommandPalette,group:"",title:o.N("redo","Redo"),order:1}]}));M(new w(O,{id:"default:redo",precondition:void 0}));const P=M(new b({id:"editor.action.selectAll",precondition:void 0,kbOpts:{weight:0,kbExpr:null,primary:2079},menuOpts:[{menuId:d.eH.MenubarSelectionMenu,group:"1_basic",title:o.N({key:"miSelectAll",comment:["&& denotes a mnemonic"]},"&&Select All"),order:1},{menuId:d.eH.CommandPalette,group:"",title:o.N("selectAll","Select All"),order:1}]}))},66007:(e,t,i)=>{"use strict";i.d(t,{Gl:()=>l,fo:()=>a,vu:()=>r});var n=i(72065),o=i(70666),s=i(98401);const r=(0,n.yh)("IWorkspaceEditService");class a{constructor(e){this.metadata=e}static convert(e){return e.edits.map((e=>{if(t=e,(0,s.Kn)(t)&&o.o.isUri(t.resource)&&(0,s.Kn)(t.edit))return new l(e.resource,e.edit,e.modelVersionId,e.metadata);var t;if(function(e){return(0,s.Kn)(e)&&(Boolean(e.newUri)||Boolean(e.oldUri))}(e))return new c(e.oldUri,e.newUri,e.options,e.metadata);throw new Error("Unsupported edit")}))}}class l extends a{constructor(e,t,i,n){super(n),this.resource=e,this.textEdit=t,this.versionId=i}}class c extends a{constructor(e,t,i,n){super(n),this.oldResource=e,this.newResource=t,this.options=i}}},11640:(e,t,i)=>{"use strict";i.d(t,{$:()=>n});const n=(0,i(72065).yh)("codeEditorService")},32073:(e,t,i)=>{"use strict";i.d(t,{Gm:()=>ao});var n=i(26479),o=i(16830),s=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},r=function(e,t){return function(i,n){t(i,n,e)}};let a=class{constructor(e,t){}dispose(){}};a.ID="editor.contrib.markerDecorations",a=s([r(1,n.i)],a),(0,o._K)(a.ID,a);i(60081);var l=i(63580),c=i(65321),d=i(17301),h=i(4669),u=i(5976),g=i(66663),p=i(89052),f=i(11640),m=i(16268),v=i(3860),_=i(38626),b=i(1432),w=i(10553),y=i(23938),C=i(15393),x=i(57974);class S{constructor(e,t){this.x=e,this.y=t,this._pageCoordinatesBrand=void 0}toClientCoordinates(){return new k(this.x-c.DI.scrollX,this.y-c.DI.scrollY)}}class k{constructor(e,t){this.clientX=e,this.clientY=t,this._clientCoordinatesBrand=void 0}toPageCoordinates(){return new S(this.clientX+c.DI.scrollX,this.clientY+c.DI.scrollY)}}class L{constructor(e,t,i,n){this.x=e,this.y=t,this.width=i,this.height=n,this._editorPagePositionBrand=void 0}}function N(e){const t=c.i(e);return new L(t.left,t.top,t.width,t.height)}class D extends y.n{constructor(e,t){super(e),this._editorMouseEventBrand=void 0,this.pos=new S(this.posx,this.posy),this.editorPos=N(t)}}class I{constructor(e){this._editorViewDomNode=e}_create(e){return new D(e,this._editorViewDomNode)}onContextMenu(e,t){return c.nm(e,"contextmenu",(e=>{t(this._create(e))}))}onMouseUp(e,t){return c.nm(e,"mouseup",(e=>{t(this._create(e))}))}onMouseDown(e,t){return c.nm(e,"mousedown",(e=>{t(this._create(e))}))}onMouseLeave(e,t){return c.j_(e,(e=>{t(this._create(e))}))}onMouseMoveThrottled(e,t,i,n){return c.Y_(e,"mousemove",t,((e,t)=>i(e,this._create(t))),n)}}class E{constructor(e){this._editorViewDomNode=e}_create(e){return new D(e,this._editorViewDomNode)}onPointerUp(e,t){return c.nm(e,"pointerup",(e=>{t(this._create(e))}))}onPointerDown(e,t){return c.nm(e,"pointerdown",(e=>{t(this._create(e))}))}onPointerLeave(e,t){return c.RE(e,(e=>{t(this._create(e))}))}onPointerMoveThrottled(e,t,i,n){return c.Y_(e,"pointermove",t,((e,t)=>i(e,this._create(t))),n)}}class T extends u.JT{constructor(e){super(),this._editorViewDomNode=e,this._globalMouseMoveMonitor=this._register(new x.Z),this._keydownListener=null}startMonitoring(e,t,i,n,o){this._keydownListener=c.mu(document,"keydown",(e=>{e.toKeybinding().isModifierKey()||this._globalMouseMoveMonitor.stopMonitoring(!0,e.browserEvent)}),!0);this._globalMouseMoveMonitor.startMonitoring(e,t,((e,t)=>i(e,new D(t,this._editorViewDomNode))),n,(e=>{this._keydownListener.dispose(),o(e)}))}stopMonitoring(){this._globalMouseMoveMonitor.stopMonitoring(!0)}}class M extends u.JT{constructor(){super(),this._shouldRender=!0}shouldRender(){return this._shouldRender}forceShouldRender(){this._shouldRender=!0}setShouldRender(){this._shouldRender=!0}onDidRender(){this._shouldRender=!1}onCompositionStart(e){return!1}onCompositionEnd(e){return!1}onConfigurationChanged(e){return!1}onCursorStateChanged(e){return!1}onDecorationsChanged(e){return!1}onFlushed(e){return!1}onFocusChanged(e){return!1}onLanguageConfigurationChanged(e){return!1}onLineMappingChanged(e){return!1}onLinesChanged(e){return!1}onLinesDeleted(e){return!1}onLinesInserted(e){return!1}onRevealRangeRequest(e){return!1}onScrollChanged(e){return!1}onThemeChanged(e){return!1}onTokensChanged(e){return!1}onTokensColorsChanged(e){return!1}onZonesChanged(e){return!1}handleEvents(e){let t=!1;for(let i=0,n=e.length;i<n;i++){let n=e[i];switch(n.type){case 0:this.onCompositionStart(n)&&(t=!0);break;case 1:this.onCompositionEnd(n)&&(t=!0);break;case 2:this.onConfigurationChanged(n)&&(t=!0);break;case 3:this.onCursorStateChanged(n)&&(t=!0);break;case 4:this.onDecorationsChanged(n)&&(t=!0);break;case 5:this.onFlushed(n)&&(t=!0);break;case 6:this.onFocusChanged(n)&&(t=!0);break;case 7:this.onLanguageConfigurationChanged(n)&&(t=!0);break;case 8:this.onLineMappingChanged(n)&&(t=!0);break;case 9:this.onLinesChanged(n)&&(t=!0);break;case 10:this.onLinesDeleted(n)&&(t=!0);break;case 11:this.onLinesInserted(n)&&(t=!0);break;case 12:this.onRevealRangeRequest(n)&&(t=!0);break;case 13:this.onScrollChanged(n)&&(t=!0);break;case 15:this.onTokensChanged(n)&&(t=!0);break;case 14:this.onThemeChanged(n)&&(t=!0);break;case 16:this.onTokensColorsChanged(n)&&(t=!0);break;case 17:this.onZonesChanged(n)&&(t=!0);break;default:console.info("View received unknown event: "),console.info(n)}}t&&(this._shouldRender=!0)}}class A extends M{constructor(e){super(),this._context=e,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}}class O{static write(e,t){_.Z,e.setAttribute("data-mprt",String(t))}static read(e){const t=e.getAttribute("data-mprt");return null===t?0:parseInt(t,10)}static collect(e,t){let i=[],n=0;for(;e&&e!==document.body&&e!==t;)e.nodeType===e.ELEMENT_NODE&&(i[n++]=this.read(e)),e=e.parentElement;const o=new Uint8Array(n);for(let e=0;e<n;e++)o[e]=i[n-e-1];return o}}class P{constructor(e,t){this._restrictedRenderingContextBrand=void 0,this._viewLayout=e,this.viewportData=t,this.scrollWidth=this._viewLayout.getScrollWidth(),this.scrollHeight=this._viewLayout.getScrollHeight(),this.visibleRange=this.viewportData.visibleRange,this.bigNumbersDelta=this.viewportData.bigNumbersDelta;const i=this._viewLayout.getCurrentViewport();this.scrollTop=i.top,this.scrollLeft=i.left,this.viewportWidth=i.width,this.viewportHeight=i.height}getScrolledTopFromAbsoluteTop(e){return e-this.scrollTop}getVerticalOffsetForLineNumber(e){return this._viewLayout.getVerticalOffsetForLineNumber(e)}getDecorationsInViewport(){return this.viewportData.getDecorationsInViewport()}}class R extends P{constructor(e,t,i){super(e,t),this._renderingContextBrand=void 0,this._viewLines=i}linesVisibleRangesForRange(e,t){return this._viewLines.linesVisibleRangesForRange(e,t)}visibleRangeForPosition(e){return this._viewLines.visibleRangeForPosition(e)}}class F{constructor(e,t,i){this.outsideRenderedLine=e,this.lineNumber=t,this.ranges=i}}class B{constructor(e,t){this._horizontalRangeBrand=void 0,this.left=Math.round(e),this.width=Math.round(t)}static from(e){const t=new Array(e.length);for(let i=0,n=e.length;i<n;i++){const n=e[i];t[i]=new B(n.left,n.width)}return t}toString(){return`[${this.left},${this.width}]`}}class V{constructor(e,t){this._floatHorizontalRangeBrand=void 0,this.left=e,this.width=t}toString(){return`[${this.left},${this.width}]`}static compare(e,t){return e.left-t.left}}class W{constructor(e,t){this.outsideRenderedLine=e,this.originalLeft=t,this.left=Math.round(this.originalLeft)}}class H{constructor(e,t){this.outsideRenderedLine=e,this.ranges=t}}class z{static _createRange(){return this._handyReadyRange||(this._handyReadyRange=document.createRange()),this._handyReadyRange}static _detachRange(e,t){e.selectNodeContents(t)}static _readClientRects(e,t,i,n,o){const s=this._createRange();try{return s.setStart(e,t),s.setEnd(i,n),s.getClientRects()}catch(e){return null}finally{this._detachRange(s,o)}}static _mergeAdjacentRanges(e){if(1===e.length)return e;e.sort(V.compare);let t=[],i=0,n=e[0];for(let o=1,s=e.length;o<s;o++){const s=e[o];n.left+n.width+.9>=s.left?n.width=Math.max(n.width,s.left+s.width-n.left):(t[i++]=n,n=s)}return t[i++]=n,t}static _createHorizontalRangesFromClientRects(e,t){if(!e||0===e.length)return null;const i=[];for(let n=0,o=e.length;n<o;n++){const o=e[n];i[n]=new V(Math.max(0,o.left-t),o.width)}return this._mergeAdjacentRanges(i)}static readHorizontalRanges(e,t,i,n,o,s,r){const a=e.children.length-1;if(0>a)return null;if((t=Math.min(a,Math.max(0,t)))===(n=Math.min(a,Math.max(0,n)))&&i===o&&0===i&&!e.children[t].firstChild){const i=e.children[t].getClientRects();return this._createHorizontalRangesFromClientRects(i,s)}t!==n&&n>0&&0===o&&(n--,o=1073741824);let l=e.children[t].firstChild,c=e.children[n].firstChild;if(l&&c||(!l&&0===i&&t>0&&(l=e.children[t-1].firstChild,i=1073741824),!c&&0===o&&n>0&&(c=e.children[n-1].firstChild,o=1073741824)),!l||!c)return null;i=Math.min(l.textContent.length,Math.max(0,i)),o=Math.min(c.textContent.length,Math.max(0,o));const d=this._readClientRects(l,i,c,o,r);return this._createHorizontalRangesFromClientRects(d,s)}}var j=i(92550),U=i(77736),$=i(92321),K=i(64141);const q=!!b.tY||!(b.IJ||m.vU||m.G6);let Z=!0;class G{constructor(e,t){this._domNode=e,this._clientRectDeltaLeft=0,this._clientRectDeltaLeftRead=!1,this.endNode=t}get clientRectDeltaLeft(){return this._clientRectDeltaLeftRead||(this._clientRectDeltaLeftRead=!0,this._clientRectDeltaLeft=this._domNode.getBoundingClientRect().left),this._clientRectDeltaLeft}}class Y{constructor(e,t){this.themeType=t;const i=e.options,n=i.get(43);this.renderWhitespace=i.get(87),this.renderControlCharacters=i.get(82),this.spaceWidth=n.spaceWidth,this.middotWidth=n.middotWidth,this.wsmiddotWidth=n.wsmiddotWidth,this.useMonospaceOptimizations=n.isMonospace&&!i.get(29),this.canUseHalfwidthRightwardsArrow=n.canUseHalfwidthRightwardsArrow,this.lineHeight=i.get(58),this.stopRenderingLineAfter=i.get(104),this.fontLigatures=i.get(44)}equals(e){return this.themeType===e.themeType&&this.renderWhitespace===e.renderWhitespace&&this.renderControlCharacters===e.renderControlCharacters&&this.spaceWidth===e.spaceWidth&&this.middotWidth===e.middotWidth&&this.wsmiddotWidth===e.wsmiddotWidth&&this.useMonospaceOptimizations===e.useMonospaceOptimizations&&this.canUseHalfwidthRightwardsArrow===e.canUseHalfwidthRightwardsArrow&&this.lineHeight===e.lineHeight&&this.stopRenderingLineAfter===e.stopRenderingLineAfter&&this.fontLigatures===e.fontLigatures}}class Q{constructor(e){this._options=e,this._isMaybeInvalid=!0,this._renderedViewLine=null}getDomNode(){return this._renderedViewLine&&this._renderedViewLine.domNode?this._renderedViewLine.domNode.domNode:null}setDomNode(e){if(!this._renderedViewLine)throw new Error("I have no rendered view line to set the dom node to...");this._renderedViewLine.domNode=(0,_.X)(e)}onContentChanged(){this._isMaybeInvalid=!0}onTokensChanged(){this._isMaybeInvalid=!0}onDecorationsChanged(){this._isMaybeInvalid=!0}onOptionsChanged(e){this._isMaybeInvalid=!0,this._options=e}onSelectionChanged(){return(this._options.themeType===$.e.HIGH_CONTRAST||"selection"===this._options.renderWhitespace)&&(this._isMaybeInvalid=!0,!0)}renderLine(e,t,i,n){if(!1===this._isMaybeInvalid)return!1;this._isMaybeInvalid=!1;const o=i.getViewLineRenderingData(e),s=this._options,r=j.Kp.filter(o.inlineDecorations,e,o.minColumn,o.maxColumn);let a=null;if(s.themeType===$.e.HIGH_CONTRAST||"selection"===this._options.renderWhitespace){const t=i.selections;for(const i of t){if(i.endLineNumber<e||i.startLineNumber>e)continue;const t=i.startLineNumber===e?i.startColumn:o.minColumn,n=i.endLineNumber===e?i.endColumn:o.maxColumn;t<n&&(s.themeType===$.e.HIGH_CONTRAST||"selection"!==this._options.renderWhitespace?r.push(new j.Kp(t,n,"inline-selected-text",0)):(a||(a=[]),a.push(new U.zG(t-1,n-1))))}}const l=new U.IJ(s.useMonospaceOptimizations,s.canUseHalfwidthRightwardsArrow,o.content,o.continuesWithWrappedLine,o.isBasicASCII,o.containsRTL,o.minColumn-1,o.tokens,r,o.tabSize,o.startVisibleColumn,s.spaceWidth,s.middotWidth,s.wsmiddotWidth,s.stopRenderingLineAfter,s.renderWhitespace,s.renderControlCharacters,s.fontLigatures!==K.n0.OFF,a);if(this._renderedViewLine&&this._renderedViewLine.input.equals(l))return!1;n.appendASCIIString('<div style="top:'),n.appendASCIIString(String(t)),n.appendASCIIString("px;height:"),n.appendASCIIString(String(this._options.lineHeight)),n.appendASCIIString('px;" class="'),n.appendASCIIString(Q.CLASS_NAME),n.appendASCIIString('">');const c=(0,U.d1)(l,n);n.appendASCIIString("</div>");let d=null;return Z&&q&&o.isBasicASCII&&s.useMonospaceOptimizations&&0===c.containsForeignElements&&o.content.length<300&&l.lineTokens.getCount()<100&&(d=new X(this._renderedViewLine?this._renderedViewLine.domNode:null,l,c.characterMapping)),d||(d=te(this._renderedViewLine?this._renderedViewLine.domNode:null,l,c.characterMapping,c.containsRTL,c.containsForeignElements)),this._renderedViewLine=d,!0}layoutLine(e,t){this._renderedViewLine&&this._renderedViewLine.domNode&&(this._renderedViewLine.domNode.setTop(t),this._renderedViewLine.domNode.setHeight(this._options.lineHeight))}getWidth(){return this._renderedViewLine?this._renderedViewLine.getWidth():0}getWidthIsFast(){return!this._renderedViewLine||this._renderedViewLine.getWidthIsFast()}needsMonospaceFontCheck(){return!!this._renderedViewLine&&this._renderedViewLine instanceof X}monospaceAssumptionsAreValid(){return this._renderedViewLine&&this._renderedViewLine instanceof X?this._renderedViewLine.monospaceAssumptionsAreValid():Z}onMonospaceAssumptionsInvalidated(){this._renderedViewLine&&this._renderedViewLine instanceof X&&(this._renderedViewLine=this._renderedViewLine.toSlowRenderedLine())}getVisibleRangesForRange(e,t,i,n){if(!this._renderedViewLine)return null;t|=0,i|=0,t=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,t)),i=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,i));const o=0|this._renderedViewLine.input.stopRenderingLineAfter;let s=!1;-1!==o&&t>o+1&&i>o+1&&(s=!0),-1!==o&&t>o+1&&(t=o+1),-1!==o&&i>o+1&&(i=o+1);const r=this._renderedViewLine.getVisibleRangesForRange(e,t,i,n);return r&&r.length>0?new H(s,r):null}getColumnOfNodeOffset(e,t,i){return this._renderedViewLine?this._renderedViewLine.getColumnOfNodeOffset(e,t,i):1}}Q.CLASS_NAME="view-line";class X{constructor(e,t,i){this.domNode=e,this.input=t,this._characterMapping=i,this._charWidth=t.spaceWidth}getWidth(){return Math.round(this._getCharPosition(this._characterMapping.length))}getWidthIsFast(){return!0}monospaceAssumptionsAreValid(){if(!this.domNode)return Z;const e=this.getWidth(),t=this.domNode.domNode.firstChild.offsetWidth;return Math.abs(e-t)>=2&&(console.warn("monospace assumptions have been violated, therefore disabling monospace optimizations!"),Z=!1),Z}toSlowRenderedLine(){return te(this.domNode,this.input,this._characterMapping,!1,0)}getVisibleRangesForRange(e,t,i,n){const o=this._getCharPosition(t),s=this._getCharPosition(i);return[new V(o,s-o)]}_getCharPosition(e){const t=this._characterMapping.getAbsoluteOffset(e);return this._charWidth*t}getColumnOfNodeOffset(e,t,i){const n=t.textContent.length;let o=-1;for(;t;)t=t.previousSibling,o++;return this._characterMapping.getColumn(new U.Nd(o,i),n)}}class J{constructor(e,t,i,n,o){if(this.domNode=e,this.input=t,this._characterMapping=i,this._isWhitespaceOnly=/^\s*$/.test(t.lineContent),this._containsForeignElements=o,this._cachedWidth=-1,this._pixelOffsetCache=null,!n||0===this._characterMapping.length){this._pixelOffsetCache=new Float32Array(Math.max(2,this._characterMapping.length+1));for(let e=0,t=this._characterMapping.length;e<=t;e++)this._pixelOffsetCache[e]=-1}}_getReadingTarget(e){return e.domNode.firstChild}getWidth(){return this.domNode?(-1===this._cachedWidth&&(this._cachedWidth=this._getReadingTarget(this.domNode).offsetWidth),this._cachedWidth):0}getWidthIsFast(){return-1!==this._cachedWidth}getVisibleRangesForRange(e,t,i,n){if(!this.domNode)return null;if(null!==this._pixelOffsetCache){const o=this._readPixelOffset(this.domNode,e,t,n);if(-1===o)return null;const s=this._readPixelOffset(this.domNode,e,i,n);return-1===s?null:[new V(o,s-o)]}return this._readVisibleRangesForRange(this.domNode,e,t,i,n)}_readVisibleRangesForRange(e,t,i,n,o){if(i===n){const n=this._readPixelOffset(e,t,i,o);return-1===n?null:[new V(n,0)]}return this._readRawVisibleRangesForRange(e,i,n,o)}_readPixelOffset(e,t,i,n){if(0===this._characterMapping.length){if(0===this._containsForeignElements)return 0;if(2===this._containsForeignElements)return 0;if(1===this._containsForeignElements)return this.getWidth();const t=this._getReadingTarget(e);return t.firstChild?t.firstChild.offsetWidth:0}if(null!==this._pixelOffsetCache){const o=this._pixelOffsetCache[i];if(-1!==o)return o;const s=this._actualReadPixelOffset(e,t,i,n);return this._pixelOffsetCache[i]=s,s}return this._actualReadPixelOffset(e,t,i,n)}_actualReadPixelOffset(e,t,i,n){if(0===this._characterMapping.length){const t=z.readHorizontalRanges(this._getReadingTarget(e),0,0,0,0,n.clientRectDeltaLeft,n.endNode);return t&&0!==t.length?t[0].left:-1}if(i===this._characterMapping.length&&this._isWhitespaceOnly&&0===this._containsForeignElements)return this.getWidth();const o=this._characterMapping.getDomPosition(i),s=z.readHorizontalRanges(this._getReadingTarget(e),o.partIndex,o.charIndex,o.partIndex,o.charIndex,n.clientRectDeltaLeft,n.endNode);if(!s||0===s.length)return-1;const r=s[0].left;if(this.input.isBasicASCII){const e=this._characterMapping.getAbsoluteOffset(i),t=Math.round(this.input.spaceWidth*e);if(Math.abs(t-r)<=1)return t}return r}_readRawVisibleRangesForRange(e,t,i,n){if(1===t&&i===this._characterMapping.length)return[new V(0,this.getWidth())];const o=this._characterMapping.getDomPosition(t),s=this._characterMapping.getDomPosition(i);return z.readHorizontalRanges(this._getReadingTarget(e),o.partIndex,o.charIndex,s.partIndex,s.charIndex,n.clientRectDeltaLeft,n.endNode)}getColumnOfNodeOffset(e,t,i){const n=t.textContent.length;let o=-1;for(;t;)t=t.previousSibling,o++;return this._characterMapping.getColumn(new U.Nd(o,i),n)}}class ee extends J{_readVisibleRangesForRange(e,t,i,n,o){const s=super._readVisibleRangesForRange(e,t,i,n,o);if(!s||0===s.length||i===n||1===i&&n===this._characterMapping.length)return s;if(!this.input.containsRTL){const i=this._readPixelOffset(e,t,n,o);if(-1!==i){const e=s[s.length-1];e.left<i&&(e.width=i-e.left)}}return s}}const te=m.Pf?ie:ne;function ie(e,t,i,n,o){return new ee(e,t,i,n,o)}function ne(e,t,i,n,o){return new J(e,t,i,n,o)}var oe,se=i(50187),re=i(24314),ae=i(33181),le=i(3675);class ce{constructor(e=null){this.hitTarget=e,this.type=0}}class de{constructor(e,t,i){this.position=e,this.spanNode=t,this.injectedText=i,this.type=1}}!function(e){e.createFromDOMInfo=function(e,t,i){const n=e.getPositionFromDOMInfo(t,i);return n?new de(n,t,null):new ce(t)}}(oe||(oe={}));class he{constructor(e,t){this.lastViewCursorsRenderData=e,this.lastTextareaPosition=t}}class ue{constructor(e,t,i=0,n=null,o=null,s=null){this.element=e,this.type=t,this.mouseColumn=i,this.position=n,!o&&n&&(o=new re.e(n.lineNumber,n.column,n.lineNumber,n.column)),this.range=o,this.detail=s}static _typeToString(e){return 1===e?"TEXTAREA":2===e?"GUTTER_GLYPH_MARGIN":3===e?"GUTTER_LINE_NUMBERS":4===e?"GUTTER_LINE_DECORATIONS":5===e?"GUTTER_VIEW_ZONE":6===e?"CONTENT_TEXT":7===e?"CONTENT_EMPTY":8===e?"CONTENT_VIEW_ZONE":9===e?"CONTENT_WIDGET":10===e?"OVERVIEW_RULER":11===e?"SCROLLBAR":12===e?"OVERLAY_WIDGET":"UNKNOWN"}static toString(e){return this._typeToString(e.type)+": "+e.position+" - "+e.range+" - "+e.detail}toString(){return ue.toString(this)}}class ge{static isTextArea(e){return 2===e.length&&3===e[0]&&6===e[1]}static isChildOfViewLines(e){return e.length>=4&&3===e[0]&&7===e[3]}static isStrictChildOfViewLines(e){return e.length>4&&3===e[0]&&7===e[3]}static isChildOfScrollableElement(e){return e.length>=2&&3===e[0]&&5===e[1]}static isChildOfMinimap(e){return e.length>=2&&3===e[0]&&8===e[1]}static isChildOfContentWidgets(e){return e.length>=4&&3===e[0]&&1===e[3]}static isChildOfOverflowingContentWidgets(e){return e.length>=1&&2===e[0]}static isChildOfOverlayWidgets(e){return e.length>=2&&3===e[0]&&4===e[1]}}class pe{constructor(e,t,i){this.model=e.model;const n=e.configuration.options;this.layoutInfo=n.get(129),this.viewDomNode=t.viewDomNode,this.lineHeight=n.get(58),this.stickyTabStops=n.get(103),this.typicalHalfwidthCharacterWidth=n.get(43).typicalHalfwidthCharacterWidth,this.lastRenderData=i,this._context=e,this._viewHelper=t}getZoneAtCoord(e){return pe.getZoneAtCoord(this._context,e)}static getZoneAtCoord(e,t){const i=e.viewLayout.getWhitespaceAtVerticalOffset(t);if(i){const n=i.verticalOffset+i.height/2,o=e.model.getLineCount();let s,r=null,a=null;return i.afterLineNumber!==o&&(a=new se.L(i.afterLineNumber+1,1)),i.afterLineNumber>0&&(r=new se.L(i.afterLineNumber,e.model.getLineMaxColumn(i.afterLineNumber))),s=null===a?r:null===r?a:t<n?r:a,{viewZoneId:i.id,afterLineNumber:i.afterLineNumber,positionBefore:r,positionAfter:a,position:s}}return null}getFullLineRangeAtCoord(e){if(this._context.viewLayout.isAfterLines(e)){const e=this._context.model.getLineCount(),t=this._context.model.getLineMaxColumn(e);return{range:new re.e(e,t,e,t),isAfterLines:!0}}const t=this._context.viewLayout.getLineNumberAtVerticalOffset(e),i=this._context.model.getLineMaxColumn(t);return{range:new re.e(t,1,t,i),isAfterLines:!1}}getLineNumberAtVerticalOffset(e){return this._context.viewLayout.getLineNumberAtVerticalOffset(e)}isAfterLines(e){return this._context.viewLayout.isAfterLines(e)}isInTopPadding(e){return this._context.viewLayout.isInTopPadding(e)}isInBottomPadding(e){return this._context.viewLayout.isInBottomPadding(e)}getVerticalOffsetForLineNumber(e){return this._context.viewLayout.getVerticalOffsetForLineNumber(e)}findAttribute(e,t){return pe._findAttribute(e,t,this._viewHelper.viewDomNode)}static _findAttribute(e,t,i){for(;e&&e!==document.body;){if(e.hasAttribute&&e.hasAttribute(t))return e.getAttribute(t);if(e===i)return null;e=e.parentNode}return null}getLineWidth(e){return this._viewHelper.getLineWidth(e)}visibleRangeForPosition(e,t){return this._viewHelper.visibleRangeForPosition(e,t)}getPositionFromDOMInfo(e,t){return this._viewHelper.getPositionFromDOMInfo(e,t)}getCurrentScrollTop(){return this._context.viewLayout.getCurrentScrollTop()}getCurrentScrollLeft(){return this._context.viewLayout.getCurrentScrollLeft()}}class fe{constructor(e,t,i){this.editorPos=t,this.pos=i,this.mouseVerticalOffset=Math.max(0,e.getCurrentScrollTop()+i.y-t.y),this.mouseContentHorizontalOffset=e.getCurrentScrollLeft()+i.x-t.x-e.layoutInfo.contentLeft,this.isInMarginArea=i.x-t.x<e.layoutInfo.contentLeft&&i.x-t.x>=e.layoutInfo.glyphMarginLeft,this.isInContentArea=!this.isInMarginArea,this.mouseColumn=Math.max(0,be._getMouseColumn(this.mouseContentHorizontalOffset,e.typicalHalfwidthCharacterWidth))}}class me extends fe{constructor(e,t,i,n){super(e,t,i),this._ctx=e,n?(this.target=n,this.targetPath=O.collect(n,e.viewDomNode)):(this.target=null,this.targetPath=new Uint8Array(0))}toString(){return`pos(${this.pos.x},${this.pos.y}), editorPos(${this.editorPos.x},${this.editorPos.y}), mouseVerticalOffset: ${this.mouseVerticalOffset}, mouseContentHorizontalOffset: ${this.mouseContentHorizontalOffset}\n\ttarget: ${this.target?this.target.outerHTML:null}`}fulfill(e,t=null,i=null,n=null){let o=this.mouseColumn;return t&&t.column<this._ctx.model.getLineMaxColumn(t.lineNumber)&&(o=ae.io.visibleColumnFromColumn(this._ctx.model.getLineContent(t.lineNumber),t.column,this._ctx.model.getTextModelOptions().tabSize)+1),new ue(this.target,e,o,t,i,n)}withTarget(e){return new me(this._ctx,this.editorPos,this.pos,e)}}const ve={isAfterLines:!0};function _e(e){return{isAfterLines:!1,horizontalDistanceToText:e}}class be{constructor(e,t){this._context=e,this._viewHelper=t}mouseTargetIsWidget(e){const t=e.target,i=O.collect(t,this._viewHelper.viewDomNode);return!(!ge.isChildOfContentWidgets(i)&&!ge.isChildOfOverflowingContentWidgets(i))||!!ge.isChildOfOverlayWidgets(i)}createMouseTarget(e,t,i,n){const o=new pe(this._context,this._viewHelper,e),s=new me(o,t,i,n);try{return be._createMouseTarget(o,s,!1)}catch(e){return s.fulfill(0)}}static _createMouseTarget(e,t,i){if(null===t.target){if(i)return t.fulfill(0);const n=be._doHitTest(e,t);return 1===n.type?be.createMouseTargetFromHitTestPosition(e,t,n.spanNode,n.position,n.injectedText):this._createMouseTarget(e,t.withTarget(n.hitTarget),!0)}const n=t;let o=null;return o=o||be._hitTestContentWidget(e,n),o=o||be._hitTestOverlayWidget(e,n),o=o||be._hitTestMinimap(e,n),o=o||be._hitTestScrollbarSlider(e,n),o=o||be._hitTestViewZone(e,n),o=o||be._hitTestMargin(e,n),o=o||be._hitTestViewCursor(e,n),o=o||be._hitTestTextArea(e,n),o=o||be._hitTestViewLines(e,n,i),o=o||be._hitTestScrollbar(e,n),o||t.fulfill(0)}static _hitTestContentWidget(e,t){if(ge.isChildOfContentWidgets(t.targetPath)||ge.isChildOfOverflowingContentWidgets(t.targetPath)){const i=e.findAttribute(t.target,"widgetId");return i?t.fulfill(9,null,null,i):t.fulfill(0)}return null}static _hitTestOverlayWidget(e,t){if(ge.isChildOfOverlayWidgets(t.targetPath)){const i=e.findAttribute(t.target,"widgetId");return i?t.fulfill(12,null,null,i):t.fulfill(0)}return null}static _hitTestViewCursor(e,t){if(t.target){const i=e.lastRenderData.lastViewCursorsRenderData;for(const e of i)if(t.target===e.domNode)return t.fulfill(6,e.position,null,{mightBeForeignElement:!1})}if(t.isInContentArea){const i=e.lastRenderData.lastViewCursorsRenderData,n=t.mouseContentHorizontalOffset,o=t.mouseVerticalOffset;for(const s of i){if(n<s.contentLeft)continue;if(n>s.contentLeft+s.width)continue;const i=e.getVerticalOffsetForLineNumber(s.position.lineNumber);if(i<=o&&o<=i+s.height)return t.fulfill(6,s.position,null,{mightBeForeignElement:!1})}}return null}static _hitTestViewZone(e,t){const i=e.getZoneAtCoord(t.mouseVerticalOffset);if(i){const e=t.isInContentArea?8:5;return t.fulfill(e,i.position,null,i)}return null}static _hitTestTextArea(e,t){return ge.isTextArea(t.targetPath)?e.lastRenderData.lastTextareaPosition?t.fulfill(6,e.lastRenderData.lastTextareaPosition,null,{mightBeForeignElement:!1}):t.fulfill(1,e.lastRenderData.lastTextareaPosition):null}static _hitTestMargin(e,t){if(t.isInMarginArea){const i=e.getFullLineRangeAtCoord(t.mouseVerticalOffset),n=i.range.getStartPosition();let o=Math.abs(t.pos.x-t.editorPos.x);const s={isAfterLines:i.isAfterLines,glyphMarginLeft:e.layoutInfo.glyphMarginLeft,glyphMarginWidth:e.layoutInfo.glyphMarginWidth,lineNumbersWidth:e.layoutInfo.lineNumbersWidth,offsetX:o};return o-=e.layoutInfo.glyphMarginLeft,o<=e.layoutInfo.glyphMarginWidth?t.fulfill(2,n,i.range,s):(o-=e.layoutInfo.glyphMarginWidth,o<=e.layoutInfo.lineNumbersWidth?t.fulfill(3,n,i.range,s):(o-=e.layoutInfo.lineNumbersWidth,t.fulfill(4,n,i.range,s)))}return null}static _hitTestViewLines(e,t,i){if(!ge.isChildOfViewLines(t.targetPath))return null;if(e.isInTopPadding(t.mouseVerticalOffset))return t.fulfill(7,new se.L(1,1),null,ve);if(e.isAfterLines(t.mouseVerticalOffset)||e.isInBottomPadding(t.mouseVerticalOffset)){const i=e.model.getLineCount(),n=e.model.getLineMaxColumn(i);return t.fulfill(7,new se.L(i,n),null,ve)}if(i){if(ge.isStrictChildOfViewLines(t.targetPath)){const i=e.getLineNumberAtVerticalOffset(t.mouseVerticalOffset);if(0===e.model.getLineLength(i)){const n=e.getLineWidth(i),o=_e(t.mouseContentHorizontalOffset-n);return t.fulfill(7,new se.L(i,1),null,o)}const n=e.getLineWidth(i);if(t.mouseContentHorizontalOffset>=n){const o=_e(t.mouseContentHorizontalOffset-n),s=new se.L(i,e.model.getLineMaxColumn(i));return t.fulfill(7,s,null,o)}}return t.fulfill(0)}const n=be._doHitTest(e,t);return 1===n.type?be.createMouseTargetFromHitTestPosition(e,t,n.spanNode,n.position,n.injectedText):this._createMouseTarget(e,t.withTarget(n.hitTarget),!0)}static _hitTestMinimap(e,t){if(ge.isChildOfMinimap(t.targetPath)){const i=e.getLineNumberAtVerticalOffset(t.mouseVerticalOffset),n=e.model.getLineMaxColumn(i);return t.fulfill(11,new se.L(i,n))}return null}static _hitTestScrollbarSlider(e,t){if(ge.isChildOfScrollableElement(t.targetPath)&&t.target&&1===t.target.nodeType){const i=t.target.className;if(i&&/\b(slider|scrollbar)\b/.test(i)){const i=e.getLineNumberAtVerticalOffset(t.mouseVerticalOffset),n=e.model.getLineMaxColumn(i);return t.fulfill(11,new se.L(i,n))}}return null}static _hitTestScrollbar(e,t){if(ge.isChildOfScrollableElement(t.targetPath)){const i=e.getLineNumberAtVerticalOffset(t.mouseVerticalOffset),n=e.model.getLineMaxColumn(i);return t.fulfill(11,new se.L(i,n))}return null}getMouseColumn(e,t){const i=this._context.configuration.options,n=i.get(129),o=this._context.viewLayout.getCurrentScrollLeft()+t.x-e.x-n.contentLeft;return be._getMouseColumn(o,i.get(43).typicalHalfwidthCharacterWidth)}static _getMouseColumn(e,t){if(e<0)return 1;return Math.round(e/t)+1}static createMouseTargetFromHitTestPosition(e,t,i,n,o){const s=n.lineNumber,r=n.column,a=e.getLineWidth(s);if(t.mouseContentHorizontalOffset>a){const e=_e(t.mouseContentHorizontalOffset-a);return t.fulfill(7,n,null,e)}const l=e.visibleRangeForPosition(s,r);if(!l)return t.fulfill(0,n);const c=l.left;if(t.mouseContentHorizontalOffset===c)return t.fulfill(6,n,null,{mightBeForeignElement:!!o});const d=[];if(d.push({offset:l.left,column:r}),r>1){const t=e.visibleRangeForPosition(s,r-1);t&&d.push({offset:t.left,column:r-1})}if(r<e.model.getLineMaxColumn(s)){const t=e.visibleRangeForPosition(s,r+1);t&&d.push({offset:t.left,column:r+1})}d.sort(((e,t)=>e.offset-t.offset));const h=t.pos.toClientCoordinates(),u=i.getBoundingClientRect(),g=u.left<=h.clientX&&h.clientX<=u.right;for(let e=1;e<d.length;e++){const i=d[e-1],r=d[e];if(i.offset<=t.mouseContentHorizontalOffset&&t.mouseContentHorizontalOffset<=r.offset){const e=new re.e(s,i.column,s,r.column);return t.fulfill(6,n,e,{mightBeForeignElement:!g||!!o})}}return t.fulfill(6,n,null,{mightBeForeignElement:!g||!!o})}static _doHitTestWithCaretRangeFromPoint(e,t){const i=e.getLineNumberAtVerticalOffset(t.mouseVerticalOffset),n=e.getVerticalOffsetForLineNumber(i)+Math.floor(e.lineHeight/2);let o=t.pos.y+(n-t.mouseVerticalOffset);o<=t.editorPos.y&&(o=t.editorPos.y+1),o>=t.editorPos.y+e.layoutInfo.height&&(o=t.editorPos.y+e.layoutInfo.height-1);const s=new S(t.pos.x,o),r=this._actualDoHitTestWithCaretRangeFromPoint(e,s.toClientCoordinates());return 1===r.type?r:this._actualDoHitTestWithCaretRangeFromPoint(e,t.pos.toClientCoordinates())}static _actualDoHitTestWithCaretRangeFromPoint(e,t){const i=c.Ay(e.viewDomNode);let n;if(n=i?void 0===i.caretRangeFromPoint?function(e,t,i){const n=document.createRange();let o=e.elementFromPoint(t,i);if(null!==o){for(;o&&o.firstChild&&o.firstChild.nodeType!==o.firstChild.TEXT_NODE&&o.lastChild&&o.lastChild.firstChild;)o=o.lastChild;const e=o.getBoundingClientRect(),i=window.getComputedStyle(o,null).getPropertyValue("font"),s=o.innerText;let r,a=e.left,l=0;if(t>e.left+e.width)l=s.length;else{const e=we.getInstance();for(let n=0;n<s.length+1;n++){if(r=e.getCharWidth(s.charAt(n),i)/2,a+=r,t<a){l=n;break}a+=r}}n.setStart(o.firstChild,l),n.setEnd(o.firstChild,l)}return n}(i,t.clientX,t.clientY):i.caretRangeFromPoint(t.clientX,t.clientY):document.caretRangeFromPoint(t.clientX,t.clientY),!n||!n.startContainer)return new ce;const o=n.startContainer;if(o.nodeType===o.TEXT_NODE){const t=o.parentNode,i=t?t.parentNode:null,s=i?i.parentNode:null;return(s&&s.nodeType===s.ELEMENT_NODE?s.className:null)===Q.CLASS_NAME?oe.createFromDOMInfo(e,t,n.startOffset):new ce(o.parentNode)}if(o.nodeType===o.ELEMENT_NODE){const t=o.parentNode,i=t?t.parentNode:null;return(i&&i.nodeType===i.ELEMENT_NODE?i.className:null)===Q.CLASS_NAME?oe.createFromDOMInfo(e,o,o.textContent.length):new ce(o)}return new ce}static _doHitTestWithCaretPositionFromPoint(e,t){const i=document.caretPositionFromPoint(t.clientX,t.clientY);if(i.offsetNode.nodeType===i.offsetNode.TEXT_NODE){const t=i.offsetNode.parentNode,n=t?t.parentNode:null,o=n?n.parentNode:null;return(o&&o.nodeType===o.ELEMENT_NODE?o.className:null)===Q.CLASS_NAME?oe.createFromDOMInfo(e,i.offsetNode.parentNode,i.offset):new ce(i.offsetNode.parentNode)}if(i.offsetNode.nodeType===i.offsetNode.ELEMENT_NODE){const t=i.offsetNode.parentNode,n=t&&t.nodeType===t.ELEMENT_NODE?t.className:null,o=t?t.parentNode:null,s=o&&o.nodeType===o.ELEMENT_NODE?o.className:null;if(n===Q.CLASS_NAME){const t=i.offsetNode.childNodes[Math.min(i.offset,i.offsetNode.childNodes.length-1)];if(t)return oe.createFromDOMInfo(e,t,0)}else if(s===Q.CLASS_NAME)return oe.createFromDOMInfo(e,i.offsetNode,0)}return new ce(i.offsetNode)}static _snapToSoftTabBoundary(e,t){const i=t.getLineContent(e.lineNumber),{tabSize:n}=t.getTextModelOptions(),o=le.l.atomicPosition(i,e.column-1,n,2);return-1!==o?new se.L(e.lineNumber,o+1):e}static _doHitTest(e,t){let i=new ce;if("function"==typeof document.caretRangeFromPoint?i=this._doHitTestWithCaretRangeFromPoint(e,t):document.caretPositionFromPoint&&(i=this._doHitTestWithCaretPositionFromPoint(e,t.pos.toClientCoordinates())),1===i.type){const t=e.model.getInjectedTextAt(i.position),n=e.model.normalizePosition(i.position,2);!t&&n.equals(i.position)||(i=new de(n,i.spanNode,t))}return 1===i.type&&e.stickyTabStops&&(i=new de(this._snapToSoftTabBoundary(i.position,e.model),i.spanNode,i.injectedText)),i}}class we{constructor(){this._cache={},this._canvas=document.createElement("canvas")}static getInstance(){return we._INSTANCE||(we._INSTANCE=new we),we._INSTANCE}getCharWidth(e,t){const i=e+t;if(this._cache[i])return this._cache[i];const n=this._canvas.getContext("2d");n.font=t;const o=n.measureText(e).width;return this._cache[i]=o,o}}we._INSTANCE=null;var ye=i(82334);function Ce(e){return function(t,i){let n=!1;return e&&(n=e.mouseTargetIsWidget(i)),n||i.preventDefault(),i}}class xe extends M{constructor(e,t,i){super(),this._context=e,this.viewController=t,this.viewHelper=i,this.mouseTargetFactory=new be(this._context,i),this._mouseDownOperation=this._register(new Se(this._context,this.viewController,this.viewHelper,((e,t)=>this._createMouseTarget(e,t)),(e=>this._getMouseColumn(e)))),this.lastMouseLeaveTime=-1,this._height=this._context.configuration.options.get(129).height;const n=new I(this.viewHelper.viewDomNode);this._register(n.onContextMenu(this.viewHelper.viewDomNode,(e=>this._onContextMenu(e,!0)))),this._register(n.onMouseMoveThrottled(this.viewHelper.viewDomNode,(e=>this._onMouseMove(e)),Ce(this.mouseTargetFactory),xe.MOUSE_MOVE_MINIMUM_TIME)),this._register(n.onMouseUp(this.viewHelper.viewDomNode,(e=>this._onMouseUp(e)))),this._register(n.onMouseLeave(this.viewHelper.viewDomNode,(e=>this._onMouseLeave(e)))),this._register(n.onMouseDown(this.viewHelper.viewDomNode,(e=>this._onMouseDown(e))));this._register(c.nm(this.viewHelper.viewDomNode,c.tw.MOUSE_WHEEL,(e=>{if(this.viewController.emitMouseWheel(e),!this._context.configuration.options.get(67))return;const t=new y.q(e);if(b.dz?(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey:e.ctrlKey&&!e.metaKey&&!e.shiftKey&&!e.altKey){const e=ye.C.getZoomLevel(),i=t.deltaY>0?1:-1;ye.C.setZoomLevel(e+i),t.preventDefault(),t.stopPropagation()}}),{capture:!0,passive:!1})),this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}onConfigurationChanged(e){if(e.hasChanged(129)){const e=this._context.configuration.options.get(129).height;this._height!==e&&(this._height=e,this._mouseDownOperation.onHeightChanged())}return!1}onCursorStateChanged(e){return this._mouseDownOperation.onCursorStateChanged(e),!1}onFocusChanged(e){return!1}onScrollChanged(e){return this._mouseDownOperation.onScrollChanged(),!1}getTargetAtClientPoint(e,t){const i=new k(e,t).toPageCoordinates(),n=N(this.viewHelper.viewDomNode);return i.y<n.y||i.y>n.y+n.height||i.x<n.x||i.x>n.x+n.width?null:this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),n,i,null)}_createMouseTarget(e,t){let i=e.target;if(!this.viewHelper.viewDomNode.contains(i)){const t=c.Ay(this.viewHelper.viewDomNode);t&&(i=t.elementsFromPoint(e.posx,e.posy).find((e=>this.viewHelper.viewDomNode.contains(e))))}return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),e.editorPos,e.pos,t?i:null)}_getMouseColumn(e){return this.mouseTargetFactory.getMouseColumn(e.editorPos,e.pos)}_onContextMenu(e,t){this.viewController.emitContextMenu({event:e,target:this._createMouseTarget(e,t)})}_onMouseMove(e){if(this._mouseDownOperation.isActive())return;e.timestamp<this.lastMouseLeaveTime||this.viewController.emitMouseMove({event:e,target:this._createMouseTarget(e,!0)})}_onMouseLeave(e){this.lastMouseLeaveTime=(new Date).getTime(),this.viewController.emitMouseLeave({event:e,target:null})}_onMouseUp(e){this.viewController.emitMouseUp({event:e,target:this._createMouseTarget(e,!0)})}_onMouseDown(e){const t=this._createMouseTarget(e,!0),i=6===t.type||7===t.type,n=2===t.type||3===t.type||4===t.type,o=3===t.type,s=this._context.configuration.options.get(97),r=8===t.type||5===t.type,a=9===t.type;let l=e.leftButton||e.middleButton;b.dz&&e.leftButton&&e.ctrlKey&&(l=!1);const c=()=>{e.preventDefault(),this.viewHelper.focusTextArea()};if(l&&(i||o&&s))c(),this._mouseDownOperation.start(t.type,e);else if(n)e.preventDefault();else if(r){const i=t.detail;this.viewHelper.shouldSuppressMouseDownOnViewZone(i.viewZoneId)&&(c(),this._mouseDownOperation.start(t.type,e),e.preventDefault())}else a&&this.viewHelper.shouldSuppressMouseDownOnWidget(t.detail)&&(c(),e.preventDefault());this.viewController.emitMouseDown({event:e,target:t})}}xe.MOUSE_MOVE_MINIMUM_TIME=100;class Se extends u.JT{constructor(e,t,i,n,o){super(),this._context=e,this._viewController=t,this._viewHelper=i,this._createMouseTarget=n,this._getMouseColumn=o,this._mouseMoveMonitor=this._register(new T(this._viewHelper.viewDomNode)),this._onScrollTimeout=this._register(new C._F),this._mouseState=new ke,this._currentSelection=new v.Y(1,1,1,1),this._isActive=!1,this._lastMouseEvent=null}dispose(){super.dispose()}isActive(){return this._isActive}_onMouseDownThenMove(e){this._lastMouseEvent=e,this._mouseState.setModifiers(e);const t=this._findMousePosition(e,!0);t&&(this._mouseState.isDragAndDrop?this._viewController.emitMouseDrag({event:e,target:t}):this._dispatchMouse(t,!0))}start(e,t){this._lastMouseEvent=t,this._mouseState.setStartedOnLineNumbers(3===e),this._mouseState.setStartButtons(t),this._mouseState.setModifiers(t);const i=this._findMousePosition(t,!0);if(!i||!i.position)return;this._mouseState.trySetCount(t.detail,i.position),t.detail=this._mouseState.count;const n=this._context.configuration.options;if(!n.get(80)&&n.get(31)&&!n.get(18)&&!this._mouseState.altKey&&t.detail<2&&!this._isActive&&!this._currentSelection.isEmpty()&&6===i.type&&i.position&&this._currentSelection.containsPosition(i.position))return this._mouseState.isDragAndDrop=!0,this._isActive=!0,void this._mouseMoveMonitor.startMonitoring(t.target,t.buttons,Ce(null),(e=>this._onMouseDownThenMove(e)),(e=>{const t=this._findMousePosition(this._lastMouseEvent,!0);e&&e instanceof KeyboardEvent?this._viewController.emitMouseDropCanceled():this._viewController.emitMouseDrop({event:this._lastMouseEvent,target:t?this._createMouseTarget(this._lastMouseEvent,!0):null}),this._stop()}));this._mouseState.isDragAndDrop=!1,this._dispatchMouse(i,t.shiftKey),this._isActive||(this._isActive=!0,this._mouseMoveMonitor.startMonitoring(t.target,t.buttons,Ce(null),(e=>this._onMouseDownThenMove(e)),(()=>this._stop())))}_stop(){this._isActive=!1,this._onScrollTimeout.cancel()}onHeightChanged(){this._mouseMoveMonitor.stopMonitoring()}onScrollChanged(){this._isActive&&this._onScrollTimeout.setIfNotSet((()=>{if(!this._lastMouseEvent)return;const e=this._findMousePosition(this._lastMouseEvent,!1);e&&(this._mouseState.isDragAndDrop||this._dispatchMouse(e,!0))}),10)}onCursorStateChanged(e){this._currentSelection=e.selections[0]}_getPositionOutsideEditor(e){const t=e.editorPos,i=this._context.model,n=this._context.viewLayout,o=this._getMouseColumn(e);if(e.posy<t.y){const i=Math.max(n.getCurrentScrollTop()-(t.y-e.posy),0),s=pe.getZoneAtCoord(this._context,i);if(s){const e=this._helpPositionJumpOverViewZone(s);if(e)return new ue(null,13,o,e)}const r=n.getLineNumberAtVerticalOffset(i);return new ue(null,13,o,new se.L(r,1))}if(e.posy>t.y+t.height){const s=n.getCurrentScrollTop()+(e.posy-t.y),r=pe.getZoneAtCoord(this._context,s);if(r){const e=this._helpPositionJumpOverViewZone(r);if(e)return new ue(null,13,o,e)}const a=n.getLineNumberAtVerticalOffset(s);return new ue(null,13,o,new se.L(a,i.getLineMaxColumn(a)))}const s=n.getLineNumberAtVerticalOffset(n.getCurrentScrollTop()+(e.posy-t.y));return e.posx<t.x?new ue(null,13,o,new se.L(s,1)):e.posx>t.x+t.width?new ue(null,13,o,new se.L(s,i.getLineMaxColumn(s))):null}_findMousePosition(e,t){const i=this._getPositionOutsideEditor(e);if(i)return i;const n=this._createMouseTarget(e,t);if(!n.position)return null;if(8===n.type||5===n.type){const e=this._helpPositionJumpOverViewZone(n.detail);if(e)return new ue(n.element,n.type,n.mouseColumn,e,null,n.detail)}return n}_helpPositionJumpOverViewZone(e){const t=new se.L(this._currentSelection.selectionStartLineNumber,this._currentSelection.selectionStartColumn),i=e.positionBefore,n=e.positionAfter;return i&&n?i.isBefore(t)?i:n:null}_dispatchMouse(e,t){e.position&&this._viewController.dispatchMouse({position:e.position,mouseColumn:e.mouseColumn,startedOnLineNumbers:this._mouseState.startedOnLineNumbers,inSelectionMode:t,mouseDownCount:this._mouseState.count,altKey:this._mouseState.altKey,ctrlKey:this._mouseState.ctrlKey,metaKey:this._mouseState.metaKey,shiftKey:this._mouseState.shiftKey,leftButton:this._mouseState.leftButton,middleButton:this._mouseState.middleButton})}}class ke{constructor(){this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._leftButton=!1,this._middleButton=!1,this._startedOnLineNumbers=!1,this._lastMouseDownPosition=null,this._lastMouseDownPositionEqualCount=0,this._lastMouseDownCount=0,this._lastSetMouseDownCountTime=0,this.isDragAndDrop=!1}get altKey(){return this._altKey}get ctrlKey(){return this._ctrlKey}get metaKey(){return this._metaKey}get shiftKey(){return this._shiftKey}get leftButton(){return this._leftButton}get middleButton(){return this._middleButton}get startedOnLineNumbers(){return this._startedOnLineNumbers}get count(){return this._lastMouseDownCount}setModifiers(e){this._altKey=e.altKey,this._ctrlKey=e.ctrlKey,this._metaKey=e.metaKey,this._shiftKey=e.shiftKey}setStartButtons(e){this._leftButton=e.leftButton,this._middleButton=e.middleButton}setStartedOnLineNumbers(e){this._startedOnLineNumbers=e}trySetCount(e,t){const i=(new Date).getTime();i-this._lastSetMouseDownCountTime>ke.CLEAR_MOUSE_DOWN_COUNT_TIME&&(e=1),this._lastSetMouseDownCountTime=i,e>this._lastMouseDownCount+1&&(e=this._lastMouseDownCount+1),this._lastMouseDownPosition&&this._lastMouseDownPosition.equals(t)?this._lastMouseDownPositionEqualCount++:this._lastMouseDownPositionEqualCount=1,this._lastMouseDownPosition=t,this._lastMouseDownCount=Math.min(e,this._lastMouseDownPositionEqualCount)}}ke.CLEAR_MOUSE_DOWN_COUNT_TIME=400;var Le=i(10161),Ne=i(35715);class De extends xe{constructor(e,t,i){super(e,t,i),this._register(w.o.addTarget(this.viewHelper.linesContentDomNode)),this._register(c.nm(this.viewHelper.linesContentDomNode,w.t.Tap,(e=>this.onTap(e)))),this._register(c.nm(this.viewHelper.linesContentDomNode,w.t.Change,(e=>this.onChange(e)))),this._register(c.nm(this.viewHelper.linesContentDomNode,w.t.Contextmenu,(e=>this._onContextMenu(new D(e,this.viewHelper.viewDomNode),!1)))),this._lastPointerType="mouse",this._register(c.nm(this.viewHelper.linesContentDomNode,"pointerdown",(e=>{const t=e.pointerType;this._lastPointerType="mouse"!==t?"touch"===t?"touch":"pen":"mouse"})));const n=new E(this.viewHelper.viewDomNode);this._register(n.onPointerMoveThrottled(this.viewHelper.viewDomNode,(e=>this._onMouseMove(e)),Ce(this.mouseTargetFactory),xe.MOUSE_MOVE_MINIMUM_TIME)),this._register(n.onPointerUp(this.viewHelper.viewDomNode,(e=>this._onMouseUp(e)))),this._register(n.onPointerLeave(this.viewHelper.viewDomNode,(e=>this._onMouseLeave(e)))),this._register(n.onPointerDown(this.viewHelper.viewDomNode,(e=>this._onMouseDown(e))))}onTap(e){if(!e.initialTarget||!this.viewHelper.linesContentDomNode.contains(e.initialTarget))return;e.preventDefault(),this.viewHelper.focusTextArea();const t=this._createMouseTarget(new D(e,this.viewHelper.viewDomNode),!1);t.position&&this.viewController.dispatchMouse({position:t.position,mouseColumn:t.position.column,startedOnLineNumbers:!1,mouseDownCount:e.tapCount,inSelectionMode:!1,altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1,leftButton:!1,middleButton:!1})}onChange(e){"touch"===this._lastPointerType&&this._context.model.deltaScrollNow(-e.translationX,-e.translationY)}_onMouseDown(e){"touch"!==e.browserEvent.pointerType&&super._onMouseDown(e)}}class Ie extends xe{constructor(e,t,i){super(e,t,i),this._register(w.o.addTarget(this.viewHelper.linesContentDomNode)),this._register(c.nm(this.viewHelper.linesContentDomNode,w.t.Tap,(e=>this.onTap(e)))),this._register(c.nm(this.viewHelper.linesContentDomNode,w.t.Change,(e=>this.onChange(e)))),this._register(c.nm(this.viewHelper.linesContentDomNode,w.t.Contextmenu,(e=>this._onContextMenu(new D(e,this.viewHelper.viewDomNode),!1))))}onTap(e){e.preventDefault(),this.viewHelper.focusTextArea();const t=this._createMouseTarget(new D(e,this.viewHelper.viewDomNode),!1);if(t.position){const e=document.createEvent("CustomEvent");e.initEvent(Ne.pd.Tap,!1,!0),this.viewHelper.dispatchTextAreaEvent(e),this.viewController.moveTo(t.position)}}onChange(e){this._context.model.deltaScrollNow(-e.translationX,-e.translationY)}}class Ee extends u.JT{constructor(e,t,i){super(),b.gn&&Le.D.pointerEvents?this.handler=this._register(new De(e,t,i)):window.TouchEvent?this.handler=this._register(new Ie(e,t,i)):this.handler=this._register(new xe(e,t,i))}getTargetAtClientPoint(e,t){return this.handler.getTargetAtClientPoint(e,t)}}i(67142);var Te=i(97295),Me=i(15887);i(91364);class Ae extends M{}var Oe=i(27869),Pe=i(97781);class Re extends Ae{constructor(e){super(),this._context=e,this._readConfig(),this._lastCursorModelPosition=new se.L(1,1),this._renderResult=null,this._activeLineNumber=1,this._context.addEventHandler(this)}_readConfig(){const e=this._context.configuration.options;this._lineHeight=e.get(58);const t=e.get(59);this._renderLineNumbers=t.renderType,this._renderCustomLineNumbers=t.renderFn,this._renderFinalNewline=e.get(83);const i=e.get(129);this._lineNumbersLeft=i.lineNumbersLeft,this._lineNumbersWidth=i.lineNumbersWidth}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){return this._readConfig(),!0}onCursorStateChanged(e){const t=e.selections[0].getPosition();this._lastCursorModelPosition=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(t);let i=!1;return this._activeLineNumber!==t.lineNumber&&(this._activeLineNumber=t.lineNumber,i=!0),2!==this._renderLineNumbers&&3!==this._renderLineNumbers||(i=!0),i}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}_getLineRenderLineNumber(e){const t=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new se.L(e,1));if(1!==t.column)return"";const i=t.lineNumber;if(this._renderCustomLineNumbers)return this._renderCustomLineNumbers(i);if(2===this._renderLineNumbers){const e=Math.abs(this._lastCursorModelPosition.lineNumber-i);return 0===e?'<span class="relative-current-line-number">'+i+"</span>":String(e)}return 3===this._renderLineNumbers?this._lastCursorModelPosition.lineNumber===i||i%10==0?String(i):"":String(i)}prepareRender(e){if(0===this._renderLineNumbers)return void(this._renderResult=null);const t=b.IJ?this._lineHeight%2==0?" lh-even":" lh-odd":"",i=e.visibleRange.startLineNumber,n=e.visibleRange.endLineNumber,o='<div class="'+Re.CLASS_NAME+t+'" style="left:'+this._lineNumbersLeft+"px;width:"+this._lineNumbersWidth+'px;">',s=this._context.model.getLineCount(),r=[];for(let e=i;e<=n;e++){const n=e-i;if(!this._renderFinalNewline&&e===s&&0===this._context.model.getLineLength(e)){r[n]="";continue}const a=this._getLineRenderLineNumber(e);a?e===this._activeLineNumber?r[n]='<div class="active-line-number '+Re.CLASS_NAME+t+'" style="left:'+this._lineNumbersLeft+"px;width:"+this._lineNumbersWidth+'px;">'+a+"</div>":r[n]=o+a+"</div>":r[n]=""}this._renderResult=r}render(e,t){if(!this._renderResult)return"";const i=t-e;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}Re.CLASS_NAME="line-numbers",(0,Pe.Ic)(((e,t)=>{const i=e.getColor(Oe.hw);i&&t.addRule(`.monaco-editor .line-numbers { color: ${i}; }`);const n=e.getColor(Oe.DD);n&&t.addRule(`.monaco-editor .line-numbers.active-line-number { color: ${n}; }`)}));class Fe extends A{constructor(e){super(e);const t=this._context.configuration.options,i=t.get(129);this._canUseLayerHinting=!t.get(28),this._contentLeft=i.contentLeft,this._glyphMarginLeft=i.glyphMarginLeft,this._glyphMarginWidth=i.glyphMarginWidth,this._domNode=(0,_.X)(document.createElement("div")),this._domNode.setClassName(Fe.OUTER_CLASS_NAME),this._domNode.setPosition("absolute"),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true"),this._glyphMarginBackgroundDomNode=(0,_.X)(document.createElement("div")),this._glyphMarginBackgroundDomNode.setClassName(Fe.CLASS_NAME),this._domNode.appendChild(this._glyphMarginBackgroundDomNode)}dispose(){super.dispose()}getDomNode(){return this._domNode}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(129);return this._canUseLayerHinting=!t.get(28),this._contentLeft=i.contentLeft,this._glyphMarginLeft=i.glyphMarginLeft,this._glyphMarginWidth=i.glyphMarginWidth,!0}onScrollChanged(e){return super.onScrollChanged(e)||e.scrollTopChanged}prepareRender(e){}render(e){this._domNode.setLayerHinting(this._canUseLayerHinting),this._domNode.setContain("strict");const t=e.scrollTop-e.bigNumbersDelta;this._domNode.setTop(-t);const i=Math.min(e.scrollHeight,1e6);this._domNode.setHeight(i),this._domNode.setWidth(this._contentLeft),this._glyphMarginBackgroundDomNode.setLeft(this._glyphMarginLeft),this._glyphMarginBackgroundDomNode.setWidth(this._glyphMarginWidth),this._glyphMarginBackgroundDomNode.setHeight(i)}}Fe.CLASS_NAME="glyph-margin",Fe.OUTER_CLASS_NAME="margin";var Be=i(59410),Ve=i(96542);class We{constructor(e,t,i){this._visibleTextAreaBrand=void 0,this.top=e,this.left=t,this.width=i}setWidth(e){return new We(this.top,this.left,e)}}const He=m.vU;class ze extends A{constructor(e,t,i){super(e),this._primaryCursorPosition=new se.L(1,1),this._primaryCursorVisibleRange=null,this._viewController=t,this._viewHelper=i,this._scrollLeft=0,this._scrollTop=0;const n=this._context.configuration.options,o=n.get(129);this._setAccessibilityOptions(n),this._contentLeft=o.contentLeft,this._contentWidth=o.contentWidth,this._contentHeight=o.height,this._fontInfo=n.get(43),this._lineHeight=n.get(58),this._emptySelectionClipboard=n.get(32),this._copyWithSyntaxHighlighting=n.get(21),this._visibleTextArea=null,this._selections=[new v.Y(1,1,1,1)],this._modelSelections=[new v.Y(1,1,1,1)],this._lastRenderPosition=null,this.textArea=(0,_.X)(document.createElement("textarea")),O.write(this.textArea,6),this.textArea.setClassName(`inputarea ${Ve.S}`),this.textArea.setAttribute("wrap","off"),this.textArea.setAttribute("autocorrect","off"),this.textArea.setAttribute("autocapitalize","off"),this.textArea.setAttribute("autocomplete","off"),this.textArea.setAttribute("spellcheck","false"),this.textArea.setAttribute("aria-label",this._getAriaLabel(n)),this.textArea.setAttribute("tabindex",String(n.get(111))),this.textArea.setAttribute("role","textbox"),this.textArea.setAttribute("aria-roledescription",l.N("editor","editor")),this.textArea.setAttribute("aria-multiline","true"),this.textArea.setAttribute("aria-haspopup","false"),this.textArea.setAttribute("aria-autocomplete","both"),n.get(30)&&n.get(80)&&this.textArea.setAttribute("readonly","true"),this.textAreaCover=(0,_.X)(document.createElement("div")),this.textAreaCover.setPosition("absolute");const s={getLineCount:()=>this._context.model.getLineCount(),getLineMaxColumn:e=>this._context.model.getLineMaxColumn(e),getValueInRange:(e,t)=>this._context.model.getValueInRange(e,t)},r={getDataToCopy:e=>{const t=this._context.model.getPlainTextToCopy(this._modelSelections,this._emptySelectionClipboard,b.ED),i=this._context.model.getEOL(),n=this._emptySelectionClipboard&&1===this._modelSelections.length&&this._modelSelections[0].isEmpty(),o=Array.isArray(t)?t:null,s=Array.isArray(t)?t.join(i):t;let r,a=null;if(e&&(Ne.RA.forceCopyWithSyntaxHighlighting||this._copyWithSyntaxHighlighting&&s.length<65536)){const e=this._context.model.getRichTextToCopy(this._modelSelections,this._emptySelectionClipboard);e&&(r=e.html,a=e.mode)}return{isFromEmptySelection:n,multicursorText:o,text:s,html:r,mode:a}},getScreenReaderContent:e=>{if(1===this._accessibilitySupport){if(b.dz){const e=this._selections[0];if(e.isEmpty()){const t=e.getStartPosition();let i=this._getWordBeforePosition(t);if(0===i.length&&(i=this._getCharacterBeforePosition(t)),i.length>0)return new Me.un(i,i.length,i.length,t,t)}}return Me.un.EMPTY}if(m.Dt){const e=this._selections[0];if(e.isEmpty()){const t=e.getStartPosition(),[i,n]=this._getAndroidWordAtPosition(t);if(i.length>0)return new Me.un(i,n,n,t,t)}return Me.un.EMPTY}return Me.ee.fromEditorSelection(e,s,this._selections[0],this._accessibilityPageSize,0===this._accessibilitySupport)},deduceModelPosition:(e,t,i)=>this._context.model.deduceModelPositionRelativeToViewPosition(e,t,i)};this._textAreaInput=this._register(new Ne.Fz(r,this.textArea)),this._register(this._textAreaInput.onKeyDown((e=>{this._viewController.emitKeyDown(e)}))),this._register(this._textAreaInput.onKeyUp((e=>{this._viewController.emitKeyUp(e)}))),this._register(this._textAreaInput.onPaste((e=>{let t=!1,i=null,n=null;e.metadata&&(t=this._emptySelectionClipboard&&!!e.metadata.isFromEmptySelection,i=void 0!==e.metadata.multicursorText?e.metadata.multicursorText:null,n=e.metadata.mode),this._viewController.paste(e.text,t,i,n)}))),this._register(this._textAreaInput.onCut((()=>{this._viewController.cut()}))),this._register(this._textAreaInput.onType((e=>{e.replacePrevCharCnt||e.replaceNextCharCnt||e.positionDelta?(Me.al&&console.log(` => compositionType: <<${e.text}>>, ${e.replacePrevCharCnt}, ${e.replaceNextCharCnt}, ${e.positionDelta}`),this._viewController.compositionType(e.text,e.replacePrevCharCnt,e.replaceNextCharCnt,e.positionDelta)):(Me.al&&console.log(` => type: <<${e.text}>>`),this._viewController.type(e.text))}))),this._register(this._textAreaInput.onSelectionChangeRequest((e=>{this._viewController.setSelection(e)}))),this._register(this._textAreaInput.onCompositionStart((e=>{const t=this._selections[0].startLineNumber,i=this._selections[0].startColumn+e.revealDeltaColumns;this._context.model.revealRange("keyboard",!0,new re.e(t,i,t,i),0,1);const n=this._viewHelper.visibleRangeForPositionRelativeToEditor(t,i);n&&(this._visibleTextArea=new We(this._context.viewLayout.getVerticalOffsetForLineNumber(t),n.left,He?0:1),this._render()),this.textArea.setClassName(`inputarea ${Ve.S} ime-input`),this._viewController.compositionStart(),this._context.model.onCompositionStart()}))),this._register(this._textAreaInput.onCompositionUpdate((e=>{this._visibleTextArea&&(this._visibleTextArea=this._visibleTextArea.setWidth(function(e,t){const i=document.createElement("canvas").getContext("2d");i.font=(n=t,o="normal",s=n.fontWeight,r=n.fontSize,a=n.lineHeight,l=n.fontFamily,`${o} normal ${s} ${r}px / ${a}px ${l}`);var n,o,s,r,a,l;const c=i.measureText(e);return m.vU?c.width+2:c.width}(e.data,this._fontInfo)),this._render())}))),this._register(this._textAreaInput.onCompositionEnd((()=>{this._visibleTextArea=null,this._render(),this.textArea.setClassName(`inputarea ${Ve.S}`),this._viewController.compositionEnd(),this._context.model.onCompositionEnd()}))),this._register(this._textAreaInput.onFocus((()=>{this._context.model.setHasFocus(!0)}))),this._register(this._textAreaInput.onBlur((()=>{this._context.model.setHasFocus(!1)})))}dispose(){super.dispose()}_getAndroidWordAtPosition(e){const t=this._context.model.getLineContent(e.lineNumber),i=(0,Be.u)('`~!@#$%^&*()-=+[{]}\\|;:",.<>/?');let n=!0,o=e.column,s=!0,r=e.column,a=0;for(;a<50&&(n||s);){if(n&&o<=1&&(n=!1),n){const e=t.charCodeAt(o-2);0!==i.get(e)?n=!1:o--}if(s&&r>t.length&&(s=!1),s){const e=t.charCodeAt(r-1);0!==i.get(e)?s=!1:r++}a++}return[t.substring(o-1,r-1),e.column-o]}_getWordBeforePosition(e){const t=this._context.model.getLineContent(e.lineNumber),i=(0,Be.u)(this._context.configuration.options.get(115));let n=e.column,o=0;for(;n>1;){const s=t.charCodeAt(n-2);if(0!==i.get(s)||o>50)return t.substring(n-1,e.column-1);o++,n--}return t.substring(0,e.column-1)}_getCharacterBeforePosition(e){if(e.column>1){const t=this._context.model.getLineContent(e.lineNumber).charAt(e.column-2);if(!Te.ZG(t.charCodeAt(0)))return t}return""}_getAriaLabel(e){return 1===e.get(2)?l.N("accessibilityOffAriaLabel","The editor is not accessible at this time. Press {0} for options.",b.IJ?"Shift+Alt+F1":"Alt+F1"):e.get(4)}_setAccessibilityOptions(e){this._accessibilitySupport=e.get(2);const t=e.get(3);2===this._accessibilitySupport&&t===K.BH.accessibilityPageSize.defaultValue?this._accessibilityPageSize=500:this._accessibilityPageSize=t}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(129);return this._setAccessibilityOptions(t),this._contentLeft=i.contentLeft,this._contentWidth=i.contentWidth,this._contentHeight=i.height,this._fontInfo=t.get(43),this._lineHeight=t.get(58),this._emptySelectionClipboard=t.get(32),this._copyWithSyntaxHighlighting=t.get(21),this.textArea.setAttribute("aria-label",this._getAriaLabel(t)),this.textArea.setAttribute("tabindex",String(t.get(111))),(e.hasChanged(30)||e.hasChanged(80))&&(t.get(30)&&t.get(80)?this.textArea.setAttribute("readonly","true"):this.textArea.removeAttribute("readonly")),e.hasChanged(2)&&this._textAreaInput.writeScreenReaderContent("strategy changed"),!0}onCursorStateChanged(e){return this._selections=e.selections.slice(0),this._modelSelections=e.modelSelections.slice(0),this._textAreaInput.writeScreenReaderContent("selection changed"),!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return this._scrollLeft=e.scrollLeft,this._scrollTop=e.scrollTop,!0}onZonesChanged(e){return!0}isFocused(){return this._textAreaInput.isFocused()}focusTextArea(){this._textAreaInput.focusTextArea()}getLastRenderData(){return this._lastRenderPosition}setAriaOptions(e){e.activeDescendant?(this.textArea.setAttribute("aria-haspopup","true"),this.textArea.setAttribute("aria-autocomplete","list"),this.textArea.setAttribute("aria-activedescendant",e.activeDescendant)):(this.textArea.setAttribute("aria-haspopup","false"),this.textArea.setAttribute("aria-autocomplete","both"),this.textArea.removeAttribute("aria-activedescendant")),e.role&&this.textArea.setAttribute("role",e.role)}prepareRender(e){this._primaryCursorPosition=new se.L(this._selections[0].positionLineNumber,this._selections[0].positionColumn),this._primaryCursorVisibleRange=e.visibleRangeForPosition(this._primaryCursorPosition)}render(e){this._textAreaInput.writeScreenReaderContent("render"),this._render()}_render(){if(this._visibleTextArea)return void this._renderInsideEditor(null,this._visibleTextArea.top-this._scrollTop,this._contentLeft+this._visibleTextArea.left-this._scrollLeft,this._visibleTextArea.width,this._lineHeight);if(!this._primaryCursorVisibleRange)return void this._renderAtTopLeft();const e=this._contentLeft+this._primaryCursorVisibleRange.left-this._scrollLeft;if(e<this._contentLeft||e>this._contentLeft+this._contentWidth)return void this._renderAtTopLeft();const t=this._context.viewLayout.getVerticalOffsetForLineNumber(this._selections[0].positionLineNumber)-this._scrollTop;t<0||t>this._contentHeight?this._renderAtTopLeft():b.dz?this._renderInsideEditor(this._primaryCursorPosition,t,e,He?0:1,this._lineHeight):this._renderInsideEditor(this._primaryCursorPosition,t,e,He?0:1,He?0:1)}_renderInsideEditor(e,t,i,n,o){this._lastRenderPosition=e;const s=this.textArea,r=this.textAreaCover;p.V.applyFontInfo(s,this._fontInfo),s.setTop(t),s.setLeft(i),s.setWidth(n),s.setHeight(o),r.setTop(0),r.setLeft(0),r.setWidth(0),r.setHeight(0)}_renderAtTopLeft(){this._lastRenderPosition=null;const e=this.textArea,t=this.textAreaCover;if(p.V.applyFontInfo(e,this._fontInfo),e.setTop(0),e.setLeft(0),t.setTop(0),t.setLeft(0),He)return e.setWidth(0),e.setHeight(0),t.setWidth(0),void t.setHeight(0);e.setWidth(1),e.setHeight(1),t.setWidth(1),t.setHeight(1);const i=this._context.configuration.options;i.get(49)?t.setClassName("monaco-editor-background textAreaCover "+Fe.OUTER_CLASS_NAME):0!==i.get(59).renderType?t.setClassName("monaco-editor-background textAreaCover "+Re.CLASS_NAME):t.setClassName("monaco-editor-background textAreaCover")}}var je=i(18728);class Ue{constructor(e,t,i,n){this.configuration=e,this.viewModel=t,this.userInputEvents=i,this.commandDelegate=n}paste(e,t,i,n){this.commandDelegate.paste(e,t,i,n)}type(e){this.commandDelegate.type(e)}compositionType(e,t,i,n){this.commandDelegate.compositionType(e,t,i,n)}compositionStart(){this.commandDelegate.startComposition()}compositionEnd(){this.commandDelegate.endComposition()}cut(){this.commandDelegate.cut()}setSelection(e){je.CoreNavigationCommands.SetSelection.runCoreEditorCommand(this.viewModel,{source:"keyboard",selection:e})}_validateViewColumn(e){const t=this.viewModel.getLineMinColumn(e.lineNumber);return e.column<t?new se.L(e.lineNumber,t):e}_hasMulticursorModifier(e){switch(this.configuration.options.get(69)){case"altKey":return e.altKey;case"ctrlKey":return e.ctrlKey;case"metaKey":return e.metaKey;default:return!1}}_hasNonMulticursorModifier(e){switch(this.configuration.options.get(69)){case"altKey":return e.ctrlKey||e.metaKey;case"ctrlKey":return e.altKey||e.metaKey;case"metaKey":return e.ctrlKey||e.altKey;default:return!1}}dispatchMouse(e){const t=this.configuration.options,i=b.IJ&&t.get(95),n=t.get(18);e.middleButton&&!i?this._columnSelect(e.position,e.mouseColumn,e.inSelectionMode):e.startedOnLineNumbers?this._hasMulticursorModifier(e)?e.inSelectionMode?this._lastCursorLineSelect(e.position):this._createCursor(e.position,!0):e.inSelectionMode?this._lineSelectDrag(e.position):this._lineSelect(e.position):e.mouseDownCount>=4?this._selectAll():3===e.mouseDownCount?this._hasMulticursorModifier(e)?e.inSelectionMode?this._lastCursorLineSelectDrag(e.position):this._lastCursorLineSelect(e.position):e.inSelectionMode?this._lineSelectDrag(e.position):this._lineSelect(e.position):2===e.mouseDownCount?this._hasMulticursorModifier(e)?this._lastCursorWordSelect(e.position):e.inSelectionMode?this._wordSelectDrag(e.position):this._wordSelect(e.position):this._hasMulticursorModifier(e)?this._hasNonMulticursorModifier(e)||(e.shiftKey?this._columnSelect(e.position,e.mouseColumn,!0):e.inSelectionMode?this._lastCursorMoveToSelect(e.position):this._createCursor(e.position,!1)):e.inSelectionMode?e.altKey||n?this._columnSelect(e.position,e.mouseColumn,!0):this._moveToSelect(e.position):this.moveTo(e.position)}_usualArgs(e){return e=this._validateViewColumn(e),{source:"mouse",position:this._convertViewToModelPosition(e),viewPosition:e}}moveTo(e){je.CoreNavigationCommands.MoveTo.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_moveToSelect(e){je.CoreNavigationCommands.MoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_columnSelect(e,t,i){e=this._validateViewColumn(e),je.CoreNavigationCommands.ColumnSelect.runCoreEditorCommand(this.viewModel,{source:"mouse",position:this._convertViewToModelPosition(e),viewPosition:e,mouseColumn:t,doColumnSelect:i})}_createCursor(e,t){e=this._validateViewColumn(e),je.CoreNavigationCommands.CreateCursor.runCoreEditorCommand(this.viewModel,{source:"mouse",position:this._convertViewToModelPosition(e),viewPosition:e,wholeLine:t})}_lastCursorMoveToSelect(e){je.CoreNavigationCommands.LastCursorMoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_wordSelect(e){je.CoreNavigationCommands.WordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_wordSelectDrag(e){je.CoreNavigationCommands.WordSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lastCursorWordSelect(e){je.CoreNavigationCommands.LastCursorWordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lineSelect(e){je.CoreNavigationCommands.LineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lineSelectDrag(e){je.CoreNavigationCommands.LineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lastCursorLineSelect(e){je.CoreNavigationCommands.LastCursorLineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_lastCursorLineSelectDrag(e){je.CoreNavigationCommands.LastCursorLineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(e))}_selectAll(){je.CoreNavigationCommands.SelectAll.runCoreEditorCommand(this.viewModel,{source:"mouse"})}_convertViewToModelPosition(e){return this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(e)}emitKeyDown(e){this.userInputEvents.emitKeyDown(e)}emitKeyUp(e){this.userInputEvents.emitKeyUp(e)}emitContextMenu(e){this.userInputEvents.emitContextMenu(e)}emitMouseMove(e){this.userInputEvents.emitMouseMove(e)}emitMouseLeave(e){this.userInputEvents.emitMouseLeave(e)}emitMouseUp(e){this.userInputEvents.emitMouseUp(e)}emitMouseDown(e){this.userInputEvents.emitMouseDown(e)}emitMouseDrag(e){this.userInputEvents.emitMouseDrag(e)}emitMouseDrop(e){this.userInputEvents.emitMouseDrop(e)}emitMouseDropCanceled(){this.userInputEvents.emitMouseDropCanceled()}emitMouseWheel(e){this.userInputEvents.emitMouseWheel(e)}}class $e{constructor(e){this.onKeyDown=null,this.onKeyUp=null,this.onContextMenu=null,this.onMouseMove=null,this.onMouseLeave=null,this.onMouseDown=null,this.onMouseUp=null,this.onMouseDrag=null,this.onMouseDrop=null,this.onMouseDropCanceled=null,this.onMouseWheel=null,this._coordinatesConverter=e}emitKeyDown(e){this.onKeyDown&&this.onKeyDown(e)}emitKeyUp(e){this.onKeyUp&&this.onKeyUp(e)}emitContextMenu(e){this.onContextMenu&&this.onContextMenu(this._convertViewToModelMouseEvent(e))}emitMouseMove(e){this.onMouseMove&&this.onMouseMove(this._convertViewToModelMouseEvent(e))}emitMouseLeave(e){this.onMouseLeave&&this.onMouseLeave(this._convertViewToModelMouseEvent(e))}emitMouseDown(e){this.onMouseDown&&this.onMouseDown(this._convertViewToModelMouseEvent(e))}emitMouseUp(e){this.onMouseUp&&this.onMouseUp(this._convertViewToModelMouseEvent(e))}emitMouseDrag(e){this.onMouseDrag&&this.onMouseDrag(this._convertViewToModelMouseEvent(e))}emitMouseDrop(e){this.onMouseDrop&&this.onMouseDrop(this._convertViewToModelMouseEvent(e))}emitMouseDropCanceled(){this.onMouseDropCanceled&&this.onMouseDropCanceled()}emitMouseWheel(e){this.onMouseWheel&&this.onMouseWheel(e)}_convertViewToModelMouseEvent(e){return e.target?{event:e.event,target:this._convertViewToModelMouseTarget(e.target)}:e}_convertViewToModelMouseTarget(e){return $e.convertViewToModelMouseTarget(e,this._coordinatesConverter)}static convertViewToModelMouseTarget(e,t){return new Ke(e.element,e.type,e.mouseColumn,e.position?t.convertViewPositionToModelPosition(e.position):null,e.range?t.convertViewRangeToModelRange(e.range):null,e.detail)}}class Ke{constructor(e,t,i,n,o,s){this.element=e,this.type=t,this.mouseColumn=i,this.position=n,this.range=o,this.detail=s}toString(){return ue.toString(this)}}var qe,Ze=i(50072);class Ge{constructor(e){this._createLine=e,this._set(1,[])}flush(){this._set(1,[])}_set(e,t){this._lines=t,this._rendLineNumberStart=e}_get(){return{rendLineNumberStart:this._rendLineNumberStart,lines:this._lines}}getStartLineNumber(){return this._rendLineNumberStart}getEndLineNumber(){return this._rendLineNumberStart+this._lines.length-1}getCount(){return this._lines.length}getLine(e){const t=e-this._rendLineNumberStart;if(t<0||t>=this._lines.length)throw new Error("Illegal value for lineNumber");return this._lines[t]}onLinesDeleted(e,t){if(0===this.getCount())return null;const i=this.getStartLineNumber(),n=this.getEndLineNumber();if(t<i){const i=t-e+1;return this._rendLineNumberStart-=i,null}if(e>n)return null;let o=0,s=0;for(let r=i;r<=n;r++){const i=r-this._rendLineNumberStart;e<=r&&r<=t&&(0===s?(o=i,s=1):s++)}if(e<i){let n=0;n=t<i?t-e+1:i-e,this._rendLineNumberStart-=n}return this._lines.splice(o,s)}onLinesChanged(e,t){if(0===this.getCount())return!1;const i=this.getStartLineNumber(),n=this.getEndLineNumber();let o=!1;for(let s=e;s<=t;s++)s>=i&&s<=n&&(this._lines[s-this._rendLineNumberStart].onContentChanged(),o=!0);return o}onLinesInserted(e,t){if(0===this.getCount())return null;const i=t-e+1,n=this.getStartLineNumber(),o=this.getEndLineNumber();if(e<=n)return this._rendLineNumberStart+=i,null;if(e>o)return null;if(i+e>o){return this._lines.splice(e-this._rendLineNumberStart,o-e+1)}const s=[];for(let e=0;e<i;e++)s[e]=this._createLine();const r=e-this._rendLineNumberStart,a=this._lines.slice(0,r),l=this._lines.slice(r,this._lines.length-i),c=this._lines.slice(this._lines.length-i,this._lines.length);return this._lines=a.concat(s).concat(l),c}onTokensChanged(e){if(0===this.getCount())return!1;const t=this.getStartLineNumber(),i=this.getEndLineNumber();let n=!1;for(let o=0,s=e.length;o<s;o++){const s=e[o];if(s.toLineNumber<t||s.fromLineNumber>i)continue;const r=Math.max(t,s.fromLineNumber),a=Math.min(i,s.toLineNumber);for(let e=r;e<=a;e++){const t=e-this._rendLineNumberStart;this._lines[t].onTokensChanged(),n=!0}}return n}}class Ye{constructor(e){this._host=e,this.domNode=this._createDomNode(),this._linesCollection=new Ge((()=>this._host.createVisibleLine()))}_createDomNode(){const e=(0,_.X)(document.createElement("div"));return e.setClassName("view-layer"),e.setPosition("absolute"),e.domNode.setAttribute("role","presentation"),e.domNode.setAttribute("aria-hidden","true"),e}onConfigurationChanged(e){return!!e.hasChanged(129)}onFlushed(e){return this._linesCollection.flush(),!0}onLinesChanged(e){return this._linesCollection.onLinesChanged(e.fromLineNumber,e.toLineNumber)}onLinesDeleted(e){const t=this._linesCollection.onLinesDeleted(e.fromLineNumber,e.toLineNumber);if(t)for(let e=0,i=t.length;e<i;e++){const i=t[e].getDomNode();i&&this.domNode.domNode.removeChild(i)}return!0}onLinesInserted(e){const t=this._linesCollection.onLinesInserted(e.fromLineNumber,e.toLineNumber);if(t)for(let e=0,i=t.length;e<i;e++){const i=t[e].getDomNode();i&&this.domNode.domNode.removeChild(i)}return!0}onScrollChanged(e){return e.scrollTopChanged}onTokensChanged(e){return this._linesCollection.onTokensChanged(e.ranges)}onZonesChanged(e){return!0}getStartLineNumber(){return this._linesCollection.getStartLineNumber()}getEndLineNumber(){return this._linesCollection.getEndLineNumber()}getVisibleLine(e){return this._linesCollection.getLine(e)}renderLines(e){const t=this._linesCollection._get(),i=new Qe(this.domNode.domNode,this._host,e),n={rendLineNumberStart:t.rendLineNumberStart,lines:t.lines,linesLength:t.lines.length},o=i.render(n,e.startLineNumber,e.endLineNumber,e.relativeVerticalOffset);this._linesCollection._set(o.rendLineNumberStart,o.lines)}}class Qe{constructor(e,t,i){this.domNode=e,this.host=t,this.viewportData=i}render(e,t,i,n){const o={rendLineNumberStart:e.rendLineNumberStart,lines:e.lines.slice(0),linesLength:e.linesLength};if(o.rendLineNumberStart+o.linesLength-1<t||i<o.rendLineNumberStart){o.rendLineNumberStart=t,o.linesLength=i-t+1,o.lines=[];for(let e=t;e<=i;e++)o.lines[e-t]=this.host.createVisibleLine();return this._finishRendering(o,!0,n),o}if(this._renderUntouchedLines(o,Math.max(t-o.rendLineNumberStart,0),Math.min(i-o.rendLineNumberStart,o.linesLength-1),n,t),o.rendLineNumberStart>t){const e=t,s=Math.min(i,o.rendLineNumberStart-1);e<=s&&(this._insertLinesBefore(o,e,s,n,t),o.linesLength+=s-e+1)}else if(o.rendLineNumberStart<t){const e=Math.min(o.linesLength,t-o.rendLineNumberStart);e>0&&(this._removeLinesBefore(o,e),o.linesLength-=e)}if(o.rendLineNumberStart=t,o.rendLineNumberStart+o.linesLength-1<i){const e=o.rendLineNumberStart+o.linesLength,s=i;e<=s&&(this._insertLinesAfter(o,e,s,n,t),o.linesLength+=s-e+1)}else if(o.rendLineNumberStart+o.linesLength-1>i){const e=Math.max(0,i-o.rendLineNumberStart+1),t=o.linesLength-1-e+1;t>0&&(this._removeLinesAfter(o,t),o.linesLength-=t)}return this._finishRendering(o,!1,n),o}_renderUntouchedLines(e,t,i,n,o){const s=e.rendLineNumberStart,r=e.lines;for(let e=t;e<=i;e++){const t=s+e;r[e].layoutLine(t,n[t-o])}}_insertLinesBefore(e,t,i,n,o){const s=[];let r=0;for(let e=t;e<=i;e++)s[r++]=this.host.createVisibleLine();e.lines=s.concat(e.lines)}_removeLinesBefore(e,t){for(let i=0;i<t;i++){const t=e.lines[i].getDomNode();t&&this.domNode.removeChild(t)}e.lines.splice(0,t)}_insertLinesAfter(e,t,i,n,o){const s=[];let r=0;for(let e=t;e<=i;e++)s[r++]=this.host.createVisibleLine();e.lines=e.lines.concat(s)}_removeLinesAfter(e,t){const i=e.linesLength-t;for(let n=0;n<t;n++){const t=e.lines[i+n].getDomNode();t&&this.domNode.removeChild(t)}e.lines.splice(i,t)}_finishRenderingNewLines(e,t,i,n){Qe._ttPolicy&&(i=Qe._ttPolicy.createHTML(i));const o=this.domNode.lastChild;t||!o?this.domNode.innerHTML=i:o.insertAdjacentHTML("afterend",i);let s=this.domNode.lastChild;for(let t=e.linesLength-1;t>=0;t--){const i=e.lines[t];n[t]&&(i.setDomNode(s),s=s.previousSibling)}}_finishRenderingInvalidLines(e,t,i){const n=document.createElement("div");Qe._ttPolicy&&(t=Qe._ttPolicy.createHTML(t)),n.innerHTML=t;for(let t=0;t<e.linesLength;t++){const o=e.lines[t];if(i[t]){const e=n.firstChild,t=o.getDomNode();t.parentNode.replaceChild(e,t),o.setDomNode(e)}}}_finishRendering(e,t,i){const n=Qe._sb,o=e.linesLength,s=e.lines,r=e.rendLineNumberStart,a=[];{n.reset();let l=!1;for(let e=0;e<o;e++){const t=s[e];a[e]=!1;if(t.getDomNode())continue;t.renderLine(e+r,i[e],this.viewportData,n)&&(a[e]=!0,l=!0)}l&&this._finishRenderingNewLines(e,t,n.build(),a)}{n.reset();let t=!1;const l=[];for(let e=0;e<o;e++){const o=s[e];if(l[e]=!1,a[e])continue;o.renderLine(e+r,i[e],this.viewportData,n)&&(l[e]=!0,t=!0)}t&&this._finishRenderingInvalidLines(e,n.build(),l)}}}Qe._ttPolicy=null===(qe=window.trustedTypes)||void 0===qe?void 0:qe.createPolicy("editorViewLayer",{createHTML:e=>e}),Qe._sb=(0,Ze.l$)(1e5);class Xe extends A{constructor(e){super(e),this._visibleLines=new Ye(this),this.domNode=this._visibleLines.domNode,this._dynamicOverlays=[],this._isFocused=!1,this.domNode.setClassName("view-overlays")}shouldRender(){if(super.shouldRender())return!0;for(let e=0,t=this._dynamicOverlays.length;e<t;e++){if(this._dynamicOverlays[e].shouldRender())return!0}return!1}dispose(){super.dispose();for(let e=0,t=this._dynamicOverlays.length;e<t;e++){this._dynamicOverlays[e].dispose()}this._dynamicOverlays=[]}getDomNode(){return this.domNode}createVisibleLine(){return new Je(this._context.configuration,this._dynamicOverlays)}addDynamicOverlay(e){this._dynamicOverlays.push(e)}onConfigurationChanged(e){this._visibleLines.onConfigurationChanged(e);const t=this._visibleLines.getStartLineNumber(),i=this._visibleLines.getEndLineNumber();for(let n=t;n<=i;n++){this._visibleLines.getVisibleLine(n).onConfigurationChanged(e)}return!0}onFlushed(e){return this._visibleLines.onFlushed(e)}onFocusChanged(e){return this._isFocused=e.isFocused,!0}onLinesChanged(e){return this._visibleLines.onLinesChanged(e)}onLinesDeleted(e){return this._visibleLines.onLinesDeleted(e)}onLinesInserted(e){return this._visibleLines.onLinesInserted(e)}onScrollChanged(e){return this._visibleLines.onScrollChanged(e)||!0}onTokensChanged(e){return this._visibleLines.onTokensChanged(e)}onZonesChanged(e){return this._visibleLines.onZonesChanged(e)}prepareRender(e){const t=this._dynamicOverlays.filter((e=>e.shouldRender()));for(let i=0,n=t.length;i<n;i++){const n=t[i];n.prepareRender(e),n.onDidRender()}}render(e){this._viewOverlaysRender(e),this.domNode.toggleClassName("focused",this._isFocused)}_viewOverlaysRender(e){this._visibleLines.renderLines(e.viewportData)}}class Je{constructor(e,t){this._configuration=e,this._lineHeight=this._configuration.options.get(58),this._dynamicOverlays=t,this._domNode=null,this._renderedContent=null}getDomNode(){return this._domNode?this._domNode.domNode:null}setDomNode(e){this._domNode=(0,_.X)(e)}onContentChanged(){}onTokensChanged(){}onConfigurationChanged(e){this._lineHeight=this._configuration.options.get(58)}renderLine(e,t,i,n){let o="";for(let t=0,n=this._dynamicOverlays.length;t<n;t++){o+=this._dynamicOverlays[t].render(i.startLineNumber,e)}return this._renderedContent!==o&&(this._renderedContent=o,n.appendASCIIString('<div style="position:absolute;top:'),n.appendASCIIString(String(t)),n.appendASCIIString("px;width:100%;height:"),n.appendASCIIString(String(this._lineHeight)),n.appendASCIIString('px;">'),n.appendASCIIString(o),n.appendASCIIString("</div>"),!0)}layoutLine(e,t){this._domNode&&(this._domNode.setTop(t),this._domNode.setHeight(this._lineHeight))}}class et extends Xe{constructor(e){super(e);const t=this._context.configuration.options.get(129);this._contentWidth=t.contentWidth,this.domNode.setHeight(0)}onConfigurationChanged(e){const t=this._context.configuration.options.get(129);return this._contentWidth=t.contentWidth,super.onConfigurationChanged(e)||!0}onScrollChanged(e){return super.onScrollChanged(e)||e.scrollWidthChanged}_viewOverlaysRender(e){super._viewOverlaysRender(e),this.domNode.setWidth(Math.max(e.scrollWidth,this._contentWidth))}}class tt extends Xe{constructor(e){super(e);const t=this._context.configuration.options,i=t.get(129);this._contentLeft=i.contentLeft,this.domNode.setClassName("margin-view-overlays"),this.domNode.setWidth(1),p.V.applyFontInfo(this.domNode,t.get(43))}onConfigurationChanged(e){const t=this._context.configuration.options;p.V.applyFontInfo(this.domNode,t.get(43));const i=t.get(129);return this._contentLeft=i.contentLeft,super.onConfigurationChanged(e)||!0}onScrollChanged(e){return super.onScrollChanged(e)||e.scrollHeightChanged}_viewOverlaysRender(e){super._viewOverlaysRender(e);const t=Math.min(e.scrollHeight,1e6);this.domNode.setHeight(t),this.domNode.setWidth(this._contentLeft)}}class it{constructor(e,t){this._coordinateBrand=void 0,this.top=e,this.left=t}}class nt extends A{constructor(e,t){super(e),this._viewDomNode=t,this._widgets={},this.domNode=(0,_.X)(document.createElement("div")),O.write(this.domNode,1),this.domNode.setClassName("contentWidgets"),this.domNode.setPosition("absolute"),this.domNode.setTop(0),this.overflowingContentWidgetsDomNode=(0,_.X)(document.createElement("div")),O.write(this.overflowingContentWidgetsDomNode,2),this.overflowingContentWidgetsDomNode.setClassName("overflowingContentWidgets")}dispose(){super.dispose(),this._widgets={}}onConfigurationChanged(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].onConfigurationChanged(e);return!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLineMappingChanged(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].onLineMappingChanged(e);return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return!0}onZonesChanged(e){return!0}addWidget(e){const t=new ot(this._context,this._viewDomNode,e);this._widgets[t.id]=t,t.allowEditorOverflow?this.overflowingContentWidgetsDomNode.appendChild(t.domNode):this.domNode.appendChild(t.domNode),this.setShouldRender()}setWidgetPosition(e,t,i){this._widgets[e.getId()].setPosition(t,i),this.setShouldRender()}removeWidget(e){const t=e.getId();if(this._widgets.hasOwnProperty(t)){const e=this._widgets[t];delete this._widgets[t];const i=e.domNode.domNode;i.parentNode.removeChild(i),i.removeAttribute("monaco-visible-content-widget"),this.setShouldRender()}}shouldSuppressMouseDownOnWidget(e){return!!this._widgets.hasOwnProperty(e)&&this._widgets[e].suppressMouseDown}onBeforeRender(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].onBeforeRender(e)}prepareRender(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].prepareRender(e)}render(e){const t=Object.keys(this._widgets);for(const i of t)this._widgets[i].render(e)}}class ot{constructor(e,t,i){this._context=e,this._viewDomNode=t,this._actual=i,this.domNode=(0,_.X)(this._actual.getDomNode()),this.id=this._actual.getId(),this.allowEditorOverflow=this._actual.allowEditorOverflow||!1,this.suppressMouseDown=this._actual.suppressMouseDown||!1;const n=this._context.configuration.options,o=n.get(129);this._fixedOverflowWidgets=n.get(36),this._contentWidth=o.contentWidth,this._contentLeft=o.contentLeft,this._lineHeight=n.get(58),this._range=null,this._viewRange=null,this._preference=[],this._cachedDomNodeClientWidth=-1,this._cachedDomNodeClientHeight=-1,this._maxWidth=this._getMaxWidth(),this._isVisible=!1,this._renderData=null,this.domNode.setPosition(this._fixedOverflowWidgets&&this.allowEditorOverflow?"fixed":"absolute"),this.domNode.setVisibility("hidden"),this.domNode.setAttribute("widgetId",this.id),this.domNode.setMaxWidth(this._maxWidth)}onConfigurationChanged(e){const t=this._context.configuration.options;if(this._lineHeight=t.get(58),e.hasChanged(129)){const e=t.get(129);this._contentLeft=e.contentLeft,this._contentWidth=e.contentWidth,this._maxWidth=this._getMaxWidth()}}onLineMappingChanged(e){this._setPosition(this._range)}_setPosition(e){if(this._range=e,this._viewRange=null,this._range){const e=this._context.model.validateModelRange(this._range);(this._context.model.coordinatesConverter.modelPositionIsVisible(e.getStartPosition())||this._context.model.coordinatesConverter.modelPositionIsVisible(e.getEndPosition()))&&(this._viewRange=this._context.model.coordinatesConverter.convertModelRangeToViewRange(e))}}_getMaxWidth(){return this.allowEditorOverflow?window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth:this._contentWidth}setPosition(e,t){this._setPosition(e),this._preference=t,this._cachedDomNodeClientWidth=-1,this._cachedDomNodeClientHeight=-1}_layoutBoxInViewport(e,t,i,n,o){const s=e.top,r=s,a=t.top+this._lineHeight,l=s-n,c=r>=n,d=a,h=o.viewportHeight-a>=n;let u=e.left,g=t.left;return u+i>o.scrollLeft+o.viewportWidth&&(u=o.scrollLeft+o.viewportWidth-i),g+i>o.scrollLeft+o.viewportWidth&&(g=o.scrollLeft+o.viewportWidth-i),u<o.scrollLeft&&(u=o.scrollLeft),g<o.scrollLeft&&(g=o.scrollLeft),{fitsAbove:c,aboveTop:l,aboveLeft:u,fitsBelow:h,belowTop:d,belowLeft:g}}_layoutHorizontalSegmentInPage(e,t,i,n){const o=Math.max(0,t.left-n),s=Math.min(t.left+t.width+n,e.width);let r=t.left+i-c.DI.scrollX;if(r+n>s){const e=r-(s-n);r-=e,i-=e}if(r<o){const e=r-o;r-=e,i-=e}return[i,r]}_layoutBoxInPage(e,t,i,n,o){const s=e.top-n,r=t.top+this._lineHeight,a=c.i(this._viewDomNode.domNode),l=a.top+s-c.DI.scrollY,d=a.top+r-c.DI.scrollY,h=c.D6(document.body),[u,g]=this._layoutHorizontalSegmentInPage(h,a,e.left-o.scrollLeft+this._contentLeft,i),[p,f]=this._layoutHorizontalSegmentInPage(h,a,t.left-o.scrollLeft+this._contentLeft,i),m=l>=22,v=d+n<=h.height-22;return this._fixedOverflowWidgets?{fitsAbove:m,aboveTop:Math.max(l,22),aboveLeft:g,fitsBelow:v,belowTop:d,belowLeft:f}:{fitsAbove:m,aboveTop:s,aboveLeft:u,fitsBelow:v,belowTop:r,belowLeft:p}}_prepareRenderWidgetAtExactPositionOverflowing(e){return new it(e.top,e.left+this._contentLeft)}_getTopAndBottomLeft(e){if(!this._viewRange)return[null,null];const t=e.linesVisibleRangesForRange(this._viewRange,!1);if(!t||0===t.length)return[null,null];let i=t[0],n=t[0];for(const e of t)e.lineNumber<i.lineNumber&&(i=e),e.lineNumber>n.lineNumber&&(n=e);let o=1073741824;for(const e of i.ranges)e.left<o&&(o=e.left);let s=1073741824;for(const e of n.ranges)e.left<s&&(s=e.left);const r=e.getVerticalOffsetForLineNumber(i.lineNumber)-e.scrollTop,a=new it(r,o),l=e.getVerticalOffsetForLineNumber(n.lineNumber)-e.scrollTop;return[a,new it(l,s)]}_prepareRenderWidget(e){const[t,i]=this._getTopAndBottomLeft(e);if(!t||!i)return null;if(-1===this._cachedDomNodeClientWidth||-1===this._cachedDomNodeClientHeight){let e=null;if("function"==typeof this._actual.beforeRender&&(e=st(this._actual.beforeRender,this._actual)),e)this._cachedDomNodeClientWidth=e.width,this._cachedDomNodeClientHeight=e.height;else{const e=this.domNode.domNode;this._cachedDomNodeClientWidth=e.clientWidth,this._cachedDomNodeClientHeight=e.clientHeight}}let n;if(n=this.allowEditorOverflow?this._layoutBoxInPage(t,i,this._cachedDomNodeClientWidth,this._cachedDomNodeClientHeight,e):this._layoutBoxInViewport(t,i,this._cachedDomNodeClientWidth,this._cachedDomNodeClientHeight,e),this._preference)for(let e=1;e<=2;e++)for(const i of this._preference)if(1===i){if(!n)return null;if(2===e||n.fitsAbove)return{coordinate:new it(n.aboveTop,n.aboveLeft),position:1}}else{if(2!==i)return this.allowEditorOverflow?{coordinate:this._prepareRenderWidgetAtExactPositionOverflowing(t),position:0}:{coordinate:t,position:0};if(!n)return null;if(2===e||n.fitsBelow)return{coordinate:new it(n.belowTop,n.belowLeft),position:2}}return null}onBeforeRender(e){this._viewRange&&this._preference&&(this._viewRange.endLineNumber<e.startLineNumber||this._viewRange.startLineNumber>e.endLineNumber||this.domNode.setMaxWidth(this._maxWidth))}prepareRender(e){this._renderData=this._prepareRenderWidget(e)}render(e){if(!this._renderData)return this._isVisible&&(this.domNode.removeAttribute("monaco-visible-content-widget"),this._isVisible=!1,this.domNode.setVisibility("hidden")),void("function"==typeof this._actual.afterRender&&st(this._actual.afterRender,this._actual,null));this.allowEditorOverflow?(this.domNode.setTop(this._renderData.coordinate.top),this.domNode.setLeft(this._renderData.coordinate.left)):(this.domNode.setTop(this._renderData.coordinate.top+e.scrollTop-e.bigNumbersDelta),this.domNode.setLeft(this._renderData.coordinate.left)),this._isVisible||(this.domNode.setVisibility("inherit"),this.domNode.setAttribute("monaco-visible-content-widget","true"),this._isVisible=!0),"function"==typeof this._actual.afterRender&&st(this._actual.afterRender,this._actual,this._renderData.position)}}function st(e,t,...i){try{return e.call(t,...i)}catch(e){return null}}i(54175);var rt=i(9488);let at=!0;class lt extends Ae{constructor(e){super(),this._context=e;const t=this._context.configuration.options,i=t.get(129);this._lineHeight=t.get(58),this._renderLineHighlight=t.get(84),this._renderLineHighlightOnlyWhenFocus=t.get(85),this._contentLeft=i.contentLeft,this._contentWidth=i.contentWidth,this._selectionIsEmpty=!0,this._focused=!1,this._cursorLineNumbers=[1],this._selections=[new v.Y(1,1,1,1)],this._renderData=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}_readFromSelections(){let e=!1;const t=at?this._selections.slice(0,1):this._selections,i=t.map((e=>e.positionLineNumber));i.sort(((e,t)=>e-t)),rt.fS(this._cursorLineNumbers,i)||(this._cursorLineNumbers=i,e=!0);const n=t.every((e=>e.isEmpty()));return this._selectionIsEmpty!==n&&(this._selectionIsEmpty=n,e=!0),e}onThemeChanged(e){return this._readFromSelections()}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(129);return this._lineHeight=t.get(58),this._renderLineHighlight=t.get(84),this._renderLineHighlightOnlyWhenFocus=t.get(85),this._contentLeft=i.contentLeft,this._contentWidth=i.contentWidth,!0}onCursorStateChanged(e){return this._selections=e.selections,this._readFromSelections()}onFlushed(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollWidthChanged||e.scrollTopChanged}onZonesChanged(e){return!0}onFocusChanged(e){return!!this._renderLineHighlightOnlyWhenFocus&&(this._focused=e.isFocused,!0)}prepareRender(e){if(!this._shouldRenderThis())return void(this._renderData=null);const t=this._renderOne(e),i=e.visibleRange.startLineNumber,n=e.visibleRange.endLineNumber,o=this._cursorLineNumbers.length;let s=0;const r=[];for(let e=i;e<=n;e++){const n=e-i;for(;s<o&&this._cursorLineNumbers[s]<e;)s++;s<o&&this._cursorLineNumbers[s]===e?r[n]=t:r[n]=""}this._renderData=r}render(e,t){if(!this._renderData)return"";const i=t-e;return i>=this._renderData.length?"":this._renderData[i]}}class ct extends lt{_renderOne(e){return`<div class="${"current-line"+(this._shouldRenderOther()?" current-line-both":"")}" style="width:${Math.max(e.scrollWidth,this._contentWidth)}px; height:${this._lineHeight}px;"></div>`}_shouldRenderThis(){return("line"===this._renderLineHighlight||"all"===this._renderLineHighlight)&&this._selectionIsEmpty&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}_shouldRenderOther(){return("gutter"===this._renderLineHighlight||"all"===this._renderLineHighlight)&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}}class dt extends lt{_renderOne(e){return`<div class="${"current-line"+(this._shouldRenderMargin()?" current-line-margin":"")+(this._shouldRenderOther()?" current-line-margin-both":"")}" style="width:${this._contentLeft}px; height:${this._lineHeight}px;"></div>`}_shouldRenderMargin(){return("gutter"===this._renderLineHighlight||"all"===this._renderLineHighlight)&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}_shouldRenderThis(){return!0}_shouldRenderOther(){return("line"===this._renderLineHighlight||"all"===this._renderLineHighlight)&&this._selectionIsEmpty&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}}(0,Pe.Ic)(((e,t)=>{at=!1;const i=e.getColor(Oe.Kh);if(i&&(t.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${i}; }`),t.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${i}; border: none; }`)),!i||i.isTransparent()||e.defines(Oe.Mm)){const i=e.getColor(Oe.Mm);i&&(at=!0,t.addRule(`.monaco-editor .view-overlays .current-line { border: 2px solid ${i}; }`),t.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { border: 2px solid ${i}; }`),"hc"===e.type&&(t.addRule(".monaco-editor .view-overlays .current-line { border-width: 1px; }"),t.addRule(".monaco-editor .margin-view-overlays .current-line-margin { border-width: 1px; }")))}}));i(74953);class ht extends Ae{constructor(e){super(),this._context=e;const t=this._context.configuration.options;this._lineHeight=t.get(58),this._typicalHalfwidthCharacterWidth=t.get(43).typicalHalfwidthCharacterWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options;return this._lineHeight=t.get(58),this._typicalHalfwidthCharacterWidth=t.get(43).typicalHalfwidthCharacterWidth,!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged||e.scrollWidthChanged}onZonesChanged(e){return!0}prepareRender(e){const t=e.getDecorationsInViewport();let i=[],n=0;for(let e=0,o=t.length;e<o;e++){const o=t[e];o.options.className&&(i[n++]=o)}i=i.sort(((e,t)=>{if(e.options.zIndex<t.options.zIndex)return-1;if(e.options.zIndex>t.options.zIndex)return 1;const i=e.options.className,n=t.options.className;return i<n?-1:i>n?1:re.e.compareRangesUsingStarts(e.range,t.range)}));const o=e.visibleRange.startLineNumber,s=e.visibleRange.endLineNumber,r=[];for(let e=o;e<=s;e++){r[e-o]=""}this._renderWholeLineDecorations(e,i,r),this._renderNormalDecorations(e,i,r),this._renderResult=r}_renderWholeLineDecorations(e,t,i){const n=String(this._lineHeight),o=e.visibleRange.startLineNumber,s=e.visibleRange.endLineNumber;for(let e=0,r=t.length;e<r;e++){const r=t[e];if(!r.options.isWholeLine)continue;const a='<div class="cdr '+r.options.className+'" style="left:0;width:100%;height:'+n+'px;"></div>',l=Math.max(r.range.startLineNumber,o),c=Math.min(r.range.endLineNumber,s);for(let e=l;e<=c;e++){i[e-o]+=a}}}_renderNormalDecorations(e,t,i){const n=String(this._lineHeight),o=e.visibleRange.startLineNumber;let s=null,r=!1,a=null;for(let l=0,c=t.length;l<c;l++){const c=t[l];if(c.options.isWholeLine)continue;const d=c.options.className,h=Boolean(c.options.showIfCollapsed);let u=c.range;h&&1===u.endColumn&&u.endLineNumber!==u.startLineNumber&&(u=new re.e(u.startLineNumber,u.startColumn,u.endLineNumber-1,this._context.model.getLineMaxColumn(u.endLineNumber-1))),s===d&&r===h&&re.e.areIntersectingOrTouching(a,u)?a=re.e.plusRange(a,u):(null!==s&&this._renderNormalDecoration(e,a,s,r,n,o,i),s=d,r=h,a=u)}null!==s&&this._renderNormalDecoration(e,a,s,r,n,o,i)}_renderNormalDecoration(e,t,i,n,o,s,r){const a=e.linesVisibleRangesForRange(t,"findMatch"===i);if(a)for(let e=0,t=a.length;e<t;e++){const t=a[e];if(t.outsideRenderedLine)continue;const l=t.lineNumber-s;if(n&&1===t.ranges.length){const e=t.ranges[0];0===e.width&&(t.ranges[0]=new B(e.left,this._typicalHalfwidthCharacterWidth))}for(let e=0,n=t.ranges.length;e<n;e++){const n=t.ranges[e],s='<div class="cdr '+i+'" style="left:'+String(n.left)+"px;width:"+String(n.width)+"px;height:"+o+'px;"></div>';r[l]+=s}}}render(e,t){if(!this._renderResult)return"";const i=t-e;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}var ut=i(9802),gt=i(73910);class pt extends A{constructor(e,t,i,n){super(e);const o=this._context.configuration.options,s=o.get(91),r=o.get(66),a=o.get(34),l=o.get(94),d={listenOnDomNode:i.domNode,className:"editor-scrollable "+(0,Pe.m6)(e.theme.type),useShadows:!1,lazyRender:!0,vertical:s.vertical,horizontal:s.horizontal,verticalHasArrows:s.verticalHasArrows,horizontalHasArrows:s.horizontalHasArrows,verticalScrollbarSize:s.verticalScrollbarSize,verticalSliderSize:s.verticalSliderSize,horizontalScrollbarSize:s.horizontalScrollbarSize,horizontalSliderSize:s.horizontalSliderSize,handleMouseWheel:s.handleMouseWheel,alwaysConsumeMouseWheel:s.alwaysConsumeMouseWheel,arrowSize:s.arrowSize,mouseWheelScrollSensitivity:r,fastScrollSensitivity:a,scrollPredominantAxis:l,scrollByPage:s.scrollByPage};this.scrollbar=this._register(new ut.$Z(t.domNode,d,this._context.viewLayout.getScrollable())),O.write(this.scrollbar.getDomNode(),5),this.scrollbarDomNode=(0,_.X)(this.scrollbar.getDomNode()),this.scrollbarDomNode.setPosition("absolute"),this._setLayout();const h=(e,t,i)=>{const n={};if(t){const t=e.scrollTop;t&&(n.scrollTop=this._context.viewLayout.getCurrentScrollTop()+t,e.scrollTop=0)}if(i){const t=e.scrollLeft;t&&(n.scrollLeft=this._context.viewLayout.getCurrentScrollLeft()+t,e.scrollLeft=0)}this._context.model.setScrollPosition(n,1)};this._register(c.nm(i.domNode,"scroll",(e=>h(i.domNode,!0,!0)))),this._register(c.nm(t.domNode,"scroll",(e=>h(t.domNode,!0,!1)))),this._register(c.nm(n.domNode,"scroll",(e=>h(n.domNode,!0,!1)))),this._register(c.nm(this.scrollbarDomNode.domNode,"scroll",(e=>h(this.scrollbarDomNode.domNode,!0,!1))))}dispose(){super.dispose()}_setLayout(){const e=this._context.configuration.options,t=e.get(129);this.scrollbarDomNode.setLeft(t.contentLeft);"right"===e.get(64).side?this.scrollbarDomNode.setWidth(t.contentWidth+t.minimap.minimapWidth):this.scrollbarDomNode.setWidth(t.contentWidth),this.scrollbarDomNode.setHeight(t.height)}getOverviewRulerLayoutInfo(){return this.scrollbar.getOverviewRulerLayoutInfo()}getDomNode(){return this.scrollbarDomNode}delegateVerticalScrollbarMouseDown(e){this.scrollbar.delegateVerticalScrollbarMouseDown(e)}onConfigurationChanged(e){if(e.hasChanged(91)||e.hasChanged(66)||e.hasChanged(34)){const e=this._context.configuration.options,t=e.get(91),i=e.get(66),n=e.get(34),o=e.get(94),s={vertical:t.vertical,horizontal:t.horizontal,verticalScrollbarSize:t.verticalScrollbarSize,horizontalScrollbarSize:t.horizontalScrollbarSize,scrollByPage:t.scrollByPage,handleMouseWheel:t.handleMouseWheel,mouseWheelScrollSensitivity:i,fastScrollSensitivity:n,scrollPredominantAxis:o};this.scrollbar.updateOptions(s)}return e.hasChanged(129)&&this._setLayout(),!0}onScrollChanged(e){return!0}onThemeChanged(e){return this.scrollbar.updateClassName("editor-scrollable "+(0,Pe.m6)(this._context.theme.type)),!0}prepareRender(e){}render(e){this.scrollbar.renderNow()}}(0,Pe.Ic)(((e,t)=>{const i=e.getColor(gt._w);i&&t.addRule(`\n\t\t\t.monaco-scrollable-element > .shadow.top {\n\t\t\t\tbox-shadow: ${i} 0 6px 6px -6px inset;\n\t\t\t}\n\n\t\t\t.monaco-scrollable-element > .shadow.left {\n\t\t\t\tbox-shadow: ${i} 6px 0 6px -6px inset;\n\t\t\t}\n\n\t\t\t.monaco-scrollable-element > .shadow.top.left {\n\t\t\t\tbox-shadow: ${i} 6px 6px 6px -6px inset;\n\t\t\t}\n\t\t`);const n=e.getColor(gt.et);n&&t.addRule(`\n\t\t\t.monaco-scrollable-element > .scrollbar > .slider {\n\t\t\t\tbackground: ${n};\n\t\t\t}\n\t\t`);const o=e.getColor(gt.AB);o&&t.addRule(`\n\t\t\t.monaco-scrollable-element > .scrollbar > .slider:hover {\n\t\t\t\tbackground: ${o};\n\t\t\t}\n\t\t`);const s=e.getColor(gt.yn);s&&t.addRule(`\n\t\t\t.monaco-scrollable-element > .scrollbar > .slider.active {\n\t\t\t\tbackground: ${s};\n\t\t\t}\n\t\t`)}));i(15582);class ft{constructor(e,t,i){this._decorationToRenderBrand=void 0,this.startLineNumber=+e,this.endLineNumber=+t,this.className=String(i)}}class mt extends Ae{_render(e,t,i){const n=[];for(let i=e;i<=t;i++){n[i-e]=[]}if(0===i.length)return n;i.sort(((e,t)=>e.className===t.className?e.startLineNumber===t.startLineNumber?e.endLineNumber-t.endLineNumber:e.startLineNumber-t.startLineNumber:e.className<t.className?-1:1));let o=null,s=0;for(let r=0,a=i.length;r<a;r++){const a=i[r],l=a.className;let c=Math.max(a.startLineNumber,e)-e;const d=Math.min(a.endLineNumber,t)-e;o===l?(c=Math.max(s+1,c),s=Math.max(s,d)):(o=l,s=d);for(let e=c;e<=s;e++)n[e].push(o)}return n}}class vt extends mt{constructor(e){super(),this._context=e;const t=this._context.configuration.options,i=t.get(129);this._lineHeight=t.get(58),this._glyphMargin=t.get(49),this._glyphMarginLeft=i.glyphMarginLeft,this._glyphMarginWidth=i.glyphMarginWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(129);return this._lineHeight=t.get(58),this._glyphMargin=t.get(49),this._glyphMarginLeft=i.glyphMarginLeft,this._glyphMarginWidth=i.glyphMarginWidth,!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}_getDecorations(e){const t=e.getDecorationsInViewport();let i=[],n=0;for(let e=0,o=t.length;e<o;e++){const o=t[e],s=o.options.glyphMarginClassName;s&&(i[n++]=new ft(o.range.startLineNumber,o.range.endLineNumber,s))}return i}prepareRender(e){if(!this._glyphMargin)return void(this._renderResult=null);const t=e.visibleRange.startLineNumber,i=e.visibleRange.endLineNumber,n=this._render(t,i,this._getDecorations(e)),o=this._lineHeight.toString(),s='" style="left:'+this._glyphMarginLeft.toString()+"px;width:"+this._glyphMarginWidth.toString()+"px;height:"+o+'px;"></div>',r=[];for(let e=t;e<=i;e++){const i=e-t,o=n[i];0===o.length?r[i]="":r[i]='<div class="cgmr codicon '+o.join(" ")+s}this._renderResult=r}render(e,t){if(!this._renderResult)return"";const i=t-e;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}i(28335);var _t=i(84973),bt=i(44174),wt=i(98401);class yt extends Ae{constructor(e){super(),this._context=e,this._primaryPosition=null;const t=this._context.configuration.options,i=t.get(130),n=t.get(43);this._lineHeight=t.get(58),this._spaceWidth=n.spaceWidth,this._maxIndentLeft=-1===i.wrappingColumn?-1:i.wrappingColumn*n.typicalHalfwidthCharacterWidth,this._bracketPairGuideOptions=t.get(13),this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(130),n=t.get(43);return this._lineHeight=t.get(58),this._spaceWidth=n.spaceWidth,this._maxIndentLeft=-1===i.wrappingColumn?-1:i.wrappingColumn*n.typicalHalfwidthCharacterWidth,this._bracketPairGuideOptions=t.get(13),!0}onCursorStateChanged(e){var t;const i=e.selections[0].getPosition();return!(null===(t=this._primaryPosition)||void 0===t?void 0:t.equals(i))&&(this._primaryPosition=i,!0)}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}onLanguageConfigurationChanged(e){return!0}prepareRender(e){var t,i,n,o;if(!this._bracketPairGuideOptions.indentation&&!1===this._bracketPairGuideOptions.bracketPairs)return void(this._renderResult=null);const s=e.visibleRange.startLineNumber,r=e.visibleRange.endLineNumber,a=e.scrollWidth,l=this._lineHeight,c=this._primaryPosition,d=this.getGuidesByLine(s,r,c),h=[];for(let c=s;c<=r;c++){const r=c-s,u=d[r];let g="";const p=null!==(i=null===(t=e.visibleRangeForPosition(new se.L(c,1)))||void 0===t?void 0:t.left)&&void 0!==i?i:0;for(const t of u){const i=p+(t.visibleColumn-1)*this._spaceWidth;if(i>a||this._maxIndentLeft>0&&i>this._maxIndentLeft)break;const s=t.horizontalLine?t.horizontalLine.top?"horizontal-top":"horizontal-bottom":"vertical",r=t.horizontalLine?(null!==(o=null===(n=e.visibleRangeForPosition(new se.L(c,t.horizontalLine.endColumn)))||void 0===n?void 0:n.left)&&void 0!==o?o:i+this._spaceWidth)-i:this._spaceWidth;g+=`<div class="core-guide ${t.className} ${s}" style="left:${i}px;height:${l}px;width:${r}px"></div>`}h[r]=g}this._renderResult=h}getGuidesByLine(e,t,i){const n=!1!==this._bracketPairGuideOptions.bracketPairs?this._context.model.getBracketGuidesInRangeByLine(e,t,i,{highlightActive:this._bracketPairGuideOptions.highlightActiveBracketPair,horizontalGuides:!0===this._bracketPairGuideOptions.bracketPairsHorizontal?_t.s6.Enabled:"active"===this._bracketPairGuideOptions.bracketPairsHorizontal?_t.s6.EnabledForActive:_t.s6.Disabled,includeInactive:!0===this._bracketPairGuideOptions.bracketPairs}):null,o=this._bracketPairGuideOptions.indentation?this._context.model.getLinesIndentGuides(e,t):null;let s=0,r=0,a=0;if(this._bracketPairGuideOptions.highlightActiveIndentation&&i){const n=this._context.model.getActiveIndentGuide(i.lineNumber,e,t);s=n.startLineNumber,r=n.endLineNumber,a=n.indent}const{indentSize:l}=this._context.model.getTextModelOptions(),c=[];for(let i=e;i<=t;i++){const t=new Array;c.push(t);const d=n?n[i-e]:[],h=new rt.H9(d),u=o?o[i-e]:[];for(let e=1;e<=u;e++){const n=(e-1)*l+1,o=0===d.length&&s<=i&&i<=r&&e===a;t.push(...h.takeWhile((e=>e.visibleColumn<n))||[]);const c=h.peek();c&&c.visibleColumn===n&&!c.horizontalLine||t.push(new _t.UO(n,o?"core-guide-indent-active":"core-guide-indent",null))}t.push(...h.takeWhile((e=>!0))||[])}return c}render(e,t){if(!this._renderResult)return"";const i=t-e;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}function Ct(e){if(!e||!e.isTransparent())return e}(0,Pe.Ic)(((e,t)=>{const i=e.getColor(Oe.tR);i&&t.addRule(`.monaco-editor .lines-content .core-guide-indent { box-shadow: 1px 0 0 0 ${i} inset; }`);const n=e.getColor(Oe.Ym)||i;n&&t.addRule(`.monaco-editor .lines-content .core-guide-indent-active { box-shadow: 1px 0 0 0 ${n} inset; }`);const o=[{bracketColor:Oe.zJ,guideColor:Oe.oV,guideColorActive:Oe.Qb},{bracketColor:Oe.Vs,guideColor:Oe.m$,guideColorActive:Oe.m3},{bracketColor:Oe.CE,guideColor:Oe.DS,guideColorActive:Oe.To},{bracketColor:Oe.UP,guideColor:Oe.lS,guideColorActive:Oe.L7},{bracketColor:Oe.r0,guideColor:Oe.Jn,guideColorActive:Oe.HV},{bracketColor:Oe.m1,guideColor:Oe.YF,guideColorActive:Oe.f9}],s=new bt.WE;let r=o.map((t=>{var i,n;const o=e.getColor(t.bracketColor),s=e.getColor(t.guideColor),r=e.getColor(t.guideColorActive),a=Ct(null!==(i=Ct(s))&&void 0!==i?i:null==o?void 0:o.transparent(.3)),l=Ct(null!==(n=Ct(r))&&void 0!==n?n:o);if(a&&l)return{guideColor:a,guideColorActive:l}})).filter(wt.$K);if(r.length>0){for(let e=0;e<30;e++){const i=r[e%r.length];t.addRule(`.monaco-editor .${s.getInlineClassNameOfLevel(e).replace(/ /g,".")} { --guide-color: ${i.guideColor}; --guide-color-active: ${i.guideColorActive}; }`)}t.addRule(".monaco-editor .vertical { box-shadow: 1px 0 0 0 var(--guide-color) inset; }"),t.addRule(".monaco-editor .horizontal-top { border-top: 1px solid var(--guide-color); }"),t.addRule(".monaco-editor .horizontal-bottom { border-bottom: 1px solid var(--guide-color); }"),t.addRule(`.monaco-editor .vertical.${s.activeClassName} { box-shadow: 1px 0 0 0 var(--guide-color-active) inset; }`),t.addRule(`.monaco-editor .horizontal-top.${s.activeClassName} { border-top: 1px solid var(--guide-color-active); }`),t.addRule(`.monaco-editor .horizontal-bottom.${s.activeClassName} { border-bottom: 1px solid var(--guide-color-active); }`)}}));i(20357);class xt{constructor(){this._currentVisibleRange=new re.e(1,1,1,1)}getCurrentVisibleRange(){return this._currentVisibleRange}setCurrentVisibleRange(e){this._currentVisibleRange=e}}class St{constructor(e,t,i,n,o,s){this.lineNumber=e,this.startColumn=t,this.endColumn=i,this.startScrollTop=n,this.stopScrollTop=o,this.scrollType=s,this.type="range",this.minLineNumber=e,this.maxLineNumber=e}}class kt{constructor(e,t,i,n){this.selections=e,this.startScrollTop=t,this.stopScrollTop=i,this.scrollType=n,this.type="selections";let o=e[0].startLineNumber,s=e[0].endLineNumber;for(let t=1,i=e.length;t<i;t++){const i=e[t];o=Math.min(o,i.startLineNumber),s=Math.max(s,i.endLineNumber)}this.minLineNumber=o,this.maxLineNumber=s}}class Lt extends A{constructor(e,t){super(e),this._linesContent=t,this._textRangeRestingSpot=document.createElement("div"),this._visibleLines=new Ye(this),this.domNode=this._visibleLines.domNode;const i=this._context.configuration,n=this._context.configuration.options,o=n.get(43),s=n.get(130);this._lineHeight=n.get(58),this._typicalHalfwidthCharacterWidth=o.typicalHalfwidthCharacterWidth,this._isViewportWrapping=s.isViewportWrapping,this._revealHorizontalRightPadding=n.get(88),this._cursorSurroundingLines=n.get(25),this._cursorSurroundingLinesStyle=n.get(26),this._canUseLayerHinting=!n.get(28),this._viewLineOptions=new Y(i,this._context.theme.type),O.write(this.domNode,7),this.domNode.setClassName(`view-lines ${Ve.S}`),p.V.applyFontInfo(this.domNode,o),this._maxLineWidth=0,this._asyncUpdateLineWidths=new C.pY((()=>{this._updateLineWidthsSlow()}),200),this._asyncCheckMonospaceFontAssumptions=new C.pY((()=>{this._checkMonospaceFontAssumptions()}),2e3),this._lastRenderedData=new xt,this._horizontalRevealRequest=null}dispose(){this._asyncUpdateLineWidths.dispose(),this._asyncCheckMonospaceFontAssumptions.dispose(),super.dispose()}getDomNode(){return this.domNode}createVisibleLine(){return new Q(this._viewLineOptions)}onConfigurationChanged(e){this._visibleLines.onConfigurationChanged(e),e.hasChanged(130)&&(this._maxLineWidth=0);const t=this._context.configuration.options,i=t.get(43),n=t.get(130);return this._lineHeight=t.get(58),this._typicalHalfwidthCharacterWidth=i.typicalHalfwidthCharacterWidth,this._isViewportWrapping=n.isViewportWrapping,this._revealHorizontalRightPadding=t.get(88),this._cursorSurroundingLines=t.get(25),this._cursorSurroundingLinesStyle=t.get(26),this._canUseLayerHinting=!t.get(28),p.V.applyFontInfo(this.domNode,i),this._onOptionsMaybeChanged(),e.hasChanged(129)&&(this._maxLineWidth=0),!0}_onOptionsMaybeChanged(){const e=this._context.configuration,t=new Y(e,this._context.theme.type);if(!this._viewLineOptions.equals(t)){this._viewLineOptions=t;const e=this._visibleLines.getStartLineNumber(),i=this._visibleLines.getEndLineNumber();for(let t=e;t<=i;t++){this._visibleLines.getVisibleLine(t).onOptionsChanged(this._viewLineOptions)}return!0}return!1}onCursorStateChanged(e){const t=this._visibleLines.getStartLineNumber(),i=this._visibleLines.getEndLineNumber();let n=!1;for(let e=t;e<=i;e++)n=this._visibleLines.getVisibleLine(e).onSelectionChanged()||n;return n}onDecorationsChanged(e){{const e=this._visibleLines.getStartLineNumber(),t=this._visibleLines.getEndLineNumber();for(let i=e;i<=t;i++)this._visibleLines.getVisibleLine(i).onDecorationsChanged()}return!0}onFlushed(e){const t=this._visibleLines.onFlushed(e);return this._maxLineWidth=0,t}onLinesChanged(e){return this._visibleLines.onLinesChanged(e)}onLinesDeleted(e){return this._visibleLines.onLinesDeleted(e)}onLinesInserted(e){return this._visibleLines.onLinesInserted(e)}onRevealRangeRequest(e){const t=this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(),e.source,e.range,e.selections,e.verticalType);if(-1===t)return!1;let i=this._context.viewLayout.validateScrollPosition({scrollTop:t});e.revealHorizontal?e.range&&e.range.startLineNumber!==e.range.endLineNumber?i={scrollTop:i.scrollTop,scrollLeft:0}:e.range?this._horizontalRevealRequest=new St(e.range.startLineNumber,e.range.startColumn,e.range.endColumn,this._context.viewLayout.getCurrentScrollTop(),i.scrollTop,e.scrollType):e.selections&&e.selections.length>0&&(this._horizontalRevealRequest=new kt(e.selections,this._context.viewLayout.getCurrentScrollTop(),i.scrollTop,e.scrollType)):this._horizontalRevealRequest=null;const n=Math.abs(this._context.viewLayout.getCurrentScrollTop()-i.scrollTop)<=this._lineHeight?1:e.scrollType;return this._context.model.setScrollPosition(i,n),!0}onScrollChanged(e){if(this._horizontalRevealRequest&&e.scrollLeftChanged&&(this._horizontalRevealRequest=null),this._horizontalRevealRequest&&e.scrollTopChanged){const t=Math.min(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop),i=Math.max(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop);(e.scrollTop<t||e.scrollTop>i)&&(this._horizontalRevealRequest=null)}return this.domNode.setWidth(e.scrollWidth),this._visibleLines.onScrollChanged(e)||!0}onTokensChanged(e){return this._visibleLines.onTokensChanged(e)}onZonesChanged(e){return this._context.model.setMaxLineWidth(this._maxLineWidth),this._visibleLines.onZonesChanged(e)}onThemeChanged(e){return this._onOptionsMaybeChanged()}getPositionFromDOMInfo(e,t){const i=this._getViewLineDomNode(e);if(null===i)return null;const n=this._getLineNumberFor(i);if(-1===n)return null;if(n<1||n>this._context.model.getLineCount())return null;if(1===this._context.model.getLineMaxColumn(n))return new se.L(n,1);const o=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();if(n<o||n>s)return null;let r=this._visibleLines.getVisibleLine(n).getColumnOfNodeOffset(n,e,t);const a=this._context.model.getLineMinColumn(n);return r<a&&(r=a),new se.L(n,r)}_getViewLineDomNode(e){for(;e&&1===e.nodeType;){if(e.className===Q.CLASS_NAME)return e;e=e.parentElement}return null}_getLineNumberFor(e){const t=this._visibleLines.getStartLineNumber(),i=this._visibleLines.getEndLineNumber();for(let n=t;n<=i;n++){if(e===this._visibleLines.getVisibleLine(n).getDomNode())return n}return-1}getLineWidth(e){const t=this._visibleLines.getStartLineNumber(),i=this._visibleLines.getEndLineNumber();return e<t||e>i?-1:this._visibleLines.getVisibleLine(e).getWidth()}linesVisibleRangesForRange(e,t){if(this.shouldRender())return null;const i=e.endLineNumber,n=re.e.intersectRanges(e,this._lastRenderedData.getCurrentVisibleRange());if(!n)return null;let o=[],s=0;const r=new G(this.domNode.domNode,this._textRangeRestingSpot);let a=0;t&&(a=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new se.L(n.startLineNumber,1)).lineNumber);const l=this._visibleLines.getStartLineNumber(),c=this._visibleLines.getEndLineNumber();for(let e=n.startLineNumber;e<=n.endLineNumber;e++){if(e<l||e>c)continue;const d=e===n.startLineNumber?n.startColumn:1,h=e===n.endLineNumber?n.endColumn:this._context.model.getLineMaxColumn(e),u=this._visibleLines.getVisibleLine(e).getVisibleRangesForRange(e,d,h,r);if(u){if(t&&e<i){const t=a;a=this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new se.L(e+1,1)).lineNumber,t!==a&&(u.ranges[u.ranges.length-1].width+=this._typicalHalfwidthCharacterWidth)}o[s++]=new F(u.outsideRenderedLine,e,B.from(u.ranges))}}return 0===s?null:o}_visibleRangesForLineRange(e,t,i){return this.shouldRender()||e<this._visibleLines.getStartLineNumber()||e>this._visibleLines.getEndLineNumber()?null:this._visibleLines.getVisibleLine(e).getVisibleRangesForRange(e,t,i,new G(this.domNode.domNode,this._textRangeRestingSpot))}visibleRangeForPosition(e){const t=this._visibleRangesForLineRange(e.lineNumber,e.column,e.column);return t?new W(t.outsideRenderedLine,t.ranges[0].left):null}updateLineWidths(){this._updateLineWidths(!1)}_updateLineWidthsFast(){return this._updateLineWidths(!0)}_updateLineWidthsSlow(){this._updateLineWidths(!1)}_updateLineWidths(e){const t=this._visibleLines.getStartLineNumber(),i=this._visibleLines.getEndLineNumber();let n=1,o=!0;for(let s=t;s<=i;s++){const t=this._visibleLines.getVisibleLine(s);!e||t.getWidthIsFast()?n=Math.max(n,t.getWidth()):o=!1}return o&&1===t&&i===this._context.model.getLineCount()&&(this._maxLineWidth=0),this._ensureMaxLineWidth(n),o}_checkMonospaceFontAssumptions(){let e=-1,t=-1;const i=this._visibleLines.getStartLineNumber(),n=this._visibleLines.getEndLineNumber();for(let o=i;o<=n;o++){const i=this._visibleLines.getVisibleLine(o);if(i.needsMonospaceFontCheck()){const n=i.getWidth();n>t&&(t=n,e=o)}}if(-1!==e&&!this._visibleLines.getVisibleLine(e).monospaceAssumptionsAreValid())for(let e=i;e<=n;e++){this._visibleLines.getVisibleLine(e).onMonospaceAssumptionsInvalidated()}}prepareRender(){throw new Error("Not supported")}render(){throw new Error("Not supported")}renderText(e){if(this._visibleLines.renderLines(e),this._lastRenderedData.setCurrentVisibleRange(e.visibleRange),this.domNode.setWidth(this._context.viewLayout.getScrollWidth()),this.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(),1e6)),this._horizontalRevealRequest){const t=this._horizontalRevealRequest;if(e.startLineNumber<=t.minLineNumber&&t.maxLineNumber<=e.endLineNumber){this._horizontalRevealRequest=null,this.onDidRender();const e=this._computeScrollLeftToReveal(t);e&&(this._isViewportWrapping||this._ensureMaxLineWidth(e.maxHorizontalOffset),this._context.model.setScrollPosition({scrollLeft:e.scrollLeft},t.scrollType))}}if(this._updateLineWidthsFast()||this._asyncUpdateLineWidths.schedule(),b.IJ&&!this._asyncCheckMonospaceFontAssumptions.isScheduled()){const e=this._visibleLines.getStartLineNumber(),t=this._visibleLines.getEndLineNumber();for(let i=e;i<=t;i++){if(this._visibleLines.getVisibleLine(i).needsMonospaceFontCheck()){this._asyncCheckMonospaceFontAssumptions.schedule();break}}}this._linesContent.setLayerHinting(this._canUseLayerHinting),this._linesContent.setContain("strict");const t=this._context.viewLayout.getCurrentScrollTop()-e.bigNumbersDelta;this._linesContent.setTop(-t),this._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft())}_ensureMaxLineWidth(e){const t=Math.ceil(e);this._maxLineWidth<t&&(this._maxLineWidth=t,this._context.model.setMaxLineWidth(this._maxLineWidth))}_computeScrollTopToRevealRange(e,t,i,n,o){const s=e.top,r=e.height,a=s+r;let l,c,d;if(n&&n.length>0){let e=n[0].startLineNumber,t=n[0].endLineNumber;for(let i=1,o=n.length;i<o;i++){const o=n[i];e=Math.min(e,o.startLineNumber),t=Math.max(t,o.endLineNumber)}l=!1,c=this._context.viewLayout.getVerticalOffsetForLineNumber(e),d=this._context.viewLayout.getVerticalOffsetForLineNumber(t)+this._lineHeight}else{if(!i)return-1;l=!0,c=this._context.viewLayout.getVerticalOffsetForLineNumber(i.startLineNumber),d=this._context.viewLayout.getVerticalOffsetForLineNumber(i.endLineNumber)+this._lineHeight}if(!("mouse"===t&&"default"===this._cursorSurroundingLinesStyle)){const e=Math.min(r/this._lineHeight/2,this._cursorSurroundingLines);c-=e*this._lineHeight,d+=Math.max(0,e-1)*this._lineHeight}let h;if(0!==o&&4!==o||(d+=this._lineHeight),d-c>r){if(!l)return-1;h=c}else if(5===o||6===o)if(6===o&&s<=c&&d<=a)h=s;else{const e=c-Math.max(5*this._lineHeight,.2*r),t=d-r;h=Math.max(t,e)}else if(1===o||2===o)if(2===o&&s<=c&&d<=a)h=s;else{const e=(c+d)/2;h=Math.max(0,e-r/2)}else h=this._computeMinimumScrolling(s,a,c,d,3===o,4===o);return h}_computeScrollLeftToReveal(e){const t=this._context.viewLayout.getCurrentViewport(),i=t.left,n=i+t.width;let o=1073741824,s=0;if("range"===e.type){const t=this._visibleRangesForLineRange(e.lineNumber,e.startColumn,e.endColumn);if(!t)return null;for(const e of t.ranges)o=Math.min(o,Math.round(e.left)),s=Math.max(s,Math.round(e.left+e.width))}else for(const t of e.selections){if(t.startLineNumber!==t.endLineNumber)return null;const e=this._visibleRangesForLineRange(t.startLineNumber,t.startColumn,t.endColumn);if(!e)return null;for(const t of e.ranges)o=Math.min(o,Math.round(t.left)),s=Math.max(s,Math.round(t.left+t.width))}if(o=Math.max(0,o-Lt.HORIZONTAL_EXTRA_PX),s+=this._revealHorizontalRightPadding,"selections"===e.type&&s-o>t.width)return null;return{scrollLeft:this._computeMinimumScrolling(i,n,o,s),maxHorizontalOffset:s}}_computeMinimumScrolling(e,t,i,n,o,s){o=!!o,s=!!s;const r=(t|=0)-(e|=0);return(n|=0)-(i|=0)<r?o?i:s?Math.max(0,n-r):i<e?i:n>t?Math.max(0,n-r):e:i}}Lt.HORIZONTAL_EXTRA_PX=30;i(84160);class Nt extends mt{constructor(e){super(),this._context=e;const t=this._context.configuration.options.get(129);this._decorationsLeft=t.decorationsLeft,this._decorationsWidth=t.decorationsWidth,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options.get(129);return this._decorationsLeft=t.decorationsLeft,this._decorationsWidth=t.decorationsWidth,!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}_getDecorations(e){const t=e.getDecorationsInViewport();let i=[],n=0;for(let e=0,o=t.length;e<o;e++){const o=t[e],s=o.options.linesDecorationsClassName;s&&(i[n++]=new ft(o.range.startLineNumber,o.range.endLineNumber,s));const r=o.options.firstLineDecorationClassName;r&&(i[n++]=new ft(o.range.startLineNumber,o.range.startLineNumber,r))}return i}prepareRender(e){const t=e.visibleRange.startLineNumber,i=e.visibleRange.endLineNumber,n=this._render(t,i,this._getDecorations(e)),o='" style="left:'+this._decorationsLeft.toString()+"px;width:"+this._decorationsWidth.toString()+'px;"></div>',s=[];for(let e=t;e<=i;e++){const i=e-t,r=n[i];let a="";for(let e=0,t=r.length;e<t;e++)a+='<div class="cldr '+r[e]+o;s[i]=a}this._renderResult=s}render(e,t){return this._renderResult?this._renderResult[t-e]:""}}i(76206);class Dt extends mt{constructor(e){super(),this._context=e,this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){return!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}_getDecorations(e){const t=e.getDecorationsInViewport();let i=[],n=0;for(let e=0,o=t.length;e<o;e++){const o=t[e],s=o.options.marginClassName;s&&(i[n++]=new ft(o.range.startLineNumber,o.range.endLineNumber,s))}return i}prepareRender(e){const t=e.visibleRange.startLineNumber,i=e.visibleRange.endLineNumber,n=this._render(t,i,this._getDecorations(e)),o=[];for(let e=t;e<=i;e++){const i=e-t,s=n[i];let r="";for(let e=0,t=s.length;e<t;e++)r+='<div class="cmdr '+s[e]+'" style=""></div>';o[i]=r}this._renderResult=o}render(e,t){return this._renderResult?this._renderResult[t-e]:""}}i(55229);class It{constructor(e,t,i,n){this._rgba8Brand=void 0,this.r=It._clamp(e),this.g=It._clamp(t),this.b=It._clamp(i),this.a=It._clamp(n)}equals(e){return this.r===e.r&&this.g===e.g&&this.b===e.b&&this.a===e.a}static _clamp(e){return e<0?0:e>255?255:0|e}}It.Empty=new It(0,0,0,0);var Et=i(44101);class Tt extends u.JT{constructor(){super(),this._onDidChange=new h.Q5,this.onDidChange=this._onDidChange.event,this._updateColorMap(),this._register(Et.RW.onDidChange((e=>{e.changedColorMap&&this._updateColorMap()})))}static getInstance(){return this._INSTANCE||(this._INSTANCE=(0,u.dk)(new Tt)),this._INSTANCE}_updateColorMap(){const e=Et.RW.getColorMap();if(!e)return this._colors=[It.Empty],void(this._backgroundIsLight=!0);this._colors=[It.Empty];for(let t=1;t<e.length;t++){const i=e[t].rgba;this._colors[t]=new It(i.r,i.g,i.b,Math.round(255*i.a))}let t=e[2].getRelativeLuminance();this._backgroundIsLight=t>=.5,this._onDidChange.fire(void 0)}getColor(e){return(e<1||e>=this._colors.length)&&(e=2),this._colors[e]}backgroundIsLight(){return this._backgroundIsLight}}Tt._INSTANCE=null;var Mt=i(13824);const At=(()=>{const e=[];for(let t=32;t<=126;t++)e.push(t);return e.push(65533),e})();var Ot=i(85427);class Pt{constructor(e,t){this.scale=t,this._minimapCharRendererBrand=void 0,this.charDataNormal=Pt.soften(e,.8),this.charDataLight=Pt.soften(e,50/60)}static soften(e,t){let i=new Uint8ClampedArray(e.length);for(let n=0,o=e.length;n<o;n++)i[n]=(0,Ot.K)(e[n]*t);return i}renderChar(e,t,i,n,o,s,r,a,l,c,d){const h=1*this.scale,u=2*this.scale,g=d?1:u;if(t+h>e.width||i+g>e.height)return void console.warn("bad render request outside image data");const p=c?this.charDataLight:this.charDataNormal,f=((e,t)=>(e-=32)<0||e>96?t<=2?(e+96)%96:95:e)(n,l),m=4*e.width,v=r.r,_=r.g,b=r.b,w=o.r-v,y=o.g-_,C=o.b-b,x=Math.max(s,a),S=e.data;let k=f*h*u,L=i*m+4*t;for(let e=0;e<g;e++){let e=L;for(let t=0;t<h;t++){const t=p[k++]/255*(s/255);S[e++]=v+w*t,S[e++]=_+y*t,S[e++]=b+C*t,S[e++]=x}L+=m}}blockRenderChar(e,t,i,n,o,s,r,a){const l=1*this.scale,c=2*this.scale,d=a?1:c;if(t+l>e.width||i+d>e.height)return void console.warn("bad render request outside image data");const h=4*e.width,u=o/255*.5,g=s.r,p=s.g,f=s.b,m=g+(n.r-g)*u,v=p+(n.g-p)*u,_=f+(n.b-f)*u,b=Math.max(o,r),w=e.data;let y=i*h+4*t;for(let e=0;e<d;e++){let e=y;for(let t=0;t<l;t++)w[e++]=m,w[e++]=v,w[e++]=_,w[e++]=b;y+=h}}}var Rt=i(88289);const Ft={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15},Bt=e=>{const t=new Uint8ClampedArray(e.length/2);for(let i=0;i<e.length;i+=2)t[i>>1]=Ft[e[i]]<<4|15&Ft[e[i+1]];return t},Vt={1:(0,Rt.I)((()=>Bt("0000511D6300CF609C709645A78432005642574171487021003C451900274D35D762755E8B629C5BA856AF57BA649530C167D1512A272A3F6038604460398526BCA2A968DB6F8957C768BE5FBE2FB467CF5D8D5B795DC7625B5DFF50DE64C466DB2FC47CD860A65E9A2EB96CB54CE06DA763AB2EA26860524D3763536601005116008177A8705E53AB738E6A982F88BAA35B5F5B626D9C636B449B737E5B7B678598869A662F6B5B8542706C704C80736A607578685B70594A49715A4522E792"))),2:(0,Rt.I)((()=>Bt("000000000000000055394F383D2800008B8B1F210002000081B1CBCBCC820000847AAF6B9AAF2119BE08B8881AD60000A44FD07DCCF107015338130C00000000385972265F390B406E2437634B4B48031B12B8A0847000001E15B29A402F0000000000004B33460B00007A752C2A0000000000004D3900000084394B82013400ABA5CFC7AD9C0302A45A3E5A98AB000089A43382D97900008BA54AA087A70A0248A6A7AE6DBE0000BF6F94987EA40A01A06DCFA7A7A9030496C32F77891D0000A99FB1A0AFA80603B29AB9CA75930D010C0948354D3900000C0948354F37460D0028BE673D8400000000AF9D7B6E00002B007AA8933400007AA642675C2700007984CFB9C3985B768772A8A6B7B20000CAAECAAFC4B700009F94A6009F840009D09F9BA4CA9C0000CC8FC76DC87F0000C991C472A2000000A894A48CA7B501079BA2C9C69BA20000B19A5D3FA89000005CA6009DA2960901B0A7F0669FB200009D009E00B7890000DAD0F5D092820000D294D4C48BD10000B5A7A4A3B1A50402CAB6CBA6A2000000B5A7A4A3B1A8044FCDADD19D9CB00000B7778F7B8AAE0803C9AB5D3F5D3F00009EA09EA0BAB006039EA0989A8C7900009B9EF4D6B7C00000A9A7816CACA80000ABAC84705D3F000096DA635CDC8C00006F486F266F263D4784006124097B00374F6D2D6D2D6D4A3A95872322000000030000000000008D8939130000000000002E22A5C9CBC70600AB25C0B5C9B400061A2DB04CA67001082AA6BEBEBFC606002321DACBC19E03087AA08B6768380000282FBAC0B8CA7A88AD25BBA5A29900004C396C5894A6000040485A6E356E9442A32CD17EADA70000B4237923628600003E2DE9C1D7B500002F25BBA5A2990000231DB6AFB4A804023025C0B5CAB588062B2CBDBEC0C706882435A75CA20000002326BD6A82A908048B4B9A5A668000002423A09CB4BB060025259C9D8A7900001C1FCAB2C7C700002A2A9387ABA200002626A4A47D6E9D14333163A0C87500004B6F9C2D643A257049364936493647358A34438355497F1A0000A24C1D590000D38DFFBDD4CD3126")))};class Wt{static create(e,t){if(this.lastCreated&&e===this.lastCreated.scale&&t===this.lastFontFamily)return this.lastCreated;let i;return i=Vt[e]?new Pt(Vt[e](),e):Wt.createFromSampleData(Wt.createSampleData(t).data,e),this.lastFontFamily=t,this.lastCreated=i,i}static createSampleData(e){const t=document.createElement("canvas"),i=t.getContext("2d");t.style.height="16px",t.height=16,t.width=960,t.style.width="960px",i.fillStyle="#ffffff",i.font=`bold 16px ${e}`,i.textBaseline="middle";let n=0;for(const e of At)i.fillText(String.fromCharCode(e),n,8),n+=10;return i.getImageData(0,0,960,16)}static createFromSampleData(e,t){if(61440!==e.length)throw new Error("Unexpected source in MinimapCharRenderer");let i=Wt._downsample(e,t);return new Pt(i,t)}static _downsampleChar(e,t,i,n,o){const s=1*o,r=2*o;let a=n,l=0;for(let n=0;n<r;n++){const o=n/r*16,c=(n+1)/r*16;for(let n=0;n<s;n++){const r=n/s*10,d=(n+1)/s*10;let h=0,u=0;for(let i=o;i<c;i++){const n=t+3840*Math.floor(i),o=1-(i-Math.floor(i));for(let t=r;t<d;t++){const i=1-(t-Math.floor(t)),s=n+4*Math.floor(t),r=i*o;u+=r,h+=e[s]*e[s+3]/255*r}}const g=h/u;l=Math.max(l,g),i[a++]=(0,Ot.K)(g)}}return l}static _downsample(e,t){const i=2*t*1*t,n=96*i,o=new Uint8ClampedArray(n);let s=0,r=0,a=0;for(let n=0;n<96;n++)a=Math.max(a,this._downsampleChar(e,r,o,s,t)),s+=i,r+=40;if(a>0){const e=255/a;for(let t=0;t<n;t++)o[t]*=e}return o}}class Ht{constructor(e,t,i){const n=e.options,o=n.get(127),s=n.get(129),r=s.minimap,a=n.get(43),l=n.get(64);this.renderMinimap=r.renderMinimap,this.size=l.size,this.minimapHeightIsEditorHeight=r.minimapHeightIsEditorHeight,this.scrollBeyondLastLine=n.get(93),this.showSlider=l.showSlider,this.pixelRatio=o,this.typicalHalfwidthCharacterWidth=a.typicalHalfwidthCharacterWidth,this.lineHeight=n.get(58),this.minimapLeft=r.minimapLeft,this.minimapWidth=r.minimapWidth,this.minimapHeight=s.height,this.canvasInnerWidth=r.minimapCanvasInnerWidth,this.canvasInnerHeight=r.minimapCanvasInnerHeight,this.canvasOuterWidth=r.minimapCanvasOuterWidth,this.canvasOuterHeight=r.minimapCanvasOuterHeight,this.isSampling=r.minimapIsSampling,this.editorHeight=s.height,this.fontScale=r.minimapScale,this.minimapLineHeight=r.minimapLineHeight,this.minimapCharWidth=1*this.fontScale,this.charRenderer=(0,Rt.I)((()=>Wt.create(this.fontScale,a.fontFamily))),this.defaultBackgroundColor=i.getColor(2),this.backgroundColor=Ht._getMinimapBackground(t,this.defaultBackgroundColor),this.foregroundAlpha=Ht._getMinimapForegroundOpacity(t)}static _getMinimapBackground(e,t){const i=e.getColor(gt.kV);return i?new It(i.rgba.r,i.rgba.g,i.rgba.b,Math.round(255*i.rgba.a)):t}static _getMinimapForegroundOpacity(e){const t=e.getColor(gt.It);return t?It._clamp(Math.round(255*t.rgba.a)):255}equals(e){return this.renderMinimap===e.renderMinimap&&this.size===e.size&&this.minimapHeightIsEditorHeight===e.minimapHeightIsEditorHeight&&this.scrollBeyondLastLine===e.scrollBeyondLastLine&&this.showSlider===e.showSlider&&this.pixelRatio===e.pixelRatio&&this.typicalHalfwidthCharacterWidth===e.typicalHalfwidthCharacterWidth&&this.lineHeight===e.lineHeight&&this.minimapLeft===e.minimapLeft&&this.minimapWidth===e.minimapWidth&&this.minimapHeight===e.minimapHeight&&this.canvasInnerWidth===e.canvasInnerWidth&&this.canvasInnerHeight===e.canvasInnerHeight&&this.canvasOuterWidth===e.canvasOuterWidth&&this.canvasOuterHeight===e.canvasOuterHeight&&this.isSampling===e.isSampling&&this.editorHeight===e.editorHeight&&this.fontScale===e.fontScale&&this.minimapLineHeight===e.minimapLineHeight&&this.minimapCharWidth===e.minimapCharWidth&&this.defaultBackgroundColor&&this.defaultBackgroundColor.equals(e.defaultBackgroundColor)&&this.backgroundColor&&this.backgroundColor.equals(e.backgroundColor)&&this.foregroundAlpha===e.foregroundAlpha}}class zt{constructor(e,t,i,n,o,s,r,a){this.scrollTop=e,this.scrollHeight=t,this.sliderNeeded=i,this._computedSliderRatio=n,this.sliderTop=o,this.sliderHeight=s,this.startLineNumber=r,this.endLineNumber=a}getDesiredScrollTopFromDelta(e){return Math.round(this.scrollTop+e/this._computedSliderRatio)}getDesiredScrollTopFromTouchLocation(e){return Math.round((e-this.sliderHeight/2)/this._computedSliderRatio)}static create(e,t,i,n,o,s,r,a,l,c,d){const h=e.pixelRatio,u=e.minimapLineHeight,g=Math.floor(e.canvasInnerHeight/u),p=e.lineHeight;if(e.minimapHeightIsEditorHeight){const t=a*e.lineHeight+(e.scrollBeyondLastLine?o-e.lineHeight:0),i=Math.max(1,Math.floor(o*o/t)),n=Math.max(0,e.minimapHeight-i),s=n/(c-o),d=l*s,h=n>0,u=Math.floor(e.canvasInnerHeight/e.minimapLineHeight);return new zt(l,c,h,s,d,i,1,Math.min(r,u))}let f,m;if(s&&i!==r){const e=i-t+1;f=Math.floor(e*u/h)}else{const e=o/p;f=Math.floor(e*u/h)}m=e.scrollBeyondLastLine?(r-1)*u/h:Math.max(0,r*u/h-f),m=Math.min(e.minimapHeight-f,m);const v=m/(c-o),_=l*v;let b=0;if(e.scrollBeyondLastLine){b=o/p-1}if(g>=r+b){return new zt(l,c,m>0,v,_,f,1,r)}{let e=Math.max(1,Math.floor(t-_*h/u));d&&d.scrollHeight===c&&(d.scrollTop>l&&(e=Math.min(e,d.startLineNumber)),d.scrollTop<l&&(e=Math.max(e,d.startLineNumber)));const i=Math.min(r,e+g-1);return new zt(l,c,!0,v,(t-e+(l-n)/p)*u/h,f,e,i)}}}class jt{constructor(e){this.dy=e}onContentChanged(){this.dy=-1}onTokensChanged(){this.dy=-1}}jt.INVALID=new jt(-1);class Ut{constructor(e,t,i){this.renderedLayout=e,this._imageData=t,this._renderedLines=new Ge((()=>jt.INVALID)),this._renderedLines._set(e.startLineNumber,i)}linesEquals(e){if(!this.scrollEquals(e))return!1;const t=this._renderedLines._get().lines;for(let e=0,i=t.length;e<i;e++)if(-1===t[e].dy)return!1;return!0}scrollEquals(e){return this.renderedLayout.startLineNumber===e.startLineNumber&&this.renderedLayout.endLineNumber===e.endLineNumber}_get(){const e=this._renderedLines._get();return{imageData:this._imageData,rendLineNumberStart:e.rendLineNumberStart,lines:e.lines}}onLinesChanged(e,t){return this._renderedLines.onLinesChanged(e,t)}onLinesDeleted(e,t){this._renderedLines.onLinesDeleted(e,t)}onLinesInserted(e,t){this._renderedLines.onLinesInserted(e,t)}onTokensChanged(e){return this._renderedLines.onTokensChanged(e)}}class $t{constructor(e,t,i,n){this._backgroundFillData=$t._createBackgroundFillData(t,i,n),this._buffers=[e.createImageData(t,i),e.createImageData(t,i)],this._lastUsedBuffer=0}getBuffer(){this._lastUsedBuffer=1-this._lastUsedBuffer;const e=this._buffers[this._lastUsedBuffer];return e.data.set(this._backgroundFillData),e}static _createBackgroundFillData(e,t,i){const n=i.r,o=i.g,s=i.b,r=i.a,a=new Uint8ClampedArray(e*t*4);let l=0;for(let i=0;i<t;i++)for(let t=0;t<e;t++)a[l]=n,a[l+1]=o,a[l+2]=s,a[l+3]=r,l+=4;return a}}class Kt{constructor(e,t){this.samplingRatio=e,this.minimapLines=t}static compute(e,t,i){if(0===e.renderMinimap||!e.isSampling)return[null,[]];const n=e.pixelRatio,o=e.lineHeight,s=e.scrollBeyondLastLine,{minimapLineCount:r}=K.gk.computeContainedMinimapLineCount({viewLineCount:t,scrollBeyondLastLine:s,height:e.editorHeight,lineHeight:o,pixelRatio:n}),a=t/r,l=a/2;if(!i||0===i.minimapLines.length){let e=[];if(e[0]=1,r>1){for(let t=0,i=r-1;t<i;t++)e[t]=Math.round(t*a+l);e[r-1]=t}return[new Kt(a,e),[]]}const c=i.minimapLines,d=c.length;let h=[],u=0,g=0,p=1;let f=[],m=null;for(let e=0;e<r;e++){const i=Math.max(p,Math.round(e*a)),n=Math.max(i,Math.round((e+1)*a));for(;u<d&&c[u]<i;){if(f.length<10){const e=u+1+g;m&&"deleted"===m.type&&m._oldIndex===u-1?m.deleteToLineNumber++:(m={type:"deleted",_oldIndex:u,deleteFromLineNumber:e,deleteToLineNumber:e},f.push(m)),g--}u++}let o;if(u<d&&c[u]<=n)o=c[u],u++;else if(o=0===e?1:e+1===r?t:Math.round(e*a+l),f.length<10){const t=u+1+g;m&&"inserted"===m.type&&m._i===e-1?m.insertToLineNumber++:(m={type:"inserted",_i:e,insertFromLineNumber:t,insertToLineNumber:t},f.push(m)),g++}h[e]=o,p=o}if(f.length<10)for(;u<d;){const e=u+1+g;m&&"deleted"===m.type&&m._oldIndex===u-1?m.deleteToLineNumber++:(m={type:"deleted",_oldIndex:u,deleteFromLineNumber:e,deleteToLineNumber:e},f.push(m)),g--,u++}else f=[{type:"flush"}];return[new Kt(a,h),f]}modelLineToMinimapLine(e){return Math.min(this.minimapLines.length,Math.max(1,Math.round(e/this.samplingRatio)))}modelLineRangeToMinimapLineRange(e,t){let i=this.modelLineToMinimapLine(e)-1;for(;i>0&&this.minimapLines[i-1]>=e;)i--;let n=this.modelLineToMinimapLine(t)-1;for(;n+1<this.minimapLines.length&&this.minimapLines[n+1]<=t;)n++;if(i===n){const n=this.minimapLines[i];if(n<e||n>t)return null}return[i+1,n+1]}decorationLineRangeToMinimapLineRange(e,t){let i=this.modelLineToMinimapLine(e),n=this.modelLineToMinimapLine(t);return e!==t&&n===i&&(n===this.minimapLines.length?i>1&&i--:n++),[i,n]}onLinesDeleted(e){const t=e.toLineNumber-e.fromLineNumber+1;let i=this.minimapLines.length,n=0;for(let o=this.minimapLines.length-1;o>=0&&!(this.minimapLines[o]<e.fromLineNumber);o--)this.minimapLines[o]<=e.toLineNumber?(this.minimapLines[o]=Math.max(1,e.fromLineNumber-1),i=Math.min(i,o),n=Math.max(n,o)):this.minimapLines[o]-=t;return[i,n]}onLinesInserted(e){const t=e.toLineNumber-e.fromLineNumber+1;for(let i=this.minimapLines.length-1;i>=0&&!(this.minimapLines[i]<e.fromLineNumber);i--)this.minimapLines[i]+=t}}class qt extends A{constructor(e){super(e),this.tokensColorTracker=Tt.getInstance(),this._selections=[],this._minimapSelections=null,this.options=new Ht(this._context.configuration,this._context.theme,this.tokensColorTracker);const[t]=Kt.compute(this.options,this._context.model.getLineCount(),null);this._samplingState=t,this._shouldCheckSampling=!1,this._actual=new Zt(e.theme,this)}dispose(){this._actual.dispose(),super.dispose()}getDomNode(){return this._actual.getDomNode()}_onOptionsMaybeChanged(){const e=new Ht(this._context.configuration,this._context.theme,this.tokensColorTracker);return!this.options.equals(e)&&(this.options=e,this._recreateLineSampling(),this._actual.onDidChangeOptions(),!0)}onConfigurationChanged(e){return this._onOptionsMaybeChanged()}onCursorStateChanged(e){return this._selections=e.selections,this._minimapSelections=null,this._actual.onSelectionChanged()}onDecorationsChanged(e){return!!e.affectsMinimap&&this._actual.onDecorationsChanged()}onFlushed(e){return this._samplingState&&(this._shouldCheckSampling=!0),this._actual.onFlushed()}onLinesChanged(e){if(this._samplingState){const t=this._samplingState.modelLineRangeToMinimapLineRange(e.fromLineNumber,e.toLineNumber);return!!t&&this._actual.onLinesChanged(t[0],t[1])}return this._actual.onLinesChanged(e.fromLineNumber,e.toLineNumber)}onLinesDeleted(e){if(this._samplingState){const[t,i]=this._samplingState.onLinesDeleted(e);return t<=i&&this._actual.onLinesChanged(t+1,i+1),this._shouldCheckSampling=!0,!0}return this._actual.onLinesDeleted(e.fromLineNumber,e.toLineNumber)}onLinesInserted(e){return this._samplingState?(this._samplingState.onLinesInserted(e),this._shouldCheckSampling=!0,!0):this._actual.onLinesInserted(e.fromLineNumber,e.toLineNumber)}onScrollChanged(e){return this._actual.onScrollChanged()}onThemeChanged(e){return this._context.model.invalidateMinimapColorCache(),this._actual.onThemeChanged(),this._onOptionsMaybeChanged(),!0}onTokensChanged(e){if(this._samplingState){let t=[];for(const i of e.ranges){const e=this._samplingState.modelLineRangeToMinimapLineRange(i.fromLineNumber,i.toLineNumber);e&&t.push({fromLineNumber:e[0],toLineNumber:e[1]})}return!!t.length&&this._actual.onTokensChanged(t)}return this._actual.onTokensChanged(e.ranges)}onTokensColorsChanged(e){return this._onOptionsMaybeChanged(),this._actual.onTokensColorsChanged()}onZonesChanged(e){return this._actual.onZonesChanged()}prepareRender(e){this._shouldCheckSampling&&(this._shouldCheckSampling=!1,this._recreateLineSampling())}render(e){let t=e.visibleRange.startLineNumber,i=e.visibleRange.endLineNumber;this._samplingState&&(t=this._samplingState.modelLineToMinimapLine(t),i=this._samplingState.modelLineToMinimapLine(i));const n={viewportContainsWhitespaceGaps:e.viewportData.whitespaceViewportData.length>0,scrollWidth:e.scrollWidth,scrollHeight:e.scrollHeight,viewportStartLineNumber:t,viewportEndLineNumber:i,viewportStartLineNumberVerticalOffset:e.getVerticalOffsetForLineNumber(t),scrollTop:e.scrollTop,scrollLeft:e.scrollLeft,viewportWidth:e.viewportWidth,viewportHeight:e.viewportHeight};this._actual.render(n)}_recreateLineSampling(){this._minimapSelections=null;const e=Boolean(this._samplingState),[t,i]=Kt.compute(this.options,this._context.model.getLineCount(),this._samplingState);if(this._samplingState=t,e&&this._samplingState)for(const e of i)switch(e.type){case"deleted":this._actual.onLinesDeleted(e.deleteFromLineNumber,e.deleteToLineNumber);break;case"inserted":this._actual.onLinesInserted(e.insertFromLineNumber,e.insertToLineNumber);break;case"flush":this._actual.onFlushed()}}getLineCount(){return this._samplingState?this._samplingState.minimapLines.length:this._context.model.getLineCount()}getRealLineCount(){return this._context.model.getLineCount()}getLineContent(e){return this._samplingState?this._context.model.getLineContent(this._samplingState.minimapLines[e-1]):this._context.model.getLineContent(e)}getLineMaxColumn(e){return this._samplingState?this._context.model.getLineMaxColumn(this._samplingState.minimapLines[e-1]):this._context.model.getLineMaxColumn(e)}getMinimapLinesRenderingData(e,t,i){if(this._samplingState){let n=[];for(let o=0,s=t-e+1;o<s;o++)i[o]?n[o]=this._context.model.getViewLineData(this._samplingState.minimapLines[e+o-1]):n[o]=null;return n}return this._context.model.getMinimapLinesRenderingData(e,t,i).data}getSelections(){if(null===this._minimapSelections)if(this._samplingState){this._minimapSelections=[];for(const e of this._selections){const[t,i]=this._samplingState.decorationLineRangeToMinimapLineRange(e.startLineNumber,e.endLineNumber);this._minimapSelections.push(new v.Y(t,e.startColumn,i,e.endColumn))}}else this._minimapSelections=this._selections;return this._minimapSelections}getMinimapDecorationsInViewport(e,t){let i;if(this._samplingState){const n=this._samplingState.minimapLines[e-1],o=this._samplingState.minimapLines[t-1];i=new re.e(n,1,o,this._context.model.getLineMaxColumn(o))}else i=new re.e(e,1,t,this._context.model.getLineMaxColumn(t));const n=this._context.model.getDecorationsInViewport(i);if(this._samplingState){let e=[];for(const t of n){if(!t.options.minimap)continue;const i=t.range,n=this._samplingState.modelLineToMinimapLine(i.startLineNumber),o=this._samplingState.modelLineToMinimapLine(i.endLineNumber);e.push(new Mt.$l(new re.e(n,i.startColumn,o,i.endColumn),t.options))}return e}return n}getOptions(){return this._context.model.getTextModelOptions()}revealLineNumber(e){this._samplingState&&(e=this._samplingState.minimapLines[e-1]),this._context.model.revealRange("mouse",!1,new re.e(e,1,e,1),1,0)}setScrollTop(e){this._context.model.setScrollPosition({scrollTop:e},1)}}class Zt extends u.JT{constructor(e,t){super(),this._renderDecorations=!1,this._gestureInProgress=!1,this._theme=e,this._model=t,this._lastRenderData=null,this._buffers=null,this._selectionColor=this._theme.getColor(gt.ov),this._domNode=(0,_.X)(document.createElement("div")),O.write(this._domNode,8),this._domNode.setClassName(this._getMinimapDomNodeClassName()),this._domNode.setPosition("absolute"),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true"),this._shadow=(0,_.X)(document.createElement("div")),this._shadow.setClassName("minimap-shadow-hidden"),this._domNode.appendChild(this._shadow),this._canvas=(0,_.X)(document.createElement("canvas")),this._canvas.setPosition("absolute"),this._canvas.setLeft(0),this._domNode.appendChild(this._canvas),this._decorationsCanvas=(0,_.X)(document.createElement("canvas")),this._decorationsCanvas.setPosition("absolute"),this._decorationsCanvas.setClassName("minimap-decorations-layer"),this._decorationsCanvas.setLeft(0),this._domNode.appendChild(this._decorationsCanvas),this._slider=(0,_.X)(document.createElement("div")),this._slider.setPosition("absolute"),this._slider.setClassName("minimap-slider"),this._slider.setLayerHinting(!0),this._slider.setContain("strict"),this._domNode.appendChild(this._slider),this._sliderHorizontal=(0,_.X)(document.createElement("div")),this._sliderHorizontal.setPosition("absolute"),this._sliderHorizontal.setClassName("minimap-slider-horizontal"),this._slider.appendChild(this._sliderHorizontal),this._applyLayout(),this._mouseDownListener=c.mu(this._domNode.domNode,"mousedown",(e=>{e.preventDefault();if(0===this._model.options.renderMinimap)return;if(!this._lastRenderData)return;if("proportional"!==this._model.options.size){if(e.leftButton&&this._lastRenderData){const t=c.i(this._slider.domNode),i=t.top+t.height/2;this._startSliderDragging(e.buttons,e.posx,i,e.posy,this._lastRenderData.renderedLayout)}return}const t=this._model.options.minimapLineHeight,i=this._model.options.canvasInnerHeight/this._model.options.canvasOuterHeight*e.browserEvent.offsetY;let n=Math.floor(i/t)+this._lastRenderData.renderedLayout.startLineNumber;n=Math.min(n,this._model.getLineCount()),this._model.revealLineNumber(n)})),this._sliderMouseMoveMonitor=new x.Z,this._sliderMouseDownListener=c.mu(this._slider.domNode,"mousedown",(e=>{e.preventDefault(),e.stopPropagation(),e.leftButton&&this._lastRenderData&&this._startSliderDragging(e.buttons,e.posx,e.posy,e.posy,this._lastRenderData.renderedLayout)})),this._gestureDisposable=w.o.addTarget(this._domNode.domNode),this._sliderTouchStartListener=c.nm(this._domNode.domNode,w.t.Start,(e=>{e.preventDefault(),e.stopPropagation(),this._lastRenderData&&(this._slider.toggleClassName("active",!0),this._gestureInProgress=!0,this.scrollDueToTouchEvent(e))}),{passive:!1}),this._sliderTouchMoveListener=c.nm(this._domNode.domNode,w.t.Change,(e=>{e.preventDefault(),e.stopPropagation(),this._lastRenderData&&this._gestureInProgress&&this.scrollDueToTouchEvent(e)}),{passive:!1}),this._sliderTouchEndListener=c.mu(this._domNode.domNode,w.t.End,(e=>{e.preventDefault(),e.stopPropagation(),this._gestureInProgress=!1,this._slider.toggleClassName("active",!1)}))}_startSliderDragging(e,t,i,n,o){this._slider.toggleClassName("active",!0);const s=(e,n)=>{const s=Math.abs(n-t);if(b.ED&&s>140)return void this._model.setScrollTop(o.scrollTop);const r=e-i;this._model.setScrollTop(o.getDesiredScrollTopFromDelta(r))};n!==i&&s(n,t),this._sliderMouseMoveMonitor.startMonitoring(this._slider.domNode,e,x.e,(e=>s(e.posy,e.posx)),(()=>{this._slider.toggleClassName("active",!1)}))}scrollDueToTouchEvent(e){const t=this._domNode.domNode.getBoundingClientRect().top,i=this._lastRenderData.renderedLayout.getDesiredScrollTopFromTouchLocation(e.pageY-t);this._model.setScrollTop(i)}dispose(){this._mouseDownListener.dispose(),this._sliderMouseMoveMonitor.dispose(),this._sliderMouseDownListener.dispose(),this._gestureDisposable.dispose(),this._sliderTouchStartListener.dispose(),this._sliderTouchMoveListener.dispose(),this._sliderTouchEndListener.dispose(),super.dispose()}_getMinimapDomNodeClassName(){return"always"===this._model.options.showSlider?"minimap slider-always":"minimap slider-mouseover"}getDomNode(){return this._domNode}_applyLayout(){this._domNode.setLeft(this._model.options.minimapLeft),this._domNode.setWidth(this._model.options.minimapWidth),this._domNode.setHeight(this._model.options.minimapHeight),this._shadow.setHeight(this._model.options.minimapHeight),this._canvas.setWidth(this._model.options.canvasOuterWidth),this._canvas.setHeight(this._model.options.canvasOuterHeight),this._canvas.domNode.width=this._model.options.canvasInnerWidth,this._canvas.domNode.height=this._model.options.canvasInnerHeight,this._decorationsCanvas.setWidth(this._model.options.canvasOuterWidth),this._decorationsCanvas.setHeight(this._model.options.canvasOuterHeight),this._decorationsCanvas.domNode.width=this._model.options.canvasInnerWidth,this._decorationsCanvas.domNode.height=this._model.options.canvasInnerHeight,this._slider.setWidth(this._model.options.minimapWidth)}_getBuffer(){return this._buffers||this._model.options.canvasInnerWidth>0&&this._model.options.canvasInnerHeight>0&&(this._buffers=new $t(this._canvas.domNode.getContext("2d"),this._model.options.canvasInnerWidth,this._model.options.canvasInnerHeight,this._model.options.backgroundColor)),this._buffers?this._buffers.getBuffer():null}onDidChangeOptions(){this._lastRenderData=null,this._buffers=null,this._applyLayout(),this._domNode.setClassName(this._getMinimapDomNodeClassName())}onSelectionChanged(){return this._renderDecorations=!0,!0}onDecorationsChanged(){return this._renderDecorations=!0,!0}onFlushed(){return this._lastRenderData=null,!0}onLinesChanged(e,t){return!!this._lastRenderData&&this._lastRenderData.onLinesChanged(e,t)}onLinesDeleted(e,t){return this._lastRenderData&&this._lastRenderData.onLinesDeleted(e,t),!0}onLinesInserted(e,t){return this._lastRenderData&&this._lastRenderData.onLinesInserted(e,t),!0}onScrollChanged(){return this._renderDecorations=!0,!0}onThemeChanged(){return this._selectionColor=this._theme.getColor(gt.ov),this._renderDecorations=!0,!0}onTokensChanged(e){return!!this._lastRenderData&&this._lastRenderData.onTokensChanged(e)}onTokensColorsChanged(){return this._lastRenderData=null,this._buffers=null,!0}onZonesChanged(){return this._lastRenderData=null,!0}render(e){if(0===this._model.options.renderMinimap)return this._shadow.setClassName("minimap-shadow-hidden"),this._sliderHorizontal.setWidth(0),void this._sliderHorizontal.setHeight(0);e.scrollLeft+e.viewportWidth>=e.scrollWidth?this._shadow.setClassName("minimap-shadow-hidden"):this._shadow.setClassName("minimap-shadow-visible");const t=zt.create(this._model.options,e.viewportStartLineNumber,e.viewportEndLineNumber,e.viewportStartLineNumberVerticalOffset,e.viewportHeight,e.viewportContainsWhitespaceGaps,this._model.getLineCount(),this._model.getRealLineCount(),e.scrollTop,e.scrollHeight,this._lastRenderData?this._lastRenderData.renderedLayout:null);this._slider.setDisplay(t.sliderNeeded?"block":"none"),this._slider.setTop(t.sliderTop),this._slider.setHeight(t.sliderHeight),this._sliderHorizontal.setLeft(0),this._sliderHorizontal.setWidth(this._model.options.minimapWidth),this._sliderHorizontal.setTop(0),this._sliderHorizontal.setHeight(t.sliderHeight),this.renderDecorations(t),this._lastRenderData=this.renderLines(t)}renderDecorations(e){if(this._renderDecorations){this._renderDecorations=!1;const t=this._model.getSelections();t.sort(re.e.compareRangesUsingStarts);const i=this._model.getMinimapDecorationsInViewport(e.startLineNumber,e.endLineNumber);i.sort(((e,t)=>(e.options.zIndex||0)-(t.options.zIndex||0)));const{canvasInnerWidth:n,canvasInnerHeight:o}=this._model.options,s=this._model.options.minimapLineHeight,r=this._model.options.minimapCharWidth,a=this._model.getOptions().tabSize,l=this._decorationsCanvas.domNode.getContext("2d");l.clearRect(0,0,n,o);const c=new Gt(e.startLineNumber,e.endLineNumber,!1);this._renderSelectionLineHighlights(l,t,c,e,s),this._renderDecorationsLineHighlights(l,i,c,e,s);const d=new Gt(e.startLineNumber,e.endLineNumber,null);this._renderSelectionsHighlights(l,t,d,e,s,a,r,n),this._renderDecorationsHighlights(l,i,d,e,s,a,r,n)}}_renderSelectionLineHighlights(e,t,i,n,o){if(!this._selectionColor||this._selectionColor.isTransparent())return;e.fillStyle=this._selectionColor.transparent(.5).toString();let s=0,r=0;for(const a of t){const t=Math.max(n.startLineNumber,a.startLineNumber),l=Math.min(n.endLineNumber,a.endLineNumber);if(t>l)continue;for(let e=t;e<=l;e++)i.set(e,!0);const c=(t-n.startLineNumber)*o,d=(l-n.startLineNumber)*o+o;r>=c||(r>s&&e.fillRect(K.y0,s,e.canvas.width,r-s),s=c),r=d}r>s&&e.fillRect(K.y0,s,e.canvas.width,r-s)}_renderDecorationsLineHighlights(e,t,i,n,o){const s=new Map;for(let r=t.length-1;r>=0;r--){const a=t[r],l=a.options.minimap;if(!l||l.position!==_t.F5.Inline)continue;const c=Math.max(n.startLineNumber,a.range.startLineNumber),d=Math.min(n.endLineNumber,a.range.endLineNumber);if(c>d)continue;const h=l.getColor(this._theme);if(!h||h.isTransparent())continue;let u=s.get(h.toString());u||(u=h.transparent(.5).toString(),s.set(h.toString(),u)),e.fillStyle=u;for(let t=c;t<=d;t++){if(i.has(t))continue;i.set(t,!0);const s=(c-n.startLineNumber)*o;e.fillRect(K.y0,s,e.canvas.width,o)}}}_renderSelectionsHighlights(e,t,i,n,o,s,r,a){if(this._selectionColor&&!this._selectionColor.isTransparent())for(const l of t){const t=Math.max(n.startLineNumber,l.startLineNumber),c=Math.min(n.endLineNumber,l.endLineNumber);if(!(t>c))for(let d=t;d<=c;d++)this.renderDecorationOnLine(e,i,l,this._selectionColor,n,d,o,o,s,r,a)}}_renderDecorationsHighlights(e,t,i,n,o,s,r,a){for(const l of t){const t=l.options.minimap;if(!t)continue;const c=Math.max(n.startLineNumber,l.range.startLineNumber),d=Math.min(n.endLineNumber,l.range.endLineNumber);if(c>d)continue;const h=t.getColor(this._theme);if(h&&!h.isTransparent())for(let u=c;u<=d;u++)switch(t.position){case _t.F5.Inline:this.renderDecorationOnLine(e,i,l.range,h,n,u,o,o,s,r,a);continue;case _t.F5.Gutter:const t=(u-n.startLineNumber)*o,c=2;this.renderDecoration(e,h,c,t,2,o);continue}}}renderDecorationOnLine(e,t,i,n,o,s,r,a,l,c,d){const h=(s-o.startLineNumber)*a;if(h+r<0||h>this._model.options.canvasInnerHeight)return;const{startLineNumber:u,endLineNumber:g}=i,p=u===s?i.startColumn:1,f=g===s?i.endColumn:this._model.getLineMaxColumn(s),m=this.getXOffsetForPosition(t,s,p,l,c,d),v=this.getXOffsetForPosition(t,s,f,l,c,d);this.renderDecoration(e,n,m,h,v-m,r)}getXOffsetForPosition(e,t,i,n,o,s){if(1===i)return K.y0;if((i-1)*o>=s)return s;let r=e.get(t);if(!r){const i=this._model.getLineContent(t);r=[K.y0];let a=K.y0;for(let e=1;e<i.length+1;e++){const t=i.charCodeAt(e-1),l=a+(9===t?n*o:Te.K7(t)?2*o:o);if(l>=s){r[e]=s;break}r[e]=l,a=l}e.set(t,r)}return i-1<r.length?r[i-1]:s}renderDecoration(e,t,i,n,o,s){e.fillStyle=t&&t.toString()||"",e.fillRect(i,n,o,s)}renderLines(e){const t=e.startLineNumber,i=e.endLineNumber,n=this._model.options.minimapLineHeight;if(this._lastRenderData&&this._lastRenderData.linesEquals(e)){const t=this._lastRenderData._get();return new Ut(e,t.imageData,t.lines)}const o=this._getBuffer();if(!o)return null;let[s,r,a]=Zt._renderUntouchedLines(o,t,i,n,this._lastRenderData);const l=this._model.getMinimapLinesRenderingData(t,i,a),c=this._model.getOptions().tabSize,d=this._model.options.defaultBackgroundColor,h=this._model.options.backgroundColor,u=this._model.options.foregroundAlpha,g=this._model.tokensColorTracker,p=g.backgroundIsLight(),f=this._model.options.renderMinimap,m=this._model.options.charRenderer(),v=this._model.options.fontScale,_=this._model.options.minimapCharWidth,b=(1===f?2:3)*v,w=n>b?Math.floor((n-b)/2):0,y=h.a/255,C=new It(Math.round((h.r-d.r)*y+d.r),Math.round((h.g-d.g)*y+d.g),Math.round((h.b-d.b)*y+d.b),255);let x=0;const S=[];for(let e=0,s=i-t+1;e<s;e++)a[e]&&Zt._renderLine(o,C,h.a,p,f,_,g,u,m,x,w,c,l[e],v,n),S[e]=new jt(x),x+=n;const k=-1===s?0:s,L=(-1===r?o.height:r)-k;return this._canvas.domNode.getContext("2d").putImageData(o,0,0,0,k,o.width,L),new Ut(e,o,S)}static _renderUntouchedLines(e,t,i,n,o){const s=[];if(!o){for(let e=0,n=i-t+1;e<n;e++)s[e]=!0;return[-1,-1,s]}const r=o._get(),a=r.imageData.data,l=r.rendLineNumberStart,c=r.lines,d=c.length,h=e.width,u=e.data,g=(i-t+1)*n*h*4;let p=-1,f=-1,m=-1,v=-1,_=-1,b=-1,w=0;for(let e=t;e<=i;e++){const i=e-t,o=e-l,r=o>=0&&o<d?c[o].dy:-1;if(-1===r){s[i]=!0,w+=n;continue}const y=r*h*4,C=(r+n)*h*4,x=w*h*4,S=(w+n)*h*4;v===y&&b===x?(v=C,b=S):(-1!==m&&(u.set(a.subarray(m,v),_),-1===p&&0===m&&m===_&&(p=v),-1===f&&v===g&&m===_&&(f=m)),m=y,v=C,_=x,b=S),s[i]=!1,w+=n}-1!==m&&(u.set(a.subarray(m,v),_),-1===p&&0===m&&m===_&&(p=v),-1===f&&v===g&&m===_&&(f=m));return[-1===p?-1:p/(4*h),-1===f?-1:f/(4*h),s]}static _renderLine(e,t,i,n,o,s,r,a,l,c,d,h,u,g,p){const f=u.content,m=u.tokens,v=e.width-s,_=1===p;let b=K.y0,w=0,y=0;for(let u=0,p=m.getCount();u<p;u++){const p=m.getEndOffset(u),C=m.getForeground(u),x=r.getColor(C);for(;w<p;w++){if(b>v)return;const r=f.charCodeAt(w);if(9===r){const e=h-(w+y)%h;y+=e-1,b+=e*s}else if(32===r)b+=s;else{const h=Te.K7(r)?2:1;for(let u=0;u<h;u++)if(2===o?l.blockRenderChar(e,b,c+d,x,a,t,i,_):l.renderChar(e,b,c+d,r,x,a,t,i,g,n,_),b+=s,b>v)return}}}}}class Gt{constructor(e,t,i){this._startLineNumber=e,this._endLineNumber=t,this._defaultValue=i,this._values=[];for(let e=0,t=this._endLineNumber-this._startLineNumber+1;e<t;e++)this._values[e]=i}has(e){return this.get(e)!==this._defaultValue}set(e,t){e<this._startLineNumber||e>this._endLineNumber||(this._values[e-this._startLineNumber]=t)}get(e){return e<this._startLineNumber||e>this._endLineNumber?this._defaultValue:this._values[e-this._startLineNumber]}}(0,Pe.Ic)(((e,t)=>{const i=e.getColor(gt.CA);i&&t.addRule(`.monaco-editor .minimap-slider .minimap-slider-horizontal { background: ${i}; }`);const n=e.getColor(gt.Xy);n&&t.addRule(`.monaco-editor .minimap-slider:hover .minimap-slider-horizontal { background: ${n}; }`);const o=e.getColor(gt.br);o&&t.addRule(`.monaco-editor .minimap-slider.active .minimap-slider-horizontal { background: ${o}; }`);const s=e.getColor(gt._w);s&&t.addRule(`.monaco-editor .minimap-shadow-visible { box-shadow: ${s} -6px 0 6px -6px inset; }`)}));i(73300);class Yt extends A{constructor(e){super(e);const t=this._context.configuration.options.get(129);this._widgets={},this._verticalScrollbarWidth=t.verticalScrollbarWidth,this._minimapWidth=t.minimap.minimapWidth,this._horizontalScrollbarHeight=t.horizontalScrollbarHeight,this._editorHeight=t.height,this._editorWidth=t.width,this._domNode=(0,_.X)(document.createElement("div")),O.write(this._domNode,4),this._domNode.setClassName("overlayWidgets")}dispose(){super.dispose(),this._widgets={}}getDomNode(){return this._domNode}onConfigurationChanged(e){const t=this._context.configuration.options.get(129);return this._verticalScrollbarWidth=t.verticalScrollbarWidth,this._minimapWidth=t.minimap.minimapWidth,this._horizontalScrollbarHeight=t.horizontalScrollbarHeight,this._editorHeight=t.height,this._editorWidth=t.width,!0}addWidget(e){const t=(0,_.X)(e.getDomNode());this._widgets[e.getId()]={widget:e,preference:null,domNode:t},t.setPosition("absolute"),t.setAttribute("widgetId",e.getId()),this._domNode.appendChild(t),this.setShouldRender()}setWidgetPosition(e,t){const i=this._widgets[e.getId()];return i.preference!==t&&(i.preference=t,this.setShouldRender(),!0)}removeWidget(e){const t=e.getId();if(this._widgets.hasOwnProperty(t)){const e=this._widgets[t].domNode.domNode;delete this._widgets[t],e.parentNode.removeChild(e),this.setShouldRender()}}_renderWidget(e){const t=e.domNode;if(null!==e.preference)if(0===e.preference)t.setTop(0),t.setRight(2*this._verticalScrollbarWidth+this._minimapWidth);else if(1===e.preference){const e=t.domNode.clientHeight;t.setTop(this._editorHeight-e-2*this._horizontalScrollbarHeight),t.setRight(2*this._verticalScrollbarWidth+this._minimapWidth)}else 2===e.preference&&(t.setTop(0),t.domNode.style.right="50%");else t.unsetTop()}prepareRender(e){}render(e){this._domNode.setWidth(this._editorWidth);const t=Object.keys(this._widgets);for(let e=0,i=t.length;e<i;e++){const i=t[e];this._renderWidget(this._widgets[i])}}}var Qt=i(41264);class Xt{constructor(e,t){const i=e.options;this.lineHeight=i.get(58),this.pixelRatio=i.get(127),this.overviewRulerLanes=i.get(73),this.renderBorder=i.get(72);const n=t.getColor(Oe.zw);this.borderColor=n?n.toString():null,this.hideCursor=i.get(51);const o=t.getColor(Oe.n0);this.cursorColor=o?o.transparent(.7).toString():null,this.themeType=t.type;const s=i.get(64),r=s.enabled,a=s.side,l=r?t.getColor(Oe.e_)||Et.RW.getDefaultBackground():null;this.backgroundColor=null===l||"left"===a?null:Qt.Il.Format.CSS.formatHex(l);const c=i.get(129).overviewRuler;this.top=c.top,this.right=c.right,this.domWidth=c.width,this.domHeight=c.height,0===this.overviewRulerLanes?(this.canvasWidth=0,this.canvasHeight=0):(this.canvasWidth=this.domWidth*this.pixelRatio|0,this.canvasHeight=this.domHeight*this.pixelRatio|0);const[d,h]=this._initLanes(1,this.canvasWidth,this.overviewRulerLanes);this.x=d,this.w=h}_initLanes(e,t,i){const n=t-e;if(i>=3){const t=Math.floor(n/3),i=Math.floor(n/3),o=n-t-i,s=e+t;return[[0,e,s,e,e+t+o,e,s,e],[0,t,o,t+o,i,t+o+i,o+i,t+o+i]]}if(2===i){const t=Math.floor(n/2),i=n-t;return[[0,e,e,e,e+t,e,e,e],[0,t,t,t,i,t+i,t+i,t+i]]}return[[0,e,e,e,e,e,e,e],[0,n,n,n,n,n,n,n]]}equals(e){return this.lineHeight===e.lineHeight&&this.pixelRatio===e.pixelRatio&&this.overviewRulerLanes===e.overviewRulerLanes&&this.renderBorder===e.renderBorder&&this.borderColor===e.borderColor&&this.hideCursor===e.hideCursor&&this.cursorColor===e.cursorColor&&this.themeType===e.themeType&&this.backgroundColor===e.backgroundColor&&this.top===e.top&&this.right===e.right&&this.domWidth===e.domWidth&&this.domHeight===e.domHeight&&this.canvasWidth===e.canvasWidth&&this.canvasHeight===e.canvasHeight}}class Jt extends A{constructor(e){super(e),this._domNode=(0,_.X)(document.createElement("canvas")),this._domNode.setClassName("decorationsOverviewRuler"),this._domNode.setPosition("absolute"),this._domNode.setLayerHinting(!0),this._domNode.setContain("strict"),this._domNode.setAttribute("aria-hidden","true"),this._updateSettings(!1),this._tokensColorTrackerListener=Et.RW.onDidChange((e=>{e.changedColorMap&&this._updateSettings(!0)})),this._cursorPositions=[]}dispose(){super.dispose(),this._tokensColorTrackerListener.dispose()}_updateSettings(e){const t=new Xt(this._context.configuration,this._context.theme);return(!this._settings||!this._settings.equals(t))&&(this._settings=t,this._domNode.setTop(this._settings.top),this._domNode.setRight(this._settings.right),this._domNode.setWidth(this._settings.domWidth),this._domNode.setHeight(this._settings.domHeight),this._domNode.domNode.width=this._settings.canvasWidth,this._domNode.domNode.height=this._settings.canvasHeight,e&&this._render(),!0)}onConfigurationChanged(e){return this._updateSettings(!1)}onCursorStateChanged(e){this._cursorPositions=[];for(let t=0,i=e.selections.length;t<i;t++)this._cursorPositions[t]=e.selections[t].getPosition();return this._cursorPositions.sort(se.L.compare),!0}onDecorationsChanged(e){return!!e.affectsOverviewRuler}onFlushed(e){return!0}onScrollChanged(e){return e.scrollHeightChanged}onZonesChanged(e){return!0}onThemeChanged(e){return this._context.model.invalidateOverviewRulerColorCache(),this._updateSettings(!1)}getDomNode(){return this._domNode.domNode}prepareRender(e){}render(e){this._render()}_render(){if(0===this._settings.overviewRulerLanes)return void this._domNode.setBackgroundColor(this._settings.backgroundColor?this._settings.backgroundColor:"");const e=this._settings.canvasWidth,t=this._settings.canvasHeight,i=this._settings.lineHeight,n=this._context.viewLayout,o=t/this._context.viewLayout.getScrollHeight(),s=this._context.model.getAllOverviewRulerDecorations(this._context.theme),r=6*this._settings.pixelRatio|0,a=r/2|0,l=this._domNode.domNode.getContext("2d");null===this._settings.backgroundColor?l.clearRect(0,0,e,t):(l.fillStyle=this._settings.backgroundColor,l.fillRect(0,0,e,t));const c=this._settings.x,d=this._settings.w;s.sort(Mt.SQ.cmp);for(const e of s){const s=e.color,h=e.data;l.fillStyle=s;let u=0,g=0,p=0;for(let e=0,s=h.length/3;e<s;e++){const s=h[3*e],f=h[3*e+1],m=h[3*e+2];let v=n.getVerticalOffsetForLineNumber(f)*o|0,_=(n.getVerticalOffsetForLineNumber(m)+i)*o|0;if(_-v<r){let e=(v+_)/2|0;e<a?e=a:e+a>t&&(e=t-a),v=e-a,_=e+a}v>p+1||s!==u?(0!==e&&l.fillRect(c[u],g,d[u],p-g),u=s,g=v,p=_):_>p&&(p=_)}l.fillRect(c[u],g,d[u],p-g)}if(!this._settings.hideCursor&&this._settings.cursorColor){const e=2*this._settings.pixelRatio|0,i=e/2|0,s=this._settings.x[7],r=this._settings.w[7];l.fillStyle=this._settings.cursorColor;let a=-100,c=-100;for(let d=0,h=this._cursorPositions.length;d<h;d++){const h=this._cursorPositions[d];let u=n.getVerticalOffsetForLineNumber(h.lineNumber)*o|0;u<i?u=i:u+i>t&&(u=t-i);const g=u-i,p=g+e;g>c+1?(0!==d&&l.fillRect(s,a,r,c-a),a=g,c=p):p>c&&(c=p)}l.fillRect(s,a,r,c-a)}this._settings.renderBorder&&this._settings.borderColor&&this._settings.overviewRulerLanes>0&&(l.beginPath(),l.lineWidth=1,l.strokeStyle=this._settings.borderColor,l.moveTo(0,0),l.lineTo(0,t),l.stroke(),l.moveTo(0,0),l.lineTo(e,0),l.stroke())}}var ei=i(92003);class ti extends M{constructor(e,t){super(),this._context=e;const i=this._context.configuration.options;this._domNode=(0,_.X)(document.createElement("canvas")),this._domNode.setClassName(t),this._domNode.setPosition("absolute"),this._domNode.setLayerHinting(!0),this._domNode.setContain("strict"),this._zoneManager=new ei.Tj((e=>this._context.viewLayout.getVerticalOffsetForLineNumber(e))),this._zoneManager.setDOMWidth(0),this._zoneManager.setDOMHeight(0),this._zoneManager.setOuterHeight(this._context.viewLayout.getScrollHeight()),this._zoneManager.setLineHeight(i.get(58)),this._zoneManager.setPixelRatio(i.get(127)),this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options;return e.hasChanged(58)&&(this._zoneManager.setLineHeight(t.get(58)),this._render()),e.hasChanged(127)&&(this._zoneManager.setPixelRatio(t.get(127)),this._domNode.setWidth(this._zoneManager.getDOMWidth()),this._domNode.setHeight(this._zoneManager.getDOMHeight()),this._domNode.domNode.width=this._zoneManager.getCanvasWidth(),this._domNode.domNode.height=this._zoneManager.getCanvasHeight(),this._render()),!0}onFlushed(e){return this._render(),!0}onScrollChanged(e){return e.scrollHeightChanged&&(this._zoneManager.setOuterHeight(e.scrollHeight),this._render()),!0}onZonesChanged(e){return this._render(),!0}getDomNode(){return this._domNode.domNode}setLayout(e){this._domNode.setTop(e.top),this._domNode.setRight(e.right);let t=!1;t=this._zoneManager.setDOMWidth(e.width)||t,t=this._zoneManager.setDOMHeight(e.height)||t,t&&(this._domNode.setWidth(this._zoneManager.getDOMWidth()),this._domNode.setHeight(this._zoneManager.getDOMHeight()),this._domNode.domNode.width=this._zoneManager.getCanvasWidth(),this._domNode.domNode.height=this._zoneManager.getCanvasHeight(),this._render())}setZones(e){this._zoneManager.setZones(e),this._render()}_render(){if(0===this._zoneManager.getOuterHeight())return!1;const e=this._zoneManager.getCanvasWidth(),t=this._zoneManager.getCanvasHeight(),i=this._zoneManager.resolveColorZones(),n=this._zoneManager.getId2Color(),o=this._domNode.domNode.getContext("2d");return o.clearRect(0,0,e,t),i.length>0&&this._renderOneLane(o,i,n,e),!0}_renderOneLane(e,t,i,n){let o=0,s=0,r=0;for(const a of t){const t=a.colorId,l=a.from,c=a.to;t!==o?(e.fillRect(0,s,n,r-s),o=t,e.fillStyle=i[o],s=l,r=c):r>=l?r=Math.max(r,c):(e.fillRect(0,s,n,r-s),s=l,r=c)}e.fillRect(0,s,n,r-s)}}i(63330);class ii extends A{constructor(e){super(e),this.domNode=(0,_.X)(document.createElement("div")),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this.domNode.setClassName("view-rulers"),this._renderedRulers=[];const t=this._context.configuration.options;this._rulers=t.get(90),this._typicalHalfwidthCharacterWidth=t.get(43).typicalHalfwidthCharacterWidth}dispose(){super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options;return this._rulers=t.get(90),this._typicalHalfwidthCharacterWidth=t.get(43).typicalHalfwidthCharacterWidth,!0}onScrollChanged(e){return e.scrollHeightChanged}prepareRender(e){}_ensureRulersCount(){const e=this._renderedRulers.length,t=this._rulers.length;if(e===t)return;if(e<t){const{tabSize:i}=this._context.model.getTextModelOptions(),n=i;let o=t-e;for(;o>0;){const e=(0,_.X)(document.createElement("div"));e.setClassName("view-ruler"),e.setWidth(n),this.domNode.appendChild(e),this._renderedRulers.push(e),o--}return}let i=e-t;for(;i>0;){const e=this._renderedRulers.pop();this.domNode.removeChild(e),i--}}render(e){this._ensureRulersCount();for(let t=0,i=this._rulers.length;t<i;t++){const i=this._renderedRulers[t],n=this._rulers[t];i.setBoxShadow(n.color?`1px 0 0 0 ${n.color} inset`:""),i.setHeight(Math.min(e.scrollHeight,1e6)),i.setLeft(n.column*this._typicalHalfwidthCharacterWidth)}}}(0,Pe.Ic)(((e,t)=>{const i=e.getColor(Oe.zk);i&&t.addRule(`.monaco-editor .view-ruler { box-shadow: 1px 0 0 0 ${i} inset; }`)}));i(68182);class ni extends A{constructor(e){super(e),this._scrollTop=0,this._width=0,this._updateWidth(),this._shouldShow=!1;const t=this._context.configuration.options.get(91);this._useShadows=t.useShadows,this._domNode=(0,_.X)(document.createElement("div")),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true")}dispose(){super.dispose()}_updateShouldShow(){const e=this._useShadows&&this._scrollTop>0;return this._shouldShow!==e&&(this._shouldShow=e,!0)}getDomNode(){return this._domNode}_updateWidth(){const e=this._context.configuration.options.get(129);0===e.minimap.renderMinimap||e.minimap.minimapWidth>0&&0===e.minimap.minimapLeft?this._width=e.width:this._width=e.width-e.minimap.minimapWidth-e.verticalScrollbarWidth}onConfigurationChanged(e){const t=this._context.configuration.options.get(91);return this._useShadows=t.useShadows,this._updateWidth(),this._updateShouldShow(),!0}onScrollChanged(e){return this._scrollTop=e.scrollTop,this._updateShouldShow()}prepareRender(e){}render(e){this._domNode.setWidth(this._width),this._domNode.setClassName(this._shouldShow?"scroll-decoration":"")}}(0,Pe.Ic)(((e,t)=>{const i=e.getColor(gt._w);i&&t.addRule(`.monaco-editor .scroll-decoration { box-shadow: ${i} 0 6px 6px -6px inset; }`)}));i(83254);class oi{constructor(e){this.left=e.left,this.width=e.width,this.startStyle=null,this.endStyle=null}}class si{constructor(e,t){this.lineNumber=e,this.ranges=t}}function ri(e){return new oi(e)}function ai(e){return new si(e.lineNumber,e.ranges.map(ri))}class li extends Ae{constructor(e){super(),this._previousFrameVisibleRangesWithStyle=[],this._context=e;const t=this._context.configuration.options;this._lineHeight=t.get(58),this._roundedSelection=t.get(89),this._typicalHalfwidthCharacterWidth=t.get(43).typicalHalfwidthCharacterWidth,this._selections=[],this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(e){const t=this._context.configuration.options;return this._lineHeight=t.get(58),this._roundedSelection=t.get(89),this._typicalHalfwidthCharacterWidth=t.get(43).typicalHalfwidthCharacterWidth,!0}onCursorStateChanged(e){return this._selections=e.selections.slice(0),!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return e.scrollTopChanged}onZonesChanged(e){return!0}_visibleRangesHaveGaps(e){for(let t=0,i=e.length;t<i;t++){if(e[t].ranges.length>1)return!0}return!1}_enrichVisibleRangesWithStyle(e,t,i){const n=this._typicalHalfwidthCharacterWidth/4;let o=null,s=null;if(i&&i.length>0&&t.length>0){const n=t[0].lineNumber;if(n===e.startLineNumber)for(let e=0;!o&&e<i.length;e++)i[e].lineNumber===n&&(o=i[e].ranges[0]);const r=t[t.length-1].lineNumber;if(r===e.endLineNumber)for(let e=i.length-1;!s&&e>=0;e--)i[e].lineNumber===r&&(s=i[e].ranges[0]);o&&!o.startStyle&&(o=null),s&&!s.startStyle&&(s=null)}for(let e=0,i=t.length;e<i;e++){const r=t[e].ranges[0],a=r.left,l=r.left+r.width,c={top:0,bottom:0},d={top:0,bottom:0};if(e>0){const i=t[e-1].ranges[0].left,o=t[e-1].ranges[0].left+t[e-1].ranges[0].width;ci(a-i)<n?c.top=2:a>i&&(c.top=1),ci(l-o)<n?d.top=2:i<l&&l<o&&(d.top=1)}else o&&(c.top=o.startStyle.top,d.top=o.endStyle.top);if(e+1<i){const i=t[e+1].ranges[0].left,o=t[e+1].ranges[0].left+t[e+1].ranges[0].width;ci(a-i)<n?c.bottom=2:i<a&&a<o&&(c.bottom=1),ci(l-o)<n?d.bottom=2:l<o&&(d.bottom=1)}else s&&(c.bottom=s.startStyle.bottom,d.bottom=s.endStyle.bottom);r.startStyle=c,r.endStyle=d}}_getVisibleRangesWithStyle(e,t,i){const n=(t.linesVisibleRangesForRange(e,!0)||[]).map(ai);return!this._visibleRangesHaveGaps(n)&&this._roundedSelection&&this._enrichVisibleRangesWithStyle(t.visibleRange,n,i),n}_createSelectionPiece(e,t,i,n,o){return'<div class="cslr '+i+'" style="top:'+e.toString()+"px;left:"+n.toString()+"px;width:"+o.toString()+"px;height:"+t+'px;"></div>'}_actualRenderOneSelection(e,t,i,n){if(0===n.length)return;const o=!!n[0].ranges[0].startStyle,s=this._lineHeight.toString(),r=(this._lineHeight-1).toString(),a=n[0].lineNumber,l=n[n.length-1].lineNumber;for(let c=0,d=n.length;c<d;c++){const d=n[c],h=d.lineNumber,u=h-t,g=i&&(h===l||h===a)?r:s,p=i&&h===a?1:0;let f="",m="";for(let e=0,t=d.ranges.length;e<t;e++){const t=d.ranges[e];if(o){const e=t.startStyle,i=t.endStyle;if(1===e.top||1===e.bottom){f+=this._createSelectionPiece(p,g,li.SELECTION_CLASS_NAME,t.left-li.ROUNDED_PIECE_WIDTH,li.ROUNDED_PIECE_WIDTH);let i=li.EDITOR_BACKGROUND_CLASS_NAME;1===e.top&&(i+=" "+li.SELECTION_TOP_RIGHT),1===e.bottom&&(i+=" "+li.SELECTION_BOTTOM_RIGHT),f+=this._createSelectionPiece(p,g,i,t.left-li.ROUNDED_PIECE_WIDTH,li.ROUNDED_PIECE_WIDTH)}if(1===i.top||1===i.bottom){f+=this._createSelectionPiece(p,g,li.SELECTION_CLASS_NAME,t.left+t.width,li.ROUNDED_PIECE_WIDTH);let e=li.EDITOR_BACKGROUND_CLASS_NAME;1===i.top&&(e+=" "+li.SELECTION_TOP_LEFT),1===i.bottom&&(e+=" "+li.SELECTION_BOTTOM_LEFT),f+=this._createSelectionPiece(p,g,e,t.left+t.width,li.ROUNDED_PIECE_WIDTH)}}let i=li.SELECTION_CLASS_NAME;if(o){const e=t.startStyle,n=t.endStyle;0===e.top&&(i+=" "+li.SELECTION_TOP_LEFT),0===e.bottom&&(i+=" "+li.SELECTION_BOTTOM_LEFT),0===n.top&&(i+=" "+li.SELECTION_TOP_RIGHT),0===n.bottom&&(i+=" "+li.SELECTION_BOTTOM_RIGHT)}m+=this._createSelectionPiece(p,g,i,t.left,t.width)}e[u][0]+=f,e[u][1]+=m}}prepareRender(e){const t=[],i=e.visibleRange.startLineNumber,n=e.visibleRange.endLineNumber;for(let e=i;e<=n;e++){t[e-i]=["",""]}const o=[];for(let n=0,s=this._selections.length;n<s;n++){const s=this._selections[n];if(s.isEmpty()){o[n]=null;continue}const r=this._getVisibleRangesWithStyle(s,e,this._previousFrameVisibleRangesWithStyle[n]);o[n]=r,this._actualRenderOneSelection(t,i,this._selections.length>1,r)}this._previousFrameVisibleRangesWithStyle=o,this._renderResult=t.map((([e,t])=>e+t))}render(e,t){if(!this._renderResult)return"";const i=t-e;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}function ci(e){return e<0?-e:e}li.SELECTION_CLASS_NAME="selected-text",li.SELECTION_TOP_LEFT="top-left-radius",li.SELECTION_BOTTOM_LEFT="bottom-left-radius",li.SELECTION_TOP_RIGHT="top-right-radius",li.SELECTION_BOTTOM_RIGHT="bottom-right-radius",li.EDITOR_BACKGROUND_CLASS_NAME="monaco-editor-background",li.ROUNDED_PIECE_WIDTH=10,(0,Pe.Ic)(((e,t)=>{const i=e.getColor(gt.hE);i&&t.addRule(`.monaco-editor .focused .selected-text { background-color: ${i}; }`);const n=e.getColor(gt.ES);n&&t.addRule(`.monaco-editor .selected-text { background-color: ${n}; }`);const o=e.getColor(gt.yb);o&&!o.isTransparent()&&t.addRule(`.monaco-editor .view-line span.inline-selected-text { color: ${o}; }`)}));i(17441);class di{constructor(e,t,i,n,o,s){this.top=e,this.left=t,this.width=i,this.height=n,this.textContent=o,this.textContentClassName=s}}class hi{constructor(e){this._context=e;const t=this._context.configuration.options,i=t.get(43);this._cursorStyle=t.get(24),this._lineHeight=t.get(58),this._typicalHalfwidthCharacterWidth=i.typicalHalfwidthCharacterWidth,this._lineCursorWidth=Math.min(t.get(27),this._typicalHalfwidthCharacterWidth),this._isVisible=!0,this._domNode=(0,_.X)(document.createElement("div")),this._domNode.setClassName(`cursor ${Ve.S}`),this._domNode.setHeight(this._lineHeight),this._domNode.setTop(0),this._domNode.setLeft(0),p.V.applyFontInfo(this._domNode,i),this._domNode.setDisplay("none"),this._position=new se.L(1,1),this._lastRenderedContent="",this._renderData=null}getDomNode(){return this._domNode}getPosition(){return this._position}show(){this._isVisible||(this._domNode.setVisibility("inherit"),this._isVisible=!0)}hide(){this._isVisible&&(this._domNode.setVisibility("hidden"),this._isVisible=!1)}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(43);return this._cursorStyle=t.get(24),this._lineHeight=t.get(58),this._typicalHalfwidthCharacterWidth=i.typicalHalfwidthCharacterWidth,this._lineCursorWidth=Math.min(t.get(27),this._typicalHalfwidthCharacterWidth),p.V.applyFontInfo(this._domNode,i),!0}onCursorPositionChanged(e){return this._position=e,!0}_prepareRender(e){let t="";if(this._cursorStyle===K.d2.Line||this._cursorStyle===K.d2.LineThin){const i=e.visibleRangeForPosition(this._position);if(!i||i.outsideRenderedLine)return null;let n;if(this._cursorStyle===K.d2.Line){if(n=c.Uh(this._lineCursorWidth>0?this._lineCursorWidth:2),n>2){const e=this._context.model.getLineContent(this._position.lineNumber),i=Te.vH(e,this._position.column-1);t=e.substr(this._position.column-1,i)}}else n=c.Uh(1);let o=i.left;n>=2&&o>=1&&(o-=1);const s=e.getVerticalOffsetForLineNumber(this._position.lineNumber)-e.bigNumbersDelta;return new di(s,o,n,this._lineHeight,t,"")}const i=this._context.model.getLineContent(this._position.lineNumber),n=Te.vH(i,this._position.column-1),o=e.linesVisibleRangesForRange(new re.e(this._position.lineNumber,this._position.column,this._position.lineNumber,this._position.column+n),!1);if(!o||0===o.length)return null;const s=o[0];if(s.outsideRenderedLine||0===s.ranges.length)return null;const r=s.ranges[0],a=r.width<1?this._typicalHalfwidthCharacterWidth:r.width;let l="";if(this._cursorStyle===K.d2.Block){const e=this._context.model.getViewLineData(this._position.lineNumber);t=i.substr(this._position.column-1,n);const o=e.tokens.findTokenIndexAtOffset(this._position.column-1);l=e.tokens.getClassName(o)}let d=e.getVerticalOffsetForLineNumber(this._position.lineNumber)-e.bigNumbersDelta,h=this._lineHeight;return this._cursorStyle!==K.d2.Underline&&this._cursorStyle!==K.d2.UnderlineThin||(d+=this._lineHeight-2,h=2),new di(d,r.left,a,h,t,l)}prepareRender(e){this._renderData=this._prepareRender(e)}render(e){return this._renderData?(this._lastRenderedContent!==this._renderData.textContent&&(this._lastRenderedContent=this._renderData.textContent,this._domNode.domNode.textContent=this._lastRenderedContent),this._domNode.setClassName(`cursor ${Ve.S} ${this._renderData.textContentClassName}`),this._domNode.setDisplay("block"),this._domNode.setTop(this._renderData.top),this._domNode.setLeft(this._renderData.left),this._domNode.setWidth(this._renderData.width),this._domNode.setLineHeight(this._renderData.height),this._domNode.setHeight(this._renderData.height),{domNode:this._domNode.domNode,position:this._position,contentLeft:this._renderData.left,height:this._renderData.height,width:2}):(this._domNode.setDisplay("none"),null)}}class ui extends A{constructor(e){super(e);const t=this._context.configuration.options;this._readOnly=t.get(80),this._cursorBlinking=t.get(22),this._cursorStyle=t.get(24),this._cursorSmoothCaretAnimation=t.get(23),this._selectionIsEmpty=!0,this._isComposingInput=!1,this._isVisible=!1,this._primaryCursor=new hi(this._context),this._secondaryCursors=[],this._renderData=[],this._domNode=(0,_.X)(document.createElement("div")),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true"),this._updateDomClassName(),this._domNode.appendChild(this._primaryCursor.getDomNode()),this._startCursorBlinkAnimation=new C._F,this._cursorFlatBlinkInterval=new C.zh,this._blinkingEnabled=!1,this._editorHasFocus=!1,this._updateBlinking()}dispose(){super.dispose(),this._startCursorBlinkAnimation.dispose(),this._cursorFlatBlinkInterval.dispose()}getDomNode(){return this._domNode}onCompositionStart(e){return this._isComposingInput=!0,this._updateBlinking(),!0}onCompositionEnd(e){return this._isComposingInput=!1,this._updateBlinking(),!0}onConfigurationChanged(e){const t=this._context.configuration.options;this._readOnly=t.get(80),this._cursorBlinking=t.get(22),this._cursorStyle=t.get(24),this._cursorSmoothCaretAnimation=t.get(23),this._updateBlinking(),this._updateDomClassName(),this._primaryCursor.onConfigurationChanged(e);for(let t=0,i=this._secondaryCursors.length;t<i;t++)this._secondaryCursors[t].onConfigurationChanged(e);return!0}_onCursorPositionChanged(e,t){if(this._primaryCursor.onCursorPositionChanged(e),this._updateBlinking(),this._secondaryCursors.length<t.length){const e=t.length-this._secondaryCursors.length;for(let t=0;t<e;t++){const e=new hi(this._context);this._domNode.domNode.insertBefore(e.getDomNode().domNode,this._primaryCursor.getDomNode().domNode.nextSibling),this._secondaryCursors.push(e)}}else if(this._secondaryCursors.length>t.length){const e=this._secondaryCursors.length-t.length;for(let t=0;t<e;t++)this._domNode.removeChild(this._secondaryCursors[0].getDomNode()),this._secondaryCursors.splice(0,1)}for(let e=0;e<t.length;e++)this._secondaryCursors[e].onCursorPositionChanged(t[e])}onCursorStateChanged(e){const t=[];for(let i=0,n=e.selections.length;i<n;i++)t[i]=e.selections[i].getPosition();this._onCursorPositionChanged(t[0],t.slice(1));const i=e.selections[0].isEmpty();return this._selectionIsEmpty!==i&&(this._selectionIsEmpty=i,this._updateDomClassName()),!0}onDecorationsChanged(e){return!0}onFlushed(e){return!0}onFocusChanged(e){return this._editorHasFocus=e.isFocused,this._updateBlinking(),!1}onLinesChanged(e){return!0}onLinesDeleted(e){return!0}onLinesInserted(e){return!0}onScrollChanged(e){return!0}onTokensChanged(e){const t=t=>{for(let i=0,n=e.ranges.length;i<n;i++)if(e.ranges[i].fromLineNumber<=t.lineNumber&&t.lineNumber<=e.ranges[i].toLineNumber)return!0;return!1};if(t(this._primaryCursor.getPosition()))return!0;for(const e of this._secondaryCursors)if(t(e.getPosition()))return!0;return!1}onZonesChanged(e){return!0}_getCursorBlinking(){return this._isComposingInput?0:this._editorHasFocus?this._readOnly?5:this._cursorBlinking:0}_updateBlinking(){this._startCursorBlinkAnimation.cancel(),this._cursorFlatBlinkInterval.cancel();const e=this._getCursorBlinking(),t=0===e,i=5===e;t?this._hide():this._show(),this._blinkingEnabled=!1,this._updateDomClassName(),t||i||(1===e?this._cursorFlatBlinkInterval.cancelAndSet((()=>{this._isVisible?this._hide():this._show()}),ui.BLINK_INTERVAL):this._startCursorBlinkAnimation.setIfNotSet((()=>{this._blinkingEnabled=!0,this._updateDomClassName()}),ui.BLINK_INTERVAL))}_updateDomClassName(){this._domNode.setClassName(this._getClassName())}_getClassName(){let e="cursors-layer";switch(this._selectionIsEmpty||(e+=" has-selection"),this._cursorStyle){case K.d2.Line:e+=" cursor-line-style";break;case K.d2.Block:e+=" cursor-block-style";break;case K.d2.Underline:e+=" cursor-underline-style";break;case K.d2.LineThin:e+=" cursor-line-thin-style";break;case K.d2.BlockOutline:e+=" cursor-block-outline-style";break;case K.d2.UnderlineThin:e+=" cursor-underline-thin-style";break;default:e+=" cursor-line-style"}if(this._blinkingEnabled)switch(this._getCursorBlinking()){case 1:e+=" cursor-blink";break;case 2:e+=" cursor-smooth";break;case 3:e+=" cursor-phase";break;case 4:e+=" cursor-expand";break;default:e+=" cursor-solid"}else e+=" cursor-solid";return this._cursorSmoothCaretAnimation&&(e+=" cursor-smooth-caret-animation"),e}_show(){this._primaryCursor.show();for(let e=0,t=this._secondaryCursors.length;e<t;e++)this._secondaryCursors[e].show();this._isVisible=!0}_hide(){this._primaryCursor.hide();for(let e=0,t=this._secondaryCursors.length;e<t;e++)this._secondaryCursors[e].hide();this._isVisible=!1}prepareRender(e){this._primaryCursor.prepareRender(e);for(let t=0,i=this._secondaryCursors.length;t<i;t++)this._secondaryCursors[t].prepareRender(e)}render(e){let t=[],i=0;const n=this._primaryCursor.render(e);n&&(t[i++]=n);for(let n=0,o=this._secondaryCursors.length;n<o;n++){const o=this._secondaryCursors[n].render(e);o&&(t[i++]=o)}this._renderData=t}getLastRenderData(){return this._renderData}}ui.BLINK_INTERVAL=500,(0,Pe.Ic)(((e,t)=>{const i=e.getColor(Oe.n0);if(i){let n=e.getColor(Oe.fY);n||(n=i.opposite()),t.addRule(`.monaco-editor .cursors-layer .cursor { background-color: ${i}; border-color: ${i}; color: ${n}; }`),"hc"===e.type&&t.addRule(`.monaco-editor .cursors-layer.has-selection .cursor { border-left: 1px solid ${n}; border-right: 1px solid ${n}; }`)}}));const gi=()=>{throw new Error("Invalid change accessor")};class pi extends A{constructor(e){super(e);const t=this._context.configuration.options,i=t.get(129);this._lineHeight=t.get(58),this._contentWidth=i.contentWidth,this._contentLeft=i.contentLeft,this.domNode=(0,_.X)(document.createElement("div")),this.domNode.setClassName("view-zones"),this.domNode.setPosition("absolute"),this.domNode.setAttribute("role","presentation"),this.domNode.setAttribute("aria-hidden","true"),this.marginDomNode=(0,_.X)(document.createElement("div")),this.marginDomNode.setClassName("margin-view-zones"),this.marginDomNode.setPosition("absolute"),this.marginDomNode.setAttribute("role","presentation"),this.marginDomNode.setAttribute("aria-hidden","true"),this._zones={}}dispose(){super.dispose(),this._zones={}}_recomputeWhitespacesProps(){const e=this._context.viewLayout.getWhitespaces(),t=new Map;for(const i of e)t.set(i.id,i);let i=!1;return this._context.model.changeWhitespace((e=>{const n=Object.keys(this._zones);for(let o=0,s=n.length;o<s;o++){const s=n[o],r=this._zones[s],a=this._computeWhitespaceProps(r.delegate);r.isInHiddenArea=a.isInHiddenArea;const l=t.get(s);!l||l.afterLineNumber===a.afterViewLineNumber&&l.height===a.heightInPx||(e.changeOneWhitespace(s,a.afterViewLineNumber,a.heightInPx),this._safeCallOnComputedHeight(r.delegate,a.heightInPx),i=!0)}})),i}onConfigurationChanged(e){const t=this._context.configuration.options,i=t.get(129);return this._lineHeight=t.get(58),this._contentWidth=i.contentWidth,this._contentLeft=i.contentLeft,e.hasChanged(58)&&this._recomputeWhitespacesProps(),!0}onLineMappingChanged(e){return this._recomputeWhitespacesProps()}onLinesDeleted(e){return!0}onScrollChanged(e){return e.scrollTopChanged||e.scrollWidthChanged}onZonesChanged(e){return!0}onLinesInserted(e){return!0}_getZoneOrdinal(e){return void 0!==e.afterColumn?e.afterColumn:1e4}_computeWhitespaceProps(e){if(0===e.afterLineNumber)return{isInHiddenArea:!1,afterViewLineNumber:0,heightInPx:this._heightInPixels(e),minWidthInPx:this._minWidthInPixels(e)};let t,i;if(void 0!==e.afterColumn)t=this._context.model.validateModelPosition({lineNumber:e.afterLineNumber,column:e.afterColumn});else{const i=this._context.model.validateModelPosition({lineNumber:e.afterLineNumber,column:1}).lineNumber;t=new se.L(i,this._context.model.getModelLineMaxColumn(i))}i=t.column===this._context.model.getModelLineMaxColumn(t.lineNumber)?this._context.model.validateModelPosition({lineNumber:t.lineNumber+1,column:1}):this._context.model.validateModelPosition({lineNumber:t.lineNumber,column:t.column+1});const n=this._context.model.coordinatesConverter.convertModelPositionToViewPosition(t),o=this._context.model.coordinatesConverter.modelPositionIsVisible(i);return{isInHiddenArea:!o,afterViewLineNumber:n.lineNumber,heightInPx:o?this._heightInPixels(e):0,minWidthInPx:this._minWidthInPixels(e)}}changeViewZones(e){let t=!1;return this._context.model.changeWhitespace((i=>{const n={addZone:e=>(t=!0,this._addZone(i,e)),removeZone:e=>{e&&(t=this._removeZone(i,e)||t)},layoutZone:e=>{e&&(t=this._layoutZone(i,e)||t)}};!function(e,t){try{return e(t)}catch(e){(0,d.dL)(e)}}(e,n),n.addZone=gi,n.removeZone=gi,n.layoutZone=gi})),t}_addZone(e,t){const i=this._computeWhitespaceProps(t),n={whitespaceId:e.insertWhitespace(i.afterViewLineNumber,this._getZoneOrdinal(t),i.heightInPx,i.minWidthInPx),delegate:t,isInHiddenArea:i.isInHiddenArea,isVisible:!1,domNode:(0,_.X)(t.domNode),marginDomNode:t.marginDomNode?(0,_.X)(t.marginDomNode):null};return this._safeCallOnComputedHeight(n.delegate,i.heightInPx),n.domNode.setPosition("absolute"),n.domNode.domNode.style.width="100%",n.domNode.setDisplay("none"),n.domNode.setAttribute("monaco-view-zone",n.whitespaceId),this.domNode.appendChild(n.domNode),n.marginDomNode&&(n.marginDomNode.setPosition("absolute"),n.marginDomNode.domNode.style.width="100%",n.marginDomNode.setDisplay("none"),n.marginDomNode.setAttribute("monaco-view-zone",n.whitespaceId),this.marginDomNode.appendChild(n.marginDomNode)),this._zones[n.whitespaceId]=n,this.setShouldRender(),n.whitespaceId}_removeZone(e,t){if(this._zones.hasOwnProperty(t)){const i=this._zones[t];return delete this._zones[t],e.removeWhitespace(i.whitespaceId),i.domNode.removeAttribute("monaco-visible-view-zone"),i.domNode.removeAttribute("monaco-view-zone"),i.domNode.domNode.parentNode.removeChild(i.domNode.domNode),i.marginDomNode&&(i.marginDomNode.removeAttribute("monaco-visible-view-zone"),i.marginDomNode.removeAttribute("monaco-view-zone"),i.marginDomNode.domNode.parentNode.removeChild(i.marginDomNode.domNode)),this.setShouldRender(),!0}return!1}_layoutZone(e,t){if(this._zones.hasOwnProperty(t)){const i=this._zones[t],n=this._computeWhitespaceProps(i.delegate);return i.isInHiddenArea=n.isInHiddenArea,e.changeOneWhitespace(i.whitespaceId,n.afterViewLineNumber,n.heightInPx),this._safeCallOnComputedHeight(i.delegate,n.heightInPx),this.setShouldRender(),!0}return!1}shouldSuppressMouseDownOnViewZone(e){if(this._zones.hasOwnProperty(e)){const t=this._zones[e];return Boolean(t.delegate.suppressMouseDown)}return!1}_heightInPixels(e){return"number"==typeof e.heightInPx?e.heightInPx:"number"==typeof e.heightInLines?this._lineHeight*e.heightInLines:this._lineHeight}_minWidthInPixels(e){return"number"==typeof e.minWidthInPx?e.minWidthInPx:0}_safeCallOnComputedHeight(e,t){if("function"==typeof e.onComputedHeight)try{e.onComputedHeight(t)}catch(e){(0,d.dL)(e)}}_safeCallOnDomNodeTop(e,t){if("function"==typeof e.onDomNodeTop)try{e.onDomNodeTop(t)}catch(e){(0,d.dL)(e)}}prepareRender(e){}render(e){const t=e.viewportData.whitespaceViewportData,i={};let n=!1;for(const e of t)this._zones[e.id].isInHiddenArea||(i[e.id]=e,n=!0);const o=Object.keys(this._zones);for(let t=0,n=o.length;t<n;t++){const n=o[t],s=this._zones[n];let r=0,a=0,l="none";i.hasOwnProperty(n)?(r=i[n].verticalOffset-e.bigNumbersDelta,a=i[n].height,l="block",s.isVisible||(s.domNode.setAttribute("monaco-visible-view-zone","true"),s.isVisible=!0),this._safeCallOnDomNodeTop(s.delegate,e.getScrolledTopFromAbsoluteTop(i[n].verticalOffset))):(s.isVisible&&(s.domNode.removeAttribute("monaco-visible-view-zone"),s.isVisible=!1),this._safeCallOnDomNodeTop(s.delegate,e.getScrolledTopFromAbsoluteTop(-1e6))),s.domNode.setTop(r),s.domNode.setHeight(a),s.domNode.setDisplay(l),s.marginDomNode&&(s.marginDomNode.setTop(r),s.marginDomNode.setHeight(a),s.marginDomNode.setDisplay(l))}n&&(this.domNode.setWidth(Math.max(e.scrollWidth,this._contentWidth)),this.marginDomNode.setWidth(this._contentLeft))}}class fi{constructor(e){this._theme=e}get type(){return this._theme.type}update(e){this._theme=e}getColor(e){return this._theme.getColor(e)}}class mi{constructor(e,t,i){this.configuration=e,this.theme=new fi(t),this.model=i,this.viewLayout=i.viewLayout}addEventHandler(e){this.model.addViewEventHandler(e)}removeEventHandler(e){this.model.removeViewEventHandler(e)}}class vi{constructor(e,t,i,n){this.selections=e,this.startLineNumber=0|t.startLineNumber,this.endLineNumber=0|t.endLineNumber,this.relativeVerticalOffset=t.relativeVerticalOffset,this.bigNumbersDelta=0|t.bigNumbersDelta,this.whitespaceViewportData=i,this._model=n,this.visibleRange=new re.e(t.startLineNumber,this._model.getLineMinColumn(t.startLineNumber),t.endLineNumber,this._model.getLineMaxColumn(t.endLineNumber))}getViewLineRenderingData(e){return this._model.getViewLineRenderingData(this.visibleRange,e)}getDecorationsInViewport(){return this._model.getDecorationsInViewport(this.visibleRange)}}class _i extends M{constructor(e,t,i,n,o,s){super(),this._selections=[new v.Y(1,1,1,1)],this._renderAnimationFrame=null;const r=new Ue(t,n,o,e);this._context=new mi(t,i.getColorTheme(),n),this._configPixelRatio=this._context.configuration.options.get(127),this._context.addEventHandler(this),this._register(i.onDidColorThemeChange((e=>{this._context.theme.update(e),this._context.model.onDidColorThemeChange(),this.render(!0,!1)}))),this._viewParts=[],this._textAreaHandler=new ze(this._context,r,this._createTextAreaHandlerHelper()),this._viewParts.push(this._textAreaHandler),this._linesContent=(0,_.X)(document.createElement("div")),this._linesContent.setClassName("lines-content monaco-editor-background"),this._linesContent.setPosition("absolute"),this.domNode=(0,_.X)(document.createElement("div")),this.domNode.setClassName(this._getEditorClassName()),this.domNode.setAttribute("role","code"),this._overflowGuardContainer=(0,_.X)(document.createElement("div")),O.write(this._overflowGuardContainer,3),this._overflowGuardContainer.setClassName("overflow-guard"),this._scrollbar=new pt(this._context,this._linesContent,this.domNode,this._overflowGuardContainer),this._viewParts.push(this._scrollbar),this._viewLines=new Lt(this._context,this._linesContent),this._viewZones=new pi(this._context),this._viewParts.push(this._viewZones);const a=new Jt(this._context);this._viewParts.push(a);const l=new ni(this._context);this._viewParts.push(l);const c=new et(this._context);this._viewParts.push(c),c.addDynamicOverlay(new ct(this._context)),c.addDynamicOverlay(new li(this._context)),c.addDynamicOverlay(new yt(this._context)),c.addDynamicOverlay(new ht(this._context));const d=new tt(this._context);this._viewParts.push(d),d.addDynamicOverlay(new dt(this._context)),d.addDynamicOverlay(new vt(this._context)),d.addDynamicOverlay(new Dt(this._context)),d.addDynamicOverlay(new Nt(this._context)),d.addDynamicOverlay(new Re(this._context));const h=new Fe(this._context);h.getDomNode().appendChild(this._viewZones.marginDomNode),h.getDomNode().appendChild(d.getDomNode()),this._viewParts.push(h),this._contentWidgets=new nt(this._context,this.domNode),this._viewParts.push(this._contentWidgets),this._viewCursors=new ui(this._context),this._viewParts.push(this._viewCursors),this._overlayWidgets=new Yt(this._context),this._viewParts.push(this._overlayWidgets);const u=new ii(this._context);this._viewParts.push(u);const g=new qt(this._context);if(this._viewParts.push(g),a){const e=this._scrollbar.getOverviewRulerLayoutInfo();e.parent.insertBefore(a.getDomNode(),e.insertBefore)}this._linesContent.appendChild(c.getDomNode()),this._linesContent.appendChild(u.domNode),this._linesContent.appendChild(this._viewZones.domNode),this._linesContent.appendChild(this._viewLines.getDomNode()),this._linesContent.appendChild(this._contentWidgets.domNode),this._linesContent.appendChild(this._viewCursors.getDomNode()),this._overflowGuardContainer.appendChild(h.getDomNode()),this._overflowGuardContainer.appendChild(this._scrollbar.getDomNode()),this._overflowGuardContainer.appendChild(l.getDomNode()),this._overflowGuardContainer.appendChild(this._textAreaHandler.textArea),this._overflowGuardContainer.appendChild(this._textAreaHandler.textAreaCover),this._overflowGuardContainer.appendChild(this._overlayWidgets.getDomNode()),this._overflowGuardContainer.appendChild(g.getDomNode()),this.domNode.appendChild(this._overflowGuardContainer),s?s.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode.domNode):this.domNode.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode),this._applyLayout(),this._pointerHandler=this._register(new Ee(this._context,r,this._createPointerHandlerHelper()))}_flushAccumulatedAndRenderNow(){this._renderNow()}_createPointerHandlerHelper(){return{viewDomNode:this.domNode.domNode,linesContentDomNode:this._linesContent.domNode,focusTextArea:()=>{this.focus()},dispatchTextAreaEvent:e=>{this._textAreaHandler.textArea.domNode.dispatchEvent(e)},getLastRenderData:()=>{const e=this._viewCursors.getLastRenderData()||[],t=this._textAreaHandler.getLastRenderData();return new he(e,t)},shouldSuppressMouseDownOnViewZone:e=>this._viewZones.shouldSuppressMouseDownOnViewZone(e),shouldSuppressMouseDownOnWidget:e=>this._contentWidgets.shouldSuppressMouseDownOnWidget(e),getPositionFromDOMInfo:(e,t)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getPositionFromDOMInfo(e,t)),visibleRangeForPosition:(e,t)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(new se.L(e,t))),getLineWidth:e=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getLineWidth(e))}}_createTextAreaHandlerHelper(){return{visibleRangeForPositionRelativeToEditor:(e,t)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(new se.L(e,t)))}}_applyLayout(){const e=this._context.configuration.options.get(129);this.domNode.setWidth(e.width),this.domNode.setHeight(e.height),this._overflowGuardContainer.setWidth(e.width),this._overflowGuardContainer.setHeight(e.height),this._linesContent.setWidth(1e6),this._linesContent.setHeight(1e6)}_getEditorClassName(){const e=this._textAreaHandler.isFocused()?" focused":"";return this._context.configuration.options.get(126)+" "+(0,Pe.m6)(this._context.theme.type)+e}handleEvents(e){super.handleEvents(e),this._scheduleRender()}onConfigurationChanged(e){return this._configPixelRatio=this._context.configuration.options.get(127),this.domNode.setClassName(this._getEditorClassName()),this._applyLayout(),!1}onCursorStateChanged(e){return this._selections=e.selections,!1}onFocusChanged(e){return this.domNode.setClassName(this._getEditorClassName()),!1}onThemeChanged(e){return this.domNode.setClassName(this._getEditorClassName()),!1}dispose(){null!==this._renderAnimationFrame&&(this._renderAnimationFrame.dispose(),this._renderAnimationFrame=null),this._contentWidgets.overflowingContentWidgetsDomNode.domNode.remove(),this._context.removeEventHandler(this),this._viewLines.dispose();for(const e of this._viewParts)e.dispose();super.dispose()}_scheduleRender(){null===this._renderAnimationFrame&&(this._renderAnimationFrame=c.lI(this._onRenderScheduled.bind(this),100))}_onRenderScheduled(){this._renderAnimationFrame=null,this._flushAccumulatedAndRenderNow()}_renderNow(){!function(e){try{return e()}catch(e){(0,d.dL)(e)}}((()=>this._actualRender()))}_getViewPartsToRender(){let e=[],t=0;for(const i of this._viewParts)i.shouldRender()&&(e[t++]=i);return e}_actualRender(){if(!c.Uw(this.domNode.domNode))return;let e=this._getViewPartsToRender();if(!this._viewLines.shouldRender()&&0===e.length)return;const t=this._context.viewLayout.getLinesViewportData();this._context.model.setViewport(t.startLineNumber,t.endLineNumber,t.centeredLineNumber);const i=new vi(this._selections,t,this._context.viewLayout.getWhitespaceViewportData(),this._context.model);this._contentWidgets.shouldRender()&&this._contentWidgets.onBeforeRender(i),this._viewLines.shouldRender()&&(this._viewLines.renderText(i),this._viewLines.onDidRender(),e=this._getViewPartsToRender());const n=new R(this._context.viewLayout,i,this._viewLines);for(const t of e)t.prepareRender(n);for(const t of e)t.render(n),t.onDidRender();Math.abs(m.mX()-this._configPixelRatio)>.001&&this._context.configuration.updatePixelRatio()}delegateVerticalScrollbarMouseDown(e){this._scrollbar.delegateVerticalScrollbarMouseDown(e)}restoreState(e){this._context.model.setScrollPosition({scrollTop:e.scrollTop},1),this._context.model.tokenizeViewport(),this._renderNow(),this._viewLines.updateLineWidths(),this._context.model.setScrollPosition({scrollLeft:e.scrollLeft},1)}getOffsetForColumn(e,t){const i=this._context.model.validateModelPosition({lineNumber:e,column:t}),n=this._context.model.coordinatesConverter.convertModelPositionToViewPosition(i);this._flushAccumulatedAndRenderNow();const o=this._viewLines.visibleRangeForPosition(new se.L(n.lineNumber,n.column));return o?o.left:-1}getTargetAtClientPoint(e,t){const i=this._pointerHandler.getTargetAtClientPoint(e,t);return i?$e.convertViewToModelMouseTarget(i,this._context.model.coordinatesConverter):null}createOverviewRuler(e){return new ti(this._context,e)}change(e){this._viewZones.changeViewZones(e),this._scheduleRender()}render(e,t){if(t){this._viewLines.forceShouldRender();for(const e of this._viewParts)e.forceShouldRender()}e?this._flushAccumulatedAndRenderNow():this._scheduleRender()}focus(){this._textAreaHandler.focusTextArea()}isFocused(){return this._textAreaHandler.isFocused()}setAriaOptions(e){this._textAreaHandler.setAriaOptions(e)}addContentWidget(e){this._contentWidgets.addWidget(e.widget),this.layoutContentWidget(e),this._scheduleRender()}layoutContentWidget(e){let t=e.position&&e.position.range||null;if(null===t){const i=e.position?e.position.position:null;null!==i&&(t=new re.e(i.lineNumber,i.column,i.lineNumber,i.column))}const i=e.position?e.position.preference:null;this._contentWidgets.setWidgetPosition(e.widget,t,i),this._scheduleRender()}removeContentWidget(e){this._contentWidgets.removeWidget(e.widget),this._scheduleRender()}addOverlayWidget(e){this._overlayWidgets.addWidget(e.widget),this.layoutOverlayWidget(e),this._scheduleRender()}layoutOverlayWidget(e){const t=e.position?e.position.preference:null;this._overlayWidgets.setWidgetPosition(e.widget,t)&&this._scheduleRender()}removeOverlayWidget(e){this._overlayWidgets.removeWidget(e.widget),this._scheduleRender()}}class bi{constructor(e){this._selTrackedRange=null,this._trackSelection=!0,this._setState(e,new ae.rS(new re.e(1,1,1,1),0,new se.L(1,1),0),new ae.rS(new re.e(1,1,1,1),0,new se.L(1,1),0))}dispose(e){this._removeTrackedRange(e)}startTrackingSelection(e){this._trackSelection=!0,this._updateTrackedRange(e)}stopTrackingSelection(e){this._trackSelection=!1,this._removeTrackedRange(e)}_updateTrackedRange(e){this._trackSelection&&(this._selTrackedRange=e.model._setTrackedRange(this._selTrackedRange,this.modelState.selection,0))}_removeTrackedRange(e){this._selTrackedRange=e.model._setTrackedRange(this._selTrackedRange,null,0)}asCursorState(){return new ae.Vi(this.modelState,this.viewState)}readSelectionFromMarkers(e){const t=e.model._getTrackedRange(this._selTrackedRange);return 0===this.modelState.selection.getDirection()?new v.Y(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn):new v.Y(t.endLineNumber,t.endColumn,t.startLineNumber,t.startColumn)}ensureValidState(e){this._setState(e,this.modelState,this.viewState)}setState(e,t,i){this._setState(e,t,i)}static _validatePositionWithCache(e,t,i,n){return t.equals(i)?n:e.normalizePosition(t,2)}static _validateViewState(e,t){const i=t.position,n=t.selectionStart.getStartPosition(),o=t.selectionStart.getEndPosition(),s=e.normalizePosition(i,2),r=this._validatePositionWithCache(e,n,i,s),a=this._validatePositionWithCache(e,o,n,r);return i.equals(s)&&n.equals(r)&&o.equals(a)?t:new ae.rS(re.e.fromPositions(r,a),t.selectionStartLeftoverVisibleColumns+n.column-r.column,s,t.leftoverVisibleColumns+i.column-s.column)}_setState(e,t,i){if(i&&(i=bi._validateViewState(e.viewModel,i)),t){const i=e.model.validateRange(t.selectionStart),n=t.selectionStart.equalsRange(i)?t.selectionStartLeftoverVisibleColumns:0,o=e.model.validatePosition(t.position),s=t.position.equals(o)?t.leftoverVisibleColumns:0;t=new ae.rS(i,n,o,s)}else{if(!i)return;const n=e.model.validateRange(e.coordinatesConverter.convertViewRangeToModelRange(i.selectionStart)),o=e.model.validatePosition(e.coordinatesConverter.convertViewPositionToModelPosition(i.position));t=new ae.rS(n,i.selectionStartLeftoverVisibleColumns,o,i.leftoverVisibleColumns)}if(i){const n=e.coordinatesConverter.validateViewRange(i.selectionStart,t.selectionStart),o=e.coordinatesConverter.validateViewPosition(i.position,t.position);i=new ae.rS(n,t.selectionStartLeftoverVisibleColumns,o,t.leftoverVisibleColumns)}else{const n=e.coordinatesConverter.convertModelPositionToViewPosition(new se.L(t.selectionStart.startLineNumber,t.selectionStart.startColumn)),o=e.coordinatesConverter.convertModelPositionToViewPosition(new se.L(t.selectionStart.endLineNumber,t.selectionStart.endColumn)),s=new re.e(n.lineNumber,n.column,o.lineNumber,o.column),r=e.coordinatesConverter.convertModelPositionToViewPosition(t.position);i=new ae.rS(s,t.selectionStartLeftoverVisibleColumns,r,t.leftoverVisibleColumns)}this.modelState=t,this.viewState=i,this._updateTrackedRange(e)}}class wi{constructor(e){this.context=e,this.primaryCursor=new bi(e),this.secondaryCursors=[],this.lastAddedCursorIndex=0}dispose(){this.primaryCursor.dispose(this.context),this.killSecondaryCursors()}startTrackingSelections(){this.primaryCursor.startTrackingSelection(this.context);for(let e=0,t=this.secondaryCursors.length;e<t;e++)this.secondaryCursors[e].startTrackingSelection(this.context)}stopTrackingSelections(){this.primaryCursor.stopTrackingSelection(this.context);for(let e=0,t=this.secondaryCursors.length;e<t;e++)this.secondaryCursors[e].stopTrackingSelection(this.context)}updateContext(e){this.context=e}ensureValidState(){this.primaryCursor.ensureValidState(this.context);for(let e=0,t=this.secondaryCursors.length;e<t;e++)this.secondaryCursors[e].ensureValidState(this.context)}readSelectionFromMarkers(){let e=[];e[0]=this.primaryCursor.readSelectionFromMarkers(this.context);for(let t=0,i=this.secondaryCursors.length;t<i;t++)e[t+1]=this.secondaryCursors[t].readSelectionFromMarkers(this.context);return e}getAll(){let e=[];e[0]=this.primaryCursor.asCursorState();for(let t=0,i=this.secondaryCursors.length;t<i;t++)e[t+1]=this.secondaryCursors[t].asCursorState();return e}getViewPositions(){let e=[];e[0]=this.primaryCursor.viewState.position;for(let t=0,i=this.secondaryCursors.length;t<i;t++)e[t+1]=this.secondaryCursors[t].viewState.position;return e}getTopMostViewPosition(){let e=this.primaryCursor.viewState.position;for(let t=0,i=this.secondaryCursors.length;t<i;t++){const i=this.secondaryCursors[t].viewState.position;i.isBefore(e)&&(e=i)}return e}getBottomMostViewPosition(){let e=this.primaryCursor.viewState.position;for(let t=0,i=this.secondaryCursors.length;t<i;t++){const i=this.secondaryCursors[t].viewState.position;e.isBeforeOrEqual(i)&&(e=i)}return e}getSelections(){let e=[];e[0]=this.primaryCursor.modelState.selection;for(let t=0,i=this.secondaryCursors.length;t<i;t++)e[t+1]=this.secondaryCursors[t].modelState.selection;return e}getViewSelections(){let e=[];e[0]=this.primaryCursor.viewState.selection;for(let t=0,i=this.secondaryCursors.length;t<i;t++)e[t+1]=this.secondaryCursors[t].viewState.selection;return e}setSelections(e){this.setStates(ae.Vi.fromModelSelections(e))}getPrimaryCursor(){return this.primaryCursor.asCursorState()}setStates(e){null!==e&&(this.primaryCursor.setState(this.context,e[0].modelState,e[0].viewState),this._setSecondaryStates(e.slice(1)))}_setSecondaryStates(e){const t=this.secondaryCursors.length,i=e.length;if(t<i){let e=i-t;for(let t=0;t<e;t++)this._addSecondaryCursor()}else if(t>i){let e=t-i;for(let t=0;t<e;t++)this._removeSecondaryCursor(this.secondaryCursors.length-1)}for(let t=0;t<i;t++)this.secondaryCursors[t].setState(this.context,e[t].modelState,e[t].viewState)}killSecondaryCursors(){this._setSecondaryStates([])}_addSecondaryCursor(){this.secondaryCursors.push(new bi(this.context)),this.lastAddedCursorIndex=this.secondaryCursors.length}getLastAddedCursorIndex(){return 0===this.secondaryCursors.length||0===this.lastAddedCursorIndex?0:this.lastAddedCursorIndex}_removeSecondaryCursor(e){this.lastAddedCursorIndex>=e+1&&this.lastAddedCursorIndex--,this.secondaryCursors[e].dispose(this.context),this.secondaryCursors.splice(e,1)}_getAll(){let e=[];e[0]=this.primaryCursor;for(let t=0,i=this.secondaryCursors.length;t<i;t++)e[t+1]=this.secondaryCursors[t];return e}normalize(){if(0===this.secondaryCursors.length)return;let e=this._getAll(),t=[];for(let i=0,n=e.length;i<n;i++)t.push({index:i,selection:e[i].modelState.selection});t.sort(((e,t)=>e.selection.startLineNumber===t.selection.startLineNumber?e.selection.startColumn-t.selection.startColumn:e.selection.startLineNumber-t.selection.startLineNumber));for(let i=0;i<t.length-1;i++){const n=t[i],o=t[i+1],s=n.selection,r=o.selection;if(!this.context.cursorConfig.multiCursorMergeOverlapping)continue;let a;if(a=r.isEmpty()||s.isEmpty()?r.getStartPosition().isBeforeOrEqual(s.getEndPosition()):r.getStartPosition().isBefore(s.getEndPosition()),a){const s=n.index<o.index?i:i+1,r=n.index<o.index?i+1:i,a=t[r].index,l=t[s].index,c=t[r].selection,d=t[s].selection;if(!c.equalsSelection(d)){const i=c.plusRange(d),n=c.selectionStartLineNumber===c.startLineNumber&&c.selectionStartColumn===c.startColumn,o=d.selectionStartLineNumber===d.startLineNumber&&d.selectionStartColumn===d.startColumn;let r,h;a===this.lastAddedCursorIndex?(r=n,this.lastAddedCursorIndex=l):r=o,h=r?new v.Y(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn):new v.Y(i.endLineNumber,i.endColumn,i.startLineNumber,i.startColumn),t[s].selection=h;const u=ae.Vi.fromModelSelection(h);e[l].setState(this.context,u.modelState,u.viewState)}for(const e of t)e.index>a&&e.index--;e.splice(a,1),t.splice(r,1),this._removeSecondaryCursor(a-1),i--}}}}var yi=i(31380),Ci=i(23582),xi=i(83256);class Si{constructor(){this.type=0}}class ki{constructor(){this.type=1}}class Li{constructor(e){this.type=2,this._source=e}hasChanged(e){return this._source.hasChanged(e)}}class Ni{constructor(e,t){this.type=3,this.selections=e,this.modelSelections=t}}class Di{constructor(e){this.type=4,e?(this.affectsMinimap=e.affectsMinimap,this.affectsOverviewRuler=e.affectsOverviewRuler):(this.affectsMinimap=!0,this.affectsOverviewRuler=!0)}}class Ii{constructor(){this.type=5}}class Ei{constructor(e){this.type=6,this.isFocused=e}}class Ti{constructor(){this.type=7}}class Mi{constructor(){this.type=8}}class Ai{constructor(e,t){this.type=9,this.fromLineNumber=e,this.toLineNumber=t}}class Oi{constructor(e,t){this.type=10,this.fromLineNumber=e,this.toLineNumber=t}}class Pi{constructor(e,t){this.type=11,this.fromLineNumber=e,this.toLineNumber=t}}class Ri{constructor(e,t,i,n,o,s){this.type=12,this.source=e,this.range=t,this.selections=i,this.verticalType=n,this.revealHorizontal=o,this.scrollType=s}}class Fi{constructor(e){this.type=13,this.scrollWidth=e.scrollWidth,this.scrollLeft=e.scrollLeft,this.scrollHeight=e.scrollHeight,this.scrollTop=e.scrollTop,this.scrollWidthChanged=e.scrollWidthChanged,this.scrollLeftChanged=e.scrollLeftChanged,this.scrollHeightChanged=e.scrollHeightChanged,this.scrollTopChanged=e.scrollTopChanged}}class Bi{constructor(){this.type=14}}class Vi{constructor(e){this.type=15,this.ranges=e}}class Wi{constructor(){this.type=16}}class Hi{constructor(){this.type=17}}class zi extends u.JT{constructor(){super(),this._onEvent=this._register(new h.Q5),this.onEvent=this._onEvent.event,this._eventHandlers=[],this._viewEventQueue=null,this._isConsumingViewEventQueue=!1,this._collector=null,this._collectorCnt=0,this._outgoingEvents=[]}emitOutgoingEvent(e){this._addOutgoingEvent(e),this._emitOutgoingEvents()}_addOutgoingEvent(e){for(let t=0,i=this._outgoingEvents.length;t<i;t++)if(this._outgoingEvents[t].kind===e.kind)return void(this._outgoingEvents[t]=this._outgoingEvents[t].merge(e));this._outgoingEvents.push(e)}_emitOutgoingEvents(){for(;this._outgoingEvents.length>0;){if(this._collector||this._isConsumingViewEventQueue)return;const e=this._outgoingEvents.shift();e.isNoOp()||this._onEvent.fire(e)}}addViewEventHandler(e){for(let t=0,i=this._eventHandlers.length;t<i;t++)this._eventHandlers[t]===e&&console.warn("Detected duplicate listener in ViewEventDispatcher",e);this._eventHandlers.push(e)}removeViewEventHandler(e){for(let t=0;t<this._eventHandlers.length;t++)if(this._eventHandlers[t]===e){this._eventHandlers.splice(t,1);break}}beginEmitViewEvents(){return this._collectorCnt++,1===this._collectorCnt&&(this._collector=new ji),this._collector}endEmitViewEvents(){if(this._collectorCnt--,0===this._collectorCnt){const e=this._collector.outgoingEvents,t=this._collector.viewEvents;this._collector=null;for(const t of e)this._addOutgoingEvent(t);t.length>0&&this._emitMany(t)}this._emitOutgoingEvents()}emitSingleViewEvent(e){try{this.beginEmitViewEvents().emitViewEvent(e)}finally{this.endEmitViewEvents()}}_emitMany(e){this._viewEventQueue?this._viewEventQueue=this._viewEventQueue.concat(e):this._viewEventQueue=e,this._isConsumingViewEventQueue||this._consumeViewEventQueue()}_consumeViewEventQueue(){try{this._isConsumingViewEventQueue=!0,this._doConsumeQueue()}finally{this._isConsumingViewEventQueue=!1}}_doConsumeQueue(){for(;this._viewEventQueue;){const e=this._viewEventQueue;this._viewEventQueue=null;const t=this._eventHandlers.slice(0);for(const i of t)i.handleEvents(e)}}}class ji{constructor(){this.viewEvents=[],this.outgoingEvents=[]}emitViewEvent(e){this.viewEvents.push(e)}emitOutgoingEvent(e){this.outgoingEvents.push(e)}}class Ui{constructor(e,t,i,n){this.kind=0,this._oldContentWidth=e,this._oldContentHeight=t,this.contentWidth=i,this.contentHeight=n,this.contentWidthChanged=this._oldContentWidth!==this.contentWidth,this.contentHeightChanged=this._oldContentHeight!==this.contentHeight}isNoOp(){return!this.contentWidthChanged&&!this.contentHeightChanged}merge(e){return 0!==e.kind?this:new Ui(this._oldContentWidth,this._oldContentHeight,e.contentWidth,e.contentHeight)}}class $i{constructor(e,t){this.kind=1,this.oldHasFocus=e,this.hasFocus=t}isNoOp(){return this.oldHasFocus===this.hasFocus}merge(e){return 1!==e.kind?this:new $i(this.oldHasFocus,e.hasFocus)}}class Ki{constructor(e,t,i,n,o,s,r,a){this.kind=2,this._oldScrollWidth=e,this._oldScrollLeft=t,this._oldScrollHeight=i,this._oldScrollTop=n,this.scrollWidth=o,this.scrollLeft=s,this.scrollHeight=r,this.scrollTop=a,this.scrollWidthChanged=this._oldScrollWidth!==this.scrollWidth,this.scrollLeftChanged=this._oldScrollLeft!==this.scrollLeft,this.scrollHeightChanged=this._oldScrollHeight!==this.scrollHeight,this.scrollTopChanged=this._oldScrollTop!==this.scrollTop}isNoOp(){return!(this.scrollWidthChanged||this.scrollLeftChanged||this.scrollHeightChanged||this.scrollTopChanged)}merge(e){return 2!==e.kind?this:new Ki(this._oldScrollWidth,this._oldScrollLeft,this._oldScrollHeight,this._oldScrollTop,e.scrollWidth,e.scrollLeft,e.scrollHeight,e.scrollTop)}}class qi{constructor(){this.kind=3}isNoOp(){return!1}merge(e){return this}}class Zi{constructor(e,t,i,n,o,s,r){this.kind=6,this.oldSelections=e,this.selections=t,this.oldModelVersionId=i,this.modelVersionId=n,this.source=o,this.reason=s,this.reachedMaxCursorCount=r}static _selectionsAreEqual(e,t){if(!e&&!t)return!0;if(!e||!t)return!1;const i=e.length;if(i!==t.length)return!1;for(let n=0;n<i;n++)if(!e[n].equalsSelection(t[n]))return!1;return!0}isNoOp(){return Zi._selectionsAreEqual(this.oldSelections,this.selections)&&this.oldModelVersionId===this.modelVersionId}merge(e){return 6!==e.kind?this:new Zi(this.oldSelections,e.selections,this.oldModelVersionId,e.modelVersionId,e.source,e.reason,this.reachedMaxCursorCount||e.reachedMaxCursorCount)}}class Gi{constructor(){this.kind=5}isNoOp(){return!1}merge(e){return this}}class Yi{constructor(e,t){this.modelVersionId=e.getVersionId(),this.cursorState=t.getCursorStates()}equals(e){if(!e)return!1;if(this.modelVersionId!==e.modelVersionId)return!1;if(this.cursorState.length!==e.cursorState.length)return!1;for(let t=0,i=this.cursorState.length;t<i;t++)if(!this.cursorState[t].equals(e.cursorState[t]))return!1;return!0}}class Qi{constructor(e,t,i){this._model=e,this._autoClosedCharactersDecorations=t,this._autoClosedEnclosingDecorations=i}static getAllAutoClosedCharacters(e){let t=[];for(const i of e)t=t.concat(i.getAutoClosedCharactersRanges());return t}dispose(){this._autoClosedCharactersDecorations=this._model.deltaDecorations(this._autoClosedCharactersDecorations,[]),this._autoClosedEnclosingDecorations=this._model.deltaDecorations(this._autoClosedEnclosingDecorations,[])}getAutoClosedCharactersRanges(){let e=[];for(let t=0;t<this._autoClosedCharactersDecorations.length;t++){const i=this._model.getDecorationRange(this._autoClosedCharactersDecorations[t]);i&&e.push(i)}return e}isValid(e){let t=[];for(let e=0;e<this._autoClosedEnclosingDecorations.length;e++){const i=this._model.getDecorationRange(this._autoClosedEnclosingDecorations[e]);if(i&&(t.push(i),i.startLineNumber!==i.endLineNumber))return!1}t.sort(re.e.compareRangesUsingStarts),e.sort(re.e.compareRangesUsingStarts);for(let i=0;i<e.length;i++){if(i>=t.length)return!1;if(!t[i].strictContainsRange(e[i]))return!1}return!0}}class Xi extends u.JT{constructor(e,t,i,n){super(),this._model=e,this._knownModelVersionId=this._model.getVersionId(),this._viewModel=t,this._coordinatesConverter=i,this.context=new ae.zp(this._model,this._viewModel,this._coordinatesConverter,n),this._cursors=new wi(this.context),this._hasFocus=!1,this._isHandling=!1,this._isDoingComposition=!1,this._selectionsWhenCompositionStarted=null,this._columnSelectData=null,this._autoClosedActions=[],this._prevEditOperationType=0}dispose(){this._cursors.dispose(),this._autoClosedActions=(0,u.B9)(this._autoClosedActions),super.dispose()}updateConfiguration(e){this.context=new ae.zp(this._model,this._viewModel,this._coordinatesConverter,e),this._cursors.updateContext(this.context)}onLineMappingChanged(e){this._knownModelVersionId===this._model.getVersionId()&&this.setStates(e,"viewModel",0,this.getCursorStates())}setHasFocus(e){this._hasFocus=e}_validateAutoClosedActions(){if(this._autoClosedActions.length>0){let e=this._cursors.getSelections();for(let t=0;t<this._autoClosedActions.length;t++){const i=this._autoClosedActions[t];i.isValid(e)||(i.dispose(),this._autoClosedActions.splice(t,1),t--)}}}getPrimaryCursorState(){return this._cursors.getPrimaryCursor()}getLastAddedCursorIndex(){return this._cursors.getLastAddedCursorIndex()}getCursorStates(){return this._cursors.getAll()}setStates(e,t,i,n){let o=!1;null!==n&&n.length>Xi.MAX_CURSOR_COUNT&&(n=n.slice(0,Xi.MAX_CURSOR_COUNT),o=!0);const s=new Yi(this._model,this);return this._cursors.setStates(n),this._cursors.normalize(),this._columnSelectData=null,this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(e,t,i,s,o)}setCursorColumnSelectData(e){this._columnSelectData=e}revealPrimary(e,t,i,n){const o=this._cursors.getViewPositions();if(o.length>1)this._emitCursorRevealRange(e,t,null,this._cursors.getViewSelections(),0,i,n);else{const s=o[0],r=new re.e(s.lineNumber,s.column,s.lineNumber,s.column);this._emitCursorRevealRange(e,t,r,null,0,i,n)}}_revealPrimaryCursor(e,t,i,n,o){const s=this._cursors.getViewPositions();if(s.length>1)this._emitCursorRevealRange(e,t,null,this._cursors.getViewSelections(),i,n,o);else{const r=s[0],a=new re.e(r.lineNumber,r.column,r.lineNumber,r.column);this._emitCursorRevealRange(e,t,a,null,i,n,o)}}_emitCursorRevealRange(e,t,i,n,o,s,r){e.emitViewEvent(new Ri(t,i,n,o,s,r))}saveState(){let e=[];const t=this._cursors.getSelections();for(let i=0,n=t.length;i<n;i++){const n=t[i];e.push({inSelectionMode:!n.isEmpty(),selectionStart:{lineNumber:n.selectionStartLineNumber,column:n.selectionStartColumn},position:{lineNumber:n.positionLineNumber,column:n.positionColumn}})}return e}restoreState(e,t){let i=[];for(let e=0,n=t.length;e<n;e++){const n=t[e];let o=1,s=1;n.position&&n.position.lineNumber&&(o=n.position.lineNumber),n.position&&n.position.column&&(s=n.position.column);let r=o,a=s;n.selectionStart&&n.selectionStart.lineNumber&&(r=n.selectionStart.lineNumber),n.selectionStart&&n.selectionStart.column&&(a=n.selectionStart.column),i.push({selectionStartLineNumber:r,selectionStartColumn:a,positionLineNumber:o,positionColumn:s})}this.setStates(e,"restoreState",0,ae.Vi.fromModelSelections(i)),this.revealPrimary(e,"restoreState",!0,1)}onModelContentChanged(e,t){if(t instanceof xi.D8){if(this._isHandling)return;this._isHandling=!0;try{this.setStates(e,"modelChange",0,this.getCursorStates())}finally{this._isHandling=!1}}else{if(this._knownModelVersionId=t.versionId,this._isHandling)return;const i=t.containsEvent(1);if(this._prevEditOperationType=0,i)this._cursors.dispose(),this._cursors=new wi(this.context),this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(e,"model",1,null,!1);else if(this._hasFocus&&t.resultingSelection&&t.resultingSelection.length>0){const i=ae.Vi.fromModelSelections(t.resultingSelection);this.setStates(e,"modelChange",t.isUndoing?5:t.isRedoing?6:2,i)&&this._revealPrimaryCursor(e,"modelChange",0,!0,0)}else{const t=this._cursors.readSelectionFromMarkers();this.setStates(e,"modelChange",2,ae.Vi.fromModelSelections(t))}}}getSelection(){return this._cursors.getPrimaryCursor().modelState.selection}getTopMostViewPosition(){return this._cursors.getTopMostViewPosition()}getBottomMostViewPosition(){return this._cursors.getBottomMostViewPosition()}getCursorColumnSelectData(){if(this._columnSelectData)return this._columnSelectData;const e=this._cursors.getPrimaryCursor(),t=e.viewState.selectionStart.getStartPosition(),i=e.viewState.position;return{isReal:!1,fromViewLineNumber:t.lineNumber,fromViewVisualColumn:ae.io.visibleColumnFromColumn2(this.context.cursorConfig,this._viewModel,t),toViewLineNumber:i.lineNumber,toViewVisualColumn:ae.io.visibleColumnFromColumn2(this.context.cursorConfig,this._viewModel,i)}}getSelections(){return this._cursors.getSelections()}setSelections(e,t,i,n){this.setStates(e,t,n,ae.Vi.fromModelSelections(i))}getPrevEditOperationType(){return this._prevEditOperationType}setPrevEditOperationType(e){this._prevEditOperationType=e}_pushAutoClosedAction(e,t){let i=[],n=[];for(let o=0,s=e.length;o<s;o++)i.push({range:e[o],options:{description:"auto-closed-character",inlineClassName:"auto-closed-character",stickiness:1}}),n.push({range:t[o],options:{description:"auto-closed-enclosing",stickiness:1}});const o=this._model.deltaDecorations([],i),s=this._model.deltaDecorations([],n);this._autoClosedActions.push(new Qi(this._model,o,s))}_executeEditOperation(e){if(!e)return;e.shouldPushStackElementBefore&&this._model.pushStackElement();const t=Ji.executeCommands(this._model,this._cursors.getSelections(),e.commands);if(t){this._interpretCommandResult(t);let i=[],n=[];for(let t=0;t<e.commands.length;t++){const o=e.commands[t];o instanceof Ci.g&&o.enclosingRange&&o.closeCharacterRange&&(i.push(o.closeCharacterRange),n.push(o.enclosingRange))}i.length>0&&this._pushAutoClosedAction(i,n),this._prevEditOperationType=e.type}e.shouldPushStackElementAfter&&this._model.pushStackElement()}_interpretCommandResult(e){e&&0!==e.length||(e=this._cursors.readSelectionFromMarkers()),this._columnSelectData=null,this._cursors.setSelections(e),this._cursors.normalize()}_emitStateChangedIfNecessary(e,t,i,n,o){const s=new Yi(this._model,this);if(s.equals(n))return!1;const r=this._cursors.getSelections(),a=this._cursors.getViewSelections();if(e.emitViewEvent(new Ni(a,r)),!n||n.cursorState.length!==s.cursorState.length||s.cursorState.some(((e,t)=>!e.modelState.equals(n.cursorState[t].modelState)))){const a=n?n.cursorState.map((e=>e.modelState.selection)):null,l=n?n.modelVersionId:0;e.emitOutgoingEvent(new Zi(a,r,l,s.modelVersionId,t||"keyboard",i,o))}return!0}_findAutoClosingPairs(e){if(!e.length)return null;let t=[];for(let i=0,n=e.length;i<n;i++){const n=e[i];if(!n.text||n.text.indexOf("\n")>=0)return null;const o=n.text.match(/([)\]}>'"`])([^)\]}>'"`]*)$/);if(!o)return null;const s=o[1],r=this.context.cursorConfig.autoClosingPairs.autoClosingPairsCloseSingleChar.get(s);if(!r||1!==r.length)return null;const a=r[0].open,l=n.text.length-o[2].length-1,c=n.text.lastIndexOf(a,l-1);if(-1===c)return null;t.push([c,l])}return t}executeEdits(e,t,i,n){let o=null;"snippet"===t&&(o=this._findAutoClosingPairs(i)),o&&(i[0]._isTracked=!0);let s=[],r=[];const a=this._model.pushEditOperations(this.getSelections(),i,(e=>{if(o)for(let t=0,i=o.length;t<i;t++){const[i,n]=o[t],a=e[t],l=a.range.startLineNumber,c=a.range.startColumn-1+i,d=a.range.startColumn-1+n;s.push(new re.e(l,d+1,l,d+2)),r.push(new re.e(l,c+1,l,d+2))}const t=n(e);return t&&(this._isHandling=!0),t}));a&&(this._isHandling=!1,this.setSelections(e,t,a,0)),s.length>0&&this._pushAutoClosedAction(s,r)}_executeEdit(e,t,i,n=0){if(this.context.cursorConfig.readOnly)return;const o=new Yi(this._model,this);this._cursors.stopTrackingSelections(),this._isHandling=!0;try{this._cursors.ensureValidState(),e()}catch(e){(0,d.dL)(e)}this._isHandling=!1,this._cursors.startTrackingSelections(),this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(t,i,n,o,!1)&&this._revealPrimaryCursor(t,i,0,!0,0)}setIsDoingComposition(e){this._isDoingComposition=e}getAutoClosedCharacters(){return Qi.getAllAutoClosedCharacters(this._autoClosedActions)}startComposition(e){this._selectionsWhenCompositionStarted=this.getSelections().slice(0)}endComposition(e,t){this._executeEdit((()=>{"keyboard"===t&&(this._executeEditOperation(Ci.u.compositionEndWithInterceptors(this._prevEditOperationType,this.context.cursorConfig,this._model,this._selectionsWhenCompositionStarted,this.getSelections(),this.getAutoClosedCharacters())),this._selectionsWhenCompositionStarted=null)}),e,t)}type(e,t,i){this._executeEdit((()=>{if("keyboard"===i){const e=t.length;let i=0;for(;i<e;){const e=Te.vH(t,i),n=t.substr(i,e);this._executeEditOperation(Ci.u.typeWithInterceptors(this._isDoingComposition,this._prevEditOperationType,this.context.cursorConfig,this._model,this.getSelections(),this.getAutoClosedCharacters(),n)),i+=e}}else this._executeEditOperation(Ci.u.typeWithoutInterceptors(this._prevEditOperationType,this.context.cursorConfig,this._model,this.getSelections(),t))}),e,i)}compositionType(e,t,i,n,o,s){if(0!==t.length||0!==i||0!==n)this._executeEdit((()=>{this._executeEditOperation(Ci.u.compositionType(this._prevEditOperationType,this.context.cursorConfig,this._model,this.getSelections(),t,i,n,o))}),e,s);else if(0!==o){const t=this.getSelections().map((e=>{const t=e.getPosition();return new v.Y(t.lineNumber,t.column+o,t.lineNumber,t.column+o)}));this.setSelections(e,s,t,0)}}paste(e,t,i,n,o){this._executeEdit((()=>{this._executeEditOperation(Ci.u.paste(this.context.cursorConfig,this._model,this.getSelections(),t,i,n||[]))}),e,o,4)}cut(e,t){this._executeEdit((()=>{this._executeEditOperation(yi.A.cut(this.context.cursorConfig,this._model,this.getSelections()))}),e,t)}executeCommand(e,t,i){this._executeEdit((()=>{this._cursors.killSecondaryCursors(),this._executeEditOperation(new ae.Tp(0,[t],{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))}),e,i)}executeCommands(e,t,i){this._executeEdit((()=>{this._executeEditOperation(new ae.Tp(0,t,{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))}),e,i)}}Xi.MAX_CURSOR_COUNT=1e4;class Ji{static executeCommands(e,t,i){const n={model:e,selectionsBefore:t,trackedRanges:[],trackedRangesDirection:[]},o=this._innerExecuteCommands(n,i);for(let e=0,t=n.trackedRanges.length;e<t;e++)n.model._setTrackedRange(n.trackedRanges[e],null,0);return o}static _innerExecuteCommands(e,t){if(this._arrayIsEmpty(t))return null;const i=this._getEditOperations(e,t);if(0===i.operations.length)return null;const n=i.operations,o=this._getLoserCursorMap(n);if(o.hasOwnProperty("0"))return console.warn("Ignoring commands"),null;let s=[];for(let e=0,t=n.length;e<t;e++)o.hasOwnProperty(n[e].identifier.major.toString())||s.push(n[e]);i.hadTrackedEditOperation&&s.length>0&&(s[0]._isTracked=!0);let r=e.model.pushEditOperations(e.selectionsBefore,s,(i=>{let n=[];for(let t=0;t<e.selectionsBefore.length;t++)n[t]=[];for(const e of i)e.identifier&&n[e.identifier.major].push(e);const o=(e,t)=>e.identifier.minor-t.identifier.minor;let s=[];for(let i=0;i<e.selectionsBefore.length;i++)n[i].length>0?(n[i].sort(o),s[i]=t[i].computeCursorState(e.model,{getInverseEditOperations:()=>n[i],getTrackedSelection:t=>{const i=parseInt(t,10),n=e.model._getTrackedRange(e.trackedRanges[i]);return 0===e.trackedRangesDirection[i]?new v.Y(n.startLineNumber,n.startColumn,n.endLineNumber,n.endColumn):new v.Y(n.endLineNumber,n.endColumn,n.startLineNumber,n.startColumn)}})):s[i]=e.selectionsBefore[i];return s}));r||(r=e.selectionsBefore);let a=[];for(let e in o)o.hasOwnProperty(e)&&a.push(parseInt(e,10));a.sort(((e,t)=>t-e));for(const e of a)r.splice(e,1);return r}static _arrayIsEmpty(e){for(let t=0,i=e.length;t<i;t++)if(e[t])return!1;return!0}static _getEditOperations(e,t){let i=[],n=!1;for(let o=0,s=t.length;o<s;o++){const s=t[o];if(s){const t=this._getEditOperationsFromCommand(e,o,s);i=i.concat(t.operations),n=n||t.hadTrackedEditOperation}}return{operations:i,hadTrackedEditOperation:n}}static _getEditOperationsFromCommand(e,t,i){let n=[],o=0;const s=(e,s,r=!1)=>{re.e.isEmpty(e)&&""===s||n.push({identifier:{major:t,minor:o++},range:e,text:s,forceMoveMarkers:r,isAutoWhitespaceEdit:i.insertsAutoWhitespace})};let r=!1;const a={addEditOperation:s,addTrackedEditOperation:(e,t,i)=>{r=!0,s(e,t,i)},trackSelection:(t,i)=>{const n=v.Y.liftSelection(t);let o;if(n.isEmpty())if("boolean"==typeof i)o=i?2:3;else{const t=e.model.getLineMaxColumn(n.startLineNumber);o=n.startColumn===t?2:3}else o=1;const s=e.trackedRanges.length,r=e.model._setTrackedRange(null,n,o);return e.trackedRanges[s]=r,e.trackedRangesDirection[s]=n.getDirection(),s.toString()}};try{i.getEditOperations(e.model,a)}catch(e){return(0,d.dL)(e),{operations:[],hadTrackedEditOperation:!1}}return{operations:n,hadTrackedEditOperation:r}}static _getLoserCursorMap(e){(e=e.slice(0)).sort(((e,t)=>-re.e.compareRangesUsingEnds(e.range,t.range)));let t={};for(let i=1;i<e.length;i++){const n=e[i-1],o=e[i];if(re.e.getStartPosition(n.range).isBefore(re.e.getEndPosition(o.range))){let s;s=n.identifier.major>o.identifier.major?n.identifier.major:o.identifier.major,t[s.toString()]=!0;for(let t=0;t<e.length;t++)e[t].identifier.major===s&&(e.splice(t,1),t<i&&i--,t--);i>0&&i--}}return t}}var en=i(30653),tn=i(96518),nn=i(29102),on=i(55713),sn=i(76633);class rn{constructor(){this._hasPending=!1,this._inserts=[],this._changes=[],this._removes=[]}insert(e){this._hasPending=!0,this._inserts.push(e)}change(e){this._hasPending=!0,this._changes.push(e)}remove(e){this._hasPending=!0,this._removes.push(e)}mustCommit(){return this._hasPending}commit(e){if(!this._hasPending)return;const t=this._inserts,i=this._changes,n=this._removes;this._hasPending=!1,this._inserts=[],this._changes=[],this._removes=[],e._commitPendingChanges(t,i,n)}}class an{constructor(e,t,i,n,o){this.id=e,this.afterLineNumber=t,this.ordinal=i,this.height=n,this.minWidth=o,this.prefixSum=0}}class ln{constructor(e,t,i,n){this._instanceId=Te.PJ(++ln.INSTANCE_COUNT),this._pendingChanges=new rn,this._lastWhitespaceId=0,this._arr=[],this._prefixSumValidIndex=-1,this._minWidth=-1,this._lineCount=e,this._lineHeight=t,this._paddingTop=i,this._paddingBottom=n}static findInsertionIndex(e,t,i){let n=0,o=e.length;for(;n<o;){const s=n+o>>>1;t===e[s].afterLineNumber?i<e[s].ordinal?o=s:n=s+1:t<e[s].afterLineNumber?o=s:n=s+1}return n}setLineHeight(e){this._checkPendingChanges(),this._lineHeight=e}setPadding(e,t){this._paddingTop=e,this._paddingBottom=t}onFlushed(e){this._checkPendingChanges(),this._lineCount=e}changeWhitespace(e){let t=!1;try{e({insertWhitespace:(e,i,n,o)=>{t=!0,e|=0,i|=0,n|=0,o|=0;const s=this._instanceId+ ++this._lastWhitespaceId;return this._pendingChanges.insert(new an(s,e,i,n,o)),s},changeOneWhitespace:(e,i,n)=>{t=!0,i|=0,n|=0,this._pendingChanges.change({id:e,newAfterLineNumber:i,newHeight:n})},removeWhitespace:e=>{t=!0,this._pendingChanges.remove({id:e})}})}finally{this._pendingChanges.commit(this)}return t}_commitPendingChanges(e,t,i){if((e.length>0||i.length>0)&&(this._minWidth=-1),e.length+t.length+i.length<=1){for(const t of e)this._insertWhitespace(t);for(const e of t)this._changeOneWhitespace(e.id,e.newAfterLineNumber,e.newHeight);for(const e of i){const t=this._findWhitespaceIndex(e.id);-1!==t&&this._removeWhitespace(t)}return}const n=new Set;for(const e of i)n.add(e.id);const o=new Map;for(const e of t)o.set(e.id,e);const s=e=>{let t=[];for(const i of e)if(!n.has(i.id)){if(o.has(i.id)){const e=o.get(i.id);i.afterLineNumber=e.newAfterLineNumber,i.height=e.newHeight}t.push(i)}return t},r=s(this._arr).concat(s(e));r.sort(((e,t)=>e.afterLineNumber===t.afterLineNumber?e.ordinal-t.ordinal:e.afterLineNumber-t.afterLineNumber)),this._arr=r,this._prefixSumValidIndex=-1}_checkPendingChanges(){this._pendingChanges.mustCommit()&&this._pendingChanges.commit(this)}_insertWhitespace(e){const t=ln.findInsertionIndex(this._arr,e.afterLineNumber,e.ordinal);this._arr.splice(t,0,e),this._prefixSumValidIndex=Math.min(this._prefixSumValidIndex,t-1)}_findWhitespaceIndex(e){const t=this._arr;for(let i=0,n=t.length;i<n;i++)if(t[i].id===e)return i;return-1}_changeOneWhitespace(e,t,i){const n=this._findWhitespaceIndex(e);if(-1!==n&&(this._arr[n].height!==i&&(this._arr[n].height=i,this._prefixSumValidIndex=Math.min(this._prefixSumValidIndex,n-1)),this._arr[n].afterLineNumber!==t)){const e=this._arr[n];this._removeWhitespace(n),e.afterLineNumber=t,this._insertWhitespace(e)}}_removeWhitespace(e){this._arr.splice(e,1),this._prefixSumValidIndex=Math.min(this._prefixSumValidIndex,e-1)}onLinesDeleted(e,t){this._checkPendingChanges(),e|=0,t|=0,this._lineCount-=t-e+1;for(let i=0,n=this._arr.length;i<n;i++){const n=this._arr[i].afterLineNumber;e<=n&&n<=t?this._arr[i].afterLineNumber=e-1:n>t&&(this._arr[i].afterLineNumber-=t-e+1)}}onLinesInserted(e,t){this._checkPendingChanges(),e|=0,t|=0,this._lineCount+=t-e+1;for(let i=0,n=this._arr.length;i<n;i++){e<=this._arr[i].afterLineNumber&&(this._arr[i].afterLineNumber+=t-e+1)}}getWhitespacesTotalHeight(){return this._checkPendingChanges(),0===this._arr.length?0:this.getWhitespacesAccumulatedHeight(this._arr.length-1)}getWhitespacesAccumulatedHeight(e){this._checkPendingChanges(),e|=0;let t=Math.max(0,this._prefixSumValidIndex+1);0===t&&(this._arr[0].prefixSum=this._arr[0].height,t++);for(let i=t;i<=e;i++)this._arr[i].prefixSum=this._arr[i-1].prefixSum+this._arr[i].height;return this._prefixSumValidIndex=Math.max(this._prefixSumValidIndex,e),this._arr[e].prefixSum}getLinesTotalHeight(){this._checkPendingChanges();return this._lineHeight*this._lineCount+this.getWhitespacesTotalHeight()+this._paddingTop+this._paddingBottom}getWhitespaceAccumulatedHeightBeforeLineNumber(e){this._checkPendingChanges(),e|=0;const t=this._findLastWhitespaceBeforeLineNumber(e);return-1===t?0:this.getWhitespacesAccumulatedHeight(t)}_findLastWhitespaceBeforeLineNumber(e){e|=0;const t=this._arr;let i=0,n=t.length-1;for(;i<=n;){const o=i+((n-i|0)/2|0)|0;if(t[o].afterLineNumber<e){if(o+1>=t.length||t[o+1].afterLineNumber>=e)return o;i=o+1|0}else n=o-1|0}return-1}_findFirstWhitespaceAfterLineNumber(e){e|=0;const t=this._findLastWhitespaceBeforeLineNumber(e)+1;return t<this._arr.length?t:-1}getFirstWhitespaceIndexAfterLineNumber(e){return this._checkPendingChanges(),e|=0,this._findFirstWhitespaceAfterLineNumber(e)}getVerticalOffsetForLineNumber(e){let t;this._checkPendingChanges(),t=(e|=0)>1?this._lineHeight*(e-1):0;return t+this.getWhitespaceAccumulatedHeightBeforeLineNumber(e)+this._paddingTop}getWhitespaceMinWidth(){if(this._checkPendingChanges(),-1===this._minWidth){let e=0;for(let t=0,i=this._arr.length;t<i;t++)e=Math.max(e,this._arr[t].minWidth);this._minWidth=e}return this._minWidth}isAfterLines(e){this._checkPendingChanges();return e>this.getLinesTotalHeight()}isInTopPadding(e){return 0!==this._paddingTop&&(this._checkPendingChanges(),e<this._paddingTop)}isInBottomPadding(e){if(0===this._paddingBottom)return!1;this._checkPendingChanges();return e>=this.getLinesTotalHeight()-this._paddingBottom}getLineNumberAtOrAfterVerticalOffset(e){if(this._checkPendingChanges(),(e|=0)<0)return 1;const t=0|this._lineCount,i=this._lineHeight;let n=1,o=t;for(;n<o;){const t=(n+o)/2|0,s=0|this.getVerticalOffsetForLineNumber(t);if(e>=s+i)n=t+1;else{if(e>=s)return t;o=t}}return n>t?t:n}getLinesViewportData(e,t){this._checkPendingChanges(),e|=0,t|=0;const i=this._lineHeight,n=0|this.getLineNumberAtOrAfterVerticalOffset(e),o=0|this.getVerticalOffsetForLineNumber(n);let s=0|this._lineCount,r=0|this.getFirstWhitespaceIndexAfterLineNumber(n);const a=0|this.getWhitespacesCount();let l,c;-1===r?(r=a,c=s+1,l=0):(c=0|this.getAfterLineNumberForWhitespaceIndex(r),l=0|this.getHeightForWhitespaceIndex(r));let d=o,h=d;const u=5e5;let g=0;o>=u&&(g=Math.floor(o/u)*u,g=Math.floor(g/i)*i,h-=g);const p=[],f=e+(t-e)/2;let m=-1;for(let e=n;e<=s;e++){if(-1===m){(d<=f&&f<d+i||d>f)&&(m=e)}for(d+=i,p[e-n]=h,h+=i;c===e;)h+=l,d+=l,r++,r>=a?c=s+1:(c=0|this.getAfterLineNumberForWhitespaceIndex(r),l=0|this.getHeightForWhitespaceIndex(r));if(d>=t){s=e;break}}-1===m&&(m=s);const v=0|this.getVerticalOffsetForLineNumber(s);let _=n,b=s;return _<b&&o<e&&_++,_<b&&v+i>t&&b--,{bigNumbersDelta:g,startLineNumber:n,endLineNumber:s,relativeVerticalOffset:p,centeredLineNumber:m,completelyVisibleStartLineNumber:_,completelyVisibleEndLineNumber:b}}getVerticalOffsetForWhitespaceIndex(e){this._checkPendingChanges(),e|=0;const t=this.getAfterLineNumberForWhitespaceIndex(e);let i,n;return i=t>=1?this._lineHeight*t:0,n=e>0?this.getWhitespacesAccumulatedHeight(e-1):0,i+n+this._paddingTop}getWhitespaceIndexAtOrAfterVerticallOffset(e){this._checkPendingChanges(),e|=0;let t=0,i=this.getWhitespacesCount()-1;if(i<0)return-1;if(e>=this.getVerticalOffsetForWhitespaceIndex(i)+this.getHeightForWhitespaceIndex(i))return-1;for(;t<i;){const n=Math.floor((t+i)/2),o=this.getVerticalOffsetForWhitespaceIndex(n);if(e>=o+this.getHeightForWhitespaceIndex(n))t=n+1;else{if(e>=o)return n;i=n}}return t}getWhitespaceAtVerticalOffset(e){this._checkPendingChanges(),e|=0;const t=this.getWhitespaceIndexAtOrAfterVerticallOffset(e);if(t<0)return null;if(t>=this.getWhitespacesCount())return null;const i=this.getVerticalOffsetForWhitespaceIndex(t);if(i>e)return null;const n=this.getHeightForWhitespaceIndex(t);return{id:this.getIdForWhitespaceIndex(t),afterLineNumber:this.getAfterLineNumberForWhitespaceIndex(t),verticalOffset:i,height:n}}getWhitespaceViewportData(e,t){this._checkPendingChanges(),e|=0,t|=0;const i=this.getWhitespaceIndexAtOrAfterVerticallOffset(e),n=this.getWhitespacesCount()-1;if(i<0)return[];let o=[];for(let e=i;e<=n;e++){const i=this.getVerticalOffsetForWhitespaceIndex(e),n=this.getHeightForWhitespaceIndex(e);if(i>=t)break;o.push({id:this.getIdForWhitespaceIndex(e),afterLineNumber:this.getAfterLineNumberForWhitespaceIndex(e),verticalOffset:i,height:n})}return o}getWhitespaces(){return this._checkPendingChanges(),this._arr.slice(0)}getWhitespacesCount(){return this._checkPendingChanges(),this._arr.length}getIdForWhitespaceIndex(e){return this._checkPendingChanges(),e|=0,this._arr[e].id}getAfterLineNumberForWhitespaceIndex(e){return this._checkPendingChanges(),e|=0,this._arr[e].afterLineNumber}getHeightForWhitespaceIndex(e){return this._checkPendingChanges(),e|=0,this._arr[e].height}}ln.INSTANCE_COUNT=0;class cn{constructor(e,t,i,n){(e|=0)<0&&(e=0),(t|=0)<0&&(t=0),(i|=0)<0&&(i=0),(n|=0)<0&&(n=0),this.width=e,this.contentWidth=t,this.scrollWidth=Math.max(e,t),this.height=i,this.contentHeight=n,this.scrollHeight=Math.max(i,n)}equals(e){return this.width===e.width&&this.contentWidth===e.contentWidth&&this.height===e.height&&this.contentHeight===e.contentHeight}}class dn extends u.JT{constructor(e,t){super(),this._onDidContentSizeChange=this._register(new h.Q5),this.onDidContentSizeChange=this._onDidContentSizeChange.event,this._dimensions=new cn(0,0,0,0),this._scrollable=this._register(new sn.Rm(e,t)),this.onDidScroll=this._scrollable.onScroll}getScrollable(){return this._scrollable}setSmoothScrollDuration(e){this._scrollable.setSmoothScrollDuration(e)}validateScrollPosition(e){return this._scrollable.validateScrollPosition(e)}getScrollDimensions(){return this._dimensions}setScrollDimensions(e){if(this._dimensions.equals(e))return;const t=this._dimensions;this._dimensions=e,this._scrollable.setScrollDimensions({width:e.width,scrollWidth:e.scrollWidth,height:e.height,scrollHeight:e.scrollHeight},!0);const i=t.contentWidth!==e.contentWidth,n=t.contentHeight!==e.contentHeight;(i||n)&&this._onDidContentSizeChange.fire(new Ui(t.contentWidth,t.contentHeight,e.contentWidth,e.contentHeight))}getFutureScrollPosition(){return this._scrollable.getFutureScrollPosition()}getCurrentScrollPosition(){return this._scrollable.getCurrentScrollPosition()}setScrollPositionNow(e){this._scrollable.setScrollPositionNow(e)}setScrollPositionSmooth(e){this._scrollable.setScrollPositionSmooth(e)}}class hn extends u.JT{constructor(e,t,i){super(),this._configuration=e;const n=this._configuration.options,o=n.get(129),s=n.get(74);this._linesLayout=new ln(t,n.get(58),s.top,s.bottom),this._scrollable=this._register(new dn(0,i)),this._configureSmoothScrollDuration(),this._scrollable.setScrollDimensions(new cn(o.contentWidth,0,o.height,0)),this.onDidScroll=this._scrollable.onDidScroll,this.onDidContentSizeChange=this._scrollable.onDidContentSizeChange,this._updateHeight()}dispose(){super.dispose()}getScrollable(){return this._scrollable.getScrollable()}onHeightMaybeChanged(){this._updateHeight()}_configureSmoothScrollDuration(){this._scrollable.setSmoothScrollDuration(this._configuration.options.get(102)?125:0)}onConfigurationChanged(e){const t=this._configuration.options;if(e.hasChanged(58)&&this._linesLayout.setLineHeight(t.get(58)),e.hasChanged(74)){const e=t.get(74);this._linesLayout.setPadding(e.top,e.bottom)}if(e.hasChanged(129)){const e=t.get(129),i=e.contentWidth,n=e.height,o=this._scrollable.getScrollDimensions(),s=o.contentWidth;this._scrollable.setScrollDimensions(new cn(i,o.contentWidth,n,this._getContentHeight(i,n,s)))}else this._updateHeight();e.hasChanged(102)&&this._configureSmoothScrollDuration()}onFlushed(e){this._linesLayout.onFlushed(e)}onLinesDeleted(e,t){this._linesLayout.onLinesDeleted(e,t)}onLinesInserted(e,t){this._linesLayout.onLinesInserted(e,t)}_getHorizontalScrollbarHeight(e,t){const i=this._configuration.options.get(91);return 2===i.horizontal||e>=t?0:i.horizontalScrollbarSize}_getContentHeight(e,t,i){const n=this._configuration.options;let o=this._linesLayout.getLinesTotalHeight();return n.get(93)?o+=Math.max(0,t-n.get(58)-n.get(74).bottom):o+=this._getHorizontalScrollbarHeight(e,i),o}_updateHeight(){const e=this._scrollable.getScrollDimensions(),t=e.width,i=e.height,n=e.contentWidth;this._scrollable.setScrollDimensions(new cn(t,e.contentWidth,i,this._getContentHeight(t,i,n)))}getCurrentViewport(){const e=this._scrollable.getScrollDimensions(),t=this._scrollable.getCurrentScrollPosition();return new Mt.l_(t.scrollTop,t.scrollLeft,e.width,e.height)}getFutureViewport(){const e=this._scrollable.getScrollDimensions(),t=this._scrollable.getFutureScrollPosition();return new Mt.l_(t.scrollTop,t.scrollLeft,e.width,e.height)}_computeContentWidth(e){const t=this._configuration.options,i=t.get(130),n=t.get(43);if(i.isViewportWrapping){const i=t.get(129),o=t.get(64);return e>i.contentWidth+n.typicalHalfwidthCharacterWidth&&o.enabled&&"right"===o.side?e+i.verticalScrollbarWidth:e}{const i=t.get(92)*n.typicalHalfwidthCharacterWidth,o=this._linesLayout.getWhitespaceMinWidth();return Math.max(e+i,o)}}setMaxLineWidth(e){const t=this._scrollable.getScrollDimensions();this._scrollable.setScrollDimensions(new cn(t.width,this._computeContentWidth(e),t.height,t.contentHeight)),this._updateHeight()}saveState(){const e=this._scrollable.getFutureScrollPosition();let t=e.scrollTop,i=this._linesLayout.getLineNumberAtOrAfterVerticalOffset(t);return{scrollTop:t,scrollTopWithoutViewZones:t-this._linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(i),scrollLeft:e.scrollLeft}}changeWhitespace(e){const t=this._linesLayout.changeWhitespace(e);return t&&this.onHeightMaybeChanged(),t}getVerticalOffsetForLineNumber(e){return this._linesLayout.getVerticalOffsetForLineNumber(e)}isAfterLines(e){return this._linesLayout.isAfterLines(e)}isInTopPadding(e){return this._linesLayout.isInTopPadding(e)}isInBottomPadding(e){return this._linesLayout.isInBottomPadding(e)}getLineNumberAtVerticalOffset(e){return this._linesLayout.getLineNumberAtOrAfterVerticalOffset(e)}getWhitespaceAtVerticalOffset(e){return this._linesLayout.getWhitespaceAtVerticalOffset(e)}getLinesViewportData(){const e=this.getCurrentViewport();return this._linesLayout.getLinesViewportData(e.top,e.top+e.height)}getLinesViewportDataAtScrollTop(e){const t=this._scrollable.getScrollDimensions();return e+t.height>t.scrollHeight&&(e=t.scrollHeight-t.height),e<0&&(e=0),this._linesLayout.getLinesViewportData(e,e+t.height)}getWhitespaceViewportData(){const e=this.getCurrentViewport();return this._linesLayout.getWhitespaceViewportData(e.top,e.top+e.height)}getWhitespaces(){return this._linesLayout.getWhitespaces()}getContentWidth(){return this._scrollable.getScrollDimensions().contentWidth}getScrollWidth(){return this._scrollable.getScrollDimensions().scrollWidth}getContentHeight(){return this._scrollable.getScrollDimensions().contentHeight}getScrollHeight(){return this._scrollable.getScrollDimensions().scrollHeight}getCurrentScrollLeft(){return this._scrollable.getCurrentScrollPosition().scrollLeft}getCurrentScrollTop(){return this._scrollable.getCurrentScrollPosition().scrollTop}validateScrollPosition(e){return this._scrollable.validateScrollPosition(e)}setScrollPosition(e,t){1===t?this._scrollable.setScrollPositionNow(e):this._scrollable.setScrollPositionSmooth(e)}deltaScrollNow(e,t){const i=this._scrollable.getCurrentScrollPosition();this._scrollable.setScrollPositionNow({scrollLeft:i.scrollLeft+e,scrollTop:i.scrollTop+t})}}var un=i(78411),gn=i(3544);class pn{constructor(e){this._lines=e}convertViewPositionToModelPosition(e){return this._lines.convertViewPositionToModelPosition(e.lineNumber,e.column)}convertViewRangeToModelRange(e){return this._lines.convertViewRangeToModelRange(e)}validateViewPosition(e,t){return this._lines.validateViewPosition(e.lineNumber,e.column,t)}validateViewRange(e,t){return this._lines.validateViewRange(e,t)}convertModelPositionToViewPosition(e,t){return this._lines.convertModelPositionToViewPosition(e.lineNumber,e.column,t)}convertModelRangeToViewRange(e,t){return this._lines.convertModelRangeToViewRange(e,t)}modelPositionIsVisible(e){return this._lines.modelPositionIsVisible(e.lineNumber,e.column)}getModelLineViewLineCount(e){return this._lines.getModelLineViewLineCount(e)}getViewLineNumberOfModelPosition(e,t){return this._lines.getViewLineNumberOfModelPosition(e,t)}}class fn{constructor(e){this._counts=e,this._isValid=!1,this._validEndIndex=-1,this._modelToView=[],this._viewToModel=[]}_invalidate(e){this._isValid=!1,this._validEndIndex=Math.min(this._validEndIndex,e-1)}_ensureValid(){if(!this._isValid){for(let e=this._validEndIndex+1,t=this._counts.length;e<t;e++){const t=this._counts[e],i=e>0?this._modelToView[e-1]:0;this._modelToView[e]=i+t;for(let n=0;n<t;n++)this._viewToModel[i+n]=e}this._modelToView.length=this._counts.length,this._viewToModel.length=this._modelToView[this._modelToView.length-1],this._isValid=!0,this._validEndIndex=this._counts.length-1}}changeValue(e,t){this._counts[e]!==t&&(this._counts[e]=t,this._invalidate(e))}removeValues(e,t){this._counts.splice(e,t),this._invalidate(e)}insertValues(e,t){this._counts=rt.Zv(this._counts,e,t),this._invalidate(e)}getTotalValue(){return this._ensureValid(),this._viewToModel.length}getAccumulatedValue(e){return this._ensureValid(),this._modelToView[e]}getIndexOf(e){this._ensureValid();const t=this._viewToModel[e],i=t>0?this._modelToView[t-1]:0;return new gn.T(t,e-i)}}class mn{constructor(e,t,i,n,o,s,r,a,l){this._editorId=e,this.model=t,this._validModelVersionId=-1,this._domLineBreaksComputerFactory=i,this._monospaceLineBreaksComputerFactory=n,this.fontInfo=o,this.tabSize=s,this.wrappingStrategy=r,this.wrappingColumn=a,this.wrappingIndent=l,this._constructLines(!0,null)}dispose(){this.hiddenAreasIds=this.model.deltaDecorations(this.hiddenAreasIds,[])}createCoordinatesConverter(){return new pn(this)}_constructLines(e,t){this.lines=[],e&&(this.hiddenAreasIds=[]);const i=this.model.getLinesContent(),n=this.model.getInjectedTextDecorations(this._editorId),o=i.length,s=this.createLineBreaksComputer(),r=new rt.H9(xi.gk.fromDecorations(n));for(let e=0;e<o;e++){const n=r.takeWhile((t=>t.lineNumber===e+1));s.addRequest(i[e],n,t?t[e]:null)}const a=s.finalize();let l=[],c=this.hiddenAreasIds.map((e=>this.model.getDecorationRange(e))).sort(re.e.compareRangesUsingStarts),d=1,h=0,u=-1,g=u+1<c.length?h+1:o+2;for(let e=0;e<o;e++){let t=e+1;t===g&&(u++,d=c[u].startLineNumber,h=c[u].endLineNumber,g=u+1<c.length?h+1:o+2);let i=t>=d&&t<=h,n=kn(a[e],!i);l[e]=n.getViewLineCount(),this.lines[e]=n}this._validModelVersionId=this.model.getVersionId(),this.prefixSumComputer=new fn(l)}getHiddenAreas(){return this.hiddenAreasIds.map((e=>this.model.getDecorationRange(e)))}_reduceRanges(e){if(0===e.length)return[];let t=e.map((e=>this.model.validateRange(e))).sort(re.e.compareRangesUsingStarts),i=[],n=t[0].startLineNumber,o=t[0].endLineNumber;for(let e=1,s=t.length;e<s;e++){let s=t[e];s.startLineNumber>o+1?(i.push(new re.e(n,1,o,1)),n=s.startLineNumber,o=s.endLineNumber):s.endLineNumber>o&&(o=s.endLineNumber)}return i.push(new re.e(n,1,o,1)),i}setHiddenAreas(e){let t=this._reduceRanges(e),i=this.hiddenAreasIds.map((e=>this.model.getDecorationRange(e))).sort(re.e.compareRangesUsingStarts);if(t.length===i.length){let e=!1;for(let n=0;n<t.length;n++)if(!t[n].equalsRange(i[n])){e=!0;break}if(!e)return!1}let n=[];for(const e of t)n.push({range:e,options:bt.qx.EMPTY});this.hiddenAreasIds=this.model.deltaDecorations(this.hiddenAreasIds,n);let o=t,s=1,r=0,a=-1,l=a+1<o.length?r+1:this.lines.length+2,c=!1;for(let e=0;e<this.lines.length;e++){let t=e+1;t===l&&(a++,s=o[a].startLineNumber,r=o[a].endLineNumber,l=a+1<o.length?r+1:this.lines.length+2);let i=!1;if(t>=s&&t<=r?this.lines[e].isVisible()&&(this.lines[e]=this.lines[e].setVisible(!1),i=!0):(c=!0,this.lines[e].isVisible()||(this.lines[e]=this.lines[e].setVisible(!0),i=!0)),i){let t=this.lines[e].getViewLineCount();this.prefixSumComputer.changeValue(e,t)}}return c||this.setHiddenAreas([]),!0}modelPositionIsVisible(e,t){return!(e<1||e>this.lines.length)&&this.lines[e-1].isVisible()}getModelLineViewLineCount(e){return e<1||e>this.lines.length?1:this.lines[e-1].getViewLineCount()}setTabSize(e){return this.tabSize!==e&&(this.tabSize=e,this._constructLines(!1,null),!0)}setWrappingSettings(e,t,i,n){const o=this.fontInfo.equals(e),s=this.wrappingStrategy===t,r=this.wrappingColumn===i,a=this.wrappingIndent===n;if(o&&s&&r&&a)return!1;const l=o&&s&&!r&&a;this.fontInfo=e,this.wrappingStrategy=t,this.wrappingColumn=i,this.wrappingIndent=n;let c=null;if(l){c=[];for(let e=0,t=this.lines.length;e<t;e++)c[e]=this.lines[e].getLineBreakData()}return this._constructLines(!1,c),!0}createLineBreaksComputer(){return("advanced"===this.wrappingStrategy?this._domLineBreaksComputerFactory:this._monospaceLineBreaksComputerFactory).createLineBreaksComputer(this.fontInfo,this.tabSize,this.wrappingColumn,this.wrappingIndent)}onModelFlushed(){this._constructLines(!0,null)}onModelLinesDeleted(e,t,i){if(!e||e<=this._validModelVersionId)return null;let n=1===t?1:this.prefixSumComputer.getAccumulatedValue(t-2)+1,o=this.prefixSumComputer.getAccumulatedValue(i-1);return this.lines.splice(t-1,i-t+1),this.prefixSumComputer.removeValues(t-1,i-t+1),new Oi(n,o)}onModelLinesInserted(e,t,i,n){if(!e||e<=this._validModelVersionId)return null;const o=t>2&&!this.lines[t-2].isVisible();let s=1===t?1:this.prefixSumComputer.getAccumulatedValue(t-2)+1,r=0,a=[],l=[];for(let e=0,t=n.length;e<t;e++){let t=kn(n[e],!o);a.push(t);let i=t.getViewLineCount();r+=i,l[e]=i}return this.lines=this.lines.slice(0,t-1).concat(a).concat(this.lines.slice(t-1)),this.prefixSumComputer.insertValues(t-1,l),new Pi(s,s+r-1)}onModelLineChanged(e,t,i){if(null!==e&&e<=this._validModelVersionId)return[!1,null,null,null];let n=t-1,o=this.lines[n].getViewLineCount(),s=kn(i,this.lines[n].isVisible());this.lines[n]=s;let r=this.lines[n].getViewLineCount(),a=!1,l=0,c=-1,d=0,h=-1,u=0,g=-1;o>r?(l=1===t?1:this.prefixSumComputer.getAccumulatedValue(t-2)+1,c=l+r-1,u=c+1,g=u+(o-r)-1,a=!0):o<r?(l=1===t?1:this.prefixSumComputer.getAccumulatedValue(t-2)+1,c=l+o-1,d=c+1,h=d+(r-o)-1,a=!0):(l=1===t?1:this.prefixSumComputer.getAccumulatedValue(t-2)+1,c=l+r-1),this.prefixSumComputer.changeValue(n,r);return[a,l<=c?new Ai(l,c):null,d<=h?new Pi(d,h):null,u<=g?new Oi(u,g):null]}acceptVersionId(e){this._validModelVersionId=e,1!==this.lines.length||this.lines[0].isVisible()||this.setHiddenAreas([])}getViewLineCount(){return this.prefixSumComputer.getTotalValue()}_toValidViewLineNumber(e){if(e<1)return 1;const t=this.getViewLineCount();return e>t?t:0|e}getActiveIndentGuide(e,t,i){e=this._toValidViewLineNumber(e),t=this._toValidViewLineNumber(t),i=this._toValidViewLineNumber(i);const n=this.convertViewPositionToModelPosition(e,this.getViewLineMinColumn(e)),o=this.convertViewPositionToModelPosition(t,this.getViewLineMinColumn(t)),s=this.convertViewPositionToModelPosition(i,this.getViewLineMinColumn(i)),r=this.model.getActiveIndentGuide(n.lineNumber,o.lineNumber,s.lineNumber),a=this.convertModelPositionToViewPosition(r.startLineNumber,1),l=this.convertModelPositionToViewPosition(r.endLineNumber,this.model.getLineMaxColumn(r.endLineNumber));return{startLineNumber:a.lineNumber,endLineNumber:l.lineNumber,indent:r.indent}}getViewLineInfo(e){e=this._toValidViewLineNumber(e);let t=this.prefixSumComputer.getIndexOf(e-1),i=t.index,n=t.remainder;return new vn(i+1,n)}getMinColumnOfViewLine(e){return this.lines[e.modelLineNumber-1].getViewLineMinColumn(this.model,e.modelLineNumber,e.modelLineWrappedLineIdx)}getModelStartPositionOfViewLine(e){const t=this.lines[e.modelLineNumber-1],i=t.getViewLineMinColumn(this.model,e.modelLineNumber,e.modelLineWrappedLineIdx),n=t.getModelColumnOfViewPosition(e.modelLineWrappedLineIdx,i);return new se.L(e.modelLineNumber,n)}getModelEndPositionOfViewLine(e){const t=this.lines[e.modelLineNumber-1],i=t.getViewLineMaxColumn(this.model,e.modelLineNumber,e.modelLineWrappedLineIdx),n=t.getModelColumnOfViewPosition(e.modelLineWrappedLineIdx,i);return new se.L(e.modelLineNumber,n)}getViewLineInfosGroupedByModelRanges(e,t){const i=this.getViewLineInfo(e),n=this.getViewLineInfo(t),o=new Array;let s=this.getModelStartPositionOfViewLine(i),r=new Array;for(let e=i.modelLineNumber;e<=n.modelLineNumber;e++){const t=this.lines[e-1];if(t.isVisible()){let o=e===i.modelLineNumber?i.modelLineWrappedLineIdx:0,s=e===n.modelLineNumber?n.modelLineWrappedLineIdx+1:t.getViewLineCount();for(let t=o;t<s;t++)r.push(new vn(e,t))}if(!t.isVisible()&&s){const t=new se.L(e-1,this.model.getLineMaxColumn(e-1)+1),i=re.e.fromPositions(s,t);o.push(new _n(i,r)),r=[],s=null}else t.isVisible()&&!s&&(s=new se.L(e,1))}if(s){const e=re.e.fromPositions(s,this.getModelEndPositionOfViewLine(n));o.push(new _n(e,r))}return o}getViewLinesBracketGuides(e,t,i,n){const o=i?this.convertViewPositionToModelPosition(i.lineNumber,i.column):null,s=[];for(const i of this.getViewLineInfosGroupedByModelRanges(e,t)){const e=i.modelRange.startLineNumber,t=this.model.getLinesBracketGuides(e,i.modelRange.endLineNumber,o,n);for(const n of i.viewLines)if(n.isWrappedLineContinuation&&1===this.getMinColumnOfViewLine(n))s.push([]);else{let i=t[n.modelLineNumber-e];i=i.map((e=>e.horizontalLine?new _t.UO(e.visibleColumn,e.className,new _t.vW(e.horizontalLine.top,this.convertModelPositionToViewPosition(n.modelLineNumber,e.horizontalLine.endColumn).column)):e)),s.push(i)}}return s}getViewLinesIndentGuides(e,t){e=this._toValidViewLineNumber(e),t=this._toValidViewLineNumber(t);const i=this.convertViewPositionToModelPosition(e,this.getViewLineMinColumn(e)),n=this.convertViewPositionToModelPosition(t,this.getViewLineMaxColumn(t));let o=[],s=[],r=[];const a=i.lineNumber-1,l=n.lineNumber-1;let c=null;for(let e=a;e<=l;e++){const t=this.lines[e];if(t.isVisible()){let n=t.getViewLineNumberOfModelPosition(0,e===a?i.column:1),o=t.getViewLineNumberOfModelPosition(0,this.model.getLineMaxColumn(e+1)),l=o-n+1,d=0;l>1&&1===t.getViewLineMinColumn(this.model,e+1,o)&&(d=0===n?1:2),s.push(l),r.push(d),null===c&&(c=new se.L(e+1,0))}else null!==c&&(o=o.concat(this.model.getLinesIndentGuides(c.lineNumber,e)),c=null)}null!==c&&(o=o.concat(this.model.getLinesIndentGuides(c.lineNumber,n.lineNumber)),c=null);const d=t-e+1;let h=new Array(d),u=0;for(let e=0,t=o.length;e<t;e++){let t,i=o[e],n=Math.min(d-u,s[e]),a=r[e];t=2===a?0:1===a?1:n;for(let e=0;e<n;e++)e===t&&(i=0),h[u++]=i}return h}getViewLineContent(e){e=this._toValidViewLineNumber(e);let t=this.prefixSumComputer.getIndexOf(e-1),i=t.index,n=t.remainder;return this.lines[i].getViewLineContent(this.model,i+1,n)}getViewLineLength(e){e=this._toValidViewLineNumber(e);let t=this.prefixSumComputer.getIndexOf(e-1),i=t.index,n=t.remainder;return this.lines[i].getViewLineLength(this.model,i+1,n)}getViewLineMinColumn(e){e=this._toValidViewLineNumber(e);let t=this.prefixSumComputer.getIndexOf(e-1),i=t.index,n=t.remainder;return this.lines[i].getViewLineMinColumn(this.model,i+1,n)}getViewLineMaxColumn(e){e=this._toValidViewLineNumber(e);let t=this.prefixSumComputer.getIndexOf(e-1),i=t.index,n=t.remainder;return this.lines[i].getViewLineMaxColumn(this.model,i+1,n)}getViewLineData(e){e=this._toValidViewLineNumber(e);let t=this.prefixSumComputer.getIndexOf(e-1),i=t.index,n=t.remainder;return this.lines[i].getViewLineData(this.model,i+1,n)}getViewLinesData(e,t,i){e=this._toValidViewLineNumber(e),t=this._toValidViewLineNumber(t);let n=this.prefixSumComputer.getIndexOf(e-1),o=e,s=n.index,r=n.remainder,a=[];for(let n=s,l=this.model.getLineCount();n<l;n++){let l=this.lines[n];if(!l.isVisible())continue;let c=n===s?r:0,d=l.getViewLineCount()-c,h=!1;o+d>t&&(h=!0,d=t-o+1);let u=c+d;if(l.getViewLinesData(this.model,n+1,c,u,o-e,i,a),o+=d,h)break}return a}validateViewPosition(e,t,i){e=this._toValidViewLineNumber(e);let n=this.prefixSumComputer.getIndexOf(e-1),o=n.index,s=n.remainder,r=this.lines[o],a=r.getViewLineMinColumn(this.model,o+1,s),l=r.getViewLineMaxColumn(this.model,o+1,s);t<a&&(t=a),t>l&&(t=l);let c=r.getModelColumnOfViewPosition(s,t);return this.model.validatePosition(new se.L(o+1,c)).equals(i)?new se.L(e,t):this.convertModelPositionToViewPosition(i.lineNumber,i.column)}validateViewRange(e,t){const i=this.validateViewPosition(e.startLineNumber,e.startColumn,t.getStartPosition()),n=this.validateViewPosition(e.endLineNumber,e.endColumn,t.getEndPosition());return new re.e(i.lineNumber,i.column,n.lineNumber,n.column)}convertViewPositionToModelPosition(e,t){e=this._toValidViewLineNumber(e);let i=this.prefixSumComputer.getIndexOf(e-1),n=i.index,o=i.remainder,s=this.lines[n].getModelColumnOfViewPosition(o,t);return this.model.validatePosition(new se.L(n+1,s))}convertViewRangeToModelRange(e){const t=this.convertViewPositionToModelPosition(e.startLineNumber,e.startColumn),i=this.convertViewPositionToModelPosition(e.endLineNumber,e.endColumn);return new re.e(t.lineNumber,t.column,i.lineNumber,i.column)}convertModelPositionToViewPosition(e,t,i=2){const n=this.model.validatePosition(new se.L(e,t)),o=n.lineNumber,s=n.column;let r=o-1,a=!1;for(;r>0&&!this.lines[r].isVisible();)r--,a=!0;if(0===r&&!this.lines[r].isVisible())return new se.L(1,1);const l=1+(0===r?0:this.prefixSumComputer.getAccumulatedValue(r-1));let c;return c=a?this.lines[r].getViewPositionOfModelPosition(l,this.model.getLineMaxColumn(r+1),i):this.lines[o-1].getViewPositionOfModelPosition(l,s,i),c}convertModelRangeToViewRange(e,t=0){if(e.isEmpty()){const i=this.convertModelPositionToViewPosition(e.startLineNumber,e.startColumn,t);return re.e.fromPositions(i)}{const t=this.convertModelPositionToViewPosition(e.startLineNumber,e.startColumn,1),i=this.convertModelPositionToViewPosition(e.endLineNumber,e.endColumn,0);return new re.e(t.lineNumber,t.column,i.lineNumber,i.column)}}getViewLineNumberOfModelPosition(e,t){let i=e-1;if(this.lines[i].isVisible()){const e=1+(0===i?0:this.prefixSumComputer.getAccumulatedValue(i-1));return this.lines[i].getViewLineNumberOfModelPosition(e,t)}for(;i>0&&!this.lines[i].isVisible();)i--;if(0===i&&!this.lines[i].isVisible())return 1;const n=1+(0===i?0:this.prefixSumComputer.getAccumulatedValue(i-1));return this.lines[i].getViewLineNumberOfModelPosition(n,this.model.getLineMaxColumn(i+1))}getDecorationsInRange(e,t,i){const n=this.convertViewPositionToModelPosition(e.startLineNumber,e.startColumn),o=this.convertViewPositionToModelPosition(e.endLineNumber,e.endColumn);if(o.lineNumber-n.lineNumber<=e.endLineNumber-e.startLineNumber)return this.model.getDecorationsInRange(new re.e(n.lineNumber,1,o.lineNumber,o.column),t,i);let s=[];const r=n.lineNumber-1,a=o.lineNumber-1;let l=null;for(let e=r;e<=a;e++){if(this.lines[e].isVisible())null===l&&(l=new se.L(e+1,e===r?n.column:1));else if(null!==l){const n=this.model.getLineMaxColumn(e);s=s.concat(this.model.getDecorationsInRange(new re.e(l.lineNumber,l.column,e,n),t,i)),l=null}}null!==l&&(s=s.concat(this.model.getDecorationsInRange(new re.e(l.lineNumber,l.column,o.lineNumber,o.column),t,i)),l=null),s.sort(((e,t)=>{const i=re.e.compareRangesUsingStarts(e.range,t.range);return 0===i?e.id<t.id?-1:e.id>t.id?1:0:i}));let c=[],d=0,h=null;for(const e of s){const t=e.id;h!==t&&(h=t,c[d++]=e)}return c}getInjectedTextAt(e){const t=this._toValidViewLineNumber(e.lineNumber),i=this.prefixSumComputer.getIndexOf(t-1),n=i.index,o=i.remainder;return this.lines[n].getInjectedTextAt(o,e.column)}normalizePosition(e,t){const i=this._toValidViewLineNumber(e.lineNumber),n=this.prefixSumComputer.getIndexOf(i-1),o=n.index,s=n.remainder;return this.lines[o].normalizePosition(this.model,o+1,s,e,t)}getLineIndentColumn(e){const t=this._toValidViewLineNumber(e),i=this.prefixSumComputer.getIndexOf(t-1),n=i.index;return 0===i.remainder?this.model.getLineIndentColumn(n+1):0}}class vn{constructor(e,t){this.modelLineNumber=e,this.modelLineWrappedLineIdx=t}get isWrappedLineContinuation(){return this.modelLineWrappedLineIdx>0}}class _n{constructor(e,t){this.modelRange=e,this.viewLines=t}}class bn{constructor(){}isVisible(){return!0}setVisible(e){return e?this:wn.INSTANCE}getLineBreakData(){return null}getViewLineCount(){return 1}getViewLineContent(e,t,i){return e.getLineContent(t)}getViewLineLength(e,t,i){return e.getLineLength(t)}getViewLineMinColumn(e,t,i){return e.getLineMinColumn(t)}getViewLineMaxColumn(e,t,i){return e.getLineMaxColumn(t)}getViewLineData(e,t,i){let n=e.getLineTokens(t),o=n.getLineContent();return new Mt.IP(o,!1,1,o.length+1,0,n.inflate(),null)}getViewLinesData(e,t,i,n,o,s,r){s[o]?r[o]=this.getViewLineData(e,t,0):r[o]=null}getModelColumnOfViewPosition(e,t){return t}getViewPositionOfModelPosition(e,t){return new se.L(e,t)}getViewLineNumberOfModelPosition(e,t){return e}normalizePosition(e,t,i,n,o){return n}getInjectedTextAt(e,t){return null}}bn.INSTANCE=new bn;class wn{constructor(){}isVisible(){return!1}setVisible(e){return e?bn.INSTANCE:this}getLineBreakData(){return null}getViewLineCount(){return 0}getViewLineContent(e,t,i){throw new Error("Not supported")}getViewLineLength(e,t,i){throw new Error("Not supported")}getViewLineMinColumn(e,t,i){throw new Error("Not supported")}getViewLineMaxColumn(e,t,i){throw new Error("Not supported")}getViewLineData(e,t,i){throw new Error("Not supported")}getViewLinesData(e,t,i,n,o,s,r){throw new Error("Not supported")}getModelColumnOfViewPosition(e,t){throw new Error("Not supported")}getViewPositionOfModelPosition(e,t){throw new Error("Not supported")}getViewLineNumberOfModelPosition(e,t){throw new Error("Not supported")}normalizePosition(e,t,i,n,o){throw new Error("Not supported")}getInjectedTextAt(e,t){throw new Error("Not supported")}}wn.INSTANCE=new wn;class yn{constructor(e,t){this._lineBreakData=e,this._isVisible=t}isVisible(){return this._isVisible}setVisible(e){return this._isVisible=e,this}getLineBreakData(){return this._lineBreakData}getViewLineCount(){return this._isVisible?this._lineBreakData.breakOffsets.length:0}getInputStartOffsetOfOutputLineIndex(e){return this._lineBreakData.getInputOffsetOfOutputPosition(e,0)}getInputEndOffsetOfOutputLineIndex(e,t,i){return i+1===this._lineBreakData.breakOffsets.length?e.getLineMaxColumn(t)-1:this._lineBreakData.getInputOffsetOfOutputPosition(i+1,0)}getViewLineContent(e,t,i){if(!this._isVisible)throw new Error("Not supported");const n=i>0?this._lineBreakData.breakOffsets[i-1]:0,o=i<this._lineBreakData.breakOffsets.length?this._lineBreakData.breakOffsets[i]:this._lineBreakData.breakOffsets[this._lineBreakData.breakOffsets.length-1];let s;if(null!==this._lineBreakData.injectionOffsets){const i=this._lineBreakData.injectionOffsets.map(((e,t)=>new xi.gk(0,0,e+1,this._lineBreakData.injectionOptions[t],0)));s=xi.gk.applyInjectedText(e.getLineContent(t),i).substring(n,o)}else s=e.getValueInRange({startLineNumber:t,startColumn:n+1,endLineNumber:t,endColumn:o+1});return i>0&&(s=xn(this._lineBreakData.wrappedTextIndentLength)+s),s}getViewLineLength(e,t,i){if(!this._isVisible)throw new Error("Not supported");const n=i>0?this._lineBreakData.breakOffsets[i-1]:0;let o=(i<this._lineBreakData.breakOffsets.length?this._lineBreakData.breakOffsets[i]:this._lineBreakData.breakOffsets[this._lineBreakData.breakOffsets.length-1])-n;return i>0&&(o=this._lineBreakData.wrappedTextIndentLength+o),o}getViewLineMinColumn(e,t,i){if(!this._isVisible)throw new Error("Not supported");return this._getViewLineMinColumn(i)}_getViewLineMinColumn(e){return e>0?this._lineBreakData.wrappedTextIndentLength+1:1}getViewLineMaxColumn(e,t,i){if(!this._isVisible)throw new Error("Not supported");return this.getViewLineLength(e,t,i)+1}getViewLineData(e,t,i){if(!this._isVisible)throw new Error("Not supported");const n=this._lineBreakData,o=i>0?n.wrappedTextIndentLength:0,s=n.injectionOffsets,r=n.injectionOptions;let a,l,c;if(s){const d=e.getLineTokens(t).withInserted(s.map(((e,t)=>({offset:e,text:r[t].content,tokenMetadata:un.A.defaultTokenMetadata})))),h=i>0?n.breakOffsets[i-1]:0,u=n.breakOffsets[i];a=d.getLineContent().substring(h,u),l=d.sliceAndInflate(h,u,o),c=new Array;let g=0;for(let e=0;e<s.length;e++){const t=r[e].content.length,o=s[e]+g,a=s[e]+g+t;if(o>u)break;if(h<a){const t=r[e];if(t.inlineClassName){const e=i>0?n.wrappedTextIndentLength:0,s=e+Math.max(o-h,0),r=e+Math.min(a-h,u);s!==r&&c.push(new Mt.Wx(s,r,t.inlineClassName,t.inlineClassNameAffectsLetterSpacing))}}g+=t}}else{const n=this.getInputStartOffsetOfOutputLineIndex(i),s=this.getInputEndOffsetOfOutputLineIndex(e,t,i),r=e.getLineTokens(t);a=e.getValueInRange({startLineNumber:t,startColumn:n+1,endLineNumber:t,endColumn:s+1}),l=r.sliceAndInflate(n,s,o),c=null}i>0&&(a=xn(n.wrappedTextIndentLength)+a);const d=i>0?n.wrappedTextIndentLength+1:1,h=a.length+1,u=i+1<this.getViewLineCount(),g=0===i?0:n.breakOffsetsVisibleColumn[i-1];return new Mt.IP(a,u,d,h,g,l,c)}getViewLinesData(e,t,i,n,o,s,r){if(!this._isVisible)throw new Error("Not supported");for(let a=i;a<n;a++){let n=o+a-i;s[n]?r[n]=this.getViewLineData(e,t,a):r[n]=null}}getModelColumnOfViewPosition(e,t){if(!this._isVisible)throw new Error("Not supported");let i=t-1;return e>0&&(i<this._lineBreakData.wrappedTextIndentLength?i=0:i-=this._lineBreakData.wrappedTextIndentLength),this._lineBreakData.getInputOffsetOfOutputPosition(e,i)+1}getViewPositionOfModelPosition(e,t,i=2){if(!this._isVisible)throw new Error("Not supported");let n=this._lineBreakData.getOutputPositionOfInputOffset(t-1,i),o=n.outputLineIndex,s=n.outputOffset+1;return o>0&&(s+=this._lineBreakData.wrappedTextIndentLength),new se.L(e+o,s)}getViewLineNumberOfModelPosition(e,t){if(!this._isVisible)throw new Error("Not supported");return e+this._lineBreakData.getOutputPositionOfInputOffset(t-1).outputLineIndex}normalizePosition(e,t,i,n,o){if(null!==this._lineBreakData.injectionOffsets){const e=n.lineNumber-i,t=this._lineBreakData.outputPositionToOffsetInUnwrappedLine(i,n.column-1),s=this._lineBreakData.normalizeOffsetAroundInjections(t,o);if(s!==t)return this._lineBreakData.getOutputPositionOfOffsetInUnwrappedLine(s,o).toPosition(e,this._lineBreakData.wrappedTextIndentLength)}if(0===o){if(i>0&&n.column===this._getViewLineMinColumn(i))return new se.L(n.lineNumber-1,this.getViewLineMaxColumn(e,t,i-1))}else if(1===o){if(i<this.getViewLineCount()-1&&n.column===this.getViewLineMaxColumn(e,t,i))return new se.L(n.lineNumber+1,this._getViewLineMinColumn(i+1))}return n}getInjectedTextAt(e,t){return this._lineBreakData.getInjectedText(e,t-1)}}let Cn=[""];function xn(e){if(e>=Cn.length)for(let t=1;t<=e;t++)Cn[t]=Sn(t);return Cn[e]}function Sn(e){return new Array(e+1).join(" ")}function kn(e,t){return null===e?t?bn.INSTANCE:wn.INSTANCE:new yn(e,t)}class Ln{constructor(e){this._lines=e}_validPosition(e){return this._lines.model.validatePosition(e)}_validRange(e){return this._lines.model.validateRange(e)}convertViewPositionToModelPosition(e){return this._validPosition(e)}convertViewRangeToModelRange(e){return this._validRange(e)}validateViewPosition(e,t){return this._validPosition(t)}validateViewRange(e,t){return this._validRange(t)}convertModelPositionToViewPosition(e){return this._validPosition(e)}convertModelRangeToViewRange(e){return this._validRange(e)}modelPositionIsVisible(e){const t=this._lines.model.getLineCount();return!(e.lineNumber<1||e.lineNumber>t)}getModelLineViewLineCount(e){return 1}getViewLineNumberOfModelPosition(e,t){return e}}class Nn{constructor(e){this.model=e}dispose(){}createCoordinatesConverter(){return new Ln(this)}getHiddenAreas(){return[]}setHiddenAreas(e){return!1}setTabSize(e){return!1}setWrappingSettings(e,t,i,n){return!1}createLineBreaksComputer(){let e=[];return{addRequest:(t,i,n)=>{e.push(null)},finalize:()=>e}}onModelFlushed(){}onModelLinesDeleted(e,t,i){return new Oi(t,i)}onModelLinesInserted(e,t,i,n){return new Pi(t,i)}onModelLineChanged(e,t,i){return[!1,new Ai(t,t),null,null]}acceptVersionId(e){}getViewLineCount(){return this.model.getLineCount()}getActiveIndentGuide(e,t,i){return{startLineNumber:e,endLineNumber:e,indent:0}}getViewLinesBracketGuides(e,t,i){return new Array(t-e+1).fill([])}getViewLinesIndentGuides(e,t){const i=t-e+1;let n=new Array(i);for(let e=0;e<i;e++)n[e]=0;return n}getViewLineContent(e){return this.model.getLineContent(e)}getViewLineLength(e){return this.model.getLineLength(e)}getViewLineMinColumn(e){return this.model.getLineMinColumn(e)}getViewLineMaxColumn(e){return this.model.getLineMaxColumn(e)}getViewLineData(e){let t=this.model.getLineTokens(e),i=t.getLineContent();return new Mt.IP(i,!1,1,i.length+1,0,t.inflate(),null)}getViewLinesData(e,t,i){const n=this.model.getLineCount();e=Math.min(Math.max(1,e),n),t=Math.min(Math.max(1,t),n);let o=[];for(let n=e;n<=t;n++){let t=n-e;i[t]||(o[t]=null),o[t]=this.getViewLineData(n)}return o}getDecorationsInRange(e,t,i){return this.model.getDecorationsInRange(e,t,i)}normalizePosition(e,t){return this.model.normalizePosition(e,t)}getLineIndentColumn(e){return this.model.getLineIndentColumn(e)}getInjectedTextAt(e){return null}}class Dn{constructor(e,t,i,n,o){this.editorId=e,this.model=t,this.configuration=i,this._linesCollection=n,this._coordinatesConverter=o,this._decorationsCache=Object.create(null),this._cachedModelDecorationsResolver=null,this._cachedModelDecorationsResolverViewRange=null}_clearCachedModelDecorationsResolver(){this._cachedModelDecorationsResolver=null,this._cachedModelDecorationsResolverViewRange=null}dispose(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}reset(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}onModelDecorationsChanged(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}onLineMappingChanged(){this._decorationsCache=Object.create(null),this._clearCachedModelDecorationsResolver()}_getOrCreateViewModelDecoration(e){const t=e.id;let i=this._decorationsCache[t];if(!i){const n=e.range,o=e.options;let s;if(o.isWholeLine){const e=this._coordinatesConverter.convertModelPositionToViewPosition(new se.L(n.startLineNumber,1),0),t=this._coordinatesConverter.convertModelPositionToViewPosition(new se.L(n.endLineNumber,this.model.getLineMaxColumn(n.endLineNumber)),1);s=new re.e(e.lineNumber,e.column,t.lineNumber,t.column)}else s=this._coordinatesConverter.convertModelRangeToViewRange(n,1);i=new Mt.$l(s,o),this._decorationsCache[t]=i}return i}getDecorationsViewportData(e){let t=null!==this._cachedModelDecorationsResolver;return t=t&&e.equalsRange(this._cachedModelDecorationsResolverViewRange),t||(this._cachedModelDecorationsResolver=this._getDecorationsViewportData(e),this._cachedModelDecorationsResolverViewRange=e),this._cachedModelDecorationsResolver}_getDecorationsViewportData(e){const t=this._linesCollection.getDecorationsInRange(e,this.editorId,(0,K.$J)(this.configuration.options)),i=e.startLineNumber,n=e.endLineNumber;let o=[],s=0,r=[];for(let e=i;e<=n;e++)r[e-i]=[];for(let e=0,a=t.length;e<a;e++){let a=t[e],l=a.options,c=this._getOrCreateViewModelDecoration(a),d=c.range;if(o[s++]=c,l.inlineClassName){let e=new Mt.$t(d,l.inlineClassName,l.inlineClassNameAffectsLetterSpacing?3:0),t=Math.max(i,d.startLineNumber),o=Math.min(n,d.endLineNumber);for(let n=t;n<=o;n++)r[n-i].push(e)}if(l.beforeContentClassName&&i<=d.startLineNumber&&d.startLineNumber<=n){let e=new Mt.$t(new re.e(d.startLineNumber,d.startColumn,d.startLineNumber,d.startColumn),l.beforeContentClassName,1);r[d.startLineNumber-i].push(e)}if(l.afterContentClassName&&i<=d.endLineNumber&&d.endLineNumber<=n){let e=new Mt.$t(new re.e(d.endLineNumber,d.endColumn,d.endLineNumber,d.endColumn),l.afterContentClassName,2);r[d.endLineNumber-i].push(e)}}return{decorations:o,inlineDecorations:r}}}var In=i(71144);class En extends u.JT{constructor(e,t,i,n,o,s){if(super(),this._editorId=e,this._configuration=t,this.model=i,this._eventDispatcher=new zi,this.onEvent=this._eventDispatcher.onEvent,this.cursorConfig=new ae.LM(this.model.getLanguageId(),this.model.getOptions(),this._configuration),this._tokenizeViewportSoon=this._register(new C.pY((()=>this.tokenizeViewport()),50)),this._updateConfigurationViewLineCount=this._register(new C.pY((()=>this._updateConfigurationViewLineCountNow()),0)),this._hasFocus=!1,this._viewportStartLine=-1,this._viewportStartLineTrackedRange=null,this._viewportStartLineDelta=0,this.model.isTooLargeForTokenization())this._lines=new Nn(this.model);else{const e=this._configuration.options,t=e.get(43),i=e.get(123),s=e.get(130),r=e.get(122);this._lines=new mn(this._editorId,this.model,n,o,t,this.model.getOptions().tabSize,i,s.wrappingColumn,r)}this.coordinatesConverter=this._lines.createCoordinatesConverter(),this._cursor=this._register(new Xi(i,this,this.coordinatesConverter,this.cursorConfig)),this.viewLayout=this._register(new hn(this._configuration,this.getLineCount(),s)),this._register(this.viewLayout.onDidScroll((e=>{e.scrollTopChanged&&this._tokenizeViewportSoon.schedule(),this._eventDispatcher.emitSingleViewEvent(new Fi(e)),this._eventDispatcher.emitOutgoingEvent(new Ki(e.oldScrollWidth,e.oldScrollLeft,e.oldScrollHeight,e.oldScrollTop,e.scrollWidth,e.scrollLeft,e.scrollHeight,e.scrollTop))}))),this._register(this.viewLayout.onDidContentSizeChange((e=>{this._eventDispatcher.emitOutgoingEvent(e)}))),this._decorations=new Dn(this._editorId,this.model,this._configuration,this._lines,this.coordinatesConverter),this._registerModelEvents(),this._register(this._configuration.onDidChangeFast((e=>{try{const t=this._eventDispatcher.beginEmitViewEvents();this._onConfigurationChanged(t,e)}finally{this._eventDispatcher.endEmitViewEvents()}}))),this._register(Tt.getInstance().onDidChange((()=>{this._eventDispatcher.emitSingleViewEvent(new Wi)}))),this._updateConfigurationViewLineCountNow()}dispose(){super.dispose(),this._decorations.dispose(),this._lines.dispose(),this.invalidateMinimapColorCache(),this._viewportStartLineTrackedRange=this.model._setTrackedRange(this._viewportStartLineTrackedRange,null,1),this._eventDispatcher.dispose()}createLineBreaksComputer(){return this._lines.createLineBreaksComputer()}addViewEventHandler(e){this._eventDispatcher.addViewEventHandler(e)}removeViewEventHandler(e){this._eventDispatcher.removeViewEventHandler(e)}_updateConfigurationViewLineCountNow(){this._configuration.setViewLineCount(this._lines.getViewLineCount())}tokenizeViewport(){const e=this.viewLayout.getLinesViewportData(),t=new re.e(e.startLineNumber,this.getLineMinColumn(e.startLineNumber),e.endLineNumber,this.getLineMaxColumn(e.endLineNumber)),i=this._toModelVisibleRanges(t);for(const e of i)this.model.tokenizeViewport(e.startLineNumber,e.endLineNumber)}setHasFocus(e){this._hasFocus=e,this._cursor.setHasFocus(e),this._eventDispatcher.emitSingleViewEvent(new Ei(e)),this._eventDispatcher.emitOutgoingEvent(new $i(!e,e))}onCompositionStart(){this._eventDispatcher.emitSingleViewEvent(new Si)}onCompositionEnd(){this._eventDispatcher.emitSingleViewEvent(new ki)}onDidColorThemeChange(){this._eventDispatcher.emitSingleViewEvent(new Bi)}_onConfigurationChanged(e,t){let i=null;if(-1!==this._viewportStartLine){let e=new se.L(this._viewportStartLine,this.getLineMinColumn(this._viewportStartLine));i=this.coordinatesConverter.convertViewPositionToModelPosition(e)}let n=!1;const o=this._configuration.options,s=o.get(43),r=o.get(123),a=o.get(130),l=o.get(122);if(this._lines.setWrappingSettings(s,r,a.wrappingColumn,l)&&(e.emitViewEvent(new Ii),e.emitViewEvent(new Mi),e.emitViewEvent(new Di(null)),this._cursor.onLineMappingChanged(e),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),0!==this.viewLayout.getCurrentScrollTop()&&(n=!0),this._updateConfigurationViewLineCount.schedule()),t.hasChanged(80)&&(this._decorations.reset(),e.emitViewEvent(new Di(null))),e.emitViewEvent(new Li(t)),this.viewLayout.onConfigurationChanged(t),n&&i){const e=this.coordinatesConverter.convertModelPositionToViewPosition(i),t=this.viewLayout.getVerticalOffsetForLineNumber(e.lineNumber);this.viewLayout.setScrollPosition({scrollTop:t+this._viewportStartLineDelta},1)}ae.LM.shouldRecreate(t)&&(this.cursorConfig=new ae.LM(this.model.getLanguageId(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig))}_registerModelEvents(){this._register(this.model.onDidChangeContentOrInjectedText((e=>{try{const t=this._eventDispatcher.beginEmitViewEvents();let i=!1,n=!1;const o=e.changes,s=e instanceof xi.dQ?e.versionId:null,r=this._lines.createLineBreaksComputer();for(const e of o)switch(e.changeType){case 4:for(let t=0;t<e.detail.length;t++){const i=e.detail[t];let n=e.injectedTexts[t];n&&(n=n.filter((e=>!e.ownerId||e.ownerId===this._editorId))),r.addRequest(i,n,null)}break;case 2:{let t=null;e.injectedText&&(t=e.injectedText.filter((e=>!e.ownerId||e.ownerId===this._editorId))),r.addRequest(e.detail,t,null);break}}const a=r.finalize();let l=0;for(const e of o)switch(e.changeType){case 1:this._lines.onModelFlushed(),t.emitViewEvent(new Ii),this._decorations.reset(),this.viewLayout.onFlushed(this.getLineCount()),i=!0;break;case 3:{const n=this._lines.onModelLinesDeleted(s,e.fromLineNumber,e.toLineNumber);null!==n&&(t.emitViewEvent(n),this.viewLayout.onLinesDeleted(n.fromLineNumber,n.toLineNumber)),i=!0;break}case 4:{const n=a.slice(l,l+e.detail.length);l+=e.detail.length;const o=this._lines.onModelLinesInserted(s,e.fromLineNumber,e.toLineNumber,n);null!==o&&(t.emitViewEvent(o),this.viewLayout.onLinesInserted(o.fromLineNumber,o.toLineNumber)),i=!0;break}case 2:{const i=a[l];l++;const[o,r,c,d]=this._lines.onModelLineChanged(s,e.lineNumber,i);n=o,r&&t.emitViewEvent(r),c&&(t.emitViewEvent(c),this.viewLayout.onLinesInserted(c.fromLineNumber,c.toLineNumber)),d&&(t.emitViewEvent(d),this.viewLayout.onLinesDeleted(d.fromLineNumber,d.toLineNumber));break}}null!==s&&this._lines.acceptVersionId(s),this.viewLayout.onHeightMaybeChanged(),!i&&n&&(t.emitViewEvent(new Mi),t.emitViewEvent(new Di(null)),this._cursor.onLineMappingChanged(t),this._decorations.onLineMappingChanged())}finally{this._eventDispatcher.endEmitViewEvents()}if(this._viewportStartLine=-1,this._configuration.setMaxLineNumber(this.model.getLineCount()),this._updateConfigurationViewLineCountNow(),!this._hasFocus&&this.model.getAttachedEditorCount()>=2&&this._viewportStartLineTrackedRange){const e=this.model._getTrackedRange(this._viewportStartLineTrackedRange);if(e){const t=this.coordinatesConverter.convertModelPositionToViewPosition(e.getStartPosition()),i=this.viewLayout.getVerticalOffsetForLineNumber(t.lineNumber);this.viewLayout.setScrollPosition({scrollTop:i+this._viewportStartLineDelta},1)}}try{const t=this._eventDispatcher.beginEmitViewEvents();this._cursor.onModelContentChanged(t,e)}finally{this._eventDispatcher.endEmitViewEvents()}}))),this._register(this.model.onDidChangeTokens((e=>{let t=[];for(let i=0,n=e.ranges.length;i<n;i++){const n=e.ranges[i],o=this.coordinatesConverter.convertModelPositionToViewPosition(new se.L(n.fromLineNumber,1)).lineNumber,s=this.coordinatesConverter.convertModelPositionToViewPosition(new se.L(n.toLineNumber,this.model.getLineMaxColumn(n.toLineNumber))).lineNumber;t[i]={fromLineNumber:o,toLineNumber:s}}this._eventDispatcher.emitSingleViewEvent(new Vi(t)),e.tokenizationSupportChanged&&this._tokenizeViewportSoon.schedule()}))),this._register(this.model.onDidChangeLanguageConfiguration((e=>{this._eventDispatcher.emitSingleViewEvent(new Ti),this.cursorConfig=new ae.LM(this.model.getLanguageId(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig)}))),this._register(this.model.onDidChangeLanguage((e=>{this.cursorConfig=new ae.LM(this.model.getLanguageId(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig)}))),this._register(this.model.onDidChangeOptions((e=>{if(this._lines.setTabSize(this.model.getOptions().tabSize)){try{const e=this._eventDispatcher.beginEmitViewEvents();e.emitViewEvent(new Ii),e.emitViewEvent(new Mi),e.emitViewEvent(new Di(null)),this._cursor.onLineMappingChanged(e),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount())}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule()}this.cursorConfig=new ae.LM(this.model.getLanguageId(),this.model.getOptions(),this._configuration),this._cursor.updateConfiguration(this.cursorConfig)}))),this._register(this.model.onDidChangeDecorations((e=>{this._decorations.onModelDecorationsChanged(),this._eventDispatcher.emitSingleViewEvent(new Di(e))})))}setHiddenAreas(e){let t=!1;try{const i=this._eventDispatcher.beginEmitViewEvents();t=this._lines.setHiddenAreas(e),t&&(i.emitViewEvent(new Ii),i.emitViewEvent(new Mi),i.emitViewEvent(new Di(null)),this._cursor.onLineMappingChanged(i),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),this.viewLayout.onHeightMaybeChanged())}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule(),t&&this._eventDispatcher.emitOutgoingEvent(new qi)}getVisibleRangesPlusViewportAboveBelow(){const e=this._configuration.options.get(129),t=this._configuration.options.get(58),i=Math.max(20,Math.round(e.height/t)),n=this.viewLayout.getLinesViewportData(),o=Math.max(1,n.completelyVisibleStartLineNumber-i),s=Math.min(this.getLineCount(),n.completelyVisibleEndLineNumber+i);return this._toModelVisibleRanges(new re.e(o,this.getLineMinColumn(o),s,this.getLineMaxColumn(s)))}getVisibleRanges(){const e=this.getCompletelyVisibleViewRange();return this._toModelVisibleRanges(e)}_toModelVisibleRanges(e){const t=this.coordinatesConverter.convertViewRangeToModelRange(e),i=this._lines.getHiddenAreas();if(0===i.length)return[t];let n=[],o=0,s=t.startLineNumber,r=t.startColumn,a=t.endLineNumber,l=t.endColumn;for(let e=0,t=i.length;e<t;e++){const t=i[e].startLineNumber,l=i[e].endLineNumber;l<s||(t>a||(s<t&&(n[o++]=new re.e(s,r,t-1,this.model.getLineMaxColumn(t-1))),s=l+1,r=1))}return(s<a||s===a&&r<l)&&(n[o++]=new re.e(s,r,a,l)),n}getCompletelyVisibleViewRange(){const e=this.viewLayout.getLinesViewportData(),t=e.completelyVisibleStartLineNumber,i=e.completelyVisibleEndLineNumber;return new re.e(t,this.getLineMinColumn(t),i,this.getLineMaxColumn(i))}getCompletelyVisibleViewRangeAtScrollTop(e){const t=this.viewLayout.getLinesViewportDataAtScrollTop(e),i=t.completelyVisibleStartLineNumber,n=t.completelyVisibleEndLineNumber;return new re.e(i,this.getLineMinColumn(i),n,this.getLineMaxColumn(n))}saveState(){const e=this.viewLayout.saveState(),t=e.scrollTop,i=this.viewLayout.getLineNumberAtVerticalOffset(t),n=this.coordinatesConverter.convertViewPositionToModelPosition(new se.L(i,this.getLineMinColumn(i))),o=this.viewLayout.getVerticalOffsetForLineNumber(i)-t;return{scrollLeft:e.scrollLeft,firstPosition:n,firstPositionDeltaTop:o}}reduceRestoreState(e){if(void 0===e.firstPosition)return this._reduceRestoreStateCompatibility(e);const t=this.model.validatePosition(e.firstPosition),i=this.coordinatesConverter.convertModelPositionToViewPosition(t),n=this.viewLayout.getVerticalOffsetForLineNumber(i.lineNumber)-e.firstPositionDeltaTop;return{scrollLeft:e.scrollLeft,scrollTop:n}}_reduceRestoreStateCompatibility(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTopWithoutViewZones}}getTabSize(){return this.model.getOptions().tabSize}getTextModelOptions(){return this.model.getOptions()}getLineCount(){return this._lines.getViewLineCount()}setViewport(e,t,i){this._viewportStartLine=e;let n=this.coordinatesConverter.convertViewPositionToModelPosition(new se.L(e,this.getLineMinColumn(e)));this._viewportStartLineTrackedRange=this.model._setTrackedRange(this._viewportStartLineTrackedRange,new re.e(n.lineNumber,n.column,n.lineNumber,n.column),1);const o=this.viewLayout.getVerticalOffsetForLineNumber(e),s=this.viewLayout.getCurrentScrollTop();this._viewportStartLineDelta=s-o}getActiveIndentGuide(e,t,i){return this._lines.getActiveIndentGuide(e,t,i)}getLinesIndentGuides(e,t){return this._lines.getViewLinesIndentGuides(e,t)}getBracketGuidesInRangeByLine(e,t,i,n){return this._lines.getViewLinesBracketGuides(e,t,i,n)}getLineContent(e){return this._lines.getViewLineContent(e)}getLineLength(e){return this._lines.getViewLineLength(e)}getLineMinColumn(e){return this._lines.getViewLineMinColumn(e)}getLineMaxColumn(e){return this._lines.getViewLineMaxColumn(e)}getLineFirstNonWhitespaceColumn(e){const t=Te.LC(this.getLineContent(e));return-1===t?0:t+1}getLineLastNonWhitespaceColumn(e){const t=Te.ow(this.getLineContent(e));return-1===t?0:t+2}getDecorationsInViewport(e){return this._decorations.getDecorationsViewportData(e).decorations}getInjectedTextAt(e){return this._lines.getInjectedTextAt(e)}getViewLineRenderingData(e,t){let i=this.model.mightContainRTL(),n=this.model.mightContainNonBasicASCII(),o=this.getTabSize(),s=this._lines.getViewLineData(t),r=this._decorations.getDecorationsViewportData(e).inlineDecorations[t-e.startLineNumber];return s.inlineDecorations&&(r=[...r,...s.inlineDecorations.map((e=>e.toInlineDecoration(t)))]),new Mt.wA(s.minColumn,s.maxColumn,s.content,s.continuesWithWrappedLine,i,n,s.tokens,r,o,s.startVisibleColumn)}getViewLineData(e){return this._lines.getViewLineData(e)}getMinimapLinesRenderingData(e,t,i){let n=this._lines.getViewLinesData(e,t,i);return new Mt.ud(this.getTabSize(),n)}getAllOverviewRulerDecorations(e){const t=this.model.getOverviewRulerDecorations(this._editorId,(0,K.$J)(this._configuration.options)),i=new Tn;for(const n of t){const t=n.options,o=t.overviewRuler;if(!o)continue;const s=o.position;if(0===s)continue;const r=o.getColor(e),a=this.coordinatesConverter.getViewLineNumberOfModelPosition(n.range.startLineNumber,n.range.startColumn),l=this.coordinatesConverter.getViewLineNumberOfModelPosition(n.range.endLineNumber,n.range.endColumn);i.accept(r,t.zIndex,a,l,s)}return i.asArray}invalidateOverviewRulerColorCache(){const e=this.model.getOverviewRulerDecorations();for(const t of e){const e=t.options.overviewRuler;e&&e.invalidateCachedColor()}}invalidateMinimapColorCache(){const e=this.model.getAllDecorations();for(const t of e){const e=t.options.minimap;e&&e.invalidateCachedColor()}}getValueInRange(e,t){const i=this.coordinatesConverter.convertViewRangeToModelRange(e);return this.model.getValueInRange(i,t)}getModelLineMaxColumn(e){return this.model.getLineMaxColumn(e)}validateModelPosition(e){return this.model.validatePosition(e)}validateModelRange(e){return this.model.validateRange(e)}deduceModelPositionRelativeToViewPosition(e,t,i){const n=this.coordinatesConverter.convertViewPositionToModelPosition(e);2===this.model.getEOL().length&&(t<0?t-=i:t+=i);const o=this.model.getOffsetAt(n)+t;return this.model.getPositionAt(o)}getEOL(){return this.model.getEOL()}getPlainTextToCopy(e,t,i){const n=i?"\r\n":this.model.getEOL();(e=e.slice(0)).sort(re.e.compareRangesUsingStarts);let o=!1,s=!1;for(const t of e)t.isEmpty()?o=!0:s=!0;if(!s){if(!t)return"";const i=e.map((e=>e.startLineNumber));let o="";for(let e=0;e<i.length;e++)e>0&&i[e-1]===i[e]||(o+=this.model.getLineContent(i[e])+n);return o}if(o&&t){let t=[],n=0;for(const o of e){const e=o.startLineNumber;o.isEmpty()?e!==n&&t.push(this.model.getLineContent(e)):t.push(this.model.getValueInRange(o,i?2:0)),n=e}return 1===t.length?t[0]:t}let r=[];for(const t of e)t.isEmpty()||r.push(this.model.getValueInRange(t,i?2:0));return 1===r.length?r[0]:r}getRichTextToCopy(e,t){const i=this.model.getLanguageId();if(i===In.XT)return null;if(1!==e.length)return null;let n=e[0];if(n.isEmpty()){if(!t)return null;const e=n.startLineNumber;n=new re.e(e,this.model.getLineMinColumn(e),e,this.model.getLineMaxColumn(e))}const o=this._configuration.options.get(43),s=this._getColorMap();let r;if(/[:;\\\/<>]/.test(o.fontFamily)||o.fontFamily===K.hL.fontFamily)r=K.hL.fontFamily;else{r=o.fontFamily,r=r.replace(/"/g,"'");if(!/[,']/.test(r)){/[+ ]/.test(r)&&(r=`'${r}'`)}r=`${r}, ${K.hL.fontFamily}`}return{mode:i,html:`<div style="color: ${s[1]};background-color: ${s[2]};font-family: ${r};font-weight: ${o.fontWeight};font-size: ${o.fontSize}px;line-height: ${o.lineHeight}px;white-space: pre;">`+this._getHTMLToCopy(n,s)+"</div>"}}_getHTMLToCopy(e,t){const i=e.startLineNumber,n=e.startColumn,o=e.endLineNumber,s=e.endColumn,r=this.getTabSize();let a="";for(let e=i;e<=o;e++){const l=this.model.getLineTokens(e),c=l.getLineContent(),d=e===i?n-1:0,h=e===o?s-1:c.length;a+=""===c?"<br>":(0,on.F)(c,l.inflate(),t,d,h,r,b.ED)}return a}_getColorMap(){let e=Et.RW.getColorMap(),t=["#000000"];if(e)for(let i=1,n=e.length;i<n;i++)t[i]=Qt.Il.Format.CSS.formatHex(e[i]);return t}pushStackElement(){this.model.pushStackElement()}getPrimaryCursorState(){return this._cursor.getPrimaryCursorState()}getLastAddedCursorIndex(){return this._cursor.getLastAddedCursorIndex()}getCursorStates(){return this._cursor.getCursorStates()}setCursorStates(e,t,i){this._withViewEventsCollector((n=>this._cursor.setStates(n,e,t,i)))}getCursorColumnSelectData(){return this._cursor.getCursorColumnSelectData()}getCursorAutoClosedCharacters(){return this._cursor.getAutoClosedCharacters()}setCursorColumnSelectData(e){this._cursor.setCursorColumnSelectData(e)}getPrevEditOperationType(){return this._cursor.getPrevEditOperationType()}setPrevEditOperationType(e){this._cursor.setPrevEditOperationType(e)}getSelection(){return this._cursor.getSelection()}getSelections(){return this._cursor.getSelections()}getPosition(){return this._cursor.getPrimaryCursorState().modelState.position}setSelections(e,t,i=0){this._withViewEventsCollector((n=>this._cursor.setSelections(n,e,t,i)))}saveCursorState(){return this._cursor.saveState()}restoreCursorState(e){this._withViewEventsCollector((t=>this._cursor.restoreState(t,e)))}_executeCursorEdit(e){this._cursor.context.cursorConfig.readOnly?this._eventDispatcher.emitOutgoingEvent(new Gi):this._withViewEventsCollector(e)}executeEdits(e,t,i){this._executeCursorEdit((n=>this._cursor.executeEdits(n,e,t,i)))}startComposition(){this._cursor.setIsDoingComposition(!0),this._executeCursorEdit((e=>this._cursor.startComposition(e)))}endComposition(e){this._cursor.setIsDoingComposition(!1),this._executeCursorEdit((t=>this._cursor.endComposition(t,e)))}type(e,t){this._executeCursorEdit((i=>this._cursor.type(i,e,t)))}compositionType(e,t,i,n,o){this._executeCursorEdit((s=>this._cursor.compositionType(s,e,t,i,n,o)))}paste(e,t,i,n){this._executeCursorEdit((o=>this._cursor.paste(o,e,t,i,n)))}cut(e){this._executeCursorEdit((t=>this._cursor.cut(t,e)))}executeCommand(e,t){this._executeCursorEdit((i=>this._cursor.executeCommand(i,e,t)))}executeCommands(e,t){this._executeCursorEdit((i=>this._cursor.executeCommands(i,e,t)))}revealPrimaryCursor(e,t){this._withViewEventsCollector((i=>this._cursor.revealPrimary(i,e,t,0)))}revealTopMostCursor(e){const t=this._cursor.getTopMostViewPosition(),i=new re.e(t.lineNumber,t.column,t.lineNumber,t.column);this._withViewEventsCollector((t=>t.emitViewEvent(new Ri(e,i,null,0,!0,0))))}revealBottomMostCursor(e){const t=this._cursor.getBottomMostViewPosition(),i=new re.e(t.lineNumber,t.column,t.lineNumber,t.column);this._withViewEventsCollector((t=>t.emitViewEvent(new Ri(e,i,null,0,!0,0))))}revealRange(e,t,i,n,o){this._withViewEventsCollector((s=>s.emitViewEvent(new Ri(e,i,null,n,t,o))))}getVerticalOffsetForLineNumber(e){return this.viewLayout.getVerticalOffsetForLineNumber(e)}getScrollTop(){return this.viewLayout.getCurrentScrollTop()}setScrollTop(e,t){this.viewLayout.setScrollPosition({scrollTop:e},t)}setScrollPosition(e,t){this.viewLayout.setScrollPosition(e,t)}deltaScrollNow(e,t){this.viewLayout.deltaScrollNow(e,t)}changeWhitespace(e){this.viewLayout.changeWhitespace(e)&&(this._eventDispatcher.emitSingleViewEvent(new Hi),this._eventDispatcher.emitOutgoingEvent(new qi))}setMaxLineWidth(e){this.viewLayout.setMaxLineWidth(e)}_withViewEventsCollector(e){try{e(this._eventDispatcher.beginEmitViewEvents())}finally{this._eventDispatcher.endEmitViewEvents()}}normalizePosition(e,t){return this._lines.normalizePosition(e,t)}getLineIndentColumn(e){return this._lines.getLineIndentColumn(e)}}class Tn{constructor(){this._asMap=Object.create(null),this.asArray=[]}accept(e,t,i,n,o){const s=this._asMap[e];if(s){const e=s.data,t=e[e.length-3],r=e[e.length-1];if(t===o&&r+1>=i)return void(n>r&&(e[e.length-1]=n));e.push(o,i,n)}else{const s=new Mt.SQ(e,t,[o,i,n]);this._asMap[e]=s,this.asArray.push(s)}}}var Mn=i(94565),An=i(38819),On=i(72065),Pn=i(60972),Rn=i(59422),Fn=i(31106),Bn=i(44906);class Vn extends Bn.N{constructor(e,t){super(0);for(let t=0;t<e.length;t++)this.set(e.charCodeAt(t),1);for(let e=0;e<t.length;e++)this.set(t.charCodeAt(e),2)}get(e){return e>=0&&e<256?this._asciiMap[e]:e>=12352&&e<=12543||e>=13312&&e<=19903||e>=19968&&e<=40959?3:this._map.get(e)||this._defaultValue}}let Wn=[],Hn=[];class zn{constructor(e,t){this.classifier=new Vn(e,t)}static create(e){return new zn(e.get(118),e.get(117))}createLineBreaksComputer(e,t,i,n){t|=0,i=+i;const o=[],s=[],r=[];return{addRequest:(e,t,i)=>{o.push(e),s.push(t),r.push(i)},finalize:()=>{const a=e.typicalFullwidthCharacterWidth/e.typicalHalfwidthCharacterWidth;let l=[];for(let e=0,c=o.length;e<c;e++){const c=s[e],d=r[e];!d||d.injectionOptions||c?l[e]=Un(this.classifier,o[e],c,t,i,a,n):l[e]=jn(this.classifier,d,o[e],t,i,a,n)}return Wn.length=0,Hn.length=0,l}}}}function jn(e,t,i,n,o,s,r){if(-1===o)return null;const a=i.length;if(a<=1)return null;const l=t.breakOffsets,c=t.breakOffsetsVisibleColumn,d=Zn(i,n,o,s,r),h=o-d;let u=Wn,g=Hn,p=0,f=0,m=0,v=o;const _=l.length;let b=0;if(b>=0){let e=Math.abs(c[b]-v);for(;b+1<_;){const t=Math.abs(c[b+1]-v);if(t>=e)break;e=t,b++}}for(;b<_;){let t=b<0?0:l[b],o=b<0?0:c[b];f>t&&(t=f,o=m);let r=0,d=0,w=0,y=0;if(o<=v){let m=o,_=0===t?0:i.charCodeAt(t-1),b=0===t?0:e.get(_),C=!0;for(let o=t;o<a;o++){const t=o,a=i.charCodeAt(o);let l,c;if(Te.ZG(a)?(o++,l=0,c=2):(l=e.get(a),c=$n(a,m,n,s)),t>f&&qn(_,b,a,l)&&(r=t,d=m),m+=c,m>v){t>f?(w=t,y=m-c):(w=o+1,y=m),m-d>h&&(r=0),C=!1;break}_=a,b=l}if(C){p>0&&(u[p]=l[l.length-1],g[p]=c[l.length-1],p++);break}}if(0===r){let a=o,l=i.charCodeAt(t),c=e.get(l),u=!1;for(let n=t-1;n>=f;n--){const t=n+1,o=i.charCodeAt(n);if(9===o){u=!0;break}let g,p;if(Te.YK(o)?(n--,g=0,p=2):(g=e.get(o),p=Te.K7(o)?s:1),a<=v){if(0===w&&(w=t,y=a),a<=v-h)break;if(qn(o,g,l,c)){r=t,d=a;break}}a-=p,l=o,c=g}if(0!==r){const e=h-(y-d);if(e<=n){const t=i.charCodeAt(w);let o;o=Te.ZG(t)?2:$n(t,y,n,s),e-o<0&&(r=0)}}if(u){b--;continue}}if(0===r&&(r=w,d=y),r<=f){const e=i.charCodeAt(f);Te.ZG(e)?(r=f+2,d=m+2):(r=f+1,d=m+$n(e,m,n,s))}for(f=r,u[p]=r,m=d,g[p]=d,p++,v=d+h;b<0||b<_&&c[b]<d;)b++;let C=Math.abs(c[b]-v);for(;b+1<_;){const e=Math.abs(c[b+1]-v);if(e>=C)break;C=e,b++}}return 0===p?null:(u.length=p,g.length=p,Wn=t.breakOffsets,Hn=t.breakOffsetsVisibleColumn,t.breakOffsets=u,t.breakOffsetsVisibleColumn=g,t.wrappedTextIndentLength=d,t)}function Un(e,t,i,n,o,s,r){const a=xi.gk.applyInjectedText(t,i);let l,c;if(i&&i.length>0?(l=i.map((e=>e.options)),c=i.map((e=>e.column-1))):(l=null,c=null),-1===o)return l?new Mt.le([a.length],[],0,c,l):null;const d=a.length;if(d<=1)return l?new Mt.le([a.length],[],0,c,l):null;const h=Zn(a,n,o,s,r),u=o-h;let g=[],p=[],f=0,m=0,v=0,_=o,b=a.charCodeAt(0),w=e.get(b),y=$n(b,0,n,s),C=1;Te.ZG(b)&&(y+=1,b=a.charCodeAt(1),w=e.get(b),C++);for(let t=C;t<d;t++){const i=t,o=a.charCodeAt(t);let r,l;Te.ZG(o)?(t++,r=0,l=2):(r=e.get(o),l=$n(o,y,n,s)),qn(b,w,o,r)&&(m=i,v=y),y+=l,y>_&&((0===m||y-v>u)&&(m=i,v=y-l),g[f]=m,p[f]=v,f++,_=v+u,m=0),b=o,w=r}return 0!==f||i&&0!==i.length?(g[f]=d,p[f]=y,new Mt.le(g,p,h,c,l)):null}function $n(e,t,i,n){return 9===e?i-t%i:Te.K7(e)||e<32?n:1}function Kn(e,t){return t-e%t}function qn(e,t,i,n){return 32!==i&&(2===t||3===t&&2!==n||1===n||3===n&&1!==t)}function Zn(e,t,i,n,o){let s=0;if(0!==o){const r=Te.LC(e);if(-1!==r){for(let i=0;i<r;i++){s+=9===e.charCodeAt(i)?Kn(s,t):1}const a=3===o?2:2===o?1:0;for(let e=0;e<a;e++){s+=Kn(s,t)}s+n>i&&(s=0)}}return s}var Gn;const Yn=null===(Gn=window.trustedTypes)||void 0===Gn?void 0:Gn.createPolicy("domLineBreaksComputer",{createHTML:e=>e});class Qn{static create(){return new Qn}constructor(){}createLineBreaksComputer(e,t,i,n){t|=0,i=+i;let o=[],s=[];return{addRequest:(e,t,i)=>{o.push(e),s.push(t)},finalize:()=>function(e,t,i,n,o,s){var r;function a(t){const i=s[t];if(i){const n=xi.gk.applyInjectedText(e[t],i),o=i.map((e=>e.options)),s=i.map((e=>e.column-1));return new Mt.le([n.length],[],0,s,o)}return null}if(-1===n){const t=[];for(let i=0,n=e.length;i<n;i++)t[i]=a(i);return t}const l=Math.round(n*t.typicalHalfwidthCharacterWidth),c=3===o?2:2===o?1:0,d=Math.round(i*c),h=Math.ceil(t.spaceWidth*d),u=document.createElement("div");p.V.applyFontInfoSlow(u,t);const g=(0,Ze.l$)(1e4),f=[],m=[],v=[],_=[],b=[];for(let n=0;n<e.length;n++){const r=xi.gk.applyInjectedText(e[n],s[n]);let a=0,c=0,d=l;if(0!==o)if(a=Te.LC(r),-1===a)a=0;else{for(let e=0;e<a;e++){c+=9===r.charCodeAt(e)?i-c%i:1}const e=Math.ceil(t.spaceWidth*c);e+t.typicalFullwidthCharacterWidth>l?(a=0,c=0):d=l-e}const u=r.substr(a),p=Xn(u,c,i,d,g,h);f[n]=a,m[n]=c,v[n]=u,_[n]=p[0],b[n]=p[1]}const w=g.build(),y=null!==(r=null==Yn?void 0:Yn.createHTML(w))&&void 0!==r?r:w;u.innerHTML=y,u.style.position="absolute",u.style.top="10000",u.style.wordWrap="break-word",document.body.appendChild(u);let C=document.createRange();const x=Array.prototype.slice.call(u.children,0);let S=[];for(let t=0;t<e.length;t++){const e=Jn(C,x[t],v[t],_[t]);if(null===e){S[t]=a(t);continue}const i=f[t],n=m[t]+d,o=b[t],r=[];for(let t=0,i=e.length;t<i;t++)r[t]=o[e[t]];if(0!==i)for(let t=0,n=e.length;t<n;t++)e[t]+=i;let l,c;const h=s[t];h?(l=h.map((e=>e.options)),c=h.map((e=>e.column-1))):(l=null,c=null),S[t]=new Mt.le(e,r,n,c,l)}return document.body.removeChild(u),S}(o,e,t,i,n,s)}}}function Xn(e,t,i,n,o,s){if(0!==s){let e=String(s);o.appendASCIIString('<div style="text-indent: -'),o.appendASCIIString(e),o.appendASCIIString("px; padding-left: "),o.appendASCIIString(e),o.appendASCIIString("px; box-sizing: border-box; width:")}else o.appendASCIIString('<div style="width:');o.appendASCIIString(String(n)),o.appendASCIIString('px;">');const r=e.length;let a=t,l=0,c=[],d=[],h=0<r?e.charCodeAt(0):0;o.appendASCIIString("<span>");for(let t=0;t<r;t++){0!==t&&t%16384==0&&o.appendASCIIString("</span><span>"),c[t]=l,d[t]=a;const n=h;h=t+1<r?e.charCodeAt(t+1):0;let s=1,u=1;switch(n){case 9:s=i-a%i,u=s;for(let e=1;e<=s;e++)e<s?o.write1(160):o.appendASCII(32);break;case 32:32===h?o.write1(160):o.appendASCII(32);break;case 60:o.appendASCIIString("&lt;");break;case 62:o.appendASCIIString("&gt;");break;case 38:o.appendASCIIString("&amp;");break;case 0:o.appendASCIIString("&#00;");break;case 65279:case 8232:case 8233:case 133:o.write1(65533);break;default:Te.K7(n)&&u++,n<32?o.write1(9216+n):o.write1(n)}l+=s,a+=u}return o.appendASCIIString("</span>"),c[e.length]=l,d[e.length]=a,o.appendASCIIString("</div>"),[c,d]}function Jn(e,t,i,n){if(i.length<=1)return null;const o=Array.prototype.slice.call(t.children,0),s=[];try{eo(e,o,n,0,null,i.length-1,null,s)}catch(e){return console.log(e),null}return 0===s.length?null:(s.push(i.length),s)}function eo(e,t,i,n,o,s,r,a){if(n===s)return;if(o=o||to(e,t,i[n],i[n+1]),r=r||to(e,t,i[s],i[s+1]),Math.abs(o[0].top-r[0].top)<=.1)return;if(n+1===s)return void a.push(s);const l=n+(s-n)/2|0,c=to(e,t,i[l],i[l+1]);eo(e,t,i,n,o,l,c,a),eo(e,t,i,l,c,s,r,a)}function to(e,t,i,n){return e.setStart(t[i/16384|0].firstChild,i%16384),e.setEnd(t[n/16384|0].firstChild,n%16384),e.getClientRects()}var io=i(5795),no=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},oo=function(e,t){return function(i,n){t(i,n,e)}};let so=0;class ro{constructor(e,t,i,n,o){this.model=e,this.viewModel=t,this.view=i,this.hasRealView=n,this.listenersToRemove=o}dispose(){(0,u.B9)(this.listenersToRemove),this.model.onBeforeDetached(),this.hasRealView&&this.view.dispose(),this.viewModel.dispose()}}let ao=class e extends u.JT{constructor(e,t,i,n,s,r,a,l,c,u){super(),this._onDidDispose=this._register(new h.Q5),this.onDidDispose=this._onDidDispose.event,this._onDidChangeModelContent=this._register(new h.Q5),this.onDidChangeModelContent=this._onDidChangeModelContent.event,this._onDidChangeModelLanguage=this._register(new h.Q5),this.onDidChangeModelLanguage=this._onDidChangeModelLanguage.event,this._onDidChangeModelLanguageConfiguration=this._register(new h.Q5),this.onDidChangeModelLanguageConfiguration=this._onDidChangeModelLanguageConfiguration.event,this._onDidChangeModelOptions=this._register(new h.Q5),this.onDidChangeModelOptions=this._onDidChangeModelOptions.event,this._onDidChangeModelDecorations=this._register(new h.Q5),this.onDidChangeModelDecorations=this._onDidChangeModelDecorations.event,this._onDidChangeConfiguration=this._register(new h.Q5),this.onDidChangeConfiguration=this._onDidChangeConfiguration.event,this._onDidChangeModel=this._register(new h.Q5),this.onDidChangeModel=this._onDidChangeModel.event,this._onDidChangeCursorPosition=this._register(new h.Q5),this.onDidChangeCursorPosition=this._onDidChangeCursorPosition.event,this._onDidChangeCursorSelection=this._register(new h.Q5),this.onDidChangeCursorSelection=this._onDidChangeCursorSelection.event,this._onDidAttemptReadOnlyEdit=this._register(new h.Q5),this.onDidAttemptReadOnlyEdit=this._onDidAttemptReadOnlyEdit.event,this._onDidLayoutChange=this._register(new h.Q5),this.onDidLayoutChange=this._onDidLayoutChange.event,this._editorTextFocus=this._register(new lo),this.onDidFocusEditorText=this._editorTextFocus.onDidChangeToTrue,this.onDidBlurEditorText=this._editorTextFocus.onDidChangeToFalse,this._editorWidgetFocus=this._register(new lo),this.onDidFocusEditorWidget=this._editorWidgetFocus.onDidChangeToTrue,this.onDidBlurEditorWidget=this._editorWidgetFocus.onDidChangeToFalse,this._onWillType=this._register(new h.Q5),this.onWillType=this._onWillType.event,this._onDidType=this._register(new h.Q5),this.onDidType=this._onDidType.event,this._onDidCompositionStart=this._register(new h.Q5),this.onDidCompositionStart=this._onDidCompositionStart.event,this._onDidCompositionEnd=this._register(new h.Q5),this.onDidCompositionEnd=this._onDidCompositionEnd.event,this._onDidPaste=this._register(new h.Q5),this.onDidPaste=this._onDidPaste.event,this._onMouseUp=this._register(new h.Q5),this.onMouseUp=this._onMouseUp.event,this._onMouseDown=this._register(new h.Q5),this.onMouseDown=this._onMouseDown.event,this._onMouseDrag=this._register(new h.Q5),this.onMouseDrag=this._onMouseDrag.event,this._onMouseDrop=this._register(new h.Q5),this.onMouseDrop=this._onMouseDrop.event,this._onMouseDropCanceled=this._register(new h.Q5),this.onMouseDropCanceled=this._onMouseDropCanceled.event,this._onContextMenu=this._register(new h.Q5),this.onContextMenu=this._onContextMenu.event,this._onMouseMove=this._register(new h.Q5),this.onMouseMove=this._onMouseMove.event,this._onMouseLeave=this._register(new h.Q5),this.onMouseLeave=this._onMouseLeave.event,this._onMouseWheel=this._register(new h.Q5),this.onMouseWheel=this._onMouseWheel.event,this._onKeyUp=this._register(new h.Q5),this.onKeyUp=this._onKeyUp.event,this._onKeyDown=this._register(new h.Q5),this.onKeyDown=this._onKeyDown.event,this._onDidContentSizeChange=this._register(new h.Q5),this.onDidContentSizeChange=this._onDidContentSizeChange.event,this._onDidScrollChange=this._register(new h.Q5),this.onDidScrollChange=this._onDidScrollChange.event,this._onDidChangeViewZones=this._register(new h.Q5),this.onDidChangeViewZones=this._onDidChangeViewZones.event,this._onDidChangeHiddenAreas=this._register(new h.Q5),this.onDidChangeHiddenAreas=this._onDidChangeHiddenAreas.event;const g=Object.assign({},t);let p;this._domElement=e,this._overflowWidgetsDomNode=g.overflowWidgetsDomNode,delete g.overflowWidgetsDomNode,this._id=++so,this._decorationTypeKeysToIds={},this._decorationTypeSubtypes={},this.isSimpleWidget=i.isSimpleWidget||!1,this._telemetryData=i.telemetryData,this._configuration=this._register(this._createConfiguration(g,u)),this._register(this._configuration.onDidChange((e=>{this._onDidChangeConfiguration.fire(e);const t=this._configuration.options;if(e.hasChanged(129)){const e=t.get(129);this._onDidLayoutChange.fire(e)}}))),this._contextKeyService=this._register(a.createScoped(this._domElement)),this._notificationService=c,this._codeEditorService=s,this._commandService=r,this._themeService=l,this._register(new co(this,this._contextKeyService)),this._register(new ho(this,this._contextKeyService)),this._instantiationService=n.createChild(new Pn.y([An.i6,this._contextKeyService])),this._modelData=null,this._contributions={},this._actions={},this._focusTracker=new uo(e),this._register(this._focusTracker.onChange((()=>{this._editorWidgetFocus.setValue(this._focusTracker.hasFocus())}))),this._contentWidgets={},this._overlayWidgets={},p=Array.isArray(i.contributions)?i.contributions:o.Uc.getEditorContributions();for(const e of p)if(this._contributions[e.id])(0,d.dL)(new Error(`Cannot have two contributions with the same id ${e.id}`));else try{const t=this._instantiationService.createInstance(e.ctor,this);this._contributions[e.id]=t}catch(e){(0,d.dL)(e)}o.Uc.getEditorActions().forEach((e=>{if(this._actions[e.id])return void(0,d.dL)(new Error(`Cannot have two actions with the same id ${e.id}`));const t=new en.p(e.id,e.label,e.alias,(0,wt.f6)(e.precondition),(()=>this._instantiationService.invokeFunction((t=>Promise.resolve(e.runEditorCommand(t,this,null))))),this._contextKeyService);this._actions[t.id]=t})),this._codeEditorService.addCodeEditor(this)}_createConfiguration(e,t){return new p.V(this.isSimpleWidget,e,this._domElement,t)}getId(){return this.getEditorType()+":"+this._id}getEditorType(){return tn.g.ICodeEditor}dispose(){this._codeEditorService.removeCodeEditor(this),this._focusTracker.dispose();const e=Object.keys(this._contributions);for(let t=0,i=e.length;t<i;t++){const i=e[t];this._contributions[i].dispose()}this._contributions={},this._actions={},this._contentWidgets={},this._overlayWidgets={},this._removeDecorationTypes(),this._postDetachModelCleanup(this._detachModel()),this._onDidDispose.fire(),super.dispose()}invokeWithinContext(e){return this._instantiationService.invokeFunction(e)}updateOptions(e){this._configuration.updateOptions(e)}getOptions(){return this._configuration.options}getOption(e){return this._configuration.options.get(e)}getRawOptions(){return this._configuration.getRawOptions()}getOverflowWidgetsDomNode(){return this._overflowWidgetsDomNode}getConfiguredWordAtPosition(e){return this._modelData?io.w.getWordAtPosition(this._modelData.model,this._configuration.options.get(115),e):null}getValue(e=null){if(!this._modelData)return"";const t=!(!e||!e.preserveBOM);let i=0;return e&&e.lineEnding&&"\n"===e.lineEnding?i=1:e&&e.lineEnding&&"\r\n"===e.lineEnding&&(i=2),this._modelData.model.getValue(i,t)}setValue(e){this._modelData&&this._modelData.model.setValue(e)}getModel(){return this._modelData?this._modelData.model:null}setModel(e=null){const t=e;if(null===this._modelData&&null===t)return;if(this._modelData&&this._modelData.model===t)return;const i=this.hasTextFocus(),n=this._detachModel();this._attachModel(t),i&&this.hasModel()&&this.focus();const o={oldModelUrl:n?n.uri:null,newModelUrl:t?t.uri:null};this._removeDecorationTypes(),this._onDidChangeModel.fire(o),this._postDetachModelCleanup(n)}_removeDecorationTypes(){if(this._decorationTypeKeysToIds={},this._decorationTypeSubtypes){for(let e in this._decorationTypeSubtypes){const t=this._decorationTypeSubtypes[e];for(let i in t)this._removeDecorationType(e+"-"+i)}this._decorationTypeSubtypes={}}}getVisibleRanges(){return this._modelData?this._modelData.viewModel.getVisibleRanges():[]}getVisibleRangesPlusViewportAboveBelow(){return this._modelData?this._modelData.viewModel.getVisibleRangesPlusViewportAboveBelow():[]}getWhitespaces(){return this._modelData?this._modelData.viewModel.viewLayout.getWhitespaces():[]}static _getVerticalOffsetForPosition(e,t,i){const n=e.model.validatePosition({lineNumber:t,column:i}),o=e.viewModel.coordinatesConverter.convertModelPositionToViewPosition(n);return e.viewModel.viewLayout.getVerticalOffsetForLineNumber(o.lineNumber)}getTopForLineNumber(t){return this._modelData?e._getVerticalOffsetForPosition(this._modelData,t,1):-1}getTopForPosition(t,i){return this._modelData?e._getVerticalOffsetForPosition(this._modelData,t,i):-1}setHiddenAreas(e){this._modelData&&this._modelData.viewModel.setHiddenAreas(e.map((e=>re.e.lift(e))))}getVisibleColumnFromPosition(e){if(!this._modelData)return e.column;const t=this._modelData.model.validatePosition(e),i=this._modelData.model.getOptions().tabSize;return ae.io.visibleColumnFromColumn(this._modelData.model.getLineContent(t.lineNumber),t.column,i)+1}getPosition(){return this._modelData?this._modelData.viewModel.getPosition():null}setPosition(e){if(this._modelData){if(!se.L.isIPosition(e))throw new Error("Invalid arguments");this._modelData.viewModel.setSelections("api",[{selectionStartLineNumber:e.lineNumber,selectionStartColumn:e.column,positionLineNumber:e.lineNumber,positionColumn:e.column}])}}_sendRevealRange(e,t,i,n){if(!this._modelData)return;if(!re.e.isIRange(e))throw new Error("Invalid arguments");const o=this._modelData.model.validateRange(e),s=this._modelData.viewModel.coordinatesConverter.convertModelRangeToViewRange(o);this._modelData.viewModel.revealRange("api",i,s,t,n)}revealLine(e,t=0){this._revealLine(e,0,t)}revealLineInCenter(e,t=0){this._revealLine(e,1,t)}revealLineInCenterIfOutsideViewport(e,t=0){this._revealLine(e,2,t)}revealLineNearTop(e,t=0){this._revealLine(e,5,t)}_revealLine(e,t,i){if("number"!=typeof e)throw new Error("Invalid arguments");this._sendRevealRange(new re.e(e,1,e,1),t,!1,i)}revealPosition(e,t=0){this._revealPosition(e,0,!0,t)}revealPositionInCenter(e,t=0){this._revealPosition(e,1,!0,t)}revealPositionInCenterIfOutsideViewport(e,t=0){this._revealPosition(e,2,!0,t)}revealPositionNearTop(e,t=0){this._revealPosition(e,5,!0,t)}_revealPosition(e,t,i,n){if(!se.L.isIPosition(e))throw new Error("Invalid arguments");this._sendRevealRange(new re.e(e.lineNumber,e.column,e.lineNumber,e.column),t,i,n)}getSelection(){return this._modelData?this._modelData.viewModel.getSelection():null}getSelections(){return this._modelData?this._modelData.viewModel.getSelections():null}setSelection(e){const t=v.Y.isISelection(e),i=re.e.isIRange(e);if(!t&&!i)throw new Error("Invalid arguments");if(t)this._setSelectionImpl(e);else if(i){const t={selectionStartLineNumber:e.startLineNumber,selectionStartColumn:e.startColumn,positionLineNumber:e.endLineNumber,positionColumn:e.endColumn};this._setSelectionImpl(t)}}_setSelectionImpl(e){if(!this._modelData)return;const t=new v.Y(e.selectionStartLineNumber,e.selectionStartColumn,e.positionLineNumber,e.positionColumn);this._modelData.viewModel.setSelections("api",[t])}revealLines(e,t,i=0){this._revealLines(e,t,0,i)}revealLinesInCenter(e,t,i=0){this._revealLines(e,t,1,i)}revealLinesInCenterIfOutsideViewport(e,t,i=0){this._revealLines(e,t,2,i)}revealLinesNearTop(e,t,i=0){this._revealLines(e,t,5,i)}_revealLines(e,t,i,n){if("number"!=typeof e||"number"!=typeof t)throw new Error("Invalid arguments");this._sendRevealRange(new re.e(e,1,t,1),i,!1,n)}revealRange(e,t=0,i=!1,n=!0){this._revealRange(e,i?1:0,n,t)}revealRangeInCenter(e,t=0){this._revealRange(e,1,!0,t)}revealRangeInCenterIfOutsideViewport(e,t=0){this._revealRange(e,2,!0,t)}revealRangeNearTop(e,t=0){this._revealRange(e,5,!0,t)}revealRangeNearTopIfOutsideViewport(e,t=0){this._revealRange(e,6,!0,t)}revealRangeAtTop(e,t=0){this._revealRange(e,3,!0,t)}_revealRange(e,t,i,n){if(!re.e.isIRange(e))throw new Error("Invalid arguments");this._sendRevealRange(re.e.lift(e),t,i,n)}setSelections(e,t="api",i=0){if(this._modelData){if(!e||0===e.length)throw new Error("Invalid arguments");for(let t=0,i=e.length;t<i;t++)if(!v.Y.isISelection(e[t]))throw new Error("Invalid arguments");this._modelData.viewModel.setSelections(t,e,i)}}getContentWidth(){return this._modelData?this._modelData.viewModel.viewLayout.getContentWidth():-1}getScrollWidth(){return this._modelData?this._modelData.viewModel.viewLayout.getScrollWidth():-1}getScrollLeft(){return this._modelData?this._modelData.viewModel.viewLayout.getCurrentScrollLeft():-1}getContentHeight(){return this._modelData?this._modelData.viewModel.viewLayout.getContentHeight():-1}getScrollHeight(){return this._modelData?this._modelData.viewModel.viewLayout.getScrollHeight():-1}getScrollTop(){return this._modelData?this._modelData.viewModel.viewLayout.getCurrentScrollTop():-1}setScrollLeft(e,t=1){if(this._modelData){if("number"!=typeof e)throw new Error("Invalid arguments");this._modelData.viewModel.setScrollPosition({scrollLeft:e},t)}}setScrollTop(e,t=1){if(this._modelData){if("number"!=typeof e)throw new Error("Invalid arguments");this._modelData.viewModel.setScrollPosition({scrollTop:e},t)}}setScrollPosition(e,t=1){this._modelData&&this._modelData.viewModel.setScrollPosition(e,t)}saveViewState(){if(!this._modelData)return null;const e={},t=Object.keys(this._contributions);for(const i of t){const t=this._contributions[i];"function"==typeof t.saveViewState&&(e[i]=t.saveViewState())}return{cursorState:this._modelData.viewModel.saveCursorState(),viewState:this._modelData.viewModel.saveState(),contributionsState:e}}restoreViewState(e){if(!this._modelData||!this._modelData.hasRealView)return;const t=e;if(t&&t.cursorState&&t.viewState){const e=t.cursorState;Array.isArray(e)?this._modelData.viewModel.restoreCursorState(e):this._modelData.viewModel.restoreCursorState([e]);const i=t.contributionsState||{},n=Object.keys(this._contributions);for(let e=0,t=n.length;e<t;e++){const t=n[e],o=this._contributions[t];"function"==typeof o.restoreViewState&&o.restoreViewState(i[t])}const o=this._modelData.viewModel.reduceRestoreState(t.viewState);this._modelData.view.restoreState(o)}}getContribution(e){return this._contributions[e]||null}getActions(){const e=[],t=Object.keys(this._actions);for(let i=0,n=t.length;i<n;i++){const n=t[i];e.push(this._actions[n])}return e}getSupportedActions(){let e=this.getActions();return e=e.filter((e=>e.isSupported())),e}getAction(e){return this._actions[e]||null}trigger(e,t,i){switch(i=i||{},t){case"compositionStart":return void this._startComposition();case"compositionEnd":return void this._endComposition(e);case"type":{const t=i;return void this._type(e,t.text||"")}case"replacePreviousChar":{const t=i;return void this._compositionType(e,t.text||"",t.replaceCharCnt||0,0,0)}case"compositionType":{const t=i;return void this._compositionType(e,t.text||"",t.replacePrevCharCnt||0,t.replaceNextCharCnt||0,t.positionDelta||0)}case"paste":{const t=i;return void this._paste(e,t.text||"",t.pasteOnNewLine||!1,t.multicursorText||null,t.mode||null)}case"cut":return void this._cut(e)}const n=this.getAction(t);n?Promise.resolve(n.run()).then(void 0,d.dL):this._modelData&&(this._triggerEditorCommand(e,t,i)||this._triggerCommand(t,i))}_triggerCommand(e,t){this._commandService.executeCommand(e,t)}_startComposition(){this._modelData&&(this._modelData.viewModel.startComposition(),this._onDidCompositionStart.fire())}_endComposition(e){this._modelData&&(this._modelData.viewModel.endComposition(e),this._onDidCompositionEnd.fire())}_type(e,t){this._modelData&&0!==t.length&&("keyboard"===e&&this._onWillType.fire(t),this._modelData.viewModel.type(t,e),"keyboard"===e&&this._onDidType.fire(t))}_compositionType(e,t,i,n,o){this._modelData&&this._modelData.viewModel.compositionType(t,i,n,o,e)}_paste(e,t,i,n,o){if(!this._modelData||0===t.length)return;const s=this._modelData.viewModel.getSelection().getStartPosition();this._modelData.viewModel.paste(t,i,n,e);const r=this._modelData.viewModel.getSelection().getStartPosition();"keyboard"===e&&this._onDidPaste.fire({range:new re.e(s.lineNumber,s.column,r.lineNumber,r.column),languageId:o})}_cut(e){this._modelData&&this._modelData.viewModel.cut(e)}_triggerEditorCommand(e,t,i){const n=o.Uc.getEditorCommand(t);return!!n&&((i=i||{}).source=e,this._instantiationService.invokeFunction((e=>{Promise.resolve(n.runEditorCommand(e,this,i)).then(void 0,d.dL)})),!0)}_getViewModel(){return this._modelData?this._modelData.viewModel:null}pushUndoStop(){return!!this._modelData&&(!this._configuration.options.get(80)&&(this._modelData.model.pushStackElement(),!0))}popUndoStop(){return!!this._modelData&&(!this._configuration.options.get(80)&&(this._modelData.model.popStackElement(),!0))}executeEdits(e,t,i){if(!this._modelData)return!1;if(this._configuration.options.get(80))return!1;let n;return n=i?Array.isArray(i)?()=>i:i:()=>null,this._modelData.viewModel.executeEdits(e,t,n),!0}executeCommand(e,t){this._modelData&&this._modelData.viewModel.executeCommand(t,e)}executeCommands(e,t){this._modelData&&this._modelData.viewModel.executeCommands(t,e)}changeDecorations(e){return this._modelData?this._modelData.model.changeDecorations(e,this._id):null}getLineDecorations(e){return this._modelData?this._modelData.model.getLineDecorations(e,this._id,(0,K.$J)(this._configuration.options)):null}deltaDecorations(e,t){return this._modelData?0===e.length&&0===t.length?e:this._modelData.model.deltaDecorations(e,t,this._id):[]}removeDecorations(e){const t=this._decorationTypeKeysToIds[e];t&&this.deltaDecorations(t,[]),this._decorationTypeKeysToIds.hasOwnProperty(e)&&delete this._decorationTypeKeysToIds[e],this._decorationTypeSubtypes.hasOwnProperty(e)&&delete this._decorationTypeSubtypes[e]}getLayoutInfo(){return this._configuration.options.get(129)}createOverviewRuler(e){return this._modelData&&this._modelData.hasRealView?this._modelData.view.createOverviewRuler(e):null}getContainerDomNode(){return this._domElement}getDomNode(){return this._modelData&&this._modelData.hasRealView?this._modelData.view.domNode.domNode:null}delegateVerticalScrollbarMouseDown(e){this._modelData&&this._modelData.hasRealView&&this._modelData.view.delegateVerticalScrollbarMouseDown(e)}layout(e){this._configuration.observeReferenceElement(e),this.render()}focus(){this._modelData&&this._modelData.hasRealView&&this._modelData.view.focus()}hasTextFocus(){return!(!this._modelData||!this._modelData.hasRealView)&&this._modelData.view.isFocused()}hasWidgetFocus(){return this._focusTracker&&this._focusTracker.hasFocus()}addContentWidget(e){const t={widget:e,position:e.getPosition()};this._contentWidgets.hasOwnProperty(e.getId())&&console.warn("Overwriting a content widget with the same id."),this._contentWidgets[e.getId()]=t,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addContentWidget(t)}layoutContentWidget(e){const t=e.getId();if(this._contentWidgets.hasOwnProperty(t)){const i=this._contentWidgets[t];i.position=e.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutContentWidget(i)}}removeContentWidget(e){const t=e.getId();if(this._contentWidgets.hasOwnProperty(t)){const e=this._contentWidgets[t];delete this._contentWidgets[t],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeContentWidget(e)}}addOverlayWidget(e){const t={widget:e,position:e.getPosition()};this._overlayWidgets.hasOwnProperty(e.getId())&&console.warn("Overwriting an overlay widget with the same id."),this._overlayWidgets[e.getId()]=t,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addOverlayWidget(t)}layoutOverlayWidget(e){const t=e.getId();if(this._overlayWidgets.hasOwnProperty(t)){const i=this._overlayWidgets[t];i.position=e.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutOverlayWidget(i)}}removeOverlayWidget(e){const t=e.getId();if(this._overlayWidgets.hasOwnProperty(t)){const e=this._overlayWidgets[t];delete this._overlayWidgets[t],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeOverlayWidget(e)}}changeViewZones(e){this._modelData&&this._modelData.hasRealView&&this._modelData.view.change(e)}getTargetAtClientPoint(e,t){return this._modelData&&this._modelData.hasRealView?this._modelData.view.getTargetAtClientPoint(e,t):null}getScrolledVisiblePosition(t){if(!this._modelData||!this._modelData.hasRealView)return null;const i=this._modelData.model.validatePosition(t),n=this._configuration.options,o=n.get(129);return{top:e._getVerticalOffsetForPosition(this._modelData,i.lineNumber,i.column)-this.getScrollTop(),left:this._modelData.view.getOffsetForColumn(i.lineNumber,i.column)+o.glyphMarginWidth+o.lineNumbersWidth+o.decorationsWidth-this.getScrollLeft(),height:n.get(58)}}getOffsetForColumn(e,t){return this._modelData&&this._modelData.hasRealView?this._modelData.view.getOffsetForColumn(e,t):-1}render(e=!1){this._modelData&&this._modelData.hasRealView&&this._modelData.view.render(!0,e)}setAriaOptions(e){this._modelData&&this._modelData.hasRealView&&this._modelData.view.setAriaOptions(e)}applyFontInfo(e){p.V.applyFontInfoSlow(e,this._configuration.options.get(43))}_attachModel(e){if(!e)return void(this._modelData=null);const t=[];this._domElement.setAttribute("data-mode-id",e.getLanguageId()),this._configuration.setIsDominatedByLongLines(e.isDominatedByLongLines()),this._configuration.setMaxLineNumber(e.getLineCount()),e.onBeforeAttached();const i=new En(this._id,this._configuration,e,Qn.create(),zn.create(this._configuration.options),(e=>c.jL(e)));t.push(e.onDidChangeDecorations((e=>this._onDidChangeModelDecorations.fire(e)))),t.push(e.onDidChangeLanguage((t=>{this._domElement.setAttribute("data-mode-id",e.getLanguageId()),this._onDidChangeModelLanguage.fire(t)}))),t.push(e.onDidChangeLanguageConfiguration((e=>this._onDidChangeModelLanguageConfiguration.fire(e)))),t.push(e.onDidChangeContent((e=>this._onDidChangeModelContent.fire(e)))),t.push(e.onDidChangeOptions((e=>this._onDidChangeModelOptions.fire(e)))),t.push(e.onWillDispose((()=>this.setModel(null)))),t.push(i.onEvent((e=>{switch(e.kind){case 0:this._onDidContentSizeChange.fire(e);break;case 1:this._editorTextFocus.setValue(e.hasFocus);break;case 2:this._onDidScrollChange.fire(e);break;case 3:this._onDidChangeViewZones.fire();break;case 4:this._onDidChangeHiddenAreas.fire();break;case 5:this._onDidAttemptReadOnlyEdit.fire();break;case 6:{e.reachedMaxCursorCount&&this._notificationService.warn(l.N("cursors.maximum","The number of cursors has been limited to {0}.",Xi.MAX_CURSOR_COUNT));const t=[];for(let i=0,n=e.selections.length;i<n;i++)t[i]=e.selections[i].getPosition();const i={position:t[0],secondaryPositions:t.slice(1),reason:e.reason,source:e.source};this._onDidChangeCursorPosition.fire(i);const n={selection:e.selections[0],secondarySelections:e.selections.slice(1),modelVersionId:e.modelVersionId,oldSelections:e.oldSelections,oldModelVersionId:e.oldModelVersionId,source:e.source,reason:e.reason};this._onDidChangeCursorSelection.fire(n);break}}})));const[n,o]=this._createView(i);if(o){this._domElement.appendChild(n.domNode.domNode);let t=Object.keys(this._contentWidgets);for(let e=0,i=t.length;e<i;e++){const i=t[e];n.addContentWidget(this._contentWidgets[i])}t=Object.keys(this._overlayWidgets);for(let e=0,i=t.length;e<i;e++){const i=t[e];n.addOverlayWidget(this._overlayWidgets[i])}n.render(!1,!0),n.domNode.domNode.setAttribute("data-uri",e.uri.toString())}this._modelData=new ro(e,i,n,o,t)}_createView(e){let t;t=this.isSimpleWidget?{paste:(e,t,i,n)=>{this._paste("keyboard",e,t,i,n)},type:e=>{this._type("keyboard",e)},compositionType:(e,t,i,n)=>{this._compositionType("keyboard",e,t,i,n)},startComposition:()=>{this._startComposition()},endComposition:()=>{this._endComposition("keyboard")},cut:()=>{this._cut("keyboard")}}:{paste:(e,t,i,n)=>{const o={text:e,pasteOnNewLine:t,multicursorText:i,mode:n};this._commandService.executeCommand("paste",o)},type:e=>{const t={text:e};this._commandService.executeCommand("type",t)},compositionType:(e,t,i,n)=>{if(i||n){const o={text:e,replacePrevCharCnt:t,replaceNextCharCnt:i,positionDelta:n};this._commandService.executeCommand("compositionType",o)}else{const i={text:e,replaceCharCnt:t};this._commandService.executeCommand("replacePreviousChar",i)}},startComposition:()=>{this._commandService.executeCommand("compositionStart",{})},endComposition:()=>{this._commandService.executeCommand("compositionEnd",{})},cut:()=>{this._commandService.executeCommand("cut",{})}};const i=new $e(e.coordinatesConverter);i.onKeyDown=e=>this._onKeyDown.fire(e),i.onKeyUp=e=>this._onKeyUp.fire(e),i.onContextMenu=e=>this._onContextMenu.fire(e),i.onMouseMove=e=>this._onMouseMove.fire(e),i.onMouseLeave=e=>this._onMouseLeave.fire(e),i.onMouseDown=e=>this._onMouseDown.fire(e),i.onMouseUp=e=>this._onMouseUp.fire(e),i.onMouseDrag=e=>this._onMouseDrag.fire(e),i.onMouseDrop=e=>this._onMouseDrop.fire(e),i.onMouseDropCanceled=e=>this._onMouseDropCanceled.fire(e),i.onMouseWheel=e=>this._onMouseWheel.fire(e);return[new _i(t,this._configuration,this._themeService,e,i,this._overflowWidgetsDomNode),!0]}_postDetachModelCleanup(e){e&&e.removeAllDecorationsWithOwnerId(this._id)}_detachModel(){if(!this._modelData)return null;const e=this._modelData.model,t=this._modelData.hasRealView?this._modelData.view.domNode.domNode:null;return this._modelData.dispose(),this._modelData=null,this._domElement.removeAttribute("data-mode-id"),t&&this._domElement.contains(t)&&this._domElement.removeChild(t),e}_removeDecorationType(e){this._codeEditorService.removeDecorationType(e)}hasModel(){return null!==this._modelData}};ao=no([oo(3,On.TG),oo(4,f.$),oo(5,Mn.H),oo(6,An.i6),oo(7,Pe.XE),oo(8,Rn.lT),oo(9,Fn.F)],ao);class lo extends u.JT{constructor(){super(),this._onDidChangeToTrue=this._register(new h.Q5),this.onDidChangeToTrue=this._onDidChangeToTrue.event,this._onDidChangeToFalse=this._register(new h.Q5),this.onDidChangeToFalse=this._onDidChangeToFalse.event,this._value=0}setValue(e){const t=e?2:1;this._value!==t&&(this._value=t,2===this._value?this._onDidChangeToTrue.fire():1===this._value&&this._onDidChangeToFalse.fire())}}class co extends u.JT{constructor(e,t){super(),this._editor=e,t.createKey("editorId",e.getId()),this._editorSimpleInput=nn.u.editorSimpleInput.bindTo(t),this._editorFocus=nn.u.focus.bindTo(t),this._textInputFocus=nn.u.textInputFocus.bindTo(t),this._editorTextFocus=nn.u.editorTextFocus.bindTo(t),this._editorTabMovesFocus=nn.u.tabMovesFocus.bindTo(t),this._editorReadonly=nn.u.readOnly.bindTo(t),this._inDiffEditor=nn.u.inDiffEditor.bindTo(t),this._editorColumnSelection=nn.u.columnSelection.bindTo(t),this._hasMultipleSelections=nn.u.hasMultipleSelections.bindTo(t),this._hasNonEmptySelection=nn.u.hasNonEmptySelection.bindTo(t),this._canUndo=nn.u.canUndo.bindTo(t),this._canRedo=nn.u.canRedo.bindTo(t),this._register(this._editor.onDidChangeConfiguration((()=>this._updateFromConfig()))),this._register(this._editor.onDidChangeCursorSelection((()=>this._updateFromSelection()))),this._register(this._editor.onDidFocusEditorWidget((()=>this._updateFromFocus()))),this._register(this._editor.onDidBlurEditorWidget((()=>this._updateFromFocus()))),this._register(this._editor.onDidFocusEditorText((()=>this._updateFromFocus()))),this._register(this._editor.onDidBlurEditorText((()=>this._updateFromFocus()))),this._register(this._editor.onDidChangeModel((()=>this._updateFromModel()))),this._register(this._editor.onDidChangeConfiguration((()=>this._updateFromModel()))),this._updateFromConfig(),this._updateFromSelection(),this._updateFromFocus(),this._updateFromModel(),this._editorSimpleInput.set(this._editor.isSimpleWidget)}_updateFromConfig(){const e=this._editor.getOptions();this._editorTabMovesFocus.set(e.get(128)),this._editorReadonly.set(e.get(80)),this._inDiffEditor.set(e.get(53)),this._editorColumnSelection.set(e.get(18))}_updateFromSelection(){const e=this._editor.getSelections();e?(this._hasMultipleSelections.set(e.length>1),this._hasNonEmptySelection.set(e.some((e=>!e.isEmpty())))):(this._hasMultipleSelections.reset(),this._hasNonEmptySelection.reset())}_updateFromFocus(){this._editorFocus.set(this._editor.hasWidgetFocus()&&!this._editor.isSimpleWidget),this._editorTextFocus.set(this._editor.hasTextFocus()&&!this._editor.isSimpleWidget),this._textInputFocus.set(this._editor.hasTextFocus())}_updateFromModel(){const e=this._editor.getModel();this._canUndo.set(Boolean(e&&e.canUndo())),this._canRedo.set(Boolean(e&&e.canRedo()))}}class ho extends u.JT{constructor(e,t){super(),this._editor=e,this._contextKeyService=t,this._langId=nn.u.languageId.bindTo(t),this._hasCompletionItemProvider=nn.u.hasCompletionItemProvider.bindTo(t),this._hasCodeActionsProvider=nn.u.hasCodeActionsProvider.bindTo(t),this._hasCodeLensProvider=nn.u.hasCodeLensProvider.bindTo(t),this._hasDefinitionProvider=nn.u.hasDefinitionProvider.bindTo(t),this._hasDeclarationProvider=nn.u.hasDeclarationProvider.bindTo(t),this._hasImplementationProvider=nn.u.hasImplementationProvider.bindTo(t),this._hasTypeDefinitionProvider=nn.u.hasTypeDefinitionProvider.bindTo(t),this._hasHoverProvider=nn.u.hasHoverProvider.bindTo(t),this._hasDocumentHighlightProvider=nn.u.hasDocumentHighlightProvider.bindTo(t),this._hasDocumentSymbolProvider=nn.u.hasDocumentSymbolProvider.bindTo(t),this._hasReferenceProvider=nn.u.hasReferenceProvider.bindTo(t),this._hasRenameProvider=nn.u.hasRenameProvider.bindTo(t),this._hasSignatureHelpProvider=nn.u.hasSignatureHelpProvider.bindTo(t),this._hasInlayHintsProvider=nn.u.hasInlayHintsProvider.bindTo(t),this._hasDocumentFormattingProvider=nn.u.hasDocumentFormattingProvider.bindTo(t),this._hasDocumentSelectionFormattingProvider=nn.u.hasDocumentSelectionFormattingProvider.bindTo(t),this._hasMultipleDocumentFormattingProvider=nn.u.hasMultipleDocumentFormattingProvider.bindTo(t),this._hasMultipleDocumentSelectionFormattingProvider=nn.u.hasMultipleDocumentSelectionFormattingProvider.bindTo(t),this._isInWalkThrough=nn.u.isInWalkThroughSnippet.bindTo(t);const i=()=>this._update();this._register(e.onDidChangeModel(i)),this._register(e.onDidChangeModelLanguage(i)),this._register(Et.KZ.onDidChange(i)),this._register(Et.H9.onDidChange(i)),this._register(Et.He.onDidChange(i)),this._register(Et.Ct.onDidChange(i)),this._register(Et.RN.onDidChange(i)),this._register(Et.vI.onDidChange(i)),this._register(Et.tA.onDidChange(i)),this._register(Et.xp.onDidChange(i)),this._register(Et.vH.onDidChange(i)),this._register(Et.vJ.onDidChange(i)),this._register(Et.FL.onDidChange(i)),this._register(Et.G0.onDidChange(i)),this._register(Et.Az.onDidChange(i)),this._register(Et.vN.onDidChange(i)),this._register(Et.nD.onDidChange(i)),this._register(Et.mX.onDidChange(i)),i()}dispose(){super.dispose()}reset(){this._contextKeyService.bufferChangeEvents((()=>{this._langId.reset(),this._hasCompletionItemProvider.reset(),this._hasCodeActionsProvider.reset(),this._hasCodeLensProvider.reset(),this._hasDefinitionProvider.reset(),this._hasDeclarationProvider.reset(),this._hasImplementationProvider.reset(),this._hasTypeDefinitionProvider.reset(),this._hasHoverProvider.reset(),this._hasDocumentHighlightProvider.reset(),this._hasDocumentSymbolProvider.reset(),this._hasReferenceProvider.reset(),this._hasRenameProvider.reset(),this._hasDocumentFormattingProvider.reset(),this._hasDocumentSelectionFormattingProvider.reset(),this._hasSignatureHelpProvider.reset(),this._isInWalkThrough.reset()}))}_update(){const e=this._editor.getModel();e?this._contextKeyService.bufferChangeEvents((()=>{this._langId.set(e.getLanguageId()),this._hasCompletionItemProvider.set(Et.KZ.has(e)),this._hasCodeActionsProvider.set(Et.H9.has(e)),this._hasCodeLensProvider.set(Et.He.has(e)),this._hasDefinitionProvider.set(Et.Ct.has(e)),this._hasDeclarationProvider.set(Et.RN.has(e)),this._hasImplementationProvider.set(Et.vI.has(e)),this._hasTypeDefinitionProvider.set(Et.tA.has(e)),this._hasHoverProvider.set(Et.xp.has(e)),this._hasDocumentHighlightProvider.set(Et.vH.has(e)),this._hasDocumentSymbolProvider.set(Et.vJ.has(e)),this._hasReferenceProvider.set(Et.FL.has(e)),this._hasRenameProvider.set(Et.G0.has(e)),this._hasSignatureHelpProvider.set(Et.nD.has(e)),this._hasInlayHintsProvider.set(Et.mX.has(e)),this._hasDocumentFormattingProvider.set(Et.Az.has(e)||Et.vN.has(e)),this._hasDocumentSelectionFormattingProvider.set(Et.vN.has(e)),this._hasMultipleDocumentFormattingProvider.set(Et.Az.all(e).length+Et.vN.all(e).length>1),this._hasMultipleDocumentSelectionFormattingProvider.set(Et.vN.all(e).length>1),this._isInWalkThrough.set(e.uri.scheme===g.lg.walkThroughSnippet)})):this.reset()}}class uo extends u.JT{constructor(e){super(),this._onChange=this._register(new h.Q5),this.onChange=this._onChange.event,this._hasFocus=!1,this._domFocusTracker=this._register(c.go(e)),this._register(this._domFocusTracker.onDidFocus((()=>{this._hasFocus=!0,this._onChange.fire(void 0)}))),this._register(this._domFocusTracker.onDidBlur((()=>{this._hasFocus=!1,this._onChange.fire(void 0)})))}hasFocus(){return this._hasFocus}}const go=encodeURIComponent("<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 6 3' enable-background='new 0 0 6 3' height='3' width='6'><g fill='"),po=encodeURIComponent("'><polygon points='5.5,0 2.5,3 1.1,3 4.1,0'/><polygon points='4,0 6,2 6,0.6 5.4,0'/><polygon points='0,2 1,3 2.4,3 0,0.6'/></g></svg>");function fo(e){return go+encodeURIComponent(e.toString())+po}const mo=encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" height="3" width="12"><g fill="'),vo=encodeURIComponent('"><circle cx="1" cy="1" r="1"/><circle cx="5" cy="1" r="1"/><circle cx="9" cy="1" r="1"/></g></svg>');(0,Pe.Ic)(((e,t)=>{const i=e.getColor(gt.b6);i&&t.addRule(`.monaco-editor .squiggly-error { border-bottom: 4px double ${i}; }`);const n=e.getColor(gt.lX);n&&t.addRule(`.monaco-editor .squiggly-error { background: url("data:image/svg+xml,${fo(n)}") repeat-x bottom left; }`);const o=e.getColor(gt.A2);o&&t.addRule(`.monaco-editor .squiggly-error::before { display: block; content: ''; width: 100%; height: 100%; background: ${o}; }`);const s=e.getColor(gt.pW);s&&t.addRule(`.monaco-editor .squiggly-warning { border-bottom: 4px double ${s}; }`);const r=e.getColor(gt.uo);r&&t.addRule(`.monaco-editor .squiggly-warning { background: url("data:image/svg+xml,${fo(r)}") repeat-x bottom left; }`);const a=e.getColor(gt.gp);a&&t.addRule(`.monaco-editor .squiggly-warning::before { display: block; content: ''; width: 100%; height: 100%; background: ${a}; }`);const l=e.getColor(gt.T8);l&&t.addRule(`.monaco-editor .squiggly-info { border-bottom: 4px double ${l}; }`);const c=e.getColor(gt.c6);c&&t.addRule(`.monaco-editor .squiggly-info { background: url("data:image/svg+xml,${fo(c)}") repeat-x bottom left; }`);const d=e.getColor(gt.fe);d&&t.addRule(`.monaco-editor .squiggly-info::before { display: block; content: ''; width: 100%; height: 100%; background: ${d}; }`);const h=e.getColor(gt.fE);h&&t.addRule(`.monaco-editor .squiggly-hint { border-bottom: 2px dotted ${h}; }`);const u=e.getColor(gt.Du);u&&t.addRule(`.monaco-editor .squiggly-hint { background: url("data:image/svg+xml,${function(e){return mo+encodeURIComponent(e.toString())+vo}(u)}") no-repeat bottom left; }`);const g=e.getColor(Oe.zu);g&&t.addRule(`.monaco-editor.showUnused .squiggly-inline-unnecessary { opacity: ${g.rgba.a}; }`);const p=e.getColor(Oe.kp);p&&t.addRule(`.monaco-editor.showUnused .squiggly-unnecessary { border-bottom: 2px dashed ${p}; }`);const f=e.getColor(gt.NO)||"inherit";t.addRule(`.monaco-editor.showDeprecated .squiggly-inline-deprecated { text-decoration: line-through; text-decoration-color: ${f}}`)}))},84527:(e,t,i)=>{"use strict";i.d(t,{H:()=>p});var n=i(36248),o=i(11640),s=i(32073),r=i(94565),a=i(38819),l=i(72065),c=i(59422),d=i(97781),h=i(31106),u=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},g=function(e,t){return function(i,n){t(i,n,e)}};let p=class extends s.Gm{constructor(e,t,i,n,o,s,r,a,l,c){super(e,Object.assign(Object.assign({},i.getRawOptions()),{overflowWidgetsDomNode:i.getOverflowWidgetsDomNode()}),{},n,o,s,r,a,l,c),this._parentEditor=i,this._overwriteOptions=t,super.updateOptions(this._overwriteOptions),this._register(i.onDidChangeConfiguration((e=>this._onParentConfigurationChanged(e))))}getParentEditor(){return this._parentEditor}_onParentConfigurationChanged(e){super.updateOptions(this._parentEditor.getRawOptions()),super.updateOptions(this._overwriteOptions)}updateOptions(e){n.jB(this._overwriteOptions,e,!0),super.updateOptions(this._overwriteOptions)}};p=u([g(3,l.TG),g(4,o.$),g(5,r.H),g(6,a.i6),g(7,d.XE),g(8,c.lT),g(9,h.F)],p)},61329:(e,t,i)=>{"use strict";i.d(t,{OY:()=>s,Sj:()=>r,T4:()=>o,Uo:()=>a,hP:()=>l});var n=i(3860);class o{constructor(e,t,i=!1){this._range=e,this._text=t,this.insertsAutoWhitespace=i}getEditOperations(e,t){t.addTrackedEditOperation(this._range,this._text)}computeCursorState(e,t){let i=t.getInverseEditOperations()[0].range;return new n.Y(i.endLineNumber,i.endColumn,i.endLineNumber,i.endColumn)}}class s{constructor(e,t){this._range=e,this._text=t}getEditOperations(e,t){t.addTrackedEditOperation(this._range,this._text)}computeCursorState(e,t){const i=t.getInverseEditOperations()[0].range;return new n.Y(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn)}}class r{constructor(e,t,i=!1){this._range=e,this._text=t,this.insertsAutoWhitespace=i}getEditOperations(e,t){t.addTrackedEditOperation(this._range,this._text)}computeCursorState(e,t){let i=t.getInverseEditOperations()[0].range;return new n.Y(i.startLineNumber,i.startColumn,i.startLineNumber,i.startColumn)}}class a{constructor(e,t,i,n,o=!1){this._range=e,this._text=t,this._columnDeltaOffset=n,this._lineNumberDeltaOffset=i,this.insertsAutoWhitespace=o}getEditOperations(e,t){t.addTrackedEditOperation(this._range,this._text)}computeCursorState(e,t){let i=t.getInverseEditOperations()[0].range;return new n.Y(i.endLineNumber+this._lineNumberDeltaOffset,i.endColumn+this._columnDeltaOffset,i.endLineNumber+this._lineNumberDeltaOffset,i.endColumn+this._columnDeltaOffset)}}class l{constructor(e,t,i,n=!1){this._range=e,this._text=t,this._initialSelection=i,this._forceMoveMarkers=n,this._selectionId=null}getEditOperations(e,t){t.addTrackedEditOperation(this._range,this._text,this._forceMoveMarkers),this._selectionId=t.trackSelection(this._initialSelection)}computeCursorState(e,t){return t.getTrackedSelection(this._selectionId)}}},10291:(e,t,i)=>{"use strict";i.d(t,{U:()=>d});var n=i(97295),o=i(33181),s=i(24314),r=i(3860),a=i(83831);const l=Object.create(null);function c(e,t){if(t<=0)return"";l[e]||(l[e]=["",e]);const i=l[e];for(let n=i.length;n<=t;n++)i[n]=i[n-1]+e;return i[t]}class d{constructor(e,t){this._opts=t,this._selection=e,this._selectionId=null,this._useLastEditRangeForCursorEndPosition=!1,this._selectionStartColumnStaysPut=!1}static unshiftIndent(e,t,i,n,s){const r=o.io.visibleColumnFromColumn(e,t,i);if(s){const e=c(" ",n);return c(e,o.io.prevIndentTabStop(r,n)/n)}return c("\t",o.io.prevRenderTabStop(r,i)/i)}static shiftIndent(e,t,i,n,s){const r=o.io.visibleColumnFromColumn(e,t,i);if(s){const e=c(" ",n);return c(e,o.io.nextIndentTabStop(r,n)/n)}return c("\t",o.io.nextRenderTabStop(r,i)/i)}_addEditOperation(e,t,i){this._useLastEditRangeForCursorEndPosition?e.addTrackedEditOperation(t,i):e.addEditOperation(t,i)}getEditOperations(e,t){const i=this._selection.startLineNumber;let r=this._selection.endLineNumber;1===this._selection.endColumn&&i!==r&&(r-=1);const{tabSize:l,indentSize:h,insertSpaces:u}=this._opts,g=i===r;if(this._opts.useTabStops){this._selection.isEmpty()&&/^\s*$/.test(e.getLineContent(i))&&(this._useLastEditRangeForCursorEndPosition=!0);let c=0,p=0;for(let f=i;f<=r;f++,c=p){p=0;let r,m=e.getLineContent(f),v=n.LC(m);if((!this._opts.isUnshift||0!==m.length&&0!==v)&&(g||this._opts.isUnshift||0!==m.length)){if(-1===v&&(v=m.length),f>1){if(o.io.visibleColumnFromColumn(m,v+1,l)%h!=0&&e.isCheapToTokenize(f-1)){let t=a.zu.getEnterAction(this._opts.autoIndent,e,new s.e(f-1,e.getLineMaxColumn(f-1),f-1,e.getLineMaxColumn(f-1)));if(t){if(p=c,t.appendText)for(let e=0,i=t.appendText.length;e<i&&p<h&&32===t.appendText.charCodeAt(e);e++)p++;t.removeText&&(p=Math.max(0,p-t.removeText));for(let e=0;e<p&&(0!==v&&32===m.charCodeAt(v-1));e++)v--}}}this._opts.isUnshift&&0===v||(r=this._opts.isUnshift?d.unshiftIndent(m,v+1,l,h,u):d.shiftIndent(m,v+1,l,h,u),this._addEditOperation(t,new s.e(f,1,f,v+1),r),f!==i||this._selection.isEmpty()||(this._selectionStartColumnStaysPut=this._selection.startColumn<=v+1))}}}else{!this._opts.isUnshift&&this._selection.isEmpty()&&0===e.getLineLength(i)&&(this._useLastEditRangeForCursorEndPosition=!0);const o=u?c(" ",h):"\t";for(let a=i;a<=r;a++){const r=e.getLineContent(a);let l=n.LC(r);if((!this._opts.isUnshift||0!==r.length&&0!==l)&&((g||this._opts.isUnshift||0!==r.length)&&(-1===l&&(l=r.length),!this._opts.isUnshift||0!==l)))if(this._opts.isUnshift){l=Math.min(l,h);for(let e=0;e<l;e++){if(9===r.charCodeAt(e)){l=e+1;break}}this._addEditOperation(t,new s.e(a,1,a,l+1),"")}else this._addEditOperation(t,new s.e(a,1,a,1),o),a!==i||this._selection.isEmpty()||(this._selectionStartColumnStaysPut=1===this._selection.startColumn)}}this._selectionId=t.trackSelection(this._selection)}computeCursorState(e,t){if(this._useLastEditRangeForCursorEndPosition){let e=t.getInverseEditOperations()[0];return new r.Y(e.range.endLineNumber,e.range.endColumn,e.range.endLineNumber,e.range.endColumn)}const i=t.getTrackedSelection(this._selectionId);if(this._selectionStartColumnStaysPut){let e=this._selection.startColumn;return i.startColumn<=e?i:0===i.getDirection()?new r.Y(i.startLineNumber,e,i.endLineNumber,i.endColumn):new r.Y(i.endLineNumber,i.endColumn,i.startLineNumber,e)}return i}}},56345:(e,t,i)=>{"use strict";i.d(t,{Pe:()=>D,ei:()=>N,fv:()=>w,nG:()=>p});var n=i(63580),o=i(4669),s=i(5976),r=i(36248),a=i(9488),l=i(64141),c=i(82334),d=i(27374),h=i(23193),u=i(89872),g=i(6626);const p=new class{constructor(){this._tabFocus=!1,this._onDidChangeTabFocus=new o.Q5,this.onDidChangeTabFocus=this._onDidChangeTabFocus.event}getTabFocusMode(){return this._tabFocus}setTabFocusMode(e){this._tabFocus!==e&&(this._tabFocus=e,this._onDidChangeTabFocus.fire(this._tabFocus))}},f=Object.hasOwnProperty;class m{constructor(){this._values=[]}_read(e){return this._values[e]}get(e){return this._values[e]}_write(e,t){this._values[e]=t}}class v{constructor(){this._values=[]}_read(e){return this._values[e]}_write(e,t){this._values[e]=t}}class _{static readOptions(e){const t=e,i=new v;for(const e of l.Bc){const n="_never_"===e.name?void 0:t[e.name];i._write(e.id,n)}return i}static validateOptions(e){const t=new l.hu;for(const i of l.Bc)t._write(i.id,i.validate(e._read(i.id)));return t}static computeOptions(e,t){const i=new m;for(const n of l.Bc)i._write(n.id,n.compute(t,i,e._read(n.id)));return i}static _deepEquals(e,t){if("object"!=typeof e||"object"!=typeof t)return e===t;if(Array.isArray(e)||Array.isArray(t))return!(!Array.isArray(e)||!Array.isArray(t))&&a.fS(e,t);for(let i in e)if(!_._deepEquals(e[i],t[i]))return!1;return!0}static checkEquals(e,t){const i=[];let n=!1;for(const o of l.Bc){const s=!_._deepEquals(e._read(o.id),t._read(o.id));i[o.id]=s,s&&(n=!0)}return n?new l.Bb(i):null}}function b(e){const t=r.I8(e);return function(e){const t=e.wordWrap;!0===t?e.wordWrap="on":!1===t&&(e.wordWrap="off");const i=e.lineNumbers;!0===i?e.lineNumbers="on":!1===i&&(e.lineNumbers="off"),!1===e.autoClosingBrackets&&(e.autoClosingBrackets="never",e.autoClosingQuotes="never",e.autoSurround="never"),"visible"===e.cursorBlinking&&(e.cursorBlinking="solid");const n=e.renderWhitespace;!0===n?e.renderWhitespace="boundary":!1===n&&(e.renderWhitespace="none");const o=e.renderLineHighlight;!0===o?e.renderLineHighlight="line":!1===o&&(e.renderLineHighlight="none");const s=e.acceptSuggestionOnEnter;!0===s?e.acceptSuggestionOnEnter="on":!1===s&&(e.acceptSuggestionOnEnter="off");const r=e.tabCompletion;!1===r?e.tabCompletion="off":!0===r&&(e.tabCompletion="onlySnippets");const a=e.suggest;if(a&&"object"==typeof a.filteredTypes&&a.filteredTypes){const e={method:"showMethods",function:"showFunctions",constructor:"showConstructors",deprecated:"showDeprecated",field:"showFields",variable:"showVariables",class:"showClasses",struct:"showStructs",interface:"showInterfaces",module:"showModules",property:"showProperties",event:"showEvents",operator:"showOperators",unit:"showUnits",value:"showValues",constant:"showConstants",enum:"showEnums",enumMember:"showEnumMembers",keyword:"showKeywords",text:"showWords",color:"showColors",file:"showFiles",reference:"showReferences",folder:"showFolders",typeParameter:"showTypeParameters",snippet:"showSnippets"};(0,g.E)(e,(e=>{const t=a.filteredTypes[e.key];!1===t&&(a[e.value]=t)}))}const l=e.hover;!0===l?e.hover={enabled:!0}:!1===l&&(e.hover={enabled:!1});const c=e.parameterHints;!0===c?e.parameterHints={enabled:!0}:!1===c&&(e.parameterHints={enabled:!1});const d=e.autoIndent;!0===d?e.autoIndent="full":!1===d&&(e.autoIndent="advanced");const h=e.matchBrackets;!0===h?e.matchBrackets="always":!1===h&&(e.matchBrackets="never");const{renderIndentGuides:u,highlightActiveIndentGuide:p}=e;e.guides||(e.guides={}),void 0!==u&&(e.guides.indentation=!!u),void 0!==p&&(e.guides.highlightActiveIndentation=!!p)}(t),t}class w extends s.JT{constructor(e,t){super(),this._onDidChange=this._register(new o.Q5),this.onDidChange=this._onDidChange.event,this._onDidChangeFast=this._register(new o.Q5),this.onDidChangeFast=this._onDidChangeFast.event,this.isSimpleWidget=e,this._isDominatedByLongLines=!1,this._computeOptionsMemory=new l.LJ,this._viewLineCount=1,this._lineNumbersDigitCount=1,this._rawOptions=b(t),this._readOptions=_.readOptions(this._rawOptions),this._validatedOptions=_.validateOptions(this._readOptions),this._register(c.C.onDidChangeZoomLevel((e=>this._recomputeOptions()))),this._register(p.onDidChangeTabFocus((e=>this._recomputeOptions())))}observeReferenceElement(e){}updatePixelRatio(){}_recomputeOptions(){const e=this.options,t=this._computeInternalOptions();if(e){const i=_.checkEquals(e,t);if(null===i)return;this.options=t,this._onDidChangeFast.fire(i),this._onDidChange.fire(i)}else this.options=t}getRawOptions(){return this._rawOptions}_computeInternalOptions(){const e=this._getEnvConfiguration(),t=d.E4.createFromValidatedSettings(this._validatedOptions,e.zoomLevel,e.pixelRatio,this.isSimpleWidget),i={memory:this._computeOptionsMemory,outerWidth:e.outerWidth,outerHeight:e.outerHeight,fontInfo:this.readConfiguration(t),extraEditorClassName:e.extraEditorClassName,isDominatedByLongLines:this._isDominatedByLongLines,viewLineCount:this._viewLineCount,lineNumbersDigitCount:this._lineNumbersDigitCount,emptySelectionClipboard:e.emptySelectionClipboard,pixelRatio:e.pixelRatio,tabFocusMode:p.getTabFocusMode(),accessibilitySupport:e.accessibilitySupport};return _.computeOptions(this._validatedOptions,i)}static _subsetEquals(e,t){for(const i in t)if(f.call(t,i)){const n=t[i],o=e[i];if(o===n)continue;if(Array.isArray(o)&&Array.isArray(n)){if(!a.fS(o,n))return!1;continue}if(o&&"object"==typeof o&&n&&"object"==typeof n){if(!this._subsetEquals(o,n))return!1;continue}return!1}return!0}updateOptions(e){if(void 0===e)return;const t=b(e);w._subsetEquals(this._rawOptions,t)||(this._rawOptions=r.jB(this._rawOptions,t||{}),this._readOptions=_.readOptions(this._rawOptions),this._validatedOptions=_.validateOptions(this._readOptions),this._recomputeOptions())}setIsDominatedByLongLines(e){this._isDominatedByLongLines=e,this._recomputeOptions()}setMaxLineNumber(e){const t=w._digitCount(e);this._lineNumbersDigitCount!==t&&(this._lineNumbersDigitCount=t,this._recomputeOptions())}setViewLineCount(e){this._viewLineCount!==e&&(this._viewLineCount=e,this._recomputeOptions())}static _digitCount(e){let t=0;for(;e;)e=Math.floor(e/10),t++;return t||1}}const y=Object.freeze({id:"editor",order:5,type:"object",title:n.N("editorConfigurationTitle","Editor"),scope:5}),C=u.B.as(h.IP.Configuration),x=Object.assign(Object.assign({},y),{properties:{"editor.tabSize":{type:"number",default:l.DB.tabSize,minimum:1,markdownDescription:n.N("tabSize","The number of spaces a tab is equal to. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.")},"editor.insertSpaces":{type:"boolean",default:l.DB.insertSpaces,markdownDescription:n.N("insertSpaces","Insert spaces when pressing `Tab`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.")},"editor.detectIndentation":{type:"boolean",default:l.DB.detectIndentation,markdownDescription:n.N("detectIndentation","Controls whether `#editor.tabSize#` and `#editor.insertSpaces#` will be automatically detected when a file is opened based on the file contents.")},"editor.trimAutoWhitespace":{type:"boolean",default:l.DB.trimAutoWhitespace,description:n.N("trimAutoWhitespace","Remove trailing auto inserted whitespace.")},"editor.largeFileOptimizations":{type:"boolean",default:l.DB.largeFileOptimizations,description:n.N("largeFileOptimizations","Special handling for large files to disable certain memory intensive features.")},"editor.wordBasedSuggestions":{type:"boolean",default:!0,description:n.N("wordBasedSuggestions","Controls whether completions should be computed based on words in the document.")},"editor.wordBasedSuggestionsMode":{enum:["currentDocument","matchingDocuments","allDocuments"],default:"matchingDocuments",enumDescriptions:[n.N("wordBasedSuggestionsMode.currentDocument","Only suggest words from the active document."),n.N("wordBasedSuggestionsMode.matchingDocuments","Suggest words from all open documents of the same language."),n.N("wordBasedSuggestionsMode.allDocuments","Suggest words from all open documents.")],description:n.N("wordBasedSuggestionsMode","Controls from which documents word based completions are computed.")},"editor.semanticHighlighting.enabled":{enum:[!0,!1,"configuredByTheme"],enumDescriptions:[n.N("semanticHighlighting.true","Semantic highlighting enabled for all color themes."),n.N("semanticHighlighting.false","Semantic highlighting disabled for all color themes."),n.N("semanticHighlighting.configuredByTheme","Semantic highlighting is configured by the current color theme's `semanticHighlighting` setting.")],default:"configuredByTheme",description:n.N("semanticHighlighting.enabled","Controls whether the semanticHighlighting is shown for the languages that support it.")},"editor.stablePeek":{type:"boolean",default:!1,markdownDescription:n.N("stablePeek","Keep peek editors open even when double clicking their content or when hitting `Escape`.")},"editor.maxTokenizationLineLength":{type:"integer",default:2e4,description:n.N("maxTokenizationLineLength","Lines above this length will not be tokenized for performance reasons")},"editor.language.brackets":{type:"array",default:!1,description:n.N("schema.brackets","Defines the bracket symbols that increase or decrease the indentation."),items:{type:"array",items:[{type:"string",description:n.N("schema.openBracket","The opening bracket character or string sequence.")},{type:"string",description:n.N("schema.closeBracket","The closing bracket character or string sequence.")}]}},"editor.language.colorizedBracketPairs":{type:"array",default:!1,description:n.N("schema.colorizedBracketPairs","Defines the bracket pairs that are colorized by their nesting level if bracket pair colorization is enabled."),items:{type:"array",items:[{type:"string",description:n.N("schema.openBracket","The opening bracket character or string sequence.")},{type:"string",description:n.N("schema.closeBracket","The closing bracket character or string sequence.")}]}},"diffEditor.maxComputationTime":{type:"number",default:5e3,description:n.N("maxComputationTime","ä»¥æ¯«ç§’ä¸ºå•ä½çš„è¶…æ—¶ï¼Œä¹‹åŽå·®å¼‚è®¡ç®—è¢«å–æ¶ˆã€‚ ä½¿ç”¨ 0 è¡¨ç¤ºæ²¡æœ‰è¶…æ—¶")},"diffEditor.maxFileSize":{type:"number",default:50,description:n.N("maxFileSize","è®¡ç®—å·®å¼‚çš„æœ€å¤§æ–‡ä»¶å¤§å°ï¼ˆä»¥ MB ä¸ºå•ä½ï¼‰ã€‚ ä½¿ç”¨ 0 è¡¨ç¤ºæ²¡æœ‰é™åˆ¶")},"diffEditor.renderSideBySide":{type:"boolean",default:!0,description:n.N("sideBySide","æŽ§åˆ¶ diff ç¼–è¾‘å™¨æ˜¯å¹¶æŽ’è¿˜æ˜¯å†…è”æ˜¾ç¤º diff")},"diffEditor.ignoreTrimWhitespace":{type:"boolean",default:!0,description:n.N("ignoreTrimWhitespace","When enabled, the diff editor ignores changes in leading or trailing whitespace.")},"diffEditor.renderIndicators":{type:"boolean",default:!0,description:n.N("renderIndicators","Controls whether the diff editor shows +/- indicators for added/removed changes.")},"diffEditor.codeLens":{type:"boolean",default:!1,description:n.N("codeLens","Controls whether the editor shows CodeLens.")},"diffEditor.wordWrap":{type:"string",enum:["off","on","inherit"],default:"inherit",markdownEnumDescriptions:[n.N("wordWrap.off","Lines will never wrap."),n.N("wordWrap.on","Lines will wrap at the viewport width."),n.N("wordWrap.inherit","Lines will wrap according to the `#editor.wordWrap#` setting.")]}}});for(const e of l.Bc){const t=e.schema;if(void 0!==t)if(void 0!==(S=t).type||void 0!==S.anyOf)x.properties[`editor.${e.name}`]=t;else for(let e in t)f.call(t,e)&&(x.properties[e]=t[e])}var S;let k=null;function L(){return null===k&&(k=Object.create(null),Object.keys(x.properties).forEach((e=>{k[e]=!0}))),k}function N(e){return L()[`editor.${e}`]||!1}function D(e){return L()[`diffEditor.${e}`]||!1}C.registerConfiguration(x)},64141:(e,t,i)=>{"use strict";i.d(t,{$J:()=>L,BH:()=>A,Bb:()=>a,Bc:()=>T,DB:()=>E,LJ:()=>c,NY:()=>b,O7:()=>g,Zc:()=>f,d2:()=>C,gk:()=>k,hL:()=>I,hu:()=>l,n0:()=>x,y0:()=>r});var n=i(63580),o=i(1432),s=i(97461);const r=8;class a{constructor(e){this._values=e}hasChanged(e){return this._values[e]}}class l{constructor(){this._values=[]}_read(e){return this._values[e]}get(e){return this._values[e]}_write(e,t){this._values[e]=t}}class c{constructor(){this.stableMinimapLayoutInput=null,this.stableFitMaxMinimapScale=0,this.stableFitRemainingWidth=0}}class d{constructor(e,t,i,n){this.id=e,this.name=t,this.defaultValue=i,this.schema=n}compute(e,t,i){return i}}class h{constructor(e,t=null){this.schema=void 0,this.id=e,this.name="_never_",this.defaultValue=void 0,this.deps=t}validate(e){return this.defaultValue}}class u{constructor(e,t,i,n){this.id=e,this.name=t,this.defaultValue=i,this.schema=n}validate(e){return void 0===e?this.defaultValue:e}compute(e,t,i){return i}}function g(e,t){return void 0===e?t:"false"!==e&&Boolean(e)}class p extends u{constructor(e,t,i,n=void 0){void 0!==n&&(n.type="boolean",n.default=i),super(e,t,i,n)}validate(e){return g(e,this.defaultValue)}}function f(e,t,i,n){if(void 0===e)return t;let o=parseInt(e,10);return isNaN(o)?t:(o=Math.max(i,o),o=Math.min(n,o),0|o)}class m extends u{constructor(e,t,i,n,o,s=void 0){void 0!==s&&(s.type="integer",s.default=i,s.minimum=n,s.maximum=o),super(e,t,i,s),this.minimum=n,this.maximum=o}static clampedInt(e,t,i,n){return f(e,t,i,n)}validate(e){return m.clampedInt(e,this.defaultValue,this.minimum,this.maximum)}}class v extends u{constructor(e,t,i,n,o){void 0!==o&&(o.type="number",o.default=i),super(e,t,i,o),this.validationFn=n}static clamp(e,t,i){return e<t?t:e>i?i:e}static float(e,t){if("number"==typeof e)return e;if(void 0===e)return t;const i=parseFloat(e);return isNaN(i)?t:i}validate(e){return this.validationFn(v.float(e,this.defaultValue))}}class _ extends u{static string(e,t){return"string"!=typeof e?t:e}constructor(e,t,i,n=void 0){void 0!==n&&(n.type="string",n.default=i),super(e,t,i,n)}validate(e){return _.string(e,this.defaultValue)}}function b(e,t,i){return"string"!=typeof e||-1===i.indexOf(e)?t:e}class w extends u{constructor(e,t,i,n,o=void 0){void 0!==o&&(o.type="string",o.enum=n,o.default=i),super(e,t,i,o),this._allowedValues=n}validate(e){return b(e,this.defaultValue,this._allowedValues)}}class y extends d{constructor(e,t,i,n,o,s,r=void 0){void 0!==r&&(r.type="string",r.enum=o,r.default=n),super(e,t,i,r),this._allowedValues=o,this._convert=s}validate(e){return"string"!=typeof e||-1===this._allowedValues.indexOf(e)?this.defaultValue:this._convert(e)}}var C;!function(e){e[e.Line=1]="Line",e[e.Block=2]="Block",e[e.Underline=3]="Underline",e[e.LineThin=4]="LineThin",e[e.BlockOutline=5]="BlockOutline",e[e.UnderlineThin=6]="UnderlineThin"}(C||(C={}));class x extends d{constructor(){super(44,"fontLigatures",x.OFF,{anyOf:[{type:"boolean",description:n.N("fontLigatures","Enables/Disables font ligatures ('calt' and 'liga' font features). Change this to a string for fine-grained control of the 'font-feature-settings' CSS property.")},{type:"string",description:n.N("fontFeatureSettings","Explicit 'font-feature-settings' CSS property. A boolean can be passed instead if one only needs to turn on/off ligatures.")}],description:n.N("fontLigaturesGeneral","Configures font ligatures or font features. Can be either a boolean to enable/disable ligatures or a string for the value of the CSS 'font-feature-settings' property."),default:!1})}validate(e){return void 0===e?this.defaultValue:"string"==typeof e?"false"===e?x.OFF:"true"===e?x.ON:e:Boolean(e)?x.ON:x.OFF}}x.OFF='"liga" off, "calt" off',x.ON='"liga" on, "calt" on';class S extends d{constructor(){super(46,"fontWeight",I.fontWeight,{anyOf:[{type:"number",minimum:S.MINIMUM_VALUE,maximum:S.MAXIMUM_VALUE,errorMessage:n.N("fontWeightErrorMessage",'Only "normal" and "bold" keywords or numbers between 1 and 1000 are allowed.')},{type:"string",pattern:"^(normal|bold|1000|[1-9][0-9]{0,2})$"},{enum:S.SUGGESTION_VALUES}],default:I.fontWeight,description:n.N("fontWeight",'Controls the font weight. Accepts "normal" and "bold" keywords or numbers between 1 and 1000.')})}validate(e){return"normal"===e||"bold"===e?e:String(m.clampedInt(e,I.fontWeight,S.MINIMUM_VALUE,S.MAXIMUM_VALUE))}}S.SUGGESTION_VALUES=["normal","bold","100","200","300","400","500","600","700","800","900"],S.MINIMUM_VALUE=1,S.MAXIMUM_VALUE=1e3;class k extends h{constructor(){super(129,[49,57,37,64,91,59,60,93,116,119,120,121,2])}compute(e,t,i){return k.computeLayout(t,{memory:e.memory,outerWidth:e.outerWidth,outerHeight:e.outerHeight,isDominatedByLongLines:e.isDominatedByLongLines,lineHeight:e.fontInfo.lineHeight,viewLineCount:e.viewLineCount,lineNumbersDigitCount:e.lineNumbersDigitCount,typicalHalfwidthCharacterWidth:e.fontInfo.typicalHalfwidthCharacterWidth,maxDigitWidth:e.fontInfo.maxDigitWidth,pixelRatio:e.pixelRatio})}static computeContainedMinimapLineCount(e){const t=e.height/e.lineHeight,i=e.scrollBeyondLastLine?t-1:0,n=(e.viewLineCount+i)/(e.pixelRatio*e.height);return{typicalViewportLineCount:t,extraLinesBeyondLastLine:i,desiredRatio:n,minimapLineCount:Math.floor(e.viewLineCount/n)}}static _computeMinimapLayout(e,t){const i=e.outerWidth,n=e.outerHeight,o=e.pixelRatio;if(!e.minimap.enabled)return{renderMinimap:0,minimapLeft:0,minimapWidth:0,minimapHeightIsEditorHeight:!1,minimapIsSampling:!1,minimapScale:1,minimapLineHeight:1,minimapCanvasInnerWidth:0,minimapCanvasInnerHeight:Math.floor(o*n),minimapCanvasOuterWidth:0,minimapCanvasOuterHeight:n};const s=t.stableMinimapLayoutInput,a=s&&e.outerHeight===s.outerHeight&&e.lineHeight===s.lineHeight&&e.typicalHalfwidthCharacterWidth===s.typicalHalfwidthCharacterWidth&&e.pixelRatio===s.pixelRatio&&e.scrollBeyondLastLine===s.scrollBeyondLastLine&&e.minimap.enabled===s.minimap.enabled&&e.minimap.side===s.minimap.side&&e.minimap.size===s.minimap.size&&e.minimap.showSlider===s.minimap.showSlider&&e.minimap.renderCharacters===s.minimap.renderCharacters&&e.minimap.maxColumn===s.minimap.maxColumn&&e.minimap.scale===s.minimap.scale&&e.verticalScrollbarWidth===s.verticalScrollbarWidth&&e.isViewportWrapping===s.isViewportWrapping,l=e.lineHeight,c=e.typicalHalfwidthCharacterWidth,d=e.scrollBeyondLastLine,h=e.minimap.renderCharacters;let u=o>=2?Math.round(2*e.minimap.scale):e.minimap.scale;const g=e.minimap.maxColumn,p=e.minimap.size,f=e.minimap.side,m=e.verticalScrollbarWidth,v=e.viewLineCount,_=e.remainingWidth,b=e.isViewportWrapping,w=h?2:3;let y=Math.floor(o*n);const C=y/o;let x=!1,S=!1,L=w*u,N=u/o,D=1;if("fill"===p||"fit"===p){const{typicalViewportLineCount:i,extraLinesBeyondLastLine:s,desiredRatio:r,minimapLineCount:c}=k.computeContainedMinimapLineCount({viewLineCount:v,scrollBeyondLastLine:d,height:n,lineHeight:l,pixelRatio:o});if(v/c>1)x=!0,S=!0,u=1,L=1,N=u/o;else{let n=!1,c=u+1;if("fit"===p){const e=Math.ceil((v+s)*L);b&&a&&_<=t.stableFitRemainingWidth?(n=!0,c=t.stableFitMaxMinimapScale):n=e>y}if("fill"===p||n){x=!0;const n=u;L=Math.min(l*o,Math.max(1,Math.floor(1/r))),b&&a&&_<=t.stableFitRemainingWidth&&(c=t.stableFitMaxMinimapScale),u=Math.min(c,Math.max(1,Math.floor(L/w))),u>n&&(D=Math.min(2,u/n)),N=u/o/D,y=Math.ceil(Math.max(i,v+s)*L),b?(t.stableMinimapLayoutInput=e,t.stableFitRemainingWidth=_,t.stableFitMaxMinimapScale=u):(t.stableMinimapLayoutInput=null,t.stableFitRemainingWidth=0)}}}const I=Math.floor(g*N),E=Math.min(I,Math.max(0,Math.floor((_-m-2)*N/(c+N)))+r);let T=Math.floor(o*E);const M=T/o;T=Math.floor(T*D);return{renderMinimap:h?1:2,minimapLeft:"left"===f?0:i-E-m,minimapWidth:E,minimapHeightIsEditorHeight:x,minimapIsSampling:S,minimapScale:u,minimapLineHeight:L,minimapCanvasInnerWidth:T,minimapCanvasInnerHeight:y,minimapCanvasOuterWidth:M,minimapCanvasOuterHeight:C}}static computeLayout(e,t){const i=0|t.outerWidth,n=0|t.outerHeight,o=0|t.lineHeight,s=0|t.lineNumbersDigitCount,r=t.typicalHalfwidthCharacterWidth,a=t.maxDigitWidth,l=t.pixelRatio,d=t.viewLineCount,h=e.get(121),u="inherit"===h?e.get(120):h,g="inherit"===u?e.get(116):u,p=e.get(119),f=e.get(2),v=t.isDominatedByLongLines,_=e.get(49),b=0!==e.get(59).renderType,w=e.get(60),y=e.get(93),C=e.get(64),x=e.get(91),S=x.verticalScrollbarSize,L=x.verticalHasArrows,N=x.arrowSize,D=x.horizontalScrollbarSize,I=e.get(57),E=e.get(37);let T;if("string"==typeof I&&/^\d+(\.\d+)?ch$/.test(I)){const e=parseFloat(I.substr(0,I.length-2));T=m.clampedInt(e*r,0,0,1e3)}else T=m.clampedInt(I,0,0,1e3);E&&(T+=16);let M=0;if(b){const e=Math.max(s,w);M=Math.round(e*a)}let A=0;_&&(A=o);let O=0,P=O+A,R=P+M,F=R+T;const B=i-A-M-T;let V=!1,W=!1,H=-1;2!==f&&("inherit"===u&&v?(V=!0,W=!0):"on"===g||"bounded"===g?W=!0:"wordWrapColumn"===g&&(H=p));const z=k._computeMinimapLayout({outerWidth:i,outerHeight:n,lineHeight:o,typicalHalfwidthCharacterWidth:r,pixelRatio:l,scrollBeyondLastLine:y,minimap:C,verticalScrollbarWidth:S,viewLineCount:d,remainingWidth:B,isViewportWrapping:W},t.memory||new c);0!==z.renderMinimap&&0===z.minimapLeft&&(O+=z.minimapWidth,P+=z.minimapWidth,R+=z.minimapWidth,F+=z.minimapWidth);const j=B-z.minimapWidth,U=Math.max(1,Math.floor((j-S-2)/r)),$=L?N:0;return W&&(H=Math.max(1,U),"bounded"===g&&(H=Math.min(H,p))),{width:i,height:n,glyphMarginLeft:O,glyphMarginWidth:A,lineNumbersLeft:P,lineNumbersWidth:M,decorationsLeft:R,decorationsWidth:T,contentLeft:F,contentWidth:j,minimap:z,viewportColumn:U,isWordWrapMinified:V,isViewportWrapping:W,wrappingColumn:H,verticalScrollbarWidth:S,horizontalScrollbarHeight:D,overviewRuler:{top:$,width:S,height:n-2*$,right:0}}}}function L(e){const t=e.get(86);return"editable"===t?e.get(80):"on"!==t}function N(e,t){if("string"!=typeof e)return t;switch(e){case"hidden":return 2;case"visible":return 3;default:return 1}}function D(e,t,i){const n=i.indexOf(e);return-1===n?t:i[n]}const I={fontFamily:o.dz?"Menlo, Monaco, 'Courier New', monospace":o.IJ?"'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback'":"Consolas, 'Courier New', monospace",fontWeight:"normal",fontSize:o.dz?12:14,lineHeight:0,letterSpacing:0},E={tabSize:4,indentSize:4,insertSpaces:!0,detectIndentation:!0,trimAutoWhitespace:!0,largeFileOptimizations:!0,bracketPairColorizationOptions:{enabled:!1}},T=[];function M(e){return T[e.id]=e,e}const A={acceptSuggestionOnCommitCharacter:M(new p(0,"acceptSuggestionOnCommitCharacter",!0,{markdownDescription:n.N("acceptSuggestionOnCommitCharacter","Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character.")})),acceptSuggestionOnEnter:M(new w(1,"acceptSuggestionOnEnter","on",["on","smart","off"],{markdownEnumDescriptions:["",n.N("acceptSuggestionOnEnterSmart","Only accept a suggestion with `Enter` when it makes a textual change."),""],markdownDescription:n.N("acceptSuggestionOnEnter","Controls whether suggestions should be accepted on `Enter`, in addition to `Tab`. Helps to avoid ambiguity between inserting new lines or accepting suggestions.")})),accessibilitySupport:M(new class extends d{constructor(){super(2,"accessibilitySupport",0,{type:"string",enum:["auto","on","off"],enumDescriptions:[n.N("accessibilitySupport.auto","The editor will use platform APIs to detect when a Screen Reader is attached."),n.N("accessibilitySupport.on","The editor will be permanently optimized for usage with a Screen Reader. Word wrapping will be disabled."),n.N("accessibilitySupport.off","The editor will never be optimized for usage with a Screen Reader.")],default:"auto",description:n.N("accessibilitySupport","Controls whether the editor should run in a mode where it is optimized for screen readers. Setting to on will disable word wrapping.")})}validate(e){switch(e){case"auto":return 0;case"off":return 1;case"on":return 2}return this.defaultValue}compute(e,t,i){return 0===i?e.accessibilitySupport:i}}),accessibilityPageSize:M(new m(3,"accessibilityPageSize",10,1,1073741824,{description:n.N("accessibilityPageSize","Controls the number of lines in the editor that can be read out by a screen reader at once. When we detect a screen reader we automatically set the default to be 500. Warning: this has a performance implication for numbers larger than the default.")})),ariaLabel:M(new _(4,"ariaLabel",n.N("editorViewAccessibleLabel","Editor content"))),autoClosingBrackets:M(new w(5,"autoClosingBrackets","languageDefined",["always","languageDefined","beforeWhitespace","never"],{enumDescriptions:["",n.N("editor.autoClosingBrackets.languageDefined","Use language configurations to determine when to autoclose brackets."),n.N("editor.autoClosingBrackets.beforeWhitespace","Autoclose brackets only when the cursor is to the left of whitespace."),""],description:n.N("autoClosingBrackets","Controls whether the editor should automatically close brackets after the user adds an opening bracket.")})),autoClosingDelete:M(new w(6,"autoClosingDelete","auto",["always","auto","never"],{enumDescriptions:["",n.N("editor.autoClosingDelete.auto","Remove adjacent closing quotes or brackets only if they were automatically inserted."),""],description:n.N("autoClosingDelete","Controls whether the editor should remove adjacent closing quotes or brackets when deleting.")})),autoClosingOvertype:M(new w(7,"autoClosingOvertype","auto",["always","auto","never"],{enumDescriptions:["",n.N("editor.autoClosingOvertype.auto","Type over closing quotes or brackets only if they were automatically inserted."),""],description:n.N("autoClosingOvertype","Controls whether the editor should type over closing quotes or brackets.")})),autoClosingQuotes:M(new w(8,"autoClosingQuotes","languageDefined",["always","languageDefined","beforeWhitespace","never"],{enumDescriptions:["",n.N("editor.autoClosingQuotes.languageDefined","Use language configurations to determine when to autoclose quotes."),n.N("editor.autoClosingQuotes.beforeWhitespace","Autoclose quotes only when the cursor is to the left of whitespace."),""],description:n.N("autoClosingQuotes","Controls whether the editor should automatically close quotes after the user adds an opening quote.")})),autoIndent:M(new y(9,"autoIndent",4,"full",["none","keep","brackets","advanced","full"],(function(e){switch(e){case"none":return 0;case"keep":return 1;case"brackets":return 2;case"advanced":return 3;case"full":return 4}}),{enumDescriptions:[n.N("editor.autoIndent.none","The editor will not insert indentation automatically."),n.N("editor.autoIndent.keep","The editor will keep the current line's indentation."),n.N("editor.autoIndent.brackets","The editor will keep the current line's indentation and honor language defined brackets."),n.N("editor.autoIndent.advanced","The editor will keep the current line's indentation, honor language defined brackets and invoke special onEnterRules defined by languages."),n.N("editor.autoIndent.full","The editor will keep the current line's indentation, honor language defined brackets, invoke special onEnterRules defined by languages, and honor indentationRules defined by languages.")],description:n.N("autoIndent","Controls whether the editor should automatically adjust the indentation when users type, paste, move or indent lines.")})),automaticLayout:M(new p(10,"automaticLayout",!1)),autoSurround:M(new w(11,"autoSurround","languageDefined",["languageDefined","quotes","brackets","never"],{enumDescriptions:[n.N("editor.autoSurround.languageDefined","Use language configurations to determine when to automatically surround selections."),n.N("editor.autoSurround.quotes","Surround with quotes but not brackets."),n.N("editor.autoSurround.brackets","Surround with brackets but not quotes."),""],description:n.N("autoSurround","Controls whether the editor should automatically surround selections when typing quotes or brackets.")})),bracketPairColorization:M(new class extends d{constructor(){const e={enabled:E.bracketPairColorizationOptions.enabled};super(12,"bracketPairColorization",e,{"editor.bracketPairColorization.enabled":{type:"boolean",default:e.enabled,description:n.N("bracketPairColorization.enabled","Controls whether bracket pair colorization is enabled or not. Use 'workbench.colorCustomizations' to override the bracket highlight colors.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;return{enabled:g(e.enabled,this.defaultValue.enabled)}}}),bracketPairGuides:M(new class extends d{constructor(){const e={bracketPairs:!1,bracketPairsHorizontal:"active",highlightActiveBracketPair:!0,indentation:!0,highlightActiveIndentation:!0};super(13,"guides",e,{"editor.guides.bracketPairs":{type:["boolean","string"],enum:[!0,"active",!1],enumDescriptions:[n.N("editor.guides.bracketPairs.true","Enables bracket pair guides."),n.N("editor.guides.bracketPairs.active","Enables bracket pair guides only for the active bracket pair."),n.N("editor.guides.bracketPairs.false","Disables bracket pair guides.")],default:e.bracketPairs,description:n.N("editor.guides.bracketPairs","Controls whether bracket pair guides are enabled or not.")},"editor.guides.bracketPairsHorizontal":{type:["boolean","string"],enum:[!0,"active",!1],enumDescriptions:[n.N("editor.guides.bracketPairsHorizontal.true","Enables horizontal guides as addition to vertical bracket pair guides."),n.N("editor.guides.bracketPairsHorizontal.active","Enables horizontal guides only for the active bracket pair."),n.N("editor.guides.bracketPairsHorizontal.false","Disables horizontal bracket pair guides.")],default:e.bracketPairsHorizontal,description:n.N("editor.guides.bracketPairsHorizontal","Controls whether horizontal bracket pair guides are enabled or not.")},"editor.guides.highlightActiveBracketPair":{type:"boolean",default:e.highlightActiveBracketPair,description:n.N("editor.guides.highlightActiveBracketPair","Controls whether bracket pair guides are enabled or not.")},"editor.guides.indentation":{type:"boolean",default:e.indentation,description:n.N("editor.guides.indentation","Controls whether the editor should render indent guides.")},"editor.guides.highlightActiveIndentation":{type:"boolean",default:e.highlightActiveIndentation,description:n.N("editor.guides.highlightActiveIndentation","Controls whether the editor should highlight the active indent guide.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{bracketPairs:D(t.bracketPairs,this.defaultValue.bracketPairs,[!0,!1,"active"]),bracketPairsHorizontal:D(t.bracketPairsHorizontal,this.defaultValue.bracketPairsHorizontal,[!0,!1,"active"]),highlightActiveBracketPair:g(t.highlightActiveBracketPair,this.defaultValue.highlightActiveBracketPair),indentation:g(t.indentation,this.defaultValue.indentation),highlightActiveIndentation:g(t.highlightActiveIndentation,this.defaultValue.highlightActiveIndentation)}}}),stickyTabStops:M(new p(103,"stickyTabStops",!1,{description:n.N("stickyTabStops","Emulate selection behavior of tab characters when using spaces for indentation. Selection will stick to tab stops.")})),codeLens:M(new p(14,"codeLens",!0,{description:n.N("codeLens","Controls whether the editor shows CodeLens.")})),codeLensFontFamily:M(new _(15,"codeLensFontFamily","",{description:n.N("codeLensFontFamily","Controls the font family for CodeLens.")})),codeLensFontSize:M(new m(16,"codeLensFontSize",0,0,100,{type:"number",default:0,minimum:0,maximum:100,markdownDescription:n.N("codeLensFontSize","Controls the font size in pixels for CodeLens. When set to `0`, the 90% of `#editor.fontSize#` is used.")})),colorDecorators:M(new p(17,"colorDecorators",!0,{description:n.N("colorDecorators","Controls whether the editor should render the inline color decorators and color picker.")})),columnSelection:M(new p(18,"columnSelection",!1,{description:n.N("columnSelection","Enable that the selection with the mouse and keys is doing column selection.")})),comments:M(new class extends d{constructor(){const e={insertSpace:!0,ignoreEmptyLines:!0};super(19,"comments",e,{"editor.comments.insertSpace":{type:"boolean",default:e.insertSpace,description:n.N("comments.insertSpace","Controls whether a space character is inserted when commenting.")},"editor.comments.ignoreEmptyLines":{type:"boolean",default:e.ignoreEmptyLines,description:n.N("comments.ignoreEmptyLines","Controls if empty lines should be ignored with toggle, add or remove actions for line comments.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{insertSpace:g(t.insertSpace,this.defaultValue.insertSpace),ignoreEmptyLines:g(t.ignoreEmptyLines,this.defaultValue.ignoreEmptyLines)}}}),contextmenu:M(new p(20,"contextmenu",!0)),copyWithSyntaxHighlighting:M(new p(21,"copyWithSyntaxHighlighting",!0,{description:n.N("copyWithSyntaxHighlighting","Controls whether syntax highlighting should be copied into the clipboard.")})),cursorBlinking:M(new y(22,"cursorBlinking",1,"blink",["blink","smooth","phase","expand","solid"],(function(e){switch(e){case"blink":return 1;case"smooth":return 2;case"phase":return 3;case"expand":return 4;case"solid":return 5}}),{description:n.N("cursorBlinking","Control the cursor animation style.")})),cursorSmoothCaretAnimation:M(new p(23,"cursorSmoothCaretAnimation",!1,{description:n.N("cursorSmoothCaretAnimation","Controls whether the smooth caret animation should be enabled.")})),cursorStyle:M(new y(24,"cursorStyle",C.Line,"line",["line","block","underline","line-thin","block-outline","underline-thin"],(function(e){switch(e){case"line":return C.Line;case"block":return C.Block;case"underline":return C.Underline;case"line-thin":return C.LineThin;case"block-outline":return C.BlockOutline;case"underline-thin":return C.UnderlineThin}}),{description:n.N("cursorStyle","Controls the cursor style.")})),cursorSurroundingLines:M(new m(25,"cursorSurroundingLines",0,0,1073741824,{description:n.N("cursorSurroundingLines","Controls the minimal number of visible leading and trailing lines surrounding the cursor. Known as 'scrollOff' or 'scrollOffset' in some other editors.")})),cursorSurroundingLinesStyle:M(new w(26,"cursorSurroundingLinesStyle","default",["default","all"],{enumDescriptions:[n.N("cursorSurroundingLinesStyle.default","`cursorSurroundingLines` is enforced only when triggered via the keyboard or API."),n.N("cursorSurroundingLinesStyle.all","`cursorSurroundingLines` is enforced always.")],description:n.N("cursorSurroundingLinesStyle","Controls when `cursorSurroundingLines` should be enforced.")})),cursorWidth:M(new m(27,"cursorWidth",0,0,1073741824,{markdownDescription:n.N("cursorWidth","Controls the width of the cursor when `#editor.cursorStyle#` is set to `line`.")})),disableLayerHinting:M(new p(28,"disableLayerHinting",!1)),disableMonospaceOptimizations:M(new p(29,"disableMonospaceOptimizations",!1)),domReadOnly:M(new p(30,"domReadOnly",!1)),dragAndDrop:M(new p(31,"dragAndDrop",!0,{description:n.N("dragAndDrop","Controls whether the editor should allow moving selections via drag and drop.")})),emptySelectionClipboard:M(new class extends p{constructor(){super(32,"emptySelectionClipboard",!0,{description:n.N("emptySelectionClipboard","Controls whether copying without a selection copies the current line.")})}compute(e,t,i){return i&&e.emptySelectionClipboard}}),extraEditorClassName:M(new _(33,"extraEditorClassName","")),fastScrollSensitivity:M(new v(34,"fastScrollSensitivity",5,(e=>e<=0?5:e),{markdownDescription:n.N("fastScrollSensitivity","Scrolling speed multiplier when pressing `Alt`.")})),find:M(new class extends d{constructor(){const e={cursorMoveOnType:!0,seedSearchStringFromSelection:"always",autoFindInSelection:"never",globalFindClipboard:!1,addExtraSpaceOnTop:!0,loop:!0};super(35,"find",e,{"editor.find.cursorMoveOnType":{type:"boolean",default:e.cursorMoveOnType,description:n.N("find.cursorMoveOnType","Controls whether the cursor should jump to find matches while typing.")},"editor.find.seedSearchStringFromSelection":{type:"string",enum:["never","always","selection"],default:e.seedSearchStringFromSelection,enumDescriptions:[n.N("editor.find.seedSearchStringFromSelection.never","Never seed search string from the editor selection."),n.N("editor.find.seedSearchStringFromSelection.always","Always seed search string from the editor selection, including word at cursor position."),n.N("editor.find.seedSearchStringFromSelection.selection","Only seed search string from the editor selection.")],description:n.N("find.seedSearchStringFromSelection","Controls whether the search string in the Find Widget is seeded from the editor selection.")},"editor.find.autoFindInSelection":{type:"string",enum:["never","always","multiline"],default:e.autoFindInSelection,enumDescriptions:[n.N("editor.find.autoFindInSelection.never","Never turn on Find in Selection automatically (default)."),n.N("editor.find.autoFindInSelection.always","Always turn on Find in Selection automatically."),n.N("editor.find.autoFindInSelection.multiline","Turn on Find in Selection automatically when multiple lines of content are selected.")],description:n.N("find.autoFindInSelection","Controls the condition for turning on Find in Selection automatically.")},"editor.find.globalFindClipboard":{type:"boolean",default:e.globalFindClipboard,description:n.N("find.globalFindClipboard","Controls whether the Find Widget should read or modify the shared find clipboard on macOS."),included:o.dz},"editor.find.addExtraSpaceOnTop":{type:"boolean",default:e.addExtraSpaceOnTop,description:n.N("find.addExtraSpaceOnTop","Controls whether the Find Widget should add extra lines on top of the editor. When true, you can scroll beyond the first line when the Find Widget is visible.")},"editor.find.loop":{type:"boolean",default:e.loop,description:n.N("find.loop","Controls whether the search automatically restarts from the beginning (or the end) when no further matches can be found.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{cursorMoveOnType:g(t.cursorMoveOnType,this.defaultValue.cursorMoveOnType),seedSearchStringFromSelection:"boolean"==typeof e.seedSearchStringFromSelection?e.seedSearchStringFromSelection?"always":"never":b(t.seedSearchStringFromSelection,this.defaultValue.seedSearchStringFromSelection,["never","always","selection"]),autoFindInSelection:"boolean"==typeof e.autoFindInSelection?e.autoFindInSelection?"always":"never":b(t.autoFindInSelection,this.defaultValue.autoFindInSelection,["never","always","multiline"]),globalFindClipboard:g(t.globalFindClipboard,this.defaultValue.globalFindClipboard),addExtraSpaceOnTop:g(t.addExtraSpaceOnTop,this.defaultValue.addExtraSpaceOnTop),loop:g(t.loop,this.defaultValue.loop)}}}),fixedOverflowWidgets:M(new p(36,"fixedOverflowWidgets",!1)),folding:M(new p(37,"folding",!0,{description:n.N("folding","Controls whether the editor has code folding enabled.")})),foldingStrategy:M(new w(38,"foldingStrategy","auto",["auto","indentation"],{enumDescriptions:[n.N("foldingStrategy.auto","Use a language-specific folding strategy if available, else the indentation-based one."),n.N("foldingStrategy.indentation","Use the indentation-based folding strategy.")],description:n.N("foldingStrategy","Controls the strategy for computing folding ranges.")})),foldingHighlight:M(new p(39,"foldingHighlight",!0,{description:n.N("foldingHighlight","Controls whether the editor should highlight folded ranges.")})),foldingImportsByDefault:M(new p(40,"foldingImportsByDefault",!1,{description:n.N("foldingImportsByDefault","Controls whether the editor automatically collapses import ranges.")})),unfoldOnClickAfterEndOfLine:M(new p(41,"unfoldOnClickAfterEndOfLine",!1,{description:n.N("unfoldOnClickAfterEndOfLine","Controls whether clicking on the empty content after a folded line will unfold the line.")})),fontFamily:M(new _(42,"fontFamily",I.fontFamily,{description:n.N("fontFamily","Controls the font family.")})),fontInfo:M(new class extends h{constructor(){super(43)}compute(e,t,i){return e.fontInfo}}),fontLigatures2:M(new x),fontSize:M(new class extends u{constructor(){super(45,"fontSize",I.fontSize,{type:"number",minimum:6,maximum:100,default:I.fontSize,description:n.N("fontSize","Controls the font size in pixels.")})}validate(e){let t=v.float(e,this.defaultValue);return 0===t?I.fontSize:v.clamp(t,6,100)}compute(e,t,i){return e.fontInfo.fontSize}}),fontWeight:M(new S),formatOnPaste:M(new p(47,"formatOnPaste",!1,{description:n.N("formatOnPaste","Controls whether the editor should automatically format the pasted content. A formatter must be available and the formatter should be able to format a range in a document.")})),formatOnType:M(new p(48,"formatOnType",!1,{description:n.N("formatOnType","Controls whether the editor should automatically format the line after typing.")})),glyphMargin:M(new p(49,"glyphMargin",!0,{description:n.N("glyphMargin","Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.")})),gotoLocation:M(new class extends d{constructor(){const e={multiple:"peek",multipleDefinitions:"peek",multipleTypeDefinitions:"peek",multipleDeclarations:"peek",multipleImplementations:"peek",multipleReferences:"peek",alternativeDefinitionCommand:"editor.action.goToReferences",alternativeTypeDefinitionCommand:"editor.action.goToReferences",alternativeDeclarationCommand:"editor.action.goToReferences",alternativeImplementationCommand:"",alternativeReferenceCommand:""},t={type:"string",enum:["peek","gotoAndPeek","goto"],default:e.multiple,enumDescriptions:[n.N("editor.gotoLocation.multiple.peek","Show peek view of the results (default)"),n.N("editor.gotoLocation.multiple.gotoAndPeek","Go to the primary result and show a peek view"),n.N("editor.gotoLocation.multiple.goto","Go to the primary result and enable peek-less navigation to others")]},i=["","editor.action.referenceSearch.trigger","editor.action.goToReferences","editor.action.peekImplementation","editor.action.goToImplementation","editor.action.peekTypeDefinition","editor.action.goToTypeDefinition","editor.action.peekDeclaration","editor.action.revealDeclaration","editor.action.peekDefinition","editor.action.revealDefinitionAside","editor.action.revealDefinition"];super(50,"gotoLocation",e,{"editor.gotoLocation.multiple":{deprecationMessage:n.N("editor.gotoLocation.multiple.deprecated","This setting is deprecated, please use separate settings like 'editor.editor.gotoLocation.multipleDefinitions' or 'editor.editor.gotoLocation.multipleImplementations' instead.")},"editor.gotoLocation.multipleDefinitions":Object.assign({description:n.N("editor.editor.gotoLocation.multipleDefinitions","Controls the behavior the 'Go to Definition'-command when multiple target locations exist.")},t),"editor.gotoLocation.multipleTypeDefinitions":Object.assign({description:n.N("editor.editor.gotoLocation.multipleTypeDefinitions","Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist.")},t),"editor.gotoLocation.multipleDeclarations":Object.assign({description:n.N("editor.editor.gotoLocation.multipleDeclarations","Controls the behavior the 'Go to Declaration'-command when multiple target locations exist.")},t),"editor.gotoLocation.multipleImplementations":Object.assign({description:n.N("editor.editor.gotoLocation.multipleImplemenattions","Controls the behavior the 'Go to Implementations'-command when multiple target locations exist.")},t),"editor.gotoLocation.multipleReferences":Object.assign({description:n.N("editor.editor.gotoLocation.multipleReferences","Controls the behavior the 'Go to References'-command when multiple target locations exist.")},t),"editor.gotoLocation.alternativeDefinitionCommand":{type:"string",default:e.alternativeDefinitionCommand,enum:i,description:n.N("alternativeDefinitionCommand","Alternative command id that is being executed when the result of 'Go to Definition' is the current location.")},"editor.gotoLocation.alternativeTypeDefinitionCommand":{type:"string",default:e.alternativeTypeDefinitionCommand,enum:i,description:n.N("alternativeTypeDefinitionCommand","Alternative command id that is being executed when the result of 'Go to Type Definition' is the current location.")},"editor.gotoLocation.alternativeDeclarationCommand":{type:"string",default:e.alternativeDeclarationCommand,enum:i,description:n.N("alternativeDeclarationCommand","Alternative command id that is being executed when the result of 'Go to Declaration' is the current location.")},"editor.gotoLocation.alternativeImplementationCommand":{type:"string",default:e.alternativeImplementationCommand,enum:i,description:n.N("alternativeImplementationCommand","Alternative command id that is being executed when the result of 'Go to Implementation' is the current location.")},"editor.gotoLocation.alternativeReferenceCommand":{type:"string",default:e.alternativeReferenceCommand,enum:i,description:n.N("alternativeReferenceCommand","Alternative command id that is being executed when the result of 'Go to Reference' is the current location.")}})}validate(e){var t,i,n,o,s;if(!e||"object"!=typeof e)return this.defaultValue;const r=e;return{multiple:b(r.multiple,this.defaultValue.multiple,["peek","gotoAndPeek","goto"]),multipleDefinitions:null!==(t=r.multipleDefinitions)&&void 0!==t?t:b(r.multipleDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleTypeDefinitions:null!==(i=r.multipleTypeDefinitions)&&void 0!==i?i:b(r.multipleTypeDefinitions,"peek",["peek","gotoAndPeek","goto"]),multipleDeclarations:null!==(n=r.multipleDeclarations)&&void 0!==n?n:b(r.multipleDeclarations,"peek",["peek","gotoAndPeek","goto"]),multipleImplementations:null!==(o=r.multipleImplementations)&&void 0!==o?o:b(r.multipleImplementations,"peek",["peek","gotoAndPeek","goto"]),multipleReferences:null!==(s=r.multipleReferences)&&void 0!==s?s:b(r.multipleReferences,"peek",["peek","gotoAndPeek","goto"]),alternativeDefinitionCommand:_.string(r.alternativeDefinitionCommand,this.defaultValue.alternativeDefinitionCommand),alternativeTypeDefinitionCommand:_.string(r.alternativeTypeDefinitionCommand,this.defaultValue.alternativeTypeDefinitionCommand),alternativeDeclarationCommand:_.string(r.alternativeDeclarationCommand,this.defaultValue.alternativeDeclarationCommand),alternativeImplementationCommand:_.string(r.alternativeImplementationCommand,this.defaultValue.alternativeImplementationCommand),alternativeReferenceCommand:_.string(r.alternativeReferenceCommand,this.defaultValue.alternativeReferenceCommand)}}}),hideCursorInOverviewRuler:M(new p(51,"hideCursorInOverviewRuler",!1,{description:n.N("hideCursorInOverviewRuler","Controls whether the cursor should be hidden in the overview ruler.")})),hover:M(new class extends d{constructor(){const e={enabled:!0,delay:300,sticky:!0,above:!0};super(52,"hover",e,{"editor.hover.enabled":{type:"boolean",default:e.enabled,description:n.N("hover.enabled","Controls whether the hover is shown.")},"editor.hover.delay":{type:"number",default:e.delay,description:n.N("hover.delay","Controls the delay in milliseconds after which the hover is shown.")},"editor.hover.sticky":{type:"boolean",default:e.sticky,description:n.N("hover.sticky","Controls whether the hover should remain visible when mouse is moved over it.")},"editor.hover.above":{type:"boolean",default:e.above,description:n.N("hover.above","Prefer showing hovers above the line, if there's space.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{enabled:g(t.enabled,this.defaultValue.enabled),delay:m.clampedInt(t.delay,this.defaultValue.delay,0,1e4),sticky:g(t.sticky,this.defaultValue.sticky),above:g(t.above,this.defaultValue.above)}}}),inDiffEditor:M(new p(53,"inDiffEditor",!1)),letterSpacing:M(new v(55,"letterSpacing",I.letterSpacing,(e=>v.clamp(e,-5,20)),{description:n.N("letterSpacing","Controls the letter spacing in pixels.")})),lightbulb:M(new class extends d{constructor(){const e={enabled:!0};super(56,"lightbulb",e,{"editor.lightbulb.enabled":{type:"boolean",default:e.enabled,description:n.N("codeActions","Enables the code action lightbulb in the editor.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;return{enabled:g(e.enabled,this.defaultValue.enabled)}}}),lineDecorationsWidth:M(new u(57,"lineDecorationsWidth",10)),lineHeight:M(new class extends v{constructor(){super(58,"lineHeight",I.lineHeight,(e=>v.clamp(e,0,150)),{markdownDescription:n.N("lineHeight","Controls the line height. \n - Use 0 to automatically compute the line height from the font size.\n - Values between 0 and 8 will be used as a multiplier with the font size.\n - Values greater than or equal to 8 will be used as effective values.")})}compute(e,t,i){return e.fontInfo.lineHeight}}),lineNumbers:M(new class extends d{constructor(){super(59,"lineNumbers",{renderType:1,renderFn:null},{type:"string",enum:["off","on","relative","interval"],enumDescriptions:[n.N("lineNumbers.off","Line numbers are not rendered."),n.N("lineNumbers.on","Line numbers are rendered as absolute number."),n.N("lineNumbers.relative","Line numbers are rendered as distance in lines to cursor position."),n.N("lineNumbers.interval","Line numbers are rendered every 10 lines.")],default:"on",description:n.N("lineNumbers","Controls the display of line numbers.")})}validate(e){let t=this.defaultValue.renderType,i=this.defaultValue.renderFn;return void 0!==e&&("function"==typeof e?(t=4,i=e):t="interval"===e?3:"relative"===e?2:"on"===e?1:0),{renderType:t,renderFn:i}}}),lineNumbersMinChars:M(new m(60,"lineNumbersMinChars",5,1,300)),linkedEditing:M(new p(61,"linkedEditing",!1,{description:n.N("linkedEditing","Controls whether the editor has linked editing enabled. Depending on the language, related symbols, e.g. HTML tags, are updated while editing.")})),links:M(new p(62,"links",!0,{description:n.N("links","Controls whether the editor should detect links and make them clickable.")})),matchBrackets:M(new w(63,"matchBrackets","always",["always","near","never"],{description:n.N("matchBrackets","Highlight matching brackets.")})),minimap:M(new class extends d{constructor(){const e={enabled:!0,size:"proportional",side:"right",showSlider:"mouseover",renderCharacters:!0,maxColumn:120,scale:1};super(64,"minimap",e,{"editor.minimap.enabled":{type:"boolean",default:e.enabled,description:n.N("minimap.enabled","Controls whether the minimap is shown.")},"editor.minimap.size":{type:"string",enum:["proportional","fill","fit"],enumDescriptions:[n.N("minimap.size.proportional","The minimap has the same size as the editor contents (and might scroll)."),n.N("minimap.size.fill","The minimap will stretch or shrink as necessary to fill the height of the editor (no scrolling)."),n.N("minimap.size.fit","The minimap will shrink as necessary to never be larger than the editor (no scrolling).")],default:e.size,description:n.N("minimap.size","Controls the size of the minimap.")},"editor.minimap.side":{type:"string",enum:["left","right"],default:e.side,description:n.N("minimap.side","Controls the side where to render the minimap.")},"editor.minimap.showSlider":{type:"string",enum:["always","mouseover"],default:e.showSlider,description:n.N("minimap.showSlider","Controls when the minimap slider is shown.")},"editor.minimap.scale":{type:"number",default:e.scale,minimum:1,maximum:3,enum:[1,2,3],description:n.N("minimap.scale","Scale of content drawn in the minimap: 1, 2 or 3.")},"editor.minimap.renderCharacters":{type:"boolean",default:e.renderCharacters,description:n.N("minimap.renderCharacters","Render the actual characters on a line as opposed to color blocks.")},"editor.minimap.maxColumn":{type:"number",default:e.maxColumn,description:n.N("minimap.maxColumn","Limit the width of the minimap to render at most a certain number of columns.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{enabled:g(t.enabled,this.defaultValue.enabled),size:b(t.size,this.defaultValue.size,["proportional","fill","fit"]),side:b(t.side,this.defaultValue.side,["right","left"]),showSlider:b(t.showSlider,this.defaultValue.showSlider,["always","mouseover"]),renderCharacters:g(t.renderCharacters,this.defaultValue.renderCharacters),scale:m.clampedInt(t.scale,1,1,3),maxColumn:m.clampedInt(t.maxColumn,this.defaultValue.maxColumn,1,1e4)}}}),mouseStyle:M(new w(65,"mouseStyle","text",["text","default","copy"])),mouseWheelScrollSensitivity:M(new v(66,"mouseWheelScrollSensitivity",1,(e=>0===e?1:e),{markdownDescription:n.N("mouseWheelScrollSensitivity","A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.")})),mouseWheelZoom:M(new p(67,"mouseWheelZoom",!1,{markdownDescription:n.N("mouseWheelZoom","Zoom the font of the editor when using mouse wheel and holding `Ctrl`.")})),multiCursorMergeOverlapping:M(new p(68,"multiCursorMergeOverlapping",!0,{description:n.N("multiCursorMergeOverlapping","Merge multiple cursors when they are overlapping.")})),multiCursorModifier:M(new y(69,"multiCursorModifier","altKey","alt",["ctrlCmd","alt"],(function(e){return"ctrlCmd"===e?o.dz?"metaKey":"ctrlKey":"altKey"}),{markdownEnumDescriptions:[n.N("multiCursorModifier.ctrlCmd","Maps to `Control` on Windows and Linux and to `Command` on macOS."),n.N("multiCursorModifier.alt","Maps to `Alt` on Windows and Linux and to `Option` on macOS.")],markdownDescription:n.N({key:"multiCursorModifier",comment:["- `ctrlCmd` refers to a value the setting can take and should not be localized.","- `Control` and `Command` refer to the modifier keys Ctrl or Cmd on the keyboard and can be localized."]},"The modifier to be used to add multiple cursors with the mouse. The å‰å¾€ Definition and Open Link mouse gestures will adapt such that they do not conflict with the multicursor modifier. [Read more](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).")})),multiCursorPaste:M(new w(70,"multiCursorPaste","spread",["spread","full"],{markdownEnumDescriptions:[n.N("multiCursorPaste.spread","Each cursor pastes a single line of the text."),n.N("multiCursorPaste.full","Each cursor pastes the full text.")],markdownDescription:n.N("multiCursorPaste","Controls pasting when the line count of the pasted text matches the cursor count.")})),occurrencesHighlight:M(new p(71,"occurrencesHighlight",!0,{description:n.N("occurrencesHighlight","Controls whether the editor should highlight semantic symbol occurrences.")})),overviewRulerBorder:M(new p(72,"overviewRulerBorder",!0,{description:n.N("overviewRulerBorder","Controls whether a border should be drawn around the overview ruler.")})),overviewRulerLanes:M(new m(73,"overviewRulerLanes",3,0,3)),padding:M(new class extends d{constructor(){super(74,"padding",{top:0,bottom:0},{"editor.padding.top":{type:"number",default:0,minimum:0,maximum:1e3,description:n.N("padding.top","Controls the amount of space between the top edge of the editor and the first line.")},"editor.padding.bottom":{type:"number",default:0,minimum:0,maximum:1e3,description:n.N("padding.bottom","Controls the amount of space between the bottom edge of the editor and the last line.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{top:m.clampedInt(t.top,0,0,1e3),bottom:m.clampedInt(t.bottom,0,0,1e3)}}}),parameterHints:M(new class extends d{constructor(){const e={enabled:!0,cycle:!1};super(75,"parameterHints",e,{"editor.parameterHints.enabled":{type:"boolean",default:e.enabled,description:n.N("parameterHints.enabled","Enables a pop-up that shows parameter documentation and type information as you type.")},"editor.parameterHints.cycle":{type:"boolean",default:e.cycle,description:n.N("parameterHints.cycle","Controls whether the parameter hints menu cycles or closes when reaching the end of the list.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{enabled:g(t.enabled,this.defaultValue.enabled),cycle:g(t.cycle,this.defaultValue.cycle)}}}),peekWidgetDefaultFocus:M(new w(76,"peekWidgetDefaultFocus","tree",["tree","editor"],{enumDescriptions:[n.N("peekWidgetDefaultFocus.tree","Focus the tree when opening peek"),n.N("peekWidgetDefaultFocus.editor","Focus the editor when opening peek")],description:n.N("peekWidgetDefaultFocus","Controls whether to focus the inline editor or the tree in the peek widget.")})),definitionLinkOpensInPeek:M(new p(77,"definitionLinkOpensInPeek",!1,{description:n.N("definitionLinkOpensInPeek","Controls whether the å‰å¾€ Definition mouse gesture always opens the peek widget.")})),quickSuggestions:M(new class extends d{constructor(){const e={other:!0,comments:!1,strings:!1};super(78,"quickSuggestions",e,{anyOf:[{type:"boolean"},{type:"object",properties:{strings:{type:"boolean",default:e.strings,description:n.N("quickSuggestions.strings","Enable quick suggestions inside strings.")},comments:{type:"boolean",default:e.comments,description:n.N("quickSuggestions.comments","Enable quick suggestions inside comments.")},other:{type:"boolean",default:e.other,description:n.N("quickSuggestions.other","Enable quick suggestions outside of strings and comments.")}}}],default:e,description:n.N("quickSuggestions","Controls whether suggestions should automatically show up while typing.")}),this.defaultValue=e}validate(e){if("boolean"==typeof e)return e;if(e&&"object"==typeof e){const t=e,i={other:g(t.other,this.defaultValue.other),comments:g(t.comments,this.defaultValue.comments),strings:g(t.strings,this.defaultValue.strings)};return!!(i.other&&i.comments&&i.strings)||!!(i.other||i.comments||i.strings)&&i}return this.defaultValue}}),quickSuggestionsDelay:M(new m(79,"quickSuggestionsDelay",10,0,1073741824,{description:n.N("quickSuggestionsDelay","Controls the delay in milliseconds after which quick suggestions will show up.")})),readOnly:M(new p(80,"readOnly",!1)),renameOnType:M(new p(81,"renameOnType",!1,{description:n.N("renameOnType","Controls whether the editor auto renames on type."),markdownDeprecationMessage:n.N("renameOnTypeDeprecate","Deprecated, use `editor.linkedEditing` instead.")})),renderControlCharacters:M(new p(82,"renderControlCharacters",!0,{description:n.N("renderControlCharacters","Controls whether the editor should render control characters."),restricted:!0})),renderFinalNewline:M(new p(83,"renderFinalNewline",!0,{description:n.N("renderFinalNewline","Render last line number when the file ends with a newline.")})),renderLineHighlight:M(new w(84,"renderLineHighlight","line",["none","gutter","line","all"],{enumDescriptions:["","","",n.N("renderLineHighlight.all","Highlights both the gutter and the current line.")],description:n.N("renderLineHighlight","Controls how the editor should render the current line highlight.")})),renderLineHighlightOnlyWhenFocus:M(new p(85,"renderLineHighlightOnlyWhenFocus",!1,{description:n.N("renderLineHighlightOnlyWhenFocus","Controls if the editor should render the current line highlight only when the editor is focused.")})),renderValidationDecorations:M(new w(86,"renderValidationDecorations","editable",["editable","on","off"])),renderWhitespace:M(new w(87,"renderWhitespace","selection",["none","boundary","selection","trailing","all"],{enumDescriptions:["",n.N("renderWhitespace.boundary","Render whitespace characters except for single spaces between words."),n.N("renderWhitespace.selection","Render whitespace characters only on selected text."),n.N("renderWhitespace.trailing","Render only trailing whitespace characters."),""],description:n.N("renderWhitespace","Controls how the editor should render whitespace characters.")})),revealHorizontalRightPadding:M(new m(88,"revealHorizontalRightPadding",30,0,1e3)),roundedSelection:M(new p(89,"roundedSelection",!0,{description:n.N("roundedSelection","Controls whether selections should have rounded corners.")})),rulers:M(new class extends d{constructor(){const e=[],t={type:"number",description:n.N("rulers.size","Number of monospace characters at which this editor ruler will render.")};super(90,"rulers",e,{type:"array",items:{anyOf:[t,{type:["object"],properties:{column:t,color:{type:"string",description:n.N("rulers.color","Color of this editor ruler."),format:"color-hex"}}}]},default:e,description:n.N("rulers","Render vertical rulers after a certain number of monospace characters. Use multiple values for multiple rulers. No rulers are drawn if array is empty.")})}validate(e){if(Array.isArray(e)){let t=[];for(let i of e)if("number"==typeof i)t.push({column:m.clampedInt(i,0,0,1e4),color:null});else if(i&&"object"==typeof i){const e=i;t.push({column:m.clampedInt(e.column,0,0,1e4),color:e.color})}return t.sort(((e,t)=>e.column-t.column)),t}return this.defaultValue}}),scrollbar:M(new class extends d{constructor(){const e={vertical:1,horizontal:1,arrowSize:11,useShadows:!0,verticalHasArrows:!1,horizontalHasArrows:!1,horizontalScrollbarSize:12,horizontalSliderSize:12,verticalScrollbarSize:14,verticalSliderSize:14,handleMouseWheel:!0,alwaysConsumeMouseWheel:!0,scrollByPage:!1};super(91,"scrollbar",e,{"editor.scrollbar.vertical":{type:"string",enum:["auto","visible","hidden"],enumDescriptions:[n.N("scrollbar.vertical.auto","The vertical scrollbar will be visible only when necessary."),n.N("scrollbar.vertical.visible","The vertical scrollbar will always be visible."),n.N("scrollbar.vertical.fit","The vertical scrollbar will always be hidden.")],default:"auto",description:n.N("scrollbar.vertical","Controls the visibility of the vertical scrollbar.")},"editor.scrollbar.horizontal":{type:"string",enum:["auto","visible","hidden"],enumDescriptions:[n.N("scrollbar.horizontal.auto","The horizontal scrollbar will be visible only when necessary."),n.N("scrollbar.horizontal.visible","The horizontal scrollbar will always be visible."),n.N("scrollbar.horizontal.fit","The horizontal scrollbar will always be hidden.")],default:"auto",description:n.N("scrollbar.horizontal","Controls the visibility of the horizontal scrollbar.")},"editor.scrollbar.verticalScrollbarSize":{type:"number",default:e.verticalScrollbarSize,description:n.N("scrollbar.verticalScrollbarSize","The width of the vertical scrollbar.")},"editor.scrollbar.horizontalScrollbarSize":{type:"number",default:e.horizontalScrollbarSize,description:n.N("scrollbar.horizontalScrollbarSize","The height of the horizontal scrollbar.")},"editor.scrollbar.scrollByPage":{type:"boolean",default:e.scrollByPage,description:n.N("scrollbar.scrollByPage","Controls whether clicks scroll by page or jump to click position.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e,i=m.clampedInt(t.horizontalScrollbarSize,this.defaultValue.horizontalScrollbarSize,0,1e3),n=m.clampedInt(t.verticalScrollbarSize,this.defaultValue.verticalScrollbarSize,0,1e3);return{arrowSize:m.clampedInt(t.arrowSize,this.defaultValue.arrowSize,0,1e3),vertical:N(t.vertical,this.defaultValue.vertical),horizontal:N(t.horizontal,this.defaultValue.horizontal),useShadows:g(t.useShadows,this.defaultValue.useShadows),verticalHasArrows:g(t.verticalHasArrows,this.defaultValue.verticalHasArrows),horizontalHasArrows:g(t.horizontalHasArrows,this.defaultValue.horizontalHasArrows),handleMouseWheel:g(t.handleMouseWheel,this.defaultValue.handleMouseWheel),alwaysConsumeMouseWheel:g(t.alwaysConsumeMouseWheel,this.defaultValue.alwaysConsumeMouseWheel),horizontalScrollbarSize:i,horizontalSliderSize:m.clampedInt(t.horizontalSliderSize,i,0,1e3),verticalScrollbarSize:n,verticalSliderSize:m.clampedInt(t.verticalSliderSize,n,0,1e3),scrollByPage:g(t.scrollByPage,this.defaultValue.scrollByPage)}}}),scrollBeyondLastColumn:M(new m(92,"scrollBeyondLastColumn",5,0,1073741824,{description:n.N("scrollBeyondLastColumn","Controls the number of extra characters beyond which the editor will scroll horizontally.")})),scrollBeyondLastLine:M(new p(93,"scrollBeyondLastLine",!0,{description:n.N("scrollBeyondLastLine","Controls whether the editor will scroll beyond the last line.")})),scrollPredominantAxis:M(new p(94,"scrollPredominantAxis",!0,{description:n.N("scrollPredominantAxis","Scroll only along the predominant axis when scrolling both vertically and horizontally at the same time. Prevents horizontal drift when scrolling vertically on a trackpad.")})),selectionClipboard:M(new p(95,"selectionClipboard",!0,{description:n.N("selectionClipboard","Controls whether the Linux primary clipboard should be supported."),included:o.IJ})),selectionHighlight:M(new p(96,"selectionHighlight",!0,{description:n.N("selectionHighlight","Controls whether the editor should highlight matches similar to the selection.")})),selectOnLineNumbers:M(new p(97,"selectOnLineNumbers",!0)),showFoldingControls:M(new w(98,"showFoldingControls","mouseover",["always","mouseover"],{enumDescriptions:[n.N("showFoldingControls.always","Always show the folding controls."),n.N("showFoldingControls.mouseover","Only show the folding controls when the mouse is over the gutter.")],description:n.N("showFoldingControls","Controls when the folding controls on the gutter are shown.")})),showUnused:M(new p(99,"showUnused",!0,{description:n.N("showUnused","Controls fading out of unused code.")})),showDeprecated:M(new p(124,"showDeprecated",!0,{description:n.N("showDeprecated","Controls strikethrough deprecated variables.")})),inlayHints:M(new class extends d{constructor(){const e={enabled:!0,fontSize:0,fontFamily:""};super(125,"inlayHints",e,{"editor.inlayHints.enabled":{type:"boolean",default:e.enabled,description:n.N("inlayHints.enable","Enables the inlay hints in the editor.")},"editor.inlayHints.fontSize":{type:"number",default:e.fontSize,markdownDescription:n.N("inlayHints.fontSize","Controls font size of inlay hints in the editor. A default of 90% of `#editor.fontSize#` is used when the configured value is less than `5` or greater than the editor font size.")},"editor.inlayHints.fontFamily":{type:"string",default:e.fontFamily,markdownDescription:n.N("inlayHints.fontFamily","Controls font family of inlay hints in the editor. When set to empty, the `#editor.fontFamily#` is used.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{enabled:g(t.enabled,this.defaultValue.enabled),fontSize:m.clampedInt(t.fontSize,this.defaultValue.fontSize,0,100),fontFamily:_.string(t.fontFamily,this.defaultValue.fontFamily)}}}),snippetSuggestions:M(new w(100,"snippetSuggestions","inline",["top","bottom","inline","none"],{enumDescriptions:[n.N("snippetSuggestions.top","Show snippet suggestions on top of other suggestions."),n.N("snippetSuggestions.bottom","Show snippet suggestions below other suggestions."),n.N("snippetSuggestions.inline","Show snippets suggestions with other suggestions."),n.N("snippetSuggestions.none","Do not show snippet suggestions.")],description:n.N("snippetSuggestions","Controls whether snippets are shown with other suggestions and how they are sorted.")})),smartSelect:M(new class extends d{constructor(){super(101,"smartSelect",{selectLeadingAndTrailingWhitespace:!0},{"editor.smartSelect.selectLeadingAndTrailingWhitespace":{description:n.N("selectLeadingAndTrailingWhitespace","Whether leading and trailing whitespace should always be selected."),default:!0,type:"boolean"}})}validate(e){return e&&"object"==typeof e?{selectLeadingAndTrailingWhitespace:g(e.selectLeadingAndTrailingWhitespace,this.defaultValue.selectLeadingAndTrailingWhitespace)}:this.defaultValue}}),smoothScrolling:M(new p(102,"smoothScrolling",!1,{description:n.N("smoothScrolling","Controls whether the editor will scroll using an animation.")})),stopRenderingLineAfter:M(new m(104,"stopRenderingLineAfter",1e4,-1,1073741824)),suggest:M(new class extends d{constructor(){const e={insertMode:"insert",filterGraceful:!0,snippetsPreventQuickSuggestions:!0,localityBonus:!1,shareSuggestSelections:!1,showIcons:!0,showStatusBar:!1,preview:!1,previewMode:"subwordSmart",showInlineDetails:!0,showMethods:!0,showFunctions:!0,showConstructors:!0,showDeprecated:!0,showFields:!0,showVariables:!0,showClasses:!0,showStructs:!0,showInterfaces:!0,showModules:!0,showProperties:!0,showEvents:!0,showOperators:!0,showUnits:!0,showValues:!0,showConstants:!0,showEnums:!0,showEnumMembers:!0,showKeywords:!0,showWords:!0,showColors:!0,showFiles:!0,showReferences:!0,showFolders:!0,showTypeParameters:!0,showSnippets:!0,showUsers:!0,showIssues:!0};super(105,"suggest",e,{"editor.suggest.insertMode":{type:"string",enum:["insert","replace"],enumDescriptions:[n.N("suggest.insertMode.insert","Insert suggestion without overwriting text right of the cursor."),n.N("suggest.insertMode.replace","Insert suggestion and overwrite text right of the cursor.")],default:e.insertMode,description:n.N("suggest.insertMode","Controls whether words are overwritten when accepting completions. Note that this depends on extensions opting into this feature.")},"editor.suggest.filterGraceful":{type:"boolean",default:e.filterGraceful,description:n.N("suggest.filterGraceful","Controls whether filtering and sorting suggestions accounts for small typos.")},"editor.suggest.localityBonus":{type:"boolean",default:e.localityBonus,description:n.N("suggest.localityBonus","Controls whether sorting favors words that appear close to the cursor.")},"editor.suggest.shareSuggestSelections":{type:"boolean",default:e.shareSuggestSelections,markdownDescription:n.N("suggest.shareSuggestSelections","Controls whether remembered suggestion selections are shared between multiple workspaces and windows (needs `#editor.suggestSelection#`).")},"editor.suggest.snippetsPreventQuickSuggestions":{type:"boolean",default:e.snippetsPreventQuickSuggestions,description:n.N("suggest.snippetsPreventQuickSuggestions","Controls whether an active snippet prevents quick suggestions.")},"editor.suggest.showIcons":{type:"boolean",default:e.showIcons,description:n.N("suggest.showIcons","Controls whether to show or hide icons in suggestions.")},"editor.suggest.showStatusBar":{type:"boolean",default:e.showStatusBar,description:n.N("suggest.showStatusBar","Controls the visibility of the status bar at the bottom of the suggest widget.")},"editor.suggest.preview":{type:"boolean",default:e.preview,description:n.N("suggest.preview","Controls whether to preview the suggestion outcome in the editor.")},"editor.suggest.showInlineDetails":{type:"boolean",default:e.showInlineDetails,description:n.N("suggest.showInlineDetails","Controls whether suggest details show inline with the label or only in the details widget")},"editor.suggest.maxVisibleSuggestions":{type:"number",deprecationMessage:n.N("suggest.maxVisibleSuggestions.dep","This setting is deprecated. The suggest widget can now be resized.")},"editor.suggest.filteredTypes":{type:"object",deprecationMessage:n.N("deprecated","This setting is deprecated, please use separate settings like 'editor.suggest.showKeywords' or 'editor.suggest.showSnippets' instead.")},"editor.suggest.showMethods":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showMethods","When enabled IntelliSense shows `method`-suggestions.")},"editor.suggest.showFunctions":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showFunctions","When enabled IntelliSense shows `function`-suggestions.")},"editor.suggest.showConstructors":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showConstructors","When enabled IntelliSense shows `constructor`-suggestions.")},"editor.suggest.showDeprecated":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showDeprecated","When enabled IntelliSense shows `deprecated`-suggestions.")},"editor.suggest.showFields":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showFields","When enabled IntelliSense shows `field`-suggestions.")},"editor.suggest.showVariables":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showVariables","When enabled IntelliSense shows `variable`-suggestions.")},"editor.suggest.showClasses":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showClasss","When enabled IntelliSense shows `class`-suggestions.")},"editor.suggest.showStructs":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showStructs","When enabled IntelliSense shows `struct`-suggestions.")},"editor.suggest.showInterfaces":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showInterfaces","When enabled IntelliSense shows `interface`-suggestions.")},"editor.suggest.showModules":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showModules","When enabled IntelliSense shows `module`-suggestions.")},"editor.suggest.showProperties":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showPropertys","When enabled IntelliSense shows `property`-suggestions.")},"editor.suggest.showEvents":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showEvents","When enabled IntelliSense shows `event`-suggestions.")},"editor.suggest.showOperators":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showOperators","When enabled IntelliSense shows `operator`-suggestions.")},"editor.suggest.showUnits":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showUnits","When enabled IntelliSense shows `unit`-suggestions.")},"editor.suggest.showValues":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showValues","When enabled IntelliSense shows `value`-suggestions.")},"editor.suggest.showConstants":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showConstants","When enabled IntelliSense shows `constant`-suggestions.")},"editor.suggest.showEnums":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showEnums","When enabled IntelliSense shows `enum`-suggestions.")},"editor.suggest.showEnumMembers":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showEnumMembers","When enabled IntelliSense shows `enumMember`-suggestions.")},"editor.suggest.showKeywords":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showKeywords","When enabled IntelliSense shows `keyword`-suggestions.")},"editor.suggest.showWords":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showTexts","When enabled IntelliSense shows `text`-suggestions.")},"editor.suggest.showColors":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showColors","When enabled IntelliSense shows `color`-suggestions.")},"editor.suggest.showFiles":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showFiles","When enabled IntelliSense shows `file`-suggestions.")},"editor.suggest.showReferences":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showReferences","When enabled IntelliSense shows `reference`-suggestions.")},"editor.suggest.showCustomcolors":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showCustomcolors","When enabled IntelliSense shows `customcolor`-suggestions.")},"editor.suggest.showFolders":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showFolders","When enabled IntelliSense shows `folder`-suggestions.")},"editor.suggest.showTypeParameters":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showTypeParameters","When enabled IntelliSense shows `typeParameter`-suggestions.")},"editor.suggest.showSnippets":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showSnippets","When enabled IntelliSense shows `snippet`-suggestions.")},"editor.suggest.showUsers":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showUsers","When enabled IntelliSense shows `user`-suggestions.")},"editor.suggest.showIssues":{type:"boolean",default:!0,markdownDescription:n.N("editor.suggest.showIssues","When enabled IntelliSense shows `issues`-suggestions.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{insertMode:b(t.insertMode,this.defaultValue.insertMode,["insert","replace"]),filterGraceful:g(t.filterGraceful,this.defaultValue.filterGraceful),snippetsPreventQuickSuggestions:g(t.snippetsPreventQuickSuggestions,this.defaultValue.filterGraceful),localityBonus:g(t.localityBonus,this.defaultValue.localityBonus),shareSuggestSelections:g(t.shareSuggestSelections,this.defaultValue.shareSuggestSelections),showIcons:g(t.showIcons,this.defaultValue.showIcons),showStatusBar:g(t.showStatusBar,this.defaultValue.showStatusBar),preview:g(t.preview,this.defaultValue.preview),previewMode:b(t.previewMode,this.defaultValue.previewMode,["prefix","subword","subwordSmart"]),showInlineDetails:g(t.showInlineDetails,this.defaultValue.showInlineDetails),showMethods:g(t.showMethods,this.defaultValue.showMethods),showFunctions:g(t.showFunctions,this.defaultValue.showFunctions),showConstructors:g(t.showConstructors,this.defaultValue.showConstructors),showDeprecated:g(t.showDeprecated,this.defaultValue.showDeprecated),showFields:g(t.showFields,this.defaultValue.showFields),showVariables:g(t.showVariables,this.defaultValue.showVariables),showClasses:g(t.showClasses,this.defaultValue.showClasses),showStructs:g(t.showStructs,this.defaultValue.showStructs),showInterfaces:g(t.showInterfaces,this.defaultValue.showInterfaces),showModules:g(t.showModules,this.defaultValue.showModules),showProperties:g(t.showProperties,this.defaultValue.showProperties),showEvents:g(t.showEvents,this.defaultValue.showEvents),showOperators:g(t.showOperators,this.defaultValue.showOperators),showUnits:g(t.showUnits,this.defaultValue.showUnits),showValues:g(t.showValues,this.defaultValue.showValues),showConstants:g(t.showConstants,this.defaultValue.showConstants),showEnums:g(t.showEnums,this.defaultValue.showEnums),showEnumMembers:g(t.showEnumMembers,this.defaultValue.showEnumMembers),showKeywords:g(t.showKeywords,this.defaultValue.showKeywords),showWords:g(t.showWords,this.defaultValue.showWords),showColors:g(t.showColors,this.defaultValue.showColors),showFiles:g(t.showFiles,this.defaultValue.showFiles),showReferences:g(t.showReferences,this.defaultValue.showReferences),showFolders:g(t.showFolders,this.defaultValue.showFolders),showTypeParameters:g(t.showTypeParameters,this.defaultValue.showTypeParameters),showSnippets:g(t.showSnippets,this.defaultValue.showSnippets),showUsers:g(t.showUsers,this.defaultValue.showUsers),showIssues:g(t.showIssues,this.defaultValue.showIssues)}}}),inlineSuggest:M(new class extends d{constructor(){const e={enabled:!0,mode:"subwordSmart"};super(54,"inlineSuggest",e,{"editor.inlineSuggest.enabled":{type:"boolean",default:e.enabled,description:n.N("inlineSuggest.enabled","Controls whether to automatically show inline suggestions in the editor.")}})}validate(e){if(!e||"object"!=typeof e)return this.defaultValue;const t=e;return{enabled:g(t.enabled,this.defaultValue.enabled),mode:b(t.mode,this.defaultValue.mode,["prefix","subword","subwordSmart"])}}}),suggestFontSize:M(new m(106,"suggestFontSize",0,0,1e3,{markdownDescription:n.N("suggestFontSize","Font size for the suggest widget. When set to `0`, the value of `#editor.fontSize#` is used.")})),suggestLineHeight:M(new m(107,"suggestLineHeight",0,0,1e3,{markdownDescription:n.N("suggestLineHeight","Line height for the suggest widget. When set to `0`, the value of `#editor.lineHeight#` is used. The minimum value is 8.")})),suggestOnTriggerCharacters:M(new p(108,"suggestOnTriggerCharacters",!0,{description:n.N("suggestOnTriggerCharacters","Controls whether suggestions should automatically show up when typing trigger characters.")})),suggestSelection:M(new w(109,"suggestSelection","recentlyUsed",["first","recentlyUsed","recentlyUsedByPrefix"],{markdownEnumDescriptions:[n.N("suggestSelection.first","Always select the first suggestion."),n.N("suggestSelection.recentlyUsed","Select recent suggestions unless further typing selects one, e.g. `console.| -> console.log` because `log` has been completed recently."),n.N("suggestSelection.recentlyUsedByPrefix","Select suggestions based on previous prefixes that have completed those suggestions, e.g. `co -> console` and `con -> const`.")],description:n.N("suggestSelection","Controls how suggestions are pre-selected when showing the suggest list.")})),tabCompletion:M(new w(110,"tabCompletion","off",["on","off","onlySnippets"],{enumDescriptions:[n.N("tabCompletion.on","Tab complete will insert the best matching suggestion when pressing tab."),n.N("tabCompletion.off","Disable tab completions."),n.N("tabCompletion.onlySnippets","Tab complete snippets when their prefix match. Works best when 'quickSuggestions' aren't enabled.")],description:n.N("tabCompletion","Enables tab completions.")})),tabIndex:M(new m(111,"tabIndex",0,-1,1073741824)),unusualLineTerminators:M(new w(112,"unusualLineTerminators","prompt",["auto","off","prompt"],{enumDescriptions:[n.N("unusualLineTerminators.auto","Unusual line terminators are automatically removed."),n.N("unusualLineTerminators.off","Unusual line terminators are ignored."),n.N("unusualLineTerminators.prompt","Unusual line terminators prompt to be removed.")],description:n.N("unusualLineTerminators","Remove unusual line terminators that might cause problems.")})),useShadowDOM:M(new p(113,"useShadowDOM",!0)),useTabStops:M(new p(114,"useTabStops",!0,{description:n.N("useTabStops","Inserting and deleting whitespace follows tab stops.")})),wordSeparators:M(new _(115,"wordSeparators",s.vu,{description:n.N("wordSeparators","Characters that will be used as word separators when doing word related navigations or operations.")})),wordWrap:M(new w(116,"wordWrap","off",["off","on","wordWrapColumn","bounded"],{markdownEnumDescriptions:[n.N("wordWrap.off","Lines will never wrap."),n.N("wordWrap.on","Lines will wrap at the viewport width."),n.N({key:"wordWrap.wordWrapColumn",comment:["- `editor.wordWrapColumn` refers to a different setting and should not be localized."]},"Lines will wrap at `#editor.wordWrapColumn#`."),n.N({key:"wordWrap.bounded",comment:["- viewport means the edge of the visible window size.","- `editor.wordWrapColumn` refers to a different setting and should not be localized."]},"Lines will wrap at the minimum of viewport and `#editor.wordWrapColumn#`.")],description:n.N({key:"wordWrap",comment:["- 'off', 'on', 'wordWrapColumn' and 'bounded' refer to values the setting can take and should not be localized.","- `editor.wordWrapColumn` refers to a different setting and should not be localized."]},"Controls how lines should wrap.")})),wordWrapBreakAfterCharacters:M(new _(117,"wordWrapBreakAfterCharacters"," \t})]?|/&.,;Â¢Â°â€²â€³â€°â„ƒã€ã€‚ï½¡ï½¤ï¿ ï¼Œï¼Žï¼šï¼›ï¼Ÿï¼ï¼…ãƒ»ï½¥ã‚ã‚žãƒ½ãƒ¾ãƒ¼ã‚¡ã‚£ã‚¥ã‚§ã‚©ãƒƒãƒ£ãƒ¥ãƒ§ãƒ®ãƒµãƒ¶ããƒã…ã‡ã‰ã£ã‚ƒã‚…ã‚‡ã‚Žã‚•ã‚–ã‡°ã‡±ã‡²ã‡³ã‡´ã‡µã‡¶ã‡·ã‡¸ã‡¹ã‡ºã‡»ã‡¼ã‡½ã‡¾ã‡¿ã€…ã€»ï½§ï½¨ï½©ï½ªï½«ï½¬ï½­ï½®ï½¯ï½°â€ã€‰ã€‹ã€ã€ã€‘ã€•ï¼‰ï¼½ï½ï½£")),wordWrapBreakBeforeCharacters:M(new _(118,"wordWrapBreakBeforeCharacters","([{â€˜â€œã€ˆã€Šã€Œã€Žã€ã€”ï¼ˆï¼»ï½›ï½¢Â£Â¥ï¼„ï¿¡ï¿¥+ï¼‹")),wordWrapColumn:M(new m(119,"wordWrapColumn",80,1,1073741824,{markdownDescription:n.N({key:"wordWrapColumn",comment:["- `editor.wordWrap` refers to a different setting and should not be localized.","- 'wordWrapColumn' and 'bounded' refer to values the different setting can take and should not be localized."]},"Controls the wrapping column of the editor when `#editor.wordWrap#` is `wordWrapColumn` or `bounded`.")})),wordWrapOverride1:M(new w(120,"wordWrapOverride1","inherit",["off","on","inherit"])),wordWrapOverride2:M(new w(121,"wordWrapOverride2","inherit",["off","on","inherit"])),wrappingIndent:M(new y(122,"wrappingIndent",1,"same",["none","same","indent","deepIndent"],(function(e){switch(e){case"none":return 0;case"same":return 1;case"indent":return 2;case"deepIndent":return 3}}),{enumDescriptions:[n.N("wrappingIndent.none","No indentation. Wrapped lines begin at column 1."),n.N("wrappingIndent.same","Wrapped lines get the same indentation as the parent."),n.N("wrappingIndent.indent","Wrapped lines get +1 indentation toward the parent."),n.N("wrappingIndent.deepIndent","Wrapped lines get +2 indentation toward the parent.")],description:n.N("wrappingIndent","Controls the indentation of wrapped lines.")})),wrappingStrategy:M(new w(123,"wrappingStrategy","simple",["simple","advanced"],{enumDescriptions:[n.N("wrappingStrategy.simple","Assumes that all characters are of the same width. This is a fast algorithm that works correctly for monospace fonts and certain scripts (like Latin characters) where glyphs are of equal width."),n.N("wrappingStrategy.advanced","Delegates wrapping points computation to the browser. This is a slow algorithm, that might cause freezes for large files, but it works correctly in all cases.")],description:n.N("wrappingStrategy","Controls the algorithm that computes wrapping points.")})),editorClassName:M(new class extends h{constructor(){super(126,[65,33])}compute(e,t,i){const n=["monaco-editor"];return t.get(33)&&n.push(t.get(33)),e.extraEditorClassName&&n.push(e.extraEditorClassName),"default"===t.get(65)?n.push("mouse-default"):"copy"===t.get(65)&&n.push("mouse-copy"),t.get(99)&&n.push("showUnused"),t.get(124)&&n.push("showDeprecated"),n.join(" ")}}),pixelRatio:M(new class extends h{constructor(){super(127)}compute(e,t,i){return e.pixelRatio}}),tabFocusMode:M(new class extends h{constructor(){super(128,[80])}compute(e,t,i){return!!t.get(80)||e.tabFocusMode}}),layoutInfo:M(new k),wrappingInfo:M(new class extends h{constructor(){super(130,[129])}compute(e,t,i){const n=t.get(129);return{isDominatedByLongLines:e.isDominatedByLongLines,isWordWrapMinified:n.isWordWrapMinified,isViewportWrapping:n.isViewportWrapping,wrappingColumn:n.wrappingColumn}}})}},82334:(e,t,i)=>{"use strict";i.d(t,{C:()=>o});var n=i(4669);const o=new class{constructor(){this._zoomLevel=0,this._onDidChangeZoomLevel=new n.Q5,this.onDidChangeZoomLevel=this._onDidChangeZoomLevel.event}getZoomLevel(){return this._zoomLevel}setZoomLevel(e){e=Math.min(Math.max(-5,e),20),this._zoomLevel!==e&&(this._zoomLevel=e,this._onDidChangeZoomLevel.fire(this._zoomLevel))}}},27374:(e,t,i)=>{"use strict";i.d(t,{E4:()=>r,pR:()=>a});var n=i(1432),o=i(82334);const s=n.dz?1.5:1.35;class r{constructor(e){this._bareFontInfoBrand=void 0,this.zoomLevel=e.zoomLevel,this.pixelRatio=e.pixelRatio,this.fontFamily=String(e.fontFamily),this.fontWeight=String(e.fontWeight),this.fontSize=e.fontSize,this.fontFeatureSettings=e.fontFeatureSettings,this.lineHeight=0|e.lineHeight,this.letterSpacing=e.letterSpacing}static createFromValidatedSettings(e,t,i,n){const o=e.get(42),s=e.get(46),a=e.get(45),l=e.get(44),c=e.get(58),d=e.get(55);return r._create(o,s,a,l,c,d,t,i,n)}static _create(e,t,i,n,a,l,c,d,h){0===a?a=s*i:a<8&&(a*=i),(a=Math.round(a))<8&&(a=8);const u=1+(h?0:.1*o.C.getZoomLevel());return new r({zoomLevel:c,pixelRatio:d,fontFamily:e,fontWeight:t,fontSize:i*=u,fontFeatureSettings:n,lineHeight:a*=u,letterSpacing:l})}getId(){return this.zoomLevel+"-"+this.pixelRatio+"-"+this.fontFamily+"-"+this.fontWeight+"-"+this.fontSize+"-"+this.fontFeatureSettings+"-"+this.lineHeight+"-"+this.letterSpacing}getMassagedFontFamily(e){const t=r._wrapInQuotes(this.fontFamily);return e&&this.fontFamily!==e?`${t}, ${e}`:t}static _wrapInQuotes(e){return/[,"']/.test(e)?e:/[+ ]/.test(e)?`"${e}"`:e}}class a extends r{constructor(e,t){super(e),this._editorStylingBrand=void 0,this.version=1,this.isTrusted=t,this.isMonospace=e.isMonospace,this.typicalHalfwidthCharacterWidth=e.typicalHalfwidthCharacterWidth,this.typicalFullwidthCharacterWidth=e.typicalFullwidthCharacterWidth,this.canUseHalfwidthRightwardsArrow=e.canUseHalfwidthRightwardsArrow,this.spaceWidth=e.spaceWidth,this.middotWidth=e.middotWidth,this.wsmiddotWidth=e.wsmiddotWidth,this.maxDigitWidth=e.maxDigitWidth}equals(e){return this.fontFamily===e.fontFamily&&this.fontWeight===e.fontWeight&&this.fontSize===e.fontSize&&this.fontFeatureSettings===e.fontFeatureSettings&&this.lineHeight===e.lineHeight&&this.letterSpacing===e.letterSpacing&&this.typicalHalfwidthCharacterWidth===e.typicalHalfwidthCharacterWidth&&this.typicalFullwidthCharacterWidth===e.typicalFullwidthCharacterWidth&&this.canUseHalfwidthRightwardsArrow===e.canUseHalfwidthRightwardsArrow&&this.spaceWidth===e.spaceWidth&&this.middotWidth===e.middotWidth&&this.wsmiddotWidth===e.wsmiddotWidth&&this.maxDigitWidth===e.maxDigitWidth}}},3675:(e,t,i)=>{"use strict";i.d(t,{l:()=>o});var n=i(33181);class o{static whitespaceVisibleColumn(e,t,i){const o=e.length;let s=0,r=-1,a=-1;for(let l=0;l<o;l++){if(l===t)return[r,a,s];s%i==0&&(r=l,a=s);switch(e.charCodeAt(l)){case 32:s+=1;break;case 9:s=n.io.nextRenderTabStop(s,i);break;default:return[-1,-1,-1]}}return t===o?[r,a,s]:[-1,-1,-1]}static atomicPosition(e,t,i,s){const r=e.length,[a,l,c]=o.whitespaceVisibleColumn(e,t,i);if(-1===c)return-1;let d;switch(s){case 0:d=!0;break;case 1:d=!1;break;case 2:if(c%i==0)return t;d=c%i<=i/2}if(d){if(-1===a)return-1;let t=l;for(let o=a;o<r;++o){if(t===l+i)return a;switch(e.charCodeAt(o)){case 32:t+=1;break;case 9:t=n.io.nextRenderTabStop(t,i);break;default:return-1}}return t===l+i?a:-1}const h=n.io.nextRenderTabStop(c,i);let u=c;for(let o=t;o<r;o++){if(u===h)return o;switch(e.charCodeAt(o)){case 32:u+=1;break;case 9:u=n.io.nextRenderTabStop(u,i);break;default:return-1}}return u===h?r:-1}}},47707:(e,t,i)=>{"use strict";i.d(t,{i:()=>o});var n=i(97295);class o{static visibleColumnFromColumn(e,t,i){const s=e.length,r=t-1<s?t-1:s;let a=0,l=0;for(;l<r;){const t=n.ZH(e,r,l);if(l+=t>=65536?2:1,9===t)a=o.nextRenderTabStop(a,i);else{let i=n.S6(t);for(;l<r;){const t=n.ZH(e,r,l),o=n.S6(t);if(n.fi(i,o))break;l+=t>=65536?2:1,i=o}n.K7(t)||n.C8(t)?a+=2:a+=1}}return a}static visibleColumnsByColumns(e,t){const i=e.length;let s=new Array;s.push(-1);let r=0,a=0;for(;a<i;){const l=n.ZH(e,i,a);if(a+=l>=65536?2:1,s.push(r),l>=65536&&s.push(r),9===l)r=o.nextRenderTabStop(r,t);else{let t=n.S6(l);for(;a<i;){const o=n.ZH(e,i,a),c=n.S6(o);if(n.fi(t,c))break;a+=o>=65536?2:1,s.push(r),l>=65536&&s.push(r),t=c}n.K7(l)||n.C8(l)?r+=2:r+=1}}return s.push(r),s}static visibleColumnFromColumn2(e,t,i){return this.visibleColumnFromColumn(t.getLineContent(i.lineNumber),i.column,e.tabSize)}static columnFromVisibleColumn(e,t,i){if(t<=0)return 1;const s=e.length;let r=0,a=1,l=0;for(;l<s;){const c=n.ZH(e,s,l);let d;if(l+=c>=65536?2:1,9===c)d=o.nextRenderTabStop(r,i);else{let t=n.S6(c);for(;l<s;){const i=n.ZH(e,s,l),o=n.S6(i);if(n.fi(t,o))break;l+=i>=65536?2:1,t=o}d=n.K7(c)||n.C8(c)?r+2:r+1}const h=l+1;if(d>=t){return d-t<t-r?h:a}r=d,a=h}return s+1}static columnFromVisibleColumn2(e,t,i,n){let o=this.columnFromVisibleColumn(t.getLineContent(i),n,e.tabSize),s=t.getLineMinColumn(i);if(o<s)return s;let r=t.getLineMaxColumn(i);return o>r?r:o}static nextRenderTabStop(e,t){return e+t-e%t}static nextIndentTabStop(e,t){return e+t-e%t}static prevRenderTabStop(e,t){return Math.max(0,e-1-(e-1)%t)}static prevIndentTabStop(e,t){return Math.max(0,e-1-(e-1)%t)}}},33181:(e,t,i)=>{"use strict";i.d(t,{LM:()=>g,LN:()=>w,Tp:()=>b,Vi:()=>_,io:()=>c.i,rS:()=>p,zp:()=>f});var n=i(17301),o=i(50187),s=i(24314),r=i(3860),a=i(44174),l=i(83831),c=i(47707);const d=()=>!0,h=()=>!1,u=e=>" "===e||"\t"===e;class g{constructor(e,t,i){this._cursorMoveConfigurationBrand=void 0,this._languageId=e;const n=i.options,o=n.get(129);this.readOnly=n.get(80),this.tabSize=t.tabSize,this.indentSize=t.indentSize,this.insertSpaces=t.insertSpaces,this.stickyTabStops=n.get(103),this.lineHeight=n.get(58),this.pageSize=Math.max(1,Math.floor(o.height/this.lineHeight)-2),this.useTabStops=n.get(114),this.wordSeparators=n.get(115),this.emptySelectionClipboard=n.get(32),this.copyWithSyntaxHighlighting=n.get(21),this.multiCursorMergeOverlapping=n.get(68),this.multiCursorPaste=n.get(70),this.autoClosingBrackets=n.get(5),this.autoClosingQuotes=n.get(8),this.autoClosingDelete=n.get(6),this.autoClosingOvertype=n.get(7),this.autoSurround=n.get(11),this.autoIndent=n.get(9),this.surroundingPairs={},this._electricChars=null,this.shouldAutoCloseBefore={quote:g._getShouldAutoClose(e,this.autoClosingQuotes),bracket:g._getShouldAutoClose(e,this.autoClosingBrackets)},this.autoClosingPairs=l.zu.getAutoClosingPairs(e);let s=g._getSurroundingPairs(e);if(s)for(const e of s)this.surroundingPairs[e.open]=e.close}static shouldRecreate(e){return e.hasChanged(129)||e.hasChanged(115)||e.hasChanged(32)||e.hasChanged(68)||e.hasChanged(70)||e.hasChanged(5)||e.hasChanged(8)||e.hasChanged(6)||e.hasChanged(7)||e.hasChanged(11)||e.hasChanged(114)||e.hasChanged(58)||e.hasChanged(80)}get electricChars(){if(!this._electricChars){this._electricChars={};let e=g._getElectricCharacters(this._languageId);if(e)for(const t of e)this._electricChars[t]=!0}return this._electricChars}normalizeIndentation(e){return a.yO.normalizeIndentation(e,this.indentSize,this.insertSpaces)}static _getElectricCharacters(e){try{return l.zu.getElectricCharacters(e)}catch(e){return(0,n.dL)(e),null}}static _getShouldAutoClose(e,t){switch(t){case"beforeWhitespace":return u;case"languageDefined":return g._getLanguageDefinedShouldAutoClose(e);case"always":return d;case"never":return h}}static _getLanguageDefinedShouldAutoClose(e){try{const t=l.zu.getAutoCloseBeforeSet(e);return e=>-1!==t.indexOf(e)}catch(e){return(0,n.dL)(e),h}}static _getSurroundingPairs(e){try{return l.zu.getSurroundingPairs(e)}catch(e){return(0,n.dL)(e),null}}}class p{constructor(e,t,i,n){this._singleCursorStateBrand=void 0,this.selectionStart=e,this.selectionStartLeftoverVisibleColumns=t,this.position=i,this.leftoverVisibleColumns=n,this.selection=p._computeSelection(this.selectionStart,this.position)}equals(e){return this.selectionStartLeftoverVisibleColumns===e.selectionStartLeftoverVisibleColumns&&this.leftoverVisibleColumns===e.leftoverVisibleColumns&&this.position.equals(e.position)&&this.selectionStart.equalsRange(e.selectionStart)}hasSelection(){return!this.selection.isEmpty()||!this.selectionStart.isEmpty()}move(e,t,i,n){return e?new p(this.selectionStart,this.selectionStartLeftoverVisibleColumns,new o.L(t,i),n):new p(new s.e(t,i,t,i),n,new o.L(t,i),n)}static _computeSelection(e,t){let i,n,o,s;return e.isEmpty()?(i=e.startLineNumber,n=e.startColumn,o=t.lineNumber,s=t.column):t.isBeforeOrEqual(e.getStartPosition())?(i=e.endLineNumber,n=e.endColumn,o=t.lineNumber,s=t.column):(i=e.startLineNumber,n=e.startColumn,o=t.lineNumber,s=t.column),new r.Y(i,n,o,s)}}class f{constructor(e,t,i,n){this._cursorContextBrand=void 0,this.model=e,this.viewModel=t,this.coordinatesConverter=i,this.cursorConfig=n}}class m{constructor(e){this.modelState=e,this.viewState=null}}class v{constructor(e){this.modelState=null,this.viewState=e}}class _{constructor(e,t){this._cursorStateBrand=void 0,this.modelState=e,this.viewState=t}static fromModelState(e){return new m(e)}static fromViewState(e){return new v(e)}static fromModelSelection(e){const t=e.selectionStartLineNumber,i=e.selectionStartColumn,n=e.positionLineNumber,r=e.positionColumn,a=new p(new s.e(t,i,t,i),0,new o.L(n,r),0);return _.fromModelState(a)}static fromModelSelections(e){let t=[];for(let i=0,n=e.length;i<n;i++)t[i]=this.fromModelSelection(e[i]);return t}equals(e){return this.viewState.equals(e.viewState)&&this.modelState.equals(e.modelState)}}class b{constructor(e,t,i){this._editOperationResultBrand=void 0,this.type=e,this.commands=t,this.shouldPushStackElementBefore=i.shouldPushStackElementBefore,this.shouldPushStackElementAfter=i.shouldPushStackElementAfter}}function w(e){return"'"===e||'"'===e||"`"===e}},31380:(e,t,i)=>{"use strict";i.d(t,{A:()=>c});var n=i(97295),o=i(61329),s=i(33181),r=i(88784),a=i(24314),l=i(50187);class c{static deleteRight(e,t,i,n){let s=[],l=3!==e;for(let e=0,c=n.length;e<c;e++){const c=n[e];let d=c;if(d.isEmpty()){let e=c.getPosition(),n=r.o.right(t,i,e);d=new a.e(n.lineNumber,n.column,e.lineNumber,e.column)}d.isEmpty()?s[e]=null:(d.startLineNumber!==d.endLineNumber&&(l=!0),s[e]=new o.T4(d,""))}return[l,s]}static isAutoClosingPairDelete(e,t,i,n,o,r,a){if("never"===t&&"never"===i)return!1;if("never"===e)return!1;for(let l=0,c=r.length;l<c;l++){const c=r[l],d=c.getPosition();if(!c.isEmpty())return!1;const h=o.getLineContent(d.lineNumber);if(d.column<2||d.column>=h.length+1)return!1;const u=h.charAt(d.column-2),g=n.get(u);if(!g)return!1;if((0,s.LN)(u)){if("never"===i)return!1}else if("never"===t)return!1;const p=h.charAt(d.column-1);let f=!1;for(const e of g)e.open===u&&e.close===p&&(f=!0);if(!f)return!1;if("auto"===e){let e=!1;for(let t=0,i=a.length;t<i;t++){const i=a[t];if(d.lineNumber===i.startLineNumber&&d.column===i.startColumn){e=!0;break}}if(!e)return!1}}return!0}static _runAutoClosingPairDelete(e,t,i){let n=[];for(let e=0,t=i.length;e<t;e++){const t=i[e].getPosition(),s=new a.e(t.lineNumber,t.column-1,t.lineNumber,t.column+1);n[e]=new o.T4(s,"")}return[!0,n]}static deleteLeft(e,t,i,n,s){if(this.isAutoClosingPairDelete(t.autoClosingDelete,t.autoClosingBrackets,t.autoClosingQuotes,t.autoClosingPairs.autoClosingPairsOpenByEnd,i,n,s))return this._runAutoClosingPairDelete(t,i,n);const r=[];let a=2!==e;for(let e=0,s=n.length;e<s;e++){let s=c.getDeleteRange(n[e],i,t);s.isEmpty()?r[e]=null:(s.startLineNumber!==s.endLineNumber&&(a=!0),r[e]=new o.T4(s,""))}return[a,r]}static getDeleteRange(e,t,i){if(!e.isEmpty())return e;const o=e.getPosition();if(i.useTabStops&&o.column>1){const e=t.getLineContent(o.lineNumber),r=n.LC(e),l=-1===r?e.length+1:r+1;if(o.column<=l){const e=s.io.visibleColumnFromColumn2(i,t,o),n=s.io.prevIndentTabStop(e,i.indentSize),r=s.io.columnFromVisibleColumn2(i,t,o.lineNumber,n);return new a.e(o.lineNumber,r,o.lineNumber,o.column)}}return a.e.fromPositions(c.getPositionAfterDeleteLeft(o,t),o)}static getPositionAfterDeleteLeft(e,t){if(e.column>1){const i=n.oH(e.column-1,t.getLineContent(e.lineNumber));return e.with(void 0,i+1)}if(e.lineNumber>1){const i=e.lineNumber-1;return new l.L(i,t.getLineMaxColumn(i))}return e}static cut(e,t,i){let n=[],r=null;i.sort(((e,t)=>l.L.compare(e.getStartPosition(),t.getEndPosition())));for(let s=0,l=i.length;s<l;s++){const l=i[s];if(l.isEmpty())if(e.emptySelectionClipboard){let e,i,c,d,h=l.getPosition();h.lineNumber<t.getLineCount()?(e=h.lineNumber,i=1,c=h.lineNumber+1,d=1):h.lineNumber>1&&(null==r?void 0:r.endLineNumber)!==h.lineNumber?(e=h.lineNumber-1,i=t.getLineMaxColumn(h.lineNumber-1),c=h.lineNumber,d=t.getLineMaxColumn(h.lineNumber)):(e=h.lineNumber,i=1,c=h.lineNumber,d=t.getLineMaxColumn(h.lineNumber));let u=new a.e(e,i,c,d);r=u,u.isEmpty()?n[s]=null:n[s]=new o.T4(u,"")}else n[s]=null;else n[s]=new o.T4(l,"")}return new s.Tp(0,n,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}}},83814:(e,t,i)=>{"use strict";i.d(t,{N:()=>n,P:()=>d});var n,o=i(98401),s=i(33181),r=i(88784),a=i(5795),l=i(50187),c=i(24314);class d{static addCursorDown(e,t,i){let n=[],o=0;for(let a=0,l=t.length;a<l;a++){const l=t[a];n[o++]=new s.Vi(l.modelState,l.viewState),n[o++]=i?s.Vi.fromModelState(r.o.translateDown(e.cursorConfig,e.model,l.modelState)):s.Vi.fromViewState(r.o.translateDown(e.cursorConfig,e,l.viewState))}return n}static addCursorUp(e,t,i){let n=[],o=0;for(let a=0,l=t.length;a<l;a++){const l=t[a];n[o++]=new s.Vi(l.modelState,l.viewState),n[o++]=i?s.Vi.fromModelState(r.o.translateUp(e.cursorConfig,e.model,l.modelState)):s.Vi.fromViewState(r.o.translateUp(e.cursorConfig,e,l.viewState))}return n}static moveToBeginningOfLine(e,t,i){let n=[];for(let o=0,s=t.length;o<s;o++){const s=t[o];n[o]=this._moveToLineStart(e,s,i)}return n}static _moveToLineStart(e,t,i){const n=t.viewState.position.column,o=n===t.modelState.position.column,s=t.viewState.position.lineNumber,r=e.getLineFirstNonWhitespaceColumn(s);return o||n===r?this._moveToLineStartByModel(e,t,i):this._moveToLineStartByView(e,t,i)}static _moveToLineStartByView(e,t,i){return s.Vi.fromViewState(r.o.moveToBeginningOfLine(e.cursorConfig,e,t.viewState,i))}static _moveToLineStartByModel(e,t,i){return s.Vi.fromModelState(r.o.moveToBeginningOfLine(e.cursorConfig,e.model,t.modelState,i))}static moveToEndOfLine(e,t,i,n){let o=[];for(let s=0,r=t.length;s<r;s++){const r=t[s];o[s]=this._moveToLineEnd(e,r,i,n)}return o}static _moveToLineEnd(e,t,i,n){const o=t.viewState.position,s=e.getLineMaxColumn(o.lineNumber),r=o.column===s,a=t.modelState.position,l=e.model.getLineMaxColumn(a.lineNumber),c=s-o.column==l-a.column;return r||c?this._moveToLineEndByModel(e,t,i,n):this._moveToLineEndByView(e,t,i,n)}static _moveToLineEndByView(e,t,i,n){return s.Vi.fromViewState(r.o.moveToEndOfLine(e.cursorConfig,e,t.viewState,i,n))}static _moveToLineEndByModel(e,t,i,n){return s.Vi.fromModelState(r.o.moveToEndOfLine(e.cursorConfig,e.model,t.modelState,i,n))}static expandLineSelection(e,t){let i=[];for(let n=0,o=t.length;n<o;n++){const o=t[n],r=o.modelState.selection.startLineNumber,a=e.model.getLineCount();let d,h=o.modelState.selection.endLineNumber;h===a?d=e.model.getLineMaxColumn(a):(h++,d=1),i[n]=s.Vi.fromModelState(new s.rS(new c.e(r,1,r,1),0,new l.L(h,d),0))}return i}static moveToBeginningOfBuffer(e,t,i){let n=[];for(let o=0,a=t.length;o<a;o++){const a=t[o];n[o]=s.Vi.fromModelState(r.o.moveToBeginningOfBuffer(e.cursorConfig,e.model,a.modelState,i))}return n}static moveToEndOfBuffer(e,t,i){let n=[];for(let o=0,a=t.length;o<a;o++){const a=t[o];n[o]=s.Vi.fromModelState(r.o.moveToEndOfBuffer(e.cursorConfig,e.model,a.modelState,i))}return n}static selectAll(e,t){const i=e.model.getLineCount(),n=e.model.getLineMaxColumn(i);return s.Vi.fromModelState(new s.rS(new c.e(1,1,1,1),0,new l.L(i,n),0))}static line(e,t,i,n,o){const r=e.model.validatePosition(n),a=o?e.coordinatesConverter.validateViewPosition(new l.L(o.lineNumber,o.column),r):e.coordinatesConverter.convertModelPositionToViewPosition(r);if(!i||!t.modelState.hasSelection()){const t=e.model.getLineCount();let i=r.lineNumber+1,n=1;return i>t&&(i=t,n=e.model.getLineMaxColumn(i)),s.Vi.fromModelState(new s.rS(new c.e(r.lineNumber,1,i,n),0,new l.L(i,n),0))}const d=t.modelState.selectionStart.getStartPosition().lineNumber;if(r.lineNumber<d)return s.Vi.fromViewState(t.viewState.move(t.modelState.hasSelection(),a.lineNumber,1,0));if(r.lineNumber>d){const i=e.getLineCount();let n=a.lineNumber+1,o=1;return n>i&&(n=i,o=e.getLineMaxColumn(n)),s.Vi.fromViewState(t.viewState.move(t.modelState.hasSelection(),n,o,0))}{const e=t.modelState.selectionStart.getEndPosition();return s.Vi.fromModelState(t.modelState.move(t.modelState.hasSelection(),e.lineNumber,e.column,0))}}static word(e,t,i,n){const o=e.model.validatePosition(n);return s.Vi.fromModelState(a.w.word(e.cursorConfig,e.model,t.modelState,i,o))}static cancelSelection(e,t){if(!t.modelState.hasSelection())return new s.Vi(t.modelState,t.viewState);const i=t.viewState.position.lineNumber,n=t.viewState.position.column;return s.Vi.fromViewState(new s.rS(new c.e(i,n,i,n),0,new l.L(i,n),0))}static moveTo(e,t,i,n,o){const r=e.model.validatePosition(n),a=o?e.coordinatesConverter.validateViewPosition(new l.L(o.lineNumber,o.column),r):e.coordinatesConverter.convertModelPositionToViewPosition(r);return s.Vi.fromViewState(t.viewState.move(i,a.lineNumber,a.column,0))}static simpleMove(e,t,i,n,o,a){switch(i){case 0:return 4===a?this._moveHalfLineLeft(e,t,n):this._moveLeft(e,t,n,o);case 1:return 4===a?this._moveHalfLineRight(e,t,n):this._moveRight(e,t,n,o);case 2:return 2===a?this._moveUpByViewLines(e,t,n,o):this._moveUpByModelLines(e,t,n,o);case 3:return 2===a?this._moveDownByViewLines(e,t,n,o):this._moveDownByModelLines(e,t,n,o);case 4:return 2===a?t.map((t=>s.Vi.fromViewState(r.o.moveToPrevBlankLine(e.cursorConfig,e,t.viewState,n)))):t.map((t=>s.Vi.fromModelState(r.o.moveToPrevBlankLine(e.cursorConfig,e.model,t.modelState,n))));case 5:return 2===a?t.map((t=>s.Vi.fromViewState(r.o.moveToNextBlankLine(e.cursorConfig,e,t.viewState,n)))):t.map((t=>s.Vi.fromModelState(r.o.moveToNextBlankLine(e.cursorConfig,e.model,t.modelState,n))));case 6:return this._moveToViewMinColumn(e,t,n);case 7:return this._moveToViewFirstNonWhitespaceColumn(e,t,n);case 8:return this._moveToViewCenterColumn(e,t,n);case 9:return this._moveToViewMaxColumn(e,t,n);case 10:return this._moveToViewLastNonWhitespaceColumn(e,t,n);default:return null}}static viewportMove(e,t,i,n,o){const s=e.getCompletelyVisibleViewRange(),r=e.coordinatesConverter.convertViewRangeToModelRange(s);switch(i){case 11:{const i=this._firstLineNumberInRange(e.model,r,o),s=e.model.getLineFirstNonWhitespaceColumn(i);return[this._moveToModelPosition(e,t[0],n,i,s)]}case 13:{const i=this._lastLineNumberInRange(e.model,r,o),s=e.model.getLineFirstNonWhitespaceColumn(i);return[this._moveToModelPosition(e,t[0],n,i,s)]}case 12:{const i=Math.round((r.startLineNumber+r.endLineNumber)/2),o=e.model.getLineFirstNonWhitespaceColumn(i);return[this._moveToModelPosition(e,t[0],n,i,o)]}case 14:{let i=[];for(let o=0,r=t.length;o<r;o++){const r=t[o];i[o]=this.findPositionInViewportIfOutside(e,r,s,n)}return i}default:return null}}static findPositionInViewportIfOutside(e,t,i,n){let o=t.viewState.position.lineNumber;if(i.startLineNumber<=o&&o<=i.endLineNumber-1)return new s.Vi(t.modelState,t.viewState);{let a;a=o>i.endLineNumber-1?i.endLineNumber-1:o<i.startLineNumber?i.startLineNumber:o;const l=r.o.vertical(e.cursorConfig,e,o,t.viewState.position.column,t.viewState.leftoverVisibleColumns,a,!1);return s.Vi.fromViewState(t.viewState.move(n,l.lineNumber,l.column,l.leftoverVisibleColumns))}}static _firstLineNumberInRange(e,t,i){let n=t.startLineNumber;return t.startColumn!==e.getLineMinColumn(n)&&n++,Math.min(t.endLineNumber,n+i-1)}static _lastLineNumberInRange(e,t,i){let n=t.startLineNumber;return t.startColumn!==e.getLineMinColumn(n)&&n++,Math.max(n,t.endLineNumber-i+1)}static _moveLeft(e,t,i,n){return t.map((t=>s.Vi.fromViewState(r.o.moveLeft(e.cursorConfig,e,t.viewState,i,n))))}static _moveHalfLineLeft(e,t,i){let n=[];for(let o=0,a=t.length;o<a;o++){const a=t[o],l=a.viewState.position.lineNumber,c=Math.round(e.getLineContent(l).length/2);n[o]=s.Vi.fromViewState(r.o.moveLeft(e.cursorConfig,e,a.viewState,i,c))}return n}static _moveRight(e,t,i,n){return t.map((t=>s.Vi.fromViewState(r.o.moveRight(e.cursorConfig,e,t.viewState,i,n))))}static _moveHalfLineRight(e,t,i){let n=[];for(let o=0,a=t.length;o<a;o++){const a=t[o],l=a.viewState.position.lineNumber,c=Math.round(e.getLineContent(l).length/2);n[o]=s.Vi.fromViewState(r.o.moveRight(e.cursorConfig,e,a.viewState,i,c))}return n}static _moveDownByViewLines(e,t,i,n){let o=[];for(let a=0,l=t.length;a<l;a++){const l=t[a];o[a]=s.Vi.fromViewState(r.o.moveDown(e.cursorConfig,e,l.viewState,i,n))}return o}static _moveDownByModelLines(e,t,i,n){let o=[];for(let a=0,l=t.length;a<l;a++){const l=t[a];o[a]=s.Vi.fromModelState(r.o.moveDown(e.cursorConfig,e.model,l.modelState,i,n))}return o}static _moveUpByViewLines(e,t,i,n){let o=[];for(let a=0,l=t.length;a<l;a++){const l=t[a];o[a]=s.Vi.fromViewState(r.o.moveUp(e.cursorConfig,e,l.viewState,i,n))}return o}static _moveUpByModelLines(e,t,i,n){let o=[];for(let a=0,l=t.length;a<l;a++){const l=t[a];o[a]=s.Vi.fromModelState(r.o.moveUp(e.cursorConfig,e.model,l.modelState,i,n))}return o}static _moveToViewPosition(e,t,i,n,o){return s.Vi.fromViewState(t.viewState.move(i,n,o,0))}static _moveToModelPosition(e,t,i,n,o){return s.Vi.fromModelState(t.modelState.move(i,n,o,0))}static _moveToViewMinColumn(e,t,i){let n=[];for(let o=0,s=t.length;o<s;o++){const s=t[o],r=s.viewState.position.lineNumber,a=e.getLineMinColumn(r);n[o]=this._moveToViewPosition(e,s,i,r,a)}return n}static _moveToViewFirstNonWhitespaceColumn(e,t,i){let n=[];for(let o=0,s=t.length;o<s;o++){const s=t[o],r=s.viewState.position.lineNumber,a=e.getLineFirstNonWhitespaceColumn(r);n[o]=this._moveToViewPosition(e,s,i,r,a)}return n}static _moveToViewCenterColumn(e,t,i){let n=[];for(let o=0,s=t.length;o<s;o++){const s=t[o],r=s.viewState.position.lineNumber,a=Math.round((e.getLineMaxColumn(r)+e.getLineMinColumn(r))/2);n[o]=this._moveToViewPosition(e,s,i,r,a)}return n}static _moveToViewMaxColumn(e,t,i){let n=[];for(let o=0,s=t.length;o<s;o++){const s=t[o],r=s.viewState.position.lineNumber,a=e.getLineMaxColumn(r);n[o]=this._moveToViewPosition(e,s,i,r,a)}return n}static _moveToViewLastNonWhitespaceColumn(e,t,i){let n=[];for(let o=0,s=t.length;o<s;o++){const s=t[o],r=s.viewState.position.lineNumber,a=e.getLineLastNonWhitespaceColumn(r);n[o]=this._moveToViewPosition(e,s,i,r,a)}return n}}!function(e){e.description={description:"Move cursor to a logical position in the view",args:[{name:"Cursor move argument object",description:"Property-value pairs that can be passed through this argument:\n\t\t\t\t\t* 'to': A mandatory logical position value providing where to move the cursor.\n\t\t\t\t\t\t```\n\t\t\t\t\t\t'left', 'right', 'up', 'down', 'prevBlankLine', 'nextBlankLine',\n\t\t\t\t\t\t'wrappedLineStart', 'wrappedLineEnd', 'wrappedLineColumnCenter'\n\t\t\t\t\t\t'wrappedLineFirstNonWhitespaceCharacter', 'wrappedLineLastNonWhitespaceCharacter'\n\t\t\t\t\t\t'viewPortTop', 'viewPortCenter', 'viewPortBottom', 'viewPortIfOutside'\n\t\t\t\t\t\t```\n\t\t\t\t\t* 'by': Unit to move. Default is computed based on 'to' value.\n\t\t\t\t\t\t```\n\t\t\t\t\t\t'line', 'wrappedLine', 'character', 'halfLine'\n\t\t\t\t\t\t```\n\t\t\t\t\t* 'value': Number of units to move. Default is '1'.\n\t\t\t\t\t* 'select': If 'true' makes the selection. Default is 'false'.\n\t\t\t\t",constraint:function(e){if(!o.Kn(e))return!1;let t=e;return!!o.HD(t.to)&&(!(!o.o8(t.select)&&!o.jn(t.select))&&(!(!o.o8(t.by)&&!o.HD(t.by))&&!(!o.o8(t.value)&&!o.hj(t.value))))},schema:{type:"object",required:["to"],properties:{to:{type:"string",enum:["left","right","up","down","prevBlankLine","nextBlankLine","wrappedLineStart","wrappedLineEnd","wrappedLineColumnCenter","wrappedLineFirstNonWhitespaceCharacter","wrappedLineLastNonWhitespaceCharacter","viewPortTop","viewPortCenter","viewPortBottom","viewPortIfOutside"]},by:{type:"string",enum:["line","wrappedLine","character","halfLine"]},value:{type:"number",default:1},select:{type:"boolean",default:!1}}}}]},e.RawDirection={Left:"left",Right:"right",Up:"up",Down:"down",PrevBlankLine:"prevBlankLine",NextBlankLine:"nextBlankLine",WrappedLineStart:"wrappedLineStart",WrappedLineFirstNonWhitespaceCharacter:"wrappedLineFirstNonWhitespaceCharacter",WrappedLineColumnCenter:"wrappedLineColumnCenter",WrappedLineEnd:"wrappedLineEnd",WrappedLineLastNonWhitespaceCharacter:"wrappedLineLastNonWhitespaceCharacter",ViewPortTop:"viewPortTop",ViewPortCenter:"viewPortCenter",ViewPortBottom:"viewPortBottom",ViewPortIfOutside:"viewPortIfOutside"},e.RawUnit={Line:"line",WrappedLine:"wrappedLine",Character:"character",HalfLine:"halfLine"},e.parse=function(t){if(!t.to)return null;let i;switch(t.to){case e.RawDirection.Left:i=0;break;case e.RawDirection.Right:i=1;break;case e.RawDirection.Up:i=2;break;case e.RawDirection.Down:i=3;break;case e.RawDirection.PrevBlankLine:i=4;break;case e.RawDirection.NextBlankLine:i=5;break;case e.RawDirection.WrappedLineStart:i=6;break;case e.RawDirection.WrappedLineFirstNonWhitespaceCharacter:i=7;break;case e.RawDirection.WrappedLineColumnCenter:i=8;break;case e.RawDirection.WrappedLineEnd:i=9;break;case e.RawDirection.WrappedLineLastNonWhitespaceCharacter:i=10;break;case e.RawDirection.ViewPortTop:i=11;break;case e.RawDirection.ViewPortBottom:i=13;break;case e.RawDirection.ViewPortCenter:i=12;break;case e.RawDirection.ViewPortIfOutside:i=14;break;default:return null}let n=0;switch(t.by){case e.RawUnit.Line:n=1;break;case e.RawUnit.WrappedLine:n=2;break;case e.RawUnit.Character:n=3;break;case e.RawUnit.HalfLine:n=4}return{direction:i,unit:n,select:!!t.select,value:t.value||1}}}(n||(n={}))},88784:(e,t,i)=>{"use strict";i.d(t,{o:()=>c});var n=i(33181),o=i(50187),s=i(24314),r=i(97295),a=i(3675);class l{constructor(e,t,i){this._cursorPositionBrand=void 0,this.lineNumber=e,this.column=t,this.leftoverVisibleColumns=i}}class c{static leftPosition(e,t){if(t.column>e.getLineMinColumn(t.lineNumber))return t.delta(void 0,-r.HO(e.getLineContent(t.lineNumber),t.column-1));if(t.lineNumber>1){const i=t.lineNumber-1;return new o.L(i,e.getLineMaxColumn(i))}return t}static leftPositionAtomicSoftTabs(e,t,i){if(t.column<=e.getLineIndentColumn(t.lineNumber)){const n=e.getLineMinColumn(t.lineNumber),s=e.getLineContent(t.lineNumber),r=a.l.atomicPosition(s,t.column-1,i,0);if(-1!==r&&r+1>=n)return new o.L(t.lineNumber,r+1)}return this.leftPosition(e,t)}static left(e,t,i){const n=e.stickyTabStops?c.leftPositionAtomicSoftTabs(t,i,e.tabSize):c.leftPosition(t,i);return new l(n.lineNumber,n.column,0)}static moveLeft(e,t,i,n,o){let s,r;if(i.hasSelection()&&!n)s=i.selection.startLineNumber,r=i.selection.startColumn;else{const n=i.position.delta(void 0,-(o-1)),a=t.normalizePosition(c.clipPositionColumn(n,t),0),l=c.left(e,t,a);s=l.lineNumber,r=l.column}return i.move(n,s,r,0)}static clipPositionColumn(e,t){return new o.L(e.lineNumber,c.clipRange(e.column,t.getLineMinColumn(e.lineNumber),t.getLineMaxColumn(e.lineNumber)))}static clipRange(e,t,i){return e<t?t:e>i?i:e}static rightPosition(e,t,i){return i<e.getLineMaxColumn(t)?i+=r.vH(e.getLineContent(t),i-1):t<e.getLineCount()&&(t+=1,i=e.getLineMinColumn(t)),new o.L(t,i)}static rightPositionAtomicSoftTabs(e,t,i,n,s){if(i<e.getLineIndentColumn(t)){const s=e.getLineContent(t),r=a.l.atomicPosition(s,i-1,n,1);if(-1!==r)return new o.L(t,r+1)}return this.rightPosition(e,t,i)}static right(e,t,i){const n=e.stickyTabStops?c.rightPositionAtomicSoftTabs(t,i.lineNumber,i.column,e.tabSize,e.indentSize):c.rightPosition(t,i.lineNumber,i.column);return new l(n.lineNumber,n.column,0)}static moveRight(e,t,i,n,o){let s,r;if(i.hasSelection()&&!n)s=i.selection.endLineNumber,r=i.selection.endColumn;else{const n=i.position.delta(void 0,o-1),a=t.normalizePosition(c.clipPositionColumn(n,t),1),l=c.right(e,t,a);s=l.lineNumber,r=l.column}return i.move(n,s,r,0)}static vertical(e,t,i,o,s,r,a){const c=n.io.visibleColumnFromColumn(t.getLineContent(i),o,e.tabSize)+s,d=t.getLineCount(),h=1===i&&1===o,u=i===d&&o===t.getLineMaxColumn(i),g=r<i?h:u;return(i=r)<1?(i=1,o=a?t.getLineMinColumn(i):Math.min(t.getLineMaxColumn(i),o)):i>d?(i=d,o=a?t.getLineMaxColumn(i):Math.min(t.getLineMaxColumn(i),o)):o=n.io.columnFromVisibleColumn2(e,t,i,c),s=g?0:c-n.io.visibleColumnFromColumn(t.getLineContent(i),o,e.tabSize),new l(i,o,s)}static down(e,t,i,n,o,s,r){return this.vertical(e,t,i,n,o,i+s,r)}static moveDown(e,t,i,n,o){let s,r;i.hasSelection()&&!n?(s=i.selection.endLineNumber,r=i.selection.endColumn):(s=i.position.lineNumber,r=i.position.column);let a=c.down(e,t,s,r,i.leftoverVisibleColumns,o,!0);return i.move(n,a.lineNumber,a.column,a.leftoverVisibleColumns)}static translateDown(e,t,i){let r=i.selection,a=c.down(e,t,r.selectionStartLineNumber,r.selectionStartColumn,i.selectionStartLeftoverVisibleColumns,1,!1),l=c.down(e,t,r.positionLineNumber,r.positionColumn,i.leftoverVisibleColumns,1,!1);return new n.rS(new s.e(a.lineNumber,a.column,a.lineNumber,a.column),a.leftoverVisibleColumns,new o.L(l.lineNumber,l.column),l.leftoverVisibleColumns)}static up(e,t,i,n,o,s,r){return this.vertical(e,t,i,n,o,i-s,r)}static moveUp(e,t,i,n,o){let s,r;i.hasSelection()&&!n?(s=i.selection.startLineNumber,r=i.selection.startColumn):(s=i.position.lineNumber,r=i.position.column);let a=c.up(e,t,s,r,i.leftoverVisibleColumns,o,!0);return i.move(n,a.lineNumber,a.column,a.leftoverVisibleColumns)}static translateUp(e,t,i){let r=i.selection,a=c.up(e,t,r.selectionStartLineNumber,r.selectionStartColumn,i.selectionStartLeftoverVisibleColumns,1,!1),l=c.up(e,t,r.positionLineNumber,r.positionColumn,i.leftoverVisibleColumns,1,!1);return new n.rS(new s.e(a.lineNumber,a.column,a.lineNumber,a.column),a.leftoverVisibleColumns,new o.L(l.lineNumber,l.column),l.leftoverVisibleColumns)}static _isBlankLine(e,t){return 0===e.getLineFirstNonWhitespaceColumn(t)}static moveToPrevBlankLine(e,t,i,n){let o=i.position.lineNumber;for(;o>1&&this._isBlankLine(t,o);)o--;for(;o>1&&!this._isBlankLine(t,o);)o--;return i.move(n,o,t.getLineMinColumn(o),0)}static moveToNextBlankLine(e,t,i,n){const o=t.getLineCount();let s=i.position.lineNumber;for(;s<o&&this._isBlankLine(t,s);)s++;for(;s<o&&!this._isBlankLine(t,s);)s++;return i.move(n,s,t.getLineMinColumn(s),0)}static moveToBeginningOfLine(e,t,i,n){let o,s=i.position.lineNumber,r=t.getLineMinColumn(s),a=t.getLineFirstNonWhitespaceColumn(s)||r;return o=i.position.column===a?r:a,i.move(n,s,o,0)}static moveToEndOfLine(e,t,i,n,o){let s=i.position.lineNumber,r=t.getLineMaxColumn(s);return i.move(n,s,r,o?1073741824-r:0)}static moveToBeginningOfBuffer(e,t,i,n){return i.move(n,1,1,0)}static moveToEndOfBuffer(e,t,i,n){let o=t.getLineCount(),s=t.getLineMaxColumn(o);return i.move(n,o,s,0)}}},23582:(e,t,i)=>{"use strict";i.d(t,{u:()=>p,g:()=>f});var n=i(17301),o=i(97295),s=i(61329),r=i(10291),a=i(24314),l=i(3860);class c{constructor(e,t,i){this._range=e,this._charBeforeSelection=t,this._charAfterSelection=i}getEditOperations(e,t){t.addTrackedEditOperation(new a.e(this._range.startLineNumber,this._range.startColumn,this._range.startLineNumber,this._range.startColumn),this._charBeforeSelection),t.addTrackedEditOperation(new a.e(this._range.endLineNumber,this._range.endColumn,this._range.endLineNumber,this._range.endColumn),this._charAfterSelection)}computeCursorState(e,t){let i=t.getInverseEditOperations(),n=i[0].range,o=i[1].range;return new l.Y(n.endLineNumber,n.endColumn,o.endLineNumber,o.endColumn-this._charAfterSelection.length)}}var d=i(33181),h=i(59410),u=i(97354),g=i(83831);class p{static indent(e,t,i){if(null===t||null===i)return[];let n=[];for(let t=0,o=i.length;t<o;t++)n[t]=new r.U(i[t],{isUnshift:!1,tabSize:e.tabSize,indentSize:e.indentSize,insertSpaces:e.insertSpaces,useTabStops:e.useTabStops,autoIndent:e.autoIndent});return n}static outdent(e,t,i){let n=[];for(let t=0,o=i.length;t<o;t++)n[t]=new r.U(i[t],{isUnshift:!0,tabSize:e.tabSize,indentSize:e.indentSize,insertSpaces:e.insertSpaces,useTabStops:e.useTabStops,autoIndent:e.autoIndent});return n}static shiftIndent(e,t,i){return i=i||1,r.U.shiftIndent(t,t.length+i,e.tabSize,e.indentSize,e.insertSpaces)}static unshiftIndent(e,t,i){return i=i||1,r.U.unshiftIndent(t,t.length+i,e.tabSize,e.indentSize,e.insertSpaces)}static _distributedPaste(e,t,i,n){let o=[];for(let e=0,t=i.length;e<t;e++)o[e]=new s.T4(i[e],n[e]);return new d.Tp(0,o,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}static _simplePaste(e,t,i,n,o){let r=[];for(let e=0,t=i.length;e<t;e++){const t=i[e];let l=t.getPosition();if(o&&!t.isEmpty()&&(o=!1),o&&n.indexOf("\n")!==n.length-1&&(o=!1),o){let i=new a.e(l.lineNumber,1,l.lineNumber,1);r[e]=new s.hP(i,n,t,!0)}else r[e]=new s.T4(t,n)}return new d.Tp(0,r,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}static _distributePasteToCursors(e,t,i,n,s){if(n)return null;if(1===t.length)return null;if(s&&s.length===t.length)return s;if("spread"===e.multiCursorPaste){10===i.charCodeAt(i.length-1)&&(i=i.substr(0,i.length-1)),13===i.charCodeAt(i.length-1)&&(i=i.substr(0,i.length-1));let e=o.uq(i);if(e.length===t.length)return e}return null}static paste(e,t,i,n,o,s){const r=this._distributePasteToCursors(e,i,n,o,s);return r?(i=i.sort(a.e.compareRangesUsingStarts),this._distributedPaste(e,t,i,r)):this._simplePaste(e,t,i,n,o)}static _goodIndentForLine(e,t,i){let n=null,s="";const r=g.zu.getInheritIndentForLine(e.autoIndent,t,i,!1);if(r)n=r.action,s=r.indentation;else if(i>1){let n;for(n=i-1;n>=1;n--){const e=t.getLineContent(n);if(o.ow(e)>=0)break}if(n<1)return null;const r=t.getLineMaxColumn(n),l=g.zu.getEnterAction(e.autoIndent,t,new a.e(n,r,n,r));l&&(s=l.indentation+l.appendText)}return n&&(n===u.wU.Indent&&(s=p.shiftIndent(e,s)),n===u.wU.Outdent&&(s=p.unshiftIndent(e,s)),s=e.normalizeIndentation(s)),s||null}static _replaceJumpToNextIndent(e,t,i,n){let o="",r=i.getStartPosition();if(e.insertSpaces){let i=d.io.visibleColumnFromColumn2(e,t,r),n=e.indentSize,s=n-i%n;for(let e=0;e<s;e++)o+=" "}else o="\t";return new s.T4(i,o,n)}static tab(e,t,i){let n=[];for(let o=0,l=i.length;o<l;o++){const l=i[o];if(l.isEmpty()){let i=t.getLineContent(l.startLineNumber);if(/^\s*$/.test(i)&&t.isCheapToTokenize(l.startLineNumber)){let r=this._goodIndentForLine(e,t,l.startLineNumber);r=r||"\t";let c=e.normalizeIndentation(r);if(!i.startsWith(c)){n[o]=new s.T4(new a.e(l.startLineNumber,1,l.startLineNumber,i.length+1),c,!0);continue}}n[o]=this._replaceJumpToNextIndent(e,t,l,!0)}else{if(l.startLineNumber===l.endLineNumber){let i=t.getLineMaxColumn(l.startLineNumber);if(1!==l.startColumn||l.endColumn!==i){n[o]=this._replaceJumpToNextIndent(e,t,l,!1);continue}}n[o]=new r.U(l,{isUnshift:!1,tabSize:e.tabSize,indentSize:e.indentSize,insertSpaces:e.insertSpaces,useTabStops:e.useTabStops,autoIndent:e.autoIndent})}}return n}static compositionType(e,t,i,n,o,s,r,a){const l=n.map((e=>this._compositionType(i,e,o,s,r,a)));return new d.Tp(4,l,{shouldPushStackElementBefore:v(e,4),shouldPushStackElementAfter:!1})}static _compositionType(e,t,i,n,o,r){if(!t.isEmpty())return null;const l=t.getPosition(),c=Math.max(1,l.column-n),d=Math.min(e.getLineMaxColumn(l.lineNumber),l.column+o),h=new a.e(l.lineNumber,c,l.lineNumber,d);return e.getValueInRange(h)===i&&0===r?null:new s.Uo(h,i,0,r)}static _typeCommand(e,t,i){return i?new s.Sj(e,t,!0):new s.T4(e,t,!0)}static _enter(e,t,i,n){if(0===e.autoIndent)return p._typeCommand(n,"\n",i);if(!t.isCheapToTokenize(n.getStartPosition().lineNumber)||1===e.autoIndent){let s=t.getLineContent(n.startLineNumber),r=o.V8(s).substring(0,n.startColumn-1);return p._typeCommand(n,"\n"+e.normalizeIndentation(r),i)}const r=g.zu.getEnterAction(e.autoIndent,t,n);if(r){if(r.indentAction===u.wU.None)return p._typeCommand(n,"\n"+e.normalizeIndentation(r.indentation+r.appendText),i);if(r.indentAction===u.wU.Indent)return p._typeCommand(n,"\n"+e.normalizeIndentation(r.indentation+r.appendText),i);if(r.indentAction===u.wU.IndentOutdent){const t=e.normalizeIndentation(r.indentation),o=e.normalizeIndentation(r.indentation+r.appendText),a="\n"+o+"\n"+t;return i?new s.Sj(n,a,!0):new s.Uo(n,a,-1,o.length-t.length,!0)}if(r.indentAction===u.wU.Outdent){const t=p.unshiftIndent(e,r.indentation);return p._typeCommand(n,"\n"+e.normalizeIndentation(t+r.appendText),i)}}const a=t.getLineContent(n.startLineNumber),l=o.V8(a).substring(0,n.startColumn-1);if(e.autoIndent>=4){const r=g.zu.getIndentForEnter(e.autoIndent,t,n,{unshiftIndent:t=>p.unshiftIndent(e,t),shiftIndent:t=>p.shiftIndent(e,t),normalizeIndentation:t=>e.normalizeIndentation(t)});if(r){let a=d.io.visibleColumnFromColumn2(e,t,n.getEndPosition());const l=n.endColumn,c=t.getLineContent(n.endLineNumber),h=o.LC(c);if(n=h>=0?n.setEndPosition(n.endLineNumber,Math.max(n.endColumn,h+1)):n.setEndPosition(n.endLineNumber,t.getLineMaxColumn(n.endLineNumber)),i)return new s.Sj(n,"\n"+e.normalizeIndentation(r.afterEnter),!0);{let t=0;return l<=h+1&&(e.insertSpaces||(a=Math.ceil(a/e.indentSize)),t=Math.min(a+1-e.normalizeIndentation(r.afterEnter).length-1,0)),new s.Uo(n,"\n"+e.normalizeIndentation(r.afterEnter),0,t,!0)}}}return p._typeCommand(n,"\n"+e.normalizeIndentation(l),i)}static _isAutoIndentType(e,t,i){if(e.autoIndent<4)return!1;for(let e=0,n=i.length;e<n;e++)if(!t.isCheapToTokenize(i[e].getEndPosition().lineNumber))return!1;return!0}static _runAutoIndentType(e,t,i,n){const o=g.zu.getIndentationAtPosition(t,i.startLineNumber,i.startColumn),s=g.zu.getIndentActionForType(e.autoIndent,t,i,n,{shiftIndent:t=>p.shiftIndent(e,t),unshiftIndent:t=>p.unshiftIndent(e,t)});if(null===s)return null;if(s!==e.normalizeIndentation(o)){const o=t.getLineFirstNonWhitespaceColumn(i.startLineNumber);return 0===o?p._typeCommand(new a.e(i.startLineNumber,1,i.endLineNumber,i.endColumn),e.normalizeIndentation(s)+n,!1):p._typeCommand(new a.e(i.startLineNumber,1,i.endLineNumber,i.endColumn),e.normalizeIndentation(s)+t.getLineContent(i.startLineNumber).substring(o-1,i.startColumn-1)+n,!1)}return null}static _isAutoClosingOvertype(e,t,i,n,o){if("never"===e.autoClosingOvertype)return!1;if(!e.autoClosingPairs.autoClosingPairsCloseSingleChar.has(o))return!1;for(let s=0,r=i.length;s<r;s++){const r=i[s];if(!r.isEmpty())return!1;const a=r.getPosition(),l=t.getLineContent(a.lineNumber);if(l.charAt(a.column-1)!==o)return!1;const c=(0,d.LN)(o);if(92===(a.column>2?l.charCodeAt(a.column-2):0)&&c)return!1;if("auto"===e.autoClosingOvertype){let e=!1;for(let t=0,i=n.length;t<i;t++){const i=n[t];if(a.lineNumber===i.startLineNumber&&a.column===i.startColumn){e=!0;break}}if(!e)return!1}}return!0}static _runAutoClosingOvertype(e,t,i,n,o){let r=[];for(let e=0,t=n.length;e<t;e++){const t=n[e].getPosition(),i=new a.e(t.lineNumber,t.column,t.lineNumber,t.column+1);r[e]=new s.T4(i,o)}return new d.Tp(4,r,{shouldPushStackElementBefore:v(e,4),shouldPushStackElementAfter:!1})}static _isBeforeClosingBrace(e,t){const i=t.charAt(0),n=e.autoClosingPairs.autoClosingPairsOpenByStart.get(i)||[],o=e.autoClosingPairs.autoClosingPairsCloseByStart.get(i)||[],s=n.some((e=>t.startsWith(e.open))),r=o.some((e=>t.startsWith(e.close)));return!s&&r}static _findAutoClosingPairOpen(e,t,i,n){const o=e.autoClosingPairs.autoClosingPairsOpenByEnd.get(n);if(!o)return null;let s=null;for(const e of o)if(null===s||e.open.length>s.open.length){let o=!0;for(const s of i){if(t.getValueInRange(new a.e(s.lineNumber,s.column-e.open.length+1,s.lineNumber,s.column))+n!==e.open){o=!1;break}}o&&(s=e)}return s}static _findSubAutoClosingPairClose(e,t){if(t.open.length<=1)return"";const i=t.close.charAt(t.close.length-1),n=e.autoClosingPairs.autoClosingPairsCloseByEnd.get(i)||[];let o=null;for(const e of n)e.open!==t.open&&t.open.includes(e.open)&&t.close.endsWith(e.close)&&(!o||e.open.length>o.open.length)&&(o=e);return o?o.close:""}static _getAutoClosingPairClose(e,t,i,o,s){const r=(0,d.LN)(o),a=r?e.autoClosingQuotes:e.autoClosingBrackets;if("never"===a)return null;const l=this._findAutoClosingPairOpen(e,t,i.map((e=>e.getPosition())),o);if(!l)return null;const c=this._findSubAutoClosingPairClose(e,l);let u=!0;const f=r?e.shouldAutoCloseBefore.quote:e.shouldAutoCloseBefore.bracket;for(let r=0,d=i.length;r<d;r++){const d=i[r];if(!d.isEmpty())return null;const m=d.getPosition(),v=t.getLineContent(m.lineNumber),_=v.substring(m.column-1);if(_.startsWith(c)||(u=!1),v.length>m.column-1){const t=v.charAt(m.column-1);if(!p._isBeforeClosingBrace(e,_)&&!f(t))return null}if(!t.isCheapToTokenize(m.lineNumber))return null;if(1===l.open.length&&("'"===o||'"'===o)&&"always"!==a){const t=(0,h.u)(e.wordSeparators);if(s&&m.column>1&&0===t.get(v.charCodeAt(m.column-2)))return null;if(!s&&m.column>2&&0===t.get(v.charCodeAt(m.column-3)))return null}t.forceTokenization(m.lineNumber);const b=t.getLineTokens(m.lineNumber);let w=!1;try{w=g.zu.shouldAutoClosePair(l,b,s?m.column:m.column-1)}catch(e){(0,n.dL)(e)}if(!w)return null}return u?l.close.substring(0,l.close.length-c.length):l.close}static _runAutoClosingOpenCharType(e,t,i,n,o,s,r){let a=[];for(let e=0,t=n.length;e<t;e++){const t=n[e];a[e]=new f(t,o,s,r)}return new d.Tp(4,a,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}static _shouldSurroundChar(e,t){return(0,d.LN)(t)?"quotes"===e.autoSurround||"languageDefined"===e.autoSurround:"brackets"===e.autoSurround||"languageDefined"===e.autoSurround}static _isSurroundSelectionType(e,t,i,n){if(!p._shouldSurroundChar(e,n)||!e.surroundingPairs.hasOwnProperty(n))return!1;const o=(0,d.LN)(n);for(let e=0,n=i.length;e<n;e++){const n=i[e];if(n.isEmpty())return!1;let s=!0;for(let e=n.startLineNumber;e<=n.endLineNumber;e++){const i=t.getLineContent(e),o=e===n.startLineNumber?n.startColumn-1:0,r=e===n.endLineNumber?n.endColumn-1:i.length,a=i.substring(o,r);if(/[^ \t]/.test(a)){s=!1;break}}if(s)return!1;if(o&&n.startLineNumber===n.endLineNumber&&n.startColumn+1===n.endColumn){const e=t.getValueInRange(n);if((0,d.LN)(e))return!1}}return!0}static _runSurroundSelectionType(e,t,i,n,o){let s=[];for(let e=0,i=n.length;e<i;e++){const i=n[e],r=t.surroundingPairs[o];s[e]=new c(i,o,r)}return new d.Tp(0,s,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!0})}static _isTypeInterceptorElectricChar(e,t,i){return!(1!==i.length||!t.isCheapToTokenize(i[0].getEndPosition().lineNumber))}static _typeInterceptorElectricChar(e,t,i,r,l){if(!t.electricChars.hasOwnProperty(l)||!r.isEmpty())return null;let c=r.getPosition();i.forceTokenization(c.lineNumber);let h,u=i.getLineTokens(c.lineNumber);try{h=g.zu.onElectricCharacter(l,u,c.column)}catch(e){return(0,n.dL)(e),null}if(!h)return null;if(h.matchOpenBracket){let n=(u.getLineContent()+l).lastIndexOf(h.matchOpenBracket)+1,r=i.findMatchingBracketUp(h.matchOpenBracket,{lineNumber:c.lineNumber,column:n});if(r){if(r.startLineNumber===c.lineNumber)return null;let n=i.getLineContent(r.startLineNumber),h=o.V8(n),u=t.normalizeIndentation(h),g=i.getLineContent(c.lineNumber),p=i.getLineFirstNonWhitespaceColumn(c.lineNumber)||c.column,f=u+g.substring(p-1,c.column-1)+l,v=new a.e(c.lineNumber,1,c.lineNumber,c.column);const _=new s.T4(v,f);return new d.Tp(m(f,e),[_],{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!0})}}return null}static compositionEndWithInterceptors(e,t,i,n,o,r){if(!n||l.Y.selectionsArrEqual(n,o))return null;let c=null;for(const e of o){if(!e.isEmpty())return null;const t=e.getPosition(),n=i.getValueInRange(new a.e(t.lineNumber,t.column-1,t.lineNumber,t.column));if(null===c)c=n;else if(c!==n)return null}if(!c)return null;if(this._isAutoClosingOvertype(t,i,o,r,c)){const e=o.map((e=>new s.T4(new a.e(e.positionLineNumber,e.positionColumn,e.positionLineNumber,e.positionColumn+1),"",!1)));return new d.Tp(4,e,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}const h=this._getAutoClosingPairClose(t,i,o,c,!1);return null!==h?this._runAutoClosingOpenCharType(e,t,i,o,c,!1,h):null}static typeWithInterceptors(e,t,i,n,o,r,a){if(!e&&"\n"===a){let e=[];for(let t=0,s=o.length;t<s;t++)e[t]=p._enter(i,n,!1,o[t]);return new d.Tp(4,e,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}if(!e&&this._isAutoIndentType(i,n,o)){let e=[],t=!1;for(let s=0,r=o.length;s<r;s++)if(e[s]=this._runAutoIndentType(i,n,o[s],a),!e[s]){t=!0;break}if(!t)return new d.Tp(4,e,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}if(!e&&this._isAutoClosingOvertype(i,n,o,r,a))return this._runAutoClosingOvertype(t,i,n,o,a);if(!e){const e=this._getAutoClosingPairClose(i,n,o,a,!0);if(e)return this._runAutoClosingOpenCharType(t,i,n,o,a,!0,e)}if(this._isSurroundSelectionType(i,n,o,a))return this._runSurroundSelectionType(t,i,n,o,a);if(!e&&this._isTypeInterceptorElectricChar(i,n,o)){const e=this._typeInterceptorElectricChar(t,i,n,o[0],a);if(e)return e}let l=[];for(let e=0,t=o.length;e<t;e++)l[e]=new s.T4(o[e],a);const c=m(a,t);return new d.Tp(c,l,{shouldPushStackElementBefore:v(t,c),shouldPushStackElementAfter:!1})}static typeWithoutInterceptors(e,t,i,n,o){let r=[];for(let e=0,t=n.length;e<t;e++)r[e]=new s.T4(n[e],o);const a=m(o,e);return new d.Tp(a,r,{shouldPushStackElementBefore:v(e,a),shouldPushStackElementAfter:!1})}static lineInsertBefore(e,t,i){if(null===t||null===i)return[];let n=[];for(let o=0,r=i.length;o<r;o++){let r=i[o].positionLineNumber;if(1===r)n[o]=new s.Sj(new a.e(1,1,1,1),"\n");else{r--;let i=t.getLineMaxColumn(r);n[o]=this._enter(e,t,!1,new a.e(r,i,r,i))}}return n}static lineInsertAfter(e,t,i){if(null===t||null===i)return[];let n=[];for(let o=0,s=i.length;o<s;o++){const s=i[o].positionLineNumber;let r=t.getLineMaxColumn(s);n[o]=this._enter(e,t,!1,new a.e(s,r,s,r))}return n}static lineBreakInsert(e,t,i){let n=[];for(let o=0,s=i.length;o<s;o++)n[o]=this._enter(e,t,!0,i[o]);return n}}class f extends s.Uo{constructor(e,t,i,n){super(e,(i?t:"")+n,0,-n.length),this._openCharacter=t,this._closeCharacter=n,this.closeCharacterRange=null,this.enclosingRange=null}computeCursorState(e,t){let i=t.getInverseEditOperations()[0].range;return this.closeCharacterRange=new a.e(i.startLineNumber,i.endColumn-this._closeCharacter.length,i.endLineNumber,i.endColumn),this.enclosingRange=new a.e(i.startLineNumber,i.endColumn-this._openCharacter.length-this._closeCharacter.length,i.endLineNumber,i.endColumn),super.computeCursorState(e,t)}}function m(e,t){return" "===e?5===t||6===t?6:5:4}function v(e,t){return!(!b(e)||b(t))||5!==e&&_(e)!==_(t)}function _(e){return 6===e||5===e?"space":e}function b(e){return 4===e||5===e||6===e}},5795:(e,t,i)=>{"use strict";i.d(t,{L:()=>d,w:()=>c});var n=i(97295),o=i(33181),s=i(31380),r=i(59410),a=i(50187),l=i(24314);class c{static _createWord(e,t,i,n,o){return{start:n,end:o,wordType:t,nextCharClass:i}}static _findPreviousWordOnLine(e,t,i){let n=t.getLineContent(i.lineNumber);return this._doFindPreviousWordOnLine(n,e,i)}static _doFindPreviousWordOnLine(e,t,i){let n=0;for(let o=i.column-2;o>=0;o--){let i=e.charCodeAt(o),s=t.get(i);if(0===s){if(2===n)return this._createWord(e,n,s,o+1,this._findEndOfWord(e,t,n,o+1));n=1}else if(2===s){if(1===n)return this._createWord(e,n,s,o+1,this._findEndOfWord(e,t,n,o+1));n=2}else if(1===s&&0!==n)return this._createWord(e,n,s,o+1,this._findEndOfWord(e,t,n,o+1))}return 0!==n?this._createWord(e,n,1,0,this._findEndOfWord(e,t,n,0)):null}static _findEndOfWord(e,t,i,n){let o=e.length;for(let s=n;s<o;s++){let n=e.charCodeAt(s),o=t.get(n);if(1===o)return s;if(1===i&&2===o)return s;if(2===i&&0===o)return s}return o}static _findNextWordOnLine(e,t,i){let n=t.getLineContent(i.lineNumber);return this._doFindNextWordOnLine(n,e,i)}static _doFindNextWordOnLine(e,t,i){let n=0,o=e.length;for(let s=i.column-1;s<o;s++){let i=e.charCodeAt(s),o=t.get(i);if(0===o){if(2===n)return this._createWord(e,n,o,this._findStartOfWord(e,t,n,s-1),s);n=1}else if(2===o){if(1===n)return this._createWord(e,n,o,this._findStartOfWord(e,t,n,s-1),s);n=2}else if(1===o&&0!==n)return this._createWord(e,n,o,this._findStartOfWord(e,t,n,s-1),s)}return 0!==n?this._createWord(e,n,1,this._findStartOfWord(e,t,n,o-1),o):null}static _findStartOfWord(e,t,i,n){for(let o=n;o>=0;o--){let n=e.charCodeAt(o),s=t.get(n);if(1===s)return o+1;if(1===i&&2===s)return o+1;if(2===i&&0===s)return o+1}return 0}static moveWordLeft(e,t,i,n){let o=i.lineNumber,s=i.column;1===s&&o>1&&(o-=1,s=t.getLineMaxColumn(o));let r=c._findPreviousWordOnLine(e,t,new a.L(o,s));if(0===n)return new a.L(o,r?r.start+1:1);if(1===n)return r&&2===r.wordType&&r.end-r.start==1&&0===r.nextCharClass&&(r=c._findPreviousWordOnLine(e,t,new a.L(o,r.start+1))),new a.L(o,r?r.start+1:1);if(3===n){for(;r&&2===r.wordType;)r=c._findPreviousWordOnLine(e,t,new a.L(o,r.start+1));return new a.L(o,r?r.start+1:1)}return r&&s<=r.end+1&&(r=c._findPreviousWordOnLine(e,t,new a.L(o,r.start+1))),new a.L(o,r?r.end+1:1)}static _moveWordPartLeft(e,t){const i=t.lineNumber,o=e.getLineMaxColumn(i);if(1===t.column)return i>1?new a.L(i-1,e.getLineMaxColumn(i-1)):t;const s=e.getLineContent(i);for(let e=t.column-1;e>1;e--){const t=s.charCodeAt(e-2),r=s.charCodeAt(e-1);if(95===t&&95!==r)return new a.L(i,e);if(n.mK(t)&&n.df(r))return new a.L(i,e);if(n.df(t)&&n.df(r)&&e+1<o){const t=s.charCodeAt(e);if(n.mK(t))return new a.L(i,e)}}return new a.L(i,1)}static moveWordRight(e,t,i,n){let o=i.lineNumber,s=i.column,r=!1;s===t.getLineMaxColumn(o)&&o<t.getLineCount()&&(r=!0,o+=1,s=1);let l=c._findNextWordOnLine(e,t,new a.L(o,s));if(2===n)l&&2===l.wordType&&l.end-l.start==1&&0===l.nextCharClass&&(l=c._findNextWordOnLine(e,t,new a.L(o,l.end+1))),s=l?l.end+1:t.getLineMaxColumn(o);else if(3===n){for(r&&(s=0);l&&(2===l.wordType||l.start+1<=s);)l=c._findNextWordOnLine(e,t,new a.L(o,l.end+1));s=l?l.start+1:t.getLineMaxColumn(o)}else l&&!r&&s>=l.start+1&&(l=c._findNextWordOnLine(e,t,new a.L(o,l.end+1))),s=l?l.start+1:t.getLineMaxColumn(o);return new a.L(o,s)}static _moveWordPartRight(e,t){const i=t.lineNumber,o=e.getLineMaxColumn(i);if(t.column===o)return i<e.getLineCount()?new a.L(i+1,1):t;const s=e.getLineContent(i);for(let e=t.column+1;e<o;e++){const t=s.charCodeAt(e-2),r=s.charCodeAt(e-1);if(95!==t&&95===r)return new a.L(i,e);if(n.mK(t)&&n.df(r))return new a.L(i,e);if(n.df(t)&&n.df(r)&&e+1<o){const t=s.charCodeAt(e);if(n.mK(t))return new a.L(i,e)}}return new a.L(i,o)}static _deleteWordLeftWhitespace(e,t){const i=e.getLineContent(t.lineNumber),o=t.column-2,s=n.ow(i,o);return s+1<o?new l.e(t.lineNumber,s+2,t.lineNumber,t.column):null}static deleteWordLeft(e,t){const i=e.wordSeparators,n=e.model,o=e.selection,r=e.whitespaceHeuristics;if(!o.isEmpty())return o;if(s.A.isAutoClosingPairDelete(e.autoClosingDelete,e.autoClosingBrackets,e.autoClosingQuotes,e.autoClosingPairs.autoClosingPairsOpenByEnd,e.model,[e.selection],e.autoClosedCharacters)){const t=e.selection.getPosition();return new l.e(t.lineNumber,t.column-1,t.lineNumber,t.column+1)}const d=new a.L(o.positionLineNumber,o.positionColumn);let h=d.lineNumber,u=d.column;if(1===h&&1===u)return null;if(r){let e=this._deleteWordLeftWhitespace(n,d);if(e)return e}let g=c._findPreviousWordOnLine(i,n,d);return 0===t?g?u=g.start+1:u>1?u=1:(h--,u=n.getLineMaxColumn(h)):(g&&u<=g.end+1&&(g=c._findPreviousWordOnLine(i,n,new a.L(h,g.start+1))),g?u=g.end+1:u>1?u=1:(h--,u=n.getLineMaxColumn(h))),new l.e(h,u,d.lineNumber,d.column)}static deleteInsideWord(e,t,i){if(!i.isEmpty())return i;const n=new a.L(i.positionLineNumber,i.positionColumn);let o=this._deleteInsideWordWhitespace(t,n);return o||this._deleteInsideWordDetermineDeleteRange(e,t,n)}static _charAtIsWhitespace(e,t){const i=e.charCodeAt(t);return 32===i||9===i}static _deleteInsideWordWhitespace(e,t){const i=e.getLineContent(t.lineNumber),n=i.length;if(0===n)return null;let o=Math.max(t.column-2,0);if(!this._charAtIsWhitespace(i,o))return null;let s=Math.min(t.column-1,n-1);if(!this._charAtIsWhitespace(i,s))return null;for(;o>0&&this._charAtIsWhitespace(i,o-1);)o--;for(;s+1<n&&this._charAtIsWhitespace(i,s+1);)s++;return new l.e(t.lineNumber,o+1,t.lineNumber,s+2)}static _deleteInsideWordDetermineDeleteRange(e,t,i){const n=t.getLineContent(i.lineNumber),o=n.length;if(0===o)return i.lineNumber>1?new l.e(i.lineNumber-1,t.getLineMaxColumn(i.lineNumber-1),i.lineNumber,1):i.lineNumber<t.getLineCount()?new l.e(i.lineNumber,1,i.lineNumber+1,1):new l.e(i.lineNumber,1,i.lineNumber,1);const s=e=>e.start+1<=i.column&&i.column<=e.end+1,r=(e,t)=>(e=Math.min(e,i.column),t=Math.max(t,i.column),new l.e(i.lineNumber,e,i.lineNumber,t)),a=e=>{let t=e.start+1,i=e.end+1,s=!1;for(;i-1<o&&this._charAtIsWhitespace(n,i-1);)s=!0,i++;if(!s)for(;t>1&&this._charAtIsWhitespace(n,t-2);)t--;return r(t,i)},d=c._findPreviousWordOnLine(e,t,i);if(d&&s(d))return a(d);const h=c._findNextWordOnLine(e,t,i);return h&&s(h)?a(h):d&&h?r(d.end+1,h.start+1):d?r(d.start+1,d.end+1):h?r(h.start+1,h.end+1):r(1,o+1)}static _deleteWordPartLeft(e,t){if(!t.isEmpty())return t;const i=t.getPosition(),n=c._moveWordPartLeft(e,i);return new l.e(i.lineNumber,i.column,n.lineNumber,n.column)}static _findFirstNonWhitespaceChar(e,t){let i=e.length;for(let n=t;n<i;n++){let t=e.charAt(n);if(" "!==t&&"\t"!==t)return n}return i}static _deleteWordRightWhitespace(e,t){const i=e.getLineContent(t.lineNumber),n=t.column-1,o=this._findFirstNonWhitespaceChar(i,n);return n+1<o?new l.e(t.lineNumber,t.column,t.lineNumber,o+1):null}static deleteWordRight(e,t){const i=e.wordSeparators,n=e.model,o=e.selection,s=e.whitespaceHeuristics;if(!o.isEmpty())return o;const r=new a.L(o.positionLineNumber,o.positionColumn);let d=r.lineNumber,h=r.column;const u=n.getLineCount(),g=n.getLineMaxColumn(d);if(d===u&&h===g)return null;if(s){let e=this._deleteWordRightWhitespace(n,r);if(e)return e}let p=c._findNextWordOnLine(i,n,r);return 2===t?p?h=p.end+1:h<g||d===u?h=g:(d++,p=c._findNextWordOnLine(i,n,new a.L(d,1)),h=p?p.start+1:n.getLineMaxColumn(d)):(p&&h>=p.start+1&&(p=c._findNextWordOnLine(i,n,new a.L(d,p.end+1))),p?h=p.start+1:h<g||d===u?h=g:(d++,p=c._findNextWordOnLine(i,n,new a.L(d,1)),h=p?p.start+1:n.getLineMaxColumn(d))),new l.e(d,h,r.lineNumber,r.column)}static _deleteWordPartRight(e,t){if(!t.isEmpty())return t;const i=t.getPosition(),n=c._moveWordPartRight(e,i);return new l.e(i.lineNumber,i.column,n.lineNumber,n.column)}static _createWordAtPosition(e,t,i){const n=new l.e(t,i.start+1,t,i.end+1);return{word:e.getValueInRange(n),startColumn:n.startColumn,endColumn:n.endColumn}}static getWordAtPosition(e,t,i){const n=(0,r.u)(t),o=c._findPreviousWordOnLine(n,e,i);if(o&&1===o.wordType&&o.start<=i.column-1&&i.column-1<=o.end)return c._createWordAtPosition(e,i.lineNumber,o);const s=c._findNextWordOnLine(n,e,i);return s&&1===s.wordType&&s.start<=i.column-1&&i.column-1<=s.end?c._createWordAtPosition(e,i.lineNumber,s):null}static word(e,t,i,n,s){const d=(0,r.u)(e.wordSeparators);let h,u,g=c._findPreviousWordOnLine(d,t,s),p=c._findNextWordOnLine(d,t,s);if(!n){let e,i;return g&&1===g.wordType&&g.start<=s.column-1&&s.column-1<=g.end?(e=g.start+1,i=g.end+1):p&&1===p.wordType&&p.start<=s.column-1&&s.column-1<=p.end?(e=p.start+1,i=p.end+1):(e=g?g.end+1:1,i=p?p.start+1:t.getLineMaxColumn(s.lineNumber)),new o.rS(new l.e(s.lineNumber,e,s.lineNumber,i),0,new a.L(s.lineNumber,i),0)}g&&1===g.wordType&&g.start<s.column-1&&s.column-1<g.end?(h=g.start+1,u=g.end+1):p&&1===p.wordType&&p.start<s.column-1&&s.column-1<p.end?(h=p.start+1,u=p.end+1):(h=s.column,u=s.column);let f,m=s.lineNumber;if(i.selectionStart.containsPosition(s))f=i.selectionStart.endColumn;else if(s.isBeforeOrEqual(i.selectionStart.getStartPosition())){f=h;let e=new a.L(m,f);i.selectionStart.containsPosition(e)&&(f=i.selectionStart.endColumn)}else{f=u;let e=new a.L(m,f);i.selectionStart.containsPosition(e)&&(f=i.selectionStart.startColumn)}return i.move(!0,m,f,0)}}class d extends c{static deleteWordPartLeft(e){const t=h([c.deleteWordLeft(e,0),c.deleteWordLeft(e,2),c._deleteWordPartLeft(e.model,e.selection)]);return t.sort(l.e.compareRangesUsingEnds),t[2]}static deleteWordPartRight(e){const t=h([c.deleteWordRight(e,0),c.deleteWordRight(e,2),c._deleteWordPartRight(e.model,e.selection)]);return t.sort(l.e.compareRangesUsingStarts),t[0]}static moveWordPartLeft(e,t,i){const n=h([c.moveWordLeft(e,t,i,0),c.moveWordLeft(e,t,i,2),c._moveWordPartLeft(t,i)]);return n.sort(a.L.compare),n[2]}static moveWordPartRight(e,t,i){const n=h([c.moveWordRight(e,t,i,0),c.moveWordRight(e,t,i,2),c._moveWordPartRight(t,i)]);return n.sort(a.L.compare),n[0]}}function h(e){return e.filter((e=>Boolean(e)))}},59410:(e,t,i)=>{"use strict";i.d(t,{u:()=>s});var n=i(44906);class o extends n.N{constructor(e){super(0);for(let t=0,i=e.length;t<i;t++)this.set(e.charCodeAt(t),2);this.set(32,1),this.set(9,1)}}const s=function(e){let t={};return i=>(t.hasOwnProperty(i)||(t[i]=e(i)),t[i])}((e=>new o(e)))},44906:(e,t,i)=>{"use strict";i.d(t,{N:()=>o,q:()=>s});var n=i(85427);class o{constructor(e){let t=(0,n.K)(e);this._defaultValue=t,this._asciiMap=o._createAsciiMap(t),this._map=new Map}static _createAsciiMap(e){let t=new Uint8Array(256);for(let i=0;i<256;i++)t[i]=e;return t}set(e,t){let i=(0,n.K)(t);e>=0&&e<256?this._asciiMap[e]=i:this._map.set(e,i)}get(e){return e>=0&&e<256?this._asciiMap[e]:this._map.get(e)||this._defaultValue}}class s{constructor(){this._actual=new o(0)}add(e){this._actual.set(e,1)}has(e){return 1===this._actual.get(e)}}},69386:(e,t,i)=>{"use strict";i.d(t,{h:()=>o});var n=i(24314);class o{static insert(e,t){return{range:new n.e(e.lineNumber,e.column,e.lineNumber,e.column),text:t,forceMoveMarkers:!0}}static delete(e){return{range:e,text:null}}static replace(e,t){return{range:e,text:t}}static replaceMove(e,t){return{range:e,text:t,forceMoveMarkers:!0}}}},78411:(e,t,i)=>{"use strict";i.d(t,{A:()=>o});var n=i(44101);class o{constructor(e,t,i){this._lineTokensBrand=void 0,this._tokens=e,this._tokensCount=this._tokens.length>>>1,this._text=t,this._languageIdCodec=i}static createEmpty(e,t){const i=o.defaultTokenMetadata,n=new Uint32Array(2);return n[0]=e.length,n[1]=i,new o(n,e,t)}equals(e){return e instanceof o&&this.slicedEquals(e,0,this._tokensCount)}slicedEquals(e,t,i){if(this._text!==e._text)return!1;if(this._tokensCount!==e._tokensCount)return!1;const n=t<<1,o=n+(i<<1);for(let t=n;t<o;t++)if(this._tokens[t]!==e._tokens[t])return!1;return!0}getLineContent(){return this._text}getCount(){return this._tokensCount}getStartOffset(e){return e>0?this._tokens[e-1<<1]:0}getMetadata(e){return this._tokens[1+(e<<1)]}getLanguageId(e){const t=this._tokens[1+(e<<1)],i=n.NX.getLanguageId(t);return this._languageIdCodec.decodeLanguageId(i)}getStandardTokenType(e){const t=this._tokens[1+(e<<1)];return n.NX.getTokenType(t)}getForeground(e){const t=this._tokens[1+(e<<1)];return n.NX.getForeground(t)}getClassName(e){const t=this._tokens[1+(e<<1)];return n.NX.getClassNameFromMetadata(t)}getInlineStyle(e,t){const i=this._tokens[1+(e<<1)];return n.NX.getInlineStyleFromMetadata(i,t)}getEndOffset(e){return this._tokens[e<<1]}findTokenIndexAtOffset(e){return o.findIndexInTokensArray(this._tokens,e)}inflate(){return this}sliceAndInflate(e,t,i){return new s(this,e,t,i)}static convertToEndOffset(e,t){const i=(e.length>>>1)-1;for(let t=0;t<i;t++)e[t<<1]=e[t+1<<1];e[i<<1]=t}static findIndexInTokensArray(e,t){if(e.length<=2)return 0;let i=0,n=(e.length>>>1)-1;for(;i<n;){const o=i+Math.floor((n-i)/2),s=e[o<<1];if(s===t)return o+1;s<t?i=o+1:s>t&&(n=o)}return i}withInserted(e){if(0===e.length)return this;let t=0,i=0,n="";const s=new Array;let r=0;for(;;){let o=t<this._tokensCount?this._tokens[t<<1]:-1,a=i<e.length?e[i]:null;if(-1!==o&&(null===a||o<=a.offset)){n+=this._text.substring(r,o);const e=this._tokens[1+(t<<1)];s.push(n.length,e),t++,r=o}else{if(!a)break;if(a.offset>r){n+=this._text.substring(r,a.offset);const e=this._tokens[1+(t<<1)];s.push(n.length,e),r=a.offset}n+=a.text,s.push(n.length,a.tokenMetadata),i++}}return new o(new Uint32Array(s),n,this._languageIdCodec)}}o.defaultTokenMetadata=16793600;class s{constructor(e,t,i,n){this._source=e,this._startOffset=t,this._endOffset=i,this._deltaOffset=n,this._firstTokenIndex=e.findTokenIndexAtOffset(t),this._tokensCount=0;for(let t=this._firstTokenIndex,n=e.getCount();t<n;t++){if(e.getStartOffset(t)>=i)break;this._tokensCount++}}equals(e){return e instanceof s&&(this._startOffset===e._startOffset&&this._endOffset===e._endOffset&&this._deltaOffset===e._deltaOffset&&this._source.slicedEquals(e._source,this._firstTokenIndex,this._tokensCount))}getCount(){return this._tokensCount}getForeground(e){return this._source.getForeground(this._firstTokenIndex+e)}getEndOffset(e){const t=this._source.getEndOffset(this._firstTokenIndex+e);return Math.min(this._endOffset,t)-this._startOffset+this._deltaOffset}getClassName(e){return this._source.getClassName(this._firstTokenIndex+e)}getInlineStyle(e,t){return this._source.getInlineStyle(this._firstTokenIndex+e,t)}findTokenIndexAtOffset(e){return this._source.findTokenIndexAtOffset(e+this._startOffset-this._deltaOffset)-this._firstTokenIndex}}},50187:(e,t,i)=>{"use strict";i.d(t,{L:()=>n});class n{constructor(e,t){this.lineNumber=e,this.column=t}with(e=this.lineNumber,t=this.column){return e===this.lineNumber&&t===this.column?this:new n(e,t)}delta(e=0,t=0){return this.with(this.lineNumber+e,this.column+t)}equals(e){return n.equals(this,e)}static equals(e,t){return!e&&!t||!!e&&!!t&&e.lineNumber===t.lineNumber&&e.column===t.column}isBefore(e){return n.isBefore(this,e)}static isBefore(e,t){return e.lineNumber<t.lineNumber||!(t.lineNumber<e.lineNumber)&&e.column<t.column}isBeforeOrEqual(e){return n.isBeforeOrEqual(this,e)}static isBeforeOrEqual(e,t){return e.lineNumber<t.lineNumber||!(t.lineNumber<e.lineNumber)&&e.column<=t.column}static compare(e,t){let i=0|e.lineNumber,n=0|t.lineNumber;if(i===n){return(0|e.column)-(0|t.column)}return i-n}clone(){return new n(this.lineNumber,this.column)}toString(){return"("+this.lineNumber+","+this.column+")"}static lift(e){return new n(e.lineNumber,e.column)}static isIPosition(e){return e&&"number"==typeof e.lineNumber&&"number"==typeof e.column}}},24314:(e,t,i)=>{"use strict";i.d(t,{e:()=>o});var n=i(50187);class o{constructor(e,t,i,n){e>i||e===i&&t>n?(this.startLineNumber=i,this.startColumn=n,this.endLineNumber=e,this.endColumn=t):(this.startLineNumber=e,this.startColumn=t,this.endLineNumber=i,this.endColumn=n)}isEmpty(){return o.isEmpty(this)}static isEmpty(e){return e.startLineNumber===e.endLineNumber&&e.startColumn===e.endColumn}containsPosition(e){return o.containsPosition(this,e)}static containsPosition(e,t){return!(t.lineNumber<e.startLineNumber||t.lineNumber>e.endLineNumber)&&(!(t.lineNumber===e.startLineNumber&&t.column<e.startColumn)&&!(t.lineNumber===e.endLineNumber&&t.column>e.endColumn))}containsRange(e){return o.containsRange(this,e)}static containsRange(e,t){return!(t.startLineNumber<e.startLineNumber||t.endLineNumber<e.startLineNumber)&&(!(t.startLineNumber>e.endLineNumber||t.endLineNumber>e.endLineNumber)&&(!(t.startLineNumber===e.startLineNumber&&t.startColumn<e.startColumn)&&!(t.endLineNumber===e.endLineNumber&&t.endColumn>e.endColumn)))}strictContainsRange(e){return o.strictContainsRange(this,e)}static strictContainsRange(e,t){return!(t.startLineNumber<e.startLineNumber||t.endLineNumber<e.startLineNumber)&&(!(t.startLineNumber>e.endLineNumber||t.endLineNumber>e.endLineNumber)&&(!(t.startLineNumber===e.startLineNumber&&t.startColumn<=e.startColumn)&&!(t.endLineNumber===e.endLineNumber&&t.endColumn>=e.endColumn)))}plusRange(e){return o.plusRange(this,e)}static plusRange(e,t){let i,n,s,r;return t.startLineNumber<e.startLineNumber?(i=t.startLineNumber,n=t.startColumn):t.startLineNumber===e.startLineNumber?(i=t.startLineNumber,n=Math.min(t.startColumn,e.startColumn)):(i=e.startLineNumber,n=e.startColumn),t.endLineNumber>e.endLineNumber?(s=t.endLineNumber,r=t.endColumn):t.endLineNumber===e.endLineNumber?(s=t.endLineNumber,r=Math.max(t.endColumn,e.endColumn)):(s=e.endLineNumber,r=e.endColumn),new o(i,n,s,r)}intersectRanges(e){return o.intersectRanges(this,e)}static intersectRanges(e,t){let i=e.startLineNumber,n=e.startColumn,s=e.endLineNumber,r=e.endColumn,a=t.startLineNumber,l=t.startColumn,c=t.endLineNumber,d=t.endColumn;return i<a?(i=a,n=l):i===a&&(n=Math.max(n,l)),s>c?(s=c,r=d):s===c&&(r=Math.min(r,d)),i>s||i===s&&n>r?null:new o(i,n,s,r)}equalsRange(e){return o.equalsRange(this,e)}static equalsRange(e,t){return!!e&&!!t&&e.startLineNumber===t.startLineNumber&&e.startColumn===t.startColumn&&e.endLineNumber===t.endLineNumber&&e.endColumn===t.endColumn}getEndPosition(){return o.getEndPosition(this)}static getEndPosition(e){return new n.L(e.endLineNumber,e.endColumn)}getStartPosition(){return o.getStartPosition(this)}static getStartPosition(e){return new n.L(e.startLineNumber,e.startColumn)}toString(){return"["+this.startLineNumber+","+this.startColumn+" -> "+this.endLineNumber+","+this.endColumn+"]"}setEndPosition(e,t){return new o(this.startLineNumber,this.startColumn,e,t)}setStartPosition(e,t){return new o(e,t,this.endLineNumber,this.endColumn)}collapseToStart(){return o.collapseToStart(this)}static collapseToStart(e){return new o(e.startLineNumber,e.startColumn,e.startLineNumber,e.startColumn)}static fromPositions(e,t=e){return new o(e.lineNumber,e.column,t.lineNumber,t.column)}static lift(e){return e?new o(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn):null}static isIRange(e){return e&&"number"==typeof e.startLineNumber&&"number"==typeof e.startColumn&&"number"==typeof e.endLineNumber&&"number"==typeof e.endColumn}static areIntersectingOrTouching(e,t){return!(e.endLineNumber<t.startLineNumber||e.endLineNumber===t.startLineNumber&&e.endColumn<t.startColumn)&&!(t.endLineNumber<e.startLineNumber||t.endLineNumber===e.startLineNumber&&t.endColumn<e.startColumn)}static areIntersecting(e,t){return!(e.endLineNumber<t.startLineNumber||e.endLineNumber===t.startLineNumber&&e.endColumn<=t.startColumn)&&!(t.endLineNumber<e.startLineNumber||t.endLineNumber===e.startLineNumber&&t.endColumn<=e.startColumn)}static compareRangesUsingStarts(e,t){if(e&&t){const i=0|e.startLineNumber,n=0|t.startLineNumber;if(i===n){const i=0|e.startColumn,n=0|t.startColumn;if(i===n){const i=0|e.endLineNumber,n=0|t.endLineNumber;if(i===n){return(0|e.endColumn)-(0|t.endColumn)}return i-n}return i-n}return i-n}return(e?1:0)-(t?1:0)}static compareRangesUsingEnds(e,t){return e.endLineNumber===t.endLineNumber?e.endColumn===t.endColumn?e.startLineNumber===t.startLineNumber?e.startColumn-t.startColumn:e.startLineNumber-t.startLineNumber:e.endColumn-t.endColumn:e.endLineNumber-t.endLineNumber}static spansMultipleLines(e){return e.endLineNumber>e.startLineNumber}}},3860:(e,t,i)=>{"use strict";i.d(t,{Y:()=>s});var n=i(50187),o=i(24314);class s extends o.e{constructor(e,t,i,n){super(e,t,i,n),this.selectionStartLineNumber=e,this.selectionStartColumn=t,this.positionLineNumber=i,this.positionColumn=n}toString(){return"["+this.selectionStartLineNumber+","+this.selectionStartColumn+" -> "+this.positionLineNumber+","+this.positionColumn+"]"}equalsSelection(e){return s.selectionsEqual(this,e)}static selectionsEqual(e,t){return e.selectionStartLineNumber===t.selectionStartLineNumber&&e.selectionStartColumn===t.selectionStartColumn&&e.positionLineNumber===t.positionLineNumber&&e.positionColumn===t.positionColumn}getDirection(){return this.selectionStartLineNumber===this.startLineNumber&&this.selectionStartColumn===this.startColumn?0:1}setEndPosition(e,t){return 0===this.getDirection()?new s(this.startLineNumber,this.startColumn,e,t):new s(e,t,this.startLineNumber,this.startColumn)}getPosition(){return new n.L(this.positionLineNumber,this.positionColumn)}setStartPosition(e,t){return 0===this.getDirection()?new s(e,t,this.endLineNumber,this.endColumn):new s(this.endLineNumber,this.endColumn,e,t)}static fromPositions(e,t=e){return new s(e.lineNumber,e.column,t.lineNumber,t.column)}static liftSelection(e){return new s(e.selectionStartLineNumber,e.selectionStartColumn,e.positionLineNumber,e.positionColumn)}static selectionsArrEqual(e,t){if(e&&!t||!e&&t)return!1;if(!e&&!t)return!0;if(e.length!==t.length)return!1;for(let i=0,n=e.length;i<n;i++)if(!this.selectionsEqual(e[i],t[i]))return!1;return!0}static isISelection(e){return e&&"number"==typeof e.selectionStartLineNumber&&"number"==typeof e.selectionStartColumn&&"number"==typeof e.positionLineNumber&&"number"==typeof e.positionColumn}static createWithDirection(e,t,i,n,o){return 0===o?new s(e,t,i,n):new s(i,n,e,t)}}},50072:(e,t,i)=>{"use strict";i.d(t,{kH:()=>g,l$:()=>u,lZ:()=>h,oe:()=>d});var n=i(97295),o=i(1432),s=i(53060);let r,a,l;function c(){return r||(r=new TextDecoder("UTF-16LE")),r}function d(){return l||(l=o.r()?c():(a||(a=new TextDecoder("UTF-16BE")),a)),l}const h="undefined"!=typeof TextDecoder;let u,g;function p(e,t,i){let n=[],o=0;for(let r=0;r<i;r++){const i=s.mP(e,t);t+=2,n[o++]=String.fromCharCode(i)}return n.join("")}h?(u=e=>new f(e),g=function(e,t,i){const n=new Uint16Array(e.buffer,t,i);if(i>0&&(65279===n[0]||65534===n[0]))return p(e,t,i);return c().decode(n)}):(u=e=>new m,g=p);class f{constructor(e){this._capacity=0|e,this._buffer=new Uint16Array(this._capacity),this._completedStrings=null,this._bufferLength=0}reset(){this._completedStrings=null,this._bufferLength=0}build(){return null!==this._completedStrings?(this._flushBuffer(),this._completedStrings.join("")):this._buildBuffer()}_buildBuffer(){if(0===this._bufferLength)return"";const e=new Uint16Array(this._buffer.buffer,0,this._bufferLength);return d().decode(e)}_flushBuffer(){const e=this._buildBuffer();this._bufferLength=0,null===this._completedStrings?this._completedStrings=[e]:this._completedStrings[this._completedStrings.length]=e}write1(e){const t=this._capacity-this._bufferLength;t<=1&&(0===t||n.ZG(e))&&this._flushBuffer(),this._buffer[this._bufferLength++]=e}appendASCII(e){this._bufferLength===this._capacity&&this._flushBuffer(),this._buffer[this._bufferLength++]=e}appendASCIIString(e){const t=e.length;if(this._bufferLength+t>=this._capacity)return this._flushBuffer(),void(this._completedStrings[this._completedStrings.length]=e);for(let i=0;i<t;i++)this._buffer[this._bufferLength++]=e.charCodeAt(i)}}class m{constructor(){this._pieces=[],this._piecesLen=0}reset(){this._pieces=[],this._piecesLen=0}build(){return this._pieces.join("")}write1(e){this._pieces[this._piecesLen++]=String.fromCharCode(e)}appendASCII(e){this._pieces[this._piecesLen++]=String.fromCharCode(e)}appendASCIIString(e){this._pieces[this._piecesLen++]=e}}},85600:(e,t,i)=>{"use strict";i.d(t,{Hi:()=>s,WU:()=>n,hG:()=>o});class n{constructor(e,t,i){this._tokenBrand=void 0,this.offset=0|e,this.type=t,this.language=i}toString(){return"("+this.offset+", "+this.type+")"}}class o{constructor(e,t){this._tokenizationResultBrand=void 0,this.tokens=e,this.endState=t}}class s{constructor(e,t){this._tokenizationResult2Brand=void 0,this.tokens=e,this.endState=t}}},30653:(e,t,i)=>{"use strict";i.d(t,{p:()=>n});class n{constructor(e,t,i,n,o,s){this.id=e,this.label=t,this.alias=i,this._precondition=n,this._run=o,this._contextKeyService=s}isSupported(){return this._contextKeyService.contextMatchesRules(this._precondition)}run(){return this.isSupported()?this._run():Promise.resolve(void 0)}}},96518:(e,t,i)=>{"use strict";function n(e){return e&&"string"==typeof e.id}i.d(t,{I:()=>n,g:()=>o});const o={ICodeEditor:"vs.editor.ICodeEditor",IDiffEditor:"vs.editor.IDiffEditor"}},29102:(e,t,i)=>{"use strict";i.d(t,{u:()=>n});var n,o=i(63580),s=i(38819);!function(e){e.editorSimpleInput=new s.uy("editorSimpleInput",!1,!0),e.editorTextFocus=new s.uy("editorTextFocus",!1,o.N("editorTextFocus","Whether the editor text has focus (cursor is blinking)")),e.focus=new s.uy("editorFocus",!1,o.N("editorFocus","Whether the editor or an editor widget has focus (e.g. focus is in the find widget)")),e.textInputFocus=new s.uy("textInputFocus",!1,o.N("textInputFocus","Whether an editor or a rich text input has focus (cursor is blinking)")),e.readOnly=new s.uy("editorReadonly",!1,o.N("editorReadonly","Whether the editor is read only")),e.inDiffEditor=new s.uy("inDiffEditor",!1,o.N("inDiffEditor","Whether the context is a diff editor")),e.columnSelection=new s.uy("editorColumnSelection",!1,o.N("editorColumnSelection","Whether `editor.columnSelection` is enabled")),e.writable=e.readOnly.toNegated(),e.hasNonEmptySelection=new s.uy("editorHasSelection",!1,o.N("editorHasSelection","Whether the editor has text selected")),e.hasOnlyEmptySelection=e.hasNonEmptySelection.toNegated(),e.hasMultipleSelections=new s.uy("editorHasMultipleSelections",!1,o.N("editorHasMultipleSelections","Whether the editor has multiple selections")),e.hasSingleSelection=e.hasMultipleSelections.toNegated(),e.tabMovesFocus=new s.uy("editorTabMovesFocus",!1,o.N("editorTabMovesFocus","Whether `Tab` will move focus out of the editor")),e.tabDoesNotMoveFocus=e.tabMovesFocus.toNegated(),e.isInWalkThroughSnippet=new s.uy("isInEmbeddedEditor",!1,!0),e.canUndo=new s.uy("canUndo",!1,!0),e.canRedo=new s.uy("canRedo",!1,!0),e.hoverVisible=new s.uy("editorHoverVisible",!1,o.N("editorHoverVisible","Whether the editor hover is visible")),e.inCompositeEditor=new s.uy("inCompositeEditor",void 0,o.N("inCompositeEditor","Whether the editor is part of a larger editor (e.g. notebooks)")),e.notInCompositeEditor=e.inCompositeEditor.toNegated(),e.languageId=new s.uy("editorLangId","",o.N("editorLangId","The language identifier of the editor")),e.hasCompletionItemProvider=new s.uy("editorHasCompletionItemProvider",!1,o.N("editorHasCompletionItemProvider","Whether the editor has a completion item provider")),e.hasCodeActionsProvider=new s.uy("editorHasCodeActionsProvider",!1,o.N("editorHasCodeActionsProvider","Whether the editor has a code actions provider")),e.hasCodeLensProvider=new s.uy("editorHasCodeLensProvider",!1,o.N("editorHasCodeLensProvider","Whether the editor has a code lens provider")),e.hasDefinitionProvider=new s.uy("editorHasDefinitionProvider",!1,o.N("editorHasDefinitionProvider","Whether the editor has a definition provider")),e.hasDeclarationProvider=new s.uy("editorHasDeclarationProvider",!1,o.N("editorHasDeclarationProvider","Whether the editor has a declaration provider")),e.hasImplementationProvider=new s.uy("editorHasImplementationProvider",!1,o.N("editorHasImplementationProvider","Whether the editor has an implementation provider")),e.hasTypeDefinitionProvider=new s.uy("editorHasTypeDefinitionProvider",!1,o.N("editorHasTypeDefinitionProvider","Whether the editor has a type definition provider")),e.hasHoverProvider=new s.uy("editorHasHoverProvider",!1,o.N("editorHasHoverProvider","Whether the editor has a hover provider")),e.hasDocumentHighlightProvider=new s.uy("editorHasDocumentHighlightProvider",!1,o.N("editorHasDocumentHighlightProvider","Whether the editor has a document highlight provider")),e.hasDocumentSymbolProvider=new s.uy("editorHasDocumentSymbolProvider",!1,o.N("editorHasDocumentSymbolProvider","Whether the editor has a document symbol provider")),e.hasReferenceProvider=new s.uy("editorHasReferenceProvider",!1,o.N("editorHasReferenceProvider","Whether the editor has a reference provider")),e.hasRenameProvider=new s.uy("editorHasRenameProvider",!1,o.N("editorHasRenameProvider","Whether the editor has a rename provider")),e.hasSignatureHelpProvider=new s.uy("editorHasSignatureHelpProvider",!1,o.N("editorHasSignatureHelpProvider","Whether the editor has a signature help provider")),e.hasInlayHintsProvider=new s.uy("editorHasInlayHintsProvider",!1,o.N("editorHasInlayHintsProvider","Whether the editor has an inline hints provider")),e.hasDocumentFormattingProvider=new s.uy("editorHasDocumentFormattingProvider",!1,o.N("editorHasDocumentFormattingProvider","Whether the editor has a document formatting provider")),e.hasDocumentSelectionFormattingProvider=new s.uy("editorHasDocumentSelectionFormattingProvider",!1,o.N("editorHasDocumentSelectionFormattingProvider","Whether the editor has a document selection formatting provider")),e.hasMultipleDocumentFormattingProvider=new s.uy("editorHasMultipleDocumentFormattingProvider",!1,o.N("editorHasMultipleDocumentFormattingProvider","Whether the editor has multiple document formatting providers")),e.hasMultipleDocumentSelectionFormattingProvider=new s.uy("editorHasMultipleDocumentSelectionFormattingProvider",!1,o.N("editorHasMultipleDocumentSelectionFormattingProvider","Whether the editor has multiple document selection formatting providers"))}(n||(n={}))},84973:(e,t,i)=>{"use strict";i.d(t,{F5:()=>o,Qi:()=>h,UO:()=>c,dJ:()=>a,je:()=>u,s6:()=>s,sh:()=>n,tk:()=>l,vW:()=>d});var n,o,s,r=i(36248);!function(e){e[e.Left=1]="Left",e[e.Center=2]="Center",e[e.Right=4]="Right",e[e.Full=7]="Full"}(n||(n={})),function(e){e[e.Inline=1]="Inline",e[e.Gutter=2]="Gutter"}(o||(o={}));class a{constructor(e){this._textModelResolvedOptionsBrand=void 0,this.tabSize=Math.max(1,0|e.tabSize),this.indentSize=0|e.tabSize,this.insertSpaces=Boolean(e.insertSpaces),this.defaultEOL=0|e.defaultEOL,this.trimAutoWhitespace=Boolean(e.trimAutoWhitespace),this.bracketPairColorizationOptions=e.bracketPairColorizationOptions}equals(e){return this.tabSize===e.tabSize&&this.indentSize===e.indentSize&&this.insertSpaces===e.insertSpaces&&this.defaultEOL===e.defaultEOL&&this.trimAutoWhitespace===e.trimAutoWhitespace&&(0,r.fS)(this.bracketPairColorizationOptions,e.bracketPairColorizationOptions)}createChangeEvent(e){return{tabSize:this.tabSize!==e.tabSize,indentSize:this.indentSize!==e.indentSize,insertSpaces:this.insertSpaces!==e.insertSpaces,trimAutoWhitespace:this.trimAutoWhitespace!==e.trimAutoWhitespace}}}class l{constructor(e,t){this._findMatchBrand=void 0,this.range=e,this.matches=t}}!function(e){e[e.Disabled=0]="Disabled",e[e.EnabledForActive=1]="EnabledForActive",e[e.Enabled=2]="Enabled"}(s||(s={}));class c{constructor(e,t,i){this.visibleColumn=e,this.className=t,this.horizontalLine=i}}class d{constructor(e,t){this.top=e,this.endColumn=t}}class h{constructor(e,t,i,n,o,s){this.identifier=e,this.range=t,this.text=i,this.forceMoveMarkers=n,this.isAutoWhitespaceEdit=o,this._isTracked=s}}class u{constructor(e,t,i){this.reverseEdits=e,this.changes=t,this.trimAutoWhitespaceLineNumbers=i}}},95215:(e,t,i)=>{"use strict";i.d(t,{NL:()=>m,e9:()=>f});var n=i(63580),o=i(17301),s=i(3860),r=i(70666),a=i(60962),l=i(53060),c=i(95935);function d(e){return e.toString()}class h{constructor(e,t,i,n,o,s,r){this.beforeVersionId=e,this.afterVersionId=t,this.beforeEOL=i,this.afterEOL=n,this.beforeCursorState=o,this.afterCursorState=s,this.changes=r}static create(e,t){const i=e.getAlternativeVersionId(),n=p(e);return new h(i,i,n,n,t,t,[])}append(e,t,i,n,o){t.length>0&&(this.changes=(0,a.b)(this.changes,t)),this.afterEOL=i,this.afterVersionId=n,this.afterCursorState=o}static _writeSelectionsSize(e){return 4+16*(e?e.length:0)}static _writeSelections(e,t,i){if(l.T4(e,t?t.length:0,i),i+=4,t)for(const n of t)l.T4(e,n.selectionStartLineNumber,i),i+=4,l.T4(e,n.selectionStartColumn,i),i+=4,l.T4(e,n.positionLineNumber,i),i+=4,l.T4(e,n.positionColumn,i),i+=4;return i}static _readSelections(e,t,i){const n=l.Ag(e,t);t+=4;for(let o=0;o<n;o++){const n=l.Ag(e,t);t+=4;const o=l.Ag(e,t);t+=4;const r=l.Ag(e,t);t+=4;const a=l.Ag(e,t);t+=4,i.push(new s.Y(n,o,r,a))}return t}serialize(){let e=10+h._writeSelectionsSize(this.beforeCursorState)+h._writeSelectionsSize(this.afterCursorState)+4;for(const t of this.changes)e+=t.writeSize();const t=new Uint8Array(e);let i=0;l.T4(t,this.beforeVersionId,i),i+=4,l.T4(t,this.afterVersionId,i),i+=4,l.Cg(t,this.beforeEOL,i),i+=1,l.Cg(t,this.afterEOL,i),i+=1,i=h._writeSelections(t,this.beforeCursorState,i),i=h._writeSelections(t,this.afterCursorState,i),l.T4(t,this.changes.length,i),i+=4;for(const e of this.changes)i=e.write(t,i);return t.buffer}static deserialize(e){const t=new Uint8Array(e);let i=0;const n=l.Ag(t,i);i+=4;const o=l.Ag(t,i);i+=4;const s=l.Q$(t,i);i+=1;const r=l.Q$(t,i);i+=1;const c=[];i=h._readSelections(t,i,c);const d=[];i=h._readSelections(t,i,d);const u=l.Ag(t,i);i+=4;const g=[];for(let e=0;e<u;e++)i=a.q.read(t,i,g);return new h(n,o,s,r,c,d,g)}}class u{constructor(e,t){this.model=e,this._data=h.create(e,t)}get type(){return 0}get resource(){return r.o.isUri(this.model)?this.model:this.model.uri}get label(){return n.N("edit","Typing")}toString(){return(this._data instanceof h?this._data:h.deserialize(this._data)).changes.map((e=>e.toString())).join(", ")}matchesResource(e){return(r.o.isUri(this.model)?this.model:this.model.uri).toString()===e.toString()}setModel(e){this.model=e}canAppend(e){return this.model===e&&this._data instanceof h}append(e,t,i,n,o){this._data instanceof h&&this._data.append(e,t,i,n,o)}close(){this._data instanceof h&&(this._data=this._data.serialize())}open(){this._data instanceof h||(this._data=h.deserialize(this._data))}undo(){if(r.o.isUri(this.model))throw new Error("Invalid SingleModelEditStackElement");this._data instanceof h&&(this._data=this._data.serialize());const e=h.deserialize(this._data);this.model._applyUndo(e.changes,e.beforeEOL,e.beforeVersionId,e.beforeCursorState)}redo(){if(r.o.isUri(this.model))throw new Error("Invalid SingleModelEditStackElement");this._data instanceof h&&(this._data=this._data.serialize());const e=h.deserialize(this._data);this.model._applyRedo(e.changes,e.afterEOL,e.afterVersionId,e.afterCursorState)}heapSize(){return this._data instanceof h&&(this._data=this._data.serialize()),this._data.byteLength+168}}class g{constructor(e,t){this.type=1,this.label=e,this._isOpen=!0,this._editStackElementsArr=t.slice(0),this._editStackElementsMap=new Map;for(const e of this._editStackElementsArr){const t=d(e.resource);this._editStackElementsMap.set(t,e)}this._delegate=null}get resources(){return this._editStackElementsArr.map((e=>e.resource))}prepareUndoRedo(){if(this._delegate)return this._delegate.prepareUndoRedo(this)}matchesResource(e){const t=d(e);return this._editStackElementsMap.has(t)}setModel(e){const t=d(r.o.isUri(e)?e:e.uri);this._editStackElementsMap.has(t)&&this._editStackElementsMap.get(t).setModel(e)}canAppend(e){if(!this._isOpen)return!1;const t=d(e.uri);if(this._editStackElementsMap.has(t)){return this._editStackElementsMap.get(t).canAppend(e)}return!1}append(e,t,i,n,o){const s=d(e.uri);this._editStackElementsMap.get(s).append(e,t,i,n,o)}close(){this._isOpen=!1}open(){}undo(){this._isOpen=!1;for(const e of this._editStackElementsArr)e.undo()}redo(){for(const e of this._editStackElementsArr)e.redo()}heapSize(e){const t=d(e);if(this._editStackElementsMap.has(t)){return this._editStackElementsMap.get(t).heapSize()}return 0}split(){return this._editStackElementsArr}toString(){let e=[];for(const t of this._editStackElementsArr)e.push(`${(0,c.EZ)(t.resource)}: ${t}`);return`{${e.join(", ")}}`}}function p(e){return"\n"===e.getEOL()?0:1}function f(e){return!!e&&(e instanceof u||e instanceof g)}class m{constructor(e,t){this._model=e,this._undoRedoService=t}pushStackElement(){const e=this._undoRedoService.getLastElement(this._model.uri);f(e)&&e.close()}popStackElement(){const e=this._undoRedoService.getLastElement(this._model.uri);f(e)&&e.open()}clear(){this._undoRedoService.removeElements(this._model.uri)}_getOrCreateEditStackElement(e){const t=this._undoRedoService.getLastElement(this._model.uri);if(f(t)&&t.canAppend(this._model))return t;const i=new u(this._model,e);return this._undoRedoService.pushElement(i),i}pushEOL(e){const t=this._getOrCreateEditStackElement(null);this._model.setEOL(e),t.append(this._model,[],p(this._model),this._model.getAlternativeVersionId(),null)}pushEditOperation(e,t,i){const n=this._getOrCreateEditStackElement(e),o=this._model.applyEdits(t,!0),s=m._computeCursorState(i,o),r=o.map(((e,t)=>({index:t,textChange:e.textChange})));return r.sort(((e,t)=>e.textChange.oldPosition===t.textChange.oldPosition?e.index-t.index:e.textChange.oldPosition-t.textChange.oldPosition)),n.append(this._model,r.map((e=>e.textChange)),p(this._model),this._model.getAlternativeVersionId(),s),s}static _computeCursorState(e,t){try{return e?e(t):null}catch(e){return(0,o.dL)(e),null}}}},60962:(e,t,i)=>{"use strict";i.d(t,{b:()=>a,q:()=>r});var n=i(53060),o=i(50072);function s(e){return e.replace(/\n/g,"\\n").replace(/\r/g,"\\r")}class r{constructor(e,t,i,n){this.oldPosition=e,this.oldText=t,this.newPosition=i,this.newText=n}get oldLength(){return this.oldText.length}get oldEnd(){return this.oldPosition+this.oldText.length}get newLength(){return this.newText.length}get newEnd(){return this.newPosition+this.newText.length}toString(){return 0===this.oldText.length?`(insert@${this.oldPosition} "${s(this.newText)}")`:0===this.newText.length?`(delete@${this.oldPosition} "${s(this.oldText)}")`:`(replace@${this.oldPosition} "${s(this.oldText)}" with "${s(this.newText)}")`}static _writeStringSize(e){return 4+2*e.length}static _writeString(e,t,i){const o=t.length;n.T4(e,o,i),i+=4;for(let s=0;s<o;s++)n.oq(e,t.charCodeAt(s),i),i+=2;return i}static _readString(e,t){const i=n.Ag(e,t);return t+=4,(0,o.kH)(e,t,i)}writeSize(){return 8+r._writeStringSize(this.oldText)+r._writeStringSize(this.newText)}write(e,t){return n.T4(e,this.oldPosition,t),t+=4,n.T4(e,this.newPosition,t),t+=4,t=r._writeString(e,this.oldText,t),t=r._writeString(e,this.newText,t)}static read(e,t,i){const o=n.Ag(e,t);t+=4;const s=n.Ag(e,t);t+=4;const a=r._readString(e,t);t+=r._writeStringSize(a);const l=r._readString(e,t);return t+=r._writeStringSize(l),i.push(new r(o,a,s,l)),t}}function a(e,t){if(null===e||0===e.length)return t;return new l(e,t).compress()}class l{constructor(e,t){this._prevEdits=e,this._currEdits=t,this._result=[],this._resultLen=0,this._prevLen=this._prevEdits.length,this._prevDeltaOffset=0,this._currLen=this._currEdits.length,this._currDeltaOffset=0}compress(){let e=0,t=0,i=this._getPrev(e),n=this._getCurr(t);for(;e<this._prevLen||t<this._currLen;){if(null===i){this._acceptCurr(n),n=this._getCurr(++t);continue}if(null===n){this._acceptPrev(i),i=this._getPrev(++e);continue}if(n.oldEnd<=i.newPosition){this._acceptCurr(n),n=this._getCurr(++t);continue}if(i.newEnd<=n.oldPosition){this._acceptPrev(i),i=this._getPrev(++e);continue}if(n.oldPosition<i.newPosition){const[e,t]=l._splitCurr(n,i.newPosition-n.oldPosition);this._acceptCurr(e),n=t;continue}if(i.newPosition<n.oldPosition){const[e,t]=l._splitPrev(i,n.oldPosition-i.newPosition);this._acceptPrev(e),i=t;continue}let o,s;if(n.oldEnd===i.newEnd)o=i,s=n,i=this._getPrev(++e),n=this._getCurr(++t);else if(n.oldEnd<i.newEnd){const[e,r]=l._splitPrev(i,n.oldLength);o=e,s=n,i=r,n=this._getCurr(++t)}else{const[t,r]=l._splitCurr(n,i.newLength);o=i,s=t,i=this._getPrev(++e),n=r}this._result[this._resultLen++]=new r(o.oldPosition,o.oldText,s.newPosition,s.newText),this._prevDeltaOffset+=o.newLength-o.oldLength,this._currDeltaOffset+=s.newLength-s.oldLength}const o=l._merge(this._result);return l._removeNoOps(o)}_acceptCurr(e){this._result[this._resultLen++]=l._rebaseCurr(this._prevDeltaOffset,e),this._currDeltaOffset+=e.newLength-e.oldLength}_getCurr(e){return e<this._currLen?this._currEdits[e]:null}_acceptPrev(e){this._result[this._resultLen++]=l._rebasePrev(this._currDeltaOffset,e),this._prevDeltaOffset+=e.newLength-e.oldLength}_getPrev(e){return e<this._prevLen?this._prevEdits[e]:null}static _rebaseCurr(e,t){return new r(t.oldPosition-e,t.oldText,t.newPosition,t.newText)}static _rebasePrev(e,t){return new r(t.oldPosition,t.oldText,t.newPosition+e,t.newText)}static _splitPrev(e,t){const i=e.newText.substr(0,t),n=e.newText.substr(t);return[new r(e.oldPosition,e.oldText,e.newPosition,i),new r(e.oldEnd,"",e.newPosition+t,n)]}static _splitCurr(e,t){const i=e.oldText.substr(0,t),n=e.oldText.substr(t);return[new r(e.oldPosition,i,e.newPosition,e.newText),new r(e.oldPosition+t,n,e.newEnd,"")]}static _merge(e){if(0===e.length)return e;let t=[],i=0,n=e[0];for(let o=1;o<e.length;o++){const s=e[o];n.oldEnd===s.oldPosition?n=new r(n.oldPosition,n.oldText+s.oldText,n.newPosition,n.newText+s.newText):(t[i++]=n,n=s)}return t[i++]=n,t}static _removeNoOps(e){if(0===e.length)return e;let t=[],i=0;for(let n=0;n<e.length;n++){const o=e[n];o.oldText!==o.newText&&(t[i++]=o)}return t}}},44174:(e,t,i)=>{"use strict";i.d(t,{WE:()=>zt,qx:()=>Qt,yO:()=>Ht});var n=i(17301),o=i(4669),s=i(5976),r=i(97295),a=i(70666),l=i(64141),c=i(50187),d=i(24314),h=i(3860),u=i(84973),g=i(95215);class p{constructor(){this.spacesDiff=0,this.looksLikeAlignment=!1}}function f(e,t,i,n,o){let s;for(o.spacesDiff=0,o.looksLikeAlignment=!1,s=0;s<t&&s<n;s++){if(e.charCodeAt(s)!==i.charCodeAt(s))break}let r=0,a=0;for(let i=s;i<t;i++){32===e.charCodeAt(i)?r++:a++}let l=0,c=0;for(let e=s;e<n;e++){32===i.charCodeAt(e)?l++:c++}if(r>0&&a>0)return;if(l>0&&c>0)return;let d=Math.abs(a-c),h=Math.abs(r-l);if(0===d)return o.spacesDiff=h,void(h>0&&0<=l-1&&l-1<e.length&&l<i.length&&32!==i.charCodeAt(l)&&32===e.charCodeAt(l-1)&&44===e.charCodeAt(e.length-1)&&(o.looksLikeAlignment=!0));h%d!=0||(o.spacesDiff=h/d)}function m(e,t,i){const n=Math.min(e.getLineCount(),1e4);let o=0,s=0,r="",a=0;const l=[2,4,6,8,3,5,7];let c=[0,0,0,0,0,0,0,0,0],d=new p;for(let l=1;l<=n;l++){let n=e.getLineLength(l),h=e.getLineContent(l);const u=n<=65536;let g=!1,p=0,m=0,v=0;for(let t=0,i=n;t<i;t++){let i=u?h.charCodeAt(t):e.getLineCharCode(l,t);if(9===i)v++;else{if(32!==i){g=!0,p=t;break}m++}}if(!g)continue;if(v>0?o++:m>1&&s++,f(r,a,h,p,d),d.looksLikeAlignment&&(!i||t!==d.spacesDiff))continue;let _=d.spacesDiff;_<=8&&c[_]++,r=h,a=p}let h=i;o!==s&&(h=o<s);let u=t;if(h){let e=h?0:.1*n;l.forEach((t=>{let i=c[t];i>e&&(e=i,u=t)})),4===u&&c[4]>0&&c[2]>0&&c[2]>=c[4]/2&&(u=2)}return{insertSpaces:h,tabSize:u}}function v(e){return(1&e.metadata)>>>0}function _(e,t){e.metadata=254&e.metadata|t<<0}function b(e){return(2&e.metadata)>>>1==1}function w(e,t){e.metadata=253&e.metadata|(t?1:0)<<1}function y(e){return(4&e.metadata)>>>2==1}function C(e,t){e.metadata=251&e.metadata|(t?1:0)<<2}function x(e,t){e.metadata=231&e.metadata|t<<3}function S(e,t){e.metadata=223&e.metadata|(t?1:0)<<5}class k{constructor(e,t,i){this.metadata=0,this.parent=this,this.left=this,this.right=this,_(this,1),this.start=t,this.end=i,this.delta=0,this.maxEnd=i,this.id=e,this.ownerId=0,this.options=null,C(this,!1),x(this,1),S(this,!1),this.cachedVersionId=0,this.cachedAbsoluteStart=t,this.cachedAbsoluteEnd=i,this.range=null,w(this,!1)}reset(e,t,i,n){this.start=t,this.end=i,this.maxEnd=i,this.cachedVersionId=e,this.cachedAbsoluteStart=t,this.cachedAbsoluteEnd=i,this.range=n}setOptions(e){this.options=e;let t=this.options.className;C(this,"squiggly-error"===t||"squiggly-warning"===t||"squiggly-info"===t),x(this,this.options.stickiness),S(this,this.options.collapseOnReplaceEdit)}setCachedOffsets(e,t,i){this.cachedVersionId!==i&&(this.range=null),this.cachedVersionId=i,this.cachedAbsoluteStart=e,this.cachedAbsoluteEnd=t}detach(){this.parent=null,this.left=null,this.right=null}}const L=new k(null,0,0);L.parent=L,L.left=L,L.right=L,_(L,0);class N{constructor(){this.root=L,this.requestNormalizeDelta=!1}intervalSearch(e,t,i,n,o){return this.root===L?[]:function(e,t,i,n,o,s){let r=e.root,a=0,l=0,c=0,d=0,h=[],u=0;for(;r!==L;)if(b(r))w(r.left,!1),w(r.right,!1),r===r.parent.right&&(a-=r.parent.delta),r=r.parent;else{if(!b(r.left)){if(l=a+r.maxEnd,l<t){w(r,!0);continue}if(r.left!==L){r=r.left;continue}}if(c=a+r.start,c>i)w(r,!0);else{if(d=a+r.end,d>=t){r.setCachedOffsets(c,d,s);let e=!0;n&&r.ownerId&&r.ownerId!==n&&(e=!1),o&&y(r)&&(e=!1),e&&(h[u++]=r)}w(r,!0),r.right===L||b(r.right)||(a+=r.delta,r=r.right)}}return w(e.root,!1),h}(this,e,t,i,n,o)}search(e,t,i){return this.root===L?[]:function(e,t,i,n){let o=e.root,s=0,r=0,a=0,l=[],c=0;for(;o!==L;){if(b(o)){w(o.left,!1),w(o.right,!1),o===o.parent.right&&(s-=o.parent.delta),o=o.parent;continue}if(o.left!==L&&!b(o.left)){o=o.left;continue}r=s+o.start,a=s+o.end,o.setCachedOffsets(r,a,n);let e=!0;t&&o.ownerId&&o.ownerId!==t&&(e=!1),i&&y(o)&&(e=!1),e&&(l[c++]=o),w(o,!0),o.right===L||b(o.right)||(s+=o.delta,o=o.right)}return w(e.root,!1),l}(this,e,t,i)}collectNodesFromOwner(e){return function(e,t){let i=e.root,n=[],o=0;for(;i!==L;)b(i)?(w(i.left,!1),w(i.right,!1),i=i.parent):i.left===L||b(i.left)?(i.ownerId===t&&(n[o++]=i),w(i,!0),i.right===L||b(i.right)||(i=i.right)):i=i.left;return w(e.root,!1),n}(this,e)}collectNodesPostOrder(){return function(e){let t=e.root,i=[],n=0;for(;t!==L;)b(t)?(w(t.left,!1),w(t.right,!1),t=t.parent):t.left===L||b(t.left)?t.right===L||b(t.right)?(i[n++]=t,w(t,!0)):t=t.right:t=t.left;return w(e.root,!1),i}(this)}insert(e){E(this,e),this._normalizeDeltaIfNecessary()}delete(e){T(this,e),this._normalizeDeltaIfNecessary()}resolveNode(e,t){const i=e;let n=0;for(;e!==this.root;)e===e.parent.right&&(n+=e.parent.delta),e=e.parent;const o=i.start+n,s=i.end+n;i.setCachedOffsets(o,s,t)}acceptReplace(e,t,i,n){const o=function(e,t,i){let n=e.root,o=0,s=0,r=0,a=0,l=[],c=0;for(;n!==L;)if(b(n))w(n.left,!1),w(n.right,!1),n===n.parent.right&&(o-=n.parent.delta),n=n.parent;else{if(!b(n.left)){if(s=o+n.maxEnd,s<t){w(n,!0);continue}if(n.left!==L){n=n.left;continue}}r=o+n.start,r>i?w(n,!0):(a=o+n.end,a>=t&&(n.setCachedOffsets(r,a,0),l[c++]=n),w(n,!0),n.right===L||b(n.right)||(o+=n.delta,n=n.right))}return w(e.root,!1),l}(this,e,e+t);for(let e=0,t=o.length;e<t;e++){T(this,o[e])}this._normalizeDeltaIfNecessary(),function(e,t,i,n){let o=e.root,s=0,r=0,a=0;const l=n-(i-t);for(;o!==L;)if(b(o))w(o.left,!1),w(o.right,!1),o===o.parent.right&&(s-=o.parent.delta),R(o),o=o.parent;else{if(!b(o.left)){if(r=s+o.maxEnd,r<t){w(o,!0);continue}if(o.left!==L){o=o.left;continue}}a=s+o.start,a>i?(o.start+=l,o.end+=l,o.delta+=l,(o.delta<-1073741824||o.delta>1073741824)&&(e.requestNormalizeDelta=!0),w(o,!0)):(w(o,!0),o.right===L||b(o.right)||(s+=o.delta,o=o.right))}w(e.root,!1)}(this,e,e+t,i),this._normalizeDeltaIfNecessary();for(let s=0,r=o.length;s<r;s++){const r=o[s];r.start=r.cachedAbsoluteStart,r.end=r.cachedAbsoluteEnd,I(r,e,e+t,i,n),r.maxEnd=r.end,E(this,r)}this._normalizeDeltaIfNecessary()}_normalizeDeltaIfNecessary(){this.requestNormalizeDelta&&(this.requestNormalizeDelta=!1,function(e){let t=e.root,i=0;for(;t!==L;)t.left===L||b(t.left)?t.right===L||b(t.right)?(t.start=i+t.start,t.end=i+t.end,t.delta=0,R(t),w(t,!0),w(t.left,!1),w(t.right,!1),t===t.parent.right&&(i-=t.parent.delta),t=t.parent):(i+=t.delta,t=t.right):t=t.left;w(e.root,!1)}(this))}}function D(e,t,i,n){return e<i||!(e>i)&&(1!==n&&(2===n||t))}function I(e,t,i,n,o){const s=function(e){return(24&e.metadata)>>>3}(e),r=0===s||2===s,a=1===s||2===s,l=i-t,c=n,d=Math.min(l,c),h=e.start;let u=!1;const g=e.end;let p=!1;t<=h&&g<=i&&function(e){return(32&e.metadata)>>>5==1}(e)&&(e.start=t,u=!0,e.end=t,p=!0);{const e=o?1:l>0?2:0;!u&&D(h,r,t,e)&&(u=!0),!p&&D(g,a,t,e)&&(p=!0)}if(d>0&&!o){const e=l>c?2:0;!u&&D(h,r,t+d,e)&&(u=!0),!p&&D(g,a,t+d,e)&&(p=!0)}{const n=o?1:0;!u&&D(h,r,i,n)&&(e.start=t+c,u=!0),!p&&D(g,a,i,n)&&(e.end=t+c,p=!0)}const f=c-l;u||(e.start=Math.max(0,h+f)),p||(e.end=Math.max(0,g+f)),e.start>e.end&&(e.end=e.start)}function E(e,t){if(e.root===L)return t.parent=L,t.left=L,t.right=L,_(t,0),e.root=t,e.root;!function(e,t){let i=0,n=e.root;const o=t.start,s=t.end;for(;;){if(B(o,s,n.start+i,n.end+i)<0){if(n.left===L){t.start-=i,t.end-=i,t.maxEnd-=i,n.left=t;break}n=n.left}else{if(n.right===L){t.start-=i+n.delta,t.end-=i+n.delta,t.maxEnd-=i+n.delta,n.right=t;break}i+=n.delta,n=n.right}}t.parent=n,t.left=L,t.right=L,_(t,1)}(e,t),F(t.parent);let i=t;for(;i!==e.root&&1===v(i.parent);)if(i.parent===i.parent.parent.left){const t=i.parent.parent.right;1===v(t)?(_(i.parent,0),_(t,0),_(i.parent.parent,1),i=i.parent.parent):(i===i.parent.right&&(i=i.parent,A(e,i)),_(i.parent,0),_(i.parent.parent,1),O(e,i.parent.parent))}else{const t=i.parent.parent.left;1===v(t)?(_(i.parent,0),_(t,0),_(i.parent.parent,1),i=i.parent.parent):(i===i.parent.left&&(i=i.parent,O(e,i)),_(i.parent,0),_(i.parent.parent,1),A(e,i.parent.parent))}return _(e.root,0),t}function T(e,t){let i,n;if(t.left===L?(i=t.right,n=t,i.delta+=t.delta,(i.delta<-1073741824||i.delta>1073741824)&&(e.requestNormalizeDelta=!0),i.start+=t.delta,i.end+=t.delta):t.right===L?(i=t.left,n=t):(n=function(e){for(;e.left!==L;)e=e.left;return e}(t.right),i=n.right,i.start+=n.delta,i.end+=n.delta,i.delta+=n.delta,(i.delta<-1073741824||i.delta>1073741824)&&(e.requestNormalizeDelta=!0),n.start+=t.delta,n.end+=t.delta,n.delta=t.delta,(n.delta<-1073741824||n.delta>1073741824)&&(e.requestNormalizeDelta=!0)),n===e.root)return e.root=i,_(i,0),t.detach(),M(),R(i),void(e.root.parent=L);let o,s=1===v(n);if(n===n.parent.left?n.parent.left=i:n.parent.right=i,n===t?i.parent=n.parent:(n.parent===t?i.parent=n:i.parent=n.parent,n.left=t.left,n.right=t.right,n.parent=t.parent,_(n,v(t)),t===e.root?e.root=n:t===t.parent.left?t.parent.left=n:t.parent.right=n,n.left!==L&&(n.left.parent=n),n.right!==L&&(n.right.parent=n)),t.detach(),s)return F(i.parent),n!==t&&(F(n),F(n.parent)),void M();for(F(i),F(i.parent),n!==t&&(F(n),F(n.parent));i!==e.root&&0===v(i);)i===i.parent.left?(o=i.parent.right,1===v(o)&&(_(o,0),_(i.parent,1),A(e,i.parent),o=i.parent.right),0===v(o.left)&&0===v(o.right)?(_(o,1),i=i.parent):(0===v(o.right)&&(_(o.left,0),_(o,1),O(e,o),o=i.parent.right),_(o,v(i.parent)),_(i.parent,0),_(o.right,0),A(e,i.parent),i=e.root)):(o=i.parent.left,1===v(o)&&(_(o,0),_(i.parent,1),O(e,i.parent),o=i.parent.left),0===v(o.left)&&0===v(o.right)?(_(o,1),i=i.parent):(0===v(o.left)&&(_(o.right,0),_(o,1),A(e,o),o=i.parent.left),_(o,v(i.parent)),_(i.parent,0),_(o.left,0),O(e,i.parent),i=e.root));_(i,0),M()}function M(){L.parent=L,L.delta=0,L.start=0,L.end=0}function A(e,t){const i=t.right;i.delta+=t.delta,(i.delta<-1073741824||i.delta>1073741824)&&(e.requestNormalizeDelta=!0),i.start+=t.delta,i.end+=t.delta,t.right=i.left,i.left!==L&&(i.left.parent=t),i.parent=t.parent,t.parent===L?e.root=i:t===t.parent.left?t.parent.left=i:t.parent.right=i,i.left=t,t.parent=i,R(t),R(i)}function O(e,t){const i=t.left;t.delta-=i.delta,(t.delta<-1073741824||t.delta>1073741824)&&(e.requestNormalizeDelta=!0),t.start-=i.delta,t.end-=i.delta,t.left=i.right,i.right!==L&&(i.right.parent=t),i.parent=t.parent,t.parent===L?e.root=i:t===t.parent.right?t.parent.right=i:t.parent.left=i,i.right=t,t.parent=i,R(t),R(i)}function P(e){let t=e.end;if(e.left!==L){const i=e.left.maxEnd;i>t&&(t=i)}if(e.right!==L){const i=e.right.maxEnd+e.delta;i>t&&(t=i)}return t}function R(e){e.maxEnd=P(e)}function F(e){for(;e!==L;){const t=P(e);if(e.maxEnd===t)return;e.maxEnd=t,e=e.parent}}function B(e,t,i,n){return e===i?t-n:e-i}class V{constructor(e,t){this.piece=e,this.color=t,this.size_left=0,this.lf_left=0,this.parent=this,this.left=this,this.right=this}next(){if(this.right!==W)return H(this.right);let e=this;for(;e.parent!==W&&e.parent.left!==e;)e=e.parent;return e.parent===W?W:e.parent}prev(){if(this.left!==W)return z(this.left);let e=this;for(;e.parent!==W&&e.parent.right!==e;)e=e.parent;return e.parent===W?W:e.parent}detach(){this.parent=null,this.left=null,this.right=null}}const W=new V(null,0);function H(e){for(;e.left!==W;)e=e.left;return e}function z(e){for(;e.right!==W;)e=e.right;return e}function j(e){return e===W?0:e.size_left+e.piece.length+j(e.right)}function U(e){return e===W?0:e.lf_left+e.piece.lineFeedCnt+U(e.right)}function $(){W.parent=W}function K(e,t){let i=t.right;i.size_left+=t.size_left+(t.piece?t.piece.length:0),i.lf_left+=t.lf_left+(t.piece?t.piece.lineFeedCnt:0),t.right=i.left,i.left!==W&&(i.left.parent=t),i.parent=t.parent,t.parent===W?e.root=i:t.parent.left===t?t.parent.left=i:t.parent.right=i,i.left=t,t.parent=i}function q(e,t){let i=t.left;t.left=i.right,i.right!==W&&(i.right.parent=t),i.parent=t.parent,t.size_left-=i.size_left+(i.piece?i.piece.length:0),t.lf_left-=i.lf_left+(i.piece?i.piece.lineFeedCnt:0),t.parent===W?e.root=i:t===t.parent.right?t.parent.right=i:t.parent.left=i,i.right=t,t.parent=i}function Z(e,t){let i,n;if(t.left===W?(n=t,i=n.right):t.right===W?(n=t,i=n.left):(n=H(t.right),i=n.right),n===e.root)return e.root=i,i.color=0,t.detach(),$(),void(e.root.parent=W);let o,s=1===n.color;if(n===n.parent.left?n.parent.left=i:n.parent.right=i,n===t?(i.parent=n.parent,Q(e,i)):(n.parent===t?i.parent=n:i.parent=n.parent,Q(e,i),n.left=t.left,n.right=t.right,n.parent=t.parent,n.color=t.color,t===e.root?e.root=n:t===t.parent.left?t.parent.left=n:t.parent.right=n,n.left!==W&&(n.left.parent=n),n.right!==W&&(n.right.parent=n),n.size_left=t.size_left,n.lf_left=t.lf_left,Q(e,n)),t.detach(),i.parent.left===i){let t=j(i),n=U(i);if(t!==i.parent.size_left||n!==i.parent.lf_left){let o=t-i.parent.size_left,s=n-i.parent.lf_left;i.parent.size_left=t,i.parent.lf_left=n,Y(e,i.parent,o,s)}}if(Q(e,i.parent),s)$();else{for(;i!==e.root&&0===i.color;)i===i.parent.left?(o=i.parent.right,1===o.color&&(o.color=0,i.parent.color=1,K(e,i.parent),o=i.parent.right),0===o.left.color&&0===o.right.color?(o.color=1,i=i.parent):(0===o.right.color&&(o.left.color=0,o.color=1,q(e,o),o=i.parent.right),o.color=i.parent.color,i.parent.color=0,o.right.color=0,K(e,i.parent),i=e.root)):(o=i.parent.left,1===o.color&&(o.color=0,i.parent.color=1,q(e,i.parent),o=i.parent.left),0===o.left.color&&0===o.right.color?(o.color=1,i=i.parent):(0===o.left.color&&(o.right.color=0,o.color=1,K(e,o),o=i.parent.left),o.color=i.parent.color,i.parent.color=0,o.left.color=0,q(e,i.parent),i=e.root));i.color=0,$()}}function G(e,t){for(Q(e,t);t!==e.root&&1===t.parent.color;)if(t.parent===t.parent.parent.left){const i=t.parent.parent.right;1===i.color?(t.parent.color=0,i.color=0,t.parent.parent.color=1,t=t.parent.parent):(t===t.parent.right&&K(e,t=t.parent),t.parent.color=0,t.parent.parent.color=1,q(e,t.parent.parent))}else{const i=t.parent.parent.left;1===i.color?(t.parent.color=0,i.color=0,t.parent.parent.color=1,t=t.parent.parent):(t===t.parent.left&&q(e,t=t.parent),t.parent.color=0,t.parent.parent.color=1,K(e,t.parent.parent))}e.root.color=0}function Y(e,t,i,n){for(;t!==e.root&&t!==W;)t.parent.left===t&&(t.parent.size_left+=i,t.parent.lf_left+=n),t=t.parent}function Q(e,t){let i=0,n=0;if(t!==e.root){for(;t!==e.root&&t===t.parent.right;)t=t.parent;if(t!==e.root)for(i=j((t=t.parent).left)-t.size_left,n=U(t.left)-t.lf_left,t.size_left+=i,t.lf_left+=n;t!==e.root&&(0!==i||0!==n);)t.parent.left===t&&(t.parent.size_left+=i,t.parent.lf_left+=n),t=t.parent}}W.parent=W,W.left=W,W.right=W,W.color=0;var X=i(77277);const J=65535;function ee(e){let t;return t=e[e.length-1]<65536?new Uint16Array(e.length):new Uint32Array(e.length),t.set(e,0),t}class te{constructor(e,t,i,n,o){this.lineStarts=e,this.cr=t,this.lf=i,this.crlf=n,this.isBasicASCII=o}}function ie(e,t=!0){let i=[0],n=1;for(let t=0,o=e.length;t<o;t++){const s=e.charCodeAt(t);13===s?t+1<o&&10===e.charCodeAt(t+1)?(i[n++]=t+2,t++):i[n++]=t+1:10===s&&(i[n++]=t+1)}return t?ee(i):i}class ne{constructor(e,t,i,n,o){this.bufferIndex=e,this.start=t,this.end=i,this.lineFeedCnt=n,this.length=o}}class oe{constructor(e,t){this.buffer=e,this.lineStarts=t}}class se{constructor(e,t){this._pieces=[],this._tree=e,this._BOM=t,this._index=0,e.root!==W&&e.iterate(e.root,(e=>(e!==W&&this._pieces.push(e.piece),!0)))}read(){return 0===this._pieces.length?0===this._index?(this._index++,this._BOM):null:this._index>this._pieces.length-1?null:0===this._index?this._BOM+this._tree.getPieceContent(this._pieces[this._index++]):this._tree.getPieceContent(this._pieces[this._index++])}}class re{constructor(e){this._limit=e,this._cache=[]}get(e){for(let t=this._cache.length-1;t>=0;t--){let i=this._cache[t];if(i.nodeStartOffset<=e&&i.nodeStartOffset+i.node.piece.length>=e)return i}return null}get2(e){for(let t=this._cache.length-1;t>=0;t--){let i=this._cache[t];if(i.nodeStartLineNumber&&i.nodeStartLineNumber<e&&i.nodeStartLineNumber+i.node.piece.lineFeedCnt>=e)return i}return null}set(e){this._cache.length>=this._limit&&this._cache.shift(),this._cache.push(e)}validate(e){let t=!1,i=this._cache;for(let n=0;n<i.length;n++){let o=i[n];(null===o.node.parent||o.nodeStartOffset>=e)&&(i[n]=null,t=!0)}if(t){let e=[];for(const t of i)null!==t&&e.push(t);this._cache=e}}}class ae{constructor(e,t,i){this.create(e,t,i)}create(e,t,i){this._buffers=[new oe("",[0])],this._lastChangeBufferPos={line:0,column:0},this.root=W,this._lineCnt=1,this._length=0,this._EOL=t,this._EOLLength=t.length,this._EOLNormalized=i;let n=null;for(let t=0,i=e.length;t<i;t++)if(e[t].buffer.length>0){e[t].lineStarts||(e[t].lineStarts=ie(e[t].buffer));let i=new ne(t+1,{line:0,column:0},{line:e[t].lineStarts.length-1,column:e[t].buffer.length-e[t].lineStarts[e[t].lineStarts.length-1]},e[t].lineStarts.length-1,e[t].buffer.length);this._buffers.push(e[t]),n=this.rbInsertRight(n,i)}this._searchCache=new re(1),this._lastVisitedLine={lineNumber:0,value:""},this.computeBufferMetadata()}normalizeEOL(e){let t=65535-Math.floor(21845),i=2*t,n="",o=0,s=[];if(this.iterate(this.root,(r=>{let a=this.getNodeContent(r),l=a.length;if(o<=t||o+l<i)return n+=a,o+=l,!0;let c=n.replace(/\r\n|\r|\n/g,e);return s.push(new oe(c,ie(c))),n=a,o=l,!0})),o>0){let t=n.replace(/\r\n|\r|\n/g,e);s.push(new oe(t,ie(t)))}this.create(s,e,!0)}getEOL(){return this._EOL}setEOL(e){this._EOL=e,this._EOLLength=this._EOL.length,this.normalizeEOL(e)}createSnapshot(e){return new se(this,e)}getOffsetAt(e,t){let i=0,n=this.root;for(;n!==W;)if(n.left!==W&&n.lf_left+1>=e)n=n.left;else{if(n.lf_left+n.piece.lineFeedCnt+1>=e){return i+=n.size_left,i+(this.getAccumulatedValue(n,e-n.lf_left-2)+t-1)}e-=n.lf_left+n.piece.lineFeedCnt,i+=n.size_left+n.piece.length,n=n.right}return i}getPositionAt(e){e=Math.floor(e),e=Math.max(0,e);let t=this.root,i=0,n=e;for(;t!==W;)if(0!==t.size_left&&t.size_left>=e)t=t.left;else{if(t.size_left+t.piece.length>=e){let o=this.getIndexOf(t,e-t.size_left);if(i+=t.lf_left+o.index,0===o.index){let e=n-this.getOffsetAt(i+1,1);return new c.L(i+1,e+1)}return new c.L(i+1,o.remainder+1)}if(e-=t.size_left+t.piece.length,i+=t.lf_left+t.piece.lineFeedCnt,t.right===W){let t=n-e-this.getOffsetAt(i+1,1);return new c.L(i+1,t+1)}t=t.right}return new c.L(1,1)}getValueInRange(e,t){if(e.startLineNumber===e.endLineNumber&&e.startColumn===e.endColumn)return"";let i=this.nodeAt2(e.startLineNumber,e.startColumn),n=this.nodeAt2(e.endLineNumber,e.endColumn),o=this.getValueInRange2(i,n);return t?t===this._EOL&&this._EOLNormalized&&t===this.getEOL()&&this._EOLNormalized?o:o.replace(/\r\n|\r|\n/g,t):o}getValueInRange2(e,t){if(e.node===t.node){let i=e.node,n=this._buffers[i.piece.bufferIndex].buffer,o=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);return n.substring(o+e.remainder,o+t.remainder)}let i=e.node,n=this._buffers[i.piece.bufferIndex].buffer,o=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start),s=n.substring(o+e.remainder,o+i.piece.length);for(i=i.next();i!==W;){let e=this._buffers[i.piece.bufferIndex].buffer,n=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);if(i===t.node){s+=e.substring(n,n+t.remainder);break}s+=e.substr(n,i.piece.length),i=i.next()}return s}getLinesContent(){let e=[],t=0,i="",n=!1;return this.iterate(this.root,(o=>{if(o===W)return!0;const s=o.piece;let r=s.length;if(0===r)return!0;const a=this._buffers[s.bufferIndex].buffer,l=this._buffers[s.bufferIndex].lineStarts,c=s.start.line,d=s.end.line;let h=l[c]+s.start.column;if(n&&(10===a.charCodeAt(h)&&(h++,r--),e[t++]=i,i="",n=!1,0===r))return!0;if(c===d)return this._EOLNormalized||13!==a.charCodeAt(h+r-1)?i+=a.substr(h,r):(n=!0,i+=a.substr(h,r-1)),!0;i+=this._EOLNormalized?a.substring(h,Math.max(h,l[c+1]-this._EOLLength)):a.substring(h,l[c+1]).replace(/(\r\n|\r|\n)$/,""),e[t++]=i;for(let n=c+1;n<d;n++)i=this._EOLNormalized?a.substring(l[n],l[n+1]-this._EOLLength):a.substring(l[n],l[n+1]).replace(/(\r\n|\r|\n)$/,""),e[t++]=i;return this._EOLNormalized||13!==a.charCodeAt(l[d]+s.end.column-1)?i=a.substr(l[d],s.end.column):(n=!0,0===s.end.column?t--:i=a.substr(l[d],s.end.column-1)),!0})),n&&(e[t++]=i,i=""),e[t++]=i,e}getLength(){return this._length}getLineCount(){return this._lineCnt}getLineContent(e){return this._lastVisitedLine.lineNumber===e||(this._lastVisitedLine.lineNumber=e,e===this._lineCnt?this._lastVisitedLine.value=this.getLineRawContent(e):this._EOLNormalized?this._lastVisitedLine.value=this.getLineRawContent(e,this._EOLLength):this._lastVisitedLine.value=this.getLineRawContent(e).replace(/(\r\n|\r|\n)$/,"")),this._lastVisitedLine.value}_getCharCode(e){if(e.remainder===e.node.piece.length){let t=e.node.next();if(!t)return 0;let i=this._buffers[t.piece.bufferIndex],n=this.offsetInBuffer(t.piece.bufferIndex,t.piece.start);return i.buffer.charCodeAt(n)}{let t=this._buffers[e.node.piece.bufferIndex],i=this.offsetInBuffer(e.node.piece.bufferIndex,e.node.piece.start)+e.remainder;return t.buffer.charCodeAt(i)}}getLineCharCode(e,t){let i=this.nodeAt2(e,t+1);return this._getCharCode(i)}getLineLength(e){if(e===this.getLineCount()){let t=this.getOffsetAt(e,1);return this.getLength()-t}return this.getOffsetAt(e+1,1)-this.getOffsetAt(e,1)-this._EOLLength}findMatchesInNode(e,t,i,n,o,s,r,a,l,c,h){let u,g,p,f=this._buffers[e.piece.bufferIndex],m=this.offsetInBuffer(e.piece.bufferIndex,e.piece.start),v=this.offsetInBuffer(e.piece.bufferIndex,o),_=this.offsetInBuffer(e.piece.bufferIndex,s),b={line:0,column:0};t._wordSeparators?(g=f.buffer.substring(v,_),p=e=>e+v,t.reset(0)):(g=f.buffer,p=e=>e,t.reset(v));do{if(u=t.next(g),u){if(p(u.index)>=_)return c;this.positionInBuffer(e,p(u.index)-m,b);let t=this.getLineFeedCnt(e.piece.bufferIndex,o,b),s=b.line===o.line?b.column-o.column+n:b.column+1,r=s+u[0].length;if(h[c++]=(0,X.iE)(new d.e(i+t,s,i+t,r),u,a),p(u.index)+u[0].length>=_)return c;if(c>=l)return c}}while(u);return c}findMatchesLineByLine(e,t,i,n){const o=[];let s=0;const r=new X.sz(t.wordSeparators,t.regex);let a=this.nodeAt2(e.startLineNumber,e.startColumn);if(null===a)return[];let l=this.nodeAt2(e.endLineNumber,e.endColumn);if(null===l)return[];let c=this.positionInBuffer(a.node,a.remainder),d=this.positionInBuffer(l.node,l.remainder);if(a.node===l.node)return this.findMatchesInNode(a.node,r,e.startLineNumber,e.startColumn,c,d,t,i,n,s,o),o;let h=e.startLineNumber,u=a.node;for(;u!==l.node;){let l=this.getLineFeedCnt(u.piece.bufferIndex,c,u.piece.end);if(l>=1){let a=this._buffers[u.piece.bufferIndex].lineStarts,d=this.offsetInBuffer(u.piece.bufferIndex,u.piece.start),g=a[c.line+l],p=h===e.startLineNumber?e.startColumn:1;if(s=this.findMatchesInNode(u,r,h,p,c,this.positionInBuffer(u,g-d),t,i,n,s,o),s>=n)return o;h+=l}let d=h===e.startLineNumber?e.startColumn-1:0;if(h===e.endLineNumber){const a=this.getLineContent(h).substring(d,e.endColumn-1);return s=this._findMatchesInLine(t,r,a,e.endLineNumber,d,s,o,i,n),o}if(s=this._findMatchesInLine(t,r,this.getLineContent(h).substr(d),h,d,s,o,i,n),s>=n)return o;h++,a=this.nodeAt2(h,1),u=a.node,c=this.positionInBuffer(a.node,a.remainder)}if(h===e.endLineNumber){let a=h===e.startLineNumber?e.startColumn-1:0;const l=this.getLineContent(h).substring(a,e.endColumn-1);return s=this._findMatchesInLine(t,r,l,e.endLineNumber,a,s,o,i,n),o}let g=h===e.startLineNumber?e.startColumn:1;return s=this.findMatchesInNode(l.node,r,h,g,c,d,t,i,n,s,o),o}_findMatchesInLine(e,t,i,n,o,s,r,a,l){const c=e.wordSeparators;if(!a&&e.simpleSearch){const t=e.simpleSearch,a=t.length,h=i.length;let g=-a;for(;-1!==(g=i.indexOf(t,g+a));)if((!c||(0,X.cM)(c,i,h,g,a))&&(r[s++]=new u.tk(new d.e(n,g+1+o,n,g+1+a+o),null),s>=l))return s;return s}let h;t.reset(0);do{if(h=t.next(i),h&&(r[s++]=(0,X.iE)(new d.e(n,h.index+1+o,n,h.index+1+h[0].length+o),h,a),s>=l))return s}while(h);return s}insert(e,t,i=!1){if(this._EOLNormalized=this._EOLNormalized&&i,this._lastVisitedLine.lineNumber=0,this._lastVisitedLine.value="",this.root!==W){let{node:i,remainder:n,nodeStartOffset:o}=this.nodeAt(e),s=i.piece,r=s.bufferIndex,a=this.positionInBuffer(i,n);if(0===i.piece.bufferIndex&&s.end.line===this._lastChangeBufferPos.line&&s.end.column===this._lastChangeBufferPos.column&&o+s.length===e&&t.length<J)return this.appendToNode(i,t),void this.computeBufferMetadata();if(o===e)this.insertContentToNodeLeft(t,i),this._searchCache.validate(e);else if(o+i.piece.length>e){let e=[],o=new ne(s.bufferIndex,a,s.end,this.getLineFeedCnt(s.bufferIndex,a,s.end),this.offsetInBuffer(r,s.end)-this.offsetInBuffer(r,a));if(this.shouldCheckCRLF()&&this.endWithCR(t)){if(10===this.nodeCharCodeAt(i,n)){let e={line:o.start.line+1,column:0};o=new ne(o.bufferIndex,e,o.end,this.getLineFeedCnt(o.bufferIndex,e,o.end),o.length-1),t+="\n"}}if(this.shouldCheckCRLF()&&this.startWithLF(t)){if(13===this.nodeCharCodeAt(i,n-1)){let o=this.positionInBuffer(i,n-1);this.deleteNodeTail(i,o),t="\r"+t,0===i.piece.length&&e.push(i)}else this.deleteNodeTail(i,a)}else this.deleteNodeTail(i,a);let l=this.createNewPieces(t);o.length>0&&this.rbInsertRight(i,o);let c=i;for(let e=0;e<l.length;e++)c=this.rbInsertRight(c,l[e]);this.deleteNodes(e)}else this.insertContentToNodeRight(t,i)}else{let e=this.createNewPieces(t),i=this.rbInsertLeft(null,e[0]);for(let t=1;t<e.length;t++)i=this.rbInsertRight(i,e[t])}this.computeBufferMetadata()}delete(e,t){if(this._lastVisitedLine.lineNumber=0,this._lastVisitedLine.value="",t<=0||this.root===W)return;let i=this.nodeAt(e),n=this.nodeAt(e+t),o=i.node,s=n.node;if(o===s){let s=this.positionInBuffer(o,i.remainder),r=this.positionInBuffer(o,n.remainder);if(i.nodeStartOffset===e){if(t===o.piece.length){let e=o.next();return Z(this,o),this.validateCRLFWithPrevNode(e),void this.computeBufferMetadata()}return this.deleteNodeHead(o,r),this._searchCache.validate(e),this.validateCRLFWithPrevNode(o),void this.computeBufferMetadata()}return i.nodeStartOffset+o.piece.length===e+t?(this.deleteNodeTail(o,s),this.validateCRLFWithNextNode(o),void this.computeBufferMetadata()):(this.shrinkNode(o,s,r),void this.computeBufferMetadata())}let r=[],a=this.positionInBuffer(o,i.remainder);this.deleteNodeTail(o,a),this._searchCache.validate(e),0===o.piece.length&&r.push(o);let l=this.positionInBuffer(s,n.remainder);this.deleteNodeHead(s,l),0===s.piece.length&&r.push(s);for(let e=o.next();e!==W&&e!==s;e=e.next())r.push(e);let c=0===o.piece.length?o.prev():o;this.deleteNodes(r),this.validateCRLFWithNextNode(c),this.computeBufferMetadata()}insertContentToNodeLeft(e,t){let i=[];if(this.shouldCheckCRLF()&&this.endWithCR(e)&&this.startWithLF(t)){let n=t.piece,o={line:n.start.line+1,column:0},s=new ne(n.bufferIndex,o,n.end,this.getLineFeedCnt(n.bufferIndex,o,n.end),n.length-1);t.piece=s,e+="\n",Y(this,t,-1,-1),0===t.piece.length&&i.push(t)}let n=this.createNewPieces(e),o=this.rbInsertLeft(t,n[n.length-1]);for(let e=n.length-2;e>=0;e--)o=this.rbInsertLeft(o,n[e]);this.validateCRLFWithPrevNode(o),this.deleteNodes(i)}insertContentToNodeRight(e,t){this.adjustCarriageReturnFromNext(e,t)&&(e+="\n");let i=this.createNewPieces(e),n=this.rbInsertRight(t,i[0]),o=n;for(let e=1;e<i.length;e++)o=this.rbInsertRight(o,i[e]);this.validateCRLFWithPrevNode(n)}positionInBuffer(e,t,i){let n=e.piece,o=e.piece.bufferIndex,s=this._buffers[o].lineStarts,r=s[n.start.line]+n.start.column+t,a=n.start.line,l=n.end.line,c=0,d=0,h=0;for(;a<=l&&(c=a+(l-a)/2|0,h=s[c],c!==l);)if(d=s[c+1],r<h)l=c-1;else{if(!(r>=d))break;a=c+1}return i?(i.line=c,i.column=r-h,null):{line:c,column:r-h}}getLineFeedCnt(e,t,i){if(0===i.column)return i.line-t.line;let n=this._buffers[e].lineStarts;if(i.line===n.length-1)return i.line-t.line;let o=n[i.line+1],s=n[i.line]+i.column;if(o>s+1)return i.line-t.line;let r=s-1;return 13===this._buffers[e].buffer.charCodeAt(r)?i.line-t.line+1:i.line-t.line}offsetInBuffer(e,t){return this._buffers[e].lineStarts[t.line]+t.column}deleteNodes(e){for(let t=0;t<e.length;t++)Z(this,e[t])}createNewPieces(e){if(e.length>J){let t=[];for(;e.length>J;){const i=e.charCodeAt(65534);let n;13===i||i>=55296&&i<=56319?(n=e.substring(0,65534),e=e.substring(65534)):(n=e.substring(0,J),e=e.substring(J));let o=ie(n);t.push(new ne(this._buffers.length,{line:0,column:0},{line:o.length-1,column:n.length-o[o.length-1]},o.length-1,n.length)),this._buffers.push(new oe(n,o))}let i=ie(e);return t.push(new ne(this._buffers.length,{line:0,column:0},{line:i.length-1,column:e.length-i[i.length-1]},i.length-1,e.length)),this._buffers.push(new oe(e,i)),t}let t=this._buffers[0].buffer.length;const i=ie(e,!1);let n=this._lastChangeBufferPos;if(this._buffers[0].lineStarts[this._buffers[0].lineStarts.length-1]===t&&0!==t&&this.startWithLF(e)&&this.endWithCR(this._buffers[0].buffer)){this._lastChangeBufferPos={line:this._lastChangeBufferPos.line,column:this._lastChangeBufferPos.column+1},n=this._lastChangeBufferPos;for(let e=0;e<i.length;e++)i[e]+=t+1;this._buffers[0].lineStarts=this._buffers[0].lineStarts.concat(i.slice(1)),this._buffers[0].buffer+="_"+e,t+=1}else{if(0!==t)for(let e=0;e<i.length;e++)i[e]+=t;this._buffers[0].lineStarts=this._buffers[0].lineStarts.concat(i.slice(1)),this._buffers[0].buffer+=e}const o=this._buffers[0].buffer.length;let s=this._buffers[0].lineStarts.length-1,r={line:s,column:o-this._buffers[0].lineStarts[s]},a=new ne(0,n,r,this.getLineFeedCnt(0,n,r),o-t);return this._lastChangeBufferPos=r,[a]}getLineRawContent(e,t=0){let i=this.root,n="",o=this._searchCache.get2(e);if(o){i=o.node;let s=this.getAccumulatedValue(i,e-o.nodeStartLineNumber-1),r=this._buffers[i.piece.bufferIndex].buffer,a=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);if(o.nodeStartLineNumber+i.piece.lineFeedCnt!==e){let n=this.getAccumulatedValue(i,e-o.nodeStartLineNumber);return r.substring(a+s,a+n-t)}n=r.substring(a+s,a+i.piece.length)}else{let o=0;const s=e;for(;i!==W;)if(i.left!==W&&i.lf_left>=e-1)i=i.left;else{if(i.lf_left+i.piece.lineFeedCnt>e-1){let n=this.getAccumulatedValue(i,e-i.lf_left-2),r=this.getAccumulatedValue(i,e-i.lf_left-1),a=this._buffers[i.piece.bufferIndex].buffer,l=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);return o+=i.size_left,this._searchCache.set({node:i,nodeStartOffset:o,nodeStartLineNumber:s-(e-1-i.lf_left)}),a.substring(l+n,l+r-t)}if(i.lf_left+i.piece.lineFeedCnt===e-1){let t=this.getAccumulatedValue(i,e-i.lf_left-2),o=this._buffers[i.piece.bufferIndex].buffer,s=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);n=o.substring(s+t,s+i.piece.length);break}e-=i.lf_left+i.piece.lineFeedCnt,o+=i.size_left+i.piece.length,i=i.right}}for(i=i.next();i!==W;){let e=this._buffers[i.piece.bufferIndex].buffer;if(i.piece.lineFeedCnt>0){let o=this.getAccumulatedValue(i,0),s=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);return n+=e.substring(s,s+o-t),n}{let t=this.offsetInBuffer(i.piece.bufferIndex,i.piece.start);n+=e.substr(t,i.piece.length)}i=i.next()}return n}computeBufferMetadata(){let e=this.root,t=1,i=0;for(;e!==W;)t+=e.lf_left+e.piece.lineFeedCnt,i+=e.size_left+e.piece.length,e=e.right;this._lineCnt=t,this._length=i,this._searchCache.validate(this._length)}getIndexOf(e,t){let i=e.piece,n=this.positionInBuffer(e,t),o=n.line-i.start.line;if(this.offsetInBuffer(i.bufferIndex,i.end)-this.offsetInBuffer(i.bufferIndex,i.start)===t){let t=this.getLineFeedCnt(e.piece.bufferIndex,i.start,n);if(t!==o)return{index:t,remainder:0}}return{index:o,remainder:n.column}}getAccumulatedValue(e,t){if(t<0)return 0;let i=e.piece,n=this._buffers[i.bufferIndex].lineStarts,o=i.start.line+t+1;return o>i.end.line?n[i.end.line]+i.end.column-n[i.start.line]-i.start.column:n[o]-n[i.start.line]-i.start.column}deleteNodeTail(e,t){const i=e.piece,n=i.lineFeedCnt,o=this.offsetInBuffer(i.bufferIndex,i.end),s=t,r=this.offsetInBuffer(i.bufferIndex,s),a=this.getLineFeedCnt(i.bufferIndex,i.start,s),l=a-n,c=r-o,d=i.length+c;e.piece=new ne(i.bufferIndex,i.start,s,a,d),Y(this,e,c,l)}deleteNodeHead(e,t){const i=e.piece,n=i.lineFeedCnt,o=this.offsetInBuffer(i.bufferIndex,i.start),s=t,r=this.getLineFeedCnt(i.bufferIndex,s,i.end),a=r-n,l=o-this.offsetInBuffer(i.bufferIndex,s),c=i.length+l;e.piece=new ne(i.bufferIndex,s,i.end,r,c),Y(this,e,l,a)}shrinkNode(e,t,i){const n=e.piece,o=n.start,s=n.end,r=n.length,a=n.lineFeedCnt,l=t,c=this.getLineFeedCnt(n.bufferIndex,n.start,l),d=this.offsetInBuffer(n.bufferIndex,t)-this.offsetInBuffer(n.bufferIndex,o);e.piece=new ne(n.bufferIndex,n.start,l,c,d),Y(this,e,d-r,c-a);let h=new ne(n.bufferIndex,i,s,this.getLineFeedCnt(n.bufferIndex,i,s),this.offsetInBuffer(n.bufferIndex,s)-this.offsetInBuffer(n.bufferIndex,i)),u=this.rbInsertRight(e,h);this.validateCRLFWithPrevNode(u)}appendToNode(e,t){this.adjustCarriageReturnFromNext(t,e)&&(t+="\n");const i=this.shouldCheckCRLF()&&this.startWithLF(t)&&this.endWithCR(e),n=this._buffers[0].buffer.length;this._buffers[0].buffer+=t;const o=ie(t,!1);for(let e=0;e<o.length;e++)o[e]+=n;if(i){let e=this._buffers[0].lineStarts[this._buffers[0].lineStarts.length-2];this._buffers[0].lineStarts.pop(),this._lastChangeBufferPos={line:this._lastChangeBufferPos.line-1,column:n-e}}this._buffers[0].lineStarts=this._buffers[0].lineStarts.concat(o.slice(1));const s=this._buffers[0].lineStarts.length-1,r={line:s,column:this._buffers[0].buffer.length-this._buffers[0].lineStarts[s]},a=e.piece.length+t.length,l=e.piece.lineFeedCnt,c=this.getLineFeedCnt(0,e.piece.start,r),d=c-l;e.piece=new ne(e.piece.bufferIndex,e.piece.start,r,c,a),this._lastChangeBufferPos=r,Y(this,e,t.length,d)}nodeAt(e){let t=this.root,i=this._searchCache.get(e);if(i)return{node:i.node,nodeStartOffset:i.nodeStartOffset,remainder:e-i.nodeStartOffset};let n=0;for(;t!==W;)if(t.size_left>e)t=t.left;else{if(t.size_left+t.piece.length>=e){n+=t.size_left;let i={node:t,remainder:e-t.size_left,nodeStartOffset:n};return this._searchCache.set(i),i}e-=t.size_left+t.piece.length,n+=t.size_left+t.piece.length,t=t.right}return null}nodeAt2(e,t){let i=this.root,n=0;for(;i!==W;)if(i.left!==W&&i.lf_left>=e-1)i=i.left;else{if(i.lf_left+i.piece.lineFeedCnt>e-1){let o=this.getAccumulatedValue(i,e-i.lf_left-2),s=this.getAccumulatedValue(i,e-i.lf_left-1);return n+=i.size_left,{node:i,remainder:Math.min(o+t-1,s),nodeStartOffset:n}}if(i.lf_left+i.piece.lineFeedCnt===e-1){let o=this.getAccumulatedValue(i,e-i.lf_left-2);if(o+t-1<=i.piece.length)return{node:i,remainder:o+t-1,nodeStartOffset:n};t-=i.piece.length-o;break}e-=i.lf_left+i.piece.lineFeedCnt,n+=i.size_left+i.piece.length,i=i.right}for(i=i.next();i!==W;){if(i.piece.lineFeedCnt>0){let e=this.getAccumulatedValue(i,0),n=this.offsetOfNode(i);return{node:i,remainder:Math.min(t-1,e),nodeStartOffset:n}}if(i.piece.length>=t-1){return{node:i,remainder:t-1,nodeStartOffset:this.offsetOfNode(i)}}t-=i.piece.length,i=i.next()}return null}nodeCharCodeAt(e,t){if(e.piece.lineFeedCnt<1)return-1;let i=this._buffers[e.piece.bufferIndex],n=this.offsetInBuffer(e.piece.bufferIndex,e.piece.start)+t;return i.buffer.charCodeAt(n)}offsetOfNode(e){if(!e)return 0;let t=e.size_left;for(;e!==this.root;)e.parent.right===e&&(t+=e.parent.size_left+e.parent.piece.length),e=e.parent;return t}shouldCheckCRLF(){return!(this._EOLNormalized&&"\n"===this._EOL)}startWithLF(e){if("string"==typeof e)return 10===e.charCodeAt(0);if(e===W||0===e.piece.lineFeedCnt)return!1;let t=e.piece,i=this._buffers[t.bufferIndex].lineStarts,n=t.start.line,o=i[n]+t.start.column;return n!==i.length-1&&(!(i[n+1]>o+1)&&10===this._buffers[t.bufferIndex].buffer.charCodeAt(o))}endWithCR(e){return"string"==typeof e?13===e.charCodeAt(e.length-1):e!==W&&0!==e.piece.lineFeedCnt&&13===this.nodeCharCodeAt(e,e.piece.length-1)}validateCRLFWithPrevNode(e){if(this.shouldCheckCRLF()&&this.startWithLF(e)){let t=e.prev();this.endWithCR(t)&&this.fixCRLF(t,e)}}validateCRLFWithNextNode(e){if(this.shouldCheckCRLF()&&this.endWithCR(e)){let t=e.next();this.startWithLF(t)&&this.fixCRLF(e,t)}}fixCRLF(e,t){let i,n=[],o=this._buffers[e.piece.bufferIndex].lineStarts;i=0===e.piece.end.column?{line:e.piece.end.line-1,column:o[e.piece.end.line]-o[e.piece.end.line-1]-1}:{line:e.piece.end.line,column:e.piece.end.column-1};const s=e.piece.length-1,r=e.piece.lineFeedCnt-1;e.piece=new ne(e.piece.bufferIndex,e.piece.start,i,r,s),Y(this,e,-1,-1),0===e.piece.length&&n.push(e);let a={line:t.piece.start.line+1,column:0};const l=t.piece.length-1,c=this.getLineFeedCnt(t.piece.bufferIndex,a,t.piece.end);t.piece=new ne(t.piece.bufferIndex,a,t.piece.end,c,l),Y(this,t,-1,-1),0===t.piece.length&&n.push(t);let d=this.createNewPieces("\r\n");this.rbInsertRight(e,d[0]);for(let e=0;e<n.length;e++)Z(this,n[e])}adjustCarriageReturnFromNext(e,t){if(this.shouldCheckCRLF()&&this.endWithCR(e)){let i=t.next();if(this.startWithLF(i)){if(e+="\n",1===i.piece.length)Z(this,i);else{const e=i.piece,t={line:e.start.line+1,column:0},n=e.length-1,o=this.getLineFeedCnt(e.bufferIndex,t,e.end);i.piece=new ne(e.bufferIndex,t,e.end,o,n),Y(this,i,-1,-1)}return!0}}return!1}iterate(e,t){if(e===W)return t(W);let i=this.iterate(e.left,t);return i?t(e)&&this.iterate(e.right,t):i}getNodeContent(e){if(e===W)return"";let t,i=this._buffers[e.piece.bufferIndex],n=e.piece,o=this.offsetInBuffer(n.bufferIndex,n.start),s=this.offsetInBuffer(n.bufferIndex,n.end);return t=i.buffer.substring(o,s),t}getPieceContent(e){let t=this._buffers[e.bufferIndex],i=this.offsetInBuffer(e.bufferIndex,e.start),n=this.offsetInBuffer(e.bufferIndex,e.end);return t.buffer.substring(i,n)}rbInsertRight(e,t){let i=new V(t,1);if(i.left=W,i.right=W,i.parent=W,i.size_left=0,i.lf_left=0,this.root===W)this.root=i,i.color=0;else if(e.right===W)e.right=i,i.parent=e;else{let t=H(e.right);t.left=i,i.parent=t}return G(this,i),i}rbInsertLeft(e,t){let i=new V(t,1);if(i.left=W,i.right=W,i.parent=W,i.size_left=0,i.lf_left=0,this.root===W)this.root=i,i.color=0;else if(e.left===W)e.left=i,i.parent=e;else{let t=z(e.left);t.right=i,i.parent=t}return G(this,i),i}}var le=i(58409),ce=i(60962);class de extends s.JT{constructor(e,t,i,n,s,r,a){super(),this._onDidChangeContent=this._register(new o.Q5),this._BOM=t,this._mightContainNonBasicASCII=!r,this._mightContainRTL=n,this._mightContainUnusualLineTerminators=s,this._pieceTree=new ae(e,i,a)}mightContainRTL(){return this._mightContainRTL}mightContainUnusualLineTerminators(){return this._mightContainUnusualLineTerminators}resetMightContainUnusualLineTerminators(){this._mightContainUnusualLineTerminators=!1}mightContainNonBasicASCII(){return this._mightContainNonBasicASCII}getBOM(){return this._BOM}getEOL(){return this._pieceTree.getEOL()}createSnapshot(e){return this._pieceTree.createSnapshot(e?this._BOM:"")}getOffsetAt(e,t){return this._pieceTree.getOffsetAt(e,t)}getPositionAt(e){return this._pieceTree.getPositionAt(e)}getRangeAt(e,t){let i=e+t;const n=this.getPositionAt(e),o=this.getPositionAt(i);return new d.e(n.lineNumber,n.column,o.lineNumber,o.column)}getValueInRange(e,t=0){if(e.isEmpty())return"";const i=this._getEndOfLine(t);return this._pieceTree.getValueInRange(e,i)}getValueLengthInRange(e,t=0){if(e.isEmpty())return 0;if(e.startLineNumber===e.endLineNumber)return e.endColumn-e.startColumn;let i=this.getOffsetAt(e.startLineNumber,e.startColumn);return this.getOffsetAt(e.endLineNumber,e.endColumn)-i}getCharacterCountInRange(e,t=0){if(this._mightContainNonBasicASCII){let i=0;const n=e.startLineNumber,o=e.endLineNumber;for(let t=n;t<=o;t++){const s=this.getLineContent(t),a=t===n?e.startColumn-1:0,l=t===o?e.endColumn-1:s.length;for(let e=a;e<l;e++)r.ZG(s.charCodeAt(e))?(i+=1,e+=1):i+=1}return i+=this._getEndOfLine(t).length*(o-n),i}return this.getValueLengthInRange(e,t)}getLength(){return this._pieceTree.getLength()}getLineCount(){return this._pieceTree.getLineCount()}getLinesContent(){return this._pieceTree.getLinesContent()}getLineContent(e){return this._pieceTree.getLineContent(e)}getLineCharCode(e,t){return this._pieceTree.getLineCharCode(e,t)}getLineLength(e){return this._pieceTree.getLineLength(e)}getLineFirstNonWhitespaceColumn(e){const t=r.LC(this.getLineContent(e));return-1===t?0:t+1}getLineLastNonWhitespaceColumn(e){const t=r.ow(this.getLineContent(e));return-1===t?0:t+2}_getEndOfLine(e){switch(e){case 1:return"\n";case 2:return"\r\n";case 0:return this.getEOL();default:throw new Error("Unknown EOL preference")}}setEOL(e){this._pieceTree.setEOL(e)}applyEdits(e,t,i){let n=this._mightContainRTL,o=this._mightContainUnusualLineTerminators,s=this._mightContainNonBasicASCII,a=!0,l=[];for(let t=0;t<e.length;t++){let i=e[t];a&&i._isTracked&&(a=!1);let c=i.range;if(i.text){let e=!0;s||(e=!r.$i(i.text),s=e),!n&&e&&(n=r.Ut(i.text)),!o&&e&&(o=r.ab(i.text))}let d="",h=0,u=0,g=0;if(i.text){let e;[h,u,g,e]=(0,le.QZ)(i.text);const t=this.getEOL();d=0===e||e===("\r\n"===t?2:1)?i.text:i.text.replace(/\r\n|\r|\n/g,t)}l[t]={sortIndex:t,identifier:i.identifier||null,range:c,rangeOffset:this.getOffsetAt(c.startLineNumber,c.startColumn),rangeLength:this.getValueLengthInRange(c),text:d,eolCount:h,firstLineLength:u,lastLineLength:g,forceMoveMarkers:Boolean(i.forceMoveMarkers),isAutoWhitespaceEdit:i.isAutoWhitespaceEdit||!1}}l.sort(de._sortOpsAscending);let c=!1;for(let e=0,t=l.length-1;e<t;e++){let t=l[e].range.getEndPosition(),i=l[e+1].range.getStartPosition();if(i.isBeforeOrEqual(t)){if(i.isBefore(t))throw new Error("Overlapping ranges are not allowed!");c=!0}}a&&(l=this._reduceOperations(l));let d=i||t?de._getInverseEditRanges(l):[],h=[];if(t)for(let e=0;e<l.length;e++){let t=l[e],i=d[e];if(t.isAutoWhitespaceEdit&&t.range.isEmpty())for(let e=i.startLineNumber;e<=i.endLineNumber;e++){let n="";e===i.startLineNumber&&(n=this.getLineContent(t.range.startLineNumber),-1!==r.LC(n))||h.push({lineNumber:e,oldContent:n})}}let g=null;if(i){let e=0;g=[];for(let t=0;t<l.length;t++){const i=l[t],n=d[t],o=this.getValueInRange(i.range),s=i.rangeOffset+e;e+=i.text.length-o.length,g[t]={sortIndex:i.sortIndex,identifier:i.identifier,range:n,text:o,textChange:new ce.q(i.rangeOffset,o,s,i.text)}}c||g.sort(((e,t)=>e.sortIndex-t.sortIndex))}this._mightContainRTL=n,this._mightContainUnusualLineTerminators=o,this._mightContainNonBasicASCII=s;const p=this._doApplyEdits(l);let f=null;if(t&&h.length>0){h.sort(((e,t)=>t.lineNumber-e.lineNumber)),f=[];for(let e=0,t=h.length;e<t;e++){let t=h[e].lineNumber;if(e>0&&h[e-1].lineNumber===t)continue;let i=h[e].oldContent,n=this.getLineContent(t);0!==n.length&&n!==i&&-1===r.LC(n)&&f.push(t)}}return this._onDidChangeContent.fire(),new u.je(g,p,f)}_reduceOperations(e){return e.length<1e3?e:[this._toSingleEditOperation(e)]}_toSingleEditOperation(e){let t=!1;const i=e[0].range,n=e[e.length-1].range,o=new d.e(i.startLineNumber,i.startColumn,n.endLineNumber,n.endColumn);let s=i.startLineNumber,r=i.startColumn;const a=[];for(let i=0,n=e.length;i<n;i++){const n=e[i],o=n.range;t=t||n.forceMoveMarkers,a.push(this.getValueInRange(new d.e(s,r,o.startLineNumber,o.startColumn))),n.text.length>0&&a.push(n.text),s=o.endLineNumber,r=o.endColumn}const l=a.join(""),[c,h,u]=(0,le.QZ)(l);return{sortIndex:0,identifier:e[0].identifier,range:o,rangeOffset:this.getOffsetAt(o.startLineNumber,o.startColumn),rangeLength:this.getValueLengthInRange(o,0),text:l,eolCount:c,firstLineLength:h,lastLineLength:u,forceMoveMarkers:t,isAutoWhitespaceEdit:!1}}_doApplyEdits(e){e.sort(de._sortOpsDescending);let t=[];for(let i=0;i<e.length;i++){let n=e[i];const o=n.range.startLineNumber,s=n.range.startColumn,r=n.range.endLineNumber,a=n.range.endColumn;if(o===r&&s===a&&0===n.text.length)continue;n.text?(this._pieceTree.delete(n.rangeOffset,n.rangeLength),this._pieceTree.insert(n.rangeOffset,n.text,!0)):this._pieceTree.delete(n.rangeOffset,n.rangeLength);const l=new d.e(o,s,r,a);t.push({range:l,rangeLength:n.rangeLength,text:n.text,rangeOffset:n.rangeOffset,forceMoveMarkers:n.forceMoveMarkers})}return t}findMatchesLineByLine(e,t,i,n){return this._pieceTree.findMatchesLineByLine(e,t,i,n)}static _getInverseEditRanges(e){let t=[],i=0,n=0,o=null;for(let s=0,r=e.length;s<r;s++){let r,a,l,c=e[s];if(o?o.range.endLineNumber===c.range.startLineNumber?(r=i,a=n+(c.range.startColumn-o.range.endColumn)):(r=i+(c.range.startLineNumber-o.range.endLineNumber),a=c.range.startColumn):(r=c.range.startLineNumber,a=c.range.startColumn),c.text.length>0){const e=c.eolCount+1;l=1===e?new d.e(r,a,r,a+c.firstLineLength):new d.e(r,a,r+e-1,c.lastLineLength+1)}else l=new d.e(r,a,r,a);i=l.endLineNumber,n=l.endColumn,t.push(l),o=c}return t}static _sortOpsAscending(e,t){let i=d.e.compareRangesUsingEnds(e.range,t.range);return 0===i?e.sortIndex-t.sortIndex:i}static _sortOpsDescending(e,t){let i=d.e.compareRangesUsingEnds(e.range,t.range);return 0===i?t.sortIndex-e.sortIndex:-i}}class he{constructor(e,t,i,n,o,s,r,a,l){this._chunks=e,this._bom=t,this._cr=i,this._lf=n,this._crlf=o,this._containsRTL=s,this._containsUnusualLineTerminators=r,this._isBasicASCII=a,this._normalizeEOL=l}_getEOL(e){const t=this._cr+this._lf+this._crlf,i=this._cr+this._crlf;return 0===t?1===e?"\n":"\r\n":i>t/2?"\r\n":"\n"}create(e){const t=this._getEOL(e);let i=this._chunks;if(this._normalizeEOL&&("\r\n"===t&&(this._cr>0||this._lf>0)||"\n"===t&&(this._cr>0||this._crlf>0)))for(let e=0,n=i.length;e<n;e++){let n=i[e].buffer.replace(/\r\n|\r|\n/g,t),o=ie(n);i[e]=new oe(n,o)}const n=new de(i,this._bom,t,this._containsRTL,this._containsUnusualLineTerminators,this._isBasicASCII,this._normalizeEOL);return{textBuffer:n,disposable:n}}}class ue{constructor(){this.chunks=[],this.BOM="",this._hasPreviousChar=!1,this._previousChar=0,this._tmpLineStarts=[],this.cr=0,this.lf=0,this.crlf=0,this.containsRTL=!1,this.containsUnusualLineTerminators=!1,this.isBasicASCII=!0}acceptChunk(e){if(0===e.length)return;0===this.chunks.length&&r.uS(e)&&(this.BOM=r.c1,e=e.substr(1));const t=e.charCodeAt(e.length-1);13===t||t>=55296&&t<=56319?(this._acceptChunk1(e.substr(0,e.length-1),!1),this._hasPreviousChar=!0,this._previousChar=t):(this._acceptChunk1(e,!1),this._hasPreviousChar=!1,this._previousChar=t)}_acceptChunk1(e,t){(t||0!==e.length)&&(this._hasPreviousChar?this._acceptChunk2(String.fromCharCode(this._previousChar)+e):this._acceptChunk2(e))}_acceptChunk2(e){const t=function(e,t){e.length=0,e[0]=0;let i=1,n=0,o=0,s=0,r=!0;for(let a=0,l=t.length;a<l;a++){const c=t.charCodeAt(a);13===c?a+1<l&&10===t.charCodeAt(a+1)?(s++,e[i++]=a+2,a++):(n++,e[i++]=a+1):10===c?(o++,e[i++]=a+1):r&&9!==c&&(c<32||c>126)&&(r=!1)}const a=new te(ee(e),n,o,s,r);return e.length=0,a}(this._tmpLineStarts,e);this.chunks.push(new oe(e,t.lineStarts)),this.cr+=t.cr,this.lf+=t.lf,this.crlf+=t.crlf,this.isBasicASCII&&(this.isBasicASCII=t.isBasicASCII),this.isBasicASCII||this.containsRTL||(this.containsRTL=r.Ut(e)),this.isBasicASCII||this.containsUnusualLineTerminators||(this.containsUnusualLineTerminators=r.ab(e))}finish(e=!0){return this._finish(),new he(this.chunks,this.BOM,this.cr,this.lf,this.crlf,this.containsRTL,this.containsUnusualLineTerminators,this.isBasicASCII,e)}_finish(){if(0===this.chunks.length&&this._acceptChunk1("",!0),this._hasPreviousChar){this._hasPreviousChar=!1;let e=this.chunks[this.chunks.length-1];e.buffer+=String.fromCharCode(this._previousChar);let t=ie(e.buffer);e.lineStarts=t,13===this._previousChar&&this.cr++}}}var ge=i(83256),pe=i(9488),fe=i(78411),me=i(44101),ve=i(28111),_e=i(84013),be=i(1432);class we{constructor(){this._beginState=[],this._valid=[],this._len=0,this._invalidLineStartIndex=0}_reset(e){this._beginState=[],this._valid=[],this._len=0,this._invalidLineStartIndex=0,e&&this._setBeginState(0,e)}flush(e){this._reset(e)}get invalidLineStartIndex(){return this._invalidLineStartIndex}_invalidateLine(e){e<this._len&&(this._valid[e]=!1),e<this._invalidLineStartIndex&&(this._invalidLineStartIndex=e)}_isValid(e){return e<this._len&&this._valid[e]}getBeginState(e){return e<this._len?this._beginState[e]:null}_ensureLine(e){for(;e>=this._len;)this._beginState[this._len]=null,this._valid[this._len]=!1,this._len++}_deleteLines(e,t){0!==t&&(e+t>this._len&&(t=this._len-e),this._beginState.splice(e,t),this._valid.splice(e,t),this._len-=t)}_insertLines(e,t){if(0===t)return;const i=[],n=[];for(let e=0;e<t;e++)i[e]=null,n[e]=!1;this._beginState=pe.Zv(this._beginState,e,i),this._valid=pe.Zv(this._valid,e,n),this._len+=t}_setValid(e,t){this._ensureLine(e),this._valid[e]=t}_setBeginState(e,t){this._ensureLine(e),this._beginState[e]=t}setEndState(e,t,i){if(this._setValid(t,!0),this._invalidLineStartIndex=t+1,t===e-1)return;const n=this.getBeginState(t+1);if(null===n||!i.equals(n))return this._setBeginState(t+1,i),void this._invalidateLine(t+1);let o=t+1;for(;o<e&&this._isValid(o);)o++;this._invalidLineStartIndex=o}setFakeTokens(e){this._setValid(e,!1)}applyEdits(e,t){const i=e.endLineNumber-e.startLineNumber,n=t;for(let t=Math.min(i,n);t>=0;t--)this._invalidateLine(e.startLineNumber+t-1);this._acceptDeleteRange(e),this._acceptInsertText(new c.L(e.startLineNumber,e.startColumn),t)}_acceptDeleteRange(e){e.startLineNumber-1>=this._len||this._deleteLines(e.startLineNumber,e.endLineNumber-e.startLineNumber)}_acceptInsertText(e,t){e.lineNumber-1>=this._len||this._insertLines(e.lineNumber,t)}}class ye extends s.JT{constructor(e,t){super(),this._textModel=e,this._languageIdCodec=t,this._isDisposed=!1,this._tokenizationStateStore=new we,this._tokenizationSupport=null,this._register(me.RW.onDidChange((e=>{const t=this._textModel.getLanguageId();-1!==e.changedLanguages.indexOf(t)&&(this._resetTokenizationState(),this._textModel.clearTokens())}))),this._register(this._textModel.onDidChangeContentFast((e=>{if(e.isFlush)this._resetTokenizationState();else{for(let t=0,i=e.changes.length;t<i;t++){const i=e.changes[t],[n]=(0,le.QZ)(i.text);this._tokenizationStateStore.applyEdits(i.range,n)}this._beginBackgroundTokenization()}}))),this._register(this._textModel.onDidChangeAttached((()=>{this._beginBackgroundTokenization()}))),this._register(this._textModel.onDidChangeLanguage((()=>{this._resetTokenizationState(),this._textModel.clearTokens()}))),this._resetTokenizationState()}dispose(){this._isDisposed=!0,super.dispose()}_resetTokenizationState(){const[e,t]=function(e){const t=e.getLanguageId();let i=e.isTooLargeForTokenization()?null:me.RW.get(t),o=null;if(i)try{o=i.getInitialState()}catch(e){(0,n.dL)(e),i=null}return[i,o]}(this._textModel);this._tokenizationSupport=e,this._tokenizationStateStore.flush(t),this._beginBackgroundTokenization()}_beginBackgroundTokenization(){this._textModel.isAttachedToEditor()&&this._hasLinesToTokenize()&&be.xS((()=>{this._isDisposed||this._revalidateTokensNow()}))}_revalidateTokensNow(){const e=this._textModel.getLineCount(),t=new le.DA,i=_e.G.create(!1);let n=-1;for(;this._hasLinesToTokenize()&&!(i.elapsed()>1)&&(n=this._tokenizeOneInvalidLine(t),!(n>=e)););this._beginBackgroundTokenization(),this._textModel.setTokens(t.tokens,!this._hasLinesToTokenize())}tokenizeViewport(e,t){const i=new le.DA;this._tokenizeViewport(i,e,t),this._textModel.setTokens(i.tokens,!this._hasLinesToTokenize())}reset(){this._resetTokenizationState(),this._textModel.clearTokens()}forceTokenization(e){const t=new le.DA;this._updateTokensUntilLine(t,e),this._textModel.setTokens(t.tokens,!this._hasLinesToTokenize())}isCheapToTokenize(e){if(!this._tokenizationSupport)return!0;const t=this._tokenizationStateStore.invalidLineStartIndex+1;return!(e>t)&&(e<t||this._textModel.getLineLength(e)<2048)}_hasLinesToTokenize(){return!!this._tokenizationSupport&&this._tokenizationStateStore.invalidLineStartIndex<this._textModel.getLineCount()}_tokenizeOneInvalidLine(e){if(!this._hasLinesToTokenize())return this._textModel.getLineCount()+1;const t=this._tokenizationStateStore.invalidLineStartIndex+1;return this._updateTokensUntilLine(e,t),t}_updateTokensUntilLine(e,t){if(!this._tokenizationSupport)return;const i=this._textModel.getLanguageId(),n=this._textModel.getLineCount(),o=t-1;for(let t=this._tokenizationStateStore.invalidLineStartIndex;t<=o;t++){const o=this._textModel.getLineContent(t+1),s=this._tokenizationStateStore.getBeginState(t),r=Ce(this._languageIdCodec,i,this._tokenizationSupport,o,!0,s);e.add(t+1,r.tokens),this._tokenizationStateStore.setEndState(n,t,r.endState),t=this._tokenizationStateStore.invalidLineStartIndex-1}}_tokenizeViewport(e,t,i){if(!this._tokenizationSupport)return;if(i<=this._tokenizationStateStore.invalidLineStartIndex)return;if(t<=this._tokenizationStateStore.invalidLineStartIndex)return void this._updateTokensUntilLine(e,i);let n=this._textModel.getLineFirstNonWhitespaceColumn(t);const o=[];let s=null;for(let e=t-1;n>1&&e>=1;e--){const t=this._textModel.getLineFirstNonWhitespaceColumn(e);if(0!==t&&t<n){if(s=this._tokenizationStateStore.getBeginState(e-1),s)break;o.push(this._textModel.getLineContent(e)),n=t}}s||(s=this._tokenizationSupport.getInitialState());const r=this._textModel.getLanguageId();let a=s;for(let e=o.length-1;e>=0;e--){a=Ce(this._languageIdCodec,r,this._tokenizationSupport,o[e],!1,a).endState}for(let n=t;n<=i;n++){const t=this._textModel.getLineContent(n),i=Ce(this._languageIdCodec,r,this._tokenizationSupport,t,!0,a);e.add(n,i.tokens),this._tokenizationStateStore.setFakeTokens(n-1),a=i.endState}}}function Ce(e,t,i,o,s,r){let a=null;if(i)try{a=i.tokenize2(o,s,r.clone(),0)}catch(e){(0,n.dL)(e)}return a||(a=(0,ve.mh)(e.encodeLanguageId(t),o,r,0)),fe.A.convertToEndOffset(a.tokens,o.length),a}var xe=i(97461),Se=i(83831),ke=i(40764),Le=i(34227),Ne=i(41264),De=i(64862);class Ie{constructor(e,t,i){this.range=e,this.nestingLevel=t,this.isInvalid=i}}class Ee{constructor(e,t,i,n){this.range=e,this.openingBracketRange=t,this.closingBracketRange=i,this.nestingLevel=n}}class Te extends Ee{constructor(e,t,i,n,o){super(e,t,i,n),this.minVisibleColumnIndentation=o}}class Me{constructor(e,t){this.lineCount=e,this.columnCount=t}toString(){return`${this.lineCount},${this.columnCount}`}}const Ae=Math.pow(2,26);function Oe(e,t){return e*Ae+t}function Pe(e){const t=e,i=Math.floor(t/Ae);return new Me(i,t-i*Ae)}function Re(e,t){return t<Ae?e+t:e-e%Ae+t}function Fe(e,t){return e<t}function Be(e,t){return e<=t}function Ve(e,t){return e>=t}function We(e){return Oe(e.lineNumber-1,e.column-1)}function He(e,t){const i=e,n=Math.floor(i/Ae),o=i-n*Ae,s=t,r=Math.floor(s/Ae),a=s-r*Ae;return new d.e(n+1,o+1,r+1,a+1)}class ze{constructor(e,t,i){this.startOffset=e,this.endOffset=t,this.newLength=i}}class je{constructor(e,t){this.documentLength=t,this.nextEditIdx=0,this.deltaOldToNewLineCount=0,this.deltaOldToNewColumnCount=0,this.deltaLineIdxInOld=-1,this.edits=e.map((e=>Ue.from(e)))}getOffsetBeforeChange(e){return this.adjustNextEdit(e),this.translateCurToOld(e)}getDistanceToNextChange(e){this.adjustNextEdit(e);const t=this.edits[this.nextEditIdx];return function(e,t){const i=e,n=t;if(n-i<=0)return 0;const o=Math.floor(i/Ae),s=Math.floor(n/Ae),r=n-s*Ae;if(o===s)return Oe(0,r-(i-o*Ae));return Oe(s-o,r)}(e,t?this.translateOldToCur(t.offsetObj):this.documentLength)}translateOldToCur(e){return e.lineCount===this.deltaLineIdxInOld?Oe(e.lineCount+this.deltaOldToNewLineCount,e.columnCount+this.deltaOldToNewColumnCount):Oe(e.lineCount+this.deltaOldToNewLineCount,e.columnCount)}translateCurToOld(e){const t=Pe(e);return t.lineCount-this.deltaOldToNewLineCount===this.deltaLineIdxInOld?Oe(t.lineCount-this.deltaOldToNewLineCount,t.columnCount-this.deltaOldToNewColumnCount):Oe(t.lineCount-this.deltaOldToNewLineCount,t.columnCount)}adjustNextEdit(e){for(;this.nextEditIdx<this.edits.length;){const t=this.edits[this.nextEditIdx],i=this.translateOldToCur(t.endOffsetAfterObj);if(!Be(i,e))break;{this.nextEditIdx++;const e=Pe(i),n=Pe(this.translateOldToCur(t.endOffsetBeforeObj)),o=e.lineCount-n.lineCount;this.deltaOldToNewLineCount+=o;const s=this.deltaLineIdxInOld===t.endOffsetBeforeObj.lineCount?this.deltaOldToNewColumnCount:0,r=e.columnCount-n.columnCount;this.deltaOldToNewColumnCount=s+r,this.deltaLineIdxInOld=t.endOffsetBeforeObj.lineCount}}}}class Ue{constructor(e,t,i){this.endOffsetBeforeObj=Pe(t),this.endOffsetAfterObj=Pe(Re(e,i)),this.offsetObj=Pe(e)}static from(e){return new Ue(e.startOffset,e.endOffset,e.newLength)}}var $e=i(47707);const Ke=new Array;class qe{constructor(e,t){this.items=e,this.additionalItems=t}static create(e,t){if(e<=128&&0===t.length){let i=qe.cache[e];return i||(i=new qe(e,t),qe.cache[e]=i),i}return new qe(e,t)}static getEmpty(){return this.empty}add(e,t){const i=t.getKey(e);let n=i>>5;if(0===n){const e=1<<i|this.items;return e===this.items?this:qe.create(e,this.additionalItems)}n--;const o=this.additionalItems.slice(0);for(;o.length<n;)o.push(0);return o[n]|=1<<(31&i),qe.create(this.items,o)}merge(e){const t=this.items|e.items;if(this.additionalItems===Ke&&e.additionalItems===Ke)return t===this.items?this:t===e.items?e:qe.create(t,Ke);const i=new Array;for(let t=0;t<Math.max(this.additionalItems.length,e.additionalItems.length);t++){const n=this.additionalItems[t]||0,o=e.additionalItems[t]||0;i.push(n|o)}return qe.create(t,i)}intersects(e){if(0!=(this.items&e.items))return!0;for(let t=0;t<Math.min(this.additionalItems.length,e.additionalItems.length);t++)if(0!=(this.additionalItems[t]&e.additionalItems[t]))return!0;return!1}}qe.cache=new Array(129),qe.empty=qe.create(0,Ke);const Ze={getKey:e=>e};class Ge{constructor(){this.items=new Map}getKey(e){let t=this.items.get(e);return void 0===t&&(t=this.items.size,this.items.set(e,t)),t}}class Ye{constructor(e){this._length=e}get length(){return this._length}}class Qe extends Ye{constructor(e,t,i,n,o){super(e),this.openingBracket=t,this.child=i,this.closingBracket=n,this.missingOpeningBracketIds=o}static create(e,t,i){let n=e.length;return t&&(n=Re(n,t.length)),i&&(n=Re(n,i.length)),new Qe(n,e,t,i,t?t.missingOpeningBracketIds:qe.getEmpty())}get kind(){return 2}get listHeight(){return 0}get childrenLength(){return 3}getChild(e){switch(e){case 0:return this.openingBracket;case 1:return this.child;case 2:return this.closingBracket}throw new Error("Invalid child index")}get children(){const e=new Array;return e.push(this.openingBracket),this.child&&e.push(this.child),this.closingBracket&&e.push(this.closingBracket),e}canBeReused(e){return null!==this.closingBracket&&!e.intersects(this.missingOpeningBracketIds)}deepClone(){return new Qe(this.length,this.openingBracket.deepClone(),this.child&&this.child.deepClone(),this.closingBracket&&this.closingBracket.deepClone(),this.missingOpeningBracketIds)}computeMinIndentation(e,t){return this.child?this.child.computeMinIndentation(Re(e,this.openingBracket.length),t):Number.MAX_SAFE_INTEGER}}class Xe extends Ye{constructor(e,t,i){super(e),this.listHeight=t,this._missingOpeningBracketIds=i,this.cachedMinIndentation=-1}static create23(e,t,i,n=!1){let o=e.length,s=e.missingOpeningBracketIds;if(e.listHeight!==t.listHeight)throw new Error("Invalid list heights");if(o=Re(o,t.length),s=s.merge(t.missingOpeningBracketIds),i){if(e.listHeight!==i.listHeight)throw new Error("Invalid list heights");o=Re(o,i.length),s=s.merge(i.missingOpeningBracketIds)}return n?new et(o,e.listHeight+1,e,t,i,s):new Je(o,e.listHeight+1,e,t,i,s)}static getEmpty(){return new it(0,0,[],qe.getEmpty())}get kind(){return 4}get missingOpeningBracketIds(){return this._missingOpeningBracketIds}throwIfImmutable(){}makeLastElementMutable(){this.throwIfImmutable();const e=this.childrenLength;if(0===e)return;const t=this.getChild(e-1),i=4===t.kind?t.toMutable():t;return t!==i&&this.setChild(e-1,i),i}makeFirstElementMutable(){this.throwIfImmutable();if(0===this.childrenLength)return;const e=this.getChild(0),t=4===e.kind?e.toMutable():e;return e!==t&&this.setChild(0,t),t}canBeReused(e){if(e.intersects(this.missingOpeningBracketIds))return!1;let t,i=this;for(;4===i.kind&&(t=i.childrenLength)>0;)i=i.getChild(t-1);return i.canBeReused(e)}handleChildrenChanged(){this.throwIfImmutable();const e=this.childrenLength;let t=this.getChild(0).length,i=this.getChild(0).missingOpeningBracketIds;for(let n=1;n<e;n++){const e=this.getChild(n);t=Re(t,e.length),i=i.merge(e.missingOpeningBracketIds)}this._length=t,this._missingOpeningBracketIds=i,this.cachedMinIndentation=-1}computeMinIndentation(e,t){if(-1!==this.cachedMinIndentation)return this.cachedMinIndentation;let i=Number.MAX_SAFE_INTEGER,n=e;for(let e=0;e<this.childrenLength;e++){const o=this.getChild(e);o&&(i=Math.min(i,o.computeMinIndentation(n,t)),n=Re(n,o.length))}return this.cachedMinIndentation=i,i}}class Je extends Xe{constructor(e,t,i,n,o,s){super(e,t,s),this._item1=i,this._item2=n,this._item3=o}get childrenLength(){return null!==this._item3?3:2}getChild(e){switch(e){case 0:return this._item1;case 1:return this._item2;case 2:return this._item3}throw new Error("Invalid child index")}setChild(e,t){switch(e){case 0:return void(this._item1=t);case 1:return void(this._item2=t);case 2:return void(this._item3=t)}throw new Error("Invalid child index")}get children(){return this._item3?[this._item1,this._item2,this._item3]:[this._item1,this._item2]}get item1(){return this._item1}get item2(){return this._item2}get item3(){return this._item3}deepClone(){return new Je(this.length,this.listHeight,this._item1.deepClone(),this._item2.deepClone(),this._item3?this._item3.deepClone():null,this.missingOpeningBracketIds)}appendChildOfSameHeight(e){if(this._item3)throw new Error("Cannot append to a full (2,3) tree node");this.throwIfImmutable(),this._item3=e,this.handleChildrenChanged()}unappendChild(){if(!this._item3)throw new Error("Cannot remove from a non-full (2,3) tree node");this.throwIfImmutable();const e=this._item3;return this._item3=null,this.handleChildrenChanged(),e}prependChildOfSameHeight(e){if(this._item3)throw new Error("Cannot prepend to a full (2,3) tree node");this.throwIfImmutable(),this._item3=this._item2,this._item2=this._item1,this._item1=e,this.handleChildrenChanged()}unprependChild(){if(!this._item3)throw new Error("Cannot remove from a non-full (2,3) tree node");this.throwIfImmutable();const e=this._item1;return this._item1=this._item2,this._item2=this._item3,this._item3=null,this.handleChildrenChanged(),e}toMutable(){return this}}class et extends Je{toMutable(){return new Je(this.length,this.listHeight,this.item1,this.item2,this.item3,this.missingOpeningBracketIds)}throwIfImmutable(){throw new Error("this instance is immutable")}}class tt extends Xe{constructor(e,t,i,n){super(e,t,n),this._children=i}get childrenLength(){return this._children.length}getChild(e){return this._children[e]}setChild(e,t){this._children[e]=t}get children(){return this._children}deepClone(){const e=new Array(this._children.length);for(let t=0;t<this._children.length;t++)e[t]=this._children[t].deepClone();return new tt(this.length,this.listHeight,e,this.missingOpeningBracketIds)}appendChildOfSameHeight(e){this.throwIfImmutable(),this._children.push(e),this.handleChildrenChanged()}unappendChild(){this.throwIfImmutable();const e=this._children.pop();return this.handleChildrenChanged(),e}prependChildOfSameHeight(e){this.throwIfImmutable(),this._children.unshift(e),this.handleChildrenChanged()}unprependChild(){this.throwIfImmutable();const e=this._children.shift();return this.handleChildrenChanged(),e}toMutable(){return this}}class it extends tt{toMutable(){return new tt(this.length,this.listHeight,[...this.children],this.missingOpeningBracketIds)}throwIfImmutable(){throw new Error("this instance is immutable")}}const nt=[];class ot extends Ye{get listHeight(){return 0}get childrenLength(){return 0}getChild(e){return null}get children(){return nt}deepClone(){return this}}class st extends ot{get kind(){return 0}get missingOpeningBracketIds(){return qe.getEmpty()}canBeReused(e){return!0}computeMinIndentation(e,t){const i=Pe(e),n=(0===i.columnCount?i.lineCount:i.lineCount+1)+1,o=(s=Re(e,this.length),Math.floor(s/Ae)+1);var s;let r=Number.MAX_SAFE_INTEGER;for(let e=n;e<=o;e++){const i=t.getLineFirstNonWhitespaceColumn(e),n=t.getLineContent(e);if(0===i)continue;const o=$e.i.visibleColumnFromColumn(n,i,t.getOptions().tabSize);r=Math.min(r,o)}return r}}class rt extends ot{constructor(e){super(e)}static create(e){const t=e,i=rt.cacheByLength.get(t);if(i)return i;const n=new rt(e);return rt.cacheByLength.set(t,n),n}get kind(){return 1}get missingOpeningBracketIds(){return qe.getEmpty()}canBeReused(e){return!1}computeMinIndentation(e,t){return Number.MAX_SAFE_INTEGER}}rt.cacheByLength=new Map;class at extends ot{constructor(e,t){super(t),this.missingOpeningBracketIds=e}get kind(){return 3}canBeReused(e){return!e.intersects(this.missingOpeningBracketIds)}computeMinIndentation(e,t){return Number.MAX_SAFE_INTEGER}}class lt{constructor(e,t,i,n,o){this.length=e,this.kind=t,this.bracketId=i,this.bracketIds=n,this.astNode=o}}class ct{constructor(e,t){this.textModel=e,this.bracketTokens=t,this.reader=new dt(this.textModel,this.bracketTokens),this._offset=0,this.didPeek=!1,this.peeked=null,this.textBufferLineCount=e.getLineCount(),this.textBufferLastLineLength=e.getLineLength(this.textBufferLineCount)}get offset(){return this._offset}get length(){return Oe(this.textBufferLineCount,this.textBufferLastLineLength)}skip(e){this.didPeek=!1,this._offset=Re(this._offset,e);const t=Pe(this._offset);this.reader.setPosition(t.lineCount,t.columnCount)}read(){let e;return this.peeked?(this.didPeek=!1,e=this.peeked):e=this.reader.read(),e&&(this._offset=Re(this._offset,e.length)),e}peek(){return this.didPeek||(this.peeked=this.reader.read(),this.didPeek=!0),this.peeked}}class dt{constructor(e,t){this.textModel=e,this.bracketTokens=t,this.lineIdx=0,this.line=null,this.lineCharOffset=0,this.lineTokens=null,this.lineTokenOffset=0,this.peekedToken=null,this.textBufferLineCount=e.getLineCount(),this.textBufferLastLineLength=e.getLineLength(this.textBufferLineCount)}setPosition(e,t){e===this.lineIdx?(this.lineCharOffset=t,this.lineTokenOffset=0===this.lineCharOffset?0:this.lineTokens.findTokenIndexAtOffset(this.lineCharOffset)):(this.lineIdx=e,this.lineCharOffset=t,this.line=null),this.peekedToken=null}read(){if(this.peekedToken){const e=this.peekedToken;return this.peekedToken=null,this.lineCharOffset+=e.length,e}if(this.lineIdx>this.textBufferLineCount-1||this.lineIdx===this.textBufferLineCount-1&&this.lineCharOffset>=this.textBufferLastLineLength)return null;null===this.line&&(this.lineTokens=this.textModel.getLineTokens(this.lineIdx+1),this.line=this.lineTokens.getLineContent(),this.lineTokenOffset=0===this.lineCharOffset?0:this.lineTokens.findTokenIndexAtOffset(this.lineCharOffset));const e=this.lineIdx,t=this.lineCharOffset;let i=0;for(;;){const n=this.lineTokens,o=n.getCount();let s=null;if(this.lineTokenOffset<o){const r=n.getMetadata(this.lineTokenOffset);for(;this.lineTokenOffset+1<o&&r===n.getMetadata(this.lineTokenOffset+1);)this.lineTokenOffset++;const a=0===me.NX.getTokenType(r),l=n.getEndOffset(this.lineTokenOffset);if(a&&l!==this.lineCharOffset){const e=n.getLanguageId(this.lineTokenOffset),t=this.line.substring(this.lineCharOffset,l),i=this.bracketTokens.getSingleLanguageBracketTokens(e),o=i.regExpGlobal;if(o){o.lastIndex=0;const e=o.exec(t);e&&(s=i.getToken(e[0]),s&&(this.lineCharOffset+=e.index))}}if(i+=l-this.lineCharOffset,s){if(e!==this.lineIdx||t!==this.lineCharOffset){this.peekedToken=s;break}return this.lineCharOffset+=s.length,s}this.lineTokenOffset++,this.lineCharOffset=l}else{if(this.lineIdx===this.textBufferLineCount-1)break;if(this.lineIdx++,this.lineTokens=this.textModel.getLineTokens(this.lineIdx+1),this.lineTokenOffset=0,this.line=this.lineTokens.getLineContent(),this.lineCharOffset=0,i+=33,i>1e3)break}if(i>1500)break}const n=(o=e,s=t,r=this.lineIdx,a=this.lineCharOffset,o!==r?Oe(r-o,a):Oe(0,a-s));var o,s,r,a;return new lt(n,0,-1,qe.getEmpty(),new st(n))}}class ht{constructor(e,t){this.text=e,this._offset=0,this.idx=0;const i=t.getRegExpStr()?new RegExp(t.getRegExpStr()+"|\n","g"):null,n=[];let o,s=0,r=0,a=0,l=0;const c=new Array;for(let e=0;e<60;e++)c.push(new lt(Oe(0,e),0,-1,qe.getEmpty(),new st(Oe(0,e))));const d=new Array;for(let e=0;e<60;e++)d.push(new lt(Oe(1,e),0,-1,qe.getEmpty(),new st(Oe(1,e))));if(i)for(i.lastIndex=0;null!==(o=i.exec(e));){const e=o.index,i=o[0];if("\n"===i)s++,r=e+1;else{if(a!==e){let t;if(l===s){const i=e-a;if(i<c.length)t=c[i];else{const e=Oe(0,i);t=new lt(e,0,-1,qe.getEmpty(),new st(e))}}else{const i=s-l,n=e-r;if(1===i&&n<d.length)t=d[n];else{const e=Oe(i,n);t=new lt(e,0,-1,qe.getEmpty(),new st(e))}}n.push(t)}n.push(t.getToken(i)),a=e+i.length,l=s}}const h=e.length;if(a!==h){const e=l===s?Oe(0,h-a):Oe(s-l,h-r);n.push(new lt(e,0,-1,qe.getEmpty(),new st(e)))}this.length=Oe(s,h-r),this.tokens=n}get offset(){return this._offset}read(){return this.tokens[this.idx++]||null}peek(){return this.tokens[this.idx]||null}skip(e){throw new n.B8}}class ut{constructor(e){this.map=e,this.hasRegExp=!1,this._regExpGlobal=null}static createFromLanguage(e,t){function i(e,i){return t.getKey(`${e}:::${i}`)}const n=e.characterPair.getColorizedBrackets(),o=new Map,s=new Set;for(const[t,r]of n){s.add(t);let n=o.get(r);const a=i(e.languageId,t);n||(n={openingBrackets:qe.getEmpty(),first:a},o.set(r,n)),n.openingBrackets=n.openingBrackets.add(a,Ze)}const r=new Map;for(const[e,t]of o){const i=Oe(0,e.length);r.set(e,new lt(i,2,t.first,t.openingBrackets,rt.create(i)))}for(const t of s){const n=Oe(0,t.length),o=i(e.languageId,t);r.set(t,new lt(n,1,o,qe.getEmpty().add(o,Ze),rt.create(n)))}return new ut(r)}getRegExpStr(){if(this.isEmpty)return null;{const e=[...this.map.keys()];return e.sort(),e.reverse(),e.map((e=>function(e){const t=(0,r.ec)(e);return/^[\w ]+$/.test(e)?`\\b${t}\\b`:t}(e))).join("|")}}get regExpGlobal(){if(!this.hasRegExp){const e=this.getRegExpStr();this._regExpGlobal=e?new RegExp(e,"g"):null,this.hasRegExp=!0}return this._regExpGlobal}getToken(e){return this.map.get(e)}get isEmpty(){return 0===this.map.size}}class gt{constructor(e,t){this.denseKeyProvider=e,this.getLanguageConfiguration=t,this.languageIdToBracketTokens=new Map}didLanguageChange(e){const t=this.languageIdToBracketTokens.get(e);if(!t)return!1;const i=ut.createFromLanguage(this.getLanguageConfiguration(e),this.denseKeyProvider).getRegExpStr();return t.getRegExpStr()!==i}getSingleLanguageBracketTokens(e){let t=this.languageIdToBracketTokens.get(e);return t||(t=ut.createFromLanguage(this.getLanguageConfiguration(e),this.denseKeyProvider),this.languageIdToBracketTokens.set(e,t)),t}}function pt(e,t=!1){if(0===e.length)return null;if(1===e.length)return e[0];let i=e.length;for(;i>3;){const n=i>>1;for(let o=0;o<n;o++){const n=o<<1;e[o]=Xe.create23(e[n],e[n+1],n+3===i?e[n+2]:null,t)}i=n}return Xe.create23(e[0],e[1],i>=3?e[2]:null,t)}function ft(e,t){return Math.abs(e.listHeight-t.listHeight)}function mt(e,t){return e.listHeight===t.listHeight?Xe.create23(e,t,null,!1):e.listHeight>t.listHeight?function(e,t){let i=e=e.toMutable();const n=new Array;let o;for(;;){if(t.listHeight===i.listHeight){o=t;break}if(4!==i.kind)throw new Error("unexpected");n.push(i),i=i.makeLastElementMutable()}for(let e=n.length-1;e>=0;e--){const t=n[e];o?t.childrenLength>=3?o=Xe.create23(t.unappendChild(),o,null,!1):(t.appendChildOfSameHeight(o),o=void 0):t.handleChildrenChanged()}return o?Xe.create23(e,o,null,!1):e}(e,t):function(e,t){let i=e=e.toMutable();const n=new Array;for(;t.listHeight!==i.listHeight;){if(4!==i.kind)throw new Error("unexpected");n.push(i),i=i.makeFirstElementMutable()}let o=t;for(let e=n.length-1;e>=0;e--){const t=n[e];o?t.childrenLength>=3?o=Xe.create23(o,t.unprependChild(),null,!1):(t.prependChildOfSameHeight(o),o=void 0):t.handleChildrenChanged()}return o?Xe.create23(o,e,null,!1):e}(t,e)}class vt{constructor(e){this.lastOffset=0,this.nextNodes=[e],this.offsets=[0],this.idxs=[]}readLongestNodeAt(e,t){if(Fe(e,this.lastOffset))throw new Error("Invalid offset");for(this.lastOffset=e;;){const i=bt(this.nextNodes);if(!i)return;const n=bt(this.offsets);if(Fe(e,n))return;if(Fe(n,e))if(Re(n,i.length)<=e)this.nextNodeAfterCurrent();else{const e=_t(i);-1!==e?(this.nextNodes.push(i.getChild(e)),this.offsets.push(n),this.idxs.push(e)):this.nextNodeAfterCurrent()}else{if(t(i))return this.nextNodeAfterCurrent(),i;{const e=_t(i);if(-1===e)return void this.nextNodeAfterCurrent();this.nextNodes.push(i.getChild(e)),this.offsets.push(n),this.idxs.push(e)}}}}nextNodeAfterCurrent(){for(;;){const e=bt(this.offsets),t=bt(this.nextNodes);if(this.nextNodes.pop(),this.offsets.pop(),0===this.idxs.length)break;const i=bt(this.nextNodes),n=_t(i,this.idxs[this.idxs.length-1]);if(-1!==n){this.nextNodes.push(i.getChild(n)),this.offsets.push(Re(e,t.length)),this.idxs[this.idxs.length-1]=n;break}this.idxs.pop()}}}function _t(e,t=-1){for(;;){if(++t>=e.childrenLength)return-1;if(e.getChild(t))return t}}function bt(e){return e.length>0?e[e.length-1]:void 0}function wt(e,t,i,n){return new yt(e,t,i,n).parseDocument()}class yt{constructor(e,t,i,n){if(this.tokenizer=e,this.createImmutableLists=n,this._itemsConstructed=0,this._itemsFromCache=0,i&&n)throw new Error("Not supported");this.oldNodeReader=i?new vt(i):void 0,this.positionMapper=new je(t,e.length)}parseDocument(){this._itemsConstructed=0,this._itemsFromCache=0;let e=this.parseList(qe.getEmpty());return e||(e=Xe.getEmpty()),e}parseList(e){const t=new Array;for(;;){const i=this.tokenizer.peek();if(!i||2===i.kind&&i.bracketIds.intersects(e))break;const n=this.parseChild(e);4===n.kind&&0===n.childrenLength||t.push(n)}const i=this.oldNodeReader?function(e){if(0===e.length)return null;if(1===e.length)return e[0];let t=0;function i(){if(t>=e.length)return null;const i=t,n=e[i].listHeight;for(t++;t<e.length&&e[t].listHeight===n;)t++;return t-i>=2?pt(0===i&&t===e.length?e:e.slice(i,t),!1):e[i]}let n=i(),o=i();if(!o)return n;for(let e=i();e;e=i())ft(n,o)<=ft(o,e)?(n=mt(n,o),o=e):o=mt(o,e);return mt(n,o)}(t):pt(t,this.createImmutableLists);return i}parseChild(e){if(this.oldNodeReader){const t=this.positionMapper.getDistanceToNextChange(this.tokenizer.offset);if(0!==t){const i=this.oldNodeReader.readLongestNodeAt(this.positionMapper.getOffsetBeforeChange(this.tokenizer.offset),(i=>{if(!Fe(i.length,t))return!1;return i.canBeReused(e)}));if(i)return this._itemsFromCache++,this.tokenizer.skip(i.length),i}}this._itemsConstructed++;const t=this.tokenizer.read();switch(t.kind){case 2:return new at(t.bracketIds,t.length);case 0:return t.astNode;case 1:const i=e.merge(t.bracketIds),n=this.parseList(i),o=this.tokenizer.peek();return o&&2===o.kind&&(o.bracketId===t.bracketId||o.bracketIds.intersects(t.bracketIds))?(this.tokenizer.read(),Qe.create(t.astNode,n,o.astNode)):Qe.create(t.astNode,n,null);default:throw new Error("unexpected")}}}class Ct extends s.JT{constructor(e,t){super(),this.textModel=e,this.languageConfigurationService=t,this.cache=this._register(new s.XK),this.onDidChangeEmitter=new o.Q5,this.onDidChange=this.onDidChangeEmitter.event,this.bracketsRequested=!1,this._register(e.onDidChangeOptions((e=>{this.cache.clear(),this.updateCache()}))),this._register(e.onDidChangeLanguage((e=>{this.cache.clear(),this.updateCache()}))),this._register(this.languageConfigurationService.onDidChange((e=>{var t;e.languageId&&!(null===(t=this.cache.value)||void 0===t?void 0:t.object.didLanguageChange(e.languageId))||(this.cache.clear(),this.updateCache())})))}get isDocumentSupported(){return this.textModel.getValueLength()<=5e6}updateCache(){if(this.bracketsRequested&&this.isDocumentSupported){if(!this.cache.value){const i=new s.SL;this.cache.value=(e=i.add(new xt(this.textModel,(e=>this.languageConfigurationService.getLanguageConfiguration(e)))),t=i,{object:e,dispose:()=>null==t?void 0:t.dispose()}),i.add(this.cache.value.object.onDidChange((e=>this.onDidChangeEmitter.fire(e)))),this.onDidChangeEmitter.fire()}}else this.cache.clear(),this.onDidChangeEmitter.fire();var e,t}handleContentChanged(e){var t;null===(t=this.cache.value)||void 0===t||t.object.handleContentChanged(e)}getBracketPairsInRange(e){var t;return this.bracketsRequested=!0,this.updateCache(),(null===(t=this.cache.value)||void 0===t?void 0:t.object.getBracketPairsInRange(e,!1))||[]}getBracketPairsInRangeWithMinIndentation(e){var t;return this.bracketsRequested=!0,this.updateCache(),(null===(t=this.cache.value)||void 0===t?void 0:t.object.getBracketPairsInRange(e,!0))||[]}getBracketsInRange(e){var t;return this.bracketsRequested=!0,this.updateCache(),(null===(t=this.cache.value)||void 0===t?void 0:t.object.getBracketsInRange(e))||[]}}class xt extends s.JT{constructor(e,t){if(super(),this.textModel=e,this.getLanguageConfiguration=t,this.didChangeEmitter=new o.Q5,this.denseKeyProvider=new Ge,this.brackets=new gt(this.denseKeyProvider,this.getLanguageConfiguration),this.onDidChange=this.didChangeEmitter.event,this._register(e.onBackgroundTokenizationStateChanged((()=>{if(2===e.backgroundTokenizationState){const e=void 0===this.initialAstWithoutTokens;this.initialAstWithoutTokens=void 0,e||this.didChangeEmitter.fire()}}))),this._register(e.onDidChangeTokens((({ranges:e})=>{const t=e.map((e=>new ze(Oe(e.fromLineNumber-1,0),Oe(e.toLineNumber,0),Oe(e.toLineNumber-e.fromLineNumber+1,0))));this.astWithTokens=this.parseDocumentFromTextBuffer(t,this.astWithTokens,!1),this.initialAstWithoutTokens||this.didChangeEmitter.fire()}))),0===e.backgroundTokenizationState){const e=this.brackets.getSingleLanguageBracketTokens(this.textModel.getLanguageId()),t=new ht(this.textModel.getValue(),e);this.initialAstWithoutTokens=wt(t,[],void 0,!0),this.astWithTokens=this.initialAstWithoutTokens}else 2===e.backgroundTokenizationState?(this.initialAstWithoutTokens=void 0,this.astWithTokens=this.parseDocumentFromTextBuffer([],void 0,!1)):1===e.backgroundTokenizationState&&(this.initialAstWithoutTokens=this.parseDocumentFromTextBuffer([],void 0,!0),this.astWithTokens=this.initialAstWithoutTokens)}didLanguageChange(e){return this.brackets.didLanguageChange(e)}handleContentChanged(e){const t=e.changes.map((e=>{const t=d.e.lift(e.range);return new ze(We(t.getStartPosition()),We(t.getEndPosition()),function(e){const t=(0,r.uq)(e);return Oe(t.length-1,t[t.length-1].length)}(e.text))})).reverse();this.astWithTokens=this.parseDocumentFromTextBuffer(t,this.astWithTokens,!1),this.initialAstWithoutTokens&&(this.initialAstWithoutTokens=this.parseDocumentFromTextBuffer(t,this.initialAstWithoutTokens,!1))}parseDocumentFromTextBuffer(e,t,i){const n=t;return wt(new ct(this.textModel,this.brackets),e,n,i)}getBracketsInRange(e){const t=Oe(e.startLineNumber-1,e.startColumn-1),i=Oe(e.endLineNumber-1,e.endColumn-1),n=new Array,o=this.initialAstWithoutTokens||this.astWithTokens;return St(o,0,o.length,t,i,n),n}getBracketPairsInRange(e,t){const i=new Array,n=We(e.getStartPosition()),o=We(e.getEndPosition()),s=this.initialAstWithoutTokens||this.astWithTokens,r=new kt(i,t,this.textModel);return Lt(s,0,s.length,n,o,r),i}}function St(e,t,i,n,o,s,r=0){if(1===e.kind){const e=He(t,i);s.push(new Ie(e,r-1,!1))}else if(3===e.kind){const e=He(t,i);s.push(new Ie(e,r-1,!0))}else if(4===e.kind)for(const a of e.children)i=Re(t,a.length),Be(t,o)&&Ve(i,n)&&St(a,t,i,n,o,s,r),t=i;else if(2===e.kind){r++;{const a=e.openingBracket;i=Re(t,a.length),Be(t,o)&&Ve(i,n)&&St(a,t,i,n,o,s,r),t=i}if(e.child){const a=e.child;i=Re(t,a.length),Be(t,o)&&Ve(i,n)&&St(a,t,i,n,o,s,r),t=i}if(e.closingBracket){const a=e.closingBracket;i=Re(t,a.length),Be(t,o)&&Ve(i,n)&&St(a,t,i,n,o,s,r),t=i}}}class kt{constructor(e,t,i){this.result=e,this.includeMinIndentation=t,this.textModel=i}}function Lt(e,t,i,n,o,s,r=0){var a;if(2===e.kind){const n=Re(t,e.openingBracket.length);let o=-1;s.includeMinIndentation&&(o=e.computeMinIndentation(t,s.textModel)),s.result.push(new Te(He(t,i),He(t,n),e.closingBracket?He(Re(n,(null===(a=e.child)||void 0===a?void 0:a.length)||0),i):void 0,r,o)),r++}let l=t;for(const t of e.children){const e=l;l=Re(l,t.length),Be(e,o)&&Be(n,l)&&Lt(t,e,l,n,o,s,r)}}var Nt=i(27869),Dt=i(97781);class It extends s.JT{constructor(e){super(),this.textModel=e,this.colorProvider=new Et,this.onDidChangeEmitter=new o.Q5,this.onDidChange=this.onDidChangeEmitter.event,this.colorizationOptions=e.getOptions().bracketPairColorizationOptions,this._register(e.onDidChangeOptions((t=>{this.colorizationOptions=e.getOptions().bracketPairColorizationOptions}))),this._register(e.bracketPairs.onDidChange((e=>{this.onDidChangeEmitter.fire()})))}getDecorationsInRange(e,t,i){if(void 0===t)return[];if(!this.colorizationOptions.enabled)return[];const n=new Array,o=this.textModel.bracketPairs.getBracketsInRange(e);for(const e of o)n.push({id:`bracket${e.range.toString()}-${e.nestingLevel}`,options:{description:"BracketPairColorization",inlineClassName:this.colorProvider.getInlineClassName(e)},ownerId:0,range:e.range});return n}getAllDecorations(e,t){return void 0===e?[]:this.colorizationOptions.enabled?this.getDecorationsInRange(new d.e(1,1,this.textModel.getLineCount(),1),e,t):[]}}class Et{constructor(){this.unexpectedClosingBracketClassName="unexpected-closing-bracket"}getInlineClassName(e){return e.isInvalid?this.unexpectedClosingBracketClassName:this.getInlineClassNameOfLevel(e.nestingLevel)}getInlineClassNameOfLevel(e){return"bracket-highlighting-"+e%30}}(0,Dt.Ic)(((e,t)=>{const i=[Nt.zJ,Nt.Vs,Nt.CE,Nt.UP,Nt.r0,Nt.m1],n=new Et;t.addRule(`.monaco-editor .${n.unexpectedClosingBracketClassName} { color: ${e.getColor(Nt.ts)}; }`);let o=i.map((t=>e.getColor(t))).filter((e=>!!e)).filter((e=>!e.isTransparent()));for(let e=0;e<30;e++){const i=o[e%o.length];t.addRule(`.monaco-editor .${n.getInlineClassNameOfLevel(e)} { color: ${i}; }`)}}));var Tt=i(71531),Mt=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},At=function(e,t){return function(i,n){t(i,n,e)}};function Ot(e){const t=new ue;return t.acceptChunk(e),t.finish()}function Pt(e,t){return("string"==typeof e?Ot(e):e).create(t)}let Rt=0;class Ft{constructor(e){this._source=e,this._eos=!1}read(){if(this._eos)return null;let e=[],t=0,i=0;for(;;){let n=this._source.read();if(null===n)return this._eos=!0,0===t?null:e.join("");if(n.length>0&&(e[t++]=n,i+=n.length),i>=65536)return e.join("")}}}const Bt=()=>{throw new Error("Invalid change accessor")};class Vt{constructor(){this._searchCanceledBrand=void 0}}function Wt(e){return e instanceof Vt?null:e}Vt.INSTANCE=new Vt;let Ht=class e extends s.JT{constructor(t,i,n,s=null,l,c,h){super(),this._undoRedoService=l,this._modeService=c,this._languageConfigurationService=h,this._onWillDispose=this._register(new o.Q5),this.onWillDispose=this._onWillDispose.event,this._onDidChangeDecorations=this._register(new ei((e=>this.handleBeforeFireDecorationsChangedEvent(e)))),this.onDidChangeDecorations=this._onDidChangeDecorations.event,this._onDidChangeLanguage=this._register(new o.Q5),this.onDidChangeLanguage=this._onDidChangeLanguage.event,this._onDidChangeLanguageConfiguration=this._register(new o.Q5),this.onDidChangeLanguageConfiguration=this._onDidChangeLanguageConfiguration.event,this._onDidChangeTokens=this._register(new o.Q5),this.onDidChangeTokens=this._onDidChangeTokens.event,this._onDidChangeOptions=this._register(new o.Q5),this.onDidChangeOptions=this._onDidChangeOptions.event,this._onDidChangeAttached=this._register(new o.Q5),this.onDidChangeAttached=this._onDidChangeAttached.event,this._onDidChangeContentOrInjectedText=this._register(new o.Q5),this.onDidChangeContentOrInjectedText=this._onDidChangeContentOrInjectedText.event,this._eventEmitter=this._register(new ti),this._backgroundTokenizationState=0,this._onBackgroundTokenizationStateChanged=this._register(new o.Q5),this.onBackgroundTokenizationStateChanged=this._onBackgroundTokenizationStateChanged.event,this._register(this._eventEmitter.fastEvent((e=>{this._onDidChangeContentOrInjectedText.fire(e.rawContentChangedEvent)}))),Rt++,this.id="$model"+Rt,this.isForSimpleWidget=i.isForSimpleWidget,this._associatedResource=null==s?a.o.parse("inmemory://model/"+Rt):s,this._attachedEditorCount=0;const{textBuffer:u,disposable:p}=Pt(t,i.defaultEOL);this._buffer=u,this._bufferDisposable=p,this._options=e.resolveOptions(this._buffer,i);const f=this._buffer.getLineCount(),m=this._buffer.getValueLengthInRange(new d.e(1,1,f,this._buffer.getLineLength(f)+1),0);i.largeFileOptimizations?this._isTooLargeForTokenization=m>e.LARGE_FILE_SIZE_THRESHOLD||f>e.LARGE_FILE_LINE_COUNT_THRESHOLD:this._isTooLargeForTokenization=!1,this._isTooLargeForSyncing=m>e.MODEL_SYNC_LIMIT,this._versionId=1,this._alternativeVersionId=1,this._initialUndoRedoSnapshot=null,this._isDisposed=!1,this._isDisposing=!1,this._languageId=n||ve.TG,this._languageRegistryListener=this._languageConfigurationService.onDidChange((e=>{e.affects(this._languageId)&&this._onDidChangeLanguageConfiguration.fire({})})),this._instanceId=r.PJ(Rt),this._lastDecorationId=0,this._decorations=Object.create(null),this._decorationsTree=new $t,this._commandManager=new g.NL(this,this._undoRedoService),this._isUndoing=!1,this._isRedoing=!1,this._trimAutoWhitespaceLines=null,this._tokens=new le.Rl(this._modeService.languageIdCodec),this._tokens2=new le.cx(this._modeService.languageIdCodec),this._tokenization=new ye(this,this._modeService.languageIdCodec),this._bracketPairColorizer=this._register(new Ct(this,this._languageConfigurationService)),this._decorationProvider=this._register(new It(this)),this._register(this._decorationProvider.onDidChange((()=>{this._onDidChangeDecorations.beginDeferredEmit(),this._onDidChangeDecorations.fire(),this._onDidChangeDecorations.endDeferredEmit()})))}static resolveOptions(e,t){if(t.detectIndentation){const i=m(e,t.tabSize,t.insertSpaces);return new u.dJ({tabSize:i.tabSize,indentSize:i.tabSize,insertSpaces:i.insertSpaces,trimAutoWhitespace:t.trimAutoWhitespace,defaultEOL:t.defaultEOL,bracketPairColorizationOptions:t.bracketPairColorizationOptions})}return new u.dJ({tabSize:t.tabSize,indentSize:t.indentSize,insertSpaces:t.insertSpaces,trimAutoWhitespace:t.trimAutoWhitespace,defaultEOL:t.defaultEOL,bracketPairColorizationOptions:t.bracketPairColorizationOptions})}onDidChangeContentFast(e){return this._eventEmitter.fastEvent((t=>e(t.contentChangedEvent)))}onDidChangeContent(e){return this._eventEmitter.slowEvent((t=>e(t.contentChangedEvent)))}get bracketPairs(){return this._bracketPairColorizer}get backgroundTokenizationState(){return this._backgroundTokenizationState}handleTokenizationProgress(e){if(2===this._backgroundTokenizationState)return;const t=e?2:1;this._backgroundTokenizationState!==t&&(this._backgroundTokenizationState=t,this._onBackgroundTokenizationStateChanged.fire())}dispose(){this._isDisposing=!0,this._onWillDispose.fire(),this._languageRegistryListener.dispose(),this._tokenization.dispose(),this._isDisposed=!0,super.dispose(),this._bufferDisposable.dispose(),this._isDisposing=!1;const e=new de([],"","\n",!1,!1,!0,!0);e.dispose(),this._buffer=e}_assertNotDisposed(){if(this._isDisposed)throw new Error("Model is disposed!")}_emitContentChangedEvent(e,t){this._bracketPairColorizer.handleContentChanged(t),this._isDisposing||this._eventEmitter.fire(new ge.fV(e,t))}setValue(e){if(this._assertNotDisposed(),null===e)return;const{textBuffer:t,disposable:i}=Pt(e,this._options.defaultEOL);this._setValueFromTextBuffer(t,i)}_createContentChanged2(e,t,i,n,o,s,r){return{changes:[{range:e,rangeOffset:t,rangeLength:i,text:n}],eol:this._buffer.getEOL(),versionId:this.getVersionId(),isUndoing:o,isRedoing:s,isFlush:r}}_setValueFromTextBuffer(e,t){this._assertNotDisposed();const i=this.getFullModelRange(),n=this.getValueLengthInRange(i),o=this.getLineCount(),s=this.getLineMaxColumn(o);this._buffer=e,this._bufferDisposable.dispose(),this._bufferDisposable=t,this._increaseVersionId(),this._tokens.flush(),this._tokens2.flush(),this._decorations=Object.create(null),this._decorationsTree=new $t,this._commandManager.clear(),this._trimAutoWhitespaceLines=null,this._emitContentChangedEvent(new ge.dQ([new ge.Jx],this._versionId,!1,!1),this._createContentChanged2(new d.e(1,1,o,s),0,n,this.getValue(),!1,!1,!0))}setEOL(e){this._assertNotDisposed();const t=1===e?"\r\n":"\n";if(this._buffer.getEOL()===t)return;const i=this.getFullModelRange(),n=this.getValueLengthInRange(i),o=this.getLineCount(),s=this.getLineMaxColumn(o);this._onBeforeEOLChange(),this._buffer.setEOL(t),this._increaseVersionId(),this._onAfterEOLChange(),this._emitContentChangedEvent(new ge.dQ([new ge.CZ],this._versionId,!1,!1),this._createContentChanged2(new d.e(1,1,o,s),0,n,this.getValue(),!1,!1,!1))}_onBeforeEOLChange(){this._decorationsTree.ensureAllNodesHaveRanges(this)}_onAfterEOLChange(){const e=this.getVersionId(),t=this._decorationsTree.collectNodesPostOrder();for(let i=0,n=t.length;i<n;i++){const n=t[i],o=n.range,s=n.cachedAbsoluteStart-n.start,r=this._buffer.getOffsetAt(o.startLineNumber,o.startColumn),a=this._buffer.getOffsetAt(o.endLineNumber,o.endColumn);n.cachedAbsoluteStart=r,n.cachedAbsoluteEnd=a,n.cachedVersionId=e,n.start=r-s,n.end=a-s,R(n)}}onBeforeAttached(){this._attachedEditorCount++,1===this._attachedEditorCount&&this._onDidChangeAttached.fire(void 0)}onBeforeDetached(){this._attachedEditorCount--,0===this._attachedEditorCount&&this._onDidChangeAttached.fire(void 0)}isAttachedToEditor(){return this._attachedEditorCount>0}getAttachedEditorCount(){return this._attachedEditorCount}isTooLargeForSyncing(){return this._isTooLargeForSyncing}isTooLargeForTokenization(){return this._isTooLargeForTokenization}isDisposed(){return this._isDisposed}isDominatedByLongLines(){if(this._assertNotDisposed(),this.isTooLargeForTokenization())return!1;let e=0,t=0;const i=this._buffer.getLineCount();for(let n=1;n<=i;n++){const i=this._buffer.getLineLength(n);i>=1e4?t+=i:e+=i}return t>e}get uri(){return this._associatedResource}getOptions(){return this._assertNotDisposed(),this._options}getFormattingOptions(){return{tabSize:this._options.indentSize,insertSpaces:this._options.insertSpaces}}updateOptions(e){this._assertNotDisposed();let t=void 0!==e.tabSize?e.tabSize:this._options.tabSize,i=void 0!==e.indentSize?e.indentSize:this._options.indentSize,n=void 0!==e.insertSpaces?e.insertSpaces:this._options.insertSpaces,o=void 0!==e.trimAutoWhitespace?e.trimAutoWhitespace:this._options.trimAutoWhitespace,s=void 0!==e.bracketColorizationOptions?e.bracketColorizationOptions:this._options.bracketPairColorizationOptions,r=new u.dJ({tabSize:t,indentSize:i,insertSpaces:n,defaultEOL:this._options.defaultEOL,trimAutoWhitespace:o,bracketPairColorizationOptions:s});if(this._options.equals(r))return;let a=this._options.createChangeEvent(r);this._options=r,this._onDidChangeOptions.fire(a)}detectIndentation(e,t){this._assertNotDisposed();let i=m(this._buffer,t,e);this.updateOptions({insertSpaces:i.insertSpaces,tabSize:i.tabSize,indentSize:i.tabSize})}static _normalizeIndentationFromWhitespace(e,t,i){let n=0;for(let i=0;i<e.length;i++)"\t"===e.charAt(i)?n+=t:n++;let o="";if(!i){let e=Math.floor(n/t);n%=t;for(let t=0;t<e;t++)o+="\t"}for(let e=0;e<n;e++)o+=" ";return o}static normalizeIndentation(t,i,n){let o=r.LC(t);return-1===o&&(o=t.length),e._normalizeIndentationFromWhitespace(t.substring(0,o),i,n)+t.substring(o)}normalizeIndentation(t){return this._assertNotDisposed(),e.normalizeIndentation(t,this._options.indentSize,this._options.insertSpaces)}getVersionId(){return this._assertNotDisposed(),this._versionId}mightContainRTL(){return this._buffer.mightContainRTL()}mightContainUnusualLineTerminators(){return this._buffer.mightContainUnusualLineTerminators()}removeUnusualLineTerminators(e=null){const t=this.findMatches(r.Qe.source,!1,!0,!1,null,!1,1073741824);this._buffer.resetMightContainUnusualLineTerminators(),this.pushEditOperations(e,t.map((e=>({range:e.range,text:null}))),(()=>null))}mightContainNonBasicASCII(){return this._buffer.mightContainNonBasicASCII()}getAlternativeVersionId(){return this._assertNotDisposed(),this._alternativeVersionId}getInitialUndoRedoSnapshot(){return this._assertNotDisposed(),this._initialUndoRedoSnapshot}getOffsetAt(e){this._assertNotDisposed();let t=this._validatePosition(e.lineNumber,e.column,0);return this._buffer.getOffsetAt(t.lineNumber,t.column)}getPositionAt(e){this._assertNotDisposed();let t=Math.min(this._buffer.getLength(),Math.max(0,e));return this._buffer.getPositionAt(t)}_increaseVersionId(){this._versionId=this._versionId+1,this._alternativeVersionId=this._versionId}_overwriteVersionId(e){this._versionId=e}_overwriteAlternativeVersionId(e){this._alternativeVersionId=e}_overwriteInitialUndoRedoSnapshot(e){this._initialUndoRedoSnapshot=e}getValue(e,t=!1){this._assertNotDisposed();const i=this.getFullModelRange(),n=this.getValueInRange(i,e);return t?this._buffer.getBOM()+n:n}createSnapshot(e=!1){return new Ft(this._buffer.createSnapshot(e))}getValueLength(e,t=!1){this._assertNotDisposed();const i=this.getFullModelRange(),n=this.getValueLengthInRange(i,e);return t?this._buffer.getBOM().length+n:n}getValueInRange(e,t=0){return this._assertNotDisposed(),this._buffer.getValueInRange(this.validateRange(e),t)}getValueLengthInRange(e,t=0){return this._assertNotDisposed(),this._buffer.getValueLengthInRange(this.validateRange(e),t)}getCharacterCountInRange(e,t=0){return this._assertNotDisposed(),this._buffer.getCharacterCountInRange(this.validateRange(e),t)}getLineCount(){return this._assertNotDisposed(),this._buffer.getLineCount()}getLineContent(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineContent(e)}getLineLength(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineLength(e)}getLinesContent(){return this._assertNotDisposed(),this._buffer.getLinesContent()}getEOL(){return this._assertNotDisposed(),this._buffer.getEOL()}getEndOfLineSequence(){return this._assertNotDisposed(),"\n"===this._buffer.getEOL()?0:1}getLineMinColumn(e){return this._assertNotDisposed(),1}getLineMaxColumn(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineLength(e)+1}getLineFirstNonWhitespaceColumn(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineFirstNonWhitespaceColumn(e)}getLineLastNonWhitespaceColumn(e){if(this._assertNotDisposed(),e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._buffer.getLineLastNonWhitespaceColumn(e)}_validateRangeRelaxedNoAllocations(e){const t=this._buffer.getLineCount(),i=e.startLineNumber,n=e.startColumn;let o=Math.floor("number"!=typeof i||isNaN(i)?1:i),s=Math.floor("number"!=typeof n||isNaN(n)?1:n);if(o<1)o=1,s=1;else if(o>t)o=t,s=this.getLineMaxColumn(o);else if(s<=1)s=1;else{const e=this.getLineMaxColumn(o);s>=e&&(s=e)}const r=e.endLineNumber,a=e.endColumn;let l=Math.floor("number"!=typeof r||isNaN(r)?1:r),c=Math.floor("number"!=typeof a||isNaN(a)?1:a);if(l<1)l=1,c=1;else if(l>t)l=t,c=this.getLineMaxColumn(l);else if(c<=1)c=1;else{const e=this.getLineMaxColumn(l);c>=e&&(c=e)}return i===o&&n===s&&r===l&&a===c&&e instanceof d.e&&!(e instanceof h.Y)?e:new d.e(o,s,l,c)}_isValidPosition(e,t,i){if("number"!=typeof e||"number"!=typeof t)return!1;if(isNaN(e)||isNaN(t))return!1;if(e<1||t<1)return!1;if((0|e)!==e||(0|t)!==t)return!1;if(e>this._buffer.getLineCount())return!1;if(1===t)return!0;if(t>this.getLineMaxColumn(e))return!1;if(1===i){const i=this._buffer.getLineCharCode(e,t-2);if(r.ZG(i))return!1}return!0}_validatePosition(e,t,i){const n=Math.floor("number"!=typeof e||isNaN(e)?1:e),o=Math.floor("number"!=typeof t||isNaN(t)?1:t),s=this._buffer.getLineCount();if(n<1)return new c.L(1,1);if(n>s)return new c.L(s,this.getLineMaxColumn(s));if(o<=1)return new c.L(n,1);const a=this.getLineMaxColumn(n);if(o>=a)return new c.L(n,a);if(1===i){const e=this._buffer.getLineCharCode(n,o-2);if(r.ZG(e))return new c.L(n,o-1)}return new c.L(n,o)}validatePosition(e){return this._assertNotDisposed(),e instanceof c.L&&this._isValidPosition(e.lineNumber,e.column,1)?e:this._validatePosition(e.lineNumber,e.column,1)}_isValidRange(e,t){const i=e.startLineNumber,n=e.startColumn,o=e.endLineNumber,s=e.endColumn;if(!this._isValidPosition(i,n,0))return!1;if(!this._isValidPosition(o,s,0))return!1;if(1===t){const e=n>1?this._buffer.getLineCharCode(i,n-2):0,t=s>1&&s<=this._buffer.getLineLength(o)?this._buffer.getLineCharCode(o,s-2):0,a=r.ZG(e),l=r.ZG(t);return!a&&!l}return!0}validateRange(e){if(this._assertNotDisposed(),e instanceof d.e&&!(e instanceof h.Y)&&this._isValidRange(e,1))return e;const t=this._validatePosition(e.startLineNumber,e.startColumn,0),i=this._validatePosition(e.endLineNumber,e.endColumn,0),n=t.lineNumber,o=t.column,s=i.lineNumber,a=i.column;{const e=o>1?this._buffer.getLineCharCode(n,o-2):0,t=a>1&&a<=this._buffer.getLineLength(s)?this._buffer.getLineCharCode(s,a-2):0,i=r.ZG(e),l=r.ZG(t);return i||l?n===s&&o===a?new d.e(n,o-1,s,a-1):i&&l?new d.e(n,o-1,s,a+1):i?new d.e(n,o-1,s,a):new d.e(n,o,s,a+1):new d.e(n,o,s,a)}}modifyPosition(e,t){this._assertNotDisposed();let i=this.getOffsetAt(e)+t;return this.getPositionAt(Math.min(this._buffer.getLength(),Math.max(0,i)))}getFullModelRange(){this._assertNotDisposed();const e=this.getLineCount();return new d.e(1,1,e,this.getLineMaxColumn(e))}findMatchesLineByLine(e,t,i,n){return this._buffer.findMatchesLineByLine(e,t,i,n)}findMatches(e,t,i,n,o,s,r=999){this._assertNotDisposed();let a=null;null!==t&&(Array.isArray(t)||(t=[t]),t.every((e=>d.e.isIRange(e)))&&(a=t.map((e=>this.validateRange(e))))),null===a&&(a=[this.getFullModelRange()]),a=a.sort(((e,t)=>e.startLineNumber-t.startLineNumber||e.startColumn-t.startColumn));const l=[];let c;if(l.push(a.reduce(((e,t)=>d.e.areIntersecting(e,t)?e.plusRange(t):(l.push(e),t)))),!i&&e.indexOf("\n")<0){const t=new X.bc(e,i,n,o).parseSearchRequest();if(!t)return[];c=e=>this.findMatchesLineByLine(e,t,s,r)}else c=t=>X.pM.findMatches(this,new X.bc(e,i,n,o),t,s,r);return l.map(c).reduce(((e,t)=>e.concat(t)),[])}findNextMatch(e,t,i,n,o,s){this._assertNotDisposed();const r=this.validatePosition(t);if(!i&&e.indexOf("\n")<0){const t=new X.bc(e,i,n,o).parseSearchRequest();if(!t)return null;const a=this.getLineCount();let l=new d.e(r.lineNumber,r.column,a,this.getLineMaxColumn(a)),c=this.findMatchesLineByLine(l,t,s,1);return X.pM.findNextMatch(this,new X.bc(e,i,n,o),r,s),c.length>0?c[0]:(l=new d.e(1,1,r.lineNumber,this.getLineMaxColumn(r.lineNumber)),c=this.findMatchesLineByLine(l,t,s,1),c.length>0?c[0]:null)}return X.pM.findNextMatch(this,new X.bc(e,i,n,o),r,s)}findPreviousMatch(e,t,i,n,o,s){this._assertNotDisposed();const r=this.validatePosition(t);return X.pM.findPreviousMatch(this,new X.bc(e,i,n,o),r,s)}pushStackElement(){this._commandManager.pushStackElement()}popStackElement(){this._commandManager.popStackElement()}pushEOL(e){if(("\n"===this.getEOL()?0:1)!==e)try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),null===this._initialUndoRedoSnapshot&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEOL(e)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_validateEditOperation(e){return e instanceof u.Qi?e:new u.Qi(e.identifier||null,this.validateRange(e.range),e.text,e.forceMoveMarkers||!1,e.isAutoWhitespaceEdit||!1,e._isTracked||!1)}_validateEditOperations(e){const t=[];for(let i=0,n=e.length;i<n;i++)t[i]=this._validateEditOperation(e[i]);return t}pushEditOperations(e,t,i){try{return this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._pushEditOperations(e,this._validateEditOperations(t),i)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_pushEditOperations(e,t,i){if(this._options.trimAutoWhitespace&&this._trimAutoWhitespaceLines){let i=t.map((e=>({range:this.validateRange(e.range),text:e.text}))),n=!0;if(e)for(let t=0,o=e.length;t<o;t++){let o=e[t],s=!1;for(let e=0,t=i.length;e<t;e++){let t=i[e].range,n=t.startLineNumber>o.endLineNumber,r=o.startLineNumber>t.endLineNumber;if(!n&&!r){s=!0;break}}if(!s){n=!1;break}}if(n)for(let e=0,n=this._trimAutoWhitespaceLines.length;e<n;e++){let n=this._trimAutoWhitespaceLines[e],o=this.getLineMaxColumn(n),s=!0;for(let e=0,t=i.length;e<t;e++){let t=i[e].range,r=i[e].text;if(!(n<t.startLineNumber||n>t.endLineNumber)&&!(n===t.startLineNumber&&t.startColumn===o&&t.isEmpty()&&r&&r.length>0&&"\n"===r.charAt(0)||n===t.startLineNumber&&1===t.startColumn&&t.isEmpty()&&r&&r.length>0&&"\n"===r.charAt(r.length-1))){s=!1;break}}if(s){const e=new d.e(n,1,n,o);t.push(new u.Qi(null,e,null,!1,!1,!1))}}this._trimAutoWhitespaceLines=null}return null===this._initialUndoRedoSnapshot&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEditOperation(e,t,i)}_applyUndo(e,t,i,n){const o=e.map((e=>{const t=this.getPositionAt(e.newPosition),i=this.getPositionAt(e.newEnd);return{range:new d.e(t.lineNumber,t.column,i.lineNumber,i.column),text:e.oldText}}));this._applyUndoRedoEdits(o,t,!0,!1,i,n)}_applyRedo(e,t,i,n){const o=e.map((e=>{const t=this.getPositionAt(e.oldPosition),i=this.getPositionAt(e.oldEnd);return{range:new d.e(t.lineNumber,t.column,i.lineNumber,i.column),text:e.newText}}));this._applyUndoRedoEdits(o,t,!1,!0,i,n)}_applyUndoRedoEdits(e,t,i,n,o,s){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._isUndoing=i,this._isRedoing=n,this.applyEdits(e,!1),this.setEOL(t),this._overwriteAlternativeVersionId(o)}finally{this._isUndoing=!1,this._isRedoing=!1,this._eventEmitter.endDeferredEmit(s),this._onDidChangeDecorations.endDeferredEmit()}}applyEdits(e,t=!1){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit();const i=this._validateEditOperations(e);return this._doApplyEdits(i,t)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_doApplyEdits(e,t){const i=this._buffer.getLineCount(),n=this._buffer.applyEdits(e,this._options.trimAutoWhitespace,t),o=this._buffer.getLineCount(),s=n.changes;if(this._trimAutoWhitespaceLines=n.trimAutoWhitespaceLineNumbers,0!==s.length){for(let e=0,t=s.length;e<t;e++){const t=s[e],[i,n,o]=(0,le.QZ)(t.text);this._tokens.acceptEdit(t.range,i,n),this._tokens2.acceptEdit(t.range,i,n,o,t.text.length>0?t.text.charCodeAt(0):0),this._decorationsTree.acceptReplace(t.rangeOffset,t.rangeLength,t.text.length,t.forceMoveMarkers)}let e=[];this._increaseVersionId();let t=i;for(let i=0,n=s.length;i<n;i++){const n=s[i],[r]=(0,le.QZ)(n.text);this._onDidChangeDecorations.fire();const a=n.range.startLineNumber,l=n.range.endLineNumber,d=l-a,h=r,u=Math.min(d,h),g=h-d,p=o-t-g+a,f=p,m=p+h,v=this._decorationsTree.getInjectedTextInInterval(this,this.getOffsetAt(new c.L(f,1)),this.getOffsetAt(new c.L(m,this.getLineMaxColumn(m))),0),_=ge.gk.fromDecorations(v),b=new pe.H9(_);for(let t=u;t>=0;t--){const i=a+t,n=p+t;b.takeFromEndWhile((e=>e.lineNumber>n));const o=b.takeFromEndWhile((e=>e.lineNumber===n));e.push(new ge.rU(i,this.getLineContent(n),o))}if(u<d){const t=a+u;e.push(new ge.lN(t+1,l))}if(u<h){const i=new pe.H9(_),n=a+u,s=h-u,r=o-t-s+n+1;let l=[],c=[];for(let e=0;e<s;e++){let t=r+e;c[e]=this.getLineContent(t),i.takeWhile((e=>e.lineNumber<t)),l[e]=i.takeWhile((e=>e.lineNumber===t))}e.push(new ge.Tx(n+1,a+h,c,l))}t+=g}this._emitContentChangedEvent(new ge.dQ(e,this.getVersionId(),this._isUndoing,this._isRedoing),{changes:s,eol:this._buffer.getEOL(),versionId:this.getVersionId(),isUndoing:this._isUndoing,isRedoing:this._isRedoing,isFlush:!1})}return null===n.reverseEdits?void 0:n.reverseEdits}undo(){return this._undoRedoService.undo(this.uri)}canUndo(){return this._undoRedoService.canUndo(this.uri)}redo(){return this._undoRedoService.redo(this.uri)}canRedo(){return this._undoRedoService.canRedo(this.uri)}handleBeforeFireDecorationsChangedEvent(e){if(null===e||0===e.size)return;const t=[...e].map((e=>new ge.rU(e,this.getLineContent(e),this._getInjectedTextInLine(e))));this._onDidChangeContentOrInjectedText.fire(new ge.D8(t))}changeDecorations(e,t=0){this._assertNotDisposed();try{return this._onDidChangeDecorations.beginDeferredEmit(),this._changeDecorations(t,e)}finally{this._onDidChangeDecorations.endDeferredEmit()}}_changeDecorations(e,t){let i={addDecoration:(t,i)=>this._deltaDecorationsImpl(e,[],[{range:t,options:i}])[0],changeDecoration:(e,t)=>{this._changeDecorationImpl(e,t)},changeDecorationOptions:(e,t)=>{this._changeDecorationOptionsImpl(e,Jt(t))},removeDecoration:t=>{this._deltaDecorationsImpl(e,[t],[])},deltaDecorations:(t,i)=>0===t.length&&0===i.length?[]:this._deltaDecorationsImpl(e,t,i)},o=null;try{o=t(i)}catch(e){(0,n.dL)(e)}return i.addDecoration=Bt,i.changeDecoration=Bt,i.changeDecorationOptions=Bt,i.removeDecoration=Bt,i.deltaDecorations=Bt,o}deltaDecorations(e,t,i=0){if(this._assertNotDisposed(),e||(e=[]),0===e.length&&0===t.length)return[];try{return this._onDidChangeDecorations.beginDeferredEmit(),this._deltaDecorationsImpl(i,e,t)}finally{this._onDidChangeDecorations.endDeferredEmit()}}_getTrackedRange(e){return this.getDecorationRange(e)}_setTrackedRange(e,t,i){const n=e?this._decorations[e]:null;if(!n)return t?this._deltaDecorationsImpl(0,[],[{range:t,options:Xt[i]}])[0]:null;if(!t)return this._decorationsTree.delete(n),delete this._decorations[n.id],null;const o=this._validateRangeRelaxedNoAllocations(t),s=this._buffer.getOffsetAt(o.startLineNumber,o.startColumn),r=this._buffer.getOffsetAt(o.endLineNumber,o.endColumn);return this._decorationsTree.delete(n),n.reset(this.getVersionId(),s,r,o),n.setOptions(Xt[i]),this._decorationsTree.insert(n),n.id}removeAllDecorationsWithOwnerId(e){if(this._isDisposed)return;const t=this._decorationsTree.collectNodesFromOwner(e);for(let e=0,i=t.length;e<i;e++){const i=t[e];this._decorationsTree.delete(i),delete this._decorations[i.id]}}getDecorationOptions(e){const t=this._decorations[e];return t?t.options:null}getDecorationRange(e){const t=this._decorations[e];return t?this._decorationsTree.getNodeRange(this,t):null}getLineDecorations(e,t=0,i=!1){return e<1||e>this.getLineCount()?[]:this.getLinesDecorations(e,e,t,i)}getLinesDecorations(e,t,i=0,n=!1){let o=this.getLineCount(),s=Math.min(o,Math.max(1,e)),r=Math.min(o,Math.max(1,t)),a=this.getLineMaxColumn(r);const l=new d.e(s,1,r,a),c=this._getDecorationsInRange(l,i,n);return c.push(...this._decorationProvider.getDecorationsInRange(l,i,n)),c}getDecorationsInRange(e,t=0,i=!1){let n=this.validateRange(e);const o=this._getDecorationsInRange(n,t,i);return o.push(...this._decorationProvider.getDecorationsInRange(n,t,i)),o}getOverviewRulerDecorations(e=0,t=!1){return this._decorationsTree.getAll(this,e,t,!0)}getInjectedTextDecorations(e=0){return this._decorationsTree.getAllInjectedText(this,e)}_getInjectedTextInLine(e){const t=this._buffer.getOffsetAt(e,1),i=t+this._buffer.getLineLength(e),n=this._decorationsTree.getInjectedTextInInterval(this,t,i,0);return ge.gk.fromDecorations(n).filter((t=>t.lineNumber===e))}getAllDecorations(e=0,t=!1){let i=this._decorationsTree.getAll(this,e,t,!1);return i=i.concat(this._decorationProvider.getAllDecorations(e,t)),i}_getDecorationsInRange(e,t,i){const n=this._buffer.getOffsetAt(e.startLineNumber,e.startColumn),o=this._buffer.getOffsetAt(e.endLineNumber,e.endColumn);return this._decorationsTree.getAllInInterval(this,n,o,t,i)}getRangeAt(e,t){return this._buffer.getRangeAt(e,t-e)}_changeDecorationImpl(e,t){const i=this._decorations[e];if(!i)return;if(i.options.after){const t=this.getDecorationRange(e);this._onDidChangeDecorations.recordLineAffectedByInjectedText(t.endLineNumber)}if(i.options.before){const t=this.getDecorationRange(e);this._onDidChangeDecorations.recordLineAffectedByInjectedText(t.startLineNumber)}const n=this._validateRangeRelaxedNoAllocations(t),o=this._buffer.getOffsetAt(n.startLineNumber,n.startColumn),s=this._buffer.getOffsetAt(n.endLineNumber,n.endColumn);this._decorationsTree.delete(i),i.reset(this.getVersionId(),o,s,n),this._decorationsTree.insert(i),this._onDidChangeDecorations.checkAffectedAndFire(i.options),i.options.after&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(n.endLineNumber),i.options.before&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(n.startLineNumber)}_changeDecorationOptionsImpl(e,t){const i=this._decorations[e];if(!i)return;const n=!(!i.options.overviewRuler||!i.options.overviewRuler.color),o=!(!t.overviewRuler||!t.overviewRuler.color);if(this._onDidChangeDecorations.checkAffectedAndFire(i.options),this._onDidChangeDecorations.checkAffectedAndFire(t),i.options.after||t.after){const e=this._decorationsTree.getNodeRange(this,i);this._onDidChangeDecorations.recordLineAffectedByInjectedText(e.endLineNumber)}if(i.options.before||t.before){const e=this._decorationsTree.getNodeRange(this,i);this._onDidChangeDecorations.recordLineAffectedByInjectedText(e.startLineNumber)}n!==o?(this._decorationsTree.delete(i),i.setOptions(t),this._decorationsTree.insert(i)):i.setOptions(t)}_deltaDecorationsImpl(e,t,i){const n=this.getVersionId(),o=t.length;let s=0;const r=i.length;let a=0,l=new Array(r);for(;s<o||a<r;){let c=null;if(s<o){do{c=this._decorations[t[s++]]}while(!c&&s<o);if(c){if(c.options.after){const e=this._decorationsTree.getNodeRange(this,c);this._onDidChangeDecorations.recordLineAffectedByInjectedText(e.endLineNumber)}if(c.options.before){const e=this._decorationsTree.getNodeRange(this,c);this._onDidChangeDecorations.recordLineAffectedByInjectedText(e.startLineNumber)}this._decorationsTree.delete(c),this._onDidChangeDecorations.checkAffectedAndFire(c.options)}}if(a<r){if(!c){const e=++this._lastDecorationId,t=`${this._instanceId};${e}`;c=new k(t,0,0),this._decorations[t]=c}const t=i[a],o=this._validateRangeRelaxedNoAllocations(t.range),s=Jt(t.options),r=this._buffer.getOffsetAt(o.startLineNumber,o.startColumn),d=this._buffer.getOffsetAt(o.endLineNumber,o.endColumn);c.ownerId=e,c.reset(n,r,d,o),c.setOptions(s),c.options.after&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(o.endLineNumber),c.options.before&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(o.startLineNumber),this._onDidChangeDecorations.checkAffectedAndFire(s),this._decorationsTree.insert(c),l[a]=c.id,a++}else c&&delete this._decorations[c.id]}return l}setTokens(e,t=!1){if(0!==e.length){let t=[];for(let i=0,n=e.length;i<n;i++){const n=e[i];let o=0,s=0,r=!1;for(let e=0,t=n.tokens.length;e<t;e++){const t=n.startLineNumber+e;if(r)this._tokens.setTokens(this._languageId,t-1,this._buffer.getLineLength(t),n.tokens[e],!1),s=t;else{this._tokens.setTokens(this._languageId,t-1,this._buffer.getLineLength(t),n.tokens[e],!0)&&(r=!0,o=t,s=t)}}r&&t.push({fromLineNumber:o,toLineNumber:s})}t.length>0&&this._emitModelTokensChangedEvent({tokenizationSupportChanged:!1,semanticTokensApplied:!1,ranges:t})}this.handleTokenizationProgress(t)}setSemanticTokens(e,t){this._tokens2.set(e,t),this._emitModelTokensChangedEvent({tokenizationSupportChanged:!1,semanticTokensApplied:null!==e,ranges:[{fromLineNumber:1,toLineNumber:this.getLineCount()}]})}hasCompleteSemanticTokens(){return this._tokens2.isComplete()}hasSomeSemanticTokens(){return!this._tokens2.isEmpty()}setPartialSemanticTokens(e,t){if(this.hasCompleteSemanticTokens())return;const i=this._tokens2.setPartial(e,t);this._emitModelTokensChangedEvent({tokenizationSupportChanged:!1,semanticTokensApplied:!0,ranges:[{fromLineNumber:i.startLineNumber,toLineNumber:i.endLineNumber}]})}tokenizeViewport(e,t){e=Math.max(1,e),t=Math.min(this._buffer.getLineCount(),t),this._tokenization.tokenizeViewport(e,t)}clearTokens(){this._tokens.flush(),this._emitModelTokensChangedEvent({tokenizationSupportChanged:!0,semanticTokensApplied:!1,ranges:[{fromLineNumber:1,toLineNumber:this._buffer.getLineCount()}]})}_emitModelTokensChangedEvent(e){this._isDisposing||this._onDidChangeTokens.fire(e)}resetTokenization(){this._tokenization.reset()}forceTokenization(e){if(e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");this._tokenization.forceTokenization(e)}isCheapToTokenize(e){return this._tokenization.isCheapToTokenize(e)}tokenizeIfCheap(e){this.isCheapToTokenize(e)&&this.forceTokenization(e)}getLineTokens(e){if(e<1||e>this.getLineCount())throw new Error("Illegal value for lineNumber");return this._getLineTokens(e)}_getLineTokens(e){const t=this.getLineContent(e),i=this._tokens.getTokens(this._languageId,e-1,t);return this._tokens2.addSemanticTokens(e,i)}getLanguageId(){return this._languageId}setMode(e){if(this._languageId===e)return;let t={oldLanguage:this._languageId,newLanguage:e};this._languageId=e,this._onDidChangeLanguage.fire(t),this._onDidChangeLanguageConfiguration.fire({})}getLanguageIdAtPosition(e,t){const i=this.validatePosition(new c.L(e,t)),n=this.getLineTokens(i.lineNumber);return n.getLanguageId(n.findTokenIndexAtOffset(i.column-1))}getLanguageConfiguration(e){return this._languageConfigurationService.getLanguageConfiguration(e)}getWordAtPosition(t){this._assertNotDisposed();const i=this.validatePosition(t),n=this.getLineContent(i.lineNumber),o=this._getLineTokens(i.lineNumber),s=o.findTokenIndexAtOffset(i.column-1),[r,a]=e._findLanguageBoundaries(o,s),l=(0,xe.t2)(i.column,this.getLanguageConfiguration(o.getLanguageId(s)).getWordDefinition(),n.substring(r,a),r);if(l&&l.startColumn<=t.column&&t.column<=l.endColumn)return l;if(s>0&&r===i.column-1){const[r,a]=e._findLanguageBoundaries(o,s-1),l=(0,xe.t2)(i.column,this.getLanguageConfiguration(o.getLanguageId(s-1)).getWordDefinition(),n.substring(r,a),r);if(l&&l.startColumn<=t.column&&t.column<=l.endColumn)return l}return null}static _findLanguageBoundaries(e,t){const i=e.getLanguageId(t);let n=0;for(let o=t;o>=0&&e.getLanguageId(o)===i;o--)n=e.getStartOffset(o);let o=e.getLineContent().length;for(let n=t,s=e.getCount();n<s&&e.getLanguageId(n)===i;n++)o=e.getEndOffset(n);return[n,o]}getWordUntilPosition(e){const t=this.getWordAtPosition(e);return t?{word:t.word.substr(0,e.column-t.startColumn),startColumn:t.startColumn,endColumn:e.column}:{word:"",startColumn:e.column,endColumn:e.column}}findMatchingBracketUp(e,t){let i=e.toLowerCase(),n=this.validatePosition(t),o=this._getLineTokens(n.lineNumber),s=o.getLanguageId(o.findTokenIndexAtOffset(n.column-1)),r=this.getLanguageConfiguration(s).brackets;if(!r)return null;let a=r.textIsBracket[i];return a?Wt(this._findMatchingBracketUp(a,n,null)):null}matchBracket(e){return this._matchBracket(this.validatePosition(e))}_establishBracketSearchOffsets(e,t,i,n){const o=t.getCount(),s=t.getLanguageId(n);let r=Math.max(0,e.column-1-i.maxBracketLength);for(let e=n-1;e>=0;e--){const i=t.getEndOffset(e);if(i<=r)break;if((0,ke.Bu)(t.getStandardTokenType(e))||t.getLanguageId(e)!==s){r=i;break}}let a=Math.min(t.getLineContent().length,e.column-1+i.maxBracketLength);for(let e=n+1;e<o;e++){const i=t.getStartOffset(e);if(i>=a)break;if((0,ke.Bu)(t.getStandardTokenType(e))||t.getLanguageId(e)!==s){a=i;break}}return{searchStartOffset:r,searchEndOffset:a}}_matchBracket(e){const t=e.lineNumber,i=this._getLineTokens(t),n=this._buffer.getLineContent(t),o=i.findTokenIndexAtOffset(e.column-1);if(o<0)return null;const s=this.getLanguageConfiguration(i.getLanguageId(o)).brackets;if(s&&!(0,ke.Bu)(i.getStandardTokenType(o))){let{searchStartOffset:r,searchEndOffset:a}=this._establishBracketSearchOffsets(e,i,s,o),l=null;for(;;){const i=Le.Vr.findNextBracketInRange(s.forwardRegex,t,n,r,a);if(!i)break;if(i.startColumn<=e.column&&e.column<=i.endColumn){const e=n.substring(i.startColumn-1,i.endColumn-1).toLowerCase(),t=this._matchFoundBracket(i,s.textIsBracket[e],s.textIsOpenBracket[e],null);if(t){if(t instanceof Vt)return null;l=t}}r=i.endColumn-1}if(l)return l}if(o>0&&i.getStartOffset(o)===e.column-1){const s=o-1,r=this.getLanguageConfiguration(i.getLanguageId(s)).brackets;if(r&&!(0,ke.Bu)(i.getStandardTokenType(s))){let{searchStartOffset:o,searchEndOffset:a}=this._establishBracketSearchOffsets(e,i,r,s);const l=Le.Vr.findPrevBracketInRange(r.reversedRegex,t,n,o,a);if(l&&l.startColumn<=e.column&&e.column<=l.endColumn){const e=n.substring(l.startColumn-1,l.endColumn-1).toLowerCase(),t=this._matchFoundBracket(l,r.textIsBracket[e],r.textIsOpenBracket[e],null);if(t)return t instanceof Vt?null:t}}}return null}_matchFoundBracket(e,t,i,n){if(!t)return null;const o=i?this._findMatchingBracketDown(t,e.getEndPosition(),n):this._findMatchingBracketUp(t,e.getStartPosition(),n);return o?o instanceof Vt?o:[e,o]:null}_findMatchingBracketUp(e,t,i){const n=e.languageId,o=e.reversedRegex;let s=-1,r=0;const a=(t,n,a,l)=>{for(;;){if(i&&++r%100==0&&!i())return Vt.INSTANCE;const c=Le.Vr.findPrevBracketInRange(o,t,n,a,l);if(!c)break;const d=n.substring(c.startColumn-1,c.endColumn-1).toLowerCase();if(e.isOpen(d)?s++:e.isClose(d)&&s--,0===s)return c;l=c.startColumn-1}return null};for(let e=t.lineNumber;e>=1;e--){const i=this._getLineTokens(e),o=i.getCount(),s=this._buffer.getLineContent(e);let r=o-1,l=s.length,c=s.length;e===t.lineNumber&&(r=i.findTokenIndexAtOffset(t.column-1),l=t.column-1,c=t.column-1);let d=!0;for(;r>=0;r--){const t=i.getLanguageId(r)===n&&!(0,ke.Bu)(i.getStandardTokenType(r));if(t)d?l=i.getStartOffset(r):(l=i.getStartOffset(r),c=i.getEndOffset(r));else if(d&&l!==c){const t=a(e,s,l,c);if(t)return t}d=t}if(d&&l!==c){const t=a(e,s,l,c);if(t)return t}}return null}_findMatchingBracketDown(e,t,i){const n=e.languageId,o=e.forwardRegex;let s=1,r=0;const a=(t,n,a,l)=>{for(;;){if(i&&++r%100==0&&!i())return Vt.INSTANCE;const c=Le.Vr.findNextBracketInRange(o,t,n,a,l);if(!c)break;const d=n.substring(c.startColumn-1,c.endColumn-1).toLowerCase();if(e.isOpen(d)?s++:e.isClose(d)&&s--,0===s)return c;a=c.endColumn-1}return null},l=this.getLineCount();for(let e=t.lineNumber;e<=l;e++){const i=this._getLineTokens(e),o=i.getCount(),s=this._buffer.getLineContent(e);let r=0,l=0,c=0;e===t.lineNumber&&(r=i.findTokenIndexAtOffset(t.column-1),l=t.column-1,c=t.column-1);let d=!0;for(;r<o;r++){const t=i.getLanguageId(r)===n&&!(0,ke.Bu)(i.getStandardTokenType(r));if(t)d||(l=i.getStartOffset(r)),c=i.getEndOffset(r);else if(d&&l!==c){const t=a(e,s,l,c);if(t)return t}d=t}if(d&&l!==c){const t=a(e,s,l,c);if(t)return t}}return null}findPrevBracket(e){const t=this.validatePosition(e);let i=null,n=null;for(let e=t.lineNumber;e>=1;e--){const o=this._getLineTokens(e),s=o.getCount(),r=this._buffer.getLineContent(e);let a=s-1,l=r.length,c=r.length;if(e===t.lineNumber){a=o.findTokenIndexAtOffset(t.column-1),l=t.column-1,c=t.column-1;const e=o.getLanguageId(a);i!==e&&(i=e,n=this.getLanguageConfiguration(i).brackets)}let d=!0;for(;a>=0;a--){const t=o.getLanguageId(a);if(i!==t){if(n&&d&&l!==c){const t=Le.Vr.findPrevBracketInRange(n.reversedRegex,e,r,l,c);if(t)return this._toFoundBracket(n,t);d=!1}i=t,n=this.getLanguageConfiguration(i).brackets}const s=!!n&&!(0,ke.Bu)(o.getStandardTokenType(a));if(s)d?l=o.getStartOffset(a):(l=o.getStartOffset(a),c=o.getEndOffset(a));else if(n&&d&&l!==c){const t=Le.Vr.findPrevBracketInRange(n.reversedRegex,e,r,l,c);if(t)return this._toFoundBracket(n,t)}d=s}if(n&&d&&l!==c){const t=Le.Vr.findPrevBracketInRange(n.reversedRegex,e,r,l,c);if(t)return this._toFoundBracket(n,t)}}return null}findNextBracket(e){const t=this.validatePosition(e),i=this.getLineCount();let n=null,o=null;for(let e=t.lineNumber;e<=i;e++){const i=this._getLineTokens(e),s=i.getCount(),r=this._buffer.getLineContent(e);let a=0,l=0,c=0;if(e===t.lineNumber){a=i.findTokenIndexAtOffset(t.column-1),l=t.column-1,c=t.column-1;const e=i.getLanguageId(a);n!==e&&(n=e,o=this.getLanguageConfiguration(n).brackets)}let d=!0;for(;a<s;a++){const t=i.getLanguageId(a);if(n!==t){if(o&&d&&l!==c){const t=Le.Vr.findNextBracketInRange(o.forwardRegex,e,r,l,c);if(t)return this._toFoundBracket(o,t);d=!1}n=t,o=this.getLanguageConfiguration(n).brackets}const s=!!o&&!(0,ke.Bu)(i.getStandardTokenType(a));if(s)d||(l=i.getStartOffset(a)),c=i.getEndOffset(a);else if(o&&d&&l!==c){const t=Le.Vr.findNextBracketInRange(o.forwardRegex,e,r,l,c);if(t)return this._toFoundBracket(o,t)}d=s}if(o&&d&&l!==c){const t=Le.Vr.findNextBracketInRange(o.forwardRegex,e,r,l,c);if(t)return this._toFoundBracket(o,t)}}return null}findEnclosingBrackets(e,t){let i;if(void 0===t)i=null;else{const e=Date.now();i=()=>Date.now()-e<=t}const n=this.validatePosition(e),o=this.getLineCount(),s=new Map;let r=[];const a=(e,t)=>{if(!s.has(e)){let i=[];for(let e=0,n=t?t.brackets.length:0;e<n;e++)i[e]=0;s.set(e,i)}r=s.get(e)};let l=0;const c=(e,t,n,o,s)=>{for(;;){if(i&&++l%100==0&&!i())return Vt.INSTANCE;const a=Le.Vr.findNextBracketInRange(e.forwardRegex,t,n,o,s);if(!a)break;const c=n.substring(a.startColumn-1,a.endColumn-1).toLowerCase(),d=e.textIsBracket[c];if(d&&(d.isOpen(c)?r[d.index]++:d.isClose(c)&&r[d.index]--,-1===r[d.index]))return this._matchFoundBracket(a,d,!1,i);o=a.endColumn-1}return null};let d=null,h=null;for(let e=n.lineNumber;e<=o;e++){const t=this._getLineTokens(e),i=t.getCount(),o=this._buffer.getLineContent(e);let s=0,r=0,l=0;if(e===n.lineNumber){s=t.findTokenIndexAtOffset(n.column-1),r=n.column-1,l=n.column-1;const e=t.getLanguageId(s);d!==e&&(d=e,h=this.getLanguageConfiguration(d).brackets,a(d,h))}let u=!0;for(;s<i;s++){const i=t.getLanguageId(s);if(d!==i){if(h&&u&&r!==l){const t=c(h,e,o,r,l);if(t)return Wt(t);u=!1}d=i,h=this.getLanguageConfiguration(d).brackets,a(d,h)}const n=!!h&&!(0,ke.Bu)(t.getStandardTokenType(s));if(n)u||(r=t.getStartOffset(s)),l=t.getEndOffset(s);else if(h&&u&&r!==l){const t=c(h,e,o,r,l);if(t)return Wt(t)}u=n}if(h&&u&&r!==l){const t=c(h,e,o,r,l);if(t)return Wt(t)}}return null}_toFoundBracket(e,t){if(!t)return null;let i=this.getValueInRange(t);i=i.toLowerCase();let n=e.textIsBracket[i];return n?{range:t,open:n.open,close:n.close,isOpen:e.textIsOpenBracket[i]}:null}static computeIndentLevel(e,t){let i=0,n=0,o=e.length;for(;n<o;){let o=e.charCodeAt(n);if(32===o)i++;else{if(9!==o)break;i=i-i%t+t}n++}return n===o?-1:i}_computeIndentLevel(t){return e.computeIndentLevel(this._buffer.getLineContent(t+1),this._options.tabSize)}getActiveIndentGuide(e,t,i){this._assertNotDisposed();const n=this.getLineCount();if(e<1||e>n)throw new Error("Illegal value for lineNumber");const o=this.getLanguageConfiguration(this._languageId).foldingRules,s=Boolean(o&&o.offSide);let r=-2,a=-1,l=-2,c=-1;const d=e=>{if(-1!==r&&(-2===r||r>e-1)){r=-1,a=-1;for(let t=e-2;t>=0;t--){let e=this._computeIndentLevel(t);if(e>=0){r=t,a=e;break}}}if(-2===l){l=-1,c=-1;for(let t=e;t<n;t++){let e=this._computeIndentLevel(t);if(e>=0){l=t,c=e;break}}}};let h=-2,u=-1,g=-2,p=-1;const f=e=>{if(-2===h){h=-1,u=-1;for(let t=e-2;t>=0;t--){let e=this._computeIndentLevel(t);if(e>=0){h=t,u=e;break}}}if(-1!==g&&(-2===g||g<e-1)){g=-1,p=-1;for(let t=e;t<n;t++){let e=this._computeIndentLevel(t);if(e>=0){g=t,p=e;break}}}};let m=0,v=!0,_=0,b=!0,w=0,y=0;for(let o=0;v||b;o++){const r=e-o,g=e+o;o>1&&(r<1||r<t)&&(v=!1),o>1&&(g>n||g>i)&&(b=!1),o>5e4&&(v=!1,b=!1);let C=-1;if(v){const e=this._computeIndentLevel(r-1);e>=0?(l=r-1,c=e,C=Math.ceil(e/this._options.indentSize)):(d(r),C=this._getIndentLevelForWhitespaceLine(s,a,c))}let x=-1;if(b){const e=this._computeIndentLevel(g-1);e>=0?(h=g-1,u=e,x=Math.ceil(e/this._options.indentSize)):(f(g),x=this._getIndentLevelForWhitespaceLine(s,u,p))}if(0!==o){if(1===o){if(g<=n&&x>=0&&y+1===x){v=!1,m=g,_=g,w=x;continue}if(r>=1&&C>=0&&C-1===y){b=!1,m=r,_=r,w=C;continue}if(m=e,_=e,w=y,0===w)return{startLineNumber:m,endLineNumber:_,indent:w}}v&&(C>=w?m=r:v=!1),b&&(x>=w?_=g:b=!1)}else y=C}return{startLineNumber:m,endLineNumber:_,indent:w}}getLinesBracketGuides(e,t,i,n){var o,s,a,l,c;const h=[],g=this._bracketPairColorizer.getBracketPairsInRangeWithMinIndentation(new d.e(e,1,t,this.getLineMaxColumn(t)));let p;if(i&&g.length>0){const n=e<=i.lineNumber&&i.lineNumber<=t?g.filter((e=>e.range.containsPosition(i))):this._bracketPairColorizer.getBracketPairsInRange(d.e.fromPositions(i));p=null===(o=(0,pe.dF)(n,(e=>e.range.startLineNumber!==e.range.endLineNumber)))||void 0===o?void 0:o.range}const f=new pe.H9(g),m=new Array,v=new Array,_=new zt;for(let i=e;i<=t;i++){let e=new Array;v.length>0&&(e=e.concat(v),v.length=0),h.push(e);for(const e of f.takeWhile((e=>e.openingBracketRange.startLineNumber<=i))||[]){if(e.range.startLineNumber===e.range.endLineNumber)continue;const t=Math.min(this.getVisibleColumnFromPosition(e.openingBracketRange.getStartPosition()),this.getVisibleColumnFromPosition(null!==(a=null===(s=e.closingBracketRange)||void 0===s?void 0:s.getStartPosition())&&void 0!==a?a:e.range.getEndPosition()),e.minVisibleColumnIndentation+1);let i=!1;if(e.closingBracketRange){r.LC(this.getLineContent(e.closingBracketRange.startLineNumber))<e.closingBracketRange.startColumn-1&&(i=!0)}const n=e.openingBracketRange.getStartPosition(),o=null!==(c=null===(l=e.closingBracketRange)||void 0===l?void 0:l.getStartPosition())&&void 0!==c?c:e.range.getEndPosition();void 0===e.closingBracketRange?m[e.nestingLevel]=null:m[e.nestingLevel]={nestingLevel:e.nestingLevel,guideVisibleColumn:t,start:n,visibleStartColumn:this.getVisibleColumnFromPosition(n),end:o,visibleEndColumn:this.getVisibleColumnFromPosition(o),bracketPair:e,renderHorizontalEndLineAtTheBottom:i}}for(const t of m){if(!t)continue;const o=p&&t.bracketPair.range.equalsRange(p),s=_.getInlineClassNameOfLevel(t.nestingLevel)+(n.highlightActive&&o?" "+_.activeClassName:"");(o&&n.horizontalGuides!==u.s6.Disabled||n.includeInactive&&n.horizontalGuides===u.s6.Enabled)&&(t.start.lineNumber===i&&t.guideVisibleColumn<t.visibleStartColumn&&e.push(new u.UO(t.guideVisibleColumn,s,new u.vW(!1,t.start.column))),t.end.lineNumber===i+1&&t.guideVisibleColumn<t.visibleEndColumn&&v.push(new u.UO(t.guideVisibleColumn,s,new u.vW(!t.renderHorizontalEndLineAtTheBottom,t.end.column))))}let t=Number.MAX_SAFE_INTEGER;for(let o=m.length-1;o>=0;o--){const s=m[o];if(!s)continue;const r=n.highlightActive&&p&&s.bracketPair.range.equalsRange(p),a=_.getInlineClassNameOfLevel(s.nestingLevel)+(r?" "+_.activeClassName:"");(r||n.includeInactive)&&s.renderHorizontalEndLineAtTheBottom&&s.end.lineNumber===i+1&&v.push(new u.UO(s.guideVisibleColumn,a,null)),s.end.lineNumber<=i||s.start.lineNumber>=i||(s.guideVisibleColumn>=t&&!r||(t=s.guideVisibleColumn,(r||n.includeInactive)&&e.push(new u.UO(s.guideVisibleColumn,a,null))))}e.sort(((e,t)=>e.visibleColumn-t.visibleColumn))}return h}getVisibleColumnFromPosition(e){return $e.i.visibleColumnFromColumn(this.getLineContent(e.lineNumber),e.column,this._options.tabSize)+1}getLinesIndentGuides(e,t){this._assertNotDisposed();const i=this.getLineCount();if(e<1||e>i)throw new Error("Illegal value for startLineNumber");if(t<1||t>i)throw new Error("Illegal value for endLineNumber");const n=this.getLanguageConfiguration(this._languageId).foldingRules,o=Boolean(n&&n.offSide);let s=new Array(t-e+1),r=-2,a=-1,l=-2,c=-1;for(let n=e;n<=t;n++){let t=n-e;const d=this._computeIndentLevel(n-1);if(d>=0)r=n-1,a=d,s[t]=Math.ceil(d/this._options.indentSize);else{if(-2===r){r=-1,a=-1;for(let e=n-2;e>=0;e--){let t=this._computeIndentLevel(e);if(t>=0){r=e,a=t;break}}}if(-1!==l&&(-2===l||l<n-1)){l=-1,c=-1;for(let e=n;e<i;e++){let t=this._computeIndentLevel(e);if(t>=0){l=e,c=t;break}}}s[t]=this._getIndentLevelForWhitespaceLine(o,a,c)}}return s}_getIndentLevelForWhitespaceLine(e,t,i){return-1===t||-1===i?0:t<i?1+Math.floor(t/this._options.indentSize):t===i||e?Math.ceil(i/this._options.indentSize):1+Math.floor(i/this._options.indentSize)}normalizePosition(e,t){return e}getLineIndentColumn(e){return function(e){let t=0;for(const i of e){if(" "!==i&&"\t"!==i)break;t++}return t}(this.getLineContent(e))+1}};Ht.MODEL_SYNC_LIMIT=52428800,Ht.LARGE_FILE_SIZE_THRESHOLD=20971520,Ht.LARGE_FILE_LINE_COUNT_THRESHOLD=3e5,Ht.DEFAULT_CREATION_OPTIONS={isForSimpleWidget:!1,tabSize:l.DB.tabSize,indentSize:l.DB.indentSize,insertSpaces:l.DB.insertSpaces,detectIndentation:!1,defaultEOL:1,trimAutoWhitespace:l.DB.trimAutoWhitespace,largeFileOptimizations:l.DB.largeFileOptimizations,bracketPairColorizationOptions:l.DB.bracketPairColorizationOptions},Ht=Mt([At(4,De.tJ),At(5,Tt.h),At(6,Se.c_)],Ht);class zt{constructor(){this.activeClassName="indent-active"}getInlineClassNameOfLevel(e){return"bracket-indent-guide lvl-"+e%30}}function jt(e){return!(!e.options.overviewRuler||!e.options.overviewRuler.color)}function Ut(e){return!!e.options.after||!!e.options.before}class $t{constructor(){this._decorationsTree0=new N,this._decorationsTree1=new N,this._injectedTextDecorationsTree=new N}ensureAllNodesHaveRanges(e){this.getAll(e,0,!1,!1)}_ensureNodesHaveRanges(e,t){for(const i of t)null===i.range&&(i.range=e.getRangeAt(i.cachedAbsoluteStart,i.cachedAbsoluteEnd));return t}getAllInInterval(e,t,i,n,o){const s=e.getVersionId(),r=this._intervalSearch(t,i,n,o,s);return this._ensureNodesHaveRanges(e,r)}_intervalSearch(e,t,i,n,o){const s=this._decorationsTree0.intervalSearch(e,t,i,n,o),r=this._decorationsTree1.intervalSearch(e,t,i,n,o),a=this._injectedTextDecorationsTree.intervalSearch(e,t,i,n,o);return s.concat(r).concat(a)}getInjectedTextInInterval(e,t,i,n){const o=e.getVersionId(),s=this._injectedTextDecorationsTree.intervalSearch(t,i,n,!1,o);return this._ensureNodesHaveRanges(e,s).filter((e=>e.options.showIfCollapsed||!e.range.isEmpty()))}getAllInjectedText(e,t){const i=e.getVersionId(),n=this._injectedTextDecorationsTree.search(t,!1,i);return this._ensureNodesHaveRanges(e,n).filter((e=>e.options.showIfCollapsed||!e.range.isEmpty()))}getAll(e,t,i,n){const o=e.getVersionId(),s=this._search(t,i,n,o);return this._ensureNodesHaveRanges(e,s)}_search(e,t,i,n){if(i)return this._decorationsTree1.search(e,t,n);{const i=this._decorationsTree0.search(e,t,n),o=this._decorationsTree1.search(e,t,n),s=this._injectedTextDecorationsTree.search(e,t,n);return i.concat(o).concat(s)}}collectNodesFromOwner(e){const t=this._decorationsTree0.collectNodesFromOwner(e),i=this._decorationsTree1.collectNodesFromOwner(e),n=this._injectedTextDecorationsTree.collectNodesFromOwner(e);return t.concat(i).concat(n)}collectNodesPostOrder(){const e=this._decorationsTree0.collectNodesPostOrder(),t=this._decorationsTree1.collectNodesPostOrder(),i=this._injectedTextDecorationsTree.collectNodesPostOrder();return e.concat(t).concat(i)}insert(e){Ut(e)?this._injectedTextDecorationsTree.insert(e):jt(e)?this._decorationsTree1.insert(e):this._decorationsTree0.insert(e)}delete(e){Ut(e)?this._injectedTextDecorationsTree.delete(e):jt(e)?this._decorationsTree1.delete(e):this._decorationsTree0.delete(e)}getNodeRange(e,t){const i=e.getVersionId();return t.cachedVersionId!==i&&this._resolveNode(t,i),null===t.range&&(t.range=e.getRangeAt(t.cachedAbsoluteStart,t.cachedAbsoluteEnd)),t.range}_resolveNode(e,t){Ut(e)?this._injectedTextDecorationsTree.resolveNode(e,t):jt(e)?this._decorationsTree1.resolveNode(e,t):this._decorationsTree0.resolveNode(e,t)}acceptReplace(e,t,i,n){this._decorationsTree0.acceptReplace(e,t,i,n),this._decorationsTree1.acceptReplace(e,t,i,n),this._injectedTextDecorationsTree.acceptReplace(e,t,i,n)}}function Kt(e){return e.replace(/[^a-z0-9\-_]/gi," ")}class qt{constructor(e){this.color=e.color||"",this.darkColor=e.darkColor||""}}class Zt extends qt{constructor(e){super(e),this._resolvedColor=null,this.position="number"==typeof e.position?e.position:u.sh.Center}getColor(e){return this._resolvedColor||("light"!==e.type&&this.darkColor?this._resolvedColor=this._resolveColor(this.darkColor,e):this._resolvedColor=this._resolveColor(this.color,e)),this._resolvedColor}invalidateCachedColor(){this._resolvedColor=null}_resolveColor(e,t){if("string"==typeof e)return e;let i=e?t.getColor(e.id):null;return i?i.toString():""}}class Gt extends qt{constructor(e){super(e),this.position=e.position}getColor(e){return this._resolvedColor||("light"!==e.type&&this.darkColor?this._resolvedColor=this._resolveColor(this.darkColor,e):this._resolvedColor=this._resolveColor(this.color,e)),this._resolvedColor}invalidateCachedColor(){this._resolvedColor=void 0}_resolveColor(e,t){return"string"==typeof e?Ne.Il.fromHex(e):t.getColor(e.id)}}class Yt{constructor(e){this.content=e.content||"",this.inlineClassName=e.inlineClassName||null,this.inlineClassNameAffectsLetterSpacing=e.inlineClassNameAffectsLetterSpacing||!1}static from(e){return e instanceof Yt?e:new Yt(e)}}class Qt{constructor(e){this.description=e.description,this.stickiness=e.stickiness||0,this.zIndex=e.zIndex||0,this.className=e.className?Kt(e.className):null,this.hoverMessage=e.hoverMessage||null,this.glyphMarginHoverMessage=e.glyphMarginHoverMessage||null,this.isWholeLine=e.isWholeLine||!1,this.showIfCollapsed=e.showIfCollapsed||!1,this.collapseOnReplaceEdit=e.collapseOnReplaceEdit||!1,this.overviewRuler=e.overviewRuler?new Zt(e.overviewRuler):null,this.minimap=e.minimap?new Gt(e.minimap):null,this.glyphMarginClassName=e.glyphMarginClassName?Kt(e.glyphMarginClassName):null,this.linesDecorationsClassName=e.linesDecorationsClassName?Kt(e.linesDecorationsClassName):null,this.firstLineDecorationClassName=e.firstLineDecorationClassName?Kt(e.firstLineDecorationClassName):null,this.marginClassName=e.marginClassName?Kt(e.marginClassName):null,this.inlineClassName=e.inlineClassName?Kt(e.inlineClassName):null,this.inlineClassNameAffectsLetterSpacing=e.inlineClassNameAffectsLetterSpacing||!1,this.beforeContentClassName=e.beforeContentClassName?Kt(e.beforeContentClassName):null,this.afterContentClassName=e.afterContentClassName?Kt(e.afterContentClassName):null,this.after=e.after?Yt.from(e.after):null,this.before=e.before?Yt.from(e.before):null}static register(e){return new Qt(e)}static createDynamic(e){return new Qt(e)}}Qt.EMPTY=Qt.register({description:"empty"});const Xt=[Qt.register({description:"tracked-range-always-grows-when-typing-at-edges",stickiness:0}),Qt.register({description:"tracked-range-never-grows-when-typing-at-edges",stickiness:1}),Qt.register({description:"tracked-range-grows-only-when-typing-before",stickiness:2}),Qt.register({description:"tracked-range-grows-only-when-typing-after",stickiness:3})];function Jt(e){return e instanceof Qt?e:Qt.createDynamic(e)}class ei extends s.JT{constructor(e){super(),this.handleBeforeFire=e,this._actual=this._register(new o.Q5),this.event=this._actual.event,this._affectedInjectedTextLines=null,this._deferredCnt=0,this._shouldFire=!1,this._affectsMinimap=!1,this._affectsOverviewRuler=!1}beginDeferredEmit(){this._deferredCnt++}endDeferredEmit(){var e;if(this._deferredCnt--,0===this._deferredCnt){if(this._shouldFire){this.handleBeforeFire(this._affectedInjectedTextLines);const e={affectsMinimap:this._affectsMinimap,affectsOverviewRuler:this._affectsOverviewRuler};this._shouldFire=!1,this._affectsMinimap=!1,this._affectsOverviewRuler=!1,this._actual.fire(e)}null===(e=this._affectedInjectedTextLines)||void 0===e||e.clear(),this._affectedInjectedTextLines=null}}recordLineAffectedByInjectedText(e){this._affectedInjectedTextLines||(this._affectedInjectedTextLines=new Set),this._affectedInjectedTextLines.add(e)}checkAffectedAndFire(e){this._affectsMinimap||(this._affectsMinimap=!(!e.minimap||!e.minimap.position)),this._affectsOverviewRuler||(this._affectsOverviewRuler=!(!e.overviewRuler||!e.overviewRuler.color)),this._shouldFire=!0}fire(){this._affectsMinimap=!0,this._affectsOverviewRuler=!0,this._shouldFire=!0}}class ti extends s.JT{constructor(){super(),this._fastEmitter=this._register(new o.Q5),this.fastEvent=this._fastEmitter.event,this._slowEmitter=this._register(new o.Q5),this.slowEvent=this._slowEmitter.event,this._deferredCnt=0,this._deferredEvent=null}beginDeferredEmit(){this._deferredCnt++}endDeferredEmit(e=null){if(this._deferredCnt--,0===this._deferredCnt&&null!==this._deferredEvent){this._deferredEvent.rawContentChangedEvent.resultingSelection=e;const t=this._deferredEvent;this._deferredEvent=null,this._fastEmitter.fire(t),this._slowEmitter.fire(t)}}fire(e){this._deferredCnt>0?this._deferredEvent?this._deferredEvent=this._deferredEvent.merge(e):this._deferredEvent=e:(this._fastEmitter.fire(e),this._slowEmitter.fire(e))}}},83256:(e,t,i)=>{"use strict";i.d(t,{CZ:()=>l,D8:()=>d,Jx:()=>n,Tx:()=>a,dQ:()=>c,fV:()=>h,gk:()=>o,lN:()=>r,rU:()=>s});class n{constructor(){this.changeType=1}}class o{constructor(e,t,i,n,o){this.ownerId=e,this.lineNumber=t,this.column=i,this.options=n,this.order=o}static applyInjectedText(e,t){if(!t||0===t.length)return e;let i="",n=0;for(const o of t)i+=e.substring(n,o.column-1),n=o.column-1,i+=o.options.content;return i+=e.substring(n),i}static fromDecorations(e){const t=[];for(const i of e)i.options.before&&i.options.before.content.length>0&&t.push(new o(i.ownerId,i.range.startLineNumber,i.range.startColumn,i.options.before,0)),i.options.after&&i.options.after.content.length>0&&t.push(new o(i.ownerId,i.range.endLineNumber,i.range.endColumn,i.options.after,1));return t.sort(((e,t)=>e.lineNumber===t.lineNumber?e.column===t.column?e.order-t.order:e.column-t.column:e.lineNumber-t.lineNumber)),t}}class s{constructor(e,t,i){this.changeType=2,this.lineNumber=e,this.detail=t,this.injectedText=i}}class r{constructor(e,t){this.changeType=3,this.fromLineNumber=e,this.toLineNumber=t}}class a{constructor(e,t,i,n){this.changeType=4,this.injectedTexts=n,this.fromLineNumber=e,this.toLineNumber=t,this.detail=i}}class l{constructor(){this.changeType=5}}class c{constructor(e,t,i,n){this.changes=e,this.versionId=t,this.isUndoing=i,this.isRedoing=n,this.resultingSelection=null}containsEvent(e){for(let t=0,i=this.changes.length;t<i;t++){if(this.changes[t].changeType===e)return!0}return!1}static merge(e,t){const i=[].concat(e.changes).concat(t.changes),n=t.versionId,o=e.isUndoing||t.isUndoing,s=e.isRedoing||t.isRedoing;return new c(i,n,o,s)}}class d{constructor(e){this.changes=e}}class h{constructor(e,t){this.rawContentChangedEvent=e,this.contentChangedEvent=t}merge(e){const t=c.merge(this.rawContentChangedEvent,e.rawContentChangedEvent),i=h._mergeChangeEvents(this.contentChangedEvent,e.contentChangedEvent);return new h(t,i)}static _mergeChangeEvents(e,t){return{changes:[].concat(e.changes).concat(t.changes),eol:t.eol,versionId:t.versionId,isUndoing:e.isUndoing||t.isUndoing,isRedoing:e.isRedoing||t.isRedoing,isFlush:e.isFlush||t.isFlush}}}},77277:(e,t,i)=>{"use strict";i.d(t,{bc:()=>l,cM:()=>g,iE:()=>d,pM:()=>u,sz:()=>p});var n=i(97295),o=i(59410),s=i(50187),r=i(24314),a=i(84973);class l{constructor(e,t,i,n){this.searchString=e,this.isRegex=t,this.matchCase=i,this.wordSeparators=n}parseSearchRequest(){if(""===this.searchString)return null;let e;e=this.isRegex?function(e){if(!e||0===e.length)return!1;for(let t=0,i=e.length;t<i;t++){if(92===e.charCodeAt(t)){if(t++,t>=i)break;const n=e.charCodeAt(t);if(110===n||114===n||87===n)return!0}}return!1}(this.searchString):this.searchString.indexOf("\n")>=0;let t=null;try{t=n.GF(this.searchString,this.isRegex,{matchCase:this.matchCase,wholeWord:!1,multiline:e,global:!0,unicode:!0})}catch(e){return null}if(!t)return null;let i=!this.isRegex&&!e;return i&&this.searchString.toLowerCase()!==this.searchString.toUpperCase()&&(i=this.matchCase),new c(t,this.wordSeparators?(0,o.u)(this.wordSeparators):null,i?this.searchString:null)}}class c{constructor(e,t,i){this.regex=e,this.wordSeparators=t,this.simpleSearch=i}}function d(e,t,i){if(!i)return new a.tk(e,null);let n=[];for(let e=0,i=t.length;e<i;e++)n[e]=t[e];return new a.tk(e,n)}class h{constructor(e){let t=[],i=0;for(let n=0,o=e.length;n<o;n++)10===e.charCodeAt(n)&&(t[i++]=n);this._lineFeedsOffsets=t}findLineFeedCountBeforeOffset(e){const t=this._lineFeedsOffsets;let i=0,n=t.length-1;if(-1===n)return 0;if(e<=t[0])return 0;for(;i<n;){const o=i+((n-i)/2>>0);t[o]>=e?n=o-1:t[o+1]>=e?(i=o,n=o):i=o+1}return i+1}}class u{static findMatches(e,t,i,n,o){const s=t.parseSearchRequest();return s?s.regex.multiline?this._doFindMatchesMultiline(e,i,new p(s.wordSeparators,s.regex),n,o):this._doFindMatchesLineByLine(e,i,s,n,o):[]}static _getMultilineMatchRange(e,t,i,n,o,s){let a,l,c=0;if(n?(c=n.findLineFeedCountBeforeOffset(o),a=t+o+c):a=t+o,n){let e=n.findLineFeedCountBeforeOffset(o+s.length)-c;l=a+s.length+e}else l=a+s.length;const d=e.getPositionAt(a),h=e.getPositionAt(l);return new r.e(d.lineNumber,d.column,h.lineNumber,h.column)}static _doFindMatchesMultiline(e,t,i,n,o){const s=e.getOffsetAt(t.getStartPosition()),r=e.getValueInRange(t,1),a="\r\n"===e.getEOL()?new h(r):null,l=[];let c,u=0;for(i.reset(0);c=i.next(r);)if(l[u++]=d(this._getMultilineMatchRange(e,s,r,a,c.index,c[0]),c,n),u>=o)return l;return l}static _doFindMatchesLineByLine(e,t,i,n,o){const s=[];let r=0;if(t.startLineNumber===t.endLineNumber){const a=e.getLineContent(t.startLineNumber).substring(t.startColumn-1,t.endColumn-1);return r=this._findMatchesInLine(i,a,t.startLineNumber,t.startColumn-1,r,s,n,o),s}const a=e.getLineContent(t.startLineNumber).substring(t.startColumn-1);r=this._findMatchesInLine(i,a,t.startLineNumber,t.startColumn-1,r,s,n,o);for(let a=t.startLineNumber+1;a<t.endLineNumber&&r<o;a++)r=this._findMatchesInLine(i,e.getLineContent(a),a,0,r,s,n,o);if(r<o){const a=e.getLineContent(t.endLineNumber).substring(0,t.endColumn-1);r=this._findMatchesInLine(i,a,t.endLineNumber,0,r,s,n,o)}return s}static _findMatchesInLine(e,t,i,n,o,s,l,c){const h=e.wordSeparators;if(!l&&e.simpleSearch){const l=e.simpleSearch,d=l.length,u=t.length;let p=-d;for(;-1!==(p=t.indexOf(l,p+d));)if((!h||g(h,t,u,p,d))&&(s[o++]=new a.tk(new r.e(i,p+1+n,i,p+1+d+n),null),o>=c))return o;return o}const u=new p(e.wordSeparators,e.regex);let f;u.reset(0);do{if(f=u.next(t),f&&(s[o++]=d(new r.e(i,f.index+1+n,i,f.index+1+f[0].length+n),f,l),o>=c))return o}while(f);return o}static findNextMatch(e,t,i,n){const o=t.parseSearchRequest();if(!o)return null;const s=new p(o.wordSeparators,o.regex);return o.regex.multiline?this._doFindNextMatchMultiline(e,i,s,n):this._doFindNextMatchLineByLine(e,i,s,n)}static _doFindNextMatchMultiline(e,t,i,n){const o=new s.L(t.lineNumber,1),a=e.getOffsetAt(o),l=e.getLineCount(),c=e.getValueInRange(new r.e(o.lineNumber,o.column,l,e.getLineMaxColumn(l)),1),u="\r\n"===e.getEOL()?new h(c):null;i.reset(t.column-1);let g=i.next(c);return g?d(this._getMultilineMatchRange(e,a,c,u,g.index,g[0]),g,n):1!==t.lineNumber||1!==t.column?this._doFindNextMatchMultiline(e,new s.L(1,1),i,n):null}static _doFindNextMatchLineByLine(e,t,i,n){const o=e.getLineCount(),s=t.lineNumber,r=e.getLineContent(s),a=this._findFirstMatchInLine(i,r,s,t.column,n);if(a)return a;for(let t=1;t<=o;t++){const r=(s+t-1)%o,a=e.getLineContent(r+1),l=this._findFirstMatchInLine(i,a,r+1,1,n);if(l)return l}return null}static _findFirstMatchInLine(e,t,i,n,o){e.reset(n-1);const s=e.next(t);return s?d(new r.e(i,s.index+1,i,s.index+1+s[0].length),s,o):null}static findPreviousMatch(e,t,i,n){const o=t.parseSearchRequest();if(!o)return null;const s=new p(o.wordSeparators,o.regex);return o.regex.multiline?this._doFindPreviousMatchMultiline(e,i,s,n):this._doFindPreviousMatchLineByLine(e,i,s,n)}static _doFindPreviousMatchMultiline(e,t,i,n){const o=this._doFindMatchesMultiline(e,new r.e(1,1,t.lineNumber,t.column),i,n,9990);if(o.length>0)return o[o.length-1];const a=e.getLineCount();return t.lineNumber!==a||t.column!==e.getLineMaxColumn(a)?this._doFindPreviousMatchMultiline(e,new s.L(a,e.getLineMaxColumn(a)),i,n):null}static _doFindPreviousMatchLineByLine(e,t,i,n){const o=e.getLineCount(),s=t.lineNumber,r=e.getLineContent(s).substring(0,t.column-1),a=this._findLastMatchInLine(i,r,s,n);if(a)return a;for(let t=1;t<=o;t++){const r=(o+s-t-1)%o,a=e.getLineContent(r+1),l=this._findLastMatchInLine(i,a,r+1,n);if(l)return l}return null}static _findLastMatchInLine(e,t,i,n){let o,s=null;for(e.reset(0);o=e.next(t);)s=d(new r.e(i,o.index+1,i,o.index+1+o[0].length),o,n);return s}}function g(e,t,i,n,o){return function(e,t,i,n,o){if(0===n)return!0;const s=t.charCodeAt(n-1);if(0!==e.get(s))return!0;if(13===s||10===s)return!0;if(o>0){const i=t.charCodeAt(n);if(0!==e.get(i))return!0}return!1}(e,t,0,n,o)&&function(e,t,i,n,o){if(n+o===i)return!0;const s=t.charCodeAt(n+o);if(0!==e.get(s))return!0;if(13===s||10===s)return!0;if(o>0){const i=t.charCodeAt(n+o-1);if(0!==e.get(i))return!0}return!1}(e,t,i,n,o)}class p{constructor(e,t){this._wordSeparators=e,this._searchRegex=t,this._prevMatchStartIndex=-1,this._prevMatchLength=0}reset(e){this._searchRegex.lastIndex=e,this._prevMatchStartIndex=-1,this._prevMatchLength=0}next(e){const t=e.length;let i;do{if(this._prevMatchStartIndex+this._prevMatchLength===t)return null;if(i=this._searchRegex.exec(e),!i)return null;const o=i.index,s=i[0].length;if(o===this._prevMatchStartIndex&&s===this._prevMatchLength){if(0===s){n.ZH(e,t,this._searchRegex.lastIndex)>65535?this._searchRegex.lastIndex+=2:this._searchRegex.lastIndex+=1;continue}return null}if(this._prevMatchStartIndex=o,this._prevMatchLength=s,!this._wordSeparators||g(this._wordSeparators,e,t,o,s))return i}while(i);return null}}},58409:(e,t,i)=>{"use strict";i.d(t,{DA:()=>h,OU:()=>u,QZ:()=>l,Rl:()=>_,Wz:()=>p,cx:()=>v});var n=i(9488),o=i(78411),s=i(50187),r=i(24314),a=i(44101);function l(e){let t=0,i=0,n=0,o=0;for(let s=0,r=e.length;s<r;s++){const a=e.charCodeAt(s);13===a?(0===t&&(i=s),t++,s+1<r&&10===e.charCodeAt(s+1)?(o|=2,s++):o|=3,n=s+1):10===a&&(o|=1,0===t&&(i=s),t++,n=s+1)}return 0===t&&(i=e.length),[t,i,e.length-n,o]}function c(e){return(16384|e<<0|2<<23)>>>0}const d=new Uint32Array(0).buffer;class h{constructor(){this.tokens=[]}add(e,t){if(this.tokens.length>0){const i=this.tokens[this.tokens.length-1];if(i.startLineNumber+i.tokens.length-1+1===e)return void i.tokens.push(t)}this.tokens.push(new f(e,[t]))}}class u{constructor(e){this._tokens=e,this._tokenCount=e.length/4}toString(e){let t=[];for(let i=0;i<this._tokenCount;i++)t.push(`(${this._getDeltaLine(i)+e},${this._getStartCharacter(i)}-${this._getEndCharacter(i)})`);return`[${t.join(",")}]`}getMaxDeltaLine(){const e=this._getTokenCount();return 0===e?-1:this._getDeltaLine(e-1)}getRange(){const e=this._getTokenCount();if(0===e)return null;const t=this._getStartCharacter(0),i=this._getDeltaLine(e-1),n=this._getEndCharacter(e-1);return new r.e(0,t+1,i,n+1)}_getTokenCount(){return this._tokenCount}_getDeltaLine(e){return this._tokens[4*e]}_getStartCharacter(e){return this._tokens[4*e+1]}_getEndCharacter(e){return this._tokens[4*e+2]}isEmpty(){return 0===this._getTokenCount()}getLineTokens(e){let t=0,i=this._getTokenCount()-1;for(;t<i;){const n=t+Math.floor((i-t)/2),o=this._getDeltaLine(n);if(o<e)t=n+1;else{if(!(o>e)){let o=n;for(;o>t&&this._getDeltaLine(o-1)===e;)o--;let s=n;for(;s<i&&this._getDeltaLine(s+1)===e;)s++;return new g(this._tokens.subarray(4*o,4*s+4))}i=n-1}}return this._getDeltaLine(t)===e?new g(this._tokens.subarray(4*t,4*t+4)):null}clear(){this._tokenCount=0}removeTokens(e,t,i,n){const o=this._tokens,s=this._tokenCount;let r=0,a=!1,l=0;for(let c=0;c<s;c++){const s=4*c,d=o[s],h=o[s+1],u=o[s+2],g=o[s+3];if((d>e||d===e&&u>=t)&&(d<i||d===i&&h<=n))a=!0;else{if(0===r&&(l=d),a){const e=4*r;o[e]=d-l,o[e+1]=h,o[e+2]=u,o[e+3]=g}r++}}return this._tokenCount=r,l}split(e,t,i,n){const o=this._tokens,s=this._tokenCount;let r=[],a=[],l=r,c=0,d=0;for(let r=0;r<s;r++){const s=4*r,h=o[s],u=o[s+1],g=o[s+2],p=o[s+3];if(h>e||h===e&&g>=t){if(h<i||h===i&&u<=n)continue;l!==a&&(l=a,c=0,d=h)}l[c++]=h-d,l[c++]=u,l[c++]=g,l[c++]=p}return[new u(new Uint32Array(r)),new u(new Uint32Array(a)),d]}acceptDeleteRange(e,t,i,n,o){const s=this._tokens,r=this._tokenCount,a=n-t;let l=0,c=!1;for(let d=0;d<r;d++){const h=4*d;let u=s[h],g=s[h+1],p=s[h+2];const f=s[h+3];if(u<t||u===t&&p<=i){l++;continue}if(u===t&&g<i)u===n&&p>o?p-=o-i:p=i;else if(u===t&&g===i){if(!(u===n&&p>o)){c=!0;continue}p-=o-i}else if(u<n||u===n&&g<o){if(!(u===n&&p>o)){c=!0;continue}u===t?(g=i,p=g+(p-o)):(g=0,p=g+(p-o))}else if(u>n){if(0===a&&!c){l=r;break}u-=a}else{if(!(u===n&&g>=o))throw new Error("Not possible!");e&&0===u&&(g+=e,p+=e),u-=a,g-=o-i,p-=o-i}const m=4*l;s[m]=u,s[m+1]=g,s[m+2]=p,s[m+3]=f,l++}this._tokenCount=l}acceptInsertText(e,t,i,n,o,s){const r=0===i&&1===n&&(s>=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122),a=this._tokens,l=this._tokenCount;for(let s=0;s<l;s++){const l=4*s;let c=a[l],d=a[l+1],h=a[l+2];if(!(c<e||c===e&&h<t)){if(c===e&&h===t){if(!r)continue;h+=1}else if(c===e&&d<t&&t<h)0===i?h+=n:h=t;else{if(c===e&&d===t&&r)continue;if(c===e)if(c+=i,0===i)d+=n,h+=n;else{const e=h-d;d=o+(d-t),h=d+e}else c+=i}a[l]=c,a[l+1]=d,a[l+2]=h}}}}class g{constructor(e){this._tokens=e}getCount(){return this._tokens.length/4}getStartCharacter(e){return this._tokens[4*e+1]}getEndCharacter(e){return this._tokens[4*e+2]}getMetadata(e){return this._tokens[4*e+3]}}class p{constructor(e,t){this.startLineNumber=e,this.tokens=t,this.endLineNumber=this.startLineNumber+this.tokens.getMaxDeltaLine()}toString(){return this.tokens.toString(this.startLineNumber)}_updateEndLineNumber(){this.endLineNumber=this.startLineNumber+this.tokens.getMaxDeltaLine()}isEmpty(){return this.tokens.isEmpty()}getLineTokens(e){return this.startLineNumber<=e&&e<=this.endLineNumber?this.tokens.getLineTokens(e-this.startLineNumber):null}getRange(){const e=this.tokens.getRange();return e?new r.e(this.startLineNumber+e.startLineNumber,e.startColumn,this.startLineNumber+e.endLineNumber,e.endColumn):e}removeTokens(e){const t=e.startLineNumber-this.startLineNumber,i=e.endLineNumber-this.startLineNumber;this.startLineNumber+=this.tokens.removeTokens(t,e.startColumn-1,i,e.endColumn-1),this._updateEndLineNumber()}split(e){const t=e.startLineNumber-this.startLineNumber,i=e.endLineNumber-this.startLineNumber,[n,o,s]=this.tokens.split(t,e.startColumn-1,i,e.endColumn-1);return[new p(this.startLineNumber,n),new p(this.startLineNumber+s,o)]}applyEdit(e,t){const[i,n,o]=l(t);this.acceptEdit(e,i,n,o,t.length>0?t.charCodeAt(0):0)}acceptEdit(e,t,i,n,o){this._acceptDeleteRange(e),this._acceptInsertText(new s.L(e.startLineNumber,e.startColumn),t,i,n,o),this._updateEndLineNumber()}_acceptDeleteRange(e){if(e.startLineNumber===e.endLineNumber&&e.startColumn===e.endColumn)return;const t=e.startLineNumber-this.startLineNumber,i=e.endLineNumber-this.startLineNumber;if(i<0){const e=i-t;return void(this.startLineNumber-=e)}const n=this.tokens.getMaxDeltaLine();if(!(t>=n+1)){if(t<0&&i>=n+1)return this.startLineNumber=0,void this.tokens.clear();if(t<0){const n=-t;this.startLineNumber-=n,this.tokens.acceptDeleteRange(e.startColumn-1,0,0,i,e.endColumn-1)}else this.tokens.acceptDeleteRange(0,t,e.startColumn-1,i,e.endColumn-1)}}_acceptInsertText(e,t,i,n,o){if(0===t&&0===i)return;const s=e.lineNumber-this.startLineNumber;if(s<0)return void(this.startLineNumber+=t);s>=this.tokens.getMaxDeltaLine()+1||this.tokens.acceptInsertText(s,e.column-1,t,i,n,o)}}class f{constructor(e,t){this.startLineNumber=e,this.tokens=t}}function m(e){return e instanceof Uint32Array?e:new Uint32Array(e)}class v{constructor(e){this._pieces=[],this._isComplete=!1,this._languageIdCodec=e}flush(){this._pieces=[],this._isComplete=!1}isEmpty(){return 0===this._pieces.length}set(e,t){this._pieces=e||[],this._isComplete=t}setPartial(e,t){let i=e;if(t.length>0){const n=t[0].getRange(),o=t[t.length-1].getRange();if(!n||!o)return e;i=e.plusRange(n).plusRange(o)}let o=null;for(let e=0,t=this._pieces.length;e<t;e++){const n=this._pieces[e];if(n.endLineNumber<i.startLineNumber)continue;if(n.startLineNumber>i.endLineNumber){o=o||{index:e};break}if(n.removeTokens(i),n.isEmpty()){this._pieces.splice(e,1),e--,t--;continue}if(n.endLineNumber<i.startLineNumber)continue;if(n.startLineNumber>i.endLineNumber){o=o||{index:e};continue}const[s,r]=n.split(i);s.isEmpty()?o=o||{index:e}:r.isEmpty()||(this._pieces.splice(e,1,s,r),e++,t++,o=o||{index:e})}return o=o||{index:this._pieces.length},t.length>0&&(this._pieces=n.Zv(this._pieces,o.index,t)),i}isComplete(){return this._isComplete}addSemanticTokens(e,t){const i=this._pieces;if(0===i.length)return t;const n=i[v._findFirstPieceWithLine(i,e)].getLineTokens(e);if(!n)return t;const s=t.getCount(),r=n.getCount();let a=0,l=[],c=0,d=0;const h=(e,t)=>{e!==d&&(d=e,l[c++]=e,l[c++]=t)};for(let e=0;e<r;e++){const i=n.getStartCharacter(e),o=n.getEndCharacter(e),r=n.getMetadata(e),l=((1&r?2048:0)|(2&r?4096:0)|(4&r?8192:0)|(8&r?8372224:0)|(16&r?4286578688:0))>>>0,c=~l>>>0;for(;a<s&&t.getEndOffset(a)<=i;)h(t.getEndOffset(a),t.getMetadata(a)),a++;for(a<s&&t.getStartOffset(a)<i&&h(i,t.getMetadata(a));a<s&&t.getEndOffset(a)<o;)h(t.getEndOffset(a),t.getMetadata(a)&c|r&l),a++;if(a<s)h(o,t.getMetadata(a)&c|r&l),t.getEndOffset(a)===o&&a++;else{const e=Math.min(Math.max(0,a-1),s-1);h(o,t.getMetadata(e)&c|r&l)}}for(;a<s;)h(t.getEndOffset(a),t.getMetadata(a)),a++;return new o.A(new Uint32Array(l),t.getLineContent(),this._languageIdCodec)}static _findFirstPieceWithLine(e,t){let i=0,n=e.length-1;for(;i<n;){let o=i+Math.floor((n-i)/2);if(e[o].endLineNumber<t)i=o+1;else{if(!(e[o].startLineNumber>t)){for(;o>i&&e[o-1].startLineNumber<=t&&t<=e[o-1].endLineNumber;)o--;return o}n=o-1}}return i}acceptEdit(e,t,i,n,o){for(const s of this._pieces)s.acceptEdit(e,t,i,n,o)}}class _{constructor(e){this._lineTokens=[],this._len=0,this._languageIdCodec=e}flush(){this._lineTokens=[],this._len=0}getTokens(e,t,i){let n=null;if(t<this._len&&(n=this._lineTokens[t]),null!==n&&n!==d)return new o.A(m(n),i,this._languageIdCodec);const s=new Uint32Array(2);return s[0]=i.length,s[1]=c(this._languageIdCodec.encodeLanguageId(e)),new o.A(s,i,this._languageIdCodec)}static _massageTokens(e,t,i){const n=i?m(i):null;if(0===t){let t=!1;if(n&&n.length>1&&(t=a.NX.getLanguageId(n[1])!==e),!t)return d}if(!n||0===n.length){const i=new Uint32Array(2);return i[0]=t,i[1]=c(e),i.buffer}return n[n.length-2]=t,0===n.byteOffset&&n.byteLength===n.buffer.byteLength?n.buffer:n}_ensureLine(e){for(;e>=this._len;)this._lineTokens[this._len]=null,this._len++}_deleteLines(e,t){0!==t&&(e+t>this._len&&(t=this._len-e),this._lineTokens.splice(e,t),this._len-=t)}_insertLines(e,t){if(0===t)return;let i=[];for(let e=0;e<t;e++)i[e]=null;this._lineTokens=n.Zv(this._lineTokens,e,i),this._len+=t}setTokens(e,t,i,n,o){const s=_._massageTokens(this._languageIdCodec.encodeLanguageId(e),i,n);this._ensureLine(t);const r=this._lineTokens[t];return this._lineTokens[t]=s,!!o&&!_._equals(r,s)}static _equals(e,t){if(!e||!t)return!e&&!t;const i=m(e),n=m(t);if(i.length!==n.length)return!1;for(let e=0,t=i.length;e<t;e++)if(i[e]!==n[e])return!1;return!0}acceptEdit(e,t,i){this._acceptDeleteRange(e),this._acceptInsertText(new s.L(e.startLineNumber,e.startColumn),t,i)}_acceptDeleteRange(e){const t=e.startLineNumber-1;if(t>=this._len)return;if(e.startLineNumber===e.endLineNumber){if(e.startColumn===e.endColumn)return;return void(this._lineTokens[t]=_._delete(this._lineTokens[t],e.startColumn-1,e.endColumn-1))}this._lineTokens[t]=_._deleteEnding(this._lineTokens[t],e.startColumn-1);const i=e.endLineNumber-1;let n=null;i<this._len&&(n=_._deleteBeginning(this._lineTokens[i],e.endColumn-1)),this._lineTokens[t]=_._append(this._lineTokens[t],n),this._deleteLines(e.startLineNumber,e.endLineNumber-e.startLineNumber)}_acceptInsertText(e,t,i){if(0===t&&0===i)return;const n=e.lineNumber-1;n>=this._len||(0!==t?(this._lineTokens[n]=_._deleteEnding(this._lineTokens[n],e.column-1),this._lineTokens[n]=_._insert(this._lineTokens[n],e.column-1,i),this._insertLines(e.lineNumber,t)):this._lineTokens[n]=_._insert(this._lineTokens[n],e.column-1,i))}static _deleteBeginning(e,t){return null===e||e===d?e:_._delete(e,0,t)}static _deleteEnding(e,t){if(null===e||e===d)return e;const i=m(e),n=i[i.length-2];return _._delete(e,t,n)}static _delete(e,t,i){if(null===e||e===d||t===i)return e;const n=m(e),s=n.length>>>1;if(0===t&&n[n.length-2]===i)return d;const r=o.A.findIndexInTokensArray(n,t),a=r>0?n[r-1<<1]:0;if(i<n[r<<1]){const o=i-t;for(let e=r;e<s;e++)n[e<<1]-=o;return e}let l,c;a!==t?(n[r<<1]=t,l=r+1<<1,c=t):(l=r<<1,c=a);const h=i-t;for(let e=r+1;e<s;e++){const t=n[e<<1]-h;t>c&&(n[l++]=t,n[l++]=n[1+(e<<1)],c=t)}if(l===n.length)return e;let u=new Uint32Array(l);return u.set(n.subarray(0,l),0),u.buffer}static _append(e,t){if(t===d)return e;if(e===d)return t;if(null===e)return e;if(null===t)return null;const i=m(e),n=m(t),o=n.length>>>1;let s=new Uint32Array(i.length+n.length);s.set(i,0);let r=i.length;const a=i[i.length-2];for(let e=0;e<o;e++)s[r++]=n[e<<1]+a,s[r++]=n[1+(e<<1)];return s.buffer}static _insert(e,t,i){if(null===e||e===d)return e;const n=m(e),s=n.length>>>1;let r=o.A.findIndexInTokensArray(n,t);if(r>0){n[r-1<<1]===t&&r--}for(let e=r;e<s;e++)n[e<<1]+=i;return e}}},97461:(e,t,i)=>{"use strict";i.d(t,{Af:()=>o,eq:()=>s,t2:()=>a,vu:()=>n});const n="`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?";const o=function(e=""){let t="(-?\\d*\\.\\d\\w*)|([^";for(const i of n)e.indexOf(i)>=0||(t+="\\"+i);return t+="\\s]+)",new RegExp(t,"g")}();function s(e){let t=o;if(e&&e instanceof RegExp)if(e.global)t=e;else{let i="g";e.ignoreCase&&(i+="i"),e.multiline&&(i+="m"),e.unicode&&(i+="u"),t=new RegExp(e.source,i)}return t.lastIndex=0,t}const r={maxLen:1e3,windowSize:15,timeBudget:150};function a(e,t,i,n,o=r){if(i.length>o.maxLen){let s=e-o.maxLen/2;return s<0?s=0:n+=s,a(e,t,i=i.substring(s,e+o.maxLen/2),n,o)}const s=Date.now(),c=e-1-n;let d=-1,h=null;for(let e=1;!(Date.now()-s>=o.timeBudget);e++){const n=c-o.windowSize*e;t.lastIndex=Math.max(0,n);const s=l(t,i,c,d);if(!s&&h)break;if(h=s,n<=0)break;d=n}if(h){let e={word:h[0],startColumn:n+1+h.index,endColumn:n+1+h.index+h[0].length};return t.lastIndex=0,e}return null}function l(e,t,i,n){let o;for(;o=e.exec(t);){const t=o.index||0;if(t<=i&&e.lastIndex>=i)return o;if(n>0&&t>n)return null}return null}},44101:(e,t,i)=>{"use strict";i.d(t,{H9:()=>O,He:()=>M,OH:()=>V,KZ:()=>y,RN:()=>I,Ct:()=>D,Az:()=>P,MY:()=>p,vH:()=>L,vN:()=>R,K7:()=>j,wT:()=>z,vJ:()=>k,AD:()=>_,aC:()=>H,xp:()=>S,vI:()=>E,gl:()=>m,mX:()=>A,bw:()=>u,zu:()=>C,pM:()=>B,id:()=>N,ln:()=>F,FL:()=>b,G0:()=>w,AC:()=>W,nD:()=>x,WW:()=>g,uZ:()=>f,NX:()=>c,RW:()=>U,tA:()=>T,jr:()=>h,Sy:()=>d,vx:()=>v});var n=i(70666),o=i(24314),s=i(21036),r=i(4669),a=i(5976);var l=i(73046);class c{static getLanguageId(e){return(255&e)>>>0}static getTokenType(e){return(1792&e)>>>8}static getFontStyle(e){return(14336&e)>>>11}static getForeground(e){return(8372224&e)>>>14}static getBackground(e){return(4286578688&e)>>>23}static getClassNameFromMetadata(e){let t="mtk"+this.getForeground(e),i=this.getFontStyle(e);return 1&i&&(t+=" mtki"),2&i&&(t+=" mtkb"),4&i&&(t+=" mtku"),t}static getInlineStyleFromMetadata(e,t){const i=this.getForeground(e),n=this.getFontStyle(e);let o=`color: ${t[i]};`;return 1&n&&(o+="font-style: italic;"),2&n&&(o+="font-weight: bold;"),4&n&&(o+="text-decoration: underline;"),o}}const d=function(){let e=Object.create(null);return e[0]="symbol-method",e[1]="symbol-function",e[2]="symbol-constructor",e[3]="symbol-field",e[4]="symbol-variable",e[5]="symbol-class",e[6]="symbol-struct",e[7]="symbol-interface",e[8]="symbol-module",e[9]="symbol-property",e[10]="symbol-event",e[11]="symbol-operator",e[12]="symbol-unit",e[13]="symbol-value",e[14]="symbol-constant",e[15]="symbol-enum",e[16]="symbol-enum-member",e[17]="symbol-keyword",e[27]="symbol-snippet",e[18]="symbol-text",e[19]="symbol-color",e[20]="symbol-file",e[21]="symbol-reference",e[22]="symbol-customcolor",e[23]="symbol-folder",e[24]="symbol-type-parameter",e[25]="account",e[26]="issues",function(t){const i=e[t];let n=i&&l.fK.get(i);return n||(console.info("No codicon found for CompletionItemKind "+t),n=l.lA.symbolProperty),n.classNames}}();let h=function(){let e=Object.create(null);return e.method=0,e.function=1,e.constructor=2,e.field=3,e.variable=4,e.class=5,e.struct=6,e.interface=7,e.module=8,e.property=9,e.event=10,e.operator=11,e.unit=12,e.value=13,e.constant=14,e.enum=15,e["enum-member"]=16,e.enumMember=16,e.keyword=17,e.snippet=27,e.text=18,e.color=19,e.file=20,e.reference=21,e.customcolor=22,e.folder=23,e["type-parameter"]=24,e.typeParameter=24,e.account=25,e.issue=26,function(t,i){let n=e[t];return void 0!==n||i||(n=9),n}}();var u,g,p,f,m;function v(e){return e&&n.o.isUri(e.uri)&&o.e.isIRange(e.range)&&(o.e.isIRange(e.originSelectionRange)||o.e.isIRange(e.targetSelectionRange))}!function(e){e[e.Automatic=0]="Automatic",e[e.Explicit=1]="Explicit"}(u||(u={})),function(e){e[e.Invoke=1]="Invoke",e[e.TriggerCharacter=2]="TriggerCharacter",e[e.ContentChange=3]="ContentChange"}(g||(g={})),function(e){e[e.Text=0]="æ–‡æœ¬",e[e.Read=1]="Read",e[e.Write=2]="Write"}(p||(p={})),function(e){const t=new Map;t.set("file",0),t.set("module",1),t.set("namespace",2),t.set("package",3),t.set("class",4),t.set("method",5),t.set("property",6),t.set("field",7),t.set("constructor",8),t.set("enum",9),t.set("interface",10),t.set("function",11),t.set("variable",12),t.set("constant",13),t.set("string",14),t.set("number",15),t.set("boolean",16),t.set("array",17),t.set("object",18),t.set("key",19),t.set("null",20),t.set("enum-member",21),t.set("struct",22),t.set("event",23),t.set("operator",24),t.set("type-parameter",25);const i=new Map;i.set(0,"file"),i.set(1,"module"),i.set(2,"namespace"),i.set(3,"package"),i.set(4,"class"),i.set(5,"method"),i.set(6,"property"),i.set(7,"field"),i.set(8,"constructor"),i.set(9,"enum"),i.set(10,"interface"),i.set(11,"function"),i.set(12,"variable"),i.set(13,"constant"),i.set(14,"string"),i.set(15,"number"),i.set(16,"boolean"),i.set(17,"array"),i.set(18,"object"),i.set(19,"key"),i.set(20,"null"),i.set(21,"enum-member"),i.set(22,"struct"),i.set(23,"event"),i.set(24,"operator"),i.set(25,"type-parameter"),e.fromString=function(e){return t.get(e)},e.toString=function(e){return i.get(e)},e.toCssClassName=function(e,t){const n=i.get(e);let o=n&&l.fK.get("symbol-"+n);return o||(console.info("No codicon found for SymbolKind "+e),o=l.lA.symbolProperty),`${t?"inline":"block"} ${o.classNames}`}}(f||(f={}));class _{constructor(e){this.value=e}}_.Comment=new _("comment"),_.Imports=new _("imports"),_.Region=new _("region"),function(e){e[e.Other=0]="Other",e[e.Type=1]="ç±»åž‹",e[e.Parameter=2]="Parameter"}(m||(m={}));const b=new s.c,w=new s.c,y=new s.c,C=new s.c,x=new s.c,S=new s.c,k=new s.c,L=new s.c,N=new s.c,D=new s.c,I=new s.c,E=new s.c,T=new s.c,M=new s.c,A=new s.c,O=new s.c,P=new s.c,R=new s.c,F=new s.c,B=new s.c,V=new s.c,W=new s.c,H=new s.c,z=new s.c,j=new s.c,U=new class{constructor(){this._map=new Map,this._promises=new Map,this._onDidChange=new r.Q5,this.onDidChange=this._onDidChange.event,this._colorMap=null}fire(e){this._onDidChange.fire({changedLanguages:e,changedColorMap:!1})}register(e,t){return this._map.set(e,t),this.fire([e]),(0,a.OF)((()=>{this._map.get(e)===t&&(this._map.delete(e),this.fire([e]))}))}registerPromise(e,t){let i=null,n=!1;return this._promises.set(e,t.then((t=>{this._promises.delete(e),!n&&t&&(i=this.register(e,t))}))),(0,a.OF)((()=>{n=!0,i&&i.dispose()}))}getPromise(e){const t=this.get(e);if(t)return Promise.resolve(t);const i=this._promises.get(e);return i?i.then((t=>this.get(e))):null}get(e){return this._map.get(e)||null}setColorMap(e){this._colorMap=e,this._onDidChange.fire({changedLanguages:Array.from(this._map.keys()),changedColorMap:!0})}getColorMap(){return this._colorMap}getDefaultBackground(){return this._colorMap&&this._colorMap.length>2?this._colorMap[2]:null}}},97354:(e,t,i)=>{"use strict";var n;i.d(t,{V6:()=>o,c$:()=>s,wU:()=>n}),function(e){e[e.None=0]="None",e[e.Indent=1]="Indent",e[e.IndentOutdent=2]="IndentOutdent",e[e.Outdent=3]="Outdent"}(n||(n={}));class o{constructor(e){if(this._standardAutoClosingPairConditionalBrand=void 0,this.open=e.open,this.close=e.close,this._standardTokenMask=0,Array.isArray(e.notIn))for(let t=0,i=e.notIn.length;t<i;t++){switch(e.notIn[t]){case"string":this._standardTokenMask|=2;break;case"comment":this._standardTokenMask|=1;break;case"regex":this._standardTokenMask|=4}}}isOK(e){return 0==(this._standardTokenMask&e)}}class s{constructor(e){this.autoClosingPairsOpenByStart=new Map,this.autoClosingPairsOpenByEnd=new Map,this.autoClosingPairsCloseByStart=new Map,this.autoClosingPairsCloseByEnd=new Map,this.autoClosingPairsCloseSingleChar=new Map;for(const t of e)r(this.autoClosingPairsOpenByStart,t.open.charAt(0),t),r(this.autoClosingPairsOpenByEnd,t.open.charAt(t.open.length-1),t),r(this.autoClosingPairsCloseByStart,t.close.charAt(0),t),r(this.autoClosingPairsCloseByEnd,t.close.charAt(t.close.length-1),t),1===t.close.length&&1===t.open.length&&r(this.autoClosingPairsCloseSingleChar,t.close,t)}}function r(e,t,i){e.has(t)?e.get(t).push(i):e.set(t,[i])}},83831:(e,t,i)=>{"use strict";i.d(t,{c_:()=>S,zu:()=>I,UU:()=>k});var n=i(4669),o=i(5976),s=i(97295),r=i(97461),a=i(97354),l=i(40764);class c{constructor(e){if(e.autoClosingPairs?this._autoClosingPairs=e.autoClosingPairs.map((e=>new a.V6(e))):e.brackets?this._autoClosingPairs=e.brackets.map((e=>new a.V6({open:e[0],close:e[1]}))):this._autoClosingPairs=[],e.colorizedBracketPairs?this._colorizedBracketPairs=d(e.colorizedBracketPairs.map((e=>[e[0],e[1]]))):e.brackets?this._colorizedBracketPairs=d(e.brackets.map((e=>[e[0],e[1]])).filter((e=>!("<"===e[0]&&">"===e[1])))):this._colorizedBracketPairs=[],e.__electricCharacterSupport&&e.__electricCharacterSupport.docComment){const t=e.__electricCharacterSupport.docComment;this._autoClosingPairs.push(new a.V6({open:t.open,close:t.close||""}))}this._autoCloseBefore="string"==typeof e.autoCloseBefore?e.autoCloseBefore:c.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED,this._surroundingPairs=e.surroundingPairs||this._autoClosingPairs}getAutoClosingPairs(){return this._autoClosingPairs}getAutoCloseBeforeSet(){return this._autoCloseBefore}static shouldAutoClosePair(e,t,i){if(0===t.getTokenCount())return!0;const n=t.findTokenIndexAtOffset(i-2),o=t.getStandardTokenType(n);return e.isOK(o)}getSurroundingPairs(){return this._surroundingPairs}getColorizedBrackets(){return this._colorizedBracketPairs}}function d(e){return e.filter((([e,t])=>""!==e&&""!==t))}c.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED=";:.,=}])> \n\t";var h=i(34227);class u{constructor(e){this._richEditBrackets=e}getElectricCharacters(){let e=[];if(this._richEditBrackets)for(const t of this._richEditBrackets.brackets)for(const i of t.close){const t=i.charAt(i.length-1);e.push(t)}return e=e.filter(((e,t,i)=>i.indexOf(e)===t)),e}onElectricCharacter(e,t,i){if(!this._richEditBrackets||0===this._richEditBrackets.brackets.length)return null;const n=t.findTokenIndexAtOffset(i-1);if((0,l.Bu)(t.getStandardTokenType(n)))return null;const o=this._richEditBrackets.reversedRegex,s=t.getLineContent().substring(0,i-1)+e,r=h.Vr.findPrevBracketInRange(o,1,s,0,s.length);if(!r)return null;const a=s.substring(r.startColumn-1,r.endColumn-1).toLowerCase();if(this._richEditBrackets.textIsOpenBracket[a])return null;const c=t.getActualLineContentBefore(r.startColumn-1);return/^\s*$/.test(c)?{matchOpenBracket:a}:null}}function g(e){return e.global&&(e.lastIndex=0),!0}class p{constructor(e){this._indentationRules=e}shouldIncrease(e){return!!(this._indentationRules&&this._indentationRules.increaseIndentPattern&&g(this._indentationRules.increaseIndentPattern)&&this._indentationRules.increaseIndentPattern.test(e))}shouldDecrease(e){return!!(this._indentationRules&&this._indentationRules.decreaseIndentPattern&&g(this._indentationRules.decreaseIndentPattern)&&this._indentationRules.decreaseIndentPattern.test(e))}shouldIndentNextLine(e){return!!(this._indentationRules&&this._indentationRules.indentNextLinePattern&&g(this._indentationRules.indentNextLinePattern)&&this._indentationRules.indentNextLinePattern.test(e))}shouldIgnore(e){return!!(this._indentationRules&&this._indentationRules.unIndentedLinePattern&&g(this._indentationRules.unIndentedLinePattern)&&this._indentationRules.unIndentedLinePattern.test(e))}getIndentMetadata(e){let t=0;return this.shouldIncrease(e)&&(t+=1),this.shouldDecrease(e)&&(t+=2),this.shouldIndentNextLine(e)&&(t+=4),this.shouldIgnore(e)&&(t+=8),t}}var f=i(17301);class m{constructor(e){(e=e||{}).brackets=e.brackets||[["(",")"],["{","}"],["[","]"]],this._brackets=[],e.brackets.forEach((e=>{const t=m._createOpenBracketRegExp(e[0]),i=m._createCloseBracketRegExp(e[1]);t&&i&&this._brackets.push({open:e[0],openRegExp:t,close:e[1],closeRegExp:i})})),this._regExpRules=e.onEnterRules||[]}onEnter(e,t,i,n){if(e>=3)for(let e=0,o=this._regExpRules.length;e<o;e++){let o=this._regExpRules[e];if([{reg:o.beforeText,text:i},{reg:o.afterText,text:n},{reg:o.previousLineText,text:t}].every((e=>!e.reg||(e.reg.lastIndex=0,e.reg.test(e.text)))))return o.action}if(e>=2&&i.length>0&&n.length>0)for(let e=0,t=this._brackets.length;e<t;e++){let t=this._brackets[e];if(t.openRegExp.test(i)&&t.closeRegExp.test(n))return{indentAction:a.wU.IndentOutdent}}if(e>=2&&i.length>0)for(let e=0,t=this._brackets.length;e<t;e++){if(this._brackets[e].openRegExp.test(i))return{indentAction:a.wU.Indent}}return null}static _createOpenBracketRegExp(e){let t=s.ec(e);return/\B/.test(t.charAt(0))||(t="\\b"+t),t+="\\s*$",m._safeRegExp(t)}static _createCloseBracketRegExp(e){let t=s.ec(e);return/\B/.test(t.charAt(t.length-1))||(t+="\\b"),t="^\\s*"+t,m._safeRegExp(t)}static _safeRegExp(e){try{return new RegExp(e)}catch(e){return(0,f.dL)(e),null}}}var v=i(72065),_=i(33108),b=i(71531),w=i(65026),y=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},C=function(e,t){return function(i,n){t(i,n,e)}};class x{constructor(e){this.languageId=e}affects(e){return!this.languageId||this.languageId===e}}const S=(0,v.yh)("languageConfigurationService");let k=class extends o.JT{constructor(e,t){super(),this.configurationService=e,this.modeService=t,this.onDidChangeEmitter=this._register(new n.Q5),this.onDidChange=this.onDidChangeEmitter.event,this.configurations=new Map;const i=new Set(Object.values(L));this._register(this.configurationService.onDidChangeConfiguration((e=>{const t=e.change.keys.some((e=>i.has(e))),n=e.change.overrides.filter((([e,t])=>t.some((e=>i.has(e))))).map((([e])=>this.modeService.validateLanguageId(e)));if(t)this.configurations.clear(),this.onDidChangeEmitter.fire(new x(void 0));else for(const e of n)e&&(this.configurations.delete(e),this.onDidChangeEmitter.fire(new x(e)))}))),this._register(I.onDidChange((e=>{this.configurations.delete(e.languageId),this.onDidChangeEmitter.fire(new x(e.languageId))})))}getLanguageConfiguration(e){let t=this.configurations.get(e);return t||(t=function(e,t,i){let n=I.getLanguageConfiguration(e);if(!n){const t=i.validateLanguageId(e);if(!t)throw new Error("Unexpected languageId");n=new A(t,{})}const o=function(e,t){const i=t.getValue(L.brackets,{overrideIdentifier:e}),n=t.getValue(L.colorizedBracketPairs,{overrideIdentifier:e});return{brackets:N(i),colorizedBracketPairs:N(n)}}(n.languageId,t),s=T([n.underlyingConfig,o]);return new A(n.languageId,s)}(e,this.configurationService,this.modeService),this.configurations.set(e,t)),t}};k=y([C(0,_.Ui),C(1,b.h)],k);const L={brackets:"editor.language.brackets",colorizedBracketPairs:"editor.language.colorizedBracketPairs"};function N(e){if(Array.isArray(e))return e.map((e=>{if(Array.isArray(e)&&2===e.length)return[e[0],e[1]]})).filter((e=>!!e))}class D{constructor(e){this.languageId=e}}const I=new class{constructor(){this._entries=new Map,this._onDidChange=new n.Q5,this.onDidChange=this._onDidChange.event}register(e,t,i=0){let n=this._entries.get(e);n||(n=new E(e),this._entries.set(e,n));const s=n.register(t,i);return this._onDidChange.fire(new D(e)),(0,o.OF)((()=>{s.dispose(),this._onDidChange.fire(new D(e))}))}getLanguageConfiguration(e){let t=this._entries.get(e);return(null==t?void 0:t.getResolvedConfiguration())||null}getIndentationRules(e){const t=this.getLanguageConfiguration(e);return t&&t.indentationRules||null}_getElectricCharacterSupport(e){let t=this.getLanguageConfiguration(e);return t&&t.electricCharacter||null}getElectricCharacters(e){let t=this._getElectricCharacterSupport(e);return t?t.getElectricCharacters():[]}onElectricCharacter(e,t,i){let n=(0,l.wH)(t,i-1),o=this._getElectricCharacterSupport(n.languageId);return o?o.onElectricCharacter(e,n,i-n.firstCharOffset):null}getComments(e){let t=this.getLanguageConfiguration(e);return t&&t.comments||null}_getCharacterPairSupport(e){let t=this.getLanguageConfiguration(e);return t&&t.characterPair||null}getAutoClosingPairs(e){const t=this._getCharacterPairSupport(e);return new a.c$(t?t.getAutoClosingPairs():[])}getAutoCloseBeforeSet(e){let t=this._getCharacterPairSupport(e);return t?t.getAutoCloseBeforeSet():c.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED}getSurroundingPairs(e){let t=this._getCharacterPairSupport(e);return t?t.getSurroundingPairs():[]}shouldAutoClosePair(e,t,i){const n=(0,l.wH)(t,i-1);return c.shouldAutoClosePair(e,n,i-n.firstCharOffset)}getWordDefinition(e){let t=this.getLanguageConfiguration(e);return t?(0,r.eq)(t.wordDefinition||null):(0,r.eq)(null)}getFoldingRules(e){let t=this.getLanguageConfiguration(e);return t?t.foldingRules:{}}getIndentRulesSupport(e){let t=this.getLanguageConfiguration(e);return t&&t.indentRulesSupport||null}getPrecedingValidLine(e,t,i){let n=e.getLanguageIdAtPosition(t,0);if(t>1){let o,s=-1;for(o=t-1;o>=1;o--){if(e.getLanguageIdAtPosition(o,0)!==n)return s;let t=e.getLineContent(o);if(!i.shouldIgnore(t)&&!/^\s+$/.test(t)&&""!==t)return o;s=o}}return-1}getInheritIndentForLine(e,t,i,n=!0){if(e<4)return null;const o=this.getIndentRulesSupport(t.getLanguageId());if(!o)return null;if(i<=1)return{indentation:"",action:null};const r=this.getPrecedingValidLine(t,i,o);if(r<0)return null;if(r<1)return{indentation:"",action:null};const l=t.getLineContent(r);if(o.shouldIncrease(l)||o.shouldIndentNextLine(l))return{indentation:s.V8(l),action:a.wU.Indent,line:r};if(o.shouldDecrease(l))return{indentation:s.V8(l),action:null,line:r};{if(1===r)return{indentation:s.V8(t.getLineContent(r)),action:null,line:r};const e=r-1,i=o.getIndentMetadata(t.getLineContent(e));if(!(3&i)&&4&i){let i=0;for(let n=e-1;n>0;n--)if(!o.shouldIndentNextLine(t.getLineContent(n))){i=n;break}return{indentation:s.V8(t.getLineContent(i+1)),action:null,line:i+1}}if(n)return{indentation:s.V8(t.getLineContent(r)),action:null,line:r};for(let e=r;e>0;e--){const i=t.getLineContent(e);if(o.shouldIncrease(i))return{indentation:s.V8(i),action:a.wU.Indent,line:e};if(o.shouldIndentNextLine(i)){let i=0;for(let n=e-1;n>0;n--)if(!o.shouldIndentNextLine(t.getLineContent(e))){i=n;break}return{indentation:s.V8(t.getLineContent(i+1)),action:null,line:i+1}}if(o.shouldDecrease(i))return{indentation:s.V8(i),action:null,line:e}}return{indentation:s.V8(t.getLineContent(1)),action:null,line:1}}}getGoodIndentForLine(e,t,i,n,o){if(e<4)return null;const r=this.getLanguageConfiguration(i);if(!r)return null;const l=this.getIndentRulesSupport(i);if(!l)return null;const c=this.getInheritIndentForLine(e,t,n),d=t.getLineContent(n);if(c){const i=c.line;if(void 0!==i){const n=r.onEnter(e,"",t.getLineContent(i),"");if(n){let e=s.V8(t.getLineContent(i));return n.removeText&&(e=e.substring(0,e.length-n.removeText)),n.indentAction===a.wU.Indent||n.indentAction===a.wU.IndentOutdent?e=o.shiftIndent(e):n.indentAction===a.wU.Outdent&&(e=o.unshiftIndent(e)),l.shouldDecrease(d)&&(e=o.unshiftIndent(e)),n.appendText&&(e+=n.appendText),s.V8(e)}}return l.shouldDecrease(d)?c.action===a.wU.Indent?c.indentation:o.unshiftIndent(c.indentation):c.action===a.wU.Indent?o.shiftIndent(c.indentation):c.indentation}return null}getIndentForEnter(e,t,i,n){if(e<4)return null;t.forceTokenization(i.startLineNumber);const o=t.getLineTokens(i.startLineNumber),r=(0,l.wH)(o,i.startColumn-1),c=r.getLineContent();let d,h,u=!1;if(r.firstCharOffset>0&&o.getLanguageId(0)!==r.languageId?(u=!0,d=c.substr(0,i.startColumn-1-r.firstCharOffset)):d=o.getLineContent().substring(0,i.startColumn-1),i.isEmpty())h=c.substr(i.startColumn-1-r.firstCharOffset);else{h=this.getScopedLineTokens(t,i.endLineNumber,i.endColumn).getLineContent().substr(i.endColumn-1-r.firstCharOffset)}const g=this.getIndentRulesSupport(r.languageId);if(!g)return null;const p=d,f=s.V8(d),m={getLineTokens:e=>t.getLineTokens(e),getLanguageId:()=>t.getLanguageId(),getLanguageIdAtPosition:(e,i)=>t.getLanguageIdAtPosition(e,i),getLineContent:e=>e===i.startLineNumber?p:t.getLineContent(e)},v=s.V8(o.getLineContent()),_=this.getInheritIndentForLine(e,m,i.startLineNumber+1);if(!_){const e=u?v:f;return{beforeEnter:e,afterEnter:e}}let b=u?v:_.indentation;return _.action===a.wU.Indent&&(b=n.shiftIndent(b)),g.shouldDecrease(h)&&(b=n.unshiftIndent(b)),{beforeEnter:u?v:f,afterEnter:b}}getIndentActionForType(e,t,i,n,o){if(e<4)return null;const s=this.getScopedLineTokens(t,i.startLineNumber,i.startColumn);if(s.firstCharOffset)return null;const r=this.getIndentRulesSupport(s.languageId);if(!r)return null;const l=s.getLineContent(),c=l.substr(0,i.startColumn-1-s.firstCharOffset);let d;if(i.isEmpty())d=l.substr(i.startColumn-1-s.firstCharOffset);else{d=this.getScopedLineTokens(t,i.endLineNumber,i.endColumn).getLineContent().substr(i.endColumn-1-s.firstCharOffset)}if(!r.shouldDecrease(c+d)&&r.shouldDecrease(c+n+d)){const n=this.getInheritIndentForLine(e,t,i.startLineNumber,!1);if(!n)return null;let s=n.indentation;return n.action!==a.wU.Indent&&(s=o.unshiftIndent(s)),s}return null}getIndentMetadata(e,t){const i=this.getIndentRulesSupport(e.getLanguageId());return i?t<1||t>e.getLineCount()?null:i.getIndentMetadata(e.getLineContent(t)):null}getEnterAction(e,t,i){const n=this.getScopedLineTokens(t,i.startLineNumber,i.startColumn),o=this.getLanguageConfiguration(n.languageId);if(!o)return null;const s=n.getLineContent(),r=s.substr(0,i.startColumn-1-n.firstCharOffset);let l;if(i.isEmpty())l=s.substr(i.startColumn-1-n.firstCharOffset);else{l=this.getScopedLineTokens(t,i.endLineNumber,i.endColumn).getLineContent().substr(i.endColumn-1-n.firstCharOffset)}let c="";if(i.startLineNumber>1&&0===n.firstCharOffset){const e=this.getScopedLineTokens(t,i.startLineNumber-1);e.languageId===n.languageId&&(c=e.getLineContent())}const d=o.onEnter(e,c,r,l);if(!d)return null;const h=d.indentAction;let u=d.appendText;const g=d.removeText||0;u?h===a.wU.Indent&&(u="\t"+u):u=h===a.wU.Indent||h===a.wU.IndentOutdent?"\t":"";let p=this.getIndentationAtPosition(t,i.startLineNumber,i.startColumn);return g&&(p=p.substring(0,p.length-g)),{indentAction:h,appendText:u,removeText:g,indentation:p}}getIndentationAtPosition(e,t,i){const n=e.getLineContent(t);let o=s.V8(n);return o.length>i-1&&(o=o.substring(0,i-1)),o}getScopedLineTokens(e,t,i){e.forceTokenization(t);const n=e.getLineTokens(t),o=void 0===i?e.getLineMaxColumn(t)-1:i-1;return(0,l.wH)(n,o)}};class E{constructor(e){this.languageId=e,this._resolved=null,this._entries=[],this._order=0,this._resolved=null}register(e,t){const i=new M(e,t,++this._order);return this._entries.push(i),this._resolved=null,(0,o.OF)((()=>{for(let e=0;e<this._entries.length;e++)if(this._entries[e]===i){this._entries.splice(e,1),this._resolved=null;break}}))}getResolvedConfiguration(){if(!this._resolved){const e=this._resolve();e&&(this._resolved=new A(this.languageId,e))}return this._resolved}_resolve(){return 0===this._entries.length?null:(this._entries.sort(M.cmp),T(this._entries.map((e=>e.configuration))))}}function T(e){let t={comments:void 0,brackets:void 0,wordPattern:void 0,indentationRules:void 0,onEnterRules:void 0,autoClosingPairs:void 0,surroundingPairs:void 0,autoCloseBefore:void 0,folding:void 0,colorizedBracketPairs:void 0,__electricCharacterSupport:void 0};for(const i of e)t={comments:i.comments||t.comments,brackets:i.brackets||t.brackets,wordPattern:i.wordPattern||t.wordPattern,indentationRules:i.indentationRules||t.indentationRules,onEnterRules:i.onEnterRules||t.onEnterRules,autoClosingPairs:i.autoClosingPairs||t.autoClosingPairs,surroundingPairs:i.surroundingPairs||t.surroundingPairs,autoCloseBefore:i.autoCloseBefore||t.autoCloseBefore,folding:i.folding||t.folding,colorizedBracketPairs:i.colorizedBracketPairs||t.colorizedBracketPairs,__electricCharacterSupport:i.__electricCharacterSupport||t.__electricCharacterSupport};return t}class M{constructor(e,t,i){this.configuration=e,this.priority=t,this.order=i}static cmp(e,t){return e.priority===t.priority?e.order-t.order:e.priority-t.priority}}class A{constructor(e,t){this.languageId=e,this.underlyingConfig=t,this._brackets=null,this._electricCharacter=null,this._onEnterSupport=this.underlyingConfig.brackets||this.underlyingConfig.indentationRules||this.underlyingConfig.onEnterRules?new m(this.underlyingConfig):null,this.comments=A._handleComments(this.underlyingConfig),this.characterPair=new c(this.underlyingConfig),this.wordDefinition=this.underlyingConfig.wordPattern||r.Af,this.indentationRules=this.underlyingConfig.indentationRules,this.underlyingConfig.indentationRules?this.indentRulesSupport=new p(this.underlyingConfig.indentationRules):this.indentRulesSupport=null,this.foldingRules=this.underlyingConfig.folding||{}}getWordDefinition(){return(0,r.eq)(this.wordDefinition)}get brackets(){return!this._brackets&&this.underlyingConfig.brackets&&(this._brackets=new h.EA(this.languageId,this.underlyingConfig.brackets)),this._brackets}get electricCharacter(){return this._electricCharacter||(this._electricCharacter=new u(this.brackets)),this._electricCharacter}onEnter(e,t,i,n){return this._onEnterSupport?this._onEnterSupport.onEnter(e,t,i,n):null}static _handleComments(e){let t=e.comments;if(!t)return null;let i={};if(t.lineComment&&(i.lineCommentToken=t.lineComment),t.blockComment){let[e,n]=t.blockComment;i.blockCommentStartToken=e,i.blockCommentEndToken=n}return i}}(0,w.z)(S,k)},21036:(e,t,i)=>{"use strict";i.d(t,{c:()=>g,Y:()=>m});var n=i(4669),o=i(89954),s=i(5976),r=i(43702),a=i(59870),l=i(14118),c=i(88721);function d(e,t,i,n){if(Array.isArray(e)){let o=0;for(const s of e){const e=d(s,t,i,n);if(10===e)return e;e>o&&(o=e)}return o}if("string"==typeof e)return n?"*"===e?5:e===i?10:0:0;if(e){const{language:o,pattern:s,scheme:r,hasAccessToAllModels:a}=e;if(!n&&!a)return 0;let d=0;if(r)if(r===t.scheme)d=10;else{if("*"!==r)return 0;d=5}if(o)if(o===i)d=10;else{if("*"!==o)return 0;d=Math.max(d,5)}if(s){let e;if(e="string"==typeof s?s:Object.assign(Object.assign({},s),{base:(0,c.Fv)(s.base)}),e!==t.fsPath&&!(0,l.EQ)(e,t.fsPath))return 0;d=10}return d}return 0}var h=i(51200);function u(e){return"string"!=typeof e&&(Array.isArray(e)?e.every(u):!!e.exclusive)}class g{constructor(){this._clock=0,this._entries=[],this._onDidChange=new n.Q5}get onDidChange(){return this._onDidChange.event}register(e,t){let i={selector:e,provider:t,_score:-1,_time:this._clock++};return this._entries.push(i),this._lastCandidate=void 0,this._onDidChange.fire(this._entries.length),(0,s.OF)((()=>{if(i){let e=this._entries.indexOf(i);e>=0&&(this._entries.splice(e,1),this._lastCandidate=void 0,this._onDidChange.fire(this._entries.length),i=void 0)}}))}has(e){return this.all(e).length>0}all(e){if(!e)return[];this._updateScores(e);const t=[];for(let e of this._entries)e._score>0&&t.push(e.provider);return t}ordered(e){const t=[];return this._orderedForEach(e,(e=>t.push(e.provider))),t}orderedGroups(e){const t=[];let i,n;return this._orderedForEach(e,(e=>{i&&n===e._score?i.push(e.provider):(n=e._score,i=[e.provider],t.push(i))})),t}_orderedForEach(e,t){if(e){this._updateScores(e);for(const e of this._entries)e._score>0&&t(e)}}_updateScores(e){let t={uri:e.uri.toString(),language:e.getLanguageId()};if(!this._lastCandidate||this._lastCandidate.language!==t.language||this._lastCandidate.uri!==t.uri){this._lastCandidate=t;for(let t of this._entries)if(t._score=d(t.selector,e.uri,e.getLanguageId(),(0,h.p)(e)),u(t.selector)&&t._score>0){for(let e of this._entries)e._score=0;t._score=1e3;break}this._entries.sort(g._compareByScoreAndTime)}}static _compareByScoreAndTime(e,t){return e._score<t._score?1:e._score>t._score?-1:e._time<t._time?1:e._time>t._time?-1:0}}const p=new WeakMap;let f=0;class m{constructor(e,t,i=Number.MAX_SAFE_INTEGER){this._registry=e,this.min=t,this.max=i,this._cache=new r.z6(50,.7)}_key(e){return e.id+this._registry.all(e).reduce(((e,t)=>(0,o.SP)(function(e){let t=p.get(e);return void 0===t&&(t=++f,p.set(e,t)),t}(t),e)),0)}_clamp(e){return void 0===e?this.min:Math.min(this.max,Math.max(this.min,Math.floor(1.3*e)))}get(e){const t=this._key(e),i=this._cache.get(t);return this._clamp(null==i?void 0:i.value)}update(e,t){const i=this._key(e);let n=this._cache.get(i);return n||(n=new a.n,this._cache.set(i,n)),n.update(t),this.get(e)}}},71144:(e,t,i)=>{"use strict";i.d(t,{XT:()=>c,dQ:()=>l});var n=i(63580),o=i(4669),s=i(83831),r=i(89872),a=i(81170);const l=new class{constructor(){this._onDidChangeLanguages=new o.Q5,this.onDidChangeLanguages=this._onDidChangeLanguages.event,this._languages=[],this._dynamicLanguages=[]}registerLanguage(e){return this._languages.push(e),this._onDidChangeLanguages.fire(void 0),{dispose:()=>{for(let t=0,i=this._languages.length;t<i;t++)if(this._languages[t]===e)return void this._languages.splice(t,1)}}}getLanguages(){return[].concat(this._languages).concat(this._dynamicLanguages)}};r.B.add("editor.modesRegistry",l);const c="plaintext";l.registerLanguage({id:c,extensions:[".txt"],aliases:[n.N("plainText.alias","Plain Text"),"text"],mimetypes:[a.vW.text]}),s.zu.register(c,{brackets:[["(",")"],["[","]"],["{","}"]],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],colorizedBracketPairs:[],folding:{offSide:!0}},0)},28111:(e,t,i)=>{"use strict";i.d(t,{Ri:()=>r,TG:()=>s,mh:()=>a,nO:()=>o});var n=i(85600);const o=new class{clone(){return this}equals(e){return this===e}},s="vs.editor.nullMode";function r(e,t,i,o){return new n.hG([new n.WU(o,"",e)],i)}function a(e,t,i,s){let r=new Uint32Array(2);return r[0]=s,r[1]=(16384|e<<0|2<<23)>>>0,new n.Hi(r,null===i?o:i)}},40764:(e,t,i)=>{"use strict";function n(e,t){let i=e.getCount(),n=e.findTokenIndexAtOffset(t),s=e.getLanguageId(n),r=n;for(;r+1<i&&e.getLanguageId(r+1)===s;)r++;let a=n;for(;a>0&&e.getLanguageId(a-1)===s;)a--;return new o(e,s,a,r+1,e.getStartOffset(a),e.getEndOffset(r))}i.d(t,{Bu:()=>s,wH:()=>n});class o{constructor(e,t,i,n,o,s){this._scopedLineTokensBrand=void 0,this._actual=e,this.languageId=t,this._firstTokenIndex=i,this._lastTokenIndex=n,this.firstCharOffset=o,this._lastCharOffset=s}getLineContent(){return this._actual.getLineContent().substring(this.firstCharOffset,this._lastCharOffset)}getActualLineContentBefore(e){return this._actual.getLineContent().substring(0,this.firstCharOffset+e)}getTokenCount(){return this._lastTokenIndex-this._firstTokenIndex}findTokenIndexAtOffset(e){return this._actual.findTokenIndexAtOffset(e+this.firstCharOffset)-this._firstTokenIndex}getStandardTokenType(e){return this._actual.getStandardTokenType(e+this._firstTokenIndex)}}function s(e){return 0!=(7&e)}},34227:(e,t,i)=>{"use strict";i.d(t,{EA:()=>a,Vr:()=>p});var n=i(97295),o=i(50072),s=i(24314);class r{constructor(e,t,i,n,o,s){this._richEditBracketBrand=void 0,this.languageId=e,this.index=t,this.open=i,this.close=n,this.forwardRegex=o,this.reversedRegex=s,this._openSet=r._toSet(this.open),this._closeSet=r._toSet(this.close)}isOpen(e){return this._openSet.has(e)}isClose(e){return this._closeSet.has(e)}static _toSet(e){const t=new Set;for(const i of e)t.add(i);return t}}class a{constructor(e,t){this._richEditBracketsBrand=void 0;const i=function(e){const t=e.length;e=e.map((e=>[e[0].toLowerCase(),e[1].toLowerCase()]));const i=[];for(let e=0;e<t;e++)i[e]=e;const n=(e,t)=>{const[i,n]=e,[o,s]=t;return i===o||i===s||n===o||n===s},o=(e,n)=>{const o=Math.min(e,n),s=Math.max(e,n);for(let e=0;e<t;e++)i[e]===s&&(i[e]=o)};for(let s=0;s<t;s++){const r=e[s];for(let a=s+1;a<t;a++)n(r,e[a])&&o(i[s],i[a])}const s=[];for(let n=0;n<t;n++){let o=[],r=[];for(let s=0;s<t;s++)if(i[s]===n){const[t,i]=e[s];o.push(t),r.push(i)}o.length>0&&s.push({open:o,close:r})}return s}(t);this.brackets=i.map(((t,n)=>new r(e,n,t.open,t.close,function(e,t,i,n){let o=[];o=o.concat(e),o=o.concat(t);for(let e=0,t=o.length;e<t;e++)l(o[e],i,n,o);return o=d(o),o.sort(c),o.reverse(),u(o)}(t.open,t.close,i,n),function(e,t,i,n){let o=[];o=o.concat(e),o=o.concat(t);for(let e=0,t=o.length;e<t;e++)l(o[e],i,n,o);return o=d(o),o.sort(c),o.reverse(),u(o.map(g))}(t.open,t.close,i,n)))),this.forwardRegex=function(e){let t=[];for(const i of e){for(const e of i.open)t.push(e);for(const e of i.close)t.push(e)}return t=d(t),u(t)}(this.brackets),this.reversedRegex=function(e){let t=[];for(const i of e){for(const e of i.open)t.push(e);for(const e of i.close)t.push(e)}return t=d(t),u(t.map(g))}(this.brackets),this.textIsBracket={},this.textIsOpenBracket={},this.maxBracketLength=0;for(const e of this.brackets){for(const t of e.open)this.textIsBracket[t]=e,this.textIsOpenBracket[t]=!0,this.maxBracketLength=Math.max(this.maxBracketLength,t.length);for(const t of e.close)this.textIsBracket[t]=e,this.textIsOpenBracket[t]=!1,this.maxBracketLength=Math.max(this.maxBracketLength,t.length)}}}function l(e,t,i,n){for(let o=0,s=t.length;o<s;o++){if(o===i)continue;const s=t[o];for(const t of s.open)t.indexOf(e)>=0&&n.push(t);for(const t of s.close)t.indexOf(e)>=0&&n.push(t)}}function c(e,t){return e.length-t.length}function d(e){if(e.length<=1)return e;const t=[],i=new Set;for(const n of e)i.has(n)||(t.push(n),i.add(n));return t}function h(e){const t=/^[\w ]+$/.test(e);return e=n.ec(e),t?`\\b${e}\\b`:e}function u(e){let t=`(${e.map(h).join(")|(")})`;return n.GF(t,!0)}const g=function(){let e=null,t=null;return function(i){return e!==i&&(e=i,t=function(e){if(o.lZ){const t=new Uint16Array(e.length);let i=0;for(let n=e.length-1;n>=0;n--)t[i++]=e.charCodeAt(n);return o.oe().decode(t)}{let t=[],i=0;for(let n=e.length-1;n>=0;n--)t[i++]=e.charAt(n);return t.join("")}}(e)),t}}();class p{static _findPrevBracketInText(e,t,i,n){let o=i.match(e);if(!o)return null;let r=i.length-(o.index||0),a=o[0].length,l=n+r;return new s.e(t,l-a+1,t,l+1)}static findPrevBracketInRange(e,t,i,n,o){const s=g(i).substring(i.length-o,i.length-n);return this._findPrevBracketInText(e,t,s,n)}static findNextBracketInText(e,t,i,n){let o=i.match(e);if(!o)return null;let r=o.index||0,a=o[0].length;if(0===a)return null;let l=n+r;return new s.e(t,l+1,t,l+1+a)}static findNextBracketInRange(e,t,i,n,o){const s=i.substring(n,o);return this.findNextBracketInText(e,t,s,n)}}},55713:(e,t,i)=>{"use strict";i.d(t,{C:()=>a,F:()=>l});var n=i(97295),o=i(78411),s=i(28111);const r={getInitialState:()=>s.nO,tokenize2:(e,t,i,n)=>(0,s.mh)(0,e,i,n)};function a(e,t,i=r){return function(e,t,i){let s='<div class="monaco-tokenized-source">';const r=n.uq(e);let a=i.getInitialState();for(let e=0,l=r.length;e<l;e++){const l=r[e];e>0&&(s+="<br/>");const c=i.tokenize2(l,!0,a,0);o.A.convertToEndOffset(c.tokens,l.length);const d=new o.A(c.tokens,l,t).inflate();let h=0;for(let e=0,t=d.getCount();e<t;e++){const t=d.getClassName(e),i=d.getEndOffset(e);s+=`<span class="${t}">${n.YU(l.substring(h,i))}</span>`,h=i}a=c.endState}return s+="</div>",s}(e,t,i||r)}function l(e,t,i,n,o,s,r){let a="<div>",l=n,c=0,d=!0;for(let h=0,u=t.getCount();h<u;h++){const u=t.getEndOffset(h);if(u<=n)continue;let g="";for(;l<u&&l<o;l++){const t=e.charCodeAt(l);switch(t){case 9:let e=s-(l+c)%s;for(c+=e-1;e>0;)r&&d?(g+="&#160;",d=!1):(g+=" ",d=!0),e--;break;case 60:g+="&lt;",d=!1;break;case 62:g+="&gt;",d=!1;break;case 38:g+="&amp;",d=!1;break;case 0:g+="&#00;",d=!1;break;case 65279:case 8232:case 8233:case 133:g+="ï¿½",d=!1;break;case 13:g+="&#8203",d=!1;break;case 32:r&&d?(g+="&#160;",d=!1):(g+=" ",d=!0);break;default:g+=String.fromCharCode(t),d=!1}}if(a+=`<span style="${t.getInlineStyle(h,i)}">${g}</span>`,u>o||l>=o)break}return a+="</div>",a}},90469:(e,t,i)=>{"use strict";i.d(t,{p:()=>n});const n=(0,i(72065).yh)("editorWorkerService")},89510:(e,t,i)=>{"use strict";i.d(t,{OG:()=>x,ML:()=>b,KO:()=>y,Jc:()=>_,Vl:()=>f,Vj:()=>m});var n=i(71050),o=i(17301),s=i(70666),r=i(44101),a=i(51200),l=i(94565),c=i(98401),d=i(53060),h=i(1432);function u(e){const t=new Uint32Array(function(e){let t=0;if(t+=2,"full"===e.type)t+=1+e.data.length;else{t+=1,t+=3*e.deltas.length;for(const i of e.deltas)i.data&&(t+=i.data.length)}return t}(e));let i=0;if(t[i++]=e.id,"full"===e.type)t[i++]=1,t[i++]=e.data.length,t.set(e.data,i),i+=e.data.length;else{t[i++]=2,t[i++]=e.deltas.length;for(const n of e.deltas)t[i++]=n.start,t[i++]=n.deleteCount,n.data?(t[i++]=n.data.length,t.set(n.data,i),i+=n.data.length):t[i++]=0}return function(e){const t=new Uint8Array(e.buffer,e.byteOffset,4*e.length);return h.r()||function(e){for(let t=0,i=e.length;t<i;t+=4){const i=e[t+0],n=e[t+1],o=e[t+2],s=e[t+3];e[t+0]=s,e[t+1]=o,e[t+2]=n,e[t+3]=i}}(t),d.KN.wrap(t)}(t)}var g=i(24314),p=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function f(e){return e&&!!e.data}function m(e){return e&&Array.isArray(e.edits)}class v{constructor(e,t){this.provider=e,this.tokens=t}}function _(e){return r.wT.has(e)}function b(e,t,i,n){return p(this,void 0,void 0,(function*(){const s=function(e){const t=r.wT.orderedGroups(e);return t.length>0?t[0]:[]}(e),a=yield Promise.all(s.map((s=>p(this,void 0,void 0,(function*(){let r;try{r=yield s.provideDocumentSemanticTokens(e,s===t?i:null,n)}catch(e){(0,o.Cp)(e),r=null}return r&&(f(r)||m(r))||(r=null),new v(s,r)})))));for(const e of a)if(e.tokens)return e;return a.length>0?a[0]:null}))}class w{constructor(e,t){this.provider=e,this.tokens=t}}function y(e){return r.K7.has(e)}function C(e){const t=r.K7.orderedGroups(e);return t.length>0?t[0]:[]}function x(e,t,i){return p(this,void 0,void 0,(function*(){const n=C(e),s=yield Promise.all(n.map((n=>p(this,void 0,void 0,(function*(){let s;try{s=yield n.provideDocumentRangeSemanticTokens(e,t,i)}catch(e){(0,o.Cp)(e),s=null}return s&&f(s)||(s=null),new w(n,s)})))));for(const e of s)if(e.tokens)return e;return s.length>0?s[0]:null}))}l.P.registerCommand("_provideDocumentSemanticTokensLegend",((e,...t)=>p(void 0,void 0,void 0,(function*(){const[i]=t;(0,c.p_)(i instanceof s.o);const n=e.get(a.q).getModel(i);if(!n)return;const o=function(e){const t=r.wT.orderedGroups(e);return t.length>0?t[0]:null}(n);return o?o[0].getLegend():e.get(l.H).executeCommand("_provideDocumentRangeSemanticTokensLegend",i)})))),l.P.registerCommand("_provideDocumentSemanticTokens",((e,...t)=>p(void 0,void 0,void 0,(function*(){const[i]=t;(0,c.p_)(i instanceof s.o);const o=e.get(a.q).getModel(i);if(!o)return;if(!_(o))return e.get(l.H).executeCommand("_provideDocumentRangeSemanticTokens",i,o.getFullModelRange());const r=yield b(o,null,null,n.T.None);if(!r)return;const{provider:d,tokens:h}=r;if(!h||!f(h))return;const g=u({id:0,type:"full",data:h.data});return h.resultId&&d.releaseDocumentSemanticTokens(h.resultId),g})))),l.P.registerCommand("_provideDocumentRangeSemanticTokensLegend",((e,...t)=>p(void 0,void 0,void 0,(function*(){const[i,o]=t;(0,c.p_)(i instanceof s.o);const r=e.get(a.q).getModel(i);if(!r)return;const l=C(r);if(0===l.length)return;if(1===l.length)return l[0].getLegend();if(!o||!g.e.isIRange(o))return console.warn("provideDocumentRangeSemanticTokensLegend might be out-of-sync with provideDocumentRangeSemanticTokens unless a range argument is passed in"),l[0].getLegend();const d=yield x(r,g.e.lift(o),n.T.None);return d?d.provider.getLegend():void 0})))),l.P.registerCommand("_provideDocumentRangeSemanticTokens",((e,...t)=>p(void 0,void 0,void 0,(function*(){const[i,o]=t;(0,c.p_)(i instanceof s.o),(0,c.p_)(g.e.isIRange(o));const r=e.get(a.q).getModel(i);if(!r)return;const l=yield x(r,g.e.lift(o),n.T.None);return l&&l.tokens?u({id:0,type:"full",data:l.tokens.data}):void 0}))))},26479:(e,t,i)=>{"use strict";i.d(t,{i:()=>n});const n=(0,i(72065).yh)("markerDecorationsService")},71531:(e,t,i)=>{"use strict";i.d(t,{h:()=>n});const n=(0,i(72065).yh)("modeService")},51200:(e,t,i)=>{"use strict";i.d(t,{p:()=>o,q:()=>n});const n=(0,i(72065).yh)("modelService");function o(e){return!e.isTooLargeForSyncing()&&!e.isForSimpleWidget}},32334:(e,t,i)=>{"use strict";i.d(t,{BR:()=>A,e3:()=>O,tw:()=>P});var n=i(4669),o=i(5976),s=i(1432),r=i(17301),a=i(64141),l=i(44174),c=i(44101),d=i(71144),h=i(71531),u=i(33187),g=i(33108),p=i(15393),f=i(71050),m=i(97781),v=i(43557),_=i(64862),b=i(89954),w=i(95215),y=i(66663),C=i(65072),x=i(89510),S=i(36248),k=i(83831),L=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},N=function(e,t){return function(i,n){t(i,n,e)}};function D(e){return e.toString()}function I(e){const t=new b.yP,i=e.createSnapshot();let n;for(;n=i.read();)t.update(n);return t.digest()}class E{constructor(e,t,i){this._modelEventListeners=new o.SL,this.model=e,this._languageSelection=null,this._languageSelectionListener=null,this._modelEventListeners.add(e.onWillDispose((()=>t(e)))),this._modelEventListeners.add(e.onDidChangeLanguage((t=>i(e,t))))}_disposeLanguageSelection(){this._languageSelectionListener&&(this._languageSelectionListener.dispose(),this._languageSelectionListener=null)}dispose(){this._modelEventListeners.dispose(),this._disposeLanguageSelection()}setLanguage(e){this._disposeLanguageSelection(),this._languageSelection=e,this._languageSelectionListener=this._languageSelection.onDidChange((()=>this.model.setMode(e.languageId))),this.model.setMode(e.languageId)}}const T=s.IJ||s.dz?1:2;class M{constructor(e,t,i,n,o,s,r,a){this.uri=e,this.initialUndoRedoSnapshot=t,this.time=i,this.sharesUndoRedoStack=n,this.heapSize=o,this.sha1=s,this.versionId=r,this.alternativeVersionId=a}}let A=class e extends o.JT{constructor(e,t,i,o,s,r,a){super(),this._configurationService=e,this._resourcePropertiesService=t,this._themeService=i,this._logService=o,this._undoRedoService=s,this._modeService=r,this._languageConfigurationService=a,this._onModelAdded=this._register(new n.Q5),this.onModelAdded=this._onModelAdded.event,this._onModelRemoved=this._register(new n.Q5),this.onModelRemoved=this._onModelRemoved.event,this._onModelModeChanged=this._register(new n.Q5),this.onModelModeChanged=this._onModelModeChanged.event,this._modelCreationOptionsByLanguageAndResource=Object.create(null),this._models={},this._disposedModels=new Map,this._disposedModelsHeapSize=0,this._semanticStyling=this._register(new F(this._themeService,this._modeService,this._logService)),this._register(this._configurationService.onDidChangeConfiguration((()=>this._updateModelOptions()))),this._updateModelOptions(),this._register(new R(this,this._themeService,this._configurationService,this._semanticStyling))}static _readModelOptions(e,t){var i;let n=a.DB.tabSize;if(e.editor&&void 0!==e.editor.tabSize){const t=parseInt(e.editor.tabSize,10);isNaN(t)||(n=t),n<1&&(n=1)}let o=n;if(e.editor&&void 0!==e.editor.indentSize&&"tabSize"!==e.editor.indentSize){const t=parseInt(e.editor.indentSize,10);isNaN(t)||(o=t),o<1&&(o=1)}let s=a.DB.insertSpaces;e.editor&&void 0!==e.editor.insertSpaces&&(s="false"!==e.editor.insertSpaces&&Boolean(e.editor.insertSpaces));let r=T;const l=e.eol;"\r\n"===l?r=2:"\n"===l&&(r=1);let c=a.DB.trimAutoWhitespace;e.editor&&void 0!==e.editor.trimAutoWhitespace&&(c="false"!==e.editor.trimAutoWhitespace&&Boolean(e.editor.trimAutoWhitespace));let d=a.DB.detectIndentation;e.editor&&void 0!==e.editor.detectIndentation&&(d="false"!==e.editor.detectIndentation&&Boolean(e.editor.detectIndentation));let h=a.DB.largeFileOptimizations;e.editor&&void 0!==e.editor.largeFileOptimizations&&(h="false"!==e.editor.largeFileOptimizations&&Boolean(e.editor.largeFileOptimizations));let u=a.DB.bracketPairColorizationOptions;return(null===(i=e.editor)||void 0===i?void 0:i.bracketPairColorization)&&"object"==typeof e.editor.bracketPairColorization&&(u={enabled:!!e.editor.bracketPairColorization.enabled}),{isForSimpleWidget:t,tabSize:n,indentSize:o,insertSpaces:s,detectIndentation:d,defaultEOL:r,trimAutoWhitespace:c,largeFileOptimizations:h,bracketPairColorizationOptions:u}}_getEOL(e,t){if(e)return this._resourcePropertiesService.getEOL(e,t);const i=this._configurationService.getValue("files.eol",{overrideIdentifier:t});return i&&"string"==typeof i&&"auto"!==i?i:3===s.OS||2===s.OS?"\n":"\r\n"}_shouldRestoreUndoStack(){const e=this._configurationService.getValue("files.restoreUndoStack");return"boolean"!=typeof e||e}getCreationOptions(t,i,n){let o=this._modelCreationOptionsByLanguageAndResource[t+i];if(!o){const s=this._configurationService.getValue("editor",{overrideIdentifier:t,resource:i}),r=this._getEOL(i,t);o=e._readModelOptions({editor:s,eol:r},n),this._modelCreationOptionsByLanguageAndResource[t+i]=o}return o}_updateModelOptions(){const t=this._modelCreationOptionsByLanguageAndResource;this._modelCreationOptionsByLanguageAndResource=Object.create(null);const i=Object.keys(this._models);for(let n=0,o=i.length;n<o;n++){const o=i[n],s=this._models[o],r=s.model.getLanguageId(),a=s.model.uri,l=t[r+a],c=this.getCreationOptions(r,a,s.model.isForSimpleWidget);e._setModelOptionsForModel(s.model,c,l)}}static _setModelOptionsForModel(e,t,i){i&&i.defaultEOL!==t.defaultEOL&&1===e.getLineCount()&&e.setEOL(1===t.defaultEOL?0:1),i&&i.detectIndentation===t.detectIndentation&&i.insertSpaces===t.insertSpaces&&i.tabSize===t.tabSize&&i.indentSize===t.indentSize&&i.trimAutoWhitespace===t.trimAutoWhitespace&&(0,S.fS)(i.bracketPairColorizationOptions,t.bracketPairColorizationOptions)||(t.detectIndentation?(e.detectIndentation(t.insertSpaces,t.tabSize),e.updateOptions({trimAutoWhitespace:t.trimAutoWhitespace,bracketColorizationOptions:t.bracketPairColorizationOptions})):e.updateOptions({insertSpaces:t.insertSpaces,tabSize:t.tabSize,indentSize:t.indentSize,trimAutoWhitespace:t.trimAutoWhitespace,bracketColorizationOptions:t.bracketPairColorizationOptions}))}_insertDisposedModel(e){this._disposedModels.set(D(e.uri),e),this._disposedModelsHeapSize+=e.heapSize}_removeDisposedModel(e){const t=this._disposedModels.get(D(e));return t&&(this._disposedModelsHeapSize-=t.heapSize),this._disposedModels.delete(D(e)),t}_ensureDisposedModelsHeapSize(e){if(this._disposedModelsHeapSize>e){const t=[];for(this._disposedModels.forEach((e=>{e.sharesUndoRedoStack||t.push(e)})),t.sort(((e,t)=>e.time-t.time));t.length>0&&this._disposedModelsHeapSize>e;){const e=t.shift();this._removeDisposedModel(e.uri),null!==e.initialUndoRedoSnapshot&&this._undoRedoService.restoreSnapshot(e.initialUndoRedoSnapshot)}}}_createModelData(e,t,i,n){const o=this.getCreationOptions(t,i,n),s=new l.yO(e,o,t,i,this._undoRedoService,this._modeService,this._languageConfigurationService);if(i&&this._disposedModels.has(D(i))){const e=this._removeDisposedModel(i),t=this._undoRedoService.getElements(i),n=I(s)===e.sha1;if(n||e.sharesUndoRedoStack){for(const e of t.past)(0,w.e9)(e)&&e.matchesResource(i)&&e.setModel(s);for(const e of t.future)(0,w.e9)(e)&&e.matchesResource(i)&&e.setModel(s);this._undoRedoService.setElementsValidFlag(i,!0,(e=>(0,w.e9)(e)&&e.matchesResource(i))),n&&(s._overwriteVersionId(e.versionId),s._overwriteAlternativeVersionId(e.alternativeVersionId),s._overwriteInitialUndoRedoSnapshot(e.initialUndoRedoSnapshot))}else null!==e.initialUndoRedoSnapshot&&this._undoRedoService.restoreSnapshot(e.initialUndoRedoSnapshot)}const r=D(s.uri);if(this._models[r])throw new Error("ModelService: Cannot add model because it already exists!");const a=new E(s,(e=>this._onWillDispose(e)),((e,t)=>this._onDidChangeLanguage(e,t)));return this._models[r]=a,a}createModel(e,t,i,n=!1){let o;return t?(o=this._createModelData(e,t.languageId,i,n),this.setMode(o.model,t)):o=this._createModelData(e,d.XT,i,n),this._onModelAdded.fire(o.model),o.model}setMode(e,t){if(!t)return;const i=this._models[D(e.uri)];i&&i.setLanguage(t)}getModels(){const e=[],t=Object.keys(this._models);for(let i=0,n=t.length;i<n;i++){const n=t[i];e.push(this._models[n].model)}return e}getModel(e){const t=D(e),i=this._models[t];return i?i.model:null}getSemanticTokensProviderStyling(e){return this._semanticStyling.get(e)}_schemaShouldMaintainUndoRedoElements(e){return e.scheme===y.lg.file||e.scheme===y.lg.vscodeRemote||e.scheme===y.lg.userData||e.scheme===y.lg.vscodeNotebookCell||"fake-fs"===e.scheme}_onWillDispose(t){const i=D(t.uri),n=this._models[i],o=this._undoRedoService.getUriComparisonKey(t.uri)!==t.uri.toString();let s=!1,r=0;if(o||this._shouldRestoreUndoStack()&&this._schemaShouldMaintainUndoRedoElements(t.uri)){const e=this._undoRedoService.getElements(t.uri);if(e.past.length>0||e.future.length>0){for(const i of e.past)(0,w.e9)(i)&&i.matchesResource(t.uri)&&(s=!0,r+=i.heapSize(t.uri),i.setModel(t.uri));for(const i of e.future)(0,w.e9)(i)&&i.matchesResource(t.uri)&&(s=!0,r+=i.heapSize(t.uri),i.setModel(t.uri))}}const a=e.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK;if(s)if(!o&&r>a){const e=n.model.getInitialUndoRedoSnapshot();null!==e&&this._undoRedoService.restoreSnapshot(e)}else this._ensureDisposedModelsHeapSize(a-r),this._undoRedoService.setElementsValidFlag(t.uri,!1,(e=>(0,w.e9)(e)&&e.matchesResource(t.uri))),this._insertDisposedModel(new M(t.uri,n.model.getInitialUndoRedoSnapshot(),Date.now(),o,r,I(t),t.getVersionId(),t.getAlternativeVersionId()));else if(!o){const e=n.model.getInitialUndoRedoSnapshot();null!==e&&this._undoRedoService.restoreSnapshot(e)}delete this._models[i],n.dispose(),delete this._modelCreationOptionsByLanguageAndResource[t.getLanguageId()+t.uri],this._onModelRemoved.fire(t)}_onDidChangeLanguage(t,i){const n=i.oldLanguage,o=t.getLanguageId(),s=this.getCreationOptions(n,t.uri,t.isForSimpleWidget),r=this.getCreationOptions(o,t.uri,t.isForSimpleWidget);e._setModelOptionsForModel(t,r,s),this._onModelModeChanged.fire({model:t,oldModeId:n})}};A.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK=20971520,A=L([N(0,g.Ui),N(1,u.y),N(2,m.XE),N(3,v.VZ),N(4,_.tJ),N(5,h.h),N(6,k.c_)],A);const O="editor.semanticHighlighting";function P(e,t,i){var n;const o=null===(n=i.getValue(O,{overrideIdentifier:e.getLanguageId(),resource:e.uri}))||void 0===n?void 0:n.enabled;return"boolean"==typeof o?o:t.getColorTheme().semanticHighlighting}class R extends o.JT{constructor(e,t,i,n){super(),this._watchers=Object.create(null),this._semanticStyling=n;const o=e=>{this._watchers[e.uri.toString()]=new V(e,t,this._semanticStyling)},s=(e,t)=>{t.dispose(),delete this._watchers[e.uri.toString()]},r=()=>{for(let n of e.getModels()){const e=this._watchers[n.uri.toString()];P(n,t,i)?e||o(n):e&&s(n,e)}};this._register(e.onModelAdded((e=>{P(e,t,i)&&o(e)}))),this._register(e.onModelRemoved((e=>{const t=this._watchers[e.uri.toString()];t&&s(e,t)}))),this._register(i.onDidChangeConfiguration((e=>{e.affectsConfiguration(O)&&r()}))),this._register(t.onDidColorThemeChange(r))}}class F extends o.JT{constructor(e,t,i){super(),this._themeService=e,this._modeService=t,this._logService=i,this._caches=new WeakMap,this._register(this._themeService.onDidColorThemeChange((()=>{this._caches=new WeakMap})))}get(e){return this._caches.has(e)||this._caches.set(e,new C.$(e.getLegend(),this._themeService,this._modeService,this._logService)),this._caches.get(e)}}class B{constructor(e,t,i){this.provider=e,this.resultId=t,this.data=i}dispose(){this.provider.releaseDocumentSemanticTokens(this.resultId)}}class V extends o.JT{constructor(e,t,i){super(),this._isDisposed=!1,this._model=e,this._semanticStyling=i,this._fetchDocumentSemanticTokens=this._register(new p.pY((()=>this._fetchDocumentSemanticTokensNow()),V.FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY)),this._currentDocumentResponse=null,this._currentDocumentRequestCancellationTokenSource=null,this._documentProvidersChangeListeners=[],this._register(this._model.onDidChangeContent((()=>{this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule()}))),this._register(this._model.onDidChangeLanguage((()=>{this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._currentDocumentRequestCancellationTokenSource&&(this._currentDocumentRequestCancellationTokenSource.cancel(),this._currentDocumentRequestCancellationTokenSource=null),this._setDocumentSemanticTokens(null,null,null,[]),this._fetchDocumentSemanticTokens.schedule(0)})));const n=()=>{(0,o.B9)(this._documentProvidersChangeListeners),this._documentProvidersChangeListeners=[];for(const t of c.wT.all(e))"function"==typeof t.onDidChange&&this._documentProvidersChangeListeners.push(t.onDidChange((()=>this._fetchDocumentSemanticTokens.schedule(0))))};n(),this._register(c.wT.onDidChange((()=>{n(),this._fetchDocumentSemanticTokens.schedule()}))),this._register(t.onDidColorThemeChange((e=>{this._setDocumentSemanticTokens(null,null,null,[]),this._fetchDocumentSemanticTokens.schedule()}))),this._fetchDocumentSemanticTokens.schedule(0)}dispose(){this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._currentDocumentRequestCancellationTokenSource&&(this._currentDocumentRequestCancellationTokenSource.cancel(),this._currentDocumentRequestCancellationTokenSource=null),this._setDocumentSemanticTokens(null,null,null,[]),this._isDisposed=!0,super.dispose()}_fetchDocumentSemanticTokensNow(){if(this._currentDocumentRequestCancellationTokenSource)return;if(!(0,x.Jc)(this._model))return void(this._currentDocumentResponse&&this._model.setSemanticTokens(null,!1));const e=new f.A,t=this._currentDocumentResponse?this._currentDocumentResponse.provider:null,i=this._currentDocumentResponse&&this._currentDocumentResponse.resultId||null,n=(0,x.ML)(this._model,t,i,e.token);this._currentDocumentRequestCancellationTokenSource=e;const o=[],s=this._model.onDidChangeContent((e=>{o.push(e)}));n.then((e=>{if(this._currentDocumentRequestCancellationTokenSource=null,s.dispose(),e){const{provider:t,tokens:i}=e,n=this._semanticStyling.get(t);this._setDocumentSemanticTokens(t,i||null,n,o)}else this._setDocumentSemanticTokens(null,null,null,o)}),(e=>{e&&(r.VV(e)||"string"==typeof e.message&&-1!==e.message.indexOf("busy"))||r.dL(e),this._currentDocumentRequestCancellationTokenSource=null,s.dispose(),o.length>0&&(this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule())}))}static _copy(e,t,i,n,o){for(let s=0;s<o;s++)i[n+s]=e[t+s]}_setDocumentSemanticTokens(e,t,i,n){const o=this._currentDocumentResponse,s=()=>{n.length>0&&!this._fetchDocumentSemanticTokens.isScheduled()&&this._fetchDocumentSemanticTokens.schedule()};if(this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._isDisposed)e&&t&&e.releaseDocumentSemanticTokens(t.resultId);else if(e&&i){if(!t)return this._model.setSemanticTokens(null,!0),void s();if((0,x.Vj)(t)){if(!o)return void this._model.setSemanticTokens(null,!0);if(0===t.edits.length)t={resultId:t.resultId,data:o.data};else{let e=0;for(const i of t.edits)e+=(i.data?i.data.length:0)-i.deleteCount;const i=o.data,n=new Uint32Array(i.length+e);let s=i.length,r=n.length;for(let e=t.edits.length-1;e>=0;e--){const o=t.edits[e],a=s-(o.start+o.deleteCount);a>0&&(V._copy(i,s-a,n,r-a,a),r-=a),o.data&&(V._copy(o.data,0,n,r-o.data.length,o.data.length),r-=o.data.length),s=o.start}s>0&&V._copy(i,0,n,0,s),t={resultId:t.resultId,data:n}}}if((0,x.Vl)(t)){this._currentDocumentResponse=new B(e,t.resultId,t.data);const o=(0,C.h)(t,i,this._model.getLanguageId());if(n.length>0)for(const e of n)for(const t of o)for(const i of e.changes)t.applyEdit(i.range,i.text);this._model.setSemanticTokens(o,!0)}else this._model.setSemanticTokens(null,!0);s()}else this._model.setSemanticTokens(null,!1)}}V.FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY=300},88216:(e,t,i)=>{"use strict";i.d(t,{S:()=>n});const n=(0,i(72065).yh)("textModelService")},65072:(e,t,i)=>{"use strict";i.d(t,{$:()=>d,h:()=>h});var n=i(44101),o=i(97781),s=i(43557),r=i(58409),a=i(71531),l=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},c=function(e,t){return function(i,n){t(i,n,e)}};let d=class{constructor(e,t,i,n){this._legend=e,this._themeService=t,this._modeService=i,this._logService=n,this._hashTable=new g,this._hasWarnedOverlappingTokens=!1}getMetadata(e,t,i){const o=this._modeService.languageIdCodec.encodeLanguageId(i),r=this._hashTable.get(e,t,o);let a;if(r)a=r.metadata,this._logService.getLevel()===s.in.Trace&&this._logService.trace(`SemanticTokensProviderStyling [CACHED] ${e} / ${t}: foreground ${n.NX.getForeground(a)}, fontStyle ${n.NX.getFontStyle(a).toString(2)}`);else{let r=this._legend.tokenTypes[e];const l=[];if(r){let e=t;for(let t=0;e>0&&t<this._legend.tokenModifiers.length;t++)1&e&&l.push(this._legend.tokenModifiers[t]),e>>=1;e>0&&this._logService.getLevel()===s.in.Trace&&(this._logService.trace(`SemanticTokensProviderStyling: unknown token modifier index: ${t.toString(2)} for legend: ${JSON.stringify(this._legend.tokenModifiers)}`),l.push("not-in-legend"));const n=this._themeService.getColorTheme().getTokenStyleMetadata(r,l,i);if(void 0===n)a=2147483647;else{if(a=0,void 0!==n.italic){a|=1|(n.italic?1:0)<<11}if(void 0!==n.bold){a|=2|(n.bold?2:0)<<11}if(void 0!==n.underline){a|=4|(n.underline?4:0)<<11}if(n.foreground){a|=8|n.foreground<<14}0===a&&(a=2147483647)}}else this._logService.getLevel()===s.in.Trace&&this._logService.trace(`SemanticTokensProviderStyling: unknown token type index: ${e} for legend: ${JSON.stringify(this._legend.tokenTypes)}`),a=2147483647,r="not-in-legend";this._hashTable.add(e,t,o,a),this._logService.getLevel()===s.in.Trace&&this._logService.trace(`SemanticTokensProviderStyling ${e} (${r}) / ${t} (${l.join(" ")}): foreground ${n.NX.getForeground(a)}, fontStyle ${n.NX.getFontStyle(a).toString(2)}`)}return a}warnOverlappingSemanticTokens(e,t){this._hasWarnedOverlappingTokens||(this._hasWarnedOverlappingTokens=!0,console.warn(`Overlapping semantic tokens detected at lineNumber ${e}, column ${t}`))}};function h(e,t,i){const n=e.data,o=e.data.length/5|0,s=Math.max(Math.ceil(o/1024),400),a=[];let l=0,c=1,d=0;for(;l<o;){const e=l;let h=Math.min(e+s,o);if(h<o){let t=h;for(;t-1>e&&0===n[5*t];)t--;if(t-1===e){let e=h;for(;e+1<o&&0===n[5*e];)e++;h=e}else h=t}let u=new Uint32Array(4*(h-e)),g=0,p=0,f=0,m=0,v=0;for(;l<h;){const e=5*l,o=n[e],s=n[e+1],r=c+o|0,a=0===o?d+s|0:s,h=n[e+2],_=n[e+3],b=n[e+4],w=t.getMetadata(_,b,i);2147483647!==w&&(0===p&&(p=r),f===r&&v>a&&(t.warnOverlappingSemanticTokens(r,a+1),m<a?u[g-4+2]=a:g-=4),u[g]=r-p,u[g+1]=a,u[g+2]=a+h,u[g+3]=w,g+=4,f=r,m=a,v=a+h),c=r,d=a,l++}g!==u.length&&(u=u.subarray(0,g));const _=new r.Wz(p,new r.OU(u));a.push(_)}return a}d=l([c(1,o.XE),c(2,a.h),c(3,s.VZ)],d);class u{constructor(e,t,i,n){this.tokenTypeIndex=e,this.tokenModifierSet=t,this.languageId=i,this.metadata=n,this.next=null}}class g{constructor(){this._elementsCount=0,this._currentLengthIndex=0,this._currentLength=g._SIZES[this._currentLengthIndex],this._growCount=Math.round(this._currentLengthIndex+1<g._SIZES.length?2/3*this._currentLength:0),this._elements=[],g._nullOutEntries(this._elements,this._currentLength)}static _nullOutEntries(e,t){for(let i=0;i<t;i++)e[i]=null}_hash2(e,t){return(e<<5)-e+t|0}_hashFunc(e,t,i){return this._hash2(this._hash2(e,t),i)%this._currentLength}get(e,t,i){const n=this._hashFunc(e,t,i);let o=this._elements[n];for(;o;){if(o.tokenTypeIndex===e&&o.tokenModifierSet===t&&o.languageId===i)return o;o=o.next}return null}add(e,t,i,n){if(this._elementsCount++,0!==this._growCount&&this._elementsCount>=this._growCount){const e=this._elements;this._currentLengthIndex++,this._currentLength=g._SIZES[this._currentLengthIndex],this._growCount=Math.round(this._currentLengthIndex+1<g._SIZES.length?2/3*this._currentLength:0),this._elements=[],g._nullOutEntries(this._elements,this._currentLength);for(const t of e){let e=t;for(;e;){const t=e.next;e.next=null,this._add(e),e=t}}}this._add(new u(e,t,i,n))}_add(e){const t=this._hashFunc(e.tokenTypeIndex,e.tokenModifierSet,e.languageId);e.next=this._elements[t],this._elements[t]=e}}g._SIZES=[3,7,13,31,61,127,251,509,1021,2039,4093,8191,16381,32749,65521,131071,262139,524287,1048573,2097143]},33187:(e,t,i)=>{"use strict";i.d(t,{V:()=>o,y:()=>s});var n=i(72065);const o=(0,n.yh)("textResourceConfigurationService"),s=(0,n.yh)("textResourcePropertiesService")},20913:(e,t,i)=>{"use strict";i.d(t,{B8:()=>c,Oe:()=>n,UL:()=>h,UX:()=>a,aq:()=>l,ld:()=>r,qq:()=>s,ug:()=>o,xi:()=>d});var n,o,s,r,a,l,c,d,h,u=i(63580);!function(e){e.noSelection=u.N("noSelection","No selection"),e.singleSelectionRange=u.N("singleSelectionRange","Line {0}, Column {1} ({2} selected)"),e.singleSelection=u.N("singleSelection","Line {0}, Column {1}"),e.multiSelectionRange=u.N("multiSelectionRange","{0} selections ({1} characters selected)"),e.multiSelection=u.N("multiSelection","{0} selections"),e.emergencyConfOn=u.N("emergencyConfOn","Now changing the setting `accessibilitySupport` to 'on'."),e.openingDocs=u.N("openingDocs","Now opening the Editor Accessibility documentation page."),e.readonlyDiffEditor=u.N("readonlyDiffEditor"," in a read-only pane of a diff editor."),e.editableDiffEditor=u.N("editableDiffEditor"," in a pane of a diff editor."),e.readonlyEditor=u.N("readonlyEditor"," in a read-only code editor"),e.editableEditor=u.N("editableEditor"," in a code editor"),e.changeConfigToOnMac=u.N("changeConfigToOnMac","To configure the editor to be optimized for usage with a Screen Reader press Command+E now."),e.changeConfigToOnWinLinux=u.N("changeConfigToOnWinLinux","To configure the editor to be optimized for usage with a Screen Reader press Control+E now."),e.auto_on=u.N("auto_on","The editor is configured to be optimized for usage with a Screen Reader."),e.auto_off=u.N("auto_off","The editor is configured to never be optimized for usage with a Screen Reader, which is not the case at this time."),e.tabFocusModeOnMsg=u.N("tabFocusModeOnMsg","Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}."),e.tabFocusModeOnMsgNoKb=u.N("tabFocusModeOnMsgNoKb","Pressing Tab in the current editor will move focus to the next focusable element. The command {0} is currently not triggerable by a keybinding."),e.tabFocusModeOffMsg=u.N("tabFocusModeOffMsg","Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}."),e.tabFocusModeOffMsgNoKb=u.N("tabFocusModeOffMsgNoKb","Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding."),e.openDocMac=u.N("openDocMac","Press Command+H now to open a browser window with more information related to editor accessibility."),e.openDocWinLinux=u.N("openDocWinLinux","Press Control+H now to open a browser window with more information related to editor accessibility."),e.outroMsg=u.N("outroMsg","You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape."),e.showAccessibilityHelpAction=u.N("showAccessibilityHelpAction","Show Accessibility Help")}(n||(n={})),function(e){e.inspectTokensAction=u.N("inspectTokens","Developer: Inspect Tokens")}(o||(o={})),function(e){e.gotoLineActionLabel=u.N("gotoLineActionLabel","Go to Line/Column...")}(s||(s={})),function(e){e.helpQuickAccessActionLabel=u.N("helpQuickAccess","Show all Quick Access Providers")}(r||(r={})),function(e){e.quickCommandActionLabel=u.N("quickCommandActionLabel","Command Palette"),e.quickCommandHelp=u.N("quickCommandActionHelp","Show And Run Commands")}(a||(a={})),function(e){e.quickOutlineActionLabel=u.N("quickOutlineActionLabel","Go to Symbol..."),e.quickOutlineByCategoryActionLabel=u.N("quickOutlineByCategoryActionLabel","Go to Symbol by Category...")}(l||(l={})),function(e){e.editorViewAccessibleLabel=u.N("editorViewAccessibleLabel","Editor content"),e.accessibilityHelpMessage=u.N("accessibilityHelpMessage","Press Alt+F1 for Accessibility Options.")}(c||(c={})),function(e){e.toggleHighContrast=u.N("toggleHighContrast","Toggle High Contrast Theme")}(d||(d={})),function(e){e.bulkEditServiceSummary=u.N("bulkEditServiceSummary","Made {0} edits in {1} files")}(h||(h={}))},27869:(e,t,i)=>{"use strict";i.d(t,{CE:()=>V,DD:()=>w,DS:()=>K,Dl:()=>S,HV:()=>ee,Jn:()=>Z,Kh:()=>a,L7:()=>J,Mm:()=>l,N5:()=>T,Qb:()=>Y,Re:()=>P,TC:()=>x,To:()=>X,UP:()=>W,Vs:()=>B,YF:()=>G,Ym:()=>v,Yp:()=>C,eS:()=>R,e_:()=>L,f9:()=>te,fY:()=>p,hw:()=>_,kp:()=>D,lK:()=>O,lS:()=>q,m$:()=>$,m1:()=>z,m3:()=>Q,m9:()=>A,n0:()=>g,oV:()=>U,r0:()=>H,tR:()=>m,ts:()=>j,x3:()=>E,zJ:()=>F,zk:()=>y,zu:()=>I,zw:()=>k});var n=i(63580),o=i(41264),s=i(73910),r=i(97781);const a=(0,s.P6)("editor.lineHighlightBackground",{dark:null,light:null,hc:null},n.N("lineHighlight","Background color for the highlight of line at the cursor position.")),l=(0,s.P6)("editor.lineHighlightBorder",{dark:"#282828",light:"#eeeeee",hc:"#f38518"},n.N("lineHighlightBorderBox","Background color for the border around the line at the cursor position.")),c=(0,s.P6)("editor.rangeHighlightBackground",{dark:"#ffffff0b",light:"#fdff0033",hc:null},n.N("rangeHighlight","Background color of highlighted ranges, like by quick open and find features. The color must not be opaque so as not to hide underlying decorations."),!0),d=(0,s.P6)("editor.rangeHighlightBorder",{dark:null,light:null,hc:s.xL},n.N("rangeHighlightBorder","Background color of the border around highlighted ranges."),!0),h=(0,s.P6)("editor.symbolHighlightBackground",{dark:s.MU,light:s.MU,hc:null},n.N("symbolHighlight","Background color of highlighted symbol, like for go to definition or go next/previous symbol. The color must not be opaque so as not to hide underlying decorations."),!0),u=(0,s.P6)("editor.symbolHighlightBorder",{dark:null,light:null,hc:s.xL},n.N("symbolHighlightBorder","Background color of the border around highlighted symbols."),!0),g=(0,s.P6)("editorCursor.foreground",{dark:"#AEAFAD",light:o.Il.black,hc:o.Il.white},n.N("caret","Color of the editor cursor.")),p=(0,s.P6)("editorCursor.background",null,n.N("editorCursorBackground","The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.")),f=(0,s.P6)("editorWhitespace.foreground",{dark:"#e3e4e229",light:"#33333333",hc:"#e3e4e229"},n.N("editorWhitespaces","Color of whitespace characters in the editor.")),m=(0,s.P6)("editorIndentGuide.background",{dark:f,light:f,hc:f},n.N("editorIndentGuides","Color of the editor indentation guides.")),v=(0,s.P6)("editorIndentGuide.activeBackground",{dark:f,light:f,hc:f},n.N("editorActiveIndentGuide","Color of the active editor indentation guides.")),_=(0,s.P6)("editorLineNumber.foreground",{dark:"#858585",light:"#237893",hc:o.Il.white},n.N("editorLineNumbers","Color of editor line numbers.")),b=(0,s.P6)("editorActiveLineNumber.foreground",{dark:"#c6c6c6",light:"#0B216F",hc:s.xL},n.N("editorActiveLineNumber","Color of editor active line number"),!1,n.N("deprecatedEditorActiveLineNumber","Id is deprecated. Use 'editorLineNumber.activeForeground' instead.")),w=(0,s.P6)("editorLineNumber.activeForeground",{dark:b,light:b,hc:b},n.N("editorActiveLineNumber","Color of editor active line number")),y=(0,s.P6)("editorRuler.foreground",{dark:"#5A5A5A",light:o.Il.lightgrey,hc:o.Il.white},n.N("editorRuler","Color of the editor rulers.")),C=(0,s.P6)("editorCodeLens.foreground",{dark:"#999999",light:"#919191",hc:"#999999"},n.N("editorCodeLensForeground","Foreground color of editor CodeLens")),x=(0,s.P6)("editorBracketMatch.background",{dark:"#0064001a",light:"#0064001a",hc:"#0064001a"},n.N("editorBracketMatchBackground","Background color behind matching brackets")),S=(0,s.P6)("editorBracketMatch.border",{dark:"#888",light:"#B9B9B9",hc:s.lR},n.N("editorBracketMatchBorder","Color for matching brackets boxes")),k=(0,s.P6)("editorOverviewRuler.border",{dark:"#7f7f7f4d",light:"#7f7f7f4d",hc:"#7f7f7f4d"},n.N("editorOverviewRulerBorder","Color of the overview ruler border.")),L=(0,s.P6)("editorOverviewRuler.background",null,n.N("editorOverviewRulerBackground","Background color of the editor overview ruler. Only used when the minimap is enabled and placed on the right side of the editor.")),N=(0,s.P6)("editorGutter.background",{dark:s.cv,light:s.cv,hc:s.cv},n.N("editorGutter","Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.")),D=(0,s.P6)("editorUnnecessaryCode.border",{dark:null,light:null,hc:o.Il.fromHex("#fff").transparent(.8)},n.N("unnecessaryCodeBorder","Border color of unnecessary (unused) source code in the editor.")),I=(0,s.P6)("editorUnnecessaryCode.opacity",{dark:o.Il.fromHex("#000a"),light:o.Il.fromHex("#0007"),hc:null},n.N("unnecessaryCodeOpacity","Opacity of unnecessary (unused) source code in the editor. For example, \"#000000c0\" will render the code with 75% opacity. For high contrast themes, use the  'editorUnnecessaryCode.border' theme color to underline unnecessary code instead of fading it out.")),E=(0,s.P6)("editorGhostText.border",{dark:null,light:null,hc:o.Il.fromHex("#fff").transparent(.8)},n.N("editorGhostTextBorder","Border color of ghost text in the editor.")),T=(0,s.P6)("editorGhostText.foreground",{dark:o.Il.fromHex("#ffffff56"),light:o.Il.fromHex("#0007"),hc:null},n.N("editorGhostTextForeground","Foreground color of the ghost text in the editor.")),M=new o.Il(new o.VS(0,122,204,.6)),A=(0,s.P6)("editorOverviewRuler.rangeHighlightForeground",{dark:M,light:M,hc:M},n.N("overviewRulerRangeHighlight","Overview ruler marker color for range highlights. The color must not be opaque so as not to hide underlying decorations."),!0),O=(0,s.P6)("editorOverviewRuler.errorForeground",{dark:new o.Il(new o.VS(255,18,18,.7)),light:new o.Il(new o.VS(255,18,18,.7)),hc:new o.Il(new o.VS(255,50,50,1))},n.N("overviewRuleError","Overview ruler marker color for errors.")),P=(0,s.P6)("editorOverviewRuler.warningForeground",{dark:s.uo,light:s.uo,hc:s.pW},n.N("overviewRuleWarning","Overview ruler marker color for warnings.")),R=(0,s.P6)("editorOverviewRuler.infoForeground",{dark:s.c6,light:s.c6,hc:s.T8},n.N("overviewRuleInfo","Overview ruler marker color for infos.")),F=(0,s.P6)("editorBracketHighlight.foreground1",{dark:"#FFD700",light:"#0431FAFF",hc:"#FFD700"},n.N("editorBracketHighlightForeground1","Foreground color of brackets (1). Requires enabling bracket pair colorization.")),B=(0,s.P6)("editorBracketHighlight.foreground2",{dark:"#DA70D6",light:"#319331FF",hc:"#DA70D6"},n.N("editorBracketHighlightForeground2","Foreground color of brackets (2). Requires enabling bracket pair colorization.")),V=(0,s.P6)("editorBracketHighlight.foreground3",{dark:"#179FFF",light:"#7B3814FF",hc:"#87CEFA"},n.N("editorBracketHighlightForeground3","Foreground color of brackets (3). Requires enabling bracket pair colorization.")),W=(0,s.P6)("editorBracketHighlight.foreground4",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketHighlightForeground4","Foreground color of brackets (4). Requires enabling bracket pair colorization.")),H=(0,s.P6)("editorBracketHighlight.foreground5",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketHighlightForeground5","Foreground color of brackets (5). Requires enabling bracket pair colorization.")),z=(0,s.P6)("editorBracketHighlight.foreground6",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketHighlightForeground6","Foreground color of brackets (6). Requires enabling bracket pair colorization.")),j=(0,s.P6)("editorBracketHighlight.unexpectedBracket.foreground",{dark:new o.Il(new o.VS(255,18,18,.8)),light:new o.Il(new o.VS(255,18,18,.8)),hc:new o.Il(new o.VS(255,50,50,1))},n.N("editorBracketHighlightUnexpectedBracketForeground","Foreground color of unexpected brackets.")),U=(0,s.P6)("editorBracketPairGuide.background1",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.background1","Background color of inactive bracket pair guides (1). Requires enabling bracket pair guides.")),$=(0,s.P6)("editorBracketPairGuide.background2",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.background2","Background color of inactive bracket pair guides (2). Requires enabling bracket pair guides.")),K=(0,s.P6)("editorBracketPairGuide.background3",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.background3","Background color of inactive bracket pair guides (3). Requires enabling bracket pair guides.")),q=(0,s.P6)("editorBracketPairGuide.background4",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.background4","Background color of inactive bracket pair guides (4). Requires enabling bracket pair guides.")),Z=(0,s.P6)("editorBracketPairGuide.background5",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.background5","Background color of inactive bracket pair guides (5). Requires enabling bracket pair guides.")),G=(0,s.P6)("editorBracketPairGuide.background6",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.background6","Background color of inactive bracket pair guides (6). Requires enabling bracket pair guides.")),Y=(0,s.P6)("editorBracketPairGuide.activeBackground1",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.activeBackground1","Background color of active bracket pair guides (1). Requires enabling bracket pair guides.")),Q=(0,s.P6)("editorBracketPairGuide.activeBackground2",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.activeBackground2","Background color of active bracket pair guides (2). Requires enabling bracket pair guides.")),X=(0,s.P6)("editorBracketPairGuide.activeBackground3",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.activeBackground3","Background color of active bracket pair guides (3). Requires enabling bracket pair guides.")),J=(0,s.P6)("editorBracketPairGuide.activeBackground4",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.activeBackground4","Background color of active bracket pair guides (4). Requires enabling bracket pair guides.")),ee=(0,s.P6)("editorBracketPairGuide.activeBackground5",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.activeBackground5","Background color of active bracket pair guides (5). Requires enabling bracket pair guides.")),te=(0,s.P6)("editorBracketPairGuide.activeBackground6",{dark:"#00000000",light:"#00000000",hc:"#00000000"},n.N("editorBracketPairGuide.activeBackground6","Background color of active bracket pair guides (6). Requires enabling bracket pair guides."));(0,r.Ic)(((e,t)=>{const i=e.getColor(s.cv);i&&t.addRule(`.monaco-editor, .monaco-editor-background, .monaco-editor .inputarea.ime-input { background-color: ${i}; }`);const n=e.getColor(s.NO);n&&t.addRule(`.monaco-editor, .monaco-editor .inputarea.ime-input { color: ${n}; }`);const o=e.getColor(N);o&&t.addRule(`.monaco-editor .margin { background-color: ${o}; }`);const r=e.getColor(c);r&&t.addRule(`.monaco-editor .rangeHighlight { background-color: ${r}; }`);const a=e.getColor(d);a&&t.addRule(`.monaco-editor .rangeHighlight { border: 1px ${"hc"===e.type?"dotted":"solid"} ${a}; }`);const l=e.getColor(h);l&&t.addRule(`.monaco-editor .symbolHighlight { background-color: ${l}; }`);const g=e.getColor(u);g&&t.addRule(`.monaco-editor .symbolHighlight { border: 1px ${"hc"===e.type?"dotted":"solid"} ${g}; }`);const p=e.getColor(f);p&&(t.addRule(`.monaco-editor .mtkw { color: ${p} !important; }`),t.addRule(`.monaco-editor .mtkz { color: ${p} !important; }`))}))},92003:(e,t,i)=>{"use strict";i.d(t,{EY:()=>o,Tj:()=>s});class n{constructor(e,t,i){this._colorZoneBrand=void 0,this.from=0|e,this.to=0|t,this.colorId=0|i}static compare(e,t){return e.colorId===t.colorId?e.from===t.from?e.to-t.to:e.from-t.from:e.colorId-t.colorId}}class o{constructor(e,t,i){this._overviewRulerZoneBrand=void 0,this.startLineNumber=e,this.endLineNumber=t,this.color=i,this._colorZone=null}static compare(e,t){return e.color===t.color?e.startLineNumber===t.startLineNumber?e.endLineNumber-t.endLineNumber:e.startLineNumber-t.startLineNumber:e.color<t.color?-1:1}setColorZone(e){this._colorZone=e}getColorZones(){return this._colorZone}}class s{constructor(e){this._getVerticalOffsetForLine=e,this._zones=[],this._colorZonesInvalid=!1,this._lineHeight=0,this._domWidth=0,this._domHeight=0,this._outerHeight=0,this._pixelRatio=1,this._lastAssignedId=0,this._color2Id=Object.create(null),this._id2Color=[]}getId2Color(){return this._id2Color}setZones(e){this._zones=e,this._zones.sort(o.compare)}setLineHeight(e){return this._lineHeight!==e&&(this._lineHeight=e,this._colorZonesInvalid=!0,!0)}setPixelRatio(e){this._pixelRatio=e,this._colorZonesInvalid=!0}getDOMWidth(){return this._domWidth}getCanvasWidth(){return this._domWidth*this._pixelRatio}setDOMWidth(e){return this._domWidth!==e&&(this._domWidth=e,this._colorZonesInvalid=!0,!0)}getDOMHeight(){return this._domHeight}getCanvasHeight(){return this._domHeight*this._pixelRatio}setDOMHeight(e){return this._domHeight!==e&&(this._domHeight=e,this._colorZonesInvalid=!0,!0)}getOuterHeight(){return this._outerHeight}setOuterHeight(e){return this._outerHeight!==e&&(this._outerHeight=e,this._colorZonesInvalid=!0,!0)}resolveColorZones(){const e=this._colorZonesInvalid,t=Math.floor(this._lineHeight),i=Math.floor(this.getCanvasHeight()),o=i/Math.floor(this._outerHeight),s=Math.floor(4*this._pixelRatio/2);let r=[];for(let a=0,l=this._zones.length;a<l;a++){const l=this._zones[a];if(!e){const e=l.getColorZones();if(e){r.push(e);continue}}const c=Math.floor(o*this._getVerticalOffsetForLine(l.startLineNumber)),d=Math.floor(o*(this._getVerticalOffsetForLine(l.endLineNumber)+t));let h=Math.floor((c+d)/2),u=d-h;u<s&&(u=s),h-u<0&&(h=u),h+u>i&&(h=i-u);const g=l.color;let p=this._color2Id[g];p||(p=++this._lastAssignedId,this._color2Id[g]=p,this._id2Color[p]=g);const f=new n(h-u,h+u,p);l.setColorZone(f),r.push(f)}return this._colorZonesInvalid=!1,r.sort(n.compare),r}}},92550:(e,t,i)=>{"use strict";i.d(t,{Kp:()=>o,k:()=>a});var n=i(97295);class o{constructor(e,t,i,n){this.startColumn=e,this.endColumn=t,this.className=i,this.type=n,this._lineDecorationBrand=void 0}static _equals(e,t){return e.startColumn===t.startColumn&&e.endColumn===t.endColumn&&e.className===t.className&&e.type===t.type}static equalsArr(e,t){const i=e.length;if(i!==t.length)return!1;for(let n=0;n<i;n++)if(!o._equals(e[n],t[n]))return!1;return!0}static extractWrapped(e,t,i){if(0===e.length)return e;const n=t+1,s=i+1,r=i-t,a=[];let l=0;for(const t of e)t.endColumn<=n||t.startColumn>=s||(a[l++]=new o(Math.max(1,t.startColumn-n+1),Math.min(r+1,t.endColumn-n+1),t.className,t.type));return a}static filter(e,t,i,n){if(0===e.length)return[];let s=[],r=0;for(let a=0,l=e.length;a<l;a++){const l=e[a],c=l.range;if(c.endLineNumber<t||c.startLineNumber>t)continue;if(c.isEmpty()&&(0===l.type||3===l.type))continue;const d=c.startLineNumber===t?c.startColumn:i,h=c.endLineNumber===t?c.endColumn:n;s[r++]=new o(d,h,l.inlineClassName,l.type)}return s}static _typeCompare(e,t){const i=[2,0,1,3];return i[e]-i[t]}static compare(e,t){if(e.startColumn!==t.startColumn)return e.startColumn-t.startColumn;if(e.endColumn!==t.endColumn)return e.endColumn-t.endColumn;const i=o._typeCompare(e.type,t.type);return 0!==i?i:e.className!==t.className?e.className<t.className?-1:1:0}}class s{constructor(e,t,i,n){this.startOffset=e,this.endOffset=t,this.className=i,this.metadata=n}}class r{constructor(){this.stopOffsets=[],this.classNames=[],this.metadata=[],this.count=0}static _metadata(e){let t=0;for(let i=0,n=e.length;i<n;i++)t|=e[i];return t}consumeLowerThan(e,t,i){for(;this.count>0&&this.stopOffsets[0]<e;){let e=0;for(;e+1<this.count&&this.stopOffsets[e]===this.stopOffsets[e+1];)e++;i.push(new s(t,this.stopOffsets[e],this.classNames.join(" "),r._metadata(this.metadata))),t=this.stopOffsets[e]+1,this.stopOffsets.splice(0,e+1),this.classNames.splice(0,e+1),this.metadata.splice(0,e+1),this.count-=e+1}return this.count>0&&t<e&&(i.push(new s(t,e-1,this.classNames.join(" "),r._metadata(this.metadata))),t=e),t}insert(e,t,i){if(0===this.count||this.stopOffsets[this.count-1]<=e)this.stopOffsets.push(e),this.classNames.push(t),this.metadata.push(i);else for(let n=0;n<this.count;n++)if(this.stopOffsets[n]>=e){this.stopOffsets.splice(n,0,e),this.classNames.splice(n,0,t),this.metadata.splice(n,0,i);break}this.count++}}class a{static normalize(e,t){if(0===t.length)return[];let i=[];const o=new r;let s=0;for(let r=0,a=t.length;r<a;r++){const a=t[r];let l=a.startColumn,c=a.endColumn;const d=a.className,h=1===a.type?2:2===a.type?4:0;if(l>1){const t=e.charCodeAt(l-2);n.ZG(t)&&l--}if(c>1){const t=e.charCodeAt(c-2);n.ZG(t)&&c--}const u=l-1,g=c-2;s=o.consumeLowerThan(u,s,i),0===o.count&&(s=u),o.insert(g,d,h)}return o.consumeLowerThan(1073741824,s,i),i}}},77736:(e,t,i)=>{"use strict";i.d(t,{IJ:()=>l,Nd:()=>c,d1:()=>u,tF:()=>p,zG:()=>a});var n=i(97295),o=i(50072),s=i(92550);class r{constructor(e,t,i){this._linePartBrand=void 0,this.endIndex=e,this.type=t,this.metadata=i}isWhitespace(){return!!(1&this.metadata)}isPseudoAfter(){return!!(4&this.metadata)}}class a{constructor(e,t){this.startOffset=e,this.endOffset=t}equals(e){return this.startOffset===e.startOffset&&this.endOffset===e.endOffset}}class l{constructor(e,t,i,n,o,r,a,l,c,d,h,u,g,p,f,m,v,_,b){this.useMonospaceOptimizations=e,this.canUseHalfwidthRightwardsArrow=t,this.lineContent=i,this.continuesWithWrappedLine=n,this.isBasicASCII=o,this.containsRTL=r,this.fauxIndentLength=a,this.lineTokens=l,this.lineDecorations=c.sort(s.Kp.compare),this.tabSize=d,this.startVisibleColumn=h,this.spaceWidth=u,this.stopRenderingLineAfter=f,this.renderWhitespace="all"===m?4:"boundary"===m?1:"selection"===m?2:"trailing"===m?3:0,this.renderControlCharacters=v,this.fontLigatures=_,this.selectionsOnLine=b&&b.sort(((e,t)=>e.startOffset<t.startOffset?-1:1));Math.abs(p-u)<Math.abs(g-u)?(this.renderSpaceWidth=p,this.renderSpaceCharCode=11825):(this.renderSpaceWidth=g,this.renderSpaceCharCode=183)}sameSelection(e){if(null===this.selectionsOnLine)return null===e;if(null===e)return!1;if(e.length!==this.selectionsOnLine.length)return!1;for(let t=0;t<this.selectionsOnLine.length;t++)if(!this.selectionsOnLine[t].equals(e[t]))return!1;return!0}equals(e){return this.useMonospaceOptimizations===e.useMonospaceOptimizations&&this.canUseHalfwidthRightwardsArrow===e.canUseHalfwidthRightwardsArrow&&this.lineContent===e.lineContent&&this.continuesWithWrappedLine===e.continuesWithWrappedLine&&this.isBasicASCII===e.isBasicASCII&&this.containsRTL===e.containsRTL&&this.fauxIndentLength===e.fauxIndentLength&&this.tabSize===e.tabSize&&this.startVisibleColumn===e.startVisibleColumn&&this.spaceWidth===e.spaceWidth&&this.renderSpaceWidth===e.renderSpaceWidth&&this.renderSpaceCharCode===e.renderSpaceCharCode&&this.stopRenderingLineAfter===e.stopRenderingLineAfter&&this.renderWhitespace===e.renderWhitespace&&this.renderControlCharacters===e.renderControlCharacters&&this.fontLigatures===e.fontLigatures&&s.Kp.equalsArr(this.lineDecorations,e.lineDecorations)&&this.lineTokens.equals(e.lineTokens)&&this.sameSelection(e.selectionsOnLine)}}class c{constructor(e,t){this.partIndex=e,this.charIndex=t}}class d{constructor(e,t){this.length=e,this._data=new Uint32Array(this.length),this._absoluteOffsets=new Uint32Array(this.length)}static getPartIndex(e){return(4294901760&e)>>>16}static getCharIndex(e){return(65535&e)>>>0}setColumnInfo(e,t,i,n){const o=(t<<16|i<<0)>>>0;this._data[e-1]=o,this._absoluteOffsets[e-1]=n+i}getAbsoluteOffset(e){return 0===this._absoluteOffsets.length?0:this._absoluteOffsets[e-1]}charOffsetToPartData(e){return 0===this.length?0:e<0?this._data[0]:e>=this.length?this._data[this.length-1]:this._data[e]}getDomPosition(e){const t=this.charOffsetToPartData(e-1),i=d.getPartIndex(t),n=d.getCharIndex(t);return new c(i,n)}getColumn(e,t){return this.partDataToCharOffset(e.partIndex,t,e.charIndex)+1}partDataToCharOffset(e,t,i){if(0===this.length)return 0;let n=(e<<16|i<<0)>>>0,o=0,s=this.length-1;for(;o+1<s;){let e=o+s>>>1,t=this._data[e];if(t===n)return e;t>n?s=e:o=e}if(o===s)return o;let r=this._data[o],a=this._data[s];if(r===n)return o;if(a===n)return s;let l,c=d.getPartIndex(r),h=d.getCharIndex(r);return l=c!==d.getPartIndex(a)?t:d.getCharIndex(a),i-h<=l-i?o:s}}class h{constructor(e,t,i){this._renderLineOutputBrand=void 0,this.characterMapping=e,this.containsRTL=t,this.containsForeignElements=i}}function u(e,t){if(0===e.lineContent.length){if(e.lineDecorations.length>0){t.appendASCIIString("<span>");let i=0,n=0,o=0;for(const s of e.lineDecorations)1!==s.type&&2!==s.type||(t.appendASCIIString('<span class="'),t.appendASCIIString(s.className),t.appendASCIIString('"></span>'),1===s.type&&(o|=1,i++),2===s.type&&(o|=2,n++));t.appendASCIIString("</span>");const s=new d(1,i+n);return s.setColumnInfo(1,i,0,0),new h(s,!1,o)}return t.appendASCIIString("<span><span></span></span>"),new h(new d(0,0),!1,0)}return function(e,t){const i=e.fontIsMonospace,o=e.canUseHalfwidthRightwardsArrow,s=e.containsForeignElements,r=e.lineContent,a=e.len,l=e.isOverflowing,c=e.parts,u=e.fauxIndentLength,g=e.tabSize,p=e.startVisibleColumn,f=e.containsRTL,_=e.spaceWidth,b=e.renderSpaceCharCode,w=e.renderWhitespace,y=e.renderControlCharacters,C=new d(a+1,c.length);let x=!1,S=0,k=p,L=0,N=0,D=0,I=0;f?t.appendASCIIString('<span dir="ltr">'):t.appendASCIIString("<span>");for(let e=0,l=c.length;e<l;e++){I+=D;const l=c[e],d=l.endIndex,h=l.type,p=0!==w&&l.isWhitespace(),f=p&&!i&&("mtkw"===h||!s),E=S===d&&l.isPseudoAfter();if(L=0,t.appendASCIIString('<span class="'),t.appendASCIIString(f?"mtkz":h),t.appendASCII(34),p){let i=0;{let e=S,t=k;for(;e<d;e++){const n=0|(9===r.charCodeAt(e)?g-t%g:1);i+=n,e>=u&&(t+=n)}}for(f&&(t.appendASCIIString(' style="width:'),t.appendASCIIString(String(_*i)),t.appendASCIIString('px"')),t.appendASCII(62);S<d;S++){C.setColumnInfo(S+1,e-N,L,I),N=0;let i;if(9===r.charCodeAt(S)){i=g-k%g|0,!o||i>1?t.write1(8594):t.write1(65515);for(let e=2;e<=i;e++)t.write1(160)}else i=1,t.write1(b);L+=i,S>=u&&(k+=i)}D=i}else{let i=0;for(t.appendASCII(62);S<d;S++){C.setColumnInfo(S+1,e-N,L,I),N=0;const o=r.charCodeAt(S);let s=1,a=1;switch(o){case 9:s=g-k%g,a=s;for(let e=1;e<=s;e++)t.write1(160);break;case 32:t.write1(160);break;case 60:t.appendASCIIString("&lt;");break;case 62:t.appendASCIIString("&gt;");break;case 38:t.appendASCIIString("&amp;");break;case 0:y?t.write1(9216):t.appendASCIIString("&#00;");break;case 65279:case 8232:case 8233:case 133:t.write1(65533);break;default:n.K7(o)&&a++,y&&o<32?t.write1(9216+o):y&&127===o?t.write1(9249):y&&m(o)?(t.appendASCIIString("[U+"),t.appendASCIIString(v(o)),t.appendASCIIString("]"),s=8):t.write1(o)}L+=s,i+=s,S>=u&&(k+=a)}D=i}E?N++:N=0,S>=a&&!x&&l.isPseudoAfter()&&(x=!0,C.setColumnInfo(S+1,e,L,I)),t.appendASCIIString("</span>")}x||C.setColumnInfo(a+1,c.length-1,L,I);l&&t.appendASCIIString("<span>&hellip;</span>");return t.appendASCIIString("</span>"),new h(C,f,s)}(function(e){const t=e.lineContent;let i,o;-1!==e.stopRenderingLineAfter&&e.stopRenderingLineAfter<t.length?(i=!0,o=e.stopRenderingLineAfter):(i=!1,o=t.length);let a=function(e,t,i){let n=[],o=0;t>0&&(n[o++]=new r(t,"",0));for(let s=0,a=e.getCount();s<a;s++){const a=e.getEndOffset(s);if(a<=t)continue;const l=e.getClassName(s);if(a>=i){n[o++]=new r(i,l,0);break}n[o++]=new r(a,l,0)}return n}(e.lineTokens,e.fauxIndentLength,o);(4===e.renderWhitespace||1===e.renderWhitespace||2===e.renderWhitespace&&e.selectionsOnLine||3===e.renderWhitespace)&&(a=function(e,t,i,o){const s=e.continuesWithWrappedLine,a=e.fauxIndentLength,l=e.tabSize,c=e.startVisibleColumn,d=e.useMonospaceOptimizations,h=e.selectionsOnLine,u=1===e.renderWhitespace,g=3===e.renderWhitespace,p=e.renderSpaceWidth!==e.spaceWidth;let f=[],m=0,v=0,_=o[v].type,b=o[v].endIndex;const w=o.length;let y,C=!1,x=n.LC(t);-1===x?(C=!0,x=i,y=i):y=n.ow(t);let S=!1,k=0,L=h&&h[k],N=c%l;for(let e=a;e<i;e++){const s=t.charCodeAt(e);let c;if(L&&e>=L.endOffset&&(k++,L=h&&h[k]),e<x||e>y)c=!0;else if(9===s)c=!0;else if(32===s)if(u)if(S)c=!0;else{const n=e+1<i?t.charCodeAt(e+1):0;c=32===n||9===n}else c=!0;else c=!1;if(c&&h&&(c=!!L&&L.startOffset<=e&&L.endOffset>e),c&&g&&(c=C||e>y),S){if(!c||!d&&N>=l){if(p){for(let t=(m>0?f[m-1].endIndex:a)+1;t<=e;t++)f[m++]=new r(t,"mtkw",1)}else f[m++]=new r(e,"mtkw",1);N%=l}}else(e===b||c&&e>a)&&(f[m++]=new r(e,_,0),N%=l);for(9===s?N=l:n.K7(s)?N+=2:N++,S=c;e===b&&(v++,v<w);)_=o[v].type,b=o[v].endIndex}let D=!1;if(S)if(s&&u){let e=i>0?t.charCodeAt(i-1):0,n=i>1?t.charCodeAt(i-2):0;32===e&&32!==n&&9!==n||(D=!0)}else D=!0;if(D)if(p){for(let e=(m>0?f[m-1].endIndex:a)+1;e<=i;e++)f[m++]=new r(e,"mtkw",1)}else f[m++]=new r(i,"mtkw",1);else f[m++]=new r(i,_,0);return f}(e,t,o,a));let l=0;if(e.lineDecorations.length>0){for(let t=0,i=e.lineDecorations.length;t<i;t++){const i=e.lineDecorations[t];3===i.type||1===i.type?l|=1:2===i.type&&(l|=2)}a=function(e,t,i,n){n.sort(s.Kp.compare);const o=s.k.normalize(e,n),a=o.length;let l=0,c=[],d=0,h=0;for(let e=0,t=i.length;e<t;e++){const t=i[e],n=t.endIndex,s=t.type,u=t.metadata;for(;l<a&&o[l].startOffset<n;){const e=o[l];if(e.startOffset>h&&(h=e.startOffset,c[d++]=new r(h,s,u)),!(e.endOffset+1<=n)){h=n,c[d++]=new r(h,s+" "+e.className,u|e.metadata);break}h=e.endOffset+1,c[d++]=new r(h,s+" "+e.className,u|e.metadata),l++}n>h&&(h=n,c[d++]=new r(h,s,u))}const u=i[i.length-1].endIndex;if(l<a&&o[l].startOffset===u)for(;l<a&&o[l].startOffset===u;){const e=o[l];c[d++]=new r(h,e.className,e.metadata),l++}return c}(t,0,a,e.lineDecorations)}e.containsRTL||(a=function(e,t,i){let n=0,o=[],s=0;if(i)for(let i=0,a=t.length;i<a;i++){const a=t[i],l=a.endIndex;if(n+50<l){const t=a.type,i=a.metadata;let c=-1,d=n;for(let a=n;a<l;a++)32===e.charCodeAt(a)&&(c=a),-1!==c&&a-d>=50&&(o[s++]=new r(c+1,t,i),d=c+1,c=-1);d!==l&&(o[s++]=new r(l,t,i))}else o[s++]=a;n=l}else for(let e=0,i=t.length;e<i;e++){const i=t[e],a=i.endIndex;let l=a-n;if(l>50){const e=i.type,t=i.metadata,c=Math.ceil(l/50);for(let i=1;i<c;i++){let a=n+50*i;o[s++]=new r(a,e,t)}o[s++]=new r(a,e,t)}else o[s++]=i;n=a}return o}(t,a,!e.isBasicASCII||e.fontLigatures));e.renderControlCharacters&&!e.isBasicASCII&&(a=function(e,t){let i=[],n=new r(0,"",0),o=0;for(const s of t){const t=s.endIndex;for(;o<t;o++){m(e.charCodeAt(o))&&(o>n.endIndex&&(n=new r(o,s.type,s.metadata),i.push(n)),n=new r(o+1,"mtkcontrol",s.metadata),i.push(n))}o>n.endIndex&&(n=new r(t,s.type,s.metadata),i.push(n))}return i}(t,a));return new f(e.useMonospaceOptimizations,e.canUseHalfwidthRightwardsArrow,t,o,i,a,l,e.fauxIndentLength,e.tabSize,e.startVisibleColumn,e.containsRTL,e.spaceWidth,e.renderSpaceCharCode,e.renderWhitespace,e.renderControlCharacters)}(e),t)}class g{constructor(e,t,i,n){this.characterMapping=e,this.html=t,this.containsRTL=i,this.containsForeignElements=n}}function p(e){let t=(0,o.l$)(1e4),i=u(e,t);return new g(i.characterMapping,t.build(),i.containsRTL,i.containsForeignElements)}class f{constructor(e,t,i,n,o,s,r,a,l,c,d,h,u,g,p){this.fontIsMonospace=e,this.canUseHalfwidthRightwardsArrow=t,this.lineContent=i,this.len=n,this.isOverflowing=o,this.parts=s,this.containsForeignElements=r,this.fauxIndentLength=a,this.tabSize=l,this.startVisibleColumn=c,this.containsRTL=d,this.spaceWidth=h,this.renderSpaceCharCode=u,this.renderWhitespace=g,this.renderControlCharacters=p}}function m(e){return e<32?9!==e:127===e||(e>=8234&&e<=8238||e>=8294&&e<=8297||e>=8206&&e<=8207||1564===e)}function v(e){return e.toString(16).toUpperCase().padStart(4,"0")}},3544:(e,t,i)=>{"use strict";i.d(t,{T:()=>o,o:()=>s});var n=i(85427);class o{constructor(e,t){this._prefixSumIndexOfResultBrand=void 0,this.index=e,this.remainder=t}}class s{constructor(e){this.values=e,this.prefixSum=new Uint32Array(e.length),this.prefixSumValidIndex=new Int32Array(1),this.prefixSumValidIndex[0]=-1}insertValues(e,t){e=(0,n.A)(e);const i=this.values,o=this.prefixSum,s=t.length;return 0!==s&&(this.values=new Uint32Array(i.length+s),this.values.set(i.subarray(0,e),0),this.values.set(i.subarray(e),e+s),this.values.set(t,e),e-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=e-1),this.prefixSum=new Uint32Array(this.values.length),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(o.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}changeValue(e,t){return e=(0,n.A)(e),t=(0,n.A)(t),this.values[e]!==t&&(this.values[e]=t,e-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=e-1),!0)}removeValues(e,t){e=(0,n.A)(e),t=(0,n.A)(t);const i=this.values,o=this.prefixSum;if(e>=i.length)return!1;let s=i.length-e;return t>=s&&(t=s),0!==t&&(this.values=new Uint32Array(i.length-t),this.values.set(i.subarray(0,e),0),this.values.set(i.subarray(e+t),e),this.prefixSum=new Uint32Array(this.values.length),e-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=e-1),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(o.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}getTotalSum(){return 0===this.values.length?0:this._getPrefixSum(this.values.length-1)}getPrefixSum(e){return e<0?0:(e=(0,n.A)(e),this._getPrefixSum(e))}_getPrefixSum(e){if(e<=this.prefixSumValidIndex[0])return this.prefixSum[e];let t=this.prefixSumValidIndex[0]+1;0===t&&(this.prefixSum[0]=this.values[0],t++),e>=this.values.length&&(e=this.values.length-1);for(let i=t;i<=e;i++)this.prefixSum[i]=this.prefixSum[i-1]+this.values[i];return this.prefixSumValidIndex[0]=Math.max(this.prefixSumValidIndex[0],e),this.prefixSum[e]}getIndexOf(e){e=Math.floor(e),this.getTotalSum();let t=0,i=this.values.length-1,n=0,s=0,r=0;for(;t<=i;)if(n=t+(i-t)/2|0,s=this.prefixSum[n],r=s-this.values[n],e<r)i=n-1;else{if(!(e>=s))break;t=n+1}return new o(n,e-r)}}},13824:(e,t,i)=>{"use strict";i.d(t,{$l:()=>p,$t:()=>u,IP:()=>d,SQ:()=>f,Wx:()=>g,l_:()=>r,le:()=>l,ud:()=>c,wA:()=>h});var n=i(97295),o=i(50187),s=i(24314);class r{constructor(e,t,i,n){this._viewportBrand=void 0,this.top=0|e,this.left=0|t,this.width=0|i,this.height=0|n}}class a{constructor(e,t){this.outputLineIndex=e,this.outputOffset=t}toString(){return`${this.outputLineIndex}:${this.outputOffset}`}toPosition(e,t){const i=this.outputLineIndex>0?t:0;return new o.L(e+this.outputLineIndex,i+this.outputOffset+1)}}class l{constructor(e,t,i,n,o){this.breakOffsets=e,this.breakOffsetsVisibleColumn=t,this.wrappedTextIndentLength=i,this.injectionOffsets=n,this.injectionOptions=o}getInputOffsetOfOutputPosition(e,t){let i=0;if(i=0===e?t:this.breakOffsets[e-1]+t,null!==this.injectionOffsets)for(let e=0;e<this.injectionOffsets.length&&i>this.injectionOffsets[e];e++)i<this.injectionOffsets[e]+this.injectionOptions[e].content.length?i=this.injectionOffsets[e]:i-=this.injectionOptions[e].content.length;return i}getOutputPositionOfInputOffset(e,t=2){let i=0;if(null!==this.injectionOffsets)for(let n=0;n<this.injectionOffsets.length&&!(e<this.injectionOffsets[n])&&(1===t||e!==this.injectionOffsets[n]);n++)i+=this.injectionOptions[n].content.length;return e+=i,this.getOutputPositionOfOffsetInUnwrappedLine(e,t)}getOutputPositionOfOffsetInUnwrappedLine(e,t=2){let i=0,n=this.breakOffsets.length-1,o=0,s=0;for(;i<=n;){o=i+(n-i)/2|0;const r=this.breakOffsets[o];if(s=o>0?this.breakOffsets[o-1]:0,0===t)if(e<=s)n=o-1;else{if(!(e>r))break;i=o+1}else if(e<s)n=o-1;else{if(!(e>=r))break;i=o+1}}return new a(o,e-s)}outputPositionToOffsetInUnwrappedLine(e,t){let i=(e>0?this.breakOffsets[e-1]:0)+t;return e>0&&(i-=this.wrappedTextIndentLength),i}normalizeOffsetAroundInjections(e,t){const i=this.getInjectedTextAtOffset(e);if(!i)return e;if(2===t)return e===i.offsetInUnwrappedLine+i.length?i.offsetInUnwrappedLine+i.length:i.offsetInUnwrappedLine;if(1===t){let e=i.offsetInUnwrappedLine+i.length,t=i.injectedTextIndex;for(;t+1<this.injectionOffsets.length&&this.injectionOffsets[t+1]===this.injectionOffsets[t];)e+=this.injectionOptions[t+1].content.length,t++;return e}let n=i.offsetInUnwrappedLine,o=i.injectedTextIndex;for(;o-1>=0&&this.injectionOffsets[o-1]===this.injectionOffsets[o];)n-=this.injectionOptions[o-1].content.length,o++;return n}getInjectedText(e,t){const i=this.outputPositionToOffsetInUnwrappedLine(e,t),n=this.getInjectedTextAtOffset(i);return n?{options:this.injectionOptions[n.injectedTextIndex]}:null}getInjectedTextAtOffset(e){const t=this.injectionOffsets,i=this.injectionOptions;if(null!==t){let n=0;for(let o=0;o<t.length;o++){const s=i[o].content.length,r=t[o]+n,a=t[o]+n+s;if(r>e)break;if(e<=a)return{injectedTextIndex:o,offsetInUnwrappedLine:r,length:s};n+=s}}}}class c{constructor(e,t){this.tabSize=e,this.data=t}}class d{constructor(e,t,i,n,o,s,r){this._viewLineDataBrand=void 0,this.content=e,this.continuesWithWrappedLine=t,this.minColumn=i,this.maxColumn=n,this.startVisibleColumn=o,this.tokens=s,this.inlineDecorations=r}}class h{constructor(e,t,i,n,o,s,r,a,l,c){this.minColumn=e,this.maxColumn=t,this.content=i,this.continuesWithWrappedLine=n,this.isBasicASCII=h.isBasicASCII(i,s),this.containsRTL=h.containsRTL(i,this.isBasicASCII,o),this.tokens=r,this.inlineDecorations=a,this.tabSize=l,this.startVisibleColumn=c}static isBasicASCII(e,t){return!t||n.$i(e)}static containsRTL(e,t,i){return!(t||!i)&&n.Ut(e)}}class u{constructor(e,t,i){this.range=e,this.inlineClassName=t,this.type=i}}class g{constructor(e,t,i,n){this.startOffset=e,this.endOffset=t,this.inlineClassName=i,this.inlineClassNameAffectsLetterSpacing=n}toInlineDecoration(e){return new u(new s.e(e,this.startOffset+1,e,this.endOffset+1),this.inlineClassName,this.inlineClassNameAffectsLetterSpacing?3:0)}}class p{constructor(e,t){this._viewModelDecorationBrand=void 0,this.range=e,this.options=t}}class f{constructor(e,t,i){this.color=e,this.zIndex=t,this.data=i}static cmp(e,t){return e.zIndex===t.zIndex?e.color<t.color?-1:e.color>t.color?1:0:e.zIndex-t.zIndex}}},17355:(e,t,i)=>{"use strict";i.r(t),i.d(t,{SelectionAnchorSet:()=>p});var n=i(85152),o=i(59365),s=i(22258),r=(i(21512),i(16830)),a=i(3860),l=i(29102),c=i(63580),d=i(38819),h=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},u=function(e,t){return function(i,n){t(i,n,e)}},g=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const p=new d.uy("selectionAnchorSet",!1);let f=class e{constructor(e,t){this.editor=e,this.selectionAnchorSetContextKey=p.bindTo(t),this.modelChangeListener=e.onDidChangeModel((()=>this.selectionAnchorSetContextKey.reset()))}static get(t){return t.getContribution(e.ID)}setSelectionAnchor(){if(this.editor.hasModel()){const e=this.editor.getPosition(),t=this.decorationId?[this.decorationId]:[],i=this.editor.deltaDecorations(t,[{range:a.Y.fromPositions(e,e),options:{description:"selection-anchor",stickiness:1,hoverMessage:(new o.W5).appendText((0,c.N)("selectionAnchor","Selection Anchor")),className:"selection-anchor"}}]);this.decorationId=i[0],this.selectionAnchorSetContextKey.set(!!this.decorationId),(0,n.Z9)((0,c.N)("anchorSet","Anchor set at {0}:{1}",e.lineNumber,e.column))}}goToSelectionAnchor(){if(this.editor.hasModel()&&this.decorationId){const e=this.editor.getModel().getDecorationRange(this.decorationId);e&&this.editor.setPosition(e.getStartPosition())}}selectFromAnchorToCursor(){if(this.editor.hasModel()&&this.decorationId){const e=this.editor.getModel().getDecorationRange(this.decorationId);if(e){const t=this.editor.getPosition();this.editor.setSelection(a.Y.fromPositions(e.getStartPosition(),t)),this.cancelSelectionAnchor()}}}cancelSelectionAnchor(){this.decorationId&&(this.editor.deltaDecorations([this.decorationId],[]),this.decorationId=void 0,this.selectionAnchorSetContextKey.set(!1))}dispose(){this.cancelSelectionAnchor(),this.modelChangeListener.dispose()}};f.ID="editor.contrib.selectionAnchorController",f=h([u(1,d.i6)],f);class m extends r.R6{constructor(){super({id:"editor.action.setSelectionAnchor",label:(0,c.N)("setSelectionAnchor","Set Selection Anchor"),alias:"Set Selection Anchor",precondition:void 0,kbOpts:{kbExpr:l.u.editorTextFocus,primary:(0,s.gx)(2089,2080),weight:100}})}run(e,t){return g(this,void 0,void 0,(function*(){f.get(t).setSelectionAnchor()}))}}class v extends r.R6{constructor(){super({id:"editor.action.goToSelectionAnchor",label:(0,c.N)("goToSelectionAnchor","Go to Selection Anchor"),alias:"Go to Selection Anchor",precondition:p})}run(e,t){return g(this,void 0,void 0,(function*(){f.get(t).goToSelectionAnchor()}))}}class _ extends r.R6{constructor(){super({id:"editor.action.selectFromAnchorToCursor",label:(0,c.N)("selectFromAnchorToCursor","Select from Anchor to Cursor"),alias:"Select from Anchor to Cursor",precondition:p,kbOpts:{kbExpr:l.u.editorTextFocus,primary:(0,s.gx)(2089,2089),weight:100}})}run(e,t){return g(this,void 0,void 0,(function*(){f.get(t).selectFromAnchorToCursor()}))}}class b extends r.R6{constructor(){super({id:"editor.action.cancelSelectionAnchor",label:(0,c.N)("cancelSelectionAnchor","Cancel Selection Anchor"),alias:"Cancel Selection Anchor",precondition:p,kbOpts:{kbExpr:l.u.editorTextFocus,primary:9,weight:100}})}run(e,t){return g(this,void 0,void 0,(function*(){f.get(t).cancelSelectionAnchor()}))}}(0,r._K)(f.ID,f),(0,r.Qr)(m),(0,r.Qr)(v),(0,r.Qr)(_),(0,r.Qr)(b)},17084:(e,t,i)=>{"use strict";i.r(t),i.d(t,{BracketMatchingController:()=>y});var n=i(15393),o=i(5976),s=(i(67382),i(16830)),r=i(50187),a=i(24314),l=i(3860),c=i(29102),d=i(84973),h=i(44174),u=i(27869),g=i(63580),p=i(84144),f=i(73910),m=i(97781);const v=(0,f.P6)("editorOverviewRuler.bracketMatchForeground",{dark:"#A0A0A0",light:"#A0A0A0",hc:"#A0A0A0"},g.N("overviewRulerBracketMatchForeground","Overview ruler marker color for matching brackets."));class _ extends s.R6{constructor(){super({id:"editor.action.jumpToBracket",label:g.N("smartSelect.jumpBracket","Go to Bracket"),alias:"Go to Bracket",precondition:void 0,kbOpts:{kbExpr:c.u.editorTextFocus,primary:3160,weight:100}})}run(e,t){let i=y.get(t);i&&i.jumpToBracket()}}class b extends s.R6{constructor(){super({id:"editor.action.selectToBracket",label:g.N("smartSelect.selectToBracket","Select to Bracket"),alias:"Select to Bracket",precondition:void 0,description:{description:"Select to Bracket",args:[{name:"args",schema:{type:"object",properties:{selectBrackets:{type:"boolean",default:!0}}}}]}})}run(e,t,i){const n=y.get(t);if(!n)return;let o=!0;i&&!1===i.selectBrackets&&(o=!1),n.selectToBracket(o)}}class w{constructor(e,t,i){this.position=e,this.brackets=t,this.options=i}}class y extends o.JT{constructor(e){super(),this._editor=e,this._lastBracketsData=[],this._lastVersionId=0,this._decorations=[],this._updateBracketsSoon=this._register(new n.pY((()=>this._updateBrackets()),50)),this._matchBrackets=this._editor.getOption(63),this._updateBracketsSoon.schedule(),this._register(e.onDidChangeCursorPosition((e=>{"never"!==this._matchBrackets&&this._updateBracketsSoon.schedule()}))),this._register(e.onDidChangeModelContent((e=>{this._updateBracketsSoon.schedule()}))),this._register(e.onDidChangeModel((e=>{this._lastBracketsData=[],this._decorations=[],this._updateBracketsSoon.schedule()}))),this._register(e.onDidChangeModelLanguageConfiguration((e=>{this._lastBracketsData=[],this._updateBracketsSoon.schedule()}))),this._register(e.onDidChangeConfiguration((e=>{e.hasChanged(63)&&(this._matchBrackets=this._editor.getOption(63),this._decorations=this._editor.deltaDecorations(this._decorations,[]),this._lastBracketsData=[],this._lastVersionId=0,this._updateBracketsSoon.schedule())}))),this._register(e.onDidBlurEditorWidget((()=>{this._updateBracketsSoon.schedule()}))),this._register(e.onDidFocusEditorWidget((()=>{this._updateBracketsSoon.schedule()})))}static get(e){return e.getContribution(y.ID)}jumpToBracket(){if(!this._editor.hasModel())return;const e=this._editor.getModel(),t=this._editor.getSelections().map((t=>{const i=t.getStartPosition(),n=e.matchBracket(i);let o=null;if(n)n[0].containsPosition(i)?o=n[1].getStartPosition():n[1].containsPosition(i)&&(o=n[0].getStartPosition());else{const t=e.findEnclosingBrackets(i);if(t)o=t[0].getStartPosition();else{const t=e.findNextBracket(i);t&&t.range&&(o=t.range.getStartPosition())}}return o?new l.Y(o.lineNumber,o.column,o.lineNumber,o.column):new l.Y(i.lineNumber,i.column,i.lineNumber,i.column)}));this._editor.setSelections(t),this._editor.revealRange(t[0])}selectToBracket(e){if(!this._editor.hasModel())return;const t=this._editor.getModel(),i=[];this._editor.getSelections().forEach((n=>{const o=n.getStartPosition();let s=t.matchBracket(o);if(!s&&(s=t.findEnclosingBrackets(o),!s)){const e=t.findNextBracket(o);e&&e.range&&(s=t.matchBracket(e.range.getStartPosition()))}let r=null,c=null;if(s){s.sort(a.e.compareRangesUsingStarts);const[t,i]=s;if(r=e?t.getStartPosition():t.getEndPosition(),c=e?i.getEndPosition():i.getStartPosition(),i.containsPosition(o)){const e=r;r=c,c=e}}r&&c&&i.push(new l.Y(r.lineNumber,r.column,c.lineNumber,c.column))})),i.length>0&&(this._editor.setSelections(i),this._editor.revealRange(i[0]))}_updateBrackets(){if("never"===this._matchBrackets)return;this._recomputeBrackets();let e=[],t=0;for(const i of this._lastBracketsData){let n=i.brackets;n&&(e[t++]={range:n[0],options:i.options},e[t++]={range:n[1],options:i.options})}this._decorations=this._editor.deltaDecorations(this._decorations,e)}_recomputeBrackets(){if(!this._editor.hasModel()||!this._editor.hasWidgetFocus())return this._lastBracketsData=[],void(this._lastVersionId=0);const e=this._editor.getSelections();if(e.length>100)return this._lastBracketsData=[],void(this._lastVersionId=0);const t=this._editor.getModel(),i=t.getVersionId();let n=[];this._lastVersionId===i&&(n=this._lastBracketsData);let o=[],s=0;for(let t=0,i=e.length;t<i;t++){let i=e[t];i.isEmpty()&&(o[s++]=i.getStartPosition())}o.length>1&&o.sort(r.L.compare);let a=[],l=0,c=0,d=n.length;for(let e=0,i=o.length;e<i;e++){let i=o[e];for(;c<d&&n[c].position.isBefore(i);)c++;if(c<d&&n[c].position.equals(i))a[l++]=n[c];else{let e=t.matchBracket(i),n=y._DECORATION_OPTIONS_WITH_OVERVIEW_RULER;e||"always"!==this._matchBrackets||(e=t.findEnclosingBrackets(i,20),n=y._DECORATION_OPTIONS_WITHOUT_OVERVIEW_RULER),a[l++]=new w(i,e,n)}}this._lastBracketsData=a,this._lastVersionId=i}}y.ID="editor.contrib.bracketMatchingController",y._DECORATION_OPTIONS_WITH_OVERVIEW_RULER=h.qx.register({description:"bracket-match-overview",stickiness:1,className:"bracket-match",overviewRuler:{color:(0,m.EN)(v),position:d.sh.Center}}),y._DECORATION_OPTIONS_WITHOUT_OVERVIEW_RULER=h.qx.register({description:"bracket-match-no-overview",stickiness:1,className:"bracket-match"}),(0,s._K)(y.ID,y),(0,s.Qr)(b),(0,s.Qr)(_),(0,m.Ic)(((e,t)=>{const i=e.getColor(u.TC);i&&t.addRule(`.monaco-editor .bracket-match { background-color: ${i}; }`);const n=e.getColor(u.Dl);n&&t.addRule(`.monaco-editor .bracket-match { border: 1px solid ${n}; }`)})),p.BH.appendMenuItem(p.eH.MenubarGoMenu,{group:"5_infile_nav",command:{id:"editor.action.jumpToBracket",title:g.N({key:"miGoToBracket",comment:["&& denotes a mnemonic"]},"Go to &&Bracket")},order:2})},84594:(e,t,i)=>{"use strict";i.r(t);var n=i(16830),o=i(29102),s=i(24314),r=i(3860);class a{constructor(e,t){this._selection=e,this._isMovingLeft=t}getEditOperations(e,t){if(this._selection.startLineNumber!==this._selection.endLineNumber||this._selection.isEmpty())return;const i=this._selection.startLineNumber,n=this._selection.startColumn,o=this._selection.endColumn;if((!this._isMovingLeft||1!==n)&&(this._isMovingLeft||o!==e.getLineMaxColumn(i)))if(this._isMovingLeft){const r=new s.e(i,n-1,i,n),a=e.getValueInRange(r);t.addEditOperation(r,null),t.addEditOperation(new s.e(i,o,i,o),a)}else{const r=new s.e(i,o,i,o+1),a=e.getValueInRange(r);t.addEditOperation(r,null),t.addEditOperation(new s.e(i,n,i,n),a)}}computeCursorState(e,t){return this._isMovingLeft?new r.Y(this._selection.startLineNumber,this._selection.startColumn-1,this._selection.endLineNumber,this._selection.endColumn-1):new r.Y(this._selection.startLineNumber,this._selection.startColumn+1,this._selection.endLineNumber,this._selection.endColumn+1)}}var l=i(63580);class c extends n.R6{constructor(e,t){super(t),this.left=e}run(e,t){if(!t.hasModel())return;let i=[],n=t.getSelections();for(const e of n)i.push(new a(e,this.left));t.pushUndoStop(),t.executeCommands(this.id,i),t.pushUndoStop()}}(0,n.Qr)(class extends c{constructor(){super(!0,{id:"editor.action.moveCarretLeftAction",label:l.N("caret.moveLeft","Move Selected Text Left"),alias:"Move Selected Text Left",precondition:o.u.writable})}}),(0,n.Qr)(class extends c{constructor(){super(!1,{id:"editor.action.moveCarretRightAction",label:l.N("caret.moveRight","Move Selected Text Right"),alias:"Move Selected Text Right",precondition:o.u.writable})}})},77847:(e,t,i)=>{"use strict";i.r(t);var n=i(16830),o=i(61329),s=i(88784),r=i(24314),a=i(29102),l=i(63580);class c extends n.R6{constructor(){super({id:"editor.action.transposeLetters",label:l.N("transposeLetters.label","Transpose Letters"),alias:"Transpose Letters",precondition:a.u.writable,kbOpts:{kbExpr:a.u.textInputFocus,primary:0,mac:{primary:306},weight:100}})}run(e,t){if(!t.hasModel())return;let i=t.getModel(),n=[],a=t.getSelections();for(let e of a){if(!e.isEmpty())continue;let t=e.startLineNumber,a=e.startColumn,l=i.getLineMaxColumn(t);if(1===t&&(1===a||2===a&&2===l))continue;let c=a===l?e.getPosition():s.o.rightPosition(i,e.getPosition().lineNumber,e.getPosition().column),d=s.o.leftPosition(i,c),h=s.o.leftPosition(i,d),u=i.getValueInRange(r.e.fromPositions(h,d)),g=i.getValueInRange(r.e.fromPositions(d,c)),p=r.e.fromPositions(h,c);n.push(new o.T4(p,g+u))}n.length>0&&(t.pushUndoStop(),t.executeCommands(this.id,n),t.pushUndoStop())}}(0,n.Qr)(c)},62015:(e,t,i)=>{"use strict";i.r(t),i.d(t,{CopyAction:()=>b,CutAction:()=>_,PasteAction:()=>w});var n=i(16268),o=i(1432),s=i(35715),r=i(16830),a=i(11640),l=i(29102),c=i(63580),d=i(84144),h=i(84972),u=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const g="9_cutcopypaste",p=o.tY||document.queryCommandSupported("cut"),f=o.tY||document.queryCommandSupported("copy"),m=void 0!==navigator.clipboard&&!n.vU||document.queryCommandSupported("paste");function v(e){return e.register(),e}const _=p?v(new r.AJ({id:"editor.action.clipboardCutAction",precondition:void 0,kbOpts:o.tY?{primary:2102,win:{primary:2102,secondary:[1044]},weight:100}:void 0,menuOpts:[{menuId:d.eH.MenubarEditMenu,group:"2_ccp",title:c.N({key:"miCut",comment:["&& denotes a mnemonic"]},"Cu&&t"),order:1},{menuId:d.eH.EditorContext,group:g,title:c.N("actions.clipboard.cutLabel","å‰ªåˆ‡"),when:l.u.writable,order:1},{menuId:d.eH.CommandPalette,group:"",title:c.N("actions.clipboard.cutLabel","å‰ªåˆ‡"),order:1},{menuId:d.eH.SimpleEditorContext,group:g,title:c.N("actions.clipboard.cutLabel","å‰ªåˆ‡"),when:l.u.writable,order:1}]})):void 0,b=f?v(new r.AJ({id:"editor.action.clipboardCopyAction",precondition:void 0,kbOpts:o.tY?{primary:2081,win:{primary:2081,secondary:[2067]},weight:100}:void 0,menuOpts:[{menuId:d.eH.MenubarEditMenu,group:"2_ccp",title:c.N({key:"miCopy",comment:["&& denotes a mnemonic"]},"&&Copy"),order:2},{menuId:d.eH.EditorContext,group:g,title:c.N("actions.clipboard.copyLabel","å¤åˆ¶"),order:2},{menuId:d.eH.CommandPalette,group:"",title:c.N("actions.clipboard.copyLabel","å¤åˆ¶"),order:1},{menuId:d.eH.SimpleEditorContext,group:g,title:c.N("actions.clipboard.copyLabel","å¤åˆ¶"),order:2}]})):void 0;d.BH.appendMenuItem(d.eH.MenubarEditMenu,{submenu:d.eH.MenubarCopy,title:{value:c.N("copy as","Copy As"),original:"Copy As"},group:"2_ccp",order:3}),d.BH.appendMenuItem(d.eH.EditorContext,{submenu:d.eH.EditorContextCopy,title:{value:c.N("copy as","Copy As"),original:"Copy As"},group:g,order:3});const w=m?v(new r.AJ({id:"editor.action.clipboardPasteAction",precondition:void 0,kbOpts:o.tY?{primary:2100,win:{primary:2100,secondary:[1043]},linux:{primary:2100,secondary:[1043]},weight:100}:void 0,menuOpts:[{menuId:d.eH.MenubarEditMenu,group:"2_ccp",title:c.N({key:"miPaste",comment:["&& denotes a mnemonic"]},"&&Paste"),order:4},{menuId:d.eH.EditorContext,group:g,title:c.N("actions.clipboard.pasteLabel","ç²˜è´´"),when:l.u.writable,order:4},{menuId:d.eH.CommandPalette,group:"",title:c.N("actions.clipboard.pasteLabel","ç²˜è´´"),order:1},{menuId:d.eH.SimpleEditorContext,group:g,title:c.N("actions.clipboard.pasteLabel","ç²˜è´´"),when:l.u.writable,order:4}]})):void 0;class y extends r.R6{constructor(){super({id:"editor.action.clipboardCopyWithSyntaxHighlightingAction",label:c.N("actions.clipboard.copyWithSyntaxHighlightingLabel","Copy With Syntax Highlighting"),alias:"Copy With Syntax Highlighting",precondition:void 0,kbOpts:{kbExpr:l.u.textInputFocus,primary:0,weight:100}})}run(e,t){if(!t.hasModel())return;!t.getOption(32)&&t.getSelection().isEmpty()||(s.RA.forceCopyWithSyntaxHighlighting=!0,t.focus(),document.execCommand("copy"),s.RA.forceCopyWithSyntaxHighlighting=!1)}}function C(e,t){e&&(e.addImplementation(1e4,"code-editor",((e,i)=>{const n=e.get(a.$).getFocusedCodeEditor();if(n&&n.hasTextFocus()){const e=n.getOption(32),i=n.getSelection();return i&&i.isEmpty()&&!e||document.execCommand(t),!0}return!1})),e.addImplementation(0,"generic-dom",((e,i)=>(document.execCommand(t),!0))))}C(_,"cut"),C(b,"copy"),w&&(w.addImplementation(1e4,"code-editor",((e,t)=>{const i=e.get(a.$),n=e.get(h.p),r=i.getFocusedCodeEditor();if(r&&r.hasTextFocus()){return!(!document.execCommand("paste")&&o.$L)||u(void 0,void 0,void 0,(function*(){const e=yield n.readText();if(""!==e){const t=s.Nl.INSTANCE.get(e);let i=!1,n=null,o=null;t&&(i=r.getOption(32)&&!!t.isFromEmptySelection,n=void 0!==t.multicursorText?t.multicursorText:null,o=t.mode),r.trigger("keyboard","paste",{text:e,pasteOnNewLine:i,multicursorText:n,mode:o})}}))}return!1})),w.addImplementation(0,"generic-dom",((e,t)=>(document.execCommand("paste"),!0)))),f&&(0,r.Qr)(y)},31907:(e,t,i)=>{"use strict";i.d(t,{Bb:()=>_,MN:()=>b,RB:()=>v,TM:()=>y,aI:()=>k,bA:()=>C,uH:()=>w});var n=i(9488),o=i(71050),s=i(17301),r=i(5976),a=i(70666),l=i(39925),c=i(24314),d=i(3860),h=i(44101),u=i(51200),g=i(94565),p=i(90535),f=i(89532),m=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const v="editor.action.codeAction",_="editor.action.refactor",b="editor.action.sourceAction",w="editor.action.organizeImports",y="editor.action.fixAll";class C{constructor(e,t){this.action=e,this.provider=t}resolve(e){var t;return m(this,void 0,void 0,(function*(){if((null===(t=this.provider)||void 0===t?void 0:t.resolveCodeAction)&&!this.action.edit){let t;try{t=yield this.provider.resolveCodeAction(this.action,e)}catch(e){(0,s.Cp)(e)}t&&(this.action.edit=t.edit)}return this}))}}class x extends r.JT{constructor(e,t,i){super(),this.documentation=t,this._register(i),this.allActions=[...e].sort(x.codeActionsComparator),this.validActions=this.allActions.filter((({action:e})=>!e.disabled))}static codeActionsComparator({action:e},{action:t}){return e.isPreferred&&!t.isPreferred?-1:!e.isPreferred&&t.isPreferred?1:(0,n.Of)(e.diagnostics)?(0,n.Of)(t.diagnostics)?e.diagnostics[0].message.localeCompare(t.diagnostics[0].message):-1:(0,n.Of)(t.diagnostics)?1:0}get hasAutoFix(){return this.validActions.some((({action:e})=>!!e.kind&&f.yN.QuickFix.contains(new f.yN(e.kind))&&!!e.isPreferred))}}const S={actions:[],documentation:void 0};function k(e,t,i,o,a){var c;const d=i.filter||{},u={only:null===(c=d.include)||void 0===c?void 0:c.value,trigger:i.type},g=new l.YQ(e,a),p=function(e,t){return h.H9.all(e).filter((e=>!e.providedCodeActionKinds||e.providedCodeActionKinds.some((e=>(0,f.EU)(t,new f.yN(e))))))}(e,d),v=new r.SL,_=p.map((i=>m(this,void 0,void 0,(function*(){try{o.report(i);const n=yield i.provideCodeActions(e,t,u,g.token);if(n&&v.add(n),g.token.isCancellationRequested)return S;const s=((null==n?void 0:n.actions)||[]).filter((e=>e&&(0,f.Yl)(d,e))),r=function(e,t,i){if(!e.documentation)return;const n=e.documentation.map((e=>({kind:new f.yN(e.kind),command:e.command})));if(i){let e;for(const t of n)t.kind.contains(i)&&(e?e.kind.contains(t.kind)&&(e=t):e=t);if(e)return null==e?void 0:e.command}for(const e of t)if(e.kind)for(const t of n)if(t.kind.contains(new f.yN(e.kind)))return t.command;return}(i,s,d.include);return{actions:s.map((e=>new C(e,i))),documentation:r}}catch(e){if((0,s.VV)(e))throw e;return(0,s.Cp)(e),S}})))),b=h.H9.onDidChange((()=>{const t=h.H9.all(e);(0,n.fS)(t,p)||g.cancel()}));return Promise.all(_).then((e=>{const t=(0,n.xH)(e.map((e=>e.actions))),i=(0,n.kX)(e.map((e=>e.documentation)));return new x(t,i,v)})).finally((()=>{b.dispose(),g.dispose()}))}g.P.registerCommand("_executeCodeActionProvider",(function(e,t,i,n,r){return m(this,void 0,void 0,(function*(){if(!(t instanceof a.o))throw(0,s.b1)();const l=e.get(u.q).getModel(t);if(!l)throw(0,s.b1)();const h=d.Y.isISelection(i)?d.Y.liftSelection(i):c.e.isIRange(i)?l.validateRange(i):void 0;if(!h)throw(0,s.b1)();const g="string"==typeof n?new f.yN(n):void 0,m=yield k(l,h,{type:1,filter:{includeSourceActions:!0,include:g}},p.E.None,o.T.None),v=[],_=Math.min(m.validActions.length,"number"==typeof r?r:0);for(let e=0;e<_;e++)v.push(m.validActions[e].resolve(o.T.None));try{return yield Promise.all(v),m.validActions.map((e=>e.action))}finally{setTimeout((()=>m.dispose()),100)}}))}))},23674:(e,t,i)=>{"use strict";i.d(t,{S5:()=>xe,dW:()=>_e,Hv:()=>Ce,o$:()=>ye,E7:()=>ve,pY:()=>pe,Eb:()=>be,VQ:()=>we});var n=i(71050);class o{constructor(e){this.executor=e,this._didRun=!1}getValue(){if(!this._didRun)try{this._value=this.executor()}catch(e){this._error=e}finally{this._didRun=!0}if(this._error)throw this._error;return this._value}get rawValue(){return this._value}}var s=i(5976),r=i(97295),a=i(16830),l=i(66007),c=i(29102),d=i(31907),h=i(17301),u=i(82276),g=i(72065),p=i(65321),f=i(74741),m=i(50187),v=i(44101),_=i(89532),b=i(5606),w=i(91847),y=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},C=function(e,t){return function(i,n){t(i,n,e)}},x=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class S extends f.aU{constructor(e,t){super(e.command?e.command.id:e.title,e.title.replace(/\r\n|\r|\n/g," "),void 0,!e.disabled,t),this.action=e}}let k=class extends s.JT{constructor(e,t,i,n){super(),this._editor=e,this._delegate=t,this._contextMenuService=i,this._visible=!1,this._showingActions=this._register(new s.XK),this._keybindingResolver=new L({getKeybindings:()=>n.getKeybindings()})}get isVisible(){return this._visible}show(e,t,i,n){return x(this,void 0,void 0,(function*(){const o=n.includeDisabledActions?t.allActions:t.validActions;if(!o.length)return void(this._visible=!1);if(!this._editor.getDomNode())throw this._visible=!1,(0,h.F0)();this._visible=!0,this._showingActions.value=t;const s=this.getMenuActions(e,o,t.documentation),r=m.L.isIPosition(i)?this._toCoords(i):i||{x:0,y:0},a=this._keybindingResolver.getResolver(),l=this._editor.getOption(113);this._contextMenuService.showContextMenu({domForShadowRoot:l?this._editor.getDomNode():void 0,getAnchor:()=>r,getActions:()=>s,onHide:()=>{this._visible=!1,this._editor.focus()},autoSelectFirstItem:!0,getKeyBinding:e=>e instanceof S?a(e.action):void 0})}))}getMenuActions(e,t,i){var n,o;const s=e=>new S(e.action,(()=>this._delegate.onSelectCodeAction(e))),r=t.map(s),a=[...i],l=this._editor.getModel();if(l&&r.length)for(const i of v.H9.all(l))i._getAdditionalMenuItems&&a.push(...i._getAdditionalMenuItems({trigger:e.type,only:null===(o=null===(n=e.filter)||void 0===n?void 0:n.include)||void 0===o?void 0:o.value},t.map((e=>e.action))));return a.length&&r.push(new f.Z0,...a.map((e=>s(new d.bA({title:e.title,command:e},void 0))))),r}_toCoords(e){if(!this._editor.hasModel())return{x:0,y:0};this._editor.revealPosition(e,1),this._editor.render();const t=this._editor.getScrolledVisiblePosition(e),i=(0,p.i)(this._editor.getDomNode());return{x:i.left+t.left,y:i.top+t.top+t.height}}};k=y([C(2,b.i),C(3,w.d)],k);class L{constructor(e){this._keybindingProvider=e}getResolver(){const e=new o((()=>this._keybindingProvider.getKeybindings().filter((e=>L.codeActionCommands.indexOf(e.command)>=0)).filter((e=>e.resolvedKeybinding)).map((e=>{let t=e.commandArgs;return e.command===d.uH?t={kind:_.yN.SourceOrganizeImports.value}:e.command===d.TM&&(t={kind:_.yN.SourceFixAll.value}),Object.assign({resolvedKeybinding:e.resolvedKeybinding},_.wZ.fromUser(t,{kind:_.yN.None,apply:"never"}))}))));return t=>{if(t.kind){const i=this.bestKeybindingForCodeAction(t,e.getValue());return null==i?void 0:i.resolvedKeybinding}}}bestKeybindingForCodeAction(e,t){if(!e.kind)return;const i=new _.yN(e.kind);return t.filter((e=>e.kind.contains(i))).filter((t=>!t.preferred||e.isPreferred)).reduceRight(((e,t)=>e?e.kind.contains(t.kind)?t:e:t),void 0)}}L.codeActionCommands=[d.Bb,d.RB,d.MN,d.uH,d.TM];var N,D=i(57974),I=i(10553),E=i(73046),T=i(4669),M=(i(47283),i(44174)),A=i(63580),O=i(73910),P=i(97781),R=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},F=function(e,t){return function(i,n){t(i,n,e)}};!function(e){e.Hidden={type:0};e.Showing=class{constructor(e,t,i,n){this.actions=e,this.trigger=t,this.editorPosition=i,this.widgetPosition=n,this.type=1}}}(N||(N={}));let B=class e extends s.JT{constructor(e,t,i,n){super(),this._editor=e,this._quickFixActionId=t,this._preferredFixActionId=i,this._keybindingService=n,this._onClick=this._register(new T.Q5),this.onClick=this._onClick.event,this._state=N.Hidden,this._domNode=document.createElement("div"),this._domNode.className=E.lA.lightBulb.classNames,this._editor.addContentWidget(this),this._register(this._editor.onDidChangeModelContent((e=>{const t=this._editor.getModel();(1!==this.state.type||!t||this.state.editorPosition.lineNumber>=t.getLineCount())&&this.hide()}))),I.o.ignoreTarget(this._domNode),this._register(p.Gw(this._domNode,(e=>{if(1!==this.state.type)return;this._editor.focus(),e.preventDefault();const{top:t,height:i}=p.i(this._domNode),n=this._editor.getOption(58);let o=Math.floor(n/3);null!==this.state.widgetPosition.position&&this.state.widgetPosition.position.lineNumber<this.state.editorPosition.lineNumber&&(o+=n),this._onClick.fire({x:e.posx,y:t+i+o,actions:this.state.actions,trigger:this.state.trigger})}))),this._register(p.nm(this._domNode,"mouseenter",(e=>{if(1!=(1&e.buttons))return;this.hide();const t=new D.Z;t.startMonitoring(e.target,e.buttons,D.e,(()=>{}),(()=>{t.dispose()}))}))),this._register(this._editor.onDidChangeConfiguration((e=>{e.hasChanged(56)&&!this._editor.getOption(56).enabled&&this.hide()}))),this._updateLightBulbTitleAndIcon(),this._register(this._keybindingService.onDidUpdateKeybindings(this._updateLightBulbTitleAndIcon,this))}dispose(){super.dispose(),this._editor.removeContentWidget(this)}getId(){return"LightBulbWidget"}getDomNode(){return this._domNode}getPosition(){return 1===this._state.type?this._state.widgetPosition:null}update(t,i,n){if(t.validActions.length<=0)return this.hide();const o=this._editor.getOptions();if(!o.get(56).enabled)return this.hide();const s=this._editor.getModel();if(!s)return this.hide();const{lineNumber:r,column:a}=s.validatePosition(n),l=s.getOptions().tabSize,c=o.get(43),d=s.getLineContent(r),h=M.yO.computeIndentLevel(d,l),u=e=>e>2&&this._editor.getTopForLineNumber(e)===this._editor.getTopForLineNumber(e-1);let g=r;if(!(c.spaceWidth*h>22))if(r>1&&!u(r-1))g-=1;else if(u(r+1)){if(a*c.spaceWidth<22)return this.hide()}else g+=1;this.state=new N.Showing(t,i,n,{position:{lineNumber:g,column:1},preference:e._posPref}),this._editor.layoutContentWidget(this)}hide(){this.state=N.Hidden,this._editor.layoutContentWidget(this)}get state(){return this._state}set state(e){this._state=e,this._updateLightBulbTitleAndIcon()}_updateLightBulbTitleAndIcon(){if(1===this.state.type&&this.state.actions.hasAutoFix){this._domNode.classList.remove(...E.lA.lightBulb.classNamesArray),this._domNode.classList.add(...E.lA.lightbulbAutofix.classNamesArray);const e=this._keybindingService.lookupKeybinding(this._preferredFixActionId);if(e)return void(this.title=A.N("preferredcodeActionWithKb","Show Code Actions. Preferred Quick Fix Available ({0})",e.getLabel()))}this._domNode.classList.remove(...E.lA.lightbulbAutofix.classNamesArray),this._domNode.classList.add(...E.lA.lightBulb.classNamesArray);const e=this._keybindingService.lookupKeybinding(this._quickFixActionId);this.title=e?A.N("codeActionWithKb","Show Code Actions ({0})",e.getLabel()):A.N("codeAction","Show Code Actions")}set title(e){this._domNode.title=e}};B._posPref=[0],B=R([F(3,w.d)],B),(0,P.Ic)(((e,t)=>{var i;const n=null===(i=e.getColor(O.cv))||void 0===i?void 0:i.transparent(.7),o=e.getColor(O.Fu);o&&t.addRule(`\n\t\t.monaco-editor .contentWidgets ${E.lA.lightBulb.cssSelector} {\n\t\t\tcolor: ${o};\n\t\t\tbackground-color: ${n};\n\t\t}`);const s=e.getColor(O.sK);s&&t.addRule(`\n\t\t.monaco-editor .contentWidgets ${E.lA.lightbulbAutofix.cssSelector} {\n\t\t\tcolor: ${s};\n\t\t\tbackground-color: ${n};\n\t\t}`)}));var V,W=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},H=function(e,t){return function(i,n){t(i,n,e)}},z=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))},j=function(e,t,i,n,o){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?o.call(e,i):o?o.value=i:t.set(e,i),i},U=function(e,t,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(e):n?n.value:t.get(e)};let $=class extends s.JT{constructor(e,t,i,n,r){super(),this._editor=e,this.delegate=n,this._activeCodeActions=this._register(new s.XK),V.set(this,!1),this._codeActionWidget=new o((()=>this._register(r.createInstance(k,this._editor,{onSelectCodeAction:e=>z(this,void 0,void 0,(function*(){this.delegate.applyCodeAction(e,!0)}))})))),this._lightBulbWidget=new o((()=>{const e=this._register(r.createInstance(B,this._editor,t,i));return this._register(e.onClick((e=>this.showCodeActionList(e.trigger,e.actions,e,{includeDisabledActions:!1})))),e}))}dispose(){j(this,V,!0,"f"),super.dispose()}update(e){var t,i,n;return z(this,void 0,void 0,(function*(){if(1!==e.type)return void(null===(t=this._lightBulbWidget.rawValue)||void 0===t||t.hide());let o;try{o=yield e.actions}catch(e){return void(0,h.dL)(e)}if(!U(this,V,"f"))if(this._lightBulbWidget.getValue().update(o,e.trigger,e.position),1===e.trigger.type){if(null===(i=e.trigger.filter)||void 0===i?void 0:i.include){const t=this.tryGetValidActionToApply(e.trigger,o);if(t){try{this._lightBulbWidget.getValue().hide(),yield this.delegate.applyCodeAction(t,!1)}finally{o.dispose()}return}if(e.trigger.context){const t=this.getInvalidActionThatWouldHaveBeenApplied(e.trigger,o);if(t&&t.action.disabled)return u.O.get(this._editor).showMessage(t.action.disabled,e.trigger.context.position),void o.dispose()}}const t=!!(null===(n=e.trigger.filter)||void 0===n?void 0:n.include);if(e.trigger.context&&(!o.allActions.length||!t&&!o.validActions.length))return u.O.get(this._editor).showMessage(e.trigger.context.notAvailableMessage,e.trigger.context.position),this._activeCodeActions.value=o,void o.dispose();this._activeCodeActions.value=o,this._codeActionWidget.getValue().show(e.trigger,o,e.position,{includeDisabledActions:t})}else this._codeActionWidget.getValue().isVisible?o.dispose():this._activeCodeActions.value=o}))}getInvalidActionThatWouldHaveBeenApplied(e,t){if(t.allActions.length)return"first"===e.autoApply&&0===t.validActions.length||"ifSingle"===e.autoApply&&1===t.allActions.length?t.allActions.find((({action:e})=>e.disabled)):void 0}tryGetValidActionToApply(e,t){if(t.validActions.length)return"first"===e.autoApply&&t.validActions.length>0||"ifSingle"===e.autoApply&&1===t.validActions.length?t.validActions[0]:void 0}showCodeActionList(e,t,i,n){return z(this,void 0,void 0,(function*(){this._codeActionWidget.getValue().show(e,t,i,n)}))}};V=new WeakMap,$=W([H(4,g.TG)],$);var K,q=i(94565),Z=i(38819),G=i(98674),Y=i(59422),Q=i(90535),X=i(10829),J=i(15393),ee=i(95935),te=i(24314),ie=function(e,t,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(e):n?n.value:t.get(e)},ne=function(e,t,i,n,o){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?o.call(e,i):o?o.value=i:t.set(e,i),i};const oe=new Z.uy("supportedCodeAction","");class se extends s.JT{constructor(e,t,i,n=250){super(),this._editor=e,this._markerService=t,this._signalChange=i,this._delay=n,this._autoTriggerTimer=this._register(new J._F),this._register(this._markerService.onMarkerChanged((e=>this._onMarkerChanges(e)))),this._register(this._editor.onDidChangeCursorPosition((()=>this._onCursorChange())))}trigger(e){const t=this._getRangeOfSelectionUnlessWhitespaceEnclosed(e);return this._createEventAndSignalChange(e,t)}_onMarkerChanges(e){const t=this._editor.getModel();t&&e.some((e=>(0,ee.Xy)(e,t.uri)))&&this._autoTriggerTimer.cancelAndSet((()=>{this.trigger({type:2})}),this._delay)}_onCursorChange(){this._autoTriggerTimer.cancelAndSet((()=>{this.trigger({type:2})}),this._delay)}_getRangeOfMarker(e){const t=this._editor.getModel();if(t)for(const i of this._markerService.read({resource:t.uri})){const n=t.validateRange(i);if(te.e.intersectRanges(n,e))return te.e.lift(n)}}_getRangeOfSelectionUnlessWhitespaceEnclosed(e){if(!this._editor.hasModel())return;const t=this._editor.getModel(),i=this._editor.getSelection();if(i.isEmpty()&&2===e.type){const{lineNumber:e,column:n}=i.getPosition(),o=t.getLineContent(e);if(0===o.length)return;if(1===n){if(/\s/.test(o[0]))return}else if(n===t.getLineMaxColumn(e)){if(/\s/.test(o[o.length-1]))return}else if(/\s/.test(o[n-2])&&/\s/.test(o[n-1]))return}return i}_createEventAndSignalChange(e,t){const i=this._editor.getModel();if(!t||!i)return void this._signalChange(void 0);const n=this._getRangeOfMarker(t),o=n?n.getStartPosition():t.getStartPosition(),s={trigger:e,selection:t,position:o};return this._signalChange(s),s}}var re;!function(e){e.Empty={type:0};e.Triggered=class{constructor(e,t,i,n){this.trigger=e,this.rangeOrSelection=t,this.position=i,this._cancellablePromise=n,this.type=1,this.actions=n.catch((e=>{if((0,h.VV)(e))return ae;throw e}))}cancel(){this._cancellablePromise.cancel()}}}(re||(re={}));const ae={allActions:[],validActions:[],dispose:()=>{},documentation:[],hasAutoFix:!1};class le extends s.JT{constructor(e,t,i,n){super(),this._editor=e,this._markerService=t,this._progressService=n,this._codeActionOracle=this._register(new s.XK),this._state=re.Empty,this._onDidChangeState=this._register(new T.Q5),this.onDidChangeState=this._onDidChangeState.event,K.set(this,!1),this._supportedCodeActions=oe.bindTo(i),this._register(this._editor.onDidChangeModel((()=>this._update()))),this._register(this._editor.onDidChangeModelLanguage((()=>this._update()))),this._register(v.H9.onDidChange((()=>this._update()))),this._update()}dispose(){ie(this,K,"f")||(ne(this,K,!0,"f"),super.dispose(),this.setState(re.Empty,!0))}_update(){if(ie(this,K,"f"))return;this._codeActionOracle.value=void 0,this.setState(re.Empty);const e=this._editor.getModel();if(e&&v.H9.has(e)&&!this._editor.getOption(80)){const t=[];for(const i of v.H9.all(e))Array.isArray(i.providedCodeActionKinds)&&t.push(...i.providedCodeActionKinds);this._supportedCodeActions.set(t.join(" ")),this._codeActionOracle.value=new se(this._editor,this._markerService,(t=>{var i;if(!t)return void this.setState(re.Empty);const n=(0,J.PG)((i=>(0,d.aI)(e,t.selection,t.trigger,Q.E.None,i)));1===t.trigger.type&&(null===(i=this._progressService)||void 0===i||i.showWhile(n,250)),this.setState(new re.Triggered(t.trigger,t.selection,t.position,n))}),void 0),this._codeActionOracle.value.trigger({type:2})}else this._supportedCodeActions.reset()}trigger(e){this._codeActionOracle.value&&this._codeActionOracle.value.trigger(e)}setState(e,t){e!==this._state&&(1===this._state.type&&this._state.cancel(),this._state=e,t||ie(this,K,"f")||this._onDidChangeState.fire(e))}}K=new WeakMap;var ce=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},de=function(e,t){return function(i,n){t(i,n,e)}},he=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function ue(e){return Z.Ao.regex(oe.keys()[0],new RegExp("(\\s|^)"+(0,r.ec)(e.value)+"\\b"))}const ge={type:"object",defaultSnippets:[{body:{kind:""}}],properties:{kind:{type:"string",description:A.N("args.schema.kind","Kind of the code action to run.")},apply:{type:"string",description:A.N("args.schema.apply","Controls when the returned actions are applied."),default:"ifSingle",enum:["first","ifSingle","never"],enumDescriptions:[A.N("args.schema.apply.first","Always apply the first returned code action."),A.N("args.schema.apply.ifSingle","Apply the first returned code action if it is the only one."),A.N("args.schema.apply.never","Do not apply the returned code actions.")]},preferred:{type:"boolean",default:!1,description:A.N("args.schema.preferred","Controls if only preferred code actions should be returned.")}}};let pe=class e extends s.JT{constructor(e,t,i,n,s){super(),this._instantiationService=s,this._editor=e,this._model=this._register(new le(this._editor,t,i,n)),this._register(this._model.onDidChangeState((e=>this.update(e)))),this._ui=new o((()=>this._register(new $(e,ve.Id,xe.Id,{applyCodeAction:(e,t)=>he(this,void 0,void 0,(function*(){try{yield this._applyCodeAction(e)}finally{t&&this._trigger({type:2,filter:{}})}}))},this._instantiationService))))}static get(t){return t.getContribution(e.ID)}update(e){this._ui.getValue().update(e)}showCodeActions(e,t,i){return this._ui.getValue().showCodeActionList(e,t,i,{includeDisabledActions:!1})}manualTriggerAtCurrentPosition(e,t,i){if(!this._editor.hasModel())return;u.O.get(this._editor).closeMessage();const n=this._editor.getPosition();this._trigger({type:1,filter:t,autoApply:i,context:{notAvailableMessage:e,position:n}})}_trigger(e){return this._model.trigger(e)}_applyCodeAction(e){return this._instantiationService.invokeFunction(fe,e,this._editor)}};function fe(e,t,i){return he(this,void 0,void 0,(function*(){const o=e.get(l.vu),s=e.get(q.H),r=e.get(X.b),a=e.get(Y.lT);if(r.publicLog2("codeAction.applyCodeAction",{codeActionTitle:t.action.title,codeActionKind:t.action.kind,codeActionIsPreferred:!!t.action.isPreferred}),yield t.resolve(n.T.None),t.action.edit&&(yield o.apply(l.fo.convert(t.action.edit),{editor:i,label:t.action.title})),t.action.command)try{yield s.executeCommand(t.action.command.id,...t.action.command.arguments||[])}catch(e){const t=function(e){return"string"==typeof e?e:e instanceof Error&&"string"==typeof e.message?e.message:void 0}(e);a.error("string"==typeof t?t:A.N("applyCodeActionFailed","An unknown error occurred while applying the code action"))}}))}function me(e,t,i,n){if(e.hasModel()){const o=pe.get(e);o&&o.manualTriggerAtCurrentPosition(t,i,n)}}pe.ID="editor.contrib.quickFixController",pe=ce([de(1,G.lT),de(2,Z.i6),de(3,Q.e),de(4,g.TG)],pe);class ve extends a.R6{constructor(){super({id:ve.Id,label:A.N("quickfix.trigger.label","Quick Fix..."),alias:"Quick Fix...",precondition:Z.Ao.and(c.u.writable,c.u.hasCodeActionsProvider),kbOpts:{kbExpr:c.u.editorTextFocus,primary:2132,weight:100}})}run(e,t){return me(t,A.N("editor.action.quickFix.noneMessage","No code actions available"),void 0,void 0)}}ve.Id="editor.action.quickFix";class _e extends a._l{constructor(){super({id:d.RB,precondition:Z.Ao.and(c.u.writable,c.u.hasCodeActionsProvider),description:{description:"Trigger a code action",args:[{name:"args",schema:ge}]}})}runEditorCommand(e,t,i){const n=_.wZ.fromUser(i,{kind:_.yN.Empty,apply:"ifSingle"});return me(t,"string"==typeof(null==i?void 0:i.kind)?n.preferred?A.N("editor.action.codeAction.noneMessage.preferred.kind","No preferred code actions for '{0}' available",i.kind):A.N("editor.action.codeAction.noneMessage.kind","No code actions for '{0}' available",i.kind):n.preferred?A.N("editor.action.codeAction.noneMessage.preferred","No preferred code actions available"):A.N("editor.action.codeAction.noneMessage","No code actions available"),{include:n.kind,includeSourceActions:!0,onlyIncludePreferredActions:n.preferred},n.apply)}}class be extends a.R6{constructor(){super({id:d.Bb,label:A.N("refactor.label","Refactor..."),alias:"Refactor...",precondition:Z.Ao.and(c.u.writable,c.u.hasCodeActionsProvider),kbOpts:{kbExpr:c.u.editorTextFocus,primary:3120,mac:{primary:1328},weight:100},contextMenuOpts:{group:"1_modification",order:2,when:Z.Ao.and(c.u.writable,ue(_.yN.Refactor))},description:{description:"Refactor...",args:[{name:"args",schema:ge}]}})}run(e,t,i){const n=_.wZ.fromUser(i,{kind:_.yN.Refactor,apply:"never"});return me(t,"string"==typeof(null==i?void 0:i.kind)?n.preferred?A.N("editor.action.refactor.noneMessage.preferred.kind","No preferred refactorings for '{0}' available",i.kind):A.N("editor.action.refactor.noneMessage.kind","No refactorings for '{0}' available",i.kind):n.preferred?A.N("editor.action.refactor.noneMessage.preferred","No preferred refactorings available"):A.N("editor.action.refactor.noneMessage","No refactorings available"),{include:_.yN.Refactor.contains(n.kind)?n.kind:_.yN.None,onlyIncludePreferredActions:n.preferred},n.apply)}}class we extends a.R6{constructor(){super({id:d.MN,label:A.N("source.label","Source Action..."),alias:"Source Action...",precondition:Z.Ao.and(c.u.writable,c.u.hasCodeActionsProvider),contextMenuOpts:{group:"1_modification",order:2.1,when:Z.Ao.and(c.u.writable,ue(_.yN.Source))},description:{description:"Source Action...",args:[{name:"args",schema:ge}]}})}run(e,t,i){const n=_.wZ.fromUser(i,{kind:_.yN.Source,apply:"never"});return me(t,"string"==typeof(null==i?void 0:i.kind)?n.preferred?A.N("editor.action.source.noneMessage.preferred.kind","No preferred source actions for '{0}' available",i.kind):A.N("editor.action.source.noneMessage.kind","No source actions for '{0}' available",i.kind):n.preferred?A.N("editor.action.source.noneMessage.preferred","No preferred source actions available"):A.N("editor.action.source.noneMessage","No source actions available"),{include:_.yN.Source.contains(n.kind)?n.kind:_.yN.None,includeSourceActions:!0,onlyIncludePreferredActions:n.preferred},n.apply)}}class ye extends a.R6{constructor(){super({id:d.uH,label:A.N("organizeImports.label","Organize Imports"),alias:"Organize Imports",precondition:Z.Ao.and(c.u.writable,ue(_.yN.SourceOrganizeImports)),kbOpts:{kbExpr:c.u.editorTextFocus,primary:1581,weight:100}})}run(e,t){return me(t,A.N("editor.action.organize.noneMessage","No organize imports action available"),{include:_.yN.SourceOrganizeImports,includeSourceActions:!0},"ifSingle")}}class Ce extends a.R6{constructor(){super({id:d.TM,label:A.N("fixAll.label","Fix All"),alias:"Fix All",precondition:Z.Ao.and(c.u.writable,ue(_.yN.SourceFixAll))})}run(e,t){return me(t,A.N("fixAll.noneMessage","No fix all action available"),{include:_.yN.SourceFixAll,includeSourceActions:!0},"ifSingle")}}class xe extends a.R6{constructor(){super({id:xe.Id,label:A.N("autoFix.label","Auto Fix..."),alias:"Auto Fix...",precondition:Z.Ao.and(c.u.writable,ue(_.yN.QuickFix)),kbOpts:{kbExpr:c.u.editorTextFocus,primary:1620,mac:{primary:2644},weight:100}})}run(e,t){return me(t,A.N("editor.action.autoFix.noneMessage","No auto fixes available"),{include:_.yN.QuickFix,onlyIncludePreferredActions:!0},"ifSingle")}}xe.Id="editor.action.autoFix"},9093:(e,t,i)=>{"use strict";i.r(t);var n=i(16830),o=i(23674);(0,n._K)(o.pY.ID,o.pY),(0,n.Qr)(o.E7),(0,n.Qr)(o.Eb),(0,n.Qr)(o.VQ),(0,n.Qr)(o.o$),(0,n.Qr)(o.S5),(0,n.Qr)(o.Hv),(0,n.fK)(new o.dW)},89532:(e,t,i)=>{"use strict";i.d(t,{EU:()=>o,Yl:()=>s,wZ:()=>a,yN:()=>n});class n{constructor(e){this.value=e}equals(e){return this.value===e.value}contains(e){return this.equals(e)||""===this.value||e.value.startsWith(this.value+n.sep)}intersects(e){return this.contains(e)||e.contains(this)}append(e){return new n(this.value+n.sep+e)}}function o(e,t){return!(e.include&&!e.include.intersects(t))&&((!e.excludes||!e.excludes.some((i=>r(t,i,e.include))))&&!(!e.includeSourceActions&&n.Source.contains(t)))}function s(e,t){const i=t.kind?new n(t.kind):void 0;return!!(!e.include||i&&e.include.contains(i))&&(!(e.excludes&&i&&e.excludes.some((t=>r(i,t,e.include))))&&(!(!e.includeSourceActions&&i&&n.Source.contains(i))&&!(e.onlyIncludePreferredActions&&!t.isPreferred)))}function r(e,t,i){return!!t.contains(e)&&(!i||!t.contains(i))}n.sep=".",n.None=new n("@@none@@"),n.Empty=new n(""),n.QuickFix=new n("quickfix"),n.Refactor=new n("refactor"),n.Source=new n("source"),n.SourceOrganizeImports=n.Source.append("organizeImports"),n.SourceFixAll=n.Source.append("fixAll");class a{constructor(e,t,i){this.kind=e,this.apply=t,this.preferred=i}static fromUser(e,t){return e&&"object"==typeof e?new a(a.getKindFromUser(e,t.kind),a.getApplyFromUser(e,t.apply),a.getPreferredUser(e)):new a(t.kind,t.apply,!1)}static getApplyFromUser(e,t){switch("string"==typeof e.apply?e.apply.toLowerCase():""){case"first":return"first";case"never":return"never";case"ifsingle":return"ifSingle";default:return t}}static getKindFromUser(e,t){return"string"==typeof e.kind?new n(e.kind):t}static getPreferredUser(e){return"boolean"==typeof e.preferred&&e.preferred}}},53832:(e,t,i)=>{"use strict";i.r(t),i.d(t,{CodeLensContribution:()=>Z});var n=i(65321),o=i(15393),s=i(17301),r=i(89954),a=i(5976),l=i(39925),c=i(16830),d=i(64141),h=i(29102),u=i(44101),g=i(21036),p=i(71050),f=i(98401),m=i(70666),v=i(51200),_=i(94565),b=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class w{constructor(){this.lenses=[],this._disposables=new a.SL}dispose(){this._disposables.dispose()}add(e,t){this._disposables.add(e);for(const i of e.lenses)this.lenses.push({symbol:i,provider:t})}}function y(e,t){return b(this,void 0,void 0,(function*(){const i=u.He.ordered(e),n=new Map,o=new w,r=i.map(((i,r)=>b(this,void 0,void 0,(function*(){n.set(i,r);try{const n=yield Promise.resolve(i.provideCodeLenses(e,t));n&&o.add(n,i)}catch(e){(0,s.Cp)(e)}}))));return yield Promise.all(r),o.lenses=o.lenses.sort(((e,t)=>e.symbol.range.startLineNumber<t.symbol.range.startLineNumber?-1:e.symbol.range.startLineNumber>t.symbol.range.startLineNumber?1:n.get(e.provider)<n.get(t.provider)?-1:n.get(e.provider)>n.get(t.provider)?1:e.symbol.range.startColumn<t.symbol.range.startColumn?-1:e.symbol.range.startColumn>t.symbol.range.startColumn?1:0)),o}))}_.P.registerCommand("_executeCodeLensProvider",(function(e,...t){let[i,n]=t;(0,f.p_)(m.o.isUri(i)),(0,f.p_)("number"==typeof n||!n);const o=e.get(v.q).getModel(i);if(!o)throw(0,s.b1)();const r=[],l=new a.SL;return y(o,p.T.None).then((e=>{l.add(e);let t=[];for(const i of e.lenses)null==n||Boolean(i.symbol.command)?r.push(i.symbol):n-- >0&&i.provider.resolveCodeLens&&t.push(Promise.resolve(i.provider.resolveCodeLens(o,i.symbol,p.T.None)).then((e=>r.push(e||i.symbol))));return Promise.all(t)})).then((()=>r)).finally((()=>{setTimeout((()=>l.dispose()),100)}))}));var C=i(88289),x=i(43702),S=i(24314),k=i(65026),L=i(72065),N=i(26904),D=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},I=function(e,t){return function(i,n){t(i,n,e)}};const E=(0,L.yh)("ICodeLensCache");class T{constructor(e,t){this.lineCount=e,this.data=t}}let M=class{constructor(e){this._fakeProvider=new class{provideCodeLenses(){throw new Error("not supported")}},this._cache=new x.z6(20,.75);(0,o.To)((()=>e.remove("codelens/cache",1)));const t="codelens/cache2",i=e.get(t,1,"{}");this._deserialize(i),(0,C.I)(e.onWillSaveState)((i=>{i.reason===N.fk.SHUTDOWN&&e.store(t,this._serialize(),1,1)}))}put(e,t){const i=t.lenses.map((e=>{var t;return{range:e.symbol.range,command:e.symbol.command&&{id:"",title:null===(t=e.symbol.command)||void 0===t?void 0:t.title}}})),n=new w;n.add({lenses:i,dispose:()=>{}},this._fakeProvider);const o=new T(e.getLineCount(),n);this._cache.set(e.uri.toString(),o)}get(e){const t=this._cache.get(e.uri.toString());return t&&t.lineCount===e.getLineCount()?t.data:void 0}delete(e){this._cache.delete(e.uri.toString())}_serialize(){const e=Object.create(null);for(const[t,i]of this._cache){const n=new Set;for(const e of i.data.lenses)n.add(e.symbol.range.startLineNumber);e[t]={lineCount:i.lineCount,lines:[...n.values()]}}return JSON.stringify(e)}_deserialize(e){try{const t=JSON.parse(e);for(const e in t){const i=t[e],n=[];for(const e of i.lines)n.push({range:new S.e(e,1,e,11)});const o=new w;o.add({lenses:n,dispose(){}},this._fakeProvider),this._cache.set(e,new T(i.lineCount,o))}}catch(e){}}};M=D([I(0,N.Uy)],M),(0,k.z)(E,M);var A=i(56811),O=(i(26197),i(44174)),P=i(27869),R=i(73910),F=i(97781);class B{constructor(e,t,i){this.afterLineNumber=e,this.heightInPx=t,this._onHeight=i,this.suppressMouseDown=!0,this.domNode=document.createElement("div")}onComputedHeight(e){void 0===this._lastHeight?this._lastHeight=e:this._lastHeight!==e&&(this._lastHeight=e,this._onHeight())}isVisible(){return 0!==this._lastHeight&&this.domNode.hasAttribute("monaco-visible-view-zone")}}class V{constructor(e,t,i){this.allowEditorOverflow=!1,this.suppressMouseDown=!0,this._commands=new Map,this._isEmpty=!0,this._editor=e,this._id="codelens.widget-"+V._idPool++,this.updatePosition(i),this._domNode=document.createElement("span"),this._domNode.className=`codelens-decoration ${t}`}withCommands(e,t){this._commands.clear();let i=[],o=!1;for(let t=0;t<e.length;t++){const s=e[t];if(s&&(o=!0,s.command)){const o=(0,A.T)(s.command.title.trim());s.command.id?(i.push(n.$("a",{id:String(t),title:s.command.tooltip},...o)),this._commands.set(String(t),s.command)):i.push(n.$("span",{title:s.command.tooltip},...o)),t+1<e.length&&i.push(n.$("span",void 0,"Â |Â "))}}o?(n.mc(this._domNode,...i),this._isEmpty&&t&&this._domNode.classList.add("fadein"),this._isEmpty=!1):n.mc(this._domNode,n.$("span",void 0,"no commands"))}getCommand(e){return e.parentElement===this._domNode?this._commands.get(e.id):void 0}getId(){return this._id}getDomNode(){return this._domNode}updatePosition(e){const t=this._editor.getModel().getLineFirstNonWhitespaceColumn(e);this._widgetPosition={position:{lineNumber:e,column:t},preference:[1]}}getPosition(){return this._widgetPosition||null}}V._idPool=0;class W{constructor(){this._removeDecorations=[],this._addDecorations=[],this._addDecorationsCallbacks=[]}addDecoration(e,t){this._addDecorations.push(e),this._addDecorationsCallbacks.push(t)}removeDecoration(e){this._removeDecorations.push(e)}commit(e){let t=e.deltaDecorations(this._removeDecorations,this._addDecorations);for(let e=0,i=t.length;e<i;e++)this._addDecorationsCallbacks[e](t[e])}}class H{constructor(e,t,i,n,o,s,r){let a;this._isDisposed=!1,this._editor=t,this._className=i,this._data=e,this._decorationIds=[];let l=[];this._data.forEach(((e,t)=>{e.symbol.command&&l.push(e.symbol),n.addDecoration({range:e.symbol.range,options:O.qx.EMPTY},(e=>this._decorationIds[t]=e)),a=a?S.e.plusRange(a,e.symbol.range):S.e.lift(e.symbol.range)})),this._viewZone=new B(a.startLineNumber-1,s,r),this._viewZoneId=o.addZone(this._viewZone),l.length>0&&(this._createContentWidgetIfNecessary(),this._contentWidget.withCommands(l,!1))}_createContentWidgetIfNecessary(){this._contentWidget?this._editor.layoutContentWidget(this._contentWidget):(this._contentWidget=new V(this._editor,this._className,this._viewZone.afterLineNumber+1),this._editor.addContentWidget(this._contentWidget))}dispose(e,t){this._decorationIds.forEach(e.removeDecoration,e),this._decorationIds=[],t&&t.removeZone(this._viewZoneId),this._contentWidget&&(this._editor.removeContentWidget(this._contentWidget),this._contentWidget=void 0),this._isDisposed=!0}isDisposed(){return this._isDisposed}isValid(){return this._decorationIds.some(((e,t)=>{const i=this._editor.getModel().getDecorationRange(e),n=this._data[t].symbol;return!(!i||S.e.isEmpty(n.range)!==i.isEmpty())}))}updateCodeLensSymbols(e,t){this._decorationIds.forEach(t.removeDecoration,t),this._decorationIds=[],this._data=e,this._data.forEach(((e,i)=>{t.addDecoration({range:e.symbol.range,options:O.qx.EMPTY},(e=>this._decorationIds[i]=e))}))}updateHeight(e,t){this._viewZone.heightInPx=e,t.layoutZone(this._viewZoneId),this._contentWidget&&this._editor.layoutContentWidget(this._contentWidget)}computeIfNecessary(e){if(!this._viewZone.isVisible())return null;for(let t=0;t<this._decorationIds.length;t++){const i=e.getDecorationRange(this._decorationIds[t]);i&&(this._data[t].symbol.range=i)}return this._data}updateCommands(e){this._createContentWidgetIfNecessary(),this._contentWidget.withCommands(e,!0);for(let t=0;t<this._data.length;t++){const i=e[t];if(i){const{symbol:e}=this._data[t];e.command=i.command||e.command}}}getCommand(e){var t;return null===(t=this._contentWidget)||void 0===t?void 0:t.getCommand(e)}getLineNumber(){const e=this._editor.getModel().getDecorationRange(this._decorationIds[0]);return e?e.startLineNumber:-1}update(e){if(this.isValid()){const t=this._editor.getModel().getDecorationRange(this._decorationIds[0]);t&&(this._viewZone.afterLineNumber=t.startLineNumber-1,e.layoutZone(this._viewZoneId),this._contentWidget&&(this._contentWidget.updatePosition(t.startLineNumber),this._editor.layoutContentWidget(this._contentWidget)))}}getItems(){return this._data}}(0,F.Ic)(((e,t)=>{const i=e.getColor(P.Yp);i&&(t.addRule(`.monaco-editor .codelens-decoration { color: ${i}; }`),t.addRule(`.monaco-editor .codelens-decoration .codicon { color: ${i}; }`));const n=e.getColor(R._Y);n&&(t.addRule(`.monaco-editor .codelens-decoration > a:hover { color: ${n} !important; }`),t.addRule(`.monaco-editor .codelens-decoration > a:hover .codicon { color: ${n} !important; }`))}));var z=i(63580),j=i(59422),U=i(41157),$=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},K=function(e,t){return function(i,n){t(i,n,e)}},q=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let Z=class{constructor(e,t,i,s){this._editor=e,this._commandService=t,this._notificationService=i,this._codeLensCache=s,this._disposables=new a.SL,this._localToDispose=new a.SL,this._lenses=[],this._getCodeLensModelDelays=new g.Y(u.He,250,2500),this._oldCodeLensModels=new a.SL,this._resolveCodeLensesDelays=new g.Y(u.He,250,2500),this._resolveCodeLensesScheduler=new o.pY((()=>this._resolveCodeLensesInViewport()),this._resolveCodeLensesDelays.min),this._disposables.add(this._editor.onDidChangeModel((()=>this._onModelChange()))),this._disposables.add(this._editor.onDidChangeModelLanguage((()=>this._onModelChange()))),this._disposables.add(this._editor.onDidChangeConfiguration((e=>{(e.hasChanged(43)||e.hasChanged(16)||e.hasChanged(15))&&this._updateLensStyle(),e.hasChanged(14)&&this._onModelChange()}))),this._disposables.add(u.He.onDidChange(this._onModelChange,this)),this._onModelChange(),this._styleClassName="_"+(0,r.vp)(this._editor.getId()).toString(16),this._styleElement=n.dS(n.OO(this._editor.getContainerDomNode())?this._editor.getContainerDomNode():void 0),this._updateLensStyle()}dispose(){var e;this._localDispose(),this._disposables.dispose(),this._oldCodeLensModels.dispose(),null===(e=this._currentCodeLensModel)||void 0===e||e.dispose(),this._styleElement.remove()}_getLayoutInfo(){let e,t=this._editor.getOption(16);return!t||t<5?(t=.9*this._editor.getOption(45)|0,e=this._editor.getOption(58)):e=t*Math.max(1.3,this._editor.getOption(58)/this._editor.getOption(45))|0,{codeLensHeight:e,fontSize:t}}_updateLensStyle(){const{codeLensHeight:e,fontSize:t}=this._getLayoutInfo(),i=this._editor.getOption(15),n=this._editor.getOption(43),o=`--codelens-font-family${this._styleClassName}`,s=`--codelens-font-features${this._styleClassName}`;let r=`\n\t\t.monaco-editor .codelens-decoration.${this._styleClassName} { line-height: ${e}px; font-size: ${t}px; padding-right: ${Math.round(.5*t)}px; font-feature-settings: var(${s}) }\n\t\t.monaco-editor .codelens-decoration.${this._styleClassName} span.codicon { line-height: ${e}px; font-size: ${t}px; }\n\t\t`;i&&(r+=`.monaco-editor .codelens-decoration.${this._styleClassName} { font-family: var(${o}), ${d.hL.fontFamily}}`),this._styleElement.textContent=r,this._editor.getContainerDomNode().style.setProperty(o,null!=i?i:"inherit"),this._editor.getContainerDomNode().style.setProperty(s,n.fontFeatureSettings),this._editor.changeViewZones((t=>{for(let i of this._lenses)i.updateHeight(e,t)}))}_localDispose(){var e,t,i;null===(e=this._getCodeLensModelPromise)||void 0===e||e.cancel(),this._getCodeLensModelPromise=void 0,null===(t=this._resolveCodeLensesPromise)||void 0===t||t.cancel(),this._resolveCodeLensesPromise=void 0,this._localToDispose.clear(),this._oldCodeLensModels.clear(),null===(i=this._currentCodeLensModel)||void 0===i||i.dispose()}_onModelChange(){this._localDispose();const e=this._editor.getModel();if(!e)return;if(!this._editor.getOption(14))return;const t=this._codeLensCache.get(e);if(t&&this._renderCodeLensSymbols(t),!u.He.has(e))return void(t&&this._localToDispose.add((0,o.Vg)((()=>{const i=this._codeLensCache.get(e);t===i&&(this._codeLensCache.delete(e),this._onModelChange())}),3e4)));for(const t of u.He.all(e))if("function"==typeof t.onDidChange){let e=t.onDidChange((()=>i.schedule()));this._localToDispose.add(e)}const i=new o.pY((()=>{var t;const n=Date.now();null===(t=this._getCodeLensModelPromise)||void 0===t||t.cancel(),this._getCodeLensModelPromise=(0,o.PG)((t=>y(e,t))),this._getCodeLensModelPromise.then((t=>{this._currentCodeLensModel&&this._oldCodeLensModels.add(this._currentCodeLensModel),this._currentCodeLensModel=t,this._codeLensCache.put(e,t);const o=this._getCodeLensModelDelays.update(e,Date.now()-n);i.delay=o,this._renderCodeLensSymbols(t),this._resolveCodeLensesInViewportSoon()}),s.dL)}),this._getCodeLensModelDelays.get(e));this._localToDispose.add(i),this._localToDispose.add((0,a.OF)((()=>this._resolveCodeLensesScheduler.cancel()))),this._localToDispose.add(this._editor.onDidChangeModelContent((()=>{this._editor.changeDecorations((e=>{this._editor.changeViewZones((t=>{let i=[],n=-1;this._lenses.forEach((e=>{e.isValid()&&n!==e.getLineNumber()?(e.update(t),n=e.getLineNumber()):i.push(e)}));let o=new W;i.forEach((e=>{e.dispose(o,t),this._lenses.splice(this._lenses.indexOf(e),1)})),o.commit(e)}))})),i.schedule()}))),this._localToDispose.add(this._editor.onDidFocusEditorWidget((()=>{i.schedule()}))),this._localToDispose.add(this._editor.onDidScrollChange((e=>{e.scrollTopChanged&&this._lenses.length>0&&this._resolveCodeLensesInViewportSoon()}))),this._localToDispose.add(this._editor.onDidLayoutChange((()=>{this._resolveCodeLensesInViewportSoon()}))),this._localToDispose.add((0,a.OF)((()=>{if(this._editor.getModel()){const e=l.ZF.capture(this._editor);this._editor.changeDecorations((e=>{this._editor.changeViewZones((t=>{this._disposeAllLenses(e,t)}))})),e.restore(this._editor)}else this._disposeAllLenses(void 0,void 0)}))),this._localToDispose.add(this._editor.onMouseDown((e=>{if(9!==e.target.type)return;let t=e.target.element;if("SPAN"===(null==t?void 0:t.tagName)&&(t=t.parentElement),"A"===(null==t?void 0:t.tagName))for(const e of this._lenses){let i=e.getCommand(t);if(i){this._commandService.executeCommand(i.id,...i.arguments||[]).catch((e=>this._notificationService.error(e)));break}}}))),i.schedule()}_disposeAllLenses(e,t){const i=new W;for(const e of this._lenses)e.dispose(i,t);e&&i.commit(e),this._lenses.length=0}_renderCodeLensSymbols(e){if(!this._editor.hasModel())return;let t,i=this._editor.getModel().getLineCount(),n=[];for(let o of e.lenses){let e=o.symbol.range.startLineNumber;e<1||e>i||(t&&t[t.length-1].symbol.range.startLineNumber===e?t.push(o):(t=[o],n.push(t)))}const o=l.ZF.capture(this._editor),s=this._getLayoutInfo();this._editor.changeDecorations((e=>{this._editor.changeViewZones((t=>{const i=new W;let o=0,r=0;for(;r<n.length&&o<this._lenses.length;){let e=n[r][0].symbol.range.startLineNumber,a=this._lenses[o].getLineNumber();a<e?(this._lenses[o].dispose(i,t),this._lenses.splice(o,1)):a===e?(this._lenses[o].updateCodeLensSymbols(n[r],i),r++,o++):(this._lenses.splice(o,0,new H(n[r],this._editor,this._styleClassName,i,t,s.codeLensHeight,(()=>this._resolveCodeLensesInViewportSoon()))),o++,r++)}for(;o<this._lenses.length;)this._lenses[o].dispose(i,t),this._lenses.splice(o,1);for(;r<n.length;)this._lenses.push(new H(n[r],this._editor,this._styleClassName,i,t,s.codeLensHeight,(()=>this._resolveCodeLensesInViewportSoon()))),r++;i.commit(e)}))})),o.restore(this._editor)}_resolveCodeLensesInViewportSoon(){this._editor.getModel()&&this._resolveCodeLensesScheduler.schedule()}_resolveCodeLensesInViewport(){var e;null===(e=this._resolveCodeLensesPromise)||void 0===e||e.cancel(),this._resolveCodeLensesPromise=void 0;const t=this._editor.getModel();if(!t)return;const i=[],n=[];if(this._lenses.forEach((e=>{const o=e.computeIfNecessary(t);o&&(i.push(o),n.push(e))})),0===i.length)return;const r=Date.now(),a=(0,o.PG)((e=>{const o=i.map(((i,o)=>{const r=new Array(i.length),a=i.map(((i,n)=>i.symbol.command||"function"!=typeof i.provider.resolveCodeLens?(r[n]=i.symbol,Promise.resolve(void 0)):Promise.resolve(i.provider.resolveCodeLens(t,i.symbol,e)).then((e=>{r[n]=e}),s.Cp)));return Promise.all(a).then((()=>{e.isCancellationRequested||n[o].isDisposed()||n[o].updateCommands(r)}))}));return Promise.all(o)}));this._resolveCodeLensesPromise=a,this._resolveCodeLensesPromise.then((()=>{const e=this._resolveCodeLensesDelays.update(t,Date.now()-r);this._resolveCodeLensesScheduler.delay=e,this._currentCodeLensModel&&this._codeLensCache.put(t,this._currentCodeLensModel),this._oldCodeLensModels.clear(),a===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)}),(e=>{(0,s.dL)(e),a===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)}))}getLenses(){return this._lenses}};Z.ID="css.editor.codeLens",Z=$([K(1,_.H),K(2,j.lT),K(3,E)],Z),(0,c._K)(Z.ID,Z),(0,c.Qr)(class extends c.R6{constructor(){super({id:"codelens.showLensesInCurrentLine",precondition:h.u.hasCodeLensProvider,label:(0,z.N)("showLensOnLine","Show CodeLens Commands For Current Line"),alias:"Show CodeLens Commands For Current Line"})}run(e,t){return q(this,void 0,void 0,(function*(){if(!t.hasModel())return;const i=e.get(U.eJ),n=e.get(_.H),o=e.get(j.lT),s=t.getSelection().positionLineNumber,r=t.getContribution(Z.ID),a=[];for(let e of r.getLenses())if(e.getLineNumber()===s)for(let t of e.getItems()){const{command:e}=t.symbol;e&&a.push({label:e.title,command:e})}if(0===a.length)return;const l=yield i.pick(a,{canPickMany:!1});if(l)try{yield n.executeCommand(l.command.id,...l.command.arguments||[])}catch(e){o.error(e)}}))}})},83308:(e,t,i)=>{"use strict";i.d(t,{E:()=>d,R:()=>h});var n=i(71050),o=i(17301),s=i(70666),r=i(24314),a=i(44101),l=i(51200),c=i(94565);function d(e,t){const i=[],n=a.OH.ordered(e).reverse().map((n=>Promise.resolve(n.provideDocumentColors(e,t)).then((e=>{if(Array.isArray(e))for(let t of e)i.push({colorInfo:t,provider:n})}))));return Promise.all(n).then((()=>i))}function h(e,t,i,n){return Promise.resolve(i.provideColorPresentations(e,t,n))}c.P.registerCommand("_executeDocumentColorProvider",(function(e,...t){const[i]=t;if(!(i instanceof s.o))throw(0,o.b1)();const r=e.get(l.q).getModel(i);if(!r)throw(0,o.b1)();const c=[],d=a.OH.ordered(r).reverse().map((e=>Promise.resolve(e.provideDocumentColors(r,n.T.None)).then((e=>{if(Array.isArray(e))for(let t of e)c.push({range:t.range,color:[t.color.red,t.color.green,t.color.blue,t.color.alpha]})}))));return Promise.all(d).then((()=>c))})),c.P.registerCommand("_executeColorPresentationProvider",(function(e,...t){const[i,c]=t,{uri:d,range:h}=c;if(!(d instanceof s.o&&Array.isArray(i)&&4===i.length&&r.e.isIRange(h)))throw(0,o.b1)();const[u,g,p,f]=i,m=e.get(l.q).getModel(d);if(!m)throw(0,o.b1)();const v={range:h,color:{red:u,green:g,blue:p,alpha:f}},_=[],b=a.OH.ordered(m).reverse().map((e=>Promise.resolve(e.provideColorPresentations(m,v,n.T.None)).then((e=>{Array.isArray(e)&&_.push(...e)}))));return Promise.all(b).then((()=>_))}))},77956:(e,t,i)=>{"use strict";i.r(t),i.d(t,{ColorContribution:()=>a});var n=i(5976),o=i(16830),s=i(24314),r=(i(64494),i(67247));class a extends n.JT{constructor(e){super(),this._editor=e,this._register(e.onMouseDown((e=>this.onMouseDown(e))))}dispose(){super.dispose()}onMouseDown(e){var t;if(6!==e.target.type)return;if(![...(null===(t=e.target.element)||void 0===t?void 0:t.classList.values())||[]].find((e=>e.startsWith("ced-colorBox"))))return;if(!e.target.range)return;const i=this._editor.getContribution(r.ModesHoverController.ID);if(!i.isColorPickerVisible()){const t=new s.e(e.target.range.startLineNumber,e.target.range.startColumn+1,e.target.range.endLineNumber,e.target.range.endColumn+1);i.showContentHover(t,0,!1)}}}a.ID="editor.contrib.colorContribution",(0,o._K)(a.ID,a)},64494:(e,t,i)=>{"use strict";i.d(t,{i:()=>v});var n=i(15393),o=i(41264),s=i(17301),r=i(89954),a=i(5976),l=i(16830),c=i(11640),d=i(24314),h=i(44174),u=i(44101),g=i(83308),p=i(33108),f=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},m=function(e,t){return function(i,n){t(i,n,e)}};let v=class e extends a.JT{constructor(e,t,i){super(),this._editor=e,this._codeEditorService=t,this._configurationService=i,this._localToDispose=this._register(new a.SL),this._decorationsIds=[],this._colorDatas=new Map,this._colorDecoratorIds=[],this._decorationsTypes=new Set,this._register(e.onDidChangeModel((()=>{this._isEnabled=this.isEnabled(),this.onModelChanged()}))),this._register(e.onDidChangeModelLanguage((()=>this.onModelChanged()))),this._register(u.OH.onDidChange((()=>this.onModelChanged()))),this._register(e.onDidChangeConfiguration((()=>{let e=this._isEnabled;this._isEnabled=this.isEnabled(),e!==this._isEnabled&&(this._isEnabled?this.onModelChanged():this.removeAllDecorations())}))),this._timeoutTimer=null,this._computePromise=null,this._isEnabled=this.isEnabled(),this.onModelChanged()}isEnabled(){const e=this._editor.getModel();if(!e)return!1;const t=e.getLanguageId(),i=this._configurationService.getValue(t);if(i&&"object"==typeof i){const e=i.colorDecorators;if(e&&void 0!==e.enable&&!e.enable)return e.enable}return this._editor.getOption(17)}static get(e){return e.getContribution(this.ID)}dispose(){this.stop(),this.removeAllDecorations(),super.dispose()}onModelChanged(){if(this.stop(),!this._isEnabled)return;const t=this._editor.getModel();t&&u.OH.has(t)&&(this._localToDispose.add(this._editor.onDidChangeModelContent((()=>{this._timeoutTimer||(this._timeoutTimer=new n._F,this._timeoutTimer.cancelAndSet((()=>{this._timeoutTimer=null,this.beginCompute()}),e.RECOMPUTE_TIME))}))),this.beginCompute())}beginCompute(){this._computePromise=(0,n.PG)((e=>{const t=this._editor.getModel();return t?(0,g.E)(t,e):Promise.resolve([])})),this._computePromise.then((e=>{this.updateDecorations(e),this.updateColorDecorators(e),this._computePromise=null}),s.dL)}stop(){this._timeoutTimer&&(this._timeoutTimer.cancel(),this._timeoutTimer=null),this._computePromise&&(this._computePromise.cancel(),this._computePromise=null),this._localToDispose.clear()}updateDecorations(e){const t=e.map((e=>({range:{startLineNumber:e.colorInfo.range.startLineNumber,startColumn:e.colorInfo.range.startColumn,endLineNumber:e.colorInfo.range.endLineNumber,endColumn:e.colorInfo.range.endColumn},options:h.qx.EMPTY})));this._decorationsIds=this._editor.deltaDecorations(this._decorationsIds,t),this._colorDatas=new Map,this._decorationsIds.forEach(((t,i)=>this._colorDatas.set(t,e[i])))}updateColorDecorators(e){let t=[],i={};for(let n=0;n<e.length&&t.length<500;n++){const{red:s,green:a,blue:l,alpha:c}=e[n].colorInfo.color,d=new o.VS(Math.round(255*s),Math.round(255*a),Math.round(255*l),c);let h=(0,r.vp)(`rgba(${d.r},${d.g},${d.b},${d.a})`).toString(16),u=`rgba(${d.r}, ${d.g}, ${d.b}, ${d.a})`,g="colorBox-"+h;this._decorationsTypes.has(g)||i[g]||this._codeEditorService.registerDecorationType("color-detector-color",g,{before:{contentText:" ",border:"solid 0.1em #000",margin:"0.1em 0.2em 0 0.2em",width:"0.8em",height:"0.8em",backgroundColor:u},dark:{before:{border:"solid 0.1em #eee"}}},void 0,this._editor),i[g]=!0,t.push({range:{startLineNumber:e[n].colorInfo.range.startLineNumber,startColumn:e[n].colorInfo.range.startColumn,endLineNumber:e[n].colorInfo.range.endLineNumber,endColumn:e[n].colorInfo.range.endColumn},options:this._codeEditorService.resolveDecorationOptions(g,!0)})}this._decorationsTypes.forEach((e=>{i[e]||this._codeEditorService.removeDecorationType(e)})),this._colorDecoratorIds=this._editor.deltaDecorations(this._colorDecoratorIds,t)}removeAllDecorations(){this._decorationsIds=this._editor.deltaDecorations(this._decorationsIds,[]),this._colorDecoratorIds=this._editor.deltaDecorations(this._colorDecoratorIds,[]),this._decorationsTypes.forEach((e=>{this._codeEditorService.removeDecorationType(e)}))}getColorData(e){const t=this._editor.getModel();if(!t)return null;const i=t.getDecorationsInRange(d.e.fromPositions(e,e)).filter((e=>this._colorDatas.has(e.id)));return 0===i.length?null:this._colorDatas.get(i[0].id)}};v.ID="editor.contrib.colorDetector",v.RECOMPUTE_TIME=1e3,v=f([m(1,c.$),m(2,p.Ui)],v),(0,l._K)(v.ID,v)},89098:(e,t,i)=>{"use strict";i.r(t);var n=i(22258),o=i(16830),s=i(24314),r=i(29102),a=i(69386),l=i(50187),c=i(3860),d=i(83831);class h{constructor(e,t){this._selection=e,this._insertSpace=t,this._usedEndToken=null}static _haystackHasNeedleAtOffset(e,t,i){if(i<0)return!1;const n=t.length;if(i+n>e.length)return!1;for(let o=0;o<n;o++){const n=e.charCodeAt(i+o),s=t.charCodeAt(o);if(n!==s&&!(n>=65&&n<=90&&n+32===s||s>=65&&s<=90&&s+32===n))return!1}return!0}_createOperationsForBlockComment(e,t,i,n,o,r){const a=e.startLineNumber,l=e.startColumn,c=e.endLineNumber,d=e.endColumn,u=o.getLineContent(a),g=o.getLineContent(c);let p,f=u.lastIndexOf(t,l-1+t.length),m=g.indexOf(i,d-1-i.length);if(-1!==f&&-1!==m)if(a===c){u.substring(f+t.length,m).indexOf(i)>=0&&(f=-1,m=-1)}else{const e=u.substring(f+t.length),n=g.substring(0,m);(e.indexOf(i)>=0||n.indexOf(i)>=0)&&(f=-1,m=-1)}-1!==f&&-1!==m?(n&&f+t.length<u.length&&32===u.charCodeAt(f+t.length)&&(t+=" "),n&&m>0&&32===g.charCodeAt(m-1)&&(i=" "+i,m-=1),p=h._createRemoveBlockCommentOperations(new s.e(a,f+t.length+1,c,m+1),t,i)):(p=h._createAddBlockCommentOperations(e,t,i,this._insertSpace),this._usedEndToken=1===p.length?i:null);for(const e of p)r.addTrackedEditOperation(e.range,e.text)}static _createRemoveBlockCommentOperations(e,t,i){let n=[];return s.e.isEmpty(e)?n.push(a.h.delete(new s.e(e.startLineNumber,e.startColumn-t.length,e.endLineNumber,e.endColumn+i.length))):(n.push(a.h.delete(new s.e(e.startLineNumber,e.startColumn-t.length,e.startLineNumber,e.startColumn))),n.push(a.h.delete(new s.e(e.endLineNumber,e.endColumn,e.endLineNumber,e.endColumn+i.length)))),n}static _createAddBlockCommentOperations(e,t,i,n){let o=[];return s.e.isEmpty(e)?o.push(a.h.replace(new s.e(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn),t+"  "+i)):(o.push(a.h.insert(new l.L(e.startLineNumber,e.startColumn),t+(n?" ":""))),o.push(a.h.insert(new l.L(e.endLineNumber,e.endColumn),(n?" ":"")+i))),o}getEditOperations(e,t){const i=this._selection.startLineNumber,n=this._selection.startColumn;e.tokenizeIfCheap(i);const o=e.getLanguageIdAtPosition(i,n),s=d.zu.getComments(o);s&&s.blockCommentStartToken&&s.blockCommentEndToken&&this._createOperationsForBlockComment(this._selection,s.blockCommentStartToken,s.blockCommentEndToken,this._insertSpace,e,t)}computeCursorState(e,t){const i=t.getInverseEditOperations();if(2===i.length){const e=i[0],t=i[1];return new c.Y(e.range.endLineNumber,e.range.endColumn,t.range.startLineNumber,t.range.startColumn)}{const e=i[0].range,t=this._usedEndToken?-this._usedEndToken.length-1:0;return new c.Y(e.endLineNumber,e.endColumn+t,e.endLineNumber,e.endColumn+t)}}}var u=i(97295);class g{constructor(e,t,i,n,o,s){this._selection=e,this._tabSize=t,this._type=i,this._insertSpace=n,this._selectionId=null,this._deltaColumn=0,this._moveEndPositionDown=!1,this._ignoreEmptyLines=o,this._ignoreFirstLine=s||!1}static _gatherPreflightCommentStrings(e,t,i){e.tokenizeIfCheap(t);const n=e.getLanguageIdAtPosition(t,1),o=d.zu.getComments(n),s=o?o.lineCommentToken:null;if(!s)return null;let r=[];for(let e=0,n=i-t+1;e<n;e++)r[e]={ignore:!1,commentStr:s,commentStrOffset:0,commentStrLength:s.length};return r}static _analyzeLines(e,t,i,n,o,s,r){let a,l=!0;a=0===e||1!==e;for(let c=0,d=n.length;c<d;c++){const d=n[c],g=o+c;if(g===o&&r){d.ignore=!0;continue}const p=i.getLineContent(g),f=u.LC(p);if(-1!==f){if(l=!1,d.ignore=!1,d.commentStrOffset=f,a&&!h._haystackHasNeedleAtOffset(p,d.commentStr,f)&&(0===e?a=!1:1===e||(d.ignore=!0)),a&&t){const e=f+d.commentStrLength;e<p.length&&32===p.charCodeAt(e)&&(d.commentStrLength+=1)}}else d.ignore=s,d.commentStrOffset=p.length}if(0===e&&l){a=!1;for(let e=0,t=n.length;e<t;e++)n[e].ignore=!1}return{supported:!0,shouldRemoveComments:a,lines:n}}static _gatherPreflightData(e,t,i,n,o,s,r){const a=g._gatherPreflightCommentStrings(i,n,o);return null===a?{supported:!1}:g._analyzeLines(e,t,i,a,n,s,r)}_executeLineComments(e,t,i,n){let o;i.shouldRemoveComments?o=g._createRemoveLineCommentsOperations(i.lines,n.startLineNumber):(g._normalizeInsertionPoint(e,i.lines,n.startLineNumber,this._tabSize),o=this._createAddLineCommentsOperations(i.lines,n.startLineNumber));const r=new l.L(n.positionLineNumber,n.positionColumn);for(let i=0,n=o.length;i<n;i++)if(t.addEditOperation(o[i].range,o[i].text),s.e.isEmpty(o[i].range)&&s.e.getStartPosition(o[i].range).equals(r)){e.getLineContent(r.lineNumber).length+1===r.column&&(this._deltaColumn=(o[i].text||"").length)}this._selectionId=t.trackSelection(n)}_attemptRemoveBlockComment(e,t,i,n){let o=t.startLineNumber,r=t.endLineNumber,a=n.length+Math.max(e.getLineFirstNonWhitespaceColumn(t.startLineNumber),t.startColumn),l=e.getLineContent(o).lastIndexOf(i,a-1),c=e.getLineContent(r).indexOf(n,t.endColumn-1-i.length);return-1!==l&&-1===c&&(c=e.getLineContent(o).indexOf(n,l+i.length),r=o),-1===l&&-1!==c&&(l=e.getLineContent(r).lastIndexOf(i,c),o=r),!t.isEmpty()||-1!==l&&-1!==c||(l=e.getLineContent(o).indexOf(i),-1!==l&&(c=e.getLineContent(o).indexOf(n,l+i.length))),-1!==l&&32===e.getLineContent(o).charCodeAt(l+i.length)&&(i+=" "),-1!==c&&32===e.getLineContent(r).charCodeAt(c-1)&&(n=" "+n,c-=1),-1!==l&&-1!==c?h._createRemoveBlockCommentOperations(new s.e(o,l+i.length+1,r,c+1),i,n):null}_executeBlockComment(e,t,i){e.tokenizeIfCheap(i.startLineNumber);let n=e.getLanguageIdAtPosition(i.startLineNumber,1),o=d.zu.getComments(n);if(!o||!o.blockCommentStartToken||!o.blockCommentEndToken)return;const r=o.blockCommentStartToken,a=o.blockCommentEndToken;let l=this._attemptRemoveBlockComment(e,i,r,a);if(!l){if(i.isEmpty()){const t=e.getLineContent(i.startLineNumber);let n=u.LC(t);-1===n&&(n=t.length),l=h._createAddBlockCommentOperations(new s.e(i.startLineNumber,n+1,i.startLineNumber,t.length+1),r,a,this._insertSpace)}else l=h._createAddBlockCommentOperations(new s.e(i.startLineNumber,e.getLineFirstNonWhitespaceColumn(i.startLineNumber),i.endLineNumber,e.getLineMaxColumn(i.endLineNumber)),r,a,this._insertSpace);1===l.length&&(this._deltaColumn=r.length+1)}this._selectionId=t.trackSelection(i);for(const e of l)t.addEditOperation(e.range,e.text)}getEditOperations(e,t){let i=this._selection;if(this._moveEndPositionDown=!1,i.startLineNumber===i.endLineNumber&&this._ignoreFirstLine)return t.addEditOperation(new s.e(i.startLineNumber,e.getLineMaxColumn(i.startLineNumber),i.startLineNumber+1,1),i.startLineNumber===e.getLineCount()?"":"\n"),void(this._selectionId=t.trackSelection(i));i.startLineNumber<i.endLineNumber&&1===i.endColumn&&(this._moveEndPositionDown=!0,i=i.setEndPosition(i.endLineNumber-1,e.getLineMaxColumn(i.endLineNumber-1)));const n=g._gatherPreflightData(this._type,this._insertSpace,e,i.startLineNumber,i.endLineNumber,this._ignoreEmptyLines,this._ignoreFirstLine);return n.supported?this._executeLineComments(e,t,n,i):this._executeBlockComment(e,t,i)}computeCursorState(e,t){let i=t.getTrackedSelection(this._selectionId);return this._moveEndPositionDown&&(i=i.setEndPosition(i.endLineNumber+1,1)),new c.Y(i.selectionStartLineNumber,i.selectionStartColumn+this._deltaColumn,i.positionLineNumber,i.positionColumn+this._deltaColumn)}static _createRemoveLineCommentsOperations(e,t){let i=[];for(let n=0,o=e.length;n<o;n++){const o=e[n];o.ignore||i.push(a.h.delete(new s.e(t+n,o.commentStrOffset+1,t+n,o.commentStrOffset+o.commentStrLength+1)))}return i}_createAddLineCommentsOperations(e,t){let i=[];const n=this._insertSpace?" ":"";for(let o=0,s=e.length;o<s;o++){const s=e[o];s.ignore||i.push(a.h.insert(new l.L(t+o,s.commentStrOffset+1),s.commentStr+n))}return i}static nextVisibleColumn(e,t,i,n){return i?e+(t-e%t):e+n}static _normalizeInsertionPoint(e,t,i,n){let o,s,r=1073741824;for(let o=0,s=t.length;o<s;o++){if(t[o].ignore)continue;const s=e.getLineContent(i+o);let a=0;for(let e=0,i=t[o].commentStrOffset;a<r&&e<i;e++)a=g.nextVisibleColumn(a,n,9===s.charCodeAt(e),1);a<r&&(r=a)}r=Math.floor(r/n)*n;for(let a=0,l=t.length;a<l;a++){if(t[a].ignore)continue;const l=e.getLineContent(i+a);let c=0;for(o=0,s=t[a].commentStrOffset;c<r&&o<s;o++)c=g.nextVisibleColumn(c,n,9===l.charCodeAt(o),1);t[a].commentStrOffset=c>r?o-1:o}}}var p=i(63580),f=i(84144);class m extends o.R6{constructor(e,t){super(t),this._type=e}run(e,t){if(!t.hasModel())return;const i=[],n=t.getModel().getOptions(),o=t.getOption(19),r=t.getSelections().map(((e,t)=>({selection:e,index:t,ignoreFirstLine:!1})));r.sort(((e,t)=>s.e.compareRangesUsingStarts(e.selection,t.selection)));let a=r[0];for(let e=1;e<r.length;e++){const t=r[e];a.selection.endLineNumber===t.selection.startLineNumber&&(a.index<t.index?t.ignoreFirstLine=!0:(a.ignoreFirstLine=!0,a=t))}for(const e of r)i.push(new g(e.selection,n.tabSize,this._type,o.insertSpace,o.ignoreEmptyLines,e.ignoreFirstLine));t.pushUndoStop(),t.executeCommands(this.id,i),t.pushUndoStop()}}class v extends o.R6{constructor(){super({id:"editor.action.blockComment",label:p.N("comment.block","Toggle Block Comment"),alias:"Toggle Block Comment",precondition:r.u.writable,kbOpts:{kbExpr:r.u.editorTextFocus,primary:1567,linux:{primary:3103},weight:100},menuOpts:{menuId:f.eH.MenubarEditMenu,group:"5_insert",title:p.N({key:"miToggleBlockComment",comment:["&& denotes a mnemonic"]},"Toggle &&Block Comment"),order:2}})}run(e,t){if(!t.hasModel())return;const i=t.getOption(19),n=[],o=t.getSelections();for(const e of o)n.push(new h(e,i.insertSpace));t.pushUndoStop(),t.executeCommands(this.id,n),t.pushUndoStop()}}(0,o.Qr)(class extends m{constructor(){super(0,{id:"editor.action.commentLine",label:p.N("comment.line","Toggle Line Comment"),alias:"Toggle Line Comment",precondition:r.u.writable,kbOpts:{kbExpr:r.u.editorTextFocus,primary:2133,weight:100},menuOpts:{menuId:f.eH.MenubarEditMenu,group:"5_insert",title:p.N({key:"miToggleLineComment",comment:["&& denotes a mnemonic"]},"&&Toggle Line Comment"),order:1}})}}),(0,o.Qr)(class extends m{constructor(){super(1,{id:"editor.action.addCommentLine",label:p.N("comment.line.add","Add Line Comment"),alias:"Add Line Comment",precondition:r.u.writable,kbOpts:{kbExpr:r.u.editorTextFocus,primary:(0,n.gx)(2089,2081),weight:100}})}}),(0,o.Qr)(class extends m{constructor(){super(2,{id:"editor.action.removeCommentLine",label:p.N("comment.line.remove","Remove Line Comment"),alias:"Remove Line Comment",precondition:r.u.writable,kbOpts:{kbExpr:r.u.editorTextFocus,primary:(0,n.gx)(2089,2099),weight:100}})}}),(0,o.Qr)(v)},76522:(e,t,i)=>{"use strict";i.r(t),i.d(t,{ContextMenuController:()=>v});var n=i(65321),o=i(76033),s=i(74741),r=i(5976),a=i(1432),l=i(16830),c=i(29102),d=i(63580),h=i(84144),u=i(38819),g=i(5606),p=i(91847),f=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},m=function(e,t){return function(i,n){t(i,n,e)}};let v=class e{constructor(e,t,i,o,s,a){this._contextMenuService=t,this._contextViewService=i,this._contextKeyService=o,this._keybindingService=s,this._menuService=a,this._toDispose=new r.SL,this._contextMenuIsBeingShownCount=0,this._editor=e,this._toDispose.add(this._editor.onContextMenu((e=>this._onContextMenu(e)))),this._toDispose.add(this._editor.onMouseWheel((e=>{if(this._contextMenuIsBeingShownCount>0){const t=this._contextViewService.getContextViewElement(),i=e.srcElement;i.shadowRoot&&n.Ay(t)===i.shadowRoot||this._contextViewService.hideContextView()}}))),this._toDispose.add(this._editor.onKeyDown((e=>{58===e.keyCode&&(e.preventDefault(),e.stopPropagation(),this.showContextMenu())})))}static get(t){return t.getContribution(e.ID)}_onContextMenu(e){if(!this._editor.hasModel())return;if(!this._editor.getOption(20))return this._editor.focus(),void(e.target.position&&!this._editor.getSelection().containsPosition(e.target.position)&&this._editor.setPosition(e.target.position));if(12===e.target.type)return;if(e.event.preventDefault(),e.event.stopPropagation(),6!==e.target.type&&7!==e.target.type&&1!==e.target.type)return;if(this._editor.focus(),e.target.position){let t=!1;for(const i of this._editor.getSelections())if(i.containsPosition(e.target.position)){t=!0;break}t||this._editor.setPosition(e.target.position)}let t=null;1!==e.target.type&&(t={x:e.event.posx-1,width:2,y:e.event.posy-1,height:2}),this.showContextMenu(t)}showContextMenu(e){if(!this._editor.getOption(20))return;if(!this._editor.hasModel())return;if(!this._contextMenuService)return void this._editor.focus();const t=this._getMenuActions(this._editor.getModel(),this._editor.isSimpleWidget?h.eH.SimpleEditorContext:h.eH.EditorContext);t.length>0&&this._doShowContextMenu(t,e)}_getMenuActions(e,t){const i=[],n=this._menuService.createMenu(t,this._contextKeyService),o=n.getActions({arg:e.uri});n.dispose();for(let t of o){const[,n]=t;let o=0;for(const t of n)if(t instanceof h.NZ){const n=this._getMenuActions(e,t.item.submenu);n.length>0&&(i.push(new s.wY(t.id,t.label,n)),o++)}else i.push(t),o++;o&&i.push(new s.Z0)}return i.length&&i.pop(),i}_doShowContextMenu(e,t=null){if(!this._editor.hasModel())return;const i=this._editor.getOption(52);if(this._editor.updateOptions({hover:{enabled:!1}}),!t){this._editor.revealPosition(this._editor.getPosition(),1),this._editor.render();const e=this._editor.getScrolledVisiblePosition(this._editor.getPosition()),i=n.i(this._editor.getDomNode()),o=i.left+e.left,s=i.top+e.top+e.height;t={x:o,y:s}}const s=this._editor.getOption(113)&&!a.gn;this._contextMenuIsBeingShownCount++,this._contextMenuService.showContextMenu({domForShadowRoot:s?this._editor.getDomNode():void 0,getAnchor:()=>t,getActions:()=>e,getActionViewItem:e=>{const t=this._keybindingFor(e);if(t)return new o.g(e,e,{label:!0,keybinding:t.getLabel(),isMenu:!0});const i=e;return"function"==typeof i.getActionViewItem?i.getActionViewItem():new o.g(e,e,{icon:!0,label:!0,isMenu:!0})},getKeyBinding:e=>this._keybindingFor(e),onHide:e=>{this._contextMenuIsBeingShownCount--,this._editor.focus(),this._editor.updateOptions({hover:i})}})}_keybindingFor(e){return this._keybindingService.lookupKeybinding(e.id)}dispose(){this._contextMenuIsBeingShownCount>0&&this._contextViewService.hideContextView(),this._toDispose.dispose()}};v.ID="editor.contrib.contextmenu",v=f([m(1,g.i),m(2,g.u),m(3,u.i6),m(4,p.d),m(5,h.co)],v);class _ extends l.R6{constructor(){super({id:"editor.action.showContextMenu",label:d.N("action.showContextMenu.label","Show Editor Context Menu"),alias:"Show Editor Context Menu",precondition:void 0,kbOpts:{kbExpr:c.u.textInputFocus,primary:1092,weight:100}})}run(e,t){v.get(t).showContextMenu()}}(0,l._K)(v.ID,v),(0,l.Qr)(_)},42834:(e,t,i)=>{"use strict";i.r(t),i.d(t,{CursorRedo:()=>h,CursorUndo:()=>d,CursorUndoRedoController:()=>c});var n=i(5976),o=i(16830),s=i(29102),r=i(63580);class a{constructor(e){this.selections=e}equals(e){const t=this.selections.length;if(t!==e.selections.length)return!1;for(let i=0;i<t;i++)if(!this.selections[i].equalsSelection(e.selections[i]))return!1;return!0}}class l{constructor(e,t,i){this.cursorState=e,this.scrollTop=t,this.scrollLeft=i}}class c extends n.JT{constructor(e){super(),this._editor=e,this._isCursorUndoRedo=!1,this._undoStack=[],this._redoStack=[],this._register(e.onDidChangeModel((e=>{this._undoStack=[],this._redoStack=[]}))),this._register(e.onDidChangeModelContent((e=>{this._undoStack=[],this._redoStack=[]}))),this._register(e.onDidChangeCursorSelection((t=>{if(this._isCursorUndoRedo)return;if(!t.oldSelections)return;if(t.oldModelVersionId!==t.modelVersionId)return;const i=new a(t.oldSelections);this._undoStack.length>0&&this._undoStack[this._undoStack.length-1].cursorState.equals(i)||(this._undoStack.push(new l(i,e.getScrollTop(),e.getScrollLeft())),this._redoStack=[],this._undoStack.length>50&&this._undoStack.shift())})))}static get(e){return e.getContribution(c.ID)}cursorUndo(){this._editor.hasModel()&&0!==this._undoStack.length&&(this._redoStack.push(new l(new a(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._undoStack.pop()))}cursorRedo(){this._editor.hasModel()&&0!==this._redoStack.length&&(this._undoStack.push(new l(new a(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._redoStack.pop()))}_applyState(e){this._isCursorUndoRedo=!0,this._editor.setSelections(e.cursorState.selections),this._editor.setScrollPosition({scrollTop:e.scrollTop,scrollLeft:e.scrollLeft}),this._isCursorUndoRedo=!1}}c.ID="editor.contrib.cursorUndoRedoController";class d extends o.R6{constructor(){super({id:"cursorUndo",label:r.N("cursor.undo","Cursor Undo"),alias:"Cursor Undo",precondition:void 0,kbOpts:{kbExpr:s.u.textInputFocus,primary:2099,weight:100}})}run(e,t,i){c.get(t).cursorUndo()}}class h extends o.R6{constructor(){super({id:"cursorRedo",label:r.N("cursor.redo","Cursor Redo"),alias:"Cursor Redo",precondition:void 0})}run(e,t,i){c.get(t).cursorRedo()}}(0,o._K)(c.ID,c),(0,o.Qr)(d),(0,o.Qr)(h)},7441:(e,t,i)=>{"use strict";i.r(t),i.d(t,{DragAndDropController:()=>u});var n=i(5976),o=i(1432),s=(i(22115),i(16830)),r=i(50187),a=i(24314),l=i(3860),c=i(44174);class d{constructor(e,t,i){this.selection=e,this.targetPosition=t,this.copy=i,this.targetSelection=null}getEditOperations(e,t){let i=e.getValueInRange(this.selection);this.copy||t.addEditOperation(this.selection,null),t.addEditOperation(new a.e(this.targetPosition.lineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.targetPosition.column),i),!this.selection.containsPosition(this.targetPosition)||this.copy&&(this.selection.getEndPosition().equals(this.targetPosition)||this.selection.getStartPosition().equals(this.targetPosition))?this.copy?this.targetSelection=new l.Y(this.targetPosition.lineNumber,this.targetPosition.column,this.selection.endLineNumber-this.selection.startLineNumber+this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn):this.targetPosition.lineNumber>this.selection.endLineNumber?this.targetSelection=new l.Y(this.targetPosition.lineNumber-this.selection.endLineNumber+this.selection.startLineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn):this.targetPosition.lineNumber<this.selection.endLineNumber?this.targetSelection=new l.Y(this.targetPosition.lineNumber,this.targetPosition.column,this.targetPosition.lineNumber+this.selection.endLineNumber-this.selection.startLineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column+this.selection.endColumn-this.selection.startColumn:this.selection.endColumn):this.selection.endColumn<=this.targetPosition.column?this.targetSelection=new l.Y(this.targetPosition.lineNumber-this.selection.endLineNumber+this.selection.startLineNumber,(this.selection.startLineNumber,this.selection.endLineNumber,this.targetPosition.column-this.selection.endColumn+this.selection.startColumn),this.targetPosition.lineNumber,this.selection.startLineNumber===this.selection.endLineNumber?this.targetPosition.column:this.selection.endColumn):this.targetSelection=new l.Y(this.targetPosition.lineNumber-this.selection.endLineNumber+this.selection.startLineNumber,this.targetPosition.column,this.targetPosition.lineNumber,this.targetPosition.column+this.selection.endColumn-this.selection.startColumn):this.targetSelection=this.selection}computeCursorState(e,t){return this.targetSelection}}function h(e){return o.dz?e.altKey:e.ctrlKey}class u extends n.JT{constructor(e){super(),this._editor=e,this._register(this._editor.onMouseDown((e=>this._onEditorMouseDown(e)))),this._register(this._editor.onMouseUp((e=>this._onEditorMouseUp(e)))),this._register(this._editor.onMouseDrag((e=>this._onEditorMouseDrag(e)))),this._register(this._editor.onMouseDrop((e=>this._onEditorMouseDrop(e)))),this._register(this._editor.onMouseDropCanceled((()=>this._onEditorMouseDropCanceled()))),this._register(this._editor.onKeyDown((e=>this.onEditorKeyDown(e)))),this._register(this._editor.onKeyUp((e=>this.onEditorKeyUp(e)))),this._register(this._editor.onDidBlurEditorWidget((()=>this.onEditorBlur()))),this._register(this._editor.onDidBlurEditorText((()=>this.onEditorBlur()))),this._dndDecorationIds=[],this._mouseDown=!1,this._modifierPressed=!1,this._dragSelection=null}onEditorBlur(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1}onEditorKeyDown(e){this._editor.getOption(31)&&!this._editor.getOption(18)&&(h(e)&&(this._modifierPressed=!0),this._mouseDown&&h(e)&&this._editor.updateOptions({mouseStyle:"copy"}))}onEditorKeyUp(e){this._editor.getOption(31)&&!this._editor.getOption(18)&&(h(e)&&(this._modifierPressed=!1),this._mouseDown&&e.keyCode===u.TRIGGER_KEY_VALUE&&this._editor.updateOptions({mouseStyle:"default"}))}_onEditorMouseDown(e){this._mouseDown=!0}_onEditorMouseUp(e){this._mouseDown=!1,this._editor.updateOptions({mouseStyle:"text"})}_onEditorMouseDrag(e){let t=e.target;if(null===this._dragSelection){let e=(this._editor.getSelections()||[]).filter((e=>t.position&&e.containsPosition(t.position)));if(1!==e.length)return;this._dragSelection=e[0]}h(e.event)?this._editor.updateOptions({mouseStyle:"copy"}):this._editor.updateOptions({mouseStyle:"default"}),t.position&&(this._dragSelection.containsPosition(t.position)?this._removeDecoration():this.showAt(t.position))}_onEditorMouseDropCanceled(){this._editor.updateOptions({mouseStyle:"text"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}_onEditorMouseDrop(e){if(e.target&&(this._hitContent(e.target)||this._hitMargin(e.target))&&e.target.position){let t=new r.L(e.target.position.lineNumber,e.target.position.column);if(null===this._dragSelection){let i=null;if(e.event.shiftKey){let e=this._editor.getSelection();if(e){const{selectionStartLineNumber:n,selectionStartColumn:o}=e;i=[new l.Y(n,o,t.lineNumber,t.column)]}}else i=(this._editor.getSelections()||[]).map((e=>e.containsPosition(t)?new l.Y(t.lineNumber,t.column,t.lineNumber,t.column):e));this._editor.setSelections(i||[],"mouse",3)}else(!this._dragSelection.containsPosition(t)||(h(e.event)||this._modifierPressed)&&(this._dragSelection.getEndPosition().equals(t)||this._dragSelection.getStartPosition().equals(t)))&&(this._editor.pushUndoStop(),this._editor.executeCommand(u.ID,new d(this._dragSelection,t,h(e.event)||this._modifierPressed)),this._editor.pushUndoStop())}this._editor.updateOptions({mouseStyle:"text"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}showAt(e){let t=[{range:new a.e(e.lineNumber,e.column,e.lineNumber,e.column),options:u._DECORATION_OPTIONS}];this._dndDecorationIds=this._editor.deltaDecorations(this._dndDecorationIds,t),this._editor.revealPosition(e,1)}_removeDecoration(){this._dndDecorationIds=this._editor.deltaDecorations(this._dndDecorationIds,[])}_hitContent(e){return 6===e.type||7===e.type}_hitMargin(e){return 2===e.type||3===e.type||4===e.type}dispose(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1,super.dispose()}}u.ID="editor.contrib.dragAndDrop",u.TRIGGER_KEY_VALUE=o.dz?6:5,u._DECORATION_OPTIONS=c.qx.register({description:"dnd-target",className:"dnd-target"}),(0,s._K)(u.ID,u)},81372:(e,t,i)=>{"use strict";i.r(t),i.d(t,{getDocumentSymbols:()=>h});var n=i(71050),o=i(98401),s=i(70666),r=i(51200),a=i(88216),l=i(86895),c=i(94565),d=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function h(e,t,i){return d(this,void 0,void 0,(function*(){const n=yield l.C3.create(e,i);return t?n.asListOfDocumentSymbols():n.getTopLevelSymbols()}))}c.P.registerCommand("_executeDocumentSymbolProvider",(function(e,...t){return d(this,void 0,void 0,(function*(){const[i]=t;(0,o.p_)(s.o.isUri(i));const l=e.get(r.q).getModel(i);if(l)return h(l,!1,n.T.None);const c=yield e.get(a.S).createModelReference(i);try{return yield h(c.object.textEditorModel,!1,n.T.None)}finally{c.dispose()}}))}))},86895:(e,t,i)=>{"use strict";i.d(t,{C3:()=>p});var n=i(9488),o=i(71050),s=i(17301),r=i(53725),a=i(43702),l=i(24314),c=i(44101),d=i(21036);class h{remove(){this.parent&&this.parent.children.delete(this.id)}static findId(e,t){let i;"string"==typeof e?i=`${t.id}/${e}`:(i=`${t.id}/${e.name}`,void 0!==t.children.get(i)&&(i=`${t.id}/${e.name}_${e.range.startLineNumber}_${e.range.startColumn}`));let n=i;for(let e=0;void 0!==t.children.get(n);e++)n=`${i}_${e}`;return n}static empty(e){return 0===e.children.size}}class u extends h{constructor(e,t,i){super(),this.id=e,this.parent=t,this.symbol=i,this.children=new Map}}class g extends h{constructor(e,t,i,n){super(),this.id=e,this.parent=t,this.label=i,this.order=n,this.children=new Map}}class p extends h{constructor(e){super(),this.uri=e,this.id="root",this.parent=void 0,this._groups=new Map,this.children=new Map,this.id="root",this.parent=void 0}static create(e,t){let i=this._keys.for(e,!0),n=p._requests.get(i);if(!n){let t=new o.A;n={promiseCnt:0,source:t,promise:p._create(e,t.token),model:void 0},p._requests.set(i,n);const s=Date.now();n.promise.then((()=>{this._requestDurations.update(e,Date.now()-s)}))}return n.model?Promise.resolve(n.model):(n.promiseCnt+=1,t.onCancellationRequested((()=>{0==--n.promiseCnt&&(n.source.cancel(),p._requests.delete(i))})),new Promise(((e,t)=>{n.promise.then((t=>{n.model=t,e(t)}),(e=>{p._requests.delete(i),t(e)}))})))}static _create(e,t){const i=new o.A(t),r=new p(e.uri),a=c.vJ.ordered(e),l=a.map(((t,n)=>{var o;let a=h.findId(`provider_${n}`,r),l=new g(a,r,null!==(o=t.displayName)&&void 0!==o?o:"Unknown Outline Provider",n);return Promise.resolve(t.provideDocumentSymbols(e,i.token)).then((e=>{for(const t of e||[])p._makeOutlineElement(t,l);return l}),(e=>((0,s.Cp)(e),l))).then((e=>{h.empty(e)?e.remove():r._groups.set(a,e)}))})),d=c.vJ.onDidChange((()=>{const t=c.vJ.ordered(e);(0,n.fS)(t,a)||i.cancel()}));return Promise.all(l).then((()=>i.token.isCancellationRequested&&!t.isCancellationRequested?p._create(e,t):r._compact())).finally((()=>{d.dispose()}))}static _makeOutlineElement(e,t){let i=h.findId(e,t),n=new u(i,t,e);if(e.children)for(const t of e.children)p._makeOutlineElement(t,n);t.children.set(n.id,n)}_compact(){let e=0;for(const[t,i]of this._groups)0===i.children.size?this._groups.delete(t):e+=1;if(1!==e)this.children=this._groups;else{let e=r.$.first(this._groups.values());for(let[,t]of e.children)t.parent=this,this.children.set(t.id,t)}return this}getTopLevelSymbols(){const e=[];for(const t of this.children.values())t instanceof u?e.push(t.symbol):e.push(...r.$.map(t.children.values(),(e=>e.symbol)));return e.sort(((e,t)=>l.e.compareRangesUsingStarts(e.range,t.range)))}asListOfDocumentSymbols(){const e=this.getTopLevelSymbols(),t=[];return p._flattenDocumentSymbols(t,e,""),t.sort(((e,t)=>l.e.compareRangesUsingStarts(e.range,t.range)))}static _flattenDocumentSymbols(e,t,i){for(const n of t)e.push({kind:n.kind,tags:n.tags,name:n.name,detail:n.detail,containerName:n.containerName||i,range:n.range,selectionRange:n.selectionRange,children:void 0}),n.children&&p._flattenDocumentSymbols(e,n.children,n.name)}}p._requestDurations=new d.Y(c.vJ,350),p._requests=new a.z6(9,.75),p._keys=new class{constructor(){this._counter=1,this._data=new WeakMap}for(e,t){return`${e.id}/${t?e.getVersionId():""}/${this._hash(c.vJ.all(e))}`}_hash(e){let t="";for(const i of e){let e=this._data.get(i);void 0===e&&(e=this._counter++,this._data.set(i,e)),t+=e}return t}}},92142:(e,t,i)=>{"use strict";i.r(t),i.d(t,{CommonFindController:()=>Et,FindController:()=>Tt,MatchFindAction:()=>Ot,NextMatchFindAction:()=>Pt,NextSelectionMatchFindAction:()=>Bt,PreviousMatchFindAction:()=>Rt,PreviousSelectionMatchFindAction:()=>Vt,SelectionMatchFindAction:()=>Ft,StartFindAction:()=>Mt,StartFindReplaceAction:()=>Wt,StartFindWithSelectionAction:()=>At,getSelectionSearchString:()=>It});var n=i(15393),o=i(5976),s=i(97295),r=i(16830),a=i(29102),l=i(9488),c=i(61329),d=i(50187),h=i(24314),u=i(3860),g=i(77277),p=i(84973),f=i(44174),m=i(73910),v=i(97781);class _{constructor(e){this._editor=e,this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null,this._startPosition=this._editor.getPosition()}dispose(){this._editor.deltaDecorations(this._allDecorations(),[]),this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null}reset(){this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null}getCount(){return this._decorations.length}getFindScope(){return this._findScopeDecorationIds[0]?this._editor.getModel().getDecorationRange(this._findScopeDecorationIds[0]):null}getFindScopes(){if(this._findScopeDecorationIds.length){const e=this._findScopeDecorationIds.map((e=>this._editor.getModel().getDecorationRange(e))).filter((e=>!!e));if(e.length)return e}return null}getStartPosition(){return this._startPosition}setStartPosition(e){this._startPosition=e,this.setCurrentFindMatch(null)}_getDecorationIndex(e){const t=this._decorations.indexOf(e);return t>=0?t+1:1}getCurrentMatchesPosition(e){let t=this._editor.getModel().getDecorationsInRange(e);for(const e of t){const t=e.options;if(t===_._FIND_MATCH_DECORATION||t===_._CURRENT_FIND_MATCH_DECORATION)return this._getDecorationIndex(e.id)}return 0}setCurrentFindMatch(e){let t=null,i=0;if(e)for(let n=0,o=this._decorations.length;n<o;n++){let o=this._editor.getModel().getDecorationRange(this._decorations[n]);if(e.equalsRange(o)){t=this._decorations[n],i=n+1;break}}return null===this._highlightedDecorationId&&null===t||this._editor.changeDecorations((e=>{if(null!==this._highlightedDecorationId&&(e.changeDecorationOptions(this._highlightedDecorationId,_._FIND_MATCH_DECORATION),this._highlightedDecorationId=null),null!==t&&(this._highlightedDecorationId=t,e.changeDecorationOptions(this._highlightedDecorationId,_._CURRENT_FIND_MATCH_DECORATION)),null!==this._rangeHighlightDecorationId&&(e.removeDecoration(this._rangeHighlightDecorationId),this._rangeHighlightDecorationId=null),null!==t){let i=this._editor.getModel().getDecorationRange(t);if(i.startLineNumber!==i.endLineNumber&&1===i.endColumn){let e=i.endLineNumber-1,t=this._editor.getModel().getLineMaxColumn(e);i=new h.e(i.startLineNumber,i.startColumn,e,t)}this._rangeHighlightDecorationId=e.addDecoration(i,_._RANGE_HIGHLIGHT_DECORATION)}})),i}set(e,t){this._editor.changeDecorations((i=>{let n=_._FIND_MATCH_DECORATION,o=[];if(e.length>1e3){n=_._FIND_MATCH_NO_OVERVIEW_DECORATION;const t=this._editor.getModel().getLineCount(),i=this._editor.getLayoutInfo().height/t,s=Math.max(2,Math.ceil(3/i));let r=e[0].range.startLineNumber,a=e[0].range.endLineNumber;for(let t=1,i=e.length;t<i;t++){const i=e[t].range;a+s>=i.startLineNumber?i.endLineNumber>a&&(a=i.endLineNumber):(o.push({range:new h.e(r,1,a,1),options:_._FIND_MATCH_ONLY_OVERVIEW_DECORATION}),r=i.startLineNumber,a=i.endLineNumber)}o.push({range:new h.e(r,1,a,1),options:_._FIND_MATCH_ONLY_OVERVIEW_DECORATION})}let s=new Array(e.length);for(let t=0,i=e.length;t<i;t++)s[t]={range:e[t].range,options:n};this._decorations=i.deltaDecorations(this._decorations,s),this._overviewRulerApproximateDecorations=i.deltaDecorations(this._overviewRulerApproximateDecorations,o),this._rangeHighlightDecorationId&&(i.removeDecoration(this._rangeHighlightDecorationId),this._rangeHighlightDecorationId=null),this._findScopeDecorationIds.length&&(this._findScopeDecorationIds.forEach((e=>i.removeDecoration(e))),this._findScopeDecorationIds=[]),(null==t?void 0:t.length)&&(this._findScopeDecorationIds=t.map((e=>i.addDecoration(e,_._FIND_SCOPE_DECORATION))))}))}matchBeforePosition(e){if(0===this._decorations.length)return null;for(let t=this._decorations.length-1;t>=0;t--){let i=this._decorations[t],n=this._editor.getModel().getDecorationRange(i);if(n&&!(n.endLineNumber>e.lineNumber)){if(n.endLineNumber<e.lineNumber)return n;if(!(n.endColumn>e.column))return n}}return this._editor.getModel().getDecorationRange(this._decorations[this._decorations.length-1])}matchAfterPosition(e){if(0===this._decorations.length)return null;for(let t=0,i=this._decorations.length;t<i;t++){let i=this._decorations[t],n=this._editor.getModel().getDecorationRange(i);if(n&&!(n.startLineNumber<e.lineNumber)){if(n.startLineNumber>e.lineNumber)return n;if(!(n.startColumn<e.column))return n}}return this._editor.getModel().getDecorationRange(this._decorations[0])}_allDecorations(){let e=[];return e=e.concat(this._decorations),e=e.concat(this._overviewRulerApproximateDecorations),this._findScopeDecorationIds.length&&e.push(...this._findScopeDecorationIds),this._rangeHighlightDecorationId&&e.push(this._rangeHighlightDecorationId),e}}_._CURRENT_FIND_MATCH_DECORATION=f.qx.register({description:"current-find-match",stickiness:1,zIndex:13,className:"currentFindMatch",showIfCollapsed:!0,overviewRuler:{color:(0,v.EN)(m.Fm),position:p.sh.Center},minimap:{color:(0,v.EN)(m.KT),position:p.F5.Inline}}),_._FIND_MATCH_DECORATION=f.qx.register({description:"find-match",stickiness:1,zIndex:10,className:"findMatch",showIfCollapsed:!0,overviewRuler:{color:(0,v.EN)(m.Fm),position:p.sh.Center},minimap:{color:(0,v.EN)(m.KT),position:p.F5.Inline}}),_._FIND_MATCH_NO_OVERVIEW_DECORATION=f.qx.register({description:"find-match-no-overview",stickiness:1,className:"findMatch",showIfCollapsed:!0}),_._FIND_MATCH_ONLY_OVERVIEW_DECORATION=f.qx.register({description:"find-match-only-overview",stickiness:1,overviewRuler:{color:(0,v.EN)(m.Fm),position:p.sh.Center}}),_._RANGE_HIGHLIGHT_DECORATION=f.qx.register({description:"find-range-highlight",stickiness:1,className:"rangeHighlight",isWholeLine:!0}),_._FIND_SCOPE_DECORATION=f.qx.register({description:"find-scope",className:"findScope",isWholeLine:!0});class b{constructor(e,t,i){this._editorSelection=e,this._ranges=t,this._replaceStrings=i,this._trackedEditorSelectionId=null}getEditOperations(e,t){if(this._ranges.length>0){let e=[];for(let t=0;t<this._ranges.length;t++)e.push({range:this._ranges[t],text:this._replaceStrings[t]});e.sort(((e,t)=>h.e.compareRangesUsingStarts(e.range,t.range)));let i=[],n=e[0];for(let t=1;t<e.length;t++)n.range.endLineNumber===e[t].range.startLineNumber&&n.range.endColumn===e[t].range.startColumn?(n.range=n.range.plusRange(e[t].range),n.text=n.text+e[t].text):(i.push(n),n=e[t]);i.push(n);for(const e of i)t.addEditOperation(e.range,e.text)}this._trackedEditorSelectionId=t.trackSelection(this._editorSelection)}computeCursorState(e,t){return t.getTrackedSelection(this._trackedEditorSelectionId)}}function w(e,t){if(e&&""!==e[0]){const i=y(e,t,"-"),n=y(e,t,"_");return i&&!n?C(e,t,"-"):!i&&n?C(e,t,"_"):e[0].toUpperCase()===e[0]?t.toUpperCase():e[0].toLowerCase()===e[0]?t.toLowerCase():s.Kw(e[0][0])&&t.length>0?t[0].toUpperCase()+t.substr(1):e[0][0].toUpperCase()!==e[0][0]&&t.length>0?t[0].toLowerCase()+t.substr(1):t}return t}function y(e,t,i){return-1!==e[0].indexOf(i)&&-1!==t.indexOf(i)&&e[0].split(i).length===t.split(i).length}function C(e,t,i){const n=t.split(i),o=e[0].split(i);let s="";return n.forEach(((e,t)=>{s+=w([o[t]],e)+i})),s.slice(0,-1)}class x{constructor(e){this.staticValue=e,this.kind=0}}class S{constructor(e){this.pieces=e,this.kind=1}}class k{constructor(e){e&&0!==e.length?1===e.length&&null!==e[0].staticValue?this._state=new x(e[0].staticValue):this._state=new S(e):this._state=new x("")}static fromStaticValue(e){return new k([L.staticValue(e)])}get hasReplacementPatterns(){return 1===this._state.kind}buildReplaceString(e,t){if(0===this._state.kind)return t?w(e,this._state.staticValue):this._state.staticValue;let i="";for(let t=0,n=this._state.pieces.length;t<n;t++){let n=this._state.pieces[t];if(null!==n.staticValue){i+=n.staticValue;continue}let o=k._substitute(n.matchIndex,e);if(null!==n.caseOps&&n.caseOps.length>0){let e=[],t=n.caseOps.length,i=0;for(let s=0,r=o.length;s<r;s++){if(i>=t){e.push(o.slice(s));break}switch(n.caseOps[i]){case"U":e.push(o[s].toUpperCase());break;case"u":e.push(o[s].toUpperCase()),i++;break;case"L":e.push(o[s].toLowerCase());break;case"l":e.push(o[s].toLowerCase()),i++;break;default:e.push(o[s])}}o=e.join("")}i+=o}return i}static _substitute(e,t){if(null===t)return"";if(0===e)return t[0];let i="";for(;e>0;){if(e<t.length){return(t[e]||"")+i}i=String(e%10)+i,e=Math.floor(e/10)}return"$"+i}}class L{constructor(e,t,i){this.staticValue=e,this.matchIndex=t,i&&0!==i.length?this.caseOps=i.slice(0):this.caseOps=null}static staticValue(e){return new L(e,-1,null)}static caseOps(e,t){return new L(null,e,t)}}class N{constructor(e){this._source=e,this._lastCharIndex=0,this._result=[],this._resultLen=0,this._currentStaticPiece=""}emitUnchanged(e){this._emitStatic(this._source.substring(this._lastCharIndex,e)),this._lastCharIndex=e}emitStatic(e,t){this._emitStatic(e),this._lastCharIndex=t}_emitStatic(e){0!==e.length&&(this._currentStaticPiece+=e)}emitMatchIndex(e,t,i){0!==this._currentStaticPiece.length&&(this._result[this._resultLen++]=L.staticValue(this._currentStaticPiece),this._currentStaticPiece=""),this._result[this._resultLen++]=L.caseOps(e,i),this._lastCharIndex=t}finalize(){return this.emitUnchanged(this._source.length),0!==this._currentStaticPiece.length&&(this._result[this._resultLen++]=L.staticValue(this._currentStaticPiece),this._currentStaticPiece=""),new k(this._result)}}var D=i(38819);const I=new D.uy("findWidgetVisible",!1),E=new D.uy("findInputFocussed",!1),T=new D.uy("replaceInputFocussed",!1),M={primary:545,mac:{primary:2593}},A={primary:565,mac:{primary:2613}},O={primary:560,mac:{primary:2608}},P={primary:554,mac:{primary:2602}},R={primary:558,mac:{primary:2606}},F="actions.find",B="actions.findWithSelection",V="editor.action.nextMatchFindAction",W="editor.action.previousMatchFindAction",H="editor.action.nextSelectionMatchFindAction",z="editor.action.previousSelectionMatchFindAction",j="editor.action.startFindReplaceAction",U="closeFindWidget",$="toggleFindCaseSensitive",K="toggleFindWholeWord",q="toggleFindRegex",Z="toggleFindInSelection",G="togglePreserveCase",Y="editor.action.replaceOne",Q="editor.action.replaceAll",X="editor.action.selectAllMatches",J=19999;class ee{constructor(e,t){this._toDispose=new o.SL,this._editor=e,this._state=t,this._isDisposed=!1,this._startSearchingTimer=new n._F,this._decorations=new _(e),this._toDispose.add(this._decorations),this._updateDecorationsScheduler=new n.pY((()=>this.research(!1)),100),this._toDispose.add(this._updateDecorationsScheduler),this._toDispose.add(this._editor.onDidChangeCursorPosition((e=>{3!==e.reason&&5!==e.reason&&6!==e.reason||this._decorations.setStartPosition(this._editor.getPosition())}))),this._ignoreModelContentChanged=!1,this._toDispose.add(this._editor.onDidChangeModelContent((e=>{this._ignoreModelContentChanged||(e.isFlush&&this._decorations.reset(),this._decorations.setStartPosition(this._editor.getPosition()),this._updateDecorationsScheduler.schedule())}))),this._toDispose.add(this._state.onFindReplaceStateChange((e=>this._onStateChanged(e)))),this.research(!1,this._state.searchScope)}dispose(){this._isDisposed=!0,(0,o.B9)(this._startSearchingTimer),this._toDispose.dispose()}_onStateChanged(e){if(!this._isDisposed&&this._editor.hasModel()&&(e.searchString||e.isReplaceRevealed||e.isRegex||e.wholeWord||e.matchCase||e.searchScope)){this._editor.getModel().isTooLargeForSyncing()?(this._startSearchingTimer.cancel(),this._startSearchingTimer.setIfNotSet((()=>{e.searchScope?this.research(e.moveCursor,this._state.searchScope):this.research(e.moveCursor)}),240)):e.searchScope?this.research(e.moveCursor,this._state.searchScope):this.research(e.moveCursor)}}static _getSearchRange(e,t){return t||e.getFullModelRange()}research(e,t){let i=null;void 0!==t?null!==t&&(i=Array.isArray(t)?t:[t]):i=this._decorations.getFindScopes(),null!==i&&(i=i.map((e=>{if(e.startLineNumber!==e.endLineNumber){let t=e.endLineNumber;return 1===e.endColumn&&(t-=1),new h.e(e.startLineNumber,1,t,this._editor.getModel().getLineMaxColumn(t))}return e})));let n=this._findMatches(i,!1,J);this._decorations.set(n,i);const o=this._editor.getSelection();let s=this._decorations.getCurrentMatchesPosition(o);if(0===s&&n.length>0){const e=(0,l.lG)(n.map((e=>e.range)),(e=>h.e.compareRangesUsingStarts(e,o)>=0));s=e>0?e-1+1:s}this._state.changeMatchInfo(s,this._decorations.getCount(),void 0),e&&this._editor.getOption(35).cursorMoveOnType&&this._moveToNextMatch(this._decorations.getStartPosition())}_hasMatches(){return this._state.matchesCount>0}_cannotFind(){if(!this._hasMatches()){let e=this._decorations.getFindScope();return e&&this._editor.revealRangeInCenterIfOutsideViewport(e,0),!0}return!1}_setCurrentFindMatch(e){let t=this._decorations.setCurrentFindMatch(e);this._state.changeMatchInfo(t,this._decorations.getCount(),e),this._editor.setSelection(e),this._editor.revealRangeInCenterIfOutsideViewport(e,0)}_prevSearchPosition(e){let t=this._state.isRegex&&(this._state.searchString.indexOf("^")>=0||this._state.searchString.indexOf("$")>=0),{lineNumber:i,column:n}=e,o=this._editor.getModel();return t||1===n?(1===i?i=o.getLineCount():i--,n=o.getLineMaxColumn(i)):n--,new d.L(i,n)}_moveToPrevMatch(e,t=!1){if(!this._state.canNavigateBack()){const t=this._decorations.matchAfterPosition(e);return void(t&&this._setCurrentFindMatch(t))}if(this._decorations.getCount()<J){let t=this._decorations.matchBeforePosition(e);return t&&t.isEmpty()&&t.getStartPosition().equals(e)&&(e=this._prevSearchPosition(e),t=this._decorations.matchBeforePosition(e)),void(t&&this._setCurrentFindMatch(t))}if(this._cannotFind())return;let i=this._decorations.getFindScope(),n=ee._getSearchRange(this._editor.getModel(),i);n.getEndPosition().isBefore(e)&&(e=n.getEndPosition()),e.isBefore(n.getStartPosition())&&(e=n.getEndPosition());let{lineNumber:o,column:s}=e,r=this._editor.getModel(),a=new d.L(o,s),l=r.findPreviousMatch(this._state.searchString,a,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(115):null,!1);return l&&l.range.isEmpty()&&l.range.getStartPosition().equals(a)&&(a=this._prevSearchPosition(a),l=r.findPreviousMatch(this._state.searchString,a,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(115):null,!1)),l?t||n.containsRange(l.range)?void this._setCurrentFindMatch(l.range):this._moveToPrevMatch(l.range.getStartPosition(),!0):void 0}moveToPrevMatch(){this._moveToPrevMatch(this._editor.getSelection().getStartPosition())}_nextSearchPosition(e){let t=this._state.isRegex&&(this._state.searchString.indexOf("^")>=0||this._state.searchString.indexOf("$")>=0),{lineNumber:i,column:n}=e,o=this._editor.getModel();return t||n===o.getLineMaxColumn(i)?(i===o.getLineCount()?i=1:i++,n=1):n++,new d.L(i,n)}_moveToNextMatch(e){if(!this._state.canNavigateForward()){const t=this._decorations.matchBeforePosition(e);return void(t&&this._setCurrentFindMatch(t))}if(this._decorations.getCount()<J){let t=this._decorations.matchAfterPosition(e);return t&&t.isEmpty()&&t.getStartPosition().equals(e)&&(e=this._nextSearchPosition(e),t=this._decorations.matchAfterPosition(e)),void(t&&this._setCurrentFindMatch(t))}let t=this._getNextMatch(e,!1,!0);t&&this._setCurrentFindMatch(t.range)}_getNextMatch(e,t,i,n=!1){if(this._cannotFind())return null;let o=this._decorations.getFindScope(),s=ee._getSearchRange(this._editor.getModel(),o);s.getEndPosition().isBefore(e)&&(e=s.getStartPosition()),e.isBefore(s.getStartPosition())&&(e=s.getStartPosition());let{lineNumber:r,column:a}=e,l=this._editor.getModel(),c=new d.L(r,a),h=l.findNextMatch(this._state.searchString,c,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(115):null,t);return i&&h&&h.range.isEmpty()&&h.range.getStartPosition().equals(c)&&(c=this._nextSearchPosition(c),h=l.findNextMatch(this._state.searchString,c,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(115):null,t)),h?n||s.containsRange(h.range)?h:this._getNextMatch(h.range.getEndPosition(),t,i,!0):null}moveToNextMatch(){this._moveToNextMatch(this._editor.getSelection().getEndPosition())}_getReplacePattern(){return this._state.isRegex?function(e){if(!e||0===e.length)return new k(null);let t=[],i=new N(e);for(let n=0,o=e.length;n<o;n++){let s=e.charCodeAt(n);if(92!==s){if(36===s){if(n++,n>=o)break;let s=e.charCodeAt(n);if(36===s){i.emitUnchanged(n-1),i.emitStatic("$",n+1);continue}if(48===s||38===s){i.emitUnchanged(n-1),i.emitMatchIndex(0,n+1,t),t.length=0;continue}if(49<=s&&s<=57){let r=s-48;if(n+1<o){let o=e.charCodeAt(n+1);if(48<=o&&o<=57){n++,r=10*r+(o-48),i.emitUnchanged(n-2),i.emitMatchIndex(r,n+1,t),t.length=0;continue}}i.emitUnchanged(n-1),i.emitMatchIndex(r,n+1,t),t.length=0;continue}}}else{if(n++,n>=o)break;let s=e.charCodeAt(n);switch(s){case 92:i.emitUnchanged(n-1),i.emitStatic("\\",n+1);break;case 110:i.emitUnchanged(n-1),i.emitStatic("\n",n+1);break;case 116:i.emitUnchanged(n-1),i.emitStatic("\t",n+1);break;case 117:case 85:case 108:case 76:i.emitUnchanged(n-1),i.emitStatic("",n+1),t.push(String.fromCharCode(s))}}}return i.finalize()}(this._state.replaceString):k.fromStaticValue(this._state.replaceString)}replace(){if(!this._hasMatches())return;let e=this._getReplacePattern(),t=this._editor.getSelection(),i=this._getNextMatch(t.getStartPosition(),!0,!1);if(i)if(t.equalsRange(i.range)){let n=e.buildReplaceString(i.matches,this._state.preserveCase),o=new c.T4(t,n);this._executeEditorCommand("replace",o),this._decorations.setStartPosition(new d.L(t.startLineNumber,t.startColumn+n.length)),this.research(!0)}else this._decorations.setStartPosition(this._editor.getPosition()),this._setCurrentFindMatch(i.range)}_findMatches(e,t,i){const n=(e||[null]).map((e=>ee._getSearchRange(this._editor.getModel(),e)));return this._editor.getModel().findMatches(this._state.searchString,n,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(115):null,t,i)}replaceAll(){if(!this._hasMatches())return;const e=this._decorations.getFindScopes();null===e&&this._state.matchesCount>=J?this._largeReplaceAll():this._regularReplaceAll(e),this.research(!1)}_largeReplaceAll(){const e=new g.bc(this._state.searchString,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(115):null).parseSearchRequest();if(!e)return;let t=e.regex;if(!t.multiline){let e="mu";t.ignoreCase&&(e+="i"),t.global&&(e+="g"),t=new RegExp(t.source,e)}const i=this._editor.getModel(),n=i.getValue(1),o=i.getFullModelRange(),s=this._getReplacePattern();let r;const a=this._state.preserveCase;r=s.hasReplacementPatterns||a?n.replace(t,(function(){return s.buildReplaceString(arguments,a)})):n.replace(t,s.buildReplaceString(null,a));let l=new c.hP(o,r,this._editor.getSelection());this._executeEditorCommand("replaceAll",l)}_regularReplaceAll(e){const t=this._getReplacePattern();let i=this._findMatches(e,t.hasReplacementPatterns||this._state.preserveCase,1073741824),n=[];for(let e=0,o=i.length;e<o;e++)n[e]=t.buildReplaceString(i[e].matches,this._state.preserveCase);let o=new b(this._editor.getSelection(),i.map((e=>e.range)),n);this._executeEditorCommand("replaceAll",o)}selectAllMatches(){if(!this._hasMatches())return;let e=this._decorations.getFindScopes(),t=this._findMatches(e,!1,1073741824).map((e=>new u.Y(e.range.startLineNumber,e.range.startColumn,e.range.endLineNumber,e.range.endColumn))),i=this._editor.getSelection();for(let e=0,n=t.length;e<n;e++){if(t[e].equalsRange(i)){t=[i].concat(t.slice(0,e)).concat(t.slice(e+1));break}}this._editor.setSelections(t)}_executeEditorCommand(e,t){try{this._ignoreModelContentChanged=!0,this._editor.pushUndoStop(),this._editor.executeCommand(e,t),this._editor.pushUndoStop()}finally{this._ignoreModelContentChanged=!1}}}var te=i(65321),ie=i(93794),ne=i(73046),oe=i(41264),se=i(4669);i(67633);const re={inputActiveOptionBorder:oe.Il.fromHex("#007ACC00"),inputActiveOptionForeground:oe.Il.fromHex("#FFFFFF"),inputActiveOptionBackground:oe.Il.fromHex("#0E639C50")};class ae extends ie.${constructor(e){super(),this._onChange=this._register(new se.Q5),this.onChange=this._onChange.event,this._onKeyDown=this._register(new se.Q5),this.onKeyDown=this._onKeyDown.event,this._opts=Object.assign(Object.assign({},re),e),this._checked=this._opts.isChecked;const t=["monaco-custom-checkbox"];this._opts.icon&&t.push(...ne.dT.asClassNameArray(this._opts.icon)),this._opts.actionClassName&&t.push(...this._opts.actionClassName.split(" ")),this._checked&&t.push("checked"),this.domNode=document.createElement("div"),this.domNode.title=this._opts.title,this.domNode.classList.add(...t),this._opts.notFocusable||(this.domNode.tabIndex=0),this.domNode.setAttribute("role","checkbox"),this.domNode.setAttribute("aria-checked",String(this._checked)),this.domNode.setAttribute("aria-label",this._opts.title),this.applyStyles(),this.onclick(this.domNode,(e=>{this.checked=!this._checked,this._onChange.fire(!1),e.preventDefault()})),this.ignoreGesture(this.domNode),this.onkeydown(this.domNode,(e=>{if(10===e.keyCode||3===e.keyCode)return this.checked=!this._checked,this._onChange.fire(!0),void e.preventDefault();this._onKeyDown.fire(e)}))}get enabled(){return"true"!==this.domNode.getAttribute("aria-disabled")}focus(){this.domNode.focus()}get checked(){return this._checked}set checked(e){this._checked=e,this.domNode.setAttribute("aria-checked",String(this._checked)),this.domNode.classList.toggle("checked",this._checked),this.applyStyles()}width(){return 22}style(e){e.inputActiveOptionBorder&&(this._opts.inputActiveOptionBorder=e.inputActiveOptionBorder),e.inputActiveOptionForeground&&(this._opts.inputActiveOptionForeground=e.inputActiveOptionForeground),e.inputActiveOptionBackground&&(this._opts.inputActiveOptionBackground=e.inputActiveOptionBackground),this.applyStyles()}applyStyles(){this.domNode&&(this.domNode.style.borderColor=this._checked&&this._opts.inputActiveOptionBorder?this._opts.inputActiveOptionBorder.toString():"transparent",this.domNode.style.color=this._checked&&this._opts.inputActiveOptionForeground?this._opts.inputActiveOptionForeground.toString():"inherit",this.domNode.style.backgroundColor=this._checked&&this._opts.inputActiveOptionBackground?this._opts.inputActiveOptionBackground.toString():"transparent")}enable(){this.domNode.setAttribute("aria-disabled",String(!1))}disable(){this.domNode.setAttribute("aria-disabled",String(!0))}}var le=i(63580);const ce=le.N("caseDescription","åŒ¹é…å¤§å°å†™"),de=le.N("wordsDescription","åŒ¹é…å…¨è¯"),he=le.N("regexDescription","ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼");class ue extends ae{constructor(e){super({icon:ne.lA.caseSensitive,title:ce+e.appendTitle,isChecked:e.isChecked,inputActiveOptionBorder:e.inputActiveOptionBorder,inputActiveOptionForeground:e.inputActiveOptionForeground,inputActiveOptionBackground:e.inputActiveOptionBackground})}}class ge extends ae{constructor(e){super({icon:ne.lA.wholeWord,title:de+e.appendTitle,isChecked:e.isChecked,inputActiveOptionBorder:e.inputActiveOptionBorder,inputActiveOptionForeground:e.inputActiveOptionForeground,inputActiveOptionBackground:e.inputActiveOptionBackground})}}class pe extends ae{constructor(e){super({icon:ne.lA.regex,title:he+e.appendTitle,isChecked:e.isChecked,inputActiveOptionBorder:e.inputActiveOptionBorder,inputActiveOptionForeground:e.inputActiveOptionForeground,inputActiveOptionBackground:e.inputActiveOptionBackground})}}class fe extends ie.${constructor(e,t,i,o){super(),this._hideSoon=this._register(new n.pY((()=>this._hide()),2e3)),this._isVisible=!1,this._editor=e,this._state=t,this._keybindingService=i,this._domNode=document.createElement("div"),this._domNode.className="findOptionsWidget",this._domNode.style.display="none",this._domNode.style.top="10px",this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true");const s=o.getColorTheme().getColor(m.PR),r=o.getColorTheme().getColor(m.Pv),a=o.getColorTheme().getColor(m.XE);this.caseSensitive=this._register(new ue({appendTitle:this._keybindingLabelFor($),isChecked:this._state.matchCase,inputActiveOptionBorder:s,inputActiveOptionForeground:r,inputActiveOptionBackground:a})),this._domNode.appendChild(this.caseSensitive.domNode),this._register(this.caseSensitive.onChange((()=>{this._state.change({matchCase:this.caseSensitive.checked},!1)}))),this.wholeWords=this._register(new ge({appendTitle:this._keybindingLabelFor(K),isChecked:this._state.wholeWord,inputActiveOptionBorder:s,inputActiveOptionForeground:r,inputActiveOptionBackground:a})),this._domNode.appendChild(this.wholeWords.domNode),this._register(this.wholeWords.onChange((()=>{this._state.change({wholeWord:this.wholeWords.checked},!1)}))),this.regex=this._register(new pe({appendTitle:this._keybindingLabelFor(q),isChecked:this._state.isRegex,inputActiveOptionBorder:s,inputActiveOptionForeground:r,inputActiveOptionBackground:a})),this._domNode.appendChild(this.regex.domNode),this._register(this.regex.onChange((()=>{this._state.change({isRegex:this.regex.checked},!1)}))),this._editor.addOverlayWidget(this),this._register(this._state.onFindReplaceStateChange((e=>{let t=!1;e.isRegex&&(this.regex.checked=this._state.isRegex,t=!0),e.wholeWord&&(this.wholeWords.checked=this._state.wholeWord,t=!0),e.matchCase&&(this.caseSensitive.checked=this._state.matchCase,t=!0),!this._state.isRevealed&&t&&this._revealTemporarily()}))),this._register(te.j_(this._domNode,(e=>this._onMouseOut()))),this._register(te.nm(this._domNode,"mouseover",(e=>this._onMouseOver()))),this._applyTheme(o.getColorTheme()),this._register(o.onDidColorThemeChange(this._applyTheme.bind(this)))}_keybindingLabelFor(e){let t=this._keybindingService.lookupKeybinding(e);return t?` (${t.getLabel()})`:""}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}getId(){return fe.ID}getDomNode(){return this._domNode}getPosition(){return{preference:0}}highlightFindOptions(){this._revealTemporarily()}_revealTemporarily(){this._show(),this._hideSoon.schedule()}_onMouseOut(){this._hideSoon.schedule()}_onMouseOver(){this._hideSoon.cancel()}_show(){this._isVisible||(this._isVisible=!0,this._domNode.style.display="block")}_hide(){this._isVisible&&(this._isVisible=!1,this._domNode.style.display="none")}_applyTheme(e){let t={inputActiveOptionBorder:e.getColor(m.PR),inputActiveOptionForeground:e.getColor(m.Pv),inputActiveOptionBackground:e.getColor(m.XE)};this.caseSensitive.style(t),this.wholeWords.style(t),this.regex.style(t)}}function me(e,t){return 1===e||2!==e&&t}fe.ID="editor.contrib.findOptionsWidget",(0,v.Ic)(((e,t)=>{const i=e.getColor(m.D0);i&&t.addRule(`.monaco-editor .findOptionsWidget { background-color: ${i}; }`);const n=e.getColor(m.Hf);n&&t.addRule(`.monaco-editor .findOptionsWidget { color: ${n}; }`);const o=e.getColor(m.rh);o&&t.addRule(`.monaco-editor .findOptionsWidget { box-shadow: 0 0 8px 2px ${o}; }`);const s=e.getColor(m.lR);s&&t.addRule(`.monaco-editor .findOptionsWidget { border: 2px solid ${s}; }`)}));class ve extends o.JT{constructor(){super(),this._onFindReplaceStateChange=this._register(new se.Q5),this.onFindReplaceStateChange=this._onFindReplaceStateChange.event,this._searchString="",this._replaceString="",this._isRevealed=!1,this._isReplaceRevealed=!1,this._isRegex=!1,this._isRegexOverride=0,this._wholeWord=!1,this._wholeWordOverride=0,this._matchCase=!1,this._matchCaseOverride=0,this._preserveCase=!1,this._preserveCaseOverride=0,this._searchScope=null,this._matchesPosition=0,this._matchesCount=0,this._currentMatch=null,this._loop=!0}get searchString(){return this._searchString}get replaceString(){return this._replaceString}get isRevealed(){return this._isRevealed}get isReplaceRevealed(){return this._isReplaceRevealed}get isRegex(){return me(this._isRegexOverride,this._isRegex)}get wholeWord(){return me(this._wholeWordOverride,this._wholeWord)}get matchCase(){return me(this._matchCaseOverride,this._matchCase)}get preserveCase(){return me(this._preserveCaseOverride,this._preserveCase)}get actualIsRegex(){return this._isRegex}get actualWholeWord(){return this._wholeWord}get actualMatchCase(){return this._matchCase}get actualPreserveCase(){return this._preserveCase}get searchScope(){return this._searchScope}get matchesPosition(){return this._matchesPosition}get matchesCount(){return this._matchesCount}get currentMatch(){return this._currentMatch}changeMatchInfo(e,t,i){let n={moveCursor:!1,updateHistory:!1,searchString:!1,replaceString:!1,isRevealed:!1,isReplaceRevealed:!1,isRegex:!1,wholeWord:!1,matchCase:!1,preserveCase:!1,searchScope:!1,matchesPosition:!1,matchesCount:!1,currentMatch:!1,loop:!1},o=!1;0===t&&(e=0),e>t&&(e=t),this._matchesPosition!==e&&(this._matchesPosition=e,n.matchesPosition=!0,o=!0),this._matchesCount!==t&&(this._matchesCount=t,n.matchesCount=!0,o=!0),void 0!==i&&(h.e.equalsRange(this._currentMatch,i)||(this._currentMatch=i,n.currentMatch=!0,o=!0)),o&&this._onFindReplaceStateChange.fire(n)}change(e,t,i=!0){var n;let o={moveCursor:t,updateHistory:i,searchString:!1,replaceString:!1,isRevealed:!1,isReplaceRevealed:!1,isRegex:!1,wholeWord:!1,matchCase:!1,preserveCase:!1,searchScope:!1,matchesPosition:!1,matchesCount:!1,currentMatch:!1,loop:!1},s=!1;const r=this.isRegex,a=this.wholeWord,l=this.matchCase,c=this.preserveCase;void 0!==e.searchString&&this._searchString!==e.searchString&&(this._searchString=e.searchString,o.searchString=!0,s=!0),void 0!==e.replaceString&&this._replaceString!==e.replaceString&&(this._replaceString=e.replaceString,o.replaceString=!0,s=!0),void 0!==e.isRevealed&&this._isRevealed!==e.isRevealed&&(this._isRevealed=e.isRevealed,o.isRevealed=!0,s=!0),void 0!==e.isReplaceRevealed&&this._isReplaceRevealed!==e.isReplaceRevealed&&(this._isReplaceRevealed=e.isReplaceRevealed,o.isReplaceRevealed=!0,s=!0),void 0!==e.isRegex&&(this._isRegex=e.isRegex),void 0!==e.wholeWord&&(this._wholeWord=e.wholeWord),void 0!==e.matchCase&&(this._matchCase=e.matchCase),void 0!==e.preserveCase&&(this._preserveCase=e.preserveCase),void 0!==e.searchScope&&((null===(n=e.searchScope)||void 0===n?void 0:n.every((e=>{var t;return null===(t=this._searchScope)||void 0===t?void 0:t.some((t=>!h.e.equalsRange(t,e)))})))||(this._searchScope=e.searchScope,o.searchScope=!0,s=!0)),void 0!==e.loop&&this._loop!==e.loop&&(this._loop=e.loop,o.loop=!0,s=!0),this._isRegexOverride=void 0!==e.isRegexOverride?e.isRegexOverride:0,this._wholeWordOverride=void 0!==e.wholeWordOverride?e.wholeWordOverride:0,this._matchCaseOverride=void 0!==e.matchCaseOverride?e.matchCaseOverride:0,this._preserveCaseOverride=void 0!==e.preserveCaseOverride?e.preserveCaseOverride:0,r!==this.isRegex&&(s=!0,o.isRegex=!0),a!==this.wholeWord&&(s=!0,o.wholeWord=!0),l!==this.matchCase&&(s=!0,o.matchCase=!0),c!==this.preserveCase&&(s=!0,o.preserveCase=!0),s&&this._onFindReplaceStateChange.fire(o)}canNavigateBack(){return this.canNavigateInLoop()||1!==this.matchesPosition}canNavigateForward(){return this.canNavigateInLoop()||this.matchesPosition<this.matchesCount}canNavigateInLoop(){return this._loop||this.matchesCount>=J}}var _e=i(85152),be=i(73098),we=i(17301),ye=i(1432),Ce=(i(80668),i(77927));i(31214);const xe=le.N("defaultLabel","input");class Se extends ie.${constructor(e,t,i,n){super(),this._showOptionButtons=i,this.fixFocusOnOptionClickEnabled=!0,this.imeSessionInProgress=!1,this._onDidOptionChange=this._register(new se.Q5),this.onDidOptionChange=this._onDidOptionChange.event,this._onKeyDown=this._register(new se.Q5),this.onKeyDown=this._onKeyDown.event,this._onMouseDown=this._register(new se.Q5),this.onMouseDown=this._onMouseDown.event,this._onInput=this._register(new se.Q5),this._onKeyUp=this._register(new se.Q5),this._onCaseSensitiveKeyDown=this._register(new se.Q5),this.onCaseSensitiveKeyDown=this._onCaseSensitiveKeyDown.event,this._onRegexKeyDown=this._register(new se.Q5),this.onRegexKeyDown=this._onRegexKeyDown.event,this._lastHighlightFindOptions=0,this.contextViewProvider=t,this.placeholder=n.placeholder||"",this.validation=n.validation,this.label=n.label||xe,this.inputActiveOptionBorder=n.inputActiveOptionBorder,this.inputActiveOptionForeground=n.inputActiveOptionForeground,this.inputActiveOptionBackground=n.inputActiveOptionBackground,this.inputBackground=n.inputBackground,this.inputForeground=n.inputForeground,this.inputBorder=n.inputBorder,this.inputValidationInfoBorder=n.inputValidationInfoBorder,this.inputValidationInfoBackground=n.inputValidationInfoBackground,this.inputValidationInfoForeground=n.inputValidationInfoForeground,this.inputValidationWarningBorder=n.inputValidationWarningBorder,this.inputValidationWarningBackground=n.inputValidationWarningBackground,this.inputValidationWarningForeground=n.inputValidationWarningForeground,this.inputValidationErrorBorder=n.inputValidationErrorBorder,this.inputValidationErrorBackground=n.inputValidationErrorBackground,this.inputValidationErrorForeground=n.inputValidationErrorForeground;const o=n.appendCaseSensitiveLabel||"",s=n.appendWholeWordsLabel||"",r=n.appendRegexLabel||"",a=n.history||[],l=!!n.flexibleHeight,c=!!n.flexibleWidth,d=n.flexibleMaxHeight;this.domNode=document.createElement("div"),this.domNode.classList.add("monaco-findInput"),this.inputBox=this._register(new Ce.p(this.domNode,this.contextViewProvider,{placeholder:this.placeholder||"",ariaLabel:this.label||"",validationOptions:{validation:this.validation},inputBackground:this.inputBackground,inputForeground:this.inputForeground,inputBorder:this.inputBorder,inputValidationInfoBackground:this.inputValidationInfoBackground,inputValidationInfoForeground:this.inputValidationInfoForeground,inputValidationInfoBorder:this.inputValidationInfoBorder,inputValidationWarningBackground:this.inputValidationWarningBackground,inputValidationWarningForeground:this.inputValidationWarningForeground,inputValidationWarningBorder:this.inputValidationWarningBorder,inputValidationErrorBackground:this.inputValidationErrorBackground,inputValidationErrorForeground:this.inputValidationErrorForeground,inputValidationErrorBorder:this.inputValidationErrorBorder,history:a,showHistoryHint:n.showHistoryHint,flexibleHeight:l,flexibleWidth:c,flexibleMaxHeight:d})),this.regex=this._register(new pe({appendTitle:r,isChecked:!1,inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground})),this._register(this.regex.onChange((e=>{this._onDidOptionChange.fire(e),!e&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()}))),this._register(this.regex.onKeyDown((e=>{this._onRegexKeyDown.fire(e)}))),this.wholeWords=this._register(new ge({appendTitle:s,isChecked:!1,inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground})),this._register(this.wholeWords.onChange((e=>{this._onDidOptionChange.fire(e),!e&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()}))),this.caseSensitive=this._register(new ue({appendTitle:o,isChecked:!1,inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground})),this._register(this.caseSensitive.onChange((e=>{this._onDidOptionChange.fire(e),!e&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()}))),this._register(this.caseSensitive.onKeyDown((e=>{this._onCaseSensitiveKeyDown.fire(e)}))),this._showOptionButtons&&(this.inputBox.paddingRight=this.caseSensitive.width()+this.wholeWords.width()+this.regex.width());let h=[this.caseSensitive.domNode,this.wholeWords.domNode,this.regex.domNode];this.onkeydown(this.domNode,(e=>{if(e.equals(15)||e.equals(17)||e.equals(9)){let t=h.indexOf(document.activeElement);if(t>=0){let i=-1;e.equals(17)?i=(t+1)%h.length:e.equals(15)&&(i=0===t?h.length-1:t-1),e.equals(9)?(h[t].blur(),this.inputBox.focus()):i>=0&&h[i].focus(),te.zB.stop(e,!0)}}}));let u=document.createElement("div");u.className="controls",u.style.display=this._showOptionButtons?"block":"none",u.appendChild(this.caseSensitive.domNode),u.appendChild(this.wholeWords.domNode),u.appendChild(this.regex.domNode),this.domNode.appendChild(u),e&&e.appendChild(this.domNode),this._register(te.nm(this.inputBox.inputElement,"compositionstart",(e=>{this.imeSessionInProgress=!0}))),this._register(te.nm(this.inputBox.inputElement,"compositionend",(e=>{this.imeSessionInProgress=!1,this._onInput.fire()}))),this.onkeydown(this.inputBox.inputElement,(e=>this._onKeyDown.fire(e))),this.onkeyup(this.inputBox.inputElement,(e=>this._onKeyUp.fire(e))),this.oninput(this.inputBox.inputElement,(e=>this._onInput.fire())),this.onmousedown(this.inputBox.inputElement,(e=>this._onMouseDown.fire(e)))}enable(){this.domNode.classList.remove("disabled"),this.inputBox.enable(),this.regex.enable(),this.wholeWords.enable(),this.caseSensitive.enable()}disable(){this.domNode.classList.add("disabled"),this.inputBox.disable(),this.regex.disable(),this.wholeWords.disable(),this.caseSensitive.disable()}setFocusInputOnOptionClick(e){this.fixFocusOnOptionClickEnabled=e}setEnabled(e){e?this.enable():this.disable()}getValue(){return this.inputBox.value}setValue(e){this.inputBox.value!==e&&(this.inputBox.value=e)}style(e){this.inputActiveOptionBorder=e.inputActiveOptionBorder,this.inputActiveOptionForeground=e.inputActiveOptionForeground,this.inputActiveOptionBackground=e.inputActiveOptionBackground,this.inputBackground=e.inputBackground,this.inputForeground=e.inputForeground,this.inputBorder=e.inputBorder,this.inputValidationInfoBackground=e.inputValidationInfoBackground,this.inputValidationInfoForeground=e.inputValidationInfoForeground,this.inputValidationInfoBorder=e.inputValidationInfoBorder,this.inputValidationWarningBackground=e.inputValidationWarningBackground,this.inputValidationWarningForeground=e.inputValidationWarningForeground,this.inputValidationWarningBorder=e.inputValidationWarningBorder,this.inputValidationErrorBackground=e.inputValidationErrorBackground,this.inputValidationErrorForeground=e.inputValidationErrorForeground,this.inputValidationErrorBorder=e.inputValidationErrorBorder,this.applyStyles()}applyStyles(){if(this.domNode){const e={inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground};this.regex.style(e),this.wholeWords.style(e),this.caseSensitive.style(e);const t={inputBackground:this.inputBackground,inputForeground:this.inputForeground,inputBorder:this.inputBorder,inputValidationInfoBackground:this.inputValidationInfoBackground,inputValidationInfoForeground:this.inputValidationInfoForeground,inputValidationInfoBorder:this.inputValidationInfoBorder,inputValidationWarningBackground:this.inputValidationWarningBackground,inputValidationWarningForeground:this.inputValidationWarningForeground,inputValidationWarningBorder:this.inputValidationWarningBorder,inputValidationErrorBackground:this.inputValidationErrorBackground,inputValidationErrorForeground:this.inputValidationErrorForeground,inputValidationErrorBorder:this.inputValidationErrorBorder};this.inputBox.style(t)}}select(){this.inputBox.select()}focus(){this.inputBox.focus()}getCaseSensitive(){return this.caseSensitive.checked}setCaseSensitive(e){this.caseSensitive.checked=e}getWholeWords(){return this.wholeWords.checked}setWholeWords(e){this.wholeWords.checked=e}getRegex(){return this.regex.checked}setRegex(e){this.regex.checked=e,this.validate()}focusOnCaseSensitive(){this.caseSensitive.focus()}highlightFindOptions(){this.domNode.classList.remove("highlight-"+this._lastHighlightFindOptions),this._lastHighlightFindOptions=1-this._lastHighlightFindOptions,this.domNode.classList.add("highlight-"+this._lastHighlightFindOptions)}validate(){this.inputBox.validate()}clearMessage(){this.inputBox.hideMessage()}}const ke=le.N("defaultLabel","input"),Le=le.N("label.preserveCaseCheckbox","ä¿ç•™å¤§å†™");class Ne extends ae{constructor(e){super({icon:ne.lA.preserveCase,title:Le+e.appendTitle,isChecked:e.isChecked,inputActiveOptionBorder:e.inputActiveOptionBorder,inputActiveOptionForeground:e.inputActiveOptionForeground,inputActiveOptionBackground:e.inputActiveOptionBackground})}}class De extends ie.${constructor(e,t,i,n){super(),this._showOptionButtons=i,this.fixFocusOnOptionClickEnabled=!0,this.cachedOptionsWidth=0,this._onDidOptionChange=this._register(new se.Q5),this.onDidOptionChange=this._onDidOptionChange.event,this._onKeyDown=this._register(new se.Q5),this.onKeyDown=this._onKeyDown.event,this._onMouseDown=this._register(new se.Q5),this._onInput=this._register(new se.Q5),this._onKeyUp=this._register(new se.Q5),this._onPreserveCaseKeyDown=this._register(new se.Q5),this.onPreserveCaseKeyDown=this._onPreserveCaseKeyDown.event,this.contextViewProvider=t,this.placeholder=n.placeholder||"",this.validation=n.validation,this.label=n.label||ke,this.inputActiveOptionBorder=n.inputActiveOptionBorder,this.inputActiveOptionForeground=n.inputActiveOptionForeground,this.inputActiveOptionBackground=n.inputActiveOptionBackground,this.inputBackground=n.inputBackground,this.inputForeground=n.inputForeground,this.inputBorder=n.inputBorder,this.inputValidationInfoBorder=n.inputValidationInfoBorder,this.inputValidationInfoBackground=n.inputValidationInfoBackground,this.inputValidationInfoForeground=n.inputValidationInfoForeground,this.inputValidationWarningBorder=n.inputValidationWarningBorder,this.inputValidationWarningBackground=n.inputValidationWarningBackground,this.inputValidationWarningForeground=n.inputValidationWarningForeground,this.inputValidationErrorBorder=n.inputValidationErrorBorder,this.inputValidationErrorBackground=n.inputValidationErrorBackground,this.inputValidationErrorForeground=n.inputValidationErrorForeground;const o=n.appendPreserveCaseLabel||"",s=n.history||[],r=!!n.flexibleHeight,a=!!n.flexibleWidth,l=n.flexibleMaxHeight;this.domNode=document.createElement("div"),this.domNode.classList.add("monaco-findInput"),this.inputBox=this._register(new Ce.p(this.domNode,this.contextViewProvider,{ariaLabel:this.label||"",placeholder:this.placeholder||"",validationOptions:{validation:this.validation},inputBackground:this.inputBackground,inputForeground:this.inputForeground,inputBorder:this.inputBorder,inputValidationInfoBackground:this.inputValidationInfoBackground,inputValidationInfoForeground:this.inputValidationInfoForeground,inputValidationInfoBorder:this.inputValidationInfoBorder,inputValidationWarningBackground:this.inputValidationWarningBackground,inputValidationWarningForeground:this.inputValidationWarningForeground,inputValidationWarningBorder:this.inputValidationWarningBorder,inputValidationErrorBackground:this.inputValidationErrorBackground,inputValidationErrorForeground:this.inputValidationErrorForeground,inputValidationErrorBorder:this.inputValidationErrorBorder,history:s,showHistoryHint:n.showHistoryHint,flexibleHeight:r,flexibleWidth:a,flexibleMaxHeight:l})),this.preserveCase=this._register(new Ne({appendTitle:o,isChecked:!1,inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground})),this._register(this.preserveCase.onChange((e=>{this._onDidOptionChange.fire(e),!e&&this.fixFocusOnOptionClickEnabled&&this.inputBox.focus(),this.validate()}))),this._register(this.preserveCase.onKeyDown((e=>{this._onPreserveCaseKeyDown.fire(e)}))),this._showOptionButtons?this.cachedOptionsWidth=this.preserveCase.width():this.cachedOptionsWidth=0;let c=[this.preserveCase.domNode];this.onkeydown(this.domNode,(e=>{if(e.equals(15)||e.equals(17)||e.equals(9)){let t=c.indexOf(document.activeElement);if(t>=0){let i=-1;e.equals(17)?i=(t+1)%c.length:e.equals(15)&&(i=0===t?c.length-1:t-1),e.equals(9)?(c[t].blur(),this.inputBox.focus()):i>=0&&c[i].focus(),te.zB.stop(e,!0)}}}));let d=document.createElement("div");d.className="controls",d.style.display=this._showOptionButtons?"block":"none",d.appendChild(this.preserveCase.domNode),this.domNode.appendChild(d),e&&e.appendChild(this.domNode),this.onkeydown(this.inputBox.inputElement,(e=>this._onKeyDown.fire(e))),this.onkeyup(this.inputBox.inputElement,(e=>this._onKeyUp.fire(e))),this.oninput(this.inputBox.inputElement,(e=>this._onInput.fire())),this.onmousedown(this.inputBox.inputElement,(e=>this._onMouseDown.fire(e)))}enable(){this.domNode.classList.remove("disabled"),this.inputBox.enable(),this.preserveCase.enable()}disable(){this.domNode.classList.add("disabled"),this.inputBox.disable(),this.preserveCase.disable()}setEnabled(e){e?this.enable():this.disable()}style(e){this.inputActiveOptionBorder=e.inputActiveOptionBorder,this.inputActiveOptionForeground=e.inputActiveOptionForeground,this.inputActiveOptionBackground=e.inputActiveOptionBackground,this.inputBackground=e.inputBackground,this.inputForeground=e.inputForeground,this.inputBorder=e.inputBorder,this.inputValidationInfoBackground=e.inputValidationInfoBackground,this.inputValidationInfoForeground=e.inputValidationInfoForeground,this.inputValidationInfoBorder=e.inputValidationInfoBorder,this.inputValidationWarningBackground=e.inputValidationWarningBackground,this.inputValidationWarningForeground=e.inputValidationWarningForeground,this.inputValidationWarningBorder=e.inputValidationWarningBorder,this.inputValidationErrorBackground=e.inputValidationErrorBackground,this.inputValidationErrorForeground=e.inputValidationErrorForeground,this.inputValidationErrorBorder=e.inputValidationErrorBorder,this.applyStyles()}applyStyles(){if(this.domNode){const e={inputActiveOptionBorder:this.inputActiveOptionBorder,inputActiveOptionForeground:this.inputActiveOptionForeground,inputActiveOptionBackground:this.inputActiveOptionBackground};this.preserveCase.style(e);const t={inputBackground:this.inputBackground,inputForeground:this.inputForeground,inputBorder:this.inputBorder,inputValidationInfoBackground:this.inputValidationInfoBackground,inputValidationInfoForeground:this.inputValidationInfoForeground,inputValidationInfoBorder:this.inputValidationInfoBorder,inputValidationWarningBackground:this.inputValidationWarningBackground,inputValidationWarningForeground:this.inputValidationWarningForeground,inputValidationWarningBorder:this.inputValidationWarningBorder,inputValidationErrorBackground:this.inputValidationErrorBackground,inputValidationErrorForeground:this.inputValidationErrorForeground,inputValidationErrorBorder:this.inputValidationErrorBorder};this.inputBox.style(t)}}select(){this.inputBox.select()}focus(){this.inputBox.focus()}getPreserveCase(){return this.preserveCase.checked}setPreserveCase(e){this.preserveCase.checked=e}focusOnPreserve(){this.preserveCase.focus()}validate(){this.inputBox&&this.inputBox.validate()}set width(e){this.inputBox.paddingRight=this.cachedOptionsWidth,this.inputBox.width=e,this.domNode.style.width=e+"px"}dispose(){super.dispose()}}var Ie=i(49989),Ee=i(79599),Te=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Me=function(e,t){return function(i,n){t(i,n,e)}};const Ae="historyNavigationWidget",Oe="historyNavigationForwardsEnabled",Pe="historyNavigationBackwardsEnabled";function Re(e,t){return e.getContext(document.activeElement).getValue(t)}function Fe(e,t){const i=function(e,t){return e.createScoped(t.target)}(e,t);!function(e,t,i){new D.uy(i,t).bindTo(e)}(i,t,Ae);return{scopedContextKeyService:i,historyNavigationForwardsEnablement:new D.uy(Oe,!0).bindTo(i),historyNavigationBackwardsEnablement:new D.uy(Pe,!0).bindTo(i)}}let Be=class extends Se{constructor(e,t,i,n,o=!1){super(e,t,o,i),this._register(Fe(n,{target:this.inputBox.element,historyNavigator:this.inputBox}).scopedContextKeyService)}};Be=Te([Me(3,D.i6)],Be);let Ve=class extends De{constructor(e,t,i,n,o=!1){super(e,t,o,i),this._register(Fe(n,{target:this.inputBox.element,historyNavigator:this.inputBox}).scopedContextKeyService)}};function We(e){var t,i;return"Up"===(null===(t=e.lookupKeybinding("history.showPrevious"))||void 0===t?void 0:t.getElectronAccelerator())&&"Down"===(null===(i=e.lookupKeybinding("history.showNext"))||void 0===i?void 0:i.getElectronAccelerator())}Ve=Te([Me(3,D.i6)],Ve),Ie.W.registerCommandAndKeybindingRule({id:"history.showPrevious",weight:200,when:D.Ao.and(D.Ao.has(Ae),D.Ao.equals(Pe,!0),Ee._y.Visible.isEqualTo(!1)),primary:16,secondary:[528],handler:e=>{const t=Re(e.get(D.i6),Ae);if(t){t.historyNavigator.showPreviousValue()}}}),Ie.W.registerCommandAndKeybindingRule({id:"history.showNext",weight:200,when:D.Ao.and(D.Ao.has(Ae),D.Ao.equals(Oe,!0),Ee._y.Visible.isEqualTo(!1)),primary:18,secondary:[530],handler:e=>{const t=Re(e.get(D.i6),Ae);if(t){t.historyNavigator.showNextValue()}}});var He=i(59554),ze=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const je=(0,He.q5)("find-selection",ne.lA.selection,le.N("findSelectionIcon","Icon for 'Find in Selection' in the editor find widget.")),Ue=(0,He.q5)("find-collapsed",ne.lA.chevronRight,le.N("findCollapsedIcon","Icon to indicate that the editor find widget is collapsed.")),$e=(0,He.q5)("find-expanded",ne.lA.chevronDown,le.N("findExpandedIcon","Icon to indicate that the editor find widget is expanded.")),Ke=(0,He.q5)("find-replace",ne.lA.replace,le.N("findReplaceIcon","Icon for 'Replace' in the editor find widget.")),qe=(0,He.q5)("find-replace-all",ne.lA.replaceAll,le.N("findReplaceAllIcon","Icon for 'Replace All' in the editor find widget.")),Ze=(0,He.q5)("find-previous-match",ne.lA.arrowUp,le.N("findPreviousMatchIcon","Icon for 'Find Previous' in the editor find widget.")),Ge=(0,He.q5)("find-next-match",ne.lA.arrowDown,le.N("findNextMatchIcon","Icon for 'Find Next' in the editor find widget.")),Ye=le.N("label.find","æŸ¥æ‰¾"),Qe=le.N("placeholder.find","æŸ¥æ‰¾"),Xe=le.N("label.previousMatchButton","ä¸Šä¸€ä¸ªåŒ¹é…"),Je=le.N("label.nextMatchButton","ä¸‹ä¸€ä¸ªåŒ¹é…"),et=le.N("label.toggleSelectionFind","åœ¨é€‰æ‹©ä¸­æŸ¥æ‰¾"),tt=le.N("label.closeButton","å…³é—­"),it=le.N("label.replace","æ›¿æ¢"),nt=le.N("placeholder.replace","æ›¿æ¢"),ot=le.N("label.replaceButton","æ›¿æ¢"),st=le.N("label.replaceAllButton","æ›¿æ¢å…¨éƒ¨"),rt=le.N("label.toggleReplaceButton","åˆ‡æ¢åˆ°æ›¿æ¢æ¨¡å¼"),at=le.N("title.matchesCountLimit","Only the first {0} results are highlighted, but all find operations work on the entire text.",J),lt=le.N("label.matchesLocation","{0} of {1}"),ct=le.N("label.noResults","æ— ç»“æžœ"),dt=419;let ht=69;const ut="ctrlEnterReplaceAll.windows.donotask",gt=ye.dz?256:2048;class pt{constructor(e){this.afterLineNumber=e,this.heightInPx=33,this.suppressMouseDown=!1,this.domNode=document.createElement("div"),this.domNode.className="dock-find-viewzone"}}function ft(e,t,i){const n=!!t.match(/\n/);i&&n&&i.selectionStart>0&&e.stopPropagation()}function mt(e,t,i){const n=!!t.match(/\n/);i&&n&&i.selectionEnd<i.value.length&&e.stopPropagation()}class vt extends ie.${constructor(e,t,i,s,r,a,l,c,d){super(),this._cachedHeight=null,this._revealTimeouts=[],this._codeEditor=e,this._controller=t,this._state=i,this._contextViewProvider=s,this._keybindingService=r,this._contextKeyService=a,this._storageService=c,this._notificationService=d,this._ctrlEnterReplaceAllWarningPrompted=!!c.getBoolean(ut,0),this._isVisible=!1,this._isReplaceVisible=!1,this._ignoreChangeEvent=!1,this._updateHistoryDelayer=new n.vp(500),this._register((0,o.OF)((()=>this._updateHistoryDelayer.cancel()))),this._register(this._state.onFindReplaceStateChange((e=>this._onStateChanged(e)))),this._buildDomNode(),this._updateButtons(),this._tryUpdateWidgetWidth(),this._findInput.inputBox.layout(),this._register(this._codeEditor.onDidChangeConfiguration((e=>{if(e.hasChanged(80)&&(this._codeEditor.getOption(80)&&this._state.change({isReplaceRevealed:!1},!1),this._updateButtons()),e.hasChanged(129)&&this._tryUpdateWidgetWidth(),e.hasChanged(2)&&this.updateAccessibilitySupport(),e.hasChanged(35)){const e=this._codeEditor.getOption(35).addExtraSpaceOnTop;e&&!this._viewZone&&(this._viewZone=new pt(0),this._showViewZone()),!e&&this._viewZone&&this._removeViewZone()}}))),this.updateAccessibilitySupport(),this._register(this._codeEditor.onDidChangeCursorSelection((()=>{this._isVisible&&this._updateToggleSelectionFindButton()}))),this._register(this._codeEditor.onDidFocusEditorWidget((()=>ze(this,void 0,void 0,(function*(){if(this._isVisible){let e=yield this._controller.getGlobalBufferTerm();e&&e!==this._state.searchString&&(this._state.change({searchString:e},!1),this._findInput.select())}}))))),this._findInputFocused=E.bindTo(a),this._findFocusTracker=this._register(te.go(this._findInput.inputBox.inputElement)),this._register(this._findFocusTracker.onDidFocus((()=>{this._findInputFocused.set(!0),this._updateSearchScope()}))),this._register(this._findFocusTracker.onDidBlur((()=>{this._findInputFocused.set(!1)}))),this._replaceInputFocused=T.bindTo(a),this._replaceFocusTracker=this._register(te.go(this._replaceInput.inputBox.inputElement)),this._register(this._replaceFocusTracker.onDidFocus((()=>{this._replaceInputFocused.set(!0),this._updateSearchScope()}))),this._register(this._replaceFocusTracker.onDidBlur((()=>{this._replaceInputFocused.set(!1)}))),this._codeEditor.addOverlayWidget(this),this._codeEditor.getOption(35).addExtraSpaceOnTop&&(this._viewZone=new pt(0)),this._applyTheme(l.getColorTheme()),this._register(l.onDidColorThemeChange(this._applyTheme.bind(this))),this._register(this._codeEditor.onDidChangeModel((()=>{this._isVisible&&(this._viewZoneId=void 0)}))),this._register(this._codeEditor.onDidScrollChange((e=>{e.scrollTopChanged?this._layoutViewZone():setTimeout((()=>{this._layoutViewZone()}),0)})))}getId(){return vt.ID}getDomNode(){return this._domNode}getPosition(){return this._isVisible?{preference:0}:null}_onStateChanged(e){if(e.searchString){try{this._ignoreChangeEvent=!0,this._findInput.setValue(this._state.searchString)}finally{this._ignoreChangeEvent=!1}this._updateButtons()}if(e.replaceString&&(this._replaceInput.inputBox.value=this._state.replaceString),e.isRevealed&&(this._state.isRevealed?this._reveal():this._hide(!0)),e.isReplaceRevealed&&(this._state.isReplaceRevealed?this._codeEditor.getOption(80)||this._isReplaceVisible||(this._isReplaceVisible=!0,this._replaceInput.width=te.w(this._findInput.domNode),this._updateButtons(),this._replaceInput.inputBox.layout()):this._isReplaceVisible&&(this._isReplaceVisible=!1,this._updateButtons())),(e.isRevealed||e.isReplaceRevealed)&&(this._state.isRevealed||this._state.isReplaceRevealed)&&this._tryUpdateHeight()&&this._showViewZone(),e.isRegex&&this._findInput.setRegex(this._state.isRegex),e.wholeWord&&this._findInput.setWholeWords(this._state.wholeWord),e.matchCase&&this._findInput.setCaseSensitive(this._state.matchCase),e.preserveCase&&this._replaceInput.setPreserveCase(this._state.preserveCase),e.searchScope&&(this._state.searchScope?this._toggleSelectionFind.checked=!0:this._toggleSelectionFind.checked=!1,this._updateToggleSelectionFindButton()),e.searchString||e.matchesCount||e.matchesPosition){let e=this._state.searchString.length>0&&0===this._state.matchesCount;this._domNode.classList.toggle("no-results",e),this._updateMatchesCount(),this._updateButtons()}(e.searchString||e.currentMatch)&&this._layoutViewZone(),e.updateHistory&&this._delayedUpdateHistory(),e.loop&&this._updateButtons()}_delayedUpdateHistory(){this._updateHistoryDelayer.trigger(this._updateHistory.bind(this)).then(void 0,we.dL)}_updateHistory(){this._state.searchString&&this._findInput.inputBox.addToHistory(),this._state.replaceString&&this._replaceInput.inputBox.addToHistory()}_updateMatchesCount(){let e;if(this._matchesCount.style.minWidth=ht+"px",this._state.matchesCount>=J?this._matchesCount.title=at:this._matchesCount.title="",this._matchesCount.firstChild&&this._matchesCount.removeChild(this._matchesCount.firstChild),this._state.matchesCount>0){let t=String(this._state.matchesCount);this._state.matchesCount>=J&&(t+="+");let i=String(this._state.matchesPosition);"0"===i&&(i="?"),e=s.WU(lt,i,t)}else e=ct;this._matchesCount.appendChild(document.createTextNode(e)),(0,_e.Z9)(this._getAriaLabel(e,this._state.currentMatch,this._state.searchString)),ht=Math.max(ht,this._matchesCount.clientWidth)}_getAriaLabel(e,t,i){if(e===ct)return""===i?le.N("ariaSearchNoResultEmpty","{0} found",e):le.N("ariaSearchNoResult","{0} found for '{1}'",e,i);if(t){const n=le.N("ariaSearchNoResultWithLineNum","{0} found for '{1}', at {2}",e,i,t.startLineNumber+":"+t.startColumn),o=this._codeEditor.getModel();if(o&&t.startLineNumber<=o.getLineCount()&&t.startLineNumber>=1){return`${o.getLineContent(t.startLineNumber)}, ${n}`}return n}return le.N("ariaSearchNoResultWithLineNumNoCurrentMatch","{0} found for '{1}'",e,i)}_updateToggleSelectionFindButton(){let e=this._codeEditor.getSelection(),t=!!e&&(e.startLineNumber!==e.endLineNumber||e.startColumn!==e.endColumn),i=this._toggleSelectionFind.checked;this._isVisible&&(i||t)?this._toggleSelectionFind.enable():this._toggleSelectionFind.disable()}_updateButtons(){this._findInput.setEnabled(this._isVisible),this._replaceInput.setEnabled(this._isVisible&&this._isReplaceVisible),this._updateToggleSelectionFindButton(),this._closeBtn.setEnabled(this._isVisible);let e=this._state.searchString.length>0,t=!!this._state.matchesCount;this._prevBtn.setEnabled(this._isVisible&&e&&t&&this._state.canNavigateBack()),this._nextBtn.setEnabled(this._isVisible&&e&&t&&this._state.canNavigateForward()),this._replaceBtn.setEnabled(this._isVisible&&this._isReplaceVisible&&e),this._replaceAllBtn.setEnabled(this._isVisible&&this._isReplaceVisible&&e),this._domNode.classList.toggle("replaceToggled",this._isReplaceVisible),this._toggleReplaceBtn.setExpanded(this._isReplaceVisible);let i=!this._codeEditor.getOption(80);this._toggleReplaceBtn.setEnabled(this._isVisible&&i)}_reveal(){if(this._revealTimeouts.forEach((e=>{clearTimeout(e)})),this._revealTimeouts=[],!this._isVisible){this._isVisible=!0;const e=this._codeEditor.getSelection();switch(this._codeEditor.getOption(35).autoFindInSelection){case"always":this._toggleSelectionFind.checked=!0;break;case"never":this._toggleSelectionFind.checked=!1;break;case"multiline":const t=!!e&&e.startLineNumber!==e.endLineNumber;this._toggleSelectionFind.checked=t}this._tryUpdateWidgetWidth(),this._updateButtons(),this._revealTimeouts.push(setTimeout((()=>{this._domNode.classList.add("visible"),this._domNode.setAttribute("aria-hidden","false")}),0)),this._revealTimeouts.push(setTimeout((()=>{this._findInput.validate()}),200)),this._codeEditor.layoutOverlayWidget(this);let t=!0;if(this._codeEditor.getOption(35).seedSearchStringFromSelection&&e){const i=this._codeEditor.getDomNode();if(i){const n=te.i(i),o=this._codeEditor.getScrolledVisiblePosition(e.getStartPosition()),s=n.left+(o?o.left:0),r=o?o.top:0;if(this._viewZone&&r<this._viewZone.heightInPx){e.endLineNumber>e.startLineNumber&&(t=!1);const i=te.xQ(this._domNode).left;s>i&&(t=!1);const o=this._codeEditor.getScrolledVisiblePosition(e.getEndPosition());n.left+(o?o.left:0)>i&&(t=!1)}}}this._showViewZone(t)}}_hide(e){this._revealTimeouts.forEach((e=>{clearTimeout(e)})),this._revealTimeouts=[],this._isVisible&&(this._isVisible=!1,this._updateButtons(),this._domNode.classList.remove("visible"),this._domNode.setAttribute("aria-hidden","true"),this._findInput.clearMessage(),e&&this._codeEditor.focus(),this._codeEditor.layoutOverlayWidget(this),this._removeViewZone())}_layoutViewZone(e){if(!this._codeEditor.getOption(35).addExtraSpaceOnTop)return void this._removeViewZone();if(!this._isVisible)return;const t=this._viewZone;void 0===this._viewZoneId&&t&&this._codeEditor.changeViewZones((i=>{t.heightInPx=this._getHeight(),this._viewZoneId=i.addZone(t),this._codeEditor.setScrollTop(e||this._codeEditor.getScrollTop()+t.heightInPx)}))}_showViewZone(e=!0){if(!this._isVisible)return;if(!this._codeEditor.getOption(35).addExtraSpaceOnTop)return;void 0===this._viewZone&&(this._viewZone=new pt(0));const t=this._viewZone;this._codeEditor.changeViewZones((i=>{if(void 0!==this._viewZoneId){const n=this._getHeight();if(n===t.heightInPx)return;let o=n-t.heightInPx;return t.heightInPx=n,i.layoutZone(this._viewZoneId),void(e&&this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()+o))}{let n=this._getHeight();if(n-=this._codeEditor.getOption(74).top,n<=0)return;t.heightInPx=n,this._viewZoneId=i.addZone(t),e&&this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()+n)}}))}_removeViewZone(){this._codeEditor.changeViewZones((e=>{void 0!==this._viewZoneId&&(e.removeZone(this._viewZoneId),this._viewZoneId=void 0,this._viewZone&&(this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()-this._viewZone.heightInPx),this._viewZone=void 0))}))}_applyTheme(e){let t={inputActiveOptionBorder:e.getColor(m.PR),inputActiveOptionBackground:e.getColor(m.XE),inputActiveOptionForeground:e.getColor(m.Pv),inputBackground:e.getColor(m.sE),inputForeground:e.getColor(m.zJ),inputBorder:e.getColor(m.dt),inputValidationInfoBackground:e.getColor(m._l),inputValidationInfoForeground:e.getColor(m.YI),inputValidationInfoBorder:e.getColor(m.EP),inputValidationWarningBackground:e.getColor(m.RV),inputValidationWarningForeground:e.getColor(m.SU),inputValidationWarningBorder:e.getColor(m.C3),inputValidationErrorBackground:e.getColor(m.p),inputValidationErrorForeground:e.getColor(m._t),inputValidationErrorBorder:e.getColor(m.OZ)};this._findInput.style(t),this._replaceInput.style(t),this._toggleSelectionFind.style(t)}_tryUpdateWidgetWidth(){if(!this._isVisible)return;if(!te.Uw(this._domNode))return;const e=this._codeEditor.getLayoutInfo();if(e.contentWidth<=0)return void this._domNode.classList.add("hiddenEditor");this._domNode.classList.contains("hiddenEditor")&&this._domNode.classList.remove("hiddenEditor");const t=e.width,i=e.minimap.minimapWidth;let n=!1,o=!1,s=!1;if(this._resized){if(te.w(this._domNode)>dt)return this._domNode.style.maxWidth=t-28-i-15+"px",void(this._replaceInput.width=te.w(this._findInput.domNode))}if(447+i>=t&&(o=!0),447+i-ht>=t&&(s=!0),447+i-ht>=t+50&&(n=!0),this._domNode.classList.toggle("collapsed-find-widget",n),this._domNode.classList.toggle("narrow-find-widget",s),this._domNode.classList.toggle("reduced-find-widget",o),s||n||(this._domNode.style.maxWidth=t-28-i-15+"px"),this._resized){this._findInput.inputBox.layout();let e=this._findInput.inputBox.element.clientWidth;e>0&&(this._replaceInput.width=e)}else this._isReplaceVisible&&(this._replaceInput.width=te.w(this._findInput.domNode))}_getHeight(){let e=0;return e+=4,e+=this._findInput.inputBox.height+2,this._isReplaceVisible&&(e+=4,e+=this._replaceInput.inputBox.height+2),e+=4,e}_tryUpdateHeight(){const e=this._getHeight();return(null===this._cachedHeight||this._cachedHeight!==e)&&(this._cachedHeight=e,this._domNode.style.height=`${e}px`,!0)}focusFindInput(){this._findInput.select(),this._findInput.focus()}focusReplaceInput(){this._replaceInput.select(),this._replaceInput.focus()}highlightFindOptions(){this._findInput.highlightFindOptions()}_updateSearchScope(){if(this._codeEditor.hasModel()&&this._toggleSelectionFind.checked){let e=this._codeEditor.getSelections();e.map((e=>{1===e.endColumn&&e.endLineNumber>e.startLineNumber&&(e=e.setEndPosition(e.endLineNumber-1,this._codeEditor.getModel().getLineMaxColumn(e.endLineNumber-1)));const t=this._state.currentMatch;return e.startLineNumber===e.endLineNumber||h.e.equalsRange(e,t)?null:e})).filter((e=>!!e)),e.length&&this._state.change({searchScope:e},!0)}}_onFindInputMouseDown(e){e.middleButton&&e.stopPropagation()}_onFindInputKeyDown(e){return e.equals(3|gt)?(this._keybindingService.dispatchEvent(e,e.target)||this._findInput.inputBox.insertAtCursor("\n"),void e.preventDefault()):e.equals(2)?(this._isReplaceVisible?this._replaceInput.focus():this._findInput.focusOnCaseSensitive(),void e.preventDefault()):e.equals(2066)?(this._codeEditor.focus(),void e.preventDefault()):e.equals(16)?ft(e,this._findInput.getValue(),this._findInput.domNode.querySelector("textarea")):e.equals(18)?mt(e,this._findInput.getValue(),this._findInput.domNode.querySelector("textarea")):void 0}_onReplaceInputKeyDown(e){return e.equals(3|gt)?(this._keybindingService.dispatchEvent(e,e.target)||(ye.ED&&ye.tY&&!this._ctrlEnterReplaceAllWarningPrompted&&(this._notificationService.info(le.N("ctrlEnter.keybindingChanged","Ctrl+Enter now inserts line break instead of replacing all. You can modify the keybinding for editor.action.replaceAll to override this behavior.")),this._ctrlEnterReplaceAllWarningPrompted=!0,this._storageService.store(ut,!0,0,0)),this._replaceInput.inputBox.insertAtCursor("\n")),void e.preventDefault()):e.equals(2)?(this._findInput.focusOnCaseSensitive(),void e.preventDefault()):e.equals(1026)?(this._findInput.focus(),void e.preventDefault()):e.equals(2066)?(this._codeEditor.focus(),void e.preventDefault()):e.equals(16)?ft(e,this._replaceInput.inputBox.value,this._replaceInput.inputBox.element.querySelector("textarea")):e.equals(18)?mt(e,this._replaceInput.inputBox.value,this._replaceInput.inputBox.element.querySelector("textarea")):void 0}getVerticalSashLeft(e){return 0}_keybindingLabelFor(e){let t=this._keybindingService.lookupKeybinding(e);return t?` (${t.getLabel()})`:""}_buildDomNode(){this._findInput=this._register(new Be(null,this._contextViewProvider,{width:221,label:Ye,placeholder:Qe,appendCaseSensitiveLabel:this._keybindingLabelFor($),appendWholeWordsLabel:this._keybindingLabelFor(K),appendRegexLabel:this._keybindingLabelFor(q),validation:e=>{if(0===e.length||!this._findInput.getRegex())return null;try{return new RegExp(e,"gu"),null}catch(e){return{content:e.message}}},flexibleHeight:true,flexibleWidth:true,flexibleMaxHeight:118,showHistoryHint:()=>We(this._keybindingService)},this._contextKeyService,!0)),this._findInput.setRegex(!!this._state.isRegex),this._findInput.setCaseSensitive(!!this._state.matchCase),this._findInput.setWholeWords(!!this._state.wholeWord),this._register(this._findInput.onKeyDown((e=>this._onFindInputKeyDown(e)))),this._register(this._findInput.inputBox.onDidChange((()=>{this._ignoreChangeEvent||this._state.change({searchString:this._findInput.getValue()},!0)}))),this._register(this._findInput.onDidOptionChange((()=>{this._state.change({isRegex:this._findInput.getRegex(),wholeWord:this._findInput.getWholeWords(),matchCase:this._findInput.getCaseSensitive()},!0)}))),this._register(this._findInput.onCaseSensitiveKeyDown((e=>{e.equals(1026)&&this._isReplaceVisible&&(this._replaceInput.focus(),e.preventDefault())}))),this._register(this._findInput.onRegexKeyDown((e=>{e.equals(2)&&this._isReplaceVisible&&(this._replaceInput.focusOnPreserve(),e.preventDefault())}))),this._register(this._findInput.inputBox.onDidHeightChange((e=>{this._tryUpdateHeight()&&this._showViewZone()}))),ye.IJ&&this._register(this._findInput.onMouseDown((e=>this._onFindInputMouseDown(e)))),this._matchesCount=document.createElement("div"),this._matchesCount.className="matchesCount",this._updateMatchesCount(),this._prevBtn=this._register(new _t({label:Xe+this._keybindingLabelFor(W),icon:Ze,onTrigger:()=>{this._codeEditor.getAction(W).run().then(void 0,we.dL)}})),this._nextBtn=this._register(new _t({label:Je+this._keybindingLabelFor(V),icon:Ge,onTrigger:()=>{this._codeEditor.getAction(V).run().then(void 0,we.dL)}}));let e=document.createElement("div");e.className="find-part",e.appendChild(this._findInput.domNode);const t=document.createElement("div");t.className="find-actions",e.appendChild(t),t.appendChild(this._matchesCount),t.appendChild(this._prevBtn.domNode),t.appendChild(this._nextBtn.domNode),this._toggleSelectionFind=this._register(new ae({icon:je,title:et+this._keybindingLabelFor(Z),isChecked:!1})),this._register(this._toggleSelectionFind.onChange((()=>{if(this._toggleSelectionFind.checked){if(this._codeEditor.hasModel()){let e=this._codeEditor.getSelections();e.map((e=>(1===e.endColumn&&e.endLineNumber>e.startLineNumber&&(e=e.setEndPosition(e.endLineNumber-1,this._codeEditor.getModel().getLineMaxColumn(e.endLineNumber-1))),e.isEmpty()?null:e))).filter((e=>!!e)),e.length&&this._state.change({searchScope:e},!0)}}else this._state.change({searchScope:null},!0)}))),t.appendChild(this._toggleSelectionFind.domNode),this._closeBtn=this._register(new _t({label:tt+this._keybindingLabelFor(U),icon:He.s_,onTrigger:()=>{this._state.change({isRevealed:!1,searchScope:null},!1)},onKeyDown:e=>{e.equals(2)&&this._isReplaceVisible&&(this._replaceBtn.isEnabled()?this._replaceBtn.focus():this._codeEditor.focus(),e.preventDefault())}})),t.appendChild(this._closeBtn.domNode),this._replaceInput=this._register(new Ve(null,void 0,{label:it,placeholder:nt,appendPreserveCaseLabel:this._keybindingLabelFor(G),history:[],flexibleHeight:true,flexibleWidth:true,flexibleMaxHeight:118,showHistoryHint:()=>We(this._keybindingService)},this._contextKeyService,!0)),this._replaceInput.setPreserveCase(!!this._state.preserveCase),this._register(this._replaceInput.onKeyDown((e=>this._onReplaceInputKeyDown(e)))),this._register(this._replaceInput.inputBox.onDidChange((()=>{this._state.change({replaceString:this._replaceInput.inputBox.value},!1)}))),this._register(this._replaceInput.inputBox.onDidHeightChange((e=>{this._isReplaceVisible&&this._tryUpdateHeight()&&this._showViewZone()}))),this._register(this._replaceInput.onDidOptionChange((()=>{this._state.change({preserveCase:this._replaceInput.getPreserveCase()},!0)}))),this._register(this._replaceInput.onPreserveCaseKeyDown((e=>{e.equals(2)&&(this._prevBtn.isEnabled()?this._prevBtn.focus():this._nextBtn.isEnabled()?this._nextBtn.focus():this._toggleSelectionFind.enabled?this._toggleSelectionFind.focus():this._closeBtn.isEnabled()&&this._closeBtn.focus(),e.preventDefault())}))),this._replaceBtn=this._register(new _t({label:ot+this._keybindingLabelFor(Y),icon:Ke,onTrigger:()=>{this._controller.replace()},onKeyDown:e=>{e.equals(1026)&&(this._closeBtn.focus(),e.preventDefault())}})),this._replaceAllBtn=this._register(new _t({label:st+this._keybindingLabelFor(Q),icon:qe,onTrigger:()=>{this._controller.replaceAll()}}));let i=document.createElement("div");i.className="replace-part",i.appendChild(this._replaceInput.domNode);const n=document.createElement("div");n.className="replace-actions",i.appendChild(n),n.appendChild(this._replaceBtn.domNode),n.appendChild(this._replaceAllBtn.domNode),this._toggleReplaceBtn=this._register(new _t({label:rt,className:"codicon toggle left",onTrigger:()=>{this._state.change({isReplaceRevealed:!this._isReplaceVisible},!1),this._isReplaceVisible&&(this._replaceInput.width=te.w(this._findInput.domNode),this._replaceInput.inputBox.layout()),this._showViewZone()}})),this._toggleReplaceBtn.setExpanded(this._isReplaceVisible),this._domNode=document.createElement("div"),this._domNode.className="editor-widget find-widget",this._domNode.setAttribute("aria-hidden","true"),this._domNode.style.width="419px",this._domNode.appendChild(this._toggleReplaceBtn.domNode),this._domNode.appendChild(e),this._domNode.appendChild(i),this._resizeSash=new be.g(this._domNode,this,{orientation:0,size:2}),this._resized=!1;let o=dt;this._register(this._resizeSash.onDidStart((()=>{o=te.w(this._domNode)}))),this._register(this._resizeSash.onDidChange((e=>{this._resized=!0;let t=o+e.startX-e.currentX;if(t<dt)return;t>(parseFloat(te.Dx(this._domNode).maxWidth)||0)||(this._domNode.style.width=`${t}px`,this._isReplaceVisible&&(this._replaceInput.width=te.w(this._findInput.domNode)),this._findInput.inputBox.layout(),this._tryUpdateHeight())}))),this._register(this._resizeSash.onDidReset((()=>{const e=te.w(this._domNode);if(e<dt)return;let t=dt;if(!this._resized||e===dt){const e=this._codeEditor.getLayoutInfo();t=e.width-28-e.minimap.minimapWidth-15,this._resized=!0}this._domNode.style.width=`${t}px`,this._isReplaceVisible&&(this._replaceInput.width=te.w(this._findInput.domNode)),this._findInput.inputBox.layout()})))}updateAccessibilitySupport(){const e=this._codeEditor.getOption(2);this._findInput.setFocusInputOnOptionClick(2!==e)}}vt.ID="editor.contrib.findWidget";class _t extends ie.${constructor(e){super(),this._opts=e;let t="button";this._opts.className&&(t=t+" "+this._opts.className),this._opts.icon&&(t=t+" "+v.kS.asClassName(this._opts.icon)),this._domNode=document.createElement("div"),this._domNode.title=this._opts.label,this._domNode.tabIndex=0,this._domNode.className=t,this._domNode.setAttribute("role","button"),this._domNode.setAttribute("aria-label",this._opts.label),this.onclick(this._domNode,(e=>{this._opts.onTrigger(),e.preventDefault()})),this.onkeydown(this._domNode,(e=>{if(e.equals(10)||e.equals(3))return this._opts.onTrigger(),void e.preventDefault();this._opts.onKeyDown&&this._opts.onKeyDown(e)}))}get domNode(){return this._domNode}isEnabled(){return this._domNode.tabIndex>=0}focus(){this._domNode.focus()}setEnabled(e){this._domNode.classList.toggle("disabled",!e),this._domNode.setAttribute("aria-disabled",String(!e)),this._domNode.tabIndex=e?0:-1}setExpanded(e){this._domNode.setAttribute("aria-expanded",String(!!e)),e?(this._domNode.classList.remove(...v.kS.asClassNameArray(Ue)),this._domNode.classList.add(...v.kS.asClassNameArray($e))):(this._domNode.classList.remove(...v.kS.asClassNameArray($e)),this._domNode.classList.add(...v.kS.asClassNameArray(Ue)))}}(0,v.Ic)(((e,t)=>{const i=(e,i)=>{i&&t.addRule(`.monaco-editor ${e} { background-color: ${i}; }`)};i(".findMatch",e.getColor(m.MU)),i(".currentFindMatch",e.getColor(m.ny)),i(".findScope",e.getColor(m.jU));i(".find-widget",e.getColor(m.D0));const n=e.getColor(m.rh);n&&t.addRule(`.monaco-editor .find-widget { box-shadow: 0 0 8px 2px ${n}; }`);const o=e.getColor(m.Ei);o&&t.addRule(`.monaco-editor .findMatch { border: 1px ${"hc"===e.type?"dotted":"solid"} ${o}; box-sizing: border-box; }`);const s=e.getColor(m.pn);s&&t.addRule(`.monaco-editor .currentFindMatch { border: 2px solid ${s}; padding: 1px; box-sizing: border-box; }`);const r=e.getColor(m.gk);r&&t.addRule(`.monaco-editor .findScope { border: 1px ${"hc"===e.type?"dashed":"solid"} ${r}; }`);const a=e.getColor(m.lR);a&&t.addRule(`.monaco-editor .find-widget { border: 1px solid ${a}; }`);const l=e.getColor(m.Hf);l&&t.addRule(`.monaco-editor .find-widget { color: ${l}; }`);const c=e.getColor(m.Id);c&&t.addRule(`.monaco-editor .find-widget.no-results .matchesCount { color: ${c}; }`);const d=e.getColor(m.Ng);if(d)t.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${d}; }`);else{const i=e.getColor(m.D1);i&&t.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${i}; }`)}const h=e.getColor(m.lU);h&&t.addRule(`\n\t\t.monaco-editor .find-widget .button:not(.disabled):hover,\n\t\t.monaco-editor .find-widget .codicon-find-selection:hover {\n\t\t\tbackground-color: ${h} !important;\n\t\t}\n\t`);const u=e.getColor(m.R8);u&&t.addRule(`.monaco-editor .find-widget .monaco-inputbox.synthetic-focus { outline-color: ${u}; }`)}));var bt=i(84144),wt=i(84972),yt=i(5606),Ct=i(91847),xt=i(59422),St=i(26904),kt=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Lt=function(e,t){return function(i,n){t(i,n,e)}},Nt=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const Dt=524288;function It(e,t="single",i=!1){if(!e.hasModel())return null;const n=e.getSelection();if("single"===t&&n.startLineNumber===n.endLineNumber||"multiple"===t)if(n.isEmpty()){const t=e.getConfiguredWordAtPosition(n.getStartPosition());if(t&&!1===i)return t.word}else if(e.getModel().getValueLengthInRange(n)<Dt)return e.getModel().getValueInRange(n);return null}let Et=class e extends o.JT{constructor(e,t,i,o){super(),this._editor=e,this._findWidgetVisible=I.bindTo(t),this._contextKeyService=t,this._storageService=i,this._clipboardService=o,this._updateHistoryDelayer=new n.vp(500),this._state=this._register(new ve),this.loadQueryState(),this._register(this._state.onFindReplaceStateChange((e=>this._onStateChanged(e)))),this._model=null,this._register(this._editor.onDidChangeModel((()=>{let e=this._editor.getModel()&&this._state.isRevealed;this.disposeModel(),this._state.change({searchScope:null,matchCase:this._storageService.getBoolean("editor.matchCase",1,!1),wholeWord:this._storageService.getBoolean("editor.wholeWord",1,!1),isRegex:this._storageService.getBoolean("editor.isRegex",1,!1),preserveCase:this._storageService.getBoolean("editor.preserveCase",1,!1)},!1),e&&this._start({forceRevealReplace:!1,seedSearchStringFromSelection:"none",seedSearchStringFromNonEmptySelection:!1,seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!1,updateSearchScope:!1,loop:this._editor.getOption(35).loop})})))}get editor(){return this._editor}static get(t){return t.getContribution(e.ID)}dispose(){this.disposeModel(),super.dispose()}disposeModel(){this._model&&(this._model.dispose(),this._model=null)}_onStateChanged(e){this.saveQueryState(e),e.isRevealed&&(this._state.isRevealed?this._findWidgetVisible.set(!0):(this._findWidgetVisible.reset(),this.disposeModel())),e.searchString&&this.setGlobalBufferTerm(this._state.searchString)}saveQueryState(e){e.isRegex&&this._storageService.store("editor.isRegex",this._state.actualIsRegex,1,0),e.wholeWord&&this._storageService.store("editor.wholeWord",this._state.actualWholeWord,1,0),e.matchCase&&this._storageService.store("editor.matchCase",this._state.actualMatchCase,1,0),e.preserveCase&&this._storageService.store("editor.preserveCase",this._state.actualPreserveCase,1,0)}loadQueryState(){this._state.change({matchCase:this._storageService.getBoolean("editor.matchCase",1,this._state.matchCase),wholeWord:this._storageService.getBoolean("editor.wholeWord",1,this._state.wholeWord),isRegex:this._storageService.getBoolean("editor.isRegex",1,this._state.isRegex),preserveCase:this._storageService.getBoolean("editor.preserveCase",1,this._state.preserveCase)},!1)}isFindInputFocused(){return!!E.getValue(this._contextKeyService)}getState(){return this._state}closeFindWidget(){this._state.change({isRevealed:!1,searchScope:null},!1),this._editor.focus()}toggleCaseSensitive(){this._state.change({matchCase:!this._state.matchCase},!1),this._state.isRevealed||this.highlightFindOptions()}toggleWholeWords(){this._state.change({wholeWord:!this._state.wholeWord},!1),this._state.isRevealed||this.highlightFindOptions()}toggleRegex(){this._state.change({isRegex:!this._state.isRegex},!1),this._state.isRevealed||this.highlightFindOptions()}togglePreserveCase(){this._state.change({preserveCase:!this._state.preserveCase},!1),this._state.isRevealed||this.highlightFindOptions()}toggleSearchScope(){if(this._state.searchScope)this._state.change({searchScope:null},!0);else if(this._editor.hasModel()){let e=this._editor.getSelections();e.map((e=>(1===e.endColumn&&e.endLineNumber>e.startLineNumber&&(e=e.setEndPosition(e.endLineNumber-1,this._editor.getModel().getLineMaxColumn(e.endLineNumber-1))),e.isEmpty()?null:e))).filter((e=>!!e)),e.length&&this._state.change({searchScope:e},!0)}}setSearchString(e){this._state.isRegex&&(e=s.ec(e)),this._state.change({searchString:e},!1)}highlightFindOptions(e=!1){}_start(e){return Nt(this,void 0,void 0,(function*(){if(this.disposeModel(),!this._editor.hasModel())return;let t={isRevealed:!0};if("single"===e.seedSearchStringFromSelection){let i=It(this._editor,e.seedSearchStringFromSelection,e.seedSearchStringFromNonEmptySelection);i&&(this._state.isRegex?t.searchString=s.ec(i):t.searchString=i)}else if("multiple"===e.seedSearchStringFromSelection&&!e.updateSearchScope){let i=It(this._editor,e.seedSearchStringFromSelection);i&&(t.searchString=i)}if(!t.searchString&&e.seedSearchStringFromGlobalClipboard){let e=yield this.getGlobalBufferTerm();if(!this._editor.hasModel())return;e&&(t.searchString=e)}if(e.forceRevealReplace?t.isReplaceRevealed=!0:this._findWidgetVisible.get()||(t.isReplaceRevealed=!1),e.updateSearchScope){let e=this._editor.getSelections();e.some((e=>!e.isEmpty()))&&(t.searchScope=e)}t.loop=e.loop,this._state.change(t,!1),this._model||(this._model=new ee(this._editor,this._state))}))}start(e){return this._start(e)}moveToNextMatch(){return!!this._model&&(this._model.moveToNextMatch(),!0)}moveToPrevMatch(){return!!this._model&&(this._model.moveToPrevMatch(),!0)}replace(){return!!this._model&&(this._model.replace(),!0)}replaceAll(){return!!this._model&&(this._model.replaceAll(),!0)}selectAllMatches(){return!!this._model&&(this._model.selectAllMatches(),this._editor.focus(),!0)}getGlobalBufferTerm(){return Nt(this,void 0,void 0,(function*(){return this._editor.getOption(35).globalFindClipboard&&this._editor.hasModel()&&!this._editor.getModel().isTooLargeForSyncing()?this._clipboardService.readFindText():""}))}setGlobalBufferTerm(e){this._editor.getOption(35).globalFindClipboard&&this._editor.hasModel()&&!this._editor.getModel().isTooLargeForSyncing()&&this._clipboardService.writeFindText(e)}};Et.ID="editor.contrib.findController",Et=kt([Lt(1,D.i6),Lt(2,St.Uy),Lt(3,wt.p)],Et);let Tt=class extends Et{constructor(e,t,i,n,o,s,r,a){super(e,i,r,a),this._contextViewService=t,this._keybindingService=n,this._themeService=o,this._notificationService=s,this._widget=null,this._findOptionsWidget=null}_start(e){const t=Object.create(null,{_start:{get:()=>super._start}});return Nt(this,void 0,void 0,(function*(){this._widget||this._createFindWidget();const i=this._editor.getSelection();let n=!1;switch(this._editor.getOption(35).autoFindInSelection){case"always":n=!0;break;case"never":n=!1;break;case"multiline":n=!!i&&i.startLineNumber!==i.endLineNumber}e.updateSearchScope=n,yield t._start.call(this,e),this._widget&&(2===e.shouldFocus?this._widget.focusReplaceInput():1===e.shouldFocus&&this._widget.focusFindInput())}))}highlightFindOptions(e=!1){this._widget||this._createFindWidget(),this._state.isRevealed&&!e?this._widget.highlightFindOptions():this._findOptionsWidget.highlightFindOptions()}_createFindWidget(){this._widget=this._register(new vt(this._editor,this,this._state,this._contextViewService,this._keybindingService,this._contextKeyService,this._themeService,this._storageService,this._notificationService)),this._findOptionsWidget=this._register(new fe(this._editor,this._state,this._keybindingService,this._themeService))}};Tt=kt([Lt(1,yt.u),Lt(2,D.i6),Lt(3,Ct.d),Lt(4,v.XE),Lt(5,xt.lT),Lt(6,St.Uy),Lt(7,wt.p)],Tt);const Mt=(0,r.rn)(new r.jY({id:F,label:le.N("startFindAction","Find"),alias:"Find",precondition:D.Ao.or(a.u.focus,D.Ao.has("editorIsOpen")),kbOpts:{kbExpr:null,primary:2084,weight:100},menuOpts:{menuId:bt.eH.MenubarEditMenu,group:"3_find",title:le.N({key:"miFind",comment:["&& denotes a mnemonic"]},"&&Find"),order:1}}));Mt.addImplementation(0,((e,t,i)=>{const n=Et.get(t);return!!n&&n.start({forceRevealReplace:!1,seedSearchStringFromSelection:"never"!==t.getOption(35).seedSearchStringFromSelection?"single":"none",seedSearchStringFromNonEmptySelection:"selection"===t.getOption(35).seedSearchStringFromSelection,seedSearchStringFromGlobalClipboard:t.getOption(35).globalFindClipboard,shouldFocus:1,shouldAnimate:!0,updateSearchScope:!1,loop:t.getOption(35).loop})}));class At extends r.R6{constructor(){super({id:B,label:le.N("startFindWithSelectionAction","Find With Selection"),alias:"Find With Selection",precondition:void 0,kbOpts:{kbExpr:null,primary:0,mac:{primary:2083},weight:100}})}run(e,t){return Nt(this,void 0,void 0,(function*(){let e=Et.get(t);e&&(yield e.start({forceRevealReplace:!1,seedSearchStringFromSelection:"multiple",seedSearchStringFromNonEmptySelection:!1,seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:t.getOption(35).loop}),e.setGlobalBufferTerm(e.getState().searchString))}))}}class Ot extends r.R6{run(e,t){return Nt(this,void 0,void 0,(function*(){let e=Et.get(t);e&&!this._run(e)&&(yield e.start({forceRevealReplace:!1,seedSearchStringFromSelection:0===e.getState().searchString.length&&"never"!==t.getOption(35).seedSearchStringFromSelection?"single":"none",seedSearchStringFromNonEmptySelection:"selection"===t.getOption(35).seedSearchStringFromSelection,seedSearchStringFromGlobalClipboard:!0,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:t.getOption(35).loop}),this._run(e))}))}}class Pt extends Ot{constructor(){super({id:V,label:le.N("findNextMatchAction","Find Next"),alias:"Find Next",precondition:void 0,kbOpts:[{kbExpr:a.u.focus,primary:61,mac:{primary:2085,secondary:[61]},weight:100},{kbExpr:D.Ao.and(a.u.focus,E),primary:3,weight:100}]})}_run(e){return!!e.moveToNextMatch()&&(e.editor.pushUndoStop(),!0)}}class Rt extends Ot{constructor(){super({id:W,label:le.N("findPreviousMatchAction","Find Previous"),alias:"Find Previous",precondition:void 0,kbOpts:[{kbExpr:a.u.focus,primary:1085,mac:{primary:3109,secondary:[1085]},weight:100},{kbExpr:D.Ao.and(a.u.focus,E),primary:1027,weight:100}]})}_run(e){return e.moveToPrevMatch()}}class Ft extends r.R6{run(e,t){return Nt(this,void 0,void 0,(function*(){let e=Et.get(t);if(!e)return;const i="selection"===t.getOption(35).seedSearchStringFromSelection;let n=null;"never"!==t.getOption(35).seedSearchStringFromSelection&&(n=It(t,"single",i)),n&&e.setSearchString(n),this._run(e)||(yield e.start({forceRevealReplace:!1,seedSearchStringFromSelection:"never"!==t.getOption(35).seedSearchStringFromSelection?"single":"none",seedSearchStringFromNonEmptySelection:i,seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:t.getOption(35).loop}),this._run(e))}))}}class Bt extends Ft{constructor(){super({id:H,label:le.N("nextSelectionMatchFindAction","Find Next Selection"),alias:"Find Next Selection",precondition:void 0,kbOpts:{kbExpr:a.u.focus,primary:2109,weight:100}})}_run(e){return e.moveToNextMatch()}}class Vt extends Ft{constructor(){super({id:z,label:le.N("previousSelectionMatchFindAction","Find Previous Selection"),alias:"Find Previous Selection",precondition:void 0,kbOpts:{kbExpr:a.u.focus,primary:3133,weight:100}})}_run(e){return e.moveToPrevMatch()}}const Wt=(0,r.rn)(new r.jY({id:j,label:le.N("startReplace","Replace"),alias:"Replace",precondition:D.Ao.or(a.u.focus,D.Ao.has("editorIsOpen")),kbOpts:{kbExpr:null,primary:2086,mac:{primary:2596},weight:100},menuOpts:{menuId:bt.eH.MenubarEditMenu,group:"3_find",title:le.N({key:"miReplace",comment:["&& denotes a mnemonic"]},"&&Replace"),order:2}}));Wt.addImplementation(0,((e,t,i)=>{if(!t.hasModel()||t.getOption(80))return!1;const n=Et.get(t);if(!n)return!1;const o=t.getSelection(),s=n.isFindInputFocused(),r=!o.isEmpty()&&o.startLineNumber===o.endLineNumber&&"never"!==t.getOption(35).seedSearchStringFromSelection&&!s,a=s||r?2:1;return n.start({forceRevealReplace:!0,seedSearchStringFromSelection:r?"single":"none",seedSearchStringFromNonEmptySelection:"selection"===t.getOption(35).seedSearchStringFromSelection,seedSearchStringFromGlobalClipboard:"never"!==t.getOption(35).seedSearchStringFromSelection,shouldFocus:a,shouldAnimate:!0,updateSearchScope:!1,loop:t.getOption(35).loop})})),(0,r._K)(Et.ID,Tt),(0,r.Qr)(At),(0,r.Qr)(Pt),(0,r.Qr)(Rt),(0,r.Qr)(Bt),(0,r.Qr)(Vt);const Ht=r._l.bindToContribution(Et.get);(0,r.fK)(new Ht({id:U,precondition:I,handler:e=>e.closeFindWidget(),kbOpts:{weight:105,kbExpr:D.Ao.and(a.u.focus,D.Ao.not("isComposing")),primary:9,secondary:[1033]}})),(0,r.fK)(new Ht({id:$,precondition:void 0,handler:e=>e.toggleCaseSensitive(),kbOpts:{weight:105,kbExpr:a.u.focus,primary:M.primary,mac:M.mac,win:M.win,linux:M.linux}})),(0,r.fK)(new Ht({id:K,precondition:void 0,handler:e=>e.toggleWholeWords(),kbOpts:{weight:105,kbExpr:a.u.focus,primary:A.primary,mac:A.mac,win:A.win,linux:A.linux}})),(0,r.fK)(new Ht({id:q,precondition:void 0,handler:e=>e.toggleRegex(),kbOpts:{weight:105,kbExpr:a.u.focus,primary:O.primary,mac:O.mac,win:O.win,linux:O.linux}})),(0,r.fK)(new Ht({id:Z,precondition:void 0,handler:e=>e.toggleSearchScope(),kbOpts:{weight:105,kbExpr:a.u.focus,primary:P.primary,mac:P.mac,win:P.win,linux:P.linux}})),(0,r.fK)(new Ht({id:G,precondition:void 0,handler:e=>e.togglePreserveCase(),kbOpts:{weight:105,kbExpr:a.u.focus,primary:R.primary,mac:R.mac,win:R.win,linux:R.linux}})),(0,r.fK)(new Ht({id:Y,precondition:I,handler:e=>e.replace(),kbOpts:{weight:105,kbExpr:a.u.focus,primary:3094}})),(0,r.fK)(new Ht({id:Y,precondition:I,handler:e=>e.replace(),kbOpts:{weight:105,kbExpr:D.Ao.and(a.u.focus,T),primary:3}})),(0,r.fK)(new Ht({id:Q,precondition:I,handler:e=>e.replaceAll(),kbOpts:{weight:105,kbExpr:a.u.focus,primary:2563}})),(0,r.fK)(new Ht({id:Q,precondition:I,handler:e=>e.replaceAll(),kbOpts:{weight:105,kbExpr:D.Ao.and(a.u.focus,T),primary:void 0,mac:{primary:2051}}})),(0,r.fK)(new Ht({id:X,precondition:I,handler:e=>e.selectAllMatches(),kbOpts:{weight:105,kbExpr:a.u.focus,primary:515}}))},62943:(e,t,i)=>{"use strict";i.r(t),i.d(t,{FoldingController:()=>Q,editorFoldForeground:()=>ie,foldBackgroundBackground:()=>te});var n=i(15393),o=i(17301),s=i(22258),r=i(5976),a=i(97295),l=i(98401),c=(i(42680),i(39925)),d=i(16830),h=i(29102),u=i(44101),g=i(83831),p=i(4669);const f=16777215,m=4278190080;class v{constructor(e,t,i){if(e.length!==t.length||e.length>65535)throw new Error("invalid startIndexes or endIndexes size");this._startIndexes=e,this._endIndexes=t,this._collapseStates=new Uint32Array(Math.ceil(e.length/32)),this._types=i,this._parentsComputed=!1}ensureParentIndices(){if(!this._parentsComputed){this._parentsComputed=!0;let e=[],t=(t,i)=>{let n=e[e.length-1];return this.getStartLineNumber(n)<=t&&this.getEndLineNumber(n)>=i};for(let i=0,n=this._startIndexes.length;i<n;i++){let n=this._startIndexes[i],o=this._endIndexes[i];if(n>f||o>f)throw new Error("startLineNumber or endLineNumber must not exceed "+f);for(;e.length>0&&!t(n,o);)e.pop();let s=e.length>0?e[e.length-1]:-1;e.push(i),this._startIndexes[i]=n+((255&s)<<24),this._endIndexes[i]=o+((65280&s)<<16)}}}get length(){return this._startIndexes.length}getStartLineNumber(e){return this._startIndexes[e]&f}getEndLineNumber(e){return this._endIndexes[e]&f}getType(e){return this._types?this._types[e]:void 0}hasTypes(){return!!this._types}isCollapsed(e){let t=e/32|0,i=e%32;return 0!=(this._collapseStates[t]&1<<i)}setCollapsed(e,t){let i=e/32|0,n=e%32,o=this._collapseStates[i];this._collapseStates[i]=t?o|1<<n:o&~(1<<n)}setCollapsedAllOfType(e,t){let i=!1;if(this._types)for(let n=0;n<this._types.length;n++)this._types[n]===e&&(this.setCollapsed(n,t),i=!0);return i}toRegion(e){return new _(this,e)}getParentIndex(e){this.ensureParentIndices();let t=((this._startIndexes[e]&m)>>>24)+((this._endIndexes[e]&m)>>>16);return 65535===t?-1:t}contains(e,t){return this.getStartLineNumber(e)<=t&&this.getEndLineNumber(e)>=t}findIndex(e){let t=0,i=this._startIndexes.length;if(0===i)return-1;for(;t<i;){let n=Math.floor((t+i)/2);e<this.getStartLineNumber(n)?i=n:t=n+1}return t-1}findRange(e){let t=this.findIndex(e);if(t>=0){if(this.getEndLineNumber(t)>=e)return t;for(t=this.getParentIndex(t);-1!==t;){if(this.contains(t,e))return t;t=this.getParentIndex(t)}}return-1}toString(){let e=[];for(let t=0;t<this.length;t++)e[t]=`[${this.isCollapsed(t)?"+":"-"}] ${this.getStartLineNumber(t)}/${this.getEndLineNumber(t)}`;return e.join(", ")}}class _{constructor(e,t){this.ranges=e,this.index=t}get startLineNumber(){return this.ranges.getStartLineNumber(this.index)}get endLineNumber(){return this.ranges.getEndLineNumber(this.index)}get regionIndex(){return this.index}get parentIndex(){return this.ranges.getParentIndex(this.index)}get isCollapsed(){return this.ranges.isCollapsed(this.index)}containedBy(e){return e.startLineNumber<=this.startLineNumber&&e.endLineNumber>=this.endLineNumber}containsLine(e){return this.startLineNumber<=e&&e<=this.endLineNumber}}class b{constructor(e,t){this._updateEventEmitter=new p.Q5,this.onDidChange=this._updateEventEmitter.event,this._textModel=e,this._decorationProvider=t,this._regions=new v(new Uint32Array(0),new Uint32Array(0)),this._editorDecorationIds=[],this._isInitialized=!1}get regions(){return this._regions}get textModel(){return this._textModel}get isInitialized(){return this._isInitialized}toggleCollapseState(e){if(!e.length)return;e=e.sort(((e,t)=>e.regionIndex-t.regionIndex));const t={};this._decorationProvider.changeDecorations((i=>{let n=0,o=-1,s=-1;const r=e=>{for(;n<e;){const e=this._regions.getEndLineNumber(n),t=this._regions.isCollapsed(n);e<=o&&i.changeDecorationOptions(this._editorDecorationIds[n],this._decorationProvider.getDecorationOption(t,e<=s)),t&&e>s&&(s=e),n++}};for(let i of e){let e=i.regionIndex,n=this._editorDecorationIds[e];if(n&&!t[n]){t[n]=!0,r(e);let i=!this._regions.isCollapsed(e);this._regions.setCollapsed(e,i),o=Math.max(o,this._regions.getEndLineNumber(e))}}r(this._regions.length)})),this._updateEventEmitter.fire({model:this,collapseStateChanged:e})}update(e,t=[]){let i=[],n=-1,o=(o,s)=>{const r=e.getStartLineNumber(o),a=e.getEndLineNumber(o);s||(s=e.isCollapsed(o)),s&&((e,i)=>{for(let n of t)if(e<n&&n<=i)return!0;return!1})(r,a)&&(s=!1),e.setCollapsed(o,s);const l=this._textModel.getLineMaxColumn(r),c={startLineNumber:r,startColumn:Math.max(l-1,1),endLineNumber:r,endColumn:l};i.push({range:c,options:this._decorationProvider.getDecorationOption(s,a<=n)}),s&&a>n&&(n=a)},s=0,r=()=>{for(;s<this._regions.length;){let e=this._regions.isCollapsed(s);if(s++,e)return s-1}return-1},a=0,l=r();for(;-1!==l&&a<e.length;){let t=this._textModel.getDecorationRange(this._editorDecorationIds[l]);if(t){let i=t.startLineNumber;if(t.startColumn===Math.max(t.endColumn-1,1)&&this._textModel.getLineMaxColumn(i)===t.endColumn)for(;a<e.length;){let t=e.getStartLineNumber(a);if(!(i>=t))break;o(a,i===t),a++}}l=r()}for(;a<e.length;)o(a,!1),a++;this._editorDecorationIds=this._decorationProvider.deltaDecorations(this._editorDecorationIds,i),this._regions=e,this._isInitialized=!0,this._updateEventEmitter.fire({model:this})}getMemento(){let e=[];for(let t=0;t<this._regions.length;t++)if(this._regions.isCollapsed(t)){let i=this._textModel.getDecorationRange(this._editorDecorationIds[t]);if(i){let n=i.startLineNumber,o=i.endLineNumber+this._regions.getEndLineNumber(t)-this._regions.getStartLineNumber(t);e.push({startLineNumber:n,endLineNumber:o})}}if(e.length>0)return e}applyMemento(e){if(!Array.isArray(e))return;let t=[];for(let i of e){let e=this.getRegionAtLine(i.startLineNumber);e&&!e.isCollapsed&&t.push(e)}this.toggleCollapseState(t)}dispose(){this._decorationProvider.deltaDecorations(this._editorDecorationIds,[])}getAllRegionsAtLine(e,t){let i=[];if(this._regions){let n=this._regions.findRange(e),o=1;for(;n>=0;){let e=this._regions.toRegion(n);t&&!t(e,o)||i.push(e),o++,n=e.parentIndex}}return i}getRegionAtLine(e){if(this._regions){let t=this._regions.findRange(e);if(t>=0)return this._regions.toRegion(t)}return null}getRegionsInside(e,t){let i=[],n=e?e.regionIndex+1:0,o=e?e.endLineNumber:Number.MAX_VALUE;if(t&&2===t.length){const e=[];for(let s=n,r=this._regions.length;s<r;s++){let n=this._regions.toRegion(s);if(!(this._regions.getStartLineNumber(s)<o))break;for(;e.length>0&&!n.containedBy(e[e.length-1]);)e.pop();e.push(n),t(n,e.length)&&i.push(n)}}else for(let e=n,s=this._regions.length;e<s;e++){let n=this._regions.toRegion(e);if(!(this._regions.getStartLineNumber(e)<o))break;t&&!t(n)||i.push(n)}return i}}function w(e,t,i=Number.MAX_VALUE,n){let o=[];if(n&&n.length>0)for(let s of n){let n=e.getRegionAtLine(s);if(n&&(n.isCollapsed!==t&&o.push(n),i>1)){let s=e.getRegionsInside(n,((e,n)=>e.isCollapsed!==t&&n<i));o.push(...s)}}else{let n=e.getRegionsInside(null,((e,n)=>e.isCollapsed!==t&&n<i));o.push(...n)}e.toggleCollapseState(o)}function y(e,t,i,n){let o=[];for(let s of n){let n=e.getAllRegionsAtLine(s,((e,n)=>e.isCollapsed!==t&&n<=i));o.push(...n)}e.toggleCollapseState(o)}function C(e,t,i){let n=[];for(let t of i)n.push(e.getAllRegionsAtLine(t,void 0)[0]);let o=e.getRegionsInside(null,(e=>n.every((t=>!t.containedBy(e)&&!e.containedBy(t)))&&e.isCollapsed!==t));e.toggleCollapseState(o)}function x(e,t,i){let n=e.textModel,o=e.regions,s=[];for(let e=o.length-1;e>=0;e--)if(i!==o.isCollapsed(e)){let i=o.getStartLineNumber(e);t.test(n.getLineContent(i))&&s.push(o.toRegion(e))}e.toggleCollapseState(s)}function S(e,t,i){let n=e.regions,o=[];for(let e=n.length-1;e>=0;e--)i!==n.isCollapsed(e)&&t===n.getType(e)&&o.push(n.toRegion(e));e.toggleCollapseState(o)}var k=i(9488),L=i(24314);class N{constructor(e){this._updateEventEmitter=new p.Q5,this._foldingModel=e,this._foldingModelListener=e.onDidChange((e=>this.updateHiddenRanges())),this._hiddenRanges=[],e.regions.length&&this.updateHiddenRanges()}get onDidChange(){return this._updateEventEmitter.event}get hiddenRanges(){return this._hiddenRanges}updateHiddenRanges(){let e=!1,t=[],i=0,n=0,o=Number.MAX_VALUE,s=-1,r=this._foldingModel.regions;for(;i<r.length;i++){if(!r.isCollapsed(i))continue;let a=r.getStartLineNumber(i)+1,l=r.getEndLineNumber(i);o<=a&&l<=s||(!e&&n<this._hiddenRanges.length&&this._hiddenRanges[n].startLineNumber===a&&this._hiddenRanges[n].endLineNumber===l?(t.push(this._hiddenRanges[n]),n++):(e=!0,t.push(new L.e(a,1,l,1))),o=a,s=l)}(e||n<this._hiddenRanges.length)&&this.applyHiddenRanges(t)}applyMemento(e){if(!Array.isArray(e)||0===e.length)return!1;let t=[];for(let i of e){if(!i.startLineNumber||!i.endLineNumber)return!1;t.push(new L.e(i.startLineNumber+1,1,i.endLineNumber,1))}return this.applyHiddenRanges(t),!0}getMemento(){return this._hiddenRanges.map((e=>({startLineNumber:e.startLineNumber-1,endLineNumber:e.endLineNumber})))}applyHiddenRanges(e){this._hiddenRanges=e,this._updateEventEmitter.fire(e)}hasRanges(){return this._hiddenRanges.length>0}isHidden(e){return null!==D(this._hiddenRanges,e)}adjustSelections(e){let t=!1,i=this._foldingModel.textModel,n=null,o=e=>(n&&function(e,t){return e>=t.startLineNumber&&e<=t.endLineNumber}(e,n)||(n=D(this._hiddenRanges,e)),n?n.startLineNumber-1:null);for(let n=0,s=e.length;n<s;n++){let s=e[n],r=o(s.startLineNumber);r&&(s=s.setStartPosition(r,i.getLineMaxColumn(r)),t=!0);let a=o(s.endLineNumber);a&&(s=s.setEndPosition(a,i.getLineMaxColumn(a)),t=!0),e[n]=s}return t}dispose(){this.hiddenRanges.length>0&&(this._hiddenRanges=[],this._updateEventEmitter.fire(this._hiddenRanges)),this._foldingModelListener&&(this._foldingModelListener.dispose(),this._foldingModelListener=null)}}function D(e,t){let i=(0,k.lG)(e,(e=>t<e.startLineNumber))-1;return i>=0&&e[i].endLineNumber>=t?e[i]:null}var I=i(44174);class E{constructor(e){this.editorModel=e,this.id="indent"}dispose(){}compute(e){let t=g.zu.getFoldingRules(this.editorModel.getLanguageId()),i=t&&!!t.offSide,n=t&&t.markers;return Promise.resolve(function(e,t,i,n=5e3){const o=e.getOptions().tabSize;let s,r=new T(n);i&&(s=new RegExp(`(${i.start.source})|(?:${i.end.source})`));let a=[],l=e.getLineCount()+1;a.push({indent:-1,endAbove:l,line:l});for(let i=e.getLineCount();i>0;i--){let n,l=e.getLineContent(i),c=I.yO.computeIndentLevel(l,o),d=a[a.length-1];if(-1!==c){if(s&&(n=l.match(s))){if(!n[1]){a.push({indent:-2,endAbove:i,line:i});continue}{let e=a.length-1;for(;e>0&&-2!==a[e].indent;)e--;if(e>0){a.length=e+1,d=a[e],r.insertFirst(i,d.line,c),d.line=i,d.indent=c,d.endAbove=i;continue}}}if(d.indent>c){do{a.pop(),d=a[a.length-1]}while(d.indent>c);let e=d.endAbove-1;e-i>=1&&r.insertFirst(i,e,c)}d.indent===c?d.endAbove=i:a.push({indent:c,endAbove:i,line:i})}else t&&(d.endAbove=i)}return r.toIndentRanges(e)}(this.editorModel,i,n))}}class T{constructor(e){this._startIndexes=[],this._endIndexes=[],this._indentOccurrences=[],this._length=0,this._foldingRangesLimit=e}insertFirst(e,t,i){if(e>f||t>f)return;let n=this._length;this._startIndexes[n]=e,this._endIndexes[n]=t,this._length++,i<1e3&&(this._indentOccurrences[i]=(this._indentOccurrences[i]||0)+1)}toIndentRanges(e){if(this._length<=this._foldingRangesLimit){let e=new Uint32Array(this._length),t=new Uint32Array(this._length);for(let i=this._length-1,n=0;i>=0;i--,n++)e[n]=this._startIndexes[i],t[n]=this._endIndexes[i];return new v(e,t)}{let t=0,i=this._indentOccurrences.length;for(let e=0;e<this._indentOccurrences.length;e++){let n=this._indentOccurrences[e];if(n){if(n+t>this._foldingRangesLimit){i=e;break}t+=n}}const n=e.getOptions().tabSize;let o=new Uint32Array(this._foldingRangesLimit),s=new Uint32Array(this._foldingRangesLimit);for(let r=this._length-1,a=0;r>=0;r--){let l=this._startIndexes[r],c=e.getLineContent(l),d=I.yO.computeIndentLevel(c,n);(d<i||d===i&&t++<this._foldingRangesLimit)&&(o[a]=l,s[a]=this._endIndexes[r],a++)}return new v(o,s)}}}const M={},A="syntax";class O{constructor(e,t,i,n=5e3){this.editorModel=e,this.providers=t,this.limit=n,this.id=A;for(const e of t)"function"==typeof e.onDidChange&&(this.disposables||(this.disposables=new r.SL),this.disposables.add(e.onDidChange(i)))}compute(e){return function(e,t,i){let n=null,s=e.map(((e,s)=>Promise.resolve(e.provideFoldingRanges(t,M,i)).then((e=>{if(!i.isCancellationRequested&&Array.isArray(e)){Array.isArray(n)||(n=[]);let i=t.getLineCount();for(let t of e)t.start>0&&t.end>t.start&&t.end<=i&&n.push({start:t.start,end:t.end,rank:s,kind:t.kind})}}),o.Cp)));return Promise.all(s).then((e=>n))}(this.providers,this.editorModel,e).then((e=>{if(e){return R(e,this.limit)}return null}))}dispose(){var e;null===(e=this.disposables)||void 0===e||e.dispose()}}class P{constructor(e){this._startIndexes=[],this._endIndexes=[],this._nestingLevels=[],this._nestingLevelCounts=[],this._types=[],this._length=0,this._foldingRangesLimit=e}add(e,t,i,n){if(e>f||t>f)return;let o=this._length;this._startIndexes[o]=e,this._endIndexes[o]=t,this._nestingLevels[o]=n,this._types[o]=i,this._length++,n<30&&(this._nestingLevelCounts[n]=(this._nestingLevelCounts[n]||0)+1)}toIndentRanges(){if(this._length<=this._foldingRangesLimit){let e=new Uint32Array(this._length),t=new Uint32Array(this._length);for(let i=0;i<this._length;i++)e[i]=this._startIndexes[i],t[i]=this._endIndexes[i];return new v(e,t,this._types)}{let e=0,t=this._nestingLevelCounts.length;for(let i=0;i<this._nestingLevelCounts.length;i++){let n=this._nestingLevelCounts[i];if(n){if(n+e>this._foldingRangesLimit){t=i;break}e+=n}}let i=new Uint32Array(this._foldingRangesLimit),n=new Uint32Array(this._foldingRangesLimit),o=[];for(let s=0,r=0;s<this._length;s++){let a=this._nestingLevels[s];(a<t||a===t&&e++<this._foldingRangesLimit)&&(i[r]=this._startIndexes[s],n[r]=this._endIndexes[s],o[r]=this._types[s],r++)}return new v(i,n,o)}}}function R(e,t){let i,n=e.sort(((e,t)=>{let i=e.start-t.start;return 0===i&&(i=e.rank-t.rank),i})),o=new P(t),s=[];for(let e of n)if(i){if(e.start>i.start)if(e.end<=i.end)s.push(i),i=e,o.add(e.start,e.end,e.kind&&e.kind.value,s.length);else{if(e.start>i.end){do{i=s.pop()}while(i&&e.start>i.end);i&&s.push(i),i=e}o.add(e.start,e.end,e.kind&&e.kind.value,s.length)}}else i=e,o.add(e.start,e.end,e.kind&&e.kind.value,s.length);return o.toIndentRanges()}const F="init";class B{constructor(e,t,i,n){if(this.editorModel=e,this.id=F,t.length){let o=t=>({range:{startLineNumber:t.startLineNumber,startColumn:0,endLineNumber:t.endLineNumber,endColumn:e.getLineLength(t.endLineNumber)},options:{description:"folding-initializing-range-provider",stickiness:1}});this.decorationIds=e.deltaDecorations([],t.map(o)),this.timeout=setTimeout(i,n)}}dispose(){this.decorationIds&&(this.editorModel.deltaDecorations(this.decorationIds,[]),this.decorationIds=void 0),"number"==typeof this.timeout&&(clearTimeout(this.timeout),this.timeout=void 0)}compute(e){let t=[];if(this.decorationIds)for(let e of this.decorationIds){let i=this.editorModel.getDecorationRange(e);i&&t.push({start:i.startLineNumber,end:i.endLineNumber,rank:1})}return Promise.resolve(R(t,Number.MAX_VALUE))}}var V=i(63580),W=i(38819),H=i(73910),z=i(97781),j=i(73046),U=i(59554);const $=(0,U.q5)("folding-expanded",j.lA.chevronDown,(0,V.N)("foldingExpandedIcon","Icon for expanded ranges in the editor glyph margin.")),K=(0,U.q5)("folding-collapsed",j.lA.chevronRight,(0,V.N)("foldingCollapsedIcon","Icon for collapsed ranges in the editor glyph margin."));class q{constructor(e){this.editor=e,this.autoHideFoldingControls=!0,this.showFoldingHighlights=!0}getDecorationOption(e,t){return t?q.HIDDEN_RANGE_DECORATION:e?this.showFoldingHighlights?q.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION:q.COLLAPSED_VISUAL_DECORATION:this.autoHideFoldingControls?q.EXPANDED_AUTO_HIDE_VISUAL_DECORATION:q.EXPANDED_VISUAL_DECORATION}deltaDecorations(e,t){return this.editor.deltaDecorations(e,t)}changeDecorations(e){return this.editor.changeDecorations(e)}}q.COLLAPSED_VISUAL_DECORATION=I.qx.register({description:"folding-collapsed-visual-decoration",stickiness:1,afterContentClassName:"inline-folded",isWholeLine:!0,firstLineDecorationClassName:z.kS.asClassName(K)}),q.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION=I.qx.register({description:"folding-collapsed-highlighted-visual-decoration",stickiness:1,afterContentClassName:"inline-folded",className:"folded-background",isWholeLine:!0,firstLineDecorationClassName:z.kS.asClassName(K)}),q.EXPANDED_AUTO_HIDE_VISUAL_DECORATION=I.qx.register({description:"folding-expanded-auto-hide-visual-decoration",stickiness:1,isWholeLine:!0,firstLineDecorationClassName:z.kS.asClassName($)}),q.EXPANDED_VISUAL_DECORATION=I.qx.register({description:"folding-expanded-visual-decoration",stickiness:1,isWholeLine:!0,firstLineDecorationClassName:"alwaysShowFoldIcons "+z.kS.asClassName($)}),q.HIDDEN_RANGE_DECORATION=I.qx.register({description:"folding-hidden-range-decoration",stickiness:1});var Z=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},G=function(e,t){return function(i,n){t(i,n,e)}};const Y=new W.uy("foldingEnabled",!1);let Q=class e extends r.JT{constructor(e,t){super(),this.contextKeyService=t,this.localToDispose=this._register(new r.SL),this.editor=e;const i=this.editor.getOptions();this._isEnabled=i.get(37),this._useFoldingProviders="indentation"!==i.get(38),this._unfoldOnClickAfterEndOfLine=i.get(41),this._restoringViewState=!1,this._currentModelHasFoldedImports=!1,this._foldingImportsByDefault=i.get(40),this.foldingModel=null,this.hiddenRangeModel=null,this.rangeProvider=null,this.foldingRegionPromise=null,this.foldingStateMemento=null,this.foldingModelPromise=null,this.updateScheduler=null,this.cursorChangedScheduler=null,this.mouseDownInfo=null,this.foldingDecorationProvider=new q(e),this.foldingDecorationProvider.autoHideFoldingControls="mouseover"===i.get(98),this.foldingDecorationProvider.showFoldingHighlights=i.get(39),this.foldingEnabled=Y.bindTo(this.contextKeyService),this.foldingEnabled.set(this._isEnabled),this._register(this.editor.onDidChangeModel((()=>this.onModelChanged()))),this._register(this.editor.onDidChangeConfiguration((e=>{if(e.hasChanged(37)&&(this._isEnabled=this.editor.getOptions().get(37),this.foldingEnabled.set(this._isEnabled),this.onModelChanged()),e.hasChanged(98)||e.hasChanged(39)){const e=this.editor.getOptions();this.foldingDecorationProvider.autoHideFoldingControls="mouseover"===e.get(98),this.foldingDecorationProvider.showFoldingHighlights=e.get(39),this.onModelContentChanged()}e.hasChanged(38)&&(this._useFoldingProviders="indentation"!==this.editor.getOptions().get(38),this.onFoldingStrategyChanged()),e.hasChanged(41)&&(this._unfoldOnClickAfterEndOfLine=this.editor.getOptions().get(41)),e.hasChanged(40)&&(this._foldingImportsByDefault=this.editor.getOptions().get(40))}))),this.onModelChanged()}static get(t){return t.getContribution(e.ID)}saveViewState(){let e=this.editor.getModel();if(!e||!this._isEnabled||e.isTooLargeForTokenization())return{};if(this.foldingModel){let t=this.foldingModel.isInitialized?this.foldingModel.getMemento():this.hiddenRangeModel.getMemento(),i=this.rangeProvider?this.rangeProvider.id:void 0;return{collapsedRegions:t,lineCount:e.getLineCount(),provider:i,foldedImports:this._currentModelHasFoldedImports}}}restoreViewState(e){let t=this.editor.getModel();if(!t||!this._isEnabled||t.isTooLargeForTokenization()||!this.hiddenRangeModel)return;if(!e||e.lineCount!==t.getLineCount())return;if(this._currentModelHasFoldedImports=!!e.foldedImports,!e.collapsedRegions)return;e.provider!==A&&e.provider!==F||(this.foldingStateMemento=e);const i=e.collapsedRegions;if(this.hiddenRangeModel.applyMemento(i)){const e=this.getFoldingModel();e&&e.then((e=>{if(e){this._restoringViewState=!0;try{e.applyMemento(i)}finally{this._restoringViewState=!1}}})).then(void 0,o.dL)}}onModelChanged(){this.localToDispose.clear();let e=this.editor.getModel();this._isEnabled&&e&&!e.isTooLargeForTokenization()&&(this._currentModelHasFoldedImports=!1,this.foldingModel=new b(e,this.foldingDecorationProvider),this.localToDispose.add(this.foldingModel),this.hiddenRangeModel=new N(this.foldingModel),this.localToDispose.add(this.hiddenRangeModel),this.localToDispose.add(this.hiddenRangeModel.onDidChange((e=>this.onHiddenRangesChanges(e)))),this.updateScheduler=new n.vp(200),this.cursorChangedScheduler=new n.pY((()=>this.revealCursor()),200),this.localToDispose.add(this.cursorChangedScheduler),this.localToDispose.add(u.aC.onDidChange((()=>this.onFoldingStrategyChanged()))),this.localToDispose.add(this.editor.onDidChangeModelLanguageConfiguration((()=>this.onFoldingStrategyChanged()))),this.localToDispose.add(this.editor.onDidChangeModelContent((()=>this.onModelContentChanged()))),this.localToDispose.add(this.editor.onDidChangeCursorPosition((()=>this.onCursorPositionChanged()))),this.localToDispose.add(this.editor.onMouseDown((e=>this.onEditorMouseDown(e)))),this.localToDispose.add(this.editor.onMouseUp((e=>this.onEditorMouseUp(e)))),this.localToDispose.add({dispose:()=>{this.foldingRegionPromise&&(this.foldingRegionPromise.cancel(),this.foldingRegionPromise=null),this.updateScheduler&&this.updateScheduler.cancel(),this.updateScheduler=null,this.foldingModel=null,this.foldingModelPromise=null,this.hiddenRangeModel=null,this.cursorChangedScheduler=null,this.foldingStateMemento=null,this.rangeProvider&&this.rangeProvider.dispose(),this.rangeProvider=null}}),this.onModelContentChanged())}onFoldingStrategyChanged(){this.rangeProvider&&this.rangeProvider.dispose(),this.rangeProvider=null,this.onModelContentChanged()}getRangeProvider(e){if(this.rangeProvider)return this.rangeProvider;if(this.rangeProvider=new E(e),this._useFoldingProviders&&this.foldingModel){let t=u.aC.ordered(this.foldingModel.textModel);if(0===t.length&&this.foldingStateMemento&&this.foldingStateMemento.collapsedRegions){return this.rangeProvider=new B(e,this.foldingStateMemento.collapsedRegions,(()=>{this.foldingStateMemento=null,this.onFoldingStrategyChanged()}),3e4)}t.length>0&&(this.rangeProvider=new O(e,t,(()=>this.onModelContentChanged())))}return this.foldingStateMemento=null,this.rangeProvider}getFoldingModel(){return this.foldingModelPromise}onModelContentChanged(){this.updateScheduler&&(this.foldingRegionPromise&&(this.foldingRegionPromise.cancel(),this.foldingRegionPromise=null),this.foldingModelPromise=this.updateScheduler.trigger((()=>{const e=this.foldingModel;if(!e)return null;const t=this.getRangeProvider(e.textModel);let i=this.foldingRegionPromise=(0,n.PG)((e=>t.compute(e)));return i.then((t=>{if(t&&i===this.foldingRegionPromise){let i;if(this._foldingImportsByDefault&&!this._currentModelHasFoldedImports){const e=t.setCollapsedAllOfType(u.AD.Imports.value,!0);e&&(i=c.ZF.capture(this.editor),this._currentModelHasFoldedImports=e)}let n=this.editor.getSelections(),o=n?n.map((e=>e.startLineNumber)):[];e.update(t,o),i&&i.restore(this.editor)}return e}))})).then(void 0,(e=>((0,o.dL)(e),null))))}onHiddenRangesChanges(e){if(this.hiddenRangeModel&&e.length&&!this._restoringViewState){let e=this.editor.getSelections();e&&this.hiddenRangeModel.adjustSelections(e)&&this.editor.setSelections(e)}this.editor.setHiddenAreas(e)}onCursorPositionChanged(){this.hiddenRangeModel&&this.hiddenRangeModel.hasRanges()&&this.cursorChangedScheduler.schedule()}revealCursor(){const e=this.getFoldingModel();e&&e.then((e=>{if(e){let t=this.editor.getSelections();if(t&&t.length>0){let i=[];for(let n of t){let t=n.selectionStartLineNumber;this.hiddenRangeModel&&this.hiddenRangeModel.isHidden(t)&&i.push(...e.getAllRegionsAtLine(t,(e=>e.isCollapsed&&t>e.startLineNumber)))}i.length&&(e.toggleCollapseState(i),this.reveal(t[0].getPosition()))}}})).then(void 0,o.dL)}onEditorMouseDown(e){if(this.mouseDownInfo=null,!this.hiddenRangeModel||!e.target||!e.target.range)return;if(!e.event.leftButton&&!e.event.middleButton)return;const t=e.target.range;let i=!1;switch(e.target.type){case 4:const n=e.target.detail,o=e.target.element.offsetLeft;if(n.offsetX-o<5)return;i=!0;break;case 7:if(this._unfoldOnClickAfterEndOfLine&&this.hiddenRangeModel.hasRanges()){if(!e.target.detail.isAfterLines)break}return;case 6:if(this.hiddenRangeModel.hasRanges()){let e=this.editor.getModel();if(e&&t.startColumn===e.getLineMaxColumn(t.startLineNumber))break}return;default:return}this.mouseDownInfo={lineNumber:t.startLineNumber,iconClicked:i}}onEditorMouseUp(e){const t=this.getFoldingModel();if(!t||!this.mouseDownInfo||!e.target)return;let i=this.mouseDownInfo.lineNumber,n=this.mouseDownInfo.iconClicked,s=e.target.range;if(s&&s.startLineNumber===i){if(n){if(4!==e.target.type)return}else{let e=this.editor.getModel();if(!e||s.startColumn!==e.getLineMaxColumn(i))return}t.then((t=>{if(t){let o=t.getRegionAtLine(i);if(o&&o.startLineNumber===i){let s=o.isCollapsed;if(n||s){let n=[];if(e.event.altKey){let e=e=>!e.containedBy(o)&&!o.containedBy(e),i=t.getRegionsInside(null,e);for(const e of i)e.isCollapsed&&n.push(e);0===n.length&&(n=i)}else{let i=e.event.middleButton||e.event.shiftKey;if(i)for(const e of t.getRegionsInside(o))e.isCollapsed===s&&n.push(e);!s&&i&&0!==n.length||n.push(o)}t.toggleCollapseState(n),this.reveal({lineNumber:i,column:1})}}}})).then(void 0,o.dL)}}reveal(e){this.editor.revealPositionInCenterIfOutsideViewport(e,0)}};Q.ID="editor.contrib.folding",Q=Z([G(1,W.i6)],Q);class X extends d.R6{runEditorCommand(e,t,i){let n=Q.get(t);if(!n)return;let o=n.getFoldingModel();return o?(this.reportTelemetry(e,t),o.then((e=>{if(e){this.invoke(n,e,t,i);const o=t.getSelection();o&&n.reveal(o.getStartPosition())}}))):void 0}getSelectedLines(e){let t=e.getSelections();return t?t.map((e=>e.startLineNumber)):[]}getLineNumbers(e,t){return e&&e.selectionLines?e.selectionLines.map((e=>e+1)):this.getSelectedLines(t)}run(e,t){}}function J(e){if(!l.o8(e)){if(!l.Kn(e))return!1;const t=e;if(!l.o8(t.levels)&&!l.hj(t.levels))return!1;if(!l.o8(t.direction)&&!l.HD(t.direction))return!1;if(!(l.o8(t.selectionLines)||l.kJ(t.selectionLines)&&t.selectionLines.every(l.hj)))return!1}return!0}class ee extends X{getFoldingLevel(){return parseInt(this.id.substr(ee.ID_PREFIX.length))}invoke(e,t,i){!function(e,t,i,n){let o=e.getRegionsInside(null,((e,o)=>o===t&&e.isCollapsed!==i&&!n.some((t=>e.containsLine(t)))));e.toggleCollapseState(o)}(t,this.getFoldingLevel(),!0,this.getSelectedLines(i))}}ee.ID_PREFIX="editor.foldLevel",ee.ID=e=>ee.ID_PREFIX+e;(0,d._K)(Q.ID,Q),(0,d.Qr)(class extends X{constructor(){super({id:"editor.unfold",label:V.N("unfoldAction.label","Unfold"),alias:"Unfold",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:3161,mac:{primary:2649},weight:100},description:{description:"Unfold the content in the editor",args:[{name:"Unfold editor argument",description:"Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t* 'levels': Number of levels to unfold. If not set, defaults to 1.\n\t\t\t\t\t\t* 'direction': If 'up', unfold given number of levels up otherwise unfolds down.\n\t\t\t\t\t\t* 'selectionLines': The start lines (0-based) of the editor selections to apply the unfold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t",constraint:J,schema:{type:"object",properties:{levels:{type:"number",default:1},direction:{type:"string",enum:["up","down"],default:"down"},selectionLines:{type:"array",items:{type:"number"}}}}}]}})}invoke(e,t,i,n){let o=n&&n.levels||1,s=this.getLineNumbers(n,i);n&&"up"===n.direction?y(t,!1,o,s):w(t,!1,o,s)}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.unfoldRecursively",label:V.N("unFoldRecursivelyAction.label","Unfold Recursively"),alias:"Unfold Recursively",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2137),weight:100}})}invoke(e,t,i,n){w(t,!1,Number.MAX_VALUE,this.getSelectedLines(i))}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.fold",label:V.N("foldAction.label","Fold"),alias:"Fold",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:3159,mac:{primary:2647},weight:100},description:{description:"Fold the content in the editor",args:[{name:"Fold editor argument",description:"Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t\t* 'levels': Number of levels to fold.\n\t\t\t\t\t\t\t* 'direction': If 'up', folds given number of levels up otherwise folds down.\n\t\t\t\t\t\t\t* 'selectionLines': The start lines (0-based) of the editor selections to apply the fold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t\tIf no levels or direction is set, folds the region at the locations or if already collapsed, the first uncollapsed parent instead.\n\t\t\t\t\t\t",constraint:J,schema:{type:"object",properties:{levels:{type:"number"},direction:{type:"string",enum:["up","down"]},selectionLines:{type:"array",items:{type:"number"}}}}}]}})}invoke(e,t,i,n){let o=this.getLineNumbers(n,i);const s=n&&n.levels,r=n&&n.direction;"number"!=typeof s&&"string"!=typeof r?function(e,t,i){let n=[];for(let o of i){let i=e.getAllRegionsAtLine(o,(e=>e.isCollapsed!==t));i.length>0&&n.push(i[0])}e.toggleCollapseState(n)}(t,!0,o):"up"===r?y(t,!0,s||1,o):w(t,!0,s||1,o)}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.foldRecursively",label:V.N("foldRecursivelyAction.label","Fold Recursively"),alias:"Fold Recursively",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2135),weight:100}})}invoke(e,t,i){let n=this.getSelectedLines(i);w(t,!0,Number.MAX_VALUE,n)}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.foldAll",label:V.N("foldAllAction.label","Fold All"),alias:"Fold All",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2069),weight:100}})}invoke(e,t,i){w(t,!0)}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.unfoldAll",label:V.N("unfoldAllAction.label","Unfold All"),alias:"Unfold All",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2088),weight:100}})}invoke(e,t,i){w(t,!1)}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.foldAllBlockComments",label:V.N("foldAllBlockComments.label","Fold All Block Comments"),alias:"Fold All Block Comments",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2133),weight:100}})}invoke(e,t,i){if(t.regions.hasTypes())S(t,u.AD.Comment.value,!0);else{const e=i.getModel();if(!e)return;const n=g.zu.getComments(e.getLanguageId());if(n&&n.blockCommentStartToken){x(t,new RegExp("^\\s*"+(0,a.ec)(n.blockCommentStartToken)),!0)}}}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.foldAllMarkerRegions",label:V.N("foldAllMarkerRegions.label","Fold All Regions"),alias:"Fold All Regions",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2077),weight:100}})}invoke(e,t,i){if(t.regions.hasTypes())S(t,u.AD.Region.value,!0);else{const e=i.getModel();if(!e)return;const n=g.zu.getFoldingRules(e.getLanguageId());if(n&&n.markers&&n.markers.start){x(t,new RegExp(n.markers.start),!0)}}}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.unfoldAllMarkerRegions",label:V.N("unfoldAllMarkerRegions.label","Unfold All Regions"),alias:"Unfold All Regions",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2078),weight:100}})}invoke(e,t,i){if(t.regions.hasTypes())S(t,u.AD.Region.value,!1);else{const e=i.getModel();if(!e)return;const n=g.zu.getFoldingRules(e.getLanguageId());if(n&&n.markers&&n.markers.start){x(t,new RegExp(n.markers.start),!1)}}}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.foldAllExcept",label:V.N("foldAllExcept.label","Fold All Regions Except Selected"),alias:"Fold All Regions Except Selected",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2131),weight:100}})}invoke(e,t,i){C(t,!0,this.getSelectedLines(i))}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.unfoldAllExcept",label:V.N("unfoldAllExcept.label","Unfold All Regions Except Selected"),alias:"Unfold All Regions Except Selected",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2129),weight:100}})}invoke(e,t,i){C(t,!1,this.getSelectedLines(i))}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.toggleFold",label:V.N("toggleFoldAction.label","Toggle Fold"),alias:"Toggle Fold",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2090),weight:100}})}invoke(e,t,i){!function(e,t,i){let n=[];for(let o of i){let i=e.getRegionAtLine(o);if(i){const o=!i.isCollapsed;if(n.push(i),t>1){let s=e.getRegionsInside(i,((e,i)=>e.isCollapsed!==o&&i<t));n.push(...s)}}}e.toggleCollapseState(n)}(t,1,this.getSelectedLines(i))}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.gotoParentFold",label:V.N("gotoParentFold.label","Go to Parent Fold"),alias:"Go to Parent Fold",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,weight:100}})}invoke(e,t,i){let n=this.getSelectedLines(i);if(n.length>0){let e=function(e,t){let i=null,n=t.getRegionAtLine(e);if(null!==n&&(i=n.startLineNumber,e===i)){let e=n.parentIndex;i=-1!==e?t.regions.getStartLineNumber(e):null}return i}(n[0],t);null!==e&&i.setSelection({startLineNumber:e,startColumn:1,endLineNumber:e,endColumn:1})}}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.gotoPreviousFold",label:V.N("gotoPreviousFold.label","Go to Previous Folding Range"),alias:"Go to Previous Folding Range",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,weight:100}})}invoke(e,t,i){let n=this.getSelectedLines(i);if(n.length>0){let e=function(e,t){let i=t.getRegionAtLine(e);if(null!==i&&i.startLineNumber===e){if(e!==i.startLineNumber)return i.startLineNumber;{let e=i.parentIndex,n=0;for(-1!==e&&(n=t.regions.getStartLineNumber(i.parentIndex));null!==i;){if(!(i.regionIndex>0))return null;if(i=t.regions.toRegion(i.regionIndex-1),i.startLineNumber<=n)return null;if(i.parentIndex===e)return i.startLineNumber}}}else if(t.regions.length>0)for(i=t.regions.toRegion(t.regions.length-1);null!==i;){if(i.startLineNumber<e)return i.startLineNumber;i=i.regionIndex>0?t.regions.toRegion(i.regionIndex-1):null}return null}(n[0],t);null!==e&&i.setSelection({startLineNumber:e,startColumn:1,endLineNumber:e,endColumn:1})}}}),(0,d.Qr)(class extends X{constructor(){super({id:"editor.gotoNextFold",label:V.N("gotoNextFold.label","Go to Next Folding Range"),alias:"Go to Next Folding Range",precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,weight:100}})}invoke(e,t,i){let n=this.getSelectedLines(i);if(n.length>0){let e=function(e,t){let i=t.getRegionAtLine(e);if(null!==i&&i.startLineNumber===e){let e=i.parentIndex,n=0;if(-1!==e)n=t.regions.getEndLineNumber(i.parentIndex);else{if(0===t.regions.length)return null;n=t.regions.getEndLineNumber(t.regions.length-1)}for(;null!==i;){if(!(i.regionIndex<t.regions.length))return null;if(i=t.regions.toRegion(i.regionIndex+1),i.startLineNumber>=n)return null;if(i.parentIndex===e)return i.startLineNumber}}else if(t.regions.length>0)for(i=t.regions.toRegion(0);null!==i;){if(i.startLineNumber>e)return i.startLineNumber;i=i.regionIndex<t.regions.length?t.regions.toRegion(i.regionIndex+1):null}return null}(n[0],t);null!==e&&i.setSelection({startLineNumber:e,startColumn:1,endLineNumber:e,endColumn:1})}}});for(let e=1;e<=7;e++)(0,d.QG)(new ee({id:ee.ID(e),label:V.N("foldLevelAction.label","Fold Level {0}",e),alias:`Fold Level ${e}`,precondition:Y,kbOpts:{kbExpr:h.u.editorTextFocus,primary:(0,s.gx)(2089,2048|21+e),weight:100}}));const te=(0,H.P6)("editor.foldBackground",{light:(0,H.Zn)(H.hE,.3),dark:(0,H.Zn)(H.hE,.3),hc:null},V.N("foldBackgroundBackground","Background color behind folded ranges. The color must not be opaque so as not to hide underlying decorations."),!0),ie=(0,H.P6)("editorGutter.foldingControlForeground",{dark:H.XZ,light:H.XZ,hc:H.XZ},V.N("editorGutter.foldingControlForeground","Color of the folding control in the editor gutter."));(0,z.Ic)(((e,t)=>{const i=e.getColor(te);i&&t.addRule(`.monaco-editor .folded-background { background-color: ${i}; }`);const n=e.getColor(ie);n&&t.addRule(`\n\t\t.monaco-editor .cldr${z.kS.asCSSSelector($)},\n\t\t.monaco-editor .cldr${z.kS.asCSSSelector(K)} {\n\t\t\tcolor: ${n} !important;\n\t\t}\n\t\t`)}))},23111:(e,t,i)=>{"use strict";i.r(t);var n=i(16830),o=i(82334),s=i(63580);class r extends n.R6{constructor(){super({id:"editor.action.fontZoomIn",label:s.N("EditorFontZoomIn.label","Editor Font Zoom In"),alias:"Editor Font Zoom In",precondition:void 0})}run(e,t){o.C.setZoomLevel(o.C.getZoomLevel()+1)}}class a extends n.R6{constructor(){super({id:"editor.action.fontZoomOut",label:s.N("EditorFontZoomOut.label","Editor Font Zoom Out"),alias:"Editor Font Zoom Out",precondition:void 0})}run(e,t){o.C.setZoomLevel(o.C.getZoomLevel()-1)}}class l extends n.R6{constructor(){super({id:"editor.action.fontZoomReset",label:s.N("EditorFontZoomReset.label","Editor Font Zoom Reset"),alias:"Editor Font Zoom Reset",precondition:void 0})}run(e,t){o.C.setZoomLevel(0)}}(0,n.Qr)(r),(0,n.Qr)(a),(0,n.Qr)(l)},23606:(e,t,i)=>{"use strict";i.d(t,{xC:()=>N,Zg:()=>k,x$:()=>D,Qq:()=>E,Qs:()=>M});var n=i(85152),o=i(9488),s=i(71050),r=i(17301),a=i(53725),l=i(91741),c=i(98401),d=i(70666),h=i(39925),u=i(65520),g=i(50187),p=i(24314),f=i(3860),m=i(44101),v=i(90469),_=i(88216),b=i(69939),w=i(63580),y=i(94565);class C{constructor(e){this.value=e,this._lower=e.toLowerCase()}static toKey(e){return"string"==typeof e?e.toLowerCase():e._lower}}var x=i(72065),S=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function k(e){if(!(e=e.filter((e=>e.range))).length)return;let{range:t}=e[0];for(let i=1;i<e.length;i++)t=p.e.plusRange(t,e[i].range);const{startLineNumber:i,endLineNumber:o}=t;i===o?1===e.length?(0,n.Z9)(w.N("hint11","Made 1 formatting edit on line {0}",i)):(0,n.Z9)(w.N("hintn1","Made {0} formatting edits on line {1}",e.length,i)):1===e.length?(0,n.Z9)(w.N("hint1n","Made 1 formatting edit between lines {0} and {1}",i,o)):(0,n.Z9)(w.N("hintnn","Made {0} formatting edits between lines {1} and {2}",e.length,i,o))}function L(e){const t=[],i=new Set,n=m.Az.ordered(e);for(const e of n)t.push(e),e.extensionId&&i.add(C.toKey(e.extensionId));const o=m.vN.ordered(e);for(const e of o){if(e.extensionId){if(i.has(C.toKey(e.extensionId)))continue;i.add(C.toKey(e.extensionId))}t.push({displayName:e.displayName,extensionId:e.extensionId,provideDocumentFormattingEdits:(t,i,n)=>e.provideDocumentRangeFormattingEdits(t,t.getFullModelRange(),i,n)})}return t}class N{static setFormatterSelector(e){return{dispose:N._selectors.unshift(e)}}static select(e,t,i){return S(this,void 0,void 0,(function*(){if(0===e.length)return;const n=a.$.first(N._selectors);return n?yield n(e,t,i):void 0}))}}function D(e,t,i,n,o,s){return S(this,void 0,void 0,(function*(){const r=e.get(x.TG),a=(0,u.CL)(t)?t.getModel():t,l=m.vN.ordered(a),c=yield N.select(l,a,n);c&&(o.report(c),yield r.invokeFunction(I,c,t,i,s))}))}function I(e,t,i,n,s){return S(this,void 0,void 0,(function*(){const r=e.get(v.p);let a,l;(0,u.CL)(i)?(a=i.getModel(),l=new h.Dl(i,5,void 0,s)):(a=i,l=new h.YQ(i,s));let c=[],d=0;for(let e of(0,o._2)(n).sort(p.e.compareRangesUsingStarts))d>0&&p.e.areIntersectingOrTouching(c[d-1],e)?c[d-1]=p.e.fromPositions(c[d-1].getStartPosition(),e.getEndPosition()):d=c.push(e);const g=e=>S(this,void 0,void 0,(function*(){return(yield t.provideDocumentRangeFormattingEdits(a,e,a.getFormattingOptions(),l.token))||[]})),m=(e,t)=>{if(!e.length||!t.length)return!1;const i=e.reduce(((e,t)=>p.e.plusRange(e,t.range)),e[0].range);if(!t.some((e=>p.e.intersectRanges(i,e.range))))return!1;for(let i of e)for(let e of t)if(p.e.intersectRanges(i.range,e.range))return!0;return!1},_=[],w=[];try{for(let e of c){if(l.token.isCancellationRequested)return!0;w.push(yield g(e))}for(let e=0;e<c.length;++e)for(let t=e+1;t<c.length;++t){if(l.token.isCancellationRequested)return!0;if(m(w[e],w[t])){const i=p.e.plusRange(c[e],c[t]),n=yield g(i);c.splice(t,1),c.splice(e,1),c.push(i),w.splice(t,1),w.splice(e,1),w.push(n),e=0,t=0}}for(let e of w){if(l.token.isCancellationRequested)return!0;const t=yield r.computeMoreMinimalEdits(a.uri,e);t&&_.push(...t)}}finally{l.dispose()}if(0===_.length)return!1;if((0,u.CL)(i))b.V.execute(i,_,!0),k(_),i.revealPositionInCenterIfOutsideViewport(i.getPosition(),1);else{const[{range:e}]=_,t=new f.Y(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn);a.pushEditOperations([t],_.map((e=>({text:e.text,range:p.e.lift(e.range),forceMoveMarkers:!0}))),(e=>{for(const{range:i}of e)if(p.e.areIntersectingOrTouching(i,t))return[new f.Y(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn)];return null}))}return!0}))}function E(e,t,i,n,o){return S(this,void 0,void 0,(function*(){const s=e.get(x.TG),r=(0,u.CL)(t)?t.getModel():t,a=L(r),l=yield N.select(a,r,i);l&&(n.report(l),yield s.invokeFunction(T,l,t,i,o))}))}function T(e,t,i,n,o){return S(this,void 0,void 0,(function*(){const s=e.get(v.p);let r,a,l;(0,u.CL)(i)?(r=i.getModel(),a=new h.Dl(i,5,void 0,o)):(r=i,a=new h.YQ(i,o));try{const e=yield t.provideDocumentFormattingEdits(r,r.getFormattingOptions(),a.token);if(l=yield s.computeMoreMinimalEdits(r.uri,e),a.token.isCancellationRequested)return!0}finally{a.dispose()}if(!l||0===l.length)return!1;if((0,u.CL)(i))b.V.execute(i,l,2!==n),2!==n&&(k(l),i.revealPositionInCenterIfOutsideViewport(i.getPosition(),1));else{const[{range:e}]=l,t=new f.Y(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn);r.pushEditOperations([t],l.map((e=>({text:e.text,range:p.e.lift(e.range),forceMoveMarkers:!0}))),(e=>{for(const{range:i}of e)if(p.e.areIntersectingOrTouching(i,t))return[new f.Y(i.startLineNumber,i.startColumn,i.endLineNumber,i.endColumn)];return null}))}return!0}))}function M(e,t,i,n,o){const a=m.ln.ordered(t);return 0===a.length||a[0].autoFormatTriggerCharacters.indexOf(n)<0?Promise.resolve(void 0):Promise.resolve(a[0].provideOnTypeFormattingEdits(t,i,n,o,s.T.None)).catch(r.Cp).then((i=>e.computeMoreMinimalEdits(t.uri,i)))}N._selectors=new l.S,y.P.registerCommand("_executeFormatRangeProvider",(function(e,...t){return S(this,void 0,void 0,(function*(){const[i,n,a]=t;(0,c.p_)(d.o.isUri(i)),(0,c.p_)(p.e.isIRange(n));const l=e.get(_.S),h=e.get(v.p),u=yield l.createModelReference(i);try{return function(e,t,i,n,s){return S(this,void 0,void 0,(function*(){const a=m.vN.ordered(t);for(const l of a){let a=yield Promise.resolve(l.provideDocumentRangeFormattingEdits(t,i,n,s)).catch(r.Cp);if((0,o.Of)(a))return yield e.computeMoreMinimalEdits(t.uri,a)}}))}(h,u.object.textEditorModel,p.e.lift(n),a,s.T.None)}finally{u.dispose()}}))})),y.P.registerCommand("_executeFormatDocumentProvider",(function(e,...t){return S(this,void 0,void 0,(function*(){const[i,n]=t;(0,c.p_)(d.o.isUri(i));const a=e.get(_.S),l=e.get(v.p),h=yield a.createModelReference(i);try{return function(e,t,i,n){return S(this,void 0,void 0,(function*(){const s=L(t);for(const a of s){let s=yield Promise.resolve(a.provideDocumentFormattingEdits(t,i,n)).catch(r.Cp);if((0,o.Of)(s))return yield e.computeMoreMinimalEdits(t.uri,s)}}))}(l,h.object.textEditorModel,n,s.T.None)}finally{h.dispose()}}))})),y.P.registerCommand("_executeFormatOnTypeProvider",(function(e,...t){return S(this,void 0,void 0,(function*(){const[i,n,o,s]=t;(0,c.p_)(d.o.isUri(i)),(0,c.p_)(g.L.isIPosition(n)),(0,c.p_)("string"==typeof o);const r=e.get(_.S),a=e.get(v.p),l=yield r.createModelReference(i);try{return M(a,l.object.textEditorModel,g.L.lift(n),o,s)}finally{l.dispose()}}))}))},44818:(e,t,i)=>{"use strict";i.r(t);var n=i(9488),o=i(71050),s=i(17301),r=i(22258),a=i(5976),l=i(16830),c=i(11640),d=i(44906),h=i(24314),u=i(29102),g=i(44101),p=i(90469),f=i(23606),m=i(69939),v=i(63580),_=i(94565),b=i(38819),w=i(72065),y=i(90535),C=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},x=function(e,t){return function(i,n){t(i,n,e)}},S=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let k=class{constructor(e,t){this._workerService=t,this._callOnDispose=new a.SL,this._callOnModel=new a.SL,this._editor=e,this._callOnDispose.add(e.onDidChangeConfiguration((()=>this._update()))),this._callOnDispose.add(e.onDidChangeModel((()=>this._update()))),this._callOnDispose.add(e.onDidChangeModelLanguage((()=>this._update()))),this._callOnDispose.add(g.ln.onDidChange(this._update,this))}dispose(){this._callOnDispose.dispose(),this._callOnModel.dispose()}_update(){if(this._callOnModel.clear(),!this._editor.getOption(48))return;if(!this._editor.hasModel())return;const e=this._editor.getModel(),[t]=g.ln.ordered(e);if(!t||!t.autoFormatTriggerCharacters)return;let i=new d.q;for(let e of t.autoFormatTriggerCharacters)i.add(e.charCodeAt(0));this._callOnModel.add(this._editor.onDidType((e=>{let t=e.charCodeAt(e.length-1);i.has(t)&&this._trigger(String.fromCharCode(t))})))}_trigger(e){if(!this._editor.hasModel())return;if(this._editor.getSelections().length>1||!this._editor.getSelection().isEmpty())return;const t=this._editor.getModel(),i=this._editor.getPosition();let o=!1;const s=this._editor.onDidChangeModelContent((e=>{if(e.isFlush)return o=!0,void s.dispose();for(let t=0,n=e.changes.length;t<n;t++){if(e.changes[t].range.endLineNumber<=i.lineNumber)return o=!0,void s.dispose()}}));(0,f.Qs)(this._workerService,t,i,e,t.getFormattingOptions()).then((e=>{s.dispose(),o||(0,n.Of)(e)&&(m.V.execute(this._editor,e,!0),(0,f.Zg)(e))}),(e=>{throw s.dispose(),e}))}};k.ID="editor.contrib.autoFormat",k=C([x(1,p.p)],k);let L=class{constructor(e,t){this.editor=e,this._instantiationService=t,this._callOnDispose=new a.SL,this._callOnModel=new a.SL,this._callOnDispose.add(e.onDidChangeConfiguration((()=>this._update()))),this._callOnDispose.add(e.onDidChangeModel((()=>this._update()))),this._callOnDispose.add(e.onDidChangeModelLanguage((()=>this._update()))),this._callOnDispose.add(g.vN.onDidChange(this._update,this))}dispose(){this._callOnDispose.dispose(),this._callOnModel.dispose()}_update(){this._callOnModel.clear(),this.editor.getOption(47)&&this.editor.hasModel()&&g.vN.has(this.editor.getModel())&&this._callOnModel.add(this.editor.onDidPaste((({range:e})=>this._trigger(e))))}_trigger(e){this.editor.hasModel()&&(this.editor.getSelections().length>1||this._instantiationService.invokeFunction(f.x$,this.editor,e,2,y.E.None,o.T.None).catch(s.dL))}};L.ID="editor.contrib.formatOnPaste",L=C([x(1,w.TG)],L);class N extends l.R6{constructor(){super({id:"editor.action.formatDocument",label:v.N("formatDocument.label","Format Document"),alias:"Format Document",precondition:b.Ao.and(u.u.notInCompositeEditor,u.u.writable,u.u.hasDocumentFormattingProvider),kbOpts:{kbExpr:u.u.editorTextFocus,primary:1572,linux:{primary:3111},weight:100},contextMenuOpts:{group:"1_modification",order:1.3}})}run(e,t){return S(this,void 0,void 0,(function*(){if(t.hasModel()){const i=e.get(w.TG),n=e.get(y.e);yield n.showWhile(i.invokeFunction(f.Qq,t,1,y.E.None,o.T.None),250)}}))}}class D extends l.R6{constructor(){super({id:"editor.action.formatSelection",label:v.N("formatSelection.label","Format Selection"),alias:"Format Selection",precondition:b.Ao.and(u.u.writable,u.u.hasDocumentSelectionFormattingProvider),kbOpts:{kbExpr:u.u.editorTextFocus,primary:(0,r.gx)(2089,2084),weight:100},contextMenuOpts:{when:u.u.hasNonEmptySelection,group:"1_modification",order:1.31}})}run(e,t){return S(this,void 0,void 0,(function*(){if(!t.hasModel())return;const i=e.get(w.TG),n=t.getModel(),s=t.getSelections().map((e=>e.isEmpty()?new h.e(e.startLineNumber,1,e.startLineNumber,n.getLineMaxColumn(e.startLineNumber)):e)),r=e.get(y.e);yield r.showWhile(i.invokeFunction(f.x$,t,s,1,y.E.None,o.T.None),250)}))}}(0,l._K)(k.ID,k),(0,l._K)(L.ID,L),(0,l.Qr)(N),(0,l.Qr)(D),_.P.registerCommand("editor.action.format",(e=>S(void 0,void 0,void 0,(function*(){const t=e.get(c.$).getFocusedCodeEditor();if(!t||!t.hasModel())return;const i=e.get(_.H);t.getSelection().isEmpty()?yield i.executeCommand("editor.action.formatDocument"):yield i.executeCommand("editor.action.formatSelection")}))))},69939:(e,t,i)=>{"use strict";i.d(t,{V:()=>s});var n=i(69386),o=i(24314);class s{static _handleEolEdits(e,t){let i,n=[];for(let e of t)"number"==typeof e.eol&&(i=e.eol),e.range&&"string"==typeof e.text&&n.push(e);return"number"==typeof i&&e.hasModel()&&e.getModel().pushEOL(i),n}static _isFullModelReplaceEdit(e,t){if(!e.hasModel())return!1;const i=e.getModel(),n=i.validateRange(t.range);return i.getFullModelRange().equalsRange(n)}static execute(e,t,i){i&&e.pushUndoStop();const r=s._handleEolEdits(e,t);1===r.length&&s._isFullModelReplaceEdit(e,r[0])?e.executeEdits("formatEditsCommand",r.map((e=>n.h.replace(o.e.lift(e.range),e.text)))):e.executeEdits("formatEditsCommand",r.map((e=>n.h.replaceMove(o.e.lift(e.range),e.text)))),i&&e.pushUndoStop()}}},42698:(e,t,i)=>{"use strict";i.r(t),i.d(t,{MarkerController:()=>oe,NextMarkerAction:()=>re});var n=i(73046),o=i(5976),s=i(16830),r=i(11640),a=i(50187),l=i(24314),c=i(29102),d=i(9488),h=i(4669),u=i(91741),g=i(97295),p=i(70666),f=i(65026),m=i(72065),v=i(98674),_=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},b=function(e,t){return function(i,n){t(i,n,e)}};class w{constructor(e,t,i){this.marker=e,this.index=t,this.total=i}}let y=class e{constructor(t,i){this._markerService=i,this._onDidChange=new h.Q5,this.onDidChange=this._onDidChange.event,this._dispoables=new o.SL,this._markers=[],this._nextIdx=-1,p.o.isUri(t)?this._resourceFilter=e=>e.toString()===t.toString():t&&(this._resourceFilter=t);const n=()=>{this._markers=this._markerService.read({resource:p.o.isUri(t)?t:void 0,severities:v.ZL.Error|v.ZL.Warning|v.ZL.Info}),"function"==typeof t&&(this._markers=this._markers.filter((e=>this._resourceFilter(e.resource)))),this._markers.sort(e._compareMarker)};n(),this._dispoables.add(i.onMarkerChanged((e=>{this._resourceFilter&&!e.some((e=>this._resourceFilter(e)))||(n(),this._nextIdx=-1,this._onDidChange.fire())})))}dispose(){this._dispoables.dispose(),this._onDidChange.dispose()}matches(e){return!this._resourceFilter&&!e||!(!this._resourceFilter||!e)&&this._resourceFilter(e)}get selected(){const e=this._markers[this._nextIdx];return e&&new w(e,this._nextIdx+1,this._markers.length)}_initIdx(e,t,i){let n=!1,o=this._markers.findIndex((t=>t.resource.toString()===e.uri.toString()));o<0&&(o=(0,d.ry)(this._markers,{resource:e.uri},((e,t)=>(0,g.qu)(e.resource.toString(),t.resource.toString()))),o<0&&(o=~o));for(let i=o;i<this._markers.length;i++){let o=l.e.lift(this._markers[i]);if(o.isEmpty()){const t=e.getWordAtPosition(o.getStartPosition());t&&(o=new l.e(o.startLineNumber,t.startColumn,o.startLineNumber,t.endColumn))}if(t&&(o.containsPosition(t)||t.isBeforeOrEqual(o.getStartPosition()))){this._nextIdx=i,n=!0;break}if(this._markers[i].resource.toString()!==e.uri.toString())break}n||(this._nextIdx=i?0:this._markers.length-1),this._nextIdx<0&&(this._nextIdx=this._markers.length-1)}resetIndex(){this._nextIdx=-1}move(e,t,i){if(0===this._markers.length)return!1;let n=this._nextIdx;return-1===this._nextIdx?this._initIdx(t,i,e):e?this._nextIdx=(this._nextIdx+1)%this._markers.length:e||(this._nextIdx=(this._nextIdx-1+this._markers.length)%this._markers.length),n!==this._nextIdx}find(e,t){let i=this._markers.findIndex((t=>t.resource.toString()===e.toString()));if(!(i<0))for(;i<this._markers.length;i++)if(l.e.containsPosition(this._markers[i],t))return new w(this._markers[i],i+1,this._markers.length)}static _compareMarker(e,t){let i=(0,g.qu)(e.resource.toString(),t.resource.toString());return 0===i&&(i=v.ZL.compare(e.severity,t.severity)),0===i&&(i=l.e.compareRangesUsingStarts(e,t)),i}};y=_([b(1,v.lT)],y);const C=(0,m.yh)("IMarkerNavigationService");let x=class{constructor(e){this._markerService=e,this._provider=new u.S}getMarkerList(e){for(let t of this._provider){const i=t.getMarkerList(e);if(i)return i}return new y(e,this._markerService)}};x=_([b(0,v.lT)],x),(0,f.z)(C,x,!0);var S,k=i(63580),L=i(84144),N=i(38819),D=i(59554),I=i(65321),E=i(9802),T=i(41264),M=i(68843),A=i(95935),O=(i(81367),i(22043)),P=i(58335),R=i(44349),F=i(50988),B=i(14603),V=i(73910),W=i(97781);!function(e){e.className=function(e){switch(e){case B.Z.Ignore:return"severity-ignore "+n.lA.info.classNames;case B.Z.Info:return n.lA.info.classNames;case B.Z.Warning:return n.lA.warning.classNames;case B.Z.Error:return n.lA.error.classNames;default:return""}}}(S||(S={})),(0,W.Ic)(((e,t)=>{const i=e.getColor(V.Jp);if(i){const e=n.lA.error.cssSelector;t.addRule(`\n\t\t\t.monaco-editor .zone-widget ${e},\n\t\t\t.markers-panel .marker-icon${e},\n\t\t\t.text-search-provider-messages .providerMessage ${e},\n\t\t\t.extensions-viewlet > .extensions ${e} {\n\t\t\t\tcolor: ${i};\n\t\t\t}\n\t\t`)}const o=e.getColor(V.BO);if(o){const e=n.lA.warning.cssSelector;t.addRule(`\n\t\t\t.monaco-editor .zone-widget ${e},\n\t\t\t.markers-panel .marker-icon${e},\n\t\t\t.extensions-viewlet > .extensions ${e},\n\t\t\t.extension-editor ${e},\n\t\t\t.text-search-provider-messages .providerMessage ${e},\n\t\t\t.preferences-editor ${e} {\n\t\t\t\tcolor: ${o};\n\t\t\t}\n\t\t`)}const s=e.getColor(V.OL);if(s){const e=n.lA.info.cssSelector;t.addRule(`\n\t\t\t.monaco-editor .zone-widget ${e},\n\t\t\t.markers-panel .marker-icon${e},\n\t\t\t.extensions-viewlet > .extensions ${e},\n\t\t\t.text-search-provider-messages .providerMessage ${e},\n\t\t\t.extension-editor ${e} {\n\t\t\t\tcolor: ${s};\n\t\t\t}\n\t\t`)}}));var H=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},z=function(e,t){return function(i,n){t(i,n,e)}};class j{constructor(e,t,i,n,s){this._openerService=n,this._labelService=s,this._lines=0,this._longestLineLength=0,this._relatedDiagnostics=new WeakMap,this._disposables=new o.SL,this._editor=t;const r=document.createElement("div");r.className="descriptioncontainer",this._messageBlock=document.createElement("div"),this._messageBlock.classList.add("message"),this._messageBlock.setAttribute("aria-live","assertive"),this._messageBlock.setAttribute("role","alert"),r.appendChild(this._messageBlock),this._relatedBlock=document.createElement("div"),r.appendChild(this._relatedBlock),this._disposables.add(I.mu(this._relatedBlock,"click",(e=>{e.preventDefault();const t=this._relatedDiagnostics.get(e.target);t&&i(t)}))),this._scrollable=new E.NB(r,{horizontal:1,vertical:1,useShadows:!1,horizontalScrollbarSize:3,verticalScrollbarSize:3}),e.appendChild(this._scrollable.getDomNode()),this._disposables.add(this._scrollable.onScroll((e=>{r.style.left=`-${e.scrollLeft}px`,r.style.top=`-${e.scrollTop}px`}))),this._disposables.add(this._scrollable)}dispose(){(0,o.B9)(this._disposables)}update(e){const{source:t,message:i,relatedInformation:n,code:o}=e;let s=((null==t?void 0:t.length)||0)+2;o&&(s+="string"==typeof o?o.length:o.value.length);const r=(0,g.uq)(i);this._lines=r.length,this._longestLineLength=0;for(const e of r)this._longestLineLength=Math.max(e.length+s,this._longestLineLength);I.PO(this._messageBlock),this._messageBlock.setAttribute("aria-label",this.getAriaLabel(e)),this._editor.applyFontInfo(this._messageBlock);let a=this._messageBlock;for(const e of r)a=document.createElement("div"),a.innerText=e,""===e&&(a.style.height=this._messageBlock.style.lineHeight),this._messageBlock.appendChild(a);if(t||o){const e=document.createElement("span");if(e.classList.add("details"),a.appendChild(e),t){const i=document.createElement("span");i.innerText=t,i.classList.add("source"),e.appendChild(i)}if(o)if("string"==typeof o){const t=document.createElement("span");t.innerText=`(${o})`,t.classList.add("code"),e.appendChild(t)}else{this._codeLink=I.$("a.code-link"),this._codeLink.setAttribute("href",`${o.target.toString()}`),this._codeLink.onclick=e=>{this._openerService.open(o.target,{allowCommands:!0}),e.preventDefault(),e.stopPropagation()};I.R3(this._codeLink,I.$("span")).innerText=o.value,e.appendChild(this._codeLink)}}if(I.PO(this._relatedBlock),this._editor.applyFontInfo(this._relatedBlock),(0,d.Of)(n)){const e=this._relatedBlock.appendChild(document.createElement("div"));e.style.paddingTop=`${Math.floor(.66*this._editor.getOption(58))}px`,this._lines+=1;for(const t of n){let i=document.createElement("div"),n=document.createElement("a");n.classList.add("filename"),n.innerText=`${(0,M.p)(t.resource)}(${t.startLineNumber}, ${t.startColumn}): `,n.title=this._labelService.getUriLabel(t.resource),this._relatedDiagnostics.set(n,t);let o=document.createElement("span");o.innerText=t.message,i.appendChild(n),i.appendChild(o),this._lines+=1,e.appendChild(i)}}const l=this._editor.getOption(43),c=Math.ceil(l.typicalFullwidthCharacterWidth*this._longestLineLength*.75),h=l.lineHeight*this._lines;this._scrollable.setScrollDimensions({scrollWidth:c,scrollHeight:h})}layout(e,t){this._scrollable.getDomNode().style.height=`${e}px`,this._scrollable.getDomNode().style.width=`${t}px`,this._scrollable.setScrollDimensions({width:t,height:e})}getHeightInLines(){return Math.min(17,this._lines)}getAriaLabel(e){let t="";switch(e.severity){case v.ZL.Error:t=k.N("é”™è¯¯","é”™è¯¯");break;case v.ZL.Warning:t=k.N("Warning","Warning");break;case v.ZL.Info:t=k.N("Info","Info");break;case v.ZL.Hint:t=k.N("Hint","Hint")}let i=k.N("marker aria","{0} at {1}. ",t,e.startLineNumber+":"+e.startColumn);const n=this._editor.getModel();if(n&&e.startLineNumber<=n.getLineCount()&&e.startLineNumber>=1){i=`${n.getLineContent(e.startLineNumber)}, ${i}`}return i}}let U=class e extends O.vk{constructor(e,t,i,n,s,r,a){super(e,{showArrow:!0,showFrame:!0,isAccessible:!0,frameWidth:1},s),this._themeService=t,this._openerService=i,this._menuService=n,this._contextKeyService=r,this._labelService=a,this._callOnDispose=new o.SL,this._onDidSelectRelatedInformation=new h.Q5,this.onDidSelectRelatedInformation=this._onDidSelectRelatedInformation.event,this._severity=v.ZL.Warning,this._backgroundColor=T.Il.white,this._applyTheme(t.getColorTheme()),this._callOnDispose.add(t.onDidColorThemeChange(this._applyTheme.bind(this))),this.create()}_applyTheme(e){this._backgroundColor=e.getColor(ee);let t=Z,i=G;this._severity===v.ZL.Warning?(t=Y,i=Q):this._severity===v.ZL.Info&&(t=X,i=J);const n=e.getColor(t),o=e.getColor(i);this.style({arrowColor:n,frameColor:n,headerBackgroundColor:o,primaryHeadingColor:e.getColor(O.IH),secondaryHeadingColor:e.getColor(O.R7)})}_applyStyles(){this._parentContainer&&(this._parentContainer.style.backgroundColor=this._backgroundColor?this._backgroundColor.toString():""),super._applyStyles()}dispose(){this._callOnDispose.dispose(),super.dispose()}_fillHead(t){super._fillHead(t),this._disposables.add(this._actionbarWidget.actionRunner.onBeforeRun((e=>this.editor.focus())));const i=[],n=this._menuService.createMenu(e.TitleMenu,this._contextKeyService);(0,P.vr)(n,void 0,i),this._actionbarWidget.push(i,{label:!1,icon:!0,index:0}),n.dispose()}_fillTitleIcon(e){this._icon=I.R3(e,I.$(""))}_fillBody(e){this._parentContainer=e,e.classList.add("marker-widget"),this._parentContainer.tabIndex=0,this._parentContainer.setAttribute("role","tooltip"),this._container=document.createElement("div"),e.appendChild(this._container),this._message=new j(this._container,this.editor,(e=>this._onDidSelectRelatedInformation.fire(e)),this._openerService,this._labelService),this._disposables.add(this._message)}show(){throw new Error("call showAtMarker")}showAtMarker(e,t,i){this._container.classList.remove("stale"),this._message.update(e),this._severity=e.severity,this._applyTheme(this._themeService.getColorTheme());let n=l.e.lift(e);const o=this.editor.getPosition();let s=o&&n.containsPosition(o)?o:n.getStartPosition();super.show(s,this.computeRequiredHeight());const r=this.editor.getModel();if(r){const e=i>1?k.N("problems","{0} of {1} problems",t,i):k.N("change","{0} of {1} problem",t,i);this.setTitle((0,A.EZ)(r.uri),e)}this._icon.className=`codicon ${S.className(v.ZL.toSeverity(this._severity))}`,this.editor.revealPositionNearTop(s,0),this.editor.focus()}updateMarker(e){this._container.classList.remove("stale"),this._message.update(e)}showStale(){this._container.classList.add("stale"),this._relayout()}_doLayoutBody(e,t){super._doLayoutBody(e,t),this._heightInPixel=e,this._message.layout(e,t),this._container.style.height=`${e}px`}_onWidth(e){this._message.layout(this._heightInPixel,e)}_relayout(){super._relayout(this.computeRequiredHeight())}computeRequiredHeight(){return 3+this._message.getHeightInLines()}};U.TitleMenu=new L.eH("gotoErrorTitleMenu"),U=H([z(1,W.XE),z(2,F.v4),z(3,L.co),z(4,m.TG),z(5,N.i6),z(6,R.e)],U);let $=(0,V.kw)(V.lX,V.b6),K=(0,V.kw)(V.uo,V.pW),q=(0,V.kw)(V.c6,V.T8);const Z=(0,V.P6)("editorMarkerNavigationError.background",{dark:$,light:$,hc:V.lR},k.N("editorMarkerNavigationError","Editor marker navigation widget error color.")),G=(0,V.P6)("editorMarkerNavigationError.headerBackground",{dark:(0,V.Zn)(Z,.1),light:(0,V.Zn)(Z,.1),hc:null},k.N("editorMarkerNavigationErrorHeaderBackground","Editor marker navigation widget error heading background.")),Y=(0,V.P6)("editorMarkerNavigationWarning.background",{dark:K,light:K,hc:V.lR},k.N("editorMarkerNavigationWarning","Editor marker navigation widget warning color.")),Q=(0,V.P6)("editorMarkerNavigationWarning.headerBackground",{dark:(0,V.Zn)(Y,.1),light:(0,V.Zn)(Y,.1),hc:"#0C141F"},k.N("editorMarkerNavigationWarningBackground","Editor marker navigation widget warning heading background.")),X=(0,V.P6)("editorMarkerNavigationInfo.background",{dark:q,light:q,hc:V.lR},k.N("editorMarkerNavigationInfo","Editor marker navigation widget info color.")),J=(0,V.P6)("editorMarkerNavigationInfo.headerBackground",{dark:(0,V.Zn)(X,.1),light:(0,V.Zn)(X,.1),hc:null},k.N("editorMarkerNavigationInfoHeaderBackground","Editor marker navigation widget info heading background.")),ee=(0,V.P6)("editorMarkerNavigation.background",{dark:V.cv,light:V.cv,hc:V.cv},k.N("editorMarkerNavigationBackground","Editor marker navigation widget background."));(0,W.Ic)(((e,t)=>{const i=e.getColor(V.ur);i&&t.addRule(`.monaco-editor .marker-widget a.code-link span { color: ${i}; }`);const n=e.getColor(V.sg);n&&t.addRule(`.monaco-editor .marker-widget a.code-link span:hover { color: ${n}; }`)}));var te=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},ie=function(e,t){return function(i,n){t(i,n,e)}},ne=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let oe=class e{constructor(e,t,i,n,s){this._markerNavigationService=t,this._contextKeyService=i,this._editorService=n,this._instantiationService=s,this._sessionDispoables=new o.SL,this._editor=e,this._widgetVisible=le.bindTo(this._contextKeyService)}static get(t){return t.getContribution(e.ID)}dispose(){this._cleanUp(),this._sessionDispoables.dispose()}_cleanUp(){this._widgetVisible.reset(),this._sessionDispoables.clear(),this._widget=void 0,this._model=void 0}_getOrCreateModel(e){if(this._model&&this._model.matches(e))return this._model;let t=!1;return this._model&&(t=!0,this._cleanUp()),this._model=this._markerNavigationService.getMarkerList(e),t&&this._model.move(!0,this._editor.getModel(),this._editor.getPosition()),this._widget=this._instantiationService.createInstance(U,this._editor),this._widget.onDidClose((()=>this.close()),this,this._sessionDispoables),this._widgetVisible.set(!0),this._sessionDispoables.add(this._model),this._sessionDispoables.add(this._widget),this._sessionDispoables.add(this._editor.onDidChangeCursorPosition((e=>{var t,i,n;(null===(t=this._model)||void 0===t?void 0:t.selected)&&l.e.containsPosition(null===(i=this._model)||void 0===i?void 0:i.selected.marker,e.position)||null===(n=this._model)||void 0===n||n.resetIndex()}))),this._sessionDispoables.add(this._model.onDidChange((()=>{if(!this._widget||!this._widget.position||!this._model)return;const e=this._model.find(this._editor.getModel().uri,this._widget.position);e?this._widget.updateMarker(e.marker):this._widget.showStale()}))),this._sessionDispoables.add(this._widget.onDidSelectRelatedInformation((e=>{this._editorService.openCodeEditor({resource:e.resource,options:{pinned:!0,revealIfOpened:!0,selection:l.e.lift(e).collapseToStart()}},this._editor),this.close(!1)}))),this._sessionDispoables.add(this._editor.onDidChangeModel((()=>this._cleanUp()))),this._model}close(e=!0){this._cleanUp(),e&&this._editor.focus()}showAtMarker(e){if(this._editor.hasModel()){const t=this._getOrCreateModel(this._editor.getModel().uri);t.resetIndex(),t.move(!0,this._editor.getModel(),new a.L(e.startLineNumber,e.startColumn)),t.selected&&this._widget.showAtMarker(t.selected.marker,t.selected.index,t.selected.total)}}nagivate(t,i){return ne(this,void 0,void 0,(function*(){if(this._editor.hasModel()){const n=this._getOrCreateModel(i?void 0:this._editor.getModel().uri);if(n.move(t,this._editor.getModel(),this._editor.getPosition()),!n.selected)return;if(n.selected.marker.resource.toString()!==this._editor.getModel().uri.toString()){this._cleanUp();const o=yield this._editorService.openCodeEditor({resource:n.selected.marker.resource,options:{pinned:!1,revealIfOpened:!0,selectionRevealType:2,selection:n.selected.marker}},this._editor);o&&(e.get(o).close(),e.get(o).nagivate(t,i))}else this._widget.showAtMarker(n.selected.marker,n.selected.index,n.selected.total)}}))}};oe.ID="editor.contrib.markerController",oe=te([ie(1,C),ie(2,N.i6),ie(3,r.$),ie(4,m.TG)],oe);class se extends s.R6{constructor(e,t,i){super(i),this._next=e,this._multiFile=t}run(e,t){return ne(this,void 0,void 0,(function*(){t.hasModel()&&oe.get(t).nagivate(this._next,this._multiFile)}))}}class re extends se{constructor(){super(!0,!1,{id:re.ID,label:re.LABEL,alias:"Go to Next Problem (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:c.u.focus,primary:578,weight:100},menuOpts:{menuId:U.TitleMenu,title:re.LABEL,icon:(0,D.q5)("marker-navigation-next",n.lA.arrowDown,k.N("nextMarkerIcon","Icon for goto next marker.")),group:"navigation",order:1}})}}re.ID="editor.action.marker.next",re.LABEL=k.N("markerAction.next.label","Go to Next Problem (Error, Warning, Info)");class ae extends se{constructor(){super(!1,!1,{id:ae.ID,label:ae.LABEL,alias:"Go to Previous Problem (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:c.u.focus,primary:1602,weight:100},menuOpts:{menuId:U.TitleMenu,title:re.LABEL,icon:(0,D.q5)("marker-navigation-previous",n.lA.arrowUp,k.N("previousMarkerIcon","Icon for goto previous marker.")),group:"navigation",order:2}})}}ae.ID="editor.action.marker.prev",ae.LABEL=k.N("markerAction.previous.label","Go to Previous Problem (Error, Warning, Info)");(0,s._K)(oe.ID,oe),(0,s.Qr)(re),(0,s.Qr)(ae),(0,s.Qr)(class extends se{constructor(){super(!0,!0,{id:"editor.action.marker.nextInFiles",label:k.N("markerAction.nextInFiles.label","Go to Next Problem in Files (Error, Warning, Info)"),alias:"Go to Next Problem in Files (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:c.u.focus,primary:66,weight:100},menuOpts:{menuId:L.eH.MenubarGoMenu,title:k.N({key:"miGotoNextProblem",comment:["&& denotes a mnemonic"]},"Next &&Problem"),group:"6_problem_nav",order:1}})}}),(0,s.Qr)(class extends se{constructor(){super(!1,!0,{id:"editor.action.marker.prevInFiles",label:k.N("markerAction.previousInFiles.label","Go to Previous Problem in Files (Error, Warning, Info)"),alias:"Go to Previous Problem in Files (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:c.u.focus,primary:1090,weight:100},menuOpts:{menuId:L.eH.MenubarGoMenu,title:k.N({key:"miGotoPreviousProblem",comment:["&& denotes a mnemonic"]},"Previous &&Problem"),group:"6_problem_nav",order:2}})}});const le=new N.uy("markersNavigationVisible",!1),ce=s._l.bindToContribution(oe.get);(0,s.fK)(new ce({id:"closeMarkersNavigation",precondition:le,handler:e=>e.close(),kbOpts:{weight:150,kbExpr:c.u.focus,primary:9,secondary:[1033]}}))},92729:(e,t,i)=>{"use strict";i.r(t),i.d(t,{DefinitionAction:()=>te});var n=i(16268),o=i(85152),s=i(15393),r=i(22258),a=i(1432),l=i(98401),c=i(70666),d=i(39925),h=i(65520),u=i(16830),g=i(11640),p=i(84527),f=i(50187),m=i(24314),v=i(29102),_=i(44101),b=i(44318),w=i(71455),y=i(4669),C=i(5976),x=i(95935),S=i(63580),k=i(38819),L=i(65026),N=i(72065),D=i(91847),I=i(49989),E=i(59422),T=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},M=function(e,t){return function(i,n){t(i,n,e)}};const A=new k.uy("hasSymbols",!1,(0,S.N)("hasSymbols","Whether there are symbol locations that can be navigated via keyboard-only.")),O=(0,N.yh)("ISymbolNavigationService");let P=class{constructor(e,t,i,n){this._editorService=t,this._notificationService=i,this._keybindingService=n,this._currentModel=void 0,this._currentIdx=-1,this._ignoreEditorChange=!1,this._ctxHasSymbols=A.bindTo(e)}reset(){var e,t;this._ctxHasSymbols.reset(),null===(e=this._currentState)||void 0===e||e.dispose(),null===(t=this._currentMessage)||void 0===t||t.dispose(),this._currentModel=void 0,this._currentIdx=-1}put(e){const t=e.parent.parent;if(t.references.length<=1)return void this.reset();this._currentModel=t,this._currentIdx=t.references.indexOf(e),this._ctxHasSymbols.set(!0),this._showMessage();const i=new R(this._editorService),n=i.onDidChange((e=>{if(this._ignoreEditorChange)return;const i=this._editorService.getActiveCodeEditor();if(!i)return;const n=i.getModel(),o=i.getPosition();if(!n||!o)return;let s=!1,r=!1;for(const e of t.references)if((0,x.Xy)(e.uri,n.uri))s=!0,r=r||m.e.containsPosition(e.range,o);else if(s)break;s&&r||this.reset()}));this._currentState=(0,C.F8)(i,n)}revealNext(e){if(!this._currentModel)return Promise.resolve();this._currentIdx+=1,this._currentIdx%=this._currentModel.references.length;const t=this._currentModel.references[this._currentIdx];return this._showMessage(),this._ignoreEditorChange=!0,this._editorService.openCodeEditor({resource:t.uri,options:{selection:m.e.collapseToStart(t.range),selectionRevealType:3}},e).finally((()=>{this._ignoreEditorChange=!1}))}_showMessage(){var e;null===(e=this._currentMessage)||void 0===e||e.dispose();const t=this._keybindingService.lookupKeybinding("editor.gotoNextSymbolFromResult"),i=t?(0,S.N)("location.kb","Symbol {0} of {1}, {2} for next",this._currentIdx+1,this._currentModel.references.length,t.getLabel()):(0,S.N)("location","Symbol {0} of {1}",this._currentIdx+1,this._currentModel.references.length);this._currentMessage=this._notificationService.status(i)}};P=T([M(0,k.i6),M(1,g.$),M(2,E.lT),M(3,D.d)],P),(0,L.z)(O,P,!0),(0,u.fK)(new class extends u._l{constructor(){super({id:"editor.gotoNextSymbolFromResult",precondition:A,kbOpts:{weight:100,primary:70}})}runEditorCommand(e,t){return e.get(O).revealNext(t)}}),I.W.registerCommandAndKeybindingRule({id:"editor.gotoNextSymbolFromResult.cancel",weight:100,when:A,primary:9,handler(e){e.get(O).reset()}});let R=class{constructor(e){this._listener=new Map,this._disposables=new C.SL,this._onDidChange=new y.Q5,this.onDidChange=this._onDidChange.event,this._disposables.add(e.onCodeEditorRemove(this._onDidRemoveEditor,this)),this._disposables.add(e.onCodeEditorAdd(this._onDidAddEditor,this)),e.listCodeEditors().forEach(this._onDidAddEditor,this)}dispose(){this._disposables.dispose(),this._onDidChange.dispose(),(0,C.B9)(this._listener.values())}_onDidAddEditor(e){this._listener.set(e,(0,C.F8)(e.onDidChangeCursorPosition((t=>this._onDidChange.fire({editor:e}))),e.onDidChangeModelContent((t=>this._onDidChange.fire({editor:e})))))}_onDidRemoveEditor(e){var t;null===(t=this._listener.get(e))||void 0===t||t.dispose(),this._listener.delete(e)}};R=T([M(0,g.$)],R);var F,B,V,W,H,z,j,U,$=i(82276),K=i(22043),q=i(84144),Z=i(94565),G=i(90535),Y=i(91691),Q=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};q.BH.appendMenuItem(q.eH.EditorContext,{submenu:q.eH.EditorContextPeek,title:S.N("peek.submenu","Peek"),group:"navigation",order:100});const X=new Set;function J(e){const t=new e;return(0,u.QG)(t),X.add(t.id),t}class ee extends u.R6{constructor(e,t){super(t),this._configuration=e}run(e,t){if(!t.hasModel())return Promise.resolve(void 0);const i=e.get(E.lT),n=e.get(g.$),r=e.get(G.e),a=e.get(O),l=t.getModel(),c=t.getPosition(),h=new d.Dl(t,5),u=(0,s.eP)(this._getLocationModel(l,c,h.token),h.token).then((e=>Q(this,void 0,void 0,(function*(){if(!e||h.token.isCancellationRequested)return;let i;if((0,o.Z9)(e.ariaMessage),e.referenceAt(l.uri,c)){const e=this._getAlternativeCommand(t);e!==this.id&&X.has(e)&&(i=t.getAction(e))}const s=e.references.length;if(0===s){if(!this._configuration.muteMessage){const e=l.getWordAtPosition(c);$.O.get(t).showMessage(this._getNoResultFoundMessage(e),c)}}else{if(1!==s||!i)return this._onResult(n,a,t,e);i.run()}}))),(e=>{i.error(e)})).finally((()=>{h.dispose()}));return r.showWhile(u,250),u}_onResult(e,t,i,n){return Q(this,void 0,void 0,(function*(){const o=this._getGoToPreference(i);if(i instanceof p.H||!(this._configuration.openInPeek||"peek"===o&&n.references.length>1)){const s=n.firstReference(),r=n.references.length>1&&"gotoAndPeek"===o,a=yield this._openReference(i,e,s,this._configuration.openToSide,!r);r&&a?this._openInPeek(a,n):n.dispose(),"goto"===o&&t.put(s)}else this._openInPeek(i,n)}))}_openReference(e,t,i,n,o){return Q(this,void 0,void 0,(function*(){let s;if((0,_.vx)(i)&&(s=i.targetSelectionRange),s||(s=i.range),!s)return;const r=yield t.openCodeEditor({resource:i.uri,options:{selection:m.e.collapseToStart(s),selectionRevealType:3}},e,n);if(r){if(o){const e=r.getModel(),t=r.deltaDecorations([],[{range:s,options:{description:"symbol-navigate-action-highlight",className:"symbolHighlight"}}]);setTimeout((()=>{r.getModel()===e&&r.deltaDecorations(t,[])}),350)}return r}}))}_openInPeek(e,t){let i=b.J.get(e);i&&e.hasModel()?i.toggleWidget(e.getSelection(),(0,s.PG)((e=>Promise.resolve(t))),this._configuration.openInPeek):t.dispose()}}class te extends ee{_getLocationModel(e,t,i){return Q(this,void 0,void 0,(function*(){return new w.oQ(yield(0,Y.nD)(e,t,i),S.N("def.title","Definitions"))}))}_getNoResultFoundMessage(e){return e&&e.word?S.N("noResultWord","No definition found for '{0}'",e.word):S.N("generic.noResults","No definition found")}_getAlternativeCommand(e){return e.getOption(50).alternativeDefinitionCommand}_getGoToPreference(e){return e.getOption(50).multipleDefinitions}}const ie=a.$L&&!n.$W?2118:70;J(((F=class e extends te{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:e.id,label:S.N("actions.goToDecl.label","Go to Definition"),alias:"Go to Definition",precondition:k.Ao.and(v.u.hasDefinitionProvider,v.u.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:v.u.editorTextFocus,primary:ie,weight:100},contextMenuOpts:{group:"navigation",order:1.1}}),Z.P.registerCommandAlias("editor.action.goToDeclaration",e.id)}}).id="editor.action.revealDefinition",F)),J(((B=class e extends te{constructor(){super({openToSide:!0,openInPeek:!1,muteMessage:!1},{id:e.id,label:S.N("actions.goToDeclToSide.label","Open Definition to the Side"),alias:"Open Definition to the Side",precondition:k.Ao.and(v.u.hasDefinitionProvider,v.u.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:v.u.editorTextFocus,primary:(0,r.gx)(2089,ie),weight:100}}),Z.P.registerCommandAlias("editor.action.openDeclarationToTheSide",e.id)}}).id="editor.action.revealDefinitionAside",B)),J(((V=class e extends te{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:e.id,label:S.N("actions.previewDecl.label","Peek Definition"),alias:"Peek Definition",precondition:k.Ao.and(v.u.hasDefinitionProvider,K.Jy.notInPeekEditor,v.u.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:v.u.editorTextFocus,primary:582,linux:{primary:3140},weight:100},contextMenuOpts:{menuId:q.eH.EditorContextPeek,group:"peek",order:2}}),Z.P.registerCommandAlias("editor.action.previewDeclaration",e.id)}}).id="editor.action.peekDefinition",V));class ne extends ee{_getLocationModel(e,t,i){return Q(this,void 0,void 0,(function*(){return new w.oQ(yield(0,Y.zq)(e,t,i),S.N("decl.title","Declarations"))}))}_getNoResultFoundMessage(e){return e&&e.word?S.N("decl.noResultWord","No declaration found for '{0}'",e.word):S.N("decl.generic.noResults","No declaration found")}_getAlternativeCommand(e){return e.getOption(50).alternativeDeclarationCommand}_getGoToPreference(e){return e.getOption(50).multipleDeclarations}}J(((W=class e extends ne{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:e.id,label:S.N("actions.goToDeclaration.label","Go to Declaration"),alias:"Go to Declaration",precondition:k.Ao.and(v.u.hasDeclarationProvider,v.u.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{group:"navigation",order:1.3}})}_getNoResultFoundMessage(e){return e&&e.word?S.N("decl.noResultWord","No declaration found for '{0}'",e.word):S.N("decl.generic.noResults","No declaration found")}}).id="editor.action.revealDeclaration",W)),J(class extends ne{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:"editor.action.peekDeclaration",label:S.N("actions.peekDecl.label","Peek Declaration"),alias:"Peek Declaration",precondition:k.Ao.and(v.u.hasDeclarationProvider,K.Jy.notInPeekEditor,v.u.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{menuId:q.eH.EditorContextPeek,group:"peek",order:3}})}});class oe extends ee{_getLocationModel(e,t,i){return Q(this,void 0,void 0,(function*(){return new w.oQ(yield(0,Y.L3)(e,t,i),S.N("typedef.title","Type Definitions"))}))}_getNoResultFoundMessage(e){return e&&e.word?S.N("goToTypeDefinition.noResultWord","No type definition found for '{0}'",e.word):S.N("goToTypeDefinition.generic.noResults","No type definition found")}_getAlternativeCommand(e){return e.getOption(50).alternativeTypeDefinitionCommand}_getGoToPreference(e){return e.getOption(50).multipleTypeDefinitions}}J(((H=class e extends oe{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:e.ID,label:S.N("actions.goToTypeDefinition.label","Go to Type Definition"),alias:"Go to Type Definition",precondition:k.Ao.and(v.u.hasTypeDefinitionProvider,v.u.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:v.u.editorTextFocus,primary:0,weight:100},contextMenuOpts:{group:"navigation",order:1.4}})}}).ID="editor.action.goToTypeDefinition",H)),J(((z=class e extends oe{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:e.ID,label:S.N("actions.peekTypeDefinition.label","Peek Type Definition"),alias:"Peek Type Definition",precondition:k.Ao.and(v.u.hasTypeDefinitionProvider,K.Jy.notInPeekEditor,v.u.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{menuId:q.eH.EditorContextPeek,group:"peek",order:4}})}}).ID="editor.action.peekTypeDefinition",z));class se extends ee{_getLocationModel(e,t,i){return Q(this,void 0,void 0,(function*(){return new w.oQ(yield(0,Y.f4)(e,t,i),S.N("impl.title","Implementations"))}))}_getNoResultFoundMessage(e){return e&&e.word?S.N("goToImplementation.noResultWord","No implementation found for '{0}'",e.word):S.N("goToImplementation.generic.noResults","No implementation found")}_getAlternativeCommand(e){return e.getOption(50).alternativeImplementationCommand}_getGoToPreference(e){return e.getOption(50).multipleImplementations}}J(((j=class e extends se{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:e.ID,label:S.N("actions.goToImplementation.label","Go to Implementations"),alias:"Go to Implementations",precondition:k.Ao.and(v.u.hasImplementationProvider,v.u.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:v.u.editorTextFocus,primary:2118,weight:100},contextMenuOpts:{group:"navigation",order:1.45}})}}).ID="editor.action.goToImplementation",j)),J(((U=class e extends se{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:e.ID,label:S.N("actions.peekImplementation.label","Peek Implementations"),alias:"Peek Implementations",precondition:k.Ao.and(v.u.hasImplementationProvider,K.Jy.notInPeekEditor,v.u.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:v.u.editorTextFocus,primary:3142,weight:100},contextMenuOpts:{menuId:q.eH.EditorContextPeek,group:"peek",order:5}})}}).ID="editor.action.peekImplementation",U));class re extends ee{_getNoResultFoundMessage(e){return e?S.N("references.no","No references found for '{0}'",e.word):S.N("references.noGeneric","No references found")}_getAlternativeCommand(e){return e.getOption(50).alternativeReferenceCommand}_getGoToPreference(e){return e.getOption(50).multipleReferences}}J(class extends re{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:"editor.action.goToReferences",label:S.N("goToReferences.label","Go to References"),alias:"Go to References",precondition:k.Ao.and(v.u.hasReferenceProvider,K.Jy.notInPeekEditor,v.u.isInWalkThroughSnippet.toNegated()),kbOpts:{kbExpr:v.u.editorTextFocus,primary:1094,weight:100},contextMenuOpts:{group:"navigation",order:1.45}})}_getLocationModel(e,t,i){return Q(this,void 0,void 0,(function*(){return new w.oQ(yield(0,Y.aA)(e,t,!0,i),S.N("ref.title","References"))}))}}),J(class extends re{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:"editor.action.referenceSearch.trigger",label:S.N("references.action.label","Peek References"),alias:"Peek References",precondition:k.Ao.and(v.u.hasReferenceProvider,K.Jy.notInPeekEditor,v.u.isInWalkThroughSnippet.toNegated()),contextMenuOpts:{menuId:q.eH.EditorContextPeek,group:"peek",order:6}})}_getLocationModel(e,t,i){return Q(this,void 0,void 0,(function*(){return new w.oQ(yield(0,Y.aA)(e,t,!1,i),S.N("ref.title","References"))}))}});class ae extends ee{constructor(e,t,i){super(e,{id:"editor.action.goToLocation",label:S.N("label.generic","Go to Any Symbol"),alias:"Go to Any Symbol",precondition:k.Ao.and(K.Jy.notInPeekEditor,v.u.isInWalkThroughSnippet.toNegated())}),this._references=t,this._gotoMultipleBehaviour=i}_getLocationModel(e,t,i){return Q(this,void 0,void 0,(function*(){return new w.oQ(this._references,S.N("generic.title","Locations"))}))}_getNoResultFoundMessage(e){return e&&S.N("generic.noResult","No results for '{0}'",e.word)||""}_getGoToPreference(e){var t;return null!==(t=this._gotoMultipleBehaviour)&&void 0!==t?t:e.getOption(50).multipleReferences}_getAlternativeCommand(){return""}}Z.P.registerCommand({id:"editor.action.goToLocations",description:{description:"Go to locations from a position in a file",args:[{name:"uri",description:"The text document in which to start",constraint:c.o},{name:"position",description:"The position at which to start",constraint:f.L.isIPosition},{name:"locations",description:"An array of locations.",constraint:Array},{name:"multiple",description:"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto"},{name:"noResultsMessage",description:"Human readable message that shows when locations is empty."}]},handler:(e,t,i,n,o,s,r)=>Q(void 0,void 0,void 0,(function*(){(0,l.p_)(c.o.isUri(t)),(0,l.p_)(f.L.isIPosition(i)),(0,l.p_)(Array.isArray(n)),(0,l.p_)(void 0===o||"string"==typeof o),(0,l.p_)(void 0===r||"boolean"==typeof r);const a=e.get(g.$),d=yield a.openCodeEditor({resource:t},a.getFocusedCodeEditor());if((0,h.CL)(d))return d.setPosition(i),d.revealPositionInCenterIfOutsideViewport(i,0),d.invokeWithinContext((e=>{const t=new class extends ae{_getNoResultFoundMessage(e){return s||super._getNoResultFoundMessage(e)}}({muteMessage:!Boolean(s),openInPeek:Boolean(r),openToSide:!1},n,o);e.get(N.TG).invokeFunction(t.run.bind(t),d)}))}))}),Z.P.registerCommand({id:"editor.action.peekLocations",description:{description:"Peek locations from a position in a file",args:[{name:"uri",description:"The text document in which to start",constraint:c.o},{name:"position",description:"The position at which to start",constraint:f.L.isIPosition},{name:"locations",description:"An array of locations.",constraint:Array},{name:"multiple",description:"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto"}]},handler:(e,t,i,n,o)=>Q(void 0,void 0,void 0,(function*(){e.get(Z.H).executeCommand("editor.action.goToLocations",t,i,n,o,void 0,!0)}))}),Z.P.registerCommand({id:"editor.action.findReferences",handler:(e,t,i)=>{(0,l.p_)(c.o.isUri(t)),(0,l.p_)(f.L.isIPosition(i));const n=e.get(g.$);return n.openCodeEditor({resource:t},n.getFocusedCodeEditor()).then((e=>{if(!(0,h.CL)(e)||!e.hasModel())return;const t=b.J.get(e);if(!t)return;const n=(0,s.PG)((t=>(0,Y.aA)(e.getModel(),f.L.lift(i),!1,t).then((e=>new w.oQ(e,S.N("ref.title","References")))))),o=new m.e(i.lineNumber,i.column,i.lineNumber,i.column);return Promise.resolve(t.toggleWidget(o,n,!1))}))}}),Z.P.registerCommandAlias("editor.action.showReferences","editor.action.peekLocations"),q.BH.appendMenuItems([{id:q.eH.MenubarGoMenu,item:{command:{id:"editor.action.revealDefinition",title:S.N({key:"miGotoDefinition",comment:["&& denotes a mnemonic"]},"Go to &&Definition")},group:"4_symbol_nav",order:2}},{id:q.eH.MenubarGoMenu,item:{command:{id:"editor.action.revealDeclaration",title:S.N({key:"miGotoDeclaration",comment:["&& denotes a mnemonic"]},"Go to &&Declaration")},group:"4_symbol_nav",order:3}},{id:q.eH.MenubarGoMenu,item:{command:{id:"editor.action.goToTypeDefinition",title:S.N({key:"miGotoTypeDefinition",comment:["&& denotes a mnemonic"]},"Go to &&Type Definition")},group:"4_symbol_nav",order:3}},{id:q.eH.MenubarGoMenu,item:{command:{id:"editor.action.goToImplementation",title:S.N({key:"miGotoImplementation",comment:["&& denotes a mnemonic"]},"Go to &&Implementations")},group:"4_symbol_nav",order:4}},{id:q.eH.MenubarGoMenu,item:{command:{id:"editor.action.goToReferences",title:S.N({key:"miGotoReference",comment:["&& denotes a mnemonic"]},"Go to &&References")},group:"4_symbol_nav",order:5}}])},91691:(e,t,i)=>{"use strict";i.d(t,{L3:()=>g,aA:()=>p,f4:()=>u,nD:()=>d,zq:()=>h});var n=i(71050),o=i(17301),s=i(16830),r=i(44101),a=i(71455),l=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function c(e,t,i,n){const s=i.ordered(e).map((i=>Promise.resolve(n(i,e,t)).then(void 0,(e=>{(0,o.Cp)(e)}))));return Promise.all(s).then((e=>{const t=[];for(let i of e)Array.isArray(i)?t.push(...i):i&&t.push(i);return t}))}function d(e,t,i){return c(e,t,r.Ct,((e,t,n)=>e.provideDefinition(t,n,i)))}function h(e,t,i){return c(e,t,r.RN,((e,t,n)=>e.provideDeclaration(t,n,i)))}function u(e,t,i){return c(e,t,r.vI,((e,t,n)=>e.provideImplementation(t,n,i)))}function g(e,t,i){return c(e,t,r.tA,((e,t,n)=>e.provideTypeDefinition(t,n,i)))}function p(e,t,i,n){return c(e,t,r.FL,((e,t,o)=>l(this,void 0,void 0,(function*(){const s=yield e.provideReferences(t,o,{includeDeclaration:!0},n);if(!i||!s||2!==s.length)return s;const r=yield e.provideReferences(t,o,{includeDeclaration:!1},n);return r&&1===r.length?r:s}))))}function f(e){return l(this,void 0,void 0,(function*(){const t=yield e(),i=new a.oQ(t,""),n=i.references.map((e=>e.link));return i.dispose(),n}))}(0,s.sb)("_executeDefinitionProvider",((e,t)=>f((()=>d(e,t,n.T.None))))),(0,s.sb)("_executeDeclarationProvider",((e,t)=>f((()=>h(e,t,n.T.None))))),(0,s.sb)("_executeImplementationProvider",((e,t)=>f((()=>u(e,t,n.T.None))))),(0,s.sb)("_executeTypeDefinitionProvider",((e,t)=>f((()=>g(e,t,n.T.None))))),(0,s.sb)("_executeReferenceProvider",((e,t)=>f((()=>p(e,t,!1,n.T.None)))))},69241:(e,t,i)=>{"use strict";i.d(t,{yN:()=>h});var n=i(4669),o=i(5976),s=i(1432);function r(e,t){return!!e[t]}class a{constructor(e,t){this.target=e.target,this.hasTriggerModifier=r(e.event,t.triggerModifier),this.hasSideBySideModifier=r(e.event,t.triggerSideBySideModifier),this.isNoneOrSingleMouseDown=e.event.detail<=1}}class l{constructor(e,t){this.keyCodeIsTriggerKey=e.keyCode===t.triggerKey,this.keyCodeIsSideBySideKey=e.keyCode===t.triggerSideBySideKey,this.hasTriggerModifier=r(e,t.triggerModifier)}}class c{constructor(e,t,i,n){this.triggerKey=e,this.triggerModifier=t,this.triggerSideBySideKey=i,this.triggerSideBySideModifier=n}equals(e){return this.triggerKey===e.triggerKey&&this.triggerModifier===e.triggerModifier&&this.triggerSideBySideKey===e.triggerSideBySideKey&&this.triggerSideBySideModifier===e.triggerSideBySideModifier}}function d(e){return"altKey"===e?s.dz?new c(57,"metaKey",6,"altKey"):new c(5,"ctrlKey",6,"altKey"):s.dz?new c(6,"altKey",57,"metaKey"):new c(6,"altKey",5,"ctrlKey")}class h extends o.JT{constructor(e){super(),this._onMouseMoveOrRelevantKeyDown=this._register(new n.Q5),this.onMouseMoveOrRelevantKeyDown=this._onMouseMoveOrRelevantKeyDown.event,this._onExecute=this._register(new n.Q5),this.onExecute=this._onExecute.event,this._onCancel=this._register(new n.Q5),this.onCancel=this._onCancel.event,this._editor=e,this._opts=d(this._editor.getOption(69)),this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._lineNumberOnMouseDown=0,this._register(this._editor.onDidChangeConfiguration((e=>{if(e.hasChanged(69)){const e=d(this._editor.getOption(69));if(this._opts.equals(e))return;this._opts=e,this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._lineNumberOnMouseDown=0,this._onCancel.fire()}}))),this._register(this._editor.onMouseMove((e=>this._onEditorMouseMove(new a(e,this._opts))))),this._register(this._editor.onMouseDown((e=>this._onEditorMouseDown(new a(e,this._opts))))),this._register(this._editor.onMouseUp((e=>this._onEditorMouseUp(new a(e,this._opts))))),this._register(this._editor.onKeyDown((e=>this._onEditorKeyDown(new l(e,this._opts))))),this._register(this._editor.onKeyUp((e=>this._onEditorKeyUp(new l(e,this._opts))))),this._register(this._editor.onMouseDrag((()=>this._resetHandler()))),this._register(this._editor.onDidChangeCursorSelection((e=>this._onDidChangeCursorSelection(e)))),this._register(this._editor.onDidChangeModel((e=>this._resetHandler()))),this._register(this._editor.onDidChangeModelContent((()=>this._resetHandler()))),this._register(this._editor.onDidScrollChange((e=>{(e.scrollTopChanged||e.scrollLeftChanged)&&this._resetHandler()})))}_onDidChangeCursorSelection(e){e.selection&&e.selection.startColumn!==e.selection.endColumn&&this._resetHandler()}_onEditorMouseMove(e){this._lastMouseMoveEvent=e,this._onMouseMoveOrRelevantKeyDown.fire([e,null])}_onEditorMouseDown(e){this._hasTriggerKeyOnMouseDown=e.hasTriggerModifier,this._lineNumberOnMouseDown=e.target.position?e.target.position.lineNumber:0}_onEditorMouseUp(e){const t=e.target.position?e.target.position.lineNumber:0;this._hasTriggerKeyOnMouseDown&&this._lineNumberOnMouseDown&&this._lineNumberOnMouseDown===t&&this._onExecute.fire(e)}_onEditorKeyDown(e){this._lastMouseMoveEvent&&(e.keyCodeIsTriggerKey||e.keyCodeIsSideBySideKey&&e.hasTriggerModifier)?this._onMouseMoveOrRelevantKeyDown.fire([this._lastMouseMoveEvent,e]):e.hasTriggerModifier&&this._onCancel.fire()}_onEditorKeyUp(e){e.keyCodeIsTriggerKey&&this._onCancel.fire()}_resetHandler(){this._lastMouseMoveEvent=null,this._hasTriggerKeyOnMouseDown=!1,this._onCancel.fire()}}},10365:(e,t,i)=>{"use strict";i.r(t),i.d(t,{GotoDefinitionAtPositionEditorContribution:()=>k});var n=i(15393),o=i(17301),s=i(59365),r=i(5976),a=i(98401),l=(i(96394),i(39925)),c=i(16830),d=i(50187),h=i(24314),u=i(44101),g=i(71531),p=i(88216),f=i(69241),m=i(22043),v=i(63580),_=i(38819),b=i(73910),w=i(97781),y=i(92729),C=i(91691),x=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},S=function(e,t){return function(i,n){t(i,n,e)}};let k=class e{constructor(e,t,i){this.textModelResolverService=t,this.modeService=i,this.toUnhook=new r.SL,this.toUnhookForKeyboard=new r.SL,this.linkDecorations=[],this.currentWordAtPosition=null,this.previousPromise=null,this.editor=e;let n=new f.yN(e);this.toUnhook.add(n),this.toUnhook.add(n.onMouseMoveOrRelevantKeyDown((([e,t])=>{this.startFindDefinitionFromMouse(e,(0,a.f6)(t))}))),this.toUnhook.add(n.onExecute((e=>{this.isEnabled(e)&&this.gotoDefinition(e.target.position,e.hasSideBySideModifier).then((()=>{this.removeLinkDecorations()}),(e=>{this.removeLinkDecorations(),(0,o.dL)(e)}))}))),this.toUnhook.add(n.onCancel((()=>{this.removeLinkDecorations(),this.currentWordAtPosition=null})))}static get(t){return t.getContribution(e.ID)}startFindDefinitionFromCursor(e){return this.startFindDefinition(e).then((()=>{this.toUnhookForKeyboard.add(this.editor.onDidChangeCursorPosition((()=>{this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear()}))),this.toUnhookForKeyboard.add(this.editor.onKeyDown((e=>{e&&(this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear())})))}))}startFindDefinitionFromMouse(e,t){if(9===e.target.type&&this.linkDecorations.length>0)return;if(!this.editor.hasModel()||!this.isEnabled(e,t))return this.currentWordAtPosition=null,void this.removeLinkDecorations();const i=e.target.position;this.startFindDefinition(i)}startFindDefinition(e){var t;this.toUnhookForKeyboard.clear();const i=e?null===(t=this.editor.getModel())||void 0===t?void 0:t.getWordAtPosition(e):null;if(!i)return this.currentWordAtPosition=null,this.removeLinkDecorations(),Promise.resolve(0);if(this.currentWordAtPosition&&this.currentWordAtPosition.startColumn===i.startColumn&&this.currentWordAtPosition.endColumn===i.endColumn&&this.currentWordAtPosition.word===i.word)return Promise.resolve(0);this.currentWordAtPosition=i;let r=new l.yy(this.editor,15);return this.previousPromise&&(this.previousPromise.cancel(),this.previousPromise=null),this.previousPromise=(0,n.PG)((t=>this.findDefinition(e,t))),this.previousPromise.then((t=>{if(t&&t.length&&r.validate(this.editor))if(t.length>1)this.addDecoration(new h.e(e.lineNumber,i.startColumn,e.lineNumber,i.endColumn),(new s.W5).appendText(v.N("multipleResults","Click to show {0} definitions.",t.length)));else{let n=t[0];if(!n.uri)return;this.textModelResolverService.createModelReference(n.uri).then((t=>{if(!t.object||!t.object.textEditorModel)return void t.dispose();const{object:{textEditorModel:o}}=t,{startLineNumber:r}=n.range;if(r<1||r>o.getLineCount())return void t.dispose();const a=this.getPreviewValue(o,r,n);let l;l=n.originSelectionRange?h.e.lift(n.originSelectionRange):new h.e(e.lineNumber,i.startColumn,e.lineNumber,i.endColumn);const c=this.modeService.getModeIdByFilepathOrFirstLine(o.uri);this.addDecoration(l,(new s.W5).appendCodeblock(c||"",a)),t.dispose()}))}else this.removeLinkDecorations()})).then(void 0,o.dL)}getPreviewValue(t,i,n){let o=n.targetSelectionRange?n.range:this.getPreviewRangeBasedOnBrackets(t,i);o.endLineNumber-o.startLineNumber>=e.MAX_SOURCE_PREVIEW_LINES&&(o=this.getPreviewRangeBasedOnIndentation(t,i));return this.stripIndentationFromPreviewRange(t,i,o)}stripIndentationFromPreviewRange(e,t,i){let n=e.getLineFirstNonWhitespaceColumn(t);for(let o=t+1;o<i.endLineNumber;o++){const t=e.getLineFirstNonWhitespaceColumn(o);n=Math.min(n,t)}return e.getValueInRange(i).replace(new RegExp(`^\\s{${n-1}}`,"gm"),"").trim()}getPreviewRangeBasedOnIndentation(t,i){const n=t.getLineFirstNonWhitespaceColumn(i),o=Math.min(t.getLineCount(),i+e.MAX_SOURCE_PREVIEW_LINES);let s=i+1;for(;s<o;s++){if(n===t.getLineFirstNonWhitespaceColumn(s))break}return new h.e(i,1,s+1,1)}getPreviewRangeBasedOnBrackets(t,i){const n=Math.min(t.getLineCount(),i+e.MAX_SOURCE_PREVIEW_LINES),o=[];let s=!0,r=t.findNextBracket(new d.L(i,1));for(;null!==r;){if(0===o.length)o.push(r);else{const e=o[o.length-1];if(e.open[0]===r.open[0]&&e.isOpen&&!r.isOpen?o.pop():o.push(r),0===o.length){if(!s)return new h.e(i,1,r.range.endLineNumber+1,1);s=!1}}const e=t.getLineMaxColumn(i);let a=r.range.endLineNumber,l=r.range.endColumn;if(e===r.range.endColumn&&(a++,l=1),a>n)return new h.e(i,1,n+1,1);r=t.findNextBracket(new d.L(a,l))}return new h.e(i,1,n+1,1)}addDecoration(e,t){const i={range:e,options:{description:"goto-definition-link",inlineClassName:"goto-definition-link",hoverMessage:t}};this.linkDecorations=this.editor.deltaDecorations(this.linkDecorations,[i])}removeLinkDecorations(){this.linkDecorations.length>0&&(this.linkDecorations=this.editor.deltaDecorations(this.linkDecorations,[]))}isEnabled(e,t){return this.editor.hasModel()&&e.isNoneOrSingleMouseDown&&6===e.target.type&&(e.hasTriggerModifier||!!t&&t.keyCodeIsTriggerKey)&&u.Ct.has(this.editor.getModel())}findDefinition(e,t){const i=this.editor.getModel();return i?(0,C.nD)(i,e,t):Promise.resolve(null)}gotoDefinition(e,t){return this.editor.setPosition(e),this.editor.invokeWithinContext((e=>{const i=!t&&this.editor.getOption(77)&&!this.isInPeekEditor(e);return new y.DefinitionAction({openToSide:t,openInPeek:i,muteMessage:!0},{alias:"",label:"",id:"",precondition:void 0}).run(e,this.editor)}))}isInPeekEditor(e){const t=e.get(_.i6);return m.Jy.inPeekEditor.getValue(t)}dispose(){this.toUnhook.dispose()}};k.ID="editor.contrib.gotodefinitionatposition",k.MAX_SOURCE_PREVIEW_LINES=8,k=x([S(1,p.S),S(2,g.h)],k),(0,c._K)(k.ID,k),(0,w.Ic)(((e,t)=>{const i=e.getColor(b._Y);i&&t.addRule(`.monaco-editor .goto-definition-link { color: ${i} !important; }`)}))},44318:(e,t,i)=>{"use strict";i.d(t,{J:()=>he});var n=i(15393),o=i(17301),s=i(22258),r=i(5976),a=i(11640),l=i(50187),c=i(24314),d=i(22043),h=i(63580),u=i(94565),g=i(33108),p=i(38819),f=i(72065),m=i(49989),v=i(20343),_=i(59422),b=i(26904),w=i(71455),y=i(65321),C=i(23937),x=i(41264),S=i(4669),k=i(66663),L=i(95935),N=(i(67055),i(84527)),D=i(44174),I=i(83831),E=i(71531),T=i(88216),M=i(67488),A=i(34650),O=i(48801),P=i(75392),R=i(68843),F=i(91847),B=i(44349),V=i(88810),W=i(97781),H=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},z=function(e,t){return function(i,n){t(i,n,e)}};let j=class{constructor(e){this._resolverService=e}hasChildren(e){return e instanceof w.oQ||e instanceof w.F2}getChildren(e){if(e instanceof w.oQ)return e.groups;if(e instanceof w.F2)return e.resolve(this._resolverService).then((e=>e.children));throw new Error("bad tree")}};j=H([z(0,T.S)],j);class U{getHeight(){return 23}getTemplateId(e){return e instanceof w.F2?Z.id:Y.id}}let $=class{constructor(e){this._keybindingService=e}getKeyboardNavigationLabel(e){var t;if(e instanceof w.WX){const i=null===(t=e.parent.getPreview(e))||void 0===t?void 0:t.preview(e.range);if(i)return i.value}return(0,L.EZ)(e.uri)}};$=H([z(0,F.d)],$);class K{getId(e){return e instanceof w.WX?e.id:e.uri}}let q=class extends r.JT{constructor(e,t,i){super(),this._uriLabel=t;const n=document.createElement("div");n.classList.add("reference-file"),this.file=this._register(new O.g(n,{supportHighlights:!0})),this.badge=new M.Z(y.R3(n,y.$(".count"))),this._register((0,V.WZ)(this.badge,i)),e.appendChild(n)}set(e,t){let i=(0,L.XX)(e.uri);this.file.setLabel((0,R.p)(e.uri),this._uriLabel.getUriLabel(i,{relative:!0}),{title:this._uriLabel.getUriLabel(e.uri),matches:t});const n=e.children.length;this.badge.setCount(n),n>1?this.badge.setTitleFormat((0,h.N)("referencesCount","{0} references",n)):this.badge.setTitleFormat((0,h.N)("referenceCount","{0} reference",n))}};q=H([z(1,B.e),z(2,W.XE)],q);let Z=class e{constructor(t){this._instantiationService=t,this.templateId=e.id}renderTemplate(e){return this._instantiationService.createInstance(q,e)}renderElement(e,t,i){i.set(e.element,(0,P.mB)(e.filterData))}disposeTemplate(e){e.dispose()}};Z.id="FileReferencesRenderer",Z=H([z(0,f.TG)],Z);class G{constructor(e){this.label=new A.q(e,!1)}set(e,t){var i;const n=null===(i=e.parent.getPreview(e))||void 0===i?void 0:i.preview(e.range);if(n&&n.value){const{value:e,highlight:i}=n;t&&!P.CL.isDefault(t)?(this.label.element.classList.toggle("referenceMatch",!1),this.label.set(e,(0,P.mB)(t))):(this.label.element.classList.toggle("referenceMatch",!0),this.label.set(e,[i]))}else this.label.set(`${(0,L.EZ)(e.uri)}:${e.range.startLineNumber+1}:${e.range.startColumn+1}`)}}class Y{constructor(){this.templateId=Y.id}renderTemplate(e){return new G(e)}renderElement(e,t,i){i.set(e.element,e.filterData)}disposeTemplate(){}}Y.id="OneReferenceRenderer";class Q{getWidgetAriaLabel(){return(0,h.N)("treeAriaLabel","References")}getAriaLabel(e){return e.ariaMessage}}var X=i(73910),J=i(64862),ee=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},te=function(e,t){return function(i,n){t(i,n,e)}},ie=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class ne{constructor(e,t){this._editor=e,this._model=t,this._decorations=new Map,this._decorationIgnoreSet=new Set,this._callOnDispose=new r.SL,this._callOnModelChange=new r.SL,this._callOnDispose.add(this._editor.onDidChangeModel((()=>this._onModelChanged()))),this._onModelChanged()}dispose(){this._callOnModelChange.dispose(),this._callOnDispose.dispose(),this.removeDecorations()}_onModelChanged(){this._callOnModelChange.clear();const e=this._editor.getModel();if(e)for(let t of this._model.references)if(t.uri.toString()===e.uri.toString())return void this._addDecorations(t.parent)}_addDecorations(e){if(!this._editor.hasModel())return;this._callOnModelChange.add(this._editor.getModel().onDidChangeDecorations((()=>this._onDecorationChanged())));const t=[],i=[];for(let n=0,o=e.children.length;n<o;n++){let o=e.children[n];this._decorationIgnoreSet.has(o.id)||o.uri.toString()===this._editor.getModel().uri.toString()&&(t.push({range:o.range,options:ne.DecorationOptions}),i.push(n))}const n=this._editor.deltaDecorations([],t);for(let t=0;t<n.length;t++)this._decorations.set(n[t],e.children[i[t]])}_onDecorationChanged(){const e=[],t=this._editor.getModel();if(t){for(let[i,n]of this._decorations){const o=t.getDecorationRange(i);if(!o)continue;let s=!1;if(!c.e.equalsRange(o,n.range)){if(c.e.spansMultipleLines(o))s=!0;else{n.range.endColumn-n.range.startColumn!==o.endColumn-o.startColumn&&(s=!0)}s?(this._decorationIgnoreSet.add(n.id),e.push(i)):n.range=o}}for(let t=0,i=e.length;t<i;t++)this._decorations.delete(e[t]);this._editor.deltaDecorations(e,[])}}removeDecorations(){this._editor.deltaDecorations([...this._decorations.keys()],[]),this._decorations.clear()}}ne.DecorationOptions=D.qx.register({description:"reference-decoration",stickiness:1,className:"reference-decoration"});class oe{constructor(){this.ratio=.7,this.heightInLines=18}static fromJSON(e){let t,i;try{const n=JSON.parse(e);t=n.ratio,i=n.heightInLines}catch(e){}return{ratio:t||.7,heightInLines:i||18}}}class se extends v.ls{}let re=class extends d.vk{constructor(e,t,i,n,o,s,a,l,c,d,h,u){super(e,{showFrame:!1,showArrow:!0,isResizeable:!0,isAccessible:!0,supportOnTitleClick:!0},s),this._defaultTreeKeyboardSupport=t,this.layoutData=i,this._textModelResolverService=o,this._instantiationService=s,this._peekViewService=a,this._uriLabel=l,this._undoRedoService=c,this._keybindingService=d,this._modeService=h,this._languageConfigurationService=u,this._disposeOnNewModel=new r.SL,this._callOnDispose=new r.SL,this._onDidSelectReference=new S.Q5,this.onDidSelectReference=this._onDidSelectReference.event,this._dim=new y.Ro(0,0),this._applyTheme(n.getColorTheme()),this._callOnDispose.add(n.onDidColorThemeChange(this._applyTheme.bind(this))),this._peekViewService.addExclusiveWidget(e,this),this.create()}dispose(){this.setModel(void 0),this._callOnDispose.dispose(),this._disposeOnNewModel.dispose(),(0,r.B9)(this._preview),(0,r.B9)(this._previewNotAvailableMessage),(0,r.B9)(this._tree),(0,r.B9)(this._previewModelReference),this._splitView.dispose(),super.dispose()}_applyTheme(e){const t=e.getColor(d.SC)||x.Il.transparent;this.style({arrowColor:t,frameColor:t,headerBackgroundColor:e.getColor(d.KY)||x.Il.transparent,primaryHeadingColor:e.getColor(d.IH),secondaryHeadingColor:e.getColor(d.R7)})}show(e){this.editor.revealRangeInCenterIfOutsideViewport(e,0),super.show(e,this.layoutData.heightInLines||18)}focusOnReferenceTree(){this._tree.domFocus()}focusOnPreviewEditor(){this._preview.focus()}isPreviewEditorFocused(){return this._preview.hasTextFocus()}_onTitleClick(e){this._preview&&this._preview.getModel()&&this._onDidSelectReference.fire({element:this._getFocusedReference(),kind:e.ctrlKey||e.metaKey||e.altKey?"side":"open",source:"title"})}_fillBody(e){this.setCssClass("reference-zone-widget"),this._messageContainer=y.R3(e,y.$("div.messages")),y.Cp(this._messageContainer),this._splitView=new C.z(e,{orientation:1}),this._previewContainer=y.R3(e,y.$("div.preview.inline"));this._preview=this._instantiationService.createInstance(N.H,this._previewContainer,{scrollBeyondLastLine:!1,scrollbar:{verticalScrollbarSize:14,horizontal:"auto",useShadows:!0,verticalHasArrows:!1,horizontalHasArrows:!1,alwaysConsumeMouseWheel:!1},overviewRulerLanes:2,fixedOverflowWidgets:!0,minimap:{enabled:!1}},this.editor),y.Cp(this._previewContainer),this._previewNotAvailableMessage=new D.yO(h.N("missingPreviewMessage","no preview available"),D.yO.DEFAULT_CREATION_OPTIONS,null,null,this._undoRedoService,this._modeService,this._languageConfigurationService),this._treeContainer=y.R3(e,y.$("div.ref-tree.inline"));const t={keyboardSupport:this._defaultTreeKeyboardSupport,accessibilityProvider:new Q,keyboardNavigationLabelProvider:this._instantiationService.createInstance($),identityProvider:new K,openOnSingleClick:!0,selectionNavigation:!0,overrideStyles:{listBackground:d.M8}};this._defaultTreeKeyboardSupport&&this._callOnDispose.add(y.mu(this._treeContainer,"keydown",(e=>{e.equals(9)&&(this._keybindingService.dispatchEvent(e,e.target),e.stopPropagation())}),!0)),this._tree=this._instantiationService.createInstance(se,"ReferencesWidget",this._treeContainer,new U,[this._instantiationService.createInstance(Z),this._instantiationService.createInstance(Y)],this._instantiationService.createInstance(j),t),this._splitView.addView({onDidChange:S.ju.None,element:this._previewContainer,minimumSize:200,maximumSize:Number.MAX_VALUE,layout:e=>{this._preview.layout({height:this._dim.height,width:e})}},C.M.Distribute),this._splitView.addView({onDidChange:S.ju.None,element:this._treeContainer,minimumSize:100,maximumSize:Number.MAX_VALUE,layout:e=>{this._treeContainer.style.height=`${this._dim.height}px`,this._treeContainer.style.width=`${e}px`,this._tree.layout(this._dim.height,e)}},C.M.Distribute),this._disposables.add(this._splitView.onDidSashChange((()=>{this._dim.width&&(this.layoutData.ratio=this._splitView.getViewSize(0)/this._dim.width)}),void 0));let i=(e,t)=>{e instanceof w.WX&&("show"===t&&this._revealReference(e,!1),this._onDidSelectReference.fire({element:e,kind:t,source:"tree"}))};this._tree.onDidOpen((e=>{e.sideBySide?i(e.element,"side"):e.editorOptions.pinned?i(e.element,"goto"):i(e.element,"show")})),y.Cp(this._treeContainer)}_onWidth(e){this._dim&&this._doLayoutBody(this._dim.height,e)}_doLayoutBody(e,t){super._doLayoutBody(e,t),this._dim=new y.Ro(t,e),this.layoutData.heightInLines=this._viewZone?this._viewZone.heightInLines:this.layoutData.heightInLines,this._splitView.layout(t),this._splitView.resizeView(0,t*this.layoutData.ratio)}setSelection(e){return this._revealReference(e,!0).then((()=>{this._model&&(this._tree.setSelection([e]),this._tree.setFocus([e]))}))}setModel(e){return this._disposeOnNewModel.clear(),this._model=e,this._model?this._onNewModel():Promise.resolve()}_onNewModel(){return this._model?this._model.isEmpty?(this.setTitle(""),this._messageContainer.innerText=h.N("noResults","æ— ç»“æžœ"),y.$Z(this._messageContainer),Promise.resolve(void 0)):(y.Cp(this._messageContainer),this._decorationsManager=new ne(this._preview,this._model),this._disposeOnNewModel.add(this._decorationsManager),this._disposeOnNewModel.add(this._model.onDidChangeReferenceRange((e=>this._tree.rerender(e)))),this._disposeOnNewModel.add(this._preview.onMouseDown((e=>{const{event:t,target:i}=e;if(2!==t.detail)return;const n=this._getFocusedReference();n&&this._onDidSelectReference.fire({element:{uri:n.uri,range:i.range},kind:t.ctrlKey||t.metaKey||t.altKey?"side":"open",source:"editor"})}))),this.container.classList.add("results-loaded"),y.$Z(this._treeContainer),y.$Z(this._previewContainer),this._splitView.layout(this._dim.width),this.focusOnReferenceTree(),this._tree.setInput(1===this._model.groups.length?this._model.groups[0]:this._model)):Promise.resolve(void 0)}_getFocusedReference(){const[e]=this._tree.getFocus();return e instanceof w.WX?e:e instanceof w.F2&&e.children.length>0?e.children[0]:void 0}revealReference(e){return ie(this,void 0,void 0,(function*(){yield this._revealReference(e,!1),this._onDidSelectReference.fire({element:e,kind:"goto",source:"tree"})}))}_revealReference(e,t){return ie(this,void 0,void 0,(function*(){if(this._revealedReference===e)return;this._revealedReference=e,e.uri.scheme!==k.lg.inMemory?this.setTitle((0,L.Hx)(e.uri),this._uriLabel.getUriLabel((0,L.XX)(e.uri))):this.setTitle(h.N("peekView.alternateTitle","References"));const i=this._textModelResolverService.createModelReference(e.uri);this._tree.getInput()===e.parent||(t&&this._tree.reveal(e.parent),yield this._tree.expand(e.parent)),this._tree.reveal(e);const n=yield i;if(!this._model)return void n.dispose();(0,r.B9)(this._previewModelReference);const o=n.object;if(o){const t=this._preview.getModel()===o.textEditorModel?0:1,i=c.e.lift(e.range).collapseToStart();this._previewModelReference=n,this._preview.setModel(o.textEditorModel),this._preview.setSelection(i),this._preview.revealRangeInCenter(i,t)}else this._preview.setModel(this._previewNotAvailableMessage),n.dispose()}))}};re=ee([te(3,W.XE),te(4,T.S),te(5,f.TG),te(6,d.Fw),te(7,B.e),te(8,J.tJ),te(9,F.d),te(10,E.h),te(11,I.c_)],re),(0,W.Ic)(((e,t)=>{const i=e.getColor(d.F8);i&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { background-color: ${i}; }`);const n=e.getColor(d.WL);n&&t.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { background-color: ${n}; }`);const o=e.getColor(d.xH);o&&t.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { border: 2px solid ${o}; box-sizing: border-box; }`);const s=e.getColor(X.xL);s&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { border: 1px dotted ${s}; box-sizing: border-box; }`);const r=e.getColor(d.M8);r&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree { background-color: ${r}; }`);const a=e.getColor(d.xk);a&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree { color: ${a}; }`);const l=e.getColor(d.a7);l&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .reference-file { color: ${l}; }`);const c=e.getColor(d.Zj);c&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows > .monaco-list-row.selected:not(.highlighted) { background-color: ${c}; }`);const h=e.getColor(d.IY);h&&t.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows > .monaco-list-row.selected:not(.highlighted) { color: ${h} !important; }`);const u=e.getColor(d.RX);u&&t.addRule(`.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background,.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input {\tbackground-color: ${u};}`);const g=e.getColor(d.sH);g&&t.addRule(`.monaco-editor .reference-zone-widget .preview .monaco-editor .margin {\tbackground-color: ${g};}`)}));var ae=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},le=function(e,t){return function(i,n){t(i,n,e)}},ce=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const de=new p.uy("referenceSearchVisible",!1,h.N("referenceSearchVisible","Whether reference peek is visible, like 'Peek References' or 'Peek Definition'"));let he=class e{constructor(e,t,i,n,o,s,a,l){this._defaultTreeKeyboardSupport=e,this._editor=t,this._editorService=n,this._notificationService=o,this._instantiationService=s,this._storageService=a,this._configurationService=l,this._disposables=new r.SL,this._requestIdPool=0,this._ignoreModelChangeEvent=!1,this._referenceSearchVisible=de.bindTo(i)}static get(t){return t.getContribution(e.ID)}dispose(){var e,t;this._referenceSearchVisible.reset(),this._disposables.dispose(),null===(e=this._widget)||void 0===e||e.dispose(),null===(t=this._model)||void 0===t||t.dispose(),this._widget=void 0,this._model=void 0}toggleWidget(e,t,i){let n;if(this._widget&&(n=this._widget.position),this.closeWidget(),n&&e.containsPosition(n))return;this._peekMode=i,this._referenceSearchVisible.set(!0),this._disposables.add(this._editor.onDidChangeModelLanguage((()=>{this.closeWidget()}))),this._disposables.add(this._editor.onDidChangeModel((()=>{this._ignoreModelChangeEvent||this.closeWidget()})));const o="peekViewLayout",s=oe.fromJSON(this._storageService.get(o,0,"{}"));this._widget=this._instantiationService.createInstance(re,this._editor,this._defaultTreeKeyboardSupport,s),this._widget.setTitle(h.N("labelLoading","æ­£åœ¨åŠ è½½...")),this._widget.show(e),this._disposables.add(this._widget.onDidClose((()=>{t.cancel(),this._widget&&(this._storageService.store(o,JSON.stringify(this._widget.layoutData),0,1),this._widget=void 0),this.closeWidget()}))),this._disposables.add(this._widget.onDidSelectReference((e=>{let{element:t,kind:n}=e;if(t)switch(n){case"open":"editor"===e.source&&this._configurationService.getValue("editor.stablePeek")||this.openReference(t,!1,!1);break;case"side":this.openReference(t,!0,!1);break;case"goto":i?this._gotoReference(t):this.openReference(t,!1,!0)}})));const r=++this._requestIdPool;t.then((t=>{var i;if(r===this._requestIdPool&&this._widget)return null===(i=this._model)||void 0===i||i.dispose(),this._model=t,this._widget.setModel(this._model).then((()=>{if(this._widget&&this._model&&this._editor.hasModel()){this._model.isEmpty?this._widget.setMetaTitle(""):this._widget.setMetaTitle(h.N("metaTitle.N","{0} ({1})",this._model.title,this._model.references.length));let t=this._editor.getModel().uri,i=new l.L(e.startLineNumber,e.startColumn),n=this._model.nearestReference(t,i);if(n)return this._widget.setSelection(n).then((()=>{this._widget&&"editor"===this._editor.getOption(76)&&this._widget.focusOnPreviewEditor()}))}}));t.dispose()}),(e=>{this._notificationService.error(e)}))}changeFocusBetweenPreviewAndReferences(){this._widget&&(this._widget.isPreviewEditorFocused()?this._widget.focusOnReferenceTree():this._widget.focusOnPreviewEditor())}goToNextOrPreviousReference(e){return ce(this,void 0,void 0,(function*(){if(!this._editor.hasModel()||!this._model||!this._widget)return;const t=this._widget.position;if(!t)return;const i=this._model.nearestReference(this._editor.getModel().uri,t);if(!i)return;const n=this._model.nextOrPreviousReference(i,e),o=this._editor.hasTextFocus(),s=this._widget.isPreviewEditorFocused();yield this._widget.setSelection(n),yield this._gotoReference(n),o?this._editor.focus():this._widget&&s&&this._widget.focusOnPreviewEditor()}))}revealReference(e){return ce(this,void 0,void 0,(function*(){this._editor.hasModel()&&this._model&&this._widget&&(yield this._widget.revealReference(e))}))}closeWidget(e=!0){var t,i;null===(t=this._widget)||void 0===t||t.dispose(),null===(i=this._model)||void 0===i||i.dispose(),this._referenceSearchVisible.reset(),this._disposables.clear(),this._widget=void 0,this._model=void 0,e&&this._editor.focus(),this._requestIdPool+=1}_gotoReference(t){this._widget&&this._widget.hide(),this._ignoreModelChangeEvent=!0;const i=c.e.lift(t.range).collapseToStart();return this._editorService.openCodeEditor({resource:t.uri,options:{selection:i}},this._editor).then((t=>{var o;if(this._ignoreModelChangeEvent=!1,t&&this._widget)if(this._editor===t)this._widget.show(i),this._widget.focusOnReferenceTree();else{const s=e.get(t),r=this._model.clone();this.closeWidget(),t.focus(),s.toggleWidget(i,(0,n.PG)((e=>Promise.resolve(r))),null!==(o=this._peekMode)&&void 0!==o&&o)}else this.closeWidget()}),(e=>{this._ignoreModelChangeEvent=!1,(0,o.dL)(e)}))}openReference(e,t,i){t||this.closeWidget();const{uri:n,range:o}=e;this._editorService.openCodeEditor({resource:n,options:{selection:o,pinned:i}},this._editor,t)}};function ue(e,t){const i=(0,d.rc)(e);if(!i)return;let n=he.get(i);n&&t(n)}he.ID="editor.contrib.referencesController",he=ae([le(2,p.i6),le(3,a.$),le(4,_.lT),le(5,f.TG),le(6,b.Uy),le(7,g.Ui)],he),m.W.registerCommandAndKeybindingRule({id:"togglePeekWidgetFocus",weight:100,primary:(0,s.gx)(2089,60),when:p.Ao.or(de,d.Jy.inPeekEditor),handler(e){ue(e,(e=>{e.changeFocusBetweenPreviewAndReferences()}))}}),m.W.registerCommandAndKeybindingRule({id:"goToNextReference",weight:90,primary:62,secondary:[70],when:p.Ao.or(de,d.Jy.inPeekEditor),handler(e){ue(e,(e=>{e.goToNextOrPreviousReference(!0)}))}}),m.W.registerCommandAndKeybindingRule({id:"goToPreviousReference",weight:90,primary:1086,secondary:[1094],when:p.Ao.or(de,d.Jy.inPeekEditor),handler(e){ue(e,(e=>{e.goToNextOrPreviousReference(!1)}))}}),u.P.registerCommandAlias("goToNextReferenceFromEmbeddedEditor","goToNextReference"),u.P.registerCommandAlias("goToPreviousReferenceFromEmbeddedEditor","goToPreviousReference"),u.P.registerCommandAlias("closeReferenceSearchEditor","closeReferenceSearch"),u.P.registerCommand("closeReferenceSearch",(e=>ue(e,(e=>e.closeWidget())))),m.W.registerKeybindingRule({id:"closeReferenceSearch",weight:-1,primary:9,secondary:[1033],when:p.Ao.and(d.Jy.inPeekEditor,p.Ao.not("config.editor.stablePeek"))}),m.W.registerKeybindingRule({id:"closeReferenceSearch",weight:250,primary:9,secondary:[1033],when:p.Ao.and(de,p.Ao.not("config.editor.stablePeek"))}),m.W.registerCommandAndKeybindingRule({id:"revealReference",weight:200,primary:3,mac:{primary:3,secondary:[2066]},when:p.Ao.and(de,v.CQ),handler(e){var t;const i=null===(t=e.get(v.Lw).lastFocusedList)||void 0===t?void 0:t.getFocus();Array.isArray(i)&&i[0]instanceof w.WX&&ue(e,(e=>e.revealReference(i[0])))}}),m.W.registerCommandAndKeybindingRule({id:"openReferenceToSide",weight:100,primary:2051,mac:{primary:259},when:p.Ao.and(de,v.CQ),handler(e){var t;const i=null===(t=e.get(v.Lw).lastFocusedList)||void 0===t?void 0:t.getFocus();Array.isArray(i)&&i[0]instanceof w.WX&&ue(e,(e=>e.openReference(i[0],!0,!0)))}}),u.P.registerCommand("openReference",(e=>{var t;const i=null===(t=e.get(v.Lw).lastFocusedList)||void 0===t?void 0:t.getFocus();Array.isArray(i)&&i[0]instanceof w.WX&&ue(e,(e=>e.openReference(i[0],!1,!0)))}))},71455:(e,t,i)=>{"use strict";i.d(t,{F2:()=>f,WX:()=>g,oQ:()=>m});var n=i(17301),o=i(4669),s=i(44742),r=i(5976),a=i(43702),l=i(95935),c=i(97295),d=i(24314),h=i(63580),u=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class g{constructor(e,t,i,n){this.isProviderFirst=e,this.parent=t,this.link=i,this._rangeCallback=n,this.id=s.a.nextId()}get uri(){return this.link.uri}get range(){var e,t;return null!==(t=null!==(e=this._range)&&void 0!==e?e:this.link.targetSelectionRange)&&void 0!==t?t:this.link.range}set range(e){this._range=e,this._rangeCallback(this)}get ariaMessage(){var e;const t=null===(e=this.parent.getPreview(this))||void 0===e?void 0:e.preview(this.range);return t?(0,h.N)({key:"aria.oneReference.preview",comment:["Placeholders are: 0: filename, 1:line number, 2: column number, 3: preview snippet of source code"]},"symbol in {0} on line {1} at column {2}, {3}",(0,l.EZ)(this.uri),this.range.startLineNumber,this.range.startColumn,t.value):(0,h.N)("aria.oneReference","symbol in {0} on line {1} at column {2}",(0,l.EZ)(this.uri),this.range.startLineNumber,this.range.startColumn)}}class p{constructor(e){this._modelReference=e}dispose(){this._modelReference.dispose()}preview(e,t=8){const i=this._modelReference.object.textEditorModel;if(!i)return;const{startLineNumber:n,startColumn:o,endLineNumber:s,endColumn:r}=e,a=i.getWordUntilPosition({lineNumber:n,column:o-t}),l=new d.e(n,a.startColumn,n,o),c=new d.e(s,r,s,1073741824),h=i.getValueInRange(l).replace(/^\s+/,""),u=i.getValueInRange(e);return{value:h+u+i.getValueInRange(c).replace(/\s+$/,""),highlight:{start:h.length,end:h.length+u.length}}}}class f{constructor(e,t){this.parent=e,this.uri=t,this.children=[],this._previews=new a.Y9}dispose(){(0,r.B9)(this._previews.values()),this._previews.clear()}getPreview(e){return this._previews.get(e.uri)}get ariaMessage(){const e=this.children.length;return 1===e?(0,h.N)("aria.fileReferences.1","1 symbol in {0}, full path {1}",(0,l.EZ)(this.uri),this.uri.fsPath):(0,h.N)("aria.fileReferences.N","{0} symbols in {1}, full path {2}",e,(0,l.EZ)(this.uri),this.uri.fsPath)}resolve(e){return u(this,void 0,void 0,(function*(){if(0!==this._previews.size)return this;for(let t of this.children)if(!this._previews.has(t.uri))try{const i=yield e.createModelReference(t.uri);this._previews.set(t.uri,new p(i))}catch(e){(0,n.dL)(e)}return this}))}}class m{constructor(e,t){this.groups=[],this.references=[],this._onDidChangeReferenceRange=new o.Q5,this.onDidChangeReferenceRange=this._onDidChangeReferenceRange.event,this._links=e,this._title=t;const[i]=e;let n;e.sort(m._compareReferences);for(let t of e)if(n&&l.SF.isEqual(n.uri,t.uri,!0)||(n=new f(this,t.uri),this.groups.push(n)),0===n.children.length||0!==m._compareReferences(t,n.children[n.children.length-1])){const e=new g(i===t,n,t,(e=>this._onDidChangeReferenceRange.fire(e)));this.references.push(e),n.children.push(e)}}dispose(){(0,r.B9)(this.groups),this._onDidChangeReferenceRange.dispose(),this.groups.length=0}clone(){return new m(this._links,this._title)}get title(){return this._title}get isEmpty(){return 0===this.groups.length}get ariaMessage(){return this.isEmpty?(0,h.N)("aria.result.0","No results found"):1===this.references.length?(0,h.N)("aria.result.1","æ‰¾åˆ° 1 symbol in {0}",this.references[0].uri.fsPath):1===this.groups.length?(0,h.N)("aria.result.n1","æ‰¾åˆ° {0} symbols in {1}",this.references.length,this.groups[0].uri.fsPath):(0,h.N)("aria.result.nm","æ‰¾åˆ° {0} symbols in {1} files",this.references.length,this.groups.length)}nextOrPreviousReference(e,t){let{parent:i}=e,n=i.children.indexOf(e),o=i.children.length,s=i.parent.groups.length;return 1===s||t&&n+1<o||!t&&n>0?(n=t?(n+1)%o:(n+o-1)%o,i.children[n]):(n=i.parent.groups.indexOf(i),t?(n=(n+1)%s,i.parent.groups[n].children[0]):(n=(n+s-1)%s,i.parent.groups[n].children[i.parent.groups[n].children.length-1]))}nearestReference(e,t){const i=this.references.map(((i,n)=>({idx:n,prefixLen:c.Mh(i.uri.toString(),e.toString()),offsetDist:100*Math.abs(i.range.startLineNumber-t.lineNumber)+Math.abs(i.range.startColumn-t.column)}))).sort(((e,t)=>e.prefixLen>t.prefixLen?-1:e.prefixLen<t.prefixLen?1:e.offsetDist<t.offsetDist?-1:e.offsetDist>t.offsetDist?1:0))[0];if(i)return this.references[i.idx]}referenceAt(e,t){for(const i of this.references)if(i.uri.toString()===e.toString()&&d.e.containsPosition(i.range,t))return i}firstReference(){for(const e of this.references)if(e.isProviderFirst)return e;return this.references[0]}static _compareReferences(e,t){return l.SF.compare(e.uri,t.uri)||d.e.compareRangesUsingStarts(e.range,t.range)}}},67247:(e,t,i)=>{"use strict";i.r(t),i.d(t,{ModesHoverController:()=>Ue});var n=i(22258),o=i(5976),s=i(16830),r=i(24314),a=i(29102),l=i(71531),c=i(10365),d=i(65321),h=i(9802);i(17535);const u=d.$;class g extends o.JT{constructor(){super(),this.containerDomNode=document.createElement("div"),this.containerDomNode.className="monaco-hover",this.containerDomNode.tabIndex=0,this.containerDomNode.setAttribute("role","tooltip"),this.contentsDomNode=document.createElement("div"),this.contentsDomNode.className="monaco-hover-content",this._scrollbar=this._register(new h.s$(this.contentsDomNode,{consumeMouseWheelIfScrollbarIsNeeded:!0})),this.containerDomNode.appendChild(this._scrollbar.getDomNode())}onContentsChanged(){this._scrollbar.scanDomNode()}}class p extends o.JT{constructor(e,t,i){super(),this.actionContainer=d.R3(e,u("div.action-container")),this.action=d.R3(this.actionContainer,u("a.action")),this.action.setAttribute("href","#"),this.action.setAttribute("role","button"),t.iconClass&&d.R3(this.action,u(`span.icon.${t.iconClass}`));d.R3(this.action,u("span")).textContent=i?`${t.label} (${i})`:t.label,this._register(d.nm(this.actionContainer,d.tw.MOUSE_DOWN,(e=>{e.stopPropagation(),e.preventDefault(),t.run(this.actionContainer)}))),this.setEnabled(!0)}static render(e,t,i){return new p(e,t,i)}setEnabled(e){e?(this.actionContainer.classList.remove("disabled"),this.actionContainer.removeAttribute("aria-disabled")):(this.actionContainer.classList.add("disabled"),this.actionContainer.setAttribute("aria-disabled","true"))}}var f=i(93794),m=i(9488),v=i(50187),_=i(44174),b=i(44101),w=i(71050),y=i(41264),C=i(83308),x=i(64494),S=i(4669);class k{constructor(e,t,i){this.presentationIndex=i,this._onColorFlushed=new S.Q5,this.onColorFlushed=this._onColorFlushed.event,this._onDidChangeColor=new S.Q5,this.onDidChangeColor=this._onDidChangeColor.event,this._onDidChangePresentation=new S.Q5,this.onDidChangePresentation=this._onDidChangePresentation.event,this.originalColor=e,this._color=e,this._colorPresentations=t}get color(){return this._color}set color(e){this._color.equals(e)||(this._color=e,this._onDidChangeColor.fire(e))}get presentation(){return this.colorPresentations[this.presentationIndex]}get colorPresentations(){return this._colorPresentations}set colorPresentations(e){this._colorPresentations=e,this.presentationIndex>e.length-1&&(this.presentationIndex=0),this._onDidChangePresentation.fire(this.presentation)}selectNextColorPresentation(){this.presentationIndex=(this.presentationIndex+1)%this.colorPresentations.length,this.flushColor(),this._onDidChangePresentation.fire(this.presentation)}guessColorPresentation(e,t){for(let e=0;e<this.colorPresentations.length;e++)if(t.toLowerCase()===this.colorPresentations[e].label){this.presentationIndex=e,this._onDidChangePresentation.fire(this.presentation);break}}flushColor(){this._onColorFlushed.fire(this._color)}}var L=i(16268),N=i(57974),D=(i(85290),i(63580)),I=i(73910),E=i(97781);const T=d.$;class M extends o.JT{constructor(e,t,i){super(),this.model=t,this.domNode=T(".colorpicker-header"),d.R3(e,this.domNode),this.pickedColorNode=d.R3(this.domNode,T(".picked-color"));const n=(0,D.N)("clickToToggleColorOptions","Click to toggle color options (rgb/hsl/hex)");this.pickedColorNode.setAttribute("title",n);const o=d.R3(this.domNode,T(".original-color"));o.style.backgroundColor=y.Il.Format.CSS.format(this.model.originalColor)||"",this.backgroundColor=i.getColorTheme().getColor(I.yJ)||y.Il.white,this._register((0,E.Ic)(((e,t)=>{this.backgroundColor=e.getColor(I.yJ)||y.Il.white}))),this._register(d.nm(this.pickedColorNode,d.tw.CLICK,(()=>this.model.selectNextColorPresentation()))),this._register(d.nm(o,d.tw.CLICK,(()=>{this.model.color=this.model.originalColor,this.model.flushColor()}))),this._register(t.onDidChangeColor(this.onDidChangeColor,this)),this._register(t.onDidChangePresentation(this.onDidChangePresentation,this)),this.pickedColorNode.style.backgroundColor=y.Il.Format.CSS.format(t.color)||"",this.pickedColorNode.classList.toggle("light",t.color.rgba.a<.5?this.backgroundColor.isLighter():t.color.isLighter())}onDidChangeColor(e){this.pickedColorNode.style.backgroundColor=y.Il.Format.CSS.format(e)||"",this.pickedColorNode.classList.toggle("light",e.rgba.a<.5?this.backgroundColor.isLighter():e.isLighter()),this.onDidChangePresentation()}onDidChangePresentation(){this.pickedColorNode.textContent=this.model.presentation?this.model.presentation.label:"",this.pickedColorNode.prepend(T(".codicon.codicon-color-mode"))}}class A extends o.JT{constructor(e,t,i){super(),this.model=t,this.pixelRatio=i,this.domNode=T(".colorpicker-body"),d.R3(e,this.domNode),this.saturationBox=new O(this.domNode,this.model,this.pixelRatio),this._register(this.saturationBox),this._register(this.saturationBox.onDidChange(this.onDidSaturationValueChange,this)),this._register(this.saturationBox.onColorFlushed(this.flushColor,this)),this.opacityStrip=new R(this.domNode,this.model),this._register(this.opacityStrip),this._register(this.opacityStrip.onDidChange(this.onDidOpacityChange,this)),this._register(this.opacityStrip.onColorFlushed(this.flushColor,this)),this.hueStrip=new F(this.domNode,this.model),this._register(this.hueStrip),this._register(this.hueStrip.onDidChange(this.onDidHueChange,this)),this._register(this.hueStrip.onColorFlushed(this.flushColor,this))}flushColor(){this.model.flushColor()}onDidSaturationValueChange({s:e,v:t}){const i=this.model.color.hsva;this.model.color=new y.Il(new y.tx(i.h,e,t,i.a))}onDidOpacityChange(e){const t=this.model.color.hsva;this.model.color=new y.Il(new y.tx(t.h,t.s,t.v,e))}onDidHueChange(e){const t=this.model.color.hsva,i=360*(1-e);this.model.color=new y.Il(new y.tx(360===i?0:i,t.s,t.v,t.a))}layout(){this.saturationBox.layout(),this.opacityStrip.layout(),this.hueStrip.layout()}}class O extends o.JT{constructor(e,t,i){super(),this.model=t,this.pixelRatio=i,this._onDidChange=new S.Q5,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new S.Q5,this.onColorFlushed=this._onColorFlushed.event,this.domNode=T(".saturation-wrap"),d.R3(e,this.domNode),this.canvas=document.createElement("canvas"),this.canvas.className="saturation-box",d.R3(this.domNode,this.canvas),this.selection=T(".saturation-selection"),d.R3(this.domNode,this.selection),this.layout(),this._register(d.Lo(this.domNode,(e=>this.onMouseDown(e)))),this._register(this.model.onDidChangeColor(this.onDidChangeColor,this)),this.monitor=null}onMouseDown(e){this.monitor=this._register(new N.Z);const t=d.i(this.domNode);e.target!==this.selection&&this.onDidChangePosition(e.offsetX,e.offsetY),this.monitor.startMonitoring(e.target,e.buttons,N.e,(e=>this.onDidChangePosition(e.posx-t.left,e.posy-t.top)),(()=>null));const i=d.qV(document,(()=>{this._onColorFlushed.fire(),i.dispose(),this.monitor&&(this.monitor.stopMonitoring(!0),this.monitor=null)}),!0)}onDidChangePosition(e,t){const i=Math.max(0,Math.min(1,e/this.width)),n=Math.max(0,Math.min(1,1-t/this.height));this.paintSelection(i,n),this._onDidChange.fire({s:i,v:n})}layout(){this.width=this.domNode.offsetWidth,this.height=this.domNode.offsetHeight,this.canvas.width=this.width*this.pixelRatio,this.canvas.height=this.height*this.pixelRatio,this.paint();const e=this.model.color.hsva;this.paintSelection(e.s,e.v)}paint(){const e=this.model.color.hsva,t=new y.Il(new y.tx(e.h,1,1,1)),i=this.canvas.getContext("2d"),n=i.createLinearGradient(0,0,this.canvas.width,0);n.addColorStop(0,"rgba(255, 255, 255, 1)"),n.addColorStop(.5,"rgba(255, 255, 255, 0.5)"),n.addColorStop(1,"rgba(255, 255, 255, 0)");const o=i.createLinearGradient(0,0,0,this.canvas.height);o.addColorStop(0,"rgba(0, 0, 0, 0)"),o.addColorStop(1,"rgba(0, 0, 0, 1)"),i.rect(0,0,this.canvas.width,this.canvas.height),i.fillStyle=y.Il.Format.CSS.format(t),i.fill(),i.fillStyle=n,i.fill(),i.fillStyle=o,i.fill()}paintSelection(e,t){this.selection.style.left=e*this.width+"px",this.selection.style.top=this.height-t*this.height+"px"}onDidChangeColor(){this.monitor&&this.monitor.isMonitoring()||this.paint()}}class P extends o.JT{constructor(e,t){super(),this.model=t,this._onDidChange=new S.Q5,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new S.Q5,this.onColorFlushed=this._onColorFlushed.event,this.domNode=d.R3(e,T(".strip")),this.overlay=d.R3(this.domNode,T(".overlay")),this.slider=d.R3(this.domNode,T(".slider")),this.slider.style.top="0px",this._register(d.Lo(this.domNode,(e=>this.onMouseDown(e)))),this.layout()}layout(){this.height=this.domNode.offsetHeight-this.slider.offsetHeight;const e=this.getValue(this.model.color);this.updateSliderPosition(e)}onMouseDown(e){const t=this._register(new N.Z),i=d.i(this.domNode);this.domNode.classList.add("grabbing"),e.target!==this.slider&&this.onDidChangeTop(e.offsetY),t.startMonitoring(e.target,e.buttons,N.e,(e=>this.onDidChangeTop(e.posy-i.top)),(()=>null));const n=d.qV(document,(()=>{this._onColorFlushed.fire(),n.dispose(),t.stopMonitoring(!0),this.domNode.classList.remove("grabbing")}),!0)}onDidChangeTop(e){const t=Math.max(0,Math.min(1,1-e/this.height));this.updateSliderPosition(t),this._onDidChange.fire(t)}updateSliderPosition(e){this.slider.style.top=(1-e)*this.height+"px"}}class R extends P{constructor(e,t){super(e,t),this.domNode.classList.add("opacity-strip"),this._register(t.onDidChangeColor(this.onDidChangeColor,this)),this.onDidChangeColor(this.model.color)}onDidChangeColor(e){const{r:t,g:i,b:n}=e.rgba,o=new y.Il(new y.VS(t,i,n,1)),s=new y.Il(new y.VS(t,i,n,0));this.overlay.style.background=`linear-gradient(to bottom, ${o} 0%, ${s} 100%)`}getValue(e){return e.hsva.a}}class F extends P{constructor(e,t){super(e,t),this.domNode.classList.add("hue-strip")}getValue(e){return 1-e.hsva.h/360}}class B extends f.${constructor(e,t,i,n){super(),this.model=t,this.pixelRatio=i,this._register((0,L.fX)((()=>this.layout())));const o=T(".colorpicker-widget");e.appendChild(o);const s=new M(o,this.model,n);this.body=new A(o,this.model,this.pixelRatio),this._register(s),this._register(this.body)}layout(){this.body.layout()}}var V=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},W=function(e,t){return function(i,n){t(i,n,e)}},H=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class z{constructor(e,t,i,n){this.owner=e,this.range=t,this.model=i,this.provider=n,this.forceShowAtRange=!0}isValidForHoverAnchor(e){return 1===e.type&&this.range.startColumn<=e.range.startColumn&&this.range.endColumn>=e.range.endColumn}}let j=class{constructor(e,t,i){this._editor=e,this._hover=t,this._themeService=i}computeSync(e,t){return[]}computeAsync(e,t,i){return H(this,void 0,void 0,(function*(){if(!this._editor.hasModel())return[];const e=x.i.get(this._editor);for(const i of t){if("color-detector-color"!==i.options.description)continue;const t=e.getColorData(i.range.getStartPosition());if(t){return[yield this._createColorHover(this._editor.getModel(),t.colorInfo,t.provider)]}}return[]}))}_createColorHover(e,t,i){return H(this,void 0,void 0,(function*(){const n=e.getValueInRange(t.range),{red:o,green:s,blue:a,alpha:l}=t.color,c=new y.VS(Math.round(255*o),Math.round(255*s),Math.round(255*a),l),d=new y.Il(c),h=yield(0,C.R)(e,t,i,w.T.None),u=new k(d,[],0);return u.colorPresentations=h||[],u.guessColorPresentation(d,n),new z(this,r.e.lift(t.range),u,i)}))}renderHoverParts(e,t,i){if(0===e.length||!this._editor.hasModel())return o.JT.None;const n=new o.SL,s=e[0],a=this._editor.getModel(),l=s.model,c=n.add(new B(t,l,this._editor.getOption(127),this._themeService));let d=new r.e(s.range.startLineNumber,s.range.startColumn,s.range.endLineNumber,s.range.endColumn);const h=()=>{let e,t;if(l.presentation.textEdit){e=[l.presentation.textEdit],t=new r.e(l.presentation.textEdit.range.startLineNumber,l.presentation.textEdit.range.startColumn,l.presentation.textEdit.range.endLineNumber,l.presentation.textEdit.range.endColumn);const i=this._editor.getModel()._setTrackedRange(null,t,3);this._editor.pushUndoStop(),this._editor.executeEdits("colorpicker",e),t=this._editor.getModel()._getTrackedRange(i)||t}else e=[{identifier:null,range:d,text:l.presentation.label,forceMoveMarkers:!1}],t=d.setEndPosition(d.endLineNumber,d.startColumn+l.presentation.label.length),this._editor.pushUndoStop(),this._editor.executeEdits("colorpicker",e);l.presentation.additionalTextEdits&&(e=[...l.presentation.additionalTextEdits],this._editor.executeEdits("colorpicker",e),this._hover.hide()),this._editor.pushUndoStop(),d=t},u=e=>(0,C.R)(a,{range:d,color:{red:e.rgba.r/255,green:e.rgba.g/255,blue:e.rgba.b/255,alpha:e.rgba.a}},s.provider,w.T.None).then((e=>{l.colorPresentations=e||[]}));return n.add(l.onColorFlushed((e=>{u(e).then(h)}))),n.add(l.onDidChangeColor(u)),this._hover.setColorPicker(c),n}};j=V([W(2,E.XE)],j);var U=i(15393),$=i(17301);class K{constructor(e,t,i,n,o){this._computer=e,this._state=0,this._hoverTime=o,this._firstWaitScheduler=new U.pY((()=>this._triggerAsyncComputation()),0),this._secondWaitScheduler=new U.pY((()=>this._triggerSyncComputation()),0),this._loadingMessageScheduler=new U.pY((()=>this._showLoadingMessage()),0),this._asyncComputationPromise=null,this._asyncComputationPromiseDone=!1,this._completeCallback=t,this._errorCallback=i,this._progressCallback=n}setHoverTime(e){this._hoverTime=e}_firstWaitTime(){return this._hoverTime/2}_secondWaitTime(){return this._hoverTime/2}_loadingMessageTime(){return 3*this._hoverTime}_triggerAsyncComputation(){this._state=2,this._secondWaitScheduler.schedule(this._secondWaitTime()),this._computer.computeAsync?(this._asyncComputationPromiseDone=!1,this._asyncComputationPromise=(0,U.PG)((e=>this._computer.computeAsync(e))),this._asyncComputationPromise.then((e=>{this._asyncComputationPromiseDone=!0,this._withAsyncResult(e)}),(e=>this._onError(e)))):this._asyncComputationPromiseDone=!0}_triggerSyncComputation(){this._computer.computeSync&&this._computer.onResult(this._computer.computeSync(),!0),this._asyncComputationPromiseDone?(this._state=0,this._onComplete(this._computer.getResult())):(this._state=3,this._onProgress(this._computer.getResult()))}_showLoadingMessage(){3===this._state&&this._onProgress(this._computer.getResultWithLoadingMessage())}_withAsyncResult(e){e&&this._computer.onResult(e,!1),3===this._state&&(this._state=0,this._onComplete(this._computer.getResult()))}_onComplete(e){this._completeCallback(e)}_onError(e){this._errorCallback?this._errorCallback(e):(0,$.dL)(e)}_onProgress(e){this._progressCallback(e)}start(e){if(0===e)0===this._state&&(this._state=1,this._firstWaitScheduler.schedule(this._firstWaitTime()),this._loadingMessageScheduler.schedule(this._loadingMessageTime()));else switch(this._state){case 0:this._triggerAsyncComputation(),this._secondWaitScheduler.cancel(),this._triggerSyncComputation();break;case 2:this._secondWaitScheduler.cancel(),this._triggerSyncComputation()}}cancel(){this._loadingMessageScheduler.cancel(),1===this._state&&this._firstWaitScheduler.cancel(),2===this._state&&(this._secondWaitScheduler.cancel(),this._asyncComputationPromise&&(this._asyncComputationPromise.cancel(),this._asyncComputationPromise=null)),3===this._state&&this._asyncComputationPromise&&(this._asyncComputationPromise.cancel(),this._asyncComputationPromise=null),this._state=0}}class q{constructor(e,t){this.priority=e,this.range=t,this.type=1}equals(e){return 1===e.type&&this.range.equalsRange(e.range)}canAdoptVisibleHover(e,t){return 1===e.type&&t.lineNumber===this.range.startLineNumber}}class Z{constructor(e,t,i){this.priority=e,this.owner=t,this.range=i,this.type=2}equals(e){return 2===e.type&&this.owner===e.owner}canAdoptVisibleHover(e,t){return 2===e.type&&this.owner===e.owner}}var G=i(59365),Y=i(43256);function Q(e,t,i){const n=b.xp.ordered(e).map((n=>Promise.resolve(n.provideHover(e,t,i)).then((e=>e&&function(e){const t=void 0!==e.range,i=void 0!==e.contents&&e.contents&&e.contents.length>0;return t&&i}(e)?e:void 0),(e=>{(0,$.Cp)(e)}))));return Promise.all(n).then(m.kX)}(0,s.sb)("_executeHoverProvider",((e,t)=>Q(e,t,w.T.None)));var X=i(33108),J=i(50988),ee=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},te=function(e,t){return function(i,n){t(i,n,e)}},ie=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const ne=d.$;class oe{constructor(e,t,i){this.owner=e,this.range=t,this.contents=i}isValidForHoverAnchor(e){return 1===e.type&&this.range.startColumn<=e.range.startColumn&&this.range.endColumn>=e.range.endColumn}}let se=class{constructor(e,t,i,n,o){this._editor=e,this._hover=t,this._modeService=i,this._openerService=n,this._configurationService=o}createLoadingMessage(e){return new oe(this,e.range,[(new G.W5).appendText(D.N("modesContentHover.loading","æ­£åœ¨åŠ è½½..."))])}computeSync(e,t){if(!this._editor.hasModel()||1!==e.type)return[];const i=this._editor.getModel(),n=e.range.startLineNumber,o=i.getLineMaxColumn(n),s=[];for(const i of t){const t=i.range.startLineNumber===n?i.range.startColumn:1,a=i.range.endLineNumber===n?i.range.endColumn:o,l=i.options.hoverMessage;if(!l||(0,G.CP)(l))continue;const c=new r.e(e.range.startLineNumber,t,e.range.startLineNumber,a);s.push(new oe(this,c,(0,m._2)(l)))}const a=i.getLineLength(n),l=i.getLanguageIdAtPosition(e.range.startLineNumber,e.range.startColumn),c=this._configurationService.getValue("editor.maxTokenizationLineLength",{overrideIdentifier:l});return"number"==typeof c&&a>=c&&s.push(new oe(this,e.range,[{value:D.N("too many characters","Tokenization is skipped for long lines for performance reasons. This can be configured via `editor.maxTokenizationLineLength`.")}])),s}computeAsync(e,t,i){return ie(this,void 0,void 0,(function*(){if(!this._editor.hasModel()||1!==e.type)return Promise.resolve([]);const t=this._editor.getModel();if(!b.xp.has(t))return Promise.resolve([]);const n=yield Q(t,new v.L(e.range.startLineNumber,e.range.startColumn),i),o=[];for(const t of n){if((0,G.CP)(t.contents))continue;const i=t.range?r.e.lift(t.range):e.range;o.push(new oe(this,i,t.contents))}return o}))}renderHoverParts(e,t,i){const n=new o.SL;for(const i of e)for(const e of i.contents){if((0,G.CP)(e))continue;const i=ne("div.hover-row.markdown-hover"),o=d.R3(i,ne("div.hover-contents")),s=n.add(new Y.$({editor:this._editor},this._modeService,this._openerService));n.add(s.onDidRenderAsync((()=>{o.className="hover-contents code-hover-contents",this._hover.onContentsChanged()})));const r=n.add(s.render(e));o.appendChild(r.element),t.appendChild(i)}return n}};se=ee([te(2,l.h),te(3,J.v4),te(4,X.Ui)],se);var re=i(95935),ae=i(26479),le=i(31907),ce=i(23674),de=i(89532),he=i(42698),ue=i(98674),ge=i(90535),pe=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},fe=function(e,t){return function(i,n){t(i,n,e)}};const me=d.$;class ve{constructor(e,t,i){this.owner=e,this.range=t,this.marker=i}isValidForHoverAnchor(e){return 1===e.type&&this.range.startColumn<=e.range.startColumn&&this.range.endColumn>=e.range.endColumn}}const _e={type:1,filter:{include:de.yN.QuickFix}};let be=class{constructor(e,t,i,n){this._editor=e,this._hover=t,this._markerDecorationsService=i,this._openerService=n,this.recentMarkerCodeActionsInfo=void 0}computeSync(e,t){if(!this._editor.hasModel()||1!==e.type)return[];const i=this._editor.getModel(),n=e.range.startLineNumber,o=i.getLineMaxColumn(n),s=[];for(const a of t){const t=a.range.startLineNumber===n?a.range.startColumn:1,l=a.range.endLineNumber===n?a.range.endColumn:o,c=this._markerDecorationsService.getMarker(i.uri,a);if(!c)continue;const d=new r.e(e.range.startLineNumber,t,e.range.startLineNumber,l);s.push(new ve(this,d,c))}return s}renderHoverParts(e,t,i){if(!e.length)return o.JT.None;const n=new o.SL;e.forEach((e=>t.appendChild(this.renderMarkerHover(e,n))));const s=1===e.length?e[0]:e.sort(((e,t)=>ue.ZL.compare(e.marker.severity,t.marker.severity)))[0];return this.renderMarkerStatusbar(s,i,n),n}renderMarkerHover(e,t){const i=me("div.hover-row"),n=d.R3(i,me("div.marker.hover-contents")),{source:o,message:s,code:r,relatedInformation:a}=e.marker;this._editor.applyFontInfo(n);const l=d.R3(n,me("span"));if(l.style.whiteSpace="pre-wrap",l.innerText=s,o||r)if(r&&"string"!=typeof r){const e=me("span");if(o){d.R3(e,me("span")).innerText=o}const i=d.R3(e,me("a.code-link"));i.setAttribute("href",r.target.toString()),t.add(d.nm(i,"click",(e=>{this._openerService.open(r.target,{allowCommands:!0}),e.preventDefault(),e.stopPropagation()})));d.R3(i,me("span")).innerText=r.value;const s=d.R3(n,e);s.style.opacity="0.6",s.style.paddingLeft="6px"}else{const e=d.R3(n,me("span"));e.style.opacity="0.6",e.style.paddingLeft="6px",e.innerText=o&&r?`${o}(${r})`:o||`(${r})`}if((0,m.Of)(a))for(const{message:e,resource:i,startLineNumber:o,startColumn:s}of a){const r=d.R3(n,me("div"));r.style.marginTop="8px";const a=d.R3(r,me("a"));a.innerText=`${(0,re.EZ)(i)}(${o}, ${s}): `,a.style.cursor="pointer",t.add(d.nm(a,"click",(e=>{e.stopPropagation(),e.preventDefault(),this._openerService&&this._openerService.open(i,{fromUserGesture:!0,editorOptions:{selection:{startLineNumber:o,startColumn:s}}}).catch($.dL)})));const l=d.R3(r,me("span"));l.innerText=e,this._editor.applyFontInfo(l)}return i}renderMarkerStatusbar(e,t,i){if(e.marker.severity!==ue.ZL.Error&&e.marker.severity!==ue.ZL.Warning&&e.marker.severity!==ue.ZL.Info||t.addAction({label:D.N("view problem","View Problem"),commandId:he.NextMarkerAction.ID,run:()=>{this._hover.hide(),he.MarkerController.get(this._editor).showAtMarker(e.marker),this._editor.focus()}}),!this._editor.getOption(80)){const n=t.append(me("div"));this.recentMarkerCodeActionsInfo&&(ue.H0.makeKey(this.recentMarkerCodeActionsInfo.marker)===ue.H0.makeKey(e.marker)?this.recentMarkerCodeActionsInfo.hasCodeActions||(n.textContent=D.N("noQuickFixes","No quick fixes available")):this.recentMarkerCodeActionsInfo=void 0);const s=this.recentMarkerCodeActionsInfo&&!this.recentMarkerCodeActionsInfo.hasCodeActions?o.JT.None:i.add((0,U.Vg)((()=>n.textContent=D.N("checkingForQuickFixes","Checking for quick fixes...")),200));n.textContent||(n.textContent=String.fromCharCode(160));const r=this.getCodeActions(e.marker);i.add((0,o.OF)((()=>r.cancel()))),r.then((r=>{if(s.dispose(),this.recentMarkerCodeActionsInfo={marker:e.marker,hasCodeActions:r.validActions.length>0},!this.recentMarkerCodeActionsInfo.hasCodeActions)return r.dispose(),void(n.textContent=D.N("noQuickFixes","No quick fixes available"));n.style.display="none";let a=!1;i.add((0,o.OF)((()=>{a||r.dispose()}))),t.addAction({label:D.N("quick fixes","Quick Fix..."),commandId:ce.E7.Id,run:e=>{a=!0;const t=ce.pY.get(this._editor),i=d.i(e);this._hover.hide(),t.showCodeActions(_e,r,{x:i.left+6,y:i.top+i.height+6})}})}),$.dL)}}getCodeActions(e){return(0,U.PG)((t=>(0,le.aI)(this._editor.getModel(),new r.e(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn),_e,ge.E.None,t)))}};be=pe([fe(2,ae.i),fe(3,J.v4)],be),(0,E.Ic)(((e,t)=>{const i=e.getColor(I.ur);i&&t.addRule(`.monaco-hover .hover-contents a.code-link span { color: ${i}; }`);const n=e.getColor(I.sg);n&&t.addRule(`.monaco-hover .hover-contents a.code-link span:hover { color: ${n}; }`)}));var we=i(43818),ye=i(31106),Ce=i(84144),xe=i(94565),Se=i(38819),ke=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Le=function(e,t){return function(i,n){t(i,n,e)}};class Ne{constructor(e,t,i){this.owner=e,this.range=t,this.controller=i}isValidForHoverAnchor(e){return 1===e.type&&this.range.startColumn<=e.range.startColumn&&this.range.endColumn>=e.range.endColumn}hasMultipleSuggestions(){return this.controller.hasMultipleInlineCompletions()}}let De=class{constructor(e,t,i,n,o,s,r,a){this._editor=e,this._hover=t,this._commandService=i,this._menuService=n,this._contextKeyService=o,this._modeService=s,this._openerService=r,this.accessibilityService=a}suggestHoverAnchor(e){const t=we.GhostTextController.get(this._editor);if(!t)return null;if(8===e.target.type){const i=e.target.detail;if(t.shouldShowHoverAtViewZone(i.viewZoneId))return new Z(1e3,this,r.e.fromPositions(i.positionBefore||i.position,i.positionBefore||i.position))}if(7===e.target.type&&e.target.range&&t.shouldShowHoverAt(e.target.range))return new Z(1e3,this,e.target.range);if(6===e.target.type&&e.target.range&&e.target.detail){if(e.target.detail.mightBeForeignElement&&t.shouldShowHoverAt(e.target.range))return new Z(1e3,this,e.target.range)}return null}computeSync(e,t){const i=we.GhostTextController.get(this._editor);return i&&i.shouldShowHoverAt(e.range)?[new Ne(this,e.range,i)]:[]}renderHoverParts(e,t,i){const n=new o.SL,s=e[0];this.accessibilityService.isScreenReaderOptimized()&&this.renderScreenReaderText(s,t,n);const r=n.add(this._menuService.createMenu(Ce.eH.InlineCompletionsActions,this._contextKeyService)),a=i.addAction({label:D.N("showNextInlineSuggestion","Next"),commandId:we.ShowNextInlineSuggestionAction.ID,run:()=>this._commandService.executeCommand(we.ShowNextInlineSuggestionAction.ID)}),l=i.addAction({label:D.N("showPreviousInlineSuggestion","Previous"),commandId:we.ShowPreviousInlineSuggestionAction.ID,run:()=>this._commandService.executeCommand(we.ShowPreviousInlineSuggestionAction.ID)});i.addAction({label:D.N("acceptInlineSuggestion","Accept"),commandId:we.commitInlineSuggestionAction.id,run:()=>this._commandService.executeCommand(we.commitInlineSuggestionAction.id)});const c=[a,l];for(const e of c)e.setEnabled(!1);s.hasMultipleSuggestions().then((e=>{for(const t of c)t.setEnabled(e)}));for(const[e,t]of r.getActions())for(const e of t)e instanceof Ce.U8&&i.addAction({label:e.label,commandId:e.item.id,run:()=>this._commandService.executeCommand(e.item.id)});return n}renderScreenReaderText(e,t,i){var n,o;const s=d.$,r=s("div.hover-row.markdown-hover"),a=d.R3(r,s("div.hover-contents")),l=i.add(new Y.$({editor:this._editor},this._modeService,this._openerService)),c=e=>{i.add(l.onDidRenderAsync((()=>{a.className="hover-contents code-hover-contents",this._hover.onContentsChanged()})));const t=D.N("inlineSuggestionFollows","Suggestion:"),n=i.add(l.render((new G.W5).appendText(t).appendCodeblock("text",e)));a.replaceChildren(n.element)},h=null===(o=null===(n=e.controller.activeModel)||void 0===n?void 0:n.inlineCompletionsModel)||void 0===o?void 0:o.ghostText;if(h){const e=this._editor.getModel().getLineContent(h.lineNumber);c(h.renderForScreenReader(e))}t.appendChild(r)}};De=ke([Le(2,xe.H),Le(3,Ce.co),Le(4,Se.i6),Le(5,l.h),Le(6,J.v4),Le(7,ye.F)],De);var Ie=i(72065),Ee=i(91847),Te=i(79599),Me=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Ae=function(e,t){return function(i,n){t(i,n,e)}},Oe=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const Pe=d.$;let Re=class extends o.JT{constructor(e){super(),this._keybindingService=e,this._hasContent=!1,this.hoverElement=Pe("div.hover-row.status-bar"),this.actionsElement=d.R3(this.hoverElement,Pe("div.actions"))}get hasContent(){return this._hasContent}addAction(e){const t=this._keybindingService.lookupKeybinding(e.commandId),i=t?t.getLabel():null;return this._hasContent=!0,this._register(p.render(this.actionsElement,e,i))}append(e){const t=d.R3(this.actionsElement,e);return this._hasContent=!0,t}};Re=Me([Ae(0,Ee.d)],Re);class Fe{constructor(e,t){this._participants=t,this._editor=e,this._result=[],this._anchor=null}setAnchor(e){this._anchor=e,this._result=[]}clearResult(){this._result=[]}static _getLineDecorations(e,t){if(1!==t.type)return[];const i=e.getModel(),n=t.range.startLineNumber,o=i.getLineMaxColumn(n);return e.getLineDecorations(n).filter((e=>{if(e.options.isWholeLine)return!0;const i=e.range.startLineNumber===n?e.range.startColumn:1,s=e.range.endLineNumber===n?e.range.endColumn:o;return!(i>t.range.startColumn||t.range.endColumn>s)}))}computeAsync(e){return Oe(this,void 0,void 0,(function*(){const t=this._anchor;if(!this._editor.hasModel()||!t)return Promise.resolve([]);const i=Fe._getLineDecorations(this._editor,t),n=yield Promise.all(this._participants.map((n=>this._computeAsync(n,i,t,e))));return(0,m.xH)(n)}))}_computeAsync(e,t,i,n){return Oe(this,void 0,void 0,(function*(){return e.computeAsync?e.computeAsync(i,t,n):[]}))}computeSync(){if(!this._editor.hasModel()||!this._anchor)return[];const e=Fe._getLineDecorations(this._editor,this._anchor);let t=[];for(const i of this._participants)t=t.concat(i.computeSync(this._anchor,e));return(0,m.kX)(t)}onResult(e,t){this._result=t?e.concat(this._result):this._result.concat(e)}getResult(){return this._result.slice(0)}getResultWithLoadingMessage(){if(this._anchor)for(const e of this._participants)if(e.createLoadingMessage){const t=e.createLoadingMessage(this._anchor);if(t)return this._result.slice(0).concat([t])}return this._result.slice(0)}}let Be=class e extends f.${constructor(e,t,i,n,o){super(),this._hoverVisibleKey=t,this._keybindingService=n,this._contextKeyService=o,this.allowEditorOverflow=!0,this._participants=[i.createInstance(j,e,this),i.createInstance(se,e,this),i.createInstance(De,e,this),i.createInstance(be,e,this)],this._editor=e,this._isVisible=!1,this._stoleFocus=!1,this._renderDisposable=null,this._hover=this._register(new g),this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible),this.onkeydown(this._hover.containerDomNode,(e=>{e.equals(9)&&this.hide()})),this._register(this._editor.onDidChangeConfiguration((e=>{e.hasChanged(43)&&this._updateFont()}))),this._editor.onDidLayoutChange((()=>this.layout())),this.layout(),this._editor.addContentWidget(this),this._showAtPosition=null,this._showAtRange=null,this._stoleFocus=!1,this._messages=[],this._lastAnchor=null,this._computer=new Fe(this._editor,this._participants),this._highlightDecorations=[],this._isChangingDecorations=!1,this._shouldFocus=!1,this._colorPicker=null,this._preferAbove=this._editor.getOption(52).above,this._hoverOperation=new K(this._computer,(e=>this._withResult(e,!0)),null,(e=>this._withResult(e,!1)),this._editor.getOption(52).delay),this._register(d.mu(this.getDomNode(),d.tw.FOCUS,(()=>{this._colorPicker&&this.getDomNode().classList.add("colorpicker-hover")}))),this._register(d.mu(this.getDomNode(),d.tw.BLUR,(()=>{this.getDomNode().classList.remove("colorpicker-hover")}))),this._register(e.onDidChangeConfiguration((()=>{this._hoverOperation.setHoverTime(this._editor.getOption(52).delay),this._preferAbove=this._editor.getOption(52).above}))),this._register(b.RW.onDidChange((()=>{this._isVisible&&this._lastAnchor&&this._messages.length>0&&(this._hover.contentsDomNode.textContent="",this._renderMessages(this._lastAnchor,this._messages))})))}dispose(){this._hoverOperation.cancel(),this._editor.removeContentWidget(this),super.dispose()}getId(){return e.ID}getDomNode(){return this._hover.containerDomNode}_shouldShowAt(e){const t=e.target.type;if(6===t)return!0;if(7===t){const t=this._editor.getOption(43).typicalHalfwidthCharacterWidth/2,i=e.target.detail;if(i&&!i.isAfterLines&&"number"==typeof i.horizontalDistanceToText&&i.horizontalDistanceToText<t)return!0}return!1}maybeShowAt(e){var t;const i=[];for(const t of this._participants)if("function"==typeof t.suggestHoverAnchor){const n=t.suggestHoverAnchor(e);n&&i.push(n)}if(this._shouldShowAt(e)&&e.target.range){const n=[...(null===(t=e.target.element)||void 0===t?void 0:t.classList.values())||[]].find((e=>e.startsWith("ced-colorBox")))&&e.target.range.endColumn-e.target.range.startColumn==1?new r.e(e.target.range.startLineNumber,e.target.range.startColumn+1,e.target.range.endLineNumber,e.target.range.endColumn+1):e.target.range;i.push(new q(0,n))}return 0!==i.length&&(i.sort(((e,t)=>t.priority-e.priority)),this._startShowingAt(i[0],0,!1),!0)}_showAt(e,t,i){this._showAtPosition=e,this._showAtRange=t,this._hoverVisibleKey.set(!0),this._isVisible=!0,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible),this._editor.layoutContentWidget(this),this._editor.render(),this._stoleFocus=i,i&&this._hover.containerDomNode.focus()}getPosition(){if(this._isVisible){let e=this._preferAbove;return!e&&this._contextKeyService.getContextKeyValue(Te._y.Visible.key)&&(e=!0),{position:this._showAtPosition,range:this._showAtRange,preference:e?[1,2]:[2,1]}}return null}_updateFont(){Array.prototype.slice.call(this._hover.contentsDomNode.getElementsByClassName("code")).forEach((e=>this._editor.applyFontInfo(e)))}_updateContents(e){this._hover.contentsDomNode.textContent="",this._hover.contentsDomNode.appendChild(e),this._updateFont(),this._editor.layoutContentWidget(this),this._hover.onContentsChanged()}layout(){const e=Math.max(this._editor.getLayoutInfo().height/4,250),{fontSize:t,lineHeight:i}=this._editor.getOption(43);this._hover.contentsDomNode.style.fontSize=`${t}px`,this._hover.contentsDomNode.style.lineHeight=""+i/t,this._hover.contentsDomNode.style.maxHeight=`${e}px`,this._hover.contentsDomNode.style.maxWidth=`${Math.max(.66*this._editor.getLayoutInfo().width,500)}px`}onModelDecorationsChanged(){this._isChangingDecorations||this._isVisible&&(this._hoverOperation.cancel(),this._computer.clearResult(),this._colorPicker||this._hoverOperation.start(0))}startShowingAtRange(e,t,i){this._startShowingAt(new q(0,e),t,i)}_startShowingAt(e,t,i){if(!this._lastAnchor||!this._lastAnchor.equals(e)){if(this._hoverOperation.cancel(),this._isVisible)if(this._showAtPosition&&this._lastAnchor&&e.canAdoptVisibleHover(this._lastAnchor,this._showAtPosition)){const t=this._messages.filter((t=>t.isValidForHoverAnchor(e)));if(0===t.length)this.hide();else{if(t.length===this._messages.length)return;this._renderMessages(e,t)}}else this.hide();this._lastAnchor=e,this._computer.setAnchor(e),this._shouldFocus=i,this._hoverOperation.start(t)}}hide(){this._lastAnchor=null,this._hoverOperation.cancel(),this._isVisible&&(setTimeout((()=>{this._isVisible||this._hoverVisibleKey.set(!1)}),0),this._isVisible=!1,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible),this._editor.layoutContentWidget(this),this._stoleFocus&&this._editor.focus()),this._isChangingDecorations=!0,this._highlightDecorations=this._editor.deltaDecorations(this._highlightDecorations,[]),this._isChangingDecorations=!1,this._renderDisposable&&(this._renderDisposable.dispose(),this._renderDisposable=null),this._colorPicker=null}isColorPickerVisible(){return!!this._colorPicker}setColorPicker(e){this._colorPicker=e}onContentsChanged(){this._hover.onContentsChanged()}_withResult(e,t){this._messages=e,this._lastAnchor&&this._messages.length>0?this._renderMessages(this._lastAnchor,this._messages):t&&this.hide()}_renderMessages(t,i){this._renderDisposable&&(this._renderDisposable.dispose(),this._renderDisposable=null),this._colorPicker=null;let n=1073741824,s=i[0].range,a=null,l=document.createDocumentFragment();const c=new o.SL,d=new Map;for(const e of i){n=Math.min(n,e.range.startColumn),s=r.e.plusRange(s,e.range),e.forceShowAtRange&&(a=e.range),d.has(e.owner)||d.set(e.owner,[]);d.get(e.owner).push(e)}const h=c.add(new Re(this._keybindingService));for(const[e,t]of d)c.add(e.renderHoverParts(t,l,h));h.hasContent&&l.appendChild(h.hoverElement),this._renderDisposable=c,l.hasChildNodes()&&(a?this._showAt(a.getStartPosition(),a,this._shouldFocus):this._showAt(new v.L(t.range.startLineNumber,n),s,this._shouldFocus),this._updateContents(l)),this._colorPicker&&this._colorPicker.layout(),this._isChangingDecorations=!0,this._highlightDecorations=this._editor.deltaDecorations(this._highlightDecorations,s?[{range:s,options:e._DECORATION_OPTIONS}]:[]),this._isChangingDecorations=!1}};Be.ID="editor.contrib.modesContentHoverWidget",Be._DECORATION_OPTIONS=_.qx.register({description:"content-hover-highlight",className:"hoverHighlight"}),Be=Me([Ae(2,Ie.TG),Ae(3,Ee.d),Ae(4,Se.i6)],Be);const Ve=d.$;class We{constructor(e){this._editor=e,this._lineNumber=-1,this._result=[]}setLineNumber(e){this._lineNumber=e,this._result=[]}clearResult(){this._result=[]}computeSync(){const e=e=>({value:e}),t=this._editor.getLineDecorations(this._lineNumber),i=[];if(!t)return i;for(const n of t){if(!n.options.glyphMarginClassName)continue;const t=n.options.glyphMarginHoverMessage;t&&!(0,G.CP)(t)&&i.push(...(0,m._2)(t).map(e))}return i}onResult(e,t){this._result=this._result.concat(e)}getResult(){return this._result}getResultWithLoadingMessage(){return this.getResult()}}class He extends f.${constructor(e,t,i=J.SW){super(),this._renderDisposeables=this._register(new o.SL),this._editor=e,this._isVisible=!1,this._messages=[],this._lastLineNumber=-1,this._hover=this._register(new g),this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible),this._markdownRenderer=this._register(new Y.$({editor:this._editor},t,i)),this._computer=new We(this._editor),this._hoverOperation=new K(this._computer,(e=>this._withResult(e)),void 0,(e=>this._withResult(e)),300),this._register(this._editor.onDidChangeConfiguration((e=>{e.hasChanged(43)&&this._updateFont()}))),this._editor.addOverlayWidget(this)}dispose(){this._hoverOperation.cancel(),this._editor.removeOverlayWidget(this),super.dispose()}getId(){return He.ID}getDomNode(){return this._hover.containerDomNode}getPosition(){return null}_showAt(e){this._isVisible||(this._isVisible=!0,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible));const t=this._editor.getLayoutInfo(),i=this._editor.getTopForLineNumber(e),n=this._editor.getScrollTop(),o=this._editor.getOption(58),s=i-n-(this._hover.containerDomNode.clientHeight-o)/2;this._hover.containerDomNode.style.left=`${t.glyphMarginLeft+t.glyphMarginWidth}px`,this._hover.containerDomNode.style.top=`${Math.max(Math.round(s),0)}px`}_updateFont(){Array.prototype.slice.call(this._hover.contentsDomNode.getElementsByClassName("code")).forEach((e=>this._editor.applyFontInfo(e)))}_updateContents(e){this._hover.contentsDomNode.textContent="",this._hover.contentsDomNode.appendChild(e),this._updateFont()}onModelDecorationsChanged(){this._isVisible&&(this._hoverOperation.cancel(),this._computer.clearResult(),this._hoverOperation.start(0))}startShowingAt(e){this._lastLineNumber!==e&&(this._hoverOperation.cancel(),this.hide(),this._lastLineNumber=e,this._computer.setLineNumber(e),this._hoverOperation.start(0))}hide(){this._lastLineNumber=-1,this._hoverOperation.cancel(),this._isVisible&&(this._isVisible=!1,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible))}_withResult(e){this._messages=e,this._messages.length>0?this._renderMessages(this._lastLineNumber,this._messages):this.hide()}_renderMessages(e,t){this._renderDisposeables.clear();const i=document.createDocumentFragment();for(const e of t){const t=Ve("div.hover-row.markdown-hover"),n=d.R3(t,Ve("div.hover-contents")),o=this._renderDisposeables.add(this._markdownRenderer.render(e.value));n.appendChild(o.element),i.appendChild(t)}this._updateContents(i),this._showAt(e)}}He.ID="editor.contrib.modesGlyphHoverWidget";var ze=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},je=function(e,t){return function(i,n){t(i,n,e)}};let Ue=class e{constructor(e,t,i,n,s){this._editor=e,this._instantiationService=t,this._openerService=i,this._modeService=n,this._toUnhook=new o.SL,this._isMouseDown=!1,this._hoverClicked=!1,this._contentWidget=null,this._glyphWidget=null,this._hookEvents(),this._didChangeConfigurationHandler=this._editor.onDidChangeConfiguration((e=>{e.hasChanged(52)&&(this._unhookEvents(),this._hookEvents())})),this._hoverVisibleKey=a.u.hoverVisible.bindTo(s)}static get(t){return t.getContribution(e.ID)}_hookEvents(){const e=()=>this._hideWidgets(),t=this._editor.getOption(52);this._isHoverEnabled=t.enabled,this._isHoverSticky=t.sticky,this._isHoverEnabled?(this._toUnhook.add(this._editor.onMouseDown((e=>this._onEditorMouseDown(e)))),this._toUnhook.add(this._editor.onMouseUp((e=>this._onEditorMouseUp(e)))),this._toUnhook.add(this._editor.onMouseMove((e=>this._onEditorMouseMove(e)))),this._toUnhook.add(this._editor.onKeyDown((e=>this._onKeyDown(e)))),this._toUnhook.add(this._editor.onDidChangeModelDecorations((()=>this._onModelDecorationsChanged())))):(this._toUnhook.add(this._editor.onMouseMove((e=>this._onEditorMouseMove(e)))),this._toUnhook.add(this._editor.onKeyDown((e=>this._onKeyDown(e))))),this._toUnhook.add(this._editor.onMouseLeave(e)),this._toUnhook.add(this._editor.onDidChangeModel(e)),this._toUnhook.add(this._editor.onDidScrollChange((e=>this._onEditorScrollChanged(e))))}_unhookEvents(){this._toUnhook.clear()}_onModelDecorationsChanged(){var e,t;null===(e=this._contentWidget)||void 0===e||e.onModelDecorationsChanged(),null===(t=this._glyphWidget)||void 0===t||t.onModelDecorationsChanged()}_onEditorScrollChanged(e){(e.scrollTopChanged||e.scrollLeftChanged)&&this._hideWidgets()}_onEditorMouseDown(e){this._isMouseDown=!0;const t=e.target.type;9!==t||e.target.detail!==Be.ID?12===t&&e.target.detail===He.ID||(12!==t&&e.target.detail!==He.ID&&(this._hoverClicked=!1),this._hideWidgets()):this._hoverClicked=!0}_onEditorMouseUp(e){this._isMouseDown=!1}_onEditorMouseMove(e){var t,i,n,o,s;let r=e.target.type;if(this._isMouseDown&&this._hoverClicked)return;if(this._isHoverSticky&&9===r&&e.target.detail===Be.ID)return;if(this._isHoverSticky&&!(null===(i=null===(t=e.event.browserEvent.view)||void 0===t?void 0:t.getSelection())||void 0===i?void 0:i.isCollapsed))return;if(!this._isHoverSticky&&9===r&&e.target.detail===Be.ID&&(null===(n=this._contentWidget)||void 0===n?void 0:n.isColorPickerVisible()))return;if(this._isHoverSticky&&12===r&&e.target.detail===He.ID)return;if(!this._isHoverEnabled)return void this._hideWidgets();if(!this._getOrCreateContentWidget().maybeShowAt(e))return 2===r&&e.target.position?(null===(s=this._contentWidget)||void 0===s||s.hide(),this._glyphWidget||(this._glyphWidget=new He(this._editor,this._modeService,this._openerService)),void this._glyphWidget.startShowingAt(e.target.position.lineNumber)):void this._hideWidgets();null===(o=this._glyphWidget)||void 0===o||o.hide()}_onKeyDown(e){5!==e.keyCode&&6!==e.keyCode&&57!==e.keyCode&&4!==e.keyCode&&this._hideWidgets()}_hideWidgets(){var e,t,i;this._isMouseDown&&this._hoverClicked&&(null===(e=this._contentWidget)||void 0===e?void 0:e.isColorPickerVisible())||(this._hoverClicked=!1,null===(t=this._glyphWidget)||void 0===t||t.hide(),null===(i=this._contentWidget)||void 0===i||i.hide())}_getOrCreateContentWidget(){return this._contentWidget||(this._contentWidget=this._instantiationService.createInstance(Be,this._editor,this._hoverVisibleKey)),this._contentWidget}isColorPickerVisible(){var e;return(null===(e=this._contentWidget)||void 0===e?void 0:e.isColorPickerVisible())||!1}showContentHover(e,t,i){this._getOrCreateContentWidget().startShowingAtRange(e,t,i)}dispose(){var e,t;this._unhookEvents(),this._toUnhook.dispose(),this._didChangeConfigurationHandler.dispose(),null===(e=this._glyphWidget)||void 0===e||e.dispose(),null===(t=this._contentWidget)||void 0===t||t.dispose()}};Ue.ID="editor.contrib.hover",Ue=ze([je(1,Ie.TG),je(2,J.v4),je(3,l.h),je(4,Se.i6)],Ue);class $e extends s.R6{constructor(){super({id:"editor.action.showHover",label:D.N({key:"showHover",comment:["Label for action that will trigger the showing of a hover in the editor.","This allows for users to show the hover without using the mouse."]},"Show Hover"),alias:"Show Hover",precondition:void 0,kbOpts:{kbExpr:a.u.editorTextFocus,primary:(0,n.gx)(2089,2087),weight:100}})}run(e,t){if(!t.hasModel())return;let i=Ue.get(t);if(!i)return;const n=t.getPosition(),o=new r.e(n.lineNumber,n.column,n.lineNumber,n.column),s=2===t.getOption(2);i.showContentHover(o,1,s)}}class Ke extends s.R6{constructor(){super({id:"editor.action.showDefinitionPreviewHover",label:D.N({key:"showDefinitionPreviewHover",comment:["Label for action that will trigger the showing of definition preview hover in the editor.","This allows for users to show the definition preview hover without using the mouse."]},"Show Definition Preview Hover"),alias:"Show Definition Preview Hover",precondition:void 0})}run(e,t){let i=Ue.get(t);if(!i)return;const n=t.getPosition();if(!n)return;const o=new r.e(n.lineNumber,n.column,n.lineNumber,n.column);c.GotoDefinitionAtPositionEditorContribution.get(t).startFindDefinitionFromCursor(n).then((()=>{i.showContentHover(o,1,!0)}))}}(0,s._K)(Ue.ID,Ue),(0,s.Qr)($e),(0,s.Qr)(Ke),(0,E.Ic)(((e,t)=>{const i=e.getColor(I.pt);i&&t.addRule(`.monaco-editor .hoverHighlight { background-color: ${i}; }`);const n=e.getColor(I.yJ);n&&t.addRule(`.monaco-editor .monaco-hover { background-color: ${n}; }`);const o=e.getColor(I.CN);o&&(t.addRule(`.monaco-editor .monaco-hover { border: 1px solid ${o}; }`),t.addRule(`.monaco-editor .monaco-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${o.transparent(.5)}; }`),t.addRule(`.monaco-editor .monaco-hover hr { border-top: 1px solid ${o.transparent(.5)}; }`),t.addRule(`.monaco-editor .monaco-hover hr { border-bottom: 0px solid ${o.transparent(.5)}; }`));const s=e.getColor(I.ur);s&&t.addRule(`.monaco-editor .monaco-hover a { color: ${s}; }`);const r=e.getColor(I.sg);r&&t.addRule(`.monaco-editor .monaco-hover a:hover { color: ${r}; }`);const a=e.getColor(I.Sb);a&&t.addRule(`.monaco-editor .monaco-hover { color: ${a}; }`);const l=e.getColor(I.Lo);l&&t.addRule(`.monaco-editor .monaco-hover .hover-row .actions { background-color: ${l}; }`);const c=e.getColor(I.Sw);c&&t.addRule(`.monaco-editor .monaco-hover code { background-color: ${c}; }`)}))},83554:(e,t,i)=>{"use strict";i.r(t);var n=i(15393),o=i(17301),s=i(39925),r=i(16830),a=i(24314),l=i(3860),c=i(29102),d=i(44174),h=i(90469),u=i(27869),g=i(63580),p=i(97781);class f{constructor(e,t,i){this._editRange=e,this._originalSelection=t,this._text=i}getEditOperations(e,t){t.addTrackedEditOperation(this._editRange,this._text)}computeCursorState(e,t){const i=t.getInverseEditOperations()[0].range;return this._originalSelection.isEmpty()?new l.Y(i.endLineNumber,Math.min(this._originalSelection.positionColumn,i.endColumn),i.endLineNumber,Math.min(this._originalSelection.positionColumn,i.endColumn)):new l.Y(i.endLineNumber,i.endColumn-this._text.length,i.endLineNumber,i.endColumn)}}var m=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},v=function(e,t){return function(i,n){t(i,n,e)}};let _=class e{constructor(e,t){this.decorationIds=[],this.editor=e,this.editorWorkerService=t}static get(t){return t.getContribution(e.ID)}dispose(){}run(t,i){this.currentRequest&&this.currentRequest.cancel();const r=this.editor.getSelection(),c=this.editor.getModel();if(!c||!r)return;let d=r;if(d.startLineNumber!==d.endLineNumber)return;const h=new s.yy(this.editor,5),u=c.uri;return this.editorWorkerService.canNavigateValueSet(u)?(this.currentRequest=(0,n.PG)((e=>this.editorWorkerService.navigateValueSet(u,d,i))),this.currentRequest.then((i=>{if(!i||!i.range||!i.value)return;if(!h.validate(this.editor))return;let s=a.e.lift(i.range),r=i.range,c=i.value.length-(d.endColumn-d.startColumn);r={startLineNumber:r.startLineNumber,startColumn:r.startColumn,endLineNumber:r.endLineNumber,endColumn:r.startColumn+i.value.length},c>1&&(d=new l.Y(d.startLineNumber,d.startColumn,d.endLineNumber,d.endColumn+c-1));const u=new f(s,d,i.value);this.editor.pushUndoStop(),this.editor.executeCommand(t,u),this.editor.pushUndoStop(),this.decorationIds=this.editor.deltaDecorations(this.decorationIds,[{range:r,options:e.DECORATION}]),this.decorationRemover&&this.decorationRemover.cancel(),this.decorationRemover=(0,n.Vs)(350),this.decorationRemover.then((()=>this.decorationIds=this.editor.deltaDecorations(this.decorationIds,[]))).catch(o.dL)})).catch(o.dL)):Promise.resolve(void 0)}};_.ID="editor.contrib.inPlaceReplaceController",_.DECORATION=d.qx.register({description:"in-place-replace",className:"valueSetReplacement"}),_=m([v(1,h.p)],_);class b extends r.R6{constructor(){super({id:"editor.action.inPlaceReplace.up",label:g.N("InPlaceReplaceAction.previous.label","Replace with Previous Value"),alias:"Replace with Previous Value",precondition:c.u.writable,kbOpts:{kbExpr:c.u.editorTextFocus,primary:3154,weight:100}})}run(e,t){const i=_.get(t);return i?i.run(this.id,!0):Promise.resolve(void 0)}}class w extends r.R6{constructor(){super({id:"editor.action.inPlaceReplace.down",label:g.N("InPlaceReplaceAction.next.label","Replace with Next Value"),alias:"Replace with Next Value",precondition:c.u.writable,kbOpts:{kbExpr:c.u.editorTextFocus,primary:3156,weight:100}})}run(e,t){const i=_.get(t);return i?i.run(this.id,!1):Promise.resolve(void 0)}}(0,r._K)(_.ID,_),(0,r.Qr)(b),(0,r.Qr)(w),(0,p.Ic)(((e,t)=>{const i=e.getColor(u.Dl);i&&t.addRule(`.monaco-editor.vs .valueSetReplacement { outline: solid 2px ${i}; }`)}))},51491:(e,t,i)=>{"use strict";function n(e,t){let i=0;for(let n=0;n<e.length;n++)"\t"===e.charAt(n)?i+=t:i++;return i}function o(e,t,i){e=e<0?0:e;let n="";if(!i){let i=Math.floor(e/t);e%=t;for(let e=0;e<i;e++)n+="\t"}for(let t=0;t<e;t++)n+=" ";return n}i.d(t,{J:()=>o,Y:()=>n})},80638:(e,t,i)=>{"use strict";i.r(t),i.d(t,{AutoIndentOnPaste:()=>N,AutoIndentOnPasteCommand:()=>L,ChangeIndentationSizeAction:()=>w,DetectIndentation:()=>x,IndentUsingSpaces:()=>C,IndentUsingTabs:()=>y,IndentationToSpacesAction:()=>_,IndentationToSpacesCommand:()=>I,IndentationToTabsAction:()=>b,IndentationToTabsCommand:()=>E,ReindentLinesAction:()=>S,ReindentSelectedLinesAction:()=>k,getReindentEditOperations:()=>v});var n=i(5976),o=i(97295),s=i(16830),r=i(10291),a=i(69386),l=i(24314),c=i(3860),d=i(29102),h=i(44174),u=i(83831),g=i(51200),p=i(51491),f=i(63580),m=i(41157);function v(e,t,i,n){if(1===e.getLineCount()&&1===e.getLineMaxColumn(1))return[];const s=u.zu.getIndentationRules(e.getLanguageId());if(!s)return[];for(i=Math.min(i,e.getLineCount());t<=i&&s.unIndentedLinePattern;){let i=e.getLineContent(t);if(!s.unIndentedLinePattern.test(i))break;t++}if(t>i-1)return[];const{tabSize:l,indentSize:d,insertSpaces:g}=e.getOptions(),p=(e,t)=>(t=t||1,r.U.shiftIndent(e,e.length+t,l,d,g)),f=(e,t)=>(t=t||1,r.U.unshiftIndent(e,e.length+t,l,d,g));let m,v=[],_=e.getLineContent(t),b=_;if(null!=n){m=n;let e=o.V8(_);b=m+_.substring(e.length),s.decreaseIndentPattern&&s.decreaseIndentPattern.test(b)&&(m=f(m),b=m+_.substring(e.length)),_!==b&&v.push(a.h.replaceMove(new c.Y(t,1,t,e.length+1),h.yO.normalizeIndentation(m,d,g)))}else m=o.V8(_);let w=m;s.increaseIndentPattern&&s.increaseIndentPattern.test(b)?(w=p(w),m=p(m)):s.indentNextLinePattern&&s.indentNextLinePattern.test(b)&&(w=p(w));for(let n=++t;n<=i;n++){let t=e.getLineContent(n),i=o.V8(t),r=w+t.substring(i.length);s.decreaseIndentPattern&&s.decreaseIndentPattern.test(r)&&(w=f(w),m=f(m)),i!==w&&v.push(a.h.replaceMove(new c.Y(n,1,n,i.length+1),h.yO.normalizeIndentation(w,d,g))),s.unIndentedLinePattern&&s.unIndentedLinePattern.test(t)||(s.increaseIndentPattern&&s.increaseIndentPattern.test(r)?(m=p(m),w=m):w=s.indentNextLinePattern&&s.indentNextLinePattern.test(r)?p(w):m)}return v}class _ extends s.R6{constructor(){super({id:_.ID,label:f.N("indentationToSpaces","Convert Indentation to Spaces"),alias:"Convert Indentation to Spaces",precondition:d.u.writable})}run(e,t){let i=t.getModel();if(!i)return;let n=i.getOptions(),o=t.getSelection();if(!o)return;const s=new I(o,n.tabSize);t.pushUndoStop(),t.executeCommands(this.id,[s]),t.pushUndoStop(),i.updateOptions({insertSpaces:!0})}}_.ID="editor.action.indentationToSpaces";class b extends s.R6{constructor(){super({id:b.ID,label:f.N("indentationToTabs","Convert Indentation to Tabs"),alias:"Convert Indentation to Tabs",precondition:d.u.writable})}run(e,t){let i=t.getModel();if(!i)return;let n=i.getOptions(),o=t.getSelection();if(!o)return;const s=new E(o,n.tabSize);t.pushUndoStop(),t.executeCommands(this.id,[s]),t.pushUndoStop(),i.updateOptions({insertSpaces:!1})}}b.ID="editor.action.indentationToTabs";class w extends s.R6{constructor(e,t){super(t),this.insertSpaces=e}run(e,t){const i=e.get(m.eJ),n=e.get(g.q);let o=t.getModel();if(!o)return;const s=n.getCreationOptions(o.getLanguageId(),o.uri,o.isForSimpleWidget),r=[1,2,3,4,5,6,7,8].map((e=>({id:e.toString(),label:e.toString(),description:e===s.tabSize?f.N("configuredTabSize","Configured Tab Size"):void 0}))),a=Math.min(o.getOptions().tabSize-1,7);setTimeout((()=>{i.pick(r,{placeHolder:f.N({key:"selectTabWidth",comment:["Tab corresponds to the tab key"]},"Select Tab Size for Current File"),activeItem:r[a]}).then((e=>{e&&o&&!o.isDisposed()&&o.updateOptions({tabSize:parseInt(e.label,10),insertSpaces:this.insertSpaces})}))}),50)}}class y extends w{constructor(){super(!1,{id:y.ID,label:f.N("indentUsingTabs","Indent Using Tabs"),alias:"Indent Using Tabs",precondition:void 0})}}y.ID="editor.action.indentUsingTabs";class C extends w{constructor(){super(!0,{id:C.ID,label:f.N("indentUsingSpaces","Indent Using Spaces"),alias:"Indent Using Spaces",precondition:void 0})}}C.ID="editor.action.indentUsingSpaces";class x extends s.R6{constructor(){super({id:x.ID,label:f.N("detectIndentation","Detect Indentation from Content"),alias:"Detect Indentation from Content",precondition:void 0})}run(e,t){const i=e.get(g.q);let n=t.getModel();if(!n)return;const o=i.getCreationOptions(n.getLanguageId(),n.uri,n.isForSimpleWidget);n.detectIndentation(o.insertSpaces,o.tabSize)}}x.ID="editor.action.detectIndentation";class S extends s.R6{constructor(){super({id:"editor.action.reindentlines",label:f.N("editor.reindentlines","Reindent Lines"),alias:"Reindent Lines",precondition:d.u.writable})}run(e,t){let i=t.getModel();if(!i)return;let n=v(i,1,i.getLineCount());n.length>0&&(t.pushUndoStop(),t.executeEdits(this.id,n),t.pushUndoStop())}}class k extends s.R6{constructor(){super({id:"editor.action.reindentselectedlines",label:f.N("editor.reindentselectedlines","Reindent Selected Lines"),alias:"Reindent Selected Lines",precondition:d.u.writable})}run(e,t){let i=t.getModel();if(!i)return;let n=t.getSelections();if(null===n)return;let o=[];for(let e of n){let t=e.startLineNumber,n=e.endLineNumber;if(t!==n&&1===e.endColumn&&n--,1===t){if(t===n)continue}else t--;let s=v(i,t,n);o.push(...s)}o.length>0&&(t.pushUndoStop(),t.executeEdits(this.id,o),t.pushUndoStop())}}class L{constructor(e,t){this._initialSelection=t,this._edits=[],this._selectionId=null;for(let t of e)t.range&&"string"==typeof t.text&&this._edits.push(t)}getEditOperations(e,t){for(let e of this._edits)t.addEditOperation(l.e.lift(e.range),e.text);let i=!1;Array.isArray(this._edits)&&1===this._edits.length&&this._initialSelection.isEmpty()&&(this._edits[0].range.startColumn===this._initialSelection.endColumn&&this._edits[0].range.startLineNumber===this._initialSelection.endLineNumber?(i=!0,this._selectionId=t.trackSelection(this._initialSelection,!0)):this._edits[0].range.endColumn===this._initialSelection.startColumn&&this._edits[0].range.endLineNumber===this._initialSelection.startLineNumber&&(i=!0,this._selectionId=t.trackSelection(this._initialSelection,!1))),i||(this._selectionId=t.trackSelection(this._initialSelection))}computeCursorState(e,t){return t.getTrackedSelection(this._selectionId)}}class N{constructor(e){this.callOnDispose=new n.SL,this.callOnModel=new n.SL,this.editor=e,this.callOnDispose.add(e.onDidChangeConfiguration((()=>this.update()))),this.callOnDispose.add(e.onDidChangeModel((()=>this.update()))),this.callOnDispose.add(e.onDidChangeModelLanguage((()=>this.update())))}update(){this.callOnModel.clear(),this.editor.getOption(9)<4||this.editor.getOption(47)||this.editor.hasModel()&&this.callOnModel.add(this.editor.onDidPaste((({range:e})=>{this.trigger(e)})))}trigger(e){let t=this.editor.getSelections();if(null===t||t.length>1)return;const i=this.editor.getModel();if(!i)return;if(!i.isCheapToTokenize(e.getStartPosition().lineNumber))return;const n=this.editor.getOption(9),{tabSize:s,indentSize:a,insertSpaces:c}=i.getOptions();let d=[],h={shiftIndent:e=>r.U.shiftIndent(e,e.length+1,s,a,c),unshiftIndent:e=>r.U.unshiftIndent(e,e.length+1,s,a,c)},g=e.startLineNumber;for(;g<=e.endLineNumber&&this.shouldIgnoreLine(i,g);)g++;if(g>e.endLineNumber)return;let f=i.getLineContent(g);if(!/\S/.test(f.substring(0,e.startColumn-1))){const e=u.zu.getGoodIndentForLine(n,i,i.getLanguageId(),g,h);if(null!==e){let t=o.V8(f),n=p.Y(e,s);if(n!==p.Y(t,s)){let e=p.J(n,s,c);d.push({range:new l.e(g,1,g,t.length+1),text:e}),f=e+f.substr(t.length)}else{let e=u.zu.getIndentMetadata(i,g);if(0===e||8===e)return}}}const m=g;for(;g<e.endLineNumber&&!/\S/.test(i.getLineContent(g+1));)g++;if(g!==e.endLineNumber){let t={getLineTokens:e=>i.getLineTokens(e),getLanguageId:()=>i.getLanguageId(),getLanguageIdAtPosition:(e,t)=>i.getLanguageIdAtPosition(e,t),getLineContent:e=>e===m?f:i.getLineContent(e)},r=u.zu.getGoodIndentForLine(n,t,i.getLanguageId(),g+1,h);if(null!==r){let t=p.Y(r,s),n=p.Y(o.V8(i.getLineContent(g+1)),s);if(t!==n){let r=t-n;for(let t=g+1;t<=e.endLineNumber;t++){let e=i.getLineContent(t),n=o.V8(e),a=p.Y(n,s)+r,h=p.J(a,s,c);h!==n&&d.push({range:new l.e(t,1,t,n.length+1),text:h})}}}}if(d.length>0){this.editor.pushUndoStop();let e=new L(d,this.editor.getSelection());this.editor.executeCommand("autoIndentOnPaste",e),this.editor.pushUndoStop()}}shouldIgnoreLine(e,t){e.forceTokenization(t);let i=e.getLineFirstNonWhitespaceColumn(t);if(0===i)return!0;let n=e.getLineTokens(t);if(n.getCount()>0){let e=n.findTokenIndexAtOffset(i);if(e>=0&&1===n.getStandardTokenType(e))return!0}return!1}dispose(){this.callOnDispose.dispose(),this.callOnModel.dispose()}}function D(e,t,i,n){if(1===e.getLineCount()&&1===e.getLineMaxColumn(1))return;let o="";for(let e=0;e<i;e++)o+=" ";let s=new RegExp(o,"gi");for(let i=1,r=e.getLineCount();i<=r;i++){let r=e.getLineFirstNonWhitespaceColumn(i);if(0===r&&(r=e.getLineMaxColumn(i)),1===r)continue;const a=new l.e(i,1,i,r),c=e.getValueInRange(a),d=n?c.replace(/\t/gi,o):c.replace(s,"\t");t.addEditOperation(a,d)}}N.ID="editor.contrib.autoIndentOnPaste";class I{constructor(e,t){this.selection=e,this.tabSize=t,this.selectionId=null}getEditOperations(e,t){this.selectionId=t.trackSelection(this.selection),D(e,t,this.tabSize,!0)}computeCursorState(e,t){return t.getTrackedSelection(this.selectionId)}}class E{constructor(e,t){this.selection=e,this.tabSize=t,this.selectionId=null}getEditOperations(e,t){this.selectionId=t.trackSelection(this.selection),D(e,t,this.tabSize,!1)}computeCursorState(e,t){return t.getTrackedSelection(this.selectionId)}}(0,s._K)(N.ID,N),(0,s.Qr)(_),(0,s.Qr)(b),(0,s.Qr)(y),(0,s.Qr)(C),(0,s.Qr)(x),(0,s.Qr)(S),(0,s.Qr)(k)},87586:(e,t,i)=>{"use strict";i.r(t),i.d(t,{InlayHintsController:()=>D,getInlayHints:()=>L});var n=i(15393),o=i(71050),s=i(17301),r=i(89954),a=i(5976),l=i(43702),c=i(98401),d=i(70666),h=i(16830),u=i(11640),g=i(64141),p=i(50187),f=i(24314),m=i(44101),v=i(21036),_=i(88216),b=i(94565),w=i(73910),y=i(97781),C=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},x=function(e,t){return function(i,n){t(i,n,e)}},S=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class k{constructor(){this._data=new l.Y9}push(e,t){const i=this._data.get(e.uri);void 0===i?this._data.set(e.uri,new Set([t])):i.add(t)}pop(e,t){const i=this._data.get(e.uri);i&&(i.delete(t),0===i.size&&this._data.delete(e.uri))}has(e,t){var i;return Boolean(null===(i=this._data.get(e.uri))||void 0===i?void 0:i.has(t))}}function L(e,t,i,n){return S(this,void 0,void 0,(function*(){const o=[],r=m.mX.ordered(e).reverse().map((r=>t.map((t=>S(this,void 0,void 0,(function*(){try{i.push(e,r);const s=yield r.provideInlayHints(e,t,n);(null==s?void 0:s.length)&&o.push(s.filter((e=>t.containsPosition(e.position))))}catch(e){(0,s.Cp)(e)}finally{i.pop(e,r)}}))))));return yield Promise.all(r.flat()),o.flat().sort(((e,t)=>p.L.compare(e.position,t.position)))}))}class N{constructor(){this._entries=new l.z6(50)}get(e){const t=N._key(e);return this._entries.get(t)}set(e,t){const i=N._key(e);this._entries.set(i,t)}static _key(e){return`${e.uri.toString()}/${e.getVersionId()}`}}let D=class e{constructor(t,i){this._editor=t,this._codeEditorService=i,this._decorationOwnerId=++e._decorationOwnerIdPool,this._disposables=new a.SL,this._sessionDisposables=new a.SL,this._getInlayHintsDelays=new v.Y(m.mX,25,500),this._cache=new N,this._decorations=new Map,this._disposables.add(m.mX.onDidChange((()=>this._update()))),this._disposables.add(t.onDidChangeModel((()=>this._update()))),this._disposables.add(t.onDidChangeModelLanguage((()=>this._update()))),this._disposables.add(t.onDidChangeConfiguration((e=>{e.hasChanged(125)&&this._update()}))),this._update()}dispose(){this._sessionDisposables.dispose(),this._removeAllDecorations(),this._disposables.dispose()}_update(){if(this._sessionDisposables.clear(),this._removeAllDecorations(),!this._editor.getOption(125).enabled)return;const e=this._editor.getModel();if(!e||!m.mX.has(e))return;const t=this._cache.get(e);t&&this._updateHintsDecorators([e.getFullModelRange()],t);const i=new k,s=new n.pY((()=>S(this,void 0,void 0,(function*(){const t=Date.now(),n=new o.A;this._sessionDisposables.add((0,a.OF)((()=>n.dispose(!0))));const r=this._getHintsRanges(),l=yield L(e,r,i,n.token);s.delay=this._getInlayHintsDelays.update(e,Date.now()-t),n.token.isCancellationRequested||(this._updateHintsDecorators(r,l),this._cache.set(e,Array.from(this._decorations.values()).map((e=>e.hint))))}))),this._getInlayHintsDelays.get(e));this._sessionDisposables.add(s),this._sessionDisposables.add(this._editor.onDidChangeModelContent((()=>s.schedule()))),this._disposables.add(this._editor.onDidScrollChange((()=>s.schedule()))),s.schedule();const r=new a.SL;this._sessionDisposables.add(r);for(const t of m.mX.all(e))"function"==typeof t.onDidChangeInlayHints&&r.add(t.onDidChangeInlayHints((()=>{i.has(e,t)||s.schedule()})))}_getHintsRanges(){const e=this._editor.getModel(),t=this._editor.getVisibleRangesPlusViewportAboveBelow(),i=[];for(const n of t.sort(f.e.compareRangesUsingStarts)){const t=e.validateRange(new f.e(n.startLineNumber-30,n.startColumn,n.endLineNumber+30,n.endColumn));0!==i.length&&f.e.areIntersectingOrTouching(i[i.length-1],t)?i[i.length-1]=f.e.plusRange(i[i.length-1],t):i.push(t)}return i}_updateHintsDecorators(e,t){const{fontSize:i,fontFamily:n}=this._getLayoutInfo(),o=this._editor.getModel(),s=[],a=[],l="--code-editorInlayHintsFontFamily";this._editor.getContainerDomNode().style.setProperty(l,n);for(const e of t){const{text:t,position:n,whitespaceBefore:c,whitespaceAfter:d}=e,h=c?i/3|0:0,u=d?i/3|0:0,p={contentText:E(t),fontSize:`${i}px`,margin:`0px ${u}px 0px ${h}px`,fontFamily:`var(${l}), ${g.hL.fontFamily}`,padding:`1px ${0|Math.max(1,i/4)}px`,borderRadius:(i/4|0)+"px",verticalAlign:"middle",backgroundColor:(0,y.EN)(w.Pp),color:(0,y.EN)(w.VV)};e.kind===m.gl.Parameter?(p.backgroundColor=(0,y.EN)(w.ph),p.color=(0,y.EN)(w.HC)):e.kind===m.gl.Type&&(p.backgroundColor=(0,y.EN)(w.bK),p.color=(0,y.EN)(w.hX));let v={beforeInjectedText:Object.assign(Object.assign({},p),{affectsLetterSpacing:!0})},_=f.e.fromPositions(n),b=o.getWordAtPosition(n),C=!1;b&&(b.endColumn===n.column?(v.afterInjectedText=v.beforeInjectedText,v.beforeInjectedText=void 0,C=!0,_=I(b,n.lineNumber)):b.startColumn===n.column&&(C=!0,_=I(b,n.lineNumber)));const x="inlayHints-"+(0,r.vp)(v).toString(16);this._codeEditorService.registerDecorationType("inlay-hints-controller",x,v,void 0,this._editor),s.push(x);if(a.push({range:_,options:Object.assign(Object.assign({},this._codeEditorService.resolveDecorationOptions(x,!0)),{showIfCollapsed:!C,stickiness:0})})>1500)break}const c=[];for(const t of e)for(const{id:e}of o.getDecorationsInRange(t,this._decorationOwnerId,!0)){const t=this._decorations.get(e);t&&(c.push(e),this._codeEditorService.removeDecorationType(t.decorationTypeId),this._decorations.delete(e))}const d=o.deltaDecorations(c,a,this._decorationOwnerId);for(let e=0;e<d.length;e++)this._decorations.set(d[e],{hint:t[e],decorationTypeId:s[e]})}_getLayoutInfo(){const e=this._editor.getOption(125),t=this._editor.getOption(45);let i=e.fontSize;(!i||i<5||i>t)&&(i=.9*t|0);return{fontSize:i,fontFamily:e.fontFamily||this._editor.getOption(42)}}_removeAllDecorations(){this._editor.deltaDecorations(Array.from(this._decorations.keys()),[]);for(let e of this._decorations.values())this._codeEditorService.removeDecorationType(e.decorationTypeId);this._decorations.clear()}};function I(e,t){return new f.e(t,e.startColumn,t,e.endColumn)}function E(e){return e.replace(/[ \t]/g,"Â ")}D.ID="editor.contrib.InlayHints",D._decorationOwnerIdPool=0,D=C([x(1,u.$)],D),(0,h._K)(D.ID,D),b.P.registerCommand("_executeInlayHintProvider",((e,...t)=>S(void 0,void 0,void 0,(function*(){const[i,n]=t;(0,c.p_)(d.o.isUri(i)),(0,c.p_)(f.e.isIRange(n));const s=yield e.get(_.S).createModelReference(i);try{return yield L(s.object.textEditorModel,[f.e.lift(n)],new k,o.T.None)}finally{s.dispose()}}))))},43818:(e,t,i)=>{"use strict";i.r(t),i.d(t,{ActiveGhostTextController:()=>Ne,GhostTextController:()=>ke,ShowNextInlineSuggestionAction:()=>Ee,ShowPreviousInlineSuggestionAction:()=>Te,TriggerInlineSuggestionAction:()=>Me,commitInlineSuggestionAction:()=>Ie});var n=i(5976),o=i(97295),s=i(16830),r=i(47707),a=i(29102);const l="editor.action.inlineSuggest.commit";var c=i(4669),d=i(50187),h=i(44101),u=i(15393),g=i(71050),p=i(17301),f=i(18728),m=i(69386),v=i(24314);class _{constructor(e,t,i=0){this.lineNumber=e,this.parts=t,this.additionalReservedLineCount=i}renderForScreenReader(e){if(0===this.parts.length)return"";const t=this.parts[this.parts.length-1];return function(e,t){const i=new b(e),n=t.map((e=>{const t=v.e.lift(e.range);return{startOffset:i.getOffset(t.getStartPosition()),endOffset:i.getOffset(t.getEndPosition()),text:e.text}}));n.sort(((e,t)=>t.startOffset-e.startOffset));for(const t of n)e=e.substring(0,t.startOffset)+t.text+e.substring(t.endOffset);return e}(e.substr(0,t.column-1),this.parts.map((e=>({range:{startLineNumber:1,endLineNumber:1,startColumn:e.column,endColumn:e.column},text:e.lines.join("\n")})))).substring(this.parts[0].column-1)}}class b{constructor(e){this.lineStartOffsetByLineIdx=[],this.lineStartOffsetByLineIdx.push(0);for(let t=0;t<e.length;t++)"\n"===e.charAt(t)&&this.lineStartOffsetByLineIdx.push(t+1)}getOffset(e){return this.lineStartOffsetByLineIdx[e.lineNumber-1]+e.column-1}}class w{constructor(e,t,i){this.column=e,this.lines=t,this.preview=i}}class y extends n.JT{constructor(e){super(),this.editor=e,this._expanded=void 0,this.onDidChangeEmitter=new c.Q5,this.onDidChange=this.onDidChangeEmitter.event,this._register(e.onDidChangeConfiguration((e=>{e.hasChanged(105)&&void 0===this._expanded&&this.onDidChangeEmitter.fire()})))}setExpanded(e){this._expanded=!0,this.onDidChangeEmitter.fire()}}var C=i(94565),x=i(2484);function S(e,t,i,n,s=0){if(e.range.startLineNumber!==e.range.endLineNumber)return;const r=t.getLineContent(e.range.startLineNumber),a=o.V8(r).length;if(e.range.startColumn-1<=a){const t=o.V8(e.text).length,i=r.substring(e.range.startColumn-1,a),n=v.e.fromPositions(e.range.getStartPosition().delta(0,i.length),e.range.getEndPosition()),s=e.text.startsWith(i)?e.text.substring(i.length):e.text.substring(t);e={range:n,text:s,command:e.command}}const l=t.getValueInRange(e.range),c=function(e,t){if((null==k?void 0:k.originalValue)===e&&(null==k?void 0:k.newValue)===t)return null==k?void 0:k.changes;{const i=function(e,t){if(e.length>5e3||t.length>5e3)return;function i(e){let t=0;for(let i=0,n=e.length;i<n;i++){const n=e.charCodeAt(i);n>t&&(t=n)}return t}const n=Math.max(i(e),i(t));function o(e){if(e<0)throw new Error("unexpected");return n+e+1}function s(e){let t=0,i=0;const n=new Int32Array(e.length);for(let s=0,r=e.length;s<r;s++){const r=100*i+t;"("===e[s]?(n[s]=o(2*r),t++):")"===e[s]?(n[s]=o(2*r+1),1===t&&i++,t=Math.max(t-1,0)):n[s]=e.charCodeAt(s)}return n}const r=s(e),a=s(t);return new x.Hs({getElements:()=>r},{getElements:()=>a}).ComputeDiff(!1).changes}(e,t);return k={originalValue:e,newValue:t,changes:i},i}}(l,e.text);if(!c)return;const d=e.range.startLineNumber,h=new Array;if("prefix"===i){const e=c.filter((e=>0===e.originalLength));if(e.length>1||1===e.length&&e[0].originalStart!==l.length)return}const u=e.text.length-s;for(const t of c){const s=e.range.startColumn+t.originalStart+t.originalLength;if("subwordSmart"===i&&n&&n.lineNumber===e.range.startLineNumber&&s<n.column)return;if(t.originalLength>0)return;if(0===t.modifiedLength)continue;const r=t.modifiedStart+t.modifiedLength,a=Math.max(t.modifiedStart,Math.min(r,u)),l=e.text.substring(t.modifiedStart,a),c=e.text.substring(a,Math.max(t.modifiedStart,r));if(l.length>0){const e=o.uq(l);h.push(new w(s,e,!1))}if(c.length>0){const e=o.uq(c);h.push(new w(s,e,!0))}}return new _(d,h,0)}let k;var L=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},N=function(e,t){return function(i,n){t(i,n,e)}},D=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let I=class extends n.JT{constructor(e,t,i){super(),this.editor=e,this.cache=t,this.commandService=i,this.onDidChangeEmitter=new c.Q5,this.onDidChange=this.onDidChangeEmitter.event,this.completionSession=this._register(new n.XK),this.active=!1,this.disposed=!1,this._register(i.onDidExecuteCommand((t=>{new Set([s.n_.id,s.kz.id,f.CoreEditingCommands.Tab.id,f.CoreEditingCommands.DeleteLeft.id,f.CoreEditingCommands.DeleteRight.id,l,"acceptSelectedSuggestion"]).has(t.commandId)&&e.hasTextFocus()&&this.handleUserInput()}))),this._register(this.editor.onDidType((e=>{this.handleUserInput()}))),this._register(this.editor.onDidChangeCursorPosition((e=>{this.session&&!this.session.isValid&&this.hide()}))),this._register((0,n.OF)((()=>{this.disposed=!0}))),this._register(this.editor.onDidBlurEditorWidget((()=>{this.hide()})))}handleUserInput(){this.session&&!this.session.isValid&&this.hide(),setTimeout((()=>{this.disposed||this.startSessionIfTriggered()}),0)}get session(){return this.completionSession.value}get ghostText(){var e;return null===(e=this.session)||void 0===e?void 0:e.ghostText}get minReservedLineCount(){return this.session?this.session.minReservedLineCount:0}setExpanded(e){var t;null===(t=this.session)||void 0===t||t.setExpanded(e)}setActive(e){var t;this.active=e,e&&(null===(t=this.session)||void 0===t||t.scheduleAutomaticUpdate())}startSessionIfTriggered(){this.editor.getOption(54).enabled&&(this.session&&this.session.isValid||this.trigger(h.bw.Automatic))}trigger(e){this.completionSession.value?e===h.bw.Explicit&&this.completionSession.value.ensureUpdateWithExplicitContext():(this.completionSession.value=new E(this.editor,this.editor.getPosition(),(()=>this.active),this.commandService,this.cache,e),this.completionSession.value.takeOwnership(this.completionSession.value.onDidChange((()=>{this.onDidChangeEmitter.fire()}))))}hide(){this.completionSession.clear(),this.onDidChangeEmitter.fire()}commitCurrentSuggestion(){var e;null===(e=this.session)||void 0===e||e.commitCurrentCompletion()}showNext(){var e;null===(e=this.session)||void 0===e||e.showNextInlineCompletion()}showPrevious(){var e;null===(e=this.session)||void 0===e||e.showPreviousInlineCompletion()}hasMultipleInlineCompletions(){var e;return D(this,void 0,void 0,(function*(){const t=yield null===(e=this.session)||void 0===e?void 0:e.hasMultipleInlineCompletions();return void 0!==t&&t}))}};I=L([N(2,C.H)],I);class E extends y{constructor(e,t,i,o,s,r){let a;super(e),this.triggerPosition=t,this.shouldUpdate=i,this.commandService=o,this.cache=s,this.initialTriggerKind=r,this.minReservedLineCount=0,this.updateOperation=this._register(new n.XK),this.updateSoon=this._register(new u.pY((()=>{let e=this.initialTriggerKind;return this.initialTriggerKind=h.bw.Automatic,this.update(e)}),50)),this.currentlySelectedCompletionId=void 0,this._register(this.onDidChange((()=>{const e=this.currentCompletion;if(e&&e.sourceInlineCompletion!==a){a=e.sourceInlineCompletion;const t=e.sourceProvider;t.handleItemDidShow&&t.handleItemDidShow(e.sourceInlineCompletions,a)}}))),this._register((0,n.OF)((()=>{this.cache.clear()}))),this._register(this.editor.onDidChangeCursorPosition((e=>{this.cache.value&&this.onDidChangeEmitter.fire()}))),this._register(this.editor.onDidChangeModelContent((e=>{this.scheduleAutomaticUpdate()}))),this._register(h.zu.onDidChange((()=>{this.updateSoon.schedule()}))),this.scheduleAutomaticUpdate()}fixAndGetIndexOfCurrentSelection(){if(!this.currentlySelectedCompletionId||!this.cache.value)return 0;if(0===this.cache.value.completions.length)return 0;const e=this.cache.value.completions.findIndex((e=>e.semanticId===this.currentlySelectedCompletionId));return-1===e?(this.currentlySelectedCompletionId=void 0,0):e}get currentCachedCompletion(){if(this.cache.value)return this.cache.value.completions[this.fixAndGetIndexOfCurrentSelection()]}showNextInlineCompletion(){var e;return D(this,void 0,void 0,(function*(){yield this.ensureUpdateWithExplicitContext();const t=(null===(e=this.cache.value)||void 0===e?void 0:e.completions)||[];if(t.length>0){const e=(this.fixAndGetIndexOfCurrentSelection()+1)%t.length;this.currentlySelectedCompletionId=t[e].semanticId}else this.currentlySelectedCompletionId=void 0;this.onDidChangeEmitter.fire()}))}showPreviousInlineCompletion(){var e;return D(this,void 0,void 0,(function*(){yield this.ensureUpdateWithExplicitContext();const t=(null===(e=this.cache.value)||void 0===e?void 0:e.completions)||[];if(t.length>0){const e=(this.fixAndGetIndexOfCurrentSelection()+t.length-1)%t.length;this.currentlySelectedCompletionId=t[e].semanticId}else this.currentlySelectedCompletionId=void 0;this.onDidChangeEmitter.fire()}))}ensureUpdateWithExplicitContext(){var e;return D(this,void 0,void 0,(function*(){this.updateOperation.value?this.updateOperation.value.triggerKind===h.bw.Explicit?yield this.updateOperation.value.promise:yield this.update(h.bw.Explicit):(null===(e=this.cache.value)||void 0===e?void 0:e.triggerKind)!==h.bw.Explicit&&(yield this.update(h.bw.Explicit))}))}hasMultipleInlineCompletions(){var e;return D(this,void 0,void 0,(function*(){return yield this.ensureUpdateWithExplicitContext(),((null===(e=this.cache.value)||void 0===e?void 0:e.completions.length)||0)>1}))}get ghostText(){const e=this.currentCompletion,t=this.editor.getOptions().get(54).mode;return e?S(e,this.editor.getModel(),t,this.editor.getPosition()):void 0}get currentCompletion(){const e=this.currentCachedCompletion;if(e)return e.toLiveInlineCompletion()}get isValid(){return this.editor.getPosition().lineNumber===this.triggerPosition.lineNumber}scheduleAutomaticUpdate(){this.updateOperation.clear(),this.updateSoon.schedule()}update(e){return D(this,void 0,void 0,(function*(){if(!this.shouldUpdate())return;const t=this.editor.getPosition(),i=(0,u.PG)((i=>D(this,void 0,void 0,(function*(){let n;try{n=yield O(t,this.editor.getModel(),{triggerKind:e,selectedSuggestionInfo:void 0},i)}catch(e){return void(0,p.dL)(e)}i.isCancellationRequested||(this.cache.setValue(this.editor,n,e),this.onDidChangeEmitter.fire())})))),n=new T(i,e);this.updateOperation.value=n,yield i,this.updateOperation.value===n&&this.updateOperation.clear()}))}takeOwnership(e){this._register(e)}commitCurrentCompletion(){if(!this.ghostText)return;const e=this.currentCompletion;e&&this.commit(e)}commit(e){const t=this.cache.clearAndLeak();this.editor.executeEdits("inlineSuggestion.accept",[m.h.replaceMove(e.range,e.text)]),e.command?this.commandService.executeCommand(e.command.id,...e.command.arguments||[]).finally((()=>{null==t||t.dispose()})).then(void 0,p.Cp):null==t||t.dispose(),this.onDidChangeEmitter.fire()}}class T{constructor(e,t){this.promise=e,this.triggerKind=t}dispose(){this.promise.cancel()}}class M extends n.JT{constructor(e,t,i,o){super(),this.triggerKind=o;const s=e.deltaDecorations([],t.items.map((e=>({range:e.range,options:{description:"inline-completion-tracking-range"}}))));this._register((0,n.OF)((()=>{e.deltaDecorations(s,[])}))),this.completions=t.items.map(((e,t)=>new A(e,s[t]))),this._register(e.onDidChangeModelContent((()=>{let t=!1;const n=e.getModel();for(const e of this.completions){const i=n.getDecorationRange(e.decorationId);i?e.synchronizedRange.equalsRange(i)||(t=!0,e.synchronizedRange=i):(0,p.dL)(new Error("Decoration has no range"))}t&&i()}))),this._register(t)}}class A{constructor(e,t){this.inlineCompletion=e,this.decorationId=t,this.semanticId=JSON.stringify({text:this.inlineCompletion.text,startLine:this.inlineCompletion.range.startLineNumber,startColumn:this.inlineCompletion.range.startColumn,command:this.inlineCompletion.command}),this.synchronizedRange=e.range}toLiveInlineCompletion(){return{text:this.inlineCompletion.text,range:this.synchronizedRange,command:this.inlineCompletion.command,sourceProvider:this.inlineCompletion.sourceProvider,sourceInlineCompletions:this.inlineCompletion.sourceInlineCompletions,sourceInlineCompletion:this.inlineCompletion.sourceInlineCompletion}}}function O(e,t,i,n=g.T.None){return D(this,void 0,void 0,(function*(){const o=function(e,t){const i=t.getWordAtPosition(e),n=t.getLineMaxColumn(e.lineNumber);return i?new v.e(e.lineNumber,i.startColumn,e.lineNumber,n):v.e.fromPositions(e,e.with(void 0,n))}(e,t),s=h.zu.all(t),r=yield Promise.all(s.map((o=>D(this,void 0,void 0,(function*(){const s=yield o.provideInlineCompletions(t,e,i,n);return{completions:s,provider:o,dispose:()=>{s&&o.freeInlineCompletions(s)}}}))))),a=new Map;for(const e of r){const t=e.completions;if(t)for(const i of t.items.map((i=>({text:i.text,range:i.range?v.e.lift(i.range):o,command:i.command,sourceProvider:e.provider,sourceInlineCompletions:t,sourceInlineCompletion:i}))))i.range.startLineNumber===i.range.endLineNumber&&a.set(JSON.stringify({text:i.text,range:i.range}),i)}return{items:[...a.values()],dispose:()=>{for(const e of r)e.dispose()}}}))}function P(e,t){if(!t)return t;const i=e.getValueInRange(t.range),n=(0,o.Mh)(i,t.text),s=e.getOffsetAt(t.range.getStartPosition())+n,r=e.getPositionAt(s),a=i.substr(n),l=(0,o.P1)(a,t.text),c=e.getPositionAt(Math.max(s,e.getOffsetAt(t.range.getEndPosition())-l));return{range:v.e.fromPositions(r,c),text:t.text.substr(n,t.text.length-n-l)}}var R=i(63472),F=i(87548),B=i(88250);class V extends n.JT{constructor(e,t){super(),this.editor=e,this.suggestControllerPreselector=t,this.isSuggestWidgetVisible=!1,this.isShiftKeyPressed=!1,this._isActive=!1,this._currentInlineCompletion=void 0,this.onDidChangeEmitter=new c.Q5,this.onDidChange=this.onDidChangeEmitter.event,this.setInactiveDelayed=this._register(new u.pY((()=>{this.isSuggestWidgetVisible||this._isActive&&(this._isActive=!1,this.onDidChangeEmitter.fire())}),100)),this._register(e.onKeyDown((e=>{e.shiftKey&&!this.isShiftKeyPressed&&(this.isShiftKeyPressed=!0,this.update(this._isActive))}))),this._register(e.onKeyUp((e=>{e.shiftKey&&this.isShiftKeyPressed&&(this.isShiftKeyPressed=!1,this.update(this._isActive))})));const i=B.SuggestController.get(this.editor);if(i){this._register(i.registerSelector({priority:100,select:(e,t,n)=>{const o=this.editor.getModel(),s=P(o,this.suggestControllerPreselector());if(!s)return-1;const r=d.L.lift(t),a=function(e,t){let i;for(const n of e)(void 0===i||t(n,i)>0)&&(i=n);return i}(n.map(((e,t)=>{const n=W(i,r,e,this.isShiftKeyPressed),a=P(o,n);if(!a)return;var l,c;return{index:t,valid:(l=s.range,c=a.range,l.startLineNumber===c.startLineNumber&&l.startColumn===c.startColumn&&(l.endLineNumber<c.endLineNumber||l.endLineNumber===c.endLineNumber&&l.endColumn<=c.endColumn)&&s.text.startsWith(a.text)),prefixLength:a.text.length,suggestItem:e}})).filter((e=>e&&e.valid)),(l=e=>e.prefixLength,c=(e,t)=>e-t,(e,t)=>c(l(e),l(t))));var l,c;return a?a.index:-1}}));let e=!1;const t=()=>{e||(e=!0,this._register(i.widget.value.onDidShow((()=>{this.isSuggestWidgetVisible=!0,this.update(!0)}))),this._register(i.widget.value.onDidHide((()=>{this.isSuggestWidgetVisible=!1,this.setInactiveDelayed.schedule(),this.update(this._isActive)}))),this._register(i.widget.value.onDidFocus((()=>{this.isSuggestWidgetVisible=!0,this.update(!0)}))))};this._register(c.ju.once(i.model.onDidTrigger)((e=>{t()})))}this.update(this._isActive)}get state(){if(this._isActive)return{selectedItemAsInlineCompletion:this._currentInlineCompletion}}update(e){const t=this.getInlineCompletion();let i=!1;var n,o;(n=this._currentInlineCompletion)===(o=t)||n&&o&&n.range.equalsRange(o.range)&&n.text===o.text&&n.command===o.command||(this._currentInlineCompletion=t,i=!0),this._isActive!==e&&(this._isActive=e,i=!0),i&&this.onDidChangeEmitter.fire()}getInlineCompletion(){const e=B.SuggestController.get(this.editor);if(!e)return;if(!this.isSuggestWidgetVisible)return;const t=e.widget.value.getFocusedItem();return t?W(e,this.editor.getPosition(),t.item,this.isShiftKeyPressed):void 0}stopForceRenderingAbove(){const e=B.SuggestController.get(this.editor);e&&e.stopForceRenderingAbove()}forceRenderingAbove(){const e=B.SuggestController.get(this.editor);e&&e.forceRenderingAbove()}}function W(e,t,i,n){if(Array.isArray(i.completion.additionalTextEdits)&&i.completion.additionalTextEdits.length>0)return{text:"",range:v.e.fromPositions(t,t)};let{insertText:o}=i.completion;if(4&i.completion.insertTextRules){const i=(new R.Yj).parse(o),n=e.editor.getModel();if(i.children.length>100)return;F.l.adjustWhitespace(n,t,i,!0,!0),o=i.toString()}const s=e.getOverwriteInfo(i,n);return{text:o,range:v.e.fromPositions(t.delta(0,-s.overwriteBefore),t.delta(0,Math.max(s.overwriteAfter,0)))}}var H=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class z extends y{constructor(e,t){super(e),this.cache=t,this.suggestionInlineCompletionSource=this._register(new V(this.editor,(()=>{var e,t;return null===(t=null===(e=this.cache.value)||void 0===e?void 0:e.completions[0])||void 0===t?void 0:t.toLiveInlineCompletion()}))),this.updateOperation=this._register(new n.XK),this.updateCacheSoon=this._register(new u.pY((()=>this.updateCache()),50)),this.minReservedLineCount=0,this._register(this.suggestionInlineCompletionSource.onDidChange((()=>{this.updateCacheSoon.schedule();this.suggestionInlineCompletionSource.state||(this.minReservedLineCount=0);const e=this.ghostText;e&&(this.minReservedLineCount=Math.max(this.minReservedLineCount,e.parts.map((e=>e.lines.length-1)).reduce(((e,t)=>e+t),0))),this.minReservedLineCount>=1&&this.isSuggestionPreviewEnabled()?this.suggestionInlineCompletionSource.forceRenderingAbove():this.suggestionInlineCompletionSource.stopForceRenderingAbove(),this.onDidChangeEmitter.fire()}))),this._register(this.cache.onDidChange((()=>{this.onDidChangeEmitter.fire()}))),this._register(this.editor.onDidChangeCursorPosition((e=>{this.isSuggestionPreviewEnabled()&&(this.minReservedLineCount=0,this.updateCacheSoon.schedule(),this.onDidChangeEmitter.fire())}))),this._register((0,n.OF)((()=>this.suggestionInlineCompletionSource.stopForceRenderingAbove())))}get isActive(){return void 0!==this.suggestionInlineCompletionSource.state}isSuggestionPreviewEnabled(){return this.editor.getOption(105).preview}updateCache(){return H(this,void 0,void 0,(function*(){const e=this.suggestionInlineCompletionSource.state;if(!e||!e.selectedItemAsInlineCompletion)return;const t={text:e.selectedItemAsInlineCompletion.text,range:e.selectedItemAsInlineCompletion.range},i=this.editor.getPosition(),n=(0,u.PG)((e=>H(this,void 0,void 0,(function*(){let n;try{n=yield O(i,this.editor.getModel(),{triggerKind:h.bw.Automatic,selectedSuggestionInfo:t},e)}catch(e){return void(0,p.dL)(e)}e.isCancellationRequested||(this.cache.setValue(this.editor,n,h.bw.Automatic),this.onDidChangeEmitter.fire())})))),o=new T(n,h.bw.Automatic);this.updateOperation.value=o,yield n,this.updateOperation.value===o&&this.updateOperation.clear()}))}get ghostText(){var e,t;if(!this.isSuggestionPreviewEnabled())return;const i=this.suggestionInlineCompletionSource.state,n=P(this.editor.getModel(),null==i?void 0:i.selectedItemAsInlineCompletion),o=P(this.editor.getModel(),null===(t=null===(e=this.cache.value)||void 0===e?void 0:e.completions[0])||void 0===t?void 0:t.toLiveInlineCompletion()),s=o&&n&&o.text.startsWith(n.text)&&o.range.equalsRange(n.range)?o:n||o,r=n?((null==s?void 0:s.text.length)||0)-n.text.length:0;return(e=>{const t=this.editor.getOptions().get(105).previewMode;return e?S(e,this.editor.getModel(),t,this.editor.getPosition(),r)||new _(e.range.endLineNumber,[],this.minReservedLineCount):void 0})(s)}}var j=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},U=function(e,t){return function(i,n){t(i,n,e)}},$=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class K extends n.JT{constructor(){super(...arguments),this.onDidChangeEmitter=new c.Q5,this.onDidChange=this.onDidChangeEmitter.event,this.hasCachedGhostText=!1,this.currentModelRef=this._register(new n.XK)}get targetModel(){var e;return null===(e=this.currentModelRef.value)||void 0===e?void 0:e.object}setTargetModel(e){var t,i,n;(null===(t=this.currentModelRef.value)||void 0===t?void 0:t.object)!==e&&(this.currentModelRef.clear(),this.currentModelRef.value=e?(i=e,n=e.onDidChange((()=>{this.hasCachedGhostText=!1,this.onDidChangeEmitter.fire()})),{object:i,dispose:()=>null==n?void 0:n.dispose()}):void 0,this.hasCachedGhostText=!1,this.onDidChangeEmitter.fire())}get ghostText(){var e,t;return this.hasCachedGhostText||(this.cachedGhostText=null===(t=null===(e=this.currentModelRef.value)||void 0===e?void 0:e.object)||void 0===t?void 0:t.ghostText,this.hasCachedGhostText=!0),this.cachedGhostText}setExpanded(e){var t;null===(t=this.targetModel)||void 0===t||t.setExpanded(e)}get minReservedLineCount(){return this.targetModel?this.targetModel.minReservedLineCount:0}}let q=class extends K{constructor(e,t){super(),this.editor=e,this.commandService=t,this.sharedCache=this._register(new Z),this.suggestWidgetAdapterModel=this._register(new z(this.editor,this.sharedCache)),this.inlineCompletionsModel=this._register(new I(this.editor,this.sharedCache,this.commandService)),this._register(this.suggestWidgetAdapterModel.onDidChange((()=>{this.updateModel()}))),this.updateModel()}get activeInlineCompletionsModel(){if(this.targetModel===this.inlineCompletionsModel)return this.inlineCompletionsModel}updateModel(){this.setTargetModel(this.suggestWidgetAdapterModel.isActive?this.suggestWidgetAdapterModel:this.inlineCompletionsModel),this.inlineCompletionsModel.setActive(this.targetModel===this.inlineCompletionsModel)}shouldShowHoverAt(e){var t;const i=null===(t=this.activeInlineCompletionsModel)||void 0===t?void 0:t.ghostText;return!!i&&i.parts.some((t=>e.containsPosition(new d.L(i.lineNumber,t.column))))}triggerInlineCompletion(){var e;null===(e=this.activeInlineCompletionsModel)||void 0===e||e.trigger(h.bw.Explicit)}commitInlineCompletion(){var e;null===(e=this.activeInlineCompletionsModel)||void 0===e||e.commitCurrentSuggestion()}hideInlineCompletion(){var e;null===(e=this.activeInlineCompletionsModel)||void 0===e||e.hide()}showNextInlineCompletion(){var e;null===(e=this.activeInlineCompletionsModel)||void 0===e||e.showNext()}showPreviousInlineCompletion(){var e;null===(e=this.activeInlineCompletionsModel)||void 0===e||e.showPrevious()}hasMultipleInlineCompletions(){var e;return $(this,void 0,void 0,(function*(){const t=yield null===(e=this.activeInlineCompletionsModel)||void 0===e?void 0:e.hasMultipleInlineCompletions();return void 0!==t&&t}))}};q=j([U(1,C.H)],q);class Z extends n.JT{constructor(){super(...arguments),this.onDidChangeEmitter=new c.Q5,this.onDidChange=this.onDidChangeEmitter.event,this.cache=this._register(new n.XK)}get value(){return this.cache.value}setValue(e,t,i){this.cache.value=new M(e,t,(()=>this.onDidChangeEmitter.fire()),i)}clearAndLeak(){return this.cache.clearAndLeak()}clear(){this.cache.clear()}}var G,Y=i(65321),Q=i(41264),X=(i(80949),i(89052)),J=i(11640),ee=i(64141),te=i(33181),ie=i(78411),ne=i(50072),oe=i(71531),se=i(27869),re=i(92550),ae=i(77736),le=i(38819),ce=i(72065),de=i(97781),he=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},ue=function(e,t){return function(i,n){t(i,n,e)}};const ge=null===(G=window.trustedTypes)||void 0===G?void 0:G.createPolicy("editorGhostText",{createHTML:e=>e});let pe=class extends n.JT{constructor(e,t,i,o){super(),this.editor=e,this.model=t,this.instantiationService=i,this.modeService=o,this.disposed=!1,this.partsWidget=this._register(this.instantiationService.createInstance(fe,this.editor)),this.additionalLinesWidget=this._register(new ve(this.editor,this.modeService.languageIdCodec)),this.viewMoreContentWidget=void 0,this._register(this.editor.onDidChangeConfiguration((e=>{(e.hasChanged(29)||e.hasChanged(104)||e.hasChanged(87)||e.hasChanged(82)||e.hasChanged(44)||e.hasChanged(43)||e.hasChanged(58))&&this.update()}))),this._register((0,n.OF)((()=>{var e;this.disposed=!0,this.update(),null===(e=this.viewMoreContentWidget)||void 0===e||e.dispose(),this.viewMoreContentWidget=void 0}))),this._register(t.onDidChange((()=>{this.update()}))),this.update()}shouldShowHoverAtViewZone(e){return this.additionalLinesWidget.viewZoneId===e}update(){var e;const t=this.model.ghostText;if(!this.editor.hasModel()||!t||this.disposed)return this.partsWidget.clear(),void this.additionalLinesWidget.clear();const i=new Array,n=new Array;function o(e,t){if(n.length>0){const i=n[n.length-1];t&&i.decorations.push(new re.Kp(i.content.length+1,i.content.length+1+e[0].length,t,0)),i.content+=e[0],e=e.slice(1)}for(const i of e)n.push({content:i,decorations:t?[new re.Kp(1,i.length+1,t,0)]:[]})}const s=this.editor.getModel().getLineContent(t.lineNumber);let r;this.editor.getModel().getLineTokens(t.lineNumber);let a=0;for(const e of t.parts){let t=e.lines;void 0===r?(i.push({column:e.column,text:t[0],preview:e.preview}),t=t.slice(1)):o([s.substring(a,e.column-1)],void 0),t.length>0&&(o(t,"ghost-text"),void 0===r&&e.column<=s.length&&(r=e.column)),a=e.column-1}void 0!==r&&o([s.substring(a)],void 0),this.partsWidget.setParts(t.lineNumber,i,void 0!==r?{column:r,length:s.length+1-r}:void 0),this.additionalLinesWidget.updateLines(t.lineNumber,n,t.additionalReservedLineCount),t.parts.some((e=>e.lines.length<0))?this.viewMoreContentWidget=this.renderViewMoreLines(new d.L(t.lineNumber,this.editor.getModel().getLineMaxColumn(t.lineNumber)),"",0):(null===(e=this.viewMoreContentWidget)||void 0===e||e.dispose(),this.viewMoreContentWidget=void 0)}renderViewMoreLines(e,t,i){const o=this.editor.getOption(43),s=document.createElement("div");s.className="suggest-preview-additional-widget",X.V.applyFontInfoSlow(s,o);const r=document.createElement("span");r.className="content-spacer",r.append(t),s.append(r);const a=document.createElement("span");a.className="content-newline suggest-preview-text",a.append("âŽ  "),s.append(a);const l=new n.SL,c=document.createElement("div");return c.className="button suggest-preview-text",c.append(`+${i} linesâ€¦`),l.add(Y.mu(c,"mousedown",(e=>{var t;null===(t=this.model)||void 0===t||t.setExpanded(!0),e.preventDefault(),this.editor.focus()}))),s.append(c),new be(this.editor,e,s,l)}};pe=he([ue(2,ce.TG),ue(3,oe.h)],pe);let fe=class{constructor(e,t,i,o){this.editor=e,this.codeEditorService=t,this.themeService=i,this.contextKeyService=o,this.decorationIds=[],this.disposableStore=new n.SL}dispose(){this.clear(),this.disposableStore.dispose()}clear(){this.editor.deltaDecorations(this.decorationIds,[]),this.disposableStore.clear()}setParts(e,t,i){this.disposableStore.clear();const n=this.themeService.getColorTheme(),o=n.getColor(se.N5);let s,r;o&&(s=String(o.rgba.a),r=Q.Il.Format.CSS.format(me(o)));const a=n.getColor(se.x3);let l;a&&(l=`2px dashed ${a}`);const c=this.editor.getModel();if(!c)return;const{tabSize:h}=c.getOptions(),u=c.getLineContent(e)||"";let g=0,p="";const f=new Array;i&&f.push({range:v.e.fromPositions(new d.L(e,i.column),new d.L(e,i.column+i.length)),options:{inlineClassName:"ghost-text-hidden",description:"ghost-text-hidden"}});const m=this.contextKeyService.getContextKeyValue("config.editor.useInjectedText"),_=void 0===m||!!m;this.decorationIds=this.editor.deltaDecorations(this.decorationIds,t.map((t=>{p+=u.substring(g,t.column-1),g=t.column-1;const i=_?t.text:this.renderSingleLineText(t.text,p,h,!1),n=this.disposableStore.add(function(e,t,i,n){const o=i+_e++;return e.registerDecorationType(t,o,n),{dispose(){e.removeDecorationType(o)},resolve:()=>e.resolveDecorationOptions(o,!0)}}(this.codeEditorService,"ghost-text","0-ghost-text-",{after:{contentText:i,opacity:s,color:r,border:l,fontWeight:t.preview?"bold":"normal"}}));return{range:v.e.fromPositions(new d.L(e,t.column)),options:_?{description:"ghost-text",after:{content:i,inlineClassName:t.preview?"ghost-text-decoration-preview":"ghost-text-decoration"},showIfCollapsed:!0}:Object.assign({},n.resolve())}})).concat(f))}renderSingleLineText(e,t,i,n){const o=t+e,s=te.io.visibleColumnsByColumns(o,i);let r="",a=t.length+1;for(const t of e){if("\t"===t){const e=s[a+1]-s[a];if(n){r+="â†’";for(let t=1;t<e;t++)r+="Â "}else for(let t=0;t<e;t++)r+="Â "}else r+=" "===t?n?"Â·":"Â ":t;a+=1}return r}};function me(e){const{r:t,b:i,g:n}=e.rgba;return new Q.Il(new Q.VS(t,n,i,255))}fe=he([ue(1,J.$),ue(2,de.XE),ue(3,le.i6)],fe);class ve{constructor(e,t){this.editor=e,this.languageIdCodec=t,this._viewZoneId=void 0}get viewZoneId(){return this._viewZoneId}dispose(){this.clear()}clear(){this.editor.changeViewZones((e=>{this._viewZoneId&&(e.removeZone(this._viewZoneId),this._viewZoneId=void 0)}))}updateLines(e,t,i){const n=this.editor.getModel();if(!n)return;const{tabSize:s}=n.getOptions();this.editor.changeViewZones((n=>{this._viewZoneId&&(n.removeZone(this._viewZoneId),this._viewZoneId=void 0);const r=Math.max(t.length,i);if(r>0){const i=document.createElement("div");!function(e,t,i,n,s){const r=n.get(29),a=n.get(104),l="none",c=n.get(82),d=n.get(44),h=n.get(43),u=n.get(58),g=(0,ne.l$)(1e4);g.appendASCIIString('<div class="suggest-preview-text">');for(let e=0,n=i.length;e<n;e++){const n=i[e],p=n.content;g.appendASCIIString('<div class="view-line'),g.appendASCIIString('" style="top:'),g.appendASCIIString(String(e*u)),g.appendASCIIString('px;width:1000000px;">');const f=o.$i(p),m=o.Ut(p),v=ie.A.createEmpty(p,s);(0,ae.d1)(new ae.IJ(h.isMonospace&&!r,h.canUseHalfwidthRightwardsArrow,p,!1,f,m,0,v,n.decorations,t,0,h.spaceWidth,h.middotWidth,h.wsmiddotWidth,a,l,c,d!==ee.n0.OFF,null),g),g.appendASCIIString("</div>")}g.appendASCIIString("</div>"),X.V.applyFontInfoSlow(e,h);const p=g.build(),f=ge?ge.createHTML(p):p;e.innerHTML=f}(i,s,t,this.editor.getOptions(),this.languageIdCodec),this._viewZoneId=n.addZone({afterLineNumber:e,heightInLines:r,domNode:i})}}))}}let _e=0;class be extends n.JT{constructor(e,t,i,o){super(),this.editor=e,this.position=t,this.domNode=i,this.allowEditorOverflow=!1,this.suppressMouseDown=!1,this._register(o),this._register((0,n.OF)((()=>{this.editor.removeContentWidget(this)}))),this.editor.addContentWidget(this)}getId(){return"editor.widget.viewMoreLinesWidget"}getDomNode(){return this.domNode}getPosition(){return{position:this.position,preference:[0]}}}(0,de.Ic)(((e,t)=>{const i=e.getColor(se.N5);if(i){const e=String(i.rgba.a),n=Q.Il.Format.CSS.format(me(i));t.addRule(`.monaco-editor .ghost-text-decoration { opacity: ${e} !important; color: ${n} !important; }`),t.addRule(`.monaco-editor .ghost-text-decoration-preview { color: ${i.toString()} !important; }`),t.addRule(`.monaco-editor .suggest-preview-text .ghost-text { opacity: ${e} !important; color: ${n} !important; }`)}const n=e.getColor(se.x3);n&&(t.addRule(`.monaco-editor .suggest-preview-text .ghost-text { border: 1px solid ${n}; }`),t.addRule(`.monaco-editor .ghost-text-decoration { border: 1px solid ${n}; }`),t.addRule(`.monaco-editor .ghost-text-decoration-preview { border: 1px solid ${n}; }`))}));var we=i(63580),ye=i(49989),Ce=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},xe=function(e,t){return function(i,n){t(i,n,e)}},Se=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let ke=class e extends n.JT{constructor(e,t){super(),this.editor=e,this.instantiationService=t,this.triggeredExplicitly=!1,this.activeController=this._register(new n.XK),this._register(this.editor.onDidChangeModel((()=>{this.updateModelController()}))),this._register(this.editor.onDidChangeConfiguration((e=>{e.hasChanged(105)&&this.updateModelController(),e.hasChanged(54)&&this.updateModelController()}))),this.updateModelController()}static get(t){return t.getContribution(e.ID)}get activeModel(){var e;return null===(e=this.activeController.value)||void 0===e?void 0:e.model}updateModelController(){const e=this.editor.getOption(105),t=this.editor.getOption(54);this.activeController.value=void 0,this.activeController.value=this.editor.hasModel()&&(e.preview||t.enabled||this.triggeredExplicitly)?this.instantiationService.createInstance(Ne,this.editor):void 0}shouldShowHoverAt(e){var t;return(null===(t=this.activeModel)||void 0===t?void 0:t.shouldShowHoverAt(e))||!1}shouldShowHoverAtViewZone(e){var t,i;return(null===(i=null===(t=this.activeController.value)||void 0===t?void 0:t.widget)||void 0===i?void 0:i.shouldShowHoverAtViewZone(e))||!1}trigger(){var e;this.triggeredExplicitly=!0,this.activeController.value||this.updateModelController(),null===(e=this.activeModel)||void 0===e||e.triggerInlineCompletion()}commit(){var e;null===(e=this.activeModel)||void 0===e||e.commitInlineCompletion()}hide(){var e;null===(e=this.activeModel)||void 0===e||e.hideInlineCompletion()}showNextInlineCompletion(){var e;null===(e=this.activeModel)||void 0===e||e.showNextInlineCompletion()}showPreviousInlineCompletion(){var e;null===(e=this.activeModel)||void 0===e||e.showPreviousInlineCompletion()}hasMultipleInlineCompletions(){var e;return Se(this,void 0,void 0,(function*(){const t=yield null===(e=this.activeModel)||void 0===e?void 0:e.hasMultipleInlineCompletions();return void 0!==t&&t}))}};ke.inlineSuggestionVisible=new le.uy("inlineSuggestionVisible",!1,we.N("inlineSuggestionVisible","Whether an inline suggestion is visible")),ke.inlineSuggestionHasIndentation=new le.uy("inlineSuggestionHasIndentation",!1,we.N("inlineSuggestionHasIndentation","Whether the inline suggestion starts with whitespace")),ke.inlineSuggestionHasIndentationLessThanTabSize=new le.uy("inlineSuggestionHasIndentationLessThanTabSize",!0,we.N("inlineSuggestionHasIndentationLessThanTabSize","Whether the inline suggestion starts with whitespace that is less than what would be inserted by tab")),ke.ID="editor.contrib.ghostTextController",ke=Ce([xe(1,ce.TG)],ke);class Le{constructor(e){this.contextKeyService=e,this.inlineCompletionVisible=ke.inlineSuggestionVisible.bindTo(this.contextKeyService),this.inlineCompletionSuggestsIndentation=ke.inlineSuggestionHasIndentation.bindTo(this.contextKeyService),this.inlineCompletionSuggestsIndentationLessThanTabSize=ke.inlineSuggestionHasIndentationLessThanTabSize.bindTo(this.contextKeyService)}}let Ne=class extends n.JT{constructor(e,t,i){super(),this.editor=e,this.instantiationService=t,this.contextKeyService=i,this.contextKeys=new Le(this.contextKeyService),this.model=this._register(this.instantiationService.createInstance(q,this.editor)),this.widget=this._register(this.instantiationService.createInstance(pe,this.editor,this.model)),this._register((0,n.OF)((()=>{this.contextKeys.inlineCompletionVisible.set(!1),this.contextKeys.inlineCompletionSuggestsIndentation.set(!1),this.contextKeys.inlineCompletionSuggestsIndentationLessThanTabSize.set(!0)}))),this._register(this.model.onDidChange((()=>{this.updateContextKeys()}))),this.updateContextKeys()}updateContextKeys(){var e;this.contextKeys.inlineCompletionVisible.set(void 0!==(null===(e=this.model.activeInlineCompletionsModel)||void 0===e?void 0:e.ghostText));let t=!1,i=!0;const n=this.model.inlineCompletionsModel.ghostText;if(this.model.activeInlineCompletionsModel&&n&&n.parts.length>0){const{column:e,lines:s}=n.parts[0],a=s[0];if(e<=this.editor.getModel().getLineIndentColumn(n.lineNumber)){let e=(0,o.LC)(a);-1===e&&(e=a.length-1),t=e>0;const n=this.editor.getModel().getOptions().tabSize;i=r.i.visibleColumnFromColumn(a,e+1,n)<n}}this.contextKeys.inlineCompletionSuggestsIndentation.set(t),this.contextKeys.inlineCompletionSuggestsIndentationLessThanTabSize.set(i)}};Ne=Ce([xe(1,ce.TG),xe(2,le.i6)],Ne);const De=s._l.bindToContribution(ke.get),Ie=new De({id:l,precondition:ke.inlineSuggestionVisible,handler(e){e.commit(),e.editor.focus()}});(0,s.fK)(Ie),ye.W.registerKeybindingRule({primary:2,weight:200,id:Ie.id,when:le.Ao.and(Ie.precondition,a.u.tabMovesFocus.toNegated(),ke.inlineSuggestionHasIndentationLessThanTabSize)}),(0,s.fK)(new De({id:"editor.action.inlineSuggest.hide",precondition:ke.inlineSuggestionVisible,kbOpts:{weight:100,primary:9},handler(e){e.hide()}}));class Ee extends s.R6{constructor(){super({id:Ee.ID,label:we.N("action.inlineSuggest.showNext","Show Next Inline Suggestion"),alias:"Show Next Inline Suggestion",precondition:le.Ao.and(a.u.writable,ke.inlineSuggestionVisible),kbOpts:{weight:100,primary:601}})}run(e,t){return Se(this,void 0,void 0,(function*(){const e=ke.get(t);e&&(e.showNextInlineCompletion(),t.focus())}))}}Ee.ID="editor.action.inlineSuggest.showNext";class Te extends s.R6{constructor(){super({id:Te.ID,label:we.N("action.inlineSuggest.showPrevious","Show Previous Inline Suggestion"),alias:"Show Previous Inline Suggestion",precondition:le.Ao.and(a.u.writable,ke.inlineSuggestionVisible),kbOpts:{weight:100,primary:599}})}run(e,t){return Se(this,void 0,void 0,(function*(){const e=ke.get(t);e&&(e.showPreviousInlineCompletion(),t.focus())}))}}Te.ID="editor.action.inlineSuggest.showPrevious";class Me extends s.R6{constructor(){super({id:"editor.action.inlineSuggest.trigger",label:we.N("action.inlineSuggest.trigger","Trigger Inline Suggestion"),alias:"Trigger Inline Suggestion",precondition:a.u.writable})}run(e,t){return Se(this,void 0,void 0,(function*(){const e=ke.get(t);e&&e.trigger()}))}}(0,s._K)(ke.ID,ke),(0,s.Qr)(Me),(0,s.Qr)(Ee),(0,s.Qr)(Te)},42408:(e,t,i)=>{"use strict";i.r(t),i.d(t,{AbstractCaseAction:()=>j,AbstractDeleteAllToBoundaryAction:()=>B,AbstractSortLinesAction:()=>D,DeleteAllLeftAction:()=>V,DeleteAllRightAction:()=>W,DeleteDuplicateLinesAction:()=>T,DeleteLinesAction:()=>A,DuplicateSelectionAction:()=>L,IndentLinesAction:()=>O,InsertLineAfterAction:()=>F,InsertLineBeforeAction:()=>R,JoinLinesAction:()=>H,LowerCaseAction:()=>$,SnakeCaseAction:()=>Z,SortLinesAscendingAction:()=>I,SortLinesDescendingAction:()=>E,TitleCaseAction:()=>q,TransposeAction:()=>z,TrimTrailingWhitespaceAction:()=>M,UpperCaseAction:()=>U});var n=i(22258),o=i(18728),s=i(16830),r=i(61329),a=i(97295),l=i(69386),c=i(24314);class d{constructor(e,t){this._selection=e,this._cursors=t,this._selectionId=null}getEditOperations(e,t){let i=function(e,t){t.sort(((e,t)=>e.lineNumber===t.lineNumber?e.column-t.column:e.lineNumber-t.lineNumber));for(let e=t.length-2;e>=0;e--)t[e].lineNumber===t[e+1].lineNumber&&t.splice(e,1);let i=[],n=0,o=0,s=t.length;for(let r=1,d=e.getLineCount();r<=d;r++){let d=e.getLineContent(r),h=d.length+1,u=0;if(o<s&&t[o].lineNumber===r&&(u=t[o].column,o++,u===h))continue;if(0===d.length)continue;let g=a.ow(d),p=0;if(-1===g)p=1;else{if(g===d.length-1)continue;p=g+2}p=Math.max(u,p),i[n++]=l.h.delete(new c.e(r,p,r,h))}return i}(e,this._cursors);for(let e=0,n=i.length;e<n;e++){let n=i[e];t.addEditOperation(n.range,n.text)}this._selectionId=t.trackSelection(this._selection)}computeCursorState(e,t){return t.getTrackedSelection(this._selectionId)}}var h=i(23582),u=i(50187),g=i(3860),p=i(29102);class f{constructor(e,t,i){this._selection=e,this._isCopyingDown=t,this._noop=i||!1,this._selectionDirection=0,this._selectionId=null,this._startLineNumberDelta=0,this._endLineNumberDelta=0}getEditOperations(e,t){let i=this._selection;this._startLineNumberDelta=0,this._endLineNumberDelta=0,i.startLineNumber<i.endLineNumber&&1===i.endColumn&&(this._endLineNumberDelta=1,i=i.setEndPosition(i.endLineNumber-1,e.getLineMaxColumn(i.endLineNumber-1)));let n=[];for(let t=i.startLineNumber;t<=i.endLineNumber;t++)n.push(e.getLineContent(t));const o=n.join("\n");""===o&&this._isCopyingDown&&(this._startLineNumberDelta++,this._endLineNumberDelta++),this._noop?t.addEditOperation(new c.e(i.endLineNumber,e.getLineMaxColumn(i.endLineNumber),i.endLineNumber+1,1),i.endLineNumber===e.getLineCount()?"":"\n"):this._isCopyingDown?t.addEditOperation(new c.e(i.startLineNumber,1,i.startLineNumber,1),o+"\n"):t.addEditOperation(new c.e(i.endLineNumber,e.getLineMaxColumn(i.endLineNumber),i.endLineNumber,e.getLineMaxColumn(i.endLineNumber)),"\n"+o),this._selectionId=t.trackSelection(i),this._selectionDirection=this._selection.getDirection()}computeCursorState(e,t){let i=t.getTrackedSelection(this._selectionId);if(0!==this._startLineNumberDelta||0!==this._endLineNumberDelta){let e=i.startLineNumber,t=i.startColumn,n=i.endLineNumber,o=i.endColumn;0!==this._startLineNumberDelta&&(e+=this._startLineNumberDelta,t=1),0!==this._endLineNumberDelta&&(n+=this._endLineNumberDelta,o=1),i=g.Y.createWithDirection(e,t,n,o,this._selectionDirection)}return i}}var m=i(10291),v=i(97354),_=i(83831),b=i(51491);class w{constructor(e,t,i){this._selection=e,this._isMovingDown=t,this._autoIndent=i,this._selectionId=null,this._moveEndLineSelectionShrink=!1}getEditOperations(e,t){let i=e.getLineCount();if(this._isMovingDown&&this._selection.endLineNumber===i)return void(this._selectionId=t.trackSelection(this._selection));if(!this._isMovingDown&&1===this._selection.startLineNumber)return void(this._selectionId=t.trackSelection(this._selection));this._moveEndPositionDown=!1;let n=this._selection;n.startLineNumber<n.endLineNumber&&1===n.endColumn&&(this._moveEndPositionDown=!0,n=n.setEndPosition(n.endLineNumber-1,e.getLineMaxColumn(n.endLineNumber-1)));const{tabSize:o,indentSize:s,insertSpaces:r}=e.getOptions();let l=this.buildIndentConverter(o,s,r),d={getLineTokens:t=>e.getLineTokens(t),getLanguageId:()=>e.getLanguageId(),getLanguageIdAtPosition:(t,i)=>e.getLanguageIdAtPosition(t,i),getLineContent:null};if(n.startLineNumber===n.endLineNumber&&1===e.getLineMaxColumn(n.startLineNumber)){let i=n.startLineNumber,o=this._isMovingDown?i+1:i-1;1===e.getLineMaxColumn(o)?t.addEditOperation(new c.e(1,1,1,1),null):(t.addEditOperation(new c.e(i,1,i,1),e.getLineContent(o)),t.addEditOperation(new c.e(o,1,o,e.getLineMaxColumn(o)),null)),n=new g.Y(o,1,o,1)}else{let i,s;if(this._isMovingDown){i=n.endLineNumber+1,s=e.getLineContent(i),t.addEditOperation(new c.e(i-1,e.getLineMaxColumn(i-1),i,e.getLineMaxColumn(i)),null);let h=s;if(this.shouldAutoIndent(e,n)){let u=this.matchEnterRule(e,l,o,i,n.startLineNumber-1);if(null!==u){let t=a.V8(e.getLineContent(i)),n=u+b.Y(t,o),l=b.J(n,o,r);h=l+this.trimLeft(s)}else{d.getLineContent=t=>t===n.startLineNumber?e.getLineContent(i):e.getLineContent(t);let t=_.zu.getGoodIndentForLine(this._autoIndent,d,e.getLanguageIdAtPosition(i,1),n.startLineNumber,l);if(null!==t){let n=a.V8(e.getLineContent(i)),l=b.Y(t,o);if(l!==b.Y(n,o)){let e=b.J(l,o,r);h=e+this.trimLeft(s)}}}t.addEditOperation(new c.e(n.startLineNumber,1,n.startLineNumber,1),h+"\n");let g=this.matchEnterRuleMovingDown(e,l,o,n.startLineNumber,i,h);if(null!==g)0!==g&&this.getIndentEditsOfMovingBlock(e,t,n,o,r,g);else{d.getLineContent=t=>t===n.startLineNumber?h:t>=n.startLineNumber+1&&t<=n.endLineNumber+1?e.getLineContent(t-1):e.getLineContent(t);let s=_.zu.getGoodIndentForLine(this._autoIndent,d,e.getLanguageIdAtPosition(i,1),n.startLineNumber+1,l);if(null!==s){const i=a.V8(e.getLineContent(n.startLineNumber)),l=b.Y(s,o),c=b.Y(i,o);if(l!==c){const i=l-c;this.getIndentEditsOfMovingBlock(e,t,n,o,r,i)}}}}else t.addEditOperation(new c.e(n.startLineNumber,1,n.startLineNumber,1),h+"\n")}else if(i=n.startLineNumber-1,s=e.getLineContent(i),t.addEditOperation(new c.e(i,1,i+1,1),null),t.addEditOperation(new c.e(n.endLineNumber,e.getLineMaxColumn(n.endLineNumber),n.endLineNumber,e.getLineMaxColumn(n.endLineNumber)),"\n"+s),this.shouldAutoIndent(e,n)){d.getLineContent=t=>t===i?e.getLineContent(n.startLineNumber):e.getLineContent(t);let s=this.matchEnterRule(e,l,o,n.startLineNumber,n.startLineNumber-2);if(null!==s)0!==s&&this.getIndentEditsOfMovingBlock(e,t,n,o,r,s);else{let s=_.zu.getGoodIndentForLine(this._autoIndent,d,e.getLanguageIdAtPosition(n.startLineNumber,1),i,l);if(null!==s){let i=a.V8(e.getLineContent(n.startLineNumber)),l=b.Y(s,o),c=b.Y(i,o);if(l!==c){let i=l-c;this.getIndentEditsOfMovingBlock(e,t,n,o,r,i)}}}}}this._selectionId=t.trackSelection(n)}buildIndentConverter(e,t,i){return{shiftIndent:n=>m.U.shiftIndent(n,n.length+1,e,t,i),unshiftIndent:n=>m.U.unshiftIndent(n,n.length+1,e,t,i)}}parseEnterResult(e,t,i,n,o){if(o){let s=o.indentation;o.indentAction===v.wU.None||o.indentAction===v.wU.Indent?s=o.indentation+o.appendText:o.indentAction===v.wU.IndentOutdent?s=o.indentation:o.indentAction===v.wU.Outdent&&(s=t.unshiftIndent(o.indentation)+o.appendText);let r=e.getLineContent(n);if(this.trimLeft(r).indexOf(this.trimLeft(s))>=0){let o=a.V8(e.getLineContent(n)),r=a.V8(s),l=_.zu.getIndentMetadata(e,n);return null!==l&&2&l&&(r=t.unshiftIndent(r)),b.Y(r,i)-b.Y(o,i)}}return null}matchEnterRuleMovingDown(e,t,i,n,o,s){if(a.ow(s)>=0){let s=e.getLineMaxColumn(o),r=_.zu.getEnterAction(this._autoIndent,e,new c.e(o,s,o,s));return this.parseEnterResult(e,t,i,n,r)}{let o=n-1;for(;o>=1;){let t=e.getLineContent(o);if(a.ow(t)>=0)break;o--}if(o<1||n>e.getLineCount())return null;let s=e.getLineMaxColumn(o),r=_.zu.getEnterAction(this._autoIndent,e,new c.e(o,s,o,s));return this.parseEnterResult(e,t,i,n,r)}}matchEnterRule(e,t,i,n,o,s){let r=o;for(;r>=1;){let t;if(t=r===o&&void 0!==s?s:e.getLineContent(r),a.ow(t)>=0)break;r--}if(r<1||n>e.getLineCount())return null;let l=e.getLineMaxColumn(r),d=_.zu.getEnterAction(this._autoIndent,e,new c.e(r,l,r,l));return this.parseEnterResult(e,t,i,n,d)}trimLeft(e){return e.replace(/^\s+/,"")}shouldAutoIndent(e,t){if(this._autoIndent<4)return!1;if(!e.isCheapToTokenize(t.startLineNumber))return!1;let i=e.getLanguageIdAtPosition(t.startLineNumber,1);return i===e.getLanguageIdAtPosition(t.endLineNumber,1)&&null!==_.zu.getIndentRulesSupport(i)}getIndentEditsOfMovingBlock(e,t,i,n,o,s){for(let r=i.startLineNumber;r<=i.endLineNumber;r++){let l=e.getLineContent(r),d=a.V8(l),h=b.Y(d,n)+s,u=b.J(h,n,o);u!==d&&(t.addEditOperation(new c.e(r,1,r,d.length+1),u),r===i.endLineNumber&&i.endColumn<=d.length+1&&""===u&&(this._moveEndLineSelectionShrink=!0))}}computeCursorState(e,t){let i=t.getTrackedSelection(this._selectionId);return this._moveEndPositionDown&&(i=i.setEndPosition(i.endLineNumber+1,1)),this._moveEndLineSelectionShrink&&i.startLineNumber<i.endLineNumber&&(i=i.setEndPosition(i.endLineNumber,2)),i}}class y{constructor(e,t){this.selection=e,this.descending=t,this.selectionId=null}static getCollator(){return y._COLLATOR||(y._COLLATOR=new Intl.Collator),y._COLLATOR}getEditOperations(e,t){let i=function(e,t,i){let n=C(e,t,i);if(!n)return null;return l.h.replace(new c.e(n.startLineNumber,1,n.endLineNumber,e.getLineMaxColumn(n.endLineNumber)),n.after.join("\n"))}(e,this.selection,this.descending);i&&t.addEditOperation(i.range,i.text),this.selectionId=t.trackSelection(this.selection)}computeCursorState(e,t){return t.getTrackedSelection(this.selectionId)}static canRun(e,t,i){if(null===e)return!1;let n=C(e,t,i);if(!n)return!1;for(let e=0,t=n.before.length;e<t;e++)if(n.before[e]!==n.after[e])return!0;return!1}}function C(e,t,i){let n=t.startLineNumber,o=t.endLineNumber;if(1===t.endColumn&&o--,n>=o)return null;let s=[];for(let t=n;t<=o;t++)s.push(e.getLineContent(t));let r=s.slice(0);return r.sort(y.getCollator().compare),!0===i&&(r=r.reverse()),{startLineNumber:n,endLineNumber:o,before:s,after:r}}y._COLLATOR=null;var x=i(63580),S=i(84144);class k extends s.R6{constructor(e,t){super(t),this.down=e}run(e,t){if(!t.hasModel())return;const i=t.getSelections().map(((e,t)=>({selection:e,index:t,ignore:!1})));i.sort(((e,t)=>c.e.compareRangesUsingStarts(e.selection,t.selection)));let n=i[0];for(let e=1;e<i.length;e++){const t=i[e];n.selection.endLineNumber===t.selection.startLineNumber&&(n.index<t.index?t.ignore=!0:(n.ignore=!0,n=t))}const o=[];for(const e of i)o.push(new f(e.selection,this.down,e.ignore));t.pushUndoStop(),t.executeCommands(this.id,o),t.pushUndoStop()}}class L extends s.R6{constructor(){super({id:"editor.action.duplicateSelection",label:x.N("duplicateSelection","Duplicate Selection"),alias:"Duplicate Selection",precondition:p.u.writable,menuOpts:{menuId:S.eH.MenubarSelectionMenu,group:"2_line",title:x.N({key:"miDuplicateSelection",comment:["&& denotes a mnemonic"]},"&&Duplicate Selection"),order:5}})}run(e,t,i){if(!t.hasModel())return;const n=[],o=t.getSelections(),s=t.getModel();for(const e of o)if(e.isEmpty())n.push(new f(e,!0));else{const t=new g.Y(e.endLineNumber,e.endColumn,e.endLineNumber,e.endColumn);n.push(new r.OY(t,s.getValueInRange(e)))}t.pushUndoStop(),t.executeCommands(this.id,n),t.pushUndoStop()}}class N extends s.R6{constructor(e,t){super(t),this.down=e}run(e,t){let i=[],n=t.getSelections()||[];const o=t.getOption(9);for(const e of n)i.push(new w(e,this.down,o));t.pushUndoStop(),t.executeCommands(this.id,i),t.pushUndoStop()}}class D extends s.R6{constructor(e,t){super(t),this.descending=e}run(e,t){const i=t.getSelections()||[];for(const e of i)if(!y.canRun(t.getModel(),e,this.descending))return;let n=[];for(let e=0,t=i.length;e<t;e++)n[e]=new y(i[e],this.descending);t.pushUndoStop(),t.executeCommands(this.id,n),t.pushUndoStop()}}class I extends D{constructor(){super(!1,{id:"editor.action.sortLinesAscending",label:x.N("lines.sortAscending","Sort Lines Ascending"),alias:"Sort Lines Ascending",precondition:p.u.writable})}}class E extends D{constructor(){super(!0,{id:"editor.action.sortLinesDescending",label:x.N("lines.sortDescending","Sort Lines Descending"),alias:"Sort Lines Descending",precondition:p.u.writable})}}class T extends s.R6{constructor(){super({id:"editor.action.removeDuplicateLines",label:x.N("lines.deleteDuplicates","Delete Duplicate Lines"),alias:"Delete Duplicate Lines",precondition:p.u.writable})}run(e,t){if(!t.hasModel())return;let i=t.getModel();if(1===i.getLineCount()&&1===i.getLineMaxColumn(1))return;let n=[],o=[],s=0;for(let e of t.getSelections()){let t=new Set,r=[];for(let n=e.startLineNumber;n<=e.endLineNumber;n++){let e=i.getLineContent(n);t.has(e)||(r.push(e),t.add(e))}let a=new g.Y(e.startLineNumber,1,e.endLineNumber,i.getLineMaxColumn(e.endLineNumber)),c=e.startLineNumber-s,d=new g.Y(c,1,c+r.length-1,r[r.length-1].length);n.push(l.h.replace(a,r.join("\n"))),o.push(d),s+=e.endLineNumber-e.startLineNumber+1-r.length}t.pushUndoStop(),t.executeEdits(this.id,n,o),t.pushUndoStop()}}class M extends s.R6{constructor(){super({id:M.ID,label:x.N("lines.trimTrailingWhitespace","Trim Trailing Whitespace"),alias:"Trim Trailing Whitespace",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:(0,n.gx)(2089,2102),weight:100}})}run(e,t,i){let n=[];"auto-save"===i.reason&&(n=(t.getSelections()||[]).map((e=>new u.L(e.positionLineNumber,e.positionColumn))));let o=t.getSelection();if(null===o)return;let s=new d(o,n);t.pushUndoStop(),t.executeCommands(this.id,[s]),t.pushUndoStop()}}M.ID="editor.action.trimTrailingWhitespace";class A extends s.R6{constructor(){super({id:"editor.action.deleteLines",label:x.N("lines.delete","Delete Line"),alias:"Delete Line",precondition:p.u.writable,kbOpts:{kbExpr:p.u.textInputFocus,primary:3113,weight:100}})}run(e,t){if(!t.hasModel())return;let i=this._getLinesToRemove(t),n=t.getModel();if(1===n.getLineCount()&&1===n.getLineMaxColumn(1))return;let o=0,s=[],r=[];for(let e=0,t=i.length;e<t;e++){const t=i[e];let a=t.startLineNumber,c=t.endLineNumber,d=1,h=n.getLineMaxColumn(c);c<n.getLineCount()?(c+=1,h=1):a>1&&(a-=1,d=n.getLineMaxColumn(a)),s.push(l.h.replace(new g.Y(a,d,c,h),"")),r.push(new g.Y(a-o,t.positionColumn,a-o,t.positionColumn)),o+=t.endLineNumber-t.startLineNumber+1}t.pushUndoStop(),t.executeEdits(this.id,s,r),t.pushUndoStop()}_getLinesToRemove(e){let t=e.getSelections().map((e=>{let t=e.endLineNumber;return e.startLineNumber<e.endLineNumber&&1===e.endColumn&&(t-=1),{startLineNumber:e.startLineNumber,selectionStartColumn:e.selectionStartColumn,endLineNumber:t,positionColumn:e.positionColumn}}));t.sort(((e,t)=>e.startLineNumber===t.startLineNumber?e.endLineNumber-t.endLineNumber:e.startLineNumber-t.startLineNumber));let i=[],n=t[0];for(let e=1;e<t.length;e++)n.endLineNumber+1>=t[e].startLineNumber?n.endLineNumber=t[e].endLineNumber:(i.push(n),n=t[e]);return i.push(n),i}}class O extends s.R6{constructor(){super({id:"editor.action.indentLines",label:x.N("lines.indent","Indent Line"),alias:"Indent Line",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:2137,weight:100}})}run(e,t){const i=t._getViewModel();i&&(t.pushUndoStop(),t.executeCommands(this.id,h.u.indent(i.cursorConfig,t.getModel(),t.getSelections())),t.pushUndoStop())}}class P extends s.R6{constructor(){super({id:"editor.action.outdentLines",label:x.N("lines.outdent","Outdent Line"),alias:"Outdent Line",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:2135,weight:100}})}run(e,t){o.CoreEditingCommands.Outdent.runEditorCommand(e,t,null)}}class R extends s.R6{constructor(){super({id:"editor.action.insertLineBefore",label:x.N("lines.insertBefore","Insert Line Above"),alias:"Insert Line Above",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:3075,weight:100}})}run(e,t){const i=t._getViewModel();i&&(t.pushUndoStop(),t.executeCommands(this.id,h.u.lineInsertBefore(i.cursorConfig,t.getModel(),t.getSelections())))}}class F extends s.R6{constructor(){super({id:"editor.action.insertLineAfter",label:x.N("lines.insertAfter","Insert Line Below"),alias:"Insert Line Below",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:2051,weight:100}})}run(e,t){const i=t._getViewModel();i&&(t.pushUndoStop(),t.executeCommands(this.id,h.u.lineInsertAfter(i.cursorConfig,t.getModel(),t.getSelections())))}}class B extends s.R6{run(e,t){if(!t.hasModel())return;const i=t.getSelection();let n=this._getRangesToDelete(t),o=[];for(let e=0,t=n.length-1;e<t;e++){let t=n[e],i=n[e+1];null===c.e.intersectRanges(t,i)?o.push(t):n[e+1]=c.e.plusRange(t,i)}o.push(n[n.length-1]);let s=this._getEndCursorState(i,o),r=o.map((e=>l.h.replace(e,"")));t.pushUndoStop(),t.executeEdits(this.id,r,s),t.pushUndoStop()}}class V extends B{constructor(){super({id:"deleteAllLeft",label:x.N("lines.deleteAllLeft","Delete All Left"),alias:"Delete All Left",precondition:p.u.writable,kbOpts:{kbExpr:p.u.textInputFocus,primary:0,mac:{primary:2049},weight:100}})}_getEndCursorState(e,t){let i=null,n=[],o=0;return t.forEach((t=>{let s;if(1===t.endColumn&&o>0){let e=t.startLineNumber-o;s=new g.Y(e,t.startColumn,e,t.startColumn)}else s=new g.Y(t.startLineNumber,t.startColumn,t.startLineNumber,t.startColumn);o+=t.endLineNumber-t.startLineNumber,t.intersectRanges(e)?i=s:n.push(s)})),i&&n.unshift(i),n}_getRangesToDelete(e){let t=e.getSelections();if(null===t)return[];let i=t,n=e.getModel();return null===n?[]:(i.sort(c.e.compareRangesUsingStarts),i=i.map((e=>{if(e.isEmpty()){if(1===e.startColumn){let t=Math.max(1,e.startLineNumber-1),i=1===e.startLineNumber?1:n.getLineContent(t).length+1;return new c.e(t,i,e.startLineNumber,1)}return new c.e(e.startLineNumber,1,e.startLineNumber,e.startColumn)}return new c.e(e.startLineNumber,1,e.endLineNumber,e.endColumn)})),i)}}class W extends B{constructor(){super({id:"deleteAllRight",label:x.N("lines.deleteAllRight","Delete All Right"),alias:"Delete All Right",precondition:p.u.writable,kbOpts:{kbExpr:p.u.textInputFocus,primary:0,mac:{primary:297,secondary:[2068]},weight:100}})}_getEndCursorState(e,t){let i=null,n=[];for(let o=0,s=t.length,r=0;o<s;o++){let s=t[o],a=new g.Y(s.startLineNumber-r,s.startColumn,s.startLineNumber-r,s.startColumn);s.intersectRanges(e)?i=a:n.push(a)}return i&&n.unshift(i),n}_getRangesToDelete(e){let t=e.getModel();if(null===t)return[];let i=e.getSelections();if(null===i)return[];let n=i.map((e=>{if(e.isEmpty()){const i=t.getLineMaxColumn(e.startLineNumber);return e.startColumn===i?new c.e(e.startLineNumber,e.startColumn,e.startLineNumber+1,1):new c.e(e.startLineNumber,e.startColumn,e.startLineNumber,i)}return e}));return n.sort(c.e.compareRangesUsingStarts),n}}class H extends s.R6{constructor(){super({id:"editor.action.joinLines",label:x.N("lines.joinLines","Join Lines"),alias:"Join Lines",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:0,mac:{primary:296},weight:100}})}run(e,t){let i=t.getSelections();if(null===i)return;let n=t.getSelection();if(null===n)return;i.sort(c.e.compareRangesUsingStarts);let o=[],s=i.reduce(((e,t)=>e.isEmpty()?e.endLineNumber===t.startLineNumber?(n.equalsSelection(e)&&(n=t),t):t.startLineNumber>e.endLineNumber+1?(o.push(e),t):new g.Y(e.startLineNumber,e.startColumn,t.endLineNumber,t.endColumn):t.startLineNumber>e.endLineNumber?(o.push(e),t):new g.Y(e.startLineNumber,e.startColumn,t.endLineNumber,t.endColumn)));o.push(s);let r=t.getModel();if(null===r)return;let a=[],d=[],h=n,u=0;for(let e=0,t=o.length;e<t;e++){let t,i,s=o[e],p=s.startLineNumber,f=1,m=0,v=r.getLineContent(s.endLineNumber).length-s.endColumn;if(s.isEmpty()||s.startLineNumber===s.endLineNumber){let e=s.getStartPosition();e.lineNumber<r.getLineCount()?(t=p+1,i=r.getLineMaxColumn(t)):(t=e.lineNumber,i=r.getLineMaxColumn(e.lineNumber))}else t=s.endLineNumber,i=r.getLineMaxColumn(t);let _=r.getLineContent(p);for(let e=p+1;e<=t;e++){let t=r.getLineContent(e),i=r.getLineFirstNonWhitespaceColumn(e);if(i>=1){let e=!0;""===_&&(e=!1),!e||" "!==_.charAt(_.length-1)&&"\t"!==_.charAt(_.length-1)||(e=!1,_=_.replace(/[\s\uFEFF\xA0]+$/g," "));let n=t.substr(i-1);_+=(e?" ":"")+n,m=e?n.length+1:n.length}else m=0}let b=new c.e(p,f,t,i);if(!b.isEmpty()){let e;s.isEmpty()?(a.push(l.h.replace(b,_)),e=new g.Y(b.startLineNumber-u,_.length-m+1,p-u,_.length-m+1)):s.startLineNumber===s.endLineNumber?(a.push(l.h.replace(b,_)),e=new g.Y(s.startLineNumber-u,s.startColumn,s.endLineNumber-u,s.endColumn)):(a.push(l.h.replace(b,_)),e=new g.Y(s.startLineNumber-u,s.startColumn,s.startLineNumber-u,_.length-v)),null!==c.e.intersectRanges(b,n)?h=e:d.push(e)}u+=b.endLineNumber-b.startLineNumber}d.unshift(h),t.pushUndoStop(),t.executeEdits(this.id,a,d),t.pushUndoStop()}}class z extends s.R6{constructor(){super({id:"editor.action.transpose",label:x.N("editor.transpose","Transpose characters around the cursor"),alias:"Transpose characters around the cursor",precondition:p.u.writable})}run(e,t){let i=t.getSelections();if(null===i)return;let n=t.getModel();if(null===n)return;let o=[];for(let e=0,t=i.length;e<t;e++){let t=i[e];if(!t.isEmpty())continue;let s=t.getStartPosition(),a=n.getLineMaxColumn(s.lineNumber);if(s.column>=a){if(s.lineNumber===n.getLineCount())continue;let e=new c.e(s.lineNumber,Math.max(1,s.column-1),s.lineNumber+1,1),t=n.getValueInRange(e).split("").reverse().join("");o.push(new r.T4(new g.Y(s.lineNumber,Math.max(1,s.column-1),s.lineNumber+1,1),t))}else{let e=new c.e(s.lineNumber,Math.max(1,s.column-1),s.lineNumber,s.column+1),t=n.getValueInRange(e).split("").reverse().join("");o.push(new r.hP(e,t,new g.Y(s.lineNumber,s.column+1,s.lineNumber,s.column+1)))}}t.pushUndoStop(),t.executeCommands(this.id,o),t.pushUndoStop()}}class j extends s.R6{run(e,t){const i=t.getSelections();if(null===i)return;const n=t.getModel();if(null===n)return;const o=t.getOption(115),s=[];for(const e of i)if(e.isEmpty()){const i=e.getStartPosition(),r=t.getConfiguredWordAtPosition(i);if(!r)continue;const a=new c.e(i.lineNumber,r.startColumn,i.lineNumber,r.endColumn),d=n.getValueInRange(a);s.push(l.h.replace(a,this._modifyText(d,o)))}else{const t=n.getValueInRange(e);s.push(l.h.replace(e,this._modifyText(t,o)))}t.pushUndoStop(),t.executeEdits(this.id,s),t.pushUndoStop()}}class U extends j{constructor(){super({id:"editor.action.transformToUppercase",label:x.N("editor.transformToUppercase","Transform to Uppercase"),alias:"Transform to Uppercase",precondition:p.u.writable})}_modifyText(e,t){return e.toLocaleUpperCase()}}class $ extends j{constructor(){super({id:"editor.action.transformToLowercase",label:x.N("editor.transformToLowercase","Transform to Lowercase"),alias:"Transform to Lowercase",precondition:p.u.writable})}_modifyText(e,t){return e.toLocaleLowerCase()}}class K{constructor(e,t){this._pattern=e,this._flags=t,this._actual=null,this._evaluated=!1}get(){if(!this._evaluated){this._evaluated=!0;try{this._actual=new RegExp(this._pattern,this._flags)}catch(e){}}return this._actual}isSupported(){return null!==this.get()}}class q extends j{constructor(){super({id:"editor.action.transformToTitlecase",label:x.N("editor.transformToTitlecase","Transform to Title Case"),alias:"Transform to Title Case",precondition:p.u.writable})}_modifyText(e,t){const i=q.titleBoundary.get();return i?e.toLocaleLowerCase().replace(i,(e=>e.toLocaleUpperCase())):e}}q.titleBoundary=new K("(^|[^\\p{L}\\p{N}']|((^|\\P{L})'))\\p{L}","gmu");class Z extends j{constructor(){super({id:"editor.action.transformToSnakecase",label:x.N("editor.transformToSnakecase","Transform to Snake Case"),alias:"Transform to Snake Case",precondition:p.u.writable})}_modifyText(e,t){const i=Z.caseBoundary.get(),n=Z.singleLetters.get();return i&&n?e.replace(i,"$1_$2").replace(n,"$1_$2$3").toLocaleLowerCase():e}}Z.caseBoundary=new K("(\\p{Ll})(\\p{Lu})","gmu"),Z.singleLetters=new K("(\\p{Lu}|\\p{N})(\\p{Lu})(\\p{Ll})","gmu"),(0,s.Qr)(class extends k{constructor(){super(!1,{id:"editor.action.copyLinesUpAction",label:x.N("lines.copyUp","Copy Line Up"),alias:"Copy Line Up",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:1552,linux:{primary:3600},weight:100},menuOpts:{menuId:S.eH.MenubarSelectionMenu,group:"2_line",title:x.N({key:"miCopyLinesUp",comment:["&& denotes a mnemonic"]},"&&Copy Line Up"),order:1}})}}),(0,s.Qr)(class extends k{constructor(){super(!0,{id:"editor.action.copyLinesDownAction",label:x.N("lines.copyDown","Copy Line Down"),alias:"Copy Line Down",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:1554,linux:{primary:3602},weight:100},menuOpts:{menuId:S.eH.MenubarSelectionMenu,group:"2_line",title:x.N({key:"miCopyLinesDown",comment:["&& denotes a mnemonic"]},"Co&&py Line Down"),order:2}})}}),(0,s.Qr)(L),(0,s.Qr)(class extends N{constructor(){super(!1,{id:"editor.action.moveLinesUpAction",label:x.N("lines.moveUp","Move Line Up"),alias:"Move Line Up",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:528,linux:{primary:528},weight:100},menuOpts:{menuId:S.eH.MenubarSelectionMenu,group:"2_line",title:x.N({key:"miMoveLinesUp",comment:["&& denotes a mnemonic"]},"Mo&&ve Line Up"),order:3}})}}),(0,s.Qr)(class extends N{constructor(){super(!0,{id:"editor.action.moveLinesDownAction",label:x.N("lines.moveDown","Move Line Down"),alias:"Move Line Down",precondition:p.u.writable,kbOpts:{kbExpr:p.u.editorTextFocus,primary:530,linux:{primary:530},weight:100},menuOpts:{menuId:S.eH.MenubarSelectionMenu,group:"2_line",title:x.N({key:"miMoveLinesDown",comment:["&& denotes a mnemonic"]},"Move &&Line Down"),order:4}})}}),(0,s.Qr)(I),(0,s.Qr)(E),(0,s.Qr)(T),(0,s.Qr)(M),(0,s.Qr)(A),(0,s.Qr)(O),(0,s.Qr)(P),(0,s.Qr)(R),(0,s.Qr)(F),(0,s.Qr)(V),(0,s.Qr)(W),(0,s.Qr)(H),(0,s.Qr)(z),(0,s.Qr)(U),(0,s.Qr)($),Z.caseBoundary.isSupported()&&Z.singleLetters.isSupported()&&(0,s.Qr)(Z),q.titleBoundary.isSupported()&&(0,s.Qr)(q)},80674:(e,t,i)=>{"use strict";i.r(t),i.d(t,{CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE:()=>L,LinkedEditingAction:()=>I,LinkedEditingContribution:()=>D,editorLinkedEditingBackground:()=>M});var n=i(9488),o=i(15393),s=i(71050),r=i(41264),a=i(17301),l=i(5976),c=i(97295),d=i(70666),h=i(16830),u=i(11640),g=i(50187),p=i(24314),f=i(29102),m=i(44174),v=i(44101),_=i(83831),b=i(63580),w=i(38819),y=i(73910),C=i(97781),x=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},S=function(e,t){return function(i,n){t(i,n,e)}},k=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const L=new w.uy("LinkedEditingInputVisible",!1),N="linked-editing-decoration";let D=class e extends l.JT{constructor(e,t){super(),this._debounceDuration=200,this._localToDispose=this._register(new l.SL),this._editor=e,this._enabled=!1,this._visibleContextKey=L.bindTo(t),this._currentDecorations=[],this._languageWordPattern=null,this._currentWordPattern=null,this._ignoreChangeEvent=!1,this._localToDispose=this._register(new l.SL),this._rangeUpdateTriggerPromise=null,this._rangeSyncTriggerPromise=null,this._currentRequest=null,this._currentRequestPosition=null,this._currentRequestModelVersion=null,this._register(this._editor.onDidChangeModel((()=>this.reinitialize(!0)))),this._register(this._editor.onDidChangeConfiguration((e=>{(e.hasChanged(61)||e.hasChanged(81))&&this.reinitialize(!1)}))),this._register(v.id.onDidChange((()=>this.reinitialize(!1)))),this._register(this._editor.onDidChangeModelLanguage((()=>this.reinitialize(!0)))),this.reinitialize(!0)}static get(t){return t.getContribution(e.ID)}reinitialize(e){const t=this._editor.getModel(),i=null!==t&&(this._editor.getOption(61)||this._editor.getOption(81))&&v.id.has(t);if(i===this._enabled&&!e)return;if(this._enabled=i,this.clearRanges(),this._localToDispose.clear(),!i||null===t)return;this._languageWordPattern=_.zu.getWordDefinition(t.getLanguageId()),this._localToDispose.add(t.onDidChangeLanguageConfiguration((()=>{this._languageWordPattern=_.zu.getWordDefinition(t.getLanguageId())})));const n=new o.vp(this._debounceDuration),s=()=>{this._rangeUpdateTriggerPromise=n.trigger((()=>this.updateRanges()),this._debounceDuration)},r=new o.vp(0),a=e=>{this._rangeSyncTriggerPromise=r.trigger((()=>this._syncRanges(e)))};this._localToDispose.add(this._editor.onDidChangeCursorPosition((()=>{s()}))),this._localToDispose.add(this._editor.onDidChangeModelContent((e=>{if(!this._ignoreChangeEvent&&this._currentDecorations.length>0){const i=t.getDecorationRange(this._currentDecorations[0]);if(i&&e.changes.every((e=>i.intersectRanges(e.range))))return void a(this._currentDecorations)}s()}))),this._localToDispose.add({dispose:()=>{n.cancel(),r.cancel()}}),this.updateRanges()}_syncRanges(e){if(!this._editor.hasModel()||e!==this._currentDecorations||0===e.length)return;const t=this._editor.getModel(),i=t.getDecorationRange(e[0]);if(!i||i.startLineNumber!==i.endLineNumber)return this.clearRanges();const n=t.getValueInRange(i);if(this._currentWordPattern){const e=n.match(this._currentWordPattern);if((e?e[0].length:0)!==n.length)return this.clearRanges()}let o=[];for(let i=1,s=e.length;i<s;i++){const s=t.getDecorationRange(e[i]);if(s)if(s.startLineNumber!==s.endLineNumber)o.push({range:s,text:n});else{let e=t.getValueInRange(s),i=n,r=s.startColumn,a=s.endColumn;const l=c.Mh(e,i);r+=l,e=e.substr(l),i=i.substr(l);const d=c.P1(e,i);a-=d,e=e.substr(0,e.length-d),i=i.substr(0,i.length-d),r===a&&0===i.length||o.push({range:new p.e(s.startLineNumber,r,s.endLineNumber,a),text:i})}}if(0!==o.length)try{this._editor.popUndoStop(),this._ignoreChangeEvent=!0;const e=this._editor._getViewModel().getPrevEditOperationType();this._editor.executeEdits("linkedEditing",o),this._editor._getViewModel().setPrevEditOperationType(e)}finally{this._ignoreChangeEvent=!1}}dispose(){this.clearRanges(),super.dispose()}clearRanges(){this._visibleContextKey.set(!1),this._currentDecorations=this._editor.deltaDecorations(this._currentDecorations,[]),this._currentRequest&&(this._currentRequest.cancel(),this._currentRequest=null,this._currentRequestPosition=null)}updateRanges(t=!1){return k(this,void 0,void 0,(function*(){if(!this._editor.hasModel())return void this.clearRanges();const i=this._editor.getPosition();if(!this._enabled&&!t||this._editor.getSelections().length>1)return void this.clearRanges();const n=this._editor.getModel(),s=n.getVersionId();if(this._currentRequestPosition&&this._currentRequestModelVersion===s){if(i.equals(this._currentRequestPosition))return;if(this._currentDecorations&&this._currentDecorations.length>0){const e=n.getDecorationRange(this._currentDecorations[0]);if(e&&e.containsPosition(i))return}}this._currentRequestPosition=i,this._currentRequestModelVersion=s;const r=(0,o.PG)((t=>k(this,void 0,void 0,(function*(){try{const o=yield T(n,i,t);if(r!==this._currentRequest)return;if(this._currentRequest=null,s!==n.getVersionId())return;let a=[];(null==o?void 0:o.ranges)&&(a=o.ranges),this._currentWordPattern=(null==o?void 0:o.wordPattern)||this._languageWordPattern;let l=!1;for(let e=0,t=a.length;e<t;e++)if(p.e.containsPosition(a[e],i)){if(l=!0,0!==e){const t=a[e];a.splice(e,1),a.unshift(t)}break}if(!l)return void this.clearRanges();const c=a.map((t=>({range:t,options:e.DECORATION})));this._visibleContextKey.set(!0),this._currentDecorations=this._editor.deltaDecorations(this._currentDecorations,c)}catch(e){(0,a.VV)(e)||(0,a.dL)(e),this._currentRequest!==r&&this._currentRequest||this.clearRanges()}}))));return this._currentRequest=r,r}))}};D.ID="editor.contrib.linkedEditing",D.DECORATION=m.qx.register({description:"linked-editing",stickiness:0,className:N}),D=x([S(1,w.i6)],D);class I extends h.R6{constructor(){super({id:"editor.action.linkedEditing",label:b.N("linkedEditing.label","Start Linked Editing"),alias:"Start Linked Editing",precondition:w.Ao.and(f.u.writable,f.u.hasRenameProvider),kbOpts:{kbExpr:f.u.editorTextFocus,primary:3132,weight:100}})}runCommand(e,t){const i=e.get(u.$),[n,o]=Array.isArray(t)&&t||[void 0,void 0];return d.o.isUri(n)&&g.L.isIPosition(o)?i.openCodeEditor({resource:n},i.getActiveCodeEditor()).then((e=>{e&&(e.setPosition(o),e.invokeWithinContext((t=>(this.reportTelemetry(t,e),this.run(t,e)))))}),a.dL):super.runCommand(e,t)}run(e,t){const i=D.get(t);return i?Promise.resolve(i.updateRanges(!0)):Promise.resolve()}}const E=h._l.bindToContribution(D.get);function T(e,t,i){const s=v.id.ordered(e);return(0,o.Ps)(s.map((n=>()=>k(this,void 0,void 0,(function*(){try{return yield n.provideLinkedEditingRanges(e,t,i)}catch(e){return void(0,a.Cp)(e)}})))),(e=>!!e&&n.Of(null==e?void 0:e.ranges)))}(0,h.fK)(new E({id:"cancelLinkedEditingInput",precondition:L,handler:e=>e.clearRanges(),kbOpts:{kbExpr:f.u.editorTextFocus,weight:199,primary:9,secondary:[1033]}}));const M=(0,y.P6)("editor.linkedEditingBackground",{dark:r.Il.fromHex("#f00").transparent(.3),light:r.Il.fromHex("#f00").transparent(.3),hc:r.Il.fromHex("#f00").transparent(.3)},b.N("editorLinkedEditingBackground","Background color when the editor auto renames on type."));(0,C.Ic)(((e,t)=>{const i=e.getColor(M);i&&t.addRule(`.monaco-editor .${N} { background: ${i}; border-left-color: ${i}; }`)})),(0,h.sb)("_executeLinkedEditingProvider",((e,t)=>T(e,t,s.T.None))),(0,h._K)(D.ID,D),(0,h.Qr)(I)},34800:(e,t,i)=>{"use strict";i.r(t),i.d(t,{LinkDetector:()=>P});var n=i(15393),o=i(71050),s=i(17301),r=i(59365),a=i(5976),l=i(66663),c=i(1432),d=i(95935),h=i(70666),u=(i(59072),i(16830)),g=i(44174),p=i(44101),f=i(69241),m=i(9488),v=i(98401),_=i(24314),b=i(51200),w=i(94565),y=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class C{constructor(e,t){this._link=e,this._provider=t}toJSON(){return{range:this.range,url:this.url,tooltip:this.tooltip}}get range(){return this._link.range}get url(){return this._link.url}get tooltip(){return this._link.tooltip}resolve(e){return y(this,void 0,void 0,(function*(){return this._link.url?this._link.url:"function"==typeof this._provider.resolveLink?Promise.resolve(this._provider.resolveLink(this._link,e)).then((t=>(this._link=t||this._link,this._link.url?this.resolve(e):Promise.reject(new Error("missing"))))):Promise.reject(new Error("missing"))}))}}class x{constructor(e){this._disposables=new a.SL;let t=[];for(const[i,n]of e){const e=i.links.map((e=>new C(e,n)));t=x._union(t,e),(0,a.Wf)(i)&&this._disposables.add(i)}this.links=t}dispose(){this._disposables.dispose(),this.links.length=0}static _union(e,t){let i,n,o,s,r=[];for(i=0,o=0,n=e.length,s=t.length;i<n&&o<s;){const n=e[i],s=t[o];if(_.e.areIntersectingOrTouching(n.range,s.range)){i++;continue}_.e.compareRangesUsingStarts(n.range,s.range)<0?(r.push(n),i++):(r.push(s),o++)}for(;i<n;i++)r.push(e[i]);for(;o<s;o++)r.push(t[o]);return r}}function S(e,t){const i=[],n=p.pM.ordered(e).reverse().map(((n,o)=>Promise.resolve(n.provideLinks(e,t)).then((e=>{e&&(i[o]=[e,n])}),s.Cp)));return Promise.all(n).then((()=>{const e=new x((0,m.kX)(i));return t.isCancellationRequested?(e.dispose(),new x([])):e}))}w.P.registerCommand("_executeLinkProvider",((e,...t)=>y(void 0,void 0,void 0,(function*(){let[i,n]=t;(0,v.p_)(i instanceof h.o),"number"!=typeof n&&(n=0);const s=e.get(b.q).getModel(i);if(!s)return[];const r=yield S(s,o.T.None);if(!r)return[];for(let e=0;e<Math.min(n,r.links.length);e++)yield r.links[e].resolve(o.T.None);const a=r.links.slice(0);return r.dispose(),a}))));var k=i(63580),L=i(59422),N=i(50988),D=i(73910),I=i(97781),E=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},T=function(e,t){return function(i,n){t(i,n,e)}},M=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const A={general:g.qx.register({description:"detected-link",stickiness:1,collapseOnReplaceEdit:!0,inlineClassName:"detected-link"}),active:g.qx.register({description:"detected-link-active",stickiness:1,collapseOnReplaceEdit:!0,inlineClassName:"detected-link-active"})};class O{constructor(e,t){this.link=e,this.decorationId=t}static decoration(e,t){return{range:e.range,options:O._getOptions(e,t,!1)}}static _getOptions(e,t,i){const n=Object.assign({},i?A.active:A.general);return n.hoverMessage=function(e,t){const i=e.url&&/^command:/i.test(e.url.toString()),n=e.tooltip?e.tooltip:i?k.N("links.navigate.executeCmd","æ‰§è¡Œå‘½ä»¤"):k.N("links.navigate.follow","è¿›å…¥é“¾æŽ¥"),o=t?c.dz?k.N("links.navigate.kb.meta.mac","cmd + click"):k.N("links.navigate.kb.meta","ctrl + click"):c.dz?k.N("links.navigate.kb.alt.mac","option + click"):k.N("links.navigate.kb.alt","alt + click");if(e.url){let t="";if(/^command:/i.test(e.url.toString())){const i=e.url.toString().match(/^command:([^?#]+)/);if(i){const e=i[1];t=` "${k.N("tooltip.explanation","Execute command {0}",e)}"`}}return new r.W5("",!0).appendMarkdown(`[${n}](${e.url.toString(!0).replace(/ /g,"%20")}${t}) (${o})`)}return(new r.W5).appendText(`${n} (${o})`)}(e,t),n}activate(e,t){e.changeDecorationOptions(this.decorationId,O._getOptions(this.link,t,!0))}deactivate(e,t){e.changeDecorationOptions(this.decorationId,O._getOptions(this.link,t,!1))}}let P=class e{constructor(e,t,i){this.listenersToRemove=new a.SL,this.editor=e,this.openerService=t,this.notificationService=i;let o=new f.yN(e);this.listenersToRemove.add(o),this.listenersToRemove.add(o.onMouseMoveOrRelevantKeyDown((([e,t])=>{this._onEditorMouseMove(e,t)}))),this.listenersToRemove.add(o.onExecute((e=>{this.onEditorMouseUp(e)}))),this.listenersToRemove.add(o.onCancel((e=>{this.cleanUpActiveLinkDecoration()}))),this.enabled=e.getOption(62),this.listenersToRemove.add(e.onDidChangeConfiguration((t=>{const i=e.getOption(62);this.enabled!==i&&(this.enabled=i,this.updateDecorations([]),this.stop(),this.beginCompute())}))),this.listenersToRemove.add(e.onDidChangeModelContent((e=>this.onChange()))),this.listenersToRemove.add(e.onDidChangeModel((e=>this.onModelChanged()))),this.listenersToRemove.add(e.onDidChangeModelLanguage((e=>this.onModelModeChanged()))),this.listenersToRemove.add(p.pM.onDidChange((e=>this.onModelModeChanged()))),this.timeout=new n._F,this.computePromise=null,this.activeLinksList=null,this.currentOccurrences={},this.activeLinkDecorationId=null,this.beginCompute()}static get(t){return t.getContribution(e.ID)}onModelChanged(){this.currentOccurrences={},this.activeLinkDecorationId=null,this.stop(),this.beginCompute()}onModelModeChanged(){this.stop(),this.beginCompute()}onChange(){this.timeout.setIfNotSet((()=>this.beginCompute()),e.RECOMPUTE_TIME)}beginCompute(){return M(this,void 0,void 0,(function*(){if(!this.editor.hasModel()||!this.enabled)return;const e=this.editor.getModel();if(p.pM.has(e)){this.activeLinksList&&(this.activeLinksList.dispose(),this.activeLinksList=null),this.computePromise=n.PG((t=>S(e,t)));try{this.activeLinksList=yield this.computePromise,this.updateDecorations(this.activeLinksList.links)}catch(e){(0,s.dL)(e)}finally{this.computePromise=null}}}))}updateDecorations(e){const t="altKey"===this.editor.getOption(69);let i=[],n=Object.keys(this.currentOccurrences);for(let e=0,t=n.length;e<t;e++){let t=n[e],o=this.currentOccurrences[t];i.push(o.decorationId)}let o=[];if(e)for(const i of e)o.push(O.decoration(i,t));let s=this.editor.deltaDecorations(i,o);this.currentOccurrences={},this.activeLinkDecorationId=null;for(let t=0,i=s.length;t<i;t++){let i=new O(e[t],s[t]);this.currentOccurrences[i.decorationId]=i}}_onEditorMouseMove(e,t){const i="altKey"===this.editor.getOption(69);if(this.isEnabled(e,t)){this.cleanUpActiveLinkDecoration();const t=this.getLinkOccurrence(e.target.position);t&&this.editor.changeDecorations((e=>{t.activate(e,i),this.activeLinkDecorationId=t.decorationId}))}else this.cleanUpActiveLinkDecoration()}cleanUpActiveLinkDecoration(){const e="altKey"===this.editor.getOption(69);if(this.activeLinkDecorationId){const t=this.currentOccurrences[this.activeLinkDecorationId];t&&this.editor.changeDecorations((i=>{t.deactivate(i,e)})),this.activeLinkDecorationId=null}}onEditorMouseUp(e){if(!this.isEnabled(e))return;const t=this.getLinkOccurrence(e.target.position);t&&this.openLinkOccurrence(t,e.hasSideBySideModifier,!0)}openLinkOccurrence(e,t,i=!1){if(!this.openerService)return;const{link:n}=e;n.resolve(o.T.None).then((e=>{if("string"==typeof e&&this.editor.hasModel()){const t=this.editor.getModel().uri;if(t.scheme===l.lg.file&&e.startsWith(`${l.lg.file}:`)){const i=h.o.parse(e);if(i.scheme===l.lg.file){const n=d.z_(i);let o=null;n.startsWith("/./")?o=`.${n.substr(1)}`:n.startsWith("//./")&&(o=`.${n.substr(2)}`),o&&(e=d.Vo(t,o))}}}return this.openerService.open(e,{openToSide:t,fromUserGesture:i,allowContributedOpeners:!0,allowCommands:!0})}),(e=>{const t=e instanceof Error?e.message:e;"invalid"===t?this.notificationService.warn(k.N("invalid.url","Failed to open this link because it is not well-formed: {0}",n.url.toString())):"missing"===t?this.notificationService.warn(k.N("missing.url","Failed to open this link because its target is missing.")):(0,s.dL)(e)}))}getLinkOccurrence(e){if(!this.editor.hasModel()||!e)return null;const t=this.editor.getModel().getDecorationsInRange({startLineNumber:e.lineNumber,startColumn:e.column,endLineNumber:e.lineNumber,endColumn:e.column},0,!0);for(const e of t){const t=this.currentOccurrences[e.id];if(t)return t}return null}isEnabled(e,t){return Boolean(6===e.target.type&&(e.hasTriggerModifier||t&&t.keyCodeIsTriggerKey))}stop(){var e;this.timeout.cancel(),this.activeLinksList&&(null===(e=this.activeLinksList)||void 0===e||e.dispose(),this.activeLinksList=null),this.computePromise&&(this.computePromise.cancel(),this.computePromise=null)}dispose(){this.listenersToRemove.dispose(),this.stop(),this.timeout.dispose()}};P.ID="editor.linkDetector",P.RECOMPUTE_TIME=1e3,P=E([T(1,N.v4),T(2,L.lT)],P);class R extends u.R6{constructor(){super({id:"editor.action.openLink",label:k.N("label","Open Link"),alias:"Open Link",precondition:void 0})}run(e,t){let i=P.get(t);if(!i)return;if(!t.hasModel())return;let n=t.getSelections();for(let e of n){let t=i.getLinkOccurrence(e.getEndPosition());t&&i.openLinkOccurrence(t,!1)}}}(0,u._K)(P.ID,P),(0,u.Qr)(R),(0,I.Ic)(((e,t)=>{const i=e.getColor(D._Y);i&&t.addRule(`.monaco-editor .detected-link-active { color: ${i} !important; }`)}))},82276:(e,t,i)=>{"use strict";i.d(t,{O:()=>f});var n=i(85152),o=i(15393),s=i(5976),r=(i(27189),i(16830)),a=i(24314),l=i(63580),c=i(38819),d=i(73910),h=i(92321),u=i(97781),g=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},p=function(e,t){return function(i,n){t(i,n,e)}};let f=class e{constructor(t,i){this._messageWidget=new s.XK,this._messageListeners=new s.SL,this._editor=t,this._visible=e.MESSAGE_VISIBLE.bindTo(i),this._editorListener=this._editor.onDidAttemptReadOnlyEdit((()=>this._onDidAttemptReadOnlyEdit()))}static get(t){return t.getContribution(e.ID)}dispose(){this._editorListener.dispose(),this._messageListeners.dispose(),this._messageWidget.dispose(),this._visible.reset()}showMessage(e,t){let i;(0,n.Z9)(e),this._visible.set(!0),this._messageWidget.clear(),this._messageListeners.clear(),this._messageWidget.value=new v(this._editor,t,e),this._messageListeners.add(this._editor.onDidBlurEditorText((()=>this.closeMessage()))),this._messageListeners.add(this._editor.onDidChangeCursorPosition((()=>this.closeMessage()))),this._messageListeners.add(this._editor.onDidDispose((()=>this.closeMessage()))),this._messageListeners.add(this._editor.onDidChangeModel((()=>this.closeMessage()))),this._messageListeners.add(new o._F((()=>this.closeMessage()),3e3)),this._messageListeners.add(this._editor.onMouseMove((e=>{e.target.position&&(i?i.containsPosition(e.target.position)||this.closeMessage():i=new a.e(t.lineNumber-3,1,e.target.position.lineNumber+3,1))})))}closeMessage(){this._visible.reset(),this._messageListeners.clear(),this._messageWidget.value&&this._messageListeners.add(v.fadeOut(this._messageWidget.value))}_onDidAttemptReadOnlyEdit(){this._editor.hasModel()&&this.showMessage(l.N("editor.readonly","æ— æ³•åœ¨åªè¯»ç¼–è¾‘å™¨ä¸­ç¼–è¾‘(è¯·åœ¨å³è¾¹è¿›è¡Œç¼–è¾‘)"),this._editor.getPosition())}};f.ID="editor.contrib.messageController",f.MESSAGE_VISIBLE=new c.uy("messageVisible",!1,l.N("messageVisible","Whether the editor is currently showing an inline message")),f=g([p(1,c.i6)],f);const m=r._l.bindToContribution(f.get);(0,r.fK)(new m({id:"leaveEditorMessage",precondition:f.MESSAGE_VISIBLE,handler:e=>e.closeMessage(),kbOpts:{weight:130,primary:9}}));class v{constructor(e,{lineNumber:t,column:i},n){this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._editor=e,this._editor.revealLinesInCenterIfOutsideViewport(t,t,0),this._position={lineNumber:t,column:i-1},this._domNode=document.createElement("div"),this._domNode.classList.add("monaco-editor-overlaymessage");const o=document.createElement("div");o.classList.add("anchor","top"),this._domNode.appendChild(o);const s=document.createElement("div");s.classList.add("message"),s.textContent=n,this._domNode.appendChild(s);const r=document.createElement("div");r.classList.add("anchor","below"),this._domNode.appendChild(r),this._editor.addContentWidget(this),this._domNode.classList.add("fadeIn")}static fadeOut(e){let t;const i=()=>{e.dispose(),clearTimeout(t),e.getDomNode().removeEventListener("animationend",i)};return t=setTimeout(i,110),e.getDomNode().addEventListener("animationend",i),e.getDomNode().classList.add("fadeOut"),{dispose:i}}dispose(){this._editor.removeContentWidget(this)}getId(){return"messageoverlay"}getDomNode(){return this._domNode}getPosition(){return{position:this._position,preference:[1,2]}}afterRender(e){this._domNode.classList.toggle("below",2===e)}}(0,r._K)(f.ID,f),(0,u.Ic)(((e,t)=>{const i=e.getColor(d.EP);if(i){let n=e.type===h.e.HIGH_CONTRAST?2:1;t.addRule(`.monaco-editor .monaco-editor-overlaymessage .anchor.below { border-top-color: ${i}; }`),t.addRule(`.monaco-editor .monaco-editor-overlaymessage .anchor.top { border-bottom-color: ${i}; }`),t.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { border: ${n}px solid ${i}; }`)}const n=e.getColor(d._l);n&&t.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { background-color: ${n}; }`);const o=e.getColor(d.YI);o&&t.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { color: ${o}; }`)}))},38486:(e,t,i)=>{"use strict";i.r(t),i.d(t,{AddSelectionToNextFindMatchAction:()=>T,AddSelectionToPreviousFindMatchAction:()=>M,CompatChangeAll:()=>R,InsertCursorAbove:()=>C,InsertCursorBelow:()=>x,MoveSelectionToNextFindMatchAction:()=>A,MoveSelectionToPreviousFindMatchAction:()=>O,MultiCursorSelectionController:()=>I,MultiCursorSelectionControllerAction:()=>E,MultiCursorSession:()=>D,MultiCursorSessionResult:()=>N,SelectHighlightsAction:()=>P,SelectionHighlighter:()=>B});var n=i(85152),o=i(15393),s=i(22258),r=i(5976),a=i(16830),l=i(83814),c=i(24314),d=i(3860),h=i(29102),u=i(84973),g=i(44174),p=i(44101),f=i(92142),m=i(63580),v=i(84144),_=i(38819),b=i(73910),w=i(97781);function y(e,t){const i=t.filter((t=>!e.find((e=>e.equals(t)))));if(i.length>=1){const e=i.map((e=>`line ${e.viewState.position.lineNumber} column ${e.viewState.position.column}`)).join(", "),t=1===i.length?m.N("cursorAdded","Cursor added: {0}",e):m.N("cursorsAdded","Cursors added: {0}",e);(0,n.i7)(t)}}class C extends a.R6{constructor(){super({id:"editor.action.insertCursorAbove",label:m.N("mutlicursor.insertAbove","Add Cursor Above"),alias:"Add Cursor Above",precondition:void 0,kbOpts:{kbExpr:h.u.editorTextFocus,primary:2576,linux:{primary:1552,secondary:[3088]},weight:100},menuOpts:{menuId:v.eH.MenubarSelectionMenu,group:"3_multi",title:m.N({key:"miInsertCursorAbove",comment:["&& denotes a mnemonic"]},"&&Add Cursor Above"),order:2}})}run(e,t,i){if(!t.hasModel())return;let n=!0;i&&!1===i.logicalLine&&(n=!1);const o=t._getViewModel();if(o.cursorConfig.readOnly)return;o.pushStackElement();const s=o.getCursorStates();o.setCursorStates(i.source,3,l.P.addCursorUp(o,s,n)),o.revealTopMostCursor(i.source),y(s,o.getCursorStates())}}class x extends a.R6{constructor(){super({id:"editor.action.insertCursorBelow",label:m.N("mutlicursor.insertBelow","Add Cursor Below"),alias:"Add Cursor Below",precondition:void 0,kbOpts:{kbExpr:h.u.editorTextFocus,primary:2578,linux:{primary:1554,secondary:[3090]},weight:100},menuOpts:{menuId:v.eH.MenubarSelectionMenu,group:"3_multi",title:m.N({key:"miInsertCursorBelow",comment:["&& denotes a mnemonic"]},"A&&dd Cursor Below"),order:3}})}run(e,t,i){if(!t.hasModel())return;let n=!0;i&&!1===i.logicalLine&&(n=!1);const o=t._getViewModel();if(o.cursorConfig.readOnly)return;o.pushStackElement();const s=o.getCursorStates();o.setCursorStates(i.source,3,l.P.addCursorDown(o,s,n)),o.revealBottomMostCursor(i.source),y(s,o.getCursorStates())}}class S extends a.R6{constructor(){super({id:"editor.action.insertCursorAtEndOfEachLineSelected",label:m.N("mutlicursor.insertAtEndOfEachLineSelected","Add Cursors to Line Ends"),alias:"Add Cursors to Line Ends",precondition:void 0,kbOpts:{kbExpr:h.u.editorTextFocus,primary:1575,weight:100},menuOpts:{menuId:v.eH.MenubarSelectionMenu,group:"3_multi",title:m.N({key:"miInsertCursorAtEndOfEachLineSelected",comment:["&& denotes a mnemonic"]},"Add C&&ursors to Line Ends"),order:4}})}getCursorsForSelection(e,t,i){if(!e.isEmpty()){for(let n=e.startLineNumber;n<e.endLineNumber;n++){let e=t.getLineMaxColumn(n);i.push(new d.Y(n,e,n,e))}e.endColumn>1&&i.push(new d.Y(e.endLineNumber,e.endColumn,e.endLineNumber,e.endColumn))}}run(e,t){if(!t.hasModel())return;const i=t.getModel(),n=t.getSelections(),o=t._getViewModel(),s=o.getCursorStates();let r=[];n.forEach((e=>this.getCursorsForSelection(e,i,r))),r.length>0&&t.setSelections(r),y(s,o.getCursorStates())}}class k extends a.R6{constructor(){super({id:"editor.action.addCursorsToBottom",label:m.N("mutlicursor.addCursorsToBottom","Add Cursors To Bottom"),alias:"Add Cursors To Bottom",precondition:void 0})}run(e,t){if(!t.hasModel())return;const i=t.getSelections(),n=t.getModel().getLineCount();let o=[];for(let e=i[0].startLineNumber;e<=n;e++)o.push(new d.Y(e,i[0].startColumn,e,i[0].endColumn));const s=t._getViewModel(),r=s.getCursorStates();o.length>0&&t.setSelections(o),y(r,s.getCursorStates())}}class L extends a.R6{constructor(){super({id:"editor.action.addCursorsToTop",label:m.N("mutlicursor.addCursorsToTop","Add Cursors To Top"),alias:"Add Cursors To Top",precondition:void 0})}run(e,t){if(!t.hasModel())return;const i=t.getSelections();let n=[];for(let e=i[0].startLineNumber;e>=1;e--)n.push(new d.Y(e,i[0].startColumn,e,i[0].endColumn));const o=t._getViewModel(),s=o.getCursorStates();n.length>0&&t.setSelections(n),y(s,o.getCursorStates())}}class N{constructor(e,t,i){this.selections=e,this.revealRange=t,this.revealScrollType=i}}class D{constructor(e,t,i,n,o,s,r){this._editor=e,this.findController=t,this.isDisconnectedFromFindController=i,this.searchText=n,this.wholeWord=o,this.matchCase=s,this.currentMatch=r}static create(e,t){if(!e.hasModel())return null;const i=t.getState();if(!e.hasTextFocus()&&i.isRevealed&&i.searchString.length>0)return new D(e,t,!1,i.searchString,i.wholeWord,i.matchCase,null);let n,o,s=!1;const r=e.getSelections();1===r.length&&r[0].isEmpty()?(s=!0,n=!0,o=!0):(n=i.wholeWord,o=i.matchCase);const a=e.getSelection();let l,c=null;if(a.isEmpty()){const t=e.getConfiguredWordAtPosition(a.getStartPosition());if(!t)return null;l=t.word,c=new d.Y(a.startLineNumber,t.startColumn,a.startLineNumber,t.endColumn)}else l=e.getModel().getValueInRange(a).replace(/\r\n/g,"\n");return new D(e,t,s,l,n,o,c)}addSelectionToNextFindMatch(){if(!this._editor.hasModel())return null;const e=this._getNextMatch();if(!e)return null;const t=this._editor.getSelections();return new N(t.concat(e),e,0)}moveSelectionToNextFindMatch(){if(!this._editor.hasModel())return null;const e=this._getNextMatch();if(!e)return null;const t=this._editor.getSelections();return new N(t.slice(0,t.length-1).concat(e),e,0)}_getNextMatch(){if(!this._editor.hasModel())return null;if(this.currentMatch){const e=this.currentMatch;return this.currentMatch=null,e}this.findController.highlightFindOptions();const e=this._editor.getSelections(),t=e[e.length-1],i=this._editor.getModel().findNextMatch(this.searchText,t.getEndPosition(),!1,this.matchCase,this.wholeWord?this._editor.getOption(115):null,!1);return i?new d.Y(i.range.startLineNumber,i.range.startColumn,i.range.endLineNumber,i.range.endColumn):null}addSelectionToPreviousFindMatch(){if(!this._editor.hasModel())return null;const e=this._getPreviousMatch();if(!e)return null;const t=this._editor.getSelections();return new N(t.concat(e),e,0)}moveSelectionToPreviousFindMatch(){if(!this._editor.hasModel())return null;const e=this._getPreviousMatch();if(!e)return null;const t=this._editor.getSelections();return new N(t.slice(0,t.length-1).concat(e),e,0)}_getPreviousMatch(){if(!this._editor.hasModel())return null;if(this.currentMatch){const e=this.currentMatch;return this.currentMatch=null,e}this.findController.highlightFindOptions();const e=this._editor.getSelections(),t=e[e.length-1],i=this._editor.getModel().findPreviousMatch(this.searchText,t.getStartPosition(),!1,this.matchCase,this.wholeWord?this._editor.getOption(115):null,!1);return i?new d.Y(i.range.startLineNumber,i.range.startColumn,i.range.endLineNumber,i.range.endColumn):null}selectAll(){return this._editor.hasModel()?(this.findController.highlightFindOptions(),this._editor.getModel().findMatches(this.searchText,!0,!1,this.matchCase,this.wholeWord?this._editor.getOption(115):null,!1,1073741824)):[]}}class I extends r.JT{constructor(e){super(),this._sessionDispose=this._register(new r.SL),this._editor=e,this._ignoreSelectionChange=!1,this._session=null}static get(e){return e.getContribution(I.ID)}dispose(){this._endSession(),super.dispose()}_beginSessionIfNeeded(e){if(!this._session){const t=D.create(this._editor,e);if(!t)return;this._session=t;const i={searchString:this._session.searchText};this._session.isDisconnectedFromFindController&&(i.wholeWordOverride=1,i.matchCaseOverride=1,i.isRegexOverride=2),e.getState().change(i,!1),this._sessionDispose.add(this._editor.onDidChangeCursorSelection((e=>{this._ignoreSelectionChange||this._endSession()}))),this._sessionDispose.add(this._editor.onDidBlurEditorText((()=>{this._endSession()}))),this._sessionDispose.add(e.getState().onFindReplaceStateChange((e=>{(e.matchCase||e.wholeWord)&&this._endSession()})))}}_endSession(){if(this._sessionDispose.clear(),this._session&&this._session.isDisconnectedFromFindController){const e={wholeWordOverride:0,matchCaseOverride:0,isRegexOverride:0};this._session.findController.getState().change(e,!1)}this._session=null}_setSelections(e){this._ignoreSelectionChange=!0,this._editor.setSelections(e),this._ignoreSelectionChange=!1}_expandEmptyToWord(e,t){if(!t.isEmpty())return t;const i=this._editor.getConfiguredWordAtPosition(t.getStartPosition());return i?new d.Y(t.startLineNumber,i.startColumn,t.startLineNumber,i.endColumn):t}_applySessionResult(e){e&&(this._setSelections(e.selections),e.revealRange&&this._editor.revealRangeInCenterIfOutsideViewport(e.revealRange,e.revealScrollType))}getSession(e){return this._session}addSelectionToNextFindMatch(e){if(this._editor.hasModel()){if(!this._session){const t=this._editor.getSelections();if(t.length>1){const i=e.getState().matchCase;if(!V(this._editor.getModel(),t,i)){const e=this._editor.getModel();let i=[];for(let n=0,o=t.length;n<o;n++)i[n]=this._expandEmptyToWord(e,t[n]);return void this._editor.setSelections(i)}}}this._beginSessionIfNeeded(e),this._session&&this._applySessionResult(this._session.addSelectionToNextFindMatch())}}addSelectionToPreviousFindMatch(e){this._beginSessionIfNeeded(e),this._session&&this._applySessionResult(this._session.addSelectionToPreviousFindMatch())}moveSelectionToNextFindMatch(e){this._beginSessionIfNeeded(e),this._session&&this._applySessionResult(this._session.moveSelectionToNextFindMatch())}moveSelectionToPreviousFindMatch(e){this._beginSessionIfNeeded(e),this._session&&this._applySessionResult(this._session.moveSelectionToPreviousFindMatch())}selectAll(e){if(!this._editor.hasModel())return;let t=null;const i=e.getState();if(i.isRevealed&&i.searchString.length>0&&i.isRegex)t=this._editor.getModel().findMatches(i.searchString,!0,i.isRegex,i.matchCase,i.wholeWord?this._editor.getOption(115):null,!1,1073741824);else{if(this._beginSessionIfNeeded(e),!this._session)return;t=this._session.selectAll()}if(i.searchScope){const e=i.searchScope;let n=[];t.forEach((t=>{e.forEach((e=>{t.range.endLineNumber<=e.endLineNumber&&t.range.startLineNumber>=e.startLineNumber&&n.push(t)}))})),t=n}if(t.length>0){const e=this._editor.getSelection();for(let i=0,n=t.length;i<n;i++){const n=t[i];if(n.range.intersectRanges(e)){t[i]=t[0],t[0]=n;break}}this._setSelections(t.map((e=>new d.Y(e.range.startLineNumber,e.range.startColumn,e.range.endLineNumber,e.range.endColumn))))}}}I.ID="editor.contrib.multiCursorController";class E extends a.R6{run(e,t){const i=I.get(t);if(!i)return;const n=f.CommonFindController.get(t);if(!n)return;const o=t._getViewModel();if(o){const e=o.getCursorStates();this._run(i,n),y(e,o.getCursorStates())}}}class T extends E{constructor(){super({id:"editor.action.addSelectionToNextFindMatch",label:m.N("addSelectionToNextFindMatch","Add Selection To Next Find Match"),alias:"Add Selection To Next Find Match",precondition:void 0,kbOpts:{kbExpr:h.u.focus,primary:2082,weight:100},menuOpts:{menuId:v.eH.MenubarSelectionMenu,group:"3_multi",title:m.N({key:"miAddSelectionToNextFindMatch",comment:["&& denotes a mnemonic"]},"Add &&Next Occurrence"),order:5}})}_run(e,t){e.addSelectionToNextFindMatch(t)}}class M extends E{constructor(){super({id:"editor.action.addSelectionToPreviousFindMatch",label:m.N("addSelectionToPreviousFindMatch","Add Selection To Previous Find Match"),alias:"Add Selection To Previous Find Match",precondition:void 0,menuOpts:{menuId:v.eH.MenubarSelectionMenu,group:"3_multi",title:m.N({key:"miAddSelectionToPreviousFindMatch",comment:["&& denotes a mnemonic"]},"Add P&&revious Occurrence"),order:6}})}_run(e,t){e.addSelectionToPreviousFindMatch(t)}}class A extends E{constructor(){super({id:"editor.action.moveSelectionToNextFindMatch",label:m.N("moveSelectionToNextFindMatch","Move Last Selection To Next Find Match"),alias:"Move Last Selection To Next Find Match",precondition:void 0,kbOpts:{kbExpr:h.u.focus,primary:(0,s.gx)(2089,2082),weight:100}})}_run(e,t){e.moveSelectionToNextFindMatch(t)}}class O extends E{constructor(){super({id:"editor.action.moveSelectionToPreviousFindMatch",label:m.N("moveSelectionToPreviousFindMatch","Move Last Selection To Previous Find Match"),alias:"Move Last Selection To Previous Find Match",precondition:void 0})}_run(e,t){e.moveSelectionToPreviousFindMatch(t)}}class P extends E{constructor(){super({id:"editor.action.selectHighlights",label:m.N("selectAllOccurrencesOfFindMatch","Select All Occurrences of Find Match"),alias:"Select All Occurrences of Find Match",precondition:void 0,kbOpts:{kbExpr:h.u.focus,primary:3114,weight:100},menuOpts:{menuId:v.eH.MenubarSelectionMenu,group:"3_multi",title:m.N({key:"miSelectHighlights",comment:["&& denotes a mnemonic"]},"Select All &&Occurrences"),order:7}})}_run(e,t){e.selectAll(t)}}class R extends E{constructor(){super({id:"editor.action.changeAll",label:m.N("changeAll.label","Change All Occurrences"),alias:"Change All Occurrences",precondition:_.Ao.and(h.u.writable,h.u.editorTextFocus),kbOpts:{kbExpr:h.u.editorTextFocus,primary:2108,weight:100},contextMenuOpts:{group:"1_modification",order:1.2}})}_run(e,t){e.selectAll(t)}}class F{constructor(e,t,i,n){this.searchText=e,this.matchCase=t,this.wordSeparators=i,this.modelVersionId=n}static softEquals(e,t){return!e&&!t||!(!e||!t)&&(e.searchText===t.searchText&&e.matchCase===t.matchCase&&e.wordSeparators===t.wordSeparators&&e.modelVersionId===t.modelVersionId)}}class B extends r.JT{constructor(e){super(),this.editor=e,this._isEnabled=e.getOption(96),this.decorations=[],this.updateSoon=this._register(new o.pY((()=>this._update()),300)),this.state=null,this._register(e.onDidChangeConfiguration((t=>{this._isEnabled=e.getOption(96)}))),this._register(e.onDidChangeCursorSelection((e=>{this._isEnabled&&(e.selection.isEmpty()?3===e.reason?(this.state&&this._setState(null),this.updateSoon.schedule()):this._setState(null):this._update())}))),this._register(e.onDidChangeModel((e=>{this._setState(null)}))),this._register(e.onDidChangeModelContent((e=>{this._isEnabled&&this.updateSoon.schedule()}))),this._register(f.CommonFindController.get(e).getState().onFindReplaceStateChange((e=>{this._update()})))}_update(){this._setState(B._createState(this._isEnabled,this.editor))}static _createState(e,t){if(!e)return null;if(!t.hasModel())return null;const i=t.getSelection();if(i.startLineNumber!==i.endLineNumber)return null;const n=I.get(t);if(!n)return null;const o=f.CommonFindController.get(t);if(!o)return null;let s=n.getSession(o);if(!s){const e=t.getSelections();if(e.length>1){const i=o.getState().matchCase;if(!V(t.getModel(),e,i))return null}s=D.create(t,o)}if(!s)return null;if(s.currentMatch)return null;if(/^[ \t]+$/.test(s.searchText))return null;if(s.searchText.length>200)return null;const r=o.getState(),a=r.matchCase;if(r.isRevealed){let e=r.searchString;a||(e=e.toLowerCase());let t=s.searchText;if(a||(t=t.toLowerCase()),e===t&&s.matchCase===r.matchCase&&s.wholeWord===r.wholeWord&&!r.isRegex)return null}return new F(s.searchText,s.matchCase,s.wholeWord?t.getOption(115):null,t.getModel().getVersionId())}_setState(e){if(F.softEquals(this.state,e))return void(this.state=e);if(this.state=e,!this.state)return void(this.decorations=this.editor.deltaDecorations(this.decorations,[]));if(!this.editor.hasModel())return;const t=this.editor.getModel();if(t.isTooLargeForTokenization())return;const i=p.vH.has(t)&&this.editor.getOption(71);let n=t.findMatches(this.state.searchText,!0,!1,this.state.matchCase,this.state.wordSeparators,!1).map((e=>e.range));n.sort(c.e.compareRangesUsingStarts);let o=this.editor.getSelections();o.sort(c.e.compareRangesUsingStarts);let s=[];for(let e=0,t=0,i=n.length,r=o.length;e<i;){const i=n[e];if(t>=r)s.push(i),e++;else{const n=c.e.compareRangesUsingStarts(i,o[t]);n<0?(!o[t].isEmpty()&&c.e.areIntersecting(i,o[t])||s.push(i),e++):(n>0||e++,t++)}}const r=s.map((e=>({range:e,options:i?B._SELECTION_HIGHLIGHT:B._SELECTION_HIGHLIGHT_OVERVIEW})));this.decorations=this.editor.deltaDecorations(this.decorations,r)}dispose(){this._setState(null),super.dispose()}}function V(e,t,i){const n=W(e,t[0],!i);for(let o=1,s=t.length;o<s;o++){const s=t[o];if(s.isEmpty())return!1;if(n!==W(e,s,!i))return!1}return!0}function W(e,t,i){const n=e.getValueInRange(t);return i?n.toLowerCase():n}B.ID="editor.contrib.selectionHighlighter",B._SELECTION_HIGHLIGHT_OVERVIEW=g.qx.register({description:"selection-highlight-overview",stickiness:1,className:"selectionHighlight",minimap:{color:(0,w.EN)(b.IY),position:u.F5.Inline},overviewRuler:{color:(0,w.EN)(b.SP),position:u.sh.Center}}),B._SELECTION_HIGHLIGHT=g.qx.register({description:"selection-highlight",stickiness:1,className:"selectionHighlight"}),(0,a._K)(I.ID,I),(0,a._K)(B.ID,B),(0,a.Qr)(C),(0,a.Qr)(x),(0,a.Qr)(S),(0,a.Qr)(T),(0,a.Qr)(M),(0,a.Qr)(A),(0,a.Qr)(O),(0,a.Qr)(P),(0,a.Qr)(R),(0,a.Qr)(k),(0,a.Qr)(L)},40517:(e,t,i)=>{"use strict";i.r(t),i.d(t,{TriggerParameterHintsAction:()=>G});var n=i(5976),o=i(16830),s=i(29102),r=i(44101),a=i(71050),l=i(17301),c=i(98401),d=i(70666),h=i(50187),u=i(88216),g=i(94565),p=i(38819),f=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const m={Visible:new p.uy("parameterHintsVisible",!1),MultipleSignatures:new p.uy("parameterHintsMultipleSignatures",!1)};function v(e,t,i,n){return f(this,void 0,void 0,(function*(){const o=r.nD.ordered(e);for(const s of o)try{const o=yield s.provideSignatureHelp(e,t,n,i);if(o)return o}catch(e){(0,l.Cp)(e)}}))}g.P.registerCommand("_executeSignatureHelpProvider",((e,...t)=>f(void 0,void 0,void 0,(function*(){const[i,n,o]=t;(0,c.p_)(d.o.isUri(i)),(0,c.p_)(h.L.isIPosition(n)),(0,c.p_)("string"==typeof o||!o);const s=yield e.get(u.S).createModelReference(i);try{const e=yield v(s.object.textEditorModel,h.L.lift(n),{triggerKind:r.WW.Invoke,isRetrigger:!1,triggerCharacter:o},a.T.None);if(!e)return;return setTimeout((()=>e.dispose()),0),e.value}finally{s.dispose()}}))));var _,b=i(63580),w=i(72065),y=i(65321),C=i(85152),x=i(9802),S=i(73046),k=i(4669),L=i(97295),N=(i(44735),i(43256)),D=i(71531),I=i(15393),E=i(44906),T=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};!function(e){e.Default={type:0};e.Pending=class{constructor(e,t){this.request=e,this.previouslyActiveHints=t,this.type=2}};e.Active=class{constructor(e){this.hints=e,this.type=1}}}(_||(_={}));class M extends n.JT{constructor(e,t=M.DEFAULT_DELAY){super(),this._onChangedHints=this._register(new k.Q5),this.onChangedHints=this._onChangedHints.event,this.triggerOnType=!1,this._state=_.Default,this._pendingTriggers=[],this._lastSignatureHelpResult=this._register(new n.XK),this.triggerChars=new E.q,this.retriggerChars=new E.q,this.triggerId=0,this.editor=e,this.throttledDelayer=new I.vp(t),this._register(this.editor.onDidBlurEditorWidget((()=>this.cancel()))),this._register(this.editor.onDidChangeConfiguration((()=>this.onEditorConfigurationChange()))),this._register(this.editor.onDidChangeModel((e=>this.onModelChanged()))),this._register(this.editor.onDidChangeModelLanguage((e=>this.onModelChanged()))),this._register(this.editor.onDidChangeCursorSelection((e=>this.onCursorChange(e)))),this._register(this.editor.onDidChangeModelContent((e=>this.onModelContentChange()))),this._register(r.nD.onDidChange(this.onModelChanged,this)),this._register(this.editor.onDidType((e=>this.onDidType(e)))),this.onEditorConfigurationChange(),this.onModelChanged()}get state(){return this._state}set state(e){2===this._state.type&&this._state.request.cancel(),this._state=e}cancel(e=!1){this.state=_.Default,this.throttledDelayer.cancel(),e||this._onChangedHints.fire(void 0)}trigger(e,t){const i=this.editor.getModel();if(!i||!r.nD.has(i))return;const n=++this.triggerId;this._pendingTriggers.push(e),this.throttledDelayer.trigger((()=>this.doTrigger(n)),t).catch(l.dL)}next(){if(1!==this.state.type)return;const e=this.state.hints.signatures.length,t=this.state.hints.activeSignature,i=t%e==e-1,n=this.editor.getOption(75).cycle;!(e<2||i)||n?this.updateActiveSignature(i&&n?0:t+1):this.cancel()}previous(){if(1!==this.state.type)return;const e=this.state.hints.signatures.length,t=this.state.hints.activeSignature,i=0===t,n=this.editor.getOption(75).cycle;!(e<2||i)||n?this.updateActiveSignature(i&&n?e-1:t-1):this.cancel()}updateActiveSignature(e){1===this.state.type&&(this.state=new _.Active(Object.assign(Object.assign({},this.state.hints),{activeSignature:e})),this._onChangedHints.fire(this.state.hints))}doTrigger(e){return T(this,void 0,void 0,(function*(){const t=1===this.state.type||2===this.state.type,i=this.getLastActiveHints();if(this.cancel(!0),0===this._pendingTriggers.length)return!1;const n=this._pendingTriggers.reduce(A);this._pendingTriggers=[];const o={triggerKind:n.triggerKind,triggerCharacter:n.triggerCharacter,isRetrigger:t,activeSignatureHelp:i};if(!this.editor.hasModel())return!1;const s=this.editor.getModel(),r=this.editor.getPosition();this.state=new _.Pending((0,I.PG)((e=>v(s,r,o,e))),i);try{const t=yield this.state.request;return e!==this.triggerId?(null==t||t.dispose(),!1):t&&t.value.signatures&&0!==t.value.signatures.length?(this.state=new _.Active(t.value),this._lastSignatureHelpResult.value=t,this._onChangedHints.fire(this.state.hints),!0):(null==t||t.dispose(),this._lastSignatureHelpResult.clear(),this.cancel(),!1)}catch(t){return e===this.triggerId&&(this.state=_.Default),(0,l.dL)(t),!1}}))}getLastActiveHints(){switch(this.state.type){case 1:return this.state.hints;case 2:return this.state.previouslyActiveHints;default:return}}get isTriggered(){return 1===this.state.type||2===this.state.type||this.throttledDelayer.isTriggered()}onModelChanged(){this.cancel(),this.triggerChars=new E.q,this.retriggerChars=new E.q;const e=this.editor.getModel();if(e)for(const t of r.nD.ordered(e)){for(const e of t.signatureHelpTriggerCharacters||[])this.triggerChars.add(e.charCodeAt(0)),this.retriggerChars.add(e.charCodeAt(0));for(const e of t.signatureHelpRetriggerCharacters||[])this.retriggerChars.add(e.charCodeAt(0))}}onDidType(e){if(!this.triggerOnType)return;const t=e.length-1,i=e.charCodeAt(t);(this.triggerChars.has(i)||this.isTriggered&&this.retriggerChars.has(i))&&this.trigger({triggerKind:r.WW.TriggerCharacter,triggerCharacter:e.charAt(t)})}onCursorChange(e){"mouse"===e.source?this.cancel():this.isTriggered&&this.trigger({triggerKind:r.WW.ContentChange})}onModelContentChange(){this.isTriggered&&this.trigger({triggerKind:r.WW.ContentChange})}onEditorConfigurationChange(){this.triggerOnType=this.editor.getOption(75).enabled,this.triggerOnType||this.cancel()}dispose(){this.cancel(!0),super.dispose()}}function A(e,t){switch(t.triggerKind){case r.WW.Invoke:return t;case r.WW.ContentChange:return e;case r.WW.TriggerCharacter:default:return t}}M.DEFAULT_DELAY=120;var O=i(50988),P=i(73910),R=i(59554),F=i(92321),B=i(97781),V=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},W=function(e,t){return function(i,n){t(i,n,e)}};const H=y.$,z=(0,R.q5)("parameter-hints-next",S.lA.chevronDown,b.N("parameterHintsNextIcon","Icon for show next parameter hint.")),j=(0,R.q5)("parameter-hints-previous",S.lA.chevronUp,b.N("parameterHintsPreviousIcon","Icon for show previous parameter hint."));let U=class e extends n.JT{constructor(e,t,i,o){super(),this.editor=e,this.renderDisposeables=this._register(new n.SL),this.visible=!1,this.announcedLabel=null,this.allowEditorOverflow=!0,this.markdownRenderer=this._register(new N.$({editor:e},o,i)),this.model=this._register(new M(e)),this.keyVisible=m.Visible.bindTo(t),this.keyMultipleSignatures=m.MultipleSignatures.bindTo(t),this._register(this.model.onChangedHints((e=>{e?(this.show(),this.render(e)):this.hide()})))}createParameterHintDOMNodes(){const e=H(".editor-widget.parameter-hints-widget"),t=y.R3(e,H(".phwrapper"));t.tabIndex=-1;const i=y.R3(t,H(".controls")),n=y.R3(i,H(".button"+B.kS.asCSSSelector(j))),o=y.R3(i,H(".overloads")),s=y.R3(i,H(".button"+B.kS.asCSSSelector(z)));this._register(y.nm(n,"click",(e=>{y.zB.stop(e),this.previous()}))),this._register(y.nm(s,"click",(e=>{y.zB.stop(e),this.next()})));const r=H(".body"),a=new x.s$(r,{});this._register(a),t.appendChild(a.getDomNode());const l=y.R3(r,H(".signature")),c=y.R3(r,H(".docs"));e.style.userSelect="text",this.domNodes={element:e,signature:l,overloads:o,docs:c,scrollbar:a},this.editor.addContentWidget(this),this.hide(),this._register(this.editor.onDidChangeCursorSelection((e=>{this.visible&&this.editor.layoutContentWidget(this)})));const d=()=>{if(!this.domNodes)return;const e=this.editor.getOption(43);this.domNodes.element.style.fontSize=`${e.fontSize}px`,this.domNodes.element.style.lineHeight=""+e.lineHeight/e.fontSize};d(),this._register(k.ju.chain(this.editor.onDidChangeConfiguration.bind(this.editor)).filter((e=>e.hasChanged(43))).on(d,null)),this._register(this.editor.onDidLayoutChange((e=>this.updateMaxHeight()))),this.updateMaxHeight()}show(){this.visible||(this.domNodes||this.createParameterHintDOMNodes(),this.keyVisible.set(!0),this.visible=!0,setTimeout((()=>{this.domNodes&&this.domNodes.element.classList.add("visible")}),100),this.editor.layoutContentWidget(this))}hide(){this.renderDisposeables.clear(),this.visible&&(this.keyVisible.reset(),this.visible=!1,this.announcedLabel=null,this.domNodes&&this.domNodes.element.classList.remove("visible"),this.editor.layoutContentWidget(this))}getPosition(){return this.visible?{position:this.editor.getPosition(),preference:[1,2]}:null}render(e){var t;if(this.renderDisposeables.clear(),!this.domNodes)return;const i=e.signatures.length>1;this.domNodes.element.classList.toggle("multiple",i),this.keyMultipleSignatures.set(i),this.domNodes.signature.innerText="",this.domNodes.docs.innerText="";const n=e.signatures[e.activeSignature];if(!n)return;const o=y.R3(this.domNodes.signature,H(".code")),s=this.editor.getOption(43);o.style.fontSize=`${s.fontSize}px`,o.style.fontFamily=s.fontFamily;const r=n.parameters.length>0,a=null!==(t=n.activeParameter)&&void 0!==t?t:e.activeParameter;if(r)this.renderParameters(o,n,a);else{y.R3(o,H("span")).textContent=n.label}const l=n.parameters[a];if(null==l?void 0:l.documentation){const e=H("span.documentation");if("string"==typeof l.documentation)e.textContent=l.documentation;else{const t=this.renderMarkdownDocs(l.documentation);e.appendChild(t.element)}y.R3(this.domNodes.docs,H("p",{},e))}if(void 0===n.documentation);else if("string"==typeof n.documentation)y.R3(this.domNodes.docs,H("p",{},n.documentation));else{const e=this.renderMarkdownDocs(n.documentation);y.R3(this.domNodes.docs,e.element)}const c=this.hasDocs(n,l);if(this.domNodes.signature.classList.toggle("has-docs",c),this.domNodes.docs.classList.toggle("empty",!c),this.domNodes.overloads.textContent=String(e.activeSignature+1).padStart(e.signatures.length.toString().length,"0")+"/"+e.signatures.length,l){let e="";const t=n.parameters[a];e=Array.isArray(t.label)?n.label.substring(t.label[0],t.label[1]):t.label,t.documentation&&(e+="string"==typeof t.documentation?`, ${t.documentation}`:`, ${t.documentation.value}`),n.documentation&&(e+="string"==typeof n.documentation?`, ${n.documentation}`:`, ${n.documentation.value}`),this.announcedLabel!==e&&(C.Z9(b.N("hint","{0}, hint",e)),this.announcedLabel=e)}this.editor.layoutContentWidget(this),this.domNodes.scrollbar.scanDomNode()}renderMarkdownDocs(e){const t=this.renderDisposeables.add(this.markdownRenderer.render(e,{asyncRenderCallback:()=>{var e;null===(e=this.domNodes)||void 0===e||e.scrollbar.scanDomNode()}}));return t.element.classList.add("markdown-docs"),t}hasDocs(e,t){return!!(t&&"string"==typeof t.documentation&&(0,c.cW)(t.documentation).length>0)||(!!(t&&"object"==typeof t.documentation&&(0,c.cW)(t.documentation).value.length>0)||(!!(e.documentation&&"string"==typeof e.documentation&&(0,c.cW)(e.documentation).length>0)||!!(e.documentation&&"object"==typeof e.documentation&&(0,c.cW)(e.documentation.value).length>0)))}renderParameters(e,t,i){const[n,o]=this.getParameterLabelOffsets(t,i),s=document.createElement("span");s.textContent=t.label.substring(0,n);const r=document.createElement("span");r.textContent=t.label.substring(n,o),r.className="parameter active";const a=document.createElement("span");a.textContent=t.label.substring(o),y.R3(e,s,r,a)}getParameterLabelOffsets(e,t){const i=e.parameters[t];if(i){if(Array.isArray(i.label))return i.label;if(i.label.length){const t=new RegExp(`(\\W|^)${(0,L.ec)(i.label)}(?=\\W|$)`,"g");t.test(e.label);const n=t.lastIndex-i.label.length;return n>=0?[n,t.lastIndex]:[0,0]}return[0,0]}return[0,0]}next(){this.editor.focus(),this.model.next()}previous(){this.editor.focus(),this.model.previous()}cancel(){this.model.cancel()}getDomNode(){return this.domNodes||this.createParameterHintDOMNodes(),this.domNodes.element}getId(){return e.ID}trigger(e){this.model.trigger(e,0)}updateMaxHeight(){if(!this.domNodes)return;const e=`${Math.max(this.editor.getLayoutInfo().height/4,250)}px`;this.domNodes.element.style.maxHeight=e;const t=this.domNodes.element.getElementsByClassName("phwrapper");t.length&&(t[0].style.maxHeight=e)}};U.ID="editor.widget.parameterHintsWidget",U=V([W(1,p.i6),W(2,O.v4),W(3,D.h)],U);const $=(0,P.P6)("editorHoverWidget.highlightForeground",{dark:P.Gw,light:P.Gw,hc:P.Gw},b.N("editorHoverWidgetHighlightForeground","Foreground color of the active item in the parameter hint."));(0,B.Ic)(((e,t)=>{const i=e.getColor(P.CN);if(i){const n=e.type===F.e.HIGH_CONTRAST?2:1;t.addRule(`.monaco-editor .parameter-hints-widget { border: ${n}px solid ${i}; }`),t.addRule(`.monaco-editor .parameter-hints-widget.multiple .body { border-left: 1px solid ${i.transparent(.5)}; }`),t.addRule(`.monaco-editor .parameter-hints-widget .signature.has-docs { border-bottom: 1px solid ${i.transparent(.5)}; }`)}const n=e.getColor(P.yJ);n&&t.addRule(`.monaco-editor .parameter-hints-widget { background-color: ${n}; }`);const o=e.getColor(P.ur);o&&t.addRule(`.monaco-editor .parameter-hints-widget a { color: ${o}; }`);const s=e.getColor(P.sg);s&&t.addRule(`.monaco-editor .parameter-hints-widget a:hover { color: ${s}; }`);const r=e.getColor(P.Sb);r&&t.addRule(`.monaco-editor .parameter-hints-widget { color: ${r}; }`);const a=e.getColor(P.Sw);a&&t.addRule(`.monaco-editor .parameter-hints-widget code { background-color: ${a}; }`);const l=e.getColor($);l&&t.addRule(`.monaco-editor .parameter-hints-widget .parameter.active { color: ${l}}`)}));var K=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},q=function(e,t){return function(i,n){t(i,n,e)}};let Z=class e extends n.JT{constructor(e,t){super(),this.editor=e,this.widget=this._register(t.createInstance(U,this.editor))}static get(t){return t.getContribution(e.ID)}cancel(){this.widget.cancel()}previous(){this.widget.previous()}next(){this.widget.next()}trigger(e){this.widget.trigger(e)}};Z.ID="editor.controller.parameterHints",Z=K([q(1,w.TG)],Z);class G extends o.R6{constructor(){super({id:"editor.action.triggerParameterHints",label:b.N("parameterHints.trigger.label","Trigger Parameter Hints"),alias:"Trigger Parameter Hints",precondition:s.u.hasSignatureHelpProvider,kbOpts:{kbExpr:s.u.editorTextFocus,primary:3082,weight:100}})}run(e,t){const i=Z.get(t);i&&i.trigger({triggerKind:r.WW.Invoke})}}(0,o._K)(Z.ID,Z),(0,o.Qr)(G);const Y=o._l.bindToContribution(Z.get);(0,o.fK)(new Y({id:"closeParameterHints",precondition:m.Visible,handler:e=>e.cancel(),kbOpts:{weight:175,kbExpr:s.u.focus,primary:9,secondary:[1033]}})),(0,o.fK)(new Y({id:"showPrevParameterHint",precondition:p.Ao.and(m.Visible,m.MultipleSignatures),handler:e=>e.previous(),kbOpts:{weight:175,kbExpr:s.u.focus,primary:16,secondary:[528],mac:{primary:16,secondary:[528,302]}}})),(0,o.fK)(new Y({id:"showNextParameterHint",precondition:p.Ao.and(m.Visible,m.MultipleSignatures),handler:e=>e.next(),kbOpts:{weight:175,kbExpr:s.u.focus,primary:18,secondary:[530],mac:{primary:18,secondary:[530,300]}}}))},22043:(e,t,i)=>{"use strict";i.d(t,{Fw:()=>M,Jy:()=>A,vk:()=>F,rc:()=>P,SC:()=>H,RX:()=>q,sH:()=>Z,WL:()=>Y,xH:()=>Q,M8:()=>z,a7:()=>U,xk:()=>j,F8:()=>G,Zj:()=>$,IY:()=>K,KY:()=>B,IH:()=>V,R7:()=>W});var n=i(65321),o=i(90317),s=i(74741),r=i(73046),a=i(41264),l=i(4669),c=i(36248),d=(i(42048),i(16830)),h=i(11640),u=i(84527),g=i(73098),p=i(44742),f=i(5976),m=(i(82132),i(24314)),v=i(44174);const _=new a.Il(new a.VS(0,122,204)),b={showArrow:!0,showFrame:!0,className:"",frameColor:_,arrowColor:_,keepEditorSelection:!1};class w{constructor(e,t,i,n,o,s){this.id="",this.domNode=e,this.afterLineNumber=t,this.afterColumn=i,this.heightInLines=n,this._onDomNodeTop=o,this._onComputedHeight=s}onDomNodeTop(e){this._onDomNodeTop(e)}onComputedHeight(e){this._onComputedHeight(e)}}class y{constructor(e,t){this._id=e,this._domNode=t}getId(){return this._id}getDomNode(){return this._domNode}getPosition(){return null}}class C{constructor(e){this._editor=e,this._ruleName=C._IdGenerator.nextId(),this._decorations=[],this._color=null,this._height=-1}dispose(){this.hide(),n.uN(this._ruleName)}set color(e){this._color!==e&&(this._color=e,this._updateStyle())}set height(e){this._height!==e&&(this._height=e,this._updateStyle())}_updateStyle(){n.uN(this._ruleName),n.fk(`.monaco-editor ${this._ruleName}`,`border-style: solid; border-color: transparent; border-bottom-color: ${this._color}; border-width: ${this._height}px; bottom: -${this._height}px; margin-left: -${this._height}px; `)}show(e){this._decorations=this._editor.deltaDecorations(this._decorations,[{range:m.e.fromPositions(e),options:{description:"zone-widget-arrow",className:this._ruleName,stickiness:1}}])}hide(){this._editor.deltaDecorations(this._decorations,[])}}C._IdGenerator=new p.R(".arrow-decoration-");class x{constructor(e,t={}){this._arrow=null,this._overlayWidget=null,this._resizeSash=null,this._positionMarkerId=[],this._viewZone=null,this._disposables=new f.SL,this.container=null,this._isShowing=!1,this.editor=e,this.options=c.I8(t),c.jB(this.options,b,!1),this.domNode=document.createElement("div"),this.options.isAccessible||(this.domNode.setAttribute("aria-hidden","true"),this.domNode.setAttribute("role","presentation")),this._disposables.add(this.editor.onDidLayoutChange((e=>{const t=this._getWidth(e);this.domNode.style.width=t+"px",this.domNode.style.left=this._getLeft(e)+"px",this._onWidth(t)})))}dispose(){this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this._viewZone&&this.editor.changeViewZones((e=>{this._viewZone&&e.removeZone(this._viewZone.id),this._viewZone=null})),this.editor.deltaDecorations(this._positionMarkerId,[]),this._positionMarkerId=[],this._disposables.dispose()}create(){this.domNode.classList.add("zone-widget"),this.options.className&&this.domNode.classList.add(this.options.className),this.container=document.createElement("div"),this.container.classList.add("zone-widget-container"),this.domNode.appendChild(this.container),this.options.showArrow&&(this._arrow=new C(this.editor),this._disposables.add(this._arrow)),this._fillContainer(this.container),this._initSash(),this._applyStyles()}style(e){e.frameColor&&(this.options.frameColor=e.frameColor),e.arrowColor&&(this.options.arrowColor=e.arrowColor),this._applyStyles()}_applyStyles(){if(this.container&&this.options.frameColor){let e=this.options.frameColor.toString();this.container.style.borderTopColor=e,this.container.style.borderBottomColor=e}if(this._arrow&&this.options.arrowColor){let e=this.options.arrowColor.toString();this._arrow.color=e}}_getWidth(e){return e.width-e.minimap.minimapWidth-e.verticalScrollbarWidth}_getLeft(e){return e.minimap.minimapWidth>0&&0===e.minimap.minimapLeft?e.minimap.minimapWidth:0}_onViewZoneTop(e){this.domNode.style.top=e+"px"}_onViewZoneHeight(e){if(this.domNode.style.height=`${e}px`,this.container){let t=e-this._decoratingElementsHeight();this.container.style.height=`${t}px`;const i=this.editor.getLayoutInfo();this._doLayout(t,this._getWidth(i))}this._resizeSash&&this._resizeSash.layout()}get position(){const[e]=this._positionMarkerId;if(!e)return;const t=this.editor.getModel();if(!t)return;const i=t.getDecorationRange(e);return i?i.getStartPosition():void 0}show(e,t){const i=m.e.isIRange(e)?m.e.lift(e):m.e.fromPositions(e);this._isShowing=!0,this._showImpl(i,t),this._isShowing=!1,this._positionMarkerId=this.editor.deltaDecorations(this._positionMarkerId,[{range:i,options:v.qx.EMPTY}])}hide(){this._viewZone&&(this.editor.changeViewZones((e=>{this._viewZone&&e.removeZone(this._viewZone.id)})),this._viewZone=null),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this._arrow&&this._arrow.hide()}_decoratingElementsHeight(){let e=this.editor.getOption(58),t=0;if(this.options.showArrow){t+=2*Math.round(e/3)}if(this.options.showFrame){t+=2*Math.round(e/9)}return t}_showImpl(e,t){const i=e.getStartPosition(),n=this.editor.getLayoutInfo(),o=this._getWidth(n);this.domNode.style.width=`${o}px`,this.domNode.style.left=this._getLeft(n)+"px";const s=document.createElement("div");s.style.overflow="hidden";const r=this.editor.getOption(58),a=Math.max(12,this.editor.getLayoutInfo().height/r*.8);t=Math.min(t,a);let l=0,c=0;if(this._arrow&&this.options.showArrow&&(l=Math.round(r/3),this._arrow.height=l,this._arrow.show(i)),this.options.showFrame&&(c=Math.round(r/9)),this.editor.changeViewZones((e=>{this._viewZone&&e.removeZone(this._viewZone.id),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this.domNode.style.top="-1000px",this._viewZone=new w(s,i.lineNumber,i.column,t,(e=>this._onViewZoneTop(e)),(e=>this._onViewZoneHeight(e))),this._viewZone.id=e.addZone(this._viewZone),this._overlayWidget=new y("vs.editor.contrib.zoneWidget"+this._viewZone.id,this.domNode),this.editor.addOverlayWidget(this._overlayWidget)})),this.container&&this.options.showFrame){const e=this.options.frameWidth?this.options.frameWidth:c;this.container.style.borderTopWidth=e+"px",this.container.style.borderBottomWidth=e+"px"}let d=t*r-this._decoratingElementsHeight();this.container&&(this.container.style.top=l+"px",this.container.style.height=d+"px",this.container.style.overflow="hidden"),this._doLayout(d,o),this.options.keepEditorSelection||this.editor.setSelection(e);const h=this.editor.getModel();if(h){const t=e.endLineNumber+1;t<=h.getLineCount()?this.revealLine(t,!1):this.revealLine(h.getLineCount(),!0)}}revealLine(e,t){t?this.editor.revealLineInCenter(e,0):this.editor.revealLine(e,0)}setCssClass(e,t){this.container&&(t&&this.container.classList.remove(t),this.container.classList.add(e))}_onWidth(e){}_doLayout(e,t){}_relayout(e){this._viewZone&&this._viewZone.heightInLines!==e&&this.editor.changeViewZones((t=>{this._viewZone&&(this._viewZone.heightInLines=e,t.layoutZone(this._viewZone.id))}))}_initSash(){if(this._resizeSash)return;let e;this._resizeSash=this._disposables.add(new g.g(this.domNode,this,{orientation:1})),this.options.isResizeable||(this._resizeSash.hide(),this._resizeSash.state=0),this._disposables.add(this._resizeSash.onDidStart((t=>{this._viewZone&&(e={startY:t.startY,heightInLines:this._viewZone.heightInLines})}))),this._disposables.add(this._resizeSash.onDidEnd((()=>{e=void 0}))),this._disposables.add(this._resizeSash.onDidChange((t=>{if(e){let i=(t.currentY-e.startY)/this.editor.getOption(58),n=i<0?Math.ceil(i):Math.floor(i),o=e.heightInLines+n;o>5&&o<35&&this._relayout(o)}})))}getHorizontalSashLeft(){return 0}getHorizontalSashTop(){return(null===this.domNode.style.height?0:parseInt(this.domNode.style.height))-this._decoratingElementsHeight()/2}getHorizontalSashWidth(){const e=this.editor.getLayoutInfo();return e.width-e.minimap.minimapWidth}}var S=i(63580),k=i(58335),L=i(38819),N=i(65026),D=i(72065),I=i(73910),E=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},T=function(e,t){return function(i,n){t(i,n,e)}};const M=(0,D.yh)("IPeekViewService");var A;(0,N.z)(M,class{constructor(){this._widgets=new Map}addExclusiveWidget(e,t){const i=this._widgets.get(e);i&&(i.listener.dispose(),i.widget.dispose());this._widgets.set(e,{widget:t,listener:t.onDidClose((()=>{const i=this._widgets.get(e);i&&i.widget===t&&(i.listener.dispose(),this._widgets.delete(e))}))})}}),function(e){e.inPeekEditor=new L.uy("inReferenceSearchEditor",!0,S.N("inReferenceSearchEditor","Whether the current code editor is embedded inside peek")),e.notInPeekEditor=e.inPeekEditor.toNegated()}(A||(A={}));let O=class{constructor(e,t){e instanceof u.H&&A.inPeekEditor.bindTo(t)}dispose(){}};function P(e){let t=e.get(h.$).getFocusedCodeEditor();return t instanceof u.H?t.getParentEditor():t}O.ID="editor.contrib.referenceController",O=E([T(1,L.i6)],O),(0,d._K)(O.ID,O);const R={headerBackgroundColor:a.Il.white,primaryHeadingColor:a.Il.fromHex("#333333"),secondaryHeadingColor:a.Il.fromHex("#6c6c6cb3")};let F=class extends x{constructor(e,t,i){super(e,t),this.instantiationService=i,this._onDidClose=new l.Q5,this.onDidClose=this._onDidClose.event,c.jB(this.options,R,!1)}dispose(){this.disposed||(this.disposed=!0,super.dispose(),this._onDidClose.fire(this))}style(e){let t=this.options;e.headerBackgroundColor&&(t.headerBackgroundColor=e.headerBackgroundColor),e.primaryHeadingColor&&(t.primaryHeadingColor=e.primaryHeadingColor),e.secondaryHeadingColor&&(t.secondaryHeadingColor=e.secondaryHeadingColor),super.style(e)}_applyStyles(){super._applyStyles();let e=this.options;this._headElement&&e.headerBackgroundColor&&(this._headElement.style.backgroundColor=e.headerBackgroundColor.toString()),this._primaryHeading&&e.primaryHeadingColor&&(this._primaryHeading.style.color=e.primaryHeadingColor.toString()),this._secondaryHeading&&e.secondaryHeadingColor&&(this._secondaryHeading.style.color=e.secondaryHeadingColor.toString()),this._bodyElement&&e.frameColor&&(this._bodyElement.style.borderColor=e.frameColor.toString())}_fillContainer(e){this.setCssClass("peekview-widget"),this._headElement=n.$(".head"),this._bodyElement=n.$(".body"),this._fillHead(this._headElement),this._fillBody(this._bodyElement),e.appendChild(this._headElement),e.appendChild(this._bodyElement)}_fillHead(e,t){const i=n.$(".peekview-title");this.options.supportOnTitleClick&&(i.classList.add("clickable"),n.mu(i,"click",(e=>this._onTitleClick(e)))),n.R3(this._headElement,i),this._fillTitleIcon(i),this._primaryHeading=n.$("span.filename"),this._secondaryHeading=n.$("span.dirname"),this._metaHeading=n.$("span.meta"),n.R3(i,this._primaryHeading,this._secondaryHeading,this._metaHeading);const a=n.$(".peekview-actions");n.R3(this._headElement,a);const l=this._getActionBarOptions();this._actionbarWidget=new o.o(a,l),this._disposables.add(this._actionbarWidget),t||this._actionbarWidget.push(new s.aU("peekview.close",S.N("label.close","Close"),r.lA.close.classNames,!0,(()=>(this.dispose(),Promise.resolve()))),{label:!1,icon:!0})}_fillTitleIcon(e){}_getActionBarOptions(){return{actionViewItemProvider:k.Id.bind(void 0,this.instantiationService),orientation:0}}_onTitleClick(e){}setTitle(e,t){this._primaryHeading&&this._secondaryHeading&&(this._primaryHeading.innerText=e,this._primaryHeading.setAttribute("title",e),t?this._secondaryHeading.innerText=t:n.PO(this._secondaryHeading))}setMetaTitle(e){this._metaHeading&&(e?(this._metaHeading.innerText=e,n.$Z(this._metaHeading)):n.Cp(this._metaHeading))}_doLayout(e,t){if(!this._isShowing&&e<0)return void this.dispose();const i=Math.ceil(1.2*this.editor.getOption(58)),n=Math.round(e-(i+2));this._doLayoutHead(i,t),this._doLayoutBody(n,t)}_doLayoutHead(e,t){this._headElement&&(this._headElement.style.height=`${e}px`,this._headElement.style.lineHeight=this._headElement.style.height)}_doLayoutBody(e,t){this._bodyElement&&(this._bodyElement.style.height=`${e}px`)}};F=E([T(2,D.TG)],F);const B=(0,I.P6)("peekViewTitle.background",{dark:(0,I.Zn)(I.c6,.1),light:(0,I.Zn)(I.c6,.1),hc:null},S.N("peekViewTitleBackground","Background color of the peek view title area.")),V=(0,I.P6)("peekViewTitleLabel.foreground",{dark:a.Il.white,light:a.Il.black,hc:a.Il.white},S.N("peekViewTitleForeground","Color of the peek view title.")),W=(0,I.P6)("peekViewTitleDescription.foreground",{dark:"#ccccccb3",light:"#616161",hc:"#FFFFFF99"},S.N("peekViewTitleInfoForeground","Color of the peek view title info.")),H=(0,I.P6)("peekView.border",{dark:I.c6,light:I.c6,hc:I.lR},S.N("peekViewBorder","Color of the peek view borders and arrow.")),z=(0,I.P6)("peekViewResult.background",{dark:"#252526",light:"#F3F3F3",hc:a.Il.black},S.N("peekViewResultsBackground","Background color of the peek view result list.")),j=(0,I.P6)("peekViewResult.lineForeground",{dark:"#bbbbbb",light:"#646465",hc:a.Il.white},S.N("peekViewResultsMatchForeground","Foreground color for line nodes in the peek view result list.")),U=(0,I.P6)("peekViewResult.fileForeground",{dark:a.Il.white,light:"#1E1E1E",hc:a.Il.white},S.N("peekViewResultsFileForeground","Foreground color for file nodes in the peek view result list.")),$=(0,I.P6)("peekViewResult.selectionBackground",{dark:"#3399ff33",light:"#3399ff33",hc:null},S.N("peekViewResultsSelectionBackground","Background color of the selected entry in the peek view result list.")),K=(0,I.P6)("peekViewResult.selectionForeground",{dark:a.Il.white,light:"#6C6C6C",hc:a.Il.white},S.N("peekViewResultsSelectionForeground","Foreground color of the selected entry in the peek view result list.")),q=(0,I.P6)("peekViewEditor.background",{dark:"#001F33",light:"#F2F8FC",hc:a.Il.black},S.N("peekViewEditorBackground","Background color of the peek view editor.")),Z=(0,I.P6)("peekViewEditorGutter.background",{dark:q,light:q,hc:q},S.N("peekViewEditorGutterBackground","Background color of the gutter in the peek view editor.")),G=(0,I.P6)("peekViewResult.matchHighlightBackground",{dark:"#ea5c004d",light:"#ea5c004d",hc:null},S.N("peekViewResultsMatchHighlight","Match highlight color in the peek view result list.")),Y=(0,I.P6)("peekViewEditor.matchHighlightBackground",{dark:"#ff8f0099",light:"#f5d802de",hc:null},S.N("peekViewEditorMatchHighlight","Match highlight color in the peek view editor.")),Q=(0,I.P6)("peekViewEditor.matchHighlightBorder",{dark:null,light:null,hc:I.xL},S.N("peekViewEditorMatchHighlightBorder","Match highlight border in the peek view editor."))},98275:(e,t,i)=>{"use strict";i.d(t,{X:()=>d});var n=i(88289),o=i(5976),s=i(98401),r=i(65520),a=i(84973),l=i(27869),c=i(97781);class d{constructor(e){this.options=e,this.rangeHighlightDecorationId=void 0}provide(e,t){var i;const n=new o.SL;e.canAcceptInBackground=!!(null===(i=this.options)||void 0===i?void 0:i.canAcceptInBackground),e.matchOnLabel=e.matchOnDescription=e.matchOnDetail=e.sortByLabel=!1;const s=n.add(new o.XK);return s.value=this.doProvide(e,t),n.add(this.onDidActiveTextEditorControlChange((()=>{s.value=void 0,s.value=this.doProvide(e,t)}))),n}doProvide(e,t){const i=new o.SL,a=this.activeTextEditorControl;if(a&&this.canProvideWithTextEditor(a)){const l={editor:a},c=(0,r.Pi)(a);if(c){let e=(0,s.f6)(a.saveViewState());i.add(c.onDidChangeCursorPosition((()=>{e=(0,s.f6)(a.saveViewState())}))),l.restoreViewState=()=>{e&&a===this.activeTextEditorControl&&a.restoreViewState(e)},i.add((0,n.I)(t.onCancellationRequested)((()=>{var e;return null===(e=l.restoreViewState)||void 0===e?void 0:e.call(l)})))}i.add((0,o.OF)((()=>this.clearDecorations(a)))),i.add(this.provideWithTextEditor(l,e,t))}else i.add(this.provideWithoutTextEditor(e,t));return i}canProvideWithTextEditor(e){return!0}gotoLocation({editor:e},t){e.setSelection(t.range),e.revealRangeInCenter(t.range,0),t.preserveFocus||e.focus()}getModel(e){var t;return(0,r.QI)(e)?null===(t=e.getModel())||void 0===t?void 0:t.modified:e.getModel()}addDecorations(e,t){e.changeDecorations((e=>{const i=[];this.rangeHighlightDecorationId&&(i.push(this.rangeHighlightDecorationId.overviewRulerDecorationId),i.push(this.rangeHighlightDecorationId.rangeHighlightId),this.rangeHighlightDecorationId=void 0);const n=[{range:t,options:{description:"quick-access-range-highlight",className:"rangeHighlight",isWholeLine:!0}},{range:t,options:{description:"quick-access-range-highlight-overview",overviewRuler:{color:(0,c.EN)(l.m9),position:a.sh.Full}}}],[o,s]=e.deltaDecorations(i,n);this.rangeHighlightDecorationId={rangeHighlightId:o,overviewRulerDecorationId:s}}))}clearDecorations(e){const t=this.rangeHighlightDecorationId;t&&(e.changeDecorations((e=>{e.deltaDecorations([t.overviewRulerDecorationId,t.rangeHighlightId],[])})),this.rangeHighlightDecorationId=void 0)}}},4454:(e,t,i)=>{"use strict";i.r(t),i.d(t,{RenameAction:()=>H,rename:()=>V});var n=i(85152),o=i(15393),s=i(71050),r=i(17301),a=i(5976),l=i(98401),c=i(70666),d=i(39925),h=i(16830),u=i(66007),g=i(11640),p=i(50187),f=i(24314),m=i(29102),v=i(44101),_=i(33187),b=i(82276),w=i(63580),y=i(23193),C=i(38819),x=i(72065),S=i(43557),k=i(59422),L=i(90535),N=i(89872),D=(i(36999),i(91847)),I=i(73910),E=i(97781),T=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},M=function(e,t){return function(i,n){t(i,n,e)}};const A=new C.uy("renameInputVisible",!1,(0,w.N)("renameInputVisible","Whether the rename input widget is visible"));let O=class{constructor(e,t,i,n,o){this._editor=e,this._acceptKeybindings=t,this._themeService=i,this._keybindingService=n,this._disposables=new a.SL,this.allowEditorOverflow=!0,this._visibleContextKey=A.bindTo(o),this._editor.addContentWidget(this),this._disposables.add(this._editor.onDidChangeConfiguration((e=>{e.hasChanged(43)&&this._updateFont()}))),this._disposables.add(i.onDidColorThemeChange(this._updateStyles,this))}dispose(){this._disposables.dispose(),this._editor.removeContentWidget(this)}getId(){return"__renameInputWidget"}getDomNode(){if(!this._domNode){this._domNode=document.createElement("div"),this._domNode.className="monaco-editor rename-box",this._input=document.createElement("input"),this._input.className="rename-input",this._input.type="text",this._input.setAttribute("aria-label",(0,w.N)("renameAriaLabel","Rename input. Type new name and press Enter to commit.")),this._domNode.appendChild(this._input),this._label=document.createElement("div"),this._label.className="rename-label",this._domNode.appendChild(this._label);const e=()=>{var e,t;const[i,n]=this._acceptKeybindings;this._keybindingService.lookupKeybinding(i),this._label.innerText=(0,w.N)({key:"label",comment:['placeholders are keybindings, e.g "F2 to Rename, Shift+F2 to Preview"']},"{0} to Rename, {1} to Preview",null===(e=this._keybindingService.lookupKeybinding(i))||void 0===e?void 0:e.getLabel(),null===(t=this._keybindingService.lookupKeybinding(n))||void 0===t?void 0:t.getLabel())};e(),this._disposables.add(this._keybindingService.onDidUpdateKeybindings(e)),this._updateFont(),this._updateStyles(this._themeService.getColorTheme())}return this._domNode}_updateStyles(e){var t,i,n,o;if(!this._input||!this._domNode)return;const s=e.getColor(I.rh);this._domNode.style.backgroundColor=String(null!==(t=e.getColor(I.D0))&&void 0!==t?t:""),this._domNode.style.boxShadow=s?` 0 0 8px 2px ${s}`:"",this._domNode.style.color=String(null!==(i=e.getColor(I.zJ))&&void 0!==i?i:""),this._input.style.backgroundColor=String(null!==(n=e.getColor(I.sE))&&void 0!==n?n:"");const r=e.getColor(I.dt);this._input.style.borderWidth=r?"1px":"0px",this._input.style.borderStyle=r?"solid":"none",this._input.style.borderColor=null!==(o=null==r?void 0:r.toString())&&void 0!==o?o:"none"}_updateFont(){if(!this._input||!this._label)return;const e=this._editor.getOption(43);this._input.style.fontFamily=e.fontFamily,this._input.style.fontWeight=e.fontWeight,this._input.style.fontSize=`${e.fontSize}px`,this._label.style.fontSize=.8*e.fontSize+"px"}getPosition(){return this._visible?{position:this._position,preference:[2,1]}:null}afterRender(e){e||this.cancelInput(!0)}acceptInput(e){this._currentAcceptInput&&this._currentAcceptInput(e)}cancelInput(e){this._currentCancelInput&&this._currentCancelInput(e)}getInput(e,t,i,n,o,s){this._domNode.classList.toggle("preview",o),this._position=new p.L(e.startLineNumber,e.startColumn),this._input.value=t,this._input.setAttribute("selectionStart",i.toString()),this._input.setAttribute("selectionEnd",n.toString()),this._input.size=Math.max(1.1*(e.endColumn-e.startColumn),20);const r=new a.SL;return new Promise((e=>{this._currentCancelInput=t=>(this._currentAcceptInput=void 0,this._currentCancelInput=void 0,e(t),!0),this._currentAcceptInput=i=>{0!==this._input.value.trim().length&&this._input.value!==t?(this._currentAcceptInput=void 0,this._currentCancelInput=void 0,e({newName:this._input.value,wantsPreview:o&&i})):this.cancelInput(!0)},s.onCancellationRequested((()=>this.cancelInput(!0))),r.add(this._editor.onDidBlurEditorWidget((()=>this.cancelInput(!1)))),this._show()})).finally((()=>{r.dispose(),this._hide()}))}_show(){this._editor.revealLineInCenterIfOutsideViewport(this._position.lineNumber,0),this._visible=!0,this._visibleContextKey.set(!0),this._editor.layoutContentWidget(this),setTimeout((()=>{this._input.focus(),this._input.setSelectionRange(parseInt(this._input.getAttribute("selectionStart")),parseInt(this._input.getAttribute("selectionEnd")))}),100)}_hide(){this._visible=!1,this._visibleContextKey.reset(),this._editor.layoutContentWidget(this)}};O=T([M(2,E.XE),M(3,D.d),M(4,C.i6)],O);var P=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},R=function(e,t){return function(i,n){t(i,n,e)}},F=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class B{constructor(e,t){this.model=e,this.position=t,this._providerRenameIdx=0,this._providers=v.G0.ordered(e)}hasProvider(){return this._providers.length>0}resolveRenameLocation(e){return F(this,void 0,void 0,(function*(){const t=[];for(this._providerRenameIdx=0;this._providerRenameIdx<this._providers.length;this._providerRenameIdx++){const i=this._providers[this._providerRenameIdx];if(!i.resolveRenameLocation)break;let n=yield i.resolveRenameLocation(this.model,this.position,e);if(n){if(!n.rejectReason)return n;t.push(n.rejectReason)}}const i=this.model.getWordAtPosition(this.position);return i?{range:new f.e(this.position.lineNumber,i.startColumn,this.position.lineNumber,i.endColumn),text:i.word,rejectReason:t.length>0?t.join("\n"):void 0}:{range:f.e.fromPositions(this.position),text:"",rejectReason:t.length>0?t.join("\n"):void 0}}))}provideRenameEdits(e,t){return F(this,void 0,void 0,(function*(){return this._provideRenameEdits(e,this._providerRenameIdx,[],t)}))}_provideRenameEdits(e,t,i,n){return F(this,void 0,void 0,(function*(){const o=this._providers[t];if(!o)return{edits:[],rejectReason:i.join("\n")};const s=yield o.provideRenameEdits(this.model,this.position,e,n);return s?s.rejectReason?this._provideRenameEdits(e,t+1,i.concat(s.rejectReason),n):s:this._provideRenameEdits(e,t+1,i.concat(w.N("no result","No result.")),n)}))}}function V(e,t,i){return F(this,void 0,void 0,(function*(){const n=new B(e,t),o=yield n.resolveRenameLocation(s.T.None);return(null==o?void 0:o.rejectReason)?{edits:[],rejectReason:o.rejectReason}:n.provideRenameEdits(i,s.T.None)}))}let W=class e{constructor(e,t,i,n,r,l,c){this.editor=e,this._instaService=t,this._notificationService=i,this._bulkEditService=n,this._progressService=r,this._logService=l,this._configService=c,this._dispoableStore=new a.SL,this._cts=new s.A,this._renameInputField=this._dispoableStore.add(new o.Ue((()=>this._dispoableStore.add(this._instaService.createInstance(O,this.editor,["acceptRenameInput","acceptRenameInputWithPreview"])))))}static get(t){return t.getContribution(e.ID)}dispose(){this._dispoableStore.dispose(),this._cts.dispose(!0)}run(){return F(this,void 0,void 0,(function*(){if(this._cts.dispose(!0),!this.editor.hasModel())return;const e=this.editor.getPosition(),t=new B(this.editor.getModel(),e);if(!t.hasProvider())return;let i;this._cts=new d.Dl(this.editor,5);try{const e=t.resolveRenameLocation(this._cts.token);this._progressService.showWhile(e,250),i=yield e}catch(t){return void b.O.get(this.editor).showMessage(t||w.N("resolveRenameLocationFailed","An unknown error occurred while resolving rename location"),e)}if(!i)return;if(i.rejectReason)return void b.O.get(this.editor).showMessage(i.rejectReason,e);if(this._cts.token.isCancellationRequested)return;this._cts.dispose(),this._cts=new d.Dl(this.editor,5,i.range);let s=this.editor.getSelection(),r=0,a=i.text.length;f.e.isEmpty(s)||f.e.spansMultipleLines(s)||!f.e.containsRange(i.range,s)||(r=Math.max(0,s.startColumn-i.range.startColumn),a=Math.min(i.range.endColumn,s.endColumn)-i.range.startColumn);const l=this._bulkEditService.hasPreviewHandler()&&this._configService.getValue(this.editor.getModel().uri,"editor.rename.enablePreview"),c=yield this._renameInputField.value.getInput(i.range,i.text,r,a,l,this._cts.token);if("boolean"==typeof c)return void(c&&this.editor.focus());this.editor.focus();const h=(0,o.eP)(t.provideRenameEdits(c.newName,this._cts.token),this._cts.token).then((e=>F(this,void 0,void 0,(function*(){e&&this.editor.hasModel()&&(e.rejectReason?this._notificationService.info(e.rejectReason):(this.editor.setSelection(f.e.fromPositions(this.editor.getSelection().getPosition())),this._bulkEditService.apply(u.fo.convert(e),{editor:this.editor,showPreview:c.wantsPreview,label:w.N("label","Renaming '{0}'",null==i?void 0:i.text),quotableLabel:w.N("quotableLabel","Renaming {0}",null==i?void 0:i.text)}).then((e=>{e.ariaSummary&&(0,n.Z9)(w.N("aria","Successfully renamed '{0}' to '{1}'. Summary: {2}",i.text,c.newName,e.ariaSummary))})).catch((e=>{this._notificationService.error(w.N("rename.failedApply","Rename failed to apply edits")),this._logService.error(e)}))))}))),(e=>{this._notificationService.error(w.N("rename.failed","Rename failed to compute edits")),this._logService.error(e)}));return this._progressService.showWhile(h,250),h}))}acceptRenameInput(e){this._renameInputField.value.acceptInput(e)}cancelRenameInput(){this._renameInputField.value.cancelInput(!0)}};W.ID="editor.contrib.renameController",W=P([R(1,x.TG),R(2,k.lT),R(3,u.vu),R(4,L.e),R(5,S.VZ),R(6,_.V)],W);class H extends h.R6{constructor(){super({id:"editor.action.rename",label:w.N("rename.label","Rename Symbol"),alias:"Rename Symbol",precondition:C.Ao.and(m.u.writable,m.u.hasRenameProvider),kbOpts:{kbExpr:m.u.editorTextFocus,primary:60,weight:100},contextMenuOpts:{group:"1_modification",order:1.1}})}runCommand(e,t){const i=e.get(g.$),[n,o]=Array.isArray(t)&&t||[void 0,void 0];return c.o.isUri(n)&&p.L.isIPosition(o)?i.openCodeEditor({resource:n},i.getActiveCodeEditor()).then((e=>{e&&(e.setPosition(o),e.invokeWithinContext((t=>(this.reportTelemetry(t,e),this.run(t,e)))))}),r.dL):super.runCommand(e,t)}run(e,t){const i=W.get(t);return i?i.run():Promise.resolve()}}(0,h._K)(W.ID,W),(0,h.Qr)(H);const z=h._l.bindToContribution(W.get);(0,h.fK)(new z({id:"acceptRenameInput",precondition:A,handler:e=>e.acceptRenameInput(!1),kbOpts:{weight:199,kbExpr:m.u.focus,primary:3}})),(0,h.fK)(new z({id:"acceptRenameInputWithPreview",precondition:C.Ao.and(A,C.Ao.has("config.editor.rename.enablePreview")),handler:e=>e.acceptRenameInput(!0),kbOpts:{weight:199,kbExpr:m.u.focus,primary:1027}})),(0,h.fK)(new z({id:"cancelRenameInput",precondition:A,handler:e=>e.cancelRenameInput(),kbOpts:{weight:199,kbExpr:m.u.focus,primary:9,secondary:[1033]}})),(0,h.sb)("_executeDocumentRenameProvider",(function(e,t,...i){const[n]=i;return(0,l.p_)("string"==typeof n),V(e,t,n)})),(0,h.sb)("_executePrepareRename",(function(e,t){return F(this,void 0,void 0,(function*(){const i=new B(e,t),n=yield i.resolveRenameLocation(s.T.None);if(null==n?void 0:n.rejectReason)throw new Error(n.rejectReason);return n}))})),N.B.as(y.IP.Configuration).registerConfiguration({id:"editor",properties:{"editor.rename.enablePreview":{scope:5,description:w.N("enablePreview","Enable/disable the ability to preview changes before renaming"),default:!0,type:"boolean"}}})},80689:(e,t,i)=>{"use strict";i.d(t,{x:()=>a});var n=i(91741),o=i(50187),s=i(24314),r=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class a{provideSelectionRanges(e,t){return r(this,void 0,void 0,(function*(){const i=[];for(const n of t){const t=[];i.push(t);const o=new Map;yield new Promise((t=>a._bracketsRightYield(t,0,e,n,o))),yield new Promise((i=>a._bracketsLeftYield(i,0,e,n,o,t)))}return i}))}static _bracketsRightYield(e,t,i,o,s){const r=new Map,l=Date.now();for(;;){if(t>=a._maxRounds){e();break}if(!o){e();break}let c=i.findNextBracket(o);if(!c){e();break}if(Date.now()-l>a._maxDuration){setTimeout((()=>a._bracketsRightYield(e,t+1,i,o,s)));break}const d=c.close[0];if(c.isOpen){let e=r.has(d)?r.get(d):0;r.set(d,e+1)}else{let e=r.has(d)?r.get(d):0;if(e-=1,r.set(d,Math.max(0,e)),e<0){let e=s.get(d);e||(e=new n.S,s.set(d,e)),e.push(c.range)}}o=c.range.getEndPosition()}}static _bracketsLeftYield(e,t,i,n,o,r){const l=new Map,c=Date.now();for(;;){if(t>=a._maxRounds&&0===o.size){e();break}if(!n){e();break}let d=i.findPrevBracket(n);if(!d){e();break}if(Date.now()-c>a._maxDuration){setTimeout((()=>a._bracketsLeftYield(e,t+1,i,n,o,r)));break}const h=d.close[0];if(d.isOpen){let e=l.has(h)?l.get(h):0;if(e-=1,l.set(h,Math.max(0,e)),e<0){let e=o.get(h);if(e){let t=e.shift();0===e.size&&o.delete(h);const n=s.e.fromPositions(d.range.getEndPosition(),t.getStartPosition()),l=s.e.fromPositions(d.range.getStartPosition(),t.getEndPosition());r.push({range:n}),r.push({range:l}),a._addBracketLeading(i,l,r)}}}else{let e=l.has(h)?l.get(h):0;l.set(h,e+1)}n=d.range.getStartPosition()}}static _addBracketLeading(e,t,i){if(t.startLineNumber===t.endLineNumber)return;const n=t.startLineNumber,r=e.getLineFirstNonWhitespaceColumn(n);0!==r&&r!==t.startColumn&&(i.push({range:s.e.fromPositions(new o.L(n,r),t.getEndPosition())}),i.push({range:s.e.fromPositions(new o.L(n,1),t.getEndPosition())}));const a=n-1;if(a>0){const n=e.getLineFirstNonWhitespaceColumn(a);n===t.startColumn&&n!==e.getLineLastNonWhitespaceColumn(a)&&(i.push({range:s.e.fromPositions(new o.L(a,n),t.getEndPosition())}),i.push({range:s.e.fromPositions(new o.L(a,1),t.getEndPosition())}))}}}a._maxDuration=30,a._maxRounds=2},81955:(e,t,i)=>{"use strict";i.r(t),i.d(t,{provideSelectionRanges:()=>y});var n=i(9488),o=i(71050),s=i(17301),r=i(16830),a=i(50187),l=i(24314),c=i(3860),d=i(29102),h=i(44101),u=i(80689),g=i(97295);var p=i(63580),f=i(84144),m=i(94565),v=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class _{constructor(e,t){this.index=e,this.ranges=t}mov(e){let t=this.index+(e?1:-1);if(t<0||t>=this.ranges.length)return this;const i=new _(t,this.ranges);return i.ranges[t].equalsRange(this.ranges[this.index])?i.mov(e):i}}class b{constructor(e){this._editor=e,this._ignoreSelection=!1}static get(e){return e.getContribution(b.ID)}dispose(){var e;null===(e=this._selectionListener)||void 0===e||e.dispose()}run(e){return v(this,void 0,void 0,(function*(){if(!this._editor.hasModel())return;const t=this._editor.getSelections(),i=this._editor.getModel();if(!h.AC.has(i))return;if(this._state||(yield y(i,t.map((e=>e.getPosition())),this._editor.getOption(101),o.T.None).then((e=>{var i;if(n.Of(e)&&e.length===t.length&&this._editor.hasModel()&&n.fS(this._editor.getSelections(),t,((e,t)=>e.equalsSelection(t)))){for(let i=0;i<e.length;i++)e[i]=e[i].filter((e=>e.containsPosition(t[i].getStartPosition())&&e.containsPosition(t[i].getEndPosition()))),e[i].unshift(t[i]);this._state=e.map((e=>new _(0,e))),null===(i=this._selectionListener)||void 0===i||i.dispose(),this._selectionListener=this._editor.onDidChangeCursorPosition((()=>{var e;this._ignoreSelection||(null===(e=this._selectionListener)||void 0===e||e.dispose(),this._state=void 0)}))}}))),!this._state)return;this._state=this._state.map((t=>t.mov(e)));const s=this._state.map((e=>c.Y.fromPositions(e.ranges[e.index].getStartPosition(),e.ranges[e.index].getEndPosition())));this._ignoreSelection=!0;try{this._editor.setSelections(s)}finally{this._ignoreSelection=!1}}))}}b.ID="editor.contrib.smartSelectController";class w extends r.R6{constructor(e,t){super(t),this._forward=e}run(e,t){return v(this,void 0,void 0,(function*(){let e=b.get(t);e&&(yield e.run(this._forward))}))}}m.P.registerCommandAlias("editor.action.smartSelect.grow","editor.action.smartSelect.expand");function y(e,t,i,o){return v(this,void 0,void 0,(function*(){const r=h.AC.all(e);1===r.length&&r.unshift(new u.x);let c=[],d=[];for(const i of r)c.push(Promise.resolve(i.provideSelectionRanges(e,t,o)).then((e=>{if(n.Of(e)&&e.length===t.length)for(let i=0;i<t.length;i++){d[i]||(d[i]=[]);for(const n of e[i])l.e.isIRange(n.range)&&l.e.containsPosition(n.range,t[i])&&d[i].push(l.e.lift(n.range))}}),s.Cp));return yield Promise.all(c),d.map((t=>{if(0===t.length)return[];t.sort(((e,t)=>a.L.isBefore(e.getStartPosition(),t.getStartPosition())?1:a.L.isBefore(t.getStartPosition(),e.getStartPosition())||a.L.isBefore(e.getEndPosition(),t.getEndPosition())?-1:a.L.isBefore(t.getEndPosition(),e.getEndPosition())?1:0));let n,o=[];for(const e of t)(!n||l.e.containsRange(e,n)&&!l.e.equalsRange(e,n))&&(o.push(e),n=e);if(!i.selectLeadingAndTrailingWhitespace)return o;let s=[o[0]];for(let t=1;t<o.length;t++){const i=o[t-1],n=o[t];if(n.startLineNumber!==i.startLineNumber||n.endLineNumber!==i.endLineNumber){const t=new l.e(i.startLineNumber,e.getLineFirstNonWhitespaceColumn(i.startLineNumber),i.endLineNumber,e.getLineLastNonWhitespaceColumn(i.endLineNumber));t.containsRange(i)&&!t.equalsRange(i)&&n.containsRange(t)&&!n.equalsRange(t)&&s.push(t);const o=new l.e(i.startLineNumber,1,i.endLineNumber,e.getLineMaxColumn(i.endLineNumber));o.containsRange(i)&&!o.equalsRange(t)&&n.containsRange(o)&&!n.equalsRange(o)&&s.push(o)}s.push(n)}return s}))}))}(0,r._K)(b.ID,b),(0,r.Qr)(class extends w{constructor(){super(!0,{id:"editor.action.smartSelect.expand",label:p.N("smartSelect.expand","Expand Selection"),alias:"Expand Selection",precondition:void 0,kbOpts:{kbExpr:d.u.editorTextFocus,primary:1553,mac:{primary:3345,secondary:[1297]},weight:100},menuOpts:{menuId:f.eH.MenubarSelectionMenu,group:"1_basic",title:p.N({key:"miSmartSelectGrow",comment:["&& denotes a mnemonic"]},"&&Expand Selection"),order:2}})}}),(0,r.Qr)(class extends w{constructor(){super(!1,{id:"editor.action.smartSelect.shrink",label:p.N("smartSelect.shrink","Shrink Selection"),alias:"Shrink Selection",precondition:void 0,kbOpts:{kbExpr:d.u.editorTextFocus,primary:1551,mac:{primary:3343,secondary:[1295]},weight:100},menuOpts:{menuId:f.eH.MenubarSelectionMenu,group:"1_basic",title:p.N({key:"miSmartSelectShrink",comment:["&& denotes a mnemonic"]},"&&Shrink Selection"),order:3}})}}),h.AC.register("*",new class{provideSelectionRanges(e,t){const i=[];for(const n of t){const t=[];i.push(t),this._addInWordRanges(t,e,n),this._addWordRanges(t,e,n),this._addWhitespaceLine(t,e,n),t.push({range:e.getFullModelRange()})}return i}_addInWordRanges(e,t,i){const n=t.getWordAtPosition(i);if(!n)return;let{word:o,startColumn:s}=n,r=i.column-s,a=r,c=r,d=0;for(;a>=0;a--){let e=o.charCodeAt(a);if(a!==r&&(95===e||45===e))break;if((0,g.mK)(e)&&(0,g.df)(d))break;d=e}for(a+=1;c<o.length;c++){let e=o.charCodeAt(c);if((0,g.df)(e)&&(0,g.mK)(d))break;if(95===e||45===e)break;d=e}a<c&&e.push({range:new l.e(i.lineNumber,s+a,i.lineNumber,s+c)})}_addWordRanges(e,t,i){const n=t.getWordAtPosition(i);n&&e.push({range:new l.e(i.lineNumber,n.startColumn,i.lineNumber,n.endColumn)})}_addWhitespaceLine(e,t,i){t.getLineLength(i.lineNumber)>0&&0===t.getLineFirstNonWhitespaceColumn(i.lineNumber)&&0===t.getLineLastNonWhitespaceColumn(i.lineNumber)&&e.push({range:new l.e(i.lineNumber,1,i.lineNumber,t.getLineMaxColumn(i.lineNumber))})}}),(0,r.f)("_executeSelectionRangeProvider",(function(e,...t){const[i]=t;return y(e,i,{selectLeadingAndTrailingWhitespace:!0},o.T.None)}))},93379:(e,t,i)=>{"use strict";i.r(t),i.d(t,{SnippetController2:()=>m});var n=i(5976),o=i(16830),s=i(24314),r=i(3860),a=i(29102),l=i(79599),c=i(63580),d=i(38819),h=i(43557),u=i(87548),g=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},p=function(e,t){return function(i,n){t(i,n,e)}};const f={overwriteBefore:0,overwriteAfter:0,undoStopBefore:!0,undoStopAfter:!0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};let m=class e{constructor(t,i,o){this._editor=t,this._logService=i,this._snippetListener=new n.SL,this._modelVersionId=-1,this._inSnippet=e.InSnippetMode.bindTo(o),this._hasNextTabstop=e.HasNextTabstop.bindTo(o),this._hasPrevTabstop=e.HasPrevTabstop.bindTo(o)}static get(t){return t.getContribution(e.ID)}dispose(){var e;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),null===(e=this._session)||void 0===e||e.dispose(),this._snippetListener.dispose()}insert(e,t){try{this._doInsert(e,void 0===t?f:Object.assign(Object.assign({},f),t))}catch(t){this.cancel(),this._logService.error(t),this._logService.error("snippet_error"),this._logService.error("insert_template=",e),this._logService.error("existing_template=",this._session?this._session._logInfo():"<no_session>")}}_doInsert(e,t){this._editor.hasModel()&&(this._snippetListener.clear(),t.undoStopBefore&&this._editor.getModel().pushStackElement(),this._session?this._session.merge(e,t):(this._modelVersionId=this._editor.getModel().getAlternativeVersionId(),this._session=new u.l(this._editor,e,t),this._session.insert()),t.undoStopAfter&&this._editor.getModel().pushStackElement(),this._updateState(),this._snippetListener.add(this._editor.onDidChangeModelContent((e=>e.isFlush&&this.cancel()))),this._snippetListener.add(this._editor.onDidChangeModel((()=>this.cancel()))),this._snippetListener.add(this._editor.onDidChangeCursorSelection((()=>this._updateState()))))}_updateState(){if(this._session&&this._editor.hasModel()){if(this._modelVersionId===this._editor.getModel().getAlternativeVersionId())return this.cancel();if(!this._session.hasPlaceholder)return this.cancel();if(this._session.isAtLastPlaceholder||!this._session.isSelectionWithinPlaceholders())return this.cancel();this._inSnippet.set(!0),this._hasPrevTabstop.set(!this._session.isAtFirstPlaceholder),this._hasNextTabstop.set(!this._session.isAtLastPlaceholder),this._handleChoice()}}_handleChoice(){if(!this._session||!this._editor.hasModel())return void(this._currentChoice=void 0);const{choice:e}=this._session;if(e){if(this._currentChoice!==e){this._currentChoice=e,this._editor.setSelections(this._editor.getSelections().map((e=>r.Y.fromPositions(e.getStartPosition()))));const[t]=e.options;(0,l.i5)(this._editor,e.options.map(((e,i)=>({kind:13,label:e.value,insertText:e.value,sortText:"a".repeat(i+1),range:s.e.fromPositions(this._editor.getPosition(),this._editor.getPosition().delta(0,t.value.length))}))))}}else this._currentChoice=void 0}finish(){for(;this._inSnippet.get();)this.next()}cancel(e=!1){var t;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),this._snippetListener.clear(),null===(t=this._session)||void 0===t||t.dispose(),this._session=void 0,this._modelVersionId=-1,e&&this._editor.setSelections([this._editor.getSelection()])}prev(){this._session&&this._session.prev(),this._updateState()}next(){this._session&&this._session.next(),this._updateState()}isInSnippet(){return Boolean(this._inSnippet.get())}};m.ID="snippetController2",m.InSnippetMode=new d.uy("inSnippetMode",!1,(0,c.N)("inSnippetMode","Whether the editor in current in snippet mode")),m.HasNextTabstop=new d.uy("hasNextTabstop",!1,(0,c.N)("hasNextTabstop","Whether there is a next tab stop when in snippet mode")),m.HasPrevTabstop=new d.uy("hasPrevTabstop",!1,(0,c.N)("hasPrevTabstop","Whether there is a previous tab stop when in snippet mode")),m=g([p(1,h.VZ),p(2,d.i6)],m),(0,o._K)(m.ID,m);const v=o._l.bindToContribution(m.get);(0,o.fK)(new v({id:"jumpToNextSnippetPlaceholder",precondition:d.Ao.and(m.InSnippetMode,m.HasNextTabstop),handler:e=>e.next(),kbOpts:{weight:130,kbExpr:a.u.editorTextFocus,primary:2}})),(0,o.fK)(new v({id:"jumpToPrevSnippetPlaceholder",precondition:d.Ao.and(m.InSnippetMode,m.HasPrevTabstop),handler:e=>e.prev(),kbOpts:{weight:130,kbExpr:a.u.editorTextFocus,primary:1026}})),(0,o.fK)(new v({id:"leaveSnippet",precondition:m.InSnippetMode,handler:e=>e.cancel(!0),kbOpts:{weight:130,kbExpr:a.u.editorTextFocus,primary:9,secondary:[1033]}})),(0,o.fK)(new v({id:"acceptSnippet",precondition:m.InSnippetMode,handler:e=>e.finish()}))},63472:(e,t,i)=>{"use strict";i.d(t,{Lv:()=>l,Vm:()=>a,Yj:()=>p,xv:()=>s});class n{constructor(){this.value="",this.pos=0}static isDigitCharacter(e){return e>=48&&e<=57}static isVariableCharacter(e){return 95===e||e>=97&&e<=122||e>=65&&e<=90}text(e){this.value=e,this.pos=0}tokenText(e){return this.value.substr(e.pos,e.len)}next(){if(this.pos>=this.value.length)return{type:14,pos:this.pos,len:0};let e,t=this.pos,i=0,o=this.value.charCodeAt(t);if(e=n._table[o],"number"==typeof e)return this.pos+=1,{type:e,pos:t,len:1};if(n.isDigitCharacter(o)){e=8;do{i+=1,o=this.value.charCodeAt(t+i)}while(n.isDigitCharacter(o));return this.pos+=i,{type:e,pos:t,len:i}}if(n.isVariableCharacter(o)){e=9;do{o=this.value.charCodeAt(t+ ++i)}while(n.isVariableCharacter(o)||n.isDigitCharacter(o));return this.pos+=i,{type:e,pos:t,len:i}}e=10;do{i+=1,o=this.value.charCodeAt(t+i)}while(!isNaN(o)&&void 0===n._table[o]&&!n.isDigitCharacter(o)&&!n.isVariableCharacter(o));return this.pos+=i,{type:e,pos:t,len:i}}}n._table={36:0,58:1,44:2,123:3,125:4,92:5,47:6,124:7,43:11,45:12,63:13};class o{constructor(){this._children=[]}appendChild(e){return e instanceof s&&this._children[this._children.length-1]instanceof s?this._children[this._children.length-1].value+=e.value:(e.parent=this,this._children.push(e)),this}replace(e,t){const{parent:i}=e,n=i.children.indexOf(e),o=i.children.slice(0);o.splice(n,1,...t),i._children=o,function e(t,i){for(const n of t)n.parent=i,e(n.children,n)}(t,i)}get children(){return this._children}get snippet(){let e=this;for(;;){if(!e)return;if(e instanceof g)return e;e=e.parent}}toString(){return this.children.reduce(((e,t)=>e+t.toString()),"")}len(){return 0}}class s extends o{constructor(e){super(),this.value=e}toString(){return this.value}len(){return this.value.length}clone(){return new s(this.value)}}class r extends o{}class a extends r{constructor(e){super(),this.index=e}static compareByIndex(e,t){return e.index===t.index?0:e.isFinalTabstop?1:t.isFinalTabstop||e.index<t.index?-1:e.index>t.index?1:0}get isFinalTabstop(){return 0===this.index}get choice(){return 1===this._children.length&&this._children[0]instanceof l?this._children[0]:void 0}clone(){let e=new a(this.index);return this.transform&&(e.transform=this.transform.clone()),e._children=this.children.map((e=>e.clone())),e}}class l extends o{constructor(){super(...arguments),this.options=[]}appendChild(e){return e instanceof s&&(e.parent=this,this.options.push(e)),this}toString(){return this.options[0].value}len(){return this.options[0].len()}clone(){let e=new l;return this.options.forEach(e.appendChild,e),e}}class c extends o{constructor(){super(...arguments),this.regexp=new RegExp("")}resolve(e){const t=this;let i=!1,n=e.replace(this.regexp,(function(){return i=!0,t._replace(Array.prototype.slice.call(arguments,0,-2))}));return!i&&this._children.some((e=>e instanceof d&&Boolean(e.elseValue)))&&(n=this._replace([])),n}_replace(e){let t="";for(const i of this._children)if(i instanceof d){let n=e[i.index]||"";n=i.resolve(n),t+=n}else t+=i.toString();return t}toString(){return""}clone(){let e=new c;return e.regexp=new RegExp(this.regexp.source,(this.regexp.ignoreCase?"i":"")+(this.regexp.global?"g":"")),e._children=this.children.map((e=>e.clone())),e}}class d extends o{constructor(e,t,i,n){super(),this.index=e,this.shorthandName=t,this.ifValue=i,this.elseValue=n}resolve(e){return"upcase"===this.shorthandName?e?e.toLocaleUpperCase():"":"downcase"===this.shorthandName?e?e.toLocaleLowerCase():"":"capitalize"===this.shorthandName?e?e[0].toLocaleUpperCase()+e.substr(1):"":"pascalcase"===this.shorthandName?e?this._toPascalCase(e):"":"camelcase"===this.shorthandName?e?this._toCamelCase(e):"":Boolean(e)&&"string"==typeof this.ifValue?this.ifValue:Boolean(e)||"string"!=typeof this.elseValue?e||"":this.elseValue}_toPascalCase(e){const t=e.match(/[a-z0-9]+/gi);return t?t.map((e=>e.charAt(0).toUpperCase()+e.substr(1).toLowerCase())).join(""):e}_toCamelCase(e){const t=e.match(/[a-z0-9]+/gi);return t?t.map(((e,t)=>0===t?e.toLowerCase():e.charAt(0).toUpperCase()+e.substr(1).toLowerCase())).join(""):e}clone(){return new d(this.index,this.shorthandName,this.ifValue,this.elseValue)}}class h extends r{constructor(e){super(),this.name=e}resolve(e){let t=e.resolve(this);return this.transform&&(t=this.transform.resolve(t||"")),void 0!==t&&(this._children=[new s(t)],!0)}clone(){const e=new h(this.name);return this.transform&&(e.transform=this.transform.clone()),e._children=this.children.map((e=>e.clone())),e}}function u(e,t){const i=[...e];for(;i.length>0;){const e=i.shift();if(!t(e))break;i.unshift(...e.children)}}class g extends o{get placeholderInfo(){if(!this._placeholders){let e,t=[];this.walk((function(i){return i instanceof a&&(t.push(i),e=!e||e.index<i.index?i:e),!0})),this._placeholders={all:t,last:e}}return this._placeholders}get placeholders(){const{all:e}=this.placeholderInfo;return e}offset(e){let t=0,i=!1;return this.walk((n=>n===e?(i=!0,!1):(t+=n.len(),!0))),i?t:-1}fullLen(e){let t=0;return u([e],(e=>(t+=e.len(),!0))),t}enclosingPlaceholders(e){let t=[],{parent:i}=e;for(;i;)i instanceof a&&t.push(i),i=i.parent;return t}resolveVariables(e){return this.walk((t=>(t instanceof h&&t.resolve(e)&&(this._placeholders=void 0),!0))),this}appendChild(e){return this._placeholders=void 0,super.appendChild(e)}replace(e,t){return this._placeholders=void 0,super.replace(e,t)}clone(){let e=new g;return this._children=this.children.map((e=>e.clone())),e}walk(e){u(this.children,e)}}class p{constructor(){this._scanner=new n,this._token={type:14,pos:0,len:0}}static escape(e){return e.replace(/\$|}|\\/g,"\\$&")}static guessNeedsClipboard(e){return/\${?CLIPBOARD/.test(e)}parse(e,t,i){this._scanner.text(e),this._token=this._scanner.next();const n=new g;for(;this._parse(n););const o=new Map,s=[];let r=0;n.walk((e=>(e instanceof a&&(r+=1,e.isFinalTabstop?o.set(0,void 0):!o.has(e.index)&&e.children.length>0?o.set(e.index,e.children):s.push(e)),!0)));for(const e of s){const t=o.get(e.index);if(t){const i=new a(e.index);i.transform=e.transform;for(const e of t)i.appendChild(e.clone());n.replace(e,[i])}}return i||(i=r>0&&t),!o.has(0)&&i&&n.appendChild(new a(0)),n}_accept(e,t){if(void 0===e||this._token.type===e){let e=!t||this._scanner.tokenText(this._token);return this._token=this._scanner.next(),e}return!1}_backTo(e){return this._scanner.pos=e.pos+e.len,this._token=e,!1}_until(e){const t=this._token;for(;this._token.type!==e;){if(14===this._token.type)return!1;if(5===this._token.type){const e=this._scanner.next();if(0!==e.type&&4!==e.type&&5!==e.type)return!1}this._token=this._scanner.next()}const i=this._scanner.value.substring(t.pos,this._token.pos).replace(/\\(\$|}|\\)/g,"$1");return this._token=this._scanner.next(),i}_parse(e){return this._parseEscaped(e)||this._parseTabstopOrVariableName(e)||this._parseComplexPlaceholder(e)||this._parseComplexVariable(e)||this._parseAnything(e)}_parseEscaped(e){let t;return!!(t=this._accept(5,!0))&&(t=this._accept(0,!0)||this._accept(4,!0)||this._accept(5,!0)||t,e.appendChild(new s(t)),!0)}_parseTabstopOrVariableName(e){let t;const i=this._token;return this._accept(0)&&(t=this._accept(9,!0)||this._accept(8,!0))?(e.appendChild(/^\d+$/.test(t)?new a(Number(t)):new h(t)),!0):this._backTo(i)}_parseComplexPlaceholder(e){let t;const i=this._token;if(!(this._accept(0)&&this._accept(3)&&(t=this._accept(8,!0))))return this._backTo(i);const n=new a(Number(t));if(this._accept(1))for(;;){if(this._accept(4))return e.appendChild(n),!0;if(!this._parse(n))return e.appendChild(new s("${"+t+":")),n.children.forEach(e.appendChild,e),!0}else{if(!(n.index>0&&this._accept(7)))return this._accept(6)?this._parseTransform(n)?(e.appendChild(n),!0):(this._backTo(i),!1):this._accept(4)?(e.appendChild(n),!0):this._backTo(i);{const t=new l;for(;;){if(this._parseChoiceElement(t)){if(this._accept(2))continue;if(this._accept(7)&&(n.appendChild(t),this._accept(4)))return e.appendChild(n),!0}return this._backTo(i),!1}}}}_parseChoiceElement(e){const t=this._token,i=[];for(;2!==this._token.type&&7!==this._token.type;){let e;if(e=(e=this._accept(5,!0))?this._accept(2,!0)||this._accept(7,!0)||this._accept(5,!0)||e:this._accept(void 0,!0),!e)return this._backTo(t),!1;i.push(e)}return 0===i.length?(this._backTo(t),!1):(e.appendChild(new s(i.join(""))),!0)}_parseComplexVariable(e){let t;const i=this._token;if(!(this._accept(0)&&this._accept(3)&&(t=this._accept(9,!0))))return this._backTo(i);const n=new h(t);if(!this._accept(1))return this._accept(6)?this._parseTransform(n)?(e.appendChild(n),!0):(this._backTo(i),!1):this._accept(4)?(e.appendChild(n),!0):this._backTo(i);for(;;){if(this._accept(4))return e.appendChild(n),!0;if(!this._parse(n))return e.appendChild(new s("${"+t+":")),n.children.forEach(e.appendChild,e),!0}}_parseTransform(e){let t=new c,i="",n="";for(;!this._accept(6);){let e;if(e=this._accept(5,!0))e=this._accept(6,!0)||e,i+=e;else{if(14===this._token.type)return!1;i+=this._accept(void 0,!0)}}for(;!this._accept(6);){let e;if(e=this._accept(5,!0))e=this._accept(5,!0)||this._accept(6,!0)||e,t.appendChild(new s(e));else if(!this._parseFormatString(t)&&!this._parseAnything(t))return!1}for(;!this._accept(4);){if(14===this._token.type)return!1;n+=this._accept(void 0,!0)}try{t.regexp=new RegExp(i,n)}catch(e){return!1}return e.transform=t,!0}_parseFormatString(e){const t=this._token;if(!this._accept(0))return!1;let i=!1;this._accept(3)&&(i=!0);let n=this._accept(8,!0);if(!n)return this._backTo(t),!1;if(!i)return e.appendChild(new d(Number(n))),!0;if(this._accept(4))return e.appendChild(new d(Number(n))),!0;if(!this._accept(1))return this._backTo(t),!1;if(this._accept(6)){let i=this._accept(9,!0);return i&&this._accept(4)?(e.appendChild(new d(Number(n),i)),!0):(this._backTo(t),!1)}if(this._accept(11)){let t=this._until(4);if(t)return e.appendChild(new d(Number(n),void 0,t,void 0)),!0}else if(this._accept(12)){let t=this._until(4);if(t)return e.appendChild(new d(Number(n),void 0,void 0,t)),!0}else if(this._accept(13)){let t=this._until(1);if(t){let i=this._until(4);if(i)return e.appendChild(new d(Number(n),void 0,t,i)),!0}}else{let t=this._until(4);if(t)return e.appendChild(new d(Number(n),void 0,void 0,t)),!0}return this._backTo(t),!1}_parseAnything(e){return 14!==this._token.type&&(e.appendChild(new s(this._scanner.tokenText(this._token))),this._accept(void 0),!0)}}},87548:(e,t,i)=>{"use strict";i.d(t,{l:()=>R});var n=i(9488),o=i(5976),s=i(97295),r=(i(27124),i(69386)),a=i(24314),l=i(3860),c=i(44174),d=i(44349),h=i(73910),u=i(97781),g=i(40382),p=i(63472),f=i(68843),m=i(88721),v=i(95935);const _=new Uint8Array(16),b=[];for(let e=0;e<256;e++)b.push(e.toString(16).padStart(2,"0"));let w;w="object"==typeof crypto&&"function"==typeof crypto.getRandomValues?crypto.getRandomValues.bind(crypto):function(e){for(let t=0;t<e.length;t++)e[t]=Math.floor(256*Math.random());return e};var y=i(83831),C=i(63580),x=i(70666);const S="code-workspace";function k(e){const t=e;return"string"==typeof(null==t?void 0:t.id)&&x.o.isUri(t.uri)}class L{constructor(e){this._delegates=e}resolve(e){for(const t of this._delegates){let i=t.resolve(e);if(void 0!==i)return i}}}class N{constructor(e,t,i,n){this._model=e,this._selection=t,this._selectionIdx=i,this._overtypingCapturer=n}resolve(e){const{name:t}=e;if("SELECTION"===t||"TM_SELECTED_TEXT"===t){let t=this._model.getValueInRange(this._selection)||void 0,i=this._selection.startLineNumber!==this._selection.endLineNumber;if(!t&&this._overtypingCapturer){const e=this._overtypingCapturer.getLastOvertypedInfo(this._selectionIdx);e&&(t=e.value,i=e.multiline)}if(t&&i&&e.snippet){const i=this._model.getLineContent(this._selection.startLineNumber),n=(0,s.V8)(i,0,this._selection.startColumn-1);let o=n;e.snippet.walk((t=>t!==e&&(t instanceof p.xv&&(o=(0,s.V8)((0,s.uq)(t.value).pop())),!0)));const r=(0,s.Mh)(o,n);t=t.replace(/(\r\n|\r|\n)(.*)/g,((e,t,i)=>`${t}${o.substr(r)}${i}`))}return t}if("TM_CURRENT_LINE"===t)return this._model.getLineContent(this._selection.positionLineNumber);if("TM_CURRENT_WORD"===t){const e=this._model.getWordAtPosition({lineNumber:this._selection.positionLineNumber,column:this._selection.positionColumn});return e&&e.word||void 0}return"TM_LINE_INDEX"===t?String(this._selection.positionLineNumber-1):"TM_LINE_NUMBER"===t?String(this._selection.positionLineNumber):void 0}}class D{constructor(e,t){this._labelService=e,this._model=t}resolve(e){const{name:t}=e;if("TM_FILENAME"===t)return m.EZ(this._model.uri.fsPath);if("TM_FILENAME_BASE"===t){const e=m.EZ(this._model.uri.fsPath),t=e.lastIndexOf(".");return t<=0?e:e.slice(0,t)}return"TM_DIRECTORY"===t?"."===m.XX(this._model.uri.fsPath)?"":this._labelService.getUriLabel((0,v.XX)(this._model.uri)):"TM_FILEPATH"===t?this._labelService.getUriLabel(this._model.uri):"RELATIVE_FILEPATH"===t?this._labelService.getUriLabel(this._model.uri,{relative:!0,noPrefix:!0}):void 0}}class I{constructor(e,t,i,n){this._readClipboardText=e,this._selectionIdx=t,this._selectionCount=i,this._spread=n}resolve(e){if("CLIPBOARD"!==e.name)return;const t=this._readClipboardText();if(t){if(this._spread){const e=t.split(/\r\n|\n|\r/).filter((e=>!(0,s.m5)(e)));if(e.length===this._selectionCount)return e[this._selectionIdx]}return t}}}class E{constructor(e,t){this._model=e,this._selection=t}resolve(e){const{name:t}=e,i=this._model.getLanguageIdAtPosition(this._selection.selectionStartLineNumber,this._selection.selectionStartColumn),n=y.zu.getComments(i);if(n)return"LINE_COMMENT"===t?n.lineCommentToken||void 0:"BLOCK_COMMENT_START"===t?n.blockCommentStartToken||void 0:"BLOCK_COMMENT_END"===t&&n.blockCommentEndToken||void 0}}class T{constructor(){this._date=new Date}resolve(e){const{name:t}=e;return"CURRENT_YEAR"===t?String(this._date.getFullYear()):"CURRENT_YEAR_SHORT"===t?String(this._date.getFullYear()).slice(-2):"CURRENT_MONTH"===t?String(this._date.getMonth().valueOf()+1).padStart(2,"0"):"CURRENT_DATE"===t?String(this._date.getDate().valueOf()).padStart(2,"0"):"CURRENT_HOUR"===t?String(this._date.getHours().valueOf()).padStart(2,"0"):"CURRENT_MINUTE"===t?String(this._date.getMinutes().valueOf()).padStart(2,"0"):"CURRENT_SECOND"===t?String(this._date.getSeconds().valueOf()).padStart(2,"0"):"CURRENT_DAY_NAME"===t?T.dayNames[this._date.getDay()]:"CURRENT_DAY_NAME_SHORT"===t?T.dayNamesShort[this._date.getDay()]:"CURRENT_MONTH_NAME"===t?T.monthNames[this._date.getMonth()]:"CURRENT_MONTH_NAME_SHORT"===t?T.monthNamesShort[this._date.getMonth()]:"CURRENT_SECONDS_UNIX"===t?String(Math.floor(this._date.getTime()/1e3)):void 0}}T.dayNames=[C.N("Sunday","Sunday"),C.N("Monday","Monday"),C.N("Tuesday","Tuesday"),C.N("Wednesday","Wednesday"),C.N("Thursday","Thursday"),C.N("Friday","Friday"),C.N("Saturday","Saturday")],T.dayNamesShort=[C.N("SundayShort","Sun"),C.N("MondayShort","Mon"),C.N("TuesdayShort","Tue"),C.N("WednesdayShort","Wed"),C.N("ThursdayShort","Thu"),C.N("FridayShort","Fri"),C.N("SaturdayShort","Sat")],T.monthNames=[C.N("January","January"),C.N("February","February"),C.N("March","March"),C.N("April","April"),C.N("May","May"),C.N("June","June"),C.N("July","July"),C.N("August","August"),C.N("September","September"),C.N("October","October"),C.N("November","November"),C.N("December","December")],T.monthNamesShort=[C.N("JanuaryShort","Jan"),C.N("FebruaryShort","Feb"),C.N("MarchShort","Mar"),C.N("AprilShort","Apr"),C.N("MayShort","May"),C.N("JuneShort","Jun"),C.N("JulyShort","Jul"),C.N("AugustShort","Aug"),C.N("SeptemberShort","Sep"),C.N("OctoberShort","Oct"),C.N("NovemberShort","Nov"),C.N("DecemberShort","Dec")];class M{constructor(e){this._workspaceService=e}resolve(e){if(!this._workspaceService)return;const t=function(e){return e.configuration?{id:e.id,configPath:e.configuration}:1===e.folders.length?{id:e.id,uri:e.folders[0].uri}:void 0}(this._workspaceService.getWorkspace());return t?"WORKSPACE_NAME"===e.name?this._resolveWorkspaceName(t):"WORKSPACE_FOLDER"===e.name?this._resoveWorkspacePath(t):void 0:void 0}_resolveWorkspaceName(e){if(k(e))return m.EZ(e.uri.path);let t=m.EZ(e.configPath.path);return t.endsWith(S)&&(t=t.substr(0,t.length-14-1)),t}_resoveWorkspacePath(e){if(k(e))return(0,f.D)(e.uri.fsPath);let t=m.EZ(e.configPath.path),i=e.configPath.fsPath;return i.endsWith(t)&&(i=i.substr(0,i.length-t.length-1)),i?(0,f.D)(i):"/"}}class A{resolve(e){const{name:t}=e;return"RANDOM"===t?Math.random().toString().slice(-6):"RANDOM_HEX"===t?Math.random().toString(16).slice(-6):"UUID"===t?function(){w(_),_[6]=15&_[6]|64,_[8]=63&_[8]|128;let e=0,t="";return t+=b[_[e++]],t+=b[_[e++]],t+=b[_[e++]],t+=b[_[e++]],t+="-",t+=b[_[e++]],t+=b[_[e++]],t+="-",t+=b[_[e++]],t+=b[_[e++]],t+="-",t+=b[_[e++]],t+=b[_[e++]],t+="-",t+=b[_[e++]],t+=b[_[e++]],t+=b[_[e++]],t+=b[_[e++]],t+=b[_[e++]],t+=b[_[e++]],t}():void 0}}(0,u.Ic)(((e,t)=>{function i(t){const i=e.getColor(t);return i?i.toString():"transparent"}t.addRule(`.monaco-editor .snippet-placeholder { background-color: ${i(h.u2)}; outline-color: ${i(h.Pk)}; }`),t.addRule(`.monaco-editor .finish-snippet-placeholder { background-color: ${i(h.I1)}; outline-color: ${i(h.U6)}; }`)}));class O{constructor(e,t,i,o){this._editor=e,this._snippet=t,this._offset=i,this._snippetLineLeadingWhitespace=o,this._nestingLevel=1,this._placeholderGroups=(0,n.vM)(t.placeholders,p.Vm.compareByIndex),this._placeholderGroupsIdx=-1}dispose(){this._placeholderDecorations&&this._editor.deltaDecorations([...this._placeholderDecorations.values()],[]),this._placeholderGroups.length=0}_initDecorations(){if(this._placeholderDecorations)return;this._placeholderDecorations=new Map;const e=this._editor.getModel();this._editor.changeDecorations((t=>{for(const i of this._snippet.placeholders){const n=this._snippet.offset(i),o=this._snippet.fullLen(i),s=a.e.fromPositions(e.getPositionAt(this._offset+n),e.getPositionAt(this._offset+n+o)),r=i.isFinalTabstop?O._decor.inactiveFinal:O._decor.inactive,l=t.addDecoration(s,r);this._placeholderDecorations.set(i,l)}}))}move(e){if(!this._editor.hasModel())return[];if(this._initDecorations(),this._placeholderGroupsIdx>=0){let e=[];for(const t of this._placeholderGroups[this._placeholderGroupsIdx])if(t.transform){const i=this._placeholderDecorations.get(t),n=this._editor.getModel().getDecorationRange(i),o=this._editor.getModel().getValueInRange(n),s=t.transform.resolve(o).split(/\r\n|\r|\n/);for(let e=1;e<s.length;e++)s[e]=this._editor.getModel().normalizeIndentation(this._snippetLineLeadingWhitespace+s[e]);e.push(r.h.replace(n,s.join(this._editor.getModel().getEOL())))}e.length>0&&this._editor.executeEdits("snippet.placeholderTransform",e)}let t=!1;!0===e&&this._placeholderGroupsIdx<this._placeholderGroups.length-1?(this._placeholderGroupsIdx+=1,t=!0):!1===e&&this._placeholderGroupsIdx>0&&(this._placeholderGroupsIdx-=1,t=!0);const i=this._editor.getModel().changeDecorations((e=>{const i=new Set,n=[];for(const o of this._placeholderGroups[this._placeholderGroupsIdx]){const s=this._placeholderDecorations.get(o),r=this._editor.getModel().getDecorationRange(s);n.push(new l.Y(r.startLineNumber,r.startColumn,r.endLineNumber,r.endColumn)),t=t&&this._hasPlaceholderBeenCollapsed(o),e.changeDecorationOptions(s,o.isFinalTabstop?O._decor.activeFinal:O._decor.active),i.add(o);for(const t of this._snippet.enclosingPlaceholders(o)){const n=this._placeholderDecorations.get(t);e.changeDecorationOptions(n,t.isFinalTabstop?O._decor.activeFinal:O._decor.active),i.add(t)}}for(const[t,n]of this._placeholderDecorations)i.has(t)||e.changeDecorationOptions(n,t.isFinalTabstop?O._decor.inactiveFinal:O._decor.inactive);return n}));return t?this.move(e):null!=i?i:[]}_hasPlaceholderBeenCollapsed(e){let t=e;for(;t;){if(t instanceof p.Vm){const e=this._placeholderDecorations.get(t);if(this._editor.getModel().getDecorationRange(e).isEmpty()&&t.toString().length>0)return!0}t=t.parent}return!1}get isAtFirstPlaceholder(){return this._placeholderGroupsIdx<=0||0===this._placeholderGroups.length}get isAtLastPlaceholder(){return this._placeholderGroupsIdx===this._placeholderGroups.length-1}get hasPlaceholder(){return this._snippet.placeholders.length>0}computePossibleSelections(){const e=new Map;for(const t of this._placeholderGroups){let i;for(const n of t){if(n.isFinalTabstop)break;i||(i=[],e.set(n.index,i));const t=this._placeholderDecorations.get(n),o=this._editor.getModel().getDecorationRange(t);if(!o){e.delete(n.index);break}i.push(o)}}return e}get choice(){return this._placeholderGroups[this._placeholderGroupsIdx][0].choice}merge(e){const t=this._editor.getModel();this._nestingLevel*=10,this._editor.changeDecorations((i=>{for(const n of this._placeholderGroups[this._placeholderGroupsIdx]){const o=e.shift();console.assert(!o._placeholderDecorations);const s=o._snippet.placeholderInfo.last.index;for(const e of o._snippet.placeholderInfo.all)e.isFinalTabstop?e.index=n.index+(s+1)/this._nestingLevel:e.index=n.index+e.index/this._nestingLevel;this._snippet.replace(n,o._snippet.children);const r=this._placeholderDecorations.get(n);i.removeDecoration(r),this._placeholderDecorations.delete(n);for(const e of o._snippet.placeholders){const n=o._snippet.offset(e),s=o._snippet.fullLen(e),r=a.e.fromPositions(t.getPositionAt(o._offset+n),t.getPositionAt(o._offset+n+s)),l=i.addDecoration(r,O._decor.inactive);this._placeholderDecorations.set(e,l)}}this._placeholderGroups=(0,n.vM)(this._snippet.placeholders,p.Vm.compareByIndex)}))}}O._decor={active:c.qx.register({description:"snippet-placeholder-1",stickiness:0,className:"snippet-placeholder"}),inactive:c.qx.register({description:"snippet-placeholder-2",stickiness:1,className:"snippet-placeholder"}),activeFinal:c.qx.register({description:"snippet-placeholder-3",stickiness:1,className:"finish-snippet-placeholder"}),inactiveFinal:c.qx.register({description:"snippet-placeholder-4",stickiness:1,className:"finish-snippet-placeholder"})};const P={overwriteBefore:0,overwriteAfter:0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};class R{constructor(e,t,i=P){this._templateMerges=[],this._snippets=[],this._editor=e,this._template=t,this._options=i}static adjustWhitespace(e,t,i,n,o){const r=e.getLineContent(t.lineNumber),a=(0,s.V8)(r,0,t.column-1);let l;return i.walk((t=>{if(!(t instanceof p.xv)||t.parent instanceof p.Lv)return!0;const o=t.value.split(/\r\n|\r|\n/);if(n){const n=i.offset(t);if(0===n)o[0]=e.normalizeIndentation(o[0]);else{l=null!=l?l:i.toString();let t=l.charCodeAt(n-1);10!==t&&13!==t||(o[0]=e.normalizeIndentation(a+o[0]))}for(let t=1;t<o.length;t++)o[t]=e.normalizeIndentation(a+o[t])}const s=o.join(e.getEOL());return s!==t.value&&(t.parent.replace(t,[new p.xv(s)]),l=void 0),!0})),a}static adjustSelection(e,t,i,n){if(0!==i||0!==n){const{positionLineNumber:o,positionColumn:s}=t,r=s-i,a=s+n,c=e.validateRange({startLineNumber:o,startColumn:r,endLineNumber:o,endColumn:a});t=l.Y.createWithDirection(c.startLineNumber,c.startColumn,c.endLineNumber,c.endColumn,t.getDirection())}return t}static createEditsAndSnippets(e,t,i,n,o,s,l,c){const h=[],u=[];if(!e.hasModel())return{edits:h,snippets:u};const f=e.getModel(),m=e.invokeWithinContext((e=>e.get(g.ec))),v=e.invokeWithinContext((e=>new D(e.get(d.e),f))),_=()=>l;let b=0,w=f.getValueInRange(R.adjustSelection(f,e.getSelection(),i,0)),y=f.getValueInRange(R.adjustSelection(f,e.getSelection(),0,n)),C=f.getLineFirstNonWhitespaceColumn(e.getSelection().positionLineNumber);const x=e.getSelections().map(((e,t)=>({selection:e,idx:t}))).sort(((e,t)=>a.e.compareRangesUsingStarts(e.selection,t.selection)));for(const{selection:a,idx:l}of x){let d=R.adjustSelection(f,a,i,0),g=R.adjustSelection(f,a,0,n);w!==f.getValueInRange(d)&&(d=a),y!==f.getValueInRange(g)&&(g=a);const S=a.setStartPosition(d.startLineNumber,d.startColumn).setEndPosition(g.endLineNumber,g.endColumn),k=(new p.Yj).parse(t,!0,o),D=S.getStartPosition(),P=R.adjustWhitespace(f,D,k,s||l>0&&C!==f.getLineFirstNonWhitespaceColumn(a.positionLineNumber),!0);k.resolveVariables(new L([v,new I(_,l,x.length,"spread"===e.getOption(70)),new N(f,a,l,c),new E(f,a),new T,new M(m),new A]));const F=f.getOffsetAt(D)+b;b+=k.toString().length-f.getValueLengthInRange(S),h[l]=r.h.replace(S,k.toString()),h[l].identifier={major:l,minor:0},u[l]=new O(e,k,F,P)}return{edits:h,snippets:u}}dispose(){(0,o.B9)(this._snippets)}_logInfo(){return`template="${this._template}", merged_templates="${this._templateMerges.join(" -> ")}"`}insert(){if(!this._editor.hasModel())return;const{edits:e,snippets:t}=R.createEditsAndSnippets(this._editor,this._template,this._options.overwriteBefore,this._options.overwriteAfter,!1,this._options.adjustWhitespace,this._options.clipboardText,this._options.overtypingCapturer);this._snippets=t,this._editor.executeEdits("snippet",e,(e=>this._snippets[0].hasPlaceholder?this._move(!0):e.filter((e=>!!e.identifier)).map((e=>l.Y.fromPositions(e.range.getEndPosition()))))),this._editor.revealRange(this._editor.getSelections()[0])}merge(e,t=P){if(!this._editor.hasModel())return;this._templateMerges.push([this._snippets[0]._nestingLevel,this._snippets[0]._placeholderGroupsIdx,e]);const{edits:i,snippets:n}=R.createEditsAndSnippets(this._editor,e,t.overwriteBefore,t.overwriteAfter,!0,t.adjustWhitespace,t.clipboardText,t.overtypingCapturer);this._editor.executeEdits("snippet",i,(e=>{for(const e of this._snippets)e.merge(n);return console.assert(0===n.length),this._snippets[0].hasPlaceholder?this._move(void 0):e.filter((e=>!!e.identifier)).map((e=>l.Y.fromPositions(e.range.getEndPosition())))}))}next(){const e=this._move(!0);this._editor.setSelections(e),this._editor.revealPositionInCenterIfOutsideViewport(e[0].getPosition())}prev(){const e=this._move(!1);this._editor.setSelections(e),this._editor.revealPositionInCenterIfOutsideViewport(e[0].getPosition())}_move(e){const t=[];for(const i of this._snippets){const n=i.move(e);t.push(...n)}return t}get isAtFirstPlaceholder(){return this._snippets[0].isAtFirstPlaceholder}get isAtLastPlaceholder(){return this._snippets[0].isAtLastPlaceholder}get hasPlaceholder(){return this._snippets[0].hasPlaceholder}get choice(){return this._snippets[0].choice}isSelectionWithinPlaceholders(){if(!this.hasPlaceholder)return!1;const e=this._editor.getSelections();if(e.length<this._snippets.length)return!1;let t=new Map;for(const i of this._snippets){const n=i.computePossibleSelections();if(0===t.size)for(const[i,o]of n){o.sort(a.e.compareRangesUsingStarts);for(const n of e)if(o[0].containsRange(n)){t.set(i,[]);break}}if(0===t.size)return!1;t.forEach(((e,t)=>{e.push(...n.get(t))}))}e.sort(a.e.compareRangesUsingStarts);for(let[i,n]of t)if(n.length===e.length){n.sort(a.e.compareRangesUsingStarts);for(let o=0;o<n.length;o++)n[o].containsRange(e[o])||t.delete(i)}else t.delete(i);return t.size>0}}},79599:(e,t,i)=>{"use strict";i.d(t,{A9:()=>x,GI:()=>y,ZJ:()=>k,_y:()=>w,i5:()=>M,kL:()=>N,wg:()=>E});var n=i(71050),o=i(17301),s=i(75392),r=i(5976),a=i(84013),l=i(98401),c=i(70666),d=i(50187),h=i(24314),u=i(44101),g=i(88216),p=i(63472),f=i(63580),m=i(84144),v=i(94565),_=i(38819),b=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const w={Visible:new _.uy("suggestWidgetVisible",!1,(0,f.N)("suggestWidgetVisible","Whether suggestion are visible")),DetailsVisible:new _.uy("suggestWidgetDetailsVisible",!1,(0,f.N)("suggestWidgetDetailsVisible","Whether suggestion details are visible")),MultipleSuggestions:new _.uy("suggestWidgetMultipleSuggestions",!1,(0,f.N)("suggestWidgetMultipleSuggestions","Whether there are multiple suggestions to pick from")),MakesTextEdit:new _.uy("suggestionMakesTextEdit",!0,(0,f.N)("suggestionMakesTextEdit","Whether inserting the current suggestion yields in a change or has everything already been typed")),AcceptSuggestionsOnEnter:new _.uy("acceptSuggestionOnEnter",!0,(0,f.N)("acceptSuggestionOnEnter","Whether suggestions are inserted when pressing Enter")),HasInsertAndReplaceRange:new _.uy("suggestionHasInsertAndReplaceRange",!1,(0,f.N)("suggestionHasInsertAndReplaceRange","Whether the current suggestion has insert and replace behaviour")),InsertMode:new _.uy("suggestionInsertMode",void 0,{type:"string",description:(0,f.N)("suggestionInsertMode","Whether the default behaviour is to insert or replace")}),CanResolve:new _.uy("suggestionCanResolve",!1,(0,f.N)("suggestionCanResolve","Whether the current suggestion supports to resolve further details"))},y=new m.eH("suggestWidgetStatusBar");class C{constructor(e,t,i,n){this.position=e,this.completion=t,this.container=i,this.provider=n,this.isInvalid=!1,this.score=s.CL.Default,this.distance=0,this.textLabel="string"==typeof t.label?t.label:t.label.label,this.labelLow=this.textLabel.toLowerCase(),this.isInvalid=!this.textLabel,this.sortTextLow=t.sortText&&t.sortText.toLowerCase(),this.filterTextLow=t.filterText&&t.filterText.toLowerCase(),h.e.isIRange(t.range)?(this.editStart=new d.L(t.range.startLineNumber,t.range.startColumn),this.editInsertEnd=new d.L(t.range.endLineNumber,t.range.endColumn),this.editReplaceEnd=new d.L(t.range.endLineNumber,t.range.endColumn),this.isInvalid=this.isInvalid||h.e.spansMultipleLines(t.range)||t.range.startLineNumber!==e.lineNumber):(this.editStart=new d.L(t.range.insert.startLineNumber,t.range.insert.startColumn),this.editInsertEnd=new d.L(t.range.insert.endLineNumber,t.range.insert.endColumn),this.editReplaceEnd=new d.L(t.range.replace.endLineNumber,t.range.replace.endColumn),this.isInvalid=this.isInvalid||h.e.spansMultipleLines(t.range.insert)||h.e.spansMultipleLines(t.range.replace)||t.range.insert.startLineNumber!==e.lineNumber||t.range.replace.startLineNumber!==e.lineNumber||t.range.insert.startColumn!==t.range.replace.startColumn),"function"!=typeof n.resolveCompletionItem&&(this._resolveCache=Promise.resolve(),this._isResolved=!0)}get isResolved(){return!!this._isResolved}resolve(e){return b(this,void 0,void 0,(function*(){if(!this._resolveCache){const t=e.onCancellationRequested((()=>{this._resolveCache=void 0,this._isResolved=!1}));this._resolveCache=Promise.resolve(this.provider.resolveCompletionItem(this.completion,e)).then((e=>{Object.assign(this.completion,e),this._isResolved=!0,t.dispose()}),(e=>{(0,o.VV)(e)&&(this._resolveCache=void 0,this._isResolved=!1)}))}return this._resolveCache}))}}class x{constructor(e=2,t=new Set,i=new Set,n=!0){this.snippetSortOrder=e,this.kindFilter=t,this.providerFilter=i,this.showDeprecated=n}}let S;function k(){return S}x.default=new x;class L{constructor(e,t,i,n){this.items=e,this.needsClipboard=t,this.durations=i,this.disposable=n}}function N(e,t,i=x.default,s={triggerKind:0},l=n.T.None){return b(this,void 0,void 0,(function*(){const n=new a.G(!0);t=t.clone();const c=e.getWordAtPosition(t),d=c?new h.e(t.lineNumber,c.startColumn,t.lineNumber,c.endColumn):h.e.fromPositions(t),g={replace:d,insert:d.setEndPosition(t.lineNumber,t.column)},f=[],m=new r.SL,v=[];let _=!1;const w=(e,n,o)=>{var s,a,l;if(n){for(let o of n.suggestions)if(!i.kindFilter.has(o.kind)){if(!i.showDeprecated&&(null===(s=null==o?void 0:o.tags)||void 0===s?void 0:s.includes(1)))continue;o.range||(o.range=g),o.sortText||(o.sortText="string"==typeof o.label?o.label:o.label.label),!_&&o.insertTextRules&&4&o.insertTextRules&&(_=p.Yj.guessNeedsClipboard(o.insertText)),f.push(new C(t,o,n,e))}(0,r.Wf)(n)&&m.add(n),v.push({providerName:null!==(a=e._debugDisplayName)&&void 0!==a?a:"unkown_provider",elapsedProvider:null!==(l=n.duration)&&void 0!==l?l:-1,elapsedOverall:o.elapsed()})}},y=(()=>b(this,void 0,void 0,(function*(){if(!S||i.kindFilter.has(27))return;if(i.providerFilter.size>0&&!i.providerFilter.has(S))return;const n=new a.G(!0),o=yield S.provideCompletionItems(e,t,s,l);w(S,o,n)})))();for(let n of u.KZ.orderedGroups(e)){let r=f.length;if(yield Promise.all(n.map((n=>b(this,void 0,void 0,(function*(){if(!(i.providerFilter.size>0)||i.providerFilter.has(n))try{const i=new a.G(!0),o=yield n.provideCompletionItems(e,t,s,l);w(n,o,i)}catch(e){(0,o.Cp)(e)}}))))),r!==f.length||l.isCancellationRequested)break}return yield y,l.isCancellationRequested?(m.dispose(),Promise.reject((0,o.F0)())):new L(f.sort(E(i.snippetSortOrder)),_,{entries:v,elapsed:n.elapsed()},m)}))}function D(e,t){if(e.sortTextLow&&t.sortTextLow){if(e.sortTextLow<t.sortTextLow)return-1;if(e.sortTextLow>t.sortTextLow)return 1}return e.completion.label<t.completion.label?-1:e.completion.label>t.completion.label?1:e.completion.kind-t.completion.kind}const I=new Map;function E(e){return I.get(e)}I.set(0,(function(e,t){if(e.completion.kind!==t.completion.kind){if(27===e.completion.kind)return-1;if(27===t.completion.kind)return 1}return D(e,t)})),I.set(2,(function(e,t){if(e.completion.kind!==t.completion.kind){if(27===e.completion.kind)return 1;if(27===t.completion.kind)return-1}return D(e,t)})),I.set(1,D),v.P.registerCommand("_executeCompletionItemProvider",((e,...t)=>b(void 0,void 0,void 0,(function*(){const[i,o,s,r]=t;(0,l.p_)(c.o.isUri(i)),(0,l.p_)(d.L.isIPosition(o)),(0,l.p_)("string"==typeof s||!s),(0,l.p_)("number"==typeof r||!r);const a=yield e.get(g.S).createModelReference(i);try{const e={incomplete:!1,suggestions:[]},t=[],i=yield N(a.object.textEditorModel,d.L.lift(o),void 0,{triggerCharacter:s,triggerKind:s?1:0});for(const o of i.items)t.length<(null!=r?r:0)&&t.push(o.resolve(n.T.None)),e.incomplete=e.incomplete||o.container.incomplete,e.suggestions.push(o.completion);try{return yield Promise.all(t),e}finally{setTimeout((()=>i.disposable.dispose()),100)}}finally{a.dispose()}}))));const T=new class{constructor(){this.onlyOnceSuggestions=[]}provideCompletionItems(){let e={suggestions:this.onlyOnceSuggestions.slice(0)};return this.onlyOnceSuggestions.length=0,e}};function M(e,t){setTimeout((()=>{T.onlyOnceSuggestions.push(...t),e.getContribution("editor.contrib.suggestController").triggerSuggest((new Set).add(T))}),0)}u.KZ.register("*",T)},88250:(e,t,i)=>{"use strict";i.r(t),i.d(t,{SuggestController:()=>_t,TriggerSuggestAction:()=>wt});var n=i(85152),o=i(9488),s=i(15393),r=i(71050),a=i(17301),l=i(4669),c=i(8313),d=i(5976),h=i(1432),u=i(84013),g=i(98401),p=i(39925),f=i(16830),m=i(69386),v=i(50187),_=i(24314),b=i(29102),w=i(93379),y=i(63472),C=i(43702),x=i(44101),S=i(33108),k=i(65026),L=i(72065),N=i(26904),D=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},I=function(e,t){return function(i,n){t(i,n,e)}};class E{constructor(e){this.name=e}select(e,t,i){if(0===i.length)return 0;let n=i[0].score[0];for(let e=0;e<i.length;e++){const{score:t,completion:o}=i[e];if(t[0]!==n)break;if(o.preselect)return e}return 0}}class T extends E{constructor(){super("first")}memorize(e,t,i){}toJSON(){}fromJSON(){}}let M=class e{constructor(e,t){this._storageService=e,this._configService=t,this._disposables=new d.SL,this._persistSoon=new s.pY((()=>this._saveState()),500),this._disposables.add(e.onWillSaveState((e=>{e.reason===N.fk.SHUTDOWN&&this._saveState()})))}dispose(){this._disposables.dispose(),this._persistSoon.dispose()}memorize(e,t,i){this._withStrategy(e,t).memorize(e,t,i),this._persistSoon.schedule()}select(e,t,i){return this._withStrategy(e,t).select(e,t,i)}_withStrategy(t,i){var n;const o=this._configService.getValue("editor.suggestSelection",{overrideIdentifier:t.getLanguageIdAtPosition(i.lineNumber,i.column),resource:t.uri});if((null===(n=this._strategy)||void 0===n?void 0:n.name)!==o){this._saveState();const t=e._strategyCtors.get(o)||T;this._strategy=new t;try{const t=this._configService.getValue("editor.suggest.shareSuggestSelections")?0:1,i=this._storageService.get(`${e._storagePrefix}/${o}`,t);i&&this._strategy.fromJSON(JSON.parse(i))}catch(e){}}return this._strategy}_saveState(){if(this._strategy){const t=this._configService.getValue("editor.suggest.shareSuggestSelections")?0:1,i=JSON.stringify(this._strategy);this._storageService.store(`${e._storagePrefix}/${this._strategy.name}`,i,t,1)}}};M._strategyCtors=new Map([["recentlyUsedByPrefix",class extends E{constructor(){super("recentlyUsedByPrefix"),this._trie=C.Id.forStrings(),this._seq=0}memorize(e,t,i){const{word:n}=e.getWordUntilPosition(t),o=`${e.getLanguageId()}/${n}`;this._trie.set(o,{type:i.completion.kind,insertText:i.completion.insertText,touch:this._seq++})}select(e,t,i){let{word:n}=e.getWordUntilPosition(t);if(!n)return super.select(e,t,i);let o=`${e.getLanguageId()}/${n}`,s=this._trie.get(o);if(s||(s=this._trie.findSubstr(o)),s)for(let e=0;e<i.length;e++){let{kind:t,insertText:n}=i[e].completion;if(t===s.type&&n===s.insertText)return e}return super.select(e,t,i)}toJSON(){let e=[];return this._trie.forEach(((t,i)=>e.push([i,t]))),e.sort(((e,t)=>-(e[1].touch-t[1].touch))).forEach(((e,t)=>e[1].touch=t)),e.slice(0,200)}fromJSON(e){if(this._trie.clear(),e.length>0){this._seq=e[0][1].touch+1;for(const[t,i]of e)i.type="number"==typeof i.type?i.type:(0,x.jr)(i.type),this._trie.set(t,i)}}}],["recentlyUsed",class extends E{constructor(){super("recentlyUsed"),this._cache=new C.z6(300,.66),this._seq=0}memorize(e,t,i){const n=`${e.getLanguageId()}/${i.textLabel}`;this._cache.set(n,{touch:this._seq++,type:i.completion.kind,insertText:i.completion.insertText})}select(e,t,i){if(0===i.length)return 0;const n=e.getLineContent(t.lineNumber).substr(t.column-10,t.column-1);if(/\s$/.test(n))return super.select(e,t,i);let o=i[0].score[0],s=-1,r=-1,a=-1;for(let t=0;t<i.length&&i[t].score[0]===o;t++){const n=`${e.getLanguageId()}/${i[t].textLabel}`,o=this._cache.peek(n);if(o&&o.touch>a&&o.type===i[t].completion.kind&&o.insertText===i[t].completion.insertText&&(a=o.touch,r=t),i[t].completion.preselect&&-1===s)return t}return-1!==r?r:-1!==s?s:0}toJSON(){return this._cache.toJSON()}fromJSON(e){this._cache.clear();for(const[t,i]of e)i.touch=0,i.type="number"==typeof i.type?i.type:(0,x.jr)(i.type),this._cache.set(t,i);this._seq=this._cache.size}}],["first",T]]),M._storagePrefix="suggest/memories",M=D([I(0,N.Uy),I(1,S.Ui)],M);const A=(0,L.yh)("ISuggestMemories");(0,k.z)(A,M,!0);var O=i(38819),P=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},R=function(e,t){return function(i,n){t(i,n,e)}};let F=class e{constructor(t,i){this._editor=t,this._enabled=!1,this._ckAtEnd=e.AtEnd.bindTo(i),this._configListener=this._editor.onDidChangeConfiguration((e=>e.hasChanged(110)&&this._update())),this._update()}dispose(){var e;this._configListener.dispose(),null===(e=this._selectionListener)||void 0===e||e.dispose(),this._ckAtEnd.reset()}_update(){const e="on"===this._editor.getOption(110);if(this._enabled!==e)if(this._enabled=e,this._enabled){const e=()=>{if(!this._editor.hasModel())return void this._ckAtEnd.set(!1);const e=this._editor.getModel(),t=this._editor.getSelection(),i=e.getWordAtPosition(t.getStartPosition());i?this._ckAtEnd.set(i.endColumn===t.getStartPosition().column):this._ckAtEnd.set(!1)};this._selectionListener=this._editor.onDidChangeCursorSelection(e),e()}else this._selectionListener&&(this._ckAtEnd.reset(),this._selectionListener.dispose(),this._selectionListener=void 0)}};F.AtEnd=new O.uy("atEndOfWord",!1),F=P([R(1,O.i6)],F);var B=i(63580),V=i(84144),W=i(94565),H=i(49989),z=i(43557),j=i(79599),U=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},$=function(e,t){return function(i,n){t(i,n,e)}};let K=class e{constructor(t,i){this._editor=t,this._index=0,this._ckOtherSuggestions=e.OtherSuggestions.bindTo(i)}dispose(){this.reset()}reset(){var e;this._ckOtherSuggestions.reset(),null===(e=this._listener)||void 0===e||e.dispose(),this._model=void 0,this._acceptNext=void 0,this._ignore=!1}set({model:t,index:i},n){if(0===t.items.length)return void this.reset();e._moveIndex(!0,t,i)!==i?(this._acceptNext=n,this._model=t,this._index=i,this._listener=this._editor.onDidChangeCursorPosition((()=>{this._ignore||this.reset()})),this._ckOtherSuggestions.set(!0)):this.reset()}static _moveIndex(e,t,i){let n=i;for(;n=(n+t.items.length+(e?1:-1))%t.items.length,n!==i&&t.items[n].completion.additionalTextEdits;);return n}next(){this._move(!0)}prev(){this._move(!1)}_move(t){if(this._model)try{this._ignore=!0,this._index=e._moveIndex(t,this._model,this._index),this._acceptNext({index:this._index,item:this._model.items[this._index],model:this._model})}finally{this._ignore=!1}}};K.OtherSuggestions=new O.uy("hasOtherSuggestions",!1),K=U([$(1,O.i6)],K);var q=i(44906);class Z{constructor(e,t,i){this._disposables=new d.SL,this._disposables.add(t.onDidShow((()=>this._onItem(t.getFocusedItem())))),this._disposables.add(t.onDidFocus(this._onItem,this)),this._disposables.add(t.onDidHide(this.reset,this)),this._disposables.add(e.onWillType((n=>{if(this._active&&!t.isFrozen()){const t=n.charCodeAt(n.length-1);this._active.acceptCharacters.has(t)&&e.getOption(0)&&i(this._active.item)}})))}_onItem(e){if(!e||!(0,o.Of)(e.item.completion.commitCharacters))return void this.reset();if(this._active&&this._active.item.item===e.item)return;const t=new q.q;for(const i of e.item.completion.commitCharacters)i.length>0&&t.add(i.charCodeAt(0));this._active={acceptCharacters:t,item:e}}reset(){this._active=void 0}dispose(){this._disposables.dispose()}}var G=i(97295),Y=i(3860),Q=i(90469),X=i(80689),J=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class ee{static create(e,t){return J(this,void 0,void 0,(function*(){if(!t.getOption(105).localityBonus)return ee.None;if(!t.hasModel())return ee.None;const i=t.getModel(),n=t.getPosition();if(!e.canComputeWordRanges(i.uri))return ee.None;const[s]=yield(new X.x).provideSelectionRanges(i,[n]);if(0===s.length)return ee.None;const r=yield e.computeWordRanges(i.uri,s[0].range);if(!r)return ee.None;const a=i.getWordUntilPosition(n);return delete r[a.word],new class extends ee{distance(e,i){if(!n.equals(t.getPosition()))return 0;if(17===i.kind)return 2<<20;let a="string"==typeof i.label?i.label:i.label.label,l=r[a];if((0,o.XY)(l))return 2<<20;let c=(0,o.ry)(l,_.e.fromPositions(e),_.e.compareRangesUsingStarts),d=c>=0?l[c]:l[Math.max(0,~c-1)],h=s.length;for(const e of s){if(!_.e.containsRange(e.range,d))break;h-=1}return h}}}))}}ee.None=new class extends ee{distance(){return 0}};var te=i(84972),ie=i(10829),ne=i(75392);class oe{constructor(e,t,i,n,o,s,r){this.clipboardText=r,this._snippetCompareFn=oe._compareCompletionItems,this._items=e,this._column=t,this._wordDistance=n,this._options=o,this._refilterKind=1,this._lineContext=i,"top"===s?this._snippetCompareFn=oe._compareCompletionItemsSnippetsUp:"bottom"===s&&(this._snippetCompareFn=oe._compareCompletionItemsSnippetsDown)}get lineContext(){return this._lineContext}set lineContext(e){this._lineContext.leadingLineContent===e.leadingLineContent&&this._lineContext.characterCountDelta===e.characterCountDelta||(this._refilterKind=this._lineContext.characterCountDelta<e.characterCountDelta&&this._filteredItems?2:1,this._lineContext=e)}get items(){return this._ensureCachedState(),this._filteredItems}get allProvider(){return this._ensureCachedState(),this._providerInfo.keys()}get incomplete(){this._ensureCachedState();const e=new Set;for(let[t,i]of this._providerInfo)i&&e.add(t);return e}adopt(e){let t=[];for(let i=0;i<this._items.length;)e.has(this._items[i].provider)?i++:(t.push(this._items[i]),this._items[i]=this._items[this._items.length-1],this._items.pop());return this._refilterKind=1,t}get stats(){return this._ensureCachedState(),this._stats}_ensureCachedState(){0!==this._refilterKind&&this._createCachedState()}_createCachedState(){this._providerInfo=new Map;const e=[],{leadingLineContent:t,characterCountDelta:i}=this._lineContext;let n="",s="";const r=1===this._refilterKind?this._items:this._filteredItems,a=[],l=!this._options.filterGraceful||r.length>2e3?ne.EW:ne.l7;for(let o=0;o<r.length;o++){const c=r[o];if(c.isInvalid)continue;this._providerInfo.set(c.provider,Boolean(c.container.incomplete));const d=c.position.column-c.editStart.column,h=d+i-(c.position.column-this._column);if(n.length!==h&&(n=0===h?"":t.slice(-h),s=n.toLowerCase()),c.word=n,0===h)c.score=ne.CL.Default;else{let e=0;for(;e<d;){const t=n.charCodeAt(e);if(32!==t&&9!==t)break;e+=1}if(e>=h)c.score=ne.CL.Default;else if("string"==typeof c.completion.filterText){let t=l(n,s,e,c.completion.filterText,c.filterTextLow,0,!1);if(!t)continue;0===(0,G.zY)(c.completion.filterText,c.textLabel)?c.score=t:(c.score=(0,ne.jB)(n,s,e,c.textLabel,c.labelLow,0),c.score[0]=t[0])}else{let t=l(n,s,e,c.textLabel,c.labelLow,0,!1);if(!t)continue;c.score=t}}c.idx=o,c.distance=this._wordDistance.distance(c.position,c.completion),a.push(c),e.push(c.textLabel.length)}this._filteredItems=a.sort(this._snippetCompareFn),this._refilterKind=0,this._stats={pLabelLen:e.length?(0,o.HW)(e.length-.85,e,((e,t)=>e-t)):0}}static _compareCompletionItems(e,t){return e.score[0]>t.score[0]?-1:e.score[0]<t.score[0]?1:e.distance<t.distance?-1:e.distance>t.distance?1:e.idx<t.idx?-1:e.idx>t.idx?1:0}static _compareCompletionItemsSnippetsDown(e,t){if(e.completion.kind!==t.completion.kind){if(27===e.completion.kind)return 1;if(27===t.completion.kind)return-1}return oe._compareCompletionItems(e,t)}static _compareCompletionItemsSnippetsUp(e,t){if(e.completion.kind!==t.completion.kind){if(27===e.completion.kind)return-1;if(27===t.completion.kind)return 1}return oe._compareCompletionItems(e,t)}}var se=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},re=function(e,t){return function(i,n){t(i,n,e)}},ae=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class le{constructor(e,t,i,n){this.leadingLineContent=e.getLineContent(t.lineNumber).substr(0,t.column-1),this.leadingWord=e.getWordUntilPosition(t),this.lineNumber=t.lineNumber,this.column=t.column,this.auto=i,this.shy=n}static shouldAutoTrigger(e){if(!e.hasModel())return!1;const t=e.getModel(),i=e.getPosition();t.tokenizeIfCheap(i.lineNumber);const n=t.getWordAtPosition(i);return!!n&&(n.endColumn===i.column&&!!isNaN(Number(n.word)))}}let ce=class e{constructor(e,t,i,n,o,r,a){this._editor=e,this._editorWorkerService=t,this._clipboardService=i,this._telemetryService=n,this._logService=o,this._contextKeyService=r,this._configurationService=a,this._toDispose=new d.SL,this._quickSuggestDelay=10,this._triggerCharacterListener=new d.SL,this._triggerQuickSuggest=new s._F,this._state=0,this._completionDisposables=new d.SL,this._onDidCancel=new l.Q5,this._onDidTrigger=new l.Q5,this._onDidSuggest=new l.Q5,this.onDidCancel=this._onDidCancel.event,this.onDidTrigger=this._onDidTrigger.event,this.onDidSuggest=this._onDidSuggest.event,this._telemetryGate=0,this._currentSelection=this._editor.getSelection()||new Y.Y(1,1,1,1),this._toDispose.add(this._editor.onDidChangeModel((()=>{this._updateTriggerCharacters(),this.cancel()}))),this._toDispose.add(this._editor.onDidChangeModelLanguage((()=>{this._updateTriggerCharacters(),this.cancel()}))),this._toDispose.add(this._editor.onDidChangeConfiguration((()=>{this._updateTriggerCharacters(),this._updateQuickSuggest()}))),this._toDispose.add(x.KZ.onDidChange((()=>{this._updateTriggerCharacters(),this._updateActiveSuggestSession()}))),this._toDispose.add(this._editor.onDidChangeCursorSelection((e=>{this._onCursorChange(e)})));let c=!1;this._toDispose.add(this._editor.onDidCompositionStart((()=>{c=!0}))),this._toDispose.add(this._editor.onDidCompositionEnd((()=>{c=!1,this._onCompositionEnd()}))),this._toDispose.add(this._editor.onDidChangeModelContent((()=>{c||this._refilterCompletionItems()}))),this._updateTriggerCharacters(),this._updateQuickSuggest()}dispose(){(0,d.B9)(this._triggerCharacterListener),(0,d.B9)([this._onDidCancel,this._onDidSuggest,this._onDidTrigger,this._triggerQuickSuggest]),this._toDispose.dispose(),this._completionDisposables.dispose(),this.cancel()}_updateQuickSuggest(){this._quickSuggestDelay=this._editor.getOption(79),(isNaN(this._quickSuggestDelay)||!this._quickSuggestDelay&&0!==this._quickSuggestDelay||this._quickSuggestDelay<0)&&(this._quickSuggestDelay=10)}_updateTriggerCharacters(){if(this._triggerCharacterListener.clear(),this._editor.getOption(80)||!this._editor.hasModel()||!this._editor.getOption(108))return;const e=new Map;for(const t of x.KZ.all(this._editor.getModel()))for(const i of t.triggerCharacters||[]){let n=e.get(i);n||(n=new Set,n.add((0,j.ZJ)()),e.set(i,n)),n.add(t)}const t=t=>{if(!function(e,t,i){if(!Boolean(t.getContextKeyValue("inlineSuggestionVisible")))return!0;const n=i.getValue("editor.inlineSuggest.allowSuggestOnTriggerCharacters");return void 0!==n&&Boolean(n)}(this._editor,this._contextKeyService,this._configurationService))return;if(le.shouldAutoTrigger(this._editor))return;if(!t){const e=this._editor.getPosition();t=this._editor.getModel().getLineContent(e.lineNumber).substr(0,e.column-1)}let i="";(0,G.YK)(t.charCodeAt(t.length-1))?(0,G.ZG)(t.charCodeAt(t.length-2))&&(i=t.substr(t.length-2)):i=t.charAt(t.length-1);const n=e.get(i);if(n){const e=this._completionModel?{items:this._completionModel.adopt(n),clipboardText:this._completionModel.clipboardText}:void 0;this.trigger({auto:!0,shy:!1,triggerCharacter:i},Boolean(this._completionModel),n,e)}};this._triggerCharacterListener.add(this._editor.onDidType(t)),this._triggerCharacterListener.add(this._editor.onDidCompositionEnd(t))}get state(){return this._state}cancel(e=!1){var t;0!==this._state&&(this._triggerQuickSuggest.cancel(),null===(t=this._requestToken)||void 0===t||t.cancel(),this._requestToken=void 0,this._state=0,this._completionModel=void 0,this._context=void 0,this._onDidCancel.fire({retrigger:e}))}clear(){this._completionDisposables.clear()}_updateActiveSuggestSession(){0!==this._state&&(this._editor.hasModel()&&x.KZ.has(this._editor.getModel())?this.trigger({auto:2===this._state,shy:!1},!0):this.cancel())}_onCursorChange(e){if(!this._editor.hasModel())return;const t=this._currentSelection;this._currentSelection=this._editor.getSelection(),!e.selection.isEmpty()||0!==e.reason&&3!==e.reason||"keyboard"!==e.source&&"deleteLeft"!==e.source?this.cancel():0===this._state&&0===e.reason?(t.containsRange(this._currentSelection)||t.getEndPosition().isBeforeOrEqual(this._currentSelection.getPosition()))&&this._doTriggerQuickSuggest():0!==this._state&&3===e.reason&&this._refilterCompletionItems()}_onCompositionEnd(){0===this._state?this._doTriggerQuickSuggest():this._refilterCompletionItems()}_doTriggerQuickSuggest(){!1!==this._editor.getOption(78)&&(this._editor.getOption(105).snippetsPreventQuickSuggestions&&w.SnippetController2.get(this._editor).isInSnippet()||(this.cancel(),this._triggerQuickSuggest.cancelAndSet((()=>{if(0!==this._state)return;if(!le.shouldAutoTrigger(this._editor))return;if(!this._editor.hasModel())return;const e=this._editor.getModel(),t=this._editor.getPosition(),i=this._editor.getOption(78);if(!1!==i){if(!0===i);else{e.tokenizeIfCheap(t.lineNumber);const n=e.getLineTokens(t.lineNumber),o=n.getStandardTokenType(n.findTokenIndexAtOffset(Math.max(t.column-1-1,0)));if(!(i.other&&0===o||i.comments&&1===o||i.strings&&2===o))return}(function(e,t,i){if(!Boolean(t.getContextKeyValue("inlineSuggestionVisible")))return!0;const n=i.getValue("editor.inlineSuggest.allowQuickSuggestions");return void 0!==n&&Boolean(n)})(this._editor,this._contextKeyService,this._configurationService)&&x.KZ.has(e)&&this.trigger({auto:!0,shy:!1})}}),this._quickSuggestDelay)))}_refilterCompletionItems(){Promise.resolve().then((()=>{if(0===this._state)return;if(!this._editor.hasModel())return;const e=this._editor.getModel(),t=this._editor.getPosition(),i=new le(e,t,2===this._state,!1);this._onNewContext(i)}))}trigger(t,i=!1,n,o){var s;if(!this._editor.hasModel())return;const l=this._editor.getModel(),c=t.auto,d=new le(l,this._editor.getPosition(),c,t.shy);this.cancel(i),this._state=c?2:1,this._onDidTrigger.fire({auto:c,shy:t.shy,position:this._editor.getPosition()}),this._context=d;let h={triggerKind:null!==(s=t.triggerKind)&&void 0!==s?s:0};t.triggerCharacter&&(h={triggerKind:1,triggerCharacter:t.triggerCharacter}),this._requestToken=new r.A;const u=this._editor.getOption(100);let g=1;switch(u){case"top":g=0;break;case"bottom":g=2}const{itemKind:p,showDeprecated:f}=e._createSuggestFilter(this._editor),m=ee.create(this._editorWorkerService,this._editor),v=(0,j.kL)(l,this._editor.getPosition(),new j.A9(g,p,n,f),h,this._requestToken.token);Promise.all([v,m]).then((([e,i])=>ae(this,void 0,void 0,(function*(){var n;if(null===(n=this._requestToken)||void 0===n||n.dispose(),!this._editor.hasModel())return;let s=null==o?void 0:o.clipboardText;if(!s&&e.needsClipboard&&(s=yield this._clipboardService.readText()),0===this._state)return;const r=this._editor.getModel();let a=e.items;if(o){const e=(0,j.wg)(g);a=a.concat(o.items).sort(e)}const l=new le(r,this._editor.getPosition(),c,t.shy);this._completionModel=new oe(a,this._context.column,{leadingLineContent:l.leadingLineContent,characterCountDelta:l.column-this._context.column},i,this._editor.getOption(105),this._editor.getOption(100),s),this._completionDisposables.add(e.disposable),this._onNewContext(l),this._reportDurationsTelemetry(e.durations)})))).catch(a.dL)}_reportDurationsTelemetry(e){this._telemetryGate++%230==0&&setTimeout((()=>{this._telemetryService.publicLog2("suggest.durations.json",{data:JSON.stringify(e)}),this._logService.debug("suggest.durations.json",e)}))}static _createSuggestFilter(e){const t=new Set;"none"===e.getOption(100)&&t.add(27);const i=e.getOption(105);return i.showMethods||t.add(0),i.showFunctions||t.add(1),i.showConstructors||t.add(2),i.showFields||t.add(3),i.showVariables||t.add(4),i.showClasses||t.add(5),i.showStructs||t.add(6),i.showInterfaces||t.add(7),i.showModules||t.add(8),i.showProperties||t.add(9),i.showEvents||t.add(10),i.showOperators||t.add(11),i.showUnits||t.add(12),i.showValues||t.add(13),i.showConstants||t.add(14),i.showEnums||t.add(15),i.showEnumMembers||t.add(16),i.showKeywords||t.add(17),i.showWords||t.add(18),i.showColors||t.add(19),i.showFiles||t.add(20),i.showReferences||t.add(21),i.showColors||t.add(22),i.showFolders||t.add(23),i.showTypeParameters||t.add(24),i.showSnippets||t.add(27),i.showUsers||t.add(25),i.showIssues||t.add(26),{itemKind:t,showDeprecated:i.showDeprecated}}_onNewContext(e){if(this._context)if(e.lineNumber===this._context.lineNumber)if((0,G.V8)(e.leadingLineContent)===(0,G.V8)(this._context.leadingLineContent)){if(e.column<this._context.column)e.leadingWord.word?this.trigger({auto:this._context.auto,shy:!1},!0):this.cancel();else if(this._completionModel)if(0!==e.leadingWord.word.length&&e.leadingWord.startColumn>this._context.leadingWord.startColumn){const e=new Set(x.KZ.all(this._editor.getModel()));for(let t of this._completionModel.allProvider)e.delete(t);const t=this._completionModel.adopt(new Set);this.trigger({auto:this._context.auto,shy:!1},!0,e,{items:t,clipboardText:this._completionModel.clipboardText})}else if(e.column>this._context.column&&this._completionModel.incomplete.size>0&&0!==e.leadingWord.word.length){const{incomplete:e}=this._completionModel,t=this._completionModel.adopt(e);this.trigger({auto:2===this._state,shy:!1,triggerKind:2},!0,e,{items:t,clipboardText:this._completionModel.clipboardText})}else{let t=this._completionModel.lineContext,i=!1;if(this._completionModel.lineContext={leadingLineContent:e.leadingLineContent,characterCountDelta:e.column-this._context.column},0===this._completionModel.items.length){if(le.shouldAutoTrigger(this._editor)&&this._context.leadingWord.endColumn<e.leadingWord.startColumn)return void this.trigger({auto:this._context.auto,shy:!1},!0);if(this._context.auto)return void this.cancel();if(this._completionModel.lineContext=t,i=this._completionModel.items.length>0,i&&0===e.leadingWord.word.length)return void this.cancel()}this._onDidSuggest.fire({completionModel:this._completionModel,auto:this._context.auto,shy:this._context.shy,isFrozen:i})}}else this.cancel();else this.cancel()}};ce=se([re(1,Q.p),re(2,te.p),re(3,ie.b),re(4,z.VZ),re(5,O.i6),re(6,S.Ui)],ce);class de{constructor(e,t){this._disposables=new d.SL,this._lastOvertyped=[],this._empty=!0,this._disposables.add(e.onWillType((()=>{if(!this._empty)return;if(!e.hasModel())return;const t=e.getSelections(),i=t.length;let n=!1;for(let e=0;e<i;e++)if(!t[e].isEmpty()){n=!0;break}if(!n)return;this._lastOvertyped=[];const o=e.getModel();for(let e=0;e<i;e++){const i=t[e];if(o.getValueLengthInRange(i)>de._maxSelectionLength)return;this._lastOvertyped[e]={value:o.getValueInRange(i),multiline:i.startLineNumber!==i.endLineNumber}}this._empty=!1}))),this._disposables.add(t.onDidCancel((e=>{this._empty||e.retrigger||(this._empty=!0)})))}getLastOvertypedInfo(e){if(!this._empty&&e>=0&&e<this._lastOvertyped.length)return this._lastOvertyped[e]}dispose(){this._disposables.dispose()}}de._maxSelectionLength=51200;var he=i(65321),ue=(i(28609),i(43799)),ge=i(59870),pe=(i(89401),i(84527)),fe=i(90317),me=i(58335),ve=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},_e=function(e,t){return function(i,n){t(i,n,e)}};class be extends me.Mm{updateLabel(){const e=this._keybindingService.lookupKeybinding(this._action.id,this._contextKeyService);if(!e)return super.updateLabel();this.label&&(this.label.textContent=(0,B.N)("ddd","{0} ({1})",this._action.label,be.symbolPrintEnter(e)))}static symbolPrintEnter(e){var t;return null===(t=e.getLabel())||void 0===t?void 0:t.replace(/\benter\b/gi,"âŽ")}}let we=class{constructor(e,t,i,n){this._menuService=i,this._contextKeyService=n,this._menuDisposables=new d.SL,this.element=he.R3(e,he.$(".suggest-status-bar"));const o=e=>e instanceof V.U8?t.createInstance(be,e,void 0):void 0;this._leftActions=new fe.o(this.element,{actionViewItemProvider:o}),this._rightActions=new fe.o(this.element,{actionViewItemProvider:o}),this._leftActions.domNode.classList.add("left"),this._rightActions.domNode.classList.add("right")}dispose(){this._menuDisposables.dispose(),this.element.remove()}show(){const e=this._menuService.createMenu(j.GI,this._contextKeyService),t=()=>{const t=[],i=[];for(let[n,o]of e.getActions())"left"===n?t.push(...o):i.push(...o);this._leftActions.clear(),this._leftActions.push(t),this._rightActions.clear(),this._rightActions.push(i)};this._menuDisposables.add(e.onDidChange((()=>t()))),this._menuDisposables.add(e)}hide(){this._menuDisposables.clear()}};we=ve([_e(1,L.TG),_e(2,V.co),_e(3,O.i6)],we);i(24954);var ye=i(73910),Ce=i(88810),xe=i(97781),Se=i(73098);class ke{constructor(){let e;this._onDidWillResize=new l.Q5,this.onDidWillResize=this._onDidWillResize.event,this._onDidResize=new l.Q5,this.onDidResize=this._onDidResize.event,this._sashListener=new d.SL,this._size=new he.Ro(0,0),this._minSize=new he.Ro(0,0),this._maxSize=new he.Ro(Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),this.domNode=document.createElement("div"),this._eastSash=new Se.g(this.domNode,{getVerticalSashLeft:()=>this._size.width},{orientation:0}),this._westSash=new Se.g(this.domNode,{getVerticalSashLeft:()=>0},{orientation:0}),this._northSash=new Se.g(this.domNode,{getHorizontalSashTop:()=>0},{orientation:1,orthogonalEdge:Se.l.North}),this._southSash=new Se.g(this.domNode,{getHorizontalSashTop:()=>this._size.height},{orientation:1,orthogonalEdge:Se.l.South}),this._northSash.orthogonalStartSash=this._westSash,this._northSash.orthogonalEndSash=this._eastSash,this._southSash.orthogonalStartSash=this._westSash,this._southSash.orthogonalEndSash=this._eastSash;let t=0,i=0;this._sashListener.add(l.ju.any(this._northSash.onDidStart,this._eastSash.onDidStart,this._southSash.onDidStart,this._westSash.onDidStart)((()=>{void 0===e&&(this._onDidWillResize.fire(),e=this._size,t=0,i=0)}))),this._sashListener.add(l.ju.any(this._northSash.onDidEnd,this._eastSash.onDidEnd,this._southSash.onDidEnd,this._westSash.onDidEnd)((()=>{void 0!==e&&(e=void 0,t=0,i=0,this._onDidResize.fire({dimension:this._size,done:!0}))}))),this._sashListener.add(this._eastSash.onDidChange((n=>{e&&(i=n.currentX-n.startX,this.layout(e.height+t,e.width+i),this._onDidResize.fire({dimension:this._size,done:!1,east:!0}))}))),this._sashListener.add(this._westSash.onDidChange((n=>{e&&(i=-(n.currentX-n.startX),this.layout(e.height+t,e.width+i),this._onDidResize.fire({dimension:this._size,done:!1,west:!0}))}))),this._sashListener.add(this._northSash.onDidChange((n=>{e&&(t=-(n.currentY-n.startY),this.layout(e.height+t,e.width+i),this._onDidResize.fire({dimension:this._size,done:!1,north:!0}))}))),this._sashListener.add(this._southSash.onDidChange((n=>{e&&(t=n.currentY-n.startY,this.layout(e.height+t,e.width+i),this._onDidResize.fire({dimension:this._size,done:!1,south:!0}))}))),this._sashListener.add(l.ju.any(this._eastSash.onDidReset,this._westSash.onDidReset)((e=>{this._preferredSize&&(this.layout(this._size.height,this._preferredSize.width),this._onDidResize.fire({dimension:this._size,done:!0}))}))),this._sashListener.add(l.ju.any(this._northSash.onDidReset,this._southSash.onDidReset)((e=>{this._preferredSize&&(this.layout(this._preferredSize.height,this._size.width),this._onDidResize.fire({dimension:this._size,done:!0}))})))}dispose(){this._northSash.dispose(),this._southSash.dispose(),this._eastSash.dispose(),this._westSash.dispose(),this._sashListener.dispose(),this._onDidResize.dispose(),this._onDidWillResize.dispose(),this.domNode.remove()}enableSashes(e,t,i,n){this._northSash.state=e?3:0,this._eastSash.state=t?3:0,this._southSash.state=i?3:0,this._westSash.state=n?3:0}layout(e=this.size.height,t=this.size.width){const{height:i,width:n}=this._minSize,{height:o,width:s}=this._maxSize;e=Math.max(i,Math.min(o,e)),t=Math.max(n,Math.min(s,t));const r=new he.Ro(t,e);he.Ro.equals(r,this._size)||(this.domNode.style.height=e+"px",this.domNode.style.width=t+"px",this._size=r,this._northSash.layout(),this._eastSash.layout(),this._southSash.layout(),this._westSash.layout())}clearSashHoverState(){this._eastSash.clearSashHoverState(),this._westSash.clearSashHoverState(),this._northSash.clearSashHoverState(),this._southSash.clearSashHoverState()}get size(){return this._size}set maxSize(e){this._maxSize=e}get maxSize(){return this._maxSize}set minSize(e){this._minSize=e}get minSize(){return this._minSize}set preferredSize(e){this._preferredSize=e}get preferredSize(){return this._preferredSize}}var Le=i(16268),Ne=i(9802),De=i(73046),Ie=i(59365),Ee=i(43256),Te=i(64141),Me=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Ae=function(e,t){return function(i,n){t(i,n,e)}};function Oe(e){return!!e&&Boolean(e.completion.documentation||e.completion.detail&&e.completion.detail!==e.completion.label)}let Pe=class{constructor(e,t){this._editor=e,this._onDidClose=new l.Q5,this.onDidClose=this._onDidClose.event,this._onDidChangeContents=new l.Q5,this.onDidChangeContents=this._onDidChangeContents.event,this._disposables=new d.SL,this._renderDisposeable=new d.SL,this._borderWidth=1,this._size=new he.Ro(330,0),this.domNode=he.$(".suggest-details"),this.domNode.classList.add("no-docs"),this._markdownRenderer=t.createInstance(Ee.$,{editor:e}),this._body=he.$(".body"),this._scrollbar=new Ne.s$(this._body,{}),he.R3(this.domNode,this._scrollbar.getDomNode()),this._disposables.add(this._scrollbar),this._header=he.R3(this._body,he.$(".header")),this._close=he.R3(this._header,he.$("span"+De.lA.close.cssSelector)),this._close.title=B.N("details.close","Close"),this._type=he.R3(this._header,he.$("p.type")),this._docs=he.R3(this._body,he.$("p.docs")),this._configureFont(),this._disposables.add(this._editor.onDidChangeConfiguration((e=>{e.hasChanged(43)&&this._configureFont()})))}dispose(){this._disposables.dispose(),this._renderDisposeable.dispose()}_configureFont(){const e=this._editor.getOptions(),t=e.get(43),i=t.getMassagedFontFamily(Le.G6?Te.hL.fontFamily:null),n=e.get(106)||t.fontSize,o=e.get(107)||t.lineHeight,s=t.fontWeight,r=`${n}px`,a=`${o}px`;this.domNode.style.fontSize=r,this.domNode.style.lineHeight=""+o/n,this.domNode.style.fontWeight=s,this.domNode.style.fontFeatureSettings=t.fontFeatureSettings,this._type.style.fontFamily=i,this._close.style.height=a,this._close.style.width=a}getLayoutInfo(){const e=this._editor.getOption(107)||this._editor.getOption(43).lineHeight,t=this._borderWidth;return{lineHeight:e,borderWidth:t,borderHeight:2*t,verticalPadding:22,horizontalPadding:14}}renderLoading(){this._type.textContent=B.N("loading","æ­£åœ¨åŠ è½½..."),this._docs.textContent="",this.domNode.classList.remove("no-docs","no-type"),this.layout(this.size.width,2*this.getLayoutInfo().lineHeight),this._onDidChangeContents.fire(this)}renderItem(e,t){var i,n;this._renderDisposeable.clear();let{detail:o,documentation:s}=e.completion;if(t){let t="";t+=`score: ${e.score[0]}\n`,t+=`prefix: ${null!==(i=e.word)&&void 0!==i?i:"(no prefix)"}\n`,t+=`word: ${e.completion.filterText?e.completion.filterText+" (filterText)":e.textLabel}\n`,t+=`distance: ${e.distance} (localityBonus-setting)\n`,t+=`index: ${e.idx}, based on ${e.completion.sortText&&`sortText: "${e.completion.sortText}"`||"label"}\n`,t+=`commit_chars: ${null===(n=e.completion.commitCharacters)||void 0===n?void 0:n.join("")}\n`,s=(new Ie.W5).appendCodeblock("empty",t),o=`Provider: ${e.provider._debugDisplayName}`}if(t||Oe(e)){if(this.domNode.classList.remove("no-docs","no-type"),o){const e=o.length>1e5?`${o.substr(0,1e5)}â€¦`:o;this._type.textContent=e,this._type.title=e,he.$Z(this._type),this._type.classList.toggle("auto-wrap",!/\r?\n^\s+/gim.test(e))}else he.PO(this._type),this._type.title="",he.Cp(this._type),this.domNode.classList.add("no-type");if(he.PO(this._docs),"string"==typeof s)this._docs.classList.remove("markdown-docs"),this._docs.textContent=s;else if(s){this._docs.classList.add("markdown-docs"),he.PO(this._docs);const e=this._markdownRenderer.render(s);this._docs.appendChild(e.element),this._renderDisposeable.add(e),this._renderDisposeable.add(this._markdownRenderer.onDidRenderAsync((()=>{this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)})))}this.domNode.style.userSelect="text",this.domNode.tabIndex=-1,this._close.onmousedown=e=>{e.preventDefault(),e.stopPropagation()},this._close.onclick=e=>{e.preventDefault(),e.stopPropagation(),this._onDidClose.fire()},this._body.scrollTop=0,this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)}else this.clearContents()}clearContents(){this.domNode.classList.add("no-docs"),this._type.textContent="",this._docs.textContent=""}get size(){return this._size}layout(e,t){const i=new he.Ro(e,t);he.Ro.equals(i,this._size)||(this._size=i,he.dp(this.domNode,e,t)),this._scrollbar.scanDomNode()}scrollDown(e=8){this._body.scrollTop+=e}scrollUp(e=8){this._body.scrollTop-=e}scrollTop(){this._body.scrollTop=0}scrollBottom(){this._body.scrollTop=this._body.scrollHeight}pageDown(){this.scrollDown(80)}pageUp(){this.scrollUp(80)}set borderWidth(e){this._borderWidth=e}get borderWidth(){return this._borderWidth}};Pe=Me([Ae(1,L.TG)],Pe);class Re{constructor(e,t){let i,n;this.widget=e,this._editor=t,this._disposables=new d.SL,this._added=!1,this._resizable=new ke,this._resizable.domNode.classList.add("suggest-details-container"),this._resizable.domNode.appendChild(e.domNode),this._resizable.enableSashes(!1,!0,!0,!1);let o=0,s=0;this._disposables.add(this._resizable.onDidWillResize((()=>{i=this._topLeft,n=this._resizable.size}))),this._disposables.add(this._resizable.onDidResize((e=>{if(i&&n){this.widget.layout(e.dimension.width,e.dimension.height);let t=!1;e.west&&(s=n.width-e.dimension.width,t=!0),e.north&&(o=n.height-e.dimension.height,t=!0),t&&this._applyTopLeft({top:i.top+o,left:i.left+s})}e.done&&(i=void 0,n=void 0,o=0,s=0,this._userSize=e.dimension)}))),this._disposables.add(this.widget.onDidChangeContents((()=>{var e;this._anchorBox&&this._placeAtAnchor(this._anchorBox,null!==(e=this._userSize)&&void 0!==e?e:this.widget.size)})))}dispose(){this._resizable.dispose(),this._disposables.dispose(),this.hide()}getId(){return"suggest.details"}getDomNode(){return this._resizable.domNode}getPosition(){return null}show(){this._added||(this._editor.addOverlayWidget(this),this.getDomNode().style.position="fixed",this._added=!0)}hide(e=!1){this._resizable.clearSashHoverState(),this._added&&(this._editor.removeOverlayWidget(this),this._added=!1,this._anchorBox=void 0,this._topLeft=void 0),e&&(this._userSize=void 0,this.widget.clearContents())}placeAtAnchor(e){var t;const i=he.i(e);this._anchorBox=i,this._placeAtAnchor(this._anchorBox,null!==(t=this._userSize)&&void 0!==t?t:this.widget.size)}_placeAtAnchor(e,t){var i;const n=he.D6(document.body),o=this.widget.getLayoutInfo(),s=new he.Ro(220,2*o.lineHeight),r=e.top,a=function(){const i=n.width-(e.left+e.width+o.borderWidth+o.horizontalPadding),a=-o.borderWidth+e.left+e.width,l=new he.Ro(i,n.height-e.top-o.borderHeight-o.verticalPadding),c=l.with(void 0,e.top+e.height-o.borderHeight-o.verticalPadding);return{top:r,left:a,fit:i-t.width,maxSizeTop:l,maxSizeBottom:c,minSize:s.with(Math.min(i,s.width))}}(),l=[a,function(){const i=e.left-o.borderWidth-o.horizontalPadding,a=Math.max(o.horizontalPadding,e.left-t.width-o.borderWidth),l=new he.Ro(i,n.height-e.top-o.borderHeight-o.verticalPadding),c=l.with(void 0,e.top+e.height-o.borderHeight-o.verticalPadding);return{top:r,left:a,fit:i-t.width,maxSizeTop:l,maxSizeBottom:c,minSize:s.with(Math.min(i,s.width))}}(),function(){const i=e.left,r=-o.borderWidth+e.top+e.height,a=new he.Ro(e.width-o.borderHeight,n.height-e.top-e.height-o.verticalPadding);return{top:r,left:i,fit:a.height-t.height,maxSizeBottom:a,maxSizeTop:a,minSize:s.with(a.width)}}()],c=null!==(i=l.find((e=>e.fit>=0)))&&void 0!==i?i:l.sort(((e,t)=>t.fit-e.fit))[0],d=e.top+e.height-o.borderHeight;let h,u=t.height;const g=Math.max(c.maxSizeTop.height,c.maxSizeBottom.height);let p;u>g&&(u=g),u<=c.maxSizeTop.height?(h=!0,p=c.maxSizeTop):(h=!1,p=c.maxSizeBottom),this._applyTopLeft({left:c.left,top:h?c.top:d-u}),this.getDomNode().style.position="fixed",this._resizable.enableSashes(!h,c===a,h,c!==a),this._resizable.minSize=c.minSize,this._resizable.maxSize=p,this._resizable.layout(u,Math.min(p.width,t.width)),this.widget.layout(this._resizable.size.width,this._resizable.size.height)}_applyTopLeft(e){this._topLeft=e,this.getDomNode().style.left=`${this._topLeft.left}px`,this.getDomNode().style.top=`${this._topLeft.top}px`}}var Fe,Be=i(48801),Ve=i(70666),We=i(66663),He=i(95935),ze=i(71144);function je(e,t,i,n){const o=n===Fe.ROOT_FOLDER?["rootfolder-icon"]:n===Fe.FOLDER?["folder-icon"]:["file-icon"];if(i){let s;if(i.scheme===We.lg.data){s=He.Vb.parseMetaData(i).get(He.Vb.META_DATA_LABEL)}else s=Ue((0,He.Hx)(i).toLowerCase());if(n===Fe.FOLDER)o.push(`${s}-name-folder-icon`);else{if(s){if(o.push(`${s}-name-file-icon`),s.length<=255){const e=s.split(".");for(let t=1;t<e.length;t++)o.push(`${e.slice(t).join(".")}-ext-file-icon`)}o.push("ext-file-icon")}const n=function(e,t,i){if(!i)return null;let n=null;if(i.scheme===We.lg.data){const e=He.Vb.parseMetaData(i).get(He.Vb.META_DATA_MIME);e&&(n=t.getModeId(e))}else{const t=e.getModel(i);t&&(n=t.getLanguageId())}if(n&&n!==ze.XT)return n;return t.getModeIdByFilepathOrFirstLine(i)}(e,t,i);n&&o.push(`${Ue(n)}-lang-file-icon`)}}return o}function Ue(e){return e.replace(/[\11\12\14\15\40]/g,"/")}!function(e){e[e.FILE=0]="FILE",e[e.FOLDER=1]="FOLDER",e[e.ROOT_FOLDER=2]="ROOT_FOLDER"}(Fe||(Fe={}));var $e,Ke=i(51200),qe=i(71531),Ze=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Ge=function(e,t){return function(i,n){t(i,n,e)}};function Ye(e){return`suggest-aria-id:${e}`}const Qe=(0,i(59554).q5)("suggest-more-info",De.lA.chevronRight,B.N("suggestMoreInfoIcon","Icon for more information in the suggest widget.")),Xe=new(($e=class e{extract(t,i){if(t.textLabel.match(e._regexStrict))return i[0]=t.textLabel,!0;if(t.completion.detail&&t.completion.detail.match(e._regexStrict))return i[0]=t.completion.detail,!0;if("string"==typeof t.completion.documentation){const n=e._regexRelaxed.exec(t.completion.documentation);if(n&&(0===n.index||n.index+n[0].length===t.completion.documentation.length))return i[0]=n[0],!0}return!1}})._regexRelaxed=/(#([\da-fA-F]{3}){1,2}|(rgb|hsl)a\(\s*(\d{1,3}%?\s*,\s*){3}(1|0?\.\d+)\)|(rgb|hsl)\(\s*\d{1,3}%?(\s*,\s*\d{1,3}%?){2}\s*\))/,$e._regexStrict=new RegExp(`^${$e._regexRelaxed.source}$`,"i"),$e);let Je=class{constructor(e,t,i,n){this._editor=e,this._modelService=t,this._modeService=i,this._themeService=n,this._onDidToggleDetails=new l.Q5,this.onDidToggleDetails=this._onDidToggleDetails.event,this.templateId="suggestion"}dispose(){this._onDidToggleDetails.dispose()}renderTemplate(e){const t=Object.create(null);t.disposables=new d.SL,t.root=e,t.root.classList.add("show-file-icons"),t.icon=(0,he.R3)(e,(0,he.$)(".icon")),t.colorspan=(0,he.R3)(t.icon,(0,he.$)("span.colorspan"));const i=(0,he.R3)(e,(0,he.$)(".contents")),n=(0,he.R3)(i,(0,he.$)(".main"));t.iconContainer=(0,he.R3)(n,(0,he.$)(".icon-label.codicon")),t.left=(0,he.R3)(n,(0,he.$)("span.left")),t.right=(0,he.R3)(n,(0,he.$)("span.right")),t.iconLabel=new Be.g(t.left,{supportHighlights:!0,supportIcons:!0}),t.disposables.add(t.iconLabel),t.parametersLabel=(0,he.R3)(t.left,(0,he.$)("span.signature-label")),t.qualifierLabel=(0,he.R3)(t.left,(0,he.$)("span.qualifier-label")),t.detailsLabel=(0,he.R3)(t.right,(0,he.$)("span.details-label")),t.readMore=(0,he.R3)(t.right,(0,he.$)("span.readMore"+xe.kS.asCSSSelector(Qe))),t.readMore.title=B.N("readMore","Read More");const o=()=>{const e=this._editor.getOptions(),i=e.get(43),o=i.getMassagedFontFamily(Le.G6?Te.hL.fontFamily:null),s=i.fontFeatureSettings,r=e.get(106)||i.fontSize,a=e.get(107)||i.lineHeight,l=i.fontWeight,c=`${r}px`,d=`${a}px`;t.root.style.fontSize=c,t.root.style.fontWeight=l,n.style.fontFamily=o,n.style.fontFeatureSettings=s,n.style.lineHeight=d,t.icon.style.height=d,t.icon.style.width=d,t.readMore.style.height=d,t.readMore.style.width=d};return o(),t.disposables.add(this._editor.onDidChangeConfiguration((e=>{(e.hasChanged(43)||e.hasChanged(106)||e.hasChanged(107))&&o()}))),t}renderElement(e,t,i){const{completion:n}=e;i.root.id=Ye(t),i.colorspan.style.backgroundColor="";const s={labelEscapeNewLines:!0,matches:(0,ne.mB)(e.score)};let r=[];if(19===n.kind&&Xe.extract(e,r))i.icon.className="icon customcolor",i.iconContainer.className="icon hide",i.colorspan.style.backgroundColor=r[0];else if(20===n.kind&&this._themeService.getFileIconTheme().hasFileIcons){i.icon.className="icon hide",i.iconContainer.className="icon hide";const t=je(this._modelService,this._modeService,Ve.o.from({scheme:"fake",path:e.textLabel}),Fe.FILE),o=je(this._modelService,this._modeService,Ve.o.from({scheme:"fake",path:n.detail}),Fe.FILE);s.extraClasses=t.length>o.length?t:o}else 23===n.kind&&this._themeService.getFileIconTheme().hasFolderIcons?(i.icon.className="icon hide",i.iconContainer.className="icon hide",s.extraClasses=(0,o.xH)([je(this._modelService,this._modeService,Ve.o.from({scheme:"fake",path:e.textLabel}),Fe.FOLDER),je(this._modelService,this._modeService,Ve.o.from({scheme:"fake",path:n.detail}),Fe.FOLDER)])):(i.icon.className="icon hide",i.iconContainer.className="",i.iconContainer.classList.add("suggest-icon",...(0,x.Sy)(n.kind).split(" ")));n.tags&&n.tags.indexOf(1)>=0&&(s.extraClasses=(s.extraClasses||[]).concat(["deprecated"]),s.matches=[]),i.iconLabel.setLabel(e.textLabel,void 0,s),"string"==typeof n.label?(i.parametersLabel.textContent="",i.detailsLabel.textContent=et(n.detail||""),i.root.classList.add("string-label")):(i.parametersLabel.textContent=et(n.label.detail||""),i.detailsLabel.textContent=et(n.label.description||""),i.root.classList.remove("string-label")),this._editor.getOption(105).showInlineDetails?(0,he.$Z)(i.detailsLabel):(0,he.Cp)(i.detailsLabel),Oe(e)?(i.right.classList.add("can-expand-details"),(0,he.$Z)(i.readMore),i.readMore.onmousedown=e=>{e.stopPropagation(),e.preventDefault()},i.readMore.onclick=e=>{e.stopPropagation(),e.preventDefault(),this._onDidToggleDetails.fire()}):(i.right.classList.remove("can-expand-details"),(0,he.Cp)(i.readMore),i.readMore.onmousedown=null,i.readMore.onclick=null)}disposeTemplate(e){e.disposables.dispose()}};function et(e){return e.replace(/\r\n|\r|\n/g,"")}Je=Ze([Ge(1,Ke.q),Ge(2,qe.h),Ge(3,xe.XE)],Je);var tt=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},it=function(e,t){return function(i,n){t(i,n,e)}},nt=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const ot=(0,ye.P6)("editorSuggestWidget.background",{dark:ye.D0,light:ye.D0,hc:ye.D0},B.N("editorSuggestWidgetBackground","Background color of the suggest widget.")),st=(0,ye.P6)("editorSuggestWidget.border",{dark:ye.D1,light:ye.D1,hc:ye.D1},B.N("editorSuggestWidgetBorder","Border color of the suggest widget.")),rt=(0,ye.P6)("editorSuggestWidget.foreground",{dark:ye.NO,light:ye.NO,hc:ye.NO},B.N("editorSuggestWidgetForeground","Foreground color of the suggest widget.")),at=(0,ye.P6)("editorSuggestWidget.selectedForeground",{dark:ye.NP,light:ye.NP,hc:ye.NP},B.N("editorSuggestWidgetSelectedForeground","Foreground color of the selected entry in the suggest widget.")),lt=(0,ye.P6)("editorSuggestWidget.selectedIconForeground",{dark:ye.cb,light:ye.cb,hc:ye.cb},B.N("editorSuggestWidgetSelectedIconForeground","Icon foreground color of the selected entry in the suggest widget.")),ct=(0,ye.P6)("editorSuggestWidget.selectedBackground",{dark:ye.Vq,light:ye.Vq,hc:ye.Vq},B.N("editorSuggestWidgetSelectedBackground","Background color of the selected entry in the suggest widget.")),dt=(0,ye.P6)("editorSuggestWidget.highlightForeground",{dark:ye.Gw,light:ye.Gw,hc:ye.Gw},B.N("editorSuggestWidgetHighlightForeground","Color of the match highlights in the suggest widget.")),ht=(0,ye.P6)("editorSuggestWidget.focusHighlightForeground",{dark:ye.PX,light:ye.PX,hc:ye.PX},B.N("editorSuggestWidgetFocusHighlightForeground","Color of the match highlights in the suggest widget when an item is focused."));class ut{constructor(e,t){this._service=e,this._key=`suggestWidget.size/${t.getEditorType()}/${t instanceof pe.H}`}restore(){var e;const t=null!==(e=this._service.get(this._key,0))&&void 0!==e?e:"";try{const e=JSON.parse(t);if(he.Ro.is(e))return he.Ro.lift(e)}catch(e){}}store(e){this._service.store(this._key,JSON.stringify(e),0,1)}reset(){this._service.remove(this._key,0)}}let gt=class e{constructor(e,t,i,n,o){this.editor=e,this._storageService=t,this._state=0,this._isAuto=!1,this._ignoreFocusEvents=!1,this._forceRenderingAbove=!1,this._explainMode=!1,this._showTimeout=new s._F,this._disposables=new d.SL,this._onDidSelect=new l.Q5,this._onDidFocus=new l.Q5,this._onDidHide=new l.Q5,this._onDidShow=new l.Q5,this.onDidSelect=this._onDidSelect.event,this.onDidFocus=this._onDidFocus.event,this.onDidHide=this._onDidHide.event,this.onDidShow=this._onDidShow.event,this._onDetailsKeydown=new l.Q5,this.onDetailsKeyDown=this._onDetailsKeydown.event,this.element=new ke,this.element.domNode.classList.add("editor-widget","suggest-widget"),this._contentWidget=new pt(this,e),this._persistedSize=new ut(t,e);class r{constructor(e,t,i=!1,n=!1){this.persistedSize=e,this.currentSize=t,this.persistHeight=i,this.persistWidth=n}}let a;this._disposables.add(this.element.onDidWillResize((()=>{this._contentWidget.lockPreference(),a=new r(this._persistedSize.restore(),this.element.size)}))),this._disposables.add(this.element.onDidResize((e=>{var t,i,n,o;if(this._resize(e.dimension.width,e.dimension.height),a&&(a.persistHeight=a.persistHeight||!!e.north||!!e.south,a.persistWidth=a.persistWidth||!!e.east||!!e.west),e.done){if(a){const{itemHeight:e,defaultSize:s}=this.getLayoutInfo(),r=Math.round(e/2);let{width:l,height:c}=this.element.size;(!a.persistHeight||Math.abs(a.currentSize.height-c)<=r)&&(c=null!==(i=null===(t=a.persistedSize)||void 0===t?void 0:t.height)&&void 0!==i?i:s.height),(!a.persistWidth||Math.abs(a.currentSize.width-l)<=r)&&(l=null!==(o=null===(n=a.persistedSize)||void 0===n?void 0:n.width)&&void 0!==o?o:s.width),this._persistedSize.store(new he.Ro(l,c))}this._contentWidget.unlockPreference(),a=void 0}}))),this._messageElement=he.R3(this.element.domNode,he.$(".message")),this._listElement=he.R3(this.element.domNode,he.$(".tree"));const c=o.createInstance(Pe,this.editor);c.onDidClose(this.toggleDetails,this,this._disposables),this._details=new Re(c,this.editor);const h=()=>this.element.domNode.classList.toggle("no-icons",!this.editor.getOption(105).showIcons);h();const u=o.createInstance(Je,this.editor);this._disposables.add(u),this._disposables.add(u.onDidToggleDetails((()=>this.toggleDetails()))),this._list=new ue.aV("SuggestWidget",this._listElement,{getHeight:e=>this.getLayoutInfo().itemHeight,getTemplateId:e=>"suggestion"},[u],{alwaysConsumeMouseWheel:!0,useShadows:!1,mouseSupport:!1,accessibilityProvider:{getRole:()=>"option",getAriaLabel:e=>{if(e.isResolved&&this._isDetailsVisible()){const{documentation:t,detail:i}=e.completion,n=G.WU("{0}{1}",i||"",t?"string"==typeof t?t:t.value:"");return B.N("ariaCurrenttSuggestionReadDetails","{0}, docs: {1}",e.textLabel,n)}return e.textLabel},getWidgetAriaLabel:()=>B.N("suggest","Suggest"),getWidgetRole:()=>"listbox"}}),this._status=o.createInstance(we,this.element.domNode);const g=()=>this.element.domNode.classList.toggle("with-status-bar",this.editor.getOption(105).showStatusBar);g(),this._disposables.add((0,Ce.Jl)(this._list,n,{listInactiveFocusBackground:ct,listInactiveFocusOutline:ye.xL})),this._disposables.add(n.onDidColorThemeChange((e=>this._onThemeChange(e)))),this._onThemeChange(n.getColorTheme()),this._disposables.add(this._list.onMouseDown((e=>this._onListMouseDownOrTap(e)))),this._disposables.add(this._list.onTap((e=>this._onListMouseDownOrTap(e)))),this._disposables.add(this._list.onDidChangeSelection((e=>this._onListSelection(e)))),this._disposables.add(this._list.onDidChangeFocus((e=>this._onListFocus(e)))),this._disposables.add(this.editor.onDidChangeCursorSelection((()=>this._onCursorSelectionChanged()))),this._disposables.add(this.editor.onDidChangeConfiguration((e=>{e.hasChanged(105)&&(g(),h())}))),this._ctxSuggestWidgetVisible=j._y.Visible.bindTo(i),this._ctxSuggestWidgetDetailsVisible=j._y.DetailsVisible.bindTo(i),this._ctxSuggestWidgetMultipleSuggestions=j._y.MultipleSuggestions.bindTo(i),this._disposables.add(he.mu(this._details.widget.domNode,"keydown",(e=>{this._onDetailsKeydown.fire(e)}))),this._disposables.add(this.editor.onMouseDown((e=>this._onEditorMouseDown(e))))}dispose(){var e;this._details.widget.dispose(),this._details.dispose(),this._list.dispose(),this._status.dispose(),this._disposables.dispose(),null===(e=this._loadingTimeout)||void 0===e||e.dispose(),this._showTimeout.dispose(),this._contentWidget.dispose(),this.element.dispose()}_onEditorMouseDown(e){this._details.widget.domNode.contains(e.target.element)?this._details.widget.domNode.focus():this.element.domNode.contains(e.target.element)&&this.editor.focus()}_onCursorSelectionChanged(){0!==this._state&&this._contentWidget.layout()}_onListMouseDownOrTap(e){void 0!==e.element&&void 0!==e.index&&(e.browserEvent.preventDefault(),e.browserEvent.stopPropagation(),this._select(e.element,e.index))}_onListSelection(e){e.elements.length&&this._select(e.elements[0],e.indexes[0])}_select(e,t){const i=this._completionModel;i&&(this._onDidSelect.fire({item:e,index:t,model:i}),this.editor.focus())}_onThemeChange(e){const t=e.getColor(ot);t&&(this.element.domNode.style.backgroundColor=t.toString(),this._messageElement.style.backgroundColor=t.toString(),this._details.widget.domNode.style.backgroundColor=t.toString());const i=e.getColor(st);i&&(this.element.domNode.style.borderColor=i.toString(),this._messageElement.style.borderColor=i.toString(),this._status.element.style.borderTopColor=i.toString(),this._details.widget.domNode.style.borderColor=i.toString(),this._detailsBorderColor=i.toString());const n=e.getColor(ye.R8);n&&(this._detailsFocusBorderColor=n.toString()),this._details.widget.borderWidth="hc"===e.type?2:1}_onListFocus(e){var t;if(this._ignoreFocusEvents)return;if(!e.elements.length)return this._currentSuggestionDetails&&(this._currentSuggestionDetails.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem=void 0),void this.editor.setAriaOptions({activeDescendant:void 0});if(!this._completionModel)return;const i=e.elements[0],n=e.indexes[0];i!==this._focusedItem&&(null===(t=this._currentSuggestionDetails)||void 0===t||t.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem=i,this._list.reveal(n),this._currentSuggestionDetails=(0,s.PG)((e=>nt(this,void 0,void 0,(function*(){const t=(0,s.Vg)((()=>{this._isDetailsVisible()&&this.showDetails(!0)}),250);e.onCancellationRequested((()=>t.dispose()));const n=yield i.resolve(e);return t.dispose(),n})))),this._currentSuggestionDetails.then((()=>{n>=this._list.length||i!==this._list.element(n)||(this._ignoreFocusEvents=!0,this._list.splice(n,1,[i]),this._list.setFocus([n]),this._ignoreFocusEvents=!1,this._isDetailsVisible()?this.showDetails(!1):this.element.domNode.classList.remove("docs-side"),this.editor.setAriaOptions({activeDescendant:Ye(n)}))})).catch(a.dL)),this._onDidFocus.fire({item:i,index:n,model:this._completionModel})}_setState(t){if(this._state!==t)switch(this._state=t,this.element.domNode.classList.toggle("frozen",4===t),this.element.domNode.classList.remove("message"),t){case 0:he.Cp(this._messageElement,this._listElement,this._status.element),this._details.hide(!0),this._status.hide(),this._contentWidget.hide(),this._ctxSuggestWidgetVisible.reset(),this._ctxSuggestWidgetMultipleSuggestions.reset(),this._showTimeout.cancel(),this.element.domNode.classList.remove("visible"),this._list.splice(0,this._list.length),this._focusedItem=void 0,this._cappedHeight=void 0,this._explainMode=!1;break;case 1:this.element.domNode.classList.add("message"),this._messageElement.textContent=e.LOADING_MESSAGE,he.Cp(this._listElement,this._status.element),he.$Z(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0;break;case 2:this.element.domNode.classList.add("message"),this._messageElement.textContent=e.NO_SUGGESTIONS_MESSAGE,he.Cp(this._listElement,this._status.element),he.$Z(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0;break;case 3:case 4:he.Cp(this._messageElement),he.$Z(this._listElement,this._status.element),this._show();break;case 5:he.Cp(this._messageElement),he.$Z(this._listElement,this._status.element),this._details.show(),this._show()}}_show(){this._status.show(),this._contentWidget.show(),this._layout(this._persistedSize.restore()),this._ctxSuggestWidgetVisible.set(!0),this._showTimeout.cancelAndSet((()=>{this.element.domNode.classList.add("visible"),this._onDidShow.fire(this)}),100)}showTriggered(e,t){0===this._state&&(this._contentWidget.setPosition(this.editor.getPosition()),this._isAuto=!!e,this._isAuto||(this._loadingTimeout=(0,s.Vg)((()=>this._setState(1)),t)))}showSuggestions(e,t,i,n){var o,s;if(this._contentWidget.setPosition(this.editor.getPosition()),null===(o=this._loadingTimeout)||void 0===o||o.dispose(),null===(s=this._currentSuggestionDetails)||void 0===s||s.cancel(),this._currentSuggestionDetails=void 0,this._completionModel!==e&&(this._completionModel=e),i&&2!==this._state&&0!==this._state)return void this._setState(4);const r=this._completionModel.items.length,a=0===r;if(this._ctxSuggestWidgetMultipleSuggestions.set(r>1),a)return this._setState(n?0:2),void(this._completionModel=void 0);this._focusedItem=void 0,this._list.splice(0,this._list.length,this._completionModel.items),this._setState(i?4:3),this._list.reveal(t,0),this._list.setFocus([t]),this._layout(this.element.size),this._detailsBorderColor&&(this._details.widget.domNode.style.borderColor=this._detailsBorderColor)}selectNextPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageDown(),!0;case 1:return!this._isAuto;default:return this._list.focusNextPage(),!0}}selectNext(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusNext(1,!0),!0}}selectLast(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollBottom(),!0;case 1:return!this._isAuto;default:return this._list.focusLast(),!0}}selectPreviousPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageUp(),!0;case 1:return!this._isAuto;default:return this._list.focusPreviousPage(),!0}}selectPrevious(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusPrevious(1,!0),!1}}selectFirst(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollTop(),!0;case 1:return!this._isAuto;default:return this._list.focusFirst(),!0}}getFocusedItem(){if(0!==this._state&&2!==this._state&&1!==this._state&&this._completionModel)return{item:this._list.getFocusedElements()[0],index:this._list.getFocus()[0],model:this._completionModel}}toggleDetailsFocus(){5===this._state?(this._setState(3),this._detailsBorderColor&&(this._details.widget.domNode.style.borderColor=this._detailsBorderColor)):3===this._state&&this._isDetailsVisible()&&(this._setState(5),this._detailsFocusBorderColor&&(this._details.widget.domNode.style.borderColor=this._detailsFocusBorderColor))}toggleDetails(){this._isDetailsVisible()?(this._ctxSuggestWidgetDetailsVisible.set(!1),this._setDetailsVisible(!1),this._details.hide(),this.element.domNode.classList.remove("shows-details")):!Oe(this._list.getFocusedElements()[0])&&!this._explainMode||3!==this._state&&5!==this._state&&4!==this._state||(this._ctxSuggestWidgetDetailsVisible.set(!0),this._setDetailsVisible(!0),this.showDetails(!1))}showDetails(e){this._details.show(),e?this._details.widget.renderLoading():this._details.widget.renderItem(this._list.getFocusedElements()[0],this._explainMode),this._positionDetails(),this.editor.focus(),this.element.domNode.classList.add("shows-details")}toggleExplainMode(){this._list.getFocusedElements()[0]&&(this._explainMode=!this._explainMode,this._isDetailsVisible()?this.showDetails(!1):this.toggleDetails())}resetPersistedSize(){this._persistedSize.reset()}hideWidget(){var e;null===(e=this._loadingTimeout)||void 0===e||e.dispose(),this._setState(0),this._onDidHide.fire(this),this.element.clearSashHoverState();const t=this._persistedSize.restore(),i=Math.ceil(4.3*this.getLayoutInfo().itemHeight);t&&t.height<i&&this._persistedSize.store(t.with(void 0,i))}isFrozen(){return 4===this._state}_afterRender(e){null!==e?2!==this._state&&1!==this._state&&(this._isDetailsVisible()&&this._details.show(),this._positionDetails()):this._isDetailsVisible()&&this._details.hide()}_layout(e){var t,i,n;if(!this.editor.hasModel())return;if(!this.editor.getDomNode())return;const o=he.D6(document.body),s=this.getLayoutInfo();e||(e=s.defaultSize);let r=e.height,a=e.width;if(this._status.element.style.lineHeight=`${s.itemHeight}px`,2===this._state||1===this._state)r=s.itemHeight+s.borderHeight,a=s.defaultSize.width/2,this.element.enableSashes(!1,!1,!1,!1),this.element.minSize=this.element.maxSize=new he.Ro(a,r),this._contentWidget.setPreference(2);else{const l=o.width-s.borderHeight-2*s.horizontalPadding;a>l&&(a=l);const c=this._completionModel?this._completionModel.stats.pLabelLen*s.typicalHalfwidthCharacterWidth:a,d=s.statusBarHeight+this._list.contentHeight+s.borderHeight,h=s.itemHeight+s.statusBarHeight,u=he.i(this.editor.getDomNode()),g=this.editor.getScrolledVisiblePosition(this.editor.getPosition()),p=u.top+g.top+g.height,f=Math.min(o.height-p-s.verticalPadding,d),m=u.top+g.top-s.verticalPadding,v=Math.min(m,d);let _=Math.min(Math.max(v,f)+s.borderHeight,d);r===(null===(t=this._cappedHeight)||void 0===t?void 0:t.capped)&&(r=this._cappedHeight.wanted),r<h&&(r=h),r>_&&(r=_);const b=150;r>f||this._forceRenderingAbove&&m>b?(this._contentWidget.setPreference(1),this.element.enableSashes(!0,!0,!1,!1),_=v):(this._contentWidget.setPreference(2),this.element.enableSashes(!1,!0,!0,!1),_=f),this.element.preferredSize=new he.Ro(c,s.defaultSize.height),this.element.maxSize=new he.Ro(l,_),this.element.minSize=new he.Ro(220,h),this._cappedHeight=r===d?{wanted:null!==(n=null===(i=this._cappedHeight)||void 0===i?void 0:i.wanted)&&void 0!==n?n:e.height,capped:r}:void 0}this._resize(a,r)}_resize(e,t){const{width:i,height:n}=this.element.maxSize;e=Math.min(i,e),t=Math.min(n,t);const{statusBarHeight:o}=this.getLayoutInfo();this._list.layout(t-o,e),this._listElement.style.height=t-o+"px",this.element.layout(t,e),this._contentWidget.layout(),this._positionDetails()}_positionDetails(){this._isDetailsVisible()&&this._details.placeAtAnchor(this.element.domNode)}getLayoutInfo(){const e=this.editor.getOption(43),t=(0,ge.u)(this.editor.getOption(107)||e.lineHeight,8,1e3),i=this.editor.getOption(105).showStatusBar&&2!==this._state&&1!==this._state?t:0,n=this._details.widget.borderWidth,o=2*n;return{itemHeight:t,statusBarHeight:i,borderWidth:n,borderHeight:o,typicalHalfwidthCharacterWidth:e.typicalHalfwidthCharacterWidth,verticalPadding:22,horizontalPadding:14,defaultSize:new he.Ro(430,i+12*t+o)}}_isDetailsVisible(){return this._storageService.getBoolean("expandSuggestionDocs",0,!1)}_setDetailsVisible(e){this._storageService.store("expandSuggestionDocs",e,0,0)}forceRenderingAbove(){this._forceRenderingAbove||(this._forceRenderingAbove=!0,this._layout(this._persistedSize.restore()))}stopForceRenderingAbove(){this._forceRenderingAbove=!1}};gt.LOADING_MESSAGE=B.N("suggestWidget.loading","æ­£åœ¨åŠ è½½..."),gt.NO_SUGGESTIONS_MESSAGE=B.N("suggestWidget.noSuggestions","No suggestions."),gt=tt([it(1,N.Uy),it(2,O.i6),it(3,xe.XE),it(4,L.TG)],gt);class pt{constructor(e,t){this._widget=e,this._editor=t,this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._preferenceLocked=!1,this._added=!1,this._hidden=!1}dispose(){this._added&&(this._added=!1,this._editor.removeContentWidget(this))}getId(){return"editor.widget.suggestWidget"}getDomNode(){return this._widget.element.domNode}show(){this._hidden=!1,this._added||(this._added=!0,this._editor.addContentWidget(this))}hide(){this._hidden||(this._hidden=!0,this.layout())}layout(){this._editor.layoutContentWidget(this)}getPosition(){return!this._hidden&&this._position&&this._preference?{position:this._position,preference:[this._preference]}:null}beforeRender(){const{height:e,width:t}=this._widget.element.size,{borderWidth:i,horizontalPadding:n}=this._widget.getLayoutInfo();return new he.Ro(t+2*i+n,e+2*i)}afterRender(e){this._widget._afterRender(e)}setPreference(e){this._preferenceLocked||(this._preference=e)}lockPreference(){this._preferenceLocked=!0}unlockPreference(){this._preferenceLocked=!1}setPosition(e){this._position=e}}(0,xe.Ic)(((e,t)=>{const i=e.getColor(dt);i&&t.addRule(`.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-highlighted-label .highlight { color: ${i}; }`);const n=e.getColor(ht);i&&t.addRule(`.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused .monaco-highlighted-label .highlight { color: ${n}; }`);const o=e.getColor(rt);o&&t.addRule(`.monaco-editor .suggest-widget, .monaco-editor .suggest-details { color: ${o}; }`);const s=e.getColor(at);s&&t.addRule(`.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused { color: ${s}; }`);const r=e.getColor(lt);r&&t.addRule(`.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused .codicon { color: ${r}; }`);const a=e.getColor(ye.ur);a&&t.addRule(`.monaco-editor .suggest-details a { color: ${a}; }`);const l=e.getColor(ye.sg);l&&t.addRule(`.monaco-editor .suggest-details a:hover { color: ${l}; }`);const c=e.getColor(ye.Sw);c&&t.addRule(`.monaco-editor .suggest-details code { background-color: ${c}; }`)}));var ft=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},mt=function(e,t){return function(i,n){t(i,n,e)}};class vt{constructor(e,t){this._model=e,this._position=t;if(e.getLineMaxColumn(t.lineNumber)!==t.column){const i=e.getOffsetAt(t),n=e.getPositionAt(i+1);this._marker=e.deltaDecorations([],[{range:_.e.fromPositions(t,n),options:{description:"suggest-line-suffix",stickiness:1}}])}}dispose(){this._marker&&!this._model.isDisposed()&&this._model.deltaDecorations(this._marker,[])}delta(e){if(this._model.isDisposed()||this._position.lineNumber!==e.lineNumber)return 0;if(this._marker){const t=this._model.getDecorationRange(this._marker[0]);return this._model.getOffsetAt(t.getStartPosition())-this._model.getOffsetAt(e)}return this._model.getLineMaxColumn(e.lineNumber)-e.column}}let _t=class e{constructor(e,t,i,n,o,r){this._memoryService=t,this._commandService=i,this._contextKeyService=n,this._instantiationService=o,this._logService=r,this._lineSuffix=new d.XK,this._toDispose=new d.SL,this._selectors=new bt((e=>e.priority)),this.editor=e,this.model=o.createInstance(ce,this.editor);const a=j._y.InsertMode.bindTo(n);a.set(e.getOption(105).insertMode),this.model.onDidTrigger((()=>a.set(e.getOption(105).insertMode))),this.widget=this._toDispose.add(new s.Ue((()=>{const e=this._instantiationService.createInstance(gt,this.editor);this._toDispose.add(e),this._toDispose.add(e.onDidSelect((e=>this._insertSuggestion(e,0)),this));const t=new Z(this.editor,e,(e=>this._insertSuggestion(e,2)));this._toDispose.add(t),this._toDispose.add(this.model.onDidSuggest((e=>{0===e.completionModel.items.length&&t.reset()})));const i=j._y.MakesTextEdit.bindTo(this._contextKeyService),n=j._y.HasInsertAndReplaceRange.bindTo(this._contextKeyService),o=j._y.CanResolve.bindTo(this._contextKeyService);return this._toDispose.add((0,d.OF)((()=>{i.reset(),n.reset(),o.reset()}))),this._toDispose.add(e.onDidFocus((({item:e})=>{const t=this.editor.getPosition(),s=e.editStart.column,r=t.column;let a=!0;if(!("smart"!==this.editor.getOption(1)||2!==this.model.state||e.completion.additionalTextEdits||4&e.completion.insertTextRules||r-s!==e.completion.insertText.length)){a=this.editor.getModel().getValueInRange({startLineNumber:t.lineNumber,startColumn:s,endLineNumber:t.lineNumber,endColumn:r})!==e.completion.insertText}i.set(a),n.set(!v.L.equals(e.editInsertEnd,e.editReplaceEnd)),o.set(Boolean(e.provider.resolveCompletionItem)||Boolean(e.completion.documentation)||e.completion.detail!==e.completion.label)}))),this._toDispose.add(e.onDetailsKeyDown((e=>{e.toKeybinding().equals(new c.QC(!0,!1,!1,!1,33))||h.dz&&e.toKeybinding().equals(new c.QC(!1,!1,!1,!0,33))?e.stopPropagation():e.toKeybinding().isModifierKey()||this.editor.focus()}))),e}))),this._overtypingCapturer=this._toDispose.add(new s.Ue((()=>this._toDispose.add(new de(this.editor,this.model))))),this._alternatives=this._toDispose.add(new s.Ue((()=>this._toDispose.add(new K(this.editor,this._contextKeyService))))),this._toDispose.add(o.createInstance(F,e)),this._toDispose.add(this.model.onDidTrigger((e=>{this.widget.value.showTriggered(e.auto,e.shy?250:50),this._lineSuffix.value=new vt(this.editor.getModel(),e.position)}))),this._toDispose.add(this.model.onDidSuggest((e=>{if(!e.shy){let t=-1;for(const i of this._selectors.itemsOrderedByPriorityDesc)if(t=i.select(this.editor.getModel(),this.editor.getPosition(),e.completionModel.items),-1!==t)break;-1===t&&(t=this._memoryService.select(this.editor.getModel(),this.editor.getPosition(),e.completionModel.items)),this.widget.value.showSuggestions(e.completionModel,t,e.isFrozen,e.auto)}}))),this._toDispose.add(this.model.onDidCancel((e=>{e.retrigger||this.widget.value.hideWidget()}))),this._toDispose.add(this.editor.onDidBlurEditorWidget((()=>{this.model.cancel(),this.model.clear()})));let l=j._y.AcceptSuggestionsOnEnter.bindTo(n),u=()=>{const e=this.editor.getOption(1);l.set("on"===e||"smart"===e)};this._toDispose.add(this.editor.onDidChangeConfiguration((()=>u()))),u()}static get(t){return t.getContribution(e.ID)}dispose(){this._alternatives.dispose(),this._toDispose.dispose(),this.widget.dispose(),this.model.dispose(),this._lineSuffix.dispose()}_insertSuggestion(e,t){if(!e||!e.item)return this._alternatives.value.reset(),this.model.cancel(),void this.model.clear();if(!this.editor.hasModel())return;const i=this.editor.getModel(),n=i.getAlternativeVersionId(),{item:o}=e,s=[],l=new r.A;1&t||this.editor.pushUndoStop();const c=this.getOverwriteInfo(o,Boolean(8&t));if(this._memoryService.memorize(i,this.editor.getPosition(),o),Array.isArray(o.completion.additionalTextEdits)){const e=p.ZF.capture(this.editor);this.editor.executeEdits("suggestController.additionalTextEdits.sync",o.completion.additionalTextEdits.map((e=>m.h.replace(_.e.lift(e.range),e.text)))),e.restoreRelativeVerticalPositionOfCursor(this.editor)}else if(!o.isResolved){const e=new u.G(!0);let n;const r=i.onDidChangeContent((e=>{if(e.isFlush)return l.cancel(),void r.dispose();for(let t of e.changes){const e=_.e.getEndPosition(t.range);n&&!v.L.isBefore(e,n)||(n=e)}}));let a=t;t|=2;let c=!1,d=this.editor.onWillType((()=>{d.dispose(),c=!0,2&a||this.editor.pushUndoStop()}));s.push(o.resolve(l.token).then((()=>{if(!o.completion.additionalTextEdits||l.token.isCancellationRequested)return!1;if(n&&o.completion.additionalTextEdits.some((e=>v.L.isBefore(n,_.e.getStartPosition(e.range)))))return!1;c&&this.editor.pushUndoStop();const e=p.ZF.capture(this.editor);return this.editor.executeEdits("suggestController.additionalTextEdits.async",o.completion.additionalTextEdits.map((e=>m.h.replace(_.e.lift(e.range),e.text)))),e.restoreRelativeVerticalPositionOfCursor(this.editor),!c&&2&a||this.editor.pushUndoStop(),!0})).then((t=>{this._logService.trace("[suggest] async resolving of edits DONE (ms, applied?)",e.elapsed(),t),r.dispose(),d.dispose()})))}let{insertText:d}=o.completion;4&o.completion.insertTextRules||(d=y.Yj.escape(d)),w.SnippetController2.get(this.editor).insert(d,{overwriteBefore:c.overwriteBefore,overwriteAfter:c.overwriteAfter,undoStopBefore:!1,undoStopAfter:!1,adjustWhitespace:!(1&o.completion.insertTextRules),clipboardText:e.model.clipboardText,overtypingCapturer:this._overtypingCapturer.value}),2&t||this.editor.pushUndoStop(),o.completion.command?o.completion.command.id===wt.id?this.model.trigger({auto:!0,shy:!1},!0):(s.push(this._commandService.executeCommand(o.completion.command.id,...o.completion.command.arguments?[...o.completion.command.arguments]:[]).catch(a.dL)),this.model.cancel()):this.model.cancel(),4&t&&this._alternatives.value.set(e,(e=>{for(l.cancel();i.canUndo();){n!==i.getAlternativeVersionId()&&i.undo(),this._insertSuggestion(e,3|(8&t?8:0));break}})),this._alertCompletionItem(o),Promise.all(s).finally((()=>{this.model.clear(),l.dispose()}))}getOverwriteInfo(e,t){(0,g.p_)(this.editor.hasModel());let i="replace"===this.editor.getOption(105).insertMode;t&&(i=!i);const n=e.position.column-e.editStart.column,o=(i?e.editReplaceEnd.column:e.editInsertEnd.column)-e.position.column;return{overwriteBefore:n+(this.editor.getPosition().column-e.position.column),overwriteAfter:o+(this._lineSuffix.value?this._lineSuffix.value.delta(this.editor.getPosition()):0)}}_alertCompletionItem(e){if((0,o.Of)(e.completion.additionalTextEdits)){let t=B.N("aria.alert.snippet","Accepting '{0}' made {1} additional edits",e.textLabel,e.completion.additionalTextEdits.length);(0,n.Z9)(t)}}triggerSuggest(e){this.editor.hasModel()&&(this.model.trigger({auto:!1,shy:!1},!1,e),this.editor.revealPosition(this.editor.getPosition(),0),this.editor.focus())}triggerSuggestAndAcceptBest(e){if(!this.editor.hasModel())return;const t=this.editor.getPosition(),i=()=>{t.equals(this.editor.getPosition())&&this._commandService.executeCommand(e.fallback)},n=e=>{if(4&e.completion.insertTextRules||e.completion.additionalTextEdits)return!0;const t=this.editor.getPosition(),i=e.editStart.column,n=t.column;if(n-i!==e.completion.insertText.length)return!0;return this.editor.getModel().getValueInRange({startLineNumber:t.lineNumber,startColumn:i,endLineNumber:t.lineNumber,endColumn:n})!==e.completion.insertText};l.ju.once(this.model.onDidTrigger)((e=>{let t=[];l.ju.any(this.model.onDidTrigger,this.model.onDidCancel)((()=>{(0,d.B9)(t),i()}),void 0,t),this.model.onDidSuggest((({completionModel:e})=>{if((0,d.B9)(t),0===e.items.length)return void i();const o=this._memoryService.select(this.editor.getModel(),this.editor.getPosition(),e.items),s=e.items[o];n(s)?(this.editor.pushUndoStop(),this._insertSuggestion({index:o,item:s,model:e},7)):i()}),void 0,t)})),this.model.trigger({auto:!1,shy:!0}),this.editor.revealPosition(t,0),this.editor.focus()}acceptSelectedSuggestion(e,t){const i=this.widget.value.getFocusedItem();let n=0;e&&(n|=4),t&&(n|=8),this._insertSuggestion(i,n)}acceptNextSuggestion(){this._alternatives.value.next()}acceptPrevSuggestion(){this._alternatives.value.prev()}cancelSuggestWidget(){this.model.cancel(),this.model.clear(),this.widget.value.hideWidget()}selectNextSuggestion(){this.widget.value.selectNext()}selectNextPageSuggestion(){this.widget.value.selectNextPage()}selectLastSuggestion(){this.widget.value.selectLast()}selectPrevSuggestion(){this.widget.value.selectPrevious()}selectPrevPageSuggestion(){this.widget.value.selectPreviousPage()}selectFirstSuggestion(){this.widget.value.selectFirst()}toggleSuggestionDetails(){this.widget.value.toggleDetails()}toggleExplainMode(){this.widget.value.toggleExplainMode()}toggleSuggestionFocus(){this.widget.value.toggleDetailsFocus()}resetWidgetSize(){this.widget.value.resetPersistedSize()}forceRenderingAbove(){this.widget.value.forceRenderingAbove()}stopForceRenderingAbove(){this.widget.isInitialized&&this.widget.value.stopForceRenderingAbove()}registerSelector(e){return this._selectors.register(e)}};_t.ID="editor.contrib.suggestController",_t=ft([mt(1,A),mt(2,W.H),mt(3,O.i6),mt(4,L.TG),mt(5,z.VZ)],_t);class bt{constructor(e){this.prioritySelector=e,this._items=new Array}register(e){if(-1!==this._items.indexOf(e))throw new Error("Value is already registered");return this._items.push(e),this._items.sort(((e,t)=>this.prioritySelector(t)-this.prioritySelector(e))),{dispose:()=>{const t=this._items.indexOf(e);t>=0&&this._items.splice(t,1)}}}get itemsOrderedByPriorityDesc(){return this._items}}class wt extends f.R6{constructor(){super({id:wt.id,label:B.N("suggest.trigger.label","Trigger Suggest"),alias:"Trigger Suggest",precondition:O.Ao.and(b.u.writable,b.u.hasCompletionItemProvider),kbOpts:{kbExpr:b.u.textInputFocus,primary:2058,secondary:[2087],mac:{primary:266,secondary:[521,2087]},weight:100}})}run(e,t){const i=_t.get(t);i&&i.triggerSuggest()}}wt.id="editor.action.triggerSuggest",(0,f._K)(_t.ID,_t),(0,f.Qr)(wt);const yt=190,Ct=f._l.bindToContribution(_t.get);(0,f.fK)(new Ct({id:"acceptSelectedSuggestion",precondition:j._y.Visible,handler(e){e.acceptSelectedSuggestion(!0,!1)}})),H.W.registerKeybindingRule({id:"acceptSelectedSuggestion",when:O.Ao.and(j._y.Visible,b.u.textInputFocus),primary:2,weight:yt}),H.W.registerKeybindingRule({id:"acceptSelectedSuggestion",when:O.Ao.and(j._y.Visible,b.u.textInputFocus,j._y.AcceptSuggestionsOnEnter,j._y.MakesTextEdit),primary:3,weight:yt}),V.BH.appendMenuItem(j.GI,{command:{id:"acceptSelectedSuggestion",title:B.N("accept.insert","Insert")},group:"left",order:1,when:j._y.HasInsertAndReplaceRange.toNegated()}),V.BH.appendMenuItem(j.GI,{command:{id:"acceptSelectedSuggestion",title:B.N("accept.insert","Insert")},group:"left",order:1,when:O.Ao.and(j._y.HasInsertAndReplaceRange,j._y.InsertMode.isEqualTo("insert"))}),V.BH.appendMenuItem(j.GI,{command:{id:"acceptSelectedSuggestion",title:B.N("accept.replace","æ›¿æ¢")},group:"left",order:1,when:O.Ao.and(j._y.HasInsertAndReplaceRange,j._y.InsertMode.isEqualTo("replace"))}),(0,f.fK)(new Ct({id:"acceptAlternativeSelectedSuggestion",precondition:O.Ao.and(j._y.Visible,b.u.textInputFocus),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:1027,secondary:[1026]},handler(e){e.acceptSelectedSuggestion(!1,!0)},menuOpts:[{menuId:j.GI,group:"left",order:2,when:O.Ao.and(j._y.HasInsertAndReplaceRange,j._y.InsertMode.isEqualTo("insert")),title:B.N("accept.replace","æ›¿æ¢")},{menuId:j.GI,group:"left",order:2,when:O.Ao.and(j._y.HasInsertAndReplaceRange,j._y.InsertMode.isEqualTo("replace")),title:B.N("accept.insert","Insert")}]})),W.P.registerCommandAlias("acceptSelectedSuggestionOnEnter","acceptSelectedSuggestion"),(0,f.fK)(new Ct({id:"hideSuggestWidget",precondition:j._y.Visible,handler:e=>e.cancelSuggestWidget(),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:9,secondary:[1033]}})),(0,f.fK)(new Ct({id:"selectNextSuggestion",precondition:O.Ao.and(j._y.Visible,j._y.MultipleSuggestions),handler:e=>e.selectNextSuggestion(),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:18,secondary:[2066],mac:{primary:18,secondary:[2066,300]}}})),(0,f.fK)(new Ct({id:"selectNextPageSuggestion",precondition:O.Ao.and(j._y.Visible,j._y.MultipleSuggestions),handler:e=>e.selectNextPageSuggestion(),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:12,secondary:[2060]}})),(0,f.fK)(new Ct({id:"selectLastSuggestion",precondition:O.Ao.and(j._y.Visible,j._y.MultipleSuggestions),handler:e=>e.selectLastSuggestion()})),(0,f.fK)(new Ct({id:"selectPrevSuggestion",precondition:O.Ao.and(j._y.Visible,j._y.MultipleSuggestions),handler:e=>e.selectPrevSuggestion(),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:16,secondary:[2064],mac:{primary:16,secondary:[2064,302]}}})),(0,f.fK)(new Ct({id:"selectPrevPageSuggestion",precondition:O.Ao.and(j._y.Visible,j._y.MultipleSuggestions),handler:e=>e.selectPrevPageSuggestion(),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:11,secondary:[2059]}})),(0,f.fK)(new Ct({id:"selectFirstSuggestion",precondition:O.Ao.and(j._y.Visible,j._y.MultipleSuggestions),handler:e=>e.selectFirstSuggestion()})),(0,f.fK)(new Ct({id:"toggleSuggestionDetails",precondition:j._y.Visible,handler:e=>e.toggleSuggestionDetails(),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:2058,secondary:[2087],mac:{primary:266,secondary:[2087]}},menuOpts:[{menuId:j.GI,group:"right",order:1,when:O.Ao.and(j._y.DetailsVisible,j._y.CanResolve),title:B.N("detail.more","show less")},{menuId:j.GI,group:"right",order:1,when:O.Ao.and(j._y.DetailsVisible.toNegated(),j._y.CanResolve),title:B.N("detail.less","show more")}]})),(0,f.fK)(new Ct({id:"toggleExplainMode",precondition:j._y.Visible,handler:e=>e.toggleExplainMode(),kbOpts:{weight:100,primary:2133}})),(0,f.fK)(new Ct({id:"toggleSuggestionFocus",precondition:j._y.Visible,handler:e=>e.toggleSuggestionFocus(),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:2570,mac:{primary:778}}})),(0,f.fK)(new Ct({id:"insertBestCompletion",precondition:O.Ao.and(b.u.textInputFocus,O.Ao.equals("config.editor.tabCompletion","on"),F.AtEnd,j._y.Visible.toNegated(),K.OtherSuggestions.toNegated(),w.SnippetController2.InSnippetMode.toNegated()),handler:(e,t)=>{e.triggerSuggestAndAcceptBest((0,g.Kn)(t)?Object.assign({fallback:"tab"},t):{fallback:"tab"})},kbOpts:{weight:yt,primary:2}})),(0,f.fK)(new Ct({id:"insertNextSuggestion",precondition:O.Ao.and(b.u.textInputFocus,O.Ao.equals("config.editor.tabCompletion","on"),K.OtherSuggestions,j._y.Visible.toNegated(),w.SnippetController2.InSnippetMode.toNegated()),handler:e=>e.acceptNextSuggestion(),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:2}})),(0,f.fK)(new Ct({id:"insertPrevSuggestion",precondition:O.Ao.and(b.u.textInputFocus,O.Ao.equals("config.editor.tabCompletion","on"),K.OtherSuggestions,j._y.Visible.toNegated(),w.SnippetController2.InSnippetMode.toNegated()),handler:e=>e.acceptPrevSuggestion(),kbOpts:{weight:yt,kbExpr:b.u.textInputFocus,primary:1026}})),(0,f.Qr)(class extends f.R6{constructor(){super({id:"editor.action.resetSuggestSize",label:B.N("suggest.reset.label","Reset Suggest Widget Size"),alias:"Reset Suggest Widget Size",precondition:void 0})}run(e,t){_t.get(t).resetWidgetSize()}})},24954:(e,t,i)=>{"use strict";var n=i(73046),o=i(63580),s=i(73910),r=i(97781);const a=(0,s.P6)("symbolIcon.arrayForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.arrayForeground","The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),l=(0,s.P6)("symbolIcon.booleanForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.booleanForeground","The foreground color for boolean symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),c=(0,s.P6)("symbolIcon.classForeground",{dark:"#EE9D28",light:"#D67E00",hc:"#EE9D28"},(0,o.N)("symbolIcon.classForeground","The foreground color for class symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),d=(0,s.P6)("symbolIcon.colorForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.colorForeground","The foreground color for color symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),h=(0,s.P6)("symbolIcon.constantForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.constantForeground","The foreground color for constant symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),u=(0,s.P6)("symbolIcon.constructorForeground",{dark:"#B180D7",light:"#652D90",hc:"#B180D7"},(0,o.N)("symbolIcon.constructorForeground","The foreground color for constructor symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),g=(0,s.P6)("symbolIcon.enumeratorForeground",{dark:"#EE9D28",light:"#D67E00",hc:"#EE9D28"},(0,o.N)("symbolIcon.enumeratorForeground","The foreground color for enumerator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),p=(0,s.P6)("symbolIcon.enumeratorMemberForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},(0,o.N)("symbolIcon.enumeratorMemberForeground","The foreground color for enumerator member symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),f=(0,s.P6)("symbolIcon.eventForeground",{dark:"#EE9D28",light:"#D67E00",hc:"#EE9D28"},(0,o.N)("symbolIcon.eventForeground","The foreground color for event symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),m=(0,s.P6)("symbolIcon.fieldForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},(0,o.N)("symbolIcon.fieldForeground","The foreground color for field symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),v=(0,s.P6)("symbolIcon.fileForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.fileForeground","The foreground color for file symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),_=(0,s.P6)("symbolIcon.folderForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.folderForeground","The foreground color for folder symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),b=(0,s.P6)("symbolIcon.functionForeground",{dark:"#B180D7",light:"#652D90",hc:"#B180D7"},(0,o.N)("symbolIcon.functionForeground","The foreground color for function symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),w=(0,s.P6)("symbolIcon.interfaceForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},(0,o.N)("symbolIcon.interfaceForeground","The foreground color for interface symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),y=(0,s.P6)("symbolIcon.keyForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.keyForeground","The foreground color for key symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),C=(0,s.P6)("symbolIcon.keywordForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.keywordForeground","The foreground color for keyword symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),x=(0,s.P6)("symbolIcon.methodForeground",{dark:"#B180D7",light:"#652D90",hc:"#B180D7"},(0,o.N)("symbolIcon.methodForeground","The foreground color for method symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),S=(0,s.P6)("symbolIcon.moduleForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.moduleForeground","The foreground color for module symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),k=(0,s.P6)("symbolIcon.namespaceForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.namespaceForeground","The foreground color for namespace symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),L=(0,s.P6)("symbolIcon.nullForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.nullForeground","The foreground color for null symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),N=(0,s.P6)("symbolIcon.numberForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.numberForeground","The foreground color for number symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),D=(0,s.P6)("symbolIcon.objectForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.objectForeground","The foreground color for object symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),I=(0,s.P6)("symbolIcon.operatorForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.operatorForeground","The foreground color for operator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),E=(0,s.P6)("symbolIcon.packageForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.packageForeground","The foreground color for package symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),T=(0,s.P6)("symbolIcon.propertyForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.propertyForeground","The foreground color for property symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),M=(0,s.P6)("symbolIcon.referenceForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.referenceForeground","The foreground color for reference symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),A=(0,s.P6)("symbolIcon.snippetForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.snippetForeground","The foreground color for snippet symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),O=(0,s.P6)("symbolIcon.stringForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.stringForeground","The foreground color for string symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),P=(0,s.P6)("symbolIcon.structForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.structForeground","The foreground color for struct symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),R=(0,s.P6)("symbolIcon.textForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.textForeground","The foreground color for text symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),F=(0,s.P6)("symbolIcon.typeParameterForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.typeParameterForeground","The foreground color for type parameter symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),B=(0,s.P6)("symbolIcon.unitForeground",{dark:s.dR,light:s.dR,hc:s.dR},(0,o.N)("symbolIcon.unitForeground","The foreground color for unit symbols. These symbols appear in the outline, breadcrumb, and suggest widget.")),V=(0,s.P6)("symbolIcon.variableForeground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},(0,o.N)("symbolIcon.variableForeground","The foreground color for variable symbols. These symbols appear in the outline, breadcrumb, and suggest widget."));(0,r.Ic)(((e,t)=>{const i=e.getColor(a);i&&t.addRule(`${n.lA.symbolArray.cssSelector} { color: ${i}; }`);const o=e.getColor(l);o&&t.addRule(`${n.lA.symbolBoolean.cssSelector} { color: ${o}; }`);const s=e.getColor(c);s&&t.addRule(`${n.lA.symbolClass.cssSelector} { color: ${s}; }`);const r=e.getColor(x);r&&t.addRule(`${n.lA.symbolMethod.cssSelector} { color: ${r}; }`);const W=e.getColor(d);W&&t.addRule(`${n.lA.symbolColor.cssSelector} { color: ${W}; }`);const H=e.getColor(h);H&&t.addRule(`${n.lA.symbolConstant.cssSelector} { color: ${H}; }`);const z=e.getColor(u);z&&t.addRule(`${n.lA.symbolConstructor.cssSelector} { color: ${z}; }`);const j=e.getColor(g);j&&t.addRule(`\n\t\t\t${n.lA.symbolValue.cssSelector},${n.lA.symbolEnum.cssSelector} { color: ${j}; }`);const U=e.getColor(p);U&&t.addRule(`${n.lA.symbolEnumMember.cssSelector} { color: ${U}; }`);const $=e.getColor(f);$&&t.addRule(`${n.lA.symbolEvent.cssSelector} { color: ${$}; }`);const K=e.getColor(m);K&&t.addRule(`${n.lA.symbolField.cssSelector} { color: ${K}; }`);const q=e.getColor(v);q&&t.addRule(`${n.lA.symbolFile.cssSelector} { color: ${q}; }`);const Z=e.getColor(_);Z&&t.addRule(`${n.lA.symbolFolder.cssSelector} { color: ${Z}; }`);const G=e.getColor(b);G&&t.addRule(`${n.lA.symbolFunction.cssSelector} { color: ${G}; }`);const Y=e.getColor(w);Y&&t.addRule(`${n.lA.symbolInterface.cssSelector} { color: ${Y}; }`);const Q=e.getColor(y);Q&&t.addRule(`${n.lA.symbolKey.cssSelector} { color: ${Q}; }`);const X=e.getColor(C);X&&t.addRule(`${n.lA.symbolKeyword.cssSelector} { color: ${X}; }`);const J=e.getColor(S);J&&t.addRule(`${n.lA.symbolModule.cssSelector} { color: ${J}; }`);const ee=e.getColor(k);ee&&t.addRule(`${n.lA.symbolNamespace.cssSelector} { color: ${ee}; }`);const te=e.getColor(L);te&&t.addRule(`${n.lA.symbolNull.cssSelector} { color: ${te}; }`);const ie=e.getColor(N);ie&&t.addRule(`${n.lA.symbolNumber.cssSelector} { color: ${ie}; }`);const ne=e.getColor(D);ne&&t.addRule(`${n.lA.symbolObject.cssSelector} { color: ${ne}; }`);const oe=e.getColor(I);oe&&t.addRule(`${n.lA.symbolOperator.cssSelector} { color: ${oe}; }`);const se=e.getColor(E);se&&t.addRule(`${n.lA.symbolPackage.cssSelector} { color: ${se}; }`);const re=e.getColor(T);re&&t.addRule(`${n.lA.symbolProperty.cssSelector} { color: ${re}; }`);const ae=e.getColor(M);ae&&t.addRule(`${n.lA.symbolReference.cssSelector} { color: ${ae}; }`);const le=e.getColor(A);le&&t.addRule(`${n.lA.symbolSnippet.cssSelector} { color: ${le}; }`);const ce=e.getColor(O);ce&&t.addRule(`${n.lA.symbolString.cssSelector} { color: ${ce}; }`);const de=e.getColor(P);de&&t.addRule(`${n.lA.symbolStruct.cssSelector} { color: ${de}; }`);const he=e.getColor(R);he&&t.addRule(`${n.lA.symbolText.cssSelector} { color: ${he}; }`);const ue=e.getColor(F);ue&&t.addRule(`${n.lA.symbolTypeParameter.cssSelector} { color: ${ue}; }`);const ge=e.getColor(B);ge&&t.addRule(`${n.lA.symbolUnit.cssSelector} { color: ${ge}; }`);const pe=e.getColor(V);pe&&t.addRule(`${n.lA.symbolVariable.cssSelector} { color: ${pe}; }`)}))},19720:(e,t,i)=>{"use strict";i.r(t),i.d(t,{ToggleTabFocusModeAction:()=>a});var n=i(85152),o=i(16830),s=i(56345),r=i(63580);class a extends o.R6{constructor(){super({id:a.ID,label:r.N({key:"toggle.tabMovesFocus",comment:["Turn on/off use of tab key for moving focus around VS Code"]},"Toggle Tab Key Moves Focus"),alias:"Toggle Tab Key Moves Focus",precondition:void 0,kbOpts:{kbExpr:null,primary:2091,mac:{primary:1323},weight:100}})}run(e,t){const i=!s.nG.getTabFocusMode();s.nG.setTabFocusMode(i),i?(0,n.Z9)(r.N("toggle.tabMovesFocus.on","Pressing Tab will now move focus to the next focusable element")):(0,n.Z9)(r.N("toggle.tabMovesFocus.off","Pressing Tab will now insert the tab character"))}}a.ID="editor.action.toggleTabFocusMode",(0,o.Qr)(a)},31725:(e,t,i)=>{"use strict";i.r(t),i.d(t,{UnusualLineTerminatorsDetector:()=>g});var n=i(5976),o=i(95935),s=i(16830),r=i(11640),a=i(63580),l=i(28820),c=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},d=function(e,t){return function(i,n){t(i,n,e)}},h=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const u="ignoreUnusualLineTerminators";let g=class extends n.JT{constructor(e,t,i){super(),this._editor=e,this._dialogService=t,this._codeEditorService=i,this._config=this._editor.getOption(112),this._register(this._editor.onDidChangeConfiguration((e=>{e.hasChanged(112)&&(this._config=this._editor.getOption(112),this._checkForUnusualLineTerminators())}))),this._register(this._editor.onDidChangeModel((()=>{this._checkForUnusualLineTerminators()}))),this._register(this._editor.onDidChangeModelContent((e=>{e.isUndoing||this._checkForUnusualLineTerminators()})))}_checkForUnusualLineTerminators(){return h(this,void 0,void 0,(function*(){if("off"===this._config)return;if(!this._editor.hasModel())return;const e=this._editor.getModel();if(!e.mightContainUnusualLineTerminators())return;const t=function(e,t){return e.getModelProperty(t.uri,u)}(this._codeEditorService,e);if(!0===t)return;if(this._editor.getOption(80))return;if("auto"===this._config)return void e.removeUnusualLineTerminators(this._editor.getSelections());(yield this._dialogService.confirm({title:a.N("unusualLineTerminators.title","Unusual Line Terminators"),message:a.N("unusualLineTerminators.message","Detected unusual line terminators"),detail:a.N("unusualLineTerminators.detail","The file '{0}' contains one or more unusual line terminator characters, like Line Separator (LS) or Paragraph Separator (PS).\n\nIt is recommended to remove them from the file. This can be configured via `editor.unusualLineTerminators`.",(0,o.EZ)(e.uri)),primaryButton:a.N("unusualLineTerminators.fix","Remove Unusual Line Terminators"),secondaryButton:a.N("unusualLineTerminators.ignore","Ignore")})).confirmed?e.removeUnusualLineTerminators(this._editor.getSelections()):function(e,t,i){e.setModelProperty(t.uri,u,i)}(this._codeEditorService,e,!0)}))}};g.ID="editor.contrib.unusualLineTerminatorsDetector",g=c([d(1,l.S),d(2,r.$)],g),(0,s._K)(g.ID,g)},70185:(e,t,i)=>{"use strict";i.r(t);var n=i(15393),o=i(5976),s=i(16830),r=i(44101),a=i(89510),l=i(51200),c=i(32334),d=i(65072),h=i(33108),u=i(97781),g=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},p=function(e,t){return function(i,n){t(i,n,e)}};let f=class extends o.JT{constructor(e,t,i,o){super(),this._modelService=t,this._themeService=i,this._configurationService=o,this._editor=e,this._tokenizeViewport=new n.pY((()=>this._tokenizeViewportNow()),100),this._outstandingRequests=[],this._register(this._editor.onDidScrollChange((()=>{this._tokenizeViewport.schedule()}))),this._register(this._editor.onDidChangeModel((()=>{this._cancelAll(),this._tokenizeViewport.schedule()}))),this._register(this._editor.onDidChangeModelContent((e=>{this._cancelAll(),this._tokenizeViewport.schedule()}))),this._register(r.K7.onDidChange((()=>{this._cancelAll(),this._tokenizeViewport.schedule()}))),this._register(this._configurationService.onDidChangeConfiguration((e=>{e.affectsConfiguration(c.e3)&&(this._cancelAll(),this._tokenizeViewport.schedule())}))),this._register(this._themeService.onDidColorThemeChange((()=>{this._cancelAll(),this._tokenizeViewport.schedule()})))}_cancelAll(){for(const e of this._outstandingRequests)e.cancel();this._outstandingRequests=[]}_removeOutstandingRequest(e){for(let t=0,i=this._outstandingRequests.length;t<i;t++)if(this._outstandingRequests[t]===e)return void this._outstandingRequests.splice(t,1)}_tokenizeViewportNow(){if(!this._editor.hasModel())return;const e=this._editor.getModel();if(e.hasCompleteSemanticTokens())return;if(!(0,c.tw)(e,this._themeService,this._configurationService))return void(e.hasSomeSemanticTokens()&&e.setSemanticTokens(null,!1));if(!(0,a.KO)(e))return void(e.hasSomeSemanticTokens()&&e.setSemanticTokens(null,!1));const t=this._editor.getVisibleRangesPlusViewportAboveBelow();this._outstandingRequests=this._outstandingRequests.concat(t.map((t=>this._requestRange(e,t))))}_requestRange(e,t){const i=e.getVersionId(),o=(0,n.PG)((i=>Promise.resolve((0,a.OG)(e,t,i))));return o.then((n=>{if(!n||!n.tokens||e.isDisposed()||e.getVersionId()!==i)return;const{provider:o,tokens:s}=n,r=this._modelService.getSemanticTokensProviderStyling(o);e.setPartialSemanticTokens(t,(0,d.h)(s,r,e.getLanguageId()))})).then((()=>this._removeOutstandingRequest(o)),(()=>this._removeOutstandingRequest(o))),o}};f.ID="editor.contrib.viewportSemanticTokens",f=g([p(1,l.q),p(2,u.XE),p(3,h.Ui)],f),(0,s._K)(f.ID,f)},43497:(e,t,i)=>{"use strict";i.r(t),i.d(t,{getOccurrencesAtPosition:()=>D});var n=i(85152),o=i(9488),s=i(15393),r=i(71050),a=i(17301),l=i(5976),c=i(16830),d=i(24314),h=i(29102),u=i(84973),g=i(44174),p=i(44101),f=i(63580),m=i(38819),v=i(73910),_=i(97781),b=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},w=function(e,t){return function(i,n){t(i,n,e)}};const y=(0,v.P6)("editor.wordHighlightBackground",{dark:"#575757B8",light:"#57575740",hc:null},f.N("wordHighlight","Background color of a symbol during read-access, like reading a variable. The color must not be opaque so as not to hide underlying decorations."),!0),C=(0,v.P6)("editor.wordHighlightStrongBackground",{dark:"#004972B8",light:"#0e639c40",hc:null},f.N("wordHighlightStrong","Background color of a symbol during write-access, like writing to a variable. The color must not be opaque so as not to hide underlying decorations."),!0),x=(0,v.P6)("editor.wordHighlightBorder",{light:null,dark:null,hc:v.xL},f.N("wordHighlightBorder","Border color of a symbol during read-access, like reading a variable.")),S=(0,v.P6)("editor.wordHighlightStrongBorder",{light:null,dark:null,hc:v.xL},f.N("wordHighlightStrongBorder","Border color of a symbol during write-access, like writing to a variable.")),k=(0,v.P6)("editorOverviewRuler.wordHighlightForeground",{dark:"#A0A0A0CC",light:"#A0A0A0CC",hc:"#A0A0A0CC"},f.N("overviewRulerWordHighlightForeground","Overview ruler marker color for symbol highlights. The color must not be opaque so as not to hide underlying decorations."),!0),L=(0,v.P6)("editorOverviewRuler.wordHighlightStrongForeground",{dark:"#C0A0C0CC",light:"#C0A0C0CC",hc:"#C0A0C0CC"},f.N("overviewRulerWordHighlightStrongForeground","Overview ruler marker color for write-access symbol highlights. The color must not be opaque so as not to hide underlying decorations."),!0),N=new m.uy("hasWordHighlights",!1);function D(e,t,i){const n=p.vH.ordered(e);return(0,s.Ps)(n.map((n=>()=>Promise.resolve(n.provideDocumentHighlights(e,t,i)).then(void 0,a.Cp))),o.Of)}class I{constructor(e,t,i){this._wordRange=this._getCurrentWordRange(e,t),this.result=(0,s.PG)((n=>this._compute(e,t,i,n)))}_getCurrentWordRange(e,t){const i=e.getWordAtPosition(t.getPosition());return i?new d.e(t.startLineNumber,i.startColumn,t.startLineNumber,i.endColumn):null}isValid(e,t,i){const n=t.startLineNumber,o=t.startColumn,s=t.endColumn,r=this._getCurrentWordRange(e,t);let a=Boolean(this._wordRange&&this._wordRange.equalsRange(r));for(let t=0,r=i.length;!a&&t<r;t++){let r=e.getDecorationRange(i[t]);r&&r.startLineNumber===n&&r.startColumn<=o&&r.endColumn>=s&&(a=!0)}return a}cancel(){this.result.cancel()}}class E extends I{_compute(e,t,i,n){return D(e,t.getPosition(),n).then((e=>e||[]))}}class T extends I{constructor(e,t,i){super(e,t,i),this._selectionIsEmpty=t.isEmpty()}_compute(e,t,i,n){return(0,s.Vs)(250,n).then((()=>{if(!t.isEmpty())return[];const n=e.getWordAtPosition(t.getPosition());if(!n||n.word.length>1e3)return[];return e.findMatches(n.word,!0,!1,!0,i,!1).map((e=>({range:e.range,kind:p.MY.Text})))}))}isValid(e,t,i){const n=t.isEmpty();return this._selectionIsEmpty===n&&super.isValid(e,t,i)}}(0,c.sb)("_executeDocumentHighlights",((e,t)=>D(e,t,r.T.None)));class M{constructor(e,t){this.toUnhook=new l.SL,this.workerRequestTokenId=0,this.workerRequestCompleted=!1,this.workerRequestValue=[],this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1,this.editor=e,this._hasWordHighlights=N.bindTo(t),this._ignorePositionChangeEvent=!1,this.occurrencesHighlight=this.editor.getOption(71),this.model=this.editor.getModel(),this.toUnhook.add(e.onDidChangeCursorPosition((e=>{this._ignorePositionChangeEvent||this.occurrencesHighlight&&this._onPositionChanged(e)}))),this.toUnhook.add(e.onDidChangeModelContent((e=>{this._stopAll()}))),this.toUnhook.add(e.onDidChangeConfiguration((e=>{let t=this.editor.getOption(71);this.occurrencesHighlight!==t&&(this.occurrencesHighlight=t,this._stopAll())}))),this._decorationIds=[],this.workerRequestTokenId=0,this.workerRequest=null,this.workerRequestCompleted=!1,this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1}hasDecorations(){return this._decorationIds.length>0}restore(){this.occurrencesHighlight&&this._run()}_getSortedHighlights(){return o.kX(this._decorationIds.map((e=>this.model.getDecorationRange(e))).sort(d.e.compareRangesUsingStarts))}moveNext(){let e=this._getSortedHighlights(),t=(e.findIndex((e=>e.containsPosition(this.editor.getPosition())))+1)%e.length,i=e[t];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(i.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(i);const o=this._getWord();if(o){const s=this.editor.getModel().getLineContent(i.startLineNumber);(0,n.Z9)(`${s}, ${t+1} of ${e.length} for '${o.word}'`)}}finally{this._ignorePositionChangeEvent=!1}}moveBack(){let e=this._getSortedHighlights(),t=(e.findIndex((e=>e.containsPosition(this.editor.getPosition())))-1+e.length)%e.length,i=e[t];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(i.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(i);const o=this._getWord();if(o){const s=this.editor.getModel().getLineContent(i.startLineNumber);(0,n.Z9)(`${s}, ${t+1} of ${e.length} for '${o.word}'`)}}finally{this._ignorePositionChangeEvent=!1}}_removeDecorations(){this._decorationIds.length>0&&(this._decorationIds=this.editor.deltaDecorations(this._decorationIds,[]),this._hasWordHighlights.set(!1))}_stopAll(){this._removeDecorations(),-1!==this.renderDecorationsTimer&&(clearTimeout(this.renderDecorationsTimer),this.renderDecorationsTimer=-1),null!==this.workerRequest&&(this.workerRequest.cancel(),this.workerRequest=null),this.workerRequestCompleted||(this.workerRequestTokenId++,this.workerRequestCompleted=!0)}_onPositionChanged(e){this.occurrencesHighlight&&3===e.reason?this._run():this._stopAll()}_getWord(){let e=this.editor.getSelection(),t=e.startLineNumber,i=e.startColumn;return this.model.getWordAtPosition({lineNumber:t,column:i})}_run(){let e=this.editor.getSelection();if(e.startLineNumber!==e.endLineNumber)return void this._stopAll();let t=e.startColumn,i=e.endColumn;const n=this._getWord();if(!n||n.startColumn>t||n.endColumn<i)return void this._stopAll();const o=this.workerRequest&&this.workerRequest.isValid(this.model,e,this._decorationIds);if(this.lastCursorPositionChangeTime=(new Date).getTime(),o)this.workerRequestCompleted&&-1!==this.renderDecorationsTimer&&(clearTimeout(this.renderDecorationsTimer),this.renderDecorationsTimer=-1,this._beginRenderDecorations());else{this._stopAll();let e=++this.workerRequestTokenId;this.workerRequestCompleted=!1,this.workerRequest=(s=this.model,r=this.editor.getSelection(),l=this.editor.getOption(115),p.vH.has(s)?new E(s,r,l):new T(s,r,l)),this.workerRequest.result.then((t=>{e===this.workerRequestTokenId&&(this.workerRequestCompleted=!0,this.workerRequestValue=t||[],this._beginRenderDecorations())}),a.dL)}var s,r,l}_beginRenderDecorations(){let e=(new Date).getTime(),t=this.lastCursorPositionChangeTime+250;e>=t?(this.renderDecorationsTimer=-1,this.renderDecorations()):this.renderDecorationsTimer=setTimeout((()=>{this.renderDecorations()}),t-e)}renderDecorations(){this.renderDecorationsTimer=-1;let e=[];for(const t of this.workerRequestValue)t.range&&e.push({range:t.range,options:M._getDecorationOptions(t.kind)});this._decorationIds=this.editor.deltaDecorations(this._decorationIds,e),this._hasWordHighlights.set(this.hasDecorations())}static _getDecorationOptions(e){return e===p.MY.Write?this._WRITE_OPTIONS:e===p.MY.Text?this._TEXT_OPTIONS:this._REGULAR_OPTIONS}dispose(){this._stopAll(),this.toUnhook.dispose()}}M._WRITE_OPTIONS=g.qx.register({description:"word-highlight-strong",stickiness:1,className:"wordHighlightStrong",overviewRuler:{color:(0,_.EN)(L),position:u.sh.Center},minimap:{color:(0,_.EN)(v.IY),position:u.F5.Inline}}),M._TEXT_OPTIONS=g.qx.register({description:"selection-highlight",stickiness:1,className:"selectionHighlight",overviewRuler:{color:(0,_.EN)(v.SP),position:u.sh.Center},minimap:{color:(0,_.EN)(v.IY),position:u.F5.Inline}}),M._REGULAR_OPTIONS=g.qx.register({description:"word-highlight",stickiness:1,className:"wordHighlight",overviewRuler:{color:(0,_.EN)(k),position:u.sh.Center},minimap:{color:(0,_.EN)(v.IY),position:u.F5.Inline}});let A=class e extends l.JT{constructor(e,t){super(),this.wordHighlighter=null;const i=()=>{e.hasModel()&&(this.wordHighlighter=new M(e,t))};this._register(e.onDidChangeModel((e=>{this.wordHighlighter&&(this.wordHighlighter.dispose(),this.wordHighlighter=null),i()}))),i()}static get(t){return t.getContribution(e.ID)}saveViewState(){return!(!this.wordHighlighter||!this.wordHighlighter.hasDecorations())}moveNext(){this.wordHighlighter&&this.wordHighlighter.moveNext()}moveBack(){this.wordHighlighter&&this.wordHighlighter.moveBack()}restoreViewState(e){this.wordHighlighter&&e&&this.wordHighlighter.restore()}dispose(){this.wordHighlighter&&(this.wordHighlighter.dispose(),this.wordHighlighter=null),super.dispose()}};A.ID="editor.contrib.wordHighlighter",A=b([w(1,m.i6)],A);class O extends c.R6{constructor(e,t){super(t),this._isNext=e}run(e,t){const i=A.get(t);i&&(this._isNext?i.moveNext():i.moveBack())}}class P extends c.R6{constructor(){super({id:"editor.action.wordHighlight.trigger",label:f.N("wordHighlight.trigger.label","Trigger Symbol Highlight"),alias:"Trigger Symbol Highlight",precondition:N.toNegated(),kbOpts:{kbExpr:h.u.editorTextFocus,primary:0,weight:100}})}run(e,t,i){const n=A.get(t);n&&n.restoreViewState(!0)}}(0,c._K)(A.ID,A),(0,c.Qr)(class extends O{constructor(){super(!0,{id:"editor.action.wordHighlight.next",label:f.N("wordHighlight.next.label","Go to Next Symbol Highlight"),alias:"Go to Next Symbol Highlight",precondition:N,kbOpts:{kbExpr:h.u.editorTextFocus,primary:65,weight:100}})}}),(0,c.Qr)(class extends O{constructor(){super(!1,{id:"editor.action.wordHighlight.prev",label:f.N("wordHighlight.previous.label","Go to Previous Symbol Highlight"),alias:"Go to Previous Symbol Highlight",precondition:N,kbOpts:{kbExpr:h.u.editorTextFocus,primary:1089,weight:100}})}}),(0,c.Qr)(P),(0,_.Ic)(((e,t)=>{const i=e.getColor(v.Rz);i&&(t.addRule(`.monaco-editor .focused .selectionHighlight { background-color: ${i}; }`),t.addRule(`.monaco-editor .selectionHighlight { background-color: ${i.transparent(.5)}; }`));const n=e.getColor(y);n&&t.addRule(`.monaco-editor .wordHighlight { background-color: ${n}; }`);const o=e.getColor(C);o&&t.addRule(`.monaco-editor .wordHighlightStrong { background-color: ${o}; }`);const s=e.getColor(v.g_);s&&t.addRule(`.monaco-editor .selectionHighlight { border: 1px ${"hc"===e.type?"dotted":"solid"} ${s}; box-sizing: border-box; }`);const r=e.getColor(x);r&&t.addRule(`.monaco-editor .wordHighlight { border: 1px ${"hc"===e.type?"dashed":"solid"} ${r}; box-sizing: border-box; }`);const a=e.getColor(S);a&&t.addRule(`.monaco-editor .wordHighlightStrong { border: 1px ${"hc"===e.type?"dashed":"solid"} ${a}; box-sizing: border-box; }`)}))},99453:(e,t,i)=>{"use strict";i.r(t),i.d(t,{CursorWordAccessibilityLeft:()=>N,CursorWordAccessibilityLeftSelect:()=>D,CursorWordAccessibilityRight:()=>P,CursorWordAccessibilityRightSelect:()=>R,CursorWordEndLeft:()=>C,CursorWordEndLeftSelect:()=>k,CursorWordEndRight:()=>E,CursorWordEndRightSelect:()=>A,CursorWordLeft:()=>x,CursorWordLeftSelect:()=>L,CursorWordRight:()=>T,CursorWordRightSelect:()=>O,CursorWordStartLeft:()=>y,CursorWordStartLeftSelect:()=>S,CursorWordStartRight:()=>I,CursorWordStartRightSelect:()=>M,DeleteInsideWord:()=>K,DeleteWordCommand:()=>F,DeleteWordEndLeft:()=>H,DeleteWordEndRight:()=>U,DeleteWordLeft:()=>z,DeleteWordLeftCommand:()=>B,DeleteWordRight:()=>$,DeleteWordRightCommand:()=>V,DeleteWordStartLeft:()=>W,DeleteWordStartRight:()=>j,MoveWordCommand:()=>_,WordLeftCommand:()=>b,WordRightCommand:()=>w});var n=i(16830),o=i(61329),s=i(64141),r=i(33181),a=i(5795),l=i(59410),c=i(50187),d=i(24314),h=i(3860),u=i(29102),g=i(83831),p=i(63580),f=i(31106),m=i(38819),v=i(39282);class _ extends n._l{constructor(e){super(e),this._inSelectionMode=e.inSelectionMode,this._wordNavigationType=e.wordNavigationType}runEditorCommand(e,t,i){if(!t.hasModel())return;const n=(0,l.u)(t.getOption(115)),o=t.getModel(),s=t.getSelections().map((e=>{const t=new c.L(e.positionLineNumber,e.positionColumn),i=this._move(n,o,t,this._wordNavigationType);return this._moveTo(e,i,this._inSelectionMode)}));if(o.pushStackElement(),t._getViewModel().setCursorStates("moveWordCommand",3,s.map((e=>r.Vi.fromModelSelection(e)))),1===s.length){const e=new c.L(s[0].positionLineNumber,s[0].positionColumn);t.revealPosition(e,0)}}_moveTo(e,t,i){return i?new h.Y(e.selectionStartLineNumber,e.selectionStartColumn,t.lineNumber,t.column):new h.Y(t.lineNumber,t.column,t.lineNumber,t.column)}}class b extends _{_move(e,t,i,n){return a.w.moveWordLeft(e,t,i,n)}}class w extends _{_move(e,t,i,n){return a.w.moveWordRight(e,t,i,n)}}class y extends b{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordStartLeft",precondition:void 0})}}class C extends b{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordEndLeft",precondition:void 0})}}class x extends b{constructor(){var e;super({inSelectionMode:!1,wordNavigationType:1,id:"cursorWordLeft",precondition:void 0,kbOpts:{kbExpr:m.Ao.and(u.u.textInputFocus,null===(e=m.Ao.and(f.U,v.c))||void 0===e?void 0:e.negate()),primary:2063,mac:{primary:527},weight:100}})}}class S extends b{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordStartLeftSelect",precondition:void 0})}}class k extends b{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordEndLeftSelect",precondition:void 0})}}class L extends b{constructor(){var e;super({inSelectionMode:!0,wordNavigationType:1,id:"cursorWordLeftSelect",precondition:void 0,kbOpts:{kbExpr:m.Ao.and(u.u.textInputFocus,null===(e=m.Ao.and(f.U,v.c))||void 0===e?void 0:e.negate()),primary:3087,mac:{primary:1551},weight:100}})}}class N extends b{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:"cursorWordAccessibilityLeft",precondition:void 0})}_move(e,t,i,n){return super._move((0,l.u)(s.BH.wordSeparators.defaultValue),t,i,n)}}class D extends b{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:"cursorWordAccessibilityLeftSelect",precondition:void 0})}_move(e,t,i,n){return super._move((0,l.u)(s.BH.wordSeparators.defaultValue),t,i,n)}}class I extends w{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordStartRight",precondition:void 0})}}class E extends w{constructor(){var e;super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordEndRight",precondition:void 0,kbOpts:{kbExpr:m.Ao.and(u.u.textInputFocus,null===(e=m.Ao.and(f.U,v.c))||void 0===e?void 0:e.negate()),primary:2065,mac:{primary:529},weight:100}})}}class T extends w{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordRight",precondition:void 0})}}class M extends w{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordStartRightSelect",precondition:void 0})}}class A extends w{constructor(){var e;super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordEndRightSelect",precondition:void 0,kbOpts:{kbExpr:m.Ao.and(u.u.textInputFocus,null===(e=m.Ao.and(f.U,v.c))||void 0===e?void 0:e.negate()),primary:3089,mac:{primary:1553},weight:100}})}}class O extends w{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordRightSelect",precondition:void 0})}}class P extends w{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:"cursorWordAccessibilityRight",precondition:void 0})}_move(e,t,i,n){return super._move((0,l.u)(s.BH.wordSeparators.defaultValue),t,i,n)}}class R extends w{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:"cursorWordAccessibilityRightSelect",precondition:void 0})}_move(e,t,i,n){return super._move((0,l.u)(s.BH.wordSeparators.defaultValue),t,i,n)}}class F extends n._l{constructor(e){super(e),this._whitespaceHeuristics=e.whitespaceHeuristics,this._wordNavigationType=e.wordNavigationType}runEditorCommand(e,t,i){if(!t.hasModel())return;const n=(0,l.u)(t.getOption(115)),s=t.getModel(),r=t.getSelections(),a=t.getOption(5),c=t.getOption(8),d=g.zu.getAutoClosingPairs(s.getLanguageId()),h=t._getViewModel(),u=r.map((e=>{const i=this._delete({wordSeparators:n,model:s,selection:e,whitespaceHeuristics:this._whitespaceHeuristics,autoClosingDelete:t.getOption(6),autoClosingBrackets:a,autoClosingQuotes:c,autoClosingPairs:d,autoClosedCharacters:h.getCursorAutoClosedCharacters()},this._wordNavigationType);return new o.T4(i,"")}));t.pushUndoStop(),t.executeCommands(this.id,u),t.pushUndoStop()}}class B extends F{_delete(e,t){let i=a.w.deleteWordLeft(e,t);return i||new d.e(1,1,1,1)}}class V extends F{_delete(e,t){let i=a.w.deleteWordRight(e,t);if(i)return i;const n=e.model.getLineCount(),o=e.model.getLineMaxColumn(n);return new d.e(n,o,n,o)}}class W extends B{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:"deleteWordStartLeft",precondition:u.u.writable})}}class H extends B{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:"deleteWordEndLeft",precondition:u.u.writable})}}class z extends B{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:0,id:"deleteWordLeft",precondition:u.u.writable,kbOpts:{kbExpr:u.u.textInputFocus,primary:2049,mac:{primary:513},weight:100}})}}class j extends V{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:"deleteWordStartRight",precondition:u.u.writable})}}class U extends V{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:"deleteWordEndRight",precondition:u.u.writable})}}class $ extends V{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:2,id:"deleteWordRight",precondition:u.u.writable,kbOpts:{kbExpr:u.u.textInputFocus,primary:2068,mac:{primary:532},weight:100}})}}class K extends n.R6{constructor(){super({id:"deleteInsideWord",precondition:u.u.writable,label:p.N("deleteInsideWord","Delete Word"),alias:"Delete Word"})}run(e,t,i){if(!t.hasModel())return;const n=(0,l.u)(t.getOption(115)),s=t.getModel(),r=t.getSelections().map((e=>{const t=a.w.deleteInsideWord(n,s,e);return new o.T4(t,"")}));t.pushUndoStop(),t.executeCommands(this.id,r),t.pushUndoStop()}}(0,n.fK)(new y),(0,n.fK)(new C),(0,n.fK)(new x),(0,n.fK)(new S),(0,n.fK)(new k),(0,n.fK)(new L),(0,n.fK)(new I),(0,n.fK)(new E),(0,n.fK)(new T),(0,n.fK)(new M),(0,n.fK)(new A),(0,n.fK)(new O),(0,n.fK)(new N),(0,n.fK)(new D),(0,n.fK)(new P),(0,n.fK)(new R),(0,n.fK)(new W),(0,n.fK)(new H),(0,n.fK)(new z),(0,n.fK)(new j),(0,n.fK)(new U),(0,n.fK)(new $),(0,n.Qr)(K)},60661:(e,t,i)=>{"use strict";i.r(t),i.d(t,{CursorWordPartLeft:()=>u,CursorWordPartLeftSelect:()=>g,CursorWordPartRight:()=>f,CursorWordPartRightSelect:()=>m,DeleteWordPartLeft:()=>c,DeleteWordPartRight:()=>d,WordPartLeftCommand:()=>h,WordPartRightCommand:()=>p});var n=i(16830),o=i(5795),s=i(24314),r=i(29102),a=i(99453),l=i(94565);class c extends a.DeleteWordCommand{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:0,id:"deleteWordPartLeft",precondition:r.u.writable,kbOpts:{kbExpr:r.u.textInputFocus,primary:0,mac:{primary:769},weight:100}})}_delete(e,t){let i=o.L.deleteWordPartLeft(e);return i||new s.e(1,1,1,1)}}class d extends a.DeleteWordCommand{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:2,id:"deleteWordPartRight",precondition:r.u.writable,kbOpts:{kbExpr:r.u.textInputFocus,primary:0,mac:{primary:788},weight:100}})}_delete(e,t){let i=o.L.deleteWordPartRight(e);if(i)return i;const n=e.model.getLineCount(),r=e.model.getLineMaxColumn(n);return new s.e(n,r,n,r)}}class h extends a.MoveWordCommand{_move(e,t,i,n){return o.L.moveWordPartLeft(e,t,i)}}class u extends h{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordPartLeft",precondition:void 0,kbOpts:{kbExpr:r.u.textInputFocus,primary:0,mac:{primary:783},weight:100}})}}l.P.registerCommandAlias("cursorWordPartStartLeft","cursorWordPartLeft");class g extends h{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordPartLeftSelect",precondition:void 0,kbOpts:{kbExpr:r.u.textInputFocus,primary:0,mac:{primary:1807},weight:100}})}}l.P.registerCommandAlias("cursorWordPartStartLeftSelect","cursorWordPartLeftSelect");class p extends a.MoveWordCommand{_move(e,t,i,n){return o.L.moveWordPartRight(e,t,i)}}class f extends p{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordPartRight",precondition:void 0,kbOpts:{kbExpr:r.u.textInputFocus,primary:0,mac:{primary:785},weight:100}})}}class m extends p{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordPartRightSelect",precondition:void 0,kbOpts:{kbExpr:r.u.textInputFocus,primary:0,mac:{primary:1809},weight:100}})}}(0,n.fK)(new c),(0,n.fK)(new d),(0,n.fK)(new u),(0,n.fK)(new g),(0,n.fK)(new f),(0,n.fK)(new m)},86211:(e,t,i)=>{"use strict";i.d(t,{KeyCode:()=>yc,KeyMod:()=>Cc,Selection:()=>xc,editor:()=>Sc,languages:()=>kc});var n,o,s,r,a,l,c,d,h,u,g,p,f,m,v,_,b,w,y,C,x,S,k,L,N,D,I,E,T,M,A,O,P,R,F,B=i(64141),V=i(71050),W=i(4669),H=i(22258),z=i(70666),j=i(50187),U=i(24314),$=i(3860),K=i(85600);!function(e){e[e.Unknown=0]="Unknown",e[e.Disabled=1]="Disabled",e[e.Enabled=2]="Enabled"}(n||(n={})),function(e){e[e.KeepWhitespace=1]="KeepWhitespace",e[e.InsertAsSnippet=4]="InsertAsSnippet"}(o||(o={})),function(e){e[e.Method=0]="Method",e[e.Function=1]="Function",e[e.Constructor=2]="Constructor",e[e.Field=3]="Field",e[e.Variable=4]="Variable",e[e.Class=5]="Class",e[e.Struct=6]="Struct",e[e.Interface=7]="Interface",e[e.Module=8]="Module",e[e.Property=9]="Property",e[e.Event=10]="Event",e[e.Operator=11]="Operator",e[e.Unit=12]="Unit",e[e.Value=13]="Value",e[e.Constant=14]="Constant",e[e.Enum=15]="Enum",e[e.EnumMember=16]="EnumMember",e[e.Keyword=17]="Keyword",e[e.Text=18]="æ–‡æœ¬",e[e.Color=19]="Color",e[e.File=20]="File",e[e.Reference=21]="Reference",e[e.Customcolor=22]="Customcolor",e[e.Folder=23]="Folder",e[e.TypeParameter=24]="TypeParameter",e[e.User=25]="User",e[e.Issue=26]="Issue",e[e.Snippet=27]="Snippet"}(s||(s={})),function(e){e[e.Deprecated=1]="Deprecated"}(r||(r={})),function(e){e[e.Invoke=0]="Invoke",e[e.TriggerCharacter=1]="TriggerCharacter",e[e.TriggerForIncompleteCompletions=2]="TriggerForIncompleteCompletions"}(a||(a={})),function(e){e[e.EXACT=0]="EXACT",e[e.ABOVE=1]="ABOVE",e[e.BELOW=2]="BELOW"}(l||(l={})),function(e){e[e.NotSet=0]="NotSet",e[e.ContentFlush=1]="ContentFlush",e[e.RecoverFromMarkers=2]="RecoverFromMarkers",e[e.Explicit=3]="Explicit",e[e.Paste=4]="Paste",e[e.Undo=5]="Undo",e[e.Redo=6]="Redo"}(c||(c={})),function(e){e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"}(d||(d={})),function(e){e[e.Text=0]="æ–‡æœ¬",e[e.Read=1]="Read",e[e.Write=2]="Write"}(h||(h={})),function(e){e[e.None=0]="None",e[e.Keep=1]="Keep",e[e.Brackets=2]="Brackets",e[e.Advanced=3]="Advanced",e[e.Full=4]="Full"}(u||(u={})),function(e){e[e.acceptSuggestionOnCommitCharacter=0]="acceptSuggestionOnCommitCharacter",e[e.acceptSuggestionOnEnter=1]="acceptSuggestionOnEnter",e[e.accessibilitySupport=2]="accessibilitySupport",e[e.accessibilityPageSize=3]="accessibilityPageSize",e[e.ariaLabel=4]="ariaLabel",e[e.autoClosingBrackets=5]="autoClosingBrackets",e[e.autoClosingDelete=6]="autoClosingDelete",e[e.autoClosingOvertype=7]="autoClosingOvertype",e[e.autoClosingQuotes=8]="autoClosingQuotes",e[e.autoIndent=9]="autoIndent",e[e.automaticLayout=10]="automaticLayout",e[e.autoSurround=11]="autoSurround",e[e.bracketPairColorization=12]="bracketPairColorization",e[e.guides=13]="guides",e[e.codeLens=14]="codeLens",e[e.codeLensFontFamily=15]="codeLensFontFamily",e[e.codeLensFontSize=16]="codeLensFontSize",e[e.colorDecorators=17]="colorDecorators",e[e.columnSelection=18]="columnSelection",e[e.comments=19]="comments",e[e.contextmenu=20]="contextmenu",e[e.copyWithSyntaxHighlighting=21]="copyWithSyntaxHighlighting",e[e.cursorBlinking=22]="cursorBlinking",e[e.cursorSmoothCaretAnimation=23]="cursorSmoothCaretAnimation",e[e.cursorStyle=24]="cursorStyle",e[e.cursorSurroundingLines=25]="cursorSurroundingLines",e[e.cursorSurroundingLinesStyle=26]="cursorSurroundingLinesStyle",e[e.cursorWidth=27]="cursorWidth",e[e.disableLayerHinting=28]="disableLayerHinting",e[e.disableMonospaceOptimizations=29]="disableMonospaceOptimizations",e[e.domReadOnly=30]="domReadOnly",e[e.dragAndDrop=31]="dragAndDrop",e[e.emptySelectionClipboard=32]="emptySelectionClipboard",e[e.extraEditorClassName=33]="extraEditorClassName",e[e.fastScrollSensitivity=34]="fastScrollSensitivity",e[e.find=35]="find",e[e.fixedOverflowWidgets=36]="fixedOverflowWidgets",e[e.folding=37]="folding",e[e.foldingStrategy=38]="foldingStrategy",e[e.foldingHighlight=39]="foldingHighlight",e[e.foldingImportsByDefault=40]="foldingImportsByDefault",e[e.unfoldOnClickAfterEndOfLine=41]="unfoldOnClickAfterEndOfLine",e[e.fontFamily=42]="fontFamily",e[e.fontInfo=43]="fontInfo",e[e.fontLigatures=44]="fontLigatures",e[e.fontSize=45]="fontSize",e[e.fontWeight=46]="fontWeight",e[e.formatOnPaste=47]="formatOnPaste",e[e.formatOnType=48]="formatOnType",e[e.glyphMargin=49]="glyphMargin",e[e.gotoLocation=50]="gotoLocation",e[e.hideCursorInOverviewRuler=51]="hideCursorInOverviewRuler",e[e.hover=52]="hover",e[e.inDiffEditor=53]="inDiffEditor",e[e.inlineSuggest=54]="inlineSuggest",e[e.letterSpacing=55]="letterSpacing",e[e.lightbulb=56]="lightbulb",e[e.lineDecorationsWidth=57]="lineDecorationsWidth",e[e.lineHeight=58]="lineHeight",e[e.lineNumbers=59]="lineNumbers",e[e.lineNumbersMinChars=60]="lineNumbersMinChars",e[e.linkedEditing=61]="linkedEditing",e[e.links=62]="links",e[e.matchBrackets=63]="matchBrackets",e[e.minimap=64]="minimap",e[e.mouseStyle=65]="mouseStyle",e[e.mouseWheelScrollSensitivity=66]="mouseWheelScrollSensitivity",e[e.mouseWheelZoom=67]="mouseWheelZoom",e[e.multiCursorMergeOverlapping=68]="multiCursorMergeOverlapping",e[e.multiCursorModifier=69]="multiCursorModifier",e[e.multiCursorPaste=70]="multiCursorPaste",e[e.occurrencesHighlight=71]="occurrencesHighlight",e[e.overviewRulerBorder=72]="overviewRulerBorder",e[e.overviewRulerLanes=73]="overviewRulerLanes",e[e.padding=74]="padding",e[e.parameterHints=75]="parameterHints",e[e.peekWidgetDefaultFocus=76]="peekWidgetDefaultFocus",e[e.definitionLinkOpensInPeek=77]="definitionLinkOpensInPeek",e[e.quickSuggestions=78]="quickSuggestions",e[e.quickSuggestionsDelay=79]="quickSuggestionsDelay",e[e.readOnly=80]="readOnly",e[e.renameOnType=81]="renameOnType",e[e.renderControlCharacters=82]="renderControlCharacters",e[e.renderFinalNewline=83]="renderFinalNewline",e[e.renderLineHighlight=84]="renderLineHighlight",e[e.renderLineHighlightOnlyWhenFocus=85]="renderLineHighlightOnlyWhenFocus",e[e.renderValidationDecorations=86]="renderValidationDecorations",e[e.renderWhitespace=87]="renderWhitespace",e[e.revealHorizontalRightPadding=88]="revealHorizontalRightPadding",e[e.roundedSelection=89]="roundedSelection",e[e.rulers=90]="rulers",e[e.scrollbar=91]="scrollbar",e[e.scrollBeyondLastColumn=92]="scrollBeyondLastColumn",e[e.scrollBeyondLastLine=93]="scrollBeyondLastLine",e[e.scrollPredominantAxis=94]="scrollPredominantAxis",e[e.selectionClipboard=95]="selectionClipboard",e[e.selectionHighlight=96]="selectionHighlight",e[e.selectOnLineNumbers=97]="selectOnLineNumbers",e[e.showFoldingControls=98]="showFoldingControls",e[e.showUnused=99]="showUnused",e[e.snippetSuggestions=100]="snippetSuggestions",e[e.smartSelect=101]="smartSelect",e[e.smoothScrolling=102]="smoothScrolling",e[e.stickyTabStops=103]="stickyTabStops",e[e.stopRenderingLineAfter=104]="stopRenderingLineAfter",e[e.suggest=105]="suggest",e[e.suggestFontSize=106]="suggestFontSize",e[e.suggestLineHeight=107]="suggestLineHeight",e[e.suggestOnTriggerCharacters=108]="suggestOnTriggerCharacters",e[e.suggestSelection=109]="suggestSelection",e[e.tabCompletion=110]="tabCompletion",e[e.tabIndex=111]="tabIndex",e[e.unusualLineTerminators=112]="unusualLineTerminators",e[e.useShadowDOM=113]="useShadowDOM",e[e.useTabStops=114]="useTabStops",e[e.wordSeparators=115]="wordSeparators",e[e.wordWrap=116]="wordWrap",e[e.wordWrapBreakAfterCharacters=117]="wordWrapBreakAfterCharacters",e[e.wordWrapBreakBeforeCharacters=118]="wordWrapBreakBeforeCharacters",e[e.wordWrapColumn=119]="wordWrapColumn",e[e.wordWrapOverride1=120]="wordWrapOverride1",e[e.wordWrapOverride2=121]="wordWrapOverride2",e[e.wrappingIndent=122]="wrappingIndent",e[e.wrappingStrategy=123]="wrappingStrategy",e[e.showDeprecated=124]="showDeprecated",e[e.inlayHints=125]="inlayHints",e[e.editorClassName=126]="editorClassName",e[e.pixelRatio=127]="pixelRatio",e[e.tabFocusMode=128]="tabFocusMode",e[e.layoutInfo=129]="layoutInfo",e[e.wrappingInfo=130]="wrappingInfo"}(g||(g={})),function(e){e[e.TextDefined=0]="TextDefined",e[e.LF=1]="LF",e[e.CRLF=2]="CRLF"}(p||(p={})),function(e){e[e.LF=0]="LF",e[e.CRLF=1]="CRLF"}(f||(f={})),function(e){e[e.None=0]="None",e[e.Indent=1]="Indent",e[e.IndentOutdent=2]="IndentOutdent",e[e.Outdent=3]="Outdent"}(m||(m={})),function(e){e[e.Other=0]="Other",e[e.Type=1]="ç±»åž‹",e[e.Parameter=2]="Parameter"}(v||(v={})),function(e){e[e.Automatic=0]="Automatic",e[e.Explicit=1]="Explicit"}(_||(_={})),function(e){e[e.DependsOnKbLayout=-1]="DependsOnKbLayout",e[e.Unknown=0]="Unknown",e[e.Backspace=1]="Backspace",e[e.Tab=2]="Tab",e[e.Enter=3]="Enter",e[e.Shift=4]="Shift",e[e.Ctrl=5]="Ctrl",e[e.Alt=6]="Alt",e[e.PauseBreak=7]="PauseBreak",e[e.CapsLock=8]="CapsLock",e[e.Escape=9]="Escape",e[e.Space=10]="Space",e[e.PageUp=11]="PageUp",e[e.PageDown=12]="PageDown",e[e.End=13]="End",e[e.Home=14]="Home",e[e.LeftArrow=15]="LeftArrow",e[e.UpArrow=16]="UpArrow",e[e.RightArrow=17]="RightArrow",e[e.DownArrow=18]="DownArrow",e[e.Insert=19]="Insert",e[e.Delete=20]="Delete",e[e.Digit0=21]="Digit0",e[e.Digit1=22]="Digit1",e[e.Digit2=23]="Digit2",e[e.Digit3=24]="Digit3",e[e.Digit4=25]="Digit4",e[e.Digit5=26]="Digit5",e[e.Digit6=27]="Digit6",e[e.Digit7=28]="Digit7",e[e.Digit8=29]="Digit8",e[e.Digit9=30]="Digit9",e[e.KeyA=31]="KeyA",e[e.KeyB=32]="KeyB",e[e.KeyC=33]="KeyC",e[e.KeyD=34]="KeyD",e[e.KeyE=35]="KeyE",e[e.KeyF=36]="KeyF",e[e.KeyG=37]="KeyG",e[e.KeyH=38]="KeyH",e[e.KeyI=39]="KeyI",e[e.KeyJ=40]="KeyJ",e[e.KeyK=41]="KeyK",e[e.KeyL=42]="KeyL",e[e.KeyM=43]="KeyM",e[e.KeyN=44]="KeyN",e[e.KeyO=45]="KeyO",e[e.KeyP=46]="KeyP",e[e.KeyQ=47]="KeyQ",e[e.KeyR=48]="KeyR",e[e.KeyS=49]="KeyS",e[e.KeyT=50]="KeyT",e[e.KeyU=51]="KeyU",e[e.KeyV=52]="KeyV",e[e.KeyW=53]="KeyW",e[e.KeyX=54]="KeyX",e[e.KeyY=55]="KeyY",e[e.KeyZ=56]="KeyZ",e[e.Meta=57]="Meta",e[e.ContextMenu=58]="ContextMenu",e[e.F1=59]="F1",e[e.F2=60]="F2",e[e.F3=61]="F3",e[e.F4=62]="F4",e[e.F5=63]="F5",e[e.F6=64]="F6",e[e.F7=65]="F7",e[e.F8=66]="F8",e[e.F9=67]="F9",e[e.F10=68]="F10",e[e.F11=69]="F11",e[e.F12=70]="F12",e[e.F13=71]="F13",e[e.F14=72]="F14",e[e.F15=73]="F15",e[e.F16=74]="F16",e[e.F17=75]="F17",e[e.F18=76]="F18",e[e.F19=77]="F19",e[e.NumLock=78]="NumLock",e[e.ScrollLock=79]="ScrollLock",e[e.Semicolon=80]="Semicolon",e[e.Equal=81]="Equal",e[e.Comma=82]="Comma",e[e.Minus=83]="Minus",e[e.Period=84]="Period",e[e.Slash=85]="Slash",e[e.Backquote=86]="Backquote",e[e.BracketLeft=87]="BracketLeft",e[e.Backslash=88]="Backslash",e[e.BracketRight=89]="BracketRight",e[e.Quote=90]="Quote",e[e.OEM_8=91]="OEM_8",e[e.IntlBackslash=92]="IntlBackslash",e[e.Numpad0=93]="Numpad0",e[e.Numpad1=94]="Numpad1",e[e.Numpad2=95]="Numpad2",e[e.Numpad3=96]="Numpad3",e[e.Numpad4=97]="Numpad4",e[e.Numpad5=98]="Numpad5",e[e.Numpad6=99]="Numpad6",e[e.Numpad7=100]="Numpad7",e[e.Numpad8=101]="Numpad8",e[e.Numpad9=102]="Numpad9",e[e.NumpadMultiply=103]="NumpadMultiply",e[e.NumpadAdd=104]="NumpadAdd",e[e.NUMPAD_SEPARATOR=105]="NUMPAD_SEPARATOR",e[e.NumpadSubtract=106]="NumpadSubtract",e[e.NumpadDecimal=107]="NumpadDecimal",e[e.NumpadDivide=108]="NumpadDivide",e[e.KEY_IN_COMPOSITION=109]="KEY_IN_COMPOSITION",e[e.ABNT_C1=110]="ABNT_C1",e[e.ABNT_C2=111]="ABNT_C2",e[e.AudioVolumeMute=112]="AudioVolumeMute",e[e.AudioVolumeUp=113]="AudioVolumeUp",e[e.AudioVolumeDown=114]="AudioVolumeDown",e[e.BrowserSearch=115]="BrowserSearch",e[e.BrowserHome=116]="BrowserHome",e[e.BrowserBack=117]="BrowserBack",e[e.BrowserForward=118]="BrowserForward",e[e.MediaTrackNext=119]="MediaTrackNext",e[e.MediaTrackPrevious=120]="MediaTrackPrevious",e[e.MediaStop=121]="MediaStop",e[e.MediaPlayPause=122]="MediaPlayPause",e[e.LaunchMediaPlayer=123]="LaunchMediaPlayer",e[e.LaunchMail=124]="LaunchMail",e[e.LaunchApp2=125]="LaunchApp2",e[e.MAX_VALUE=126]="MAX_VALUE"}(b||(b={})),function(e){e[e.Hint=1]="Hint",e[e.Info=2]="Info",e[e.Warning=4]="Warning",e[e.Error=8]="é”™è¯¯"}(w||(w={})),function(e){e[e.Unnecessary=1]="Unnecessary",e[e.Deprecated=2]="Deprecated"}(y||(y={})),function(e){e[e.Inline=1]="Inline",e[e.Gutter=2]="Gutter"}(C||(C={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.TEXTAREA=1]="TEXTAREA",e[e.GUTTER_GLYPH_MARGIN=2]="GUTTER_GLYPH_MARGIN",e[e.GUTTER_LINE_NUMBERS=3]="GUTTER_LINE_NUMBERS",e[e.GUTTER_LINE_DECORATIONS=4]="GUTTER_LINE_DECORATIONS",e[e.GUTTER_VIEW_ZONE=5]="GUTTER_VIEW_ZONE",e[e.CONTENT_TEXT=6]="CONTENT_TEXT",e[e.CONTENT_EMPTY=7]="CONTENT_EMPTY",e[e.CONTENT_VIEW_ZONE=8]="CONTENT_VIEW_ZONE",e[e.CONTENT_WIDGET=9]="CONTENT_WIDGET",e[e.OVERVIEW_RULER=10]="OVERVIEW_RULER",e[e.SCROLLBAR=11]="SCROLLBAR",e[e.OVERLAY_WIDGET=12]="OVERLAY_WIDGET",e[e.OUTSIDE_EDITOR=13]="OUTSIDE_EDITOR"}(x||(x={})),function(e){e[e.TOP_RIGHT_CORNER=0]="TOP_RIGHT_CORNER",e[e.BOTTOM_RIGHT_CORNER=1]="BOTTOM_RIGHT_CORNER",e[e.TOP_CENTER=2]="TOP_CENTER"}(S||(S={})),function(e){e[e.Left=1]="Left",e[e.Center=2]="Center",e[e.Right=4]="Right",e[e.Full=7]="Full"}(k||(k={})),function(e){e[e.Off=0]="Off",e[e.On=1]="On",e[e.Relative=2]="Relative",e[e.Interval=3]="Interval",e[e.Custom=4]="è‡ªå®šä¹‰"}(L||(L={})),function(e){e[e.None=0]="None",e[e.Text=1]="æ–‡æœ¬",e[e.Blocks=2]="Blocks"}(N||(N={})),function(e){e[e.Smooth=0]="Smooth",e[e.Immediate=1]="Immediate"}(D||(D={})),function(e){e[e.Auto=1]="Auto",e[e.Hidden=2]="Hidden",e[e.Visible=3]="Visible"}(I||(I={})),function(e){e[e.LTR=0]="LTR",e[e.RTL=1]="RTL"}(E||(E={})),function(e){e[e.Invoke=1]="Invoke",e[e.TriggerCharacter=2]="TriggerCharacter",e[e.ContentChange=3]="ContentChange"}(T||(T={})),function(e){e[e.File=0]="File",e[e.Module=1]="Module",e[e.Namespace=2]="Namespace",e[e.Package=3]="Package",e[e.Class=4]="Class",e[e.Method=5]="Method",e[e.Property=6]="Property",e[e.Field=7]="Field",e[e.Constructor=8]="Constructor",e[e.Enum=9]="Enum",e[e.Interface=10]="Interface",e[e.Function=11]="Function",e[e.Variable=12]="Variable",e[e.Constant=13]="Constant",e[e.String=14]="String",e[e.Number=15]="Number",e[e.Boolean=16]="Boolean",e[e.Array=17]="Array",e[e.Object=18]="Object",e[e.Key=19]="Key",e[e.Null=20]="Null",e[e.EnumMember=21]="EnumMember",e[e.Struct=22]="Struct",e[e.Event=23]="Event",e[e.Operator=24]="Operator",e[e.TypeParameter=25]="TypeParameter"}(M||(M={})),function(e){e[e.Deprecated=1]="Deprecated"}(A||(A={})),function(e){e[e.Hidden=0]="Hidden",e[e.Blink=1]="Blink",e[e.Smooth=2]="Smooth",e[e.Phase=3]="Phase",e[e.Expand=4]="Expand",e[e.Solid=5]="Solid"}(O||(O={})),function(e){e[e.Line=1]="Line",e[e.Block=2]="Block",e[e.Underline=3]="Underline",e[e.LineThin=4]="LineThin",e[e.BlockOutline=5]="BlockOutline",e[e.UnderlineThin=6]="UnderlineThin"}(P||(P={})),function(e){e[e.AlwaysGrowsWhenTypingAtEdges=0]="AlwaysGrowsWhenTypingAtEdges",e[e.NeverGrowsWhenTypingAtEdges=1]="NeverGrowsWhenTypingAtEdges",e[e.GrowsOnlyWhenTypingBefore=2]="GrowsOnlyWhenTypingBefore",e[e.GrowsOnlyWhenTypingAfter=3]="GrowsOnlyWhenTypingAfter"}(R||(R={})),function(e){e[e.None=0]="None",e[e.Same=1]="Same",e[e.Indent=2]="Indent",e[e.DeepIndent=3]="DeepIndent"}(F||(F={}));class q{static chord(e,t){return(0,H.gx)(e,t)}}function Z(){return{editor:void 0,languages:void 0,CancellationTokenSource:V.A,Emitter:W.Q5,KeyCode:b,KeyMod:q,Position:j.L,Range:U.e,Selection:$.Y,SelectionDirection:E,MarkerSeverity:w,MarkerTag:y,Uri:z.o,Token:K.WU}}q.CtrlCmd=2048,q.Shift=1024,q.Alt=512,q.WinCtrl=256;i(4172);var G,Y=i(11640),Q=i(65321),X=i(91741),J=i(43702),ee=i(23897),te=i(66663),ie=i(95935),ne=i(94565);!function(e){e[e.API=0]="API",e[e.USER=1]="USER"}(G||(G={}));var oe=i(50988),se=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},re=function(e,t){return function(i,n){t(i,n,e)}},ae=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let le=class{constructor(e){this._commandService=e}open(e,t){return ae(this,void 0,void 0,(function*(){if(!(0,oe.xn)(e,te.lg.command))return!1;if(!(null==t?void 0:t.allowCommands))return!0;"string"==typeof e&&(e=z.o.parse(e));let i=[];try{i=(0,ee.Q)(decodeURIComponent(e.query))}catch(t){try{i=(0,ee.Q)(e.query)}catch(e){}}return Array.isArray(i)||(i=[i]),yield this._commandService.executeCommand(e.path,...i),!0}))}};le=se([re(0,ne.H)],le);let ce=class{constructor(e){this._editorService=e}open(e,t){return ae(this,void 0,void 0,(function*(){let i;"string"==typeof e&&(e=z.o.parse(e));const n=/^L?(\d+)(?:,(\d+))?/.exec(e.fragment);return n&&(i={startLineNumber:parseInt(n[1]),startColumn:n[2]?parseInt(n[2]):1},e=e.with({fragment:""})),e.scheme===te.lg.file&&(e=(0,ie.AH)(e)),yield this._editorService.openCodeEditor({resource:e,options:Object.assign({selection:i,context:(null==t?void 0:t.fromUserGesture)?G.USER:G.API},null==t?void 0:t.editorOptions)},this._editorService.getFocusedCodeEditor(),null==t?void 0:t.openToSide),!0}))}};ce=se([re(0,Y.$)],ce);let de=class{constructor(e,t){this._openers=new X.S,this._validators=new X.S,this._resolvers=new X.S,this._resolvedUriTargets=new J.Y9((e=>e.with({path:null,fragment:null,query:null}).toString())),this._externalOpeners=new X.S,this._defaultExternalOpener={openExternal:e=>ae(this,void 0,void 0,(function*(){return(0,oe.xn)(e,te.lg.http)||(0,oe.xn)(e,te.lg.https)?Q.V3(e):window.location.href=e,!0}))},this._openers.push({open:(e,t)=>ae(this,void 0,void 0,(function*(){return!!((null==t?void 0:t.openExternal)||(0,oe.xn)(e,te.lg.mailto)||(0,oe.xn)(e,te.lg.http)||(0,oe.xn)(e,te.lg.https))&&(yield this._doOpenExternal(e,t),!0)}))}),this._openers.push(new le(t)),this._openers.push(new ce(e))}registerOpener(e){return{dispose:this._openers.unshift(e)}}registerValidator(e){return{dispose:this._validators.push(e)}}registerExternalUriResolver(e){return{dispose:this._resolvers.push(e)}}setDefaultExternalOpener(e){this._defaultExternalOpener=e}registerExternalOpener(e){return{dispose:this._externalOpeners.push(e)}}open(e,t){var i;return ae(this,void 0,void 0,(function*(){const n="string"==typeof e?z.o.parse(e):e,o=null!==(i=this._resolvedUriTargets.get(n))&&void 0!==i?i:e;for(const e of this._validators)if(!(yield e.shouldOpen(o)))return!1;for(const i of this._openers){if(yield i.open(e,t))return!0}return!1}))}resolveExternalUri(e,t){return ae(this,void 0,void 0,(function*(){for(const i of this._resolvers)try{const n=yield i.resolveExternalUri(e,t);if(n)return this._resolvedUriTargets.has(n.resolved)||this._resolvedUriTargets.set(n.resolved,e),n}catch(e){}throw new Error("Could not resolve external URI: "+e.toString())}))}_doOpenExternal(e,t){return ae(this,void 0,void 0,(function*(){const i="string"==typeof e?z.o.parse(e):e;let n,o;try{n=(yield this.resolveExternalUri(i,t)).resolved}catch(e){n=i}if(o="string"==typeof e&&i.toString()===n.toString()?e:encodeURI(n.toString(!0)),null==t?void 0:t.allowContributedOpeners){const e="string"==typeof(null==t?void 0:t.allowContributedOpeners)?null==t?void 0:t.allowContributedOpeners:void 0;for(const t of this._externalOpeners){if(yield t.openExternal(o,{sourceUri:i,preferredOpenerId:e},V.T.None))return!0}}return this._defaultExternalOpener.openExternal(o,{sourceUri:i},V.T.None)}))}dispose(){this._validators.clear()}};de=se([re(0,Y.$),re(1,ne.H)],de);var he=i(35146),ue=i(5976),ge=i(36248);const pe={followsCaret:!0,ignoreCharChanges:!0,alwaysRevealFirst:!0};class fe extends ue.JT{constructor(e,t={}){super(),this._onDidUpdate=this._register(new W.Q5),this._editor=e,this._options=ge.jB(t,pe,!1),this.disposed=!1,this.nextIdx=-1,this.ranges=[],this.ignoreSelectionChange=!1,this.revealFirst=Boolean(this._options.alwaysRevealFirst),this._register(this._editor.onDidDispose((()=>this.dispose()))),this._register(this._editor.onDidUpdateDiff((()=>this._onDiffUpdated()))),this._options.followsCaret&&this._register(this._editor.getModifiedEditor().onDidChangeCursorPosition((e=>{this.ignoreSelectionChange||(this.nextIdx=-1)}))),this._options.alwaysRevealFirst&&this._register(this._editor.getModifiedEditor().onDidChangeModel((e=>{this.revealFirst=!0}))),this._init()}_init(){this._editor.getLineChanges()}_onDiffUpdated(){this._init(),this._compute(this._editor.getLineChanges()),this.revealFirst&&null!==this._editor.getLineChanges()&&(this.revealFirst=!1,this.nextIdx=-1,this.next(1))}_compute(e){this.ranges=[],e&&e.forEach((e=>{!this._options.ignoreCharChanges&&e.charChanges?e.charChanges.forEach((e=>{this.ranges.push({rhs:!0,range:new U.e(e.modifiedStartLineNumber,e.modifiedStartColumn,e.modifiedEndLineNumber,e.modifiedEndColumn)})})):0===e.modifiedEndLineNumber?this.ranges.push({rhs:!0,range:new U.e(e.modifiedStartLineNumber,1,e.modifiedStartLineNumber+1,1)}):this.ranges.push({rhs:!0,range:new U.e(e.modifiedStartLineNumber,1,e.modifiedEndLineNumber+1,1)})})),this.ranges.sort(((e,t)=>U.e.compareRangesUsingStarts(e.range,t.range))),this._onDidUpdate.fire(this)}_initIdx(e){let t=!1,i=this._editor.getPosition();if(i){for(let n=0,o=this.ranges.length;n<o&&!t;n++){let o=this.ranges[n].range;i.isBeforeOrEqual(o.getStartPosition())&&(this.nextIdx=n+(e?0:-1),t=!0)}t||(this.nextIdx=e?0:this.ranges.length-1),this.nextIdx<0&&(this.nextIdx=this.ranges.length-1)}else this.nextIdx=0}_move(e,t){if(he.ok(!this.disposed,"Illegal State - diff navigator has been disposed"),!this.canNavigate())return;-1===this.nextIdx?this._initIdx(e):e?(this.nextIdx+=1,this.nextIdx>=this.ranges.length&&(this.nextIdx=0)):(this.nextIdx-=1,this.nextIdx<0&&(this.nextIdx=this.ranges.length-1));let i=this.ranges[this.nextIdx];this.ignoreSelectionChange=!0;try{let e=i.range.getStartPosition();this._editor.setPosition(e),this._editor.revealRangeInCenter(i.range,t)}finally{this.ignoreSelectionChange=!1}}canNavigate(){return this.ranges&&this.ranges.length>0}next(e=0){this._move(!0,e)}previous(e=0){this._move(!1,e)}dispose(){super.dispose(),this.ranges=[],this.disposed=!0}}var me=i(27374),ve=i(96518),_e=i(84973),be=i(44101),we=i(28111),ye=i(90469),Ce=i(71531),xe=i(88216),Se=i(15393),ke=i(17301),Le=i(1432),Ne=i(98401),De=i(97295);const Ie="$initialize";let Ee=!1;function Te(e){Le.$L&&(Ee||(Ee=!0,console.warn("Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq")),console.warn(e.message))}class Me{constructor(e,t,i,n){this.vsWorker=e,this.req=t,this.method=i,this.args=n,this.type=0}}class Ae{constructor(e,t,i,n){this.vsWorker=e,this.seq=t,this.res=i,this.err=n,this.type=1}}class Oe{constructor(e,t,i,n){this.vsWorker=e,this.req=t,this.eventName=i,this.arg=n,this.type=2}}class Pe{constructor(e,t,i){this.vsWorker=e,this.req=t,this.event=i,this.type=3}}class Re{constructor(e,t){this.vsWorker=e,this.req=t,this.type=4}}class Fe{constructor(e){this._workerId=-1,this._handler=e,this._lastSentReq=0,this._pendingReplies=Object.create(null),this._pendingEmitters=new Map,this._pendingEvents=new Map}setWorkerId(e){this._workerId=e}sendMessage(e,t){const i=String(++this._lastSentReq);return new Promise(((n,o)=>{this._pendingReplies[i]={resolve:n,reject:o},this._send(new Me(this._workerId,i,e,t))}))}listen(e,t){let i=null;const n=new W.Q5({onFirstListenerAdd:()=>{i=String(++this._lastSentReq),this._pendingEmitters.set(i,n),this._send(new Oe(this._workerId,i,e,t))},onLastListenerRemove:()=>{this._pendingEmitters.delete(i),this._send(new Re(this._workerId,i)),i=null}});return n.event}handleMessage(e){e&&e.vsWorker&&(-1!==this._workerId&&e.vsWorker!==this._workerId||this._handleMessage(e))}_handleMessage(e){switch(e.type){case 1:return this._handleReplyMessage(e);case 0:return this._handleRequestMessage(e);case 2:return this._handleSubscribeEventMessage(e);case 3:return this._handleEventMessage(e);case 4:return this._handleUnsubscribeEventMessage(e)}}_handleReplyMessage(e){if(!this._pendingReplies[e.seq])return void console.warn("Got reply to unknown seq");let t=this._pendingReplies[e.seq];if(delete this._pendingReplies[e.seq],e.err){let i=e.err;return e.err.$isError&&(i=new Error,i.name=e.err.name,i.message=e.err.message,i.stack=e.err.stack),void t.reject(i)}t.resolve(e.res)}_handleRequestMessage(e){let t=e.req;this._handler.handleMessage(e.method,e.args).then((e=>{this._send(new Ae(this._workerId,t,e,void 0))}),(e=>{e.detail instanceof Error&&(e.detail=(0,ke.ri)(e.detail)),this._send(new Ae(this._workerId,t,void 0,(0,ke.ri)(e)))}))}_handleSubscribeEventMessage(e){const t=e.req,i=this._handler.handleEvent(e.eventName,e.arg)((e=>{this._send(new Pe(this._workerId,t,e))}));this._pendingEvents.set(t,i)}_handleEventMessage(e){this._pendingEmitters.has(e.req)?this._pendingEmitters.get(e.req).fire(e.event):console.warn("Got event for unknown req")}_handleUnsubscribeEventMessage(e){this._pendingEvents.has(e.req)?(this._pendingEvents.get(e.req).dispose(),this._pendingEvents.delete(e.req)):console.warn("Got unsubscribe for unknown req")}_send(e){let t=[];if(0===e.type)for(let i=0;i<e.args.length;i++)e.args[i]instanceof ArrayBuffer&&t.push(e.args[i]);else 1===e.type&&e.res instanceof ArrayBuffer&&t.push(e.res);this._handler.sendMessage(e,t)}}class Be extends ue.JT{constructor(e,t,i){super();let n=null;this._worker=this._register(e.create("vs/base/common/worker/simpleWorker",(e=>{this._protocol.handleMessage(e)}),(e=>{n&&n(e)}))),this._protocol=new Fe({sendMessage:(e,t)=>{this._worker.postMessage(e,t)},handleMessage:(e,t)=>{if("function"!=typeof i[e])return Promise.reject(new Error("Missing method "+e+" on main thread host."));try{return Promise.resolve(i[e].apply(i,t))}catch(e){return Promise.reject(e)}},handleEvent:(e,t)=>{if(We(e)){const n=i[e].call(i,t);if("function"!=typeof n)throw new Error(`Missing dynamic event ${e} on main thread host.`);return n}if(Ve(e)){const t=i[e];if("function"!=typeof t)throw new Error(`Missing event ${e} on main thread host.`);return t}throw new Error(`Malformed event name ${e}`)}}),this._protocol.setWorkerId(this._worker.getId());let o=null;void 0!==Le.li.require&&"function"==typeof Le.li.require.getConfig?o=Le.li.require.getConfig():void 0!==Le.li.requirejs&&(o=Le.li.requirejs.s.contexts._.config);const s=Ne.$E(i);this._onModuleLoaded=this._protocol.sendMessage(Ie,[this._worker.getId(),JSON.parse(JSON.stringify(o)),t,s]);const r=(e,t)=>this._request(e,t),a=(e,t)=>this._protocol.listen(e,t);this._lazyProxy=new Promise(((e,i)=>{n=i,this._onModuleLoaded.then((t=>{e(He(t,r,a))}),(e=>{i(e),this._onError("Worker failed to load "+t,e)}))}))}getProxyObject(){return this._lazyProxy}_request(e,t){return new Promise(((i,n)=>{this._onModuleLoaded.then((()=>{this._protocol.sendMessage(e,t).then(i,n)}),n)}))}_onError(e,t){console.error(e),console.info(t)}}function Ve(e){return"o"===e[0]&&"n"===e[1]&&De.df(e.charCodeAt(2))}function We(e){return/^onDynamic/.test(e)&&De.df(e.charCodeAt(9))}function He(e,t,i){const n=e=>function(){const i=Array.prototype.slice.call(arguments,0);return t(e,i)},o=e=>function(t){return i(e,t)};let s={};for(const t of e)We(t)?s[t]=o(t):Ve(t)?s[t]=i(t,void 0):s[t]=n(t);return s}var ze;const je=null===(ze=window.trustedTypes)||void 0===ze?void 0:ze.createPolicy("defaultWorkerFactory",{createScriptURL:e=>e});class Ue{constructor(e,t,i,n,o){this.id=t;const s=function(e,t){if(Le.li.MonacoEnvironment){if("function"==typeof Le.li.MonacoEnvironment.getWorker)return Le.li.MonacoEnvironment.getWorker(e,t);if("function"==typeof Le.li.MonacoEnvironment.getWorkerUrl){const i=Le.li.MonacoEnvironment.getWorkerUrl(e,t);return new Worker(je?je.createScriptURL(i):i,{name:t})}}throw new Error("You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker")}("workerMain.js",i);"function"==typeof s.then?this.worker=s:this.worker=Promise.resolve(s),this.postMessage(e,[]),this.worker.then((e=>{e.onmessage=function(e){n(e.data)},e.onmessageerror=o,"function"==typeof e.addEventListener&&e.addEventListener("error",o)}))}getId(){return this.id}postMessage(e,t){this.worker&&this.worker.then((i=>i.postMessage(e,t)))}dispose(){this.worker&&this.worker.then((e=>e.terminate())),this.worker=null}}class $e{constructor(e){this._label=e,this._webWorkerFailedBeforeError=!1}create(e,t,i){let n=++$e.LAST_WORKER_ID;if(this._webWorkerFailedBeforeError)throw this._webWorkerFailedBeforeError;return new Ue(e,n,this._label||"anonymous"+n,t,(e=>{Te(e),this._webWorkerFailedBeforeError=e,i(e)}))}}$e.LAST_WORKER_ID=0;var Ke=i(83831),qe=i(2484);function Ze(e,t,i,n){return new qe.Hs(e,t,i).ComputeDiff(n)}class Ge{constructor(e){const t=[],i=[];for(let n=0,o=e.length;n<o;n++)t[n]=et(e[n],1),i[n]=tt(e[n],1);this.lines=e,this._startColumns=t,this._endColumns=i}getElements(){const e=[];for(let t=0,i=this.lines.length;t<i;t++)e[t]=this.lines[t].substring(this._startColumns[t]-1,this._endColumns[t]-1);return e}getStrictElement(e){return this.lines[e]}getStartLineNumber(e){return e+1}getEndLineNumber(e){return e+1}createCharSequence(e,t,i){const n=[],o=[],s=[];let r=0;for(let a=t;a<=i;a++){const t=this.lines[a],i=e?this._startColumns[a]:1,l=e?this._endColumns[a]:t.length+1;for(let e=i;e<l;e++)n[r]=t.charCodeAt(e-1),o[r]=a+1,s[r]=e,r++}return new Ye(n,o,s)}}class Ye{constructor(e,t,i){this._charCodes=e,this._lineNumbers=t,this._columns=i}getElements(){return this._charCodes}getStartLineNumber(e){return this._lineNumbers[e]}getStartColumn(e){return this._columns[e]}getEndLineNumber(e){return this._lineNumbers[e]}getEndColumn(e){return this._columns[e]+1}}class Qe{constructor(e,t,i,n,o,s,r,a){this.originalStartLineNumber=e,this.originalStartColumn=t,this.originalEndLineNumber=i,this.originalEndColumn=n,this.modifiedStartLineNumber=o,this.modifiedStartColumn=s,this.modifiedEndLineNumber=r,this.modifiedEndColumn=a}static createFromDiffChange(e,t,i){let n,o,s,r,a,l,c,d;return 0===e.originalLength?(n=0,o=0,s=0,r=0):(n=t.getStartLineNumber(e.originalStart),o=t.getStartColumn(e.originalStart),s=t.getEndLineNumber(e.originalStart+e.originalLength-1),r=t.getEndColumn(e.originalStart+e.originalLength-1)),0===e.modifiedLength?(a=0,l=0,c=0,d=0):(a=i.getStartLineNumber(e.modifiedStart),l=i.getStartColumn(e.modifiedStart),c=i.getEndLineNumber(e.modifiedStart+e.modifiedLength-1),d=i.getEndColumn(e.modifiedStart+e.modifiedLength-1)),new Qe(n,o,s,r,a,l,c,d)}}class Xe{constructor(e,t,i,n,o){this.originalStartLineNumber=e,this.originalEndLineNumber=t,this.modifiedStartLineNumber=i,this.modifiedEndLineNumber=n,this.charChanges=o}static createFromDiffResult(e,t,i,n,o,s,r){let a,l,c,d,h;if(0===t.originalLength?(a=i.getStartLineNumber(t.originalStart)-1,l=0):(a=i.getStartLineNumber(t.originalStart),l=i.getEndLineNumber(t.originalStart+t.originalLength-1)),0===t.modifiedLength?(c=n.getStartLineNumber(t.modifiedStart)-1,d=0):(c=n.getStartLineNumber(t.modifiedStart),d=n.getEndLineNumber(t.modifiedStart+t.modifiedLength-1)),s&&t.originalLength>0&&t.originalLength<20&&t.modifiedLength>0&&t.modifiedLength<20&&o()){const s=i.createCharSequence(e,t.originalStart,t.originalStart+t.originalLength-1),a=n.createCharSequence(e,t.modifiedStart,t.modifiedStart+t.modifiedLength-1);let l=Ze(s,a,o,!0).changes;r&&(l=function(e){if(e.length<=1)return e;const t=[e[0]];let i=t[0];for(let n=1,o=e.length;n<o;n++){const o=e[n],s=o.originalStart-(i.originalStart+i.originalLength),r=o.modifiedStart-(i.modifiedStart+i.modifiedLength);Math.min(s,r)<3?(i.originalLength=o.originalStart+o.originalLength-i.originalStart,i.modifiedLength=o.modifiedStart+o.modifiedLength-i.modifiedStart):(t.push(o),i=o)}return t}(l)),h=[];for(let e=0,t=l.length;e<t;e++)h.push(Qe.createFromDiffChange(l[e],s,a))}return new Xe(a,l,c,d,h)}}class Je{constructor(e,t,i){this.shouldComputeCharChanges=i.shouldComputeCharChanges,this.shouldPostProcessCharChanges=i.shouldPostProcessCharChanges,this.shouldIgnoreTrimWhitespace=i.shouldIgnoreTrimWhitespace,this.shouldMakePrettyDiff=i.shouldMakePrettyDiff,this.originalLines=e,this.modifiedLines=t,this.original=new Ge(e),this.modified=new Ge(t),this.continueLineDiff=it(i.maxComputationTime),this.continueCharDiff=it(0===i.maxComputationTime?0:Math.min(i.maxComputationTime,5e3))}computeDiff(){if(1===this.original.lines.length&&0===this.original.lines[0].length)return 1===this.modified.lines.length&&0===this.modified.lines[0].length?{quitEarly:!1,changes:[]}:{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:1,modifiedStartLineNumber:1,modifiedEndLineNumber:this.modified.lines.length,charChanges:[{modifiedEndColumn:0,modifiedEndLineNumber:0,modifiedStartColumn:0,modifiedStartLineNumber:0,originalEndColumn:0,originalEndLineNumber:0,originalStartColumn:0,originalStartLineNumber:0}]}]};if(1===this.modified.lines.length&&0===this.modified.lines[0].length)return{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:this.original.lines.length,modifiedStartLineNumber:1,modifiedEndLineNumber:1,charChanges:[{modifiedEndColumn:0,modifiedEndLineNumber:0,modifiedStartColumn:0,modifiedStartLineNumber:0,originalEndColumn:0,originalEndLineNumber:0,originalStartColumn:0,originalStartLineNumber:0}]}]};const e=Ze(this.original,this.modified,this.continueLineDiff,this.shouldMakePrettyDiff),t=e.changes,i=e.quitEarly;if(this.shouldIgnoreTrimWhitespace){const e=[];for(let i=0,n=t.length;i<n;i++)e.push(Xe.createFromDiffResult(this.shouldIgnoreTrimWhitespace,t[i],this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges));return{quitEarly:i,changes:e}}const n=[];let o=0,s=0;for(let e=-1,i=t.length;e<i;e++){const r=e+1<i?t[e+1]:null,a=r?r.originalStart:this.originalLines.length,l=r?r.modifiedStart:this.modifiedLines.length;for(;o<a&&s<l;){const e=this.originalLines[o],t=this.modifiedLines[s];if(e!==t){{let i=et(e,1),r=et(t,1);for(;i>1&&r>1;){if(e.charCodeAt(i-2)!==t.charCodeAt(r-2))break;i--,r--}(i>1||r>1)&&this._pushTrimWhitespaceCharChange(n,o+1,1,i,s+1,1,r)}{let i=tt(e,1),r=tt(t,1);const a=e.length+1,l=t.length+1;for(;i<a&&r<l;){if(e.charCodeAt(i-1)!==e.charCodeAt(r-1))break;i++,r++}(i<a||r<l)&&this._pushTrimWhitespaceCharChange(n,o+1,i,a,s+1,r,l)}}o++,s++}r&&(n.push(Xe.createFromDiffResult(this.shouldIgnoreTrimWhitespace,r,this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges)),o+=r.originalLength,s+=r.modifiedLength)}return{quitEarly:i,changes:n}}_pushTrimWhitespaceCharChange(e,t,i,n,o,s,r){if(this._mergeTrimWhitespaceCharChange(e,t,i,n,o,s,r))return;let a;this.shouldComputeCharChanges&&(a=[new Qe(t,i,t,n,o,s,o,r)]),e.push(new Xe(t,t,o,o,a))}_mergeTrimWhitespaceCharChange(e,t,i,n,o,s,r){const a=e.length;if(0===a)return!1;const l=e[a-1];return 0!==l.originalEndLineNumber&&0!==l.modifiedEndLineNumber&&(l.originalEndLineNumber+1===t&&l.modifiedEndLineNumber+1===o&&(l.originalEndLineNumber=t,l.modifiedEndLineNumber=o,this.shouldComputeCharChanges&&l.charChanges&&l.charChanges.push(new Qe(t,i,t,n,o,s,o,r)),!0))}}function et(e,t){const i=De.LC(e);return-1===i?t:i+1}function tt(e,t){const i=De.ow(e);return-1===i?t:i+2}function it(e){if(0===e)return()=>!0;const t=Date.now();return()=>Date.now()-t<e}var nt=i(3544);class ot{constructor(e,t,i,n){this._uri=e,this._lines=t,this._eol=i,this._versionId=n,this._lineStarts=null,this._cachedTextValue=null}dispose(){this._lines.length=0}get version(){return this._versionId}getText(){return null===this._cachedTextValue&&(this._cachedTextValue=this._lines.join(this._eol)),this._cachedTextValue}onEvents(e){e.eol&&e.eol!==this._eol&&(this._eol=e.eol,this._lineStarts=null);const t=e.changes;for(const e of t)this._acceptDeleteRange(e.range),this._acceptInsertText(new j.L(e.range.startLineNumber,e.range.startColumn),e.text);this._versionId=e.versionId,this._cachedTextValue=null}_ensureLineStarts(){if(!this._lineStarts){const e=this._eol.length,t=this._lines.length,i=new Uint32Array(t);for(let n=0;n<t;n++)i[n]=this._lines[n].length+e;this._lineStarts=new nt.o(i)}}_setLineText(e,t){this._lines[e]=t,this._lineStarts&&this._lineStarts.changeValue(e,this._lines[e].length+this._eol.length)}_acceptDeleteRange(e){if(e.startLineNumber!==e.endLineNumber)this._setLineText(e.startLineNumber-1,this._lines[e.startLineNumber-1].substring(0,e.startColumn-1)+this._lines[e.endLineNumber-1].substring(e.endColumn-1)),this._lines.splice(e.startLineNumber,e.endLineNumber-e.startLineNumber),this._lineStarts&&this._lineStarts.removeValues(e.startLineNumber,e.endLineNumber-e.startLineNumber);else{if(e.startColumn===e.endColumn)return;this._setLineText(e.startLineNumber-1,this._lines[e.startLineNumber-1].substring(0,e.startColumn-1)+this._lines[e.startLineNumber-1].substring(e.endColumn-1))}}_acceptInsertText(e,t){if(0===t.length)return;let i=(0,De.uq)(t);if(1===i.length)return void this._setLineText(e.lineNumber-1,this._lines[e.lineNumber-1].substring(0,e.column-1)+i[0]+this._lines[e.lineNumber-1].substring(e.column-1));i[i.length-1]+=this._lines[e.lineNumber-1].substring(e.column-1),this._setLineText(e.lineNumber-1,this._lines[e.lineNumber-1].substring(0,e.column-1)+i[0]);let n=new Uint32Array(i.length-1);for(let t=1;t<i.length;t++)this._lines.splice(e.lineNumber+t-1,0,i[t]),n[t-1]=i[t].length+this._eol.length;this._lineStarts&&this._lineStarts.insertValues(e.lineNumber,n)}}var st=i(97461),rt=i(44906);class at{constructor(e,t,i){const n=new Uint8Array(e*t);for(let o=0,s=e*t;o<s;o++)n[o]=i;this._data=n,this.rows=e,this.cols=t}get(e,t){return this._data[e*this.cols+t]}set(e,t,i){this._data[e*this.cols+t]=i}}class lt{constructor(e){let t=0,i=0;for(let n=0,o=e.length;n<o;n++){let[o,s,r]=e[n];s>t&&(t=s),o>i&&(i=o),r>i&&(i=r)}t++,i++;let n=new at(i,t,0);for(let t=0,i=e.length;t<i;t++){let[i,o,s]=e[t];n.set(i,o,s)}this._states=n,this._maxCharCode=t}nextState(e,t){return t<0||t>=this._maxCharCode?0:this._states.get(e,t)}}let ct=null;let dt=null;class ht{static _createLink(e,t,i,n,o){let s=o-1;do{const i=t.charCodeAt(s);if(2!==e.get(i))break;s--}while(s>n);if(n>0){const e=t.charCodeAt(n-1),i=t.charCodeAt(s);(40===e&&41===i||91===e&&93===i||123===e&&125===i)&&s--}return{range:{startLineNumber:i,startColumn:n+1,endLineNumber:i,endColumn:s+2},url:t.substring(n,s+1)}}static computeLinks(e,t=function(){return null===ct&&(ct=new lt([[1,104,2],[1,72,2],[1,102,6],[1,70,6],[2,116,3],[2,84,3],[3,116,4],[3,84,4],[4,112,5],[4,80,5],[5,115,9],[5,83,9],[5,58,10],[6,105,7],[6,73,7],[7,108,8],[7,76,8],[8,101,9],[8,69,9],[9,58,10],[10,47,11],[11,47,12]])),ct}()){const i=function(){if(null===dt){dt=new rt.N(0);const e=" \t<>'\"ã€ã€‚ï½¡ï½¤ï¼Œï¼Žï¼šï¼›â€˜ã€ˆã€Œã€Žã€”ï¼ˆï¼»ï½›ï½¢ï½£ï½ï¼½ï¼‰ã€•ã€ã€ã€‰â€™ï½€ï½žâ€¦";for(let t=0;t<e.length;t++)dt.set(e.charCodeAt(t),1);const t=".,;";for(let e=0;e<t.length;e++)dt.set(t.charCodeAt(e),2)}return dt}();let n=[];for(let o=1,s=e.getLineCount();o<=s;o++){const s=e.getLineContent(o),r=s.length;let a=0,l=0,c=0,d=1,h=!1,u=!1,g=!1,p=!1;for(;a<r;){let e=!1;const r=s.charCodeAt(a);if(13===d){let t;switch(r){case 40:h=!0,t=0;break;case 41:t=h?0:1;break;case 91:g=!0,u=!0,t=0;break;case 93:g=!1,t=u?0:1;break;case 123:p=!0,t=0;break;case 125:t=p?0:1;break;case 39:t=34===c||96===c?0:1;break;case 34:t=39===c||96===c?0:1;break;case 96:t=39===c||34===c?0:1;break;case 42:t=42===c?1:0;break;case 124:t=124===c?1:0;break;case 32:t=g?0:1;break;default:t=i.get(r)}1===t&&(n.push(ht._createLink(i,s,o,l,a)),e=!0)}else if(12===d){let t;91===r?(u=!0,t=0):t=i.get(r),1===t?e=!0:d=13}else d=t.nextState(d,r),0===d&&(e=!0);e&&(d=1,h=!1,u=!1,p=!1,l=a+1,c=r),a++}13===d&&n.push(ht._createLink(i,s,o,l,r))}return n}}class ut{constructor(){this._defaultValueSet=[["true","false"],["True","False"],["Private","Public","Friend","ReadOnly","Partial","Protected","WriteOnly"],["public","protected","private"]]}navigateValueSet(e,t,i,n,o){if(e&&t){let i=this.doNavigateValueSet(t,o);if(i)return{range:e,value:i}}if(i&&n){let e=this.doNavigateValueSet(n,o);if(e)return{range:i,value:e}}return null}doNavigateValueSet(e,t){let i=this.numberReplace(e,t);return null!==i?i:this.textReplace(e,t)}numberReplace(e,t){let i=Math.pow(10,e.length-(e.lastIndexOf(".")+1)),n=Number(e),o=parseFloat(e);return isNaN(n)||isNaN(o)||n!==o?null:0!==n||t?(n=Math.floor(n*i),n+=t?i:-i,String(n/i)):null}textReplace(e,t){return this.valueSetsReplace(this._defaultValueSet,e,t)}valueSetsReplace(e,t,i){let n=null;for(let o=0,s=e.length;null===n&&o<s;o++)n=this.valueSetReplace(e[o],t,i);return n}valueSetReplace(e,t,i){let n=e.indexOf(t);return n>=0?(n+=i?1:-1,n<0?n=e.length-1:n%=e.length,e[n]):null}}ut.INSTANCE=new ut;var gt=i(84013),pt=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class ft extends ot{get uri(){return this._uri}get eol(){return this._eol}getValue(){return this.getText()}getLinesContent(){return this._lines.slice(0)}getLineCount(){return this._lines.length}getLineContent(e){return this._lines[e-1]}getWordAtPosition(e,t){let i=(0,st.t2)(e.column,(0,st.eq)(t),this._lines[e.lineNumber-1],0);return i?new U.e(e.lineNumber,i.startColumn,e.lineNumber,i.endColumn):null}words(e){const t=this._lines,i=this._wordenize.bind(this);let n=0,o="",s=0,r=[];return{*[Symbol.iterator](){for(;;)if(s<r.length){const e=o.substring(r[s].start,r[s].end);s+=1,yield e}else{if(!(n<t.length))break;o=t[n],r=i(o,e),s=0,n+=1}}}}getLineWords(e,t){let i=this._lines[e-1],n=this._wordenize(i,t),o=[];for(const e of n)o.push({word:i.substring(e.start,e.end),startColumn:e.start+1,endColumn:e.end+1});return o}_wordenize(e,t){const i=[];let n;for(t.lastIndex=0;(n=t.exec(e))&&0!==n[0].length;)i.push({start:n.index,end:n.index+n[0].length});return i}getValueInRange(e){if((e=this._validateRange(e)).startLineNumber===e.endLineNumber)return this._lines[e.startLineNumber-1].substring(e.startColumn-1,e.endColumn-1);let t=this._eol,i=e.startLineNumber-1,n=e.endLineNumber-1,o=[];o.push(this._lines[i].substring(e.startColumn-1));for(let e=i+1;e<n;e++)o.push(this._lines[e]);return o.push(this._lines[n].substring(0,e.endColumn-1)),o.join(t)}offsetAt(e){return e=this._validatePosition(e),this._ensureLineStarts(),this._lineStarts.getPrefixSum(e.lineNumber-2)+(e.column-1)}positionAt(e){e=Math.floor(e),e=Math.max(0,e),this._ensureLineStarts();let t=this._lineStarts.getIndexOf(e),i=this._lines[t.index].length;return{lineNumber:1+t.index,column:1+Math.min(t.remainder,i)}}_validateRange(e){const t=this._validatePosition({lineNumber:e.startLineNumber,column:e.startColumn}),i=this._validatePosition({lineNumber:e.endLineNumber,column:e.endColumn});return t.lineNumber!==e.startLineNumber||t.column!==e.startColumn||i.lineNumber!==e.endLineNumber||i.column!==e.endColumn?{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:i.lineNumber,endColumn:i.column}:e}_validatePosition(e){if(!j.L.isIPosition(e))throw new Error("bad position");let{lineNumber:t,column:i}=e,n=!1;if(t<1)t=1,i=1,n=!0;else if(t>this._lines.length)t=this._lines.length,i=this._lines[t-1].length+1,n=!0;else{let e=this._lines[t-1].length+1;i<1?(i=1,n=!0):i>e&&(i=e,n=!0)}return n?{lineNumber:t,column:i}:e}}class mt{constructor(e,t){this._host=e,this._models=Object.create(null),this._foreignModuleFactory=t,this._foreignModule=null}dispose(){this._models=Object.create(null)}_getModel(e){return this._models[e]}_getModels(){let e=[];return Object.keys(this._models).forEach((t=>e.push(this._models[t]))),e}acceptNewModel(e){this._models[e.url]=new ft(z.o.parse(e.url),e.lines,e.EOL,e.versionId)}acceptModelChanged(e,t){if(!this._models[e])return;this._models[e].onEvents(t)}acceptRemovedModel(e){this._models[e]&&delete this._models[e]}computeDiff(e,t,i,n){return pt(this,void 0,void 0,(function*(){const o=this._getModel(e),s=this._getModel(t);if(!o||!s)return null;const r=o.getLinesContent(),a=s.getLinesContent(),l=new Je(r,a,{shouldComputeCharChanges:!0,shouldPostProcessCharChanges:!0,shouldIgnoreTrimWhitespace:i,shouldMakePrettyDiff:!0,maxComputationTime:n}).computeDiff(),c=!(l.changes.length>0)&&this._modelsAreIdentical(o,s);return{quitEarly:l.quitEarly,identical:c,changes:l.changes}}))}_modelsAreIdentical(e,t){const i=e.getLineCount();if(i!==t.getLineCount())return!1;for(let n=1;n<=i;n++){if(e.getLineContent(n)!==t.getLineContent(n))return!1}return!0}computeMoreMinimalEdits(e,t){return pt(this,void 0,void 0,(function*(){const i=this._getModel(e);if(!i)return t;const n=[];let o;t=t.slice(0).sort(((e,t)=>{if(e.range&&t.range)return U.e.compareRangesUsingStarts(e.range,t.range);return(e.range?0:1)-(t.range?0:1)}));for(let{range:e,text:s,eol:r}of t){if("number"==typeof r&&(o=r),U.e.isEmpty(e)&&!s)continue;const t=i.getValueInRange(e);if(s=s.replace(/\r\n|\n|\r/g,i.eol),t===s)continue;if(Math.max(s.length,t.length)>mt._diffLimit){n.push({range:e,text:s});continue}const a=(0,qe.a$)(t,s,!1),l=i.offsetAt(U.e.lift(e).getStartPosition());for(const e of a){const t=i.positionAt(l+e.originalStart),o=i.positionAt(l+e.originalStart+e.originalLength),r={text:s.substr(e.modifiedStart,e.modifiedLength),range:{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:o.lineNumber,endColumn:o.column}};i.getValueInRange(r.range)!==r.text&&n.push(r)}}return"number"==typeof o&&n.push({eol:o,text:"",range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0}}),n}))}computeLinks(e){return pt(this,void 0,void 0,(function*(){let t=this._getModel(e);return t?function(e){return e&&"function"==typeof e.getLineCount&&"function"==typeof e.getLineContent?ht.computeLinks(e):[]}(t):null}))}textualSuggest(e,t,i,n){return pt(this,void 0,void 0,(function*(){const o=new gt.G(!0),s=new RegExp(i,n),r=new Set;e:for(let i of e){const e=this._getModel(i);if(e)for(let i of e.words(s))if(i!==t&&isNaN(Number(i))&&(r.add(i),r.size>mt._suggestionsLimit))break e}return{words:Array.from(r),duration:o.elapsed()}}))}computeWordRanges(e,t,i,n){return pt(this,void 0,void 0,(function*(){let o=this._getModel(e);if(!o)return Object.create(null);const s=new RegExp(i,n),r=Object.create(null);for(let e=t.startLineNumber;e<t.endLineNumber;e++){let t=o.getLineWords(e,s);for(const i of t){if(!isNaN(Number(i.word)))continue;let t=r[i.word];t||(t=[],r[i.word]=t),t.push({startLineNumber:e,startColumn:i.startColumn,endLineNumber:e,endColumn:i.endColumn})}}return r}))}navigateValueSet(e,t,i,n,o){return pt(this,void 0,void 0,(function*(){let s=this._getModel(e);if(!s)return null;let r=new RegExp(n,o);t.startColumn===t.endColumn&&(t={startLineNumber:t.startLineNumber,startColumn:t.startColumn,endLineNumber:t.endLineNumber,endColumn:t.endColumn+1});let a=s.getValueInRange(t),l=s.getWordAtPosition({lineNumber:t.startLineNumber,column:t.startColumn},r);if(!l)return null;let c=s.getValueInRange(l);return ut.INSTANCE.navigateValueSet(t,a,l,c,i)}))}loadForeignModule(e,t,i){let n={host:Ne.IU(i,((e,t)=>this._host.fhr(e,t))),getMirrorModels:()=>this._getModels()};return this._foreignModuleFactory?(this._foreignModule=this._foreignModuleFactory(n,t),Promise.resolve(Ne.$E(this._foreignModule))):Promise.reject(new Error("Unexpected usage"))}fmr(e,t){if(!this._foreignModule||"function"!=typeof this._foreignModule[e])return Promise.reject(new Error("Missing requestHandler or method: "+e));try{return Promise.resolve(this._foreignModule[e].apply(this._foreignModule,t))}catch(e){return Promise.reject(e)}}}mt._diffLimit=1e5,mt._suggestionsLimit=1e4,"function"==typeof importScripts&&(Le.li.monaco=Z());var vt=i(51200),_t=i(33187),bt=i(9488),wt=i(43557),yt=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Ct=function(e,t){return function(i,n){t(i,n,e)}},xt=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const St=3e5;function kt(e,t){let i=e.getModel(t);return!!i&&!i.isTooLargeForSyncing()}let Lt=class extends ue.JT{constructor(e,t,i){super(),this._modelService=e,this._workerManager=this._register(new Dt(this._modelService)),this._logService=i,this._register(be.pM.register({language:"*",hasAccessToAllModels:!0},{provideLinks:(e,t)=>kt(this._modelService,e.uri)?this._workerManager.withWorker().then((t=>t.computeLinks(e.uri))).then((e=>e&&{links:e})):Promise.resolve({links:[]})})),this._register(be.KZ.register("*",new Nt(this._workerManager,t,this._modelService)))}dispose(){super.dispose()}computeDiff(e,t,i,n){return this._workerManager.withWorker().then((o=>o.computeDiff(e,t,i,n)))}computeMoreMinimalEdits(e,t){if((0,bt.Of)(t)){if(!kt(this._modelService,e))return Promise.resolve(t);const i=gt.G.create(!0),n=this._workerManager.withWorker().then((i=>i.computeMoreMinimalEdits(e,t)));return n.finally((()=>this._logService.trace("FORMAT#computeMoreMinimalEdits",e.toString(!0),i.elapsed()))),Promise.race([n,(0,Se.Vs)(1e3).then((()=>t))])}return Promise.resolve(void 0)}canNavigateValueSet(e){return kt(this._modelService,e)}navigateValueSet(e,t,i){return this._workerManager.withWorker().then((n=>n.navigateValueSet(e,t,i)))}canComputeWordRanges(e){return kt(this._modelService,e)}computeWordRanges(e,t){return this._workerManager.withWorker().then((i=>i.computeWordRanges(e,t)))}};Lt=yt([Ct(0,vt.q),Ct(1,_t.V),Ct(2,wt.VZ)],Lt);class Nt{constructor(e,t,i){this._debugDisplayName="wordbasedCompletions",this._workerManager=e,this._configurationService=t,this._modelService=i}provideCompletionItems(e,t){return xt(this,void 0,void 0,(function*(){const i=this._configurationService.getValue(e.uri,t,"editor");if(!i.wordBasedSuggestions)return;const n=[];if("currentDocument"===i.wordBasedSuggestionsMode)kt(this._modelService,e.uri)&&n.push(e.uri);else for(const t of this._modelService.getModels())kt(this._modelService,t.uri)&&(t===e?n.unshift(t.uri):"allDocuments"!==i.wordBasedSuggestionsMode&&t.getLanguageId()!==e.getLanguageId()||n.push(t.uri));if(0===n.length)return;const o=Ke.zu.getWordDefinition(e.getLanguageId()),s=e.getWordAtPosition(t),r=s?new U.e(t.lineNumber,s.startColumn,t.lineNumber,s.endColumn):U.e.fromPositions(t),a=r.setEndPosition(t.lineNumber,t.column),l=yield this._workerManager.withWorker(),c=yield l.textualSuggest(n,null==s?void 0:s.word,o);return c?{duration:c.duration,suggestions:c.words.map((e=>({kind:18,label:e,insertText:e,range:{insert:a,replace:r}})))}:void 0}))}}class Dt extends ue.JT{constructor(e){super(),this._modelService=e,this._editorWorkerClient=null,this._lastWorkerUsedTime=(new Date).getTime(),this._register(new Se.zh).cancelAndSet((()=>this._checkStopIdleWorker()),Math.round(15e4)),this._register(this._modelService.onModelRemoved((e=>this._checkStopEmptyWorker())))}dispose(){this._editorWorkerClient&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null),super.dispose()}_checkStopEmptyWorker(){if(!this._editorWorkerClient)return;0===this._modelService.getModels().length&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}_checkStopIdleWorker(){if(!this._editorWorkerClient)return;(new Date).getTime()-this._lastWorkerUsedTime>St&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}withWorker(){return this._lastWorkerUsedTime=(new Date).getTime(),this._editorWorkerClient||(this._editorWorkerClient=new Mt(this._modelService,!1,"editorWorkerService")),Promise.resolve(this._editorWorkerClient)}}class It extends ue.JT{constructor(e,t,i){if(super(),this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),this._proxy=e,this._modelService=t,!i){let e=new Se.zh;e.cancelAndSet((()=>this._checkStopModelSync()),Math.round(3e4)),this._register(e)}}dispose(){for(let e in this._syncedModels)(0,ue.B9)(this._syncedModels[e]);this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),super.dispose()}ensureSyncedResources(e,t){for(const i of e){let e=i.toString();this._syncedModels[e]||this._beginModelSync(i,t),this._syncedModels[e]&&(this._syncedModelsLastUsedTime[e]=(new Date).getTime())}}_checkStopModelSync(){let e=(new Date).getTime(),t=[];for(let i in this._syncedModelsLastUsedTime){e-this._syncedModelsLastUsedTime[i]>6e4&&t.push(i)}for(const e of t)this._stopModelSync(e)}_beginModelSync(e,t){let i=this._modelService.getModel(e);if(!i)return;if(!t&&i.isTooLargeForSyncing())return;let n=e.toString();this._proxy.acceptNewModel({url:i.uri.toString(),lines:i.getLinesContent(),EOL:i.getEOL(),versionId:i.getVersionId()});const o=new ue.SL;o.add(i.onDidChangeContent((e=>{this._proxy.acceptModelChanged(n.toString(),e)}))),o.add(i.onWillDispose((()=>{this._stopModelSync(n)}))),o.add((0,ue.OF)((()=>{this._proxy.acceptRemovedModel(n)}))),this._syncedModels[n]=o}_stopModelSync(e){let t=this._syncedModels[e];delete this._syncedModels[e],delete this._syncedModelsLastUsedTime[e],(0,ue.B9)(t)}}class Et{constructor(e){this._instance=e,this._proxyObj=Promise.resolve(this._instance)}dispose(){this._instance.dispose()}getProxyObject(){return this._proxyObj}}class Tt{constructor(e){this._workerClient=e}fhr(e,t){return this._workerClient.fhr(e,t)}}class Mt extends ue.JT{constructor(e,t,i){super(),this._disposed=!1,this._modelService=e,this._keepIdleModels=t,this._workerFactory=new $e(i),this._worker=null,this._modelManager=null}fhr(e,t){throw new Error("Not implemented!")}_getOrCreateWorker(){if(!this._worker)try{this._worker=this._register(new Be(this._workerFactory,"vs/editor/common/services/editorSimpleWorker",new Tt(this)))}catch(e){Te(e),this._worker=new Et(new mt(new Tt(this),null))}return this._worker}_getProxy(){return this._getOrCreateWorker().getProxyObject().then(void 0,(e=>(Te(e),this._worker=new Et(new mt(new Tt(this),null)),this._getOrCreateWorker().getProxyObject())))}_getOrCreateModelManager(e){return this._modelManager||(this._modelManager=this._register(new It(e,this._modelService,this._keepIdleModels))),this._modelManager}_withSyncedResources(e,t=!1){return xt(this,void 0,void 0,(function*(){return this._disposed?Promise.reject((0,ke.F0)()):this._getProxy().then((i=>(this._getOrCreateModelManager(i).ensureSyncedResources(e,t),i)))}))}computeDiff(e,t,i,n){return this._withSyncedResources([e,t],!0).then((o=>o.computeDiff(e.toString(),t.toString(),i,n)))}computeMoreMinimalEdits(e,t){return this._withSyncedResources([e]).then((i=>i.computeMoreMinimalEdits(e.toString(),t)))}computeLinks(e){return this._withSyncedResources([e]).then((t=>t.computeLinks(e.toString())))}textualSuggest(e,t,i){return xt(this,void 0,void 0,(function*(){const n=yield this._withSyncedResources(e),o=i.source,s=(0,De.mr)(i);return n.textualSuggest(e.map((e=>e.toString())),t,o,s)}))}computeWordRanges(e,t){return this._withSyncedResources([e]).then((i=>{let n=this._modelService.getModel(e);if(!n)return Promise.resolve(null);let o=Ke.zu.getWordDefinition(n.getLanguageId()),s=o.source,r=(0,De.mr)(o);return i.computeWordRanges(e.toString(),t,s,r)}))}navigateValueSet(e,t,i){return this._withSyncedResources([e]).then((n=>{let o=this._modelService.getModel(e);if(!o)return null;let s=Ke.zu.getWordDefinition(o.getLanguageId()),r=s.source,a=(0,De.mr)(s);return n.navigateValueSet(e.toString(),t,i,r,a)}))}dispose(){super.dispose(),this._disposed=!0}}class At extends Mt{constructor(e,t){super(e,t.keepIdleModels||!1,t.label),this._foreignModuleId=t.moduleId,this._foreignModuleCreateData=t.createData||null,this._foreignModuleHost=t.host||null,this._foreignProxy=null}fhr(e,t){if(!this._foreignModuleHost||"function"!=typeof this._foreignModuleHost[e])return Promise.reject(new Error("Missing method "+e+" or missing main thread foreign host."));try{return Promise.resolve(this._foreignModuleHost[e].apply(this._foreignModuleHost,t))}catch(e){return Promise.reject(e)}}_getForeignProxy(){return this._foreignProxy||(this._foreignProxy=this._getProxy().then((e=>{const t=this._foreignModuleHost?Ne.$E(this._foreignModuleHost):[];return e.loadForeignModule(this._foreignModuleId,this._foreignModuleCreateData,t).then((t=>{this._foreignModuleCreateData=null;const i=(t,i)=>e.fmr(t,i),n=(e,t)=>function(){const i=Array.prototype.slice.call(arguments,0);return t(e,i)};let o={};for(const e of t)o[e]=n(e,i);return o}))}))),this._foreignProxy}getProxy(){return this._getForeignProxy()}withSyncedResources(e){return this._withSyncedResources(e).then((e=>this.getProxy()))}}var Ot=i(78411),Pt=i(77736),Rt=i(13824);function Ft(e){return!function(e){return Array.isArray(e)}(e)}function Bt(e){return"string"==typeof e}function Vt(e){return!Bt(e)}function Wt(e){return!e}function Ht(e,t){return e.ignoreCase&&t?t.toLowerCase():t}function zt(e){return e.replace(/[&<>'"_]/g,"-")}function jt(e,t){return new Error(`${e.languageId}: ${t}`)}function Ut(e,t,i,n,o){let s=null;return t.replace(/\$((\$)|(#)|(\d\d?)|[sS](\d\d?)|@(\w+))/g,(function(t,r,a,l,c,d,h,u,g){return Wt(a)?Wt(l)?!Wt(c)&&c<n.length?Ht(e,n[c]):!Wt(h)&&e&&"string"==typeof e[h]?e[h]:(null===s&&(s=o.split("."),s.unshift(o)),!Wt(d)&&d<s.length?Ht(e,s[d]):""):Ht(e,i):"$"}))}function $t(e,t){let i=t;for(;i&&i.length>0;){const t=e.tokenizer[i];if(t)return t;const n=i.lastIndexOf(".");i=n<0?null:i.substr(0,n)}return null}class Kt{constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}static create(e,t){return this._INSTANCE.create(e,t)}create(e,t){if(null!==e&&e.depth>=this._maxCacheDepth)return new qt(e,t);let i=qt.getStackElementId(e);i.length>0&&(i+="|"),i+=t;let n=this._entries[i];return n||(n=new qt(e,t),this._entries[i]=n,n)}}Kt._INSTANCE=new Kt(5);class qt{constructor(e,t){this.parent=e,this.state=t,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(e){let t="";for(;null!==e;)t.length>0&&(t+="|"),t+=e.state,e=e.parent;return t}static _equals(e,t){for(;null!==e&&null!==t;){if(e===t)return!0;if(e.state!==t.state)return!1;e=e.parent,t=t.parent}return null===e&&null===t}equals(e){return qt._equals(this,e)}push(e){return Kt.create(this,e)}pop(){return this.parent}popall(){let e=this;for(;e.parent;)e=e.parent;return e}switchTo(e){return Kt.create(this.parent,e)}}class Zt{constructor(e,t){this.languageId=e,this.state=t}equals(e){return this.languageId===e.languageId&&this.state.equals(e.state)}clone(){return this.state.clone()===this.state?this:new Zt(this.languageId,this.state)}}class Gt{constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}static create(e,t){return this._INSTANCE.create(e,t)}create(e,t){if(null!==t)return new Yt(e,t);if(null!==e&&e.depth>=this._maxCacheDepth)return new Yt(e,t);let i=qt.getStackElementId(e),n=this._entries[i];return n||(n=new Yt(e,null),this._entries[i]=n,n)}}Gt._INSTANCE=new Gt(5);class Yt{constructor(e,t){this.stack=e,this.embeddedModeData=t}clone(){return(this.embeddedModeData?this.embeddedModeData.clone():null)===this.embeddedModeData?this:Gt.create(this.stack,this.embeddedModeData)}equals(e){return e instanceof Yt&&(!!this.stack.equals(e.stack)&&(null===this.embeddedModeData&&null===e.embeddedModeData||null!==this.embeddedModeData&&null!==e.embeddedModeData&&this.embeddedModeData.equals(e.embeddedModeData)))}}class Qt{constructor(){this._tokens=[],this._languageId=null,this._lastTokenType=null,this._lastTokenLanguage=null}enterMode(e,t){this._languageId=t}emit(e,t){this._lastTokenType===t&&this._lastTokenLanguage===this._languageId||(this._lastTokenType=t,this._lastTokenLanguage=this._languageId,this._tokens.push(new K.WU(e,t,this._languageId)))}nestedModeTokenize(e,t,i,n){const o=i.languageId,s=i.state,r=be.RW.get(o);if(!r)return this.enterMode(n,o),this.emit(n,""),s;let a=r.tokenize(e,t,s,n);return this._tokens=this._tokens.concat(a.tokens),this._lastTokenType=null,this._lastTokenLanguage=null,this._languageId=null,a.endState}finalize(e){return new K.hG(this._tokens,e)}}class Xt{constructor(e,t){this._modeService=e,this._theme=t,this._prependTokens=null,this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0}enterMode(e,t){this._currentLanguageId=this._modeService.languageIdCodec.encodeLanguageId(t)}emit(e,t){let i=this._theme.match(this._currentLanguageId,t);this._lastTokenMetadata!==i&&(this._lastTokenMetadata=i,this._tokens.push(e),this._tokens.push(i))}static _merge(e,t,i){let n=null!==e?e.length:0,o=t.length,s=null!==i?i.length:0;if(0===n&&0===o&&0===s)return new Uint32Array(0);if(0===n&&0===o)return i;if(0===o&&0===s)return e;let r=new Uint32Array(n+o+s);null!==e&&r.set(e);for(let e=0;e<o;e++)r[n+e]=t[e];return null!==i&&r.set(i,n+o),r}nestedModeTokenize(e,t,i,n){const o=i.languageId,s=i.state,r=be.RW.get(o);if(!r)return this.enterMode(n,o),this.emit(n,""),s;let a=r.tokenize2(e,t,s,n);return this._prependTokens=Xt._merge(this._prependTokens,this._tokens,a.tokens),this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0,a.endState}finalize(e){return new K.Hi(Xt._merge(this._prependTokens,this._tokens,null),e)}}class Jt{constructor(e,t,i,n){this._modeService=e,this._standaloneThemeService=t,this._languageId=i,this._lexer=n,this._embeddedModes=Object.create(null),this.embeddedLoaded=Promise.resolve(void 0);let o=!1;this._tokenizationRegistryListener=be.RW.onDidChange((e=>{if(o)return;let t=!1;for(let i=0,n=e.changedLanguages.length;i<n;i++){let n=e.changedLanguages[i];if(this._embeddedModes[n]){t=!0;break}}t&&(o=!0,be.RW.fire([this._languageId]),o=!1)}))}dispose(){this._tokenizationRegistryListener.dispose()}getLoadStatus(){let e=[];for(let t in this._embeddedModes){const i=be.RW.get(t);if(i){if(i instanceof Jt){const t=i.getLoadStatus();!1===t.loaded&&e.push(t.promise)}continue}const n=be.RW.getPromise(t);n&&e.push(n)}return 0===e.length?{loaded:!0}:{loaded:!1,promise:Promise.all(e).then((e=>{}))}}getInitialState(){let e=Kt.create(null,this._lexer.start);return Gt.create(e,null)}tokenize(e,t,i,n){let o=new Qt,s=this._tokenize(e,t,i,n,o);return o.finalize(s)}tokenize2(e,t,i,n){let o=new Xt(this._modeService,this._standaloneThemeService.getColorTheme().tokenTheme),s=this._tokenize(e,t,i,n,o);return o.finalize(s)}_tokenize(e,t,i,n,o){return i.embeddedModeData?this._nestedTokenize(e,t,i,n,o):this._myTokenize(e,t,i,n,o)}_findLeavingNestedModeOffset(e,t){let i=this._lexer.tokenizer[t.stack.state];if(!i&&(i=$t(this._lexer,t.stack.state),!i))throw jt(this._lexer,"tokenizer state is not defined: "+t.stack.state);let n=-1,o=!1;for(const t of i){if(!Vt(t.action)||"@pop"!==t.action.nextEmbedded)continue;o=!0;let i=t.regex,s=t.regex.source;if("^(?:"===s.substr(0,4)&&")"===s.substr(s.length-1,1)){let e=(i.ignoreCase?"i":"")+(i.unicode?"u":"");i=new RegExp(s.substr(4,s.length-5),e)}let r=e.search(i);-1===r||0!==r&&t.matchOnlyAtLineStart||(-1===n||r<n)&&(n=r)}if(!o)throw jt(this._lexer,'no rule containing nextEmbedded: "@pop" in tokenizer embedded state: '+t.stack.state);return n}_nestedTokenize(e,t,i,n,o){let s=this._findLeavingNestedModeOffset(e,i);if(-1===s){let s=o.nestedModeTokenize(e,t,i.embeddedModeData,n);return Gt.create(i.stack,new Zt(i.embeddedModeData.languageId,s))}let r=e.substring(0,s);r.length>0&&o.nestedModeTokenize(r,!1,i.embeddedModeData,n);let a=e.substring(s);return this._myTokenize(a,t,i,n+s,o)}_safeRuleName(e){return e?e.name:"(unknown)"}_myTokenize(e,t,i,n,o){o.enterMode(n,this._languageId);const s=e.length,r=t&&this._lexer.includeLF?e+"\n":e,a=r.length;let l=i.embeddedModeData,c=i.stack,d=0,h=null,u=!0;for(;u||d<a;){const i=d,f=c.depth,m=h?h.groups.length:0,v=c.state;let _=null,b=null,w=null,y=null,C=null;if(h){_=h.matches;const e=h.groups.shift();b=e.matched,w=e.action,y=h.rule,0===h.groups.length&&(h=null)}else{if(!u&&d>=a)break;u=!1;let e=this._lexer.tokenizer[v];if(!e&&(e=$t(this._lexer,v),!e))throw jt(this._lexer,"tokenizer state is not defined: "+v);let t=r.substr(d);for(const i of e)if((0===d||!i.matchOnlyAtLineStart)&&(_=t.match(i.regex),_)){b=_[0],w=i.action;break}}if(_||(_=[""],b=""),w||(d<a&&(_=[r.charAt(d)],b=_[0]),w=this._lexer.defaultToken),null===b)break;for(d+=b.length;Ft(w)&&Vt(w)&&w.test;)w=w.test(b,_,v,d===a);let x=null;if("string"==typeof w||Array.isArray(w))x=w;else if(w.group)x=w.group;else if(null!==w.token&&void 0!==w.token){if(x=w.tokenSubst?Ut(this._lexer,w.token,b,_,v):w.token,w.nextEmbedded)if("@pop"===w.nextEmbedded){if(!l)throw jt(this._lexer,"cannot pop embedded mode if not inside one");l=null}else{if(l)throw jt(this._lexer,"cannot enter embedded mode from within an embedded mode");C=Ut(this._lexer,w.nextEmbedded,b,_,v)}if(w.goBack&&(d=Math.max(0,d-w.goBack)),w.switchTo&&"string"==typeof w.switchTo){let e=Ut(this._lexer,w.switchTo,b,_,v);if("@"===e[0]&&(e=e.substr(1)),!$t(this._lexer,e))throw jt(this._lexer,"trying to switch to a state '"+e+"' that is undefined in rule: "+this._safeRuleName(y));c=c.switchTo(e)}else{if(w.transform&&"function"==typeof w.transform)throw jt(this._lexer,"action.transform not supported");if(w.next)if("@push"===w.next){if(c.depth>=this._lexer.maxStack)throw jt(this._lexer,"maximum tokenizer stack size reached: ["+c.state+","+c.parent.state+",...]");c=c.push(v)}else if("@pop"===w.next){if(c.depth<=1)throw jt(this._lexer,"trying to pop an empty stack in rule: "+this._safeRuleName(y));c=c.pop()}else if("@popall"===w.next)c=c.popall();else{let e=Ut(this._lexer,w.next,b,_,v);if("@"===e[0]&&(e=e.substr(1)),!$t(this._lexer,e))throw jt(this._lexer,"trying to set a next state '"+e+"' that is undefined in rule: "+this._safeRuleName(y));c=c.push(e)}}w.log&&"string"==typeof w.log&&(g=this._lexer,p=this._lexer.languageId+": "+Ut(this._lexer,w.log,b,_,v),console.log(`${g.languageId}: ${p}`))}if(null===x)throw jt(this._lexer,"lexer rule has no well-defined action in rule: "+this._safeRuleName(y));const S=i=>{let s=this._modeService.getModeIdForLanguageName(i);s&&(i=s);const r=this._getNestedEmbeddedModeData(i);if(d<a){const i=e.substr(d);return this._nestedTokenize(i,t,Gt.create(c,r),n+d,o)}return Gt.create(c,r)};if(Array.isArray(x)){if(h&&h.groups.length>0)throw jt(this._lexer,"groups cannot be nested: "+this._safeRuleName(y));if(_.length!==x.length+1)throw jt(this._lexer,"matched number of groups does not match the number of actions in rule: "+this._safeRuleName(y));let e=0;for(let t=1;t<_.length;t++)e+=_[t].length;if(e!==b.length)throw jt(this._lexer,"with groups, all characters should be matched in consecutive groups in rule: "+this._safeRuleName(y));h={rule:y,matches:_,groups:[]};for(let e=0;e<x.length;e++)h.groups[e]={action:x[e],matched:_[e+1]};d-=b.length}else{{if("@rematch"===x&&(d-=b.length,b="",_=null,x="",null!==C))return S(C);if(0===b.length){if(0===a||f!==c.depth||v!==c.state||(h?h.groups.length:0)!==m)continue;throw jt(this._lexer,"no progress in tokenizer in rule: "+this._safeRuleName(y))}let e=null;if(Bt(x)&&0===x.indexOf("@brackets")){let t=x.substr(9),i=ei(this._lexer,b);if(!i)throw jt(this._lexer,"@brackets token returned but no bracket defined as: "+b);e=zt(i.token+t)}else{e=zt(""===x?"":x+this._lexer.tokenPostfix)}i<s&&o.emit(i+n,e)}if(null!==C)return S(C)}}var g,p;return Gt.create(c,l)}_getNestedEmbeddedModeData(e){let t=this._locateMode(e);if(t){let e=be.RW.get(t);if(e)return new Zt(t,e.getInitialState())}return new Zt(t||we.TG,we.nO)}_locateMode(e){if(!e||!this._modeService.isRegisteredMode(e))return null;if(e===this._languageId)return e;const t=this._modeService.getModeId(e);return t&&(this._modeService.triggerMode(t),this._embeddedModes[t]=!0),t}}function ei(e,t){if(!t)return null;t=Ht(e,t);let i=e.brackets;for(const e of i){if(e.open===t)return{token:e.token,bracketType:1};if(e.close===t)return{token:e.token,bracketType:-1}}return null}var ti;const ii=null===(ti=window.trustedTypes)||void 0===ti?void 0:ti.createPolicy("standaloneColorizer",{createHTML:e=>e});class ni{static colorizeElement(e,t,i,n){let o=(n=n||{}).theme||"vs",s=n.mimeType||i.getAttribute("lang")||i.getAttribute("data-lang");if(!s)return console.error("Mode not detected"),Promise.resolve();e.setTheme(o);let r=i.firstChild?i.firstChild.nodeValue:"";i.className+=" "+o;return this.colorize(t,r||"",s,n).then((e=>{var t;const n=null!==(t=null==ii?void 0:ii.createHTML(e))&&void 0!==t?t:e;i.innerHTML=n}),(e=>console.error(e)))}static colorize(e,t,i,n){const o=e.languageIdCodec;let s=4;n&&"number"==typeof n.tabSize&&(s=n.tabSize),De.uS(t)&&(t=t.substr(1));let r=De.uq(t),a=e.getModeId(i);if(!a)return Promise.resolve(si(r,s,o));e.triggerMode(a);const l=be.RW.get(a);if(l)return oi(r,s,l,o);const c=be.RW.getPromise(a);return new Promise(c?(e,t)=>{c.then((i=>{oi(r,s,i,o).then(e,t)}),t)}:(e,t)=>{let i=null,n=null;const l=()=>{i&&(i.dispose(),i=null),n&&(n.dispose(),n=null);const l=be.RW.get(a);l?oi(r,s,l,o).then(e,t):e(si(r,s,o))};n=new Se._F,n.cancelAndSet(l,500),i=be.RW.onDidChange((e=>{e.changedLanguages.indexOf(a)>=0&&l()}))})}static colorizeLine(e,t,i,n,o=4){const s=Rt.wA.isBasicASCII(e,t),r=Rt.wA.containsRTL(e,s,i);return(0,Pt.tF)(new Pt.IJ(!1,!0,e,!1,s,r,0,n,[],o,0,0,0,0,-1,"none",!1,!1,null)).html}static colorizeModelLine(e,t,i=4){let n=e.getLineContent(t);e.forceTokenization(t);let o=e.getLineTokens(t).inflate();return this.colorizeLine(n,e.mightContainNonBasicASCII(),e.mightContainRTL(),o,i)}}function oi(e,t,i,n){return new Promise(((o,s)=>{const r=()=>{const a=function(e,t,i,n){let o=[],s=i.getInitialState();for(let r=0,a=e.length;r<a;r++){let a=e[r],l=i.tokenize2(a,!0,s,0);Ot.A.convertToEndOffset(l.tokens,a.length);let c=new Ot.A(l.tokens,a,n);const d=Rt.wA.isBasicASCII(a,!0),h=Rt.wA.containsRTL(a,d,!0);let u=(0,Pt.tF)(new Pt.IJ(!1,!0,a,!1,d,h,0,c.inflate(),[],t,0,0,0,0,-1,"none",!1,!1,null));o=o.concat(u.html),o.push("<br/>"),s=l.endState}return o.join("")}(e,t,i,n);if(i instanceof Jt){const e=i.getLoadStatus();if(!1===e.loaded)return void e.promise.then(r,s)}o(a)};r()}))}function si(e,t,i){let n=[];const o=new Uint32Array(2);o[0]=0,o[1]=16793600;for(let s=0,r=e.length;s<r;s++){let r=e[s];o[0]=r.length;const a=new Ot.A(o,r,i),l=Rt.wA.isBasicASCII(r,!0),c=Rt.wA.containsRTL(r,l,!0);let d=(0,Pt.tF)(new Pt.IJ(!1,!0,r,!1,l,c,0,a,[],t,0,0,0,0,-1,"none",!1,!1,null));n=n.concat(d.html),n.push("<br/>")}return n.join("")}var ri=i(59069),ai=i(8313),li=i(14603),ci=i(65520),di=i(66007),hi=i(56345),ui=i(69386),gi=i(33108),pi=i(23193);class fi{constructor(e={},t=[],i=[]){this._contents=e,this._keys=t,this._overrides=i,this.isFrozen=!1,this.overrideConfigurations=new Map}get contents(){return this.checkAndFreeze(this._contents)}get overrides(){return this.checkAndFreeze(this._overrides)}get keys(){return this.checkAndFreeze(this._keys)}isEmpty(){return 0===this._keys.length&&0===Object.keys(this._contents).length&&0===this._overrides.length}getValue(e){return e?(0,gi.Mt)(this.contents,e):this.contents}override(e){let t=this.overrideConfigurations.get(e);return t||(t=this.createOverrideConfigurationModel(e),this.overrideConfigurations.set(e,t)),t}merge(...e){const t=ge.I8(this.contents),i=ge.I8(this.overrides),n=[...this.keys];for(const o of e){this.mergeContents(t,o.contents);for(const e of o.overrides){const[t]=i.filter((t=>bt.fS(t.identifiers,e.identifiers)));t?this.mergeContents(t.contents,e.contents):i.push(ge.I8(e))}for(const e of o.keys)-1===n.indexOf(e)&&n.push(e)}return new fi(t,n,i)}freeze(){return this.isFrozen=!0,this}createOverrideConfigurationModel(e){const t=this.getContentsForOverrideIdentifer(e);if(!t||"object"!=typeof t||!Object.keys(t).length)return this;let i={};for(const e of bt.EB([...Object.keys(this.contents),...Object.keys(t)])){let n=this.contents[e],o=t[e];o&&("object"==typeof n&&"object"==typeof o?(n=ge.I8(n),this.mergeContents(n,o)):n=o),i[e]=n}return new fi(i,this.keys,this.overrides)}mergeContents(e,t){for(const i of Object.keys(t))i in e&&Ne.Kn(e[i])&&Ne.Kn(t[i])?this.mergeContents(e[i],t[i]):e[i]=ge.I8(t[i])}checkAndFreeze(e){return this.isFrozen&&!Object.isFrozen(e)?ge._A(e):e}getContentsForOverrideIdentifer(e){for(const t of this.overrides)if(-1!==t.identifiers.indexOf(e))return t.contents;return null}toJSON(){return{contents:this.contents,overrides:this.overrides,keys:this.keys}}setValue(e,t){this.addKey(e),(0,gi.KV)(this.contents,e,t,(e=>{throw new Error(e)}))}removeValue(e){this.removeKey(e)&&(0,gi.xL)(this.contents,e)}addKey(e){let t=this.keys.length;for(let i=0;i<t;i++)0===e.indexOf(this.keys[i])&&(t=i);this.keys.splice(t,1,e)}removeKey(e){let t=this.keys.indexOf(e);return-1!==t&&(this.keys.splice(t,1),!0)}}class mi extends fi{constructor(){const e=(0,gi.O4)(),t=(0,gi.MR)(),i=[];for(const t of Object.keys(e))pi.G1.test(t)&&i.push({identifiers:[(0,pi.Uh)(t).trim()],keys:Object.keys(e[t]),contents:(0,gi.Od)(e[t],(e=>console.error(`Conflict in default settings file: ${e}`)))});super(e,t,i)}}class vi{constructor(e,t,i=new fi,n=new fi,o=new J.Y9,s=new fi,r=new J.Y9,a=!0){this._defaultConfiguration=e,this._localUserConfiguration=t,this._remoteUserConfiguration=i,this._workspaceConfiguration=n,this._folderConfigurations=o,this._memoryConfiguration=s,this._memoryConfigurationByResource=r,this._freeze=a,this._workspaceConsolidatedConfiguration=null,this._foldersConsolidatedConfigurations=new J.Y9,this._userConfiguration=null}getValue(e,t,i){return this.getConsolidateConfigurationModel(t,i).getValue(e)}updateValue(e,t,i={}){let n;i.resource?(n=this._memoryConfigurationByResource.get(i.resource),n||(n=new fi,this._memoryConfigurationByResource.set(i.resource,n))):n=this._memoryConfiguration,void 0===t?n.removeValue(e):n.setValue(e,t),i.resource||(this._workspaceConsolidatedConfiguration=null)}get userConfiguration(){return this._userConfiguration||(this._userConfiguration=this._remoteUserConfiguration.isEmpty()?this._localUserConfiguration:this._localUserConfiguration.merge(this._remoteUserConfiguration),this._freeze&&this._userConfiguration.freeze()),this._userConfiguration}getConsolidateConfigurationModel(e,t){let i=this.getConsolidatedConfigurationModelForResource(e,t);return e.overrideIdentifier?i.override(e.overrideIdentifier):i}getConsolidatedConfigurationModelForResource({resource:e},t){let i=this.getWorkspaceConsolidatedConfiguration();if(t&&e){const n=t.getFolder(e);n&&(i=this.getFolderConsolidatedConfiguration(n.uri)||i);const o=this._memoryConfigurationByResource.get(e);o&&(i=i.merge(o))}return i}getWorkspaceConsolidatedConfiguration(){return this._workspaceConsolidatedConfiguration||(this._workspaceConsolidatedConfiguration=this._defaultConfiguration.merge(this.userConfiguration,this._workspaceConfiguration,this._memoryConfiguration),this._freeze&&(this._workspaceConfiguration=this._workspaceConfiguration.freeze())),this._workspaceConsolidatedConfiguration}getFolderConsolidatedConfiguration(e){let t=this._foldersConsolidatedConfigurations.get(e);if(!t){const i=this.getWorkspaceConsolidatedConfiguration(),n=this._folderConfigurations.get(e);n?(t=i.merge(n),this._freeze&&(t=t.freeze()),this._foldersConsolidatedConfigurations.set(e,t)):t=i}return t}toData(){return{defaults:{contents:this._defaultConfiguration.contents,overrides:this._defaultConfiguration.overrides,keys:this._defaultConfiguration.keys},user:{contents:this.userConfiguration.contents,overrides:this.userConfiguration.overrides,keys:this.userConfiguration.keys},workspace:{contents:this._workspaceConfiguration.contents,overrides:this._workspaceConfiguration.overrides,keys:this._workspaceConfiguration.keys},folders:[...this._folderConfigurations.keys()].reduce(((e,t)=>{const{contents:i,overrides:n,keys:o}=this._folderConfigurations.get(t);return e.push([t,{contents:i,overrides:n,keys:o}]),e}),[])}}static parse(e){const t=this.parseConfigurationModel(e.defaults),i=this.parseConfigurationModel(e.user),n=this.parseConfigurationModel(e.workspace),o=e.folders.reduce(((e,t)=>(e.set(z.o.revive(t[0]),this.parseConfigurationModel(t[1])),e)),new J.Y9);return new vi(t,i,new fi,n,o,new fi,new J.Y9,!1)}static parseConfigurationModel(e){return new fi(e.contents,e.keys,e.overrides).freeze()}}class _i{constructor(e,t,i,n){this.change=e,this.previous=t,this.currentConfiguraiton=i,this.currentWorkspace=n,this._previousConfiguration=void 0;const o=new Set;e.keys.forEach((e=>o.add(e))),e.overrides.forEach((([,e])=>e.forEach((e=>o.add(e))))),this.affectedKeys=[...o.values()];const s=new fi;this.affectedKeys.forEach((e=>s.setValue(e,{}))),this.affectedKeysTree=s.contents}get previousConfiguration(){return!this._previousConfiguration&&this.previous&&(this._previousConfiguration=vi.parse(this.previous.data)),this._previousConfiguration}affectsConfiguration(e,t){var i;if(this.doesAffectedKeysTreeContains(this.affectedKeysTree,e)){if(t){const n=this.previousConfiguration?this.previousConfiguration.getValue(e,t,null===(i=this.previous)||void 0===i?void 0:i.workspace):void 0,o=this.currentConfiguraiton.getValue(e,t,this.currentWorkspace);return!ge.fS(n,o)}return!0}return!1}doesAffectedKeysTreeContains(e,t){let i,n=(0,gi.Od)({[t]:!0},(()=>{}));for(;"object"==typeof n&&(i=Object.keys(n)[0]);){if(!(e=e[i]))return!1;n=n[i]}return!0}}var bi=i(63580);const wi=/^(cursor|delete)/;class yi extends ue.JT{constructor(e,t,i,n,o){super(),this._contextKeyService=e,this._commandService=t,this._telemetryService=i,this._notificationService=n,this._logService=o,this._onDidUpdateKeybindings=this._register(new W.Q5),this._currentChord=null,this._currentChordChecker=new Se.zh,this._currentChordStatusMessage=null,this._ignoreSingleModifiers=Ci.EMPTY,this._currentSingleModifier=null,this._currentSingleModifierClearTimeout=new Se._F,this._logging=!1}get onDidUpdateKeybindings(){return this._onDidUpdateKeybindings?this._onDidUpdateKeybindings.event:W.ju.None}dispose(){super.dispose()}_log(e){this._logging&&this._logService.info(`[KeybindingService]: ${e}`)}getKeybindings(){return this._getResolver().getKeybindings()}lookupKeybinding(e,t){const i=this._getResolver().lookupPrimaryKeybinding(e,t||this._contextKeyService);if(i)return i.resolvedKeybinding}dispatchEvent(e,t){return this._dispatch(e,t)}softDispatch(e,t){const i=this.resolveKeyboardEvent(e);if(i.isChord())return console.warn("Unexpected keyboard event mapped to a chord"),null;const[n]=i.getDispatchParts();if(null===n)return null;const o=this._contextKeyService.getContext(t),s=this._currentChord?this._currentChord.keypress:null;return this._getResolver().resolve(o,s,n)}_enterChordMode(e,t){this._currentChord={keypress:e,label:t},this._currentChordStatusMessage=this._notificationService.status(bi.N("first.chord","({0}) was pressed. Waiting for second key of chord...",t));const i=Date.now();this._currentChordChecker.cancelAndSet((()=>{this._documentHasFocus()?Date.now()-i>5e3&&this._leaveChordMode():this._leaveChordMode()}),500)}_leaveChordMode(){this._currentChordStatusMessage&&(this._currentChordStatusMessage.dispose(),this._currentChordStatusMessage=null),this._currentChordChecker.cancel(),this._currentChord=null}_dispatch(e,t){return this._doDispatch(this.resolveKeyboardEvent(e),t,!1)}_singleModifierDispatch(e,t){const i=this.resolveKeyboardEvent(e),[n]=i.getSingleModifierDispatchParts();if(n)return this._ignoreSingleModifiers.has(n)?(this._log(`+ Ignoring single modifier ${n} due to it being pressed together with other keys.`),this._ignoreSingleModifiers=Ci.EMPTY,this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1):(this._ignoreSingleModifiers=Ci.EMPTY,null===this._currentSingleModifier?(this._log(`+ Storing single modifier for possible chord ${n}.`),this._currentSingleModifier=n,this._currentSingleModifierClearTimeout.cancelAndSet((()=>{this._log("+ Clearing single modifier due to 300ms elapsed."),this._currentSingleModifier=null}),300),!1):n===this._currentSingleModifier?(this._log(`/ Dispatching single modifier chord ${n} ${n}`),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,this._doDispatch(i,t,!0)):(this._log(`+ Clearing single modifier due to modifier mismatch: ${this._currentSingleModifier} ${n}`),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1));const[o]=i.getParts();return this._ignoreSingleModifiers=new Ci(o),null!==this._currentSingleModifier&&this._log("+ Clearing single modifier due to other key up."),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1}_doDispatch(e,t,i=!1){let n=!1;if(e.isChord())return console.warn("Unexpected keyboard event mapped to a chord"),!1;let o=null,s=null;if(i){const[t]=e.getSingleModifierDispatchParts();o=t,s=t}else[o]=e.getDispatchParts(),s=this._currentChord?this._currentChord.keypress:null;if(null===o)return this._log("\\ Keyboard event cannot be dispatched in keydown phase."),n;const r=this._contextKeyService.getContext(t),a=e.getLabel(),l=this._getResolver().resolve(r,s,o);return this._logService.trace("KeybindingService#dispatch",a,null==l?void 0:l.commandId),l&&l.enterChord?(n=!0,this._enterChordMode(o,a),n):(this._currentChord&&(l&&l.commandId||(this._notificationService.status(bi.N("missing.chord","The key combination ({0}, {1}) is not a command.",this._currentChord.label,a),{hideAfter:1e4}),n=!0)),this._leaveChordMode(),l&&l.commandId&&(l.bubble||(n=!0),void 0===l.commandArgs?this._commandService.executeCommand(l.commandId).then(void 0,(e=>this._notificationService.warn(e))):this._commandService.executeCommand(l.commandId,l.commandArgs).then(void 0,(e=>this._notificationService.warn(e))),wi.test(l.commandId)||this._telemetryService.publicLog2("workbenchActionExecuted",{id:l.commandId,from:"keybinding"})),n)}mightProducePrintableCharacter(e){return!e.ctrlKey&&!e.metaKey&&(e.keyCode>=31&&e.keyCode<=56||e.keyCode>=21&&e.keyCode<=30)}}class Ci{constructor(e){this._ctrlKey=!!e&&e.ctrlKey,this._shiftKey=!!e&&e.shiftKey,this._altKey=!!e&&e.altKey,this._metaKey=!!e&&e.metaKey}has(e){switch(e){case"ctrl":return this._ctrlKey;case"shift":return this._shiftKey;case"alt":return this._altKey;case"meta":return this._metaKey}}}Ci.EMPTY=new Ci(null);var xi=i(38819);class Si{constructor(e,t,i){this._log=i,this._defaultKeybindings=e,this._defaultBoundCommands=new Map;for(let t=0,i=e.length;t<i;t++){const i=e[t].command;i&&this._defaultBoundCommands.set(i,!0)}this._map=new Map,this._lookupMap=new Map,this._keybindings=Si.combine(e,t);for(let e=0,t=this._keybindings.length;e<t;e++){let t=this._keybindings[e];0!==t.keypressParts.length&&(t.when&&0===t.when.type||this._addKeyPress(t.keypressParts[0],t))}}static _isTargetedForRemoval(e,t,i,n,o){if(e.command!==n)return!1;if(t&&e.keypressParts[0]!==t)return!1;if(i&&e.keypressParts[1]!==i)return!1;if(o){if(!e.when)return!1;if(!(0,xi.Fb)(o,e.when))return!1}return!0}static combine(e,t){e=e.slice(0);let i=[];for(const n of t){if(!n.command||0===n.command.length||"-"!==n.command.charAt(0)){i.push(n);continue}const t=n.command.substr(1),o=n.keypressParts[0],s=n.keypressParts[1],r=n.when;for(let i=e.length-1;i>=0;i--)this._isTargetedForRemoval(e[i],o,s,t,r)&&e.splice(i,1)}return e.concat(i)}_addKeyPress(e,t){const i=this._map.get(e);if(void 0===i)return this._map.set(e,[t]),void this._addToLookupMap(t);for(let e=i.length-1;e>=0;e--){let n=i[e];if(n.command===t.command)continue;const o=n.keypressParts.length>1,s=t.keypressParts.length>1;o&&s&&n.keypressParts[1]!==t.keypressParts[1]||Si.whenIsEntirelyIncluded(n.when,t.when)&&this._removeFromLookupMap(n)}i.push(t),this._addToLookupMap(t)}_addToLookupMap(e){if(!e.command)return;let t=this._lookupMap.get(e.command);void 0===t?(t=[e],this._lookupMap.set(e.command,t)):t.push(e)}_removeFromLookupMap(e){if(!e.command)return;let t=this._lookupMap.get(e.command);if(void 0!==t)for(let i=0,n=t.length;i<n;i++)if(t[i]===e)return void t.splice(i,1)}static whenIsEntirelyIncluded(e,t){return!t||1===t.type||!(!e||1===e.type)&&(0,xi.K8)(e,t)}getKeybindings(){return this._keybindings}lookupPrimaryKeybinding(e,t){const i=this._lookupMap.get(e);if(void 0===i||0===i.length)return null;if(1===i.length)return i[0];for(let e=i.length-1;e>=0;e--){const n=i[e];if(t.contextMatchesRules(n.when))return n}return i[i.length-1]}resolve(e,t,i){this._log(`| Resolving ${i}${t?` chorded from ${t}`:""}`);let n=null;if(null!==t){const e=this._map.get(t);if(void 0===e)return this._log("\\ No keybinding entries."),null;n=[];for(let t=0,o=e.length;t<o;t++){let o=e[t];o.keypressParts[1]===i&&n.push(o)}}else{const e=this._map.get(i);if(void 0===e)return this._log("\\ No keybinding entries."),null;n=e}let o=this._findCommand(e,n);return o?null===t&&o.keypressParts.length>1&&null!==o.keypressParts[1]?(this._log(`\\ From ${n.length} keybinding entries, matched chord, when: ${ki(o.when)}, source: ${Li(o)}.`),{enterChord:!0,leaveChord:!1,commandId:null,commandArgs:null,bubble:!1}):(this._log(`\\ From ${n.length} keybinding entries, matched ${o.command}, when: ${ki(o.when)}, source: ${Li(o)}.`),{enterChord:!1,leaveChord:o.keypressParts.length>1,commandId:o.command,commandArgs:o.commandArgs,bubble:o.bubble}):(this._log(`\\ From ${n.length} keybinding entries, no when clauses matched the context.`),null)}_findCommand(e,t){for(let i=t.length-1;i>=0;i--){let n=t[i];if(Si.contextMatchesRules(e,n.when))return n}return null}static contextMatchesRules(e,t){return!t||t.evaluate(e)}}function ki(e){return e?`${e.serialize()}`:"no when condition"}function Li(e){return e.extensionId?e.isBuiltinExtension?`built-in extension ${e.extensionId}`:`user extension ${e.extensionId}`:e.isDefault?"built-in":"user"}var Ni=i(49989);class Di{constructor(e,t,i,n,o,s,r){this._resolvedKeybindingItemBrand=void 0,this.resolvedKeybinding=e,this.keypressParts=e?Ii(e.getDispatchParts()):[],e&&0===this.keypressParts.length&&(this.keypressParts=Ii(e.getSingleModifierDispatchParts())),this.bubble=!!t&&94===t.charCodeAt(0),this.command=this.bubble?t.substr(1):t,this.commandArgs=i,this.when=n,this.isDefault=o,this.extensionId=s,this.isBuiltinExtension=r}}function Ii(e){let t=[];for(let i=0,n=e.length;i<n;i++){const n=e[i];if(!n)return t;t.push(n)}return t}var Ei=i(8030);class Ti extends ai.f1{constructor(e,t){if(super(),0===t.length)throw(0,ke.b1)("parts");this._os=e,this._parts=t}getLabel(){return Ei.xo.toLabel(this._os,this._parts,(e=>this._getLabel(e)))}getAriaLabel(){return Ei.X4.toLabel(this._os,this._parts,(e=>this._getAriaLabel(e)))}getElectronAccelerator(){return this._parts.length>1||this._parts[0].isDuplicateModifierCase()?null:Ei.jC.toLabel(this._os,this._parts,(e=>this._getElectronAccelerator(e)))}isChord(){return this._parts.length>1}getParts(){return this._parts.map((e=>this._getPart(e)))}_getPart(e){return new ai.BQ(e.ctrlKey,e.shiftKey,e.altKey,e.metaKey,this._getLabel(e),this._getAriaLabel(e))}getDispatchParts(){return this._parts.map((e=>this._getDispatchPart(e)))}getSingleModifierDispatchParts(){return this._parts.map((e=>this._getSingleModifierDispatchPart(e)))}}class Mi extends Ti{constructor(e,t){super(t,e.parts)}_keyCodeToUILabel(e){if(2===this._os)switch(e){case 15:return"â†";case 16:return"â†‘";case 17:return"â†’";case 18:return"â†“"}return H.kL.toString(e)}_getLabel(e){return e.isDuplicateModifierCase()?"":this._keyCodeToUILabel(e.keyCode)}_getAriaLabel(e){return e.isDuplicateModifierCase()?"":H.kL.toString(e.keyCode)}_getElectronAccelerator(e){return H.kL.toElectronAccelerator(e.keyCode)}_getDispatchPart(e){return Mi.getDispatchStr(e)}static getDispatchStr(e){if(e.isModifierKey())return null;let t="";return e.ctrlKey&&(t+="ctrl+"),e.shiftKey&&(t+="shift+"),e.altKey&&(t+="alt+"),e.metaKey&&(t+="meta+"),t+=H.kL.toString(e.keyCode),t}_getSingleModifierDispatchPart(e){return 5!==e.keyCode||e.shiftKey||e.altKey||e.metaKey?4!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey?6!==e.keyCode||e.ctrlKey||e.shiftKey||e.metaKey?57!==e.keyCode||e.ctrlKey||e.shiftKey||e.altKey?null:"meta":"alt":"shift":"ctrl"}static _scanCodeToKeyCode(e){const t=H.Vd[e];if(-1!==t)return t;switch(e){case 10:return 31;case 11:return 32;case 12:return 33;case 13:return 34;case 14:return 35;case 15:return 36;case 16:return 37;case 17:return 38;case 18:return 39;case 19:return 40;case 20:return 41;case 21:return 42;case 22:return 43;case 23:return 44;case 24:return 45;case 25:return 46;case 26:return 47;case 27:return 48;case 28:return 49;case 29:return 50;case 30:return 51;case 31:return 52;case 32:return 53;case 33:return 54;case 34:return 55;case 35:return 56;case 36:return 22;case 37:return 23;case 38:return 24;case 39:return 25;case 40:return 26;case 41:return 27;case 42:return 28;case 43:return 29;case 44:return 30;case 45:return 21;case 51:return 83;case 52:return 81;case 53:return 87;case 54:return 89;case 55:return 88;case 56:return 0;case 57:return 80;case 58:return 90;case 59:return 86;case 60:return 82;case 61:return 84;case 62:return 85;case 106:return 92}return 0}static _resolveSimpleUserBinding(e){if(!e)return null;if(e instanceof ai.QC)return e;const t=this._scanCodeToKeyCode(e.scanCode);return 0===t?null:new ai.QC(e.ctrlKey,e.shiftKey,e.altKey,e.metaKey,t)}static resolveUserBinding(e,t){const i=Ii(e.map((e=>this._resolveSimpleUserBinding(e))));return i.length>0?[new Mi(new ai.X_(i),t)]:[]}}var Ai=i(59422),Oi=i(40382),Pi=i(20913),Ri=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Fi=function(e,t){return function(i,n){t(i,n,e)}},Bi=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class Vi{constructor(e){this.disposed=!1,this.model=e,this._onWillDispose=new W.Q5}get textEditorModel(){return this.model}dispose(){this.disposed=!0,this._onWillDispose.fire()}}let Wi=class{constructor(e){this.modelService=e}setEditor(e){this.editor=e}createModelReference(e){let t=null;var i,n,o;return this.editor&&(i=this.editor,n=t=>this.findModel(t,e),o=t=>this.findModel(t.getOriginalEditor(),e)||this.findModel(t.getModifiedEditor(),e),t=(0,ci.CL)(i)?n(i):o(i)),t?Promise.resolve(new ue.Jz(new Vi(t))):Promise.reject(new Error("Model not found"))}findModel(e,t){let i=this.modelService.getModel(t);return i&&i.uri.toString()!==t.toString()?null:i}};Wi=Ri([Fi(0,vt.q)],Wi);class Hi{show(){return Hi.NULL_PROGRESS_RUNNER}showWhile(e,t){return Bi(this,void 0,void 0,(function*(){yield e}))}}Hi.NULL_PROGRESS_RUNNER={done:()=>{},total:()=>{},worked:()=>{}};class zi{confirm(e){return this.doConfirm(e).then((e=>({confirmed:e,checkboxChecked:!1})))}doConfirm(e){let t=e.message;return e.detail&&(t=t+"\n\n"+e.detail),Promise.resolve(window.confirm(t))}show(e,t,i,n){return Promise.resolve({choice:0})}}class ji{info(e){return this.notify({severity:li.Z.Info,message:e})}warn(e){return this.notify({severity:li.Z.Warning,message:e})}error(e){return this.notify({severity:li.Z.Error,message:e})}notify(e){switch(e.severity){case li.Z.Error:console.error(e.message);break;case li.Z.Warning:console.warn(e.message);break;default:console.log(e.message)}return ji.NO_OP}status(e,t){return ue.JT.None}}ji.NO_OP=new Ai.EO;class Ui{constructor(e){this._onWillExecuteCommand=new W.Q5,this._onDidExecuteCommand=new W.Q5,this.onDidExecuteCommand=this._onDidExecuteCommand.event,this._instantiationService=e}executeCommand(e,...t){const i=ne.P.getCommand(e);if(!i)return Promise.reject(new Error(`command '${e}' not found`));try{this._onWillExecuteCommand.fire({commandId:e,args:t});const n=this._instantiationService.invokeFunction.apply(this._instantiationService,[i.handler,...t]);return this._onDidExecuteCommand.fire({commandId:e,args:t}),Promise.resolve(n)}catch(e){return Promise.reject(e)}}}class $i extends yi{constructor(e,t,i,n,o,s){super(e,t,i,n,o),this._cachedResolver=null,this._dynamicKeybindings=[],this._register(Q.nm(s,Q.tw.KEY_DOWN,(e=>{const t=new ri.y(e);this._dispatch(t,t.target)&&(t.preventDefault(),t.stopPropagation())}))),this._register(Q.nm(window,Q.tw.KEY_UP,(e=>{const t=new ri.y(e);this._singleModifierDispatch(t,t.target)&&t.preventDefault()})))}addDynamicKeybinding(e,t,i,n){const o=(0,ai.gm)(t,Le.OS),s=new ue.SL;return o&&(this._dynamicKeybindings.push({keybinding:o.parts,command:e,when:n,weight1:1e3,weight2:0,extensionId:null,isBuiltinExtension:!1}),s.add((0,ue.OF)((()=>{for(let t=0;t<this._dynamicKeybindings.length;t++){if(this._dynamicKeybindings[t].command===e)return this._dynamicKeybindings.splice(t,1),void this.updateResolver({source:1})}})))),s.add(ne.P.registerCommand(e,i)),this.updateResolver({source:1}),s}updateResolver(e){this._cachedResolver=null,this._onDidUpdateKeybindings.fire(e)}_getResolver(){if(!this._cachedResolver){const e=this._toNormalizedKeybindingItems(Ni.W.getDefaultKeybindings(),!0),t=this._toNormalizedKeybindingItems(this._dynamicKeybindings,!1);this._cachedResolver=new Si(e,t,(e=>this._log(e)))}return this._cachedResolver}_documentHasFocus(){return document.hasFocus()}_toNormalizedKeybindingItems(e,t){let i=[],n=0;for(const o of e){const e=o.when||void 0,s=o.keybinding;if(s){const r=Mi.resolveUserBinding(s,Le.OS);for(const s of r)i[n++]=new Di(s,o.command,o.commandArgs,e,t,null,!1)}else i[n++]=new Di(void 0,o.command,o.commandArgs,e,t,null,!1)}return i}resolveKeyboardEvent(e){let t=new ai.QC(e.ctrlKey,e.shiftKey,e.altKey,e.metaKey,e.keyCode).toChord();return new Mi(t,Le.OS)}}function Ki(e){return e&&"object"==typeof e&&(!e.overrideIdentifier||"string"==typeof e.overrideIdentifier)&&(!e.resource||e.resource instanceof z.o)}class qi{constructor(){this._onDidChangeConfiguration=new W.Q5,this.onDidChangeConfiguration=this._onDidChangeConfiguration.event,this._configuration=new vi(new mi,new fi)}getValue(e,t){const i="string"==typeof e?e:void 0,n=Ki(e)?e:Ki(t)?t:{};return this._configuration.getValue(i,n,void 0)}updateValues(e){const t={data:this._configuration.toData()};let i=[];for(const t of e){const[e,n]=t;this.getValue(e)!==n&&(this._configuration.updateValue(e,n),i.push(e))}if(i.length>0){const e=new _i({keys:i,overrides:[]},t,this._configuration);e.source=7,e.sourceConfig=null,this._onDidChangeConfiguration.fire(e)}return Promise.resolve()}}class Zi{constructor(e){this.configurationService=e,this._onDidChangeConfiguration=new W.Q5,this.configurationService.onDidChangeConfiguration((e=>{this._onDidChangeConfiguration.fire({affectedKeys:e.affectedKeys,affectsConfiguration:(t,i)=>e.affectsConfiguration(i)})}))}getValue(e,t,i){const n=(j.L.isIPosition(t)?t:null)?"string"==typeof i?i:void 0:"string"==typeof t?t:void 0;return void 0===n?this.configurationService.getValue():this.configurationService.getValue(n)}}let Gi=class{constructor(e){this.configurationService=e}getEOL(e,t){const i=this.configurationService.getValue("files.eol",{overrideIdentifier:t,resource:e});return i&&"string"==typeof i&&"auto"!==i?i:Le.IJ||Le.dz?"\n":"\r\n"}};Gi=Ri([Fi(0,gi.Ui)],Gi);class Yi{publicLog(e,t){return Promise.resolve(void 0)}publicLog2(e,t){return this.publicLog(e,t)}}class Qi{constructor(){const e=z.o.from({scheme:Qi.SCHEME,authority:"model",path:"/"});this.workspace={id:"4064f6ec-cb38-4ad0-af64-ee6467e63c82",folders:[new Oi.md({uri:e,name:"",index:0})]}}getWorkspace(){return this.workspace}}function Xi(e,t,i){if(!t)return;if(!(e instanceof qi))return;let n=[];Object.keys(t).forEach((e=>{(0,hi.ei)(e)&&n.push([`editor.${e}`,t[e]]),i&&(0,hi.Pe)(e)&&n.push([`diffEditor.${e}`,t[e]])})),n.length>0&&e.updateValues(n)}Qi.SCHEME="inmemory";class Ji{constructor(e){this._modelService=e}hasPreviewHandler(){return!1}apply(e,t){return Bi(this,void 0,void 0,(function*(){const t=new Map;for(let i of e){if(!(i instanceof di.Gl))throw new Error("bad edit - only text edits are supported");const e=this._modelService.getModel(i.resource);if(!e)throw new Error("bad edit - model not found");if("number"==typeof i.versionId&&e.getVersionId()!==i.versionId)throw new Error("bad state - model changed in the meantime");let n=t.get(e);n||(n=[],t.set(e,n)),n.push(ui.h.replaceMove(U.e.lift(i.textEdit.range),i.textEdit.text))}let i=0,n=0;for(const[e,o]of t)e.pushStackElement(),e.pushEditOperations([],o,(()=>[])),e.pushStackElement(),n+=1,i+=o.length;return{ariaSummary:De.WU(Pi.UL.bulkEditServiceSummary,i,n)}}))}}class en{getUriLabel(e,t){return"file"===e.scheme?e.fsPath:e.path}}class tn{constructor(e,t){this._codeEditorService=e,this._container=t,this.onDidLayout=W.ju.None}get dimension(){return this._dimension||(this._dimension=Q.D6(window.document.body)),this._dimension}get container(){return this._container}focus(){var e;null===(e=this._codeEditorService.getFocusedCodeEditor())||void 0===e||e.focus()}}var nn,on=i(85152),sn=i(32073),rn=(i(67771),i(38626)),an=i(73098),ln=i(89052),cn=i(39925),dn=(i(62460),i(90317)),hn=i(9802),un=i(74741),gn=i(16830),pn=i(27869),fn=i(73910),mn=i(97781),vn=i(73046),_n=i(59554),bn=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},wn=function(e,t){return function(i,n){t(i,n,e)}},yn=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class Cn{constructor(e,t,i,n){this.originalLineStart=e,this.originalLineEnd=t,this.modifiedLineStart=i,this.modifiedLineEnd=n}getType(){return 0===this.originalLineStart?1:0===this.modifiedLineStart?2:0}}class xn{constructor(e){this.entries=e}}const Sn=(0,_n.q5)("diff-review-insert",vn.lA.add,bi.N("diffReviewInsertIcon","Icon for 'Insert' in diff review.")),kn=(0,_n.q5)("diff-review-remove",vn.lA.remove,bi.N("diffReviewRemoveIcon","Icon for 'Remove' in diff review.")),Ln=(0,_n.q5)("diff-review-close",vn.lA.close,bi.N("diffReviewCloseIcon","Icon for 'Close' in diff review."));let Nn=class e extends ue.JT{constructor(e,t){super(),this._modeService=t,this._width=0,this._diffEditor=e,this._isVisible=!1,this.shadow=(0,rn.X)(document.createElement("div")),this.shadow.setClassName("diff-review-shadow"),this.actionBarContainer=(0,rn.X)(document.createElement("div")),this.actionBarContainer.setClassName("diff-review-actions"),this._actionBar=this._register(new dn.o(this.actionBarContainer.domNode)),this._actionBar.push(new un.aU("diffreview.close",bi.N("label.close","Close"),"close-diff-review "+mn.kS.asClassName(Ln),!0,(()=>yn(this,void 0,void 0,(function*(){return this.hide()})))),{label:!1,icon:!0}),this.domNode=(0,rn.X)(document.createElement("div")),this.domNode.setClassName("diff-review monaco-editor-background"),this._content=(0,rn.X)(document.createElement("div")),this._content.setClassName("diff-review-content"),this._content.setAttribute("role","code"),this.scrollbar=this._register(new hn.s$(this._content.domNode,{})),this.domNode.domNode.appendChild(this.scrollbar.getDomNode()),this._register(e.onDidUpdateDiff((()=>{this._isVisible&&(this._diffs=this._compute(),this._render())}))),this._register(e.getModifiedEditor().onDidChangeCursorPosition((()=>{this._isVisible&&this._render()}))),this._register(Q.mu(this.domNode.domNode,"click",(e=>{e.preventDefault();let t=Q.Fx(e.target,"diff-review-row");t&&this._goToRow(t)}))),this._register(Q.mu(this.domNode.domNode,"keydown",(e=>{(e.equals(18)||e.equals(2066)||e.equals(530))&&(e.preventDefault(),this._goToRow(this._getNextRow())),(e.equals(16)||e.equals(2064)||e.equals(528))&&(e.preventDefault(),this._goToRow(this._getPrevRow())),(e.equals(9)||e.equals(2057)||e.equals(521)||e.equals(1033))&&(e.preventDefault(),this.hide()),(e.equals(10)||e.equals(3))&&(e.preventDefault(),this.accept())}))),this._diffs=[],this._currentDiff=null}prev(){let e=0;if(this._isVisible||(this._diffs=this._compute()),this._isVisible){let t=-1;for(let e=0,i=this._diffs.length;e<i;e++)if(this._diffs[e]===this._currentDiff){t=e;break}e=this._diffs.length+t-1}else e=this._findDiffIndex(this._diffEditor.getPosition());if(0===this._diffs.length)return;e%=this._diffs.length;const t=this._diffs[e].entries;this._diffEditor.setPosition(new j.L(t[0].modifiedLineStart,1)),this._diffEditor.setSelection({startColumn:1,startLineNumber:t[0].modifiedLineStart,endColumn:1073741824,endLineNumber:t[t.length-1].modifiedLineEnd}),this._isVisible=!0,this._diffEditor.doLayout(),this._render(),this._goToRow(this._getNextRow())}next(){let e=0;if(this._isVisible||(this._diffs=this._compute()),this._isVisible){let t=-1;for(let e=0,i=this._diffs.length;e<i;e++)if(this._diffs[e]===this._currentDiff){t=e;break}e=t+1}else e=this._findDiffIndex(this._diffEditor.getPosition());if(0===this._diffs.length)return;e%=this._diffs.length;const t=this._diffs[e].entries;this._diffEditor.setPosition(new j.L(t[0].modifiedLineStart,1)),this._diffEditor.setSelection({startColumn:1,startLineNumber:t[0].modifiedLineStart,endColumn:1073741824,endLineNumber:t[t.length-1].modifiedLineEnd}),this._isVisible=!0,this._diffEditor.doLayout(),this._render(),this._goToRow(this._getNextRow())}accept(){let e=-1,t=this._getCurrentFocusedRow();if(t){let i=parseInt(t.getAttribute("data-line"),10);isNaN(i)||(e=i)}this.hide(),-1!==e&&(this._diffEditor.setPosition(new j.L(e,1)),this._diffEditor.revealPosition(new j.L(e,1),1))}hide(){this._isVisible=!1,this._diffEditor.updateOptions({readOnly:!1}),this._diffEditor.focus(),this._diffEditor.doLayout(),this._render()}_getPrevRow(){let e=this._getCurrentFocusedRow();return e?e.previousElementSibling?e.previousElementSibling:e:this._getFirstRow()}_getNextRow(){let e=this._getCurrentFocusedRow();return e?e.nextElementSibling?e.nextElementSibling:e:this._getFirstRow()}_getFirstRow(){return this.domNode.domNode.querySelector(".diff-review-row")}_getCurrentFocusedRow(){let e=document.activeElement;return e&&/diff-review-row/.test(e.className)?e:null}_goToRow(e){let t=this._getCurrentFocusedRow();e.tabIndex=0,e.focus(),t&&t!==e&&(t.tabIndex=-1),this.scrollbar.scanDomNode()}isVisible(){return this._isVisible}layout(e,t,i){this._width=t,this.shadow.setTop(e-6),this.shadow.setWidth(t),this.shadow.setHeight(this._isVisible?6:0),this.domNode.setTop(e),this.domNode.setWidth(t),this.domNode.setHeight(i),this._content.setHeight(i),this._content.setWidth(t),this._isVisible?(this.actionBarContainer.setAttribute("aria-hidden","false"),this.actionBarContainer.setDisplay("block")):(this.actionBarContainer.setAttribute("aria-hidden","true"),this.actionBarContainer.setDisplay("none"))}_compute(){const t=this._diffEditor.getLineChanges();if(!t||0===t.length)return[];const i=this._diffEditor.getOriginalEditor().getModel(),n=this._diffEditor.getModifiedEditor().getModel();return i&&n?e._mergeAdjacent(t,i.getLineCount(),n.getLineCount()):[]}static _mergeAdjacent(e,t,i){if(!e||0===e.length)return[];let n=[],o=0;for(let s=0,r=e.length;s<r;s++){const a=e[s],l=a.originalStartLineNumber,c=a.originalEndLineNumber,d=a.modifiedStartLineNumber,h=a.modifiedEndLineNumber;let u=[],g=0;{const t=0===c?l:l-1,i=0===h?d:d-1;let n=1,o=1;if(s>0){const t=e[s-1];n=0===t.originalEndLineNumber?t.originalStartLineNumber+1:t.originalEndLineNumber+1,o=0===t.modifiedEndLineNumber?t.modifiedStartLineNumber+1:t.modifiedEndLineNumber+1}let r=t-3+1,a=i-3+1;if(r<n){const e=n-r;r+=e,a+=e}if(a<o){const e=o-a;r+=e,a+=e}u[g++]=new Cn(r,t,a,i)}0!==c&&(u[g++]=new Cn(l,c,0,0)),0!==h&&(u[g++]=new Cn(0,0,d,h));{const n=0===c?l+1:c+1,o=0===h?d+1:h+1;let a=t,p=i;if(s+1<r){const t=e[s+1];a=0===t.originalEndLineNumber?t.originalStartLineNumber:t.originalStartLineNumber-1,p=0===t.modifiedEndLineNumber?t.modifiedStartLineNumber:t.modifiedStartLineNumber-1}let f=n+3-1,m=o+3-1;if(f>a){const e=a-f;f+=e,m+=e}if(m>p){const e=p-m;f+=e,m+=e}u[g++]=new Cn(n,f,o,m)}n[o++]=new xn(u)}let s=n[0].entries,r=[],a=0;for(let e=1,t=n.length;e<t;e++){const t=n[e].entries,i=s[s.length-1],o=t[0];0===i.getType()&&0===o.getType()&&o.originalLineStart<=i.originalLineEnd?(s[s.length-1]=new Cn(i.originalLineStart,o.originalLineEnd,i.modifiedLineStart,o.modifiedLineEnd),s=s.concat(t.slice(1))):(r[a++]=new xn(s),s=t)}return r[a++]=new xn(s),r}_findDiffIndex(e){const t=e.lineNumber;for(let e=0,i=this._diffs.length;e<i;e++){const i=this._diffs[e].entries;if(t<=i[i.length-1].modifiedLineEnd)return e}return 0}_render(){const t=this._diffEditor.getOriginalEditor().getOptions(),i=this._diffEditor.getModifiedEditor().getOptions(),n=this._diffEditor.getOriginalEditor().getModel(),o=this._diffEditor.getModifiedEditor().getModel(),s=n.getOptions(),r=o.getOptions();if(!this._isVisible||!n||!o)return Q.PO(this._content.domNode),this._currentDiff=null,void this.scrollbar.scanDomNode();this._diffEditor.updateOptions({readOnly:!0});const a=this._findDiffIndex(this._diffEditor.getPosition());if(this._diffs[a]===this._currentDiff)return;this._currentDiff=this._diffs[a];const l=this._diffs[a].entries;let c=document.createElement("div");c.className="diff-review-table",c.setAttribute("role","list"),c.setAttribute("aria-label",'Difference review. Use "Stage | Unstage | Revert Selected Ranges" commands'),ln.V.applyFontInfoSlow(c,i.get(43));let d=0,h=0,u=0,g=0;for(let e=0,t=l.length;e<t;e++){const t=l[e],i=t.originalLineStart,n=t.originalLineEnd,o=t.modifiedLineStart,s=t.modifiedLineEnd;0!==i&&(0===d||i<d)&&(d=i),0!==n&&(0===h||n>h)&&(h=n),0!==o&&(0===u||o<u)&&(u=o),0!==s&&(0===g||s>g)&&(g=s)}let p=document.createElement("div");p.className="diff-review-row";let f=document.createElement("div");f.className="diff-review-cell diff-review-summary";const m=h-d+1,v=g-u+1;f.appendChild(document.createTextNode(`${a+1}/${this._diffs.length}: @@ -${d},${m} +${u},${v} @@`)),p.setAttribute("data-line",String(u));const _=e=>0===e?bi.N("no_lines_changed","no lines changed"):1===e?bi.N("one_line_changed","1 line changed"):bi.N("more_lines_changed","{0} lines changed",e),b=_(m),w=_(v);p.setAttribute("aria-label",bi.N({key:"header",comment:["This is the ARIA label for a git diff header.","A git diff header looks like this: @@ -154,12 +159,39 @@.","That encodes that at original line 154 (which is now line 159), 12 lines were removed/changed with 39 lines.","Variables 0 and 1 refer to the diff index out of total number of diffs.","Variables 2 and 4 will be numbers (a line number).",'Variables 3 and 5 will be "no lines changed", "1 line changed" or "X lines changed", localized separately.']},"Difference {0} of {1}: original line {2}, {3}, modified line {4}, {5}",a+1,this._diffs.length,d,b,u,w)),p.appendChild(f),p.setAttribute("role","listitem"),c.appendChild(p);const y=i.get(58);let C=u;for(let a=0,d=l.length;a<d;a++){const d=l[a];e._renderSection(c,d,C,y,this._width,t,n,s,i,o,r,this._modeService.languageIdCodec),0!==d.modifiedLineStart&&(C=d.modifiedLineEnd)}Q.PO(this._content.domNode),this._content.domNode.appendChild(c),this.scrollbar.scanDomNode()}static _renderSection(t,i,n,o,s,r,a,l,c,d,h,u){const g=i.getType();let p="diff-review-row",f="";let m=null;switch(g){case 1:p="diff-review-row line-insert",f=" char-insert",m=Sn;break;case 2:p="diff-review-row line-delete",f=" char-delete",m=kn}const v=i.originalLineStart,_=i.originalLineEnd,b=i.modifiedLineStart,w=i.modifiedLineEnd,y=Math.max(w-b,_-v),C=r.get(129),x=C.glyphMarginWidth+C.lineNumbersWidth,S=c.get(129),k=10+S.glyphMarginWidth+S.lineNumbersWidth;for(let i=0;i<=y;i++){const _=0===v?0:v+i,w=0===b?0:b+i,y=document.createElement("div");y.style.minWidth=s+"px",y.className=p,y.setAttribute("role","listitem"),0!==w&&(n=w),y.setAttribute("data-line",String(n));let C=document.createElement("div");C.className="diff-review-cell",C.style.height=`${o}px`,y.appendChild(C);const S=document.createElement("span");S.style.width=x+"px",S.style.minWidth=x+"px",S.className="diff-review-line-number"+f,0!==_?S.appendChild(document.createTextNode(String(_))):S.innerText="Â ",C.appendChild(S);const L=document.createElement("span");L.style.width=k+"px",L.style.minWidth=k+"px",L.style.paddingRight="10px",L.className="diff-review-line-number"+f,0!==w?L.appendChild(document.createTextNode(String(w))):L.innerText="Â ",C.appendChild(L);const N=document.createElement("span");if(N.className="diff-review-spacer",m){const e=document.createElement("span");e.className=mn.kS.asClassName(m),e.innerText="Â Â ",N.appendChild(e)}else N.innerText="Â Â ";let D;if(C.appendChild(N),0!==w){let t=this._renderLine(d,c,h.tabSize,w,u);e._ttPolicy&&(t=e._ttPolicy.createHTML(t)),C.insertAdjacentHTML("beforeend",t),D=d.getLineContent(w)}else{let t=this._renderLine(a,r,l.tabSize,_,u);e._ttPolicy&&(t=e._ttPolicy.createHTML(t)),C.insertAdjacentHTML("beforeend",t),D=a.getLineContent(_)}0===D.length&&(D=bi.N("blankLine","blank"));let I="";switch(g){case 0:I=_===w?bi.N({key:"unchangedLine",comment:["The placeholders are contents of the line and should not be translated."]},"{0} unchanged line {1}",D,_):bi.N("equalLine","{0} original line {1} modified line {2}",D,_,w);break;case 1:I=bi.N("insertLine","+ {0} modified line {1}",D,w);break;case 2:I=bi.N("deleteLine","- {0} original line {1}",D,_)}y.setAttribute("aria-label",I),t.appendChild(y)}}static _renderLine(e,t,i,n,o){const s=e.getLineContent(n),r=t.get(43),a=Ot.A.createEmpty(s,o),l=Rt.wA.isBasicASCII(s,e.mightContainNonBasicASCII()),c=Rt.wA.containsRTL(s,l,e.mightContainRTL());return(0,Pt.tF)(new Pt.IJ(r.isMonospace&&!t.get(29),r.canUseHalfwidthRightwardsArrow,s,!1,l,c,0,a,[],i,0,r.spaceWidth,r.middotWidth,r.wsmiddotWidth,t.get(104),t.get(87),t.get(82),t.get(44)!==B.n0.OFF,null)).html}};Nn._ttPolicy=null===(nn=window.trustedTypes)||void 0===nn?void 0:nn.createPolicy("diffReview",{createHTML:e=>e}),Nn=bn([wn(1,Ce.h)],Nn),(0,mn.Ic)(((e,t)=>{const i=e.getColor(pn.hw);i&&t.addRule(`.monaco-diff-editor .diff-review-line-number { color: ${i}; }`);const n=e.getColor(fn._w);n&&t.addRule(`.monaco-diff-editor .diff-review-shadow { box-shadow: ${n} 0 -6px 6px -6px inset; }`)}));class Dn extends gn.R6{constructor(){super({id:"editor.action.diffReview.next",label:bi.N("editor.action.diffReview.next","Go to Next Difference"),alias:"Go to Next Difference",precondition:xi.Ao.has("isInDiffEditor"),kbOpts:{kbExpr:null,primary:65,weight:100}})}run(e,t){const i=En(e);i&&i.diffReviewNext()}}class In extends gn.R6{constructor(){super({id:"editor.action.diffReview.prev",label:bi.N("editor.action.diffReview.prev","Go to Previous Difference"),alias:"Go to Previous Difference",precondition:xi.Ao.has("isInDiffEditor"),kbOpts:{kbExpr:null,primary:1089,weight:100}})}run(e,t){const i=En(e);i&&i.diffReviewPrev()}}function En(e){const t=e.get(Y.$),i=t.listDiffEditors(),n=t.getActiveCodeEditor();if(!n)return null;for(let e=0,t=i.length;e<t;e++){const t=i[e];if(t.getModifiedEditor().getId()===n.getId()||t.getOriginalEditor().getId()===n.getId())return t}return null}(0,gn.Qr)(Dn),(0,gn.Qr)(In);var Tn=i(50072),Mn=i(44174),An=i(92003),On=i(92550),Pn=i(72065),Rn=i(60972),Fn=i(5606),Bn=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class Vn extends ue.JT{constructor(e,t,i,n,o,s){super(),this._viewZoneId=e,this._marginDomNode=t,this.editor=i,this.diff=n,this._contextMenuService=o,this._clipboardService=s,this._visibility=!1,this._marginDomNode.style.zIndex="10",this._diffActions=document.createElement("div"),this._diffActions.className=vn.lA.lightBulb.classNames+" lightbulb-glyph",this._diffActions.style.position="absolute";const r=i.getOption(58),a=i.getModel().getEOL();this._diffActions.style.right="0px",this._diffActions.style.visibility="hidden",this._diffActions.style.height=`${r}px`,this._diffActions.style.lineHeight=`${r}px`,this._marginDomNode.appendChild(this._diffActions);const l=[],c=0===n.modifiedEndLineNumber;l.push(new un.aU("diff.clipboard.copyDeletedContent",c?n.originalEndLineNumber>n.modifiedStartLineNumber?bi.N("diff.clipboard.copyDeletedLinesContent.label","Copy deleted lines"):bi.N("diff.clipboard.copyDeletedLinesContent.single.label","Copy deleted line"):n.originalEndLineNumber>n.modifiedStartLineNumber?bi.N("diff.clipboard.copyChangedLinesContent.label","Copy changed lines"):bi.N("diff.clipboard.copyChangedLinesContent.single.label","Copy changed line"),void 0,!0,(()=>Bn(this,void 0,void 0,(function*(){const e=new U.e(n.originalStartLineNumber,1,n.originalEndLineNumber+1,1),t=n.originalModel.getValueInRange(e);yield this._clipboardService.writeText(t)})))));let d,h=0;n.originalEndLineNumber>n.modifiedStartLineNumber&&(d=new un.aU("diff.clipboard.copyDeletedLineContent",c?bi.N("diff.clipboard.copyDeletedLineContent.label","Copy deleted line ({0})",n.originalStartLineNumber):bi.N("diff.clipboard.copyChangedLineContent.label","Copy changed line ({0})",n.originalStartLineNumber),void 0,!0,(()=>Bn(this,void 0,void 0,(function*(){const e=n.originalModel.getLineContent(n.originalStartLineNumber+h);if(""===e){const e=n.originalModel.getEndOfLineSequence();yield this._clipboardService.writeText(0===e?"\n":"\r\n")}else yield this._clipboardService.writeText(e)})))),l.push(d));i.getOption(80)||l.push(new un.aU("diff.inline.revertChange",bi.N("diff.inline.revertChange.label","Revert this change"),void 0,!0,(()=>Bn(this,void 0,void 0,(function*(){const e=new U.e(n.originalStartLineNumber,1,n.originalEndLineNumber,n.originalModel.getLineMaxColumn(n.originalEndLineNumber)),t=n.originalModel.getValueInRange(e);if(0===n.modifiedEndLineNumber){const e=i.getModel().getLineMaxColumn(n.modifiedStartLineNumber);i.executeEdits("diffEditor",[{range:new U.e(n.modifiedStartLineNumber,e,n.modifiedStartLineNumber,e),text:a+t}])}else{const e=i.getModel().getLineMaxColumn(n.modifiedEndLineNumber);i.executeEdits("diffEditor",[{range:new U.e(n.modifiedStartLineNumber,1,n.modifiedEndLineNumber,e),text:t}])}})))));const u=(e,t)=>{this._contextMenuService.showContextMenu({getAnchor:()=>({x:e,y:t}),getActions:()=>(d&&(d.label=c?bi.N("diff.clipboard.copyDeletedLineContent.label","Copy deleted line ({0})",n.originalStartLineNumber+h):bi.N("diff.clipboard.copyChangedLineContent.label","Copy changed line ({0})",n.originalStartLineNumber+h)),l),autoSelectFirstItem:!0})};this._register(Q.mu(this._diffActions,"mousedown",(e=>{const{top:t,height:i}=Q.i(this._diffActions);let n=Math.floor(r/3);e.preventDefault(),u(e.posx,t+i+n)}))),this._register(i.onMouseMove((e=>{if(8===e.target.type||5===e.target.type){e.target.detail.viewZoneId===this._viewZoneId?(this.visibility=!0,h=this._updateLightBulbPosition(this._marginDomNode,e.event.browserEvent.y,r)):this.visibility=!1}else this.visibility=!1}))),this._register(i.onMouseDown((e=>{if(e.event.rightButton&&(8===e.target.type||5===e.target.type)){e.target.detail.viewZoneId===this._viewZoneId&&(e.event.preventDefault(),h=this._updateLightBulbPosition(this._marginDomNode,e.event.browserEvent.y,r),u(e.event.posx,e.event.posy+r))}})))}get visibility(){return this._visibility}set visibility(e){this._visibility!==e&&(this._visibility=e,this._diffActions.style.visibility=e?"visible":"hidden")}_updateLightBulbPosition(e,t,i){const{top:n}=Q.i(e),o=t-n,s=Math.floor(o/i),r=s*i;if(this._diffActions.style.top=`${r}px`,this.diff.viewLineCounts){let e=0;for(let t=0;t<this.diff.viewLineCounts.length;t++)if(e+=this.diff.viewLineCounts[t],s<e)return t}return s}}var Wn,Hn=i(84972),zn=i(90535),jn=i(54534),Un=i(96542),$n=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Kn=function(e,t){return function(i,n){t(i,n,e)}};class qn{constructor(e,t){this._contextMenuService=e,this._clipboardService=t,this._zones=[],this._inlineDiffMargins=[],this._zonesMap={},this._decorations=[]}getForeignViewZones(e){return e.filter((e=>!this._zonesMap[String(e.id)]))}clean(e){this._zones.length>0&&e.changeViewZones((e=>{for(const t of this._zones)e.removeZone(t)})),this._zones=[],this._zonesMap={},this._decorations=e.deltaDecorations(this._decorations,[])}apply(e,t,i,n){const o=n?cn.ZF.capture(e):null;e.changeViewZones((t=>{var n;for(const e of this._zones)t.removeZone(e);for(const e of this._inlineDiffMargins)e.dispose();this._zones=[],this._zonesMap={},this._inlineDiffMargins=[];for(let o=0,s=i.zones.length;o<s;o++){const s=i.zones[o];s.suppressMouseDown=!0;const r=t.addZone(s);this._zones.push(r),this._zonesMap[String(r)]=!0,i.zones[o].diff&&s.marginDomNode&&(s.suppressMouseDown=!1,0!==(null===(n=i.zones[o].diff)||void 0===n?void 0:n.originalModel.getValueLength())&&this._inlineDiffMargins.push(new Vn(r,s.marginDomNode,e,i.zones[o].diff,this._contextMenuService,this._clipboardService)))}})),o&&o.restore(e),this._decorations=e.deltaDecorations(this._decorations,i.decorations),t&&t.setZones(i.overviewZones)}}let Zn=0;const Gn=(0,_n.q5)("diff-insert",vn.lA.add,bi.N("diffInsertIcon","Line decoration for inserts in the diff editor.")),Yn=(0,_n.q5)("diff-remove",vn.lA.remove,bi.N("diffRemoveIcon","Line decoration for removals in the diff editor.")),Qn=null===(Wn=window.trustedTypes)||void 0===Wn?void 0:Wn.createPolicy("diffEditorWidget",{createHTML:e=>e});let Xn=class e extends ue.JT{constructor(t,i,n,o,s,r,a,l,c,d,h,u){super(),this._editorProgressService=u,this._onDidDispose=this._register(new W.Q5),this.onDidDispose=this._onDidDispose.event,this._onDidUpdateDiff=this._register(new W.Q5),this.onDidUpdateDiff=this._onDidUpdateDiff.event,this._onDidContentSizeChange=this._register(new W.Q5),this._lastOriginalWarning=null,this._lastModifiedWarning=null,this._editorWorkerService=s,this._codeEditorService=l,this._contextKeyService=this._register(r.createScoped(t)),this._instantiationService=a.createChild(new Rn.y([xi.i6,this._contextKeyService])),this._contextKeyService.createKey("isInDiffEditor",!0),this._themeService=c,this._notificationService=d,this._id=++Zn,this._state=0,this._updatingDiffProgress=null,this._domElement=t,i=i||{},this._options=go(i,{enableSplitViewResizing:!0,renderSideBySide:!0,maxComputationTime:5e3,maxFileSize:50,ignoreTrimWhitespace:!0,renderIndicators:!0,originalEditable:!1,diffCodeLens:!1,renderOverviewRuler:!0,diffWordWrap:"inherit"}),void 0!==i.isInEmbeddedEditor?this._contextKeyService.createKey("isInEmbeddedDiffEditor",i.isInEmbeddedEditor):this._contextKeyService.createKey("isInEmbeddedDiffEditor",!1),this._updateDecorationsRunner=this._register(new Se.pY((()=>this._updateDecorations()),0)),this._containerDomElement=document.createElement("div"),this._containerDomElement.className=e._getClassName(this._themeService.getColorTheme(),this._options.renderSideBySide),this._containerDomElement.style.position="relative",this._containerDomElement.style.height="100%",this._domElement.appendChild(this._containerDomElement),this._overviewViewportDomElement=(0,rn.X)(document.createElement("div")),this._overviewViewportDomElement.setClassName("diffViewport"),this._overviewViewportDomElement.setPosition("absolute"),this._overviewDomElement=document.createElement("div"),this._overviewDomElement.className="diffOverview",this._overviewDomElement.style.position="absolute",this._overviewDomElement.appendChild(this._overviewViewportDomElement.domNode),this._register(Q.mu(this._overviewDomElement,"mousedown",(e=>{this._modifiedEditor.delegateVerticalScrollbarMouseDown(e)}))),this._options.renderOverviewRuler&&this._containerDomElement.appendChild(this._overviewDomElement),this._originalDomNode=document.createElement("div"),this._originalDomNode.className="editor original",this._originalDomNode.style.position="absolute",this._originalDomNode.style.height="100%",this._containerDomElement.appendChild(this._originalDomNode),this._modifiedDomNode=document.createElement("div"),this._modifiedDomNode.className="editor modified",this._modifiedDomNode.style.position="absolute",this._modifiedDomNode.style.height="100%",this._containerDomElement.appendChild(this._modifiedDomNode),this._beginUpdateDecorationsTimeout=-1,this._currentlyChangingViewZones=!1,this._diffComputationToken=0,this._originalEditorState=new qn(h,o),this._modifiedEditorState=new qn(h,o),this._isVisible=!0,this._isHandlingScrollEvent=!1,this._elementSizeObserver=this._register(new jn.I(this._containerDomElement,i.dimension,(()=>this._onDidContainerSizeChanged()))),i.automaticLayout&&this._elementSizeObserver.startObserving(),this._diffComputationResult=null,this._originalEditor=this._createLeftHandSideEditor(i,n.originalEditor||{}),this._modifiedEditor=this._createRightHandSideEditor(i,n.modifiedEditor||{}),this._originalOverviewRuler=null,this._modifiedOverviewRuler=null,this._reviewPane=a.createInstance(Nn,this),this._containerDomElement.appendChild(this._reviewPane.domNode.domNode),this._containerDomElement.appendChild(this._reviewPane.shadow.domNode),this._containerDomElement.appendChild(this._reviewPane.actionBarContainer.domNode),this._options.renderSideBySide?this._setStrategy(new oo(this._createDataSource(),this._options.enableSplitViewResizing)):this._setStrategy(new ro(this._createDataSource(),this._options.enableSplitViewResizing)),this._register(c.onDidColorThemeChange((t=>{this._strategy&&this._strategy.applyColors(t)&&this._updateDecorationsRunner.schedule(),this._containerDomElement.className=e._getClassName(this._themeService.getColorTheme(),this._options.renderSideBySide)})));const g=gn.Uc.getDiffEditorContributions();for(const e of g)try{this._register(a.createInstance(e.ctor,this))}catch(e){(0,ke.dL)(e)}this._codeEditorService.addDiffEditor(this)}_setState(e){this._state!==e&&(this._state=e,this._updatingDiffProgress&&(this._updatingDiffProgress.done(),this._updatingDiffProgress=null),1===this._state&&(this._updatingDiffProgress=this._editorProgressService.show(!0,1e3)))}diffReviewNext(){this._reviewPane.next()}diffReviewPrev(){this._reviewPane.prev()}static _getClassName(e,t){let i="monaco-diff-editor monaco-editor-background ";return t&&(i+="side-by-side "),i+=(0,mn.m6)(e.type),i}_recreateOverviewRulers(){this._options.renderOverviewRuler&&(this._originalOverviewRuler&&(this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode()),this._originalOverviewRuler.dispose()),this._originalEditor.hasModel()&&(this._originalOverviewRuler=this._originalEditor.createOverviewRuler("original diffOverviewRuler"),this._overviewDomElement.appendChild(this._originalOverviewRuler.getDomNode())),this._modifiedOverviewRuler&&(this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode()),this._modifiedOverviewRuler.dispose()),this._modifiedEditor.hasModel()&&(this._modifiedOverviewRuler=this._modifiedEditor.createOverviewRuler("modified diffOverviewRuler"),this._overviewDomElement.appendChild(this._modifiedOverviewRuler.getDomNode())),this._layoutOverviewRulers())}_createLeftHandSideEditor(t,i){const n=this._createInnerEditor(this._instantiationService,this._originalDomNode,this._adjustOptionsForLeftHandSide(t),i);this._register(n.onDidScrollChange((e=>{this._isHandlingScrollEvent||(e.scrollTopChanged||e.scrollLeftChanged||e.scrollHeightChanged)&&(this._isHandlingScrollEvent=!0,this._modifiedEditor.setScrollPosition({scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}),this._isHandlingScrollEvent=!1,this._layoutOverviewViewport())}))),this._register(n.onDidChangeViewZones((()=>{this._onViewZonesChanged()}))),this._register(n.onDidChangeConfiguration((e=>{n.getModel()&&(e.hasChanged(43)&&this._updateDecorationsRunner.schedule(),e.hasChanged(130)&&(this._updateDecorationsRunner.cancel(),this._updateDecorations()))}))),this._register(n.onDidChangeHiddenAreas((()=>{this._updateDecorationsRunner.cancel(),this._updateDecorations()}))),this._register(n.onDidChangeModelContent((()=>{this._isVisible&&this._beginUpdateDecorationsSoon()})));const o=this._contextKeyService.createKey("isInDiffLeftEditor",n.hasWidgetFocus());return this._register(n.onDidFocusEditorWidget((()=>o.set(!0)))),this._register(n.onDidBlurEditorWidget((()=>o.set(!1)))),this._register(n.onDidContentSizeChange((t=>{const i=this._originalEditor.getContentWidth()+this._modifiedEditor.getContentWidth()+e.ONE_OVERVIEW_WIDTH,n=Math.max(this._modifiedEditor.getContentHeight(),this._originalEditor.getContentHeight());this._onDidContentSizeChange.fire({contentHeight:n,contentWidth:i,contentHeightChanged:t.contentHeightChanged,contentWidthChanged:t.contentWidthChanged})}))),n}_createRightHandSideEditor(t,i){const n=this._createInnerEditor(this._instantiationService,this._modifiedDomNode,this._adjustOptionsForRightHandSide(t),i);this._register(n.onDidScrollChange((e=>{this._isHandlingScrollEvent||(e.scrollTopChanged||e.scrollLeftChanged||e.scrollHeightChanged)&&(this._isHandlingScrollEvent=!0,this._originalEditor.setScrollPosition({scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}),this._isHandlingScrollEvent=!1,this._layoutOverviewViewport())}))),this._register(n.onDidChangeViewZones((()=>{this._onViewZonesChanged()}))),this._register(n.onDidChangeConfiguration((e=>{n.getModel()&&(e.hasChanged(43)&&this._updateDecorationsRunner.schedule(),e.hasChanged(130)&&(this._updateDecorationsRunner.cancel(),this._updateDecorations()))}))),this._register(n.onDidChangeHiddenAreas((()=>{this._updateDecorationsRunner.cancel(),this._updateDecorations()}))),this._register(n.onDidChangeModelContent((()=>{this._isVisible&&this._beginUpdateDecorationsSoon()}))),this._register(n.onDidChangeModelOptions((e=>{e.tabSize&&this._updateDecorationsRunner.schedule()})));const o=this._contextKeyService.createKey("isInDiffRightEditor",n.hasWidgetFocus());return this._register(n.onDidFocusEditorWidget((()=>o.set(!0)))),this._register(n.onDidBlurEditorWidget((()=>o.set(!1)))),this._register(n.onDidContentSizeChange((t=>{const i=this._originalEditor.getContentWidth()+this._modifiedEditor.getContentWidth()+e.ONE_OVERVIEW_WIDTH,n=Math.max(this._modifiedEditor.getContentHeight(),this._originalEditor.getContentHeight());this._onDidContentSizeChange.fire({contentHeight:n,contentWidth:i,contentHeightChanged:t.contentHeightChanged,contentWidthChanged:t.contentWidthChanged})}))),n}_createInnerEditor(e,t,i,n){return e.createInstance(sn.Gm,t,i,n)}dispose(){this._codeEditorService.removeDiffEditor(this),-1!==this._beginUpdateDecorationsTimeout&&(window.clearTimeout(this._beginUpdateDecorationsTimeout),this._beginUpdateDecorationsTimeout=-1),this._cleanViewZonesAndDecorations(),this._originalOverviewRuler&&(this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode()),this._originalOverviewRuler.dispose()),this._modifiedOverviewRuler&&(this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode()),this._modifiedOverviewRuler.dispose()),this._overviewDomElement.removeChild(this._overviewViewportDomElement.domNode),this._options.renderOverviewRuler&&this._containerDomElement.removeChild(this._overviewDomElement),this._containerDomElement.removeChild(this._originalDomNode),this._originalEditor.dispose(),this._containerDomElement.removeChild(this._modifiedDomNode),this._modifiedEditor.dispose(),this._strategy.dispose(),this._containerDomElement.removeChild(this._reviewPane.domNode.domNode),this._containerDomElement.removeChild(this._reviewPane.shadow.domNode),this._containerDomElement.removeChild(this._reviewPane.actionBarContainer.domNode),this._reviewPane.dispose(),this._domElement.removeChild(this._containerDomElement),this._onDidDispose.fire(),super.dispose()}getId(){return this.getEditorType()+":"+this._id}getEditorType(){return ve.g.IDiffEditor}getLineChanges(){return this._diffComputationResult?this._diffComputationResult.changes:null}getOriginalEditor(){return this._originalEditor}getModifiedEditor(){return this._modifiedEditor}updateOptions(t){const i=go(t,this._options),n=(o=this._options,s=i,{enableSplitViewResizing:o.enableSplitViewResizing!==s.enableSplitViewResizing,renderSideBySide:o.renderSideBySide!==s.renderSideBySide,maxComputationTime:o.maxComputationTime!==s.maxComputationTime,maxFileSize:o.maxFileSize!==s.maxFileSize,ignoreTrimWhitespace:o.ignoreTrimWhitespace!==s.ignoreTrimWhitespace,renderIndicators:o.renderIndicators!==s.renderIndicators,originalEditable:o.originalEditable!==s.originalEditable,diffCodeLens:o.diffCodeLens!==s.diffCodeLens,renderOverviewRuler:o.renderOverviewRuler!==s.renderOverviewRuler,diffWordWrap:o.diffWordWrap!==s.diffWordWrap});var o,s;this._options=i;const r=n.ignoreTrimWhitespace||n.renderIndicators,a=this._isVisible&&(n.maxComputationTime||n.maxFileSize);r?this._beginUpdateDecorations():a&&this._beginUpdateDecorationsSoon(),this._modifiedEditor.updateOptions(this._adjustOptionsForRightHandSide(t)),this._originalEditor.updateOptions(this._adjustOptionsForLeftHandSide(t)),this._strategy.setEnableSplitViewResizing(this._options.enableSplitViewResizing),n.renderSideBySide&&(this._options.renderSideBySide?this._setStrategy(new oo(this._createDataSource(),this._options.enableSplitViewResizing)):this._setStrategy(new ro(this._createDataSource(),this._options.enableSplitViewResizing)),this._containerDomElement.className=e._getClassName(this._themeService.getColorTheme(),this._options.renderSideBySide)),n.renderOverviewRuler&&(this._options.renderOverviewRuler?this._containerDomElement.appendChild(this._overviewDomElement):this._containerDomElement.removeChild(this._overviewDomElement))}getModel(){return{original:this._originalEditor.getModel(),modified:this._modifiedEditor.getModel()}}setModel(e){if(e&&(!e.original||!e.modified))throw new Error(e.original?"DiffEditorWidget.setModel: Modified model is null":"DiffEditorWidget.setModel: Original model is null");this._cleanViewZonesAndDecorations(),this._originalEditor.setModel(e?e.original:null),this._modifiedEditor.setModel(e?e.modified:null),this._updateDecorationsRunner.cancel(),e&&(this._originalEditor.setScrollTop(0),this._modifiedEditor.setScrollTop(0)),this._diffComputationResult=null,this._diffComputationToken++,this._setState(0),e&&(this._recreateOverviewRulers(),this._beginUpdateDecorations()),this._layoutOverviewViewport()}getDomNode(){return this._domElement}getVisibleColumnFromPosition(e){return this._modifiedEditor.getVisibleColumnFromPosition(e)}getPosition(){return this._modifiedEditor.getPosition()}setPosition(e){this._modifiedEditor.setPosition(e)}revealLine(e,t=0){this._modifiedEditor.revealLine(e,t)}revealLineInCenter(e,t=0){this._modifiedEditor.revealLineInCenter(e,t)}revealLineInCenterIfOutsideViewport(e,t=0){this._modifiedEditor.revealLineInCenterIfOutsideViewport(e,t)}revealLineNearTop(e,t=0){this._modifiedEditor.revealLineNearTop(e,t)}revealPosition(e,t=0){this._modifiedEditor.revealPosition(e,t)}revealPositionInCenter(e,t=0){this._modifiedEditor.revealPositionInCenter(e,t)}revealPositionInCenterIfOutsideViewport(e,t=0){this._modifiedEditor.revealPositionInCenterIfOutsideViewport(e,t)}revealPositionNearTop(e,t=0){this._modifiedEditor.revealPositionNearTop(e,t)}getSelection(){return this._modifiedEditor.getSelection()}getSelections(){return this._modifiedEditor.getSelections()}setSelection(e){this._modifiedEditor.setSelection(e)}setSelections(e){this._modifiedEditor.setSelections(e)}revealLines(e,t,i=0){this._modifiedEditor.revealLines(e,t,i)}revealLinesInCenter(e,t,i=0){this._modifiedEditor.revealLinesInCenter(e,t,i)}revealLinesInCenterIfOutsideViewport(e,t,i=0){this._modifiedEditor.revealLinesInCenterIfOutsideViewport(e,t,i)}revealLinesNearTop(e,t,i=0){this._modifiedEditor.revealLinesNearTop(e,t,i)}revealRange(e,t=0,i=!1,n=!0){this._modifiedEditor.revealRange(e,t,i,n)}revealRangeInCenter(e,t=0){this._modifiedEditor.revealRangeInCenter(e,t)}revealRangeInCenterIfOutsideViewport(e,t=0){this._modifiedEditor.revealRangeInCenterIfOutsideViewport(e,t)}revealRangeNearTop(e,t=0){this._modifiedEditor.revealRangeNearTop(e,t)}revealRangeNearTopIfOutsideViewport(e,t=0){this._modifiedEditor.revealRangeNearTopIfOutsideViewport(e,t)}revealRangeAtTop(e,t=0){this._modifiedEditor.revealRangeAtTop(e,t)}getSupportedActions(){return this._modifiedEditor.getSupportedActions()}saveViewState(){return{original:this._originalEditor.saveViewState(),modified:this._modifiedEditor.saveViewState()}}restoreViewState(e){if(e&&e.original&&e.modified){const t=e;this._originalEditor.restoreViewState(t.original),this._modifiedEditor.restoreViewState(t.modified)}}layout(e){this._elementSizeObserver.observe(e)}focus(){this._modifiedEditor.focus()}hasTextFocus(){return this._originalEditor.hasTextFocus()||this._modifiedEditor.hasTextFocus()}trigger(e,t,i){this._modifiedEditor.trigger(e,t,i)}changeDecorations(e){return this._modifiedEditor.changeDecorations(e)}_onDidContainerSizeChanged(){this._doLayout()}_getReviewHeight(){return this._reviewPane.isVisible()?this._elementSizeObserver.getHeight():0}_layoutOverviewRulers(){if(!this._options.renderOverviewRuler)return;if(!this._originalOverviewRuler||!this._modifiedOverviewRuler)return;const t=this._elementSizeObserver.getHeight(),i=this._getReviewHeight(),n=e.ENTIRE_DIFF_OVERVIEW_WIDTH-2*e.ONE_OVERVIEW_WIDTH;this._modifiedEditor.getLayoutInfo()&&(this._originalOverviewRuler.setLayout({top:0,width:e.ONE_OVERVIEW_WIDTH,right:n+e.ONE_OVERVIEW_WIDTH,height:t-i}),this._modifiedOverviewRuler.setLayout({top:0,right:0,width:e.ONE_OVERVIEW_WIDTH,height:t-i}))}_onViewZonesChanged(){this._currentlyChangingViewZones||this._updateDecorationsRunner.schedule()}_beginUpdateDecorationsSoon(){-1!==this._beginUpdateDecorationsTimeout&&(window.clearTimeout(this._beginUpdateDecorationsTimeout),this._beginUpdateDecorationsTimeout=-1),this._beginUpdateDecorationsTimeout=window.setTimeout((()=>this._beginUpdateDecorations()),e.UPDATE_DIFF_DECORATIONS_DELAY)}static _equals(e,t){return!e&&!t||!(!e||!t)&&e.toString()===t.toString()}_beginUpdateDecorations(){this._beginUpdateDecorationsTimeout=-1;const t=this._originalEditor.getModel(),i=this._modifiedEditor.getModel();if(!t||!i)return;this._diffComputationToken++;const n=this._diffComputationToken,o=1024*this._options.maxFileSize*1024,s=e=>{const t=e.getValueLength();return 0===o||t<=o};s(t)&&s(i)?(this._setState(1),this._editorWorkerService.computeDiff(t.uri,i.uri,this._options.ignoreTrimWhitespace,this._options.maxComputationTime).then((e=>{n===this._diffComputationToken&&t===this._originalEditor.getModel()&&i===this._modifiedEditor.getModel()&&(this._setState(2),this._diffComputationResult=e,this._updateDecorationsRunner.schedule(),this._onDidUpdateDiff.fire())}),(e=>{n===this._diffComputationToken&&t===this._originalEditor.getModel()&&i===this._modifiedEditor.getModel()&&(this._setState(2),this._diffComputationResult=null,this._updateDecorationsRunner.schedule())}))):e._equals(t.uri,this._lastOriginalWarning)&&e._equals(i.uri,this._lastModifiedWarning)||(this._lastOriginalWarning=t.uri,this._lastModifiedWarning=i.uri,this._notificationService.warn(bi.N("diff.tooLarge","Cannot compare files because one file is too large.")))}_cleanViewZonesAndDecorations(){this._originalEditorState.clean(this._originalEditor),this._modifiedEditorState.clean(this._modifiedEditor)}_updateDecorations(){if(!this._originalEditor.getModel()||!this._modifiedEditor.getModel())return;const e=this._diffComputationResult?this._diffComputationResult.changes:[],t=this._originalEditorState.getForeignViewZones(this._originalEditor.getWhitespaces()),i=this._modifiedEditorState.getForeignViewZones(this._modifiedEditor.getWhitespaces()),n=this._strategy.getEditorsDiffDecorations(e,this._options.ignoreTrimWhitespace,this._options.renderIndicators,t,i);try{this._currentlyChangingViewZones=!0,this._originalEditorState.apply(this._originalEditor,this._originalOverviewRuler,n.original,!1),this._modifiedEditorState.apply(this._modifiedEditor,this._modifiedOverviewRuler,n.modified,!0)}finally{this._currentlyChangingViewZones=!1}}_adjustOptionsForSubEditor(e){const t=Object.assign({},e);return t.inDiffEditor=!0,t.automaticLayout=!1,t.scrollbar=Object.assign({},t.scrollbar||{}),t.scrollbar.vertical="visible",t.folding=!1,t.codeLens=this._options.diffCodeLens,t.fixedOverflowWidgets=!0,t.minimap=Object.assign({},t.minimap||{}),t.minimap.enabled=!1,t}_adjustOptionsForLeftHandSide(e){const t=this._adjustOptionsForSubEditor(e);return this._options.renderSideBySide?t.wordWrapOverride1=this._options.diffWordWrap:t.wordWrapOverride1="off",e.originalAriaLabel&&(t.ariaLabel=e.originalAriaLabel),t.readOnly=!this._options.originalEditable,t.extraEditorClassName="original-in-monaco-diff-editor",Object.assign(Object.assign({},t),{dimension:{height:0,width:0}})}_adjustOptionsForRightHandSide(t){const i=this._adjustOptionsForSubEditor(t);return t.modifiedAriaLabel&&(i.ariaLabel=t.modifiedAriaLabel),i.wordWrapOverride1=this._options.diffWordWrap,i.revealHorizontalRightPadding=B.BH.revealHorizontalRightPadding.defaultValue+e.ENTIRE_DIFF_OVERVIEW_WIDTH,i.scrollbar.verticalHasArrows=!1,i.extraEditorClassName="modified-in-monaco-diff-editor",Object.assign(Object.assign({},i),{dimension:{height:0,width:0}})}doLayout(){this._elementSizeObserver.observe(),this._doLayout()}_doLayout(){const t=this._elementSizeObserver.getWidth(),i=this._elementSizeObserver.getHeight(),n=this._getReviewHeight(),o=this._strategy.layout();this._originalDomNode.style.width=o+"px",this._originalDomNode.style.left="0px",this._modifiedDomNode.style.width=t-o+"px",this._modifiedDomNode.style.left=o+"px",this._overviewDomElement.style.top="0px",this._overviewDomElement.style.height=i-n+"px",this._overviewDomElement.style.width=e.ENTIRE_DIFF_OVERVIEW_WIDTH+"px",this._overviewDomElement.style.left=t-e.ENTIRE_DIFF_OVERVIEW_WIDTH+"px",this._overviewViewportDomElement.setWidth(e.ENTIRE_DIFF_OVERVIEW_WIDTH),this._overviewViewportDomElement.setHeight(30),this._originalEditor.layout({width:o,height:i-n}),this._modifiedEditor.layout({width:t-o-(this._options.renderOverviewRuler?e.ENTIRE_DIFF_OVERVIEW_WIDTH:0),height:i-n}),(this._originalOverviewRuler||this._modifiedOverviewRuler)&&this._layoutOverviewRulers(),this._reviewPane.layout(i-n,t,n),this._layoutOverviewViewport()}_layoutOverviewViewport(){const e=this._computeOverviewViewport();e?(this._overviewViewportDomElement.setTop(e.top),this._overviewViewportDomElement.setHeight(e.height)):(this._overviewViewportDomElement.setTop(0),this._overviewViewportDomElement.setHeight(0))}_computeOverviewViewport(){const e=this._modifiedEditor.getLayoutInfo();if(!e)return null;const t=this._modifiedEditor.getScrollTop(),i=this._modifiedEditor.getScrollHeight(),n=Math.max(0,e.height),o=Math.max(0,n-0),s=i>0?o/i:0;return{height:Math.max(0,Math.floor(e.height*s)),top:Math.floor(t*s)}}_createDataSource(){return{getWidth:()=>this._elementSizeObserver.getWidth(),getHeight:()=>this._elementSizeObserver.getHeight()-this._getReviewHeight(),getOptions:()=>({renderOverviewRuler:this._options.renderOverviewRuler}),getContainerDomNode:()=>this._containerDomElement,relayoutEditors:()=>{this._doLayout()},getOriginalEditor:()=>this._originalEditor,getModifiedEditor:()=>this._modifiedEditor}}_setStrategy(e){this._strategy&&this._strategy.dispose(),this._strategy=e,e.applyColors(this._themeService.getColorTheme()),this._diffComputationResult&&this._updateDecorations(),this._doLayout()}_getLineChangeAtOrBeforeLineNumber(e,t){const i=this._diffComputationResult?this._diffComputationResult.changes:[];if(0===i.length||e<t(i[0]))return null;let n=0,o=i.length-1;for(;n<o;){const s=Math.floor((n+o)/2),r=t(i[s]),a=s+1<=o?t(i[s+1]):1073741824;e<r?o=s-1:e>=a?n=s+1:(n=s,o=s)}return i[n]}_getEquivalentLineForOriginalLineNumber(e){const t=this._getLineChangeAtOrBeforeLineNumber(e,(e=>e.originalStartLineNumber));if(!t)return e;const i=t.originalStartLineNumber+(t.originalEndLineNumber>0?-1:0),n=t.modifiedStartLineNumber+(t.modifiedEndLineNumber>0?-1:0),o=t.originalEndLineNumber>0?t.originalEndLineNumber-t.originalStartLineNumber+1:0,s=t.modifiedEndLineNumber>0?t.modifiedEndLineNumber-t.modifiedStartLineNumber+1:0,r=e-i;return r<=o?n+Math.min(r,s):n+s-o+r}_getEquivalentLineForModifiedLineNumber(e){const t=this._getLineChangeAtOrBeforeLineNumber(e,(e=>e.modifiedStartLineNumber));if(!t)return e;const i=t.originalStartLineNumber+(t.originalEndLineNumber>0?-1:0),n=t.modifiedStartLineNumber+(t.modifiedEndLineNumber>0?-1:0),o=t.originalEndLineNumber>0?t.originalEndLineNumber-t.originalStartLineNumber+1:0,s=t.modifiedEndLineNumber>0?t.modifiedEndLineNumber-t.modifiedStartLineNumber+1:0,r=e-n;return r<=s?i+Math.min(r,o):i+o-s+r}getDiffLineInformationForOriginal(e){return this._diffComputationResult?{equivalentLineNumber:this._getEquivalentLineForOriginalLineNumber(e)}:null}getDiffLineInformationForModified(e){return this._diffComputationResult?{equivalentLineNumber:this._getEquivalentLineForModifiedLineNumber(e)}:null}};Xn.ONE_OVERVIEW_WIDTH=15,Xn.ENTIRE_DIFF_OVERVIEW_WIDTH=30,Xn.UPDATE_DIFF_DECORATIONS_DELAY=200,Xn=$n([Kn(3,Hn.p),Kn(4,ye.p),Kn(5,xi.i6),Kn(6,Pn.TG),Kn(7,Y.$),Kn(8,mn.XE),Kn(9,Ai.lT),Kn(10,Fn.i),Kn(11,zn.e)],Xn);class Jn extends ue.JT{constructor(e){super(),this._dataSource=e,this._insertColor=null,this._removeColor=null}applyColors(e){const t=(e.getColor(fn.yp)||fn.Cz).transparent(2),i=(e.getColor(fn.P4)||fn.ke).transparent(2),n=!t.equals(this._insertColor)||!i.equals(this._removeColor);return this._insertColor=t,this._removeColor=i,n}getEditorsDiffDecorations(e,t,i,n,o){o=o.sort(((e,t)=>e.afterLineNumber-t.afterLineNumber)),n=n.sort(((e,t)=>e.afterLineNumber-t.afterLineNumber));const s=this._getViewZones(e,n,o,i),r=this._getOriginalEditorDecorations(e,t,i),a=this._getModifiedEditorDecorations(e,t,i);return{original:{decorations:r.decorations,overviewZones:r.overviewZones,zones:s.original},modified:{decorations:a.decorations,overviewZones:a.overviewZones,zones:s.modified}}}}class eo{constructor(e){this._source=e,this._index=-1,this.current=null,this.advance()}advance(){this._index++,this._index<this._source.length?this.current=this._source[this._index]:this.current=null}}class to{constructor(e,t,i,n,o){this._lineChanges=e,this._originalForeignVZ=t,this._modifiedForeignVZ=i,this._originalEditor=n,this._modifiedEditor=o}static _getViewLineCount(e,t,i){const n=e.getModel(),o=e._getViewModel();if(n&&o){const e=uo(n,o,t,i);return e.endLineNumber-e.startLineNumber+1}return i-t+1}getViewZones(){const e=this._originalEditor.getOption(58),t=this._modifiedEditor.getOption(58),i=-1!==this._originalEditor.getOption(130).wrappingColumn,n=-1!==this._modifiedEditor.getOption(130).wrappingColumn,o=i||n,s=this._originalEditor.getModel(),r=this._originalEditor._getViewModel().coordinatesConverter,a=this._modifiedEditor._getViewModel().coordinatesConverter,l=[],c=[];let d=0,h=0,u=0,g=0,p=0,f=0;const m=(e,t)=>e.afterLineNumber-t.afterLineNumber,v=(e,t)=>{if(null===t.domNode&&e.length>0){const i=e[e.length-1];if(i.afterLineNumber===t.afterLineNumber&&null===i.domNode)return void(i.heightInLines+=t.heightInLines)}e.push(t)},_=new eo(this._modifiedForeignVZ),b=new eo(this._originalForeignVZ);let w=1,y=1;for(let i=0,n=this._lineChanges.length;i<=n;i++){const C=i<n?this._lineChanges[i]:null;null!==C?(u=C.originalStartLineNumber+(C.originalEndLineNumber>0?-1:0),g=C.modifiedStartLineNumber+(C.modifiedEndLineNumber>0?-1:0),h=C.originalEndLineNumber>0?to._getViewLineCount(this._originalEditor,C.originalStartLineNumber,C.originalEndLineNumber):0,d=C.modifiedEndLineNumber>0?to._getViewLineCount(this._modifiedEditor,C.modifiedStartLineNumber,C.modifiedEndLineNumber):0,p=Math.max(C.originalStartLineNumber,C.originalEndLineNumber),f=Math.max(C.modifiedStartLineNumber,C.modifiedEndLineNumber)):(u+=1e7+h,g+=1e7+d,p=u,f=g);let x=[],S=[];if(o){let e;e=C?C.originalEndLineNumber>0?C.originalStartLineNumber-w:C.modifiedStartLineNumber-y:s.getLineCount()-w;for(let t=0;t<e;t++){const e=w+t,i=y+t,n=r.getModelLineViewLineCount(e),o=a.getModelLineViewLineCount(i);n<o?x.push({afterLineNumber:e,heightInLines:o-n,domNode:null,marginDomNode:null}):n>o&&S.push({afterLineNumber:i,heightInLines:n-o,domNode:null,marginDomNode:null})}C&&(w=(C.originalEndLineNumber>0?C.originalEndLineNumber:C.originalStartLineNumber)+1,y=(C.modifiedEndLineNumber>0?C.modifiedEndLineNumber:C.modifiedStartLineNumber)+1)}for(;_.current&&_.current.afterLineNumber<=f;){let e;e=_.current.afterLineNumber<=g?u-g+_.current.afterLineNumber:p;let i=null;C&&C.modifiedStartLineNumber<=_.current.afterLineNumber&&_.current.afterLineNumber<=C.modifiedEndLineNumber&&(i=this._createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion()),x.push({afterLineNumber:e,heightInLines:_.current.height/t,domNode:null,marginDomNode:i}),_.advance()}for(;b.current&&b.current.afterLineNumber<=p;){let t;t=b.current.afterLineNumber<=u?g-u+b.current.afterLineNumber:f,S.push({afterLineNumber:t,heightInLines:b.current.height/e,domNode:null}),b.advance()}if(null!==C&&lo(C)){const e=this._produceOriginalFromDiff(C,h,d);e&&x.push(e)}if(null!==C&&co(C)){const e=this._produceModifiedFromDiff(C,h,d);e&&S.push(e)}let k=0,L=0;for(x=x.sort(m),S=S.sort(m);k<x.length&&L<S.length;){const e=x[k],t=S[L],i=e.afterLineNumber-u,n=t.afterLineNumber-g;i<n?(v(l,e),k++):n<i?(v(c,t),L++):e.shouldNotShrink?(v(l,e),k++):t.shouldNotShrink?(v(c,t),L++):e.heightInLines>=t.heightInLines?(e.heightInLines-=t.heightInLines,L++):(t.heightInLines-=e.heightInLines,k++)}for(;k<x.length;)v(l,x[k]),k++;for(;L<S.length;)v(c,S[L]),L++}return{original:to._ensureDomNodes(l),modified:to._ensureDomNodes(c)}}static _ensureDomNodes(e){return e.map((e=>(e.domNode||(e.domNode=ho()),e)))}}function io(e,t,i,n,o){return{range:new U.e(e,t,i,n),options:o}}const no={charDelete:Mn.qx.register({description:"diff-editor-char-delete",className:"char-delete"}),charDeleteWholeLine:Mn.qx.register({description:"diff-editor-char-delete-whole-line",className:"char-delete",isWholeLine:!0}),charInsert:Mn.qx.register({description:"diff-editor-char-insert",className:"char-insert"}),charInsertWholeLine:Mn.qx.register({description:"diff-editor-char-insert-whole-line",className:"char-insert",isWholeLine:!0}),lineInsert:Mn.qx.register({description:"diff-editor-line-insert",className:"line-insert",marginClassName:"line-insert",isWholeLine:!0}),lineInsertWithSign:Mn.qx.register({description:"diff-editor-line-insert-with-sign",className:"line-insert",linesDecorationsClassName:"insert-sign "+mn.kS.asClassName(Gn),marginClassName:"line-insert",isWholeLine:!0}),lineDelete:Mn.qx.register({description:"diff-editor-line-delete",className:"line-delete",marginClassName:"line-delete",isWholeLine:!0}),lineDeleteWithSign:Mn.qx.register({description:"diff-editor-line-delete-with-sign",className:"line-delete",linesDecorationsClassName:"delete-sign "+mn.kS.asClassName(Yn),marginClassName:"line-delete",isWholeLine:!0}),lineDeleteMargin:Mn.qx.register({description:"diff-editor-line-delete-margin",marginClassName:"line-delete"})};class oo extends Jn{constructor(e,t){super(e),this._disableSash=!1===t,this._sashRatio=null,this._sashPosition=null,this._startSashPosition=null,this._sash=this._register(new an.g(this._dataSource.getContainerDomNode(),this,{orientation:0})),this._disableSash&&(this._sash.state=0),this._sash.onDidStart((()=>this._onSashDragStart())),this._sash.onDidChange((e=>this._onSashDrag(e))),this._sash.onDidEnd((()=>this._onSashDragEnd())),this._sash.onDidReset((()=>this._onSashReset()))}setEnableSplitViewResizing(e){const t=!1===e;this._disableSash!==t&&(this._disableSash=t,this._sash.state=this._disableSash?0:3)}layout(e=this._sashRatio){const t=this._dataSource.getWidth()-(this._dataSource.getOptions().renderOverviewRuler?Xn.ENTIRE_DIFF_OVERVIEW_WIDTH:0);let i=Math.floor((e||.5)*t);const n=Math.floor(.5*t);return i=this._disableSash?n:i||n,t>2*oo.MINIMUM_EDITOR_WIDTH?(i<oo.MINIMUM_EDITOR_WIDTH&&(i=oo.MINIMUM_EDITOR_WIDTH),i>t-oo.MINIMUM_EDITOR_WIDTH&&(i=t-oo.MINIMUM_EDITOR_WIDTH)):i=n,this._sashPosition!==i&&(this._sashPosition=i,this._sash.layout()),this._sashPosition}_onSashDragStart(){this._startSashPosition=this._sashPosition}_onSashDrag(e){const t=this._dataSource.getWidth()-(this._dataSource.getOptions().renderOverviewRuler?Xn.ENTIRE_DIFF_OVERVIEW_WIDTH:0),i=this.layout((this._startSashPosition+(e.currentX-e.startX))/t);this._sashRatio=i/t,this._dataSource.relayoutEditors()}_onSashDragEnd(){this._sash.layout()}_onSashReset(){this._sashRatio=.5,this._dataSource.relayoutEditors(),this._sash.layout()}getVerticalSashTop(e){return 0}getVerticalSashLeft(e){return this._sashPosition}getVerticalSashHeight(e){return this._dataSource.getHeight()}_getViewZones(e,t,i){const n=this._dataSource.getOriginalEditor(),o=this._dataSource.getModifiedEditor();return new so(e,t,i,n,o).getViewZones()}_getOriginalEditorDecorations(e,t,i){const n=this._dataSource.getOriginalEditor(),o=String(this._removeColor),s={decorations:[],overviewZones:[]},r=n.getModel(),a=n._getViewModel();for(const n of e)if(co(n)){s.decorations.push({range:new U.e(n.originalStartLineNumber,1,n.originalEndLineNumber,1073741824),options:i?no.lineDeleteWithSign:no.lineDelete}),lo(n)&&n.charChanges||s.decorations.push(io(n.originalStartLineNumber,1,n.originalEndLineNumber,1073741824,no.charDeleteWholeLine));const e=uo(r,a,n.originalStartLineNumber,n.originalEndLineNumber);if(s.overviewZones.push(new An.EY(e.startLineNumber,e.endLineNumber,o)),n.charChanges)for(const e of n.charChanges)if(co(e))if(t)for(let t=e.originalStartLineNumber;t<=e.originalEndLineNumber;t++){let i,n;i=t===e.originalStartLineNumber?e.originalStartColumn:r.getLineFirstNonWhitespaceColumn(t),n=t===e.originalEndLineNumber?e.originalEndColumn:r.getLineLastNonWhitespaceColumn(t),s.decorations.push(io(t,i,t,n,no.charDelete))}else s.decorations.push(io(e.originalStartLineNumber,e.originalStartColumn,e.originalEndLineNumber,e.originalEndColumn,no.charDelete))}return s}_getModifiedEditorDecorations(e,t,i){const n=this._dataSource.getModifiedEditor(),o=String(this._insertColor),s={decorations:[],overviewZones:[]},r=n.getModel(),a=n._getViewModel();for(const n of e)if(lo(n)){s.decorations.push({range:new U.e(n.modifiedStartLineNumber,1,n.modifiedEndLineNumber,1073741824),options:i?no.lineInsertWithSign:no.lineInsert}),co(n)&&n.charChanges||s.decorations.push(io(n.modifiedStartLineNumber,1,n.modifiedEndLineNumber,1073741824,no.charInsertWholeLine));const e=uo(r,a,n.modifiedStartLineNumber,n.modifiedEndLineNumber);if(s.overviewZones.push(new An.EY(e.startLineNumber,e.endLineNumber,o)),n.charChanges)for(const e of n.charChanges)if(lo(e))if(t)for(let t=e.modifiedStartLineNumber;t<=e.modifiedEndLineNumber;t++){let i,n;i=t===e.modifiedStartLineNumber?e.modifiedStartColumn:r.getLineFirstNonWhitespaceColumn(t),n=t===e.modifiedEndLineNumber?e.modifiedEndColumn:r.getLineLastNonWhitespaceColumn(t),s.decorations.push(io(t,i,t,n,no.charInsert))}else s.decorations.push(io(e.modifiedStartLineNumber,e.modifiedStartColumn,e.modifiedEndLineNumber,e.modifiedEndColumn,no.charInsert))}return s}}oo.MINIMUM_EDITOR_WIDTH=100;class so extends to{constructor(e,t,i,n,o){super(e,t,i,n,o)}_createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion(){return null}_produceOriginalFromDiff(e,t,i){return i>t?{afterLineNumber:Math.max(e.originalStartLineNumber,e.originalEndLineNumber),heightInLines:i-t,domNode:null}:null}_produceModifiedFromDiff(e,t,i){return t>i?{afterLineNumber:Math.max(e.modifiedStartLineNumber,e.modifiedEndLineNumber),heightInLines:t-i,domNode:null}:null}}class ro extends Jn{constructor(e,t){super(e),this._decorationsLeft=e.getOriginalEditor().getLayoutInfo().decorationsLeft,this._register(e.getOriginalEditor().onDidLayoutChange((t=>{this._decorationsLeft!==t.decorationsLeft&&(this._decorationsLeft=t.decorationsLeft,e.relayoutEditors())})))}setEnableSplitViewResizing(e){}_getViewZones(e,t,i,n){const o=this._dataSource.getOriginalEditor(),s=this._dataSource.getModifiedEditor();return new ao(e,t,i,o,s,n).getViewZones()}_getOriginalEditorDecorations(e,t,i){const n=String(this._removeColor),o={decorations:[],overviewZones:[]},s=this._dataSource.getOriginalEditor(),r=s.getModel(),a=s._getViewModel();for(const t of e)if(co(t)){o.decorations.push({range:new U.e(t.originalStartLineNumber,1,t.originalEndLineNumber,1073741824),options:no.lineDeleteMargin});const e=uo(r,a,t.originalStartLineNumber,t.originalEndLineNumber);o.overviewZones.push(new An.EY(e.startLineNumber,e.endLineNumber,n))}return o}_getModifiedEditorDecorations(e,t,i){const n=this._dataSource.getModifiedEditor(),o=String(this._insertColor),s={decorations:[],overviewZones:[]},r=n.getModel(),a=n._getViewModel();for(const n of e)if(lo(n)){s.decorations.push({range:new U.e(n.modifiedStartLineNumber,1,n.modifiedEndLineNumber,1073741824),options:i?no.lineInsertWithSign:no.lineInsert});const e=uo(r,a,n.modifiedStartLineNumber,n.modifiedEndLineNumber);if(s.overviewZones.push(new An.EY(e.startLineNumber,e.endLineNumber,o)),n.charChanges){for(const e of n.charChanges)if(lo(e))if(t)for(let t=e.modifiedStartLineNumber;t<=e.modifiedEndLineNumber;t++){let i,n;i=t===e.modifiedStartLineNumber?e.modifiedStartColumn:r.getLineFirstNonWhitespaceColumn(t),n=t===e.modifiedEndLineNumber?e.modifiedEndColumn:r.getLineLastNonWhitespaceColumn(t),s.decorations.push(io(t,i,t,n,no.charInsert))}else s.decorations.push(io(e.modifiedStartLineNumber,e.modifiedStartColumn,e.modifiedEndLineNumber,e.modifiedEndColumn,no.charInsert))}else s.decorations.push(io(n.modifiedStartLineNumber,1,n.modifiedEndLineNumber,1073741824,no.charInsertWholeLine))}return s}layout(){return Math.max(5,this._decorationsLeft)}}class ao extends to{constructor(e,t,i,n,o,s){super(e,t,i,n,o),this._originalModel=n.getModel(),this._renderIndicators=s,this._pendingLineChange=[],this._pendingViewZones=[],this._lineBreaksComputer=this._modifiedEditor._getViewModel().createLineBreaksComputer()}getViewZones(){const e=super.getViewZones();return this._finalize(e),e}_createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion(){const e=document.createElement("div");return e.className="inline-added-margin-view-zone",e}_produceOriginalFromDiff(e,t,i){const n=document.createElement("div");return n.className="inline-added-margin-view-zone",{afterLineNumber:Math.max(e.originalStartLineNumber,e.originalEndLineNumber),heightInLines:i,domNode:document.createElement("div"),marginDomNode:n}}_produceModifiedFromDiff(e,t,i){const n=document.createElement("div");n.className=`view-lines line-delete ${Un.S}`;const o=document.createElement("div");o.className="inline-deleted-margin-view-zone";const s={shouldNotShrink:!0,afterLineNumber:0===e.modifiedEndLineNumber?e.modifiedStartLineNumber:e.modifiedStartLineNumber-1,heightInLines:t,minWidthInPx:0,domNode:n,marginDomNode:o,diff:{originalStartLineNumber:e.originalStartLineNumber,originalEndLineNumber:e.originalEndLineNumber,modifiedStartLineNumber:e.modifiedStartLineNumber,modifiedEndLineNumber:e.modifiedEndLineNumber,originalModel:this._originalModel,viewLineCounts:null}};for(let t=e.originalStartLineNumber;t<=e.originalEndLineNumber;t++)this._lineBreaksComputer.addRequest(this._originalModel.getLineContent(t),null,null);return this._pendingLineChange.push(e),this._pendingViewZones.push(s),s}_finalize(e){const t=this._modifiedEditor.getOptions(),i=this._modifiedEditor.getModel().getOptions().tabSize,n=t.get(43),o=t.get(29),s=n.typicalHalfwidthCharacterWidth,r=t.get(92),a=this._originalModel.mightContainNonBasicASCII(),l=this._originalModel.mightContainRTL(),c=t.get(58),d=t.get(129).decorationsWidth,h=t.get(104),u=t.get(87),g=t.get(82),p=t.get(44),f=this._lineBreaksComputer.finalize();let m=0;for(let t=0;t<this._pendingLineChange.length;t++){const v=this._pendingLineChange[t],_=this._pendingViewZones[t],b=_.domNode;ln.V.applyFontInfoSlow(b,n);const w=_.marginDomNode;ln.V.applyFontInfoSlow(w,n);const y=[];if(v.charChanges)for(const e of v.charChanges)co(e)&&y.push(new Rt.$t(new U.e(e.originalStartLineNumber,e.originalStartColumn,e.originalEndLineNumber,e.originalEndColumn),"char-delete",0));const C=y.length>0,x=(0,Tn.l$)(1e4);let S=0,k=0,L=null;for(let t=v.originalStartLineNumber;t<=v.originalEndLineNumber;t++){const s=t-v.originalStartLineNumber,r=this._originalModel.getLineTokens(t),b=r.getLineContent(),N=f[m++],D=On.Kp.filter(y,t,1,b.length+1);if(N){let f=0;for(const e of N.breakOffsets){const t=r.sliceAndInflate(f,e,0),s=b.substring(f,e);S=Math.max(S,this._renderOriginalLine(k++,s,t,On.Kp.extractWrapped(D,f,e),C,a,l,n,o,c,d,h,u,g,p,i,x,w)),f=e}for(L||(L=[]);L.length<s;)L[L.length]=1;L[s]=N.breakOffsets.length,_.heightInLines+=N.breakOffsets.length-1;const m=document.createElement("div");m.className="line-delete",e.original.push({afterLineNumber:t,afterColumn:0,heightInLines:N.breakOffsets.length-1,domNode:ho(),marginDomNode:m})}else S=Math.max(S,this._renderOriginalLine(k++,b,r,D,C,a,l,n,o,c,d,h,u,g,p,i,x,w))}S+=r;const N=x.build(),D=Qn?Qn.createHTML(N):N;if(b.innerHTML=D,_.minWidthInPx=S*s,L){const e=v.originalEndLineNumber-v.originalStartLineNumber;for(;L.length<=e;)L[L.length]=1}_.diff.viewLineCounts=L}e.original.sort(((e,t)=>e.afterLineNumber-t.afterLineNumber))}_renderOriginalLine(e,t,i,n,o,s,r,a,l,c,d,h,u,g,p,f,m,v){m.appendASCIIString('<div class="view-line'),o||m.appendASCIIString(" char-delete"),m.appendASCIIString('" style="top:'),m.appendASCIIString(String(e*c)),m.appendASCIIString('px;width:1000000px;">');const _=Rt.wA.isBasicASCII(t,s),b=Rt.wA.containsRTL(t,_,r),w=(0,Pt.d1)(new Pt.IJ(a.isMonospace&&!l,a.canUseHalfwidthRightwardsArrow,t,!1,_,b,0,i,n,f,0,a.spaceWidth,a.middotWidth,a.wsmiddotWidth,h,u,g,p!==B.n0.OFF,null),m);if(m.appendASCIIString("</div>"),this._renderIndicators){const t=document.createElement("div");t.className=`delete-sign ${mn.kS.asClassName(Yn)}`,t.setAttribute("style",`position:absolute;top:${e*c}px;width:${d}px;height:${c}px;right:0;`),v.appendChild(t)}return w.characterMapping.getAbsoluteOffset(w.characterMapping.length)}}function lo(e){return e.modifiedEndLineNumber>0}function co(e){return e.originalEndLineNumber>0}function ho(){const e=document.createElement("div");return e.className="diagonal-fill",e}function uo(e,t,i,n){const o=e.getLineCount();return i=Math.min(o,Math.max(1,i)),n=Math.min(o,Math.max(1,n)),t.coordinatesConverter.convertModelRangeToViewRange(new U.e(i,e.getLineMinColumn(i),n,e.getLineMaxColumn(n)))}function go(e,t){return{enableSplitViewResizing:(0,B.O7)(e.enableSplitViewResizing,t.enableSplitViewResizing),renderSideBySide:(0,B.O7)(e.renderSideBySide,t.renderSideBySide),maxComputationTime:(0,B.Zc)(e.maxComputationTime,t.maxComputationTime,0,1073741824),maxFileSize:(0,B.Zc)(e.maxFileSize,t.maxFileSize,0,1073741824),ignoreTrimWhitespace:(0,B.O7)(e.ignoreTrimWhitespace,t.ignoreTrimWhitespace),renderIndicators:(0,B.O7)(e.renderIndicators,t.renderIndicators),originalEditable:(0,B.O7)(e.originalEditable,t.originalEditable),diffCodeLens:(0,B.O7)(e.diffCodeLens,t.diffCodeLens),renderOverviewRuler:(0,B.O7)(e.renderOverviewRuler,t.renderOverviewRuler),diffWordWrap:(i=e.diffWordWrap,n=t.diffWordWrap,(0,B.NY)(i,n,["off","on","inherit"]))};var i,n}(0,mn.Ic)(((e,t)=>{const i=e.getColor(fn.yp);i&&(t.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { background-color: ${i}; }`),t.addRule(`.monaco-diff-editor .line-insert, .monaco-diff-editor .char-insert { background-color: ${i}; }`),t.addRule(`.monaco-editor .inline-added-margin-view-zone { background-color: ${i}; }`));const n=e.getColor(fn.P4);n&&(t.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { background-color: ${n}; }`),t.addRule(`.monaco-diff-editor .line-delete, .monaco-diff-editor .char-delete { background-color: ${n}; }`),t.addRule(`.monaco-editor .inline-deleted-margin-view-zone { background-color: ${n}; }`));const o=e.getColor(fn.XL);o&&t.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { border: 1px ${"hc"===e.type?"dashed":"solid"} ${o}; }`);const s=e.getColor(fn.mH);s&&t.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { border: 1px ${"hc"===e.type?"dashed":"solid"} ${s}; }`);const r=e.getColor(fn._w);r&&t.addRule(`.monaco-diff-editor.side-by-side .editor.modified { box-shadow: -6px 0 5px -5px ${r}; }`);const a=e.getColor(fn.LL);a&&t.addRule(`.monaco-diff-editor.side-by-side .editor.modified { border-left: 1px solid ${a}; }`);const l=e.getColor(fn.et);l&&t.addRule(`\n\t\t\t.monaco-diff-editor .diffViewport {\n\t\t\t\tbackground: ${l};\n\t\t\t}\n\t\t`);const c=e.getColor(fn.AB);c&&t.addRule(`\n\t\t\t.monaco-diff-editor .diffViewport:hover {\n\t\t\t\tbackground: ${c};\n\t\t\t}\n\t\t`);const d=e.getColor(fn.yn);d&&t.addRule(`\n\t\t\t.monaco-diff-editor .diffViewport:active {\n\t\t\t\tbackground: ${d};\n\t\t\t}\n\t\t`);const h=e.getColor(fn.L_);t.addRule(`\n\t.monaco-editor .diagonal-fill {\n\t\tbackground-image: linear-gradient(\n\t\t\t-45deg,\n\t\t\t${h} 12.5%,\n\t\t\t#0000 12.5%, #0000 50%,\n\t\t\t${h} 50%, ${h} 62.5%,\n\t\t\t#0000 62.5%, #0000 100%\n\t\t);\n\t\tbackground-size: 8px 8px;\n\t}\n\t`)}));var po=i(30653),fo=i(12095),mo=i(84144),vo=i(91847),_o=i(31106);class bo extends ue.JT{constructor(){super(),this._onCodeEditorAdd=this._register(new W.Q5),this.onCodeEditorAdd=this._onCodeEditorAdd.event,this._onCodeEditorRemove=this._register(new W.Q5),this.onCodeEditorRemove=this._onCodeEditorRemove.event,this._onDiffEditorAdd=this._register(new W.Q5),this._onDiffEditorRemove=this._register(new W.Q5),this._onDecorationTypeRegistered=this._register(new W.Q5),this._modelProperties=new Map,this._codeEditors=Object.create(null),this._diffEditors=Object.create(null)}addCodeEditor(e){this._codeEditors[e.getId()]=e,this._onCodeEditorAdd.fire(e)}removeCodeEditor(e){delete this._codeEditors[e.getId()]&&this._onCodeEditorRemove.fire(e)}listCodeEditors(){return Object.keys(this._codeEditors).map((e=>this._codeEditors[e]))}addDiffEditor(e){this._diffEditors[e.getId()]=e,this._onDiffEditorAdd.fire(e)}removeDiffEditor(e){delete this._diffEditors[e.getId()]&&this._onDiffEditorRemove.fire(e)}listDiffEditors(){return Object.keys(this._diffEditors).map((e=>this._diffEditors[e]))}getFocusedCodeEditor(){let e=null;const t=this.listCodeEditors();for(const i of t){if(i.hasTextFocus())return i;i.hasWidgetFocus()&&(e=i)}return e}setModelProperty(e,t,i){const n=e.toString();let o;this._modelProperties.has(n)?o=this._modelProperties.get(n):(o=new Map,this._modelProperties.set(n,o)),o.set(t,i)}getModelProperty(e,t){const i=e.toString();if(this._modelProperties.has(i)){return this._modelProperties.get(i).get(t)}}}var wo=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},yo=function(e,t){return function(i,n){t(i,n,e)}};class Co{constructor(e,t,i){this._parent=e,this._editorId=t,this._styleSheet=i,this._refCount=0}ref(){this._refCount++}unref(){var e;this._refCount--,0===this._refCount&&(null===(e=this._styleSheet.parentNode)||void 0===e||e.removeChild(this._styleSheet),this._parent._removeEditorStyleSheets(this._editorId))}insertRule(e,t){this._styleSheet.sheet.insertRule(e,t)}removeRulesContainingSelector(e){Q.uN(e,this._styleSheet)}}class xo{constructor(e){this._styleSheet=e}ref(){}unref(){}insertRule(e,t){this._styleSheet.sheet.insertRule(e,t)}removeRulesContainingSelector(e){Q.uN(e,this._styleSheet)}}let So=class extends bo{constructor(e,t){super(),this._decorationOptionProviders=new Map,this._editorStyleSheets=new Map,this._globalStyleSheet=e||null,this._themeService=t}_getOrCreateGlobalStyleSheet(){return this._globalStyleSheet||(this._globalStyleSheet=new xo(Q.dS())),this._globalStyleSheet}_getOrCreateStyleSheet(e){if(!e)return this._getOrCreateGlobalStyleSheet();const t=e.getContainerDomNode();if(!Q.OO(t))return this._getOrCreateGlobalStyleSheet();const i=e.getId();if(!this._editorStyleSheets.has(i)){const e=new Co(this,i,Q.dS(t));this._editorStyleSheets.set(i,e)}return this._editorStyleSheets.get(i)}_removeEditorStyleSheets(e){this._editorStyleSheets.delete(e)}registerDecorationType(e,t,i,n,o){let s=this._decorationOptionProviders.get(t);if(!s){const r=this._getOrCreateStyleSheet(o),a={styleSheet:r,key:t,parentTypeKey:n,options:i||Object.create(null)};s=n?new ko(this._themeService,r,a):new Lo(e,this._themeService,r,a),this._decorationOptionProviders.set(t,s),this._onDecorationTypeRegistered.fire(t)}s.refCount++}removeDecorationType(e){const t=this._decorationOptionProviders.get(e);t&&(t.refCount--,t.refCount<=0&&(this._decorationOptionProviders.delete(e),t.dispose(),this.listCodeEditors().forEach((t=>t.removeDecorations(e)))))}resolveDecorationOptions(e,t){const i=this._decorationOptionProviders.get(e);if(!i)throw new Error("Unknown decoration type key: "+e);return i.getOptions(this,t)}};So=wo([yo(1,mn.XE)],So);class ko{constructor(e,t,i){this._styleSheet=t,this._styleSheet.ref(),this._parentTypeKey=i.parentTypeKey,this.refCount=0,this._beforeContentRules=new Do(3,i,e),this._afterContentRules=new Do(4,i,e)}getOptions(e,t){const i=e.resolveDecorationOptions(this._parentTypeKey,!0);return this._beforeContentRules&&(i.beforeContentClassName=this._beforeContentRules.className),this._afterContentRules&&(i.afterContentClassName=this._afterContentRules.className),i}dispose(){this._beforeContentRules&&(this._beforeContentRules.dispose(),this._beforeContentRules=null),this._afterContentRules&&(this._afterContentRules.dispose(),this._afterContentRules=null),this._styleSheet.unref()}}class Lo{constructor(e,t,i,n){this._disposables=new ue.SL,this.description=e,this._styleSheet=i,this._styleSheet.ref(),this.refCount=0;const o=e=>{const i=new Do(e,n,t);if(this._disposables.add(i),i.hasContent)return i.className},s=e=>{const i=new Do(e,n,t);return this._disposables.add(i),i.hasContent?{className:i.className,hasLetterSpacing:i.hasLetterSpacing}:null};this.className=o(0);const r=s(1);if(r&&(this.inlineClassName=r.className,this.inlineClassNameAffectsLetterSpacing=r.hasLetterSpacing),this.beforeContentClassName=o(3),this.afterContentClassName=o(4),n.options.beforeInjectedText&&n.options.beforeInjectedText.contentText){const e=s(5);this.beforeInjectedText={content:n.options.beforeInjectedText.contentText,inlineClassName:null==e?void 0:e.className,inlineClassNameAffectsLetterSpacing:(null==e?void 0:e.hasLetterSpacing)||n.options.beforeInjectedText.affectsLetterSpacing}}if(n.options.afterInjectedText&&n.options.afterInjectedText.contentText){const e=s(6);this.afterInjectedText={content:n.options.afterInjectedText.contentText,inlineClassName:null==e?void 0:e.className,inlineClassNameAffectsLetterSpacing:(null==e?void 0:e.hasLetterSpacing)||n.options.afterInjectedText.affectsLetterSpacing}}this.glyphMarginClassName=o(2);const a=n.options;this.isWholeLine=Boolean(a.isWholeLine),this.stickiness=a.rangeBehavior;const l=a.light&&a.light.overviewRulerColor||a.overviewRulerColor,c=a.dark&&a.dark.overviewRulerColor||a.overviewRulerColor;void 0===l&&void 0===c||(this.overviewRuler={color:l||c,darkColor:c||l,position:a.overviewRulerLane||_e.sh.Center})}getOptions(e,t){return t?{description:this.description,inlineClassName:this.inlineClassName,beforeContentClassName:this.beforeContentClassName,afterContentClassName:this.afterContentClassName,className:this.className,glyphMarginClassName:this.glyphMarginClassName,isWholeLine:this.isWholeLine,overviewRuler:this.overviewRuler,stickiness:this.stickiness,before:this.beforeInjectedText,after:this.afterInjectedText}:this}dispose(){this._disposables.dispose(),this._styleSheet.unref()}}const No={color:"color:{0} !important;",opacity:"opacity:{0};",backgroundColor:"background-color:{0};",outline:"outline:{0};",outlineColor:"outline-color:{0};",outlineStyle:"outline-style:{0};",outlineWidth:"outline-width:{0};",border:"border:{0};",borderColor:"border-color:{0};",borderRadius:"border-radius:{0};",borderSpacing:"border-spacing:{0};",borderStyle:"border-style:{0};",borderWidth:"border-width:{0};",fontStyle:"font-style:{0};",fontWeight:"font-weight:{0};",fontSize:"font-size:{0};",fontFamily:"font-family:{0};",textDecoration:"text-decoration:{0};",cursor:"cursor:{0};",letterSpacing:"letter-spacing:{0};",gutterIconPath:"background:{0} center center no-repeat;",gutterIconSize:"background-size:{0};",contentText:"content:'{0}';",contentIconPath:"content:{0};",margin:"margin:{0};",padding:"padding:{0};",width:"width:{0};",height:"height:{0};",verticalAlign:"vertical-align:{0};"};class Do{constructor(e,t,i){this._theme=i.getColorTheme(),this._ruleType=e,this._providerArgs=t,this._usesThemeColors=!1,this._hasContent=!1,this._hasLetterSpacing=!1;let n=Io.getClassName(this._providerArgs.key,e);this._providerArgs.parentTypeKey&&(n=n+" "+Io.getClassName(this._providerArgs.parentTypeKey,e)),this._className=n,this._unThemedSelector=Io.getSelector(this._providerArgs.key,this._providerArgs.parentTypeKey,e),this._buildCSS(),this._usesThemeColors?this._themeListener=i.onDidColorThemeChange((e=>{this._theme=i.getColorTheme(),this._removeCSS(),this._buildCSS()})):this._themeListener=null}dispose(){this._hasContent&&(this._removeCSS(),this._hasContent=!1),this._themeListener&&(this._themeListener.dispose(),this._themeListener=null)}get hasContent(){return this._hasContent}get hasLetterSpacing(){return this._hasLetterSpacing}get className(){return this._className}_buildCSS(){const e=this._providerArgs.options;let t,i,n;switch(this._ruleType){case 0:t=this.getCSSTextForModelDecorationClassName(e),i=this.getCSSTextForModelDecorationClassName(e.light),n=this.getCSSTextForModelDecorationClassName(e.dark);break;case 1:t=this.getCSSTextForModelDecorationInlineClassName(e),i=this.getCSSTextForModelDecorationInlineClassName(e.light),n=this.getCSSTextForModelDecorationInlineClassName(e.dark);break;case 2:t=this.getCSSTextForModelDecorationGlyphMarginClassName(e),i=this.getCSSTextForModelDecorationGlyphMarginClassName(e.light),n=this.getCSSTextForModelDecorationGlyphMarginClassName(e.dark);break;case 3:t=this.getCSSTextForModelDecorationContentClassName(e.before),i=this.getCSSTextForModelDecorationContentClassName(e.light&&e.light.before),n=this.getCSSTextForModelDecorationContentClassName(e.dark&&e.dark.before);break;case 4:t=this.getCSSTextForModelDecorationContentClassName(e.after),i=this.getCSSTextForModelDecorationContentClassName(e.light&&e.light.after),n=this.getCSSTextForModelDecorationContentClassName(e.dark&&e.dark.after);break;case 5:t=this.getCSSTextForModelDecorationContentClassName(e.beforeInjectedText),i=this.getCSSTextForModelDecorationContentClassName(e.light&&e.light.beforeInjectedText),n=this.getCSSTextForModelDecorationContentClassName(e.dark&&e.dark.beforeInjectedText);break;case 6:t=this.getCSSTextForModelDecorationContentClassName(e.afterInjectedText),i=this.getCSSTextForModelDecorationContentClassName(e.light&&e.light.afterInjectedText),n=this.getCSSTextForModelDecorationContentClassName(e.dark&&e.dark.afterInjectedText);break;default:throw new Error("Unknown rule type: "+this._ruleType)}const o=this._providerArgs.styleSheet;let s=!1;t.length>0&&(o.insertRule(`${this._unThemedSelector} {${t}}`,0),s=!0),i.length>0&&(o.insertRule(`.vs${this._unThemedSelector} {${i}}`,0),s=!0),n.length>0&&(o.insertRule(`.vs-dark${this._unThemedSelector}, .hc-black${this._unThemedSelector} {${n}}`,0),s=!0),this._hasContent=s}_removeCSS(){this._providerArgs.styleSheet.removeRulesContainingSelector(this._unThemedSelector)}getCSSTextForModelDecorationClassName(e){if(!e)return"";const t=[];return this.collectCSSText(e,["backgroundColor"],t),this.collectCSSText(e,["outline","outlineColor","outlineStyle","outlineWidth"],t),this.collectBorderSettingsCSSText(e,t),t.join("")}getCSSTextForModelDecorationInlineClassName(e){if(!e)return"";const t=[];return this.collectCSSText(e,["fontStyle","fontWeight","textDecoration","cursor","color","opacity","letterSpacing"],t),e.letterSpacing&&(this._hasLetterSpacing=!0),t.join("")}getCSSTextForModelDecorationContentClassName(e){if(!e)return"";const t=[];if(void 0!==e){if(this.collectBorderSettingsCSSText(e,t),void 0!==e.contentIconPath&&t.push(De.WU(No.contentIconPath,Q.wY(z.o.revive(e.contentIconPath)))),"string"==typeof e.contentText){const i=e.contentText.match(/^.*$/m)[0].replace(/['\\]/g,"\\$&");t.push(De.WU(No.contentText,i))}this.collectCSSText(e,["verticalAlign","fontStyle","fontWeight","fontSize","fontFamily","textDecoration","color","opacity","backgroundColor","margin","padding"],t),this.collectCSSText(e,["width","height"],t)&&t.push("display:inline-block;")}return t.join("")}getCSSTextForModelDecorationGlyphMarginClassName(e){if(!e)return"";const t=[];return void 0!==e.gutterIconPath&&(t.push(De.WU(No.gutterIconPath,Q.wY(z.o.revive(e.gutterIconPath)))),void 0!==e.gutterIconSize&&t.push(De.WU(No.gutterIconSize,e.gutterIconSize))),t.join("")}collectBorderSettingsCSSText(e,t){return!!this.collectCSSText(e,["border","borderColor","borderRadius","borderSpacing","borderStyle","borderWidth"],t)&&(t.push(De.WU("box-sizing: border-box;")),!0)}collectCSSText(e,t,i){const n=i.length;for(let n of t){const t=this.resolveValue(e[n]);"string"==typeof t&&i.push(De.WU(No[n],t))}return i.length!==n}resolveValue(e){if((0,ve.I)(e)){this._usesThemeColors=!0;const t=this._theme.getColor(e.id);return t?t.toString():"transparent"}return e}}class Io{static getClassName(e,t){return"ced-"+e+"-"+t}static getSelector(e,t,i){let n=".monaco-editor ."+this.getClassName(e,i);return t&&(n=n+"."+this.getClassName(t,i)),3===i?n+="::before":4===i&&(n+="::after"),n}}var Eo=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},To=function(e,t){return function(i,n){t(i,n,e)}};let Mo=class extends So{constructor(e,t,i){super(e,i),this.onCodeEditorAdd((()=>this._checkContextKey())),this.onCodeEditorRemove((()=>this._checkContextKey())),this._editorIsOpen=t.createKey("editorIsOpen",!1),this._activeCodeEditor=null}_checkContextKey(){let e=!1;for(const t of this.listCodeEditors())if(!t.isSimpleWidget){e=!0;break}this._editorIsOpen.set(e)}setActiveCodeEditor(e){this._activeCodeEditor=e}getActiveCodeEditor(){return this._activeCodeEditor}openCodeEditor(e,t,i){return t?Promise.resolve(this.doOpenEditor(t,e)):Promise.resolve(null)}doOpenEditor(e,t){if(!this.findModel(e,t.resource)){if(t.resource){const i=t.resource.scheme;if(i===te.lg.http||i===te.lg.https)return(0,Q.V3)(t.resource.toString()),e}return null}const i=t.options?t.options.selection:null;if(i)if("number"==typeof i.endLineNumber&&"number"==typeof i.endColumn)e.setSelection(i),e.revealRangeInCenter(i,1);else{const t={lineNumber:i.startLineNumber,column:i.startColumn};e.setPosition(t),e.revealPositionInCenter(t,1)}return e}findModel(e,t){const i=e.getModel();return i&&i.uri.toString()!==t.toString()?null:i}};Mo=Eo([To(1,xi.i6),To(2,mn.XE)],Mo);var Ao=i(81170),Oo=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Po=function(e,t){return function(i,n){t(i,n,e)}};let Ro=0,Fo=!1;let Bo=class extends sn.Gm{constructor(e,t,i,n,o,s,r,a,l,c){const d=Object.assign({},t);d.ariaLabel=d.ariaLabel||Pi.B8.editorViewAccessibleLabel,d.ariaLabel=d.ariaLabel+";"+Pi.B8.accessibilityHelpMessage,super(e,d,{},i,n,o,s,a,l,c),this._standaloneKeybindingService=r instanceof $i?r:null,function(e){if(!e){if(Fo)return;Fo=!0}on.wW(e||document.body)}(d.ariaContainerElement)}addCommand(e,t,i){if(!this._standaloneKeybindingService)return console.warn("Cannot add command because the editor is configured with an unrecognized KeybindingService"),null;let n="DYNAMIC_"+ ++Ro,o=xi.Ao.deserialize(i);return this._standaloneKeybindingService.addDynamicKeybinding(n,e,t,o),n}createContextKey(e,t){return this._contextKeyService.createKey(e,t)}addAction(e){if("string"!=typeof e.id||"string"!=typeof e.label||"function"!=typeof e.run)throw new Error("Invalid action descriptor, `id`, `label` and `run` are required properties!");if(!this._standaloneKeybindingService)return console.warn("Cannot add keybinding because the editor is configured with an unrecognized KeybindingService"),ue.JT.None;const t=e.id,i=e.label,n=xi.Ao.and(xi.Ao.equals("editorId",this.getId()),xi.Ao.deserialize(e.precondition)),o=e.keybindings,s=xi.Ao.and(n,xi.Ao.deserialize(e.keybindingContext)),r=e.contextMenuGroupId||null,a=e.contextMenuOrder||0,l=(t,...i)=>Promise.resolve(e.run(this,...i)),c=new ue.SL,d=this.getId()+":"+t;if(c.add(ne.P.registerCommand(d,l)),r){let e={command:{id:d,title:i},when:n,group:r,order:a};c.add(mo.BH.appendMenuItem(mo.eH.EditorContext,e))}if(Array.isArray(o))for(const e of o)c.add(this._standaloneKeybindingService.addDynamicKeybinding(d,e,l,s));let h=new po.p(d,i,i,n,l,this._contextKeyService);return this._actions[t]=h,c.add((0,ue.OF)((()=>{delete this._actions[t]}))),c}_triggerCommand(e,t){if(this._codeEditorService instanceof Mo)try{this._codeEditorService.setActiveCodeEditor(this),super._triggerCommand(e,t)}finally{this._codeEditorService.setActiveCodeEditor(null)}else super._triggerCommand(e,t)}};Bo=Oo([Po(2,Pn.TG),Po(3,Y.$),Po(4,ne.H),Po(5,xi.i6),Po(6,vo.d),Po(7,mn.XE),Po(8,Ai.lT),Po(9,_o.F)],Bo);let Vo=class extends Bo{constructor(e,t,i,n,o,s,r,a,l,c,d,h,u,g,p){const f=Object.assign({},t);Xi(h,f,!1);const m=c.registerEditorContainer(e);"string"==typeof f.theme&&c.setTheme(f.theme),void 0!==f.autoDetectHighContrast&&c.setAutoDetectHighContrast(Boolean(f.autoDetectHighContrast));let v,_=f.model;if(delete f.model,super(e,f,n,o,s,r,a,c,d,u),this._contextViewService=l,this._configurationService=h,this._standaloneThemeService=c,this._register(i),this._register(m),void 0===_?(v=Ho(g,p,f.value||"",f.language||Ao.vW.text,void 0),this._ownsModel=!0):(v=_,this._ownsModel=!1),this._attachModel(v),v){let e={oldModelUrl:null,newModelUrl:v.uri};this._onDidChangeModel.fire(e)}}dispose(){super.dispose()}updateOptions(e){Xi(this._configurationService,e,!1),"string"==typeof e.theme&&this._standaloneThemeService.setTheme(e.theme),void 0!==e.autoDetectHighContrast&&this._standaloneThemeService.setAutoDetectHighContrast(Boolean(e.autoDetectHighContrast)),super.updateOptions(e)}_attachModel(e){super._attachModel(e),this._modelData&&this._contextViewService.setContainer(this._modelData.view.domNode.domNode)}_postDetachModelCleanup(e){super._postDetachModelCleanup(e),e&&this._ownsModel&&(e.dispose(),this._ownsModel=!1)}};Vo=Oo([Po(3,Pn.TG),Po(4,Y.$),Po(5,ne.H),Po(6,xi.i6),Po(7,vo.d),Po(8,Fn.u),Po(9,fo.Z),Po(10,Ai.lT),Po(11,gi.Ui),Po(12,_o.F),Po(13,vt.q),Po(14,Ce.h)],Vo);let Wo=class extends Xn{constructor(e,t,i,n,o,s,r,a,l,c,d,h,u,g,p){const f=Object.assign({},t);Xi(h,f,!0);const m=c.registerEditorContainer(e);"string"==typeof f.theme&&c.setTheme(f.theme),void 0!==f.autoDetectHighContrast&&c.setAutoDetectHighContrast(Boolean(f.autoDetectHighContrast)),super(e,f,{},p,a,o,n,l,c,d,u,g),this._contextViewService=r,this._configurationService=h,this._standaloneThemeService=c,this._register(i),this._register(m),this._contextViewService.setContainer(this._containerDomElement)}dispose(){super.dispose()}updateOptions(e){Xi(this._configurationService,e,!0),"string"==typeof e.theme&&this._standaloneThemeService.setTheme(e.theme),void 0!==e.autoDetectHighContrast&&this._standaloneThemeService.setAutoDetectHighContrast(Boolean(e.autoDetectHighContrast)),super.updateOptions(e)}_createInnerEditor(e,t,i){return e.createInstance(Bo,t,i)}getOriginalEditor(){return super.getOriginalEditor()}getModifiedEditor(){return super.getModifiedEditor()}addCommand(e,t,i){return this.getModifiedEditor().addCommand(e,t,i)}createContextKey(e,t){return this.getModifiedEditor().createContextKey(e,t)}addAction(e){return this.getModifiedEditor().addAction(e)}};function Ho(e,t,i,n,o){if(i=i||"",!n){const n=i.indexOf("\n");let s=i;return-1!==n&&(s=i.substring(0,n)),zo(e,i,t.createByFilepathOrFirstLine(o||null,s),o)}return zo(e,i,t.create(n),o)}function zo(e,t,i,n){return e.createModel(t,i,n)}Wo=Oo([Po(3,Pn.TG),Po(4,xi.i6),Po(5,vo.d),Po(6,Fn.u),Po(7,ye.p),Po(8,Y.$),Po(9,fo.Z),Po(10,Ai.lT),Po(11,gi.Ui),Po(12,Fn.i),Po(13,zn.e),Po(14,Hn.p)],Wo);var jo=i(71144),Uo=i(89872);const $o=Object.prototype.hasOwnProperty;class Ko{constructor(){this._languageIdToLanguage=[],this._languageToLanguageId=new Map,this._register(we.TG,0),this._register(jo.XT,1),this._nextLanguageId=2}_register(e,t){this._languageIdToLanguage[t]=e,this._languageToLanguageId.set(e,t)}register(e){if(this._languageToLanguageId.has(e))return;const t=this._nextLanguageId++;this._register(e,t)}encodeLanguageId(e){return this._languageToLanguageId.get(e)||0}decodeLanguageId(e){return this._languageIdToLanguage[e]||we.TG}}class qo extends ue.JT{constructor(e=!0,t=!1){super(),this._onDidChange=this._register(new W.Q5),this.onDidChange=this._onDidChange.event,qo.instanceCount++,this._warnOnOverwrite=t,this.languageIdCodec=new Ko,this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},e&&(this._initializeFromRegistry(),this._register(jo.dQ.onDidChangeLanguages((e=>{this._initializeFromRegistry()}))))}dispose(){qo.instanceCount--,super.dispose()}_initializeFromRegistry(){this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},Ao.bS();const e=jo.dQ.getLanguages();this._registerLanguages(e)}_registerLanguages(e){for(const t of e)this._registerLanguage(t);this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},Object.keys(this._languages).forEach((e=>{let t=this._languages[e];t.name&&(this._nameMap[t.name]=t.identifier),t.aliases.forEach((e=>{this._lowercaseNameMap[e.toLowerCase()]=t.identifier})),t.mimetypes.forEach((e=>{this._mimeTypesMap[e]=t.identifier}))})),Uo.B.as(pi.IP.Configuration).registerOverrideIdentifiers(jo.dQ.getLanguages().map((e=>e.id))),this._onDidChange.fire()}_registerLanguage(e){const t=e.id;let i;$o.call(this._languages,t)?i=this._languages[t]:(this.languageIdCodec.register(t),i={identifier:t,name:null,mimetypes:[],aliases:[],extensions:[],filenames:[],configurationFiles:[]},this._languages[t]=i),this._mergeLanguage(i,e)}_mergeLanguage(e,t){const i=t.id;let n=null;if(Array.isArray(t.mimetypes)&&t.mimetypes.length>0&&(e.mimetypes.push(...t.mimetypes),n=t.mimetypes[0]),n||(n=`text/x-${i}`,e.mimetypes.push(n)),Array.isArray(t.extensions)){t.configuration?e.extensions=t.extensions.concat(e.extensions):e.extensions=e.extensions.concat(t.extensions);for(let e of t.extensions)Ao.sA({id:i,mime:n,extension:e},this._warnOnOverwrite)}if(Array.isArray(t.filenames))for(let o of t.filenames)Ao.sA({id:i,mime:n,filename:o},this._warnOnOverwrite),e.filenames.push(o);if(Array.isArray(t.filenamePatterns))for(let e of t.filenamePatterns)Ao.sA({id:i,mime:n,filepattern:e},this._warnOnOverwrite);if("string"==typeof t.firstLine&&t.firstLine.length>0){let e=t.firstLine;"^"!==e.charAt(0)&&(e="^"+e);try{let t=new RegExp(e);De.IO(t)||Ao.sA({id:i,mime:n,firstline:t},this._warnOnOverwrite)}catch(e){(0,ke.dL)(e)}}e.aliases.push(i);let o=null;if(void 0!==t.aliases&&Array.isArray(t.aliases)&&(o=0===t.aliases.length?[null]:t.aliases),null!==o)for(const t of o)t&&0!==t.length&&e.aliases.push(t);let s=null!==o&&o.length>0;if(s&&null===o[0]);else{let t=(s?o[0]:null)||i;!s&&e.name||(e.name=t)}t.configuration&&e.configurationFiles.push(t.configuration)}isRegisteredMode(e){return!!$o.call(this._mimeTypesMap,e)||$o.call(this._languages,e)}getModeIdForLanguageNameLowercase(e){return $o.call(this._lowercaseNameMap,e)?this._lowercaseNameMap[e]:null}extractModeIds(e){return e?e.split(",").map((e=>e.trim())).map((e=>$o.call(this._mimeTypesMap,e)?this._mimeTypesMap[e]:e)).filter((e=>$o.call(this._languages,e))):[]}validateLanguageId(e){return e&&e!==we.TG?$o.call(this._languages,e)?e:null:we.TG}getModeIdsFromFilepathOrFirstLine(e,t){if(!e&&!t)return[];let i=Ao.G8(e,t);return this.extractModeIds(i.join(","))}}qo.instanceCount=0;class Zo{constructor(e,t){let i;this._selector=t,this.languageId=this._selector(),this._onDidChange=new W.Q5({onFirstListenerAdd:()=>{i=e((()=>this._evaluate()))},onLastListenerRemove:()=>{i.dispose()}}),this.onDidChange=this._onDidChange.event}_evaluate(){const e=this._selector();e!==this.languageId&&(this.languageId=e,this._onDidChange.fire(this.languageId))}}class Go extends ue.JT{constructor(e=!1){super(),this._onDidEncounterLanguage=this._register(new W.Q5),this.onDidEncounterLanguage=this._onDidEncounterLanguage.event,this._onLanguagesMaybeChanged=this._register(new W.Q5({leakWarningThreshold:200})),this.onLanguagesMaybeChanged=this._onLanguagesMaybeChanged.event,Go.instanceCount++,this._encounteredLanguages=new Set,this._registry=this._register(new qo(!0,e)),this.languageIdCodec=this._registry.languageIdCodec,this._register(this._registry.onDidChange((()=>this._onLanguagesMaybeChanged.fire())))}dispose(){Go.instanceCount--,super.dispose()}isRegisteredMode(e){return this._registry.isRegisteredMode(e)}getModeIdForLanguageName(e){return this._registry.getModeIdForLanguageNameLowercase(e)}getModeIdByFilepathOrFirstLine(e,t){const i=this._registry.getModeIdsFromFilepathOrFirstLine(e,t);return(0,bt.Xh)(i,null)}getModeId(e){const t=this._registry.extractModeIds(e);return(0,bt.Xh)(t,null)}validateLanguageId(e){return this._registry.validateLanguageId(e)}create(e){return new Zo(this.onLanguagesMaybeChanged,(()=>{const t=this.getModeId(e);return this._createModeAndGetLanguageIdentifier(t)}))}createByFilepathOrFirstLine(e,t){return new Zo(this.onLanguagesMaybeChanged,(()=>{const i=this.getModeIdByFilepathOrFirstLine(e,t);return this._createModeAndGetLanguageIdentifier(i)}))}_createModeAndGetLanguageIdentifier(e){const t=this.validateLanguageId(e||"plaintext")||we.TG;return this._getOrCreateMode(t),t}triggerMode(e){const t=this.getModeId(e);this._getOrCreateMode(t||"plaintext")}_getOrCreateMode(e){if(!this._encounteredLanguages.has(e)){this._encounteredLanguages.add(e);const t=this.validateLanguageId(e)||we.TG;this._onDidEncounterLanguage.fire(t)}}}Go.instanceCount=0;var Yo=i(32334),Qo=i(41264);class Xo{constructor(e,t,i,n,o){this._parsedThemeRuleBrand=void 0,this.token=e,this.index=t,this.fontStyle=i,this.foreground=n,this.background=o}}const Jo=/^#?([0-9A-Fa-f]{6})([0-9A-Fa-f]{2})?$/;class es{constructor(){this._lastColorId=0,this._id2color=[],this._color2id=new Map}getId(e){if(null===e)return 0;const t=e.match(Jo);if(!t)throw new Error("Illegal value for token color: "+e);e=t[1].toUpperCase();let i=this._color2id.get(e);return i||(i=++this._lastColorId,this._color2id.set(e,i),this._id2color[i]=Qo.Il.fromHex("#"+e),i)}getColorMap(){return this._id2color.slice(0)}}class ts{constructor(e,t){this._colorMap=e,this._root=t,this._cache=new Map}static createFromRawTokenTheme(e,t){return this.createFromParsedTokenTheme(function(e){if(!e||!Array.isArray(e))return[];let t=[],i=0;for(let n=0,o=e.length;n<o;n++){let o=e[n],s=-1;if("string"==typeof o.fontStyle){s=0;let e=o.fontStyle.split(" ");for(let t=0,i=e.length;t<i;t++)switch(e[t]){case"italic":s|=1;break;case"bold":s|=2;break;case"underline":s|=4}}let r=null;"string"==typeof o.foreground&&(r=o.foreground);let a=null;"string"==typeof o.background&&(a=o.background),t[i++]=new Xo(o.token||"",n,s,r,a)}return t}(e),t)}static createFromParsedTokenTheme(e,t){return function(e,t){e.sort(((e,t)=>{let i=function(e,t){return e<t?-1:e>t?1:0}(e.token,t.token);return 0!==i?i:e.index-t.index}));let i=0,n="000000",o="ffffff";for(;e.length>=1&&""===e[0].token;){let t=e.shift();-1!==t.fontStyle&&(i=t.fontStyle),null!==t.foreground&&(n=t.foreground),null!==t.background&&(o=t.background)}let s=new es;for(let e of t)s.getId(e);let r=s.getId(n),a=s.getId(o),l=new ns(i,r,a),c=new os(l);for(let t=0,i=e.length;t<i;t++){let i=e[t];c.insert(i.token,i.fontStyle,s.getId(i.foreground),s.getId(i.background))}return new ts(s,c)}(e,t)}getColorMap(){return this._colorMap.getColorMap()}_match(e){return this._root.match(e)}match(e,t){let i=this._cache.get(t);if(void 0===i){let e=this._match(t),n=function(e){let t=e.match(is);if(!t)return 0;switch(t[1]){case"comment":return 1;case"string":return 2;case"regex":case"regexp":return 4}throw new Error("Unexpected match for standard token type!")}(t);i=(e.metadata|n<<8)>>>0,this._cache.set(t,i)}return(i|e<<0)>>>0}}const is=/\b(comment|string|regex|regexp)\b/;class ns{constructor(e,t,i){this._themeTrieElementRuleBrand=void 0,this._fontStyle=e,this._foreground=t,this._background=i,this.metadata=(this._fontStyle<<11|this._foreground<<14|this._background<<23)>>>0}clone(){return new ns(this._fontStyle,this._foreground,this._background)}acceptOverwrite(e,t,i){-1!==e&&(this._fontStyle=e),0!==t&&(this._foreground=t),0!==i&&(this._background=i),this.metadata=(this._fontStyle<<11|this._foreground<<14|this._background<<23)>>>0}}class os{constructor(e){this._themeTrieElementBrand=void 0,this._mainRule=e,this._children=new Map}match(e){if(""===e)return this._mainRule;let t,i,n=e.indexOf(".");-1===n?(t=e,i=""):(t=e.substring(0,n),i=e.substring(n+1));let o=this._children.get(t);return void 0!==o?o.match(i):this._mainRule}insert(e,t,i,n){if(""===e)return void this._mainRule.acceptOverwrite(t,i,n);let o,s,r=e.indexOf(".");-1===r?(o=e,s=""):(o=e.substring(0,r),s=e.substring(r+1));let a=this._children.get(o);void 0===a&&(a=new os(this._mainRule.clone()),this._children.set(o,a)),a.insert(s,t,i,n)}}const ss={base:"vs",inherit:!1,rules:[{token:"",foreground:"000000",background:"fffffe"},{token:"invalid",foreground:"cd3131"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"001188"},{token:"variable.predefined",foreground:"4864AA"},{token:"constant",foreground:"dd0000"},{token:"comment",foreground:"008000"},{token:"number",foreground:"098658"},{token:"number.hex",foreground:"3030c0"},{token:"regexp",foreground:"800000"},{token:"annotation",foreground:"808080"},{token:"type",foreground:"008080"},{token:"delimiter",foreground:"000000"},{token:"delimiter.html",foreground:"383838"},{token:"delimiter.xml",foreground:"0000FF"},{token:"tag",foreground:"800000"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta.scss",foreground:"800000"},{token:"metatag",foreground:"e00000"},{token:"metatag.content.html",foreground:"FF0000"},{token:"metatag.html",foreground:"808080"},{token:"metatag.xml",foreground:"808080"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"863B00"},{token:"string.key.json",foreground:"A31515"},{token:"string.value.json",foreground:"0451A5"},{token:"attribute.name",foreground:"FF0000"},{token:"attribute.value",foreground:"0451A5"},{token:"attribute.value.number",foreground:"098658"},{token:"attribute.value.unit",foreground:"098658"},{token:"attribute.value.html",foreground:"0000FF"},{token:"attribute.value.xml",foreground:"0000FF"},{token:"string",foreground:"A31515"},{token:"string.html",foreground:"0000FF"},{token:"string.sql",foreground:"FF0000"},{token:"string.yaml",foreground:"0451A5"},{token:"keyword",foreground:"0000FF"},{token:"keyword.json",foreground:"0451A5"},{token:"keyword.flow",foreground:"AF00DB"},{token:"keyword.flow.scss",foreground:"0000FF"},{token:"operator.scss",foreground:"666666"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"666666"},{token:"predefined.sql",foreground:"C700C7"}],colors:{[fn.cv]:"#FFFFFE",[fn.NO]:"#000000",[fn.ES]:"#E5EBF1",[pn.tR]:"#D3D3D3",[pn.Ym]:"#939393",[fn.Rz]:"#ADD6FF4D"}},rs={base:"vs-dark",inherit:!1,rules:[{token:"",foreground:"D4D4D4",background:"1E1E1E"},{token:"invalid",foreground:"f44747"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"74B0DF"},{token:"variable.predefined",foreground:"4864AA"},{token:"variable.parameter",foreground:"9CDCFE"},{token:"constant",foreground:"569CD6"},{token:"comment",foreground:"608B4E"},{token:"number",foreground:"B5CEA8"},{token:"number.hex",foreground:"5BB498"},{token:"regexp",foreground:"B46695"},{token:"annotation",foreground:"cc6666"},{token:"type",foreground:"3DC9B0"},{token:"delimiter",foreground:"DCDCDC"},{token:"delimiter.html",foreground:"808080"},{token:"delimiter.xml",foreground:"808080"},{token:"tag",foreground:"569CD6"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta.scss",foreground:"A79873"},{token:"meta.tag",foreground:"CE9178"},{token:"metatag",foreground:"DD6A6F"},{token:"metatag.content.html",foreground:"9CDCFE"},{token:"metatag.html",foreground:"569CD6"},{token:"metatag.xml",foreground:"569CD6"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"9CDCFE"},{token:"string.key.json",foreground:"9CDCFE"},{token:"string.value.json",foreground:"CE9178"},{token:"attribute.name",foreground:"9CDCFE"},{token:"attribute.value",foreground:"CE9178"},{token:"attribute.value.number.css",foreground:"B5CEA8"},{token:"attribute.value.unit.css",foreground:"B5CEA8"},{token:"attribute.value.hex.css",foreground:"D4D4D4"},{token:"string",foreground:"CE9178"},{token:"string.sql",foreground:"FF0000"},{token:"keyword",foreground:"569CD6"},{token:"keyword.flow",foreground:"C586C0"},{token:"keyword.json",foreground:"CE9178"},{token:"keyword.flow.scss",foreground:"569CD6"},{token:"operator.scss",foreground:"909090"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"909090"},{token:"predefined.sql",foreground:"FF00FF"}],colors:{[fn.cv]:"#1E1E1E",[fn.NO]:"#D4D4D4",[fn.ES]:"#3A3D41",[pn.tR]:"#404040",[pn.Ym]:"#707070",[fn.Rz]:"#ADD6FF26"}},as={base:"hc-black",inherit:!1,rules:[{token:"",foreground:"FFFFFF",background:"000000"},{token:"invalid",foreground:"f44747"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"1AEBFF"},{token:"variable.parameter",foreground:"9CDCFE"},{token:"constant",foreground:"569CD6"},{token:"comment",foreground:"608B4E"},{token:"number",foreground:"FFFFFF"},{token:"regexp",foreground:"C0C0C0"},{token:"annotation",foreground:"569CD6"},{token:"type",foreground:"3DC9B0"},{token:"delimiter",foreground:"FFFF00"},{token:"delimiter.html",foreground:"FFFF00"},{token:"tag",foreground:"569CD6"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta",foreground:"D4D4D4"},{token:"meta.tag",foreground:"CE9178"},{token:"metatag",foreground:"569CD6"},{token:"metatag.content.html",foreground:"1AEBFF"},{token:"metatag.html",foreground:"569CD6"},{token:"metatag.xml",foreground:"569CD6"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"9CDCFE"},{token:"string.key",foreground:"9CDCFE"},{token:"string.value",foreground:"CE9178"},{token:"attribute.name",foreground:"569CD6"},{token:"attribute.value",foreground:"3FF23F"},{token:"string",foreground:"CE9178"},{token:"string.sql",foreground:"FF0000"},{token:"keyword",foreground:"569CD6"},{token:"keyword.flow",foreground:"C586C0"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"909090"},{token:"predefined.sql",foreground:"FF00FF"}],colors:{[fn.cv]:"#000000",[fn.NO]:"#FFFFFF",[pn.tR]:"#FFFFFF",[pn.Ym]:"#FFFFFF"}};var ls=i(92321);const cs="vs",ds="vs-dark",hs="hc-black",us=Uo.B.as(fn.IP.ColorContribution),gs=Uo.B.as(mn.IP.ThemingContribution);class ps{constructor(e,t){this.semanticHighlighting=!1,this.themeData=t;let i=t.base;e.length>0?(fs(e)?this.id=e:this.id=i+" "+e,this.themeName=e):(this.id=i,this.themeName=i),this.colors=null,this.defaultColors=Object.create(null),this._tokenTheme=null}get base(){return this.themeData.base}notifyBaseUpdated(){this.themeData.inherit&&(this.colors=null,this._tokenTheme=null)}getColors(){if(!this.colors){const e=new Map;for(let t in this.themeData.colors)e.set(t,Qo.Il.fromHex(this.themeData.colors[t]));if(this.themeData.inherit){let t=ms(this.themeData.base);for(let i in t.colors)e.has(i)||e.set(i,Qo.Il.fromHex(t.colors[i]))}this.colors=e}return this.colors}getColor(e,t){const i=this.getColors().get(e);return i||(!1!==t?this.getDefault(e):void 0)}getDefault(e){let t=this.defaultColors[e];return t||(t=us.resolveDefaultColor(e,this),this.defaultColors[e]=t,t)}defines(e){return Object.prototype.hasOwnProperty.call(this.getColors(),e)}get type(){switch(this.base){case cs:return ls.e.LIGHT;case hs:return ls.e.HIGH_CONTRAST;default:return ls.e.DARK}}get tokenTheme(){if(!this._tokenTheme){let e=[],t=[];if(this.themeData.inherit){let i=ms(this.themeData.base);e=i.rules,i.encodedTokensColors&&(t=i.encodedTokensColors)}const i=this.themeData.colors["editor.foreground"],n=this.themeData.colors["editor.background"];if(i||n){const t={token:""};i&&(t.foreground=i),n&&(t.background=n),e.push(t)}e=e.concat(this.themeData.rules),this.themeData.encodedTokensColors&&(t=this.themeData.encodedTokensColors),this._tokenTheme=ts.createFromRawTokenTheme(e,t)}return this._tokenTheme}getTokenStyleMetadata(e,t,i){const n=this.tokenTheme._match([e].concat(t).join(".")).metadata,o=be.NX.getForeground(n),s=be.NX.getFontStyle(n);return{foreground:o,italic:Boolean(1&s),bold:Boolean(2&s),underline:Boolean(4&s)}}}function fs(e){return e===cs||e===ds||e===hs}function ms(e){switch(e){case cs:return ss;case ds:return rs;case hs:return as}}function vs(e){let t=ms(e);return new ps(e,t)}class _s extends ue.JT{constructor(){super(),this._onColorThemeChange=this._register(new W.Q5),this.onDidColorThemeChange=this._onColorThemeChange.event,this._environment=Object.create(null),this._autoDetectHighContrast=!0,this._knownThemes=new Map,this._knownThemes.set(cs,vs(cs)),this._knownThemes.set(ds,vs(ds)),this._knownThemes.set(hs,vs(hs));const e=function(){const e=new W.Q5,t=(0,_n.Ks)();return t.onDidChange((()=>e.fire())),{onDidChange:e.event,getCSS(){const e={},i=i=>{let n=i.defaults;for(;mn.kS.isThemeIcon(n);){const e=t.getIcon(n.id);if(!e)return;n=e.defaults}const o=n.fontId;if(o){const s=t.getIconFont(o);if(s)return e[o]=s,`.codicon-${i.id}:before { content: '${n.fontCharacter}'; font-family: ${(0,Q._h)(o)}; }`}return`.codicon-${i.id}:before { content: '${n.fontCharacter}'; }`},n=[];for(let e of t.getIcons()){const t=i(e);t&&n.push(t)}for(let t in e){const i=e[t].definition.src.map((e=>`${(0,Q.wY)(e.location)} format('${e.format}')`)).join(", ");n.push(`@font-face { src: ${i}; font-family: ${(0,Q._h)(t)}; font-display: block; }`)}return n.join("\n")}}}();this._codiconCSS=e.getCSS(),this._themeCSS="",this._allCSS=`${this._codiconCSS}\n${this._themeCSS}`,this._globalStyleElement=null,this._styleElements=[],this._colorMapOverride=null,this.setTheme(cs),e.onDidChange((()=>{this._codiconCSS=e.getCSS(),this._updateCSS()})),Q.uB("(forced-colors: active)",(()=>{this._updateActualTheme()}))}registerEditorContainer(e){return Q.OO(e)?this._registerShadowDomContainer(e):this._registerRegularEditorContainer()}_registerRegularEditorContainer(){return this._globalStyleElement||(this._globalStyleElement=Q.dS(),this._globalStyleElement.className="monaco-colors",this._globalStyleElement.textContent=this._allCSS,this._styleElements.push(this._globalStyleElement)),ue.JT.None}_registerShadowDomContainer(e){const t=Q.dS(e);return t.className="monaco-colors",t.textContent=this._allCSS,this._styleElements.push(t),{dispose:()=>{for(let e=0;e<this._styleElements.length;e++)if(this._styleElements[e]===t)return void this._styleElements.splice(e,1)}}}defineTheme(e,t){if(!/^[a-z0-9\-]+$/i.test(e))throw new Error("Illegal theme name!");if(!fs(t.base)&&!fs(e))throw new Error("Illegal theme base!");this._knownThemes.set(e,new ps(e,t)),fs(e)&&this._knownThemes.forEach((t=>{t.base===e&&t.notifyBaseUpdated()})),this._theme.themeName===e&&this.setTheme(e)}getColorTheme(){return this._theme}setColorMapOverride(e){this._colorMapOverride=e,this._updateThemeOrColorMap()}setTheme(e){let t;t=this._knownThemes.has(e)?this._knownThemes.get(e):this._knownThemes.get(cs),this._desiredTheme=t,this._updateActualTheme()}_updateActualTheme(){const e=this._autoDetectHighContrast&&window.matchMedia("(forced-colors: active)").matches?this._knownThemes.get(hs):this._desiredTheme;this._theme!==e&&(this._theme=e,this._updateThemeOrColorMap())}setAutoDetectHighContrast(e){this._autoDetectHighContrast=e,this._updateActualTheme()}_updateThemeOrColorMap(){let e=[],t={},i={addRule:i=>{t[i]||(e.push(i),t[i]=!0)}};gs.getThemingParticipants().forEach((e=>e(this._theme,i,this._environment)));const n=this._colorMapOverride||this._theme.tokenTheme.getColorMap();i.addRule(function(e){let t=[];for(let i=1,n=e.length;i<n;i++){let n=e[i];t[i]=`.mtk${i} { color: ${n}; }`}return t.push(".mtki { font-style: italic; }"),t.push(".mtkb { font-weight: bold; }"),t.push(".mtku { text-decoration: underline; text-underline-position: under; }"),t.join("\n")}(n)),this._themeCSS=e.join("\n"),this._updateCSS(),be.RW.setColorMap(n),this._onColorThemeChange.fire(this._theme)}_updateCSS(){this._allCSS=`${this._codiconCSS}\n${this._themeCSS}`,this._styleElements.forEach((e=>e.textContent=this._allCSS))}getFileIconTheme(){return{hasFileIcons:!1,hasFolderIcons:!1,hidesExplorerArrows:!1}}}var bs=i(53725),ws=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},ys=function(e,t){return function(i,n){t(i,n,e)}};const Cs="data-keybinding-context";class xs{constructor(e,t){this._id=e,this._parent=t,this._value=Object.create(null),this._value._contextId=e}setValue(e,t){return this._value[e]!==t&&(this._value[e]=t,!0)}removeValue(e){return e in this._value&&(delete this._value[e],!0)}getValue(e){const t=this._value[e];return void 0===t&&this._parent?this._parent.getValue(e):t}}class Ss extends xs{constructor(){super(-1,null)}setValue(e,t){return!1}removeValue(e){return!1}getValue(e){}}Ss.INSTANCE=new Ss;class ks extends xs{constructor(e,t,i){super(e,null),this._configurationService=t,this._values=J.Id.forConfigKeys(),this._listener=this._configurationService.onDidChangeConfiguration((e=>{if(6===e.source){const e=Array.from(bs.$.map(this._values,(([e])=>e)));this._values.clear(),i.fire(new Ds(e))}else{const t=[];for(const i of e.affectedKeys){const e=`config.${i}`,n=this._values.findSuperstr(e);void 0!==n&&(t.push(...bs.$.map(n,(([e])=>e))),this._values.deleteSuperstr(e)),this._values.has(e)&&(t.push(e),this._values.delete(e))}i.fire(new Ds(t))}}))}dispose(){this._listener.dispose()}getValue(e){if(0!==e.indexOf(ks._keyPrefix))return super.getValue(e);if(this._values.has(e))return this._values.get(e);const t=e.substr(ks._keyPrefix.length),i=this._configurationService.getValue(t);let n;switch(typeof i){case"number":case"boolean":case"string":n=i;break;default:n=Array.isArray(i)?JSON.stringify(i):i}return this._values.set(e,n),n}setValue(e,t){return super.setValue(e,t)}removeValue(e){return super.removeValue(e)}}ks._keyPrefix="config.";class Ls{constructor(e,t,i){this._service=e,this._key=t,this._defaultValue=i,this.reset()}set(e){this._service.setContext(this._key,e)}reset(){void 0===this._defaultValue?this._service.removeContext(this._key):this._service.setContext(this._key,this._defaultValue)}get(){return this._service.getContextKeyValue(this._key)}}class Ns{constructor(e){this.key=e}affectsSome(e){return e.has(this.key)}}class Ds{constructor(e){this.keys=e}affectsSome(e){for(const t of this.keys)if(e.has(t))return!0;return!1}}class Is{constructor(e){this.events=e}affectsSome(e){for(const t of this.events)if(t.affectsSome(e))return!0;return!1}}class Es{constructor(e){this._onDidChangeContext=new W.K3({merge:e=>new Is(e)}),this.onDidChangeContext=this._onDidChangeContext.event,this._isDisposed=!1,this._myContextId=e}createKey(e,t){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");return new Ls(this,e,t)}bufferChangeEvents(e){this._onDidChangeContext.pause();try{e()}finally{this._onDidChangeContext.resume()}}createScoped(e){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");return new Ms(this,e)}contextMatchesRules(e){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");const t=this.getContextValuesContainer(this._myContextId);return Si.contextMatchesRules(t,e)}getContextKeyValue(e){if(!this._isDisposed)return this.getContextValuesContainer(this._myContextId).getValue(e)}setContext(e,t){if(this._isDisposed)return;const i=this.getContextValuesContainer(this._myContextId);i&&i.setValue(e,t)&&this._onDidChangeContext.fire(new Ns(e))}removeContext(e){this._isDisposed||this.getContextValuesContainer(this._myContextId).removeValue(e)&&this._onDidChangeContext.fire(new Ns(e))}getContext(e){return this._isDisposed?Ss.INSTANCE:this.getContextValuesContainer(function(e){for(;e;){if(e.hasAttribute(Cs)){const t=e.getAttribute(Cs);return t?parseInt(t,10):NaN}e=e.parentElement}return 0}(e))}}let Ts=class extends Es{constructor(e){super(0),this._contexts=new Map,this._toDispose=new ue.SL,this._lastContextId=0;const t=new ks(this._myContextId,e,this._onDidChangeContext);this._contexts.set(this._myContextId,t),this._toDispose.add(t)}dispose(){this._onDidChangeContext.dispose(),this._isDisposed=!0,this._toDispose.dispose()}getContextValuesContainer(e){return this._isDisposed?Ss.INSTANCE:this._contexts.get(e)||Ss.INSTANCE}createChildContext(e=this._myContextId){if(this._isDisposed)throw new Error("ContextKeyService has been disposed");let t=++this._lastContextId;return this._contexts.set(t,new xs(t,this.getContextValuesContainer(e))),t}disposeContext(e){this._isDisposed||this._contexts.delete(e)}};Ts=ws([ys(0,gi.Ui)],Ts);class Ms extends Es{constructor(e,t){if(super(e.createChildContext()),this._parentChangeListener=new ue.XK,this._parent=e,this._updateParentChangeListener(),this._domNode=t,this._domNode.hasAttribute(Cs)){let e="";this._domNode.classList&&(e=Array.from(this._domNode.classList.values()).join(", ")),console.error("Element already has context attribute"+(e?": "+e:""))}this._domNode.setAttribute(Cs,String(this._myContextId))}_updateParentChangeListener(){this._parentChangeListener.value=this._parent.onDidChangeContext(this._onDidChangeContext.fire,this._onDidChangeContext)}dispose(){this._isDisposed||(this._onDidChangeContext.dispose(),this._parent.disposeContext(this._myContextId),this._parentChangeListener.dispose(),this._domNode.removeAttribute(Cs),this._isDisposed=!0)}getContextValuesContainer(e){return this._isDisposed?Ss.INSTANCE:this._parent.getContextValuesContainer(e)}createChildContext(e=this._myContextId){if(this._isDisposed)throw new Error("ScopedContextKeyService has been disposed");return this._parent.createChildContext(e)}disposeContext(e){this._isDisposed||this._parent.disposeContext(e)}}ne.P.registerCommand(xi.Eq,(function(e,t,i){e.get(xi.i6).createKey(String(t),i)})),ne.P.registerCommand({id:"getContextKeyInfo",handler:()=>[...xi.uy.all()].sort(((e,t)=>e.key.localeCompare(t.key))),description:{description:(0,bi.N)("getContextKeyInfo","A command that returns information about context keys"),args:[]}}),ne.P.registerCommand("_generateContextKeyInfo",(function(){const e=[],t=new Set;for(let i of xi.uy.all())t.has(i.key)||(t.add(i.key),e.push(i));e.sort(((e,t)=>e.key.localeCompare(t.key))),console.log(JSON.stringify(e,void 0,2))}));var As,Os=i(10829),Ps=i(23938),Rs=i(16268),Fs=i(10553),Bs=i(76033),Vs=i(28609),Ws=i(10161),Hs=i(61134);i(2170);function zs(e,t,i){const n=i.mode===As.ALIGN?i.offset:i.offset+i.size,o=i.mode===As.ALIGN?i.offset+i.size:i.offset;return 0===i.position?t<=e-n?n:t<=o?o-t:Math.max(e-t,0):t<=o?o-t:t<=e-n?n:0}!function(e){e[e.AVOID=0]="AVOID",e[e.ALIGN=1]="ALIGN"}(As||(As={}));class js extends ue.JT{constructor(e,t){super(),this.container=null,this.delegate=null,this.toDisposeOnClean=ue.JT.None,this.toDisposeOnSetContainer=ue.JT.None,this.shadowRoot=null,this.shadowRootHostElement=null,this.view=Q.$(".context-view"),this.useFixedPosition=!1,this.useShadowDOM=!1,Q.Cp(this.view),this.setContainer(e,t),this._register((0,ue.OF)((()=>this.setContainer(null,1))))}setContainer(e,t){var i;if(this.container&&(this.toDisposeOnSetContainer.dispose(),this.shadowRoot?(this.shadowRoot.removeChild(this.view),this.shadowRoot=null,null===(i=this.shadowRootHostElement)||void 0===i||i.remove(),this.shadowRootHostElement=null):this.container.removeChild(this.view),this.container=null),e){if(this.container=e,this.useFixedPosition=1!==t,this.useShadowDOM=3===t,this.useShadowDOM){this.shadowRootHostElement=Q.$(".shadow-root-host"),this.container.appendChild(this.shadowRootHostElement),this.shadowRoot=this.shadowRootHostElement.attachShadow({mode:"open"});const e=document.createElement("style");e.textContent=Us,this.shadowRoot.appendChild(e),this.shadowRoot.appendChild(this.view),this.shadowRoot.appendChild(Q.$("slot"))}else this.container.appendChild(this.view);const i=new ue.SL;js.BUBBLE_UP_EVENTS.forEach((e=>{i.add(Q.mu(this.container,e,(e=>{this.onDOMEvent(e,!1)})))})),js.BUBBLE_DOWN_EVENTS.forEach((e=>{i.add(Q.mu(this.container,e,(e=>{this.onDOMEvent(e,!0)}),!0))})),this.toDisposeOnSetContainer=i}}show(e){this.isVisible()&&this.hide(),Q.PO(this.view),this.view.className="context-view",this.view.style.top="0px",this.view.style.left="0px",this.view.style.zIndex="2500",this.view.style.position=this.useFixedPosition?"fixed":"absolute",Q.$Z(this.view),this.toDisposeOnClean=e.render(this.view)||ue.JT.None,this.delegate=e,this.doLayout(),this.delegate.focus&&this.delegate.focus()}getViewElement(){return this.view}layout(){this.isVisible()&&(!1!==this.delegate.canRelayout||Le.gn&&Ws.D.pointerEvents?(this.delegate.layout&&this.delegate.layout(),this.doLayout()):this.hide())}doLayout(){if(!this.isVisible())return;let e,t=this.delegate.getAnchor();if(Q.Re(t)){let i=Q.i(t);e={top:i.top,left:i.left,width:i.width,height:i.height}}else e={top:t.y,left:t.x,width:t.width||1,height:t.height||2};const i=Q.w(this.view),n=Q.wn(this.view),o=this.delegate.anchorPosition||0,s=this.delegate.anchorAlignment||0;let r,a;if(0===(this.delegate.anchorAxisAlignment||0)){const t={offset:e.top-window.pageYOffset,size:e.height,position:0===o?0:1},l={offset:e.left,size:e.width,position:0===s?0:1,mode:As.ALIGN};r=zs(window.innerHeight,n,t)+window.pageYOffset,Hs.e.intersects({start:r,end:r+n},{start:t.offset,end:t.offset+t.size})&&(l.mode=As.AVOID),a=zs(window.innerWidth,i,l)}else{const t={offset:e.left,size:e.width,position:0===s?0:1},l={offset:e.top,size:e.height,position:0===o?0:1,mode:As.ALIGN};a=zs(window.innerWidth,i,t),Hs.e.intersects({start:a,end:a+i},{start:t.offset,end:t.offset+t.size})&&(l.mode=As.AVOID),r=zs(window.innerHeight,n,l)+window.pageYOffset}this.view.classList.remove("top","bottom","left","right"),this.view.classList.add(0===o?"bottom":"top"),this.view.classList.add(0===s?"left":"right"),this.view.classList.toggle("fixed",this.useFixedPosition);const l=Q.i(this.container);this.view.style.top=r-(this.useFixedPosition?Q.i(this.view).top:l.top)+"px",this.view.style.left=a-(this.useFixedPosition?Q.i(this.view).left:l.left)+"px",this.view.style.width="initial"}hide(e){const t=this.delegate;this.delegate=null,(null==t?void 0:t.onHide)&&t.onHide(e),this.toDisposeOnClean.dispose(),Q.Cp(this.view)}isVisible(){return!!this.delegate}onDOMEvent(e,t){this.delegate&&(this.delegate.onDOMEvent?this.delegate.onDOMEvent(e,document.activeElement):t&&!Q.jg(e.target,this.container)&&this.hide())}dispose(){this.hide(),super.dispose()}}js.BUBBLE_UP_EVENTS=["click","keydown","focus","blur"],js.BUBBLE_DOWN_EVENTS=["click"];let Us='\n\t:host {\n\t\tall: initial; /* 1st rule so subsequent properties are reset. */\n\t}\n\n\t@font-face {\n\t\tfont-family: "codicon";\n\t\tfont-display: block;\n\t\tsrc: url("./codicon.ttf?5d4d76ab2ce5108968ad644d591a16a6") format("truetype");\n\t}\n\n\t.codicon[class*=\'codicon-\'] {\n\t\tfont: normal normal normal 16px/1 codicon;\n\t\tdisplay: inline-block;\n\t\ttext-decoration: none;\n\t\ttext-rendering: auto;\n\t\ttext-align: center;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t}\n\n\t:host {\n\t\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "HelveticaNeue-Light", system-ui, "Ubuntu", "Droid Sans", sans-serif;\n\t}\n\n\t:host-context(.mac) { font-family: -apple-system, BlinkMacSystemFont, sans-serif; }\n\t:host-context(.mac:lang(zh-Hans)) { font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", sans-serif; }\n\t:host-context(.mac:lang(zh-Hant)) { font-family: -apple-system, BlinkMacSystemFont, "PingFang TC", sans-serif; }\n\t:host-context(.mac:lang(ja)) { font-family: -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic Pro", sans-serif; }\n\t:host-context(.mac:lang(ko)) { font-family: -apple-system, BlinkMacSystemFont, "Nanum Gothic", "Apple SD Gothic Neo", "AppleGothic", sans-serif; }\n\n\t:host-context(.windows) { font-family: "Segoe WPC", "Segoe UI", sans-serif; }\n\t:host-context(.windows:lang(zh-Hans)) { font-family: "Segoe WPC", "Segoe UI", "Microsoft YaHei", sans-serif; }\n\t:host-context(.windows:lang(zh-Hant)) { font-family: "Segoe WPC", "Segoe UI", "Microsoft Jhenghei", sans-serif; }\n\t:host-context(.windows:lang(ja)) { font-family: "Segoe WPC", "Segoe UI", "Yu Gothic UI", "Meiryo UI", sans-serif; }\n\t:host-context(.windows:lang(ko)) { font-family: "Segoe WPC", "Segoe UI", "Malgun Gothic", "Dotom", sans-serif; }\n\n\t:host-context(.linux) { font-family: system-ui, "Ubuntu", "Droid Sans", sans-serif; }\n\t:host-context(.linux:lang(zh-Hans)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans SC", "Source Han Sans CN", "Source Han Sans", sans-serif; }\n\t:host-context(.linux:lang(zh-Hant)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans TC", "Source Han Sans TW", "Source Han Sans", sans-serif; }\n\t:host-context(.linux:lang(ja)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans J", "Source Han Sans JP", "Source Han Sans", sans-serif; }\n\t:host-context(.linux:lang(ko)) { font-family: system-ui, "Ubuntu", "Droid Sans", "Source Han Sans K", "Source Han Sans JR", "Source Han Sans", "UnDotum", "FBaekmuk Gulim", sans-serif; }\n';var $s=i(21212);const Ks=/\(&([^\s&])\)|(^|[^&])&([^\s&])/,qs=/(&amp;)?(&amp;)([^\s&])/g,Zs=(0,vn.CM)("menu-selection",vn.lA.check),Gs=(0,vn.CM)("menu-submenu",vn.lA.chevronRight);var Ys;!function(e){e[e.Right=0]="Right",e[e.Left=1]="Left"}(Ys||(Ys={}));class Qs extends dn.o{constructor(e,t,i={}){e.classList.add("monaco-menu-container"),e.setAttribute("role","presentation");const n=document.createElement("div");n.classList.add("monaco-menu"),n.setAttribute("role","presentation"),super(n,{orientation:1,actionViewItemProvider:e=>this.doGetActionViewItem(e,i,o),context:i.context,actionRunner:i.actionRunner,ariaLabel:i.ariaLabel,focusOnlyEnabledItems:!0,triggerKeys:{keys:[3,...Le.dz||Le.IJ?[10]:[]],keyDown:!0}}),this.menuElement=n,this.actionsList.setAttribute("role","menu"),this.actionsList.tabIndex=0,this.menuDisposables=this._register(new ue.SL),this.initializeStyleSheet(e),this._register(Fs.o.addTarget(n)),(0,Q.nm)(n,Q.tw.KEY_DOWN,(e=>{new ri.y(e).equals(2)&&e.preventDefault()})),i.enableMnemonics&&this.menuDisposables.add((0,Q.nm)(n,Q.tw.KEY_DOWN,(e=>{const t=e.key.toLocaleLowerCase();if(this.mnemonics.has(t)){Q.zB.stop(e,!0);const i=this.mnemonics.get(t);if(1===i.length&&(i[0]instanceof Js&&i[0].container&&this.focusItemByElement(i[0].container),i[0].onClick(e)),i.length>1){const e=i.shift();e&&e.container&&(this.focusItemByElement(e.container),i.push(e)),this.mnemonics.set(t,i)}}}))),Le.IJ&&this._register((0,Q.nm)(n,Q.tw.KEY_DOWN,(e=>{const t=new ri.y(e);t.equals(14)||t.equals(11)?(this.focusedItem=this.viewItems.length-1,this.focusNext(),Q.zB.stop(e,!0)):(t.equals(13)||t.equals(12))&&(this.focusedItem=0,this.focusPrevious(),Q.zB.stop(e,!0))}))),this._register((0,Q.nm)(this.domNode,Q.tw.MOUSE_OUT,(e=>{let t=e.relatedTarget;(0,Q.jg)(t,this.domNode)||(this.focusedItem=void 0,this.updateFocus(),e.stopPropagation())}))),this._register((0,Q.nm)(this.actionsList,Q.tw.MOUSE_OVER,(e=>{let t=e.target;if(t&&(0,Q.jg)(t,this.actionsList)&&t!==this.actionsList){for(;t.parentElement!==this.actionsList&&null!==t.parentElement;)t=t.parentElement;if(t.classList.contains("action-item")){const e=this.focusedItem;this.setFocusedItem(t),e!==this.focusedItem&&this.updateFocus()}}}))),this._register(Fs.o.addTarget(this.actionsList)),this._register((0,Q.nm)(this.actionsList,Fs.t.Tap,(e=>{let t=e.initialTarget;if(t&&(0,Q.jg)(t,this.actionsList)&&t!==this.actionsList){for(;t.parentElement!==this.actionsList&&null!==t.parentElement;)t=t.parentElement;if(t.classList.contains("action-item")){const e=this.focusedItem;this.setFocusedItem(t),e!==this.focusedItem&&this.updateFocus()}}})));let o={parent:this};this.mnemonics=new Map,this.scrollableElement=this._register(new hn.s$(n,{alwaysConsumeMouseWheel:!0,horizontal:2,vertical:3,verticalScrollbarSize:7,handleMouseWheel:!0,useShadows:!0}));const s=this.scrollableElement.getDomNode();s.style.position="",this._register((0,Q.nm)(n,Fs.t.Change,(e=>{Q.zB.stop(e,!0);const t=this.scrollableElement.getScrollPosition().scrollTop;this.scrollableElement.setScrollPosition({scrollTop:t-e.translationY})}))),this._register((0,Q.nm)(s,Q.tw.MOUSE_UP,(e=>{e.preventDefault()}))),n.style.maxHeight=`${Math.max(10,window.innerHeight-e.getBoundingClientRect().top-35)}px`,t=t.filter((e=>{var t;return!(null===(t=i.submenuIds)||void 0===t?void 0:t.has(e.id))||(console.warn(`æ‰¾åˆ° submenu cycle: ${e.id}`),!1)})),this.push(t,{icon:!0,label:!0,isMenu:!0}),e.appendChild(this.scrollableElement.getDomNode()),this.scrollableElement.scanDomNode(),this.viewItems.filter((e=>!(e instanceof er))).forEach(((e,t,i)=>{e.updatePositionInSet(t+1,i.length)}))}initializeStyleSheet(e){(0,Q.OO)(e)?(this.styleSheet=(0,Q.dS)(e),this.styleSheet.textContent=tr):(Qs.globalStyleSheet||(Qs.globalStyleSheet=(0,Q.dS)(),Qs.globalStyleSheet.textContent=tr),this.styleSheet=Qs.globalStyleSheet)}style(e){const t=this.getContainer(),i=e.foregroundColor?`${e.foregroundColor}`:"",n=e.backgroundColor?`${e.backgroundColor}`:"",o=e.borderColor?`1px solid ${e.borderColor}`:"",s=e.shadowColor?`0 2px 4px ${e.shadowColor}`:"";t.style.border=o,this.domNode.style.color=i,this.domNode.style.backgroundColor=n,t.style.boxShadow=s,this.viewItems&&this.viewItems.forEach((t=>{(t instanceof Xs||t instanceof er)&&t.style(e)}))}getContainer(){return this.scrollableElement.getDomNode()}get onScroll(){return this.scrollableElement.onScroll}focusItemByElement(e){const t=this.focusedItem;this.setFocusedItem(e),t!==this.focusedItem&&this.updateFocus()}setFocusedItem(e){for(let t=0;t<this.actionsList.children.length;t++){if(e===this.actionsList.children[t]){this.focusedItem=t;break}}}updateFocus(e){super.updateFocus(e,!0),void 0!==this.focusedItem&&this.scrollableElement.setScrollPosition({scrollTop:Math.round(this.menuElement.scrollTop)})}doGetActionViewItem(e,t,i){if(e instanceof un.Z0)return new er(t.context,e,{icon:!0});if(e instanceof un.wY){const n=new Js(e,e.actions,i,Object.assign(Object.assign({},t),{submenuIds:new Set([...t.submenuIds||[],e.id])}));if(t.enableMnemonics){const e=n.getMnemonic();if(e&&n.isEnabled()){let t=[];this.mnemonics.has(e)&&(t=this.mnemonics.get(e)),t.push(n),this.mnemonics.set(e,t)}}return n}{const i={enableMnemonics:t.enableMnemonics,useEventAsContext:t.useEventAsContext};if(t.getKeyBinding){const n=t.getKeyBinding(e);if(n){const e=n.getLabel();e&&(i.keybinding=e)}}const n=new Xs(t.context,e,i);if(t.enableMnemonics){const e=n.getMnemonic();if(e&&n.isEnabled()){let t=[];this.mnemonics.has(e)&&(t=this.mnemonics.get(e)),t.push(n),this.mnemonics.set(e,t)}}return n}}}class Xs extends Bs.Y{constructor(e,t,i={}){if(i.isMenu=!0,super(t,t,i),this.options=i,this.options.icon=void 0!==i.icon&&i.icon,this.options.label=void 0===i.label||i.label,this.cssClass="",this.options.label&&i.enableMnemonics){let e=this.getAction().label;if(e){let t=Ks.exec(e);t&&(this.mnemonic=(t[1]?t[1]:t[3]).toLocaleLowerCase())}}this.runOnceToEnableMouseUp=new Se.pY((()=>{this.element&&(this._register((0,Q.nm)(this.element,Q.tw.MOUSE_UP,(e=>{if(Q.zB.stop(e,!0),Rs.vU){if(new Ps.n(e).rightButton)return;this.onClick(e)}else setTimeout((()=>{this.onClick(e)}),0)}))),this._register((0,Q.nm)(this.element,Q.tw.CONTEXT_MENU,(e=>{Q.zB.stop(e,!0)}))))}),100),this._register(this.runOnceToEnableMouseUp)}render(e){super.render(e),this.element&&(this.container=e,this.item=(0,Q.R3)(this.element,(0,Q.$)("a.action-menu-item")),this._action.id===un.Z0.ID?this.item.setAttribute("role","presentation"):(this.item.setAttribute("role","menuitem"),this.mnemonic&&this.item.setAttribute("aria-keyshortcuts",`${this.mnemonic}`)),this.check=(0,Q.R3)(this.item,(0,Q.$)("span.menu-item-check"+Zs.cssSelector)),this.check.setAttribute("role","none"),this.label=(0,Q.R3)(this.item,(0,Q.$)("span.action-label")),this.options.label&&this.options.keybinding&&((0,Q.R3)(this.item,(0,Q.$)("span.keybinding")).textContent=this.options.keybinding),this.runOnceToEnableMouseUp.schedule(),this.updateClass(),this.updateLabel(),this.updateTooltip(),this.updateEnabled(),this.updateChecked())}blur(){super.blur(),this.applyStyle()}focus(){super.focus(),this.item&&this.item.focus(),this.applyStyle()}updatePositionInSet(e,t){this.item&&(this.item.setAttribute("aria-posinset",`${e}`),this.item.setAttribute("aria-setsize",`${t}`))}updateLabel(){if(this.label&&this.options.label){(0,Q.PO)(this.label);let e=(0,$s.x$)(this.getAction().label);if(e){const t=function(e){const t=Ks,i=t.exec(e);if(!i)return e;const n=!i[1];return e.replace(t,n?"$2$3":"").trim()}(e);this.options.enableMnemonics||(e=t),this.label.setAttribute("aria-label",t.replace(/&&/g,"&"));const i=Ks.exec(e);if(i){e=De.YU(e),qs.lastIndex=0;let t=qs.exec(e);for(;t&&t[1];)t=qs.exec(e);const n=e=>e.replace(/&amp;&amp;/g,"&amp;");t?this.label.append(De.j3(n(e.substr(0,t.index))," "),(0,Q.$)("u",{"aria-hidden":"true"},t[3]),De.oL(n(e.substr(t.index+t[0].length))," ")):this.label.innerText=n(e).trim(),this.item&&this.item.setAttribute("aria-keyshortcuts",(i[1]?i[1]:i[3]).toLocaleLowerCase())}else this.label.innerText=e.replace(/&&/g,"&").trim()}}}updateTooltip(){let e=null;this.getAction().tooltip?e=this.getAction().tooltip:!this.options.label&&this.getAction().label&&this.options.icon&&(e=this.getAction().label,this.options.keybinding&&(e=bi.N({key:"titleLabel",comment:["action title","action keybinding"]},"{0} ({1})",e,this.options.keybinding))),e&&this.item&&(this.item.title=e)}updateClass(){this.cssClass&&this.item&&this.item.classList.remove(...this.cssClass.split(" ")),this.options.icon&&this.label?(this.cssClass=this.getAction().class||"",this.label.classList.add("icon"),this.cssClass&&this.label.classList.add(...this.cssClass.split(" ")),this.updateEnabled()):this.label&&this.label.classList.remove("icon")}updateEnabled(){this.getAction().enabled?(this.element&&(this.element.classList.remove("disabled"),this.element.removeAttribute("aria-disabled")),this.item&&(this.item.classList.remove("disabled"),this.item.removeAttribute("aria-disabled"),this.item.tabIndex=0)):(this.element&&(this.element.classList.add("disabled"),this.element.setAttribute("aria-disabled","true")),this.item&&(this.item.classList.add("disabled"),this.item.setAttribute("aria-disabled","true")))}updateChecked(){if(!this.item)return;const e=this.getAction().checked;this.item.classList.toggle("checked",!!e),void 0!==e?(this.item.setAttribute("role","menuitemcheckbox"),this.item.setAttribute("aria-checked",e?"true":"false")):(this.item.setAttribute("role","menuitem"),this.item.setAttribute("aria-checked",""))}getMnemonic(){return this.mnemonic}applyStyle(){if(!this.menuStyle)return;const e=this.element&&this.element.classList.contains("focused"),t=e&&this.menuStyle.selectionForegroundColor?this.menuStyle.selectionForegroundColor:this.menuStyle.foregroundColor,i=e&&this.menuStyle.selectionBackgroundColor?this.menuStyle.selectionBackgroundColor:void 0,n=e&&this.menuStyle.selectionBorderColor?`thin solid ${this.menuStyle.selectionBorderColor}`:"";this.item&&(this.item.style.color=t?t.toString():"",this.item.style.backgroundColor=i?i.toString():""),this.check&&(this.check.style.color=t?t.toString():""),this.container&&(this.container.style.border=n)}style(e){this.menuStyle=e,this.applyStyle()}}class Js extends Xs{constructor(e,t,i,n){super(e,e,n),this.submenuActions=t,this.parentData=i,this.submenuOptions=n,this.mysubmenu=null,this.submenuDisposables=this._register(new ue.SL),this.mouseOver=!1,this.expandDirection=n&&void 0!==n.expandDirection?n.expandDirection:Ys.Right,this.showScheduler=new Se.pY((()=>{this.mouseOver&&(this.cleanupExistingSubmenu(!1),this.createSubmenu(!1))}),250),this.hideScheduler=new Se.pY((()=>{this.element&&!(0,Q.jg)((0,Q.vY)(),this.element)&&this.parentData.submenu===this.mysubmenu&&(this.parentData.parent.focus(!1),this.cleanupExistingSubmenu(!0))}),750)}render(e){super.render(e),this.element&&(this.item&&(this.item.classList.add("monaco-submenu-item"),this.item.tabIndex=0,this.item.setAttribute("aria-haspopup","true"),this.updateAriaExpanded("false"),this.submenuIndicator=(0,Q.R3)(this.item,(0,Q.$)("span.submenu-indicator"+Gs.cssSelector)),this.submenuIndicator.setAttribute("aria-hidden","true")),this._register((0,Q.nm)(this.element,Q.tw.KEY_UP,(e=>{let t=new ri.y(e);(t.equals(17)||t.equals(3))&&(Q.zB.stop(e,!0),this.createSubmenu(!0))}))),this._register((0,Q.nm)(this.element,Q.tw.KEY_DOWN,(e=>{let t=new ri.y(e);(0,Q.vY)()===this.item&&(t.equals(17)||t.equals(3))&&Q.zB.stop(e,!0)}))),this._register((0,Q.nm)(this.element,Q.tw.MOUSE_OVER,(e=>{this.mouseOver||(this.mouseOver=!0,this.showScheduler.schedule())}))),this._register((0,Q.nm)(this.element,Q.tw.MOUSE_LEAVE,(e=>{this.mouseOver=!1}))),this._register((0,Q.nm)(this.element,Q.tw.FOCUS_OUT,(e=>{this.element&&!(0,Q.jg)((0,Q.vY)(),this.element)&&this.hideScheduler.schedule()}))),this._register(this.parentData.parent.onScroll((()=>{this.parentData.parent.focus(!1),this.cleanupExistingSubmenu(!1)}))))}updateEnabled(){}onClick(e){Q.zB.stop(e,!0),this.cleanupExistingSubmenu(!1),this.createSubmenu(!0)}cleanupExistingSubmenu(e){if(this.parentData.submenu&&(e||this.parentData.submenu!==this.mysubmenu)){try{this.parentData.submenu.dispose()}catch(e){}this.parentData.submenu=void 0,this.updateAriaExpanded("false"),this.submenuContainer&&(this.submenuDisposables.clear(),this.submenuContainer=void 0)}}calculateSubmenuMenuLayout(e,t,i,n){const o={top:0,left:0};return o.left=zs(e.width,t.width,{position:n===Ys.Right?0:1,offset:i.left,size:i.width}),o.left>=i.left&&o.left<i.left+i.width&&(i.left+10+t.width<=e.width&&(o.left=i.left+10),i.top+=10,i.height=0),o.top=zs(e.height,t.height,{position:0,offset:i.top,size:0}),o.top+t.height===i.top&&o.top+i.height+t.height<=e.height&&(o.top+=i.height),o}createSubmenu(e=!0){if(this.element)if(this.parentData.submenu)this.parentData.submenu.focus(!1);else{this.updateAriaExpanded("true"),this.submenuContainer=(0,Q.R3)(this.element,(0,Q.$)("div.monaco-submenu")),this.submenuContainer.classList.add("menubar-menu-items-holder","context-view");const t=getComputedStyle(this.parentData.parent.domNode),i=parseFloat(t.paddingTop||"0")||0;this.submenuContainer.style.zIndex="1",this.submenuContainer.style.position="fixed",this.submenuContainer.style.top="0",this.submenuContainer.style.left="0",this.parentData.submenu=new Qs(this.submenuContainer,this.submenuActions.length?this.submenuActions:[new un.eZ],this.submenuOptions),this.menuStyle&&this.parentData.submenu.style(this.menuStyle);const n=this.element.getBoundingClientRect(),o={top:n.top-i,left:n.left,height:n.height+2*i,width:n.width},s=this.submenuContainer.getBoundingClientRect(),{top:r,left:a}=this.calculateSubmenuMenuLayout(new Q.Ro(window.innerWidth,window.innerHeight),Q.Ro.lift(s),o,this.expandDirection);this.submenuContainer.style.left=a-s.left+"px",this.submenuContainer.style.top=r-s.top+"px",this.submenuDisposables.add((0,Q.nm)(this.submenuContainer,Q.tw.KEY_UP,(e=>{new ri.y(e).equals(15)&&(Q.zB.stop(e,!0),this.parentData.parent.focus(),this.cleanupExistingSubmenu(!0))}))),this.submenuDisposables.add((0,Q.nm)(this.submenuContainer,Q.tw.KEY_DOWN,(e=>{new ri.y(e).equals(15)&&Q.zB.stop(e,!0)}))),this.submenuDisposables.add(this.parentData.submenu.onDidCancel((()=>{this.parentData.parent.focus(),this.cleanupExistingSubmenu(!0)}))),this.parentData.submenu.focus(e),this.mysubmenu=this.parentData.submenu}}updateAriaExpanded(e){var t;this.item&&(null===(t=this.item)||void 0===t||t.setAttribute("aria-expanded",e))}applyStyle(){if(super.applyStyle(),!this.menuStyle)return;const e=this.element&&this.element.classList.contains("focused")&&this.menuStyle.selectionForegroundColor?this.menuStyle.selectionForegroundColor:this.menuStyle.foregroundColor;this.submenuIndicator&&(this.submenuIndicator.style.color=e?`${e}`:""),this.parentData.submenu&&this.parentData.submenu.style(this.menuStyle)}dispose(){super.dispose(),this.hideScheduler.dispose(),this.mysubmenu&&(this.mysubmenu.dispose(),this.mysubmenu=null),this.submenuContainer&&(this.submenuContainer=void 0)}}class er extends Bs.g{style(e){this.label&&(this.label.style.borderBottomColor=e.separatorColor?`${e.separatorColor}`:"")}}let tr=`\n.monaco-menu {\n\tfont-size: 13px;\n\n}\n\n${(0,Vs.a)(Zs)}\n${(0,Vs.a)(Gs)}\n\n.monaco-menu .monaco-action-bar {\n\ttext-align: right;\n\toverflow: hidden;\n\twhite-space: nowrap;\n}\n\n.monaco-menu .monaco-action-bar .actions-container {\n\tdisplay: flex;\n\tmargin: 0 auto;\n\tpadding: 0;\n\twidth: 100%;\n\tjustify-content: flex-end;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar.reverse .actions-container {\n\tflex-direction: row-reverse;\n}\n\n.monaco-menu .monaco-action-bar .action-item {\n\tcursor: pointer;\n\tdisplay: inline-block;\n\ttransition: transform 50ms ease;\n\tposition: relative;  /* DO NOT REMOVE - this is the key to preventing the ghosting icon bug in Chrome 42 */\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled {\n\tcursor: default;\n}\n\n.monaco-menu .monaco-action-bar.animated .action-item.active {\n\ttransform: scale(1.272019649, 1.272019649); /* 1.272019649 = âˆšÏ† */\n}\n\n.monaco-menu .monaco-action-bar .action-item .icon,\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar .action-label {\n\tfont-size: 11px;\n\tmargin-right: 4px;\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label,\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label:hover {\n\topacity: 0.4;\n}\n\n/* Vertical actions */\n\n.monaco-menu .monaco-action-bar.vertical {\n\ttext-align: left;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tdisplay: block;\n\tborder-bottom: 1px solid #bbb;\n\tpadding-top: 1px;\n\tmargin-left: .8em;\n\tmargin-right: .8em;\n}\n\n.monaco-menu .secondary-actions .monaco-action-bar .action-label {\n\tmargin-left: 6px;\n}\n\n/* Action Items */\n.monaco-menu .monaco-action-bar .action-item.select-container {\n\toverflow: hidden; /* somehow the dropdown overflows its container, we prevent it here to not push */\n\tflex: 1;\n\tmax-width: 170px;\n\tmin-width: 60px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-right: 10px;\n}\n\n.monaco-menu .monaco-action-bar.vertical {\n\tmargin-left: 0;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tpadding: 0;\n\ttransform: none;\n\tdisplay: flex;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.active {\n\ttransform: none;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\tflex: 1 1 auto;\n\tdisplay: flex;\n\theight: 2em;\n\talign-items: center;\n\tposition: relative;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label {\n\tflex: 1 1 auto;\n\ttext-decoration: none;\n\tpadding: 0 1em;\n\tbackground: none;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .keybinding,\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tdisplay: inline-block;\n\tflex: 2 1 auto;\n\tpadding: 0 1em;\n\ttext-align: right;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon {\n\tfont-size: 16px !important;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon::before {\n\tmargin-left: auto;\n\tmargin-right: -20px;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .keybinding,\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .submenu-indicator {\n\topacity: 0.4;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator) {\n\tdisplay: inline-block;\n\tbox-sizing: border-box;\n\tmargin: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tposition: static;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item .monaco-submenu {\n\tposition: absolute;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tpadding: 0.5em 0 0 0;\n\tmargin-bottom: 0.5em;\n\twidth: 100%;\n\theight: 0px !important;\n\tmargin-left: .8em !important;\n\tmargin-right: .8em !important;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator.text {\n\tpadding: 0.7em 1em 0.1em 1em;\n\tfont-weight: bold;\n\topacity: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:hover {\n\tcolor: inherit;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tposition: absolute;\n\tvisibility: hidden;\n\twidth: 1em;\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item.checked .menu-item-check {\n\tvisibility: visible;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n/* Context Menu */\n\n.context-view.monaco-menu-container {\n\toutline: 0;\n\tborder: none;\n\tanimation: fadeIn 0.083s linear;\n\t-webkit-app-region: no-drag;\n}\n\n.context-view.monaco-menu-container :focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical:focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical :focus {\n\toutline: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tborder: thin solid transparent; /* prevents jumping behaviour on hover or focus */\n}\n\n\n/* High Contrast Theming */\n:host-context(.hc-black) .context-view.monaco-menu-container {\n\tbox-shadow: none;\n}\n\n:host-context(.hc-black) .monaco-menu .monaco-action-bar.vertical .action-item.focused {\n\tbackground: none;\n}\n\n/* Vertical Action Bar Styles */\n\n.monaco-menu .monaco-action-bar.vertical {\n\tpadding: .5em 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\theight: 1.8em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator),\n.monaco-menu .monaco-action-bar.vertical .keybinding {\n\tfont-size: inherit;\n\tpadding: 0 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tfont-size: inherit;\n\twidth: 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tfont-size: inherit;\n\tpadding: 0.2em 0 0 0;\n\tmargin-bottom: 0.2em;\n}\n\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tfont-size: 60%;\n\tpadding: 0 1.8em;\n}\n\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n\tmask-size: 10px 10px;\n\t-webkit-mask-size: 10px 10px;\n}\n\n.monaco-menu .action-item {\n\tcursor: default;\n}\n\n/* Arrows */\n.monaco-scrollable-element > .scrollbar > .scra {\n\tcursor: pointer;\n\tfont-size: 11px !important;\n}\n\n.monaco-scrollable-element > .visible {\n\topacity: 1;\n\n\t/* Background rule added for IE9 - to allow clicks on dom node */\n\tbackground:rgba(0,0,0,0);\n\n\ttransition: opacity 100ms linear;\n}\n.monaco-scrollable-element > .invisible {\n\topacity: 0;\n\tpointer-events: none;\n}\n.monaco-scrollable-element > .invisible.fade {\n\ttransition: opacity 800ms linear;\n}\n\n/* Scrollable Content Inset Shadow */\n.monaco-scrollable-element > .shadow {\n\tposition: absolute;\n\tdisplay: none;\n}\n.monaco-scrollable-element > .shadow.top {\n\tdisplay: block;\n\ttop: 0;\n\tleft: 3px;\n\theight: 3px;\n\twidth: 100%;\n\tbox-shadow: #DDD 0 6px 6px -6px inset;\n}\n.monaco-scrollable-element > .shadow.left {\n\tdisplay: block;\n\ttop: 3px;\n\tleft: 0;\n\theight: 100%;\n\twidth: 3px;\n\tbox-shadow: #DDD 6px 0 6px -6px inset;\n}\n.monaco-scrollable-element > .shadow.top-left-corner {\n\tdisplay: block;\n\ttop: 0;\n\tleft: 0;\n\theight: 3px;\n\twidth: 3px;\n}\n.monaco-scrollable-element > .shadow.top.left {\n\tbox-shadow: #DDD 6px 6px 6px -6px inset;\n}\n\n/* ---------- Default Style ---------- */\n\n:host-context(.vs) .monaco-scrollable-element > .scrollbar > .slider {\n\tbackground: rgba(100, 100, 100, .4);\n}\n:host-context(.vs-dark) .monaco-scrollable-element > .scrollbar > .slider {\n\tbackground: rgba(121, 121, 121, .4);\n}\n:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider {\n\tbackground: rgba(111, 195, 223, .6);\n}\n\n.monaco-scrollable-element > .scrollbar > .slider:hover {\n\tbackground: rgba(100, 100, 100, .7);\n}\n:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider:hover {\n\tbackground: rgba(111, 195, 223, .8);\n}\n\n.monaco-scrollable-element > .scrollbar > .slider.active {\n\tbackground: rgba(0, 0, 0, .6);\n}\n:host-context(.vs-dark) .monaco-scrollable-element > .scrollbar > .slider.active {\n\tbackground: rgba(191, 191, 191, .4);\n}\n:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider.active {\n\tbackground: rgba(111, 195, 223, 1);\n}\n\n:host-context(.vs-dark) .monaco-scrollable-element .shadow.top {\n\tbox-shadow: none;\n}\n\n:host-context(.vs-dark) .monaco-scrollable-element .shadow.left {\n\tbox-shadow: #000 6px 0 6px -6px inset;\n}\n\n:host-context(.vs-dark) .monaco-scrollable-element .shadow.top.left {\n\tbox-shadow: #000 6px 6px 6px -6px inset;\n}\n\n:host-context(.hc-black) .monaco-scrollable-element .shadow.top {\n\tbox-shadow: none;\n}\n\n:host-context(.hc-black) .monaco-scrollable-element .shadow.left {\n\tbox-shadow: none;\n}\n\n:host-context(.hc-black) .monaco-scrollable-element .shadow.top.left {\n\tbox-shadow: none;\n}\n`;i(67942);var ir=i(88810);class nr{constructor(e,t,i,n,o){this.contextViewService=e,this.telemetryService=t,this.notificationService=i,this.keybindingService=n,this.themeService=o,this.focusToReturn=null,this.block=null,this.options={blockMouse:!0}}configure(e){this.options=e}showContextMenu(e){const t=e.getActions();if(!t.length)return;let i;this.focusToReturn=document.activeElement;let n=(0,Q.Re)(e.domForShadowRoot)?e.domForShadowRoot:void 0;this.contextViewService.showContextView({getAnchor:()=>e.getAnchor(),canRelayout:!1,anchorAlignment:e.anchorAlignment,anchorAxisAlignment:e.anchorAxisAlignment,render:n=>{let o=e.getMenuClassName?e.getMenuClassName():"";o&&(n.className+=" "+o),this.options.blockMouse&&(this.block=n.appendChild((0,Q.$)(".context-view-block")),this.block.style.position="fixed",this.block.style.cursor="initial",this.block.style.left="0",this.block.style.top="0",this.block.style.width="100%",this.block.style.height="100%",this.block.style.zIndex="-1",(0,Q.nm)(this.block,Q.tw.MOUSE_DOWN,(e=>e.stopPropagation())));const s=new ue.SL,r=e.actionRunner||new un.Wi;return r.onBeforeRun(this.onActionRun,this,s),r.onDidRun(this.onDidActionRun,this,s),i=new Qs(n,t,{actionViewItemProvider:e.getActionViewItem,context:e.getActionsContext?e.getActionsContext():null,actionRunner:r,getKeyBinding:e.getKeyBinding?e.getKeyBinding:e=>this.keybindingService.lookupKeybinding(e.id)}),s.add((0,ir.tj)(i,this.themeService)),i.onDidCancel((()=>this.contextViewService.hideContextView(!0)),null,s),i.onDidBlur((()=>this.contextViewService.hideContextView(!0)),null,s),s.add((0,Q.nm)(window,Q.tw.BLUR,(()=>this.contextViewService.hideContextView(!0)))),s.add((0,Q.nm)(window,Q.tw.MOUSE_DOWN,(e=>{if(e.defaultPrevented)return;let t=new Ps.n(e),i=t.target;if(!t.rightButton){for(;i;){if(i===n)return;i=i.parentElement}this.contextViewService.hideContextView(!0)}}))),(0,ue.F8)(s,i)},focus:()=>{i&&i.focus(!!e.autoSelectFirstItem)},onHide:t=>{e.onHide&&e.onHide(!!t),this.block&&(this.block.remove(),this.block=null),this.focusToReturn&&this.focusToReturn.focus()}},n,!!n)}onActionRun(e){this.telemetryService.publicLog2("workbenchActionExecuted",{id:e.action.id,from:"contextMenu"}),this.contextViewService.hideContextView(!1),this.focusToReturn&&this.focusToReturn.focus()}onDidActionRun(e){e.error&&!(0,ke.VV)(e.error)&&this.notificationService.error(e.error)}}var or=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},sr=function(e,t){return function(i,n){t(i,n,e)}};let rr=class extends ue.JT{constructor(e,t,i,n,o){super(),this.contextMenuHandler=new nr(i,e,t,n,o)}configure(e){this.contextMenuHandler.configure(e)}showContextMenu(e){this.contextMenuHandler.showContextMenu(e),Q._q.getInstance().resetKeyStatus()}};rr=or([sr(0,Os.b),sr(1,Ai.lT),sr(2,Fn.u),sr(3,vo.d),sr(4,mn.XE)],rr);const ar=(0,Pn.yh)("layoutService");var lr=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},cr=function(e,t){return function(i,n){t(i,n,e)}};let dr=class extends ue.JT{constructor(e){super(),this.layoutService=e,this.currentViewDisposable=ue.JT.None,this.container=e.container,this.contextView=this._register(new js(this.container,1)),this.layout(),this._register(e.onDidLayout((()=>this.layout())))}setContainer(e,t){this.contextView.setContainer(e,t||1)}showContextView(e,t,i){t?t!==this.container&&(this.container=t,this.setContainer(t,i?3:2)):this.container!==this.layoutService.container&&(this.container=this.layoutService.container,this.setContainer(this.container,1)),this.contextView.show(e);const n=(0,ue.OF)((()=>{this.currentViewDisposable===n&&this.hideContextView()}));return this.currentViewDisposable=n,n}getContextViewElement(){return this.contextView.getViewElement()}layout(){this.contextView.layout()}hideContextView(e){this.contextView.hide(e)}};dr=lr([cr(0,ar)],dr);var hr=i(28820),ur=i(97108);class gr{constructor(e){this.incoming=new Map,this.outgoing=new Map,this.data=e}}class pr{constructor(e){this._hashFn=e,this._nodes=new Map}roots(){const e=[];for(let t of this._nodes.values())0===t.outgoing.size&&e.push(t);return e}insertEdge(e,t){const i=this.lookupOrInsertNode(e),n=this.lookupOrInsertNode(t);i.outgoing.set(this._hashFn(t),n),n.incoming.set(this._hashFn(e),i)}removeNode(e){const t=this._hashFn(e);this._nodes.delete(t);for(let e of this._nodes.values())e.outgoing.delete(t),e.incoming.delete(t)}lookupOrInsertNode(e){const t=this._hashFn(e);let i=this._nodes.get(t);return i||(i=new gr(e),this._nodes.set(t,i)),i}isEmpty(){return 0===this._nodes.size}toString(){let e=[];for(let[t,i]of this._nodes)e.push(`${t}, (incoming)[${[...i.incoming.keys()].join(", ")}], (outgoing)[${[...i.outgoing.keys()].join(",")}]`);return e.join("\n")}findCycleSlow(){for(let[e,t]of this._nodes){const i=new Set([e]),n=this._findCycle(t,i);if(n)return n}}_findCycle(e,t){for(let[i,n]of e.outgoing){if(t.has(i))return[...t,i].join(" -> ");t.add(i);const e=this._findCycle(n,t);if(e)return e;t.delete(i)}}}class fr extends Error{constructor(e){var t;super("cyclic dependency between services"),this.message=null!==(t=e.findCycleSlow())&&void 0!==t?t:`UNABLE to detect cycle, dumping graph: \n${e.toString()}`}}class mr{constructor(e=new Rn.y,t=!1,i){this._activeInstantiations=new Set,this._services=e,this._strict=t,this._parent=i,this._services.set(Pn.TG,this)}createChild(e){return new mr(e,this._strict,this)}invokeFunction(e,...t){let i=vr.traceInvocation(e),n=!1;try{return e({get:(e,t)=>{if(n)throw(0,ke.L6)("service accessor is only valid during the invocation of its target method");const o=this._getOrCreateServiceInstance(e,i);if(!o&&t!==Pn.jt)throw new Error(`[invokeFunction] unknown service '${e}'`);return o}},...t)}finally{n=!0,i.stop()}}createInstance(e,...t){let i,n;return e instanceof ur.M?(i=vr.traceCreation(e.ctor),n=this._createInstance(e.ctor,e.staticArguments.concat(t),i)):(i=vr.traceCreation(e),n=this._createInstance(e,t,i)),i.stop(),n}_createInstance(e,t=[],i){let n=Pn.I8.getServiceDependencies(e).sort(((e,t)=>e.index-t.index)),o=[];for(const t of n){let n=this._getOrCreateServiceInstance(t.id,i);if(!n&&this._strict&&!t.optional)throw new Error(`[createInstance] ${e.name} depends on UNKNOWN service ${t.id}.`);o.push(n)}let s=n.length>0?n[0].index:t.length;if(t.length!==s){console.warn(`[createInstance] First service dependency of ${e.name} at position ${s+1} conflicts with ${t.length} static arguments`);let i=s-t.length;t=i>0?t.concat(new Array(i)):t.slice(0,s)}return new e(...[...t,...o])}_setServiceInstance(e,t){if(this._services.get(e)instanceof ur.M)this._services.set(e,t);else{if(!this._parent)throw new Error("illegalState - setting UNKNOWN service instance");this._parent._setServiceInstance(e,t)}}_getServiceInstanceOrDescriptor(e){let t=this._services.get(e);return!t&&this._parent?this._parent._getServiceInstanceOrDescriptor(e):t}_getOrCreateServiceInstance(e,t){let i=this._getServiceInstanceOrDescriptor(e);return i instanceof ur.M?this._safeCreateAndCacheServiceInstance(e,i,t.branch(e,!0)):(t.branch(e,!1),i)}_safeCreateAndCacheServiceInstance(e,t,i){if(this._activeInstantiations.has(e))throw new Error(`illegal state - RECURSIVELY instantiating service '${e}'`);this._activeInstantiations.add(e);try{return this._createAndCacheServiceInstance(e,t,i)}finally{this._activeInstantiations.delete(e)}}_createAndCacheServiceInstance(e,t,i){const n=new pr((e=>e.id.toString()));let o=0;const s=[{id:e,desc:t,_trace:i}];for(;s.length;){const t=s.pop();if(n.lookupOrInsertNode(t),o++>1e3)throw new fr(n);for(let i of Pn.I8.getServiceDependencies(t.desc.ctor)){let o=this._getServiceInstanceOrDescriptor(i.id);if(o||i.optional||console.warn(`[createInstance] ${e} depends on ${i.id} which is NOT registered.`),o instanceof ur.M){const e={id:i.id,desc:o,_trace:t._trace.branch(i.id,!0)};n.insertEdge(t,e),s.push(e)}}}for(;;){const e=n.roots();if(0===e.length){if(!n.isEmpty())throw new fr(n);break}for(const{data:t}of e){if(this._getServiceInstanceOrDescriptor(t.id)instanceof ur.M){const e=this._createServiceInstanceWithOwner(t.id,t.desc.ctor,t.desc.staticArguments,t.desc.supportsDelayedInstantiation,t._trace);this._setServiceInstance(t.id,e)}n.removeNode(t)}}return this._getServiceInstanceOrDescriptor(e)}_createServiceInstanceWithOwner(e,t,i=[],n,o){if(this._services.get(e)instanceof ur.M)return this._createServiceInstance(t,i,n,o);if(this._parent)return this._parent._createServiceInstanceWithOwner(e,t,i,n,o);throw new Error(`illegalState - creating UNKNOWN service instance ${t.name}`)}_createServiceInstance(e,t=[],i,n){if(i){const i=new Se.Ue((()=>this._createInstance(e,t,n)));return new Proxy(Object.create(null),{get(e,t){if(t in e)return e[t];let n=i.value,o=n[t];return"function"!=typeof o||(o=o.bind(n),e[t]=o),o},set:(e,t,n)=>(i.value[t]=n,!0)})}return this._createInstance(e,t,n)}}class vr{constructor(e,t){this.type=e,this.name=t,this._start=Date.now(),this._dep=[]}static traceInvocation(e){return vr._None}static traceCreation(e){return vr._None}branch(e,t){let i=new vr(2,e.toString());return this._dep.push([e,t,i]),i}stop(){let e=Date.now()-this._start;vr._totals+=e;let t=!1;let i=[`${0===this.type?"CREATE":"CALL"} ${this.name}`,`${function e(i,n){let o=[],s=new Array(i+1).join("\t");for(const[r,a,l]of n._dep)if(a&&l){t=!0,o.push(`${s}CREATES -> ${r}`);let n=e(i+1,l);n&&o.push(n)}else o.push(`${s}uses -> ${r}`);return o.join("\n")}(1,this)}`,`DONE, took ${e.toFixed(2)}ms (grand total ${vr._totals.toFixed(2)}ms)`];(e>2||t)&&console.log(i.join("\n"))}}vr._None=new class extends vr{constructor(){super(-1,null)}stop(){}branch(){return this}},vr._totals=0;var _r=i(44349),br=i(20343),wr=i(98674);class yr{constructor(){this._byResource=new J.Y9,this._byOwner=new Map}set(e,t,i){let n=this._byResource.get(e);n||(n=new Map,this._byResource.set(e,n)),n.set(t,i);let o=this._byOwner.get(t);o||(o=new J.Y9,this._byOwner.set(t,o)),o.set(e,i)}get(e,t){let i=this._byResource.get(e);return null==i?void 0:i.get(t)}delete(e,t){let i=!1,n=!1,o=this._byResource.get(e);o&&(i=o.delete(t));let s=this._byOwner.get(t);if(s&&(n=s.delete(e)),i!==n)throw new Error("illegal state");return i&&n}values(e){var t,i,n,o;return"string"==typeof e?null!==(i=null===(t=this._byOwner.get(e))||void 0===t?void 0:t.values())&&void 0!==i?i:bs.$.empty():z.o.isUri(e)?null!==(o=null===(n=this._byResource.get(e))||void 0===n?void 0:n.values())&&void 0!==o?o:bs.$.empty():bs.$.map(bs.$.concat(...this._byOwner.values()),(e=>e[1]))}}class Cr{constructor(e){this.errors=0,this.infos=0,this.warnings=0,this.unknowns=0,this._data=new J.Y9,this._service=e,this._subscription=e.onMarkerChanged(this._update,this)}dispose(){this._subscription.dispose()}_update(e){for(const t of e){const e=this._data.get(t);e&&this._substract(e);const i=this._resourceStats(t);this._add(i),this._data.set(t,i)}}_resourceStats(e){const t={errors:0,warnings:0,infos:0,unknowns:0};if(e.scheme===te.lg.inMemory||e.scheme===te.lg.walkThrough||e.scheme===te.lg.walkThroughSnippet)return t;for(const{severity:i}of this._service.read({resource:e}))i===wr.ZL.Error?t.errors+=1:i===wr.ZL.Warning?t.warnings+=1:i===wr.ZL.Info?t.infos+=1:t.unknowns+=1;return t}_substract(e){this.errors-=e.errors,this.warnings-=e.warnings,this.infos-=e.infos,this.unknowns-=e.unknowns}_add(e){this.errors+=e.errors,this.warnings+=e.warnings,this.infos+=e.infos,this.unknowns+=e.unknowns}}class xr{constructor(){this._onMarkerChanged=new W.D0({delay:0,merge:xr._merge}),this.onMarkerChanged=this._onMarkerChanged.event,this._data=new yr,this._stats=new Cr(this)}dispose(){this._stats.dispose(),this._onMarkerChanged.dispose()}remove(e,t){for(const i of t||[])this.changeOne(e,i,[])}changeOne(e,t,i){if((0,bt.XY)(i)){this._data.delete(t,e)&&this._onMarkerChanged.fire([t])}else{const n=[];for(const o of i){const i=xr._toMarker(e,t,o);i&&n.push(i)}this._data.set(t,e,n),this._onMarkerChanged.fire([t])}}static _toMarker(e,t,i){let{code:n,severity:o,message:s,source:r,startLineNumber:a,startColumn:l,endLineNumber:c,endColumn:d,relatedInformation:h,tags:u}=i;if(s)return a=a>0?a:1,l=l>0?l:1,c=c>=a?c:a,d=d>0?d:l,{resource:t,owner:e,code:n,severity:o,message:s,source:r,startLineNumber:a,startColumn:l,endLineNumber:c,endColumn:d,relatedInformation:h,tags:u}}read(e=Object.create(null)){let{owner:t,resource:i,severities:n,take:o}=e;if((!o||o<0)&&(o=-1),t&&i){const e=this._data.get(i,t);if(e){const t=[];for(const i of e)if(xr._accept(i,n)){const e=t.push(i);if(o>0&&e===o)break}return t}return[]}if(t||i){const e=this._data.values(null!=i?i:t),s=[];for(const t of e)for(const e of t)if(xr._accept(e,n)){const t=s.push(e);if(o>0&&t===o)return s}return s}{const e=[];for(let t of this._data.values())for(let i of t)if(xr._accept(i,n)){const t=e.push(i);if(o>0&&t===o)return e}return e}}static _accept(e,t){return void 0===t||(t&e.severity)===e.severity}static _merge(e){const t=new J.Y9;for(let i of e)for(let e of i)t.set(e,!0);return Array.from(t.keys())}}var Sr=i(26904),kr=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Lr=function(e,t){return function(i,n){t(i,n,e)}};let Nr=class{constructor(e){this._commandService=e}createMenu(e,t,i){return new Dr(e,Object.assign({emitEventsForSubmenuChanges:!1,eventDebounceDelay:50},i),this._commandService,t,this)}};Nr=kr([Lr(0,ne.H)],Nr);let Dr=class e{constructor(e,t,i,n,o){this._id=e,this._options=t,this._commandService=i,this._contextKeyService=n,this._menuService=o,this._disposables=new ue.SL,this._menuGroups=[],this._contextKeys=new Set,this._build();const s=new Se.pY((()=>{this._build(),this._onDidChange.fire(this)}),t.eventDebounceDelay);this._disposables.add(s),this._disposables.add(mo.BH.onDidChangeMenu((t=>{t.has(e)&&s.schedule()})));const r=this._disposables.add(new ue.SL);this._onDidChange=new W.Q5({onFirstListenerAdd:()=>{const e=new Se.pY((()=>this._onDidChange.fire(this)),t.eventDebounceDelay);r.add(e),r.add(n.onDidChangeContext((t=>{t.affectsSome(this._contextKeys)&&e.schedule()})))},onLastListenerRemove:r.clear.bind(r)}),this.onDidChange=this._onDidChange.event}dispose(){this._disposables.dispose(),this._onDidChange.dispose()}_build(){this._menuGroups.length=0,this._contextKeys.clear();const t=mo.BH.getMenuItems(this._id);let i;t.sort(e._compareMenuItems);for(const e of t){const t=e.group||"";i&&i[0]===t||(i=[t,[]],this._menuGroups.push(i)),i[1].push(e),this._collectContextKeys(e)}}_collectContextKeys(t){if(e._fillInKbExprKeys(t.when,this._contextKeys),(0,mo.vr)(t)){if(t.command.precondition&&e._fillInKbExprKeys(t.command.precondition,this._contextKeys),t.command.toggled){const i=t.command.toggled.condition||t.command.toggled;e._fillInKbExprKeys(i,this._contextKeys)}}else this._options.emitEventsForSubmenuChanges&&mo.BH.getMenuItems(t.submenu).forEach(this._collectContextKeys,this)}getActions(e){const t=[];for(let i of this._menuGroups){const[n,o]=i,s=[];for(const t of o)if(this._contextKeyService.contextMatchesRules(t.when)){const i=(0,mo.vr)(t)?new mo.U8(t.command,t.alt,e,this._contextKeyService,this._commandService):new mo.NZ(t,this._menuService,this._contextKeyService,e);s.push(i)}s.length>0&&t.push([n,s])}return t}static _fillInKbExprKeys(e,t){if(e)for(let i of e.keys())t.add(i)}static _compareMenuItems(t,i){let n=t.group,o=i.group;if(n!==o){if(!n)return 1;if(!o)return-1;if("navigation"===n)return-1;if("navigation"===o)return 1;let e=n.localeCompare(o);if(0!==e)return e}let s=t.order||0,r=i.order||0;return s<r?-1:s>r?1:e._compareTitles((0,mo.vr)(t)?t.command.title:t.title,(0,mo.vr)(i)?i.command.title:i.title)}static _compareTitles(e,t){const i="string"==typeof e?e:e.original,n="string"==typeof t?t:t.original;return i.localeCompare(n)}};Dr=kr([Lr(2,ne.H),Lr(3,xi.i6),Lr(4,mo.co)],Dr);var Ir=i(26479),Er=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Tr=function(e,t){return function(i,n){t(i,n,e)}};class Mr extends ue.JT{constructor(e){super(),this.model=e,this._markersData=new Map,this._register((0,ue.OF)((()=>{this.model.deltaDecorations([...this._markersData.keys()],[]),this._markersData.clear()})))}update(e,t){const i=[...this._markersData.keys()];this._markersData.clear();const n=this.model.deltaDecorations(i,t);for(let t=0;t<n.length;t++)this._markersData.set(n[t],e[t]);return 0!==i.length||0!==n.length}getMarker(e){return this._markersData.get(e.id)}}let Ar=class extends ue.JT{constructor(e,t){super(),this._markerService=t,this._onDidChangeMarker=this._register(new W.Q5),this._markerDecorations=new J.Y9,e.getModels().forEach((e=>this._onModelAdded(e))),this._register(e.onModelAdded(this._onModelAdded,this)),this._register(e.onModelRemoved(this._onModelRemoved,this)),this._register(this._markerService.onMarkerChanged(this._handleMarkerChange,this))}dispose(){super.dispose(),this._markerDecorations.forEach((e=>e.dispose())),this._markerDecorations.clear()}getMarker(e,t){const i=this._markerDecorations.get(e);return i&&i.getMarker(t)||null}_handleMarkerChange(e){e.forEach((e=>{const t=this._markerDecorations.get(e);t&&this._updateDecorations(t)}))}_onModelAdded(e){const t=new Mr(e);this._markerDecorations.set(e.uri,t),this._updateDecorations(t)}_onModelRemoved(e){const t=this._markerDecorations.get(e.uri);t&&(t.dispose(),this._markerDecorations.delete(e.uri)),e.uri.scheme!==te.lg.inMemory&&e.uri.scheme!==te.lg.internal&&e.uri.scheme!==te.lg.vscode||this._markerService&&this._markerService.read({resource:e.uri}).map((e=>e.owner)).forEach((t=>this._markerService.remove(t,[e.uri])))}_updateDecorations(e){const t=this._markerService.read({resource:e.model.uri,take:500});let i=t.map((t=>({range:this._createDecorationRange(e.model,t),options:this._createDecorationOption(t)})));e.update(t,i)&&this._onDidChangeMarker.fire(e.model)}_createDecorationRange(e,t){let i=U.e.lift(t);return t.severity!==wr.ZL.Hint||this._hasMarkerTag(t,1)||this._hasMarkerTag(t,2)||(i=i.setEndPosition(i.startLineNumber,i.startColumn+2)),e.validateRange(i)}_createDecorationOption(e){let t,i,n,o,s;switch(e.severity){case wr.ZL.Hint:t=this._hasMarkerTag(e,2)?void 0:this._hasMarkerTag(e,1)?"squiggly-unnecessary":"squiggly-hint",n=0;break;case wr.ZL.Warning:t="squiggly-warning",i=(0,mn.EN)(pn.Re),n=20,s={color:(0,mn.EN)(fn.Iv),position:_e.F5.Inline};break;case wr.ZL.Info:t="squiggly-info",i=(0,mn.EN)(pn.eS),n=10;break;case wr.ZL.Error:default:t="squiggly-error",i=(0,mn.EN)(pn.lK),n=30,s={color:(0,mn.EN)(fn.Gj),position:_e.F5.Inline}}return e.tags&&(-1!==e.tags.indexOf(1)&&(o="squiggly-inline-unnecessary"),-1!==e.tags.indexOf(2)&&(o="squiggly-inline-deprecated")),{description:"marker-decoration",stickiness:1,className:t,showIfCollapsed:!0,overviewRuler:{color:i,position:_e.sh.Right},minimap:s,zIndex:n,inlineClassName:o}}_hasMarkerTag(e,t){return!!e.tags&&e.tags.indexOf(t)>=0}};Ar=Er([Tr(0,vt.q),Tr(1,wr.lT)],Ar);var Or=i(65026),Pr=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Rr=function(e,t){return function(i,n){t(i,n,e)}};let Fr=class extends ue.JT{constructor(e,t){super(),this._contextKeyService=e,this._configurationService=t,this._accessibilitySupport=0,this._onDidChangeScreenReaderOptimized=new W.Q5,this._accessibilityModeEnabledContext=_o.U.bindTo(this._contextKeyService);const i=()=>this._accessibilityModeEnabledContext.set(this.isScreenReaderOptimized());this._register(this._configurationService.onDidChangeConfiguration((e=>{e.affectsConfiguration("editor.accessibilitySupport")&&(i(),this._onDidChangeScreenReaderOptimized.fire())}))),i(),this.onDidChangeScreenReaderOptimized((()=>i()))}get onDidChangeScreenReaderOptimized(){return this._onDidChangeScreenReaderOptimized.event}isScreenReaderOptimized(){const e=this._configurationService.getValue("editor.accessibilitySupport");return"on"===e||"auto"===e&&2===this._accessibilitySupport}getAccessibilitySupport(){return this._accessibilitySupport}};Fr=Pr([Rr(0,xi.i6),Rr(1,gi.Ui)],Fr);var Br=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class Vr{constructor(){this.mapTextToType=new Map,this.findText=""}writeText(e,t){return Br(this,void 0,void 0,(function*(){if(t)return void this.mapTextToType.set(t,e);try{return yield navigator.clipboard.writeText(e)}catch(e){console.error(e)}const i=document.activeElement,n=document.body.appendChild((0,Q.$)("textarea",{"aria-hidden":!0}));n.style.height="1px",n.style.width="1px",n.style.position="absolute",n.value=e,n.focus(),n.select(),document.execCommand("copy"),i instanceof HTMLElement&&i.focus(),document.body.removeChild(n)}))}readText(e){return Br(this,void 0,void 0,(function*(){if(e)return this.mapTextToType.get(e)||"";try{return yield navigator.clipboard.readText()}catch(e){return console.error(e),""}}))}readFindText(){return Br(this,void 0,void 0,(function*(){return this.findText}))}writeFindText(e){return Br(this,void 0,void 0,(function*(){this.findText=e}))}}var Wr=i(64862),Hr=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},zr=function(e,t){return function(i,n){t(i,n,e)}},jr=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const Ur=!1;function $r(e){return e.scheme===te.lg.file?e.fsPath:e.path}let Kr=0;class qr{constructor(e,t,i,n,o,s,r){this.id=++Kr,this.type=0,this.actual=e,this.label=e.label,this.confirmBeforeUndo=e.confirmBeforeUndo||!1,this.resourceLabel=t,this.strResource=i,this.resourceLabels=[this.resourceLabel],this.strResources=[this.strResource],this.groupId=n,this.groupOrder=o,this.sourceId=s,this.sourceOrder=r,this.isValid=!0}setValid(e){this.isValid=e}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.isValid?"  VALID":"INVALID"}] ${this.actual.constructor.name} - ${this.actual}`}}class Zr{constructor(e,t){this.resourceLabel=e,this.reason=t}}class Gr{constructor(){this.elements=new Map}createMessage(){const e=[],t=[];for(const[,i]of this.elements){(0===i.reason?e:t).push(i.resourceLabel)}let i=[];return e.length>0&&i.push(bi.N({key:"externalRemoval",comment:["{0} is a list of filenames"]},"The following files have been closed and modified on disk: {0}.",e.join(", "))),t.length>0&&i.push(bi.N({key:"noParallelUniverses",comment:["{0} is a list of filenames"]},"The following files have been modified in an incompatible way: {0}.",t.join(", "))),i.join("\n")}get size(){return this.elements.size}has(e){return this.elements.has(e)}set(e,t){this.elements.set(e,t)}delete(e){return this.elements.delete(e)}}class Yr{constructor(e,t,i,n,o,s,r){this.id=++Kr,this.type=1,this.actual=e,this.label=e.label,this.confirmBeforeUndo=e.confirmBeforeUndo||!1,this.resourceLabels=t,this.strResources=i,this.groupId=n,this.groupOrder=o,this.sourceId=s,this.sourceOrder=r,this.removedResources=null,this.invalidatedResources=null}canSplit(){return"function"==typeof this.actual.split}removeResource(e,t,i){this.removedResources||(this.removedResources=new Gr),this.removedResources.has(t)||this.removedResources.set(t,new Zr(e,i))}setValid(e,t,i){i?this.invalidatedResources&&(this.invalidatedResources.delete(t),0===this.invalidatedResources.size&&(this.invalidatedResources=null)):(this.invalidatedResources||(this.invalidatedResources=new Gr),this.invalidatedResources.has(t)||this.invalidatedResources.set(t,new Zr(e,0)))}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources?"INVALID":"  VALID"}] ${this.actual.constructor.name} - ${this.actual}`}}class Qr{constructor(e,t){this.resourceLabel=e,this.strResource=t,this._past=[],this._future=[],this.locked=!1,this.versionId=1}dispose(){for(const e of this._past)1===e.type&&e.removeResource(this.resourceLabel,this.strResource,0);for(const e of this._future)1===e.type&&e.removeResource(this.resourceLabel,this.strResource,0);this.versionId++}toString(){let e=[];e.push(`* ${this.strResource}:`);for(let t=0;t<this._past.length;t++)e.push(`   * [UNDO] ${this._past[t]}`);for(let t=this._future.length-1;t>=0;t--)e.push(`   * [REDO] ${this._future[t]}`);return e.join("\n")}flushAllElements(){this._past=[],this._future=[],this.versionId++}_setElementValidFlag(e,t){1===e.type?e.setValid(this.resourceLabel,this.strResource,t):e.setValid(t)}setElementsValidFlag(e,t){for(const i of this._past)t(i.actual)&&this._setElementValidFlag(i,e);for(const i of this._future)t(i.actual)&&this._setElementValidFlag(i,e)}pushElement(e){for(const e of this._future)1===e.type&&e.removeResource(this.resourceLabel,this.strResource,1);this._future=[],this._past.push(e),this.versionId++}createSnapshot(e){const t=[];for(let e=0,i=this._past.length;e<i;e++)t.push(this._past[e].id);for(let e=this._future.length-1;e>=0;e--)t.push(this._future[e].id);return new Wr.YO(e,t)}restoreSnapshot(e){const t=e.elements.length;let i=!0,n=0,o=-1;for(let s=0,r=this._past.length;s<r;s++,n++){const r=this._past[s];i&&(n>=t||r.id!==e.elements[n])&&(i=!1,o=0),i||1!==r.type||r.removeResource(this.resourceLabel,this.strResource,0)}let s=-1;for(let o=this._future.length-1;o>=0;o--,n++){const r=this._future[o];i&&(n>=t||r.id!==e.elements[n])&&(i=!1,s=o),i||1!==r.type||r.removeResource(this.resourceLabel,this.strResource,0)}-1!==o&&(this._past=this._past.slice(0,o)),-1!==s&&(this._future=this._future.slice(s+1)),this.versionId++}getElements(){const e=[],t=[];for(const t of this._past)e.push(t.actual);for(const e of this._future)t.push(e.actual);return{past:e,future:t}}getClosestPastElement(){return 0===this._past.length?null:this._past[this._past.length-1]}getSecondClosestPastElement(){return this._past.length<2?null:this._past[this._past.length-2]}getClosestFutureElement(){return 0===this._future.length?null:this._future[this._future.length-1]}hasPastElements(){return this._past.length>0}hasFutureElements(){return this._future.length>0}splitPastWorkspaceElement(e,t){for(let i=this._past.length-1;i>=0;i--)if(this._past[i]===e){t.has(this.strResource)?this._past[i]=t.get(this.strResource):this._past.splice(i,1);break}this.versionId++}splitFutureWorkspaceElement(e,t){for(let i=this._future.length-1;i>=0;i--)if(this._future[i]===e){t.has(this.strResource)?this._future[i]=t.get(this.strResource):this._future.splice(i,1);break}this.versionId++}moveBackward(e){this._past.pop(),this._future.push(e),this.versionId++}moveForward(e){this._future.pop(),this._past.push(e),this.versionId++}}class Xr{constructor(e){this.editStacks=e,this._versionIds=[];for(let e=0,t=this.editStacks.length;e<t;e++)this._versionIds[e]=this.editStacks[e].versionId}isValid(){for(let e=0,t=this.editStacks.length;e<t;e++)if(this._versionIds[e]!==this.editStacks[e].versionId)return!1;return!0}}const Jr=new Qr("","");Jr.locked=!0;let ea=class{constructor(e,t){this._dialogService=e,this._notificationService=t,this._editStacks=new Map,this._uriComparisonKeyComputers=[]}getUriComparisonKey(e){for(const t of this._uriComparisonKeyComputers)if(t[0]===e.scheme)return t[1].getComparisonKey(e);return e.toString()}_print(e){console.log("------------------------------------"),console.log(`AFTER ${e}: `);let t=[];for(const e of this._editStacks)t.push(e[1].toString());console.log(t.join("\n"))}pushElement(e,t=Wr.Xt.None,i=Wr.gJ.None){if(0===e.type){const n=$r(e.resource),o=this.getUriComparisonKey(e.resource);this._pushElement(new qr(e,n,o,t.id,t.nextOrder(),i.id,i.nextOrder()))}else{const n=new Set,o=[],s=[];for(const t of e.resources){const e=$r(t),i=this.getUriComparisonKey(t);n.has(i)||(n.add(i),o.push(e),s.push(i))}1===o.length?this._pushElement(new qr(e,o[0],s[0],t.id,t.nextOrder(),i.id,i.nextOrder())):this._pushElement(new Yr(e,o,s,t.id,t.nextOrder(),i.id,i.nextOrder()))}}_pushElement(e){for(let t=0,i=e.strResources.length;t<i;t++){const i=e.resourceLabels[t],n=e.strResources[t];let o;this._editStacks.has(n)?o=this._editStacks.get(n):(o=new Qr(i,n),this._editStacks.set(n,o)),o.pushElement(e)}}getLastElement(e){const t=this.getUriComparisonKey(e);if(this._editStacks.has(t)){const e=this._editStacks.get(t);if(e.hasFutureElements())return null;const i=e.getClosestPastElement();return i?i.actual:null}return null}_splitPastWorkspaceElement(e,t){const i=e.actual.split(),n=new Map;for(const e of i){const t=$r(e.resource),i=this.getUriComparisonKey(e.resource),o=new qr(e,t,i,0,0,0,0);n.set(o.strResource,o)}for(const i of e.strResources){if(t&&t.has(i))continue;this._editStacks.get(i).splitPastWorkspaceElement(e,n)}}_splitFutureWorkspaceElement(e,t){const i=e.actual.split(),n=new Map;for(const e of i){const t=$r(e.resource),i=this.getUriComparisonKey(e.resource),o=new qr(e,t,i,0,0,0,0);n.set(o.strResource,o)}for(const i of e.strResources){if(t&&t.has(i))continue;this._editStacks.get(i).splitFutureWorkspaceElement(e,n)}}removeElements(e){const t="string"==typeof e?e:this.getUriComparisonKey(e);if(this._editStacks.has(t)){this._editStacks.get(t).dispose(),this._editStacks.delete(t)}}setElementsValidFlag(e,t,i){const n=this.getUriComparisonKey(e);if(this._editStacks.has(n)){this._editStacks.get(n).setElementsValidFlag(t,i)}}createSnapshot(e){const t=this.getUriComparisonKey(e);if(this._editStacks.has(t)){return this._editStacks.get(t).createSnapshot(e)}return new Wr.YO(e,[])}restoreSnapshot(e){const t=this.getUriComparisonKey(e.resource);if(this._editStacks.has(t)){const i=this._editStacks.get(t);i.restoreSnapshot(e),i.hasPastElements()||i.hasFutureElements()||(i.dispose(),this._editStacks.delete(t))}}getElements(e){const t=this.getUriComparisonKey(e);if(this._editStacks.has(t)){return this._editStacks.get(t).getElements()}return{past:[],future:[]}}_findClosestUndoElementWithSource(e){if(!e)return[null,null];let t=null,i=null;for(const[n,o]of this._editStacks){const s=o.getClosestPastElement();s&&(s.sourceId===e&&(!t||s.sourceOrder>t.sourceOrder)&&(t=s,i=n))}return[t,i]}canUndo(e){if(e instanceof Wr.gJ){const[,t]=this._findClosestUndoElementWithSource(e.id);return!!t}const t=this.getUriComparisonKey(e);if(this._editStacks.has(t)){return this._editStacks.get(t).hasPastElements()}return!1}_onError(e,t){(0,ke.dL)(e);for(const e of t.strResources)this.removeElements(e);this._notificationService.error(e)}_acquireLocks(e){for(const t of e.editStacks)if(t.locked)throw new Error("Cannot acquire edit stack lock");for(const t of e.editStacks)t.locked=!0;return()=>{for(const t of e.editStacks)t.locked=!1}}_safeInvokeWithLocks(e,t,i,n,o){const s=this._acquireLocks(i);let r;try{r=t()}catch(t){return s(),n.dispose(),this._onError(t,e)}return r?r.then((()=>(s(),n.dispose(),o())),(t=>(s(),n.dispose(),this._onError(t,e)))):(s(),n.dispose(),o())}_invokeWorkspacePrepare(e){return jr(this,void 0,void 0,(function*(){if(void 0===e.actual.prepareUndoRedo)return ue.JT.None;const t=e.actual.prepareUndoRedo();return void 0===t?ue.JT.None:t}))}_invokeResourcePrepare(e,t){if(1!==e.actual.type||void 0===e.actual.prepareUndoRedo)return t(ue.JT.None);const i=e.actual.prepareUndoRedo();return i?(0,ue.Wf)(i)?t(i):i.then((e=>t(e))):t(ue.JT.None)}_getAffectedEditStacks(e){const t=[];for(const i of e.strResources)t.push(this._editStacks.get(i)||Jr);return new Xr(t)}_tryToSplitAndUndo(e,t,i,n){if(t.canSplit())return this._splitPastWorkspaceElement(t,i),this._notificationService.warn(n),new ta(this._undo(e,0,!0));for(const e of t.strResources)this.removeElements(e);return this._notificationService.warn(n),new ta}_checkWorkspaceUndo(e,t,i,n){if(t.removedResources)return this._tryToSplitAndUndo(e,t,t.removedResources,bi.N({key:"cannotWorkspaceUndo",comment:["{0} is a label for an operation. {1} is another message."]},"Could not undo '{0}' across all files. {1}",t.label,t.removedResources.createMessage()));if(n&&t.invalidatedResources)return this._tryToSplitAndUndo(e,t,t.invalidatedResources,bi.N({key:"cannotWorkspaceUndo",comment:["{0} is a label for an operation. {1} is another message."]},"Could not undo '{0}' across all files. {1}",t.label,t.invalidatedResources.createMessage()));const o=[];for(const e of i.editStacks)e.getClosestPastElement()!==t&&o.push(e.resourceLabel);if(o.length>0)return this._tryToSplitAndUndo(e,t,null,bi.N({key:"cannotWorkspaceUndoDueToChanges",comment:["{0} is a label for an operation. {1} is a list of filenames."]},"Could not undo '{0}' across all files because changes were made to {1}",t.label,o.join(", ")));const s=[];for(const e of i.editStacks)e.locked&&s.push(e.resourceLabel);return s.length>0?this._tryToSplitAndUndo(e,t,null,bi.N({key:"cannotWorkspaceUndoDueToInProgressUndoRedo",comment:["{0} is a label for an operation. {1} is a list of filenames."]},"Could not undo '{0}' across all files because there is already an undo or redo operation running on {1}",t.label,s.join(", "))):i.isValid()?null:this._tryToSplitAndUndo(e,t,null,bi.N({key:"cannotWorkspaceUndoDueToInMeantimeUndoRedo",comment:["{0} is a label for an operation. {1} is a list of filenames."]},"Could not undo '{0}' across all files because an undo or redo operation occurred in the meantime",t.label))}_workspaceUndo(e,t,i){const n=this._getAffectedEditStacks(t),o=this._checkWorkspaceUndo(e,t,n,!1);return o?o.returnValue:this._confirmAndExecuteWorkspaceUndo(e,t,n,i)}_isPartOfUndoGroup(e){if(!e.groupId)return!1;for(const[,t]of this._editStacks){const i=t.getClosestPastElement();if(i){if(i===e){const i=t.getSecondClosestPastElement();if(i&&i.groupId===e.groupId)return!0}if(i.groupId===e.groupId)return!0}}return!1}_confirmAndExecuteWorkspaceUndo(e,t,i,n){return jr(this,void 0,void 0,(function*(){if(t.canSplit()&&!this._isPartOfUndoGroup(t)){const o=yield this._dialogService.show(li.Z.Info,bi.N("confirmWorkspace","Would you like to undo '{0}' across all files?",t.label),[bi.N({key:"ok",comment:["{0} denotes a number that is > 1"]},"Undo in {0} Files",i.editStacks.length),bi.N("nok","Undo this File"),bi.N("cancel","å–æ¶ˆ")],{cancelId:2});if(2===o.choice)return;if(1===o.choice)return this._splitPastWorkspaceElement(t,null),this._undo(e,0,!0);const s=this._checkWorkspaceUndo(e,t,i,!1);if(s)return s.returnValue;n=!0}let o;try{o=yield this._invokeWorkspacePrepare(t)}catch(e){return this._onError(e,t)}const s=this._checkWorkspaceUndo(e,t,i,!0);if(s)return o.dispose(),s.returnValue;for(const e of i.editStacks)e.moveBackward(t);return this._safeInvokeWithLocks(t,(()=>t.actual.undo()),i,o,(()=>this._continueUndoInGroup(t.groupId,n)))}))}_resourceUndo(e,t,i){if(t.isValid){if(!e.locked)return this._invokeResourcePrepare(t,(n=>(e.moveBackward(t),this._safeInvokeWithLocks(t,(()=>t.actual.undo()),new Xr([e]),n,(()=>this._continueUndoInGroup(t.groupId,i))))));{const e=bi.N({key:"cannotResourceUndoDueToInProgressUndoRedo",comment:["{0} is a label for an operation."]},"Could not undo '{0}' because there is already an undo or redo operation running.",t.label);this._notificationService.warn(e)}}else e.flushAllElements()}_findClosestUndoElementInGroup(e){if(!e)return[null,null];let t=null,i=null;for(const[n,o]of this._editStacks){const s=o.getClosestPastElement();s&&(s.groupId===e&&(!t||s.groupOrder>t.groupOrder)&&(t=s,i=n))}return[t,i]}_continueUndoInGroup(e,t){if(!e)return;const[,i]=this._findClosestUndoElementInGroup(e);return i?this._undo(i,0,t):void 0}undo(e){if(e instanceof Wr.gJ){const[,t]=this._findClosestUndoElementWithSource(e.id);return t?this._undo(t,e.id,!1):void 0}return"string"==typeof e?this._undo(e,0,!1):this._undo(this.getUriComparisonKey(e),0,!1)}_undo(e,t=0,i){if(!this._editStacks.has(e))return;const n=this._editStacks.get(e),o=n.getClosestPastElement();if(!o)return;if(o.groupId){const[e,n]=this._findClosestUndoElementInGroup(o.groupId);if(o!==e&&n)return this._undo(n,t,i)}if((o.sourceId!==t||o.confirmBeforeUndo)&&!i)return this._confirmAndContinueUndo(e,t,o);try{return 1===o.type?this._workspaceUndo(e,o,i):this._resourceUndo(n,o,i)}finally{Ur}}_confirmAndContinueUndo(e,t,i){return jr(this,void 0,void 0,(function*(){if(1!==(yield this._dialogService.show(li.Z.Info,bi.N("confirmDifferentSource","Would you like to undo '{0}'?",i.label),[bi.N("confirmDifferentSource.yes","Yes"),bi.N("cancel","å–æ¶ˆ")],{cancelId:1})).choice)return this._undo(e,t,!0)}))}_findClosestRedoElementWithSource(e){if(!e)return[null,null];let t=null,i=null;for(const[n,o]of this._editStacks){const s=o.getClosestFutureElement();s&&(s.sourceId===e&&(!t||s.sourceOrder<t.sourceOrder)&&(t=s,i=n))}return[t,i]}canRedo(e){if(e instanceof Wr.gJ){const[,t]=this._findClosestRedoElementWithSource(e.id);return!!t}const t=this.getUriComparisonKey(e);if(this._editStacks.has(t)){return this._editStacks.get(t).hasFutureElements()}return!1}_tryToSplitAndRedo(e,t,i,n){if(t.canSplit())return this._splitFutureWorkspaceElement(t,i),this._notificationService.warn(n),new ta(this._redo(e));for(const e of t.strResources)this.removeElements(e);return this._notificationService.warn(n),new ta}_checkWorkspaceRedo(e,t,i,n){if(t.removedResources)return this._tryToSplitAndRedo(e,t,t.removedResources,bi.N({key:"cannotWorkspaceRedo",comment:["{0} is a label for an operation. {1} is another message."]},"Could not redo '{0}' across all files. {1}",t.label,t.removedResources.createMessage()));if(n&&t.invalidatedResources)return this._tryToSplitAndRedo(e,t,t.invalidatedResources,bi.N({key:"cannotWorkspaceRedo",comment:["{0} is a label for an operation. {1} is another message."]},"Could not redo '{0}' across all files. {1}",t.label,t.invalidatedResources.createMessage()));const o=[];for(const e of i.editStacks)e.getClosestFutureElement()!==t&&o.push(e.resourceLabel);if(o.length>0)return this._tryToSplitAndRedo(e,t,null,bi.N({key:"cannotWorkspaceRedoDueToChanges",comment:["{0} is a label for an operation. {1} is a list of filenames."]},"Could not redo '{0}' across all files because changes were made to {1}",t.label,o.join(", ")));const s=[];for(const e of i.editStacks)e.locked&&s.push(e.resourceLabel);return s.length>0?this._tryToSplitAndRedo(e,t,null,bi.N({key:"cannotWorkspaceRedoDueToInProgressUndoRedo",comment:["{0} is a label for an operation. {1} is a list of filenames."]},"Could not redo '{0}' across all files because there is already an undo or redo operation running on {1}",t.label,s.join(", "))):i.isValid()?null:this._tryToSplitAndRedo(e,t,null,bi.N({key:"cannotWorkspaceRedoDueToInMeantimeUndoRedo",comment:["{0} is a label for an operation. {1} is a list of filenames."]},"Could not redo '{0}' across all files because an undo or redo operation occurred in the meantime",t.label))}_workspaceRedo(e,t){const i=this._getAffectedEditStacks(t),n=this._checkWorkspaceRedo(e,t,i,!1);return n?n.returnValue:this._executeWorkspaceRedo(e,t,i)}_executeWorkspaceRedo(e,t,i){return jr(this,void 0,void 0,(function*(){let n;try{n=yield this._invokeWorkspacePrepare(t)}catch(e){return this._onError(e,t)}const o=this._checkWorkspaceRedo(e,t,i,!0);if(o)return n.dispose(),o.returnValue;for(const e of i.editStacks)e.moveForward(t);return this._safeInvokeWithLocks(t,(()=>t.actual.redo()),i,n,(()=>this._continueRedoInGroup(t.groupId)))}))}_resourceRedo(e,t){if(t.isValid){if(!e.locked)return this._invokeResourcePrepare(t,(i=>(e.moveForward(t),this._safeInvokeWithLocks(t,(()=>t.actual.redo()),new Xr([e]),i,(()=>this._continueRedoInGroup(t.groupId))))));{const e=bi.N({key:"cannotResourceRedoDueToInProgressUndoRedo",comment:["{0} is a label for an operation."]},"Could not redo '{0}' because there is already an undo or redo operation running.",t.label);this._notificationService.warn(e)}}else e.flushAllElements()}_findClosestRedoElementInGroup(e){if(!e)return[null,null];let t=null,i=null;for(const[n,o]of this._editStacks){const s=o.getClosestFutureElement();s&&(s.groupId===e&&(!t||s.groupOrder<t.groupOrder)&&(t=s,i=n))}return[t,i]}_continueRedoInGroup(e){if(!e)return;const[,t]=this._findClosestRedoElementInGroup(e);return t?this._redo(t):void 0}redo(e){if(e instanceof Wr.gJ){const[,t]=this._findClosestRedoElementWithSource(e.id);return t?this._redo(t):void 0}return"string"==typeof e?this._redo(e):this._redo(this.getUriComparisonKey(e))}_redo(e){if(!this._editStacks.has(e))return;const t=this._editStacks.get(e),i=t.getClosestFutureElement();if(i){if(i.groupId){const[e,t]=this._findClosestRedoElementInGroup(i.groupId);if(i!==e&&t)return this._redo(t)}try{return 1===i.type?this._workspaceRedo(e,i):this._resourceRedo(t,i)}finally{Ur}}}};ea=Hr([zr(0,hr.S),zr(1,Ai.lT)],ea);class ta{constructor(e){this.returnValue=e}}(0,Or.z)(Wr.tJ,ea);i(80359);var ia=i(56811);i(64962);const na={buttonBackground:Qo.Il.fromHex("#0E639C"),buttonHoverBackground:Qo.Il.fromHex("#006BB3"),buttonForeground:Qo.Il.white};class oa extends ue.JT{constructor(e,t){super(),this._onDidClick=this._register(new W.Q5),this.options=t||Object.create(null),(0,ge.jB)(this.options,na,!1),this.buttonForeground=this.options.buttonForeground,this.buttonBackground=this.options.buttonBackground,this.buttonHoverBackground=this.options.buttonHoverBackground,this.buttonSecondaryForeground=this.options.buttonSecondaryForeground,this.buttonSecondaryBackground=this.options.buttonSecondaryBackground,this.buttonSecondaryHoverBackground=this.options.buttonSecondaryHoverBackground,this.buttonBorder=this.options.buttonBorder,this._element=document.createElement("a"),this._element.classList.add("monaco-button"),this._element.tabIndex=0,this._element.setAttribute("role","button"),e.appendChild(this._element),this._register(Fs.o.addTarget(this._element)),[Q.tw.CLICK,Fs.t.Tap].forEach((e=>{this._register((0,Q.nm)(this._element,e,(e=>{this.enabled?this._onDidClick.fire(e):Q.zB.stop(e)})))})),this._register((0,Q.nm)(this._element,Q.tw.KEY_DOWN,(e=>{const t=new ri.y(e);let i=!1;this.enabled&&(t.equals(3)||t.equals(10))?(this._onDidClick.fire(e),i=!0):t.equals(9)&&(this._element.blur(),i=!0),i&&Q.zB.stop(t,!0)}))),this._register((0,Q.nm)(this._element,Q.tw.MOUSE_OVER,(e=>{this._element.classList.contains("disabled")||this.setHoverBackground()}))),this._register((0,Q.nm)(this._element,Q.tw.MOUSE_OUT,(e=>{this.applyStyles()}))),this.focusTracker=this._register((0,Q.go)(this._element)),this._register(this.focusTracker.onDidFocus((()=>this.setHoverBackground()))),this._register(this.focusTracker.onDidBlur((()=>this.applyStyles()))),this.applyStyles()}get onDidClick(){return this._onDidClick.event}setHoverBackground(){let e;e=this.options.secondary?this.buttonSecondaryHoverBackground?this.buttonSecondaryHoverBackground.toString():null:this.buttonHoverBackground?this.buttonHoverBackground.toString():null,e&&(this._element.style.backgroundColor=e)}style(e){this.buttonForeground=e.buttonForeground,this.buttonBackground=e.buttonBackground,this.buttonHoverBackground=e.buttonHoverBackground,this.buttonSecondaryForeground=e.buttonSecondaryForeground,this.buttonSecondaryBackground=e.buttonSecondaryBackground,this.buttonSecondaryHoverBackground=e.buttonSecondaryHoverBackground,this.buttonBorder=e.buttonBorder,this.applyStyles()}applyStyles(){if(this._element){let e,t;this.options.secondary?(t=this.buttonSecondaryForeground?this.buttonSecondaryForeground.toString():"",e=this.buttonSecondaryBackground?this.buttonSecondaryBackground.toString():""):(t=this.buttonForeground?this.buttonForeground.toString():"",e=this.buttonBackground?this.buttonBackground.toString():"");const i=this.buttonBorder?this.buttonBorder.toString():"";this._element.style.color=t,this._element.style.backgroundColor=e,this._element.style.borderWidth=i?"1px":"",this._element.style.borderStyle=i?"solid":"",this._element.style.borderColor=i}}get element(){return this._element}set label(e){this._element.classList.add("monaco-text-button"),this.options.supportIcons?(0,Q.mc)(this._element,...(0,ia.T)(e)):this._element.textContent=e,"string"==typeof this.options.title?this._element.title=this.options.title:this.options.title&&(this._element.title=e)}set enabled(e){e?(this._element.classList.remove("disabled"),this._element.setAttribute("aria-disabled",String(!1)),this._element.tabIndex=0):(this._element.classList.add("disabled"),this._element.setAttribute("aria-disabled",String(!0)))}get enabled(){return!this._element.classList.contains("disabled")}}var sa=i(67488);i(88444);const ra="done",aa="active",la="infinite",ca="discrete",da={progressBarBackground:Qo.Il.fromHex("#0E70C0")};class ha extends ue.JT{constructor(e,t){super(),this.options=t||Object.create(null),(0,ge.jB)(this.options,da,!1),this.workedVal=0,this.progressBarBackground=this.options.progressBarBackground,this._register(this.showDelayedScheduler=new Se.pY((()=>(0,Q.$Z)(this.element)),0)),this.create(e)}create(e){this.element=document.createElement("div"),this.element.classList.add("monaco-progress-container"),this.element.setAttribute("role","progressbar"),this.element.setAttribute("aria-valuemin","0"),e.appendChild(this.element),this.bit=document.createElement("div"),this.bit.classList.add("progress-bit"),this.element.appendChild(this.bit),this.applyStyles()}off(){this.bit.style.width="inherit",this.bit.style.opacity="1",this.element.classList.remove(aa,la,ca),this.workedVal=0,this.totalWork=void 0}stop(){return this.doDone(!1)}doDone(e){return this.element.classList.add(ra),this.element.classList.contains(la)?(this.bit.style.opacity="0",e?setTimeout((()=>this.off()),200):this.off()):(this.bit.style.width="inherit",e?setTimeout((()=>this.off()),200):this.off()),this}infinite(){return this.bit.style.width="2%",this.bit.style.opacity="1",this.element.classList.remove(ca,ra),this.element.classList.add(aa,la),this}getContainer(){return this.element}style(e){this.progressBarBackground=e.progressBarBackground,this.applyStyles()}applyStyles(){if(this.bit){const e=this.progressBarBackground?this.progressBarBackground.toString():"";this.bit.style.backgroundColor=e}}}var ua=i(44742);i(86323);const ga={},pa=new ua.R("quick-input-button-icon-");function fa(e){if(!e)return;let t;const i=e.dark.toString();return ga[i]?t=ga[i]:(t=pa.nextId(),Q.fk(`.${t}`,`background-image: ${Q.wY(e.light||e.dark)}`),Q.fk(`.vs-dark .${t}, .hc-black .${t}`,`background-image: ${Q.wY(e.dark)}`),ga[i]=t),t}var ma=i(67746),va=i(77927);const _a=Q.$;class ba extends ue.JT{constructor(e){super(),this.parent=e,this.onKeyDown=e=>Q.nm(this.inputBox.inputElement,Q.tw.KEY_DOWN,(t=>{e(new ri.y(t))})),this.onMouseDown=e=>Q.nm(this.inputBox.inputElement,Q.tw.MOUSE_DOWN,(t=>{e(new Ps.n(t))})),this.onDidChange=e=>this.inputBox.onDidChange(e),this.container=Q.R3(this.parent,_a(".quick-input-box")),this.inputBox=this._register(new va.W(this.container,void 0))}get value(){return this.inputBox.value}set value(e){this.inputBox.value=e}select(e=null){this.inputBox.select(e)}isSelectionAtEnd(){return this.inputBox.isSelectionAtEnd()}get placeholder(){return this.inputBox.inputElement.getAttribute("placeholder")||""}set placeholder(e){this.inputBox.setPlaceHolder(e)}get ariaLabel(){return this.inputBox.getAriaLabel()}set ariaLabel(e){this.inputBox.setAriaLabel(e)}get password(){return"password"===this.inputBox.inputElement.type}set password(e){this.inputBox.inputElement.type=e?"password":"text"}setAttribute(e,t){this.inputBox.inputElement.setAttribute(e,t)}removeAttribute(e){this.inputBox.inputElement.removeAttribute(e)}showDecoration(e){e===li.Z.Ignore?this.inputBox.hideMessage():this.inputBox.showMessage({type:e===li.Z.Info?1:e===li.Z.Warning?2:3,content:""})}stylesForType(e){return this.inputBox.stylesForType(e===li.Z.Info?1:e===li.Z.Warning?2:3)}setFocus(){this.inputBox.focus()}layout(){this.inputBox.layout()}style(e){this.inputBox.style(e)}}var wa=i(34650),ya=i(48801);i(3248);const Ca=Q.$;class xa{constructor(e,t,i){this.os=t,this.keyElements=new Set,this.options=i||Object.create(null),this.labelBackground=this.options.keybindingLabelBackground,this.labelForeground=this.options.keybindingLabelForeground,this.labelBorder=this.options.keybindingLabelBorder,this.labelBottomBorder=this.options.keybindingLabelBottomBorder,this.labelShadow=this.options.keybindingLabelShadow,this.domNode=Q.R3(e,Ca(".monaco-keybinding")),this.didEverRender=!1,e.appendChild(this.domNode)}get element(){return this.domNode}set(e,t){this.didEverRender&&this.keybinding===e&&xa.areSame(this.matches,t)||(this.keybinding=e,this.matches=t,this.render())}render(){if(this.clear(),this.keybinding){let[e,t]=this.keybinding.getParts();e&&this.renderPart(this.domNode,e,this.matches?this.matches.firstPart:null),t&&(Q.R3(this.domNode,Ca("span.monaco-keybinding-key-chord-separator",void 0," ")),this.renderPart(this.domNode,t,this.matches?this.matches.chordPart:null)),this.domNode.title=this.keybinding.getAriaLabel()||""}else this.options&&this.options.renderUnboundKeybindings&&this.renderUnbound(this.domNode);this.applyStyles(),this.didEverRender=!0}clear(){Q.PO(this.domNode),this.keyElements.clear()}renderPart(e,t,i){const n=Ei.xo.modifierLabels[this.os];t.ctrlKey&&this.renderKey(e,n.ctrlKey,Boolean(null==i?void 0:i.ctrlKey),n.separator),t.shiftKey&&this.renderKey(e,n.shiftKey,Boolean(null==i?void 0:i.shiftKey),n.separator),t.altKey&&this.renderKey(e,n.altKey,Boolean(null==i?void 0:i.altKey),n.separator),t.metaKey&&this.renderKey(e,n.metaKey,Boolean(null==i?void 0:i.metaKey),n.separator);const o=t.keyLabel;o&&this.renderKey(e,o,Boolean(null==i?void 0:i.keyCode),"")}renderKey(e,t,i,n){Q.R3(e,this.createKeyElement(t,i?".highlight":"")),n&&Q.R3(e,Ca("span.monaco-keybinding-key-separator",void 0,n))}renderUnbound(e){Q.R3(e,this.createKeyElement((0,bi.N)("unbound","Unbound")))}createKeyElement(e,t=""){const i=Ca("span.monaco-keybinding-key"+t,void 0,e);return this.keyElements.add(i),i}style(e){this.labelBackground=e.keybindingLabelBackground,this.labelForeground=e.keybindingLabelForeground,this.labelBorder=e.keybindingLabelBorder,this.labelBottomBorder=e.keybindingLabelBottomBorder,this.labelShadow=e.keybindingLabelShadow,this.applyStyles()}applyStyles(){var e;if(this.element){for(const t of this.keyElements)this.labelBackground&&(t.style.backgroundColor=null===(e=this.labelBackground)||void 0===e?void 0:e.toString()),this.labelBorder&&(t.style.borderColor=this.labelBorder.toString()),this.labelBottomBorder&&(t.style.borderBottomColor=this.labelBottomBorder.toString()),this.labelShadow&&(t.style.boxShadow=`inset 0 -1px 0 ${this.labelShadow}`);this.labelForeground&&(this.element.style.color=this.labelForeground.toString())}}static areSame(e,t){return e===t||!e&&!t||!!e&&!!t&&(0,ge.fS)(e.firstPart,t.firstPart)&&(0,ge.fS)(e.chordPart,t.chordPart)}}const Sa=new Se.Ue((()=>{const e=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});return{collator:e,collatorIsNumeric:e.resolvedOptions().numeric}}));function ka(e,t,i){const n=e.toLowerCase(),o=t.toLowerCase(),s=function(e,t,i){const n=e.toLowerCase(),o=t.toLowerCase(),s=n.startsWith(i),r=o.startsWith(i);if(s!==r)return s?-1:1;if(s&&r){if(n.length<o.length)return-1;if(n.length>o.length)return 1}return 0}(e,t,i);if(s)return s;const r=n.endsWith(i);if(r!==o.endsWith(i))return r?-1:1;const a=function(e,t,i=!1){const n=e||"",o=t||"",s=Sa.value.collator.compare(n,o);return Sa.value.collatorIsNumeric&&0===s&&n!==o?n<o?-1:1:s}(n,o);return 0!==a?a:n.localeCompare(o)}var La=i(49898),Na=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Da=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const Ia=Q.$;class Ea{constructor(e){this.hidden=!1,this._onChecked=new W.Q5,this.onChecked=this._onChecked.event,Object.assign(this,e)}get checked(){return!!this._checked}set checked(e){e!==this._checked&&(this._checked=e,this._onChecked.fire(e))}dispose(){this._onChecked.dispose()}}class Ta{get templateId(){return Ta.ID}renderTemplate(e){const t=Object.create(null);t.toDisposeElement=[],t.toDisposeTemplate=[],t.entry=Q.R3(e,Ia(".quick-input-list-entry"));const i=Q.R3(t.entry,Ia("label.quick-input-list-label"));t.toDisposeTemplate.push(Q.mu(i,Q.tw.CLICK,(e=>{t.checkbox.offsetParent||e.preventDefault()}))),t.checkbox=Q.R3(i,Ia("input.quick-input-list-checkbox")),t.checkbox.type="checkbox",t.toDisposeTemplate.push(Q.mu(t.checkbox,Q.tw.CHANGE,(e=>{t.element.checked=t.checkbox.checked})));const n=Q.R3(i,Ia(".quick-input-list-rows")),o=Q.R3(n,Ia(".quick-input-list-row")),s=Q.R3(n,Ia(".quick-input-list-row"));t.label=new ya.g(o,{supportHighlights:!0,supportDescriptionHighlights:!0,supportIcons:!0});const r=Q.R3(o,Ia(".quick-input-list-entry-keybinding"));t.keybinding=new xa(r,Le.OS);const a=Q.R3(s,Ia(".quick-input-list-label-meta"));return t.detail=new wa.q(a,!0),t.separator=Q.R3(t.entry,Ia(".quick-input-list-separator")),t.actionBar=new dn.o(t.entry),t.actionBar.domNode.classList.add("quick-input-list-entry-action-bar"),t.toDisposeTemplate.push(t.actionBar),t}renderElement(e,t,i){i.toDisposeElement=(0,ue.B9)(i.toDisposeElement),i.element=e,i.checkbox.checked=e.checked,i.toDisposeElement.push(e.onChecked((e=>i.checkbox.checked=e)));const{labelHighlights:n,descriptionHighlights:o,detailHighlights:s}=e,r=Object.create(null);r.matches=n||[],r.descriptionTitle=e.saneDescription,r.descriptionMatches=o||[],r.extraClasses=e.item.iconClasses,r.italic=e.item.italic,r.strikethrough=e.item.strikethrough,i.label.setLabel(e.saneLabel,e.saneDescription,r),i.keybinding.set(e.item.keybinding),i.detail.set(e.saneDetail,s),e.separator&&e.separator.label?(i.separator.textContent=e.separator.label,i.separator.style.display=""):i.separator.style.display="none",i.entry.classList.toggle("quick-input-list-separator-border",!!e.separator),i.actionBar.clear();const a=e.item.buttons;a&&a.length?(i.actionBar.push(a.map(((t,i)=>{let n=t.iconClass||(t.iconPath?fa(t.iconPath):void 0);t.alwaysVisible&&(n=n?`${n} always-visible`:"always-visible");const o=new un.aU(`id-${i}`,"",n,!0,(()=>Da(this,void 0,void 0,(function*(){e.fireButtonTriggered({button:t,item:e.item})}))));return o.tooltip=t.tooltip||"",o})),{icon:!0,label:!1}),i.entry.classList.add("has-actions")):i.entry.classList.remove("has-actions")}disposeElement(e,t,i){i.toDisposeElement=(0,ue.B9)(i.toDisposeElement)}disposeTemplate(e){e.toDisposeElement=(0,ue.B9)(e.toDisposeElement),e.toDisposeTemplate=(0,ue.B9)(e.toDisposeTemplate)}}Ta.ID="listelement";class Ma{getHeight(e){return e.saneDetail?44:22}getTemplateId(e){return Ta.ID}}var Aa;!function(e){e[e.First=1]="First",e[e.Second=2]="Second",e[e.Last=3]="Last",e[e.Next=4]="Next",e[e.Previous=5]="Previous",e[e.NextPage=6]="NextPage",e[e.PreviousPage=7]="PreviousPage"}(Aa||(Aa={}));class Oa{constructor(e,t,i){this.parent=e,this.inputElements=[],this.elements=[],this.elementsToIndexes=new Map,this.matchOnDescription=!1,this.matchOnDetail=!1,this.matchOnLabel=!0,this.matchOnMeta=!0,this.sortByLabel=!0,this._onChangedAllVisibleChecked=new W.Q5,this.onChangedAllVisibleChecked=this._onChangedAllVisibleChecked.event,this._onChangedCheckedCount=new W.Q5,this.onChangedCheckedCount=this._onChangedCheckedCount.event,this._onChangedVisibleCount=new W.Q5,this.onChangedVisibleCount=this._onChangedVisibleCount.event,this._onChangedCheckedElements=new W.Q5,this.onChangedCheckedElements=this._onChangedCheckedElements.event,this._onButtonTriggered=new W.Q5,this.onButtonTriggered=this._onButtonTriggered.event,this._onKeyDown=new W.Q5,this.onKeyDown=this._onKeyDown.event,this._onLeave=new W.Q5,this.onLeave=this._onLeave.event,this._fireCheckedEvents=!0,this.elementDisposables=[],this.disposables=[],this.id=t,this.container=Q.R3(this.parent,Ia(".quick-input-list"));const n=new Ma,o=new Pa;this.list=i.createList("QuickInput",this.container,n,[new Ta],{identityProvider:{getId:e=>e.saneLabel},setRowLineHeight:!1,multipleSelectionSupport:!1,horizontalScrolling:!1,accessibilityProvider:o}),this.list.getHTMLElement().id=t,this.disposables.push(this.list),this.disposables.push(this.list.onKeyDown((e=>{const t=new ri.y(e);switch(t.keyCode){case 10:this.toggleCheckbox();break;case 31:(Le.dz?e.metaKey:e.ctrlKey)&&this.list.setFocus((0,bt.w6)(this.list.length));break;case 16:const t=this.list.getFocus();1===t.length&&0===t[0]&&this._onLeave.fire();break;case 18:const i=this.list.getFocus();1===i.length&&i[0]===this.list.length-1&&this._onLeave.fire()}this._onKeyDown.fire(t)}))),this.disposables.push(this.list.onMouseDown((e=>{2!==e.browserEvent.button&&e.browserEvent.preventDefault()}))),this.disposables.push(Q.nm(this.container,Q.tw.CLICK,(e=>{(e.x||e.y)&&this._onLeave.fire()}))),this.disposables.push(this.list.onMouseMiddleClick((e=>{this._onLeave.fire()}))),this.disposables.push(this.list.onContextMenu((e=>{"number"==typeof e.index&&(e.browserEvent.preventDefault(),this.list.setSelection([e.index]))}))),this.disposables.push(this._onChangedAllVisibleChecked,this._onChangedCheckedCount,this._onChangedVisibleCount,this._onChangedCheckedElements,this._onButtonTriggered,this._onLeave,this._onKeyDown)}get onDidChangeFocus(){return W.ju.map(this.list.onDidChangeFocus,(e=>e.elements.map((e=>e.item))))}get onDidChangeSelection(){return W.ju.map(this.list.onDidChangeSelection,(e=>({items:e.elements.map((e=>e.item)),event:e.browserEvent})))}get scrollTop(){return this.list.scrollTop}set scrollTop(e){this.list.scrollTop=e}getAllVisibleChecked(){return this.allVisibleChecked(this.elements,!1)}allVisibleChecked(e,t=!0){for(let i=0,n=e.length;i<n;i++){const n=e[i];if(!n.hidden){if(!n.checked)return!1;t=!0}}return t}getCheckedCount(){let e=0;const t=this.elements;for(let i=0,n=t.length;i<n;i++)t[i].checked&&e++;return e}getVisibleCount(){let e=0;const t=this.elements;for(let i=0,n=t.length;i<n;i++)t[i].hidden||e++;return e}setAllVisibleChecked(e){try{this._fireCheckedEvents=!1,this.elements.forEach((t=>{t.hidden||(t.checked=e)}))}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}setElements(e){this.elementDisposables=(0,ue.B9)(this.elementDisposables);const t=e=>this.fireButtonTriggered(e);this.inputElements=e,this.elements=e.reduce(((i,n,o)=>{var s,r,a;if("separator"!==n.type){const l=o&&e[o-1],c=n.label&&n.label.replace(/\r?\n/g," "),d=n.meta&&n.meta.replace(/\r?\n/g," "),h=n.description&&n.description.replace(/\r?\n/g," "),u=n.detail&&n.detail.replace(/\r?\n/g," "),g=n.ariaLabel||[c,h,u].map((e=>(0,vn.JL)(e))).filter((e=>!!e)).join(", ");i.push(new Ea({index:o,item:n,saneLabel:c,saneMeta:d,saneAriaLabel:g,saneDescription:h,saneDetail:u,labelHighlights:null===(s=n.highlights)||void 0===s?void 0:s.label,descriptionHighlights:null===(r=n.highlights)||void 0===r?void 0:r.description,detailHighlights:null===(a=n.highlights)||void 0===a?void 0:a.detail,checked:!1,separator:l&&"separator"===l.type?l:void 0,fireButtonTriggered:t}))}return i}),[]),this.elementDisposables.push(...this.elements),this.elementDisposables.push(...this.elements.map((e=>e.onChecked((()=>this.fireCheckedEvents()))))),this.elementsToIndexes=this.elements.reduce(((e,t,i)=>(e.set(t.item,i),e)),new Map),this.list.splice(0,this.list.length),this.list.splice(0,this.list.length,this.elements),this._onChangedVisibleCount.fire(this.elements.length)}getFocusedElements(){return this.list.getFocusedElements().map((e=>e.item))}setFocusedElements(e){if(this.list.setFocus(e.filter((e=>this.elementsToIndexes.has(e))).map((e=>this.elementsToIndexes.get(e)))),e.length>0){const e=this.list.getFocus()[0];"number"==typeof e&&this.list.reveal(e)}}getActiveDescendant(){return this.list.getHTMLElement().getAttribute("aria-activedescendant")}setSelectedElements(e){this.list.setSelection(e.filter((e=>this.elementsToIndexes.has(e))).map((e=>this.elementsToIndexes.get(e))))}getCheckedElements(){return this.elements.filter((e=>e.checked)).map((e=>e.item))}setCheckedElements(e){try{this._fireCheckedEvents=!1;const t=new Set;for(const i of e)t.add(i);for(const e of this.elements)e.checked=t.has(e.item)}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}set enabled(e){this.list.getHTMLElement().style.pointerEvents=e?"":"none"}focus(e){if(!this.list.length)return;switch(e===Aa.Next&&this.list.getFocus()[0]===this.list.length-1&&(e=Aa.First),e===Aa.Previous&&0===this.list.getFocus()[0]&&(e=Aa.Last),e===Aa.Second&&this.list.length<2&&(e=Aa.First),e){case Aa.First:this.list.focusFirst();break;case Aa.Second:this.list.focusNth(1);break;case Aa.Last:this.list.focusLast();break;case Aa.Next:this.list.focusNext();break;case Aa.Previous:this.list.focusPrevious();break;case Aa.NextPage:this.list.focusNextPage();break;case Aa.PreviousPage:this.list.focusPreviousPage()}const t=this.list.getFocus()[0];"number"==typeof t&&this.list.reveal(t)}clearFocus(){this.list.setFocus([])}domFocus(){this.list.domFocus()}layout(e){this.list.getHTMLElement().style.maxHeight=e?`calc(${44*Math.floor(e/44)}px)`:"",this.list.layout()}filter(e){if(!(this.sortByLabel||this.matchOnLabel||this.matchOnDescription||this.matchOnDetail))return this.list.layout(),!1;if((e=e.trim())&&(this.matchOnLabel||this.matchOnDescription||this.matchOnDetail)){let t;this.elements.forEach((i=>{const n=this.matchOnLabel?(0,Ne.f6)((0,$s.Gt)(e,(0,$s.Ho)(i.saneLabel))):void 0,o=this.matchOnDescription?(0,Ne.f6)((0,$s.Gt)(e,(0,$s.Ho)(i.saneDescription||""))):void 0,s=this.matchOnDetail?(0,Ne.f6)((0,$s.Gt)(e,(0,$s.Ho)(i.saneDetail||""))):void 0,r=this.matchOnMeta?(0,Ne.f6)((0,$s.Gt)(e,(0,$s.Ho)(i.saneMeta||""))):void 0;if(n||o||s||r?(i.labelHighlights=n,i.descriptionHighlights=o,i.detailHighlights=s,i.hidden=!1):(i.labelHighlights=void 0,i.descriptionHighlights=void 0,i.detailHighlights=void 0,i.hidden=!i.item.alwaysShow),i.separator=void 0,!this.sortByLabel){const e=i.index&&this.inputElements[i.index-1];t=e&&"separator"===e.type?e:t,t&&!i.hidden&&(i.separator=t,t=void 0)}}))}else this.elements.forEach((e=>{e.labelHighlights=void 0,e.descriptionHighlights=void 0,e.detailHighlights=void 0,e.hidden=!1;const t=e.index&&this.inputElements[e.index-1];e.separator=t&&"separator"===t.type?t:void 0}));const t=this.elements.filter((e=>!e.hidden));if(this.sortByLabel&&e){const i=e.toLowerCase();t.sort(((e,t)=>function(e,t,i){const n=e.labelHighlights||[],o=t.labelHighlights||[];if(n.length&&!o.length)return-1;if(!n.length&&o.length)return 1;if(0===n.length&&0===o.length)return 0;return ka(e.saneLabel,t.saneLabel,i)}(e,t,i)))}return this.elementsToIndexes=t.reduce(((e,t,i)=>(e.set(t.item,i),e)),new Map),this.list.splice(0,this.list.length,t),this.list.setFocus([]),this.list.layout(),this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedVisibleCount.fire(t.length),!0}toggleCheckbox(){try{this._fireCheckedEvents=!1;const e=this.list.getFocusedElements(),t=this.allVisibleChecked(e);for(const i of e)i.checked=!t}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}display(e){this.container.style.display=e?"":"none"}isDisplayed(){return"none"!==this.container.style.display}dispose(){this.elementDisposables=(0,ue.B9)(this.elementDisposables),this.disposables=(0,ue.B9)(this.disposables)}fireCheckedEvents(){this._fireCheckedEvents&&(this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedCheckedCount.fire(this.getCheckedCount()),this._onChangedCheckedElements.fire(this.getCheckedElements()))}fireButtonTriggered(e){this._onButtonTriggered.fire(e)}style(e){this.list.style(e)}}Na([La.H],Oa.prototype,"onDidChangeFocus",null),Na([La.H],Oa.prototype,"onDidChangeSelection",null);class Pa{getWidgetAriaLabel(){return(0,bi.N)("quickInput","Quick Input")}getAriaLabel(e){return e.saneAriaLabel}getWidgetRole(){return"listbox"}getRole(){return"option"}}var Ra=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const Fa=Q.$,Ba={iconClass:(0,vn.CM)("quick-input-back",vn.lA.arrowLeft).classNames,tooltip:(0,bi.N)("quickInput.back","Back"),handle:-1};class Va extends ue.JT{constructor(e){super(),this.ui=e,this.visible=!1,this._enabled=!0,this._busy=!1,this._ignoreFocusOut=!1,this._buttons=[],this.noValidationMessage=Va.noPromptMessage,this._severity=li.Z.Ignore,this.buttonsUpdated=!1,this.onDidTriggerButtonEmitter=this._register(new W.Q5),this.onDidHideEmitter=this._register(new W.Q5),this.onDisposeEmitter=this._register(new W.Q5),this.visibleDisposables=this._register(new ue.SL),this.onDidHide=this.onDidHideEmitter.event}get title(){return this._title}set title(e){this._title=e,this.update()}get description(){return this._description}set description(e){this._description=e,this.update()}get step(){return this._steps}set step(e){this._steps=e,this.update()}get totalSteps(){return this._totalSteps}set totalSteps(e){this._totalSteps=e,this.update()}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this.update()}get contextKey(){return this._contextKey}set contextKey(e){this._contextKey=e,this.update()}get busy(){return this._busy}set busy(e){this._busy=e,this.update()}get ignoreFocusOut(){return this._ignoreFocusOut}set ignoreFocusOut(e){const t=this._ignoreFocusOut!==e&&!Le.gn;this._ignoreFocusOut=e&&!Le.gn,t&&this.update()}get buttons(){return this._buttons}set buttons(e){this._buttons=e,this.buttonsUpdated=!0,this.update()}get validationMessage(){return this._validationMessage}set validationMessage(e){this._validationMessage=e,this.update()}get severity(){return this._severity}set severity(e){this._severity=e,this.update()}show(){this.visible||(this.visibleDisposables.add(this.ui.onDidTriggerButton((e=>{-1!==this.buttons.indexOf(e)&&this.onDidTriggerButtonEmitter.fire(e)}))),this.ui.show(this),this.visible=!0,this._lastValidationMessage=void 0,this._lastSeverity=void 0,this.buttons.length&&(this.buttonsUpdated=!0),this.update())}hide(){this.visible&&this.ui.hide()}didHide(e=ma.Jq.Other){this.visible=!1,this.visibleDisposables.clear(),this.onDidHideEmitter.fire({reason:e})}update(){if(!this.visible)return;const e=this.getTitle();e&&this.ui.title.textContent!==e?this.ui.title.textContent=e:e||"&nbsp;"===this.ui.title.innerHTML||(this.ui.title.innerText="Â ");const t=this.getDescription();if(this.ui.description1.textContent!==t&&(this.ui.description1.textContent=t),this.ui.description2.textContent!==t&&(this.ui.description2.textContent=t),this.busy&&!this.busyDelay&&(this.busyDelay=new Se._F,this.busyDelay.setIfNotSet((()=>{this.visible&&this.ui.progressBar.infinite()}),800)),!this.busy&&this.busyDelay&&(this.ui.progressBar.stop(),this.busyDelay.cancel(),this.busyDelay=void 0),this.buttonsUpdated){this.buttonsUpdated=!1,this.ui.leftActionBar.clear();const e=this.buttons.filter((e=>e===Ba));this.ui.leftActionBar.push(e.map(((e,t)=>{const i=new un.aU(`id-${t}`,"",e.iconClass||fa(e.iconPath),!0,(()=>Ra(this,void 0,void 0,(function*(){this.onDidTriggerButtonEmitter.fire(e)}))));return i.tooltip=e.tooltip||"",i})),{icon:!0,label:!1}),this.ui.rightActionBar.clear();const t=this.buttons.filter((e=>e!==Ba));this.ui.rightActionBar.push(t.map(((e,t)=>{const i=new un.aU(`id-${t}`,"",e.iconClass||fa(e.iconPath),!0,(()=>Ra(this,void 0,void 0,(function*(){this.onDidTriggerButtonEmitter.fire(e)}))));return i.tooltip=e.tooltip||"",i})),{icon:!0,label:!1})}this.ui.ignoreFocusOut=this.ignoreFocusOut,this.ui.setEnabled(this.enabled),this.ui.setContextKey(this.contextKey);const i=this.validationMessage||this.noValidationMessage;this._lastValidationMessage!==i&&(this._lastValidationMessage=i,Q.mc(this.ui.message,...(0,ia.T)(i))),this._lastSeverity!==this.severity&&(this._lastSeverity=this.severity,this.showMessageDecoration(this.severity))}getTitle(){return this.title&&this.step?`${this.title} (${this.getSteps()})`:this.title?this.title:this.step?this.getSteps():""}getDescription(){return this.description||""}getSteps(){return this.step&&this.totalSteps?(0,bi.N)("quickInput.steps","{0}/{1}",this.step,this.totalSteps):this.step?String(this.step):""}showMessageDecoration(e){if(this.ui.inputBox.showDecoration(e),e!==li.Z.Ignore){const t=this.ui.inputBox.stylesForType(e);this.ui.message.style.color=t.foreground?`${t.foreground}`:"",this.ui.message.style.backgroundColor=t.background?`${t.background}`:"",this.ui.message.style.border=t.border?`1px solid ${t.border}`:"",this.ui.message.style.paddingBottom="4px"}else this.ui.message.style.color="",this.ui.message.style.backgroundColor="",this.ui.message.style.border="",this.ui.message.style.paddingBottom=""}dispose(){this.hide(),this.onDisposeEmitter.fire(),super.dispose()}}Va.noPromptMessage=(0,bi.N)("inputModeEntry","Press 'Enter' to confirm your input or 'Escape' to cancel");class Wa extends Va{constructor(){super(...arguments),this._value="",this.onDidChangeValueEmitter=this._register(new W.Q5),this.onWillAcceptEmitter=this._register(new W.Q5),this.onDidAcceptEmitter=this._register(new W.Q5),this.onDidCustomEmitter=this._register(new W.Q5),this._items=[],this.itemsUpdated=!1,this._canSelectMany=!1,this._canAcceptInBackground=!1,this._matchOnDescription=!1,this._matchOnDetail=!1,this._matchOnLabel=!0,this._sortByLabel=!0,this._autoFocusOnList=!0,this._keepScrollPosition=!1,this._itemActivation=this.ui.isScreenReaderOptimized()?ma.jG.NONE:ma.jG.FIRST,this._activeItems=[],this.activeItemsUpdated=!1,this.activeItemsToConfirm=[],this.onDidChangeActiveEmitter=this._register(new W.Q5),this._selectedItems=[],this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=[],this.onDidChangeSelectionEmitter=this._register(new W.Q5),this.onDidTriggerItemButtonEmitter=this._register(new W.Q5),this.valueSelectionUpdated=!0,this._ok="default",this._customButton=!1,this.filterValue=e=>e,this.onDidChangeValue=this.onDidChangeValueEmitter.event,this.onWillAccept=this.onWillAcceptEmitter.event,this.onDidAccept=this.onDidAcceptEmitter.event,this.onDidChangeActive=this.onDidChangeActiveEmitter.event,this.onDidChangeSelection=this.onDidChangeSelectionEmitter.event,this.onDidTriggerItemButton=this.onDidTriggerItemButtonEmitter.event}get quickNavigate(){return this._quickNavigate}set quickNavigate(e){this._quickNavigate=e,this.update()}get value(){return this._value}set value(e){this._value!==e&&(this._value=e||"",this.update(),this.onDidChangeValueEmitter.fire(this._value))}set ariaLabel(e){this._ariaLabel=e,this.update()}get ariaLabel(){return this._ariaLabel}get placeholder(){return this._placeholder}set placeholder(e){this._placeholder=e,this.update()}get items(){return this._items}get scrollTop(){return this.ui.list.scrollTop}set scrollTop(e){this.ui.list.scrollTop=e}set items(e){this._items=e,this.itemsUpdated=!0,this.update()}get canSelectMany(){return this._canSelectMany}set canSelectMany(e){this._canSelectMany=e,this.update()}get canAcceptInBackground(){return this._canAcceptInBackground}set canAcceptInBackground(e){this._canAcceptInBackground=e}get matchOnDescription(){return this._matchOnDescription}set matchOnDescription(e){this._matchOnDescription=e,this.update()}get matchOnDetail(){return this._matchOnDetail}set matchOnDetail(e){this._matchOnDetail=e,this.update()}get matchOnLabel(){return this._matchOnLabel}set matchOnLabel(e){this._matchOnLabel=e,this.update()}get sortByLabel(){return this._sortByLabel}set sortByLabel(e){this._sortByLabel=e,this.update()}get autoFocusOnList(){return this._autoFocusOnList}set autoFocusOnList(e){this._autoFocusOnList=e,this.update()}get keepScrollPosition(){return this._keepScrollPosition}set keepScrollPosition(e){this._keepScrollPosition=e}get itemActivation(){return this._itemActivation}set itemActivation(e){this._itemActivation=e}get activeItems(){return this._activeItems}set activeItems(e){this._activeItems=e,this.activeItemsUpdated=!0,this.update()}get selectedItems(){return this._selectedItems}set selectedItems(e){this._selectedItems=e,this.selectedItemsUpdated=!0,this.update()}get keyMods(){return this._quickNavigate?ma.X5:this.ui.keyMods}set valueSelection(e){this._valueSelection=e,this.valueSelectionUpdated=!0,this.update()}get customButton(){return this._customButton}set customButton(e){this._customButton=e,this.update()}get customLabel(){return this._customButtonLabel}set customLabel(e){this._customButtonLabel=e,this.update()}get customHover(){return this._customButtonHover}set customHover(e){this._customButtonHover=e,this.update()}get ok(){return this._ok}set ok(e){this._ok=e,this.update()}get hideInput(){return!!this._hideInput}set hideInput(e){this._hideInput=e,this.update()}trySelectFirst(){this.autoFocusOnList&&(this.canSelectMany||this.ui.list.focus(Aa.First))}show(){this.visible||(this.visibleDisposables.add(this.ui.inputBox.onDidChange((e=>{if(e===this.value)return;this._value=e;this.ui.list.filter(this.filterValue(this.ui.inputBox.value))&&this.trySelectFirst(),this.onDidChangeValueEmitter.fire(e)}))),this.visibleDisposables.add(this.ui.inputBox.onMouseDown((e=>{this.autoFocusOnList||this.ui.list.clearFocus()}))),this.visibleDisposables.add((this._hideInput?this.ui.list:this.ui.inputBox).onKeyDown((e=>{switch(e.keyCode){case 18:this.ui.list.focus(Aa.Next),this.canSelectMany&&this.ui.list.domFocus(),Q.zB.stop(e,!0);break;case 16:this.ui.list.getFocusedElements().length?this.ui.list.focus(Aa.Previous):this.ui.list.focus(Aa.Last),this.canSelectMany&&this.ui.list.domFocus(),Q.zB.stop(e,!0);break;case 12:this.ui.list.focus(Aa.NextPage),this.canSelectMany&&this.ui.list.domFocus(),Q.zB.stop(e,!0);break;case 11:this.ui.list.focus(Aa.PreviousPage),this.canSelectMany&&this.ui.list.domFocus(),Q.zB.stop(e,!0);break;case 17:if(!this._canAcceptInBackground)return;if(!this.ui.inputBox.isSelectionAtEnd())return;this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.handleAccept(!0));break;case 14:!e.ctrlKey&&!e.metaKey||e.shiftKey||e.altKey||(this.ui.list.focus(Aa.First),Q.zB.stop(e,!0));break;case 13:!e.ctrlKey&&!e.metaKey||e.shiftKey||e.altKey||(this.ui.list.focus(Aa.Last),Q.zB.stop(e,!0))}}))),this.visibleDisposables.add(this.ui.onDidAccept((()=>{this.canSelectMany?this.ui.list.getCheckedElements().length||(this._selectedItems=[],this.onDidChangeSelectionEmitter.fire(this.selectedItems)):this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems)),this.handleAccept(!1)}))),this.visibleDisposables.add(this.ui.onDidCustom((()=>{this.onDidCustomEmitter.fire()}))),this.visibleDisposables.add(this.ui.list.onDidChangeFocus((e=>{this.activeItemsUpdated||this.activeItemsToConfirm!==this._activeItems&&(0,bt.fS)(e,this._activeItems,((e,t)=>e===t))||(this._activeItems=e,this.onDidChangeActiveEmitter.fire(e))}))),this.visibleDisposables.add(this.ui.list.onDidChangeSelection((({items:e,event:t})=>{this.canSelectMany?e.length&&this.ui.list.setSelectedElements([]):this.selectedItemsToConfirm!==this._selectedItems&&(0,bt.fS)(e,this._selectedItems,((e,t)=>e===t))||(this._selectedItems=e,this.onDidChangeSelectionEmitter.fire(e),e.length&&this.handleAccept(t instanceof MouseEvent&&1===t.button))}))),this.visibleDisposables.add(this.ui.list.onChangedCheckedElements((e=>{this.canSelectMany&&(this.selectedItemsToConfirm!==this._selectedItems&&(0,bt.fS)(e,this._selectedItems,((e,t)=>e===t))||(this._selectedItems=e,this.onDidChangeSelectionEmitter.fire(e)))}))),this.visibleDisposables.add(this.ui.list.onButtonTriggered((e=>this.onDidTriggerItemButtonEmitter.fire(e)))),this.visibleDisposables.add(this.registerQuickNavigation()),this.valueSelectionUpdated=!0),super.show()}handleAccept(e){let t=!1;this.onWillAcceptEmitter.fire({veto:()=>t=!0}),t||this.onDidAcceptEmitter.fire({inBackground:e})}registerQuickNavigation(){return Q.nm(this.ui.container,Q.tw.KEY_UP,(e=>{if(this.canSelectMany||!this._quickNavigate)return;const t=new ri.y(e),i=t.keyCode;this._quickNavigate.keybindings.some((e=>{const[n,o]=e.getParts();return!o&&(n.shiftKey&&4===i?!(t.ctrlKey||t.altKey||t.metaKey):!(!n.altKey||6!==i)||(!(!n.ctrlKey||5!==i)||!(!n.metaKey||57!==i)))}))&&(this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.handleAccept(!1)),this._quickNavigate=void 0)}))}update(){if(!this.visible)return;const e=this.keepScrollPosition?this.scrollTop:0,t=!!this._hideInput&&this._items.length>0;this.ui.container.classList.toggle("hidden-input",t&&!this.description);const i={title:!!this.title||!!this.step||!!this.buttons.length,description:!!this.description,checkAll:this.canSelectMany&&!this._hideCheckAll,checkBox:this.canSelectMany,inputBox:!t,progressBar:!t,visibleCount:!0,count:this.canSelectMany,ok:"default"===this.ok?this.canSelectMany:this.ok,list:!0,message:!!this.validationMessage,customButton:this.customButton};this.ui.setVisibilities(i),super.update(),this.ui.inputBox.value!==this.value&&(this.ui.inputBox.value=this.value),this.valueSelectionUpdated&&(this.valueSelectionUpdated=!1,this.ui.inputBox.select(this._valueSelection&&{start:this._valueSelection[0],end:this._valueSelection[1]})),this.ui.inputBox.placeholder!==(this.placeholder||"")&&(this.ui.inputBox.placeholder=this.placeholder||"");const n=this.ariaLabel||this.placeholder||Wa.DEFAULT_ARIA_LABEL;if(this.ui.inputBox.ariaLabel!==n&&(this.ui.inputBox.ariaLabel=n),this.ui.list.matchOnDescription=this.matchOnDescription,this.ui.list.matchOnDetail=this.matchOnDetail,this.ui.list.matchOnLabel=this.matchOnLabel,this.ui.list.sortByLabel=this.sortByLabel,this.itemsUpdated)switch(this.itemsUpdated=!1,this.ui.list.setElements(this.items),this.ui.list.filter(this.filterValue(this.ui.inputBox.value)),this.ui.checkAll.checked=this.ui.list.getAllVisibleChecked(),this.ui.visibleCount.setCount(this.ui.list.getVisibleCount()),this.ui.count.setCount(this.ui.list.getCheckedCount()),this._itemActivation){case ma.jG.NONE:this._itemActivation=ma.jG.FIRST;break;case ma.jG.SECOND:this.ui.list.focus(Aa.Second),this._itemActivation=ma.jG.FIRST;break;case ma.jG.LAST:this.ui.list.focus(Aa.Last),this._itemActivation=ma.jG.FIRST;break;default:this.trySelectFirst()}this.ui.container.classList.contains("show-checkboxes")!==!!this.canSelectMany&&(this.canSelectMany?this.ui.list.clearFocus():this.trySelectFirst()),this.activeItemsUpdated&&(this.activeItemsUpdated=!1,this.activeItemsToConfirm=this._activeItems,this.ui.list.setFocusedElements(this.activeItems),this.activeItemsToConfirm===this._activeItems&&(this.activeItemsToConfirm=null)),this.selectedItemsUpdated&&(this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=this._selectedItems,this.canSelectMany?this.ui.list.setCheckedElements(this.selectedItems):this.ui.list.setSelectedElements(this.selectedItems),this.selectedItemsToConfirm===this._selectedItems&&(this.selectedItemsToConfirm=null)),this.ui.customButton.label=this.customLabel||"",this.ui.customButton.element.title=this.customHover||"",this.ui.setComboboxAccessibility(!0),i.inputBox||(this.ui.list.domFocus(),this.canSelectMany&&this.ui.list.focus(Aa.First)),this.keepScrollPosition&&(this.scrollTop=e)}}Wa.DEFAULT_ARIA_LABEL=(0,bi.N)("quickInputBox.ariaLabel","Type to narrow down results.");class Ha extends ue.JT{constructor(e){super(),this.options=e,this.comboboxAccessibility=!1,this.enabled=!0,this.onDidAcceptEmitter=this._register(new W.Q5),this.onDidCustomEmitter=this._register(new W.Q5),this.onDidTriggerButtonEmitter=this._register(new W.Q5),this.keyMods={ctrlCmd:!1,alt:!1},this.controller=null,this.onShowEmitter=this._register(new W.Q5),this.onShow=this.onShowEmitter.event,this.onHideEmitter=this._register(new W.Q5),this.onHide=this.onHideEmitter.event,this.idPrefix=e.idPrefix,this.parentElement=e.container,this.styles=e.styles,this.registerKeyModsListeners()}registerKeyModsListeners(){const e=e=>{this.keyMods.ctrlCmd=e.ctrlKey||e.metaKey,this.keyMods.alt=e.altKey};this._register(Q.nm(window,Q.tw.KEY_DOWN,e,!0)),this._register(Q.nm(window,Q.tw.KEY_UP,e,!0)),this._register(Q.nm(window,Q.tw.MOUSE_DOWN,e,!0))}getUI(){if(this.ui)return this.ui;const e=Q.R3(this.parentElement,Fa(".quick-input-widget.show-file-icons"));e.tabIndex=-1,e.style.display="none";const t=Q.dS(e),i=Q.R3(e,Fa(".quick-input-titlebar")),n=this._register(new dn.o(i));n.domNode.classList.add("quick-input-left-action-bar");const o=Q.R3(i,Fa(".quick-input-title")),s=this._register(new dn.o(i));s.domNode.classList.add("quick-input-right-action-bar");const r=Q.R3(e,Fa(".quick-input-description")),a=Q.R3(e,Fa(".quick-input-header")),l=Q.R3(a,Fa("input.quick-input-check-all"));l.type="checkbox",this._register(Q.mu(l,Q.tw.CHANGE,(e=>{const t=l.checked;C.setAllVisibleChecked(t)}))),this._register(Q.nm(l,Q.tw.CLICK,(e=>{(e.x||e.y)&&u.setFocus()})));const c=Q.R3(a,Fa(".quick-input-description")),d=Q.R3(a,Fa(".quick-input-and-message")),h=Q.R3(d,Fa(".quick-input-filter")),u=this._register(new ba(h));u.setAttribute("aria-describedby",`${this.idPrefix}message`);const g=Q.R3(h,Fa(".quick-input-visible-count"));g.setAttribute("aria-live","polite"),g.setAttribute("aria-atomic","true");const p=new sa.Z(g,{countFormat:(0,bi.N)({key:"quickInput.visibleCount",comment:["This tells the user how many items are shown in a list of items to select from. The items can be anything. Currently not visible, but read by screen readers."]},"{0} Results")}),f=Q.R3(h,Fa(".quick-input-count"));f.setAttribute("aria-live","polite");const m=new sa.Z(f,{countFormat:(0,bi.N)({key:"quickInput.countSelected",comment:["This tells the user how many items are selected in a list of items to select from. The items can be anything."]},"{0} Selected")}),v=Q.R3(a,Fa(".quick-input-action")),_=new oa(v);_.label=(0,bi.N)("ok","OK"),this._register(_.onDidClick((e=>{this.onDidAcceptEmitter.fire()})));const b=Q.R3(a,Fa(".quick-input-action")),w=new oa(b);w.label=(0,bi.N)("custom","è‡ªå®šä¹‰"),this._register(w.onDidClick((e=>{this.onDidCustomEmitter.fire()})));const y=Q.R3(d,Fa(`#${this.idPrefix}message.quick-input-message`)),C=this._register(new Oa(e,this.idPrefix+"list",this.options));this._register(C.onChangedAllVisibleChecked((e=>{l.checked=e}))),this._register(C.onChangedVisibleCount((e=>{p.setCount(e)}))),this._register(C.onChangedCheckedCount((e=>{m.setCount(e)}))),this._register(C.onLeave((()=>{setTimeout((()=>{u.setFocus(),this.controller instanceof Wa&&this.controller.canSelectMany&&C.clearFocus()}),0)}))),this._register(C.onDidChangeFocus((()=>{this.comboboxAccessibility&&this.getUI().inputBox.setAttribute("aria-activedescendant",this.getUI().list.getActiveDescendant()||"")})));const x=new ha(e);x.getContainer().classList.add("quick-input-progress");const S=Q.go(e);return this._register(S),this._register(Q.nm(e,Q.tw.FOCUS,(e=>{this.previousFocusElement=e.relatedTarget instanceof HTMLElement?e.relatedTarget:void 0}),!0)),this._register(S.onDidBlur((()=>{this.getUI().ignoreFocusOut||this.options.ignoreFocusOut()||this.hide(ma.Jq.Blur),this.previousFocusElement=void 0}))),this._register(Q.nm(e,Q.tw.FOCUS,(e=>{u.setFocus()}))),this._register(Q.nm(e,Q.tw.KEY_DOWN,(t=>{const i=new ri.y(t);switch(i.keyCode){case 3:Q.zB.stop(t,!0),this.onDidAcceptEmitter.fire();break;case 9:Q.zB.stop(t,!0),this.hide(ma.Jq.Gesture);break;case 2:if(!i.altKey&&!i.ctrlKey&&!i.metaKey){const n=[".action-label.codicon"];e.classList.contains("show-checkboxes")?n.push("input"):n.push("input[type=text]"),this.getUI().list.isDisplayed()&&n.push(".monaco-list");const o=e.querySelectorAll(n.join(", "));i.shiftKey&&i.target===o[0]?(Q.zB.stop(t,!0),o[o.length-1].focus()):i.shiftKey||i.target!==o[o.length-1]||(Q.zB.stop(t,!0),o[0].focus())}}}))),this.ui={container:e,styleSheet:t,leftActionBar:n,titleBar:i,title:o,description1:r,description2:c,rightActionBar:s,checkAll:l,filterContainer:h,inputBox:u,visibleCountContainer:g,visibleCount:p,countContainer:f,count:m,okContainer:v,ok:_,message:y,customButtonContainer:b,customButton:w,list:C,progressBar:x,onDidAccept:this.onDidAcceptEmitter.event,onDidCustom:this.onDidCustomEmitter.event,onDidTriggerButton:this.onDidTriggerButtonEmitter.event,ignoreFocusOut:!1,keyMods:this.keyMods,isScreenReaderOptimized:()=>this.options.isScreenReaderOptimized(),show:e=>this.show(e),hide:()=>this.hide(),setVisibilities:e=>this.setVisibilities(e),setComboboxAccessibility:e=>this.setComboboxAccessibility(e),setEnabled:e=>this.setEnabled(e),setContextKey:e=>this.options.setContextKey(e)},this.updateStyles(),this.ui}pick(e,t={},i=V.T.None){return new Promise(((n,o)=>{let s=e=>{s=n,t.onKeyMods&&t.onKeyMods(r.keyMods),n(e)};if(i.isCancellationRequested)return void s(void 0);const r=this.createQuickPick();let a;const l=[r,r.onDidAccept((()=>{if(r.canSelectMany)s(r.selectedItems.slice()),r.hide();else{const e=r.activeItems[0];e&&(s(e),r.hide())}})),r.onDidChangeActive((e=>{const i=e[0];i&&t.onDidFocus&&t.onDidFocus(i)})),r.onDidChangeSelection((e=>{if(!r.canSelectMany){const t=e[0];t&&(s(t),r.hide())}})),r.onDidTriggerItemButton((e=>t.onDidTriggerItemButton&&t.onDidTriggerItemButton(Object.assign(Object.assign({},e),{removeItem:()=>{const t=r.items.indexOf(e.item);if(-1!==t){const e=r.items.slice(),i=e.splice(t,1),n=r.activeItems.filter((e=>e!==i[0])),o=r.keepScrollPosition;r.keepScrollPosition=!0,r.items=e,n&&(r.activeItems=n),r.keepScrollPosition=o}}})))),r.onDidChangeValue((e=>{!a||e||1===r.activeItems.length&&r.activeItems[0]===a||(r.activeItems=[a])})),i.onCancellationRequested((()=>{r.hide()})),r.onDidHide((()=>{(0,ue.B9)(l),s(void 0)}))];r.title=t.title,r.canSelectMany=!!t.canPickMany,r.placeholder=t.placeHolder,r.ignoreFocusOut=!!t.ignoreFocusLost,r.matchOnDescription=!!t.matchOnDescription,r.matchOnDetail=!!t.matchOnDetail,r.matchOnLabel=void 0===t.matchOnLabel||t.matchOnLabel,r.autoFocusOnList=void 0===t.autoFocusOnList||t.autoFocusOnList,r.quickNavigate=t.quickNavigate,r.contextKey=t.contextKey,r.busy=!0,Promise.all([e,t.activeItem]).then((([e,t])=>{a=t,r.busy=!1,r.items=e,r.canSelectMany&&(r.selectedItems=e.filter((e=>"separator"!==e.type&&e.picked))),a&&(r.activeItems=[a])})),r.show(),Promise.resolve(e).then(void 0,(e=>{o(e),r.hide()}))}))}createQuickPick(){const e=this.getUI();return new Wa(e)}show(e){const t=this.getUI();this.onShowEmitter.fire();const i=this.controller;this.controller=e,i&&i.didHide(),this.setEnabled(!0),t.leftActionBar.clear(),t.title.textContent="",t.description1.textContent="",t.description2.textContent="",t.rightActionBar.clear(),t.checkAll.checked=!1,t.inputBox.placeholder="",t.inputBox.password=!1,t.inputBox.showDecoration(li.Z.Ignore),t.visibleCount.setCount(0),t.count.setCount(0),Q.mc(t.message),t.progressBar.stop(),t.list.setElements([]),t.list.matchOnDescription=!1,t.list.matchOnDetail=!1,t.list.matchOnLabel=!0,t.list.sortByLabel=!0,t.ignoreFocusOut=!1,this.setComboboxAccessibility(!1),t.inputBox.ariaLabel="";const n=this.options.backKeybindingLabel();Ba.tooltip=n?(0,bi.N)("quickInput.backWithKeybinding","Back ({0})",n):(0,bi.N)("quickInput.back","Back"),t.container.style.display="",this.updateLayout(),t.inputBox.setFocus()}setVisibilities(e){const t=this.getUI();t.title.style.display=e.title?"":"none",t.description1.style.display=e.description&&(e.inputBox||e.checkAll)?"":"none",t.description2.style.display=!e.description||e.inputBox||e.checkAll?"none":"",t.checkAll.style.display=e.checkAll?"":"none",t.filterContainer.style.display=e.inputBox?"":"none",t.visibleCountContainer.style.display=e.visibleCount?"":"none",t.countContainer.style.display=e.count?"":"none",t.okContainer.style.display=e.ok?"":"none",t.customButtonContainer.style.display=e.customButton?"":"none",t.message.style.display=e.message?"":"none",t.progressBar.getContainer().style.display=e.progressBar?"":"none",t.list.display(!!e.list),t.container.classList[e.checkBox?"add":"remove"]("show-checkboxes"),this.updateLayout()}setComboboxAccessibility(e){if(e!==this.comboboxAccessibility){const t=this.getUI();this.comboboxAccessibility=e,this.comboboxAccessibility?(t.inputBox.setAttribute("role","combobox"),t.inputBox.setAttribute("aria-haspopup","true"),t.inputBox.setAttribute("aria-autocomplete","list"),t.inputBox.setAttribute("aria-activedescendant",t.list.getActiveDescendant()||"")):(t.inputBox.removeAttribute("role"),t.inputBox.removeAttribute("aria-haspopup"),t.inputBox.removeAttribute("aria-autocomplete"),t.inputBox.removeAttribute("aria-activedescendant"))}}setEnabled(e){if(e!==this.enabled){this.enabled=e;for(const t of this.getUI().leftActionBar.viewItems)t.getAction().enabled=e;for(const t of this.getUI().rightActionBar.viewItems)t.getAction().enabled=e;this.getUI().checkAll.disabled=!e,this.getUI().ok.enabled=e,this.getUI().list.enabled=e}}hide(e){var t;const i=this.controller;if(i){const n=!(null===(t=this.ui)||void 0===t?void 0:t.container.contains(document.activeElement));this.controller=null,this.onHideEmitter.fire(),this.getUI().container.style.display="none",n||(this.previousFocusElement&&this.previousFocusElement.offsetParent?(this.previousFocusElement.focus(),this.previousFocusElement=void 0):this.options.returnFocus()),i.didHide(e)}}layout(e,t){this.dimension=e,this.titleBarOffset=t,this.updateLayout()}updateLayout(){if(this.ui){this.ui.container.style.top=`${this.titleBarOffset}px`;const e=this.ui.container.style,t=Math.min(.62*this.dimension.width,Ha.MAX_WIDTH);e.width=t+"px",e.marginLeft="-"+t/2+"px",this.ui.inputBox.layout(),this.ui.list.layout(this.dimension&&.4*this.dimension.height)}}applyStyles(e){this.styles=e,this.updateStyles()}updateStyles(){if(this.ui){const{quickInputTitleBackground:e,quickInputBackground:t,quickInputForeground:i,contrastBorder:n,widgetShadow:o}=this.styles.widget;this.ui.titleBar.style.backgroundColor=e?e.toString():"",this.ui.container.style.backgroundColor=t?t.toString():"",this.ui.container.style.color=i?i.toString():"",this.ui.container.style.border=n?`1px solid ${n}`:"",this.ui.container.style.boxShadow=o?`0 0 8px 2px ${o}`:"",this.ui.inputBox.style(this.styles.inputBox),this.ui.count.style(this.styles.countBadge),this.ui.ok.style(this.styles.button),this.ui.customButton.style(this.styles.button),this.ui.progressBar.style(this.styles.progressBar),this.ui.list.style(this.styles.list);const s=[];this.styles.list.pickerGroupBorder&&s.push(`.quick-input-list .quick-input-list-entry { border-top-color:  ${this.styles.list.pickerGroupBorder}; }`),this.styles.list.pickerGroupForeground&&s.push(`.quick-input-list .quick-input-list-separator { color:  ${this.styles.list.pickerGroupForeground}; }`),(this.styles.keybindingLabel.keybindingLabelBackground||this.styles.keybindingLabel.keybindingLabelBorder||this.styles.keybindingLabel.keybindingLabelBottomBorder||this.styles.keybindingLabel.keybindingLabelShadow||this.styles.keybindingLabel.keybindingLabelForeground)&&(s.push(".quick-input-list .monaco-keybinding > .monaco-keybinding-key {"),this.styles.keybindingLabel.keybindingLabelBackground&&s.push(`background-color: ${this.styles.keybindingLabel.keybindingLabelBackground};`),this.styles.keybindingLabel.keybindingLabelBorder&&s.push(`border-color: ${this.styles.keybindingLabel.keybindingLabelBorder};`),this.styles.keybindingLabel.keybindingLabelBottomBorder&&s.push(`border-bottom-color: ${this.styles.keybindingLabel.keybindingLabelBottomBorder};`),this.styles.keybindingLabel.keybindingLabelShadow&&s.push(`box-shadow: inset 0 -1px 0 ${this.styles.keybindingLabel.keybindingLabelShadow};`),this.styles.keybindingLabel.keybindingLabelForeground&&s.push(`color: ${this.styles.keybindingLabel.keybindingLabelForeground};`),s.push("}"));const r=s.join("\n");r!==this.ui.styleSheet.textContent&&(this.ui.styleSheet.textContent=r)}}}Ha.MAX_WIDTH=600;var za=i(88289),ja=i(90725),Ua=i(41157),$a=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Ka=function(e,t){return function(i,n){t(i,n,e)}};let qa=class extends ue.JT{constructor(e,t){super(),this.quickInputService=e,this.instantiationService=t,this.registry=Uo.B.as(ja.IP.Quickaccess),this.mapProviderToDescriptor=new Map,this.lastAcceptedPickerValues=new Map,this.visibleQuickAccess=void 0}show(e="",t){this.doShowOrPick(e,!1,t)}doShowOrPick(e,t,i){var n;const[o,s]=this.getOrInstantiateProvider(e),r=this.visibleQuickAccess,a=null==r?void 0:r.descriptor;if(r&&s&&a===s)return e===s.prefix||(null==i?void 0:i.preserveValue)||(r.picker.value=e),void this.adjustValueSelection(r.picker,s,i);if(s&&!(null==i?void 0:i.preserveValue)){let t;if(r&&a&&a!==s){const e=r.value.substr(a.prefix.length);e&&(t=`${s.prefix}${e}`)}if(!t){const e=null==o?void 0:o.defaultFilterValue;e===ja.Ry.LAST?t=this.lastAcceptedPickerValues.get(s):"string"==typeof e&&(t=`${s.prefix}${e}`)}"string"==typeof t&&(e=t)}const l=new ue.SL,c=l.add(this.quickInputService.createQuickPick());let d,h;c.value=e,this.adjustValueSelection(c,s,i),c.placeholder=null==s?void 0:s.placeholder,c.quickNavigate=null==i?void 0:i.quickNavigateConfiguration,c.hideInput=!!c.quickNavigate&&!r,("number"==typeof(null==i?void 0:i.itemActivation)||(null==i?void 0:i.quickNavigateConfiguration))&&(c.itemActivation=null!==(n=null==i?void 0:i.itemActivation)&&void 0!==n?n:Ua.jG.SECOND),c.contextKey=null==s?void 0:s.contextKey,c.filterValue=e=>e.substring(s?s.prefix.length:0),(null==s?void 0:s.placeholder)&&(c.ariaLabel=null==s?void 0:s.placeholder),t&&(d=new Promise((e=>h=e)),l.add((0,za.I)(c.onWillAccept)((e=>{e.veto(),c.hide()})))),l.add(this.registerPickerListeners(c,o,s,e));const u=l.add(new V.A);return o&&l.add(o.provide(c,u.token)),(0,za.I)(c.onDidHide)((()=>{0===c.selectedItems.length&&u.cancel(),l.dispose(),null==h||h(c.selectedItems)})),c.show(),t?d:void 0}adjustValueSelection(e,t,i){var n;let o;o=(null==i?void 0:i.preserveValue)?[e.value.length,e.value.length]:[null!==(n=null==t?void 0:t.prefix.length)&&void 0!==n?n:0,e.value.length],e.valueSelection=o}registerPickerListeners(e,t,i,n){const o=new ue.SL,s=this.visibleQuickAccess={picker:e,descriptor:i,value:n};return o.add((0,ue.OF)((()=>{s===this.visibleQuickAccess&&(this.visibleQuickAccess=void 0)}))),o.add(e.onDidChangeValue((e=>{const[i]=this.getOrInstantiateProvider(e);i!==t?this.show(e,{preserveValue:!0}):s.value=e}))),i&&o.add(e.onDidAccept((()=>{this.lastAcceptedPickerValues.set(i,e.value)}))),o}getOrInstantiateProvider(e){const t=this.registry.getQuickAccessProvider(e);if(!t)return[void 0,void 0];let i=this.mapProviderToDescriptor.get(t);return i||(i=this.instantiationService.createInstance(t.ctor),this.mapProviderToDescriptor.set(t,i)),[i,t]}};qa=$a([Ka(0,Ua.eJ),Ka(1,Pn.TG)],qa);var Za=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Ga=function(e,t){return function(i,n){t(i,n,e)}};let Ya=class extends mn.bB{constructor(e,t,i,n,o){super(i),this.instantiationService=e,this.contextKeyService=t,this.accessibilityService=n,this.layoutService=o,this.contexts=new Map}get controller(){return this._controller||(this._controller=this._register(this.createController())),this._controller}get quickAccess(){return this._quickAccess||(this._quickAccess=this._register(this.instantiationService.createInstance(qa))),this._quickAccess}createController(e=this.layoutService,t){var i,n;const o={idPrefix:"quickInput_",container:e.container,ignoreFocusOut:()=>!1,isScreenReaderOptimized:()=>this.accessibilityService.isScreenReaderOptimized(),backKeybindingLabel:()=>{},setContextKey:e=>this.setContextKey(e),returnFocus:()=>e.focus(),createList:(e,t,i,n,o)=>this.instantiationService.createInstance(br.ev,e,t,i,n,o),styles:this.computeStyles()},s=this._register(new Ha(Object.assign(Object.assign({},o),t)));return s.layout(e.dimension,null!==(n=null===(i=e.offset)||void 0===i?void 0:i.top)&&void 0!==n?n:0),this._register(e.onDidLayout((t=>{var i,n;return s.layout(t,null!==(n=null===(i=e.offset)||void 0===i?void 0:i.top)&&void 0!==n?n:0)}))),this._register(s.onShow((()=>this.resetContextKeys()))),this._register(s.onHide((()=>this.resetContextKeys()))),s}setContextKey(e){let t;e&&(t=this.contexts.get(e),t||(t=new xi.uy(e,!1).bindTo(this.contextKeyService),this.contexts.set(e,t))),t&&t.get()||(this.resetContextKeys(),t&&t.set(!0))}resetContextKeys(){this.contexts.forEach((e=>{e.get()&&e.reset()}))}pick(e,t={},i=V.T.None){return this.controller.pick(e,t,i)}createQuickPick(){return this.controller.createQuickPick()}updateStyles(){this.controller.applyStyles(this.computeStyles())}computeStyles(){return{widget:Object.assign({},(0,ir.o)(this.theme,{quickInputBackground:fn.zK,quickInputForeground:fn.tZ,quickInputTitleBackground:fn.lo,contrastBorder:fn.lR,widgetShadow:fn.rh})),inputBox:(0,ir.o)(this.theme,{inputForeground:fn.zJ,inputBackground:fn.sE,inputBorder:fn.dt,inputValidationInfoBackground:fn._l,inputValidationInfoForeground:fn.YI,inputValidationInfoBorder:fn.EP,inputValidationWarningBackground:fn.RV,inputValidationWarningForeground:fn.SU,inputValidationWarningBorder:fn.C3,inputValidationErrorBackground:fn.p,inputValidationErrorForeground:fn._t,inputValidationErrorBorder:fn.OZ}),countBadge:(0,ir.o)(this.theme,{badgeBackground:fn.g8,badgeForeground:fn.qe,badgeBorder:fn.lR}),button:(0,ir.o)(this.theme,{buttonForeground:fn.j5,buttonBackground:fn.b7,buttonHoverBackground:fn.GO,buttonBorder:fn.lR}),progressBar:(0,ir.o)(this.theme,{progressBarBackground:fn.zR}),keybindingLabel:(0,ir.o)(this.theme,{keybindingLabelBackground:fn.oQ,keybindingLabelForeground:fn.lW,keybindingLabelBorder:fn.AW,keybindingLabelBottomBorder:fn.K1,keybindingLabelShadow:fn.rh}),list:(0,ir.o)(this.theme,{listBackground:fn.zK,listInactiveFocusForeground:fn.NP,listInactiveSelectionIconForeground:fn.cb,listInactiveFocusBackground:fn.Vq,listFocusOutline:fn.xL,listInactiveFocusOutline:fn.xL,pickerGroupBorder:fn.op,pickerGroupForeground:fn.kJ})}}};Ya=Za([Ga(0,Pn.TG),Ga(1,xi.i6),Ga(2,mn.XE),Ga(3,_o.F),Ga(4,ar)],Ya);var Qa=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Xa=function(e,t){return function(i,n){t(i,n,e)}};let Ja=class extends Ya{constructor(e,t,i,n,o,s){super(t,i,n,o,s),this.host=void 0;const r=tl.get(e);this.host={_serviceBrand:void 0,get container(){return r.widget.getDomNode()},get dimension(){return e.getLayoutInfo()},get onDidLayout(){return e.onDidLayoutChange},focus:()=>e.focus()}}createController(){return super.createController(this.host)}};Ja=Qa([Xa(1,Pn.TG),Xa(2,xi.i6),Xa(3,mn.XE),Xa(4,_o.F),Xa(5,ar)],Ja);let el=class{constructor(e,t){this.instantiationService=e,this.codeEditorService=t,this.mapEditorToService=new Map}get activeService(){const e=this.codeEditorService.getFocusedCodeEditor();if(!e)throw new Error("Quick input service needs a focused editor to work.");let t=this.mapEditorToService.get(e);if(!t){const i=t=this.instantiationService.createInstance(Ja,e);this.mapEditorToService.set(e,t),(0,za.I)(e.onDidDispose)((()=>{i.dispose(),this.mapEditorToService.delete(e)}))}return t}get quickAccess(){return this.activeService.quickAccess}pick(e,t={},i=V.T.None){return this.activeService.pick(e,t,i)}createQuickPick(){return this.activeService.createQuickPick()}};el=Qa([Xa(0,Pn.TG),Xa(1,Y.$)],el);class tl{constructor(e){this.editor=e,this.widget=new il(this.editor)}static get(e){return e.getContribution(tl.ID)}dispose(){this.widget.dispose()}}tl.ID="editor.controller.quickInput";class il{constructor(e){this.codeEditor=e,this.domNode=document.createElement("div"),this.codeEditor.addOverlayWidget(this)}getId(){return il.ID}getDomNode(){return this.domNode}getPosition(){return{preference:2}}dispose(){this.codeEditor.removeOverlayWidget(this)}}var nl;il.ID="editor.contrib.quickInputWidget",(0,gn._K)(tl.ID,tl),function(e){const t=new Rn.y;class i{constructor(e,t){this._serviceId=e,this._factory=t,this._value=null}get id(){return this._serviceId}get(e){if(!this._value){if(e&&(this._value=e[this._serviceId.toString()]),this._value||(this._value=this._factory(e)),!this._value)throw new Error("Service "+this._serviceId+" is missing!");t.set(this._serviceId,this._value)}return this._value}}e.LazyStaticService=i;let n=[];function o(e,t){let o=new i(e,t);return n.push(o),o}e.init=function(e){let t=new Rn.y;for(const[e,i]of(0,Or.d)())t.set(e,i);for(let i in e)e.hasOwnProperty(i)&&t.set((0,Pn.yh)(i),e[i]);n.forEach((i=>t.set(i.id,i.get(e))));let i=new mr(t,!0);return t.set(Pn.TG,i),[t,i]},e.instantiationService=o(Pn.TG,(()=>new mr(t,!0)));const s=new qi;e.configurationService=o(gi.Ui,(()=>s)),e.resourceConfigurationService=o(_t.V,(()=>new Zi(s))),e.resourcePropertiesService=o(_t.y,(()=>new Gi(s))),e.contextService=o(Oi.ec,(()=>new Qi)),e.labelService=o(_r.e,(()=>new en)),e.telemetryService=o(Os.b,(()=>new Yi)),e.dialogService=o(hr.S,(()=>new zi)),e.notificationService=o(Ai.lT,(()=>new ji)),e.markerService=o(wr.lT,(()=>new xr)),e.modeService=o(Ce.h,(e=>new Go)),e.standaloneThemeService=o(fo.Z,(()=>new _s)),e.logService=o(wt.VZ,(()=>new wt.$V(new wt.kw))),e.undoRedoService=o(Wr.tJ,(t=>new ea(e.dialogService.get(t),e.notificationService.get(t)))),e.languageConfigurationService=o(Ke.c_,(t=>new Ke.UU(e.configurationService.get(t),e.modeService.get(t)))),e.modelService=o(vt.q,(t=>new Yo.BR(e.configurationService.get(t),e.resourcePropertiesService.get(t),e.standaloneThemeService.get(t),e.logService.get(t),e.undoRedoService.get(t),e.modeService.get(t),e.languageConfigurationService.get(t)))),e.markerDecorationsService=o(Ir.i,(t=>new Ar(e.modelService.get(t),e.markerService.get(t)))),e.contextKeyService=o(xi.i6,(t=>new Ts(e.configurationService.get(t)))),e.codeEditorService=o(Y.$,(t=>new Mo(null,e.contextKeyService.get(t),e.standaloneThemeService.get(t)))),e.editorProgressService=o(zn.e,(()=>new Hi)),e.storageService=o(Sr.Uy,(()=>new Sr.vm)),e.editorWorkerService=o(ye.p,(t=>new Lt(e.modelService.get(t),e.resourceConfigurationService.get(t),e.logService.get(t))))}(nl||(nl={}));class ol extends ue.JT{constructor(e,t){super();const[i,n]=nl.init(t);this._serviceCollection=i,this._instantiationService=n;const o=this.get(gi.Ui),s=this.get(Ai.lT),r=this.get(Os.b),a=this.get(mn.XE),l=this.get(wt.VZ),c=this.get(xi.i6);let d=(e,i)=>{let n=null;return t&&(n=t[e.toString()]),n||(n=i()),this._serviceCollection.set(e,n),n};d(_o.F,(()=>new Fr(c,o))),d(br.Lw,(()=>new br.XN(a)));let h=d(ne.H,(()=>new Ui(this._instantiationService))),u=d(vo.d,(()=>this._register(new $i(c,h,r,s,l,e)))),g=d(ar,(()=>new tn(nl.codeEditorService.get(Y.$),e)));d(Ua.eJ,(()=>new el(n,nl.codeEditorService.get(Y.$))));let p=d(Fn.u,(()=>this._register(new dr(g))));d(Hn.p,(()=>new Vr)),d(Fn.i,(()=>{const e=new rr(r,s,p,u,a);return e.configure({blockMouse:!1}),this._register(e)})),d(mo.co,(()=>new Nr(h))),d(di.vu,(()=>new Ji(nl.modelService.get(vt.q))))}get(e){let t=this._serviceCollection.get(e);if(!t)throw new Error("Missing service "+e);return t}set(e,t){this._serviceCollection.set(e,t)}has(e){return this._serviceCollection.has(e)}}function sl(e,t,i){let n=new ol(e,t),o=null;n.has(xe.S)||(o=new Wi(nl.modelService.get()),n.set(xe.S,o)),n.has(oe.v4)||n.set(oe.v4,new de(n.get(Y.$),n.get(ne.H)));let s=i(n);return o&&o.setEditor(s),s}function rl(e,t,i){return sl(e,i||{},(i=>new Vo(e,t,i,i.get(Pn.TG),i.get(Y.$),i.get(ne.H),i.get(xi.i6),i.get(vo.d),i.get(Fn.u),i.get(fo.Z),i.get(Ai.lT),i.get(gi.Ui),i.get(_o.F),i.get(vt.q),i.get(Ce.h))))}function al(e){return nl.codeEditorService.get().onCodeEditorAdd((t=>{e(t)}))}function ll(e,t,i){return sl(e,i||{},(i=>new Wo(e,t,i,i.get(Pn.TG),i.get(xi.i6),i.get(vo.d),i.get(Fn.u),i.get(ye.p),i.get(Y.$),i.get(fo.Z),i.get(Ai.lT),i.get(gi.Ui),i.get(Fn.i),i.get(zn.e),i.get(Hn.p))))}function cl(e,t){return new fe(e,t)}function dl(e,t,i){return Ho(nl.modelService.get(),nl.modeService.get(),e,t,i)}function hl(e,t){nl.modelService.get().setMode(e,nl.modeService.get().create(t))}function ul(e,t,i){e&&nl.markerService.get().changeOne(t,e.uri,i)}function gl(e){return nl.markerService.get().read(e)}function pl(e){return nl.markerService.get().onMarkerChanged(e)}function fl(e){return nl.modelService.get().getModel(e)}function ml(){return nl.modelService.get().getModels()}function vl(e){return nl.modelService.get().onModelAdded(e)}function _l(e){return nl.modelService.get().onModelRemoved(e)}function bl(e){return nl.modelService.get().onModelModeChanged((t=>{e({model:t.model,oldLanguage:t.oldModeId})}))}function wl(e){return function(e,t){return new At(e,t)}(nl.modelService.get(),e)}function yl(e,t){const i=nl.standaloneThemeService.get();return i.registerEditorContainer(e),ni.colorizeElement(i,nl.modeService.get(),e,t)}function Cl(e,t,i){return nl.standaloneThemeService.get().registerEditorContainer(document.body),ni.colorize(nl.modeService.get(),e,t,i)}function xl(e,t,i=4){return nl.standaloneThemeService.get().registerEditorContainer(document.body),ni.colorizeModelLine(e,t,i)}function Sl(e,t){nl.modeService.get().triggerMode(t);let i=function(e){let t=be.RW.get(e);return t||{getInitialState:()=>we.nO,tokenize:(t,i,n,o)=>(0,we.Ri)(e,t,n,o)}}(t),n=(0,De.uq)(e),o=[],s=i.getInitialState();for(let e=0,t=n.length;e<t;e++){let t=n[e],r=i.tokenize(t,!0,s,0);o[e]=r.tokens,s=r.endState}return o}function kl(e,t){nl.standaloneThemeService.get().defineTheme(e,t)}function Ll(e){nl.standaloneThemeService.get().setTheme(e)}function Nl(){(0,ln.P)()}function Dl(e,t){return ne.P.registerCommand({id:e,handler:t})}function Il(e,t){return"boolean"==typeof e?e:t}function El(e,t){return"string"==typeof e?e:t}function Tl(e,t=!1){t&&(e=e.map((function(e){return e.toLowerCase()})));const i=function(e){const t={};for(const i of e)t[i]=!0;return t}(e);return t?function(e){return void 0!==i[e.toLowerCase()]&&i.hasOwnProperty(e.toLowerCase())}:function(e){return void 0!==i[e]&&i.hasOwnProperty(e)}}function Ml(e,t){t=t.replace(/@@/g,"");let i,n=0;do{i=!1,t=t.replace(/@(\w+)/g,(function(n,o){i=!0;let s="";if("string"==typeof e[o])s=e[o];else{if(!(e[o]&&e[o]instanceof RegExp))throw void 0===e[o]?jt(e,"language definition does not contain attribute '"+o+"', used at: "+t):jt(e,"attribute reference '"+o+"' must be a string, used at: "+t);s=e[o].source}return Wt(s)?"":"(?:"+s+")"})),n++}while(i&&n<5);t=t.replace(/\x01/g,"@");let o=(e.ignoreCase?"i":"")+(e.unicode?"u":"");return new RegExp(t,o)}function Al(e,t,i,n){let o=-1,s=i,r=i.match(/^\$(([sS]?)(\d\d?)|#)(.*)$/);r&&(r[3]&&(o=parseInt(r[3]),r[2]&&(o+=100)),s=r[4]);let a,l="~",c=s;if(s&&0!==s.length?/^\w*$/.test(c)?l="==":(r=s.match(/^(@|!@|~|!~|==|!=)(.*)$/),r&&(l=r[1],c=r[2])):(l="!=",c=""),"~"!==l&&"!~"!==l||!/^(\w|\|)*$/.test(c))if("@"===l||"!@"===l){let i=e[c];if(!i)throw jt(e,"the @ match target '"+c+"' is not defined, in rule: "+t);if(!function(e,t){if(!t)return!1;if(!Array.isArray(t))return!1;for(const i of t)if(!e(i))return!1;return!0}((function(e){return"string"==typeof e}),i))throw jt(e,"the @ match target '"+c+"' must be an array of strings, in rule: "+t);let n=Tl(i,e.ignoreCase);a=function(e){return"@"===l?n(e):!n(e)}}else if("~"===l||"!~"===l)if(c.indexOf("$")<0){let t=Ml(e,"^"+c+"$");a=function(e){return"~"===l?t.test(e):!t.test(e)}}else a=function(t,i,n,o){return Ml(e,"^"+Ut(e,c,i,n,o)+"$").test(t)};else if(c.indexOf("$")<0){let t=Ht(e,c);a=function(e){return"=="===l?e===t:e!==t}}else{let t=Ht(e,c);a=function(i,n,o,s,r){let a=Ut(e,t,n,o,s);return"=="===l?i===a:i!==a}}else{let t=Tl(c.split("|"),e.ignoreCase);a=function(e){return"~"===l?t(e):!t(e)}}return-1===o?{name:i,value:n,test:function(e,t,i,n){return a(e,e,t,i,n)}}:{name:i,value:n,test:function(e,t,i,n){let s=function(e,t,i,n){if(n<0)return e;if(n<t.length)return t[n];if(n>=100){n-=100;let e=i.split(".");if(e.unshift(i),n<e.length)return e[n]}return null}(e,t,i,o);return a(s||"",e,t,i,n)}}}function Ol(e,t,i){if(i){if("string"==typeof i)return i;if(i.token||""===i.token){if("string"!=typeof i.token)throw jt(e,"a 'token' attribute must be of type string, in rule: "+t);{let n={token:i.token};if(i.token.indexOf("$")>=0&&(n.tokenSubst=!0),"string"==typeof i.bracket)if("@open"===i.bracket)n.bracket=1;else{if("@close"!==i.bracket)throw jt(e,"a 'bracket' attribute must be either '@open' or '@close', in rule: "+t);n.bracket=-1}if(i.next){if("string"!=typeof i.next)throw jt(e,"the next state must be a string value in rule: "+t);{let o=i.next;if(!/^(@pop|@push|@popall)$/.test(o)&&("@"===o[0]&&(o=o.substr(1)),o.indexOf("$")<0&&!function(e,t){let i=t;for(;i&&i.length>0;){if(e.stateNames[i])return!0;const t=i.lastIndexOf(".");i=t<0?null:i.substr(0,t)}return!1}(e,Ut(e,o,"",[],""))))throw jt(e,"the next state '"+i.next+"' is not defined in rule: "+t);n.next=o}}return"number"==typeof i.goBack&&(n.goBack=i.goBack),"string"==typeof i.switchTo&&(n.switchTo=i.switchTo),"string"==typeof i.log&&(n.log=i.log),"string"==typeof i.nextEmbedded&&(n.nextEmbedded=i.nextEmbedded,e.usesEmbedded=!0),n}}if(Array.isArray(i)){let n=[];for(let o=0,s=i.length;o<s;o++)n[o]=Ol(e,t,i[o]);return{group:n}}if(i.cases){let n=[];for(let o in i.cases)if(i.cases.hasOwnProperty(o)){const s=Ol(e,t,i.cases[o]);"@default"===o||"@"===o||""===o?n.push({test:void 0,value:s,name:o}):"@eos"===o?n.push({test:function(e,t,i,n){return n},value:s,name:o}):n.push(Al(e,t,o,s))}const o=e.defaultToken;return{test:function(e,t,i,s){for(const o of n){if(!o.test||o.test(e,t,i,s))return o.value}return o}}}throw jt(e,"an action must be a string, an object with a 'token' or 'cases' attribute, or an array of actions; in rule: "+t)}return{token:""}}class Pl{constructor(e){this.regex=new RegExp(""),this.action={token:""},this.matchOnlyAtLineStart=!1,this.name="",this.name=e}setRegex(e,t){let i;if("string"==typeof t)i=t;else{if(!(t instanceof RegExp))throw jt(e,"rules must start with a match string or regular expression: "+this.name);i=t.source}this.matchOnlyAtLineStart=i.length>0&&"^"===i[0],this.name=this.name+": "+i,this.regex=Ml(e,"^(?:"+(this.matchOnlyAtLineStart?i.substr(1):i)+")")}setAction(e,t){this.action=Ol(e,this.name,t)}}function Rl(e){jo.dQ.registerLanguage(e)}function Fl(){let e=[];return e=e.concat(jo.dQ.getLanguages()),e}function Bl(e){return nl.modeService.get().languageIdCodec.encodeLanguageId(e)}function Vl(e,t){let i=nl.modeService.get().onDidEncounterLanguage((n=>{n===e&&(i.dispose(),t())}));return i}function Wl(e,t){const i=nl.modeService.get().validateLanguageId(e);if(!i)throw new Error(`Cannot set configuration for unknown language ${e}`);return Ke.zu.register(i,t,100)}class Hl{constructor(e,t){this._languageId=e,this._actual=t}getInitialState(){return this._actual.getInitialState()}tokenize(e,t,i,n){if("function"==typeof this._actual.tokenize)return zl.adaptTokenize(this._languageId,this._actual,e,i,n);throw new Error("Not supported!")}tokenize2(e,t,i){let n=this._actual.tokenizeEncoded(e,i);return new K.Hi(n.tokens,n.endState)}}class zl{constructor(e,t,i,n){this._languageId=e,this._actual=t,this._modeService=i,this._standaloneThemeService=n}getInitialState(){return this._actual.getInitialState()}static _toClassicTokens(e,t,i){let n=[],o=0;for(let s=0,r=e.length;s<r;s++){const r=e[s];let a=r.startIndex;0===s?a=0:a<o&&(a=o),n[s]=new K.WU(a+i,r.scopes,t),o=a}return n}static adaptTokenize(e,t,i,n,o){let s,r=t.tokenize(i,n),a=zl._toClassicTokens(r.tokens,e,o);return s=r.endState.equals(n)?n:r.endState,new K.hG(a,s)}tokenize(e,t,i,n){return zl.adaptTokenize(this._languageId,this._actual,e,i,n)}_toBinaryTokens(e,t,i){const n=e.encodeLanguageId(this._languageId),o=this._standaloneThemeService.getColorTheme().tokenTheme;let s=[],r=0,a=0;for(let e=0,l=t.length;e<l;e++){const l=t[e],c=o.match(n,l.scopes);if(r>0&&s[r-1]===c)continue;let d=l.startIndex;0===e?d=0:d<a&&(d=a),s[r++]=d+i,s[r++]=c,a=d}let l=new Uint32Array(r);for(let e=0;e<r;e++)l[e]=s[e];return l}tokenize2(e,t,i,n){let o,s=this._actual.tokenize(e,i),r=this._toBinaryTokens(this._modeService.languageIdCodec,s.tokens,n);return o=s.endState.equals(i)?i:s.endState,new K.Hi(r,o)}}function jl(e){return e&&"function"==typeof e.then}function Ul(e){if(e){const t=[null];for(let i=1,n=e.length;i<n;i++)t[i]=Qo.Il.fromHex(e[i]);nl.standaloneThemeService.get().setColorMapOverride(t)}else nl.standaloneThemeService.get().setColorMapOverride(null)}function $l(e,t){const i=nl.modeService.get().validateLanguageId(e);if(!i)throw new Error(`Cannot set tokens provider for unknown language ${e}`);const n=e=>function(e){return"tokenizeEncoded"in e}(e)?new Hl(i,e):new zl(i,e,nl.modeService.get(),nl.standaloneThemeService.get());return jl(t)?be.RW.registerPromise(e,t.then((e=>n(e)))):be.RW.register(e,n(t))}function Kl(e,t){const i=t=>function(e,t,i,n){return new Jt(e,t,i,n)}(nl.modeService.get(),nl.standaloneThemeService.get(),e,function(e,t){if(!t||"object"!=typeof t)throw new Error("Monarch: expecting a language definition object");let i={};i.languageId=e,i.includeLF=Il(t.includeLF,!1),i.noThrow=!1,i.maxStack=100,i.start="string"==typeof t.start?t.start:null,i.ignoreCase=Il(t.ignoreCase,!1),i.unicode=Il(t.unicode,!1),i.tokenPostfix=El(t.tokenPostfix,"."+i.languageId),i.defaultToken=El(t.defaultToken,"source"),i.usesEmbedded=!1;let n=t;function o(e,s,r){for(const a of r){let r=a.include;if(r){if("string"!=typeof r)throw jt(i,"an 'include' attribute must be a string at: "+e);if("@"===r[0]&&(r=r.substr(1)),!t.tokenizer[r])throw jt(i,"include target '"+r+"' is not defined at: "+e);o(e+"."+r,s,t.tokenizer[r])}else{const t=new Pl(e);if(Array.isArray(a)&&a.length>=1&&a.length<=3)if(t.setRegex(n,a[0]),a.length>=3)if("string"==typeof a[1])t.setAction(n,{token:a[1],next:a[2]});else{if("object"!=typeof a[1])throw jt(i,"a next state as the last element of a rule can only be given if the action is either an object or a string, at: "+e);{const e=a[1];e.next=a[2],t.setAction(n,e)}}else t.setAction(n,a[1]);else{if(!a.regex)throw jt(i,"a rule must either be an array, or an object with a 'regex' or 'include' field at: "+e);a.name&&"string"==typeof a.name&&(t.name=a.name),a.matchOnlyAtStart&&(t.matchOnlyAtLineStart=Il(a.matchOnlyAtLineStart,!1)),t.setRegex(n,a.regex),t.setAction(n,a.action)}s.push(t)}}}if(n.languageId=e,n.includeLF=i.includeLF,n.ignoreCase=i.ignoreCase,n.unicode=i.unicode,n.noThrow=i.noThrow,n.usesEmbedded=i.usesEmbedded,n.stateNames=t.tokenizer,n.defaultToken=i.defaultToken,!t.tokenizer||"object"!=typeof t.tokenizer)throw jt(i,"a language definition must define the 'tokenizer' attribute as an object");i.tokenizer=[];for(let e in t.tokenizer)if(t.tokenizer.hasOwnProperty(e)){i.start||(i.start=e);const n=t.tokenizer[e];i.tokenizer[e]=new Array,o("tokenizer."+e,i.tokenizer[e],n)}if(i.usesEmbedded=n.usesEmbedded,t.brackets){if(!Array.isArray(t.brackets))throw jt(i,"the 'brackets' attribute must be defined as an array")}else t.brackets=[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}];let s=[];for(let e of t.brackets){let t=e;if(t&&Array.isArray(t)&&3===t.length&&(t={token:t[2],open:t[0],close:t[1]}),t.open===t.close)throw jt(i,"open and close brackets in a 'brackets' attribute must be different: "+t.open+"\n hint: use the 'bracket' attribute if matching on equal brackets is required.");if("string"!=typeof t.open||"string"!=typeof t.token||"string"!=typeof t.close)throw jt(i,"every element in the 'brackets' array must be a '{open,close,token}' object or array");s.push({token:t.token+i.tokenPostfix,open:Ht(i,t.open),close:Ht(i,t.close)})}return i.brackets=s,i.noThrow=!0,i}(e,t));return jl(t)?be.RW.registerPromise(e,t.then((e=>i(e)))):be.RW.register(e,i(t))}function ql(e,t){return be.FL.register(e,t)}function Zl(e,t){return be.G0.register(e,t)}function Gl(e,t){return be.nD.register(e,t)}function Yl(e,t){return be.xp.register(e,{provideHover:(e,i,n)=>{let o=e.getWordAtPosition(i);return Promise.resolve(t.provideHover(e,i,n)).then((e=>{if(e)return!e.range&&o&&(e.range=new U.e(i.lineNumber,o.startColumn,i.lineNumber,o.endColumn)),e.range||(e.range=new U.e(i.lineNumber,i.column,i.lineNumber,i.column)),e}))}})}function Ql(e,t){return be.vJ.register(e,t)}function Xl(e,t){return be.vH.register(e,t)}function Jl(e,t){return be.id.register(e,t)}function ec(e,t){return be.Ct.register(e,t)}function tc(e,t){return be.vI.register(e,t)}function ic(e,t){return be.tA.register(e,t)}function nc(e,t){return be.He.register(e,t)}function oc(e,t,i){return be.H9.register(e,{providedCodeActionKinds:null==i?void 0:i.providedCodeActionKinds,provideCodeActions:(e,i,n,o)=>{let s=nl.markerService.get().read({resource:e.uri}).filter((e=>U.e.areIntersectingOrTouching(e,i)));return t.provideCodeActions(e,i,{markers:s,only:n.only},o)},resolveCodeAction:t.resolveCodeAction})}function sc(e,t){return be.Az.register(e,t)}function rc(e,t){return be.vN.register(e,t)}function ac(e,t){return be.ln.register(e,t)}function lc(e,t){return be.pM.register(e,t)}function cc(e,t){return be.KZ.register(e,t)}function dc(e,t){return be.OH.register(e,t)}function hc(e,t){return be.aC.register(e,t)}function uc(e,t){return be.RN.register(e,t)}function gc(e,t){return be.AC.register(e,t)}function pc(e,t){return be.wT.register(e,t)}function fc(e,t){return be.K7.register(e,t)}function mc(e,t){return be.zu.register(e,t)}function vc(e,t){return be.mX.register(e,t)}var _c,bc=i(23606);B.BH.wrappingIndent.defaultValue=0,B.BH.glyphMargin.defaultValue=!1,B.BH.autoIndent.defaultValue=3,B.BH.overviewRulerLanes.defaultValue=2,bc.xC.setFormatterSelector(((e,t,i)=>Promise.resolve(e[0])));const wc=Z();wc.editor={create:rl,onDidCreateEditor:al,createDiffEditor:ll,createDiffNavigator:cl,createModel:dl,setModelLanguage:hl,setModelMarkers:ul,getModelMarkers:gl,onDidChangeMarkers:pl,getModels:ml,getModel:fl,onDidCreateModel:vl,onWillDisposeModel:_l,onDidChangeModelLanguage:bl,createWebWorker:wl,colorizeElement:yl,colorize:Cl,colorizeModelLine:xl,tokenize:Sl,defineTheme:kl,setTheme:Ll,remeasureFonts:Nl,registerCommand:Dl,AccessibilitySupport:n,ContentWidgetPositionPreference:l,CursorChangeReason:c,DefaultEndOfLine:d,EditorAutoIndentStrategy:u,EditorOption:g,EndOfLinePreference:p,EndOfLineSequence:f,MinimapPosition:C,MouseTargetType:x,OverlayWidgetPositionPreference:S,OverviewRulerLane:k,RenderLineNumbersType:L,RenderMinimap:N,ScrollbarVisibility:I,ScrollType:D,TextEditorCursorBlinkingStyle:O,TextEditorCursorStyle:P,TrackedRangeStickiness:R,WrappingIndent:F,ConfigurationChangedEvent:B.Bb,BareFontInfo:me.E4,FontInfo:me.pR,TextModelResolvedOptions:_e.dJ,FindMatch:_e.tk,EditorType:ve.g,EditorOptions:B.BH},wc.languages={register:Rl,getLanguages:Fl,onLanguage:Vl,getEncodedLanguageId:Bl,setLanguageConfiguration:Wl,setColorMap:Ul,setTokensProvider:$l,setMonarchTokensProvider:Kl,registerReferenceProvider:ql,registerRenameProvider:Zl,registerCompletionItemProvider:cc,registerSignatureHelpProvider:Gl,registerHoverProvider:Yl,registerDocumentSymbolProvider:Ql,registerDocumentHighlightProvider:Xl,registerLinkedEditingRangeProvider:Jl,registerDefinitionProvider:ec,registerImplementationProvider:tc,registerTypeDefinitionProvider:ic,registerCodeLensProvider:nc,registerCodeActionProvider:oc,registerDocumentFormattingEditProvider:sc,registerDocumentRangeFormattingEditProvider:rc,registerOnTypeFormattingEditProvider:ac,registerLinkProvider:lc,registerColorProvider:dc,registerFoldingRangeProvider:hc,registerDeclarationProvider:uc,registerSelectionRangeProvider:gc,registerDocumentSemanticTokensProvider:pc,registerDocumentRangeSemanticTokensProvider:fc,registerInlineCompletionsProvider:mc,registerInlayHintsProvider:vc,DocumentHighlightKind:h,CompletionItemKind:s,CompletionItemTag:r,CompletionItemInsertTextRule:o,SymbolKind:M,SymbolTag:A,IndentAction:m,CompletionTriggerKind:a,SignatureHelpTriggerKind:T,InlayHintKind:v,InlineCompletionTriggerKind:_,FoldingRangeKind:be.AD};wc.CancellationTokenSource,wc.Emitter;const yc=wc.KeyCode,Cc=wc.KeyMod,xc=(wc.Position,wc.Range,wc.Selection),Sc=(wc.SelectionDirection,wc.MarkerSeverity,wc.MarkerTag,wc.Uri,wc.Token,wc.editor),kc=wc.languages;((null===(_c=Le.li.MonacoEnvironment)||void 0===_c?void 0:_c.globalAPI)||"function"==typeof define&&i.amdO)&&(self.monaco=wc),void 0!==self.require&&"function"==typeof self.require.config&&self.require.config({ignoreDuplicateModules:["vscode-languageserver-types","vscode-languageserver-types/main","vscode-languageserver-textdocument","vscode-languageserver-textdocument/main","vscode-nls","vscode-nls/vscode-nls","jsonc-parser","jsonc-parser/main","vscode-uri","vscode-uri/index","vs/basic-languages/typescript/typescript"]})},29477:(e,t,i)=>{"use strict";i.r(t);i(74617);var n=i(65321),o=i(38626),s=i(48764),r=i(85152),a=i(93794),l=i(5976),c=i(1432),d=i(97295),h=i(70666),u=i(16830),g=i(29102),p=i(19720),f=i(38819),m=i(72065),v=i(91847),_=i(50988),b=i(73910),w=i(97781),y=i(20913),C=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},x=function(e,t){return function(i,n){t(i,n,e)}};const S=new f.uy("accessibilityHelpWidgetVisible",!1);let k=class e extends l.JT{constructor(e,t){super(),this._editor=e,this._widget=this._register(t.createInstance(L,this._editor))}static get(t){return t.getContribution(e.ID)}show(){this._widget.show()}hide(){this._widget.hide()}};k.ID="editor.contrib.accessibilityHelpController",k=C([x(1,m.TG)],k);let L=class e extends a.${constructor(e,t,i,s){super(),this._contextKeyService=t,this._keybindingService=i,this._openerService=s,this._editor=e,this._isVisibleKey=S.bindTo(this._contextKeyService),this._domNode=(0,o.X)(document.createElement("div")),this._domNode.setClassName("accessibilityHelpWidget"),this._domNode.setDisplay("none"),this._domNode.setAttribute("role","dialog"),this._domNode.setAttribute("aria-hidden","true"),this._contentDomNode=(0,o.X)(document.createElement("div")),this._contentDomNode.setAttribute("role","document"),this._domNode.appendChild(this._contentDomNode),this._isVisible=!1,this._register(this._editor.onDidLayoutChange((()=>{this._isVisible&&this._layout()}))),this._register(n.mu(this._contentDomNode.domNode,"keydown",(e=>{if(this._isVisible&&(e.equals(2083)&&((0,r.Z9)(y.Oe.emergencyConfOn),this._editor.updateOptions({accessibilitySupport:"on"}),n.PO(this._contentDomNode.domNode),this._buildContent(),this._contentDomNode.domNode.focus(),e.preventDefault(),e.stopPropagation()),e.equals(2086))){(0,r.Z9)(y.Oe.openingDocs);let t=this._editor.getRawOptions().accessibilityHelpUrl;void 0===t&&(t="https://go.microsoft.com/fwlink/?linkid=852450"),this._openerService.open(h.o.parse(t)),e.preventDefault(),e.stopPropagation()}}))),this.onblur(this._contentDomNode.domNode,(()=>{this.hide()})),this._editor.addOverlayWidget(this)}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}getId(){return e.ID}getDomNode(){return this._domNode.domNode}getPosition(){return{preference:null}}show(){this._isVisible||(this._isVisible=!0,this._isVisibleKey.set(!0),this._layout(),this._domNode.setDisplay("block"),this._domNode.setAttribute("aria-hidden","false"),this._contentDomNode.domNode.tabIndex=0,this._buildContent(),this._contentDomNode.domNode.focus())}_descriptionForCommand(e,t,i){let n=this._keybindingService.lookupKeybinding(e);return n?d.WU(t,n.getAriaLabel()):d.WU(i,e)}_buildContent(){const e=this._editor.getOptions(),t=this._editor.getSelections();let i=0;if(t){const e=this._editor.getModel();e&&t.forEach((t=>{i+=e.getValueLengthInRange(t)}))}let n=function(e,t){return e&&0!==e.length?1===e.length?t?d.WU(y.Oe.singleSelectionRange,e[0].positionLineNumber,e[0].positionColumn,t):d.WU(y.Oe.singleSelection,e[0].positionLineNumber,e[0].positionColumn):t?d.WU(y.Oe.multiSelectionRange,e.length,t):e.length>0?d.WU(y.Oe.multiSelection,e.length):"":y.Oe.noSelection}(t,i);e.get(53)?e.get(80)?n+=y.Oe.readonlyDiffEditor:n+=y.Oe.editableDiffEditor:e.get(80)?n+=y.Oe.readonlyEditor:n+=y.Oe.editableEditor;const o=c.dz?y.Oe.changeConfigToOnMac:y.Oe.changeConfigToOnWinLinux;switch(e.get(2)){case 0:n+="\n\n - "+o;break;case 2:n+="\n\n - "+y.Oe.auto_on;break;case 1:n+="\n\n - "+y.Oe.auto_off,n+=" "+o}e.get(128)?n+="\n\n - "+this._descriptionForCommand(p.ToggleTabFocusModeAction.ID,y.Oe.tabFocusModeOnMsg,y.Oe.tabFocusModeOnMsgNoKb):n+="\n\n - "+this._descriptionForCommand(p.ToggleTabFocusModeAction.ID,y.Oe.tabFocusModeOffMsg,y.Oe.tabFocusModeOffMsgNoKb);n+="\n\n - "+(c.dz?y.Oe.openDocMac:y.Oe.openDocWinLinux),n+="\n\n"+y.Oe.outroMsg,this._contentDomNode.domNode.appendChild((0,s.BO)(n)),this._contentDomNode.domNode.setAttribute("aria-label",n)}hide(){this._isVisible&&(this._isVisible=!1,this._isVisibleKey.reset(),this._domNode.setDisplay("none"),this._domNode.setAttribute("aria-hidden","true"),this._contentDomNode.domNode.tabIndex=-1,n.PO(this._contentDomNode.domNode),this._editor.focus())}_layout(){let t=this._editor.getLayoutInfo(),i=Math.max(5,Math.min(e.WIDTH,t.width-40)),n=Math.max(5,Math.min(e.HEIGHT,t.height-40));this._domNode.setWidth(i),this._domNode.setHeight(n);let o=Math.round((t.height-n)/2);this._domNode.setTop(o);let s=Math.round((t.width-i)/2);this._domNode.setLeft(s)}};L.ID="editor.contrib.accessibilityHelpWidget",L.WIDTH=500,L.HEIGHT=300,L=C([x(1,f.i6),x(2,v.d),x(3,_.v4)],L);class N extends u.R6{constructor(){super({id:"editor.action.showAccessibilityHelp",label:y.Oe.showAccessibilityHelpAction,alias:"Show Accessibility Help",precondition:void 0,kbOpts:{primary:571,weight:100,linux:{primary:1595,secondary:[571]}}})}run(e,t){let i=k.get(t);i&&i.show()}}(0,u._K)(k.ID,k),(0,u.Qr)(N);const D=u._l.bindToContribution(k.get);(0,u.fK)(new D({id:"closeAccessibilityHelp",precondition:S,handler:e=>e.hide(),kbOpts:{weight:200,kbExpr:g.u.focus,primary:9,secondary:[1033]}})),(0,w.Ic)(((e,t)=>{const i=e.getColor(b.D0);i&&t.addRule(`.monaco-editor .accessibilityHelpWidget { background-color: ${i}; }`);const n=e.getColor(b.Hf);n&&t.addRule(`.monaco-editor .accessibilityHelpWidget { color: ${n}; }`);const o=e.getColor(b.rh);o&&t.addRule(`.monaco-editor .accessibilityHelpWidget { box-shadow: 0 2px 8px ${o}; }`);const s=e.getColor(b.lR);s&&t.addRule(`.monaco-editor .accessibilityHelpWidget { border: 2px solid ${s}; }`)}))},19646:(e,t,i)=>{"use strict";i.r(t),i.d(t,{IPadShowKeyboard:()=>a});i(77203);var n=i(65321),o=i(5976),s=i(16830),r=i(1432);class a extends o.JT{constructor(e){super(),this.editor=e,this.widget=null,r.gn&&(this._register(e.onDidChangeConfiguration((()=>this.update()))),this.update())}update(){const e=!this.editor.getOption(80);!this.widget&&e?this.widget=new l(this.editor):this.widget&&!e&&(this.widget.dispose(),this.widget=null)}dispose(){super.dispose(),this.widget&&(this.widget.dispose(),this.widget=null)}}a.ID="editor.contrib.iPadShowKeyboard";class l extends o.JT{constructor(e){super(),this.editor=e,this._domNode=document.createElement("textarea"),this._domNode.className="iPadShowKeyboard",this._register(n.nm(this._domNode,"touchstart",(e=>{this.editor.focus()}))),this._register(n.nm(this._domNode,"focus",(e=>{this.editor.focus()}))),this.editor.addOverlayWidget(this)}dispose(){this.editor.removeOverlayWidget(this),super.dispose()}getId(){return l.ID}getDomNode(){return this._domNode}getPosition(){return{preference:1}}}l.ID="editor.contrib.ShowKeyboardWidget",(0,s._K)(a.ID,a)},97830:(e,t,i)=>{"use strict";i.r(t);i(7587);var n=i(65321),o=i(41264),s=i(5976),r=i(16830),a=i(44101),l=i(28111),c=i(71531),d=i(12095),h=i(73910),u=i(97781),g=i(20913),p=i(92321),f=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},m=function(e,t){return function(i,n){t(i,n,e)}};let v=class e extends s.JT{constructor(e,t,i){super(),this._editor=e,this._modeService=i,this._widget=null,this._register(this._editor.onDidChangeModel((e=>this.stop()))),this._register(this._editor.onDidChangeModelLanguage((e=>this.stop()))),this._register(a.RW.onDidChange((e=>this.stop()))),this._register(this._editor.onKeyUp((e=>9===e.keyCode&&this.stop())))}static get(t){return t.getContribution(e.ID)}dispose(){this.stop(),super.dispose()}launch(){this._widget||this._editor.hasModel()&&(this._widget=new b(this._editor,this._modeService))}stop(){this._widget&&(this._widget.dispose(),this._widget=null)}};v.ID="editor.contrib.inspectTokens",v=f([m(1,d.Z),m(2,c.h)],v);class _ extends r.R6{constructor(){super({id:"editor.action.inspectTokens",label:g.ug.inspectTokensAction,alias:"Developer: Inspect Tokens",precondition:void 0})}run(e,t){let i=v.get(t);i&&i.launch()}}class b extends s.JT{constructor(e,t){super(),this.allowEditorOverflow=!0,this._editor=e,this._modeService=t,this._model=this._editor.getModel(),this._domNode=document.createElement("div"),this._domNode.className="tokens-inspect-widget",this._tokenizationSupport=function(e,t){const i=a.RW.get(t);if(i)return i;const n=e.encodeLanguageId(t);return{getInitialState:()=>l.nO,tokenize:(e,i,n,o)=>(0,l.Ri)(t,e,n,o),tokenize2:(e,t,i,o)=>(0,l.mh)(n,e,i,o)}}(this._modeService.languageIdCodec,this._model.getLanguageId()),this._compute(this._editor.getPosition()),this._register(this._editor.onDidChangeCursorPosition((e=>this._compute(this._editor.getPosition())))),this._editor.addContentWidget(this)}dispose(){this._editor.removeContentWidget(this),super.dispose()}getId(){return b._ID}_compute(e){let t=this._getTokensAtLine(e.lineNumber),i=0;for(let n=t.tokens1.length-1;n>=0;n--){let o=t.tokens1[n];if(e.column-1>=o.offset){i=n;break}}let s=0;for(let i=t.tokens2.length>>>1;i>=0;i--)if(e.column-1>=t.tokens2[i<<1]){s=i;break}let r=this._model.getLineContent(e.lineNumber),a="";if(i<t.tokens1.length){let e=t.tokens1[i].offset,n=i+1<t.tokens1.length?t.tokens1[i+1].offset:r.length;a=r.substring(e,n)}(0,n.mc)(this._domNode,(0,n.$)("h2.tm-token",void 0,function(e){let t="";for(let i=0,n=e.length;i<n;i++){let n=e.charCodeAt(i);switch(n){case 9:t+="â†’";break;case 32:t+="Â·";break;default:t+=String.fromCharCode(n)}}return t}(a),(0,n.$)("span.tm-token-length",void 0,`${a.length} ${1===a.length?"char":"chars"}`))),(0,n.R3)(this._domNode,(0,n.$)("hr.tokens-inspect-separator",{style:"clear:both"}));const l=1+(s<<1)<t.tokens2.length?this._decodeMetadata(t.tokens2[1+(s<<1)]):null;(0,n.R3)(this._domNode,(0,n.$)("table.tm-metadata-table",void 0,(0,n.$)("tbody",void 0,(0,n.$)("tr",void 0,(0,n.$)("td.tm-metadata-key",void 0,"language"),(0,n.$)("td.tm-metadata-value",void 0,`${l?l.languageId:"-?-"}`)),(0,n.$)("tr",void 0,(0,n.$)("td.tm-metadata-key",void 0,"token type"),(0,n.$)("td.tm-metadata-value",void 0,`${l?this._tokenTypeToString(l.tokenType):"-?-"}`)),(0,n.$)("tr",void 0,(0,n.$)("td.tm-metadata-key",void 0,"font style"),(0,n.$)("td.tm-metadata-value",void 0,`${l?this._fontStyleToString(l.fontStyle):"-?-"}`)),(0,n.$)("tr",void 0,(0,n.$)("td.tm-metadata-key",void 0,"foreground"),(0,n.$)("td.tm-metadata-value",void 0,`${l?o.Il.Format.CSS.formatHex(l.foreground):"-?-"}`)),(0,n.$)("tr",void 0,(0,n.$)("td.tm-metadata-key",void 0,"background"),(0,n.$)("td.tm-metadata-value",void 0,`${l?o.Il.Format.CSS.formatHex(l.background):"-?-"}`))))),(0,n.R3)(this._domNode,(0,n.$)("hr.tokens-inspect-separator")),i<t.tokens1.length&&(0,n.R3)(this._domNode,(0,n.$)("span.tm-token-type",void 0,t.tokens1[i].type)),this._editor.layoutContentWidget(this)}_decodeMetadata(e){let t=a.RW.getColorMap(),i=a.NX.getLanguageId(e),n=a.NX.getTokenType(e),o=a.NX.getFontStyle(e),s=a.NX.getForeground(e),r=a.NX.getBackground(e);return{languageId:this._modeService.languageIdCodec.decodeLanguageId(i),tokenType:n,fontStyle:o,foreground:t[s],background:t[r]}}_tokenTypeToString(e){switch(e){case 0:return"Other";case 1:return"Comment";case 2:return"String";case 4:return"RegEx";default:return"??"}}_fontStyleToString(e){let t="";return 1&e&&(t+="italic "),2&e&&(t+="bold "),4&e&&(t+="underline "),0===t.length&&(t="---"),t}_getTokensAtLine(e){let t=this._getStateBeforeLine(e),i=this._tokenizationSupport.tokenize(this._model.getLineContent(e),!0,t,0),n=this._tokenizationSupport.tokenize2(this._model.getLineContent(e),!0,t,0);return{startState:t,tokens1:i.tokens,tokens2:n.tokens,endState:i.endState}}_getStateBeforeLine(e){let t=this._tokenizationSupport.getInitialState();for(let i=1;i<e;i++){t=this._tokenizationSupport.tokenize(this._model.getLineContent(i),!0,t,0).endState}return t}getDomNode(){return this._domNode}getPosition(){return{position:this._editor.getPosition(),preference:[2,1]}}}b._ID="editor.contrib.inspectTokensWidget",(0,r._K)(v.ID,v),(0,r.Qr)(_),(0,u.Ic)(((e,t)=>{const i=e.getColor(h.CN);if(i){let n=e.type===p.e.HIGH_CONTRAST?2:1;t.addRule(`.monaco-editor .tokens-inspect-widget { border: ${n}px solid ${i}; }`),t.addRule(`.monaco-editor .tokens-inspect-widget .tokens-inspect-separator { background-color: ${i}; }`)}const n=e.getColor(h.yJ);n&&t.addRule(`.monaco-editor .tokens-inspect-widget { background-color: ${n}; }`);const o=e.getColor(h.Sb);o&&t.addRule(`.monaco-editor .tokens-inspect-widget { color: ${o}; }`)}))},97720:(e,t,i)=>{"use strict";i.r(t),i.d(t,{GotoLineAction:()=>K,StandaloneCommandsQuickAccessProvider:()=>$});var n=i(89872),o=i(90725),s=i(20913),r=i(11640),a=i(21212),l=i(9488),c=i(98401),d=i(63580);function h(e,t){return t&&(e.stack||e.stacktrace)?d.N("stackTrace.format","{0}: {1}",g(e),u(e.stack)||u(e.stacktrace)):g(e)}function u(e){return Array.isArray(e)?e.join("\n"):e}function g(e){return"string"==typeof e.code&&"number"==typeof e.errno&&"string"==typeof e.syscall?d.N("nodeExceptionMessage","A system error occurred ({0})",e.message):e.message||d.N("error.defaultMessage","An unknown error occurred. Please consult the log for more details.")}function p(e=null,t=!1){if(!e)return d.N("error.defaultMessage","An unknown error occurred. Please consult the log for more details.");if(Array.isArray(e)){const i=l.kX(e),n=p(i[0],t);return i.length>1?d.N("error.moreErrors","{0} ({1} errors in total)",n,i.length):n}if(c.HD(e))return e;if(e.detail){const i=e.detail;if(i.error)return h(i.error,t);if(i.exception)return h(i.exception,t)}return e.stack?h(e,t):e.message?e.message:d.N("error.defaultMessage","An unknown error occurred. Please consult the log for more details.")}var f,m=i(17301),v=i(75392),_=i(5976),b=i(43702),w=i(14603),y=i(94565),C=i(33108),x=i(28820),S=i(72065),k=i(91847),L=i(15393),N=i(71050),D=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function I(e){const t=e;return Array.isArray(t.items)}!function(e){e[e.NO_ACTION=0]="NO_ACTION",e[e.CLOSE_PICKER=1]="CLOSE_PICKER",e[e.REFRESH_PICKER=2]="REFRESH_PICKER",e[e.REMOVE_ITEM=3]="REMOVE_ITEM"}(f||(f={}));class E extends _.JT{constructor(e,t){super(),this.prefix=e,this.options=t}provide(e,t){var i;const n=new _.SL;let o;e.canAcceptInBackground=!!(null===(i=this.options)||void 0===i?void 0:i.canAcceptInBackground),e.matchOnLabel=e.matchOnDescription=e.matchOnDetail=e.sortByLabel=!1;const s=n.add(new _.XK),r=()=>D(this,void 0,void 0,(function*(){const i=s.value=new _.SL;null==o||o.dispose(!0),e.busy=!1,o=new N.A(t);const n=o.token,r=e.value.substr(this.prefix.length).trim(),a=this._getPicks(r,i,n),l=(t,i)=>{var n;let o,s;if(I(t)?(o=t.items,s=t.active):o=t,0===o.length){if(i)return!1;r.length>0&&(null===(n=this.options)||void 0===n?void 0:n.noResultsPick)&&(o=[this.options.noResultsPick])}return e.items=o,s&&(e.activeItems=[s]),!0};if(null===a);else if(function(e){const t=e;return!!t.picks&&t.additionalPicks instanceof Promise}(a)){let t=!1,i=!1;yield Promise.all([(()=>D(this,void 0,void 0,(function*(){yield(0,L.Vs)(E.FAST_PICKS_RACE_DELAY),n.isCancellationRequested||i||(t=l(a.picks,!0))})))(),(()=>D(this,void 0,void 0,(function*(){e.busy=!0;try{const i=yield a.additionalPicks;if(n.isCancellationRequested)return;let o,s,r,c;if(I(a.picks)?(o=a.picks.items,s=a.picks.active):o=a.picks,I(i)?(r=i.items,c=i.active):r=i,r.length>0||!t){let t;if(!s&&!c){const i=e.activeItems[0];i&&-1!==o.indexOf(i)&&(t=i)}l({items:[...o,...r],active:s||c||t})}}finally{n.isCancellationRequested||(e.busy=!1),i=!0}})))()])}else if(a instanceof Promise){e.busy=!0;try{const e=yield a;if(n.isCancellationRequested)return;l(e)}finally{n.isCancellationRequested||(e.busy=!1)}}else l(a)}));return n.add(e.onDidChangeValue((()=>r()))),r(),n.add(e.onDidAccept((t=>{const[i]=e.selectedItems;"function"==typeof(null==i?void 0:i.accept)&&(t.inBackground||e.hide(),i.accept(e.keyMods,t))}))),n.add(e.onDidTriggerItemButton((({button:i,item:n})=>D(this,void 0,void 0,(function*(){var o,s;if("function"==typeof n.trigger){const a=null!==(s=null===(o=n.buttons)||void 0===o?void 0:o.indexOf(i))&&void 0!==s?s:-1;if(a>=0){const i=n.trigger(a,e.keyMods),o="number"==typeof i?i:yield i;if(t.isCancellationRequested)return;switch(o){case f.NO_ACTION:break;case f.CLOSE_PICKER:e.hide();break;case f.REFRESH_PICKER:r();break;case f.REMOVE_ITEM:const t=e.items.indexOf(n);if(-1!==t){const i=e.items.slice(),n=i.splice(t,1),o=e.activeItems.filter((e=>e!==n[0])),s=e.keepScrollPosition;e.keepScrollPosition=!0,e.items=i,o&&(e.activeItems=o),e.keepScrollPosition=s}}}}}))))),n}}E.FAST_PICKS_RACE_DELAY=200;var T=i(26904),M=i(10829),A=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},O=function(e,t){return function(i,n){t(i,n,e)}},P=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let R=class e extends E{constructor(t,i,n,o,s,r){super(e.PREFIX,t),this.instantiationService=i,this.keybindingService=n,this.commandService=o,this.telemetryService=s,this.dialogService=r,this.commandsHistory=this._register(this.instantiationService.createInstance(F)),this.options=t}_getPicks(t,i,n){return P(this,void 0,void 0,(function*(){const o=yield this.getCommandPicks(i,n);if(n.isCancellationRequested)return[];const s=[];for(const i of o){const n=(0,c.f6)(e.WORD_FILTER(t,i.label)),o=i.commandAlias?(0,c.f6)(e.WORD_FILTER(t,i.commandAlias)):void 0;n||o?(i.highlights={label:n,detail:this.options.showAlias?o:void 0},s.push(i)):t===i.commandId&&s.push(i)}const r=new Map;for(const e of s){const t=r.get(e.label);t?(e.description=e.commandId,t.description=t.commandId):r.set(e.label,e)}s.sort(((e,t)=>{const i=this.commandsHistory.peek(e.commandId),n=this.commandsHistory.peek(t.commandId);return i&&n?i>n?-1:1:i?-1:n?1:e.label.localeCompare(t.label)}));const a=[];let l=!1;for(let e=0;e<s.length;e++){const t=s[e],i=this.keybindingService.lookupKeybinding(t.commandId),n=i?(0,d.N)("commandPickAriaLabelWithKeybinding","{0}, {1}",t.label,i.getAriaLabel()):t.label;0===e&&this.commandsHistory.peek(t.commandId)&&(a.push({type:"separator",label:(0,d.N)("recentlyUsed","recently used")}),l=!0),0!==e&&l&&!this.commandsHistory.peek(t.commandId)&&(a.push({type:"separator",label:(0,d.N)("morecCommands","other commands")}),l=!1),a.push(Object.assign(Object.assign({},t),{ariaLabel:n,detail:this.options.showAlias&&t.commandAlias!==t.label?t.commandAlias:void 0,keybinding:i,accept:()=>P(this,void 0,void 0,(function*(){this.commandsHistory.push(t.commandId),this.telemetryService.publicLog2("workbenchActionExecuted",{id:t.commandId,from:"quick open"});try{yield this.commandService.executeCommand(t.commandId)}catch(e){(0,m.VV)(e)||this.dialogService.show(w.Z.Error,(0,d.N)("canNotRun","Command '{0}' resulted in an error ({1})",t.label,p(e)))}}))}))}return a}))}};R.PREFIX=">",R.WORD_FILTER=(0,v.or)(v.Ji,v.KZ,v.ir),R=A([O(1,S.TG),O(2,k.d),O(3,y.H),O(4,M.b),O(5,x.S)],R);let F=class e extends _.JT{constructor(e,t){super(),this.storageService=e,this.configurationService=t,this.configuredCommandsHistoryLength=0,this.updateConfiguration(),this.load(),this.registerListeners()}registerListeners(){this._register(this.configurationService.onDidChangeConfiguration((()=>this.updateConfiguration())))}updateConfiguration(){this.configuredCommandsHistoryLength=e.getConfiguredCommandHistoryLength(this.configurationService),e.cache&&e.cache.limit!==this.configuredCommandsHistoryLength&&(e.cache.limit=this.configuredCommandsHistoryLength,e.saveState(this.storageService))}load(){const t=this.storageService.get(e.PREF_KEY_CACHE,0);let i;if(t)try{i=JSON.parse(t)}catch(e){}const n=e.cache=new b.z6(this.configuredCommandsHistoryLength,1);if(i){let e;e=i.usesLRU?i.entries:i.entries.sort(((e,t)=>e.value-t.value)),e.forEach((e=>n.set(e.key,e.value)))}e.counter=this.storageService.getNumber(e.PREF_KEY_COUNTER,0,e.counter)}push(t){e.cache&&(e.cache.set(t,e.counter++),e.saveState(this.storageService))}peek(t){var i;return null===(i=e.cache)||void 0===i?void 0:i.peek(t)}static saveState(t){if(!e.cache)return;const i={usesLRU:!0,entries:[]};e.cache.forEach(((e,t)=>i.entries.push({key:t,value:e}))),t.store(e.PREF_KEY_CACHE,JSON.stringify(i),0,0),t.store(e.PREF_KEY_COUNTER,e.counter,0,0)}static getConfiguredCommandHistoryLength(t){var i,n;const o=null===(n=null===(i=t.getValue().workbench)||void 0===i?void 0:i.commandPalette)||void 0===n?void 0:n.history;return"number"==typeof o?o:e.DEFAULT_COMMANDS_HISTORY_LENGTH}};F.DEFAULT_COMMANDS_HISTORY_LENGTH=50,F.PREF_KEY_CACHE="commandPalette.mru.cache",F.PREF_KEY_COUNTER="commandPalette.mru.counter",F.counter=1,F=A([O(0,T.Uy),O(1,C.Ui)],F);class B extends R{constructor(e,t,i,n,o,s){super(e,t,i,n,o,s)}getCodeEditorCommandPicks(){const e=this.activeTextEditorControl;if(!e)return[];const t=[];for(const i of e.getSupportedActions())t.push({commandId:i.id,commandAlias:i.alias,label:(0,a.x$)(i.label)||i.id});return t}}var V=i(16830),W=i(29102),H=i(41157),z=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},j=function(e,t){return function(i,n){t(i,n,e)}},U=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};let $=class extends B{constructor(e,t,i,n,o,s){super({showAlias:!1},e,i,n,o,s),this.codeEditorService=t}get activeTextEditorControl(){return(0,c.f6)(this.codeEditorService.getFocusedCodeEditor())}getCommandPicks(){return U(this,void 0,void 0,(function*(){return this.getCodeEditorCommandPicks()}))}};$=z([j(0,S.TG),j(1,r.$),j(2,k.d),j(3,y.H),j(4,M.b),j(5,x.S)],$),n.B.as(o.IP.Quickaccess).registerQuickAccessProvider({ctor:$,prefix:$.PREFIX,helpEntries:[{description:s.UX.quickCommandHelp,needsEditor:!0}]});class K extends V.R6{constructor(){super({id:"editor.action.quickCommand",label:s.UX.quickCommandActionLabel,alias:"Command Palette",precondition:void 0,kbOpts:{kbExpr:W.u.focus,primary:59,weight:100},contextMenuOpts:{group:"z_commands",order:1}})}run(e){e.get(H.eJ).quickAccess.show($.PREFIX)}}(0,V.Qr)(K)},62097:(e,t,i)=>{"use strict";i.r(t),i.d(t,{GotoLineAction:()=>w,StandaloneGotoLineQuickAccessProvider:()=>b});var n=i(5976),o=i(65520),s=i(98275),r=i(63580);class a extends s.X{constructor(){super({canAcceptInBackground:!0})}provideWithoutTextEditor(e){const t=(0,r.N)("cannotRunGotoLine","Open a text editor first to go to a line.");return e.items=[{label:t}],e.ariaLabel=t,n.JT.None}provideWithTextEditor(e,t,i){const s=e.editor,r=new n.SL;r.add(t.onDidAccept((i=>{const[n]=t.selectedItems;if(n){if(!this.isValidLineNumber(s,n.lineNumber))return;this.gotoLocation(e,{range:this.toRange(n.lineNumber,n.column),keyMods:t.keyMods,preserveFocus:i.inBackground}),i.inBackground||t.hide()}})));const l=()=>{const e=this.parsePosition(s,t.value.trim().substr(a.PREFIX.length)),i=this.getPickLabel(s,e.lineNumber,e.column);if(t.items=[{lineNumber:e.lineNumber,column:e.column,label:i}],t.ariaLabel=i,!this.isValidLineNumber(s,e.lineNumber))return void this.clearDecorations(s);const n=this.toRange(e.lineNumber,e.column);s.revealRangeInCenter(n,0),this.addDecorations(s,n)};l(),r.add(t.onDidChangeValue((()=>l())));const c=(0,o.Pi)(s);if(c){2===c.getOptions().get(59).renderType&&(c.updateOptions({lineNumbers:"on"}),r.add((0,n.OF)((()=>c.updateOptions({lineNumbers:"relative"})))))}return r}toRange(e=1,t=1){return{startLineNumber:e,startColumn:t,endLineNumber:e,endColumn:t}}parsePosition(e,t){const i=t.split(/,|:|#/).map((e=>parseInt(e,10))).filter((e=>!isNaN(e))),n=this.lineCount(e)+1;return{lineNumber:i[0]>0?i[0]:n+i[0],column:i[1]}}getPickLabel(e,t,i){if(this.isValidLineNumber(e,t))return this.isValidColumn(e,t,i)?(0,r.N)("gotoLineColumnLabel","Go to line {0} and character {1}.",t,i):(0,r.N)("gotoLineLabel","Go to line {0}.",t);const n=e.getPosition()||{lineNumber:1,column:1},o=this.lineCount(e);return o>1?(0,r.N)("gotoLineLabelEmptyWithLimit","Current Line: {0}, Character: {1}. Type a line number between 1 and {2} to navigate to.",n.lineNumber,n.column,o):(0,r.N)("gotoLineLabelEmpty","Current Line: {0}, Character: {1}. Type a line number to navigate to.",n.lineNumber,n.column)}isValidLineNumber(e,t){return!(!t||"number"!=typeof t)&&(t>0&&t<=this.lineCount(e))}isValidColumn(e,t,i){if(!i||"number"!=typeof i)return!1;const n=this.getModel(e);if(!n)return!1;const o={lineNumber:t,column:i};return n.validatePosition(o).equals(o)}lineCount(e){var t,i;return null!==(i=null===(t=this.getModel(e))||void 0===t?void 0:t.getLineCount())&&void 0!==i?i:0}}a.PREFIX=":";var l=i(89872),c=i(90725),d=i(11640),h=i(98401),u=i(20913),g=i(4669),p=i(16830),f=i(29102),m=i(41157),v=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},_=function(e,t){return function(i,n){t(i,n,e)}};let b=class extends a{constructor(e){super(),this.editorService=e,this.onDidActiveTextEditorControlChange=g.ju.None}get activeTextEditorControl(){return(0,h.f6)(this.editorService.getFocusedCodeEditor())}};b=v([_(0,d.$)],b),l.B.as(c.IP.Quickaccess).registerQuickAccessProvider({ctor:b,prefix:b.PREFIX,helpEntries:[{description:u.qq.gotoLineActionLabel,needsEditor:!0}]});class w extends p.R6{constructor(){super({id:"editor.action.gotoLine",label:u.qq.gotoLineActionLabel,alias:"Go to Line/Column...",precondition:void 0,kbOpts:{kbExpr:f.u.focus,primary:2085,mac:{primary:293},weight:100}})}run(e){e.get(m.eJ).quickAccess.show(b.PREFIX)}}(0,p.Qr)(w)},98936:(e,t,i)=>{"use strict";i.r(t),i.d(t,{GotoLineAction:()=>H,StandaloneGotoSymbolQuickAccessProvider:()=>W});i(28609),i(24954);var n=i(71050),o=i(73046),s=i(75392),r=i(88721),a=i(1432),l=i(97295);const c=[void 0,[]];function d(e,t,i=0,n=0){const o=t;return o.values&&o.values.length>1?function(e,t,i,n){let o=0;const s=[];for(const r of t){const[t,a]=h(e,r,i,n);if("number"!=typeof t)return c;o+=t,s.push(...a)}return[o,u(s)]}(e,o.values,i,n):h(e,t,i,n)}function h(e,t,i,n){const o=(0,s.EW)(t.original,t.originalLowercase,i,e,e.toLowerCase(),n,!0);return o?[o[0],(0,s.mB)(o)]:c}function u(e){const t=e.sort(((e,t)=>e.start-t.start)),i=[];let n;for(const e of t)n&&g(n,e)?(n.start=Math.min(n.start,e.start),n.end=Math.max(n.end,e.end)):(n=e,i.push(e));return i}function g(e,t){return!(e.end<t.start)&&!(t.end<e.start)}function p(e){return e.startsWith('"')&&e.endsWith('"')}const f=" ";function m(e){"string"!=typeof e&&(e="");const t=e.toLowerCase(),{pathNormalized:i,normalized:n,normalizedLowercase:o}=v(e),s=i.indexOf(r.ir)>=0,a=p(e);let l;const c=e.split(f);if(c.length>1)for(const e of c){const t=p(e),{pathNormalized:i,normalized:n,normalizedLowercase:o}=v(e);n&&(l||(l=[]),l.push({original:e,originalLowercase:e.toLowerCase(),pathNormalized:i,normalized:n,normalizedLowercase:o,expectContiguousMatch:t}))}return{original:e,originalLowercase:t,pathNormalized:i,normalized:n,normalizedLowercase:o,values:l,containsPathSeparator:s,expectContiguousMatch:a}}function v(e){let t;t=a.ED?e.replace(/\//g,r.ir):e.replace(/\\/g,r.ir);const i=(0,l.R1)(t).replace(/\s|"/g,"");return{pathNormalized:t,normalized:i,normalizedLowercase:i.toLowerCase()}}function _(e){return Array.isArray(e)?m(e.map((e=>e.original)).join(f)):m(e.original)}var b=i(5976),w=i(24314),y=i(44101),C=i(86895),x=i(98275),S=i(63580),k=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};class L extends x.X{constructor(e=Object.create(null)){super(e),this.options=e,this.options.canAcceptInBackground=!0}provideWithoutTextEditor(e){return this.provideLabelPick(e,(0,S.N)("cannotRunGotoSymbolWithoutEditor","To go to a symbol, first open a text editor with symbol information.")),b.JT.None}provideWithTextEditor(e,t,i){const n=e.editor,o=this.getModel(n);return o?y.vJ.has(o)?this.doProvideWithEditorSymbols(e,o,t,i):this.doProvideWithoutEditorSymbols(e,o,t,i):b.JT.None}doProvideWithoutEditorSymbols(e,t,i,n){const o=new b.SL;return this.provideLabelPick(i,(0,S.N)("cannotRunGotoSymbolWithoutSymbolProvider","The active text editor does not provide symbol information.")),(()=>{k(this,void 0,void 0,(function*(){(yield this.waitForLanguageSymbolRegistry(t,o))&&!n.isCancellationRequested&&o.add(this.doProvideWithEditorSymbols(e,t,i,n))}))})(),o}provideLabelPick(e,t){e.items=[{label:t,index:0,kind:14}],e.ariaLabel=t}waitForLanguageSymbolRegistry(e,t){return k(this,void 0,void 0,(function*(){if(y.vJ.has(e))return!0;let i;const n=new Promise((e=>i=e)),o=t.add(y.vJ.onDidChange((()=>{y.vJ.has(e)&&(o.dispose(),i(!0))})));return t.add((0,b.OF)((()=>i(!1)))),n}))}doProvideWithEditorSymbols(e,t,i,o){const s=e.editor,r=new b.SL;r.add(i.onDidAccept((t=>{const[n]=i.selectedItems;n&&n.range&&(this.gotoLocation(e,{range:n.range.selection,keyMods:i.keyMods,preserveFocus:t.inBackground}),t.inBackground||i.hide())}))),r.add(i.onDidTriggerItemButton((({item:t})=>{t&&t.range&&(this.gotoLocation(e,{range:t.range.selection,keyMods:i.keyMods,forceSideBySide:!0}),i.hide())})));const a=this.getDocumentSymbols(t,o);let l;const c=()=>k(this,void 0,void 0,(function*(){null==l||l.dispose(!0),i.busy=!1,l=new n.A(o),i.busy=!0;try{const e=m(i.value.substr(L.PREFIX.length).trim()),t=yield this.doGetSymbolPicks(a,e,void 0,l.token);if(o.isCancellationRequested)return;t.length>0?i.items=t:e.original.length>0?this.provideLabelPick(i,(0,S.N)("noMatchingSymbolResults","No matching editor symbols")):this.provideLabelPick(i,(0,S.N)("noSymbolResults","No editor symbols"))}finally{o.isCancellationRequested||(i.busy=!1)}}));r.add(i.onDidChangeValue((()=>c()))),c();let d=!0;return r.add(i.onDidChangeActive((()=>{const[e]=i.activeItems;if(e&&e.range){if(d)return void(d=!1);s.revealRangeInCenter(e.range.selection,0),this.addDecorations(s,e.range.decoration)}}))),r}doGetSymbolPicks(e,t,i,n){return k(this,void 0,void 0,(function*(){const s=yield e;if(n.isCancellationRequested)return[];const r=0===t.original.indexOf(L.SCOPE_PREFIX),a=r?1:0;let c,h;t.values&&t.values.length>1?(c=_(t.values[0]),h=_(t.values.slice(1))):c=t;const u=[];for(let f=0;f<s.length;f++){const m=s[f],v=(0,l.fy)(m.name),b=`$(symbol-${y.uZ.toString(m.kind)||"property"}) ${v}`,C=b.length-v.length;let x,k,I,E,T=m.containerName;if((null==i?void 0:i.extraContainerLabel)&&(T=T?`${i.extraContainerLabel} â€¢ ${T}`:i.extraContainerLabel),t.original.length>a){let A=!1;if(c!==t&&([x,k]=d(b,Object.assign(Object.assign({},t),{values:void 0}),a,C),"number"==typeof x&&(A=!0)),"number"!=typeof x&&([x,k]=d(b,c,a,C),"number"!=typeof x))continue;if(!A&&h){if(T&&h.original.length>0&&([I,E]=d(T,h)),"number"!=typeof I)continue;"number"==typeof x&&(x+=I)}}const M=m.tags&&m.tags.indexOf(1)>=0;u.push({index:f,kind:m.kind,score:x,label:b,ariaLabel:v,description:T,highlights:M?void 0:{label:k,description:E},range:{selection:w.e.collapseToStart(m.selectionRange),decoration:m.range},strikethrough:M,buttons:(()=>{var e,t;const i=(null===(e=this.options)||void 0===e?void 0:e.openSideBySideDirection)?null===(t=this.options)||void 0===t?void 0:t.openSideBySideDirection():void 0;if(i)return[{iconClass:"right"===i?o.lA.splitHorizontal.classNames:o.lA.splitVertical.classNames,tooltip:"right"===i?(0,S.N)("openToSide","Open to the Side"):(0,S.N)("openToBottom","Open to the Bottom")}]})()})}const g=u.sort(((e,t)=>r?this.compareByKindAndScore(e,t):this.compareByScore(e,t)));let p=[];if(r){let O,P,R=0;function F(){P&&"number"==typeof O&&R>0&&(P.label=(0,l.WU)(D[O]||N,R))}for(const B of g)O!==B.kind?(F(),O=B.kind,R=1,P={type:"separator"},p.push(P)):R++,p.push(B);F()}else g.length>0&&(p=[{label:(0,S.N)("symbols","symbols ({0})",u.length),type:"separator"},...g]);return p}))}compareByScore(e,t){if("number"!=typeof e.score&&"number"==typeof t.score)return 1;if("number"==typeof e.score&&"number"!=typeof t.score)return-1;if("number"==typeof e.score&&"number"==typeof t.score){if(e.score>t.score)return-1;if(e.score<t.score)return 1}return e.index<t.index?-1:e.index>t.index?1:0}compareByKindAndScore(e,t){const i=D[e.kind]||N,n=D[t.kind]||N,o=i.localeCompare(n);return 0===o?this.compareByScore(e,t):o}getDocumentSymbols(e,t){return k(this,void 0,void 0,(function*(){const i=yield C.C3.create(e,t);return t.isCancellationRequested?[]:i.asListOfDocumentSymbols()}))}}L.PREFIX="@",L.SCOPE_PREFIX=":",L.PREFIX_BY_CATEGORY=`${L.PREFIX}${L.SCOPE_PREFIX}`;const N=(0,S.N)("property","properties ({0})"),D={5:(0,S.N)("method","methods ({0})"),11:(0,S.N)("function","functions ({0})"),8:(0,S.N)("_constructor","constructors ({0})"),12:(0,S.N)("variable","variables ({0})"),4:(0,S.N)("class","classes ({0})"),22:(0,S.N)("struct","structs ({0})"),23:(0,S.N)("event","events ({0})"),24:(0,S.N)("operator","operators ({0})"),10:(0,S.N)("interface","interfaces ({0})"),2:(0,S.N)("namespace","namespaces ({0})"),3:(0,S.N)("package","packages ({0})"),25:(0,S.N)("typeParameter","type parameters ({0})"),1:(0,S.N)("modules","modules ({0})"),6:(0,S.N)("property","properties ({0})"),9:(0,S.N)("enum","enumerations ({0})"),21:(0,S.N)("enumMember","enumeration members ({0})"),14:(0,S.N)("string","strings ({0})"),0:(0,S.N)("file","files ({0})"),17:(0,S.N)("array","arrays ({0})"),15:(0,S.N)("number","numbers ({0})"),16:(0,S.N)("boolean","booleans ({0})"),18:(0,S.N)("object","objects ({0})"),19:(0,S.N)("key","keys ({0})"),7:(0,S.N)("field","fields ({0})"),13:(0,S.N)("constant","constants ({0})")};var I=i(89872),E=i(90725),T=i(11640),M=i(98401),A=i(20913),O=i(4669),P=i(16830),R=i(29102),F=i(41157),B=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},V=function(e,t){return function(i,n){t(i,n,e)}};let W=class extends L{constructor(e){super(),this.editorService=e,this.onDidActiveTextEditorControlChange=O.ju.None}get activeTextEditorControl(){return(0,M.f6)(this.editorService.getFocusedCodeEditor())}};W=B([V(0,T.$)],W),I.B.as(E.IP.Quickaccess).registerQuickAccessProvider({ctor:W,prefix:L.PREFIX,helpEntries:[{description:A.aq.quickOutlineActionLabel,prefix:L.PREFIX,needsEditor:!0},{description:A.aq.quickOutlineByCategoryActionLabel,prefix:L.PREFIX_BY_CATEGORY,needsEditor:!0}]});class H extends P.R6{constructor(){super({id:"editor.action.quickOutline",label:A.aq.quickOutlineActionLabel,alias:"Go to Symbol...",precondition:R.u.hasDocumentSymbolProvider,kbOpts:{kbExpr:R.u.focus,primary:3117,weight:100},contextMenuOpts:{group:"navigation",order:3}})}run(e){e.get(F.eJ).quickAccess.show(L.PREFIX)}}(0,P.Qr)(H)},78944:(e,t,i)=>{"use strict";i.r(t);var n=i(89872),o=i(90725),s=i(20913),r=i(5976),a=i(63580),l=i(41157),c=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},d=function(e,t){return function(i,n){t(i,n,e)}};let h=class e{constructor(e){this.quickInputService=e,this.registry=n.B.as(o.IP.Quickaccess)}provide(t){const i=new r.SL;i.add(t.onDidAccept((()=>{const[e]=t.selectedItems;e&&this.quickInputService.quickAccess.show(e.prefix,{preserveValue:!0})}))),i.add(t.onDidChangeValue((t=>{const i=this.registry.getQuickAccessProvider(t.substr(e.PREFIX.length));i&&i.prefix&&i.prefix!==e.PREFIX&&this.quickInputService.quickAccess.show(i.prefix,{preserveValue:!0})})));const{editorProviders:n,globalProviders:o}=this.getQuickAccessProviders();return t.items=0===n.length||0===o.length?[...0===n.length?o:n]:[{label:(0,a.N)("globalCommands","global commands"),type:"separator"},...o,{label:(0,a.N)("editorCommands","editor commands"),type:"separator"},...n],i}getQuickAccessProviders(){const t=[],i=[];for(const n of this.registry.getQuickAccessProviders().sort(((e,t)=>e.prefix.localeCompare(t.prefix))))if(n.prefix!==e.PREFIX)for(const e of n.helpEntries){const o=e.prefix||n.prefix,s=o||"â€¦";(e.needsEditor?i:t).push({prefix:o,label:s,ariaLabel:(0,a.N)("helpPickAriaLabel","{0}, {1}",s,e.description),description:e.description})}return{editorProviders:i,globalProviders:t}}};h.PREFIX="?",h=c([d(0,l.eJ)],h),n.B.as(o.IP.Quickaccess).registerQuickAccessProvider({ctor:h,prefix:"",helpEntries:[{description:s.ld.helpQuickAccessActionLabel,needsEditor:!0}]})},45048:(e,t,i)=>{"use strict";i.r(t),i.d(t,{StandaloneReferencesController:()=>g});var n=i(16830),o=i(11640),s=i(44318),r=i(33108),a=i(38819),l=i(72065),c=i(59422),d=i(26904),h=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},u=function(e,t){return function(i,n){t(i,n,e)}};let g=class extends s.J{constructor(e,t,i,n,o,s,r){super(!0,e,t,i,n,o,s,r)}};g=h([u(1,a.i6),u(2,o.$),u(3,c.lT),u(4,l.TG),u(5,d.Uy),u(6,r.Ui)],g),(0,n._K)(s.J.ID,g)},15662:(e,t,i)=>{"use strict";i.r(t);var n=i(16830),o=i(12095),s=i(20913);class r extends n.R6{constructor(){super({id:"editor.action.toggleHighContrast",label:s.xi.toggleHighContrast,alias:"Toggle High Contrast Theme",precondition:void 0}),this._originalThemeName=null}run(e,t){const i=e.get(o.Z);this._originalThemeName?(i.setTheme(this._originalThemeName),this._originalThemeName=null):(this._originalThemeName=i.getColorTheme().themeName,i.setTheme("hc-black"))}}(0,n.Qr)(r)},12095:(e,t,i)=>{"use strict";i.d(t,{Z:()=>n});const n=(0,i(72065).yh)("themeService")},63580:(e,t,i)=>{"use strict";function n(e,t,...i){return function(e,t){let i;return i=0===t.length?e:e.replace(/\{(\d+)\}/g,(function(e,i){const n=i[0];return void 0!==t[n]?t[n]:e})),i}(t,i)}i.d(t,{N:()=>n})},31106:(e,t,i)=>{"use strict";i.d(t,{F:()=>o,U:()=>s});var n=i(38819);const o=(0,i(72065).yh)("accessibilityService"),s=new n.uy("accessibilityModeEnabled",!1)},58335:(e,t,i)=>{"use strict";i.d(t,{Mm:()=>D,Id:()=>T,vr:()=>N});var n=i(65321),o=i(59069),s=i(76033),r=i(10553),a=i(74741),l=i(4669);i(84843);class c extends a.Wi{constructor(e,t){super(),this._onDidChangeVisibility=this._register(new l.Q5),this.onDidChangeVisibility=this._onDidChangeVisibility.event,this._element=(0,n.R3)(e,(0,n.$)(".monaco-dropdown")),this._label=(0,n.R3)(this._element,(0,n.$)(".dropdown-label"));let i=t.labelRenderer;i||(i=e=>(e.textContent=t.label||"",null));for(const e of[n.tw.CLICK,n.tw.MOUSE_DOWN,r.t.Tap])this._register((0,n.nm)(this.element,e,(e=>n.zB.stop(e,!0))));for(const e of[n.tw.MOUSE_DOWN,r.t.Tap])this._register((0,n.nm)(this._label,e,(e=>{e instanceof MouseEvent&&e.detail>1||(this.visible?this.hide():this.show())})));this._register((0,n.nm)(this._label,n.tw.KEY_UP,(e=>{const t=new o.y(e);(t.equals(3)||t.equals(10))&&(n.zB.stop(e,!0),this.visible?this.hide():this.show())})));const s=i(this._label);s&&this._register(s),this._register(r.o.addTarget(this._label))}get element(){return this._element}show(){this.visible||(this.visible=!0,this._onDidChangeVisibility.fire(!0))}hide(){this.visible&&(this.visible=!1,this._onDidChangeVisibility.fire(!1))}dispose(){super.dispose(),this.hide(),this.boxContainer&&(this.boxContainer.remove(),this.boxContainer=void 0),this.contents&&(this.contents.remove(),this.contents=void 0),this._label&&(this._label.remove(),this._label=void 0)}}class d extends c{constructor(e,t){super(e,t),this._actions=[],this._contextMenuProvider=t.contextMenuProvider,this.actions=t.actions||[],this.actionProvider=t.actionProvider,this.menuClassName=t.menuClassName||"",this.menuAsChild=!!t.menuAsChild}set menuOptions(e){this._menuOptions=e}get menuOptions(){return this._menuOptions}get actions(){return this.actionProvider?this.actionProvider.getActions():this._actions}set actions(e){this._actions=e}show(){super.show(),this.element.classList.add("active"),this._contextMenuProvider.showContextMenu({getAnchor:()=>this.element,getActions:()=>this.actions,getActionsContext:()=>this.menuOptions?this.menuOptions.context:null,getActionViewItem:e=>this.menuOptions&&this.menuOptions.actionViewItemProvider?this.menuOptions.actionViewItemProvider(e):void 0,getKeyBinding:e=>this.menuOptions&&this.menuOptions.getKeyBinding?this.menuOptions.getKeyBinding(e):void 0,getMenuClassName:()=>this.menuClassName,onHide:()=>this.onHide(),actionRunner:this.menuOptions?this.menuOptions.actionRunner:void 0,anchorAlignment:this.menuOptions?this.menuOptions.anchorAlignment:0,domForShadowRoot:this.menuAsChild?this.element:void 0})}hide(){super.hide()}onHide(){this.hide(),this.element.classList.remove("active")}}class h extends s.Y{constructor(e,t,i,n=Object.create(null)){super(null,e,n),this.actionItem=null,this._onDidChangeVisibility=this._register(new l.Q5),this.menuActionsOrProvider=t,this.contextMenuProvider=i,this.options=n,this.options.actionRunner&&(this.actionRunner=this.options.actionRunner)}render(e){this.actionItem=e;const t=Array.isArray(this.menuActionsOrProvider),i={contextMenuProvider:this.contextMenuProvider,labelRenderer:e=>{this.element=(0,n.R3)(e,(0,n.$)("a.action-label"));let t=[];return"string"==typeof this.options.classNames?t=this.options.classNames.split(/\s+/g).filter((e=>!!e)):this.options.classNames&&(t=this.options.classNames),t.find((e=>"icon"===e))||t.push("codicon"),this.element.classList.add(...t),this.element.setAttribute("role","button"),this.element.setAttribute("aria-haspopup","true"),this.element.setAttribute("aria-expanded","false"),this.element.title=this._action.label||"",null},menuAsChild:this.options.menuAsChild,actions:t?this.menuActionsOrProvider:void 0,actionProvider:t?void 0:this.menuActionsOrProvider};if(this.dropdownMenu=this._register(new d(e,i)),this._register(this.dropdownMenu.onDidChangeVisibility((e=>{var t;null===(t=this.element)||void 0===t||t.setAttribute("aria-expanded",`${e}`),this._onDidChangeVisibility.fire(e)}))),this.dropdownMenu.menuOptions={actionViewItemProvider:this.options.actionViewItemProvider,actionRunner:this.actionRunner,getKeyBinding:this.options.keybindingProvider,context:this._context},this.options.anchorAlignmentProvider){const e=this;this.dropdownMenu.menuOptions=Object.assign(Object.assign({},this.dropdownMenu.menuOptions),{get anchorAlignment(){return e.options.anchorAlignmentProvider()}})}this.updateEnabled()}setActionContext(e){super.setActionContext(e),this.dropdownMenu&&(this.dropdownMenu.menuOptions?this.dropdownMenu.menuOptions.context=e:this.dropdownMenu.menuOptions={context:e})}updateEnabled(){var e,t;const i=!this.getAction().enabled;null===(e=this.actionItem)||void 0===e||e.classList.toggle("disabled",i),null===(t=this.element)||void 0===t||t.classList.toggle("disabled",i)}}var u=i(8030),g=i(5976),p=i(1432),f=(i(38453),i(63580)),m=i(84144),v=i(38819),_=i(5606),b=i(72065),w=i(91847),y=i(59422),C=i(26904),x=i(97781),S=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},k=function(e,t){return function(i,n){t(i,n,e)}},L=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function N(e,t,i,n,o,s,r){const l=e.getActions(t);return function(e,t,i,n=(e=>"navigation"===e),o=Number.MAX_SAFE_INTEGER,s=(()=>!1),r=!1){let l,c;Array.isArray(t)?(l=t,c=t):(l=t.primary,c=t.secondary);const d=new Set;for(const[t,o]of e){let e;n(t)?(e=l,e.length>0&&r&&e.push(new a.Z0)):(e=c,e.length>0&&e.push(new a.Z0));for(let n of o){i&&(n=n instanceof m.U8&&n.alt?n.alt:n);const o=e.push(n);n instanceof a.wY&&d.add({group:t,action:n,index:o-1})}}for(const{group:e,action:t,index:i}of d){const r=n(e)?l:c,a=t.actions;(a.length<=1||r.length+a.length-2<=o)&&s(t,e,r.length)&&r.splice(i,1,...a)}if(l!==c&&l.length>o){const e=l.splice(o,l.length-o);c.unshift(...e,new a.Z0)}}(l,i,!1,"string"==typeof n?e=>e===n:n,o,s,r),function(e){const t=new g.SL;for(const[,i]of e)for(const e of i)t.add(e);return t}(l)}let D=class extends s.g{constructor(e,t,i,o,s){super(void 0,e,{icon:!(!e.class&&!e.item.icon),label:!e.class&&!e.item.icon,draggable:null==t?void 0:t.draggable}),this._keybindingService=i,this._notificationService=o,this._contextKeyService=s,this._wantsAltCommand=!1,this._itemClassDispose=this._register(new g.XK),this._altKey=n._q.getInstance()}get _menuItemAction(){return this._action}get _commandAction(){return this._wantsAltCommand&&this._menuItemAction.alt||this._menuItemAction}onClick(e){return L(this,void 0,void 0,(function*(){e.preventDefault(),e.stopPropagation();try{yield this.actionRunner.run(this._commandAction,this._context)}catch(e){this._notificationService.error(e)}}))}render(e){super.render(e),e.classList.add("menu-entry"),this._updateItemClass(this._menuItemAction.item);let t=!1,i=this._altKey.keyStatus.altKey||(p.ED||p.IJ)&&this._altKey.keyStatus.shiftKey;const o=()=>{const e=t&&i;e!==this._wantsAltCommand&&(this._wantsAltCommand=e,this.updateLabel(),this.updateTooltip(),this.updateClass())};this._menuItemAction.alt&&this._register(this._altKey.event((e=>{i=e.altKey||(p.ED||p.IJ)&&e.shiftKey,o()}))),this._register((0,n.nm)(e,"mouseleave",(e=>{t=!1,o()}))),this._register((0,n.nm)(e,"mouseenter",(e=>{t=!0,o()})))}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this._commandAction.label)}updateTooltip(){if(this.label){const e=this._keybindingService.lookupKeybinding(this._commandAction.id,this._contextKeyService),t=e&&e.getLabel(),i=this._commandAction.tooltip||this._commandAction.label;let n=t?(0,f.N)("titleAndKb","{0} ({1})",i,t):i;if(!this._wantsAltCommand&&this._menuItemAction.alt){const e=this._menuItemAction.alt.tooltip||this._menuItemAction.alt.label,t=this._keybindingService.lookupKeybinding(this._menuItemAction.alt.id,this._contextKeyService),i=t&&t.getLabel(),o=i?(0,f.N)("titleAndKb","{0} ({1})",e,i):e;n+=`\n[${u.xo.modifierLabels[p.OS].altKey}] ${o}`}this.label.title=n}}updateClass(){this.options.icon&&(this._commandAction!==this._menuItemAction?this._menuItemAction.alt&&this._updateItemClass(this._menuItemAction.alt.item):this._menuItemAction.alt&&this._updateItemClass(this._menuItemAction.item))}_updateItemClass(e){var t;this._itemClassDispose.value=void 0;const{element:i,label:o}=this;if(!i||!o)return;const s=this._commandAction.checked&&(null===(t=e.toggled)||void 0===t?void 0:t.icon)?e.toggled.icon:e.icon;if(s)if(x.kS.isThemeIcon(s)){const e=x.kS.asClassNameArray(s);o.classList.add(...e),this._itemClassDispose.value=(0,g.OF)((()=>{o.classList.remove(...e)}))}else s.light&&o.style.setProperty("--menu-entry-icon-light",(0,n.wY)(s.light)),s.dark&&o.style.setProperty("--menu-entry-icon-dark",(0,n.wY)(s.dark)),o.classList.add("icon"),this._itemClassDispose.value=(0,g.OF)((()=>{o.classList.remove("icon"),o.style.removeProperty("--menu-entry-icon-light"),o.style.removeProperty("--menu-entry-icon-dark")}))}};D=S([k(2,w.d),k(3,y.lT),k(4,v.i6)],D);let I=class extends h{constructor(e,t,i){var n,o;const s=Object.assign({},null!=t?t:Object.create(null),{menuAsChild:null!==(n=null==t?void 0:t.menuAsChild)&&void 0!==n&&n,classNames:null!==(o=null==t?void 0:t.classNames)&&void 0!==o?o:x.kS.isThemeIcon(e.item.icon)?x.kS.asClassName(e.item.icon):void 0});super(e,{getActions:()=>e.actions},i,s)}render(e){if(super.render(e),this.element){e.classList.add("menu-entry");const{icon:t}=this._action.item;t&&!x.kS.isThemeIcon(t)&&(this.element.classList.add("icon"),t.light&&this.element.style.setProperty("--menu-entry-icon-light",(0,n.wY)(t.light)),t.dark&&this.element.style.setProperty("--menu-entry-icon-dark",(0,n.wY)(t.dark)))}}};I=S([k(2,_.i)],I);let E=class extends s.Y{constructor(e,t,i,n,o,s,r,l){var c,d,u;let g;super(null,e),this._keybindingService=i,this._notificationService=n,this._contextMenuService=o,this._menuService=s,this._instaService=r,this._storageService=l,this._container=null,this._storageKey=`${e.item.submenu._debugName}_lastActionId`;let p=l.get(this._storageKey,1);p&&(g=e.actions.find((e=>p===e.id))),g||(g=e.actions[0]),this._defaultAction=this._instaService.createInstance(D,g,void 0);const f=Object.assign({},null!=t?t:Object.create(null),{menuAsChild:null===(c=null==t?void 0:t.menuAsChild)||void 0===c||c,classNames:null!==(d=null==t?void 0:t.classNames)&&void 0!==d?d:["codicon","codicon-chevron-down"],actionRunner:null!==(u=null==t?void 0:t.actionRunner)&&void 0!==u?u:new a.Wi});this._dropdown=new h(e,e.actions,this._contextMenuService,f),this._dropdown.actionRunner.onDidRun((e=>{e.action instanceof m.U8&&this.update(e.action)}))}update(e){this._storageService.store(this._storageKey,e.id,1,0),this._defaultAction.dispose(),this._defaultAction=this._instaService.createInstance(D,e,void 0),this._defaultAction.actionRunner=new class extends a.Wi{runAction(e,t){return L(this,void 0,void 0,(function*(){yield e.run(void 0)}))}},this._container&&this._defaultAction.render((0,n.Ce)(this._container,(0,n.$)(".action-container")))}setActionContext(e){super.setActionContext(e),this._defaultAction.setActionContext(e),this._dropdown.setActionContext(e)}render(e){this._container=e,super.render(this._container),this._container.classList.add("monaco-dropdown-with-default");const t=(0,n.$)(".action-container");this._defaultAction.render((0,n.R3)(this._container,t)),this._register((0,n.nm)(t,n.tw.KEY_DOWN,(e=>{const t=new o.y(e);t.equals(17)&&(this._defaultAction.element.tabIndex=-1,this._dropdown.focus(),t.stopPropagation())})));const i=(0,n.$)(".dropdown-action-container");this._dropdown.render((0,n.R3)(this._container,i)),this._register((0,n.nm)(i,n.tw.KEY_DOWN,(e=>{var t;const i=new o.y(e);i.equals(15)&&(this._defaultAction.element.tabIndex=0,this._dropdown.setFocusable(!1),null===(t=this._defaultAction.element)||void 0===t||t.focus(),i.stopPropagation())})))}focus(e){e?this._dropdown.focus():(this._defaultAction.element.tabIndex=0,this._defaultAction.element.focus())}blur(){this._defaultAction.element.tabIndex=-1,this._dropdown.blur(),this._container.blur()}setFocusable(e){e?this._defaultAction.element.tabIndex=0:(this._defaultAction.element.tabIndex=-1,this._dropdown.setFocusable(!1))}dispose(){this._defaultAction.dispose(),this._dropdown.dispose(),super.dispose()}};function T(e,t,i){return t instanceof m.U8?e.createInstance(D,t,void 0):t instanceof m.NZ?t.item.rememberDefaultAction?e.createInstance(E,t,i):e.createInstance(I,t,i):void 0}E=S([k(2,w.d),k(3,y.lT),k(4,_.i),k(5,m.co),k(6,b.TG),k(7,C.Uy)],E)},84144:(e,t,i)=>{"use strict";i.d(t,{BH:()=>_,NZ:()=>b,U8:()=>w,co:()=>v,eH:()=>m,vr:()=>f});var n=i(74741),o=i(73046),s=i(4669),r=i(53725),a=i(5976),l=i(91741),c=i(94565),d=i(38819),h=i(72065),u=i(97781),g=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},p=function(e,t){return function(i,n){t(i,n,e)}};function f(e){return void 0!==e.command}class m{constructor(e){this.id=m._idPool++,this._debugName=e}}m._idPool=0,m.CommandPalette=new m("CommandPalette"),m.EditorContext=new m("EditorContext"),m.SimpleEditorContext=new m("SimpleEditorContext"),m.EditorContextCopy=new m("EditorContextCopy"),m.EditorContextPeek=new m("EditorContextPeek"),m.MenubarEditMenu=new m("MenubarEditMenu"),m.MenubarCopy=new m("MenubarCopy"),m.MenubarGoMenu=new m("MenubarGoMenu"),m.MenubarSelectionMenu=new m("MenubarSelectionMenu"),m.InlineCompletionsActions=new m("InlineCompletionsActions");const v=(0,h.yh)("menuService"),_=new class{constructor(){this._commands=new Map,this._menuItems=new Map,this._onDidChangeMenu=new s.Q5,this.onDidChangeMenu=this._onDidChangeMenu.event,this._commandPaletteChangeEvent={has:e=>e===m.CommandPalette}}addCommand(e){return this.addCommands(r.$.single(e))}addCommands(e){for(const t of e)this._commands.set(t.id,t);return this._onDidChangeMenu.fire(this._commandPaletteChangeEvent),(0,a.OF)((()=>{let t=!1;for(const i of e)t=this._commands.delete(i.id)||t;t&&this._onDidChangeMenu.fire(this._commandPaletteChangeEvent)}))}getCommand(e){return this._commands.get(e)}getCommands(){const e=new Map;return this._commands.forEach(((t,i)=>e.set(i,t))),e}appendMenuItem(e,t){return this.appendMenuItems(r.$.single({id:e,item:t}))}appendMenuItems(e){const t=new Set,i=new l.S;for(const{id:n,item:o}of e){let e=this._menuItems.get(n);e||(e=new l.S,this._menuItems.set(n,e)),i.push(e.push(o)),t.add(n)}return this._onDidChangeMenu.fire(t),(0,a.OF)((()=>{if(i.size>0){for(let e of i)e();this._onDidChangeMenu.fire(t),i.clear()}}))}getMenuItems(e){let t;return t=this._menuItems.has(e)?[...this._menuItems.get(e)]:[],e===m.CommandPalette&&this._appendImplicitItems(t),t}_appendImplicitItems(e){const t=new Set;for(const i of e)f(i)&&(t.add(i.command.id),i.alt&&t.add(i.alt.id));this._commands.forEach(((i,n)=>{t.has(n)||e.push({command:i})}))}};class b extends n.wY{constructor(e,t,i,n){super(`submenuitem.${e.submenu.id}`,"string"==typeof e.title?e.title:e.title.value,[],"submenu"),this.item=e,this._menuService=t,this._contextKeyService=i,this._options=n}get actions(){const e=[],t=this._menuService.createMenu(this.item.submenu,this._contextKeyService),i=t.getActions(this._options);t.dispose();for(const[,t]of i)t.length>0&&(e.push(...t),e.push(new n.Z0));return e.length&&e.pop(),e}}let w=class e{constructor(t,i,n,s,r){var a,l;if(this._commandService=r,this.id=t.id,this.label=(null==n?void 0:n.renderShortTitle)&&t.shortTitle?"string"==typeof t.shortTitle?t.shortTitle:t.shortTitle.value:"string"==typeof t.title?t.title:t.title.value,this.tooltip=null!==(l="string"==typeof t.tooltip?t.tooltip:null===(a=t.tooltip)||void 0===a?void 0:a.value)&&void 0!==l?l:"",this.enabled=!t.precondition||s.contextMatchesRules(t.precondition),this.checked=void 0,t.toggled){const e=t.toggled.condition?t.toggled:{condition:t.toggled};this.checked=s.contextMatchesRules(e.condition),this.checked&&e.tooltip&&(this.tooltip="string"==typeof e.tooltip?e.tooltip:e.tooltip.value),e.title&&(this.label="string"==typeof e.title?e.title:e.title.value)}this.item=t,this.alt=i?new e(i,void 0,n,s,r):void 0,this._options=n,u.kS.isThemeIcon(t.icon)&&(this.class=o.dT.asClassName(t.icon))}dispose(){}run(...e){var t,i;let n=[];return(null===(t=this._options)||void 0===t?void 0:t.arg)&&(n=[...n,this._options.arg]),(null===(i=this._options)||void 0===i?void 0:i.shouldForwardArgs)&&(n=[...n,...e]),this._commandService.executeCommand(this.id,...n)}};w=g([p(3,d.i6),p(4,c.H)],w)},84972:(e,t,i)=>{"use strict";i.d(t,{p:()=>n});const n=(0,i(72065).yh)("clipboardService")},94565:(e,t,i)=>{"use strict";i.d(t,{H:()=>l,P:()=>c});var n=i(4669),o=i(53725),s=i(5976),r=i(91741),a=i(98401);const l=(0,i(72065).yh)("commandService"),c=new class{constructor(){this._commands=new Map,this._onDidRegisterCommand=new n.Q5,this.onDidRegisterCommand=this._onDidRegisterCommand.event}registerCommand(e,t){if(!e)throw new Error("invalid command");if("string"==typeof e){if(!t)throw new Error("invalid command");return this.registerCommand({id:e,handler:t})}if(e.description){const t=[];for(let i of e.description.args)t.push(i.constraint);const i=e.handler;e.handler=function(e,...n){return(0,a.D8)(n,t),i(e,...n)}}const{id:i}=e;let n=this._commands.get(i);n||(n=new r.S,this._commands.set(i,n));let o=n.unshift(e),l=(0,s.OF)((()=>{o();const e=this._commands.get(i);(null==e?void 0:e.isEmpty())&&this._commands.delete(i)}));return this._onDidRegisterCommand.fire(i),l}registerCommandAlias(e,t){return c.registerCommand(e,((e,...i)=>e.get(l).executeCommand(t,...i)))}getCommand(e){const t=this._commands.get(e);if(t&&!t.isEmpty())return o.$.first(t)}getCommands(){const e=new Map;for(const t of this._commands.keys()){const i=this.getCommand(t);i&&e.set(t,i)}return e}};c.registerCommand("noop",(()=>{}))},33108:(e,t,i)=>{"use strict";i.d(t,{KV:()=>l,MR:()=>u,Mt:()=>h,O4:()=>g,Od:()=>a,Ui:()=>r,xL:()=>c});var n=i(23193),o=i(72065),s=i(89872);const r=(0,o.yh)("configurationService");function a(e,t){const i=Object.create(null);for(let n in e)l(i,n,e[n],t);return i}function l(e,t,i,n){const o=t.split("."),s=o.pop();let r=e;for(let e=0;e<o.length;e++){let i=o[e],s=r[i];switch(typeof s){case"undefined":s=r[i]=Object.create(null);break;case"object":break;default:return void n(`Ignoring ${t} as ${o.slice(0,e+1).join(".")} is ${JSON.stringify(s)}`)}r=s}if("object"==typeof r&&null!==r)try{r[s]=i}catch(e){n(`Ignoring ${t} as ${o.join(".")} is ${JSON.stringify(r)}`)}else n(`Ignoring ${t} as ${o.join(".")} is ${JSON.stringify(r)}`)}function c(e,t){d(e,t.split("."))}function d(e,t){const i=t.shift();if(0!==t.length){if(-1!==Object.keys(e).indexOf(i)){const n=e[i];"object"!=typeof n||Array.isArray(n)||(d(n,t),0===Object.keys(n).length&&delete e[i])}}else delete e[i]}function h(e,t,i){const n=function(e,t){let i=e;for(const e of t){if("object"!=typeof i||null===i)return;i=i[e]}return i}(e,t.split("."));return void 0===n?i:n}function u(){const e=s.B.as(n.IP.Configuration).getConfigurationProperties();return Object.keys(e)}function g(){const e=Object.create(null),t=s.B.as(n.IP.Configuration).getConfigurationProperties();for(let i in t){l(e,i,t[i].default,(e=>console.error(`Conflict in default settings: ${e}`)))}return e}},23193:(e,t,i)=>{"use strict";i.d(t,{G1:()=>v,IP:()=>l,Uh:()=>_});var n=i(4669),o=i(98401),s=i(63580),r=i(81294),a=i(89872);const l={Configuration:"base.contributions.configuration"},c={properties:{},patternProperties:{}},d={properties:{},patternProperties:{}},h={properties:{},patternProperties:{}},u={properties:{},patternProperties:{}},g={properties:{},patternProperties:{}},p={properties:{},patternProperties:{}},f="vscode://schemas/settings/resourceLanguage",m=a.B.as(r.I.JSONContribution);const v=new RegExp("\\[.*\\]$");function _(e){return e.substring(1,e.length-1)}const b=new class{constructor(){this.overrideIdentifiers=new Set,this._onDidSchemaChange=new n.Q5,this._onDidUpdateConfiguration=new n.Q5,this.defaultValues={},this.defaultLanguageConfigurationOverridesNode={id:"defaultOverrides",title:s.N("defaultLanguageConfigurationOverrides.title","Default Language Configuration Overrides"),properties:{}},this.configurationContributors=[this.defaultLanguageConfigurationOverridesNode],this.resourceLanguageSettingsSchema={properties:{},patternProperties:{},additionalProperties:!1,errorMessage:"Unknown editor configuration setting",allowTrailingCommas:!0,allowComments:!0},this.configurationProperties={},this.excludedConfigurationProperties={},m.registerSchema(f,this.resourceLanguageSettingsSchema)}registerConfiguration(e,t=!0){this.registerConfigurations([e],t)}registerConfigurations(e,t=!0){const i=this.doRegisterConfigurations(e,t);m.registerSchema(f,this.resourceLanguageSettingsSchema),this._onDidSchemaChange.fire(),this._onDidUpdateConfiguration.fire(i)}registerOverrideIdentifiers(e){for(const t of e)this.overrideIdentifiers.add(t);this.updateOverridePropertyPatternKey()}doRegisterConfigurations(e,t){const i=[];return e.forEach((e=>{i.push(...this.validateAndRegisterProperties(e,t,e.extensionInfo)),this.configurationContributors.push(e),this.registerJSONConfiguration(e)})),i}validateAndRegisterProperties(e,t=!0,i,n=3){var s;n=o.Jp(e.scope)?n:e.scope;let r=[],a=e.properties;if(a)for(let e in a){if(t&&w(e)){delete a[e];continue}const l=a[e];this.updatePropertyDefaultValue(e,l),v.test(e)?l.scope=void 0:(l.scope=o.Jp(l.scope)?n:l.scope,l.restricted=o.Jp(l.restricted)?!!(null===(s=null==i?void 0:i.restrictedConfigurations)||void 0===s?void 0:s.includes(e)):l.restricted),!a[e].hasOwnProperty("included")||a[e].included?(this.configurationProperties[e]=a[e],!a[e].deprecationMessage&&a[e].markdownDeprecationMessage&&(a[e].deprecationMessage=a[e].markdownDeprecationMessage),r.push(e)):(this.excludedConfigurationProperties[e]=a[e],delete a[e])}let l=e.allOf;if(l)for(let e of l)r.push(...this.validateAndRegisterProperties(e,t,i,n));return r}getConfigurationProperties(){return this.configurationProperties}registerJSONConfiguration(e){const t=e=>{let i=e.properties;if(i)for(const e in i)this.updateSchema(e,i[e]);let n=e.allOf;n&&n.forEach(t)};t(e)}updateSchema(e,t){switch(c.properties[e]=t,t.scope){case 1:d.properties[e]=t;break;case 2:h.properties[e]=t;break;case 6:u.properties[e]=t;break;case 3:g.properties[e]=t;break;case 4:p.properties[e]=t;break;case 5:p.properties[e]=t,this.resourceLanguageSettingsSchema.properties[e]=t}}updateOverridePropertyPatternKey(){for(const e of this.overrideIdentifiers.values()){const t=`[${e}]`,i={type:"object",description:s.N("overrideSettings.defaultDescription","Configure editor settings to be overridden for a language."),errorMessage:s.N("overrideSettings.errorMessage","This setting does not support per-language configuration."),$ref:f};this.updatePropertyDefaultValue(t,i),c.properties[t]=i,d.properties[t]=i,h.properties[t]=i,u.properties[t]=i,g.properties[t]=i,p.properties[t]=i}this._onDidSchemaChange.fire()}updatePropertyDefaultValue(e,t){let i=this.defaultValues[e];o.o8(i)&&(i=t.default),o.o8(i)&&(i=function(e){switch(Array.isArray(e)?e[0]:e){case"boolean":return!1;case"integer":case"number":return 0;case"string":return"";case"array":return[];case"object":return{};default:return null}}(t.type)),t.default=i}};function w(e){return e.trim()?v.test(e)?s.N("config.property.languageDefault","Cannot register '{0}'. This matches property pattern '\\\\[.*\\\\]$' for describing language specific editor settings. Use 'configurationDefaults' contribution.",e):void 0!==b.getConfigurationProperties()[e]?s.N("config.property.duplicate","Cannot register '{0}'. This property is already registered.",e):null:s.N("config.property.empty","Cannot register an empty property")}a.B.add(l.Configuration,b)},38819:(e,t,i)=>{"use strict";i.d(t,{Ao:()=>c,Eq:()=>M,Fb:()=>d,K8:()=>P,i6:()=>T,uy:()=>E});var n=i(1432),o=i(97295),s=i(72065);let r=n.WE||"";const a=new Map;a.set("false",!1),a.set("true",!0),a.set("isMac",n.dz),a.set("isLinux",n.IJ),a.set("isWindows",n.ED),a.set("isWeb",n.$L),a.set("isMacNative",n.dz&&!n.$L),a.set("isEdge",r.indexOf("Edg/")>=0),a.set("isFirefox",r.indexOf("Firefox")>=0),a.set("isChrome",r.indexOf("Chrome")>=0),a.set("isSafari",r.indexOf("Safari")>=0);const l=Object.prototype.hasOwnProperty;class c{static has(e){return p.create(e)}static equals(e,t){return f.create(e,t)}static regex(e,t){return k.create(e,t)}static not(e){return b.create(e)}static and(...e){return D.create(e,null)}static or(...e){return I.create(e,null,!0)}static deserialize(e,t=!1){if(e)return this._deserializeOrExpression(e,t)}static _deserializeOrExpression(e,t){let i=e.split("||");return I.create(i.map((e=>this._deserializeAndExpression(e,t))),null,!0)}static _deserializeAndExpression(e,t){let i=e.split("&&");return D.create(i.map((e=>this._deserializeOne(e,t))),null)}static _deserializeOne(e,t){if((e=e.trim()).indexOf("!=")>=0){let i=e.split("!=");return _.create(i[0].trim(),this._deserializeValue(i[1],t))}if(e.indexOf("==")>=0){let i=e.split("==");return f.create(i[0].trim(),this._deserializeValue(i[1],t))}if(e.indexOf("=~")>=0){let i=e.split("=~");return k.create(i[0].trim(),this._deserializeRegexValue(i[1],t))}if(e.indexOf(" in ")>=0){let t=e.split(" in ");return m.create(t[0].trim(),t[1].trim())}if(/^[^<=>]+>=[^<=>]+$/.test(e)){const t=e.split(">=");return C.create(t[0].trim(),t[1].trim())}if(/^[^<=>]+>[^<=>]+$/.test(e)){const t=e.split(">");return y.create(t[0].trim(),t[1].trim())}if(/^[^<=>]+<=[^<=>]+$/.test(e)){const t=e.split("<=");return S.create(t[0].trim(),t[1].trim())}if(/^[^<=>]+<[^<=>]+$/.test(e)){const t=e.split("<");return x.create(t[0].trim(),t[1].trim())}return/^\!\s*/.test(e)?b.create(e.substr(1).trim()):p.create(e)}static _deserializeValue(e,t){if("true"===(e=e.trim()))return!0;if("false"===e)return!1;let i=/^'([^']*)'$/.exec(e);return i?i[1].trim():e}static _deserializeRegexValue(e,t){if((0,o.m5)(e)){if(t)throw new Error("missing regexp-value for =~-expression");return console.warn("missing regexp-value for =~-expression"),null}let i=e.indexOf("/"),n=e.lastIndexOf("/");if(i===n||i<0){if(t)throw new Error(`bad regexp-value '${e}', missing /-enclosure`);return console.warn(`bad regexp-value '${e}', missing /-enclosure`),null}let s=e.slice(i+1,n),r="i"===e[n+1]?"i":"";try{return new RegExp(s,r)}catch(i){if(t)throw new Error(`bad regexp-value '${e}', parse error: ${i}`);return console.warn(`bad regexp-value '${e}', parse error: ${i}`),null}}}function d(e,t){const i=e?e.substituteConstants():void 0,n=t?t.substituteConstants():void 0;return!i&&!n||!(!i||!n)&&i.equals(n)}function h(e,t){return e.cmp(t)}class u{constructor(){this.type=0}cmp(e){return this.type-e.type}equals(e){return e.type===this.type}substituteConstants(){return this}evaluate(e){return!1}serialize(){return"false"}keys(){return[]}negate(){return g.INSTANCE}}u.INSTANCE=new u;class g{constructor(){this.type=1}cmp(e){return this.type-e.type}equals(e){return e.type===this.type}substituteConstants(){return this}evaluate(e){return!0}serialize(){return"true"}keys(){return[]}negate(){return u.INSTANCE}}g.INSTANCE=new g;class p{constructor(e,t){this.key=e,this.negated=t,this.type=2}static create(e,t=null){const i=a.get(e);return"boolean"==typeof i?i?g.INSTANCE:u.INSTANCE:new p(e,t)}cmp(e){return e.type!==this.type?this.type-e.type:A(this.key,e.key)}equals(e){return e.type===this.type&&this.key===e.key}substituteConstants(){const e=a.get(this.key);return"boolean"==typeof e?e?g.INSTANCE:u.INSTANCE:this}evaluate(e){return!!e.getValue(this.key)}serialize(){return this.key}keys(){return[this.key]}negate(){return this.negated||(this.negated=b.create(this.key,this)),this.negated}}class f{constructor(e,t,i){this.key=e,this.value=t,this.negated=i,this.type=4}static create(e,t,i=null){if("boolean"==typeof t)return t?p.create(e,i):b.create(e,i);const n=a.get(e);if("boolean"==typeof n){return t===(n?"true":"false")?g.INSTANCE:u.INSTANCE}return new f(e,t,i)}cmp(e){return e.type!==this.type?this.type-e.type:O(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&(this.key===e.key&&this.value===e.value)}substituteConstants(){const e=a.get(this.key);if("boolean"==typeof e){const t=e?"true":"false";return this.value===t?g.INSTANCE:u.INSTANCE}return this}evaluate(e){return e.getValue(this.key)==this.value}serialize(){return`${this.key} == '${this.value}'`}keys(){return[this.key]}negate(){return this.negated||(this.negated=_.create(this.key,this.value,this)),this.negated}}class m{constructor(e,t){this.key=e,this.valueKey=t,this.type=10,this.negated=null}static create(e,t){return new m(e,t)}cmp(e){return e.type!==this.type?this.type-e.type:O(this.key,this.valueKey,e.key,e.valueKey)}equals(e){return e.type===this.type&&(this.key===e.key&&this.valueKey===e.valueKey)}substituteConstants(){return this}evaluate(e){const t=e.getValue(this.valueKey),i=e.getValue(this.key);return Array.isArray(t)?t.indexOf(i)>=0:"string"==typeof i&&"object"==typeof t&&null!==t&&l.call(t,i)}serialize(){return`${this.key} in '${this.valueKey}'`}keys(){return[this.key,this.valueKey]}negate(){return this.negated||(this.negated=v.create(this)),this.negated}}class v{constructor(e){this._actual=e,this.type=11}static create(e){return new v(e)}cmp(e){return e.type!==this.type?this.type-e.type:this._actual.cmp(e._actual)}equals(e){return e.type===this.type&&this._actual.equals(e._actual)}substituteConstants(){return this}evaluate(e){return!this._actual.evaluate(e)}serialize(){throw new Error("Method not implemented.")}keys(){return this._actual.keys()}negate(){return this._actual}}class _{constructor(e,t,i){this.key=e,this.value=t,this.negated=i,this.type=5}static create(e,t,i=null){if("boolean"==typeof t)return t?b.create(e,i):p.create(e,i);const n=a.get(e);if("boolean"==typeof n){return t===(n?"true":"false")?u.INSTANCE:g.INSTANCE}return new _(e,t,i)}cmp(e){return e.type!==this.type?this.type-e.type:O(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&(this.key===e.key&&this.value===e.value)}substituteConstants(){const e=a.get(this.key);if("boolean"==typeof e){const t=e?"true":"false";return this.value===t?u.INSTANCE:g.INSTANCE}return this}evaluate(e){return e.getValue(this.key)!=this.value}serialize(){return`${this.key} != '${this.value}'`}keys(){return[this.key]}negate(){return this.negated||(this.negated=f.create(this.key,this.value,this)),this.negated}}class b{constructor(e,t){this.key=e,this.negated=t,this.type=3}static create(e,t=null){const i=a.get(e);return"boolean"==typeof i?i?u.INSTANCE:g.INSTANCE:new b(e,t)}cmp(e){return e.type!==this.type?this.type-e.type:A(this.key,e.key)}equals(e){return e.type===this.type&&this.key===e.key}substituteConstants(){const e=a.get(this.key);return"boolean"==typeof e?e?u.INSTANCE:g.INSTANCE:this}evaluate(e){return!e.getValue(this.key)}serialize(){return`!${this.key}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=p.create(this.key,this)),this.negated}}function w(e,t){if("string"==typeof e){const t=parseFloat(e);isNaN(t)||(e=t)}return"string"==typeof e||"number"==typeof e?t(e):u.INSTANCE}class y{constructor(e,t,i){this.key=e,this.value=t,this.negated=i,this.type=12}static create(e,t,i=null){return w(t,(t=>new y(e,t,i)))}cmp(e){return e.type!==this.type?this.type-e.type:O(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&(this.key===e.key&&this.value===e.value)}substituteConstants(){return this}evaluate(e){return"string"!=typeof this.value&&parseFloat(e.getValue(this.key))>this.value}serialize(){return`${this.key} > ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=S.create(this.key,this.value,this)),this.negated}}class C{constructor(e,t,i){this.key=e,this.value=t,this.negated=i,this.type=13}static create(e,t,i=null){return w(t,(t=>new C(e,t,i)))}cmp(e){return e.type!==this.type?this.type-e.type:O(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&(this.key===e.key&&this.value===e.value)}substituteConstants(){return this}evaluate(e){return"string"!=typeof this.value&&parseFloat(e.getValue(this.key))>=this.value}serialize(){return`${this.key} >= ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=x.create(this.key,this.value,this)),this.negated}}class x{constructor(e,t,i){this.key=e,this.value=t,this.negated=i,this.type=14}static create(e,t,i=null){return w(t,(t=>new x(e,t,i)))}cmp(e){return e.type!==this.type?this.type-e.type:O(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&(this.key===e.key&&this.value===e.value)}substituteConstants(){return this}evaluate(e){return"string"!=typeof this.value&&parseFloat(e.getValue(this.key))<this.value}serialize(){return`${this.key} < ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=C.create(this.key,this.value,this)),this.negated}}class S{constructor(e,t,i){this.key=e,this.value=t,this.negated=i,this.type=15}static create(e,t,i=null){return w(t,(t=>new S(e,t,i)))}cmp(e){return e.type!==this.type?this.type-e.type:O(this.key,this.value,e.key,e.value)}equals(e){return e.type===this.type&&(this.key===e.key&&this.value===e.value)}substituteConstants(){return this}evaluate(e){return"string"!=typeof this.value&&parseFloat(e.getValue(this.key))<=this.value}serialize(){return`${this.key} <= ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=y.create(this.key,this.value,this)),this.negated}}class k{constructor(e,t){this.key=e,this.regexp=t,this.type=7,this.negated=null}static create(e,t){return new k(e,t)}cmp(e){if(e.type!==this.type)return this.type-e.type;if(this.key<e.key)return-1;if(this.key>e.key)return 1;const t=this.regexp?this.regexp.source:"",i=e.regexp?e.regexp.source:"";return t<i?-1:t>i?1:0}equals(e){if(e.type===this.type){const t=this.regexp?this.regexp.source:"",i=e.regexp?e.regexp.source:"";return this.key===e.key&&t===i}return!1}substituteConstants(){return this}evaluate(e){let t=e.getValue(this.key);return!!this.regexp&&this.regexp.test(t)}serialize(){const e=this.regexp?`/${this.regexp.source}/${this.regexp.ignoreCase?"i":""}`:"/invalid/";return`${this.key} =~ ${e}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=L.create(this)),this.negated}}class L{constructor(e){this._actual=e,this.type=8}static create(e){return new L(e)}cmp(e){return e.type!==this.type?this.type-e.type:this._actual.cmp(e._actual)}equals(e){return e.type===this.type&&this._actual.equals(e._actual)}substituteConstants(){return this}evaluate(e){return!this._actual.evaluate(e)}serialize(){throw new Error("Method not implemented.")}keys(){return this._actual.keys()}negate(){return this._actual}}function N(e){let t=null;for(let i=0,n=e.length;i<n;i++){const n=e[i].substituteConstants();if(e[i]!==n&&null===t){t=[];for(let n=0;n<i;n++)t[n]=e[n]}null!==t&&(t[i]=n)}return null===t?e:t}class D{constructor(e,t){this.expr=e,this.negated=t,this.type=6}static create(e,t){return D._normalizeArr(e,t)}cmp(e){if(e.type!==this.type)return this.type-e.type;if(this.expr.length<e.expr.length)return-1;if(this.expr.length>e.expr.length)return 1;for(let t=0,i=this.expr.length;t<i;t++){const i=h(this.expr[t],e.expr[t]);if(0!==i)return i}return 0}equals(e){if(e.type===this.type){if(this.expr.length!==e.expr.length)return!1;for(let t=0,i=this.expr.length;t<i;t++)if(!this.expr[t].equals(e.expr[t]))return!1;return!0}return!1}substituteConstants(){const e=N(this.expr);return e===this.expr?this:D.create(e,this.negated)}evaluate(e){for(let t=0,i=this.expr.length;t<i;t++)if(!this.expr[t].evaluate(e))return!1;return!0}static _normalizeArr(e,t){const i=[];let n=!1;for(const t of e)if(t)if(1!==t.type){if(0===t.type)return u.INSTANCE;6!==t.type?i.push(t):i.push(...t.expr)}else n=!0;if(0===i.length&&n)return g.INSTANCE;if(0!==i.length){if(1===i.length)return i[0];i.sort(h);for(let e=1;e<i.length;e++)i[e-1].equals(i[e])&&(i.splice(e,1),e--);if(1===i.length)return i[0];for(;i.length>1;){const e=i[i.length-1];if(9!==e.type)break;i.pop();const t=i.pop(),n=0===i.length,o=I.create(e.expr.map((e=>D.create([e,t],null))),null,n);o&&(i.push(o),i.sort(h))}return 1===i.length?i[0]:new D(i,t)}}serialize(){return this.expr.map((e=>e.serialize())).join(" && ")}keys(){const e=[];for(let t of this.expr)e.push(...t.keys());return e}negate(){if(!this.negated){const e=[];for(let t of this.expr)e.push(t.negate());this.negated=I.create(e,this,!0)}return this.negated}}class I{constructor(e,t){this.expr=e,this.negated=t,this.type=9}static create(e,t,i){return I._normalizeArr(e,t,i)}cmp(e){if(e.type!==this.type)return this.type-e.type;if(this.expr.length<e.expr.length)return-1;if(this.expr.length>e.expr.length)return 1;for(let t=0,i=this.expr.length;t<i;t++){const i=h(this.expr[t],e.expr[t]);if(0!==i)return i}return 0}equals(e){if(e.type===this.type){if(this.expr.length!==e.expr.length)return!1;for(let t=0,i=this.expr.length;t<i;t++)if(!this.expr[t].equals(e.expr[t]))return!1;return!0}return!1}substituteConstants(){const e=N(this.expr);return e===this.expr?this:I.create(e,this.negated,!1)}evaluate(e){for(let t=0,i=this.expr.length;t<i;t++)if(this.expr[t].evaluate(e))return!0;return!1}static _normalizeArr(e,t,i){let n=[],o=!1;if(e){for(let t=0,i=e.length;t<i;t++){const i=e[t];if(i)if(0!==i.type){if(1===i.type)return g.INSTANCE;9!==i.type?n.push(i):n=n.concat(i.expr)}else o=!0}if(0===n.length&&o)return u.INSTANCE;n.sort(h)}if(0!==n.length){if(1===n.length)return n[0];for(let e=1;e<n.length;e++)n[e-1].equals(n[e])&&(n.splice(e,1),e--);if(1===n.length)return n[0];if(i){for(let e=0;e<n.length;e++)for(let t=e+1;t<n.length;t++)P(n[e],n[t])&&(n.splice(t,1),t--);if(1===n.length)return n[0]}return new I(n,t)}}serialize(){return this.expr.map((e=>e.serialize())).join(" || ")}keys(){const e=[];for(let t of this.expr)e.push(...t.keys());return e}negate(){if(!this.negated){let e=[];for(let t of this.expr)e.push(t.negate());for(;e.length>1;){const t=e.shift(),i=e.shift(),n=[];for(const e of R(t))for(const t of R(i))n.push(D.create([e,t],null));const o=0===e.length;e.unshift(I.create(n,null,o))}this.negated=e[0]}return this.negated}}class E extends p{constructor(e,t,i){super(e,null),this._defaultValue=t,"object"==typeof i?E._info.push(Object.assign(Object.assign({},i),{key:e})):!0!==i&&E._info.push({key:e,description:i,type:null!=t?typeof t:void 0})}static all(){return E._info.values()}bindTo(e){return e.createKey(this.key,this._defaultValue)}getValue(e){return e.getContextKeyValue(this.key)}toNegated(){return this.negate()}isEqualTo(e){return f.create(this.key,e)}}E._info=[];const T=(0,s.yh)("contextKeyService"),M="setContext";function A(e,t){return e<t?-1:e>t?1:0}function O(e,t,i,n){return e<i?-1:e>i?1:t<n?-1:t>n?1:0}function P(e,t){if(6===t.type&&9!==e.type&&6!==e.type)for(const i of t.expr)if(e.equals(i))return!0;const i=R(e.negate()).concat(R(t));i.sort(h);for(let e=0;e<i.length;e++){const t=i[e].negate();for(let n=e+1;n<i.length;n++){const e=i[n];if(t.equals(e))return!0}}return!1}function R(e){return 9===e.type?e.expr:[e]}},39282:(e,t,i)=>{"use strict";i.d(t,{c:()=>s,d:()=>r});var n=i(1432),o=i(63580);const s=new(i(38819).uy)("isWindows",n.ED,(0,o.N)("isWindows","Whether the operating system is Windows")),r="inputFocus"},5606:(e,t,i)=>{"use strict";i.d(t,{i:()=>s,u:()=>o});var n=i(72065);const o=(0,n.yh)("contextViewService"),s=(0,n.yh)("contextMenuService")},28820:(e,t,i)=>{"use strict";i.d(t,{S:()=>n});const n=(0,i(72065).yh)("dialogService")},97108:(e,t,i)=>{"use strict";i.d(t,{M:()=>n});class n{constructor(e,t=[],i=!1){this.ctor=e,this.staticArguments=t,this.supportsDelayedInstantiation=i}}},65026:(e,t,i)=>{"use strict";i.d(t,{d:()=>r,z:()=>s});var n=i(97108);const o=[];function s(e,t,i){t instanceof n.M||(t=new n.M(t,[],i)),o.push([e,t])}function r(){return o}},72065:(e,t,i)=>{"use strict";var n;i.d(t,{I8:()=>n,TG:()=>o,jt:()=>a,yh:()=>r}),function(e){e.serviceIds=new Map,e.DI_TARGET="$di$target",e.DI_DEPENDENCIES="$di$dependencies",e.getServiceDependencies=function(t){return t[e.DI_DEPENDENCIES]||[]}}(n||(n={}));const o=r("instantiationService");function s(e,t,i,o){t[n.DI_TARGET]===t?t[n.DI_DEPENDENCIES].push({id:e,index:i,optional:o}):(t[n.DI_DEPENDENCIES]=[{id:e,index:i,optional:o}],t[n.DI_TARGET]=t)}function r(e){if(n.serviceIds.has(e))return n.serviceIds.get(e);const t=function(e,i,n){if(3!==arguments.length)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");s(t,e,n,!1)};return t.toString=()=>e,n.serviceIds.set(e,t),t}function a(e){return function(t,i,n){if(3!==arguments.length)throw new Error("@optional-decorator can only be used to decorate a parameter");s(e,t,n,!0)}}},60972:(e,t,i)=>{"use strict";i.d(t,{y:()=>n});class n{constructor(...e){this._entries=new Map;for(let[t,i]of e)this.set(t,i)}set(e,t){const i=this._entries.get(e);return this._entries.set(e,t),i}has(e){return this._entries.has(e)}get(e){return this._entries.get(e)}}},81294:(e,t,i)=>{"use strict";i.d(t,{I:()=>s});var n=i(4669),o=i(89872);const s={JSONContribution:"base.contributions.json"};const r=new class{constructor(){this._onDidChangeSchema=new n.Q5,this.schemasById={}}registerSchema(e,t){var i;this.schemasById[(i=e,i.length>0&&"#"===i.charAt(i.length-1)?i.substring(0,i.length-1):i)]=t,this._onDidChangeSchema.fire(e)}notifySchemaChanged(e){this._onDidChangeSchema.fire(e)}};o.B.add(s.JSONContribution,r)},91847:(e,t,i)=>{"use strict";i.d(t,{d:()=>n});const n=(0,i(72065).yh)("keybindingService")},49989:(e,t,i)=>{"use strict";i.d(t,{W:()=>l});var n=i(8313),o=i(1432),s=i(94565),r=i(89872);class a{constructor(){this._coreKeybindings=[],this._extensionKeybindings=[],this._cachedMergedKeybindings=null}static bindToCurrentPlatform(e){if(1===o.OS){if(e&&e.win)return e.win}else if(2===o.OS){if(e&&e.mac)return e.mac}else if(e&&e.linux)return e.linux;return e}registerKeybindingRule(e){const t=a.bindToCurrentPlatform(e);if(t&&t.primary){const i=(0,n.gm)(t.primary,o.OS);i&&this._registerDefaultKeybinding(i,e.id,e.args,e.weight,0,e.when)}if(t&&Array.isArray(t.secondary))for(let i=0,s=t.secondary.length;i<s;i++){const s=t.secondary[i],r=(0,n.gm)(s,o.OS);r&&this._registerDefaultKeybinding(r,e.id,e.args,e.weight,-i-1,e.when)}}registerCommandAndKeybindingRule(e){this.registerKeybindingRule(e),s.P.registerCommand(e)}static _mightProduceChar(e){return e>=21&&e<=30||(e>=31&&e<=56||(80===e||81===e||82===e||83===e||84===e||85===e||86===e||110===e||111===e||87===e||88===e||89===e||90===e||91===e||92===e))}_assertNoCtrlAlt(e,t){e.ctrlKey&&e.altKey&&!e.metaKey&&a._mightProduceChar(e.keyCode)&&console.warn("Ctrl+Alt+ keybindings should not be used by default under Windows. Offender: ",e," for ",t)}_registerDefaultKeybinding(e,t,i,n,s,r){1===o.OS&&this._assertNoCtrlAlt(e.parts[0],t),this._coreKeybindings.push({keybinding:e.parts,command:t,commandArgs:i,when:r,weight1:n,weight2:s,extensionId:null,isBuiltinExtension:!1}),this._cachedMergedKeybindings=null}getDefaultKeybindings(){return this._cachedMergedKeybindings||(this._cachedMergedKeybindings=[].concat(this._coreKeybindings).concat(this._extensionKeybindings),this._cachedMergedKeybindings.sort(c)),this._cachedMergedKeybindings.slice(0)}}const l=new a;function c(e,t){return e.weight1!==t.weight1?e.weight1-t.weight1:e.command<t.command?-1:e.command>t.command?1:e.weight2-t.weight2}r.B.add("platform.keybindingsRegistry",l)},44349:(e,t,i)=>{"use strict";i.d(t,{e:()=>n});const n=(0,i(72065).yh)("labelService")},20343:(e,t,i)=>{"use strict";i.d(t,{Lw:()=>qe,XN:()=>Ze,ls:()=>It,ev:()=>_t,CQ:()=>Qe});var n=i(65321),o=i(9488),s=i(71050),r=i(4669),a=i(5976),l=(i(60408),i(43799));class c{constructor(e,t){this.renderer=e,this.modelProvider=t}get templateId(){return this.renderer.templateId}renderTemplate(e){return{data:this.renderer.renderTemplate(e),disposable:a.JT.None}}renderElement(e,t,i,n){if(i.disposable&&i.disposable.dispose(),!i.data)return;const o=this.modelProvider();if(o.isResolved(e))return this.renderer.renderElement(o.get(e),e,i.data,n);const r=new s.A,a=o.resolve(e,r.token);i.disposable={dispose:()=>r.cancel()},this.renderer.renderPlaceholder(e,i.data),a.then((t=>this.renderer.renderElement(t,e,i.data,n)))}disposeTemplate(e){e.disposable&&(e.disposable.dispose(),e.disposable=void 0),e.data&&(this.renderer.disposeTemplate(e.data),e.data=void 0)}}class d{constructor(e,t){this.modelProvider=e,this.accessibilityProvider=t}getWidgetAriaLabel(){return this.accessibilityProvider.getWidgetAriaLabel()}getAriaLabel(e){const t=this.modelProvider();return t.isResolved(e)?this.accessibilityProvider.getAriaLabel(t.get(e)):null}}class h{constructor(e,t,i,n,o={}){const s=()=>this.model,r=n.map((e=>new c(e,s)));this.list=new l.aV(e,t,i,r,function(e,t){return Object.assign(Object.assign({},t),{accessibilityProvider:t.accessibilityProvider&&new d(e,t.accessibilityProvider)})}(s,o))}updateOptions(e){this.list.updateOptions(e)}getHTMLElement(){return this.list.getHTMLElement()}get onDidFocus(){return this.list.onDidFocus}get onDidDispose(){return this.list.onDidDispose}get onMouseDblClick(){return r.ju.map(this.list.onMouseDblClick,(({element:e,index:t,browserEvent:i})=>({element:void 0===e?void 0:this._model.get(e),index:t,browserEvent:i})))}get onPointer(){return r.ju.map(this.list.onPointer,(({element:e,index:t,browserEvent:i})=>({element:void 0===e?void 0:this._model.get(e),index:t,browserEvent:i})))}get onDidChangeSelection(){return r.ju.map(this.list.onDidChangeSelection,(({elements:e,indexes:t,browserEvent:i})=>({elements:e.map((e=>this._model.get(e))),indexes:t,browserEvent:i})))}get model(){return this._model}set model(e){this._model=e,this.list.splice(0,this.list.length,(0,o.w6)(e.length))}getFocus(){return this.list.getFocus()}getSelection(){return this.list.getSelection()}getSelectedElements(){return this.getSelection().map((e=>this.model.get(e)))}style(e){this.list.style(e)}dispose(){this.list.dispose()}}var u=i(23937);i(87868);class g{constructor(e,t,i){this.columns=e,this.getColumnSize=i,this.templateId=g.TemplateId,this.renderedTemplates=new Set;const n=new Map(t.map((e=>[e.templateId,e])));this.renderers=[];for(const t of e){const e=n.get(t.templateId);if(!e)throw new Error(`Table cell renderer for template id ${t.templateId} not found.`);this.renderers.push(e)}}renderTemplate(e){const t=(0,n.R3)(e,(0,n.$)(".monaco-table-tr")),i=[],o=[];for(let e=0;e<this.columns.length;e++){const s=this.renderers[e],r=(0,n.R3)(t,(0,n.$)(".monaco-table-td",{"data-col-index":e}));r.style.width=`${this.getColumnSize(e)}px`,i.push(r),o.push(s.renderTemplate(r))}const s={container:e,cellContainers:i,cellTemplateData:o};return this.renderedTemplates.add(s),s}renderElement(e,t,i,n){for(let o=0;o<this.columns.length;o++){const s=this.columns[o].project(e);this.renderers[o].renderElement(s,t,i.cellTemplateData[o],n)}}disposeElement(e,t,i,n){for(let o=0;o<this.columns.length;o++){const s=this.renderers[o];if(s.disposeElement){const r=this.columns[o].project(e);s.disposeElement(r,t,i.cellTemplateData[o],n)}}}disposeTemplate(e){for(let t=0;t<this.columns.length;t++){this.renderers[t].disposeTemplate(e.cellTemplateData[t])}(0,n.PO)(e.container),this.renderedTemplates.delete(e)}layoutColumn(e,t){for(const{cellContainers:i}of this.renderedTemplates)i[e].style.width=`${t}px`}}g.TemplateId="row";class p{constructor(e,t){this.column=e,this.index=t,this._onDidLayout=new r.Q5,this.onDidLayout=this._onDidLayout.event,this.element=(0,n.$)(".monaco-table-th",{"data-col-index":t,title:e.tooltip},e.label)}get minimumSize(){var e;return null!==(e=this.column.minimumWidth)&&void 0!==e?e:120}get maximumSize(){var e;return null!==(e=this.column.maximumWidth)&&void 0!==e?e:Number.POSITIVE_INFINITY}get onDidChange(){var e;return null!==(e=this.column.onDidChangeWidthConstraints)&&void 0!==e?e:r.ju.None}layout(e){this._onDidLayout.fire([this.index,e])}}class f{constructor(e,t,i,o,s,a){this.virtualDelegate=i,this.domId="table_id_"+ ++f.InstanceCount,this.cachedHeight=0,this.domNode=(0,n.R3)(t,(0,n.$)(`.monaco-table.${this.domId}`));const c=o.map(((e,t)=>new p(e,t))),d={size:c.reduce(((e,t)=>e+t.column.weight),0),views:c.map((e=>({size:e.column.weight,view:e})))};this.splitview=new u.z(this.domNode,{orientation:1,scrollbarVisibility:2,getSashOrthogonalSize:()=>this.cachedHeight,descriptor:d}),this.splitview.el.style.height=`${i.headerRowHeight}px`,this.splitview.el.style.lineHeight=`${i.headerRowHeight}px`;const h=new g(o,s,(e=>this.splitview.getViewSize(e)));var m;this.list=new l.aV(e,this.domNode,(m=i,{getHeight:e=>m.getHeight(e),getTemplateId:()=>g.TemplateId}),[h],a),this.columnLayoutDisposable=r.ju.any(...c.map((e=>e.onDidLayout)))((([e,t])=>h.layoutColumn(e,t))),this.styleElement=(0,n.dS)(this.domNode),this.style({})}get onDidChangeFocus(){return this.list.onDidChangeFocus}get onDidChangeSelection(){return this.list.onDidChangeSelection}get onMouseDblClick(){return this.list.onMouseDblClick}get onPointer(){return this.list.onPointer}get onDidFocus(){return this.list.onDidFocus}get onDidDispose(){return this.list.onDidDispose}updateOptions(e){this.list.updateOptions(e)}splice(e,t,i=[]){this.list.splice(e,t,i)}getHTMLElement(){return this.domNode}style(e){const t=[];t.push(`.monaco-table.${this.domId} > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\ttop: ${this.virtualDelegate.headerRowHeight+1}px;\n\t\t\theight: calc(100% - ${this.virtualDelegate.headerRowHeight}px);\n\t\t}`),this.styleElement.textContent=t.join("\n"),this.list.style(e)}getSelectedElements(){return this.list.getSelectedElements()}getSelection(){return this.list.getSelection()}getFocus(){return this.list.getFocus()}dispose(){this.splitview.dispose(),this.list.dispose(),this.columnLayoutDisposable.dispose()}}f.InstanceCount=0;var m,v=i(25707),_=i(23547),b=i(4850),w=i(59069);!function(e){e[e.Unknown=0]="Unknown",e[e.Twistie=1]="Twistie",e[e.Element=2]="Element"}(m||(m={}));class y extends Error{constructor(e,t){super(`TreeError [${e}] ${t}`)}}class C{constructor(e){this.fn=e,this._map=new WeakMap}map(e){let t=this._map.get(e);return t||(t=this.fn(e),this._map.set(e,t)),t}}var x=i(2484),S=i(53725);function k(e){return"object"==typeof e&&"visibility"in e&&"data"in e}function L(e){switch(e){case!0:return 1;case!1:return 0;default:return e}}function N(e){return"boolean"==typeof e.collapsible}class D{constructor(e,t,i,n={}){this.user=e,this.list=t,this.rootRef=[],this.eventBufferer=new r.E7,this._onDidChangeCollapseState=new r.Q5,this.onDidChangeCollapseState=this.eventBufferer.wrapEvent(this._onDidChangeCollapseState.event),this._onDidChangeRenderNodeCount=new r.Q5,this.onDidChangeRenderNodeCount=this.eventBufferer.wrapEvent(this._onDidChangeRenderNodeCount.event),this._onDidSplice=new r.Q5,this.onDidSplice=this._onDidSplice.event,this.collapseByDefault=void 0!==n.collapseByDefault&&n.collapseByDefault,this.filter=n.filter,this.autoExpandSingleChildren=void 0!==n.autoExpandSingleChildren&&n.autoExpandSingleChildren,this.root={parent:void 0,element:i,children:[],depth:0,visibleChildrenCount:0,visibleChildIndex:-1,collapsible:!1,collapsed:!1,renderNodeCount:0,visibility:1,visible:!0,filterData:void 0}}splice(e,t,i=S.$.empty(),n={}){if(0===e.length)throw new y(this.user,"Invalid tree location");n.diffIdentityProvider?this.spliceSmart(n.diffIdentityProvider,e,t,i,n):this.spliceSimple(e,t,i,n)}spliceSmart(e,t,i,n,o,s){var r;void 0===n&&(n=S.$.empty()),void 0===s&&(s=null!==(r=o.diffDepth)&&void 0!==r?r:0);const{parentNode:a}=this.getParentNodeWithListIndex(t);if(!a.lastDiffIds)return this.spliceSimple(t,i,n,o);const l=[...n],c=t[t.length-1],d=new x.Hs({getElements:()=>a.lastDiffIds},{getElements:()=>[...a.children.slice(0,c),...l,...a.children.slice(c+i)].map((t=>e.getId(t.element).toString()))}).ComputeDiff(!1);if(d.quitEarly)return a.lastDiffIds=void 0,this.spliceSimple(t,i,l,o);const h=t.slice(0,-1),u=(t,i,n)=>{if(s>0)for(let r=0;r<n;r++)t--,i--,this.spliceSmart(e,[...h,t,0],Number.MAX_SAFE_INTEGER,l[i].children,o,s-1)};let g=Math.min(a.children.length,c+i),p=l.length;for(const e of d.changes.sort(((e,t)=>t.originalStart-e.originalStart)))u(g,p,g-(e.originalStart+e.originalLength)),g=e.originalStart,p=e.modifiedStart-c,this.spliceSimple([...h,g],e.originalLength,S.$.slice(l,p,p+e.modifiedLength),o);u(g,p,g)}spliceSimple(e,t,i=S.$.empty(),{onDidCreateNode:n,onDidDeleteNode:s,diffIdentityProvider:r}){const{parentNode:a,listIndex:l,revealed:c,visible:d}=this.getParentNodeWithListIndex(e),h=[],u=S.$.map(i,(e=>this.createTreeNode(e,a,a.visible?1:0,c,h,n))),g=e[e.length-1],p=a.children.length>0;let f=0;for(let e=g;e>=0&&e<a.children.length;e--){const t=a.children[e];if(t.visible){f=t.visibleChildIndex;break}}const m=[];let v=0,_=0;for(const e of u)m.push(e),_+=e.renderNodeCount,e.visible&&(e.visibleChildIndex=f+v++);const b=(0,o.db)(a.children,g,t,m);r?a.lastDiffIds?(0,o.db)(a.lastDiffIds,g,t,m.map((e=>r.getId(e.element).toString()))):a.lastDiffIds=a.children.map((e=>r.getId(e.element).toString())):a.lastDiffIds=void 0;let w=0;for(const e of b)e.visible&&w++;if(0!==w)for(let e=g+m.length;e<a.children.length;e++){const t=a.children[e];t.visible&&(t.visibleChildIndex-=w)}if(a.visibleChildrenCount+=v-w,c&&d){const e=b.reduce(((e,t)=>e+(t.visible?t.renderNodeCount:0)),0);this._updateAncestorsRenderNodeCount(a,_-e),this.list.splice(l,e,h)}if(b.length>0&&s){const e=t=>{s(t),t.children.forEach(e)};b.forEach(e)}const y=a.children.length>0;p!==y&&this.setCollapsible(e.slice(0,-1),y),this._onDidSplice.fire({insertedNodes:m,deletedNodes:b});let C=a;for(;C;){if(2===C.visibility){this.refilter();break}C=C.parent}}rerender(e){if(0===e.length)throw new y(this.user,"Invalid tree location");const{node:t,listIndex:i,revealed:n}=this.getTreeNodeWithListIndex(e);t.visible&&n&&this.list.splice(i,1,[t])}has(e){return this.hasTreeNode(e)}getListIndex(e){const{listIndex:t,visible:i,revealed:n}=this.getTreeNodeWithListIndex(e);return i&&n?t:-1}getListRenderCount(e){return this.getTreeNode(e).renderNodeCount}isCollapsible(e){return this.getTreeNode(e).collapsible}setCollapsible(e,t){const i=this.getTreeNode(e);void 0===t&&(t=!i.collapsible);const n={collapsible:t};return this.eventBufferer.bufferEvents((()=>this._setCollapseState(e,n)))}isCollapsed(e){return this.getTreeNode(e).collapsed}setCollapsed(e,t,i){const n=this.getTreeNode(e);void 0===t&&(t=!n.collapsed);const o={collapsed:t,recursive:i||!1};return this.eventBufferer.bufferEvents((()=>this._setCollapseState(e,o)))}_setCollapseState(e,t){const{node:i,listIndex:n,revealed:o}=this.getTreeNodeWithListIndex(e),s=this._setListNodeCollapseState(i,n,o,t);if(i!==this.root&&this.autoExpandSingleChildren&&s&&!N(t)&&i.collapsible&&!i.collapsed&&!t.recursive){let n=-1;for(let e=0;e<i.children.length;e++){if(i.children[e].visible){if(n>-1){n=-1;break}n=e}}n>-1&&this._setCollapseState([...e,n],t)}return s}_setListNodeCollapseState(e,t,i,n){const o=this._setNodeCollapseState(e,n,!1);if(!i||!e.visible||!o)return o;const s=e.renderNodeCount,r=this.updateNodeAfterCollapseChange(e),a=s-(-1===t?0:1);return this.list.splice(t+1,a,r.slice(1)),o}_setNodeCollapseState(e,t,i){let n;if(e===this.root?n=!1:(N(t)?(n=e.collapsible!==t.collapsible,e.collapsible=t.collapsible):e.collapsible?(n=e.collapsed!==t.collapsed,e.collapsed=t.collapsed):n=!1,n&&this._onDidChangeCollapseState.fire({node:e,deep:i})),!N(t)&&t.recursive)for(const i of e.children)n=this._setNodeCollapseState(i,t,!0)||n;return n}expandTo(e){this.eventBufferer.bufferEvents((()=>{let t=this.getTreeNode(e);for(;t.parent;)t=t.parent,e=e.slice(0,e.length-1),t.collapsed&&this._setCollapseState(e,{collapsed:!1,recursive:!1})}))}refilter(){const e=this.root.renderNodeCount,t=this.updateNodeAfterFilterChange(this.root);this.list.splice(0,e,t)}createTreeNode(e,t,i,n,o,s){const r={parent:t,element:e.element,children:[],depth:t.depth+1,visibleChildrenCount:0,visibleChildIndex:-1,collapsible:"boolean"==typeof e.collapsible?e.collapsible:void 0!==e.collapsed,collapsed:void 0===e.collapsed?this.collapseByDefault:e.collapsed,renderNodeCount:1,visibility:1,visible:!0,filterData:void 0},a=this._filterNode(r,i);r.visibility=a,n&&o.push(r);const l=e.children||S.$.empty(),c=n&&0!==a&&!r.collapsed,d=S.$.map(l,(e=>this.createTreeNode(e,r,a,c,o,s)));let h=0,u=1;for(const e of d)r.children.push(e),u+=e.renderNodeCount,e.visible&&(e.visibleChildIndex=h++);return r.collapsible=r.collapsible||r.children.length>0,r.visibleChildrenCount=h,r.visible=2===a?h>0:1===a,r.visible?r.collapsed||(r.renderNodeCount=u):(r.renderNodeCount=0,n&&o.pop()),s&&s(r),r}updateNodeAfterCollapseChange(e){const t=e.renderNodeCount,i=[];return this._updateNodeAfterCollapseChange(e,i),this._updateAncestorsRenderNodeCount(e.parent,i.length-t),i}_updateNodeAfterCollapseChange(e,t){if(!1===e.visible)return 0;if(t.push(e),e.renderNodeCount=1,!e.collapsed)for(const i of e.children)e.renderNodeCount+=this._updateNodeAfterCollapseChange(i,t);return this._onDidChangeRenderNodeCount.fire(e),e.renderNodeCount}updateNodeAfterFilterChange(e){const t=e.renderNodeCount,i=[];return this._updateNodeAfterFilterChange(e,e.visible?1:0,i),this._updateAncestorsRenderNodeCount(e.parent,i.length-t),i}_updateNodeAfterFilterChange(e,t,i,n=!0){let o;if(e!==this.root){if(o=this._filterNode(e,t),0===o)return e.visible=!1,e.renderNodeCount=0,!1;n&&i.push(e)}const s=i.length;e.renderNodeCount=e===this.root?0:1;let r=!1;if(e.collapsed&&0===o)e.visibleChildrenCount=0;else{let t=0;for(const s of e.children)r=this._updateNodeAfterFilterChange(s,o,i,n&&!e.collapsed)||r,s.visible&&(s.visibleChildIndex=t++);e.visibleChildrenCount=t}return e!==this.root&&(e.visible=2===o?r:1===o,e.visibility=o),e.visible?e.collapsed||(e.renderNodeCount+=i.length-s):(e.renderNodeCount=0,n&&i.pop()),this._onDidChangeRenderNodeCount.fire(e),e.visible}_updateAncestorsRenderNodeCount(e,t){if(0!==t)for(;e;)e.renderNodeCount+=t,this._onDidChangeRenderNodeCount.fire(e),e=e.parent}_filterNode(e,t){const i=this.filter?this.filter.filter(e.element,t):1;return"boolean"==typeof i?(e.filterData=void 0,i?1:0):k(i)?(e.filterData=i.data,L(i.visibility)):(e.filterData=void 0,L(i))}hasTreeNode(e,t=this.root){if(!e||0===e.length)return!0;const[i,...n]=e;return!(i<0||i>t.children.length)&&this.hasTreeNode(n,t.children[i])}getTreeNode(e,t=this.root){if(!e||0===e.length)return t;const[i,...n]=e;if(i<0||i>t.children.length)throw new y(this.user,"Invalid tree location");return this.getTreeNode(n,t.children[i])}getTreeNodeWithListIndex(e){if(0===e.length)return{node:this.root,listIndex:-1,revealed:!0,visible:!1};const{parentNode:t,listIndex:i,revealed:n,visible:o}=this.getParentNodeWithListIndex(e),s=e[e.length-1];if(s<0||s>t.children.length)throw new y(this.user,"Invalid tree location");const r=t.children[s];return{node:r,listIndex:i,revealed:n,visible:o&&r.visible}}getParentNodeWithListIndex(e,t=this.root,i=0,n=!0,o=!0){const[s,...r]=e;if(s<0||s>t.children.length)throw new y(this.user,"Invalid tree location");for(let e=0;e<s;e++)i+=t.children[e].renderNodeCount;return n=n&&!t.collapsed,o=o&&t.visible,0===r.length?{parentNode:t,listIndex:i,revealed:n,visible:o}:this.getParentNodeWithListIndex(r,t.children[s],i+1,n,o)}getNode(e=[]){return this.getTreeNode(e)}getNodeLocation(e){const t=[];let i=e;for(;i.parent;)t.push(i.parent.children.indexOf(i)),i=i.parent;return t.reverse()}getParentNodeLocation(e){return 0===e.length?void 0:1===e.length?[]:(0,o.JH)(e)[0]}}var I=i(73046);const E=(0,I.CM)("tree-item-expanded",I.lA.chevronDown),T=(0,I.CM)("tree-filter-on-type-on",I.lA.listFilter),M=(0,I.CM)("tree-filter-on-type-off",I.lA.listSelection),A=(0,I.CM)("tree-filter-clear",I.lA.close),O=(0,I.CM)("tree-item-loading",I.lA.loading);var P,R=i(15393),F=i(6626),B=i(75392),V=i(59870),W=i(1432),H=(i(12812),i(63580));class z extends v.kX{constructor(e){super(e.elements.map((e=>e.element))),this.data=e}}function j(e){return e instanceof v.kX?new z(e):e}class U{constructor(e,t){this.modelProvider=e,this.dnd=t,this.autoExpandDisposable=a.JT.None}getDragURI(e){return this.dnd.getDragURI(e.element)}getDragLabel(e,t){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(e.map((e=>e.element)),t)}onDragStart(e,t){this.dnd.onDragStart&&this.dnd.onDragStart(j(e),t)}onDragOver(e,t,i,n,s=!0){const r=this.dnd.onDragOver(j(e),t&&t.element,i,n),a=this.autoExpandNode!==t;if(a&&(this.autoExpandDisposable.dispose(),this.autoExpandNode=t),void 0===t)return r;if(a&&"boolean"!=typeof r&&r.autoExpand&&(this.autoExpandDisposable=(0,R.Vg)((()=>{const e=this.modelProvider(),i=e.getNodeLocation(t);e.isCollapsed(i)&&e.setCollapsed(i,!1),this.autoExpandNode=void 0}),500)),"boolean"==typeof r||!r.accept||void 0===r.bubble||r.feedback){if(!s){return{accept:"boolean"==typeof r?r:r.accept,effect:"boolean"==typeof r?void 0:r.effect,feedback:[i]}}return r}if(1===r.bubble){const i=this.modelProvider(),o=i.getNodeLocation(t),s=i.getParentNodeLocation(o),r=i.getNode(s),a=s&&i.getListIndex(s);return this.onDragOver(e,r,a,n,!1)}const l=this.modelProvider(),c=l.getNodeLocation(t),d=l.getListIndex(c),h=l.getListRenderCount(c);return Object.assign(Object.assign({},r),{feedback:(0,o.w6)(d,d+h)})}drop(e,t,i,n){this.autoExpandDisposable.dispose(),this.autoExpandNode=void 0,this.dnd.drop(j(e),t&&t.element,i,n)}onDragEnd(e){this.dnd.onDragEnd&&this.dnd.onDragEnd(e)}}class ${constructor(e){this.delegate=e}getHeight(e){return this.delegate.getHeight(e.element)}getTemplateId(e){return this.delegate.getTemplateId(e.element)}hasDynamicHeight(e){return!!this.delegate.hasDynamicHeight&&this.delegate.hasDynamicHeight(e.element)}setDynamicHeight(e,t){this.delegate.setDynamicHeight&&this.delegate.setDynamicHeight(e.element,t)}}!function(e){e.None="none",e.OnHover="onHover",e.Always="always"}(P||(P={}));class K{constructor(e,t=[]){this._elements=t,this.onDidChange=r.ju.forEach(e,(e=>this._elements=e))}get elements(){return this._elements}}class q{constructor(e,t,i,n,o={}){this.renderer=e,this.modelProvider=t,this.activeNodes=n,this.renderedElements=new Map,this.renderedNodes=new Map,this.indent=q.DefaultIndent,this.hideTwistiesOfChildlessElements=!1,this.shouldRenderIndentGuides=!1,this.renderedIndentGuides=new F.r,this.activeIndentNodes=new Set,this.indentGuidesDisposable=a.JT.None,this.disposables=new a.SL,this.templateId=e.templateId,this.updateOptions(o),r.ju.map(i,(e=>e.node))(this.onDidChangeNodeTwistieState,this,this.disposables),e.onDidChangeTwistieState&&e.onDidChangeTwistieState(this.onDidChangeTwistieState,this,this.disposables)}updateOptions(e={}){if(void 0!==e.indent&&(this.indent=(0,V.u)(e.indent,0,40)),void 0!==e.renderIndentGuides){const t=e.renderIndentGuides!==P.None;if(t!==this.shouldRenderIndentGuides&&(this.shouldRenderIndentGuides=t,this.indentGuidesDisposable.dispose(),t)){const e=new a.SL;this.activeNodes.onDidChange(this._onDidChangeActiveNodes,this,e),this.indentGuidesDisposable=e,this._onDidChangeActiveNodes(this.activeNodes.elements)}}void 0!==e.hideTwistiesOfChildlessElements&&(this.hideTwistiesOfChildlessElements=e.hideTwistiesOfChildlessElements)}renderTemplate(e){const t=(0,n.R3)(e,(0,n.$)(".monaco-tl-row")),i=(0,n.R3)(t,(0,n.$)(".monaco-tl-indent")),o=(0,n.R3)(t,(0,n.$)(".monaco-tl-twistie")),s=(0,n.R3)(t,(0,n.$)(".monaco-tl-contents")),r=this.renderer.renderTemplate(s);return{container:e,indent:i,twistie:o,indentGuidesDisposable:a.JT.None,templateData:r}}renderElement(e,t,i,n){"number"==typeof n&&(this.renderedNodes.set(e,{templateData:i,height:n}),this.renderedElements.set(e.element,e));const o=q.DefaultIndent+(e.depth-1)*this.indent;i.twistie.style.paddingLeft=`${o}px`,i.indent.style.width=o+this.indent-16+"px",this.renderTwistie(e,i),"number"==typeof n&&this.renderIndentGuides(e,i),this.renderer.renderElement(e,t,i.templateData,n)}disposeElement(e,t,i,n){i.indentGuidesDisposable.dispose(),this.renderer.disposeElement&&this.renderer.disposeElement(e,t,i.templateData,n),"number"==typeof n&&(this.renderedNodes.delete(e),this.renderedElements.delete(e.element))}disposeTemplate(e){this.renderer.disposeTemplate(e.templateData)}onDidChangeTwistieState(e){const t=this.renderedElements.get(e);t&&this.onDidChangeNodeTwistieState(t)}onDidChangeNodeTwistieState(e){const t=this.renderedNodes.get(e);t&&(this.renderTwistie(e,t.templateData),this._onDidChangeActiveNodes(this.activeNodes.elements),this.renderIndentGuides(e,t.templateData))}renderTwistie(e,t){t.twistie.classList.remove(...E.classNamesArray);let i=!1;this.renderer.renderTwistie&&(i=this.renderer.renderTwistie(e.element,t.twistie)),e.collapsible&&(!this.hideTwistiesOfChildlessElements||e.visibleChildrenCount>0)?(i||t.twistie.classList.add(...E.classNamesArray),t.twistie.classList.add("collapsible"),t.twistie.classList.toggle("collapsed",e.collapsed)):t.twistie.classList.remove("collapsible","collapsed"),e.collapsible?t.container.setAttribute("aria-expanded",String(!e.collapsed)):t.container.removeAttribute("aria-expanded")}renderIndentGuides(e,t){if((0,n.PO)(t.indent),t.indentGuidesDisposable.dispose(),!this.shouldRenderIndentGuides)return;const i=new a.SL,o=this.modelProvider();let s=e;for(;;){const e=o.getNodeLocation(s),r=o.getParentNodeLocation(e);if(!r)break;const l=o.getNode(r),c=(0,n.$)(".indent-guide",{style:`width: ${this.indent}px`});this.activeIndentNodes.has(l)&&c.classList.add("active"),0===t.indent.childElementCount?t.indent.appendChild(c):t.indent.insertBefore(c,t.indent.firstElementChild),this.renderedIndentGuides.add(l,c),i.add((0,a.OF)((()=>this.renderedIndentGuides.delete(l,c)))),s=l}t.indentGuidesDisposable=i}_onDidChangeActiveNodes(e){if(!this.shouldRenderIndentGuides)return;const t=new Set,i=this.modelProvider();e.forEach((e=>{const n=i.getNodeLocation(e);try{const o=i.getParentNodeLocation(n);e.collapsible&&e.children.length>0&&!e.collapsed?t.add(e):o&&t.add(i.getNode(o))}catch(e){}})),this.activeIndentNodes.forEach((e=>{t.has(e)||this.renderedIndentGuides.forEach(e,(e=>e.classList.remove("active")))})),t.forEach((e=>{this.activeIndentNodes.has(e)||this.renderedIndentGuides.forEach(e,(e=>e.classList.add("active")))})),this.activeIndentNodes=t}dispose(){this.renderedNodes.clear(),this.renderedElements.clear(),this.indentGuidesDisposable.dispose(),(0,a.B9)(this.disposables)}}q.DefaultIndent=8;class Z{constructor(e,t,i){this.tree=e,this.keyboardNavigationLabelProvider=t,this._filter=i,this._totalCount=0,this._matchCount=0,this._pattern="",this._lowercasePattern="",this.disposables=new a.SL,e.onWillRefilter(this.reset,this,this.disposables)}get totalCount(){return this._totalCount}get matchCount(){return this._matchCount}set pattern(e){this._pattern=e,this._lowercasePattern=e.toLowerCase()}filter(e,t){if(this._filter){const i=this._filter.filter(e,t);if(this.tree.options.simpleKeyboardNavigation)return i;let n;if(n="boolean"==typeof i?i?1:0:k(i)?L(i.visibility):i,0===n)return!1}if(this._totalCount++,this.tree.options.simpleKeyboardNavigation||!this._pattern)return this._matchCount++,{data:B.CL.Default,visibility:!0};const i=this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e),n=Array.isArray(i)?i:[i];for(const e of n){const t=e&&e.toString();if(void 0===t)return{data:B.CL.Default,visibility:!0};const i=(0,B.EW)(this._pattern,this._lowercasePattern,0,t,t.toLowerCase(),0,!0);if(i)return this._matchCount++,1===n.length?{data:i,visibility:!0}:{data:{label:t,score:i},visibility:!0}}return this.tree.options.filterOnType?2:{data:B.CL.Default,visibility:!0}}reset(){this._totalCount=0,this._matchCount=0}dispose(){(0,a.B9)(this.disposables)}}class G{constructor(e,t,i,o,s){this.tree=e,this.view=i,this.filter=o,this.keyboardNavigationDelegate=s,this._enabled=!1,this._pattern="",this._empty=!1,this._onDidChangeEmptyState=new r.Q5,this.positionClassName="ne",this.automaticKeyboardNavigation=!0,this.triggered=!1,this._onDidChangePattern=new r.Q5,this.enabledDisposables=new a.SL,this.disposables=new a.SL,this.domNode=(0,n.$)(`.monaco-list-type-filter.${this.positionClassName}`),this.domNode.draggable=!0,this.disposables.add((0,n.nm)(this.domNode,"dragstart",(()=>this.onDragStart()))),this.messageDomNode=(0,n.R3)(i.getHTMLElement(),(0,n.$)(".monaco-list-type-filter-message")),this.labelDomNode=(0,n.R3)(this.domNode,(0,n.$)("span.label"));const l=(0,n.R3)(this.domNode,(0,n.$)(".controls"));this._filterOnType=!!e.options.filterOnType,this.filterOnTypeDomNode=(0,n.R3)(l,(0,n.$)("input.filter")),this.filterOnTypeDomNode.type="checkbox",this.filterOnTypeDomNode.checked=this._filterOnType,this.filterOnTypeDomNode.tabIndex=-1,this.updateFilterOnTypeTitleAndIcon(),this.disposables.add((0,n.nm)(this.filterOnTypeDomNode,"input",(()=>this.onDidChangeFilterOnType()))),this.clearDomNode=(0,n.R3)(l,(0,n.$)("button.clear"+A.cssSelector)),this.clearDomNode.tabIndex=-1,this.clearDomNode.title=(0,H.N)("clear","æ¸…é™¤"),this.keyboardNavigationEventFilter=e.options.keyboardNavigationEventFilter,t.onDidSplice(this.onDidSpliceModel,this,this.disposables),this.updateOptions(e.options)}get enabled(){return this._enabled}get pattern(){return this._pattern}get filterOnType(){return this._filterOnType}updateOptions(e){e.simpleKeyboardNavigation?this.disable():this.enable(),void 0!==e.filterOnType&&(this._filterOnType=!!e.filterOnType,this.filterOnTypeDomNode.checked=this._filterOnType,this.updateFilterOnTypeTitleAndIcon()),void 0!==e.automaticKeyboardNavigation&&(this.automaticKeyboardNavigation=e.automaticKeyboardNavigation),this.tree.refilter(),this.render(),this.automaticKeyboardNavigation||this.onEventOrInput("")}enable(){if(this._enabled)return;const e=this.enabledDisposables.add(new b.Y(this.view.getHTMLElement(),"keydown")),t=r.ju.chain(e.event).filter((e=>!(0,l.cK)(e.target)||e.target===this.filterOnTypeDomNode)).filter((e=>"Dead"!==e.key&&!/^Media/.test(e.key))).map((e=>new w.y(e))).filter(this.keyboardNavigationEventFilter||(()=>!0)).filter((()=>this.automaticKeyboardNavigation||this.triggered)).filter((e=>this.keyboardNavigationDelegate.mightProducePrintableCharacter(e)&&!(18===e.keyCode||16===e.keyCode||15===e.keyCode||17===e.keyCode)||(this.pattern.length>0||this.triggered)&&(9===e.keyCode||1===e.keyCode)&&!e.altKey&&!e.ctrlKey&&!e.metaKey||1===e.keyCode&&(W.dz?e.altKey&&!e.metaKey:e.ctrlKey)&&!e.shiftKey)).forEach((e=>{e.stopPropagation(),e.preventDefault()})).event,i=this.enabledDisposables.add(new b.Y(this.clearDomNode,"click"));r.ju.chain(r.ju.any(t,i.event)).event(this.onEventOrInput,this,this.enabledDisposables),this.filter.pattern="",this.tree.refilter(),this.render(),this._enabled=!0,this.triggered=!1}disable(){this._enabled&&(this.domNode.remove(),this.enabledDisposables.clear(),this.tree.refilter(),this.render(),this._enabled=!1,this.triggered=!1)}onEventOrInput(e){"string"==typeof e?this.onInput(e):e instanceof MouseEvent||9===e.keyCode||1===e.keyCode&&(W.dz?e.altKey:e.ctrlKey)?this.onInput(""):1===e.keyCode?this.onInput(0===this.pattern.length?"":this.pattern.substr(0,this.pattern.length-1)):this.onInput(this.pattern+e.browserEvent.key)}onInput(e){const t=this.view.getHTMLElement();e&&!this.domNode.parentElement?t.append(this.domNode):!e&&this.domNode.parentElement&&(this.domNode.remove(),this.tree.domFocus()),this._pattern=e,this._onDidChangePattern.fire(e),this.filter.pattern=e,this.tree.refilter(),e&&this.tree.focusNext(0,!0,void 0,(e=>!B.CL.isDefault(e.filterData)));const i=this.tree.getFocus();if(i.length>0){const e=i[0];null===this.tree.getRelativeTop(e)&&this.tree.reveal(e,.5)}this.render(),e||(this.triggered=!1)}onDragStart(){const e=this.view.getHTMLElement(),{left:t}=(0,n.i)(e),i=e.clientWidth,o=i/2,s=this.domNode.clientWidth,r=new a.SL;let l=this.positionClassName;const c=()=>{switch(l){case"nw":this.domNode.style.top="4px",this.domNode.style.left="4px";break;case"ne":this.domNode.style.top="4px",this.domNode.style.left=i-s-6+"px"}},d=()=>{this.positionClassName=l,this.domNode.className=`monaco-list-type-filter ${this.positionClassName}`,this.domNode.style.top="",this.domNode.style.left="",(0,a.B9)(r)};c(),this.domNode.classList.remove(l),this.domNode.classList.add("dragging"),r.add((0,a.OF)((()=>this.domNode.classList.remove("dragging")))),r.add((0,n.nm)(document,"dragover",(e=>(e=>{e.preventDefault();const i=e.clientX-t;e.dataTransfer&&(e.dataTransfer.dropEffect="none"),l=i<o?"nw":"ne",c()})(e)))),r.add((0,n.nm)(this.domNode,"dragend",(()=>d()))),_.P$.CurrentDragAndDropData=new _.TN("vscode-ui"),r.add((0,a.OF)((()=>_.P$.CurrentDragAndDropData=void 0)))}onDidSpliceModel(){this._enabled&&0!==this.pattern.length&&(this.tree.refilter(),this.render())}onDidChangeFilterOnType(){this.tree.updateOptions({filterOnType:this.filterOnTypeDomNode.checked}),this.tree.refilter(),this.tree.domFocus(),this.render(),this.updateFilterOnTypeTitleAndIcon()}updateFilterOnTypeTitleAndIcon(){this.filterOnType?(this.filterOnTypeDomNode.classList.remove(...M.classNamesArray),this.filterOnTypeDomNode.classList.add(...T.classNamesArray),this.filterOnTypeDomNode.title=(0,H.N)("disable filter on type","Disable Filter on Type")):(this.filterOnTypeDomNode.classList.remove(...T.classNamesArray),this.filterOnTypeDomNode.classList.add(...M.classNamesArray),this.filterOnTypeDomNode.title=(0,H.N)("enable filter on type","Enable Filter on Type"))}render(){const e=this.filter.totalCount>0&&0===this.filter.matchCount;this.pattern&&this.tree.options.filterOnType&&e?(this.messageDomNode.textContent=(0,H.N)("empty","No elements found"),this._empty=!0):(this.messageDomNode.innerText="",this._empty=!1),this.domNode.classList.toggle("no-matches",e),this.domNode.title=(0,H.N)("found","Matched {0} out of {1} elements",this.filter.matchCount,this.filter.totalCount),this.labelDomNode.textContent=this.pattern.length>16?"â€¦"+this.pattern.substr(this.pattern.length-16):this.pattern,this._onDidChangeEmptyState.fire(this._empty)}shouldAllowFocus(e){return!(this.enabled&&this.pattern&&!this.filterOnType)||(this.filter.totalCount>0&&this.filter.matchCount<=1||!B.CL.isDefault(e.filterData))}dispose(){this._enabled&&(this.domNode.remove(),this.enabledDisposables.dispose(),this._enabled=!1,this.triggered=!1),this._onDidChangePattern.dispose(),(0,a.B9)(this.disposables)}}function Y(e){let t=m.Unknown;return(0,n.uU)(e.browserEvent.target,"monaco-tl-twistie","monaco-tl-row")?t=m.Twistie:(0,n.uU)(e.browserEvent.target,"monaco-tl-contents","monaco-tl-row")&&(t=m.Element),{browserEvent:e.browserEvent,element:e.element?e.element.element:null,target:t}}function Q(e,t){t(e),e.children.forEach((e=>Q(e,t)))}class X{constructor(e,t){this.getFirstViewElementWithTrait=e,this.identityProvider=t,this.nodes=[],this._onDidChange=new r.Q5,this.onDidChange=this._onDidChange.event}get nodeSet(){return this._nodeSet||(this._nodeSet=this.createNodeSet()),this._nodeSet}set(e,t){var i;!(null===(i=t)||void 0===i?void 0:i.__forceEvent)&&(0,o.fS)(this.nodes,e)||this._set(e,!1,t)}_set(e,t,i){if(this.nodes=[...e],this.elements=void 0,this._nodeSet=void 0,!t){const e=this;this._onDidChange.fire({get elements(){return e.get()},browserEvent:i})}}get(){return this.elements||(this.elements=this.nodes.map((e=>e.element))),[...this.elements]}getNodes(){return this.nodes}has(e){return this.nodeSet.has(e)}onDidModelSplice({insertedNodes:e,deletedNodes:t}){if(!this.identityProvider){const e=this.createNodeSet(),i=t=>e.delete(t);return t.forEach((e=>Q(e,i))),void this.set([...e.values()])}const i=new Set,n=e=>i.add(this.identityProvider.getId(e.element).toString());t.forEach((e=>Q(e,n)));const o=new Map,s=e=>o.set(this.identityProvider.getId(e.element).toString(),e);e.forEach((e=>Q(e,s)));const r=[];for(const e of this.nodes){const t=this.identityProvider.getId(e.element).toString();if(i.has(t)){const e=o.get(t);e&&r.push(e)}else r.push(e)}if(this.nodes.length>0&&0===r.length){const e=this.getFirstViewElementWithTrait();e&&r.push(e)}this._set(r,!0)}createNodeSet(){const e=new Set;for(const t of this.nodes)e.add(t);return e}}class J extends l.sx{constructor(e,t){super(e),this.tree=t}onViewPointer(e){if((0,l.cK)(e.browserEvent.target)||(0,l.hD)(e.browserEvent.target))return;const t=e.element;if(!t)return super.onViewPointer(e);if(this.isSelectionRangeChangeEvent(e)||this.isSelectionSingleChangeEvent(e))return super.onViewPointer(e);const i=e.browserEvent.target,n=i.classList.contains("monaco-tl-twistie")||i.classList.contains("monaco-icon-label")&&i.classList.contains("folder-icon")&&e.browserEvent.offsetX<16;let o=!1;if(o="function"==typeof this.tree.expandOnlyOnTwistieClick?this.tree.expandOnlyOnTwistieClick(t.element):!!this.tree.expandOnlyOnTwistieClick,o&&!n&&2!==e.browserEvent.detail)return super.onViewPointer(e);if(!this.tree.expandOnDoubleClick&&2===e.browserEvent.detail)return super.onViewPointer(e);if(t.collapsible){const i=this.tree.model,s=i.getNodeLocation(t),r=e.browserEvent.altKey;if(this.tree.setFocus([s]),i.setCollapsed(s,void 0,r),o&&n)return}super.onViewPointer(e)}onDoubleClick(e){!e.browserEvent.target.classList.contains("monaco-tl-twistie")&&this.tree.expandOnDoubleClick&&super.onDoubleClick(e)}}class ee extends l.aV{constructor(e,t,i,n,o,s,r,a){super(e,t,i,n,a),this.focusTrait=o,this.selectionTrait=s,this.anchorTrait=r}createMouseController(e){return new J(this,e.tree)}splice(e,t,i=[]){if(super.splice(e,t,i),0===i.length)return;const n=[],s=[];let r;i.forEach(((t,i)=>{this.focusTrait.has(t)&&n.push(e+i),this.selectionTrait.has(t)&&s.push(e+i),this.anchorTrait.has(t)&&(r=e+i)})),n.length>0&&super.setFocus((0,o.EB)([...super.getFocus(),...n])),s.length>0&&super.setSelection((0,o.EB)([...super.getSelection(),...s])),"number"==typeof r&&super.setAnchor(r)}setFocus(e,t,i=!1){super.setFocus(e,t),i||this.focusTrait.set(e.map((e=>this.element(e))),t)}setSelection(e,t,i=!1){super.setSelection(e,t),i||this.selectionTrait.set(e.map((e=>this.element(e))),t)}setAnchor(e,t=!1){super.setAnchor(e),t||(void 0===e?this.anchorTrait.set([]):this.anchorTrait.set([this.element(e)]))}}class te{constructor(e,t,i,o,s={}){this._options=s,this.eventBufferer=new r.E7,this.disposables=new a.SL,this._onWillRefilter=new r.Q5,this.onWillRefilter=this._onWillRefilter.event,this._onDidUpdateOptions=new r.Q5;const c=new $(i),d=new r.ZD,h=new r.ZD,u=new K(h.event);this.renderers=o.map((e=>new q(e,(()=>this.model),d.event,u,s)));for(let e of this.renderers)this.disposables.add(e);let g;var p,f;s.keyboardNavigationLabelProvider&&(g=new Z(this,s.keyboardNavigationLabelProvider,s.filter),s=Object.assign(Object.assign({},s),{filter:g}),this.disposables.add(g)),this.focus=new X((()=>this.view.getFocusedElements()[0]),s.identityProvider),this.selection=new X((()=>this.view.getSelectedElements()[0]),s.identityProvider),this.anchor=new X((()=>this.view.getAnchorElement()),s.identityProvider),this.view=new ee(e,t,c,this.renderers,this.focus,this.selection,this.anchor,Object.assign(Object.assign({},(p=()=>this.model,(f=s)&&Object.assign(Object.assign({},f),{identityProvider:f.identityProvider&&{getId:e=>f.identityProvider.getId(e.element)},dnd:f.dnd&&new U(p,f.dnd),multipleSelectionController:f.multipleSelectionController&&{isSelectionSingleChangeEvent:e=>f.multipleSelectionController.isSelectionSingleChangeEvent(Object.assign(Object.assign({},e),{element:e.element})),isSelectionRangeChangeEvent:e=>f.multipleSelectionController.isSelectionRangeChangeEvent(Object.assign(Object.assign({},e),{element:e.element}))},accessibilityProvider:f.accessibilityProvider&&Object.assign(Object.assign({},f.accessibilityProvider),{getSetSize(e){const t=p(),i=t.getNodeLocation(e),n=t.getParentNodeLocation(i);return t.getNode(n).visibleChildrenCount},getPosInSet:e=>e.visibleChildIndex+1,isChecked:f.accessibilityProvider&&f.accessibilityProvider.isChecked?e=>f.accessibilityProvider.isChecked(e.element):void 0,getRole:f.accessibilityProvider&&f.accessibilityProvider.getRole?e=>f.accessibilityProvider.getRole(e.element):()=>"treeitem",getAriaLabel:e=>f.accessibilityProvider.getAriaLabel(e.element),getWidgetAriaLabel:()=>f.accessibilityProvider.getWidgetAriaLabel(),getWidgetRole:f.accessibilityProvider&&f.accessibilityProvider.getWidgetRole?()=>f.accessibilityProvider.getWidgetRole():()=>"tree",getAriaLevel:f.accessibilityProvider&&f.accessibilityProvider.getAriaLevel?e=>f.accessibilityProvider.getAriaLevel(e.element):e=>e.depth,getActiveDescendantId:f.accessibilityProvider.getActiveDescendantId&&(e=>f.accessibilityProvider.getActiveDescendantId(e.element))}),keyboardNavigationLabelProvider:f.keyboardNavigationLabelProvider&&Object.assign(Object.assign({},f.keyboardNavigationLabelProvider),{getKeyboardNavigationLabel:e=>f.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e.element)}),enableKeyboardNavigation:f.simpleKeyboardNavigation}))),{tree:this})),this.model=this.createModel(e,this.view,s),d.input=this.model.onDidChangeCollapseState;const m=r.ju.forEach(this.model.onDidSplice,(e=>{this.eventBufferer.bufferEvents((()=>{this.focus.onDidModelSplice(e),this.selection.onDidModelSplice(e)}))}));if(m((()=>null),null,this.disposables),h.input=r.ju.chain(r.ju.any(m,this.focus.onDidChange,this.selection.onDidChange)).debounce((()=>null),0).map((()=>{const e=new Set;for(const t of this.focus.getNodes())e.add(t);for(const t of this.selection.getNodes())e.add(t);return[...e.values()]})).event,!1!==s.keyboardSupport){const e=r.ju.chain(this.view.onKeyDown).filter((e=>!(0,l.cK)(e.target))).map((e=>new w.y(e)));e.filter((e=>15===e.keyCode)).on(this.onLeftArrow,this,this.disposables),e.filter((e=>17===e.keyCode)).on(this.onRightArrow,this,this.disposables),e.filter((e=>10===e.keyCode)).on(this.onSpace,this,this.disposables)}if(s.keyboardNavigationLabelProvider){const e=s.keyboardNavigationDelegate||l.WK;this.typeFilterController=new G(this,this.model,this.view,g,e),this.focusNavigationFilter=e=>this.typeFilterController.shouldAllowFocus(e),this.disposables.add(this.typeFilterController)}this.styleElement=(0,n.dS)(this.view.getHTMLElement()),this.getHTMLElement().classList.toggle("always",this._options.renderIndentGuides===P.Always)}get onDidChangeFocus(){return this.eventBufferer.wrapEvent(this.focus.onDidChange)}get onDidChangeSelection(){return this.eventBufferer.wrapEvent(this.selection.onDidChange)}get onMouseDblClick(){return r.ju.map(this.view.onMouseDblClick,Y)}get onPointer(){return r.ju.map(this.view.onPointer,Y)}get onDidFocus(){return this.view.onDidFocus}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}get expandOnDoubleClick(){return void 0===this._options.expandOnDoubleClick||this._options.expandOnDoubleClick}get expandOnlyOnTwistieClick(){return void 0===this._options.expandOnlyOnTwistieClick||this._options.expandOnlyOnTwistieClick}get onDidDispose(){return this.view.onDidDispose}updateOptions(e={}){this._options=Object.assign(Object.assign({},this._options),e);for(const t of this.renderers)t.updateOptions(e);this.view.updateOptions(Object.assign(Object.assign({},this._options),{enableKeyboardNavigation:this._options.simpleKeyboardNavigation})),this.typeFilterController&&this.typeFilterController.updateOptions(this._options),this._onDidUpdateOptions.fire(this._options),this.getHTMLElement().classList.toggle("always",this._options.renderIndentGuides===P.Always)}get options(){return this._options}getHTMLElement(){return this.view.getHTMLElement()}get scrollTop(){return this.view.scrollTop}set scrollTop(e){this.view.scrollTop=e}domFocus(){this.view.domFocus()}layout(e,t){this.view.layout(e,t)}style(e){const t=`.${this.view.domId}`,i=[];e.treeIndentGuidesStroke&&(i.push(`.monaco-list${t}:hover .monaco-tl-indent > .indent-guide, .monaco-list${t}.always .monaco-tl-indent > .indent-guide  { border-color: ${e.treeIndentGuidesStroke.transparent(.4)}; }`),i.push(`.monaco-list${t} .monaco-tl-indent > .indent-guide.active { border-color: ${e.treeIndentGuidesStroke}; }`)),this.styleElement.textContent=i.join("\n"),this.view.style(e)}collapse(e,t=!1){return this.model.setCollapsed(e,!0,t)}expand(e,t=!1){return this.model.setCollapsed(e,!1,t)}isCollapsible(e){return this.model.isCollapsible(e)}setCollapsible(e,t){return this.model.setCollapsible(e,t)}isCollapsed(e){return this.model.isCollapsed(e)}refilter(){this._onWillRefilter.fire(void 0),this.model.refilter()}setSelection(e,t){const i=e.map((e=>this.model.getNode(e)));this.selection.set(i,t);const n=e.map((e=>this.model.getListIndex(e))).filter((e=>e>-1));this.view.setSelection(n,t,!0)}getSelection(){return this.selection.get()}setFocus(e,t){const i=e.map((e=>this.model.getNode(e)));this.focus.set(i,t);const n=e.map((e=>this.model.getListIndex(e))).filter((e=>e>-1));this.view.setFocus(n,t,!0)}focusNext(e=1,t=!1,i,n=this.focusNavigationFilter){this.view.focusNext(e,t,i,n)}getFocus(){return this.focus.get()}reveal(e,t){this.model.expandTo(e);const i=this.model.getListIndex(e);-1!==i&&this.view.reveal(i,t)}getRelativeTop(e){const t=this.model.getListIndex(e);return-1===t?null:this.view.getRelativeTop(t)}onLeftArrow(e){e.preventDefault(),e.stopPropagation();const t=this.view.getFocusedElements();if(0===t.length)return;const i=t[0],n=this.model.getNodeLocation(i);if(!this.model.setCollapsed(n,!0)){const e=this.model.getParentNodeLocation(n);if(!e)return;const t=this.model.getListIndex(e);this.view.reveal(t),this.view.setFocus([t])}}onRightArrow(e){e.preventDefault(),e.stopPropagation();const t=this.view.getFocusedElements();if(0===t.length)return;const i=t[0],n=this.model.getNodeLocation(i);if(!this.model.setCollapsed(n,!1)){if(!i.children.some((e=>e.visible)))return;const[e]=this.view.getFocus(),t=e+1;this.view.reveal(t),this.view.setFocus([t])}}onSpace(e){e.preventDefault(),e.stopPropagation();const t=this.view.getFocusedElements();if(0===t.length)return;const i=t[0],n=this.model.getNodeLocation(i),o=e.browserEvent.altKey;this.model.setCollapsed(n,void 0,o)}dispose(){(0,a.B9)(this.disposables),this.view.dispose()}}class ie{constructor(e,t,i={}){this.user=e,this.rootRef=null,this.nodes=new Map,this.nodesByIdentity=new Map,this.model=new D(e,t,null,i),this.onDidSplice=this.model.onDidSplice,this.onDidChangeCollapseState=this.model.onDidChangeCollapseState,this.onDidChangeRenderNodeCount=this.model.onDidChangeRenderNodeCount,i.sorter&&(this.sorter={compare:(e,t)=>i.sorter.compare(e.element,t.element)}),this.identityProvider=i.identityProvider}setChildren(e,t=S.$.empty(),i={}){const n=this.getElementLocation(e);this._setChildren(n,this.preserveCollapseState(t),i)}_setChildren(e,t=S.$.empty(),i){const n=new Set,o=new Set;this.model.splice([...e,0],Number.MAX_VALUE,t,Object.assign(Object.assign({},i),{onDidCreateNode:e=>{var t;if(null===e.element)return;const s=e;if(n.add(s.element),this.nodes.set(s.element,s),this.identityProvider){const e=this.identityProvider.getId(s.element).toString();o.add(e),this.nodesByIdentity.set(e,s)}null===(t=i.onDidCreateNode)||void 0===t||t.call(i,s)},onDidDeleteNode:e=>{var t;if(null===e.element)return;const s=e;if(n.has(s.element)||this.nodes.delete(s.element),this.identityProvider){const e=this.identityProvider.getId(s.element).toString();o.has(e)||this.nodesByIdentity.delete(e)}null===(t=i.onDidDeleteNode)||void 0===t||t.call(i,s)}}))}preserveCollapseState(e=S.$.empty()){return this.sorter&&(e=[...e].sort(this.sorter.compare.bind(this.sorter))),S.$.map(e,(e=>{let t=this.nodes.get(e.element);if(!t&&this.identityProvider){const i=this.identityProvider.getId(e.element).toString();t=this.nodesByIdentity.get(i)}if(!t)return Object.assign(Object.assign({},e),{children:this.preserveCollapseState(e.children)});const i="boolean"==typeof e.collapsible?e.collapsible:t.collapsible,n=void 0!==e.collapsed?e.collapsed:t.collapsed;return Object.assign(Object.assign({},e),{collapsible:i,collapsed:n,children:this.preserveCollapseState(e.children)})}))}rerender(e){const t=this.getElementLocation(e);this.model.rerender(t)}has(e){return this.nodes.has(e)}getListIndex(e){const t=this.getElementLocation(e);return this.model.getListIndex(t)}getListRenderCount(e){const t=this.getElementLocation(e);return this.model.getListRenderCount(t)}isCollapsible(e){const t=this.getElementLocation(e);return this.model.isCollapsible(t)}setCollapsible(e,t){const i=this.getElementLocation(e);return this.model.setCollapsible(i,t)}isCollapsed(e){const t=this.getElementLocation(e);return this.model.isCollapsed(t)}setCollapsed(e,t,i){const n=this.getElementLocation(e);return this.model.setCollapsed(n,t,i)}expandTo(e){const t=this.getElementLocation(e);this.model.expandTo(t)}refilter(){this.model.refilter()}getNode(e=null){if(null===e)return this.model.getNode(this.model.rootRef);const t=this.nodes.get(e);if(!t)throw new y(this.user,`Tree element not found: ${e}`);return t}getNodeLocation(e){return e.element}getParentNodeLocation(e){if(null===e)throw new y(this.user,"Invalid getParentNodeLocation call");const t=this.nodes.get(e);if(!t)throw new y(this.user,`Tree element not found: ${e}`);const i=this.model.getNodeLocation(t),n=this.model.getParentNodeLocation(i);return this.model.getNode(n).element}getElementLocation(e){if(null===e)return[];const t=this.nodes.get(e);if(!t)throw new y(this.user,`Tree element not found: ${e}`);return this.model.getNodeLocation(t)}}function ne(e){return{element:{elements:[e.element],incompressible:e.incompressible||!1},children:S.$.map(S.$.from(e.children),ne),collapsible:e.collapsible,collapsed:e.collapsed}}function oe(e){const t=[e.element],i=e.incompressible||!1;let n,o;for(;[o,n]=S.$.consume(S.$.from(e.children),2),1===o.length&&!o[0].incompressible;)e=o[0],t.push(e.element);return{element:{elements:t,incompressible:i},children:S.$.map(S.$.concat(o,n),oe),collapsible:e.collapsible,collapsed:e.collapsed}}function se(e,t=0){let i;return i=t<e.element.elements.length-1?[se(e,t+1)]:S.$.map(S.$.from(e.children),(e=>se(e,0))),0===t&&e.element.incompressible?{element:e.element.elements[t],children:i,incompressible:!0,collapsible:e.collapsible,collapsed:e.collapsed}:{element:e.element.elements[t],children:i,collapsible:e.collapsible,collapsed:e.collapsed}}function re(e){return se(e,0)}function ae(e,t,i){return e.element===t?Object.assign(Object.assign({},e),{children:i}):Object.assign(Object.assign({},e),{children:S.$.map(S.$.from(e.children),(e=>ae(e,t,i)))})}class le{constructor(e,t,i={}){this.user=e,this.rootRef=null,this.nodes=new Map,this.model=new ie(e,t,i),this.enabled=void 0===i.compressionEnabled||i.compressionEnabled,this.identityProvider=i.identityProvider}get onDidSplice(){return this.model.onDidSplice}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}get onDidChangeRenderNodeCount(){return this.model.onDidChangeRenderNodeCount}setChildren(e,t=S.$.empty(),i){const n=i.diffIdentityProvider&&(o=i.diffIdentityProvider,{getId:e=>e.elements.map((e=>o.getId(e).toString())).join("\0")});var o;if(null===e){const e=S.$.map(t,this.enabled?oe:ne);return void this._setChildren(null,e,{diffIdentityProvider:n,diffDepth:1/0})}const s=this.nodes.get(e);if(!s)throw new Error("Unknown compressed tree node");const r=this.model.getNode(s),a=this.model.getParentNodeLocation(s),l=this.model.getNode(a),c=ae(re(r),e,t),d=(this.enabled?oe:ne)(c),h=l.children.map((e=>e===r?d:e));this._setChildren(l.element,h,{diffIdentityProvider:n,diffDepth:r.depth-l.depth})}setCompressionEnabled(e){if(e===this.enabled)return;this.enabled=e;const t=this.model.getNode().children,i=S.$.map(t,re),n=S.$.map(i,e?oe:ne);this._setChildren(null,n,{diffIdentityProvider:this.identityProvider,diffDepth:1/0})}_setChildren(e,t,i){const n=new Set;this.model.setChildren(e,t,Object.assign(Object.assign({},i),{onDidCreateNode:e=>{for(const t of e.element.elements)n.add(t),this.nodes.set(t,e.element)},onDidDeleteNode:e=>{for(const t of e.element.elements)n.has(t)||this.nodes.delete(t)}}))}has(e){return this.nodes.has(e)}getListIndex(e){const t=this.getCompressedNode(e);return this.model.getListIndex(t)}getListRenderCount(e){const t=this.getCompressedNode(e);return this.model.getListRenderCount(t)}getNode(e){if(void 0===e)return this.model.getNode();const t=this.getCompressedNode(e);return this.model.getNode(t)}getNodeLocation(e){const t=this.model.getNodeLocation(e);return null===t?null:t.elements[t.elements.length-1]}getParentNodeLocation(e){const t=this.getCompressedNode(e),i=this.model.getParentNodeLocation(t);return null===i?null:i.elements[i.elements.length-1]}isCollapsible(e){const t=this.getCompressedNode(e);return this.model.isCollapsible(t)}setCollapsible(e,t){const i=this.getCompressedNode(e);return this.model.setCollapsible(i,t)}isCollapsed(e){const t=this.getCompressedNode(e);return this.model.isCollapsed(t)}setCollapsed(e,t,i){const n=this.getCompressedNode(e);return this.model.setCollapsed(n,t,i)}expandTo(e){const t=this.getCompressedNode(e);this.model.expandTo(t)}rerender(e){const t=this.getCompressedNode(e);this.model.rerender(t)}refilter(){this.model.refilter()}getCompressedNode(e){if(null===e)return null;const t=this.nodes.get(e);if(!t)throw new y(this.user,`Tree element not found: ${e}`);return t}}const ce=e=>e[e.length-1];class de{constructor(e,t){this.unwrapper=e,this.node=t}get element(){return null===this.node.element?null:this.unwrapper(this.node.element)}get children(){return this.node.children.map((e=>new de(this.unwrapper,e)))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}}class he{constructor(e,t,i={}){this.rootRef=null,this.elementMapper=i.elementMapper||ce;const n=e=>this.elementMapper(e.elements);this.nodeMapper=new C((e=>new de(n,e))),this.model=new le(e,function(e,t){return{splice(i,n,o){t.splice(i,n,o.map((t=>e.map(t))))},updateElementHeight(e,i){t.updateElementHeight(e,i)}}}(this.nodeMapper,t),function(e,t){return Object.assign(Object.assign({},t),{identityProvider:t.identityProvider&&{getId:i=>t.identityProvider.getId(e(i))},sorter:t.sorter&&{compare:(e,i)=>t.sorter.compare(e.elements[0],i.elements[0])},filter:t.filter&&{filter:(i,n)=>t.filter.filter(e(i),n)}})}(n,i))}get onDidSplice(){return r.ju.map(this.model.onDidSplice,(({insertedNodes:e,deletedNodes:t})=>({insertedNodes:e.map((e=>this.nodeMapper.map(e))),deletedNodes:t.map((e=>this.nodeMapper.map(e)))})))}get onDidChangeCollapseState(){return r.ju.map(this.model.onDidChangeCollapseState,(({node:e,deep:t})=>({node:this.nodeMapper.map(e),deep:t})))}get onDidChangeRenderNodeCount(){return r.ju.map(this.model.onDidChangeRenderNodeCount,(e=>this.nodeMapper.map(e)))}setChildren(e,t=S.$.empty(),i={}){this.model.setChildren(e,t,i)}setCompressionEnabled(e){this.model.setCompressionEnabled(e)}has(e){return this.model.has(e)}getListIndex(e){return this.model.getListIndex(e)}getListRenderCount(e){return this.model.getListRenderCount(e)}getNode(e){return this.nodeMapper.map(this.model.getNode(e))}getNodeLocation(e){return e.element}getParentNodeLocation(e){return this.model.getParentNodeLocation(e)}isCollapsible(e){return this.model.isCollapsible(e)}setCollapsible(e,t){return this.model.setCollapsible(e,t)}isCollapsed(e){return this.model.isCollapsed(e)}setCollapsed(e,t,i){return this.model.setCollapsed(e,t,i)}expandTo(e){return this.model.expandTo(e)}rerender(e){return this.model.rerender(e)}refilter(){return this.model.refilter()}getCompressedTreeNode(e=null){return this.model.getNode(e)}}var ue=i(49898),ge=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r};class pe extends te{constructor(e,t,i,n,o={}){super(e,t,i,n,o)}get onDidChangeCollapseState(){return this.model.onDidChangeCollapseState}setChildren(e,t=S.$.empty(),i){this.model.setChildren(e,t,i)}rerender(e){void 0!==e?this.model.rerender(e):this.view.rerender()}hasElement(e){return this.model.has(e)}createModel(e,t,i){return new ie(e,t,i)}}class fe{constructor(e,t){this._compressedTreeNodeProvider=e,this.renderer=t,this.templateId=t.templateId,t.onDidChangeTwistieState&&(this.onDidChangeTwistieState=t.onDidChangeTwistieState)}get compressedTreeNodeProvider(){return this._compressedTreeNodeProvider()}renderTemplate(e){return{compressedTreeNode:void 0,data:this.renderer.renderTemplate(e)}}renderElement(e,t,i,n){const o=this.compressedTreeNodeProvider.getCompressedTreeNode(e.element);1===o.element.elements.length?(i.compressedTreeNode=void 0,this.renderer.renderElement(e,t,i.data,n)):(i.compressedTreeNode=o,this.renderer.renderCompressedElements(o,t,i.data,n))}disposeElement(e,t,i,n){i.compressedTreeNode?this.renderer.disposeCompressedElements&&this.renderer.disposeCompressedElements(i.compressedTreeNode,t,i.data,n):this.renderer.disposeElement&&this.renderer.disposeElement(e,t,i.data,n)}disposeTemplate(e){this.renderer.disposeTemplate(e.data)}renderTwistie(e,t){return!!this.renderer.renderTwistie&&this.renderer.renderTwistie(e,t)}}ge([ue.H],fe.prototype,"compressedTreeNodeProvider",null);class me extends pe{constructor(e,t,i,n,o={}){const s=()=>this;super(e,t,i,n.map((e=>new fe(s,e))),function(e,t){return t&&Object.assign(Object.assign({},t),{keyboardNavigationLabelProvider:t.keyboardNavigationLabelProvider&&{getKeyboardNavigationLabel(i){let n;try{n=e().getCompressedTreeNode(i)}catch(e){return t.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(i)}return 1===n.element.elements.length?t.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(i):t.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(n.element.elements)}}})}(s,o))}setChildren(e,t=S.$.empty(),i){this.model.setChildren(e,t,i)}createModel(e,t,i){return new he(e,t,i)}updateOptions(e={}){super.updateOptions(e),void 0!==e.compressionEnabled&&this.model.setCompressionEnabled(e.compressionEnabled)}getCompressedTreeNode(e=null){return this.model.getCompressedTreeNode(e)}}var ve=i(17301),_e=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};function be(e){return Object.assign(Object.assign({},e),{children:[],refreshPromise:void 0,stale:!0,slow:!1,collapsedByDefault:void 0})}function we(e,t){return!!t.parent&&(t.parent===e||we(e,t.parent))}class ye{constructor(e){this.node=e}get element(){return this.node.element.element}get children(){return this.node.children.map((e=>new ye(e)))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}}class Ce{constructor(e,t,i){this.renderer=e,this.nodeMapper=t,this.onDidChangeTwistieState=i,this.renderedNodes=new Map,this.templateId=e.templateId}renderTemplate(e){return{templateData:this.renderer.renderTemplate(e)}}renderElement(e,t,i,n){this.renderer.renderElement(this.nodeMapper.map(e),t,i.templateData,n)}renderTwistie(e,t){return e.slow?(t.classList.add(...O.classNamesArray),!0):(t.classList.remove(...O.classNamesArray),!1)}disposeElement(e,t,i,n){this.renderer.disposeElement&&this.renderer.disposeElement(this.nodeMapper.map(e),t,i.templateData,n)}disposeTemplate(e){this.renderer.disposeTemplate(e.templateData)}dispose(){this.renderedNodes.clear()}}function xe(e){return{browserEvent:e.browserEvent,elements:e.elements.map((e=>e.element))}}function Se(e){return{browserEvent:e.browserEvent,element:e.element&&e.element.element,target:e.target}}class ke extends v.kX{constructor(e){super(e.elements.map((e=>e.element))),this.data=e}}function Le(e){return e instanceof v.kX?new ke(e):e}class Ne{constructor(e){this.dnd=e}getDragURI(e){return this.dnd.getDragURI(e.element)}getDragLabel(e,t){if(this.dnd.getDragLabel)return this.dnd.getDragLabel(e.map((e=>e.element)),t)}onDragStart(e,t){this.dnd.onDragStart&&this.dnd.onDragStart(Le(e),t)}onDragOver(e,t,i,n,o=!0){return this.dnd.onDragOver(Le(e),t&&t.element,i,n)}drop(e,t,i,n){this.dnd.drop(Le(e),t&&t.element,i,n)}onDragEnd(e){this.dnd.onDragEnd&&this.dnd.onDragEnd(e)}}function De(e){return e&&Object.assign(Object.assign({},e),{collapseByDefault:!0,identityProvider:e.identityProvider&&{getId:t=>e.identityProvider.getId(t.element)},dnd:e.dnd&&new Ne(e.dnd),multipleSelectionController:e.multipleSelectionController&&{isSelectionSingleChangeEvent:t=>e.multipleSelectionController.isSelectionSingleChangeEvent(Object.assign(Object.assign({},t),{element:t.element})),isSelectionRangeChangeEvent:t=>e.multipleSelectionController.isSelectionRangeChangeEvent(Object.assign(Object.assign({},t),{element:t.element}))},accessibilityProvider:e.accessibilityProvider&&Object.assign(Object.assign({},e.accessibilityProvider),{getPosInSet:void 0,getSetSize:void 0,getRole:e.accessibilityProvider.getRole?t=>e.accessibilityProvider.getRole(t.element):()=>"treeitem",isChecked:e.accessibilityProvider.isChecked?t=>{var i;return!!(null===(i=e.accessibilityProvider)||void 0===i?void 0:i.isChecked(t.element))}:void 0,getAriaLabel:t=>e.accessibilityProvider.getAriaLabel(t.element),getWidgetAriaLabel:()=>e.accessibilityProvider.getWidgetAriaLabel(),getWidgetRole:e.accessibilityProvider.getWidgetRole?()=>e.accessibilityProvider.getWidgetRole():()=>"tree",getAriaLevel:e.accessibilityProvider.getAriaLevel&&(t=>e.accessibilityProvider.getAriaLevel(t.element)),getActiveDescendantId:e.accessibilityProvider.getActiveDescendantId&&(t=>e.accessibilityProvider.getActiveDescendantId(t.element))}),filter:e.filter&&{filter:(t,i)=>e.filter.filter(t.element,i)},keyboardNavigationLabelProvider:e.keyboardNavigationLabelProvider&&Object.assign(Object.assign({},e.keyboardNavigationLabelProvider),{getKeyboardNavigationLabel:t=>e.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(t.element)}),sorter:void 0,expandOnlyOnTwistieClick:void 0===e.expandOnlyOnTwistieClick?void 0:"function"!=typeof e.expandOnlyOnTwistieClick?e.expandOnlyOnTwistieClick:t=>e.expandOnlyOnTwistieClick(t.element),additionalScrollHeight:e.additionalScrollHeight})}function Ie(e,t){t(e),e.children.forEach((e=>Ie(e,t)))}class Ee{constructor(e,t,i,n,o,s={}){this.user=e,this.dataSource=o,this.nodes=new Map,this.subTreeRefreshPromises=new Map,this.refreshPromises=new Map,this._onDidRender=new r.Q5,this._onDidChangeNodeSlowState=new r.Q5,this.nodeMapper=new C((e=>new ye(e))),this.disposables=new a.SL,this.identityProvider=s.identityProvider,this.autoExpandSingleChildren=void 0!==s.autoExpandSingleChildren&&s.autoExpandSingleChildren,this.sorter=s.sorter,this.collapseByDefault=s.collapseByDefault,this.tree=this.createTree(e,t,i,n,s),this.root=be({element:void 0,parent:null,hasChildren:!0}),this.identityProvider&&(this.root=Object.assign(Object.assign({},this.root),{id:null})),this.nodes.set(null,this.root),this.tree.onDidChangeCollapseState(this._onDidChangeCollapseState,this,this.disposables)}get onDidChangeFocus(){return r.ju.map(this.tree.onDidChangeFocus,xe)}get onDidChangeSelection(){return r.ju.map(this.tree.onDidChangeSelection,xe)}get onMouseDblClick(){return r.ju.map(this.tree.onMouseDblClick,Se)}get onPointer(){return r.ju.map(this.tree.onPointer,Se)}get onDidFocus(){return this.tree.onDidFocus}get onDidDispose(){return this.tree.onDidDispose}createTree(e,t,i,n,o){const s=new $(i),r=n.map((e=>new Ce(e,this.nodeMapper,this._onDidChangeNodeSlowState.event))),a=De(o)||{};return new pe(e,t,s,r,a)}updateOptions(e={}){this.tree.updateOptions(e)}getHTMLElement(){return this.tree.getHTMLElement()}get scrollTop(){return this.tree.scrollTop}set scrollTop(e){this.tree.scrollTop=e}domFocus(){this.tree.domFocus()}layout(e,t){this.tree.layout(e,t)}style(e){this.tree.style(e)}getInput(){return this.root.element}setInput(e,t){return _e(this,void 0,void 0,(function*(){this.refreshPromises.forEach((e=>e.cancel())),this.refreshPromises.clear(),this.root.element=e;const i=t&&{viewState:t,focus:[],selection:[]};yield this._updateChildren(e,!0,!1,i),i&&(this.tree.setFocus(i.focus),this.tree.setSelection(i.selection)),t&&"number"==typeof t.scrollTop&&(this.scrollTop=t.scrollTop)}))}_updateChildren(e=this.root.element,t=!0,i=!1,n,o){return _e(this,void 0,void 0,(function*(){if(void 0===this.root.element)throw new y(this.user,"Tree input not set");this.root.refreshPromise&&(yield this.root.refreshPromise,yield r.ju.toPromise(this._onDidRender.event));const s=this.getDataNode(e);if(yield this.refreshAndRenderNode(s,t,n,o),i)try{this.tree.rerender(s)}catch(e){}}))}rerender(e){if(void 0===e||e===this.root.element)return void this.tree.rerender();const t=this.getDataNode(e);this.tree.rerender(t)}collapse(e,t=!1){const i=this.getDataNode(e);return this.tree.collapse(i===this.root?null:i,t)}expand(e,t=!1){return _e(this,void 0,void 0,(function*(){if(void 0===this.root.element)throw new y(this.user,"Tree input not set");this.root.refreshPromise&&(yield this.root.refreshPromise,yield r.ju.toPromise(this._onDidRender.event));const i=this.getDataNode(e);if(this.tree.hasElement(i)&&!this.tree.isCollapsible(i))return!1;if(i.refreshPromise&&(yield this.root.refreshPromise,yield r.ju.toPromise(this._onDidRender.event)),i!==this.root&&!i.refreshPromise&&!this.tree.isCollapsed(i))return!1;const n=this.tree.expand(i===this.root?null:i,t);return i.refreshPromise&&(yield this.root.refreshPromise,yield r.ju.toPromise(this._onDidRender.event)),n}))}setSelection(e,t){const i=e.map((e=>this.getDataNode(e)));this.tree.setSelection(i,t)}getSelection(){return this.tree.getSelection().map((e=>e.element))}setFocus(e,t){const i=e.map((e=>this.getDataNode(e)));this.tree.setFocus(i,t)}getFocus(){return this.tree.getFocus().map((e=>e.element))}reveal(e,t){this.tree.reveal(this.getDataNode(e),t)}getDataNode(e){const t=this.nodes.get(e===this.root.element?null:e);if(!t)throw new y(this.user,`Data tree node not found: ${e}`);return t}refreshAndRenderNode(e,t,i,n){return _e(this,void 0,void 0,(function*(){yield this.refreshNode(e,t,i),this.render(e,i,n)}))}refreshNode(e,t,i){return _e(this,void 0,void 0,(function*(){let n;return this.subTreeRefreshPromises.forEach(((o,s)=>{!n&&function(e,t){return e===t||we(e,t)||we(t,e)}(s,e)&&(n=o.then((()=>this.refreshNode(e,t,i))))})),n||this.doRefreshSubTree(e,t,i)}))}doRefreshSubTree(e,t,i){return _e(this,void 0,void 0,(function*(){let n;e.refreshPromise=new Promise((e=>n=e)),this.subTreeRefreshPromises.set(e,e.refreshPromise),e.refreshPromise.finally((()=>{e.refreshPromise=void 0,this.subTreeRefreshPromises.delete(e)}));try{const n=yield this.doRefreshNode(e,t,i);e.stale=!1,yield R.jT.settled(n.map((e=>this.doRefreshSubTree(e,t,i))))}finally{n()}}))}doRefreshNode(e,t,i){return _e(this,void 0,void 0,(function*(){let n;if(e.hasChildren=!!this.dataSource.hasChildren(e.element),e.hasChildren){const t=(0,R.Vs)(800);t.then((()=>{e.slow=!0,this._onDidChangeNodeSlowState.fire(e)}),(e=>null)),n=this.doGetChildren(e).finally((()=>t.cancel()))}else n=Promise.resolve(S.$.empty());try{const o=yield n;return this.setChildren(e,o,t,i)}catch(t){if(e!==this.root&&this.tree.hasElement(e)&&this.tree.collapse(e),(0,ve.VV)(t))return[];throw t}finally{e.slow&&(e.slow=!1,this._onDidChangeNodeSlowState.fire(e))}}))}doGetChildren(e){let t=this.refreshPromises.get(e);return t||(t=(0,R.PG)((()=>_e(this,void 0,void 0,(function*(){const t=yield this.dataSource.getChildren(e.element);return this.processChildren(t)})))),this.refreshPromises.set(e,t),t.finally((()=>{this.refreshPromises.delete(e)})))}_onDidChangeCollapseState({node:e,deep:t}){null!==e.element&&!e.collapsed&&e.element.stale&&(t?this.collapse(e.element.element):this.refreshAndRenderNode(e.element,!1).catch(ve.dL))}setChildren(e,t,i,n){const o=[...t];if(0===e.children.length&&0===o.length)return[];const s=new Map,r=new Map;for(const t of e.children)if(s.set(t.element,t),this.identityProvider){const e=this.tree.isCollapsed(t);r.set(t.id,{node:t,collapsed:e})}const a=[],l=o.map((t=>{const o=!!this.dataSource.hasChildren(t);if(!this.identityProvider){const i=be({element:t,parent:e,hasChildren:o});return o&&this.collapseByDefault&&!this.collapseByDefault(t)&&(i.collapsedByDefault=!1,a.push(i)),i}const l=this.identityProvider.getId(t).toString(),c=r.get(l);if(c){const e=c.node;return s.delete(e.element),this.nodes.delete(e.element),this.nodes.set(t,e),e.element=t,e.hasChildren=o,i?c.collapsed?(e.children.forEach((e=>Ie(e,(e=>this.nodes.delete(e.element))))),e.children.splice(0,e.children.length),e.stale=!0):a.push(e):o&&this.collapseByDefault&&!this.collapseByDefault(t)&&(e.collapsedByDefault=!1,a.push(e)),e}const d=be({element:t,parent:e,id:l,hasChildren:o});return n&&n.viewState.focus&&n.viewState.focus.indexOf(l)>-1&&n.focus.push(d),n&&n.viewState.selection&&n.viewState.selection.indexOf(l)>-1&&n.selection.push(d),n&&n.viewState.expanded&&n.viewState.expanded.indexOf(l)>-1?a.push(d):o&&this.collapseByDefault&&!this.collapseByDefault(t)&&(d.collapsedByDefault=!1,a.push(d)),d}));for(const e of s.values())Ie(e,(e=>this.nodes.delete(e.element)));for(const e of l)this.nodes.set(e.element,e);return e.children.splice(0,e.children.length,...l),e!==this.root&&this.autoExpandSingleChildren&&1===l.length&&0===a.length&&(l[0].collapsedByDefault=!1,a.push(l[0])),a}render(e,t,i){const n=e.children.map((e=>this.asTreeElement(e,t))),o=i&&Object.assign(Object.assign({},i),{diffIdentityProvider:i.diffIdentityProvider&&{getId:e=>i.diffIdentityProvider.getId(e.element)}});this.tree.setChildren(e===this.root?null:e,n,o),e!==this.root&&this.tree.setCollapsible(e,e.hasChildren),this._onDidRender.fire()}asTreeElement(e,t){if(e.stale)return{element:e,collapsible:e.hasChildren,collapsed:!0};let i;return i=!(t&&t.viewState.expanded&&e.id&&t.viewState.expanded.indexOf(e.id)>-1)&&e.collapsedByDefault,e.collapsedByDefault=void 0,{element:e,children:e.hasChildren?S.$.map(e.children,(e=>this.asTreeElement(e,t))):[],collapsible:e.hasChildren,collapsed:i}}processChildren(e){return this.sorter&&(e=[...e].sort(this.sorter.compare.bind(this.sorter))),e}dispose(){this.disposables.dispose()}}class Te{constructor(e){this.node=e}get element(){return{elements:this.node.element.elements.map((e=>e.element)),incompressible:this.node.element.incompressible}}get children(){return this.node.children.map((e=>new Te(e)))}get depth(){return this.node.depth}get visibleChildrenCount(){return this.node.visibleChildrenCount}get visibleChildIndex(){return this.node.visibleChildIndex}get collapsible(){return this.node.collapsible}get collapsed(){return this.node.collapsed}get visible(){return this.node.visible}get filterData(){return this.node.filterData}}class Me{constructor(e,t,i,n){this.renderer=e,this.nodeMapper=t,this.compressibleNodeMapperProvider=i,this.onDidChangeTwistieState=n,this.renderedNodes=new Map,this.disposables=[],this.templateId=e.templateId}renderTemplate(e){return{templateData:this.renderer.renderTemplate(e)}}renderElement(e,t,i,n){this.renderer.renderElement(this.nodeMapper.map(e),t,i.templateData,n)}renderCompressedElements(e,t,i,n){this.renderer.renderCompressedElements(this.compressibleNodeMapperProvider().map(e),t,i.templateData,n)}renderTwistie(e,t){return e.slow?(t.classList.add(...O.classNamesArray),!0):(t.classList.remove(...O.classNamesArray),!1)}disposeElement(e,t,i,n){this.renderer.disposeElement&&this.renderer.disposeElement(this.nodeMapper.map(e),t,i.templateData,n)}disposeCompressedElements(e,t,i,n){this.renderer.disposeCompressedElements&&this.renderer.disposeCompressedElements(this.compressibleNodeMapperProvider().map(e),t,i.templateData,n)}disposeTemplate(e){this.renderer.disposeTemplate(e.templateData)}dispose(){this.renderedNodes.clear(),this.disposables=(0,a.B9)(this.disposables)}}class Ae extends Ee{constructor(e,t,i,n,o,s,r={}){super(e,t,i,o,s,r),this.compressionDelegate=n,this.compressibleNodeMapper=new C((e=>new Te(e))),this.filter=r.filter}createTree(e,t,i,n,o){const s=new $(i),r=n.map((e=>new Me(e,this.nodeMapper,(()=>this.compressibleNodeMapper),this._onDidChangeNodeSlowState.event))),a=function(e){const t=e&&De(e);return t&&Object.assign(Object.assign({},t),{keyboardNavigationLabelProvider:t.keyboardNavigationLabelProvider&&Object.assign(Object.assign({},t.keyboardNavigationLabelProvider),{getCompressedNodeKeyboardNavigationLabel:t=>e.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(t.map((e=>e.element)))})})}(o)||{};return new me(e,t,s,r,a)}asTreeElement(e,t){return Object.assign({incompressible:this.compressionDelegate.isIncompressible(e.element)},super.asTreeElement(e,t))}updateOptions(e={}){this.tree.updateOptions(e)}render(e,t){if(!this.identityProvider)return super.render(e,t);const i=e=>this.identityProvider.getId(e).toString(),n=e=>{const t=new Set;for(const n of e){const e=this.tree.getCompressedTreeNode(n===this.root?null:n);if(e.element)for(const n of e.element.elements)t.add(i(n.element))}return t},o=n(this.tree.getSelection()),s=n(this.tree.getFocus());super.render(e,t);const r=this.getSelection();let a=!1;const l=this.getFocus();let c=!1;const d=e=>{const t=e.element;if(t)for(let e=0;e<t.elements.length;e++){const n=i(t.elements[e].element),d=t.elements[t.elements.length-1].element;o.has(n)&&-1===r.indexOf(d)&&(r.push(d),a=!0),s.has(n)&&-1===l.indexOf(d)&&(l.push(d),c=!0)}e.children.forEach(d)};d(this.tree.getCompressedTreeNode(e===this.root?null:e)),a&&this.setSelection(r),c&&this.setFocus(l)}processChildren(e){return this.filter&&(e=S.$.filter(e,(e=>{const t=this.filter.filter(e,1),i="boolean"==typeof(n=t)?n?1:0:k(n)?L(n.visibility):L(n);var n;if(2===i)throw new Error("Recursive tree visibility not supported in async data compressed trees");return 1===i}))),super.processChildren(e)}}class Oe extends te{constructor(e,t,i,n,o,s={}){super(e,t,i,n,s),this.user=e,this.dataSource=o,this.identityProvider=s.identityProvider}createModel(e,t,i){return new ie(e,t,i)}}var Pe=i(31106),Re=i(33108),Fe=i(23193),Be=i(38819),Ve=i(39282),We=i(72065),He=i(91847),ze=i(89872),je=i(88810),Ue=i(97781),$e=function(e,t,i,n){var o,s=arguments.length,r=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(r=(s<3?o(r):s>3?o(t,i,r):o(t,i))||r);return s>3&&r&&Object.defineProperty(t,i,r),r},Ke=function(e,t){return function(i,n){t(i,n,e)}};const qe=(0,We.yh)("listService");let Ze=class{constructor(e){this._themeService=e,this.disposables=new a.SL,this.lists=[],this._lastFocusedWidget=void 0,this._hasCreatedStyleController=!1}get lastFocusedList(){return this._lastFocusedWidget}register(e,t){if(!this._hasCreatedStyleController){this._hasCreatedStyleController=!0;const e=new l.wD((0,n.dS)(),"");this.disposables.add((0,je.Jl)(e,this._themeService))}if(this.lists.some((t=>t.widget===e)))throw new Error("Cannot register the same widget multiple times");const i={widget:e,extraContextKeys:t};return this.lists.push(i),e.getHTMLElement()===document.activeElement&&(this._lastFocusedWidget=e),(0,a.F8)(e.onDidFocus((()=>this._lastFocusedWidget=e)),(0,a.OF)((()=>this.lists.splice(this.lists.indexOf(i),1))),e.onDidDispose((()=>{this.lists=this.lists.filter((e=>e!==i)),this._lastFocusedWidget===e&&(this._lastFocusedWidget=void 0)})))}dispose(){this.disposables.dispose()}};Ze=$e([Ke(0,Ue.XE)],Ze);const Ge=new Be.uy("listFocus",!0),Ye=new Be.uy("listSupportsMultiselect",!0),Qe=Be.Ao.and(Ge,Be.Ao.not(Ve.d)),Xe=new Be.uy("listHasSelectionOrFocus",!1),Je=new Be.uy("listDoubleSelection",!1),et=new Be.uy("listMultiSelection",!1),tt=new Be.uy("listSelectionNavigation",!1),it="listAutomaticKeyboardNavigation";function nt(e,t){const i=e.createScoped(t.getHTMLElement());return Ge.bindTo(i),i}const ot="workbench.list.multiSelectModifier",st="workbench.list.openMode",rt="workbench.list.horizontalScrolling",at="workbench.list.keyboardNavigation",lt="workbench.list.automaticKeyboardNavigation",ct="workbench.tree.indent",dt="workbench.tree.renderIndentGuides",ht="workbench.list.smoothScrolling",ut="workbench.list.mouseWheelScrollSensitivity",gt="workbench.list.fastScrollSensitivity",pt="workbench.tree.expandMode";function ft(e){return"alt"===e.getValue(ot)}class mt extends a.JT{constructor(e){super(),this.configurationService=e,this.useAltAsMultipleSelectionModifier=ft(e),this.registerListeners()}registerListeners(){this._register(this.configurationService.onDidChangeConfiguration((e=>{e.affectsConfiguration(ot)&&(this.useAltAsMultipleSelectionModifier=ft(this.configurationService))})))}isSelectionSingleChangeEvent(e){return this.useAltAsMultipleSelectionModifier?e.browserEvent.altKey:(0,l.Zo)(e)}isSelectionRangeChangeEvent(e){return(0,l.wn)(e)}}function vt(e,t,i){var n;const o=new a.SL;return[Object.assign(Object.assign({},e),{keyboardNavigationDelegate:{mightProducePrintableCharacter:e=>i.mightProducePrintableCharacter(e)},smoothScrolling:Boolean(t.getValue(ht)),mouseWheelScrollSensitivity:t.getValue(ut),fastScrollSensitivity:t.getValue(gt),multipleSelectionController:null!==(n=e.multipleSelectionController)&&void 0!==n?n:o.add(new mt(t))}),o]}let _t=class extends l.aV{constructor(e,t,i,n,o,s,r,a,l,c){const d=void 0!==o.horizontalScrolling?o.horizontalScrolling:Boolean(l.getValue(rt)),[h,u]=vt(o,l,c);super(e,t,i,n,Object.assign(Object.assign(Object.assign({keyboardSupport:!1},(0,je.o)(a.getColorTheme(),je.O2)),h),{horizontalScrolling:d})),this.disposables.add(u),this.contextKeyService=nt(s,this),this.themeService=a,this.listSupportsMultiSelect=Ye.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(!1!==o.multipleSelectionSupport);tt.bindTo(this.contextKeyService).set(Boolean(o.selectionNavigation)),this.listHasSelectionOrFocus=Xe.bindTo(this.contextKeyService),this.listDoubleSelection=Je.bindTo(this.contextKeyService),this.listMultiSelection=et.bindTo(this.contextKeyService),this.horizontalScrolling=o.horizontalScrolling,this._useAltAsMultipleSelectionModifier=ft(l),this.disposables.add(this.contextKeyService),this.disposables.add(r.register(this)),o.overrideStyles&&this.updateStyles(o.overrideStyles),this.disposables.add(this.onDidChangeSelection((()=>{const e=this.getSelection(),t=this.getFocus();this.contextKeyService.bufferChangeEvents((()=>{this.listHasSelectionOrFocus.set(e.length>0||t.length>0),this.listMultiSelection.set(e.length>1),this.listDoubleSelection.set(2===e.length)}))}))),this.disposables.add(this.onDidChangeFocus((()=>{const e=this.getSelection(),t=this.getFocus();this.listHasSelectionOrFocus.set(e.length>0||t.length>0)}))),this.disposables.add(l.onDidChangeConfiguration((e=>{e.affectsConfiguration(ot)&&(this._useAltAsMultipleSelectionModifier=ft(l));let t={};if(e.affectsConfiguration(rt)&&void 0===this.horizontalScrolling){const e=Boolean(l.getValue(rt));t=Object.assign(Object.assign({},t),{horizontalScrolling:e})}if(e.affectsConfiguration(ht)){const e=Boolean(l.getValue(ht));t=Object.assign(Object.assign({},t),{smoothScrolling:e})}if(e.affectsConfiguration(ut)){const e=l.getValue(ut);t=Object.assign(Object.assign({},t),{mouseWheelScrollSensitivity:e})}if(e.affectsConfiguration(gt)){const e=l.getValue(gt);t=Object.assign(Object.assign({},t),{fastScrollSensitivity:e})}Object.keys(t).length>0&&this.updateOptions(t)}))),this.navigator=new Ct(this,Object.assign({configurationService:l},o)),this.disposables.add(this.navigator)}updateOptions(e){super.updateOptions(e),e.overrideStyles&&this.updateStyles(e.overrideStyles),void 0!==e.multipleSelectionSupport&&this.listSupportsMultiSelect.set(!!e.multipleSelectionSupport)}updateStyles(e){var t;null===(t=this._styler)||void 0===t||t.dispose(),this._styler=(0,je.Jl)(this,this.themeService,e)}dispose(){var e;null===(e=this._styler)||void 0===e||e.dispose(),super.dispose()}};_t=$e([Ke(5,Be.i6),Ke(6,qe),Ke(7,Ue.XE),Ke(8,Re.Ui),Ke(9,He.d)],_t);let bt=class extends h{constructor(e,t,i,n,o,s,r,l,c,d){const h=void 0!==o.horizontalScrolling?o.horizontalScrolling:Boolean(c.getValue(rt)),[u,g]=vt(o,c,d);super(e,t,i,n,Object.assign(Object.assign(Object.assign({keyboardSupport:!1},(0,je.o)(l.getColorTheme(),je.O2)),u),{horizontalScrolling:h})),this.disposables=new a.SL,this.disposables.add(g),this.contextKeyService=nt(s,this),this.themeService=l,this.horizontalScrolling=o.horizontalScrolling,this.listSupportsMultiSelect=Ye.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(!1!==o.multipleSelectionSupport);tt.bindTo(this.contextKeyService).set(Boolean(o.selectionNavigation)),this._useAltAsMultipleSelectionModifier=ft(c),this.disposables.add(this.contextKeyService),this.disposables.add(r.register(this)),o.overrideStyles&&this.updateStyles(o.overrideStyles),o.overrideStyles&&this.disposables.add((0,je.Jl)(this,l,o.overrideStyles)),this.disposables.add(c.onDidChangeConfiguration((e=>{e.affectsConfiguration(ot)&&(this._useAltAsMultipleSelectionModifier=ft(c));let t={};if(e.affectsConfiguration(rt)&&void 0===this.horizontalScrolling){const e=Boolean(c.getValue(rt));t=Object.assign(Object.assign({},t),{horizontalScrolling:e})}if(e.affectsConfiguration(ht)){const e=Boolean(c.getValue(ht));t=Object.assign(Object.assign({},t),{smoothScrolling:e})}if(e.affectsConfiguration(ut)){const e=c.getValue(ut);t=Object.assign(Object.assign({},t),{mouseWheelScrollSensitivity:e})}if(e.affectsConfiguration(gt)){const e=c.getValue(gt);t=Object.assign(Object.assign({},t),{fastScrollSensitivity:e})}Object.keys(t).length>0&&this.updateOptions(t)}))),this.navigator=new Ct(this,Object.assign({configurationService:c},o)),this.disposables.add(this.navigator)}updateOptions(e){super.updateOptions(e),e.overrideStyles&&this.updateStyles(e.overrideStyles),void 0!==e.multipleSelectionSupport&&this.listSupportsMultiSelect.set(!!e.multipleSelectionSupport)}updateStyles(e){var t;null===(t=this._styler)||void 0===t||t.dispose(),this._styler=(0,je.Jl)(this,this.themeService,e)}dispose(){var e;null===(e=this._styler)||void 0===e||e.dispose(),this.disposables.dispose(),super.dispose()}};bt=$e([Ke(5,Be.i6),Ke(6,qe),Ke(7,Ue.XE),Ke(8,Re.Ui),Ke(9,He.d)],bt);let wt=class extends f{constructor(e,t,i,n,o,s,r,l,c,d,h){const u=void 0!==s.horizontalScrolling?s.horizontalScrolling:Boolean(d.getValue(rt)),[g,p]=vt(s,d,h);super(e,t,i,n,o,Object.assign(Object.assign(Object.assign({keyboardSupport:!1},(0,je.o)(c.getColorTheme(),je.O2)),g),{horizontalScrolling:u})),this.disposables=new a.SL,this.disposables.add(p),this.contextKeyService=nt(r,this),this.themeService=c,this.listSupportsMultiSelect=Ye.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(!1!==s.multipleSelectionSupport);tt.bindTo(this.contextKeyService).set(Boolean(s.selectionNavigation)),this.listHasSelectionOrFocus=Xe.bindTo(this.contextKeyService),this.listDoubleSelection=Je.bindTo(this.contextKeyService),this.listMultiSelection=et.bindTo(this.contextKeyService),this.horizontalScrolling=s.horizontalScrolling,this._useAltAsMultipleSelectionModifier=ft(d),this.disposables.add(this.contextKeyService),this.disposables.add(l.register(this)),s.overrideStyles&&this.updateStyles(s.overrideStyles),this.disposables.add(this.onDidChangeSelection((()=>{const e=this.getSelection(),t=this.getFocus();this.contextKeyService.bufferChangeEvents((()=>{this.listHasSelectionOrFocus.set(e.length>0||t.length>0),this.listMultiSelection.set(e.length>1),this.listDoubleSelection.set(2===e.length)}))}))),this.disposables.add(this.onDidChangeFocus((()=>{const e=this.getSelection(),t=this.getFocus();this.listHasSelectionOrFocus.set(e.length>0||t.length>0)}))),this.disposables.add(d.onDidChangeConfiguration((e=>{e.affectsConfiguration(ot)&&(this._useAltAsMultipleSelectionModifier=ft(d));let t={};if(e.affectsConfiguration(rt)&&void 0===this.horizontalScrolling){const e=Boolean(d.getValue(rt));t=Object.assign(Object.assign({},t),{horizontalScrolling:e})}if(e.affectsConfiguration(ht)){const e=Boolean(d.getValue(ht));t=Object.assign(Object.assign({},t),{smoothScrolling:e})}if(e.affectsConfiguration(ut)){const e=d.getValue(ut);t=Object.assign(Object.assign({},t),{mouseWheelScrollSensitivity:e})}if(e.affectsConfiguration(gt)){const e=d.getValue(gt);t=Object.assign(Object.assign({},t),{fastScrollSensitivity:e})}Object.keys(t).length>0&&this.updateOptions(t)}))),this.navigator=new xt(this,Object.assign({configurationService:d},s)),this.disposables.add(this.navigator)}updateOptions(e){super.updateOptions(e),e.overrideStyles&&this.updateStyles(e.overrideStyles),void 0!==e.multipleSelectionSupport&&this.listSupportsMultiSelect.set(!!e.multipleSelectionSupport)}updateStyles(e){var t;null===(t=this._styler)||void 0===t||t.dispose(),this._styler=(0,je.Jl)(this,this.themeService,e)}dispose(){var e;null===(e=this._styler)||void 0===e||e.dispose(),this.disposables.dispose(),super.dispose()}};wt=$e([Ke(6,Be.i6),Ke(7,qe),Ke(8,Ue.XE),Ke(9,Re.Ui),Ke(10,He.d)],wt);class yt extends a.JT{constructor(e,t){var i;super(),this.widget=e,this._onDidOpen=this._register(new r.Q5),this.onDidOpen=this._onDidOpen.event,this._register(r.ju.filter(this.widget.onDidChangeSelection,(e=>e.browserEvent instanceof KeyboardEvent))((e=>this.onSelectionFromKeyboard(e)))),this._register(this.widget.onPointer((e=>this.onPointer(e.element,e.browserEvent)))),this._register(this.widget.onMouseDblClick((e=>this.onMouseDblClick(e.element,e.browserEvent)))),"boolean"!=typeof(null==t?void 0:t.openOnSingleClick)&&(null==t?void 0:t.configurationService)?(this.openOnSingleClick="doubleClick"!==(null==t?void 0:t.configurationService.getValue(st)),this._register(null==t?void 0:t.configurationService.onDidChangeConfiguration((()=>{this.openOnSingleClick="doubleClick"!==(null==t?void 0:t.configurationService.getValue(st))})))):this.openOnSingleClick=null===(i=null==t?void 0:t.openOnSingleClick)||void 0===i||i}onSelectionFromKeyboard(e){if(1!==e.elements.length)return;const t=e.browserEvent,i="boolean"!=typeof t.preserveFocus||t.preserveFocus,n="boolean"==typeof t.pinned?t.pinned:!i;this._open(this.getSelectedElement(),i,n,!1,e.browserEvent)}onPointer(e,t){if(!this.openOnSingleClick)return;if(2===t.detail)return;const i=1===t.button,n=t.ctrlKey||t.metaKey||t.altKey;this._open(e,!0,i,n,t)}onMouseDblClick(e,t){if(!t)return;const i=t.target;if(i.classList.contains("monaco-tl-twistie")||i.classList.contains("monaco-icon-label")&&i.classList.contains("folder-icon")&&t.offsetX<16)return;const n=t.ctrlKey||t.metaKey||t.altKey;this._open(e,!1,!0,n,t)}_open(e,t,i,n,o){e&&this._onDidOpen.fire({editorOptions:{preserveFocus:t,pinned:i,revealIfVisible:!0},sideBySide:n,element:e,browserEvent:o})}}class Ct extends yt{constructor(e,t){super(e,t),this.widget=e}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class xt extends yt{constructor(e,t){super(e,t)}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class St extends yt{constructor(e,t){super(e,t)}getSelectedElement(){var e;return null!==(e=this.widget.getSelection()[0])&&void 0!==e?e:void 0}}function kt(e,t){let i=!1;return n=>{if(i)return i=!1,!1;const o=t.softDispatch(n,e);return o&&o.enterChord?(i=!0,!1):(i=!1,!0)}}let Lt=class extends pe{constructor(e,t,i,n,o,s,r,a,l,c,d){const{options:h,getAutomaticKeyboardNavigation:u,disposable:g}=Tt(t,o,s,l,c,d);super(e,t,i,n,h),this.disposables.add(g),this.internals=new Mt(this,o,u,o.overrideStyles,s,r,a,l,d),this.disposables.add(this.internals)}updateOptions(e){super.updateOptions(e),this.internals.updateOptions(e)}};Lt=$e([Ke(5,Be.i6),Ke(6,qe),Ke(7,Ue.XE),Ke(8,Re.Ui),Ke(9,He.d),Ke(10,Pe.F)],Lt);let Nt=class extends me{constructor(e,t,i,n,o,s,r,a,l,c,d){const{options:h,getAutomaticKeyboardNavigation:u,disposable:g}=Tt(t,o,s,l,c,d);super(e,t,i,n,h),this.disposables.add(g),this.internals=new Mt(this,o,u,o.overrideStyles,s,r,a,l,d),this.disposables.add(this.internals)}updateOptions(e={}){super.updateOptions(e),e.overrideStyles&&this.internals.updateStyleOverrides(e.overrideStyles),this.internals.updateOptions(e)}};Nt=$e([Ke(5,Be.i6),Ke(6,qe),Ke(7,Ue.XE),Ke(8,Re.Ui),Ke(9,He.d),Ke(10,Pe.F)],Nt);let Dt=class extends Oe{constructor(e,t,i,n,o,s,r,a,l,c,d,h){const{options:u,getAutomaticKeyboardNavigation:g,disposable:p}=Tt(t,s,r,c,d,h);super(e,t,i,n,o,u),this.disposables.add(p),this.internals=new Mt(this,s,g,s.overrideStyles,r,a,l,c,h),this.disposables.add(this.internals)}updateOptions(e={}){super.updateOptions(e),e.overrideStyles&&this.internals.updateStyleOverrides(e.overrideStyles),this.internals.updateOptions(e)}};Dt=$e([Ke(6,Be.i6),Ke(7,qe),Ke(8,Ue.XE),Ke(9,Re.Ui),Ke(10,He.d),Ke(11,Pe.F)],Dt);let It=class extends Ee{constructor(e,t,i,n,o,s,r,a,l,c,d,h){const{options:u,getAutomaticKeyboardNavigation:g,disposable:p}=Tt(t,s,r,c,d,h);super(e,t,i,n,o,u),this.disposables.add(p),this.internals=new Mt(this,s,g,s.overrideStyles,r,a,l,c,h),this.disposables.add(this.internals)}get onDidOpen(){return this.internals.onDidOpen}updateOptions(e={}){super.updateOptions(e),e.overrideStyles&&this.internals.updateStyleOverrides(e.overrideStyles),this.internals.updateOptions(e)}};It=$e([Ke(6,Be.i6),Ke(7,qe),Ke(8,Ue.XE),Ke(9,Re.Ui),Ke(10,He.d),Ke(11,Pe.F)],It);let Et=class extends Ae{constructor(e,t,i,n,o,s,r,a,l,c,d,h,u){const{options:g,getAutomaticKeyboardNavigation:p,disposable:f}=Tt(t,r,a,d,h,u);super(e,t,i,n,o,s,g),this.disposables.add(f),this.internals=new Mt(this,r,p,r.overrideStyles,a,l,c,d,u),this.disposables.add(this.internals)}updateOptions(e){super.updateOptions(e),this.internals.updateOptions(e)}};function Tt(e,t,i,n,o,s){var r;const a=()=>{let e=Boolean(i.getContextKeyValue(it));return e&&(e=Boolean(n.getValue(lt))),e},l=s.isScreenReaderOptimized(),c=t.simpleKeyboardNavigation||l?"simple":n.getValue(at),d=void 0!==t.horizontalScrolling?t.horizontalScrolling:Boolean(n.getValue(rt)),[h,u]=vt(t,n,o),g=t.additionalScrollHeight;return{getAutomaticKeyboardNavigation:a,disposable:u,options:Object.assign(Object.assign({keyboardSupport:!1},h),{indent:"number"==typeof n.getValue(ct)?n.getValue(ct):void 0,renderIndentGuides:n.getValue(dt),smoothScrolling:Boolean(n.getValue(ht)),automaticKeyboardNavigation:a(),simpleKeyboardNavigation:"simple"===c,filterOnType:"filter"===c,horizontalScrolling:d,keyboardNavigationEventFilter:kt(e,o),additionalScrollHeight:g,hideTwistiesOfChildlessElements:t.hideTwistiesOfChildlessElements,expandOnlyOnTwistieClick:null!==(r=t.expandOnlyOnTwistieClick)&&void 0!==r?r:"doubleClick"===n.getValue(pt)})}}Et=$e([Ke(7,Be.i6),Ke(8,qe),Ke(9,Ue.XE),Ke(10,Re.Ui),Ke(11,He.d),Ke(12,Pe.F)],Et);let Mt=class{constructor(e,t,i,n,o,s,r,a,l){this.tree=e,this.themeService=r,this.disposables=[],this.contextKeyService=nt(o,e),this.listSupportsMultiSelect=Ye.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(!1!==t.multipleSelectionSupport);tt.bindTo(this.contextKeyService).set(Boolean(t.selectionNavigation)),this.hasSelectionOrFocus=Xe.bindTo(this.contextKeyService),this.hasDoubleSelection=Je.bindTo(this.contextKeyService),this.hasMultiSelection=et.bindTo(this.contextKeyService),this._useAltAsMultipleSelectionModifier=ft(a);const c=new Set;c.add(it);const d=()=>{const t=l.isScreenReaderOptimized()?"simple":a.getValue(at);e.updateOptions({simpleKeyboardNavigation:"simple"===t,filterOnType:"filter"===t})};this.updateStyleOverrides(n),this.disposables.push(this.contextKeyService,s.register(e),e.onDidChangeSelection((()=>{const t=e.getSelection(),i=e.getFocus();this.contextKeyService.bufferChangeEvents((()=>{this.hasSelectionOrFocus.set(t.length>0||i.length>0),this.hasMultiSelection.set(t.length>1),this.hasDoubleSelection.set(2===t.length)}))})),e.onDidChangeFocus((()=>{const t=e.getSelection(),i=e.getFocus();this.hasSelectionOrFocus.set(t.length>0||i.length>0)})),a.onDidChangeConfiguration((n=>{let o={};if(n.affectsConfiguration(ot)&&(this._useAltAsMultipleSelectionModifier=ft(a)),n.affectsConfiguration(ct)){const e=a.getValue(ct);o=Object.assign(Object.assign({},o),{indent:e})}if(n.affectsConfiguration(dt)){const e=a.getValue(dt);o=Object.assign(Object.assign({},o),{renderIndentGuides:e})}if(n.affectsConfiguration(ht)){const e=Boolean(a.getValue(ht));o=Object.assign(Object.assign({},o),{smoothScrolling:e})}if(n.affectsConfiguration(at)&&d(),n.affectsConfiguration(lt)&&(o=Object.assign(Object.assign({},o),{automaticKeyboardNavigation:i()})),n.affectsConfiguration(rt)&&void 0===t.horizontalScrolling){const e=Boolean(a.getValue(rt));o=Object.assign(Object.assign({},o),{horizontalScrolling:e})}if(n.affectsConfiguration(pt)&&void 0===t.expandOnlyOnTwistieClick&&(o=Object.assign(Object.assign({},o),{expandOnlyOnTwistieClick:"doubleClick"===a.getValue(pt)})),n.affectsConfiguration(ut)){const e=a.getValue(ut);o=Object.assign(Object.assign({},o),{mouseWheelScrollSensitivity:e})}if(n.affectsConfiguration(gt)){const e=a.getValue(gt);o=Object.assign(Object.assign({},o),{fastScrollSensitivity:e})}Object.keys(o).length>0&&e.updateOptions(o)})),this.contextKeyService.onDidChangeContext((t=>{t.affectsSome(c)&&e.updateOptions({automaticKeyboardNavigation:i()})})),l.onDidChangeScreenReaderOptimized((()=>d()))),this.navigator=new St(e,Object.assign({configurationService:a},t)),this.disposables.push(this.navigator)}get onDidOpen(){return this.navigator.onDidOpen}updateOptions(e){void 0!==e.multipleSelectionSupport&&this.listSupportsMultiSelect.set(!!e.multipleSelectionSupport)}updateStyleOverrides(e){(0,a.B9)(this.styler),this.styler=e?(0,je.Jl)(this.tree,this.themeService,e):a.JT.None}dispose(){this.disposables=(0,a.B9)(this.disposables),(0,a.B9)(this.styler),this.styler=void 0}};Mt=$e([Ke(4,Be.i6),Ke(5,qe),Ke(6,Ue.XE),Ke(7,Re.Ui),Ke(8,Pe.F)],Mt);ze.B.as(Fe.IP.Configuration).registerConfiguration({id:"workbench",order:7,title:(0,H.N)("workbenchConfigurationTitle","Workbench"),type:"object",properties:{[ot]:{type:"string",enum:["ctrlCmd","alt"],enumDescriptions:[(0,H.N)("multiSelectModifier.ctrlCmd","Maps to `Control` on Windows and Linux and to `Command` on macOS."),(0,H.N)("multiSelectModifier.alt","Maps to `Alt` on Windows and Linux and to `Option` on macOS.")],default:"ctrlCmd",description:(0,H.N)({key:"multiSelectModifier",comment:["- `ctrlCmd` refers to a value the setting can take and should not be localized.","- `Control` and `Command` refer to the modifier keys Ctrl or Cmd on the keyboard and can be localized."]},"The modifier to be used to add an item in trees and lists to a multi-selection with the mouse (for example in the explorer, open editors and scm view). The 'Open to Side' mouse gestures - if supported - will adapt such that they do not conflict with the multiselect modifier.")},[st]:{type:"string",enum:["singleClick","doubleClick"],default:"singleClick",description:(0,H.N)({key:"openModeModifier",comment:["`singleClick` and `doubleClick` refers to a value the setting can take and should not be localized."]},"Controls how to open items in trees and lists using the mouse (if supported). Note that some trees and lists might choose to ignore this setting if it is not applicable.")},[rt]:{type:"boolean",default:!1,description:(0,H.N)("horizontalScrolling setting","Controls whether lists and trees support horizontal scrolling in the workbench. Warning: turning on this setting has a performance implication.")},[ct]:{type:"number",default:8,minimum:0,maximum:40,description:(0,H.N)("tree indent setting","Controls tree indentation in pixels.")},[dt]:{type:"string",enum:["none","onHover","always"],default:"onHover",description:(0,H.N)("render tree indent guides","Controls whether the tree should render indent guides.")},[ht]:{type:"boolean",default:!1,description:(0,H.N)("list smoothScrolling setting","Controls whether lists and trees have smooth scrolling.")},[ut]:{type:"number",default:1,description:(0,H.N)("Mouse Wheel Scroll Sensitivity","A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.")},[gt]:{type:"number",default:5,description:(0,H.N)("Fast Scroll Sensitivity","Scrolling speed multiplier when pressing `Alt`.")},[at]:{type:"string",enum:["simple","highlight","filter"],enumDescriptions:[(0,H.N)("keyboardNavigationSettingKey.simple","Simple keyboard navigation focuses elements which match the keyboard input. Matching is done only on prefixes."),(0,H.N)("keyboardNavigationSettingKey.highlight","Highlight keyboard navigation highlights elements which match the keyboard input. Further up and down navigation will traverse only the highlighted elements."),(0,H.N)("keyboardNavigationSettingKey.filter","Filter keyboard navigation will filter out and hide all the elements which do not match the keyboard input.")],default:"highlight",description:(0,H.N)("keyboardNavigationSettingKey","Controls the keyboard navigation style for lists and trees in the workbench. Can be simple, highlight and filter.")},[lt]:{type:"boolean",default:!0,markdownDescription:(0,H.N)("automatic keyboard navigation setting","Controls whether keyboard navigation in lists and trees is automatically triggered simply by typing. If set to `false`, keyboard navigation is only triggered when executing the `list.toggleKeyboardNavigation` command, for which you can assign a keyboard shortcut.")},[pt]:{type:"string",enum:["singleClick","doubleClick"],default:"singleClick",description:(0,H.N)("expand mode","Controls how tree folders are expanded when clicking the folder names. Note that some trees and lists might choose to ignore this setting if it is not applicable.")}}})},43557:(e,t,i)=>{"use strict";i.d(t,{$V:()=>d,VZ:()=>s,in:()=>r,kw:()=>c});var n=i(4669),o=i(5976);const s=(0,i(72065).yh)("logService");var r;!function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Info=2]="Info",e[e.Warning=3]="Warning",e[e.Error=4]="é”™è¯¯",e[e.Critical=5]="Critical",e[e.Off=6]="Off"}(r||(r={}));const a=r.Info;class l extends o.JT{constructor(){super(...arguments),this.level=a,this._onDidChangeLogLevel=this._register(new n.Q5)}setLevel(e){this.level!==e&&(this.level=e,this._onDidChangeLogLevel.fire(this.level))}getLevel(){return this.level}}class c extends l{constructor(e=a){super(),this.setLevel(e)}trace(e,...t){this.getLevel()<=r.Trace&&console.log("%cTRACE","color: #888",e,...t)}debug(e,...t){this.getLevel()<=r.Debug&&console.log("%cDEBUG","background: #eee; color: #888",e,...t)}info(e,...t){this.getLevel()<=r.Info&&console.log("%c INFO","color: #33f",e,...t)}error(e,...t){this.getLevel()<=r.Error&&console.log("%c  ERR","color: #f33",e,...t)}dispose(){}}class d extends o.JT{constructor(e){super(),this.logger=e,this._register(e)}getLevel(){return this.logger.getLevel()}trace(e,...t){this.logger.trace(e,...t)}debug(e,...t){this.logger.debug(e,...t)}info(e,...t){this.logger.info(e,...t)}error(e,...t){this.logger.error(e,...t)}}},98674:(e,t,i)=>{"use strict";i.d(t,{H0:()=>o,ZL:()=>n,lT:()=>l});var n,o,s=i(14603),r=i(63580),a=i(72065);!function(e){e[e.Hint=1]="Hint",e[e.Info=2]="Info",e[e.Warning=4]="Warning",e[e.Error=8]="é”™è¯¯"}(n||(n={})),function(e){e.compare=function(e,t){return t-e};const t=Object.create(null);t[e.Error]=(0,r.N)("sev.error","é”™è¯¯"),t[e.Warning]=(0,r.N)("sev.warning","Warning"),t[e.Info]=(0,r.N)("sev.info","Info"),e.toString=function(e){return t[e]||""},e.fromSeverity=function(t){switch(t){case s.Z.Error:return e.Error;case s.Z.Warning:return e.Warning;case s.Z.Info:return e.Info;case s.Z.Ignore:return e.Hint}},e.toSeverity=function(t){switch(t){case e.Error:return s.Z.Error;case e.Warning:return s.Z.Warning;case e.Info:return s.Z.Info;case e.Hint:return s.Z.Ignore}}}(n||(n={})),function(e){const t="";function i(e,i){let o=[t];return e.source?o.push(e.source.replace("Â¦","\\Â¦")):o.push(t),e.code?"string"==typeof e.code?o.push(e.code.replace("Â¦","\\Â¦")):o.push(e.code.value.replace("Â¦","\\Â¦")):o.push(t),void 0!==e.severity&&null!==e.severity?o.push(n.toString(e.severity)):o.push(t),e.message&&i?o.push(e.message.replace("Â¦","\\Â¦")):o.push(t),void 0!==e.startLineNumber&&null!==e.startLineNumber?o.push(e.startLineNumber.toString()):o.push(t),void 0!==e.startColumn&&null!==e.startColumn?o.push(e.startColumn.toString()):o.push(t),void 0!==e.endLineNumber&&null!==e.endLineNumber?o.push(e.endLineNumber.toString()):o.push(t),void 0!==e.endColumn&&null!==e.endColumn?o.push(e.endColumn.toString()):o.push(t),o.push(t),o.join("Â¦")}e.makeKey=function(e){return i(e,!0)},e.makeKeyOptionalMessage=i}(o||(o={}));const l=(0,a.yh)("markerService")},59422:(e,t,i)=>{"use strict";i.d(t,{EO:()=>o,lT:()=>n});i(14603);const n=(0,i(72065).yh)("notificationService");class o{}},50988:(e,t,i)=>{"use strict";i.d(t,{SW:()=>c,v4:()=>l,xn:()=>d});var n=i(5976),o=i(97295),s=i(70666),r=i(72065),a=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const l=(0,r.yh)("openerService"),c=Object.freeze({_serviceBrand:void 0,registerOpener:()=>n.JT.None,registerValidator:()=>n.JT.None,registerExternalUriResolver:()=>n.JT.None,setDefaultExternalOpener(){},registerExternalOpener:()=>n.JT.None,open(){return a(this,void 0,void 0,(function*(){return!1}))},resolveExternalUri(e){return a(this,void 0,void 0,(function*(){return{resolved:e,dispose(){}}}))}});function d(e,t){return s.o.isUri(e)?(0,o.qq)(e.scheme,t):(0,o.ok)(e,t+":")}},90535:(e,t,i)=>{"use strict";i.d(t,{E:()=>o,e:()=>s});var n=i(72065);class o{constructor(e){this.callback=e}report(e){this._value=e,this.callback(this._value)}}o.None=Object.freeze({report(){}});const s=(0,n.yh)("editorProgressService")},90725:(e,t,i)=>{"use strict";i.d(t,{IP:()=>a,Ry:()=>n});var n,o=i(9488),s=i(5976),r=i(89872);!function(e){e[e.PRESERVE=0]="PRESERVE",e[e.LAST=1]="LAST"}(n||(n={}));const a={Quickaccess:"workbench.contributions.quickaccess"};r.B.add(a.Quickaccess,new class{constructor(){this.providers=[],this.defaultProvider=void 0}registerQuickAccessProvider(e){return 0===e.prefix.length?this.defaultProvider=e:this.providers.push(e),this.providers.sort(((e,t)=>t.prefix.length-e.prefix.length)),(0,s.OF)((()=>{this.providers.splice(this.providers.indexOf(e),1),this.defaultProvider===e&&(this.defaultProvider=void 0)}))}getQuickAccessProviders(){return(0,o.kX)([this.defaultProvider,...this.providers])}getQuickAccessProvider(e){return e&&this.providers.find((t=>e.startsWith(t.prefix)))||void 0||this.defaultProvider}})},41157:(e,t,i)=>{"use strict";i.d(t,{eJ:()=>s,jG:()=>o.jG});var n=i(72065),o=i(67746);const s=(0,n.yh)("quickInputService")},89872:(e,t,i)=>{"use strict";i.d(t,{B:()=>s});var n=i(35146),o=i(98401);const s=new class{constructor(){this.data=new Map}add(e,t){n.ok(o.HD(e)),n.ok(o.Kn(t)),n.ok(!this.data.has(e),"There is already an extension with this id"),this.data.set(e,t)}as(e){return this.data.get(e)||null}}},26904:(e,t,i)=>{"use strict";i.d(t,{Uy:()=>g,vm:()=>m,fk:()=>p});var n,o=i(4669),s=i(5976),r=i(98401),a=i(15393),l=function(e,t,i,n){return new(i||(i=Promise))((function(o,s){function r(e){try{l(n.next(e))}catch(e){s(e)}}function a(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};!function(e){e[e.None=0]="None",e[e.Initialized=1]="Initialized",e[e.Closed=2]="Closed"}(n||(n={}));class c extends s.JT{constructor(e,t=Object.create(null)){super(),this.database=e,this.options=t,this._onDidChangeStorage=this._register(new o.Q5),this.onDidChangeStorage=this._onDidChangeStorage.event,this.state=n.None,this.cache=new Map,this.flushDelayer=new a.rH(c.DEFAULT_FLUSH_DELAY),this.pendingDeletes=new Set,this.pendingInserts=new Map,this.whenFlushedCallbacks=[],this.registerListeners()}registerListeners(){this._register(this.database.onDidChangeItemsExternal((e=>this.onDidChangeItemsExternal(e))))}onDidChangeItemsExternal(e){var t,i;null===(t=e.changed)||void 0===t||t.forEach(((e,t)=>this.accept(t,e))),null===(i=e.deleted)||void 0===i||i.forEach((e=>this.accept(e,void 0)))}accept(e,t){if(this.state===n.Closed)return;let i=!1;if((0,r.Jp)(t))i=this.cache.delete(e);else{this.cache.get(e)!==t&&(this.cache.set(e,t),i=!0)}i&&this._onDidChangeStorage.fire(e)}get(e,t){const i=this.cache.get(e);return(0,r.Jp)(i)?t:i}getBoolean(e,t){const i=this.get(e);return(0,r.Jp)(i)?t:"true"===i}getNumber(e,t){const i=this.get(e);return(0,r.Jp)(i)?t:parseInt(i,10)}set(e,t){return l(this,void 0,void 0,(function*(){if(this.state===n.Closed)return;if((0,r.Jp)(t))return this.delete(e);const i=String(t);return this.cache.get(e)!==i?(this.cache.set(e,i),this.pendingInserts.set(e,i),this.pendingDeletes.delete(e),this._onDidChangeStorage.fire(e),this.flushDelayer.trigger((()=>this.flushPending()))):void 0}))}delete(e){return l(this,void 0,void 0,(function*(){if(this.state===n.Closed)return;return this.cache.delete(e)?(this.pendingDeletes.has(e)||this.pendingDeletes.add(e),this.pendingInserts.delete(e),this._onDidChangeStorage.fire(e),this.flushDelayer.trigger((()=>this.flushPending()))):void 0}))}get hasPending(){return this.pendingInserts.size>0||this.pendingDeletes.size>0}flushPending(){return l(this,void 0,void 0,(function*(){if(!this.hasPending)return;const e={insert:this.pendingInserts,delete:this.pendingDeletes};return this.pendingDeletes=new Set,this.pendingInserts=new Map,this.database.updateItems(e).finally((()=>{var e;if(!this.hasPending)for(;this.whenFlushedCallbacks.length;)null===(e=this.whenFlushedCallbacks.pop())||void 0===e||e()}))}))}dispose(){this.flushDelayer.dispose(),super.dispose()}}c.DEFAULT_FLUSH_DELAY=100;class d{constructor(){this.onDidChangeItemsExternal=o.ju.None,this.items=new Map}updateItems(e){return l(this,void 0,void 0,(function*(){e.insert&&e.insert.forEach(((e,t)=>this.items.set(t,e))),e.delete&&e.delete.forEach((e=>this.items.delete(e)))}))}}var h=i(72065);const u="__$__targetStorageMarker",g=(0,h.yh)("storageService");var p;!function(e){e[e.NONE=0]="NONE",e[e.SHUTDOWN=1]="SHUTDOWN"}(p||(p={}));class f extends s.JT{constructor(e={flushInterval:f.DEFAULT_FLUSH_INTERVAL}){super(),this.options=e,this._onDidChangeValue=this._register(new o.K3),this._onDidChangeTarget=this._register(new o.K3),this._onWillSaveState=this._register(new o.Q5),this.onWillSaveState=this._onWillSaveState.event,this._workspaceKeyTargets=void 0,this._globalKeyTargets=void 0}emitDidChangeValue(e,t){t===u?(0===e?this._globalKeyTargets=void 0:1===e&&(this._workspaceKeyTargets=void 0),this._onDidChangeTarget.fire({scope:e})):this._onDidChangeValue.fire({scope:e,key:t,target:this.getKeyTargets(e)[t]})}get(e,t,i){var n;return null===(n=this.getStorage(t))||void 0===n?void 0:n.get(e,i)}getBoolean(e,t,i){var n;return null===(n=this.getStorage(t))||void 0===n?void 0:n.getBoolean(e,i)}getNumber(e,t,i){var n;return null===(n=this.getStorage(t))||void 0===n?void 0:n.getNumber(e,i)}store(e,t,i,n){(0,r.Jp)(t)?this.remove(e,i):this.withPausedEmitters((()=>{var o;this.updateKeyTarget(e,i,n),null===(o=this.getStorage(i))||void 0===o||o.set(e,t)}))}remove(e,t){this.withPausedEmitters((()=>{var i;this.updateKeyTarget(e,t,void 0),null===(i=this.getStorage(t))||void 0===i||i.delete(e)}))}withPausedEmitters(e){this._onDidChangeValue.pause(),this._onDidChangeTarget.pause();try{e()}finally{this._onDidChangeValue.resume(),this._onDidChangeTarget.resume()}}updateKeyTarget(e,t,i){var n,o;const s=this.getKeyTargets(t);"number"==typeof i?s[e]!==i&&(s[e]=i,null===(n=this.getStorage(t))||void 0===n||n.set(u,JSON.stringify(s))):"number"==typeof s[e]&&(delete s[e],null===(o=this.getStorage(t))||void 0===o||o.set(u,JSON.stringify(s)))}get workspaceKeyTargets(){return this._workspaceKeyTargets||(this._workspaceKeyTargets=this.loadKeyTargets(1)),this._workspaceKeyTargets}get globalKeyTargets(){return this._globalKeyTargets||(this._globalKeyTargets=this.loadKeyTargets(0)),this._globalKeyTargets}getKeyTargets(e){return 0===e?this.globalKeyTargets:this.workspaceKeyTargets}loadKeyTargets(e){const t=this.get(u,e);if(t)try{return JSON.parse(t)}catch(e){}return Object.create(null)}}f.DEFAULT_FLUSH_INTERVAL=6e4;class m extends f{constructor(){super(),this.globalStorage=this._register(new c(new d)),this.workspaceStorage=this._register(new c(new d)),this._register(this.workspaceStorage.onDidChangeStorage((e=>this.emitDidChangeValue(1,e)))),this._register(this.globalStorage.onDidChangeStorage((e=>this.emitDidChangeValue(0,e))))}getStorage(e){return 0===e?this.globalStorage:this.workspaceStorage}}},10829:(e,t,i)=>{"use strict";i.d(t,{b:()=>n});const n=(0,i(72065).yh)("telemetryService")},73910:(e,t,i)=>{"use strict";i.d(t,{$D:()=>At,$d:()=>gt,A2:()=>Y,AB:()=>q,AS:()=>pt,AW:()=>we,BO:()=>ei,C3:()=>O,CA:()=>Yt,CN:()=>Re,Cd:()=>It,Cz:()=>qe,D0:()=>ce,D1:()=>he,DE:()=>Et,Du:()=>se,E3:()=>Ot,EP:()=>T,ES:()=>Se,Ei:()=>Te,F3:()=>ht,Fm:()=>Ht,Fu:()=>$e,GO:()=>z,Gj:()=>Kt,Gw:()=>ft,HC:()=>je,Hf:()=>de,Hz:()=>Tt,I1:()=>Vt,IP:()=>d,IY:()=>Ut,Id:()=>p,It:()=>Gt,Iv:()=>qt,Jp:()=>Jt,K1:()=>ye,KT:()=>jt,LL:()=>Je,L_:()=>et,Lo:()=>Fe,M6:()=>st,MU:()=>De,NO:()=>le,NP:()=>Lt,Ng:()=>ue,OL:()=>ti,OZ:()=>F,Oo:()=>nt,P4:()=>Ye,P6:()=>u,PR:()=>L,PX:()=>mt,Pk:()=>Bt,Pp:()=>We,Pv:()=>D,R8:()=>m,RV:()=>M,Rz:()=>ke,S:()=>Ct,SP:()=>zt,SU:()=>A,Sb:()=>Pe,Sn:()=>ai,Sw:()=>y,T8:()=>oe,Tn:()=>rt,U6:()=>Wt,Un:()=>xt,VV:()=>Ve,Vq:()=>Dt,XE:()=>N,XL:()=>Qe,XZ:()=>f,Xy:()=>Qt,YI:()=>E,ZG:()=>Pt,Zn:()=>oi,_2:()=>it,_Y:()=>Be,_b:()=>tt,_l:()=>I,_t:()=>R,_w:()=>$,b6:()=>X,b7:()=>H,bK:()=>ze,br:()=>Xt,c6:()=>ne,cb:()=>Nt,cv:()=>ae,dC:()=>ot,dR:()=>g,dt:()=>k,et:()=>K,fE:()=>re,fe:()=>ie,g8:()=>j,g_:()=>Le,gk:()=>Me,gp:()=>J,hE:()=>Ce,hX:()=>He,j5:()=>W,jU:()=>Ie,jb:()=>Mt,kJ:()=>me,kV:()=>Zt,ke:()=>Ze,kv:()=>ct,kw:()=>si,lR:()=>v,lU:()=>Rt,lW:()=>be,lX:()=>Q,lo:()=>fe,mH:()=>Xe,mV:()=>ut,ny:()=>Ne,oQ:()=>_e,oS:()=>yt,op:()=>ve,ov:()=>$t,p:()=>P,pW:()=>te,ph:()=>Ue,pn:()=>Ee,pt:()=>Ae,qe:()=>U,rg:()=>at,rh:()=>C,s$:()=>dt,sE:()=>x,sK:()=>Ke,sg:()=>w,tZ:()=>pe,u2:()=>Ft,uo:()=>ee,ur:()=>b,ux:()=>St,vG:()=>wt,xL:()=>_,yJ:()=>Oe,yb:()=>xe,yn:()=>Z,yp:()=>Ge,yt:()=>lt,zJ:()=>S,zK:()=>ge,zR:()=>G});var n=i(15393),o=i(41264),s=i(4669),r=i(98401),a=i(63580),l=i(81294),c=i(89872);const d={ColorContribution:"base.contributions.colors"};const h=new class{constructor(){this._onDidChangeSchema=new s.Q5,this.onDidChangeSchema=this._onDidChangeSchema.event,this.colorSchema={type:"object",properties:{}},this.colorReferenceSchema={type:"string",enum:[],enumDescriptions:[]},this.colorsById={}}registerColor(e,t,i,n=!1,o){let s={id:e,description:i,defaults:t,needsTransparency:n,deprecationMessage:o};this.colorsById[e]=s;let r={type:"string",description:i,format:"color-hex",defaultSnippets:[{body:"${1:#ff0000}"}]};return o&&(r.deprecationMessage=o),this.colorSchema.properties[e]=r,this.colorReferenceSchema.enum.push(e),this.colorReferenceSchema.enumDescriptions.push(i),this._onDidChangeSchema.fire(),e}resolveDefaultColor(e,t){const i=this.colorsById[e];if(i&&i.defaults){return ai(i.defaults[t.type],t)}}getColorSchema(){return this.colorSchema}toString(){return Object.keys(this.colorsById).sort(((e,t)=>{let i=-1===e.indexOf(".")?0:1,n=-1===t.indexOf(".")?0:1;return i!==n?i-n:e.localeCompare(t)})).map((e=>`- \`${e}\`: ${this.colorsById[e].description}`)).join("\n")}};function u(e,t,i,n,o){return h.registerColor(e,t,i,n,o)}c.B.add(d.ColorContribution,h);const g=u("foreground",{dark:"#CCCCCC",light:"#616161",hc:"#FFFFFF"},a.N("foreground","æ•´ä½“å‰æ™¯è‰²ã€‚è¿™ä¸ªé¢œè‰²åªåœ¨æ²¡æœ‰è¢«ç»„ä»¶è¦†ç›–çš„æƒ…å†µä¸‹ä½¿ç”¨.")),p=u("errorForeground",{dark:"#F48771",light:"#A1260D",hc:"#F48771"},a.N("errorForeground","é”™è¯¯ä¿¡æ¯çš„æ•´ä½“å‰æ™¯è‰²ã€‚è¿™ä¸ªé¢œè‰²åªåœ¨æ²¡æœ‰è¢«ç»„ä»¶è¦†ç›–çš„æƒ…å†µä¸‹ä½¿ç”¨.")),f=u("icon.foreground",{dark:"#C5C5C5",light:"#424242",hc:"#FFFFFF"},a.N("iconForeground","The default color for icons in the workbench.")),m=u("focusBorder",{dark:"#007FD4",light:"#0090F1",hc:"#F38518"},a.N("focusBorder","Overall border color for focused elements. This color is only used if not overridden by a component.")),v=u("contrastBorder",{light:null,dark:null,hc:"#6FC3DF"},a.N("contrastBorder","An extra border around elements to separate them from others for greater contrast.")),_=u("contrastActiveBorder",{light:null,dark:null,hc:m},a.N("activeContrastBorder","An extra border around active elements to separate them from others for greater contrast.")),b=u("textLink.foreground",{light:"#006AB1",dark:"#3794FF",hc:"#3794FF"},a.N("textLinkForeground","Foreground color for links in text.")),w=u("textLink.activeForeground",{light:"#006AB1",dark:"#3794FF",hc:"#3794FF"},a.N("textLinkActiveForeground","Foreground color for links in text when clicked on and on mouse hover.")),y=u("textCodeBlock.background",{light:"#dcdcdc66",dark:"#0a0a0a66",hc:o.Il.black},a.N("textCodeBlockBackground","Background color for code blocks in text.")),C=u("widget.shadow",{dark:oi(o.Il.black,.36),light:oi(o.Il.black,.16),hc:null},a.N("widgetShadow","Shadow color of widgets such as find/replace inside the editor.")),x=u("input.background",{dark:"#3C3C3C",light:o.Il.white,hc:o.Il.black},a.N("inputBoxBackground","Input box background.")),S=u("input.foreground",{dark:g,light:g,hc:g},a.N("inputBoxForeground","Input box foreground.")),k=u("input.border",{dark:null,light:null,hc:v},a.N("inputBoxBorder","Input box border.")),L=u("inputOption.activeBorder",{dark:"#007ACC00",light:"#007ACC00",hc:v},a.N("inputBoxActiveOptionBorder","Border color of activated options in input fields.")),N=u("inputOption.activeBackground",{dark:oi(m,.4),light:oi(m,.2),hc:o.Il.transparent},a.N("inputOption.activeBackground","Background color of activated options in input fields.")),D=u("inputOption.activeForeground",{dark:o.Il.white,light:o.Il.black,hc:null},a.N("inputOption.activeForeground","Foreground color of activated options in input fields.")),I=u("inputValidation.infoBackground",{dark:"#063B49",light:"#D6ECF2",hc:o.Il.black},a.N("inputValidationInfoBackground","Input validation background color for information severity.")),E=u("inputValidation.infoForeground",{dark:null,light:null,hc:null},a.N("inputValidationInfoForeground","Input validation foreground color for information severity.")),T=u("inputValidation.infoBorder",{dark:"#007acc",light:"#007acc",hc:v},a.N("inputValidationInfoBorder","Input validation border color for information severity.")),M=u("inputValidation.warningBackground",{dark:"#352A05",light:"#F6F5D2",hc:o.Il.black},a.N("inputValidationWarningBackground","Input validation background color for warning severity.")),A=u("inputValidation.warningForeground",{dark:null,light:null,hc:null},a.N("inputValidationWarningForeground","Input validation foreground color for warning severity.")),O=u("inputValidation.warningBorder",{dark:"#B89500",light:"#B89500",hc:v},a.N("inputValidationWarningBorder","Input validation border color for warning severity.")),P=u("inputValidation.errorBackground",{dark:"#5A1D1D",light:"#F2DEDE",hc:o.Il.black},a.N("inputValidationErrorBackground","Input validation background color for error severity.")),R=u("inputValidation.errorForeground",{dark:null,light:null,hc:null},a.N("inputValidationErrorForeground","Input validation foreground color for error severity.")),F=u("inputValidation.errorBorder",{dark:"#BE1100",light:"#BE1100",hc:v},a.N("inputValidationErrorBorder","Input validation border color for error severity.")),B=u("dropdown.background",{dark:"#3C3C3C",light:o.Il.white,hc:o.Il.black},a.N("dropdownBackground","Dropdown background.")),V=u("dropdown.foreground",{dark:"#F0F0F0",light:null,hc:o.Il.white},a.N("dropdownForeground","Dropdown foreground.")),W=u("button.foreground",{dark:o.Il.white,light:o.Il.white,hc:o.Il.white},a.N("buttonForeground","Button foreground color.")),H=u("button.background",{dark:"#0E639C",light:"#007ACC",hc:null},a.N("buttonBackground","Button background color.")),z=u("button.hoverBackground",{dark:ni(H,.2),light:ii(H,.2),hc:null},a.N("buttonHoverBackground","Button background color when hovering.")),j=u("badge.background",{dark:"#4D4D4D",light:"#C4C4C4",hc:o.Il.black},a.N("badgeBackground","Badge background color. Badges are small information labels, e.g. for search results count.")),U=u("badge.foreground",{dark:o.Il.white,light:"#333",hc:o.Il.white},a.N("badgeForeground","Badge foreground color. Badges are small information labels, e.g. for search results count.")),$=u("scrollbar.shadow",{dark:"#000000",light:"#DDDDDD",hc:null},a.N("scrollbarShadow","Scrollbar shadow to indicate that the view is scrolled.")),K=u("scrollbarSlider.background",{dark:o.Il.fromHex("#797979").transparent(.4),light:o.Il.fromHex("#646464").transparent(.4),hc:oi(v,.6)},a.N("scrollbarSliderBackground","Scrollbar slider background color.")),q=u("scrollbarSlider.hoverBackground",{dark:o.Il.fromHex("#646464").transparent(.7),light:o.Il.fromHex("#646464").transparent(.7),hc:oi(v,.8)},a.N("scrollbarSliderHoverBackground","Scrollbar slider background color when hovering.")),Z=u("scrollbarSlider.activeBackground",{dark:o.Il.fromHex("#BFBFBF").transparent(.4),light:o.Il.fromHex("#000000").transparent(.6),hc:v},a.N("scrollbarSliderActiveBackground","Scrollbar slider background color when clicked on.")),G=u("progressBar.background",{dark:o.Il.fromHex("#0E70C0"),light:o.Il.fromHex("#0E70C0"),hc:v},a.N("progressBarBackground","Background color of the progress bar that can show for long running operations.")),Y=u("editorError.background",{dark:null,light:null,hc:null},a.N("editorError.background","Background color of error text in the editor. The color must not be opaque so as not to hide underlying decorations."),!0),Q=u("editorError.foreground",{dark:"#F14C4C",light:"#E51400",hc:null},a.N("editorError.foreground","Foreground color of error squigglies in the editor.")),X=u("editorError.border",{dark:null,light:null,hc:o.Il.fromHex("#E47777").transparent(.8)},a.N("errorBorder","Border color of error boxes in the editor.")),J=u("editorWarning.background",{dark:null,light:null,hc:null},a.N("editorWarning.background","Background color of warning text in the editor. The color must not be opaque so as not to hide underlying decorations."),!0),ee=u("editorWarning.foreground",{dark:"#CCA700",light:"#BF8803",hc:null},a.N("editorWarning.foreground","Foreground color of warning squigglies in the editor.")),te=u("editorWarning.border",{dark:null,light:null,hc:o.Il.fromHex("#FFCC00").transparent(.8)},a.N("warningBorder","Border color of warning boxes in the editor.")),ie=u("editorInfo.background",{dark:null,light:null,hc:null},a.N("editorInfo.background","Background color of info text in the editor. The color must not be opaque so as not to hide underlying decorations."),!0),ne=u("editorInfo.foreground",{dark:"#3794FF",light:"#1a85ff",hc:"#3794FF"},a.N("editorInfo.foreground","Foreground color of info squigglies in the editor.")),oe=u("editorInfo.border",{dark:null,light:null,hc:o.Il.fromHex("#3794FF").transparent(.8)},a.N("infoBorder","Border color of info boxes in the editor.")),se=u("editorHint.foreground",{dark:o.Il.fromHex("#eeeeee").transparent(.7),light:"#6c6c6c",hc:null},a.N("editorHint.foreground","Foreground color of hint squigglies in the editor.")),re=u("editorHint.border",{dark:null,light:null,hc:o.Il.fromHex("#eeeeee").transparent(.8)},a.N("hintBorder","Border color of hint boxes in the editor.")),ae=u("editor.background",{light:"#fffffe",dark:"#1E1E1E",hc:o.Il.black},a.N("editorBackground","Editor background color.")),le=u("editor.foreground",{light:"#333333",dark:"#BBBBBB",hc:o.Il.white},a.N("editorForeground","Editor default foreground color.")),ce=u("editorWidget.background",{dark:"#252526",light:"#F3F3F3",hc:"#0C141F"},a.N("editorWidgetBackground","Background color of editor widgets, such as find/replace.")),de=u("editorWidget.foreground",{dark:g,light:g,hc:g},a.N("editorWidgetForeground","Foreground color of editor widgets, such as find/replace.")),he=u("editorWidget.border",{dark:"#454545",light:"#C8C8C8",hc:v},a.N("editorWidgetBorder","Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.")),ue=u("editorWidget.resizeBorder",{light:null,dark:null,hc:null},a.N("editorWidgetResizeBorder","Border color of the resize bar of editor widgets. The color is only used if the widget chooses to have a resize border and if the color is not overridden by a widget.")),ge=u("quickInput.background",{dark:ce,light:ce,hc:ce},a.N("pickerBackground","Quick picker background color. The quick picker widget is the container for pickers like the command palette.")),pe=u("quickInput.foreground",{dark:de,light:de,hc:de},a.N("pickerForeground","Quick picker foreground color. The quick picker widget is the container for pickers like the command palette.")),fe=u("quickInputTitle.background",{dark:new o.Il(new o.VS(255,255,255,.105)),light:new o.Il(new o.VS(0,0,0,.06)),hc:"#000000"},a.N("pickerTitleBackground","Quick picker title background color. The quick picker widget is the container for pickers like the command palette.")),me=u("pickerGroup.foreground",{dark:"#3794FF",light:"#0066BF",hc:o.Il.white},a.N("pickerGroupForeground","Quick picker color for grouping labels.")),ve=u("pickerGroup.border",{dark:"#3F3F46",light:"#CCCEDB",hc:o.Il.white},a.N("pickerGroupBorder","Quick picker color for grouping borders.")),_e=u("keybindingLabel.background",{dark:new o.Il(new o.VS(128,128,128,.17)),light:new o.Il(new o.VS(221,221,221,.4)),hc:o.Il.transparent},a.N("keybindingLabelBackground","Keybinding label background color. The keybinding label is used to represent a keyboard shortcut.")),be=u("keybindingLabel.foreground",{dark:o.Il.fromHex("#CCCCCC"),light:o.Il.fromHex("#555555"),hc:o.Il.white},a.N("keybindingLabelForeground","Keybinding label foreground color. The keybinding label is used to represent a keyboard shortcut.")),we=u("keybindingLabel.border",{dark:new o.Il(new o.VS(51,51,51,.6)),light:new o.Il(new o.VS(204,204,204,.4)),hc:new o.Il(new o.VS(111,195,223))},a.N("keybindingLabelBorder","Keybinding label border color. The keybinding label is used to represent a keyboard shortcut.")),ye=u("keybindingLabel.bottomBorder",{dark:new o.Il(new o.VS(68,68,68,.6)),light:new o.Il(new o.VS(187,187,187,.4)),hc:new o.Il(new o.VS(111,195,223))},a.N("keybindingLabelBottomBorder","Keybinding label border bottom color. The keybinding label is used to represent a keyboard shortcut.")),Ce=u("editor.selectionBackground",{light:"#ADD6FF",dark:"#264F78",hc:"#f3f518"},a.N("editorSelectionBackground","Color of the editor selection.")),xe=u("editor.selectionForeground",{light:null,dark:null,hc:"#000000"},a.N("editorSelectionForeground","Color of the selected text for high contrast.")),Se=u("editor.inactiveSelectionBackground",{light:oi(Ce,.5),dark:oi(Ce,.5),hc:oi(Ce,.5)},a.N("editorInactiveSelection","Color of the selection in an inactive editor. The color must not be opaque so as not to hide underlying decorations."),!0),ke=u("editor.selectionHighlightBackground",{light:ri(Ce,ae,.3,.6),dark:ri(Ce,ae,.3,.6),hc:null},a.N("editorSelectionHighlight","Color for regions with the same content as the selection. The color must not be opaque so as not to hide underlying decorations."),!0),Le=u("editor.selectionHighlightBorder",{light:null,dark:null,hc:_},a.N("editorSelectionHighlightBorder","Border color for regions with the same content as the selection.")),Ne=u("editor.findMatchBackground",{light:"#A8AC94",dark:"#515C6A",hc:null},a.N("editorFindMatch","Color of the current search match.")),De=u("editor.findMatchHighlightBackground",{light:"#EA5C0055",dark:"#EA5C0055",hc:null},a.N("findMatchHighlight","Color of the other search matches. The color must not be opaque so as not to hide underlying decorations."),!0),Ie=u("editor.findRangeHighlightBackground",{dark:"#3a3d4166",light:"#b4b4b44d",hc:null},a.N("findRangeHighlight","Color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations."),!0),Ee=u("editor.findMatchBorder",{light:null,dark:null,hc:_},a.N("editorFindMatchBorder","Border color of the current search match.")),Te=u("editor.findMatchHighlightBorder",{light:null,dark:null,hc:_},a.N("findMatchHighlightBorder","Border color of the other search matches.")),Me=u("editor.findRangeHighlightBorder",{dark:null,light:null,hc:oi(_,.4)},a.N("findRangeHighlightBorder","Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations."),!0),Ae=u("editor.hoverHighlightBackground",{light:"#ADD6FF26",dark:"#264f7840",hc:"#ADD6FF26"},a.N("hoverHighlight","Highlight below the word for which a hover is shown. The color must not be opaque so as not to hide underlying decorations."),!0),Oe=u("editorHoverWidget.background",{light:ce,dark:ce,hc:ce},a.N("hoverBackground","Background color of the editor hover.")),Pe=u("editorHoverWidget.foreground",{light:de,dark:de,hc:de},a.N("hoverForeground","Foreground color of the editor hover.")),Re=u("editorHoverWidget.border",{light:he,dark:he,hc:he},a.N("hoverBorder","Border color of the editor hover.")),Fe=u("editorHoverWidget.statusBarBackground",{dark:ni(Oe,.2),light:ii(Oe,.05),hc:ce},a.N("statusBarBackground","Background color of the editor hover status bar.")),Be=u("editorLink.activeForeground",{dark:"#4E94CE",light:o.Il.blue,hc:o.Il.cyan},a.N("activeLinkForeground","Color of active links.")),Ve=u("editorInlayHint.foreground",{dark:oi(U,.8),light:oi(U,.8),hc:U},a.N("editorInlayHintForeground","Foreground color of inline hints")),We=u("editorInlayHint.background",{dark:oi(j,.6),light:oi(j,.3),hc:j},a.N("editorInlayHintBackground","Background color of inline hints")),He=u("editorInlayHint.typeForeground",{dark:Ve,light:Ve,hc:Ve},a.N("editorInlayHintForegroundTypes","Foreground color of inline hints for types")),ze=u("editorInlayHint.typeBackground",{dark:We,light:We,hc:We},a.N("editorInlayHintBackgroundTypes","Background color of inline hints for types")),je=u("editorInlayHint.parameterForeground",{dark:Ve,light:Ve,hc:Ve},a.N("editorInlayHintForegroundParameter","Foreground color of inline hints for parameters")),Ue=u("editorInlayHint.parameterBackground",{dark:We,light:We,hc:We},a.N("editorInlayHintBackgroundParameter","Background color of inline hints for parameters")),$e=u("editorLightBulb.foreground",{dark:"#FFCC00",light:"#DDB100",hc:"#FFCC00"},a.N("editorLightBulbForeground","The color used for the lightbulb actions icon.")),Ke=u("editorLightBulbAutoFix.foreground",{dark:"#75BEFF",light:"#007ACC",hc:"#75BEFF"},a.N("editorLightBulbAutoFixForeground","The color used for the lightbulb auto fix actions icon.")),qe=new o.Il(new o.VS(155,185,85,.2)),Ze=new o.Il(new o.VS(255,0,0,.2)),Ge=u("diffEditor.insertedTextBackground",{dark:qe,light:qe,hc:null},a.N("diffEditorInserted","Background color for text that got inserted. The color must not be opaque so as not to hide underlying decorations."),!0),Ye=u("diffEditor.removedTextBackground",{dark:Ze,light:Ze,hc:null},a.N("diffEditorRemoved","Background color for text that got removed. The color must not be opaque so as not to hide underlying decorations."),!0),Qe=u("diffEditor.insertedTextBorder",{dark:null,light:null,hc:"#33ff2eff"},a.N("diffEditorInsertedOutline","Outline color for the text that got inserted.")),Xe=u("diffEditor.removedTextBorder",{dark:null,light:null,hc:"#FF008F"},a.N("diffEditorRemovedOutline","Outline color for text that got removed.")),Je=u("diffEditor.border",{dark:null,light:null,hc:v},a.N("diffEditorBorder","Border color between the two text editors.")),et=u("diffEditor.diagonalFill",{dark:"#cccccc33",light:"#22222233",hc:null},a.N("diffDiagonalFill","Color of the diff editor's diagonal fill. The diagonal fill is used in side-by-side diff views.")),tt=u("list.focusBackground",{dark:null,light:null,hc:null},a.N("listFocusBackground","List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),it=u("list.focusForeground",{dark:null,light:null,hc:null},a.N("listFocusForeground","List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),nt=u("list.focusOutline",{dark:m,light:m,hc:_},a.N("listFocusOutline","List/Tree outline color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),ot=u("list.activeSelectionBackground",{dark:"#094771",light:"#0060C0",hc:null},a.N("listActiveSelectionBackground","List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),st=u("list.activeSelectionForeground",{dark:o.Il.white,light:o.Il.white,hc:null},a.N("listActiveSelectionForeground","List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),rt=u("list.activeSelectionIconForeground",{dark:null,light:null,hc:null},a.N("listActiveSelectionIconForeground","List/Tree icon foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.")),at=u("list.inactiveSelectionBackground",{dark:"#37373D",light:"#E4E6F1",hc:null},a.N("listInactiveSelectionBackground","List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.")),lt=u("list.inactiveSelectionForeground",{dark:null,light:null,hc:null},a.N("listInactiveSelectionForeground","List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.")),ct=u("list.inactiveSelectionIconForeground",{dark:null,light:null,hc:null},a.N("listInactiveSelectionIconForeground","List/Tree icon foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.")),dt=u("list.inactiveFocusBackground",{dark:null,light:null,hc:null},a.N("listInactiveFocusBackground","List/Tree background color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.")),ht=u("list.inactiveFocusOutline",{dark:null,light:null,hc:null},a.N("listInactiveFocusOutline","List/Tree outline color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.")),ut=u("list.hoverBackground",{dark:"#2A2D2E",light:"#F0F0F0",hc:null},a.N("listHoverBackground","List/Tree background when hovering over items using the mouse.")),gt=u("list.hoverForeground",{dark:null,light:null,hc:null},a.N("listHoverForeground","List/Tree foreground when hovering over items using the mouse.")),pt=u("list.dropBackground",{dark:"#062F4A",light:"#D6EBFF",hc:null},a.N("listDropBackground","List/Tree drag and drop background when moving items around using the mouse.")),ft=u("list.highlightForeground",{dark:"#18A3FF",light:"#0066BF",hc:m},a.N("highlight","List/Tree foreground color of the match highlights when searching inside the list/tree.")),mt=u("list.focusHighlightForeground",{dark:ft,light:(vt=ot,_t=ft,bt="#9DDDFF",{op:5,if:vt,then:_t,else:bt}),hc:ft},a.N("listFocusHighlightForeground","List/Tree foreground color of the match highlights on actively focused items when searching inside the list/tree."));var vt,_t,bt;const wt=u("listFilterWidget.background",{light:"#efc1ad",dark:"#653723",hc:o.Il.black},a.N("listFilterWidgetBackground","Background color of the type filter widget in lists and trees.")),yt=u("listFilterWidget.outline",{dark:o.Il.transparent,light:o.Il.transparent,hc:"#f38518"},a.N("listFilterWidgetOutline","Outline color of the type filter widget in lists and trees.")),Ct=u("listFilterWidget.noMatchesOutline",{dark:"#BE1100",light:"#BE1100",hc:v},a.N("listFilterWidgetNoMatchesOutline","Outline color of the type filter widget in lists and trees, when there are no matches.")),xt=u("tree.indentGuidesStroke",{dark:"#585858",light:"#a9a9a9",hc:"#a9a9a9"},a.N("treeIndentGuidesStroke","Tree stroke color for the indentation guides.")),St=u("tree.tableColumnsBorder",{dark:"#CCCCCC20",light:"#61616120",hc:null},a.N("treeIndentGuidesStroke","Tree stroke color for the indentation guides.")),kt=u("quickInput.list.focusBackground",{dark:null,light:null,hc:null},"",void 0,a.N("quickInput.list.focusBackground deprecation","Please use quickInputList.focusBackground instead")),Lt=u("quickInputList.focusForeground",{dark:st,light:st,hc:st},a.N("quickInput.listFocusForeground","Quick picker foreground color for the focused item.")),Nt=u("quickInputList.focusIconForeground",{dark:rt,light:rt,hc:rt},a.N("quickInput.listFocusIconForeground","Quick picker icon foreground color for the focused item.")),Dt=u("quickInputList.focusBackground",{dark:si(kt,ot),light:si(kt,ot),hc:null},a.N("quickInput.listFocusBackground","Quick picker background color for the focused item.")),It=u("menu.border",{dark:null,light:null,hc:v},a.N("menuBorder","Border color of menus.")),Et=u("menu.foreground",{dark:V,light:g,hc:V},a.N("menuForeground","Foreground color of menu items.")),Tt=u("menu.background",{dark:B,light:B,hc:B},a.N("menuBackground","Background color of menu items.")),Mt=u("menu.selectionForeground",{dark:st,light:st,hc:st},a.N("menuSelectionForeground","Foreground color of the selected menu item in menus.")),At=u("menu.selectionBackground",{dark:ot,light:ot,hc:ot},a.N("menuSelectionBackground","Background color of the selected menu item in menus.")),Ot=u("menu.selectionBorder",{dark:null,light:null,hc:_},a.N("menuSelectionBorder","Border color of the selected menu item in menus.")),Pt=u("menu.separatorBackground",{dark:"#BBBBBB",light:"#888888",hc:v},a.N("menuSeparatorBackground","Color of a separator menu item in menus.")),Rt=u("toolbar.hoverBackground",{dark:"#5a5d5e50",light:"#b8b8b850",hc:null},a.N("toolbarHoverBackground","Toolbar background when hovering over actions using the mouse")),Ft=u("editor.snippetTabstopHighlightBackground",{dark:new o.Il(new o.VS(124,124,124,.3)),light:new o.Il(new o.VS(10,50,100,.2)),hc:new o.Il(new o.VS(124,124,124,.3))},a.N("snippetTabstopHighlightBackground","Highlight background color of a snippet tabstop.")),Bt=u("editor.snippetTabstopHighlightBorder",{dark:null,light:null,hc:null},a.N("snippetTabstopHighlightBorder","Highlight border color of a snippet tabstop.")),Vt=u("editor.snippetFinalTabstopHighlightBackground",{dark:null,light:null,hc:null},a.N("snippetFinalTabstopHighlightBackground","Highlight background color of the final tabstop of a snippet.")),Wt=u("editor.snippetFinalTabstopHighlightBorder",{dark:"#525252",light:new o.Il(new o.VS(10,50,100,.5)),hc:"#525252"},a.N("snippetFinalTabstopHighlightBorder","Highlight border color of the final tabstop of a snippet.")),Ht=u("editorOverviewRuler.findMatchForeground",{dark:"#d186167e",light:"#d186167e",hc:"#AB5A00"},a.N("overviewRulerFindMatchForeground","Overview ruler marker color for find matches. The color must not be opaque so as not to hide underlying decorations."),!0),zt=u("editorOverviewRuler.selectionHighlightForeground",{dark:"#A0A0A0CC",light:"#A0A0A0CC",hc:"#A0A0A0CC"},a.N("overviewRulerSelectionHighlightForeground","Overview ruler marker color for selection highlights. The color must not be opaque so as not to hide underlying decorations."),!0),jt=u("minimap.findMatchHighlight",{light:"#d18616",dark:"#d18616",hc:"#AB5A00"},a.N("minimapFindMatchHighlight","Minimap marker color for find matches."),!0),Ut=u("minimap.selectionOccurrenceHighlight",{light:"#c9c9c9",dark:"#676767",hc:"#ffffff"},a.N("minimapSelectionOccurrenceHighlight","Minimap marker color for repeating editor selections."),!0),$t=u("minimap.selectionHighlight",{light:"#ADD6FF",dark:"#264F78",hc:"#ffffff"},a.N("minimapSelectionHighlight","Minimap marker color for the editor selection."),!0),Kt=u("minimap.errorHighlight",{dark:new o.Il(new o.VS(255,18,18,.7)),light:new o.Il(new o.VS(255,18,18,.7)),hc:new o.Il(new o.VS(255,50,50,1))},a.N("minimapError","Minimap marker color for errors.")),qt=u("minimap.warningHighlight",{dark:ee,light:ee,hc:te},a.N("overviewRuleWarning","Minimap marker color for warnings.")),Zt=u("minimap.background",{dark:null,light:null,hc:null},a.N("minimapBackground","Minimap background color.")),Gt=u("minimap.foregroundOpacity",{dark:o.Il.fromHex("#000f"),light:o.Il.fromHex("#000f"),hc:o.Il.fromHex("#000f")},a.N("minimapForegroundOpacity",'Opacity of foreground elements rendered in the minimap. For example, "#000000c0" will render the elements with 75% opacity.')),Yt=u("minimapSlider.background",{light:oi(K,.5),dark:oi(K,.5),hc:oi(K,.5)},a.N("minimapSliderBackground","Minimap slider background color.")),Qt=u("minimapSlider.hoverBackground",{light:oi(q,.5),dark:oi(q,.5),hc:oi(q,.5)},a.N("minimapSliderHoverBackground","Minimap slider background color when hovering.")),Xt=u("minimapSlider.activeBackground",{light:oi(Z,.5),dark:oi(Z,.5),hc:oi(Z,.5)},a.N("minimapSliderActiveBackground","Minimap slider background color when clicked on.")),Jt=u("problemsErrorIcon.foreground",{dark:Q,light:Q,hc:Q},a.N("problemsErrorIconForeground","The color used for the problems error icon.")),ei=u("problemsWarningIcon.foreground",{dark:ee,light:ee,hc:ee},a.N("problemsWarningIconForeground","The color used for the problems warning icon.")),ti=u("problemsInfoIcon.foreground",{dark:ne,light:ne,hc:ne},a.N("problemsInfoIconForeground","The color used for the problems info icon."));function ii(e,t){return{op:0,value:e,factor:t}}function ni(e,t){return{op:1,value:e,factor:t}}function oi(e,t){return{op:2,value:e,factor:t}}function si(...e){return{op:3,values:e}}function ri(e,t,i,n){return{op:4,value:e,background:t,factor:i,transparency:n}}function ai(e,t){if(null!==e)return"string"==typeof e?"#"===e[0]?o.Il.fromHex(e):t.getColor(e):e instanceof o.Il?e:"object"==typeof e?function(e,t){var i,n,s;switch(e.op){case 0:return null===(i=ai(e.value,t))||void 0===i?void 0:i.darken(e.factor);case 1:return null===(n=ai(e.value,t))||void 0===n?void 0:n.lighten(e.factor);case 2:return null===(s=ai(e.value,t))||void 0===s?void 0:s.transparent(e.factor);case 3:for(const i of e.values){const e=ai(i,t);if(e)return e}return;case 5:return ai(t.defines(e.if)?e.then:e.else,t);case 4:const a=ai(e.value,t);if(!a)return;const l=ai(e.background,t);return l?a.isDarkerThan(l)?o.Il.getLighterColor(a,l,e.factor).transparent(e.transparency):o.Il.getDarkerColor(a,l,e.factor).transparent(e.transparency):a.transparent(e.factor*e.transparency);default:throw(0,r.vE)(e)}}(e,t):void 0}const li="vscode://schemas/workbench-colors";let ci=c.B.as(l.I.JSONContribution);ci.registerSchema(li,h.getColorSchema());const di=new n.pY((()=>ci.notifySchemaChanged(li)),200);h.onDidChangeSchema((()=>{di.isScheduled()||di.schedule()}))},59554:(e,t,i)=>{"use strict";i.d(t,{Ks:()=>u,q5:()=>h,s_:()=>m});var n=i(15393),o=i(73046),s=i(4669),r=i(63580),a=i(81294),l=i(89872),c=i(97781);const d=new class{constructor(){this._onDidChange=new s.Q5,this.onDidChange=this._onDidChange.event,this.iconSchema={definitions:{icons:{type:"object",properties:{fontId:{type:"string",description:(0,r.N)("iconDefintion.fontId","The id of the font to use. If not set, the font that is defined first is used.")},fontCharacter:{type:"string",description:(0,r.N)("iconDefintion.fontCharacter","The font character associated with the icon definition.")}},additionalProperties:!1,defaultSnippets:[{body:{fontCharacter:"\\\\e030"}}]}},type:"object",properties:{}},this.iconReferenceSchema={type:"string",pattern:`^${o.dT.iconNameExpression}$`,enum:[],enumDescriptions:[]},this.iconsById={},this.iconFontsById={}}registerIcon(e,t,i,n){const o=this.iconsById[e];if(o){if(i&&!o.description){o.description=i,this.iconSchema.properties[e].markdownDescription=`${i} $(${e})`;const t=this.iconReferenceSchema.enum.indexOf(e);-1!==t&&(this.iconReferenceSchema.enumDescriptions[t]=i),this._onDidChange.fire()}return o}let s={id:e,description:i,defaults:t,deprecationMessage:n};this.iconsById[e]=s;let r={$ref:"#/definitions/icons"};return n&&(r.deprecationMessage=n),i&&(r.markdownDescription=`${i}: $(${e})`),this.iconSchema.properties[e]=r,this.iconReferenceSchema.enum.push(e),this.iconReferenceSchema.enumDescriptions.push(i||""),this._onDidChange.fire(),{id:e}}getIcons(){return Object.keys(this.iconsById).map((e=>this.iconsById[e]))}getIcon(e){return this.iconsById[e]}getIconSchema(){return this.iconSchema}getIconFont(e){return this.iconFontsById[e]}toString(){const e=(e,t)=>e.id.localeCompare(t.id),t=e=>{for(;c.kS.isThemeIcon(e.defaults);)e=this.iconsById[e.defaults.id];return`codicon codicon-${e?e.id:""}`};let i=[];i.push("| preview     | identifier                        | default codicon ID                | description"),i.push("| ----------- | --------------------------------- | --------------------------------- | --------------------------------- |");const n=Object.keys(this.iconsById).map((e=>this.iconsById[e]));for(const o of n.filter((e=>!!e.description)).sort(e))i.push(`|<i class="${t(o)}"></i>|${o.id}|${c.kS.isThemeIcon(o.defaults)?o.defaults.id:o.id}|${o.description||""}|`);i.push("| preview     | identifier                        "),i.push("| ----------- | --------------------------------- |");for(const o of n.filter((e=>!c.kS.isThemeIcon(e.defaults))).sort(e))i.push(`|<i class="${t(o)}"></i>|${o.id}|`);return i.join("\n")}};function h(e,t,i,n){return d.registerIcon(e,t,i,n)}function u(){return d}l.B.add("base.contributions.icons",d),function(){for(const e of o.fK.all)d.registerIcon(e.id,e.definition,e.description);o.fK.onDidRegister((e=>d.registerIcon(e.id,e.definition,e.description)))}();const g="vscode://schemas/icons";let p=l.B.as(a.I.JSONContribution);p.registerSchema(g,d.getIconSchema());const f=new n.pY((()=>p.notifySchemaChanged(g)),200);d.onDidChange((()=>{f.isScheduled()||f.schedule()}));const m=h("widget-close",o.lA.close,(0,r.N)("widgetClose","Icon for the close action in widgets."))},88810:(e,t,i)=>{"use strict";i.d(t,{Jl:()=>a,O2:()=>l,WZ:()=>r,o:()=>o,tj:()=>d});var n=i(73910);function o(e,t){const i=Object.create(null);for(let o in t){const s=t[o];s&&(i[o]=(0,n.Sn)(s,e))}return i}function s(e,t,i){function n(){const n=o(e.getColorTheme(),t);"function"==typeof i?i(n):i.style(n)}return n(),e.onDidColorThemeChange(n)}function r(e,t,i){return s(t,{badgeBackground:(null==i?void 0:i.badgeBackground)||n.g8,badgeForeground:(null==i?void 0:i.badgeForeground)||n.qe,badgeBorder:n.lR},e)}function a(e,t,i){return s(t,Object.assign(Object.assign({},l),i||{}),e)}const l={listFocusBackground:n._b,listFocusForeground:n._2,listFocusOutline:n.Oo,listActiveSelectionBackground:n.dC,listActiveSelectionForeground:n.M6,listActiveSelectionIconForeground:n.Tn,listFocusAndSelectionBackground:n.dC,listFocusAndSelectionForeground:n.M6,listInactiveSelectionBackground:n.rg,listInactiveSelectionIconForeground:n.kv,listInactiveSelectionForeground:n.yt,listInactiveFocusBackground:n.s$,listInactiveFocusOutline:n.F3,listHoverBackground:n.mV,listHoverForeground:n.$d,listDropBackground:n.AS,listSelectionOutline:n.xL,listHoverOutline:n.xL,listFilterWidgetBackground:n.vG,listFilterWidgetOutline:n.oS,listFilterWidgetNoMatchesOutline:n.S,listMatchesShadow:n.rh,treeIndentGuidesStroke:n.Un,tableColumnsBorder:n.ux},c={shadowColor:n.rh,borderColor:n.Cd,foregroundColor:n.DE,backgroundColor:n.Hz,selectionForegroundColor:n.jb,selectionBackgroundColor:n.$D,selectionBorderColor:n.E3,separatorColor:n.ZG};function d(e,t,i){return s(t,Object.assign(Object.assign({},c),i),e)}},92321:(e,t,i)=>{"use strict";var n;i.d(t,{e:()=>n}),function(e){e.DARK="dark",e.LIGHT="light",e.HIGH_CONTRAST="hc"}(n||(n={}))},97781:(e,t,i)=>{"use strict";i.d(t,{EN:()=>u,IP:()=>p,Ic:()=>m,XE:()=>c,bB:()=>v,kS:()=>h,m6:()=>g});var n=i(73046),o=i(4669),s=i(5976),r=i(72065),a=i(89872),l=i(92321);const c=(0,r.yh)("themeService");var d,h;function u(e){return{id:e}}function g(e){switch(e){case l.e.DARK:return"vs-dark";case l.e.HIGH_CONTRAST:return"hc-black";default:return"vs"}}!function(e){e.isThemeColor=function(e){return e&&"object"==typeof e&&"string"==typeof e.id}}(d||(d={})),function(e){e.isThemeIcon=function(e){return e&&"object"==typeof e&&"string"==typeof e.id&&(void 0===e.color||d.isThemeColor(e.color))};const t=new RegExp(`^\\$\\((${n.dT.iconNameExpression}(?:${n.dT.iconModifierExpression})?)\\)$`);e.fromString=function(e){const i=t.exec(e);if(!i)return;let[,n]=i;return{id:n}},e.modify=function(e,t){let i=e.id;const n=i.lastIndexOf("~");return-1!==n&&(i=i.substring(0,n)),t&&(i=`${i}~${t}`),{id:i}},e.isEqual=function(e,t){var i,n;return e.id===t.id&&(null===(i=e.color)||void 0===i?void 0:i.id)===(null===(n=t.color)||void 0===n?void 0:n.id)},e.asThemeIcon=function(e,t){return{id:e.id,color:t?u(t):void 0}},e.asClassNameArray=n.dT.asClassNameArray,e.asClassName=n.dT.asClassName,e.asCSSSelector=n.dT.asCSSSelector}(h||(h={}));const p={ThemingContribution:"base.contributions.theming"};let f=new class{constructor(){this.themingParticipants=[],this.themingParticipants=[],this.onThemingParticipantAddedEmitter=new o.Q5}onColorThemeChange(e){return this.themingParticipants.push(e),this.onThemingParticipantAddedEmitter.fire(e),(0,s.OF)((()=>{const t=this.themingParticipants.indexOf(e);this.themingParticipants.splice(t,1)}))}getThemingParticipants(){return this.themingParticipants}};function m(e){return f.onColorThemeChange(e)}a.B.add(p.ThemingContribution,f);class v extends s.JT{constructor(e){super(),this.themeService=e,this.theme=e.getColorTheme(),this._register(this.themeService.onDidColorThemeChange((e=>this.onThemeChange(e))))}onThemeChange(e){this.theme=e,this.updateStyles()}updateStyles(){}}},64862:(e,t,i)=>{"use strict";i.d(t,{Xt:()=>s,YO:()=>o,gJ:()=>r,tJ:()=>n});const n=(0,i(72065).yh)("undoRedoService");class o{constructor(e,t){this.resource=e,this.elements=t}}class s{constructor(){this.id=s._ID++,this.order=1}nextOrder(){return 0===this.id?0:this.order++}}s._ID=0,s.None=new s;class r{constructor(){this.id=r._ID++,this.order=1}nextOrder(){return 0===this.id?0:this.order++}}r._ID=0,r.None=new r},40382:(e,t,i)=>{"use strict";i.d(t,{ec:()=>n,md:()=>o});i(43702);const n=(0,i(72065).yh)("contextService");class o{constructor(e,t){this.raw=t,this.uri=e.uri,this.index=e.index,this.name=e.name}toJSON(){return{uri:this.uri,name:this.name,index:this.index}}}},35666:e=>{var t=function(e){"use strict";var t,i=Object.prototype,n=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",r=o.asyncIterator||"@@asyncIterator",a=o.toStringTag||"@@toStringTag";function l(e,t,i){return Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,i){return e[t]=i}}function c(e,t,i,n){var o=t&&t.prototype instanceof m?t:m,s=Object.create(o.prototype),r=new D(n||[]);return s._invoke=function(e,t,i){var n=h;return function(o,s){if(n===g)throw new Error("Generator is already running");if(n===p){if("throw"===o)throw s;return E()}for(i.method=o,i.arg=s;;){var r=i.delegate;if(r){var a=k(r,i);if(a){if(a===f)continue;return a}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if(n===h)throw n=p,i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);n=g;var l=d(e,t,i);if("normal"===l.type){if(n=i.done?p:u,l.arg===f)continue;return{value:l.arg,done:i.done}}"throw"===l.type&&(n=p,i.method="throw",i.arg=l.arg)}}}(e,i,r),s}function d(e,t,i){try{return{type:"normal",arg:e.call(t,i)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var h="suspendedStart",u="suspendedYield",g="executing",p="completed",f={};function m(){}function v(){}function _(){}var b={};b[s]=function(){return this};var w=Object.getPrototypeOf,y=w&&w(w(I([])));y&&y!==i&&n.call(y,s)&&(b=y);var C=_.prototype=m.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function i(o,s,r,a){var l=d(e[o],e,s);if("throw"!==l.type){var c=l.arg,h=c.value;return h&&"object"==typeof h&&n.call(h,"__await")?t.resolve(h.__await).then((function(e){i("next",e,r,a)}),(function(e){i("throw",e,r,a)})):t.resolve(h).then((function(e){c.value=e,r(c)}),(function(e){return i("throw",e,r,a)}))}a(l.arg)}var o;this._invoke=function(e,n){function s(){return new t((function(t,o){i(e,n,t,o)}))}return o=o?o.then(s,s):s()}}function k(e,i){var n=e.iterator[i.method];if(n===t){if(i.delegate=null,"throw"===i.method){if(e.iterator.return&&(i.method="return",i.arg=t,k(e,i),"throw"===i.method))return f;i.method="throw",i.arg=new TypeError("The iterator does not provide a 'throw' method")}return f}var o=d(n,e.iterator,i.arg);if("throw"===o.type)return i.method="throw",i.arg=o.arg,i.delegate=null,f;var s=o.arg;return s?s.done?(i[e.resultName]=s.value,i.next=e.nextLoc,"return"!==i.method&&(i.method="next",i.arg=t),i.delegate=null,f):s:(i.method="throw",i.arg=new TypeError("iterator result is not an object"),i.delegate=null,f)}function L(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function N(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function D(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function I(e){if(e){var i=e[s];if(i)return i.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,r=function i(){for(;++o<e.length;)if(n.call(e,o))return i.value=e[o],i.done=!1,i;return i.value=t,i.done=!0,i};return r.next=r}}return{next:E}}function E(){return{value:t,done:!0}}return v.prototype=C.constructor=_,_.constructor=v,v.displayName=l(_,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===v||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,_):(e.__proto__=_,l(e,a,"GeneratorFunction")),e.prototype=Object.create(C),e},e.awrap=function(e){return{__await:e}},x(S.prototype),S.prototype[r]=function(){return this},e.AsyncIterator=S,e.async=function(t,i,n,o,s){void 0===s&&(s=Promise);var r=new S(c(t,i,n,o),s);return e.isGeneratorFunction(i)?r:r.next().then((function(e){return e.done?e.value:r.next()}))},x(C),l(C,a,"Generator"),C[s]=function(){return this},C.toString=function(){return"[object Generator]"},e.keys=function(e){var t=[];for(var i in e)t.push(i);return t.reverse(),function i(){for(;t.length;){var n=t.pop();if(n in e)return i.value=n,i.done=!1,i}return i.done=!0,i}},e.values=I,D.prototype={constructor:D,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(N),!e)for(var i in this)"t"===i.charAt(0)&&n.call(this,i)&&!isNaN(+i.slice(1))&&(this[i]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var i=this;function o(n,o){return a.type="throw",a.arg=e,i.next=n,o&&(i.method="next",i.arg=t),!!o}for(var s=this.tryEntries.length-1;s>=0;--s){var r=this.tryEntries[s],a=r.completion;if("root"===r.tryLoc)return o("end");if(r.tryLoc<=this.prev){var l=n.call(r,"catchLoc"),c=n.call(r,"finallyLoc");if(l&&c){if(this.prev<r.catchLoc)return o(r.catchLoc,!0);if(this.prev<r.finallyLoc)return o(r.finallyLoc)}else if(l){if(this.prev<r.catchLoc)return o(r.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return o(r.finallyLoc)}}}},abrupt:function(e,t){for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var s=o;break}}s&&("break"===e||"continue"===e)&&s.tryLoc<=t&&t<=s.finallyLoc&&(s=null);var r=s?s.completion:{};return r.type=e,r.arg=t,s?(this.method="next",this.next=s.finallyLoc,f):this.complete(r)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),f},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.finallyLoc===e)return this.complete(i.completion,i.afterLoc),N(i),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.tryLoc===e){var n=i.completion;if("throw"===n.type){var o=n.arg;N(i)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,i,n){return this.delegate={iterator:I(e),resultName:i,nextLoc:n},"next"===this.method&&(this.arg=t),f}},e}(e.exports);try{regeneratorRuntime=t}catch(e){Function("r","regeneratorRuntime = r")(t)}},42016:(e,t,i)=>{"use strict";i.d(t,{Z:()=>qe});var n=i(63038),o=i.n(n),s=i(59713),r=i.n(s),a=i(319),l=i.n(a),c=i(48926),d=i.n(c),h=i(87757),u=i.n(h),g=i(23321),p=i(24793),f=i.n(p),m=i(51109),v=i.n(m),_=i(24883),b=i(33182),w=i(83566),y=i(72298);function C(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(!e)return;if("string"==typeof e)return x(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);"Object"===i&&e.constructor&&(i=e.constructor.name);if("Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return x(e,t)}(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,r=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return r=e.done,e},e:function(e){a=!0,s=e},f:function(){try{r||null==i.return||i.return()}finally{if(a)throw s}}}}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}function S(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function k(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?S(Object(i),!0).forEach((function(t){r()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):S(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var L=i(75110),N=i(71017),D=i(57147),I=i(24793);const E={props:[],data:function(){return{speed:{up:0,down:0},client:null,scriptResult:"",intervalID:null,trayIconImg:null,canvas:null,renderedData:null}},watch:{clashStatus:function(e){e===b.Z.CONNECTED&&(this.setupRequest(),this.updateInterval())},isWindowShow:function(e){this.setupRequest()},isAppSuspend:function(e){e||this.setupRequest()},"settings.trayText":function(){this.updateInterval()},"settings.trayScriptPath":function(){this.updateInterval()},"settings.trayScriptInterval":function(){this.updateInterval()},"settings.trayScriptManualRunTime":function(){this.updateInterval()},"settings.trayOrders":{deep:!0,handler:function(e,t){I.isEqual(e,t)||this.updateInterval()}}},computed:k(k(k({},(0,g.mapState)(r()({confData:function(e){return e.app.confData},clashStatus:function(e){return e.app.clashStatus},status:function(e){return e.app.status},shouldUseDarkTheme:function(e){return e.app.shouldUseDarkTheme},isWindowShow:function(e){return e.app.isWindowShow},isAppSuspend:function(e){return e.app.isAppSuspend},isSystemProxyOn:function(e){return e.app.isSystemProxyOn},mode:function(e){return e.app.mode}},"clashStatus",(function(e){return e.app.clashStatus})))),(0,g.mapGetters)(["resourcesPath","clashWSClient"])),{},{trayDisabled:function(){var e=this.settings.trayOrders||[[],[]];return 0===e[0].length||1===e[0].length&&"icon"===e[0][0]},finalText:function(){var e=this.settings.trayText;return(void 0===e?"":e)||this.scriptResult},colors:function(){return{light:["#fff","#000"],dark:["#2c2a38","rgb(255, 255, 255)"],red:["#f8b74f","#d33928"],2077:["#136377","#fcec0c"]}[this.theme]}}),methods:{iconImage:function(e){var t=new Image(69,69);return t.src=e,t},withUnit:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=["B/s","KB/s","MB/s","GB/s","TB/s"],o=0;~~(e/1024)&&o<n.length;)e/=1024,o++;return i&&e>999&&(o++,e/=1024),{speed:0===o?e:e.toFixed(t),unit:n[o]}},stopRequest:function(){this.client&&this.client.readyState!==WebSocket.CLOSED&&this.client.readyState!==WebSocket.CONNECTING&&(this.client.terminate(),this.client=null),this.trayIconImg&&(this.trayIconImg=null)},setupRequest:function(){var e=this;if(this.stopRequest(),this.isWindowShow||!this.trayDisabled){var t,i=this.clashWSClient("traffic");if(this.trayIconImg||(this.trayIconImg=this.iconImage(N.join(this.resourcesPath,"static/imgs/logo_64_eyes.png"))),i){var n=this.canvas.getContext("2d"),o=function(t,i,n){var o,s={trayColorTransparent:i,trayColorForeground:n},r=C(t[0]);try{for(r.s();!(o=r.n()).done;){var a=o.value;"icon"===a?s.icon=e.trayIconImg:"traffic"===a?s.speed=e.speed:"status"===a?(s.mode=e.mode[0].toUpperCase(),s.isSystemProxyOn=e.isSystemProxyOn):"text"===a&&(s.text=e.finalText)}}catch(e){r.e(e)}finally{r.f()}return s};i.on("message",(t=d()(u().mark((function t(i){var s,r,a,l,c,d,h,g,p,f,m,v,_,b,w,x,S,k,L,N;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.speed=JSON.parse(i),s=e.settings,r=s.trayOrders,a=void 0===r?[[],[]]:r,l=s.trayColorTransparent,c=s.trayColorForeground,d=void 0===c?"#fff":c,h=e.trayDisabled,g=o(a,l,d),!I.isEqual(e.renderedData,g)){t.next=6;break}return t.abrupt("return");case 6:if(h)y.ipcRenderer.send("speed-update","",60,"");else{p=0,f=e.withUnit(e.speed.up,0,!0),m=e.withUnit(e.speed.down,0,!0),v=l?d:e.colors[1],_=v,b=function(t){n.drawImage(e.trayIconImg,t,0,69,69),p+=69},w=function(t){n.textAlign="right",n.fillStyle=_,n.font="26px sans-serif",n.lineWidth=2,n.strokeStyle=_,n.fillText("".concat(f.speed," ").concat(f.unit),t+145,30),n.fillText("".concat(m.speed," ").concat(m.unit),t+145,58),n.textAlign="left",n.beginPath(),n.moveTo(t+5,31),n.lineTo(t+12,22),n.lineTo(t+19,31),e.speed.up>e.speed.down&&n.fill(),n.stroke(),n.beginPath(),n.moveTo(t+19,38),n.lineTo(t+12,47),n.lineTo(t+5,38),e.speed.up<e.speed.down&&n.fill(),n.stroke(),p+=150},x=function(t){n.font="26px sans-serif",n.fillStyle=_,n.fillText(e.mode[0].toUpperCase(),t+5,58),e.isSystemProxyOn&&n.fillText("S",t+5,30),p+=30},S=function(t){n.fillStyle=_;var i=t+10,o=e.finalText,s=0;if(Array.isArray(o)&&o.length>=2){n.font="26px sans-serif";var r=n.measureText(o[0]).width,a=n.measureText(o[1]).width;s=r>a?r:a,n.fillText(o[0],i,30),n.fillText(o[1],i,58)}else n.font="40px sans-serif",s=n.measureText(o).width,n.fillText(o,i,50);p+=parseInt(s)+20},k=C(a[0]);try{for(k.s();!(L=k.n()).done;)"icon"===(N=L.value)?b(p):"traffic"===N?w(p):"status"===N?x(p):"text"===N&&S(p)}catch(e){k.e(e)}finally{k.f()}0===a[0].length&&b(p),y.ipcRenderer.send("speed-update",e.canvas.toDataURL(),h?60:p,l?"":e.colors[0]),e.renderedData=o(a,l,d),n.clearRect(0,0,e.canvas.width,e.canvas.height)}case 7:case"end":return t.stop()}}),t)}))),function(e){return t.apply(this,arguments)})),this.client=i}else setTimeout((function(){e.setupRequest()}),2e3)}},updateInterval:function(){var e=this;this.intervalID&&(clearInterval(this.intervalID),this.intervalID=null,this.scriptResult="");var t,i=this.settings,n=i.trayText,o=void 0===n?"":n,s=i.trayScriptInterval,r=i.trayScriptPath,a=i.trayOrders;if(""===o&&r&&a[0].includes("text")){var l=(t=d()(u().mark((function t(){var i,n;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=D.readFileSync(r,"utf8"),n=L("'use strict';\n".concat(i),r),t.next=4,n.run();case 4:e.scriptResult=t.sent;case 5:case"end":return t.stop()}}),t)}))),function(){return t.apply(this,arguments)});l(),s>0&&(this.intervalID=setInterval(l,1e3*s))}return null}},mounted:function(){this.canvas=document.createElement("canvas"),this.canvas.width=1e4,this.setupRequest(),this.updateInterval()}},T=E;i(38619),i(38926);var M=i(51900);const A=(0,M.Z)(T,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-clash-traffic-view"},[t("div",{staticClass:"grid"},[t("div",[t("span",{staticClass:"bold-icon"},[e._v("â†‘")]),e._v("\n      "+e._s(e.withUnit(e.speed.up).speed)+"\n      "),t("span",{staticClass:"bold-icon"},[e._v(e._s(e.withUnit(e.speed.up).unit))])])]),e._v(" "),t("div",{staticClass:"grid"},[t("div",[t("span",{staticClass:"bold-icon"},[e._v("â†“")]),e._v("\n      "+e._s(e.withUnit(e.speed.down).speed)+"\n      "),t("span",{staticClass:"bold-icon"},[e._v("\n        "+e._s(e.withUnit(e.speed.down).unit)+"\n      ")])])])])}),[],!1,null,"4f5120b9",null).exports;var O=i(10605),P=i.n(O),R=i(71289);function F(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const B={props:["startTime"],data:function(){return{runningTime:"00 : 00 : 00",intervalId:null}},watch:{},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?F(Object(i),!0).forEach((function(t){r()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):F(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,g.mapState)({})),methods:{calcRunTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"hh : mm : ss",t=e.includes("hh"),i=e.includes("mm"),n=(new Date).getTime(),o=Math.floor((n-this.startTime)/1e3),s=t||i?o%60:o,r=t?Math.floor(o/60)%60:Math.floor(o/60),a=Math.floor(o/3600),l=function(e){return e<10?"0".concat(e):"".concat(e)};return e.replace("hh",l(a)).replace("mm",l(r)).replace("ss",l(s))},refreshTimeTicking:function(){var e=this;this.intervalId=R.ZP.add((function(){var t=e.settings.runTimeFormat,i=void 0===t?"hh : mm : ss":t;e.runningTime=e.calcRunTime(i)}),1e3)}},mounted:function(){this.refreshTimeTicking(!0)}};i(74360);const V=(0,M.Z)(B,(function(){var e=this,t=e._self._c;return t("div",{attrs:{id:"main-run-time-view"}},[t("div",{staticClass:"timer-text"},[e._v(e._s(e.runningTime))])])}),[],!1,null,"05e7144a",null).exports;var W=i(81518),H=i(13338);function z(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function j(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?z(Object(i),!0).forEach((function(t){r()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):z(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const U={props:["startTime","profileUpdateFailedURLs","keyboardClickTimes"],data:function(){return{isAllowSort:!1,isShowKeyboardShortcuts:!1,keyboardShortcutsIntervalID:null}},components:{ClashTrafficView:A,RunTimeView:V,draggable:v(),Hint:H.Z},watch:{keyboardClickTimes:function(){var e=this;this.isShowKeyboardShortcuts=!0,this.keyboardShortcutsIntervalID&&clearInterval(this.keyboardShortcutsIntervalID),this.keyboardShortcutsIntervalID=setInterval((function(){e.isShowKeyboardShortcuts=!1,clearInterval(e.keyboardShortcutsIntervalID)}),5e3)}},computed:j(j({},(0,g.mapGetters)(["menuItemsWithOrder","clashGotClient"])),{},{selectedIdx:function(){var e=this;return this.tabs.findIndex((function(t){return t.path===e.$route.path}))},tabs:{get:function(){return this.menuItemsWithOrder},set:function(e){_.Z.put(W.Z.MENU_ITEM_ORDER,e.map((function(e){return e.title}))),this.setMenuItems({items:e})}}}),methods:j(j({},(0,g.mapMutations)({setMenuItems:"SET_MENU_ITEMS"})),{},{handleRightClick:function(e){var t=this;return d()(u().mark((function i(){return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:t.$menu([{text:"é‡æ–°æŽ’åº",icon:"reorder",click:function(){t.isAllowSort=!0}}],e);case 1:case"end":return i.stop()}}),i)})))()},itemStyle:function(e){var t=[];return this.isAllowSort&&t.push("shaking".concat(e%3+1)),this.selectedIdx===e&&t.push("selected"),this.selectedIdx!==e&&(t.push("selected-none"),t.push("item-none")),this.selectedIdx===e+1&&t.push("selected-top"),this.selectedIdx===e-1&&t.push("selected-bottom"),t},itemClick:function(e){var t=e.path;this.$router.replace({path:t}).catch((function(){}))}}),mounted:function(){}},$=U;i(44977);const K=(0,M.Z)($,(function(){var e=this,t=e._self._c;return t("div",{class:["main-main-menu","item-none",e.isAllowSort?"item-draggable":""],on:{contextmenu:function(t){return e.handleRightClick.apply(null,arguments)}}},[t("clash-traffic-view",{staticClass:"traffic"}),e._v(" "),t("draggable",{ref:"list",staticClass:"menu",attrs:{animation:200,"delay-on-touch-only":!0,disabled:!e.isAllowSort,"drag-class":"drag-item","ghost-class":"ghost-item"},model:{value:e.tabs,callback:function(t){e.tabs=t},expression:"tabs"}},e._l(e.tabs,(function(i,n){return t("li",{key:n,staticClass:"item",class:e.itemStyle(n),on:{click:function(t){return e.itemClick(i)}}},[t("div",{staticClass:"clickable flex items-center justify-center gap-1"},[t("span",{staticClass:"text-xs absolute left-3 transition-all",style:{left:e.isShowKeyboardShortcuts?"12px":"-20px"}},[e._v(e._s(n+1))]),e._v(" "),t("span",[e._v(e._s(i.title))]),e._v(" "),e.profileUpdateFailedURLs.length>0&&"é…ç½®"===i.title?t("hint",{attrs:{hint:"At least one profile failed to update while dashboard is closed.",position:"right"}},[t("span",{staticClass:"icon text-sm text-[color:var(--proxy-item-latency-offline-c)]"},[e._v("error")])]):e._e()],1)])})),0),e._v(" "),t("run-time-view",{staticClass:"running-time",attrs:{"start-time":e.startTime}}),e._v(" "),e.isAllowSort?t("div",{staticClass:"stop-btn",on:{click:function(t){e.isAllowSort=!1}}},[e._v("\n    åœæ­¢æŽ’åº\n  ")]):e._e()],1)}),[],!1,null,"149ea1bd",null).exports;function q(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function Z(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?q(Object(i),!0).forEach((function(t){r()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):q(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const G={props:[],data:function(){return{isWinMax:!1,isPinned:!1,isFullScreen:!1}},computed:Z(Z({},(0,g.mapState)({mode:function(e){return e.app.mode},updateDownloadProgress:function(e){return e.app.updateDownloadProgress},isSystemProxyOn:function(e){return e.app.isSystemProxyOn},isMixinEnable:function(e){return e.app.isMixinEnable},isTunEnable:function(e){return e.app.isTunEnable}})),{},{percent:function(){return this.updateDownloadProgress?100*this.updateDownloadProgress:0},capMode:function(){return f().capitalize(this.mode)},titleText:function(){var e;return null!=this&&null!==(e=this.settings)&&void 0!==e&&e.titleBarText?this.settings.titleBarText.replace("%mode%",this.mode).replace("%Mode%",this.capMode).replace("%tun%",this.isTunEnable?"On":"Off").replace("%systemProxy%",this.isSystemProxyOn?"On":"Off").replace("%mixin%",this.isMixinEnable?"On":"Off").replace(/%tun\?(.+?)\:(.+?)%/,"".concat(this.isTunEnable?"$1":"$2")).replace(/%systemProxy\?(.+?)\:(.+?)%/,"".concat(this.isSystemProxyOn?"$1":"$2")).replace(/%mixin\?(.+?)\:(.+?)%/,"".concat(this.isMixinEnable?"$1":"$2")):""}}),methods:{closeApp:function(){y.ipcRenderer.invoke("app","quit")},miniApp:function(){y.ipcRenderer.invoke("window","minimize")},maxApp:function(){if(this.isFullScreen)y.ipcRenderer.invoke("window","setFullScreen",!1);else{var e=this.isWinMax?"unmaximize":"maximize";y.ipcRenderer.invoke("window",e)}},pinApp:function(){this.isPinned=!this.isPinned,y.ipcRenderer.invoke("window","setAlwaysOnTop",this.isPinned),_.Z.put(W.Z.IS_PIN_ENABLED,this.isPinned)}},mounted:function(){var e=this;return d()(u().mark((function t(){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=function(){var t=d()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,y.ipcRenderer.invoke("window","isMaximized");case 2:e.isWinMax=t.sent;case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),y.ipcRenderer.on("window-event",function(){var t=d()(u().mark((function t(n,o){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if("maximize"===o?e.isWinMax=!0:"unmaximize"===o?e.isWinMax=!1:"enter-full-screen"===o?e.isFullScreen=!0:"leave-full-screen"===o&&(e.isFullScreen=!1),"show"!==o){t.next=4;break}return t.next=4,i();case 4:case"end":return t.stop()}}),t)})));return function(e,i){return t.apply(this,arguments)}}()),e.isPinned=_.Z.get(W.Z.IS_PIN_ENABLED)||!1,y.ipcRenderer.invoke("window","setAlwaysOnTop",e.isPinned),t.next=6,i();case 6:case"end":return t.stop()}}),t)})))()}},Y=G;i(56520);const Q=(0,M.Z)(Y,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main relative",style:{color:["dark"].includes(e.theme)?"white":"black"}},[t("div",{staticClass:"empty"},[t("div",{staticClass:"top"},[t("div",{staticClass:"left",style:{width:e.percent+"%"}}),e._v(" "),t("div",{staticClass:"right"})]),e._v(" "),t("div",{staticClass:"bottom"})]),e._v(" "),t("span",{staticClass:"fixed left-1/2 -translate-x-1/2 text-xs whitespace-pre"},[e._v("\n    "+e._s(e.titleText)+"\n  ")]),e._v(" "),!e.isWindows&&!e.isLinux||e.isFullScreen?e._e():t("div",{staticClass:"clickable close hover:bg-[color:var(--status-close-hover)]",style:{color:e.isPinned?"#0C7D9D":""},on:{click:e.pinApp}},[t("span",{staticClass:"icon text-sm"},[e._v("push_pin")])]),e._v(" "),!e.isWindows&&!e.isLinux||e.isFullScreen?e._e():t("div",{staticClass:"clickable close hover:bg-[color:var(--status-close-hover)]",on:{click:e.miniApp}},[t("span",{staticClass:"icon text-sm -translate-y-1"},[e._v("minimize")])]),e._v(" "),e.isWindows||e.isLinux?t("div",{staticClass:"clickable close hover:bg-[color:var(--status-close-hover)]",on:{click:e.maxApp}},[e.isWinMax||e.isFullScreen?t("span",{staticClass:"icon text-sm"},[e._v("close_fullscreen")]):t("span",{staticClass:"icon text-sm"},[e._v("check_box_outline_blank")])]):e._e(),e._v(" "),!e.isWindows&&!e.isLinux||e.isFullScreen?e._e():t("div",{staticClass:"clickable close hover:bg-[#ff5050d7]",on:{click:e.closeApp}},[t("span",{staticClass:"icon text-sm"},[e._v("close")])])])}),[],!1,null,"65878d23",null).exports;var X=i(32081),J=i.n(X),ee=i(86173),te=(i(22037),i(57147)),ie=i.n(te),ne=i(71017),oe=i.n(ne),se=i(54387),re=i.n(se),ae=(i(71893),i(11442)),le=i.n(ae);const ce=require("marked");require("util");var de=i(72378),he=i(8369),ue=i(97520),ge=i(59273),pe=i(10870),fe=i(15208),me=i(97495);function ve(){return _e.apply(this,arguments)}function _e(){return _e=d()(u().mark((function e(){var t,i,n;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=ge.Z.state.app.settings.innerServerPort,!(0,he.wi)(t)){e.next=5;break}i=t,e.next=8;break;case 5:return e.next=7,me();case 7:i=e.sent;case 8:(n=new fe).use(function(){var e=d()(u().mark((function e(t){var i,n,o;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:i=ge.Z.state.app.settings.pacContentText,n=void 0===i?pe.Z:i,/\/pac$/.test(t.path)?(o=ge.Z.getters.mixedPort)&&(t.set("content-type","application/x-ns-proxy-autoconfig"),t.body=n.replace(/%mixed-port%/g,o)):t.res.statusCode=404;case 2:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),n.listen(i,"127.0.0.1"),ge.Z.commit("SET_INNER_SERVER_PORT",{port:i});case 12:case"end":return e.stop()}}),e)}))),_e.apply(this,arguments)}var be,we,ye=i(419),Ce=i(41808),xe=i.n(Ce),Se=i(19102),ke=(be=d()(u().mark((function e(t){var i,n,o;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=["-dns",t.length>0?t.join(","):"reset"],e.next=3,(0,Se.p)(i);case 3:return n=e.sent,o=n.success,e.abrupt("return",o);case 6:case"end":return e.stop()}}),e)}))),function(e){return be.apply(this,arguments)}),Le=(we=d()(u().mark((function e(){var t,i,n,o;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=["-dns","query"],e.next=3,(0,Se.p)(t);case 3:if(i=e.sent,n=i.success,o=i.output,!n){e.next=9;break}if(!/.+?=(.+?);/.test(o)){e.next=9;break}return e.abrupt("return",RegExp.$1.split(",").filter((function(e){return xe().isIP(e)})));case 9:return e.abrupt("return",[]);case 10:case"end":return e.stop()}}),e)}))),function(){return we.apply(this,arguments)}),Ne=i(84695),De=i(251),Ie=(i(51792),i(27458)),Ee=i(58511);function Te(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(!e)return;if("string"==typeof e)return Me(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);"Object"===i&&e.constructor&&(i=e.constructor.name);if("Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return Me(e,t)}(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,r=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return r=e.done,e},e:function(e){a=!0,s=e},f:function(){try{r||null==i.return||i.return()}finally{if(a)throw s}}}}function Me(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}function Ae(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function Oe(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(i),!0).forEach((function(t){r()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):Ae(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var Pe=i(24793),Re=(i(56796),i(75110)),Fe=i(36267),Be=i(97495),Ve=i(48567),We=i(63878)("./service_".concat(process.platform)),He=We.statusService,ze=We.status;ee.transports.console.format=function(e){return e.data},ee.transports.file.format=function(e){return'time="'.concat(e.date,'" level=').concat(e.level,' msg="').concat(e.data,'"')},ce.marked.use({renderer:{text:function(e){return/#(\d+)/.test(e)?e.replace(/#(\d+)/g,'<a href="https://github.com/Fndroid/clash_for_windows_pkg/issues/'.concat(RegExp.$1,'">#').concat(RegExp.$1,"</a>")):e}}});const je={name:"landing-page",components:{MainMenu:K,StatusBar:Q},data:function(){return{clash:null,userPath:"",clashRestfulPort:null,clashRestfulSecret:"",newVersionInfo:{},shwoError:!1,showStartup:!1,portableMode:!1,startTime:null,tun2socks:null,pkgDownloadProgress:0,networkInterfaces:[],configFileWatcher:null,profileUpdateFailed:{},profileUpdateFailedURLs:[],shortcuts:{},menuKeyboardClickTimes:0,isUserDNSChanged:!1,clashMixedPort:-1}},watch:{$route:function(e){var t=e.path;void 0!==t&&this.setCurrentRoutePath({path:t}),"/home/server"===t&&(this.profileUpdateFailedURLs=[])},isWindowShow:{immediate:!0,handler:function(e){e?R.ZP.resumeAll():R.ZP.pauseAll()}},clashMixedPort:function(e){return d()(u().mark((function t(){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(0!==e){t.next=5;break}return t.next=3,y.ipcRenderer.invoke("window","isVisible");case 3:i=t.sent,(0,he.vC)({type:"error",message:"It seems that Port is not listening, you might need to set a new port.",buttons:[i?"OK":"Open dashboard","å–æ¶ˆ"]}).then((function(e){var t=e.response;i||0!==t||y.ipcRenderer.invoke("window-control","show")}));case 5:case"end":return t.stop()}}),t)})))()},mixedPort:function(){ee.info("mixed-port changed"),this.resetSystemProxySettings()},controllerPort:function(){ee.info("external controller port changed")},finalInterfaceName:function(e){ee.info("new outbound interface: ".concat(e)),this.refreshProfile()},clashStatus:($e=d()(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(ee.info("clash status change to [".concat(t===b.Z.CONNECTED?"å·²è¿žæŽ¥":"æ–­å¼€è¿žæŽ¥","]")),y.ipcRenderer.send("clash-core-status-change",t===b.Z.CONNECTED?0:1),t!==b.Z.CONNECTED){e.next=7;break}return this.setIsLaunching({isLaunching:!1}),e.next=6,this.refreshProfile().catch((function(e){}));case 6:this.addProfileRefreshTimes({times:1});case 7:case"end":return e.stop()}}),e,this)}))),function(e){return $e.apply(this,arguments)}),clashAxiosClient:function(e){var t=this;ee.info("clash axios client changed"),y.ipcRenderer.send("clash-core-info",{port:this.controllerPort,secret:this.secret}),e&&(e.interceptors.request.use((function(e){return t.addClashAxiosFlyingRequestCount({count:1}),e}),(function(e){return Promise.reject(e)})),e.interceptors.response.use((function(e){return t.addClashAxiosFlyingRequestCount({count:-1}),e}),(function(e){return t.addClashAxiosFlyingRequestCount({count:-1}),Promise.reject(e)})))},status:{immediate:!0,handler:function(e){this.updateTrayIcon(),y.ipcRenderer.send("system-proxy-changed",e===b.r.SYSTEM_PROXY)}},"settings.hideTrayIcon":{immediate:!0,handler:function(e){var t=this;return d()(u().mark((function i(){return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,y.ipcRenderer.invoke("tray-create-destroy",e?"destroy":"create");case 2:t.updateTrayIcon();case 3:case"end":return i.stop()}}),i)})))()}},"settings.trayProxiesStyle":{immediate:!0,handler:function(e){return d()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,y.ipcRenderer.invoke("tray-proxies-style",e||0);case 2:case"end":return t.stop()}}),t)})))()}},"settings.showTrayProxyDelayIndicator":{immediate:!0,handler:function(e){return d()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,y.ipcRenderer.invoke("tray-proxies-icon",e||!1);case 2:case"end":return t.stop()}}),t)})))()}},"settings.useModeIcons":function(e){this.updateTrayIcon()},"settings.iconDefault":function(e){this.updateTrayIcon()},"settings.iconSystemProxy":function(e){this.updateTrayIcon()},fontFamily:{immediate:!0,handler:function(e){document.body.style.fontFamily=e}},"settings.shortcutSystemProxy":function(e,t){var i=this;this.rebindShortcut(e,t,d()(u().mark((function e(){var t;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=!i.isSystemProxyOn,e.next=3,i.$setSystemProxy(t,i.confData);case 3:if(!e.sent){e.next=5;break}i.setIsSystemProxyOn({isOn:t});case 5:case"end":return e.stop()}}),e)}))))},"settings.shortcutTun":function(e,t){var i=this;this.rebindShortcut(e,t,d()(u().mark((function e(){var t;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=!i.isTunEnable,i.chagneIsTunEnable({isTun:t}),i.refreshProfile(),(0,he.c0)("Shortcut","TUN Mode: ".concat(t?"On":"Off"));case 4:case"end":return e.stop()}}),e)}))))},"settings.shortcutMixin":function(e,t){var i=this;this.rebindShortcut(e,t,(function(){var e=!i.isMixinEnable;i.changeIsMixinEnable({isMixin:e}),i.refreshProfile(),(0,he.c0)("Shortcut","Mixin: ".concat(e?"On":"Off"))}))},"settings.shortcutGlobalMode":function(e,t){var i=this;this.rebindShortcut(e,t,d()(u().mark((function e(){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.switchMode("global");case 2:case"end":return e.stop()}}),e)}))))},"settings.shortcutRuleMode":function(e,t){var i=this;this.rebindShortcut(e,t,d()(u().mark((function e(){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.switchMode("rule");case 2:case"end":return e.stop()}}),e)}))))},"settings.shortcutDirectMode":function(e,t){var i=this;this.rebindShortcut(e,t,d()(u().mark((function e(){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.switchMode("direct");case 2:case"end":return e.stop()}}),e)}))))},"settings.shortcutScriptMode":function(e,t){var i=this;this.rebindShortcut(e,t,d()(u().mark((function e(){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,i.switchMode("script");case 2:case"end":return e.stop()}}),e)}))))},"settings.shortcutRunTrayScript":function(e,t){this.rebindShortcut(e,t,this.runTrayScript)},"settings.shortcutShowHideDashboard":function(e,t){this.rebindShortcut(e,t,(function(){y.ipcRenderer.invoke("window-control","show-or-hide")}))},"settings.systemProxyTypeIndex":function(){this.resetSystemProxySettings()},"settings.pacContentText":function(){this.resetSystemProxySettings()},"settings.bypassText":function(){this.resetSystemProxySettings()},"settings.specifyHttpProxyProtocol":function(){this.resetSystemProxySettings()},"settings.staticSystemProxyHost":function(){this.resetSystemProxySettings()},"settings.enableDHCPServer":function(e){e?this.setMenuItems({items:[].concat(l()(this.menuItems),[{title:"è·¯ç”±å™¨",path:"/home/router"}])}):this.setMenuItems({items:this.menuItems.filter((function(e){return"Router"!==e.title}))})},isMixinEnable:function(e){this.refreshProfile(),y.ipcRenderer.send("mixin-changed",e)},"settings.mixinText":function(){var e=this.settings.mixinType;this.isMixinEnable&&0===e&&this.refreshProfile()},"settings.mixinCode":function(){var e=this.settings.mixinType;this.isMixinEnable&&1===e&&this.refreshProfile()},"settings.mixinType":function(){this.refreshProfile()},"settings.unsafeURLsText":{immediate:!0,handler:function(e){var t=[];try{var i=le().parse(e);t=(null==i?void 0:i.urls)||[]}catch(e){}y.ipcRenderer.send("set-allow-unsafe-urls",t)}},"settings.clashAuthentication":function(){this.refreshProfile()},isTunEnable:function(e){this.refreshProfile(),y.ipcRenderer.send("tun-changed",e)},tunSettings:function(e){this.isTunEnable&&this.refreshProfile()},isAppSuspend:function(e){e||(this.tun2socks&&(ee.info("system resume, restart tun2socks"),this.killSpawned(this.tun2socks),this.tun2socks=null,this.spawnTun2socks()),this.refreshProfile().then((function(e){})).catch((function(e){})))},innerServerPort:function(e){console.log("inner port:",e),this.resetSystemProxySettings()},mode:{handler:(Ue=d()(u().mark((function e(t){var i,n,o,s,r,a;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.updateTrayIcon(),y.ipcRenderer.send("mode-changed",t),void 0===(i=this.settings.connMode)||!i){e.next=6;break}return e.next=6,this.clashAxiosClient.delete("connections");case 6:n=this.profiles,o=n.files,s=void 0===o?[]:o,r=n.index,(a=void 0===r?-1:r)>=0&&s.length>a&&this.changeProfile({index:a,profile:Oe(Oe({},s[a]),{},{mode:t})});case 8:case"end":return e.stop()}}),e,this)}))),function(e){return Ue.apply(this,arguments)}),immediate:!0}},computed:Oe(Oe(Oe({},(0,g.mapState)({pfs:function(e){return e.app.profiles},devMode:function(e){return e.app.isDevMode},profiles:function(e){return e.app.profiles},clashPath:function(e){return e.app.clashPath},clashStatus:function(e){return e.app.clashStatus},confData:function(e){return e.app.confData},profilesPath:function(e){return e.app.profilesPath},isMixinEnable:function(e){return e.app.isMixinEnable},isTunEnable:function(e){return e.app.isTunEnable},status:function(e){return e.app.status},clashAxiosFlyingRequestCount:function(e){return e.app.clashAxiosFlyingRequestCount},logFilePath:function(e){return e.app.logFilePath},shouldUseDarkTheme:function(e){return e.app.shouldUseDarkTheme},detectedInterfaceName:function(e){return e.app.detectedInterfaceName},isAppSuspend:function(e){return e.app.isAppSuspend},innerServerPort:function(e){return e.app.innerServerPort},isLocalMode:function(e){return e.app.isLocalMode},isWindowShow:function(e){return e.app.isWindowShow},menuItems:function(e){return e.app.menuItems},isSystemProxyOn:function(e){return e.app.isSystemProxyOn},isSubViewShow:function(e){return e.app.isSubViewShow},currentRoutePath:function(e){return e.app.currentRoutePath},mode:function(e){return e.app.mode},isSilentUpgraded:function(e){return e.app.isSilentUpgraded},tunSettings:function(e){return e.app.tunSettings},userDNS:function(e){return e.app.userDNS}})),(0,g.mapGetters)(["resourcesPath","filesPath","mixedPort","controllerPort","secret","clashAxiosClient","clashGotClient","fontFamily","clashBinaryPath","menuItemsWithOrder"])),{},{finalInterfaceName:function(){var e=this.settings.interfaceName;return(void 0===e?"":e)||this.detectedInterfaceName},statusHint:function(){return this.pkgDownloadProgress>0&&this.pkgDownloadProgress<1?"Download progress: ".concat((100*this.pkgDownloadProgress).toFixed(2),"%"):this.clashStatus===b.Z.CONNECTED?"å·²è¿žæŽ¥":this.clashStatus===b.Z.DISCONNECTED?"æœªè¿žæŽ¥":void 0},statusIcon:function(){return{"clash-status-icon":!0,"clash-running":this.clashStatus===b.Z.CONNECTED,"clash-stopped":this.clashStatus===b.Z.DISCONNECTED}}}),methods:Oe(Oe(Oe({},(0,g.mapMutations)({setIsDevMode:"SET_IS_DEV_MODE",setConfData:"SET_CONF_DATA",changeProfile:"CHANGE_PROFILE",changeProfileIndex:"CHANGE_PROFILES_INDEX",setClashPath:"SET_CLASH_PATH",setClashStatus:"SET_CLASH_STATUS",loadProfiles:"LOAD_PROFILES",setProfilesPath:"SET_PROFILES_PATH",setLogFilePath:"SET_LOG_FILE_PATH",changeIsMixinEnable:"CHANGE_IS_MIXIN_ENABLE",chagneIsTunEnable:"CHANGE_IS_TUN_ENABLE",setExePath:"SET_EXE_PATH",appendError:"APPEND_ERROR",addClashAxiosFlyingRequestCount:"ADD_AXIOS_FLYING_REQUEST_COUNT",setShouldUseDarkTheme:"SET_SHOULD_USE_DARK_THEME",setDetectedInterfaceName:"SET_DETECTED_INTERFACE_NAME",setIsWindowShow:"SET_IS_WINDOW_SHOW",setIsAppSuspend:"SET_IS_APP_SUSPEND",setIsLocalMode:"SET_IS_LOCAL_MODE",setIsLaunching:"SET_IS_LAUNCHING",setMenuItems:"SET_MENU_ITEMS",setIsSystemProxyOn:"SET_IS_SYSTEM_PROXY_ON",setCurrentRoutePath:"SET_CURRENT_ROUTE_PATH",addProfileRefreshTimes:"ADD_PROFILE_REFRESH_TIMES",setCurrentProfilePayload:"SET_CURRENT_PROFILE_PAYLOAD",setIsSilentUpgraded:"SET_IS_SILENT_UPGRADED",setIsFirewallRuleExist:"SET_IS_FIREWALL_RULE_EXIST",setUserDNS:"SET_USER_DNS",setMatchedSSID:"SET_MATCHED_SSID"})),(0,g.mapActions)(["setMode"])),{},{setSSIDOptions:function(){var e=this;return d()(u().mark((function t(){var i,n,o,s,r,a,l,c,h;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=function(){var t=d()(u().mark((function t(){var i,n,o;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=_.Z.get(W.Z.IS_MIXIN)||!1,n=_.Z.get(W.Z.IS_TUN)||!1,o=_.Z.get(W.Z.SYSTEM_PROXY)||!1,e.changeIsMixinEnable({isMixin:i}),e.chagneIsTunEnable({isTun:n}),t.next=7,e.$setSystemProxy(o,e.confData);case 7:if(!t.sent){t.next=9;break}e.setIsSystemProxyOn({isOn:o});case 9:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),t.prev=1,e.setMatchedSSID({ssid:""}),n=(0,Ee.S)()||[],o=e.settings.ssidStrategyText,s=le().parse(o).strategy,ee.info(JSON.stringify({conns:n,ssidStrategy:s},null,2)),!(r=n.find((function(e){return e.SSID in s})))){t.next=24;break}if(e.setMatchedSSID({ssid:r.SSID}),!(a=s[r.SSID])){t.next=22;break}if(l=a.system,c=a.tun,"boolean"==typeof(h=a.mixin)&&e.changeIsMixinEnable({isMixin:h}),"boolean"==typeof c&&e.chagneIsTunEnable({isTun:c}),t.t0="boolean"==typeof l,!t.t0){t.next=20;break}return t.next=19,e.$setSystemProxy(l,e.confData);case 19:t.t0=t.sent;case 20:if(!t.t0){t.next=22;break}e.setIsSystemProxyOn({isOn:l});case 22:t.next=25;break;case 24:i();case 25:t.next=30;break;case 27:t.prev=27,t.t1=t.catch(1),ee.error("failed to set ssid options: ".concat(t.t1));case 30:return t.prev=30,t.finish(30);case 32:case"end":return t.stop()}}),t,null,[[1,27,30,32]])})))()},resetDNS:function(){if(this.isUserDNSChanged&&(0,w.V5)())try{var e=this.settings,t=e.isUsingResetDNSServers,i=void 0!==t&&t,n=e.resetDNSServers;i?ke(void 0===n?[]:n):null!==this.userDNS&&ke(this.userDNS)}catch(e){ee.info("failed to reset dns with error: ".concat(e))}},breakConnections:function(e){var t=this;return d()(u().mark((function i(){var n,o,s,r,a,l,c,d,h,g;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(n=t.settings.connProxy,1!==(o=void 0===n?0:n)){i.next=29;break}return i.next=4,t.clashAxiosClient.get("connections");case 4:if(s=i.sent,r=s.status,a=s.data,200!==r){i.next=27;break}l=a.connections,c=Te(void 0===l?[]:l),i.prev=10,c.s();case 12:if((d=c.n()).done){i.next=19;break}if(h=d.value,g=h.id,!h.chains.includes(e)){i.next=17;break}return i.next=17,t.clashAxiosClient.delete("connections/".concat(g));case 17:i.next=12;break;case 19:i.next=24;break;case 21:i.prev=21,i.t0=i.catch(10),c.e(i.t0);case 24:return i.prev=24,c.f(),i.finish(24);case 27:i.next=32;break;case 29:if(2!==o){i.next=32;break}return i.next=32,t.clashAxiosClient.delete("connections");case 32:case"end":return i.stop()}}),i,null,[[10,21,24,27]])})))()},persistSelectedProxy:function(){var e=this;return d()(u().mark((function t(){var i,n,s,r,a,l;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(e.pfs.index>-1)){t.next=14;break}if(!(n=null===(i=e.pfs.files)||void 0===i?void 0:i[e.pfs.index])){t.next=14;break}return t.prev=3,t.next=6,e.clashAxiosClient.get("/proxies");case 6:s=t.sent,r=s.data.proxies,a=void 0===r?{}:r,l=Object.entries(a).reduce((function(e,t){var i=o()(t,2),n=(i[0],i[1]);return"Selector"===n.type&&e.push({name:n.name,now:n.now}),e}),[]),e.changeProfile({index:e.pfs.index,profile:Oe(Oe({},n),{},{selected:l})}),t.next=14;break;case 12:t.prev=12,t.t0=t.catch(3);case 14:case"end":return t.stop()}}),t,null,[[3,12]])})))()},runTrayScript:function(){this.settings.trayScriptManualRunTime=(new Date).getTime()},resetSystemProxySettings:Pe.debounce(d()(u().mark((function e(){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.isSystemProxyOn){e.next=3;break}return e.next=3,this.$setSystemProxy(!0,this.confData);case 3:case"end":return e.stop()}}),e,this)}))),500),updateTrayIcon:function(){(0,w.Kr)()&&(console.log("updateTrayIcon",this.$getTrayIcon(this.status===b.r.SYSTEM_PROXY,this.mode)),y.ipcRenderer.send("status-changed",this.$getTrayIcon(this.status===b.r.SYSTEM_PROXY,this.mode)))},setFont:function(e){document.body.style.fontFamily=e||'"Microsoft Yahei", "PingFang SC", "system-ui", å¾®è½¯é›…é»‘, "TwemojiMozilla"'},refreshProfile:function(){var e=this;return d()(u().mark((function t(){var n,s,r,a,c,h,g,p,f,m,v,_,b,y,C,x,S,k,L,N,D,I,E,T,M,A,O,P,R,F,B,V,W,H,z,j,U,$,K,q,Z,G,Y,Q,X,te,ne,se,re,ae,ce,de,ue,ge,pe,fe,me,ve,_e,be,we,ye,Ce,xe,Se,Le,Ne,De,Ie,Ee,Te,Me,Ae,Pe,Fe,Ve,We,He,ze,je,Ue,$e;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=!1,s=null,"",a=e.profiles.index,h=!1,!((c=void 0===a?-1:a)>-1)){t.next=91;break}if(ee.info("restore at index: ".concat(c)),g=e.profiles.files[c],r=oe().join(e.profilesPath,g.time),t.prev=9,null!==(p=le().parse(ie().readFileSync(r,"utf8"),{prettyErrors:!0,strict:!1}))){t.next=13;break}throw new Error("this profile could not be parsed!");case 13:if(f=e.settings,m=f.mixinType,v=void 0===m?0:m,_=f.mixinText,b=f.mixinCode,y=p,e.isTunEnable&&(y=Oe(Oe({},y),(0,he.Sr)(e.tunSettings))),!e.isMixinEnable){t.next=29;break}t.t0=v,t.next=0===t.t0?20:1===t.t0?22:29;break;case 20:if(_)try{C=le().parse(_),x=C.mixin,y=Oe(Oe({},y),x)}catch(e){}return t.abrupt("break",29);case 22:if(!b){t.next=28;break}return S=Re(b),k=g.url,L=void 0===k?"":k,N=g.name,t.next=27,S.parse({content:y,url:L,name:N},{axios:i(54387),yaml:i(11442),notify:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];(0,he.c0)(e,t,{silent:i})}});case 27:y=t.sent;case 28:return t.abrupt("break",29);case 29:if(I=(D=y).dns,E=void 0===I?{}:I,T=D["interface-name"],M=D.tun,A=void 0===M?{}:M,O=E.enable,P=void 0!==O&&O,R=E.listen,F=A.enable,B=void 0!==F&&F,V=A["macOS-auto-detect-interface"],W=void 0!==V&&V,H=A["auto-detect-interface"],z=void 0!==H&&H,j=A["dns-hijack"],U=void 0===j?[]:j,$=A.stack,(0,w.IJ)()||!B||z||W){t.next=40;break}if(T){t.next=40;break}if(e.detectInterfaceName(),""===e.finalInterfaceName){t.next=39;break}y=Oe(Oe({},y),{},{"interface-name":e.finalInterfaceName}),t.next=40;break;case 39:return t.abrupt("return",{success:!1,message:"å¯ç”¨ TUN æ¨¡å¼ä½†æ­¤ YAML ä¸­æ²¡æœ‰æŽ¥å£åç§°"});case 40:if(!(0,w.Kr)()){t.next=57;break}if(B){t.next=57;break}K=!0;try{K=J().execSync("netsh ç•Œé¢ æ˜¾ç¤ºç•Œé¢",{windowsHide:!0}).toString().includes("cfw-tap")}catch(e){}if(!(K&&E&&P&&R)){t.next=57;break}if(q=R.split(":")[0].trim(),Z=R.split(":")[1].trim(),!["","0.0.0.0"].includes(q)||"53"!==Z){t.next=57;break}if(h=!0,T||z){t.next=57;break}if(e.detectInterfaceName(),""===e.finalInterfaceName){t.next=56;break}y=Oe(Oe({},y),{},{"interface-name":e.finalInterfaceName}),t.next=57;break;case 56:return t.abrupt("return",{success:!1,message:"TAP æ¨¡å¼å¯ç”¨, ä½†æ­¤ YAML ä¸­æ²¡æœ‰æŽ¥å£åç§°"});case 57:for(Y=(G=y)["proxy-providers"],Q=G["rule-providers"],X=Object.keys(null!=Y?Y:{}).length>0||Object.keys(null!=Q?Q:{}).length>0,te=[],ne=0,se=Object.entries(null!=Y?Y:{});ne<se.length;ne++)re=o()(se[ne],2),re[0],ae=re[1],ce=Oe(Oe({},(null==ae?void 0:ae["<<"])||{}),ae),de=ce.type,ue=ce.url,"http"===de&&(ge="./providers/proxy/".concat((0,he.Ll)(ue),".yaml"),te.push({url:ue,path:ae.path,securePath:ge}),ae.path=ge);for(pe=0,fe=Object.entries(null!=Q?Q:{});pe<fe.length;pe++)me=o()(fe[pe],2),me[0],ve=me[1],_e=Oe(Oe({},(null==ve?void 0:ve["<<"])||{}),ve),be=_e.type,we=_e.url,"http"===be&&(ye="./providers/rule/".concat((0,he.Ll)(we),".yaml"),te.push({url:we,path:ve.path,securePath:ye}),ve.path=ye);for(Ce=function(){var e=o()(Se[xe],2),t=(e[0],e[1]),i=Oe(Oe({},(null==t?void 0:t["<<"])||{}),t),n=i.type;i.url;if("file"===n){var s=te.find((function(e){return e.path===t.path}));s&&(t.path=s.securePath)}},xe=0,Se=[].concat(l()(Object.entries(null!=Y?Y:{})),l()(Object.entries(null!=Q?Q:{})));xe<Se.length;xe++)Ce();return Le=e.confData,Ne=Le["log-level"],De=Le.ipv6,t.next=67,e.clashAxiosClient.put("/configs",{payload:le().stringify(Oe(Oe({},y),{},{ipv6:De,"log-level":Ne}))},{validateStatus:function(){return!0},timeout:X?0:1e4});case 67:if(Ie=t.sent,Ee=Ie.status,Te=Ie.data,n=204===Ee,Me=Te.message,s=Me||"Switching profile failed with status: ".concat(Ee),n?(e.setCurrentProfilePayload({payload:y}),X?e.menuItems.find((function(e){return"æä¾›"===e.title}))||e.setMenuItems({items:[].concat(l()(e.menuItems),[{title:"æä¾›",path:"/home/provider"}])}):e.setMenuItems({items:e.menuItems.filter((function(e){return"æä¾›"!==e.title}))})):e.setCurrentProfilePayload({payload:{}}),n)if(B){if(Ae=U.reduce((function(e,t){var i=t.split(":"),n=o()(i,2),s=n[0],r=n[1];return"53"!==r&&void 0!==r||("any"===s?e=[].concat(l()(e),["8.8.8.8"]):/\d+\.\d+\.\d+\.\d+/.test(s)&&(e=[].concat(l()(e),[s]))),e}),[]),Ae.length>0)try{ke(Ae),e.isUserDNSChanged=!0}catch(t){e.isUserDNSChanged=!1}(0,w.Kr)()&&"system"===$&&(Pe=0,7777,Fe=setInterval(d()(u().mark((function e(){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Be({port:7777});case 2:7777!==e.sent&&J().exec("ipconfig /renew",{windowsHide:!0}),4===Pe&&clearInterval(Fe),Pe+=1;case 6:case"end":return e.stop()}}),e)}))),2e3))}else e.resetDNS();t.next=84;break;case 77:t.prev=77,t.t1=t.catch(9),ee.warn("æ— æ³•æ¢å¤æœ€åŽä¸€ä¸ªé…ç½®æ–‡ä»¶å¹¶å‡ºçŽ°é”™è¯¯: ".concat(t.t1)),Ve="",(We=t.t1.linePos)&&(He=We.start)&&(ze=He.line,je=He.col,Ve=", on line: ".concat(ze,", at column: ").concat(je)),s="Error: ".concat(t.t1.message).concat(Ve);case 84:if(Ue=g.selected,$e=g.mode,!n||!Ue){t.next=90;break}return ee.info("restore proxy settings"),t.next=89,Promise.allSettled(Ue.map((function(t){var i=t.name,n=t.now;return e.clashAxiosClient.put("/proxies/"+encodeURIComponent(i),{name:n})})));case 89:t.sent.forEach((function(e,t){var i=e.status,n=e.reason;"rejected"===i&&ee.info("æ¢å¤ä»£ç†ç»„ ".concat(Ue[t].name," to ").concat(Ue[t].now," failed with reason: ").concat(n))}));case 90:n&&$e&&e.switchMode($e,!1);case 91:return h?e.spawnTun2socks():(e.killSpawned(e.tun2socks),e.tun2socks=null),t.abrupt("return",{success:n,message:s});case 93:case"end":return t.stop()}}),t,null,[[9,77]])})))()},switchMode:function(e){var t=this;return d()(u().mark((function i(){return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,t.setMode({mode:e});case 2:case"end":return i.stop()}}),i)})))()},showLogsFolder:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.clashPath&&/\.log$/.test(this.logFilePath)&&(e?y.shell.openPath(oe().join(this.logFilePath,"..")):y.shell.showItemInFolder(this.logFilePath))},open:function(e){y.shell.openExternal(e)},killClashCore:function(){var e=this;return d()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.killSpawned(e.clash),e.clash=null,_.Z.get(W.Z.IS_LIGHTWEIGHT_MODE_CLOSE)||!1){t.next=6;break}return t.next=6,re().get("http://127.0.0.1:53000/stop",{timeout:1e3}).catch((function(e){}));case 6:case"end":return t.stop()}}),t)})))()},handlerRestartClash:function(){var e=this;return d()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.killClashCore().catch((function(e){}));case 2:return e.setClashStatus({status:b.Z.DISCONNECTED}),e.shwoError=!1,t.next=6,e.spawnClash().catch((function(e){}));case 6:case"end":return t.stop()}}),t)})))()},spawnClash:function(){var e=this;return d()(u().mark((function t(){var i,n,o,s,r,a,l,c,h;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(ee.info("restarting clash core..."),i=oe().join(e.clashPath,"logs","".concat(P()().format("YYYY-MM-DD-HHmmss"),".log")),ie().readdir(oe().join(e.clashPath,"logs"),(function(t,i){!t&&i.length>0&&i.forEach((function(t){/^(.*?)\.log$/.test(t)&&(P()(RegExp.$1,"YYYY-MM-DD-HHmmss").isBefore(P()().subtract(7,"days"))&&ie().unlink(oe().join(e.clashPath,"logs",t),(function(e){})))}))})),n=_.Z.get(W.Z.IS_LIGHTWEIGHT_MODE_CLOSE)||!1,t.t0=n,!t.t0){t.next=11;break}return t.next=8,e.getClashStatus();case 8:t.t1=t.sent,t.t2=b.Z.CONNECTED,t.t0=t.t1===t.t2;case 11:if(!t.t0){t.next=13;break}return t.abrupt("return");case 13:if(o=e.clashBinaryPath,oe().dirname(o),oe().basename(o),s=e.confData["log-level"],e.isLocalMode){t.next=26;break}return t.next=20,re().post("http://127.0.0.1:53000/start",{path:e.devMode?(0,ne.join)(process.cwd(),o):o,cwd:e.clashPath,silent:"silent"===s},{validateStatus:function(e){return!0}});case 20:r=t.sent,a=r.data,200===r.status?e.setLogFilePath({path:a}):(ee.info("fail to spawn in service mode, fallback to local mode"),e.setIsLocalMode({isLocal:!0}),e.spawnClash()),t.next=34;break;case 26:l=[],e.portableMode&&(l=["-d",e.clashPath]),c=J().spawn(o,l,{windowsHide:!0}),e.clash=c,_.Z.put(W.Z.LAST_CLASH_PID,e.clash.pid),c.stdout.on("data",function(){var t=d()(u().mark((function t(i){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!/INF \[API\] listening addr=/.test(i.toString())){t.next=8;break}return ee.info("clash core startup success!"),t.t0=e,t.next=5,e.getClashStatus();case 5:t.t1=t.sent,t.t2={status:t.t1},t.t0.setClashStatus.call(t.t0,t.t2);case 8:/ERR/.test(i.toString())&&ee.error("clashæ ¸å¿ƒå¯åŠ¨å¤±è´¥!!!");case 9:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()),c.on("exit",(function(){})),"silent"!==s&&(h=ie().createWriteStream(i,{flags:"a"}),c.stdout.pipe(h),c.stderr.pipe(h),e.setLogFilePath({path:i}));case 34:return t.abrupt("return");case 35:case"end":return t.stop()}}),t)})))()},sudoRunBAT:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return new Promise((function(i,n){!function(){try{return J().execSync("net session",{windowsHide:!0}),!0}catch(e){}return!1}()?(0,de.exec)(e,{name:"Clash for Windows"},(function(e,n,o){t&&t(void 0===e),i(void 0===e)})):J().exec(e,{windowsHide:!0},(function(e,n,o){t&&t(void 0===e),i(void 0===e)}))}))},setupTapDevice:function(){var e,t,i=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=oe().join(this.filesPath,"win","common","tun2socks"),o=(e={},r()(e,w.J4,"amd64"),r()(e,w.Ap,"i386"),r()(e,w.Vm,"i386"),e)[(0,w.$Q)()],s=null!==(t=_.Z.get(W.Z.TAP_INFO))&&void 0!==t?t:{},a=s.ip,l=void 0===a?"10.0.0.1":a,c=s.subnet,d=void 0===c?"255.255.255.0":c,h=s.gateway,u=void 0===h?"10.0.0.0":h,g=oe().join(n,"".concat(i?"add":"remove","_tap_device.bat")),p='"'.concat(g,'" ').concat(o," ").concat(l," ").concat(d," ").concat(u);return this.sudoRunBAT(p)},spawnTun2socks:function(){var e=this;return d()(u().mark((function t(){var i,n,o,s,a,l,c,d,h,g,p,f,m,v,b;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(0,w.V5)()&&!(0,w.IJ)()){t.next=2;break}return t.abrupt("return");case 2:if(ee.info("Spawn go-tun2socks"),e.tun2socks&&(e.killSpawned(e.tun2socks),e.tun2socks=null),o=e.mixedPort){t.next=7;break}return t.abrupt("return");case 7:s=null!==(i=_.Z.get(W.Z.TAP_INFO))&&void 0!==i?i:{},a=s.ip,l=void 0===a?"10.0.0.1":a,c=s.subnet,d=void 0===c?"255.255.255.0":c,h=s.gateway,p=["-tunName","cfw-tap","-tunDns",l,"-tunAddr",l,"-tunMask",d,"-tunGw",g=void 0===h?"10.0.0.0":h,"-proxyServer","127.0.0.1:"+o,"-loglevel","none"],f=(n={},r()(n,w.J4,oe().join(e.filesPath,"win","x64")),r()(n,w.Ap,oe().join(e.filesPath,"win","ia32")),r()(n,w.Vm,oe().join(e.filesPath,"win","ia32")),n)[(0,w.$Q)()],e.tun2socks=J().spawn("go-tun2socks.exe",p,{cwd:f,windowsHide:!0}),m=10;case 12:if(!m--){t.next=27;break}if(t.prev=13,v=J().execSync("route print ".concat(g," mask ").concat(d),{windowsHide:!0}).toString(),b=function(e){return e.replace(/\./g,"\\.")},!new RegExp("".concat(b(g),"\\s+?").concat(b(d),"[\\s\\S]+").concat(b(l))).test(v)){t.next=19;break}return J().execSync("route add 0.0.0.0 mask 0.0.0.0 ".concat(g," metric 1"),{windowsHide:!0}),t.abrupt("break",27);case 19:t.next=23;break;case 21:t.prev=21,t.t0=t.catch(13);case 23:return t.next=25,(0,he.Dc)(1e3);case 25:t.next=12;break;case 27:case"end":return t.stop()}}),t,null,[[13,21]])})))()},killSpawned:function(e){if(e){var t=e.pid;if(t)try{J().execSync((0,w.V5)()||(0,w.IJ)()?"kill -9 ".concat(t):"taskkill /F /PID ".concat(t),{windowsHide:!0})}catch(e){}}},setRoutes:function(){var e=this;return d()(u().mark((function t(){var i,n;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=oe().join(e.filesPath,"tun2socks"),n=oe().join(i,"set_routes.bat"),t.abrupt("return",e.sudoRunBAT('"'.concat(n,'"')));case 3:case"end":return t.stop()}}),t)})))()},getClashStatus:function(){var e=this;return d()(u().mark((function t(){var i,n,o;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,e.clashAxiosClient.get("/configs",{validateStatus:function(e){return!0},timeout:1e3});case 3:return i=t.sent,n=i.status,o=i.data,e.clashMixedPort=(null==o?void 0:o["mixed-port"])||-1,t.abrupt("return",200===n?b.Z.CONNECTED:b.Z.DISCONNECTED);case 10:return t.prev=10,t.t0=t.catch(0),e.clashMixedPort=-1,t.abrupt("return",b.Z.DISCONNECTED);case 14:case"end":return t.stop()}}),t,null,[[0,10]])})))()},checkForUpdate:function(){var e=this;return d()(u().mark((function t(){var i,n,o,s,a,l,c,d,h,g,p,f,m,v,_,b,C;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.isSilentUpgraded){t.next=3;break}return ee.info("silent upgrade done, stop checking"),t.abrupt("return");case 3:return t.next=5,y.ipcRenderer.invoke("app","getVersion");case 5:return i=t.sent,ee.info("check for app update, current: ".concat(i)),t.next=9,re().get("https://api.github.com/repos/Fndroid/clash_for_windows_pkg/releases/latest");case 9:if(200===(n=t.sent).status&&(o=n.data.tag_name,(s=function(e){var t=1;return e.split(".").reverse().reduce((function(e,i){var n=1*e+i*t;return t*=1e3,n}),0)})(o)>s(i))){"https://github.com/Fndroid/clash_for_windows_pkg/releases",d=Symbol(),h=Symbol(),g=Symbol(),p=Symbol(),a={},r()(a,d,{}),r()(a,h,{}),r()(a,g,{}),r()(a,p,{}),f=a,m=Te(n.data.assets);try{for(m.s();!(v=m.n()).done;)_=v.value,(b=_.name)&&(/\d+?\.\d+?\.\d+?-win\.7z/.test(b)?f[d][w.J4]=_:/\d+?\.\d+?\.\d+?-ia32\-win\.7z/.test(b)?f[d][w.Ap]=_:/\d+?\.\d+?\.\d+?-arm64\-win\.7z/.test(b)?f[d][w.Vm]=_:/\d+?\.\d+?\.\d+?-arm64-mac\.7z/.test(b)?f[d][w.UD]=_:/\d+?\.\d+?\.\d+?-mac\.7z/.test(b)?f[d][w.Ml]=_:/\d+?\.\d+?\.\d+?\.ia32\.exe/.test(b)?f[h][w.Ap]=_:/\d+?\.\d+?\.\d+?\.arm64\.exe/.test(b)?f[h][w.Vm]=_:/\d+?\.\d+?\.\d+?\.exe/.test(b)?f[h][w.J4]=_:/arm64\.dmg/.test(b)?f[g][w.UD]=_:/\.dmg/.test(b)?f[g][w.Ml]=_:/x64\-linux\.tar\.gz/.test(b)&&(f[p][w.bV]=_))}catch(e){m.e(e)}finally{m.f()}C=function(e){var t,i;return null==f||null===(t=f[e])||void 0===t||null===(i=t[(0,w.$Q)()])||void 0===i?void 0:i.browser_download_url},e.portableMode?c=C(d):((0,w.V5)()&&(c=C(g)),(0,w.Kr)()&&(c=C(h)),(0,w.IJ)()&&(c=C(p))),e.newVersionInfo={version:o,log:ce.marked.parse(n.data.body),url:c||"https://github.com/Fndroid/clash_for_windows_pkg/releases",isPortable:e.portableMode,reactions:(null===(l=n.data)||void 0===l?void 0:l.reactions)||null,reactionClick:function(){var e;y.shell.openExternal(null===(e=n.data)||void 0===e?void 0:e.html_url)}},(0,w.V5)()&&e.settings.silentUpdate&&c&&(0,Ne._)(c,o).then((function(t){ee.info("upgrade to ".concat(o," æˆåŠŸ, è·¯å¾„: ").concat(t)),e.setIsSilentUpgraded({isUpgraded:!0}),e.newVersionInfo={}})).catch((function(e){ee.info("auto upgrade å¤±è´¥ï¼Œé”™è¯¯: ".concat(e))}))}case 11:case"end":return t.stop()}}),t)})))()},loadConfData:function(){ee.info("ä»Žä¸€èˆ¬åŠ è½½æ•°æ® config.yaml");var e=oe().join(this.clashPath,"config.yaml");try{var t=ie().readFileSync(e,"utf8").toString(),i=le().parse(t,{prettyErrors:!0,strict:!1});this.setConfData({data:i})}catch(e){var n="",o=e.linePos;if(o){var s=o.start;if(s){var r=s.line,a=s.col;n=", on line: ".concat(r,", at column: ").concat(a)}}this.appendError({error:"Error: ".concat(e).concat(n)}),ee.warn("æ— æ³•åŠ è½½å¸¸è§„ config.yaml å¹¶å‡ºçŽ°é”™è¯¯: ".concat(e))}},mkdirPathSync:function(e){return e!==oe().dirname(e)&&(!!ie().existsSync(e)||(this.mkdirPathSync(oe().dirname(e))?(ie().mkdirSync(e),!0):void 0))},initConfigFolder:function(){var e=this;return d()(u().mark((function t(){var i,n,o,s,a,l,c,d,h,g,p,f,m;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.mkdirPathSync(e.clashPath),i=oe().join(e.clashPath,"config.yaml"),n=oe().join(e.clashPath,"config.yml"),ie().existsSync(n)){try{ie().unlinkSync(i)}catch(e){}ie().renameSync(n,i)}if(ie().existsSync(i)&&""!==ie().readFileSync(i,{encoding:"utf8"}))try{void 0===(o=le().parseDocument(ie().readFileSync(i,"utf8"))).get("mixed-port")&&(s=o.get("port"),a=o.get("socks-port"),l=s||a||7890,o.delete("port"),o.delete("socks-port"),ie().writeFileSync(i,"mixed-port: ".concat(l,"\n").concat(o.toString())))}catch(e){}else ee.info("é¦–æ¬¡å‘å¸ƒ, åˆ›å»º config.yaml..."),ie().writeFileSync(i,le().stringify({"mixed-port":7890,"allow-lan":!1,"external-controller":"127.0.0.1:9090",secret:(0,De.v4)()}));if(c=oe().join(e.filesPath,"default/Country.mmdb"),d=oe().join(e.clashPath,"Country.mmdb"),ie().existsSync(d)||ie().copyFileSync(c,d),!(0,w.Kr)()){t.next=20;break}return g=(h={},r()(h,w.Ap,"ia32"),r()(h,w.J4,"x64"),r()(h,w.Vm,"arm64"),h)[(0,w.$Q)()],p=oe().join(e.filesPath,"win/".concat(g,"/wintun.dll")),f=oe().join(e.clashPath,"wintun.dll"),t.next=14,(0,he.uQ)();case 14:if(t.t0=t.sent,!t.t0){t.next=17;break}t.t0=ie().existsSync(f);case 17:if(!t.t0){t.next=19;break}ie().unlinkSync(f);case 19:ie().existsSync(f)||ie().copyFileSync(p,f);case 20:m=oe().join(e.clashPath,"logs"),ie().existsSync(m)||ie().mkdirSync(m);case 22:case"end":return t.stop()}}),t)})))()},initProfilesFolder:function(){var e=this.profilesPath;ie().existsSync(e)||ie().mkdirSync(e);var t=oe().join(this.profilesPath,"list.yml");ie().existsSync(t)||ie().writeFileSync(t,"files: []\nindex: -1",{flag:"ax"})},startChild:function(e){if(!e||!e.hasOwnProperty("command"))return null;var t=e.args,i=void 0===t?[]:t,n=e.options,o=void 0===n?{}:n;return J().spawn(e.command,i,Oe(Oe({},o),{},{windowsHide:!0}))},spawnUserDefindExes:function(){if(this.confData){var e=[],t=this.settings.childProcessText,i=void 0===t?"":t;try{e=le().parse(i).processes||[]}catch(e){}var n=[];for(var o in e){var s=e[o],r=s.log,a=s.options,l=(a=void 0===a?{}:a).cwd,c=this.startChild(e[o]),d=c.pid,h=c.stderr,u=c.stdout;r&&l&&(h&&h.pipe(ie().createWriteStream(oe().join(l,"cfw-child-process-err.log"),{flags:"a"})),u&&u.pipe(ie().createWriteStream(oe().join(l,"cfw-child-process-out.log"),{flags:"a"}))),n.push(d)}_.Z.put(W.Z.LAST_USER_EXE_PIDS,n)}},preDownloadAds:function(){return d()(u().mark((function e(){var t,i,n,o,s;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,re().get("https://raw.githubusercontent.com/Fndroid/ads/master/ads_v2.json?t="+(new Date).getTime());case 2:t=e.sent,i=t.status,n=t.data,200===i&&(o=n.feedback)&&(s=o,_.Z.put(W.Z.AD_IMAGES,s));case 5:case"end":return e.stop()}}),e)})))()},profileUpdater:function(){var e=this;return d()(u().mark((function t(){var i,n,o,s,r,a,c,d;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.profiles&&!e.isAppSuspend){t.next=2;break}return t.abrupt("return");case 2:return i=function(){return(new Date).getTime()},n=e.profiles.files,o=(void 0===n?[]:n).filter((function(t){var i=t.interval,n=t.url,o=t.time,s=t.cron,r=void 0===s?"":s;if(!n)return!1;try{var a=P()();if(r&&new Ve(r).isMatchDate(a))return!0;if(i>0){var l=ie().statSync(oe().join(e.profilesPath,o)).mtime;if(l){var c=e.profileUpdateFailed[n];if(void 0!==c){if(!P()(c).add(i,"hours").isBefore(a))return!1;delete e.profileUpdateFailed[n]}return P()(l).add(i,"hours").isBefore(a)}}}catch(e){}return!1})),t.next=7,Promise.allSettled(o.map((function(e){var t=e.url,i=e.headers;return(0,ye.rF)({url:t,headersString:i})})));case 7:s=t.sent,r=u().mark((function t(n){var r,a,c,d,h;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=s[n].value,a=r.success,c=r.message,d=r.targetIndex,h=o[n].url,!a||d!==e.profiles.index){t.next=5;break}return t.next=5,e.refreshProfile();case 5:a&&e.profileUpdateFailedURLs.includes(h)&&(e.profileUpdateFailedURLs=e.profileUpdateFailedURLs.filter((function(e){return e!==h}))),c&&(ee.warn("æ— æ³•ä½¿ç”¨ url æ›´æ–°é…ç½®èµ„æ–™: ".concat(h)),(0,he.c0)("é…ç½®èµ„æ–™æ›´æ–°å¤±è´¥",h),e.profileUpdateFailed.hasOwnProperty(h)||(e.profileUpdateFailed[h]=i()),e.profileUpdateFailedURLs.includes(h)||(e.profileUpdateFailedURLs=[].concat(l()(e.profileUpdateFailedURLs),[h])));case 7:case"end":return t.stop()}}),t)})),a=0;case 10:if(!(a<s.length)){t.next=15;break}return t.delegateYield(r(a),"t0",12);case 12:a++,t.next=10;break;case 15:c=e.profiles.files,d=(void 0===c?[]:c).map((function(e){return e.time})),ie().readdir(oe().join(e.profilesPath),(function(t,i){!t&&i.length>0&&i.forEach((function(t){if(/^\d+\.yml$/.test(t)){var i=!1,n=ie().statSync(oe().join(e.profilesPath,t)).mtimeMs;n&&(i=P()(n).isBefore(P()().subtract(1,"month"))),i&&!d.includes(t)&&ie().unlinkSync(oe().join(e.profilesPath,t))}}))}));case 18:case"end":return t.stop()}}),t)})))()},rebindShortcut:function(e,t,i){var n=this;return d()(u().mark((function o(){var s;return u().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(!t){o.next=9;break}return o.prev=1,o.next=4,y.ipcRenderer.invoke("globalShortcut","unregister",t);case 4:delete n.shortcuts[t],o.next=9;break;case 7:o.prev=7,o.t0=o.catch(1);case 9:if(!e){o.next=23;break}return o.prev=10,o.next=13,y.ipcRenderer.invoke("globalShortcut","register",e);case 13:return o.next=15,y.ipcRenderer.invoke("globalShortcut","isRegistered",e);case 15:return(s=o.sent)&&(n.shortcuts[e]=i),o.abrupt("return",s);case 20:o.prev=20,o.t1=o.catch(10),console.error(o.t1);case 23:return o.abrupt("return",!1);case 24:case"end":return o.stop()}}),o,null,[[1,7],[10,20]])})))()},detectInterfaceName:function(){var e=(0,ue.Z)();e&&e!==this.detectedInterfaceName&&this.setDetectedInterfaceName({interfaceName:e})},quit:function(){var e=this;return d()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return ee.info("åº”ç”¨é€€å‡º, å…³é—­ç³»ç»Ÿä»£ç†"),t.next=3,e.killClashCore();case 3:if(e.resetDNS(),t.prev=4,!e.isSystemProxyOn){t.next=8;break}return t.next=8,e.$setSystemProxy(!1);case 8:t.next=12;break;case 10:t.prev=10,t.t0=t.catch(4);case 12:return t.prev=12,y.ipcRenderer.send("cleanup-done"),t.finish(12);case 15:case"end":return t.stop()}}),t,null,[[4,10,12,15]])})))()}}),mounted:function(){var e=this;window.addEventListener("online",(function(){ee.info("network online"),e.detectInterfaceName(),e.refreshProfile()})),y.ipcRenderer.on("wlan-status-changed",Pe.debounce((function(t,i){["ssidDidChangeForWiFiInterfaceWithName","wlan_notification_acm_connection_complete"].includes(null==i?void 0:i.code)&&(ee.info("wlan-status-changed: ".concat(JSON.stringify(i))),e.setSSIDOptions())}),200)),y.ipcRenderer.on("wlan-status-listen-error",(function(t,i){ee.error("failed to listen network change nativly: ".concat(i)),window.addEventListener("online",(function(){e.setSSIDOptions()}))})),y.ipcRenderer.invoke("wlan-status-wanted")},beforeDestroy:function(){},beforeMount:function(){var e=this;return d()(u().mark((function t(){var n,o,s,a,c,h,g,p,f,m,v,C,x,S,k,L,N,D,I,E,T,M,A,O,P,R,F,B,V;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,y.ipcRenderer.invoke("window","isVisible");case 2:return n=t.sent,e.setIsWindowShow({isShow:n}),e.startTime=(new Date).getTime(),t.t0=e,t.next=8,y.ipcRenderer.invoke("app","isPackaged");case 8:if(t.t1=!t.sent,t.t2={isDevMode:t.t1},t.t0.setIsDevMode.call(t.t0,t.t2),ee.info("åº”ç”¨ç¨‹åºä»¥æ¨¡å¼å¼€å§‹: ".concat(e.devMode?"dev":"production")),e.$router.replace({path:e.currentRoutePath}).catch((function(e){})),!e.devMode){t.next=17;break}t.t3="",t.next=20;break;case 17:return t.next=19,y.ipcRenderer.invoke("app","getPath","exe");case 19:t.t3=t.sent;case 20:o=t.t3,e.setExePath({path:o}),(s=_.Z.get(W.Z.LAST_CLASH_PID))&&e.killSpawned({pid:s}),a=_.Z.get(W.Z.LAST_USER_EXE_PIDS)||[],c=Te(a);try{for(c.s();!(h=c.n()).done;)g=h.value,e.killSpawned({pid:g})}catch(e){c.e(e)}finally{c.f()}return t.t4=e,t.next=30,y.ipcRenderer.invoke("nativeTheme","shouldUseDarkColors");case 30:return t.t5=t.sent,t.t6={shouldUseDarkTheme:t.t5},t.t4.setShouldUseDarkTheme.call(t.t4,t.t6),y.ipcRenderer.on("native-theme-updated",(function(t,i){e.setShouldUseDarkTheme({shouldUseDarkTheme:i})})),y.ipcRenderer.on("shortcut-pressed",function(){var t=d()(u().mark((function t(i,n){var o;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=e.shortcuts[n],t.next=3,o();case 3:case"end":return t.stop()}}),t)})));return function(e,i){return t.apply(this,arguments)}}()),y.ipcRenderer.send("clash-core-status-change",0),y.ipcRenderer.on("break-connections",(function(t,i){e.breakConnections(i)})),y.ipcRenderer.on("persist-selected-proxy",(function(){e.persistSelectedProxy()})),y.ipcRenderer.on("app-exit",e.quit),y.ipcRenderer.on("power-event",(function(t,i){e.setIsAppSuspend({isSuspend:"suspend"===i})})),y.ipcRenderer.on("system-proxy-changed",function(){var t=d()(u().mark((function t(i,n){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.$setSystemProxy(n,e.confData);case 2:if(!t.sent){t.next=4;break}e.setIsSystemProxyOn({isOn:n});case 4:case"end":return t.stop()}}),t)})));return function(e,i){return t.apply(this,arguments)}}()),y.ipcRenderer.send("mixin-changed",e.isMixinEnable),y.ipcRenderer.on("mixin-changed",(function(t,i){e.changeIsMixinEnable({isMixin:i}),e.refreshProfile()})),y.ipcRenderer.send("tun-changed",e.isTunEnable),y.ipcRenderer.on("tun-changed",(function(t,i){e.chagneIsTunEnable({isTun:i}),e.refreshProfile()})),y.ipcRenderer.on("run-tray-script",e.runTrayScript),y.ipcRenderer.on("mode-changed",(function(t,i){e.switchMode(i)})),y.ipcRenderer.on("app-open",function(){var t=d()(u().mark((function t(i,n){var o,s,r,a,l;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!n.find((function(e){return/clash:\/\/install-config\/?\?url=(.+?)(?=$|&)/.test(e)}))){t.next=11;break}if(o=decodeURIComponent(RegExp.$1.trim()),!/^https?:\/\//.test(o)){t.next=11;break}return t.next=5,(0,ye.rF)({url:o});case 5:s=t.sent,r=s.success,a=s.message,l=s.targetIndex,(0,he.c0)("Profile",r?"é…ç½®èµ„æ–™å·²æˆåŠŸä¸‹è½½.":a),r&&(e.changeProfileIndex({index:l}),e.refreshProfile());case 11:if(!n.find((function(e){return/clash:\/\/quit/.test(e)}))){t.next=14;break}return t.next=14,e.quit();case 14:case"end":return t.stop()}}),t)})));return function(e,i){return t.apply(this,arguments)}}()),y.ipcRenderer.on("menu-item-change",(function(t,i){e.$router.replace({path:"/home/".concat(i)})})),y.ipcRenderer.on("window-event",(function(t,i){if(["show","hide"].includes(i))e.setIsWindowShow({isShow:"show"===i});else if("close"===i){var n=e.settings.lightweightMode;void 0!==n&&n&&!e.isLocalMode&&(_.Z.put(W.Z.IS_LIGHTWEIGHT_MODE_CLOSE,!0),y.ipcRenderer.send("cleanup-done"))}})),t.next=52,y.ipcRenderer.invoke("app","getPath","home");case 52:return p=t.sent,f=oe().join(o,"../data"),m=oe().join(p,"/.config/clash"),ie().existsSync(f)&&(m=f,e.portableMode=!0),e.userPath=p,e.setClashPath({path:m}),t.next=60,e.initConfigFolder();case 60:if(e.loadConfData(),(0,w.V5)()&&Le().then((function(t){e.setUserDNS({dns:t})})).catch((function(e){ee.info("faile to get user dns setting with error: ".concat(e))})),e.loadSettings(),!(0,w.Kr)()){t.next=73;break}return t.prev=64,t.next=67,ve();case 67:ee.info("httpæœåŠ¡å™¨å¼€å§‹äºŽ: ".concat(e.innerServerPort)),t.next=73;break;case 70:t.prev=70,t.t7=t.catch(64),ee.info("http æœåŠ¡å™¨å› é”™è¯¯è€Œæ— æ³•å¯åŠ¨: ".concat(t.t7));case 73:if(v=_.Z.get(W.Z.IS_LIGHTWEIGHT_MODE_CLOSE)||!1,C=e.settings,x=C.hideTrayIcon,S=C.hideAfterStartup,(x||v||!S)&&y.ipcRenderer.invoke("window-control","show"),e.settings.fontFamily,k=e.settings.profilePath,e.setProfilesPath({path:k||oe().join(e.clashPath,"profiles")}),e.initProfilesFolder(),e.loadProfiles(),L=e.settings,N=L.randomControllerPort,D=void 0===N||N,I=L.randomMixedPort,e.devMode||v){t.next=106;break}if(t.prev=83,!D){t.next=94;break}return E="external-controller",t.t8="127.0.0.1:",t.next=89,Be();case 89:return t.t9=t.sent,T=t.t8.concat.call(t.t8,t.t9),t.next=93,(0,he.F0)(oe().join(e.clashPath,"config.yaml"),E,T);case 93:e.setConfData({data:Oe(Oe({},e.confData),{},r()({},E,T))});case 94:if(!I){t.next=102;break}return M="mixed-port",t.next=98,Be();case 98:return A=t.sent,t.next=101,(0,he.F0)(oe().join(e.clashPath,"config.yaml"),M,A);case 101:e.setConfData({data:Oe(Oe({},e.confData),{},r()({},M,A))});case 102:t.next=106;break;case 104:t.prev=104,t.t10=t.catch(83);case 106:return t.next=108,He();case 108:return O=t.sent,e.setIsLocalMode({isLocal:O!==ze.Active}),P=0,R=function(){var t=d()(u().mark((function t(){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.clashStatus===b.Z.CONNECTED&&!e.isWindowShow||!(e.clashAxiosFlyingRequestCount<5)){t.next=12;break}return t.next=3,e.getClashStatus();case 3:i=t.sent,t.t0=i,t.next=t.t0===b.Z.CONNECTED?7:t.t0===b.Z.DISCONNECTED?9:11;break;case 7:return P=0,t.abrupt("break",11);case 9:return P+=1,t.abrupt("break",11);case 11:P>=(i===b.Z.CONNECTED?0:5)&&(P=0,e.setClashStatus({status:i}));case 12:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),R(),l()(Array(5)).forEach((function(e,t){setTimeout(R,500+500*t)})),setInterval(R,3e3),t.next=117,e.handlerRestartClash();case 117:if(_.Z.put(W.Z.IS_LIGHTWEIGHT_MODE_CLOSE,!1),e.showStartup||(e.showStartup=!0,(0,w.Kr)()&&i(22037).release().startsWith("6.")?(0,he.c0)("Attention","The support for Windows 7 will be dropped soon in 2023 due to upstream changes. Click to learn more.",{hideWindowOnClick:!0},(function(){y.shell.openExternal("https://cloud.google.com/blog/products/chrome-enterprise/extending-chrome-on-windows-7-to-support-enterprise-customers")})):(0,he.c0)("Clash æ­£åœ¨åŽå°è¿è¡Œ","äº«å—æ‚¨çš„è‡ªç”±æ—¶é—´!")),e.detectInterfaceName(),e.setSSIDOptions(),e.spawnUserDefindExes(),e.settings.checkForUpdates&&e.checkForUpdate().then((function(e){})).catch((function(e){return console.error(e)})),setInterval((function(){e.settings.checkForUpdates&&e.checkForUpdate().then((function(e){})).catch((function(e){return console.error(e)}))}),216e5),e.preDownloadAds().then((function(e){})).catch((function(e){return console.error(e)})),setInterval(e.profileUpdater,6e4),e.profileUpdater(),!(0,w.Kr)()){t.next=134;break}return t.t11=e,t.next=131,(0,Ie.Qz)();case 131:t.t12=t.sent,t.t13={isExist:t.t12},t.t11.setIsFirewallRuleExist.call(t.t11,t.t13);case 134:for(Fe.bind(["command+f12","ctrl+f12"],(function(){return y.ipcRenderer.invoke("webContent","toggleDevTools"),!1})),Fe.bind(["command+w","ctrl+w"],(function(e){if(!e.target.className.split(" ").includes("no-esc"))return y.ipcRenderer.invoke("window","close"),!1})),Fe.bind("esc",(function(e){if(!e.target.className.split(" ").includes("no-esc"))return y.ipcRenderer.invoke("window","close"),!1}),"keydown"),F=function(t){var i=t-1;i>=0&&i<e.menuItemsWithOrder.length&&e.$router.replace({path:e.menuItemsWithOrder[i].path}).catch((function(e){}))},B=function(t){Fe.bind("".concat(t),(function(){return e.menuKeyboardClickTimes+=1,F(t),!1}))},V=1;V<=9;V++)B(V);case 140:case"end":return t.stop()}}),t,null,[[64,70],[83,104]])})))()}};var Ue,$e;const Ke=je;i(5513),i(17613),i(69028);const qe=(0,M.Z)(Ke,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"wrapper bg-[color:var(--bgc)] text-[color:var(--fgc)]"},["2077"===e.theme?t("img",{staticClass:"cloud opacicy",attrs:{src:"static/imgs/2077.png"}}):e._e(),e._v(" "),"red"===e.theme?t("img",{staticClass:"cloud opacicy",attrs:{src:"static/imgs/national_day.png"}}):e._e(),e._v(" "),t("StatusBar"),e._v(" "),t("main",[t("div",{staticClass:"left-side"},[t("main-menu",{attrs:{"download-progress":e.pkgDownloadProgress,"start-time":e.startTime,profileUpdateFailedURLs:e.profileUpdateFailedURLs,"keyboard-click-times":e.menuKeyboardClickTimes}})],1),e._v(" "),t("div",{staticClass:"right-side"},[t("keep-alive",[e.$route.meta.keepAlive?t("router-view",{on:{refreshProfile:e.refreshProfile}}):e._e()],1),e._v(" "),e.$route.meta.keepAlive?e._e():t("router-view",{on:{refreshProfile:e.refreshProfile}})],1),e._v(" "),t("div",{staticClass:"clash-status-main"},[t("div",{class:e.statusIcon}),e._v(" "),t("div",{staticClass:"clash-status-hint",on:{click:function(){return e.showLogsFolder()}}},[e._v("\n        "+e._s(e.statusHint)+"\n      ")])])])],1)}),[],!1,null,"68cbbc92",null).exports},58323:(e,t,i)=>{"use strict";i.d(t,{Z:()=>S});var n=i(48926),o=i.n(n),s=i(59713),r=i.n(s),a=i(87757),l=i.n(a),c=i(24883),d=i(81518),h=i(54387),u=i.n(h),g=Symbol(),p=Symbol(),f=Symbol();const m={props:["src","clickalbe"],data:function(){return{status:g}},computed:{isDefault:function(){return this.status===g},isLoaded:function(){return this.status===p},isFailed:function(){return this.status===f}},methods:{imgLoaded:function(){this.status=p},imgFailed:function(){this.status=f}}};i(56656);var v=i(51900);const _=(0,v.Z)(m,(function(){var e=this,t=e._self._c;return t("div",{attrs:{id:"lazy-image-view clickable"}},[t("div",{directives:[{name:"show",rawName:"v-show",value:e.isDefault,expression:"isDefault"}],staticClass:"placeholder ad-img twinkling"},[t("div",[e._v("å›¾ç‰‡æ­£åœ¨åŠ è½½")])]),e._v(" "),t("img",{directives:[{name:"show",rawName:"v-show",value:e.isLoaded,expression:"isLoaded"}],staticClass:"ad-img clickable",attrs:{src:e.src},on:{load:e.imgLoaded,error:e.imgFailed,click:function(t){return e.$emit("click")}}}),e._v(" "),t("div",{directives:[{name:"show",rawName:"v-show",value:e.isFailed,expression:"isFailed"}],staticClass:"ad-img error-img clickable",on:{click:function(t){return e.$emit("click")}}},[t("div",[e._v("å›¾ç‰‡åŠ è½½å¤±è´¥ï¼Œç‚¹å‡»é‡å®šå‘è‡³ç½‘ç«™")])])])}),[],!1,null,"34599eb0",null).exports;var b=i(72574),w=i(23321),y=i(72298);function C(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const x={props:[],components:{LazyImageView:_,EscCapture:b.Z},data:function(){return{adImages:[],isShowDisclaimerStatement:!1}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?C(Object(i),!0).forEach((function(t){r()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):C(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,w.mapState)({})),methods:{select:function(e){y.shell.openExternal(["https://t.me/Rules_lhie1","https://t.me/Fndroids","https://github.com/Z-Siqi/Clash-for-Windows_Chinese-Attached","https://github.com/Dreamacro/clash","https://github.com/yichengchen/clashX","https://docs.cfw.lbyczf.com/","https://fndroid.github.io/clash-config-builder/","https://github.com/tiagonmas/Windows-Loopback-Exemption-Manager","https://github.com/Noisyfox/sysproxy","https://github.com/eycorsican/go-tun2socks","https://dev.maxmind.com/geoip/geoip2/geolite2/","https://github.com/twitter/twemoji","https://github.com/Jigsaw-Code/outline-client","https://github.com/microsoft/terminal/","https://www.wintun.net/","https://github.com/winsw/winsw","https://apps.apple.com/us/app-bundle/quantumult-x-upgrade/id1482985563","https://github.com/Kr328/clash-premium-installer","https://github.com/microsoft/monaco-editor","https://fonts.google.com/icons"][e])},adClick:function(e){y.shell.openExternal(this.adImages[e].click)}},beforeRouteEnter:function(e,t,i){var n;i((n=o()(l().mark((function e(t){var i,n,o,s,r;return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.adImages=c.Z.get(d.Z.AD_IMAGES)||[],e.next=3,u().get("https://raw.githubusercontent.com/Fndroid/ads/master/ads_v2.json?t="+(new Date).getTime());case 3:i=e.sent,n=i.status,o=i.data,200===n&&(s=o.feedback)&&(r=s,c.Z.put(d.Z.AD_IMAGES,r),t.adImages=r);case 6:case"end":return e.stop()}}),e)}))),function(e){return n.apply(this,arguments)}))}};i(19743),i(71131),i(72890);const S=(0,v.Z)(x,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"relative w-full h-full",attrs:{id:"main-about-view"}},[e._m(0),e._v(" "),t("div",{staticClass:"section"},[t("div",{staticClass:"title"},[e._v("å…³äºŽ")]),e._v(" "),t("div",{staticClass:"chat-list gap-[20px]"},[t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(2)}}},[e._v("\n          Github\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(5)}}},[e._v("\n          å¸®åŠ©æ–‡æ¡£\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){e.isShowDisclaimerStatement=!0}}},[e._v("\n          å…è´£å£°æ˜Ž\n        ")])])]),e._v(" "),t("div",{staticClass:"section"},[t("div",{staticClass:"title"},[e._v("é¸£è°¢")]),e._v(" "),t("div",{staticClass:"flex flex-wrap gap-x-[20px]"},[t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(3)}}},[e._v("\n          Clash\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(4)}}},[e._v("\n          ClashX\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(16)}}},[e._v("\n          Quantumult(X)\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(10)}}},[e._v("\n          GeoLite2\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(11)}}},[e._v("\n          twemoji\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(7)}}},[e._v("\n          EnableLoopback\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(8)}}},[e._v("\n          sysproxy\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(9)}}},[e._v("\n          go-tun2socks\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(12)}}},[e._v("\n          outline-client\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(13)}}},[e._v("\n          terminal\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(14)}}},[e._v("\n          Wintun\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(15)}}},[e._v("\n          winsw\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(17)}}},[e._v("\n          clash-premium-installer\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(18)}}},[e._v("\n          monaco-editor\n        ")]),e._v(" "),t("div",{staticClass:"text-[color:var(--feedback-link-c)] cursor-pointer",on:{click:function(t){return e.select(19)}}},[e._v("\n          Material Icons\n        ")])])]),e._v(" "),t("div",{staticClass:"section ad-section"},[t("div",{staticClass:"title"},[e._v("å¹¿å‘Š")]),e._v(" "),t("div",{staticClass:"ad-img-list"},e._l(e.adImages,(function(i,n){return t("div",{key:n,staticClass:"ad-img"},[t("lazy-image-view",{attrs:{clickalbe:i.click,src:i.img},on:{click:function(t){return e.adClick(n)}}})],1)})),0)]),e._v(" "),t("div",{staticClass:"absolute mt-[1000px]"},[e._v("\n      "+e._s(decodeURIComponent("%E7%8B%AC%E7%AB%8B%E6%80%9D%E8%80%83%EF%BC%8C%E6%98%8E%E8%BE%A8%E6%98%AF%E9%9D%9E%E3%80%82"))+"\n    ")]),e._v(" "),e.isShowDisclaimerStatement?t("EscCapture",{staticClass:"w-full h-full absolute bg-[color:var(--mask-c)] top-0 left-0",on:{mousedown:function(t){if(t.target!==t.currentTarget)return null;e.isShowDisclaimerStatement=!1},esc:function(t){e.isShowDisclaimerStatement=!1}}},[t("pre",{staticClass:"left-1/2 top-1/2 w-3/5 break-words whitespace-pre-wrap text-sm absolute bg-[color:var(--bgc)] px-4 py-3 h-4/5 scrolly -translate-x-1/2 -translate-y-1/2 rounded-md shadow-2xl font-sans select-text"},[e._v("1. æœ¬è½¯ä»¶ä»…ä¾›å­¦ä¹ å’Œç ”ç©¶ç½‘ç»œæŠ€æœ¯ä¹‹ç”¨ï¼Œç”¨æˆ·å¿…é¡»éµå®ˆæ‰€åœ¨åœ°åŒºçš„æ³•å¾‹æ³•è§„ï¼Œä¸å¾—ç”¨äºŽéžæ³•ç”¨é€”ï¼Œæœ¬è½¯ä»¶ä¸å¯¹ä»»ä½•äººçš„è¡Œä¸ºè´Ÿè´£ã€‚ \n\n2. ç”¨æˆ·åœ¨ä½¿ç”¨æœ¬è½¯ä»¶æ—¶å¿…é¡»ä¸¥æ ¼éµå®ˆæ‰€åœ¨å›½å®¶/åœ°åŒºçš„æ³•å¾‹ã€æ³•è§„å’Œæ”¿ç­–ã€‚ å› è¿åæœ‰å…³æ³•å¾‹ã€æ³•è§„å’Œæ”¿ç­–è€Œå¯¼è‡´çš„ä»»ä½•åŽæžœæˆ–è´£ä»»ç”±ç”¨æˆ·è‡ªè¡Œæ‰¿æ‹…ã€‚\n\n3. æœ¬è½¯ä»¶ä¸è´Ÿè´£ä¼ è¾“å†…å®¹ã€‚ å› æ­¤ï¼Œå¦‚å› ä½¿ç”¨æœ¬è½¯ä»¶è€Œäº§ç”Ÿä»»ä½•é—®é¢˜æˆ–åŽæžœï¼Œç”±ç”¨æˆ·è‡ªè¡Œæ‰¿æ‹…å…¨éƒ¨è´£ä»»ã€‚\n\n4. å¦‚æœ¬è½¯ä»¶è¿åç”¨æˆ·æ‰€åœ¨å›½å®¶/åœ°åŒºçš„ä»»ä½•æ³•å¾‹æ³•è§„ï¼Œç”¨æˆ·å¿…é¡»ç«‹å³åœæ­¢ä½¿ç”¨å¹¶æ‰¿æ‹…ç›¸åº”çš„æ³•å¾‹è´£ä»»ã€‚\n\n5. ç”¨æˆ·åœ¨ä½¿ç”¨æœ¬è½¯ä»¶æ—¶ï¼Œå³æ‰¿è®¤å¹¶åŒæ„æœ¬è½¯ä»¶ä¸èƒ½ä¿è¯ç½‘ç»œçš„ç¨³å®šæ€§ã€å‡†ç¡®æ€§ã€åŠæ—¶æ€§å’Œå®‰å…¨æ€§ã€‚ å› ç½‘ç»œæ‹¥å¡žã€é˜²ç«å¢™é™åˆ¶ã€DNSæ±¡æŸ“ã€è¿è¥å•†å¹²æ‰°ç­‰åŽŸå› é€ æˆçš„è¿žæŽ¥é—®é¢˜æˆ–æ— æ³•è¿žæŽ¥ï¼Œæœ¬è½¯ä»¶ä¸æ‰¿æ‹…ä»»ä½•è´£ä»»ã€‚\n\n6. æœ¬è½¯ä»¶ä¸æä¾›æŠ€æœ¯æ”¯æŒï¼Œå¯¹å› ç”¨æˆ·ä½¿ç”¨æœ¬è½¯ä»¶è€Œé€ æˆçš„ä»»ä½•ç›´æŽ¥æˆ–é—´æŽ¥æŸå¤±ï¼ŒåŒ…æ‹¬ä½†ä¸é™äºŽè´¢äº§æŸå¤±ã€æ•°æ®ä¸¢å¤±åŠå…¶ä»–å½¢å¼çš„æŸå¤±ä¸æ‰¿æ‹…ä»»ä½•è´£ä»»ã€‚\n\n7. æœ¬è½¯ä»¶å·²å°½åŠ›ç¡®ä¿è½¯ä»¶çš„ç¨³å®šæ€§å’Œå®‰å…¨æ€§ï¼Œä½†å¯¹ç”¨æˆ·å› ä½¿ç”¨æœ¬è½¯ä»¶è€Œé­å—çš„ä»»ä½•ç›´æŽ¥æˆ–é—´æŽ¥æŸå¤±ä¸æ‰¿æ‹…ä»»ä½•è´£ä»»ã€‚\n\n8. è½¯ä»¶ä¿ç•™éšæ—¶æ›´æ”¹æ¡æ¬¾å’Œæ¡ä»¶çš„æƒåˆ©ã€‚ ä¸€æ—¦æ¡æ¬¾å’Œæ¡ä»¶å‘ç”Ÿå˜åŒ–ï¼Œå°†åœ¨è½¯ä»¶é¡µé¢ä¸Šå‘å¸ƒå…¬å‘Šã€‚ ç”¨æˆ·éœ€å…³æ³¨å¹¶éµå®ˆæœ€æ–°ç‰ˆæœ¬çš„æ¡æ¬¾å’Œæ¡ä»¶ã€‚\n\n9. The software may display advertisements from third-party entities. The software does not endorse, guarantee, or assume responsibility for the accuracy, relevancy, or quality of the information presented in these advertisements. Users acknowledge and agree that the software is not liable for any loss or damage arising from the display of advertisements or any transactions or interactions users may have with the advertisers. The user is solely responsible for any interactions with advertisers and is advised to exercise caution and conduct due diligence before engaging in any transactions or interactions with advertisers.\n    ")])]):e._e()],1)}),[function(){var e=this,t=e._self._c;return t("div",{staticClass:"section"},[t("div",{staticClass:"title"},[e._v("ä½œè€…")]),e._v(" "),t("div",{staticClass:"content"},[e._v("404 Frror")])])}],!1,null,"4a737543",null).exports},14196:(e,t,i)=>{"use strict";i.d(t,{Z:()=>T});var n=i(48926),o=i.n(n),s=i(319),r=i.n(s),a=i(59713),l=i.n(a),c=i(87757),d=i.n(c),h=i(13338),u=i(24883),g=i(81518),p=i(10605),f=i.n(p),m=i(23321),v=i(33182),_=i(71017),b=i.n(_),w=i(72574),y=i(8369),C=i(72298);function x(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function S(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?x(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):x(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const k={name:"ConnectionInfoView",props:["connection"],components:{EscCapture:w.Z},data:function(){return{data:{speedStr:""}}},watch:{infoData:{immediate:!0,handler:function(e){Object.keys(e).length&&(this.data=e)}},connection:{handler:function(e,t){if(e&&t){var i={upload:e.upload-t.upload,download:e.download-t.download};this.speedStr=this.$parent.calcSpeedText({speed:i})}else this.speedStr=""},immediate:!0}},computed:S(S({},(0,m.mapGetters)(["theme"])),{},{isConnectionClosed:function(){return 0===Object.keys(this.infoData).length},infoData:function(){var e=this.connection;if(!e)return{};var t=e.metadata,i="DIRECT"===e.chains[0];return{ä¸»æœº:t.host,ç½‘ç»œ:e.metadata.network.toUpperCase(),æµé‡:"â†‘".concat((0,y.nM)(e.upload)," â†“").concat((0,y.nM)(e.download)),æ¥æº:"".concat(t.sourceIP,":").concat(t.sourcePort," (").concat(e.metadata.type,")"),ç›®çš„åœ°:(i?t.destinationIP:t.host||t.destinationIP)+":"+t.destinationPort,è§„åˆ™:"".concat(e.rule," (").concat(e.rulePayload,")"),"è¿›ç¨‹è·¯å¾„":e.metadata.processPath,æ¨¡å¼:e.chains.slice().reverse().join(" - "),"DNS æ¨¡å¼":e.metadata.dnsMode,"å¼€å§‹æ—¶é—´":f()(e.start).format("MM-DD HH:mm:ss")}}}),methods:{handleCopyVal:function(e){C.clipboard.writeText(e),(0,y.c0)("Copied to Clipboad!",e,!0)}},mounted:function(){}};i(96340);var L=i(51900);const N=(0,L.Z)(k,(function(){var e=this,t=e._self._c;return t("EscCapture",{staticClass:"main bg-[color:var(--mask-c)]",class:["theme-".concat(e.theme)],on:{mousedown:function(t){return e.$emit("close")},esc:function(t){return e.$emit("close")}}},[t("div",{staticClass:"card-main bg-[color:var(--bgc)] text-[color:var(--fgc)]",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{staticClass:"card-content"},[t("div",{staticClass:"content-title px-4 flex justify-between items-baseline gap-3"},[t("span",[e._v("è¿žæŽ¥ä¿¡æ¯")]),e._v(" "),t("div",{staticClass:"flex-grow"}),e._v(" "),e.speedStr?t("div",{staticClass:"text-xs"},[e._v(e._s(e.speedStr))]):e._e(),e._v(" "),t("div",[e.isConnectionClosed?t("span",{staticClass:"text-sm text-[#D44545]"},[e._v("å…³é—­")]):t("span",{staticClass:"text-sm text-[#13AF42]"},[e._v("æ´»åŠ¨")])])]),e._v(" "),t("div",{staticClass:"w-full h-[1px] bg-gray-300"}),e._v(" "),t("div",{staticClass:"content-list"},e._l(Object.keys(e.data),(function(i,n){return t("div",{key:n,staticClass:"content-item pl-4 pr-4 pt-2 pb-2"},[t("div",{staticClass:"item-key"},[e._v(e._s(i))]),e._v(" "),e.data[i]?t("div",{staticClass:"item-value flex flex-wrap gap-2 opacity-80 font-normal items-center"},[e._v("\n            "+e._s(e.data[i])+"\n            "),t("div",{staticClass:"bg-[color:#64646480] text-white rounded-lg px-2 py-[2px] text-xs h-fit",on:{click:function(t){return e.handleCopyVal(e.data[i])}}},[e._v("\n              å¤åˆ¶\n            ")])]):t("div",[e._v("--")])])})),0)])])])}),[],!1,null,"947c6bac",null).exports;function D(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function I(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?D(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):D(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const E={components:{Hint:h.Z,ConnectionInfoView:N,EscCapture:w.Z},props:[],data:function(){return{isPause:!1,searchText:"",client:null,lastData:{uploadTotal:0,downloadTotal:0,connections:[]},data:{uploadTotal:0,downloadTotal:0,connections:[]},labels:['<span class="icon">upload</span><span class="icon">speed</span>','<span class="icon">download</span><span class="icon">speed</span>','<span class="icon">upload</span><span class="icon">signal_cellular_alt</span>','<span class="icon">download</span><span class="icon">signal_cellular_alt</span>','<span class="icon">schedule</span>','<span class="icon">map</span>'],labelSelected:4,reverseTags:[],detailConnectionId:"",filterTypes:[{title:"æºIP",key:"sourceIP"},{title:"ç›®çš„åœ°IP",key:"destinationIP"},{title:"åŸŸå",key:"host"},{title:"è¿›ç¨‹è·¯å¾„",key:"processPath"},{title:"ç½‘ç»œ",key:"network"},{title:"ç±»åž‹",key:"type"},{title:"æºç«¯å£",key:"sourcePort"},{title:"ç›®çš„åœ°ç«¯å£",key:"destinationPort"},{title:"DNSæ¨¡å¼",key:"dnsMode"}],filterTypeIndex:0,isShowTypeFilter:!1}},watch:{searchText:function(e){u.Z.put(g.Z.CONNECTION_MODULE_SEARCH_TEXT,e)},clashStatus:function(e){this.client&&this.client.terminate(),e===v.Z.CONNECTED&&this.setupComponent()}},computed:I(I(I({},(0,m.mapState)({clashStatus:function(e){return e.app.clashStatus}})),(0,m.mapGetters)(["clashAxiosClient","clashWSClient"])),{},{detailConnection:function(){var e=this;return this.detailConnectionId&&this.data.connections.find((function(t){return t.id===e.detailConnectionId}))||null},searchTextReg:function(){try{return new RegExp(this.searchText,"i")}catch(e){}return null},orderedConnections:function(){var e,t=this;if(!this.data)return[];var i=function(e){return new Date(e).getTime()},n=r()(this.data.connections).map((function(e){var i=e.id,n=t.lastData.connections.find((function(e){return e.id===i}));return e.speed=n?{upload:e.upload-n.upload,download:e.download-n.download}:{upload:0,download:0},e})).sort((function(e,n){return 4===t.labelSelected?i(e.start)-i(n.start):3===t.labelSelected?n.download-e.download:2===t.labelSelected?n.upload-e.upload:1===t.labelSelected?n.speed.download-e.speed.download:0===t.labelSelected?n.speed.upload-e.speed.upload:5===t.labelSelected?(n.metadata.host||n.metadata.destinationIP||"").localeCompare(e.metadata.host||e.metadata.destinationIP||""):0})),o=null!=this&&null!==(e=this.reverseTags)&&void 0!==e&&e[this.labelSelected]?n.reverse():n;return""===this.searchText?o:o.filter((function(e){if(/^(.+?)\=(.+)$/.test(t.searchText)){var i=RegExp.$1,n=RegExp.$2,o=((null==e?void 0:e.metadata)||{})[i];return!!o&&o===n}return!t.searchTextReg||t.searchTextReg.test((0,y.Mf)(e))}))},connTypeLabels:function(){var e=this.filterTypes[this.filterTypeIndex].key,t=[];return this.data.connections.forEach((function(i){var n=((null==i?void 0:i.metadata)||{})[e];t.includes(n)||t.push(n)})),t.filter((function(e){return e})).sort()}}),methods:{itemStyle:function(e){var t=[];return this.filterTypeIndex===e&&t.push("selected"),this.filterTypeIndex!==e&&t.push("item-none"),this.filterTypeIndex===e+1&&t.push("selected-top"),this.filterTypeIndex===e-1&&t.push("selected-bottom"),t},connectionEndpoint:function(e){var t=e.chains,i=void 0===t?[]:t,n=this.settings.connChainType,o=void 0===n?0:n,s=i.length;return[0,2].includes(o)&&s>=1?i[0]:""},connectionProcess:function(e){var t=e.metadata,i=(t=void 0===t?{}:t).processPath,n=void 0===i?"":i;try{if(n)return b().basename(n)}catch(e){}return""},connectionGroup:function(e){var t=e.chains,i=void 0===t?[]:t,n=this.settings.connChainType,o=void 0===n?0:n,s=i.length;return 2===o&&1===s?"":[1,2].includes(o)&&s>=1?i[s-1]:""},handleLableSelect:function(e){var t;this.labelSelected===e?this.reverseTags[e]=!(null!=this&&null!==(t=this.reverseTags)&&void 0!==t&&t[e]):this.labelSelected=e;u.Z.put(g.Z.CONNECTION_ORDER_INDEX,e),u.Z.put(g.Z.CONNECTION_ORDER_REVERSE_TAGS,this.reverseTags)},calcLabelClasses:function(e){var t=["label"];return this.labelSelected===e&&(this.reverseTags[e]?t.push("label-selected-reverse"):t.push("label-selected")),t},calcSpeedText:function(e){var t=[];if(!e.speed)return"";var i=e.speed,n=i.upload,o=void 0===n?0:n,s=i.download,r=void 0===s?0:s;return 0!==o&&t.push("â†‘".concat(this.traffic(o),"/s")),0!==r&&t.push("â†“".concat(this.traffic(r),"/s")),t.join(" ")},fromNow:function(e){return f()(e).locale('zh-cn').fromNow()},traffic:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,i=["B","KB","MB","GB","TB"],n=0;~~(e/1024)&&n<i.length;)e/=1024,n++;return"".concat(0===n?e:e.toFixed(t)," ").concat(i[n])},upperCaseFirst:function(e){return e.charAt(0).toUpperCase()+e.slice(1)},handleCloseConnection:function(e){var t=this;return o()(d().mark((function i(){return d().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,t.clashAxiosClient.delete("connections/".concat(e));case 2:case"end":return i.stop()}}),i)})))()},handleCloseAllConnections:function(){var e=this;return o()(d().mark((function t(){return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.allSettled(e.orderedConnections.map((function(t){var i=t.id;return e.clashAxiosClient.delete("connections/".concat(i))})));case 2:case"end":return t.stop()}}),t)})))()},handleItemSelected:function(e){var t=e.id;this.detailConnectionId=t},handleSwitchPauseStatus:function(){this.isPause=!this.isPause,this.isPause?this.closeStream():this.openStream()},closeStream:function(){this.client&&this.client.terminate(),this.client=null},openStream:function(){var e=this,t=this.clashWSClient("connections");t&&(t.on("message",(function(t){var i=JSON.parse(t);e.lastData=e.data,e.data=i})),this.client=t)},setupComponent:function(){var e,t;this.labelSelected=null!==(e=u.Z.get(g.Z.CONNECTION_ORDER_INDEX))&&void 0!==e?e:4,this.reverseTags=null!==(t=u.Z.get(g.Z.CONNECTION_ORDER_REVERSE_TAGS))&&void 0!==t?t:[],this.isPause||this.openStream()}},beforeRouteEnter:function(e,t,i){var n;i((n=o()(d().mark((function t(i){var n,o,s;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:i.setupComponent(),n=e.query.searchText,o=void 0===n?"":n,i.searchText=o?o.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):null!==(s=u.Z.get(g.Z.CONNECTION_MODULE_SEARCH_TEXT))&&void 0!==s?s:"";case 3:case"end":return t.stop()}}),t)}))),function(e){return n.apply(this,arguments)}))},beforeRouteLeave:function(e,t,i){this.closeStream(),i()}};i(46029);const T=(0,L.Z)(E,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-connection-view relative",on:{click:function(t){e.isShowTypeFilter=!1}}},[t("EscCapture",{directives:[{name:"show",rawName:"v-show",value:e.isShowTypeFilter,expression:"isShowTypeFilter"}],staticClass:"translate-y-[2px] flex min-w-[500px] w-[calc(100%-200px)] h-[calc(100%-300px)] min-h-[400px] absolute rounded overflow-hidden z-10 shadow-lg text-sm border border-[color:var(--bc)] left-1/2 -translate-x-1/2 top-[32px]",on:{click:function(e){e.stopPropagation()},esc:function(t){e.isShowTypeFilter=!1}}},[t("div",{staticClass:"bg-[color:var(--bgc)] w-fit flex flex-col flex-shrink-0 items-center"},[e._l(e.filterTypes,(function(i,n){return t("div",{key:i.key,staticClass:"h-[40px] px-3 flex items-center justify-center w-full clickable",class:e.itemStyle(n),on:{click:function(t){e.filterTypeIndex=n}}},[e._v("\n        "+e._s(i.title)+"\n      ")])})),e._v(" "),t("div",{staticClass:"flex-grow bg-[color:var(--mbgc)] w-full",class:e.itemStyle(e.filterTypes.length)})],2),e._v(" "),t("div",{staticClass:"bg-[color:var(--bgc)] flex-1 flex flex-col overflow-y-auto scrolly"},e._l(e.connTypeLabels,(function(i){return t("div",{key:i,staticClass:"hover:bg-[color:var(--proxy-item-bgc)] h-fit flex items-center break-all py-1 font-normal px-2 clickable gap-x-1",on:{click:function(t){e.searchText="".concat(e.filterTypes[e.filterTypeIndex].key,"=").concat(i),e.isShowTypeFilter=!1}}},[t("div",{staticClass:"icon text-sm"},[e._v("search")]),e._v(" "),t("div",[e._v(e._s(i))])])})),0)]),e._v(" "),t("div",{staticClass:"header relative"},[e._m(0),e._v(" "),t("div",{staticClass:"search-area relative"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.searchText,expression:"searchText"}],ref:"search-text-input",staticClass:"search-box",attrs:{type:"æ–‡æœ¬",placeholder:"æœç´¢"},domProps:{value:e.searchText},on:{click:function(t){t.stopPropagation(),e.isShowTypeFilter=!0,e.$refs["search-text-input"].focus()},change:function(t){e.isShowTypeFilter=!1},input:function(t){t.target.composing||(e.searchText=t.target.value)}}}),e._v(" "),e.searchText?t("span",{staticClass:"icon text-sm absolute right-2 h-full flex top-0 items-center clickable",on:{click:function(t){t.stopPropagation(),e.searchText="",e.$refs["search-text-input"].focus(),e.isShowTypeFilter=!0}}},[e._v("close")]):e._e()]),e._v(" "),t("div",{staticClass:"header-right"},[t("div",{staticClass:"total-hint"},[e._v("\n        "+e._s("æ€»å…±: â†‘".concat(e.traffic(e.data.uploadTotal,1)," â†“").concat(e.traffic(e.data.downloadTotal,1)))+"\n      ")])])]),e._v(" "),t("div",{staticClass:"control-view border-b border-b-[color:var(--bc)]"},[t("div",{staticClass:"labels overflow-clip justify-between w-full"},[t("Hint",{class:e.calcLabelClasses(0),attrs:{hint:"ä¸Šä¼ é€Ÿåº¦"},on:{click:function(t){return e.handleLableSelect(0)}}},[t("div",{staticClass:"flex gap-1"},[t("span",{staticClass:"icon"},[e._v("upload")]),t("span",{staticClass:"icon"},[e._v("speed")])])]),e._v(" "),t("Hint",{class:e.calcLabelClasses(1),attrs:{hint:"ä¸‹è½½é€Ÿåº¦"},on:{click:function(t){return e.handleLableSelect(1)}}},[t("div",{staticClass:"flex gap-1"},[t("span",{staticClass:"icon"},[e._v("download")]),t("span",{staticClass:"icon"},[e._v("speed")])])]),e._v(" "),t("Hint",{class:e.calcLabelClasses(2),attrs:{hint:"ä¸Šä¼ æµé‡"},on:{click:function(t){return e.handleLableSelect(2)}}},[t("div",{staticClass:"flex gap-1"},[t("span",{staticClass:"icon"},[e._v("upload")]),t("span",{staticClass:"icon"},[e._v("signal_cellular_alt")])])]),e._v(" "),t("Hint",{class:e.calcLabelClasses(3),attrs:{hint:"ä¸‹è½½æµé‡"},on:{click:function(t){return e.handleLableSelect(3)}}},[t("div",{staticClass:"flex gap-1"},[t("span",{staticClass:"icon"},[e._v("download")]),t("span",{staticClass:"icon"},[e._v("signal_cellular_alt")])])]),e._v(" "),t("Hint",{class:e.calcLabelClasses(4),attrs:{hint:"å¼€å§‹æ—¶é—´"},on:{click:function(t){return e.handleLableSelect(4)}}},[t("span",{staticClass:"icon"},[e._v("schedule")])]),e._v(" "),t("Hint",{class:e.calcLabelClasses(5),attrs:{hint:"ç›®çš„åœ°"},on:{click:function(t){return e.handleLableSelect(5)}}},[t("span",{staticClass:"icon"},[e._v("computer")])]),e._v(" "),t("div",{staticClass:"flex-grow"}),e._v(" "),t("div",{class:["close-all-btn",e.isPause?"button-resume":"button-pause"],on:{click:e.handleSwitchPauseStatus}},[e._v("\n        "+e._s(e.isPause?"æ¢å¤":"æš‚åœ")+"\n      ")]),e._v(" "),t("div",{staticClass:"close-all-btn",on:{click:e.handleCloseAllConnections}},[e._v("\n        å…¨éƒ¨å…³é—­\n        "),t("span",[e._v("("+e._s(e.orderedConnections.length)+")")])])],1)]),e._v(" "),t("div",{staticClass:"scroll-view"},e._l(e.orderedConnections,(function(i){return t("div",{key:i.id,class:["conn-item",i.closed?"conn-item-closed":""],on:{click:function(t){return e.handleItemSelected(i)}}},[t("div",[t("div",{staticClass:"conn-item-top"},[t("div",{staticClass:"conn-host"},[e._v("\n            "+e._s(i.metadata.host||i.metadata.destinationIP)+":"+e._s(i.metadata.destinationPort)+"\n          ")])]),e._v(" "),t("div",{staticClass:"conn-labels"},[t("div",{staticClass:"conn1"},[e._v("\n            "+e._s(i.metadata.network.toUpperCase())+"\n          ")]),e._v(" "),t("div",{staticClass:"conn2"},[e._v(e._s(i.metadata.type))]),e._v(" "),e.settings.connShowProcess&&e.connectionProcess(i)?t("div",{staticClass:"conn7"},[e._v("\n            "+e._s(e.connectionProcess(i))+"\n          ")]):e._e(),e._v(" "),e.connectionGroup(i)?t("div",{staticClass:"conn3"},[e._v("\n            "+e._s(e.connectionGroup(i))+"\n          ")]):e._e(),e._v(" "),e.connectionEndpoint(i)?t("div",{staticClass:"conn4"},[e._v("\n            "+e._s(e.connectionEndpoint(i))+"\n          ")]):e._e(),e._v(" "),t("div",{staticClass:"conn5"},[e._v("\n            "+e._s(e.upperCaseFirst(e.fromNow(i.start)))+"\n          ")]),e._v(" "),i.speed.upload||i.speed.download?t("div",{staticClass:"conn6"},[e._v("\n            "+e._s(e.calcSpeedText(i))+"\n          ")]):e._e()])]),e._v(" "),i.closed||e.isPause?e._e():t("div",{staticClass:"close-btn",on:{click:function(t){return t.stopPropagation(),e.handleCloseConnection(i.id)}}},[t("span",{staticClass:"icon text flex justify-center items-center w-full h-full"},[e._v("block")])])])})),0),e._v(" "),e.detailConnectionId?t("ConnectionInfoView",{attrs:{connection:e.detailConnection},on:{close:function(t){e.detailConnectionId=""}}}):e._e()],1)}),[function(){var e=this._self._c;return e("div",{staticClass:"title"},[e("div",[this._v("è¿žæŽ¥")])])}],!1,null,"39b270f2",null).exports},72797:(e,t,i)=>{"use strict";i.d(t,{Z:()=>Ne});var n=i(63038),o=i.n(n),s=i(48926),r=i.n(s),a=i(59713),l=i.n(a),c=i(87757),d=i.n(c),h=i(23321),u=i(71017),g=i.n(u),p=i(57147),f=i.n(p),m=i(10605),v=i.n(m),_=i(71893),b=i.n(_),w=i(84695),y=i(86173),C=i.n(y);const x=require("zlib");var S=i.n(x);const k=require("tar-stream");var L=i.n(k),N=i(32081),D=i(33182),I=i(81518),E=i(24883),T=i(97520),M=i(11442),A=i.n(M),O=i(83566),P=i(72298),R=i(8369),F=i(71289);function B(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const V={props:[],data:function(){return{retries:0,logs:"",intervalID:null}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?B(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):B(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,h.mapState)({clashPath:function(e){return e.app.clashPath},logFilePath:function(e){return e.app.logFilePath},errors:function(e){return e.app.errors}})),methods:{openLogsFolder:function(e){this.$parent.$parent.showLogsFolder(!0)},openHomeDir:function(){this.clashPath&&P.shell.openPath(this.clashPath)},autoFix:function(e){var t=this;return r()(d().mark((function e(){var i;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,R.vC)({title:"Clash for Windows",type:"warning",message:"è¯·ç¡®è®¤",detail:"config.yaml å’Œ country.mmdb å°†è¢«åˆ é™¤.",buttons:["æ˜¯","å¦"]});case 2:i=e.sent,0===i.response&&t.$parent.autoFix();case 5:case"end":return e.stop()}}),e)})))()}},mounted:function(){var e=this,t=function(){e.retries+=1;if(e.clashPath&&e.logFilePath)try{var t=(0,p.readFileSync)(e.logFilePath),i=t.toString().split("\n").filter((function(e){return/level=fatal/.test(e)})).join("\n\n");i?e.logs=i:e.errors.length>0&&(e.logs=e.errors.join("\n"))}catch(e){}e.retries>3&&""===e.logs&&(e.logs="æ— æ³•è¿žæŽ¥åˆ° Clash core æ ¸å¿ƒï¼Œæ—¥å¿—ä¸å¯ç”¨")};this.intervalID=F.ZP.add(t,2e3),t()},beforeDestroy:function(){this.intervalID&&(F.ZP.stop(this.intervalID),this.intervalID=null)}};i(63473),i(38245);var W=i(51900);const H=(0,W.Z)(V,(function(){var e=this,t=e._self._c;return t("div",{attrs:{id:"error-view-main"}},[e.logs?t("div",{staticClass:"error-hints"},[t("div",{attrs:{id:"error-title"}},[e._v("é”™è¯¯")]),e._v(" "),t("div",{staticClass:"error-content"},[e._v(e._s(e.logs))]),e._v(" "),t("div",{staticClass:"error-btns"},[t("div",{staticClass:"error-hint",on:{click:e.openHomeDir}},[e._v("ä¸»ç›®å½•")]),e._v(" "),t("div",{staticClass:"error-hint",on:{click:e.openLogsFolder}},[e._v("æ—¥å¿—æ–‡ä»¶å¤¹")]),e._v(" "),t("div",{staticClass:"error-hint",on:{click:e.autoFix}},[e._v("å°è¯•ä¿®å¤")])])]):t("div",{staticClass:"loading-hint"},[e._v("æ­£åœ¨åŠ è½½...")])])}),[],!1,null,"9ba71ad8",null).exports;var z=i(319),j=i.n(z),U=i(17285),$=i(62639),K=i(12436);const q={name:"EditListView",model:{prop:"list",event:"changed"},props:{list:{type:Array,default:function(){return[]}},disabled:{type:Boolean,default:!1},placeHolder:{type:String,default:""}},data:function(){return{}},methods:{handleAddItem:function(){this.$emit("changed",[].concat(j()(this.list),[""]))},handleRemoveItem:function(e){this.$emit("changed",[].concat(j()(this.list.slice(0,e)),j()(this.list.slice(e+1))))},handleChangeItem:function(e,t){this.$emit("changed",[].concat(j()(this.list.slice(0,t)),[e.target.value],j()(this.list.slice(t+1))))}}};i(46918);const Z=(0,W.Z)(q,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-edit-list-view"},[e._l(e.list,(function(i,n){return t("div",{key:n,staticClass:"item"},[t("input",{staticClass:"rounded-br-none rounded-tr-none",attrs:{type:"text",disabled:e.disabled,placeholder:e.placeHolder},domProps:{value:i},on:{input:function(t){return e.handleChangeItem(t,n)}}}),e._v(" "),e.disabled?e._e():t("div",{staticClass:"btn btn-remove clickable",on:{click:function(t){return e.handleRemoveItem(n)}}},[t("span",{staticClass:"icon text-white"},[e._v("remove")])])])})),e._v(" "),e.disabled?e._e():t("div",{staticClass:"btn btn-add clickable",on:{click:e.handleAddItem}},[t("span",{staticClass:"icon text-[#41b883]"},[e._v("add")])])],2)}),[],!1,null,"3ea6d831",null).exports;var G=i(72574),Y=i(50008),Q=i.n(Y),X=i(6479),J=i.n(X);function ee(e){var t=function(e,t){if("object"!==Q()(e)||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t||"default");if("object"!==Q()(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Q()(t)?t:String(t)}function te(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function ie(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?te(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):te(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const ne={name:"EditObjectView",model:{prop:"object",event:"changed"},props:{object:{type:Object,default:function(){}},disabled:{type:Boolean,default:!1},valuePlaceHolder:{type:String,default:""},keyPlaceHolder:{type:String,default:""}},data:function(){return{addKey:""}},computed:{},methods:{handleAddItem:function(){""===this.addKey||this.addKey in this.object||(this.$emit("changed",ie(ie({},this.object),{},l()({},this.addKey,""))),this.addKey="")},handleRemoveItem:function(e){var t=this.object,i=(t[e],J()(t,[e].map(ee)));this.$emit("changed",i)},handleChangeValue:function(e,t){var i=e.target.value;this.$emit("changed",ie(ie({},this.object),{},l()({},t,i)))}}};i(60768);const oe=(0,W.Z)(ne,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-edit-object-view"},[e._l(Object.entries(this.object),(function(i){var n=o()(i,2),s=n[0],r=n[1];return t("div",{key:s,staticClass:"item gap-1"},[t("div",{staticClass:"max-w-[120px] text-ellipsis overflow-hidden whitespace-normal flex-shrink-0",attrs:{title:s}},[e._v("\n      "+e._s(s)+"\n    ")]),e._v(" "),t("span",[e._v(":")]),e._v(" "),t("input",{attrs:{type:"text",disabled:e.disabled,placeholder:e.valuePlaceHolder},domProps:{value:r},on:{input:function(t){return e.handleChangeValue(t,s)}}}),e._v(" "),e.disabled?e._e():t("div",{staticClass:"btn btn-remove clickable flex-shrink-0",on:{click:function(t){return e.handleRemoveItem(s)}}},[t("span",{staticClass:"icon text-white"},[e._v("remove")])])])})),e._v(" "),e.disabled?e._e():t("div",{staticClass:"flex items-center gap-2",on:{click:e.handleAddItem}},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.addKey,expression:"addKey"}],attrs:{type:"text",placeholder:e.keyPlaceHolder},domProps:{value:e.addKey},on:{input:function(t){t.target.composing||(e.addKey=t.target.value)}}}),e._v(" "),t("span",{staticClass:"btn btn-add clickable icon text-[#41b883]"},[e._v("add")])])],2)}),[],!1,null,"352b843a",null).exports;function se(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function re(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?se(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):se(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const ae={name:"TunSettingsView",components:{SelectView:U.Z,SwitchView:$.Z,SimpleInput:K.Z,EditList:Z,EscCapture:G.Z,EditObject:oe},data:function(){return{ipv6:!1,stackType:0,nameServers:[],fallbackServers:[],defaultNameservers:[],fakeIPFilters:[],nameserverPolicy:{},isAutoDetectInterface:!0,interfaceName:"",dnsHijacks:[],isAutoRedir:!1,isAutoRedirAutoRoute:!1}},computed:re(re({},(0,h.mapState)({tunSettings:function(e){return e.app.tunSettings}})),{},{obj:function(){return(0,R.Sr)(this.$data)},text:function(){return A().stringify(this.obj)}}),watch:{},methods:re(re({},(0,h.mapMutations)({setTunSettings:"SET_TUN_SETTINGS"})),{},{handleSave:function(){this.setTunSettings({settings:this.$data}),this.$emit("close")},handleReset:function(){var e=this;return r()(d().mark((function t(){return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.setupComponent({});case 1:case"end":return t.stop()}}),t)})))()},handleOpenDocument:function(){P.shell.openExternal("https://dreamacro.github.io/clash/configuration/configuration-reference.html")},setupComponent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.ipv6,i=e.nameServers,n=e.fallbackServers,o=e.defaultNameservers,s=e.fakeIPFilters,r=e.nameserverPolicy,a=e.stackType,l=e.isAutoDetectInterface,c=e.interfaceName,d=e.dnsHijacks,h=e.isAutoRedir,u=e.isAutoRedirAutoRoute;this.ipv6=void 0!==t&&t,this.stackType=[0,1].includes(a)?a:0,this.nameServers=i||["114.114.114.114","223.5.5.5","8.8.8.8"],this.fallbackServers=n||[],this.defaultNameservers=o||[],this.fakeIPFilters=s||["+.stun.*.*","+.stun.*.*.*","+.stun.*.*.*.*","+.stun.*.*.*.*.*","*.n.n.srv.nintendo.net","+.stun.playstation.net","xbox.*.*.microsoft.com","*.*.xboxlive.com"].concat(j()((0,O.Kr)()?["*.msftncsi.com","*.msftconnecttest.com","WORKGROUP"]:(0,O.V5)()?["apps.apple.com"]:[])),this.nameserverPolicy=r||{},this.isAutoDetectInterface=void 0===l||l,this.interfaceName=c||"",this.dnsHijacks=d||["any:53"],this.isAutoRedir=void 0!==h&&h,this.isAutoRedirAutoRoute=void 0!==u&&u}}),mounted:function(){this.setupComponent(this.tunSettings||{})},beforeDestroy:function(){}};i(98803);const le=(0,W.Z)(ae,(function(){var e=this,t=e._self._c;return t("EscCapture",{staticClass:"main-tun-settings-view bg-[color:var(--mask-c)]",on:{esc:function(t){return e.$emit("close")},mousedown:function(t){return e.$emit("close")}}},[t("div",{staticClass:"content bg-[color:var(--bgc)] text-[color:var(--fgc)]",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{staticClass:"title"},[e._v("TUN æ¨¡å¼è®¾ç½®")]),e._v(" "),t("div",{staticClass:"pannel"},[t("div",{staticClass:"left border-[1px] border-[color:var(--bc)]"},[t("div",{staticClass:"flex"},[t("div",[e._v("DNS IPv6")]),e._v(" "),t("SwitchView",{model:{value:e.ipv6,callback:function(t){e.ipv6=t},expression:"ipv6"}})],1),e._v(" "),t("div",[t("div",[e._v("DNS æœåŠ¡å™¨")]),e._v(" "),t("EditList",{attrs:{placeHolder:"eg: 114.114.114.114"},model:{value:e.nameServers,callback:function(t){e.nameServers=t},expression:"nameServers"}})],1),e._v(" "),t("div",[t("div",[e._v("åŽå¤‡ DNS æœåŠ¡å™¨")]),e._v(" "),t("EditList",{attrs:{placeHolder:"eg: 8.8.8.8"},model:{value:e.fallbackServers,callback:function(t){e.fallbackServers=t},expression:"fallbackServers"}})],1),e._v(" "),t("div",[t("div",[e._v("é»˜è®¤åç§°æœåŠ¡å™¨")]),e._v(" "),t("EditList",{attrs:{placeHolder:"eg: 8.8.8.8"},model:{value:e.defaultNameservers,callback:function(t){e.defaultNameservers=t},expression:"defaultNameservers"}})],1),e._v(" "),t("div",[t("div",[e._v("Fake IPè¿‡æ»¤å™¨")]),e._v(" "),t("EditList",{attrs:{placeHolder:"eg: *.lan"},model:{value:e.fakeIPFilters,callback:function(t){e.fakeIPFilters=t},expression:"fakeIPFilters"}})],1),e._v(" "),t("div",[t("div",[e._v("åŸŸåæœåŠ¡å™¨æ”¿ç­–")]),e._v(" "),t("EditObject",{attrs:{keyPlaceHolder:"åŸŸå",valuePlaceHolder:"æœåŠ¡å™¨"},model:{value:e.nameserverPolicy,callback:function(t){e.nameserverPolicy=t},expression:"nameserverPolicy"}})],1),e._v(" "),t("div",[t("div",[e._v("DNS åŠ«æŒ")]),e._v(" "),t("EditList",{attrs:{placeHolder:"eg: any:53"},model:{value:e.dnsHijacks,callback:function(t){e.dnsHijacks=t},expression:"dnsHijacks"}})],1),e._v(" "),t("div",{staticClass:"flex"},[t("div",[e._v("TUN ç (TUN Stack)")]),e._v(" "),t("SelectView",{attrs:{items:["gvisor","system"]},model:{value:e.stackType,callback:function(t){e.stackType=t},expression:"stackType"}})],1),e._v(" "),t("div",{staticClass:"flex"},[t("div",[e._v("è‡ªåŠ¨æ£€æµ‹æŽ¥å£")]),e._v(" "),t("SwitchView",{model:{value:e.isAutoDetectInterface,callback:function(t){e.isAutoDetectInterface=t},expression:"isAutoDetectInterface"}})],1),e._v(" "),e.isAutoDetectInterface?e._e():t("div",{staticClass:"flex"},[t("div",[e._v("æŽ¥å£åç§°")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.interfaceName,expression:"interfaceName"}],attrs:{type:"text"},domProps:{value:e.interfaceName},on:{input:function(t){t.target.composing||(e.interfaceName=t.target.value)}}})]),e._v(" "),e.isLinux?t("div",{staticClass:"flex"},[t("div",[e._v("Auto Redir")]),e._v(" "),t("SwitchView",{model:{value:e.isAutoRedir,callback:function(t){e.isAutoRedir=t},expression:"isAutoRedir"}})],1):e._e(),e._v(" "),e.isLinux&&e.isAutoRedir?t("div",{staticClass:"flex"},[t("div",[e._v("Auto Route(Auto Redir)")]),e._v(" "),t("SwitchView",{model:{value:e.isAutoRedirAutoRoute,callback:function(t){e.isAutoRedirAutoRoute=t},expression:"isAutoRedirAutoRoute"}})],1):e._e()]),e._v(" "),t("div",{staticClass:"right border-[1px] border-[color:var(--bc)]"},[t("pre",[e._v(e._s(e.text))])])]),e._v(" "),t("div",{staticClass:"btns"},[t("div",{staticClass:"btn clickable",on:{click:e.handleReset}},[e._v("é‡ç½®")]),e._v(" "),t("div",{staticClass:"btn clickable",on:{click:e.handleOpenDocument}},[e._v("å¸®åŠ©æ–‡æ¡£")]),e._v(" "),t("div",{staticClass:"btn clickable",on:{click:e.handleSave}},[e._v("ä¿å­˜")])])])])}),[],!1,null,"b6dface2",null).exports;function ce(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function de(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?ce(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):ce(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const he={name:"ResetDNSSettingsView",components:{SelectView:U.Z,SwitchView:$.Z,SimpleInput:K.Z,EditList:Z,EscCapture:G.Z},data:function(){return{servers:[],isUsingCustom:!1}},computed:de({},(0,h.mapState)({userDNS:function(e){return e.app.userDNS}})),watch:{},methods:de(de({},(0,h.mapMutations)({})),{},{handleSave:function(){this.settings.isUsingResetDNSServers=this.isUsingCustom,this.settings.resetDNSServers=this.servers,this.$emit("close")},setupComponent:function(){var e=this.settings,t=e.isUsingResetDNSServers,i=e.resetDNSServers;this.isUsingCustom=t,this.servers=i}}),mounted:function(){this.setupComponent()},beforeDestroy:function(){}};i(36594);const ue=(0,W.Z)(he,(function(){var e=this,t=e._self._c;return t("EscCapture",{staticClass:"main-tun-settings-view bg-[color:var(--mask-c)]",on:{esc:function(t){return e.$emit("close")},mousedown:function(t){return e.$emit("close")}}},[t("div",{staticClass:"content bg-[color:var(--bgc)] text-[color:var(--fgc)]",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{staticClass:"title"},[e._v("é‡ç½® DNS è®¾ç½®")]),e._v(" "),t("div",{staticClass:"font-normal mb-1 text-sm hint"},[e._v("\n      If "),t("span",[e._v("Enabled")]),e._v(", "),t("span",[e._v("è‡ªå®šä¹‰æœåŠ¡å™¨")]),e._v(" will be used to\n      reset the system DNS after TUN mode is disabled. Otherwise,\n      "),t("span",[e._v("Detected Servers")]),e._v("\n      will be used.\n    ")]),e._v(" "),t("div",{staticClass:"pannel"},[t("div",{staticClass:"left border-[1px] border-[color:var(--bc)]"},[t("div",{staticClass:"flex"},[t("div",[e._v("Enable")]),e._v(" "),t("SwitchView",{model:{value:e.isUsingCustom,callback:function(t){e.isUsingCustom=t},expression:"isUsingCustom"}})],1),e._v(" "),t("div",[t("div",[e._v("Custom Servers:")]),e._v(" "),t("EditList",{model:{value:e.servers,callback:function(t){e.servers=t},expression:"servers"}})],1)]),e._v(" "),t("div",{staticClass:"right border-[1px] border-[color:var(--bc)]"},[t("div",[t("div",[e._v("Detected Servers:")]),e._v(" "),t("EditList",{attrs:{disabled:!0},model:{value:e.userDNS,callback:function(t){e.userDNS=t},expression:"userDNS"}})],1)])]),e._v(" "),t("div",{staticClass:"btns"},[t("div"),e._v(" "),t("div",{staticClass:"btn clickable",on:{click:e.handleSave}},[e._v("ä¿å­˜")])])])])}),[],!1,null,"47896be6",null).exports;var ge=i(22037);const pe={name:"InterfacesView",components:{EscCapture:G.Z,SelectView:U.Z},data:function(){return{interfaces:[],ipvIndex:0}},computed:{ifs:function(){var e=this;return this.interfaces.reduce((function(t,i){var n=i.name,o=i.addrs.filter((function(t){return t.family===["IPv4","IPv6"][e.ipvIndex]}));return o.length>0&&t.push({name:n,addrs:o}),t}),[])}},mounted:function(){this.interfaces=Object.entries((0,ge.networkInterfaces)()).map((function(e){var t=o()(e,2);return{name:t[0],addrs:t[1]}}))}};i(30145);const fe=(0,W.Z)(pe,(function(){var e=this,t=e._self._c;return t("EscCapture",{staticClass:"w-[calc(100%_-_170px)] h-[calc(100%_-_25px)] absolute top-[25px] left-[170px] bg-[color:var(--mask-c)] flex flex-col justify-center items-center",on:{esc:function(t){return e.$emit("close")},mousedown:function(t){return e.$emit("close")}}},[t("div",{staticClass:"w-[500px] max-h-[500px] rounded bg-[color:var(--bgc)] text-[color:var(--fgc)] overflow-auto flex flex-col items-center",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{staticClass:"flex justify-between w-full bg-[color:var(--bgc)] px-5 py-3 border-[color:var(--bc)] border-b"},[t("span",[e._v("ç½‘ç»œç«¯å£")]),e._v(" "),t("SelectView",{attrs:{items:["IPv4","IPv6"]},model:{value:e.ipvIndex,callback:function(t){e.ipvIndex=t},expression:"ipvIndex"}})],1),e._v(" "),t("div",{staticClass:"list w-full flex-grow flex flex-col gap-2 px-5 py-4"},e._l(e.ifs,(function(i){return t("div",{key:i.name,staticClass:"if-list rounded w-full"},[t("span",{staticClass:"text-base w-full text-center"},[e._v(e._s(i.name))]),e._v(" "),e._l(i.addrs,(function(i){return t("div",{key:i.address,staticClass:"text-sm flex flex-col",style:{color:i.internal?"#D44545":"#13AF42"}},[t("div",{staticClass:"flex"},[t("span",{staticClass:"w-[80px]"},[e._v("Address:")]),e._v(" "),t("span",[e._v(e._s(i.address))])]),e._v(" "),t("div",{staticClass:"flex"},[t("span",{staticClass:"w-[80px]"},[e._v("Netmask:")]),e._v(" "),t("span",[e._v(e._s(i.netmask)+"\n              "),i.cidr?t("span",[e._v("("+e._s(i.cidr.split("/")[1])+")")]):e._e()])]),e._v(" "),t("div",{staticClass:"flex"},[t("span",{staticClass:"w-[80px]"},[e._v("MAC:")]),e._v(" "),t("span",[e._v(e._s(i.mac))])])])}))],2)})),0)])])}),[],!1,null,"d9b850ea",null).exports;var me=i(36336),ve=i(13338),_e=i(27458);function be(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function we(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?be(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):be(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var ye=i(63878)("./service_".concat(process.platform)),Ce=(ye.status,ye.statusService,ye.needUpdate),xe=ye.updateService,Se=ye.installService,ke=ye.uninstallService;const Le={components:{ErrorView:H,TunSettingsView:le,ResetDNSSettingsView:ue,InterfacesView:fe,SwitchView:$.Z,SelectView:U.Z,InfoIcon:me.Z,Hint:ve.Z},props:[],data:function(){return{iconPath:"static/imgs/logo2.png",title:"Clash for Windows",isAllowLan:!1,bindAddress:"",port:0,logLevel:"unknow",isIPV6:!1,geoipUpdateTime:"",systemProxyLoading:!0,autoLaunch:E.Z.get(I.Z.AUTO_LAUNCH)||!1,autoLaunchLoading:!0,protableMode:!1,version:"",clashCoreVersion:"",serviceNeedUpdate:!1,isTunSettingsVisible:!1,isInterfacesVisible:!1,isFetchingFirewallRule:!1,isResetDNSSettingsVisible:!1}},watch:{status:function(){this.setupSwitches()},isWindowShow:function(e){e&&(this.setupComponent(),this.setupSwitches())},isLaunching:function(e){e||this.setupComponent()},clashStatus:function(e){e===D.Z.CONNECTED&&this.setupComponent()},clashPath:function(){this.serviceNeedUpdate=Ce()}},computed:we(we(we({},(0,h.mapState)({devMode:function(e){return e.app.isDevMode},clashPath:function(e){return e.app.clashPath},clashStatus:function(e){return e.app.clashStatus},confData:function(e){return e.app.confData},isMixinEnable:function(e){return e.app.isMixinEnable},isTunEnable:function(e){return e.app.isTunEnable},status:function(e){return e.app.status},isWindowShow:function(e){return e.app.isWindowShow},isLocalMode:function(e){return e.app.isLocalMode},isLaunching:function(e){return e.app.isLaunching},isSystemProxyOn:function(e){return e.app.isSystemProxyOn},isSilentUpgraded:function(e){return e.app.isSilentUpgraded},updateDownloadProgress:function(e){return e.app.updateDownloadProgress},isFirewallRuleExist:function(e){return e.app.isFirewallRuleExist},currentProfilePayload:function(e){return e.app.currentProfilePayload},matchedSSID:function(e){return e.app.matchedSSID}})),(0,h.mapGetters)(["resourcesPath","filesPath","mixedPort","clashAxiosClient","controllerPort","secret"])),{},{autoLaunchHint:function(){return(0,O.V5)()?"å¼€æœºè‡ªå¯åŠ¨":(0,O.Kr)()?"å¼€æœºè‡ªå¯åŠ¨":(0,O.IJ)()?"å¼€æœºè‡ªå¯åŠ¨":void 0},isShowNewIcon:function(){var e=this.settings.showNewVersionIcon,t=void 0===e||e,i=this.$parent.newVersionInfo.url;return t&&i}}),methods:we(we({},(0,h.mapMutations)({changeIsMixinEnable:"CHANGE_IS_MIXIN_ENABLE",changeIsTunEnable:"CHANGE_IS_TUN_ENABLE",setIsLocalMode:"SET_IS_LOCAL_MODE",setConfData:"SET_CONF_DATA",setIsSystemProxyOn:"SET_IS_SYSTEM_PROXY_ON",setIsFirewallRuleExist:"SET_IS_FIREWALL_RULE_EXIST"})),{},{handleTitleClick:function(){P.ipcRenderer.invoke("window","reload")},handleShowDNSQueryDialog:function(){this.$dns().catch((function(e){}))},handleShowScriptTestDialog:function(){this.$script({}).catch((function(e){}))},handlePreviewCurrentPayload:function(){this.$code({code:A().stringify(this.currentProfilePayload),readOnly:!0}).catch((function(e){}))},handleAddFirewallRules:function(){var e=this;return r()(d().mark((function t(){return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.isFetchingFirewallRule){t.next=2;break}return t.abrupt("return");case 2:if(e.isFetchingFirewallRule=!0,t.prev=3,!e.isFirewallRuleExist){t.next=9;break}return t.next=7,(0,_e.A7)();case 7:t.next=11;break;case 9:return t.next=11,(0,_e.Kz)();case 11:t.next=15;break;case 13:t.prev=13,t.t0=t.catch(3);case 15:return t.t1=e,t.next=18,(0,_e.Qz)();case 18:t.t2=t.sent,t.t3={isExist:t.t2},t.t1.setIsFirewallRuleExist.call(t.t1,t.t3),e.isFetchingFirewallRule=!1;case 22:case"end":return t.stop()}}),t,null,[[3,13]])})))()},handleEditMixin:function(){var e=this;return r()(d().mark((function t(){var i,n,o,s,r,a,l,c,h,u;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=e.settings,n=i.mixinText,o=void 0===n?"mixin: # object\n":n,s=i.mixinType,r=void 0===s?0:s,a=i.mixinCode,l=void 0===a?"module.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => {\n  return content\n}":a,t.prev=1,t.next=4,e.$code({code:0===r?o:l,language:0===r?"yaml":"javascript",fontSize:e.settings.editorFontSize});case 4:c=t.sent,h=c.code,(u=void 0===h?"":h)!==(0===r?o:l)&&(0===r?e.settings.mixinText=u:e.settings.mixinCode=u),t.next=12;break;case 10:t.prev=10,t.t0=t.catch(1);case 12:case"end":return t.stop()}}),t,null,[[1,10]])})))()},handleEditSSIDStrategyText:function(){var e=this;return r()(d().mark((function t(){var i,n,o,s;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=e.settings.ssidStrategyText,t.prev=1,t.next=4,e.$code({code:i,language:"yaml",fontSize:e.settings.editorFontSize});case 4:n=t.sent,o=n.code,(s=void 0===o?"":o)!==i&&(e.settings.ssidStrategyText=s,e.$parent.setSSIDOptions()),t.next=12;break;case 10:t.prev=10,t.t0=t.catch(1);case 12:case"end":return t.stop()}}),t,null,[[1,10]])})))()},installService:function(){var e=this;return r()(d().mark((function t(){var i,n,s,r,a,l,c;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=["å®‰è£…","å¸è½½"],e.serviceNeedUpdate&&i.push("æ›´æ–°"),t.next=4,e.$select({title:"æœåŠ¡ç®¡ç†",message:"è¿™å¯èƒ½éœ€è¦ä¸€æ®µæ—¶é—´.\nè¯¥APPå°†è‡ªåŠ¨é‡æ–°å¯åŠ¨.\n\nå½“å‰çŠ¶æ€: ".concat(e.isLocalMode?"æœªå®‰è£…":"å·²å®‰è£…"),items:i,subSelectItems:(0,O.Kr)()?["schtasks(æŽ¨è)","winsw"]:[],subSelectTitle:"å®‰è£…æ–¹æ³•:"});case 4:if(n=t.sent,s=o()(n,2),r=s[0],a=s[1],t.prev=8,0!==r){t.next=17;break}if(e.isLocalMode){t.next=14;break}return t.next=13,(0,R.vC)({type:"error",message:"The service is already installed."});case 13:return t.abrupt("return");case 14:return t.next=16,Se(a);case 16:e.devMode||e.reloadElectron();case 17:if(1!==r){t.next=21;break}return t.next=20,ke();case 20:e.devMode||e.reloadElectron();case 21:if(2!==r){t.next=25;break}return t.next=24,xe();case 24:e.devMode||e.reloadElectron();case 25:t.next=35;break;case 27:return t.prev=27,t.t0=t.catch(8),t.next=31,e.$select({title:"æœªèƒ½".concat(i[r].toLowerCase(),"æœåŠ¡æ¨¡å¼"),message:t.t0.message,items:["é‡æ–°åŠ è½½APP","å–æ¶ˆ"]});case 31:l=t.sent,c=o()(l,1),0===c[0]&&e.reloadElectron();case 35:case"end":return t.stop()}}),t,null,[[8,27]])})))()},handleAllowLANChange:function(){var e=this;return r()(d().mark((function t(){var i;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=!e.isAllowLan,t.next=3,e.clashAxiosClient.patch("/configs",{"allow-lan":i});case 3:if(204!==t.sent.status){t.next=9;break}return e.isAllowLan=i,t.next=8,(0,R.F0)(g().join(e.clashPath,"config.yaml"),"allow-lan",i);case 8:e.setConfData({data:we(we({},e.confData),{},{"allow-lan":i})});case 9:case"end":return t.stop()}}),t)})))()},handleIPV6Change:function(){var e=this;return r()(d().mark((function t(){var i,n;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=!e.isIPV6,t.next=3,e.clashAxiosClient.patch("/configs",{ipv6:i});case 3:if(n=t.sent,204!==n.status){t.next=10;break}return e.isIPV6=i,t.next=9,(0,R.F0)(g().join(e.clashPath,"config.yaml"),"ipv6",i);case 9:e.setConfData({data:we(we({},e.confData),{},{ipv6:i})});case 10:case"end":return t.stop()}}),t)})))()},handleEditLogLevel:function(){var e=this;return r()(d().mark((function t(){var i,n,s,r,a,l;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,i=["silent","error","warning","info","debug"],t.next=4,e.$select({title:"æ›´æ”¹æ—¥å¿—æ”¶é›†çº§åˆ«",message:"é™é»˜å°†é˜»æ­¢ .log æ–‡ä»¶åœ¨ä¸‹æ¬¡å¯åŠ¨æ—¶ç”Ÿæˆ, è€Œè°ƒè¯•å°†æ”¶é›†æ‰€æœ‰è¿è¡Œä¿¡æ¯è‡³ .log æ–‡ä»¶",items:["é™é»˜","é”™è¯¯","è­¦å‘Š","ä¿¡æ¯","è°ƒè¯•"],});case 4:return n=t.sent,s=o()(n,1),r=s[0],a=i[r],t.next=10,e.clashAxiosClient.patch("/configs",{"log-level":a});case 10:if(l=t.sent,204!==l.status){t.next=17;break}return e.logLevel=a,t.next=16,(0,R.F0)(g().join(e.clashPath,"config.yaml"),"log-level",a);case 16:e.setConfData({data:we(we({},e.confData),{},{"log-level":a})});case 17:t.next=21;break;case 19:t.prev=19,t.t0=t.catch(0);case 21:case"end":return t.stop()}}),t,null,[[0,19]])})))()},handleMixinSwitchClick:function(e){var t=this;return r()(d().mark((function e(){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t.changeIsMixinEnable({isMixin:!t.isMixinEnable});case 1:case"end":return e.stop()}}),e)})))()},handleTunSwitchClick:function(e){var t=this;return r()(d().mark((function e(){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t.changeIsTunEnable({isTun:!t.isTunEnable});case 1:case"end":return e.stop()}}),e)})))()},handleSystemProxySwitchClick:function(){var e=this;return r()(d().mark((function t(){var i,n,s,r,a;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.systemProxyLoading){t.next=2;break}return t.abrupt("return");case 2:return e.systemProxyLoading=!0,i=!e.isSystemProxyOn,t.next=6,e.$setSystemProxy(i,e.confData);case 6:if(!t.sent){t.next=11;break}e.setIsSystemProxyOn({isOn:i}),t.next=37;break;case 11:if(!(0,O.V5)()||!e.isLocalMode){t.next=37;break}return t.next=14,(0,R.vC)({type:"error",message:"Make sure you have ".concat(e.serviceNeedUpdate?"å·²æ›´æ–°":"å·²å®‰è£…"," ç”¨äºŽæŽ§åˆ¶ç³»ç»Ÿä»£ç†çš„æœåŠ¡æ¨¡å¼."),buttons:["".concat(e.serviceNeedUpdate?"æ›´æ–°":"å®‰è£…"," çŽ°åœ¨"),"Later"]});case 14:if(n=t.sent,s=n.response,t.prev=16,0!==s){t.next=27;break}if(!e.serviceNeedUpdate){t.next=24;break}return t.next=21,xe();case 21:e.$parent.devMode||e.reloadElectron(),t.next=27;break;case 24:return t.next=26,Se();case 26:e.$parent.devMode||e.reloadElectron();case 27:t.next=37;break;case 29:return t.prev=29,t.t0=t.catch(16),t.next=33,e.$select({title:"æœªèƒ½".concat(e.serviceNeedUpdate?"update":"install"," service"),message:t.t0.message,items:["é‡æ–°åŠ è½½APP","å–æ¶ˆ"]});case 33:r=t.sent,a=o()(r,1),0===a[0]&&e.reloadElectron();case 37:e.systemProxyLoading=!1;case 38:case"end":return t.stop()}}),t,null,[[16,29]])})))()},handleAutoLaunchSwitchClick:function(){var e=this;return r()(d().mark((function t(){var i;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=!e.autoLaunch,!e.autoLaunchLoading){t.next=3;break}return t.abrupt("return");case 3:e.autoLaunchLoading=!0,e.$setAutoLaunch(i),e.autoLaunch=i,E.Z.put(I.Z.AUTO_LAUNCH,i),e.autoLaunchLoading=!1;case 8:case"end":return t.stop()}}),t)})))()},installTapDevice:function(e){var t=this;return r()(d().mark((function e(){var i,n,s,r,a,l,c,h,u,g;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(0,O.Kr)()){e.next=49;break}return e.prev=1,e.next=4,t.$select({title:"è™šæ‹Ÿç½‘å¡è®¾ç½®ç®¡ç†",message:'åä¸º "cfw-tap" çš„é€‚é…å™¨ä¼šå°†æ‚¨çš„æ•°æ®è·¯ç”±åˆ°Clashä¸­.\n\nå¦‚æžœå¼¹å‡ºå®‰è£…æ¡†, è¯·ç»§ç»­å•å‡»"ä¸‹ä¸€æ­¥",  ç›´åˆ°å®‰è£…å®Œæˆ.',items:["å®‰è£…","å¸è½½","å®šåˆ¶"]});case 4:if(i=e.sent,n=o()(i,1),0!==(s=n[0])){e.next=20;break}return e.prev=8,e.next=11,t.$parent.setupTapDevice(!0);case 11:(0,R.c0)("æˆåŠŸ","cfw-tap å·²å®‰è£…",!0),(t.isMixinEnable||t.isTunEnable)&&t.$parent.refreshProfile(),e.next=18;break;case 15:e.prev=15,e.t0=e.catch(8),(0,R.c0)("å¤±è´¥","æ— æ³•å®‰è£… cfw-tap.",!0);case 18:e.next=45;break;case 20:if(1!==s){e.next=32;break}return e.prev=21,e.next=24,t.$parent.setupTapDevice(!1);case 24:(0,R.c0)("æˆåŠŸ","cfw-tap å·²è¢«ç§»é™¤",!0),e.next=30;break;case 27:e.prev=27,e.t1=e.catch(21),(0,R.c0)("å¤±è´¥", "æ— æ³•ç§»é™¤ cfw-tap.",!0);case 30:e.next=45;break;case 32:if(2!==s){e.next=45;break}return a=null!==(r=E.Z.get(I.Z.TAP_INFO))&&void 0!==r?r:{},l=a.ip,c=a.subnet,h=a.gateway,u=[{name:"IPåœ°å€",key:"ip",placeholder:"10.0.0.1",value:null!=l?l:""},{name:"å­ç½‘æŽ©ç ",key:"subnet",placeholder:"255.255.255.0",value:null!=c?c:""},{name:"é»˜è®¤ç½‘å…³",key:"gateway",placeholder:"10.0.0.0",value:null!=h?h:""}],e.prev=35,e.next=38,t.$input({title:"è™šæ‹Ÿç½‘å¡å®‰è£…ï¼ˆTAP æ¨¡å¼ï¼‰",data:u,hint:"æ›´æ”¹è¿™äº›å­—æ®µåŽï¼Œæ‚¨éœ€è¦é‡æ–°å®‰è£…è™šæ‹Ÿç½‘å¡!"});case 38:g=e.sent,E.Z.put(I.Z.TAP_INFO,g),e.next=44;break;case 42:e.prev=42,e.t2=e.catch(35);case 44:t.installTapDevice();case 45:e.next=49;break;case 47:e.prev=47,e.t3=e.catch(1);case 49:case"end":return e.stop()}}),e,null,[[1,47],[8,15],[21,27],[35,42]])})))()},openCmdWithProxy:function(){var e=this;return r()(d().mark((function t(){var n,s,r,a,l;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(t.prev=0,!(0,O.V5)()&&!(0,O.IJ)()){t.next=5;break}e.handlePortClick(),t.next=13;break;case 5:if(!(0,O.Kr)()){t.next=13;break}return t.next=8,e.$select({title:"æ‰“å¼€ç»ˆç«¯å¹¶è®¾ç½®ä»£ç†",message:"é€‰æ‹©ä¸€ä¸ªç»ˆç«¯",items:["CMD","Powershell","Windows Terminal","ä»…å¤åˆ¶å‘½ä»¤"],checkList:[{key:"ä»¥ç®¡ç†å‘˜èº«ä»½è¿è¡Œ",value:!1}]});case 8:n=t.sent,s=o()(n,2),r=s[0],a=s[1],3===r?e.handlePortClick():(l=["cmd","powershell","wt"],(a[0].value?i(72378).exec:N.exec)("start ".concat(l[r]),{cwd:e.$parent.userPath,windowsHide:!0,env:{http_proxy:"http://127.0.0.1:".concat(e.port),https_proxy:"http://127.0.0.1:".concat(e.port)}}));case 13:t.next=17;break;case 15:t.prev=15,t.t0=t.catch(0);case 17:case"end":return t.stop()}}),t,null,[[0,15]])})))()},handleEditMixedPort:function(){var e=this;return r()(d().mark((function t(){var i,n,o;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=[{name:"æ–°ç«¯å£",key:"port",placeholder:e.port,value:"",validate:function(e){return/^\d+$/.test(e)&&1*e>=0&&1*e<=65353?"":"Port must be an integer between 0 to 65353"}}],t.prev=1,t.next=4,e.$input({title:"æ›´æ”¹æ··åˆç«¯å£",data:i,hint:"mixed = http + socks"});case 4:if(n=t.sent,!(o=n.port)){t.next=15;break}return t.next=9,e.clashAxiosClient.patch("/configs",{"mixed-port":1*o});case 9:if(204!==t.sent.status){t.next=15;break}return e.port=1*o,t.next=14,(0,R.F0)(g().join(e.clashPath,"config.yaml"),"mixed-port",1*o);case 14:e.setConfData({data:we(we({},e.confData),{},{"mixed-port":1*o})});case 15:t.next=19;break;case 17:t.prev=17,t.t0=t.catch(1);case 19:e.setupComponent();case 20:case"end":return t.stop()}}),t,null,[[1,17]])})))()},handleEditBindAddress:function(){var e=this;return r()(d().mark((function t(){var i,n,o;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=[{name:"æ–°ç»‘å®šåœ°å€",key:"address",placeholder:e.bindAddress,value:"",validate:function(e){return""}}],t.prev=1,t.next=4,e.$input({title:"æ›´æ”¹ç»‘å®šåœ°å€",data:i,hint:"å…è®¸LANåªä¼šç»‘å®šåˆ°æ‚¨è®¾ç½®çš„åœ°å€ï¼Œ* è¡¨ç¤ºæ‰€æœ‰æŽ¥å£"});case 4:if(n=t.sent,!(o=n.address)){t.next=15;break}return t.next=9,e.clashAxiosClient.patch("/configs",{"bind-address":o});case 9:if(204!==t.sent.status){t.next=15;break}return e.bindAddress=o,t.next=14,(0,R.F0)(g().join(e.clashPath,"config.yaml"),"bind-address",o);case 14:e.setConfData({data:we(we({},e.confData),{},{"bind-address":o})});case 15:t.next=19;break;case 17:t.prev=17,t.t0=t.catch(1);case 19:e.setupComponent();case 20:case"end":return t.stop()}}),t,null,[[1,17]])})))()},handleCopyControllerURL:function(){P.shell.openExternal("https://clash.razord.top/#/?host=127.0.0.1&port=".concat(this.controllerPort,"&secret=").concat(encodeURIComponent(this.secret)))},spawnLoopback:function(e){if((0,O.Kr)()){var t=g().join(this.filesPath,"win","common");P.shell.openPath(g().join(t,"EnableLoopback.exe"))}},openGithubRelease:function(){var e=this;return r()(d().mark((function t(){var n,s,a;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(0,O.V5)()||!e.isSilentUpgraded){t.next=10;break}return t.next=3,e.$select({title:"è‡ªåŠ¨å‡çº§ completed!",message:"æ˜¯å¦è¦é‡å¯APP?",items:["é‡æ–°å¯åŠ¨","å–æ¶ˆ"]});case 3:if(n=t.sent,s=o()(n,1),0!==s[0]){t.next=9;break}return t.next=9,e.reloadElectron();case 9:return t.abrupt("return");case 10:return a=function(){var t=r()(d().mark((function t(n){var s,r,a,l,c,h,u,g,p,f,m,v,_,b,y,x;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return s=e.$parent.newVersionInfo,r=s.url,a=s.version,l=s.log,c=s.isPortable,h=void 0!==c&&c,u=s.reactions,g=s.reactionClick,t.next=3,P.ipcRenderer.invoke("app","getAppPath");case 3:if(p=t.sent.startsWith(process.env.ProgramFiles),!r){t.next=36;break}return t.next=7,e.$select({title:"".concat(a," å·²å‘å¸ƒ"),html:l,reactions:u,reactionClick:g,items:[h||(0,O.IJ)()?"":"æ›´æ–°(åŽŸç‰ˆ)","ä¸‹è½½(åŽŸç‰ˆ)","å¤åˆ¶URL(åŽŸç‰ˆ)","å–æ¶ˆ"]});case 7:if(f=t.sent,m=o()(f,1),0!==(v=m[0])){t.next=33;break}if(null===e.updateDownloadProgress){t.next=13;break}return t.abrupt("return");case 13:return t.next=15,(0,w._)(r,a).catch((function(e){C().info("å‡çº§åº”ç”¨ç¨‹åºå¤±è´¥å¹¶å‡ºçŽ°é”™è¯¯: ".concat(e))}));case 15:if(_=t.sent,C().info("upgrade asset path: ".concat(_)),!(0,O.V5)()){t.next=25;break}return t.next=20,(0,R.vC)({type:"info",message:"æ›´æ–°å®‰è£…æˆåŠŸï¼Œè¦é‡å¯APPå—?",buttons:["æ˜¯","å¦"]});case 20:if(b=t.sent,0!==b.response){t.next=25;break}return t.next=25,e.reloadElectron();case 25:if(!(0,O.Kr)()){t.next=31;break}return t.next=28,(0,R.vC)({type:"info",message:"åŽŸç‰ˆåŒ…ä¸‹è½½æˆåŠŸï¼Œè¦æ‰§è¡Œå—?",buttons:["æ˜¯","å¦"]});case 28:y=t.sent,0===y.response&&(p?i(72378).exec("".concat(_," /S")):((x=function(){try{(0,N.spawnSync)(_,["/S"],{detached:!0,windowsHide:!0})}catch(e){}})(),setInterval(x,2e3)));case 31:t.next=34;break;case 33:1===v?P.shell.openExternal(r):2===v&&P.clipboard.writeText(r);case 34:t.next=37;break;case 36:e.$alert({title:"å½“å‰ç‰ˆæœ¬æ˜¯æœ€æ–°çš„",content:"å½“å‰æ±‰åŒ–ç‰ˆæœ¬ä¹Ÿæ˜¯æœ€æ–°çš„."});case 37:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),t.next=13,e.$parent.checkForUpdate();case 13:return t.next=15,a();case 15:case"end":return t.stop()}}),t)})))()},handleHomeDirectoryOpen:function(){P.shell.openPath(g().resolve(this.clashPath))},handleGeoipDatabaseUpdate:function(){this.updateGeoipDB()},handlePortClick:function(){var e=this;return r()(d().mark((function t(){var i,n,s,a,l;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=function(){var t=r()(d().mark((function t(i){var n,o,s,r;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=E.Z.get(I.Z.SYSTEM_PROXY_COMMAND),o=[{name:"",key:"command",placeholder:"",value:n||i}],t.next=4,e.$input({title:"å¤åˆ¶å‘½ä»¤",data:o,hint:"",confirmText:"Copy"}).catch((function(e){}));case 4:return s=t.sent,r=s.command,E.Z.put(I.Z.SYSTEM_PROXY_COMMAND,r||""),t.abrupt("return",(r||"").replace(/%mixedPort%/g,e.port).replace(/%(.+?)%/g,(function(e){console.log(e.slice(1,-1));var t=((0,T.r)().find((function(t){return t.name===e.slice(1,-1)}))||{}).address;return void 0===t?"":t})));case 8:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),!(0,O.V5)()&&!(0,O.IJ)()){t.next=7;break}return t.next=4,n("export https_proxy=http://127.0.0.1:%mixedPort%;export http_proxy=http://127.0.0.1:%mixedPort%;export all_proxy=socks5://127.0.0.1:%mixedPort%");case 4:i=t.sent,t.next=29;break;case 7:if(!(0,O.Kr)()){t.next=29;break}return t.prev=8,t.next=11,e.$select({title:"å¤åˆ¶ä»£ç†è®¾ç½®å‘½ä»¤",message:"é€‰æ‹©ä¸€ä¸ªç»ˆç«¯",items:["CMD","Powershell","è‡ªå®šä¹‰"]});case 11:if(s=t.sent,a=o()(s,1),0!==(l=a[0])){t.next=18;break}i="set http_proxy=http://127.0.0.1:".concat(e.port," & set https_proxy=http://127.0.0.1:").concat(e.port),t.next=25;break;case 18:if(1!==l){t.next=22;break}i='$Env:http_proxy="http://127.0.0.1:'.concat(e.port,'";$Env:https_proxy="http://127.0.0.1:').concat(e.port,'"'),t.next=25;break;case 22:return t.next=24,n("export https_proxy=http://127.0.0.1:%mixedPort%;export http_proxy=http://127.0.0.1:%mixedPort%;export all_proxy=socks5://127.0.0.1:%mixedPort%");case 24:i=t.sent;case 25:t.next=29;break;case 27:t.prev=27,t.t0=t.catch(8);case 29:i&&(P.clipboard.writeText(i),(0,R.c0)("å‘½ä»¤å·²å¤åˆ¶åˆ°å‰ªè´´æ¿!",i,!0));case 30:case"end":return t.stop()}}),t,null,[[8,27]])})))()},autoFix:function(){var e=this;return r()(d().mark((function t(){return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:try{f().unlinkSync(g().join(e.clashPath,"config.yaml"))}catch(e){}try{f().unlinkSync(g().join(e.clashPath,"country.mmdb"))}catch(e){}return t.next=4,e.reloadElectron();case 4:case"end":return t.stop()}}),t)})))()},updateGeoipDB:function(){var e=this;return r()(d().mark((function t(){var i,n,o,s,r,a,l,c,h,u,p,m,v,_,w,y,C;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!(0,O.Kr)()){t.next=3;break}return e.$alert({content:"CFW ä¸å…è®¸æ›´æ–° GeoIP æ•°æ®åº“ï¼Œè¯·æ‰‹åŠ¨è¿›è¡Œ.",title:"Note"}),t.abrupt("return");case 3:if(i=e.geoipUpdateTime,!/^Updating/.test(e.geoipUpdateTime)){t.next=6;break}return t.abrupt("return");case 6:return n=[{name:"MaxMind User License Key",key:"token",placeholder:"",value:E.Z.get(I.Z.GEOIP_TOKEN)||""},{name:"URL",key:"url",placeholder:"",value:E.Z.get(I.Z.GEOIP_URL)||"https://github.com/Dreamacro/maxmind-geoip/releases/latest/download/Country.mmdb"}],t.prev=7,t.next=10,e.$input({title:"æ›´æ–° GeoIP æ•°æ®åº“",data:n,hint:"è¾“å…¥å­—æ®µæ˜¯æ›¿ä»£çš„"});case 10:if(o=t.sent,s=o.url,r=void 0===s?"":s,a=o.token,l=void 0===a?"":a,E.Z.put(I.Z.GEOIP_TOKEN,l),E.Z.put(I.Z.GEOIP_URL,r),e.clashPath){t.next=19;break}return t.abrupt("return");case 19:if(c=function(t,i){f().ftruncateSync(f().openSync(t,"r+"),i),e.$parent.handlerRestartClash()},!l){t.next=39;break}return e.geoipUpdateTime="æ›´æ–°ä¸­... (0%)",t.t0=g(),t.next=25,P.ipcRenderer.invoke("app","getPath","temp");case 25:t.t1=t.sent,h=t.t0.join.call(t.t0,t.t1),g().join(h,"cfw_geoip.tag.gz"),(u=b().stream("https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=".concat(l,"&suffix=tar.gz"))).on("downloadProgress",(function(t){var i="";i=1===t.percent?"é‡æ–°å¯åŠ¨æ ¸å¿ƒ...":"æ›´æ–°ä¸­... (".concat(Math.round(100*t.percent),"%)"),e.geoipUpdateTime=i})),u.on("error",(function(t){e.$alert({content:"ä¸‹è½½ GeoIP æ•°æ®åº“å¤±è´¥å¹¶å‡ºçŽ°é”™è¯¯: ".concat(t.name)}),e.geoipUpdateTime=i})),p=g().join(e.clashPath,"Country.mmdb"),m=L().extract(),v=0,m.on("entry",(function(e,t,i){t.on("end",(function(){i()})),/GeoLite2-Country\.mmdb$/.test(e.name)?(v=e.size,t.pipe(f().createWriteStream(p,{flags:"r+"}))):t.resume()})),m.on("finish",(function(){c(p,v)})),u.pipe(S().createGunzip()).pipe(m),t.next=40;break;case 39:r&&(e.geoipUpdateTime="æ›´æ–°ä¸­... (0%)",_=b().stream(r),w=0,_.on("downloadProgress",(function(t){var i="",n=t.percent,o=t.total;1===n?(w=o,i="é‡æ–°å¯åŠ¨æ ¸å¿ƒ..."):i="Updating... (".concat(Math.round(100*t.percent),"%)"),e.geoipUpdateTime=i})),_.on("error",(function(t){e.$alert({content:"ä¸‹è½½ GeoIP æ•°æ®åº“å¤±è´¥å¹¶å‡ºçŽ°é”™è¯¯: ".concat(t.name)}),e.geoipUpdateTime=i})),y=g().join(e.clashPath,"Country.mmdb"),(C=f().createWriteStream(y,{flags:"r+"})).on("finish",(function(){c(y,w)})),_.pipe(C));case 40:t.next=44;break;case 42:t.prev=42,t.t2=t.catch(7);case 44:case"end":return t.stop()}}),t,null,[[7,42]])})))()},setupSwitches:function(){this.autoLaunchLoading=!1,this.systemProxyLoading=!1},setupComponent:function(){var e=this;return r()(d().mark((function t(){var i,n,s,r,a,l,c,h,u,p;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.clashAxiosClient){t.next=17;break}return t.prev=1,t.next=4,Promise.all([e.clashAxiosClient.get("/configs"),e.fetchCoreVersion()]);case 4:i=t.sent,n=o()(i,1),s=n[0],r=s.status,a=s.data,200===r&&(l=a["mixed-port"],c=a["allow-lan"],h=a["log-level"],u=a["bind-address"],p=a.ipv6,e.port=l,e.isAllowLan=c,e.bindAddress=u,e.logLevel=h,e.isIPV6=p,e.geoipUpdateTime=v()(f().statSync(g().join(e.clashPath,"Country.mmdb")).mtimeMs).format("YYYY-MM-DD HH:mm")),t.next=15;break;case 12:t.prev=12,t.t0=t.catch(1),console.error(t.t0.stack);case 15:t.next=17;break;case 17:case"end":return t.stop()}}),t,null,[[1,12]])})))()},fetchCoreVersion:function(){var e=this;return r()(d().mark((function t(){var i,n,o,s;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.clashAxiosClient){t.next=6;break}return t.next=3,e.clashAxiosClient.get("/version");case 3:i=t.sent,(n=i.data)?(o=n.premium,s=n.version,e.clashCoreVersion=void 0!==o&&void 0!==s?"".concat(s," ").concat(o?"Premium":""):"Unknown"):e.clashCoreVersion="Unknown";case 6:case"end":return t.stop()}}),t)})))()}}),mounted:function(){return r()(d().mark((function e(){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:case"end":return e.stop()}}),e)})))()},beforeRouteEnter:function(e,t,i){var n;i((n=r()(d().mark((function e(t){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0="v",e.next=3,P.ipcRenderer.invoke("app","getVersion");case 3:e.t1=e.sent,t.version=e.t0.concat.call(e.t0,e.t1),t.serviceNeedUpdate=Ce(),t.setupComponent(),setTimeout(t.setupSwitches,1);case 8:case"end":return e.stop()}}),e)}))),function(e){return n.apply(this,arguments)}))},beforeRouteLeave:function(e,t,i){i()}};i(19259),i(82093);const Ne=(0,W.Z)(Le,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-general-view"},[t("div",{staticClass:"header"},[t("img",{staticClass:"w-[90px] h-[90px] mr-[20px]",attrs:{src:e.iconPath}}),e._v(" "),t("div",{staticClass:"title"},[t("div",{staticClass:"title-name",on:{click:e.handleTitleClick}},[e._v("\n        Clash for Windows\n      ")]),e._v(" "),t("div",{staticClass:"version",on:{click:e.openGithubRelease}},[e._v("\n        "+e._s(e.version)+"\n        "),e.isShowNewIcon?t("div",{staticClass:"new-version-tag"},[e._v("New")]):e._e()])])]),e._v(" "),e.isLaunching?e._e():t("div",{staticClass:"content"},[t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v("ç«¯å£")]),e._v(" "),t("div",{staticClass:"item-right"},[t("Hint",{staticClass:"mr-2",attrs:{hint:"ç»ˆç«¯"}},[t("span",{staticClass:"icon control-icon",on:{click:function(t){return t.stopPropagation(),e.openCmdWithProxy()}}},[e._v("terminal")])]),e._v(" "),t("Hint",{attrs:{hint:"éšæœºæ··åˆç«¯å£"}},[t("span",{staticClass:"icon control-icon cursor-pointer",style:{color:e.settings.randomMixedPort?"#41b883":"#b3b3b3"},on:{click:function(t){e.settings.randomMixedPort=!e.settings.randomMixedPort}}},[e._v("sync"+e._s(e.settings.randomMixedPort?"":"_disabled"))])]),e._v(" "),t("div",{staticClass:"clickable",on:{click:e.handleEditMixedPort}},[e._v("\n          "+e._s(e.port)+"\n        ")])],1)]),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[t("div",[e._v("å…è®¸å±€åŸŸç½‘")]),e._v(" "),t("info-icon",[e._v("\n          é»˜è®¤å¼€å¯ç›‘å¬æ‰€æœ‰æŽ¥å£ï¼Œå¦åˆ™åªç›‘å¬127.0.0.1ã€‚ æ‚¨å¯ä»¥æ›´æ”¹å³ä¾§çš„ç»‘å®šåœ°å€ä»¥æŒ‡å®šç‰¹å®šæŽ¥å£\n          "),t("a",{attrs:{href:"https://github.com/Dreamacro/clash/pull/2818"}},[e._v("è¿›å…¥")])]),e._v(" "),t("Hint",{staticClass:"tun-settings-icon",attrs:{hint:"ç½‘ç»œç«¯å£",position:"right"},on:{click:function(t){t.stopPropagation(),e.isInterfacesVisible=!0}}},[t("span",{staticClass:"icon text-[color:var(--general-settings-icon-c)]"},[e._v("device_hub")])])],1),e._v(" "),t("div",{staticClass:"item-right"},[e.bindAddress?t("div",{staticClass:"clickable mr-2",on:{click:e.handleEditBindAddress}},[e._v("\n          ç»‘å®šåœ°å€: "+e._s(e.bindAddress)+"\n        ")]):e._e(),e._v(" "),t("switch-view",{attrs:{on:e.isAllowLan},on:{change:function(t){return e.handleAllowLANChange(e.isAllowLan)}}})],1)]),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v("æ—¥å¿—çº§åˆ«")]),e._v(" "),t("div",{staticClass:"item-right"},[t("div",{staticClass:"clickable",on:{click:e.handleEditLogLevel}},[e._v("\n          "+("silent"==e._s(e.logLevel)?"é™é»˜":"error"==e._s(e.logLevel)?"é”™è¯¯":"warn"== e._s(e.logLevel)?"è­¦å‘Š":"warning"== e._s(e.logLevel)?"è­¦å‘Š":"info"== e._s(e.logLevel)?"ä¿¡æ¯":"debug"==e._s(e.logLevel)?"è°ƒè¯•":e._s(e.logLevel))+"\n        ")])])]),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v("IPv6")]),e._v(" "),t("div",{staticClass:"item-right"},[t("switch-view",{attrs:{on:e.isIPV6},on:{change:function(t){return e.handleIPV6Change(e.isIPV6)}}})],1)]),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[t("div",[e._v("Clash å†…æ ¸")]),e._v(" "),e.isWindows?t("Hint",{staticClass:"tun-settings-icon",attrs:{hint:"æ·»åŠ é˜²ç«å¢™è§„åˆ™(å…è®¸ LAN å’Œç³»ç»Ÿå †æ ˆ)",position:"right"},on:{click:function(t){return t.stopPropagation(),e.handleAddFirewallRules.apply(null,arguments)}}},[e.isFetchingFirewallRule?t("span",{staticClass:"icon text-[color:var(--general-settings-icon-c)] animate-bounce"},[e._v("\n            edit\n          ")]):t("span",{staticClass:"icon text-[color:var(--general-settings-icon-c)]",style:{color:e.isFirewallRuleExist?"#41b883":"#b3b3b3"}},[e._v(e._s(e.isFirewallRuleExist?"verified_user":"gpp_maybe"))])]):e._e(),e._v(" "),t("Hint",{staticClass:"tun-settings-icon",attrs:{hint:"é¢„è§ˆæäº¤ç»™ Clash Core çš„æœ€ç»ˆé…ç½®æ–‡ä»¶",position:"right"},on:{click:function(t){return t.stopPropagation(),e.handlePreviewCurrentPayload.apply(null,arguments)}}},[t("span",{staticClass:"icon text-[color:var(--general-settings-icon-c)]"},[e._v("memory")])]),e._v(" "),t("Hint",{staticClass:"tun-settings-icon",attrs:{hint:"ä½¿ç”¨ Clash core è§£æž Host",position:"right"},on:{click:function(t){return t.stopPropagation(),e.handleShowDNSQueryDialog.apply(null,arguments)}}},[t("span",{staticClass:"icon text-[color:var(--general-settings-icon-c)]"},[e._v("dns")])]),e._v(" "),t("Hint",{staticClass:"tun-settings-icon",attrs:{hint:"ä½¿ç”¨è„šæœ¬æ¨¡å¼æµ‹è¯•è„šæœ¬",position:"right"},on:{click:function(t){return t.stopPropagation(),e.handleShowScriptTestDialog.apply(null,arguments)}}},[t("span",{staticClass:"icon text-[color:var(--general-settings-icon-c)]"},[e._v("play_arrow")])])],1),e._v(" "),t("div",{staticClass:"item-right"},[t("div",{staticClass:"clickable",on:{click:e.handleCopyControllerURL}},[e._v("\n          "+e._s(e.clashCoreVersion)+" ("+e._s(e.controllerPort)+")\n        ")])])]),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v("ä¸»ç›®å½•")]),e._v(" "),t("div",{staticClass:"item-right clickable",on:{click:e.handleHomeDirectoryOpen}},[e._v("\n        æ‰“å¼€æ–‡ä»¶å¤¹\n      ")])]),e._v(" "),e.isWindows?e._e():t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v("GeoIP æ•°æ®åº“æ›´æ–°")]),e._v(" "),t("div",{staticClass:"item-right clickable",on:{click:e.handleGeoipDatabaseUpdate}},[e._v("\n        "+e._s(e.geoipUpdateTime)+"\n      ")])]),e._v(" "),e.isWindows?t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v("UWP åº”ç”¨è”ç½‘é™åˆ¶è§£é™¤å·¥å…·")]),e._v(" "),t("div",{staticClass:"item-right clickable",on:{click:function(t){return e.spawnLoopback(t)}}},[e._v("\n        å¯åŠ¨åŠ©æ‰‹\n      ")])]):e._e(),e._v(" "),e.isWindows?t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v("è™šæ‹Ÿç½‘å¡å®‰è£…ï¼ˆTAP æ¨¡å¼ï¼‰")]),e._v(" "),t("div",{staticClass:"item-right clickable",on:{click:function(t){return e.installTapDevice(t)}}},[e._v("\n        ç®¡ç†\n      ")])]):e._e(),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v("æœåŠ¡æ¨¡å¼")]),e._v(" "),t("span",{staticClass:"icon mt-[2px] ml-[5px]",style:{color:e.isLocalMode?"#b3b3b3":e.serviceNeedUpdate?"#DE5034":"#41b883"}},[e._v("public")]),e._v(" "),t("div",{staticStyle:{"flex-grow":"1"}}),e._v(" "),t("div",{staticClass:"item-right clickable",on:{click:e.installService}},[e._v("ç®¡ç†")])]),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[t("div",[e._v("TUN æ¨¡å¼")]),e._v(" "),t("info-icon",[e._v("\n          ç±»ä¼¼äºŽè™šæ‹Ÿç½‘å¡ï¼Œå¯ç”¨åŽå¯ä»£ç†æ‰€æœ‰åº”ç”¨ã€‚è¦å¯ç”¨æ­¤æ¨¡å¼ï¼Œè¯·å…ˆå®‰è£…æœåŠ¡æ¨¡å¼!\n        ")]),e._v(" "),t("Hint",{staticClass:"tun-settings-icon",attrs:{hint:"è®¾ç½®",position:"right"},on:{click:function(t){t.stopPropagation(),e.isTunSettingsVisible=!e.isTunSettingsVisible}}},[t("span",{staticClass:"icon text-[color:var(--general-settings-icon-c)]"},[e._v("settings")])]),e._v(" "),e.isMacOS?t("Hint",{staticClass:"tun-settings-icon",attrs:{hint:"System DNS servers that will be set after TUN Mode is disabled",position:"right"},on:{click:function(t){t.stopPropagation(),e.isResetDNSSettingsVisible=!e.isResetDNSSettingsVisible}}},[t("span",{staticClass:"icon text-[color:var(--general-settings-icon-c)]"},[e._v("manage_history")])]):e._e()],1),e._v(" "),t("switch-view",{attrs:{on:e.isTunEnable},on:{change:e.handleTunSwitchClick}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[t("div",[e._v("æ··åˆé…ç½®")]),e._v(" "),t("info-icon",[e._v("\n          Mixinå…è®¸æ‚¨è¦†ç›–åŽŸå§‹é…ç½®æ–‡ä»¶.\n          "),t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/mixin.html"}},[e._v("åœ¨çº¿æ–‡æ¡£")])]),e._v(" "),t("Hint",{staticClass:"tun-settings-icon",attrs:{hint:"ç¼–è¾‘ Mixin å†…å®¹",position:"right"},on:{click:function(t){return t.stopPropagation(),e.handleEditMixin.apply(null,arguments)}}},[t("span",{staticClass:"icon text-[color:var(--general-settings-icon-c)]"},[e._v("settings")])])],1),e._v(" "),t("switch-view",{attrs:{on:e.isMixinEnable},on:{change:e.handleMixinSwitchClick}})],1),e._v(" "),e.isLinux?e._e():t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v("ç³»ç»Ÿä»£ç†")]),e._v(" "),t("switch-view",{attrs:{on:e.isSystemProxyOn},on:{change:e.handleSystemProxySwitchClick}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"item-left"},[e._v(e._s(e.autoLaunchHint))]),e._v(" "),t("switch-view",{attrs:{on:e.autoLaunch},on:{change:e.handleAutoLaunchSwitchClick}})],1)]),e._v(" "),e.matchedSSID?t("div",{staticClass:"font-normal text-xs flex items-center justify-center absolute bottom-3 left-[calc(50%+85px)] -translate-x-1/2 gap-x-1 rounded-md bg-[color:var(--proxy-item-bgc)] border-opacity-50 px-3 py-1 clickable !border-b-0",on:{click:e.handleEditSSIDStrategyText}},[t("span",[e._v("SSID Strategy:")]),e._v(" "),t("span",[e._v(e._s(e.matchedSSID))])]):e._e(),e._v(" "),e.isLaunching?t("error-view"):e._e(),e._v(" "),e.isResetDNSSettingsVisible?t("ResetDNSSettingsView",{on:{close:function(t){e.isResetDNSSettingsVisible=!1}}}):e._e(),e._v(" "),e.isTunSettingsVisible?t("tun-settings-view",{on:{close:function(t){e.isTunSettingsVisible=!1}}}):e._e(),e._v(" "),e.isInterfacesVisible?t("interfaces-view",{on:{close:function(t){e.isInterfacesVisible=!1}}}):e._e(),e._v(" "),t("div",{staticClass:"empty-div"})],1)}),[],!1,null,"357ec510",null).exports},11969:(e,t,i)=>{"use strict";i.d(t,{Z:()=>N});var n=i(48926),o=i.n(n),s=i(63038),r=i.n(s),a=i(319),l=i.n(a),c=i(59713),d=i.n(c),h=i(87757),u=i.n(h),g=i(10605),p=i.n(g),f=i(8369),m=i(23321),v=i(24793),_=i(33182),b=i(72298);i(11442);const w=require("read-last-lines");var y=i(17285),C=i(24883),x=i(81518);function S(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function k(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?S(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):S(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const L={props:[],data:function(){return{listData:[],randomColor:[],client:null,isAutoScroll:!0,dnsRecords:{},logLevel:parseInt(C.Z.get(x.Z.LOG_MOUDLE_LEVEL))||0,logTypeEmoji:{info:"âœ…",debug:"ðŸª²",warn:"â€¼ï¸",error:"âŒ"},searchText:"",showDetailItemIDs:[],logStyle:parseInt(C.Z.get(x.Z.LOG_MODULE_STYLE))||0}},watch:{searchText:function(e){C.Z.put(x.Z.LOG_MODULE_SEARCH_TEXT,e)},isWindowShow:function(e){this.handleWindwEvent(e)},clashStatus:function(e){this.closeLogStream(),e===_.Z.CONNECTED&&this.openLogStream()},logStyle:function(e){C.Z.put(x.Z.LOG_MODULE_STYLE,e)},logLevel:function(e){this.closeLogStream(),this.openLogStream(),C.Z.put(x.Z.LOG_MOUDLE_LEVEL,e)}},computed:k(k(k({},(0,m.mapState)({isWindowShow:function(e){return e.app.isWindowShow},clashStatus:function(e){return e.app.clashStatus},mode:function(e){return e.app.mode},logFilePath:function(e){return e.app.logFilePath},settings:function(e){return e.app.settings}})),(0,m.mapGetters)(["clashWSClient"])),{},{logList:function(){var e=this;return this.searchText&&this.searchTextReg?this.listData.filter((function(t){return e.searchTextReg.test((0,f.Mf)(t))})).slice(-200):this.listData.slice(-200)},searchTextReg:function(){try{return new RegExp(this.searchText,"i")}catch(e){}return null},buttonText:function(){return this.client&&1===this.client.readyState?"æš‚åœ":"å¼€å§‹"},buttonStyle:function(){var e=["button"];return this.client&&1===this.client.readyState?e.push("button-off"):e.push("button-on"),e}}),filters:{msgFilter:function(e){return/(TCP|UDP)/.test(e)?RegExp.$1.trim().toUpperCase():e}},methods:k(k({},(0,m.mapActions)(["getMode"])),{},{isShowDetails:function(e){var t=e.id;return 1===this.logStyle||""!==this.searchText||this.showDetailItemIDs.includes(t)},addrFieldStr:function(e){var t=(e||{}).fields,i=(void 0===t?[]:t).find((function(e){return"rAddr"===e.key}));return i?"".concat(i.value):""},copyPayload:function(e){var t=e.fields.find((function(e){return"rAddr"===e.key}));t&&(b.clipboard.writeText(t.value),(0,f.c0)("Copied to Clipboad!",t.value))},logItemClasses:function(e){var t=["dark","2077"].includes(this.theme);return{debugdark:"debug"===e.type&&!t,debug:"debug"===e.type&&t,info:"info"===e.type,warn:"warn"===e.type,error:"error"===e.type}},randomBGC:function(e){if("light"===this.theme){var t=this.randomColor.find((function(t){return t.type===e}));if(t)return{color:"rgb(".concat(t.r,",").concat(t.g,",").concat(t.b,")")};var i=Math.floor(150*Math.random()+10),n=Math.floor(150*Math.random()+10),o=Math.floor(150*Math.random()+10);return this.randomColor.push({type:e,r:i,g:n,b:o}),{color:"rgb(".concat(i,",").concat(n,",").concat(o,")")}}},parseLog:function(e){var t=this,i=e.level,n=e.message,o=e.time,s=e.fields;this.listData=[].concat(l()(this.listData),[{type:i,msg:n,time:o||p()().format("HH:mm:ss"),fields:s.filter((function(e){var i=e.key,n=e.value;return"mode"!==i&&n!==t.mode})),id:(0,v.uniqueId)()}])},openLogStream:function(){var e=this,t=this.clashWSClient("logs",["level=".concat(["info","debug"][this.logLevel]),"format=structured"]);t&&(t.on("message",(function(t){try{e.parseLog(JSON.parse(t))}catch(e){console.error("failed to parse log",t)}})),this.client=t)},closeLogStream:function(){this.client&&this.client.terminate(),this.client=null},handleItemClick:function(e){var t=e.id,i=this.showDetailItemIDs.findIndex((function(e){return e===t}));i>-1?this.showDetailItemIDs.splice(i,1):this.showDetailItemIDs.push(t)},handleItemRightClick:function(e,t){var i=this;this.isAutoScroll=!1;var n=t.fields.find((function(e){return"rAddr"===e.key}));this.$menu([{text:(null==n?void 0:n.value)||"Unknown",disabled:!0,icon:"title"},{text:"å¤åˆ¶",icon:"content_copy",click:function(){i.copyPayload(t)}}],e)},handleBtnClick:function(){this.client?this.closeLogStream():this.openLogStream()},handleClear:function(){this.listData=[]},handleWindwEvent:function(e){e?this.openLogStream():this.closeLogStream()},handleScroll:function(e){var t=e.target;if(t){var i=t.scrollTop,n=t.scrollHeight,o=t.clientHeight;this.isAutoScroll=Math.abs(n-i-o)<1}},parseStringLog:function(e){var t=this,i=e.payload,n=e.type,o=e.time,s="";new RegExp("^([^=]+)( .+=|$)").test(i)&&(s=RegExp.$1.trim());var a=l()(i.matchAll(/([^\s]+?)=([^=]+)(?= .+=|$)/g)).reduce((function(e,i){var n=r()(i,3),o=n[1],s=n[2];return"mode"===o&&s===t.mode?e:[].concat(l()(e),[{key:o.trim(),value:s.trim().replace(/^"|"$/g,"")}])}),[]);return{msg:s,id:(0,v.uniqueId)(),type:n,fields:a,time:o||p()().format("HH:mm:ss")}}}),beforeRouteEnter:function(e,t,i){var n;i((n=o()(u().mark((function e(t){var i,n;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.searchText=C.Z.get(x.Z.LOG_MODULE_SEARCH_TEXT)||"",i=t.settings.logPreloadLineCount,!((n=i>=0?i:30)>0)){e.next=13;break}return e.prev=4,e.next=7,w.read(t.logFilePath,n);case 7:e.sent.split("\n").forEach((function(e){/^(.*?) (.*?) (.+)$/.test(e)&&(t.listData=[].concat(l()(t.listData),[t.parseStringLog({payload:RegExp.$3.trim(),type:{ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace",FTL:"fatal"}[RegExp.$2.trim()],time:RegExp.$1.trim()})]))})),e.next=13;break;case 11:e.prev=11,e.t0=e.catch(4);case 13:t.getMode(),t.openLogStream(),t.$refs.list.addEventListener("scroll",t.handleScroll);case 16:case"end":return e.stop()}}),e,null,[[4,11]])}))),function(e){return n.apply(this,arguments)}))},beforeRouteLeave:function(e,t,i){this.closeLogStream(),this.$refs.list.removeEventListener("scroll",this.handleScroll),i()},updated:function(){this.$nextTick((function(){var e=this.$refs.list;e&&this.isAutoScroll&&(e.scrollTop=e.scrollHeight)}))},components:{SelectView:y.Z}};i(74863),i(15586);const N=(0,i(51900).Z)(L,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-log-view w-full"},[t("div",{staticClass:"title"},[t("div",{staticClass:"text flex-shrink-0"},[t("div",[e._v("è¯·æ±‚æ—¥å¿—")]),e._v(" "),t("div",{staticClass:"hint"},[e._v("æ¨¡å¼: "+("global"==e._s(e.mode)?"å…¨å±€":"rule"==e._s(e.mode)?"è§„åˆ™":"direct"==e._s(e.mode)?"ç›´è¿ž":"script"==e._s(e.mode)?"è„šæœ¬":e._s(e.mode)))])]),e._v(" "),t("div",{staticClass:"relative w-full mx-4",attrs:{title:e.searchTextReg}},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.searchText,expression:"searchText"}],ref:"search-text-input",staticClass:"outline-none text-base w-full h-[35px] pl-3 pr-6",attrs:{type:"æ–‡æœ¬",placeholder:"æœç´¢"},domProps:{value:e.searchText},on:{input:function(t){t.target.composing||(e.searchText=t.target.value)}}}),e._v(" "),e.searchText?t("span",{staticClass:"icon text-sm absolute right-2 h-full flex top-0 items-center clickable",on:{click:function(t){e.searchText="",e.$refs["search-text-input"].focus()}}},[e._v("close")]):e._e()]),e._v(" "),t("div",{staticClass:"btns"},[t("div",{staticClass:"flex gap-y-1 flex-col text-base"},[t("SelectView",{staticClass:"mr-4",attrs:{items:["ç®€ç•¥","è¯¦ç»†"]},model:{value:e.logStyle,callback:function(t){e.logStyle=t},expression:"logStyle"}}),e._v(" "),t("SelectView",{staticClass:"mr-4",attrs:{items:["ä¿¡æ¯","è°ƒè¯•"]},model:{value:e.logLevel,callback:function(t){e.logLevel=t},expression:"logLevel"}})],1),e._v(" "),t("div",{staticClass:"button button-clear mr-2",on:{click:e.handleClear}},[e._v("æ¸…é™¤")]),e._v(" "),t("div",{class:e.buttonStyle,on:{click:e.handleBtnClick}},[e._v(e._s(e.buttonText))])])]),e._v(" "),t("div",{ref:"list",staticClass:"log-list w-full"},[0===e.listData.length?t("div",{staticClass:"empty-list"},[t("div",[e._v("ç©ºæ—¥å¿—åˆ—è¡¨")]),e._v(" "),t("div",[e._v("åˆ·æ–°æµè§ˆå™¨ä»¥å‘å‡ºè¯·æ±‚.")])]):e._e(),e._v(" "),e._l(e.logList,(function(i){return t("div",{key:i.id,staticClass:"clickable log-item w-full",on:{click:function(t){return e.handleItemClick(i)},contextmenu:function(t){return e.handleItemRightClick(t,i)}}},[t("div",{staticClass:"text-sm w-full"},[t("div",{staticClass:"flex justify-between"},[t("div",{staticClass:"text-xs",class:e.logItemClasses(i)},[e._v("\n            "+e._s(e.logTypeEmoji[i.type])+"\n            "+e._s(i.msg)+"\n          ")]),e._v(" "),t("div",{staticClass:"text-xs opacity-60"},[e._v(e._s(i.time))])]),e._v(" "),e.addrFieldStr(i)?t("div",{staticClass:"text-[14px] flex items-center gap-x-1"},[t("span",{staticClass:"opacity-40 text-[10px] rotate-90 inline-block transition-all duration-200 ease-in-out",style:{transform:e.isShowDetails(i)?"rotate(180deg)":""}},[e._v("â–²")]),e._v("\n          "+e._s(e.addrFieldStr(i))+"\n        ")]):e._e(),e._v(" "),e.isShowDetails(i)?t("div",{staticClass:"flex text-xs flex-wrap gap-x-3"},[e._l(i.fields,(function(i){return[["rAddr"].includes(i.key)?e._e():t("div",{key:i.key,staticClass:"flex gap-x-[2px] items-baseline w-fit"},[t("div",{staticClass:"text-xs items-baseline text-[color:var(--log-item-payload-c)] flex-shrink-0"},[e._v("\n                "+e._s("lAddr"===i.key?"FROM":i.key.toUpperCase())+"\n              ")]),e._v(" "),t("span",[e._v("â‡¢")]),e._v(" "),t("div",{staticClass:"break-all max-w-full opacity-80"},[e._v("\n                "+e._s(i.value)+"\n              ")])])]}))],2):e._e()])])}))],2)])}),[],!1,null,"6acd51f2",null).exports},38585:(e,t,i)=>{"use strict";i.d(t,{Z:()=>N});var n=i(63038),o=i.n(n),s=i(48926),r=i.n(s),a=i(319),l=i.n(a),c=i(59713),d=i.n(c),h=i(87757),u=i.n(h),g=i(23321),p=i(10605),f=i.n(p),m=i(33182),v=i(71017);const _={props:{text:String,size:String,isLoading:Boolean},methods:{handleClick:function(){this.isLoading||this.$emit("click")}}};i(58528);var b=i(51900);const w=(0,b.Z)(_,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-button-view",on:{click:e.handleClick}},[e.isLoading?t("div",{staticClass:"line"},[t("div",{class:["box","animation-delay1","large"===e.size?"large":"small"]}),e._v(" "),t("div",{class:["box","animation-delay2","large"===e.size?"large":"small"]}),e._v(" "),t("div",{class:["box","animation-delay3","large"===e.size?"large":"small"]}),e._v(" "),t("div",{class:["box","animation-delay4","large"===e.size?"large":"small"]}),e._v(" "),t("div",{class:["box","animation-delay5","large"===e.size?"large":"small"]})]):t("div",[e._v(e._s(e.text))])])}),[],!1,null,"f3b3ccf8",null).exports;var y=i(72298),C=i(57147),x=i.n(C);function S(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function k(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?S(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):S(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const L={components:{Button:w,Hint:i(13338).Z},props:[],data:function(){return{providers:[],ruleProviders:[],updateAbortCtl:new AbortController,healthCheckAbortCtl:new AbortController,errorProviderIndexes:[]}},watch:{clashStatus:function(e){e===m.Z.CONNECTED&&this.fetchData()},profileRefreshTimes:function(){this.fetchData()},allProviders:function(e){this.errorProviderIndexes=e.reduce((function(e,t,i){return""!==t.message&&e.push(i),e}),[])}},computed:k(k(k({},(0,g.mapState)({clashPath:function(e){return e.app.clashPath},clashStatus:function(e){return e.app.clashStatus},profileRefreshTimes:function(e){return e.app.profileRefreshTimes},currentProfilePayload:function(e){return e.app.currentProfilePayload},settings:function(e){return e.app.settings}})),(0,g.mapGetters)(["clashAxiosClient"])),{},{updatingProvidersCount:function(){return this.providers.filter((function(e){return e.isUpdating})).length+this.ruleProviders.filter((function(e){return e.isUpdating})).length},failedProvidersCount:function(){return this.allProviders.filter((function(e){return""!==e.message})).length},checkingProvidersCount:function(){return this.providers.filter((function(e){return e.isChecking})).length},allProviders:function(){return[].concat(l()(this.providers),l()(this.ruleProviders))}}),methods:{fromNowString:function(e){return f()(e).locale('zh-cn').fromNow()},handleLocateFailedProvider:function(){if(this.errorProviderIndexes.length>0&&0===this.updatingProvidersCount){var e,t=this.errorProviderIndexes[0];null===(e=this.$refs["provider-".concat(t)])||void 0===e||e[0].scrollIntoView(),this.errorProviderIndexes=[].concat(l()(this.errorProviderIndexes.slice(1)),[t])}},handleAllProvidersUpdate:function(){if(this.updatingProvidersCount>0)return this.updateAbortCtl.abort(),void(this.updateAbortCtl=new AbortController);for(var e in this.providers)this.handleProviderUpdate(e);for(var t in this.ruleProviders)this.handleRuleProviderUpdate(t)},handleAllProvidersHealthCheck:function(){if(this.checkingProvidersCount>0)return this.healthCheckAbortCtl.abort(),void(this.healthCheckAbortCtl=new AbortController);for(var e in this.providers)this.handleHealthCheck(e)},handleHealthCheck:function(e){var t=this;return r()(u().mark((function i(){var n,o;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(n=t.providers[e],!(o=n.name)){i.next=12;break}return t.$set(t.providers,e,k(k({},n),{},{isChecking:!0})),i.prev=4,i.next=7,t.clashAxiosClient.get("/providers/proxies/".concat(encodeURIComponent(o),"/healthcheck"),{timeout:0,signal:t.healthCheckAbortCtl.signal});case 7:i.next=11;break;case 9:i.prev=9,i.t0=i.catch(4);case 11:t.$set(t.providers,e,k(k({},n),{},{isChecking:!1}));case 12:case"end":return i.stop()}}),i,null,[[4,9]])})))()},handleProviderUpdate:function(e){var t=this;return r()(u().mark((function i(){var n,o,s,r,a,l,c,d,h,g,p;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(n=t.providers[e],o=n.name,s=n.vehicleType,r=n.isUpdating,!["File","HTTP"].includes(s)||!o||r){i.next=33;break}return t.$set(t.providers,e,k(k({},n),{},{isUpdating:!0,message:""})),i.prev=4,i.next=7,t.clashAxiosClient.put("/providers/proxies/".concat(encodeURIComponent(o)),{},{validateStatus:function(e){return!0},timeout:0,signal:t.updateAbortCtl.signal});case 7:if(a=i.sent,l=a.status,c=a.data,204!==l){i.next=26;break}return i.next=13,t.fetchSingleData("proxies",o);case 13:if(i.t1=d=i.sent,i.t0=null!==i.t1,!i.t0){i.next=17;break}i.t0=void 0!==d;case 17:if(!i.t0){i.next=21;break}i.t2=d,i.next=22;break;case 21:i.t2=n;case 22:h=i.t2,t.$set(t.providers,e,k(k({},h),{},{isUpdating:!1,message:""})),i.next=28;break;case 26:g=c.message,p=void 0===g?"æ— æ³•æ›´æ–°æä¾›è€…":g,t.$set(t.providers,e,k(k({},n),{},{isUpdating:!1,message:p}));case 28:i.next=33;break;case 30:i.prev=30,i.t3=i.catch(4),t.$set(t.providers,e,k(k({},n),{},{isUpdating:!1,message:i.t3}));case 33:case"end":return i.stop()}}),i,null,[[4,30]])})))()},handleRuleProviderUpdate:function(e){var t=this;return r()(u().mark((function i(){var n,o,s,r,a,l,c,d,h,g,p;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(n=t.ruleProviders[e],o=n.name,s=n.vehicleType,r=n.isUpdating,!["File","HTTP"].includes(s)||!o||r){i.next=33;break}return t.$set(t.ruleProviders,e,k(k({},n),{},{isUpdating:!0,message:""})),i.prev=4,i.next=7,t.clashAxiosClient.put("/providers/rules/".concat(encodeURIComponent(o)),{},{validateStatus:function(e){return!0},timeout:0,signal:t.updateAbortCtl.signal});case 7:if(a=i.sent,l=a.status,c=a.data,204!==l){i.next=26;break}return i.next=13,t.fetchSingleData("rules",o);case 13:if(i.t1=d=i.sent,i.t0=null!==i.t1,!i.t0){i.next=17;break}i.t0=void 0!==d;case 17:if(!i.t0){i.next=21;break}i.t2=d,i.next=22;break;case 21:i.t2=n;case 22:h=i.t2,t.$set(t.ruleProviders,e,k(k({},h),{},{isUpdating:!1,message:""})),i.next=28;break;case 26:g=c.message,p=void 0===g?"æ— æ³•æ›´æ–°æä¾›è€…":g,t.$set(t.ruleProviders,e,k(k({},n),{},{isUpdating:!1,message:p}));case 28:i.next=33;break;case 30:i.prev=30,i.t3=i.catch(4),t.$set(t.ruleProviders,e,k(k({},n),{},{isUpdating:!1,message:i.t3}));case 33:case"end":return i.stop()}}),i,null,[[4,30]])})))()},handleEditProviderFile:function(e,t){var i,n=this,o=t.name,s=this.settings.editProfileWithCFWEditor,a=void 0!==s&&s,l=this.currentProfilePayload,c=l["rule-providers"],d=void 0===c?{}:c,h=l["proxy-providers"],g={rule:d,proxy:void 0===h?{}:h}[e][o],p=(g=void 0===g?{}:g).path,f=(i=r()(u().mark((function e(t){var i,o,s;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!a){e.next=14;break}return e.prev=1,e.next=4,n.$code({code:x().readFileSync(t).toString(),fontSize:n.settings.editorFontSize});case 4:i=e.sent,o=i.code,s=void 0===o?"":o,x().writeFileSync(t,s),e.next=12;break;case 10:e.prev=10,e.t0=e.catch(1);case 12:e.next=15;break;case 14:y.shell.openPath(t);case 15:case"end":return e.stop()}}),e,null,[[1,10]])}))),function(e){return i.apply(this,arguments)});p&&((0,v.isAbsolute)(p)?f(p):f((0,v.join)(this.clashPath,p)))},fetchSingleData:function(e,t){var i=this;return r()(u().mark((function n(){var o,s,r,a;return u().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return o="/providers/".concat(e,"/").concat(encodeURIComponent(t)),n.next=3,i.clashAxiosClient.get(o,{validateStatus:function(){return!0},timeout:0,signal:i.updateAbortCtl.signal});case 3:return s=n.sent,r=s.status,a=s.data,n.abrupt("return",200===r?a:null);case 7:case"end":return n.stop()}}),n)})))()},fetchData:function(){var e=this;return r()(u().mark((function t(){var i,n,s,r,a,l,c,d,h,g,p,f,m,v,_,b,w,y,C,x,S,L,N;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Promise.all([e.clashAxiosClient.get("/providers/proxies"),e.clashAxiosClient.get("/providers/rules")]);case 2:if(i=t.sent,n=o()(i,2),s=n[0],r=s.status,a=s.data,l=void 0===a?{}:a,c=n[1],d=c.status,h=c.data,200===r){for(g=l.providers,p=void 0===g?{}:g,f=[],m=0,v=Object.entries(p);m<v.length;m++)_=o()(v[m],2),_[0],b=_[1],f.push(k(k({},b),{},{isChecking:!1,isUpdating:!1,message:""}));e.providers=f.filter((function(e){return["HTTP","File"].includes(e.vehicleType)}))}else e.providers=[];if(200===d){for(w=h.providers,y=void 0===w?{}:w,C=[],x=0,S=Object.entries(y);x<S.length;x++)L=o()(S[x],2),L[0],N=L[1],C.push(k(k({},N),{},{isUpdating:!1,message:""}));e.ruleProviders=C.filter((function(e){return["HTTP","File"].includes(e.vehicleType)}))}else e.ruleProviders=[];case 13:case"end":return t.stop()}}),t)})))()}},beforeRouteEnter:function(e,t,i){i((function(e){e.fetchData(),e.updateAbortCtl=new AbortController,e.healthCheckAbortCtl=new AbortController}))},beforeRouteLeave:function(e,t,i){this.updateAbortCtl.abort(),this.healthCheckAbortCtl.abort(),i()}};i(99648);const N=(0,b.Z)(L,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-provider-view"},[t("div",{class:["card"]},[t("div",{staticClass:"header"},[t("div",{staticClass:"buttons"},[t("Button",{staticClass:"btn",style:{backgroundColor:e.updatingProvidersCount>0?"#FF5F57":""},attrs:{text:e.updatingProvidersCount>0?"Cancel ".concat(e.updatingProvidersCount," Update").concat(1===e.updatingProvidersCount?"":"s"):"æ›´æ–°å…¨éƒ¨",isLoading:!1},on:{click:e.handleAllProvidersUpdate}}),e._v(" "),e.providers.length>0?t("Button",{staticClass:"btn",style:{backgroundColor:e.checkingProvidersCount>0?"#FF5F57":""},attrs:{text:e.checkingProvidersCount>0?"Cancel ".concat(e.checkingProvidersCount," Check").concat(1===e.checkingProvidersCount?"":"s"):"æ£€æŸ¥å…¨éƒ¨è¿žæŽ¥",isLoading:!1},on:{click:e.handleAllProvidersHealthCheck}}):e._e()],1)]),e._v(" "),t("div",{ref:"mixin-scroll-content",staticClass:"content"},[e.providers.length>0?[t("div",{staticClass:"title"},[e._v("ä»£ç†æä¾›è€…")]),e._v(" "),t("div",{staticClass:"items"},e._l(e.providers,(function(i,n){return t("div",{key:i.name,ref:"provider-".concat(n),refInFor:!0,staticClass:"provider-item"},[t("div",{staticClass:"provider-item-main"},[t("div",[t("div",{staticClass:"name-type"},[t("div",{staticClass:"name"},[e._v(e._s(i.name))])]),e._v(" "),t("div",{staticClass:"update-hint"},[t("div",{staticClass:"type"},[e._v("\n                    "+e._s(i.vehicleType)+" ("+e._s(i.proxies.length)+"\n                    Proxies) ("+e._s(e.fromNowString(i.updatedAt))+")\n                  ")])]),e._v(" "),t("div",{staticClass:"error-hint"},[e._v(e._s(i.message))])]),e._v(" "),t("div",{staticClass:"empty"}),e._v(" "),t("Hint",{staticClass:"icon-btn",attrs:{hint:"Health check"},on:{click:function(t){return e.handleHealthCheck(n)}}},[t("span",{staticClass:"icon"},[e._v("network_check")])]),e._v(" "),t("Hint",{staticClass:"icon-btn",attrs:{hint:"Edit file"},on:{click:function(t){return e.handleEditProviderFile("proxy",i)}}},[t("span",{staticClass:"icon"},[e._v("code")])]),e._v(" "),"HTTP"===i.vehicleType?t("Hint",{staticClass:"icon-btn",attrs:{hint:"æ›´æ–°æä¾›è€…"},on:{click:function(t){return e.handleProviderUpdate(n)}}},[t("span",{staticClass:"icon",class:{rotating:i.isUpdating}},[e._v("refresh")])]):e._e()],1)])})),0)]:e._e(),e._v(" "),e.ruleProviders.length>0?[t("div",{staticClass:"title"},[e._v("Rule Providers")]),e._v(" "),t("div",{staticClass:"items"},e._l(e.ruleProviders,(function(i,n){return t("div",{key:i.name,ref:"provider-".concat(n+e.providers.length),refInFor:!0,staticClass:"provider-item"},[t("div",{staticClass:"provider-item-main"},[t("div",[t("div",{staticClass:"name-type"},[t("div",{staticClass:"name"},[e._v("\n                    "+e._s(i.name)+"\n                  ")])]),e._v(" "),t("div",{staticClass:"update-hint"},[t("div",{staticClass:"type"},[e._v("\n                    "+e._s(i.vehicleType)+"\n                    "+e._s(i.behavior)+" ("+e._s(i.ruleCount)+" Rules)\n                    ("+e._s(e.fromNowString(i.updatedAt))+")\n                  ")])]),e._v(" "),t("div",{staticClass:"error-hint"},[e._v(e._s(i.message))])]),e._v(" "),t("div",{staticClass:"empty"}),e._v(" "),t("Hint",{staticClass:"icon-btn",attrs:{hint:"Edit file"},on:{click:function(t){return e.handleEditProviderFile("rule",i)}}},[t("span",{staticClass:"icon"},[e._v("code")])]),e._v(" "),t("Hint",{staticClass:"icon-btn",attrs:{hint:"æ›´æ–°æä¾›è€…"},on:{click:function(t){return e.handleRuleProviderUpdate(n)}}},[t("span",{staticClass:"icon",class:{rotating:i.isUpdating}},[e._v("refresh")])])],1)])})),0)]:e._e()],2),e._v(" "),e.failedProvidersCount>0?t("div",{staticClass:"fixed top-8 bg-opacity-80 right-2 bg-black px-3 py-1 text-white flex items-center gap-2 rounded text-sm clickable",on:{click:e.handleLocateFailedProvider}},[t("span",{staticClass:"icon text-sm text-red-500"},[e._v("error")]),e._v("\n      "+e._s(e.failedProvidersCount)+" error"+e._s(1===e.failedProvidersCount?"":"s")+"\n    ")]):e._e()])])}),[],!1,null,"3e34584d",null).exports},72094:(e,t,i)=>{"use strict";i.d(t,{Z:()=>R});var n=i(63038),o=i.n(n),s=i(48926),r=i.n(s),a=i(319),l=i.n(a),c=i(59713),d=i.n(c),h=i(87757),u=i.n(h),g=i(13338),p=i(23321);function f(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const m={components:{Hint:g.Z},props:["mode"],data:function(){return{modes:["global","rule","direct","script"],hints:["","æŒ‰è§„åˆ™è·¯ç”±","ç›´æŽ¥è¿žæŽ¥","æ ¹æ®è„šæœ¬è¿›è¡Œè·¯ç”±"],icons:["","","",""]}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?f(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):f(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,p.mapState)({})),methods:{upperCaseFirstLetter:function(e){return e[0].toUpperCase()+e.slice(1)},btnTheme:function(e){var t=["btn"];return this.mode===e.toLowerCase()?t.push("selected"):t.push("normal"),t},switchMode:function(e){var t=this;return r()(u().mark((function i(){return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:t.$parent.cancelLatencyTest(),t.$emit("switch",e);case 2:case"end":return i.stop()}}),i)})))()}}};i(71176);var v=i(51900);const _=(0,v.Z)(m,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main",attrs:{id:"main-mode-switcher"}},[t("div",{staticClass:"btns"},[t("Hint",{staticClass:"gap-x-2 clickable",class:e.btnTheme("global"),staticStyle:{"flex-direction":"row"},attrs:{position:"bottom",hint:"é€šè¿‡é€‰å®šçš„ä»£ç†è·¯ç”±"},on:{click:function(t){return e.switchMode("global")}}},[t("span",[e._v("å…¨å±€")]),e._v(" "),t("div",{staticClass:"icon rotate-90"},[e._v("merge")])]),e._v(" "),t("Hint",{staticClass:"gap-x-2 clickable",class:e.btnTheme("rule"),staticStyle:{"flex-direction":"row"},attrs:{position:"bottom",hint:"æŒ‰è§„åˆ™è·¯ç”±"},on:{click:function(t){return e.switchMode("rule")}}},[t("span",[e._v("è§„åˆ™")]),e._v(" "),t("div",{staticClass:"icon rotate-90"},[e._v("alt_route")])]),e._v(" "),t("Hint",{staticClass:"gap-x-2 clickable",class:e.btnTheme("direct"),staticStyle:{"flex-direction":"row"},attrs:{position:"bottom",hint:"ç›´æŽ¥è¿žæŽ¥"},on:{click:function(t){return e.switchMode("direct")}}},[t("span",[e._v("ç›´è¿ž")]),e._v(" "),t("div",{staticClass:"icon rotate-90"},[e._v("straight")])]),e._v(" "),t("Hint",{staticClass:"gap-x-2 clickable",class:e.btnTheme("script"),staticStyle:{"flex-direction":"row"},attrs:{position:"bottom",hint:"æ ¹æ®è„šæœ¬è¿›è¡Œè·¯ç”±"},on:{click:function(t){return e.switchMode("script")}}},[t("span",[e._v("è„šæœ¬")]),e._v(" "),t("div",{staticClass:"icon rotate-90"},[e._v("alt_route")])])],1)])}),[],!1,null,"357c3e79",null).exports;var b=i(11287),w=i(54387),y=i.n(w),C=i(24883),x=i(81518),S=i(24793),k=i.n(S),L=i(1581),N=i(8369),D=i(33182);const I=require("velocity-animate");var E=i.n(I),T=i(71289);function M(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function A(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?M(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):M(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var O=y().CancelToken;const P={props:[],data:function(){return{proxies:[],axiosCancelTokens:[],showSecIdxs:[],hideTimeoutSecNames:[],infoItemName:"",intervalID:null,filterKeyword:"",filterKeywordReg:/.*/,isShowFilter:!1,isScrolling:!1,topItemIndex:-1,topProxyIndex:-1,proxyBlinkIndex:-1,groupBlinkIndex:-1,testingProxyNames:[]}},components:{ProxyModeSwitcher:_,Navigator:b.Z,Hint:g.Z},watch:{clashStatus:function(e){e===D.Z.CONNECTED&&this.fetchData()},filterKeyword:{handler:k().debounce((function(e){C.Z.put(x.Z.PROXY_FILTER_KEYWORD,e),this.filterKeywordReg=e?new RegExp(e,"i"):/.*/}),500)},profileRefreshTimes:function(){this.fetchData()},proxyBlinkIndex:function(){var e=this;setTimeout((function(){e.proxyBlinkIndex=-1}),300)},groupBlinkIndex:function(){var e=this;setTimeout((function(){e.groupBlinkIndex=-1}),300)},hideTimeoutSecNames:function(e){C.Z.put(x.Z.PROXY_HIDE_TIMEOUT_SEC_NAMES,e)}},computed:A(A(A({},(0,p.mapState)({clashPath:function(e){return e.app.clashPath},pfs:function(e){return e.app.profiles},clashStatus:function(e){return e.app.clashStatus},confData:function(e){return e.app.confData},clashAxiosFlyingRequestCount:function(e){return e.app.clashAxiosFlyingRequestCount},profileRefreshTimes:function(e){return e.app.profileRefreshTimes},currentMode:function(e){return e.app.mode},currentProfilePayload:function(e){return e.app.currentProfilePayload}})),(0,p.mapGetters)(["clashAxiosClient"])),{},{delayKeyName:function(){var e;return(null===(e=["delay","meanDelay"])||void 0===e?void 0:e[this.settings.proxyDelayType])||"delay"},navigatorWidth:function(){return this.settings.proxyMiniListWidth},proxyItemWidth:function(){var e=this.settings.proxyItemWidth;return parseInt(e)>=150?"".concat(e,"px"):"290px"},errorIndexes:function(){return this.proxyInMode.reduce((function(e,t,i){var n=t.data;t.name;return null!=n&&n.now&&!n.all.find((function(e){return e.name===n.now})).alive&&e.push(i),e}),[])},proxyInMode:function(){var e=this.currentMode;if("global"===e)return this.proxies.filter((function(e){return"GLOBAL"===e.name}));if("direct"===e)return[];var t=this.settings.hideUnselectableGroup,i=void 0!==t&&t?["Selector"]:["Selector","Fallback","URLTest","LoadBalance","Relay"];return this.proxies.filter((function(e){return"GLOBAL"!==e.name&&i.includes(e.data.type)}))},isShowNavigator:function(){return 0!==parseInt(this.settings.proxyMiniListWidth)}}),methods:A(A(A({},(0,p.mapMutations)({changeProfile:"CHANGE_PROFILE"})),(0,p.mapActions)(["getMode","setMode"])),{},{debounceScroll:k().debounce((function(){this.isScrolling=!1}),1e3),handleListScroll:function(){this.isScrolling=!0;var e=this.$refs["mixin-scroll-content"],t=this.$refs.list;return this.topItemIndex=[].concat(l()(t),[{offsetTop:1/0}]).findIndex((function(t){return t.offsetTop-120>e.scrollTop}))-1,this.topProxyIndex=l()(t[this.topItemIndex].querySelectorAll(".proxy-item")).findIndex((function(t){return t.offsetTop-100>e.scrollTop})),this.debounceScroll()},handleProxyRightClick:function(e,t){var i=this;return r()(u().mark((function n(){var o,s;return u().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:o=i.proxyInMode.map((function(e){return e.name})).findIndex((function(e){return e===t})),s=[{text:"æ˜¾ç¤ºè¿žæŽ¥",icon:"list",click:function(){i.$router.replace({path:"/home/connection",query:{searchText:t}}).catch((function(){}))}},{text:"è¿è¡Œè„šæœ¬",icon:"code",click:function(){var e=i.currentProfilePayload.proxies,n=(void 0===e?[]:e).find((function(e){return e.name===t}))||{name:t};(0,L.TX)((0,N.EP)(n),L.ay)}}],o>-1&&s.unshift({text:"ç§»åŠ¨è‡³ç»„",icon:"travel_explore",click:function(){i.handleNavigatToGroup(o)}}),i.$menu(s,e);case 4:case"end":return n.stop()}}),n)})))()},handleFilterIconClick:function(){var e=this;this.isShowFilter=!this.isShowFilter,this.isShowFilter||(this.filterKeyword=""),this.$nextTick((function(){var t=e.$refs.filterKeyword;t&&t.focus()}))},checkBtnText:function(e){e.provider;var t=e.latency;return-1===t?"-- ms":t||"æµ‹è¯•"},handleSingleSpeedtest:function(e,t){var i=this;return r()(u().mark((function n(){var o,s,r,a,c,d,h,g;return u().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return o=e.name,s=t.name,r=t.provider,a=function(e){var t=i.proxyInMode.find((function(e){return e.name===o}));if(t){var n=t.data.all.find((function(e){return e.name===s}));n&&(n.latency=-1===e?-1:e+(/\d/.test(e)?" ms":"è¶…æ—¶"))}},i.cancelLatencyTest(),i.testingProxyNames=[].concat(l()(i.testingProxyNames),[s]),a(-1),c="",n.prev=7,d=i.settings,h=d.latencyTimeout,g=d.latencyUrl,n.next=11,i.speedtest(s,h||3e3,g||"http://www.gstatic.com/generate_204",r);case 11:c=n.sent,n.next=16;break;case 14:n.prev=14,n.t0=n.catch(7);case 16:i.testingProxyNames=i.testingProxyNames.filter((function(e){return e!==s})),a(c);case 18:case"end":return n.stop()}}),n,null,[[7,14]])})))()},proxyItemsBeforeAnimate:function(e){e.style.opacity=0},animateDone:function(e){},proxyItemsShowAnimate:function(e,t){E()(e,{opacity:1},{duration:150,easing:"ease-in",complete:t})},proxyItemsHideAnimate:function(e,t){E()(e,{opacity:0,height:0},{complete:t,easing:"ease-out",duration:100})},saveShowSecIdxs:function(){C.Z.put(x.Z.PROXY_SHOW_SEC_IDXS,this.showSecIdxs)},handleNavigatToGroup:function(e){this.showSecIdxs.includes(e)||this.showSecIdxs.push(e),this.groupBlinkIndex=e;var t=this.$refs["mixin-scroll-content"],i=this.$refs.list;this.$nextTick((function(){t.scrollTop=i[e].offsetTop-120}))},scrollToSelected:function(e){this.proxyBlinkIndex=e;var t=this.$refs["selected".concat(e)][0],i=this.$refs["mixin-scroll-content"],n=t.offsetTop-160;(n<i.scrollTop||n>i.scrollTop+i.clientHeight-200)&&this.$nextTick((function(){i.scrollTop=t.offsetTop-160}))},switchHideTimeout:function(e){var t=this;return r()(u().mark((function i(){return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:t.hideTimeoutSecNames.includes(e)?t.hideTimeoutSecNames=t.hideTimeoutSecNames.filter((function(t){return t!==e})):t.hideTimeoutSecNames.push(e);case 1:case"end":return i.stop()}}),i)})))()},switchVisiable:function(e){var t=this;return r()(u().mark((function i(){var n,o,s,r,a,l;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:o=t.$refs.list,s=t.$refs["mixin-scroll-content"],r=null===(n=o[e])||void 0===n?void 0:n.childNodes[0],a=null==r?void 0:r.childNodes[0],l=null==r?void 0:r.childNodes[2],t.showSecIdxs.includes(e)?(t.showSecIdxs=t.showSecIdxs.filter((function(t){return t!==e})),t.$nextTick((function(){a.offsetTop>l.offsetTop&&(s.scrollTop=r.offsetTop-112)}))):t.showSecIdxs.push(e),t.saveShowSecIdxs();case 7:case"end":return i.stop()}}),i)})))()},nodeHint:function(e){var t=this.proxies.find((function(t){return t.name===e.name}));if(!t)return"";var i=t.data.type;return"Selector"===i||"Fallback"===i||"URLTest"===i?"".concat(i," - ").concat(t.data.now):"LoadBalance"===i?"".concat(i," - ").concat(t.data.all.length," server").concat(t.data.all.length>1?"s":""):i},cancelLatencyTest:function(){this.axiosCancelTokens.length>0&&(this.axiosCancelTokens.forEach((function(e){e()})),this.axiosCancelTokens=[])},switchProxy:function(e,t){var i=arguments,n=this;return r()(u().mark((function o(){var s;return u().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:if(!(i.length>2&&void 0!==i[2]&&i[2])){o.next=3;break}return o.abrupt("return");case 3:return n.cancelLatencyTest(),o.next=6,n.clashAxiosClient.put("/proxies/".concat(encodeURIComponent(e)),{name:t});case 6:204===o.sent.status&&((s=l()(n.proxies)).find((function(t){return t.name===e})).data.now=t,n.proxies=s.length>500?Object.freeze(s):s,n.$parent.persistSelectedProxy(),n.$parent.breakConnections(e));case 8:case"end":return o.stop()}}),o)})))()},startLatencyTest:function(e,t){var i=this;return r()(u().mark((function n(){var o,s,a,c,d,h;return u().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:i.cancelLatencyTest(),i.showSecIdxs.find((function(e){return e===t}))||i.showSecIdxs.push(t),o=i.proxies.find((function(t){return t.name===e})),s=i.settings,a=s.latencyTimeout,c=s.latencyUrl,d=o.data.all,(h=t===i.topItemIndex?[].concat(l()(d.slice(i.topProxyIndex)),l()(d.slice(0,i.topProxyIndex).reverse())):d).forEach((function(e){e.latency=-1})),h.forEach(function(){var e=r()(u().mark((function e(t,n){var o;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,i.speedtest(t.name,a||3e3,c||"http://www.gstatic.com/generate_204",t.provider);case 3:o=e.sent,t.latency=o>0?o+" ms":"è¶…æ—¶",e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),t.latency="è¶…æ—¶";case 10:case"end":return e.stop()}}),e,null,[[0,7]])})));return function(t,i){return e.apply(this,arguments)}}());case 8:case"end":return n.stop()}}),n)})))()},speedtest:function(e){var t=arguments,i=this;return r()(u().mark((function n(){var o,s,r,a,l,c,d,h;return u().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return o=t.length>1&&void 0!==t[1]?t[1]:1e3,s=t.length>2&&void 0!==t[2]?t[2]:"http://www.gstatic.com/generate_204",r=t.length>3?t[3]:void 0,a=encodeURIComponent(e),l=r?"/providers/proxies/".concat(encodeURIComponent(r.name),"/").concat(a,"/healthcheck"):"/proxies/".concat(a,"/delay"),n.next=7,i.clashAxiosClient(l,{params:{timeout:o,url:s},cancelToken:new O((function(e){i.axiosCancelTokens.push(e)})),timeout:0});case 7:if(c=n.sent,!(d=c.data)){n.next=12;break}return h=d[i.delayKeyName],n.abrupt("return",h||0);case 12:return n.abrupt("return",0);case 13:case"end":return n.stop()}}),n)})))()},handleModeSwitch:function(e){var t=this;return r()(u().mark((function i(){return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.prev=0,i.next=3,t.setMode({mode:e});case 3:i.next=7;break;case 5:i.prev=5,i.t0=i.catch(0);case 7:case"end":return i.stop()}}),i,null,[[0,5]])})))()},findProvider:function(e,t){for(var i in e){var n=e[i],o=n.proxies,s=(void 0===o?[]:o).find((function(e){return e.name===t}));if(s)return[n,s]}return[null,{}]},fetchData:function(){var e=this;return r()(u().mark((function t(){var i,n,s,r,a,l,c,d,h,g,p;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=Number.MAX_SAFE_INTEGER,e.clashAxiosClient){t.next=3;break}return t.abrupt("return");case 3:return t.next=5,Promise.all([e.clashAxiosClient.get("/proxies"),e.clashAxiosClient.get("/providers/proxies",{validateStatus:function(e){return!0}})]);case 5:n=t.sent,s=o()(n,2),r=s[0],a=s[1],l=a.data,c=(void 0===l?{}:l).providers,d=void 0===c?{}:c,h=r.data.proxies,g=h.GLOBAL.all,e.viewData=h,p=Object.keys(h).map((function(t){return h[t].hasOwnProperty("all")||(h[t].all=[h[t].now]),h[t].all=h[t].all.map((function(t){var n=null,s=h[t];if(void 0===s){var r=e.findProvider(d,t),a=o()(r,2),l=a[0],c=a[1],u=0,g=c.history,p=void 0===g?[]:g,f=c.udp,m=void 0!==f&&f,v=c.alive;return{name:t,provider:l,latency:n=p.length>0?0===(u=p[p.length-1][e.delayKeyName])?"è¶…æ—¶":"".concat(u," ms"):"",delay:u||i,udp:m,alive:void 0===v||v}}var _=0;return s&&s.history.length>0&&(n=0===(_=s.history[s.history.length-1][e.delayKeyName])?"è¶…æ—¶":"".concat(_," ms")),e.testingProxyNames.includes(t)&&(n=-1),{name:t,provider:null,latency:n,delay:_||i,udp:(null==s?void 0:s.udp)||!1,alive:void 0===(null==s?void 0:s.alive)||(null==s?void 0:s.alive)}})).sort((function(n,o){var s=e.settings.proxyOrder,r=void 0===s?0:s;if(1===r&&"Fallback"!==h[t].type){var a=n.delay,l=void 0===a?i:a,c=o.delay;return l-(void 0===c?i:c)}if(2===r){var d=n.name,u=o.name;return d.localeCompare(u)}return!0})),{name:t,data:h[t]}})).sort((function(e,t){return g.indexOf(e.name)-g.indexOf(t.name)})),e.proxies=p.length>500?Object.freeze(p):p;case 16:case"end":return t.stop()}}),t)})))()}}),beforeRouteEnter:function(e,t,i){var n;i((n=r()(u().mark((function e(t){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.getMode(),t.showSecIdxs=C.Z.get(x.Z.PROXY_SHOW_SEC_IDXS)||[],t.hideTimeoutSecNames=C.Z.get(x.Z.PROXY_HIDE_TIMEOUT_SEC_NAMES)||[],t.filterKeyword=C.Z.get(x.Z.PROXY_FILTER_KEYWORD)||"",t.isShowFilter=""!==t.filterKeyword,t.intervalID=T.ZP.add(r()(u().mark((function e(){return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.isScrolling||!(t.clashAxiosFlyingRequestCount<5)){e.next=3;break}return e.next=3,Promise.allSettled([t.getMode(),t.fetchData()]).catch((function(e){}));case 3:case"end":return e.stop()}}),e)}))),5e3),e.next=8,t.fetchData().catch((function(e){}));case 8:case"end":return e.stop()}}),e)}))),function(e){return n.apply(this,arguments)}))},beforeRouteLeave:function(e,t,i){this.intervalID&&T.ZP.stop(this.intervalID),this.cancelLatencyTest(),i()}};i(24860),i(53614);const R=(0,v.Z)(P,(function(){var e=this,t=e._self._c;return t("div",{attrs:{id:"main-proxy-view"}},[t("proxy-mode-switcher",{attrs:{mode:e.currentMode},on:{switch:e.handleModeSwitch}}),e._v(" "),t("div",{ref:"mixin-scroll-content",staticClass:"scroll-view",on:{scroll:function(t){return e.handleListScroll()}}},[e._l(e.proxyInMode,(function(i,n){return t("div",{key:i.name,ref:"list",refInFor:!0},[t("div",{staticClass:"proxy-list"},[t("div",{class:["proxy-section",e.groupBlinkIndex===n?"flick":""],on:{click:function(t){return e.switchVisiable(n)}}},[t("div",{staticClass:"proxy-section-name"},[t("div",{staticClass:"proxy-section-name-left"},[e._v(e._s(i.name))]),e._v(" "),t("div",{staticClass:"proxy-hint-type",class:["Selector"===i.data.type?"proxy-hint-type-selector":""]},[e._v("\n              "+e._s(i.data.type[0])+"\n            ")]),e._v(" "),i.data.now?t("div",{staticClass:"proxy-hint-line"}):e._e(),e._v(" "),i.data.now?t("div",{staticClass:"proxy-hint"},[e._v("\n              "+e._s(i.data.now)+"\n            ")]):e._e()]),e._v(" "),t("div",{staticClass:"proxy-section-right"},[e.showSecIdxs.includes(n)?t("Hint",{staticClass:"sec-icon clickable",attrs:{hint:"ç§»åŠ¨åˆ°é€‰å®šçš„ä»£ç†",position:"top"},on:{click:function(t){return t.stopPropagation(),e.scrollToSelected(n)}}},[t("span",{staticClass:"icon"},[e._v("travel_explore")])]):e._e(),e._v(" "),t("Hint",{staticClass:"sec-icon clickable",attrs:{hint:"æ˜¾ç¤º/éšè—è¶…æ—¶èŠ‚ç‚¹",position:"top"},on:{click:function(t){return t.stopPropagation(),e.switchHideTimeout(i.name)}}},[t("span",{staticClass:"icon"},[e._v("report"+e._s(e.hideTimeoutSecNames.includes(i.name)?"_off":""))])]),e._v(" "),t("Hint",{staticClass:"sec-icon clickable",attrs:{hint:"æµ‹è¯•å»¶è¿Ÿ",position:"top"},on:{click:function(t){return t.stopPropagation(),e.startLatencyTest(i.name,n)}}},[t("span",{staticClass:"icon"},[e._v("network_check")])]),e._v(" "),["rule","script"].includes(e.currentMode)?t("Hint",{staticClass:"sec-icon clickable",attrs:{hint:"Show/hide proxies",position:"left"},on:{click:function(t){return t.stopPropagation(),e.switchVisiable(n)}}},[t("span",{staticClass:"icon"},[e._v("visibility"+e._s(e.showSecIdxs.includes(n)?"":"_off"))])]):e._e()],1)]),e._v(" "),t("transition",{attrs:{name:"fall-fade"}},[!["rule","script"].includes(e.currentMode)||e.showSecIdxs.includes(n)?t("div",{staticClass:"proxy-items"},[e._l(i.data.all,(function(o,s){return t("div",{directives:[{name:"show",rawName:"v-show",value:(!e.hideTimeoutSecNames.includes(i.name)||"è¶…æ—¶"!==o.latency)&&e.filterKeywordReg.test(o.name),expression:"\n                (!hideTimeoutSecNames.includes(proxy.name) ||\n                  node.latency !== 'Timeout') &&\n                filterKeywordReg.test(node.name)\n              "}],key:o.name+i.name+s,ref:o.name===i.data.now?"selected".concat(n):"",refInFor:!0,staticClass:"proxy-item",class:{selected:o.name===i.data.now,clickable:"Selector"===i.data.type,flick:o.name===i.data.now&&n===e.proxyBlinkIndex},style:[{width:e.proxyItemWidth}],on:{click:function(t){return e.switchProxy(i.name,o.name,"Selector"!==i.data.type)},contextmenu:function(t){return e.handleProxyRightClick(t,o.name)}}},[t("div",{staticClass:"indicator"}),e._v(" "),t("div",{staticClass:"info"},[t("div",{staticClass:"left"},[t("div",{staticClass:"item-name",class:{offline:!o.alive}},[e._v("\n                    "+e._s(o.name)+"\n                  ")]),e._v(" "),t("div",{staticClass:"item-bottom"},[t("div",{staticClass:"item-hint"},[e._v("\n                      "+e._s(o.provider?"Provider: ".concat(o.provider.name):e.nodeHint(o))+"\n                    ")]),e._v(" "),o.udp?t("div",{staticClass:"item-udp"},[e._v("UDP")]):e._e()])]),e._v(" "),-1===o.latency?t("div",{staticClass:"time"},[e._v("- ms")]):t("div",{class:{offline:"è¶…æ—¶"===o.latency,online:!["è¶…æ—¶",-1,null,void 0,""].includes(o.latency),time:!0},on:{click:[function(t){return e.handleSingleSpeedtest(i,o)},function(e){e.stopPropagation()}]}},[e._v("\n                  "+e._s(e.checkBtnText(o))+"\n                ")])])])})),e._v(" "),e._l(new Array(20),(function(i,n){return t("i",{key:n,style:{width:e.proxyItemWidth}})}))],2):e._e()])],1)])})),e._v(" "),e.isShowNavigator?t("navigator",{attrs:{list:e.proxyInMode.map((function(e){return e.name})),"error-indexes":e.errorIndexes,index:e.topItemIndex,width:e.navigatorWidth},on:{select:e.handleNavigatToGroup}}):e._e(),e._v(" "),null===e.proxyInMode&&"direct"!==this.currentMode?t("div",[t("div",{staticClass:"fake-section"}),e._v(" "),t("div",{staticClass:"proxy-items proxy-list"},e._l(new Array(12),(function(e,i){return t("div",{key:i,staticClass:"fake-item"},[t("div")])})),0)]):e._e(),e._v(" "),0===e.proxyInMode.length&&"direct"!==this.currentMode?t("div",{staticClass:"empty-hint"},[t("div",[e._v("æ­¤é…ç½®æ–‡ä»¶ä¸­æ²¡æœ‰ä»£ç†ç»„")]),e._v(" "),t("div",[e._v("\n        å‰å¾€\n        "),t("span",{on:{click:function(t){return e.$router.replace({path:"/home/server"})}}},[e._v("é…ç½®")]),e._v("\n        å¯¼å…¥/åˆ‡æ¢é…ç½®æ–‡ä»¶\n      ")])]):e._e(),e._v(" "),"direct"===this.currentMode?t("div",{staticClass:"empty-hint text-lg"},[e._v("\n      æ‰€æœ‰æµé‡éƒ½ä¼šç›´è¿ž\n    ")]):e._e()],2),e._v(" "),e.settings.showProxyFilter?t("div",{staticClass:"filter-keyword"},[t("transition",{attrs:{name:"move-right"}},[e.isShowFilter?t("input",{directives:[{name:"model",rawName:"v-model",value:e.filterKeyword,expression:"filterKeyword"}],ref:"filterKeyword",attrs:{spellcheck:"false",type:"text"},domProps:{value:e.filterKeyword},on:{input:function(t){t.target.composing||(e.filterKeyword=t.target.value)}}}):e._e()]),e._v(" "),t("div",{on:{click:e.handleFilterIconClick}},[e.isShowFilter?t("span",{staticClass:"icon text-white"},[e._v("close")]):t("span",{staticClass:"icon text-white"},[e._v("filter_list")])])],1):e._e()],1)}),[],!1,null,"0729f95b",null).exports},28779:(e,t,i)=>{"use strict";i.d(t,{Z:()=>L});var n=i(48926),o=i.n(n),s=i(319),r=i.n(s),a=i(59713),l=i.n(a),c=i(87757),d=i.n(c),h=i(72298),u=i(23321),g=i(24883);const p=require("dhcp");var f=i.n(p),m=i(59273),v=i(81518),_=i(63038),b=i.n(_),w=i(97520);const y={name:"RouterConfigView",data:function(){return{interfaces:[],selectedName:"",localAddress:"",rangeFrom:"",rangeTo:"",netmask:"255.255.255.0",defaultRouter:"",primaryDns:"223.5.5.5",secondlyDns:"114.114.114.114",broadAddress:""}},computed:{selectedInterface:function(){var e=this;return this.interfaces.find((function(t){return t.name===e.selectedName}))}},watch:{selectedInterface:function(e){var t=e.address;this.localAddress=t,this.computeFromLocalAddress(t)}},methods:{computeFromLocalAddress:function(e){var t=e.split(".");4===t.length&&(this.rangeFrom=[].concat(r()(t.slice(0,3)),["100"]).join("."),this.rangeTo=[].concat(r()(t.slice(0,3)),["200"]).join("."),this.defaultRouter=[].concat(r()(t.slice(0,3)),["1"]).join("."),this.broadAddress=[].concat(r()(t.slice(0,3)),["255"]).join("."))},handleInterfaceSelect:function(){var e=this;return o()(d().mark((function t(){var i,n,o,s;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=e.interfaces.map((function(e){return e.name})),t.next=3,e.$select({title:"é€‰æ‹©ä¸€ä¸ªæŽ¥å£",message:"",items:i});case 3:n=t.sent,o=b()(n,1),s=o[0],e.selectedName=i[s];case 7:case"end":return t.stop()}}),t)})))()},handleContinueClick:function(){this.$emit("confirm",{localAddress:this.localAddress,rangeFrom:this.rangeFrom,rangeTo:this.rangeTo,netmask:this.netmask,defaultRouter:this.defaultRouter,primaryDns:this.primaryDns,secondlyDns:this.secondlyDns,broadAddress:this.broadAddress})}},mounted:function(){this.interfaces=(0,w.r)()||[],this.interfaces.length>0&&(this.selectedName=this.interfaces[0].name)}};i(91781);var C=i(51900);function x(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function S(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?x(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):x(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const k={name:"RouterView",components:{ConfigView:(0,C.Z)(y,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-router-config-view bg-[color:var(--mask-c)]",on:{click:function(t){return e.$emit("close")}}},[t("div",{staticClass:"content bg-[color:var(--bgc)] text-[color:var(--fgc)]",on:{click:function(e){e.stopPropagation()}}},[t("div",{staticClass:"title"},[e._v("é…ç½®")]),e._v(" "),t("div",{staticClass:"sec"},[t("span",[e._v("Interface")]),e._v(" "),t("input",{staticClass:"clickable",attrs:{readonly:""},domProps:{value:e.selectedName},on:{click:e.handleInterfaceSelect}})]),e._v(" "),t("div",{staticClass:"sec"},[t("span",[e._v("æœ¬åœ° IP åœ°å€")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.localAddress,expression:"localAddress"}],attrs:{type:"text"},domProps:{value:e.localAddress},on:{input:function(t){t.target.composing||(e.localAddress=t.target.value)}}})]),e._v(" "),t("div",{staticClass:"sec"},[t("span",[e._v("DHCP IP Range")]),e._v(" "),t("div",{staticClass:"flex"},[t("div",[t("span",[e._v("From")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.rangeFrom,expression:"rangeFrom"}],attrs:{type:"text"},domProps:{value:e.rangeFrom},on:{input:function(t){t.target.composing||(e.rangeFrom=t.target.value)}}})]),e._v(" "),t("div",[t("span",[e._v("To")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.rangeTo,expression:"rangeTo"}],attrs:{type:"text"},domProps:{value:e.rangeTo},on:{input:function(t){t.target.composing||(e.rangeTo=t.target.value)}}})])])]),e._v(" "),t("div",{staticClass:"sec"},[t("span",[e._v("Netmask")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.netmask,expression:"netmask"}],attrs:{type:"text"},domProps:{value:e.netmask},on:{input:function(t){t.target.composing||(e.netmask=t.target.value)}}})]),e._v(" "),t("div",{staticClass:"sec"},[t("span",[e._v("Default Router")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.defaultRouter,expression:"defaultRouter"}],attrs:{type:"text"},domProps:{value:e.defaultRouter},on:{input:function(t){t.target.composing||(e.defaultRouter=t.target.value)}}})]),e._v(" "),t("div",{staticClass:"sec"},[t("span",[e._v("DNS æœåŠ¡å™¨")]),e._v(" "),t("div",{staticClass:"flex"},[t("div",[t("span",[e._v("Primary")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.primaryDns,expression:"primaryDns"}],attrs:{type:"text"},domProps:{value:e.primaryDns},on:{input:function(t){t.target.composing||(e.primaryDns=t.target.value)}}})]),e._v(" "),t("div",[t("span",[e._v("Alternative")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.secondlyDns,expression:"secondlyDns"}],attrs:{type:"text"},domProps:{value:e.secondlyDns},on:{input:function(t){t.target.composing||(e.secondlyDns=t.target.value)}}})])])]),e._v(" "),t("div",{staticClass:"btn clickable",on:{click:e.handleContinueClick}},[e._v("Continue")])])])}),[],!1,null,"0ffa25f2",null).exports},data:function(){return{server:null,clients:[],boundState:{},isShowConfigView:!1,powersaveBlockerID:0,clientAlias:g.Z.get(v.Z.DHCP_MAC_ALIAS)||{}}},computed:S(S({},(0,u.mapState)({routerHijackMacAddresses:function(e){return e.app.routerHijackMacAddresses},currentProfilePayload:function(e){return e.app.currentProfilePayload}})),{},{serverRunning:function(){return null!==this.server},buttonText:function(){return this.serverRunning?"æš‚åœ":"å¼€å§‹"}}),methods:S(S({},(0,u.mapMutations)({setRouterHijackMacAddresses:"SET_ROUTER_HIJACK_MAC_ADDRESSES"})),{},{clientName:function(e){return this.clientAlias[e.chaddr]||e.options[12]||"Unknown"},handleClientRename:function(e,t){this.clientAlias=S(S({},this.clientAlias),{},l()({},t,e.target.value)),g.Z.put(v.Z.DHCP_MAC_ALIAS,this.clientAlias)},handleGotoConnections:function(e){var t=this.addressFromBound(e);t&&this.$router.replace({path:"/home/connection",query:{searchText:t}}).catch((function(){}))},handleStartDHCPServer:function(){this.serverRunning?(this.server&&this.server.close(),this.server=null,this.clients=[],this.boundState={},h.ipcRenderer.invoke("powerSaveBlocker","stop",this.powersaveBlockerID)):this.isShowConfigView=!0},handleConfigConfirm:function(e){var t,i,n=this;this.isShowConfigView=!1;var s,a=null===(t=this.currentProfilePayload)||void 0===t||null===(i=t.tun)||void 0===i?void 0:i["dns-hijack"],l=function(e){var t=e.rangeFrom,i=e.rangeTo,n=e.netmask,o=e.defaultRouter,s=e.broadcast,r=e.localAddress,a=e.primaryDns,l=e.secondlyDns,c=e.hijackDns,d=void 0===c?[]:c,h=f().createServer({range:[t,i],forceOptions:["hostname"],randomIP:!0,static:{},netmask:n,router:function(e){var t=m.Z.state.app.routerHijackMacAddresses;return(void 0===t?[]:t).includes(e.clientId)?[r]:[o]},dns:function(e){var t=m.Z.state.app.routerHijackMacAddresses;return(void 0===t?[]:t).includes(e.clientId)?d.slice(0,2):""!==l?[a,l]:[a]},broadcast:s,server:r,maxMessageSize:1500,leaseTime:86400,renewalTime:60,rebindingTime:120,bootFile:"",hostname:"cfw"});return h.on("error",(function(e,t){console.log(e,t)})),h.listen(),h}(S(S({},e),{},{hijackDns:a}));l.on("message",(function(e){var t=e.chaddr;void 0!==n.clients.find((function(e){return e.chaddr===t}))||(n.clients=[].concat(r()(n.clients),[e]))})),l.on("bound",(function(e){n.boundState=e})),l.on("listening",(s=o()(d().mark((function e(t){var i;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=t.address(),console.log("dhcp server listen at ".concat(i.address,":").concat(i.port)),n.server=l,e.next=5,h.ipcRenderer.invoke("powerSaveBlocker","start","prevent-app-suspension");case 5:n.powersaveBlockerID=e.sent;case 6:case"end":return e.stop()}}),e)}))),function(e){return s.apply(this,arguments)}))},handleMacToHijack:function(e){this.routerHijackMacAddresses.includes(e)?this.setRouterHijackMacAddresses({addresses:this.routerHijackMacAddresses.filter((function(t){return t!==e}))}):this.setRouterHijackMacAddresses({addresses:[].concat(r()(this.routerHijackMacAddresses),[e])})},addressFromBound:function(e){var t=this.boundState[e];return t?t.address:""}})};i(67078);const L=(0,C.Z)(k,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-router-view"},[t("div",{staticClass:"header"},[t("div",[e._v("DHCP æœåŠ¡å™¨")]),e._v(" "),t("div",{staticClass:"btn",class:[e.serverRunning?"btn-stop":"btn-start"],on:{click:e.handleStartDHCPServer}},[e._v("\n      "+e._s(e.buttonText)+"\n    ")])]),e._v(" "),t("div",{staticClass:"list"},e._l(e.clients,(function(i){return t("div",{key:i.chaddr,staticClass:"item",attrs:{title:i.chaddr}},[t("div",{staticClass:"left"},[t("div",{staticClass:"name clickable"},[t("input",{attrs:{type:"text"},domProps:{value:e.clientName(i)},on:{change:function(t){return e.handleClientRename(t,i.chaddr)}}})]),e._v(" "),t("div",{staticClass:"ip"},[e._v(e._s(e.addressFromBound(i.chaddr)||"--"))])]),e._v(" "),t("div",{staticClass:"right"},[e.routerHijackMacAddresses.includes(i.options[61])?t("div",{staticClass:"btn",on:{click:function(t){return e.handleGotoConnections(i.chaddr)}}},[e._v("\n         è¿žæŽ¥\n        ")]):e._e(),e._v(" "),t("div",{staticClass:"btn hijack-button",on:{click:function(t){return e.handleMacToHijack(i.options[61])}}},[e._v("\n          "+e._s(e.routerHijackMacAddresses.includes(i.options[61])?"Clash TUN":"é»˜è®¤ç½‘å…³")+"\n        ")])])])})),0),e._v(" "),e.isShowConfigView?t("config-view",{on:{close:function(t){e.isShowConfigView=!1},confirm:e.handleConfigConfirm}}):e._e()],1)}),[],!1,null,"74ff0369",null).exports},74775:(e,t,i)=>{"use strict";i.d(t,{Z:()=>ge});var n=i(319),o=i.n(n),s=i(63038),r=i.n(s),a=i(48926),l=i.n(a),c=i(59713),d=i.n(c),h=i(87757),u=i.n(h),g=i(10605),p=i.n(g),f=i(11442),m=i.n(f),v=i(419),_=i(8369),b=i(23321),w=i(51109),y=i.n(w);function C(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function x(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?C(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):C(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const S={props:["type","data"],data:function(){return{ssCipher:["aes-128-gcm","aes-192-gcm","aes-256-gcm","chacha20-ietf-poly1305","aes-128-ctr","aes-192-ctr","aes-256-ctr","aes-128-cfb","aes-192-cfb","aes-256-cfb","chacha20-ietf","xchacha20","rc4-md5","xchacha20-ietf-poly1305"],vmessCipher:["none","auto","aes-128-gcm","chacha20-poly1305"],pType:["ss","vmess","socks5","http"],gType:["url-test","fallback","select","load-balance"],vmessType:["tcp","ws"],groupName:"",groupType:"select",groupUrl:"http://www.gstatic.com/generate_204",groupInterval:600,proxyType:"ss",proxyName:"",proxyServer:"",proxyPort:"",proxyChipher:"",proxyPassword:"",proxyUuid:"",proxyAlterid:"",proxyObfs:"",proxyObfshost:"",proxyTls:!1,proxyUsername:"",alterIdx:-1,proxySkipCertVerify:!1,proxyNetwork:"tcp",proxyWsPath:"",proxyWsHeaders:""}},computed:x({},(0,b.mapState)({})),methods:{confirmInput:function(){if(0===this.type){var e={name:this.groupName,proxies:[],type:this.groupType};"url-test"!==this.groupType&&"fallback"!==this.groupType&&"load-balance"!==this.groupType||(e.url=this.groupUrl,e.interval=this.groupInterval),this.$emit("inputDone",{type:0,content:e,index:this.alterIdx})}else if(1===this.type){var t={name:this.proxyName,type:this.proxyType,server:this.proxyServer,port:this.proxyPort};if("ss"===this.proxyType)t.cipher=this.proxyChipher,t.password=this.proxyPassword,this.proxyObfs&&(t.plugin="obfs",t["plugin-opts"]={mode:this.proxyObfs,host:this.proxyObfshost||"bing.com"});else if("vmess"===this.proxyType){if(t.uuid=this.proxyUuid,t.alterId=this.proxyAlterid,t.cipher=this.proxyChipher,this.proxyTls&&(t.tls=!0),this.proxySkipCertVerify&&(t["skip-cert-verify"]=!0),"ws"===this.proxyNetwork){t.network="ws";var i={path:this.proxyWsPath};try{i=x(x({},i),{},{headers:JSON.parse(this.proxyWsHeaders)})}catch(e){}t["ws-opts"]=i}}else"socks5"!==this.proxyType&&"http"!==this.proxyType||(this.proxyUsername&&this.proxyPassword&&(t.username=this.proxyUsername,t.password=this.proxyPassword),this.proxyTls&&(t.tls=!0),this.proxySkipCertVerify&&(t["skip-cert-verify"]=!0));this.$emit("inputDone",{type:1,content:t,index:this.alterIdx})}}},mounted:function(){if(this.data){if(0===this.type)this.groupName=this.data.name,this.groupType=this.data.type,"url"in this.data&&(this.groupUrl=this.data.url),"interval"in this.data&&(this.groupInterval=this.data.interval);else if(1===this.type){if(this.proxyName=this.data.name,this.proxyPort=this.data.port,this.proxyServer=this.data.server,this.proxyType=this.data.type,"password"in this.data&&(this.proxyPassword=this.data.password),"plugin"in this.data){var e=this.data["plugin-opts"],t=void 0===e?{}:e,i=t.mode,n=t.host;this.proxyObfs=i,this.proxyObfshost=n}"obfs-host"in this.data&&(this.proxyObfshost=this.data["obfs-host"]),"tls"in this.data&&(this.proxyTls=this.data.tls),"cipher"in this.data&&(this.proxyChipher=this.data.cipher),"uuid"in this.data&&(this.proxyUuid=this.data.uuid),"alterId"in this.data&&(this.proxyAlterid=this.data.alterId),"skip-cert-verify"in this.data&&(this.proxySkipCertVerify=this.data["skip-cert-verify"]),"network"in this.data&&(this.proxyNetwork=this.data.network);var o=this.data["ws-opts"];if(o){"path"in o&&(this.proxyWsPath=o.path);try{"headers"in o&&(this.proxyWsHeaders=JSON.stringify(o.headers))}catch(e){}}"username"in this.data&&(this.proxyUsername=this.data.username)}this.alterIdx=this.data._index}}};i(34954),i(7840);var k=i(51900);const L=(0,k.Z)(S,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main",attrs:{id:"main-append-proxy-view"}},[0===e.type?t("div",{staticClass:"input-view"},[t("div",{staticClass:"title"},[e._v(e._s(e.data?"Edit":"New")+" Proxy Group")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.groupName,expression:"groupName"}],attrs:{type:"text",placeholder:"Group Name"},domProps:{value:e.groupName},on:{input:function(t){t.target.composing||(e.groupName=t.target.value)}}}),e._v(" "),t("div",{staticClass:"group-type-list"},e._l(e.gType,(function(i,n){return t("div",{key:n},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.groupType,expression:"groupType"}],attrs:{type:"radio",id:i},domProps:{value:i,checked:e._q(e.groupType,i)},on:{change:function(t){e.groupType=i}}}),e._v(" "),t("label",{attrs:{for:i}},[e._v(e._s(i))])])})),0),e._v(" "),"select"!==e.groupType?t("input",{directives:[{name:"model",rawName:"v-model",value:e.groupUrl,expression:"groupUrl"}],attrs:{type:"text",placeholder:"URL"},domProps:{value:e.groupUrl},on:{input:function(t){t.target.composing||(e.groupUrl=t.target.value)}}}):e._e(),e._v(" "),"select"!==e.groupType?t("input",{directives:[{name:"model",rawName:"v-model",value:e.groupInterval,expression:"groupInterval"}],attrs:{type:"text",placeholder:"Interval ( Second )"},domProps:{value:e.groupInterval},on:{input:function(t){t.target.composing||(e.groupInterval=t.target.value)}}}):e._e()]):1===e.type?t("div",{staticClass:"input-view"},[t("div",{staticClass:"title"},[e._v(e._s(e.data?"Edit":"New")+" Proxy")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyName,expression:"proxyName"}],attrs:{type:"text",placeholder:"ä»£ç†åç§°"},domProps:{value:e.proxyName},on:{input:function(t){t.target.composing||(e.proxyName=t.target.value)}}}),e._v(" "),t("div",{staticClass:"proxy-type-list"},e._l(e.pType,(function(i,n){return t("div",{key:n},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyType,expression:"proxyType"}],attrs:{type:"radio",id:i},domProps:{value:i,checked:e._q(e.proxyType,i)},on:{change:function(t){e.proxyType=i}}}),e._v(" "),t("label",{attrs:{for:i}},[e._v(e._s(i))])])})),0),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyServer,expression:"proxyServer"}],attrs:{type:"text",placeholder:"æœåŠ¡å™¨"},domProps:{value:e.proxyServer},on:{input:function(t){t.target.composing||(e.proxyServer=t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyPort,expression:"proxyPort"}],attrs:{type:"text",placeholder:"ç«¯å£"},domProps:{value:e.proxyPort},on:{input:function(t){t.target.composing||(e.proxyPort=t.target.value)}}}),e._v(" "),"ss"===e.proxyType?t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyPassword,expression:"proxyPassword"}],attrs:{type:"text",placeholder:"Password"},domProps:{value:e.proxyPassword},on:{input:function(t){t.target.composing||(e.proxyPassword=t.target.value)}}}):e._e(),e._v(" "),"vmess"===e.proxyType?t("div",{staticClass:"cipher-list"},e._l(e.vmessCipher,(function(i,n){return t("div",{key:n},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyChipher,expression:"proxyChipher"}],attrs:{type:"radio",id:i},domProps:{value:i,checked:e._q(e.proxyChipher,i)},on:{change:function(t){e.proxyChipher=i}}}),e._v(" "),t("label",{attrs:{for:i}},[e._v(e._s(i))])])})),0):"ss"===e.proxyType?t("div",{staticClass:"cipher-list"},e._l(e.ssCipher,(function(i,n){return t("div",{key:n},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyChipher,expression:"proxyChipher"}],attrs:{type:"radio",id:i},domProps:{value:i,checked:e._q(e.proxyChipher,i)},on:{change:function(t){e.proxyChipher=i}}}),e._v(" "),t("label",{attrs:{for:i}},[e._v(e._s(i))])])})),0):e._e(),e._v(" "),"ss"===e.proxyType?t("div",{staticClass:"ss-list"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyObfs,expression:"proxyObfs"}],attrs:{type:"text",placeholder:"Obfs (Optional, tls or http)"},domProps:{value:e.proxyObfs},on:{input:function(t){t.target.composing||(e.proxyObfs=t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyObfshost,expression:"proxyObfshost"}],attrs:{type:"text",placeholder:"Obfs-host (Optional)"},domProps:{value:e.proxyObfshost},on:{input:function(t){t.target.composing||(e.proxyObfshost=t.target.value)}}})]):e._e(),e._v(" "),"vmess"===e.proxyType?t("div",{staticClass:"vmess-list"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyUuid,expression:"proxyUuid"}],attrs:{type:"text",placeholder:"UUID"},domProps:{value:e.proxyUuid},on:{input:function(t){t.target.composing||(e.proxyUuid=t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyAlterid,expression:"proxyAlterid"}],attrs:{type:"text",placeholder:"AlterId"},domProps:{value:e.proxyAlterid},on:{input:function(t){t.target.composing||(e.proxyAlterid=t.target.value)}}}),e._v(" "),"vmess"===e.proxyType?t("div",{staticClass:"cipher-list"},e._l(e.vmessType,(function(i,n){return t("div",{key:n},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyNetwork,expression:"proxyNetwork"}],attrs:{type:"radio",id:i},domProps:{value:i,checked:e._q(e.proxyNetwork,i)},on:{change:function(t){e.proxyNetwork=i}}}),e._v(" "),t("label",{attrs:{for:i}},[e._v(e._s(i))])])})),0):e._e()]):e._e(),e._v(" "),"http"===e.proxyType||"socks5"===e.proxyType?t("div",{staticClass:"input-view"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyUsername,expression:"proxyUsername"}],attrs:{type:"text",placeholder:"User Name (Optional)"},domProps:{value:e.proxyUsername},on:{input:function(t){t.target.composing||(e.proxyUsername=t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyPassword,expression:"proxyPassword"}],attrs:{type:"text",placeholder:"Password (Optional)"},domProps:{value:e.proxyPassword},on:{input:function(t){t.target.composing||(e.proxyPassword=t.target.value)}}})]):e._e(),e._v(" "),"vmess"===e.proxyType&&"ws"===e.proxyNetwork?t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyWsPath,expression:"proxyWsPath"}],attrs:{type:"text",placeholder:"ws path"},domProps:{value:e.proxyWsPath},on:{input:function(t){t.target.composing||(e.proxyWsPath=t.target.value)}}}):e._e(),e._v(" "),"vmess"===e.proxyType&&"ws"===e.proxyNetwork?t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyWsHeaders,expression:"proxyWsHeaders"}],attrs:{type:"text",placeholder:"ws headers (JSON)"},domProps:{value:e.proxyWsHeaders},on:{input:function(t){t.target.composing||(e.proxyWsHeaders=t.target.value)}}}):e._e(),e._v(" "),"vmess"===e.proxyType||"socks5"===e.proxyType||"http"===e.proxyType?t("div",[t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxyTls,expression:"proxyTls"}],attrs:{type:"checkbox",id:"vmess-tls"},domProps:{checked:Array.isArray(e.proxyTls)?e._i(e.proxyTls,null)>-1:e.proxyTls},on:{change:function(t){var i=e.proxyTls,n=t.target,o=!!n.checked;if(Array.isArray(i)){var s=e._i(i,null);n.checked?s<0&&(e.proxyTls=i.concat([null])):s>-1&&(e.proxyTls=i.slice(0,s).concat(i.slice(s+1)))}else e.proxyTls=o}}}),e._v(" "),t("label",{attrs:{for:"vmess-tls"}},[e._v("TLS")])]),e._v(" "),t("div",[t("input",{directives:[{name:"model",rawName:"v-model",value:e.proxySkipCertVerify,expression:"proxySkipCertVerify"}],attrs:{type:"checkbox",id:"vmess-skip-cert-verify"},domProps:{checked:Array.isArray(e.proxySkipCertVerify)?e._i(e.proxySkipCertVerify,null)>-1:e.proxySkipCertVerify},on:{change:function(t){var i=e.proxySkipCertVerify,n=t.target,o=!!n.checked;if(Array.isArray(i)){var s=e._i(i,null);n.checked?s<0&&(e.proxySkipCertVerify=i.concat([null])):s>-1&&(e.proxySkipCertVerify=i.slice(0,s).concat(i.slice(s+1)))}else e.proxySkipCertVerify=o}}}),e._v(" "),t("label",{attrs:{for:"vmess-skip-cert-verify"}},[e._v("è·³è¿‡è¯ä¹¦éªŒè¯")])])]):e._e()]):e._e(),e._v(" "),t("div",{staticClass:"btns"},[t("div",{staticClass:"btn cancel",on:{click:function(t){return e.$emit("inputCancel")}}},[e._v("å–æ¶ˆ")]),e._v(" "),t("div",{staticClass:"btn confirm",on:{click:e.confirmInput}},[e._v("ç¡®å®š")])])])}),[],!1,null,"f638b328",null).exports;var N=i(57147),D=i.n(N),I=i(71017),E=i.n(I);function T(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}var M="proxy-groups",A="proxies",O="rules";const P={props:["profileName"],components:{draggable:y(),AppendProxyView:L},data:function(){return{conf:null,specialProxies:[{name:"DIRECT"},{name:"REJECT"}],addType:-1,addData:null,saveBtn:"ä¿å­˜"}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?T(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):T(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,b.mapState)({clashPath:function(e){return e.app.clashPath},profilesPath:function(e){return e.app.profilesPath}})),methods:{proxy2group:function(e){return e.name},removeFromGroup:function(e,t){this.conf[M][e].proxies.splice(t,1)},removeFromProxies:function(e,t){e.stopPropagation();var i=this.conf[A][t].name;this.conf[A].splice(t,1),this.conf[M].forEach((function(e){e.proxies=e.proxies.filter((function(e){return e!==i}))}))},removeGroup:function(e,t){e.stopPropagation();var i=this.conf[M][t].name;this.conf[M].splice(t,1),this.conf[M].forEach((function(e){e.proxies=e.proxies.filter((function(e){return e!==i}))}))},renameGroup:function(e,t){this.conf[M].forEach((function(i){i.proxies=i.proxies.map((function(i){return i===e?t:i}))}))},renameRule:function(e,t){this.conf[O]=this.conf[O].map((function(i){if(/\s*MATCH\s*,([^,]*)($|,*|\/\/|#)/.test(i)){if(RegExp.$1.trim()===e.trim())return"MATCH,".concat(t).concat(RegExp.$2)}else if(/([^,]*?),([^,]*?),([^,]*)($|,*|\/\/|#)/.test(i)&&RegExp.$3.trim()===e.trim())return"".concat(RegExp.$1,",").concat(RegExp.$2,",").concat(t).concat(RegExp.$4);return i}))},handleInputDone:function(e){if(this.addType=-1,0===e.type)if(-1===e.index)this.conf[M].push(e.content);else{var t=this.conf[M][e.index].proxies,i=e.content,n=this.conf[M][e.index].name,o=e.content.name;i.proxies=t,this.conf[M][e.index]=i,this.renameGroup(n,o),this.renameRule(n,o)}else if(1===e.type)if(-1===e.index)this.conf[A].push(e.content);else{var s=e.content.name,r=this.conf[A][e.index].name;this.conf[A][e.index]=e.content,this.renameGroup(r,s),this.renameRule(r,s)}},newGroup:function(){this.addType=0,this.addData=null},editGroup:function(e,t){var i=e.type;["url-test","fallback","select","load-balance"].includes(i)?(this.addType=0,e._index=t,this.addData=e):this.$alert({content:"æ— æ³•ç¼–è¾‘ä»£ç†ç»„ç±»åž‹ [".concat(i,"].")})},newProxy:function(){this.addType=1,this.addData=null},editProxy:function(e,t){var i=e.type;["ss","vmess","http","socks"].includes(i)?(this.addType=1,e._index=t,this.addData=e):this.$alert({content:"æ— æ³•ç¼–è¾‘ä»£ç†ç±»åž‹ [".concat(i,"].")})},loadData:function(){var e=E().join(this.profilesPath,this.profileName),t=D().readFileSync(e,"utf8");try{this.conf=m().parse(t)}catch(e){}},saveData:function(){if("ä¿å­˜"===this.saveBtn)try{var e=E().join(this.profilesPath,this.profileName);D().writeFileSync(e,m().stringify(this.conf)),this.$emit("done")}catch(e){this.$emit("error")}}},mounted:function(){this.loadData()}};i(60420),i(48619);const R=(0,k.Z)(P,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-config-view"},[t("div",{staticClass:"floating"},[t("div",{staticClass:"hint"},[e._v("æ‹–åŠ¨ä»¥æŽ’åºæˆ–æ·»åŠ åˆ°å³ä¾§åˆ—è¡¨ä¸­.")]),e._v(" "),t("div",{staticClass:"floating-right"},[t("div",{staticClass:"main-btn save",on:{click:e.saveData}},[e._v(e._s(e.saveBtn))]),e._v(" "),t("div",{staticClass:"main-btn reload",on:{click:function(t){return e.$emit("cancel")}}},[e._v("å–æ¶ˆ")])])]),e._v(" "),e.conf?t("div",{staticClass:"drag"},[t("div",{staticClass:"proxy"},[e._m(0),e._v(" "),t("draggable",{staticClass:"dragArea",attrs:{group:{name:"people",pull:"clone",put:!1,revertClone:!0},clone:e.proxy2group,delay:300,animation:200,"delay-on-touch-only":!0},model:{value:e.specialProxies,callback:function(t){e.specialProxies=t},expression:"specialProxies"}},e._l(e.specialProxies,(function(i,n){return t("div",{key:n,staticClass:"proxy-item left-item"},[e._v("\n          "+e._s(i.name)+"\n        ")])})),0),e._v(" "),t("div",{staticClass:"section-title"},[t("h2",[e._v("ä»£ç†ç»„")]),e._v(" "),t("div",{staticClass:"add-icon",on:{click:e.newGroup}},[e._v("æ·»åŠ ")])]),e._v(" "),t("draggable",{staticClass:"dragArea",attrs:{group:{name:"people",pull:"clone",put:!1,revertClone:!0},clone:e.proxy2group,delay:300,animation:200,"delay-on-touch-only":!0},model:{value:e.conf["proxy-groups"],callback:function(t){e.$set(e.conf,"proxy-groups",t)},expression:"conf['proxy-groups']"}},e._l(e.conf["proxy-groups"],(function(i,n){return t("div",{key:n,staticClass:"proxy-item left-item",on:{click:function(t){return e.editGroup(i,n)}}},[t("div",[e._v(e._s(i.name))]),e._v(" "),t("span",{staticClass:"icon text-white",on:{click:function(t){return e.removeGroup(t,n)}}},[e._v("delete")])])})),0),e._v(" "),t("div",{staticClass:"section-title"},[t("h2",[e._v("ä»£ç†")]),e._v(" "),t("div",{staticClass:"add-icon",on:{click:e.newProxy}},[e._v("æ·»åŠ ")])]),e._v(" "),t("draggable",{staticClass:"dragArea",attrs:{group:{name:"people",pull:"clone",put:!1,revertClone:!0},clone:e.proxy2group,delay:300,animation:200,"delay-on-touch-only":!0},model:{value:e.conf.proxies,callback:function(t){e.$set(e.conf,"proxies",t)},expression:"conf['proxies']"}},e._l(e.conf.proxies,(function(i,n){return t("div",{key:n,staticClass:"proxy-item left-item",on:{click:function(t){return e.editProxy(i,n)}}},[t("div",[e._v(e._s(i.name))]),e._v(" "),t("span",{staticClass:"icon text-white",on:{click:function(t){return e.removeFromProxies(t,n)}}},[e._v("delete")])])})),0)],1),e._v(" "),t("div",{staticClass:"proxy-group"},e._l(e.conf["proxy-groups"],(function(i,n){return t("div",{key:n},[t("div",{staticClass:"section-title"},[t("h2",[e._v(e._s(i.name))]),e._v(" "),t("div",{staticClass:"type-icon"},[e._v("( "+e._s(i.type)+" )")])]),e._v(" "),t("draggable",{staticClass:"dragArea",attrs:{group:{name:"people"},scroll:!0,scrollSensitivity:100,scrollSpeed:50,delay:300,animation:200,"delay-on-touch-only":!0},model:{value:i.proxies,callback:function(t){e.$set(i,"proxies",t)},expression:"group.proxies"}},e._l(i.proxies,(function(i,o){return t("div",{key:o,staticClass:"proxy-item right-item"},[t("div",[e._v(e._s(i))]),e._v(" "),t("span",{staticClass:"icon text-white",on:{click:function(t){return e.removeFromGroup(n,o)}}},[e._v("delete")])])})),0)],1)})),0)]):e._e(),e._v(" "),-1!==e.addType?t("append-proxy-view",{attrs:{data:e.addData,type:e.addType},on:{inputDone:e.handleInputDone,inputCancel:function(t){e.addType=-1}}}):e._e()],1)}),[function(){var e=this._self._c;return e("div",{staticClass:"section-title"},[e("h2",[this._v("ç‰¹æ®Šä»£ç†")])])}],!1,null,"9e0b3cf4",null).exports;function F(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function B(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?F(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):F(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const V={props:["profileName"],data:function(){return{ruleTypes:["DOMAIN-SUFFIX","DOMAIN","DOMAIN-KEYWORD","IP-CIDR","SRC-IP-CIDR","GEOIP","PROCESS-NAME","DST-PORT","SRC-PORT","MATCH"],selectedType:"",proxyGroups:[],selectedGroup:"",content:""}},computed:B(B({},(0,b.mapState)({profilesPath:function(e){return e.app.profilesPath}})),(0,b.mapGetters)(["clashAxiosClient"])),methods:{inputDone:function(){var e=null;"MATCH"===this.selectedType&&this.selectedGroup?e={type:this.selectedType,payload:"",proxy:this.selectedGroup}:this.content&&this.selectedType&&this.selectedGroup&&(e={type:this.selectedType,payload:this.content,proxy:this.selectedGroup}),this.$emit("done",e)},handleMaskClick:function(e){this.$emit("close")}},mounted:function(){try{var e=m().parse(D().readFileSync(E().join(this.profilesPath,this.profileName)).toString()),t=e.proxies,i=void 0===t?[]:t,n=e["proxy-groups"],s=void 0===n?[]:n,r=i.map((function(e){return e.name})),a=s.map((function(e){return e.name}));this.proxyGroups=["DIRECT","REJECT"].concat(o()(a),o()(r))}catch(e){}}};i(72852),i(20988);const W=(0,k.Z)(V,(function(){var e=this,t=e._self._c;return t("div",{attrs:{type:"text/x-template",id:"modal-template"}},[t("transition",{attrs:{name:"modal"}},[t("div",{staticClass:"modal-mask",on:{mousedown:e.handleMaskClick}},[t("div",{staticClass:"modal-wrapper"},[t("div",{staticClass:"modal-container",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{staticClass:"model-title"},[t("div",[e._v("åˆ›å»ºæ–°è§„åˆ™")]),e._v(" "),t("div",{staticClass:"rule-floating-btns"},[t("div",{staticClass:"rule-floating-ok",on:{click:e.inputDone}},[e._v("æ·»åŠ ")]),e._v(" "),t("div",{staticClass:"rule-floating-cancel",on:{click:function(t){return e.$emit("close")}}},[e._v("\n                å–æ¶ˆ\n              ")])])]),e._v(" "),t("div",{staticClass:"scroll-view"},["MATCH"!==e.selectedType?t("div",{staticClass:"rule-section-title"},[e._v("\n              å†…å®¹\n            ")]):e._e(),e._v(" "),t("div",["MATCH"!==e.selectedType?t("input",{directives:[{name:"model",rawName:"v-model",value:e.content,expression:"content"}],attrs:{placeholder:"eg: google.com",id:"rule-content",type:"text"},domProps:{value:e.content},on:{input:function(t){t.target.composing||(e.content=t.target.value)}}}):e._e()]),e._v(" "),t("div",{staticClass:"rule-section-title"},[e._v("ç±»åž‹")]),e._v(" "),t("div",{staticClass:"rule-type-group"},e._l(e.ruleTypes,(function(i,n){return t("div",{key:n,class:{"rule-type-item":!0,"rule-type-selected":i===e.selectedType},on:{click:function(t){e.selectedType=i}}},[e._v("\n                "+e._s(i)+"\n              ")])})),0),e._v(" "),t("div",{staticClass:"rule-section-title"},[e._v("ä»£ç†æˆ–ç­–ç•¥")]),e._v(" "),t("div",{staticClass:"rule-proxy-group"},e._l(e.proxyGroups,(function(i,n){return t("div",{key:n,class:{"rule-proxy-item":!0,"rule-proxy-selected":i===e.selectedGroup},on:{click:function(t){e.selectedGroup=i}}},[e._v("\n                "+e._s(i)+"\n              ")])})),0)])])])])])],1)}),[],!1,null,"eea841c4",null).exports;function H(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function z(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?H(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):H(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var j=i(24793),U=[];const $={props:["profileName"],data:function(){return{listData:[],memoryData:[],showAlterModel:!1,saveBtnText:"ä¿å­˜",axiosSource:null,filterKeywords:"",providers:{}}},components:{RuleAlterView:W},watch:{},computed:z(z({},(0,b.mapState)({clashPath:function(e){return e.app.clashPath},profiles:function(e){return e.app.profiles},profilesPath:function(e){return e.app.profilesPath}})),(0,b.mapGetters)(["clashAxiosClient"])),methods:{handleRuleClick:function(e){var t=this;return l()(u().mark((function i(){var n,o,s;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(n=e.type,o=e.payload,"RULE-SET"!==n){i.next=13;break}return i.prev=2,i.next=5,t.clashAxiosClient.put("/providers/rules/".concat(encodeURIComponent(o)));case 5:s=i.sent,204===s.status?(t.loadData(),(0,_.c0)("Success","RULE-SET [".concat(o,"] has been updated!"))):(0,_.c0)("Failed","RULE-SET [".concat(o,"] update failed(Server Error)!")),i.next=13;break;case 10:i.prev=10,i.t0=i.catch(2),(0,_.c0)("Failed","RULE-SET [".concat(o,"] æ›´æ–°å¤±è´¥(ç½‘ç»œé”™è¯¯)!"));case 13:case"end":return i.stop()}}),i,null,[[2,10]])})))()},fromNow:function(e){return p()(e).locale('zh-cn').fromNow()},providerOfPayload:function(e){var t=this.providers[e];return t||null},moveItem:function(e,t,i){this.removeItem(t,i),e?this.memoryData.unshift(t):this.memoryData.push(t),this.listData=this.memoryData.slice(0,100)},randomBGC:function(e){var t=U.find((function(t){return t.type===e}));if(t)return{"background-color":"rgb(".concat(t.r,",").concat(t.g,",").concat(t.b,")")};var i=Math.floor(100*Math.random()+10),n=Math.floor(100*Math.random()+10),o=Math.floor(100*Math.random()+10);return U.push({type:e,r:i,g:n,b:o}),{"background-color":"rgb(".concat(i,",").concat(n,",").concat(o,")")}},inputDone:function(e){this.showAlterModel=!1,e&&(this.memoryData.unshift(e),this.listData.unshift(e))},handleFilterKeywordInput:j.debounce((function(e){var t=e.target;if(t){var i=t.value;this.filterKeywords=i,this.loadData()}}),500),applyRules:function(){var e=this;return l()(u().mark((function t(){var i,n,o,s,r;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:try{i=(0,_.EP)(e.memoryData),n=i.map((function(e){var t=e.type,i=e.payload,n=e.proxy,o=e.params,s=void 0===o?"":o;return i?"".concat(t,",").concat(i,",").concat(n).concat(s):"".concat(t,",").concat(n)})),o=E().join(e.profilesPath,e.profileName),s=D().readFileSync(o,"utf8"),(r=m().parse(s)).rules=n,D().writeFileSync(o,m().stringify(r)),e.$emit("done"),e.saveBtnText="Done"}catch(t){e.$emit("error"),e.saveBtnText="Fail"}setTimeout((function(){e.saveBtnText="ä¿å­˜"}),3e3);case 2:case"end":return t.stop()}}),t)})))()},removeItem:function(e,t){var i=this.memoryData.findIndex((function(t){return t.payload===e.payload&&t.proxy===e.proxy&&t.type===e.type}));i>-1&&(this.memoryData.splice(i,1),this.listData.splice(t,1))},loadData:function(){var e=this;return l()(u().mark((function t(){var i,n,o,s,a,l,c,d,h,g,p,f;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=E().join(e.profilesPath,e.profileName),n=D().readFileSync(i,"utf8"),t.prev=2,t.next=5,Promise.all([e.clashAxiosClient.get("/rules"),e.clashAxiosClient.get("/providers/rules")]);case 5:o=t.sent,s=r()(o,2),a=s[0].data,l=void 0===a?{}:a,c=s[1].data,d=(c=void 0===c?{}:c).providers,e.providers=d,h=l.rules,void 0===h?[]:h,g=m().parse(n),e.memoryData=g.rules.map((function(e){var t=e.split(",");return 2===t.length?{type:t[0].trim(),payload:"",proxy:t[1].trim(),params:""}:3===t.length?{payload:t[1].trim(),proxy:t[2].trim(),type:t[0].trim(),params:""}:4===t.length?{payload:t[1].trim(),proxy:t[2].trim(),type:t[0].trim(),params:",".concat(t[3])}:null})).filter((function(e){return e})),""!==e.filterKeywords?(p=e.filterKeywords.trim().split(/\s+/).join("|"),f=new RegExp(p,"i"),e.listData=e.memoryData.filter((function(e){return f.test(e.proxy)||f.test(e.payload)||f.test(e.type)})).slice(0,100)):e.listData=e.memoryData.slice(0,100),t.next=21;break;case 19:t.prev=19,t.t0=t.catch(2);case 21:case"end":return t.stop()}}),t,null,[[2,19]])})))()}},mounted:function(){this.loadData()},destroyed:function(){}};i(91924),i(3930);const K=(0,k.Z)($,(function(){var e=this,t=e._self._c;return t("div",{attrs:{id:"main-log-view"}},[t("div",{staticClass:"header"},[t("div",{staticClass:"title"},[e._v("å‰100ä¸ªåŒ¹é…è§„åˆ™("+e._s(e.memoryData.length)+").")]),e._v(" "),t("div",{staticClass:"header-btns"},[t("div",{staticClass:"btn btn-add md-button",on:{click:function(t){e.showAlterModel=!0}}},[e._v("\n        æ·»åŠ \n      ")]),e._v(" "),t("div",{staticClass:"btn btn-save md-button",on:{click:e.applyRules}},[e._v("\n        "+e._s(e.saveBtnText)+"\n      ")]),e._v(" "),t("div",{staticClass:"btn btn-back md-button",on:{click:function(t){return e.$emit("cancel")}}},[e._v("\n        å–æ¶ˆ\n      ")])])]),e._v(" "),t("div",{staticClass:"filter-view"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.filterKeywords,expression:"filterKeywords"}],attrs:{type:"text",placeholder:"æŒ‰å…³é”®å­—è¿‡æ»¤"},domProps:{value:e.filterKeywords},on:{input:[function(t){t.target.composing||(e.filterKeywords=t.target.value)},function(t){return e.handleFilterKeywordInput(t)}]}})]),e._v(" "),t("div",{staticClass:"log-list"},e._l(e.listData,(function(i,n){return t("div",{key:n,staticClass:"log-item",attrs:{title:i.payload},on:{click:function(t){return e.handleRuleClick(i)}}},[t("div",{staticClass:"left"},[t("div",{class:["url",e.providerOfPayload(i.payload)?"rule-set":""]},[e._v("\n          "+e._s(i.payload)+"\n        ")]),e._v(" "),t("div",{staticClass:"rule"},[e._v("\n          "+e._s(i.type)+"\n          "),e.providerOfPayload(i.payload)?t("div",[e._v("\n            Rules: "+e._s(e.providerOfPayload(i.payload).ruleCount)+"\n          ")]):e._e(),e._v(" "),e.providerOfPayload(i.payload)?t("div",[e._v("\n            Last Updated:\n            "+e._s(e.fromNow(e.providerOfPayload(i.payload).updatedAt))+"\n          ")]):e._e(),e._v(" "),e.providerOfPayload(i.payload)?t("div",[e._v("\n            "+e._s(e.providerOfPayload(i.payload).vehicleType)+"\n            "+e._s(e.providerOfPayload(i.payload).behavior)+"\n          ")]):e._e()])]),e._v(" "),t("div",{staticClass:"right-main"},[t("div",{staticClass:"right",style:e.randomBGC(i.proxy)},[e._v("\n          "+e._s(i.proxy)+"\n        ")]),e._v(" "),t("span",{staticClass:"icon ctl-icon",on:{click:function(t){return t.stopPropagation(),e.moveItem(!0,i,n)}}},[e._v("north")]),e._v(" "),t("span",{staticClass:"icon ctl-icon",on:{click:function(t){return t.stopPropagation(),e.moveItem(!1,i,n)}}},[e._v("south")]),e._v(" "),t("span",{staticClass:"icon ctl-icon",on:{click:function(t){return t.stopPropagation(),e.removeItem(i,n)}}},[e._v("delete")])])])})),0),e._v(" "),e.showAlterModel?t("rule-alter-view",{attrs:{"profile-name":e.profileName},on:{close:function(t){e.showAlterModel=!1},done:e.inputDone}}):e._e()],1)}),[],!1,null,"459dde1e",null).exports;const q=require("qrcode");var Z=i.n(q),G=i(72298);const Y={name:"QRCodeView",components:{},props:{url:String},data:function(){return{src:"",isWithSheme:!0}},watch:{isWithSheme:function(){this.updateQrcode()}},computed:{finalURL:function(){return this.isWithSheme?"clash://install-config?url=".concat(encodeURIComponent(this.url)):this.url},shorternFinalURL:function(){return this.finalURL?(0,_.XW)(this.finalURL,120):""}},methods:{handleGoToURL:function(){(0,_.fl)(this.url)},updateQrcode:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,Z().toDataURL(e.finalURL);case 3:e.src=t.sent,t.next=8;break;case 6:t.prev=6,t.t0=t.catch(0);case 8:case"end":return t.stop()}}),t,null,[[0,6]])})))()}},mounted:function(){this.updateQrcode()}};i(78518);const Q=(0,k.Z)(Y,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"qrcode-view-main",on:{click:function(t){return e.$emit("hide")}}},[t("div",{staticClass:"content",on:{click:function(e){e.stopPropagation()}}},[t("img",{attrs:{src:e.src,alt:""}}),e._v(" "),t("div",{staticClass:"url",on:{click:e.handleGoToURL}},[e._v("\n      "+e._s(e.shorternFinalURL)+"\n    ")]),e._v(" "),t("div",{staticClass:"btn",on:{click:function(t){e.isWithSheme=!e.isWithSheme}}},[e._v("\n      "+e._s(e.isWithSheme?"åˆ é™¤":"åŒ…æ‹¬")+" è·³è½¬æ–¹æ¡ˆ\n    ")])])])}),[],!1,null,"2c37fa0d",null).exports;var X=i(13338),J=i(1581),ee=i(71289);function te(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(!e)return;if("string"==typeof e)return ie(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);"Object"===i&&e.constructor&&(i=e.constructor.name);if("Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return ie(e,t)}(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,r=!0,a=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return r=e.done,e},e:function(e){a=!0,s=e},f:function(){try{r||null==i.return||i.return()}finally{if(a)throw s}}}}function ie(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}function ne(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function oe(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?ne(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):ne(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var se=i(57147),re=i(71017),ae=i(54387),le=i(24793),ce=ae.CancelToken,de="manual-stop";const he={data:function(){return{btnType:0,resultHint:"ä»ŽURLä¸‹è½½",editProfileName:"",editProfileType:-1,fileWatcher:null,inputFocus:!1,subUrl:"",downlodingUrls:{},dragSelectedName:"",qrcodeURL:"",intervalID:null,now:p()(),loadingProfileIndex:[]}},components:{draggable:y(),ConfigView:R,RuleView:K,QRCodeView:Q,Hint:X.Z},directives:{focus:{update:function(e,t){t.value&&e.focus()}}},computed:oe(oe(oe({},(0,b.mapState)({clashPath:function(e){return e.app.clashPath},pfs:function(e){return e.app.profiles},confData:function(e){return e.app.confData},profilesPath:function(e){return e.app.profilesPath}})),(0,b.mapGetters)(["clashAxiosClient"])),{},{profiles:{get:function(){var e=this.pfs.files;return void 0===e?[]:e},set:function(e){this.changeProfiles({profiles:e})}},getBtnText:function(){return 3===this.btnType?"ä¸‹è½½ä¸­":1===this.btnType?"é”™è¯¯!":2===this.btnType?"æˆåŠŸ!":"ä¸‹è½½"},getRightBtnText:function(){return"ç›´è¿žæ¨¡å¼"},getRightBtnClass:function(){return{confirm:!0,"confirm-right":!0,"btn-error":1===this.btnType,"btn-success":2===this.btnType,"btn-loading":3===this.btnType}},getBtnClass:function(){return{confirm:!0,"confirm-left":!0,"btn-error":1===this.btnType,"btn-success":2===this.btnType,"btn-loading":3===this.btnType}}}),methods:oe(oe({},(0,b.mapMutations)({changeProfiles:"CHANGE_PROFILES",changeProfilesIndex:"CHANGE_PROFILES_INDEX",changeProfile:"CHANGE_PROFILE",appendProfile:"APPEND_PROFILE",deleteProfile:"DELETE_PROFILE"})),{},{handleOpenHomeWeb:function(e){(0,_.fl)(e)},isProifleExpired:function(e){var t=e.time,i=e.interval;if(i>0&&t)try{var n=se.statSync(re.join(this.profilesPath,t)).mtime;if(n)return p()(n).isBefore(p()().subtract(i,"hours"))}catch(e){}return!1},parserHint:function(e){var t=e.url,i=e.reg;return t?"url (".concat(t.slice(0,8),"...").concat(t.slice(-20),")"):i?"reg (".concat(i,")"):""},matchingParserCount:function(e){var t=this.settings.profileParsersText,i=[];if(t)try{var n=m().parse(t).parsers;i=(void 0===n?[]:n)||[]}catch(e){}var o=e.url;return o?i.filter((function(e){var t=e.url,i=e.reg;return t?t===o:i?new RegExp(i).test(o):void 0})):[]},handleProfileRightClick:function(e,t,i){var n=this;return l()(u().mark((function o(){var s,r;return u().wrap((function(o){for(;;)switch(o.prev=o.next){case 0:3===e.which&&(s=t.url,r=""===s,n.$menu([{icon:"home",text:"æ‰“å¼€é…ç½®ç½‘ç«™",hide:!(null!=t&&t.homeWeb),click:function(){n.handleOpenHomeWeb(t.homeWeb)}},{icon:"edit",text:"ç¼–è¾‘",click:function(){n.openProfile(t)}},{icon:"edit",text:"åœ¨ç³»ç»Ÿä¸­ç¼–è¾‘",click:function(){n.openProfile(t,!0)}},{icon:"refresh",text:"æ›´æ–°",hide:r,click:function(){n.refreshProfile(t)}},{text:"æ‰“å¼€æ–‡ä»¶æ‰€åœ¨ä½ç½®",icon:"folder",click:function(){n.openProfileInFolder(t)}},{icon:"merge_type",text:"Diff",hide:r,click:function(){n.makeDiff(t)}},{icon:"send",text:"ä»£ç†",click:function(){n.editProfile(t)}},{icon:"rule",text:"è§„åˆ™",click:function(){n.editProfileRule(t)}},{icon:"content_copy",text:"å¤åˆ¶",click:function(){n.handleCopyProfile(t)}},{icon:"qr_code",text:"äºŒç»´ç ",hide:r,click:function(){n.handleQrcodeOpen(t)}},{icon:"account_tree",text:"é…ç½®æ–‡ä»¶é¢„å¤„ç†",hide:r,click:function(){n.handleParserInfoShow(t)}},{icon:"code",text:"è¿è¡Œè„šæœ¬",click:function(){n.handleRunScirpt(t)}},{icon:"settings",text:"è®¾ç½®",click:function(){n.handleEditItem(i)}},{icon:"delete",text:"åˆ é™¤",click:function(){n.handleDeleteProfile(i)}}],e));case 1:case"end":return o.stop()}}),o)})))()},openProfileInFolder:function(e){G.shell.showItemInFolder(re.join(this.profilesPath,e.time))},handleUpdateAllProfiles:function(){var e,t=te(this.profiles);try{for(t.s();!(e=t.n()).done;){var i=e.value;this.refreshProfile(i,{ignoreSelectAfterUpdated:!0})}}catch(e){t.e(e)}finally{t.f()}},handleParserInfoShow:function(e){var t=this;return l()(u().mark((function i(){var n,o,s,a,l,c,d,h,g;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n=t.matchingParserCount(e),o=n.map((function(e,i){return"".concat(i+1,". ").concat(t.parserHint(e))})).join("\n"),i.next=4,t.$select({title:"æ‰¾åˆ° ".concat(n.length," ä¸ªåŒ¹é…è§£æžå™¨"),message:"".concat(o),items:["ç¼–è¾‘è§£æžå™¨","ç¡®è®¤"]});case 4:if(s=i.sent,a=r()(s,1),0!==a[0]){i.next=22;break}return l="profileParsersText",(c=t.settings[l])||(c="parsers: # array\n"),i.prev=11,i.next=14,t.$code({code:c,language:"yaml",fontSize:t.settings.editorFontSize});case 14:d=i.sent,h=d.code,g=void 0===h?"":h,t.settings[l]=g,i.next=22;break;case 20:i.prev=20,i.t0=i.catch(11);case 22:case"end":return i.stop()}}),i,null,[[11,20]])})))()},handleRunScirpt:function(e){return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:(0,J.TX)((0,_.EP)(e),J.lJ);case 1:case"end":return t.stop()}}),t)})))()},handleQrcodeOpen:function(e){var t=e.url;t&&(this.qrcodeURL=t)},handleDragStart:function(){var e=this.pfs.index;(void 0===e?-1:e)<0||(this.dragSelectedName=this.pfs.files[this.pfs.index].time)},handleDragEnd:function(){var e=this;if(""!==this.dragSelectedName){var t=this.pfs.files.findIndex((function(t){return t.time===e.dragSelectedName}));this.changeProfilesIndex({index:t})}},handleCopyProfile:function(e){var t=this;return l()(u().mark((function i(){var n,o,s,r;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n=[{name:"åå­—",key:"filename",placeholder:"è¾“å…¥ä¸€ä¸ªæ–°çš„æ–‡ä»¶å",required:!0}],i.prev=1,i.next=4,t.$input({title:"å¤åˆ¶é…ç½®æ–‡ä»¶",data:n});case 4:o=i.sent,s=o.filename,r=void 0===s?"":s,t.localCopy(r,re.join(t.profilesPath,e.time)),i.next=12;break;case 10:i.prev=10,i.t0=i.catch(1);case 12:case"end":return i.stop()}}),i,null,[[1,10]])})))()},handleEditItem:function(e){var t=this;return l()(u().mark((function i(){var n,o,s,r,a,l,c,d,h,g,p,f,m,v,_,b,w;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n=oe({},t.pfs.files[e]),"ç¼–è¾‘é…ç½®ä¿¡æ¯",o=n.interval,s=void 0===o?0:o,r=n.cron,a=void 0===r?"":r,l=[{key:"name",name:"åå­—",required:!0,value:n.name},{key:"url",name:"URL",value:n.url},{key:"headers",name:"æ ‡å¤´",value:n.headers,placeholder:"key1:value1\nkey2:value2"},{key:"interval",name:"æ›´æ–°é—´éš”(å°æ—¶)",validate:function(e){return/^\d+$/.test(e)?"":"æ›´æ–°é—´éš”å¿…é¡»æ˜¯æ•´æ•°"},value:s},{key:"cron",name:"æ›´æ–°å®šæ—¶ç¨‹åºCron (UNIX)",value:a,placeholder:"0 0 * * *"}],i.prev=4,i.next=7,t.$input({title:"ç¼–è¾‘é…ç½®ä¿¡æ¯",data:l});case 7:c=i.sent,d=c.name,h=void 0===d?"":d,g=c.url,p=void 0===g?"":g,f=c.interval,m=void 0===f?0:f,v=c.cron,_=void 0===v?"":v,b=c.headers,w=void 0===b?"":b,n.name=h,n.url=p,n.interval=1*m,n.cron=_,n.headers=w,t.changeProfile({index:e,profile:n}),i.next=28;break;case 26:i.prev=26,i.t0=i.catch(4);case 28:case"end":return i.stop()}}),i,null,[[4,26]])})))()},listItemClassNames:function(e){var t=["list-item"];""===this.pfs.files[e].url&&t.push("item-local");var i=this.pfs.index;return e===(void 0===i?-1:i)&&t.push("item-cur"),t},handleURLConfirm:function(e){var t=this;return l()(u().mark((function i(){return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(13!==e.keyCode){i.next=3;break}return i.next=3,t.handleDownload();case 3:case"end":return i.stop()}}),i)})))()},handleDownload:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(""!==e.subUrl){t.next=2;break}return t.abrupt("return");case 2:if(3!==e.btnType){t.next=4;break}return t.abrupt("return");case 4:return t.prev=4,e.btnType=3,t.next=8,e.updateConfig({url:e.subUrl,selectAfterUpdated:!0});case 8:t.sent?(e.subUrl="",e.btnType=2):e.btnType=1,t.next=15;break;case 12:t.prev=12,t.t0=t.catch(4),e.btnType=1;case 15:setTimeout((function(){e.btnType=0}),3e3);case 16:case"end":return t.stop()}}),t,null,[[4,12]])})))()},handleImport:function(){var e=this;return l()(u().mark((function t(){var i,n;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,G.ipcRenderer.invoke("dialog","showOpenDialogSync",{properties:["openFile"]});case 2:(i=t.sent)&&i.length>0&&(n=i[0],e.localCopy(re.basename(n),re.resolve(n)));case 4:case"end":return t.stop()}}),t)})))()},dropProfile:function(e){e.preventDefault(),e.stopPropagation();var t,i=te(e.dataTransfer.files);try{for(i.s();!(t=i.n()).done;){var n=t.value;this.localCopy(re.basename(n.path),re.resolve(n.path))}}catch(e){i.e(e)}finally{i.f()}},dragOverProfile:function(e){e.preventDefault(),e.stopPropagation()},editDone:function(){var e=this,t=this.pfs.files.findIndex((function(t){return t.time===e.editProfileName}));t===this.pfs.index&&this.switchProfile(t),this.editProfileName="",this.editProfileType=-1},localCopy:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(""!==e){var i=(new Date).getTime()+".yml",n=oe({},this.pfs),o=n.files.findIndex((function(t){return t.name===e&&""===t.url}));if(o>-1&&o<n.files.length)this.$alert({content:"æœ¬åœ°æ–‡ä»¶å·²å­˜åœ¨.",title:"é”™è¯¯"});else{var s={url:"",time:i,name:e,selected:[]};this.appendProfile({profile:s});var r=re.join(this.clashPath,"config.yaml"),a=n.files,l=n.index,c=void 0===l?-1:l;if(c>=0&&c<a.length){var d=re.join(this.profilesPath,a[c].time);se.existsSync(d)&&(r=d)}""!==t&&(r=t),se.copyFileSync(r,re.join(this.profilesPath,i))}}},handleDeleteProfile:function(e){var t=this;return l()(u().mark((function i(){var n,o,s,r,a,l,c,d,h,g,p,f,m;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n=t.pfs.files[e],o=n.name,n.url,i.next=3,(0,_.vC)({type:"warning",message:'æ‚¨ç¡®å®šè¦åˆ é™¤ "'.concat(o,'"?'),buttons:["æ˜¯","å¦"]});case 3:if(s=i.sent,0===s.response){try{for(r=t.pfs.files,a=(void 0===r?[]:r)[e].time,l=a.slice(0,-4)+".base.yml",c=a.slice(0,-4)+".change.yml",d=0,h=[a,l,c];d<h.length;d++)g=h[d],p=re.join(t.profilesPath,g),se.existsSync(p)&&se.unlinkSync(p)}catch(e){}t.deleteProfile({index:e}),f=t.pfs.index,e===(m=void 0===f?-1:f)?t.changeProfilesIndex({index:-1}):e<m&&t.changeProfilesIndex({index:m-1})}case 6:case"end":return i.stop()}}),i)})))()},openProfile:function(e){var t=arguments,i=this;return l()(u().mark((function n(){var o,s,r,a,l;return u().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(o=t.length>1&&void 0!==t[1]&&t[1],s=re.join(i.profilesPath,e.time),o){n.next=16;break}return n.prev=3,n.next=6,i.$code({code:se.readFileSync(s).toString(),fontSize:i.settings.editorFontSize});case 6:r=n.sent,a=r.code,l=void 0===a?"":a,se.writeFileSync(s,l),n.next=14;break;case 12:n.prev=12,n.t0=n.catch(3);case 14:n.next=17;break;case 16:G.shell.openPath(s);case 17:case"end":return n.stop()}}),n,null,[[3,12]])})))()},handleProfileClick:function(e){var t=this;return l()(u().mark((function i(){return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return t.loadingProfileIndex=[].concat(o()(t.loadingProfileIndex),[e]),i.prev=1,i.next=4,t.switchProfile(e);case 4:i.next=8;break;case 6:i.prev=6,i.t0=i.catch(1);case 8:t.loadingProfileIndex=t.loadingProfileIndex.filter((function(t){return t!==e}));case 9:case"end":return i.stop()}}),i,null,[[1,6]])})))()},switchProfile:function(e){var t=this;return l()(u().mark((function i(){var n,o,s,r,a,l,c;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(-1!==e){i.next=2;break}return i.abrupt("return");case 2:return n=t.pfs.index,t.changeProfilesIndex({index:e}),i.next=6,t.$parent.refreshProfile();case 6:if(o=i.sent,s=o.success,r=o.message,s){i.next=18;break}return i.next=12,(0,_.vC)({type:"error",message:"æ— æ³•åˆ‡æ¢åˆ°æ­¤é…ç½®æ–‡ä»¶!",detail:r||"",buttons:["å¥½çš„","åœ¨æ–‡æœ¬æ¨¡å¼ä¸‹ç¼–è¾‘"]});case 12:a=i.sent,1===a.response&&t.openProfile(t.pfs.files[e]),t.changeProfilesIndex({index:-1}),i.next=22;break;case 18:if(l=t.settings.connProfile,c=void 0!==l&&l,e===n||!c){i.next=22;break}return i.next=22,t.clashAxiosClient.delete("connections");case 22:case"end":return i.stop()}}),i)})))()},refreshProfile:function(e){var t=arguments,i=this;return l()(u().mark((function n(){var o,s,r,a,l,c,h,g,p,f;return u().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(o=(t.length>1&&void 0!==t[1]?t[1]:{}).ignoreSelectAfterUpdated,s=void 0!==o&&o,r=e.url,a=void 0===r?"":r,l=e.headers,c=void 0===l?"":l,""!==a){n.next=4;break}return n.abrupt("return");case 4:if(!(h=i.downlodingUrls[a])){n.next=9;break}return h(de),i.$delete(i.downlodingUrls,a),n.abrupt("return");case 9:return n.prev=9,g=new ce((function(e){i.downlodingUrls=oe(oe({},i.downlodingUrls),{},d()({},a,e))})),p=i.settings.selectAfterUpdated,f=void 0!==p&&p,n.next=14,i.updateConfig({url:a,cancelToken:g,selectAfterUpdated:!s&&f,headers:c});case 14:n.next=18;break;case 16:n.prev=16,n.t0=n.catch(9);case 18:return n.prev=18,i.$delete(i.downlodingUrls,a),n.finish(18);case 21:case"end":return n.stop()}}),n,null,[[9,16,18,21]])})))()},editProfile:function(e){this.editProfileName=e.time,this.editProfileType=0},editProfileRule:function(e){this.editProfileName=e.time,this.editProfileType=1},parseDomain:function(e){var t="local file";try{var i=new URL(e),n=i.host;return"file:"===i.protocol?t:n||"empty host"}catch(e){}return t},parseTime:function(e){var t=e.time;try{var i=se.statSync(re.join(this.profilesPath,t)).mtime;return p()(i).locale('zh-cn').from(this.now)}catch(e){return"missing file"}},updateConfig:function(e){var t=this;return l()(u().mark((function i(){var n,o,s,r,a,l,c,d,h,g,p;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n=e.url,o=e.headers,s=void 0===o?"":o,r=e.cancelToken,a=void 0===r?null:r,l=e.selectAfterUpdated,c=void 0!==l&&l,i.next=3,(0,v.rF)({url:n,cancelToken:a,headersString:s}).catch((function(e){}));case 3:if(d=i.sent,h=d.success,g=d.message,p=d.targetIndex,!h){i.next=13;break}if(!c){i.next=11;break}return i.next=11,t.switchProfile(p).catch((function(e){}));case 11:i.next=14;break;case 13:g.endsWith(de)||t.$alert({content:g});case 14:return i.abrupt("return",h);case 15:case"end":return i.stop()}}),i)})))()},subInfoArr:function(e){var t=e.upload,i=void 0===t?0:t,n=e.download,o=void 0===n?0:n,s=e.total,r=void 0===s?0:s,a=e.expire,l=void 0===a?0:a;if(i>=0&&o>=0&&r>0){var c=[(0,_.nM)(i+o,1,!1),(0,_.nM)(r,1,!1)];return l?[].concat(c,[p()(1e3*l).format("YYYY-MM-DD")]):c}return""},subInfoPercent:function(e){var t=e.upload,i=void 0===t?0:t,n=e.download,o=void 0===n?0:n,s=e.total,r=void 0===s?0:s;if(i>=0&&o>=0&&r>0){var a=(i+o)/r*100;return{"clip-path":"inset(0 ".concat(a<=100?100-a:0,"% 0 0)")}}return{"clip-path":"inset(0 100% 0 0)"}},pasteURL:function(){this.inputFocus=!1,this.subUrl=G.clipboard.readText(),this.inputFocus=!0},makeDiff:function(e){var t=this;return l()(u().mark((function i(){var n,o,s,a,c,d,h,g,p,f,m,v;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n=e.time,o=se.readFileSync(re.join(t.profilesPath,n),"utf8").toString(),s=re.join(t.profilesPath,n.slice(0,-4)+".base.yml"),a=re.join(t.profilesPath,n.slice(0,-4)+".change.yml"),c=se.existsSync(s)&&se.existsSync(a),d=c?["ä¿®æ”¹æ–‡ä»¶","åˆ é™¤ diff æ–‡ä»¶"]:["åˆå§‹åŒ– diff æ–‡ä»¶"],h=c?[{},{color:"red"}]:[],i.next=9,t.$select({title:"Diff",html:'å¯¹é…ç½®æ–‡ä»¶è¿›è¡Œæ›´æ”¹ï¼Œç„¶åŽåœ¨æ›´æ–°æ—¶åˆå¹¶å®ƒä»¬. <a href="https://docs.cfw.lbyczf.com/contents/diff.html">æ–‡æ¡£</a>',items:d,itemStyles:h});case 9:if(g=i.sent,p=r()(g,1),f=p[0],m=function(){var i=l()(u().mark((function i(){var n,o,r,l;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n=se.readFileSync(s,"utf8").toString(),o=se.readFileSync(a,"utf8").toString(),i.next=4,t.$diff({base:n,change:o});case 4:return r=i.sent,se.writeFileSync(a,r),i.next=8,(0,_.vC)({message:"Refresh is required to apply diff changes. Do it now?",buttons:["Refresh the profile","Not now"],defaultId:0});case 8:l=i.sent,0===l.response&&t.refreshProfile(e,{ignoreSelectAfterUpdated:!0});case 11:case"end":return i.stop()}}),i)})));return function(){return i.apply(this,arguments)}}(),!c){i.next=26;break}if(0!==f){i.next=18;break}m(),i.next=24;break;case 18:if(1!==f){i.next=24;break}return i.next=21,(0,_.vC)({type:"warning",message:"æ‚¨ç¡®å®šè¦åˆ é™¤ diff æ–‡ä»¶?",buttons:["æ˜¯","å¦"]});case 21:v=i.sent,0===v.response&&(se.unlinkSync(s),se.unlinkSync(a));case 24:i.next=29;break;case 26:se.writeFileSync(s,o),se.writeFileSync(a,o),m();case 29:case"end":return i.stop()}}),i)})))()},setupWatcher:function(){var e=this,t=le.debounce((function(t,i){if(/^\d+(?:\.yml)$/.test(i)){var n=e.pfs.files.findIndex((function(e){return e.time===i}));n>-1&&n===e.pfs.index&&e.switchProfile(n)}}),0);this.fileWatcher=se.watch(re.join(this.profilesPath),{},t)},removeWatcher:function(){this.fileWatcher&&this.fileWatcher.close()}}),beforeRouteEnter:function(e,t,i){var n;i((n=l()(u().mark((function e(t){var i;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.now=p()(),t.intervalID=ee.ZP.add((function(){t.now=p()()}),6e4),t.setupWatcher(),0!==(null===(i=t.pfs.files)||void 0===i?void 0:i.length)){e.next=7;break}return t.localCopy("config.yaml"),e.next=7,t.switchProfile(0);case 7:case"end":return e.stop()}}),e)}))),function(e){return n.apply(this,arguments)}))},beforeRouteLeave:function(e,t,i){for(var n in this.intervalID&&ee.ZP.stop(this.intervalID),this.removeWatcher(),this.downlodingUrls){(0,this.downlodingUrls[n])(de)}i()}},ue=he;i(28318),i(51734);const ge=(0,k.Z)(ue,(function(){var e=this,t=e._self._c;return t("div",{attrs:{id:"main-server-view"},on:{drop:e.dropProfile,dragover:e.dragOverProfile}},[e.editProfileName&&0===e.editProfileType?t("config-view",{attrs:{"clash-path":e.clashPath,"profile-name":e.editProfileName},on:{cancel:function(t){e.editProfileName="",e.editProfileType=-1},done:e.editDone,error:function(t){e.editProfileName="",e.editProfileType=-1}}}):e.editProfileName&&1===e.editProfileType?t("rule-view",{attrs:{"clash-path":e.clashPath,"profile-name":e.editProfileName},on:{cancel:function(t){e.editProfileName="",e.editProfileType=-1},done:e.editDone,error:function(t){e.editProfileName="",e.editProfileType=-1}}}):t("div",{staticClass:"main"},[t("div",{class:["card","remote-view"]},[t("div",{staticClass:"input-container"},[t("input",{directives:[{name:"focus",rawName:"v-focus",value:e.inputFocus,expression:"inputFocus"},{name:"model",rawName:"v-model",value:e.subUrl,expression:"subUrl"}],attrs:{spellcheck:"false",type:"text",placeholder:"ä»ŽURLä¸‹è½½"},domProps:{value:e.subUrl},on:{keydown:e.handleURLConfirm,input:function(t){t.target.composing||(e.subUrl=t.target.value)}}}),e._v(" "),""!==e.subUrl?t("span",{staticClass:"icon text-[color:var(--fgc)] opacity-50 clear-icon clickable",on:{click:function(t){e.subUrl=""}}},[e._v("backspace")]):t("span",{staticClass:"icon clear-icon clickable text-[color:var(--fgc)] opacity-50",on:{click:e.pasteURL}},[e._v("content_copy")])]),e._v(" "),t("div",{staticClass:"btns-container"},[t("div",{class:e.getBtnClass,on:{click:e.handleDownload}},[e._v("\n          "+e._s(e.getBtnText)+"\n        ")]),e._v(" "),t("div",{staticClass:"confirm confirm-right update-all-btn",on:{click:e.handleUpdateAllProfiles}},[e._v("\n          æ›´æ–°å…¨éƒ¨\n        ")]),e._v(" "),t("div",{staticClass:"confirm confirm-right",on:{click:e.handleImport}},[e._v("å¯¼å…¥")])])]),e._v(" "),t("draggable",{ref:"mixin-scroll-content",staticClass:"list-view",attrs:{delay:300,animation:200,"delay-on-touch-only":!0},on:{start:e.handleDragStart,end:e.handleDragEnd},model:{value:e.profiles,callback:function(t){e.profiles=t},expression:"profiles"}},[e._l(e.profiles,(function(i,n){return t("div",{key:n,class:["list-item",n===e.pfs.index?"item-cur":""],on:{click:function(t){return e.handleProfileClick(n)},contextmenu:function(t){return e.handleProfileRightClick(t,i,n)}}},[t("div",{staticClass:"indicator relative overflow-clip"},[n===e.pfs.index?[t("transition",{attrs:{name:"expand"}},[e.loadingProfileIndex.includes(n)?e._e():t("div",{staticClass:"absolute bg-[color:var(--proxy-item-selected-border-c)] w-full h-full"})]),e._v(" "),t("div",{staticClass:"bg-[color:var(--proxy-item-selected-border-c)] absolute w-full h-3/5 rounded-[10px] animate-cycle"})]:e._e()],2),e._v(" "),t("div",{staticClass:"item-info"},[t("div",{staticClass:"item-name"},[t("div",{staticClass:"item-name-top"},[t("div",{attrs:{title:i.name}},[e._v(e._s(i.name))])]),e._v(" "),t("div",{staticClass:"item-name-bottom flex gap-1 w-full",attrs:{title:i.url}},[t("span",{staticClass:"overflow-hidden text-ellipsis"},[e._v(e._s(e.parseDomain(i.url)))]),e._v(" "),t("span",{staticClass:"flex-shrink",class:{"item-time":!0,"item-expired":e.isProifleExpired(i)}},[e._v("\n                ("+e._s(e.parseTime(i))+")\n              ")])]),e._v(" "),e.subInfoArr(i.subInfo||{})?t("div",{staticClass:"item-subinfo"},[t("div",{staticClass:"item-subinfo-texts"},e._l(e.subInfoArr(i.subInfo||{}),(function(i,n){return t("div",{key:n},[e._v("\n                  "+e._s(i)+"\n                ")])})),0),e._v(" "),t("div",{staticClass:"progress"},[t("div",{staticClass:"percent",style:e.subInfoPercent(i.subInfo||{})})])]):e._e()]),e._v(" "),t("div",{staticClass:"h-full flex flex-col justify-center"},[""!==i.url?t("Hint",{staticClass:"item-icon",attrs:{hint:"æ›´æ–°"},on:{click:function(t){return t.stopPropagation(),e.refreshProfile(i)}}},[t("span",{staticClass:"icon",class:{rotating:i.url in e.downlodingUrls}},[e._v("refresh")])]):t("Hint",{staticClass:"item-icon",attrs:{hint:"ç¼–è¾‘"},on:{click:function(t){return t.stopPropagation(),e.openProfile(i)}}},[t("span",{staticClass:"icon"},[e._v("code")])])],1)])])})),e._v(" "),e._l(new Array(20),(function(e,i){return t("i",{key:"hidden"+i})}))],2)],1),e._v(" "),e.qrcodeURL?t("QRCodeView",{attrs:{url:e.qrcodeURL},on:{hide:function(t){e.qrcodeURL=""}}}):e._e()],1)}),[],!1,null,"820f0efe",null).exports},99876:(e,t,i)=>{"use strict";i.d(t,{Z:()=>ie});var n=i(319),o=i.n(n),s=i(63038),r=i.n(s),a=i(48926),l=i.n(a),c=i(59713),d=i.n(c),h=i(87757),u=i.n(h),g=(i(24883),i(11442)),p=(i(24793),i(57147)),f=i(23321);function m(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const v={name:"setting-section",props:{title:String},data:function(){return{}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?m(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):m(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,f.mapState)({})),mounted:function(){}};i(79820);var _=i(51900);const b=(0,_.Z)(v,(function(){var e=this,t=e._self._c;return e.$slots.default.length?t("div",{staticClass:"main-setting-section"},[t("div",{staticClass:"title"},[e._v(e._s(e.title))]),e._v(" "),t("div",{staticClass:"content"},[e._t("default")],2)]):e._e()}),[],!1,null,"18adce47",null).exports;var w=i(12436);function y(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function C(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?y(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):y(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const x={name:"key-capture",props:{value:{type:String,default:""},placeholder:String},model:{prop:"value",event:"change"},data:function(){return{isRecording:!1,keyChain:[]}},watch:{isRecording:function(e){e||this.$emit("change",this.shortcut)}},computed:C(C({},(0,f.mapState)({})),{},{shortcut:function(){return this.keyChain.join("+")},hint:function(){return this.isRecording?"è®°å½•ä¸­...":this.placeholder}}),methods:{handleKeyDown:function(e){if(this.isRecording){var t=e.key;13!==e.keyCode?t&&this.keyChain.push(t):this.isRecording=!1}},handleClick:function(){this.keyChain=[],this.isRecording=!0,this.$emit("change","")},handleBlur:function(){this.isRecording=!1},mounted:function(){}},mounted:function(){this.keyChain=this.value.split("+")}};i(47191);const S=(0,_.Z)(x,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-key-capture"},[t("input",{class:[e.isRecording?"recording":""],style:{padding:"10px"},attrs:{placeholder:e.hint,readonly:""},domProps:{value:e.shortcut},on:{click:e.handleClick,keydown:e.handleKeyDown,blur:e.handleBlur}}),e._v(" "),t("div",{staticClass:"hint",class:[e.isRecording?"":"hint-hide"]},[e._v("\n    æŒ‰ Enter åœæ­¢\n  ")])])}),[],!1,null,"2ddf36e7",null).exports;var k=i(17285),L=i(62639);function N(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const D={name:"more-hint",props:{text:String,clickable:{type:Boolean,default:!0}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?N(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):N(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,f.mapState)({}))};i(65549);const I=(0,_.Z)(D,(function(){var e=this,t=e._self._c;return t("div",{class:["main-more-hint",e.clickable?"clickable":""],on:{click:function(t){return e.$emit("click")}}},[t("div",{staticClass:"text"},[e._v(e._s(e.text))]),e._v(" "),e.clickable?t("div",{staticClass:"tirangle"}):e._e()])}),[],!1,null,"6a8f4af4",null).exports;const E={name:"separator"};i(67664);const T=(0,_.Z)(E,(function(){return(0,this._self._c)("div",{staticClass:"main-settings-separator"})}),[],!1,null,"26bdfd95",null).exports;var M=i(51109);const A={name:"TrayOrder",components:{draggable:i.n(M)()},props:{arr:{type:Array,default:function(){return[[],[]]}}},model:{prop:"arr",event:"drag"},watch:{arr:{handler:function(e){this.array=e},deep:!0}},data:function(){return{array:this.arr}},methods:{handleDrag:function(e){this.$emit("drag",this.array)}},mounted:function(){}};i(15907);const O=(0,_.Z)(A,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"tray-order-main"},[t("div",{staticClass:"title"},[e._v("æ˜¾ç¤º:")]),e._v(" "),t("draggable",{staticClass:"list left-list",attrs:{group:"tray",list:e.array[0]},on:{change:e.handleDrag}},e._l(e.array[0],(function(e){return t("img",{key:e,staticClass:"cursor-move",attrs:{src:"static/imgs/tray-".concat(e,".png"),alt:""}})})),0),e._v(" "),t("div",{staticClass:"title"},[e._v("éšè—:")]),e._v(" "),t("draggable",{staticClass:"list",attrs:{group:"tray",list:e.array[1]},on:{change:e.handleDrag}},e._l(e.array[1],(function(e){return t("img",{key:e,staticClass:"cursor-move",attrs:{src:"static/imgs/tray-".concat(e,".png"),alt:""}})})),0)],1)}),[],!1,null,"40749f51",null).exports;var P=i(11287),R=i(13338),F=i(8359),B=i(10870),V=i(97520),W=i(72298),H=i(71017),z=i.n(H),j=i(32081),U=null,$=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"code --wait";return new Promise((function(n,o){U=o,W.ipcRenderer.invoke("app","getPath","temp").then((function(s){var r=(0,H.join)(s,"close-to-save.".concat(e));(0,p.writeFileSync)(r,t),(0,j.exec)("".concat(i," ").concat(r),{windowsHide:!0},(function(e,t,i){e&&o(e)})).on("exit",(function(){n((0,p.readFileSync)(r).toString())}))})).catch(o)}))},K=i(251),q=i(83566),Z=i(86173),G=i.n(Z),Y=i(8369),Q=i(36336),X=i(58511);function J(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function ee(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?J(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):J(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const te={components:{Section:b,SimpleInput:w.Z,KeyCapture:S,MoreHint:I,SelectView:k.Z,SwitchView:L.Z,Separator:T,TrayOrder:O,Navigator:P.Z,Hint:R.Z,Info:Q.Z},data:function(){return P.Z,{scrollTop:0,fontFamilyPlaceholder:(0,q.V5)()?"PingFang SC":(0,q.Kr)()?"Microsoft Yahei":"system-ui",isEditingExternal:!1,sections:[]}},computed:ee(ee({},(0,f.mapState)({detectedInterfaceName:function(e){return e.app.detectedInterfaceName},clashPath:function(e){return e.app.clashPath},confData:function(e){return e.app.confData}})),(0,f.mapGetters)(["clashAxiosClient","secret"])),watch:{"sts.profilePath":function(){this.refreshCore()}},methods:ee(ee(ee({},(0,f.mapMutations)({saveSettingsObject:"SAVE_SETTINGS_OBJECT",setConfData:"SET_CONF_DATA"})),(0,f.mapActions)(["getParserLogPath","getScriptLogPath"])),{},{refreshCore:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.$parent.handlerRestartClash();case 2:case"end":return t.stop()}}),t)})))()},handleNavigatToGroup:function(e){var t=this.$refs["mixin-scroll-content"],i=t.children[e];this.$nextTick((function(){t.scrollTop=i.offsetTop-110}))},cancelExternalEdit:function(){U&&U()},edit:function(e){var t=arguments,i=this;return l()(u().mark((function n(){var o,s,r,a,l,c,d,h,g,p,f,m;return u().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(o=t.length>1&&void 0!==t[1]?t[1]:"",s=t.length>2&&void 0!==t[2]?t[2]:"yaml",r=!1,n.prev=3,a=i.settings,l=a[e],c=a.editor,l||(l=o),0!==(d=void 0===c?0:c)){n.next=21;break}return n.prev=7,n.next=10,i.$code({code:l,language:s,fontSize:i.settings.editorFontSize});case 10:h=n.sent,g=h.code,p=void 0===g?"":g,i.settings[e]=p,r=p!==l,n.next=19;break;case 17:n.prev=17,n.t0=n.catch(7);case 19:n.next=37;break;case 21:if(1!==d){n.next=30;break}return i.isEditingExternal=!0,n.next=25,$(s,l);case 25:f=n.sent,i.settings[e]=f,r=f!==l,n.next=37;break;case 30:if(2!==d){n.next=37;break}return i.isEditingExternal=!0,n.next=34,$(s,l,i.settings.editorCustomCommand||"subl --wait");case 34:m=n.sent,i.settings[e]=m,r=m!==l;case 37:n.next=41;break;case 39:n.prev=39,n.t1=n.catch(3);case 41:return i.isEditingExternal=!1,n.abrupt("return",r);case 43:case"end":return n.stop()}}),n,null,[[3,39],[7,17]])})))()},handleEditBypass:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.edit("bypassText",g.stringify({bypass:F.Z}));case 2:case"end":return t.stop()}}),t)})))()},handleEditPACContent:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.edit("pacContentText",B.Z,"javascript");case 2:case"end":return t.stop()}}),t)})))()},handleEditMixinYAML:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.edit("mixinText","mixin: # object\n");case 2:case"end":return t.stop()}}),t)})))()},handleEditMixinJS:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return"module.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => {\n  return content\n}",t.next=3,e.edit("mixinCode","module.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => {\n  return content\n}","javascript");case 3:case"end":return t.stop()}}),t)})))()},handleEditUnsafeURLs:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.edit("unsafeURLsText","urls: # array\n");case 2:case"end":return t.stop()}}),t)})))()},handleEditHeaders:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.edit("headersText","headers: # object\n");case 2:case"end":return t.stop()}}),t)})))()},handleEditChildProcess:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.edit("childProcessText","processes: # array\n");case 2:if(!t.sent){t.next=4;break}e.refreshCore();case 4:case"end":return t.stop()}}),t)})))()},handleSelectInterface:function(){var e=this;return l()(u().mark((function t(){var i,n,s,a;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,i=(0,V.r)().map((function(e){return e.name})),t.next=4,e.$select({title:"é€‰æ‹©å‡ºæŽ¥å£",message:"ä»…åœ¨å¯ç”¨TAPæ¨¡å¼æ—¶æœ‰æ•ˆ",items:[].concat(o()(i),["é‡ç½®"]),isLastDifferent:!0});case 4:n=t.sent,s=r()(n,1),(a=s[0])===i.length?e.settings.interfaceName="":e.settings.interfaceName=i[a],t.next=12;break;case 10:t.prev=10,t.t0=t.catch(0);case 12:case"end":return t.stop()}}),t,null,[[0,10]])})))()},handleEditActionScripts:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.edit("scriptsText",g.stringify({scripts:{proxy:{},profile:{}}}));case 2:case"end":return t.stop()}}),t)})))()},handleEditSSIDStrategy:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.edit("ssidStrategyText","strategy: # object\n");case 2:case"end":return t.stop()}}),t)})))()},handleFetchCurrentSSID:function(){var e=this;return l()(u().mark((function t(){var i,n,s,a;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=(0,X.S)().reduce((function(e,t){var i=t.SSID;return i&&e.push(i),e}),[]),t.next=3,e.$select({title:"å½“å‰çš„ SSID",message:"å°† SSID å¤åˆ¶åˆ°å‰ªè´´æ¿",items:[].concat(o()(i),["å–æ¶ˆ"])});case 3:n=t.sent,s=r()(n,1),(a=s[0])!==i.length&&W.clipboard.writeText(i[a]);case 7:case"end":return t.stop()}}),t)})))()},handleOpenActionScriptsConsoleFile:function(){var e=this;return l()(u().mark((function t(){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.getScriptLogPath();case 2:i=t.sent,(0,p.existsSync)(i)||(0,p.writeFileSync)(i,""),W.shell.openPath(i);case 5:case"end":return t.stop()}}),t)})))()},handleEditProfileParsers:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.edit("profileParsersText","parsers: # array\n");case 2:case"end":return t.stop()}}),t)})))()},handleOpenConsoleFile:function(){var e=this;return l()(u().mark((function t(){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.getParserLogPath();case 2:i=t.sent,(0,p.existsSync)(i)||(0,p.writeFileSync)(i,""),W.shell.openPath(i);case 5:case"end":return t.stop()}}),t)})))()},handleChooseDefaultIcon:function(){var e=this;return l()(u().mark((function t(){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.chooseFileOrPath();case 2:(i=t.sent)&&(e.settings.iconDefault=i);case 4:case"end":return t.stop()}}),t)})))()},handleChooseSystemProxytOnIcon:function(){var e=this;return l()(u().mark((function t(){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.chooseFileOrPath();case 2:(i=t.sent)&&(e.settings.iconSystemProxy=i);case 4:case"end":return t.stop()}}),t)})))()},handleChooseProfilePath:function(){var e=this;return l()(u().mark((function t(){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.chooseFileOrPath(!1);case 2:(i=t.sent)&&(e.settings.profilePath=i);case 4:case"end":return t.stop()}}),t)})))()},handleSelectTrayScriptPath:function(){var e=this;return l()(u().mark((function t(){var i;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.chooseFileOrPath();case 2:(i=t.sent)&&(e.settings.trayScriptPath=i);case 4:case"end":return t.stop()}}),t)})))()},handleTrayScriptManualRun:function(){this.settings.trayScriptManualRunTime=(new Date).getTime()},chooseFileOrPath:function(){var e=arguments;return l()(u().mark((function t(){var i,n;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=!(e.length>0&&void 0!==e[0])||e[0],t.next=3,W.ipcRenderer.invoke("dialog","showOpenDialogSync",{properties:[i?"openFile":"openDirectory"]});case 3:if(!((n=t.sent)&&n.length>0)){t.next=6;break}return t.abrupt("return",n[0]);case 6:return t.abrupt("return",void 0);case 7:case"end":return t.stop()}}),t)})))()},handleReset:function(){var e=this;return l()(u().mark((function t(){return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,e.$alert({title:"è­¦å‘Š",content:"æ‚¨ç¡®å®šè¦é‡è®¾æ‰€æœ‰è®¾ç½®å—?",isShowErrorBtn:!0});case 3:e.saveSettingsObject({obj:{}}),e.loadSettings(),t.next=9;break;case 7:t.prev=7,t.t0=t.catch(0);case 9:case"end":return t.stop()}}),t,null,[[0,7]])})))()},handleOpenGUILog:function(){W.shell.openPath((0,H.dirname)(G().transports.file.getFile().path))},handleOpenGUIDataFolder:function(){return l()(u().mark((function e(){var t;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,W.ipcRenderer.invoke("app","getPath","userData");case 2:t=e.sent,W.shell.showItemInFolder(t);case 4:case"end":return e.stop()}}),e)})))()},handleQuit:function(){var e=arguments,t=this;return l()(u().mark((function i(){var n,o;return u().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n=e.length>0&&void 0!==e[0]&&e[0],i.next=3,(0,Y.vC)({type:"warning",message:"ä½ ç¡®å®šè¦é€€å‡ºå—?",buttons:["æ˜¯","å¦"]});case 3:if(o=i.sent,1!==o.response){i.next=7;break}return i.abrupt("return");case 7:n?W.ipcRenderer.send("cleanup-done"):t.$parent.quit();case 8:case"end":return i.stop()}}),i)})))()},handlerClearFakeIPCache:function(){var e=this;return l()(u().mark((function t(){var i,n,o,s,r;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.clashAxiosClient.post("/cache/fakeip/flush",{},{validateStatus:function(e){return!0}});case 2:i=t.sent,n=i.status,o=i.data,s=(o=void 0===o?{}:o).message,r=void 0===s?"":s,(0,Y.vC)({message:204===n?"Fake IP cache cleared":"Failed with reason: ".concat(r)});case 8:case"end":return t.stop()}}),t)})))()},handleGenerateUUIDSecret:function(){var e=this;return l()(u().mark((function t(){var i,n;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,Y.vC)({type:"warning",message:"æ˜¯å¦è¦åœ¨ Home Directory/config.yaml ä¸­è®¾ç½®æ–°çš„uuidv4 secretå¹¶é‡å¯ APP?",buttons:["æ˜¯","å¦"]});case 2:if(i=t.sent,0!==i.response){t.next=9;break}return n=(0,K.v4)(),t.next=8,(0,Y.F0)(z().join(e.clashPath,"config.yaml"),"secret",n);case 8:e.reloadElectron();case 9:case"end":return t.stop()}}),t)})))()}}),beforeMount:function(){},beforeRouteEnter:function(e,t,i){i((function(e){}))},mounted:function(){var e=this.$refs["mixin-scroll-content"].children;this.sections=o()(e).map((function(e){return e.children[0].innerText}))},beforeRouteLeave:function(e,t,i){i()}};i(52611),i(58141);const ie=(0,_.Z)(te,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-setting-view"},[t("div",{class:["title",e.isEditingExternal?"blur":""]},[t("div",[e._v("è®¾ç½®")]),e._v(" "),t("div",{staticClass:"btns"},[t("div",{staticClass:"btn",on:{click:e.handleReset}},[e._v("é‡ç½®æ‰€æœ‰è®¾ç½®")]),e._v(" "),t("div",{staticClass:"btn clickable btn-force-quit",on:{click:function(t){return e.handleQuit(!0)}}},[e._v("\n        å¼ºåˆ¶é€€å‡º\n      ")]),e._v(" "),t("div",{staticClass:"btn clickable btn-quit",on:{click:function(t){return e.handleQuit()}}},[e._v("é€€å‡º")])])]),e._v(" "),e.settings?t("div",{ref:"mixin-scroll-content",class:["content",,e.isEditingExternal?"blur":""]},[t("Section",{attrs:{title:"å®‰å…¨"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"relative flex items-center"},[t("div",[e._v("æ ¸å¿ƒSecret")]),e._v(" "),t("Info",[e._v("\n            å°† Clash Core çš„ "),t("span",{staticClass:"quote"},[e._v("secret")]),e._v(" è®¾ç½®ä¸ºéšæœºçš„ RFC\n            4122 ç‰ˆæœ¬ 4 UUIDï¼Œè¿™æ · Clash REST API å°±ä¸èƒ½è¢«ä»»æ„è®¿é—®ã€‚\n             "),t("br"),t("br"),e._v("è¯¥å€¼å­˜å‚¨åœ¨äºŽ\n            "),t("span",{staticClass:"quote"},[e._v("Home Directory/config.yaml")]),e._v(".\n            "),t("br"),t("br"),e._v("æœ‰å…³è¯¦ç»†ä¿¡æ¯ï¼Œè¯·å‚é˜…Clashæ–‡æ¡£:\n            "),t("ul",[t("li",[t("a",{attrs:{href:"https://dreamacro.github.io/clash/configuration/configuration-reference.html"}},[e._v("é…ç½®")])])])]),e._v(" "),t("Hint",{staticClass:"gird ml-1 items-center",attrs:{position:"right",hint:"secret å½“å‰ä¸ºç©ºï¼Œæˆ‘ä»¬å¼ºçƒˆå»ºè®®ç”Ÿæˆä¸€ä¸ª"}},[""===e.secret?t("span",{staticClass:"icon h-fit text-base text-[#FFAD00]"},[e._v("warning")]):e._e()])],1),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:""===e.secret?"ç”Ÿæˆæ›´æ–°":"æ›´æ–°"},on:{click:e.handleGenerateUUIDSecret}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"relative flex items-center"},[t("div",[e._v("å…è®¸ä¸å®‰å…¨çš„ URL")]),e._v(" "),t("Info",[e._v("\n            è®¾ç½®è¯·æ±‚æ—¶ä¸éªŒè¯è¯ä¹¦çš„URL"),t("br"),t("br"),e._v("\n\n             "),t("strong",[e._v("ä¸è¦æ›´æ”¹å®ƒ")]),e._v(" , é™¤éžä½ çŸ¥é“å®ƒæ˜¯ä»€ä¹ˆ\n          ")])],1),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditUnsafeURLs}})],1)]),e._v(" "),t("Section",{attrs:{title:"ä¸»é¡µ"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("é…ç½®ç¼–è¾‘å™¨")]),e._v(" "),t("Info",[e._v("è®¾ç½®ä½¿ç”¨çš„æ–‡æœ¬ç¼–è¾‘å™¨"),t("br"),t("br"),e._v("å¯¹äºŽ\n            "),t("strong",[e._v("è‡ªå®šä¹‰")]),e._v(", è¯¥å‘½ä»¤åªåº”åœ¨ç¼–è¾‘æ–‡ä»¶å…³é—­åŽè¿”å›žæŽ§åˆ¶æƒã€‚\n            ä¾‹å¦‚:"),t("br"),e._v(" "),t("span",{staticClass:"quote"},[e._v("code --wait")]),t("br"),e._v(" "),t("span",{staticClass:"quote"},[e._v("subl --wait")])])],1),e._v(" "),t("SelectView",{attrs:{items:["CFW","Visual Studio Code","è‡ªå®šä¹‰"]},model:{value:e.settings.editor,callback:function(t){e.$set(e.settings,"editor",t)},expression:"settings.editor"}})],1),e._v(" "),2===e.settings.editor?t("div",{staticClass:"item"},[t("div",[e._v("è‡ªå®šä¹‰ç¼–è¾‘å™¨å‘½ä»¤")]),e._v(" "),t("SimpleInput",{staticClass:"input",attrs:{placeholder:"subl --wait"},model:{value:e.settings.editorCustomCommand,callback:function(t){e.$set(e.settings,"editorCustomCommand",t)},expression:"settings.editorCustomCommand"}})],1):e._e(),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("å‘ç³»ç»Ÿé€šçŸ¥æ å‘é€ç›¸å…³ä¿¡æ¯")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦å…è®¸å¼¹å‡ºç³»ç»Ÿçº§é€šçŸ¥")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.showNotifications,callback:function(t){e.$set(e.settings,"showNotifications",t)},expression:"settings.showNotifications"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("å¼€å¯Clashæ—¶é»˜è®¤ç¼©å°åˆ°ä»»åŠ¡æ ")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦åœ¨å¯åŠ¨æ—¶æ˜¾ç¤ºä»ªè¡¨æ¿")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.hideAfterStartup,callback:function(t){e.$set(e.settings,"hideAfterStartup",t)},expression:"settings.hideAfterStartup"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("éšæœºå ç”¨ç«¯å£")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦ä½¿ç”¨éšæœºç«¯å£ä½œä¸ºæ ¸å¿ƒæŽ§åˆ¶å™¨ç«¯å£ (\n            Home Directory/config.yamlä¸­external-controller\n            çš„ç«¯å£éƒ¨åˆ†)")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.randomControllerPort,callback:function(t){e.$set(e.settings,"randomControllerPort",t)},expression:"settings.randomControllerPort"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("éšæœºæ··åˆç«¯å£")]),e._v(" "),t("Info",[e._v("æ‰“å¼€åº”ç”¨ç¨‹åºå¯åŠ¨æ—¶ç”Ÿæˆæ–°çš„ä»£ç†æœåŠ¡å™¨ç«¯å£å·ã€‚\n            "),t("br"),t("br"),e._v("è¯¥å€¼åœ¨ General ä¸­æ˜¾ç¤ºä¸º Portï¼Œ\n            å¹¶å­˜å‚¨ä¸º\n            "),t("a",{attrs:{href:"https://dreamacro.github.io/clash/configuration/configuration-reference.html"}},[e._v("mixed-port")]),e._v("\n            åœ¨\n            "),t("span",{staticClass:"quote"},[e._v("Home Directory/config.yaml")]),e._v("å†…")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.randomMixedPort,callback:function(t){e.$set(e.settings,"randomMixedPort",t)},expression:"settings.randomMixedPort"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("è½»é‡æ¨¡å¼")]),e._v(" "),t("Info",[e._v("å…³é—­ä»ªè¡¨æ¿åŽæ‰“å¼€ä»¥ç»ˆæ­¢åº”ç”¨ç¨‹åºè¿›ç¨‹,\n            ä½†ä¿æŒ Clash Core åœ¨åŽå°è¿è¡Œã€‚\n            å±Šæ—¶ï¼ŒCFW æä¾›çš„å¤§éƒ¨åˆ†åŠŸèƒ½å°†ä¸å¯ç”¨\n            "),t("br"),t("br"),e._v("ä¾èµ–"),t("strong",[e._v("æœåŠ¡æ¨¡å¼")]),e._v(".\n            "),t("br"),t("br"),e._v("æœ‰å…³è¯¦ç»†ä¿¡æ¯ï¼Œè¯·å‚é˜…\n            "),t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/lightweight.html"}},[e._v("å¸®åŠ©æ–‡æ¡£")]),e._v("å†…")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.lightweightMode,callback:function(t){e.$set(e.settings,"lightweightMode",t)},expression:"settings.lightweightMode"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("GUIæ—¥å¿—æ–‡ä»¶å¤¹")]),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"æ‰“å¼€"},on:{click:e.handleOpenGUILog}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("GUI æ•°æ®æ–‡ä»¶å¤¹")]),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"æ‰“å¼€"},on:{click:e.handleOpenGUIDataFolder}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æ£€æŸ¥æ›´æ–°")]),e._v(" "),t("Info",[e._v(" è®¾ç½®æ˜¯å¦æ¯6å°æ—¶æ£€æŸ¥ä¸€æ¬¡æ›´æ–°")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.checkForUpdates,callback:function(t){e.$set(e.settings,"checkForUpdates",t)},expression:"settings.checkForUpdates"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("æœ‰æ–°ç‰ˆæœ¬æ—¶æé†’")]),e._v(" "),t("SwitchView",{model:{value:e.settings.showNewVersionIcon,callback:function(t){e.$set(e.settings,"showNewVersionIcon",t)},expression:"settings.showNewVersionIcon"}})],1),e._v(" "),e.isMacOS?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("è‡ªåŠ¨å‡çº§")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦è‡ªåŠ¨æ›´æ–°ï¼Œ\n            å¼€å¯æ–°ç‰ˆæœ¬åŽåŽå°æ›´æ–°ï¼Œ\n            ä¸‹æ¬¡å¯åŠ¨ä¸ºæœ€æ–°ç‰ˆæœ¬\n          ")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.silentUpdate,callback:function(t){e.$set(e.settings,"silentUpdate",t)},expression:"settings.silentUpdate"}})],1):e._e()]),e._v(" "),t("Section",{attrs:{title:"å¤–è§‚"}},[e.settings.systemTheme?e._e():t("div",{staticClass:"item"},[t("div",[e._v("ä¸»é¢˜")]),e._v(" "),t("SelectView",{attrs:{items:["æ˜Žäº®","æ·±è‰²","å›½åº†ä¸­ç§‹","èµ›åšæœ‹å…‹"]},model:{value:e.settings.theme,callback:function(t){e.$set(e.settings,"theme",t)},expression:"settings.theme"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("éµå¾ªç³»ç»Ÿä¸»é¢˜")]),e._v(" "),t("SwitchView",{model:{value:e.settings.systemTheme,callback:function(t){e.$set(e.settings,"systemTheme",t)},expression:"settings.systemTheme"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("å­—ä½“ç³»åˆ—")]),e._v(" "),t("SimpleInput",{attrs:{placeholder:e.fontFamilyPlaceholder},model:{value:e.settings.fontFamily,callback:function(t){e.$set(e.settings,"fontFamily",t)},expression:"settings.fontFamily"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æ ‡é¢˜æ æ–‡æœ¬")]),e._v(" "),t("Info",[t("div",[e._v("\n              è®¾ç½®æ ‡é¢˜æ çš„æ–‡å­—ï¼Œä¸€äº›æ›¿æ¢çš„å ä½ç¬¦:\n            ")]),e._v(" "),t("li",[t("b",[e._v("%mode%")]),e._v(" - å½“å‰ä»£ç†æ¨¡å¼")]),e._v(" "),t("li",[t("b",[e._v("%systemProxy%")]),e._v(" - ç³»ç»Ÿä»£ç†çŠ¶æ€ï¼Œæ‰“å¼€æˆ–å…³é—­")]),e._v(" "),t("li",[t("b",[e._v("%tun%")]),e._v(" - TUN æ¨¡å¼çŠ¶æ€ï¼Œå¼€æˆ–å…³")]),e._v(" "),t("li",[t("b",[e._v("%mixin%")]),e._v(" - Mixin çŠ¶æ€ï¼Œå¼€æˆ–å…³")])])],1),e._v(" "),t("SimpleInput",{staticClass:"input",attrs:{placeholder:"è¦åœ¨æ ‡é¢˜æ ä¸­æ˜¾ç¤ºçš„æ–‡æœ¬"},model:{value:e.settings.titleBarText,callback:function(t){e.$set(e.settings,"titleBarText",t)},expression:"settings.titleBarText"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("è¿è¡Œæ—¶é—´æ ¼å¼")]),e._v(" "),t("SimpleInput",{staticClass:"input",attrs:{placeholder:"hh : mm : ss"},model:{value:e.settings.runTimeFormat,callback:function(t){e.$set(e.settings,"runTimeFormat",t)},expression:"settings.runTimeFormat"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("ä½¿ç”¨ç³»ç»Ÿè¡¨æƒ…ç¬¦å·")]),e._v(" "),t("SwitchView",{model:{value:e.settings.useSystemEmoji,callback:function(t){e.$set(e.settings,"useSystemEmoji",t)},expression:"settings.useSystemEmoji"}})],1),e._v(" "),e.isWindows?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("ä½¿ç”¨è¿žæŽ¥æ¨¡å¼å›¾æ ‡")]),e._v(" "),t("Info",[e._v("ä½¿ç”¨å½“å‰é€‰æ‹©çš„æ¨¡å¼ä½œä¸ºæ‰˜ç›˜å›¾æ ‡")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.useModeIcons,callback:function(t){e.$set(e.settings,"useModeIcons",t)},expression:"settings.useModeIcons"}})],1):e._e(),e._v(" "),e.isWindows&&!e.settings.useModeIcons?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("è‡ªå®šä¹‰çŠ¶æ€æ å›¾æ ‡")]),e._v(" "),t("Info",[e._v("å°†ä»»åŠ¡æ å›¾æ ‡è®¾ç½®ä¸ºé»˜è®¤çŠ¶æ€")])],1),e._v(" "),t("div",{staticClass:"item"},[t("SimpleInput",{staticClass:"short-input",attrs:{placeholder:"ICO(.ico) è·¯å¾„"},model:{value:e.settings.iconDefault,callback:function(t){e.$set(e.settings,"iconDefault",t)},expression:"settings.iconDefault"}}),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"é€‰æ‹©"},on:{click:e.handleChooseDefaultIcon}})],1)]):e._e(),e._v(" "),e.isWindows&&!e.settings.useModeIcons?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("çŠ¶æ€æ å›¾æ ‡ä¸Šçš„ç³»ç»Ÿä»£ç†")]),e._v(" "),t("Info",[e._v("è®¾ç½®ç³»ç»Ÿä»£ç†å¼€å¯æ—¶çš„ä»»åŠ¡æ å›¾æ ‡")])],1),e._v(" "),t("div",{staticClass:"item"},[t("SimpleInput",{staticClass:"short-input",attrs:{placeholder:"ICO(.ico) è·¯å¾„"},model:{value:e.settings.iconSystemProxy,callback:function(t){e.$set(e.settings,"iconSystemProxy",t)},expression:"settings.iconSystemProxy"}}),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"é€‰æ‹©"},on:{click:e.handleChooseSystemProxytOnIcon}})],1)]):e._e(),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("éšè—æ‰˜ç›˜å›¾æ ‡")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦éšè—ä»»åŠ¡æ å›¾æ ‡")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.hideTrayIcon,callback:function(t){e.$set(e.settings,"hideTrayIcon",t)},expression:"settings.hideTrayIcon"}})],1),e._v(" "),e.isLinux?e._e():t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æ‰˜ç›˜ä»£ç†ç»„æ ·å¼")]),e._v(" "),t("Info",[t("div",[e._v("åœ¨ä»»åŠ¡æ èœå•ä¸­è®¾ç½®ä»£ç†ç»„æ ·å¼:")]),e._v(" "),t("li",[t("b",[e._v("é»˜è®¤")]),e._v(" - æ‰å¹³åŒ–æ‰€æœ‰ä»£ç†ç»„")]),e._v(" "),t("li",[t("b",[e._v("æŠ˜å ")]),e._v(" - åœ¨æŠ˜å ä¸­æ˜¾ç¤ºä»£ç†ç»„")]),e._v(" "),t("li",[t("b",[e._v("éšè—")]),e._v(" - éšè—ä»£ç†ç»„")])])],1),e._v(" "),t("SelectView",{attrs:{items:["é»˜è®¤","æŠ˜å ","éšè”½"]},model:{value:e.settings.trayProxiesStyle,callback:function(t){e.$set(e.settings,"trayProxiesStyle",t)},expression:"settings.trayProxiesStyle"}})],1),e._v(" "),!e.isLinux&&[0,1].includes(e.settings.trayProxiesStyle)?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("åœ¨æ‰˜ç›˜ä»£ç†ä¸­æ˜¾ç¤ºèŠ‚ç‚¹å¯ç”¨æ€§")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦åœ¨ä»»åŠ¡æ èœå•çš„ä»£ç†ä¸­\n            æ˜¾ç¤ºå»¶è¿ŸæŒ‡ç¤ºå™¨"),t("br"),e._v(" "),t("br"),e._v("\n            é¢œè‰²:\n            "),t("li",[t("div",{staticClass:"bg-green-400 w-2 h-2 rounded-full inline-block"}),e._v("\n              - å¯ç”¨çš„\n            ")]),e._v(" "),t("li",[t("div",{staticClass:"bg-red-400 w-2 h-2 rounded-full inline-block"}),e._v("\n              - è¶…æ—¶\n            ")]),e._v(" "),t("li",[t("div",{staticClass:"bg-gray-400 w-2 h-2 rounded-full inline-block"}),e._v("\n              - æœªçŸ¥\n            ")])])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.showTrayProxyDelayIndicator,callback:function(t){e.$set(e.settings,"showTrayProxyDelayIndicator",t)},expression:"settings.showTrayProxyDelayIndicator"}})],1):e._e(),e._v(" "),e.isLinux?e._e():t("separator"),e._v(" "),e.isLinux?e._e():t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æ‚¬æµ®çª—")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦å¯ç”¨è‡ªå®šä¹‰ä»»åŠ¡æ  (macOS) / æ‚¬åœçª—å£\n            (Windows)"),t("br"),t("br"),t("b",[e._v("")]),e._v(' åœ¨â€œæ˜¾ç¤ºâ€å’Œâ€œéšè—â€ä¹‹é—´æ‹–åŠ¨å›¾æ ‡æ¥æŽ§åˆ¶"\n           \n            '),t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/tray.html"}},[e._v("åœ¨çº¿æ–‡æ¡£")])])],1),e._v(" "),t("TrayOrder",{model:{value:e.settings.trayOrders,callback:function(t){e.$set(e.settings,"trayOrders",t)},expression:"settings.trayOrders"}})],1),e._v(" "),e.isLinux?e._e():t("div",{staticClass:"item"},[t("div",[e._v("æ–‡æœ¬")]),e._v(" "),t("div",{staticClass:"item"},[t("SimpleInput",{attrs:{placeholder:"è¦æ˜¾ç¤ºåœ¨æ‚¬æµ®çª—ä¸­çš„æ–‡æœ¬"},model:{value:e.settings.trayText,callback:function(t){e.$set(e.settings,"trayText",t)},expression:"settings.trayText"}})],1)]),e._v(" "),e.settings.trayText?e._e():t("div",{staticClass:"item"},[t("div",[e._v("è„šæœ¬")]),e._v(" "),t("div",{staticClass:"item"},[t("SimpleInput",{staticClass:"short-input",attrs:{placeholder:"è¦è¿è¡Œçš„è„šæœ¬"},model:{value:e.settings.trayScriptPath,callback:function(t){e.$set(e.settings,"trayScriptPath",t)},expression:"settings.trayScriptPath"}}),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"é€‰æ‹©"},on:{click:e.handleSelectTrayScriptPath}})],1)]),e._v(" "),!e.settings.trayText&&e.settings.trayScriptPath?t("div",{staticClass:"item"},[t("div",[e._v("è„šæœ¬é—´éš”")]),e._v(" "),t("div",{staticClass:"item"},[t("SimpleInput",{staticClass:"shorter-input",attrs:{placeholder:"seconds",suffix:"s",type:"number"},model:{value:e.settings.trayScriptInterval,callback:function(t){e.$set(e.settings,"trayScriptInterval",t)},expression:"settings.trayScriptInterval"}}),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"Manual Run"},on:{click:e.handleTrayScriptManualRun}})],1)]):e._e(),e._v(" "),e.isWindows?t("div",{staticClass:"item"},[t("div",[e._v("é€æ˜Ž")]),e._v(" "),t("div",{staticClass:"item"},[t("SimpleInput",{staticClass:"shorter-input",staticStyle:{"margin-right":"10px"},attrs:{placeholder:"å‰æ™¯è‰²"},model:{value:e.settings.trayColorForeground,callback:function(t){e.$set(e.settings,"trayColorForeground",t)},expression:"settings.trayColorForeground"}}),e._v(" "),t("SwitchView",{model:{value:e.settings.trayColorTransparent,callback:function(t){e.$set(e.settings,"trayColorTransparent",t)},expression:"settings.trayColorTransparent"}})],1)]):e._e()],1),e._v(" "),e.isLinux?e._e():t("Section",{attrs:{title:"ç³»ç»Ÿä»£ç†"}},[e.isWindows?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("ç±»åž‹")]),e._v(" "),t("Info",[e._v("Windows æŽ¥å— HTTP ç«¯ç‚¹æˆ– PAC\n            ï¼ˆä»£ç†è‡ªåŠ¨é…ç½®ï¼‰è„šæœ¬ã€‚\n            HTTP æ¨¡å¼é€šå¸¸å°±è¶³å¤Ÿäº†ã€‚"),t("br"),t("br"),e._v("\n            æœ‰å…³è¯¦ç»†ä¿¡æ¯ï¼Œè¯·å‚é˜…:"),t("br"),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://support.microsoft.com/en-us/windows/use-a-proxy-server-in-windows-03096c53-0554-4ffe-b6ab-8b1deee8dae1"}},[e._v("åœ¨ Windows ä¸­ä½¿ç”¨ä»£ç†æœåŠ¡å™¨")])])])])],1),e._v(" "),t("SelectView",{attrs:{items:["HTTP","PAC"]},model:{value:e.settings.systemProxyTypeIndex,callback:function(t){e.$set(e.settings,"systemProxyTypeIndex",t)},expression:"settings.systemProxyTypeIndex"}})],1):e._e(),e._v(" "),e.isWindows&&1===e.settings.systemProxyTypeIndex?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("PACå†…å®¹")]),e._v(" "),t("Info",[t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file"}},[e._v("Learn PAC")]),e._v(" "),t("br"),t("br"),e._v(" "),t("span",{staticClass:"quote"},[e._v("%mixed-port%")]),e._v(" is the placeholder of the\n            "),t("strong",[e._v("ç«¯å£")]),e._v(" in "),t("strong",[e._v("ä¸»é¡µ")])])],1),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditPACContent}})],1):e._e(),e._v(" "),e.isWindows&&1===e.settings.systemProxyTypeIndex?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("PAC Server Port")]),e._v(" "),t("Info",[e._v("\n            Leave it empty to use a random port."),t("br"),t("br"),e._v(" "),t("strong",[e._v("Restart the APP")]),e._v(" to take effect.\n          ")])],1),e._v(" "),t("div",{staticClass:"item"},[t("SimpleInput",{attrs:{placeholder:"random",type:"number"},model:{value:e.settings.innerServerPort,callback:function(t){e.$set(e.settings,"innerServerPort",t)},expression:"settings.innerServerPort"}})],1)]):e._e(),e._v(" "),1!==e.settings.systemProxyTypeIndex||e.isMacOS?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("ç»•è¿‡åŸŸ/ç½‘ç»œ")]),e._v(" "),t("Info",[e._v("è®¿é—®æŸäº›åœ°å€æ—¶ç»•è¿‡ï¼ˆä¸ä½¿ç”¨ï¼‰ä»£ç†æœåŠ¡å™¨ã€‚"),t("br"),t("br"),e._v("\n            æ­¤åˆ—è¡¨çš„è§£é‡Šå–å†³äºŽæ“ä½œç³»ç»Ÿå’Œåº”ç”¨ç¨‹åº. æ¢å¥è¯è¯´ï¼Œæ‚¨çš„æ“ä½œç³»ç»Ÿå’Œåº”ç”¨ç¨‹åºå¯èƒ½ä¼šä»¥ä¸åŒçš„æ–¹å¼è¯„ä¼°è§„åˆ™"),t("br"),t("br"),e._v("\n            æœ‰å…³è¯¦ç»†ä¿¡æ¯ï¼Œè¯·å‚é˜…:"),t("br"),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/bypass.html"}},[e._v("åœ¨çº¿æ–‡æ¡£")])]),e._v(" "),t("li",[t("a",{attrs:{href:"https://support.microsoft.com/en-us/windows/use-a-proxy-server-in-windows-03096c53-0554-4ffe-b6ab-8b1deee8dae1"}},[e._v("åœ¨ Windows ä¸­ä½¿ç”¨ä»£ç†æœåŠ¡å™¨\n                ")])]),e._v(" "),t("li",[t("a",{attrs:{href:"https://support.apple.com/guide/mac-help/enter-proxy-server-settings-on-mac-mchlp25912/mac"}},[e._v("åœ¨ Mac ä¸Šè¾“å…¥ä»£ç†æœåŠ¡å™¨è®¾ç½®")])]),e._v(" "),t("li",[t("a",{attrs:{href:"https://source.chromium.org/chromium/chromium/src/+/main:net/proxy_resolution/"}},[e._v("Chromium\n                ")])])])])],1),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditBypass}})],1):e._e(),e._v(" "),e.isWindows&&1!==e.settings.systemProxyTypeIndex?t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æŒ‡å®šåè®®")]),e._v(" "),t("Info",[e._v("æ‰“å¼€ä»¥å¼ºåˆ¶å°†æ–¹æ¡ˆæ·»åŠ åˆ°ç³»ç»Ÿä»£ç†è®¾ç½®"),t("br"),t("br"),e._v("\n            è¿™ä¸æ˜¯é€šç”¨ç”¨é€”,\n            å¹¶ä¸”ç¡®å®žè¿åäº†å½“å‰çš„ Windows è§„èŒƒ.\n            ä»…åœ¨ä½¿ç”¨æ—§çš„ Python æ—¶æ‰è€ƒè™‘å®ƒ."),t("br"),t("br"),e._v("\n            æœ‰å…³è¯¦ç»†ä¿¡æ¯ï¼Œè¯·å‚é˜…:"),t("br"),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/python/cpython/pull/26307"}},[e._v("python/cpython#26307")])])])])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.specifyHttpProxyProtocol,callback:function(t){e.$set(e.settings,"specifyHttpProxyProtocol",t)},expression:"settings.specifyHttpProxyProtocol"}})],1):e._e(),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("é™æ€ä¸»æœº")]),e._v(" "),t("Info",[e._v("å°†ç³»ç»Ÿä»£ç†ä¸»æœºéƒ¨åˆ†è®¾ç½®ä¸ºé™æ€å†…å®¹, å¦‚æžœæ²¡æœ‰è®¾ç½®,\n            ä¸»æœºé»˜è®¤ä¸º 127.0.0.1")])],1),e._v(" "),t("div",{staticClass:"item"},[t("SimpleInput",{attrs:{placeholder:"127.0.0.1"},model:{value:e.settings.staticSystemProxyHost,callback:function(t){e.$set(e.settings,"staticSystemProxyHost",t)},expression:"settings.staticSystemProxyHost"}})],1)])]),e._v(" "),t("Section",{attrs:{title:"æ··åˆé…ç½®"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("ç±»åž‹")]),e._v(" "),t("Info",[t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/mixin.html"}},[e._v("åœ¨çº¿æ–‡æ¡£")])])],1),e._v(" "),t("SelectView",{attrs:{items:["YAML","JavaScript"]},model:{value:e.settings.mixinType,callback:function(t){e.$set(e.settings,"mixinType",t)},expression:"settings.mixinType"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("YAML")]),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditMixinYAML}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("JavaScript")]),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditMixinJS}})],1)]),e._v(" "),t("Section",{attrs:{title:"ä»£ç†"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("ä»£ç†é¡¹ç›®å®½åº¦")]),e._v(" "),t("Info",[e._v("åœ¨ä»£ç†ç•Œé¢ä¸­è®¾ç½®æ¯ä¸ªèŠ‚ç‚¹çš„æ˜¾ç¤ºå®½åº¦")])],1),e._v(" "),t("SimpleInput",{attrs:{placeholder:"290",suffix:"px"},model:{value:e.settings.proxyItemWidth,callback:function(t){e.$set(e.settings,"proxyItemWidth",t)},expression:"settings.proxyItemWidth"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("ç­–ç•¥ç»„å¯¼èˆªå™¨å®½åº¦")]),e._v(" "),t("Info",[e._v("è®¾ç½®ä»£ç†ç•Œé¢å¯¼èˆªæ å®½åº¦")])],1),e._v(" "),t("SimpleInput",{attrs:{placeholder:"100(0=éšè—)",suffix:"px"},model:{value:e.settings.proxyMiniListWidth,callback:function(t){e.$set(e.settings,"proxyMiniListWidth",t)},expression:"settings.proxyMiniListWidth"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("è‡ªå®šä¹‰èŠ‚ç‚¹æŽ’åº")]),e._v(" "),t("SelectView",{attrs:{items:["é»˜è®¤","å»¶è¿Ÿ","å­—æ¯"]},model:{value:e.settings.proxyOrder,callback:function(t){e.$set(e.settings,"proxyOrder",t)},expression:"settings.proxyOrder"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("å»¶è¿Ÿç±»åž‹")]),e._v(" "),t("Info",[t("li",[t("b",[e._v("é»˜è®¤")]),e._v(" - å»¶è¿Ÿæµ‹è¯•çš„å»¶è¿Ÿ")]),e._v(" "),t("li",[t("b",[e._v("å¹³å‡å»¶è¿Ÿ")]),e._v(" - ä¸¤æ¬¡å»¶è¿Ÿæµ‹è¯•çš„å¹³å‡å»¶è¿Ÿ")])])],1),e._v(" "),t("SelectView",{attrs:{items:["é»˜è®¤","å¹³å‡å»¶è¿Ÿ"]},model:{value:e.settings.proxyDelayType,callback:function(t){e.$set(e.settings,"proxyDelayType",t)},expression:"settings.proxyDelayType"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("å»¶è¿Ÿæµ‹è¯•ç½‘å€")]),e._v(" "),t("Info",[e._v("è®¾ç½®åœ¨ä»£ç†æ¨¡å—ä¸­å•å‡»å»¶è¿Ÿæµ‹è¯•æŒ‰é’®æ—¶ä½¿ç”¨çš„ URL\n           ")])],1),e._v(" "),t("SimpleInput",{attrs:{placeholder:"http://www.gstatic.com/generate_204"},model:{value:e.settings.latencyUrl,callback:function(t){e.$set(e.settings,"latencyUrl",t)},expression:"settings.latencyUrl"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("å»¶è¿Ÿæµ‹è¯•è¶…æ—¶")]),e._v(" "),t("SimpleInput",{attrs:{type:"number",placeholder:"3000",suffix:"ms"},model:{value:e.settings.latencyTimeout,callback:function(t){e.$set(e.settings,"latencyTimeout",t)},expression:"settings.latencyTimeout"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æ˜¾ç¤ºç­›é€‰è¿‡æ»¤å™¨")]),e._v(" "),t("Info",[e._v("è®¾ç½®ä»£ç†æ¨¡å—æ˜¯å¦æ˜¾ç¤ºå…³é”®å­—è¿‡æ»¤å™¨å›¾æ ‡\n           ")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.showProxyFilter,callback:function(t){e.$set(e.settings,"showProxyFilter",t)},expression:"settings.showProxyFilter"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("éšè—æ— æ³•é€‰æ‹©çš„ä»£ç†ç»„")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦éšè—ä»£ç†æ¨¡å—ä¸­ä¸å¯é€‰æ‹©çš„ä»£ç†ç»„\n            ")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.hideUnselectableGroup,callback:function(t){e.$set(e.settings,"hideUnselectableGroup",t)},expression:"settings.hideUnselectableGroup"}})],1)]),e._v(" "),t("Section",{attrs:{title:"è¿žæŽ¥"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("ä»£ç†æ›´æ”¹æ—¶ä¸­æ–­è¿žæŽ¥")]),e._v(" "),t("Info",[t("div",[e._v("\n              åœ¨ä»£ç†æ¨¡å—ä¸­è®¾ç½®åˆ‡æ¢ä»£ç†æ—¶å…³é—­è¿žæŽ¥çš„ç­–ç•¥:\n            ")]),e._v(" "),t("li",[t("b",[e._v("ä¸ä¸­æ–­")]),e._v(" - ä¸å…³é—­ä»»ä½•é“¾æŽ¥")]),e._v(" "),t("li",[t("b",[e._v("æ—§é“¾æŽ¥")]),e._v(" - ä¸­æ–­é€šè¿‡è¯¥ä»£ç†ç»„çš„è¿žæŽ¥")]),e._v(" "),t("li",[t("b",[e._v("å…¨éƒ¨")]),e._v(" - å…³é—­æ‰€æœ‰è¿žæŽ¥")])])],1),e._v(" "),t("SelectView",{attrs:{items:["ä¸ä¸­æ–­","æ—§é“¾æŽ¥","æ‰€æœ‰"]},model:{value:e.settings.connProxy,callback:function(t){e.$set(e.settings,"connProxy",t)},expression:"settings.connProxy"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("é…ç½®æ–‡ä»¶æ›´æ”¹æ—¶ä¸­æ–­è¿žæŽ¥")]),e._v(" "),t("Info",[e._v("è®¾ç½®é…ç½®æ–‡ä»¶æ”¹å˜æ—¶æ˜¯å¦å…³é—­æ‰€æœ‰è¿žæŽ¥\n            ")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.connProfile,callback:function(t){e.$set(e.settings,"connProfile",t)},expression:"settings.connProfile"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æ¨¡å¼æ›´æ”¹æ—¶ä¸­æ–­è¿žæŽ¥")]),e._v(" "),t("Info",[e._v("è®¾ç½®åˆ‡æ¢æ¨¡å¼æ—¶æ˜¯å¦å…³é—­æ‰€æœ‰è¿žæŽ¥")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.connMode,callback:function(t){e.$set(e.settings,"connMode",t)},expression:"settings.connMode"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æ˜¾ç¤ºè¿›ç¨‹ï¼ˆå¦‚æžœå­˜åœ¨ï¼‰")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦æ˜¾ç¤ºè¿žæŽ¥ä¸­çš„è¿›ç¨‹åç§°ï¼ˆå¦‚æžœå­˜åœ¨ï¼‰ \n            ")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.connShowProcess,callback:function(t){e.$set(e.settings,"connShowProcess",t)},expression:"settings.connShowProcess"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æ˜¾ç¤ºé“¾æŽ¥ç±»åž‹")]),e._v(" "),t("Info",[t("div",[e._v("\n              è®¾ç½®è¿žæŽ¥æ¨¡å—ä¸­æ˜¾ç¤ºçš„é“¾ç±»åž‹:\n            ")]),e._v(" "),t("li",[t("b",[e._v("èŠ‚ç‚¹å")]),e._v("")]),e._v(" "),t("li",[t("b",[e._v("åˆ†ç»„å")]),e._v("")]),e._v(" "),t("li",[t("b",[e._v("å…¨éƒ¨")]),e._v(" - èŠ‚ç‚¹åå’Œåˆ†ç»„å")])])],1),e._v(" "),t("SelectView",{attrs:{items:["èŠ‚ç‚¹å","åˆ†ç»„å","å…¨éƒ¨"]},model:{value:e.settings.connChainType,callback:function(t){e.$set(e.settings,"connChainType",t)},expression:"settings.connChainType"}})],1)]),e._v(" "),t("Section",{attrs:{title:"æä¾›"}},[t("div",{staticClass:"item"},[t("div",[e._v("ä½¿ç”¨ CFW ç¼–è¾‘å™¨")]),e._v(" "),t("SwitchView",{model:{value:e.settings.editProfileWithCFWEditor,callback:function(t){e.$set(e.settings,"editProfileWithCFWEditor",t)},expression:"settings.editProfileWithCFWEditor"}})],1)]),e._v(" "),t("Section",{attrs:{title:"é€‰æ‹©æµé‡å‡ºæŽ¥å£"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æŽ¥å£åç§°")]),e._v(" "),t("Info",[e._v("åƒ Mixin ä¸€æ ·è®¾ç½®æŽ¥å£åè¦†ç›–ï¼Œä»¥åŽä¼šç§»é™¤\n           ")])],1),e._v(" "),t("div",{staticClass:"item"},[e.detectedInterfaceName?t("MoreHint",{staticClass:"interface-hint",attrs:{text:"ä¾¦æµ‹åˆ°: ".concat(e.detectedInterfaceName),clickable:!1}}):e._e(),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:e.settings.interfaceName||"é€‰æ‹©"},on:{click:e.handleSelectInterface}})],1)])]),e._v(" "),t("Section",{attrs:{title:"å­è¿›ç¨‹"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("å¯åŠ¨å…¶ä»–åº”ç”¨")]),e._v(" "),t("Info",[e._v("è®¾ç½®è¦ä½¿ç”¨ä»ªè¡¨æ¿ç”Ÿæˆçš„å­è¿›ç¨‹,\n            "),t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/childprocess.html"}},[e._v("åœ¨çº¿æ–‡æ¡£")])])],1),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditChildProcess}})],1)]),e._v(" "),t("Section",{attrs:{title:"é…ç½®"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("é…ç½®æ–‡ä»¶é¢„å¤„ç†")]),e._v(" "),t("Info",[e._v("åœ¨ä¸‹è½½åŽä¿®æ”¹å’Œè‡ªå®šä¹‰ä½ çš„é…ç½®ï¼Œåœ¨\n            "),t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/diff.html"}},[e._v("Diff")]),e._v("å¼€å§‹ä¹‹å‰\n            "),t("ul",[t("li",[t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/parser.html"}},[e._v("åœ¨çº¿æ–‡æ¡£")])])])])],1),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditProfileParsers}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("æŽ§åˆ¶å°è¾“å‡º")]),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"æ‰“å¼€æ–‡ä»¶"},on:{click:e.handleOpenConsoleFile}})],1),e._v(" "),t("separator"),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("èµ„æ–™å¤¹è·¯å¾„")]),e._v(" "),t("Info",[e._v("è®¾ç½®é…ç½®æ–‡ä»¶æ–‡ä»¶å¤¹çš„è·¯å¾„ï¼Œå¦‚æžœåœ¨CFWè½¯ä»¶æ ¹ç›®å½•ä¸‹åˆ›å»ºåä¸º data çš„æ–‡ä»¶å¤¹åˆ™ä¼šå¼€å¯ä¾¿æºæ¨¡å¼ï¼Œé»˜è®¤è·¯å¾„: Home\n            Directory/profiles")])],1),e._v(" "),t("div",{staticClass:"item"},[t("SimpleInput",{staticClass:"short-input",attrs:{placeholder:"é…ç½®æ–‡ä»¶æ–‡ä»¶å¤¹è·¯å¾„"},model:{value:e.settings.profilePath,callback:function(t){e.$set(e.settings,"profilePath",t)},expression:"settings.profilePath"}}),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"é€‰æ‹©"},on:{click:e.handleChooseProfilePath}})],1)]),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("è‡ªå®šä¹‰è¯·æ±‚å¤´")]),e._v(" "),t("Info",[e._v("æ›´æ–°é…ç½®æ–‡ä»¶æ—¶è®¾ç½®è¯·æ±‚æ ‡å¤´å†…å®¹"),t("br"),t("br"),e._v("\n            åœ¨ Profiles æ¨¡å—ä¸­è®¾ç½®å•ç‹¬çš„é…ç½®æ–‡ä»¶è¯·æ±‚å¤´å†…å®¹\n            ")])],1),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditHeaders}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("æ›´æ–°åŽé€‰æ‹©")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ˜¯å¦åœ¨æ›´æ–°åŽé€‰æ‹©å·²æ›´æ–°çš„é…ç½®æ–‡ä»¶")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.selectAfterUpdated,callback:function(t){e.$set(e.settings,"selectAfterUpdated",t)},expression:"settings.selectAfterUpdated"}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("é€šè¿‡å†…ç½®ä»£ç†æ›´æ–°")]),e._v(" "),t("Info",[e._v("é»˜è®¤æƒ…å†µä¸‹ï¼ŒCFW ä¸­çš„è¯·æ±‚å°†éµå¾ªç³»ç»Ÿä»£ç†è®¾ç½®ã€‚ å½“æ­¤å¼€å…³æ‰“å¼€æ—¶ï¼ŒProfiles çš„æ›´æ–°è¯·æ±‚å°†é€šè¿‡å†…ç½®ä»£ç†å®šå‘è‡³ Clash")])],1),e._v(" "),t("SwitchView",{model:{value:e.settings.updateProfileThroughClashProxy,callback:function(t){e.$set(e.settings,"updateProfileThroughClashProxy",t)},expression:"settings.updateProfileThroughClashProxy"}})],1)],1),e._v(" "),t("Section",{attrs:{title:"æ—¥å¿—"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("é¢„è½½")]),e._v(" "),t("Info",[e._v("åœ¨ Logs æ¨¡å—ä¸­è®¾ç½®è¦é¢„åŠ è½½çš„æ—¥å¿—è¡Œæ•°,\n            è®¾ç½®ä¸º 0 ä¸é¢„åŠ è½½")])],1),e._v(" "),t("SimpleInput",{attrs:{type:"number",placeholder:"30",suffix:"çº¿ç¨‹"},model:{value:e.settings.logPreloadLineCount,callback:function(t){e.$set(e.settings,"logPreloadLineCount",t)},expression:"settings.logPreloadLineCount"}})],1)]),e._v(" "),t("Section",{attrs:{title:"æœåŠ¡é›†æ ‡è¯†ï¼ˆSSIDï¼‰"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"relative flex items-center"},[t("div",[e._v("ç­–ç•¥")]),e._v(" "),t("Info",[t("div",[e._v("\n              è®¾ç½®SSIDåŒ¹é…ç­–ç•¥ï¼Œç¬¬ä¸€ä¸ªåŒ¹é…çš„ç­–ç•¥\n              å°†è¢«ä½¿ç”¨,\n              "),t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/ssid.html"}},[e._v("åœ¨çº¿æ–‡æ¡£")])])])],1),e._v(" "),t("div",{staticClass:"flex-grow"}),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditSSIDStrategy}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",{staticClass:"relative flex items-center"},[t("div",[e._v("èŽ·å–å½“å‰çš„ SSID")]),e._v(" "),t("Info",[t("div",[e._v("\n              å¤šä¸ª SSID çš„è¿žæŽ¥æ–¹å¼ä¸º"),t("span",{staticClass:"quote"},[e._v(",")])])])],1),e._v(" "),t("div",{staticClass:"flex-grow"}),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"èŽ·å–"},on:{click:e.handleFetchCurrentSSID}})],1)]),e._v(" "),t("Section",{attrs:{title:"æ“ä½œ(Actions)"}},[t("div",{staticClass:"item"},[t("div",{staticClass:"flex items-center"},[t("div",[e._v("è„šæœ¬")]),e._v(" "),t("Info",[e._v("è®¾ç½®æ‰§è¡ŒActionæ—¶è¦è°ƒç”¨çš„ä»£ç ,\n            "),t("a",{attrs:{href:"https://docs.cfw.lbyczf.com/contents/actions.html"}},[e._v("åœ¨çº¿æ–‡æ¡£")])])],1),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"ç¼–è¾‘"},on:{click:e.handleEditActionScripts}})],1),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("æŽ§åˆ¶å°è¾“å‡º")]),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"æ‰“å¼€æ–‡ä»¶"},on:{click:e.handleOpenActionScriptsConsoleFile}})],1)]),e._v(" "),t("Section",{attrs:{title:"å¿«æ·é”®"}},[e.isLinux?e._e():t("div",{staticClass:"item"},[t("div",[e._v("ç³»ç»Ÿä»£ç†")]),e._v(" "),t("div",{staticClass:"item"},[t("KeyCapture",{staticClass:"input",attrs:{placeholder:"ç‚¹å‡»ä»¥å½•åˆ¶çƒ­é”®"},model:{value:e.settings.shortcutSystemProxy,callback:function(t){e.$set(e.settings,"shortcutSystemProxy",t)},expression:"settings.shortcutSystemProxy"}})],1)]),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("TUN æ¨¡å¼")]),e._v(" "),t("div",{staticClass:"item"},[t("KeyCapture",{staticClass:"input",attrs:{placeholder:"ç‚¹å‡»ä»¥å½•åˆ¶çƒ­é”®"},model:{value:e.settings.shortcutTun,callback:function(t){e.$set(e.settings,"shortcutTun",t)},expression:"settings.shortcutTun"}})],1)]),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("æ··åˆé…ç½®")]),e._v(" "),t("div",{staticClass:"item"},[t("KeyCapture",{staticClass:"input",attrs:{placeholder:"ç‚¹å‡»ä»¥å½•åˆ¶çƒ­é”®"},model:{value:e.settings.shortcutMixin,callback:function(t){e.$set(e.settings,"shortcutMixin",t)},expression:"settings.shortcutMixin"}})],1)]),e._v(" "),t("separator"),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("å…¨å±€æ¨¡å¼")]),e._v(" "),t("div",{staticClass:"item"},[t("KeyCapture",{staticClass:"input",attrs:{placeholder:"ç‚¹å‡»ä»¥å½•åˆ¶çƒ­é”®"},model:{value:e.settings.shortcutGlobalMode,callback:function(t){e.$set(e.settings,"shortcutGlobalMode",t)},expression:"settings.shortcutGlobalMode"}})],1)]),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("è§„åˆ™æ¨¡å¼")]),e._v(" "),t("div",{staticClass:"item"},[t("KeyCapture",{staticClass:"input",attrs:{placeholder:"ç‚¹å‡»ä»¥å½•åˆ¶çƒ­é”®"},model:{value:e.settings.shortcutRuleMode,callback:function(t){e.$set(e.settings,"shortcutRuleMode",t)},expression:"settings.shortcutRuleMode"}})],1)]),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("ç›´è¿žæ¨¡å¼")]),e._v(" "),t("div",{staticClass:"item"},[t("KeyCapture",{staticClass:"input",attrs:{placeholder:"ç‚¹å‡»ä»¥å½•åˆ¶çƒ­é”®"},model:{value:e.settings.shortcutDirectMode,callback:function(t){e.$set(e.settings,"shortcutDirectMode",t)},expression:"settings.shortcutDirectMode"}})],1)]),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("è„šæœ¬æ¨¡å¼")]),e._v(" "),t("div",{staticClass:"item"},[t("KeyCapture",{staticClass:"input",attrs:{placeholder:"ç‚¹å‡»ä»¥å½•åˆ¶çƒ­é”®"},model:{value:e.settings.shortcutScriptMode,callback:function(t){e.$set(e.settings,"shortcutScriptMode",t)},expression:"settings.shortcutScriptMode"}})],1)]),e._v(" "),t("separator"),e._v(" "),t("div",{staticClass:"item"},[t("div",[e._v("æ˜¾ç¤º/éšè—ä»ªè¡¨æ¿")]),e._v(" "),t("div",{staticClass:"item"},[t("KeyCapture",{staticClass:"input",attrs:{placeholder:"ç‚¹å‡»ä»¥å½•åˆ¶çƒ­é”®"},model:{value:e.settings.shortcutShowHideDashboard,callback:function(t){e.$set(e.settings,"shortcutShowHideDashboard",t)},expression:"settings.shortcutShowHideDashboard"}})],1)]),e._v(" "),e.isLinux?e._e():t("div",{staticClass:"item"},[t("div",[e._v("è¿è¡Œçº¸ç›˜è„šæœ¬")]),e._v(" "),t("div",{staticClass:"item"},[t("KeyCapture",{staticClass:"input",attrs:{placeholder:"ç‚¹å‡»ä»¥å½•åˆ¶çƒ­é”®"},model:{value:e.settings.shortcutRunTrayScript,callback:function(t){e.$set(e.settings,"shortcutRunTrayScript",t)},expression:"settings.shortcutRunTrayScript"}})],1)])],1),e._v(" "),t("Section",{attrs:{title:"é…ç½®ç¼–è¾‘å™¨"}},[t("div",{staticClass:"item"},[t("div",[e._v("å­—ä½“å¤§å°")]),e._v(" "),t("SimpleInput",{attrs:{type:"number",placeholder:"13",suffix:"px"},model:{value:e.settings.editorFontSize,callback:function(t){e.$set(e.settings,"editorFontSize",t)},expression:"settings.editorFontSize"}})],1)]),e._v(" "),t("Section",{attrs:{title:"ç¼“å­˜"}},[t("div",{staticClass:"item"},[t("div",[e._v("Fake IP ç¼“å­˜")]),e._v(" "),t("MoreHint",{staticClass:"hint",attrs:{text:"æ¸…é™¤"},on:{click:e.handlerClearFakeIPCache}})],1)]),e._v(" "),t("Section",{attrs:{title:"å®žéªŒåŠŸèƒ½"}},[e.isMacOS?t("div",{staticClass:"item"},[t("div",[e._v("DHCP æœåŠ¡å™¨")]),e._v(" "),t("SwitchView",{model:{value:e.settings.enableDHCPServer,callback:function(t){e.$set(e.settings,"enableDHCPServer",t)},expression:"settings.enableDHCPServer"}})],1):e._e()])],1):e._e(),e._v(" "),t("navigator",{attrs:{list:e.sections},on:{select:e.handleNavigatToGroup}}),e._v(" "),e.isEditingExternal?t("div",{staticClass:"edit-hint"},[t("div",[e._v("\n      "+e._s(["","Visual Studio Code","Sublime Text"][e.settings.editor])+" is\n      launching for editing.\n    ")]),e._v(" "),t("div",[e._v("å…³é—­ç¼–è¾‘æ–‡ä»¶ä»¥ä¿å­˜.")]),e._v(" "),t("div",{staticClass:"btn",on:{click:e.cancelExternalEdit}},[e._v("å–æ¶ˆ")])]):e._e()],1)}),[],!1,null,"fc0cd1de",null).exports},12436:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});var n=i(59713),o=i.n(n),s=i(24793),r=i(23321);function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const l={name:"simple-input",props:{value:[String,Number],placeholder:String,suffix:String,type:{type:String,default:function(){return"text"}}},model:{prop:"value",event:"change"},data:function(){return{suffixWidth:0,ref:""}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?a(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):a(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,r.mapState)({})),methods:{handleTextChange:s.debounce((function(e){var t=e.target,i=(t=void 0===t?{}:t).value;void 0!==i&&("number"===this.type?this.$emit("change",parseInt(i)):this.$emit("change",i))}),500)},mounted:function(){var e=this;this.ref=(0,s.uniqueId)("simple-input"),this.$nextTick((function(){e.suffixWidth=e.$refs[e.ref].clientWidth}))}};i(60569);const c=(0,i(51900).Z)(l,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-simple-input"},[t("input",{style:{paddingLeft:"10px",paddingRight:e.suffixWidth+10+"px"},attrs:{spellcheck:"false",type:e.type,placeholder:e.placeholder},domProps:{value:e.value},on:{input:e.handleTextChange}}),e._v(" "),t("div",{ref:e.ref,staticClass:"suffix"},[e._v(e._s(e.suffix))])])}),[],!1,null,"0f00486f",null).exports},72574:(e,t,i)=>{"use strict";i.d(t,{Z:()=>o});const n={name:"EscCapture",methods:{handleKeyDown:function(e){(e.metaKey||e.ctrlKey)&&87===e.keyCode&&this.$emit("esc"),27===e.keyCode&&this.$emit("esc")}},mounted:function(){this.$el.focus&&this.$el.focus()}};const o=(0,i(51900).Z)(n,(function(){var e=this;return(0,e._self._c)("div",e._g({staticClass:"no-esc",attrs:{tabindex:"0"},on:{keydown:e.handleKeyDown}},e.$listeners),[e._t("default")],2)}),[],!1,null,"3ccabdf6",null).exports},13338:(e,t,i)=>{"use strict";i.d(t,{Z:()=>o});const n={name:"HintView",props:{hint:{type:String,required:!0},position:{type:String,default:"top",validate:function(e){return["top","bottom","left","right"].includes(e)}}},data:function(){return{timeoutID:null,isShowHint:!1}},computed:{},methods:{startCounting:function(){var e=this;this.timeoutID=setTimeout((function(){e.isShowHint=!0}),1e3)},stopCounting:function(){this.timeoutID&&(clearTimeout(this.timeoutID),this.timeoutID=null,this.isShowHint=!1)}},updated:function(){var e=this;this.$nextTick((function(){try{var t=e.$refs.hint.getBoundingClientRect(),i=t.x,n=t.y,o=t.width,s=t.height,r=e.$refs["hint-text"],a=null==r?void 0:r.getBoundingClientRect(),l=(a.x,a.y,a.width),c=a.height;"top"===e.position?(r.style.top="".concat(n-c-5,"px"),r.style.left="".concat(i-l/2+o/2,"px")):"bottom"===e.position?(r.style.top="".concat(n+s+5,"px"),r.style.left="".concat(i-l/2+o/2,"px")):"left"===e.position?(r.style.top="".concat(n-c/2+s/2,"px"),r.style.left="".concat(i-l-5,"px")):"right"===e.position&&(r.style.top="".concat(n-c/2+s/2,"px"),r.style.left="".concat(i+o+5,"px"))}catch(e){}}))}};i(13096);const o=(0,i(51900).Z)(n,(function(){var e=this,t=e._self._c;return t("div",e._g({ref:"hint",staticClass:"main-hint-view flex flex-col justify-center items-center w-[18px] h-[18px]",on:{mouseenter:e.startCounting,mouseleave:e.stopCounting}},e.$listeners),[e.isShowHint?t("span",{ref:"hint-text",staticClass:"hint"},[e._v(e._s(e.hint))]):e._e(),e._v(" "),e._t("default")],2)}),[],!1,null,"6e240a95",null).exports},36336:(e,t,i)=>{"use strict";i.d(t,{Z:()=>c});var n=i(59713),o=i.n(n),s=(i(72298),i(23321)),r=i(8369);function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const l={name:"info-icon",data:function(){return{isShowContent:!1,timeoutID:null,contentPosition:{top:"-1000px",left:"-1000px"}}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?a(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):a(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,s.mapState)({})),watch:{isShowContent:function(e){if(e){var t=this.$refs.icon.getBoundingClientRect(),i=this.$refs.content;t.y+20+i.offsetHeight<window.innerHeight?this.contentPosition={top:t.y+"px",left:t.x+20+"px"}:this.contentPosition={top:t.y+20-i.offsetHeight+"px",left:t.x+20+"px"}}else this.contentPosition={top:"-1000px",left:"-1000px"}}},methods:{handleMouseEnter:function(){var e=this;this.timeoutID=setTimeout((function(){e.isShowContent=!0}),500)},handleMouseLeave:function(){this.isShowContent=!1,this.timeoutID&&clearTimeout(this.timeoutID)},handleContentClick:function(e){var t=e.target;if(t){var i=t.href;i&&(0,r.fl)(i)}}},mounted:function(){}};i(55230);const c=(0,i(51900).Z)(l,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"info-icon-main",on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave}},[t("div",{ref:"content",staticClass:"content",style:e.contentPosition,on:{click:e.handleContentClick}},[e._t("default")],2),e._v(" "),t("span",{ref:"icon",staticClass:"icon pr-1 text-base text-[color:var(--general-settings-icon-c)] opacity-70"},[e._v("info")])])}),[],!1,null,"d4bbbea2",null).exports},11287:(e,t,i)=>{"use strict";i.d(t,{Z:()=>h});var n=i(59713),o=i.n(n),s=i(24793),r=i.n(s),a=i(23321);function l(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function c(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?l(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):l(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const d={name:"Navigator",props:{list:{type:Array,required:!0},index:{type:Number,default:-1},width:{type:String,default:"100"},errorIndexes:{type:Array,default:function(){return[]}}},data:function(){return{currentHoverIndex:-1}},watch:{index:r().debounce((function(e){if(this.isClosed&&e>-1){var t=this.$refs.list,i=this.$refs.items;t&&i&&i.length>e&&(t.scrollTop=i[e].offsetTop)}}),500)},computed:c(c({},(0,a.mapState)({})),{},{isClosed:function(){return-1===this.currentHoverIndex},listStyle:function(){var e=this.width||"100";return this.isClosed?{opacity:.5,alignItems:"center",width:"20px",backgroundColor:"transparent"}:{opacity:1,width:"".concat(e,"px"),right:"-10px",transform:"translateX(-10px)",borderLeftWidth:"1px"}}}),methods:{handleHover:function(e){this.currentHoverIndex=e},itemClass:function(e){return this.errorIndexes.includes(e)?["item-error"]:this.currentHoverIndex===e?["item-hover"]:e===this.index?["item-selected"]:void 0}},updated:function(){}};i(82779);const h=(0,i(51900).Z)(d,(function(){var e=this,t=e._self._c;return t("div",{ref:"list",staticClass:"main-proxy-navigator",style:e.listStyle,on:{mouseleave:function(t){e.currentHoverIndex=-1}}},e._l(e.list,(function(i,n){return t("div",{key:i,ref:"items",refInFor:!0,staticClass:"clickable item",class:e.itemClass(n),on:{mouseover:function(t){return e.handleHover(n)},click:function(t){return e.$emit("select",n)}}},[e._v("\n    "+e._s(e.isClosed?e.$removeEmoji(i).trim()[0]:i)+"\n  ")])})),0)}),[],!1,null,"298f5540",null).exports},17285:(e,t,i)=>{"use strict";i.d(t,{Z:()=>l});var n=i(59713),o=i.n(n),s=i(23321);function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const a={name:"SelectView",props:{items:Array,index:{type:Number,default:function(){return 0}}},model:{prop:"index",event:"select"},data:function(){return{}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?r(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,s.mapState)({})),methods:{handleItemClick:function(e){this.$emit("select",e)},itemClass:function(e){var t=["item","item-".concat(e%2==0?"double":"single")];return e===this.index&&t.push("item-selected"),0===e?t.push("item-first"):e===this.items.length-1&&t.push("item-last"),t}}};i(67033);const l=(0,i(51900).Z)(a,(function(){var e=this,t=e._self._c;return t("div",{class:["main-select-view"]},e._l(e.items,(function(i,n){return t("div",{key:n,class:e.itemClass(n),on:{click:function(t){return e.handleItemClick(n)}}},[e._v("\n    "+e._s(i)+"\n  ")])})),0)}),[],!1,null,"e458e7bc",null).exports},62639:(e,t,i)=>{"use strict";i.d(t,{Z:()=>a});var n=i(59713),o=i.n(n);function s(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const r={props:["on"],model:{prop:"on",event:"change"},data:function(){return{}},watch:{},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?s(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):s(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,i(23321).mapState)({})),methods:{handleClick:function(e){this.$emit("change",!this.on)}},mounted:function(){}};i(60920);const a=(0,i(51900).Z)(r,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main",on:{click:e.handleClick}},[t("transition",{attrs:{name:"move-right"}},[e.on?e._e():t("div",{staticClass:"text"},[t("div",{staticClass:"base tint-right"}),e._v(" "),t("div",{staticClass:"base text-font text-off"})])]),e._v(" "),t("transition",{attrs:{name:"move-left"}},[e.on?t("div",{staticClass:"text"},[t("div",{staticClass:"base text-font text-on"}),e._v(" "),t("div",{staticClass:"base tint-left"})]):e._e()])],1)}),[],!1,null,"37d0be30",null).exports},31091:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>c});var n=i(59713),o=i.n(n),s=i(23321);function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?r(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const l={components:{EscCapture:i(72574).Z},name:"AlertView",props:[],data:function(){return{isShow:!1,content:"",title:"é”™è¯¯",isShowErrorBtn:!1,resolve:null,reject:null}},computed:a(a({},(0,s.mapState)({})),(0,s.mapGetters)(["theme"])),methods:{show:function(e){var t=this,i=e.title,n=void 0===i?"é”™è¯¯":i,o=e.content,s=void 0===o?"":o,r=e.isShowErrorBtn,a=void 0!==r&&r;return this.isShow=!0,this.title=n,this.content=s,this.isShowErrorBtn=a,new Promise((function(e,i){t.resolve=e,t.reject=i}))},handleKeyDown:function(e){13===e.keyCode&&this.handleDone()},handleCancel:function(){this.isShow=!1,this.reject()},handleDone:function(){this.isShow=!1,this.resolve({})}}};i(92732);const c=(0,i(51900).Z)(l,(function(){var e=this,t=e._self._c;return e.isShow?t("EscCapture",{staticClass:"main-alert-view-plugin bg-[color:var(--mask-c)]",class:["theme-".concat(e.theme)],on:{esc:e.handleCancel,mousedown:e.handleCancel}},[t("div",{staticClass:"card-main bg-[color:var(--bgc)] text-[color:var(--fgc)]",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{staticClass:"card-content"},[t("div",{staticClass:"content-title"},[e._v(e._s(e.title))]),e._v(" "),t("div",{staticClass:"content-content"},[e._v(e._s(e.content))]),e._v(" "),t("div",{staticClass:"card-btns"},[e.isShowErrorBtn?t("div",{staticClass:"btn btn-cancel",on:{click:e.handleCancel}},[e._v("\n          å–æ¶ˆ\n        ")]):e._e(),e._v(" "),t("div",{staticClass:"btn btn-ok",on:{click:e.handleDone}},[e._v("ç¡®å®š")])])])])]):e._e()}),[],!1,null,"12619986",null).exports},97889:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>L});var n=i(48926),o=i.n(n),s=i(319),r=i.n(s),a=i(63038),l=i.n(a),c=i(59713),d=i.n(c),h=i(87757),u=i.n(h),g=i(11442),p=i(58583),f=i(23321),m=i(13338),v=i(83566),_=i(8369),b=i(72574),w=i(11287),y=i(51792);i(81518),i(24883),i(72298);function C(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function x(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?C(Object(i),!0).forEach((function(t){d()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):C(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const S={name:"CodeView",props:[],components:{Hint:m.Z,EscCapture:b.Z,Navigator:w.Z},data:function(){return{editor:null,isShow:!1,resolve:null,reject:null,language:"",code:"",originCode:"",error:null,readOnly:!1,fontSize:13,isSelecting:!1}},watch:{isShow:function(e){e||(this.editor&&this.editor.dispose(),this.editor=null)}},computed:x(x(x({},(0,f.mapState)({})),(0,f.mapGetters)(["theme"])),{},{saveHint:function(){return(0,v.V5)()?"Command+S":"ä¿å­˜(Ctrl+S)"},topKeys:function(){return this.code.split("\n").reduce((function(e,t,i){var n=t.match(/^(?!\s|-)(.+):(\s|$)/)||[],o=l()(n,2),s=(o[0],o[1]);return s?[].concat(r()(e),[{key:s,index:i}]):e}),[])},topKeyNames:function(){return this.topKeys.map((function(e){return e.key}))}}),methods:{show:function(e){var t=this,i=e.code,n=e.language,o=void 0===n?"yaml":n,s=e.readOnly,r=void 0!==s&&s,a=e.fontSize,l=void 0===a?13:a;return this.isShow=!0,this.language=o,this.readOnly=r,this.error="",this.code=i,this.originCode=i,this.fontSize=l||13,this.$nextTick((function(){t.editor=p.editor.create(t.$refs.editor,{value:i,language:o,theme:"vs-dark",fontFamily:"Consolas, Monaco, Lucida Console, Liberation Mono,\n        DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace",fontSize:t.fontSize,automaticLayout:!0,readOnly:r,minimap:{enabled:!1},contextmenu:!1,scrollbar:{verticalScrollbarSize:12,horizontalScrollbarSize:12},quickSuggestions:{other:!0,strings:!0},smoothScrolling:!0}),t.editor.onDidChangeModelContent((function(){t.code=t.editor.getValue()})),t.editor.addAction({id:"save",label:"ä¿å­˜",run:function(){t.save()},keybindings:[p.KeyMod.CtrlCmd|p.KeyCode.KeyS]}),t.editor.setSelection(new p.Selection(1,1,1,1)),t.editor.setScrollTop((0,y.b)((0,_.Ll)(t.code))),t.editor.onDidChangeCursorSelection((function(){t.isSelecting=!t.editor.getSelection().isEmpty()})),t.editor.getContribution("editor.linkDetector").openerService._defaultExternalOpener.openExternal=_.fl,t.editor.focus()})),new Promise((function(e,i){t.resolve=e,t.reject=i}))},handleSaveClick:function(){this.save()},handleAbortClick:function(){var e=this;return o()(u().mark((function t(){var i,n;return u().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.code===e.originCode){t.next=9;break}return t.next=3,(0,_.vC)({type:"warning",message:"æ˜¯å¦è¦ä¿å­˜æ›´æ”¹?",buttons:["ä¿å­˜","ä¸ä¿å­˜","å–æ¶ˆ"]});case 3:i=t.sent,0===(n=i.response)&&e.save(),1===n&&e.cancel(),t.next=10;break;case 9:e.cancel();case 10:case"end":return t.stop()}}),t)})))()},saveScrollTop:function(){(0,y.F)((0,_.Ll)(this.code),this.editor.getScrollTop())},save:function(){if(this.resolve)try{"yaml"===this.language&&g.parse(this.code,{prettyErrors:!0,strict:!1}),this.resolve({code:this.code}),this.saveScrollTop(),this.isShow=!1}catch(e){this.error="Error: ".concat(e.message)}},cancel:function(){this.reject(),this.saveScrollTop(),this.isShow=!1},handleNavigate:function(e){var t=this.topKeys[e].index;this.editor.setScrollPosition({scrollTop:this.editor.getTopForLineNumber(t+1)},0)}},mounted:function(){},beforeDestroy:function(){}},k=S;i(14902),i(32225);const L=(0,i(51900).Z)(k,(function(){var e=this,t=e._self._c;return e.isShow?t("EscCapture",{staticClass:"main-code-view line-numbers bg-[color:var(--mask-c)]",on:{esc:e.handleAbortClick,mousedown:function(t){return t.target!==t.currentTarget?null:e.handleAbortClick.apply(null,arguments)}}},[t("div",{staticClass:"card"},[t("div",{ref:"editor",staticClass:"editor"}),e._v(" "),e.isSelecting?e._e():t("navigator",{staticClass:"navigator",attrs:{list:e.topKeyNames},on:{select:e.handleNavigate}}),e._v(" "),e.error?t("div",{staticClass:"error"},[t("div",[e._v(e._s(e.error))]),e._v(" "),t("div",{staticClass:"clickable",on:{click:function(t){e.error=""}}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("close")])])]):e._e(),e._v(" "),t("div",{staticClass:"btns"},[t("Hint",{staticClass:"abort-btn clickable",attrs:{hint:"é€€å‡º"},on:{click:e.handleAbortClick}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("close")])]),e._v(" "),e.readOnly?e._e():t("Hint",{staticClass:"save-btn clickable",attrs:{hint:e.saveHint},on:{click:e.handleSaveClick}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("save")])])],1)],1)]):e._e()}),[],!1,null,"35f836ea",null).exports},7905:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>f});var n=i(48926),o=i.n(n),s=i(87757),r=i.n(s),a=i(58583),l=i(72574),c=i(13338),d=i(83566),h=i(8369),u=(i(72298),i(81518)),g=i(24883);const p={components:{Hint:c.Z,EscCapture:l.Z},name:"DiffView",props:{},data:function(){return{isShow:!1,editor:null,resolve:null,reject:null,changeModel:null,baseModel:null,originalChangeCode:"",renderSideBySide:!1}},watch:{isShow:function(e){e||(this.editor&&this.editor.dispose(),this.editor=null)},renderSideBySide:function(e){this.editor&&this.editor.updateOptions({renderSideBySide:e}),g.Z.put(u.Z.IS_DIFF_EIDTOR_SEPARATED,e)}},computed:{saveHint:function(){return(0,d.V5)()?"Command+S":"ä¿å­˜(Ctrl+S)"}},methods:{show:function(e){var t=this,i=e.base,n=e.change;return this.isShow=!0,this.renderSideBySide=g.Z.get(u.Z.IS_DIFF_EIDTOR_SEPARATED),this.originalChangeCode=n,this.baseModel=a.editor.createModel(i,"yaml"),this.changeModel=a.editor.createModel(n,"yaml"),this.$nextTick((function(){t.editor=a.editor.createDiffEditor(t.$refs.editor,{language:"yaml",theme:"vs-dark",fontFamily:"Consolas, Monaco, Lucida Console, Liberation Mono,\n        DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace",fontSize:12,automaticLayout:!0,renderSideBySide:t.renderSideBySide,minimap:{enabled:!1},contextmenu:!1,scrollbar:{verticalScrollbarSize:12,horizontalScrollbarSize:12},quickSuggestions:{other:!0,strings:!0}}),t.editor.addAction({id:"save",label:"ä¿å­˜",run:t.handleSave,keybindings:[a.KeyMod.CtrlCmd|a.KeyCode.KeyS]}),t.editor.setModel({original:t.baseModel,modified:t.changeModel}),t.editor.getModifiedEditor().getContribution("editor.linkDetector").openerService._defaultExternalOpener.openExternal=h.fl})),new Promise((function(e,i){t.resolve=e,t.reject=i}))},handleCancel:function(){var e=this;return o()(r().mark((function t(){var i,n;return r().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.changeModel.getValue()===e.originalChangeCode){t.next=9;break}return t.next=3,(0,h.vC)({type:"warning",message:"æ˜¯å¦è¦ä¿å­˜æ›´æ”¹?",buttons:["ä¿å­˜","ä¸ä¿å­˜","å–æ¶ˆ"]});case 3:i=t.sent,0===(n=i.response)&&e.handleSave(),1===n&&(e.reject(),e.isShow=!1),t.next=11;break;case 9:e.reject(),e.isShow=!1;case 11:case"end":return t.stop()}}),t)})))()},handleSave:function(){this.resolve(this.changeModel.getValue()),this.isShow=!1},handleChangeStyle:function(){this.renderSideBySide=!this.renderSideBySide}},mounted:function(){}};i(43356);const f=(0,i(51900).Z)(p,(function(){var e=this,t=e._self._c;return e.isShow?t("esc-capture",{staticClass:"main-diff-view bg-[color:var(--mask-c)]",on:{esc:e.handleCancel,mousedown:function(t){return t.target!==t.currentTarget?null:e.handleCancel.apply(null,arguments)}}},[t("div",{staticClass:"card"},[t("div",{ref:"editor",staticClass:"editor"}),e._v(" "),t("div",{staticClass:"btns"},[t("Hint",{staticClass:"change-btn-off clickable",class:{"change-btn-on":e.renderSideBySide},attrs:{hint:"å¹¶æŽ’æ¨¡å¼"},on:{click:e.handleChangeStyle}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("compare")])]),e._v(" "),t("Hint",{staticClass:"abort-btn clickable",attrs:{hint:"é€€å‡º(ESC)"},on:{click:e.handleCancel}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("close")])]),e._v(" "),t("Hint",{staticClass:"save-btn clickable",attrs:{hint:e.saveHint},on:{click:e.handleSave}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("save")])])],1)])]):e._e()}),[],!1,null,"c878e8f6",null).exports},29250:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>f});var n=i(48926),o=i.n(n),s=i(319),r=i.n(s),a=i(59713),l=i.n(a),c=i(87757),d=i.n(c),h=i(23321);function u(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function g(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?u(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):u(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const p={components:{EscCapture:i(72574).Z},name:"DNSView",props:[],data:function(){return{data:[],isShow:!1,searchHost:"",searchType:"A",error:"",flags:[],status:"",answers:[],authorities:[],additionals:[],questions:[],resolve:null,reject:null,server:"",rttypes:{1:"A",28:"AAAA",5:"CNAME",15:"MX",2:"NS",12:"PTR",6:"SOA",33:"SRV",16:"TXT"}}},watch:{},computed:g(g({},(0,h.mapGetters)(["theme","clashAxiosClient"])),{},{questionMixed:function(){var e=this;return this.questions.reduce((function(t,i){return t=[].concat(r()(t),[i.Name,e.rttypes[i.Qtype]])}),[])},answerMixed:function(){var e=this;return this.answers.reduce((function(t,i){return t=[].concat(r()(t),[i.name,i.TTL,e.rttypes[i.type],i.data])}),[])},authorityMixed:function(){var e=this;return this.authorities.reduce((function(t,i){return t=[].concat(r()(t),[i.name,i.TTL,e.rttypes[i.type],i.data])}),[])},additionalMixed:function(){var e=this;return this.additionals.reduce((function(t,i){return t=[].concat(r()(t),[i.name,i.TTL,e.rttypes[i.type],i.data])}),[])}}),methods:{show:function(){var e=this;return this.isShow=!0,this.$nextTick((function(){e.$refs["search-input"].focus()})),new Promise((function(t,i){e.resolve=t,e.reject=i}))},parseDoHData:function(e){var t=e.Status,i=e.TC,n=e.RD,o=e.RA,s=e.AD,r=e.CD,a=e.Server,l=void 0===a?"":a,c=e.Question,d=void 0===c?[]:c,h=e.Answer,u=void 0===h?[]:h,g=e.Authority,p=void 0===g?[]:g,f=e.Additional,m=void 0===f?[]:f;this.status={0:"NOERROR",1:"FORMERR",2:"SERVFAIL",3:"NXDOMAIN",4:"NOTIMP",5:"REFUSED",6:"YXDOMAIN",7:"YXRRSET",8:"NXRRSET",9:"NOTAUTH",10:"NOTZONE",11:"DSOTYPENI",16:"BADVERS",17:"BADKEY",18:"BADTIME",19:"BADMODE",20:"BADNAME",21:"BADALG",22:"BADTRUNC"}[t],this.flags=[i?"tc":"",n?"rd":"",o?"ra":"",s?"ad":"",r?"cd":""].filter((function(e){return e})).map((function(e){return e.toUpperCase()})),this.answers=u,this.authorities=p,this.additionals=m,this.questions=d,this.server=l},handleSearch:function(){var e=this;return o()(d().mark((function t(){var i,n,o,s,r;return d().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e.error="",i=function(){e.additionals=[],e.authorities=[],e.answers=[],e.questions=[],e.status="",e.flags=[],e.server=""},!e.searchHost){t.next=18;break}return t.prev=3,t.next=6,e.clashAxiosClient.get("/dns/query",{params:{name:e.searchHost,type:e.searchType}});case 6:n=t.sent,o=null==n?void 0:n.data,e.parseDoHData(o),t.next=16;break;case 11:t.prev=11,t.t0=t.catch(3),r=t.t0.response,e.error=(null==r||null===(s=r.data)||void 0===s?void 0:s.message)||t.t0.message,i();case 16:t.next=20;break;case 18:e.error="è¯·è¾“å…¥åŸŸå",i();case 20:case"end":return t.stop()}}),t,null,[[3,11]])})))()},handleKeyDown:function(e){},handleCancel:function(){this.isShow=!1,this.reject()}}};i(51073);const f=(0,i(51900).Z)(p,(function(){var e=this,t=e._self._c;return e.isShow?t("EscCapture",{staticClass:"main-dns-view bg-[color:var(--mask-c)]",class:["theme-".concat(e.theme)],on:{esc:e.handleCancel,keydown:e.handleKeyDown,mousedown:e.handleCancel}},[t("div",{staticClass:"card-main bg-[color:var(--bgc)] text-[color:var(--fgc)]",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{staticClass:"card-content p-4"},[t("div",{staticClass:"px-2 text-lg"},[e._v("DNSæŸ¥è¯¢")]),e._v(" "),t("div",{staticClass:"px-2 py-2 flex items-center gap-2"},[t("input",{directives:[{name:"model",rawName:"v-model",value:e.searchHost,expression:"searchHost"}],ref:"search-input",staticClass:"p-2 py-1 outline-none flex-grow",attrs:{placeholder:"ä¸»æœºï¼ˆHostï¼‰"},domProps:{value:e.searchHost},on:{change:e.handleSearch,input:function(t){t.target.composing||(e.searchHost=t.target.value)}}}),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.searchType,expression:"searchType"}],staticClass:"p-2 py-1 w-[80px] outline-none",attrs:{placeholder:"ç±»åž‹"},domProps:{value:e.searchType},on:{change:e.handleSearch,input:function(t){t.target.composing||(e.searchType=t.target.value)}}}),e._v(" "),t("button",{staticClass:"bg-[color:#14A53A] rounded-full text-sm px-4 py-1 text-white",on:{click:e.handleSearch}},[e._v("\n          æ£€ç´¢\n        ")])]),e._v(" "),""!==e.status?t("div",{staticClass:"px-2 content-items"},[t("div",{staticClass:"flex justify-between gap-2"},[t("div",{staticClass:"p flex-grow"},[t("span",[e._v("æœåŠ¡å™¨")]),e._v(" "),t("div",{staticClass:"c"},[e._v(e._s(e.server))])]),e._v(" "),t("div",{staticClass:"p"},[t("span",[e._v("çŠ¶æ€")]),e._v(" "),t("div",{staticClass:"c"},[e._v(e._s(e.status))])]),e._v(" "),t("div",{staticClass:"p"},[t("span",[e._v("æ ‡ç­¾")]),e._v(" "),t("div",{staticClass:"text-sm c flex gap-x-3"},e._l(e.flags,(function(i){return t("div",{key:i},[e._v("\n                "+e._s(i)+"\n              ")])})),0)])]),e._v(" "),e.answers.length>0?t("div",{staticClass:"p"},[t("span",[e._v("Answer")]),e._v(" "),t("div",{staticClass:"text-sm c grid grid-cols-4 gap-x-4",staticStyle:{"grid-template-columns":"repeat(4, auto)"}},e._l(e.answerMixed,(function(i,n){return t("div",{key:n,staticClass:"whitespace-pre-wrap break-all"},[t("div",[e._v(e._s(i))])])})),0)]):e._e(),e._v(" "),e.authorities.length>0?t("div",{staticClass:"p"},[t("span",[e._v("Authority")]),e._v(" "),t("div",{staticClass:"text-sm c grid grid-cols-4 gap-x-4",staticStyle:{"grid-template-columns":"repeat(4, auto)"}},e._l(e.authorityMixed,(function(i,n){return t("div",{key:n,staticClass:"whitespace-pre-wrap break-all"},[t("div",[e._v(e._s(i))])])})),0)]):e._e(),e._v(" "),e.additionals.length>0?t("div",{staticClass:"p"},[t("span",[e._v("Additional")]),e._v(" "),t("div",{staticClass:"text-sm c grid grid-cols-4 gap-x-4",staticStyle:{"grid-template-columns":"repeat(4, auto)"}},e._l(e.additionalMixed,(function(i,n){return t("div",{key:n,staticClass:"whitespace-pre-wrap break-all"},[t("div",[e._v(e._s(i))])])})),0)]):e._e()]):e._e(),e._v(" "),""===e.status&&""!==e.error?t("div",{staticClass:"error-hint"},[e._v("\n        "+e._s(e.error)+"\n      ")]):e._e()])])]):e._e()}),[],!1,null,"6e0989c7",null).exports},7249:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>l});var n=i(59713),o=i.n(n),s=i(23321);function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const a={components:{EscCapture:i(72574).Z},name:"InputView",props:[],data:function(){return{data:[],isShow:!1,error:"",title:"",hint:"",resolve:null,reject:null,confirmText:"OK"}},watch:{},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?r(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,s.mapGetters)(["theme"])),methods:{show:function(e){var t=this,i=e.data,n=void 0===i?[]:i,o=e.title,s=void 0===o?"":o,r=e.hint,a=void 0===r?"":r,l=e.confirmText,c=void 0===l?"OK":l;return this.error="",this.isShow=!0,this.data=n,this.title=s,this.hint=a,this.confirmText=c,this.$nextTick((function(){for(var e in n){var i=t.$refs["ta".concat(e)][0];i.style.height=i.scrollHeight+2+"px"}})),new Promise((function(e,i){t.resolve=e,t.reject=i}))},handleTextareaInput:function(e){var t=e.target;t&&(t.style.height="",t.style.height=t.scrollHeight+2+"px")},handleKeyDown:function(e){},handleCancel:function(){this.isShow=!1,this.reject()},handleDone:function(){if(this.data.filter((function(e){return e.required&&""===e.value})).length>0)this.error="required key(*) must have a value";else{var e=this.data.find((function(e){return e.hasOwnProperty("validate")&&""!==e.validate(e.value)}));if(e)this.error=e.validate(e.value);else{this.isShow=!1;var t={};this.data.forEach((function(e){var i=e.value;""!==i&&(t[e.key]=i)})),this.resolve(t)}}}}};i(20684);const l=(0,i(51900).Z)(a,(function(){var e=this,t=e._self._c;return e.isShow?t("EscCapture",{staticClass:"main-input-view-plugin bg-[color:var(--mask-c)]",class:["theme-".concat(e.theme)],on:{esc:e.handleCancel,keydown:e.handleKeyDown,mousedown:e.handleCancel}},[t("div",{staticClass:"card-main bg-[color:var(--bgc)] text-[color:var(--fgc)]",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{staticClass:"card-content"},[t("div",{staticClass:"content-title"},[e._v(e._s(e.title))]),e._v(" "),e.hint?t("div",{staticClass:"content-hint"},[e._v(e._s(e.hint))]):e._e(),e._v(" "),t("div",{staticClass:"content-items"},e._l(e.data,(function(i,n){return t("div",{key:n,staticClass:"content-item"},[t("div",{staticClass:"item-key"},[e._v("\n            "+e._s(i.name)+"\n            "),i.required?t("span",[e._v("*")]):e._e()]),e._v(" "),t("textarea",{directives:[{name:"model",rawName:"v-model",value:i.value,expression:"item.value"}],ref:"ta".concat(n),refInFor:!0,staticClass:"border-[1px] border-[color:var(--bc)]",attrs:{type:"text",rows:"1",spellcheck:"false",placeholder:i.placeholder},domProps:{value:i.value},on:{input:[function(t){t.target.composing||e.$set(i,"value",t.target.value)},e.handleTextareaInput]}})])})),0),e._v(" "),e.error?t("div",{staticClass:"error-hint"},[e._v(e._s(e.error))]):e._e(),e._v(" "),t("div",{staticClass:"card-btns"},[t("div",{staticClass:"btn btn-cancel",on:{click:e.handleCancel}},[e._v("å–æ¶ˆ")]),e._v(" "),t("div",{staticClass:"btn btn-ok",on:{click:e.handleDone}},[e._v(e._s(e.confirmText))])])])])]):e._e()}),[],!1,null,"15034054",null).exports},37142:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>l});var n=i(59713),o=i.n(n),s=i(23321);function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}const a={name:"MenuView",props:[],components:{EscCapture:i(72574).Z},data:function(){return{isShow:!1,options:{},items:[],contentStyles:{},isScrollBottom:!0}},watch:{isShow:function(e){var t=this;this.$nextTick((function(){if(e&&t.$refs.menu&&t.$refs.window.$el){var i=t.$refs.menu,n=i.clientHeight,o=i.clientWidth,s=t.$refs.window.$el,r=s.clientHeight,a=s.clientWidth,l=r+25,c=t.options,d=c.clientX,h=c.clientY,u={};h+n<=l-10?u.top=h+"px":h-n>=10?u.top=h-n+"px":(u.top=h+"px",u.height=l-h-10+"px",t.isScrollBottom=!1),u.left=d+o<=a?d+"px":d-o+"px",t.contentStyles=u}}))}},computed:function(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?r(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}({},(0,s.mapState)({})),methods:{show:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.items=e,this.options=t,this.isShow=!0,this.contentStyles={},this.isScrollBottom=!0},handleCancel:function(){this.isShow=!1},handleItemSelect:function(e){this.isShow=!1,null==e||e.click()},handleMenuScroll:function(e){var t=e.target;this.isScrollBottom=t.scrollTop+t.clientHeight>=t.scrollHeight-20}}};i(54618);const l=(0,i(51900).Z)(a,(function(){var e=this,t=e._self._c;return e.isShow?t("EscCapture",{ref:"window",staticClass:"main-menu-view-plugin",on:{esc:e.handleCancel,mousedown:e.handleCancel}},[t("div",{staticClass:"card-main",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{ref:"menu",staticClass:"card-content",style:e.contentStyles,on:{scroll:e.handleMenuScroll}},[e._l(e.items,(function(i){return[i.disabled?t("div",{key:i.text,staticClass:"item-disabled"},[t("div",[e._v(e._s(i.text))])]):i.hide?e._e():t("div",{key:i.text,staticClass:"item clickable",on:{click:function(t){return e.handleItemSelect(i)}}},[t("span",{staticClass:"icon text-white mr-[15px] text-sm"},[e._v(e._s(i.icon))]),e._v(" "),t("div",[e._v(e._s(i.text))])])]})),e._v(" "),e.isScrollBottom?e._e():t("div",{staticClass:"indicator bg-[#6f6f6f] text-white"},[t("span",{staticClass:"text-xs"},[e._v("æ»‘åŠ¨é¼ æ ‡ä»¥æŸ¥çœ‹æ›´å¤š")]),t("span",{staticClass:"icon text-white"},[e._v("arrow_drop_down")])])],2)])]):e._e()}),[],!1,null,"00ec68dc",null).exports},95539:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>C});var n=i(48926),o=i.n(n),s=i(59713),r=i.n(s),a=i(87757),l=i.n(a),c=(i(11442),i(58583)),d=i(23321),h=i(13338),u=i(83566),g=i(8369),p=i(72574),f=(i(51792),i(81518)),m=i(24883),v=i(17285),_=i(72298);function b(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function w(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?b(Object(i),!0).forEach((function(t){r()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):b(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const y={name:"ScriptView",props:[],components:{Hint:h.Z,EscCapture:p.Z,Navigator,SelectView:v.Z},data:function(){return{editorCode:null,isShow:!1,resolve:null,reject:null,metadata:{type:2,network:0,host:"example.com",sourceIP:"",sourcePort:7890,destinationIP:"",destinationPort:443,dnsMode:"normal",processPath:"",specialProxy:""},isLoading:!1}},watch:{isShow:function(e){e||(this.editorCode&&this.editorCode.dispose(),this.editorCode=null)}},computed:w(w(w({},(0,d.mapState)({})),(0,d.mapGetters)(["theme","clashAxiosClient"])),{},{saveHint:function(){return(0,u.V5)()?"Command+S":"ä¿å­˜(Ctrl+S)"},mdt:{get:function(){return this.metadata.type-2},set:function(e){this.metadata.type=e+2}},mdd:{get:function(){return["normal","fake-ip","redir-host"].indexOf(this.metadata.dnsMode)},set:function(e){this.metadata.dnsMode=["normal","fake-ip","redir-host"][e]}}}),methods:{show:function(){var e=this;this.isShow=!0;var t={theme:"vs-dark",fontFamily:"Consolas, Monaco, Lucida Console, Liberation Mono,\n        DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace",automaticLayout:!0,fontSize:14,minimap:{enabled:!1},contextmenu:!1,scrollbar:{verticalScrollbarSize:12,horizontalScrollbarSize:12},quickSuggestions:{other:!0,strings:!0},smoothScrolling:!0},i=m.Z.get(f.Z.TEST_SCRIPT_CONTENT)||'def main(ctx, metadata):\n  ip = ctx.resolve_ip(metadata["host"])\n  if ip == "":\n    return "DIRECT"\n  region = ctx.geoip(ip)\n  if region == \'CN\':\n    return "DIRECT"\n  return "Proxy"';return this.$nextTick((function(){e.editorCode=c.editor.create(e.$refs["editor-code"],w({value:i,language:"python"},t)),e.editorCode.addAction({id:"test",label:"Test",run:function(){e.test()},keybindings:[c.KeyMod.CtrlCmd|c.KeyCode.KeyS]}),e.editorCode.setSelection(new c.Selection(1,1,1,1)),e.editorCode.getContribution("editor.linkDetector").openerService._defaultExternalOpener.openExternal=g.fl,e.editorCode.focus()})),new Promise((function(t,i){e.resolve=t,e.reject=i}))},handleSaveClick:function(){this.test()},handleAbortClick:function(){var e=this;return o()(l().mark((function t(){return l().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.cancel();case 1:case"end":return t.stop()}}),t)})))()},handleDocumentClick:function(){return o()(l().mark((function e(){return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:_.shell.openExternal("https://dreamacro.github.io/clash/premium/script.html");case 1:case"end":return e.stop()}}),e)})))()},test:function(){var e=this;return o()(l().mark((function t(){var i,n,o,s,r;return l().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=e.editorCode.getValue(),m.Z.put(f.Z.TEST_SCRIPT_CONTENT,i),!e.resolve){t.next=19;break}return t.prev=3,e.isLoading=!0,t.next=7,e.clashAxiosClient.post("/script",{metadata:e.metadata,script:i});case 7:n=t.sent,o=n.data,(0,g.vC)({type:"none",message:"æˆåŠŸ, ç»“æžœ: ".concat(o.result)}),t.next=16;break;case 12:t.prev=12,t.t0=t.catch(3),r=t.t0.response,(0,g.vC)({type:"error",message:"å¤±è´¥, é”™è¯¯: ".concat((null==r||null===(s=r.data)||void 0===s?void 0:s.message)||(null==r?void 0:r.data)||t.t0.message)});case 16:return t.prev=16,e.isLoading=!1,t.finish(16);case 19:case"end":return t.stop()}}),t,null,[[3,12,16,19]])})))()},cancel:function(){this.reject(),this.isShow=!1}},mounted:function(){},beforeDestroy:function(){}};i(40433),i(33319);const C=(0,i(51900).Z)(y,(function(){var e=this,t=e._self._c;return e.isShow?t("EscCapture",{staticClass:"main-script-view line-numbers bg-[color:var(--mask-c)]",on:{esc:e.handleAbortClick,mousedown:function(t){return t.target!==t.currentTarget?null:e.handleAbortClick.apply(null,arguments)}}},[t("div",{staticClass:"card flex flex-col bg-[color:#1C1C1C] text-white"},[t("div",{staticClass:"px-6 pt-3 text-lg"},[e._v("è„šæœ¬æµ‹è¯•")]),e._v(" "),t("div",{staticClass:"metadata pb-3 pt-2 px-6 flex-grow-0 h-fit gap-x-5 grid grid-cols-2 gap-1 text-sm"},[t("div",{staticStyle:{"grid-column":"1 / -1"}},[t("span",[e._v("ç±»åž‹")]),e._v(" "),t("SelectView",{staticClass:"theme-dark",attrs:{items:["HTTP","HTTP Connect","Socks4","Socks5","Redir","TProxy","TUN","Tunnel"]},model:{value:e.mdt,callback:function(t){e.mdt=t},expression:"mdt"}}),e._v(" "),t("div",{staticClass:"flex-grow"})],1),e._v(" "),t("div",[t("span",[e._v("ç½‘ç»œ")]),e._v(" "),t("SelectView",{staticClass:"theme-dark",attrs:{items:["TCP","UDP"]},model:{value:e.metadata.network,callback:function(t){e.$set(e.metadata,"network",t)},expression:"metadata.network"}})],1),e._v(" "),t("div",[t("span",[e._v("DNSæ¨¡å¼")]),e._v(" "),t("SelectView",{staticClass:"theme-dark",attrs:{items:["normal","fake-ip","redir-host"]},model:{value:e.mdd,callback:function(t){e.mdd=t},expression:"mdd"}})],1),e._v(" "),t("div",[t("span",[e._v("ä¸»æœº")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.metadata.host,expression:"metadata.host"}],attrs:{type:"text"},domProps:{value:e.metadata.host},on:{input:function(t){t.target.composing||e.$set(e.metadata,"host",t.target.value)}}})]),e._v(" "),t("div",[t("span",[e._v("æºIP")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.metadata.sourceIP,expression:"metadata.sourceIP"}],attrs:{type:"text"},domProps:{value:e.metadata.sourceIP},on:{input:function(t){t.target.composing||e.$set(e.metadata,"sourceIP",t.target.value)}}})]),e._v(" "),t("div",[t("span",[e._v("æºç«¯å£")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.metadata.sourcePort,expression:"metadata.sourcePort"}],attrs:{type:"number"},domProps:{value:e.metadata.sourcePort},on:{input:function(t){t.target.composing||e.$set(e.metadata,"sourcePort",t.target.value)}}})]),e._v(" "),t("div",[t("span",[e._v("ç›®çš„åœ°IP")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.metadata.destinationIP,expression:"metadata.destinationIP"}],attrs:{type:"text"},domProps:{value:e.metadata.destinationIP},on:{input:function(t){t.target.composing||e.$set(e.metadata,"destinationIP",t.target.value)}}})]),e._v(" "),t("div",[t("span",[e._v("ç›®çš„åœ°ç«¯å£")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.metadata.destinationPort,expression:"metadata.destinationPort"}],attrs:{type:"number"},domProps:{value:e.metadata.destinationPort},on:{input:function(t){t.target.composing||e.$set(e.metadata,"destinationPort",t.target.value)}}})]),e._v(" "),t("div",[t("span",[e._v("è¿›ç¨‹è·¯å¾„")]),e._v(" "),t("input",{directives:[{name:"model",rawName:"v-model",value:e.metadata.processPath,expression:"metadata.processPath"}],attrs:{type:"text"},domProps:{value:e.metadata.processPath},on:{input:function(t){t.target.composing||e.$set(e.metadata,"processPath",t.target.value)}}})])]),e._v(" "),t("div",{ref:"editor-code",staticClass:"editor-code flex-grow-1"}),e._v(" "),t("div",{staticClass:"btns"},[t("Hint",{staticClass:"abort-btn clickable",attrs:{hint:"é€€å‡º"},on:{click:e.handleAbortClick}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("close")])]),e._v(" "),t("Hint",{staticClass:"bg-cyan-500 clickable",attrs:{hint:"å¸®åŠ©æ–‡æ¡£"},on:{click:e.handleDocumentClick}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("article")])]),e._v(" "),e.isLoading?t("Hint",{staticClass:"bg-gray-500 clickable",attrs:{hint:"Please wait"}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("pending")])]):t("Hint",{staticClass:"save-btn clickable",attrs:{hint:e.saveHint},on:{click:e.handleSaveClick}},[t("span",{staticClass:"icon text-[20px] text-white"},[e._v("play_arrow")])])],1)])]):e._e()}),[],!1,null,"05227e49",null).exports},1833:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>f});var n=i(59713),o=i.n(n),s=i(23321),r=(i(72298),i(72574));const a={name:"CheckBox",model:{prop:"checked",event:"change"},props:{checked:{type:Boolean,default:!1},size:{type:Number,default:20}},data:function(){return{}}};i(61745);var l=i(51900);const c=(0,l.Z)(a,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"main-check-box",on:{click:function(t){return e.$emit("change",!e.checked)}}},[[t("span",{staticClass:"icon text-[color:var(--fgc)] text-[20px]"},[e._v("check_box"+e._s(e.checked?"":"_outline_blank"))])],e._v(" "),t("div",{staticClass:"slot"},[e._t("default")],2)],2)}),[],!1,null,"1c767bad",null).exports;var d=i(17285),h=i(8369);function u(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function g(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?u(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):u(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const p={components:{EscCapture:r.Z,CheckBox:c,SelectView:d.Z},name:"SelectPlugin",props:[],data:function(){return{isShow:!1,title:"",message:"",html:"",items:[],resolve:null,reject:null,checkList:[],itemStyles:[],reactions:null,reactionClick:function(){},subSelectItems:[],subSelectIndex:0,subSelectTitle:"",isLastDifferent:!1}},computed:g(g({},(0,s.mapGetters)(["theme"])),{},{reactionList:function(){var e=this,t=["ðŸ‘","ðŸ˜„","ðŸŽ‰","â¤ï¸","ðŸš€","ðŸ‘€"];return["+1","laugh","hooray","heart","rocket","eyes"].reduce((function(i,n,o){return e.reactions[n]&&i.push({key:t[o],value:e.reactions[n]}),i}),[])}}),methods:{show:function(e){var t=this,i=e.items,n=void 0===i?[]:i,o=e.title,s=void 0===o?"Select":o,r=e.message,a=void 0===r?"":r,l=e.checkList,c=void 0===l?[]:l,d=e.itemStyles,h=void 0===d?[]:d,u=e.html,g=void 0===u?"":u,p=e.reactions,f=void 0===p?null:p,m=e.reactionClick,v=void 0===m?function(){}:m,_=e.subSelectItems,b=void 0===_?[]:_,w=e.subSelectTitle,y=void 0===w?"":w,C=e.isLastDifferent;return this.isShow=!0,this.title=s,this.items=n,this.message=a,this.checkList=c,this.itemStyles=h,this.html=g,this.reactions=f,this.reactionClick=v,this.subSelectItems=b,this.subSelectTitle=y,this.isLastDifferent=void 0===C?"å–æ¶ˆ"===n[n.length-1]:C,new Promise((function(e,i){t.resolve=e,t.reject=i}))},handleCancel:function(){this.isShow=!1,this.reject()},handleDone:function(){this.isShow=!1,this.resolve({})},handleItemSelect:function(e){var t;this.isShow=!1,this.subSelectItems.length>0?this.resolve([e,this.subSelectIndex]):(null===(t=this.checkList)||void 0===t?void 0:t.length)>0?this.resolve([e,this.checkList]):this.resolve([e])},handleHTMLClick:function(e){if("A"===e.target.tagName){e.preventDefault();var t=e.target.getAttribute("href");t&&(0,h.fl)(t)}}}};i(42719);const f=(0,l.Z)(p,(function(){var e=this,t=e._self._c;return e.isShow?t("EscCapture",{staticClass:"main-select-view-plugin bg-[color:var(--mask-c)]",class:["theme-".concat(e.theme)],on:{esc:e.handleCancel,mousedown:e.handleCancel}},[t("div",{staticClass:"card-main bg-[color:var(--bgc)] text-[color:var(--fgc)]",on:{mousedown:function(e){e.stopPropagation()}}},[t("div",{staticClass:"card-content"},[t("div",{staticClass:"content-title"},[e._v(e._s(e.title))]),e._v(" "),e.message?t("div",{staticClass:"content-message"},e._l(e.message.split("\n"),(function(i){return t("p",{key:i},[e._v("\n          "+e._s(i)+"\n        ")])})),0):t("div",{staticClass:"html-list",domProps:{innerHTML:e._s(e.html)},on:{click:e.handleHTMLClick}}),e._v(" "),e.reactions?t("div",{staticClass:"flex gap-3 mb-[10px]",on:{click:e.reactionClick}},e._l(e.reactionList,(function(i){return t("div",{key:i.key,staticClass:"flex justify-center items-center gap-1 border-[1px] rounded-lg border-[color:var(--bc)] px-2"},[t("div",[e._v(e._s(i.key))]),e._v(" "),t("div",{staticClass:"text-sm font-normal"},[e._v(e._s(i.value))])])})),0):e._e(),e._v(" "),e.checkList&&e.checkList.length>0?t("div",{staticClass:"check-list"},e._l(e.checkList,(function(i){return t("div",{key:i,staticClass:"check-item"},[t("check-box",{model:{value:i.value,callback:function(t){e.$set(i,"value",t)},expression:"item.value"}},[e._v(e._s(i.key))])],1)})),0):e._e(),e._v(" "),e.subSelectItems.length>0?t("div",{staticClass:"mb-[10px] flex items-center gap-2"},[t("div",[e._v(e._s(e.subSelectTitle))]),e._v(" "),t("SelectView",{attrs:{items:e.subSelectItems},model:{value:e.subSelectIndex,callback:function(t){e.subSelectIndex=t},expression:"subSelectIndex"}})],1):e._e(),e._v(" "),t("div",{staticClass:"btns"},e._l(e.items,(function(i,n){return t("div",{key:n,staticClass:"btn",class:{"last-btn":e.isLastDifferent&&n===e.items.length-1},style:e.itemStyles[n],on:{click:function(t){return e.handleItemSelect(n)}}},[i?t("span",[e._v(e._s(i))]):e._e()])})),0)])])]):e._e()}),[],!1,null,"0826c2c0",null).exports},38263:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>c});var n=i(59713),o=i.n(n),s=i(23321);function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?r(Object(i),!0).forEach((function(t){o()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}const l={components:{},name:"ToastView",props:[],data:function(){return{isShow:!1,content:"",hint:"",timeoutID:null}},computed:a(a({},(0,s.mapState)({})),(0,s.mapGetters)(["theme"])),methods:{show:function(e){var t=this,i=e.content,n=e.hint,o=e.timeout,s=void 0===o?3e3:o;i&&(this.isShow=!0,this.content=i,this.hint=n,this.timeoutID&&(clearTimeout(this.timeoutID),this.timeoutID=null),this.timeoutID=setTimeout((function(){t.isShow=!1}),s))}}};const c=(0,i(51900).Z)(l,(function(){var e=this,t=e._self._c;return e.isShow?t("div",{staticClass:"fixed bottom-6 left-1/2 -translate-x-1/2 z-50 max-w-[350px] bg-black text-white rounded-2xl font-normal px-4 py-2 shadow-xl fade"},[t("div",{staticClass:"text-base"},[e._v(e._s(e.content))]),e._v(" "),e.hint?t("div",{staticClass:"text-xs"},[e._v(e._s(e.hint))]):e._e()]):e._e()}),[],!1,null,null,null).exports},51900:(e,t,i)=>{"use strict";function n(e,t,i,n,o,s,r,a){var l,c="function"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=i,c._compiled=!0),n&&(c.functional=!0),s&&(c._scopeId="data-v-"+s),r?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},c._ssrRegister=l):o&&(l=a?function(){o.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:o),l)if(c.functional){c._injectStyles=l;var d=c.render;c.render=function(e,t){return l.call(t),d(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:c}}i.d(t,{Z:()=>n})},82016:(e,t,i)=>{var n=i(546);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("6aeea070",n,!0,{})},56130:(e,t,i)=>{var n=i(96513);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("6b45560c",n,!0,{})},64962:(e,t,i)=>{var n=i(71470);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("93b1d4fa",n,!0,{})},67633:(e,t,i)=>{var n=i(98093);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("486f42f4",n,!0,{})},36709:(e,t,i)=>{var n=i(7543);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("334a2a57",n,!0,{})},93998:(e,t,i)=>{var n=i(6921);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("07376892",n,!0,{})},2170:(e,t,i)=>{var n=i(75730);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("6c5cd7d5",n,!0,{})},74965:(e,t,i)=>{var n=i(55448);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("0077ab65",n,!0,{})},84843:(e,t,i)=>{var n=i(15159);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("182e90fc",n,!0,{})},31214:(e,t,i)=>{var n=i(90071);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("7d413828",n,!0,{})},17535:(e,t,i)=>{var n=i(70223);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("2333538d",n,!0,{})},24997:(e,t,i)=>{var n=i(56388);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("7a5459ca",n,!0,{})},58946:(e,t,i)=>{var n=i(76153);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("5a36221c",n,!0,{})},3248:(e,t,i)=>{var n=i(80407);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("1ac51a43",n,!0,{})},60408:(e,t,i)=>{var n=i(33967);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("a3f8f522",n,!0,{})},44156:(e,t,i)=>{var n=i(64147);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("4b68e1ea",n,!0,{})},88444:(e,t,i)=>{var n=i(56127);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("68b192ab",n,!0,{})},44118:(e,t,i)=>{var n=i(19667);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("2369f0d4",n,!0,{})},87101:(e,t,i)=>{var n=i(51022);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("1f6134dc",n,!0,{})},62466:(e,t,i)=>{var n=i(5785);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("697f56d6",n,!0,{})},87868:(e,t,i)=>{var n=i(39771);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("7bb10cc3",n,!0,{})},12812:(e,t,i)=>{var n=i(90078);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("01df82ba",n,!0,{})},86323:(e,t,i)=>{var n=i(82749);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("265bc9ee",n,!0,{})},67142:(e,t,i)=>{var n=i(22729);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("c4fca718",n,!0,{})},54175:(e,t,i)=>{var n=i(67615);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("e752a3c6",n,!0,{})},74953:(e,t,i)=>{var n=i(32429);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("94a38cba",n,!0,{})},15582:(e,t,i)=>{var n=i(84891);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("10a8293a",n,!0,{})},28335:(e,t,i)=>{var n=i(52073);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("34656efe",n,!0,{})},91364:(e,t,i)=>{var n=i(1715);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("58401c76",n,!0,{})},20357:(e,t,i)=>{var n=i(19523);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("b6491902",n,!0,{})},84160:(e,t,i)=>{var n=i(55228);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("45ccd500",n,!0,{})},76206:(e,t,i)=>{var n=i(63490);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("995772d6",n,!0,{})},55229:(e,t,i)=>{var n=i(27751);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("7beab976",n,!0,{})},73300:(e,t,i)=>{var n=i(57789);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("06a28bc5",n,!0,{})},63330:(e,t,i)=>{var n=i(97073);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("333e6172",n,!0,{})},68182:(e,t,i)=>{var n=i(30458);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("11caec67",n,!0,{})},83254:(e,t,i)=>{var n=i(43147);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("316a5fc6",n,!0,{})},17441:(e,t,i)=>{var n=i(26649);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("65028d10",n,!0,{})},67771:(e,t,i)=>{var n=i(61927);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("d1bf4642",n,!0,{})},62460:(e,t,i)=>{var n=i(44914);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("116fd8ff",n,!0,{})},60081:(e,t,i)=>{var n=i(89783);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("fde4ba02",n,!0,{})},21512:(e,t,i)=>{var n=i(5952);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("672b5390",n,!0,{})},67382:(e,t,i)=>{var n=i(20300);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("28b2b6aa",n,!0,{})},47283:(e,t,i)=>{var n=i(33856);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("4455d6a0",n,!0,{})},26197:(e,t,i)=>{var n=i(98616);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("314430c4",n,!0,{})},85290:(e,t,i)=>{var n=i(64176);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("83b28094",n,!0,{})},22115:(e,t,i)=>{var n=i(41221);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("3f9f2342",n,!0,{})},80668:(e,t,i)=>{var n=i(11897);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("53716d50",n,!0,{})},42680:(e,t,i)=>{var n=i(88830);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("71c851a6",n,!0,{})},81367:(e,t,i)=>{var n=i(36310);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("93035342",n,!0,{})},96394:(e,t,i)=>{var n=i(45291);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("25e195d5",n,!0,{})},67055:(e,t,i)=>{var n=i(70835);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("54194e48",n,!0,{})},80949:(e,t,i)=>{var n=i(20074);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("44118943",n,!0,{})},59072:(e,t,i)=>{var n=i(7547);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("0700f6de",n,!0,{})},27189:(e,t,i)=>{var n=i(23565);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("41f1e1ec",n,!0,{})},44735:(e,t,i)=>{var n=i(8955);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("52684a66",n,!0,{})},42048:(e,t,i)=>{var n=i(62384);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("e2f16918",n,!0,{})},36999:(e,t,i)=>{var n=i(57255);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("a6d09eea",n,!0,{})},27124:(e,t,i)=>{var n=i(50695);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("3afc5414",n,!0,{})},89401:(e,t,i)=>{var n=i(41948);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("452eaec4",n,!0,{})},82132:(e,t,i)=>{var n=i(26993);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("36a70d0e",n,!0,{})},74617:(e,t,i)=>{var n=i(6916);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("1393a7e6",n,!0,{})},77203:(e,t,i)=>{var n=i(44825);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("5c450974",n,!0,{})},7587:(e,t,i)=>{var n=i(63523);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("ffb35d2c",n,!0,{})},80359:(e,t,i)=>{var n=i(52674);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("f5e5b782",n,!0,{})},4172:(e,t,i)=>{var n=i(12450);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("303f715a",n,!0,{})},38453:(e,t,i)=>{var n=i(29593);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("6994ce12",n,!0,{})},67942:(e,t,i)=>{var n=i(52021);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("0ffda64e",n,!0,{})},30547:(e,t,i)=>{var n=i(66853);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("76446cdc",n,!0,{})},17613:(e,t,i)=>{var n=i(45777);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("1ffa2f68",n,!0,{})},69028:(e,t,i)=>{var n=i(81283);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("270bd848",n,!0,{})},71131:(e,t,i)=>{var n=i(37919);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("6ca9443e",n,!0,{})},82093:(e,t,i)=>{var n=i(51232);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("60198b5c",n,!0,{})},38245:(e,t,i)=>{var n=i(75169);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("3dc7c578",n,!0,{})},15586:(e,t,i)=>{var n=i(64608);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("03747281",n,!0,{})},38926:(e,t,i)=>{var n=i(23601);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("eb194c02",n,!0,{})},74360:(e,t,i)=>{var n=i(69791);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("44a5835c",n,!0,{})},51734:(e,t,i)=>{var n=i(38489);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("96b8711a",n,!0,{})},48619:(e,t,i)=>{var n=i(72132);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("563e8d7a",n,!0,{})},7840:(e,t,i)=>{var n=i(44332);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("57f56030",n,!0,{})},3930:(e,t,i)=>{var n=i(82611);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("f1667bee",n,!0,{})},20988:(e,t,i)=>{var n=i(54280);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("3ce47dd5",n,!0,{})},58141:(e,t,i)=>{var n=i(73316);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("5ee8e062",n,!0,{})},32225:(e,t,i)=>{var n=i(88525);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("c99d2430",n,!0,{})},33319:(e,t,i)=>{var n=i(30020);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("37a384e6",n,!0,{})},21241:(e,t,i)=>{var n=i(46485);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("e46935bc",n,!0,{})},5513:(e,t,i)=>{var n=i(69674);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("628699d7",n,!0,{})},19743:(e,t,i)=>{var n=i(40771);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("81cba430",n,!0,{})},72890:(e,t,i)=>{var n=i(16466);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("1e8895ea",n,!0,{})},56656:(e,t,i)=>{var n=i(46073);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("0dc16fd5",n,!0,{})},46029:(e,t,i)=>{var n=i(87133);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("10eef0bd",n,!0,{})},96340:(e,t,i)=>{var n=i(68361);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("4a30b9ee",n,!0,{})},19259:(e,t,i)=>{var n=i(5464);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("78ddc9ba",n,!0,{})},63473:(e,t,i)=>{var n=i(57726);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("2e387658",n,!0,{})},30145:(e,t,i)=>{var n=i(57059);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("5c61eae1",n,!0,{})},36594:(e,t,i)=>{var n=i(46907);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("45e113f0",n,!0,{})},98803:(e,t,i)=>{var n=i(37911);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("4c866154",n,!0,{})},74863:(e,t,i)=>{var n=i(11892);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("2de825d6",n,!0,{})},44977:(e,t,i)=>{var n=i(79928);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("c64955be",n,!0,{})},38619:(e,t,i)=>{var n=i(73816);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("13e27567",n,!0,{})},99648:(e,t,i)=>{var n=i(26534);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("11a9fb58",n,!0,{})},24860:(e,t,i)=>{var n=i(8137);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("793e6b50",n,!0,{})},53614:(e,t,i)=>{var n=i(71717);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("ae14c15e",n,!0,{})},71176:(e,t,i)=>{var n=i(52062);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("fa6f638e",n,!0,{})},67078:(e,t,i)=>{var n=i(63329);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("58975acb",n,!0,{})},91781:(e,t,i)=>{var n=i(22736);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("2e16896e",n,!0,{})},28318:(e,t,i)=>{var n=i(98319);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("b31a4644",n,!0,{})},60420:(e,t,i)=>{var n=i(69953);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("26e90a60",n,!0,{})},34954:(e,t,i)=>{var n=i(5504);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("409adc2d",n,!0,{})},78518:(e,t,i)=>{var n=i(52845);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("98362210",n,!0,{})},91924:(e,t,i)=>{var n=i(53640);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("da8afb56",n,!0,{})},72852:(e,t,i)=>{var n=i(21732);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("86071ec0",n,!0,{})},52611:(e,t,i)=>{var n=i(90596);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("e84f9a40",n,!0,{})},47191:(e,t,i)=>{var n=i(6357);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("762ef1fc",n,!0,{})},65549:(e,t,i)=>{var n=i(69083);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("12c847c1",n,!0,{})},79820:(e,t,i)=>{var n=i(44804);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("3180be88",n,!0,{})},67664:(e,t,i)=>{var n=i(91778);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("5643080e",n,!0,{})},60569:(e,t,i)=>{var n=i(19572);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("f500ea3a",n,!0,{})},56520:(e,t,i)=>{var n=i(28698);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("504cfe4d",n,!0,{})},58528:(e,t,i)=>{var n=i(59374);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("2940d044",n,!0,{})},61745:(e,t,i)=>{var n=i(33509);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("69dc8791",n,!0,{})},46918:(e,t,i)=>{var n=i(70406);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("251e9041",n,!0,{})},60768:(e,t,i)=>{var n=i(84234);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("2f3b07c0",n,!0,{})},13096:(e,t,i)=>{var n=i(82681);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("df920ecc",n,!0,{})},55230:(e,t,i)=>{var n=i(11061);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("7dcaf262",n,!0,{})},82779:(e,t,i)=>{var n=i(41044);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("224d9346",n,!0,{})},67033:(e,t,i)=>{var n=i(65939);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("267b1132",n,!0,{})},60920:(e,t,i)=>{var n=i(18228);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("60b022ac",n,!0,{})},15907:(e,t,i)=>{var n=i(56932);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("317af8ee",n,!0,{})},92732:(e,t,i)=>{var n=i(59480);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("2366d594",n,!0,{})},14902:(e,t,i)=>{var n=i(21417);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("ce104582",n,!0,{})},43356:(e,t,i)=>{var n=i(57565);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("25855349",n,!0,{})},51073:(e,t,i)=>{var n=i(14333);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("b84ac9ee",n,!0,{})},20684:(e,t,i)=>{var n=i(4216);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("20bb8c7e",n,!0,{})},54618:(e,t,i)=>{var n=i(80574);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("0bd1df77",n,!0,{})},40433:(e,t,i)=>{var n=i(5424);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("56d29394",n,!0,{})},42719:(e,t,i)=>{var n=i(62608);n.__esModule&&(n=n.default),"string"==typeof n&&(n=[[e.id,n,""]]),n.locals&&(e.exports=n.locals);(0,i(45346).Z)("72664970",n,!0,{})},45346:(e,t,i)=>{"use strict";function n(e,t){for(var i=[],n={},o=0;o<t.length;o++){var s=t[o],r=s[0],a={id:e+":"+o,css:s[1],media:s[2],sourceMap:s[3]};n[r]?n[r].parts.push(a):i.push(n[r]={id:r,parts:[a]})}return i}i.d(t,{Z:()=>p});var o="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!o)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var s={},r=o&&(document.head||document.getElementsByTagName("head")[0]),a=null,l=0,c=!1,d=function(){},h=null,u="data-vue-ssr-id",g="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());function p(e,t,i,o){c=i,h=o||{};var r=n(e,t);return f(r),function(t){for(var i=[],o=0;o<r.length;o++){var a=r[o];(l=s[a.id]).refs--,i.push(l)}t?f(r=n(e,t)):r=[];for(o=0;o<i.length;o++){var l;if(0===(l=i[o]).refs){for(var c=0;c<l.parts.length;c++)l.parts[c]();delete s[l.id]}}}}function f(e){for(var t=0;t<e.length;t++){var i=e[t],n=s[i.id];if(n){n.refs++;for(var o=0;o<n.parts.length;o++)n.parts[o](i.parts[o]);for(;o<i.parts.length;o++)n.parts.push(v(i.parts[o]));n.parts.length>i.parts.length&&(n.parts.length=i.parts.length)}else{var r=[];for(o=0;o<i.parts.length;o++)r.push(v(i.parts[o]));s[i.id]={id:i.id,refs:1,parts:r}}}}function m(){var e=document.createElement("style");return e.type="text/css",r.appendChild(e),e}function v(e){var t,i,n=document.querySelector("style["+u+'~="'+e.id+'"]');if(n){if(c)return d;n.parentNode.removeChild(n)}if(g){var o=l++;n=a||(a=m()),t=w.bind(null,n,o,!1),i=w.bind(null,n,o,!0)}else n=m(),t=y.bind(null,n),i=function(){n.parentNode.removeChild(n)};return t(e),function(n){if(n){if(n.css===e.css&&n.media===e.media&&n.sourceMap===e.sourceMap)return;t(e=n)}else i()}}var _,b=(_=[],function(e,t){return _[e]=t,_.filter(Boolean).join("\n")});function w(e,t,i,n){var o=i?"":n.css;if(e.styleSheet)e.styleSheet.cssText=b(t,o);else{var s=document.createTextNode(o),r=e.childNodes;r[t]&&e.removeChild(r[t]),r.length?e.insertBefore(s,r[t]):e.appendChild(s)}}function y(e,t){var i=t.css,n=t.media,o=t.sourceMap;if(n&&e.setAttribute("media",n),h.ssrId&&e.setAttribute(u,t.id),o&&(i+="\n/*# sourceURL="+o.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */"),e.styleSheet)e.styleSheet.cssText=i;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(i))}}},70538:(e,t,i)=>{"use strict";i.d(t,{ZP:()=>tn});var n=Object.freeze({}),o=Array.isArray;function s(e){return null==e}function r(e){return null!=e}function a(e){return!0===e}function l(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function c(e){return"function"==typeof e}function d(e){return null!==e&&"object"==typeof e}var h=Object.prototype.toString;function u(e){return"[object Object]"===h.call(e)}function g(e){return"[object RegExp]"===h.call(e)}function p(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function f(e){return r(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function m(e){return null==e?"":Array.isArray(e)||u(e)&&e.toString===h?JSON.stringify(e,null,2):String(e)}function v(e){var t=parseFloat(e);return isNaN(t)?e:t}function _(e,t){for(var i=Object.create(null),n=e.split(","),o=0;o<n.length;o++)i[n[o]]=!0;return t?function(e){return i[e.toLowerCase()]}:function(e){return i[e]}}var b=_("slot,component",!0),w=_("key,ref,slot,slot-scope,is");function y(e,t){var i=e.length;if(i){if(t===e[i-1])return void(e.length=i-1);var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}var C=Object.prototype.hasOwnProperty;function x(e,t){return C.call(e,t)}function S(e){var t=Object.create(null);return function(i){return t[i]||(t[i]=e(i))}}var k=/-(\w)/g,L=S((function(e){return e.replace(k,(function(e,t){return t?t.toUpperCase():""}))})),N=S((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),D=/\B([A-Z])/g,I=S((function(e){return e.replace(D,"-$1").toLowerCase()}));var E=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function i(i){var n=arguments.length;return n?n>1?e.apply(t,arguments):e.call(t,i):e.call(t)}return i._length=e.length,i};function T(e,t){t=t||0;for(var i=e.length-t,n=new Array(i);i--;)n[i]=e[i+t];return n}function M(e,t){for(var i in t)e[i]=t[i];return e}function A(e){for(var t={},i=0;i<e.length;i++)e[i]&&M(t,e[i]);return t}function O(e,t,i){}var P=function(e,t,i){return!1},R=function(e){return e};function F(e,t){if(e===t)return!0;var i=d(e),n=d(t);if(!i||!n)return!i&&!n&&String(e)===String(t);try{var o=Array.isArray(e),s=Array.isArray(t);if(o&&s)return e.length===t.length&&e.every((function(e,i){return F(e,t[i])}));if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(o||s)return!1;var r=Object.keys(e),a=Object.keys(t);return r.length===a.length&&r.every((function(i){return F(e[i],t[i])}))}catch(e){return!1}}function B(e,t){for(var i=0;i<e.length;i++)if(F(e[i],t))return i;return-1}function V(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}function W(e,t){return e===t?0===e&&1/e!=1/t:e==e||t==t}var H="data-server-rendered",z=["component","directive","filter"],j=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"],U={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:P,isReservedAttr:P,isUnknownElement:P,getTagNamespace:O,parsePlatformTagName:R,mustUseProp:P,async:!0,_lifecycleHooks:j},$=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function K(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function q(e,t,i,n){Object.defineProperty(e,t,{value:i,enumerable:!!n,writable:!0,configurable:!0})}var Z=new RegExp("[^".concat($.source,".$_\\d]"));var G="__proto__"in{},Y="undefined"!=typeof window,Q=Y&&window.navigator.userAgent.toLowerCase(),X=Q&&/msie|trident/.test(Q),J=Q&&Q.indexOf("msie 9.0")>0,ee=Q&&Q.indexOf("edge/")>0;Q&&Q.indexOf("android");var te=Q&&/iphone|ipad|ipod|ios/.test(Q);Q&&/chrome\/\d+/.test(Q),Q&&/phantomjs/.test(Q);var ie,ne=Q&&Q.match(/firefox\/(\d+)/),oe={}.watch,se=!1;if(Y)try{var re={};Object.defineProperty(re,"passive",{get:function(){se=!0}}),window.addEventListener("test-passive",null,re)}catch(e){}var ae=function(){return void 0===ie&&(ie=!Y&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),ie},le=Y&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ce(e){return"function"==typeof e&&/native code/.test(e.toString())}var de,he="undefined"!=typeof Symbol&&ce(Symbol)&&"undefined"!=typeof Reflect&&ce(Reflect.ownKeys);de="undefined"!=typeof Set&&ce(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ue=null;function ge(e){void 0===e&&(e=null),e||ue&&ue._scope.off(),ue=e,e&&e._scope.on()}var pe=function(){function e(e,t,i,n,o,s,r,a){this.tag=e,this.data=t,this.children=i,this.text=n,this.elm=o,this.ns=void 0,this.context=s,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=r,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=a,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),fe=function(e){void 0===e&&(e="");var t=new pe;return t.text=e,t.isComment=!0,t};function me(e){return new pe(void 0,void 0,void 0,String(e))}function ve(e){var t=new pe(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var _e=0,be=[],we=function(){for(var e=0;e<be.length;e++){var t=be[e];t.subs=t.subs.filter((function(e){return e})),t._pending=!1}be.length=0},ye=function(){function e(){this._pending=!1,this.id=_e++,this.subs=[]}return e.prototype.addSub=function(e){this.subs.push(e)},e.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,be.push(this))},e.prototype.depend=function(t){e.target&&e.target.addDep(this)},e.prototype.notify=function(e){var t=this.subs.filter((function(e){return e}));for(var i=0,n=t.length;i<n;i++){0,t[i].update()}},e}();ye.target=null;var Ce=[];function xe(e){Ce.push(e),ye.target=e}function Se(){Ce.pop(),ye.target=Ce[Ce.length-1]}var ke=Array.prototype,Le=Object.create(ke);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(e){var t=ke[e];q(Le,e,(function(){for(var i=[],n=0;n<arguments.length;n++)i[n]=arguments[n];var o,s=t.apply(this,i),r=this.__ob__;switch(e){case"push":case"unshift":o=i;break;case"splice":o=i.slice(2)}return o&&r.observeArray(o),r.dep.notify(),s}))}));var Ne=Object.getOwnPropertyNames(Le),De={},Ie=!0;function Ee(e){Ie=e}var Te={notify:O,depend:O,addSub:O,removeSub:O},Me=function(){function e(e,t,i){if(void 0===t&&(t=!1),void 0===i&&(i=!1),this.value=e,this.shallow=t,this.mock=i,this.dep=i?Te:new ye,this.vmCount=0,q(e,"__ob__",this),o(e)){if(!i)if(G)e.__proto__=Le;else for(var n=0,s=Ne.length;n<s;n++){q(e,a=Ne[n],Le[a])}t||this.observeArray(e)}else{var r=Object.keys(e);for(n=0;n<r.length;n++){var a;Oe(e,a=r[n],De,void 0,t,i)}}}return e.prototype.observeArray=function(e){for(var t=0,i=e.length;t<i;t++)Ae(e[t],!1,this.mock)},e}();function Ae(e,t,i){return e&&x(e,"__ob__")&&e.__ob__ instanceof Me?e.__ob__:!Ie||!i&&ae()||!o(e)&&!u(e)||!Object.isExtensible(e)||e.__v_skip||He(e)||e instanceof pe?void 0:new Me(e,t,i)}function Oe(e,t,i,n,s,r){var a=new ye,l=Object.getOwnPropertyDescriptor(e,t);if(!l||!1!==l.configurable){var c=l&&l.get,d=l&&l.set;c&&!d||i!==De&&2!==arguments.length||(i=e[t]);var h=!s&&Ae(i,!1,r);return Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=c?c.call(e):i;return ye.target&&(a.depend(),h&&(h.dep.depend(),o(t)&&Fe(t))),He(t)&&!s?t.value:t},set:function(t){var n=c?c.call(e):i;if(W(n,t)){if(d)d.call(e,t);else{if(c)return;if(!s&&He(n)&&!He(t))return void(n.value=t);i=t}h=!s&&Ae(t,!1,r),a.notify()}}}),a}}function Pe(e,t,i){if(!We(e)){var n=e.__ob__;return o(e)&&p(t)?(e.length=Math.max(e.length,t),e.splice(t,1,i),n&&!n.shallow&&n.mock&&Ae(i,!1,!0),i):t in e&&!(t in Object.prototype)?(e[t]=i,i):e._isVue||n&&n.vmCount?i:n?(Oe(n.value,t,i,void 0,n.shallow,n.mock),n.dep.notify(),i):(e[t]=i,i)}}function Re(e,t){if(o(e)&&p(t))e.splice(t,1);else{var i=e.__ob__;e._isVue||i&&i.vmCount||We(e)||x(e,t)&&(delete e[t],i&&i.dep.notify())}}function Fe(e){for(var t=void 0,i=0,n=e.length;i<n;i++)(t=e[i])&&t.__ob__&&t.__ob__.dep.depend(),o(t)&&Fe(t)}function Be(e){return Ve(e,!0),q(e,"__v_isShallow",!0),e}function Ve(e,t){if(!We(e)){Ae(e,t,ae());0}}function We(e){return!(!e||!e.__v_isReadonly)}function He(e){return!(!e||!0!==e.__v_isRef)}function ze(e,t,i){Object.defineProperty(e,i,{enumerable:!0,configurable:!0,get:function(){var e=t[i];if(He(e))return e.value;var n=e&&e.__ob__;return n&&n.dep.depend(),e},set:function(e){var n=t[i];He(n)&&!He(e)?n.value=e:t[i]=e}})}var je=S((function(e){var t="&"===e.charAt(0),i="~"===(e=t?e.slice(1):e).charAt(0),n="!"===(e=i?e.slice(1):e).charAt(0);return{name:e=n?e.slice(1):e,once:i,capture:n,passive:t}}));function Ue(e,t){function i(){var e=i.fns;if(!o(e))return ni(e,null,arguments,t,"v-on handler");for(var n=e.slice(),s=0;s<n.length;s++)ni(n[s],null,arguments,t,"v-on handler")}return i.fns=e,i}function $e(e,t,i,n,o,r){var l,c,d,h;for(l in e)c=e[l],d=t[l],h=je(l),s(c)||(s(d)?(s(c.fns)&&(c=e[l]=Ue(c,r)),a(h.once)&&(c=e[l]=o(h.name,c,h.capture)),i(h.name,c,h.capture,h.passive,h.params)):c!==d&&(d.fns=c,e[l]=d));for(l in t)s(e[l])&&n((h=je(l)).name,t[l],h.capture)}function Ke(e,t,i){var n;e instanceof pe&&(e=e.data.hook||(e.data.hook={}));var o=e[t];function l(){i.apply(this,arguments),y(n.fns,l)}s(o)?n=Ue([l]):r(o.fns)&&a(o.merged)?(n=o).fns.push(l):n=Ue([o,l]),n.merged=!0,e[t]=n}function qe(e,t,i,n,o){if(r(t)){if(x(t,i))return e[i]=t[i],o||delete t[i],!0;if(x(t,n))return e[i]=t[n],o||delete t[n],!0}return!1}function Ze(e){return l(e)?[me(e)]:o(e)?Ye(e):void 0}function Ge(e){return r(e)&&r(e.text)&&!1===e.isComment}function Ye(e,t){var i,n,c,d,h=[];for(i=0;i<e.length;i++)s(n=e[i])||"boolean"==typeof n||(d=h[c=h.length-1],o(n)?n.length>0&&(Ge((n=Ye(n,"".concat(t||"","_").concat(i)))[0])&&Ge(d)&&(h[c]=me(d.text+n[0].text),n.shift()),h.push.apply(h,n)):l(n)?Ge(d)?h[c]=me(d.text+n):""!==n&&h.push(me(n)):Ge(n)&&Ge(d)?h[c]=me(d.text+n.text):(a(e._isVList)&&r(n.tag)&&s(n.key)&&r(t)&&(n.key="__vlist".concat(t,"_").concat(i,"__")),h.push(n)));return h}var Qe=1,Xe=2;function Je(e,t,i,n,s,h){return(o(i)||l(i))&&(s=n,n=i,i=void 0),a(h)&&(s=Xe),function(e,t,i,n,s){if(r(i)&&r(i.__ob__))return fe();r(i)&&r(i.is)&&(t=i.is);if(!t)return fe();0;o(n)&&c(n[0])&&((i=i||{}).scopedSlots={default:n[0]},n.length=0);s===Xe?n=Ze(n):s===Qe&&(n=function(e){for(var t=0;t<e.length;t++)if(o(e[t]))return Array.prototype.concat.apply([],e);return e}(n));var a,l;if("string"==typeof t){var h=void 0;l=e.$vnode&&e.$vnode.ns||U.getTagNamespace(t),a=U.isReservedTag(t)?new pe(U.parsePlatformTagName(t),i,n,void 0,void 0,e):i&&i.pre||!r(h=Gi(e.$options,"components",t))?new pe(t,i,n,void 0,void 0,e):Vi(h,i,e,n,t)}else a=Vi(t,i,e,n);return o(a)?a:r(a)?(r(l)&&et(a,l),r(i)&&function(e){d(e.style)&&_i(e.style);d(e.class)&&_i(e.class)}(i),a):fe()}(e,t,i,n,s)}function et(e,t,i){if(e.ns=t,"foreignObject"===e.tag&&(t=void 0,i=!0),r(e.children))for(var n=0,o=e.children.length;n<o;n++){var l=e.children[n];r(l.tag)&&(s(l.ns)||a(i)&&"svg"!==l.tag)&&et(l,t,i)}}function tt(e,t){var i,n,s,a,l=null;if(o(e)||"string"==typeof e)for(l=new Array(e.length),i=0,n=e.length;i<n;i++)l[i]=t(e[i],i);else if("number"==typeof e)for(l=new Array(e),i=0;i<e;i++)l[i]=t(i+1,i);else if(d(e))if(he&&e[Symbol.iterator]){l=[];for(var c=e[Symbol.iterator](),h=c.next();!h.done;)l.push(t(h.value,l.length)),h=c.next()}else for(s=Object.keys(e),l=new Array(s.length),i=0,n=s.length;i<n;i++)a=s[i],l[i]=t(e[a],a,i);return r(l)||(l=[]),l._isVList=!0,l}function it(e,t,i,n){var o,s=this.$scopedSlots[e];s?(i=i||{},n&&(i=M(M({},n),i)),o=s(i)||(c(t)?t():t)):o=this.$slots[e]||(c(t)?t():t);var r=i&&i.slot;return r?this.$createElement("template",{slot:r},o):o}function nt(e){return Gi(this.$options,"filters",e,!0)||R}function ot(e,t){return o(e)?-1===e.indexOf(t):e!==t}function st(e,t,i,n,o){var s=U.keyCodes[t]||i;return o&&n&&!U.keyCodes[t]?ot(o,n):s?ot(s,e):n?I(n)!==t:void 0===e}function rt(e,t,i,n,s){if(i)if(d(i)){o(i)&&(i=A(i));var r=void 0,a=function(o){if("class"===o||"style"===o||w(o))r=e;else{var a=e.attrs&&e.attrs.type;r=n||U.mustUseProp(t,a,o)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var l=L(o),c=I(o);l in r||c in r||(r[o]=i[o],s&&((e.on||(e.on={}))["update:".concat(o)]=function(e){i[o]=e}))};for(var l in i)a(l)}else;return e}function at(e,t){var i=this._staticTrees||(this._staticTrees=[]),n=i[e];return n&&!t||ct(n=i[e]=this.$options.staticRenderFns[e].call(this._renderProxy,this._c,this),"__static__".concat(e),!1),n}function lt(e,t,i){return ct(e,"__once__".concat(t).concat(i?"_".concat(i):""),!0),e}function ct(e,t,i){if(o(e))for(var n=0;n<e.length;n++)e[n]&&"string"!=typeof e[n]&&dt(e[n],"".concat(t,"_").concat(n),i);else dt(e,t,i)}function dt(e,t,i){e.isStatic=!0,e.key=t,e.isOnce=i}function ht(e,t){if(t)if(u(t)){var i=e.on=e.on?M({},e.on):{};for(var n in t){var o=i[n],s=t[n];i[n]=o?[].concat(o,s):s}}else;return e}function ut(e,t,i,n){t=t||{$stable:!i};for(var s=0;s<e.length;s++){var r=e[s];o(r)?ut(r,t,i):r&&(r.proxy&&(r.fn.proxy=!0),t[r.key]=r.fn)}return n&&(t.$key=n),t}function gt(e,t){for(var i=0;i<t.length;i+=2){var n=t[i];"string"==typeof n&&n&&(e[t[i]]=t[i+1])}return e}function pt(e,t){return"string"==typeof e?t+e:e}function ft(e){e._o=lt,e._n=v,e._s=m,e._l=tt,e._t=it,e._q=F,e._i=B,e._m=at,e._f=nt,e._k=st,e._b=rt,e._v=me,e._e=fe,e._u=ut,e._g=ht,e._d=gt,e._p=pt}function mt(e,t){if(!e||!e.length)return{};for(var i={},n=0,o=e.length;n<o;n++){var s=e[n],r=s.data;if(r&&r.attrs&&r.attrs.slot&&delete r.attrs.slot,s.context!==t&&s.fnContext!==t||!r||null==r.slot)(i.default||(i.default=[])).push(s);else{var a=r.slot,l=i[a]||(i[a]=[]);"template"===s.tag?l.push.apply(l,s.children||[]):l.push(s)}}for(var c in i)i[c].every(vt)&&delete i[c];return i}function vt(e){return e.isComment&&!e.asyncFactory||" "===e.text}function _t(e){return e.isComment&&e.asyncFactory}function bt(e,t,i,o){var s,r=Object.keys(i).length>0,a=t?!!t.$stable:!r,l=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&o&&o!==n&&l===o.$key&&!r&&!o.$hasNormal)return o;for(var c in s={},t)t[c]&&"$"!==c[0]&&(s[c]=wt(e,i,c,t[c]))}else s={};for(var d in i)d in s||(s[d]=yt(i,d));return t&&Object.isExtensible(t)&&(t._normalized=s),q(s,"$stable",a),q(s,"$key",l),q(s,"$hasNormal",r),s}function wt(e,t,i,n){var s=function(){var t=ue;ge(e);var i=arguments.length?n.apply(null,arguments):n({}),s=(i=i&&"object"==typeof i&&!o(i)?[i]:Ze(i))&&i[0];return ge(t),i&&(!s||1===i.length&&s.isComment&&!_t(s))?void 0:i};return n.proxy&&Object.defineProperty(t,i,{get:s,enumerable:!0,configurable:!0}),s}function yt(e,t){return function(){return e[t]}}function Ct(e){return{get attrs(){if(!e._attrsProxy){var t=e._attrsProxy={};q(t,"_v_attr_proxy",!0),xt(t,e.$attrs,n,e,"$attrs")}return e._attrsProxy},get listeners(){e._listenersProxy||xt(e._listenersProxy={},e.$listeners,n,e,"$listeners");return e._listenersProxy},get slots(){return function(e){e._slotsProxy||kt(e._slotsProxy={},e.$scopedSlots);return e._slotsProxy}(e)},emit:E(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(i){return ze(e,t,i)}))}}}function xt(e,t,i,n,o){var s=!1;for(var r in t)r in e?t[r]!==i[r]&&(s=!0):(s=!0,St(e,r,n,o));for(var r in e)r in t||(s=!0,delete e[r]);return s}function St(e,t,i,n){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){return i[n][t]}})}function kt(e,t){for(var i in t)e[i]=t[i];for(var i in e)i in t||delete e[i]}var Lt,Nt=null;function Dt(e,t){return(e.__esModule||he&&"Module"===e[Symbol.toStringTag])&&(e=e.default),d(e)?t.extend(e):e}function It(e){if(o(e))for(var t=0;t<e.length;t++){var i=e[t];if(r(i)&&(r(i.componentOptions)||_t(i)))return i}}function Et(e,t){Lt.$on(e,t)}function Tt(e,t){Lt.$off(e,t)}function Mt(e,t){var i=Lt;return function n(){null!==t.apply(null,arguments)&&i.$off(e,n)}}function At(e,t,i){Lt=e,$e(t,i||{},Et,Tt,Mt,e),Lt=void 0}var Ot=null;function Pt(e){var t=Ot;return Ot=e,function(){Ot=t}}function Rt(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function Ft(e,t){if(t){if(e._directInactive=!1,Rt(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var i=0;i<e.$children.length;i++)Ft(e.$children[i]);Vt(e,"activated")}}function Bt(e,t){if(!(t&&(e._directInactive=!0,Rt(e))||e._inactive)){e._inactive=!0;for(var i=0;i<e.$children.length;i++)Bt(e.$children[i]);Vt(e,"deactivated")}}function Vt(e,t,i,n){void 0===n&&(n=!0),xe();var o=ue;n&&ge(e);var s=e.$options[t],r="".concat(t," hook");if(s)for(var a=0,l=s.length;a<l;a++)ni(s[a],e,i||null,e,r);e._hasHookEvent&&e.$emit("hook:"+t),n&&ge(o),Se()}var Wt=[],Ht=[],zt={},jt=!1,Ut=!1,$t=0;var Kt=0,qt=Date.now;if(Y&&!X){var Zt=window.performance;Zt&&"function"==typeof Zt.now&&qt()>document.createEvent("Event").timeStamp&&(qt=function(){return Zt.now()})}var Gt=function(e,t){if(e.post){if(!t.post)return 1}else if(t.post)return-1;return e.id-t.id};function Yt(){var e,t;for(Kt=qt(),Ut=!0,Wt.sort(Gt),$t=0;$t<Wt.length;$t++)(e=Wt[$t]).before&&e.before(),t=e.id,zt[t]=null,e.run();var i=Ht.slice(),n=Wt.slice();$t=Wt.length=Ht.length=0,zt={},jt=Ut=!1,function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,Ft(e[t],!0)}(i),function(e){var t=e.length;for(;t--;){var i=e[t],n=i.vm;n&&n._watcher===i&&n._isMounted&&!n._isDestroyed&&Vt(n,"updated")}}(n),we(),le&&U.devtools&&le.emit("flush")}function Qt(e){var t=e.id;if(null==zt[t]&&(e!==ye.target||!e.noRecurse)){if(zt[t]=!0,Ut){for(var i=Wt.length-1;i>$t&&Wt[i].id>e.id;)i--;Wt.splice(i+1,0,e)}else Wt.push(e);jt||(jt=!0,fi(Yt))}}var Xt="watcher";"".concat(Xt," callback"),"".concat(Xt," getter"),"".concat(Xt," cleanup");var Jt;var ei=function(){function e(e){void 0===e&&(e=!1),this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Jt,!e&&Jt&&(this.index=(Jt.scopes||(Jt.scopes=[])).push(this)-1)}return e.prototype.run=function(e){if(this.active){var t=Jt;try{return Jt=this,e()}finally{Jt=t}}else 0},e.prototype.on=function(){Jt=this},e.prototype.off=function(){Jt=this.parent},e.prototype.stop=function(e){if(this.active){var t=void 0,i=void 0;for(t=0,i=this.effects.length;t<i;t++)this.effects[t].teardown();for(t=0,i=this.cleanups.length;t<i;t++)this.cleanups[t]();if(this.scopes)for(t=0,i=this.scopes.length;t<i;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){var n=this.parent.scopes.pop();n&&n!==this&&(this.parent.scopes[this.index]=n,n.index=this.index)}this.parent=void 0,this.active=!1}},e}();function ti(e){var t=e._provided,i=e.$parent&&e.$parent._provided;return i===t?e._provided=Object.create(i):t}function ii(e,t,i){xe();try{if(t)for(var n=t;n=n.$parent;){var o=n.$options.errorCaptured;if(o)for(var s=0;s<o.length;s++)try{if(!1===o[s].call(n,e,t,i))return}catch(e){oi(e,n,"errorCaptured hook")}}oi(e,t,i)}finally{Se()}}function ni(e,t,i,n,o){var s;try{(s=i?e.apply(t,i):e.call(t))&&!s._isVue&&f(s)&&!s._handled&&(s.catch((function(e){return ii(e,n,o+" (Promise/async)")})),s._handled=!0)}catch(e){ii(e,n,o)}return s}function oi(e,t,i){if(U.errorHandler)try{return U.errorHandler.call(null,e,t,i)}catch(t){t!==e&&si(t,null,"config.errorHandler")}si(e,t,i)}function si(e,t,i){if(!Y||"undefined"==typeof console)throw e;console.error(e)}var ri,ai=!1,li=[],ci=!1;function di(){ci=!1;var e=li.slice(0);li.length=0;for(var t=0;t<e.length;t++)e[t]()}if("undefined"!=typeof Promise&&ce(Promise)){var hi=Promise.resolve();ri=function(){hi.then(di),te&&setTimeout(O)},ai=!0}else if(X||"undefined"==typeof MutationObserver||!ce(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())ri="undefined"!=typeof setImmediate&&ce(setImmediate)?function(){setImmediate(di)}:function(){setTimeout(di,0)};else{var ui=1,gi=new MutationObserver(di),pi=document.createTextNode(String(ui));gi.observe(pi,{characterData:!0}),ri=function(){ui=(ui+1)%2,pi.data=String(ui)},ai=!0}function fi(e,t){var i;if(li.push((function(){if(e)try{e.call(t)}catch(e){ii(e,t,"nextTick")}else i&&i(t)})),ci||(ci=!0,ri()),!e&&"undefined"!=typeof Promise)return new Promise((function(e){i=e}))}function mi(e){return function(t,i){if(void 0===i&&(i=ue),i)return function(e,t,i){var n=e.$options;n[t]=$i(n[t],i)}(i,e,t)}}mi("beforeMount"),mi("mounted"),mi("beforeUpdate"),mi("updated"),mi("beforeDestroy"),mi("destroyed"),mi("activated"),mi("deactivated"),mi("serverPrefetch"),mi("renderTracked"),mi("renderTriggered"),mi("errorCaptured");var vi=new de;function _i(e){return bi(e,vi),vi.clear(),e}function bi(e,t){var i,n,s=o(e);if(!(!s&&!d(e)||e.__v_skip||Object.isFrozen(e)||e instanceof pe)){if(e.__ob__){var r=e.__ob__.dep.id;if(t.has(r))return;t.add(r)}if(s)for(i=e.length;i--;)bi(e[i],t);else if(He(e))bi(e.value,t);else for(i=(n=Object.keys(e)).length;i--;)bi(e[n[i]],t)}}var wi=0,yi=function(){function e(e,t,i,n,o){var s,r;s=this,void 0===(r=Jt&&!Jt._vm?Jt:e?e._scope:void 0)&&(r=Jt),r&&r.active&&r.effects.push(s),(this.vm=e)&&o&&(e._watcher=this),n?(this.deep=!!n.deep,this.user=!!n.user,this.lazy=!!n.lazy,this.sync=!!n.sync,this.before=n.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=i,this.id=++wi,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new de,this.newDepIds=new de,this.expression="",c(t)?this.getter=t:(this.getter=function(e){if(!Z.test(e)){var t=e.split(".");return function(e){for(var i=0;i<t.length;i++){if(!e)return;e=e[t[i]]}return e}}}(t),this.getter||(this.getter=O)),this.value=this.lazy?void 0:this.get()}return e.prototype.get=function(){var e;xe(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;ii(e,t,'getter for watcher "'.concat(this.expression,'"'))}finally{this.deep&&_i(e),Se(),this.cleanupDeps()}return e},e.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},e.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var i=this.depIds;this.depIds=this.newDepIds,this.newDepIds=i,this.newDepIds.clear(),i=this.deps,this.deps=this.newDeps,this.newDeps=i,this.newDeps.length=0},e.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Qt(this)},e.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||d(e)||this.deep){var t=this.value;if(this.value=e,this.user){var i='callback for watcher "'.concat(this.expression,'"');ni(this.cb,this.vm,[e,t],this.vm,i)}else this.cb.call(this.vm,e,t)}}},e.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},e.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},e.prototype.teardown=function(){if(this.vm&&!this.vm._isBeingDestroyed&&y(this.vm._scope.effects,this),this.active){for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1,this.onStop&&this.onStop()}},e}(),Ci={enumerable:!0,configurable:!0,get:O,set:O};function xi(e,t,i){Ci.get=function(){return this[t][i]},Ci.set=function(e){this[t][i]=e},Object.defineProperty(e,i,Ci)}function Si(e){var t=e.$options;if(t.props&&function(e,t){var i=e.$options.propsData||{},n=e._props=Be({}),o=e.$options._propKeys=[],s=!e.$parent;s||Ee(!1);var r=function(s){o.push(s);var r=Yi(s,t,i,e);Oe(n,s,r),s in e||xi(e,"_props",s)};for(var a in t)r(a);Ee(!0)}(e,t.props),function(e){var t=e.$options,i=t.setup;if(i){var n=e._setupContext=Ct(e);ge(e),xe();var o=ni(i,null,[e._props||Be({}),n],e,"setup");if(Se(),ge(),c(o))t.render=o;else if(d(o))if(e._setupState=o,o.__sfc){var s=e._setupProxy={};for(var r in o)"__sfc"!==r&&ze(s,o,r)}else for(var r in o)K(r)||ze(e,o,r)}}(e),t.methods&&function(e,t){e.$options.props;for(var i in t)e[i]="function"!=typeof t[i]?O:E(t[i],e)}(e,t.methods),t.data)!function(e){var t=e.$options.data;t=e._data=c(t)?function(e,t){xe();try{return e.call(t,t)}catch(e){return ii(e,t,"data()"),{}}finally{Se()}}(t,e):t||{},u(t)||(t={});var i=Object.keys(t),n=e.$options.props,o=(e.$options.methods,i.length);for(;o--;){var s=i[o];0,n&&x(n,s)||K(s)||xi(e,"_data",s)}var r=Ae(t);r&&r.vmCount++}(e);else{var i=Ae(e._data={});i&&i.vmCount++}t.computed&&function(e,t){var i=e._computedWatchers=Object.create(null),n=ae();for(var o in t){var s=t[o],r=c(s)?s:s.get;0,n||(i[o]=new yi(e,r||O,O,ki)),o in e||Li(e,o,s)}}(e,t.computed),t.watch&&t.watch!==oe&&function(e,t){for(var i in t){var n=t[i];if(o(n))for(var s=0;s<n.length;s++)Ii(e,i,n[s]);else Ii(e,i,n)}}(e,t.watch)}var ki={lazy:!0};function Li(e,t,i){var n=!ae();c(i)?(Ci.get=n?Ni(t):Di(i),Ci.set=O):(Ci.get=i.get?n&&!1!==i.cache?Ni(t):Di(i.get):O,Ci.set=i.set||O),Object.defineProperty(e,t,Ci)}function Ni(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ye.target&&t.depend(),t.value}}function Di(e){return function(){return e.call(this,this)}}function Ii(e,t,i,n){return u(i)&&(n=i,i=i.handler),"string"==typeof i&&(i=e[i]),e.$watch(t,i,n)}function Ei(e,t){if(e){for(var i=Object.create(null),n=he?Reflect.ownKeys(e):Object.keys(e),o=0;o<n.length;o++){var s=n[o];if("__ob__"!==s){var r=e[s].from;if(r in t._provided)i[s]=t._provided[r];else if("default"in e[s]){var a=e[s].default;i[s]=c(a)?a.call(t):a}else 0}}return i}}var Ti=0;function Mi(e){var t=e.options;if(e.super){var i=Mi(e.super);if(i!==e.superOptions){e.superOptions=i;var n=function(e){var t,i=e.options,n=e.sealedOptions;for(var o in i)i[o]!==n[o]&&(t||(t={}),t[o]=i[o]);return t}(e);n&&M(e.extendOptions,n),(t=e.options=Zi(i,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function Ai(e,t,i,s,r){var l,c=this,d=r.options;x(s,"_uid")?(l=Object.create(s))._original=s:(l=s,s=s._original);var h=a(d._compiled),u=!h;this.data=e,this.props=t,this.children=i,this.parent=s,this.listeners=e.on||n,this.injections=Ei(d.inject,s),this.slots=function(){return c.$slots||bt(s,e.scopedSlots,c.$slots=mt(i,s)),c.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return bt(s,e.scopedSlots,this.slots())}}),h&&(this.$options=d,this.$slots=this.slots(),this.$scopedSlots=bt(s,e.scopedSlots,this.$slots)),d._scopeId?this._c=function(e,t,i,n){var r=Je(l,e,t,i,n,u);return r&&!o(r)&&(r.fnScopeId=d._scopeId,r.fnContext=s),r}:this._c=function(e,t,i,n){return Je(l,e,t,i,n,u)}}function Oi(e,t,i,n,o){var s=ve(e);return s.fnContext=i,s.fnOptions=n,t.slot&&((s.data||(s.data={})).slot=t.slot),s}function Pi(e,t){for(var i in t)e[L(i)]=t[i]}function Ri(e){return e.name||e.__name||e._componentTag}ft(Ai.prototype);var Fi={init:function(e,t){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var i=e;Fi.prepatch(i,i)}else{(e.componentInstance=function(e,t){var i={_isComponent:!0,_parentVnode:e,parent:t},n=e.data.inlineTemplate;r(n)&&(i.render=n.render,i.staticRenderFns=n.staticRenderFns);return new e.componentOptions.Ctor(i)}(e,Ot)).$mount(t?e.elm:void 0,t)}},prepatch:function(e,t){var i=t.componentOptions;!function(e,t,i,o,s){var r=o.data.scopedSlots,a=e.$scopedSlots,l=!!(r&&!r.$stable||a!==n&&!a.$stable||r&&e.$scopedSlots.$key!==r.$key||!r&&e.$scopedSlots.$key),c=!!(s||e.$options._renderChildren||l),d=e.$vnode;e.$options._parentVnode=o,e.$vnode=o,e._vnode&&(e._vnode.parent=o),e.$options._renderChildren=s;var h=o.data.attrs||n;e._attrsProxy&&xt(e._attrsProxy,h,d.data&&d.data.attrs||n,e,"$attrs")&&(c=!0),e.$attrs=h,i=i||n;var u=e.$options._parentListeners;if(e._listenersProxy&&xt(e._listenersProxy,i,u||n,e,"$listeners"),e.$listeners=e.$options._parentListeners=i,At(e,i,u),t&&e.$options.props){Ee(!1);for(var g=e._props,p=e.$options._propKeys||[],f=0;f<p.length;f++){var m=p[f],v=e.$options.props;g[m]=Yi(m,v,t,e)}Ee(!0),e.$options.propsData=t}c&&(e.$slots=mt(s,o.context),e.$forceUpdate())}(t.componentInstance=e.componentInstance,i.propsData,i.listeners,t,i.children)},insert:function(e){var t,i=e.context,n=e.componentInstance;n._isMounted||(n._isMounted=!0,Vt(n,"mounted")),e.data.keepAlive&&(i._isMounted?((t=n)._inactive=!1,Ht.push(t)):Ft(n,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?Bt(t,!0):t.$destroy())}},Bi=Object.keys(Fi);function Vi(e,t,i,l,c){if(!s(e)){var h=i.$options._base;if(d(e)&&(e=h.extend(e)),"function"==typeof e){var u;if(s(e.cid)&&(e=function(e,t){if(a(e.error)&&r(e.errorComp))return e.errorComp;if(r(e.resolved))return e.resolved;var i=Nt;if(i&&r(e.owners)&&-1===e.owners.indexOf(i)&&e.owners.push(i),a(e.loading)&&r(e.loadingComp))return e.loadingComp;if(i&&!r(e.owners)){var n=e.owners=[i],o=!0,l=null,c=null;i.$on("hook:destroyed",(function(){return y(n,i)}));var h=function(e){for(var t=0,i=n.length;t<i;t++)n[t].$forceUpdate();e&&(n.length=0,null!==l&&(clearTimeout(l),l=null),null!==c&&(clearTimeout(c),c=null))},u=V((function(i){e.resolved=Dt(i,t),o?n.length=0:h(!0)})),g=V((function(t){r(e.errorComp)&&(e.error=!0,h(!0))})),p=e(u,g);return d(p)&&(f(p)?s(e.resolved)&&p.then(u,g):f(p.component)&&(p.component.then(u,g),r(p.error)&&(e.errorComp=Dt(p.error,t)),r(p.loading)&&(e.loadingComp=Dt(p.loading,t),0===p.delay?e.loading=!0:l=setTimeout((function(){l=null,s(e.resolved)&&s(e.error)&&(e.loading=!0,h(!1))}),p.delay||200)),r(p.timeout)&&(c=setTimeout((function(){c=null,s(e.resolved)&&g(null)}),p.timeout)))),o=!1,e.loading?e.loadingComp:e.resolved}}(u=e,h),void 0===e))return function(e,t,i,n,o){var s=fe();return s.asyncFactory=e,s.asyncMeta={data:t,context:i,children:n,tag:o},s}(u,t,i,l,c);t=t||{},Mi(e),r(t.model)&&function(e,t){var i=e.model&&e.model.prop||"value",n=e.model&&e.model.event||"input";(t.attrs||(t.attrs={}))[i]=t.model.value;var s=t.on||(t.on={}),a=s[n],l=t.model.callback;r(a)?(o(a)?-1===a.indexOf(l):a!==l)&&(s[n]=[l].concat(a)):s[n]=l}(e.options,t);var g=function(e,t,i){var n=t.options.props;if(!s(n)){var o={},a=e.attrs,l=e.props;if(r(a)||r(l))for(var c in n){var d=I(c);qe(o,l,c,d,!0)||qe(o,a,c,d,!1)}return o}}(t,e);if(a(e.options.functional))return function(e,t,i,s,a){var l=e.options,c={},d=l.props;if(r(d))for(var h in d)c[h]=Yi(h,d,t||n);else r(i.attrs)&&Pi(c,i.attrs),r(i.props)&&Pi(c,i.props);var u=new Ai(i,c,a,s,e),g=l.render.call(null,u._c,u);if(g instanceof pe)return Oi(g,i,u.parent,l);if(o(g)){for(var p=Ze(g)||[],f=new Array(p.length),m=0;m<p.length;m++)f[m]=Oi(p[m],i,u.parent,l);return f}}(e,g,t,i,l);var p=t.on;if(t.on=t.nativeOn,a(e.options.abstract)){var m=t.slot;t={},m&&(t.slot=m)}!function(e){for(var t=e.hook||(e.hook={}),i=0;i<Bi.length;i++){var n=Bi[i],o=t[n],s=Fi[n];o===s||o&&o._merged||(t[n]=o?Wi(s,o):s)}}(t);var v=Ri(e.options)||c;return new pe("vue-component-".concat(e.cid).concat(v?"-".concat(v):""),t,void 0,void 0,void 0,i,{Ctor:e,propsData:g,listeners:p,tag:c,children:l},u)}}}function Wi(e,t){var i=function(i,n){e(i,n),t(i,n)};return i._merged=!0,i}var Hi=O,zi=U.optionMergeStrategies;function ji(e,t,i){if(void 0===i&&(i=!0),!t)return e;for(var n,o,s,r=he?Reflect.ownKeys(t):Object.keys(t),a=0;a<r.length;a++)"__ob__"!==(n=r[a])&&(o=e[n],s=t[n],i&&x(e,n)?o!==s&&u(o)&&u(s)&&ji(o,s):Pe(e,n,s));return e}function Ui(e,t,i){return i?function(){var n=c(t)?t.call(i,i):t,o=c(e)?e.call(i,i):e;return n?ji(n,o):o}:t?e?function(){return ji(c(t)?t.call(this,this):t,c(e)?e.call(this,this):e)}:t:e}function $i(e,t){var i=t?e?e.concat(t):o(t)?t:[t]:e;return i?function(e){for(var t=[],i=0;i<e.length;i++)-1===t.indexOf(e[i])&&t.push(e[i]);return t}(i):i}function Ki(e,t,i,n){var o=Object.create(e||null);return t?M(o,t):o}zi.data=function(e,t,i){return i?Ui(e,t,i):t&&"function"!=typeof t?e:Ui(e,t)},j.forEach((function(e){zi[e]=$i})),z.forEach((function(e){zi[e+"s"]=Ki})),zi.watch=function(e,t,i,n){if(e===oe&&(e=void 0),t===oe&&(t=void 0),!t)return Object.create(e||null);if(!e)return t;var s={};for(var r in M(s,e),t){var a=s[r],l=t[r];a&&!o(a)&&(a=[a]),s[r]=a?a.concat(l):o(l)?l:[l]}return s},zi.props=zi.methods=zi.inject=zi.computed=function(e,t,i,n){if(!e)return t;var o=Object.create(null);return M(o,e),t&&M(o,t),o},zi.provide=function(e,t){return e?function(){var i=Object.create(null);return ji(i,c(e)?e.call(this):e),t&&ji(i,c(t)?t.call(this):t,!1),i}:t};var qi=function(e,t){return void 0===t?e:t};function Zi(e,t,i){if(c(t)&&(t=t.options),function(e,t){var i=e.props;if(i){var n,s,r={};if(o(i))for(n=i.length;n--;)"string"==typeof(s=i[n])&&(r[L(s)]={type:null});else if(u(i))for(var a in i)s=i[a],r[L(a)]=u(s)?s:{type:s};e.props=r}}(t),function(e,t){var i=e.inject;if(i){var n=e.inject={};if(o(i))for(var s=0;s<i.length;s++)n[i[s]]={from:i[s]};else if(u(i))for(var r in i){var a=i[r];n[r]=u(a)?M({from:r},a):{from:a}}}}(t),function(e){var t=e.directives;if(t)for(var i in t){var n=t[i];c(n)&&(t[i]={bind:n,update:n})}}(t),!t._base&&(t.extends&&(e=Zi(e,t.extends,i)),t.mixins))for(var n=0,s=t.mixins.length;n<s;n++)e=Zi(e,t.mixins[n],i);var r,a={};for(r in e)l(r);for(r in t)x(e,r)||l(r);function l(n){var o=zi[n]||qi;a[n]=o(e[n],t[n],i,n)}return a}function Gi(e,t,i,n){if("string"==typeof i){var o=e[t];if(x(o,i))return o[i];var s=L(i);if(x(o,s))return o[s];var r=N(s);return x(o,r)?o[r]:o[i]||o[s]||o[r]}}function Yi(e,t,i,n){var o=t[e],s=!x(i,e),r=i[e],a=en(Boolean,o.type);if(a>-1)if(s&&!x(o,"default"))r=!1;else if(""===r||r===I(e)){var l=en(String,o.type);(l<0||a<l)&&(r=!0)}if(void 0===r){r=function(e,t,i){if(!x(t,"default"))return;var n=t.default;0;if(e&&e.$options.propsData&&void 0===e.$options.propsData[i]&&void 0!==e._props[i])return e._props[i];return c(n)&&"Function"!==Xi(t.type)?n.call(e):n}(n,o,e);var d=Ie;Ee(!0),Ae(r),Ee(d)}return r}var Qi=/^\s*function (\w+)/;function Xi(e){var t=e&&e.toString().match(Qi);return t?t[1]:""}function Ji(e,t){return Xi(e)===Xi(t)}function en(e,t){if(!o(t))return Ji(t,e)?0:-1;for(var i=0,n=t.length;i<n;i++)if(Ji(t[i],e))return i;return-1}function tn(e){this._init(e)}function nn(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var i=this,n=i.cid,o=e._Ctor||(e._Ctor={});if(o[n])return o[n];var s=Ri(e)||Ri(i.options);var r=function(e){this._init(e)};return(r.prototype=Object.create(i.prototype)).constructor=r,r.cid=t++,r.options=Zi(i.options,e),r.super=i,r.options.props&&function(e){var t=e.options.props;for(var i in t)xi(e.prototype,"_props",i)}(r),r.options.computed&&function(e){var t=e.options.computed;for(var i in t)Li(e.prototype,i,t[i])}(r),r.extend=i.extend,r.mixin=i.mixin,r.use=i.use,z.forEach((function(e){r[e]=i[e]})),s&&(r.options.components[s]=r),r.superOptions=i.options,r.extendOptions=e,r.sealedOptions=M({},r.options),o[n]=r,r}}function on(e){return e&&(Ri(e.Ctor.options)||e.tag)}function sn(e,t){return o(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!g(e)&&e.test(t)}function rn(e,t){var i=e.cache,n=e.keys,o=e._vnode;for(var s in i){var r=i[s];if(r){var a=r.name;a&&!t(a)&&an(i,s,n,o)}}}function an(e,t,i,n){var o=e[t];!o||n&&o.tag===n.tag||o.componentInstance.$destroy(),e[t]=null,y(i,t)}!function(e){e.prototype._init=function(e){var t=this;t._uid=Ti++,t._isVue=!0,t.__v_skip=!0,t._scope=new ei(!0),t._scope._vm=!0,e&&e._isComponent?function(e,t){var i=e.$options=Object.create(e.constructor.options),n=t._parentVnode;i.parent=t.parent,i._parentVnode=n;var o=n.componentOptions;i.propsData=o.propsData,i._parentListeners=o.listeners,i._renderChildren=o.children,i._componentTag=o.tag,t.render&&(i.render=t.render,i.staticRenderFns=t.staticRenderFns)}(t,e):t.$options=Zi(Mi(t.constructor),e||{},t),t._renderProxy=t,t._self=t,function(e){var t=e.$options,i=t.parent;if(i&&!t.abstract){for(;i.$options.abstract&&i.$parent;)i=i.$parent;i.$children.push(e)}e.$parent=i,e.$root=i?i.$root:e,e.$children=[],e.$refs={},e._provided=i?i._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(t),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&At(e,t)}(t),function(e){e._vnode=null,e._staticTrees=null;var t=e.$options,i=e.$vnode=t._parentVnode,o=i&&i.context;e.$slots=mt(t._renderChildren,o),e.$scopedSlots=i?bt(e.$parent,i.data.scopedSlots,e.$slots):n,e._c=function(t,i,n,o){return Je(e,t,i,n,o,!1)},e.$createElement=function(t,i,n,o){return Je(e,t,i,n,o,!0)};var s=i&&i.data;Oe(e,"$attrs",s&&s.attrs||n,null,!0),Oe(e,"$listeners",t._parentListeners||n,null,!0)}(t),Vt(t,"beforeCreate",void 0,!1),function(e){var t=Ei(e.$options.inject,e);t&&(Ee(!1),Object.keys(t).forEach((function(i){Oe(e,i,t[i])})),Ee(!0))}(t),Si(t),function(e){var t=e.$options.provide;if(t){var i=c(t)?t.call(e):t;if(!d(i))return;for(var n=ti(e),o=he?Reflect.ownKeys(i):Object.keys(i),s=0;s<o.length;s++){var r=o[s];Object.defineProperty(n,r,Object.getOwnPropertyDescriptor(i,r))}}}(t),Vt(t,"created"),t.$options.el&&t.$mount(t.$options.el)}}(tn),function(e){var t={get:function(){return this._data}},i={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",i),e.prototype.$set=Pe,e.prototype.$delete=Re,e.prototype.$watch=function(e,t,i){var n=this;if(u(t))return Ii(n,e,t,i);(i=i||{}).user=!0;var o=new yi(n,e,t,i);if(i.immediate){var s='callback for immediate watcher "'.concat(o.expression,'"');xe(),ni(t,n,[o.value],n,s),Se()}return function(){o.teardown()}}}(tn),function(e){var t=/^hook:/;e.prototype.$on=function(e,i){var n=this;if(o(e))for(var s=0,r=e.length;s<r;s++)n.$on(e[s],i);else(n._events[e]||(n._events[e]=[])).push(i),t.test(e)&&(n._hasHookEvent=!0);return n},e.prototype.$once=function(e,t){var i=this;function n(){i.$off(e,n),t.apply(i,arguments)}return n.fn=t,i.$on(e,n),i},e.prototype.$off=function(e,t){var i=this;if(!arguments.length)return i._events=Object.create(null),i;if(o(e)){for(var n=0,s=e.length;n<s;n++)i.$off(e[n],t);return i}var r,a=i._events[e];if(!a)return i;if(!t)return i._events[e]=null,i;for(var l=a.length;l--;)if((r=a[l])===t||r.fn===t){a.splice(l,1);break}return i},e.prototype.$emit=function(e){var t=this,i=t._events[e];if(i){i=i.length>1?T(i):i;for(var n=T(arguments,1),o='event handler for "'.concat(e,'"'),s=0,r=i.length;s<r;s++)ni(i[s],t,n,t,o)}return t}}(tn),function(e){e.prototype._update=function(e,t){var i=this,n=i.$el,o=i._vnode,s=Pt(i);i._vnode=e,i.$el=o?i.__patch__(o,e):i.__patch__(i.$el,e,t,!1),s(),n&&(n.__vue__=null),i.$el&&(i.$el.__vue__=i);for(var r=i;r&&r.$vnode&&r.$parent&&r.$vnode===r.$parent._vnode;)r.$parent.$el=r.$el,r=r.$parent},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){Vt(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||y(t.$children,e),e._scope.stop(),e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),Vt(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(tn),function(e){ft(e.prototype),e.prototype.$nextTick=function(e){return fi(e,this)},e.prototype._render=function(){var e,t=this,i=t.$options,n=i.render,s=i._parentVnode;s&&t._isMounted&&(t.$scopedSlots=bt(t.$parent,s.data.scopedSlots,t.$slots,t.$scopedSlots),t._slotsProxy&&kt(t._slotsProxy,t.$scopedSlots)),t.$vnode=s;try{ge(t),Nt=t,e=n.call(t._renderProxy,t.$createElement)}catch(i){ii(i,t,"render"),e=t._vnode}finally{Nt=null,ge()}return o(e)&&1===e.length&&(e=e[0]),e instanceof pe||(e=fe()),e.parent=s,e}}(tn);var ln=[String,RegExp,Array],cn={name:"keep-alive",abstract:!0,props:{include:ln,exclude:ln,max:[String,Number]},methods:{cacheVNode:function(){var e=this,t=e.cache,i=e.keys,n=e.vnodeToCache,o=e.keyToCache;if(n){var s=n.tag,r=n.componentInstance,a=n.componentOptions;t[o]={name:on(a),tag:s,componentInstance:r},i.push(o),this.max&&i.length>parseInt(this.max)&&an(t,i[0],i,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)an(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(t){rn(e,(function(e){return sn(t,e)}))})),this.$watch("exclude",(function(t){rn(e,(function(e){return!sn(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=It(e),i=t&&t.componentOptions;if(i){var n=on(i),o=this.include,s=this.exclude;if(o&&(!n||!sn(o,n))||s&&n&&sn(s,n))return t;var r=this.cache,a=this.keys,l=null==t.key?i.Ctor.cid+(i.tag?"::".concat(i.tag):""):t.key;r[l]?(t.componentInstance=r[l].componentInstance,y(a,l),a.push(l)):(this.vnodeToCache=t,this.keyToCache=l),t.data.keepAlive=!0}return t||e&&e[0]}},dn={KeepAlive:cn};!function(e){var t={get:function(){return U}};Object.defineProperty(e,"config",t),e.util={warn:Hi,extend:M,mergeOptions:Zi,defineReactive:Oe},e.set=Pe,e.delete=Re,e.nextTick=fi,e.observable=function(e){return Ae(e),e},e.options=Object.create(null),z.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,M(e.options.components,dn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var i=T(arguments,1);return i.unshift(this),c(e.install)?e.install.apply(e,i):c(e)&&e.apply(null,i),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=Zi(this.options,e),this}}(e),nn(e),function(e){z.forEach((function(t){e[t]=function(e,i){return i?("component"===t&&u(i)&&(i.name=i.name||e,i=this.options._base.extend(i)),"directive"===t&&c(i)&&(i={bind:i,update:i}),this.options[t+"s"][e]=i,i):this.options[t+"s"][e]}}))}(e)}(tn),Object.defineProperty(tn.prototype,"$isServer",{get:ae}),Object.defineProperty(tn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(tn,"FunctionalRenderContext",{value:Ai}),tn.version="2.7.14";var hn=_("style,class"),un=_("input,textarea,option,select,progress"),gn=function(e,t,i){return"value"===i&&un(e)&&"button"!==t||"selected"===i&&"option"===e||"checked"===i&&"input"===e||"muted"===i&&"video"===e},pn=_("contenteditable,draggable,spellcheck"),fn=_("events,caret,typing,plaintext-only"),mn=function(e,t){return yn(t)||"false"===t?"false":"contenteditable"===e&&fn(t)?t:"true"},vn=_("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),_n="http://www.w3.org/1999/xlink",bn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},wn=function(e){return bn(e)?e.slice(6,e.length):""},yn=function(e){return null==e||!1===e};function Cn(e){for(var t=e.data,i=e,n=e;r(n.componentInstance);)(n=n.componentInstance._vnode)&&n.data&&(t=xn(n.data,t));for(;r(i=i.parent);)i&&i.data&&(t=xn(t,i.data));return function(e,t){if(r(e)||r(t))return Sn(e,kn(t));return""}(t.staticClass,t.class)}function xn(e,t){return{staticClass:Sn(e.staticClass,t.staticClass),class:r(e.class)?[e.class,t.class]:t.class}}function Sn(e,t){return e?t?e+" "+t:e:t||""}function kn(e){return Array.isArray(e)?function(e){for(var t,i="",n=0,o=e.length;n<o;n++)r(t=kn(e[n]))&&""!==t&&(i&&(i+=" "),i+=t);return i}(e):d(e)?function(e){var t="";for(var i in e)e[i]&&(t&&(t+=" "),t+=i);return t}(e):"string"==typeof e?e:""}var Ln={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Nn=_("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Dn=_("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),In=function(e){return Nn(e)||Dn(e)};function En(e){return Dn(e)?"svg":"math"===e?"math":void 0}var Tn=Object.create(null);var Mn=_("text,number,password,search,email,tel,url");function An(e){if("string"==typeof e){var t=document.querySelector(e);return t||document.createElement("div")}return e}var On=Object.freeze({__proto__:null,createElement:function(e,t){var i=document.createElement(e);return"select"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&i.setAttribute("multiple","multiple"),i},createElementNS:function(e,t){return document.createElementNS(Ln[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,i){e.insertBefore(t,i)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},setStyleScope:function(e,t){e.setAttribute(t,"")}}),Pn={create:function(e,t){Rn(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Rn(e,!0),Rn(t))},destroy:function(e){Rn(e,!0)}};function Rn(e,t){var i=e.data.ref;if(r(i)){var n=e.context,s=e.componentInstance||e.elm,a=t?null:s,l=t?void 0:s;if(c(i))ni(i,n,[a],n,"template ref function");else{var d=e.data.refInFor,h="string"==typeof i||"number"==typeof i,u=He(i),g=n.$refs;if(h||u)if(d){var p=h?g[i]:i.value;t?o(p)&&y(p,s):o(p)?p.includes(s)||p.push(s):h?(g[i]=[s],Fn(n,i,g[i])):i.value=[s]}else if(h){if(t&&g[i]!==s)return;g[i]=l,Fn(n,i,a)}else if(u){if(t&&i.value!==s)return;i.value=a}else 0}}}function Fn(e,t,i){var n=e._setupState;n&&x(n,t)&&(He(n[t])?n[t].value=i:n[t]=i)}var Bn=new pe("",{},[]),Vn=["create","activate","update","remove","destroy"];function Wn(e,t){return e.key===t.key&&e.asyncFactory===t.asyncFactory&&(e.tag===t.tag&&e.isComment===t.isComment&&r(e.data)===r(t.data)&&function(e,t){if("input"!==e.tag)return!0;var i,n=r(i=e.data)&&r(i=i.attrs)&&i.type,o=r(i=t.data)&&r(i=i.attrs)&&i.type;return n===o||Mn(n)&&Mn(o)}(e,t)||a(e.isAsyncPlaceholder)&&s(t.asyncFactory.error))}function Hn(e,t,i){var n,o,s={};for(n=t;n<=i;++n)r(o=e[n].key)&&(s[o]=n);return s}var zn={create:jn,update:jn,destroy:function(e){jn(e,Bn)}};function jn(e,t){(e.data.directives||t.data.directives)&&function(e,t){var i,n,o,s=e===Bn,r=t===Bn,a=$n(e.data.directives,e.context),l=$n(t.data.directives,t.context),c=[],d=[];for(i in l)n=a[i],o=l[i],n?(o.oldValue=n.value,o.oldArg=n.arg,qn(o,"update",t,e),o.def&&o.def.componentUpdated&&d.push(o)):(qn(o,"bind",t,e),o.def&&o.def.inserted&&c.push(o));if(c.length){var h=function(){for(var i=0;i<c.length;i++)qn(c[i],"inserted",t,e)};s?Ke(t,"insert",h):h()}d.length&&Ke(t,"postpatch",(function(){for(var i=0;i<d.length;i++)qn(d[i],"componentUpdated",t,e)}));if(!s)for(i in a)l[i]||qn(a[i],"unbind",e,e,r)}(e,t)}var Un=Object.create(null);function $n(e,t){var i,n,o=Object.create(null);if(!e)return o;for(i=0;i<e.length;i++){if((n=e[i]).modifiers||(n.modifiers=Un),o[Kn(n)]=n,t._setupState&&t._setupState.__sfc){var s=n.def||Gi(t,"_setupState","v-"+n.name);n.def="function"==typeof s?{bind:s,update:s}:s}n.def=n.def||Gi(t.$options,"directives",n.name)}return o}function Kn(e){return e.rawName||"".concat(e.name,".").concat(Object.keys(e.modifiers||{}).join("."))}function qn(e,t,i,n,o){var s=e.def&&e.def[t];if(s)try{s(i.elm,e,i,n,o)}catch(n){ii(n,i.context,"directive ".concat(e.name," ").concat(t," hook"))}}var Zn=[Pn,zn];function Gn(e,t){var i=t.componentOptions;if(!(r(i)&&!1===i.Ctor.options.inheritAttrs||s(e.data.attrs)&&s(t.data.attrs))){var n,o,l=t.elm,c=e.data.attrs||{},d=t.data.attrs||{};for(n in(r(d.__ob__)||a(d._v_attr_proxy))&&(d=t.data.attrs=M({},d)),d)o=d[n],c[n]!==o&&Yn(l,n,o,t.data.pre);for(n in(X||ee)&&d.value!==c.value&&Yn(l,"value",d.value),c)s(d[n])&&(bn(n)?l.removeAttributeNS(_n,wn(n)):pn(n)||l.removeAttribute(n))}}function Yn(e,t,i,n){n||e.tagName.indexOf("-")>-1?Qn(e,t,i):vn(t)?yn(i)?e.removeAttribute(t):(i="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,i)):pn(t)?e.setAttribute(t,mn(t,i)):bn(t)?yn(i)?e.removeAttributeNS(_n,wn(t)):e.setAttributeNS(_n,t,i):Qn(e,t,i)}function Qn(e,t,i){if(yn(i))e.removeAttribute(t);else{if(X&&!J&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==i&&!e.__ieph){var n=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",n)};e.addEventListener("input",n),e.__ieph=!0}e.setAttribute(t,i)}}var Xn={create:Gn,update:Gn};function Jn(e,t){var i=t.elm,n=t.data,o=e.data;if(!(s(n.staticClass)&&s(n.class)&&(s(o)||s(o.staticClass)&&s(o.class)))){var a=Cn(t),l=i._transitionClasses;r(l)&&(a=Sn(a,kn(l))),a!==i._prevClass&&(i.setAttribute("class",a),i._prevClass=a)}}var eo,to,io,no,oo,so,ro={create:Jn,update:Jn},ao=/[\w).+\-_$\]]/;function lo(e){var t,i,n,o,s,r=!1,a=!1,l=!1,c=!1,d=0,h=0,u=0,g=0;for(n=0;n<e.length;n++)if(i=t,t=e.charCodeAt(n),r)39===t&&92!==i&&(r=!1);else if(a)34===t&&92!==i&&(a=!1);else if(l)96===t&&92!==i&&(l=!1);else if(c)47===t&&92!==i&&(c=!1);else if(124!==t||124===e.charCodeAt(n+1)||124===e.charCodeAt(n-1)||d||h||u){switch(t){case 34:a=!0;break;case 39:r=!0;break;case 96:l=!0;break;case 40:u++;break;case 41:u--;break;case 91:h++;break;case 93:h--;break;case 123:d++;break;case 125:d--}if(47===t){for(var p=n-1,f=void 0;p>=0&&" "===(f=e.charAt(p));p--);f&&ao.test(f)||(c=!0)}}else void 0===o?(g=n+1,o=e.slice(0,n).trim()):m();function m(){(s||(s=[])).push(e.slice(g,n).trim()),g=n+1}if(void 0===o?o=e.slice(0,n).trim():0!==g&&m(),s)for(n=0;n<s.length;n++)o=co(o,s[n]);return o}function co(e,t){var i=t.indexOf("(");if(i<0)return'_f("'.concat(t,'")(').concat(e,")");var n=t.slice(0,i),o=t.slice(i+1);return'_f("'.concat(n,'")(').concat(e).concat(")"!==o?","+o:o)}function ho(e,t){console.error("[Vue compiler]: ".concat(e))}function uo(e,t){return e?e.map((function(e){return e[t]})).filter((function(e){return e})):[]}function go(e,t,i,n,o){(e.props||(e.props=[])).push(Co({name:t,value:i,dynamic:o},n)),e.plain=!1}function po(e,t,i,n,o){(o?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(Co({name:t,value:i,dynamic:o},n)),e.plain=!1}function fo(e,t,i,n){e.attrsMap[t]=i,e.attrsList.push(Co({name:t,value:i},n))}function mo(e,t,i,n,o,s,r,a){(e.directives||(e.directives=[])).push(Co({name:t,rawName:i,value:n,arg:o,isDynamicArg:s,modifiers:r},a)),e.plain=!1}function vo(e,t,i){return i?"_p(".concat(t,',"').concat(e,'")'):e+t}function _o(e,t,i,o,s,r,a,l){var c;(o=o||n).right?l?t="(".concat(t,")==='click'?'contextmenu':(").concat(t,")"):"click"===t&&(t="contextmenu",delete o.right):o.middle&&(l?t="(".concat(t,")==='click'?'mouseup':(").concat(t,")"):"click"===t&&(t="mouseup")),o.capture&&(delete o.capture,t=vo("!",t,l)),o.once&&(delete o.once,t=vo("~",t,l)),o.passive&&(delete o.passive,t=vo("&",t,l)),o.native?(delete o.native,c=e.nativeEvents||(e.nativeEvents={})):c=e.events||(e.events={});var d=Co({value:i.trim(),dynamic:l},a);o!==n&&(d.modifiers=o);var h=c[t];Array.isArray(h)?s?h.unshift(d):h.push(d):c[t]=h?s?[d,h]:[h,d]:d,e.plain=!1}function bo(e,t,i){var n=wo(e,":"+t)||wo(e,"v-bind:"+t);if(null!=n)return lo(n);if(!1!==i){var o=wo(e,t);if(null!=o)return JSON.stringify(o)}}function wo(e,t,i){var n;if(null!=(n=e.attrsMap[t]))for(var o=e.attrsList,s=0,r=o.length;s<r;s++)if(o[s].name===t){o.splice(s,1);break}return i&&delete e.attrsMap[t],n}function yo(e,t){for(var i=e.attrsList,n=0,o=i.length;n<o;n++){var s=i[n];if(t.test(s.name))return i.splice(n,1),s}}function Co(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function xo(e,t,i){var n=i||{},o=n.number,s="$$v",r=s;n.trim&&(r="(typeof ".concat(s," === 'string'")+"? ".concat(s,".trim()")+": ".concat(s,")")),o&&(r="_n(".concat(r,")"));var a=So(t,r);e.model={value:"(".concat(t,")"),expression:JSON.stringify(t),callback:"function (".concat(s,") {").concat(a,"}")}}function So(e,t){var i=function(e){if(e=e.trim(),eo=e.length,e.indexOf("[")<0||e.lastIndexOf("]")<eo-1)return(no=e.lastIndexOf("."))>-1?{exp:e.slice(0,no),key:'"'+e.slice(no+1)+'"'}:{exp:e,key:null};to=e,no=oo=so=0;for(;!Lo();)No(io=ko())?Io(io):91===io&&Do(io);return{exp:e.slice(0,oo),key:e.slice(oo+1,so)}}(e);return null===i.key?"".concat(e,"=").concat(t):"$set(".concat(i.exp,", ").concat(i.key,", ").concat(t,")")}function ko(){return to.charCodeAt(++no)}function Lo(){return no>=eo}function No(e){return 34===e||39===e}function Do(e){var t=1;for(oo=no;!Lo();)if(No(e=ko()))Io(e);else if(91===e&&t++,93===e&&t--,0===t){so=no;break}}function Io(e){for(var t=e;!Lo()&&(e=ko())!==t;);}var Eo,To="__r",Mo="__c";function Ao(e,t,i){var n=Eo;return function o(){null!==t.apply(null,arguments)&&Ro(e,o,i,n)}}var Oo=ai&&!(ne&&Number(ne[1])<=53);function Po(e,t,i,n){if(Oo){var o=Kt,s=t;t=s._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=o||e.timeStamp<=0||e.target.ownerDocument!==document)return s.apply(this,arguments)}}Eo.addEventListener(e,t,se?{capture:i,passive:n}:i)}function Ro(e,t,i,n){(n||Eo).removeEventListener(e,t._wrapper||t,i)}function Fo(e,t){if(!s(e.data.on)||!s(t.data.on)){var i=t.data.on||{},n=e.data.on||{};Eo=t.elm||e.elm,function(e){if(r(e[To])){var t=X?"change":"input";e[t]=[].concat(e[To],e[t]||[]),delete e[To]}r(e[Mo])&&(e.change=[].concat(e[Mo],e.change||[]),delete e[Mo])}(i),$e(i,n,Po,Ro,Ao,t.context),Eo=void 0}}var Bo,Vo={create:Fo,update:Fo,destroy:function(e){return Fo(e,Bn)}};function Wo(e,t){if(!s(e.data.domProps)||!s(t.data.domProps)){var i,n,o=t.elm,l=e.data.domProps||{},c=t.data.domProps||{};for(i in(r(c.__ob__)||a(c._v_attr_proxy))&&(c=t.data.domProps=M({},c)),l)i in c||(o[i]="");for(i in c){if(n=c[i],"textContent"===i||"innerHTML"===i){if(t.children&&(t.children.length=0),n===l[i])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===i&&"PROGRESS"!==o.tagName){o._value=n;var d=s(n)?"":String(n);Ho(o,d)&&(o.value=d)}else if("innerHTML"===i&&Dn(o.tagName)&&s(o.innerHTML)){(Bo=Bo||document.createElement("div")).innerHTML="<svg>".concat(n,"</svg>");for(var h=Bo.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;h.firstChild;)o.appendChild(h.firstChild)}else if(n!==l[i])try{o[i]=n}catch(e){}}}}function Ho(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var i=!0;try{i=document.activeElement!==e}catch(e){}return i&&e.value!==t}(e,t)||function(e,t){var i=e.value,n=e._vModifiers;if(r(n)){if(n.number)return v(i)!==v(t);if(n.trim)return i.trim()!==t.trim()}return i!==t}(e,t))}var zo={create:Wo,update:Wo},jo=S((function(e){var t={},i=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var n=e.split(i);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}));function Uo(e){var t=$o(e.style);return e.staticStyle?M(e.staticStyle,t):t}function $o(e){return Array.isArray(e)?A(e):"string"==typeof e?jo(e):e}var Ko,qo=/^--/,Zo=/\s*!important$/,Go=function(e,t,i){if(qo.test(t))e.style.setProperty(t,i);else if(Zo.test(i))e.style.setProperty(I(t),i.replace(Zo,""),"important");else{var n=Qo(t);if(Array.isArray(i))for(var o=0,s=i.length;o<s;o++)e.style[n]=i[o];else e.style[n]=i}},Yo=["Webkit","Moz","ms"],Qo=S((function(e){if(Ko=Ko||document.createElement("div").style,"filter"!==(e=L(e))&&e in Ko)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),i=0;i<Yo.length;i++){var n=Yo[i]+t;if(n in Ko)return n}}));function Xo(e,t){var i=t.data,n=e.data;if(!(s(i.staticStyle)&&s(i.style)&&s(n.staticStyle)&&s(n.style))){var o,a,l=t.elm,c=n.staticStyle,d=n.normalizedStyle||n.style||{},h=c||d,u=$o(t.data.style)||{};t.data.normalizedStyle=r(u.__ob__)?M({},u):u;var g=function(e,t){var i,n={};if(t)for(var o=e;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(i=Uo(o.data))&&M(n,i);(i=Uo(e.data))&&M(n,i);for(var s=e;s=s.parent;)s.data&&(i=Uo(s.data))&&M(n,i);return n}(t,!0);for(a in h)s(g[a])&&Go(l,a,"");for(a in g)(o=g[a])!==h[a]&&Go(l,a,null==o?"":o)}}var Jo={create:Xo,update:Xo},es=/\s+/;function ts(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(es).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var i=" ".concat(e.getAttribute("class")||""," ");i.indexOf(" "+t+" ")<0&&e.setAttribute("class",(i+t).trim())}}function is(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(es).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var i=" ".concat(e.getAttribute("class")||""," "),n=" "+t+" ";i.indexOf(n)>=0;)i=i.replace(n," ");(i=i.trim())?e.setAttribute("class",i):e.removeAttribute("class")}}function ns(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&M(t,os(e.name||"v")),M(t,e),t}return"string"==typeof e?os(e):void 0}}var os=S((function(e){return{enterClass:"".concat(e,"-enter"),enterToClass:"".concat(e,"-enter-to"),enterActiveClass:"".concat(e,"-enter-active"),leaveClass:"".concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-to"),leaveActiveClass:"".concat(e,"-leave-active")}})),ss=Y&&!J,rs="transition",as="animation",ls="transition",cs="transitionend",ds="animation",hs="animationend";ss&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ls="WebkitTransition",cs="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ds="WebkitAnimation",hs="webkitAnimationEnd"));var us=Y?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function gs(e){us((function(){us(e)}))}function ps(e,t){var i=e._transitionClasses||(e._transitionClasses=[]);i.indexOf(t)<0&&(i.push(t),ts(e,t))}function fs(e,t){e._transitionClasses&&y(e._transitionClasses,t),is(e,t)}function ms(e,t,i){var n=_s(e,t),o=n.type,s=n.timeout,r=n.propCount;if(!o)return i();var a=o===rs?cs:hs,l=0,c=function(){e.removeEventListener(a,d),i()},d=function(t){t.target===e&&++l>=r&&c()};setTimeout((function(){l<r&&c()}),s+1),e.addEventListener(a,d)}var vs=/\b(transform|all)(,|$)/;function _s(e,t){var i,n=window.getComputedStyle(e),o=(n[ls+"Delay"]||"").split(", "),s=(n[ls+"Duration"]||"").split(", "),r=bs(o,s),a=(n[ds+"Delay"]||"").split(", "),l=(n[ds+"Duration"]||"").split(", "),c=bs(a,l),d=0,h=0;return t===rs?r>0&&(i=rs,d=r,h=s.length):t===as?c>0&&(i=as,d=c,h=l.length):h=(i=(d=Math.max(r,c))>0?r>c?rs:as:null)?i===rs?s.length:l.length:0,{type:i,timeout:d,propCount:h,hasTransform:i===rs&&vs.test(n[ls+"Property"])}}function bs(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.apply(null,t.map((function(t,i){return ws(t)+ws(e[i])})))}function ws(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function ys(e,t){var i=e.elm;r(i._leaveCb)&&(i._leaveCb.cancelled=!0,i._leaveCb());var n=ns(e.data.transition);if(!s(n)&&!r(i._enterCb)&&1===i.nodeType){for(var o=n.css,a=n.type,l=n.enterClass,h=n.enterToClass,u=n.enterActiveClass,g=n.appearClass,p=n.appearToClass,f=n.appearActiveClass,m=n.beforeEnter,_=n.enter,b=n.afterEnter,w=n.enterCancelled,y=n.beforeAppear,C=n.appear,x=n.afterAppear,S=n.appearCancelled,k=n.duration,L=Ot,N=Ot.$vnode;N&&N.parent;)L=N.context,N=N.parent;var D=!L._isMounted||!e.isRootInsert;if(!D||C||""===C){var I=D&&g?g:l,E=D&&f?f:u,T=D&&p?p:h,M=D&&y||m,A=D&&c(C)?C:_,O=D&&x||b,P=D&&S||w,R=v(d(k)?k.enter:k);0;var F=!1!==o&&!J,B=Ss(A),W=i._enterCb=V((function(){F&&(fs(i,T),fs(i,E)),W.cancelled?(F&&fs(i,I),P&&P(i)):O&&O(i),i._enterCb=null}));e.data.show||Ke(e,"insert",(function(){var t=i.parentNode,n=t&&t._pending&&t._pending[e.key];n&&n.tag===e.tag&&n.elm._leaveCb&&n.elm._leaveCb(),A&&A(i,W)})),M&&M(i),F&&(ps(i,I),ps(i,E),gs((function(){fs(i,I),W.cancelled||(ps(i,T),B||(xs(R)?setTimeout(W,R):ms(i,a,W)))}))),e.data.show&&(t&&t(),A&&A(i,W)),F||B||W()}}}function Cs(e,t){var i=e.elm;r(i._enterCb)&&(i._enterCb.cancelled=!0,i._enterCb());var n=ns(e.data.transition);if(s(n)||1!==i.nodeType)return t();if(!r(i._leaveCb)){var o=n.css,a=n.type,l=n.leaveClass,c=n.leaveToClass,h=n.leaveActiveClass,u=n.beforeLeave,g=n.leave,p=n.afterLeave,f=n.leaveCancelled,m=n.delayLeave,_=n.duration,b=!1!==o&&!J,w=Ss(g),y=v(d(_)?_.leave:_);0;var C=i._leaveCb=V((function(){i.parentNode&&i.parentNode._pending&&(i.parentNode._pending[e.key]=null),b&&(fs(i,c),fs(i,h)),C.cancelled?(b&&fs(i,l),f&&f(i)):(t(),p&&p(i)),i._leaveCb=null}));m?m(x):x()}function x(){C.cancelled||(!e.data.show&&i.parentNode&&((i.parentNode._pending||(i.parentNode._pending={}))[e.key]=e),u&&u(i),b&&(ps(i,l),ps(i,h),gs((function(){fs(i,l),C.cancelled||(ps(i,c),w||(xs(y)?setTimeout(C,y):ms(i,a,C)))}))),g&&g(i,C),b||w||C())}}function xs(e){return"number"==typeof e&&!isNaN(e)}function Ss(e){if(s(e))return!1;var t=e.fns;return r(t)?Ss(Array.isArray(t)?t[0]:t):(e._length||e.length)>1}function ks(e,t){!0!==t.data.show&&ys(t)}var Ls=function(e){var t,i,n={},c=e.modules,d=e.nodeOps;for(t=0;t<Vn.length;++t)for(n[Vn[t]]=[],i=0;i<c.length;++i)r(c[i][Vn[t]])&&n[Vn[t]].push(c[i][Vn[t]]);function h(e){var t=d.parentNode(e);r(t)&&d.removeChild(t,e)}function u(e,t,i,o,s,l,c){if(r(e.elm)&&r(l)&&(e=l[c]=ve(e)),e.isRootInsert=!s,!function(e,t,i,o){var s=e.data;if(r(s)){var l=r(e.componentInstance)&&s.keepAlive;if(r(s=s.hook)&&r(s=s.init)&&s(e,!1),r(e.componentInstance))return g(e,t),p(i,e.elm,o),a(l)&&function(e,t,i,o){var s,a=e;for(;a.componentInstance;)if(r(s=(a=a.componentInstance._vnode).data)&&r(s=s.transition)){for(s=0;s<n.activate.length;++s)n.activate[s](Bn,a);t.push(a);break}p(i,e.elm,o)}(e,t,i,o),!0}}(e,t,i,o)){var h=e.data,u=e.children,m=e.tag;r(m)?(e.elm=e.ns?d.createElementNS(e.ns,m):d.createElement(m,e),b(e),f(e,u,t),r(h)&&v(e,t),p(i,e.elm,o)):a(e.isComment)?(e.elm=d.createComment(e.text),p(i,e.elm,o)):(e.elm=d.createTextNode(e.text),p(i,e.elm,o))}}function g(e,t){r(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,m(e)?(v(e,t),b(e)):(Rn(e),t.push(e))}function p(e,t,i){r(e)&&(r(i)?d.parentNode(i)===e&&d.insertBefore(e,t,i):d.appendChild(e,t))}function f(e,t,i){if(o(t)){0;for(var n=0;n<t.length;++n)u(t[n],i,e.elm,null,!0,t,n)}else l(e.text)&&d.appendChild(e.elm,d.createTextNode(String(e.text)))}function m(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return r(e.tag)}function v(e,i){for(var o=0;o<n.create.length;++o)n.create[o](Bn,e);r(t=e.data.hook)&&(r(t.create)&&t.create(Bn,e),r(t.insert)&&i.push(e))}function b(e){var t;if(r(t=e.fnScopeId))d.setStyleScope(e.elm,t);else for(var i=e;i;)r(t=i.context)&&r(t=t.$options._scopeId)&&d.setStyleScope(e.elm,t),i=i.parent;r(t=Ot)&&t!==e.context&&t!==e.fnContext&&r(t=t.$options._scopeId)&&d.setStyleScope(e.elm,t)}function w(e,t,i,n,o,s){for(;n<=o;++n)u(i[n],s,e,t,!1,i,n)}function y(e){var t,i,o=e.data;if(r(o))for(r(t=o.hook)&&r(t=t.destroy)&&t(e),t=0;t<n.destroy.length;++t)n.destroy[t](e);if(r(t=e.children))for(i=0;i<e.children.length;++i)y(e.children[i])}function C(e,t,i){for(;t<=i;++t){var n=e[t];r(n)&&(r(n.tag)?(x(n),y(n)):h(n.elm))}}function x(e,t){if(r(t)||r(e.data)){var i,o=n.remove.length+1;for(r(t)?t.listeners+=o:t=function(e,t){function i(){0==--i.listeners&&h(e)}return i.listeners=t,i}(e.elm,o),r(i=e.componentInstance)&&r(i=i._vnode)&&r(i.data)&&x(i,t),i=0;i<n.remove.length;++i)n.remove[i](e,t);r(i=e.data.hook)&&r(i=i.remove)?i(e,t):t()}else h(e.elm)}function S(e,t,i,n){for(var o=i;o<n;o++){var s=t[o];if(r(s)&&Wn(e,s))return o}}function k(e,t,i,o,l,c){if(e!==t){r(t.elm)&&r(o)&&(t=o[l]=ve(t));var h=t.elm=e.elm;if(a(e.isAsyncPlaceholder))r(t.asyncFactory.resolved)?D(e.elm,t,i):t.isAsyncPlaceholder=!0;else if(a(t.isStatic)&&a(e.isStatic)&&t.key===e.key&&(a(t.isCloned)||a(t.isOnce)))t.componentInstance=e.componentInstance;else{var g,p=t.data;r(p)&&r(g=p.hook)&&r(g=g.prepatch)&&g(e,t);var f=e.children,v=t.children;if(r(p)&&m(t)){for(g=0;g<n.update.length;++g)n.update[g](e,t);r(g=p.hook)&&r(g=g.update)&&g(e,t)}s(t.text)?r(f)&&r(v)?f!==v&&function(e,t,i,n,o){var a,l,c,h=0,g=0,p=t.length-1,f=t[0],m=t[p],v=i.length-1,_=i[0],b=i[v],y=!o;for(;h<=p&&g<=v;)s(f)?f=t[++h]:s(m)?m=t[--p]:Wn(f,_)?(k(f,_,n,i,g),f=t[++h],_=i[++g]):Wn(m,b)?(k(m,b,n,i,v),m=t[--p],b=i[--v]):Wn(f,b)?(k(f,b,n,i,v),y&&d.insertBefore(e,f.elm,d.nextSibling(m.elm)),f=t[++h],b=i[--v]):Wn(m,_)?(k(m,_,n,i,g),y&&d.insertBefore(e,m.elm,f.elm),m=t[--p],_=i[++g]):(s(a)&&(a=Hn(t,h,p)),s(l=r(_.key)?a[_.key]:S(_,t,h,p))?u(_,n,e,f.elm,!1,i,g):Wn(c=t[l],_)?(k(c,_,n,i,g),t[l]=void 0,y&&d.insertBefore(e,c.elm,f.elm)):u(_,n,e,f.elm,!1,i,g),_=i[++g]);h>p?w(e,s(i[v+1])?null:i[v+1].elm,i,g,v,n):g>v&&C(t,h,p)}(h,f,v,i,c):r(v)?(r(e.text)&&d.setTextContent(h,""),w(h,null,v,0,v.length-1,i)):r(f)?C(f,0,f.length-1):r(e.text)&&d.setTextContent(h,""):e.text!==t.text&&d.setTextContent(h,t.text),r(p)&&r(g=p.hook)&&r(g=g.postpatch)&&g(e,t)}}}function L(e,t,i){if(a(i)&&r(e.parent))e.parent.data.pendingInsert=t;else for(var n=0;n<t.length;++n)t[n].data.hook.insert(t[n])}var N=_("attrs,class,staticClass,staticStyle,key");function D(e,t,i,n){var o,s=t.tag,l=t.data,c=t.children;if(n=n||l&&l.pre,t.elm=e,a(t.isComment)&&r(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(r(l)&&(r(o=l.hook)&&r(o=o.init)&&o(t,!0),r(o=t.componentInstance)))return g(t,i),!0;if(r(s)){if(r(c))if(e.hasChildNodes())if(r(o=l)&&r(o=o.domProps)&&r(o=o.innerHTML)){if(o!==e.innerHTML)return!1}else{for(var d=!0,h=e.firstChild,u=0;u<c.length;u++){if(!h||!D(h,c[u],i,n)){d=!1;break}h=h.nextSibling}if(!d||h)return!1}else f(t,c,i);if(r(l)){var p=!1;for(var m in l)if(!N(m)){p=!0,v(t,i);break}!p&&l.class&&_i(l.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,t,i,o){if(!s(t)){var l,c=!1,h=[];if(s(e))c=!0,u(t,h);else{var g=r(e.nodeType);if(!g&&Wn(e,t))k(e,t,h,null,null,o);else{if(g){if(1===e.nodeType&&e.hasAttribute(H)&&(e.removeAttribute(H),i=!0),a(i)&&D(e,t,h))return L(t,h,!0),e;l=e,e=new pe(d.tagName(l).toLowerCase(),{},[],void 0,l)}var p=e.elm,f=d.parentNode(p);if(u(t,h,p._leaveCb?null:f,d.nextSibling(p)),r(t.parent))for(var v=t.parent,_=m(t);v;){for(var b=0;b<n.destroy.length;++b)n.destroy[b](v);if(v.elm=t.elm,_){for(var w=0;w<n.create.length;++w)n.create[w](Bn,v);var x=v.data.hook.insert;if(x.merged)for(var S=1;S<x.fns.length;S++)x.fns[S]()}else Rn(v);v=v.parent}r(f)?C([e],0,0):r(e.tag)&&y(e)}}return L(t,h,c),t.elm}r(e)&&y(e)}}({nodeOps:On,modules:[Xn,ro,Vo,zo,Jo,Y?{create:ks,activate:ks,remove:function(e,t){!0!==e.data.show?Cs(e,t):t()}}:{}].concat(Zn)});J&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&Os(e,"input")}));var Ns={inserted:function(e,t,i,n){"select"===i.tag?(n.elm&&!n.elm._vOptions?Ke(i,"postpatch",(function(){Ns.componentUpdated(e,t,i)})):Ds(e,t,i.context),e._vOptions=[].map.call(e.options,Ts)):("textarea"===i.tag||Mn(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",Ms),e.addEventListener("compositionend",As),e.addEventListener("change",As),J&&(e.vmodel=!0)))},componentUpdated:function(e,t,i){if("select"===i.tag){Ds(e,t,i.context);var n=e._vOptions,o=e._vOptions=[].map.call(e.options,Ts);if(o.some((function(e,t){return!F(e,n[t])})))(e.multiple?t.value.some((function(e){return Es(e,o)})):t.value!==t.oldValue&&Es(t.value,o))&&Os(e,"change")}}};function Ds(e,t,i){Is(e,t,i),(X||ee)&&setTimeout((function(){Is(e,t,i)}),0)}function Is(e,t,i){var n=t.value,o=e.multiple;if(!o||Array.isArray(n)){for(var s,r,a=0,l=e.options.length;a<l;a++)if(r=e.options[a],o)s=B(n,Ts(r))>-1,r.selected!==s&&(r.selected=s);else if(F(Ts(r),n))return void(e.selectedIndex!==a&&(e.selectedIndex=a));o||(e.selectedIndex=-1)}}function Es(e,t){return t.every((function(t){return!F(t,e)}))}function Ts(e){return"_value"in e?e._value:e.value}function Ms(e){e.target.composing=!0}function As(e){e.target.composing&&(e.target.composing=!1,Os(e.target,"input"))}function Os(e,t){var i=document.createEvent("HTMLEvents");i.initEvent(t,!0,!0),e.dispatchEvent(i)}function Ps(e){return!e.componentInstance||e.data&&e.data.transition?e:Ps(e.componentInstance._vnode)}var Rs={bind:function(e,t,i){var n=t.value,o=(i=Ps(i)).data&&i.data.transition,s=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;n&&o?(i.data.show=!0,ys(i,(function(){e.style.display=s}))):e.style.display=n?s:"none"},update:function(e,t,i){var n=t.value;!n!=!t.oldValue&&((i=Ps(i)).data&&i.data.transition?(i.data.show=!0,n?ys(i,(function(){e.style.display=e.__vOriginalDisplay})):Cs(i,(function(){e.style.display="none"}))):e.style.display=n?e.__vOriginalDisplay:"none")},unbind:function(e,t,i,n,o){o||(e.style.display=e.__vOriginalDisplay)}},Fs={model:Ns,show:Rs},Bs={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Vs(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Vs(It(t.children)):e}function Ws(e){var t={},i=e.$options;for(var n in i.propsData)t[n]=e[n];var o=i._parentListeners;for(var n in o)t[L(n)]=o[n];return t}function Hs(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var zs=function(e){return e.tag||_t(e)},js=function(e){return"show"===e.name},Us={name:"transition",props:Bs,abstract:!0,render:function(e){var t=this,i=this.$slots.default;if(i&&(i=i.filter(zs)).length){0;var n=this.mode;0;var o=i[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var s=Vs(o);if(!s)return o;if(this._leaving)return Hs(e,o);var r="__transition-".concat(this._uid,"-");s.key=null==s.key?s.isComment?r+"comment":r+s.tag:l(s.key)?0===String(s.key).indexOf(r)?s.key:r+s.key:s.key;var a=(s.data||(s.data={})).transition=Ws(this),c=this._vnode,d=Vs(c);if(s.data.directives&&s.data.directives.some(js)&&(s.data.show=!0),d&&d.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(s,d)&&!_t(d)&&(!d.componentInstance||!d.componentInstance._vnode.isComment)){var h=d.data.transition=M({},a);if("out-in"===n)return this._leaving=!0,Ke(h,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Hs(e,o);if("in-out"===n){if(_t(s))return c;var u,g=function(){u()};Ke(a,"afterEnter",g),Ke(a,"enterCancelled",g),Ke(h,"delayLeave",(function(e){u=e}))}}return o}}},$s=M({tag:String,moveClass:String},Bs);delete $s.mode;var Ks={props:$s,beforeMount:function(){var e=this,t=this._update;this._update=function(i,n){var o=Pt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,o(),t.call(e,i,n)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",i=Object.create(null),n=this.prevChildren=this.children,o=this.$slots.default||[],s=this.children=[],r=Ws(this),a=0;a<o.length;a++){if((d=o[a]).tag)if(null!=d.key&&0!==String(d.key).indexOf("__vlist"))s.push(d),i[d.key]=d,(d.data||(d.data={})).transition=r;else;}if(n){var l=[],c=[];for(a=0;a<n.length;a++){var d;(d=n[a]).data.transition=r,d.data.pos=d.elm.getBoundingClientRect(),i[d.key]?l.push(d):c.push(d)}this.kept=e(t,null,l),this.removed=c}return e(t,null,s)},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";e.length&&this.hasMove(e[0].elm,t)&&(e.forEach(qs),e.forEach(Zs),e.forEach(Gs),this._reflow=document.body.offsetHeight,e.forEach((function(e){if(e.data.moved){var i=e.elm,n=i.style;ps(i,t),n.transform=n.WebkitTransform=n.transitionDuration="",i.addEventListener(cs,i._moveCb=function e(n){n&&n.target!==i||n&&!/transform$/.test(n.propertyName)||(i.removeEventListener(cs,e),i._moveCb=null,fs(i,t))})}})))},methods:{hasMove:function(e,t){if(!ss)return!1;if(this._hasMove)return this._hasMove;var i=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach((function(e){is(i,e)})),ts(i,t),i.style.display="none",this.$el.appendChild(i);var n=_s(i);return this.$el.removeChild(i),this._hasMove=n.hasTransform}}};function qs(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Zs(e){e.data.newPos=e.elm.getBoundingClientRect()}function Gs(e){var t=e.data.pos,i=e.data.newPos,n=t.left-i.left,o=t.top-i.top;if(n||o){e.data.moved=!0;var s=e.elm.style;s.transform=s.WebkitTransform="translate(".concat(n,"px,").concat(o,"px)"),s.transitionDuration="0s"}}var Ys={Transition:Us,TransitionGroup:Ks};tn.config.mustUseProp=gn,tn.config.isReservedTag=In,tn.config.isReservedAttr=hn,tn.config.getTagNamespace=En,tn.config.isUnknownElement=function(e){if(!Y)return!0;if(In(e))return!1;if(e=e.toLowerCase(),null!=Tn[e])return Tn[e];var t=document.createElement(e);return e.indexOf("-")>-1?Tn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Tn[e]=/HTMLUnknownElement/.test(t.toString())},M(tn.options.directives,Fs),M(tn.options.components,Ys),tn.prototype.__patch__=Y?Ls:O,tn.prototype.$mount=function(e,t){return function(e,t,i){var n;e.$el=t,e.$options.render||(e.$options.render=fe),Vt(e,"beforeMount"),n=function(){e._update(e._render(),i)},new yi(e,n,O,{before:function(){e._isMounted&&!e._isDestroyed&&Vt(e,"beforeUpdate")}},!0),i=!1;var o=e._preWatchers;if(o)for(var s=0;s<o.length;s++)o[s].run();return null==e.$vnode&&(e._isMounted=!0,Vt(e,"mounted")),e}(this,e=e&&Y?An(e):void 0,t)},Y&&setTimeout((function(){U.devtools&&le&&le.emit("init",tn)}),0);var Qs=/\{\{((?:.|\r?\n)+?)\}\}/g,Xs=/[-.*+?^${}()|[\]\/\\]/g,Js=S((function(e){var t=e[0].replace(Xs,"\\$&"),i=e[1].replace(Xs,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+i,"g")}));var er={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var i=wo(e,"class");i&&(e.staticClass=JSON.stringify(i.replace(/\s+/g," ").trim()));var n=bo(e,"class",!1);n&&(e.classBinding=n)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:".concat(e.staticClass,",")),e.classBinding&&(t+="class:".concat(e.classBinding,",")),t}};var tr,ir={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var i=wo(e,"style");i&&(e.staticStyle=JSON.stringify(jo(i)));var n=bo(e,"style",!1);n&&(e.styleBinding=n)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:".concat(e.staticStyle,",")),e.styleBinding&&(t+="style:(".concat(e.styleBinding,"),")),t}},nr=function(e){return(tr=tr||document.createElement("div")).innerHTML=e,tr.textContent},or=_("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),sr=_("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),rr=_("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),ar=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,lr=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,cr="[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat($.source,"]*"),dr="((?:".concat(cr,"\\:)?").concat(cr,")"),hr=new RegExp("^<".concat(dr)),ur=/^\s*(\/?)>/,gr=new RegExp("^<\\/".concat(dr,"[^>]*>")),pr=/^<!DOCTYPE [^>]+>/i,fr=/^<!\--/,mr=/^<!\[/,vr=_("script,style,textarea",!0),_r={},br={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n","&#9;":"\t","&#39;":"'"},wr=/&(?:lt|gt|quot|amp|#39);/g,yr=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Cr=_("pre,textarea",!0),xr=function(e,t){return e&&Cr(e)&&"\n"===t[0]};function Sr(e,t){var i=t?yr:wr;return e.replace(i,(function(e){return br[e]}))}function kr(e,t){for(var i,n,o=[],s=t.expectHTML,r=t.isUnaryTag||P,a=t.canBeLeftOpenTag||P,l=0,c=function(){if(i=e,n&&vr(n)){var c=0,u=n.toLowerCase(),g=_r[u]||(_r[u]=new RegExp("([\\s\\S]*?)(</"+u+"[^>]*>)","i"));C=e.replace(g,(function(e,i,n){return c=n.length,vr(u)||"noscript"===u||(i=i.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),xr(u,i)&&(i=i.slice(1)),t.chars&&t.chars(i),""}));l+=e.length-C.length,e=C,h(u,l-c,l)}else{var p=e.indexOf("<");if(0===p){if(fr.test(e)){var f=e.indexOf("--\x3e");if(f>=0)return t.shouldKeepComment&&t.comment&&t.comment(e.substring(4,f),l,l+f+3),d(f+3),"continue"}if(mr.test(e)){var m=e.indexOf("]>");if(m>=0)return d(m+2),"continue"}var v=e.match(pr);if(v)return d(v[0].length),"continue";var _=e.match(gr);if(_){var b=l;return d(_[0].length),h(_[1],b,l),"continue"}var w=function(){var t=e.match(hr);if(t){var i={tagName:t[1],attrs:[],start:l};d(t[0].length);for(var n=void 0,o=void 0;!(n=e.match(ur))&&(o=e.match(lr)||e.match(ar));)o.start=l,d(o[0].length),o.end=l,i.attrs.push(o);if(n)return i.unarySlash=n[1],d(n[0].length),i.end=l,i}}();if(w)return function(e){var i=e.tagName,l=e.unarySlash;s&&("p"===n&&rr(i)&&h(n),a(i)&&n===i&&h(i));for(var c=r(i)||!!l,d=e.attrs.length,u=new Array(d),g=0;g<d;g++){var p=e.attrs[g],f=p[3]||p[4]||p[5]||"",m="a"===i&&"href"===p[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;u[g]={name:p[1],value:Sr(f,m)}}c||(o.push({tag:i,lowerCasedTag:i.toLowerCase(),attrs:u,start:e.start,end:e.end}),n=i);t.start&&t.start(i,u,c,e.start,e.end)}(w),xr(w.tagName,e)&&d(1),"continue"}var y=void 0,C=void 0,x=void 0;if(p>=0){for(C=e.slice(p);!(gr.test(C)||hr.test(C)||fr.test(C)||mr.test(C)||(x=C.indexOf("<",1))<0);)p+=x,C=e.slice(p);y=e.substring(0,p)}p<0&&(y=e),y&&d(y.length),t.chars&&y&&t.chars(y,l-y.length,l)}if(e===i)return t.chars&&t.chars(e),"break"};e;){if("break"===c())break}function d(t){l+=t,e=e.substring(t)}function h(e,i,s){var r,a;if(null==i&&(i=l),null==s&&(s=l),e)for(a=e.toLowerCase(),r=o.length-1;r>=0&&o[r].lowerCasedTag!==a;r--);else r=0;if(r>=0){for(var c=o.length-1;c>=r;c--)t.end&&t.end(o[c].tag,i,s);o.length=r,n=r&&o[r-1].tag}else"br"===a?t.start&&t.start(e,[],!0,i,s):"p"===a&&(t.start&&t.start(e,[],!1,i,s),t.end&&t.end(e,i,s))}h()}var Lr,Nr,Dr,Ir,Er,Tr,Mr,Ar,Or=/^@|^v-on:/,Pr=/^v-|^@|^:|^#/,Rr=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Fr=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Br=/^\(|\)$/g,Vr=/^\[.*\]$/,Wr=/:(.*)$/,Hr=/^:|^\.|^v-bind:/,zr=/\.[^.\]]+(?=[^\]]*$)/g,jr=/^v-slot(:|$)|^#/,Ur=/[\r\n]/,$r=/[ \f\t\r\n]+/g,Kr=S(nr),qr="_empty_";function Zr(e,t,i){return{type:1,tag:e,attrsList:t,attrsMap:ta(t),rawAttrsMap:{},parent:i,children:[]}}function Gr(e,t){Lr=t.warn||ho,Tr=t.isPreTag||P,Mr=t.mustUseProp||P,Ar=t.getTagNamespace||P;var i=t.isReservedTag||P;(function(e){return!(!(e.component||e.attrsMap[":is"]||e.attrsMap["v-bind:is"])&&(e.attrsMap.is?i(e.attrsMap.is):i(e.tag)))}),Dr=uo(t.modules,"transformNode"),Ir=uo(t.modules,"preTransformNode"),Er=uo(t.modules,"postTransformNode"),Nr=t.delimiters;var n,o,s=[],r=!1!==t.preserveWhitespace,a=t.whitespace,l=!1,c=!1;function d(e){if(h(e),l||e.processed||(e=Yr(e,t)),s.length||e===n||n.if&&(e.elseif||e.else)&&Xr(n,{exp:e.elseif,block:e}),o&&!e.forbidden)if(e.elseif||e.else)r=e,a=function(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];e.pop()}}(o.children),a&&a.if&&Xr(a,{exp:r.elseif,block:r});else{if(e.slotScope){var i=e.slotTarget||'"default"';(o.scopedSlots||(o.scopedSlots={}))[i]=e}o.children.push(e),e.parent=o}var r,a;e.children=e.children.filter((function(e){return!e.slotScope})),h(e),e.pre&&(l=!1),Tr(e.tag)&&(c=!1);for(var d=0;d<Er.length;d++)Er[d](e,t)}function h(e){if(!c)for(var t=void 0;(t=e.children[e.children.length-1])&&3===t.type&&" "===t.text;)e.children.pop()}return kr(e,{warn:Lr,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,i,r,a,h){var u=o&&o.ns||Ar(e);X&&"svg"===u&&(i=function(e){for(var t=[],i=0;i<e.length;i++){var n=e[i];ia.test(n.name)||(n.name=n.name.replace(na,""),t.push(n))}return t}(i));var g,p=Zr(e,i,o);u&&(p.ns=u),"style"!==(g=p).tag&&("script"!==g.tag||g.attrsMap.type&&"text/javascript"!==g.attrsMap.type)||ae()||(p.forbidden=!0);for(var f=0;f<Ir.length;f++)p=Ir[f](p,t)||p;l||(!function(e){null!=wo(e,"v-pre")&&(e.pre=!0)}(p),p.pre&&(l=!0)),Tr(p.tag)&&(c=!0),l?function(e){var t=e.attrsList,i=t.length;if(i)for(var n=e.attrs=new Array(i),o=0;o<i;o++)n[o]={name:t[o].name,value:JSON.stringify(t[o].value)},null!=t[o].start&&(n[o].start=t[o].start,n[o].end=t[o].end);else e.pre||(e.plain=!0)}(p):p.processed||(Qr(p),function(e){var t=wo(e,"v-if");if(t)e.if=t,Xr(e,{exp:t,block:e});else{null!=wo(e,"v-else")&&(e.else=!0);var i=wo(e,"v-else-if");i&&(e.elseif=i)}}(p),function(e){var t=wo(e,"v-once");null!=t&&(e.once=!0)}(p)),n||(n=p),r?d(p):(o=p,s.push(p))},end:function(e,t,i){var n=s[s.length-1];s.length-=1,o=s[s.length-1],d(n)},chars:function(e,t,i){if(o&&(!X||"textarea"!==o.tag||o.attrsMap.placeholder!==e)){var n,s=o.children;if(e=c||e.trim()?"script"===(n=o).tag||"style"===n.tag?e:Kr(e):s.length?a?"condense"===a&&Ur.test(e)?"":" ":r?" ":"":""){c||"condense"!==a||(e=e.replace($r," "));var d=void 0,h=void 0;!l&&" "!==e&&(d=function(e,t){var i=t?Js(t):Qs;if(i.test(e)){for(var n,o,s,r=[],a=[],l=i.lastIndex=0;n=i.exec(e);){(o=n.index)>l&&(a.push(s=e.slice(l,o)),r.push(JSON.stringify(s)));var c=lo(n[1].trim());r.push("_s(".concat(c,")")),a.push({"@binding":c}),l=o+n[0].length}return l<e.length&&(a.push(s=e.slice(l)),r.push(JSON.stringify(s))),{expression:r.join("+"),tokens:a}}}(e,Nr))?h={type:2,expression:d.expression,tokens:d.tokens,text:e}:" "===e&&s.length&&" "===s[s.length-1].text||(h={type:3,text:e}),h&&s.push(h)}}},comment:function(e,t,i){if(o){var n={type:3,text:e,isComment:!0};0,o.children.push(n)}}}),n}function Yr(e,t){var i;!function(e){var t=bo(e,"key");if(t){e.key=t}}(e),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var t=bo(e,"ref");t&&(e.ref=t,e.refInFor=function(e){var t=e;for(;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(e))}(e),function(e){var t;"template"===e.tag?(t=wo(e,"scope"),e.slotScope=t||wo(e,"slot-scope")):(t=wo(e,"slot-scope"))&&(e.slotScope=t);var i=bo(e,"slot");i&&(e.slotTarget='""'===i?'"default"':i,e.slotTargetDynamic=!(!e.attrsMap[":slot"]&&!e.attrsMap["v-bind:slot"]),"template"===e.tag||e.slotScope||po(e,"slot",i,function(e,t){return e.rawAttrsMap[":"+t]||e.rawAttrsMap["v-bind:"+t]||e.rawAttrsMap[t]}(e,"slot")));if("template"===e.tag){if(r=yo(e,jr)){0;var n=Jr(r),o=n.name,s=n.dynamic;e.slotTarget=o,e.slotTargetDynamic=s,e.slotScope=r.value||qr}}else{var r;if(r=yo(e,jr)){0;var a=e.scopedSlots||(e.scopedSlots={}),l=Jr(r),c=l.name,d=(s=l.dynamic,a[c]=Zr("template",[],e));d.slotTarget=c,d.slotTargetDynamic=s,d.children=e.children.filter((function(e){if(!e.slotScope)return e.parent=d,!0})),d.slotScope=r.value||qr,e.children=[],e.plain=!1}}}(e),"slot"===(i=e).tag&&(i.slotName=bo(i,"name")),function(e){var t;(t=bo(e,"is"))&&(e.component=t);null!=wo(e,"inline-template")&&(e.inlineTemplate=!0)}(e);for(var n=0;n<Dr.length;n++)e=Dr[n](e,t)||e;return function(e){var t,i,n,o,s,r,a,l,c=e.attrsList;for(t=0,i=c.length;t<i;t++){if(n=o=c[t].name,s=c[t].value,Pr.test(n))if(e.hasBindings=!0,(r=ea(n.replace(Pr,"")))&&(n=n.replace(zr,"")),Hr.test(n))n=n.replace(Hr,""),s=lo(s),(l=Vr.test(n))&&(n=n.slice(1,-1)),r&&(r.prop&&!l&&"innerHtml"===(n=L(n))&&(n="innerHTML"),r.camel&&!l&&(n=L(n)),r.sync&&(a=So(s,"$event"),l?_o(e,'"update:"+('.concat(n,")"),a,null,!1,0,c[t],!0):(_o(e,"update:".concat(L(n)),a,null,!1,0,c[t]),I(n)!==L(n)&&_o(e,"update:".concat(I(n)),a,null,!1,0,c[t])))),r&&r.prop||!e.component&&Mr(e.tag,e.attrsMap.type,n)?go(e,n,s,c[t],l):po(e,n,s,c[t],l);else if(Or.test(n))n=n.replace(Or,""),(l=Vr.test(n))&&(n=n.slice(1,-1)),_o(e,n,s,r,!1,0,c[t],l);else{var d=(n=n.replace(Pr,"")).match(Wr),h=d&&d[1];l=!1,h&&(n=n.slice(0,-(h.length+1)),Vr.test(h)&&(h=h.slice(1,-1),l=!0)),mo(e,n,o,s,h,l,r,c[t])}else po(e,n,JSON.stringify(s),c[t]),!e.component&&"muted"===n&&Mr(e.tag,e.attrsMap.type,n)&&go(e,n,"true",c[t])}}(e),e}function Qr(e){var t;if(t=wo(e,"v-for")){var i=function(e){var t=e.match(Rr);if(!t)return;var i={};i.for=t[2].trim();var n=t[1].trim().replace(Br,""),o=n.match(Fr);o?(i.alias=n.replace(Fr,"").trim(),i.iterator1=o[1].trim(),o[2]&&(i.iterator2=o[2].trim())):i.alias=n;return i}(t);i&&M(e,i)}}function Xr(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function Jr(e){var t=e.name.replace(jr,"");return t||"#"!==e.name[0]&&(t="default"),Vr.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'"'.concat(t,'"'),dynamic:!1}}function ea(e){var t=e.match(zr);if(t){var i={};return t.forEach((function(e){i[e.slice(1)]=!0})),i}}function ta(e){for(var t={},i=0,n=e.length;i<n;i++)t[e[i].name]=e[i].value;return t}var ia=/^xmlns:NS\d+/,na=/^NS\d+:/;function oa(e){return Zr(e.tag,e.attrsList.slice(),e.parent)}var sa=[er,ir,{preTransformNode:function(e,t){if("input"===e.tag){var i=e.attrsMap;if(!i["v-model"])return;var n=void 0;if((i[":type"]||i["v-bind:type"])&&(n=bo(e,"type")),i.type||n||!i["v-bind"]||(n="(".concat(i["v-bind"],").type")),n){var o=wo(e,"v-if",!0),s=o?"&&(".concat(o,")"):"",r=null!=wo(e,"v-else",!0),a=wo(e,"v-else-if",!0),l=oa(e);Qr(l),fo(l,"type","checkbox"),Yr(l,t),l.processed=!0,l.if="(".concat(n,")==='checkbox'")+s,Xr(l,{exp:l.if,block:l});var c=oa(e);wo(c,"v-for",!0),fo(c,"type","radio"),Yr(c,t),Xr(l,{exp:"(".concat(n,")==='radio'")+s,block:c});var d=oa(e);return wo(d,"v-for",!0),fo(d,":type",n),Yr(d,t),Xr(l,{exp:o,block:d}),r?l.else=!0:a&&(l.elseif=a),l}}}}];var ra,aa,la={model:function(e,t,i){i;var n=t.value,o=t.modifiers,s=e.tag,r=e.attrsMap.type;if(e.component)return xo(e,n,o),!1;if("select"===s)!function(e,t,i){var n=i&&i.number,o='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;'+"return ".concat(n?"_n(val)":"val","})"),s="$event.target.multiple ? $$selectedVal : $$selectedVal[0]",r="var $$selectedVal = ".concat(o,";");r="".concat(r," ").concat(So(t,s)),_o(e,"change",r,null,!0)}(e,n,o);else if("input"===s&&"checkbox"===r)!function(e,t,i){var n=i&&i.number,o=bo(e,"value")||"null",s=bo(e,"true-value")||"true",r=bo(e,"false-value")||"false";go(e,"checked","Array.isArray(".concat(t,")")+"?_i(".concat(t,",").concat(o,")>-1")+("true"===s?":(".concat(t,")"):":_q(".concat(t,",").concat(s,")"))),_o(e,"change","var $$a=".concat(t,",")+"$$el=$event.target,"+"$$c=$$el.checked?(".concat(s,"):(").concat(r,");")+"if(Array.isArray($$a)){"+"var $$v=".concat(n?"_n("+o+")":o,",")+"$$i=_i($$a,$$v);"+"if($$el.checked){$$i<0&&(".concat(So(t,"$$a.concat([$$v])"),")}")+"else{$$i>-1&&(".concat(So(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))"),")}")+"}else{".concat(So(t,"$$c"),"}"),null,!0)}(e,n,o);else if("input"===s&&"radio"===r)!function(e,t,i){var n=i&&i.number,o=bo(e,"value")||"null";o=n?"_n(".concat(o,")"):o,go(e,"checked","_q(".concat(t,",").concat(o,")")),_o(e,"change",So(t,o),null,!0)}(e,n,o);else if("input"===s||"textarea"===s)!function(e,t,i){var n=e.attrsMap.type;0;var o=i||{},s=o.lazy,r=o.number,a=o.trim,l=!s&&"range"!==n,c=s?"change":"range"===n?To:"input",d="$event.target.value";a&&(d="$event.target.value.trim()");r&&(d="_n(".concat(d,")"));var h=So(t,d);l&&(h="if($event.target.composing)return;".concat(h));go(e,"value","(".concat(t,")")),_o(e,c,h,null,!0),(a||r)&&_o(e,"blur","$forceUpdate()")}(e,n,o);else{if(!U.isReservedTag(s))return xo(e,n,o),!1}return!0},text:function(e,t){t.value&&go(e,"textContent","_s(".concat(t.value,")"),t)},html:function(e,t){t.value&&go(e,"innerHTML","_s(".concat(t.value,")"),t)}},ca={expectHTML:!0,modules:sa,directives:la,isPreTag:function(e){return"pre"===e},isUnaryTag:or,mustUseProp:gn,canBeLeftOpenTag:sr,isReservedTag:In,getTagNamespace:En,staticKeys:function(e){return e.reduce((function(e,t){return e.concat(t.staticKeys||[])}),[]).join(",")}(sa)},da=S((function(e){return _("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))}));function ha(e,t){e&&(ra=da(t.staticKeys||""),aa=t.isReservedTag||P,ua(e),ga(e,!1))}function ua(e){if(e.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||b(e.tag)||!aa(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(ra)))}(e),1===e.type){if(!aa(e.tag)&&"slot"!==e.tag&&null==e.attrsMap["inline-template"])return;for(var t=0,i=e.children.length;t<i;t++){var n=e.children[t];ua(n),n.static||(e.static=!1)}if(e.ifConditions)for(t=1,i=e.ifConditions.length;t<i;t++){var o=e.ifConditions[t].block;ua(o),o.static||(e.static=!1)}}}function ga(e,t){if(1===e.type){if((e.static||e.once)&&(e.staticInFor=t),e.static&&e.children.length&&(1!==e.children.length||3!==e.children[0].type))return void(e.staticRoot=!0);if(e.staticRoot=!1,e.children)for(var i=0,n=e.children.length;i<n;i++)ga(e.children[i],t||!!e.for);if(e.ifConditions)for(i=1,n=e.ifConditions.length;i<n;i++)ga(e.ifConditions[i].block,t)}}var pa=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,fa=/\([^)]*?\);*$/,ma=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,va={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},_a={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},ba=function(e){return"if(".concat(e,")return null;")},wa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:ba("$event.target !== $event.currentTarget"),ctrl:ba("!$event.ctrlKey"),shift:ba("!$event.shiftKey"),alt:ba("!$event.altKey"),meta:ba("!$event.metaKey"),left:ba("'button' in $event && $event.button !== 0"),middle:ba("'button' in $event && $event.button !== 1"),right:ba("'button' in $event && $event.button !== 2")};function ya(e,t){var i=t?"nativeOn:":"on:",n="",o="";for(var s in e){var r=Ca(e[s]);e[s]&&e[s].dynamic?o+="".concat(s,",").concat(r,","):n+='"'.concat(s,'":').concat(r,",")}return n="{".concat(n.slice(0,-1),"}"),o?i+"_d(".concat(n,",[").concat(o.slice(0,-1),"])"):i+n}function Ca(e){if(!e)return"function(){}";if(Array.isArray(e))return"[".concat(e.map((function(e){return Ca(e)})).join(","),"]");var t=ma.test(e.value),i=pa.test(e.value),n=ma.test(e.value.replace(fa,""));if(e.modifiers){var o="",s="",r=[],a=function(t){if(wa[t])s+=wa[t],va[t]&&r.push(t);else if("exact"===t){var i=e.modifiers;s+=ba(["ctrl","shift","alt","meta"].filter((function(e){return!i[e]})).map((function(e){return"$event.".concat(e,"Key")})).join("||"))}else r.push(t)};for(var l in e.modifiers)a(l);r.length&&(o+=function(e){return"if(!$event.type.indexOf('key')&&"+"".concat(e.map(xa).join("&&"),")return null;")}(r)),s&&(o+=s);var c=t?"return ".concat(e.value,".apply(null, arguments)"):i?"return (".concat(e.value,").apply(null, arguments)"):n?"return ".concat(e.value):e.value;return"function($event){".concat(o).concat(c,"}")}return t||i?e.value:"function($event){".concat(n?"return ".concat(e.value):e.value,"}")}function xa(e){var t=parseInt(e,10);if(t)return"$event.keyCode!==".concat(t);var i=va[e],n=_a[e];return"_k($event.keyCode,"+"".concat(JSON.stringify(e),",")+"".concat(JSON.stringify(i),",")+"$event.key,"+"".concat(JSON.stringify(n))+")"}var Sa={on:function(e,t){e.wrapListeners=function(e){return"_g(".concat(e,",").concat(t.value,")")}},bind:function(e,t){e.wrapData=function(i){return"_b(".concat(i,",'").concat(e.tag,"',").concat(t.value,",").concat(t.modifiers&&t.modifiers.prop?"true":"false").concat(t.modifiers&&t.modifiers.sync?",true":"",")")}},cloak:O},ka=function(e){this.options=e,this.warn=e.warn||ho,this.transforms=uo(e.modules,"transformCode"),this.dataGenFns=uo(e.modules,"genData"),this.directives=M(M({},Sa),e.directives);var t=e.isReservedTag||P;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function La(e,t){var i=new ka(t),n=e?"script"===e.tag?"null":Na(e,i):'_c("div")';return{render:"with(this){return ".concat(n,"}"),staticRenderFns:i.staticRenderFns}}function Na(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Da(e,t);if(e.once&&!e.onceProcessed)return Ia(e,t);if(e.for&&!e.forProcessed)return Ma(e,t);if(e.if&&!e.ifProcessed)return Ea(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var i=e.slotName||'"default"',n=Ra(e,t),o="_t(".concat(i).concat(n?",function(){return ".concat(n,"}"):""),s=e.attrs||e.dynamicAttrs?Va((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:L(e.name),value:e.value,dynamic:e.dynamic}}))):null,r=e.attrsMap["v-bind"];!s&&!r||n||(o+=",null");s&&(o+=",".concat(s));r&&(o+="".concat(s?"":",null",",").concat(r));return o+")"}(e,t);var i=void 0;if(e.component)i=function(e,t,i){var n=t.inlineTemplate?null:Ra(t,i,!0);return"_c(".concat(e,",").concat(Aa(t,i)).concat(n?",".concat(n):"",")")}(e.component,e,t);else{var n=void 0,o=t.maybeComponent(e);(!e.plain||e.pre&&o)&&(n=Aa(e,t));var s=void 0,r=t.options.bindings;o&&r&&!1!==r.__isScriptSetup&&(s=function(e,t){var i=L(t),n=N(i),o=function(o){return e[t]===o?t:e[i]===o?i:e[n]===o?n:void 0},s=o("setup-const")||o("setup-reactive-const");if(s)return s;var r=o("setup-let")||o("setup-ref")||o("setup-maybe-ref");if(r)return r}(r,e.tag)),s||(s="'".concat(e.tag,"'"));var a=e.inlineTemplate?null:Ra(e,t,!0);i="_c(".concat(s).concat(n?",".concat(n):"").concat(a?",".concat(a):"",")")}for(var l=0;l<t.transforms.length;l++)i=t.transforms[l](e,i);return i}return Ra(e,t)||"void 0"}function Da(e,t){e.staticProcessed=!0;var i=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push("with(this){return ".concat(Na(e,t),"}")),t.pre=i,"_m(".concat(t.staticRenderFns.length-1).concat(e.staticInFor?",true":"",")")}function Ia(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Ea(e,t);if(e.staticInFor){for(var i="",n=e.parent;n;){if(n.for){i=n.key;break}n=n.parent}return i?"_o(".concat(Na(e,t),",").concat(t.onceId++,",").concat(i,")"):Na(e,t)}return Da(e,t)}function Ea(e,t,i,n){return e.ifProcessed=!0,Ta(e.ifConditions.slice(),t,i,n)}function Ta(e,t,i,n){if(!e.length)return n||"_e()";var o=e.shift();return o.exp?"(".concat(o.exp,")?").concat(s(o.block),":").concat(Ta(e,t,i,n)):"".concat(s(o.block));function s(e){return i?i(e,t):e.once?Ia(e,t):Na(e,t)}}function Ma(e,t,i,n){var o=e.for,s=e.alias,r=e.iterator1?",".concat(e.iterator1):"",a=e.iterator2?",".concat(e.iterator2):"";return e.forProcessed=!0,"".concat(n||"_l","((").concat(o,"),")+"function(".concat(s).concat(r).concat(a,"){")+"return ".concat((i||Na)(e,t))+"})"}function Aa(e,t){var i="{",n=function(e,t){var i=e.directives;if(!i)return;var n,o,s,r,a="directives:[",l=!1;for(n=0,o=i.length;n<o;n++){s=i[n],r=!0;var c=t.directives[s.name];c&&(r=!!c(e,s,t.warn)),r&&(l=!0,a+='{name:"'.concat(s.name,'",rawName:"').concat(s.rawName,'"').concat(s.value?",value:(".concat(s.value,"),expression:").concat(JSON.stringify(s.value)):"").concat(s.arg?",arg:".concat(s.isDynamicArg?s.arg:'"'.concat(s.arg,'"')):"").concat(s.modifiers?",modifiers:".concat(JSON.stringify(s.modifiers)):"","},"))}if(l)return a.slice(0,-1)+"]"}(e,t);n&&(i+=n+","),e.key&&(i+="key:".concat(e.key,",")),e.ref&&(i+="ref:".concat(e.ref,",")),e.refInFor&&(i+="refInFor:true,"),e.pre&&(i+="pre:true,"),e.component&&(i+='tag:"'.concat(e.tag,'",'));for(var o=0;o<t.dataGenFns.length;o++)i+=t.dataGenFns[o](e);if(e.attrs&&(i+="attrs:".concat(Va(e.attrs),",")),e.props&&(i+="domProps:".concat(Va(e.props),",")),e.events&&(i+="".concat(ya(e.events,!1),",")),e.nativeEvents&&(i+="".concat(ya(e.nativeEvents,!0),",")),e.slotTarget&&!e.slotScope&&(i+="slot:".concat(e.slotTarget,",")),e.scopedSlots&&(i+="".concat(function(e,t,i){var n=e.for||Object.keys(t).some((function(e){var i=t[e];return i.slotTargetDynamic||i.if||i.for||Oa(i)})),o=!!e.if;if(!n)for(var s=e.parent;s;){if(s.slotScope&&s.slotScope!==qr||s.for){n=!0;break}s.if&&(o=!0),s=s.parent}var r=Object.keys(t).map((function(e){return Pa(t[e],i)})).join(",");return"scopedSlots:_u([".concat(r,"]").concat(n?",null,true":"").concat(!n&&o?",null,false,".concat(function(e){var t=5381,i=e.length;for(;i;)t=33*t^e.charCodeAt(--i);return t>>>0}(r)):"",")")}(e,e.scopedSlots,t),",")),e.model&&(i+="model:{value:".concat(e.model.value,",callback:").concat(e.model.callback,",expression:").concat(e.model.expression,"},")),e.inlineTemplate){var s=function(e,t){var i=e.children[0];0;if(i&&1===i.type){var n=La(i,t.options);return"inlineTemplate:{render:function(){".concat(n.render,"},staticRenderFns:[").concat(n.staticRenderFns.map((function(e){return"function(){".concat(e,"}")})).join(","),"]}")}}(e,t);s&&(i+="".concat(s,","))}return i=i.replace(/,$/,"")+"}",e.dynamicAttrs&&(i="_b(".concat(i,',"').concat(e.tag,'",').concat(Va(e.dynamicAttrs),")")),e.wrapData&&(i=e.wrapData(i)),e.wrapListeners&&(i=e.wrapListeners(i)),i}function Oa(e){return 1===e.type&&("slot"===e.tag||e.children.some(Oa))}function Pa(e,t){var i=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!i)return Ea(e,t,Pa,"null");if(e.for&&!e.forProcessed)return Ma(e,t,Pa);var n=e.slotScope===qr?"":String(e.slotScope),o="function(".concat(n,"){")+"return ".concat("template"===e.tag?e.if&&i?"(".concat(e.if,")?").concat(Ra(e,t)||"undefined",":undefined"):Ra(e,t)||"undefined":Na(e,t),"}"),s=n?"":",proxy:true";return"{key:".concat(e.slotTarget||'"default"',",fn:").concat(o).concat(s,"}")}function Ra(e,t,i,n,o){var s=e.children;if(s.length){var r=s[0];if(1===s.length&&r.for&&"template"!==r.tag&&"slot"!==r.tag){var a=i?t.maybeComponent(r)?",1":",0":"";return"".concat((n||Na)(r,t)).concat(a)}var l=i?function(e,t){for(var i=0,n=0;n<e.length;n++){var o=e[n];if(1===o.type){if(Fa(o)||o.ifConditions&&o.ifConditions.some((function(e){return Fa(e.block)}))){i=2;break}(t(o)||o.ifConditions&&o.ifConditions.some((function(e){return t(e.block)})))&&(i=1)}}return i}(s,t.maybeComponent):0,c=o||Ba;return"[".concat(s.map((function(e){return c(e,t)})).join(","),"]").concat(l?",".concat(l):"")}}function Fa(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}function Ba(e,t){return 1===e.type?Na(e,t):3===e.type&&e.isComment?function(e){return"_e(".concat(JSON.stringify(e.text),")")}(e):function(e){return"_v(".concat(2===e.type?e.expression:Wa(JSON.stringify(e.text)),")")}(e)}function Va(e){for(var t="",i="",n=0;n<e.length;n++){var o=e[n],s=Wa(o.value);o.dynamic?i+="".concat(o.name,",").concat(s,","):t+='"'.concat(o.name,'":').concat(s,",")}return t="{".concat(t.slice(0,-1),"}"),i?"_d(".concat(t,",[").concat(i.slice(0,-1),"])"):t}function Wa(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)");function Ha(e,t){try{return new Function(e)}catch(i){return t.push({err:i,code:e}),O}}function za(e){var t=Object.create(null);return function(i,n,o){(n=M({},n)).warn;delete n.warn;var s=n.delimiters?String(n.delimiters)+i:i;if(t[s])return t[s];var r=e(i,n);var a={},l=[];return a.render=Ha(r.render,l),a.staticRenderFns=r.staticRenderFns.map((function(e){return Ha(e,l)})),t[s]=a}}var ja,Ua,$a=(ja=function(e,t){var i=Gr(e.trim(),t);!1!==t.optimize&&ha(i,t);var n=La(i,t);return{ast:i,render:n.render,staticRenderFns:n.staticRenderFns}},function(e){function t(t,i){var n=Object.create(e),o=[],s=[];if(i)for(var r in i.modules&&(n.modules=(e.modules||[]).concat(i.modules)),i.directives&&(n.directives=M(Object.create(e.directives||null),i.directives)),i)"modules"!==r&&"directives"!==r&&(n[r]=i[r]);n.warn=function(e,t,i){(i?s:o).push(e)};var a=ja(t.trim(),n);return a.errors=o,a.tips=s,a}return{compile:t,compileToFunctions:za(t)}}),Ka=$a(ca).compileToFunctions;function qa(e){return(Ua=Ua||document.createElement("div")).innerHTML=e?'<a href="\n"/>':'<div a="\n"/>',Ua.innerHTML.indexOf("&#10;")>0}var Za=!!Y&&qa(!1),Ga=!!Y&&qa(!0),Ya=S((function(e){var t=An(e);return t&&t.innerHTML})),Qa=tn.prototype.$mount;tn.prototype.$mount=function(e,t){if((e=e&&An(e))===document.body||e===document.documentElement)return this;var i=this.$options;if(!i.render){var n=i.template;if(n)if("string"==typeof n)"#"===n.charAt(0)&&(n=Ya(n));else{if(!n.nodeType)return this;n=n.innerHTML}else e&&(n=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(n){0;var o=Ka(n,{outputSourceRange:!1,shouldDecodeNewlines:Za,shouldDecodeNewlinesForHref:Ga,delimiters:i.delimiters,comments:i.comments},this),s=o.render,r=o.staticRenderFns;i.render=s,i.staticRenderFns=r}}return Qa.call(this,e,t)},tn.compile=Ka},63878:(e,t,i)=>{var n={"./service_darwin":44224,"./service_darwin.js":44224,"./service_linux":33130,"./service_linux.js":33130,"./service_win32":34668,"./service_win32.js":34668};function o(e){var t=s(e);return i(t)}function s(e){if(!i.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}o.keys=function(){return Object.keys(n)},o.resolve=s,e.exports=o,o.id=63878},20667:(e,t,i)=>{var n={"./alert.vue":31091,"./code.vue":97889,"./diff.vue":7905,"./dns.vue":29250,"./input.vue":7249,"./menu.vue":37142,"./script.vue":95539,"./select.vue":1833,"./toast.vue":38263};function o(e){var t=s(e);return i(t)}function s(e){if(!i.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}o.keys=function(){return Object.keys(n)},o.resolve=s,e.exports=o,o.id=20667},54265:(e,t,i)=>{var n={"./app.js":23726,"./index.js":11068};function o(e){var t=s(e);return i(t)}function s(e){if(!i.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}o.keys=function(){return Object.keys(n)},o.resolve=s,e.exports=o,o.id=54265},94748:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII="},4768:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAL0lEQVQoz2NgCD3x//9/BhBYBWdhgFVAiVW4JBFKGIa4AqD0//9D3pt4I4tAdAMAHTQ/j5Zom30AAAAASUVORK5CYII="},35555:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAz0lEQVRIx2NgYGBY/R8I/vx5eelX3n82IJ9FxGf6tksvf/8FiTMQAcAGQMDvSwu09abffY8QYSAScNk45G198eX//yev73/4///701eh//kZSARckrNBRvz//+8+6ZohwCzjGNjdgQxkAg7B9WADeBjIBqtJCbhRA0YNoIkBSNmaPEMoNmA0FkYNoFKhapJ6FGyAH3nauaSmPfwI0v/3OukVi0CIZ+F25KrtYcx/CTIy0e+rC7R1Z4KMICVTQQ14feVXIbR695u14+Ir4gwAAD49E54wc1kWAAAAAElFTkSuQmCC"},6161:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjNDI0MjQyIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=="},51096:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjQzVDNUM1Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=="},73251:(e,t,i)=>{"use strict";e.exports=i.p+"fonts/codicon..ttf"},49944:(e,t,i)=>{"use strict";e.exports=i.p+"fonts/MaterialIcons-Regular..woff2"},9665:(e,t,i)=>{"use strict";e.exports=i.p+"fonts/TwemojiMozilla..ttf"},72378:e=>{"use strict";e.exports=require("@vscode/sudo-prompt")},54387:e=>{"use strict";e.exports=require("axios")},86173:e=>{"use strict";e.exports=require("electron-log")},97495:e=>{"use strict";e.exports=require("get-port")},71893:e=>{"use strict";e.exports=require("got")},15208:e=>{"use strict";e.exports=require("koa")},24793:e=>{"use strict";e.exports=require("lodash")},10605:e=>{"use strict";e.exports=require("moment")},36267:e=>{"use strict";e.exports=require("mousetrap")},75110:e=>{"use strict";e.exports=require("require-from-string")},48567:e=>{"use strict";e.exports=require("unix-cron")},251:e=>{"use strict";e.exports=require("uuid")},26400:e=>{"use strict";e.exports=require("vue-electron")},51109:e=>{"use strict";e.exports=require("vuedraggable")},23321:e=>{"use strict";e.exports=require("vuex")},56796:e=>{"use strict";e.exports=require("ws")},11442:e=>{"use strict";e.exports=require("yaml")},32081:e=>{"use strict";e.exports=require("child_process")},96206:e=>{"use strict";e.exports=require("console")},72298:e=>{"use strict";e.exports=require("electron")},57147:e=>{"use strict";e.exports=require("fs")},41808:e=>{"use strict";e.exports=require("net")},22037:e=>{"use strict";e.exports=require("os")},71017:e=>{"use strict";e.exports=require("path")}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={id:e,loaded:!1,exports:{}};return i[e](s,s.exports,o),s.loaded=!0,s.exports}o.m=i,o.amdO={},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var i in t)o.o(t,i)&&!o.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((t,i)=>(o.f[i](e,t),t)),[])),o.u=e=>e+".js",o.miniCssF=e=>{},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="clash_win:",o.l=(i,n,s,r)=>{if(e[i])e[i].push(n);else{var a,l;if(void 0!==s)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var h=c[d];if(h.getAttribute("src")==i||h.getAttribute("data-webpack")==t+s){a=h;break}}a||(l=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,o.nc&&a.setAttribute("nonce",o.nc),a.setAttribute("data-webpack",t+s),a.src=i),e[i]=[n];var u=(t,n)=>{a.onerror=a.onload=null,clearTimeout(g);var o=e[i];if(delete e[i],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((e=>e(n))),t)return t(n)},g=setTimeout(u.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=u.bind(null,a.onerror),a.onload=u.bind(null,a.onload),l&&document.head.appendChild(a)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var t=o.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var i=t.getElementsByTagName("script");if(i.length)for(var n=i.length-1;n>-1&&!e;)e=i[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),(()=>{o.b=document.baseURI||self.location.href;var e={401:0};o.f.j=(t,i)=>{var n=o.o(e,t)?e[t]:void 0;if(0!==n)if(n)i.push(n[2]);else{var s=new Promise(((i,o)=>n=e[t]=[i,o]));i.push(n[2]=s);var r=o.p+o.u(t),a=new Error;o.l(r,(i=>{if(o.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var s=i&&("load"===i.type?"missing":i.type),r=i&&i.target&&i.target.src;a.message="æ­£åœ¨åŠ è½½ chunk "+t+" failed.\n("+s+": "+r+")",a.name="ChunkLoadError",a.type=s,a.request=r,n[1](a)}}),"chunk-"+t,t)}};var t=(t,i)=>{var n,s,[r,a,l]=i,c=0;if(r.some((t=>0!==e[t]))){for(n in a)o.o(a,n)&&(o.m[n]=a[n]);if(l)l(o)}for(t&&t(i);c<r.length;c++)s=r[c],o.o(e,s)&&e[s]&&e[s][0](),e[s]=0},i=global.webpackChunkclash_win=global.webpackChunkclash_win||[];i.forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i))})();var s={};(()=>{"use strict";o.r(s);var e={};o.r(e),o.d(e,{install:()=>y});var t={};o.r(t),o.d(t,{install:()=>A});var i={};o.r(i),o.d(i,{install:()=>U});var n=o(48926),r=o.n(n),a=o(59713),l=o.n(a),c=o(87757),d=o.n(c),h=o(70538),u=(o(30547),o(72298)),g=o(83566);const p={name:"Clash",watch:{theme:{immediate:!0,handler:function(e){document.body.className="theme-".concat(e)}}}};o(21241);const f=(0,o(51900).Z)(p,(function(){var e=this._self._c;return e("div",{attrs:{id:"app"}},[e("router-view")],1)}),[],!1,null,null,null).exports,m=require("vue-router");var v=o.n(m);h.ZP.use(v());const _=new(v())({routes:[{path:"/home",name:"landing-page",component:o(42016).Z,children:[{path:"general",component:o(72797).Z,meta:{keepAlive:!0}},{path:"proxy",component:o(72094).Z,meta:{keepAlive:!0}},{path:"provider",component:o(38585).Z,meta:{keepAlive:!0}},{path:"log",component:o(11969).Z},{path:"server",component:o(74775).Z,meta:{keepAlive:!0}},{path:"connection",component:o(14196).Z,meta:{keepAlive:!0}},{path:"router",component:o(28779).Z,meta:{keepAlive:!0}},{path:"setting",component:o(99876).Z,meta:{keepAlive:!0}},{path:"about",component:o(58323).Z,meta:{keepAlive:!0}}]},{path:"*",redirect:"/home/general"}],saveScrollPosition:!0});var b=o(59273),w=/(?:\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[#*0-9]\ufe0f?\u20e3|(?:[Â©Â®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5\udeeb\udeec\udef4-\udefa\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd71\udd73-\udd76\udd7a-\udda2\udda5-\uddaa\uddae-\uddb4\uddb7\uddba\uddbc-\uddca\uddd0\uddde-\uddff\ude70-\ude73\ude78-\ude7a\ude80-\ude82\ude90-\ude95]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g;function y(e,t){t.store;e.prototype.$removeEmoji=function(e){return e.replace(w,"")}}var C=o(33182),x=(o(54387),o(11442)),S=o.n(x),k=o(86173),L=o.n(k),N=o(8359),D=o(19102),I=(o(8369),o(24793)),E=o(32081),T=o(71017),M="127.0.0.1";function A(e,t){var i,n=t.store;e.prototype.$setSystemProxy=(i=r()(d().mark((function e(t){var i,o,s,r,a,l,c,h,u,p,f,m,v,_,b,w,y,S,k,I;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(L().info("set system proxy to",t),i=n.state.app.settings,o=i.bypassText,s=i.staticSystemProxyHost,r=void 0===s?M:s,a=[],o)try{l=x.parse(o),c=l.bypass,a=(void 0===c?[]:c)||[]}catch(e){}else a=N.Z;if(e.prev=5,0!==(h=n.getters.mixedPort)){e.next=9;break}return e.abrupt("return",!1);case 9:if(u=!1,!(0,g.V5)()){e.next=24;break}return p=t?["-http","".concat(r||M,":").concat(h),"-https","".concat(r||M,":").concat(h),"-socks","".concat(r||M,":").concat(h)]:["-stop"],e.next=14,(0,D.p)(p);case 14:if(!e.sent.success){e.next=22;break}return e.next=19,(0,D.p)(["-bypass",a.join(",")]);case 19:e.sent.success&&(u=!0,n.commit("CHANGE_STATUS",{status:t?C.r.SYSTEM_PROXY:C.r.DEFAULT}));case 22:e.next=46;break;case 24:if(!(0,g.Kr)()){e.next=46;break}if(f=n.state.app.settings,m=f.systemProxyTypeIndex,v=void 0===m?0:m,_=f.specifyHttpProxyProtocol,b=void 0!==_&&_,w=T.join(n.getters.filesPath,"win","common"),y=["set","1"],!t){e.next=44;break}if(S=r||M,0!==v){e.next=36;break}k="".concat(S,":").concat(h),(y=["global",b?"http=http://".concat(k,";https=http://").concat(k):k]).push(a.join(";")),e.next=44;break;case 36:e.prev=36,I="http://".concat(S,":").concat(n.state.app.innerServerPort,"/pac?t=").concat((new Date).getTime()),y=["pac",I],e.next=44;break;case 41:return e.prev=41,e.t0=e.catch(36),e.abrupt("return",!1);case 44:0===E.spawnSync("sysproxy.exe",y,{cwd:w,windowsHide:!0}).status&&(u=!0,n.commit("CHANGE_STATUS",{status:t?C.r.SYSTEM_PROXY:C.r.DEFAULT}));case 46:return e.abrupt("return",u);case 49:e.prev=49,e.t1=e.catch(5),console.error(e.t1.stack);case 52:return e.abrupt("return",!1);case 53:case"end":return e.stop()}}),e,null,[[5,49],[36,41]])}))),function(e){return i.apply(this,arguments)}),e.prototype.$getSystemProxyStatus=function(){var e=!1;if((0,g.V5)()){var t=n.state.app.clashPath,i=E.spawnSync("./sysproxy",["-show"],{cwd:t,windowsHide:!0}),o=i.error,s=i.output;if(o)return!1;if(s){var r=s.toString();/socks=/.test(r)&&(e=!0)}return n.commit("CHANGE_STATUS",{status:e?C.r.SYSTEM_PROXY:C.r.DEFAULT}),e}var a=T.join(n.getters.filesPath,"win","common"),l=E.spawnSync("sysproxy.exe",["query"],{cwd:a,windowsHide:!0});return l.error&&(e=!1),0===l.status&&l.stdout&&(e=51===l.stdout[0]||53===l.stdout[0]),n.commit("CHANGE_STATUS",{status:e?C.r.SYSTEM_PROXY:C.r.DEFAULT}),e},e.prototype.$getTrayIcon=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"rule",i=n.state.app,o=i.clashPath,s=void 0===o?"":o,r=i.settings,a=void 0===r?{}:r,l=a.iconSystemProxy,c=a.iconDefault,d=a.useModeIcons;return void 0!==d&&d?T.join(__static,"tray","win","".concat(e?"on":"off","_").concat(t,".png")):e?l?T.isAbsolute(l)?l:T.join(s,l):T.join(__static,"tray","win","tray_reverse.ico"):c?T.isAbsolute(c)?c:T.join(s,c):T.join(__static,"tray","win","tray_normal.ico")}}var O=o(319),P=o.n(O),R=o(63038),F=o.n(R),B=o(71017),V=o.n(B),W=o(57147),H=o.n(W);function z(e){return j.apply(this,arguments)}function j(){return(j=r()(d().mark((function e(t){var i,n,o,s,r,a,l,c;return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(0,g.IJ)()){e.next=14;break}return e.next=3,Promise.all([["getVersion"],["getPath","exe"],["getPath","home"]].map((function(e){return u.ipcRenderer.invoke.apply(u.ipcRenderer,["app"].concat(P()(e)))})));case 3:i=e.sent,n=F()(i,3),o=n[0],s=n[1],r=n[2],a=(0,B.join)(r,".config","autostart"),l=(0,B.join)(a,"cfw.desktop"),c="[Desktop Entry]\n    Type=Application\n    Version=".concat(o,'\n    Name=Clash for Windows\n    Comment=Clash for Windows startup script\n    Exec="').concat(s,'"\n    StartupNotify=false\n    Terminal=false'),t?((0,W.existsSync)(a)||(0,W.mkdirSync)(a),(0,W.writeFileSync)(l,c)):(0,W.existsSync)(l)&&(0,W.unlinkSync)(l),e.next=16;break;case 14:return e.next=16,u.ipcRenderer.invoke("app","setLoginItemSettings",{openAtLogin:t});case 16:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function U(e){e.prototype.$setAutoLaunch=z}o(58583);function $(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function K(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?$(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):$(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var q=o(20667);const Z={install:function(e,t){var i=t.store;q.keys().forEach((function(t){var n=t.replace(/(\.\/|\.vue)/g,""),o=new(e.extend(K(K({},q(t).default),{},{store:i}))),s=o.$mount().$el;document.body.appendChild(s),e.prototype["$".concat(n)]=o.show}))}};var G=o(23321);function Y(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function Q(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?Y(Object(i),!0).forEach((function(t){l()(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):Y(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}h.ZP.use(Z,{store:b.Z}),process.env.IS_WEB||h.ZP.use(o(26400)),h.ZP.use(e,{store:b.Z}),h.ZP.use(t,{store:b.Z}),h.ZP.use(i),h.ZP.config.productionTip=!1,h.ZP.mixin({data:function(){return{mixinScrollTop:0}},computed:Q(Q(Q(Q({},(0,G.mapState)({clashPath:function(e){return e.app.clashPath}})),{},{isWindows:function(){return(0,g.Kr)()},isMacOS:function(){return(0,g.V5)()},isLinux:function(){return(0,g.IJ)()}},(0,G.mapState)({sts:function(e){return e.app.settings}})),(0,G.mapGetters)({theme:"theme"})),{},{settings:function(){var e=this;if(this.sts)return new Proxy(I.cloneDeep(this.sts),{get:function(e,t){return e[t]},set:function(t,i,n){return t[i]=n,e.saveSettingsObject({obj:I.cloneDeep(t)}),!0}})}}),methods:Q(Q({},(0,G.mapMutations)({saveSettingsObject:"SAVE_SETTINGS_OBJECT",setSettingsObject:"SET_SETTINGS_OBJECT"})),{},{reloadElectron:function(){return r()(d().mark((function e(){return d().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,u.ipcRenderer.invoke("app","relaunch");case 2:return e.next=4,u.ipcRenderer.invoke("app","exit",0);case 4:case"end":return e.stop()}}),e)})))()},loadSettings:function(){var e={};try{var t=H().readFileSync(V().join(this.clashPath,"cfw-settings.yaml")).toString();e=S().parse(t)}catch(e){}var i=e,n=i.showNewVersionIcon,o=void 0===n||n,s=i.hideAfterStartup,r=void 0!==s&&s,a=i.randomControllerPort,l=void 0===a||a,c=i.runTimeFormat,d=void 0===c?"hh : mm : ss":c,h=i.trayOrders,u=void 0===h?[["icon"],["status","traffic","text"]]:h,g=i.hideTrayIcon,p=void 0!==g&&g,f=i.connShowProcess,m=void 0===f||f,v=i.showTrayProxyDelayIndicator,_=void 0===v||v,b=i.checkForUpdates,w=void 0===b||b;this.setSettingsObject({obj:Q(Q({},e),{},{showNewVersionIcon:o,hideAfterStartup:r,randomControllerPort:l,runTimeFormat:d,trayOrders:u,hideTrayIcon:p,connShowProcess:m,showTrayProxyDelayIndicator:_,checkForUpdates:w})})}}),beforeRouteEnter:function(e,t,i){i((function(e){var t=e.$refs["mixin-scroll-content"];if(t){var i="$el"in t?t.$el:t;i.style.scrollBehavior="auto",setTimeout((function(){i.style.scrollBehavior="smooth"}),1),e.$nextTick((function(){i.scrollTop=e.mixinScrollTop}))}}))},beforeRouteLeave:function(e,t,i){var n=this.$refs["mixin-scroll-content"];n&&(this.mixinScrollTop="$el"in n?n.$el.scrollTop:n.scrollTop),i()}}),new h.ZP({components:{App:f},router:_,store:b.Z,template:"<App/>"}).$mount("#app")})(),module.exports=s})();/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */

/*! @license DOMPurify 2.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.1/LICENSE */
         h  6          ¨  ž  00     ¨%  F  (                                    ÿÿÿÿÿÿlÿÿÿÇÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÇÿÿÿlÿÿÿÿÿÿlÿÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿÿÿlÿÿÿÅÿÿÿÿÿÿÿÿýüüüöõôúðîìøíêèøìèæ÷ìèæ÷ìéç÷îëéøòïîøùøøûÿÿÿÿÿÿÿÿÿÿÿÅÿÿÿÊÿÿÿÿ×ÏÊõ•tòw\LõfI6øcE2øaC/øaB/øbC0ødF3øfH5÷£‘†ôÿÿÿþÿÿÿÿÿÿÿÊÿÿÿÊù÷öþ•qóËÀºú|`NùO)ÿR,ÿR-ÿR-ÿR,ÿR,ÿN(ÿ—røÿÿÿþÿÿÿÿÿÿÿÊÿÿÿÊúùùÿ§“…ôÞÖÑô—~n÷W/ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿW/ÿ®›ŽøÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÊÿÿÿÿìçäýâÛ×ùª”…÷^3ÿa7ÿa7ÿa6ÿa7ÿa7ÿ`6þÃ´©øÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿ¿¬Ÿ÷f9þf9ÿi<ÿnC$ÿh<ÿf9ÿk@!ý×ÌÄùÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿÒÄ¹øpB ý…]@ÿwJ)ÿwJ)ÿuH&ÿ…]@ÿzP1üèáÛúÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿâØÑù}O,ü¤ƒjÿƒV4ÿtAÿ€R0ÿ¥ƒjÿŽfHúôðíüÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿðêæúŠ\9úzEÿzDÿzDÿzDÿyCÿŸz^ùüûúýÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿù÷õü›qOùŽ]7ýµ–~ü²’yýµ–~üŠX2ü¶—~ùÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿÿþþþ¹™øÌ´¢ûÿÿÿþÿÿÿÿÿÿÿþÂ§‘úÑ¼«ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôðìýûù÷þÿÿÿÿÿÿÿÿÿÿÿÿùöóþøõòýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÿÿÿlÿÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿÿÿlÿÿÿÿÿÿlÿÿÿÇÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÊÿÿÿÇÿÿÿlÿÿÿ                                                                (       @                                 ÿÿÿ ÿÿÿÿÿÿ5ÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿ5ÿÿÿÿÿÿ     ÿÿÿ ÿÿÿÿÿÿ_ÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿ_ÿÿÿÿÿÿ ÿÿÿ ÿÿÿ`ÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿ`ÿÿÿ ÿÿÿ4ÿÿÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÿÿÿ4ÿÿÿ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿüÿÿÿùüûûõø÷öóõóòñòðïððîìñïìêíîëéïîëéïîëéîïìêíðíìðòïîñôòñð÷õôòúùøóýýýöÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷öõôÍÃ½è¨˜Žè’~qêy`PínSCïhL:ðeH6òcE3ó`B0ò_B/ó_B/ó_B/ó`B/òbE2ódG5ògJ8ðlP?ðrXHîgXê×ÐËíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿòïîò‡paêQ/ùW7"ûR0ûK'ÿL(ÿL(ÿL(ÿL(ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL(ÿL(ÿL(ÿK'ÿJ&ü¿²ªñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿý­œ‘éV3úª˜ùãÞÚú–sðN)ÿQ-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿQ-ÿS/ûÍÃ¼òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿþþþû…kZð‚hVõûúúüÿÿÿþ± •ïR,þU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿT.ÿ[7 ùÜÔÏôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿü“zjò‚fSîûúúöÿÿÿÿÃµ¬ðW0üX1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿW0ÿfC,øéäáöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÔÊÃ÷lJ2öª•ˆçúøøõÔÉÂñ]6ú[3ÿ\3ÿ\3ÿ\3ÿ\3ÿ\3ÿ\3ÿ\3ÿ\3ÿ\3ÿ\3ÿ\3ÿ\3ÿY1ÿuS=öôñïøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿþþþþÒÇ¿ú—~löàØÓóãÜØóf?%ø^5ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ\2ÿ†hSóûúùúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýüþÿÿÿÿîéæõrL2öa6ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿb8ÿ_3ÿš€mòÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöôòø€\Côc7ÿf:ÿf:ÿf:ÿf:ÿf:ÿe9ÿe9ÿf:ÿf:ÿf:ÿf:ÿf:ÿb6þ°›‹òÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüûúpYòf8ÿi<ÿi<ÿi<ÿi<ÿl@ÿtJ+ÿsI*ÿk>ÿi<ÿi<ÿi<ÿi<ÿg:ýÆ¶ªòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü£‡rði:ÿm>ÿl=ÿk;ÿl=ÿqD"ÿ†_Bÿƒ\?ÿoB ÿl=ÿk;ÿk<ÿl>ÿoB!ûÙÎÆóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ· ðl<þo?ÿˆ`Bÿ¨‹vÿzM+ÿo?ÿp?ÿp?ÿp@ÿvH&ÿ¥‡qÿŽiMÿn>ÿyN.øéãÞöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿË¹¬ðqAür@ÿµš‡ÿöóñÿ’kNÿr@ÿtBÿtBÿrAÿˆ^>ÿðëçÿÃ­ÿq?ÿˆ`Böõòïøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÐÇòyH#úvCÿ…X5ÿ›uYÿ|K'ÿwDÿwDÿwDÿwDÿzH#ÿ™rUÿ‰]<ÿs@ÿ›w\ôüüûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëäÞôƒS0÷yEÿyEÿxDÿzFÿzGÿzGÿzGÿzGÿzFÿxDÿyEÿwBÿ°“}óÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöòð÷eCõ|Fÿ~I ÿ}Hÿ|Gÿ}Hÿ}Hÿ}Hÿ}Hÿ|Gÿ}Hÿ}Hÿ{FýÆ° òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüûú¡{]ò~Gÿ€J ÿL$þ‰X3üƒP)ýM%þ‚M%þ„R+ý‰Y3ûK#þ€J ÿM$ûÛÍÁôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý·˜€ñIÿIÿ©„gøêâÛúáÔËûÛÌÀüÜÍÂüãØÏûéàÙøžtS÷€IÿŒZ3øìäÞöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎ¸§ñ„Ký]5ûåÙÐùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÂ³÷†O#ýœoLöøõóùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÙÐõ]4øÊ²žøÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúøöü­‡iø³sóÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú÷õüâÔÉùûù÷þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðêäûêáÙøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†ÿÿÿ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~ÿÿÿ4ÿÿÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÿÿÿ4ÿÿÿ ÿÿÿ`ÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿ`ÿÿÿ ÿÿÿ ÿÿÿÿÿÿ_ÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿ_ÿÿÿÿÿÿ     ÿÿÿ ÿÿÿÿÿÿ5ÿÿÿÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿ†ÿÿÿÿÿÿ5ÿÿÿÿÿÿ     À  €  €                                                                                                          €  €  À  (   0   `           $                              ÿÿÿ ÿÿÿ ÿÿÿÿÿÿ<ÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿ<ÿÿÿÿÿÿ ÿÿÿ                     ÿÿÿ ÿÿÿÿÿÿ6ÿÿÿ°ÿÿÿïÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿïÿÿÿ°ÿÿÿ6ÿÿÿÿÿÿ             ÿÿÿ ÿÿÿÿÿÿZÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿÿZÿÿÿÿÿÿ     ÿÿÿ ÿÿÿ ÿÿÿZÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿZÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ7ÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿÿ7ÿÿÿ ÿÿÿÿÿÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿÿÿÿÿÿ<ÿÿÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿÿÿ<ÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿöÿÿÿñþýýîûúúìùø÷è÷õôèõóòêóñðèòïîãñîíäðîìåðîìåðîìåñîìåñïíãòðîãôòñéõóòê÷õôèùø÷èûúúíýýýíÿÿÿðÿÿÿôÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûùøøëãÞÛàÐÇÂÞ¿´¬Þ™‡{ß…oaãzbRåsYIèlQ@éhM<ëgK9îdH6îaD2í`C1î`C1ï`C1ï`C1ï`C1î`C1íaD2ìeH7ïgK:îiM<êlQAérXHéx_Påj\ãŽymá¯ —ÛøöõòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýüóÆ¼µÛv]MæW8$ôN-úK*ýI&ÿI&ÿI&ÿI&ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿJ'ÿI&ÿI&ÿI&ÿH%ÿW8$òèäáïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷²£šÛT2öI%ÿN+ýZ9%ûW6!ùN*ÿN*ÿN*ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿN+ÿN+ÿN*ÿM)ÿ`@,óíéçòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÚÖä\:&ðM)ÿ{`O÷Ä¸±÷åàÝù³£™èO+ûP,ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿP,ÿN*ÿjL9ðôòðôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¯Ÿ”áM(ýsVCõíéçøÿÿÿÿÿÿÿÿÐÇÀêT0ùR-ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿP+ÿx\Jîúùø÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû›…wèM'þ§”‡ìÿÿÿýÿÿÿÿÿÿÿÿÞ×Òì[7öT.ÿV/ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿV0ÿU/ÿQ+ÿ‰p_ìþþþúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¦“…êP)ý§“†ãÿÿÿûÿÿÿÿÿÿÿÿêåâïdA)óV/ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿW0ÿT,ÿ‡xëÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÈÁï[5úrQ;ìêåâãÿÿÿýÿÿÿÿóðïòoM7ïW0ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿY2ÿV.ý² ”ëÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûúùûŸˆyóX1üyYDéØÐÉÝÿÿÿúúùøö}^IìY0ÿ\3ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ\4ÿ]4ÿ]4ÿ]4ÿ\4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ\4ÿ]4ÿ\4ÿ[3ÿZ2ûÆ¸¯ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöôóû¯›ŽõmJ2û~_IëòîìðÿÿÿúŽr^ëZ1ÿ^5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ_5ÿ^5ÿ]4ÿa9øØÏÈîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýþìèåúçáÝúýüüþÿÿÿü¡ˆwé\2ÿ`6ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa6ÿ_5ÿjD)õèâÞñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý´ ’è_4ýb7ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿ`5ÿwS:ñóðîôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇ·¬éc7ûd9ÿe9ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe:ÿe9ÿb6ÿˆhQïûúùøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÍÅëh=øf:ÿg;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿg;ÿg:ÿg;ÿg:ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿg;ÿc7ÿœ€mìÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæßÚîpF(ôh;ÿi<ÿj<ÿj<ÿj<ÿj<ÿj<ÿj<ÿnB!ÿxO1ÿrH(ÿwN0ÿl?ÿj<ÿj<ÿj<ÿj<ÿj<ÿj<ÿi<ÿe8þ²œŒëÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòîëò{T6ñj;ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿl=ÿuJ*ÿlRÿ~gÿ‹gKÿqD#ÿl=ÿl>ÿl>ÿl>ÿl>ÿl>ÿk=ÿi<üÈ·«ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúø÷õŠeJík<ÿn?ÿo?ÿn>ÿo?ÿo?ÿn>ÿn?ÿn?ÿn?ÿrD"ÿn>ÿn?ÿn?ÿn?ÿn?ÿo@ÿn>ÿn?ÿm>ÿoC!øÛÐÈîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþù›zbêl<ÿp@ÿp@ÿ|P/ÿ¿©™ÿÀ«œÿ~R1ÿp@ÿqAÿqAÿq@ÿqAÿqAÿp@ÿwI&ÿ¶‹ÿÇ´¦ÿ…\=ÿo?ÿn?ÿyN.õëåàñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü®“éo=þrAÿq?ÿž|cÿüûûÿýýüÿ¡hÿq?ÿsBÿsBÿsBÿsBÿsBÿq@ÿiKÿöóñÿÿÿÿÿ²—ƒÿp?ÿp?ÿ‡_BñöóñõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÂ­žéq@ýtBÿtBÿ‰^>ÿÛÍÄÿÝÐÆÿ‹aAÿtBÿvCÿvCÿvCÿvCÿvCÿuBÿS1ÿÒÁµÿãÙÑÿ–oRÿsAÿq?ÿ™v\îýüüùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÆ»êvDúvDÿwEÿwDÿO+ÿ€P+ÿwDÿxEÿxEÿxEÿxEÿxEÿxEÿxEÿwDÿ~M(ÿR.ÿwDÿwDÿs@ÿ®’|ìÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÜÕí}M)öxEÿyFÿzFÿyEÿyEÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿyFÿyEÿzFÿyEÿvCýÅ¯ŸíÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòíéòˆ[8òzEÿ|Gÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ{Gÿ{I"úÙËÁîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúù÷ö—nNî{Fÿ~I ÿ~I ÿ~I ÿ}Hÿ}Hÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ}Hÿ}Hÿ}Hÿ~I ÿ~I ÿ|Gÿ„T.öêâÜñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú©‡lê|Fÿ€J ÿ€J ÿI ÿ~Hÿ|Fÿ|Fÿ}Fÿ}Gÿ}Gÿ}Gÿ|Fÿ|Fÿ|Gþ~IÿJ ÿ€J ÿ}Gÿ’eCòöóðõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¿¤é~Hþ‚K!ÿ‚K!ÿ€Iÿ_:ø¹œ…õ©†køtTø˜mLü—lKü™oNú y[ø®s÷¸šƒóˆV/ø€Jÿ‚K ÿHÿ¤~aîýýüúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÃµê‚L!û„L!ÿƒL!ÿ‚L!ýÇ¯œóÿÿÿýþþýýúù÷üøõóý÷ôòýùöôýüúùýÿÿÿþþþýû²‘xðIþƒL!ÿ€Iþº†ìÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÞÖïŠV,ö…M ÿƒKÿ¡wVööòïùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÝÕõŽ[3ø„L ÿ„M!üÒ¾¯íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöòïô˜hCñ…LÿŽZ0úßÑÆöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý½Ÿˆò…Lþ‹V,÷çÜÔðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþú®‰kí‡P#üÉ°œõÿþþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòìèøžpL÷™iDó÷óðöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÔÉõÒ½¬÷üúùýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÚÐøÓ¿¯ñþþþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿEÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿEÿÿÿ<ÿÿÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿÿÿ<ÿÿÿÿÿÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÿÿÿÿÿÿ ÿÿÿ7ÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿÿ7ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿZÿÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿZÿÿÿ ÿÿÿ     ÿÿÿ ÿÿÿÿÿÿZÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿÿZÿÿÿÿÿÿ             ÿÿÿ ÿÿÿÿÿÿ6ÿÿÿ°ÿÿÿïÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿóÿÿÿïÿÿÿ°ÿÿÿ6ÿÿÿÿÿÿ                     ÿÿÿ ÿÿÿ ÿÿÿÿÿÿ<ÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿEÿÿÿ<ÿÿÿÿÿÿ ÿÿÿ             ø      à      À      À      €                                                                                                                                                                                                                                                                                                                      €      À      À      à      ø      ‰PNG

   IHDR  	Ä  d   ÇF­   gAMA  ±üa   sRGB ®Îé   -PLTELiqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿq ¶   tRNS €À@šðeà Ð0°PiÐô×  YIDATxÚìÝÁi”QàkøÍ ƒ`%b	©Àm)áÇ iÀ…0X‚ˆ›lƒˆd32ŽæÔ`‡ï«â]îy÷ÝÎÐê.o Ó‹ÝéÝ tºÉõ ”ú‘ŸÐiÉã ”Zóe :msø< nó4 6_s1 Îr€Jï“\@¥×‰PPêY"´ºK„â€R›}„â€VK’_Pém’WÐúˆ{€Jk’ËhtžÄEs Ô*t?â>@£[s*Pk»3§µÎÌ©@¯{s*ÐkŸäÓ ´îSuà>$·0Rkòg :í“ïPik
ôZ’ã tzžü€N÷.ÅÕý©PiIr¿@o/ÍÓ TZbNj­ÉÑœ
ô~Áÿ; •VÑ@­—INPÛKs5 ¶;ûT »\ðÛ Úì’ ÑM’üà?{w¬âD…qüìºdÇ€hµØŠÒÙm'vi›!XYˆdE¶+Qv-Å',ÖNÄ'°°²wÝˆ¬ò=ƒÙÕ1ÉL²ÝÜ“ÿï!>îåÜû8åEJ âXÛ À©O’¤Ç þœ“Ä› ~×§Šï[ œJ9Åp+Qáª€;ç‰8 ~mªðÍ À›XD ·Ö%ñô€Stâ»€¿’‘	6pè‚N 8ó•ˆàV4Ô©C _6DÄpkKŠÍ8”ë WÖT20 ðäƒJº ŽÄ`)Ñ(Ô½4µ¿ êÅ7{œ`íŽô$ØGq… óì%éV¨%#…7 sìkbÜ· ¨@'&€:wuâ¸bÄÑ‰	 Z|E,I¿¥˜ æxßì’OUrÛq?»¸§˜ f­é÷Èl'×®[j¼¯…q f%¹Ô³ÝL%ÁŒUÛ™Æ"â T‰6%é™J«¦’ˆ8 •¾¨ÊáÛ ÞüÒ‰	`ÆKU;XÃ½&â Ôx¤:Ï­ÙâœˆPm;S­kÖhïDÄ¨ÔjËÖPÉ³W™æ:2 X"áôsÔðQ*U gL¸ t7Tã‡XyK%œº!Ô'ñÀ”í¡–ÑX%šBë/€²™nÆí©Æ±Xq»’ÂÍ¸(W_`µ}Ö<µ¦Yçž
 RtOÓÂúärOP%¾¤…Ý×R;`…%©jvwÜ–êôÀêjw´HÃ»ã’LüÞþ°wÇ¬QaÇŸpÇ.GB0Ø…€…Zx)ÄÂB	6‚ ")S…›ì­\‰½Ý‘Â4‚•…]ˆVV‚1áLÞÏ '+$!›Û3;ÿßGHÈ“»ygž§,JÇn_ÞX3— ªE<50‡|E bµÑ³q]•'šÆ¥8 §Ù°ñåùa™a€ÓÜ¶BÈ_UcØ àóVÍ¢ÏM¿…9 áÂý—öÌaŸa@Âi(¬›Ë áÆ²¿(l›ËŽ Äè}M®iÆÒ 'lÔ$á´l.w€…ÐcØíPh>dØ ðj+à„Ó5J NH²º$\:0—Ž D§1°Šö6½)4g}*€cZÛ•®/Ot6 8&­OÂ%ÆÎ Çü°Šöå‹ŸæòZ bóÖ*z°H¡y¾) ‘Y­QÂia€£.f5J¸tÀ°™¦ùÕ1Lv~Ó\Dâ–M	#Ïë”pê²xôŠ§Š…OµJ¸Ä6 Òjèç3j¸!¯,›ËoQ˜èYÞ¤Ff•\‘W&Å[€’ÌìPÒn­N[,Þ”dÜ(Ü²J¾È/iad,a:ŸÌûòÌº¹äüÎƒF›%L…FV¯„SÛ\þˆ!á8xþo¶f	×dØ€è	·/¤KVA~ÙÃÈfØ€Øµ¶¹ UHg¬¤á¥v	—˜Óœ€ºkuy]hÍœeqàçéÌ‘pþÅ1`B$	Gõë‘E9ù”FÒ›wÄÅ9øWÇ€	‘µw/(rîgn“ß®ù|pÿÎœvÄrøôTÿD?t9ûÜôå³¶ãàÞç¢¸_bI¸½ØOe’•u]'ŒŽåä¡u£$ÜÈ~ì»‚“,°7¨Õ‹â¨ÎB<	g_·ÕÌÊz£`4Íé±€z'J
«½@Û.Ý–Í)öOîˆ'áòEm£ÂÖ%Æâ-p\ÒG+!À©ÌÃp´÷kÞJÛëË!k¿\õF	Ç÷Âw+mwSY3§Gjœp¬`*,YiÃŽ’X¼näò¤²OïCraH¸Ø[Ó+-_TPºÀßuä­ˆ­{!×]ºM˜Ó€HJÑþ²w¯qÔQÀßtÂŽãH `A,a+*ËÂJO"Û@	98X¡Cê)zX6‡Yz„xrY!^KÑƒà!4×’“ÐKH{óRšì&n“ôû7Èn~Œ]ì”Öá÷{ßÏ)‡œ²™Ç2ï½ï»Ëð¤I,Š[šàá-âs(>ncr÷Å-!Øl V¸¡§OòcõÞ>öËO”V8l1ZÄ°øF¥<¼E¬pšOßê`r«âš6xx‹Xá†ž2ZÄ«Õ{cÍb…S|eîû“Ûm‰k¦Á¯î¤÷üJ—áI>­Þ	¬Ž„È?a•/eN¼xºzo”Àf©Sª2n"Ox’±W÷4Ùl ÎHœ˜u><[½·Åñý+é˜‘à{gKx’}õÞ³±ß›ä•”·‚G¢€§«÷ö 8& ’ÏÖRŒ÷5Ã“lÄEmØí‘_Öxf._´ˆ±(NJ`ð›;éðÁd­µ[UìÿÙb…³¬Þ;9öË¥dÒ;#ñ­œ
R ø”Ñ"™Õ{ÿ&FÙl ¿|‰ÿ¶‘}G= ðŽøjºŠ<VÅM%Ø]"Ÿ,Ox¡¤Á/ã°Åð¤¡kâ¨{áëWâŒ™hŠ™áï'Øbx’	qR9åá-ú—¿´ÎHìÉ© ¥J¥²TÂÃ“Ìê½“n‚‡·(ëvOë©_3OÆL0ªzÉ@Å` Ý^WßÆ~…´™N{:f$ì­µæ@\¹Š¥›ØQždVï]u§»@"åÛè)‘X3¶$@-ÄÌ
­ù„‡·è™sº=nWÎJ†%.ÆLˆ9ÅáIfõÞYØl ³~0%NáŒÄ &gá±¸rKë1«÷îj²Ù@Û p¤²Â-É³%èR]á° îš†Ý±.¡·i+i®
gJÜo˜“ëŒ1Åa›àá-:ëU5XáD:£wqé™Æœø#Î[á.‰Ã¢›”Ñô4>k-ÿPDÒ–¸‹}™BCc´ˆñ‹¸¬ÞÌU/J1ÔÏü‘¿ÂIs¿ vÝ;Øðùª¢Ýª8-áá-¬µ§dFÂ>Øú
¶Ô4ª{:Ã“<H’šoQÆ=/G…>×èþ4ú¥ÊFTy=Ÿ®*êX½7šl6PVCOtÍH×d¬÷E$®¢¡.<ÉèwÝŸ0xm†J^h‰–Ÿ÷9nuJÐ?¬tÏqWÜ¶	»#!e¾ÂHCÍ˜ý›JâÕŸc%…–Õ{#ê°Ù@Y‰w'×â|.+ì˜¹0¬jVï6›”UÆ	ES`ö·MåùÎÏoh­pKâºvsB*Wp¬§Â}ÒåÍ1Ëê½ß#6Ôibä@M…»Ö"¯×}øw¶ûLH™8…W3#!+œ±Œ¼½H”°ÛRæ5x53VYá,c3Vï‰û6a·+¤Í#˜Ç
§8<É—&r´»-!e¢´¨¨çVnµ%*ÄW‘×ª½3»C6Ô™‚1ÿÙÛET8Ñ!N ]«÷F»ëB^ù½þ`ö¼X}XÔÐw¸ß•¬´Î
7nºVï °«	ù \¿<{¾R™h˜{½¨‹çp÷…ï›³ÂåO2ú-ñA“‡·ü×oÌÎWªy>Õ °©ïGØe…+ Z¤àp‘øÝš¼4eðð–ß.bŒžØÜ)ìãï 5'¬×/¿ùìK¬pÅ¯ÞÇ	Ž[…MŒ
9íGŒó·ØT‹ª % ßuÅ¨×ë7fgç+•uS—ÿaïü^Û¼Î8~,¹rT;CocÜ]¤F=q 	©P÷®!‹‘¥û"Ë	áÎBF¥õ6F&ƒd7Êæôj„à]ôb Ì’ÀØ 8ÙÕnŒ³¬÷‘,	Y–Ÿ¿arì5³+=:ÏyÏÑ9¯r>·¹ˆm½ú¾Ï9Ïóý>NáôE‹à«dõ²$MŒÌ2G˜‰å K¸Ð˜‰\„6™qÎÏ¨°JênÛ9°Øz]ë…Øëào,Ÿù]*H+,»¥˜Œ"¹tq
‡D‹ Ô¬_üv©™²®Ù0€üÑ÷ÆùI@H=þO#TU+Ü?Ù«Á÷,¶Þ®÷u:äšÅý‹Þq^‚Þly–ëVEÞl)V¸¹ð$ÂßFûMÊ’™‰‘³”/½o˜ð_pá•oûhœ§ 6õVú¥(í¼‰³ŠEš#M	½ÜŒŒS8~tN÷ïq.Á>Ûf&F¾
Y{ƒs>åyÞ¼ï§o¾í]ïÒ[øÊãyÏ{ÂK@GìBì9ëÄ/mÈ+’–Á)ždËåHVs´ø°6" B…óÏóýs m<
iâï=\âÎšIõ*;…£3ò] ó{Ö7¾†oh™Ù±wœ•È
{÷D›[GÔ{ÂAUôõKÜpÃÌ‹kÖ)œÔÄ™ÍÖû?évŠF ¤‹·Ž‚4WÚZ÷–Þò²í}ï8O>Êèý,îX¨0MLã£B…;í¢El°ÞÇrº%.ÖÅ[w 0>åMøç-4ÊŸýlŠnÔ;žc7õ¹·µãp£PˆÂYc½§tç}Äô6žz{Ìû{¬j<`ËÓlKÝ1¿ÈLâïåµ@õoõxÇ-j³ÚÄpYR7$ÑXuÑ"ë½6>&Lvë™©µÜ7ùS†>ÚÆ§Ô³rÖ›èovtWÙÞà§À —±¬—T:^ƒ¦µíßÇHRu>Gq…3¿õþp‰àÃoqð\6šœí€vCYVø½=Žù{œC´Y7x[éVµæQ^ô¼ãœçÀ$IÁqœ<;LªfzHie
×Ê»h‘.4ÓÝÓ‚c~œ£cRÓÈ…–ÚfC
tÑ í¬Lyó¾:;•ÿ¾·;ÀÆ`		¤BÆMØ2âÞªˆ+œsì´ùE0Ìo½Y‡C¨ñcÁœø…V5 5,ü4ùL Ãë±bMþíõ¨‡LCÆHüô¦²=ÈUžD°Þkã=8aT¡J˜IŒoø”÷ì¼œÉVÒH¤9~gW€¼Åî­ë î&®Í²”Â½iÔŽÜdüzqO|b¤‘¸M}À¸Ñ>»….¶"ZJÕ;ü{ÆHèMQXáÜB9d.Ð–qèx‰pô0ÙŠA®éÉ¡¿Ð=õƒÅÁVš¢‡•M¤º‰„ýª2;æ56ðü døë#_ËÝ¶~Lùxô6²0È¬¼C¨Å-¤%Ü$*vø\4œ£/"ËŸð´Œ{W8·÷þ{ Ã	Ó©Y%ß¨9ñŠ¯Æwñ^à¿ OrX8«¡¾Š+n™¥ÖU‰`˜œó·½6ãœŸìèX˜hcŒ\›luÑ"Æ¬÷x«³EnÂâOöb°¡µ™ÿó-‘óÎÀr/Ô•ì&2ÌˆVO¹p†1ÇBJ H	5œ;…ÃÎªU‹QuÂ7-á¬!2ªöv§N™0çe[Âª\î`ˆy®ÌG“vo9…#E‹Ð­÷æW&•©½¼—4¦wÒjÀT‡€ˆyÿV/Ÿö­kríu|vå`,)ùfWÞ›'(œ¹­÷´ª`jºªó5{è‡q'ÕEÀ°È¿…êLâÛªý;¤²"µ×+ÂÌœ…K»h+ŠÛ””Ä“
(§ŠT”JI…å¤:	Ö’ÿ‘·º6PšÛë[Ø©žð_Å?p
·KQ8›Š[©Ëˆ‘ô¤®×zFFROY}RE¾´öû·â½ÒÖ±¿ =s&CwoÉ×.´O²Dú¥,z‡ÞdôVYÉþ´–p+Ä&Ý4!:ÝU«2Ï©µ¢h>©@áæØ€KÈZïí—¸hN@¬5ßÕ‘·¶:ªÃ`	U†óØå>w©ëUÝå€ýÔ²ð€MÚ)!<‰Dm®ÿÕ¦ŒÄ-ªŽ‘h –ï‡y+s×æR($-—åh]îú+íIšõºµ+\màîSI…{“Ù*qx¯ß8¦ù{R§¹rBrR-€µ´Hº«Ý´ªJ1ëà7‚c²kð£ëb_džÔ™™5÷<è*ƒíWeÛ}ùŠå 'ÕØK™´ ë^·ÛÅšÜ^-º{+ƒÜ°;…C¢ELYïqbt‰û­‰=T¨E"f>Ž“ê°—$Ò‘òE8Ä¡Ø½Ut
§GáN0‘%îhŽVrLƒ&6´‡a^µJ9n…ô*¶H-àV×ˆL ½ZIÑÔ†rÀ)‰]´Hg~ËB"qb'<ýa•·b€ zŸ8öÐ²ÿ*Žò0=BL1Û—)kŠäÝ[³¸Â½ò‹ïÿrÜdf¢šô>'´;õÎå–åý©M¯;—ø™—qwë`!M“J’”sžLrK5Ø½•è6%áÁù)³Kâ’ÁÖ&o÷e.·ˆ(õ<ëÁg»K¬Ò¦‚té9°˜å@Ùì^ŽU	a¾òî­F …;Í›Y…+ç™!Æˆ÷4°ê %»ó.|Aº-´2ÿÖ^oÇI ‰–j$°{«DáN¸ð$ër¥"4‰‹å€ÚlÐÇ¦¤„V¨û§í?©¦ lþ­õnR„”ZiykC­(ú©.9…Ãä¨™ÍG³XëÏf¬†ä	m–˜4eÿI5
6“'\6òH©•¡[èî­ùEÈváI¦®DHÓ_€MéfýÀ9­.´Ãþ>eùCæßútf+µ–È7t÷VE~–ÿ&lpkîØµOâø6BœkýÚ'pUÊÿZ:]õº1ÎÿÇÐÁœ%Wq>åóÿñŒ0ãÆV@o3´ù4'zÁºéŽ04C´ÞÛ/q©w/1ÐJKª°FþãàÅÞ™móÔó¼78ç
4ÝôfšîMøû¬äý[ÑžWf©—S*°{+éo)Ûo½§KU°êý«.Ò@€¼vÿ‘ò•¯÷ý‹»“w'ÕžTã ›
ìÍX~ÿÙ!dºÕÑg­I-»éî-(vP8·0Q8ëÝÂ·8KƒŠç@/Éòzò,2×Qÿ]ïÒ) ’èólKŸõ&üs.àK Ê6¡mu7 äÎÚ,J;Xv
‡
½ý³Ðñ>ÿäý¯ƒfj€s…·9ûr	ëyF!Ž|qÿi	(l÷kIô>ã=ó»6.Ì¿Ïõê-HÕÏ“î-ÜO»NáÚÜFÎö9š×„%n´Dv‹gÁóô9?¶™:F¨â”UÝHXe(G³ý[¤†ÂzÙêÈÝ½%¥pÕ¼‹±vŽæ;Â÷ž°wÝ|†YE§ü'™2þSPÑ+‰+k$\û©sòþ-\fn!Ž€H¤6+Öà/¸•ÐŒ= Yn²I\Œ>’ñL±©qÅ,(k¹®fâeXA#A_á		ñjk9M
Ðw»·ÊNá°ð$ºõÞ^‰+J†&×ÞÑ-úào©!úc@ ä5þ&H#ÊíBpÿÖpOî‚Ô6Ù,Õ½…gòý—½³ý£ºÂøµ×ÝÉf1òCyKäLJ¬Ö¨!DX‹i
”fE(`QÊjqCSBdmHb¡$7¤TBb´´!•ø…Ð&¤‘© ¢ý€ ˆP>`Ê—
Åëíf0çoè¾Ìjýzöœ;s“3?Ar9»wŸ¹÷žó<g#Ùœ´¢‘W¸\KœXÈ3üøíÕmåŠä¡ÌøÄvg@Š–«/$ð‰í
Â¿5ˆ´ý¡§IWn€ê4ùÅÊÎß¼„#¡	áIí¾»í¤I\Ü'Û¡ØPPÂr^øGûÒ’ÎZGŽ}„BBRøa,lº/.ÛòV$ÇYË|÷V9T¸h×(°Þ·¡Ä}Å?GEÛkX Ÿ£swAú: ç ¡ëH!Ž¶;˜çM&0xcGV úvo•Ø
ç&Ãð$DûÛ^âørõ-£Øð¨b\AZÑ!øÈ'~²ÖÙ‰ONNÃØ$Èð2Ñ4â	>#%šPÔUÙ?WáÂ‘ÐBD{eÍÖå)ÑÖWm¼ÊÒO³B3u#£Ú­Îÿ”…?ž¿|ðÖïª´/6Rl£I‡[{¬PëÞJ
]¡Â5xMA¸HûIÜ(6PoíLS×¤¬rübIm§<I±Ê—S6ÈPØÉ¢á‘Òëý÷¾ì*2pm½o‰‹g$š5ÒÜî‡ŠA½›Aä[…ø~Ça!O¼üq?¡¨Ö„óbž#EùÖñwÓ>Ý[ø†·©páÀT´äB½´$îI‰r_TÖ¯U¤îZðÅ¸ÊÆß”Ò>œ$†DŸTiÂÀqîœHó! ¦ Ô½•
.˜cê}¢í%®ˆÀh²õ¯û²;Ô_ÅÉFMÈ
ÜT'ä‡ò"Žù<¿¤(Nñº×RÈKOèéòíÞ‚|¨pØ2Ü"Ú‰®–ç-T¦èÅ†iBbÊd€%DÍ4Í't½‡0­® ¸ŽßIiá¿Ia§Î‰œœHs—t˜òåÞŠF±Ñ&½_¡DY½¨PN´Ý‹D€¸ãJŒbCÊçîøQOºªsâ)³„MAIî¤gƒoþÃ«"j•$@ŠòuÜËG¤¬›„o÷Ö°§páHhnHÜA¨PF¬÷m-qñŒL¤Dš*'?É°øNU¬©jõ:Št-0H€nBª"DIàßr<4Ážåœ%íáÇº·zB…[&è÷Ðr]¨ó[ Á#âR“¸QPPl@/ÁµIÂÀ‹Qd¥ÎW5½¦j	îÞZägq*›Ý)91ï+DÇ9>ôHóYÚ%ÇyîŸÃÔþ'GW¸Ï.+…ƒï Šé¿ÂA»[8 º¤¦|~ÀoÒor;´äÍ8òÅ³ˆªÑo­2ÁHÆ©OÀ?Î6¤*¢ì*®[¶IÙÝ)1šv˜¶äJl©§»·j
Ž„öˆXsô öê¦‰kãpÐž·¦MÊx‹´3ÏYÀV1Ÿ5E¹âšUãÕÂ94¼ª®â´/3²ßn^4`DšgiÏÇY¶{‹ ?K‡
·h¤ Ü4Tx©^F2Œ¦9/±ðíÉ‹KMâ^Åt=ËÎj-'¤˜Ì’®¸fXw/€û4Þôƒ’R`HÅqî2ß¯KÜ—:Üc‰Ð‘Wç©Pá)œC×Ë‡öŠÅ6]ÑÐOr$RÅÞ™Ûgü©ˆ@à“R+ÆÎ™¼À”¼C*Ê,òôÂö3Ô}é„*÷–“¦z Z|ïqÑˆÆ2%9ÔÉ2*µŠrðÇ|=‚,hy¦H-øYn{Œ‡v
þUßÊo†ã[ú‘ý3¥Þ“öíÞ‚Pá…kwËî«vp¦ßaœã8I/6¸9üŽÇÍ1©úœó×UüüÏ!ÊH™AÝU\\ZË÷“:Íñ'Ì¨Lf}Œâøú&T8Zú³Þk#ØBby‰Ó ¤Ø0ìËÖÐ£$ms˜ôQ,^Hƒ×'øÉÄþ¯âä}y:%q®.“WÏ9î-þÀ•0s1OáºÓ¨çdrùuô/¹™W«å;FþL³¢¿ªüœº_>{­; +<EJ&FÉËRùœ!lqí–ý¹RÅøAßî­p$tƒî­mm½ÇkÿÎqßtŽ[k€,½ØPò“M5[]c¶êsª•ìé…@p0Á ¾ÖEiC*QdÎ Ó£€S”vo=*…Ý™6·ÞãÃÇˆ-“Ç¼¯)2–YW Nû È3Lë²Êª8üÌÇ}^~µøwlñ­òòÖ¿n¿î­pè=²¤Ú¬‘/ë9YÚ¿Ÿ;€øRl o-Þ‡–¼­hõÉÛî0NÕµ=Õ{’RfHÅãËùõß<R?!Ä)­òéÞ
GB#Kª}‹0éÛ@9$^¹ŒÄi6Ð)çè+é~Š!ÄÝXÊÏ©Èž@¹ÀÁ‰<}HJR¥!/ç¥¢S²î­PáØK
ç¢Zïãæ	b[Ñªe$î}É©)«e;Fb	h…“D×ª<Ã´QÓjwÜó¯â
*ï˜ñørfî0#õ!…uÛáî-y<oRd~±®(#¦9 W8m­¦ImýèÍ?^l «!Të§x{“<SÄ÷y9õ‰ï†€p¶å¤­)òn3mG0øñå¬Hsèa4vŒóÝ[øÂGBÏg°]®(ã¦ù]ïejÜCY=¼»Ùiä,B=<í£n‡µŒòéù1^«Z)B19”ä%a¡ô“Ë“ Íì” Áršñ¿^Cy•âÞ
ŽHô¢àMóN]ïó2åps„u×³O6¤ã=ÉŽ‘8ÁÖ0!oÃámw:°J€Bso,örGù˜Ž-œg[-
’3¯$éÞ
ŽuVý#€›¹P/M¼V{£aXo;glIÕÔ,É@óµd!	xÛïáÑFˆÀ©sÜó_´‚²3*_ÎÿvqN“E¦{?~…S—N-Š¿JŽ)µÞÇªÂÖ'#lLs~yyVã¾ž–ü	ÆöIž•¤ëîDNãž=$z†ß
Ço†co½ÝŒIï¤œiíPá$è¶‚~i®„~»üÂ?~™ ÿa'}ØŠ-
_`ÎÇ“wÜ«¿Š‹øÊCù\°è$·Œàä¥Ü[¡ÂI1Ö _T';§ô÷j•ÅA §ñIwzŽ™›ß¾ñaUâløYa ^ÅÏÌyf.Ò´ôœÑ óJô…äääm<EæïB97Ó/æ‚8ø²Rv§aùørvôø0"V‹‰Mpo­iœq9“ WˆxíP­í¡;À]ßX|çI¢^c‹¹Iˆ«ÅcPë5ã©jDäñ[âFõ€12 wßiTT0PˆÙ ÎZ¨°ÝKé¬~qÚ"k~ñÄ/6°;F¨~ÿ·ÉòÃ§‡ßá±ý÷ˆ<¨ðwò'Ó8©pòñåqA$–i­Yk½yDeÝ[áHè&Q}BˆH–'XûeOô@ÁX Ôé3n"Ö{+é1?}«¨0d¤j?Þ&Ä>£úc'”«Þþ£_tòBK€›«U­²û8‹äŠà:.4KÊž¥¶Þ,®Êþ˜[Ë£ ~DHôcøŒ¼ÅLKç+€<#g|‰BmQ¯woMëzr¡·¢ûQ-7íAÃØP4¤¼èŸ‘êÿÜDízÐðÈŠ Ðô©æ™Ú1.b&kUŠ--‡XIÃÏÂìäÖû©±tÎÔrÝ£ƒo¦%¼Õ;îq¢>®âb»©3<Iv‰}ÓZ‹÷…óÔBm6Eþ¸XÙü¦—ð2|ZÛ‘bµ
¨Ä›ÿ™ªˆof^n}ŠŒÓcâ0Š)Y[Ã%—*cWÀ÷k«wÜã¬’¿Š{Çö;ó0v_ãŠ¡G Pvø)æi²Dy»¶ëº.šh?Õ·€«ÛP¾žm}YÁÄ·dkFõr‚yç¡5·ä”¦ŠˆEè¢dÓòýQéÊÚJH»oÜ)dw¤šÞ¡ü*N~®„Qù§ò/¼5wÛ™¬žööÒŸÜ]­ï	bR™	Ú—6x8 ÇC¯°&¿TÖÀ÷Å^s‹¦7±H]“+—1»êZ[;‹ÅmÞWunkJÜ„P_8
yÄs.[ž}ß1Òxa©‚œ€ )ßªŸ@vGª™¥—øWqŠÎ¨°ÍA÷× _e%D‰‘Và aú×?ýº*¼wöÝŒLKã>_×ékÄJ¥¾Ütý¹ÑÑâøÙ"–cnËbÌÌ‹Â€q31þ¤3 ž2Í’	4%Øj±N°²qÆÜh|lš6ppŒ»~“ÄvGêq~–Š®âÞµAš7&ë9(Ñ dxsíÖßè ¯Óã´Qå.½ÆiÃZê¤Þ¡¯1TsÆ6×wu›„¸ƒ”h»R©Têx%¼—¾GƒàIËUÛÕ’bv…§ˆ{nÊé†:; ÎF€f¯ÝÇææ½¦i&öPõÅ†I[ÃãøV€OEÝ6rshJø¢Sæ*nl«¯K‰®Zñ7j!ZÊmSvòì>KRúÂ2O­uºžpt]¿ÀÕsâjÚ\‚ÈkÁfZ×¬°Å‹ŠÜTý©4´~ ñOz]×Ö´·½-¸fÏ{KŽ6~¹#”3«Ï¸Nµ©îf€Bšœ¹“loàÊ`.Òœ•IšEíÖ–*â€esü£5›	>#õ¸7¨Í¼)P'@óÇOY„í"9dšú!©ÿy†r¦\Ä¬ÙÇÓqBD½Hånpô
b?8w]'DÄ{ÅcÞs3ÚX\WzGÓóß’µÞ’H@@Ù¾fõ#ÛQ>3Q‹3¿‚’9çÐV˜\°òGa¾i¢ˆÔ_yf°(ýHK•Å?Ù·\wÍâ½¸znÊÐuŽ1ƒŒ”/¤VÙ“AÊäüïvœú ²‚¸î­{hÕ6'+V‘­‹? ªÕš
 <dÔ¶H…ÃõÊ> pÞèi€ÛÁõÎT^¹Ùžÿ–¤áó$îŸWýGàt9¹ú©d TW¨ÁFŠýˆ‘©î¢c6€c<aŸ²O5O>Dåä¸Ñà#½Áš‰½fEÁ›ìÑ‡làÁõ×˜9z²³r~½3€5Ê½Š;òI ý{¯dãééóc É7 |KŠö£¹·ÊÉ’–ç&ÅJâšV8XŒ5w÷ôúœ_áf\pÎ¦Êº®g»3PmÔÙ~= |”pª-Äiç¬iÃIñ…Þ$Š™¢Ü°Ïˆ¶a#OÈÝõº™$¡H¥ã^ýU\üzb'£ö7¾¶ ÑŽX"{û=FqßLÄºÌrÍµ ½Ò°˜_@·.$)ÊÈÔ’¹$[D“½&Nn© ¼¹l4"	VK›¨ÅË›S|‡LÓõcÁ8Œlä1Ò­ž]RÃ„}ÏÞz9/ö\^sð»ÓpYÑÏ÷Cô„ŸlµîgùmÍxKˆÚXgõŽ{œI†àH"˜-œø1òÆÊªS¥ÐCZ—­úÐZó‚X¶¼ÛøË…cÂ«û.Éˆœ°ò¸
­óEr‚Èsô–>«I[}£~&wa&úŽ#†{yí?dãÓWnÌ2…QJ©Ë<8ZÅí3±Ðv_ ×Ó‹²Õü¹m9‡µyo?@5d}Àv6tÈ§q§‘–@ãUOôÍ"¡pò.Z)¹ûÍ¢Ôø˜lkõ*QoW=û?{çúãFy…ñ7k×®c6ÚÙ,ÐfÅNw!0r2
-«Í&P€Q.DŒœ[‰P±œ’PR¥--#*UP½„[-I…‚@@«õ²JJQû¢®×c&Nrþ†ÆãÙø6s|æÏfLüû€ 1»›øõ™÷œç9ç„²çÇà¸ÞihºŠüwàB6òëW=¯/¥‰[ºXÃ7Y-ý¢ÉpÎîó­ã–:ÓÁ™™Ä¯û„†{zéwzºrN!ûw)â¼B¸ÆFUÊð»ˆJÚSÐáRÁt³ÎW~=¦6dõ Î=<Â¥ž°­çÇ¢YÄ çX€‹ptCa‘ÐpO¿Âá7GOêo¢zŒqqÊx0mQÞ.’¬ÚñIêTÈ‚=* (âØµ6#—Rb­=õ¦Œe.ºÞaE]>}ùÞûäy4Ãü)ÅÅ¾ßõŸmx™‰bðM°:Ù2væÝ™˜úU—U#Ó ðS¤V\FµtùIëec–D£X¿n=C7J\f7™ÞÇâÐ&±any—c¹©	·ÞØíKŠŠ`ÿJq¡	Ñ#³ìÞmñ²)¬ˆTfŠä1›ôaa…Ü¯"«ž'IjÃkŸ°|ã¥µ`Ò¯Y!¿ßúýK;!Ä±=MžÈÃTô°ËöÔ˜„JŽAQÏ¥ðoÀO
ÚÎï|¨à<†¼-#ŒÉù¸ÆÛh„Všyô„¨u¸¬Š'©ç¸½\i(­F³h)›£ù…ø‹fCº	éãÞÆ¿?´™;¸jpü-ß„‹Ø[‚W.Ê4‰q‚{i	¾¹¬FË«_	°ÈZ÷t¶¬Š+©Ý×p.fl!µ¼vËWÏrŒÌ—êZ…Ð
 ãožo ê§¿§èˆÊÀ¿Bp7rÃˆ«­Ï^ˆk·÷nJ÷Ö¸ˆq“ OL‚÷"²j§%©ºÖ ¢Yoºdev
˜Õ‘D&&m²4k©ŸB½™¥\Í!éó¥ê¢c;´øéi³Êf>€]_f÷ ÿžûRƒÀ8Lè§ïášþ P|	\Ä¸è¸KâU;;IÕ%˜ÿkR°b™QÿËðw°Å ØØNo»«e¸¾ZùC÷…8ÇçbYÊ—<õhúÑCðGIJmY)‘&äðÄ§KH%¼É_ð¬î'Sé8Ÿ¬ÚùIêkjÃSB*ÆPU£$	VåÝÚÕ)j+ônw¶ßíä4Õ¹Ú§çzÕfŸ§wà£ eÌêi(ó¿Êà©[ ÞÑo¡çð/N†·ú8~õÓÓ¼÷òÛÃàÄDVzO*:.±nÐ*¯¤:ÓIðC\4[ '7de]9Fö‚û4•…›ÅŽ#>è©1ÞæÓ;«Ç €ÌÂõ½÷R
|(Ã!±â¤‡†â$ñÆ9_ýŠüy£Î“ž‘U#Ks]%ÕÙd°«ºfõ Ul»ÚCÙ«\”Ë×À†_5.Ý¡ŒUùùŽ1¿DãG>”áÐXñ’‡±0S¤<@³‹aø˜ûÇÉ¥¸;ÊêO:CVh o.ÎXCÁ²pÞs°9S{¦µä4’‰ Ëæ£Óä4¿¶Œ³¸ÔŽñã_†ø÷¹1ø{îùwl:ìCÎBáQ¢
©œ‹¼ª4æ”/ ïkð/¾¸0Žp&#‹7Š*§ ó*ð@/”ELÏoËFÁ`1îrõ}u!êJ)šÃ1=&…¡ÍËM9Äã¯îËÚ&üÇ¼_õ¡‡åð¸Ú€×]R}`v‘Ý©EÓŒ<y6–ÄàÎ”U#´+;W¹8À,(“Ð^¦X×Z(…jyÄMÝúHŸé$c±mb™ãâ¡mË¬LÚ'ãïÕÌ°sfe8‹0Ú°Š$I`Üö7Óè$arŠqÓ÷q6|µ"œJ›(2
P4JsˆÓ!8àíëñ$á‚>}èÎí4óhÑÛæ²ÑæÛDÚËSéù-Å+ËpÄ§Â¡6Ü ´ÑzzC}7DZÍ£µúIq×­Ê'£E`Ët›¸z5õR¡Ç[…+Me‘ŠïHPeË‡}ˆ¾•âJ;Á—“|*tµáêÉÈbW½¸m0Ç®~9r).Çqó	°¬“€ê0"mqû$8'C›n(™À˜‹öÔoñ¥©lÈiwRŒ¹gÕ`¶Áàã~Áü±y,ÅÝ“”.áHŽ“˜<­¥ü~ÏRíCkŠREÙMi»Ù©`ÊªôB÷˜ˆ`aTþžë“1Ã¡Æ0¨ÑL¾ú­Ö+^ ò‚^Xyêšò>“_hÖ×z†—U¼¦Þ3:EBZ‚ì˜±aÉ|I_n²q¹.Ž37DWõkÈ¨€E°…U	ìy<p4Ã‘ë¶ Ussö•/ËÈ	òàÕ)ä`v–¬J/tÿ0kýÑ­FžmZeÊèœ‚r½`òc0YcÕúâõW²ÂCM7r¶teÖÌ”¬|ï‰4“¬æ‚žJ1'¢šûØzóòd}Øõu0CÜ†Œ9ÇòM°˜}äeÎMÏH3þ˜\HvÝ×U¦™MÐØ(^ÎˆÄVM¨HÂ„8jƒ"¬â¿xÀCFýo†³¨6ÐÝAã”8Tp¸´Î"’>òLó$%¥Æw°	•rå”ÉËŠõ6U„—•ïŽenQ+—¼ž¹¿[0™³ÎœRÚ.Û–°è¬à.YÅ çM¥tnkøýÌ|É¬ÌÆ*ïsÄú£Û˜|”1d¹b³PáÏòóõ²¬™YU@ÀNèd±A!»î¢
oÐUÚ°Æ:¾bì1h…ï%.¿GÜ”å_NÜÚóò¥ Ã‚°U+ÝÐxar;/KÏP)‡¾áv€Ò½µ€¸á‚­.îbAB.HYB"tÁöø9k¦PÆ)öÞ¿bÉ:}¿à)	`µÐÄfAEQ-é4`]ÎÛÉ˜ífÅÅ×õpÇàŒË­=”Æ‰ÏÒG±†±'žƒ;Ï¦)VóÝä‡ãàâ·ÒS%è‚^â¨ë$}2Ç,ò@¥¦©Õçõ¬¼B8Ã„Xfd+û\%ÐÓ-í½ËˆÎÀ*k×®Û¶vµlCB.³jÍåµvÜvk#G^/óŠ8ÇÜfE…3G½Ÿ§yWG
¤yYS”3”w!Ò
Y·Œ ·N*7uc\9ˆŒi¥å’QšvÆ³@ ‰V×ÿgŒ‹-ì½£ô«¬ä¸Zé÷ŽŠXÉqr×¨íiça6¹îÁ½¤t‘žt|àÞ@ÒÂ(ƒ5-¢CÀƒžTŒÓ Ò»EtŒÊBøK‡xÓT$Ä±ã}˜½W‚Öäuù«„Ü<±,8¹ØÍÐNþó2 ®€âpRbÜ1Piè¶“Re‹˜<äs,@Dº1®–ƒ”óŒ»=‡¨¤#Üi*û€o,Üûƒ XêË{Âúa§ÕG`ãïÈ™ê·Ïkà'2¬<œ~ò‚°„s=
µgà…8þ
¨žvßV7K^/8Õž4¯îÆ¸€¢çPÇE°ê¥^x¸ógmoq8/ögëŸÖ!Ù"Ábò+T}DªÆÍ·*e>à”
ÅØ(Û~‡ Z_dºZºû¬ùñ”VmLþd>
ŸƒN××ôui]±—Ñ
qøÿšÂã ^QÃ&Å]U¤Wã”U»1®Ãz·Âd±á ášHo,yýiè!.~|´>¶Ü¸•-Cu:èC¼ó0×7¦NËì“Â‹™7â“à‰/ë
_wóÜ›¤;âp3"®Rœ^ãø{GˆÍ4®VŒëNˆ›#Çg¯I6_÷ÔV×Äí.üc.CÜŸ&ìäPJéf§0 ¾¢{ëtx^
xÄøT0ÖpXñhjÃµ”šIiÏaù&½RL÷SîT;_Ve¡iè‚önEÈG(Œ—~‹Hi†œ¦F]­hˆo“ Dórº&Â	‚þrã&º¼ò¤ ýÖ¿æ8¶ö õz·mz'(…ß¡ƒ+ŽQ—&Uù%ðÐÇElº`–¦1r©#E«ŠDTjšŠ÷Y<Ó²Á~=4“X gŸQ&úðã¿èÐ«@û(¹]_­ÔÜ„woáz@˜ÓÍ.ì¼îyƒŒèèEÆå1Ò5¯¤‰1‰œ¦âRÞ	†Ú–pqp\m]ºÙßöè—Bû8•d<Ò ¯›NŒv¢W4õ4¥—DT-‚ŒŽwÈW
Ý4HÛÓ#db7MlØîÅASR‹‹®h¾À‚I-Mä	»iN³Cê¹mËy<±¨S„kÏ1š_ß½Exo¢|á¦0~‚O*¦SÊ± ò8ß)0Ä1BLo%Òót/PxpaâbB™¥•†Aû„ìÊˆõáò4@ìhü`è<<ÞÁ"8_Ã”d¿}÷®Ýg¹æôÿ†¯P½°ã¦Æ!UÅó´:ìZlÀh¯ê)â9…8k¬Tùç`H+É&iVƒlñÎf¡B¢G„~Ä\€û5¼¯ñó¿cwŠà¤ˆ	yÙKÿÒüsü’ÔÍ4yÂÖ0âw(;U8X-8‘fìª\ˆV_¾ ”$Ý#ºãðaÀCÜÌ‹ý*à$UÀBj.Ýáƒè¾ÎÉô¿cwŠàd©jÃ aPv+èi÷JA¶œDçƒóÖ´»&`ï¼NÙt£$˜\Â¼Ñ‹uµÆUÊ½ì3Oi*{	qD‹œvžR0ÓüY3Ìó½ÑúÛ®$©óïioŠüd®­38?$Ygq§N„<Ñû7jÑxGp…$îK\wðˆW~&BÜFÑÄ!n]11Âˆ(ˆØ°‡"6ìõVdŠO!îî¦‹H,ŒlMˆ«_1 r¶‹ë©Æ…l†fÞ›ÍµÕìuÃ=òù|:EðâEù¹¹Ub’ë2É×ó¢Öº–ÒÃWI”Wç®‘Žn‰)Ðy|IÐäuQ„Oeç­æÅ–3sÔB¿(n•‡	M!Ìt©¡WƒFò¢èXŠ
uôq…8…ô,_H¸LÄ&µêŸÅ~êE¥“u´ºWC=O«Õ~Ö,Í=Ÿ<wN‘¦ºý“ÆzPµa»ûÃ/2¶S¼|‹X&Ék¨Û£UËd)Ý[x1î÷£‡µZgÉ˜8pé$øœ@B\^–Ê×³,Dº¾ºÚ|."„yQ1—ã7ôw¶0(ÓºÜóÝöÚŒºÅó8ûµyvŠà§"Qÿ ˜¡úEŒÅòfaë*Ád±,W(™çr•/·€Õ“›¸Ž=gMchÁ®¢ÌäFjWÜ'+æ98;%r>$—Îà<ç¬/:q• ‹PEW[åœ;ˆ‘âK5$¼
6$v
Zÿò'e[ÒŒ‚|–Uw~Zþ'1?ŸŸšNBdµiÚsú:î‘-þ:Eè¨g;F:«ôöMYƒ\Ãªæ+{Ìš¬œcL¾Î<14Þ‘›¸Q#¶\ýÊîfÌ‰5ÿ‚‚,gXÜ™AçŸÁôq„¤˜¼¢<ÒìÛþ-èDÄ†ZSúçN%Š]^ÇmEÄ9VKà‰MCH'6î.ÍøVþÇû5"G§ýpŠð?øŠõ‰¹eÈqŠumÜF÷Ê/)`|$T«¤©†Û…VêêÐÏeXçp(X!..T°©¯aeéÿ%îúnÁƒô!ËIlÔ¬Ï\fÿG/©H=9® À$‚*Ý=rHÕÌ·S·_Ï˜&Âð2°H`…8bwè4MˆrúÙ?ðdõP07ÖbÖ1ìWƒâÄšYf÷Úè¤ßÊÈiæ)@I¸ÈÊûÎÉÒ4c´!¼^@÷OEw¸jÑ^(ÿp~ÚŒúãáßø5,\T]×a
q¸e8Dõ›eÂ¥+ƒ>?:„}WC<K’œ‡µÀ„8 °	qûÄR›gÈN·¢;±á]Ï~1Kp%hi4ôŠÑeF…Ù(Àºëërâe fìÚ·V4¹`$kßr9ÅqÍ‰ªþ;Ex¬CûDQµŽ÷0É)Šä2Ž‡]¹UçX;½³ù8½RÀBœÅ+¦Š0Yÿah@w,Ž”$ùÌ_Áœ°ŠÌ™ªþïµP¦¤Ai 6ÖX£åÍýf3È ¦²–fl÷zÝ¸d,ß %SU+ÖH5’ë:3œ¶¶­æ“ˆŠy®œ"­³Ä/yû IiI +áÜ–VyÉ“{ ¨åä€Râ˜HW›ÄTºØÅßròs·À?ëÂ;…–1áþ©½ð4œáf$:UózAÐÊ±r `Íf¡fÌ&Ýu+	†ßÅaÁ,ã]=  /Y«B~½¸ædNžÏNþ¿úq¤GîÞ¢ŒÇø†Å,ƒÄ.þíÝ)™¶Wó·d™3öÐÅ†0 ¬ýb/ˆârÐÞ¬¯Y1!6¤_%ûÅ	ülHìó§™+©u§0Ø!Uz,²Ž’g4{N"­»ÙH!ŽXðˆàÉ,¢nQlY$&ñB`—âãP+ÈþSöC˜vÈëÙ<CýL¡_\Ý ž…Å‘°x¥x†¿ˆLµði€}ËÞÌ0ö	T0Ž2àíÙgë¿*ÐyŠ$½=Î¼Å¸Zó‘~òÄáuŠø*B¤B_v“ËjaNm^AÂ3•ÔígËùÕè§¨¯õXØÿ³wþ/rÔgÿÜ­Ùíf=¹ábÄ˜,Íx¦MM—Ñi£A8öjó¥,­‡¨Ã†ëÕZåØÚX¬„’Æ¢-”aM›PZñKQŽ¥M¡øƒØÛ_Êr`ÄÒ–âÍí,“¹óùêÍN²·»·Ï=ŸÏÌgwÆÎë’lÖÛÏ>ó|ÞÏûyžÇ&¾šsÔ2Ë]LäLÞÆÂBïBYßzÑÐ÷s¬^°&hr6’fÞKq‚)S’ê¡SØ´¯­ <h½ÑABÐ½nSÁKK1ZŠó5ÊUéu$š `·¢Úlä¢ý£'ÇÇ‡ ŠÕˆ¾«õjL±ùFÍkÍ	“OÓ4°+Ü½1Î‡E*<‘K"t²›VæøÂñ—*–	Ž5Ú‚tWyH¸‹<¿6@uŸ²K¯±8ƒÛ@œÝ5rÇè2ØÕtŸ:E'gÇY0nBývºÏBÇ§àÒÈÅŒ¥Àý¡“–ÈwŠÈÏî‹ˆGîÞ¢oÇ*.Àä¢M1`3tCß EŸ˜À‹:=¡WYÜÁËò6€¢>^em2—Õ.ö\ö.¦WxŒ]ès¢þ¨ŸP¾qÝâöRUTÂ;ÜÍÎEÀ¥Ž7ÿË‰
ë!u Ü<ßºÁñ¼‘péS8ØÜÀ"ô“EDˆÞ½UðÐhÔ·]e<ä7*§Ñ‰íiGUfïañ·ý¶Eµ{°àébO_îz­Æ‡û×îí|[=FT•³~àN.¬×æ:N¨í…û°S7 š^ÂwÿšbáÞU€Æ3P$Ìqðþ|×KúBmEÈ$;EÄ«6ñ=6Y‹s ú¿¯2³%LTãòºé…À³¶öYKr”Ò®:½Ý¿–Æú6-zjåÌYÚVS»ç!lOÖ˜¹• ýœýDëö+žÑw­ÀòIÊÛí4ç©xS×|-nµ U/þìô¾c£ à<å¥›Þ˜^XûmŠ	à”±´|§Õw±JÍ4•.ní{´'Ú#0Q‚Ëë–í¸YŠE……¸Ì2¾®òÌ>eB¯°8#¸wË®!	Ÿ/2”Œ	\¸ß÷;BþáW­ïìŠ•“³~_±ÊÌAç²	×P`µ?ä´´û  f×~¹úc£çjü®$§žNš›yÏL*²nué÷ÉJâ¢èWõ(²X“Û îV><À>wÐ·i…fØzm7²}C8Ö¿<Š1¶ ºÓÁÉ‰ªP
ûé0æª6E#Îý;WQ!y^$\,‘î–*2°X¨{«×÷g©m
ÞÀ?KÎ/pßJãOžÃTY
æ¬ñØWa8¿Òù¶’[yÏÛâËc‡oøÿýé¡ÌŽvnEœ#ò"¤Ö©‹¢b¡FèÞZé³Š£A¶B-‡·¯Ïbñ${Bi1«³ÿÆ e	ù½b¼I¨~Ð±×‡8 Ãï¨rJ]}aå!ÍÇßƒ9Gä;EÂëŒ`É×¢äeE|>%‡×-K1—ˆ÷ª®²„˜ð'ŽÊÀ9NƒÒIÇZârü'o1þRÈlG’ìæösèÂÜ`™ôœl§Ž‰Hjg›D@MuBõŠ&ái!í–W</Ü;Fô'Ä³ØàòN'Þí’) îº7rmþîj²¸»à^âÉuuèÄ}’ùdïž–°¨8â0Šmd	É&9ŸFSA/—˜Áyö›³9}¾£(!¢ÜÈq«¼‚óv¸Ã“^?¸.Ä¥Àãø®ª˜I7þßÌåÂ1žEsÐu¨Dˆ{Ø›†z/
d¨SF|Þ”%¬¿ÖÕÛüîLŒ»PÔMˆe±Á®!]"¬Rú¯™ba]ˆËú=¨dW\Qä@‡:øÏ~)Ï Î’_m€rÿ´U™'D¢Îm[ eÍA@õ¹ã&È½„iN	±,6¬„=p»L¼<ÙËZ!Î¿­ti!uçÖDÄ:ÔqÀ™Òû›mŽ-xÇ*R)#ZÆAŠsDnãd)®,o%éU–MÎqD¤QÌCÔ+‘¦âíL¬´awÏQ{™ô˜¶ÖßûyŽüjÃ1úª)J$Ês¶)¤Ã!·È¸Lœ9Àù”%Ä±ØÐy¥€[a4>œß¯&ŸGN¬ä=GôeÒ£ƒ—â°ÌQK™}÷ ïÕÁn¸©#'ò(€Ïno¶ë6ôŒ·-±„8v6‘#!,p!¥D„o8ÅŸÓcdµ:Œâ"Ð€ÏF£o©Á^ÄÚ‹›¨‡Ë&ïÀ?­«Š¢ìb'”Å–@àŒ›M,– ù+ðÃ]Þüˆø÷Ç=Ve"¤Ã¸RuçBˆ+¸ÚÐÌcÕ
„î­ç¸=“ht)#RœúŠÇN_®'[ÂG?$Dz#ÁËÝ™¿APk¢ÚŽ5!zv·"V+o@èœn»¼7/ÐdŸCp¦ù£oÅ"KqKLBËZ•%Dç9#iÂÝïÿ{ûî168Ó­˜òø,fŠª¬©™KCò)9Rœ¸ÏÛ­µ“ïy€i%ß'eîú¸)±¸;^Ýæ•>…Å¸E–AêS¸Þƒ€|)ŒÖÀ†rê+kÿÔY@, Øå¶ŠL“.Åå€ÃëbQ@ë:0Ë)Î®ôô}±ŸÊf'”Jfo)NO¡%ioˆ8#€RâZb4‡ºÆD¡PŠ‘Øåö(!Ä•¥UDì@¥ëý¶?Uê°ž"AŠkŠ¼­oPô?ã0ûæÓ&j¢Ç‡cäÆö£–;§[Ê{å6NrHPµ§•Ûd6¯Õ˜—‘2â¤Kq[ºV²©*ÏŸ‘¦‘¿¸¿z×z4ëp¡¾­â–5ðnûRqcÅw¥ãêÐ ÖÀ[Œ›SèZ¾
Ì…ð é„†K((6£Qm°Ë›d[Ê©Óx–úÛÈµþ6“ÖH°”ù&)>>VXBäØ

¦Ì<-š ðD^/Yuä¥FÕÉp¿eoh,JGö pƒk¡we(­‘uàà­®;¨¥¶ø2øÌÔ‹·ôáª"iŸ·´á®ÐóÝ“}ÏLBä(Æcl“‰æ «ÿp´ã¦Ü¶“Š‚èEBWÕ7>fa•8þ!Q&™Â$‘ÑYóÐÂXñ_äº89NâVxªªNßJ®O,‡¶t¹_žš5Ò<«)KÀÇ;µB8WÏ".87H
¯˜MÂÌ[Gâé ãÔºï ¶?Ú|œ
AŠ+
lú}ÉÿeM;úCÒÞð¹÷ÛD<Žs¬êGÅåÐG=ýìcùËí€:ßX)Ä$.CqÅmåô‹àwÐ&"ÅQ¶8ÿ„óadÒ^=Ôñq,!^øE$ÒV¬¤Cq)£+À…¹¤ Oª%ËwÈáQ!«ë¥ÁHq¢6È'6·¯&HqK×ARP‰mòÿÜ¸
Ÿ§|—¥§g¥8–1$Îþºd„å©`w»²d¡–îÁËCAŠ›8¬MDŠ“ù0øÞ†ŸEBœ:ð_b]’òU[}jPÆç"NºôÔèŽc•üà¥8f
,ã0	µR±p=Æç·—€nÞèÔ$DŠG{*ûïðBÜ˜á{[Ð‰ø³8É<-ÀÁ?€ÀjaðR\¨ì%¶Ë„ÔÙ©ïjÔüÜ[æ¹9ioˆ:ÏqÌ0ÍÀƒûW"¿mÝQ5)i¬ÔÚØù×àÄî±ìŒÊ|î2¥“´HHqÙ¶ÀóI_=ÜñqŸ°„HQ Œ2uÍÒ=îÓõðU!÷éA^Åš2%«'‹ž’éŠ¾ÌÖ­Qrýê¦OÖ}»j¥¡äñ-;ÅÊ–ïoŒ‹Æ_O]f’H«ÊxÙAäF—Lâ1Ò£ÈaC/¨ŽSžš<TÙ“U±vê"9jîòèä[,!BàêÚEÂì¶¸»»¿0Ü(w0ÇRø%qØÕ·Is[fÔÙÝ=ËÜÄ1†2cHÓðñq·°„È5¸Ö‹Ÿä\Ê (Ê‘iEI+J+Êv……ÉC$‰£IqÃ.¨6*¤mãýRgkúßñ†t)gÌ„ìÄ7^ }ÃÚÌqdp9U…Qžh¿0¨t4]Hâ†,Åå€‚£‘Fs9•Sç3‡îuøàNº­¥8||œ“ŒþI~Ûˆe)kÛþ¢´(y¿ZdmRG¡ÍßYTInéoæC4‰cuTŠrAõ0÷Ü–yðyg»üã'Oº«1)ôl”µ4–ƒü%ôÌßÉ>Cg>)SMa‘e¹t‡ÎØÁ$.‹KqÃíP}‘n‹é—øC‡¢[™˜ãããV“-5\È¯—ÙÐû+(¢Ë›uŸÒÃ6 ÷¾bUã8ñXc8_ 2o²)ÉRÜªGy«í?¥N+Š^	g|Ý™=ä‘nW™4NöþT†OÆp8WÖgê€ÓâVãè´˜2ß1€†[!†š²äZŽ«É¡Œ¿#uí»K×5†1'51ÇÇÇ=È†Ï€1Ã3µ¾WvËw´YF•Ôà¯¹£@âM¢fêZ«Å…°’\Ãä+³º^ÝP‰üÁðÇÇ½Ä†NÚÐ¥Ù³€bw¿¸[‹—õYþõï|3‰ËàRÜ0=#{És[Þgƒç”\)w;K2)ÀhŠ.¨ïM³s¹þIäŠÉ•ÄJqò×D?BruØæ°ÖÄÏË•âð>½½,a¸œD·È Cma ×ÔèPBŒ¿2Éíàñ·È—âèåqQý¹hu½äLäN-=Æf	CeVCšçoUY„É¯íG F‘ªú;ƒ~àÖˆ<"íƒSèSKòh%;iåŠpþ›á] 3ScàU&+&µÓ×”.ÅÑ»	pƒkÆˆÚA˜G|žÒcœ“´rE«9“¾Å#DþÇÞù¼ÆUEqüN^xgÄE]!2A¨"Ù	ÝøÀ”,¼!…„™bAB
ÁHßBÇ¬$øƒBƒ0ÌBDº(Eq3Ñ­`˜‘Iço08CÑ’9½o^Þ¹çÞ÷ý¬º)fÞÜ9÷{Î÷|o¸!Ë¿»5~Ïì—a‘WŠ£…WÚŠ¹H]ü-]U‰:²ôÕJCØì± Góuã'LÒß\]½tšMöù‹æ!1øËÁ7LJ³9RŠã~LhWÞëâ”oudùgÜÒj„:ðoÎz™Dg¾üQæBTGJÌ©òð]ç¼÷ðÐÀ1fÈÿœÐ}¤;×èb“Ÿ:QG–¿Z©+—-zÅ–¾=0³ I†ÞøËEüþ3W¼¤üRý×é}/£Ü[üšâÊ?ãÞ‚•K¢Ùlg=|ŸÞ¢-…‹6çŸt	c;û	!Žø’Êˆ¿Åû‘†ÙÓ³ƒÀk“õ$Af;çlS™÷¥ß¡ºÙóv¤8zŸý—F¹·ø©ïÃwW~"M/*#0^|àbü‹nC¯’;mš‡¤9^\’[ÉØ!Ü[–®ªCÅGKÃÊ%xMšy;ñªó![r^{pmê¼J”â¨ýÃYËšû6sK·¥‘Xc›ÔÀžZLŽ\q¸år¬øÙK¦¯š”â8x%w)NdýÜ¥Ì-Ý6k,³hn¢%—é\V!t|ë÷ªè7}žfÚâhWr¿™³ò[·þÀkfa¸Ä
^¹@÷k‡ÚŠ.ŸÐÎà/½JîmóD>©–ÿ`} ËÆ÷™b¦+—M¢mO5æ÷©ß½®Ëª'Ê{?u‰Þ7!)p^UßÍ+cšªz4X#Õ?è*c¢mîqÔ¾õ—ðÕëüã{Q’ûç+Ðäûé?›H¬êÀÿ;ŸÆAlJ”NZÂÉÁeÊ<ë•¿Êß¡ßOÿÙ@b-
ØSÖœŸt•h6@ÍóKq´¶ÖÏÿ¯¨]‚•Ë^ä8ÛÑ’1ø+‡}v)ŽÖÖ‡¹±Gª¢Du$ÖÈSwF_( äh‰¤.-§ìR­Iäù/áÞòzµÒ7
ðL ‰
Æ0uð¨é¸ÅãØ§ÝM~7{†gcYU–¸‡ÄüQØžJËqK®ÏÎ<rä÷hÈ/Ÿgp2U¹•$H¬a'Ö#‚ÃÂy¬Ÿ8?}EÒì·Gïz>˜aÊ¿¯ªLÐAb7ÛEí©ôšóÓ¦ë­åWæ{vÙKÊþ,N¦uUiÂV.Ûúuñ^hÍÕOpKüàoFJqÜ4U~ÚKªÚ„‰5¬„EwaÒ†ÄoÝï¼ì:òip‚–Fbþ;Å"@ÜÓ]Ráƒ¿Ï‘¢pƒk‰2ÒžZ(­Ò´á&û4eïŸ¯º-ÊEÚ°9ðñ|Áf½æü²'~ß•)mèÖîðkd8ð—
îŽùÓ‡{û±’C )ÎH¬a"(/m¡ád¯(=ø;)Î^Cb·é]˜…hÿìEY+éœ~)Î6‘XÃB‡j64±TØào
)Î6`å²½î÷±ª$=¹÷¿Rœ¿ëãU‰.ëV†²ài¶åÞÿæ!ÅùDTGbMÙ,h²ÙPM"-vðwRœWÄ)kl:ðÁïñ¯ 	)”Eœ ±¦\ÒgØS‘›-ª–4¤8Ï$ÖXsà¯C¡”6ø[ƒçA+—¥)«Q}fi×õÛâü#ÌXS‘FUp>‰ÌÁß:¤8	5kÊbŽÞ…YaÖdþfâ|¤¥‘XÃ]L¢.qS•UÌ†(ºýäX¹JâÇ•éLì¥•o5ïJJ¦ç)m$Ö”Â¯£1Ã•3^záŒWÏxU5'qðwRœ¯|ŠÄælÁaÕõ€'‰ªM%‡Rœ·4XÃ›0ª¼#x[âÆ_HqþrV.VgÃ©ª:QGÜà¯J ÅyÌ&k.Þ¥ôõÊÊø[so¢ÉuFc®cuÕÄ¨º¬äCŠ«Ðú¸(Èçÿ9âî?9âÆÿþJ-mðwRœçëã°éüBI`O¥ùAÚÑ±)Îo¢ÿkG¿(P„ì©jœ¨££)Îsâ#ÀÇ&åÿaïþ]›ˆÃ8Ž?—¹Æ´NvíM…£s3ÖA¸A:
‰7'Að¦ºŠ (ˆdðèŸ
.„ˆ'Rðû7hHsõ.wùU¾Oîýú
w\>}>Ï“¥S¯ÛÔbs‰â6^ÕgxU¼€zª2%¢¸Íçú\sX‘#Ú4ùì. 7äšÃúøcLÅáŠUBjëÎu"†'ˆâpÕœ€šÃ
t¹žJ;\¬Y^ŸO¢8XªÃÅš¥U¸žªN(®0Ž¹X³¬&F´©ðÝ] _Ì´}Áœ¼ë©ÚlÅIƒ«\KÙ6é
lÔ&Š+”3®r­éq‰¨§Ú)$Š+–ÖŽ,®F=•(¶Û¥’¿°#šÅAÙú8¶ÔÎ¡ÅÄQ¬çµX;²˜jh†Î/VþÔS­çÅ~}—sëôâ¯¸Wfä–1#vrˆâŠ¨æ³vdÅ¿S	¬Ô%Š)üú8*ùüo®€»¯ÚDq›l'Œ½ãéÊw</Õ@`%/ Ša}×UóðBê©|yC'`íÈ|¶©§2EÖŽÌ¥M=•©8(]­QÉÏT£žJAš×Ç½ÌrÄ÷ Q”iPÉÏÏ§žªÏ5¢8á÷ÏMA*‡z*g Oõž1îóÃüõ]ªÉõT.¨Bç¶x_î‹ŽROå‚*¬öÔ¤Ìï­,%ê©\P…J^ÿ§\7æ‡ŽgÚãs@¡·DqqoÔOLôiN|$Ø¡žªQ‹(±JþgFGR¼¡žªP•(ãJ>×2ô¨§*T&ŠÃˆpÍa¦2õT¢8lL%?bXÿ²oÔS5Ú#ŠÃ…›Îg¨|(äDqH®äŸ³é<æ9ŠFQ¦³é<U‹zªF]¢8Lk°é|þ<ïÖjÅ!ý7`"ÇYš_ü•,’/ î,¶é\0â…ÔS5ªÅá²3Á¦ó<giNÖÚ"ŠCÂÚ‘)ïeÈ{òbôkŒé*ž¢8(çíš)·EäYß˜}‘!vŽQO%ŠÃF½ãîß}<ùžcôà?ç{¹DqHRm™®:d6ð_
ìU"ŠCÆ;ŽjþP™zªNM¢8$«ùfŒjþÌÐú·Àb>QR¸~R|qJŸå{÷ÏÚT…qüÔÄ{‹Ðâ ‚†âÒ­”‚ˆN¥«BAÔÐ"â ”ÆÑEWƒƒn¥¸tÄ¡¸tñ˜Û´¶÷5è…ˆýsÛäÞ¦sÎ÷óº”üróüÎ}Ž"#Dq8P!-~Š¦x—¯‚V$ŠC5À¼¶º§»}_0ÈšDqÈzÆÝ¨ñPœˆ.]¶
QºÔ ï7ÏµÅïJ”ˆâãŒ{KolòÎˆâ ß#F€ENÅû<(P'ŠC7/–
¤Re¢8tõÚýpÀµ²Ú„(ÝM{þÌp RCDqÈ{ÆES¾ê~Ù¾¨Ñ0Q²× wløíª8+Ða‰(ùÏ8·—ßJ4ˆâÜ©É?aM2¸ç÷ˆ¼OêÅ¹SøŸ@\ž“Ž»j€vÝ®¸·Ãb7.°éEÊSÜwéAXvšÅ…˜Å²æê0ÛüÑ­ø·ËÝ‚[Ä™¨Ãœ`¯Òì‚ûùøŸÄ™ØL³ÅCR]ÛaÁ_bÝfÒÀÄfš6»½‘nÚ_·B’½(nU€t×âf|]6´¿\X¨Ã¼#@/3À5G¿u¢‹\4(S"ˆÃÏ¸y7Ú	âÇŽàÈÍeÃŒ@f‚8®˜\HÏ¡å¥FiS O¥?AÜu3a%îøå¥Qñ¦@yfþ ¹.pûžÃ/;HoÔ×aæŸÝ¦Ùq9.¥µÎSœ—Ë>õ>-	ƒiqTŽMa2N¬;¹lx#°±™æ© Î¸–éøö'>Õ” Ž‰8ô*h$3”bZ©ÿõñ3¿Fê07ù®B¶3.rðfÃ¶ÀJæ¨ ½ªZ?âÊl11µ™æƒ Y<¬Úþü¸LÕ¬A‡£ŸqÛbXŠÅNÇ{´i3EŽ3nÁx+ö&ßüVê0'$£`]ÎÕ’¿43BZáÖãgÆ‡ão	lÔa¶$«à¼,ÖDä$GœgñÏSZMò38LXeŸ°¡Í4ï%¿	ì9Á •fÅ>Þ¦’ÇÂ¢2#š5úºþÐy'Ð_‡Ià ì÷*éãŠV¥˜õ·À!Âe&FlDqŒþ )Štýªö$Ž”aé–pT+ó¢ÀbA#›i(‹¸lˆ&6Ó´À.á2#V6Ó¬
€”Ë†6uæØ»cÜ&¢ À/ËK°ZÄ	|„Áé|w4TTÐ¹sÑÒ¸A´ˆ Nˆzg@¢"ë÷ÜÏèû®­œù÷ŸØ£TÇÓ gkFÛÎúÎ=Y.Ó¼,ÀÔÞŒ:¶GqÐ7$F’Œâ> µl¸/Äµù…ÓÉøw…ðu˜Š~¡an†Ü ò}Ÿj­?
á/Ó¼/À‘q#1Ü×Z‚Ž×"ñÁ]xO…Óÿ|)ÄÞˆÛAÛÌ	üè®}º'S£W…Ø—i$¡m!1ÝXkµ‡¶½‡#IæóLCœè^‰Œ@Ï lÞ3U˜Ð³Ö1’ä2ÍïLÍ%F2üO‰‘äu˜.oÀ‘ÅFb$¼­QtìÀog'#O
FqÑà'¾ÇFqÐ±V£ß¥Qô_qî$F‚[ÅAÛg7›â;7ŠƒŽC­õ[!´Á(Úf>OMS‡ù½ —
ÍXëŠƒ¦qãóÔø.tÅAÛÒ²!™3øÐvcÙÀµ³Ð4n,rÔaúÎ––yê0ßà¡Ë†Î\P…¦qcÙæ2Í­ß*˜XZ6$©Ãà††­#Oæ¯<0·lP‡	ym-\¦Ì¿þ·O9Fq
0y4îåØùÎêO5&©ÃÔMGÖ/Lo2¡aöÖ¦!Ñeš»üïc!…•à/Ö¢þsU þ¶wÇ6A Oðn‚h ‰ÈÝ„3wà‰HéËr|5PÉj¦Œß¿Ý<ÃÇ_ »Ó©1½LÓ²# ÐÔn€X£•š±ÖVjÄººm Ò—iöˆ]¦™ ÏÅ¯8 ×"Or½…@ø2Í« RŸâÇ[@læ®žÈtk@ª³0Èu¦¹}@¨§>s Ö¤	È5ú[ ¡>›O¿@¬{Á¿ü .Hã´¿q»•    IEND®B`‚‰PNG

   IHDR         ôxÔú  ziCCPICC Profile  (‘}M+DQÇ3CÆ[(‹ÃjˆQ53	e¡AyÛÜ¹æEÍËíÎ²±P¶Šo>e­”"%;_€ØH×s—òÔsžßyÎsþó·_7ÍtId²¶íkã“ZÙ%”ã¥näÍÐðð_õg¼\ãRõªMiý=ÿ7*gây\^á^Ã´lááæyÛT¬ôê,y”ð²âd7Ç
|ô13Ÿ
kFJŸ¾ö)+n¥ï‹}›I~ãLzÎø|úIU<;6"µI²‘<Qú	£1H‚tÒ#k6´Ë;¾`«Ë‘œ¹hÍ&S¶'âÚ`Öh÷kŽ€Ì(_ûUìåv¡û<kÅ^lNV¡á¶Øóí@Í
Ÿ›º¥´<’îD¡zj/¡b*Ÿè
~T†Ò{Çyj²ux[sœ×=ÇyÛ—ËâÑY¶àÑ§70ºC°µ­¢]3ý°€fôŒm   8eXIfMM *    ‡i                                (0—¿  @ IDATxì½	”&ÇU&UÕÕ]½ï‹º[RËÚ÷Ë²-cI¶le3>†wllÌ;ÌáÌ{çñ0>sï1ÖãE^±%Y²k³ö­ÕÝ’Z­Þ·Ú÷½êÝ/2oæÍø#óÏ­ÿÿëFwþ±Ý{#â‹¨¸7###Q§(Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€" (Š€"ÐL´5Seµ®‡€ŽŸ†ë­Ð"E`~‘¶[›]:W ^²–3ÊáiAèÊnÒbÇOWÙC'b,ÃRé£‚4ÐZ,öÉ§µz3_kŠõy¥ùùjP+«YJ«43ÕTÊÅdeågå53¾Zw:{@i¡¤´þõ¥ûÒ EZz±<Æ,9.­ÆÅŽ@)Š8‹¶Ô<½/m±÷OK´_'å–èÆ¨n‹ƒ1‹ÆÍ=&ž8,ã ñ9Ÿ,¦ËÊcšrýjË®¶¼¬vÕ³¬¬zTšÇã£R9yù«]^^yè¯¼´hK1Ú¬|”Ådµã‡œoÌ¸r*£WÒÔ5¾ÁÒdMXÔÕuûOÆe É8‡ÙG>þ çÂ‹ÿ¸‘ÏMû‡?üá®Ûo¿}ÅYgµbýúõ+à–/_¾Œ\çôôô²¥K—v.Y²diGGÇò¶¶¶åîœm§ð2 ô¥ÆdÕ‰(…;nooG9Kçççe()rmD³”biù¡ ¶v”•åP[¿"[?’•J277‡:.Ëhƒå¥6£é‚ˆ
4!N©å5Kµušê:“…µu6¤ËlÑLÆ§^‡> Œi¢›%™^š02&³Gr¦èâ¿‡bäÈŸ¡:Ì¤¢N”?KùÓhýmL‘?OiS”6Oq[wJƒŒiŠ#o×ÌÌÌ$èA×ððð8]cGŽß½{÷è¾ð…qâ/ê,/ŠFË{rüÉöq˜}ðÁÉ¸»y–XšÌ¿æhÂ¢«¥Ûgg€øÂœ†‰þˆ‘f'ƒÏþóknºé¦-›7o^ßÕÕµ”úVRæÛHaoÁEÒF¢]Kþrò»äEi4GvÒäe®NPjˆ ú[ƒ¡ Ã
FÌ.ŠÃŸ$a˜ü>2ºÉ(?MñS“““'¦¦¦zû:Ôó¿ð½DcòÙ Âß/æž+XÑ»>‘¤LuŽ wtƒWsÑWOöSV˜óØÇ#ßà»óî»ïÞvå•WîX¹råÎU«V]@Jþ|šLÎ!%¿™üõt­!:(yuŠ€"ÐB ÃˆüAò{iEá	oŽï›˜˜8xêÔ©ãôGtäûßÿþ(åcîÀµ„.^-`åîúDœ'ÓV×€°¢hÀª-ú*É¾ñ…9>‡ñÇÇË_þò—7Ý|óÍç­^½úRº£¿Š–ã/§»õ¤ä·Ð¥J~Ñ1@ˆ »`¾›®Sdì£ƒ†††^9vìØë×_ýa¢ÂjV
ÒŸâ÷¥Ej`á`Å±ð5Ñ0²O8ìó9V=þ0Ûþò/ÿróG>ò‘K6lØðsôLþ=¤ð/$…&å{¾Íe«¯(Š@„ 'h•à =JxŠö<vðàÁWÈ 8Hxü€9+{ø2l3SÒ8OýB€•È¯Å
¸/²|ÎƒÒÇµô™gž9‡6ä]¿nÝº[Iá¿îìÏ¡‹ÿ(…x*Š€"P0°B@îëëë{ô·û·wßsÏ=Øs€¹‰çi È0
ç¸F\]`…Rçbµ8 ÷ÏG§ãËû¤ôÏ%÷ó´´Ýá_K×V!OƒŠ€" Ô2Æiu î=~üø½wÞyç?þøŒ=00gÉ‹¢‘ † ÐX`ÇÊe«±(‹gì}>Òø‚ÒŸûÊW¾²ùÖ[o½‰îô?ÖÙÙùnUú‹rÌh£FE ¯(¾866ö£Gþð’K.ÙGÅ*%¿‚Ë
Ÿ´C†9_]`åS§â´B€1÷ù¬ôáã[Ç‹/¾xÙùçŸÿ1z5ï£¤ô/TE@hdhe —V G_ýƒ?øƒG¾úÕ¯âV°2ÀJŸ}4E†9_]`%TãbT<!ÀXû|¤ñ«6ÓÛ·oïúÙÏ~önz'ÿS´™ï6z¦¿^TE É˜£ýØ<øÏ>úèî¸ãŽTÿ¼† Œu5F€•Q‹YÔâcŸ4¾¦é”½•ó7ó¾7þ½ŸåñòÙ¢P¯(Í FôÆèèè—iÿÒ¿ÜrË-x­0Í`ÅïúÍ@ƒÖž•RƒV¯é«Åø²’Gƒ8ÌþÝñ/{öÙg?Hwüÿ‘äùyºãg¾¦@ (Š #@ûÑûÄOü3íiÂŠ nr0ßñc éƒM P#§Š¦6À2®ÒG˜/,÷cs_û~ž€ÿDwü$½ÏjS+•ª(Š@ @+¯ŒŒüÕ]wÝõ¯ŸûÜçú©JøÎ”=Î4a#€‚a¤©«¬ ª$NÅŒ)+{×HÓd_zõÕWÿgzÆÿqRü8[_" (‹
0ÔÝÝýg;vì¸Ž›"<F€k ^@X]ègà9¬RÑW7nïú¿øÅ/®¥M1ÿõïxÇOhgÿ§Tù;(jTPôJóõ´úMúÁ?>ýôÓ—QÃqä0æNÌ—|É¹”’£›,„ÕU€€~½­ð+(œ¨<x±]Ú¢OvÞzã7þËÿ	Rü+-‡þ(Š€"°¸èÀwJÈøåßû½ßÃúòc=†/bîä¹U"ÄiìË<—€€XXRÆOúã‚ úk_ûÚÖ}èCH_àû½ã'DÔ)Š€"‚ =xðÍ7ßü?.¾øâ§ˆ{àø± |8ß£ Gs#ÀŠ+7ƒF0vð9ÌJ>Ümò»içÎ_ ¥®k‚$ýUE@ÈB€6	öÓ×ÿäSŸúÔ—èóÄ“D‹9Õ®¤†> ðáØbú›VT¹ˆ•(B€>+øÀ’¯ÙÏ|æ3Ëÿë®]»¾£Ê?ÂMŠ€" E€N=]OÇžÿý×½‹>6t1àdTž_áË¹—ÃEå*A §®4ä`ã0HøÓ4`Ï½é¦›þ;íð¿½4ÑJ­(Š€"  GûOœ8ñûgŸ}ö=”Ž·àô‘@€CE¿PXêò#À
Ÿ}à'¯)ú^6oqëTùçU)E@HC€VPÏ;óÌ3¿ÞÓÓó_ÞûÞ÷Â Àr¿œwy>†Ç~ÓßT¨ThŒ|÷ŠŒ( ¿¾aÃ†?£~«ÜQE@¨:Eð}ë[ßúƒO~ò“½$o	`%€Wt_@‰GÊ«D¾ÅDž¦ü}ÅïÓŸþtmXù<)ÿÿO•ÿbÚVE@¨'tvÊ'>ö±}ýþûï?—Êµ§©’Ï«òæÕâ¹au ("‰ñ‘ap³ý×½áÎ;ïüKz·ÿã‚OƒŠ€" (5B€öìÙ·oßo\qÅÏPxUWÜÕ Ô@ß 
Ç
Î“µè“©ü¡øÙ ˜½ûî»wÞ~ûíGÏ¨nYôh) Š€" ÔzUð(í¹ú­sÏ=Ç«Pö¬äÊ`miÆÅ§ü±ì?sß}÷½vúÿ3)ÿ··4Ú8E@Pùùù>:aõ·èïP¥€»~¹€èJ PŽHZôAÆ$Uù?òÈ#ÞpÃ_!åÕ¢GKPE` #`èØ±cÿo
P5ðya~ F@‘~Á’¶º4åœìÿ<pÑ;ßùÎQåƒ¦!E@P
Úx½†¾&ø7‡úªƒ<0ó9?¶•sûBUµáÊU î9@æÁŒpÍ~÷»ß=ï=ïyÏWèÃøj•:E@P@€Œ€•täú_>|ø£T5rö‰ I Xñ»Êî®»î:ó¶ÛnÃ²ÿ•I)Š€" ,4t|ðj2¾¸ÿþ_¤ºÀÀª-tÏç<¿S’¾"Ô  
Á`àÁ!ð™ÿ“?ù“ôîé—–.]z­¥ÖE@P†C€VÖŸsÎ9_Ü½{÷»©r8'@rŽGÝ_ÔN€BåÏƒÇüú¯ÿúòßÿýßÿèhß÷.ê‘¢WE 	 •€mô)á/ýøÇ?¾˜ª;Kô_<¿/zå®´JEêä`à0`3ÿàƒþñêÕ«ÿý"ÅG›­(Š@Ó!@+è­€kV­Zõ#Ú¸=JÀ¼®ÎA`1 lºŠ¸L?~ü77oÞüR˜iø4ª(Š€"Ðˆtttì¸úê«w¼ôÒK÷¾ñÆx5ó¸ž :k±*6n7|\Púð¡øžÙ»wï­^xáWÉ’Ôû êE@hFº»»¿°eË–ÿFuÇüŽG|NÀ¢?(Ên±:Vþì\sôºßçŸþÿ«Ê±m·" ´
´ŠûŸ8ðËÔùz Ï÷<ÿ£¹/*· îpöy ÀoûÌg>³òøÀ_ÐòÑ9‹j$hcE@hM:wíÚõÚx95wýv®'Ÿu û­ÙúŒV-¶= èh8îp©üíòñÿ_Ö¬YóiK¥?Š€" (M ­æ®Ù¾}û½½½ßöÙgñz :B€âbƒ?|WùÏ¼ðÂ7_yå•ß Á²r± ¢íTE`± @ÀŸnÚ´éO©½KèÂ~ ¹' y“ û”ÔºJp±8©üeÌÿÙŸýÙ¶K/½ôªüËpÐv*ŠÀbC`Ã†¿ûÌ3ÏÜDíÆ*€¼	D˜õÂ¢e±<@ÇÂÉNFíÇ5÷Ýwÿ·+VàIuŠ€" (-ˆ Ýà-¥M—|ïé§Ÿž &B7,Š»}_w²bôåµR[vð¥ÕgŸûÓÒÿ­´ôÿ¯48ºZ©ÑÚE@PBzzzþœÿ›r¬ ŸÀà×ÁØÒÆ”a«;©üeØ®|ö³ŸÝtÉ%—ü_ªü[}hûE@ G¿õøã¿ƒbPüò¦Pêˆ–‡ÖO+;t&|«ðCíÆ5óÃþð?Ñ®ÿSX" (ŠÀ"@€nø–Ñ
ÀYd|÷àÁƒ0àZún?hbòw±­ HKoþ{ßûÞ¥7nüÍ$$SE@huºººÞû÷ÿ÷8 Hnä Ù|¾‘”i-nå îHöYùóÝû—¾ô¥ÏÓWþ®o‰žÔF(Š€" ”‚@}èí"ÚüýýŸüä'ø`+úE³°V 0 \#`–v€¾gåÊ•¿TÊhQZE@PÖA ³³ó¼;ï¼ó×©Eî^ èFÖh0·ŒkU€;Nú¼Ðvíµ×.¿üòËÏZ¦'µ!Š€" (%#@ýû/ùË#vÿKÁJŸý’e7:C«6Lv"+~,ýãô§™W^yå£—]vÙ?S¸U FwZ?E@P:!ð‹düUz{øµ@~%>\K=hE(•?‡Ùh»å–[V_pÁ¿MÙŠm·#TE@Pò#°~ýú_ùÖ·¾u)q@ÑGú‚ÂÐ!pì±ùmÅF±Ò‡Ž„EßžýüòË/ßAËÿw…iä©SE@Xìô÷÷ÿ-ð¿i« ¸ûç«%àjµ»`©üeØZt7ÞxãŠóÏ?ÿ3Ôs­Öî–ŒÚE@P
µk×þ»ú§ºÊO[X¨ªÕ¬ÜVV„¼`•?!8óñï¢×þÞU34U°" (Š@S"ÐÞÞ¾ñ¶Ûnûª<îòYoÀ—7“hâ-áZÉ ä†ÑÎ%^xá'hç?¨SE@PÐÁpûã?þãa¢«GÜ2Êi% ía‡NbËþÜ·¿ýíËèÐ‡÷3úŠ€" (Š€D ££ãìO|â·QŸàl °/Ù›.Ü*€¯“†öYà]ïz×Gi‰gMÓõVXPE nlÛ¶íW®¿þú•T ëø¬cP–PþhÖjŽ;Š ó™Ï|fëºuë>ÜjÕö(Š€" TÚ'vÕŸÿùŸ_KRÓVª[àJk€­1Wñ³Õ6û¹Ï}î=K—.}Ûâ¬E+Š€" 48!–ŠûhXU©W|º¦	Z”^ÅV0 Ð:_Ç í[²k×.t&ÓPP" (Š€"àG€ö‹Ýú‡ø‡ÛÃ\è\Ð!-¥GZÅ @?qç°¶ÍÿÕ_ýÕ¹ôµ§@ NPE@(† }$hç¯þê¯¾ƒèÒ°!À~1‘™ßì +{Ù	2mîƒüà´³scC¢¯•RE@hDÚhåøCT1¼6=‰KêŠ6ÿj@³ èv²s¸Ã–žqÆ¿Àê+Š€" (yX¾|ù»þôOÿôL¢ÅÉ€R¿p8˜†¦i€;>[js´ü¿‹:ñª†î­œ" (Š@Ã!°dÉ’­·ß~û5T1× àºBßÀ±Äšè·™ ©ô¹8íš¿ùæ›¯£wÿ75QhUE@P¶;wÞBUáÊñÍ%ëÔ²i•?*ßÌ êÏŽ;;íêØ±c:O" (Š€"P2+W®¼Nä=d¬_¤_²ÌFbh@vÚƒkþÓŸþôFÚýåuŠ€" (Š@ÉÐÛ g’.¹ˆÝ/²,è8öƒX“ü6«À`³Ï€8®9z…ã"z†³³IúA«©(Š€"Ð`Ð¡@KÏ=÷ÜëÂj±~‘>²oJ×¬ ÀfÐegpØ\tÑE×¢óš²W´ÒŠ€" (ÀæÍ›ñ	ùNºX¿H¿!êXn%šÙ à6ËÎ@mZ²aÃâ NPE@(ú6ÀE¿ó;¿³5 ýÂ:I2’4×Ì€žÃð6mP§]Ð<Ý 5UE@hDè ¹­úÐ‡ÞFus_d½ƒjËp#6Ã[§f4 $Ð†¶àšýøÇ?~.=ÿ?ÃÛbMTE@Pr"@’;Ï9çœËBr©snj×Œ€8wÒm‡œOŽ:­Ë%Ô¸" (Š€"P*›6mºšxp tô&+©(¹¹\3 xÙ)íôüÿŠæê­­" (Š@£"ÐÕÕu½°œêÇz‡}®2âMçšÕ `»áN:¼áÒ¦ë	­°" (Š@C"@çlýìg?»ƒ*×Rû šÍ ðY]œ†¶Ìÿîïþî–¥K—¢£Ô)Š€" (#€/Ê^uÕUø0Ð<]|ÓÉ~ÅòJ >uØ¬N‚ÏFÀü7ÞxÿÏG76kÛ´Þ5@`pdÜï2SÓfõŠ.³aÍ
³~ÍrCûEjPšŠl%†ÇÍ›GzÌ‘Óƒ¦kÙsù¹ÛÌ›Öšöv;­ÔÏmiß¾}ûÙa>ëDe8ƒ½1³šÙ àó_á}¼a; xV£Nˆèé1wÝóœ¹û'¯˜¡±)³~u—¹ê‚ææŸ;Ï¼ýÒ3Í×Äv}Ä¥ÅŽÀÌìœÙ½ÿ›—ÍCÏ0½ƒcfig‡¹ýÆ‹Ìo~ôsæ¶õ‹¢EÓþõë×ãÕrl„cÅÏº>VšÊ5« Áç°}œ±mÛ¶s›ª´²5G “ø¯6ÿöè>sôô½ã›¤»¹!óÓ˜w\v¶ùøû¯07\±Ë,[Ú¬5‡qÑ05=k|æuóßÆ¼øÆ	3=Ç¿ÆLLN›Ÿ}Ë\sñ™fû–µ¦£½Ùž¤.º®¬JƒioÙy$È>j&ŸõŽ”ÝtF@3Ž\€,wüê¤·ÉL+§zGÌc/¼eŽÑò?–lí>Æž0÷=õºùó»6ßzà%ÓGwxê©ésÏûÌÿüÆ“æ¹}ÇÍÌÌ\4vÚhõŽšç÷5§ûF¬E‚ mÜ~ùå—¯›+õ‡‘%ÃL3  V:	4çµÓ ±QC"`˜ŸŸ7‡Oö™Ýož4“S3ô×òâg¸{ßê6ÿó›OØ»½côœWÝâE wþ<ý†ùûï>eö¼uÊÐ
ÆxÃ0‚½N›ã´Š¤nq @×Ò!s›‚QÀIä7%Íd  `VôìsšßpÃ«plcSö„Vº&ŒML›—_§;µþá@¾9a‰H‚!p‚V
þ×=Ï›øÞSæ­c=5©
mlð¸èÉ—šøîÓfï[§©²d2b€8ãfvnžÆË°9@ãƒºÖG À\°™Z
SPŽ
gt4Íf Hd¹üùÛo¿}#uíæR§N˜—ß<m†F'‹îöï # ôw?øŠù2=÷=t¢Oa\TÌ“Ò?e¾zÏæ•§ÌÝú'^á™†0A:Þ*y…öÀW×úÐÛBË·lÙ²Z
 Žu¶™ÍðÓ¬€øS´0#>ÖYgm 7 V7ðZÇÚ#077g9mï3Ó´d›˜ÌSŠÇ+C£Sæ½f¾òÃçÌ‘S)”šÜj`9ÿ›÷¿dž|å=óŸõŒá”£1ÚøÆÑ^Ó?¤@«…´ölÜ¸+ÌRwºú(½áÒe#®r)b°Ã?ÅØ
#ëlMà+Rø4y‘!€¥ÙÝôœömÔÊ£üLîxïû;¿j¾vï‹ôø@7z16­êcg?6ýÝOÏþG&¦üÊßi<ö`à[Çº­Áàdk´X»v->2çê ÙRÎ“inF@‚) CÖÙF=ÔEÂ³¸ÃÃ´œàh-ÑN¥ý]ÂÀÝwÞmîylŸ¡×Õµ&ö5Ñ—š<º—ú(ÝÚÑXÁ"/_)ÍÆ\ÓO†â~Z˜Ô} )(µV2}f~µzSêËÆ–6áHÎ:†›Í HÕvÀš5k°AC"`ÀòýáSý¶
œ'É¥€;¼¯Þû¼¹Ÿ^Ä[êZG{Ì7héïÁÓ¤óÅÀðMë¢ùXU¦C¥ _DMËÉ €Ža=Ä>·—ãìszÃúÍb ¸€"./ Ü¶|ùr5 v¨Õ¿b0 pô/ïÙÁ+Ñ]Fæú¬+ÌÆÞWéí€§v6s>c‚èÔ5'´ÊsÏãûÌÓ{Ž˜)~îOc#a„MÃø‘’giŸÉ‰îAsªwÈ¥æDAkúÎŽ™çÏƒõP^E×, -} ×NÖ™~ ÀbÑÿâ —£ô>ïàx81ÓŽîÈpáá?]éKäÈ8@&ý—÷Ÿ4_§»Ä7ŽtK
71XúêÕCæGO¼fúG&‚Ñ„v¬8ÆaÁø±cÃ˜“ô:à‘“´ÒDòÔµ6Ødþö·¿]Äf=Äñ¦ð›É p•€Û)œNjÂ+êÓM÷ðß$%ÝšÙ‘D ŠÑÕÞÖnï{ñ-û-=ý­5ÞùÁO÷˜·Ž÷ÊîÎl\¡0oÇÚÑÓÃ…ºÖF€€®ë¯¿ ÌC8ž18l›å§Y žž¥ß¶dÉ’µÍ¼Ö³¶t÷šcôZ—]²çQÂEºqNw}A×Ž×é.ñßÝcî}rŸ¥âêšqÚõÿÚñÿÔ«Gì+¢¥´$a›˜¡GMƒfXÏ(Æ¦¤¥ŸËwìØ‘µ fÆob³ YøÖ­[—Ñ!@«d††/§ú†Íñža3KË÷ ˜´ísÝRÿ<fË]ßXîýÎC»Í3»è_“/ðƒsüï{ò5Ó30j_ùK(u´+ì÷„¶WîÀwÇ#€S46Ôµ64,£ÎáUs¬ ”:›48Íh 0èü'
Pçé¹Ì
ZžYÖpk…êŽÀøä”]þ ;vûg*kÀÏueZŽpl<´EŸ‡}ë˜ž˜º†#Á†½ÒJÎ¾Cñ~ŽH©Ó¬…ÝšËGä‘=Ao›˜“úa JkÉ èZµj•<k&eT4Gû›Í  ØpìGásÎ9§‹"j  ‘EîéPÎ“´Ì‹WµàR'õ ;þõØˆ»ëÈÃ³ÞÇ_¦÷Æú* _ŒÁkü6‡þìåÃæÑšqúNDÔ¯Tu„m_czáq@¾ÜùpÂ…ù½ô6ÁiZušÕï$ði±‘Núâ,t3'‹DZCFšÍ ðhÁ¦e™.ZXê#Ð´Å… Îó?rr0üúŸÛöðïžïÂhrþ|íò0Ñò2qm
„âÿáã{6NÓëcêš†?¢~;ÙG¯‡r?‡J•»k,Â0à¾÷µb¦¦¦ÍaÚt
ãS]ë"€±ÐE.l¡œ-d¸i hf@>OË2Ë©sÔ hš¡W›ŠbÇs]¼0Cïh[‡	ž'yJÀïNò\›‚»=	‘#väµÑ„ßo¾MÚ‡dtƒÖƒÏ¿vœVq‚Ute´L$êÊc$'–0$àñd;=èx¬
áÌ‰A2>Õµ6¤kx 7TŽNƒŸ–.i4ÜL@&˜«W¯^JÀ’ES_pìûÿ´!kxqæI ¥¾tRØ;Äpò&ýgö1ß£oè÷$jÞG_ú{è¹ý¦o6þ¡ŠÔ—QŸfT™B?	­Ð˜™žž3iÕ©O	ùaj¡T:{ ’EÜ>Ng?ÎiÀP3 ™ðÑ)€D @&J­Ÿ995k ×ôâçÿY­v>h}iV†c€n”î*xú5óèô»ðY@/p^ßà˜Ýõ¿ï­Ó…5qúµ +%X˜3sô©1{t4NT×º„ %ßŠ>­7šÑ `Ð¥?Oe:iBV ­§Iú8žÅÒŽì±qú¢›msúÚ|¤è=ÂQž\îµK¾I A‡ý÷<¶Ç¼vÈ£\’ä[ pÿì^ÚøGFÚÆ…Tø2ìöµ§¿mõ%­#á¡öŒŒOšÇzé\ =#bº¹nEÒy3Ë©0©;YÕ­Õ*H6¢Z2«-Ç3=A§ â ÎhV·ˆè§åÝzþ?MËóñ<r‚'Œxi7Í‡¢hk§?‘XÙ637?gž¥³äï{b/-/ë[4éÒsÿÏ^7‡ieÊ:¾¤8_²–èsîwÎ—¾¥Ç…A
Å˜?ÓÁ@êZ2 ä&@ÙÐ\ºJ2,t¸ `ÄÀ²_€u
¨[Äà,ö£'ûìýÔâS,¿8Œ±"¡€Í_÷Ð™òOí>¤¯nSô™Þ§é#NO¼|Èàô¿øî?eHÅ_B-!wb’N¤Ó'õ”È€kBRºÙl™×Í›Å H&ø+¶É´@ß HCi‘¤cSÞ±žc *ÒæøÞ-WüIp„î0¿ûðn:ƒ ×Ï¢©uG ßƒ¸÷‰}ö}èö¼.6ˆ#'#Žî¥¨Óø2 ~52/ÔMGGc ëÎFUã5•Ñx5+±F´1CW JÄ¬ÕÈa œ ãXq /ÙûýpûQ†@~…ÏÉ>ýêaÚøº~>fµ&™˜š1O¼tÐ¼ô:½ö‡Oý¢ÀbýŽ‡yläK¼úÊé0†i%èØé=¢Ö»€òéÈù–Ñ5­b ´Q§´Ì²ÌŽí¦.zh„vaÓÝÞÈt¸£sïêx²w}Ð!-r<ù‡i‚žŽ…·;ÁqÇù½ˆ3çÕ-Žö˜GžÝoÏ„HÜÑGUýãLWÐÖ”àÜÈ· ½‚oP`Šº–EÀ]mÆ€àAÁ~S4¾Y 	¸š€¦¾)FG“Ug¼Ÿê¡Þì®l_å¥í#qÓìäÏÃ}AT`H³çÍæ¾Ç÷™“¤Ô-xÞÿèóÌ+û“ý&}TN+uL€žy#a6€ÏÀ  M‡“´ú ®5 gùm³¦×9Íh ¸ Û8uJË,Ë´æŸMí[uª' Ž¦LÏ•”Ï“¾â—’1gfæì+g?}~¿*	NÃ8ñ‘çÞ¤ƒyÆã{³:”ÇP§é1TïÀHJÓ"Ð `=Ä¾¬Š/Mæ7L¸ /x´üÖ2mñ6P‹"Ð=0fz0á»w|·>+s).Tìø³å¥`÷Î>"i­úaÙÈGØòµ™=ƒæß~Jg"RW_pþø‹ÌÞƒ§ì+šçø£Ÿd¿Y“Ñvh‘Š‚†\èÄƒ;|(Šc¨ñ9j}!ÔRŒ›Í¦QüÜ!­¢4ÛèÕ^–á¶©¿ˆÀ;Ø§ûél:„…'x9ÉËp„‹3éÛ(ý0¿¥cö™q¿Ã7âgi8–ŸòÌë´/€ŒuuC`ÿ‘óÐ3oÐ‡y€{9s²Û·¢ïmý$Æ#ÆWqŠ>Œ·Ôµâ@Ó7®Ù€è¯[W š~,VÔ€:ƒý-½â,€|.ïä±œbåÐN+xáÇt8Ð¯-¡^ùŠQ*?øäctâß›Gz­¶½'”sÄUl…'mU ÇpÀ÷ 0õ+‘Ú­ÀÍfŽ‘ÐøÍnv€Fg¸;39OýE€ žõžêÅ] %ÿi–Ì.õg©ŽÓ{èôùY<PW[°ÙoÏ“æ!ÚùC ¯e,€›¢€ÇéUÀ¡]ùY øëQ$ëM°…dUj%7¤JâN-Ë4uG,r­Q2îºNb€ŽåBx‡Ïwìss£8è²VçZàwï"£x ÑI:w¤½ð–™œÖá-|(}lü{ýÐ)Z‘wúq¾P8‡]º¼KáGŸ£lŒE
¤®õ 7ÎZæqs3 ‰Y¹•:¥õþdjÛ"<kÅùÿxÖNú?ÝE
:$0„A*“”IßJKQ$x7ü8½šøãŸ½fÞ8Ü“U°æUˆÀ«ož2O½rÈ¾ŠwµcøÊà~MËsÓ!<. ÌË¸S4û‡Â©\~+‚@³ 	¥ï`Ølmqª¯Ñr›˜4'ºè•»i¿VÎ<ÑËxtw	<žÄý‚œÔ„°3<L¡'p,ìûŽ˜‡icîRÕUûìÿÅ7ÉÈêÂÑq_ØŒÅ-È½At Éñ]ôAÿc ‡^Gí§U)u-‰ tXËxÓ4ºY•fØô@÷ 4Í°«nEÇ'¦Íiºãš¢%öäüÎ
¹Jå%…ÇBÓÒC
¼€Õ‰?¹Ï¼òÆq}=,F®j¡ÝûO˜'^|ËŒÒ'yA¯ŒÔ>,}Í“!9:†=)t H¤®µ ¯eÎœiV `Dé€HMÂM²'i ¾ü–tl'ÆwfÑ\’0_,ºÃwÈ£t©,¸ìàÖ w…ûtÓwÞ°w‡ŽV€ Œ+»óŸŽþÎ1òŽÐT%OtèCîGö™]æqZÂÇ—£€OÐ‰€ºâ“ J#†@+ ø{§G­m-c•5Øiøêààlº*4 01ã
TžÇÛ»Cø<©—âEåp™R`”=F+?}öú`Ð!}EŒ©Ð‡Â}ýÐióÝýŒÑNô‡¯¯]zÐÀ1-Âl8pÓD}";	E>^<`LùXPô§!hÀK+ -Ó–†)Z)¼ö‡¥Ö¡á1š³“J7®2+JáI<Î´|àåKd¥YøÒ©¢ Ð#‡éó´Ð†Àc§õµÀœ
ƒôªvþ<†»ÿ`¨íÇ™0ÎÊtèëŽƒ>AŸ¦¡GêE ™^gðýsZÛrŠ±V«†à®ÿ8)SÜ]óÚ/€|çfË§””‰Ü®TPG„Y"P'8,?õÊA{Tíö-kÍÒ%YlµÉ£ªøÌœ^8=3C×œ5†–t´›Nªßº|m¬·JH÷¾uš>ù{À~~¹ì{€°oÐC¶Mˆ'ÆN²¦À®àxa"á>5Ó¡QÓÛOGS¸ìº%‹Ö˜"PUZFiÒŸ® Tuh4‡°I2 Žu“0åURq+•+²8ÓÄ“¸Íe%à*0 /LG”•‚U"Hð¹+yn¿¹î’3Í…»¶ú(s§a©yš0ÀPÜ³¤lpò0B8LËÏƒ£“öõx=DaœNˆi Ã]êôìŒ™™§ð¬MÃIŠPX¨*ŽÖh'#`	-®Ñk¶dP˜ŒN
#¯³³Ãt-ë4kVt™]fÕòN³vU—Y³r™Y½j9…WØ|tÁØŒŠŽ*,Ø¡ÏŸ|é ÙO¯WJå+›nû1]ióHˆ”?ÐOô­MÈ×'ÌGeŽMN…o§Ì˜å]ºG9€JUOšÑ à¿W'Ýà"²âP|'H¡âó¯‰	œ•7a % •Bž°‰aÄÉ³/Lƒ¢\°ÚÊ Œt©BBënžìó{Ðçjß4;·®7+—WÓÔÎRx£ôœ›GißÃi:]ð8½þxŒ–šŸì·_B3£D7kRìT”:.SjAŠ¿ôÚ$ëËÐÉæ?¤ãÎ7
Sw¶Pð8úFA ìÉo'%OŠ¾kÙ2ºÌúÕ+Ì›Ö˜m›V›­×˜í›×˜ukVá°Ì,'#b9Ñ-'#bù²âXX éþ<³ç 5p¸Î¶e²â”ôÍÁpÁ}|Ô—Ägû‡(bž Ñ„ÜÀNÒ…YQ:ÞN9Ú=d&èd@5 $:Ín¥3gšÑ ðŽz €™ÖN¦à½ýCöV*y;=EÀ8ûi7£Åtˆ£ež„$ÊOäQ¤N‰»^¼êÂæZZ	uí0Ý±ãøàã§‡­’?Ñ3@w“Cvµ_šÃÒ2Œ|q¾áÛ0ÊDå©ø ÞA C2ÇÛè®<ŒÃ+ÙAÒGBãì³ðÇz¡L6ìŠEÇ
ÀŠåËÌæ«Ì¦u+Ífº¶¬_a¶m^OFÂ³e®•6F‚ëp÷ÿ{Þ<–·PÒº¸"/€ÇO/ë-å ìã†SÔßh#Ñ£ðv
V©Ôµ4¦ò¬6cd§† ¤e ê”ü·½V¢R0ùvÑrwñ3×yòæ¿È@}qª¿&Y¹ñ_wý•³T’œæ ù(J	Šs/[ÿÀÓ¯›];6Øeö7é5¶7öÒÕmŽÐfÁ“t‚à±žaÓ70jÏ8ˆÄ†‹ë×n•*îÂm "¬4 Û—ÆRÑr©­Ú³d…´˜qb#=\°ìôÂŒÓÁM½ƒ#‰i²ƒVVÑ#…ÍV[`óºUfûÖuæì36˜³¶®±þækéÙÿ)ûÞ?%ëÐv‹ZâŽ1ShDT$r‚ÑÁâ¤rJè§õ5Ê ìOé&cmol\í0kTXxZÆ  ¥H]XøñT×`Óž§ÐsíÀa"ÇÔëwònJ žöãs÷pA,¡àC‚ _”çSPJÁz;‹¥êQÑbé‡Ö|ÿáWÌkOÚçò§é²ø¦A?}Ø(8Ô(XV‡bo#ú e…u…#”–Ï¸øò9ÏÇ/ó¸$ÑnN²¾O6PQQ4@mb;ûûé­Ž×ò$rÙRzŒ@{Ö­ZfÖÑ£„Më×ØM¯Òç–aTX…ÂÛDAHìÿ 5øuûqÙç‘„PQ:àø Ç'‰±Zó¶›ì#‡D£Í@4„›µj 4kÏi½iÓ¹:0n•A¦eú»?‚œüAk³Û
§p©b™…¡ø1Q()äa¥äŠ°éÆ~5îè©þ¨~VÙSÞRÚ,—t©%™›‡y	i¾ùÉMcZ.ÍÍçtéç¡‘ô»utóQ[¢!ÑP°lî€
J¾pŒVBÆÈ@è³úè`E}-ú<RÒ"-Ybñú$é“±h<Èå¢‹q÷‚VrffgÍÒö–™n“`h¬ih•Iïm­Ò–¦Lõ®86Æá»ëÃ´!.ƒÚŠ§g„E&ïøÅ¤C¦¼DÜïbzY‚-Z Ž…ãCQuX)#`)í7ä‡g™W^ŒH }E]K« Q§•)Ë(EhÐ@È
=x!Q”Ãx²XÆ›ãÒOÉsûØC„-‘ùÝ2£2’í9Q§·TðÆÅR]£ŒÒ@c g3CcÔÔ_ü]Ú¿M}à¨•SqwÕGÏgì&«ääëkwt×†LžÌ)˜œð!‡/.;¼À‘pHe*ËoÉ(E([ÇQž(3!Ì–VH2+3Æ<‚•
,€ÐçZf

3“õå¸¼¥È/×OÖ—Ó\Ù2n#r‡}¢¿Ña_ä‘êÖÎ¶8”™›Ú§A«‡è­ã´™S?»ë”°Ž´Ì]³® ÔqÔ4HQý¤üqá¹q¬dP99ÅÇS9î"£œPx›±ÔˆFE„|6'œüm>±2H“Íù¶Ð¨&`¤KÆ-AÊOT9‘ïãuÓ—¼n>ÄÉ|/é8>Ò9Ó}<œŸéO^>ÐKçÊyÀžpfÉ%cŸÖ7B„‚ÞGËiì'øPjP"	3t°ROßí3ëéµGuŠ@#!ÐÌ+ ü7<inosš6ÎZ— pºŒ¾8JŽ¦úÂ’0YÓe'å0l‰0É;Œ„BÅê@†åãŸ4¹œïú ·N]$pz›ýZ÷×;Ë—’}t2ß'“ó%/§•ê»mp1ep8ga_Gý“M’±—iþ°Û‡ŠÆSïÀÑ0Œ?'[£M gÓºf5 
@§ÓË
Òš¶W´â¹è£Ýò½´9,ÿdíˆec@ú–ÄUFÖÂt˜3¢ÖˆÈÈ/IágÉá¼zýB|¸&úø®$UvÌU¬n™,?[JI¹‘V
—ûÀ$9$³›6ªžêWªJ‘­´Š@mh™G t:“n±©íXi(éPúýtÖ:öà|°èËJÂ?)§6@LüMÞ©”!x,”>ÒŠ**ëhK…PÎÌð%ŸÌ•QŒ2Êáá²¥|–#Ó˜~Z:óIZ?Äé2ÀëÊ¡òÒŠLÄdßqÿúÒ|¼iq]ðJ#^ïd‘¤š ,-c Ð¤]ÊŸúÁ­ÅV|ïWã|VþÁ‹a¾nã‰8HÊ§pÊl,‡QêÊxåpCœå±‚xDÚ*p=‚$™}mV^RZ2æ“
–ç†Aïã‘ô¾|Wâp>ZÈò¥[†èGB%zù¸nìÇÔ¹S–œè/Á/i„¸ÂzÇ<ñxI–7JF*LÑ‘ÀKrûœ(N#Š@hÖG 5„DE78`ÏUq¾}>—œ”SyB…Oæ)” ã+…$P²±‚H%³Z
õãËG™•ç£/–ÆòØgú<õeZ×gYÒwiG~5]±òÂ²R•:å»yÜ·Ò÷V¹x[æèÔÇSô& ¾¨®eà?”â ›¬@wŽV-|åîmÄ—ë|
¼¨÷1"“¾ÇÉÕOva+›ÃóE!Yã¥ ®î•SÉ6^câq¿r¿p<¦Bié.]ž8Áäzè8çA>¶8ŸÒ(u@ eÔ+-¢Àq±=ô NtoÞÊ®&&k9ù;‚y¶¿¡\^—µRMã‘t•„ÓÊ@zšcåîËg>ö]nOZ¾K8óøòJMsË…l¤ùÊpi²Ð÷NŸ;©ÑäØˆËG¯©vÓX¬N£Š@]h È_n]1ÓÂL¶x¦ŠC€°ü¶<+ ÌåÉa¾ •C2¿@g@!ävŽ,Ë—Î×%½ ï4Á.N óØ”^RVœ‡ô´º`¥DbåkG:ÐY.ó'ËKÖ4A~2]Ê	ÂŒûŠ()¦á²¹.L‚ô¸ì 5¤AER]2/.'`@<v2L©”7OFêiú(Ž3V§4­ðÀý+o$|µ.5@`’6SõÐ'€§¦¦Œ=Î?1('hÆä˜¬åUÈ›žâLô	9,3Û5NÒ)eNPfPÿ@q¹¬Ô’åºÆƒ”Äá‹(…,GúœŸôƒvÈ?AæIÒ%cAÝ¹È‹ë!eÅ†Iùxq}àÃ±Ä
~£Š¸|”)	Éú³a†€Ýt >ò¤Nhše QðÒz4 ôÙî~ÚU=çÿ˜¨ÝI7¨$+~(÷®­òf ÌBeÂeJùiÊKÒúi¤’$ÆJ]¶¹°²|„}eÉ4„Ý:È|Èpó‘—.Ù–XVÐŽ¸]¥·E–ÏáX~aýPg™xì‚ò¥qâ£årb>‰ú‡ÆÚ6Mž0CôåÊMëW1±úŠÀ‚" À‚Â¯…—ƒÀØäŒ9I«ð'sÖÉ¡˜¬1‰ËIÛºT®Ž0OTÊõd{ËEùR±“Á´>:·-¾:0¿Ìó¥ùä3Ì“¼2ZIÇ¼Ò½¤á¸”#ó%/Â’Îƒå¹|2ÎtAŸËþfƒŠ<gÕEÊŒÇO2±ºóï¦Ç ø´ …øhÊÂ  ÀÂà®¥V€ÀÄÄ½V5LXÁ äp§…Û,ëøŒ'ò ;ÌLõb… ’¤Œ yœž*&‘á**d²2a?Á@‘<ÊËå©fÜWç@>ã‹XŒƒÛðKn~5ëjkÞeK¹ÅÊêçoËqe€ÇM-†§
˜0%MÏÌš“ÝƒÖ 2õWXxšÝ Å¦Ö .ŒMLšÁ¡a3KZéè·±ð,ŒI×º@IÉ…“·o2/¬|¬è¤ÒséÚÚÚI	¾Ž˜¯Œ¤´4ž Û–G*â$G91‰EÌ_Nn9Î~,ÝÊKçãŽëëoó¸
?­Ìd:õC6’Âø,=è£s ðy`uŠ@£ Ð
› K­GàCUFÇ§J('{öK`¤ÉÉ^dÐd+™^í0êÏWR6Êw¯$EC;ÒÛÓU#$ëTy…2*ëÓByå¤uˆ@F'¦ÍÉž!ZÐ€å ¬<ÕG ÙW ªˆJlh¦h)õx÷£Ç ™J—ïÄìŠ îœ1)ûï 9•bš\™Î´+:Ž~Rp•’4ˆùë”—”·Áß_½Üòd;léNÅÜ|—?-Ž²³x³òX¦[ÿ Îõ·9¦ñçç)—Kà6Öƒ)|>•+Ûîv™5³ÇéDÀ)ztÕ¹D§^’šV_š}òŸšÿ/¿¾Xjiu@ »©{GÍÄät¬…ã`ô$ÀÖ‰‡	ûnE“Ï­Ý\_ÜU*Y
ƒiQ']ð¡°nLËü¨Òw}®£¤å´b¾ËÃåº|’N–Ït2i¥ÈI“w2S¸~úŸ>—Ï¾Ë‰¸¬³¯MOaß$dñ sýˆãË˜qztu²{Àà5Ö•Ë—E¹P
f7 
7-w˜¡€n:x‚&Ñô©¿ÔÊ%_QcnV>ÂyLëó™ÆÇïÒgÑ²bb–Ç~ÎJªp¿ò]ù2Îa–ïóš ŒXÏq™>Žì4YwûêÁyRèd:Ç}ü>¾€ŽÛR¬Åòe	v!À3.0ZObó*]uŠ@#  { ¡´¹§I‡ MÒY ñL[Ú$»°B( ¾2ÈR³pGÈŽåJÍß¦ažtßÏïÒKyq8›ŠŸ•?ËC;¸-,‡}¢f²„üâ4Yt 0 ‘åq¹wNGÙim‘4 ³ÎV%«.L˜î£™™`õj€>¬Nht zAë>:xpxÔ*_w‚÷
q•k+/1ã‰>V¢	Xâ|W¹"ãMa.ò–å¸üéq®ËuW0<¦ƒÂã4)5ÎGªU‚Ò¾åÀåYj›ä‘ù’;+,ëå¶#.GJ¨m[7ÑN’•à0ú´ØÏ9…>=œØG°æèxàööÚBnMQªŽ€ U‡TÖ
|Tß H¾JÅ
$ðIµÅÛ¨;ÁRœ'lPYc „YaA	ô–ÅËH9(OÆÓdÆõò+Ä4>™Î2dy2,iæ<æKËçô<ma6ŠÒd³Lø>Nã:²/ùd˜ó™ó8=ô­ÇaÎcZá³a)Ç—ÍŽy ï‡Çè‹^úŒ5íeYÚÞ!hP¨?j Ôs-±Lp×Ô=0fG&	<ÉÂw'ô@çc~ŽïèY÷‡|mx‡¿/(„e;EDÁï–Ï¼ì3“çtøYyYt.Ÿ/E¶Är¸m\¾O6çI?Ó¤ù².,›i9^Ìg>>_š”W¸*Áº>¢²"\9n<èÙá‘1:Äj€€Y³´S€C,Y·>R!-THC @?}p„–Qí|ÁÝOô¡„0ßI-_8WÒMa!ðù*ÊT}‚LÊ)‚ë/ÛTŽœ
x¸
ˆˆY«$©è`ŠKåO\x<0BçWœê1ÓúQ †GýD@W |-º4fé®©‡ŒÐijÐs|Wïß€IŸfë˜0Ú	oKÒA–2«ƒ&Ë¥ñeñpž+»˜,¦÷Ñq[ Û—tæG8Ë¥ñ§ñøä“!ë+åÊô,¾2¥„³ø]ZŽ§ÈõŠŠ†F`)ä«ÌÏy»ôßÝ?L«Xãfíê‚GƒŠ@ýP þ˜k‰e"0DŠ¿Ÿ6Páù)&xžz7×?²  @ IDATyiŸ'Üñ<±³Ï2ÎÂ8//ùóÐgÑä••F—–žU¦/¯ròÈH£IK÷Õ5+­ZrPFnYñ ÂXäqi«)d`#+®³ÎØ˜ÕÍSjŽ€>¨9ÄZ@µÀ@¬ r<Ùúå‡wõ©VŸKSBq'Ò9RâøÂ¨7}ÃXÅ*6†¹õÚ  @mpU©5@ ˜&ÎÁ1{çoÕ;O ðéJN¨áäÊ4¶>)n‚¦Ï#2lƒ5n8œ‡Ï¥i´¶ ~åÔ©\Lª/mì$Æ¢l?‰é¥},}Ã†¶´¨S}° ðká¥ 0<J_‰Ÿÿ[^L®á]Œžxƒç®ñ³Ø˜ÌuÃ•_EäÄíæ§Ýùeñ¸2|q)×'Kæ3¿ŽóØwiXÒ9Ì´ì»<œžÇg™,ß•ÅùR–K#ódØ¥óÉ’ô»<n~Ñ¸]TRlA5dfÄ9oÈíî¡ƒèk–K;£(õF@€z#®å• PéÂ)jPâBqc¢¥ÙWªöÀ4¶T7.8¼“5Ó:®½—ž3+ðË’‹zŠ:ze8m‘42\AÕ¬R¦'ˆÜˆSGd{yó´×•]I\`[ y\o‘ÉÖ€§þSô@wï=Ïb™ 4Ö5 ê¸–W8?}€–N§è(à”)7!7ÞyÂÐÁûþægÏÄÍÖgúbt	¦ÚF<
¥À òÖ ÁÚRv;Ð8´¥¾}T·ÐpÇY½·}ÈêÝ30j†FÇÍ¦õ«#(õF@÷ Ôq-¯,FÆÆià°™›Ë5õCéóã (ÃAœÓ
'õÒ+È2Ø/]Bãp´BlÓOõÚÂ7ô¾~rÇš†Ó þíVô*àPÁVL¥¾"Pt >8k)"€#T±pvn–$abwî Ý;®¬;¬K|÷&…”+ÃÜ IËii¾KynóÊ²|4œŸ•Y2Ÿy.Ã.âÅœ+WÆ]^Y–ù2ãY|2O†Q¶”åÖEÆAÇeqºçô¤ï¯d®'Æã¯€10L±`NT§,$j ,$úZvnpøvOÏâ ëx2ÏáÞùgS#7¯2).©"KvV^žzùø}i…µ*=%M.+Ó´|.©X>ÓI¿ÉŸÎ+×OWÖø"£ çYôÒc ý(PZ¿hz=ÐG õ@YË¨!:9ítÏ=CÝ½ÿ«XxU°‚€ÏWUçÂeç ÍEÂõ—~ÆrëÁ|¥–—·N,ô\VÞip·ï^R„XÀQÀ½}ÃfbrJRhX¨+j Ôn-¬\†éüÿ‘±Éä³|;¡æ˜Ðyâ•“3UDÞ½ñs\égÕUòfÑ¥ååá÷ÑÈúqØ-ƒÓ¥ïÒÈx^:—qðf9ÎgŸiÝ2Ý|ópžës~š,—ÞåsÆËŸ·8…X‘;=3kNÑ>€±‰éL6ÍTj‰€>¨%º*»*à€ÓôÚÔÄ”˜,í„J3)æÔ6û“,ËULž¸Ý€tz^ïˆÅ°BðåÅTA´ c7ŸãL#e2/ÓHß•'ù˜ÎåO£½/åpž[&çKŸiÙGóÉ4æ|Ðºéˆûò%øà@çKr“¿Rf2'Ž±,ö‘ãåÃs}GìÇb
B¶žHÅ’.ü`¸Ñ^<Ñ=Hš 7V!S"PwÔ ¨;äZ`©ŒÓ«'{†Ír’¶³©fg×RÅæ¦÷*ƒÜÜIB–Å~2·ö±j•[-9å¶¸šå“…1WŒ¦x; üa¨Æê­ t÷™ñ	}P;¥¨j Ô
Y•[5p·„ï `Òô©úàf,ÿ]!WS±u9îæ˜”}ŸR(WIødq9®ï+£~WâÌï“í£OKƒ¸<r\Ä%¿›ŸV¦Lçv°/óJ{ëRÆ8±åZ>m?G¯³šÁa} Ô¾Qúê! @õ°TI5B`Š–þqvúÔ´xà”å3’²¢ËS·*DZY’c¦<ÊŽÛç+7\šU¹-e×#¬R^þ‚>qøóÊHd”ªü¶ÜwA!xÜ„FéÕÖSØØJ†í’%uÐE Ö¨Pk„U~Å`™‡ MOÏšŽŽxßª¤i6Å3UëàÙÉ59å‚Žï
ùÎ. ùxF¤$~-…oòwÓ i²eÊR˜W¦!,d…5Êpéd\ðÈdvëÌnz–Œ4¤3Ÿ”‡4.’†eJŸeÉ´0œÚ'Ú¨N¾<N“uñÕWæ3ÇçqÆKýÉQ˜dÀ8§7 NõÚý j $ñÑX}P >8k)e"€É¾—–J‡Ã7 øÎ¨UêR®qƒi—éméh‡ïu9'x//'²ö9=ŸÆ“–ž%³W^¹2||œÆ¾[VZ¼TújÉárÙO“¦»ãÌGÎ4<þ‚ø¼ÃÞ–¾Qz´5gVø5M¨1j Ô`_Xíé1ÎëR˜DyBJÀ¤êxxÑ]3…STÄªE ?rdå[l`db<beë$=ÀuŠÀB  ÀB ®eæF`†îŽNÓ±©x P‰c"uRí¥ÿ©
„†5¸ä´Õ Î/ÓGstÙjÀG°Z¿½Í´×¨Ü2«Û²l¶æü£~G?PG 
ŒÇœH°GÂrBƒ èt›Ît6âùŒÛ!3J«[fƒ~È“&Õ5 j°Š¯™ÙYú ˜6E¯K‘•Î7Éò„<?Ï´ÁÝææ`¯ §KI•‡q¤+vv/ïZjÖ¯YaV®Xf–u.±
‡¾ŒÑÝÞ }Ê2àÚÛÛ­QPyÉ*A"€EÁêZµr™Y·šúaùRÓIìÐÿ¸ÓÆaRØ}?69cvgLIY¾p0z ðÃUúe´¹°4„Æ*øàÈƒxÃe×ŽMv¬ùú«Ô5 êƒ³–R&¸Kê¥G ãã´Í»<‘&…º“nË´<!s¹œ–”SJ;tÀºÕËÍ»¶šk.>Ó\{éÙæœ›ÍÆu+M)úA:ÆøèÉ>óâ¾#æ¹W™Wß<A›¿†‰Ïó£”Â•6B€±<cÓZsÉ¹g˜ë.=Ë\yÑYæÌ­ÌZêh}tþþÁc§m<¿÷¨Ùwð$½†7m]ÂHàñÃ~To PüÈôa£o˜>	|š6ÂÐ…¡¢N¨'j Ôm-«dFéÎ¹×¾@ÏIôu2• 
á»1;Û	^LÀ%×B2„rÈÃóRºË¿æâ³Ì‡Þ{¥yïÛ/4;·®/Xæ_¿f¥Ùµ}“y÷5ØÀ<ýò[æ{¿d}þ3@
¨øc[XP‰¨ÉQ@V®Äpµä“<õ¹rÉ[ðdüb¹íª.óî«Ï3¾éJóŽ+Ï5Ö®,àÀ‰{0ÒÞÿÎËÌñÓæá§_3ß§~xaïaZa¢C¦ÀáÜ¹q2¸°½.Ê€ÕHn„ŒÃž¾»zdŒ .T¯-j Ô_•^!X®Å‡€ l¥šN¡²F Š–«‰<ËêòSÜM²¥"‘\è!¥³†”ÎÞu©ùÔï4—·#ñŠ"h|n=)¦Üx™¹ôüíæ[÷o5ß¸÷sôÔ@¨|ˆC”aù¹Ñ‘bâºB¦I Dù )Èc~Q»ˆF¤Ù (Ã•*°€#¤³rðã)„\Žl‹•K?Ö¤%…,æÑ¨ ;ûí›×šßvùw·^gÎ:cc’ÝÃ˜ØA†Ú¯üâÛÍî4wýàIó£G_1CÃþêâo‹G¾ñeNO¹QRˆ`§G ô™ëúÊå²ˆ@Š@}P >8k)e €‰´‡>™:DŸÍ˜¡>°«H¢"ñoî’vTžÛñ\ÁŠrl@ƒÌ(+`9ËÊ}ß5æÎ¾ÛœCÏoKu;·m0Ÿ&Ãa5=«þÇo?nŽœèEí…._$!˜¨ÓÃG]6?"
ãBV”B‡é6–ÁE0M˜l£\oËÊŸkr"­Ÿ §¼„Á´ðÃ‚¬,§.¼¯ÃÊÂž‹y³sÛzsçGÞIÊÿçè®¿´—éðxæòvšÿð¿Ýl÷n|çLÿ­Èà¨‰Œ¶H¥/k.ÃšqÃvÄ	)6·âqöˆ¬\®&@Œê‚@|ªJ]ŠÓBü`‚ïçò,ÏBÙ»JDšôƒÙ™Òlz8A[
þ	ó“6=X ä®eæ&ZîÿÄíï(Kùs	ëh³à/Ýrùå÷_M„YÕ1Èå£Ðylnƒr¥p¤¤Ã°Íé£<.~Èo¤rv5²¤—a.#ô£òÏã¿mÅí@\Ò a¼@<ÓÍ‘ˆ9³‘þ/¿ïjÂïÚ’•¿}6­üÚ‡ßin¾þ"³¢«3¨ž$ˆÂ…cKŽ5%ÇYZ;,¥µu@ßC_ì§ý	êz# @½×òr#€ev<¥R4µ†Š!‹n-Oäü‹ÎÙf>öŸ3ç½µâÂð¬FÀ;¯:7×#„Š
´ÕO¶¥lyVý@Yóå5>Ê.!“oQÜ@˜ÝqóÕ´Ù²ò¯é{æfêÓkúÖŽµŠÛRÜÀbŠÁç#™íÕLE ¨PTUfUÀkuøÀð?È#–œ¤EûA¬Ô_¬Hà¹ÿ{ß~‘¹‚–Ž‹oÞËWž[ßòŽ‹íŽu¾ƒÌÇ¹8©€6[¾ï—˜³·æŸ¥ËÏßi7r®_³<º“÷óòsÇ“÷q3o þë£a¥KûÞ‡—¦Õ5 j‰®Ê®‘ÑI2 è+€ô€èÙ°UâáDËwžì'Jã‰6¤µ|˜t9=&Î?ñÎ›[Ö™w]s®}Ç<–PYß7¸îÒ]´1p‡=,Òò×)Yv¹|I)•ÇPJë’Ægð—ž·Ý\wÙ.ûFåµ$¬YµÜ¾I€ýÒÉ¶Ïÿå´Éã	¾_çqÉ~Â }ÐÏÝôš+öº`ÅK"POäH®g¹Z–"PAZúÇkrþiÑŸš-´ž@"”À²¥ôÙ2Ös}va%ån 3.=ï{ž@šâ+I ‡¸2¹ù±«¬Yq^$Ó {ÍÊ.û®?ÎY¨¶Û¾u¹ðœ-Ô×KÊ0`Ša„öðÖœXì› dèNÒ«ˆêz" @=ÑÖ²JB`€vd÷Ñ+RöNŠÌ€X±›hÓ‹	îàÅy,3CvpÅiA°ùï‚]ÛÌ:ºS¬¶³Æí)Ø°v•m®»Ó\ÖÅW¶ÌÃÉ¶$­Îƒ4'ÛÍr\?.?¹)Žå î|Å´qò²÷K,Ÿeã±6OžÖVkeË)=w-õíùgm³=¹ž…m)V_¹IŒcŠ }´À	ghH¨9ú`Í!ÖÊE §¤Ž&ŸÆ“2¤bR…2}V,öõ@ä;
_$ñ«Zì#+ÈÄÆÊÀImØp¶Œj»%´©²»–áÎ“v¹Ï'msn·?­üd[¸µPÈ.Þh@>_A!ËW<^¼Ž\vº,®wi ³–ÉYNøcÅd‰ø4tº¤Òrºh•+t|pˆ×!–Ä¸Æ)6B®8v˜·µµ[¿·oÈÓy›õ› ¨­%j Ô]•]C#cö-€`¢,Ð`¡lLÆNž;»q;±Çs³3GGrãt|àgÎ¾¾jEWmŽl¥&¬¢ï,]B@„‡œöÙ|Î‹ˆƒTo2î2™.
P±ü€.IÎ@a2%&i8=ð¹?’úôq9Lr&£‹ë+³HõÃ2ÄVR? NÕv½Š1´w¯|zë!Ý:È<[¹BœÌ† …ÌÜì¼ý*`?wuŠ@=P žhkY%!€ Gè l "y’
ÁˆÝxÑš,Š‡œØ†ÍZîÄ_T^q‚ZÞ†¡´‡Û>©À‹Ë)¤Û"EZ")——;`*¾4N/¨ˆ[hJíÀ*À¼™¥~¨…ÃX›¥/PÆFŽ§®è{„ý•‰•>ˆ1¸H6yx»¤‡ö `¬«Sê‰@r±ž%kYŠ@8_I¾•ŽÉ²\ç™Às‰">RÈ<Ñ“z4øÒV%¦í[	¹„ä&‚Á3åýìqn1)„$Ü*ª,,` ?‹&E|Ý’ƒúMMMÛ~€â¬¶Ãx¤>†‘oÔ•S‡ k`N–ÿéuÀ¤‘PíÖ©<E ‰€ I<4Ö `C^œ³q8aF
*PV˜,“¦˜X­"C<ÅYYž<¤óådOÑ.m|D(ª¶›ž!ÙôM |®Ö:®ûY‚F:Ž3/Ç%MZXòÈ°K/ó|a¦ÏÊcöAë:‡JcãD÷€fÕv0<!}m¬“¬K™R<KO{|´¢ Ã£»>{M :E ^¨P/¤µœ’€’í§³`Y<vrBÃlðüÓ#•ÚðòÐïBz|6~|bÒì}óxMŽm§öî9pÜ®zdÞy¢>pÜŽ©é¿’>+œ jâò$è<¦÷dÙ$Î—>28žÂ×N›æúétÈ}NØóóSÈÊNî§·NöÒçšaD“cfâñ£Aÿð"°8›H"ÆÌ)ú,0ÊU§ÔhŒ×«@-GÈƒÀþ×30>ëÅdIMþBÇ¤+”S¦Ààynr¥ dà‰]ú²°ôàh·y¾#½ Õt‡éc@¯¾qÌŒÒ×á¢ÍmÐ"‘&Áãˆ°L«@œÒÝ6øh–8*4QœH¡*¶Ñ¶…DZ}™C.·'QŸ k,‘!vøx¯IÙQ<âyúvÿ‘n3ƒÕÆÞ•˜H—ã+ÀQŽ5²ˆMrì"†ÇÝ=ýfl\÷¸pk¼v¨P;lUrŒŒL¼eŸÅF.Mž¬¢Ír²L®ÉÇ%éA)*
“:¢í´p²gÐ<ðÄ«æ$=
¨–Ã]ß£Ï¾nöì?J"…rà¶V¥  ›BQqû
óò¦°lö=|¶-”^âHÌžýÇ	³×èq@õæ©ž!óà“¯š§ûCÝŸÒ;¨xœ%ÛÊÊŸ•>Çc*ê_t1ãÊšž™5Ýt >ˆ‘ÒPíP ök	e 0Lïÿã üÝæÙÉ2fÌ¤Baæ*GNêv})ˆgk¼³mÌääŒyòÅýæ‘g^£G•/×â{öÏï9døÙzä1Ne¸uá8·•ãÒG}e\†¹-Œçq:|ÎC˜óáÃÉxZ8 ä@V§§Ñ°¦sý +$´aî~RÖÏï=dwÑ3g¹>žÁ?òÌ>óÄKo|¢7X…a\Üz ÇùALþF«82ÑA<žY&I!1Ó4zÉ ¦ã¯Õ)õB@€z!­åäF wC½ôyÔàhTš(­²göpâïœeÃy¥ø<‰ûxâÉÙÍÅ·âÑâ×ï}Ú<þÂ?
ØGKÎÿòoOšW^?BMÉª“[Ïâ“m‘
K¦s8KŽ,/-ÌrÒò‹¥ãOæï¦G&_ûáÏÌ^Ú;QIÍñ8çñö›oPŸ=ÙKyâz–/µàÎ?¯,[úT åÑãŸ^úøE¨Sê€ õ@YË(	©éiz`È¾n‡×ïRŸóOÒ“rª`Î€ìBùóòë‡Íß}ó{×8Iw¥:ÈØCÏ±ÿþ››éî?¾ëL“Ô…ÛÀ~uaº¿-…tõH‰1-½¨_¸C;õBØýí7¶û'Êù˜>4õØs¯›¿ýúCæÅ}‡K\MˆÛaQ³Ñ2p¦±€Q>19ezú‡iÿ>~¥N¨=zPí1ÖJD`rjÖœî£ 2²ô>±á$/±’TRIaiö&<EËÅx¯}à]—ç>ÆuŒÞ&xòÅ7ÍW¾÷¸y‚VðÜ7Ï§…e=ò×>¦tù½ËÔ1yÃ‡°'wÍ?zä%3@géòŽw™®:ßž¨˜§òP¶?~üUóUZyõ£öÎ»dLHyç£ÖŽîô}uƒ¡‹Ç+ˆd”àÛêZ# @­Vù%#0MŠ¿ß® Ì™[iòµŠÝSÒÙ…‹îäî*D&gŸéÙ½äÁRíî×šÿñå{í¾€ÛÞs…¹üü3íYò+º–Ò¦Á`U™ ý8`æ í0¿Ÿ”ÎƒOí1i{°É‘KL÷¹\®ûÌÁùw}ÐK·-’Þ¥“yË|™ÇuHËgZÐ1ûœÇ>Ëâ¸ô%Â¸s~ä™×Í[ÇzÌÍ×_lÞOÆØ¹gn1kW/§ï,¥²nì'Á†Ë>z¼„7.~ôÓ—Ì´Ÿïßs\_–+Ãqý0y€"[âpZ/#F»°rðÆ&¦ÍÉÞa:ß@W õk‹€ µÅW¥— V °!ÊžˆùÔ3aˆsªµ
xÖ!òHN<ip—•`§zú9Mo+|ÿ¡ÌÃOí3çÑý®¹ôlsÎŽÍöË~t¦ü ­=Ùg^ÞwÄ¼ºÿíoÀ$“æ ”ã¢¥ò‰Sƒ+½j·A–ƒ2 ßWç1½FæeÕ×•Å|åú0´p„ò[ôŠæ?Ÿè3?xèEsÉù;Ì•ževn[OŸX^a7“öÑ˜‚‘ðm|ãÐI:MpÂÞõóê·Éõ³Ú¼š>ë¹Ïï¹ƒá'iÐ\Û”WûiUB?\îHP¾RP TÄ”¾æŒÒ»Ð8›³ @ƒ»ªP‹”Î¬“‘FîeEYøh¤ƒÁ<Ž;üç^}‹võ´,¬80ñ#ò‚jµåZò÷•[nZ±¶”"7KV)rÊ¥M+¿¬Êœ¦;úÓOï3ÐeGGhe1_¤s)“•¹u±Jj]àò=i¨WÂR4X¡À5gl^+dhP¨j ÔW•Z&ØÈ…o Œñ‘¨47ÎÛWãxq“¥Tú ðæ¦K½?M*zIÁÊiVÑcBgEƒDÏ÷ nïöqÏ8W.Ëc?$‹¼´ôˆ ‚€”íÖ‹ÅJNƒÐ#”ì„4zK)”â¥:·ŽQY¡Ü°¬Xû¹€¨}üçNp
vårv$Ÿ¤_a[¤(TÆo?ígÀßAåÆ‰”®aE 5 
1Ñ”D`†–ÆO÷Øwìí<-fkÜ?*Ê&e¯¨îÐÚIÑ…ó{¨èKCë¡–I¯c`¤ç'›AòÂbãfK^Q™ˆ1ä‘d1sHU(×mK$.%(G_ù>Ð‘K'*èf†ñd²¿Ža[âøK"‘„ù]¦¢/`	ÛRž’àT:X´È§jÓÊW	Œ½!íôibuŠ@-P –èªì’˜™5=t4N»¼·jÑ¼„P¼°ˆYJåÀaXÒÒ…8é¬G2Y¬A‰ˆK…`óD@ðsrÔÎPvÑºØB9ö—qËepVält“"dý¹.6?A+û²ÛÂòD]¢ú…PyºÉÉ8ñs²Ú‚â˜.Ùà8=ÊG	Ì,­0Vœ]<H‡_êNÀìT FM©*j TNV)¸óé£Px5ÎÞI'&á
¥[¥…‰˜\èúµy˜ÙÆXŠ„É"äËtÐ"nyìEà"¢ ýJNÒ:ùÌ‘ ÒDÆAH$eYz¢cq6t‘ XŽM¦t¦E<r”Î,ù2tLfÊ“Q–ÑP&ØAcÅdÈJì¶…Z~ÂhTyN—â¸l3½7Ÿ	AÇ„H#be²\~F"¡“ {èƒDzP.P•¨BÔ ¨@e¯.8ïgãË{¹&hWú9Dó1Q$äLÓ
"AÉfÃô¥	Ú(¨+â¶Îa†[·°BäH$„b?Á/éDâŠ…|2/eC	yH!Z³hä[vG†Íg"+)þIJ
ÛhH([ÒI2Õ£<$I.9!OÐ±ÛÁÈrl>±°Ðä1(Œ&ê 3Üp›}°ŸNÄ'W._æh\¨*j TNV)xO{hd48Í£Øå³ÓxK§T9é&ä¸“:Íæ¬@"1!KåS yR.Ç-OÈÈŠ"ŒZv®ûR¦/,y#Ì„23,¬Ü¶°’‡¾Ó.(ËÂ²|Î³8’ô#ò( ò)-J&¶9ô¥4Œ$ÒâdÎ¶Ìü.“,ÚÉ‹¢EƒH¶Ù!Å>…>ÉÇä8@s)ŽM°øäñ–kb:)5@@€€ª"ËG h„6BÛi×Îá‰	Ò¦
—4…¹ERhÂ.qÎŽºå&ä”"×m•Â……‡^TÇÜ¬ò²òÒ
@›P™°B¡—FL/§<)ùÝBÃ¸›,Y½á¬¶aîxpdIãÕf9ô<
èo`ˆ.uŠ@­ÐoÔa•ŸÜýÐ)mC´*Ð˜\Å›#Gæå.¦	Ñ ÃWV1w•¸OÜqrh Âêµ%ÿX§S0‡íY „V¥EP E;¶›…"|w˜ž–â0¹ò?/Ÿ½Ó"áÎ——6+ü|I:–Ë¾ÌË†®‰®Œºrù•…‚B'å°lÎ+×·rˆ™e³/åqY¾<IW,œÆÏò‹ñçÉ·ý"0“<â1P~%/p8èsÁ=d à¸âÒ^Kd9ê+ùÐG ù±RÊ#€ÃOé´ÑÑ1*	wXååW
ºs0M¾˜tå^ ß$Œ^,¯˜¬#åDb+vV~X¹4…”·bu”ù,³Ò2YN(ŠocàdºŽŽvÓ~Ó€ÉrûŒû’Q¶õ÷ÑHúRÃ,¯Øp]3d¡÷1}ã/ªº_¦…C}t_Ã³GaëG"ô4PÔ ¨¨*²< xú‡ÆÌ0½
(ìïœ9éz9ª('î*ˆ‹DÔJnT@åˆ0‚KÚÍgo3›Ö¯¶gçŸêé'c ÐÑ®˜Ì8Ëe?“¸‚Ì†˜ ´"d·G`ãûøVÁæúUÀÊ1U	i¨†Œ¦×Iz÷Ç âënÖ°»Ñ…Àwb¥ÖŒEÔZQ”Z¯rèkØ6¤.§èüÎ¯}À\Aþ·ïÖüã72ÇNõÓM:nQ«äÜv¸ñ*S1Œû©eòªD‚À5h°è¥¯aŽŽåþÄtB¤Fœ¨(%«=Øü7DC	oÿ‹˜¦4R•œ åcYÆ—&y/gÉöåIù®\=—Ç´¥ÐÈ²
øH]xÎæS¿t£¹ñÚé›ôKÌ/½ïZŽ6_û·'È8µF Ë(àqàz¹~=Ò?—‡ã\&âRN¹|,7Í—åùhd¢|ŒÇ”±giÒÆ«]î"ŠÐPÅ£—Þ~z +aê" @ÁUÑ¥!08<A›ŸÆh¹9œ	ó²»wVÎDìSi<+#íÒÈ<_Õ¸—i‹ñƒÎ¥aYH‡ã¸„?¾4d±,À1î© TQz¨q€6î:wmßl~í#ï6x÷åVùCmÝ¸Ö|òŽwÛOÕ~óÞ§íûéííþº@öq ·½­=a, >\O.ipœÎ~šü•<’N¦'9’±4º´ô$wŒ§sÀŸp »¨ñyh!ã¿§ÈŒŒM•¤Š@%¨P	zÊ[U†F'èõ'¬ ÐôèÌ«AAáÄDâ_ÏDM®¡ ž°c&(‹.+¥eÑdåãÏÃË2Ø–í—wÑsd‚ßW€ri¿®:@×F
ým;·ò¿Ñ|äý×™U+ºÌ#§éù·¹â‚3Í™Û6˜ßøØ{­¬ïýä9s’>V9tIXøÖ¯]I›×fÉ	sŠã@¹m‰%Ä¡¼²ÒèÒÒã‚P]”A9p-8®¨¢qÈ¡·aèR§Ô5 j‰®Ê.	!Úý?H' áNÒû¼Ùj+)Ò3ÙbÎµÉ2Oò,pØ¶ê)Ô·uûu—žcîxßufõÊ.sðh·yuÿ1sèx·=nwø›7¬1×^ö6óÁ¯0×_yžYEÇÏ¾qè¤ùÛ¯?hž~å-ó±¼Ýüê‡n0;·m4ÿñ“·š«.Þezjyí­ã´YsÂt-[JyÌÅoÛnÎ?{«9cËzsøDŸù‡o=dö¼q4ì‹cÎX–‹#ó£šÁ}äV;-=A'Ï?pû•‚0Ý–fNá[xpjzÆ,íÔi:FFCÕD@GV5ÑTY!0BÏÿ‡è5À`>Ž'ÅÈˆ&L*s¨á£Xü¸.’C9<±ƒqvLÃqö™Æ—Ÿ%ùÙ—üÌÇ²}4œæÒ ]ÊòÑ…ùð:hþìí›ÌiIÛæuvwy7}i®Œ¬1úî<hV.ï2Û·®3ë×¬´«Ïï9d¾üíGÌ}¾dü?~ûaz5sÌüê/Þ`Î=k‹¹ã–kÌ»¯½À“S3f	}±níêv³ÚÒðëuK;š•]KƒÚq}Ý¶p:¨JÁ„éé~<ùn™Ì#}Ë'ëê£çüy÷U‰pì…U*,9¬›ˆOÂò&IñŸî68[ Ùa®&j TM•U6³ôà«˜&iîNYÒ£I7‘DìÛá˜ÌIÙ3=“»qNge„¸KãæIEZ™Ïò\_Ê”a—ñbùÌã¡CUðE¹'^xÝüÓw~jnûù«ì2ÿ[ÖÑ]ú:æ´>:Öcyö5óÍ{Ÿ2»_?l&§¦éýÿ6sêô€ùÊwjÞ8xÂ|ôÖ·›k.Ýevn]o6®[•;Öƒ§úÌËûÓ›Ï˜Ý¸û‚¬ílA„óØ—$Œ)ûÈ“tYé.­”+Ã,OÊ’ùn˜ée:§±/ól']ðàX×[zŠxðHfšðïîíÞˆ!K"PÔ ¨ª*³dÆ&èð<7ž›'I+…žˆÒähWääj'kYŒ˜A94ÑŒË‰E|Y†Kêæ‹»ü2îòÊ¼j…©¼¾÷w_È<ø³=æZRÞì¢÷û7¬¥¥û%öŽt|’	ô˜g^>`^ »ÿAZ…Ážüv‹mæ#e4J›Ñxb·y~ÏAsõ%»ÌUm¶ÓŠÂ2’1;;oßÜ8BÊÿURúXöÇ>ôëºŠšÃ8±ï
+5Ýå—ñ4Y’&-GÏ8Œx(/ø/°ñÐSÒÔV †Ì­ ¨Sj…€ µBVå–„ –¤ûé+h³3sbrÌ+ÂDÝx^9­G½495EwäGèÎþˆYB'û­¤ý Ë:;É ˜³ÇIÉ›±{¿ÐhâG0xðÇ_!cà»,ÝIKþGð¡òÁúª(ÿ–êŽ`LbuË:Â(
;í†Óô Ç[uŠ@­P VÈªÜ’£;Ñ¾ÁazNM+ r=ÔJ	Vde„e~T 'Ò(ßòåù¡	srBc%"ŽpOð0}š¬,žP<+…[±,Û©†7ê/?RÈ$
é´EÆ8(¢îô¥@}­zƒ Užž¦jÓPùÄ~!@¶Ù¶9¶$YHFØ_~:ƒÔ\8mXBV:Ó°OŒ¡x+Î&§µ…	™7ðyœ"&Ç'ÂñØå
2`Ó¹X‘áœ¤T)•# @åª„* €ÍNø:”½ŒdŠÉšÒxÂ”iDê ˆä\6“F4Q@H"&æc¹¸M+p”&^±²S‚éyœCÇâ\ŸEEeDÎxŽ ê¨+²<tœ–hÜåƒ/àD:®bÎ¡‘Q_ .µ~‚AæOë+KðD*xA“«)t$^VÅŠ²Æj¡1ÑFÍIz0HYfiå¦CŠÔ°"PÔ ¨
Œ*¤RÆ&&í§€ñšä„)7ÆwLl°ï–t+Ç¤!ììÌšÔáŒ1‚ \HçÛ,&‰hmjÀ‚<ðD4È£H$'
 CÐ%(ÃGÒ°’‹üPP$‚ð…qqvÈ–L@"9ÁÓƒ1”ió‘”38‚Bvò¬®¿Yàä!ÀA#‚–I"Z›üHZ]¢¢¸¤`ŠIA’Bƒ<‡"2V­(ç‡r¬ÇDxƒÇb§N÷Ój‹ 12ª&j TM•U6£ô	`¼W>G@Gø:Y¡°h/ÌrR+Œ 8ÉîÎÖ	í(	Á(‰Ý<ä“K$Kz™'ˆ+#ú]H Xl6·%¢Iƒ$F—œ°/_$»Ê,pÖ¨‚oc?D`ßÈðmxPW.„}–%Û47?¤ãäbma±©>	â¶¸E‹²ÓRWlL‡
r%•aÏ ±Ó3³f¹ÈÒ "P-Ô ¨’*§lp×o7<ÑD-­‘œf_{§Ï*û	 ª™$‚Q¶ˆh8PX¶ËÌå 'ZKN?ÌDš”ò0½õ9"éé"PÙ‚“MHæûb¶BYP ’UôO!+óPódÒ‡DL[(0™bé$±§½Iªè¹^²-”.E¹|Q?RÓe¶¥@€'…ÕòÈÃÓœÜØGßÀß‡:E ¨PTUfIà´3ì0Ç»ÏvŠöLˆ±@LžÉ	Ÿ•~Lƒ‰U>:9•„ã‰»¸¢-…Ü
,‡ÇW“’ö		ÓBY%‰,‡'£
E³òV®œzO^ñ¢ž¼Ä/’R‚4–1œ1{g1ôÐ›1Á×1W¦ðk²"P>bënùB”S¨ ½ôñLxÕuÁ›¥Èô>þ¼t>ÞrÓJ-3/}^ºrëíò•S^ž<4n]*§•™–^X^Šuƒ€nüédLŽ}P(FS2P Ð”¥ºLÓ¡'}4ÉÁð>ªåÙýrnÉœ*çŸ Æ
£\.|¾*iåT"Ãÿ¸$["×]úÙé¹WYé¥¤ç¸år}Ò9²rÐ÷Ê¢ÏÈ£U Ý70dæéµ@uŠ@µÐG ÕFTå•Œ 69á@~b‚×pEgMŠXW^YÃ„^lIVNúfÅÈñ‚ÒCÅÅt¥æKú´2¤ìbm`yR‡YÇ™¾”Ët2að¥åùhÝ4Ä™_–Çt¾z!O¦s˜å¸ù2.iÇm`?HÍþå2]*–Ï>òÓhc^g¼ò8Ç	ˆIÃ¾Ù×?L¯ÇÎšö® Ò„ŠÐU|Ê\°ô?@‡ÓÀ ˆ”áÉŽÃ·i…“e².Á5œæ›œ}i<¡#ó‘†0û,“}¦ã¸ëË|–Áå€Vægñºy2î“á+ƒÓ$}ZXÊGXÒ±I#óe:‡‹å3|—å!}¦uãœîò»é2_¶ÅWóJ_òËtTûdRA$!ëNHµÇæð¡!uŠ@•ÐG UTÅ•ŽÀÐð¸=ôÄ6$eL–´EâÒ#X1(Êæ!
Ä“HbÅŸ¯AY·-‚ö”îò¶…ë.ýÒKs9Ð_[\ºâñ ù0pÛ€xù.äeì—)ßaè¥#gèˆluŠ@µÐ€j#ªòJB ¯8î2£t×a4t¡ïcà	—y,&e(9±»ñ@Xrò§±PÊ_È•²9/Kq˜ÖçK™,K¦1OémaÎBòÓÊ(¤h¹nYùR¦[_ŽK9’žJ	û5ðc:N/,™ùÙ—1¿LÍ×–$GÒÐeñøƒÏcÒe•ñº)RüxEvl|Ê¬\Ñ%94¬TŒ€® T¡
¨<Ûì§çÿ“t°wZö&R‰î¤Š¸›æUd…µØ0y‹	<AÆy®ÅÅ¦U6!,ŒHZ·\.ÇÇ—×Å•É|,Ûç{ d¶Tßm‡¯\_Zª@Êèã¶øh}õÓ²y}òæ¶%®Êé¨,]ø´ý ?ú‡Fì7ª\ªŠSŒ® è XP°  ‡ž7M˜ü„³§¯‰4y§”k–g^öY¶çté£©4¿Ze«Ê©”&?·§­›ÏqöYNšŸ‡.‹&+O–™‡ÎC“k\R9.DIU!šzCfˆ^T§T]¨6¢*¯$fè{òx Â|\x>îƒD¾|ùNt’kõVÚ_œ¿~Z¤Ö½-NUÒêËéì;lÞh)´^&¦•Ÿ–žU\9<YòD^`û÷1@ÊR§Tf_`{¹„™·Úª¼JÀ—Î` §¹’¸{E:zÚ“,(‚ ;1#Î3j1%¸ô ñÑç¥ó•Q¯´<uÌCSj}!Ó‡Y©r$}žzæ¡‘2«æò‹µéP~
mLBo<ö8tÓ™>5 ªÝk*hv êDúCÑm²Í§;ÿ!zpÆ~ õ–¶k{™’³c0‘Æ³fÜpL°<É"a8˜.æ.=”&Û•/é8œU7®	×‘y8Ýõ™ÎM/%^¬È’4æ²9žVf)íM“‘7½X] GÒp˜Ûâæ»åúèXÓJNsi(Ý…£d£t@?mÄy©ÊbÁê+ùh€î$ÃSdò7^)~RþC#ã¶"ÐéÒs$ÞýæÔ(OÚž‰4by2ÌâØOËKKg>ö‹ÑUšrŠÉ(V—<üÅh*Í/VGÎ‡ŸUVVË(FSi~Þr2Û’4lã*‰tò3´JÖOû ÆÆ'ÍÚÕ+¸dõŠÐ= C¨ÊE »ž††ÍÐèX.é¯|åbO'â™—ýtÊêåÔª¬ZÉu[Îå¸¾KWIœeW"#/Êá+}Y4B©GüÂ Ò
sT7¼	06>Q˜©)Š@4û
€ï¯ª8”µ®Pïáît”V 0Ç·ú¶N4¬wyÆä	Y>ç—‹|É›Fï“7M¶“Ë*VÓÉ2Òx¸ì3O=çÿÿí½	”%Gu-]Õ“ºÕRw«5‚Ô		IL’AB–A€cÛ|üÏËëã——ý——½lû½å÷í·<ò¾±Í`FbBÂ $ ¡	M€¤n­nõ<TuU×ÔÕÿìˆÜ™'ãFæÍ[uk¸·Ntß:'Î9qbgfœÈ)r&”~‘6µ¡åëüŠû@ûu:”™)¥oíÚ€\ì_­NXÉnQµV%Æ*€øXÖaYÈ’!ÐMz}ÐM,ÌÖ<#€1ôàð¨–	 Bö2ªÙS~,gþ:èë ~\®èŒÆ©“ÑXë¦léúªÑ=ÖÓeú¢íTåµeØfªŽ21m"K»±®.Çvšö%ÖƒÍ&íé¶™OÙbýib[Û¡¼æÁf\V<¿—eõ©ÕSªt3§"„={ZÞ”ñ L”-]DÀ& ]ÓLu† .mò Y#b>@vâ2.É"¨s¬.,¨\ZYÚÆó£ÑÙ?Ôªä•ÉÚìLô›êTÉ±/±cUò±\Uy&úMtªdògzõ¤/s®J§Êwò©GJ~;ÚT^ÉÉù~˜ÔúÝ*Û¿*Ú)&¸J@Ùšž–Õ å€yÀ’!ÐMì€n¢i¶:B`J>|H^o:Rµpd­Ü‹ ¯ÅŠqõüi‰T>d¼X~Ü>ËÔa9Õ^Ìk"K»±n\îV_t{MüƒZ'öK—›ØC?êú’²Çöcûäkvù¦:q[Á.÷Ã@SýzÉà_r‰cnX.ÿãƒYÓöYà:V˜}s@${`vûÂ¼kÈúæCò½sœáÔ&Œ¢ýÓƒ%Òb€-Oh•ƒt!Çšf”úuÒÚ¶ÎÇ:MlµÓ)÷9–®/WµO>|§ÿš[e]ÌŸ¯rÜ~\Ö~ ?uõíêˆ‡¶	ò©—µ|Ež3…–êÂ¾|ÔÚMLL¹]û¹1ùræšÕ+[¤aÌ¾™ È}¶6Qd&ð˜Î\"pXîi’³š"°g)ÇSÝx6	(XzP×
š_H‡\{¹r3uzº ¯Û)|(Û.ø!¤u´T¹Z¾ÎZhÚ—ÂnU_Ú÷£°ÁÖ[iJ&Ýè–Ûd_|2­õËögÞ—¸Õ\Ë¤¢Üfý¤#óÕÏX¡'e8™'Ý'€I·oÿ!7.KfÛ É2³D & ÙÑ3K$L}Þ–³ÿƒ²
 & é3÷:—Ô`©£ƒÎ‹zTÌ“ŽÀbû¤«ÚÈ5³šù\ã‹¶Švü[ÓìûRØ…­"uŽ¿ÖOõ¶«úÒ´°AÛ¤à‰eù¥úÒy?¼5…EÑNÁä¾Rõ0_¡kMSa¿eáMõ°?19)+Ê@&–n!Ð€naavæaYáì |ä¤* ´uG+2"Íl4®mŠÍ°	w»Øf¾5à (²¤°XfÐ§ÿì['vÚÉÒÊ¡ÜÚÖ†Iý)¸í0r.ü×>Ì$¯÷“¶ú^¸ö…<¶ù¸0éöîªX2»Ð²œ!Ð	½2˜ÝÈ×	"&;oà½f¬€À„ûœ>ùHP±¹ã‘²QðCf,'¶[ƒ×Ð,Uâ@‚ôëa)ÜG¶Zd³¾•L”åâv!Ò’z©7Ø¼¿%3Y¡ð¿ìc![îOÊOö‡¸·Ê6Šà_îGÀ´cûe[¡¾ÀŸRvÖ—tu_ÊÖËm@®Ôß¢ñB­èlÁó9ô½µ¯¨‚Ê„,¼OÞ82fW <\ö§+ôÊ +5#‹™ „E€Ä¯–±Á@U`$Ôƒ*ó¤0ƒA8êf9`„JÖ‘hKÐ­–‹59	A \<‚­"•åšúH9m+ö‘2¤h2¾2¤…–
[Ö•º!Ì„H	GøQåcÜ´¡ýÖù¢}`ÇR´ë
·Ïšr_ÊÛ„2±U¶ ¯ûãõè4•+Êß¼SA^uYL˜÷öø´´S´`9C 1}3ƒÔl¼Ù^pêè´_`t¼Ý»Í£à_ÑJ§ªK9FÔòèßª"2^§œÒÔmp&T‰·dup©“/Õ5èË1¼iÑA?à˜n£©_ºCMtt>ª7ðq¾ûÒt;¶ô%€¨!Iä¹Ç’&D„5 ¸àÃYx Z¹¢o†ît‡;/ôÍ^$Ÿ]›—]¦;‘§™ñ‰Ó£2(}fH- |}í¥ÔŸ¬>¥Ï É:hµØW¦˜¥L¬G{”« ¥€P!³½Žnôù¸.®G9•`Cëj›)ùˆ×µ¾ÀnÊ—†˜z·´ïèe}ê´/¹|Œ_Ü¶.{eŸÌvç¬éÁ>M¡lNHa×“ÉòÁCÃþ˜q+RBÆ3:C o& uÛ¤ÜË<ppÄXç¹_l,8 ÖNríì´aÚS"¥€H¾ÖIñ8ÈÇöJ~fŠZ†v5/eŸ<MÙ¦æÅù&vétSò´©åÈÓòì+ëHSz¬ë”²=¶Ue›õUöµlÆòUe­—²MÿP§ó%YwxT‚W•¤.³å5”]haÁ,,	,_>­2`|C #lÐ\&Ü-ÆÆÆd fx °H<ÛâeWˆJ"ËBK¬…DžShÎk—i¢“’Ñ<g{)ë@g[¯m1ßÎ&åbJ½88RŽõ,kZWG¹XF—uò,“ÒFSJ=t–©_WŽë¨£i,Ãrv©}–:vy,ŒÉ-€ý†åóÀv·SCeù™#`KÏ;Óœcrà¼xtºáÙÉÒ@™
þàñ×Æ¹’--›²«ëÛä+íÆzªJ%«ëòlõµ-¯´[’Bæg­|ƒ¾ÌV_»çkmSXùX+¯ä¨Ó\?!›×ÅJå2?¹Xp/ÞcÇ’!ÐlÐÍFÇà&|àdJhBÂ˜È³ÿ¤1œQñ,.)Ð-¦¾Ñ-›);óÑÎ|µ1_í¤pì&o>ú!þ6Üy<4|>ß°dt»ÐÍFÇàËfX· 1Å™R1 sÐƒáÒ™>{âeÖä€ªÏ¼`·l¿µŒ–tªÒ§Rê°¬õX—¢ô‰uEßÉ	4¶—’cÛeÍ´>¸qÛÔ£í¸MÖkJ1…íhyäµ]-Cÿ«êi§JNëQ–öSu”‰)û’âÇ¼”Ý„>]nQ/ëSLï÷A…5RóX>ûàÐaÿQ ö16neC ý27ƒ¦í-€fÛ|Á¥ðE³ƒ‡Fd]óô&CÀouà¯íAb.=ð2ŸÒÑP®Šr f½Ö­Ê7‘Mù½T{´—Ò‰} lS>äb»´ÓØ&ËUú©¾@‡v©Oóãr•ù ±/¬«²ÅzÒ*}ÖGÔ›mc[öïz	YKAÌÉç³÷Ëƒ€ø€ÖÀÀ`ÔÎè—	 z]üt†‹IÏ!Sòó~™ LLÊåŽÿª=üKgÿJÆg9) õWêvƒªº*~Ô Úi{µ!Òi\lèCèxÕvJxÕ˜*U5°›ËÏ•lÞ@‘©Ü&…Hk®ÿ ÝT>%WðâýeîßÉIoîxfCÈá|?cØMsæ2–1:G Ÿ& ÷Þ4Ü÷ÆýÿÉ(þc ‹gÅJop–&ò@9°zÍd€†ô"I©>Wñ‰Û-nÔù«ëØ·Å¼]ÚùËúYöAï»ÀS—¹‡ÉF|ècél<;ãC*Ø–3f„€M f›)Íq|ÙlßYØ$ž T|l¥<Q—)ï)pÍìd0×úÌk}ðP&Õít;Ïöµ]í‹æÇy­Kí3ëYëw³Ì¶´ÍNÚMék[¬ïÄ&ô©§mµË§t:h—ûteðWöÇ&&ÜY@k|rÊ­Zµ²gVoÔ"`€Zx–F%Æ—iYIyp`~^
Á€p {€\"þ‡ªÖ
š ¥àO[í6]S¹vvPÁžöH›èQFëÌÄ–Ö§Ív4¥Ã¶Suíì¡>Ö£½T]Ê^¬Ÿ’Iñ¨‡ö˜Ø6ëÈoJSz)^•½L–ûi•XÁÇÕ/¤ÄU0öEê¦§—É`ÔáKš'¿&¨Ø_C`†Ø`†ÀõªÚøÄ”Û¹g¿ÛòÄ·mÇ^	Ä‡ÝÈè¸¼?íÖ¬^éÎ8eƒ{Î³Ÿá.8÷,·níqsÒM¬e~PÚ”³˜Rð®lƒ"iYƒl3[eÝ—:	42Wvë|˜«6çÊnU_æ»½*?fÄÇäEO2#¥>…	ÖÏ–[îÔ5dJ†@Ž@ßL $ØòXùf-gŽJÀÝ¾û€ûÁ]ºïýè!÷ÈãO»Ý{ø{‰£²¨Èt¶²^Ç[»f•;mÓwé‹ÎsoãUîç^p®[1ØÝ§± Î`ð
àÀ<]u(#²4K-WK–&‹°×YàG°×W1"OÃ…€cnÿþƒ²ŠæpTkEC súf ¯ÅLuÞýþÖÀ;Ã>ü„ûÖm÷ºïÝù÷ø¶]þŒgÞ¼Ëä=bü[¾<xŒ?‡GÆÝÃÃ;ÜãÛwÉU‚§ÝoýÚkÝ/\~±[Ý¥ûh™ŒÊºæÙ°Wl= "”ˆ(ë³$_›ÿirö?Û 8úMÛ iDM†A‰å•dUÓ6›È5‘I:‘1çCm µÃ+åt¨_œágÎº8ÉY  @ IDAT«ª na(®ÎÂÖ~9~ð0 %C`¶ôÍ`¶@ô“þˆ|7üŸ=án¼å.wÓwï–`¾ÇMÈ2¢HË–¸ŸE¬Å€…÷‹NM»;~ü°<0è6ž¸Î½üÅøO’Î'¼¿¼_¾iŽaòÑ’ø[*ÀÈ&Éº4³|Óõ17%ÏŸ:ÓåØNªyêévšÚÑ:´ŸÒMµyÊÒ”ehŸ”²´ÓÔêkšÒÕõ:_%K?Ù­ƒ<ëc>Êu}¡=­¯ó±½*ÿb¹ê}WïÓ’×ÅV#žƒ[ ˜Ü[2f‹@ßL ä mpèÌ®Å­Kê<¾Ã}å›?p_ýÏ;ÜÖ'wúo‡c ëôR;t0¸Ý÷“ÇäêÁCî>[ž	X=k ° ¾h6zdLlÅ¯øÑ|bb€*LÄ¯ºÄ™ƒ6iÐ)vêì•õIâSpZsÁÕ”¿…ÐÒ¾èî±/A{e_
Z²©TÖ-ÈPìé6µí—æë<uÙtèë Ïú ‹} L¦(S®×-„|\—Ã~UàCÁŸú]ˆ>B—ö5¯°©·oè‹®:­¾P¦	Õíâýÿ¹}vèð¨ZE³‰“1Zè›	@k×–ïßtë]î³_½ÅÝûÐcKíbàÀ¨‡ƒ((“®'/£SSòÑž#þ•½nL p ‹™LLváƒ&ªEoŠ»rì‚g˜? 8¤ÙÈ3=IÑº¬OYCeµ~në6àå!Ã<ia})ësåÀ£õs	f„j›ŠeË>²’>6Êrì?ä(óÁNáoq•„-d‘>kÙ>Êe›”HÑ²”Ð>’§·Mº­Ò¦+Ô¢m*Z;d±Ó)MÕm†âÝýò)m<¿³nÍì'åº5Ë/-lÐãÛû¨,«{¿\îÿôu7ûKþOï9àøÑ74ºŸz Òü(%{7m<Ñ]øœ3ÝúºóÊüÅ'MÈ%Np«e<Ô¾¦ú)ÎÖtÅ´{C¦ôàÊ@UèµøRTe9­¯ƒæ·(eŒvòÅ? (`ÐÏº¦úÒ¤míýÐzäi9‡,eHãz–C=¶û¨îdC´¡}¢½˜Â¾–Óù²o´]¶ yÊ‘j‰V{z7,&.ZGO83~ºq­Ô’¯š¤àJß~YpTnõÙ 6ct€@¯N ôQÙAwûKÒá©þö›îûw> këËkuò`_üÑÝ&OBgêk×¬t¯½òwõËŸçVd
ÎAØ= ë™Ê3 åÁpjÎZMøYö§5ˆ—ëQ
»N[S"W/ï‚q¹ôèg«Náo»ö»Õ—”­¼V,(ÃíÅrÑƒüVýV¹&2¾×UMµà™lm‡róØ:AÃ‘—é[ÎKÿGÝÞ}ÝáÑ#ò&àú¢Âr†@‡ôê ¥›XÒ_–i‘ì>
ò•ÿü¡ûègor=º­úë`<­hB°áÙ3Îü×­[ã~éÕ/sïü•W¹3N=©k áÀC²’Ù”ÜZˆÎx‚»Ep„ÛìBåä (¢®æ±¡²1rË”8¥ôË’éR]¥ºÖ½Å`/%[-šA}”fÒŸª6Jüý@ûU¾”lA0J¬i$Ö¶HýZÁ6}¡˜Ò&ù,·ÐbRWlN:Z„“HOOuäAÚQY¿Ã’!0úe€#·ÍÑ;˜—îöûÜgä^ÿg¾ü·MòÇ$`3xçž#LÎJglçåÌgž¶Ñ½õW¸_û¥W¹3Ï8¹îœ<m²†{H&.ÃÙÌ->×èU‰ÍV“þÖÉÄƒw\¦à3ÕÙ£ÌLhÜv\†Íº¶µUíWÉÔÙ­²UÇ¯j‡:MÚ£Rê’¦øMìR¿Ê¶Hµn›6c”ƒJ±O•e
~ÞŒ(à€}‡d/<HkÉ˜9½<H3¢W4ñnþ‡?s£»î¦ø§éD“´<’¨î•aã „³þ•+Ý‹.|–{Ç/]í®}ÕKä¾ÿ:¥×,‚>pi³Á3°p¸83*Ä¦K}¥ïÞ³B(8—ÁE)~Ðh­‹e3)žÛŠíÆz¹‚dRu±>äc9]¦š§ÛHåµ,õSràiY×ò)>í¦êªtS}×²©¼¶Ï6SràiY¯’'¿©_Úf­¯n¡ìÛ¡¬ïó—»Âã4Èê~`Â?t8¼	®šÇ
Ý7j4A —' è’&}íy™'å}þ~î›î?¾þ=YLçpöj_»ƒeƒHD6m\ç^-þüºÿ‹Ÿ÷œ|q 
•±á	–0‘I€¸h¥4òq“’–}/LÝoö‘+¨¬+DjÙUúUüZcª²SýNåUS>[§_WÛ‰Ë3Ñ‰Žn·J¿Š¯uëò3Ñ¯Ñ)Wqß¦¡\–)×±ä©ìúã²®Þü™”Oj¯\ÙëÃx©wV˜GlÏ™G°gÓÔü?øéÜç¯¿µƒàU eœÄH#Aï/—å/zÎYîWßx¥ûÅk^æN‘e€ç,I{Còþ²¿ùÚ¢c­-‡“*û0P:á/y¤Õ”qF@ï¿m\ÁñQ‘äšŸÿŽÆ>y›_Ö´	@PÆn‹@¯O Úv´—vìÚï>öÿéþãkßu¨E}ô Q…–	(€ƒï‰ãÕ¾×ÈYÿ;~åÜ‹.:Ç­Z¹bNaÂ˜6,«˜ŒŽfíÀñÛ»èÿø‰‰v"ŒƒY®°¼!ÐC`’ÚÑ¾¬¯Šå“#ÇÜÄÔ¤œù‰@Á`®.2z}Ã)oÄ/çu½œÁe¾Oå¿À¾Ü7 ¯ùU§vRžB–û‡xMðY›Ow¿ú¦+Ý¯\{™;ãô“«Mvµæ˜?ûË˜ÂWô…4jƒžÛõ‰zvXíia+7ïù)LSOlC8%ë¨?U¾Tñ•ªÏ6‘›¾°&}ŽûÐI9´SÞ&ÐÛm*×iÛq;)}´ÝTŽW¦´&º™|+Ú÷bb|Ò¿
8.‹Y2fŠ@?M Zß+›)*‹DoLònþ‘û¼<ñ¿GÞû­_Î—ƒuÙù|,‘.ù¯YµÂ½T¾ô÷oùwåË_$ïúÏßJb“ò}\þÇ'‰+î u~ù?ÄÅ	½~@C&,æRv¾ÿàfa£ùàÎ¶fª_öG÷…~5ëKx–"èÀfg})&Ge]_ÂŸ,Á~;lèƒÆ›öu_Â6áÂW”ÂöC©\§Û®ö¥x®¤N?Ø¯ÿ[ßî;µ6¸ÿ“¦„¥“ø ×^¹0!Ô’!0Súf0S «VÌ»ýÞGÜ§äU¿'äË|•.süð¦Ç;Ý1Lð”ÿú×º7^s©û/o}µ»ð¼³«mjÝ.æü± &"]Kbª°Æ€–“M·¤<x?¸VXl(¬%à:VÁA¬NŸËáâ3è„‰Ba_×û|Û \è‹ždhtR¾°­ÂXg‚]ôí_¦!€GÔý)>ÑA[RK33Á/2!WØ*‚sùÍ¢/…]ß²7^ègMx›—*ý`C<€YŸºÕ—Ì;_4À†"Ê}Š´¨†k“ò‰o|hTÖÕ°dÌ› Ì¹9ÖÛþô>÷7|×ÝÿÓÇdå/¹l_{é¿E­n…àú)å½þ+åwµ¼ÛJ«Ø<pFeùß!™´D€vmcÐÄ€IªäeX•R>Zg¦«îi¹ò+…Ál!‘"_è ÔZÜ²yiÊtbû¡›ÐÁOû¢íñž2äØ—”¬æm…øS”ËZ¾à–sÐk•›§Ì/úZ½M¸YƒlôéøHÛe¿9™+Ú¢·”g¹=åd&H–õûõ})ZÑ}I`ÆŽ
5¹²/Äñt@&ÔabSÆ¤ÆU96È¡X<™Ã²Â×ß¹ÓÝòý{å#<ãÍ/ýGcŠ¸çö™§ºß|ûµî—_w™Û´á„ëèˆ|pXÞƒlìFä<ª5‹£/iË„@ƒ!ÅBkißíÁüo™tV².Vä»”Gág!¥}7È°Ú.cØj‡r…ÝbÂxå¾rå\ag°l'îGÐ)cžîu¥G’Õv½d.ZÈ«é¿e}(SOç[u©GÚºM
B¼ÜAÉ³­t_
…\Yæ2{¤…*³i©Ò`yôÈ„Û»Èá›+–ÛPÞŠ’qÚ!`{M;„ þ‡Ÿt_¿ùN·{ïAjÔ ¢ª¶ÕS‘ßüÌSÜ}ûkÜÛå¿ŽïÎ}ZjÆÁûÿCrÙÒŸ±@ýñ‘½ifÇKÉY¯ˆ½”^°I±¤„Â3U_ð´Y>÷½Ëù¦9ú(”¾¤Ê­ËËÇRIVI>h£ÊRQËeùÆ}Ñº%£Re²éS²/¨	õuÛ$Èú
c_¤œ÷£‰~…YÏÎúRÙu³/­¾øc$o?ë«ô/ïµìcò-ƒ²" >´ÂFòVÓ¶‹[ ÇC~L,nW›y‡åÜòÃûÜO~Ìß·çåÍ”vE,ð¢x)â™§or¿õk¯uo“e}:øÃ)L î X¥zÝd“‹‚~Ü=|^Ù‹ËªªœU6tE>8kf‡ùÜÇ*=Õ¶îK,Þ¨/ØÍtgÛ—¦í³Mn“¼¬|™­Ùön }ú ó%_~è‹–Óº¬+é6+´;îqb€[ {p@ž°dÌ~š7öÅÇ€”Oû~ë¶{ý>ø²ŸN-gy‚ÿIÖ¹·¿ñ*÷æk_!ïû¯Í,X~D¬áá°
`ìD¹§RëûÎäŠnBªE²°µÑB)Ô£ÌÁrqYë2ŸÛH´	m:í(ÛÍí7°EÙT›´Y×¶oQ_êì¶³ÇzÚ MùHYPÈ¥d:ÑÏíEýÝ*û¹N”a»`ë<ÅR¾²NËë¶éi&Ïc¾|–OƒŠfíêé†ÇMtaöˆ¼ˆAñm K†ÀLè›	€L¥ãd&`,´VÉ»õöÜcOìðOÊãò:Å³Ò:?Ãñòjßëe-ÿ·üâ+e‰ßëÄç­ý8,/Á$ [ªö¡FŒn>ñinnZÒ?r< o~–i‹åÌr‹<ùšB'e[ËÔåÙ¶–¡¤ºùªöèK,r•­ÙÊjý¸/MÚ¬ê‹¶«óMlR¾N¶®úÝî‹nù˜ÒïŒ–‡«°_S%õâ¦È¢†GƒWU¾ãU@|\Ë® d é¾™ tÜóE¦€ƒËýÞq÷Còªœ,ø£ôò`gð‹ë0X\òüsÝ¯¿ùUîìgž¶hz‰µËÈBFx`	)÷[úYàB¥|aøÅÀXŒÝ
ž²€·®þhåÖáT	Vdg£_Ò­°³ëtòº0¢Ð[*—s]°[ÂJY6U*é§¼*¶¾ÌV?áwŠUòY	”øí})í·Þt˜
}á(`}y‹•c	'˜TŸ4‡+x­[®ßèõg úf{LÊšÞ?~h‹{rÇîFïÉ#€æA4CåÓNÙà^÷ªKÝEòžÿbJXÔèVGe1 Öˆ&ìSè—‹ž`¼å¯à¦rÐçõÈsXE‰õ H¤¡Tü¥\Á©ÏQž´^ºY­¶…~Ä}¡ÈU%m£J&æS§În¬Ó®¬mÕõCËµ³Ù¤^÷…ù&zu2´Ú¾/ÜwS´®ÖñayH® ì“ÕBÃ1C®QC v Ns.…Ëã÷ýä1ÿP>ûoÚ0|äŠ—>Ï]óÊ‹%?·ëú7õ‹rX²‹ á
@i˜„ã­§E™LT)R:HS‚­Å4hÆÜr™2¤¨MÙÕõe¡T¥“âS6ÛÕS4%¯ýÒyêÁ>~¬#e½¦”‹}¢NÌ§.ê«ê(CÚÎV,Ç2hÜmiåu]œgHãz–ÛÕSNSúIŠºØ·P×4 cYí!¹by^Ô-ZÞ¨CÀ& uèÌSbà–'w¹ŸnÙî&&&ÚÈ âAC†u1ræi'»W_ñb÷ŒSOš'Ï›73†–ËýJ.]ÊA0½j_^+ýb¾ÜšÆ -Q–G©J¶Ru1¯JN·ë°®Šú&vc;Uöªliù*™¦mh[Ô…]¤ªúP[þ['[å§Ö©’Ñ­hyÍG>UûR%“â§lA®ÚGÙû“höª	ÁðÈˆÜZöoØõ\€m©úe—Á‘×³ïÂLOunÝæ¶=µ#è˜øa¡j@>d29+Wº‹ÎßìžwþÙnpù`»Àüˆâ
À¼ˆw–‹¤ÙÀÅ`§ÏdôÀW–fÿE¯
¦¢!ŸópE¼Plf@û›¡mÒ¸Þ—++Uû*›´‘1+MÕ€Aº~À<äøKú@C-•p^u@e[D3F¥)_ßÞÀÜ÷E|€í]	‡c²£ZYç“Â³êŒžÎê×Ö[kÓ~q…:{Vg´"Ð7W äžZ¶ör‘sÊ}¼‡¶<åöÈÇ=ò”<àóÉH(ôÑÂG~ÖÉ"?/ÿ¹Ü©›ÖkÁE“—+þ•%ÙLþ±?Œüy
7ó=¾- ò’˜ïUQã†¹	}`×ûÔ"•[Êk¼#å6½[ÂJº—[ÛˆÛÎeÊvsv”É}!¿Ò
ß¼.åÙï\Œo^äŒt†úº¶¥óíûÒÒÚ£ý›´Ô—RU°ÜF=h°-”ˆ‡V„)/Sé­·SYKûbÓ›òÒá*%Ê
“Çic+AsxdLŽ+Y\KÏ«K­`T#Ð7€ê..þš§wís[ŸØî¦ðe¯|Ìlù?(ël~Æ&yðï,wÜq«rÏÂ²¥C‡øg –fW(²¾&/qª0¾YÈ×tª{”‹ëk¬OyÒXeêû²*äY aö«lUñÙFL«äÙfU_b;©r‹mmÐ‡”­v¼–¶2…ª~ ºJ§][aºè|VÖÄVú•ÜÆ
»ØG±í»Ú´X_—aH~þÊšL ðUÀUò¥OK†@'ôË-€Nú¼èd÷öËþb¦ï/ËâáÊ³Z9ò1ˆx2í–ÈàwòÆÅyö~á}eVá¨¼	Êg8å:}; TÃA”±Ç$Ã¦$œ(PUq Mˆ{V9Ú%Õ¶ªôµßóÑ—*?è+}'%Ÿ´J_÷ù¸/Ô¯¢Z¿J&æWù¢åhWóÚå©C
yæAY¹â¯®£|ís¾ø 
YWñ±%C SlÐ)bs ßöÆ'{³¨h8_¨i1DƒrF}Æi›Ü‰'.Žÿb‡§ä¾ÿÁ¡Q9Kéü1ºÉAÞÝœÑa¦©~S¹ªæ›è7‘©²~ý&2³m£©/uí4©›m_š´1[å£ŸÛÏÆž²…“Œ X7oX2:EÀ& "Öey|×{|ôgddT,‡€ÞIÐX³z¥ÿÄï‰ëÖv¢:o²“òä?®rŒËZ å“!x/?Op3+Ï›gÖ!°˜À±‘:&Àã–crkmÄØ€Å¼!­oöÀoša™¹?½{¿=®òrw8£X¿þ·é¤õþV@è‚Ua©R|°x0r%¿åñ­hµ`~p@&×Ã2	°dtŠ€M :E¬Ëò‡åÌÏ¾ƒn+äU¤ðl@v2 düÃsR^¹b…[µr¥ªY\Y¼úwx4< ÏB²‹¡©3}';y9ÏTv·R“©R»¨ê””šÖ©ÓkÒ¾¶¯íÆ¾ÔÙb]¾nGçµN]_´N]¾/¬¯²ûÓÔ§™êUùþlmæúØç±+û}[ïÓ`¨ÄbêÉÅp@ž8bÏ äX¦16hÕÜNÉ}ñ#ò]ïéìýx>°ûƒ>´ÉËæ†r~@º\ÞX1¨’¹ñu¦V±ú^Ä÷ Ð‡Ð?ú¥Mú¾«þp Äˆ	¶W‹£ÄXÑ`>Ø
ƒÁ“2ºž:1¥L¬Ç6É'¥]êÅöXói/æë2m²-Ò*›”§”Ûé >–‰íÐ^ŠR7ÖI•)KZÕT;Úôu™ò)»)9Ê“Ò^JŸ2šÂ¦–e]Û¶ü>.Òù¾-yîÛÞˆ® Õ@µmäÉÕµyÐ’!Ð)6è±.ËOÉ<1•½”Ù>æ_ê- ÇŠ"pFNˆhõpÉ.@qR&9¸L‰¯—a”CB_êœaJ£¢×¯ÓJÕqÖgJ®Šë±Lš
 U¶fËg›3±3Ý™´W§Ó-_ºe§Î×¦uùRß¹}è~&sk3PÁ³5‡äC[xžhÅ"\¬¶V¹ Ø`Aá—ååÒ?–ÿ–×y0€Ä1.çc„÷Aò˜ÖIÿ[à®T6+#r +äë•`<p–*'™ù õW´Cqºn&ù²Í®(Tµ£}ƒ]]®Òé&¿[}Ñ~Ó¦æuÓç”-¶©ë:mŸò¤°E»š7›6
Ýhß.*ÐªüZëBÝ²eÇüêšä6À™Ø â\ >7N1ÍUksh×& snÓXÀpR& þ¬¿´+…ý«ï!…w€ñƒl<aH¨Ì;ëðè¸?KÁà¥°0°–:¶8YØìDkv²sÕæ\Ù­ëí\´96ëú€º¹j³ëvqÖØŒ-U=.×ãäß8"Ïœ°vu•’ñ»„@/¯:C`€‘y.•ƒ—î°–§LæCjÅ}¤‡(™ ÈìX~¾ÐÁåÃÐØÜþÅÚ‡ä	å#²PœÂÈ«å‰@,Û½r2HÞdžQÍˆ@&ÚH®d¢TP6»íf_šÚêvh/Ã»]© ‚M}ÌlÁtn"Ï°Á¹¡<6áj©ÉRA*C_0¹à†*‡Z' °•a!¹£remÿþ!7zd¼Ê„ñ»ˆ€lü.Ú]S6XÔU›Ë–„ËâBq Ä~½Å‡R–A@.Ë;“ò&Á‘`ÝÚã´À‚çqv‚Ï ãk€ÝHù€éAà$ø”ÇCá	_O¢2±pÖU…§Æ<ó´ETË´TªîáŽºzˆ¢>³ç	þO±ózò¡–»Éƒ×’r¡¢&Çƒu¤©ò5%£y4Ÿ9í«ð'³×Òò…ê1´$G›¤‰ö|_È'¥|Ö‹9Õr5B,¯Î
4™› dsaµmòF£Ln ç·þ¹`áTÁÊrx€ŽuçkiÀu´nÔ:éEVg€Þ «V®pÇË‡|äIþ°`6Ú¨1¦ÚE‘•ËxÏþÉí;Ý¾C‹n€+‡²Ë“˜¬„QR¨Ì‡^Æ“k1/Ÿ0Ð¤ âaIó,T\Ñ•àd¥l‚—Û‰_ÛÅÌ„sX_K
^6gªÀC	}°;J¾ÑÈÚöºàem–úBÙ¬R±Êáük3Â»RŸ:Y;IRR[ªœo(ª‰TÉ¬’‡X©XÕ—LÎûÙ-éK!/—EK‰¤å3Eê§úÒÆd¼¯ŸÃ<Ç„Ôà„AœÅ€ò–Í¨<kcÉè¾™ È™æd'_,²«ä3¾Ç¯^á$þ‡„y–3vñƒ® 8ÿmÛw»ý28û™§¶ˆ.$W Ë œÂè¹ƒç"V£"å¤~ÆLÖ¡¥Ÿ·We+¨Î°~ÐG£ºá,¯Y%KÊ—¤Œ0“ü’‘Ö6éÄ6`&VÔeÉëbB=h‘Ë-üØˆhªÛÈÊy_€±ØÊM7µ«utíôÕ6ÍÕ
[©@É®¾"Ð*£•¬}±cl€#¶pµe!ÐOKGD£®/!\ÀeûAù O6­½ñ¿<“1„ r|‘ÌQ¹ðøö]në¶]µ
-DqUcX¾ˆµ¾*‚z—F’"³ÕOæLìÎDG·?[}mKçgb:³I³Õ¯j{&vg¢Ãö¡Û™>öuý£¥VÙ–"Ž/|p+\ElÕ0Ž!B Ÿ& ©þ-zÞj9û?ñ„ãå“¾ƒÑpäyOäR ÎjPÌ°ÔîC[vÈw‹ë, g'ÃÃ²¿<	¿½ãyoª3‹ù¬§ZÍj@@Ÿé§ÝÕÇ‰Î·Jã|`\žÚà°ÿ,p«„q4}3W3zòÀšãŽs7¬ëø'ƒc|ðË&‹âà2¹pD ¼ïŸ¹]{ö§·ôqGåÁ¤¡ÃcnÊéPÏoÄýBYÿªzå+U²˜oÄíTËvRÓM»MlA¦‰\'}€l7í6µ5ý`_:í•|S›ÊUµÓºÏó ÊÑ*¿[ûöÄ>¸5ä¦¦Ñ9C +šõEêÅ	@±×«M šIò•È¢ÌbáŽuòàJ¹PÇÈU±øF€\P&@îÑÇžr?~h‹_r7¯XàÌ\‘À$|Oò~H‘yÖµõ5Øðw@ò‰DY)õ™V\WÖD‰Aíð×*Nl¶ùKk »‘€¶¥«´<d´œ®Ó:E¾Y_RvÙª6ªø±­Â—rß;íGëvÑ–‹|lW÷£Êç*¾¶U´rZGËi~¬“i
‰·‹–Œ÷–3Êã%ÞdßÀ‡¶ðA ©šoŠè–,?+ø¤)7Ð¬Œ-¤r/N ’xõêC€XïôS7¹“7môÏŽA1ÙMa¦÷9ØÙ³w¿ûþ÷ÉU€ƒUÊóÎÇ*€~ q»³qRÃ_ê§ÆÓ0¦q€ZÕ@¬ëóY §D1`Ã®þQv‹¹­´ÔU]å/DØž÷Ùº¾öè¯Ö&/M‹~ OZ¯ÈWñS¾¾¤ûR×´È˜'9•÷5¨ÍñaÛ¤å~t¯/ìÛ'LÍûBRìËòó=Ë§Žs Ÿ3ÅþÖ„,·g ðémK†@SúiPM{¿HäNÝ´ÞyÚ&¿@Þ	?4t0%'äc;wÜó÷ƒ»”78ImhcŽÄ°8	nOD£wÖ#L6èq´Ç+gÌs`ôeô)“ENxÅK)}&¿'²A²Z&ä	BðM}ò5-ÚŽÛ Ý@u;Úç*>ì–ûâ½ðÎ°ïe÷%Èão-Pä;²¥¿š¯mÇþŸ½¥ìºÿA¶Ø.¡YÝFÀ¾i¼X.Üä¾â-ì–ý(·áµrŸÛaO¡-ö§¥)Ï(·CÙú¾\ƒ=Ý–pJæ²ã ßn‘,„Ô/¾_^·Åw7,Í9Mn7'6ÖœûÕqý2 Ø=»
Æi'opgž±)\âÍh¿%u¾Á¦ÅÈ“ò:à7¾s—{\ÞX	—%±R¡OúÔ}ó>ó²éáâ1püc€ ?³Ia…_yà6‚œ?¹1A4èyÚG{!_úE›Ír´ÓÖ¾º¢/˜Ð-§¸±nÖmÆ}aËvëKÚ^œ‡fÙOÝÔÃX&ÕÖ¾P4ôEooºÞù¬–>ÒVìWÁ×æâ¾„~ÐVlé‹¾êE³É}Z*}˜èV‹<zŒmáƒ@ã²¬¸¥¹E@®6Ç3Ú¹mp­÷Ò b÷èÈ6©­ŸCgmúÄukÝ§ŸìŽ[½²ÞVÕHÆQQ´ñ,Àî¼ß}õ›ß÷oÔœÛZl,Q<2:êÇ°RkùÖ’ŒïüA2Ë—êJÚ‚~XPN¥"A£ÌË}I©—x:`´ö¥½/%cªPøSíKÑßöý¨Â‚M¶ZÛ«ê#u5åD†¼:»”-úÛ¾/Z/•¯j³ŠŸ²‘â5Õ¯èöoØƒ€³n'ÆuZGËb-€£òIàQYÀ>\FfNJ¸Ï‚×ó©—& )°ó €žúâþýæ3Nv§¼QúøUA?…´e2°ÿÀ!÷¥ëoqß½ãþ…½$(¾ÈGŠFäc@ùàE¿£n’=sªRŸ¹ÅzÍ|×«›Qmæiò3×íÍÈÑ6Jj;”úÒFmVÕs…Ó|÷…í5c\ÞÀC·ÓŽÍ[0I  ±¦oî³ôú€{¤œ(¨ÀäöÅ2Àç>ën³¬â‡“yœõgÒ	–Ñæãƒ\]€þÃ[ŸrùÌîÎûö*\ÄYÉ‘#r€þ‚2¿Nù‰;WÐª¤e˜o*[%×m>ý"MÙg]LS²ài¹*™nóu›ÈW¥XŽå&òU2ÝæÓ'Ò*û¨ï^ã—ÿýàhwmwÏËþ°Ô«¯œ§Ðï‡	€ßÛå5˜ž~üõ§orž·Ù¿fµÄGu WLH”&
ZGêŽÊC€·ßõûà¿_/¯nMmû9çá‰äáÑ#ï(«íF>59?ÑÑ—Ä21ò ˆnÉnVøÌä|ŠìxIÈx»Ê^,E–6=¥ˆR_ë±OE^÷…þx›ÐõÙ=a_‡~°/`d¿ÐÏd|µ’£¼§…zÀ1!×ÒÈè”éø¾ßWËŸŒí%ó~úÊL5ìòT€n&¶–ñl%§u šWåÍÌìÆuPd’ºÜWáA¨âÅ²BÉGT$úB[^o¨O
Y»Xnû,»ÝG·¨g ÐÜ«È¸ÛÓ±F#Ô7ßÒÓf¬9nµ{Ñ…çºSä |=ï¦fár@NõkFzhÁÅd€õ¾Nþ`yÐo¾Ý¿ó®7»^ð¬°ä°Þæ0D•Ëÿ¸$	Ÿü„E¨÷3´fÖ¼…a©U§ˆ—B©œ©•|P¥¸(>Ô¨±Ã¶’z¶Ï QjX*©Ÿ¹àI®£™°å+‚ïy{y¦,\²«dšô¥l©h7ÇWì•ì£PRí ˜êxóû2„$y[Z7ëg¨…@f:’É‹y&h”|Ë„1D	jÞ­/­ŸsPˆüÊ‹ÐA½¤Y÷%˜iù»Ú÷¼­²¤?î…×ð¶nÿMr+]ßíå/‚’`Þ7€^½ÀÃ/ß&pšÙÃiùà {îyg¹³žqZ¤9Þ€2w k^—´˜|ó–ÛÝÿxïÇÝ·o»G>ÊÓä–ÜÒ¬2ø<1.I–Ç×¨'º²]kÕ¿<P(EìÞ¦Ï  *UÛší%T×ÑúÌCrøù!é~xYQG3»¹¿‘¬¯fÛ¤”Qþê¶}µªkÔ-/ò¦$ÓI_¼l4‡-¤¼¹ñÀ–¹ä²+¾VûE½˜Brúç•ÃŠ“Å¶XöTµC?Ù-O[”)€Ê¬‰\FXÞRm”„Xß9-÷Ëü2À‡GÆì{ CÙ‘†Ýè®®
ëÃ±dXî ôìC€ìÈ)›6¸^ølw¼|/5”pJuF1ìŒË™ø÷~øc™|ÂýûÿÓíÜs 3#3”Æ	Þð“”¦6üàÚP¸e æè[¥Ïú*Z¥G¾ÖC C¹“T#ïƒ…¶Ï|•}ÖWÑ*=òc=ò›PêVÈ&ûR![
†°‹Dû,nú¯–e>-™æ¶Óa½¦iKe¿µ<óUzŸ¸ùýZx,'Ôâ±s~9	òÇ>Ámiîìk°QuŠËºnÑæ{õ
  -~äÈ‘žŸ `IàW\ú<wÎæÓeQ pÆ€³xPOePÐ”{V.Çú eò†.%â2üƒ?ÝêþæŸ?ãþìo>ênºõ.,æöÃA¸'9"Ï À_Y‹ÍŸ£iß‘÷	”?vˆeM1Ê-ê”õ££ ¶;„í÷e1úÙÄ§è÷ñªî°^(Šúã^
èå¸\ÝÃ‡·ðü¥¹C@® d¯5åm þžLýr£h™\˜¿kÛs´©ñ$/ž¸ú²KÜ–'vÈ{üaäqjÙã0H$ƒ¬· vöì=à_¼÷GÜk®¾Ô]{Õ¥rÕá¹ê°:¡=;& øF¹÷A€‡­=I´QÓö#¡e,C ÷Pû:Ž“Ô±^Û)èg6ððßayíËo;·®VÍ*gŽ@?\mfïûeàÆÆä:·<ü.¿Av®é†õëÜU¯x¡»íG÷Ë²¾?õ]`Oö'›¤Ã¿Ò€œ¼²°å±íîÛ¾ânºùwé%ºW½òwé‹žëBÄŠº‘ÆÆ&îIjßtÞ·‘^º½ªA°£Éƒž4¡¬ÿy;ºÌØ¸>W¬ÈÄúëÔFlš6µò´¬®¿‰ŒÖóZ¶QŽÛˆuªÊÔMÙ¤N])½¦¾h]´ÕT~ÅTÛKùŒúª6´.}‰yq{ªœÔÉÚáñ„cy<x{Ø¯»¡”-ÛUäVW[äÜ]mc¾Œõú R’$S<º½æk$ÚyÑEÏq¯¿æånËã;Ýžý®”0ƒƒ’NTÀD «>"ë<¶m§û–Ü8çì3Ü¥?w¡{ÙÅºsÎ:ÍmØp‚;AV)ÌnGD&Úñ <0-—$9ñðdæ3}>¸µµ¨ýVµI\Jõí
Ú>ò©T·]RòMyºmèÄå¦vRrU}lÜðêäQ¯ec;äkÙ™äµOÙ‚øi9æcÿRú­“£­”nžÖWmécÇÊ Ì—L+=ð!ƒoãë›mÜ/Ù±BGÈ¸‰{§¢¹#3‹B¸×' 9ˆ###Ù`UÎìÑÌYà5W¿ÔýøÁ-~I_|ä§4àèÖ)*Gµ…$4%›ƒƒò|€LvîÙçvÉ×ïºïgîŸû†;ó§ÈºÏr<çlY èe`ý‰Ç»õëä'´ÉU‚ñ‰q7æ—&UÇJÖ>Ž=ØNVóá¯O°õEëçyÕ×|D$4NdÚÉ°^û¥Í°^óRùT_b]]ŽÛÓu)ûà5•¡íØN}ö£¬®§NS»!§ÛûÉ²ö‹¼Õ¶šê(;ù1 ídõy”ó<Û <i&sDŽ·ü¹ÈZê:r®™}Ü¤ë¦çÝ`¿L –ŽŽNb‰F,«Ûéì3Ouo{ÓUîÑÇž’…|¶ø.åƒÀL;¨mÂO²Á“}ò0Ñ¾ý‡Ü½÷?â¯>¬•‡O;å$ùmt§œ´Aè·iã‰î¤'ºNXëÖ·Ê­\¹Â­\±\¾g°Ê­Z¹ÒÈ•…Ýò)`y4#³v|@µ:O3]•q0)WhS˜‰N“¾ºÊ.ùÝîí6ñ­S™*ÛàWõm ®J·Î‡™èÔÙc]Ýº¾°uúl#¦3Ñ‰mde?AÎò¥ã¾²pDáþÿ¨<tlPï¬ØÃÃÃ¼Û©ÖbÁÅRîÅ	@2ÊÄ“/=ÿ& wŒA™È¼ô’‹Ü/¿þJ93?àžÞµWÆØp)22êÙ®äp¹‘cy°}Løšß#Ã#îáGŸÌ–crå`ÐáJ0Zµr¹[¾¿A™¬ðyø¿ÿàÿ oaäYÕ Ü•>ÌÐH<°2T™Óòu²uu´Q'SÕ~ŸvµLÜeÀgò±œ¶Q—‡™ê¶³Ëzú·£ý×²ÌwJç¢/±qèc&Wä(Û Ž¢c˜ ÈU€üXSu–íããã‡Å6ÉÒ¦ÊZHñ²ªÅEzq@K ïÚµkL® ôÍ \+öM¯¹Ì=µc—ûÔ—¾åïíÏqP>K!yìƒ!X£®ó`,y˜hWŠÂÄ#\\Á¼Žä¼?˜„qIþpÀÙ}ÐX6/j”ô«Á€æõ´sÔ!¤q—ŒI}ê‚­ëc]”©“ªKñ´íT=yUrU|êÑß”ë(;SJ;©6b›u2uu°ƒvR2l?n‹å”ëªh-£ó´™â±Nû9öMó)«iM-×Qþ˜ÿ	y Þ†c°#un„€¼rŽ+ ~´k¤°ˆ…zuïÝËžxâ‰1™õöÕ ûÍ3å+¿úækÜŽ{ÝM·Ü)«}ámÇ8àÍ‹Ë°TŸÂx¥mèý;À}Ì/+[@ïÏìE,LBÊc:y•­Ö€Dµ²Èû^q`¥>h…¼Wå3›8CÒ½ÕMåy¶™3TFµYk‹~*Õ–¬–Qv[ä*µíSG·A(øl³Jr”A¾*ÅúU:±\f¯Q?D¶RNµW)ƒ¶”\Öt+©ð±UP8Jíú$´nÿÊ¤rÙQµ´©ªËÙ0!GÛxí_àl«R6`¥†Æ“‡ÂÕæx€ä&%mhqaÅzu£¶ìž{î9"¦ïÒó/x¶ûÍw¼Á’E>~(ø™œ:*cX^òGõ:Œa?buCQv_^ÂkfR,é}ã¥ÖuÅ SÔ•å”Cfã-š©þÖŽv™­Ø·Âk¿³·4VÃ×mj[))^e›U}¯âG>VÚM9A^mŠèþæ<ÉÔ¶×Ä®2¦q„]$Íœ4Ï×©öRzÔûÂ¶P_«—“_TmªêP3:)×ØÕfŠã!ô"<x;.]Ô½Ò–Ÿ¸Ê<44„· °«ô<È½>ÀðaûöíãòzÆÈl6îbÕEðzÙÏ]äþ¯ÿòË2ÃwwËÃy8À‹ ï‡Å0ätÏªöÛ ÆV­èóår˜@ ªð¡ý¤Ã›š×?e¿[›.¼o­«âøWI4çkÿ`7l·òv„µ&mz[Ø*ÄzlmÑÓXŽü:ö‚B‚¶Á¡}m7î[¡ÙšÓ¶X«m×N&UO[1É~Û˜Ÿr8ë×ÇÚ=*'Gd.[pÎ¶Â‘}ûöé8Ó;»L’^™ pŒ©û˜¬Ðt0ÑÇ¾`áµ»+^þ"ÿÁúðÜ÷=,ßÀ• Ü“/Eª³å0@‚´Ž_Åo®¬ž	€n}»)_ú‰×ŠKg½«Ú™i—T[Mñt}ž6b•^ÌË¹½6™Nû2ÓvàFÝ&2mº´èªuŸxüÆNb;à Z#oçXê.XxÛ¶m¼Ð]ã`­& !2ÕƒãÇy:³o' èþ*yÕî®|‰Êþ}ù¢¬ø›˜šjY((uÁ™geP3ÊÁ=5´§õy6ì¤ôpF¸_Ó¤¯u˜•±Z¼¥~ëK?lì-Ø.ÝëÕ°r›ã¸<æ“×y-u¹0v÷Ýwã
 6&gCq™üEK{aƒùCA?&Ogî‹…û­ŒwíþòKÜšÕ+Ý?}ôKî{·ÿX–AžpËZVë#,zÐO—ctÂÿí'±^\®k'ö+L&Êg4u>}€õ:)¹*»)~1É)Ú\Ý¹ëü²/1î(w£/u}Lµ	^^Z>eõ)ŸSü”>u«°¯ÓÑ¾éüLûB_´-æãº*¿R|Ø€>êB}5fÇÜ¸ÿð°0ô,u¹pøÎ;ïÄk€:é£ù‹>ß‹ *ð0Ø«+û5¿\ÞÁÅ¥Ï—…xNpüäWÝ—oüž;pè°_n7¾?ê¿¯^DÀHD‹’VÉQ^Sê€§ó”éÄu
[úh¨Ï´tO*0i¥˜0¤ü‚T•oE0}
rç*[lµ•¢ð7Õ—VévœªöÛ÷%¼æIü _e+íCÙÿX·ª}Ú‚¼–‰õ)§eÈ-oîóa?èn_p›+µÞÀ—à'_-êt®Ü½?ûjñ\O¹/e]m5Îc»à-µ	,Àe©ëÈw ð-uî°¤]og¾öÒ 54F¨;&‹-‰	 :Ž…v.<ÿYîÿ~÷¯ºÍgžæ>sÝ·dÕÀíåu÷‰G?ªpŸ%¥hj Ñr¨×e­ëC®Už®;…­‚;ÔE©£è
u-•AÁk‹zW8ÀÓú(cM…râÀÏ‡Q«ýÐA¨¬K¿‚½Ö¾õïæ¾}þ¦ôÑžö^„u@¸IécáSU_Zûtù—xÅ>²”þä~„Ú`8 Uù¢õÙGÈ†¾„ö‘/ðìN_‚?e[U¾¿è‹HIŸRúØ?Á·ÄÐÿÐ K½ÀÛšy/
ifØ€gAÿˆ<(<î_.D,×ä6ó±¤wµ!JmTñKB]è¥	@Œ .¼WR,Ôïe¬ð[ÿûÝsŸ³Ù}ò?n”[÷Ëë‚#þ¹ ¨9]Àh©³'Qê´>–G™¼l´Z(ŠUr¯»Rè¹"À¡¬›é:A_YöÙvíòÈÍ®/³÷¥µÿÁ¿¦X°7º­¸´Ç$nöFÝÒoo'´z…~Ì]_ª|áþêË8xï4+ß‚Ç¥¿ºßcòšð”›’·,u¹Ê¼K¬–¶NTÖu:ß}gº`±—' ì>@ÆoÙÎ;ÉCGä{ Ç±r)P,Ç{­|<è¼gŸé®»á»îK7ÜêÞ²Í~xKûÒÀ©Š¹”~…x»Rßo²ñVäÚ¥:[Z¿N®ªèP´J¶úU‰¶ISr¨c=iJ.Åƒ<S§ºÔ#Õ¶È‹)eRûë 3_f«¯}Õ¶4_ç)³}aÛÚŸtžÞMNNù/}¦¥Œ;d §Epƒré¼°{#õê€ eæ¶nÝzP& ‡—Ú€»Ú³7ŸáÞý¼Ù¿.øÅë¿ã¾þ­ºíOï–³ð9^}Yœ:žêÉ@©B
qðOÉÆ2°QøuÜtšÇ<‡3–Iët(ªåx¬Æ6µucòS²¬‹i,ÛÔf¬§í²Ž¶H)Ãz”Q‡rLªºqÒvYWg—2uT·Û¢Û­ª§\'”6µNl?%£åã¼–mQ–2Uõ”‹)õb¾”SÇa&†zMÙ-€h³gíÙ³g7Ð—_ÝÆ¬Ùp³÷¡›ã;Yuý°7Î/ûö·¿}@Ö®3ÐïuÇÉÛ/~áùîßó÷wÿí=îo}­;ÿÜ³ü«ƒXApzšðu	Fú›Öu©<åQ—'n^ÍË+Ê'ªò]&Uóh§ª]]ŸÊÇöP¦\ª.Å‹åQfŠëÈ×”ò”e9³t}*¯mÎ4O»Ð¯Ê×Ù¦Ž¦±¼®Kåcù™–iú:ßÔu4l“ÛËùOäâã¥ASÓÇä8G–ºŠ€Ü¶ß±cÄD„¹1»ÚÖ|ëÕ+ nwûí·É·š÷¬^½úÙZ`)æO”Ïôþüå?'_¼ÐÝûÀ#î›·üÈýàÎÜ#òyá!yF ãJqâŽ‡– c „•åp¹ò*‚™:¤º.•×r:ŸËæ›8ç$3¾Cu²uu)‹ÊÃFN]]§íwÓVªíº¾tÚö|Ùê´u~UÙªÓQ¸øý8q<y³J®vIø<>rÆê:rr9ôÓŸþ¯šãÄYèÙõöæÃ`¯N ª€ŸyjÝºu/ðz¡ã×ç^ùÒ¸K/¾À=úøvw·¬ øý;ïw?º÷'þCx]hJVÄs­~-LŠ	.ÆNHËýæÄ Üª¯¬1g¥nŽ©N„˜¦:R%CßRöaGëÅvµŽ–ŸåX§®ÜN‡õ1¥MòY®¢K¥TRrMxM|¡º]Ú¦>eÈï
­èÿ,lóáÁ¢+åc5˜^àãpý[Ìª²À¡¯ýëxÐœ ëÌ<ébîJî[¯N Ð M°ñZ†ÏË‡ž8í´ÓPoI!°RV¼ð¼³ýïu×¼L‚ÿ>÷ÀO·¸üèù¶ÀÏÜÓ»öù5Ä±¨Ðä$–Fà¯3éÕû8 Ó€¼Ï›ª@@~LÆy¶N†u¹°ÊTÕ_Œø!èCMËë<dcÕŒÏjù¸eÖÇ”²ä³ª}ÔüT^ëë|J¶¯©~•\¿]»ó\c.cè‹A‘›gß–Bsccc»ï»ï>,¤áÅ èc¢=G/M m6Afô˜Ü£ÙzÞyç±ÎhëOpø]xÞf÷ºŸ¹Û»ÿ ÛúÄÓî'<á~¶åI÷ÄS;Ý>á:ìÉC‡emq™ý†	ìû~’?þ(?áh™G£—#8Ee^IK(FüVá¸ŽeÒV¹á4m¯©ÜÜxÙƒVõkœ)÷9¢n™[±b¥\ÞKC{ªO‹wøðá-âf\H>Þ„lïþí•½`ëðAðI¹–=úè£O_qÅãò&€}	ƒ¨TPÁÈ°n­ÿ={ó3Ü5W¼Ø¿:¸ÿÀ{rû.÷ÔÓ{ÜS;v»§wïs»!™ŒºÃòÃb#øàÈØø„,;*W²q–~N®$Lù<Ý¸dô&®pÚØ†À@ õJ[ètÝ1„:G'Ê1½vÍ’zz^öù
à£ÒP|É…1´çR¯L ,@NE	n„Áþð‡»ÞùÎwî_¹råéT2ÚræpêÉýï%/º WD ÇÃƒþ‡GŽäÁÜO &ýà˜<z<QH~£29¸ãîÝÍ·Ýåví9à¯ „Š·rÓ>ƒº0©nÝ¼s59Ðƒ,')Á«V1ÿõ ú+÷E_z±ÀX?WBÌ{»/èEj»è}=4lÏ2¯(Q4Wx†gÀ´~{ñžãÎ<}S!l¹n pì±Ç{23„ÃŸ¶ÍFªëe¾×& 1ˆÜ¤Ÿüä'w¿÷½ïÝi€ªÙ•W¯Zéð;eÓ†Æ†Þð¯p·ßs™ûÆÍ·»»üS·{ï7*ë”wS~²0 £"†v?8"Ÿ•u#áŽfvLéCŠ(·‰hÁ‹¡‘0Ó@ˆ©Uä ?¼oÈ¨„zýFá`>ØNé&è<\*Û*w(ð¡£ð…Më‡ê¢Žzô‹ú¡úú&fðuÔ…?y³EZrqé~øT?B{°Oýr{ì/êS ´]èÑ}±ô±h‰@°¥û‚6[Ê"	iê°>øG¾Èþvó>ÁFf ¤¯ëi
r…÷“jˆâ/ú2¶!&ê«V­ðÇäqòÙ_LÚ/’¥Á¯zÅÅîò—½Èá- KÝC Ÿš—ûÿÛÅ"Þ ˆo„MTn.ßÂeöâ*…=wqùTå|åoPòØ +ä‡‰èJù-Û¾}û_qÆo—¼¥F ƒ®ì“Û
m{Úm•×ß¶ÓíØµ×íÝwÐ/[<|xÄŒŒÉgLå'ÏÈ7ü ‡Îopùãsõã)êÁ€é­…n)Q¾Ä”B?–M”á[8ÚËÇ|h¿ìEÎF2V¬“´›õ·ˆÊ4…|-û”5“ À3°}êuT,dÀ¡ò‘¬ªJõ½v)´Ò.Ç”>Údòîá½û<¡\¡…X^›gÊ ”ðúªßÖO´DªÞ/MÁGË™ÝåàØ±Ê'.ç¯‘üºãsëÖ¬q'œp¼;yÓzwÆ©›ÜYÏ8Õm~æiîôSO’ ¼[³fµÿNHî§eº‚€,ü³ç>÷¹¿üä“OŽŠA|iIÿðJ ~Ø‘ðó›Rè¢O½z  3lÒé§Ÿ~ú!™ °Þè"€ ½îø5þw¶|´èj9CAÂC…xÖ`çîýn<pˆü~yÎ`ßÁ!whhØ‡gFdò€«øøçðìAxþÀOÔØÍÁ“Ý-í$¾À]„¤j¤×ã~6S*M¡ [*¤7]WH•sMtâ~™fgÍ©ÆC`R•­«1Î2Ü¿ø…°§š¢OgÖhå>´šŽ‚uð-á¶%i¾oùÚÌRÅ¾’·êýä4ç…ËóxÇ_I[½ÊaÁ.ä“<‚<¼ø«%àË«»Ç¯]ëÏâ×Ÿ¸ÎmËúO<Ì¶·j   +IDATÞmÚ¸Þ|Òz™ ¬uø"¨¥ùC  fÁb‡àoþœ˜ƒ–zu (¸ôÑéó=ôÐ#_|ñ¤ÜÃUK‹AÀN–Û	ø¥^GdàGÀË‚>žE—²¬_€GGø·FÇd’ “…ÃR>õqU²ò/¯‡Ç¥ŒÉCX17Œ¯BH
å°kå|¿Çõðu6¹œ¯y•Ê1$]¡¸yVés±…Ê´­WVhÙB¨Èeõ-áKçó3yŸ/çH6C'ã…¢Ô{vL¡šéæòAÆó…7¸|…[%—Ýó·ÃVI^‚øj	êà¯”`îÏÖ%˜ËYø	ì«%ÈCyœÅ¯
9é>£Á†è®
ò~‚ :–»wï¾O<Â”{öÈªŸTõNêµ	 @çÐ(ë±üúë¯ü­o}ëîU«V=CY¾wÀà‰ßÆ'´uúèÑiEaR®*õ_B“òô´›òeáIÞËÈ‚G ÓòÃ[ã2	ÀCŒ~2‘M2?L|¬«Žuð…5L>&±Îº|[aLÞ|˜š _ê¥Iy¦2G¥ÔãklrßPÞg¤}¬ÍêÿÉŒ€“>0éw^ÏG.L(8© LàcÔ)d²,‰¿?ìå •Ÿ½‚Ó½´Ln¼e¡Ò²°ïo{7H‡Àk®¾äó‘~!ª`ò¾y^dä3—þa·åËåR·üd"¹|ù€[¹r¹Ü_á–Ký
	È+W¬Èê–K~Àß3ÁwÅ xƒ>ÃÎŠËål|•§°ƒ³r”Œ!¿RêÐ–<d78(“A¡Rð¼à“ø2(öpv¾uàKÏ¹Xê]äX<*'•IÂÁWþèù=×É^š  d}$¡œú-ûìg?»çýïÿV› ôÜþ8#‡ý€,ƒíJÿÈŒLx%[žù{š½ÕcqDoI”E4ËËcwôÿO*q¥·<¦0Q‘	Â4&~¢MH0Añ“ÜF”Û#’‡Ú˜<*¯RŠ>=
[Ù¥xT"¼ÏûñGä¡‡=Lræ"áIó	‚ð‰Ø‡âs|,#°#P†U&CP÷:ËÂ%ìA	Þ¬°‹`Œ ï'‚­ØBpGídTê89@;¥	‚¸Æ:!ï¥üƒÁ|ŸòÁ(-2‘ß{ÓM7=.Eì´8HÃ)™,r=ø·—& „àë#”CÓ)ù4ðÝ6l¸œJFv0 ´“³zCÀX:ŒŽŽnýÐ‡>„Ï #îè8ç
yÈ/ú„'é{1äJúÀÜ+gHssÔ‹ˆ™Ï†€!`# «ËÞ.JSòC¼aLaìÑöÀë©Ô« ‚Ì )6ÐÀ—¾ô¥ŸÉ—wRÐ¨!`†€!Ð!Sòþÿ=¢Ç˜!yÐžJ½>Ð`sc€|úÓŸÞ-¯n< ,o†€!`4E@ÞÚù¹Ï}îa‘G¬Ô1†W`
üžL½6à ØÌkŠ‚2è”|à{B-†€!`#pðàÁñ‹_Ü-Š¸ÿÏø‚ƒÄØJ=ø·×& „˜ enRn¤o¼ñnyúz˜JFCÀ0¦<üðÃ·Š,b
ã
ãLLa’<ä{"õê àj°™×tàoÿöo·ŒŒŒàýMK†€!`†@cäõ¿ý×]wÝ]¢À§ÿSÚCìé¹ÔË ‚­ƒ>ó~¶6<<<¶uëÖoQÐ¨!`†€!ÐC‡Ýó÷ÿ÷OŠ,â$c‹¦0Ã2ò=—zq g4ž¡¼ìË_þòmv çöKsØ0E@^%¿IÐ¯ÿéxÃü‚ú8ÛÆ{qÀ>c0qc€ê‰Àà_ýÕ_mú1†€!`uÈ+ä»åÓòwˆLüðŸŽ/Œ;0¥óu¦U]/O 4è_S¿¡ä5Ž	™É}}Q¡nÎ†€!`,ZvíÚõ}Yýï)q1’ATÇú^O¦^Ÿ  t‚Ï£7òƒÿüÏÿü=™ìèÉ-dN†€!`Ìò]£·ÝvÛõÒ`Kcb:o¾u»!\ÞèÕßñÃ$?|¨?|ß ?|
ßÕ=öøãÿ÷Í›7ÿºä-†€!`Id¹Ÿ¼ô¥/ýuù àa˜Œ~x& ?|ˆW@‘x2J=ð·_® è7
xœÁ¹¯I’OŒõÀ61CÀ0Y@î«ü‡¤yCt\ÑžyÒòzfÍöÃ =øøq#1ð“þþïÿþ}û÷ïÇG,†€!`-ÈÃ{?ð|S*øðcãccN‹^bôò€ ISä¹á<˜˜ÿÁ~ð%K†€!`†€Gà©§žºñýïÿRà€q&üŒ7=\/O 4ðz#•¿±<ø‡ø‡·Éâ@¶2 FÎò†€!`NÖ‹9ü™Ï|æ‹E|Éûýœ-Æžà¡¹^N˜¥ñ‡~0‰MËoïÞ½ã¯~õ«ÝÙgŸý*[2CÀ0€ÀÎ;oxýë_ÿiÉ"ŽðA?=à$ gƒ¾ô'O½~ 5gý zãþÁüÁMò”çÏr,c†€!°¤ÄG?ÿùÏ#øëxÇ8Þôü$ ×¯ `§åY¿Î“‡	ŽÎìØ±ãˆ\˜¶« €Ë’!`†€Ä…$.|RHýÇ“N \OOzý
 ÷\nnÒÔ•€Áßùßù†<p•†€!`,MpïÿŸø‚¿Ž:x‚2ãLß ÕW °10kcbžgþ ˜èðjÀàîÝ»Ç_þò—œþù¯>å©oÔ0C`‰ ðä“O~áoxÃç¥»ˆ8ÛÇ/õ O,5ÑÞMýr@o½q8‹Ó—px÷»ß}³<x›V´¼!`†ÀÒA@Þûßóÿð—#n ^pÀ<Ïüu\é€úå
@¼Ax¶Ï« ºŒü€Ü˜’¥w¾øÅ/~Í²eË°\°%CÀ0%„ÀÝwßýþßüÍßü–tq!>ë×'Žœ Lú"õÓåo{Pä3ŠI¿€@¯Ë¶lÙò'Ï~ö³Mø–CÀ0–røà+_ùÊÿzß}÷aÙ_{¬û?‘QLPÖW8	àÕ ©îí„@Ù/‰%E±áðkÙ˜ôGôá#GŽlë¬†€!`õÈk“_ùÊWþY‚ÿ!‘DÌˆcÊq,©7Úƒµýv€W°)Ry^`Ý >úpÙe—{î¹×È­ ð-†€!`ô1òàß¯¸âŠI1æãl_ÿâÉ@<@¹/R?]àIm,ðâ« ÜÈËßò–·|CVº‘Œ†€!`ô'rÅ÷)¹òû¯Ò;x¥8Ž#}	F¿]ÀFâÙ}Užõ¤ò$èôØØØÃ?/iùòåÇ÷å–¶N†€!°Ä8vìØô7¾ñÿñ'ò'w	©³>È	A<@¹oR¿N ¸äA‘tYç—ÿèG?: k”[?o·Xö×0~BàñÇÿâË^ö²KŸpõ[_ö×üáê0& þ’íÏÔ¯· ¸µ°õLŽyRÞ ”A|;•†€!`ôò˜‡û·ûŸ¤7ÿõØÏ€Ï¸ ÊàÓþ #ëE?N Ðµx£é‰ 7</õ œçåÐÿÏ>œíFCÀè°Üï¿ÿû¿ÿO¹ü¿;ëã )'qð‡8âG_¦~¼À¥/ñƒ×î6 ê{ì±Ñ“N:éÑK/½ôêãhÌ¨!`†@o"pÇw¼÷Ío~óõâ}|é¿t(õñ€ÁŸ´7¨ðºŸ' q—9! Ÿå˜ÞtÓMOË«‡Î9çœ+íy ÂeÔ0ÞC@në^wùå—¿Oô†óø¼ÿÏ2¯ ðj1(½×é†÷ë- Ý}ÎÜ¸1A±±ùã wˆå×^{íu>øàGµ!Ë†€!`ôûöí»ëíoûß<x0¿Í+ÞcÌçüªàÏŽ2†°Ü7´ß' Üp ø1è3Ï€”“ Ðe¯{ÝëþU¾}Sßlmëˆ!`K¬ðúß%Ý~ûí¤Ëó1ÎsŒç˜Ïà¯cãiß"Öï n8nHR½Ñ¹#´ÐmÛ¶½óïüŸ2{¼—†Œ†€!`,n¦¦¦~ä#ùoÿøÿ¸U<Õ÷ýãq>øÑ9ÄŠ¾OKå }Ÿ•en`”‘4EŽìß¿ÿž«¯¾ú¥+W®Üè¥ì!`†À¢D@ÖùûêW¿ú¿ñ¿ñq1NŸõ#ÏI óöñD@Xý?	X* lÌTbÀGóš"¿\>y`ÅŠ÷ËBA/—•OH2ž!`†ÀÂ" +ý½õÖ[ÿúµ¯}íuâI|æOôAyu˜ta;2O­/¥	 ;¡Õeæ«èŠ[n¹e×É'ŸüÐÅ_ü
[.˜5C`q €e~¿ÿýïÿÃ•W^ùiñÁgú<Ë×yü9v~Öo· €FŸ%xþt×4“ ÔkþrYDâé3Î8ãá¾ð…—®Ñ,o†€!°0Hð?&ïúÿÓ+^ñŠ‰·y¶SL
tðç?):°$‚?:º”®  ¿©¤>êYNÑÁë¯¿þ©3Ï<ó‘ç=ïy—Ê•€µ)ƒÆ3CÀ˜pæ/ßryŸ¬ñÿQiã6Ïüuðç}RNø5ÇA+6(o}Í%tðk_ûÚ“¸ð‚¼àRy6`¶¼!`†Àü  ÁÿèøÃÇ³>žµÈ ÏI >)?/û“.™³~½e–ê€ÁœX ÜŽ§ëåvÀö5kÖÜ‰$y;`=5CÀ˜{äiÿqy6ëo®¸âŠøž?'šVM ´£Kn°T' Øè: ë@×i‡ÌòoûÛ;åÃAwÊ¥§‹Ž;î¸Sb#V6CÀè>“““‡ðªŸ,Ö†§ýÇìñI_ô™ƒ¿¾Ü¯ó¢¾´ÒRž `K#¨ó§·¼öUyÈÊƒ'zè¡Û®ºêªÍëÖ­Û¬XÞ0C »ŒŽŽnûð‡?üÿDïùÇÁe~Òøòÿ’þØ*:¸uw+õŽ5N Hñúˆþ-—2~˜,1ÓeçŸþÚë®»î=Bßf¤,†€!Ðe°¶ÿŸÿùŸÿ¿ï{ßû¶ˆévgþ¸€àÀOªïùc€DJKè¯M ÂÆfð'Õ äÛM Pïun¾ùæÿí•¯|åïØKè(²®†Àœ# _õûÊ;ÞñŽ÷ÞvÛmXÛ‰—øS|üèõ@ŠK7ø£óKý 0@êt"„)Öñ“‡}ìcÈ÷_pÁÏ]µjÕIÞºý1CÀ˜²®ÿˆýÿõ’—¼ä_e0šI}òüõ?ƒ>)ÏøIgäW?(Ù ØŠq@/j:ËÞpÃÛå¹€ïÊ¢›Ö¯_ngê&m†€! †††þÐ‡>ôço}ë[o”§þÁâ™=‚½ÎWÝó‡Œ>ó‡¤%üB·‚lõC"þl^:ªo`Â¤ñ³ úVÁ2Y#`Å7ÞøÆË.»ìÿ´	õÃîa}0ù@ ï÷?úè£_þÝßýÝ•ªÝÒ&Æaðy¶OÊ:PÌðÓÁ_Š>è#ð[ð’ì
@ÀAÿå$@ót;O,ïP^3VÜ»C–>ýøã?K²¼!`†@yÊ»,¶ö×—_~ùÇd0’Õ2À3àÇW PoÁ¿eÛRÈÚ*,âÊŸ¾€<¯ð¬åøŠ yÓ§œrÊšÏ}îso”5Þ%ÏlZ"8Z7CÀh„€œ0MmÝºõú?ýÓ?ýÐg?ûÙ§D	ã';¿ž0Ožõƒâ$	yþ<Ãþ °¥4œ¤k.v¬8‘G:0222ýoÿöo÷ïÙ³çûÏþó×pÂ	Ï’×1‘°d†À’FàÐ¡C?ùÂ¾ð×W_}õ'|ðÁ!ccê,_OøIð-øw°'5r˜ì+QâÃ«  Ø1I1ÂWx5 ŠrÂ5øÑ~ôozÓ›ÞµaÃ†ç‹¾%CÀ0–ûî½÷ÞO½ûÝï¾îî»ïÆë}#Ðõ ¼¸L9~üyòÊ¼d-ià4Ïòeˆ(z€<' Øyüuž<RÈ}îsŸ{â¿üË¿¼N^oùUù®À3…gÉ0¾G ¯ömÙ²å†¿û»¿ûÌ?øÁ­ÒaŒ—Ô:Ðë|*øëÀÏ¼ø:ß÷˜Î¤ƒn3Ñ]J:Ä‰ R”±§~úzB@9èM¿áo8UV·zã…^øfù¦À©K	Xë«!`,Ž=:¶mÛ¶›%èæ/ÿò/’ž#HcäÙ¼úqže{äuÐGž‰4”ìo ÞR3ˆhüãD@_	`×TO4L¿ímo;ã÷ÿ÷_÷¼ç=ïrEàÍÜ2)CÀ07rÆ?úÔSOÝòéOúüÇ|¿x‹ î¯„fy”ùãÙ>Ë¤à3èkª?ƒ>©¨XªB€A­ªÞøeˆ' ¨ÅNÌ2'î©É@Õ€ò°7}íµ×ž&É5òêà/ÊÃ‚ÏÓ’!`½†€ÜãßÿÄO|K€þšœñÿTüGÇx‡ ÎÀSN ðQOùºÀÏ O*j–ê`@«“±ºVðQÃ<'¤ê M~œ0€"M_tÑE'þÙŸýÙËä}Ø×ÉòÂ—È÷Ö„*ûk†ÀâE@žêTVC½ñ#ùÈ·e%¿'2O1¶é@þª²ÖA?ä‘XfÞ3íO{lÐ£*	bÇ	€¦ØÑã_Ý$ ²¬g6qP¬”+ç½å-o¹êœsÎ¹R>;ü¬¬Nˆ%CÀ0YðlßÎ;tË-·üç_üÅ_Ü#ù¯8.ê ®=ùúlŸõ¬eÀg>ú([êlK3G€øq'‡%ä¼AõAeûº2å¨ƒÂwÞyëï÷~ï¢«®ºêò3Ï<óek×®}&ø–CÀ˜oäÿ½{÷þäþûïÿÎ§>õ©;?þño0VaÜBBA›ÁœeÐ8¯Ë”gÀ'eà'3~r j©CÀ:T3ñxÀ2æì‘ƒ>½æ“§)òø!á`¸ôÒK7¾ë]ïz®|tè%›7o~‰LÎ<ÎKØCÀ0æ #GŽ<-š=pÏ=÷üàë_ÿúøÀ¶I3øÆ7ŒQŸðc@×yò@«òÔGG^S)Ú%€Ð„f©;KPæq0°Ì<(:è3:äu™<ê‘òÀX¶iÓ¦µïyÏ{ž%K_ ¯^²qãÆóW¯^}ŠLV‰-K†€!`Ì¹´¿ûðáÃO=öØcwßqÇ÷ËŠ}Þ|óÍ{Å8Æ"Œq:P3°3³ÜŽR^Ûâ™>©4Uš  li†0PÍPÝÔ"ˆ§¦ÈóÇƒ…Tù&yþ…+<påUÂåšg^rÉ%çÈmƒd‚ðYcàdùÁI²1ÞF°d†@	ÉÉÉC¸—/ñÉÃûO<$«ô=,ÁþI	ú»D÷é9~ñDî8Ï >ó¤š‡<íiŠ<¨Î{¦ý™T³³bÚ1Ä•õÌóàA9ÈÁÓ“Ê¤x¬£-MÑ&*è®‡6]yå•§Ÿ{î¹§ŸuÖY›åEgË…gÈ§Š×É'Ø[€Ì’!ÐßÈGw&å½üáññña¹œ¿ïàÁƒËâ<ËC{OIÀßõ¥/}éiy˜oTP@ FÐÅ8ƒ±‰c
(¡,x:ÀS&Å×:°ÐÔOØ>¡ÎR—àFí’93£ ¶š"Ÿú1k
¹º ¯ey€jÊ¼nOd°½L‚þÊk®¹fÃÅ_¼áì³ÏÞ “‚§žzê)ë×¯?Y>_¼Qž+Ø 2˜ ¬X)·V‚â'W`Ã’!`, ÇŽsÔ'„N€Êj{ ãX|GÎæÊ‡Èí‘‡õvïØ±cŸüüìg?;pë­·î—¯ïás»Ò8® Gz¼ÐyÊ3`ër*OhKëƒÿèƒ¦È[ê–æb¬©Ê:Ïƒ<æ5Ÿ“‚”yšÆy”õ½ç‡R×¡m'“U²&ÁÚÓO?}µ¬G°Zn'¬>ñÄWË"E«e’p~ò¼’\LX¹Š?™4¬–‰‚åË1Y E_AÄB~hËÉÀ5(ùÊÉä¡+¢^:–ÅŽ€â)	Ä~¥„€-iDfRÊÓB!wTä‘Ç¥öc¨•3õ	¹4€>&OÝKq|\û„œ½‘À>*¿1¹d?.gòcûöíÛµk×˜öÑ‡~gñ²h”yG8¶y<y‡¤LÉæ²äUQØÔ?ÊižÎ³^SäùCÛq<Ks€ w€90m&#ˆ5hœ'”'ƒ?øÌ“j^*O¨þÑ¶æÁÕT™|HúÀÔeê‚‡<ó¤äÇ´]½–ïDVëYÞ˜/x¼Ôµ×©åcÊ6p\ècƒåXeÍc9E¸Ég^Ó82Ð‹ó±-–A‘X¥ÂO–v½ÃtÙ´™K  ñæ
1æS”»ŠúKùb#®‡-òh7.“ŠÄr*Ož¦qe$Ú¥âo¿°œ!`0 ¦ˆët™yRè#Ïr*O^Š2À£.•'/ôšëÆíÐÇÏÒ"`ò‚[cZãŽ<ËÌër´u™yRè1OJ›q™|Má2ËÌ“‚Ï|–ÍýnZ®’#ß¨!°T@`¬J©:ÍKåÉÓùT™ü*ª:|ämø¡«åªl‘;È#Å4píïœ#ÀA}Î²’hü™×ùº_ÔY&E£Ì×Ùaä™Eª¢º.Î§Êà1Ñ&ËF¥Ž ƒ`q½.§òäiçQ®â1˜STótž2)úÃzP¤*jíï¼!`ñ¼A]ÛÞÌkŠ|ªL~EðGJMÀ‡ehƒ|”™OQÍ«Ë£.•h?Ug<C`)"ÀÀXÕ÷¸^—SyðÈ×4æ³¬)|HtÊÔÕA—r H1Õ</`æ[fþ1OµÈƒ#Uë¤<ëÊº.ÎÃ¦æU•5y$è!‘ÆùT<$­8Ýù;Wv»ãYéwx|v£Ÿu¶Ruä‘Âæ5ÕùXu©åRu1OË2Ÿ¢š‡¼¥DÀÎ¿MÓzÛ0O
UäYNåãº”LÊN|Mã<ÊHl;”Âßõuu”1jô¢U©ª.æër]žušÖåã:”c|ùäiçQ¶´°wl„.èíÄ<)Ô™ÕyÖ5åÅò,kç›”)ƒÁ‚¾€7ÓÛàÀ4S{¦gÌ½?vk_LÙ‰yueÖ‘¢Ìkªó”iÊ£¼¦uyÔYZDèw¹e®T o/]NåÉë”¢ùXGóèeªÊäkëè:ËKß:b™º²®c>¦h¼*>ë5mš‡œ¥EŠ€Æ‹tÃ4p+Þvº¬ó0¥ËÌ“VÕÇü&å”xqÒmÇuV6–*ÀíúŸ’‹yueÖ‘¢½T^óªdèk,K¾ÑEŒ€Ä‹xãtèZj[jžÎÃt]9®£+)~ŠW'Ï:£†€!Ðº ›ªkÇ‹ëg[nÞ“\4ÔÞ‹ÆIsdFTmÛ˜—ÙX§|èUéÐ¦QCÀ˜=q°Ö«ê:á§dS<Ý®å{°{p£ÍÂåºí=Óº*wêìUéß0ªè4×ÉÏ´®Ú;«é9lî¹M6g7ÝšÊÍÆÑùhc6þ™®!0ê‚îLì¥t:i£ÙT[Æëql íñ¸ îÛ>³  [“†@X`ï ,5CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0CÀ0zÿ»†ºÜ‹Óü¾    IEND®B`‚‰PNG

   IHDR   @   @   ªiqÞ  ·iTXtXML:com.adobe.xmp     <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about=""
    xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
    xmlns:exif="http://ns.adobe.com/exif/1.0/"
    xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"
    xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
    xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
   tiff:ImageLength="64"
   tiff:ImageWidth="64"
   tiff:ResolutionUnit="2"
   tiff:XResolution="72.0"
   tiff:YResolution="72.0"
   exif:PixelXDimension="64"
   exif:PixelYDimension="64"
   exif:ColorSpace="1"
   photoshop:ColorMode="3"
   photoshop:ICCProfile="sRGB IEC61966-2.1"
   xmp:ModifyDate="2020-06-16T13:20:33+08:00"
   xmp:MetadataDate="2020-06-16T13:20:33+08:00">
   <xmpMM:History>
    <rdf:Seq>
     <rdf:li
      stEvt:action="produced"
      stEvt:softwareAgent="Affinity Photo (Mar 31 2020)"
      stEvt:when="2020-06-16T13:20:33+08:00"/>
    </rdf:Seq>
   </xmpMM:History>
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>
<?xpacket end="r"?>&~d  ƒiCCPsRGB IEC61966-2.1  (‘u‘Ï+DQÇ?óÃüh‹—†ÔDJ	%Mc”_›™7ofÔ¼™×{#ÉVÙNQbã×‚¿€­²VŠHÉÊÂšØ ç<£F2çvîùÜï½çtï¹àŽfTÝò@ÏæÍÈhH™™Sª©¤/bªe…Ã”µ·\N¼êtj•?÷¯Õ&4KWµð j˜yá1á‰å¼áð¦p“šŽ%„…;L¹ ðµ£Ç‹üäpªÈ›ÑÈ0¸„•Ô/Žÿb5mêÂòrüzfIý¹ó’:-;=%±U¼‹£„Pg„a‚tÓ/sNzè’eòßù“ä$W•Ù`“ER¤ÉÓ!ê’T×$&E×ddXqúÿ·¯V²·§X½.¶ýÒUðY°í÷}Ûþ< Ï=œeKù¹=è{½PÒü»à[ƒ“ó’ß‚Óuh¾3bfì[òˆ»“Ix>‚úYh¼„šùbÏ~ö9¼…èª|Õlï@»œ÷-|—»gü²Ï­   	pHYs     šœ  	NIDATxœíZkŒ\UÿsÏ½óžÝ™í¾f»Ý…Ý®–Ð6Pª¬–gÐDwQ0‰øAŒVƒµÄˆðAˆ&Äð¨	&`¿((Š˜(©XˆmåU(ûj»;³÷yî9ÇwfvgÝîcæ¶Ÿæ—œÌyþïÿüæÎÿÏ¹@M4ÑDM4ÑDM„†{÷HýüñC·Ü»ÿ@*lÙ>úäõ<ü‹Á°äia	Z£mãgž>¬žxý­™+»î¡éÉ­0ä_~Óøï¥ŸvçgÉÑþñ¹0dÒ0„,Ë^° ´DçŽüÅ7=6>6F•yéö+{ãƒ£ÉÁ£;Ã	œÆÇÆˆ¯·ŽÉ!…‹Åèµÿ-¥¿Ù¨ÜüÈž0SJÀiS{çdOãÚžŽ½s²ç´)*eÛµá¤6ßÙåW]P¯Ì«®ùÜ®·g/DÀaPÀ´Üd:³a`õ‘«#trÝ™–›4( ¤„A™9+’øäõÊÔº?þ£¹y³Zö¸D<×wqú†N Kä†Ç®©Ó‰Ä‰bôÚÑn¹niÿÞBÁÚ2’Ú2’ì-Œ¥íŸþìWv¿5-¯Ð‰¬ÖÙ®ÉnEß0„,†Œd·y®	ÆjE;Öæ³èÞ™÷ôÜ6o¤z<¯±lÕEä}·§ŸÏKnMùÖ™ãŸyÕŽößæLÏ1¥ˆðañÈGÇÇÆÈSªFô £0) Zö²R€Q‚‰3î°1põ/uL¤2!H ÐŒ ?!ÑÜÀn 8>í€QRíSéªÂá#G³ fÑ7Ô%0´e$iûd!H‘b‰â
’;PÂƒ ý Uûe%<Hî@rŒãC#
ó¾ÞÒÑ](4ªs¨$[ó]E[f4ˆò¿«ªI)	¥T5Õ¢ÒoImMÿ9 `[&ôxfs£:‡J@vCßÆ’éD*å³O¸¶íli¹þAA‚s,ÙÞðFêÀ¹a¯ä€J	@‚ÐðMUÙ?¤é•ª†Š%û•ï.”¥=U „€ÍI£!q¨`úZ¿)›*Ñ ¤÷8¨F!…„nèÐÖaŽ³@(Õ(]Tð	ÖÓ¨'€ñ±1ò!5ú¤€F B % „ÄÔK?«þK…Ñ»¤´¯ÇõkÆîúâ~õÆ;§54P˜¦•îè.ŽüëuÚ8|ähÖv¼n¦É`§V
–í`âÅŸÖÌô½çB,Ç”Z1))j& />¾HéW=AÉrI£ž 4èè.&-Þ P2pj‹}übHJé+ÊKŸšá
 ¾miˆ€Ð,€©nÛ2	 ¥ %aDtíº³ÆŸmúÔ·•1 %WL!Èmß[3vÏ×T  ”€P
Â÷ ´èP#z‡fñDj£[” eóen¥Èmß«ÒÉŠó&,ÇÎX@RRÿ6Õj¨bÑrÛ÷ªX4¡þ~ø*yª$<_À‘±†¢ÁÐ,@è©‚ð½rÄA•£QƒÁrDt
F	” J‚H®e"“Š#“ŠÃµLéWÇ*)5¸ïCŠ _[Ù<×îÚ2’¬WïÐ,@(Úçû@èÂ‹NZy;«Ô»\¢§£M¼öì~vjQ¿­7îóßŸ<£EtºÌØE+BIèTÀâ¤;Ùšïp´½C³ GÆ
Jðò.¾òú†’ˆ0 4oj 00z§öŠÒ¼©EÖ # £hzZª%×U¯Þ¡0´e$é¹v' H%!¥XÕÍnÒFö²Û”eÛ5ùµŒ•Krm=^÷q[(K ‘Ê´Yœt3"A"¤ªàj0™z%¿–±¤lŽãÂˆ¥ëv…¡jÍ´¿[6ç 
5*å¥ùåêÖÓ^} FæY÷i(K€©ná¹ PRU¬(¹4ßh»RRÏ>WZÝ/E¡X@<‘ÚhO8 J¡Ú9FpP¤  ¸¯ÿwÀüzå¬›€Hªc ÜÒä•:_±Âç ”€œ›Ë¦³Bƒ„ãz™z]áš	èÜºƒf6ß_tè-­­Ø”˜¸äÏ=ó* H=Ñ+ø˜Á–9Ø:‡P„˜¶«u¶æê"`MWÏðÎ¯j.ýÓé’Eg¾MÜ½÷ºG&N¯>Œ{~PTÖ„–ÊÏ4Mv®wòÀ, wpë­mó#§f¦ÙÇ.™»é}ãÖÏïy¢Ú^(¶`½8 ZŽÖ!ÕÈmq¾‚pÚƒ€Hø±x[]±Àªäû·ÝsôýÓ¬·§K\³óÂ[ö~müÐâötk{Ú±¬BœÞ.ôYæL4´v¥|îA’HßjsY+.×ü§{ÖäÛ©°qépáwßºãæCKû$Ò­Çõ26«›íjËd­íµý ­?t(‹öKfBj1LO}øær}R-¹.Óvƒ÷Øµu+JûÂo`
ÓE;SO,°6Ÿ¥ÄY£-Mv:Ž Â®!Ž3I%Á(091µá¢-Y÷kñŠHß9‘N%L*=|09;ºÜ$Í	î‚(	¢dð2t){_Èl<ë•€÷ýðäð`Ï+œsÌÎÎ%fxû3½ƒ[wÔÐXFøg"ÎW
&!aÙŽ¦kÈ¯—€½ÀSªïß½ÿÁ£owízïý“ 0IlúKö‚Ìï½ùSkiky÷ÄDér
	)ÎÍMÐj¨\–pÏƒÐâ¹õŽ_ÕÞwÏ¾C=ùì»úõ]“š‹Æ’»#™ônÀñw'ªß,¾¹9ßàœ#¢‘ôzÇ­)¾õæ¿÷«ƒ¿zþ¯o|ç…?¿Ò1[,¿lö‹?„`Úù· _TÎ=$‰ð- ‚/ÝðÐ·ßþ›;¿<z½é’+‹–·©X²R§çÌö7È‹%åz±ËWY¾ÿÿwR¬ÏBèYeŒÁ÷}0Æ ë:±¨Êg[H6×n.;`Ô}±8>6F^zùe}ÏÕWçÛ;û¶¥[Ûz<.òºms\ž–ŠÄ©Æ¢ŽãF,Çb1 à\¬x+¢ë )üêÇFñhÄŠF#®¾C‰²
}ï¥dÊòÉi^š<>wfæõìûni=óåcÃõB)µêª„³_5ÑDM4ÑDM4ÑDÃøñ
à“í´s    IEND®B`‚‰PNG

   IHDR   @   @   ·ì  
PLTELiqq~‘+.3CKW*,-6<Co{ZYYÿÿÿlyŽGScBIQ0P{ƒ…‡A_…Kf‰59?/R+>*Dj Ev@\ƒDO^ITb:UzH^zM_vNZk5`–ˆ—¡§±JYo™¥#:]$0‹›yƒ”‰–?m0R:c2Kp’–›9PpK_xAa‹8Z†/YŽ“›Ff6ZŠLc‚—£²+O€Gk™P]oŠ–5XŸ¥°N^y|…gffŸ¨¶>Qm–œ¦3EbÕÙáÓÕÙ <eBrN^vDPa„Š“‰›"8Z´»Æ=bI[rCXv8Y…+<R7Lg!FtQb|cq‡/&B]m‡"7XD[}_oˆ6W:fEy*N9d5_.T-RH},P4]0W/V6a)L2Z7b I~1X>lG{3\=j@p<i I?n!L„AqBs K‚ADv?Cu9jG~&Jÿÿÿ=m
!E;gJ„=r7c"N†6e1Y#Dp$Q@t;n3^*VL‰"Eu.YCwAs(P)S3[*P@]…Vq—½É×ÕÜæ;cˆš³e|œ*Jw >i•§¾m…¥ßäë(=_ÈÑÝJh%9Y€•²ª¸Êd‘   ^tRNS Ë@&ÂÐY2ü³£þcüâÈMFáªqmó©pNô:±¸ŸÏ•¹ê:Ñ‹ÒÔø$Âð’^þÐjü†¿N—°\*»8ûÛžf€‘éeæ€ÄíZpÅíØ‚¹çÕð¶Â2ÿÀ  1IDATxÚí•çWÚPÀAZ÷¶î½·uZµµ{ïhPœ-bD¢a/Ü{kmÿÇ^–Ç‘ñ>úÁïäæÞ“÷KÈ}ç…sÃ×˜°š0ªrf%ª xþ}ÀÕêÛùjTAÄ¼#\p¹™j®ƒ"
‚:³ÍñîªÕœ‰&€{ÙÌA‹sJå\ šà\«4‡_,V™•JG2š Ùµ#DñxQ©CÒÄw¨UÚò˜‚Âü¸¸¸Gù…1ñZw©í-VijµB¡€çJ›M« ´wPæó^ÂÕÀO½@¥g.ET1Òz €7q”ÁHM°ôP3¢-Ej‚V$¡B$Z
GT/‰èp–£´!Ü©Ñˆ–,NËy‘ÅbqŠ4Ë(m”Y¦4çß“CD–Ó­­ËQ‹Ð†€781åÚÔëõ¿]S>b[¯ßr„¡!µ¸Š =’ðGzý‰kYµüŠ]°€ã*?<ú·€«ü›ÛÛ§.7$±R–ÇÇáJr4€7p@Eªpãd<» Ô “÷Qfßß·{Sƒ;%y¬‚$rTæ‡ÝÛÝÝ%ýù¨)4ˆUo=cfcÆY:fZ`Ý”x‰v“iÌ	û¹Ô${Âº!†Z…&:„B{ë2˜±vu	…žq)Âè²Þg]Ã` Áj-°-ëÀ0=³E}lo‡CÆl÷ òXÚ>fÿX<e°(í¦G*Ý¡ëcLçjl+<ÞëE¹”ùl0Íý;W¾µAŒJÄÖÖäR9àJ\Z¬§t¬Æfºc@6=ÄÀôêcÊù³tß½{z,Ö÷ËÇôå¿¾•fJÁÉªw‰î`ý}ô¯”¨+Þ%¼†aý`ëÏÃhþB–§Á)˜D‚1 Yo¬¤ÜŠ›â¯ÙpR¿.aFÜ[Ì¡¢åØ(Žþü)¦C,îeB,Öer(ijœÐÁ\˜c‡šô/ÑÆ‰	£N7È„N7™Î¡á^C÷ã‡ãèA#ˆ€És@
ÁýçÓg-ê^KÃÓgyi9¹|>—{Û—ËçóssÒòZ›ÒkŠÃ8ÈÜòÃ¹á†kÎ_hºw¼×    IEND®B`‚‰PNG

   IHDR           D¤ŠÆ   gAMA  ±üa   sRGB ®Îé  ÎPLTELiqÆ´™Ý±y·ŒkØ²Ú¸†Ù´¿£{ÏÏcÉ¹œæË¥åÊ£Ý´Ý´}Â±–Ý¼”áÃ—æÎ¨æÍ§åË¤åË£èÍ¦oeTÝµÛ²~Ý²{Ý´~Ù³}È·šÝ´~Þ¸„Ý³{Ý°wà¾ß¾“Ý¼’àÁ–äÆäË¦Ñµ¼¬‘èÐ¬èÎ¨º£…äË¦éÓ®¶§ŽæÎ©àËª®ž…œwéÔ°Ýµß¸„Þµ¾¯“Ü±wÙ­wÚ­vÝ±yÛ°xÜ¯wàº†Û³}Ü±zÙ³€Ý¹ˆß´}âÃ™Þ¼‹à»ŒÞº‰æÉ èÏªæÊ¤Àª‰¾®’æÊ¥æÉŸãÃšêÔ±âÏ®êÒ°Åµ˜   ÔÀ¢®ƒèÒ°¼®èÑ­ÜÅ£å²ß¶éÏ¨æÈžíØ¶èÌ¤ìÖ²éÐ«êÓ¯áº‡èÎ§çË¢çÊ åÅ™æÇœåÄ—à·‚êÒ­ãÀà¹…ãÁ’ã¿äÂ”á¼‰êÒ®â½‹äÃ–Þ³zßµß´}ëÔ°ß¶€à¸„ì×µäÁ”åÆ›ºŸyÏ°…¶šsÛºŒÖµ‰ãÀ‘à¹†À¢w–}[Á¥~Ê¬‚Êª~6-"iX@¤‰d„oStaG#Ó¯€Ù·‰Ü·†­‘lŠsT
èË¢{áäc   \tRNS ¤ø8«ñßzo›,€i:Ôé"¸Z‰—2¨RîâÔÝQ"t´LdˆZüQ1±{ŸëkSËlØÔ“±/î¥·ø€Ù<rñ–·§Í÷Rj?Â–åü‹Ö	õˆÄ6úš
`3³‹  ÜIDATxÚuÐsÚ0à‚Ë†²›½wÒ½išî½G ¥Änmc+;éH÷ü·µC|b¸t¯ôéNºûâ…
æºªºëDÅ‰éìåNž6¶€ ìÆ®Ê'š’Ñ_öÀ©³eh›$IäÎyIšë@sk:“É´´u±ÙìÍþú9¥²Ó LM+étzeAQ
¥h¥@¸Ž-T[n2ƒè=œ]®’=úD}tû*Krûœ	Ä ­!øA\áÛ—OQ!*¨¢¿w
âEóœ(î¾îˆ*AÜ-ÖEî2ˆn–ã>>~àJ~ýù±Ã±Ýeÿ”ßbYvmƒÕ|ßdÙ­<éÓÉçß–l¼_Ý<Øæy'4=‰Ï§xÅÚúê;eQËT¢š¾xb_ê SûïƒæR±¯Q,Þ¦?øZG°ŸÒš¸Ôu» Ü×áòÆ^éˆy{A{,–pZC±ZCÖ144ZG)%Cz–,·092J–À’ŽÀÈ ¬& Ã×ºÂxŸð„™°†qã¹<ëíŽD’£LE²4“Œ2"“x:%ß½?<.Ë²<óàT.—{ù?O Ê÷øÁ£{‹9]‹³PÑ}3ÓCÇCû!U»ÁàpÜš˜žñýw,1–b    IEND®B`‚‰PNG

   IHDR  _  _   Þk?³  PLTELiqÅ¥z      
¸xq`I   Õ®zâË§zo^      Û±|Ä©„   Ë®†•|\¯™y˜†k³–o{_Ï­€£ŠgÕ¾Ú¸‰d[M   OH=;5-Â®Ï¶“ÙÀœåÌ¦áÈ¥æÑ±‚kC;1èÍ¦æÈžéÐªà·‚êÒ®ß¶êÑ¬åÄ˜çË¢åÆ›ëÕ±éÏ¨á»ˆèÎ§â¾ŒäÃ–ì×µçÊ¡æÉŸìÖ³ãÀ‘ã¿èÌ¤äÂ”ß¶€á¼ŠêÓ¯æÇœ   ëÔ°íÙ¸åÅ™ãÁ’ìÖ´à¹†à¹…â¾Žà¸„áº‡äÁ“Þ´}Þ³|Þ²zßµÝ±xéÎ§iWA@5(}iO¿Ô   -tRNS ¢M—Æ‡).8Ë¬öåƒ#ê·tc7ùõ`PAròýÝŽÚÎøÏØ¼uû²tj¦4I  %JIDATxÚìœ]oâL…	a°Ä‘ð!››ÝkíÊÜ$
H¹ˆ >¢IòÿÆ–«»9îºÃÎ¤»ÑæÛ5]õp\Ývò¾ÿøÖ·¾õ­o}ë[ÿ¿*ªê\Rm½¾ZÕYÑ¶^)éóÈµóÊêŸá±H¹sVxUjagþŽ`g“,«?<“~¦4Ê?ÙîàTgfˆü³½|Õ4Î>áQ3ÝvöömíÎðøÚåß ÚÈö, Z²ÝìÛÃYîêxwƒvîíáÕV•÷Ò!ÿ\¡~€Ãsh¾gq‹Q¾ºÔïæß|‘jÎº¢9x·Ó{Z¶YwûÈTä½Ë|…V\€¯†8ËËn¤¸‚oæ¸=à-¾»Ý8Ç%;’ÊºWÈØ <æ×^aÎ¹w¯ÀWW†y§DÀ97à¢…|ÅsÇ®•ÛJRö]ÓÀeÎí—áìÁ¹µ`¶r•ïIW¯~Eº:^™÷+Zp&3…ÕßŒAŒTÎ†vÙMÝ¾b+¾44(2o¿àk2åæ«Ý_äÜ€‹þN=e°†MnÈU²UåÊ·‡”‘7XgÔ!ZÈ¯ÁXª“k¾ÜiX¡|îŽ†;ŸúE®w^›p·÷ýWí\îl]x8—5Äx‡D-Ñ±2×»¤mÍqÍÝ‡nÆwå¶ÁWŸ; ív˜|mf¸×tÀ¶ÕÍszkâ5ù"ûÔ¢Àeæ¼Íó£ÛAÞÁÀ‰;Ò4ÖfÈ°—ÿôfçŽùc˜vmæ¶ÒÛlª<§·Í–D)†òo%½µØn=iÒú“åWrjsÐqú;Nhßí¦þŒ}|3à.70†0i3H—ÿ²ôäWä8½}žï&Ùmrµ	d)òËp‚+ØÁ±ÝPú›}ª)®O|kÄ”ˆ/¿*ÇémO©	¾>ïÒª Ñ"¸Úïy|î³îÞË|3œàÊý¦–wrf1ßý8}Ùb’=òù³ZÝ§·0_T°O2…TžÙeõpþÌnp'AŽ}Ï5&Zƒä»ïå÷³·½H]6azy §™âÆÀëñ/'Wå8½±¯=ˆ}Ì_ò>ÅuUŠððV¥Æ_ptŸÝ×Û{ùnY´ßý8‘}9ÂÆr³Ù*¾ÙMp•éÓ¾Bh?è&µ¯†×ÈnŸÛÏàº#$Ô€GÑíkãµ“Ër‚+:{•¾ê±èo,q]¢†ýf¶FµïLÌùÈ·fnûY™ÛÝ±âK±†÷Ìm‡.Ó¾3Ã¾×æ»'ºôå¶|˜1YÝ¿óe¡rI•¢û³¼¦0ïâÚÊl‚+g„Ëà{(ÝŠ½Fï¥6Æ:¹i|3›à.g³ý¶íkÁÇ³/rÓ{0gª®)NŒ4Û´óº;&ÿêè¸ÔPKÕ€Y$ÚmÌ—×ã›|YÈëæ¦ÌëîøfFÚìáÎz«3VìÅyµåóH1¬ÆãQ§Õ'ƒéfvC/ú¦OjµF£ñx8,‚Oê±öÚøÈMšVËkv™ß>%¥øB`+¶‡X³ZƒÂ‰u<jõÄQðT[·øø~ÐoÆÕðèsßÙf¦:0„<µÏt“ÕoQö¨FæNÙÖ^m XŽÆ`›<gŸF~ÐïŒÆÃÂ´¯ÊÖ%ÙŠ´6d–‹œø–ÄAU “uKñboh[8Ò)ôý=ÔÀL”ö^>gó=‹ÿ¡œw/'\Ô~v€·Ñ{­Y÷8*„ø´¨ŒG}qÛüàe×~lõx©~g<dûÊëk¦ç…->w:‰â) —ßÎ„kÛ“Ìœ·nÎu3QLŸlëcÞçpÃáÏþ=òÙøÎ&eNËö¯ì¼YvÖ#ý´÷Í[àÈu[Ç@üLÆc|3„&3åtwŒ¦i°DÓ5}H¹™î'·œl‘—›³ã_ju3Z>Lè¼Fyþù»û°âÄç;àxæ/»÷ÚûœW|> ‹¼Ð¯DÜ$£;ärŸÀ:_u™!ßüÏü®VNÇ|oÚ-&D˜U{—^H™¥ÕÔ€úíëÚÜç9ŒÇu…ûƒóŒ%¯	©Ìçázƒ¯Ð!wð…½Táîè·Gz±?Þ¾Oqù|Yu=“Ë|®Û|a_7`\¿7ž°=øˆô’=Wÿ†$Üéf³|X™|•·–ßËz,F6ô\ó{?côÏ	ëÆˆ<mÆ6ßlî{„—EEq¦a`Å=xßà8ýÏñÚçÌiòsAý¹ˆ'›;äRÀ_”‡'ê@m¾û.[NŽ§Ç2®¯™jàËZ­z¹,þeý£.¹SX‚ã©ñÈyð³R½{Ã¿«2—åƒÎ×ö/3Þq…ubhxÎdãZ|¥V£Lø¶V&ÌjVr#½‚ëïDÂˆ	ÝG„eÇ‹Ì´9–ÛœD¼êt³Y>(iµ€/ËÙ3òÜ‡îŸ=Öµã¹G÷è°ïê¢Èdù ÿªþ%ç
½)LèV'Hûø{õž^ˆïqn8ÞŽqÇºð/Î€o&ˆrEßfú3¯Ð=¬›3ÎýÛñšoMû.'Ëe/åÃrµTYqMÙ'’î+c?dÿ»ñÊËæ~¡©Ê‚ïøµÜ÷Xzí>Vú>¥¿èf<±­é.W««<–”
çd16ïgëZ “Ç§àù÷â¹a¿zS—B€—Y<bo÷Ù¿Ì×¨Ïî•!.n>€¤Íÿ'ÄÛŸæ93|ûE|¯—ËåŠd×c/»ÀÄ–‹‡^ƒÌøÐ¿mCª?PU×9ð-—àkÈœcPMXŽ9*¨ÉgåÛ%-˜oˆKð=:C Ì·&0÷‡dÅÖ­¿J¾UË‡õBçœƒÜ˜-†žø ·}=Â—Àx‹õUËÊ„²‘.öÍõ–'cÅ#c‰–Êá¿‹ÅÅ‚ý»\¯n	Ý'ÄŽ·ù
‘3X@´kL/Û¿yx€Y¤xîkôÒýË|Wíä|{„—áê|Ñ‹Q—_öyãmÿ.j¾ë29ßŠùJÄ+Ðzæ+^ù—·W&ÀUú§;Ü–ôª…<Á8ÉœY“eÍ˜kÊaQtÖÖšùÊy÷g!aXÎ[¾“5­“/ Šñe|—Ö'(4büÁà»^¬§ëiòD»¿žNrŽ[°c½NlÑ£qÜÅ$b¼È™µZÀ¿TW;5ßÅTð]zø
Ùµ»Ya-^yw%ø®—ë5Õ”Ã¢\OùZâ„ò1Ëéûí}ã‰+´X`î¤ËÔOw(‡5kû8I9 «ˆñš/Dg Õ€¯R?Ý©ùNÑƒ¥Ð+ÂÂœ¨ï‹¯ÖcRŒ—k"%^@-/÷.zÁ¾¨5ÄÇx5|EïUþM½€(.¦ðZô`fËKóÆ\GÒê×…óô÷QãEÎ"ÞN¥/ Úƒù”ÅÓ›ô.kmÕ¡^‹öGþù/X¢?Ìçi=‰—Ìö@/>­µüIÊÀó´ˆÒÉ—%ó³ý½O8/j<|±ÆÜÆ|¯Ò>Ý™² œQêòì#éû£Æ¯›š.¨‰wžtQ\Íçä`¬!à_äœ½ÛÈñÍëçkw:ïI—g”Û¿œ»%Ôåþû"Ç¯¡&_rO;%ß>û|¡ÅYIç‹îK*“þîÎ-ñeÏE“ o‰/æý=dÇ6r¼Ê›·ÀKª’.Ïæ‚¯p±¼¸p¿Á7ÐûÈñœ³Ì_µ^VÒD5ŸßÖ„™±.»^l•ìýx9^p…ä¼Bõ%\@tGD—…5„Í×ÍÇÜ,bÇ½Az†ø&\@ÅWš’¹CðŽg?öEŸš³noo¯òm¯‘ž–ÿtÁæ6äe=Þ‰—÷þðí–£7mŒùØØBžsbÇ#Þ²w©0úZ%\ži|IÈ~ÑkÂ~»vœ?^Ï¿¡Ûtˆò¶–Ìl²ë‡L_%Šoæ?Wþ¥/	ãå<HÈïeòe´¬~‘lyÆx9³ŸŸšù³_ãë"ÝòŒ„¹áùês[S½tË36°Aù\ý±¹L¸<SšoÈ¿?ÞÞ?>þ~û!†öò5<J·<Óc®;:w\PJ¿?®]ç@ác'Ä»‡Æ	Èßà›êÿQ>ß>?ÛþÅzØÖOQ"Êü‰óNáŒ÷¾øðÐ8þUœJõÿ¨À×ô°V'oÙÕo–Þp\[Øñö~lÃñ®¡õøfþ=ßŠTË³g->{»fÖû£CïNvv<d³Ç»‡Æyrƒ¾©E|Í]<`!ÓF>!Þ³ß/ÏÐÍxw)Ï¤2ÑòŒ†ò…~>ÑÏù*<t˜ïe¢åÙI|¯1¿ú}ýHOÚÁ–èÖ€;Ý4Ë³š/ýùßÇ£úøB¶á¡Ã|[Iø–÷Ï°-Ì<d»hjœ‹øp®;><4Îµù
ÝŠ4Ë3)›¯£Öý +__üÔ?´‡oíšïs;Éòìþþ¹~Ù|Q'¶o¾"ßŽq²xIæ1o¼hÄ»'7ªñ¾L²<ãþÀ€Ä.ï¾"ßÝ|ï¾GŒ7Þ?4bëÞ×¢ò¨Æ*Éòìà_ÜÇÙÐ=ú­Åx8šÇ±õÄ†FŒm_É÷*ÉòìîžÅ€ƒzôÊdeËÍÑÅúÄ¡ïj¬»V7ÅòŒøÖýÿ‚°“K¸H(ÌÕ–7þÄ¡ÁWõ‡»?"êìË
Õê /šm£ü{€ouw/cŽ»§9¾8šß¾€êÉCëù‹¹ûŽŠ¬ÕKðŸÔ|ëñ1Çyúph‘ô:}ègp¦š.ü§wwŠ¯Ìƒ?{·ƒ÷_¡Ó‡¾ÛÛû¦G	–gw$ÆªØ²‡)9OŒØ~¡ù'‡VùÃ»Â?ôµÓÎ·/ø²‡u9ž‘ÐÖ÷åY?×Ž7·Æq¼wh-þÞ×÷t÷tQ$XžÑÀBôa³ägïfà{H>†;Ö­?Þ;´ïŠ­hTç :ßÞéý·!U#õÈmžkÇcáx Þ7´~.§¯Ø*ºì£vl¾åü«ÀÊÏþXýÇ~Hc…¸~v_hhÅkïS}yÆöe±…¡ç£rÿñ9‚>9´ÞyxIUl¾Wn¾ü^·0úl[çzâ=
Å{‡_¹¦×¿<½\E_ž½Ô€éÀ27­N£^û—<Ô1ÄøâqýÇÂñöÐvü½Q÷ªóå©ÕÌ÷âE°å/&_›ƒ’ùKJ&žx›ë	ñæÐ®¯ÀËþý„§=xy!ÂÄkq?zá—ì°Òb<ñÆñÓâµ¡ÝñÌµpïeÿ^Ñ—g‚/¸ª­[n.VéâÁb¼¤^äåÙÃËÃÃzDC'×e(a<Øj|ëZ#/Ðª—ZôÉ.ðž§ÀË^ø÷2ò1çàŒµÞ{„s’Å|[÷	OÑyy ÷¢CþZÂ5§Œ·Ì|ŸÈJEÜå¯òï“ØÎ¾°÷ÛÇÇõï *ßv?À×®9¼•8¾é]º<Á÷©÷é¤à«zçã@íòŠu\S¢x`•µ¨‚j¸/¤^Ôåï‰Z°ò0ú•'wÔé9–6ÞÍ—UÅ]þJñ5$SƒòpHÏ…HÆè¬QÔ§“bLô`à=o=Aß¸´îÕÃ¯‡_ô|ÉÄìcÜo®1¾7·ö±Ôñ|=ò¦f¾¿.Š¸Ë3–Æ—…¼×Ù,RÇ£ø—½ôÏ˜|/hH—!Kï²d†´ú-5cRÇ7k‘ÎeþêÅ|:)ÑÂÄ*/w}žšŒïSÇÛ|ÙG¤2æÓÉ_BŠ/ôôÕz|{úB½4ÿÒ×ËˆË³zHÁxÁ=ÌùÞ«Pü[ýSuOìŸŽÏXùž|…". ª_ð/TçäªÇ½[©ð¹¤ñKcžø?_±Eÿ•jEãÛ¯äJ/ð•²ëïÄÿT¿•Œ?}|ðUÒýûï"ÞÓIð5¤åû?ÈÏ¿	ùNÿ8!þ4Á/²÷
ýç×C<¾-5f=¾Î÷)Ï{uýã_lŒWü®ÈÇŒ¿þùá}úø¦c`à^¼§“ÿeïì{ÚF¶0~€ã€0ÂK4¥^ÚB…(/Š¶Ð•ZQ„´ÒþÅvûý?Æ=>3“Çó’™x‘£Áå©;¶ÏzÎ/OÎœÉ-w?}"¸’¯ê_øXŽã‡ÌóÎëfü›È¬?7»oÞtýÃxÿüûþç×f·»ù“O¾Aü“ŸÏžE_–ÿ dsµ¦Æ·Ÿ³%Æ‚­G./3ä8FüÀü;7ùµ?šñO~þ×¢gÀ—~ô¦Öþ~b)¾Eý„Ë+öu[¸Ž¿vÃeWÞ¯ýw€'?é0[‰—ý4µ­ÅÏ#ÀöX<còtßûæ×¿Šã¯¿Fñmþ+OþÔé>ýùZ><ÍHu’i};yÿiä`x˜«Ñ Kµöuv0À¹§|!®*Ùýiñ}¼P•|ÿöœžßi5hÉÂÈ¿ªà=øbî5^›{óÞâ™/rÞûûtJ|;€kñç
Ù×cˆW¹@
pkJíÙ>ûÂûlô6Þ¸æ:Ž!žE^B½)ñýz/Ÿo¹¸ÆŽ×ãî‹!^yÁ¿SjÐÒ‹ûûûOè!´±<þ)ŠxË»Šï”´VŽ– ßÛs\¹Üí×QÄƒ¨KÊÞO¦ÔþÞƒ/A…þ¨…Lïr®¤‹?Ói/øqðoÝøÚ|/Òé´¿ãøš5¯qìS$ñ[Á÷‚ð^lL§ý½6»ò„Â9Gïö/¸7ö—ÞKÚˆ.ø:z	{„¼Æ\#Þò/‘šJƒ–~Íý+Ó¦áŒ9{ñ^¾d*í¯”£‡ó°¯GÒ 2>˜ß–z×|
øÆP|ñ\÷î‹¥WeÜ˜Fûûýâûð½6¦ºHô÷-øN¥AK^õ!ßêË÷Ï5ß¥§6¦Ñþò³”‰µ±ÔBÈ¥ó¥­7•ö·(¤Nþ-HÐ•žZhN¡ýýÎBf¡VL>˜÷Çïæ;¥-ý*?+ÊÀŠ1øâ3†<„pÝÅ$Šx¬‡YŠ/ë¤?¾'†1äbúÇ¸nŸ‹&¾êoÎw
DëDÖ"!0_Ÿ‡ý:šøKÒ¿'­êÛ_å_U#€¹.róeÀÕ·¿¨¨Ã6_ÔeM¾{"ˆòíUßþž|§?Šo¡7Ì‡ª÷x\—µ&^ïy97.´UÞ %ü9º!ç¸¥BùÇÏyÉüà_J¼“TÞþJÿ²0r±Q<ò‚Nr$•·¿ü€ÂÎõØ‚³È»QyûËÒŸÍª`Ã·'ô™e¥•·¿àË?ë†×®'EmTÝþÞŸæç‹ùÁ>g_‹)YÉyMÙ÷¦W1ß×¾<Š*Þä«tSqƒ–,|ñþ"{ÎÃ5óœ‹/øv’ŠÛ_ßòŸI#&žø±|’ŠÛß›\'š0mšìcŒÒb¢ŠG^|¾'jùö¯ó‡(áù¨îþ¹xî‹'yðéú&­¶ý½=PTñNï²ªmÐZcù^˜ýŒq¹=Y¼N¶À·Wmû{}sM[þHPFvç>_¼Ž÷†6Á÷ºÒ­Ù£
DâçÑaÜÚÞðÄø{¢‹·,|ÍBƒVQûKb)È!|¯ã‹·
/åÌÞÚ¯”ï¿‡×ðoX¾<c_å«ë¬J¾ÎuÁ¿×\—0ÔI¨»šégZiû«ü«Õ‡Ú²5ü›ë¼Uiû{~Ñð×08_ËÚÀÚª²ýUd1Ç‘jZhƒq¡*´ØW›çjX*Ô<#fØ÷|¦Yáòâ¼ÀVÓµÌ«ØâÁ—÷Ðy…Zòúüüš¶‘ð|åcµGÝ@Žö=8Ž.¾à!x—¶ó~…|g¯Î|m¯¸ssŸ.þ‚›Ø^iu|;†ÁšåÆï¾]¼£$\aƒÖ88Ïuí?×°¢‹w%yÎÚ(mËõ£Ãì–tx´îo3ß:ÉË·WîöámA‡>Âéy˜/æ]Ï±­èâ°<·	•i€×gnugÀ-É—žÅ? OÁs´‹1Þâ« w’‰é’uM¾· ìh!ÝÆ•È;²xˆý¤t”¦¼¤ƒæ8¾¯Ý|Ñ¯Ù^Æ5Û#ØÇ¯Ñ-*kLÖË’Wi³¯Y÷œßª2Á?rùÆ/åÍ?Âx_‘ÿ$ðvv+ùòžÅÇ¤ÖøåKà_@¶ÆÙyÙ1QÅ_óÓoMPl•ûéØ¿\Rô¯öìryÚç"Œ7rd¼"ÿ­°y%Sð…n?ŒåÛ¿•€m¾¥dçcü(?•ä­T¨A;:öie¶1¶ý_C×5”•¤š¢fü|g£ô/ìûøxüx||¾³ÖÞ¢ÛEø¬Ð)Ô*Ìy8†¬û¤¢ŒGŽàËŸwï7”ë‚-Ëªý½ÕÅ±ÑÇ¦ç`.$\·ï‰0|y_T?ñàÍ4žÀû˜oÝå5àµ—ÇÂ¿z>„|Ìs¾kQÆ+¶Ø+?¦a¼˜ÛÀ7Û™›m'žo×e(¸š|c_‹2‚%°V/ÀÝåW³©ÇúÉðš®£Ì4Áwc,ÞáñÐä:ç²•¹µÅFÓûíz‘¯V—jÍ×ž§zåÜ;$Æƒ€yyy¡ÕmÍÁµÔXÿºà$ƒyÿÞææMåæÛ×j÷X¾èkpPŒñ–áaç7”ÍÃï#÷¹Øç|‡ý]6o@)Wi8X“–O·y.Æx¯òss6ÀGÃ!Á$cÂÛ]^]"ó†Ô\¯ßCá¼#7øB™ƒïöÕ•à«{˜ð®¼mOð•fscßcxÂô2i¬_°4¾øý­îËÔQ|‰dnVÞó0Û	Ô,/D<øâù®\Lxò2ÞÍWð³à™WÅùqøx•í…j–a®óŒ²òÂ}ÑÅƒ¯»ßÚ²ªÃÐ­lšÞI7@˜ß¡pž~ÅïXç
lfÜ<¸^ÑÆž¥­€âßÇŒza×Üç#V|¿(ø™ð6³5ueâ,/8(Èûpn2:ÖxoÑ¿FÜÌø,AÎÅ¬ÙÏ;ÀV£ÏñÂÿèŸI§6F’•'„kqÆÃ³@LÉ3¿ƒD·/¸µ¼(ñ˜'Ñëa\®ÂyÅ>–¤ÕÕ†U}‡ð­T_¥O¢–ˆ§gAüü€Ü¹BÇs†¨»¼ü´xãê£D
ÆT|W—¥~7€ãÕ{¨­±k.ö¯ì$?­^øˆÚ ÿ®Ì¦å~7@‹×<\WiŸSß–¶t»²5ì¯¥Ír¿ "ùÅºTcç$³»žñÁ¶µƒâ;áòu‚¶úóEž²¶
àæÂGQ~©
Ó‘<î£:Lº¼àxUÃ=õuÙ}l)Úxø—9³·¿N0}pã÷°ï¤Ëå_æ«­ù;z+o¾Å˜øâ=þ2¿Ðk}”\Iàü!-ý«Ç"^ŠŸøxE›í_ŒY-zûžxã9Þ…²¤Ð=/ýè’}Ë)r¼ÑC_ø—~°pl×ð:ÞxG_ ½š¢n*¦E½Ÿ¸yÀÇ@óo3ÆãÎã_×seIŽ­ß—_ciQŠ/üKÈ•K¤ñ~ÿnŒêæp¡¥¤ô¯Ã¿††u•þí|wÆ¯Ï>žÑ¦ðöÛÍÒ¿z,ã¯tÌôZ[ªcÈsçã‹·ùjuvÔ oK´üÿ³Ñoï_Ù{I‚	V,éaíþßŽGGO]xï}~@Ý6î‹8^2`’À°Ÿh\XÀ3Szzktïª—sÌ$Ïç3ÚxÔSý_æBÛhOšIJó= _£Ñú	äcžó\‹7¾Øs©ü…WÊwÌTJ1.Ï7Í8Üèót¾n¯¸Æ¯ícŽG]€„WSÅ\Qƒ;åù"œY—GZMÔu<²DñjI¾ûgí—æÛ‚ÿùÇVÜñšoI#À[ÒwN¾ýÒË‹^Þi|ë,ÃLð¯l€ÓƒÓÓ³Ó3èÕ¹Ôò-ä_½›çŠ;¾¸.“Ç:ßý)ËãVéå›ˆWÏÀ^ë%Ì|‚çh‹;¹‚1s”SXÚmÅ3î•^¾åïÉîõ¼ã•ÂyûÞ¸ãÍºÀyç,$ß™S)ïB³$ßÎ)øêýÆdúÀ–+‡¸ã‘©Î÷4%¶ñÞ¬¿,¢_BV¢ù·Ö²z[VÎ4U|¥ô¼^vù†xÍ¿µçk‰ù‘Zjb’Rs›P¯ìò%Ætòï˜!n¾KºàÃf9¾2Þ–Ý¿ò_‹>ÞE—Õóñ-[ Zàû$ÿÚ¹Å.²EHÚýS§ŽÊ-/hãÅX=~Ð{\‹=ÞÈßfÚ9ývú6ƒo–”âËñžúàò®!/SÑÇæ-“±Z`¼g¶Þo¹ŽJ-ßÄ„ú7»¾ÿtörîkÑÇ£®Š½"([ÜÆö/9b?Ÿ­—Y¾Éý,çXÍÏž'×Øã¹ÜsØiŽ4kÈ	îŒéÚ>,µ|cûžÚÂ¸<òÜ{¼Ù `*Ð,î’u€·K,ßoò­³Àd¾M*À,€ázq÷íÛ»õÉ—oˆwñEÍ(­èãO!ð»£?-¹4øpG¢×§w§w´Ááw÷i&âÃþÅX½ÇPôñcý»%½7ÛÿvÇ¢k’1ï‰ùá¤|)šÙÚx1Ú™cŸ‹>Þö.àõš² ¿¿ƒè‚3ŸpKÛUÂ·=N;ì£7ƒÞB³P .ï./[‚L›œLô¿¾Q<ÇX|1+K¸öìâ1·Ã›dT ”yuçÌï²õI–oyKÔ`<ãñŽ—äÎ+þxƒ3{“	þŠTûý%kÄHÝC|É˜Û,ß.á_¼—¼÷*ìŸ¸ãá£ÑBò#n´€Sâ]Î‘6øW2æºq¸\¾q(‹ŸÆµøB’qË
ÏÒ{æH? ÜG:Jü|gðÞ@¿	_ý3/K,SKUùl¯fô’ùZç¿y	'Ž_<³þ|Á–¾wàK3Ü
àsŠ3ü,ÏßÍ¬{–Ç£ûLÿ›ó+ö¶Çq÷=ƒxÍOÒL²5šÿÓµþ¥¸‚­Rv4q£¯Þ¼—R¾Ç˜yÅ/[Y­'àÉl€–öîà[È:÷nfÛÁ8ÍèFð-¨0~=È-þx•0ø*õšoº¹B`|x´½®QNGQú³è­’¹ÆgJx8^$¯ö/Ë);<:ÚÞÞ^'mÉ÷Ãø÷KC—æbì#7é
}¹¼\H
%tv/ûB¢ócEiÃ±u¿Ýƒhc4Iî×Pôñê ½ÄdTˆbÅÜ|lÁØu/žÿjcñ×}oüñÆgþ¥2”´W7•'½úRÎØ`›Ë9V[î<XñÇ9ƒ“X £‡X€|
ªºqìâÉË£ˆã\Á‹ÈP:»,ƒ¥¾Ø—ÖÝóÕeX`•3Ôù6	p?gûðåáAçŒ}áœõ^<M˜ÝýöúyíøéñOÎB²y -5¾FÈ?[¦kóTíÜ‹ŒÂ ÿ_Ìqkä`ö/I¡´˜ºõš%1ÁÐð€/pXåù:½_xF!ùnüÏ¸ûð€¹3h+áï5#Ôohµ½ñ#¹¶˜©YƒçV.ù*aþL¤M¾6sã5…úí‹uO-â•ï˜_¯éüv7û,EˆÁlçœµÙî;Æž«CüƒÃ[ _¨™.­r M2fé\]ç\ã*sîùÇ/óÃ<àÆâÚ,Âa}ù½eØ|íñjyóî³¦BMoíœ›ðÄs$ôLãD||¹F…ç»Ÿu#˜¼å¡]£ÝãÄc}¶ñŠÔ_‡…W—÷@Øö±BŽc¼6û_ßc¼~~ñZþ>¾¨Âíœ°ª?>ÿ Íäèf®ÚîÄ­øãÇåÿ|Ý&Âsó+}Dh¬Ëé¡F
gÿ†	“‰³$f
¶ò8¨0t]‡7ìz_uü8¯§J¤K³¯ñÊ q…ýô„¼mNn†nnKc¾Â¹‰×ñüîæàAó±®Ï/",›ð˜¸½4»š3ÞÛÙìfEªàýÂø³Éýï.N—ÈÇo	òüüîÎÊæfw0èg¬'3\K¯ÁwÄÄ¸C^]%ÌsË¤y¡ÝþÈË¹|üq,‚ïä)c^š%­±Vß.ïtßýÊÝƒXó¦”y>¢øIÔßÜÅ¡¥,åfBœTjqö•æ•ÍA ryö$‹JãÿkÙ`sew~y.øßo*Qœ¹ÅX•¹Û'Î1Ìª×C6èn®ììÎÏÚ·¯Vg—ÚØ÷©J¸Å ÒL•Y”å=9ö3dW/½Ëú„ts… îÍçX—çr°«k³³‹í4M¼tË«©*3aÎ§@9Î3l¢½³’óMGìèlsËA—h2ÎÝ=ÊD‰i5§JX—–r°i#)Á¶|e¦ºÌ Å¸Æ°‰6á&Þ‚¸‚¾ËØ	<©Kì	~ŸðgS­/ïÞe„ø@BÈ‰âqT &Ó8	¨ ÊLÛD•°6k’­4æÀv›qoAœ3t‰]‘}hOhWhGie"í@»J{$`ÓñI†L‘0
Œ’`2MÂI<(#%¦5@µzØL›y3p©3wIžé­ŽôJÓÛ‘æ‚z½‚@Åì>Å)2G)a2Mæ	 ±ªÉJFj¥–ÚÐ¢®%¿mµ¡ÔVC
ƒj2H ¬“š–’'©I˜Äô^ô¢½èÿíÁ!   € ÿ¯Ý`€+aXz½À    IEND®B`‚‰PNG

   IHDR         Ã¦$È  ,PLTELiqöøùÿÿÿÿÿÿÿÿÿÿÿÿûüýÿÿÿýýÿüýþÿÿÿÿÿÿÿÿÿ,S†ÿÿÿþþþF`…ÿÿÿp…¡ÿÿÿ†¡ÿÿÿCbŠÿÿÿ(Cg“®œª¾)@a=[„<Tu7Z›©½:[‡Trš›¤²MiivŒ`w—'Jx(L|¹ÄÓ»ÃÏÓØÞ%O„¸¾ÉP`zçéì?Ok6ZºÆ×½ÅÎ(J+O2Y/U9dH}7b I~,P.S;g1X4]>lFz*N0WDw<i5^6` J)K?n@p3[=k ICuÿÿÿ&G7a:fBsFy!N‡AqEx!M…Ar!LƒåêðNjŽõ÷ùf~žÆÏÛ†™³0Nxw‹§âB²è   3tRNS >'¸	0!zÇàMÛÈ–‹lò_ §åsúöJ×û^·´î’ð¤gEòäðæøßúµ P
üË  'äIDATxÚìÚÑj«@ÆñPLg-å\¡†Ð¤«¾Ež``Ø÷c'k5r`\áÿË]®3:ßNÜ                                                             ¶«,7XóåRî° )U­/²¥š«Ÿš¯¥ì0—dµ¶Ší´€;k«Îè€Ù\¥ÿÔÛ¸£ÄÕÚá0›äµ>•lê÷×€¹Ü·ö]dK¿¿90ätS î¬=_n‡9dÿ®¿Óî wÒ¾OfÀ<Ù«]$ùÈ{`îØRHyÕß^™ËM€Ð©ï,‚?Ùñ²}¦’DË=éÐ‘sÀÙAŸ)JI7 –#ùQ{?_K^èØ3 ž{+ô¹Ú% NÚ ,{œrri BÀ‚$?è¤JR „€%Éþh¦A¢A0€a±¦fúÊˆ ï“`–ÖŸí®œ(S4À‚ °¤b€äµMÔIˆ–L§YJ1ÀM–j„€X’šé$³t¶ò]˜MÍ€þX2fg—L4ëBß¨Hû ÄF€ÂîtÈº‹]I*	Ðºš†56>	q²/k¨é$+JI)šöYçHˆ}ÀÂ]5dwu–ÄÐ:£5@UÞ±k –>ewI S'F•uXEq/…Ú ÖÝY­¢”`¯P»×:À« Ø5·ÆxÜ¿µ–ž³Õ€Wu6`¬‚âäÞÛŽ†ë£¼¯dí€·ž.ý÷øwR`\ôáV×{ð+¯ƒ\©¾ÿè××Í€+« nôÖúOø“[÷è­G;xÏ[AÑpò|x«dÕ# ·`\Ÿ·Û·‚â2àÍ7~%>{¤ìþ.2YóÐ²Q-ï­ùã2 5ŸÇkØ-ï½ù5‡€«üÍÌ‡s`¨óÑ ¤ÀÈxó?ézt‡5n×RVÛ…*‡B}¤À¨ø—½«kmY¢w/³dö!0ÌC˜	YÈrÙKþ€ñS~6cåÁÆºNæëþÿqKÕŸVW—Z2AÁP'·#©Ò­>§««Z’Gu­ÙÁÕ[ÝôîsUhehŸG'Ä€<¶0ÀÇvðT=U„›÷oå ÚúÛ¢‘™ö}üã_Žñ1 õ€¡îè§êb,Lí ¸þ0×wÁÛD žVÓÁBA âÀÉ€D¢ÆôÄð(ð„p° óéãÀr }m„<
<åZ0:·Nz# - ñþ¡yž~¾•@€^Ü¼Ÿü*ð_ô ¾xBx_1„dñ¶ âÀÉ€4*6R<€À£Àð[Õ+€'ép qàÔàØF8)ŽmóµÀñ…¦£+u €õÀ7r 1ÿië.=
þ­:÷¿EÜ½›Úhþuã<
<é™¿Ðwâæ1Ç2ÄõF¼©n.¦t ›*mãKð¤Ûæ÷Ž}&¤d±¥' D*8Ø$€ÙO øÓ!c‚7 ° Ô°ùòþM" è”ßœ¢eŽ\Þè) Þ@STpú ÎV¬¶müé‘Á›ME¯O€Tð€x€¬ *:dÜB0‘¯ñ„NÎ
`32¼¸¸b\\œæ 6 ]ó¹?#<n!x¾Ùh Œ²ƒÖiTÿéëç««›/_îîn/[ÜßsóÍ¼}ÝßóÆÛ»»»/77WW^¶uu¶h×Æo	—`
PÀîhBîªàñ~GŒÑB¸”hgE‚hµpe]„²žJµËŸõ`8‘@°úÐ
TÌß^Æ„o†`ãò:€ T pù»G#‚QÕHðè–«‚W7w·÷ÓàâÏ@¤ÈàÝçqã?ä·Œ‰?Î¸Ó«q£ŒÞ‰@zJàŠ<¾¸rE0¼An;Ê®=¼ÁÍUë ‚¤†´šóñÅà1wÏ¸ó³ó«ÝÑ›ÐÛÌ}éÅmû{žSXpÕ`lf¾<â	ø0;úí¡
x‘}ÁˆfbdÙ~#öU	˜Gf¾<æn90`1ƒ<é•™…A>öeà/ùbðˆ»Aæ3ú	.®½<ÿWr¼fÏòôü¯·'ˆŽÁÔÓ;%»™/Hfc<  Iì gÏžfs_‘ÌfsÆ`+fi×­¶™ûÊöðLüf7K¼ÈŒà‹ÁÃï †Ì¶ñ|>Œi ‚1â‚½ZPêÕe0nÏgæ‹Áƒ“€KC :.z–çO£ìþM1ÅÐó~ þ†HÀƒ‡'% qgcäVŠDE–š÷ñ{¿0‡ÏóÄ^W"ÐðÅàÁI ñÏ ^?æÝ9@Å8öDûXˆÌ{(´Â	êñÅàáI ³Ìóþ¶Óù…<Eô)ö*~àvÉ 0_šD€‘›ÐñR‚°1dƒèSìQ?—IDÂ€XøbðÐ$ €áæcqš)Ì¸]J ‚…/½°˜‘¡«‘Â%.vœ`SZð)"±‡<;(Ïd¢…§#’ AÜÙ@€ÙkË½æ¼_–TÞž§d9`á‹ÁC“ x€—9Tª®ßŸÑwKÛèw|¦7Øóg;Ô6½ö¢±—cg€/L &¢{¯°\kÇ¾¶}gä+àiÀà$ ü#d¨)_BP£4Ú.Ðû_ÕþèÒí" ‚/»H:{ž¬Ö)rl2ãmG¼ªýq*Híyô3ük"†=À NS"H—nikE’5ÒAøkÚÛÖ9V†ð ~OÈ°g €„ =_ˆ3ì°Q°×ÂA0¨ìD ž½h ;\gw M#G˜ü)(ûÂß6Œ <ø`ðB0SH1tw™@®ˆÙPäÌ@>½~OÈƒLÀx¢l3;²O·— ìþ%ð4`èƒÁÍÎ€1ß:P$ìÞÁžúƒ v»ÆÓ€aI +  ‡Ò!»"t
û.ÿvžIv»0 ¸+-èLio	@<€[Ü$ !ÐK w„¢4ÝôTöøe°ð4 „?~#þsS âƒ(À:nB{àH+€ÆÓ€ò¥  ½ p@Øtöâ¸v¤ OÊ—‚x@ (ÉåÙ äKÑž“§ÃîkvŒf‘âŒøWsj>ø­áÅûÁX ˆ^i* Ó	í3hvÍ²YzPÎ›år'`W]"PBØo6™}Ì=< —§¥,p·X˜°<‚EÊiìµ šEÓÐ9y0äRP³dwÉ=fM ÆÞ¯·MgŸºR OOJ—‚¨“Â€“’¦·$þ#Ð¹yPºÔ
`‰8 ò¤g¤}æŸÏ‰ài@éRP" ž?é83Èü/ÀÓ€b°
h$`òwÃ9ÛÚÏåRài@éRP½dpþæ=@hÿŽ¦€ºö4 ÿRó/`ÁŽË3ó MÜ~Æ2 ö4 ÿRPV Œ\ëB}6ã&µ‡p	 µ§ý—‚–¨ B@‡kô6‚Ú>¡}c¹£3þkOú/Õ5ù dð è`›$½åÄö±ã 6ð¿¬=èÏ©‹r€{UX¿cÛÄö€äíi@oX×Z ŒÝY¡+€#êÚÓ€B¸m@/þÇ#§iK 2|²ûQNll÷2áßÓ€þ,°~@ü'†¸0+|žØ>´YÚ/Ó?ÃÓ€þ,°Þ¶`t¡A)ÈmÇç‰íñ€Ä6t~þl@ßÿ¾­È” ,Â°Ï kbûÄý‹¨I žôe/7 D¯VÙìíØ6¹ý2AÍØn·µ§vðaþ»ètðrÇîAÃ&sr{Í¿`ëi@O¸e àR€¨:)ó˜éíÑ~.	tnÛöÝÓ ;¬;  1âºŽíš;½}·ý¶þ…¡öÛu ÈÏ@€`zûX¼Tˆ 7Oz²@æŸ;Š€<G¤`îþMA=YàáPo¹³TpvˆÛÏ‚æóò4 ?<0	ÄÔòüÐ 8lþ…¡fHôÃUÖ‚sõ €x áûÙÓ +<öÁÉ|»þùüýûóÏëoÒ[®ºîâÅ<0³@ €€Ð°æ¿žxþ5Ï”÷·7«† Ð~úx`eûÃ~¿=h°5§ððÇ>Ûöåªããj€… üéi€‘B ©ˆ‰à’±¼~T¸Æ~•E({µeÉ>Wµ^ùKÈoéß>y`dÔ9ÜIB>F&…ñÏcÿä*{@‘_´7ªÆqR`£Ÿài€•B 	ê,a2õ@ììÍíEØUÇö[æŸàÿ}˜‘Rß½ ~<øQ¿"ÆW]ÀGOòY`,€CI óg‹…çyýú_õV¡qZÜzÏ[ìÃ<PÀ¯G¿ê×ÇøªmøÃ!ù,p½'dã SÀ³ÍÂó29öàXÃ¾\5ŽÝ
ÿ¬?ù]aù,P ã€ß{ðdÙd`Û÷Wm	@2€V {Ï³Yàz½o_Z  åu×‘šPáIï³íû«†}F :Çµß–Íy
`ì• Q?ûXø©TöM<>ÛöýUÃ&™ÿ×ø~íw…e³À£à`‰ÀÁ †Jó0ð¬ÉÖDçö£´íUÃí§28 €_Êf«u ñÏì£3øÞÇÂwE¦‚E´ÃÈªa/í½ÀÊ/e³@@;„‡š¸"@™x¦ýàª„ö +8$÷\àÑ, ?üÚ_µÀúèü®°\¸Z	 \Öô‚ ÄRQ
ù7g}øŒ²×¾P5ì¤ýð ûd¿”ùv˜V mE`ð9B
¹˜"¸ ˆ1)TÙKûYÈûuìü®°LHC Å£‡ßÐ©Gô¯Æt‰ÔöŠxÓ¾\5°ù‡uì<È|;ÌŠ°&€üýGM–”¾™ø#Ö"µ€^ûº¿jØKû1úEà+O²Y €½@‡25PÙwEfß=VÛ«Ríï±/TÙ¯5èüV~W˜Îÿ·¢ž	 áÂÑ“'É‡Ï5,¬Èe
ö½UÇöý¡þŸÎóÓ¿=
L³ÀÂ
1@„ Ä¾+C«ìQØ_´·«î»fù/ô³Ð=TYà<ÀZ £Ç"Èº/K”ˆº­Xµ ‘W ~9Heì â€½‰ü™û	0°êîìäŸà—ƒºxÿûß† Vâ	 Ì©ûk{âXÛÞFÙ¾§j€Ûày Ê9  ‘¢ŸÎÀ>kÛÃEcß@{]µ¶_§çÂî¿…çiø§x ~SÐD	êîóYuŽ4Û^?Ø^W³é
 ðÏÀ¿$ Í?=¬€°hb%Ûð„&Ò®ØÆ´×ûGÚÇUçí™xœq/ðËA©  Ð°ˆ²ÉœÞ   ¿”Üüõáë×LFw¼…éí™|-€ö\ýrPº  ûàÿ|±0ÿ3üé ä–à¯ä D –@J…ÏpÌ›ÚkïÏ “õ§ƒ’‹Áä_ ø×=Š”éímÀ sõËAé-Áâ”tcdéízÿÛ›ÀŸJ.[0I)oc¼±}2ú!€Ï»·wÀq€µ. Jµ_az{ð.çùJÿgïl{ÓH’8.Îc6++Î#	6Ye÷’Ü)¹óE„†H"ÐJðbßÄvÎùþßájªËü{(Ê-¬sÒóðñ%kªþ]ÓU=àz9È£ÕXŸ³Œå\# Ö±Ÿk¿[ L½”«—‚ÄßO{¡ƒñsíQÙ þŽßë:Ð_† ¶øRl>+–B½”[^N—Szì .²ï?W[uì'ÛçYB ÓºÌ-› Žµt°~º½Î NìºðƒÉ'ì¥Œ$330Ú&{ý9ÓÑ¦^òÐvNÂÎ8Ïº½ ¨¿,Î_ž: €Æ?.^~þQ ÐÏz9È[žÊ¨øññÏîí»¼ë¸sópÔËA^`*,=ØiwÍwþLÿùç;ç±Ì	 þ²8o1x* ð2jîú„Ç+ ‚Îe€z9È_† òÜ±Î/(úßèÿ×»S -×Çhº¬ë@¡yïáµS¤D·¹ÖÞÈÕùòÿš#SÀÅ÷/buù_C·ûýKÅÔQ×Þbðh4A <LÜ>œ
ó–Ð¯ëãÛöW_i¸¿¼<¿º:ÿN»ÿ/Ÿÿüænì¾<?¿|ù•¿cJÙßþ÷/!jévNéd3êÛ…f£3e§L¥4…Óì êàØû°¿¢Aïó2;öååög|•ýíÿÒ5@?êO	­ÆÈ!ðQUmú¸Çñ¾ôËûs¯~»Ò¦·ÿýS Bl7ªëÀMÈ!hg™ÎÜxïŸß¿]H ¿ÿµ±ÿëÒ½zAò0ìoûûsç“1êå Íbðz$L	?,ï†ósºÞË…\Ÿ_-ÿÿLKý#¡®7‹ÁˆÿËâc ®7‹Á› Õ ;
ÀZ=WÛü{c°Ÿ8'Ä½®ëÀëÅ`D_	  Ç`/çâq­€º´9 ŒUB)çûÇô~öõ8/G}[ ´–kqr;Ót4ž[ï‹ÁÞóB¨o”6À`½^P	øÎ"ì&
{5ú…u]J ‹=)`­'‚ûG?Â~´ÍÚ	~][àu`äFÉ´äG¿ˆLë:ÐµkÇ”J Š53Ôsm [ ùË žûû6‘Øoß	`@ñÔsm€ÁF["0A‰ÀÞÈ Ì ®]€F=Ö¹‰ ®t7Ž7ŽÇa¯2 …ÞQ×®e Q@ö ÓSÁ‰ÃÞ@]º6€`L,G[Çc´.÷uÈm€À#¤ yŠ¸ì¥Ä]ç f]×Y`è)`sZY>3€ ê:ï	ÿûÖ% {”W #7ßÉ¨ë@i¾³Êÿ5xë:Û >kP¢ P×^`8ýy ð&OáI¶×Dc¯P×~ÀGšB9 ÂÑÐˆ=ãŽÂ­_9=a˜QMµ†âgùÎ–}å\×¯Ecï2@–ø•¿-Ú ì gA ä}êy4öƒ™Ê×Y€hÖ¥Á@åë@j@ HZ ˜(¬÷Dco ®© j`â´fðÎ†ãÕ6"{9WGåë@j¬$@ `§c…P€b²·2Àªòu ·<û¡¿ýÐcÕ®zHm€•„Þý,+CIý²/¬†U@«±Z­†ÀQeEêÀª¶$ø „Ø9úYø+ÔUmÌW~ðÅI¥ùïÿ9êÀª~(@ )Y
 €UÆu`UÛ w  Ì#¢±*D ¨«Ú˜Kü†3×Ôñ¸ìó¡—ë?1Ç}¡UmÌ3Ø!ô jN`T	8¦öã²Rõ8¬ª-€FgF^@)rÎ¶:°Þ•½R Ÿ˜Í«]¶sf%£
Dj¯2 W L¥ëÀ¤õ*'€¼Ç‰=*£±GÐ1úç’ÔmÌæ3zd>!øN–Lþ†|®ô/c†ï­h`&9`N"pbV%>f3¦Úuàá/¿Í	Î„LË—0ñCîçÌG›j~_(þl<‚2€P>8  þ¬{Ð¬thæe€™»6¸i4œf#²GÚ¡#ÐÏwÍj·$0+¼S÷Hdöü|È¿hUY óñ‹0JxÌ(ç# Ø
êõ¨ì]ðåüfœõ„*ÿýÀÖ«™C.;Ëp6¸1Ddö"nfæ:°’·ƒ `2èFÉ­€Ã£³ç¹Ž\îx+Œñ÷«ØûÁ÷YY`2 .{€·`Œ:°ŠŸ
gôØ m2R'mTô{d?:{Oäýôwš¾„âŸ<`68ÖJtös ¹³þß5+ÜØÊ ƒŒ(8x÷±èìõ9ŠÆ%]~F„ogÌvFèìg;3¥[Nž½=kwDûìäæ6@×@Ù°€árDÿM{áÑ>±Ï®Õ‡€Ù³µo›}>ò<t”éÆàäíÙ"O¯û6¹¡@ˆ3è°œx6Úkˆ° \üð·ÛôÝ“Änø¨`:=„(íþÜ\šðƒÑi%Öí † Pªl€cz”a™½Î >åXNžÑhïÑC+àäÐj,˜ñB®’‰›,=€ Ì»f¦~Ý…€·„ì/š‰q;ˆ¸aœ T œ
´ãµMTö3ÿüü/Á‚prÒÖÁßd€ÎQË@ÛÏ 9çìýZ„öêÇtâLá„“7]	: -4:ÇX`/´Óc´ßœÿ „‹zõïÝÄ“¦!€1°Å¬„Œs@ =,6þHûH iÚK{½ñëçOók½¢·;#—é‡ #[û@½OˆÒçpÆ,ô‚prÒqÁgÔ% óþùãƒfbôz*ˆ“‚Î&p\¿'B{€·>E^NÞv{>ˆš=>ü‹âßJ¬>PO2 8\¿f‹Ò~|leÀ·<<‘øcè	 ûú×ã§ˆ¿¾DLx% Ã¹cQÚd qXa„Š¿IúáŸ÷ý‚ü¯û@ˆ¿Ê%d¡<j6þ<ÑË“º×ºO~=~ÜøÅß¾$' od”[ z®„árŒÿ”Dðïløßk&7Ý“­©À¸”˜ ˜€äYW†¿Î ‹'¿>7‡?ú@¹ùƒ) ”OØ£½JÈX.TüÛ½Ôvl ÒÎûûÇG<ümZ~7r€‡rx  êµ(ísñá³ßŠØHšgiú³øSñ÷ Ãßþv‰¾Ž`©½OÏ§ˆÂ‡o&@.Oî?µ‡?Ú /,ô0ªT6 ¬‡m¤öþry~à¼kpºáÎ!í¾ÎŠ¿Ð´–û@Î€ƒ´³ý­`(JûÝpþ+\# im^˜tßß¤ôØ`Bh;hÇk›hì!  Òâ5ß¦»éRï?þÑrécá@ˆÔ~GÇ4eŠÖHþÓ™¤zèøëÞ¯Ýbûž¡ \8f¼«½n˜‰ 
vgxÒ|ƒà{L²øßÅ} ” Û°óÅ:Vû\üeÃ PÐM3Híð~úšâ¼ü£Äö© #‚#}': Ç¢µÇ9bîÄþÃáI ¼ÇäÉsÄ?H«!öÚ)=ßqÚÉaÇGkr9O1(à:Yì0ò…Æ½VÈÙÃƒ‰±½wŽØ²ïŠÔHš/&ý‰€ô?é?0æÆý@Î^ðÚÉ¥©?eÄ¯Š$€ÖÃ>Ò?2 ÝüiÄßêùö©Gy#xç_„F :8Ý‰&í7Z} ±tNð¯½*(@„/4
q àµš „ú@9¤ 2àôï(@# ¹ûa_¦ ý	íÉ~çX] B} ¶G5a	 sc_¯}* ý‹ÿ
Ð@îî ðÁÕ)„ú@ljB9YW¯Åfog€”ý‡F@® }	<!|T	 ØröBšBQÈ`%R¿'ZûíÑŠÓHZ¿õ ýøðXI8$€”íÑK@Yé*ûÃóxí'ŠTÓ»fa® §ôœþ8ÚsÓz%–‚'8Ìptq«s%úLü \»we€Gê Á>P_e !Ý8Dlog€"4º5ÕmÁ>H“–˜‰¦ÏDß@êþÔÏøÔÿD¾Ðyª® Á>ØOò: ç~—Qö8¦_Ù~â‘»”å£IëEMqz¤ìU>Pì‘bo u£à,@Ðæ´ÑÜûÏE±}_ð›JÞè±GJ)õ¾ˆí%èP áÜýG0rxÄïáÁÞ8…½º(‡*§f
ŽÙ^WPBQ¾#àðà!Ž›-±¿ m¶W¸øOßáê5ëXÌö^å´I€n0Å. Œ\tADpt9§x°G›v°ÚÆjÔØŸ±7¸Só€Ó}ÐjÀ>£à8}?ˆÚg‰	€#þ/DêÖ´• ‚7„!ƒlpf¸ís#ŸØ(àQ+)° þÇÞ¹5'Ž$Q¸è8dcÀ8Œ—éeî1ÁÅÑz'Þxäÿÿ™M%GQyÖ3*È¯mK–•­<‡ª¬”p_\Âà…ë¸ZRp<üô]1Àr¹Z® ï§…ðhX"Ú÷A¹ãó4³¿büÈdšÃfÿZÑFà.~ŸlÅ}‘pË1lËk…	8ÿ©D.–l‚?ëEÛ	™q¹¤ü4¡—ç–;^6ÑhŸrÁe”xXŽðà‡W“KàxY)—IH¤D&¹Üñ+pd€åÀ$§5 Ó/ü@˜HF€kF,¡™,§¹a€à¿KÃqðZ+ø@âs‰¸8„ (x\öàŽb÷³k^jfIz{à$>ÖÝ0Àïã`ï€g?,Ô4ñ¹L|ö³ÒÇ¯$x	•Ÿ¨"°ã5*ô@˜‰ÿê`¥äñö9ÀNPÔèö—„ä£Ø(õG2í¯(Qâ¼rÇŸ\/òàF'(ôcZÀ>E—Ûho€•D&N&‰”>þP;˜À•NP=6Ë ÁG-,ÒD!yÄ
	fpqÌò³²Ç›©[ƒ3 SV¯aF 	’É°$S½61Êo¦ü£ë'ÜéÍ•ÅÏµ°H#¯^‚ÄÙ9sN©ãOŒéEö³Å ë·èòFàÒÆêÊYZàNU`²`Auàëå¿!ìŒP(¥ôñ–ì-–n<Ö½ß"|±ä-®"}
/nrüRr&™–}à@¼Wž	
šýå‚1ÖÍ™áù2Ô=-A’0O"yç•?^bò÷§:R$€—ñ‚XXž4Á™X™H™dlË¿˜ì•¼õâß™Ô‹õšÅÇ(Àš²Î?Hñ0Ic°o;ßÕxÈOð»Ã™/Bf¦Xp%x¶œE1‹3Iµ$”‘‰w ^å-àÌ»ÃÝdÍ@ÄýEÐ±õâ-<ß\c(Ž4‹«ñÈå­vdH3¡éƒÉ¯xjx>3D•Ÿk7ŽÉå-%¸2$,4}¸âã)üü­Á0Ïm‚%ô‚á¬¹ò{‚"¿Û¬	RQ²;¾dØ;Á‡H‘”Ÿ€(qÜ
t£Ôìì¦€5³Û‡!øøâã×“½|8ïd¹0÷›üÔ
teˆ{ýµÂC|Cúñúdé›ÐLóÛžÈÎ\Pq+ÐBªÆ¼ò8–~¼Á0@J'Â à6f 8€V w„Z‰ExIúüñö+oƒºwˆb°’¸ LŸ?Ý1@­ÒÆ$ ±ùàãííí×¯××Gc˜“˜!¡â~DùãEÕÌlÖë´]¨Çé† ¸ú!}`_œ/Wù$Š}Âò=p ž·( ž
t¢lILÖ.>¶„<W®$8aHÖ§	µœ[úø“Q# ž
tbèö’ý«úS6àÔ0Q?X“™çˆ}âO®yêNýÏAA³:;vs,»°og!°$ÞB‰ã!¼`C ìJ05€Øk ä¶ÅY¸Ëú+úô` GÊ€Qs„=LšåëXZÑb~Å9¢[ùÿ‰_ÿmÜp£h9@
Î_¤1”“±÷IüQÿá˜ºp 8Ý‚:Éç7ÜY
´Pe] Ûèá~ü&~E€S˜læ›BØ§…ó«ÔWl€Ð=Ä­»Ž¹Œùf^Ä
–bH&ÐÞQt?~“cŽ»AnU‚Õñ`¾§Àh%C WÖcWÏÉÃÝ —àÇÍên õ™¯OŽ]Wüœó÷³8Cù^»u÷2˜çØ(Å˜30€KDõ€¦i²˜‘«`S“ýç¸èØ4ÀƒÀh2?ÁÑ…ø7ïJÀý`Ç³A Ù»{‡Àñ…¢VÈ{ä¯` n«z7ÚOÛù–>N…–û·X9Ø®894ØÓN„.æª¿À]ÐDpÿž¶‹ñÍ~aì…%öÅ1FÖßÿ'À]ø^ÜlUÉYÞ ØþS@!¤Ed‹°ßrƒ)ÀiÔü î²¦/Él“	N˜+óùqn` g	ÃZ}ç™àþ}˜L[3„š`~’Àùa€<àÅíÌ™îGãa'I&³Y0¤iªc±•<¢ph	ºä²ù€¸ß3îoÍÅWŽÄomÌÚh»OH& TÏ‹34É	L¯G“Ãp’n/B®$DqiÇË	ýä¥ãnàU¹ îûJx†8nï
ÉÌæ‚/›ƒ±‹õ­ñÛ/2˜%ñôþ®×êW¦?lÕuÂ¯zÕlN˜fÕÁ¤ŸnKDý~6ƒÙ$éÇ#šïªÕ^«ÙõüèÇM@…ŠG…¦©î‰ÑûË®PìæÛë$ôIó¤Cª¿¦™îw¤<Ißj¶»±øõ(¼õQ$VSduA•Ø×‰Óéè}<v2CðÒ!Ý:Æ&{6™$¬÷	ÎŠ³æ¤:ÑëµHøLùØó‚Š_¯× ÿx€‹DŸ‹ƒ8s‚)Ùì¬ØäŠñù‚Hˆ	™ƒÜÑ§¥eú:$MÓÁ ßŸ‘ÂDBtˆá„f¥YjæŽ©2=’œh’èín7fÝƒJÃÏ¤¯E·$¾¬P'’vnèf~ 6|s€)1Êx'Ædb¸§sCð’1&è/1Sâ@bÈl¤f±Ym¢M‚“â„G¬:ËNdÊ‡?r
Å¬J$;4*•€ð2b¦K´‰¦¡µ§w ú	wg©Ú²³ÌD—ˆ	2*$8Q'jLDª«ìŸûÁX‚ñ‰ù"3ãˆstA4³?ŸÓÞýÉÓq;*$sƒ„f¥¡5ëÍ‚«ä‰˜Ú	õþ†ßØS)F#‡Ÿ£ /dfB•ú_%ü&TWEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQåíÁ	   € ÿ¯û*                ðí?H„´I6    IEND®B`‚‰PNG

   IHDR         ôxÔú   tEXtSoftware Adobe ImageReadyqÉe<  "iTXtXML:com.adobe.xmp     <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS6 (Windows)" xmpMM:InstanceID="xmp.iid:276F3C44BA4D11E9BCB4F8CA8FF1E54C" xmpMM:DocumentID="xmp.did:276F3C45BA4D11E9BCB4F8CA8FF1E54C"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:276F3C42BA4D11E9BCB4F8CA8FF1E54C" stRef:documentID="xmp.did:276F3C43BA4D11E9BCB4F8CA8FF1E54C"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>•€2K  q¼IDATxÚì½	€\U•?|ï«ÞÒ4Ð´àßˆJ+ˆŽÄ¸â¥UŒF\YFwD'£ãHL”Ímâ7 Â¸|Fç?óMP@˜v(ˆ²JB		éÎÖI¯ÕKíï}÷VÕ«¾uëm÷-µþ~ðòªë½zïª{ÏùsÏ=—†A     h-hø
                 @                         @                         @                         @                  @                         @                         @                         @                         @                  @                         @                         @                         @                  @                         @                         @                         @                         @                  @                         @                         @                  € hkUÁWærüúM‚ùÔñ”ï»;ø6€fhÏÇcüõ	ËzsNíú·?ø¾0   µÀW”{F—.Ý}$»o[÷÷äøô²Î]#GµA1Öž§âÇjf{NÒî¿òmx<}oçhÏ   ^O"™ë˜Ë?,¡äàŒñ(Wœ§½ÿê¥ @#àÖë¾GN=çŸ:öÅµ­åí™¬®ÝÆÛ9¼}   t7œw¥Æ}ÉôS: žÃ)'¯ýè5ð €z%²Üø¿þük:S±£‰í™·óU}›â@ €–Wšû/gÄÚeeÉ÷2àÊst*{' @=µcNd¹ñ—‰¬ØžÍ÷»;Û5D   å½ÿ-ÚAD¥)C&<ÀÃ««¿†! ®¿ÝgöNôåtä¸  @‹{ÿ·ßýÍ‹Ò”ñ!  ŒÿKVÿS‡ão¾ÏIìlË @ €–DL£äÉ]û<·[+À®@€Z€ð÷|vcLów"±"þã7Œi†   E‘Íédç8ý«Šâ”ÏãÊ‘  Úà	o¼àJmëþÄªÆŸã¡]“}ø  åÀ5ýÒ5¿ôÕfå¼  Õn¿oûø·é¡Yr’ªñ‡8Æ0   ´TÃÿnd ¥•	 ªaü9ø|þ¬®ý6Èµ8Ö µ  ¡þ·ó¦Lp€)‚@ÔXýé1¯ÿNO¶ñHÚ+  ´ÖýëÍ‘C™LhÇ­úûo£X:ø¸?'˜Û$³fäÉñ7?óÔÞñ%<   @KÀÿßºçH»_ê„ù,Ê.…g„Ýnù´UN0Ã¸o÷¼­Ý·_.  ´xÒ÷z¸÷Õ=¸b}Ãù×v"Á
Ëøs¬ùì÷c¼m…yí;~ÿô6  ´H#Õ
ÓÿÂV¤2Í’$Ÿ£ÍÃ¶ ”´š¡ÿ°¯<   hOŠ+»oüàÖª|r…ÍçjC¹AÚl˜¡È @ €–Wv|üŸúÅ†¡oˆú~H
‚Ž²Ð¿¡º¨¡/ì}-¿.ˆ  ÐÔ0Çäg&Çø«.¶­Œô†\ÁfŒsÉ\§¨ÐÀk{åä±,ôOµÁ@¥•jºZ1   j×@‹ãÿ»&´S„×Ñ ÊÔ]Ù~‹ýÛ}h–$øÜm$*Þ?ýçÉ£¡_AÛ,´OvmÃê€  ÐÔ(ÿG¡PH€¡¯E>  êýo¸þzhFÿ{NV#¼U÷S{ÇA   4µGÅ±wß(o§Ý†¡o¬Ö½™ou'“	m2®/mõÎ?m'¿úýŽþ|û‰ª­:o›=óYzß:  4µGÅ½œ‡'(Wzì­jÝ›Rí²¼¢Íç¿tõW;0 ¸ÕýÅPo/¬Ý,ãíG4Ú¥½JCêåäôßþ¿» @ €&mœÅñÿqÊ§Sõ2m7XR¢â’geñz%'é¶Þ† '¢ZLüËðöÂŒÿ¶í’jþÛ£ð¿Ï}<ý€  Í‹-l£siãÓ–J´’Ë¯U¼æ	‡\™ó©‡“	­ÕE˜Tzÿfâo'yãogèUÚ*?W$¸å„‚GÂzg2Z¿   4¥båcïwüáQJ
Î¾’ÁçÊÐÜ‡)ºÀ”úv®lç2ÆÚDª05 DïÿM\¥œÑ¯æí$ß^ÂŠP‰DW ¼ùHëOí?¿   4%øøÿÈx²+V¶­¨ðˆhÍWº&-x[y…Ë”ü«¿ÖŽ(  zÿ<:T|«Zå©m§V9†AæÒúZü
@´á+ êÕ³â9 ÌËé£†¾•ˆIUazû¦‚v \©„³—£±Žî¥«.úöÁ-?ýž±ú3—ã‡jaãÏ±æ³ßo›K×P¢ÿÎ ÚW=9‚åÔþl"]”÷„žµî_­­ÿÜûôzl‹ Êˆ  €¿†¹° Ð%É·/{XÖD`9ÛúÙóìß?:Ù_øÝýÛÉŽs/áíÂ ÚW+¼»öå§­ÊMžÐsù}·îkÇ4U  h*p¥ö³›~Ï«ìH¡°µá½)?¡VyœÕî´‚r_Îžçâ´Ö}_éJ·µ½>íµÓÓyã Ô"ôogðå$V±{Ÿå²œc3/‘‚@  Ðt
vÛ®}\³uTû¬­áÁ›ª0þ6×ËPí‹üõDB{.<¯ÖD~ÚßE…iErºÜ¶]ÙL‹Y'žÛ'‹RN8ºöL§™Ï   @S(X!p‰­÷_#}‰tîÝ|üŠ·õÈi~Ú_*×Å£AœR»UV 'cowÌ¾­w3ú7C|‚jÐä  ÐLØ±wœgWwÓ¨+ ªçäÚ¶>ƒA­GNù´¿C3ú<±Ëú÷kà½¶Ãây†nÌ³-žŸ*   @S4Êb`"K÷r%çiLÔmÕ®²šŸ‚Â¹ß2r¹ó&ÚóLÏhï?gÄøjk‹ëEx›óïÔ>ÅöçÔ¥ói,vÕè‰#cI$  @s@H \Ë•œ£÷$+Y«1W'ƒïµ°¤°C"=s>»lõ§7b( …¼ÿƒñì—1È×û÷’DjU¹Ò­}z'!3SH@ €&ñ²8x W²¥UÕÜÂ£n•
!pRâÅÏ«±2«p`ÇÙ×¾íb”	nï"AŸÇ~óaFþÎò\˜Ê-"eu¾[[7÷¬ýí™0^e   ÚËÊ' Ž%;˜†ë#C«Õy×>Wk+ŽÿžÍê+óIaCÍŒ×ß¬Í'³ï"<óß +ªþ Ö£'›Í½‰€  Ð4Ø1<~<¡´Ç²¸Šƒmz÷A*~ÎÐuqÏŸ¯çàTúË¼6 ¼°æôþù°ÔM¿ßaN÷[Æçýóßß°úÁ#ž¡"µ?^&»ûŽ?<Bù3  Ð¸r!p7ó²z%eçßpËJÙ	°HØâÏÁ]-sÏ6¡8‘Ÿ>‘ 'ñ01¢ Mëýóê{Ë1=WøýmSLòk¡*o¬<Ku˜d @ €†„™ hd3ò)N²Çã§”ª1ð9°*Àbgåáà^f .YóÙï·#
Ð”Þ?'y=üw.á±oa/T%´_BÌ	hïÌäX‰€  ÐÐÊ–£PÐà¡Í¾z~^!\Z1pëÞÉ3‘Ø\í±èý_H
áöË¨”U©ß ðN@ûvOèoã/@>  a± Xò¬••d¨ð~}Nú™ŸBB`ó€/øsÓÝ;N*I©ázü–Èåô"  ¦ŽãáLbä•­e¨ÕuH ì$,ïžX~ÅÀƒ“©›‘ØÞ?_ð‡yÿWÿ
m ¼öFµÒ=\îÅ+fžˆ_  ³1 wOèç0+Þ_éU&áY®¦4	Ëb–è9xcfÞÂÄ<}!ßûß¾ö}…=oü¬Ú£¸•µ/I|.•*mïaA<y" *  @Ã"“Í’\6÷©šÜÜAa+x{\/ŸOfnÆbAïý³¶X £”Ø&þ•yén…§ì¼}»@¬ÍKûà³Q€  «t¹÷rÍ·¹¶IOC ~r\k=0Û(€!¾}ÿÌ‡‘ØðÞ?±Xî×6"¤jìÅöê°–…[ ;¾}œœÌ_ƒt  @Ã{/{÷¦¦ín¯#h¾ÄÁóýŠ$ —Õ¿²t¢¿lCzÿíÌû¿(ß¥i¾Ú†ÛZ!ä­Ì§²7#  ¥À´Öž/²K¼‡2E¯¼ä¥«Ô^w¹žøžšv5¾›2ºyÃG±dpãyÿ3b¿ß/TÛŒ]ûñ²:¥§“óC\yÿ£;1 €  Ö‹	€;†ÇNÌ·R÷uÖ­’Í­¢ì¯Û2«‚’æã®r¥7sïY1s¯‘j?æû‰aZ`ãyÿIö#~Õ«÷o—PzŸF®jy{û% !  ‰¬¶¯µîÉÆÚèŠ€Ûæ!°Tè
88™üðÀê¯u`l¶A¼ÿ}3Ç~íõ*Þ¿ÝVòæò¶YÖF©æØž" —Ð€  …R	àLêb¦ý¾Æ5]•²CD@&.Ó°Ü˜ÊµöE/À´ÀñþuãÆBÇÝûw#Œ¥¹üT+#eD2¬! Bº÷ÇÉ)üÈ&  4”òÝ¶k„— î"†±¡¤<s;…){ìòV¡€]y˜OeŸÄ:áý:â)÷Š 	¸¸•Ý}	éáíŒ¥!  …ÀùÍº™çuEÑû;uóø’ü¢€aC|ÿä¾™/5â´@þ¼|›OO­6óx“xÿß·hPõ-@ñù(1ž&Fî]<’xA¾ Öà¶—{,ùÀÄ˜ðµt¯ƒç.Ž©šÇK•]Ž‹ïûVÌTd¯7êºvUwgÛwØ[™j~¿ó©ã)wÓé4›NÆØKÍÐ³m<ÜÒ·d±15Ÿ;Ö^´"ìJ2ºq;ÿ3“É|ñäsÖŸËHŒ(ØfvÖ¹…=!'½cÝ¹ì#›)ííjko¿2¯X4úÎ¼Oj~Œ’ä’E±íãSÓ)Nñ Z[féâ®4ÝÙÙ‘?sQçÁšµÃÝ£ó/ÊçŸð!(±–„ªÒÞ‚þ…j˜±_òçß¶käFdh  ¨{˜3 öÅ—ƒžV˜èn´¬XU~¨
º\Q°ý†­{§Ö¬ºèÛ7mùé÷ŒÕŸ¹<ï•]rã~d:ÙNôl,Öyô©yã­weÒifç¾Åb“ô
Bb<"±‘ÒÎËØ‹'üT¾ÀÍfö½Ÿ[´ÍüõŸ˜ñ~½^n}‹tÛ>v½-Ä\­‘’ükfrz2éLÞƒÎ£|ÑfŽ	r>!+<ê¤d<Íeç¦7±]@è‹Ñ÷v¶Çæ§d“3“"Yèèì ÝC3n¦÷¿î_­Í§²[+JKûÌÞ·‹8Y—ÿ|Cbÿà‘´˜F“\¶0Ú   ‘bËÛh"™~3&[óFÈ§ñ·R¦n
Øí¸o”“˜AfµF¹w=ŸÊqïzÎ«‚Îù¿gF>U2òZß’^:5¯¿ô¤w®{3äcVôgŒJ}ŒùÒ„$S›ÆžldÛ	ì!ø¾·°§—1ƒ{Y14q™p›+Ê^Lì é¾ûÞñOñmƒC4_qÏ"FŽd³ä½ÙLö½…ãù…!'Y ûÆy°€o=¤»»ë_wi‡Ç§¦cŒd9ÈtttÝ]þÈÁMwï8­8û„}_ä² Æß/YðÝæÈ
4nß;Æúyù&  P×0K ˜pmVM•iØÈ+ç)Öó¶iøÐdò›oøè•_üÃ/¾jù|\=oì§f;û–,Ö^´æÊýÌ³¾²O×ò_ÓÁ‰dû»·xf8™á¢EW›PÓ˜_æÏx»~Ë%Ó-šqû{9ŸÏ¾™Á
®`q)Ã06™gÌÏ§¾1?Ïˆo2:‰/ƒ£I÷¢ÎÿÌ¥fö­-ç…ä½ÿDúýÅïo 0Ò éQbùàR$Àøs2á¿ÿû¡]   îÁ §ã3\ÁópðÖCQfÙë_)WŒÉj²û{Û¸wFÆäåšF1CøûÄóá{­£çe‰Ôl‘uð=ìãØ™gjJæ)Sî›ÓÔ‚àÊãÖ~úÂùò^•¸=ŸõýYÛ¸@<Ÿµ—íìÈ_ò‘#å(¨Dêì»‹ç£éYNu{ÏânmëäT<·tIJ0¶üôò7Ü|÷öÓ‹×=\Šzˆ¨€Ã‘´³RtÉ¿ïnF~oç%_:ò    ~a& g ðŠy«,HˆÊ7Ôñ}Ù#«PÐ¢‰ñýÇØ?×'’™K_òÞ+¯K¤Ò¯*œTðìI*Ý]éó»s‰tÜÐ—ÍIp6˜VUÅ%~‡áp=ë -T‹(.E;òÄ€Ïáç¤ÀàC$žH¦Þ™HQF¬:æ)XMhzóÉïX÷‰®EŸN$Ó|Î??ïÄ’÷/üF Ÿßâ*&÷æûÝ	 €  õ3a¿0 ŸT6¸`ŠF à¬€JJŽÈÑ€J’ÀSn5ÉŒ?¿ïŽöæZ¡ ÍÎÆÛÊxz5¨6š”’Á‹	2P[#lm ½œïp#-öòˆQ$Âs0bP<q3#Uç”ÜÄŒÿªbâé
&ó€%«·SEûä/$nvï-•F"   Ô-ø€g§Œ#Ìkû~õti„Ê]6å†KcÞƒÜZEð >:µ70v±’T%FpùeÂ³°¾Ä¥ï¿ð¾³­ïßÛw¾’øàÑI^8í8:`ø
€Z#“Í’l&óý’c¸x·Òâ=ŽwÔ™Ýêny£a¸x³TÚ‚<"]‡
ÏgãÅ^¼kÏÓóõÄ÷|ÜÏ6üïõ{r»¿B„ÂÊø[µ¿(<}ÛömÿRZˆ L¯æc&   Ô%Ì ×Üx›–O ,„Ày²—³²´Ðª­¶fm¬î_z/¶à…—;E}n™gƒ)oN”ºxøTA~•ë‡ùýØÉO¬°Uû»]9¶oWBÔ›H¦Þ‡’À  P×g °­Ï¨(`feŒˆÃxh" ^V,“J_|ÏËææq«ž/?_ƒéu«wù©@Ü\<ôj·-ï¿Ø‡Jÿì¦»Q  êfxrx,ÕI
Þÿ
ÏÊQT’µ"vÞŸ¥#åcÒN°ªÇîæA[xÄ¥çñãÁ»\ß¼v)BmîWCùm#Sno5Ë¨”_"Îù\‡m»öå  ¨¿ÆWl};öy=)Ì h8!<’÷F‰Y©vûFf@¸æ¨„ðƒH/CŠ÷R1þ¡VëgäÃfÂÐÙrÞŸ8±æ6,A€  u	>N™Õù´,ý×‘ Õd-»ÏÛ)pWc {¤¼¨æªÔ¯çd,U`PJ”åW‹ ¨“\™!qy«¼®¢üª3 äˆ8‹"š'Òý;öŽ½…ÿD@À˜Ô|@:™xSˆke.z7Å*’÷hXÐ ‰nŸ·çµðMÔ…vTçí«FªQÈÿõÌvB}O±t_6àvíÇ©§i•öuÌ¾`ö“Êþ‘/vµ<«ÿÎ^.– ê
â ¦­®#…°e™ÑWpÙ=v?Óµ¼ŒWsÌÛ‡+{¤>ä÷”§š4ge ‚zø ?ñ6+@ÕÃ·œUà]~1âQz/—]ÇˆõxI`Ì @ €ºƒ9€èúevJÍYÙK$¬i²Á•º§ëSç–õÔ «xø^¦é©Î M(€öe5]P$®DÕJþJ²\Fš©¶žïî+,²   @ý`a@’×ÿ_ìj†³‡®
YY»E lÃ„•õ¯ê»]ßÏóx™%Ua ZÊOËg¯¿¿Û4ÕÇü­" „ç¤],	   @}4¼bË›Ï0Û“WXzÎUÁùËž7ÔB²s÷ƒ¬ UþÂ‚Â4>KÚPµÚ…Œ¢ü¾B ,®Ño„Älÿâø…ç_þ‰îxZËÏ    ®`®@
« ²ÖsÖ£åSliH
;¯´ý†¬­ž+j%¤t®ÝµÂ”ßé÷q#$a”KV!k!Ëo!RÂ°kÿ–¤¸@¦{ŸÜ}øoób&   ÔŠ3 >^Ò…º·µK¬"†ƒG_¡ Ý¦ù	Šºp]ZÚ[oÎ¢pq-í­~¥|åç‹ï©È¿pþÂÞúyõÒ>ùÖ{°º¿(Ÿü†b{1l	d¸ò›ˆõ ¿õó*DÁºR™ìÏQ  êe3 
Æ¡Ë«ñ÷â±ŠJ›oy¯É­–»M˜¶àq¥½·Ò¶å
^LÒ²¾^¹GhÖà{Z\Tˆ:..ä.¿¹/Üwaïïyë]þr‚ N“«…ü¶Wù©¿)¼/£iF.{Þ–¶a   ê¥ „t°­»Ðc®ž¿µB/WÐâ{–ŠS©2µõÀŠËèÂ^÷á‘Ë×_¸FùµýË/~òõåçu>ÈïM~§:
^ä·.dä‰5ïW]wüá”@ €ú@iÀ‘$Ïþç…JV¹úøJÏ{ˆ—8*d¯cº²‡(o•Gíù*=Ðhåú|ßJ~-´öå0£g|_Iãýª«ØÏ0 ¨ *5ÃìÔx¦è¥V(4C™’æT	Íê¸Se5çoHÙ=üÀªR›l€œ®ïE>§ãªÏ£ú|ßêÄ¡½•Ÿ£ò¼–3a¤¾" Þ¯äý3 D €úhtZqÀxæËìÏCâ¿¼«JÀ&‘Ë§G(+o«nyH›D$§»ìG¾ÂX=-Ù—o%¿ÝÚjq‰}’ ùý|?{Æ3W‹‘7   j
> “Ó×Wxþb8SÊ	°S˜VÞ‘³·¦Z8f!¬ë%Ä­j@TÇœýÊog`ÜŠjå¼ròäuÈ jù½~ßnÞî÷/ÿ>Ü§	Š•ß¿âžbÄ¬"™–ö2²}9f   @]€'$ýò–{©‘Ëò€zƒzlî?èõÊ•xpx«ü¼N†6¸üQTòS{î°ÿ0Ú[5#cþ¦ñ·!»F.·ág7Ý1   ¨-ÌD¤m»öq…ÄÃÿ}J
/(']IÆª–P1ôaÊ$‚áÇ`[E,jùûŽR~KoŸï]fÎú—ÑËûf   @ÍÁ’xf2S‚[£ð$­T¼ÛçíÇÆý*§kº]?ì!	/ò;ù¸jÈÞîú^g!DEÃ_]cÇTZ>ßúÙ}ÂL À
˜ T<‰EòÌdMÓÞÅ”Ó¶¥rEß§÷ï–Låfpì¤×¬m+…ï%k]6°*Yð^Œ`µä÷ò¼a_/jæóú"ž#bùû²þ¶ev3   Ö!§â€ƒ³ôi¦¯ºN¾¶Vñp½'=,òWOþc_ÅçÓÈÁÞßÈ‰˜	 €  5Ÿ0;Ÿ|¾®ëÂ}q®~x„À.ïU=V?Å‰¸¸ÕƒWgùëL~9‘Ož×	N&“óœx·Å0ê¾ š0‘Œ\öb¦¥ !­ø&„HýL+½Q«óÝ®§zÜ‹1÷aLC„üu&¿ièÅ¤¾@Æß	@O6›½3   f0®¾ñ6Íà Y*.ÃÝ¸Ë›hôe…êÑC
b ¢†—iNò×¹üV¥|­ò_,çù[R&ù^&O÷Ö]û4Ì @ €š¡¸w¹x	àÞ…%®¦æ¢¤dÉªJDSëõnÀ!?qoÏâ´>·ölKlå:%"ÀK÷Œ`&  9 @õâ ®ˆŠáÿÁeµ°w­Óîä%µ˜ñš¡cäÔÚ°kû®èO¬?8;=žæ‰€ " @õ[±µÍN§¹Bb/¬ÎmúV‹F\CÊ¿þ" !¢,"R´ö¥Ïg   P,L$yåd*(oµû}(V«| ?c®NÇÝr‚(ÕóÝ’Ê ýÉ¯næm”åDhÅ™Y™H$v`M   ¨øÀ$SDÌðOØŸUådå FÞTN­=^ÈßÐòÆ‰¶Ëàçr9‚™ €ä  Uƒ¹P®¨ühÑ©œWm(¯Ùî¨Ø­¸¼~ºÓ<l×WŸÅÏõí<P?×ƒüõ'¿2’ey¡N
Ë—Om$D`”½ùlq& ’d D €êÁÌ<æ
HÏé2åÔ—pY¾6’ˆ@Ðp­#A=LÈ_ò‹”
jUô§½‚m½ÃG’Ýb@   *(.ÄÐ‰E…TÔ_ÆÂÞ²Êšj@“MCR_‹Èl¹eCìGB*‚'ÜöÍM§0   ª«Ã‹
gnj<Å,|?±™àMÑé¥½øZˆàšvcþ¥ˆ™¸†Ð4MëÇL   ¨~C*×ç
Œÿmî-–‹-(9£dðÅ1OsÜÓÜ{ª& u	±-µå‚Á·jÿ«MZmEäŸ™™y>f   @ÕQZ(›Ý,¹4e{«ÚìÎ^=-S ­Th*ß^2þTjÛ6­_šöW¡ç6¹ÜÌ @ €ªÂ¬A®g’`Êé‹ŽjÐr±ÑãÑK{Ñ;2hTëÀ@¤æ¿ñÒ…½îÐþí?"V$˜j¼ßu`M   ¨J‹ Ýp]v ãÿ^ƒ9dàìi‰	ùüZxŽQÊù«!¿ßÅŒl’þ¬Àû]ïð‘ÄQb¿Z¨ TùE€ffxŒò—ž”™•úõ¸|á•® .2$†X½—÷A¯g%¡Ó"H~®ùM~»öí´Äp~ÖŒ¦*jš¤ÁŽùsúæ¦&0 @ ¨LE3|˜y†~	Û†ˆ¡Û¹Aå{¢¾üÂ1¯cªå9rVåfµz!U8îv=B‚Íd0 Ê_HdµŽxiÿÎ_	7þŸ	ÀqŸ‚V ªŠ¹é‰óV–1}5hK ,Æ0= ‹€³AP5"AÕõÜ<F»Ïú­ ùO~â¹ý{,‘qÚŸžÎÏh‹ÁÿC  ¢ndS Ÿ*y#!Âj=øhÇ¨ƒŽ	‡=¦\í1zÈ_Wò{ÏàÇ{Yÿ[‹™   P5”¦ ær[­<Ç¿¥ˆ€¥ÂsP|VÁñ|?%Èý£–ò×V~×öí¡Í;ô§>¶õ`&   T¥)€éäJékUq¬²
YÑA¸<æ*&R5 VuÜrœÎ‡üÍ+¿Ua,Õö_2øf*Ç
v±ÞáÃ‰þf´6 D
®`8ÈOäóõ‰Yï_[PNækÓðË$ÀJÙ:xDù¬h‡œ yõA«Y*ÇŒ@÷·2P*ÏùG~ÃlÇ&	p‹X¹?•ƒöâ»<‡Ï  €HÁÍÞý£1¦äa>PµVL‚†×*=ÿ‹û„í1Ê›ªé–õù›W~jzýA" vSékZ×ÁYº#•ÃT@D   *pÃ“ ãIÊ‹ð°ã
OŠª!Ðœ=Y
Þ¿_Í‹Çç6OÛé~A=Jù~a{¨¿Æò;û»w€ò! ¡o-,"D»“‰ùyÌ ðëÑ6°â€¹é‰$SrKˆ—*€f€ª7O_¦©Œ‹c°†°#	,¨Ç©Zò7—üA¼ýr¹ÍÅ³ÈÇ2éÔw1   ª‚BÈÑè6,”a™õ¯W¾“šœêX­†&zlÅ¸'ß›ÔJ•ÔÄð«—,l?›ÛõÜžWxÏÓó@þ”_¡ýÛô	»å²u]ßÌGf   @äàS ãS“Ï÷íåˆ1ÁÉN!Z­‡.Ž¡ÊÇU¾<Fë¶É÷W–_ñy!“ÉïÒþÅ°¿µÇ_VeRz{üî©ø|þMÌh]  ˆÜÃøå-÷Ræ¬%…€’7b¥œJÆ¼l€¤ä¬²œ­f¨Ù€˜
Þî\·,m§ëËÏ'ß/H8äoùÛ¿å-úYaAM|ï„ƒ£“±˜F3ÐRˆ  @è0=‹‘ÑiZ4þ½¢wb¢¬ðè«Årè÷ûú¿ñät9Ýòoñýâš ˜	   ÑÁœXÔ@Ì ¦Gbåò˜§èñx €F‡Ù¶=¶Ñ¸‹‘5»([NÏõña9ž «Á
€  @Ø0=‹é9šRÊ½ÿU²GbYq)+K h&¨ô@[mQs–ƒž»dËÛ0   "h\Å)€óñÉyögœi©ARš‚¥	úÈ^q•xÛ¤?4c 	# 
í_Œ¨‰[åuKùÏ²¯ºï‘3ZH"Gq¬ñçbÒ“aãµ‹Cõxù‹úÉßž½bÝ)ÏÎúç?w)Yrô¢üûS3	²wÿò×§†×Ý~Ïãë{z ÁQ×¿µÔ_·þPè‡½ìÅ³{÷å‡çtž¯³ú3—ã‡ €ðPš¨ë½žt™Î4•šE³:IPõ¾l²®µöNò‰5+È…ï}9aéb~t½üñî®Žü±×¼ü”õŸüà[È#Óäç7ßKn¼å/DÏ¤B}žjË_3o¸ò×ä·véÛÿÂì…A¶8<Ñ†™ ­ÄNÈPš¨g×ü2¤Âúç¶µÐ+•›[R“¡R(È“’”æ]_¿ýµ/&÷ýürò•O¼Ë4žÀÏåŸáŸå×P~>›ç©ˆ€D,¿ïû}¾ÈÉoíóù¼¶9§Æ1úsÓYþf€  @h¦ ò6Ö¡âíˆÊÌ*‰ÉJáb–´ªËÃµ_X³î†õS2VÆ_ã?ö¶uŽÒâþŽÏ+g‰G ¿eÎEX³2êLþHk¯ò¢ÞþeB¼ðÆÂ¾D¼óûþñÉ8ÅL   ù)€ûF¹V~S8[Ù¾¨¬-*¯)x<N^Rá¦ož¿êCï|õú°¾—Ï|dÕúïÿãß®òl`eƒ¦jP‚zÄnÚmššê4ÎÊ¿éÊ£û­åWiÿòùÌÚâ=BfsÝ¿ÁL   fHq*ISJûIq
 ß(€—ˆ€ï´ƒyíÞ·î+_º%ìïgÍÛ^µå/:{]$qˆò×%áˆHþhëÁuªò«¶ÿŠÙ3ö7(²…m›ï{d'ì   „Ø°ŠS ñÉ9¦p¸RÌ+žz¨ôæÑ€½ýuäCç„çVz‡o]ÏïQ¯ò7ÌõCx¾èëUëó9u$¿a¼:g×t|&Ÿ¯ƒ5@   Tœ¥Û™«Ñ£¨™jß1:‘u—¼/òûð{ð{ø­#4õÂžo¥ˆÿJ¶ußÿ×á“ùp   ¡aa
 á êÇè‹àÓ¿‚$y¿¿€ßºÚ ”†qÂ’nmÿ3@   ˜S õ\v-³î½åÆŸ.ì­–c¥Á¼Ã%‹ÚøÜïj!/·Å‘ª,UýÓŸWõzµø­½<¯¯yþv‹‰d›”“í}ûFrÐX   
Ä)€Ô2ü/(¥rTCqRÀ/ññUñEÏWšËÀ•¿Ñ	ƒŠüõþ[‡äëûJr=›[t-¦‚  @hX˜hðd£¢’.šz“¦?>çQ›×á%_«ý}½ùU/Y§RèE|^·óUåW%~²ÔUv”ò×æ·X„° NeÞ±öñ~zÓÝH  €à0Ç'W.½|¬± Ôh~3òKÓ¢²
QFë1:-GÌ7^ï½ÚßÙÊ3^°¾^äwÛT	ƒlàäûEqp’¿6¿õ)ë#“ŸÒR_*ÿÝŒ
Îû )LÑíÛ¶sŸ†E@   x£*NLÎLÅ	Õú˜²# "	(Ë0=«1LÃ"aÐ\Ö4dÅ{©6ø=½\7ƒT~ùü <(‰RþZþÖ^äñÒþ+ŽZö{™ÄÛæÇYÎIÀÔÌ|þÂT@  ù)€zîw¦ñ_Ð9â0€”hŽQHTË›¹Ò[5ÁïV8¨ünW¾ž*A:¦üµú­C•¿‚È›Sÿ#ŒŽo>8:ÙŽ©€   
JS Å#z"âëål³X«Ç£†ê¹ª.?cèaËö˜{Ø„%LùëŽò-¬Þç»ýËù6rÔ´X#ëOò÷0  ÁK4r™5LÃœ/*"«$@J«ëy¸¾Æ{µQÍ{ªÔF›% "óÿÖFEÿ’“rs¹\ž¬c&   ‚9†xõ·Å˜rá« .w+{j=3ÀÏ É”KŽÁÞýGªþ½åïé1çA9¢(¿òýÜÎúx ùkú[{”/Hû/Ë·‘K1/lÝz6}1 €Ààc‰¼¾xÑˆ/»—×¤ÀB¨Ö°Aû	‘R!Ï€VæüuÇÞªO»ûÁ'×•žÇª0’¹·xÞ°å¯8.?¼¹=Ÿ›A–?_Eùkö[+ÈïØþm	‚…üòbOÛ·Ø'ºø¢@˜	   ¾aŽ!î[Æ4K/3ôCîÚ	X˜²¤Û”yAxÄ·ßû×ªO{ð¯Ï¬Íãp3ðòæFÂ–'Dùkö[+Êc8D
}Gòjì2þm# ó‘‰}£11Š€  €/$f¦¦™2âu K
Ça¹Ùòœ 9ImÁòT7ÀM¡ºxÀîØO™®ÚwÅïÅïéÙj Ý" ª„AÕ »¡Šò?öÔÁÚþÖž"4jí¸Þ*öGvd€mËŒN`&   hPÅ ‡fé“Ôn@«åa%&z8ne¸-OË^ÿüæ{«öåïUv‹i]†á •¿bõ8ù~nÇ]ÀùóU”ßÐ³5ü­½ÊO\"b+mšÜ$ãEù)'é†þtbn:#Fñ   PŸ¨¥ã¯eJ«W4èvGž–$oâ9òùþ’\]*DÄ^ÿè¿î©ŠgÈïÁïáË_Q—¡,¬lU[ž†ø|Õ•¿6¿µšüvíß­”Í °èæOöêìñ©¸f’x   ”a&MÄç_¡ë¹‡,³•¥D¤ò€ÊÍÉã±6X²A«,Œâ¦€¹g´þº_Gþ}ñ{ð{9?¯›|áËïl`U7ù~n¤ºò×æ·V“ßÉã“hJl›H›Œ™LÇ<z€  €2¤)€mÌ»8Û²ØŠEDÀ)¤ïæñ„ïa>{Ç½Oëÿý#ËÿÆnYÇïÖó†-¿ÿë¹Eêíyùo½•ýÖwVù·V{^»öo5àýì
·aQ   ðâ@ZXPÿ³ëºææ˜¤“z·ãô_@È»¾ö'w¬¿åw^ö÷ôÓÍw­ú·›îYöóÖæzö¼Ö×»ö'·¯¿ùwÖø·¶^åž¿P…sû§cÛÎ}1L  e˜ÉCSñ9Þ®xà«"¹‘5#)Ð-‰êó×üç–0#ÜüúoÛÕóÖúzQ#Jù?u}ýÖNíß>‰S ×âÌË¨Bé#>tÉT‹  @ lg»%l»@ô2ÄB%eÊÌ-
 +¼âù*!Q•1Tùzf$à“ë~(YŒ–_ƒ{ƒ†Zî^Ÿ7
ùžG%gÃÁ®¶üQýÖAå—Û¿í´ZÅY6ERv8<Ù©€­ƒ6|@hl²8°8¨[ö2Ì}Å°@Äuåe¥[^y°¼‘n¿ç¯äîÛN>õ³È…ï}9aébÏÆ€Oÿâà<	L¾Ÿü<õ*ÿÂï©öyÙH7‚üaýÖaÉ_8'`Ä@è{b4I@,ÖÖsh–ne/OÄT@  PŸÈ§F[Oåjå„ÀIQ•@ðx„¨“Á‰Ê@q¥þƒÿØB~øŸw‘W<¼ùUëVžqÊz¾Æ»¹Ì+_ì…×{¿ûÁmëüëîõn	d€«q¾Š²ºžyðs½z_ÏeýÖA¾O+yäö¯Ô_l" "r¹\¯¹(P[Áa  ð™Lûç”’´l¼ßÈ€SØ×î¸ªá¯yr˜oë)ýÝùë«á‘×J~¿ç7¢üÜ°óßš!»ó××‹üNyóþ-¿8FzÒø¢@ƒ¯?™€- Ð< 4ðìá_Ür/×\˜*ë-+Åê¨¯²
Ë¦2ŸãqE¸M+{ÌYõ~N#Œ¤7Èß˜ò‡Õþ­q§†~‹  €Ì¬á‘Ñ)^ÀÿL¦âúÊjÍWè½Ì+Q×âþ›®ªA	;‰-¨®ï!«ÈïiùàÒÚd¥‹½jzf†Š}   WðìáüŠb†±‹©œ	¯YK†oFå3ª„#ÁµxÀçüÍ!$À)üÏ7Ö‡Ÿ}hûÁßb&@k 9 @(àYÃ|Àètf€jÚjƒ¿áâýB=ò@ 9g@Î)°š*åVœÈé|·ûY)p•óÃ~Èß<ò+’1ãßh3
0˜ÍéËijâfŸ  ÷†Tœ¨§ævSB·“ü
cF DÍÏ¼h§y“Ï—Ö2({†0<T·ûÛÔE€ü-"¿OïßÃÉDÏåþ26‡]@  Ôqh–>A)ýCMÂjŠU•àv¾—ëÉFöU¢$¿¥å÷êñ[ÖèŸÍ´Ï32O1  ð^€Ï#Öu£ß¯§"{-V›«§ê±É¤ÛqUÓ	âCþ¦•ßÊ£—û‹\èÇÉã·ŒÒÆÐO7cQ D  À#JÓ†ôìPE€|º°wsÀl*zöhT=.'£ÆýT¯´.äomùÕÙ·ø×rþÏ¶]ùE²Ðlˆ  €#ÌéBWÝðÛ˜žË•OqZ˜cìjô<~+Ç³¶G¦êZ)xÑ#Û£„üM-¿“Çï9éÏ¥?>½÷ÈQbß  [ðiCñø,5ŒÜrNˆwMiƒóÖ g£ò‡*¿/’lþO&40  p…9]hrz.–W †ñ—P=0EÂ`5ïYE!º}>èñ°ïù[Gþ F… \’œ‹§Ä¾€  €#ŒNt]ô
{›gÆ_2•£˜C çxQÀN!U«ãòõUïï5âa÷<¿µä÷yo‰B¾Áuãcùi½,DSC @pY¬œg^ƒ¡¯e
ä[öILššr²Qˆòr¦~§=y‰(NJYÈßÚò‡æý;&Šg]¼åm?À¢@ˆ  €'ŒMÅcÖ.ü(@”ð2Ñ«ÁÃêAB~ÈoÛ/-(¥Ý÷=ò4ì  ¸ƒ× ˜Í´Ï1w¡ÇvsD
ÚM!×š@¨>_ØcÌQà—×~rÕÓCß%_þøêu­(-!û€EJh¯¦Q2=3Kùô^Ì   [ä—¾ù^JôÜZæ©\¡äíSd7¾³öÃëÞôêÓ¶twuKÎ;{ý9oú|)µe{Ón+ˆ€Hˆ1ÐÖÖv  G”–><ÅÝîýo,S*^”—Û¦ªÐ€ÈpÞê×‘óÚõâ{ÿò•’Wžv2¾œZ~¹ÈVii_ZI<_ÖÌd²}Ý±Ü‡ùß˜	   ¶È/<2ÚN(éeö)_@TZV
¨pOÿš/}¨â}	øï~$ ^" òæ£/é†qÁÈþ‘¾\  °WEï`Ï¡™s(Õ¸ñ_XÉ^¢ 57îÜÓñÀc»ÊHÀ¿~H@µ¾]ê?Þêrs†fÓm³˜
  ö¨Ø‚:µìJ)_hÀJ¡¨( ¦÷ÐjLf–.éÉj¾÷öç>7ò&~ºù®U¼üe$à„¥‹óçñóË²Ö-äç÷æ…Ï~t°ùICÔ¿¿×ëËu9lòtŠ¿ÝrÖG·oy`BqMÔ ƒ{	£sÚcºžû63öƒžW#+)0ÕåV…qOÓÛq
uº/¯ÔˆÁ®ïE«Ü?€üK9šü÷¿œ7ÖŽL“¡{[÷§Çw¯?46E†÷Î¿¿üÿ,#'O>á;JçŠÆÝõ·ná¿ñ‡¾t#ùÏï|‚¼æå§”"|˜€îç7ßKžÝ„ðër<ç¸%dÕÊu¯_1°^¼æ|2MÞõÏ$—ž\þ¦ùýEmµ|°Sÿ’Î·©;p=»ËÔy:öÖ×ž†E@  À|
`n|ç‹	Yô¨Õb$T® O=r3øâgý*TKÕàÈ{/ÁÉ8¨ž¯(ÿ’£•yí{ß×³ÍÓ¥7\ÿëu7þ×Ý[Ì{ä2	òËþ•|ùãç¬ûìGÏ^/^÷+Ÿx—Õ%ÖËoLÍ$ª*óÿþ.«ºŠŸï»ËØþºáý‡Å9>Oö]ý™Ë¡ìš Á\8žë:ÏÐs?Sž·ìeuµ²Í%GÀê¸<F**h«,jÕãª³Tr¼\_Aþ#S³äWÿ{ÞóW?ÿ=ŸýÂŒÿzY~ö»“«oøÍúO®û™òuùÂ9_SîýG(óüþ
«Êa 8”>¾¢½½mí®ýÓ7c* "  PîppÕ~ÛfèFå%€IeH±4Pµõà=„xÝ’££âúŠòÿ÷Ý“ÿ¹o;ùðÛÿ†¼ç­g’3N]^6¾/è[ï|ˆüßÛÿLôœsR8¿î÷>AÞñ†ÓÉß½÷–×åáþÇw“»ÿ´mÝƒOì^ÿðÏT]þ¦øý•†Ìœ#vÅ–²Ù\MN¼—ÿ©€   PX¾bØW(S¡¼ÀeV Ëœ ;eðœS²Â­¶¯‚Áá÷/óÇüÆñÊÓ_ßóqzsÌþ±§ÚËÛÈ¯gÓy"À7žsÀó	8x~Á‘ÉóÔõµ”¿¹ëþ#ÉyÉÑaçôÚ–÷@ €Ö÷
ø,€Ééù6¦M^D,f ,8eš½¢r‹ ‘#Oœ|ÁèÎqŠSi[£ÅÍüª@`ïfÚb–½tð&ªWÛ=è´C·Ï=öóB~È/õ5«þdµ¼±Ë…âF.sÉ÷c*   È§¸pj>>Ï4ÊiNç†ºš™jÒ“øž—ëI‹£T|Þíúª÷‡üß‡üv„Ùm5B«ãÖ–¬dÿòUcf²/   e›šichÂ‹Wbå¡Ød!W.Ãj§ ååL­V!tòÐÜ¾›ÁP½Ÿ¼©Êù!¿‡þ¢qs`î«xl/ð…UA   ùe€Óm3LSô9yÿâ&{$×Cwó¸Ü¾›ÂuSØn#èóE}}ÈßÐò»yü^ú—–³Gl:…©€Í	$¾a†õlú]L“|€%T6ËÊË³­¦ŠûŠ¬e·qR·iPò^uÚ¡“—çåù¼ó{}ÈßòÛô-¹¿¸õ/ð¤ÞáT">›ïçÈÓE  Äp ¯À?á‹ ÙJ±Ós~=~7T;	+è˜oØcÆ¿¥åWNªu)d465Óž7°   `"_ >ÃÝü~ÕÏ:…(e…¥´®@-uÖy½ò×T~·! )'Å½a¿Miqžì€  @f8p2>×Æ”Õ/Ê<	ÉƒpòR  È?‚N£uZˆˆDÏeÏûéæ»‘   åØh‚¯)»„:
SÑùQpª
2ôº5Vð¿µå·¹¨§û1t³W][wŽ´a*   ŽY  Ôí:Æ(G|Àk–³¬ UC¤ªYÕQ” Ïù›[~ŸÉëýøú]Ûž9xS›˜ Â8¯@HÅò¿¥q{Çð¢šDÖ/wSÀ¶ÏGˆke4ù|yïv}¯²y½?ä‡üž*ù¹E ÄÅ’œ¿ÃeF.“ÀT@  (¡X Nˆ¾ÁNAQ¢Ù¯Î¦èý;b ¼(h§k¸Ý_õù¬ä‡üµD*1“_ÐSA  @¨ZËv'ÈJ¬LYzLô¢„­þvªv–‚V5QÈù{ÿRt¹^ïød~*`S›ø9e”Õ  ¤GE¡å_‡4,à-°+•êd@ÂCv•ŸD›Tù[L~«Åþå&ÏLÒ˜ÆT@  È£T@×Ÿfª¦ÏIùY–u˜4¶Â­·¬pÈù%ë½0¬fUˆË¢Ðâó÷±ó7b*   ,Ô ˜žk7¨v61È
/ÞX˜  ƒÁq@¾Ð¦‚  @	û÷RCßÊôÉ€“÷T±:™›ÇB  *!
µþ#D<F4–3Öà‰ûŸÏÿÀT@  •M±@:93M¨¶Ê—ÂB  Âóè£í?¥«ˆž›ÃT@  È#Ÿl–Æø^WËœn
Âàö|AŸòCþÚË¿<Oø	¦60ð…|€LÛ4ÑrÛ™²ðhüƒNñ¤0¼"»º^•ªüyyo÷Úî~òõ ?ä$¾{a!WTZù¡‰ñqƒGþÚbð Zf"P.“ÜÀÅPÉó÷gÈÓ´”säM>_VÈV
ÝÜ;)s…,kG0¨<òKç‹ý%”åµE2_|=ŠÍßyÿ6Œ  ´*x' Wþè7mLËôò)€”+nø" â>ôR§NJØî¸Ý5¼\Ï‹Gét½ )ä‡üýËéµ§@áuŸ¡ë‡÷† Z<(Ÿ¥ÊÂÜ+–sRXyRà¦€k ÏçÇ`A~È_§f › ”`Úø‰é9^” ZáùCUÊj‰å\!?ä¯.x?ï{lÇð©üL ZûŽÃvý”ØÔ ÑØË
´"G€8—nuÍ1 j¥aÃVðnŸ‡üßM~ßlÞŠœ[ôÝb?ïcS› Ô£Y 5;E‰±™©†ÁŠÄ}ˆÆ_Tð*‹»T(3—ÕÖÜ–{U½ž›LAW‹ƒüßWÎŒE¢_éµ%	06³~?YÅ`  Ô#
«ƒÑ/zöü#ŠX)H?Ç½ÞÓ¯öêA†q>äomù•" jèâýS›È¡ÃW ¨¢X€{×{ò.šM2¦ù›U~«Â\VÆž÷QÅˆÝôlúh@  EaÖ ÐÓóç1µ×Í6S-Ú{²’ñª   ð¡Õ5g/÷?qo0ˆÜ¿)%WbU@  afþæk ÒÅÔÁ·JU 	î‘  Ìó÷Ó¿<—ò¦×ñ~ÿÄÎáv¬
 ´ xðt|†x&ÃØ°à%•Q ¯Šè…(T @êWNýÉÊãw-nF~Ïúû¯?ðè“Ã/  hƒc²P ‹m+] ˆ¦“†ÒŸÊ‡ (%|ÆO_›†©€  @Ëbß±ã¸"(* L¥ÝŠ„òWWþ`÷èÉ$çÆÁÙA €Vk,Å ™ÔÜ8óz*Ï¨’W¶Âl4ù!¨ÏkXzüvýy|j¦ÃÔ@cu  eŒOÅ¹è­¨GNÅ¢1ü‘;¥&aŠãš~Î·uÒnAïWoçCþæ–ßÕøS‹>j×_iïÌ\ækÌøj  ´x ªgRÄÐò¼ÜªßÈ€×yÊA§=¹%M9%QUãù ?ä÷z}eP‰H[ÅRÇúýìÔ8¦" ´Ì©?SóÆ7)Õú*V'£¢Ç/î}»úänaO7ÉjõBÊ­~º—°¬—còû½~ €øžÔƒ©ö.Ò‰­»FøTÀ4´"" @Àœòó‹›ï¥|À~uOCÑû÷Õ1Ò cªn^ÔŸ‡ü¿Ì â<%×¨ÜòT^›ÏSº"ÖÖÖ·m×èJQ/   @“ƒOýÙºs¤™ò_3`_
U\¿ÜPUHÅ­‘RŒƒFÏ‚‡üu$¿Ua.¹‰?]ˆÞ‰ýÕ°î¯†®°¾~O2kü¦‚  -SMÅç;:-º:¯>ŠË­’âë’¡‚R1_—1Ê„@TZP* ._&bÐw=g¹ü°žÓ¿H“h4ž€  ñÌÁøæ¢±\pø¥ÅQG   ˆŽ¸%ú•G D’Ï·\.706ïÂ÷
 ´JC)Ö è¤™Ï's?=qyÔ¼²=
Ùã°w @¸Fß?Ìþ,öñâ¶61;›áú µ @ €Bj>~H×Œ½•‚# …áiŒ±üXX¡Ö„Cõþò‡ø¼V9Ãðð1‚ÏÈ|–´¿ÿÎ¶a¼ hð ãã\3ô8F ,<‰Šˆ€SÝ j• APÜ€¸É£z>ä‡üÏ#|9'Ç­ÿYD Ê	ÍW½ïá§Û°*  ÐB˜Nq¦feOATòVáq¸y$†Ë˜e…B—“Ý~PâP8Års»¾ÛqÈùäw3øAœÅS‘ÓSÉÏ{µX¬+>3›¿(¦‚  MÎôy >þÇ4À	NC™×_Î¼… ©ªÇÔƒ‹ÚÃS½>ä‡üAä§•ýÎá¶Ö[yýööŽeí8x+¦‚  M“ášls2ÜN
¤ìo›iG•³Âò TzÔDVðn%ä‡ü>äspŠ{»þ)vKò.@×sƒ™tštô—CG‚  MÎô§ã3f{ésô?¤iCJÅgRRd¨úóÔÙ,ÈßÒò;’u;Ë’C‡„f š&ÃŸ˜žíd»˜†XQ¡0-ˆSN€ë˜£ŸœÃ°ÞÜº—ˆD”Ï£z=Èù]îç–¤+{ü®F_ºŸa½$—N`*  Ð"Ø;2ú‚¼÷Oé@E’‘J@n
ZNz’7ñ^<@«J†N÷“¯oURÈù«&¿8M×­ÿyñø+îÇþŸI_ÂTÀÆVÜYb±‘K>Ãº?•Ž…rsòò­Ž‹JI‹×÷à‘¸zyîqPo
Øëó©<¯¨À!?äA~OFÝVÜòÚß»_”¯2¼ï°õ²  à3³ÇÅÄ¿îËÕú™Æ&gº})?WÝXI\²ªÂôc¼*à(îù!äw\à«äÐþ¶¶6²í™}|Yà46 à<ÃþÍwMìÐøÜÅs‡÷Ü´è¨£ŽNÌÏÎ§³‡GÅó÷vŸ”œOÌ<ÿ”SW.î¿½ÚÏÉ‹ %çgÓ¬ë/¯ù—¦ª0›ò×\~º¼««“ìÙ?ùmöÇç¹[ý™Ë¡ÐÈ¨‘Ñßw`QßÎ½_ü–Ož´}ëÖìäÁ=?JçÈØt|nO:KGåÏLÇç÷¤²ÆØÓ;¶ÿ÷®§'=j Z8Ìj_©¬öÇúÔ‡•I„N!Ð¨Ï‡ü¿Öòû&ÉE6›H&SËçff6¡  àÑðï9ê“Ï[ùÑãîÛ;>5:r)3ø»U¯35=»âÈ=«¿öÉ¨I€yý+xk;åÉn^‰‡âS©yQxnYÎ¾‹”¤X±–tÕ¤Æj$ÈùUäWwö­|:&ÉD|'Z   €‹áçÞ>÷ô39z$ã×s½©94?öì-g¬ùjä‘ Îð§Š5 ,I@ˆó¨ý(pù|U…ªjTdˆÂÀ@~ÈïE~_†Þj–M_Öu}`|2Þ7$°$  €³á÷ãí[Xþï¹¬S^œÎ’³ÒÓð}T$ T`j®*ë{©àVWÀM»}>È3û¹žÛç!?ä÷#¿A”	|bn6Íg  €`ø9zÉóV~tiÞðOÏ¾³ØI7°mH0ä>Xzþ'd8‹]«cj6ý¦7|dCwÔ!¸Ý{œÁ×ð¥@"V
[qÊ›ªÇææA©Õ¬[òCþ(åBt¤mm*K×Üy?j€  yÃ?=»´ëÔs¾²ñðÈ®E™=\<´,¯¹‚æ·¥W_Ø[mÖ„áb%|î[^óÒ4ÁE0k •Ú·œP ÍRÚW#)ËÍ£rSðn
8¨‡
ù!¨ò{^}Óù;³ëƒÿñ‘§°,0 ŒÿYç]ùÎÃö>7~dÿþt–`F{cÞã§ôŠ¼ç??Ç]_Ø[xÓ˜šç‹ï-`ûÐÔ’žŽßóÒ¿ÍFÝ'''vyl¤­òq«¬&)¡ c¨Q'u…í†-ä‡ü¥Z!%äZ†Z,¶6>3§™:h, @HÆŸ{ý‰ñ‘k3ºvë=¤ê¿ÌWlÌÞë±•‘‚_^wåç"'q¼€¦gfÜD˜¡FYÉyõˆ¢8?èóÊQ7Òù!(òÈdÛ®p|žÃ=Dð„àŽŽÎøÃ;ÞÓè;`	h9Ã?3»´ëù¯>¿vbtšÿOº~ÛV1Ô/‡øÝ»8¹˜øüyok[õºWóÉ‰z.îÔ\vŠ¸¬è;Ùä¨÷yä¿ÉåWYLH|Yàt*±µMO}³ð7l" -düÏ:ÿª®gwn_œ3´Ïz¦—þÃ0*ÇøÅ°¿L
û­a2íükZ`ðCTkÜpéß¾óãç½[çï/êìÈw¾÷\~%.>´°éæ{4¦°6•=»$““‡ã9OÀ‹‡âå¸•T9ß‹Bóù¢¾>äoiù}÷G§e±ÿ3½Ó1:zp€–2þg¼÷kgÙ·kQV§ŸaL¸W×Á’ñ7ÇîíÆðe2`k©iô$€ÿcŽîüèÏ®ýlŒþ>OÐãÇ¢˜‡kŽéšŠ±gþ5Óýe²XdN‹¯Ãš§mKÂZmMuùV·û»ü?Dù½L3¬phJ{z6ÕÓq,Œ@Ë^oþÈžßftí
æõ“‚á7<{÷¦÷ìâý›ÆŸ½æ!ÿ_ý²“®¾á[_L>gÙ±ù÷3Ùët…^UîB 8¿ISQË©CÀ»þ²µÍLŽzõ4Õë]|ÅËý ?äáyå$E/»ã–@Bï™žM¿ñÎû·ýæío8S@ š·^÷=rú{þyÅü‘gocÆÿ˜ñïcÆyE™ñ|iy[½Üè+MY2†:Ûµ‹¿ö¹0½~Ñøs•ñçÃ
œ_LLÎò"@½ìi†Ù¸É šôÈc³R˜ª
×ízÕ¾ä‡ü!ÉïVçÀ®Ú& J:Œ9)]TÓ:†÷cY`€&÷üÏxÏ×ÎŠ>û3þ_²5þDÕè1Ä®Ÿ÷ú¿ùå‹S§Ÿz²aF8ÚÛb‘zþ"žÞ=òF¶ë«¨a`3Œá–ÅlµüoØ3	ŒF»ä‡ü¶¢‡zžÃèŽ1°m–nD`ÔÆ£ñ_ù¯Ÿ5ux3þôKÌÛ¥Îi”º!(Óë¿ô‚·o¸õÿ½*iží_dÝU1þf Ž˜~{¦uÝ 6/ €:€Sa2YGPºª£³³kÏü²À¨€@ó^àçÐÈ®Çszìª|bŒ®6þ¢!7Çû‹$`èÅÏë{ßõ×~1!{ýì5ÍG«¹ööØäÌGEQ!Xa¸Ã€‘€šÂ×Ð›}ñ±Š>ŸÍfuÝØ2O¾Ëƒ 4Ÿñ?ÿªî½Ïl<gÄ®Òõ	Ãó# &à^?ÕbƒŸ;ïmïúêefÍs¸×Ï§ùñsbU6ü¼PÌÈLº*«œ‡j9,ŠÓœBŸUk‡òCþ°åqÊa’N§zHrü<þµ @ šÆø¿þ¼+Yž3Ú¾¢ç²DçÆß0$]ž§OÜŽ[¡cz»ÎÛxÅ§&Þþ–•e‰~µòú9ÌòÂ3©¿'ù$@R&_…W`•)¬¨ÈÂRà^—SÂ€Dm ?ä"¿'ã/îå?Ìõ›žË‘ñÉ®Æa9@ šÂøsïÚ±$G´¯ðn¿iÐÅ½Ýk7BÀ¶íìÏ¿¼æe'ê†o1aNïã^wWgUý¬¾³‘Æÿ©—9ÇŠ
HVX*
\~­ªPU‚ÛýÃ¾ä‡üAäb¨Èü¯Ðoæ²Àm1¤•5ðkY€‡±xmÿi[«çø˜¿±‚Wù³÷\ù¬’ú¬Î/ÿ¡Ë.|ÇE·þüª„8·Ÿ{ýf(­ÆßÓ>4+þÙÙ°<ä‡ü‘ÉA)r½Y~äÎ°,0" Màý¯8÷ëKã#ßÖs”'ý­`Û€èÁW2òÊ¿“—ÌWGì_ûÜGÌ¹ýæµ£žÛ¯Šéé™2jAj¨çÒ¦Ò¢œ3à¡n€Êâ*^<>§©—yÒ*×sRø^äü?LùóuIä‹‘1]0¼µ @ Üøó°÷èÈ3ÝYžñ¯çúEãï0†Oœ‚%Èÿ¯þüˆ9Þ_ëD?»(ï×ã“3Ýì‘Ndo­ *åFeeé¸^9SVZ[ ÕÔüz\^ :&ëtÏ(>ä‡üJŒ€Q Y°¿ûÚÛÚâÛvíë`ú3	KÒ8À€dôN{ÏŸÔµÎ«bôD_.oËÍŠ;yþ¢ñý8êÅó7qÿƒü (Û€,³¢2$ÙÈëÁ1@ä‡üQË/gð‹Óüœ¦ü983’.XÑÙÙÙ»çÀä·LG
@ á¼ÿ¡û·2»ÿ&=›}­‘ËqF0PìYÁVs0þõò_ëŠ ðœã>÷Ì³ûT~O¤@ZWÀˆ‚!›uB[ÞmÈ",Y½Êù!ˆò{­TêuS6›ÈdÒ™žœzµ @ Òøs\zå¦3IrªÎ™-1–[®ð’ñçª^¿ˆñ©ø±AåA¶—Ï‡1§:XihÈù£‘ßÆË÷šÓÄ‘J¥I6=÷3’
€ 4¸÷??>ü/¹,½ÃÈ·`qu?—Õ¿ÿ`¯x¶?á	¢ñ¯§ñ~;ð"@š‘=Rö=˜/]>«R¡Li9³+LâvÜízVaP«å›}×KwQÈªÏù!¿ùUú£xÌ2ÇIZ9ÇkLÅcaY`€†ôþS©Ü¥ž¼Ý9Òë¢ñ¾ìÂwœ#fûW«–”Š MÍÏM~;…bçAXÕEPRàV
TöªT“¢Üîçt,jù!„ò«$1[ê»ús³³¨ÐXÀ/ebîÐ•eÛÉØ‹«}ÙlÅyþÃ¯yÙÉkþé²s:×Æß$Eù"@¬c3a–ËòËÝÜ{ÙDÂPQQÐI™…5YõznISN‹§x¹¾Ûó@~ÈP~i±±²þjÛ%ò^Ù_GÈh6G¯D- €†óþÿyãMí“Ó‰Ã¬!op\ÊÓlì¢GlEŠ¯»:b¿õçW%Mã¯ccõlüE,¢¤B~'oÁJaPÚÀz!úB*òG
³/Zm"	0,ôŸU¡3Yÿ±Ï÷S¦ßŠµ €AËðP÷ÿÜýç÷°½–µâo•¸SÈß*' ¼ÃäÇý?õá³ð=ŸçÏ§úÕ{ÂŸþ¬ÓñN –ç€Ìür"¯CV(O  8ŒËÔ]ñxž8Ÿ\Ñÿ5öw[[Œ  " žëÇÝáCû.+_ÞäA%Ûè[¼è,3ôŸ/òCÇø›Y¼c“ñ£J&ÝJ~›HÓE   Á¡Òÿ7ýgAþÙõ—www÷£ @C€7P‘çáÿT:·;dºM¾xñ{'øKsÜ¿3cxðÑëó›ÐbKˆT×F   ®ÙÃÂÞ&ò—ÉdrÙ,I%æ_…Z   ƒ;ïyè,Ö¢7²F½ÉÞ «³xÑ2žõŸH¥nÜ?ß(„"@<ša-¿a¯ ª?‹1Ey>ä‡üõ,¿’á‡CË¥þK$Ëgg&Wó×¨ P×0èôÄám¬u÷±~­—³€Åi:ç¿iÅK§ù¾ÑBÿ2Æ&ãK-å¾M¤´÷0dT![e1{™ãì”%‰ªœ_mƒù!¿Šü
ÌÂ>éY‹Uè¿L&CÆ'âý¦€ Ôµ—ûµÿçWm³ÉÜµìÏ¼¼‰çXL:wÍª÷þy‚a£v^(F²c†¡o°žÖä2KÂÕƒ°W°ª
\>_U¡º)x/Ó©C„ªü¿šòÛx7B/é?]7ó³3<z€ Ô5¸q¾ëÏ;‹µõkÝ®4o·¢Ã”jqozõËNî^õºW]í•õo…Éxr”íz-Cƒ¢—#ŠI“n
+èbLªu
TfØÏù!ò;Õ-Qé¯Ñ¿§`m*{ë÷£ @ƒg#1vA&“YÎ™keˆ[s5ø2a T»àøe}¹f G¼¡ç6°?û”Cü^‚°—=*7)ê°Ûùn
[ÕCƒü¿–ò»öWÛþ/ë?ÚÃîØ5¼  ¾ÁÃTcñ¥¹l&´Ê`<Ð~tåáÿFöfNß94³ôþU|9 ªYP,ê,ä‡üµ”_µ¿.ôyÉa¢¤—Æ´î­;÷µ›¥Ä€ºãžžžÙÆ¼\=Ìr={^ü§ÍªW¤yòO2lÔð¡P\+zÿýF“¡Õ§9Bþ•?,§Ä&Àn0ÐÖÞqÂ_¶>{L+@]ãùwö<ör ²}/¬¯mµÖ¶úõ1>þŸÿbô›5gGLLÍv²Ný;¶VÈïTû\™@y Õ&QßOõúò×Šp+,4Äœ©AM‹õií]ïF-€Æ@Ë–æa*Ji—UÍKZkQ!€º¬­ÍšûÀ1}}þš‡¿½ìÚ½o“ê«ù: ²ü^ò$¿,1lèaÌÑa½…H=¥¨î§z}Èù«)¿×þkL*ÙOãçÃ´"P×xø©C·0ãÿco„½<" oÅcÏ+L¥:ûß,TÐ1ã_±›){¾gU¸x<Õö TKC‡}?ÈùC“_±?:M‹¶Ð¼àØdüX˜V€ºFbúÈWO	~ù½ÕVô¯hoï>¶½­9‚*Í=Ád^+Ë¯îá»-ŸêCAªf-Uðr!y³óÎBJ’„ü?Zùý/g,GK™žXNsé8j€ Ô58S5c£•´BD`#qYD«QÉ³øéãÙË_ÊÄm++¤ä^(HÙ#RõÐÜ–wV5n›|?Èù«*¿dð
›¹å@Y8L×ONÏÝ	Ó
P×èîŠý'¥ô2ÑøÛ%ýÉß†0\ÆvMC{“óóY+ùC‰ ¨B±²`Åùn›ªv3a{hò‡&¿V¹9”6wsˆ,Žw³mà'›ïB1à@K&òqú¢Aã ] 7··H„÷6fÒóS)ÎßM¥ÒïäÃ^å/Sn™Ãe¯%…*¿'+`Y)»yhªa`SqŠÏcu®¼*šÁðròCþjÉoGâåµODRàMÿE¡=l»ddt*Æt‰¾æ’/–}Ë#P821}±šãN<'ýU|n¼Á“_ÌÎÉ« š¤F5'Â|"	ÉÃRñªÈùëE~/}T"ðNý¿òÑh¯ÖëŽÏÌi0ø  u‹wôizv¾Ñ¿>ƒWÔ4­ÇZ÷T™ˆÄ¨J?œšÂl¾†ù!Õä—I¾SŒööÎž‡w¼µ @ ê¼#é³ jE@‹ó'§çFšák™ŽÇ9àl¾Ï*:b¨áï¸°÷2Í)êó!?ä¯cùU9å@UªÅì`6“îåßÉÿÉ   õiü‰Æð¹ùu­¹17÷^åùú„¡ë›~ºù®†¥½fgŠ'QÃ¦”¬ðˆ›‚ñTOÀi’B³§ó’ Ê®åõ|7…ù!å—	¼[ý\# Ùtê@65»æ n±ôØÅÏ”ÆÍ¸17÷"!°ýÖ„sÌ×¼hŽ‘›ø¯;|N£/„qx|úŽ¶öö³ôlv@&B†¢ª`ÏpS¨n
ÒMÁ»]O>?¨ü?bù­ªœÚõW· 2Ç¨ /N›˜~.¯ a. @=b>‘YM‰1Tj´âæ°î„Ë¹ÙO'=|ì«“_Ì*€3ÓïO§’[}W\" 4lJ©ð+ì,ä‡ü5”ßpÙÜ†<ôÿg“óó9€ Ô+^û²7uvvöYF ÌÍ5fž‰/›Û7zh_J§7"Æ'§O1(]e÷=x5ðv…•Œ°ÇT«=F¸Ô1ä‡üõ#¿Ü_m*:öé‚+SÉäÛî¼² A ê¼\ïX®÷W±X[¹·o°‹ÈD¡¸Ÿ˜˜þÂŠ÷ýÓ’F}ñ*€TÏ<«çrz‰ˆxU†l  ¨Gøö\æ‰:Á0¶3}Ð3¼  >ñœÅ±÷§’	—oGÊ	¢<jQÇq< QçÀNNÏ?Ëz|oY·‰ˆÀÀ@c!ô;ºöQ-ÖËW\mô|(€&ÅšU¯Hç
qúíŽÌV4þîI‚<k¾oÿ¾‘žFœkvVCÏn¨èàz¸CzŽI.JÔ„#êû†ù!]îò¡PB5º¢­½½ïÉÝ£§ó¿Q ®Ð3`éphF­@¦&&.|å{þñ¸FÊ0;é•?¼µ½XT¤/Êû©,¾ä–S•‡Öý<®%ù!]Èï;PÜë¹Ü@¬­$2Æ7P .±êu¯0Ž9¦w},æ1ÙOfºvcâ„ô³­ïÐþáSÒXÃ ¼³NÇg4Wù%ÆDÉúñxªíA©Ž‘UøòG- þë!O*“J’X.quþmŒ‚ ÔÌÀK—.Ëvtu…}ùåœd³¹{ßtþ7Û¥ñKÏÉÇÿWX2}•Y«…µ‡¦²öõ0¯Z>Ô A~ÈjD@ÁÁñª²ÙÉ¦fŸ†‰¨?cWÌKyÎòS~ÐÞÞIÚÚÛ·‡xùÖû\vÓî§ž\Ég4R`|r¶Ó F)gxRª!J…‚T=¢j{hª›j¡$ÈùC—_Lj¶Ëq²#V„¡ò;êG1 €ºuó%?õ¾3WÏÍÎŒær¹áo±œ×Îd2÷¾rÍ—j…ÀÝÏî;.¡?Ya˜^è!ˆž‚|\ ^< ·JeòçÝæ5;-n†ÁÛ„ü?lùËú§ªÁ·êÿ•€$æç`úA êm±X> ›Ë]`„§`6´ßÐs›â“GžÇß¨÷(€Y’ì.Û°Ÿ×¡bH1l…©ê¡¹)PÕç	ªà!?äZ~Ç:'	¼[.P*‘¼Å€@ êo@_˜	Ð»¸÷­‘ÜÄ0–³­jlìÑSÏùÊÆFÉ›˜~Ó>ý¶aÿH¾ªúšæÔlÓÎ ?äWSŠ9Ø‹b@  õèíšxëÊ?²Ý¨aí!ß†¡/g7šÜÿÌ¥¯>÷Ÿ{ë=
À« j$7]{†žjL†
ù!Äò‡ÄkMfŒ²ýÈ¡ÉŠ Ô_cm’çœ»æ­éBc5†ù^nÀr£¶:nJ)ß
}7;´÷™§§ßtáU±z'SÓó{ìä¯^«t	AU˜QŸù!#È(¥ezcjº0­Å€@ ê«?sy>ÐÌèë[¼ÁŽÅòÍlÔE£^zÏaÈƒèÙÌÐþgw¿¸^I€ÉÒõlzˆH_ìÔ‘xªk1xIJr³TÍz¶[.:¤Èùk"ž¿ðz9ÿgèÎ?^„b@  õò Þ¼ò´}Å··Û5nqI€Hlæ€I¦ÆŽl;°w÷ß|áÕZ=‘ óY~qó=´(p…Üáÿ 
IG~¯íwÖ‚¬àåÍÍ€50òWSþ=ÿ’Þ#¤¿£££ÓÔ· @ý®-Ô8wÍªtñå°h IÁƒ¯ˆ X…ºDƒi¾Î)’ 24yäÈÆý{Ÿ9¥ÞH gé#£S±¢ìƒrçŽt ¨‡¦z}u
WJâB~È_ùC†•³pôÑ‹6ÃÌ‚ ÔÌa€L6GV½îoŒcû_"X¼…½EÈ_%"ßóNQÈà†uprlü«O>þhî5\×]O$À¯3#!n„§fßÍcSõxäëYU:S™©:
òCþZÊ‚Á—õŸ‰Ãc“¯€™¨KHÃ #„[½þ²Mjàòæ–@äð˜¡÷ë™Ù³ó©ò)‚µ&fxn2>×Y$)VÜ!Ü.!Põ˜äó£ƒõ3OºšIiò«\Ï'œôŸ©7Û5²Õ A êSø²a€·¦µ¶Ž«€Õ˜¸S@î%/šß°ðšÙ¡\*qÁø³O^ú¢7]|ÊØ‘žšGöšý/+ÂbT#' ¡˜#¦©Aþ–_ÒÐBÄ“Ÿ¶|*>¿f .Q>ð
cÍÛV,bMw¨Ô€Í€@ì:ƒ“Ç,³æâ‹Ò8ûä‘#;w=ùøÜsÏüÐ3sK«ž`V4’ÓW3–2D<Lq  y»W}fw¾©;õLzû÷o…Â ¨S2_à÷†oÿC²«{Ñµ¥U‡ª$CüŸT"qí¶‡ü'³5 F6õ41ôA²·T  Ô¥Áw›åä	…óùÂh{÷ ¨Ó/@[(
Äñé¼ã^£hË† Äˆ€EŽ@™A—X°%¡0¯½0$°ò½a\N$ÛúðŸo_þêóÏØ5rÔ'çýUé@G&¦N"VS!%yÅÍJ¡  PPåd¸é?éï‘CS¨PŸàÃ ¬Ù“Eù†ýÕ/\˜=öØ%ŸõdÀÙ¯hàËÏ·"òò»ÌOÌÄÛý×m{ôaýÑ¿:c|¼·+*2ÀË Çˆ~ˆ¦,–wpQM«P²‘7_  5‰ x"ð^ô_Á™Ø>=ƒj€  uà›ƒs|ÿëŸÙSŠØtÙu£
:Ÿ1šŸ{lçÖGœ<þÈ‘;÷vnŸXÜ&!˜ŠÏïöDp’ þ€‹Tê¿§fàþ‡v  @}G8Ì\€·¿e¥þþw¾~£ÇîÔaüD <v@N3ñ?óÙ;Ÿx$É	ÁSÛg_ðø#cïâ¤€LN›W ¥2ÀìÚÏ(½ö¢0ÜBŠ  4n„ LÏYé7á½®îží]Gón|‹õ‰6|å†Ëlà<!ð÷n=eb|j—ãhDÃ7Ú“‡GóÏ˜˜),ä7FÈòì®½“,é[rJb>±”j±Ü¢cŽÿhIV­m{.“¾ié1Ýñ×}àŠÎ/;9UÖ¦ò”¿¶“Wœ.Y|ÏŽ‹ï‰!ÅfQbÛ‘ås;ù!ƒ
nûÚ0r„’IÎÏ´åÎë* @½Ù¼VËš¿>FÅ½áT:Mº»:ÉÿÜõ váåßÍåÒ‰M¬U_°`c…NcUêg¹Ò=½Üß0ôM”j°n¸± dhœÝç®fÛu¬w^Ì¬ñ}2%wRàB²TbÐóž!ŠÏ5òWK~ËsÜ¦>»L‹–ñÂŸ²ìþ_÷ @] Ž[¯ûkßíÆ_þ&öÕ«’5ªA®¦ÁW'ÂùT¢„ú6ü*
Âê|©X’…[mõóB~È_+ù= §þì¢Ã8ŽY¶ì…OÞyÃ.³ê*P?À€„C]èŸ8ïÝ¹‡jÑ¯oÿc‚5êMì­	ˆŒ•;ŽhÐí^‹ÏâôLB‡ôE`ä/º)‡<U…h¥àÄ½Ó9^Î÷ò<rid•ó!?ä¯ù­>£ØŸítXA¿Ð‹©žÉÀ²Ô©½ÃW`àyq¼B Ï8õä–²—÷ØWÑøŠÙ‹q¶»žÝçåk‰„Áj;¤hüÅãÊý˜—¤ÆÊLa×Êcª•ÉÜ¹Œ¿Õ½(`?Ïù!äòÛÍÛ9I¹B²ëNMÏ?ËÐP$€O[Ñ4Ì'¹q›òÍ±SO~Þm¬lrkø²•=n/€ Ã
2±2øÕÊ_ð¬”T·@·× 4 ƒÉ¤ŸXõ—€Þ‹þ[xSïâ‰Ê¼Î ÐP$@,ôœeÇ’~ç·ôØo°¿7©`ù=;^>ßŠ@ø(XEÜ"QsÔ…RTQžQ7…Ta«~>"ÑTòW»ýÕ5¡Ê¹ýý{þòæƒ 4Ø—£•‡O?õdã¦×=sìqÇ^éFdO^dÅnºlð½$ù©xüòÓq€¨z
J0TbÐë=¿åoù.‘«Ð7²þÐ±wß(A9`€†‹ôBB'¿ú·¯ïôB¼zì*9^Œ³ÛõÜ"rt   ÀÎÁ‘IotóFOÃÖ€ 4	¸çWÿòôÀ–™½7T¶­B(à´ö÷ù!5ä÷xýþÏôtC   ÍCxNÀM?ýæÁ×žyú‡ó$ IÃ‚*9Q)(ÕóÝ†8T#$òC~ûYH.XÉ¶%°"  MI~û‹k&¿ð‰sßMµ|I…!›¼°o0¢à'‡ ÚIØ
9hä‡üÍ,¿"™¾\½søHª? "	àå‚åÂÿü…¿KŸyÆ@ìâµß}{bnn9•—öI€øwƒÔWÆè¤dLeâTÙÐŠ„¨TBz=Èù! ù+œÑÃãñãÙ~'¬" M	(´õBcç+>tûoí™§¿¾´”°Êj€ulüU=Š !Èj{@a_òCþ–•_tlýg:œM€æ"|q³XPqH`âª+¾ðžÎîî2r°Ýó¼ã&Ê!hvù!?ä÷ôÚâîŽ1X€¦"ï¹ärÖ¾)éìè(•æøä‡ßšzøŽýß÷ŸóÆ3i¬¿µÝsÇñ2×8ìB-Õ.ü @ó: ÕÀI Onio+„ø©t)pãwÖÎßuÓ÷´×†¶ûêP²Q–VÖóUË[õzèè  ØéKj~µ€A š7ÀÁ‡:ÚÛóÑ ±f ø¾qúÊWžÖŸÊ®ý,âdðÅ÷¼lŠ+ƒ Ð`ÞKÿÈæt|·  ÍKäh€™ÀqöY“ûï_^{øî[®;í}ï|ãÑNC†ž+íÅ×ž;ªj„ÀoÀ*:Ñ€µÌ F_ê§ªý_åÚ @³GÌÜ 	0‡8^vêÉúß];ûÄ]?¡—}âÜ—ÓwÌëä¨ Õb¥½øÚ¶É„¯rVÜ×Åâ/M¸ 
 4”×îu½„(úžL O×#¨Ñ‚ÊÖ4ÒQƒ×àÃÌ^#™Î®ŽöŠµÇÿ÷ÞGc7Ýzç¢ßÞõà'ÓósocoÊ„€t“˜¯MÃ/·"òù­ÙÚ©½ò‡5ÄˆˆŸóƒ^Ïê¹ƒ\ß‹ñ€üÑËßlœÃFÿÈú†ý±éÅ/¸ôžÍßžj‹Áç¬'`nfˆ†Ix~ àËs"À7><À¶YF¾û»{ýþŸz¼íŽ;ÿtüŽ]{Èúé˜*¡¥¼$/ÇT¢&vç¹^P£¡jÐäaŸ°²ÛqÕûûù~UÚFT¿“¯	{=k€@ËE ì"|™aþ½ó¤“SI9óã‡Ó[·<²è‘‡Õ¶nß½ì©g†ocG*ªº2p¿CÃrÀ  X;
úfãg¾úÊßmºb D (–æÉ‚|l><Àgˆd€oÇ÷g|ê#gÏ“œÍ	¼ôï}´íÙ½#ôáÇŸêØhü¨‡·îüT&™øºÙÅŽªbè½th h]Ã/¿¶Ó7¢>1t};;Ç7 XD Ì¨€L2Ù,éîê,­9PÜŒÁ7¾2CÈ+ùGÓER°òmOï¡ûöÖFŒÒÃG&cÃ·ñ êþÑñîÑÑ±—ÎÍ'ßÊOÏÏ'WZè¤º¡•$›ˆ»;Rb  Ímôý|®¸çeÑŸvêó1þ_‡À@A"0É@Þ8çô2B`F	¼B×uÊy„Ó9Cw?»tÝõgLŒm"V‹idU&­žù!¿Wùƒ:>S+LélxáI?ÿãm?<,. € € ¸‚ñ.+RÀ;O(Ìw8é·ôÓÙnøÅ­í¿º¿ï¡­{ñ¨@]6ÚfE(&5)åX„}}ÈùåóëŠ€ÆÐqýý—¾yåiÃg®xeæã\•õã¸   -K TH‡¼Ô¶YuË$	v0ÉƒUÔ€çüùá¿ÆFöiÛºcwÿ3û'vÕ+)h$ÂávýZ,ÈžüõfœÃFg÷Qxüq¿?màä#Ï{î²ì+ÏÈ¾â´SrÏYv¬!ê>¬©1¥Ó@ @ @ "#y2à2Ôf’bŸ´#¼°:<AÛº3fæŒ8ãyO?{ð%ñÙäÝ­H€p*P¿Q¬´µ·ïÿ,ë»­¿ÿØmÏí?vžøeÇ£?ï„~ãÿ<w™þÒÄŒ<á†ÞpÒ¼w4xq4i     õI Ì!^°¨Ða½…íLr`æð„Äƒ‡§´gLÄHfN?<6©ì?œO8=0:±èÐèØi3óýó‰äŠl:}9? Dƒ¶E½D#¹ï-êêøKßÑÝ£¦1çÇžwÂ²|Ç[¶ô˜7ê±örü²%úqÇ,6ú—öû>1þöî¥§‰(ÀpKr7!\*	[7îüÆÿìÆÄ­+·(ñQ¥´µßÀÃÐSZ,„ÆçÙ”R,ùÞf˜á–ûDC"ÿýv«UÙÛÍ†á/ À½ÒAˆ'½ÞÈc¦ý^Š…ü}±W!n¿|û^…C¯{Üˆ=ñ¾ˆ‡¸M{ŽO:ïÞx÷ÿôo‡+›gqFƒ½ÌûVwkiõ|`?h5¯­®¼ììm¿>ÜßßÛ:¿¸HlWÃ{¸EÞX\[8ØYï¥ï!ÞÙÝœ.s§a>Í0/-»õå>ý™ó4ìCÚÁ»ûÓú$?  æ$Â¨ƒSœÞžnÁçÇŒz]Íê  QQ
Š¸­¢â¤[}C‡Ÿ~´c¯DIŠŒäèã×åá×iw»†ÁñüìÑˆÓ)ÓÇÄ^Œü”J2[ÈIÞÁ ßX]Y~÷c Ÿ½â›ëŸ67×_---·fcÿÎ?OÈI5˜“Ð»ÕãÕÞy8HC:nÓ ¹‚n6³\vÆ-Ÿõ¯“†ûb»]}|ý4¾|ÐW÷³õEi+ € ˜ã(¨/è¹ëHÌc!)„x›1ëà'ÅH’¢$réyì^\<êðó¯ËÏr÷çµl›q{kŒ	®êR8å4v5Oüu×¯|ŽƒµK×“aš¤-ßº4d“ØµÝlÞìÊ4ã~×}W¯Ã1ß[ñ±übdikýâí«ûåëƒýÒcµeÚu© ¸gì)`–á”/àie‘.\;‚¡¥€ˆ]œÙPW
‰Y¬TÓaºÉçßïlj÷¯|ÌÓ'AÌ™›ãëÔ‡õ¨¡=jx×¿Ÿü8ß¸Iéèû~–Mi¨·š6’ì°€;Þ³0n¥4Ný¬†ó;áz8Œ«M6›§KßÞJí¸4x'Æã¶¨K
/Û‰O•ËO  ÄDac¿0ãÿuZŠ§Aß­)<39O½ßóó_˜í:É.u  0Ý‰§            @       €             @       €       @       €             @       €               €             @       €             @               @       €             @       €        @       €             @       €             @  € ð Àÿç¯  Éq_D.ßÊi    IEND®B`‚‰PNG

   IHDR  ¬  À   “E%   PLTELiqþª—ó¹Šôµ…þ£þ”~þ§”þ«™þ›†þ¡ŒþÅ§þ¯‰þ±‹Û™?þ¤Ú–=þë×Ö‘9þêÕþãÇþãÇüÌ€ó®KþõêÿÿÿûµKû²Hû¯Fÿÿþü¼Rû¸Mû­CûªAþöíü¿TÿûøüÂWüºOÿýüþ´bþ÷ïû¨?ýñäþøòýóçýôêüÄYû¥=üíÜûÃlû£Aû <ô­BúÀhÿúôü¦Aüïàû©EûÈpôª?üëØûÌtû¬FüµPüÐwû°Jü²NýèÒû§Cûš3û¼aýš&û¿cýæÌû›;ô°EýãÇüÇ[ü¹Sù—$üÀ_û¼\û­Iû³Xü±Tú¼eýÛ·ûÄeýàÁüÍaü­Oû·Zû6ýÞ¼û¸^ûÇkû¹Xýƒ&ûµUü½Xõ¶\ü´\ê}õ¥;ûž@üÉfü£:ýØ±àvåzô”$þ¼¬üÅ`ûÎpüÊ_ü«Kû®SõºaüÌkî€ þ¿vî‘$ýÄ}ú¶cú•6ý¸iêƒ'òªQò¯Xòƒ#õ´UûÆvý‹(ý S÷}$û–0ä|"ïˆ+û®Zý»où…$Úrû§Jü£Gý¥]ýÕªþªfþ¯oÓoúÁqý4ý—CüÏ~Þx éˆ0ñ¨Jýž-þÆ„þ´xüœJû§Oû©Uîž=ô˜Eô²Lîœ2é#Îlþµ£ïy#â‰"ô¤AÛ…!Èiû½ký“=ýÒ¤õŸ:þ¬˜ê–6Õ ý¡4ù±Gí¤CÃwÈzîŽ5ð 6á2û±`õŽ1Ï}í’A¾sÏŽ9þ¤ŽÙŒ5ÂgôœMè:ºpçž?þº~÷·Lâ”8ó˜-½fö‹&ó“=â‚+åq!üu'ê–Kó˜7ý¼…õ»i·m×„/ö¡TÂl ý†1»cØ“:ýÐÍ+üÒ‰¶`Ít"ó³cï£`ø¼RëVôªhýŠ?Õy%¸dõ°rß›?ý•OÐ‡FÌ€=¼_Èx/óm#Åq&÷¶|ÝŽFýÌ–ýÅŽ·Yþž|Æ^þ›_Úb æ=Ã2Âî_B   tRNS Î2ÓáÐÌÚÕLt—aµškÒ˜ÃäËÇÉ‡'^¥ *±çIDATxÚìÁ   €þ¯î                                                          €Ùƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØ»ƒÇa 
Ã!¤‡Á¤¼™S–@+Q‹ÚÕª@È¦ïQfîÐ†ôÿ-
ã½ŸŸ°                            Àu¹MÓtëí|    ê|›îóçWWUsI¥ìÃ<ß'    ã<rZ)Û.Ñ{Ô,šSÚÛšÖuM{™ï·    à{Ýîó\·5¥´¶ê‡[Í%=çeÙ[KKñQ°]N    €ï2¤VD%/íY£©{DxNm–¬U³”qê5    øÆNM­–,Ydé¬UQ]Ó˜–ª5ÂDÄÂT‰kÀ±ÎÜ   ?Âyú˜÷TÔ]²ä,û³Yû_¥™niLnu3÷îYµÍÏŠÀq.ï'   ¼¼Ëôñùˆ”Š¹iÙŠ,é_™=j.¢cHÝs³aju[wÊ5à8·+¯K   ^ÝmúèÝMR[ÜeIcÝÓ°æÇW]ª?ÃZ¶ˆ0uwóîÒömžN q~¿þâO   ¯Õ¼÷ºl)íª’÷4´}kc®ýÑ½FHjÛºyTñnæîÿÝ×Â×€ÃÂÚÝ6  Àko€ì½‡å­ì)UÙÓ°¨IJ[¶0—{iMLÔ{˜Ç8ž7mëº“Ö€Cœ]¯l„  xåÏŠôGï°jV·”D5ç¥-já[[²znânUŠä¢fÕT«‡GwmëÒpˆËïëõ ð—½»Yqå¢ |}op 	—030Yd#MS’ V¢µ;«‚z€ÞÌû¿FÔž	÷<Œ9ŸÝúiÛKƒIÇDD[ªáÈS¸*`s3UëÃ¡sîÅ¤În²wÓuÙh½h°.›ÛöïÎskDŸàÇï'n„$"""zD?ž^€<2ÒE‰^j5ÕÞ†z@¥·:w1“!ÒMMºÈ^¶˜F&ömÛþyåÏE¢Ï)Ö¸’ˆˆˆè1—Õ^#‘V>öÖºªÃÊP à¶o³›‰@­‹©‰'ÆìçwxÛNOÜ‰Eô	Éý'&B=œ?žá‘¡ª€T9ÞÖXDzëî€÷Dh©Ûì²¬u˜)"CÄ\ÕJ±²mun[ãFH¢Ï)Ö–?Y­=’ïO/™‘Ça¥ˆxéŽf£VQ„öá@ôZg}tY£­‰yD@ÄÚ÷b²ïbm
7B}Brÿ»Ÿüú=¿Ÿ_Ž›”Z‡h™mWÈÜË^ëW‘1L¤ÕÖEz›½×í¶ÆæpA@W§îf*ÝãéÝ?¹ÿæ'­=N°È«Åqd Ð[-uÖ&6js¶º÷Ñm_ãZ‹ºš”iV·Ù­ÏÖEÍ q ª€‰˜á™¿‰îëÇ*Ö.—ËõÂckDDDDtZMGºˆ{S+m”!û¬µ¶.c¶ÒûÞê¢™p•®2«¨JÝj‡j@‘™*
73ÑžZ#ºÿß¬]®×ë…ÇÖˆˆˆˆ&ò%àÈ#¬›Q¨¹º¼gSTu´ÒÍ¬·Yp[€[“÷äþQ·f*–@¦‹ ÃÕÄŸ¿ÑÝ“û¯×‘oDDDDôõ·@¾¥kdÀÕuŸ¢ê‘™VOsê"e(|õÃÇ‘©"¦½‹íµÙšxf¨"Ã:2ánÎ}DŸy¹0d„ˆˆˆè1|ÿãùí-¡€/ÐRL·zlÖõhSÕLŠ ªpóÅ°e61¢f™¡âÕ¬a„û+÷AÝÕ{$CFˆˆˆˆfdfd¨ªg¸«ÈºâÀ–¹ŸÕZ³ÞŠ™F†—]óÈ¼}b3U3QDdú‰™yÀD™Itÿäþ_~òØÑöý	€;\Ws¤«Š àîêj}ÌZgm]ö:Kˆ<¤ŽÈS´w1“^|ÍÜV÷È›5Z#ºwä/+ò¯oDDDDôukµ8Á#o=\¥ÜÕÔUUf=Íy6C4°½x~€Ì­È(†CHÑÌ#3"WÏbèÞa¿\~»2d„ˆˆˆèËúñªyäz"ßŽãDdHWwÇÉmÔÚÆ¬Ë
˜˜‰ÙhEnovDè·×Ô"ó™›°ˆî/rº\Îæº†Œ}M¿(ò8Ëê<…šºkdDÀm”n£.MCnb"C×Õ»2 dBJ·ÕPÕ^ì•ùDŸQ¬]/ë¹zVkDDDD_¶VK¿åðG¸áø¨ÚüF=XÝbr[[fXTÄÌ.ê¸}PDß§ß‹1’èSÂ /ÿ/®1’ˆˆˆèKzz9Òý¶¢wG±:õïû0Ì¤Õ¹îá_ 73ï™±¸šÛšaÍÏÆÛ4wkô{ç#7²Ãa·=h{Æ†±ð4àXpÒ(I £FÌ`,0©è4}“¾Ñ»Êû±j¼~‹}©Ç= ?K¬RýQp²ßR¢’?WÇ´µ$I’$I’·WZÄ›»v·â*&$f#•¶T.…Uy½Ì‡¬z¥®U27†¥êZ(Ö’ZÌDà—JY»ÿñþÃÓÓ_Á·ÁsÏ?Ac}þééC¾x¼ÿò/Y;ikI’$I’$o‹Ï>A#ÑnXÍDp9OTVVáå2¯E”+•óTj™çu¥¾R3K©Ü·J),,cÎ”„§Âœ²öxÿþéEÏBË¾Ÿ€žÌ¬m[3s4Û¾_o×Í[óÓvÏ`¨[zÛ}ƒÀÕŽ™[K’$I’$y›®æ&ÄjÀq(‡¬çB•…¹ž/ÓR™—R×µ­—Ëeb!Â2QÅÖRR•:Q­$Àb#QSùþ.¹ß$D«Úét=‰ö$«wGkÍ»žEo3aÌ¸ÚYk÷ëõºo˜Çáð¶°¶t¶û¨/òo kikI’$I’$oÉÕÌ³—zýÞ±2/Ì\—BLDÌr6­ë¹Òz.¸\çóZ ©aq™–¥JÀQ­»…k f¦)k÷ÇxÒq8œË·+Rf¦ãË{7´-¢o˜E»mÆ¦JâÛ¹}}h¯XÅ`oÎ–ÊvõEÿJ­}|üôø%m-I’$I’äÍ|^­'Rº¬5t;²FâŒ¹®µ”
ÊŒ\Ú<U®Óy©å|.…(Dl ëË°Ed­ÄL$JÝÚHœò¿Üïì…´aif#»Þ"Wi²á\fºW´qåm™½ðñ*ª1îæƒØ1hÑ³Z8,n?=Kaûƒ²öyx|xø’ÿ&I’$I’$o‚§ï•™Ø| ¬nÖ;eš
c®Ôµ/—Á9´m]×iž
•"¦ {¤@êX©»ŽÂý!kbà”ÿ?ÿ>4-<í,Í÷,ü
\Á-ÂÖöp³HšEVÍU1°ô²FLÝ¾½—kWî[O½­µZ¬ß¯Mùû·¬@rõE‡Âñá!m-I’$I’ämðtâB"â™1	¢wÕZ
1s­Ëež/ó‚¸MõåkÄÂ¬\jaUE0wÓf,S‹þ)?È{žš¶uKsÛà_ ¿o†ˆäÆ›h¿„u…‡mýëmÇBWbñ8·~ºª‡óÅ´îZµßS·»>g†íµùðYëž†ê"‡.kÇCÚZ’$I’$É[p5×®Z>0.¤n œ‹ÎçBÄ%²jåúó…§ËºÌ‹jY+‹RY…~\Í-Z‘õG5‘S~híÏñ¢ž¦/)/¨—)ºÁ¶*!5Ø›û÷‚ÇõNÃÚ°1­¤®üjpº5èÞæÅ3õ=¶¢«±8nqzþ+}íyúú¿žv<vY{<>óIÈ$I’$I’·áj¢6 u-¢Í„EÊ<¦:MÄ`½€9bïTH(f´T"	3EôÜe•¸±P¥ôÙ”µ?(jáim¿EfÌülª°©E‹¬þcÛµ²£ì˜£›;úÛ(<Ò|Û‡¥!bQïÛâ–Ö¤Ï`¹£6UøZ*Âkƒ„§þhQ2Ÿ„L’$I’$y®ÖÌÌb`\++f)—‰zÉþÊhÖ!i‚•ÊåÇY\¹Ì«*‹Õ<‘5—Z‰IT¥JÊÚùpZ÷4WpÝÍGm÷ð0ŒŒDÛ¹Þ0¢Úš‡]õ§÷Û5k¸bÓØ1ƒ•ug3ékfn·l*¢mÃ 7W¿F‹}.ê›§¯½Ÿÿ)k‡ÃÈ²EñþÎñkþC$I’$I’Ü¹«uY3˜+‹0•õ|Y9 
Yü²ÆË“¸”2ÍbØ„Ý£ˆ¿Š.©ŽCùUì×	5”éŠuoŸu3»…uÝ68W¿Ä®ÝÓÜÍÎØæ¸Øn˜€¹™ïcP¯hÆlŒÂÍ¡U!ÉkÌæ­7ÙlÃvo›‹†Áûvú–//¾_þñºZ[²¶öÒÖ’$I’$IîÚÕÜ[·)¨
‘º2K=Ïó¹°„¬1XæËçùEÖ¨L‹˜,¥’šiœ¢ÀLxô™»©9ð”µ×£'ÔNP§Ðª­ƒÞ c{XÙ†c˜ˆÚ"}Ý¨þØ¼‹Ys÷¸p4oÃöÆ½â6M…YÄ·nk¤¡gÍÍzeHÇ~ë0(UÂòœk3½öÚÅ xgmÐEç§OŸòëØI’$I’$wËÓ³7wS3"šˆŽÔälž§Êb¥5ŠA3ñÒe¬•RYÍLkaŒŠñ*7AWÕª™Y{5QCFmo¦í:^4µþåj­í·>… OÃÌ`¦ÉŽ°]1“ÃFôájcuso¡nÑÇDD©¬óûî¡æ8zaHÚw™ÍMXÕcØB5Ÿ†|½ú"¿ªöG8@Ö>}ÂùˆãÓ×Ìq&I’$I’Üé÷Õ¬5s5ï¨*¢Y?M¤ôÄZ§­S­Ë%(eŠ"þÓRÖy­¥Q­"BkaåR™˜2weùYRˆXôù]ò
¢)µæ!Fµ¡h.í:èf½>‰éÎ@Ût»ÁÝ†Ò!@òÂÓ°±¿€öŸ[ì®6ük°7îüò¡l7,—ñØš‰6gö±¡Å²íù[êÚo}ez†£3:G”ìG@VÏ@?¢M[K’$I’$¹Ó¼šXw³©ˆµæcÈDy™
a¦ ÖQ	7„c+¥ee­2ž|”BˆnªEËyIYû½Œ¢§=²`½Ô£ïCÄ®M‡¬afdÚvD¬Û_l.D-Î«m·>„+Ü÷èci±Ä]ÂÕZÈÝôZ,ÇYO«©©‡Õímø“Çó†#vgví7ò9Ôìø·¬ñ…5< ‰‚è‘[ûü.I’$I’$¹3><+‰ªy`†3.ìgSBÌòËÖj%bZ–¥,k¸ÚyY§yª&jZ§©ßPÅ­X¿»GÃëÂüý]ò»xÏ>>÷¢Ž{HNtB²:¡hqx5*Öe«ÛTŒtö.g16®_î0æµJƒ·Ûìõ>!¬,&ûÏ7R4náŒã-6SÇµŠ7aë?¥F~_º™~ÉÚÀÑ 2kãÍµ°µ‡ÏiÌI’$I’$÷æjMi7©æ¦Ö|øšõ¶[×05a@e™4¸*•i
Y+µ®K­¸ì²ÆKY‹(M`wQÊÚoM©µ­KÕæ£( l¬Ç´h†›ÌF^Æ&t¡Whúš˜‹Ðkö³yÃò±uX]‹ÌZÃšNLÏg›JÑöó{l.2ÞŠlÍÕšñÂ&çÛ)Ÿ…ü=|øzWë²6Â±§Õ†¦A×ñêÚáñK–I’$ù/{g¯[7’„Ñ•W#Œ4c`Ø˜prA‘@GƒÎ** b¢’~>ÞDo´¯²ßWÅ;Æn´3{ýÔñewõy[‹,EQüL|ø<†I7ú™{´*r*#)jÙ.¯ÓFYÓv™¶åò¹µu™1×BÖÜe¾L¼ >ØgqË|>½#~þ[ñ­Þx>•>f¾c°‡ºí”)óƒqÜÂõûFYµŸ`”vÄÉ×Ä'zïfÎ“¸Àá{\3•e¶gÒÄ#q‡+z¤š4Js_á`àªŸŸJ×¾I}‘;ÀÌÛ´µÇ¨ÙV‚|x@‡â*
YEQEññáÓn*†&rk&"6v¦ÓTMÙ‹dÓdºtÙæÞ¶•Eð¬Z”ïÙZÓÞ°ÅècÓ—/M…§^fc r&×0·us/Yû¯¼þô9*2[€~„-f™_óÖÆ;H)ãVª˜ÛÎ‰”·èò
)kã”µ¼GƒúeNWÃ;^Kèw§‘sk¼~-ŠŒH¤!À”u±}W5mîè¹:Æs=¹ö­^‰}wÿÀªýµÝ#<kÌ°ÑÖ kUf¤(Š¢(ŠâgâS¤8$Òö&*ó†Ö­vÂÇÖ.KkÓÔæuQCƒció"ùr-7óöúY·MU–NQ“ŽƒBH#D`%kßâ¥×ù,ÚqšV6×R"g#›ÐÑRÍØ(ÚécèÈYh„RÖ ¶Ñ·õËÌ¥iŠ`LT†<0¤¬±%MlcÐITña6(lî‘µ:€›—­}³Wb?ü—¬Ý£…©¡òÈy7$aW®EQEQü$üþ|­"âL~ ls7·íeî"Â#<Mk8ÖË4·ù2åýŽWë¶]^–óÉ7SS¤ÖÖmn"ÛyQµ RÖê_„7„/S£í¶§i¥‰ÑÝr<œ*„h¨˜WÎépn;‡‘zÛ¿ÊÞÃÖ0íƒgü¨„ídXÃ7vÖºs&(ë¼ÔHW/4ÄÚ,ª"]cdëÁµ[óácÞùÈ–}‚vw÷x‡ª"7äÔÔÚVeFŠ¢(Š¢(~žž‡wQG”ÞÖÍµÍ-%-]ÞÅ^ÇkÕ¶.m"§e{%/ëLw›úù›õåõËÒ[WÙTpZy‘Ø JÖnŸS{{“~œ²†–Ýˆqx–9P®áydˆÕùxZìŠƒR–dp€7ž„dÎÕMÄ¹ÃÇ¹Hé£"ºŠÈçîæT¹ñÇSlC52s‘dõ!ëf‘ÙUŒÙƒz]úÍë‹œŽÆ&“k™XË#ï²‚?¹¦×êÁµ¢(Š¢(ŠŸ£¤gÍ~6Æf¸u1YÓbÒ	úyš¦¾¶ ßú¶.L¬ÑÑ®²¶F·,ë²‰™!÷öå…¡4Øà£
éÛÔ²Fäsý{ðv¦ö/(Ëó»ï©WlC—2GF-N“¢wì¿§E9©ãìQÆŽ¡]GnØwªÛ~¸Úð5Cg_6Ì e”¹¶9N="§FWKäš‰¹Q1kp5fÚâ˜R¿ÿ­¸%¿}D"	4þz èïÁÑX’<þÉµ‡»ÓÖêÁµ¢(Š¢(ŠŸ£dïæÄ²ãŒ˜®ó:SÓÚ¼	hÛ²nÒ{Û@ƒº­5ÚÚKºÚ¶^.ù ÛÒDÕÕG¾¼Îj*ÀLÛÖ)kˆÝ0”’µ[ð¦vŒÓÐ9Âð+ƒS 9sœúµG®ÌÔóØ×;"ig Æ9ˆù|‘µÙ²Æë†’aŽ²†Æ¡cñ=ñ±clbHºåcr<b5kCªdnÕññ®q¶IÛš˜öÐúç²µ[?²FY;Míž!¹G"-‹@ÂØ)k÷Øø+¦}¬[!‹¢(Š¢(~¼«—¦ž˜E£4ªxBtÈZg°­3úÖ:ô­-³$emZ.`ž^×Ö5R&ÒQ~¤Q¶m¦­1tžëÿîÿ_žP¥¹Ñð ?ûa`æÄÞNM2äÅÎÚû LuÇ˜s×êþç‘>7XèræûP;b§SÁ˜åSkhqe
Ÿ‰Úæc¨ŽµáÜƒõ=3FsÇ\ÈÔò'Žš¦Â¾›ÿ³Dþ–|¤¡ÝE=HFémw¬Ö’F@Ñâa¶¼²’kEQEQ?¸h¿E"MÍÑ«^]­‹0Â´ögÃ8rjó¶ÍKëó4÷å%¹ê›Ëe½L]Eñ17í[ëênbfñÜÚ&ÆùÔµ’µ[”	#²ÞE™ö”6ÌPÚTHS¢Ÿ¹£y»jÙ[Ñ·ý«—í§£Ñ¹BêpQu&Ü2GÆýðtÀcwãTŽçAçBÖ|P²,Õ?Ò÷vÇI#å-ÌŒ*É‰¡fúµÔh$_Ç^­Ý¶¾mŒ²FUcˆè®ÆT“j˜£«qŒ9¬äZQEQÅä÷Hsy¢Ò»:±ÞE0ë¶õNaëQod¹ÀÓÚ2-,3B.q/dðrAaÈµEjDÍTCÑ„¡ë5„®N¨%kÿïƒjð#Sµá"t¤Ð0÷I³¡²ƒœ=pÌgÈ(0rì8 r)gÐ,„!kÜ=t`'õ’Æ#4+<ÐÝÆà‰ûÀMÞ@¹«GjÏ|ÏKRÔ¸Ã¶6D£s¢71wÇµ‡»õyîŸHËî^7BÞ§‡4pwwj¥JvO7Ë– dÀ•XýGe8‹¢(Š¢(~XÑ~Uùº+Qmê]#S¶ÆPú¶n¬Âß§—ukÛÄ» ƒËÊ'×ÒÕVÜj·5•Þ4o¨ÄXX&ÚÄ,ü¾’µ¿Ê&Õ˜SÛÝ¶îœ ˆE}Çajx“q­Ã¯µ>KD·ç}ŒÁ;VÞGW—‹aÈ]´¬c÷SÖLqÄsk¼ÀÈo8LÚ¾Ù¹WØÌBÖ†˜ÏgÓÄÆlsWåCþù¹’:7ã·ûGPÖ0`Ž’v}hÝ/Q¹ÿ×$Ók•\+Š¢(Š¢øA<}V#Ž£WY&"SIÏ7d·	z6o—ÂöBÖm^¡lqä²¾,­µŽOß./³ésëÒ•¡
HQã¡•<ùËIµg3£e9hØ~xk¶§‹ÑÉŽóHBUƒig‘Çý¬ùGQ‘#*8r1§)])0æ×Àáî”5UKºy(þh{]•‹n¬Ê¿Å-áe oÝ¨þüæ#¶e—_â®³ÄšªÖÕ”Õþë§ã–¬ÑÐNYXòžÂöðd£­ý‚]ò+¹VEQEñCŠ‹hÉ*úÒmOm‹H{Ç Öhk­£émºLÛ|²¥¬M­­‘^{}¥ºµk^eü¡w43/Í¶Î”¬ýå¤„Hm×¢|ÁÊ†›#™G£QÞÀãÚUMw&ÉBç<³aóÆHÛÃÖèuˆöº1®b/½K)yÞºàÀ"ƒfîª,ÌY\Ã9#‚m™†“M2‰6BïÂàD¹¬bºÍ:RÖlp¬ÎŒ_=µv+>@Ñ²¨È#èøBlÊYèZTIYûÊc?>•®EQEQ|÷â"¢Ú»*}L”ŠLººïX1ôÚ‘²&,ÜßÂÓ’©!‡[»°ÀÈŠµ†]u›çƒ3¦ó¦™·3ô¢Të±¤¿¢jŸžÝ÷r”zu–å§·!JYÃ/7o 30³]5rcÃÖ¢¼´.kE""¸È›iYjcw“­{*È4™áÃs©á<…2gª<Á~Âmzý££õ­QèT@V§ü|.E¸O|D†v-còx—7AÂ× py$a›fipŸê^È¢(Š¢(ŠïÊ'S3*ÙðÐ(³°4éÊ°KÎIÊZ<n†.YK–¶^–eY/—éò:MÓ¼N,Ð/ˆ/Z£¤5u7ö]%k’žT†Û‡6QÞ¹ŠF_ƒretö ›Yôó®ÎS<_X8ïùÚ4žù~tŒqõÞÆGç”ë=3r.­ÙpßÃ×L`Ívœœ¿³P<Ž¶FgîÒ»8mÏwÄ‚Ùpí@\ó¤Q?·âH©}•5Š[’ ©kŒþ‡¬Qáröþ×ßÊœ‹¢(Š¢(¾kq‘áÎ4†Š¹©ª·¬ ÞÄDÄ€ýä¿l¢ac=ÿ™Ï®Í}F~­+èhM5. 8=0¿Fš¢’µ?ýúëç7O<øö3r}}i&™÷:ÙM-_níAÏ±Åú¸Êf‡ŒwìÉü™ˆž‹Gà:öÄêä½·Á¬_0Rò]O°oˆæCi‘63œjN†!{—”yƒ¬yæìL[ëæ½uEçnƒ¾W÷AÞŠ÷×zý)kq$Lí1ì,êŒ @bí+épis)sUh¤(Š¢(Šâ{¾Ûify;Z_=Ê8sÊ†¢œÄ0&{¶ QÖ’Ž©µ¹÷mšUûDW3·ÞÙÒÐÚŒP”1W´­—¬ýé»VŸi]Cýí_o&²F!cºª†ÀQÑßM}g„Éký3Vó ¼¥½c¨c7&Òä"&æC»jšHŽyo*êŒdý§†%¥¦Ùá\ÆåL÷ÓÝ†aOænÛÒa¿À(pËenóeÖ>Gy‘('Y²vþ~uµ$”«QÖèjQ|„á/˜HÐg˜#ÊZ½"»(Š¢(ŠâûñÙGVäëêcX¢.²&« 3¶!i©lñ¶µõå?¹¬ËÖ¶¹ÓÌ6ž•¦‡Îd^ç&¤­…¾m‹î%kÿ+¼ÿ0¯EÑr3¦¬h5R–åÃrX|ŸâcŠ´YfÒ<ÜŠ*x	žèÜ•‚–Ïñ:ê—r†§ûwéÂIv±œ•‰øëVœÛCÔÌ0ãNlÍ×Cx$]»xÞH™‹c—³w6»rIkµä¹rC0$^½)°Š@®Œ\ä.VÄšˆM>ŸFoâGœï‹`©Fš™nTîUó'2Éò•îBA·Ë…õiÚEE,¤ó¨âýÏá=Ý ôc¸’j¡…´…Œñ‰µ¬4Âb Û$dí‡º²(Š¢(ŠâßÁGŸT4*˜36jn­!†¸	hC9ÉÈ¸ÝàiK·K¦Ô,·µ³ôÈºö¡YØ]3ó¢}¹õí¦–dn-6¸®ÔÉŸõ3)††ò™2Q'…ï²ÞÝÍ§Ÿš£Cï¯AÃ·3µXWÛ9W‹âùÇ©lqùé¸nþ.L:–ä#d¦÷§ÕÙ)W‚Ý‡ÄµÒ¾ö©b‘L#hy†pÈóÌœ
è4Gô‘¼såÃYk*ÃòÇ¨
#Oá§¿gY‘—H¡…£±üãfw#CˆÁ´´Ÿß1’“ŒÄ*ï’¬2þEQEQÿ–ÖXÛDÅüÃéQÆ¤¬ÑÒ0ÍAß.ò}\I[®ß°AÖF¿ Ë*ÿ–öÇ4Úmœ»ÊùÜ”6uÌ+³öÿPµø›è(`ÓvŠñNßAeþp5›ÀÉlŸWt3ŒÝK3ÎxÉµjÈÚ>‡<‡×ôÉMGÖÞÇG§«¡Oj–æ\Í,i€O‘¸¸#š§‰Ó,¹cÃ¢t‰a_\xòjXnËe…¬Ý¶.>ù¿]/MŽ¬}ˆR¬/ò ²q;ìQaä-G¿¦¬ÑÏrã˜|(]+Š¢(Š¢ø‹yó›90i-êJx Í¦«YØ™¹$C’v[ÂÕHÄl»^"¹¶lË¶]Pid]×å²6ºëû›;>:.¦FFSm®*¬2kâQµOÇ—SÍŽx‹]
ŠæŽ 3atî” L©¯5£Fä¤ÀzY¤à(]I<Â”@s
{bØ¹>]¹Y‡ïÖ‡ªH8b.;ElZ„¹Õ09š¿_ü*OYS,€,
ê¼‚CÚ¶“¡}kbîê_JÖžÃšx‡–°¾È9HSKþ–³ïáÝ‘L«H·A×ê¯¥(Š¢(Šâ¯ä“ž*%BsÂ$Å*+€ÈhMÏºw†tx}l¡~µv».KÊÚe[ kÖ®åo€¾‹ëŽ5ï3Eã.7á÷‘’µ?¡j,¦¸»Sjt3÷Boñ$˜çŒª´2ìÓ¨ÿˆÈYPÄóÍÖQú#¥Ì†:'f¡€®ìàÐ†¸›Ÿ·8æ7:š•×"3ÆuuWbž&89=n3f}Øç5™jÕ=|ciTºp5:}ïjcåú¤´á‡©4Oá—3•–äË±)n¯¯™YCCPK/#†ÙQÕRîB×ª2dQEQÅ_ÆÇÈt¨k:Ä”‚eŽ¦µfÓÐwuG/IôžvÛ.Q¢/fËõÁµû/ëik-Þ‚­æ”AM8:ºðûKÖþ%o"«vð)²Ìœ¥Üìq#†è-âÃ,â*>ÏìYÂ­{$ç,É´5uç3ÅHƒyÐï€H¨—S¹:èn*>A®Øð9¿ËškëMlrÄKÀÁšå[ßê»Ä|×a7˜Z":ºº‰™?ö’µ'=²F3K[ËÁ»——,ÜÿxfšF}ÃŽÓÖ°+‡Ü &	Ú0·×¿×{×Š¢(Š¢(þ~sžyÕ¶6šM ÅŒA´„SHª]R×6xÇ—od­CÖ˜ZÃ^4½åCjjn*@(àµÝ@ÉÚ¿Rµ æ¼¦ù4‰$:*Ž›ÇŸ/=Ìéœ‰ï3ždû2y>"j¦Æ¹‡=í±`ÜÐ49âj`4Éº#X	«sËµt6wtœÄ­Œùækn¢;v˜—zäØx–¬·”5–²v\ ßí„Ð‰è ªÂ H¸áüR²öœGÖX’°ÊHaKAËŽ=À¥³l>ÑvÂ0š³}øåM¥×Š¢(Š¢(žÎûÏÓIè’ŠªO×3‘‘âp‚i‘TëÑ/—äúÐµË]Ö˜ë½u1MÔB´­b@ET†fÂÊ¬ý3Þüúi‡neíËn~Y€Ñ(»˜™|ÊL}"@ñfÇ¶ÒsÒÜ²Àˆ»ˆy&Úƒjä@„qWUºóhˆN;3dlrÉw‰~ï–>qÓ>ÜÐs³änž+3ô3P"l£429o…ÔÞÕ.ÛäIæÚ›¨	sr™îkÝë™µ§ðžÕúÓÕbð
¨^Ì¡1x¯Ö•SÔ¢ç2g€³l!}<¼V¾VEQEñì·aïnþ`Êšn¦&:§	a€GgÝ~ÊZ“Ñ8 ßÖïßÖómmÐ¹¥G–ävU"·µe–&^’X²öÏUÍâífhi]3nZô è›ëÁºý“6¦áÁvÌÑÄ=Ü‹`ŸŠNf‹—Ù§êa}OÜL]”Úç®9zï°³ò£6N¸%ßë ”¸¨PÖÎÍÔpLtžEû'êg‘ÊÈ”å”¸`V1®jÃµ°—Ñ]a…6_²ö~ú…ù´àå…£W€&^´.ö5³–³XE÷XÅà±ú(<òö?+½VEQEñ\~úõp2ÝGºZþûX†0«‚9&&FïT°å²Ešm¹|%uÍvÃÂvkëïKxåv]ºbàºýcSF‚’µÿ[ÕŒÞÂúN¥Š2 T 3A†Ê×YÂqT(ÏUìóý0›@»(¯€x¾`mòº˜Ì=p5s´ƒ:ÈËÇ[Ñ[X‘.­ô8êS86¡¤I¨\mëë:”9»¸âÌÂ”Ò›b0¹H¡éhòQ;ìW~Ýj;usÄÏ˜‚G;ý­ž‹úqÞ|Q£¡ÝIYcší®j€÷Jæôîhq$Œìžtûž·<Þ–¯EQEQ<_ïïìšlU'µÃ(Ê×·.¨›€!ÁX—¥³4ÿ5H¶Ëƒ,ß–lýÆb‘·ß¯ûV	-c3~_Ù©¶kŽ*Ýÿ¿ëô's×P™çyLZÒ¼»ZØZæÝX2jSOE¢™q—‡NÚ¹›+t;M§²!b¢YâÃiî®`ˆ«8fLzAÓÇ°{E‘hùºÑ›šZ\ÍÓµÑ
É<qYû°{!H~‘)@„ßˆYÃª‡£©û0ëÀŠNøgø¥þVðYû*hwÎj"(3òUÀA…ÈÇ<b/ï²çqÊ;ZZ´T54•_+Š¢(Š¢xo>¹˜šŸ„Ü…j½­ËåÖ”a2$hØz_–µõåò`ËÔÚÉ[X_b½þ¾ÁÕFS;/­£	zé¢#„J/YûŸªöþ“1Wæ&¶ùFéZæîú™ õ¢¤QÖ¾üñÇ¡"êˆ‡Ë…ì¸Z¨“¢?8pžæÂndr§­, C£çõ&2ÔbÉSÖØº$NÐûî£éT‰Ò4š¶6ÄŒƒ¸ûQ92;_©-b*YTô¢¶^‡Éíºy:fœ£ŸJ~œ÷Ô²Ÿ)k(
™De¶ÿý©4Ä_°‰³ä\Žu\=Ï!o£AË&·~x_WEQEQ?ÌÇ}ŠŠ7§Geýt²-[¼×ZuHpïn”54—z´®hr-nj»ü~éè‡ÚY~ô!4ÆåR²ö=ï?í‡Ý³h{&¿([n¾ç}|bíK,]í/9+FOÕqÎ±Í†ð|.¡ÑÖhT&G8aã¾Øo*Ã×´.ã^F‰šëÑ˜ëè@²JHDD;¿].Ñ¹\b'ŽihH¶¡]º43aó²^obžuPøêïúõxNáþ¨I[{$×x<ê<2³ÆàW=»H”ê?·?\-³j8H˜ß/ÿQEQEQüàM>G_‡È0K% 10‰·]Ã¸Ö£ éËƒËdÕ²Mn¬Iúr]EÇ*–)³ÖU;IM”Qÿÿ¾Zÿg*™[zÔÜi.ù5LŽý.kh8ÅÇg:›kâzdäâïÿ™fŒ1ÛÉe‡E®.$/ëŒH”ùP÷{ÖMóõèvGCÆU#[SÏ<›êCÖ|RÕÀ$÷W¯Ïõ‘CLdt\–ˆšê~d©“cÖ¯Ç3Yû™®FÞe—¤}=à4`úÂæ¬4ò²ÆiŠÚ©ggfdæÙµzÄ°(Š¢(ŠâÇn‚4Óv¹´P¨t´“HÁœåú‹:ÊWÚº|ckßÛ5…m£«|Æ6¸â"kf_ä¼2qW­jß?¬öY2æ~Þ<vææÓmb@wÃ1Ã·¨bT#ú›‡4ÑŽ€óƒÔž8¨ÉPŒ9Ã×œUsÉî3Ær—4•ÛA%Â‘´>4.a’E#3¶vÓ3³Fœ°§Á{lÍ*—c½,ÃÌÜâ§pÍ”žÔkÖžT¸Ÿ†R§´aÆ@ÚZèØùZ,e0\-¹—„±W¶°4CÖ¸‰í‡ªÞYEQEñ|ŒDÇzèÍ&p°)c°bÜnwMËÿÀò]f-ËŒ¬koãA8ßtˆˆÂ¢©œÄ+uòm]‘ÏCTâK(ºaLð.WÄ}O‡c”7]M•y8\ÝŒ«N™ªéB'ãƒ¡D†.³_ô,÷|µRµØ¨™™;1Qc„x8VïƒS¥§AÌ96]F’·Ô)k$µSí?_6õPh ”µë˜aœ0ÕÑ¤¯ñûS²ö„Âý”µW¯Y»¿÷:û{)ÈˆaD^¿13„¡ohÙE4ÖxÊ[ž YËXð¶rkEQEQ?rdVè_-jAN`½»·­SË¢’ä?É×e[[}[–Ç%H®ÙœõEn[ìeÝÀÙª’9~/—Ô‚V™µoU-rP&rk2šÎ¯u]ÖU1õñÉ-‡¦…áT›¦Ä,2hhqSÄ°:˜3³¼–S› .ÄÀ™sói–Æ%è]Ïô¢¦*¢Ä§£½)‚£Ÿ´ûšiú?¯vT0çÕ‰;¿!¡eÚ×z&ùÐš¨àzBYóã/SÄ´o}´ß*Qóœ» _(aç}t¯Þ•ì^ò5Uû#ž—ÅûÉ}ûcò5È\R¶VEQEñ#7Aš›²qû”²F=ò•q?n+»~kœôíq‹äpå’‡ƒ¯qÆ¢‘ë—¢¯eE
w‹#^ÎeD¬—b?xÿñ³{´i¤¯èfy¸>|&;ƒL·¡SÇâtÿ¥åÓ<S¦QN’vŒã´/~™2âîˆ¹sNYãÕ<„„
?¦áVÚ»0ÔO†t³ÓýhœGl~s¤¬ad¼¤`«¸`~íNYãz».CªrÿSî‚|IGƒZxU¸Ù;X[sìÁÆ^ü_É½î#sk	g±vF8F$º_êï¬(Šâ¿Ø;{IŽ\nîô Z‚$`íÂuÑ™ ­Aôh ]'Ÿ`žFo²x¿ÌêÜ®€ox:+~™­-µŒ=`$£išæë7AF°ÜDxUò[ —}È¶ÜNTÈ¶‹ç@R["?žÔ`ß¶1Çí¥pº¡N´¶Ì¨ÞDkV·úœµ×º"T˜X~*å”9É„Ûòó`´¼o¤aÍB°î+¸ã‘"Ä.+‹¨zÔk¥fxCWsj8º¸×>Iñ ã7Ï‰¯²V¾€OÌ)g…‘ñ5+™Ë ž9*³æ^ÂF¸˜b¯õLÌ©¢îñ Ó?Sæb|ºy«üwàŸ™V»d­Fy"öó8Ù3®g."Æ¦x_þ–o§]ù3Œ¨nÛ«EÞÄ›ûµµ¦iš¦iš¯ÞùHx¤¬U:ãðÊ5ãp+T4;ž‚í¯æ6DeîWf-áájc
^’]-ógnt3óX¥küÕŽ+^éÌZQ‡`×™ÖÐ0V©ÜY¥§TÓßÜlå¼œæ¾@‰Z`@‚À}>¼LÈLA>É‡—W
Ík£šŠQ Õ2[Ô¯ót³Rk*[Ê|x…84ÁãÁˆÑÕ†8@ÐÜ€×‹q4F<mº¸“D&WÔëj)œ.b<ì›EÜù`ÕS±Û§ytåþoç§_.Y;Z{æ¾Ç§àùÍ‰jÏOØùü?5yxî®u*£Ç´8«W‚­SkMÓ4MÓ4_ÅOu®ñ:_0˜a¬ð¯}LàmfM·Û47edìcÎÚ‰ÏÅž®6²6DÕÜmCüq€—Ñ¢¨TM¿³FÞa¤™VåL:U|r°ÂœN"J¥W»Gj°	“]j±p/úSÌè|2­üì82Dõ:ÂÜ©ÞJ»RúšZJ“(„§jng²L±«ŠJ" Š%}Ôƒ4>0ÒÜ²ú'oðƒZÉžÂiŠ&ÒCÚåÒ|­½ã&HQõÒ8u7žñ]'þùý®/òvA>AÏHï?\C^\©5^÷A^0›Æ•Gêì©o„
Çå~k­iš¦išæx÷[eÒ@˜8ßZËš¨ÑãÜìBu¿ÑÕÆ¶1¶ØÇ@{•„¬WÖ]­
BnÛ~T=75½íÍ@=È„[ª5‘hYÃŸåp’"[¥AÖUüžD«Œ7j«!…ÆÌ—ÛÐ8\¦ûª(MZdtìX•Ïr­?xˆ091Œ½ªÊäÜÔÂÚ˜­8e-gåhR^ ã|TÙÛ®jçL¾‚aþzæUò%:µ°êf§Ã;b¦nÊoqu4Û½£î›ùç3ø êÍµg¤ÙVã=»Ž¾ÎkÃ#c5«)eí¢Þe£¬½¡ÏÆnš¦iš¦ùºM‡ÑÈ2#cáêgÙŸûMw¦OŠBM†Œíb?Uí+/t8HF»L™5u
×y·}ß†»ZØUº·´¬a$}YÅL"«x&ÁH	%£2&®ÄBø3æÎ?Ý˜f"Î§x«)%îÐ™&¤Yß2Õiibªž¹2•¤’dœ\;#Å¡½õ8œOQÈ&z3.ð~“9³kœ1„õ´.w›)dTô‰¨™ó¹¦Á/»I Ç(otÕðíEËâY÷ÿsàí¿÷†ºoåÝ/>@ÖjÓc¦ÖXàñ	üialBvU†äFÇ'ä’µ¼¥þŽ_þÑ4MÓ4MÓ|q%ÈÏL¢ií?ŒÐ©ø±í–¦ËoQfÔ.¶í:m#òÂf›´5Œ7‘ö}ª¹îŸÀM­NUžC4e­ò9Ú™µ³°ˆ‹X¨Ê3·/÷Å*Yóì—×zín¤)Í©¥Bâ¡sà/dÄ–»§Í©ªÑ”AW™ù£¹œ¥*uìŠ¹¢£U™RËÐq]`Š°ÁXDµŽZŸ½â®úÕˆ¡¬Ý†ñ;­Œ	ß6•ß	Ýºó ¶ÐßþÑ|#?£p?+÷?—¬nkü@M£’aJ=éc•Fc[®Æë|9-cgùÈ§g®Ñß*¹Öû ›¦iš¦i¾mäçeY5p¥Ø°4¨…ÞnêæUýÁ¨Z!Ð³‹}ãvù¯ªÞ¿Á1"sÛ·i‘²öQè†ËWˆDÈPKy³þµ_?Žr«?Åë•ÓÉV¦ÒVžfÂOÉö‘.4)\Y‚¤4KM¦/¶™ˆ¡UZYä=Á‘Érä¡¶V(rdŒ‰è”pCŸé¹™5’)T9‡ª¾@¬Eq–)6th‹6Å}n‚9/ëSs~‡XÞ-¿W$Ò¯¬}3y"ö3>”µóÐkšì,%,»³T´¼£2m€q.áÉ÷¯Ç`	o}_¤³å…{ºdÓ4MÓ4Í—òóëÈÿ¿_)4˜D¸£	Ù…®PKÚ46rÛÇÎ7ÑJÙ#­†ë•Û˜7ž³–Õ eæ tì•LK;ó”µcîŠµåþƒËÚÏ<»$Ë#Uds?Jâ0G<íÌ¨ÝYöñ£6_&v>‘6K¦ÒÒ(ÜårZ%DÊÄ˜1VÔ¹ç†s¨à'/>=L½¬/#£À˜r¾m)üi—Ëý,¹u"€ÙÝgÉžyÖ‡Œñr›Ê	3k5Ë2”dõ‘Øßc$‹AÒÔÊÓÈ3¯”­k#­Ô=h3P±»”5¬@[<ªúT´_Zkš¦iš¦ùŠã°ïÎ"¯"pž_Û¼,m8Ûæ§¬MUTçþ×·ÖN[Ûk'džŠ}Có(Ý&è‡W-À°Iýs7åjeô(k?ra‘ƒzÜ,Ø'÷l—mÇÏíél®Ž!&a4¥Q’íIïvsNU¦”¬É$úx)ÍÇ*`²Q·R—ê•Ë˜Ë¼à
¸Î]ŸºG„mªN±TþÇÆ×°i‘–ÆbgýÇ#dˆ¤U:>qÏªýÎýÊÚwØIMcf–Ÿ¢„ì"'Ô³WYC
­ ªeSf_$säY«´\ËZÓ4MÓ4Í—Ö±`%uÇþ¹X­žåÜ9ŠuñÜ€—
ef.ÛPKÆ&çà¶ív™Zýpt’µ ?ÞÄ€j¸ªÌ!q`$ŽO3"…W¬ ëøíN«-Jå&mí(V6ÀŒKQÇY£Y+æà–G¬XÚ’º/ÄÍ‰¥ÚŒ®¬š™²R®óHsê½19m,ÔRÕ;øàü+—» ‚Ž—¢©ÀØøÆ×ëLÍÍÑ•¦¥ŒrÂÆ´{,O¯t_¶ÚýxÜSV1ìWÖ¾Ó.H [£He^­¸^McwÉ†9ÅU0XjÐ¿¯žÓ÷5Æ¤+Œ4MÓ4MÓ|á&ÈXQnf^eàmŠVJfeü3în@‘¹O+dˆê¸‘+±vŽ^²ÊHÖíßøœ«8ZÇ3ËñKÜõoÊ4¦õ
fÖ~Tyþe&N/sµGÁþãd9‡Š†–FÍèuË"­‰Ö0Ñ“r*S™ª)Aì(q©L¸ÉSZR^‰Î7 õXŽ='cª±{HšÂH ‡Ût£ŒG~Ì-;~QS0·¡\¤Ã«Ë®çI:,Ïõ>òx¹å«OYû.» ¡iàùù	}.W»t,gåil9¿'eu66ËÎ„¨0¨|[—ƒlš¦iš¦ùÂ-wF¸Slèrg?U=Â« 	·5‚év“G@EmÞ’ËÕ.¸rlÛ6ÌMEè®&¶–m[„ÝnÐD“SÖ<Ò4~ýAÓj&Z¢•í—¢¡/_CÌÔ)kî¹–žDÔ1U©BÀDiß	edjÓ06þž2:IKÃU÷Ô}@f"Ù§ì]pµcKCC¤ÌW±mS'|0_¬½æá:!kK…ª†]³âîm[àt8ç¹ßË,2µ¶‚ÿ½‹
~—ZOÌ¦±\ÿó«¬=½‘µ26\ãt¶ÿ9˜úWYCF š×¥ª0ò¦iš¦išæ¿çW«—‰âð—}­ÀX§ºÉ¦9C“Ò`…ª9¸vA•íF®äÚä…?¨Û?·»ºÑLÇÇOæêTÀ‰–n‘rHIÉ_?föäN¼sÕHQcÐPÓÜØƒEËÉ’"Üå˜vk2…¾fQ™Qs5gÜ–UJ¶p‰.iGê©‚a:å¦OãªLÜL„Ó¼þ.@«Ë‡.GCÃ´šP×E,NYË¯±|ˆÇá•WÛiófŽ°Ž/ó@¹7GwÇ3,©bëPõ.Üÿí°¼ÈÓsåÒ^K÷#€òŽ³GQt%kYx$ókl"-£»î~¨ú–†hYkš¦iš¦ù"~ú—ÞXÉá·må–;Ëò~)kD­»%2ôÕÐL5G`ÜÀ¾ï·âÒ5ÂJãö²[˜(ùøéÓ–®æYiÞEÄÎ:fäG”µŸQYäv&4ë%5¶•>3·xÌjWdh+˜ÂŒaºn8;ãµ&ê*€&”™P-óÚ’¨‚	 ¼=íŒÆ~ÉØßÛÚ¨vŒ¡SÅ³‚¤¼AÒ l"ø˜©åÿ`vfæ>Åü<ÁMÕƒ­ã¶y¸äwý÷Ÿõ•b…Î.ÜÿÍ¼Cbj†#°ÁóÓ3¬ä¾HdÑØ§y}x>“k˜—¤a„«ô†I©ï~zfèaièª¯r#}*vÓ4MÓ4Í×l‚¼^€r"q€¸‰ED.Ät3\ó¶‰ªs˜ŠÈ±Wñþíöö¬5|öª0‚ÏM2³öØZ%Qè‚°S#ÜÆP×(kïx¶šƒÇ©jÙ°Ó`m{õ×Âýw\Ks %Ï{Ñ¦bûY¬#I	2ã ÔlŠ8¸Íxa);3Åß§ÕÆã‡W‘Y>~*™YŸÉ_ÖB£¾\ö]e”3*–RÛÓÙÑÞ!kÌí~þ÷²XnÁü¢éìÂýßiäóÈÚÅ
C>*‰•6Cw’ãŠâËIÁM¼OªÇÂgí‘–µ¦iš¦išÿž_ÿøÇ½Ü`e‚ãQµß¦±_¡–‹µR·mp2†lgÑþ’µ<Š÷ÓÓ¶öp?ä¨”ŽNÊ†š"†àØÌÑˆ•®@Ö~¸´%9ÝeUÍ—‡±-×øÌ%	+ôW­Gª–",VÉM¤¥Ù<¥Ú=ÅMÍñIS}”ë—ã¹to3½äLø#Ÿã‹ºeÔg€t6Ž/ÄXR4ý-¿ÕFWÇâj@IÕô7øbÕ±+îwÌl*ÿË”ÍÖo]¸ÿÛwAOo]džìjÈålhÈc"ÆÃÓ@fáx¶6b¸Þ4€;³Ö4MÓ4Mó5G¬ýY'aƒT3ÅÐM©cq„ª¹N4n–Ó!·]ÔÞndsñ¦ÄÈ¾í·²5tãÌëÈöòi
6CŽH;”N"4kÎ›Eüh²öîçß#‚^&†><eíQY$Ô!hž+á†€SÖÐ`¤T-cY‹8"3Zö-­ý¦&‚æQ´?çˆs\ÏåSY2¯ßQ‘êŠ1k¹ƒâ°®ˆæ«jû:AÀƒ_áÌ®•õWkf\â×¢Î¡ú#¿{,Ñ9Ñ°áGï‚ü» ßº²iÏ5ùky‘ÓÒ^ÏQ+3”¬!Žæ	¿ òmuv×;k]²iš¦išæKøõÏ?3‹ÃëÈÎÝM×²}³œž‡s™Û%k…Ž}gYþ·ªÆŸìG%k•‘“lo/sâ-¶ú§ÌOŸp·­0™F³øáÞYce‘ÈãÈ]}•§Ç±tˆcD¡9BdbF"îéaÆgâ¬%2Uf¡áæñtn,QÖ²¡›iÆÈ™X›Ri´+±¦@þŸƒÖär5Qo˜"Üü(ùÊZÉÚ¹ËµÞ§;OX³”5˜ªãüjQÿø5ìÿØ;›9’N–0RCS(¥¼@@›€¥9À•`î¸"ÀuÀ6q‚<nÒ7ê«Ì÷‘é­P	H@ZIöÜœöã^U]ZôkšÓ¶- käãÚùã‡¬%ÿu°ZÕí¯1­j§Š=fº2‡ÃÝÓjÊï*	JÕ*TŸ‹%këPìÅb±X,‹×W‰Í¯%i1s ª¸9Í!ÔÀ8u¥à²mƒ½*ƒPÞîÓj¼^xÚeÍl—5“	@[ÓÓ6Æ°ˆ´
	Yû­Rœ“$"ØqîL¯9Ä,zSãÂ4Ýó5¹U}dPÅã¨´˜eW¨Ñ,-LÑŒèBÝTAŠV¢'¸²KWc¬÷Æéjªèwz¯† Ì¯ñqmªVÿ·€ˆžK<V,Ÿ›ÑÓž¯˜8Ë¨øÕ$xî÷óEtl¾vAþ8™X{H=C HŒU]ÈZú×=›–a÷8ŽŽã²“ÛZ•ÙÙåiQò–¬-‹Åb±X¼–¿Í¬?iýOgõ,/ØNbŽëÐü‚ÊÜu;í¹µŒwC7Dw•w¾v¹ŠÎ§¾'hT­g¡ùHY›®\uÚ‰§ØïõÍÚ‡ÇÊmšOâèh]9Ñk´Óøƒ4ëËµÎSêi¸%Øó´¦ñµ­¡·˜®ûxÏeq†¥¬iŽëÊÀxø£ª–å%-/Àg‡¬u¶NZþ•­oC™ƒm©bsFU„tOÙßš(ðÊìæ”5<3~Gs¿<_._¾\¤þ¤sí‚üQÞÜö@¢vÿnm5‚3sV”Õ(­®–n7¸¥×vƒ;d­ç™Y#­¤èb±X,‹Å+yÿ˜‰&:,¥,®!}Ã…Õ±ØÂÓ	ÜrFu;mm´mëÂ|	§ßêÚí…'ÌJÖ¤‹‰ªnŸ1pÏ4R¸«ŠøŒÄX<¾ÿ}¤ùqO¦@_;!]º Ÿ¶‰gEµ,Ø?);½™Êd{íH'¦fƒˆŽ½OÑrêw!d¼\FS¯µj…ÔÍ µ ‰éØi‡°Uê,Á„÷‹¬Þ·iT&SE¹Ã¼]EÔUÛù”oçš¹¨ÿðØ§KªÚå²6>ú<Ö.ÈŸ²’ ¤È[ö´ªÖOÃ½ËÍ¬\ÓZÇBº´»#Y—ÿ0:*G7UãÁê>ýkf¾X,‹Åbñ:þø8/ÏÖ¤ðéjn¸U"äÜuÎT7K´7µnr",²m}HZÆ÷®Æ¶çÖØCÖºØ8çoòJÕ‚tÜÒ-ÒA²öÛlLEË;ƒ;:7íÛ&;%"*qVÇ«Mô9Ç3•f\¥Ý”ª!èör3.Çj^5WºÚí‰d¨‰Ô¨(Ycw˜ZÆñÕH¶Örd£ªáÖÐ”µJ†Gøhê¦²eÊUó§W0RÙjÉãòåùz…«=_Æ§O[[» By‘ˆZ~´ö–±Rjt±Œ)eäØüˆóÖØ‘ZÙÇX«·¿Þ™îö2®ð×úí‹Åb±X,^»÷²ÆœÅÕh7~ôdÒ$j§šQÉÞ+PÎ6ÅâH=ë­½Tîß¯ä¼·Ê¬ñzzê£P¾¿achfÓâVÌÐÝ«ž| úÆï²’•E<fµ±¾L3é[óé¢X½PÎ®;·*‘cXþÅ|
TÐÝJÂx`,£P>¤q•‚1"°ctØûczW
²¡ÕuëŠ~”…ì7em×ûÖTâÌ=\»(hç§“™Æ¤On[þ§1%îÌ2xù‚Äš·¦mˆýÃ¼‡©¡vcîä>H&ÓEŒ¡Òd‡­aù²–ãZ9Ì¬8z´ÛþG²GÞHÄ­b‹Åb±X,¯N¬…›MØÚt7ê—h•|Ø$ªbŸí`Ä±šW©þæ”»]Ë¶;Q«xÞ¯Tµ—Ö²"dëÝ\ëS&£¬E¸G(MB,Ê=ô7É¬ýýXgŠ½ =1„YûA«v"æùÖåJæ4›ìƒïøŒ*ÍOª])e*©À:vê¸k"%a¼Ž­®£ãýÊ£°Igàïz°m­Ãt³†h1ÓÒ%[ÃŸU¯•¾©‰ù^iÄc¶W3d×žÑEØÇµ“îùãÏwp5ÈZV)Y;¨|Y‘=f7‡Ëp«üx¸GÆ\(U«H¸NV1ÈÅb±X,‹×ZÂu†ngIS9G‡‹A8lM†0CÂS±1×¾m·c°ëf»ßY<Ýrk§¦¦ÛùÜMNmûüySw«óµKf„RNBå·µ7™'Û‹kÌ4±´2„[UÌØÅvÇ(	i6âžÕ8¦‰¦©)oZ7&2°Š…¯v2š–œÝÙZµDÐWÕ»jßèZÏPlhÛ6†àUmöÑDú)+[š‰ªe¡É‘Šgj*æ‚§MÃTëà·ÐÑäúÌ­žL³}X;é~Fy‘‡L¬AÙp¦öãYcWá8;ìÞñøkNŽ—Éþ¡¦_Éž/Y[,‹Åb±x=ï+;&1	-Í¶Í-¦n3Ì¡n‰WPÑ!æG2(ÛÆPÙ´ãB£¨ñJªä~ÔZ3Ûøõš´¬,AM³QRá4 ¿ýß¬}ø˜åBTÍSÖÈdbŒÖê´¶\Ý«°`È×sênˆºSåð¾ºbFSªÜÐÍ|šY	›’ÃÉØöÀyØïªÆÙwòjÕÚáj}oà;èY#ènNhp}13MY-øÂ¢OÇ°<­$¯úU#“ËD\åE~|dR<d¥‚i¶·‡€e¬Rý5t9F,AÌòåò°ƒ”3>@_3º^_Å ‹Åb±X,^ÉÏHóT„0Z“4‡8`¯yàhnÊ^}¬™kkªÊÃùÛ#ä©lœÔÚS1·Ñ†ˆÖ?Fhi¦Úªl!fo~ƒƒ°£²f™FÚ]39eö)œ‡¥p¸JXú³ù^2ÒZB¡ß¥ðÖoÄ7,D.‹ÚmdÚZ)Ø}fŒŽ²Õ}t¤}ûÁÚ["ì2—¶%’L:s±õinžT”˜™ˆxD¸±”?V}²à%¢™WoCG¬ò"?¡¼ÈAfÕÞíÛySÔÏ`CÇÑ‹ÙUzÕ$ë•ýiõ´´}xœ°–«®o±X,‹Åâ5|¸¢äõ2Íö2ðªæîA3¨‰œ[âÙ\™#Q- Ý2kªë*žò~JNMúÂ¥~¦&hL;”Jâ´– ²ýú²öû©$ôc7°6Í)_n™ÝôÚé~}žN/K«A˜S[+¯¢ö&š²FÉ60ÖÄ^¶Hz†£?®Dò¾§ïï€,WKòqß@±gz²ÕT[ª(ml†ßdÍÏ…!"XJ¨M”ÀÀRVu|~såf~fbõúëLì²6Ø[y;rìŒäk•XÃ0Ïfûï2T¸ã›µýÎ^ãxÕY,‹Åb±xÝ·R—g\¦1ñ=Ðt—f„W-…¾VÁ¹„>ƒn`¨v„¬Q¶VžV‰5v¥jç’µ~zÚRÖT;4î3µ¯ú$á ÑÔã——µ÷ø\-tøLBùCàR±Àƒ™Ö5Ã™8«Zý®¥bc¨wAŸ:f6ŠTG3¢ºëYY›fyÕïYc¥†wÜ©[Ñëúúpµ¢÷¡t7ÚÐà.ZQ`•T™_5‹ˆJçL‘«Š6qý‚3Ö®xf(Ü/Wnæùãÿ¾’5eí‘“’±26R®!âZN8DWû#3rœýÿÞÃgX]Ÿ¬-‹Åb±X¼Ž0´g:šyäá].`²™Zâ3ˆÚÙH—Æ¸ò¾é@<û ûv—Yëˆ{¹?iÛ¹ÓéidæŽ¿Ç?~uW£¢‰#V¹~t€ÒÂKXÆCŸ\§¬™‡ñvO±¯SfÄò;Ã”:7„¯Ö¨‚$ƒíþËµã¥ ¡}¿d]ÉÒ¶NÔð¨‰éhÃx¬Z•6òÏšËhc’™Eu&/“ó0eníùÿå§‰Ä*/ò£¼ù+-í.»ÆÌZQvK¦ÝbÞ¹ºËKDr¥ªÐîXpäßüÖÕöµõÉÚb±X,‹ÅkxÃó°qÔpˆìÅ#®ÓÔ;zS†˜Q#w“&\rºZÒÌlCCà°)[§ín#ä©ÃåÄEDém¨[×û¾?µ_ütµ¨s®w+©Ö0²™YöâL«•Ï]æhº—‚¬£Ã&UÁQ=ÏÒòâj"ÇaÖ¼ º
Ç ù~N¦F‹ŽÆ‹´2úVÉ#ùšz•§s7ç“…ûÍŸŸÔÝ h—ü4OýrqÇ>ÝØô‚ð¿ÿs5ªj\—«ýÄ]„µ a_ˆ%i¨ÉØïGªUÇÝ„øœOÒâŽ|íá-Rh_“/ÔèÏuêÂb±X,‹Å+øà“¥Ð#Œw¦wræ
RÑ€ãj'1ÌY±_½kwt†CÕx“ã›µ½#ç.jc(MÙIfð"è ¦dí×.-r©#°ëDµÚm:I˜§³¹îÕ#(kxÌyh¥ÍÌ5ó\>mˆ™É üù8` ša€€§ÕxÝ5ÞûU¡w4¶
÷aWì;Û!kã¶úPS¼Ä_~ƒ¬MëTÊÔNe9‘¡²æCÒ6eÌ/_°_7üB©]åE~˜7Þ¥Õe-yÀ°´‹Ö–Ÿ¦á®w¸U’]NªdHí•Ìi=ÂÛ¤Ülwµªã¿vA.‹Åb±X¼ºlÿõrquWà•×™•Å1mj¢V¨ù^´±õS}§†%žõŽéÁénäù”ì’†ªÃ“anÚú 3,JÖRY(%Ž•Ç_¹çcªˆÛ¬jVŸ–žá7ß'Áv¹èÐH‡³‰Û¤N¥G¼aT;7ÔMõ&nyßkY]“Cè¾¥ÝeÖî·@²UØÐ¸v³øžGñ‰i;.@U=ògv7LME¸›Öy–š²ÕÈóÀiØd×ØfØÚG÷ã‰µ’µýXì£hÿWÞ½£yò5vhï_§¿a=[}ž¶¿Y'fß>MC(8©qýz‹Åb±X,¯àol‚„¬©»£¸•%„mbj…t3Ïž‰³ô³&ªmë¢²œÐÊÕª3úŽxN0*g#§A‰6tà¦©¡QÓTbÒGÀœ¿öIØsÖÇ;[ÃFxp¼`Åo Pï|¦å¸¾­fnãG;¢ùž–‡ÝåÕäåÓÇàûÖÖÀ}Á~td«ˆ.e­DŒRÒ l ¹‹fj0fÓý¼õÑ>¸¥g‰;Òk_þýY}ž“ßX®ò"?¡¼¬¬¶?¾Å‡jt±·p²[C¶í¥Î#üÏñt?dä(mß®Õ‰k77cw+ÚÏ˜²­SÖ‹Åb±X,^—X›ØT×R%ZÃ´aÓ(åIzUr$-­¥¥õ&†®UšÚ×™5†ê*³†<£â<TEOçÖèYGƒXV@,ÝÒ"1	EíÊB‡ü UËÃ<hó8$àe!˜°™³ÌN¥VÔÄ\_f*ª%k‡ŸÝ†ÿ˜XãýÏHÁÇw[ y÷‚=ÿ<07HaìMÕ§›šïJî^‰ÝÖDÇ¹eN5Ìg„#âñ» ƒš:/°µÿ³øÑò"02r¨Ún^9Ç}dÖrTûÿu¼ˆÓjp¼1cj`ÄŒÃŠX_§¬-‹Åÿ³wÆ8rÉµ»+,” ÙÛÈÎÂ¤^X„]H§NÐè²æ º/ð.ðð\ƒ4_üÕê% ¬A~]••YUƒ!4øáÏŒœL&“ÏÖÜÍT¯×(-ÒÃ‘NÀœ[},B¸R¡rŠFYV½ª•Eÿjìzœ‚6pŽ[g°,ç¬Þ_—ó5F	b5Ð»Bçï_liaë &÷=o¢›…¬eÇÔíð?·ÛJµžA4F™¡kÍjj·qºš¼fd6ŒmXÛxvïò'¤¶çÃ†­á,8ñ9¦®~ÖVO%$Œ‰¡äƒ¬‚ÒD»-ácí›ùp]ýÜœuåE¾˜E|–õ ²¶3*öç¹—„Ä+x	§›Ypä»èY|4¢50—¬M&“Éd2™|–-@È”øºjæj·@K÷…RÂ)£®²—²¨´ŒwuÙ›7±0©Dr²/[CsF”}ÌÚýàrY k'Ú;`~bIGó #iÃ>k/õÛW"Û:Àö	›±˜46Uu¤”ÜzSÛ´ð¶îGµHÝ1.±TÚ#DÑ¶‡6­ì±£ñ"¡	r˜¦vßkÛTw9<šÚpµåÑÔ fÐoÊ²p7^
¼´‹ü³£eˆb=ÞÚï;°™âPµÙÚ›¯&_Z^$–ª%ÕúG5;f¶?Ð³·±¾-¶¿4kAN&“Éd2™|’¯¿C`!ÔDEnG©xµ>6tádl&€jEê¯û•ë¨tjÁàtØFp÷ìd{qàj¥¤«AÕT˜ÄÒ?àŒÄš{¬u*òÃËL5¿ß”5Lglp'59¡Î—"º9þ8e­qÊœ–	IßwPãGM„s´ãN÷Ïxe\’’¢–+é°€®ÇöX[dgÉfÁ‘œv²ÆÈR£²Ìr.$¦ÌP¿T@•ø‹1d}Wkâ7j#1ãÆjÛu›uûÿ|ÅšóP	ò¯¹•ù,Ç‘®ùx¿?dÍIYóê‘®d>Kò¾+Û­ä¸¢‡fÎ‚œL&“Éd2ù¼`-Š>6ãB»eš¶YTÐg‰%R,qj8ÕB"Ð´BÞ¶%`á2êöçM&kç½ä(ßBÖ
;DÒ
1CÙL÷¶i,›³nõÇË/²ä^çl·H“[aŒ3¿>¶úhíÂ˜HM\iº©ˆ0\÷ÓÅ’CR–-e{w´Ñà¾–|{Ô2j]¯^=ÿÝ»çgTd¼ÛZe w–c®pA°kê˜¹\ÎQ•ÚÚë‚ßî.*M ª§%žK_¬mß}5ù2¾þö¸ÇZ¦k‰ûVÛµ2ÜAãgjn(!‰+vW»½Ÿ‰Z‚®¸é£9r2™L&“Éä3‚5SUbbS*ë£À>íŒÙ»ª¡fÙW(Ú„y«TPI¤,;ÇM±—´µ±ÏÚ­ãí‰„A»œ–"aƒ¼!uá"}Óòôã/ÕÕzTé¨RÏ¶™R­lakkì«–þºˆgJÒXD©à"ÜÊm{Q {J0‡migãòàkÇdmL~ŒDm½º¦ýöÛû÷ï?¼ÿÛ»ë†P¶´[ª†3Yòsç”ÔŠ¦,M$ÔœÿgP(3µ¥Šp={ØÆpõÒˆ£¬ˆ¨FLbF©žé÷³˜à—òÏÿ=º†¢#Y»õR½îµ]Ëœ]Ý`zžÒ½Þ'CæŽj¸$É(82gAN&“Éd2™|F°Yc,ÆÆ¶"í&… ˆwbUŒ˜„§ åe§”»«i8Æ–ØÞ$¡j8N—KeGTÊåòTUÍ´žÉŒkƒ€˜6¶nRÎ/OÖþöfëj=N³íŠs3‘VÉ³ÁŒÖ®ºu? jŽH×ÖÄá”µøòº9ˆd+¼ËÚqÚÑÎ¢3\nDkÙÌ!Îijîi>üúë[ç×ïß]cÛí‘¬ÝX¹Úm>l)pµ‚L6÷¿Æ?ƒ"j†µ1q}zzZ¸í5L$¾œµ;¨§ÂŠTÍúªu®Xûb¾½9š3fB[ûæ5êA¾ºuâ!¤s[Ëƒ}­ZfkigÉ¨6òï9r2™L&“ÉäÓÁÚÚCÌTM™-wÃÎÿ(ÇÐT¨5UÆˆ‚ó!M;æjãWËŽ‹?GºæìÁ©I;?¥¬ñåÂ¦eaÍÚõ$fFõ»—¸½š²¬«6s»^íºZ|Ç‘[ú‰ª©úØB—ŒYÄðJ$kL”¥;M%aÙMÂµx÷°ÑR{P4ŠÎýÉ0µýÅÈÔ†©AÔþïíOÎ/¿üòÓÛïŸWc:kPµæjáo0¶F°¦²\œ‡‘+äLü^áv*PWÕÈñ=ˆ]Ý]WoÌXä‡¬}yÝþûjµ½ÌÈïä¼þ{†fÅE|ìzég˜>™omxîJæ¤µa„Àøõ?æ,ÈÉd2™L&“Oòš°ÆˆM{oÅVïvÍÿK³’Ÿr*rG…ùÞ¥²|œ±ÓˆËHÖ–ê²–@Ö
±(—3DiºœªHFFªD*í»·½Z‡ëzÝD6„h&5U»Þ6ôÌÌ/"*ÚÅ@cñ&r³‚³@vá´»ƒñ„1ïÁØ±d|ŽzFÙ´ÇdŽ™š'jÿšösðËO¿~xwy£`¶éj‡¨5öÊöÎ¹ÀþUay§”5 -eíÚJS‘¥’ôž#ªd²àá\7ÓºÈ\±öÅükÌ~„¬ÝŠ÷§låÆØ¹ðìÕ ^A;¶cÃI\0ŒkÚZ›­ÍY“Éd2™L&ŸÍ×ßo¶=_³¾…b¢{ƒws=Nµ®­°8ªCÖðÄÛ²ü£ÄÎóîjakè¤¬—æÖ˜
‚µ5)Ö¿RU,÷H>ŸÔøÍtµnj«Ë²vLxÌ*œ~HaÛ:PÖ[-{bƒ½)1b6*Š„£5¦&ÒnAÈËHÊ†™aÃ&Ã–Ø4T­S{{7µÿ‚Ÿyûá7ÈZºŽãjµÄïåHÔì‡­·zj
¡d‚·Éô.e-ËŽ²”¦ø>Ä}s×çënk«4ù~nˆý¥|`-WÃjµ°¯ak9Þó´TµªÅs´1ùÑ»Îx'ƒµ›§6[ófÖ‚œL&“Éd2ùœ`­#YK[C¼Uzä0± ëh¶¸2£§­Ät·³Oƒ<,ZõE¼¬áñÒ¸-­q½T94¦=xJï³?“&kÿüA±ÍÏµk‡„¬½›ÄF×]HÌG±DMÕ6c¶n1*â÷›S#œ¢\I|8 ±d—ÕEò8õ»ªßf?SûïÖ\ÖzÊÚåX`/'è{Ý7F÷GçsáRD”Ýß<^eÊ©Lj"[×Þé\tsISóog[]Ò?>¿sY3Yg°öWkàU”‚¼ÛÚ>ò.·<íõÙrìïûØæåó0³]ÍnÄídNbL&“Éd2ùt°ÖcP·m³Þ……–&Ú*ï¶Æc=”êÞ(—BÜ–£¨umÇ#p5p>crÜé\~ai¢üôáóÓB¢bñË©6}ó²\M6·3j×ÞôÙquSÑPgMaŽ…jÂ¶fÿÜ/q“ši›ÀÐâ+‚¯=@wUkÕ¢st4:Ø]¦j#TóŠ"^Oddjà1Yk#VK{?,WóÆtÊ‚`­øåä¡ª¨ÔSM[3ÓFfXº·nôcÕÕ{Þxö»=¿Û ŽïÞ]×mnˆýWk	<²6,Úág1rä{Á¬â¹™7w^ûøú÷ñ?f°6™L&“Édò)Þ <¼Ó­›Ëƒª†,$|—5˜A#I4m[­å¦vÈÕvUÃ™É>Á©œ
‰ÔÚˆÄèôô$½7¯6²ïÐ-Ê§Ù›U‚E¬]ý¢hŸW¨ŠÊõ‡wïKiî-Ž?íQ5ÝwY#ñ$j&,*ih	5ôó¶cƒßGk#TÛª¥©ý4LíAÖÞ¿[[¦v˜™¢Ž+ÈdíTšËZ¬US)ç³ÛzeQµ(u‰4æZ[_s·?ƒ¥=waIY[¯ßÍ%O_Ê?Uû[a˜—GeCÖ²Åí·|ö{¡ó^]6	’¶Ápµ9r2™L&“Éä³V¬9s63wô½[«©ˆ	±ÀŒi©¬*JtÚâÔBeùÄªµ¬Åá\F²@ÕÌjuÐÞùé"p—Ðµòcµþæ%¹š­ÖQ)Ã`îË.kWƒœ‚íºom‡h›"J¸ÅÄÜdí{F
AÓn0k²†ºýPŒÿQ×öäKù|¹­T»™ÚüüóO¿¾Þ”[©w–ce‘ÎÎ)vy¸€XÅæÔ
ÿt2¶1Ø¸	‘š_º6¹]D×w¾·[_¯3Xûb¬x½/UssÛgC:ÇÚ"¹¨„´á¼”Ý˜9ŒíÁÑb˜½Y^d2™L&“Éä“¼Y»"SóXÇÝ[£v…ô.‘Þ°ˆ÷Ù‹M#~åŠ­ÕXëÖÊWï¤«Ö.¸ç¢f‚rîÌD¦Ð»¶œ'xVOY{9®¦}5Ûº‰º{²‰z{_»$ùSÈ–µISHD:·&oÄ?7ÉRAËm€L&vs´ƒ­Ý^ÊÁ(*²×ù¨©%¨KÖZyÈÕŽÛ«-CÕ€w*‚µS=]Î(ú	ÿ$ÂLDø¬U‚½72üÆ„ÑÍT·w¿=ûÂµ¹!ö_¬¹™Eo¿¹»š_RÖBÆnD×Ï!kÞìFçü‘­EQ‘ûËÃÒp7þýÕd2™L&“ÉäSÁÚj¬µkGùØ„Y–“l=—E…¬™ú­Sñk&kŠ~kT*‹PY
—?\°–"JŒ„¦ùU&Ptâ²¨J$FäbSëéi~“R²öb\­wÓ¾Y¸¯ÅÖ	fÜ×N‚³#ãŒŠüU¶_HÏ¯?Ìª”0™afFUÇ<(®DÇ÷Gü6Tm„j¦vÖÞ~À,H*ëÕêŸÄj8áiðôÊÕ³µ¦*,ÂDjê­÷%¾ŽBŒ±»šõ
,ë&ìK×¼ÜÈÖþ²±Á«û,Hà#t‚Øæ¥EÀc…‘x6l½˜(yßÛïgí¡äÜdm2™L&“ÉäS¼éë¦¢.]Å<ÛQ[£l|\‡YvÊrªÌ·í–#ÞÁ³h™j¥âdÍ“ ‡©díT‘ÉÕÓ_`‘zbØ™Ó»ÁÖ˜ÔÚSÕïß¼Wóï[Ø¶Î’Ù&;Ö¥i‡†D	ÿŽ{¶á‹®MU{W–[¦ÙJ@èþ£VÈ¸¢¥C¨xç±þc„j¨)ò1SûœÖŽ³ S ×,:Ñ^v*OU%DM”‹Dx«p5õƒtëKÅQ9u¯Ù	ÅF\$g°öÅü-5íÕ«Q`$yíÚv75ïÂáî®æ7o]gL„D7â5ü°w"[Ã»#Xó)’ ÷Çž+Ö&“Éd2™L>½b-‹íaÖÊuS5ç¶ÝWÖ¬À!L!ŠbæB iÄT?¾d-x\³æWTí/®V–Ö°lDN6•V³¢„e1f1z:±üçÅ¸ÚuÝ5Ä6Ô5\Uµ•B°$kæc[W“î÷kÕ.,&@-Ð`oôÇ¦öP[äPÿqxÛþlWµúÖëïWª}ÌÔß;‚5¡6¶WûÓXmçâàß@¥v¾4¸^Ûwî3ëL4ÖÍ!`t}×‹a{µ3b6×f°ö×k¯Ž²†ýÖöºýp®oü>¢¶0´,àîÐµ]Ön?€ŸG/_xp5=¯¸ÿíW“Éd2™L&“?wµ7†PmíÛó3ÁTbÏ¯nŠhÇrÉšv\TÊ©¤ºÝaâ–V–ZY¸~¤äˆÖöÄ^k­-•¨ÖV.—BÌŒRîD”Õ&"[‹}Ä·ÒZûÏq5·³”dO°£mÞ5Õ¨ÔïÇÚÅ pxA™¨)r7Vï³¨pÔWc•”£«e“çÁÒ¹Z¾—ª½=®T;ò¬•›ªáî³_®vZ
~oùöÎGŽ#YÃ;Ò®¤•!X»A§‘]„ÕH#¼°H»N /°Î;Á³f÷"¼ ÏÂcè™/þˆšNu±Éá‚tFˆ¯»²2«gF£ª1ôéÏŒ<pñ¾¨ß2B×¹Šµ7b™Ú¥ñt»gÚ2XûVÁÚái®lØgÍzvr¢á
ô6A³«·²Ä"7(ñ·|S^dH›}–Ï/I’$I’ä~~ƒÙŽ´`–‚S6RmB} p¹¬ÍÕ;€-Í&[RQg„0ºåfäp50OHÖ0r.D…óa=N½#W¡™›R©»àWW[Öª¢¼á»GÜqc‰TS‘´)qóEk,]Y;ZK.¥F…N"¼U\d¢ÑE³¯¹‹Ö¶¦Ò^Õ¶MÕî†jïãØ¯XCÐ7&AnTÍö¼™ÚÓX¨Z,’+‡óÉç@’½ é\uYài«ïþè¼{Ô©ªèåC£W9‹î+ùî—MÖ®ËÕì´-A»>ÓÆ~k›ˆ«³ñ&q»±!kqÎò"I’$I’$Ïkˆo£-XDÄë²²hLÜ¬‘¦¢DºÉZ±³
ˆ§Ìð7#*BŸ¯Ü?¯û¬°¯Ö5_)T'Lõ!†Š”ÖH´gi1ã’ˆß¼úSòåbÙ•)Zk87ì¶ÖÌÖð,`&]ËÌ}YaÍ¦†õƒKCþdâ4æJO›ÝU8¢Bw&AI»W´änPµ(Õo¦6Tí.!lûkó^ÕÀ|GÖ°#vÄªµb§œ¬â¿“¬­5›]}Ýd³t1WCÈ¦víñCkß*XbîâƒEk!`Ð®Qíq¬UÐñK3Ó~´“ÙœËZ|åß4·Û—ÙúY^$I’$I’äK¼ÁËX\š®&kÊb£¦Â(ëà5¨
zuª,.	µŒµješˆ±ð§ÊAÎ»5k`ž kÁqªTOç˜)âÎ†®gE¥pëJ¸(YûùŸmYLÒÞ=¢>ÿ¶)¶—é·ñeU‹‰ÚÚ´R_£Fdç§Ê"ÄTàYªB*WƒajCÕÆ‹¼Ý—ŒlëUEîÕ„¡í¹kµìk‹ÄÃø#G=Ÿ&ÈZ©åCwÊ±¾»·JS"Ô&]{,Y3™E°f’û¸®˜¦¹þ–ÁÚ×kƒÓ4€dÍšÝŸn‰Í¯Ç5¡wös5qþm6çñowÈMÖ’$I’$IžÖÚ
EèŠ §‹¢¨ˆÖ
YS…¶MäÚ&†Ê†*£†#4ªÌN­ó'¸]³ÑÚ(0rÝ{vY«ˆŒà"^r„™
©Ö"½7.,¢‚8åç×ÍXÞ”}\ q»1ÙÏÍ‡[1U# iŠ{ KV…¬ÊBÕuVÔjS½BþzzÇ±OÖâÓ›	£Tÿ§#5¡jÿùßýß‡Ë5XÛ¯Wl~aªý)”éœ^œß!ß‰€¤AÖÖ.æ´ÝúÍœÍÜ+Ø-îÐš¥ ¿ßÛ†Ø»líÁÞQrñövò#zø –¦ÙŽlÖu\ÔlŒ¼ÍS7«øÿ·ûdy‘$I’$I’gƒµ›zÁTÖÇ¥ëVÒk{h¤\:LÍQtÃÒ¦RægpSæ±hÍª oCÖ¸œqª¤‹×ñeþÌ}ûþµ®]µ_ÌÕ>|x\.˜üxi¬¸íHÚT–ÎmE®ÖMÖŠ¨Q«ö­¶y)ŽmÉÐSCîÕDÇ{WUÛë§U[>¯jï?Q]äºbm~¶äaêà|>OLE„·ø7UEšˆüqÛ‚µ}ÐZÔñ?ÕÇÖ¾š_F¨¶UqÓµE¶JüvþÈÕp ñv„ÕÅ7ãd-¾hDiqBÔfÝ,/’$I’$Iò{¬-HÔšé‚"`k¢¢ÝÐ(^ÁWo îãÄBÓ}?‹ín-ÈØÛ†ÃÕæÓé<Å”Ž§¹Ì¢TE†ˆ61YûþÅ»š4¸Çº¼û`/‹‹ eKCÖ²aØ:Kƒ«±ßo¶Gqû¨µâ§¿EWhkÑ£’7ã}²"÷Uí½½Gwô¢lÿ‡KWªáj»2 w‹@îem¦2mÛ¡»‡n^d¥5Ü¤¼ÔÍg/—.ÒV[µÖEí|ÉÿÖÿú`’vƒÉZÌg„‘ýAÑF²†Æ8ëmœÉš¹[||4û1ƒµ$I’$I’/ÖÌú
TÑFÁþ®Q_`¼!ñŽdé±u¨|6X»Z›qŒ×ÆÉe-˜çÓÙ9N…x>O…é4kS{WnÖøÏï_º«±vY}ÑÚ®ÖmÔ•;B£Õ†ëFã®Ö¸Ú™¨fjRƒêÀÓ²ÑÅ‰öÖ¢W÷©ZÔê¿Ÿ§í¯ý{T©õÙåjÁ­©‡éx¬ÒTÙ•:<bTmQ]E*±…j˜ü(Òtµ›¶"rËk_ÏÏ?~Ä_÷`	Ú&kv‚¬*ñ1LÍŽØ-*”lRç¸ž¡q)ºY^$I’$I’ä^µ&¢­ù¶jÖ¬±³Úµ3‰0ã°v ~ÔižIUJ¥¹HýXÑâ¸‰Õn£µ^vÂŽ‡L­T–Z½* Ï¤ÍÊÖP-…Þ|÷Òwµƒ¬añÕb5û»oqgVbã¾˜‡¬7ûÌ>X•9Žv­…¸–'HØElƒŒz1]£µ­7N×v ‡ªÝc„kwÊöo®öÌNØxàƒ³ÛV±IÓØ€¼~Í&kKçu‘óIý·ÃBµ¨‰®.o²:Å·\±öð'è×(ÁïÆ[NvS
r“5û75°Í€´d-&AŽ¯ý¸ä¯)ÛI’$I’$Ï–º][èûvÌFkx¯Ím*®jƒ¨W+,Bs©3qù¤ªÍcäpµ› å0FÔRÈ<²†©žOŒåsBîl2Y{É®¶ ÁôB0Ökmx±Æ.õ<‰ÝÈÄYT¨ÔZ6ja¡º‡ø©ƒ“±‡°ænY¨Ú.V§]<M‚äZ>S[äöq.ç§¹T"†Œ‘ø_ZŽÚ©PÔ~¼ô¶Xòh÷ÉN&¶¿ý%ùöÁšë™oˆ™ÚÖC¢6Øb3ämáv×Ò‘&n†Í£ÄWØ×nÈZÖíO’$I’$ùB~[»x~fab…«­MZ,›rwS&‘‹òT™§	nÀs×†«Ýs¶ÃööæºÍZkxÛÀ}íˆIT"ÑC^ÃÚzkaT¹AÖ^°«	¦@öË‚°È¸,_·fÃëÍ›PòP¡jêN­^3€ÑÀÃö0ß¨Øj4lí9Ub6{i“ 	Ö†ªÅ³¾»ZÍ›ðóó1¦½ž&ö¿>PÉûÚ›Öi~û–„š™m_­\¿ˆÝ/	¿Í`í«ùþwd1š›‡¹¬Á¿ö²Ç¨A‚“µö"`óoøáG³µ˜ùø±¬ýš0I’$I’ä¹õSkWx3ŠHM¸á„c]›ˆïµì(vq ëbv¯ªÓ=O;D'^7F j7Óâæ:ÙàlüŸÆ"[wÈš»ZWµöÍKvµWRÌÈ–Öáhp58l-ÊŒ¬—Ó"Uz¼Ó$W$¢jeª{ˆ¼Ý^Wèzq·¿š?<Ý«Ú=Þß¿“ /=&A>WZ$Ä<8¢†èù¼ùù†¿žˆ°¨hS.PøÊ,5ìoÐ¥­ž­Ap3Xû&¥ ÷`Gì½‚¡óÓŽÈÌ¶/4âµ £è²5´1íñï?e°–$I’$Iò_—‚ŒM+‰0è*éØÕ®HÚDhžD…H¬ƒ£ê{2£Â4‚1Ò¶¶‰Ú|ØÒ–¹Ì“5p¬±[ NsÈZcn/\Ö^½i‚íÂPP³/¾…ØbiÑ>ŠDSµ¯M7[‹ÈaX54x\›‰ÝB|Æ+š›ÕjÌª¶Ü_«ö~×}´`T‚dsµi§j÷\-8ÌG;æ2áq»°™ª—ã¡–â‰jØšÒÄ°vÒuµÅ|&h+
»ð:s™o¬=<xóCÔáwç²6J@Æù›h-$sñã›|¡Znˆ$I’$Iò_òÝkÝ©‹‹WëŠòTÔ®+Uf–z˜Xh..j.4]Ím¹'i£ÀÈ×þ jv¦ÙeIËÓ4ÈÓ™Ä`²èå ¡h]¦âQ7•-k¯;6
[VØš	HgfÕ¶,­]lØšß`í^¹¿PÕ¦^ëQšx²æ&Æ²…Q;È?¼½pwµš—.Ù«Úzýc´ãö“ 7>§jÀ:«ŽggŽ	‘µœßæ‰¸s”¡"MY²öøuEúúmo^ý%ù¶Áš­OÛ:#/Û•îGX¶k?úÕ!kYÞÃ&kv²aì¨éš};$-ƒµ$I’$I’/ãTÈÃµ¨eá»ZYÛÊ‘¸É|`1Y›‰©°„ÕRYtó)“hì¸vŸÃõuÜTÍ›Ðµ9’5ë”Š=Ö‚ª—ÃáP*{ÂQÑòöèêöúo“ðáqíQciýÝï¦Ì\em$¨ !NëxáÊj´µ±'NM‘­Áf*ZaØ×t'YÃxÉð¡nªöá÷g‹õ¿¿?€«y%H¸Úô\ÈÓÐ5(úù‰c¡r|ûöía:YC"±BRíEžÞŠ®Ëâé#¢H;°%v{•¿–ïöÁš-P»‘54Nì¨YÿB/öb³·7CÚìºkÝƒý|±[Zœ`lÞf°–$I’$IòeÁZs¢†¼â¶v9'Ö¦*;fbØÍQ2Tëd¥R¦ÏGkx[suµš­lÿ¡”2d­(Ô?²û03lMZk¯_îA_¤fÖ‹Ö>¼[T	®6ó²ôÑtAíþ®Bµ„¬õ.Ú¥Q.¥Bï€;ßÖÐcúcÛ…Q­ÿ«ÅØÏð>šÁ¿}ÁZL‚ÜçjûíôNxÌÑ½j?8ÍS5Y3NÇóáZ	TJU‘Ö!#69X1mUY kÖd°öÍW¬aþ#Ö¬A³xWØ¨Ü¿uüÀ†j›ÔÁÑð6,sûÉôÌÌo«!‰¶§h-ú¿¤m'I’$I’<·‚J[wxZ,…nC°6,TÓÕ.Ó4Wa!„l*4•jïcsµ‰„™cÚâ=öKÖFåþm‹5ß{*hÏÎ©ˆúÏ.1ÇÒ#>ª‡siMõõ‹Uch†¶
ˆ‰—Ò.]
_¼çªÒ/f@x ²Ek¢6P¡Bkr5˜êžk’6â´»K×F4öÀÞ«Úûh£Á±'®Œí°Ë«mìU;·§+-nfë¾ñU˜©HïÍX/P×Ë»KS»qOÛ%ƒµ¯æ»_?’5ÃÎ®_ÁˆË®æC^ÍÍ…ì®mƒ‡ì337ü<Ô@´Û ú–ÁZ’$I’$É3¼î*Âm5zkp5mÖS>LÌÓS…J!Q)ÅÕIxAH³837Që±H¹¬E¨ÝŽØ8N $c“5¯?1r+”ÆÄ•}É–êôöX
‹¾Ødí7¤iØ'Ì}#*@öÇßßÙpí!­:ËcgQiM„­	nNQs˜Ù§ØmônRµˆÕÖe”€|.UÛ;Üpµ˜¹›‰fÌv=áíª68ÌÖÎö`­1_;ºžŠ4­E¼ÀJ[íÞtØíŠ"šø;]LrsÅÚ7ÖÆªµ(/‚šýWÂÎÆj5›æ†Æ¿Îú¾#ü8ôr5sMØ•¤m'I’ü?{gã¸‘¬a×øAðë¶·&
0„	äJÈEìb@®‰Üð<ÃœÀ+Ùkß¡.0˜KÔ1z–/þJé¢Õ]m¸gQ@|"3“T©»-zQþÌÈ ‚×‚µÖ(ñºª%xaü¶4=hxiœIô.µ0ÈÓ†è‹²úÔ¸Í‡ÜæBRúìš5gºÚŽ“¿”!MèÎ§Aå/užB~"•²´J©Ðp,R?¼ÑoŠf_èÚÖ®¡nÿ:»,Ïsj—™Fª¢ä±°0gª­JNJ!ñ`-ï“µîeýÂ¯ó‹Tí6ÒUí•X­ßÜÑ'A–4îË@v'÷ôô®«¡{ÔC_C‡qÐÇoS<Gªœ²):×õy®mÝ*@®H$#XûêÁ8 ¤£Úæ½/Ys9ó<ÍdÍ0=s;Ãøz­ŸBUÉ««)&hÎ6z÷MAAðY>¨$
É[mÂµ‰,s“Úxd1[#©œÕµòµ„<¦rÝÿ¸é[¦œÓ^Òúq}Ý2]·YëÉz+ÚŸ™ŽçÓ„´&Q†&n5S­ðÔ
Y>¼Ñâ"óÅêcØ–Î«¢mkÛ­©†ÌÌ•¸Í’Æ,Y+¬}e¤l¨Û¯dÜUèÎb5œ»A¯*òÇM°_©+rgdÿúÏŸÿýŸç>	r—«§jfäHšqrW{4EÇ<œô’ÆÇ‰rA°Æ‚’ý‹ð<·¶®ú½U®ó<G°öµƒµ>²Ï<xAGp›éöýÎ±áD§©d×›âíë÷¶AAðª>¬Km«ÒXÚ¼4‘,4Ò\ÖX)©°\m-¡ôÇ˜ÆmÁš@$>Wò÷ÑÚVòjjhn Pcáá|ÌLãiðÝ¶“4N¹VøQ*oSÖ¾ý%…—ËeµAÛ`hËåùù¢iB5›t*ÚOÖ8³¥R›Pö¢ý$ü¹É8³³ýå±šØÎj½®È«Ó_ú­Ý$È}®æï–ÜLíôh¡½ÆqL9çbÿÂrz<•Lu™¶ ›kµüvYm|Á·ÁÚWÖ®ý&k—-U-Ü€ª¹¤¡GûBÖì†ö[Â†ÞþÌ¨ÔÞdÍÓµîj¬AA|<ÐY lp®¶à¢âL&DÈvõòT/N&i¿§'º<ŽŸŒÕÜÕÐàì3äú’µÎù˜Dx:O„”#sÎ°‹JYjJÎ¬ÃúáMÁZ@.£ Èô
#µ7®Ã¹)"\|ñu©"…Ú"âÕ_ˆ¼j?BÖ²·×ÞÞûa÷Õöª¶ŸöØ-­³wµfÖö®¶×ñŽ«ÚÑ:žÆÉ¦¾–¢…ûòä†Ç¡d©¾ˆ¯Ö…öÅ^m
éóÇX±öuƒµ‡¾`MÑú ªijZÿYÛ°™¥¹¡™¨yÖ†œ¦¡ñNÿmÓáò6	2‚µ ‚ ‚?¬-(h˜‰ˆMÖ– ª£*„sKÏÕP2éÈFÒô‚q´ÓéUûw[oõd­ï¾5ä’´M%¥<B2¼¼Hmr®Á™?¼E1nUD6×:?-mUW³d­ð|Ñ K½KÙ*‹ÔªgÓ·„Iô!4\û¶ØÉjCÒý*Þ ó«~GŸiåú?Wr¯iûy¾ö¶`­oØp}ÈnjÎË2gÇ,Ý‡ÈÔŽxÚeÒ-Q&=ÚB§ˆ™U,ç†zÅEVÝöàbUY>Ä¯úÿ…k¾Ë’µƒcÐ.»0à\ŽŽÜÜn³·ÒýÎu3lÕ<|ÖwÅ¾ÁZAÁ—òYÏu3Ö£ú&k5ÃÄ¾+ó-Z³dÍOJÓXDà’p.e|éjÎ#}Gì}²6¤4`ÙÚQ½ÈÄªˆŽQ·Fç$,YÛÌUÞKen<¤öu¹,P&õäf&kÏ„mkÓáŠ›b«àI®b}ÇÕö‹Ô º¾»‚«a±Úk;«ýë“cîpº`í·—ÖzÁ~;º©uÎW o>rJÓ8 þç€}Ö&¨9g^¤”!‹ÔyÆ†Øji:XÔÖ0zú1~Õÿ¯”‚|@áB,¦=26`²ÖqQÓÆ5=6pýë¢¹m¥¹šƒ!ºï¾ÿ&‚ ‚ xe‡æÊÌYc&Eê¼6âÖP„Ÿ*DNrfÏÐ6YKä+ª¸Ø0µnj)%ù¹aïjGoz5Hc(y„«M	‰K&.©d=QT¤Uš
‚!N‰Þ¿É²›HË$eÄ—jeÍ­Êr¹XaH=VÄœU¸6Ü^Xª"¾o ¬Û¹sµ\îDkþ²cW®¯j¯”yqÑwX›+eÄ}ªë~s54WÎ;ÔÏÎÓ ?ƒ‚§áøxNDÌT
S­ã¹ˆÈ²¢\ÿÓóŒpu}òµ~¬ýe¾½ãj@;-¸ZOÔ\Ö\Ñpyøt.gêcxwÃ†¸e<h@§7û,È.k±ÇZAÁ«aeöm°EH©Íd­V&"”RÑW5`qÞsödJú«¥â…I([î2ôifk=vA{cÊy:Îc!]Š[!$"IªØ@ôåÇ÷o±’Ë:£ú£íc‡¼¨Î*k˜†zYá"³n»-Ñ£®+S››(µ
ë©0á¤RLcÉ¤L¹­¹ž¡¹
Û­\ÿóýM°qxw¿ùÙâ"ƒÓsÓ“7÷r5¨™6Ú*6@Ÿð¿PÂ?˜UÓ¸rÑ!q]õï™/—ªWUc5ƒ¬ýeþö?šÚølH[uæô M‡@GŒp)¼c»úqtöîƒK^ßÛ‰`-‚ ‚àÕŠ€yEšS­8|Ó—ÀÞâ”Y²Zù6ƒÎÜ¤¤F–Qñòý	y ïdbŸ]	‰_&k®kw
'âNc.“ÖI %Ù•Ä&ÿeÓÅ*Y{cæºnUûg,¿²*‡HÖt^ß¼Ìúæ¼ 6äï/íriÒ”*ö4´·¸Iª|_z<ë‹·>º=T{1rÛYí•býû€Íúýk½¸ˆyø´/iÜw574ÇGÿ§¢Þe:=ŽâOL\/+jg6.c}~ÂBk_=XÛLM=K‡˜	©c€{°0œ×*#Øû këŽ¦§¶èÁƒú^ÿˆÕ"qWë¶ö÷o‚ ‚ ‚W‚µ7C=Hó4+(R&±K™†D”Æ’Šv}Gl¤lîdæŒà6ÄO7JdPÞl ÝM“s]s†TôãEüf_)D1“0]·SÚ[“µ¿}Ð/C°™¬­M0òI5çe©ÞÓ_ê¢Ò¶`döl•ÂM\^‘X³é}°V\Òpn¯[¬¶¯évŸ_¶÷îp¿¢¸ÈÇß/X¦½ˆŸ®¯®j'}mªn¾vBg;¬…JA	ÿÇE®KÌmµ¯(	ÅEt¥ß1‡îkkæj06Œz¬f9Û¦\ÜÜæA>¬ÛDýÁ>c×(‰N/ v¸?Ó1:Œ"X‚ ‚ x=X«<­­k«ÒPND=!Y°?vMÈ(O‰…²f'_÷¾.B>p<bK£~&sµ‚ƒUFìúÛ‚&®vw®¡¤ã1”„TR­Â)Qå”«¤³$qY{÷Æ´¸«fC¶e]…*’µ&óEýCo©á­
enævØZã¼¹XFú)äWYËûâèÐnGW5$y;UÛågÞ½>òŸ×kÝÕºˆß{² gjöÒwÇqICbÊ”Ó0kW˜¸ÍKµmáÖô?=_@k™wûIjh>0Gƒ‚™«iÒ†‹ÓØTho#ŸéÊÁ;à'Ds·MÙðc}ä6ˆ`-‚ ‚àÞ£n¿„JbýÒØV‡q•’Ó OËÄŽxëÑÚ˜Ihœv¤d¹Z]¬ŠÅoÿùødµÝÇÉ]mê®6ì‚5gNg\Ÿ¯²–“É8ŒÄ^Ñþ-ÊÚ»/V—_¥¬j¼uiØ×¹rÃHÔ™ÍM°˜>Qi†ª)³+r.^ÆÞ.Jédêµý´ÖÇÝÕúÖj>òóôÍ¯»ÃaôÉknj=V»¿»š†ÛÚù8OWYutÓ˜5…Ò)á±SEÈh_š~wéÄÚ_.¬}í`KÕœ‡k¡þÍÖàk½N¿žÀÞ²»šÿ(dÅþ ŸñÚ$Úß$-V¬AA|ñÔ<èÏbšÐ–Z×µV+EH™3I%ÀWÄ±“\Ö˜´³l¥ss5õÅ§/[çˆsc_ç,bKÞŽzÊ™k•*b²öí‹0ñÍ.«í|­Í¼ Tó ó W[¨Ö5g”‡Ôá<cFd›¡ÆµI¶¯¾iCÄ¹tòK;ëo²?aFÒ¹Õþµ÷¹ÿ†»š/X£2öÝÕºˆûçês {®¦‚æÞæœÓxÆÏØ—&s!©V²­6ÿ±Ž¼¢rì‡ý•ƒ5Õœ«¬ÝæAúØ=ÍõËßÄu/+²Í~T[Ó)‡»¡;Ü$-V¬AA|!ïþ¯ŒXZ¶˜$,:’ZY*S­®iµ±õÂ[+‚–ˆòX„ÉJBRzáj…®/øÙfË-b?1 mû~ÉÖ^
3º iÊ™¹dÎYˆÕß–¬}X„›&˜UŽU[«
ù¤ö«!„Z«X9½š«}å¶í]Ö!0û*/È/Û^ºßðXMeg‹Õ>#f~Þç—no¿Zq<ÖÍÕÀ~-â>W³dm_[ÄùI­ég‡iÛ°/SÂÞè\±zom‹FŸ×%¢’ûüCL‚ü«|‹`mÇ>Z;Øè°]z¬æv@Z¶EmæjhÌÚˆ×ðgXçg¯¥ ƒ ‚ ¾<X–eiùÌÚÎ—jS)Qãqš)–¿Ø_‰Ðr™FÒf*Ä4¾5’¶º«)?#‚Ù¢µž¬vžî06ÞBá‰a@w&ü™¥$&äkuyS¿¯¿_ŸÖÍñ]Õž\Ò f?ªOÍzê¨‰´VÕÖæ1Õ<ÈZ…ÆÀÄvÑ¼¼¹ëßÕëÿòÂ"¶õó—½³ÝŠ‹Ø$HWptÝÁ÷µkZOÖÐ€á„71‡¶pKŽc.úØ¥!j¼`Wlì¾0·‹.„Œ`í+k_³æ<ØÐ]Í274¨.ý–žþÀdÍfUBÝð~ßC;‚µ ‚ ‚?Á»˜5ÎA¨6_ÖÊMxÑ&KÍÃqYjsY}75¡l»«/)’¦&AÂÕ~S1°J­¡$IÏÕ”£³KÖÀ¿ÒŸô§Óã)ºQ²TË”˜2½5Y{÷ã¢_sÍOƒt¬+Ÿü8¯^5³i‹ÁR…‘(Ù2³VE´oTˆEú:µ]°Öû^±«AÕö±Ú^Ê>£ohî.Xó§ê\cµ;®¦‡6^Y¤›šM}<^‡Øò!e*éøÓ9•é§s¡:[}Ì¥Ù´ÑW¬}¾ýþ¡ÚÁšvJƒ¶!\ë²vÐV_hõÒÂ6¯©­AÕt|x°ú‘Hâô|ìó½ÀÈ÷ñƒ ‚ ^á½…7^‚iŒB¤Î‹ÅXÓqLÚÓÕÕŠ@ldí©PŸ>º«m)ÌÓ\1aîÎd¹>]½rÍÖÆI“µc0²L“…z)ëíÁ“µ·´ÃšWânOŠYÚE{$iXe!›oµ¦ NË…›°>	ß>»ÍAÑh§g}±š¿Ðt[ë±ÚýÂ"÷ó¿Ž»ÚÚØwdèÜªÆìýû¦iÖøkC#Ôi:mãã0&ü£Ó0¤<aÍ$‰Ûjkü°ºIc?ì¿Ìß?5»¬™«)è<fóäÌ#5/€î> ÃTy@™|7,[ÓKí"X‚ ‚ øE/”ˆwY«°´õÒZ%Y$2b+ÛÏŠ”Â9‘`È€îÊÚhÖº«mÑZóyÆq¿jíÊåÏN¦ñt†±dHbf…X’®o:RmRß¬}¸4ª(*Òd†¬)h oV€s-akÍS6ˆZeA©ö	‘ð·O’íðQÞÇjm¹S¯ÿÕª"ûÓÛ^\ÄJ|îªÆàî©Ú‹½°oœ!kÈY¯ÿÏÞäHn#kØÕöë6<†Ñè2ðÖBõ¦p•à"v\ÀµÀN < O0«ô\¤.ð.àKô1ìå‹?B™tÉY“mô4àâË’(©²“îE~ó“?‡(–6Mú¿hÒùÜf*üÊ4H-&’~øÆù
Á¸tî£™.6;¶³¬éõÆùmØ©M×¯¡CÒ2¸Ë¼É­Òƒ5ÇqÇqœÏéí_¡¨î‡2Ô:ëÂ5æ¥f] ¥="!…‰
¥b0îCìì'Aþj®¶Ek˜©1Ì¾ÝÝ^û"
ô1¤QÖ3åDY‘[-‡G‘µŒœíþ5µö·bš67Í†,\{zjš›Ù–jsCŽ†íÄt7ìVŠ6Ö3s«¬ÝýFÈROÖô¢	PÕTÕ^T³_º”Ýæ£–‹l®6\è¦öB$~z·Hß"5V;ÂÕÄö‡hkòB`Æ‡€Ü·VýÈÖº|zòÚþ/æ‚µ¹³H`…!P2$c¶[S[Û\‡‰š-s»ÃH”øËØÏTÍdí{FÇqÇqnk+8­JåõÀU[ÚÂ!±è”¨\àó!PÊaºâju~9øøYûõ÷O}d`”k]àrÂŽkÄ#Š´*µ&ùŽGÄåþõL‚Ä>v,¶!ÙÐÒ4T›Ñ#rZê²6n:%·4aU;i¨~QIá"sÉWI]ÚúmJ¹ÇjOûXm·…Úž_v×»XîmEfßñÆ&ç¶Z­÷öäèÈS0nó!Ã0fÊéf!q›ç­q¥Ìj´pYoùb~@°ö2˜i¢†	Ž¶*û¦Ñ9Vò¸Ù`»aã™Fr¶Rm35œŒ=XsÇqÇ¹¬i]ÃºÎ›qäÔ–¥BŒZÓò~Èšö˜ñ˜í&M!?sµç“ û<ÈUçAöYÏ¶ÄÖ£Ï˜Ã –Â ¿1#”‘ÄÚ1¤‚ë¯¦reb]3V©A=49[uzdm±™‘K©€=CNtã»¥]>êž«]‰ÖìÂÎÏJ Ñ×ß‹EºwaÜƒg6ì5Í®ú‚5ÑÌ¾`MÏ=*½¶öóýÕpRÿx~|”`m¨ä‡iÒõjÜÖUþrÁü\ìF'í,¾öv?ìÎ!^wo·ŒÍÚ÷ÏXuˆ­F{.k¶fÍ|Íæ>*ÏÊE<XsÇqÇù‰hb+N$èâ(–¡¦\›Hd„"ÔªÎ`ûa÷¬ÑôçIpµŽõA–âÅÕlÓä}³¥0cä4¨”¬³å†T˜SÈã©Ze†¬½'ÖªÇºhd¶>­Í†+ö[«¬û©ÍªpK*mYôw[d“ƒòVñBù› ].’ž¯Åj·{q€«šº«õ"È?‡¥ûX‘šÐ]ÇÎÖð‚¬Ç	³&»ÆÄŒ© s£Ü4z<¡Hó·'Ö¾R°vg[¬ÉËdÍlKÏ„.k:BÎ¬Ê¿gh‚Ý}§áœ=½$q¢j¬9Žã8Žãü…:yk\ÌÊD¦%*i¢&Oå¦˜¬)\ŠQS.dnø¡Ð]mk‚”It5ëƒDyÿµ/ö–Åô`²6ÉWü2²•äÍ)¦Â%S¥à,Ç+‘µon3Ú8ê|²ÂÇ¹i5¤¶AÊPC ^tR$3¸&o²$3äFx¾³ZOÒ0ödØÇj··O»ž·ícµíKûÁþ¿ç•Îû«óhÇñ<<ŽÒ32å(~=¤Úò$ÿD9°Å‘ó*²æí"_)X3tlMÖ¾3`n›a@fÆ¦#êDt¶¤i0ÊS±=ÄloÏ»f›«:Žã8ŽãÜâÃ²ˆÌHrZI‰
ºE4Å‰iiB­Ar†­AÐ¦áÊ<­3í› {£‹ÖB<ÛÚyäþë½-oÄÕ@ Â(Ì!dm„äZr.­–Âµ~x%ùeÅÇ¼4Õ4ªë©ÕÕªûa"kT pò`AéáYk‰…”‰BPeÖÝo>Fz³Ÿ©×÷V»«©°íÌmW ©3";ÿìå"±»ÚKÛ«ñ‚ª	ûíÕ,QCh:e<·êþ<bFä0=<¥Â'Â‹~\'”÷ò`íkÕöwY³`ÍÌîv‘5Û
ÛÂ5\jç#6Êîux.îÞ!£CÉ³zÿð`ÍqÇqço~^BO	úC€[	¤‹¦¨µ2¢­6_ (dHH×ÚE>ýþ¿pµÝ¾\ŸÖJ9ÆþÕ^9\m££ÊÚÃ˜a‡9¦Œ–‘	†H\«<-¯DÖÞÏ'°®ð5žø´`Rä,&õ´âÓG{?‰¶¡Rdž¿ÕT4K#9ÌÕ
S&Ü(ˆÜô8÷‹ôÑT­pë{«¡d¯h×Ó³Û¬ýóìj›xÇgÝ"‡çX¨f¢¶‹÷3 º÷ùãa´›aŒÃA.Be37|Ë½]¤¼_dÍƒµ/æÍOÿ^ÖîôJEú¥Â…QÅ6º¶˜KÔ.Íþò)Fý[í”»¾^|ïÁšã8Žã8ÎgÔ‹4°ÔZ†Èº•%¢R™öa®”
àb2;3wŠúPI/kÿóœ¾ÓÚyÖÜ•(fˆƒ1Fœ$ZËòŠ2ÀÕbH‰R 
1½%­ý'­ìŸíÚœ[‘c©Iãµyn°5´ÒË/ÑF
×’¨-L¥˜¹ižÖe­]Õp$!Ÿc5›Ùcµý¶iý'c½¿D$VvWëîÝ;ûŸwÅ\Bµã.TÓUj’¨0ºjíñaÂ¿·ˆ9“©–&²‹ÍÕZ"Æ,È{ï¦øjûaï¦AJ`zdf‘š`Þ&§ÍÒPïÿnë†”i‘˜‰wØ_ëEDÙÖÇqÇq>¯·«Õ¸PŽ‡1ÕV­°Ÿ‰«ÒZI¨õÎþÍÏzÜVò4ÝÄxº´‹X°¶[´öÛÓÂiŠ½rŸ«éÍÖx”1bŽSJ:'.BñPj
	`N?¿Ÿ²˜—¸Ze]ˆIÛ®Í¼ Q››ˆXuÇ;yß<7f×·ÂB!s´„“õºDkzÞ7‹ V3W»ÍÞÑö;a[÷¯gå"W–«	;Wƒqáôb·ˆ:Û…‡1Ê²5bJ…i|”«¢½,R	É•‹Ù'A~¥ý°ï¤å†:ª«môÎlg»ÃSÜ[ŸNZT¢’ÖË ÿËƒ5ÇqÇqœ¿ùˆ­UhÀ”«Hì,”Rabº~M—¬å 7`Ó5Æ˜âDò\N”TÑDÕp®¶‹Ú0²ô†ùÙ'kq8žyÐdíýS|€­…a*•mwn®¯BÖÞ¯ë"+­æRgÈŸžd\­iŸÿ*èÈ.k+ôl*ë&åÌU¬]æ9’PHµ,ÙCì•^Ú»[W¿ÝU>ÞšùqW.²[®¶ÏÕätSë<ödMF !ÛÑ,3Y•IãB!nPÏµ1¤w¾÷Tæ‹ùñ¥­ÕàjaCÆöÅwÝÕ,$ÓÁFkÒ.k‚Æq]ÖÀ¬}ã8Žã8ŽãÜÖæe!kD<#ÏiU®Ø2³Ú*¼Ò9Èa{1#YK%È‰ò4E%%Äk¬¡]äš¬}š™BÜÍ‚Ü§1ã$0žwÅ>hçDÈyzx’°Å
ü’«ðdí‡û§U­juˆxÛ	M049‹°á—ˆd„Ä-\J]æ¥Z²VU×H°pMH®­±ÿY·ˆ5‹œvÍ"»”¬?|‘_¶sç#\íw±¦ç®Ö—ûÝÕÌÖðƒQyìuýÚ,"&ks]©h«J*%™ñ/±ªÞb‹µŸ=Xûb~xwëo|‹ó[ÌlÄé­œ$q3ƒŸé™Ùwv·-p³‹^P²åp2àýºtí'×mÇqÇqœÛ…òµui¶ÿµ°hk¿@…7…ž(lg<
(ƒ¤)B«Îè,HÖ~×`mÏÖ0â³.Èž¬1ùÕ¦Ñ\mœòAê'b¡ŽS"UäLr¢ÿþá4A>=©!_{:-â§µŠ–Éæù$o€¦É[TáfAlàg Ph‚ õ¥jÛq5[®†JŽÞ,òò¦×}D¢ÖáîªÒ}¼A^Ÿ¹¯‰1^*ìß^¸9ŒÇGåh&MN!‡Th8RÕÍfQ5Ajûý›þ×kéÛb¿•×Ý¹]d[}fÚ…3°DíüŠ&@ÚôRçAÊ~Ûß§²æûa;Žã8ŽãÜæƒîø¥Õýº>­2r¯DB)Ä•ëI“5›’1DÃ9`ÅZ¯íßƒ	tZ¹‹c.å"S¡lƒøZÜ²µaÌq
æG”j„Ëâ .\^ƒ¬½‡œ	ó,J¶Êµ,Sk«<ÚvYk&kpæ-cÃ,ÈÚâB…7ªÉ©ÉšLÐ³®mó#·ÍÕz¬öW5c7SÒ‚5uµ.µwµ}Bz<ö÷8ÍÆ}²ð6»RŽ9OÇLuÄ×Ddåãóoú_+Xë›žM¶ÔÖ.½ý`;ŸËFzÍˆçF‘·öçö~ÈškŽã8Žã8ŸÕÛ¿Ì &1/¨'œâ4&¨@Q?†%jJ”LÖ`RqÃÚE4Xƒ%ìùØë mäp‰c,’Á0Œ¶%6V®IOà”SþJŽÉÃ87,¦«÷ßþíÓË{Ìl´~Gù¤5š›H™ ó!Q4"@Ð*-xªag#>13±Pâ*pID›’]ÚÍÚpÓ[ ·X­ÿWx!1Ãí•f‘~Ùé®vZ*\-^™‰cc‹Õ[°¶OÖz°&Èœp5„xD!ä0e¢¨¤F‚£µ¢þó{ÿ¦ÿ5ÚEÌÐúå-U3õÚÂ1Œî½¶÷Ù;µ¶[aã¯MÖäþ5TMð`ÍqÇqç6ï­ËB€EÌ­qˆ
üUÓ¬Ã¢(ÛJ¶’Sa[›¿˜‘9Û$§)\Ýûÿ®t÷÷<æy"ƒ0Í&@F[®6éº8ªSL9N”†˜“jcmYû€…VkC!ãvRÖÅæE>}šåÑ“< œ›œí?‰öû[ÖÉ:VD¥qEçFÈG³þþK²f®ör³H¿éÃÍä­_}ÄªC)íG¹Èn½4íÏ•ýÛØ€}äYÕ.žfÚv<êxR¡B%G;ÍX‡çí"ÿÞüãÝY³åfÚ/b˜vu;¶ûÞ-‚“N”g²-›È~¡±À[mGìŸ¾qÇqÇqnks­ó
fªfÌŒ¥k%d*€Ò6ÂÏä˜‚Œ9›ÊM1éïàiA]-_ÖÉe~;Ywÿˆ—q°×…ãhÃa
ør?SJaÊ…¹&’?£ÚI(•ëý›¿ýFvê^¢K­×*Æ°™ªcSUÃ„È…mášecÖ_c¡¤TÚ¼ÀÕ6Y#>‹[*x*#°V˜ùz³H{ÙÈNËìæE¯{VÚßƒµÍ¸÷¦vÐ&O55;†…ixíçvŽÙJFâ˜‹þ?	rÂÇæ“ ¿œoßÝFûqo¥f¤·Št,2Ãa¼EµžaŸµ-b;ó¹Ú÷^Ûï8Žã8Žs›÷3„¯Àˆ-ÖšHÐŽÅÂÌ!Ø>^†…i3ÈÄ)ÆœÃD)âR PÊK+Öz;Å¯ÖÝ?(½·_ÀIÑT-Æ8¦	ëFdka‰LÓAB—Ãó”˜Ûß]ÖÞÜ/øp¡Ä5,´ÊÇÞqjÒ¦“#õÉ&k­Î§F¨Ô¨ FMg!B–’œ¡pBÎ½»_x>òÖ^j_öoécËÇ+¥ýãõíÕŽ†.WÛåj½±ß^;]{8Æø€aÒÒ8†&Ö¤q»Ë½ÿÆùBÞüøï-­ËZÖ°Áµª™ei{znQY³]×pÙƒ88ÚÙÕ~üÆqÇùöÎ Çm$YÃSc·ºÑ3he½ñ†(ÀOH‘@®„\Ä.WäšÈOÀ3øêw‘º€/0—¨c¼Y¾ø#ÈJ-M	ð«-â“È$%•¨6õáÏüÓqçuÈ]F¯…úgÎ1ZÒÉ´Àò4¡ÛrS”¼Dq÷J«‚üz¡Jðß#’5«‚lÅ›TfB]€¬I0z‘µH\8K^Äç"—éã­qG›adè™'æ¥Fç1çQS·Öá?NÓ„Æ’¸²VŠhØ)‘–_‚}ë™óbiiÛ©±ÚE#ûvfµÚ¥HÍ.[®f¥ý¡Åjç·W³\Í"µC35c£jr4ºÓ^–¬˜÷É”†sd4àTqWô±x*ó¶í"h´q™Ø¨¸n»`¸šª©¬­%¶Tm·“¯-YÜ/ÍÕþð_¡ã8Žã8Î«ü>M%–¥¹Oá"AÖÈ–¬¼²^r(s‘3E³µþr°öíYÖžÆB¶à©©Ú¦ðýx@p×í‘:”ºÄÛ0á¯”ök%Eß%®õÆeíÝŸ\(Uéä¨Â%›0è¼S¹.ß¾Ù›ÉÚTájòñœKášãsd"–3D-?×¼Äd¨«åÜZ [	äú¼¨fÛö‘­ÖVY¹•‹´ßàëiýÇ—žÖtíB¦Ð‰¡‡”'|=…ˆFjíÊ£¬Å»ÿ›ó“¼Ûk—vÇ~ž ©g52­
Yý¼ÿwêh@GäÖ=ÖÖ‹­á ¾¶ã8Žã8ÎÛM•Ñ¯§H¢Ã1äiÌ±×íÕÔÙX
cÄMjûªQ"SJöR¿kP…³ï·ÖlÑZËdö/e-¤°ïð/J,`lÇ¡'â’cä|©‹/•—µûŒÐ‹E5ê4™úhÓp=Š¿!Õr«¯®èî™¦I”míìG¢I\d Ù¦¥’A¾ØÛ¦@^Í·³í#gr5™Ã*ÒÉ›"ÈÃÞl{£Û›9MÕ@‹ÕZ®¶*8Q¯­2T'Ö]Á™ÅÕ ¸ÂãÓ£·‹ü4ÿ¸jÁÚ®•‹˜†)Ïž†9ß­»^K¤^½_ÊþQ'‰€uÐK¯íwÇqÇ¹jCì©f®Kq¿<kìö)£f0ì£YéÙ/'4‰Ä Mý)õ}4S³`-×¬áë÷»bSkkÖºaÀÎØ¨‰ÃØk¸…DzÒÆ¾¿íðòSÚw‘²MtœS3qž
TWáe\'y¡Ì‡ÔEn\äuî£@“œRÄ#n–«m›EÚeKÏ¶’öí•Šÿ¯Xoø?êjá‡õjg\mí97²¥jË¹]Ê¿:‘ñ~à‘ûX!¬rÌ#Xåøð7çjû7¦dØ¸:Fl2$žm_5XX»Û©Ô-Übjm·=XsÇqÇ¹¦^¤¢òB•@9Jì©0¥ž²€“9¯ªÆ2D4Î¥"ÚÚoX°Æ¬m;í°ÖæJ©o5‚];6CßÉ!Æö ™Cˆ1¢pƒ#Q‘9ÝßöªÀö²¶<ÎëÈ9býÕ8•,²†ÚÇÇ“º:è›¾^ÃÖ”l;&X˜¶n…Ý–«•McÿåÆ\]Y>²*Û×µruµež?¨Ú…)*iß5öÿˆXÞ~ÿå˜(Pêb«6hN§§'È¬×ö¿Ymÿ¶bäN“±M®¶›ÀìÙÜ´=r§&u8+m6ÖÇqÇq®Û«yKf$7d¬•)k´Cd²f­üIoXx®=#¶·ZCƒµùB°¶Ùhíe²¦‡qTl”ÉŽhé—7YK!„dòú‹pÓ><Š™‹Å—Öªévaã\ó,²†8.Rµ¹ß6c+œ‚6ú³z3îr$jËÔpØ9m–«½beÍÅ6}#M¬Ûþ»A&k-TÛÔÃ¼0µ3Ý"V	Î)Ûq¿?~y»/¸SfF‘µQ„ö“×ö¿m»ˆŒà´ÖAâ¤}!ÍÌÐÁo—MÃ€|xg²K“.5u[?í+ÖÇqÇq®ä&áÁÍH(SE²Æ—S&2
IF«ðo°ÅkêKC}¯š¦›¬%âI« 7±ZsµïwÅ>Û#hÉŒ°¿BêC‡bÁ9¦H1…>QzxH¥–Zïo{¢iáóˆÆÓ©–y®ÄóÈœmY§6ÂÐLÖNHÓ²is.ãH¤²Æk'çWE³Ñ.¡¯Ërµ«µmÔš”]ÞÛ®/¾€\íß(‚4WÛË£»«Y¤µ@6eS¾´ÇÖÒp¯Oú—/CŽû.Öýü¸š±µ¸·‹¼um?@¨¦ˆÊ~Ý©²Ý!33Ó³²nŸ†7õSð;½ÚY²†;û©õôË?=XsÇqÇ¹¢^éÍ4
Ñd­&!›¾1Se¢¶X-Ff{¨ˆ¢ÊZŠk°öt6XûöüG?vÅn²Öæ@6TÖ–|FØï£´ŒÈ+‘tg¬vÒ‡^ùéÃÅ
sŽF4@¢çQ¬yœ¹¬=ý"isEîv2[C%'*G ÑÓ¨šfjK‹™VEk<m¹Z›y™¿šB_E+í·"Èuƒµ}·ùÝ]ÎÕš©)MÕìÔ÷Ðõ¯²ÖÅþ79çÂÜõu®uöIoß.bèò4Õ4œP6bröËâ]š¥-©ÌMäl§aœEløqùq©'ÏFÇqÇq®©¾È¹Ì§¹ö=ŒŒu¤°5Ä…Rj#é-ã‰«~ˆD! aK¨!ëí7_Ø8A“µG“5Sµ» å©èÍè¥²!“
gÒ’¦ž k·ü3eJ!ò¨.Ó„z~§í`mVŸKíÁ³²`Õ"ënj`Q5k,WËÜ–«mLë3û¶©iO»m¥ýÏEMÕÎäjx|çj85Uƒ›]ììÇ‡ÝÉšH›ÖŠ–ˆK)HbûŒoÏÛEÞ´]äî®]îŠ­…ü°/½ÀÜF¿Ÿ‰RHkÔ”® rò4YSÃÛy°æ8Žã8Žs]°öy8Í²–)r­¬9Zè¦Hç&?â0ÈÚû‰Bëíjõ"ç&Ý¡RðqÂ®Ø—Ê ›¬Ãþ¸.y:¤, §2AUcjN¹@Ön9»¬Œ4
†ýÓ¬7™nè™ž§IµgÎ*kœ3-«Ò0*&kˆÙÚNØ˜ù¯ÖØ¿õ­f`Ûæ×…å"ÍÕYgs5hN‡ÕÔ6º†ØT­ëÄÓº‡Ï¢æ1ra˜y™¦š‡1SÔƒµŸçŸ¯í†}·^·R<¡aw¿šŸ‰¬íT¿ìNXmnÙ4{mi2g×»ß~óý°ÇqÇq®I}­L¾„CÏ%ÇlKÖÊÈ*oiPÈoN–­õƒ!QýR/bb_þûßdmTYkéÌ¹‚
ÈZ×þÚï5Õ‹1…`¦RØvˆþóveíÃ'TðWxpáÉvÁ– mF3dI<©¹‰‚ Zƒ¦ÁÑ©Mš¦¥Èèê\d˜éyµáLx#¶j‘ÍrµVfQÚ5s!ñfs5Yi8•æj­[d«)k®fç¦j/Ö¬m9»u¦Bv)hŒšcÁö±+^ÛÿÂï¼"krÜÙºW‹ÖÞk|ÖÊB¾OÖ–™¦ÙßËÜzý÷mÇqÇqœ×¹?Í*óD]_&&ÊÚÞ?ÏU#´¾ˆ(¯4IS0 !â	ÛÞþ?-²v¾øýØöèÒJÈ&k)d›ö—0¤CŠ¹ðŸ¿ßnmÿ„-Çšô‹Hzf•©Ž¸qÌ¶g¶EêjœcâÊ¿•µÂ1ª0IeíÒîj[»ü²É[»ü‡^oŠ OZù¢r‰šƒþÐØc}\ªí?H¤¸ZèñÃ]º¡”‹®ó‹E¾7oùiþþÇ+Û«a°Ó’”-™™I˜	X³4œñÒZÝ¿¶BêNÙ‹ éˆ¸ÍkûÇqÇq®6	H‚9—šUÖÔF5·¡ë)rið¬E²›Ø÷K_?!qé·õ"[1h²ö4rÃÙ2ÈViÛ¬Ì©Ñ»AÊL)…!ªÓÇw7¬U	ÊN¢`© FS““~ë…ŠÙšÎŠ´7°ÿÚã<Õ
Ã#â‹øsÉZJÏ½"ëÂÂ7Õ"%Û,?{-G»Ä×VÚ¯ÖZ"z>W{X“5¶Zí"G1¶!„ãgÙ;DIð"sÁ7˜sO½šâÿ©]Î†~ËVYÛ­•ý¿¬ž¦Š†ÈàÈ‹x­åiP8•5oqÇqÇ¹zŠÞxáÚßOÚŽEUîcßu1}š±¥!f–VúD¬i½ˆõö7h'ÃdLÖ,žÙL‚”ãAŸ‰Vºå/þÅ€YS%MÓÇ2Þ¬¬½û¨"ð2‡0ÉíXÇ)3MÂÌH•4y¨µ¡2R^™§L™9rØÔ,­ÄhgsµzEä·ÍÍ_×è›…l_W«/sµ±Z3µ—žÖkEÿyðKØ–aÐÒBOæ4Žc9|ä[kì•&GCLMÂ2•5¹ZÚEš¬í~³»÷ÀÚEÔÌž·Î¶Å·‹8Žã8Žã\Ã=äkà9%žÆZ´¼ŸKaŠ”Ð2’_B™¡e)³<â Q¨€T²µ^D¤á²2ØFkOc1Y3~ÈgÖhMG”ŒìÅb¦9çRbHrMûXoWÖ>Lc™PÍšFÝìÚ:DP—A¨á'udë‚džÅ KÐ
Y3EàemÚš¬™®-®f;aÿ_ûIÙ_g^iñÆv(_ÿë«•ögZrµ¦jûÍîj*j-TkE/í?ÒwÇ.„¾Òp¬";‹­¹x»ÈÛ¶‹ ­ÿÎ††ihl3©Ñ²´ÕËì£áu&rbu¶›ÍôvÇqÇqœ+ëE÷d†¬U
©H¢“så>p­œ‰Ö&Hæ–¯Q6W˜úH‘”46R{û/ËÂ*k³ÊšyÚ6Y[0a‡a]¥"S¢K¡”ô¶NÓÇ¿ßj°6VÎÓ/Ó}¯­©.Etlq£ê&ÊVˆ5e#ª6q3É¦Æ5|r¶|‡}û««É:Á3[~¶Ñ´+<nSÚ_×ÒþV-²­ìW.Ïlž†ñŸÃ Ÿƒõ…Ðõyª\ñ>=þäÁÚOóîµ­Õ`kèßkT¶ƒ¬©•-´$pmBä²Û{ÝEûî½÷/oÖÇqÇq®ãyMæ‚ÌG—G§±ê÷ý²ßµÆƒú÷q20Þ‹8‘¼GÁd-O/ëE¾m¥ÉZKÖ6ÁšF4­]¤³Ý cèöòº.sìa/\KoUÖîE·J.±ÓÄe¬ÖÔoÚIêF¥ÙÈ’XÞ˜„Â%S‘A(CŽª«êÏ”ŒØ\Õ"í[¿¨Ém)›öl´w.”ö‡aU5<7†-¿´¥¯_Î›Ö®ŽÕ>–y_>ËØQêSÎá8ˆÛŠ«=NåÞÿÐãIfkwº[š±COÈ® œK÷Yk²&M"¶›nî´íÊ†A^B®ÖZI<XsÇqÇ¹¶^PF4ËÛ^Ø,—#uºÅZ“µFê#3|AÎ¬’>C) ÁZ™7³ ¯MÖ^N§kÁš²V}ÈØ ¥!ô]Ð\-ÆR'ÈÚk¥ÔIž¢`r5rÖiÆ<Í°µQ¡¡?C!'äqœc®e‘5´Hú­ãê&,®¶©¼¢¸ëgÛW›ÆÁÕ¬rãjç6[x8[Ùÿecj.rü_öÎ 7nÃmÇíž¤ 	Ðo„2–p%pÁWàZàF'Ðrw_ÄÈúsŒ™å¼ÿ=©XÑ¨bÆ^¼Ï%‘RUœª^ø›GþïÄÏ>ð[¢;'­äÒˆ¥¤å£ý¡ÿbÞ=·YmÏüXV?"kälnØ®ÆÀºä¤Öæ®×2—7±«Ýóí¹ †aÉ ùõ'Ã0Ã0cW°œóð¨›¦2ÜŒÊTÚ#6‡9TqðHDÓh¾“ÔÑÐï«um-¬]_Yo±¬ý›e-ˆ¬møZ¿ì}[;5mÛÂoéŽ>¶ð5ÙÁÖv¬8ã‡×º'en&žcá«\ gC‘›€/5Rƒ8ÇÌ¯’l¥à^É”)i¸Î’­â£?»Ú*Zd•‰¡Þ~†¯›f]ƒ »†©é«Hœë†µUUmG$^Ãõ´^f}Ä?µk"•ÜôY¼ÖA¾˜7Ï¦‹ ²&ã¼ïÖ¥æ&2m‡½XØÏ—­¯yDÌf;«¼w»³Ø~Ã0Ã0Œ]|D"|yœ ‹AŠ¡Xæ|òM›ü ¦
ÉAD:'AK	µ.é±†,È\›¬mÇU€/"k²ÖlôêZ—húÖ9VÈ&¤L>†6’;´â‚èz¾û:eíÍûÑF‘µ1&t¼Î…<¡6¥CCŒ£ÖØ¤_#¥qÊ©`ÎŒ”‰(z‘5­/ÊìÜ
»ºÚóå³zþZ#!1»¾
ríjj×[9‡ëýªöýØþž­ÉÈ¾9ö.RN.æì}aW{²ÂÚ‹¹•Øþ=»ÖÉŽöVí,A<b
TÐø&ŠmoÏàµójz?Þh±ý†a†aû
kÓH4Š¬…H
i`q(ãð4‘*šŒ:Wsó­ÈZDž~<uK“µ*_·²öX’ÈÚF•FumÙ³†d@	!Äo<Ò>·ò›¦,%¾¯´°–![00Ž!âó˜riÃ¨¥µééibd¿ ÀëâQÁÞÊ–GÒfñ1Š«qµÚ^mÓÓöñu;Ûÿ2´*h°¶Ý
»–ÕÁÆc³¹Wé{>ð–5ùæ»}Éríþ÷ÉþÐÿ/‚7dÏ<CFUÙª¬éS²4“3²ëM_ŒWÏ†÷ûO†a†aÆ®Âš©e6&Ã(§„QÎÁÕØ~ZF¢ó4¤’û‚;Ç‹ü…µg¨²V+k›¡‚Çcß7­k]ÝéÔzFÊKâ’Di™W)ko>•’¡\0²‘Ê$1>Éõ¤Yý€ÃF&É¦‡>gØ0ÞYF”åJ	7¥ŒÅ—yªu5Z\m]V«9ßéŠýçúÕë™ÖÕ4´ŸP;Ýn¯¶Ò´ÓôßÕ¾Ý°v…þÈßüƒÒ4‡C“ˆ"þSNdmxo+è^Êíoûúaëq#¾uîVw ÝiOlö3q1½‹)ÄŽÑˆ¼[î.ÍÙødµQÃ0Ã0Œ}*1ŽH‘^_ArÉ$‚¦'3˜«j‹¤‰KD‘i/ãEþY[ï•ÂQû¬]¯¬õß´Äæë†UÍ¹Ðž		¢wÎ–`0Q‚8Þ¿Ò°MMÞ§7C*$ŽadŒð*È2òi …R)ÁÃTÖJòsÛ;¯N>â…«!²¿ÚqÕ²ÝýÛÅÏµ«ÍÖfUÛj‹‡ã€¦¶JÜÕ]jÎ_òs8ž!Æ\R©i"R4­ÅÚËùuŸ«ÝÌƒîY´2¶ìW[dM.jÓ515Ñ3áN3ûgO»ûó?~ûÉ0Ã0ÃØ—*_`^e,2K*kªjUÖf¢š¡#u_pÐF¬Êkç&k$MÖØžQÎ‚Ÿemcÿ“ªÃsä@:‚sÚmÍyZ¢‡»ˆ
¥Æ½Êî[·ŸržÓÑ&¬$‚§¬ÍÕàk†§Iôm‚¯/‰0QÖ4’XÈD™O5æ,k1©«­b ¯›Ú×«3Ûv­®ö8Š«UUÛ*¬¡ª¦? õ1×xà£o:Ø64ø°Û/7Ï¶ò¤‹Ô@HQµË®ØoÕÉTÖàj¸?“˜~àŽw»ñ¯æ‘»ß­°f†a†±O%JNm³Åç’"¡”söAh°1„.B¯5ïñäYÖ–[ÛnÄ‹lg~YEÖ”oU'æØvÇc×ºàB8”Ö»þ3*!R.%ûCû*eí>\‰ì—@‘‚ÈMÄø/’ö´Œ8KÚ!¶®TÏ²Š^.óÚÓàåë˜_â…«ý}5²¿J—ÒêT/ž7¼Ú`:®™ý›9s!t½W­x|—pµ¶e[CKlÖRÌYe5ÖbíÇ,‚Ô­j÷<¹áNk*[UÒøZG *&=ÕtÝ¤&Aj‹5Ì ßµØ~Ã0Ã0ŒÝ¹ýþØ%XŒ)æ»6Q^¢âw­˜Ap	—ÉymŒÝ1Îµ°³–Cwn²V.š¬}ýŽ,²Ö.•5ëÊGö;$\Ä¹Ez|D°I	Fôî!k¯°°Fy”Œ,‰—ã40âeL*p¸	5’ŠÁž@ÄDÛ_©«}]¥öï ¾|ý>u5i°–Ð`íÒ«×]˜y·«U{Êj€ä§YÖï IRÇmú09e+¬ýˆtMî—-kwÊÍ_C¸4ž_wªÍ³Üƒãá6zhó¨}×ê«3ß6Ã0ÃØÅÇBm“J™ ü“bbëj‘µˆT¤A6–qâ§µÐ&fÆSï:%dwTÖ.›¬]o´¶’5æ´Ñ²‹+8<i° ²›+>chd»¥ÈøàúÞ¹P>½{;ÖJác(ccZN4(²ñÇ-©.<`ToÓvk8I¾ÿˆ²šBDKh?E‘5Šº_í_‹«­ùóú´:žê:¹Þ`M¿*ý9³j®¶QY[~¾ÏÃqŸÑä¯CmíècðZUcY£OÖbíÅ¼ÙUX»g´Íó¯1Îëùf&KqæQãEð”˜Þ¿Ï¸«õ6À3‹í7Ã0ÃØÍ›O™"Ò}À c¡E–j65¦i‚fx1óÞ¹à kÄ×%í†]WAndAnþÅËëžÎ²¶ñçÿ9ñAºHÏt'ˆ@ã™”(G¯Má$¿~üø
ÿ
äX\m,$…µi(eër'f'6·<ŽØÓ6ŽºQž&eN'adÙcô*l)á‘ÇÇêjÛl×Ûö‡ùÿ¥®Vª«1ë²8œúÍl‘uhÿá];ôŸ®ž;­c
§.•âi(%k±öÃÒE \˜°©	uœKdªiˆÑ™æ‡ürUãéë–Óæ7Üi]ÎÒEÃ0Ã0vòaÓ8éV™c×J1©Ñ7ÒØÌGó®k]‹Õžˆ’ÞŒ²^Y‹7k´²ö·ÈÚ²j- §6tšN2û¥…›?rÂ^l2¢˜²xK~…ÉS,… IË i K!5Rú©ñåµq€ÔQÉI<-&vïO›uµÒ‹ç‚Fê7Æ?µöž4´_Um)%Ðš-®¨Ú3 ¨Æ¶&“†¿u–µSÊ‰Jtþ˜ÆL“Ö^Î»½é"wÚ’¦ðì&nV“Ep–
o÷¿\ÝÝ/÷âjÊ\YûÝ
k†a†a»¸eU@
ºE9ÈIÕ,Å»†UÉÅt†bëÐûÚGmöùñ¬ÑX³ ¯Âƒ/RY#¿±Rò*Ž­;ö³µµýÉ9ÖÈèèBÌRoÒä‰‰/__¨ûí§QZ”1Ç4MÐ1‰ìd^P`C¼Èˆk±5íŠKüÛäÈú¯Cý0JæK@mçW÷«m\ljsmµ¶ékàË?5´_‚ /r +5 QC]ãæ"Hpchç~òÀàJ—ÒøX\	*ké"/‹ wnZÃBÈ»ªjÈâGº£¬€fÃLN_TÖn0\ÀOZºˆa†aÆ>ÞlA\-J$®VPÑ‰ÀËÉµ®ÆÅÓ’×ï“Â/àçÃÅ*HžÐ yÇ‚¼*k –¡?6}>k§Ž­­ïB)ÃÓÆO<…Êø×÷§üûRÄ})GçòX(Ó Ÿ8Rü©L<Áå …Í¡dHÛÜ›‘0ÈèsæÑû(•Ì(›×R.ÕÕž¡VÚ®xÚºÌ¶)®¶î±Ð3zÚ¨«iUmO/l•5ü/èÆµ®ÇÐñ”!º’SyühE™’.rs^		gýÂIeKåLá9ÀL</ž6ËÚ¿€»üüo¶Õ0Ã0c·©0ØZ"\$Z^ Î:†Q&5‚t‘gòòp´Õ*HlYÛ(è`\WÖ†­ÊàÌ©k›þl¡?ôó®Ce-Ç&Ž¿F
±2¾:Y»ýƒ2$˜	øÈJJez*kO*k¨§…ýkÂ€Ê›ÖÕ0¤˜†@2>ÀÛÊpáj«¥bØ”1=”g#`þâEÿá˜,¡ýgW;®r` iZ\ÓG-ª]nVû"i|nšƒVÖïŽ‡Ï'Ÿ|{tc!ÈÚd‹ _Ìíï{RûofY»9ÇA"Š®¦=Ö ÎußßÕmkjkzÜsun¹ÁÒEÃ0Ã0öóîSQ[“S‰²Ê2^eM1„4ËšCaHŠjân-dmÎ‚Ü¡PY;®º¬Í]»`k.¸–A›µÎÇ®w>åÔö˜œñ+{^¬½—”RH3X"Ö™Îv¬™.ƒöWUÓT‘ÌÓIžPMÃ»eE*.PP‹iùjò€l¶â/{´kímz­Ïèyuµ|AÚÚ-²sæÊúGê*Èçv«¸>ùÝ±÷D¾	ã˜‰Êh‹ LºÈ£t[[\Mëkšÿ(º†AÆsÓkšÖÖä…ü¶·oat˜£›Åö†a†aìæö¶P•‘-x2j\G¢’£÷%á	rhhÑ¶6ð-'ýÕÒ¥¬¹yd©§êÎ¥¬­Ûv]@ïBÇw1=±«á”È#§2—\†DòÃ«+¬±Ó"·…•!'-ŠfƒÈÚ£¤º@ÖF‘µ‚;…ri£bb]jšµ¨±#ž˜ª«m8ÚöÝmûZ‡º{m+´¿ºŽú5é—TO›™ýÏ¬€„Ò=0|ÆÚ†Ú®s‰¢ÏC¦D£µX{9oönX«+!± òž­«.pÄIÃCeGœøi-­q[6Iëç› Óy´E†a†a{sû	Él…'Ó	B–P`ó]ˆ®)-°Q:C$ÝÖBÇ–æ£ç3À€ÂZ®YÛlWÖNø¹Ò·ëÐó>q~ÅÑ¥Ô%,¿l}B*>dÍS)¯MÖÞyŠä:(p³i YÄêG.<CÈ‹¸ZFU-ñ0)a³›ìÌ£œB@sÕeÌ"ìïI\måÁ×rúëy|ÿ¶«­¿¥Yªÿ'°{µ=f§Ævl°Ê–(eù s¶E/ævºˆêÚÍÝ™Ù½¤ËO–uguSYCZ$äî/ÅM5<¾+¯üÕ
k†aÿeïŒuãF’0¼kòžoa¶+pB š$ÐÑ ƒÎ:* c¢>ßà ?ÁE²ã{½À>Ë=Æ¥W©–hÎš‚ c‚úf†lrFÞõ(ñ‡ªþË0c×„cGi€D³ô §Ðt¬b¨ª1	È›žO¸¢¥WëjºeMº 7Gbë²®¿WY[÷×1‡öÉŒåÖ…Æœ$š’R_|Ì#gº¸Í£r™bUÄF´;N<h-'664<JÏcæ;Ì4@˜áq²&µÂå—KŠ¤LRÖ|p50Wß³67nUÒöÄ÷×‹ZW›ÊSW[7ABÓ¶Gaï¨}©H&$”íØ9‘‘¾\¢öïü_’.Re­ºš µÆo›sEp©+=¾}‹*>/7–jüÃ˜ŒýÞ~‡†a†aûxx¤DÆ.2è·+YGa÷aÖ4Òb-°¨±#1áåUÃ+Du"öiðuY×,kÿYkV]x@×D”6Äà›Þ{¼´¢âä¥ø4–ÌžóéúÒ¶âkP'Ckã˜F>T=£ÎN€º±§el\ËQü“RÄ_MHÚŽš31ivµ»êjlÚñªÏqõ‹ùV/€Xûouµ3ãÕV¿¦ÊÚÏYÉÚé$AðUTÖ('çâgk‚üeMØ¶¦ÎV«jW|“/kC£¶@b·Ú8	¨º©ÎñYnhA¦}³ß¡a†aÆþxQˆaD+á˜4i`>’'áp©?’Ç•5uDÖj¼HˆyØÛ©>°ÈÚJ¤çñ´*­ÅˆIk¡ãW²Sd‘$ûÖ¦‹›˜üAL·”q,)Ò0§ŠˆžM’ 2Bà kìÌ|†rJ…-R)RO#©³á@)£á"âjœ¸9×/W’Uïl±·òëâj´UW«ÕÏÚ«Šãö(ìÃÎÂ/ëµcƒ:.?#mB°t‘óJÒEö£•5˜¦]Ãßøj&¨¬)õJJjo02KÀ€6Üxÿ›a†a†±³IoØÖ@&WÓ,B-úè{q³¥ªVóEô¶6Oý
‹ª-ÁýµòüFª+kç-?pDðIpÁ9ï‚!4AŠ/Ã4^š¬½ûŒ¡.2’EC7UØ¦L,l¨«!Ä¿dï00ŽF©­%È#VÌg4cDÂû#euµµ[Åßª·Õwö%‘|ÕaØ¥Ãn72ûAê§ª¶s»Ú—êj¬„ù³ú£õ“_ÉÇÏ–LñkŠÔÒ‘5–-\h{#ÐJlXƒÔÏ2Èü?´ÄAZºˆa†aÆþÂ†0ó³9B‚Vm²ˆAJð‚ªfx&9Ð²
AGbMqrôTƒûÏï‰ªqƒ•µ¶Ý(¬ñ£m«°º¾óãÖ$ÌÄ Ý±Lc¹°‘É×pÉ±À·êº1c†œYÖ(H›2LLÀˆï‘Ÿ¸`kÅ§"„YBûGvµÿTW{&ëyl8¬“HæºšÃÞª«ÕÑ
üRNÛûÕð:ìlœoÜÜoonC×E"É'%Kù%#ÖÖª¦‘ý0-aÉ§¥¦öTÖø I"ø•5A²þqÿŸ¿†a†aû¸GÄfÐ{Oª‰4ÿ1†§}êh¤ñ¡-Ò{ïàPÁm÷oOÃ®<’µãjËÚ‘O/p<€¦åêÚ±w!„H™Ð¸œ—úZÌ,k¯/kK`aã\mÊ®OÓ$¶6ô=R.‰ïOµ»?I#‚üájst?$-Õ>Èø2ú9´®¶Òß­jçÛ#¿m[\­«­\íÌÌòÃFamWY­Öª¬µ¼ÆÝ›ÛÃÍÍ—æÔPŽ±°¾ZºÈËyõîùM@Âø¯ÄÕª«±žá¬¾¦M»Öþ#`s_Zºˆa†aÆ~—`OËÓ„ªçƒ§Bö£¥/p"yÖú>]˜­®wð<lYCp?<b_ÜÅw‘µÌ²¦*P]íØõUÖ¸¼†Â>Ô°²AÖðXð9å] “µëO…K¾¯Â¤cÆqšðF¡"×œÉ‡/îXäDðæ$¢Hð40÷{Â’©L÷âjø’7Ulûö·ý;Ø¾‹«ÝÍ®ÖlÌÂn—¸~œŸp+‡[yÝ.¯…5üÿ©Çnßp$äéËM—)ID¦X{9¯yÆõsÐ<Õ5=-É""fu46Öó½y+ÀÏã¶re¿CÃ0Ã0ŒgÄ‹$ï$¨05Gïö•a(Ï¯GœkQ-¡múvÀ 3†Ï!×=÷×0È³]J•µUe­ï'2Ð6ßê:×ó'.EaÎ³‡ËÄT.«úò!—£Gá’Òx?±s Í‘õ¸ŒŒD¢ÈQ:!À7ï#„¯"4¥BÖ
êj:»X«ßñÆ˜ë]!#ÛUOd‹¨«åíHÈ´R£Ež?»ºZµµcÓtÜ yÃ²vêº¦KY\7ó=ãW§‹,éxéI¥Kû µžÆ`UËl>¢’‡5Þ,]Ä0Ã0c?°5
„™²oú8"´|$)ã¤Ò#aEûÞñBˆÑ".çuÏZ§Áýè‚¬
PO[Z Y›Hdí	‹«-ÐöÎ»N \ÎµCBze.¼Ì^]V¼HI®wIþßh@jSšîG’AÙŒ]AÙ°dQ+sIMŽRYói‰‚D?šT£„ö× ÈÊ91û¶Òäó%¶Ws›®V÷«ýí|5å°WÖ0»ï›ö€ÊÚ¡gOte$Ê”‹5AþškkXÖí‚¯ÕÁi8©°ÕºƒâMüN&«	Úi…5Ã0Ã0Œ½¼ûÈz {¦règYsd%
Èð_Yc‚òI®ñáú>øÀÏ^ØÜ¿–µ¥^ÖVš®oká¦ÅV5Ä@Jb?ì íäÿ í¾²=]”¬]‡T(ôà4®5´\XdÓÕ>2²¬M÷nS.’0‚Ž’u‰C¦œ¼IÞoAþUWÛV¼¾Þ°è*v‹«Qd=Þš¯ÆC­«UTÑjeí'¢ÆÏ•¬Ž,éÇæÄï¶èru©d¦XäËyýçÛgY»ºš7­im‡;O«!5RÌ¬ÆŒüt6ÛŸ¿†a†a»wTMf}Á¨kŸsB !{¢W¥5…(…ÞÃÙtz6¡ó±ëñÚ)[Ö¶„`s*ö¿gY[UÖúYÖTZ~WŠj˜†Ýµl
½‹ÛS¢<‰«Qþ’díÕG	2†´©Œ÷÷ÈéG	­ð™áÅ(“×&‹ ˜†öHÜÆ(±I!xŸ"\ßZ¹Ús›õÖY_û^]m»R“:Õ¢ëpµÊ¾hQµÊÚ±îÄ–×äB19_($k‚/Mûe-W<YíÖÖ„'	#5U„Áµö@ÎÃ²ñcR_“¾ï-¶ß0Ã0c¿KLÈíG!“=¶¢õ”IºÕÆ*DË"vºe-zýTèúJ·Ü¿¶„íÊÚÓ=kG¶„*k§¦ëœšZðŽµíØ:¢»mS&™5€©dÉ¹ë‹’am)—Å´‘OÂ4ñÕÝ½,5TdÊH™Õ5ÂDLK1/#Öð7pµÈu5YEŠÔÅ·õ¾9pí|éíŒ«U–l­°Õÿø8²—¬ázž­v{êÚGÊ44Ž>…¿ðöïüóîÙ±ý72ª¬-ÃÓ ^UM÷¤a¹â¤~Éé×"›ÀëßßZl¿a†aÆn®ïïQß`Òçc`×ÒðT4RŒmIó—…ó‰¬©¯aÑm÷oÉÁ¶¬=¢gK¨C±Ñ×;ç†´­“vHçšSÌcö>£}3“wá’dí)1å‚D‘¬}w8@‘ïï¡kpe~+£ôCjÃdæWÉs4	ð`ÇÚCäOz«žý„µÜ}ýÉ|µhµeÿ$ìYÎ*üSÌíæØ]*%xïºæøÙF¬½˜Wh‚|6W’Äæhš!²ä@ò-™ÊÚ,n˜Ç†ÈªjøÐÕŸ¶ëÐ0Ã0c7îïTr¨ ”P }ìš.¢l&¾0½‹:|ïèŒâ¡ioë ìîé–5•µ¿6EM×ú:/k‹?ÍpgÌ@lÐu-wÊ‰µ…®u¡”²tÆÞ¥ëKÊÚÌ%«ñæ’b–ÎÇ	z¦6‘5¾ƒkÈê/06@ŠÛeµ´¬çèÅÖ¦a¯‚ wz1nžíNÕEuµR]í‡ñjmÍÜPµÛ;Ö~l<–õÍO[ã?µs)I-Ñk‚ü¥M•ß±KkkÌœÙ¯²†3ž
î-ð
u8œçéj³¬½·]‡†a†aÏ²&ýx¥l\Cb<uÞ»¦Á†µÚOXzïë•Êš“ ÈÞÅ 
åºG[Öjäy_¨lÊZ¸ÌrÐwÍéph‚;b×œé¼ïÁGÉù:ÿéú’rû)çØyxoÄ¾5þšµñ‘}kFKk„.“ÏÓ€®‡œ’º?QÐôLL¤Ö¾n†‹|[ÝX÷Gâ#ÕÌpQÑkuµÿÝ¯\mk¼ëÈÚù3~pµötû k§¦=¢°zŒƒ!ügûwþ‹yýþ™š¦Ç+ÖÐ¹dðÏ“Ôæ>Hœ—È8æ!4’•Mëk‚5A†a†aìçæ C½†IÇ{•ÔõÃÌ`fÑ¹$‘œ´r¹»N‡ªÅ(žÖmoY[×ö·Aª­pháj5ßÚcs ÈŸàN9‰2 ".HÖ^}$J%¼‘<wƒ¤óOòUó7‹ÙÖ0*heM#+]š‡(P‘âZä§NX«MkÛÞ«¶›W[«Ú“ùj­4A®U­ÖÔöGöàjð4yÞ~9t¡kšÃñÐyŠ½5A¾œç5A"\ä¡´vÅWZX›ÃúŠhOF­½‘Å’ù^Aô–ä~K1Ã0Ãx5•)ñ~1–‚ð½že-fB$dTI#Â‰I Ô:ðvç5²FŒ¬§¬mS{ ·+kÕ
ê†µEÖÈþPˆÀÉg ™IÄçK
x¿þ”I‹ãDQ³%R0îšWr9I+$î•2ÞJ&\•œH°åœ1aíì×{>þqÏ¿ñËÀÝ¯ìjÿzäjÍ¹ºš>ÖÛÕ~VVû‚Î,wo kÒyt]ß:$ÇXä¯O¹ºzó».Þ\aýÂ¶µZQX0º”7>ˆOÈí«9`Ä
k†a†aÏÙQ5¨; Þ#q„™
K‚ï›¦£‚[1"iÎõ.Æè]Àûðµ ¢†G²¶5
‡ÊjÏZ·nƒ¬3—›F!áih€=e…"–ãÇwÔY¤±ÈÀ´QÝLb )¸dÆËšŽ¿F‰üúÂ×9AÖF¾AÄoâ2¦2<Níÿk‡—­n½¬häWƒ©­UÑ"8lXÃA_U1Û†èËäÿìAn¹†Ç“ŒòF&@¼ð¦Ñ€Ð`w\5¸àŽ«¸¸éè9Á[eæ"¹€Ï2Ç˜í«¿JmÚBwM‰õµD²ÙÎÈ›|Sä_0¶vˆc©”ÙZ¬ý\º	’eMlíFæ%gDòD fok7laebf;±µÝÜéëï­°f†a†qKÌÚ„™$¨ðx€'¤ùP"ËZã"¥Çm¸ Ñv²@$é"²–(Œ'w~dm[(*ë²¦R BÀSß,[î&Æf˜ØÔ†ˆ²B¡i"ËÚ«ë9˜ÅÕRæ¶)—yé?Ž~	ùÀ‹Y<Y¤eM‚«ñÌŒ©d"!â2AÖ²$mÐ|–Ú_M¸ÚWÝyöÂK|®®&½°W"ûk
dÝ©ì_0µ{½6ÒE¸¢&|çý^Jk¥¦I¥äb› BºˆÊÚÂ©625[¤–ÓôyºQ[{‰•ß­7&Ü†a†a—œ¨B7ì™.XbEÌ-Žnl‚óÓ’(¢¢ö(kâhÃè¼ÖüPk§#kí‚\‘µéyÞ «Ú84-Ó»/ùõ­KÞ_La]óÃ¯×ÔdM53¶82\a;0G$õ—(’ìÂ¯¿0ã·€1Çt`æ’‰‰ÁI39ù[}Õ¤ÍX©k¬êòy{µ¿¿Jòa¨[ ×c_S[	í2UîëŠm»®]ã‰×C"¨BÖbí‡§‹¨¬ínÏ®’û%Ç×ª¬-ƒÌ§H¼u·“ ÿ×»·º	ÒbûÃ0Ã0.q	XCñ‘æ¢P‚K9S¦!Hr?büI2`i ä¨cÃ8úèó$_ÄuY{X™^Jƒ¬¶ÖÖF^ò&»¾q!!:¾ãåC@Ù	!‰®¤k’µ‰²vK£¢	"HÜ„!eYËËƒX[ô+¾ç›”ñv¦ÀŽåX %¸ÞÉeËÏÛ	"ÕËÖyx^Œ«|þS\íË!'ïÖs kÛ»sOSSûV®Èý·N¬ÝÉØvÝþNtí®í"…ÎSâG+¬ýðt‘ºý‘gž^#3ð± Ž&ÓBMð—êÚýÖ yp5K1Ã0Ã¸„efr.RÎ)3¹('¿‚‹I½,Â„¼óZ]ÓA!&TÒ–²–zdm…3kÿ«²¶VÁáeÍ±BžÆ0ŽÒy,¢æäà1’s?_¬½úä‚´VCOÂ“z‚ETÖ´;¶rœC,Gä¼HWì\(,çLÉ§Œ-¬=K‚|X—°ÊŠ–ml¸Ú_êj[Ù"ýãq5}Tžfö·+¢öraí®m†±o÷w{¦oBr­£Ó«É|7ïþQ‹µIÙa;£Èš´WÃˆ»ÅÌ0+Xc7~“ºÚng› Ã0Ã0.àÕÇ‚E„TxŠw	VA)Fiˆ­Ýà¢vVÃ¥+½‰Î”¹TÒôZé²VR­lƒÜ>³3èÇ~yÂZ?ðÏBO~äYÃ2È_5:‡eæjþe›ÜèH|‹=Ö`Å³6ÅÆ¶GÔ×fØš¨r‰$GgÜòåE¶LQ
tpµœ‹Šð¶ý¾;òÇsC«o[\m~RWë¿•YQG“I¯í$Hž¶¸cAcClyæ÷M]H­ü¼m‚ü~~­› /D6=²›-2U0¬ª¬a…XÈßøEðVg5¬%ò½	·a†aÆÜJö TyØJŽ£Kr|bŠˆà£”B3Ž·UÖDÏ÷^4mq5j—µ­ÚÏ·û¬U1ÀÕ±íý¤eœÑAù8œ]|p¢o‘2QŠü>‹Ý^Mc"çòñËLøkÍP0–4²†€‘¯Ç™‡C.’üHYÂG t°ºcÖ}ú™G‘µ™kšY97ßjck¯l—áPß„«Qô®–Õ*Ïs !ÐUÕõ4}®ˆÚ²Ød?5Ý„„O×ßßOƒøwhœÕd~Bº¸YB!¡[(¬a„ƒ-š¦_KŒ¿Â¯‰ÝáŒ&Ü†a†a—Å‹@ÒÀ‘‡ÛõAaMKkÇ!‘§¾Øz0æ½w£¢–¦ó0Ô#k/7ÿÂíš¬	tM‡E¦®ïº:8tmÛÄèúÎŸHlÆóë„ý†ùöj#à#Ì¨¬eâÅ,Uµ‚HÌ2Ì\f; ·šÈ~0ä‹ªq”´‡œDm°áÕÂÚƒ>6¤ìAÇU7««zóY]3Á=–ÕžV:k$®³ÐþzmskUãï¿¿ŸØÂ'ö¶Fºùyo-Ö¾ŸWoþ™¬J—jÚÍtYct^LZN“/ã+äÞZ¬†a†a\Ê­dÈ3lsžÙ"Bø#“‰!Ò"kbk(³y¼Ñ5 “^ç]Ö¶÷ééc;`dÂ%<7ƒ~D$/×í÷O²?È;('ÊWFñR‚­±{á#LYú`ã&ëÑ<KN.sÑ-‘z²m.åX|cfË#IíTŽ_µh¹ÍÃÆfÈÍ@’êjç­°ÏUV”m3²&Œl‹lËÚ´—Àþèº}ëB3Èÿ4øhûç¾›_ß¬á„šÊ’ UÎjü£Þ/Ö0.Š†I.b¿DÃ0Ã0ŒKø€³SG‰(„9ÌÚÙƒ>	tšˆdÉ£¼"­°ÙÕ”ÅÔ–Y¬ýµE-ìlÊÃzemMÔ¦~ì$Â¿YÂ,&#»År
ÎGbòÇw×R¹¤`¾…U,Æ!-}°åøö9ÐûýÈ70g€ä9óÙC‹‰—Â2¦|ÔÂZýk3µ—‚F¶óH-Â¿§­°7Ï«á©Ö¦UÃõî7KkwÚ`Me­Cƒ(Hi
³m‚ü)é"•YÛÁ½ôY“DøuQ‘¦Øºy’±tÃ0Ã0Œ69Ê®¼æ/Ñð‘JÖœøGY£g¶†5\.†5WÃíj—µÍºÎ¦¬ggÖÚI¸˜Þùaz’ßOû4}Œ§€‘ˆ€‘ßß]Ë.È’BÌÈq,48t¦[;"ƒ³i¶ö•9Ìüx
ðW[ã×PNK$ÄúÃ[¨|ù…µ•¢åFâãU“±ÞüpY®v(„Í­ÈÚùiµIXËÑa»¿Úr1E5<öÝÐµ÷,kìãÚ­/»É6Aþðk5	òf‘µÝ
š%‚	Ot~Ô¹S
$_<òôþÃ0Ã0ã²]liÇ¥¶FÕ©Tfïdca:Ax0¹ÀK?>µµzÉ‘µyåÈÚVžüÃzeMHõU°jÂÐá•ºAƒ?N½§ìœ'Y{u…µÑ ¥äD™Â0x¯²&Ÿø\Ž ¶vÈÈÞÇ<Ê,Æ†–4bò<S”Ó‚™5¸n0}9Š…‡º¨óçÚ
ûid÷ü¸Ú£;÷íÊµ.²Å·¬ñÕvM¿‡¬¡MCJ>‘’m‚üYé";4ÄHí¿á³joÙÚÄÆMÄ­>!jq¿ýg÷f‘5k±f†a†q¡K #Â¦r@žJ
i>äÈ¸1ð¨ž†áYŸ"EqúONîyÐ#kg²¦RVý@ÇÍÊš2õª:°:Œcú‰çfb5hÜÐÈ±µ©si€È©\Mr?vA)E–’1ÄRBX?Mú¨°Â>È£ÈO"ki#/8¤þ“nAÍeé±¶–Y5l£œ¹ýÂÓöjãf$,m9®¶RZÓ‹Á°ZXÛ.«íïÀ=!{Vµ!¼.Z;ìŸ¶	rq5Q®ÝŽŸ7o¥¦ÆZ¦Ïš0¢Ô$Häúïn$ëŸ¿ÔÒEÃ0Ã0.Ü¤‡´øY*k,²	2!‘°d7ú óŠ‹¢é¥öFÑáõ1†à hKeÍù„–Ø+Áý›Q#«²6-hF|?Ž8©Ö÷-ûÁ}?úa?}¿ï›Ab!k×ñ£.S³qt±ƒqaeŒ{%”RðÑ³ªa(ˆŒT;ƒ8Ïñ²,ƒ\4™8D5¸~”l|º«!#5Z¤*t­«=ºZÎs QV«{ ÏÏ«í_<­ÆíšÀ¸ßÃÜÚ!Æfßüwÿþ‹ñãÓEnv7<,²&Õ±ÝÍQ!bgo™%g¯`ù¼1ö’×¯¶fé"†a†añë-»(Ã2ûAŒYN¬A.Òà `ž˜ÄÈˆ._ŒÁ²|MíÇ¬OÍÑ.kÛ
ñò™5­äHGmç\3µä@º®Ã!¶–Í4øà©TÖ®£rIl]RXCž«b7¿jgµ#4™=Ÿˆ)–¦²vDt>ú©1Ú;z¯ÖŒ¯©…µêé´‡—]YQW«­°A¯TUÚµójúÄµ]VÛÖ5…]=ß…ç¾scßî;hO¦ø	…5´V;Íll7¯™=[Ú©½ÖPHU7AaŸSeƒ¬ý×
k†a†anÒcE8 ¿Z‰ð¹ð"ls‰.Æà%…¤žbr1b ¥äžX[Vƒ‹ÈAùg=xP¢Në²¦ºöäÌZ?}ÕƒvÚ÷ëbã†Îb‰AÒý\n¯CÖ~O„p‘”Ñx\;§I%àoÒ9{Qõ‰7q¶,œ¢k™2yb"iWþõïÇÂÚCðP?Ó©²þÚYÓ„?e¤ºÚ¸Þ_mÙZÃ9+û'™ýV»«m×îï4ÜßsƒsÎ[ºÈ¿À«÷ÿ\Önv¯;ÛÇcUãôyžâÏ#‹´½·Âša†aÆEÜ~„°Y¸/ó\R$­Íf b$ZBûµ¹šFö;ÈC<ËÉµ%öÃFÿå—Ó '¥•Kb×J£Á97µ.…à•Sõ©”Ûë¨f|BM¼CckÑ1õ3¨§H:cK1€šÛ,{ñQçœg|‹£pÊöÒZX{©Ã†5?Ó±òyqµÈ®Ö¬ÕÕø¡´+ÇÕª­ËN«©¬ñ—"®ßuýþ¾ïZ^÷Z@0Ã'ûgþÏI©Ö&!»7,kŒnƒTmÃ$:VFøÔ·ü†jœ¥‹†a†a\ºIEµ£f–E”GâEN'bLu'$EŸx	WâoAÒDp?ÔÇjKìmGÛ>³6ñUIñ£ªÚÔŸöEòköSÌÈ<É<RÆ_ôãíul3Eï4¢ä!™_REäóÆÉ5þ¼‰fÑ³.§”ùdkêh”‹Œ0ÞKTÉQ>Ø!ÛNóÇ¸Upû¬®vdW‹«õ«çÕZZ}TU{9RÙn„Ýždm§–0¯†­¿ï†¡ûd› ¿ŸwÛyn=¯†x‘·OÛ¬aQ½¬®×K	dÍ6A†aüŸ½3ÆYÒðS·¶z¦gñÐè eÈ!ˆdH‹H#½´H»OP7X Oð¬š±ßt]à]b±knüEe=‚”V­TF|*2“¥ê fŒþ‘(Š¢¼vÈÚÃT$(¥d7¸˜`>!ÔÜ~©W¢¤@šÀ\pöÒÕêHìlXY-òÈµufÌÍw‹8‹ÎšV²Š¡k÷
~Þ¥ÃYÖ>_G$l‹÷á{C´Ê˜ìÆœüX ix“–ãSä$¶–‰Rh/O±‘Û_g¬­,7¾íõ¸‘ZWû'\-ÁÕeµ5k^í€ÄÏ³…µ»ý3yý#Ë-ý`›qì¡iƒícm‚|‡t‘¹¤Æw
‚¤€¦]LZ;ß/ªÍ²v¾ó'é®é"Š¢(Š¢(¯²vÈ…åáy`4o¬‰O¤¹¾°ƒ¬ùàñ\[s!øËNH„A¦š/R…¬ZÂ³mÎ4Uª©ÕÊ¶²FÆ}Û=A½a}&f4n~ûxY˜2"òA h(¢!ó‘¾uü`GÉýÆ‰·/ÂÐRR*´!ðœR¡Šå¿PXÛ41ÑàuþXþ—ÀæÏW³ËH¡Js-r®¶@¶¸^3`íŽeÿä»;ìQ]k¨pÚõ1(ß:m‚|Ç&È)¬êjÈ¤Û¬d´Î\º›p‹ÏÒ‡µ:ª(Š¢(ŠòÚ.HHZag8Ÿ‹*Üÿè0Ó:Í¢†ç¤~ö5oœ3óL5Ç²V_œ/ò°ÈyžÇµ¡Ø#Á7i¾ö|gø·ûÆuä6Ù½µmï½‰9¿}¸Ž3u>ˆ°3´’¦•©”ÙÌ`iTÔHÖ m!i9ŒÇ.)Ó§sÁÈ9ÂÕÿ¿ˆ‚ü£®k4‰Ù6äZW+ÕÕV‚ ke­_–Õx}¹®FÛ²†.Há~okÉÃ­·!ÆßuÄÚÛùø÷ŸU5ä@îv’0‚.È’±eÓ£ìÅâXét@ÒÓtEQEQ”×òùÛÃ¡¤éD àÃ-„ 3ÔJ‰‘{±Ì²Æ¦6;òy5ÏU6Ú^Y[æ‹,Ö*¸¶FØúvYÍ; _Ó¦o;7P-Ç$×[K6ã#ÿ¾~¸
.¥DènÀ½à€ j˜JF»ã‰#üåû‡Äá]ZQTC7d&HÏ¦â¹°ö²o«™På×¸Úÿ°«m×ÕúVR ÅÔh½–¶šyÿÿ9®&·½¸Ú~¤ÜÝ÷Öë¾ê_óßÎO5AÂÔHÔè’âÚŽn¥¦VCÁ¢˜†HN>LTÓEEQEQ^ßù0…t¼˜à%!µŸS-h‹ìA	I!ðoø¨gQ4ÜE$d-fŽÁxéì”°Ý_#ÅØ.ÙÏËØµý¸ßÆÛØ~ßÎ¡…3|¹Ž3ÉÑ'ÌPM;ÄXúH@ÍÈñçDÈ,²ötZRþ¡Çùp@$‚üCH4û²°öX7u@¶¬ÕË6åüÉ®ö W“ñjkAôZz-€ ½œ¹yw‡~°§§ÖŽ{˜½7Ö~×¿æ¿Ãˆ5ABûw¼Û!’´v+ReMsjœGÂŸúõWúÌí­6A*Š¢(Š¢¼:ý‚m–µ#~•ysÆp°’"‚šók´€µ({œ·>Æ‹>ÈÍ|‘—Ã	WF¤¤&KÕƒ3r)ˆ¶³Þ¢1rßx?´½é¾\G$š §h|œ¨€(ú‘Ûù[§ÈžPkƒŸÑÛ°µrž†’½›9[²©`ÉG—žöì\µÇç†f_ºZÓ4ke5 ÇÕ–ã°«¦‰©a©Ü_lÖ«j3O»}×´8ÁÖîG¡~)häÛù€&ÈŸb‡`‘Ù‘­ÝÜÒùzÊé'd{©o˜‚ðHí‡°i¤¢(Š¢(ÊëÓ/NS‰¤'6²‡‰ý,Ó»2ZmÎë‡Š9¬ ŒõþiãèÝËikÆ%É,Ü¬«ÕMU7‡eä¸A(ÂÖ™flÅÖ¬ºÞ\@mø|]øÊÊ”ØˆÁ‘Ï aåøpÂÈ5Z+VF	ò/´r_df¦Cr.Hä‘»K×¾N\õ‹Þ(¼-…î‡¸Úá²²‹ºÚÜúüxµv³²¶ˆZ¥¥OÝØœFZ´	ò=G¬Ýìˆ›m‰Ikœ1"³°ÏÔ~Ù€[’µT×ˆÝ­VGEQEQ^Ë×Ó© Ûî$s¾Ž´ÒsBa-Ž‰ÇA) bÆ<%¶5#áün| üùÌÄ“Ô£UUÆêºÅâÌÑöµ¦s)j"k½iú¡ë»qßwl°Jç¿¾Š.È”sš¦œP0£BZž&’58[öéø@ïà]Îz>â«—ik….Y/Â=!e‰yþhÚã³OòšùwWë˜¾[¸Ëò2rNzÙ_ä@.=mÞmëÚÝ‚{ÎïïºqìmH)ý®ýsoçÃ§·ÈLpMŽ³¢h¼­gØn%U„>FûOTW#ÛûM[QEQå'º eBó”b9”‰"¹”3ÔÀ“øÀË<êdˆ{4ƒã*.îÑ™¹´æœ·—Éý5_ä‹x\=³æ k‹ÂÚ¸vRªßwÆzç;É62°Û»œC¸ŠäþÏß]ä,Ç‚ñ2T»ÒLË	¡œy*1fæsfÉ’4Âi/.fb:>/òøìó+n\{ ««-Ëj3í¸y\­ªÚÖ‘µ—MMØó¿°iÆý}§\¾è_óßkÄZŠ}#»Ûš/“=vâi²djŸv¼Ùýò¿~ú¤#ÖEQEQ~¦òÀ®vLÞ”ØÙÙ"98c0NÍªƒ.Çà‚w"k18ìB _Æ,Â cá|‘¯Í)üwYíSZ<Vf?«ZÓtÖ"Ž©‘Ö¥€Ã]Æç®#òKp<;£"'£ÛÄ‡×ðô Y;p`?ÄBƒ$“Ò$íæ ŸåÀÎ÷/òx(‚ûjû£<l±îjÝå,ìz\m~­ÃÚ¥¥Én‹»u[kœ‘ã¿7)åoÚ?÷v>~zhƒ¤žFÊ…¼eO›“ùé…¥Êß´KþÂU6rµ¦‹(Š¢(Š¢¼ž¯ÇcNd§âÑºèò4ÁÒ0¬ À0"VÝwð3º’7²‰aNq\S³aŸ\MòEGÖVóûëï°.+k£üË!Ì"	£õ†^Þ5<9›v½=UeFóå*J—RˆLí‡¥© óçÕèv,P2ºøî3R üNI(­•v. ¶?1¿œ¿Ö/…ö¯wŸâ&Ž·VW:aQVÃÖ9«¬áZ"¦öLfÿ-&a·ÔÙ`¾ùwýkþ;¦‹×»ƒ¬±§I5¯e$vp5*Å‰Ñ¡òVÓEEQEQ^Ï7ÔsD¬ó&!ÐâxH!rmmŒ-|÷6$y!ò*æö4cÍÊRóEVCEªG¼\Y›‡¬õ+xãàuÖ?tôØµMÎðoûÆ]ƒ¬}ü='"çD–	+Ôù8OXCÃã	²&aýè|$RÌ¦ Ì–ÉØJpŽ­8$´Iþ÷²¹ôqu»fÆK~üy™Ù¿Ò9.Î«-Œ¹WÛìÄz·,²qýÞõÈ‚lBvÐ$ÈwK© °[ãå—J²öäjsÒÈÍíìjt×tEQEQ”Ÿé‚¤OúÂh5èDŠ‘¦€!*†EdM\-³¢ºÀy	uÆ-À˜¦WŒn^=³VO¬õ+ÉxµñÃÐ6¸‘k;]Ê|®.Øðû—ëî?uãr*éDÙÈÝäøM|ý,nL9§Â¥5z‘š–µˆH[+/òcY®\VÛ6·eäÿ>3{”™ä+iœÕÖ^(¬IYm¿VU[³µýØXï†±ï{ïM£IßZX»¹Ab2û‰¹¬†EtS;"ç¡ÙÂoSEQEQ^ËW’ÇŒDH8C26ñ¯’œË%ËTµMÃ¬/chÏ¿Fxºù@Ödcj¾È²–&×ËgÖ`ó4ìêj‹äþ‘ä‚”­q$k´öcãñ1š!^Eˆà×”9’Ÿe¥M§64Ym8²&²†k¢'˜ÛñX
=ÓSJÁ»@Ät²öc{j]uß*oë¡.®»ZW]íL[ËjË ÈHp/5µíHñ5†>=Ö,þ3M{··Áiä_À‡ßÞÒ ‰æGœYCf‹Ú¯»YÄä&fÆH•m¾ ŸqÓtEQEQ”Ÿ9PEžÀÃ°Ñó…ˆÆ‘Là1†\XÎ"_¢jœ+â7ƒÉØ	0·èŒQ³v–µ˜ç|‘ê+ÎPÕbyf­[TÖúEa?ÒFÈ5 kÎ@Zë¼uW‘øþñ{Œ™«e8²v*‘6Çcžèk Nâh¨±ñ@JjL.z¥s²KÊµòçþX/½m×Õ‘ýøik+êZä3/W«Åµû}‹Üw1c2C£6Aþ|~C´ÚîÓî§Ö kp5¢Ê_loB»v69ü!5nEQEQ”Ÿé‚„A°­qr?¬@Ê?D*yN¡‹àó¯Íà‚7!úÁ˜ÁÚ[Ë¢&‹ä‹pjáFÞöÛUÖê‘5ù‘Û²ÝgQh‹[ï<ž:ï­õ¨¬]A¤sy*øîx®uH1’¬•ÓƒÈÚ‘Þ”£läo´0S!&YÃÛÓ„·’s‘•ïpÙY}·>oªq]k¶ÈUW›UmYXíìÊuÎÝ¢r]ÙÀve?Ä=»Ú8×Öö½7í¾éÆ¾kü7-É¼gl?mG²FìÈÛ–5±±‹aØ·ò¼5ÂF­“ÿù7EQEQåÕ|Í¥Nàx,Óé<,Ó»É$7òƒñO^6g`ñÂe!k5_dé‹ç•9k‡t–µþ²ïÒÚ~0]Ç;Ût´Œ¨ü5Ýpt_ƒeÊb¼åPh“ÙÎN"kä˜g_CÖ2"‘´•ñkxÁÖr,|e.¬=n–)_vc©¸‰«¦êjËkòóäÊKfWÛ®¬ÉºÕY¹çü,k}{7ÚnOž®Mï›.S#_»!heWƒ¬ÑK¬L´¬jšÜ«®Ñ)“äïš.¢(Š¢(Šòz> °† œZCøE,ÈŠç`‘Ó“¬áÂOD°V²Ež±f¼xš`­å»	ƒ„Vl•|°“kÁ? kRY“ÂÚ†.ô­mš‘@2dcXŒ³ufüþù
úL£‹¥ð7P(±zqd¿ÈÒù¥˜&‰´)¹ˆ¸ñ;¨º‰ÛQsÙv±zrMV¹d[åÇÂÕÖdÔƒrË\‘-e#pÛàŽ_³­µûó–$íÿØ;›É‘$ŒvfÙ5M‘T5T-r#B¸à+áßùÊÁ×6:Aœ¡OÐ«ì¾H^ .0—ècL-Ç>3)=pÂ™šÈ‚ØØý¸”ÑÌ½é‡™öÔ®o§~Ô&È›¦‹Ü¡òNêkp5´?¾_‹k«£ñ‘y†ÔÜîvš.¢(Š¢(Šr]Ê9œJH®ðrŒ3ÂqÝ#µföãÀk†Í°: ®?#98%_$æ|‘‚º`•µI¶MÏÄ>w‚³Ý²Ö›± .Øq´•µÛ÷™b¾ÚQK1Eë"ªd”‰XÙ³ÈÝ–4c…-j‰eÀœì„&ÊˆÖ†@|âx‘²JöÃd‰Û\­–YŽW«lX»¤jO¹²V•µœ-RÒMýÔM#Úl¿hIæÆé"ôÁ6íßád[Û„Œ>|‡aŸÓtEQEQ”kùŒÑÌ\m¡ÏË	S½¸÷n^’÷âd9´?„'#óØ½ÆMò¶‰«ñ¥È)CD2å›RÖÖÊÚ…4ÈNÎf4Þ:Ó´B)ÌH~×Øè•¬Ý>¸¶]àþÆ WCj?d)#CãÞG°ÐzÁ+¸šôMò˜6o--©°Vp!mù7ÎrÏüÅ¿2¹ÚžÉ;s¨AgóÕJO«4A–Ò†£"j¸•ð«Žd­;ø×ÂÚOàCQX»ºÈö+dMØÉêáaËî|Ûïðˆ±ÿ¨­¬Š¢(Š¢(WuAÂ`¨®±:¤á
ôŠ»‰˜[ åâAáŠ”ÍY“·©má"*kœ/R„Afw(» ÏfY#òŒ¯Bä>a¤›õ®°QÍ˜fh›Mo,díæ]1qdðé(fƒ‹á÷–øG~L1$ÎøëÂÂÌq#‘cEP]K°cÉíÏ²ö­ YŸc—› ÅÕ‚E]­¹8gž…]xrW›®ö”?Õh‘mYklC´QG¬Ý4]$‡÷“ªÔIîµÃI{Öˆ5‚CwÜ É_£'Ü5]DQEQåy$ó’pÃ–5ºÆ0Ã×Ž<û:.‚.bÍˆðG‹'““úéž9Œk¤xE…jqíï³€‘¬jeyçÕú©7ÎŒSèÍØ:Gzo/kï~ç\‘Õ5‘µ5M„n¨­AÔ¸ótYƒ§AØjœ‰‚u>Å¯çHp¼ˆtAf«ÇµÔ{ Ú/®f*=«§]¬iþPaí‰Žº¬áÌtSû´ÞqN½6AÞ6]äîn•5Bdíì¼RS+w¬­/iˆ6mW{ µ¦‹(Š¢(Š¢\ÅçgpœhÄIÖ`!u ÛÒâ+,k‰"!2,k›«Ñ™¬Å	ŠZÝÙrdŠêÎ4dY k?Ò†©k|ÓÆ¾š©wÆøÇÛoYKœÓ¼H)…Lú!k€ìàòæ‘«ñhr¤,)Æã1X"¤‚‡ßŸø{M€¿ÉQ¼»Ü|Ê®öÂ®–ÃEŠºš0\¯–e¹¾cËúvµRÖ¦IÆ­=aMgs°ÚyÓtXÚÝz»ÛQ5”í½Ë^ça‹­ñR®ûuîÚ¯;”×ðVÓEEQEQ®áúÀåê‚dSC…'Í‰@€¡Ò™­Ež«f<Ö’9šðÂä|‘"²ˆš/ÞµAz®ïä)_S-6~K¹Ì¾Mkúçœw·ÿ¯ýO<¥²mB§ö¿ ¤Æ+Žâô&’«fŽ€Œ>‘4Ó‰j>&^ù’p1güÂG?VW›+®&Íó\¹gSã˜Zz$}partßwëºkÉÖºF› oYXÈë_ía¿Gp.ª÷BŽÈíñx÷ë~MùMÿ-*Š¢(Š¢\Ãã3#ä"‡0xÄYÌ˜FDZÓ'H¤³‚t>ø æ–e­hƒDd:Ê@0PøZI9«9ËšPîYëÖ£P…©^õ­±ÁÞ\Öî¿È8Ç¸VÖØÔÖD‘Y|'ë[ôÐ:·–,ÙZ„6Go=ÿ+@…-Î¥ ÿUU³üí{Yájß_Ns¬¸ÚD¬¶&—2ÖE>õ¢>UW»H×öM·­§
lÚyãÂš×8Zä±ái»r±b 6ž7YC1w|[þ®é"Š¢(Š¢(×p.Èå©­ÍiYæ%º0¯²æ­ã1ÌiƒÆ ­ß„×ýk››•¶Æ²–Ã k}õ4Èïg•µ¶‰Chái‡¶kÓjm}c¼3þñöÁýž”+xHÍ(°ŸÅìy™Y×8‹5k$…™.wJF›Ž	©Áç°yVËšÙRCt¬òBn[ä?UWƒ¬á(s …RÔ®¨¬eÊ]kuP¶Oƒ6Aþ~{Û~5äõ¯{ÖÞ£VF7´ÍÊ€¸›°>¢Ç/ÿ¥…5EQEQ”k³ OÑ£ŽÆ[¢b˜9*>®aÈ¶ˆ¿d¶š±AÖÑÛñ<­ÿœ22S‰×¾ÊZQX#È¹ñtdcû¶?7];Œ!8gmx¼uírIäY	¿TD$¹qZ8š‡pÚ6³ÑŸbâÔ~ì]ãR'÷¡Ò÷£}Í‚ÌÅÊŠóVþ^¸Ú}vµ!“C ‰ÂÕŠd‘zaík½°V‘5úgÎ:m‚ü|xKI¥= rU4ÈšÔ×`cg²†¥¼÷»=œ¦‹(Š¢(Š¢\ÇÎµ@šHH§S
>r¹¶6ò3nÎ…@ÞZ“=í|Åa9_¤s‘©UÖÄ²¬õC+”ÅÆ˜¾m›ìˆ9k):cmøtëÚ%ÿždÃÉÇ´I?vZ h69€$EFŸx)H!Î)n{×8òßþQT+‹¹ØõQv9´_†a×ëjÛŽ£h@ýÑÊZ-Y„>5`rø ¥6Aþî?¾!	—;ÈEöïP+#{à)j»»ªg04zÎû×ø¶“Äþ½6A*Š¢(Š¢¼­òÄÉƒ1RÑg	>ÌKâVÈÓ"[Òâ
-½}N´f½è›S£+p¾ƒ,£â+kbk‡aeÈUbúf4MÛ!8Z4Î[çŒóŸnÜÏÛ qÌiF|?m9‘(-ÈÁÉ^N2›|öa9~³pi3Á­•Ÿô¼Xù­	™÷´ñ¢°F¡ýäj®âje=3ÓéZI.ªÉyò±Š¦uôàÐ4--µ	òÆé" »‡-^d¿a0ýZ7WÃAì j€uÄš¢(Š¢(ÊÕ&ñ_ÀÔåù"É™€l‘ãÂØ8¨@ÊëñàýšéðÞ¥­eY“,ŒL–ˆz$ø»)«;âÃ@«‰c ÆgÍÐµc0ôÐOƒÿþÆ­tLÉýËifÏ´â1ØÆ¬ÑÏŽKn…<ÎËBßZDÖp‰H]µÚY¦&ÄÛ€5vµ¦’-"jŒ_ørYv%°.9k¶Vqµ–l­mÛ¾Ç‰îŸ~QÞÎ»7†‹»Iî'ŠäÇýêkx/¯é¾eFîµ<ª(Š¢(ŠrHÈŽÁGN¸ˆãˆÐÁ@^‘Ž§¶¬~Zˆ—á¨YÅàqZ3žqÈw„AfY+M­Žd²¬¹µ²ÍÃ™™Ž©Ÿè6q1Æ˜Æyïú®›¼kŒ:Œf31ÜVÖî?‰¬¤htÁ¹ˆzÙÂ3È%µŸw°×!ló|<J„ÿ‰³G"OYÖÂ“ÑYøo–Þúxv¯‡ö§àÌ¡¹0`¦ˆ)l\*­ññTí”ë%]k'¼ÆfhÆ~ø¢Ö~÷H¹‰„©q¤ÈYXŽé'°Êl»Ø`k:bMQEQå-&q\B‚D,‡%ÚÑ¤cò~9’`¤Àù!H ”Òšœtuäb6H‘ëjY×Ê0HÉ)­ö¢lƒYc.e&º0­q¦GemêºÁa\ßÉ…Ïïn[»äp‘˜'‚2æì]8ýoƒªI¢ýA
k¸Ë+¤’@ÖèudGvÎFl_[^¸²p´:å@»³Ðþ`ájMYW{B~nÇÿß|µjI”ª†B×á+ýx˜Z*Œjä­ÒEJ[»CélÜå9k²k­”5–9|&®}üEQEQE¹v?Õq&)xfŽi4Ö'ö´´,‰½ÌŽgé.‘ÙÖœÛ¬3ìe¸–»†AVì!K„¥P|É•µÍä²#®Ö6Æ83š=Óšd²Ç¨Æcn›Rñ!Íü³%ÌX/³‹//(™m]GºÒÃ‰Ki+²ÏíxÂ
Ë%YÈ­.L/—å|9®VïdDÕ¦ËóÕhYÍ¬¹‹V¥¬eÚ©?ôÝS;häÍkÂÉÚ±;ÈÚ2¶ßfª‰¡	²ÞŠnT“Ûi¤¢(Š¢(Ê•| ùÊÏËjd>‘¢‘#,1Ðef_VÚ ½äôãŠAC+ÂŽDÁA>Ed‡Kƒ,*k¹Ê3õÍp–I ²kzÝ˜žéq›¶ÍôÔ¾Ü2Œîþq+¬m²öËLf®aÁ²
j9h	’3^Æ´@Ø<œ9¦ê,„¿JQÃ½ A®á"ÿc¿+kWÎVW+³ QOãë:»ï§îë4jäík9’³ ¡_»ÍØöYÖèš åÍºÚkºˆ¢(Š¢(Êõ]¨í,iy³õè†Œnf¾²­yhYDº…5\Q‹¢hNr 8Î?ÎJ.”2P½T+»Ie­”504=Ù¦ÑôÍHË–ã [3`1õÆ:ZÝVÖ>Ïøç›ÒžÙÎR˜©²†H<Rˆ¿ä‹ðdµWUÃjÕ´éš‚gâ\fABÓ~€oÃE.¹Ú@Þ"8”MRN“ërYí²°}åK	emêx×ZÛ£&Ú[m‚ü¼»>¶¿,¯	lj8‰}V´uQÛ^3uß¡¢(ÊÙ;›Ü8n&GŽ XJ¶h¡M£Æ€ÝôªÁw\àzÀO07àC¹ˆ.àä>Æ·ýê­šb9³©gú‡ÝQœx¼ñƒ*¾¥(ŠòÓ]TÓÉôa‰KÄŽ)”Ö2lmŸS‚®ÙÉpQmb‘5ÆÊ}>UX«Ã ¿µú Ë‡PÉZ±5=+Ã±r4`†Ér¶‘,džv}‡”Ù\t*öÝ—è¼ŒWKTI#]ËiOwR´gÚª†Êù²°‡Ò%(›Ø’TÖR@ð¿ÅÍXf!´Bûëìþ¢iìu[¸ÈÖYgö×‘ý¸^Ç@ÖªV–N3ðVµa‡G,Y¹g‡ý|@lÿ r[¡¢vÃ¶&leâhåÎ3³q[»ÕtEQEQ”Ÿå¢@'sH	ñ	^é$ÍN“ã»W#œ9Jš¯º°6‹¬É«J%Úˆ\YË§*k…uœGTa&c­1v‡[7;CO]ß;ä¥˜%^RÖî#zH#¬+e†½?ÐñOƒº=mýxŸ£˜r¢5þæŒÈH$h_:Ô³j%Ã­\íï-\äTaŸ-\¤–PWkîYkæõŸÖµ¡_ºÐõqÀÏìÛiä…k@&bo¥5LÃ¾"]ûÈ}R;ãîXã»œÖEQEQÎàYk8H‚<Òú£÷™;)»ÉºB9 h.àíÄ8—¢huaÍ ¹Ÿcæ:†[sÛ?,kže­¸Žb;3ÜiàjÖöÃhælÖÓÐ»¸t“éþÃMyÃ÷3ø’DÄÕ^æ«å—P‚®ïÅ˜aÉG DW¶¬µ½¬=aÖ8\$,fšOç@ÖÂ Wþ4<´› K’HÍ#4‹jØ¸6¬³™5	òÂ…µŒMu5âúØÉB†ƒy]Y#6Y»½ûEQEQEù9~ý¼G$³EFï¼Gi–){³„”ËZˆHAÈÅ–èYÎG“ª›4¬„A~û/Ó›¿Š¬5¢ûÅ¸°g–ÝÐw<M¹3Ö¬CG—‹éÓ‡~Å,k°5è·9Ê7QØ’		2½eWCë©¸[¦+=GÞ¨ÆS"±¯» qª—%uDî%µ¿„‹€±Ú°vÚEÔZ©ýEØ²ö I§Q#†u7Ý¼®Úyùt‘«í.SÖ8’F>A#ÄÚ^Ä–Zkºˆ¢(Š¢(ÊÏs¿Ïˆâ8ÂÈ1q’…	±ìe1:Y£ÃY’7Ü	$Ž˜É8GWQ4aS¶’ÜÿõkUFk™…,Úmc‘‡‡€ÒšŒ1v™éåÚò52ÅiÅ­>ï/ø7ÿ»bFvâŽSI|D)3ïŸ‰è“ÔÖ²4>Æ$CÖöxH‰#û}Hc8CL±tA6âCÄÐšÈ†µv¸è·o4\­1û(kª-äŸ;³ôÃ8®iEæâ±ýW¯dí†ÎëZÞ~¼¹S££šªÆâV"‰?µ—UQEQå§ùDé"¤j‡LÆ&ÕžRòpµà¹ïÑà7Ây/ÎæÃ–ào¡ft–êš,«äþÿšùµÈZ•w±•Õ°’ž¼S¹5#Œ›Æã±Çè|ÚþpÉ-kiŸ½C©Rl]V¸>Å$®?ï	ÜdÍi)FsJÉ¹à­õôœPª,²Öª«ÉºµamýiW“Où®k5SÃQ«Úvk'‹à|‹avÂ­MïÃïgÖ„›ª©}¼æÈZ•}i?ßÞbÁWÜ©é"Š¢(Š¢(gµèQ=Œ!g6	: ¨¡¥$#°qüâpõ(¥¹ã+C–$I{	ƒ\¢Éý¸7^ãRÚ KÁ§Ø­º©Û¢û{4BÎÆ®XOÎ¬#=/ˆ…ìºÅûðù×ËmYK0¬à]É‹7WÃ÷hH®e² ÁÖpâºÁÓbJû„Mk¸„’YŠio†Bâ(ÖþÝ¦a¿UW«[ ÛUµÍÓøÖætíqÌ4ôƒ6A^4]¤‰P4Éì'>
äce£Ú&k ïÑ©ŒŠ¢(Š¢(?Í=×wž9cÖ—Dî½¶8zš!_pf›±f¬—ófë|”»Üä4¦$÷Å-Ú]…JÖªÈ‹qšvâj`5d†­-ÎÐO[ë–±Ç¤7ï$^,¸?Åã—óK]·”àkßsÈ” ²–¥²¿Éa±KLsçc•®	ªkXÔÔÖ8´¿]W«ÓE†íÒª«AÔpž!jêr}ß?ŒÚyéÂZ=bm‰ÍÖ¸²†óöªÄÆUî/ÏÚ©(Š¢(ŠrŸ ktî¥’ Ä‹ÀI„Éc¬¼­Èš·RP[i­óð zÈÚ\®%¹¿6¶Šöê?!µ°ÈZ•w1¬Ý4¯X0}gí´®´êHiÈÖf¸ä2©^î/ÿ÷ÜÏ9I$?ú™Ñ|šC‚¸aŽZB9‘-?ÄÀõ6¸Úâcô›I%²ÙVZÿ¼Ú°vJÖˆñe¶uaíV­º9˜ÜÞ:8ÏÃC¯MÌåkW$i¸]Óõ’†ÂLm‹{¼–ÒZ-kr×&HEQEQ”3øü3êj²™J!!kTÙI\TótIaU4ãÂb @vZ<"K%MŽR]Û’û‹[p*a{U-oÔ±Wd­—Oa7Íã¦ÜIK°³Þ;þ_t“ñœ¡¾Ü_Ì‡‘÷
¬b<›~S¤i\L“Ýk9³¬%X2à^ÔÈÂ©·¦ÒYº ¿•³ÊiF¶ÀÕhÂZô/®6V…µÆ@;QµS±ýÛ¢ÖìÿÁk»n6¦Ô&È÷á³]Ñ"|Ç…c !kìj-B[|?^á¸þCkŠ¢(Š¢(ç´èHòž¬Á8º?øÄµ[‘5ÂY„‰k&»8GOVF¬‰š¶GIîG!èí9Ø§øçTeaGéËãd¦,w‹w‹u!úÝÐ!³i)÷—î¹¸©¾ìäÂ÷œ¡nH”mOäíš¶´ÿ}6ätŒèlwAŠ”µ¾Ø2aí)¡	².«­ÌøzöÚØ¯Öâ¶Öâ¡ÈœÈÚ<íÆuÖ&ÈwáîÏw®Æ\a%Á"×âb›žÉª*­Ñ‰¢›þ1*Š¢(Š¢œÁ'$öÃ× 6®QY-¢ÏOXð¾5¤cx,B3ÎÇ7v!OC:!êjB	)Iî/… #%ñâa¥²¸ZaØnÀXì¬Œó®ë‚÷vv–‡yÇxÿáb[Ö ¶­±†==KÓiH0·}æÿ„¯_2!_ eò>á0ô.{2d_gAþ ´}«&¬™7ëj…*	²PÕÖZ®VT¬Iù‰¾ëÆaÔ&È÷®v&W4û¥Èv®¯¶]j’/ÂæV(Qþ·š.¢(Š¢(ŠrÞ–µïß©)²r>ä%dÙO•­RHlkÖxgÝâìrÈïG4¤1ÅÓ
åÙVÉýlhíf=Y\ØÞ³†cÀ•.ô3z"±FÙÏö½³Ö˜yìxËZ¸Ø µ{ô3b–uÎÕ8Æå Mã8ÈÃ3‘¡dYš$9½?ã‘ü,ˆ1‡˜¥rñ	±IÖª ÇÚ{eÏ_=®VRûkW½uÀˆHZ¹žæ±¢­kmûn|øKÿ’ñt‘"k7WTTûGb7×¤kÛ†µ2Yí5üŽ¸Ö&HEQEQ”ó‚ûŸ¿biÀeŸ›Ï÷Ê\üAAC²mpÓBvF— þÎ÷bf¦(Ú«ÊšAr‘µ7ŠAµµ•ÊZW\­*öˆF`µÎÝÀ¬’FÆÙâ?¿Œëcpþb²ö	²2
—O5AŽoü™XÁÕ0o-KŠ
q€¬ÅÈ’‰,ÈH™ÿûßgó+l¿ýú•&¬qjÿ)W“¾ã³°qKkÖZ<ðåGé­6A¾Þ%¶ÿJNˆ"ïZ»ºÙJj×¬l¸TÎ†'MQEQE9‡{*ò|†ªÇz¥£_üþ}ˆœoAW–3çÉ9Ù€ÎÐÊ–JZY”›±.d’‹ºkï[Q²v*F‘5ÓYw#=Âq1ö$kf×Óe2fY¦qrŽ3AÖ.âÃ5œÒl
M#É£ÕðR’ú3´Ø;Ò4NìGe-AÖ"â^p$·¸©òÄ÷ù¦²Õ©ýÅÕêH:Jù²
ìÇÙ¦åj?
ýêTY[wÚyùÂZ½kdž&óÕn~»Ýú EÔ@¹cIü©õQEQEQ”søÄ9ò°ÇÌ²†2ˆ°²DŽ ¶f¹€æðôd1ðþdx¿)Éý-E“·Ñ€¬=eoNUÖè³vs‘5<vÝÎ=ýw-šf1ãˆaoÑûMÅ¾ÿŽtJð£¸Úá€¦açƒõS_$ÎÃÛb,È!‰#)°¬IdýÝÕSÅËY(©ýs×U‘ýíH IÃàv*
òa8g¾ý|²6käek5WÜùxH^¼Œm­FÌMë£Š¢(Š¢(çðá3I8@×b>$"F63)¨X=ygÃ$lèÄ~¯&f¦»™«Òš$÷?7ò0Ö^ï²â=ké•¬É!ÀÖFÜŽ¬f±ÖØn7­ô@.²ëHÖúaFã¦õŸï.ãÃœÁO¤œÙÖˆgÌJàÚ½ßç<<CÛ¢á$âièÝ6]¥U`‹<Ô«º§ê‹ÔþejìW‹ªá¬ç«álÐHí‡…áx›GüêlkƒŽÃ¾Xl[ÖèsÃÓÕÄÕ°døUñ³×üñ‹¢(Š¢(Šr÷‡­7/…DŠ:,ké)‹1àêÿèàgÆy¿\$H“,3›¬/l7AâÜ(²&®6VÍy²82Úe±œO9öc‡×³ECdçcX&ÿåî2>Å»Pƒ¬w©Ñ·#ùYzúŽ¹		‰»O_»ŠœÖg­LÄnwA¶WûÖJä®*¬•ï¸¦¤ö÷§·«g‹à£àþÿ³wÆ¸äJ^{¿Ñ¼Å``˜œ44Œn	`$tÀŒÆ&<.ðŸ`#{.âÌösŒ—¾ú«º—·ù<†k‚ú,³Ù’ëmGªøWßjäiøð¯SqX‘k–µÙÕ@!k…­­4]DQEQå(n¸+O: ‘cácrˆÁ†ö–¬YëxàZ–µe¶å˜µYÐžëå›ùÌÚŽ(ÊjóMx*ö@´?n;ŠY·év}çPtw_ÎÜÄÕˆ”p‘P—1…‘ÖQ\9¡°ÆÝ !Ò½7Æ"ÓÖùô”Ý|/D·Üçºå·œÚ¿.‚Ç[²“ªZUÕî«UµÜ ‰•àåuÚ]ßkäi¸üýšFÈ©µR¶÷CÎýó°æ,HMQEQE9Ž[äNÑù¸c‚£…às~Æñb;Ø™u7ÜIÖÅÒZ³ögÅÏìâ¹8³ößIÖ²I”Ì²ÖÒW70†tm°›uÛ¸àºfãâY­}‘Ø"kÜú˜V£¾GZÆ¸—¿Á~d¸çQªkœàŸ<Ê‚xúiôÆú©²ô4Üû¬Ç9	RRû› {Ž!Ömu¼¨×Õ²¯Y_G› OÆ§Se‹ðæyÓµ{Új•eíŸSÖ®?ÿ¦(Š¢(Š¢Ã‡»q/¶‡†ô”bBdbg²fàhŠ<¨¦©´Ítü*+kcÖJžL­¢rµÃ6È…Æ¼ÃÊÚžF#ÆL×!Ò†` lç‰ƒ¼Icœm-Å‘¬˜îIÚ¦§>†‘à0HèZø¡}’LZ£µÓŸ!¦`-©/ÇµÓ¯«óÅ9µ¿Û>€"]„˜\M^‡ªV;±v?_A]×ÞDó›òËÖ8°_Škt¹Z‰¨‰ Ñ—ße¦ÛÏÚ©(Š¢(Šrlp¿XŸ\Mçcâ9Ìh¾Ëä›3p4ïq!	òÎbwHNá¥£‚¬ýYŸ‰] Ÿ+kO"kp5q‰LQòéIÎ¶m»AÌˆ³´ÐíàBˆ®o›ód÷_Þ¦@¤eÁ§‘OÃú4F)¹Ñ‹Ï«E24ÚŠÁ…àPLljpåJpµr&§öÃ·›…Èr2‚ÐZñ[k°4^ß¢k­6Až·°VrA’ÆÅµ+²¶ZÁÉ ;[YWÓtEQEQ”S@±)…0,kÞ8çOZœ´–…5q4ñ0ÎY2¢¢¦&l¡lÛbÌZ%¯°LíÏw³¬¶Af8øšY÷n¶ò[vÝ²æCôM»µá²öé.% ¢®{x—Öˆ}Ì¥µ1Ñ’| ¿"b8Ñ‰%o­ËÁý…ŸUüsºÈÜ¹-ëj€MKiÃB\‰]£~\­Ž6Ažˆˆí?!×+Aï#Âžu-Ÿ\ËÐç:bMQEQåXn‘ùƒ"ãYƒ³žÄj|älÞ óµ,kÎYÌW3ÞÑÖl2ÙØàjL³vHÙÁ÷¼èmee­ˆ”…«5MÓÑŒ5Úm,â8†M³ÞZ‘µñ·—gè‚œ†¥yŸ¸zÆCÓ¸ót–µ8âýág(lÆÈE6–5‹_>%ïc\ßŒùi.M¬+öÅ8ìÜ¹4a­‡ª•7?b,• ÈvQÓðýfÖÚyþyØeÄŸ\›JjXç8faØn4]DQEQåH>!²Ÿóã!kP8DŠt½‹x#B×‚106Ž‘è~ì¬G>aajX™r&ök!ó•Ï¿mkbW–ÖÌ\køš”ôˆnc»fÓÎS!œcÐÚmˆ	Žp4ÌYÃ:†NyöRUãÃ‚ô3 M¶¹ïŸDï]½²þüÊqØ’Y‚,|­Ú™©ª–·›6Aþb…5xVºB×è{õ‘m,WÕJè=-¬)Š¢(Š¢ÍøÂËèBÂXf¸šÈÚ>z$ÈÓËgwÝ”ûhŒ‘yÊ^L¶X0Qóeå,×ÕŠ·^9³F_BËë¡H¬IB6CGÐUë¹ÒÖmpjÍùã­]BÖÏØÈFŒHOi”šZˆ´… OÊÆ¢Ì»äö!Žoè‚<x÷QÒE’ ¥¦–Ÿn!jÙ‡a»/&¬á²yÿ6WÓk¿\a1Ì
AÓ95Ž„…¦Í…6mfUEQE9–[2†/¤‘y¨A9Œ0˜ÁÁÒ<DÍxoÉÓ¦ò™±ƒñ“¬eºn:“Ç¬-Píå{®¶AÎã¿àl¬QdíakŒí¸fDÂè|€2…3Zûr7ÃNÔ1i66Õ4‰ý(à‘R‡Ã•ëi7)Zã<ÎÞM…µÇzˆ&Ö‚çœ.bºm¡je´–LÅÔ2¯„ö¿ÉÕèÜhAæÜ…µ:$j@ û!‹0HMQEQE9—wO“­AÒö¸ ¬}ˆˆÁHÎÎ)vchu¬³Þ¢|•ß)ŠlÛyÌdíñ@"žë{ù½ª¬í–‚
[ú¬Ýmú‰¦“¼~ž#ÝÑÛ8¾Æ¶½{Y»ñ>ËMÀ\5äºàíS±IH!M)þ(oÂÖ"]00! °öW>²VG>-ÓEìP6A²ª	ëOwI†×•ój¯eAâûçàŸn×_5îý4\¢°vb®ji¸Ê’™oPyÓ¿£¢(Š¢(Ê±|bY;Tˆ”Ð†çLHQæ­	A
l“†#ÍÖ’]e$d³VO~ÌõµçÊÆã²¬-V}H0hé{Ò´mÏ'×0lÍ„±Ãš<n°Æ¸3róþÅKï#ONc)“Çý‚‚FKÂ'/ÐäÈ›"ñ&]b
,ktÁÿ³6ì_º ¿W¬¼/ÊûÒE¤	²/{ g.Ÿnq$pa¼^§˜®Fÿ-Èš6AžŠO')¬É|5Ù^É™5°šŒlE#×<[ÓEEQEQŽç&>ýøQŸ„1F®ì¸ä¸ZðgÍTRsÃtCéhåý–dM²ækaÏØÔËBYÖ¸²Æ…ERá®§u÷ hGô]7cP^ëz*¬AsŒsƒKãÍå»/½OÂU4q5¶µ½Üà*·èƒ”‘k@2N#!Òm€«AÖÆ—ü0K¾×Žÿ6A6e]MžkÎ)—Ë“°sI­=>±ÿ¾¥ß~ºÕ&È_lö5æaË±ýRJ[]Ó"Ö&SË55áwý;*Š¢(Š¢Ííø"²ö41&ˆÅ!úŸPc3ˆë/Èåµ¼l7Å˜µ·¦AbûMÚ -dm¡´Öþ}}Øö²k{N‚$YpmšÍÆFOæÖØðþ²ö…d-FÔÖ lâgxÁÜ^øfzGbû™ˆ ’½@71ø@²f‘òr²f©du`¼ÒÙ-Ö„ÿ[WÃZêšP?®†¯Ÿ—5¸âýÚyþÂZÚY“ÊÚjrµØ° á–ákf¥GEQEQ”SY{Aož°—Æ¼1Ž{ßåk(®AÔ°²çÙj]¡iåµ­Èü¢LÀx.ó+M’“¬m¹²6Ç_ìšlzœY³ÆÚàt]p›ÝÆùxûáGÖ"¼|(Pâ7÷ReQÃ²Æ>'Ïg®±°Å<ac1emdÍÇÊ¸ºZ¾¦Ö¢3›¥ÂDi]Xky‘¯E^›°ö¶Èûuÿ°k·š x¾ÂZÔ×è2ŸXûÈH$-ü[kŠ¢(Š¢('¨úð)µý”x…’äÃ8úÁq(dô3ÖXZ6–àó`R?+MmÚgæ1kˆÄXæ»¼*ï²©È]üÓ û_ ”Æ:Ó¡ºfAÜˆ	¾ÛÖ½ÿ µ¯>€é{Ê¢ÅD’Æ;iBåKL/"|³ƒ¤BÚµµ -¥•:dváêˆµæa±¬–5­©ÍÂžøãèdqµ¦é×:û¬±ýuW»ººº>èƒ\ñœ5Ñ4, ouÄš¢(Š¢(Êi¸ŸqýF,‚à1_Á»¸Oº<ãlgh5Ø[µIÕ„ÂÚd#£©qÌJŠAKNVž¯WÖÊê³“ójëžãû‡	õMÓX3°»á¸±Æß}zïâ%«ËÚ(µK(Ú>$i”?À;[Jô)ž9yÖZädNÔÛâ@Øqd­œ/þê©?$ANé"MYWË£°¶°v?[ýÀxKj»kú¶ÕqØ§âòói3 ¯®	²ûç‘ØEä´ÑtEQEQ”Skf;£‘Øþi~FÈäÃ˜-ccòŒ3Æå˜ñ2yÉ7VaÞuP5‘5éÜ+²«ÁýÏee­Œ¿øûÌ>Üõ}ÛìvÍ¦i×H†lxZ7[ˆÎß}y÷)k>Dñ/Qã'A•mî‚Ä–>‘Èä]ÈLt'g¡Íœm¦)kA«ho5]d.ª-¥l¶r!°_ª¬Õ£EðÂB`}–~û¯ÚùkÖ.¨’„´íâb%²vEËDÞ|ÔÂš¢(ÊÿØ;c7r,OÛ‚¶eÛÀ8èD J*€Q¡fŒ0.0á	êsG²ã½C_ÀØKô1:Ù`ßÿ^US Exz¬Õ6ïS5ÉªöŒ…rôãïŠ¢(—ã-ª ‰ã cÕpÃ-FZPGš-x`­óÏ`v–k¥R+Ã ‹µ?êº¢ƒ3"+ÎZ	†4Èý~·#•¶o»-žµýŽÄZÓ;Ï‘Mï¹ñÊbíC$AGõKä0àLGùa_mj1%gC°Ðg’É:™NbÍ§cÜ_tú‰®§‹ì3k@\µ.¿ÙÂW«8kà'c …{ü{íµòõkË%$ÛjEBm5g÷Ïb­³&wš.¢(Š¢(Šòó¼¹#‘Às™crq*‚¤Û‡I«qçT"Ð,\žI³YxUY®	ùÏMž‰]jõ§r:Iƒ,§mON~¿'uxè[E¶½iöÝnádðÕzë­‹)\Y|då§…lµy¸vÖmcòPvPf{JÃS/bM²Zêmj%ÈÓÌÆZÑ¯Vè´Ì6p?ë¬É|kl/iY£/¦E¯ÊX›òúŸ£ Ñ¯&q´I,dDjl¿¢(Š¢(ÊÅª Æ”h‰!ŒG&…á=ââÓàmH´¥É[3Î;V„“@ÈÙWkä d“S‹bmž6½.CE¾ÔæƒIÃÕ¿NÊ AYÉÈdìmrënÓZÝ½ÛürQ6ÆxÝìþ7"ÖxÈ5*LÅÊÄÝ(ÁÖ1Å4rhD1¤·ÎZO±>pÀˆ“2‹µo?Ð¹'SÅ³±Vúj²&¸´,·5ªÝjŸþšµFa«ã°_•±v“7bIfÚíêfÁé"+Úè¶V©ZMQEQå"bm<¦”Äèy8‚‘ÕYLÞØLï£÷l¬9ü°AÕðÑ9oMÓˆD+…Z‹™Ø•9Î5Õñ•|¡1°X+30 (pšAÏ¥ŠtmC&©4b³ÝñÐ5gå»Ço®Û²#LÊ™#äp’‡	±öÜ?Dyv@
ÎzÚR/3D1Ö†#™”•¬–ZØ:Ö.b¥±–Ç`o­Õƒ ñÁ^/ƒ|9÷÷šù:;Ö Š ¡Ñ–KRhì©I¤ˆ3:ÌÜjºˆ¢(Š¢(ÊåZÖÆ!¹ É€¶[@’ýhwÎ´›XÜ Ži²¹VCŠµÖî³bQ§ÚƒgMÄÚa79kÝ©Z“Ã)xÐ˜¦m1ÛØÃ¦; aÍÐ×í½¿ö µhV †¥_€6‡8Jý£¼û!†4B©1°Ö<ß$ˆ5‚3Ep¿ð­ªuArlá«Ñ"j­«föW*Èª5‡}9Þ^2	?”Ý¿Z-èƒòGÑh·s!äjA¡±ýŠ¢(Š¢(—åŽr.¼‰g£dJ²ü½ƒP2
›vÆ™†±xléYŸÉRŸÝs(†”îå,ÉÉçòù)“Xkv¥³&Â‚–ïXã»cãÜ9þtß“Zq>ÄëZãàþ„×:r²ˆÔ>Ò’âˆ[†ž1B%OÖÚÑ^‡ÿÄ¹ÿsÄKWYQiùmÆÅöÛE³¯¶?ã¬e¹&Ké¬á?;`-£E¯ÒX»Yb‘x‘åBê!Ô`­k«B¬i¤§¢(Š¢(Ê%xóþééèOXÂ0õN!#…˜‚ƒHÃ¼`›	kàSQiräîüLlQuêíWâ¬ÅY«kŠR¬cú—¥/Ejm×™àúÞ…øñîúSÖR‚[6<Ç@²XK£AÒû%¸_vÄ÷sõ¤ÄrFÏÐÿH^åKÉœ.R6¬UÞ(>ÕYØ5µö)Kµ³}¯~Ìk4Ö0B-Äêvš‰m.{,ùíEQEQå¼ýðôô8NvZ¡F¶yRñsÿl]kXÀaúäx‘¼ò•ÅÚ¿g…ñ­*.êr#‹µsÊ‚cú±eö<»çÉØ{ÔjÒ¶†P³Æ…«Šµ»ÀÈTì„<$ˆ5‚Ga|+ˆ¬‹ø/è0ÆŽÎAªùs¾H6Õ°Wë eölß®weÃ®œY4‚M-·¿*Ö´òÿÍ›_/Ú¬F,ïGÛZƒ<+Ôþ£±ýŠ¢(Š¢(—âÝÃÓ#1kq`•)¬BÎI)"ØBœ5Ç ‹Ýª\)Ÿy“Ã	-fb“X+Fƒ}+~òs¹2EÏÚéLìî9¸pßòù™á'Ü¨Öì6;:ZãšCHÞ8gß_·e-“ÄYË=‚¸§‹Ý6(ä88†„g°×xH¶¤e­ªsË·7K]¤‹¬w¥­¶¯dö—ÆZ-ÂË9>InÿG¬ÑŸßkä«4ÖPÿ­†ik‹Ûå’%ÔçŠ”:MÓEEQEQ.Ù²öÈMT˜{Æ#iFLLqL!¤i:XðÎ›¾™"û…~öÕòGtZÉóLì¢g-SSr÷cgŸýnÓív›±æšu»>p^eËkÎ5G
¾mÞ_³
ãÕ®gÅD“H lx$-‰N|I*ç@Œ#±ù»‡ZÖÊ\Í3ï5ÿøúyš‡Ý~ç«åÏ3ÛìW‚Êˆ5K*"ûKÙnîµòõk7Ó¾\,……õß@Ÿq¸V¾ÑtEQEQ”ÿQËš”@‰‡{ñMò6lK>@-€èŒ›Åšë{Þk5YÊYkXæ«=Ì3±?ÿóETÒ %	#[@9²kûíÄfÝ˜†îöðÖXWzXmÎ¶64æŠÙýo1ÀÜ£6;j­Ò¿Æ–fôaH$Ö€¨7ïâ€C)qdÌeñ–ª|ÆË‹î$]¤;íWÛåõ–µûéÃ\.O‹ /È»\@R×yi<¯gk o5]DQEQåR-kÃQ¼5ÈH	>D‡ÉÍl­ô‰H¡uSÆˆuŽ÷¹_­,†™fkPYZ|Á.—œœçÇ™¯Y¬A«eNE×¶vAºØZK ß²ÇW1Ö5öŠÙýwqš['úKš,ã(q.„¼ÿã4›Á¿@d•Çõ¨29ËÞâ-É}^²ÐecÍÃXÛïW+ß¨|ê@]UQØ/§Ó"ÈWe¬•Zm±¸Yr¯AëB² K¡~ýEQEQE¹ï>Ô²öôô0ÒÅ€ëxŽÇdGˆ5ºœõDÈðØ\1R×k§b­î•¿ÌÊ­tÖ2ÛiÄÚ®ã¡Øû“˜Ã#à©á‹á‹3×Ëîƒ)kÒƒ6rŒ‹Ø—i€BŽXñ ð;6×â0ÁaþÄÀU˜²&-k/ðÕæyØýÉˆµyÀÚ¹$ÈMuÄÚ}¶ÖÎË4¬{-‚|•ÆÚr	¡FzŒµÅ$Õ$aÛbU˜kj¬)Š¢(Š¢\w’sAjí‘üµG4¬“µ¥€Þ5"ÊXlÁ;‰5Û7§MkE¤8k>–ãÛŸ—l¸ý|ÖYÛÒ•M ºÃ²o×Ø™}o¬u½éyÌu°YÏ‘Šî÷ë‰µ,ÖàQÆŒULµˆ.nÆ!Dpe6 o˜à|JÁJäé”µl¢ñU.`2ÖL³Þ•kr•cëæOêˆ5M‚ü»k7‹%É4: aMšAb‘‘Ø„¬8hºˆ¢(Š¢(Êyÿøô8Œk$E‚§Æ²!ëRýh{Ú÷ª±Hs8ZW–k™‰]–A~/-¾`/~S:kÝ©²À…'¦Ûãü|¿ozBFw;gÝÞAùD×ü~wµJÓ@¤.<aäÃ4Ðn
…~Í‰þÁóT¶Y¬¥ƒ|±7Æ¥#÷W$oÍX;¢cmWk³P+ûÕjR-ûj­[-‚|ÆÚÍ’Ä]d®,Î‹i 6­Y¢m¿©êVEQE¹XËÉ4.Ä#µ@þ	ãÕØ÷A,!Z¤zãÅV³V¸ÅHlc³'ZMö3rB#b£PjJË¨tÖ2ÙYºõzGÝ~‡ms0=>iºµó}·s8ãß_Ëæ¸“64¼X¼éÄMkä4Ì#±ÇÁkx„‡)¸Þ%ÌQ0&«ÞÊû+ð9c­còlµÂª¬Õ@
?èU»×"È¿“±&U”-±&ÖV¤ÖVÙO;e¥±ýŠ¢(Š¢(Ÿ²öôb:JÊüŸ4ˆX’7=D™|6½oÃÖ\®ƒ¬ŒÆ–Kœ5)Þ«K‹Ly[:ke¤H´¶%¹¶ÝìÖ‡Ã†|¶Vœ5cûmç|³éCðÆ†«‰µ<ü`˜ç`Ç(¶¯Ï‚4ƒ‚Ó ä>a“aÚÁû½´¬ÕæÕa©t¬Yk¥¯F=k•~µZ`?VºJ>=+6-‚ü[EAÞÜÜÀZ£uÉÆ‡÷cÂZvÖ2·Û¯(Š¢(ŠrÙ–5ˆµ#F{Ñ6plða€XCÏšiŒé!ˆI™¹À&«5ÓL|?m­tÖ†ï•¹!Í¾ä§àó©X«E’Œ£¿nÝA·­Y¬u;úÛs¦Û[ßo¶ëæàb°®e^~£Ä;ÊBºX2E&KM®òÛ¼µ!%ž†=Ðžè)K½àðïÓPQ½¯í+kO§ÆZYö«‰©Vji´œáÓÏ4¬ý—½3ÆÜÈÂðh¶![c¯!Œ°'DBƒMTVŠ‰Jê¼À&>Dã½ƒ.ÐØKè­`ƒ}ÿ{MÕ¨ÜåYËí† ¼dÙ#yd*™ÿ{ÿ[käk‚¼ºf¥FöÊ o ØVÒ©&‰¥ZÓtEQEQ”3ŽÄ¾§¦5–T9¡›j}Lç‹˜Öy7ÆhE "dƒLEk\kÏç­É¹@ßç‚ˆµ,)Ê6µ’º³&
#÷ªÉ!@¤5ƒÜ­á´A°5Öy×µãh·MÛn6µkï/¤‡cd›,ÑÉû,Ë±©±†n5?â+#Þð9/ü}Á9ë¸œR^dÝ_W½OQ›z¿ZYY£"ÔD§½<òîã;å•ÎX»¢ÈþoV+˜kPkŒT@òM)Ö¾ScMQEQå|#±ïwÜ¬†ë@[‚XcCš1™»Õ¼s~Ï•-¤t›\BnZ“%×AŠXó!OrÞWL PŠ¹¼egm9UµGadÃ:tÖç–YÍÝ€ie—´vËñ"‰Dµ‰¥ÆîÚ2›•TYŒ£éFÆZ3â{"þ µž$ZÖð"KuV¹b¬uÍ¦hX;Õ¯–_'–R©	§ÅÚ¢×´òmÍX»"¾§†´ŸVkú›TEQE9c¾›jäÚn†»­6¤b`ã5ÍXl¦…­ö,À_ì¸Œó‹µ*û|‚¼•ÎZÙ²–ÅÚ¥}ÇykÛ¾§Î5rÙ`®5Î´ÖB­µñ¦ï\ˆéÓ‡µ¬±X›#IˆAžÝQ·A²A³I¢ÿäýÓHl‹Xµ–0mÀÑƒkÿ*ÊºhCÇÚci¬e½¶=é¬ÑY–?¿Œ­Až‘?|sv®ÈRCÊÄÙ™c 3j¬)Š¢(Š¢œ9_d7s%äÌ2bžZALúBEhu~QkE®Èr_é[k±VŒÃõu~;ŠµíÉ–5ÜÑ²éÚ/‚€‘¦km×Ùn=8ö ­õÎÐÿFñÓí…¦ŽsZÈœðÚSRÿŒ=Å™³„ú´ü-£w£÷üû ÝÒ,ÁýU²hËÆZZŒµ§È%×Â]>ª±ýDE¬½ÈSûE‹ _·±® ÖÀj%ÆšXË
-ß«ZMQEQå|Ü><’§_Q"0B@¬á~¤J»'ò(lQiBW:kôióWïUø\íÇš5Cbí™¾À‚m‘ÖµzB~ÿ¦i1\ÁýívÛØ§v»Î:k/#ÖB”þD1K$1Ë<ì8Nt9c$qž"~|qdà—PˆjÆR¬e½‹³DbûÙöOE¸$’ŽòUâ`Ö¥L;ÞVxI²?-‚|½ÆÚÕÕ0Bbm‘hØÀ“­&@ÓEEQEQÎÊíá‘L5tNÍÓBŠˆŒì¬¥¸Øl~ÁXh†¬Î–3¶¬×r†ÿ"Ö¤e­’1/|.”“{ÖL¿Š™`r0Ã¦ëúán½Ýiä³¨Ün1uÀ¢³Zˆ¶ãÇµ¬ÅÆñÅù-K¤h¶Äq"¡–ØZcHqŒ1ÒÇ|ñ/Â;‘Èv™²VÎ««×ABâfcM¬µuîX{.×¾2`Ç6¬ýIè?©Eçæý‹ I¦a*öŠök°ÉvÍkì§•üðNQEQE9c?@"ræž)v×ÔÂÄ
-º¡5ŒÀa™‚}ºg-'Œ`î¬åQÎUuQ÷Ü²³ÖoŸõ¬1Ò¯ÆÕMÓoŽ)þMƒ™Dk=ÁÅ›Më6ë¦j¼L„KDõcH;—Ph3ûkkSœñDŸÅHj-DRËøê	°È\„ê­uÆ¦â=VÙŸ0Ö¦´ÕÊ\ÍuM¨ýa»šA¾™(H8jâ©Ñ‰5ÚP yƒQk7«ëÕÅ¸xû/6µHEQEQÎš/r8 irÖÝœ¸\Ïœ-›gJa©Ãs$Ôpý¾CíHW¨5€Ç¬b­Phû¼Õ>ÿ-‹µŒH‹ãGmØÒßÈÑýÛþnÓZÐñÜ´ÖõÍfh¬Å¨8¼PËZLS´¦	š'±&Z2rëãÄ$^R¤o‚RvÎX¼s!÷û¼œx·¿>kýS$é´rÂšuZzh?Àú~ÒÒ¹srîtH6ºI¹"k«<
5‘_<}ÿNQEQE9g¾Èãa’o‘&0Ç`a=q«UŒ)p¿ZÖ<ƒ[kŸSVCæC°Çò½2Äðs)ÌòÝçüAé¬•mV‹Æ€
»&!#C³Þ"Å˜þn°üC÷=m]C‹w?]"áöSD$#Û—3.iZK’Ý,!Ò×d±S‚Î“T‡	ž´]nYÛ×mJ¬9
Ò£ EªÑi¼fs²îªÕ5hµ%]DÇa¿c­4Ù Øn¸i!Ï£Eø\ÐtEQEQ”sç‹ÌœÜ¿# fž„í¡`ì@,¸1E×Zïœ1¬üèD•åóKòdì…Öš,Ö
ö•ÇÌ¾ìY{¦1²!Ä÷¬ÒºãXlh5kLs×wTDÒƒu¾ë„[c/’Ý§@‚„ŠGÀê–­´Ó
f	ÓB‚Ì“Œ—½†ÒÍé¾x…­VÆ‹,3Ö–"HZŠéjÄ]1¯îÏkÐj/å£þÿõkiK-$‰´kIƒ|®ÐÔXSEQEùûÄÚá€4HøkPižCL"JÈ7ó¾Hø8?Îàjºgmkù2HqÖG(çˆŽP~ªTôå€‘ÜgõL­ñ64ýv½%PIÊän€VsÎÎ³tž®O·—iYãùâð)'>³›ÐªF'ñ–BÀHlBFâh\œ"tóèy|B’)ku–?cíßs€±¶_MúÕxÉ…¯VuÖˆŠZÓ"È·i¬]+„AÂ[[!Y„Ki9Á*»EQEQÎÊÇÃ#÷÷ÙÝ?ì 
ÂÄ¤ 	òâ¾m!Õú²u-SŒ["ÖÈ*Ë÷Jöu·¨èY+Š éà}D¬õ,Ö†®é,ÓÐŸöÞ[o(è!\"»ÿFbÏ»Y^ä”D¬í¤¹Ð²ã™½6Eéœë}œ5ŠÙ;¾÷iwj´øþ´âýñ"0ÖÚf	áu£ K^,™_d¥³¢×ÄW{1ZùZ£ Á5XÝ\ãöêjµ±pWðÝ;EQEQå¬a$ÕkT‘‡Yk°t°¦y
ÎA®E&ŒVÄš³‚Í{¢gGé¬e±–ƒ1êaûª½V:k¹
2ËŒí€u½íÐµ†¦5I1¶í;ŽÆvÃ`l5hÎ>^¢eÕ;¨_‚ËL%µ/{žðž§gŒà#ØoøBTC&ïPýhrG¼Gˆµ˜ƒûó»©ò+ŒµèŸw¬Õ‡ag©Vk Û©AØ°Ö´òmv¬aÄùi«kf%£°yÉè<lEQEQ”¿Ëö9 ´¬‘
8ì¤„‹i
¦uœI >ÞZG÷¦5(„ôÆ´UºbÔZÛZH¬ý'«Œ=•‘ØûŠ”Ë=kYdð™…Æ ‡­Ùl›® Ú6M+j.‚ÙÐ·¶ŽcR¬Cøñ-k‘Åšfž´†ƒg­Íó\˜‘4‚gRnR2‰.µ$±eæsÞY“ÞŸˆi©©_1Ö–k(|µ¢c­.Ôþ8]„Ð"È7i¬­¨ r…d‘ë«›o¡ÕJSí¿OZM5EQEQ”óòTÃi5Réþ‘þaÏJbœkaE I¤méI&3;ˆPD@~yvÙ[±VO1{H¶…³VSk`èH›4ý÷-REøt5…›aØZù‰9½ÿ§´¬qfÿ¼¨5º™E§Ë!§%’>$è‰H‘€°KLÄØg­qaz(‚û³B«Œc-ûjràüÿÂEr$]…«†•N-‚|«ÆÚ
á"d­Á[»¥ÆhÇš¢(Š¢(Ê%¸¥á^;²ÖX9`àÚ”èn	"Ã´Î§¬¡
S¥1'òE2¿Ïi‹µ²Ùj¿œŸåóm­g­t…ð°¡¿°ï›-žû¦³]ƒÄû¦óÞô›ÆÚBÓ…àìOïÿþAv!$nN©vL€$MŒ]Ö{TB¿M³|Y¢“;Õ(7™€,ÎR¬Õ¥/^˜k®mê¾Z9
k¡Ój®ÚÏrü%cMÿNÞ~±FëÕŠrû1gM¬µ›ÓríŸïEQEQ”3ç‹æùðøxàø~Ôæ‘µ6§£XKÉ)ë ôZñÓÊ´Æ‡9'c£ž2òugMÈ=këuCR­CÀ1¬7ý04}×™v»m=éRkn4¨ŠôÖ}úp‘–µ‰IÒ¬FÀH#¸RÆ­%K>‰PN1qdDØ|=áœË[ÜõÊÛ±±–“ óñ{µV­j¸Nñ×ÔZÿwÊ+6ÖÐ²&bMJ W7<[¤ùlÛ¯(Šò?öÎÇÃ–§Ñãö.F÷ N6B©00cD€q	OPg˜lTÞ‹èºÀ^BÇè&Ø÷¿§»	0¦UFcð>U‘U6ýøßûŸ¢(Ê’P¾ê ŸŸI4°¿6æ4å$r!dc”hoÚJíõc1Ö@gf™Ñšå|jë´S«gmN!æÈþí†–õzwü'v(†4k[ˆ¸M“±~ùìþ/QÊ ‘ÉÂì™á²…éRý8ÎÆZJ<9'/á.ó¬9_¤:šF$:ÖÎCtýzöÕ¤
²P%´´ÃEZ2ímkß´òýk«Ýó 5(5”BBž‰±†'¹	ìÚ|¨(Š¢(Šró=äö£imšh…Å“8×"†$ª!03Â#¥»¦,‚¥<áW;k•ûþ£#²Û=kü.ÎÚ–v	ðè}Ó$s8o,äúÎÇ˜¼õÞøô¸¸w‰œ’´¥‰Vã^4¼ð;Ýø€O#Dò€'Ÿx6ÝZÍùà8_SÖšiš/ßØXËb¬If?k5Zh-´}µ"Øb®7ðM‹ ß³±¶¢"H™†M1#d£=ˆJ£'lÞÔXSEQEYˆÏ¿ŸŸ@#÷ÃôI!‡|dÙ"ûj2\ÍvëlË[{5àµ8k•Äh‡ö×æZ»gMà4HˆµÂÄÛaßuÖpX¿Û¬}p‰1:¢éiñÙâ¬áF	èÇ’3—D%_yZBðmR„ŠIä.æä\Þ#¶?„8VóœÊ@lîX¡&¿B,²¹:
[žo=_ìÕŒyÏk+ŽAä²Ehk…‹ ý¿TEQE¹½X›&Z;?OHŒ%	rduæBFÆHÁH¤}¡ÖðÜ2×p¿2ÖD¬!s¾).ÚNµ³Võ[‰æ xämÝm¾õˆEVÞô[‹œ1Ž€ÿmO‹Ÿp$›d¶%Œ´áxDÛjCäœ|¹ ’. ÑBŠÞ ÓÑ†ˆCdÅ[R£
ò˜ƒé·»2[~åøx-Ç×0ÖšÖÚ[8hä;ïXc[íd-ÄêáEŸÚ'‡­(Š¢(Š²xäùHbíLró™á¬ER9Do;ŸXeDÿÒT³¸äÆÚN„ìK!$]bmvÂò½õ›ü™òÞîY+*£fGùý;KsÊ›~oÐüÝýcøºx¾ˆôœAfb˜X–!Qä’6";Á
.Å<\ÈÎà½§Õ`®xL"8Õ‡Vk[ÉíwUA¶¬ÉñUuµµÖ˜®öV­ö/-‚¼-ÿñëmYÑuÏZíN&­=¡Vñ›&Å(Š¢(Š¢ÜœGØjÐjÏÇ#WAŠˆ/u>%Œ÷2ÁuöòÃ%Û5Êˆ5¬òPG¬3ê
¾Ö(ìŸ³&w=$Œ¾A™ì7ßÖœ`iDpB5ºÖ›Î¨Ð˜~ÿ¸ð	cˆZŠ	éŽƒÌV›à ÅA’E.ß°@)‡”2`³Å </ÞXç<ç‹È¶“3ëØsÇZ=a­Ž©…šìM­†ë-lµpî¶|þíÖbmEÆ›jkØ_h55ÖEQEQ–æQj 9eä|fõÀ¢!åÈ2!yçmçP„,a[<¶v2d‰îÇj‚˜B¥gK[œê—ºg­Ri•ØØìÖ¹Ùïv[zXcœt×ï;Ã£Ê<I–#±‰µÏ‹‹5‰xL	‘""Ìð6Ï 'D¸¾Z¼ñCpNÄš3ð1«î¿µàm“/rûk8¶rx²Ö‚M¶È4ÜoàðøA¹)0Ön‹<ÜÑÍÑ"´Ü]dškŠ¢(Š¢(?ƒ§3dÌµ“Œƒ«‘b`µà‰Bêhºk ¯Öø¶.dk-Yö½Š‡,ÚãT—Aö»b¬5Â7»ý~¿£,È}‡?»6’^i}pðØ:|ò†ÃÂÙýŸŸbBu);eÒ¤FôŠÑÆôqñ5¦˜ ëBà}"Î= ïÎ?V-km±‹*ÈÿÍñ"E­ýXdIiGAŠXÓqØ+cmµšd¾š$AÞa6ýÐ´öŠOj¬)Š¢(Š¢,UˆIØg2ÖqÁb-%)Ô‹!)'äÆŽ#ô°zœyÕº†¥ÐWÎšä‹¼k§+æš¼49•2H'bM„–+5ë¾ßËÈµî@­kA]&÷®yî^ë7[k÷6¦àÂHìq¼ÌÀ¤Û4k5Öoc ÖBLYFbç„;Ñt±æá¬]Î°bÛ”üƒª Ÿy6ÖD¬U”ã“«‚TÚrZm«é"ïÏX+b9üNqR
ùbv‰„ÄŽM5EQEQ”%¢
„ÌÄ't­a6Ôf2#³š=Ì(çƒ±Æ±h˜5^Zã±K¸îÚYkÓÖmµX+…ò+’cs âÇýžÄÚ–¶íamm¿[›K,dðÁìëýÚÆä÷‹OYË$XÊã<I.‚kGþpY¬1	@	¨AéŒua¨ƒû‹ô­ª «Üþî¬µ«Z­‘ÙßkÐiXÞÀæQµÛòËíŒ5<A­a»ÿõW”A²X»ÃÊšM;ÖEQEQ–çóñLZî‰9N‘…½@ð°/çBôÆst?q1ÓÊ^{kåîùW9kàÔÔXëÏß¯—A~ã¥ü^qè{ÌÃÞ®­ë7¤ÓúÃÆAgç$Ä³³>D·ûº´XKÃ8ˆXã¹ØÓ(#èM¼5,™?¥†A†¬áìƒÃ‘Ób¼çœÇ³´¬µ%m/c­¤‹EçÖ*·mí|‘·&Aªscn2cmUžîæØ+êUc}ö	’·ºR…·¢(Š¢(Ê|yFÇÚyg±6‡iÀÅ…Ü-å±ÂRëˆb¨ÉÞNñŸk!ÎÚ©¤óƒúåGœµº×Ìf¿¦rØz‹HÛmÞ;˜ƒÆÁ3tkAä×_‰-ÃÅ%0=irÒsªV¼‰~‹A’ £l g‘‰b=í–GÕ•@ÍöP:Ñj/"ÆÚæP÷«áàxiOVã°€XÛkä{3Ö
+¾W÷Ðj$Ôîé¦4!UÚ±¦(Š¢(ŠòSÂ Ÿ9’Ùã#ú¢àî@1„Ï‚-Ñg%º¿QÙ_‹ÍÎÚñ%|SIƒtýöÐJ)lø¸%W©7ÆýÞ£–Ð9ã¡B;môöqé‘Ø	vÈ)ñœ5A¢Eh—Ì'±–h	/ÞZç3¦˜“ÿnO?UÆZ”Üþâ«5Ö’íšP»Xû¦EïÎX+U÷+<B¬ÝI
äR ±Ó°ýI÷Œþg*Š¢(Š¢,#ÖÎÍ0æÌ1„8\êö¼10Î²X{UûXdÿ^RI5,Üo…aUd-4êêGyl÷¬Õ-kr	òeÝYÛí{²ÖzÏã½-4(Ä´ÐÞÅÏKZ—1ÆÆq`FÜ,Ï ÃÆçqÌty6A„”„‘½g‰,ÎÑ²&æd9µv{ßTâE®ÌWm¥ÖöÕ¤eM‹ ÿ~Æ<5ô©	dªiÒ«Vó§kŠ¢(Š¢(‹é'™ó•9_ÖÚ #(Ùó> ï p¼¯‹Ë3°ÍQk¸X¬½rÖNÕ^ÞÚüQ9kU¾È56ù;î-Åõw0	»Þo¬÷b­sáË²-k!â8/ ]mš½4>ï4Ð+´2‰µ„Év9™B¤âmzÛw°©eíº9yjäö÷¨‚µvÅV«Öêéj¸–HÙiäû3ÖŠX›6ŽÁ8lNW¤ñAQEQEY€_žÈ}F1S$9=CÌpÚ¢œlAtÖ;seEµ5¬µ(q$Ã†nk¦Ñ“]ÄÎZ;}¾ÎÙã/gè¶»MïØ¢êŒ7½Ã03ÎñX2ò	b-ã|ÁÈ?ÎL™Õ¼·	"-)„<´¥9“Óãë)kí©ØµÈíG¼È¡6Öê|‘È~¹ßf¬iä;4ÖjÝ&!#÷wŸ@ËUÿü (Š¢(Š¢,ÒQ5%Ÿ'‚TÚ‘MÒÐoäøxH4Â 2žH›:­8krãªƒûåê{ìÖEkE{}¯uZ­8Nó5ókâ¬µ5þ|aÛuÑ0ÔÛç¤OŒ°ãÓÇe[Öx*ö(Z+žÎL2j™n&ç8‹µŒó´EÛ÷ù"eÊî–Ô•x‘‘ãEê†µÌ‚•O«ÒhåW#:íÍhä»›±VBÞß¯D«= ’Bû_kµO©(Š¢(ŠòÄš÷	‰ˆïŸŽÏgÞ¹ho|Ç™»ç®5é¹è´—Ws66vqÖŠXkS$G;Žþ…X«ƒûË}À*ìºÎcíÎÑÊvo%ß„ÅÚkã `B¶Tœ–Æµ#9ßwô1C¬åhx0\Œ†NÐ„TMª+ÍÜþ¾Ñ±V,É¶¯k»/ÿgïR$7–0l÷´{žÛÓÌì…7¢`ªäªÐ"w¹JÈµÈMž@ðÆ'x+õIú¾€/QÇ¨^xñâ(‘ÓAÉLË4&¾Rfªª{ F³™Ÿ?âûïý6Öîn)[ ]dñÕh}®Ð¤$ÒŒ5Ã0Ã0Œ-y˜Rfáp>“Jãý4_ÄÚœcºP‚çPÈà<l)Qfòª‡,º_M^ÚYÓá"ÕgS÷º¸ÎšêY“uAnŽûöXüIåôí $Ãß±ls‡ÞGöÖÒO7Û¶¬åBL³ÄA’
¦ªV›¸
2ç‰5vÖBf±ÆÃ| üP»þ¾@éþ¯Æ‹\5Öt‹6ÖÖÛÕ°}%?›V{“k„ vµÚ¬	YÁ½Ü˜Mj†a†±•Xƒ6O§ó™Ž§)68k#Ä4æäCŽƒ‰-(ˆ\õ¥²!qh ÕVÊ •3´Â£2ŒtÏšØCt`1»—ÖZÛ¹¡ÝõÜ¶vè®ˆÄ8kmk9¿ÛV¬‰6ÓÆä˜2ÏYc±è³T¦‰[ÖhÃÛŒ_®Á}ç|ÈóIËÝzb¹
ò/r=\äKúÕ°´§F×Wóóý7Æëòî•ÛÕHªÝÞŠV†±¯ðã7†a†aÆ&<@¥¡þ‘ ¥FëLþNJ$ÕrJ‰'aw.,Ö”T“guÖTÊÈR¹ˆµ?«ÔX“h¬þøñwÄf(gM
Ã]õÙH¨|‚Lk÷‡æ€o9À¤“:À]XÄÚý–#±cžD¦A†!w3ÆT ÓèBÖA:-%™š-¿V"¦Á•ÈÆZ„Zsò y$öºº­¤Ä‹öcMykxNªaM±M$8Zä4Ö´\»ýþ–äÙ÷×/Ìw×0ém†a†±Ù˜µçóiœH©A³‰¿FÂ!³ÿÂÀúFÔšó"×°ÕC5®½È‘{U¹jžý¡·eÇªÎZ¾8kŸ”³FìD¡]ÞìÛ¦!™Fß³Ý7»ÖÈJq\RèèKõ.ÆrJùáf»|Yã"ÈR$JdÊŸ`bó„sKMÄZÊc¤–Çüàá ‰ƒš²víAÕ'‰ÑE:@óK}µ‹­ÍŠ ÿÕÆšÀÖ
!!Õ–t3ÖÃ0Ã0þI>B¬I°È™‡q¼œ iÌ™ÅpQ¦}E?¼jªimµR‹µ*Ë´ÌPo4‹X«ÎÚ§åüÌNÛïä¦éû†Ö¡ë¡OŽPj®ƒQè†èñå¼ókéÃÍv#±c™ñ8aŸAž	SÎï¤em,SÉÜªV@
PÆ1±`Æð„à.	-Ó©Z“:(s=^dd×cÄW€TSb•A›A¾1n`¬½6d­Ý‘·Æ½jØUb¿6Û0Ã0cË™ØgpBQ¼µi>ÑÍü$…%av4ÃÓÖ"½¯ZM.yÕíJ äÕžµ•ÀþõákZ¬igŸä§-b­m›Ã¡!±F¿/A#Îuý‚s1ÒŽÙqÖGvÿv-k¬Ä¦‹‡6ñ˜5ÚÅY“äþœJIPk!ÁV‹023[ltã‘`YÅšš²¦õîò˜.ñ"R¹×Rí´šæ—Ú¸fã°ß÷¯VýH\îH¨‘XûŽDOXµ¦øÑ|RÃ0Ã0ŒífbŸÎÏðÔ Ó Öæ	c±GdÌcŠ^’%û>ˆÑÖaic7¹ôpìš9Õx­ÂêGË:°~¯e+¹ýÄ±mg­Ýw‡c¡ÓïŽô-œƒ@ótø˜SÀ4"#rÃ–µ’3¬5fBn?Ž‘m5¹Íiœ0Rb,b$¥1Gà Š±¦ZÖ4øIâEºbM”šÖjnt$ÎU~ùJ>YäÛ5ÖD¬‰Vƒ«†V5j´°)ÌX3Ã0ÃØ”{>žÏ3”„ôS•™¤[)3ü§£g‘Øaó‘ŽNYkËÖ©rHßß¡Š5e©áúBTÏšìÊ)â(H¨¶¦%>ÉZëê`kZGýa›0b%Þm7;¦œ3ZÔÀ¯éi†±&šm‚–›`¶…È\Jð¥H« )5\.Ô)kJÈÊ®« ‡¾=µRÄ^3ÖÖG¬Yä¿×XƒT»»ÜÑDì;jV“È%[„¶Šk†a†aÛÏÄæ È>Ï4Qä8²J‹z9ñ,l‡*7{Õh/Ã µ³¦ÕšWªøÿ.òñºYqÖ¤Ô¨þo;ˆµ=Ûnl6û!†rŒía9Ñë~«‘Ø…5!†§IÓ˜‰2Í`"ÆqâäŽö/´ÆBÂW+PzÑÑCt—Æ™§¬ég¦ßId]/ñ"Z¨ñ±6^wkJÇ×±ÿðñVçacÀÚ·8ßÓIÂã !Ò ÓêYùËŒ5Ã0Ã0Œy _í#3%‹`*6êÍóàË4å •¤cm¨t¸°–W-„Ô,#Z¬iKH§A*MGï«XëÚc•U®U»>ô ÕÖ4¬XŽŠÝ5û=a)¢ Ò;v¾6jY›¦o­ bd’ñãÈì‡J£5j-ñÙÆË˜5ˆ4?à–ìééy$÷çIõü]×l²ö|“;ˆ±†WÕj¼$¹ÿ:¿ÐÚÊWûõg üêüðþµ¸h5ÄÉ3±ë$l3ÖÃ0Ã0þ1ÎÏô:Ÿ.@2Œ¨Ñ±äè‚.¤ ÒÕÈA6ß/›\:ÀK‰µKh%[DŒÑ!ô¼^”BÛ#~Ò¶‹¦;Ò×íI»4.¦BJ9Çjm£8È›óÈ±š2d-2B`ÃÎ!‘c."Ö­Æj-¹Î¡¡nL
ƒ³Ìx~Ú†ÔÒ÷Qª K*È¦
µÝuo¬I5_Aoé"oÐXÓ|»LÄ®Iš¿è²Ž5Ã0Ã0ŒíÅqb83×¦B²!ÁUÎÓrÚY“× #!ë¥+!tU¬­¸gúÓ«i>?å gíZ²áE‹”,Ò7˜µÖé¨5çŒ¸áCÊ9q™§û¸‘XCS×7¤Ê&Qk—“µùlSŽR9•”e6vr.pú¦9¹ƒˆÝ‚‘Ø_Üÿª =YˆªcMÂeÓüºÚ°¶@~}ºˆA¾EcMCÆÚ&as
äm±Ž5Ã0Ã0Œ\¬ÑuBÊï3FP¯±–Sô¡Úk5lM.A7­ig<*G¨žêrÈÓˆÅš*‚Ä[¹Žb±íûþÐîÛCGÇN€Xë¾MãR„Z‹é?¾Û¦%0'ˆµœ‹ˆ56ÒxŠh5±Ú¦è€D‘Â&œ\Çÿ ð5‘Ýßù8’XÓUê!Õ*ÈÈUjÀÚZfuÖø[BZäësÿã«zjrÞ‘³`­­¥‹ K‹1Ã0ÃØÐhX'ê\›Æ§§ÇÏjÎ1 ­$4®.øA±ô­ÉžµQ´0¢¥†Vj²i>k/»Ö 
Ù³“Ö6M»;ökn¤ßÇ“­3ëQïˆøÓ2âæa,U¥	vÙ,ŽÚˆâKúHäªN3¤Qr,´å”¢?¸¢ y”·Q©S¢öE©(WA"¶¿¢R3±i¡V58k6bíß={	îGr?é4,ö×,þkÆša†aÆ¶bí±†þ%r$¥B&ïE¨ñò"ÖØ†*o:`DÏÅÖÎš2Òú3-D~«bM5­	³vÄ	P
IN¹i‡¦ëwmÇã8Zq¹$þ»yçRÚÂ#¸ùÀfÚˆy×!²$õ§˜Ÿžà­A¬ñ'1á'0ÕF=§A¦È:³?]HËãS
Mƒ!kg²¦Rûk‹VjËU¶]lÿû¿ý[Œí×b¹ýß¾¿ýàø~¥Òê¥†a†aróñH9ÂƒÕ`æ–ààáÝwMT©vÙu¤öÑxUW|7%Ö <d——8Fd­ñÜ[újÍžÝ©]ãˆ¯ÎÃVK)Ê¿ß(_„È	i!B;m9æù’á5Ž±Æ1$´|çb!-rèÄZ™OÔ²¦Â4+º
²okl¿~X„âïBûÅX³kow¯k¬ÝÝÑº½Ãýª ™ïÖøÁÄ·a†aÆ¦bíZmšQIŒ)ERT(‚npÞxkÁÀ‡ˆRHm­}þ"p¨¦5í¬Uttÿ£pú—.b­9ªAkõÂ§Â®é©[­ï\w<v~hv´&äÝ$¢lQ¡÷îc)…ÅÚxe´‰•FŸT±6±DC*dÎ‰n3¾ ¶ä½À-ku$öšÌ­™ãEv•õ"Èê¬áº"Ö^G­}²"È·œ.[b,µ[ÑmH„\×jf¬†aüŸ½³ÉqãH¢°¤¡9êö@hôÚDý ¹"j‘»\%ëBnòuŸÀ«Ò¬ç¼€.àKðÖrâEHuK-Cd[âcUf’”º´zx/Ã0®
ÔÄZmÚhÜÚÍj’}1æ˜náÞŸR:I4YÓûåT5%×Tärß2Z¬µ»3sÖ}·£PÈ¶k6›Á5m;  7Å5>•ä†˜2q½»·¹ŒGÛŒsžæ‰®\0boi9æúHsÉt|ÈµÆjÆ¤¯-kgKEudÇU»ÏdZµÖ–µ±fE?|l?ªiA¸Èš ƒ­5AêÔ~‹í7Ã0Ãxnÿ=î3i5ÌÆÞÏ¨†œóHê!!ê"%©„l„'R!q©„¬Ø«XÓãƒrˆNçú]ýð?¿¡Æ/k Ñb/ÖÃ®e²ÛmPûHö”ã*N‡‚Nï½óHñÈ¨†Wˆƒ|u—Š”Aæ‘5Þq[™…½l2(¡Œ9x±–ðÔ#H­u,ˆ}"±ö‡|POu“*È¡oåa©í}‹á"²_©YôVù§‹ÀW£‹61×nxÒš„Œ<’i•×&¾Ã0Ã0®Êí[²ÑH¨íGÒit8p|?Db¤”92pÀÈ£he®ÉrÖYƒPÓbíkùx>=RdÓÖtyñä(;ÿ©v×öÿzd*]ÃYø£»Ûôž[×Ü»+ˆµû<‚RD«áž&ÜØ?ÎGsÕÐh°1CŒ!%O›w]ßx×¨)uºBTWAf©‚Ô-kOÆöÃYÓJo+‚üÑÓEÖ¨‚¤ëfµ~¹B´Èzu„üIóÚbûÃ0Ã0ž[Rgä©}:L y†„Ç6bÌÞ–iè^£ÍûAhêx¦zÖ-Ö–´ÆòœçgÅšž³¦<#|†
„äHÜ.8¤ö{ïúvÓCßƒFB¼½BG`æ¸‘Ý3Bœ´Ó‡ÓTb.yœÆbÌðá ÖbÊ!8’“}ç¼ÃÓËg[ÖêQeAÂ{¬Të"k—ÏïÌ‡¹8¯.;bm½Æ½"µSmõÏ—´U­&{åÍÃ0Ã0ãªÜa¼OÅž
‡ŒÈxì}AWI0â‹a¨bMÓT{íôRó±;¼”7¤4ØÇúNUBêý(ÖúVy†¡T Q†ŸÈÓÊ\${$r÷°œ7âEÝ^¡È4#´ŸÓEPþ(ìe©LEÊ#Y­¥’|¹Ð‰SûïPé_èlËÞªÙÈ‚lµXòK\)²´Fñ½¦‹Ÿ&;Älµ›†bÓµBlÿkK1Ã0Ãø{¸›ŸþÜ“bû4ÇòçÞÌ3rF›MT -¸Á:/H5ÜX›¥ô~Ý¯ëø–Ý¢¥2H×ïN¡Ê[«›¼Ým6´¶ÙmÝÀÆÚàé€¸‘‡­Çÿ$«µ”ËÝòERL"Ö¦‚ñuúÔ&™ˆÍÛrŠ¨ƒô	Mï£s¢9$ÉYx6x§³ ˜¥ÐL]‰ë¿\„_ï_—æ—ËëÖÐh°¶~ys#ZMg‹0–.b†a†ñÜíÉKC!$T
 éÝ~,)ä¥!º¸YÍÓÑ•%ÙÖèŒ Ó …H¡ýµ“X;ŒÈ¢»Öð¹6òß¸¦§µÛöÁ7ƒ¨ÎöaãBÊÑ‡Àu—ƒ|uÏÅs ™§*ÖŽŒÓàKt¶%$p"£â­€äz‡¡Ý?¼ñð_~x¤Î‚|Ü°ödär$Ý´~ï­òûM±&Éýà†@·ÚêFÔšlVi†a†ñleÃF1$tÚ˜K
ÑÜJðÇØpÙp¨,Z¹öØZ#œ'½sh©U­zmª&R;kÄÚ±²B~®ÔêaK£Ö6ôsH©5›—¢“þ5øUÝa˜N{º‚XË‘H¹ü)è4vÔ+Bç<­µ‘N2;»äÐuäèúÞ¥Ð 2ä‰ÄÚÙ*H=4ü(fwçúÕšÖX¦-•Aâú6v–.ò}¦‹@¢É-åkn+rÕ$YäF[kf¬†a†a<³X›hZ#õ0‘’@ä˜Kq²íS‰Hèzíld¿þ@BéYóº’O«]‰K[Hâ±X;I50"+¾á*ÈM»í¢š‡M€X1¹.”(Y!¸„ìþKç‹DNuÌ,¼²„Šä}&~Z™Žúni©dß9/‘#+·Æ…¡ïi‹Yç‹||¢
òë‚ ßó‹9£ÓD«Yäž."¬×$Ûà§‘\[ßüôlÿï«Yºˆa†aÆsq‡–5öÕöã8íç2b,óœ|Àø±œty=M3|ÑYÓbí¯Å®bÍ÷­jÆªñ"<[ìôÍn»Û‘ØqÃ µŽ«:éò1…Á7C„Vó1¤··—b—‰ÄÃÖJŒ²L²!'Ü¥`>/˜D^’°úÆ’ˆØõÎûfCbíQ¾ˆI§« g®‚Ôá"µcí¬dƒ2«è‘Ø–ù½ñêçK&AÖuÍ†—?ÒBë¹¡Øo,]Ä0Ã0ãúÜ±Pµ6íÙT›çqœ§Ó4svŠO´ªÕ/Ùäªh±¦« ±ÔHHœ´½VÕÈïÒ“Õªl‘j"ÚÚ~Kùt·Û6Û]'Æ`·qþ$ÖR‰”:Ò³Z‹é
	#woG´«qÎã’%!Ë<–SÛÈFZâèÈŒ>7Ì\ó>‡ap‰5~vOÏ¨«Uñ"š÷òÂ	,ykßFkEßg¤n[k¤ö¯ ÕŽ2WáÆŠ Ã0Ã0ž‘{³Æáý4ÂJ¢äã¼Ÿrp.æè†¯DÔÚ9©VÅÚO£ånðu~l=è)k|KÉß¶%ÅÖÒ¢íêZßE«CTJÈ%v}·Ù¸Trº†X»!Ö¦IòsNeþH;R"¹_²Xƒ¬+ÑÁÔŒb-`Æ@ßC¬e5£NVý|èé|Ú—0l Õ˜™)×y–L5¹-]ä‡M’Ú/ŠmÍ5«×„vÕªn{cÿ †a†aÏÀý'ÌÁæQØ’SHîœQ9?x,ŠåŒÕ¶¦œµøyäÇš$"«Öiò±†ÅZæ:¿GÉý§í¤×v$Ø8ccÓÓ«s~6`K¤Šˆw…4È+ˆµW÷£0MÐfXE«|ÆÆš„CNPkD*ÐÉ%ûS8Ã@¿¿Ó#±¿X™}£« ñKÖÁ‹ÖjxaùÞÝ¾0¾ã"HÑj/¡Ód"öú%%BbÂÚ
jíöj†a†ñÜ£r?‹XƒTC$$í´–eÂ×€…q¸ž¢B
Z¬¡ïjÙKÓvZÝ>È±Šµ¶ªÛÏË®Ýnº3±ÛvÛ’7å #»Æ„ÞÇ”Ý1Ÿ2Qî_]8_dAá¡	Ð{b†ßÆJbŽV˜iß–’sŽDp>±š$±Ö8nY«bíãÙ¨ª uOŸ\*³_ø²Xû&µ¶³t‘Ësûæ¢Zm…<HRjÄ
ÛÆ•CrÓ®Güë…a†a†ñ<bM
 ¡ÙöãŒõ0ûŠ!ˆ®©‰ýU´-åBÖ®5^ªTSbma¢óÓ¹#Rè7çÐµÊYÃ‹ÁŽoH õ2Ö¶ÛnGïˆ5×ð¡eˆ¾ñ,Ö2TRf.y‹–5h¯#°x+ë„H0â{l%…±–3ŽÈué\ôž¤ÚfÓ5uêAEEe>ª‚T¹ýOXk¿Ðvž£L{oé"?`äËÏc ¥’X°ÔH¬a­jb³Yºˆa†aÆ3Š5qÕ´îóxÀq†TJ‰ÞÎÇªR£Õ}U ¤ÎƒìD¬©å«Fš6ÐÔYÿ	‰Ð€‘B?¥Ô°ñÊl¶XÛ¶H³m‡!û¶ñ¬6;Ÿdfµ@‡··—Î9þ‡Zm,°ÐŠèµ:tmÌeâ1k1þó	ÆZ
lç|³Ùpd™¹eM=ž³±UAVÓ‡ó¡ýÊUSb×7Ð[ºÈåùù2ŽZ=á^­0û5­+Ú^#’Ñk¦ÕÃ0Ã0ž+`„¬µO°Óà¯M—‡ˆ Ó4q°´šg/­
59jÕÖÈåL¤kËhÍ¦ËbÞ Z%º_Øõ]×ô»‡~hœwÄqo† IÙ[£5ÄüöîÒù"³ªXO)ý¨‚°‹ˆ£ÏS1c	¤æòE<æa#_DZÖ~ÿËY¿VÉ¶„Vj:’±öAjVàF8©5‡m†a†ñ7r/I`?öÒ·vØO1S8vw¹Ï+ ÝrëZ3,hµ÷y±öñéÒGýéo$ÖÆÐl”X£àÃ®:Kd¬5MËÎÚà=dÿÂ®	)†ˆ	k)ÃÅr©”»Ë¶¬•’Syd†Lk“œqÓtÀÈà}Ž!ø£vGÎ{‡ÉØe'§’EÔ±VA¶gbûFbc!–²û¿ÕZ{÷?öÎ&7n$‰ÂvwY–Œ™Æ@2Ð^hC0	äŠà"w¹J ×Dnò¼Á }‚YÑû¾/ ô%êòrâEV)]1ÅV·¦ 	F|Åü©*–Ò?¼ÈêÃ¼Ò"HÉ‹µKpµá™Ë Z©(Š¢(Šò¼Ü|[H-,ì®M»Ý>c]Ö–ev0††ÅT[™×ê EÈHË³ñG‘†_WÔ·[Ã"¹;”úíòµ¬¢DDz?I´ÏDMu]UÕU±FÂ6[2ÞúÖù@xçBôÖXZÎ-Ö¢ß{wn¯ÁQcÆýv"}œâÃ8¥bnkG;ÐâŒ³M7íÐ"_dÚýþï•*ÈÂ!²êel?8U‰…w€çBÎäÝ“ù¢E¯µRò–ì4Îílÿ[y©IŠ¢(Š¢(ÏYI¢,Ž÷ßpgÌ4¸k÷$…<äEé¯±VŒµ¼JMYñ`µf\ivB¡‰¨~q­ƒù‰µÑÃ=’Î?}¨ì›¦âëk}MŸµ,×`´õU7°”2þž&®Ï›/’k Bc„BÛ‡öO1$Z¸ä4úèýH‹ç¼~Ÿˆ¦kqbÎLºªE‡:¨\Ü£US0¾’9¨µµk·ûeÈ´<žÈµ¦‹œŸÏ_ÉMÖ.®8·ÿýæ 16ä™,‚ÔPEQEQ”çâz¢"ÈyÂ5RkÄý”vDLS°æ ÐŒÉ›Œ)Âí¤·&#FZ!ÖVî¥=;kÄš¬óËÄXÕÓÜvu×ökY¹BZ’kµµÝ¶5Þ56B(¥à­¿ùé¬ù"Ñù€&ã	ŒfViÑÓ.§ö'‡S!ýæ­u„ÓèMÓÑÙ¡•³ º¬ýöWª ýÐõâd>¯æ@æy]ªíÇ­¶X{=œ·ö[Y©Q€ÿ†{­!¸ƒ^š.¢(Š¢(Šò‚bØÏˆî¿ß¹r/¹"Æ¾wÖDIäÉü~~Ñ¶R¬ÉÈ¢=Öcó‡,Ö‚é²³vB­Ñ¶¯!Ö ÙÚª£µ­ð¦màB°Yçm]C®ãX›ÆàüÍ‡smŠ¬ÕH“´Z¤Ábm1Ž”œ³q&{sNÉ"DJ‰£ ½iÙXs—µÇœ5TA"{¥—Ý°1Ÿ ¤A®æöcz2ÿRæ•A²XÛX#/üµ«KÄ‹ r¯Ó.µ¶¢(Š¢(ÊË‰5ˆ´oÜmË2“Ã6§ù¦•÷žÅ™u–W3¬Yk’ì«ÉKkwûCTóIIvº•ž"I²Xc¾­–Fð%èÉšÂòy[÷ùÒšÝwÂ6Û®Ù¶Þ,á¬1œ3ò§ëcH31Åswl·iÁ'1ÀgC4dŒ#‰µ®Ï…°ùCgÖÁYã–ØKé²&ÌHá9ÛnKö
¯R®É;kRI/MùÑ‹ ¡ÖH¦mÞcÂÍ5Z‘/òNr©IŠ¢(Š¢(ÏÈ²Eùû7ÞÍÓBÞL£c©›kÆòlN_Z3Ò[#Š³Æs‹'‹5§;¨ÉNÙë]±ïgHYëWÄÚ÷Ñýy›£û!†ŒE¢ÈÐÖ}7.züˆÆù çk78Àl­åjÐf¬Øf®Œäÿ£ZmG|é¼‡°j²ÚÓ5|nÅ‘”‚-O¥
R\Y#0	nKn?¦Sü¿Zm«é"¯·RúkWœIÏfsƒ|'øEREQEQ”gä&j¬ØÀ²,\¶‘¸Êl´Ú¨‰FN5Z[î!Ö
+¡"w¢.RŠµ¸k_Ng÷ãU„öUƒ‚G¶³CWu¨.ä8H‹_ùúÓõ¹å6*ƒgF>Ú‘£EX´%|¿ìˆeŒ,ÖnÏaA‹5¾®ÖA¬¡|”¯¬É>tëUåL¤\“ÎÚº±°jºÈž	Þ²VË—Õhà¥‘bÃ.£F©¢(Š¢(Êsr¹–§Kµ¼ îAæ²¶feWî¬­Cò³ÞhM^VãIÈ8ñæî£1Ç]±‰c£m[U,[@_¡œÓ™¶¬±†öf°Uë‘ÛŸ ÖÎ™/Bˆ)Ž0Ö€óišà®Í jmDy$ßW[Fƒâ‘ØTëh´ƒ+ÇîÄ\‚û÷Y½¸±V&)ÔxýS±Fhä]y±çêÐ[í00_j;lEQEQ”â–ZI#»9¡åWôH%ŒÎ:Â2!¿SlÂV3§º¬‰NkY¬5Z[õˆ¨_ºbkRªÑÛº©Î2G:kMÓ–à
Oë#W{FSŒqœÎyý1¦Dz]ZM923ÅÀå²Lô…om ÞM×¢.Ó™¦5‹µqÇÕ£+ÜÉ,ÈL9lëÞ=O§×"È×Û[zj$Ò6´ »S2 iCh¤¢(Š¢(ÊK‰5€ZÈ{2xv»ÕxËì„ûOÞ{k!ÔŽ^˜€á!)]±î¬µ˜ëâ„~aÒ’½Ö°ÃÀ”÷B¬å®ØÇÁý¼+7Õ+²Å‹Š>µÆB}Zã<ZO³d³aŒ‘M­˜nÎç]GôUã‘rjÿÃµLþfâNk)4­ó„…•fÝ0ÐÞµ´¯ëªjW;ÈòÐ,be?lVµkÎÚ'ˆ5É'Œ§òåWý¿ýk-‚”Éýì§ÁVÛÐöíÅƒBËõšÚ¯(Š¢(ŠòRwÖX«íP9ó2§§…]ï-¢E¬£ÍA«aÍO¹Ä&Zd7y’Ùý¬×ÎîÍ‹*{”»Rî7"GCŠµ’/RWh|½å¼þús×àÇíú­5·Ô¬…‚>
Þ˜8†8&¸‰îã‡óå‹d©–ud¶°/ƒÄ@Åé8BµÑw“œg“s)upÙºª&ªÖ†±œš¸¶&³ M[Ãq<jk°Âmi‰±
WCjä+àçs)´c±_-+³«çAæ$H|sM‹ EQEQ^J¬q`ÿn‡@BÄNÞ§4ÎÉGäB­9ZÍCdQkü	¯ÒWËCv[k[tÅ¥ÑšÐg+rû•UÉ=ßÍú^«aÏbÙîÅQ7Û®â–ÜmÕ¶PŸÖøàìÐv6xöÚ\œ<¶ö×/_$…˜öÍ1¸@ë4?0á«5œ6Tqkþ¤‡è,ù]]wƒð#å¡a—×R:z“5¬ˆ\Á#xôÎZ±ÖhÕ$È§òmkå-·Á~G*3 1ÞoÞ1ôñ¼QEQEQž—›lªeîI­MÞZ›–4ÀhBù£®kCyÉxH‰è²µ$²ûel^d dù¾PÄ!Sûû±mIðàÂœ±íç­m¶dU¹•¨sÆ8ÛøÄ9Œ¾iÏ¦0>|ÎGt½ž¦\>8kÓÄKpƒE I´UÇ4¢ËÛlÍ`ªªœ¸é÷h$Ž¡ÔBžâö¸rÝT{¢³v«E¯·R¦‹Pl?dÚ!òª!e?ì_Ô(UEQEy~gbmšw\
™¦ÝŒØqòÃ`-¼5nˆM”4H™	É#oeÆˆlô¡õE¬ýÝŒ‘;™Ý_Ë4È½Z+ÞÖ-Û€MÝWMÛ“|sPCÁj4Fz¸U½>_dî²Æ©	+7GÙc)ƒ$f€ÌMSJ¾º&„\¬‰¶Ø$Ö,Â Å¡É–á¥#vÉ|¯ óº³Æóº·ö´ôþNµ³óáœ
­ì6Wï‘0Âb-ûi¸ºÆ;M‚TEQEyA®w¹»ÄÚ<‘®Æ%ôf6·%åºš|0N9k%ÌîgÝq÷¨(+‰#2öð‡ìþ/ò…êGúœ·Úiûm×o·ÛÊ8ƒìú¾ÝE d^âõÙ6x" ­?Fä@¢Ö1ø4Í[j01³ï6ÃxÆ)²JsžØšÎ5m×µqBáÞ	2ƒØ®‚<üîEÁ>zgíO)¶Ö¿Æ­¶X;;?Ÿ/	òbíí>
’¸ …­µK¶ÓJ?l-‚TEQEyÙ2Èe÷íÛn^î¸<£ü²‹ÆfKx.™	ÉSž¥Z;Îî'µ&­}…ØÀRÞJÁvêýCv¿(ƒÄZŒ5bÝ;­åŸV\3ïsGÓôµ ¦HgÏ–Ýã™ÈÕRÂˆpÚ«qÓ”#`$ÒwôBÌIŒ'omS×uC[ä‹È+k’ßXÁæC)Ù"{°[uÖ>a^7ÖŠ¿ö·ÒE>¼Q^o$k5X60Ô6o/AI¤U‹ EQEQ^¼rŽó·ßQ¹^[–dã²„Áë“7+S'i­5xŠ±VÂû!”äõ«õ2È¯²Ô¯ˆµYmO:k ç©&_ªGpÿ¶ï†¦«âß4nŒÆB¬Y?t.† ë+eoí\†?}ôÁ£?À8Î„Œünœ Öè‹µeŽZKø£És$ÒOÓTuÕƒ|‘ÇÎv#.ò‘À;º±ÆÏš§†|*ykÎÚß”kýõåÕA"S„´9k<8ýqsy¤Ö Öx·ÿÏ7Š¢(ÊÙ;›9r#
[?î™–¡!	°½I`$òàªÀw\àšà†'à¼Ñ!²½ž;ät_¢ŽÑZ:^°Êì¦*U# 0]âËL’™¦µ{x/Aþt><®aá‰Øë²î—sJy‰Ö9ëC4›Z‹®K£×ªRÛÈîo\"+ç$!õóxª²lÄŽ¤Z×ïv;H·N©™´;Œ³
r1:Ÿ¼óÑ9BÒóéîRa\Ðèã!R¤„Œ€z¢‹KHeVB€ßbÄ!@áY¥H¬a2]×)£µµem+•…[ÖŽYmjÿùž5º7AUc¹%¶ÿåxóþÒÉ"%\äÉþI3Ü {YÁß¤¨UAáEÄÂ —…†bç°æ˜Ö}ò9sÓ”Î¨­Ö*µò´Ùý‹5ÎîßöÔ¾´l §ê"MX+/E¬‘rQ	IŒƒæÁ3(ÝÍÊZ¶°0ùJÍAÈ.•/£w åÀ1#ÁD U>å”½û˜·è8bÄ[ÍPÜIxkÚ(m©
ò¿[}~5t¥¡ú/rL[áíŒ³†õ»¾ZMîÇ‹Äöÿ¤©ý-¤ÒÖl$ÖÈkƒ›F”Hì8€÷¢ÕAA^‚_¿þþ¸æ¼>±–÷ÙñØ/gÔšQ±"e©þ‡µõÖð€	Ï1»c¾ów¶‡züÏ!òiÂÝõÄç÷ïº	Þ1[Ú:CÏ°ë¹mÍ;ç½ƒ¡FŸ]Ä1…‰µŸXx9‡´þÄÄ¼dºµ…½¶%8¬Môîž1VÙè”& Ö»‘.?¶ƒÄÛ–ÏÐ¯K„~­‘ý5]ä¬³†uS¬?6kMÒE®?µ1ÄMk·o_ÝpécI„d«ü*>© ‚ Â‰5‚¬µ¼¬t%ˆµ59ï|ˆJÙU'ÐõðÄ\«<óÕè®z­f÷7ÖF˜móù˜02þÖªµz1ý4Ì}×ív8¿Ð“XÓúÌ9íO~2GŸRøx¡^ÀâQ]	"Á*mÉˆµÄ²³9ºX
 íÔ+­}rZ«¡ëæyÐ}7OUÿ®òöÙS‘ZY'`ii5lÛ°XÃ-é"?{dõÕnnnßÒrgíö—ªÒx“Ô~AA„+k`¿`ÒÚãÂQ…+*ò|pJAk˜g"å®ŸÎ”B6ÖZ“Ýž"HêR›ÖZiRKþŽ¯,×ú”HU„É¦1ç-FÓïK YŸóòmg£cµÓeÄÚë	e>¥8	’Ö’ÿh)ð[H‰Á[e¬&y6Øè†AM#Ñuý¬«¼ý\Y² ‹{‹ê©aÇºUIüQ±ö¯;1Ö.ÌkhµKC"í–úÕh6F¸eÀ*©ý‚ ‚ WÒ³Fu_÷´F’RYÞ³£æ’ÁŠ¬E×Ë‰È-gMÕìþ¶C{+ÌZªXã¦µ&’o¾ GŒÀšwc·çI+Í¡"ÃÈS±Q	Aú­GçZøøæ2aÑAž{8ˆ6h³\â¯Þy&AG«™9þQé©ëÇ3&ƒ.¿m±öåùœðgÓÎr_ßqÕø)k’.òÓA"
’áô~š~x‘›[Äõ×¦µ¢Ø¤aMAá…‡b“V{<ÆA®´®9¤˜ ÕÐÔ…±ØÝ®@—«lm€ÿÐ˜kHá¬Vn`mi#ü+mÓZ[
yœµ6v}7Í;â·Yef™·ÃOÞ{CoÑ;k"á¼36-—‰ƒ|÷ÉÙC·šw%”?$†>fbä/'Ä¹(!ç‘‚ÁóHÌÆó3!Ö6‹ Kd®YÕjÜŒ‚Äu<Üoö¬µ›¤‹üÜ©ýU¬A©ñŒ58j·7·ÕUké-‚ ‚ðRÜíÉ[C"dæ¶µu¡5xïœUì=ºy<vKµv¼O6­±\«eÃQ{œh§SG@û~È>DÕßÉ,È
G÷SìÆäÌ¤ŒÒÆð¹ ?K£YÍ[B„·åR^òÝeÂ ­õ‰‰(L!—‚ÇB¦×Jž?¾;¨Æ˜è²âÑ87±ÖwÌÎ#?óóçm[[ÖNÿg¸o56•îûsÛ½¤‹\mÃÚ«¦g†«ÁWcP
Y‡bKÃš ‚ ÂpG–ÔÚ~qY‰…Hö
:í„¿ôó3n­Nv­Õ*È£Xó¡Võ5b¬ýÐ|ÅVÅ	7­í6ÆbƒZ‰ˆÄÎ"¶ƒ#µ‰9Dïž•¥Í²½­‡ãõá"†e$Òˆ›ûÓŽßà®Ñ]†ÚÑÑãs@e¦6ÎY(43ÌÓ<ö³¶~sŒxë4Zv¿ñ±l*µj±£DŒ€ïÎ\›%]äZSû«§ö
+‰5Wƒ`cyöt$¶4¬	‚ ‚ \…³¶_ÿJ*-A¬±±–£G#•RÊ(,Ð3ÇJ1Â[3{8YyhTZCó½ŽÅFÓÚIµ¶«s¡Ù\+ƒÖœ5!mÃ¾aÑÃèŠVE˜_/“/’b*Ol¬¡{íðv²–±:g\ˆJ;3+cùÇ¶VYÓÓ mbq»QY³ ³/UÅRÃúC=kX~¼ò›ÿcíÂ¼FÃÚe!S­X®•^µr—íö¯Ò°&‚ ‚pÎÚŠØËZ†•4È°.É³T3¥jÐ7ÞÚ†hklµšÙÆAžÌËhõZ«JpÞjZk/Üx*ý0ðÿ¥'¬q¥BÑiåyö‚ }ìãeòE8ü‘à?ÃÞZÆüÖ%úÑ½XKvš‡®3Æxoô`œµvg¥lu"·Â2¹
2¸ZY§¬mÛj¸êŽöZ¹I	†”t‘?‹7¿\h4Š¹ÁxÖÏn€³Ø¤‚ ‚ /*Ö×eOŠm¿æ7[N1ääƒWŒ±\iN÷¬Œ}4Öª³Vã O¨±³*khÒªb­ÑjÏœ5¦8Åx£Cõ#’ ÁèK"Âó=ÄÚëË„AZ_ªKz¿s1/!àDžÁ—œÝ¤­¥w«’kÆ(kÔ<gž{m\ƒÜâ3~%"¸+
ò¼³V¿ý‚HIù™Sû1›žÛÛcÀø•9¤aMAá¸Ã5J„Ü#Wd]2¼µ}6ÊgÂqº‹5Î9kmËÚ7áý]œnXÅÚ™DÈíIÙ¥iMWyÒ^-üÏL¯­e,Ä{Y!'mb„V#R	ÛŸ.`&¼KÉCžå€HÈC„—€íæ}^×`}°}? _äð£©­ú±ŸO5²)‚¬?Æq’ÁÓ|¬X*çc!ËËyomK²ÝÿCÊæ®±a­±ßÒDllc­vªÑ¹|“"HAA„+kË#	Ÿ¼’\Ky%²7~’àô£µ¶©Óê`l‚·¶k™ø)QôkÛžÚÃ³7¾ë‡çMkóxZ¬¥¶ë{:1»^«eŒeF!Y_ÖÓÌ{>ÆKd÷ßa°þk)iæ¬£O%c¤XxÑ§ý~	hRã_5§zPvžº‘Ü0ŽÃ¤]¨Fäæµ¢\ç§ZOöóÎ¯R;c®ÑÖÐ‹±vµÖž'AÒšºìmM‚¬íkï¥¤UAá¥Ë I3¤¼_W*ˆ´cÞZvÅ@¤÷=oMã9^¬ÔNÄA¶V/•ú½ýV+ÿ~GþáÉ„Ë®›¡å
ý„?­†y²hN‹Æ„œ¢ÕÚÅC¹bôt">\"_$pfç¨•bK–o!ùq
aÉ,Ü°xïŠXÓfRj§¡ëµ´Ï5åËÉ_ã37ð¥UÕZ;ï¬Õíþ¼µVV[Mù‹pQÞ½¿¸©Vb!_½½ÅDlŽìçqØtÊ¾I¤ ‚ Âs·î©c-§“±I©=.½¸¿)º£XÃ¬5·5m­ª³V« ±U±6Õ8È_mƒÆ]{Ú´v¢kT±†ó`ô<9Óõ½6Æ¸à•Ë‰ÚÇL@­¥@ûÇ‹„AV±†#œµ@øs¨7Í1"Ó%yÏ3Ùœµ(œ•Ò´OcßuÄ›_žHÛÓÊöó±
ò¤±ö#Ík¬Ó~À\ƒ»&é"W>a­kœÛ±jèWcnAE¥%Ûß¥RAáeyG†¥A®û¯_‹\ËË~¿ÏÎ¹²?¦@Zaûl 7µ¡QjMäi‚½òÐüSÛ´6n6­©µí#=Úª®³j×w“±Æ…àlþ0’às)/!]@¬}
U¬1Þ:l!sÛ²ŽrÉ´-Ü,—²·Jk£úQ³XÃLìAÑAù­*ÈSCçgV¾¶b!ë7€u›âÂÍOacízÖ`§ñÊûF`3GO­VAJj¿ ‚ ÂU‰µ¯ûµLÆ^B^á´9ë`ö8ï ÑàªaÛPjÛŠ­fŒ<M9ÄAžKƒ|à­²Ù´¶Õµ¶ëç©Ûív³î(®ŸÑã®ÓÆ²…–8iÄ:Úps‹Y
—ˆƒ|ÓÎXKÞÚ˜b,iX3yj‡ÜÍ…^Cpˆê7Ã<26»~Ò¬’¿k_šBÑcd_b¥öÜWáv°×ÎŠµc×ë¶ÿ±wÆ¸äX^yÝØÀ°˜¤¡†Pª	0cD€1Á„'à&™lT½ñÞ¡.àì%tO¸ï¬¶)l´x_‰¬*uO{šýøßûŸk×ß°¶ÚÐ‚P[qä,ÖŠ¥†ÇiXAA¸±öœµa€­†°ÂáˆÌý
V;„ê)º?]ÓKz{*©Fü ÕÈZ›ã ?5ÐŠ>['olZÃ/Òµ]Óï¨$²1V‘§-WúaÈÍdZÛàýœu—ÇAÞ[ûB®y8k!·«á-ÐCv×’³kÞÇ™‘0ý´RtrÛV!Å—ž«–µŠßOª ñy£±jg½ö†Æµ/ÛõkÐj¤Ô6´Ñ¢\‘J¬%È„5AA„ŸÎ§#ÄÚqÉV“÷	Ñýôà\pZÓæÇá¬µZé9òÔeëëk¦¡UÔÚ$Ö\*mXhË~ZÙKÓZö“ÎË5ÐP¼Cl£šöÐEä¦XxkÁâÁj@ä	Ö¶7ÇAÞ<d±†óŸ¬›‡b§Äj-ñ˜o-‹DcÁ1.²`×)öýrÍè²rý½L1 J	ä;=5ÞËE/o£$<HÝÜ57¬­6˜®v·&›[cÖ8»ÿE¸È&¬É?¦ ‚ ÂOçÓã3qŽ“XÃpèæ=B
¡fÁ#E¦-dB‚å¡Øy,v‰ƒ\¶ÎžÊ:¡Î«_i‡íŽ¶¦§°D+¶Ü
Ö8µýI7CäáÙWÓÆ}~¸8_ÙŽ!ÇöBÍÏ3Ör~?Ý ‡Fzoá¡ÍÿK†Î±ÝQùæ¾ÕÆ†4æ³Z°¥
²D­ð*&ÛûµÒ¶ö:sëÚ¯b¬]qÃŒ56Ô6ˆƒÄÓ$ÖˆÛ¹S­DJÃš ‚ ÂðÏÇãˆÂG¬1AJøI¬Ú×æ"HB¾ŸÖBöÅ]Ë·LSÉ5ÐB¬å8È¢7ª‡š§“ÑØ¥iMqÓZ-×°¶ø%ºí¿ZzÜ)‚û¢ûîM6²Ï•h÷)¡1Äx¹X+Ýj‚>Ÿˆèè!‡‹¨^“çè¹é¶m»Ûv‡-ºë†i(ÝRK©‚ÌªõÏ0È÷ROÆ~§·öEÒE®|ÂÚji¶^£mm½¦ä@nJ$#Ó°AA®I¬‘JãÐ~Zg1ÇÁÃBG•V0|‹´½ì«ÕÖÚI¾ÈBäëñýßË×xšEÊH¤œ«€„»¶'ùRØw	¶×ì­¢‡å|Žñ<­:ÆÇKÏôsä¡m!ò·	Ï‰2n"
KÝà´î]ÙZ3Ý¾Û·}¯Èdcíù¿ù¨jÁV9ŒP¦³T›V~?Ån{›RãíWirºî	k›;–jÈìßlH«q`?‰5–g³b£…]ÂEAA®kãëˆnµ9È(tÎã´Ò&WC¤‹äKa_µF{‘jX1Rè•œp¸”nX^ø³¤ã¸ü/pùßÔ¥U®‰]÷ƒXkŒu¶ïÜ´àSÄ8‚<šÃ= ¡¸úór±–-5l$öˆ÷«AºeçrHª	^k„RjÇe§Æš~ß(BëöÐ ¡í²þ»WÇ0Î±ñÁ–¯™¯ÕYãö·(6)‚üPn>Z«å	Økž©–§«­Y¬ÝâSiØ‚ ‚ ×Á;k´ŽÇqÇ‡‰çü0&M®}ÔJG+Fç­l¥²?Þ_Ò Kd•òFžŠJùßcÖ87åûjm2Ø¶ÚYÕ(Îí÷hpØX9ÍÚiH)éó…¾Â}t6äxÇ€ìÇÜÀæ÷«±|£å|ˆÞY`øÀStŽîZ5“OÙtýwE¬Õ§•ïÿá*È [nY+§ðÃígëMˆ±ö±|pÃ‹5¨4Ú¹QívböÓø.ÖAA®‹Çi6¬µ4LÙ.hüƒwŠ³< oØ§c*g­mª8Èóbì{õ>µï–›Ö¼Uk§u‡]ÛniíðH¿…BF´µÒFtæž²fýà,/Ï‘žË/Œƒ¼yà¤þ æ".øÉS‹ÁOy&Þ9l0ÓX
GgË'ÌçØµ8ó8ÔSj‹ñt"vQl…ÊYƒ¯&ÆÚß¼a¬¸aâ ïV$ØH´ùC‹	k‚ ‚ WÆOÃ>ŽœØ¼OÙur)¸hsI×Bcß-kØA“·”ì~í|‰8¬Ù²f[ž/öíôÂDìÝ~Ê9¾ö[eM¯UßH§<ÖÌbZH	êÍC¬ù!],Ö£tå$“©$2£‡£—k#ñ…÷üb50Ü¨­åÃ¦­Ùí[úÚùR0Z+ÖYì/Ö®Zþ\â¬e^3ÖÄŒùH>}¼VÛ¬‰nä±U™"·¼ÝIÃš ‚ Âõ‰5jXƒ\‡ËÃÿqDðùšÈ†æÆµWµ3#ød_mJ)q§2mIÂ=•÷ªi­6ÖðDÃ*ík]£ußöœ/‚#¬cé9˜‘vUÂ?\˜Ùlà¸h5nVcÛŽe°Ïï´!~¸Õ}¯ã“Õ
6œdekOçÍµz"vÝ³†{þ”ë*gí-c×¾‰±vÍÖhmÊîä±Mõ¥
à]ÖAA®‰{ˆµmkCÉä`‡Øè¨š¨¥š>ß_OÅ~™ÜßÎqÐ 5ß—Âûë÷z,vÕ±V˜ÕZ§Õ¶ÑºS.X7))çà«áoËŽ"J!¼02«´è&_DÖ‚)zþY"xçúKÛ7–öÜH7ºóRm§bª0È“‰Ø``Õvn~öKµ‚k¿	k+ÞV+Z›õ/¿¬ïÐ°†-«4ÌX«ø—üS
‚ ‚ \•X;¦4Ò`ì4NÓ€GïX¥)ã‚Ñ\¤§4–*rí4²¶ÖX«åkÎîoÛ^™—qK3±—%[*ÞöùB¤€I¸í'½¶ëU×Ó[Çe»ã¤Ž´Ù8É¾¬„Í“¥†}
	ðÕë`9ãAŒ~ÖA÷è4»]7ÍAhZSr°t,XùÎ]Ä{ü«4È¯¾JºÈUj5ˆ5ÁÞ@³ÁY[CQ(äÁÖ¶Œ4¬	‚ ‚ \÷èYKq {m„hó‘¶qôˆ» 6Xz˜£ûù£æVáLdñÕJ $ÇA‘›±(ª_¬¬·Ò´¦ºJ¨TæÚ„±'Ý¨µr–0ÆyÎPIp¶BÂ„jzt~k7‰µ0åöc‡P›-6ÏÿÌ©6ÒŒ±‹Þ¢R7PÃýþphû¶oèÍ¸˜r½h}.å~£RP§‘£rV­•rÈ‹5¼.ð nÌÇqóaá"«­I¬ÌÂf±¥†uÚºv'²[AáŠ¸Gä˜†i.6[kÜÃÂ,Ö]óvFªõª.„¬ÃûÛ	±öïsÕŽXË	‘µ­Äc±»º°¼²JÛMÑý=ÆX8YÚDïzí œra"Ì5ÌAäÚ§ËÂ ÄÚ€ºË˜áÈä¹ÒÚÖç‡`TÓt-Žµ%±¶kö[HZüPŸÓysUàTªMë]³ÖÀ‚³vV°Ä¹Êp‘ÕŠ÷-°Ya0öúÎtÚ©X»•†5AA„«â~<2Hï§ù"Á„„Íl­‹]~y¡ÖÎ;k¸N[Öú’ÙÒÛiäÓr°È‚x+Mkíîpê)öSÎÈ.‹µÏÅæÀËKçpË½Ãps¹X1Ð[Ø˜`ü5ZyT¶m;ã¸>Òµ‡Cƒnš]·mº®gOÓ%_¤>˜§r˜ˆ¾-\Ø°¿‹/¼*ÄXûû„‹ÌvÚfocÖ6kˆµ¬ÒŠDËI2[Aáú¸ŽÏÄ‘G8KAk# ƒ`NçÚÖŠ½Æ>µZ;SYÆ¬5u$(êcÙiÃSý7ly4lÊ¬Ã~®€ÜÒË¶QFiñäRòyÔ™Oxä l¬%ï‡ááæ’0Èœ!B`Ã(5mCþ.LóÖ0# ?,ˆa|iwY«Í¥Ö±VO)=&§9hËW¶ßËëÎÚ^ŒµŸÝ°­Nß×ü°¾e ÖØW£…}^·."‚ ‚p}|ŸŸ™è~L	éýÞiÃ1…:«´ÀòyX)†\k“·†Å4'S±§8È9åð©6Ô^·ÙªÐyÆXm%å¹Øl«uŠêû%j~JaÍ„—±+7?7èçY¬çÍ.9‡·9ÁŸ@Œ?63np¶ªk”1:µë±k”A¦ç¢iÁSm-â œêªX¸ ÎæBêØþ‡?u6Ó°Ó*lÖ«©’ç«‘XC¨* Käí†[Ø$\DáÿìAn#7…#!Ø“à‡HÙ40Œ–è•Ðî¸"À5ÁOÐgÈ	²jŸDðr	c²üëU‰Ã¥<=FêëÉ–ŒØQ6yxU¯EQ®X¬èZ£zH¬¤!¢gß)BœAf¸,ÒòÆË©6”žµ™BÈíläë…ÿy^OFÎÇbO›n»…ŒÙ ¹£ÝíúˆâNˆ5KtÅ„Ã˜¸eMÔZ¢O¿O¬ùÜ¢Ë€£ÄAf±­8ß·[¤ž ìC¬˜j²ë!iQ-:£U¹
rJœ‡	žÞrüÓùÍ7;keäÙ6jÇüX­&}i˜½Â'”Ö¿†˜#]FÜS‚Ž€¤½7 á"Š¢(Š¢(WÆÇÃ¿Ÿ§iO:-M¬Ö $b²Æ³Æ‹ÅÖãfäœ¯…çj­D÷WqµP›wÔNçg¿±ÂYˆµX;:k©µgÚzkL»iZÈœ±–B ‡ØK#“Ã!§ß>|ÇšD˜AêZÅeËHê$k¶„©Ø¦•ÖØ0×®ƒxÆ« ÿž‹Ê|±ÊY…ú{¨/Ù,•&|Rcíýøø~Ó°%Pd½º¿»Å.±ýkøl2c-Ab×†5EQEQ”«uÖ{Rkûà­á4±<s>zÜ8ÅMËåx.rmÞ[kå&†â¬IdN)¼)V‹´ygiÑ´]r&×6ÏÝ¶¡fµÞýV0ÛI£ð1pÖÇ8JY’pÈñ{â äÁ•£ÙfËã±Å½KÄn¾÷­¹ÒÎ’8˜>‹µX‚û™×êË@ÉY¼¨Ö˜Z³å°,#÷®=iÇÚu†‹€ì5ÊYe÷í–4‰-RMV†­(Š¢(Šråbm?‘BQI ¶ß:'óÁô-Òì,çŠó<H\UÓš$Œü%Êƒ×%@­ä0ÄÚ>B²È¦¡vM×tÛ¡mŒwÀ£EÓDRD5$nz”èiÄG7ËÃ C‚$ô>ÆD›h5! G¿!¢æw´½õŽ^´óòf×H$‹5R´ÿˆX«¿ b,òDì‹¶Z¦vÖä’ÓbH¨©±veÓ°ë ‘iµ5Ê ‰Ä)3n\c‘Vñ?ÕjŠ¢(Š¢(WÇ‡GH´²EhÅ!%„ÙCÆ°Z‹Þ•È¼çaNœµ*²(5©ƒÌbí3L£YŠÉVžê—¤!G§öÕ„¦ƒX#6Ðjd±õ½CÈ¥gû,ä ~€gúqËÃ #{h„’ ‰ƒ4¬áEëDW@Ü	½ì0Çkä¶ÙÁôi:pËÚLk_]ùTäÙ™Ñ&{å¬á–äümÞš(¶Nµwãç7±:ôq^¬ÝB°Áa[aÆÚ½äöC³UZíNÿ;*Š¢(Š¢\£XÛcÊÚçi/Õ{$bÈÌ±’5>úÒ¨&[¹{¹ÍŒ±Vw­g­w‰Fêè~,u@ä\ÖÞÏ	#»ó ‰fÛlDµµÛ®{ÞmÚáxx¢ Y7å”º«ªññfy¤—’Gl€¶°)µŒÒÇòƒÎÙ¦ãtd4ƒˆµ½uŸgG‡WU3<UçK}lß.ÔÀŸ¢ÕÔX{W­¶\¬Õ?ÂfÚú–72×n¹òöVû%½?£kŠ¢(Š¢(×ÊÍãcÖö‰=IdH!{MÎ¸“,ÈjÒï'¥o­Šƒ[¼Žq£ÎOÅ¾ÄË¥BÀh¶¨5¸2»çìýDÓuÆ{Ÿ"ò-JÓÄíeI†®¿"\·ÇËÅúÔ|Nîgé7ŠXsŽŽx>Ö™Ã¹­u=9Ý¶·vØ²Vë	›§¬^ç« …ªÔ±naÃ[­Ù ¯ó\žýÇïjÈ¼—>®ÎÒûW$ÍˆÕŠ!I¡ÝÝÒúE£ÑV5¬Ý©VSEQE¹N±FcÖþ=LZãt‘qÄyÏ-]Þ‹¨Œ	ŠNÃ~q0v©ƒ¬5\%a¤Vh³O¯¸«zÈ<[ôJ­R2;H™M×lšÞx"&×·¤­í-2F¬g«‹m/œR myäƒG\ˆõ)¢Þ2ÅY¬… ²ö^
D„¡æìÐìP«9l»¶%¹Övƒq}}ks±ÿ–*ÈMù—e?k]“¥þ	ù`	j¬ýÈp‘zôõWïA«QÕãŠí5T>Þ­ÙT“âG¼qzøå'EQEQåyÄPl6Õ8^$DØ‹j›FwœŠ½µ|8‰„¬µK5hŒ—„‘º7-³7DAæ¶­}`©S§käm!·‚v‚Zóf0¢mð!D¥i	l|MÓò8È4©‰`#¼?þãSéÆõü4Ã¿Ýö¤Í¬š±k†¡Û=·íæSg\LS˜	^ÏF‚×©²×þàµ<”OqóSÿÚ¿ëh®wâÃ/Ë´q^$	cYÑ™çªÉ@µl¨á…[§a+Š¢(Š¢\9¿~ûcä}‚RÃiœ<ü}Îƒ$¬sötÒš9—jÙXÃšµ*»0.‰X‡BþÍ	#ÄZAœ5üz¥:ÑãyÔY$Âà~ÈƒãÃâ¯3ÑYÀ¶$zÖD¬M“ôÄ‰—¬õ˜ŠÐÆÚ¡ÃH¶š1ÝnÛnè/î±VëVl¥´¸ŠU•#89ñ&Û©¾Ëé#j¬ýn~^öHäÇR	É L„¸_ËTìc¬/y—·äY%·¢(Š¢(Ê‹µÃbmOwˆq”øþ€Cg|Êj8ï}©„,šTr­ÐÒ¥ZVk%ad¾rf$v¾Á×	#Ud9Rxÿ×6Æq@£³ÆÆHô#vZ#D´ÞXy±Q?Jü5GEaîä=*Í@’­$³ŸNôïÌÄ.b­F’0¹
²²óNµòVm­¾}7B¨±v]á"EÍ‹5*|\ß½g±FË
Á"Ô¯–e;j/Ú°¦(Š¢(Šòk$Õ-Â)MkÁNF¬h“BHVmu0d­×¹*k-×AmÛÛX¢_ç3Dæë ë„‘,7êˆ,mÛ<Sa×HOOÄè<¼®€–2Éi¤gB­M'÷§(‚K!]l­aË‘%[2Ž“Ýb4v;ô¹ÆtCò²÷iääþ¹–µ\¹Ù{lÎY{ª›ÖÊ*œŒa{3j¬ýØpt¬ÉŠêL&ªÑ¡wèæÈÌÝ‰±†]ÖEQEQ®—Ô?†ˆx¸k´ŠZ9aÞEZ}îZÃDi[¤Z¹J!ä K‘jmVkeÒ‹5Ÿ¥H•Þ?“Ö?/Ö$a¤.ƒägXj0ÝºƒÖ6›Ö:gzB)h-/lxMÁ'ˆµ…ak2;&„O
2p-°|Â‚s‚Ýn1›¿3Z{k­SYÖRÙ°VU•c¡œ‹2ËKíÁåwËfŒµ‡Ÿ”÷à#ÂE–°–¶4SÃ¸¿¥gh,Øà ÑJ÷IËé†­(Š¢(Šrµ<ø´?LÈìçÈ”D­AU°4èg€uÖºÎZo.øj³ÎZN9\(ò›ƒ|‘‡:e#Ù·Šò(é"WH>wí¶Ùíº¡OÚa#SLb§I‘bŠUëo—ŠµÈÿPÜLjØÐ·vî6a‰…ks\ÿ0`£«ûÔµò2Ïæ†¿•š'bï¾Öhy¥HYy§þ¿½òWýßü.Rûo‰5qTk«5¬´5½-¾´SÏU»ÓpEQEQ”ÿløL‡Ã8X¢qd¬2P¿'X—èqWÖZ•YMZÛÒ•FrdYi4¬y-[UÂˆ€Ã®Ùp¾É´ŽÌ*ƒn5Â!2™\M·øj,Ú¤Xq¿4òAš¬Y¤œ}“gu˜"Ï³ƒÿbûÜÆ°³†ƒÚÞØ8þýç$_ä-®ï6Uõã›(R­ŽÐ”Ó›ôZ§ÆÚ»p­¶´¤eÖÔÀ¶†F[Ãc»gåvÇ3Õð*Iýb¬i¸ˆ¢(Š¢(Ê’Óž˜ÄZqdwˆHmÑÖ"­Ü¸Îf­UÆKµ´šÄA~†X«sDpÏó*KA†õÛ]1Ö¾fÇKÓ´Cói×Y×RÓ	Í$¥Š´ñ(´ˆì±í§‡ïHîOy$6Î€·è¹w-°,¤SàORtf¦†öX
i½$°ÔJ­žˆý•JýFJÛÉ;|á-5Ö®+\¤†Ä‡=‚õ
ïqÊˆ|¶F®ôÙ—ž5l.¢(Š¢(ŠråbmBj?«Zà3±rwAÖ0óÎßU$Ç÷Ÿw­eg­·±ˆ‘B¥Ùj‘Vóò%a„ë åªìQ	o¯kZ™Æ#Ðb¢Ù=9ˆ5¶Ú9±j]¨D~ÙUCcŽoxºÒHà÷ðèßÆôl«ÑNßO*±V}Ðj9’5Öržêü~¾êÞµü¹Qcíi5	ð_ç†µ{¨5ºéŒm}‹úHGCq8)},O?«àVEQE¹bÐe…Ô~N‘ácV"ÆR™©ûÕêIkÂPFŠ±6d©Æ|IùJ†¼ÌÛhùPÞ­FšRÓW%ÕSùcÇrm0H³ô–^ˆ‚(†D€~oÒ4FOÒ>ÉVbYÂÈÍ#´H!z/ŽZ
‰QÙÆZð´goÍ[d²XÛ‹Xëð4´Æ•©á³Á*§æ–ó”·¢w¿æù?{gãÆ…aËn+ÝF`í ÞÌFèP’ ­„ZpÇ®	nx‚ºÁ >Á¬*s] /0—ècx–óþ÷Š~­rÅqï«*«Ô‰­Î&ù¿O¶ÙéYÃEuBÚU_Mz±µšF¶†ÏXÖnïw·œÜ?mW£W'ñ§ºfá"†a†a?»¬è«&'fp46š †~ÂcÖz›„S“KÓEÔ×&DÖ4adÆÏÚ·3/yï–k™C½P®Èv½BmmÛ¹ƒ¥D¤\ú˜øûÅX¦`•‘ž
Tu¼2òÍ$kH/)UÖ$¸ŸˆRº+)F,Š”ü~¨0yš÷¬¼ý¶wµÎÅA~=í÷ÕþrÒûÏhÚáLM›®5)‘óVXû¼yÿ½T~|”WË€˜-ÓK:þÈâ¶ÄÌìYÂÛ[ª¬)*k.b†a†ñsƒbÐ—§‘@qO‡"
kp˜”Ã$i>†ÓåmolE»¬µi[Ú„‘–Ç:6oõ¦Ú‚vc»MÛ[F†sMvëÍÊÈšô£Îµ´œO6«)`y•ùŠ«Å<Œ¬d$6´44çE˜™^ÐÍùØÓx@"äžØº2~i»¬éäß²
r¿Ý¨‡]«k@%MfzXaíÿãj0M©þnˆE}=kTY7âu4!."œ…?6µ5ûOh†a†ñÓËÚñI²E`iHïÇl­l!xBÄD©š¦•5¦—StMm­Â¶Öõû@:òOlÊzÔ`œ34½·	#µ{Ö6›MwôçmÑsÍ…àcæ¯Ë€X‘ÈÅŽ–R„®Íîÿð'‰pÃmx §tòž›­¥a(®ë=#ha²ÃÔ¹ÐtYk¿ôdäæGxšz­¶_SY«{×¬°öüAmaMQ[cÓ7¨¤ñµDœ?Äu6zM·™ŠZX¸ˆa†aÆOÏ=Le`¤²FWÊQ6^ÕÜ~¾Bh£E0èÑ¶ZSš>kÄ|ÂˆöStÞ¼x<KÙH§5=Àa·[ÓmÝíÝöaµÛunïSr«m·ÇÖ¼a¢$ÎAmOãuqàe ²ö§È$Œ%B‚®!»Ž;bû=ãÈÕv=Ýœé¨¿¶¸öYVA:¬‚¼Ì¡õA?çlç-ë¬°ö,¼žYN²¶¸lk‹égÈÊ*ø îFºÆ¦F\Ì1W3Ã0ÃxQ²6¢héˆ9û¹¢;Ã»s´²¦\¨¬}[Z#YÓ„‘-{œ®6…¤Ú@†}Ó›À@
V=E÷o¶”ÙÅD?¼ëT¾T2—¯ùÄ„.¼¸¿êw™EÐ ¦üæƒ€%˜%ñ/6IÚŠþvè±&‰šÝnÝÃÚBx‘èlGìÿÎ®‚<ÐÙ<7sÚ¦r&§f|‹Öþ>¯ßýò}YS2bÑ#Áe4ä@’—ÁÐ0BÒðŒþj,kºÔ‰òë+Ã0Ã0ã§ç¹	ÚÓ&YCª<ˆÎïôQ$mš`vbj—*kjj ë}–91kxœùè³&Œ¨©ÉTYãÓþÔXª„Ÿ“ìYƒ›ñMLmálWe÷ß«¤…P$¥øº3n rè6­ÅíÃ6’µn•ÜwëïVÛ=tˆ	§¿œÇKMÖŽ…¿sËáDÉ´²¦§<
óu6Õ5U¶3>Y/å¿Ï;8Ø‹ÆÝ´®¶À+!oHÀDÖîª¬±®ñ\dM3ûy®Ü¾e†a†a¼ Y{z¸®6È„|-å’™è¿:ÏB(Ú[W“trh£5h“ÓpzÕ‘YSSZµûLU&Þ¾¥•5zÏlèO>”˜™ÔWÊUº¬Ñ‹kâ _ÄúÑ)R„ÿÕI:ÓÛ'Kðý>ò¸¸9¬\ð¨¥m÷ý–þúkÒ´~ýÐï'Y“|‘ö{Ë*Hm.×ªš:Xq¨½MoUëfT­^õ°†Ø?š7­ŸÍïZƒ¢É›Sì[CŠÈ#²v;9Û’ì‘ýoo—*k‚4Ã0Ãx)•µ/O\*äiG‚7S1t‡›yõ6Eó yÀ½Y©TWÓÒZ‡8ÈrüY›­ É5_nÓ8H$Œ¨¬ªk›ÕªúÉnßù\ŠÔÕr‚™a÷]Ã¤S%çÉÖ†ôÛ»«’ûs€¬ø·£Óš$–¤€·˜yUòPúÝ¶÷¾_mÝžŒ­ÃzHŠ@9¬Ðo­wyh¶¬éTVA¦@_ùÐ¨ÚÅÊÚ†F\«¼éO|_×ôÀ«¯l¬°öŒA@ŠgÒaMÖ=N/iŠ<¢gX	Y£OP5È©Z^Sní? a†aÆi´FÙý”×|dÊ1¥àˆA\r6«MÓÉ ¶:ÄA6B‚s–ÇS…S$a$"a>¡¶&“Ãjµ’yÛº‹(wÁÖ2ÒôÇYƒ=Á®ð²ÚZ!k×%÷KjIÉÜÎM ƒÇkÖ´ “Ke(nÝ¡·ÚvËÄë6°µž¿ùx¾M¯_ÉÚ¡ÞõdI;ã98äU5UÝ™¥VX{ž È–…‰Ð©iýKìVcYûe)+ qÑY“êÚíÄ[9šX¸ˆa†aÆå #t:ÉÚ×²ø§@fABðjj­­)Ížµ&_„à„´;ñÓ‡æ‡TÖ¤?´jÅôgµ£å‚P2¡>é¤á7¹FÀ³ðé†ãøáÊä~‘µÄ<EýJ¡p;·2(sÌ±ëCûÍ¡Ûwè†½^sf&Ä­ïâ aÍ×—,È¡É‚ïÂxZMÃätŽ±©³ÍêÚ…òZecñ"Ï9¿ rQ—>âIm¹À‡>J]=ínfFŒí¿šl†a†a¼>J=³å¡p¶T"eö³UÖ¹)2¢K ëðÍBÈ-Î)a$jˆÆ¼ý®zkã Åw«<BFpñÊÂ®ßnÖTQêzˆgJScGé^=Ô8È‚"LÏûkd-GôPƒžÑû2¢k5úÌé²æs4Ïq¿Ùq°È{Öè¶;À}éWÓ„A>ž~ávdcmgÕ4™«¡iemšÎûÎÖ×p~²ÿ×ÿ»|×Õ(GCUµi›Ö8òLnêIi¬¦¶FŸÑel 	MÍÕÃ0Ã0^&÷“¬GŽë_)Il-xTÓ k18¡Þ÷zNGeFÔ„-hF´uÚ¶)u×idâ [ë°`p½1¶bœúV—hBðH‚¶–µ×W$÷Ç@xäI‰ôÊç¶C!æ”ÙÎöhgÀuµíC‡öã'ù"×}æf$[—ZMÃDõµzœjÛáû«!ÕÖ¬°öƒx÷þ{…4B–@é‚]ïKTÙpÇÓb±”<ŠYÜÜJƒ5ºÝMŠvs5Ã§…‹†a†a¼@>ŒOÜb-‘MÈÖ5ØÄ J]üè\×¢ÆÖî[»ß¿ÅÅô.¤¹„‘ßçÓ Uì4QFg5 ƒ<¬vk7û˜3ªYòe$Ícˆ)áy>¾¹FÖò ª±•„ØØ“©„Èu<2ÛZX?t5Ÿ¥ï{„ì„AÎdAþ‹¿¯fA6ªu89¦Æ
¦bh*vZŠÃØªÚ™­YCìçu5°€é×Î–04aIÇÍäfKÈÚ‚2üß"V„‹lÄFH½<ÊÌÂEÃ0Ã0^œ¬}9B/Êp„%–„t¾øÑOg«i§õµÓÂZ#j}[Yëœ&Œ¨)s»×ZxF.©8°Žlú£÷W iÁwM²dQö˜¥$;Ø˜ã	#÷!N[àRÂ8¤®M±Ñkm0	½çÐß¯vý¤¹ÎõÝ:çC9‘µÇË>›,Èªk/½x<AðSá;f‰asÿÊxÎ HÞ F°·I9÷Ê_$p€ïlg¼SM¨²6ÖY³pÃ0Ã0ŒÄ»‘¬Mûµ©-“r@'\ÅÇì]Ðge/Ç\¤ØZ«kHYkƒ[ôã9{‘®cp‰zàÄ¥lÈÇ
u¿X,Eô	éú™GF–µ4\%kCÌSI²ÀÖ dM^üªÐË_D¯7ïöâj~S[ç=9ß75ÇGuSTAK‚6^ä¬¨Æw€s½±9>¦Iýçb!q·†ØÏéjÚ›<béãDõ£¢¦ ¦ÚÇª¥MºÆÑ"biz“™¹ša†aÆË‹ƒ|cFî¡Hµ®V²ºÇ;ï/÷»™Mk¸š>k’/¢	#ŸÕIæMEMoriÂˆÆA¶¶&õ£Uï:oJ†¬EAoÒCÅ‹¡dc~øë¿È”
ÁËG©‹ZÌ&\ý5<x"]9:Èo×KOqY¹ÝôÎÇ4ª¬5~*« éç_åŒ˜Ü«^ZMkFÜuÃó¦mÀÖÆBÊ	.–ÛÿÜ¡ýŽAZ¿ÈË‰i)äí­$CÊ;65 oÃúG­¤‚Ï~}e†a†a¼ ^$­ˆ™£ûŸŽÇ*k©H¬HN¨K [öêjº—ªZÓh­Mi}d&rdMQ[SU;Ôkåöë.æÈûï|‘å‰ÜM‚Er©ÊòÅf÷½ÍZ·àâ†m“šÝÈ‘‹ŸÝzë\Öj¸‰¬õ²Øt¼˜“©jÚŸ®‚ljjêb€P8«ž†¿ÐŸ9íœÝ ¾¦Ñÿødñ"Ïéj‹i c»©»ž"½Ÿ.úi»&u5)¹M¡ý8šHÝÞ¿2Ã0þÇÞÙä6Ž$a®®ÑØ5†áj ×‚À€+îr•@®‰Üä	xƒê³bõºïàè}	£g9ñE0R–—Üpš‰'2™¤\®‘jÓo"óÃ0Œ«âfF¦–Fn‹=BU`Ù¿N'£J¹k¦F§ºZ[iÂÈj¶ˆ>Åˆ3å¦5DÙ«¬eÃ ûTdI×íw.àóôÃv5HJ‘)ö«œ7B²öáòä~ ï…£Sª“)åòïDŽI 3úÎù¾¡ñnµ[×@_ïÛ>ð–µ²ÍÚ!7Y›ÃPáÓæ£Ìæ¯ÙÂò Wz†3KÆ<à(Tï¼®Ynÿ»7X»áöi¤`¤b§²†7nèÌs(Ïiv'¥µK‡5I<‘5øñ“ýã†a†a\÷FHÓ¸!6ù
ÍYÖ¢à‹þjkÅ5ŒZWcUëVú¬¾CÂÈ¿ÊÐC53åL:¤þÌ¯ð—Y”Ööõ¶!÷h¶{¢n÷µÑ÷¤ŠÛÉüà¡WÁK·µ”¦%dÄôó[d-Ei 5CÓmeŸZ‚[CµÒ–´®ç’dõXW˜tM»ßv!'¯‡otÈ‚TÔÔÄÃDÚ¤¢F'.˜à\ž‰·ÕªsºŠðmF#!‰ÖþŸ^q5Ò4¡`4ƒ·Ý¹­áÍ?åe·(±I`ÿQi-gõËžZŽ§a†aÆf÷µç	ÆÆ²†¶k1ã‡utÏZ‘0"CV5:u5MQQÖWF**0¿qÂH}RYãË®Ýa;Vµ]jI»!Ä¡®ûB”~k¤Pcà4ý)²¬AÜàm—g÷?ŒÂK¢,z|Ye™0bI¤HŠ•Õà\§Í®éqEÈcëÒÓ¿¡â¨ŽÓTRn²–[¦iu†L¶³ºæqyÏGñ5Ö´_Ãd%X¼È{º›ÕÀýwÄFco¤vV¸[Bâ]24ÀA#,hw9½ƒÀ{Ù,\Ä0Ã0ãã '”}ž„{×h|	Â^¥Ø³V$Œ”#)ËýÎÕË”ƒÎô¢Ö¦£	#º
-Öˆú¥ÛØÖ¹MÆDZ5N~ ‹^K(ÈR^KØÀöé²–bp®ò;bŒœá[nå¶ôÆöÜkœ¾,eGkú¥ YmÛþl:AšÊüYé 4‚‰îRÛ‹ª±ñ%WÖä…‡5?ÒJœüRÕÀoBZnÿŸâ‡Wëj|Á®†‚*f˜BØ©·1X,ÉÖFžFƒ¨™lZYSèÞ\Í0Ã0ã
ùôùyÇ™%MdHÃCpÃ*šÉsâ¸ÕŽUWƒ¬‘)=SÆJMM¯%êuHyBµé±Ü´†ò‘pÐQWÎy‘Pg¨Ä$&å¢®‚$æùþÒä~Iå`‚øúäHLSZb6ã.~ØíÛa`Gãïk aà–Ø¼R˜«®‚lw9R×=ò)Õ2ÔÒ‘4Bëk81žÜhÜHþ=à\Š¿Å‹¼ghÿMžÈBH–5²3ª©aü˜Á=Û™„÷“Íñ–+ËWŒ\Rn´k†a†a×‰UâgMsr?	Í<q/0õµW”MUëš6Zkè ’0òŸßa%+6V°–1òïœ0RVÖ”\vªÜ,z|¶yŒQV%† 1 óDOEÖÆ7ÈÚÈ±ý!‰òÈÜ{†ÀeâÐûàé¨ê–¾–a1[Ìªº!YCÁ±Lî×""š¬ÕêQ0’Kfydv3œ5X*júLf9Çÿd5d™âoñ"ïçjÚ#¬v,C!ïè…‘ÄGz‡œ(¯…”ÒÆåÂ1Ã0Ã¸Zæ§y&_›‚OÜ¾CD<$JNëö^µÓÊZWÑû¤²Ö²¬¥ã~b‡|ðÍºº• !ñ™FŠx%Öv½,TA@ Pc†Y°äÃCZGš<\ÜfmÂ/Á—²Ô˜ø½ÞO¯ÐP–È@_Ì¢¶ø¾¶»Š¿’µòãë'šdí(ÈQá}kREËe329qä7ó¨6:EÖø(ªk/òŽ¡ý
ú«Î![Ö=òì'œ IÝÖè9ùÙ"tQNÎ5YûÉÂEÃ0Ã0®5ræk±AÓ	B“FÈÚœü y÷Êº²­e÷‹®¶¦	#%_uV
œÎõ$ŒLœ0òÏ"º_¨Ù9v}UuhGÁGø$E®”& ¶¶hÖç—·Yé›–Nkœ[ÂGÄCLø&¡^Ýþ±óC‡ÿYD_µÛv»GòÈiHæ¡l²æ¹ÉÚ¾è°&‰z„seO“Ê‘õ-ûš>ÒLIÎdübÿÅÿ¾®¦×¸‡Úæãbb²Ú1#o`©$êi/9RPÃUŒM›[†1Ã0Ã¸F µ‰€iH¯5¾›HÖ¢öÃ^ó4µ"b¤aÓ-kšÝŸe­w²ào­dvøÎ7~Åâ@–µ³¥µZV÷µŽ<hèÇkýà§™®!&Œ!·Æ†°EvµKã ïFª1¢KÍðKFºI,qÜË.…kóX]½uûÔ$²‚SÖ½sCâ^áçãE–UºþQ’D„¢ž†)«˜Ž'/bù£¸Ê hÀH¾ÊüÁ–Ò½Gƒ5E—@ÊÚF.¥¡l¶ÙOiàÂÚ-UØhdt$yÎÜR8¤…‹†a†a\qÂ5µÑ;Û‰ÛóÆ9ÄwWÖº“€‘"aDdMFtÓÚ×¢t¦à­âaYp’8ÈÓè~a¿Û‘—ìˆÐÐs.]˜Fïc”:]X®`k|eýüé2Ygñ]9u“šÈ/‹ô(ëq MÑK£5€ï®GpeC2éã)àðÍzÏ1¼4YÛëë%d)¥ÉD­LN¾ÑÙ’yèŸå#®Åž5Ëí;¯ºšÆ÷ÓÀž–Û©m6¨¬exq$ö­‘¬-5ö34žÍ-Ò0Ã0ãºFžgâé)¥I2!'šŒ¼g-pAÊG\}ˆÑ-­­VÖÎlZkTÖüJéPNu9™å8ÈÑ÷ÛÜÃqi­m¶õnbÎU½O1Idà#ÍFh*3&È®.Žƒ|H²Ž’5—&lgÐ4Œ	WÈ…<×9ôcóž¿®ªy©¬íûºEÖÊüe‘Ò¾Íkµ¸†¡®O5è¨¨­á[}å ’Å×ô ¬°öf>q¸ÈëHjÿ’ú(Î†YŽá¼~¾à-žH]I"ÄI¤ˆÊÚ?ìÎ0Ã0ãjyxz&G#¸24“¬IúâæÅÒ"]=ûÍùºš¼JU…­589_„fEÂ8œ53uRænœÆAÊ(¢±m[ÌnÛ÷$k•ó²Q6«DÄ@Óe$¹Úâ ?ÃÍ2"hid#Ä=Jk>Ð3&@~g[ëëº¯š~‹
`ÝTCHã“64(R/ÿx‘ÓÂš ž¦ùŽºôqþIý£3ùw[¼È_y³\p-dmƒmk˜ˆœ‰´Ýr§l,äMk¢i/Â¦ð…ö†a†a\1÷óó,ËáˆïŸGÈ$ƒe-
07]©¬TÖ0¨ª}»RF
ÓË™ä‘•½\ˆƒ‰‘ÂFkd@T%ª›¾¯ºæ‰¶Õø Žõ*-ñ‰ïè+¶ë=\&k“0/•¹‘Îè’%qÕ–£t4ÑÃ}c»}ÕíÐX`ÛwUïBÊßI!ª_–b‹(Hµ)™0ZË¦öŠ®é¢H]>©K ùµ/òž®¦²&é"ìc›\!kyûšÊM t›\YÛÀÓ0‘œÀk!-´ß0Ã0ãê¹ç„:	^ÂyËØ§A¾¼ÓÄÕ4…­‰©)Uf‘5N	Ó³ŠI!l…®œñ¶ƒîåZF´¦†ÂúiWC57¨z™9ˆ4&È]ÉŸÐ¯€;­á¢…|þp™¬¥$²Æ’‹ß-»áPg‰(bôø«¹½›ÇwV5¨®U}yçBzRYS°
2Ç‹äx}õµúñd«šßƒ¦hYŽ&jmZZ«mäù ®ö›\ÍL^ÓuÑ3¹p6!9»%èÉ¦Â‹¬ÉÄÛ0Ã0ãºã çi^dm†m­V¸I²úQWó¯TÖúüZ¨ðb¼ˆ¶H9ÃAM­|¨r¯èœ0’MÔUË²Ö}TÎù¡ª<ŒÒéÑ@.ÄiN>¥H‡Ö &—ÆA~x‘µ)AÖd¯¤—Ëjp3ÌBÑW#‚†òU»ºé˜¦í|Ô¥¡‡“i'×ìt»_kÝ«VlX{ý#9Rð8fdo…µww5p³„‰lØÕDÚ²ŸaÄ yý@r÷·»@Öø’-~p¹±6Ã0Ã0Œ«æ‡Ïlf30£YYó>2!Èe=¼/eé³Ö}ckšÝßTƒ§ýY¿«™ðøzdÿz$-ƒÊZ³­i»!Gµ“â¥yœJkØ¶§EÒ8düüé"á•@,¤„£‰ý¡NCs.¦Èx}?À#*k=©éQ[áÛ"µÜºçÓÐ•ÃÑ‡]O…µ—k8[ÿx)Ë/à‘.bi §÷ÿb…µwl°vƒ“r4@3LÀßó.5¾ÇÉšGÌYÛèž {ãqYüˆ)_­Áša†aÆµó€ÄþÅÕžÑÛ%ÛÐÂì&áÜZt¿ÛJvÝßÒKF¾gsÚ¡¼‘?Œ8Èg‰ƒÌä|‘=¸Ô=vˆa›¸>¡Qp¢¸&=±y×šÈÚý%²öKÀ~ØOYéÜàèv
!Ò‹%1ºŠË{RWÃ¾:úºšÝã¾uq*‹ºÖsŠýô¾Ø±Æ‚¦®ß¢j©9%àQ_­Å‹¼/Xys“›¨áÀÀ#?„§ÁÎ6hîdù#zá@¥3‚[¯Yh¿ñ?Œý¿G†aÆÿ÷Ó3¹š€É”Ø¼æã‚w†ÕÒÚ7•µµ…ºi-'Œ¬döåQ.úXoÊ‚í>¯€”SØµûzË'Î;niBÓ:çah‘³@¦Ñ£ÔÅ¬	È&÷íûKóÌašÒ«ël˜ñ¯Nˆ+kcì]Y‹¾kðMQ Ê_Wû¸¯ðœkþE„´“x‘üÂ±À´4V¿]F‰—ür\ñú/{ç“ã6®Äá8	ÜIfðô40k¡7†þ ZZhÇ®nxÝ`€9„²wèøï9F¶¯~UâTLXH{€ÞØõµDRžFœöÌ ùRä¯¬°ö¶ÖÀž`Y n;YamÐ4€%=h;l 3Ý˜äu‚4nû‹Ã0ã~ø’ã ÉÙ8Wd^hHrEÍ[Àøº0RÖ4a$jÂÈI«jWïƒ”Pû®)
kÌ±á(È®Â¶Ë¡÷8ªÖ7ºÆ%œ,KÈ ñc”Ý‹1DH*ËUqOgi&(ÚEcß£”î0!b3Dˆ‡aôXwÇŸÙáØ"=³=Æ³0ÈÓù¸¤/¢ÖhÒFi[‡Õg_xÆ…¡Dœ/÷É>ªZ¼È›ºØ©©}Æ€¬^íya[Å„mG7Jmš)B`AÆ-Ÿ}g†a÷sh5°Ì\Xƒ±q·hšà=»šÃX°™0‚»¨¬©­m'Œls*å©m±1ðÈ¦jPZë(²u¤IŽ«fð£/gÔ¸Ï–Ø§HÖ]½*ò1p¢H”Ú¼+‰†ÄjÆÂ‡ÈGØ¼w’1Ò=·øìÚºjúŒ*ì‚|ùQYÓâáØt¤LÚ M|í‚¨a X¨¹á*9êÇŒ y³Ör*Þ¬¶’CE/"(¢©ÂÑ3‘m«‡rTMÃ!k‰ÿØ¿4ãfùb²f†aÜïå¼ÖìÆ†A<#ÉH	Œ<mˆeeMU­Œî'$aDã4N¸‹EžËÌþ2a„Sí›£VÖ2MWwTúºõ}Õü8]çàjÒT-%Lbkø‰ÿEä°3ÑÒ4Ie-ÿÂ<Ä„³l¬—Þ¿vÑWÏœ–X?&Ÿfý@”¿%CMÖšli‚VÕ0n™X•¾
ŽZ]Ë[!QÅûóñæ®†x(ÚaÓJÜŒFV;z”ú/ m¬nêk4à‘}Í\Í¸åÂšÉša†qG|¤¿ØL#ØèÙ@¥)­5ùêj¸/eŒÔ|gÖphMF^ÃéWqYÕ”Þ¶£êZ[]Û÷µÜŽzDx>wWÃ9/¬«ð)BŒëåš8È?ÒŸ|”rZIMØÂÈQGr¡ÞÕT±âO¨¯‡žÆÞ‘¬}WYSr¼ˆî‚„H5ô•uT¹TI+¿¶jkYØp­‡×,^äí]¹ý;Úü>Êé5Ù‰°áµÝGØÙš.Â¢&Ïrl-b³ Hã†ùð`²f†aÜU§5ä_Hƒ°åû˜SÂVÀèÇ5Žñ"knÃ×T×TÔ¶zb¯²¦	#Êéâü­ü¼‚…¦o"kº	4uß·íÐvc8ÖíàðŽs?¦cši\sA¤´m%^æ¯×ôÄ&¢ì|Ü›`aJÉ“ˆq;ßÁÑîù¹ÂÇU·),œmôš/¢Ýðþrû}ßÝI¨Y4lØ@3V¥Ç].­áf#</ò/øðZWÛÉ¸‡¢í±Ú‰¬	´xØóvHI|¤&»!é@žžå‚4nº#†Éša†qO|x"5‰0gI™y¹$£jÎÃoF÷«€‘¢°¦ÂVkaM÷A’C	#\I:å‹9éT°I.s,
k ë‘Y}ß5]Û{fìG7¸÷Ã&fbYD¬&V®—+â ß?E.Nò€€‘(²– lˆjÁ§'9çªªwí‘\m ‹?“º­ ’*¯Enÿ5^dmZM3Škô"_›U5B@'5¹­­¸ñn‡ÇwÆµ|øýÕÉ"<í¡aXïÎbFöû|Víã'@¯p¤8Žø„éßx¶Ð~ãæk&k†aÆ%Œ|_PUC`?‚!1O!AÞ¼Sîƒs[UµlkÄx~h­ßŒƒ”CkazùuÂÈ)|+§"²…¬•º†`è®a±×ÐñïÙAÖ@‚D­›¹º†Îí=^Qšô¤|lfÒ°-#{KÍÕ †iíÚ¦w>ô5>­¡îë
¿Ã®ijçÿ=ÿ8N²Íóûú6Ö0žX“KÓ¨±é¬U¶R×4…5ÛQ÷Í°öè…[SYC$$‹ÙCŽ†2YÎ¤÷5&Œh¸&|¶Ð~ãÖcVg†aw”0Â‚&Uµ…Æ9¡Ôæ¢¦÷kGl·‰i³ÍZyfMöAút)Pã´1ÊJgÍß8ƒÄ%q7-~™½1àÜÆHp!¬
fŠq^ïq¯–µˆ„‘‘ktËÌþ…ð” n}ÓŒÜ»G]­#Kkù“9¬É¾2·ÿ/äöÝšÖ@¤ŠªZ©j…¦YüìkÛÅ5)­Y¼È›»ÚnÏ²ÆÕµxZÎyXWÚTm/z<à1?`e¡ýÆmo16Y3Ã0î‹/\P›¡lX,i¢!:Ÿ¢‡D!E5çÜU»0òËÊZïµ¯Xõ¸Miny¸PYƒÒTòÎÃÐ{çã<A’}DdöªÉyv4z¸6òëSŒ8%¸Ÿ¸Á®6a ß9øþØ:ÈZOŒcÍý:ìƒ.¹«æöc¤ é"Y§
WÓ8ºTÓôY†³©¹pt-› Å‹ü®¬«­ñ{ŠiX2»œÒêwÄÆ·¡®–M‘5í7n/{“5Ã0ã¾øB¦6åó2ñvÀ„4Œ81#¥5ü¯»boWÖ6F
Kû¦#Ð ÿÒ×Š8ÈBÕ1Ò6$CuMWÓ,kÁ¡NX!… [[ oâUÞh¯ƒ||B³ktÂFýLtã”D1AÓðMÎ»ÚyØ±5VÌã¡­ºÁŸï
=ý£¢œÛPUƒGánžÏ#û‹èGA„æBíBm­ÉýÖ,^äí\m·Nyï£Èšæõkà#ŒÀãè†’ÑbkÙÜèÛÍÕŒÛ>º3Y3Ã0îîÐÚ<¿ ØBÂÃ2q›µ‘	¹²¶1÷PSƒª©®iem•5"'Œü]žÒÂÇÓ¯sF$òrvÿ±Z®uð5KS
íÎ<«è”*ôžËb¬YdlO__ß{½wž~í¯Fcäo<ÑÍ1-Þ¹ Y{¦>p¸æPuôþÈ[)ãE¤°VWª-åD™ÆA•5KKSUËÿPUn#’.Ûy=¿]QR[ÿD?JYMw?òÍÝÕ°ú˜#E>cÏ¤œ]“žÍÕŒ›æËÃƒÉša†qw‡ÖÈÒ21òDL	Q0Ð{3²LƒÌÂ¦…5¥­AÖ¦ï\KRÛà¤ó7}m'?Teež«.W¤šÞtƒxØ‰)¥	nEÌK‹À8Åéõ²6º±w!ätQ@nä]"Ò`ÜÓ+®÷Á÷ Áý}‡ßjW·ôþ?Ju•²áäûöUƒd€l˜Z£J–G¥:(jl¹w!²µ]WÿYòZö»5RRúáa”%²_«js¤øœl¯°³¦1Ö`Í¸mÞÿf²f†aÜ_çµ¬†cV£G,¤Ø	š‹1I‡ÛÎYm— ¥µ²²&û A[zJ«µâ±Øy±øÔw—ºb#B¬.3„„
Ë•3c/›8f$Ê‘³wðÓã«Û¬øU)’›PNi›à†œ¦xv#Í9Œ…´WcËlªzŒKƒTrn?Ç‹he(«jgqý26ªhÕ†®éI6q+r"ÎvA¾i3l°ƒ¨áÞï9\d·ÛÕO#Øc¡VÆ+Ü@fú~í7î¥ƒ¡ýwn†aÜDÖ¸°”|˜¹'öZZó1IAÈgUË“RVÖ†âÐZqfYë]’üC¥è·¦÷V¥à8H’µ†D­8³¦Uµ
bÓa"×‡1ÐÒ‡4O8¸&n•GÞùøZMùY%(Iº;%X[ZsFÐÀû0/\Ê“J	YÃP=IÖ\zÁ‡¡?˜vüî/¢<³HmtWË¦VRé…¯L££ª´&koçj»ýŽ'ì}ÜÁÔ„Ýƒ¤‡ ª²±Š‘Ãá5#{!±`n,wögXãöwÓÿ,öºa†qW¼ÿ°Y/’ç{5ˆç‹x‡2”Û¬¬÷FŸµº<´Öå}š0NWu[û¦•5ŽƒÔì~áÈƒÛ¡#!Eé]ß:éçÑpÍË6Eé…:Ø"®F òJY{™é‚ú%zšúü$Å$Ð÷@y‘
éÝP³ÏbÀT“Mæ|ý‘ËÜ~áY\7]ghI-OjfUõÓ¥6ýV­ËaMÖ®þkÿW³ô'O:ÆMÖ`kÜ\M¼Ð³,>)9’çŒ¼jÖŒ{h7¿ÿh²f†aÜÛ¡µ¼2yñŒ4#Ã®æè|m³°ö“®‰Œdj\EeMFPM*¯èK[u5=×µpd.¬©§=¯•5”Õj²Çªó)„?z[Æai—×ô¸Ù^ùþÉÃø$ñ~› n™°&ñ•l‚¾«†¶¥ÏlhkôÅ†ÊCÛ{à+O¬ñ"Ïh}VœWË6kg¢¶~U*l ¹âoñ"oäj`Ï<ìpPŸ.²{àÂZîµÆ3½œû¬e-ÃÖç²f¡ýÆ=Ä÷ìö¶Ò0Ã¸3¾.ß×kÐ	€rSŠ4ÌAZ«¹˜ l#p¥ªÑý`8¹”‰Ck“ZÛØ)“®•Bi4»?ûš[SUô®Ç¦BžGUûc"¸‰äŒm*Løñ!]iZˆùÕqž8ôÌÿ—& ü+'Ò¦Ed-ˆ±ù¾mÈÓ†õÄZßCei|‘RÖÖÂšæö³ªÑ¡TµRÔ*\<«£éê ŠÙùÊT¶òº¿õ¿.W›± ¹ÎFZSci#•Û©©á–MØš5X3î¤ß¼Y3þÏÞäÈ­aøõ¸ÑƒyÏ0Œ±¯uÐj …v\àZà†'ÐrˆN.Ò˜äsŒd™ú«D—›hÁò‹³‰êk5IõŒc^^à/Eþe†±=&î‰}‘žc‰‹CÓ%s÷±"hQZ­-Ñ•—ZÓ²šÖÚ¢j¥-6Ëšnq\@åM—:’¬I$‹šòÂ¶vDK·Á†-vzXSÀÄJEVJ`ÅÓ˜KÊÈ”WÊÚïŸc–ŠÜüK¡{9"f$,2ˆ%†@Ï(}Ç´tÓrÝqz~o1·ê	M£¯;ýÏÔŒ9ê¥óÑiqíTÞô²]ÿcWÛUkQC#YÛ5"H$”Ÿ‘¤ú´JÙÓ |°XÆÿÿ™P“5Ã0c“|žXÖÆ‘Ucn=†{ñ‚ä&¤äq³Þ¯ô]UYÓmªkmïó¥.'½êB†ew»—Ý¯•5Ü 7d…}Ëõ(×…H¤‡¾$k)„„ãy"[(¨eú”ìŠÖk³û?~&í“Þlpµ²a"Ä,9m¶ÆeÈ¾=ºþÌ´m*Y“vß¡s%·Ÿ÷?.…ö«¦Í‘IUM/ùäF×ªžkVXû	ÖºYYýÉ¾ pYÙýÐµ'fV314)ªáÍXh¿±…†ó;ÂdÍ0ÃØÞ¡µ‘wAŠ´\/‹Ì¾Vkß² }¤uˆ?Èï×}Š¨Z}fd-Mo,k5_¨«)¸×Ô¿&ŽƒT^ð¦­Áï·9¶!'©¬µ­Ïc!ÂOSžØÏh`_•vkÏ+emd?cÛÃ%ª+Çù¡æœ¡joÏÇûÚãW8]Ç¹%¶Êšþ\~.¬}ý6Ô®Vr÷ÕÕ¹ä¥¥4]àËNîo|—n„tÖdí×»êh‡ê¾ðÄÇÔ”¹'6´Œeíðt»’%Mfí7¶PX“–„öÿL†aãcé/–Ç‘‚!¯S±²ZˆŒÿ•µþ6RFÐ»ÚäÈƒÞT¾V<®Îî—8ÈúÄëéš£‘´­!¦ˆÂ–çþgž6&1­ò®+ã Ÿç`î‚-y’9&9±–òÜ°.çÔxr] 1@ÖZÌæ?(j~8²†'±Ø›Í³TÖp4YD!»©¦Ê‡bi¼X.­}±CP¿ÞÕTÖP$àÛ‚TÑÐÀÒ°ÏQ&ÍXYC»ls5c¼ßs‹‹ƒÉša†±5¸ ç ÂÚÛÛ5{p„DCJ’a|iÃR]m¡²Öö•­i[ìX%Œ¬çµÊáHþ|z©¬É@?ª¬‘1¥1´Ê…I’óÜÂšËj4Â½h¾^WÆA~šøWN²©RcŒGÉÁ?Ê@p©®v:©´p®nHõ‘µ¿•†ØÍ©¨šW»{^íTµÁ®" ï"_ÃTtMSümäO¢®¶RÖdóã¦ƒ¨Y)¤^KE;!g#£KÀ—¬ñÚol"mõIÚ[˜¬†aÆ¡PimJ9Å961Í”¾ÎZYSî˜šŒB[7ZsgM©EKiZE«–ZyÓT‰ƒü³.¬‰éœšþŒJ^çSÎað?ËZŒñÛ‘µ²$AÆ4Ñ¾ÐëÔ’7¥ ~(PÆ<
9Ò½.ˆò9ö×S¥Ïþ\\­õ‘5mˆ}”A$M]ÞªkB™ÝMJ?Xgk@Šk¶òçÅ­™- ;ã/ÄÒtq|¿$ô—Ý%¬_ÅÉXÕäN,Ž—æjÆ&øã°7Y3Ã0¶+k#‡ŒL	¥µËÈõ¥”I;°WÀé5)³Mï¯Kk4Þ=´Öâ%i‚cÎ%a¤Êì_Œò¯\®ÊîoîVÖ¤"å†ÖuCß‡œ#7Å&Ò¼uqLùú¼Rd-c^-khÒ&¿ŒµO–)ÀÜ mÓ„uY#¡ë¤}8OÎ~è\ƒ?àIòEôÈšÖJnÿW\©ª¦u5-«áS\™u]Lmî›-Eµ¢k¶ò/»X”µäÌò2‚¾—e¾vÛ	›/é§Æ‡…°Ç‡%¸ß¬[àáÃÞdÍ0ÃØ*‘q%HÓhÌ	7qÌlhD¤	#÷
k ®­ý°²YKÜ]¬î´&ÃyeMã ÿ¼ÍáÒ éûçÄ†q
ïïŒ‘\@HÑw–6É¹~|X—¤é‡$‘$F¶µ<·ÊÎ! ®ßá.ún~èé94®å¾Ø$F_¡’iâÊZ]X‹ÖðƒhY¯JÕ”*O8ºŽ˜ÜwºVnÊ÷_+ºFXam½«­’Æ“ e£’w+u5–5b_ÂD°>`ØÓ0c²fØÆ6øýñÀ.-`Ä0ÃØHƒ¼HÄ…«C¤3)f9¹–€ÿAŸ5¥ïêÊS'ŒhEéµÞîX÷^ÓUýÜ,ôYŒ‰¸û ÛÖ9úý}z#—Ç1ñÏ)E6zËvF©‘M×çu²ñ›+sôìŠíå#ö@Æ!£y×EôXó1tNð¹s7_ºjÕÅéŠçp§°vBM­ ¦Vm‚ÄTXœN:ëZÝN8aàÿØ³ÉÚ/u5Ý¹ÃÄØvßm}¤›'^’»íw´‚qu­ìƒÄ%ÒÆwÀ\ÍØ j`w°ÿÊ†a›ãÓu"ošKk'n$bœ’ˆO±ì€\:µ†ë;W£Q+kZXÓÊZ;„û	#¯wîÔÞ^«/ÝÉî™_§¹QÃ§ÖXÛŽmàÃwÜ­zL!#Äû4g¤ò£_ÖÅA~ñi/ÐÌp5n­=ŒSqhVçÛ!x²dO‹Þõá¨K÷Ð_~>žòE$¹¿.¬I¼ˆ”±äé{S“A=M#]UFs:ñu¼wnM›c±sPkóÄ×zÚŽ*j4HÌ4¯†F<r}í@¶vx<<±ži®Ã‹ù¬Áš±™ÂÚ~Ç;‰MÖÃ0ŒMÊZæÒšÔ…FÒÞÅÇñöBä†Î`¨u­Ã£ªš–ÖZ*]»›0òª£²ÜeMÍ²6Ü‰ƒ$½iÚ³k 9¼¹Ïùÿ0	û¡SSö¦,†Æý°ÁtYùð%Œ$%¯œðèò|2Üé HzJô$†¡?ÒI5TÖ^ànÎZÎîia-ûþ¦!6üRTÔª²Úý2š“×‘^1Ozní&Ò
kÿ¥«íª[üMóÀ²ÆÅ5š4ùqOŠÆ!{út>°vØCÍÌ˜,ä²Ð~c3¼Ç¿þ·Æ6þ†a[<´veæ£W¬i#-àjÐÐûn¤ªšê½pUgÖ‡8w>iÂ³\D[ö·pv?Ëšššœó’öj&pR’j™/ç¦p¬~‚œb”ƒgÂ´FW~ÿF‘´9û‰%Ò vCÈ™$²uƒÔóbài§¶wä}×žâÚ¡„Aª~þóßoS)¬}Õ(È:
ªÆÖ¨ªi5‡µÞ–”ºãÚél›•®¶~$´í€›§Šì¾ÉÚþuHe’3jþW	ð2W36Á»ÝðÁÎVõ7Ã06ÇÃç·765ÈšäB¢>$#€¦èÙÕ4ad!¼_}­NƒT]sš0ò¦Í UÁªÃi¯êo¸•{™5»ŸºGU+3|¢FoÐ´^² iÌÜ*ïÑ¦:BÛX²²œ<[ùñsH™; xØ˜œ{Ë\±q^‚ëqûÀÇÖ:¤ö“WºœÛ†j/²VÖ4¶ÈÈªÇÚBYf'ƒj¯ËÌ_Ôœ-­=Ûß‡~•«Õ•6‰ìß‘¾q±¨ÁÕ$R„}L“û¿ÕÕd{\x[]ÍØL×ùÇƒÑþÇÉ0ÃØâ>È7Ñ´i–54[Ãm©«eTÔ|L³¬ùZÕêCk·¶6wÅ>3š0Òq’„‘:™=šÝYc 7vlÜQ44d‡˜UBn?­‚!¥d-&vµiUÂd-æœóðÈFzã~ ™'?pü¤kh!@6®#Y;Ëcê›#=ª0BYUÖ`Ÿäzm)¬idµò¦°Vö3ª…©©¤•ƒàô¨›$øÓe» W¶é}\ÍNÃûÙÒv;>Á¶'PE£QôLlM`9Ã0–yyÿ›alw{æ€\«¬†a[ä™kiyºN3#˜®‘µHÀÏ¤²¶¹Ôgª¦Ö\AF–êi¯z¯ÔFY“ìþÒq5çhE¹9sq÷Bzx[u#b§‘D¡#DÎëdíÙqç.%nDGdnL#­”#á¸Dtç3-:±ÖáÁt-ý‘XÖÐÁ@åS£ ÍíWTÓÍ
¡…ã·Úš®õUæ6eÄš¬­âÝûÇŸá°ÃPþÒI]zFfÈkÀ¨²vsPmN„´fØÆFxøã e5ÈÚáÃo†a†±ÁCkDÒÜ,¦‘ÜM
ka ¾\5]Ý[
k]ÝÖmF.š0R[˜~ ³¾…WÝ5ø6Íî¬Æa¡²Öôø)¤ªáV/" >W»Ž>¢Nˆv\ùÜ»>øÎãyqrI/9ú6Lbk)ø‚>*z€²†k­{qôaävsÅÕ¤°º¹Çš˜ÞwsûõÀ_ :³¶llð9Õµïümä/v5°?Ì•5Zì	(ÚãŽf,ØÝÊ95~ƒRN£[:ÒÆß¨1#–³`l„w¨L
LÖÃ0ŒMZ»^QUšÑG–µq>³†úQ<MWõ©5¥65á<ã@0òŠk%*pdí&»ÿð(œf16ú»¥È±¦3'Œ ä2&ä÷³·­‰ƒ|&ýëBðˆÉ%§BakQT×Ç$õH1Z,”“ë)’8ö>â!ÀX5¶J¾gÓÔÈÚÓäUXšÒ¿ izËóÍÁ5\4X¼Èšc4ß—Ì”ÝrCìØPYã™CGXÖhàbš¦ôÓ,+ú2)¾…n¬¶±þNòO&k†aÆvùôö6Iâ•˜$Êžƒe/_”R™
K#zfmÁ×ÄÔ´-ö|h­2±êam´v>Õ-±­FÛ®kIFúÀ{‘øáAâ~h™\3ûiBuqMÂÈÃ§8f¨X"û£_›L/ã³qcà'˜çMïñ€š³½ÈZÃ¼fHc)/jºÈØ;ƒÇm%ÇC÷<=dí!K WÚqE€kž@xdåìs‡¾@_à]¢‘,_ýUbW›°a’ê³LRÝNfFAù¦È¿¤°Æh‡5\Uj?ÍQQÃ¬Cõú¸ä(,@Ù	i» ïqµ›]Õ.„÷ó¬¶¶ãt;>±&}±IÈ dLÁ­ÎôiÌÖ`ÍXÏÙÐm³1Y3Ã0ÖÍÓÅAN‹¬a#$6¢mÊZàædad|­j•«®Nƒ¬ÛbkÂH}hí]^U¸×óþv!»Ÿ_¸>”¤ò1â×Lp5hŽr\mâM‹ó”ÅÓèî‘5H†1—È4±ðÍQ`[¶Bzçx/$=JÅ¡ûåíŽ,kyÖg€?bûý°?Ë€†*	ò ¾&”öÖ„ôQ«ìL.¬ëb[ùxñ=T×läÝ®v?Á¡"Úš(g÷ãZz¨g‰ý;|C¥mKùþæjÆzxÜ¼aÙý&k†aÆ*ùúŒÝ’ùF¥µ8úHú"m±sIÏˆÚÛ×¾VÇAâUe÷ãõ!’[Œe•ký°¯dS¿9%d÷ÿ"¦¦¶Ž­Ch#ìL\÷Az´W#ræ?éÄž6cÊÓÓ»GÂ 1 ²B1òýß'Š$ºä0Èîàœkeäø£Ä†”„Ajº
k{©§iµ:^È¿ª:akYtaÏËºÞV(ºƒ‰ÀMþs_¤‚ ;®«5rüf[¬m·ã­"k%?DŠhåŽÐÛfc®f¬êpè–hèM²f•5Ã0c• FDb¹(ôòöFÞæ!kÓœbÊœ#¥%¶¿I&R¥A•5¡BÖóZÊ+.N„¼ëìš4Zk!k‚ªÚ‘"!›2ò=ü)x€¢Ÿ*Ë™ÝŠÿ yYÃsHùéÓmYC¶$”Ó"ëíD¸mpÆÆ¸nÄNR7Ð³#‰íp€Î¹‰•.rrÿ¥Ø~€ùÂH¸-õ´J×öêj…*lD”í ïŸ­°öïÖÕ4RâE0JMk45›ÝOµùH#Ö¥Ä&k¹å#kÖ`ÍX(GãY£›u¬0Ã0VÉ7ÖbQ9a#dŽq	Á;&&àÜÚµ<ÈJ×êÂÚ ¶Æ_xo‹Y»Q\S{Ã„ûªÑ6ª¨á%¾¶oû^N¬!„U³³EO¤&z‹´Iæ	ã4}»CÖRˆy
C˜ÒD„iæ­ð[xšÇóòž†á°ðk:ah÷TSÃph}B¤Ö4]D#ûéu¡²¦ºÆš¥ô_5ò¥*k„èU;ô¶òŸ¹—Ðj4\dó GÔ–Èþg×6ØÆpÉ[³ UÜ‘ûlÿ…Œõü´5¥I!Z^ìLÖÃ0Œuò4ã¬½g wtL §ˆ2lÍ_ÜéŠ°)ƒ¼„ºÏZ±µ:aäU§ï‚dM²ûYÕÔ×ˆ#Gf¼Ys­ó ØŸ˜AZ”m’Ýˆamûöx‡¬Åœƒó'ÞhÅåGŒ$öGé¹ÍÕµöØ;äa÷â_§ÇötdË'ÖèÂ ðÑ:	²NÅÁÎ×|­|ªj·ÖÛ»·®¦²¶MÃ²SÃöÇí†JkM³SK#°ùq÷1c¤LÜaÍ¬ëáñ² ¹´†ig²f†a¬”Çç·ÅÖ¦˜à-S¢yF‹g"†„Öqgim K+kZX;³µNÛbWŽöÊÃ5{ÕH£5×#aD]-ç°WÔ¶|×Þ³FAŠ±Øšlœ6rŠÏ_o?´<¥0z&™Âè†‘SXp\MzÄ)d[ëœ#]äçDoÉ‚Dï7ŸËøí}$ÕµvÅA|(º&ŽÅÆUuWS'Ó.gu5mä}zÀÍ$HY7taÕÐêƒ¬Ñ-jiÛÍn'©KRiŒÍ7õ6ˆœ¹š±ª¿ábôŽFÄ÷›¬†akïYK>Î'š‚O4Í1$»"cm}uRï‚ÄUçA‚^¨Ûb×ZV'DÖiþ<kv‘5täqr^Ï^sì¼ï:7reÍó˜ØÕ0”¶ÆëyŒwÉZô!¡G²Ö÷½ËslIÇ37ß–jdŸí kP5G:VËš¸šl‚Ü“¦}h±†áB—µ‹-Ö­˜Ñx³²†ÛÒn¦§Œàj8‘¶ù°Æ%Ú&%µ]A{x %Äí'°mv"eK ˆ†?ª¬ñ·Às5c=<~ÁÖa¼K¯5;°i†a¬“'ÖßŸât¢ŠZ=’F`k9¦F®]*¯9¹T×ÔÕ®VÖ í m±Áë]Šf÷ÏQ³û?&A¶øm‡[ëFD0Ž~!0ÒrMd¶ö2ç„eòóÓíM©Ë‘ÞqemIt³w^<Cä(ÈG0ô—ØÆV*gÜ¨Ûçd®¦-ÖCSS«ÒEhÄ[Sû‰¾ÊT%;{ëW1hm­œ[k­ÉÚ?rµŠg¼ØÈš.¬›†o k,h@U{EÓJMM»a3rÇ}Öšakâ?hpÁÒX›¬†aëäëéÑ"K§±Ì‡)F®?–5ÄÞ‡ëiUe­Šƒìx E0%aä
¯¸®÷];k´FqZX£Øã·ÑvGdæû0ônW}15±6¤©äy–k™-5¾Ü’µO_¡d)M,¸Î#šaÇ)g~‚9ùQòLHäÜ€ßK,ùûØAtµEqµ—)`¤˜Zq5ÜTÖ@Õdô2”—:™¾yÒ;ýhù§þÁø~WÓdv2^4^ÓŒ­$ò î¶Ý±«!p9MP;“¥Œü¾3W3VÖ›ØlÈÕä‡fc²f†a¬”Ÿ±	R’ç)ø|š8©Í£—ø~ÜÈ,*\Ýh×‡|‘ácd÷$?Œqz+]ÆTËþÐ[U6™yRTÖ<âîß+kè(MŽÓÁÕöÇ}Ï%5×µ£/zšÇÑŠÇ´¤BÎ4Ì€¦[qŸžHÍü˜¦èãDÏÌMäº9AÖhŽe	£“CrnØ*,Öµ\û…ãûbþþûÙÕâØrdYçö—ÒÚ^¬i²ˆ¨×BY¨§]Ì…,t¶òû]žÆ5µ²ó±Á‚`qÛlhÄ7HÖÊæÆˆ†aDr?¯TÎÔÕŠÇ}±ôcM|Þ.<,²¶µm†aÆZy¢Ðþ™$²–½çÌþàÙ4*H´8“´JÕêx˜šÓèþÂyvÝ»Äóß|V²ûEÖ4ºìé—îÛÏ&9º¾å$ýSÄ¼(
rðü…DK…dYËßoÉZ˜ò8Ä)º3ùí”×"ñ åÀÚÀ=±iø‘‘›¬u=éV¿?:Ø-2Vþúó¿þJ®6G>°Fz¦gÖ°>ç ŠªTÕ˜â^çjVnË\š4¢ÿØ`6 ®ðùZ9å²%RöABÖxMv¸Ç§6xqÅìd-ã¡ÌËgh¶ÿQ5ÖWXœÚ«±ŸÃ0c½áý'ôsFi-Žé”±ñ1¦èÙlPWc[Ãëje/ e5Õ5iŠ]Ëšó’0rYÃþ¨¿¢Kù–6Z›ÂPdMƒûÑtvÓµGô¦î!FÏ$.¨¥"ØZF($Œ5=½%k>„ÖI2AÏN'N‡ô
˜P¼s-WÖ08<µ¶EYMh¥þˆÒÚ_ÿý7¹ZòCG®&†¦Uµ*·ãyClár^¿ÞÔ”’åe» ïw555)•¬@#¾SÄAv‰ß 6" ,­¤¾•7±­3W3ÖÅçfù)Rûë$Ã0cµ‡ÖÞà(|`+ÇùmN‰kM‰ˆÐ švQ×ñêÌÞ’/¢‡Ö>ö„~½q:Š¦ë:»èÕ‘5M¾ß÷c:ŽjD4×z(3eœÐï±ÄÛé¶¬}‹!8gÄÅ´ø­	4¦Å|àg‡ÊÝQéñŒZçdqN‘ÜnÓkX^ŠTöübGÓ™êØª˜‘ÞvA‚«Át—óD6²lšó†Ø²wKÌ‹- ÕNMªkXk3/Ëi6¬®f¬O_äˆ'Øí¤©¼í6Ã0Ö	ÔãíDÇÖflác]aMË€Ûa‡ˆbR[»vbÃ…ÒZÛ^«¬I[ì"kus5nòÛy£5­«ÁnÞé†Á¨¯-=±GG3»§„Ðî17ŸŒ9MO·ž[ZN¼£’[jO·YÊ‘ˆgqcHxjÞËcC¤rh]·ïú’(3\­gW“ß<FÌu¤*Ûž8ðU'Ag+ïý_òBaÍþOè.WS6ØÜ¨wú‡ï.R×À×ÐRmÇ½Ô™,€Œ|«ðÉ-æjÆÚø,ªEÖ6&k†aÆªyz{Cdž	DøÃÔdˆ4qÎHOó¸jÞ…ïª´¦¶Ö	Á¶ØH¹ÔÿZ/ËY›£ãì~\êk{¶5¤.öøµOa‘Ñ˜àl1Ð<!¾P™ñ¦¬¥}Ì‘Ý/OyJÎ¥yšápÜimìÛ€ÏpQm,9Ê¾%Ñ"aÅ¶Lœoëàjšy±°†YØWÁýºò>ôƒêkÖûNWSxs£²˜Yi¸†%#»¹v;È¾ÔÕ$»_2EêHºhiÍ°µñ?/Ân+Yª[ËC5Ã0VË×ÝÏ±r†+' ºYƒèhcìº¶v±°v^Zëé¥²æ4aä‚¡½VGÔ°Ô/ê¡µ?¹Ñg÷k¤ZÎÀÝÖ “lMÒ;EÔÅP£×Äy*ÆuzÁ¦D”¿Ýµçˆˆ:š÷	†ÖúéÄ5É8º˜“o‡St#G‡¬ÅÃQ9ÈH&é²GÚnY:ÄÑJÞŠä@gÖšÙ_ŒM®ÛèGÅö,ò»\MÚ§‘©¬I$ÊiÜ¿‘‘|¿Ð5I‚dÃ Y“@Èí»¬é$_2W3VYXû(kØi²f†a¬™Çglä›f©+å¥²†9JU-rùÇébäXg÷×‡Ö¤´Öki­sKŸ±:§_V·Ñìþ"kZX#«apN}È3®hdQ†4‹¬Í'ÈÚ„ìþot;HPµŒ’\Èú_>Ï™Ÿw>'Ä‹DÄ÷ý¾mûîÐ£4úžêjï¶ÆÇù´¬v­¶Fö««ábôÈšªØwUÖ¸°öõãûö@niÔ“jäi/¸€¶‘Ïž5Ä’F_^”M“ú1ÀØ´Í(k|Ý¬«ã«Z³ÅÄ=Ö64Ù‚ñöÎ ·q\	Ã“¤áŒ3F#éoc¨%@«ÜqE€kž@xx@Ÿ`VÎþÝÁçx—È1¦—¯þ*1–=î­ê“LRñtzâÁú›"ÿ2ÃX-÷Ï‡¢*pÈšÐGïcdc[ó!†¥ck…á4»ŸnÝ©•µ·Å.	#uoµz±”<¢Öþ,Ùý";3ûÁy×4§Ô8êcè9__:Wcàk#
l`zCÔ
}éÛÓY“Þá8ª§1ñÇ’æ®â8Ææº!ˆ&6TTkúaOÀ¹èçni.ðá3¼#u5u5\‹ºO“K{a³sýBiM.Ûy›«‰ˆa¸ÃRBEvµß%'’ÅLã©¬†wYÛÄÆjEã’›ÊÍÕŒõñô	l¤¼ÆA>,köß(Ã0cÅû “¹¬†ÂZN‘dHÜ;É†ÁðÀí²kz\šÝ_GŒœØšÊZ£	#Ëè5Ü2VÖÐhm@ÂÈ|ñ>H1]ë\ß ÿ4b ½Ã h)&è(­0Å9¹ÿíÈÆ•¿}½"kcô‰ü6Gú•)Ó<ÂBh]H±oÉ
œßÃÏÚBÖ y[ÛqM‘'14™è®ØË­¥µ…p‘_Bz³Ù.È›\½ÕÞ/gÓØÝÀ–›BýN£ÈÔî>Ñ€£j<ì`¸K¤ÂÏâh2[]ÍX#_6w%¹Ÿëkø&k†aÆšy:Œ!„÷ËH¹«sÂ“B†HøZÔdTÔÕ¹TÕJe„ZS%{­vD.ƒ¿R»b£ÑZ•	ºÞõ»®'_óQ¬Eä7zŽMáÜË¯&rUÇ)?_‘µ)úÈÕò”°>œPN‹):¦'ägíö íÝ°Û!÷ñ,š+RÇ@–¢nPT­65-¬ÝvlÍvAÞèjà^&²V\ž^Çïn¸¦&»#IÙˆ-—Õ4
RÖ5ôåYÖð2W3ÖWX+›Š9
KüÛôå7Ã0ÃX+/GhZ§1§‚éƒ‡à`yéÁ;Wûš\÷AöªkLK7èTÖÚª-v)¢þ•ÌUÙý?¥ÑšÊš&Œt£¦oºÆÔÕ8[$0¢l\Z™FÀºŠ•ÃËµÊZŠRoÌ-Û¦)6=:b‡¡u,„Þá…#kÌ85×öÃnIÕêºšêššØé&H¡“ë×°]7»š¦<Ê6HZÄõo¸¼öˆ™ukKÏø³&,n)¬[«Î¨©¬•GK+7ÖØcl€TÖøÉdÍ0ÃX3ÏoHŒq†¬!†È¥5ô{öŽµ+k×ºbãªÎ¬±ªÕ‡Ö0ò_ÈÚ¨»ñ ÖªÊš43sPÇ†f'²&ÖdNYöAÑT9t†Ý o/WYx%_t1§ir­ØLù{ûB»›i¹¯šwø|ºs®&UµóªV\g9®&hk5­¬ÛJk¶òfWY)¢14£
€½Wz_<m?QNÿVÏ¤ñKÙnËËš5Ã6ÖÈÃ§ÂæãÖdÍ0Ã0žŽ;_š«%edÞû8&‡ø:òremM(ª¦²¶xhMDìõL‡µŠÚhmî³Æ|gvzQ®ÇöCx[i>à˜›Éñi5ä8Òo$®Ç—û«²ÆÍçBò>AÖ|ã¢èŸ¸ w˜ýÜ»šsØŠOf¡²¦; ÿ\¨¬)êkIÃ¯±³]<ÀÕ. 5ãójñ1ÙµõI¶mñ~H>¨ÆïÒRªj°µÚÓê˜þeÖÛX%÷Ÿ±[Xehñh²f†a¬š‡Ã!O‡)¨ÛZ>Æè])yvµ£#üÅ<ÈáäÐZ]XSAèHoÆ7j‹­õ²¥ŽØ¯º®V$kÚh®†]zf­ï›Þ5û¶iéîz¶(iDM`ä¬‘ÉÓdä8q«µérä×LÄYË¼mJ.p)2ÐAÏ8([³ëHIiîö;MY:¶vÖÔÊ¼£{n²ÖÉÍ×í…5ý$kv2êfW“ ÈØ Û›4TãŒþ»»mé§Æ`{+"çN«if?ìnk®f¬µ‚t(Ü zýù7Ã0ÃX-÷/Ç4½2wVƒ¸Lµé8¸ÙÜ;%D**µ«i§µgÖ´²Š%Ú{©¶¢¢u']±µïäj%ºŸ^Â®ëvûù÷<{ùäh^š&É¡×Îv9òë£•–Øq„­Áø8©„®ùY’CdÓ6›Öw°¬j5{.ÖäÂýËìläÍ® d"k¼’ÂÚœýˆÐ/¨Z9ƒ¦aý'ºV,rú¾ÕÕŒUÖŠ¬UÊf²f†a¬èÇx8Žéóy"PY£‡ìQ€‚¥ÁrÄÕ<n¥—×IrÿÇ8HUµ*»¿J©¥Lê§úY­‰ªÎÓµ­xM×v;äŒˆ¬AJ¥º–hŽòs“­M9Žð¶éùJ_:œïß‡ÝBïbÑV6ç½‹)ò7÷ôA´¨†Í´Ý÷[€ßieMêjxÕQËÆÖ^+®¶òfWØÉ¦&{ Kà#I—P¬‹eMc[Ú¬hªmô-ìÏ¦ÆŠO¬Ý=nNlmk²f†a¬šÊÕÀé­‰ÂëG¶µ$d™P’ò¸—Kk;!ÏŸYF¸-vÖ/K]/YûßÏYÖª0Há½½º9/„˜¹†¤Fª¦´By>†—‹²–²÷yä Ð¼}ïù[@¯ìœ“âÁÃQÝSY#·úç¢ö!^D9i²v±²Öòî%ZÛy««¡ËEH{œÓøÑH­ðÀ¯
&³žOÓ’/ÊtÐíè4ÖÇýïá"n†¡ƒUšÃ0Œu‡÷¿½ØR&rµL/ÉÁˆÎªÁ>´²V‡÷W}Öª]m‰ÒZi‹ý£ª˜é„¡š^ÕëæÊÚ1“¬!a„¨
k»¦…ÚôÞ5mïƒ\‘5­42?(€¿áèÚ8^‘µ]¢+yiS [™ÃY2\Í3RŠìÑ•=ö´=ÁöÙ‹­Õý°ñ­pËTY«mM¯ùÏæŸ¯Êéš$‹S)íq3»Á~J±Œ×ÅÜ*[ãÇ’‰¹|í³ý31V©ð±5“5Ã0cå<¿‘­¡ Fžvó„e¤‡œ@ä}‰ÆóÁýâkjkgÂûÛ3‡Ö\„‘å*ÚÕ·þúÏÏãè‘†OccM# kü[Éý!øßÏ]¾#™(º&zš§ÃqÊ‡Ë²½ép[ò!Mµ”c„ïe¸žVpd­ú–þN`lì]·UÖ ;±µª)ö¥å’WAilä-®î8ñà‘†Í†ƒ1n?iÇkYˆŠÉƒ˜›,0)ü¾¬póÚ\ÍXgamûQÒ“5Ã0cí<IÖÆ)ú‰Æê’b¤IªkDpž[c_-­umM]…A·A¶%a¤–±×*ÀÉÝPYû7ÉZº½ÖÕè"ÁéÚ–F>ÚÕ6ÎûÆæ	9©–°ŒYm-s£5À±¿=]Üé|ÂÆQÄÿ	cÌSŠ+VÚyd?4Ù¦kk¹?÷HÁì*{½é¬kš‰¡[<²Vüìã-—"YÖyù&Wws“µYÖ¶ô$yû R¦†¦rFsyâYCûËª4bûbSun?–$Õ÷ƒkX‰¬}1Y3Ã0VÍýáï¿SŽqœDÖrLÄœ½!yQöõÕôî4r‹iÞu­
mïÓIÂÈk½óQ—xaÔ‡’Ýÿ]±Û½ÔÕ´´F:3ŸXkéF]Tlœ>e×Äh˜ûÚ×KÙ™1’¼]”“ÿYÖFNòçdHùmzú®£%5×w|tnÏˆ«]W5¹*´°†÷bf2éÃ)¶òFWS[ÛnñGIHÛÜúšsùËöG™UÇÞ¬©¬áË˜~×\ÍXù‰µÒe~C¦	_ìÿ)†a«æþ™zAO)Êñ­²'0$ùÃá¢÷cô;­Ñ]hfÚ¦ZSYëÐ»$Œ\ßûøzî½¿¨+öÈ]±ÏYÛƒv`Yƒ¯9Š¬aòqn[#e›MmÂNÐéù’¬¹H¤”`¶óÊ92ò‚®u14ÀÚKwlQ5nˆÑ(H-¬îBÄ›ÙbeMimäÍ®&MÕ0 °%Yƒµ•º™æ‹("r²ÖÂÚÙîØæjÆjkäfÛ#l	œ5Y3Ã0Œ§éxœ2‘r'¸ç%&.²Iiì#\V5Üue­á—ÚšŒ€’0‚Òš–ÎtZF›bÿ Y“®Øà_ßë0È}×÷h‡šÆÌHî‡£¹€ÒÚlk™eíÈ©/—ÒXÖ>®:™þœbÙ5}ßôÞCÖš–÷|¶ÝìjJpÈeUC“±ŠQSÃp­ª¸ÆSläÍ®¦çÖ/¾)²¶-»µÄ¦°ÈÑUËš‚/ÙHcÍü!å´ÇÖ¶4r}Íþµ0Ã0VÎýÄ	#SŽ¨1Áç	'³ jœn‰àÝYzw!’Ñ|‘öDÖÂxüÉ²¦¨¶½Ö]°±ª·‘¬ý=%’5­«áÖÊZ‡&gmÑ/I#"k°6ñ¬ághŠM÷|jí¢¬¹¡GUŽÕŒE‹k…”rp8­æ]ƒvrƒ¨ËVsqíJUMÆ÷2Øì,º†›§K» ë¥ÒÚ.ÈÛ]Mum»•Êš¤‹hQ¯
­­ñ ãiÎÈÖäÙXmamóHTí°é&LÖÃ0Œµó2ËšLB·gïÉ-ÖËZÀÃÙ¶Ørï¾Öà.²VUÖ´-öµzZíl¯ó\ºb»fÿ]*kÕxlAlºÁñOáY”Ã–NNî'FÓI;€£Œoß.ÉZ
!Ø9o•ÚœpùŸ†G}­í­5}OÑvEÀp-ÂokiMTM³ ;ƒTO«E­ºõKÿgïŒqW’0<òdq¼<xLìì&†:ë¨ÆD'}^à%s‚Éït=‹Žá	·þ*¶KjšµSÕ'²»)ï¬G¼oªû/“µÏ¹ZÉnS«v&Mì_à"ïQŸó²âY¾b®fÜ({ŠÙîÐmd_&k†a†ñ'<e"p~Kºb²‡àáÙÇÿSY£ë¬ÙZÏ	#zhMuléqák*k‹GÖ@Ë;¢ë}`a‹)¶O8×ÄÍÀ§02NÇãñt¸»"k‡i	-²¬ù±Œ8.Wò|Í¹¼Š¤­–ÒÚuS“!×Ôò”£ ™öz¤ÖÒÔÑòÊvA~ÖÕÊÒ[Úf7Çöç ‹BÖ”M~c?¨È2ïŒŽ‚Ü!þ‘~«äB„Š»¬í¬›…a†qëÜì+Ä˜pÓcŒI”¦F û~1»¿[>´V¶Ånébt¤$Œ”;u·c±>_ª¬IWì\Z+
kuQ"êÖAÖ<ªb‘HÂmå8¥Æ‘&š×c7þx‡$O‚X4Z„Ð^k°[QlGSR¢ëëºÍþÅ¯ëa9]äYcûÙ×Z=³ö› H¹Ê×;Íûo ºÚf#]säŽîíTô¨¶nkûÝn¿ø¾¹šq«<ÀÉî9r£ªVá¦ñÛÃ0Ã¸qž¦4JŸ1ºRÄŽHÐq-%\›m	˜Úrd¿”©²6JÂÈ
¥ÃéJeí×1ù~–µ\êj„´@oêº–t”€z7‘ã(•qöRÔÓðÉEÕŽ‡Ç+²ÆsêôÒVmÀrü‡akì¶p¬Ê9„¹‚¶¶’–—<çWKëš\í|)ÖÖd./îÿœ«mŠGŠ©î74€YÍ+¯÷yPÖöKš«·ÊÝ7Ö´mf®­U2V&k†aÆÍóHâ"›s«5rÖ	îqp>,Å÷wxéýêj—ºÖžËZÓ!aäâÐÚkijë§²ú6WÖŠ]ò}:ïè»Óè`V²Oq U›£úGYÒ8eDdmº&k1M1š’'Òqlæ†‹àiHCW»Þyü$êŽfü5\×<ù‹IÜ£Œ ÏúpVÓ†Ø|‰ªåWÉ¹¢É«¼”Þ‚ûWû ;T6ÛÜ»Ô²%O“‰æâ}s5ã†yäG•µ{ú½ªðªLÖÃ0ƒøJ†Â1‡)çF9#aà¼{šÉ!<FÐÉ­¢†×…­†SPYë}:æ„‘¢†¦¼®{­ý:Ž¡k_^re­”µ–]ßºw9¹?pBËÚaLØÉÀTajt¾_‘µ0L($`$EÎìÜ?  ¼‡!uWKºª_*kÙÖVêjp1e¾È¶¶~bM¯…—Ðü°cû3wÉÜp¼îÝ¶Â­å3B[OY“¹=F;–cÜðï_µ'+S4ÄŸeí__Ã0ãÖy:REØài	á]àÂZDxÿ•„WnƒW+uíb¤>´¶æcåqµ×Âå~’¬XÖrÀ£Áý5ÉQ·l›bš¸£µ„@¦iœ­„ãÓºÕ>!ð1¨8ŽL
ôäêŽ%Àˆ¿kï;þÈJÞÉ÷ea·,ä•'–¯VL-OçN–§ò²,ÈÏ×Õ¸öîWUq)`OÌÚ•ÓB
ö[yWG™óWöæjÆMóp¿»”µJWUe²f†aÞÏ¥¥iäð~Ö5k‰w!%L†…„‘¢¸täRi-·Åþ©:¶\_[×¸¸+6dM6Aª­AkZü5ºþ]Mzö¨ b’óy#}êaš›aSf?y/ž®Œ öµQ6Ø®ÆM»²óçm]ËV¦’¦—ZšîÄKÐ~Ø+'ÖôZßÙÔ¶ò3{ 9ÿ åµ­ôY#æªZ…EIiie¿löæjÆ-ŸX£Åð3¥2Y3Ã0Œ…ðþ	©ÇYCÃìliÞû¢®¦¶VTÖzV5Ü0¢²Ö…ñ$m±ËÚµw”Ÿ?YÖ\£#ÙÕÈDê¦ÇHhÚŠ¡|Ê	²Fj&1üÓHemúº^Y‹ˆbáso#V16Y9H«óî½1vÝÐ ²¦=ÔÎ5C~Yi¼ˆz&¯eAª¤•õ6ÛùiW;JB˜­{‚«dÛÕFk:ìq™«7Í~›.©pó ì<§a†aÜNG–5¨-@Š1Ðã8ø¦1JY~¡°æÎT·–ÖV­u!iÂÈï:«éI Y{Y+¬µôÍÉÅ“Ú™Þaäcyø@ã$"k´€°Š°=^‘µ[bs¤d–5¤‹ðå¥¸FtÈOF>3ú‹ZG“[ŸñµÔÖ2m~ñµÚ[×…µ¦yüb|&[d³¡k‡«‰¬¡Ýfe]ÛŠ#k¶Ò ·\X{©*eØìx2Y3Ã0Œ/ßO”)¡b4	cµÃ8²Rvø‰«IÛre­Ö„­¬•	#Ú»4µW³5wSY‹®ùKÏ¬Í´5Õ±Ú¾K¸f,W;GÈÝcLd©b«‡#8}_•5ò´÷)ñ*¥È¦Ftr2ŽèÙÖú¦w83—ÿ0.U5Üçõ4ô‹gû /¶@ò|-òìÒY&ÁvA~ÜÕ´¶¶ã>krb­‚«š+kºÀÈó7+q7]Xã]Ú
[w@RÎˆÉša†a0|bkB\FU“Œ{^EïÈÕà!*kyÑÑk±+¶Œ4õRe­­]D[ì.%L®LñPvÅþÏÛ!ºú¯˜ÚE¾H+ZÃ£ éý*çX:#gŒ¬EZ¦„ÊÚ$ooWdm…4Ò°Mjk@ö„z`­uÛÔ"G$y¤êÚ™ }â¯˜žÏÛ¬	+…µµNØyÒ-š_¿uµ±ÛUÉÚ=dmWñY5°Èš4h3W3n¾°†ß%•5]ÏU¶Éša†aPrbëÑ0‚82ÉÂû…4?#²†	teeM©…¦.*kš0¢‡Ö®¡; _/»b“¬ùZºbÉý³§ah ªºãhËˆýž¸9-Må²r<QaíôtMÖ g‘€ò#“ð€ïk¸*~¤iJ×7Ò;ŸZ›Ñ<™t$ÖE$Ñž_%¥˜ÑÍCYm³,ÈÏÖÕ´m/É›J+j2]G[e£‰veu5ãæyØHËBÝYåöØ•<~³W2Ã0Ú9N	¥[CÚHÄÛ ŸÛ¬Ñ xÎ\Í-¥Aâšs[{^h‹]Ô°”óŠ½ýûBÖ4R6Hß+¤ç’ZŒÁùYÖÆ„k#R%£À8ÞNÇÓÛájem’3kÜYÄM3F ®ÃÎŸX5ª—M™²ri$Þ#øy¾x?RöXÃk±´¦Â†AŸ‹6kuÄþÔÈ4ÚW8´†=ZûI»nlVW3Œ¹°Æy=š ‰Ra²f†a—<&4ÆFd¦y	LdöRÒ [ÃxÕ­œYÓ}YTÖÚ²-véfò´dí˜|?WÖÊ–Ø5ÛQ‹TH”»PØÛH´4N8±v8¢ºÆ=±§8Þˆãë©™þ÷ã(å8†­±SJƒÚàj¢ëõ3Ï-ÌÀ»t—£ŒªlúU58šºZA™Ù¨ é5¿a» ÉÕ¾Ý(Ú†{¬U[Ï«}DÓöŒæjÆMs÷°¥ß¨'‰[a‡7*z‡ßµ_Ã0Ã ¾N…lLwÇPxŠ`ð>¤È•#®¯y'ƒZÓ3k«iÚ[h{m‹-¼.ÖÖ°Ð7p«¬ý:¦ÐçÊZ±’¾¯HRí|ßÒÀ%µ‘5ºâ„ðÇ}vŒoo§ÓáÏuY“?0ÅÉØðSˆcÄÒK©Ñ;ü‚ƒ¥žÉZvµ"’çóžØjl5¾–Ñ>k¸•"Q„¿=–ËCkÍÛ	Wû8|jm'Ñ"[b%Y¤Â›t-}£e‹~	¥VMƒÊÚŽ3|ÞŸí·Ä0Ã0ˆ»ï,+HÙ˜­ô8¥˜ØÖœð6¨Z	\Méqi£5¦Y¨¬i[l”ÖXÁ0éxÿª¬¡o_ØÖJYÃVDÑÄçwØùÈÛ%'kÈšÈcBÄÈér!×e^gH"2xß…4#9#cwu'	þŽ[kê¹´–+k¸Ï‹gâh˜ñ¬]Ö„g–‚ûÆ2µ?/	æUÑ|­¶àþÏº†{Ù Ym)bdÑÕæ>Ù<b(‘¯í­¼iÜ4wÕ¶D¯qx?UÖì–Ã0ƒx¹÷YHð°5&!ïeÍAuBX´5yim-S/ÅA>v’5m‹½bd¯2ËR™eíï_§1tíËeKlfîCÝ|{ï]ˆœpÉa iÂçâ¶j*k,¨§=|¿.kjkÜÿ·|\Í÷Ž¬¹x¿(Ý}CÔ}×2ÏúÑµº&w0Ý©•µâ¸Úb‡5Üùu±ÀuQv³#kŸq5ª¨ÑY£KJj¹'væ|]Ñ#ÏË¶F²g)wÆ­ÿV„öX›;«íÉÒäÄÕÜLÖŒÿ±wÆº‘ãHÞ¶‰öÈc†g€7:Ãn
0cD@±À„O ¸äžà¢Þ‹ïú9î%ú1æ‚®þ*²«Í“{‚Y¸~K$¥nïZ†ø›Ÿõ—Éd2™Xw_Q²F¸–FúÈ’9X“ä~fZ¬£ÚÐ8kCÓgM­5‚³„‘·ŠÔ…^XÛ=ÕÖ4§è1zŸ¦<²AHãž“ÈLµŒÅy"V£áðõX#Í³À6"ÅƒbÇ¦1ÔöxîÞWX«Ùýò¡¸v×ßT­•·É'µÖÖ5Ì¸&aÒ‡¿~ôEßã«myƒÖ¦ [‚ÄP…•^è¼¤7°ÚÅååõõgè¦èöö¶.qûúúòòÂþ”5ýUõœ¶E‰šÀÚÕ•ÀÚ'.W+wó‹Éd2™L&„÷Ã)ÊÓÌžÁm@°„`*6jF”Ô Ç¢ÒZS´–©haMYLý´uÉ«ÿ¢®ØÇyô»¦µÖ …µaŒal¦äSŽ<‰¸¸·Üb;ìi¬¦<¯9kjp×ò©ŽÎ¾‡Í€¾ÞpÖúkXÊk®a”¯]‰Mû«áÐÎqÚc­Ñîü¨[–ã×>ü.Èw³Úvë¶\M³Ù’p£ûT£ q¾%½ÿ3P«]¬àì–ô‰N‡êOê`@ÜÞÒA»]_¶™þjÆÚ¿Zrª»óô~„nqgk°f2™L&SÕpÚÌšHÒY-ç”¤Yô>àMÀ¦¼¦ÖÚ#µÕ„‘YFÖ LõÔT'X;Oƒ|µ°ÆyýPßgÀè<§\¢B&†5ÎxäÃÅ
¬N•} µDp;Æ‘Ž@+˜æ%]¤gXO«µÖ”Õ^4];ï®VfMYJƒÄ©Ú5q|žÝÔåãßy}ûž*5œwÅØà®ƒ£ÖÀù›ÊµJfZ©VoVSHû\­–Á96HƒnÃv#f3h3ý…ô¹ë6À±­˜kUø©G$¤ì4X3™L&“©îƒ$_i–z,dÓs>"åœÓ~Žþ¬ÍZ³2Eµgí¼dM+·Ú„‘6RW-¾ý^X`íÁÚãkmÍÚKV#ƒ+DŠÃ#»…tÆ(OÊOŒ‘yœÙ7®]¯|frÞó¦El?`ˆÄÌH_L}pLj'’ª/Vµ3"„&œ­µ¶¼Rn¹Íšâ$Ð¦ôë±Ú»â¯\çh¦ÂûÙ`ðjsû;×¦½\€©dáN¬vQ4jÞî¢éeLXmA°ÔêÚ•·(»uÅgûè]McmCDæˆÈpbpÝfã¶R¯†»xÉYi§Éd2™L¬ë¯óá’éˆÀIcV›÷d9MÑ¡´ ù3ÉþÈÖYj^ìƒ„4Áþù‘‹ÖþÓ&Œ4È¦c«uXkwArÒÇbè	Ö2 +ú˜8'„N5zJÞ	Ý¯ÀZÚyÿ$»(éKq$…>ÐŠêCûÐïv/ãû™µ0®[k•Þ*©•C>ª¬¶Ýß&‹dnnGÁýÆjo`·jm!uNiÁKÓË†ÙjB¤»L/­sÑh€:×ÑR©R­sj¸9ç°ìêKXd3b3ýÜú,ÛŠK½šhs——[¾Ý¬™L&“ÉTÃû÷ˆB¬%Y) 2Êp‘RdLc{[c«8c#,Õ¬ê¬©µöÛyÂHÞk[ìfß£êw}IßgíŸk¿-ÃT)êu>%1ÖÒ(¡Ž{Ñ<ÃU£ú²k„h™wQb(ùéý8eZÒ‚<5OÏÎù"Š¨Jk5R­µÖYky­XqMÑÚš±¦šsÛ+ûñÞXí½yý[†6'°ÆèTxiÓÓˆºÎoÕnÄMëê5†oÖz´ºVI5¼L+5Yãëzù&œTóf»"M?qÅšã_«©•dHØ×gÍ×ÖL&“ÉdÝ“«v<æ	Ü’²îÑ\-šDäÑƒJBLÚp®B¡·¶dMqm‡Sˆ¡5m‹Ýâ˜\/ÞÒ{€µ}¬5¬ÖÂÚ_øIX3Œx®iž`eøi²÷Sžž+ØÖ`¬61‰¯Æ¼ùÛ’ÖbO°Ö÷¾çgnh­:kmÂÈ“®åR%PÇp÷¬ÎÚŠ±¦¸†áDÈ
ÊuêïŒÕ¾Kç`G¤DÓº@b-¬1lÝÞÜÒÄ¯øfcœÚw_:,j1ærn7CÂyç<Wž¤ÿ™›égì±æH°Ñ¶¥ýu'Öp1ÔäèÌY3™L&“I÷A²«63¬1½äibiJpÏ’ŒÄEO§`¢9øSv¿’ZÝÙ8kmÑÚ?´-öú¾ÇöžtÅ&X¿=´mÖZcm@Pà4_2!ÇÌA*sÊj{æÔ#Ó¯×jÖöû3Ã:ÓEqÖ¸É6)”z5¯¥zKÖš¸eªÖZ«¦Ú3åÍò¹ëmÖ„ÐZsãâÉ^ûèÁýïcµn…äœNïwñ!È¥úc•Ùªd§bÙç¨i!ºYÒ!»D´íH@9U½ì*³©Waa@gï `»4`3ýdÆ„Þ… 4ù¹ÅAÐjÍ`Íd2™L¦ºòˆHÄ4³ÉD×)>`ïßXÌ´“³ÆQóFª³†³¡5ƒ<‡µ5m‹­Ù!f&½§°–ßkrPRò}œö9Ž°Ñž@`ƒøß¾	Ö ã·ãJäýþ ÍøÔœÈ™KÄj™ð/¢9Í½<ðà‘."OÝ­)«)¯-­µ-±Ïy­ü×|5uÖ4kD·AÞÜŸñwúj@4†4¢´«+'ñ"Ý§SøŸË€¶k (F¨z)ÜVa-²–ÎôV…¥"™«Þ’@•¸”w8¶Ï×Ö”ÍôÓèÆu$çè×«Ð™+ƒþHãÆíõ/&“Éd2™ ‹ûh›Át’ê5Z%¦ý”sŽf0¨DuîYþÕ¢5€Bk(ZÓ¶Ø‹µÜÖ6`X; Öžž^/Y.öÄS)Ö¢'H›	‰i¢æMPØv¸\þíg!);!çi„É–Ø^A³%“§â’ÒŸßÏƒBò²Ž‚sòÑÒ¦F­¯¦ ˆI,>9‡;óÕÞ¦­C®š«uîŠ–Ž‘ˆw+ˆª#¦Ý±_oºæˆÖ„÷0óŠoð6§_¯œ;­±ÔÈRM'í©
¨uÊtt‡€ÍxÍô“ü*²yæÄYc9Ö¶PšÌÎ`Íd2™L¦ó`zô†žçãqN“´›!lÌ	Î‘_Ap×V­=¶!•Ö@";m‹-Œ¶R´ÖJaí¿kÃó+=±5¥u	OúÄy—€5š˜Õ¤»xlôm¸[5´Ñ¬¡}84ÍkôÈã”#ª¸k=¼µ¡‘Y0ëá¹††¨¥¶\³V]8–Ö«	«aµÌjMÍÚ³HwA^Øø¹7³Ãg@B<Ô®ˆÞ¶e«¡š©u¦·:™ZzÃXx+º”t‘“Ý&&ƒ°Z©g[Viì\ñ!´ìÝàèúÌ¢ã¿ƒÍöCš~¼n:‰€äß5ö¹FÂÕ¡ÅY³HS“Éd2™t$‘x¥†Œ”¶kÈO¤s’(Ò¨/Ç8FXƒš]•XÓ¶Ø-ŸaÐ[zêu…µ©µ–Õ„WÀNƒ¤[Æ@X5ñ‘&ˆ}µ=Ä¹*3,¶ýýÅ"¬Í\Ór%FK„°¨^‹p}Ì£HžëÕ|±§	½ÞßÐškUò¢¢Z›/ÒJhLyËËr ¸ßXí-°FXÛhé7…*‰‹
j²V([WqÓFy§m¸WÜ¯’ôX-7WIK¥^°ìS¥5I?‘‰{ºµMÚPÁfÿš~´±Æ<†š5i«†¤UÁ7°„È vk&“Éd2G3 64X£!ŽS"å¬ÆÍŸCÃj˜4À¥f­Mƒ<k‹ý·wKµ8<?<-;k§Š5®ó‘sö}Ÿ¦œSÌ{6ˆ1­ÆŒ€V±òË2¬EB<2ÖÒ˜÷9†yN(\‹lE°ê õcƒçÿÖZ«zXh¸†Sõ\wB²˜õp¬Âš†Œ¤)«a,ox¼3V{#¬¹Ò]ÍaÁ7Kë4iŸ§µü~½.=´åà†k<ñfJ©Ï‘»Ýæ
ð±wWÖªî|íN°F‡P¤4«rü)üòpÍþ6ýPcM~ìñ‹å8êpWCûñËáì_L&“Éd:énžËæÇ‰V´ÈDlH<Lì«qN}àÉ‹B¤U/s ¬ù¦hM´â¬!a$N$Œ,˜g:´¶›ÂÚßÉY‹=`m½'6@eð!øÁG„ŒrÅ4OøÀ±ßc‡aŠ÷–aÍû”çÃœ¥``-¸Å¾Ç·(xÏ¬ö8 ^#Ã6Á$VÅ-5Öpªþ¿!vÉìW\{^M„P“	3ëd¬ñÈ·‡;cµ7æ@
ölã­…WN<Ä¢‚ØÔ^[’d…ÂpK>wÜÉ=ì
Ê5I#jyrQwA"…¿bºQÛÂ	¤ÉÂÉâöÚ¶Cš~\ÅZé1A¿`Xu|²ê†^'Öðý˜šL&“ÉTuù…£ë	Ð€$€µ„îÏ0Ó/2‚ØüXr!5²!ÈEŒ‘ÆZ[Nƒ‰ìúÚ{U
rÊlkÇkO¯Œ=Ì5|A1Å9_d¢#KÆÈÄçá¸/	#€µËeg-¦IJÝÒÄÌCé$…ADÈÖ’÷X/­i|?­VkÍ5m‡]I­²Úº±¦¦ÚNG}Ã.Yûü=}Õ¶"XThUøH	M(M-6¾Pé-ËXaMF¶Ö41Dbó›«Å^ÊB.6Î1ªm®hŒÃ€³%?,¥Ý›e7˜~±V~.Ý–WRÇ)VØÊ?+Üüb2™L&“I÷AJ¹Ú”˜ÖŽ)$ÔgEÙBBJýTI¾(8k‹ÕpÝŸ§‹4iKû µ-vKb²–qQ
k»‡'ÕÔ:kDO='ê˜ƒ\oÆ”–%’8tž¨Ví@é"¤@uÖÒ˜Ù‰›2¼åÛ> `O`-¬zÆWdVO±mµV@¬­·†{õCqeâce$YKÔÊõéÆý…±Ú{â ¹˜†$}§ÅÒ*ÀVœ3LXJbºR÷M¤%kEÕU+»ë–EYÔHsM	KÚˆÔ©mÁjúlNÃþ›-•ÒÍ|ÓŸ®kv~Å®[.õGÕ‘ÖL&“Édjt÷•Ó3òÌÞÚ¼cž¥/6Z“Ø:H´†•4Èõ´ì«k#¢¶h­ÂšrY»^¾-°6ö»µ>kº2ŒžêÈ*ËèÁX¼ù1Œ¡!Ò#£qEAÖè¥ëEXCâ
i&ÂK}t¦‘‹Õ<ö€§šµ¡§«7ês·ÖÚ30lq¤ªºoj¬)«©š°G™X¸Ëk}Ã-Y» «}¬á@z?V‚EÐvI­™ÀO¸>ÁRE6LºÂKg¯H? á0¹tåõêµêÎocÉHçÈdÕîÂXÔ÷´Öœë¬zÍô§ë–Y¬¨Ñ!—jó¿DÐÝÎ`Íd2™L¦&ÆZž(Ÿ>%Žº/Éqhæ}aL£Á«ú*EµBjŠjø`VSZ#X›¤-vKjíŒ‡öa¬ýû8¬=½Z³Ö3ZR¤§ò=yÏ–1¤˜$fä q·¹û‹Eçñ€÷ÌP–ïB¦A¾Öä©{”ï[ŠJªí6ÈVê¸ñ;–¢û—*ÖÔZSK­‰ð—]ÿcïrãF’(:e%hS6cl ×Þ5¨e-¸ã*®	nx^`Ð@Ÿ WÄ\¤.à³èžåÄŸ¡¨J‘#÷@öÆñEf&É’ Ê€Ÿ~Æ`µgŠÕ\Bi"Ëë a4\Ó™9 ¾	òº‚Í'Ö\_ñ	¿‰°‘£dnù:È¨ì’·ìµè,ÂŸ‘(ú-$4{g®tldJwoc7dègê˜ÆO*„âP+­Lþ¡/q>oÿ
…B¡PèQÒ{]äk‹hççYcû{lDî= Ì–3a­DC]'|™êš5ÈXM$Ekyô¶Ø»íÖ6e°ÖíÁÚ#ÇIi€´cÎš´ŸaNðáŸŽ¸ZP·&ç‡MXC&Éº°ÔmV“ßŒ²5D—\½kxkxßõ>Hâ–ãñ¬iÍPÍU“ZÅk~X5Ì<yCvA«}'¬5zÝÈéFUR¾¡[†‘TµZk[^ÖÜûRŠÓ™Huæ“­µX;¢µÎ[¸S3W«qzúÔÕ’×°R*sµþ <ì†Œ°‘ÐOÓ«;1|¦eQþ}ÙçÞ·BjvN
X…B¡PèRï‘‡¨š'ì…TB›çA4k«5u¨|HXôšé¬V9k»5kÞÛ`­r×žE·?¬}z&²ËP»“ÌG…LÝÙ)Ì5d¤¨Œ«u•C2¤B~¸Ù¬Yã¶ÐiF]ß Ê›c­õC
ì|ãlŽý™ÚvÖøå¸æÃ'N|Îa#_äSí­¹­9Áq» ƒÕžÕápÀ™°†³v°à•íd4
{š'‚ƒ'E’¨ÈyX'õ¡å‘­Í4ÐŠ¸LåZ'RŒÎÖxM$°¶þÏßëÝmì†ý,cJ¤3Æ®’Òô£™ÒeYfÀZ(
…BUä¢Z±RF9d^æuÌê°±\Aý„´DZs_m/bäKí¬!a¤Ø{Éx]eû¬}#¬¹±¶k§>õ='ÂŸØÌ˜Q—ÇðË[ —°öm3aä=Mw„ŽŠÖZk2óÇBÚ`í¾ÂÔý@H|a~*Ae«mkFi~¸£§ƒ-O·¿«½û?JÕš²E¬6®‹0ÈÌ]3D#œ9±Qäºb°^Y‹5¹ð\n¶Äèaæµi$,Z¢šä*‘þ¸ÉŒ‘Æ¯F¶dWh½öZè§kPâ¨iÀeöo¬ÕIç¶‰m¡P(
]K#4HkÓXÚ®á ¬ 8-\Ë]æžH(c®KÖÈjÊ-ÜéÌâ°V'Œ|åP!Ù®þ,°v/iÿÓY³}C.B•Y†[¨yŽÆUSûÕ^“dÈÛMãQà5ÏÈ`ÁîÇ™Þšœ˜23Wà¬9ª9­]µZ£Ü73¹µvá¬y3ì}\«­ ‰xÏ^óÛM°Úw°YjwµÔN±0¬ð!ÇÓ ™Hh<í®•·%>s8ÃCßìh]°Ã’ïcLš|ÄÔ&•+YŠ.a¡–°GfK2VÄwÙ¤7k¡Ÿ¡·4Œµ•ÍÃüµªK«¦Ô«Ô´wQP
…B¡Påâ¤iD¢jÎÓ¼0þZÎ`6ƒµžiT•Þ_äö’Ãš­!adO¤·úŽ;kSw_9kŸjX:Õ4`žæþ˜¬å­ûq¥öùŒèþ•!#ß¾mÂ@váÄÉÜ9³iA„«Æ7îÖaIú¦B]¾ò²¶Ÿ8ŒçL¶	ç^ÉšÏ½pMV,YVÛ×á V³Jšæ ÇëæªFŒ«Âj\C
m\™œÚÈEd½–·¼…ÚÕs¹­p†Ò.Ö5=òòG(kð¿ê%¬1º¡à™¨ñªòÕ¸ð¹$ÿÐÖÍþ	‚°v ½fŸP,T^ƒ°
…B¡Ð•n>ÂT[–’à¿žU¨ãåžÜš²¦ø«Yä±ËSuz\8kF-n¬©®`í”ë¢5_pÜ
„tX[§ž°¶ŸÜ¯Bp?sšh}ž´sœnk4]`«¡Íõ¸JÅš$ø¿ß„5á´¹4Óž»#,º#$Ü&‹Ž°æ¨vñÖ7"F|ä—­=|Vm¤«¶ÙeíŠÖD¼ë	þ¥d-Xí95êEÉBì)ŒZiFÏK–Á€UrÒZÃä´f/á¤Œ¦¼„Á~y¬*Y£ ^25…ºl2+MŸšó'j°GS„™®ÜLžé;Ìxn¨\ýxcÍ¡ýñé&­ytç»¨¥…B¡PèJÿ\5¹^#û×3µ
©Acî§Q õB,¥fMNEtÈ2ûbû>HªJƒ$ªx[ì?þu™Ýï«}}e$`mÇYsX£¤%¶Àšh²ÄVF9ìì\Óyt[Õ×Ì‚ªµqÎ›`¯áÇM…SóÐUÑ*uÛ‚Vó<Hd7Œ•¯†+ûfKÙoµæžš/0œn‚ÕžM‚Ô¦jœÊj­HàËè
ÜM\ã’>¢Š›V!7Qbàhù!^/†Wy¦H"lÉ²µ×>BXós:h5þ~›âNÈ|A‡5'Fë¥áRá®…~¼±ÆMÜ©ŸåƒÝÈ„Ù÷é¬…B¡P(TñÒ5Î‹fö·iî†8IçE4‹ÐhmRÁJY­Øk"A5ÀZ,5±ÔEkuÂÈWŸ9ÙP¿àßþõ‡;k»Û jªSßw}Ÿ‘ÙŸ™9º–I#¨Ì[h<«µöáfÖD SìŸ²#ûe’êf
æžµF•p~=6/X«ÓE8ÈÁ“rãáÌÆS+Y{¬ö]Û!iZ‰Ï¥Ö”—¡]o‚,·,ÅŸîŸa©PT8®`šœl¡æÐ¼©5¥Od ¾Ù¨]§šOkXi2á‰«\x$²E\Œ^lº­„È»ÀµÐ‹f-ý°ù1ndgÌî¡Ã|m°½‹Ïb(
…Bõ>HÙ¸Ì0ÏVÚjð‘ÖQNÑ,l6Àd4¥CP…¬&‡vž®JÖžk´Æ¢5Iùk'²ºÀéª`m/’¶Zß»^~©cží9 Z“sÄOuÖÛ²ÞXDowœ5 Z×ƒÒk3a-w§jègëŠP.7×øåÄÅãCCµËè~Ÿ©Z³m×®ÛýûW¿Ôñÿ¡	
]©lÏÂð`zZ•N.‹pi³.ËIÕ|£i`±wŠq	+
Î•pÒ?;ÙìvS|?u#šÄÚ³»5V“5ÄkÞ2C­†2ƒµöéýÀµÐÑMÓZÖ>ÞX4½¤ðÚâ¬…B¡P(TëÃúM¬µAýãX›YÕõpa$³Üúa²¦Œå«ï	l¬Y3\»ÚbØ„µ¹JÙsÒê[k¿ïoƒ$­	HBÝ½h€U=h“ÉûšÄ¯ÁýË0-2a½.[°¦­³µÙ\gÊÃÄ=  ÕËL´ÖjZsöR\ãQ5Ãö”W¬éðL›µ‹.ØÕ.ÈÛ`µ]}(‹ˆèÐ¨×e¦„ÑðF¶	’1µqÌm<(’éÁ×ÍåvDÈ®î˜³†mŒä6¾NÂ™Ü9ÐWSºÔS=4ý¦ÖØ‰›ýµ]e^'‡¸ÀµÐ7Ö<¶¿)Í°ß4´H"$°Z0d$÷‡B¡P(ôH¤bkEÉšziXAËMÈ¦~’"Í¾‡ÌXó®Ørº¯fÆÚvÀˆ°U)ZûkduÅ•ÁÚÖ¹‚5ÑSXëJ`ÿéØÓ“#÷Q|×÷3íü°Ê[V3ÞáFÇí¼ ³;öÓ„Z7(³h­¯5ÈÞ¹èªjÍå‘_ž†Aòp«íûj<ÜW3¯úíU°ÚŽ•FX;kÂWbˆQ`OòùuÂ%€Ê›¬Éë¸BXJúÊTÖ:]µMÃœÜT±fÍÍ6dTbu O‚Õ KÞ¹V+ÂL.l]jŠÐˆ¸R¸zyÝÞµ¦Ä­½rXh?NŒ©)¨¬…B¡P(ôdäÃÃªÉý%UdÔ°ƒµ<-°ÚrÓÆj 5n©í­Õ°vßM«­Õé>rò¥;k»°¦´r]±QaÇVØ2«:õÕÐ{ÎjÖäXé°-Ó(>â¬i|ä XãVPþ\}ï˜ì}_yŠLïßÌq_¬yÚÍº`_Ï¥AÚä”ˆóî¿½û»ûÎÊ!ŸÖú—Y8Ù‰¤F(Ãw¸æE^s¥9[DÖ0â¢Ä‡PÍÁ¢÷ÑðC,ÀŸF_SˆòÑ¤Å†§	²…ò™Ïd‰u[ºá§šÃ÷ˆtïn×B/k¬%#5NZ±–ÜjöºJY¬…B¡P(´©gkí¡u±ÑrÝ =q.Ý ½`­G$b`ÁQáy¥®Y#¬Y[lïÿ.}ugmä}w<}³@Ý4–šu€µŒµX†£ÈLYðÆeZ…ÂòôðÏ ˜&¼{ZkÓ(ù¹‚­,Ôsu]qSëFk<ŒÇp˜±†ƒ®Úž±FZãérPã
úb³¨÷«Õ9"¾VÜ)7“Za¢[kœÆQXË½"âoIu¥#µLº´védµfì>…%ÖXš1–`ú	@â¯‹)°)6Ä¾ä=ˆ?Í Ð‘ (®ðjò£oï¢ÉUèEÿU:¬½Ñ…Yr›°ñNþ#`-
…B¡m½_
”¡ÿ³€š0žäKŽ[úH$K…5|õƒºVuKlœUÈ†G÷cm¶ÅþêŽOŸ|]`í<÷§Ýè~mýv¯ÎZ>Ê/¢í«g¤Av²Â>ÎyÕÈQ;¬‰u(WëŠ€Ç<o¸P·#*Öå ©ã4@½šj.XwÞjÍµ­<È«ÎØ¸ƒ+Þµ•CÚ¥µ¶™Ûï!Olqz¬¶'%XRM£ÆšÊ¨¦TYú£'‰x$.í™~/ZzW¼DÖZ>”üU§QQ`Duhýá>~Á9­ÁÚB<ÀUjð‚Ò¡j}^öYã
øvX¹ø›½äôÐË¥³ÒèM}¾ÖÊ_6.¢Qm.…B¡P¨ÖíÇ	3ÚÓt<3‚QŠy¢rGqôØS˜ÉjUŸµÍ4ÈßÖN½$Œ hm__+Œ«`íËÓ¦Ø²ÿQtj5¡µûàéÔÖò¤´&BÁÙ¸Î¨ÂÓNàã¨8º®ó¸ÈãìþÛógMŽ¾Ï‹h Ü];k`7ß¹ŸÝÿ…¬ÆÁûõð’_öjÖ0×Öš8«¯_¥díÕ÷²š{jl0­…a)o’ÖrfÙÙ3Ø8P?H~ÄrL)çM»|‘§¬FM~o¹Æ,!…/e4Ü$ª¹øì^Â÷X£)Ç7ÂÉÉ,q%cÂìâkÒ]àZè…ôVÔxZZJ‘™—Rv«Mk¡P(
=Ñî{TD':kãra5õjJ¹±¦ÕZrdRpôÆ4È“¢‚5îƒô„'±gcü÷`¬&x"®)¬‰ÐfM	mÍ»?-£¶Æ†.‹.ø¾Å9üx»kø¾9+­‚îf,kNköÎS‰k®B]*Ç5ÈëÖìî5¥•…ißXãëå=ÌÂ_‚Õþ^d*ØCj‘ÂøH3†hU˜Öü2K•ï¶ô}o&ÅGæ+4÷S¼±x]ÊÏ°(%v
kjìÄÁ%÷Bj³590››ÇÑhÍ%Ì.ÞÃã»(]½„^•t‡µ”¸Øæ7\Ù¿"ÄÜ¬…B¡P(´ÙMB»±ušµhmÕWC=WoÐ#°#¹"®õr£×<È÷®‚6W6`íSÕû+Ïú¢Ö6¬‘uHk÷ÜùwüÝ£ÊìD0'[Œš¥Rêò¦Yú€LÇe}¿kó„oVVËâËY dç¥zø"ªÕ#^¶V³=5ž~×PM..¶AnGŒÔ)#õñ«÷¿}Ð|	Ó‰)P"49¨«q29¬qÑ²["9é¨c&‰ä†up‚_¸ª3òZª5¸Ôßèp•(rŽÂ•Þó•.ì½áõB9²(•âŒÛjd{w¸z	cÍæRµ–Ö‚jË?‘y¿xÚêgò.|ÝÐÙ;ƒÜ¸‘$Š‚îeªÃx=;£,µÔ‚;®pMpÃð³éCÔÌEt9‹ŽÑ½œøñ3U)R%Y3³°â™ÌdIr³a~õ3~„B¡PhIàèLù¬6-˜ŒèÝ¢ÁxŒöšDl{K±'u-‰ø¸fí»ÀÚbÿ…„‘mÍ¯¾øg†µ^`íï›ÉýDDÕ`›ÖL•ÓFžºÝ“Ã:¬á;çeäwâtëòS·§ÎšášéÇzÄÈišíô›& Z±’ã
­œv¶2Xª}–’!’â¦F4^„ö>ÙŽGoÈ-¢®„µ#Œ;kxaÏ3Íô×ži8ôlôTBãÄ³ø›T]
µ,ïqÿ$„Ÿ†j<œ‰q&ÄQ*OÖ<Çß¡5büC¯7Öø9„)5@4H7ëªIùÚ¬…B¡P(´¦Ï£ÔnYLb¬ßFXR]7‰:´-PE¦™Õ 7¶ˆÞQeŸ5ÂZ‘0r1ÿq¥)ö?þºûÂY+h­€5ö±ž'™`ÚO‹†\N‹h^P˜H•sÖt¯¤œøN­vÓ>mZ©×]i­Ý–¼fÊðå‘œÜì¦Ë™m½f­¤4áÐË×`µ¬Ú™¦acKÇpãÜ^bì#F§5Nä‹¬6aÎÈÌ’ú•‰4Œ?Q²L•µ^«+¢"ÏÄ«‰•f¾®žW~wž—RñÁE™‰Ç;óØ<ÑÁù¬ ¹FÞŠíh¡×ÿbº³¦†A²¾“Ôð¤ÖB¡P(ÚÈƒ	¬ÝËp/Ã›43 ]€¦U–VªÑYkÖ°RæÝïÞÒ#XûŽ¶Ø3‹Ö<BÄ¦>/®§°¶/kÖÎ­5jOT“YM„þn˜.b—¡]Áœ[€UÇñf¥JÜ4W¤í´‹*CjÛ–üÙœÎXƒ™ŒœÚÁ_VäA®¨h²&c‰n‡›`5C7¥à2™¥«÷.à»©9©aÆÞÐÈš,Æm^¸²ÅoeÀU%î÷’?X™‰_[æã1âDNy—óRªÚ¾Ã)²HÀhòXrò×–q	áªdéŒÊ+ÅEîÀö!þÙzU“ú*ÉÖ°ºjÞ»¬#vÊËaé†B¡P(´k_4MÀ¦°6O…af%öºÖ:±GÖ`ÎZö—Ö5à•·Å¾¸Ò×k÷g°ömÖ`­u@5`Z'3Hþ»‡k(A3)™ŠÛvónÍYcöÊ$ß(°–³ -ukEÑÎ¢Õšƒ—§÷¯á†­>kOEŒØÕœ¿‰’µ—Q•b¾jD ¡Šw•^œT2¬a0>£Î®ÌÌ›e˜©ƒ†¹f˜Ô¦ä§Li,‘Ãòd/$7JïqQãî‹Å*7-Œcý[îJàujù!å+œÏJ™×ñ1Z^…~^ÜFÕò¯ž—Jz:i
X…B¡PhSï>§	ž±|qýàM–Âij,MƒjŒÕÔZõ„µVä“Ç×°Æ}E[ì’Ì6 Îaípûí"¬íÔùÓþ_'3LQk×O½œçI6AÄ kÀ·Á³ûÝY;.ªqÂÏš´íZöAi­üÄ¢f­ˆî§ÖôòíÔ]ó•9kû¬m[k%¥ùüMì‚|÷VÃfG_6)³ZÒ]Y%p@ ˜Liz14syç5ì·^f9ÄQ„E[u{û¸’Óˆî}ÂCÏ6K"›_e+E=¯A{™*K"Il¹Æ*9ü$3P£íÚÌ—ªy06ì½³iì…½ÊXKf3Â‡—ü	‰«Qé5zb‡B¡P(´¥qÒ€kÇåî31È_ƒ•¡ô×3…5fØ[öDµ’ÕV`í»­Ý{ÑÚJGlNü^é¬mÀT|ìÚ®Ó@ÈP•a´Ù³%ö4-€ÑQ<åÜ_®W`mRZ‡	[BÙgv"amèÎ5>}1BþzÝKó|G6×…}eX‰n_ß(«•;µ€ËVð–*¼-lTq4Qþ"¥á¢óbó#TT}	°e,áJrqŸ\%¦’›½ ÉÅû«Š|§<GgMÎk•îÊÉÈvß
…2À» •&ŒUEoœ˜ŸTgjxùA#¡ŸÓû|‚£UuÖø{ŠmÆ†j0¦€µP(
…¶t}üóÏ;šÚkŠg¸°C¶ÌÖÐ{Î­±5od˜2·¸œW6jÖ k(ZCÂˆwZ»¨¿ÖvØ ¸ßÔþSc-³]ÂiÍò¨½ÀIeýåÓ#XûOd‡L™M}'¬5+aÍhÍƒ0W¬5¾²Š*µrñ£86`í–§E¿µÃ§7Êje1—²KÅ9÷%^ÕŠ0Ö¬HeÆ]ÎhzË³óI”g†ZÔ¹'—êè{`!úfH¾Y').Y¿V½¨SN*.í±ñ¤U¥”#Ö,¹²®Öümñ!ÌµÐOèŸÔjûˆB}è»tí÷¿TÎZ(
…BOîƒ¬MÃÈ´‘àËµŽÊj`´®ÇÞAÍÉ[Ýd¢h­m;kV´vð¶Ø›Ù]—amÖv€5”Ôí±3‘›!;îØð8Ü?Œj,?Yï—X›G„IôzX‰(~ÓL¶–³øþ_…³VtZ3öú–qÍél;Ò¿kE«1~|ýÕ"~#«]†5,H.Ìg„¿fûÉMÌíWFñvjkE¾à¾-@&î{qN.‚hp—ˆj„3b"w=VX×nVÏ¬P+g 3]qáà†7È'„™WÖïªˆ„4vs-ô3±ýUÍÍ½M¢ƒìMàAk¾Û¶(šŒÏB¡P(ZÕ§»{¡²iªQ
kË¨» Ñš©ýUùé ñrÙYƒ~”m±íês¿Ã›Û°	ÊÖnÛ®=0]dhw¢&Õ|õ	GhQ¹†º5<1KônVœµe­‰ôçhÖ
*ß:Í¿l[v,ð'woÍŸ¿h‹íhæƒ{kk5kX<0Â›|}»¬Fù6Hãö«åJÖr|±L‘$WÈx•Üàµ±ì‘Fí5gžš¡"2U8Ê÷àUrb‘ 0#•+Ôx›3_¦Öx­@fÖŽQQâK¸“~ŸWcUç³†ƒ)…¹z©®S9Mf^ã œI4ªºÏÆÄ)×k¡P(
möÅ¾xYäÌ:Ž³ÚjC×Ï“€IÞ4HdSXÃMxLmƒ”×…>kì´f	#ÏôÕ¸.aÍ­µ[Â MiÉûh¯áú€ÓrÔ°þej"y^Ü»ƒ§róØqÔp•	NÜ4Ý0bÙ£b¬Ö×ö…µTóçj$†ÇqY°àNb$·|µíÎØ·7ÁjØ©Â ¥;²¼J‹£^=´ß-4ŠŽ´Ì_sNãþG¬ªÔ CfŠ°°Ínë*c8Ïpëuªjÿ©À4þù˜©Évd³9ã5³q¨]ž²ìÇß#Å?ôé"Sw¼­`Ã}‰ŸŽœ·þã*þ¦…B¡P(d*,¤£Vnï‰.2a>'µå˜h°ñÒíÛóä~kŠMVÛLƒ_ýØ÷ãvÑÚÆÍMXómûN™Q“û÷;èÐ“ÖºVì1Ô©ºæ	ôµÜÖF”åÑO\Öaa$r0š“i;±zyv ZÙim£hÐ…“rSÍ&­}sWíb£5öz%k¿}|»dH»@JNAöä/Š VFAr¡S#6kQÆ|;¥nv$2ŠßêÄøN“ãDÜZ3Š«*ýâÒ#{¹*c5È–@4ð¸wi±ÙhXv’ÉÛ¼+³è¹zÞýž»×1B_ÍSú5dÄ=±C¡P(º¤O°˜Ð9‰4ÒL›A,pÔŒÕ°p °ˆ kð!Ë-NÀÊš³ÀbÂˆ­mï‚´ÛÏKƒD¤Ö¬ÁÜ¢öôÿ-ŠÍÚ½öøžú~Ä£²z×eÔñsYóîF¾ž"Û«Õ nýžxÊÌÍ¢5RE+ò qòek:±¯ö8È‹îšo díúãÓ…j^¸EZÃ¬V@ªœÕüß‹V­F"ãH4ã-Ÿ3N‘¤†/
H2©ë\…F>ÄªÖýJqÌi8ØþH`Û«½´JSûmàŸ>5E¼«ÛÒ@m€6‘AN÷Ò¬%ˆñk¢r-ôlýÆ}½ðpÍSÃ¥öÐUÿµX…B¡PèYº^è©™¯–ÛÉ|„«$Œrj¬1²¿=ƒµžÎšÞº€5o‹ÝY[ì‹±]—aýÞv(\ë÷;JpªS
Å×ìåMCmáÓ-`S”²ÍóçëX“çžµq|«î œAªÐASÜ¿Y´F•˜æ æ„vÙY+b 9õ’µ·ÇjÕúMn„¶ÐÜâ6?ÂZ!2š¼‹ÂØà¾Î]ý»
åe@cc +FÃ`!XÐp`æ#kzêWÃZ]wj i^Ðê«x£RoO-@ïåÍnkEÜC“8&ZkÑ­8ô2cªåôæïùwýä)ÿŒ zb‡B¡P(ôô>HPÚ=Qm\(ÅX¨AÍDLSdá6ÈŽEkn.­ŒxÑZ‘0²l>p²0bÛ w’×”4ÂM„j:æW
¬MswhglfÔÆk¤Sé—Ç°6£F™"­¬É‚:e5>üv[lC¯Â\óÃiÍkÖ¶û¬­%Šœ-v7¿t.øšP\©ªÀÄ2)‘NÌYkÒä<Èó5]z[&6½WCÀ3øi¬[1ÉØûŠ›!šÔ~¡1O„„÷:­2ªð˜%AÖ™žû0Ê¿ÁY'kG(3Yó50f¶Ó#ô<]+¡AÜwkªe¡­ý¯þÌÅ“r7`-
…B¡'õé!òAGámÊòÐõøÐ¢µj•O‰!‹€‘r¤µÅþ£à±BåíeX»ÝpÖn µÛ=êì²¹&~Z?ÀÃeî»~Öx‘I`-“¨îúd›‚ÇÖ>	çá‘é$²þ]ZmXPlƒ|*Ò"øu0}³—Oýa2®]Øyæ­ùâ×.Yûýê¹°VFR5
Mòº,†˜oæõj¸	2³'¾å°–êÌa
?µÃ)ÉaMó>˜*RcÉýaX›/Æá¿*|™±è
1ãÁæx'y1Q¡mº3×E¬Ð³Ú&SS{¤ÒZj|‡­v¶(>ˆÝ¶¡P(
=‘IomY´/6îŽ3¥ÉÅèþz÷—<‘´²é¬ý8ô^´¶ÖÏ±Ä¸?ž†5Ð‹ªí"÷™Õº^‹}á8
©i•šŒr!³×æÇ°†ogn?ÌºÐÖ³VïpÖ_Ž/>;X­ôÖ
N3m-Ò¿òbÀHj¾@ÉÚc56T3rXÓ¨zð>Ò¯“×gqB“‘2XóHþ–Uq©KuàJ,I°­nÆ$¤Ušö‘--Z}.¼÷¿“Q!“!s
1µ[1ÕÂbl|¤¹v¥¬&³ð=B—u]×'°vU5˜¨XþÈ½µÿæQé}ôÄ…B¡Pèé¾ØGƒ5-VSã	ƒ–k3hmto£²NuÎý%ƒ•5gúÛÎÛbÆ.«„5ª€5‘EAêp ¤+&3êˆ'1ÅƒBŒƒ,VÜæA…Äþý~˜ÅZËA8ŸŠƒ”Ãääe*Z¬•» ýÀ°‰kkÐX{S¬FUv2‘¢—%\Å¤úd°æÆ‘³E<óE^9¬‰9WÃ+3XƒcPâ—µŽnq±ÝY2/íÿ¤
ƒý_Á ´¦ˆ)'e9(»XxBd6D>F¬ÐÅžü¦ˆÆ}ÂNÿ|D–œÚ¨&zb‡B¡P(ôŒ<È{¦‹€_d)70
¬±jÀæ°Öµˆ…ì¡.ãš9kÛ ¿¬µSQ´VZin´­Ö¬mÃš¥AîUÓX|9ÍÓxÇGÔPHCãã®Øxâq™ðÓ ¬†mË8µ2e?ð•8ÈÛõ®Ø¤.GµâUöÄæŒ¯Mk­à5~Ù’µwÛ¬–ùÈô¯˜ª‘ôß†ÿaïlrG’(Ú	VÑU0
Uz][hÕð‚;®pMpÃðÌ!t“¾Q]eâÅËpHiêÇS3@OT2“tw›Bðç—ñB>†¡"<qBªÙuQåæIÀ-ŒX®ÕŒYÒc‘RUò¡ª·F2´)3Š,´Ï(ƒµ¤E¢æçØ
º /¹µSEØ[Ðe`Æw:¸°
…B¡ÐyÝÒ «TÊ€eÆe?Îó€r¯E£!EŒ„Üµƒ˜L„¡ÎÂ ¡siLa[ì•Nk%°qvÝ6Hj«Úì:¨'Ÿõ˜t2Å FFcÞå’gË¼k{íY MxÞ®EŸ6ÍîoÍYóx¼·ëÛ Ij…µ¶v˜ÜVÃé”¶ö*wA~»Õz˜sæKÇ,R„±õlÅ[W™DdXa5í—/>bµ&ñÅüD%ÀP;)€ZÍ€EF&.ˆs&+¦¬[_›¿a‚GÂõd1þfXÛl^âG[!Cûa[ß÷&Qp£1wã–Ò;	³€µP(
…®Ù©lv4‚.dZÝµ TcªÉÅAˆñý]Ë¢0\ñ4Hï³v
Ö¶Þûêôþëaíe'ÀÔ*žAlŒï–q!Ú;DŠÑB/Çy|Óhíþ	¥lºý)-öPæ4Èvw¸	²ŒY±ÖÔ!3¬f/ÏÑ‰ÛimWs!ÿ¸»}VsUæW%
 VÉ«N™1ô]:j|{Gl~„x˜"ƒÈ»„¥†åiXc£µÊÎÉ#v=åYúX+úmƒØjOI5²Ìº‰i¢Ì¶Êº*>r4ÈÕWsÓR–5$”‹¯m
³0Kõ¡ÿo…B¡P(tvä¢¼¦_¯u\ÆIœ™e=(ªtb2	µqªDÔù6Hj=ºßÛb{Ñšïƒô•Ÿx>±*`M;ª	¬QêªuÊW`Ì‘	²}ˆgÃöá2	¬Ý¯Á²Ul~ì5½Ÿ¬VÔ¬™±mcÍ­5;Vz­ñd*bÿ¼ÜiÍ`ò÷-‡YI€4×Ò^NŒrEÝ#ã+œW,5§¶,¬}Æy"æËqkÝ©³í¬É@ 
*ÒÚeX{„¾šU¿k¾¬Õô}jÊi¿W\£Ö¬(\]ì€Øp“-;ÄCdY5ô/oN’×F6Ñ"
…B¡³z28#Ë@Ùl[†aµL“Ë ôi{FBöR¸ÕŠ:…5·—++Îåm±Oª¶5kÛíOc5x})ÈÖÓÚÖw3‚Eh2Zd†Õö×ˆ­ÑZ	k“öÑ–3h/³Zß›³VFa¼F¥­{k«œæ¼ß™_~ÿ{°Z¥æƒê¡Zijt ¬‰êžÐ*ªqîej>Ñ)ý$«xË¼Vg7ïŠ‡¢:É‹ÙùùŽ‡ë»2ž}=ˆî%WpGÑí7`í¸Ovu¯N LTã;"ñÜ¥šX²¾›”HýÚ»É°&+/%¢¡e„ÃÅ€µP(
…Îê‡8L 4V«1rW¦Q0m˜ç©Fkw]ÎÐgjÍY+P¥Lƒ¤~n½-va©ùÊuÖžwí†ÿ5a5PX
¬…¡T;mŽ=‰¦O…ØàÑy€i¶ŸæEèÍ­ùÞÐE4ÖfÔëu‚|‚¦€µãšµòñi/˜;ke£5“—«ñµ®"´ßæ·Y²vÿø†@4ÇÀ H¤§ÚÂdÄÉäØ‘Œ:²}fŒ†¥Í¸j ­¶Z.yiÁ×ER;”¶X#­­ÚhÊhà³Ët'Üfû§îÃF¸_Íü?1ãEH‰­Äµh‡:­/u“²ª*dö×^žÖÈ¡5“\ÀZD†B¡P(t©/6ý4ë½ÐWÃjB®˜eèdèÐzPM}KêZRå¨VÂZÑ»ðÒNºk`mÛŠ6 a4‹Qjóêüí6ÅY›f è8¬á9ñXÈºµ¿¯ÂÚ(Ï)¬&GÞX	X³÷Z[lç5×q´ ŒŽÚ©Nkò%NjWDŒøÁ’µe5Ê±§Ò|æ½†ä'£´FÅ“ïåãÙº¬™¿Vd?ªÛ”l7$‹k4A‘|sŽ†ª2RG¿ìfÚ—0Ú{uÿðÄæ½êZ¹MN™fYh‡O(ÍCXsj‹ÂµÐšî½„ï‚¤Ðrnz­UK"ÚkÖB¡P(:«'a³_Ò`ø¦!ó+Íü´^N˜Àe; èå’³Æ¢µ~ô¶Øk™8V¶Aþµ^³öDÛØ>H!)ªu
VÊT-¾]ÁÍ~TŸeX[à—-ã[DßO8k}®àB{=¨uh	k^³¶Á³û>ÈÕ¢µŸe«5§4_±y(¶T‘y«%k§¨VdJ•Hœ­ºù\×É³Š6Ïk°F^så¾lä7ëUjX+÷~9§Ó~GwBlÿ	°U•ä["nj*5Ôèq$Ö³éÌæþ–	Å†µÐ[}ñPWCekÄÖàGK·¼›&ÛP(
….è[DÿÂ ¡ýâBe‡mX§ ÖFA7XÔ^k»"3Oƒ<•0"m±gm‹í<ÆÑÏ>+`íeµf©"–Ù)¬µ2@ö-öó€œ»Ý4Šm#mÁ¦HðšF§ì—åïÃßÁvBgÝ ÿT?àsèvêÞÑRt\#­•¸VÐš	3¯W+w@æûxwÓ8ñó·Ûcµµ¾aôØÌRÃŠ‡‚l(“9ÎÆàÔ±Œf8‡å¨éRÁoš†Þ) ñjÓ~û—R¶w±ÕPe+ÆAä&°ŽË2-:²nXt?Žîˆí?Æ4Ž8¬¥‹ò¦Ttñ…B¡Pè¬4Ðþ—¼Tû©:kÐ<!2Q¤Å[½L¬½škCm©3Û Ñ»L)é¬¼ì°ö?ß¤A"Od·Í}Öv!-Ÿd¹ë&|Ï8ms-°&69#íQÀmÖ¦Mæ kC?‰:$–´¬µCR½ÝOè*­áULí.ÉÎÿ!èlgì›.YûRT‚qÿ#‰­NJ"™â*ÓÂÕ	jÊB5ÈªÑ0]iÍ‹Í™Ó¡‘Š¦M^FÇà§ý×÷ž=|ýt½êšÍÂë”×0¢´Ö¨¼.wm¥U‡	-Ö1«‰PÈÐÛØ~V=~"¬Y2¤[l¤5Ëfõ¿D›µP(
…®Ñ“k¿ÖfÄõ³¸FV€µ™˜†Aørb9¤•çõmž0Â¶Øg»b—Û ÿÉmkî¬íÖHkê­ÉØI¸¾Õažç¾C+okÓ
UBƒ½F
Ý?Ý—u|š9è`=€ššò.AoújŽk.'5ž×ËÕì6kÖüu¹ÏšÛlÜß«¹d‰†œ&e¦ŠX}ª#çð>J~ÔƒLöe˜«Ñ¬~Lè®ß)‚šï{üÿñ·2Ö%îbAÚLú°–‰ë•mWK¤à&|Ð¡,ˆµJuÙdóü’|9“Zc(ÜÚP(
…Îë‡`C2›aÏÌ°×DƒÂÚ0¨kuˆ,^¶UF÷;¬YÑšµÅ^ïŠÍ5GÎJg­¤µM»1|AGl¨Ý¼´h, Ns5gZd×ÊIMÄ=ÊÕ°ßsŽÎóø&òa”§ŸLÛí°)Rê‘±¦ƒ=ýfÅYó4HÓóªùÍ2òÚôþ›î¿Ë¬æ÷kumKs>É»b’;89…ÉÊ`­®nXGì5ÉU@‹ú´
®óÕª7 v÷?ýŒÞÁk–É&ÕJ¥Û~sÎ›¨77®£Ä(äº{L…j´¥o ÛK«C‚Z]ÉS)`-
…B¡Kû Y±†Bh=SYLB;9c>“ˆ}Ö\N+ÐjÉšéùÅŠÖ
D+ÅKî¬Í+Û !šLV´Öc‡¦Â#‚ §\¦&À[=àSÍCÄ†Xw9A6ÂZÙhŒN"hY»siÏú~³¢s¶ŠjÏ<8»¸’O}Û%kw_Ë}|kÎ¼P³-{9	\&YkT)É”ól«‘Ø)­ñZ-¶Ž‚ÅÔy—*ù ¬¹»¿²~Ä+"eMÈÍÏ—ðˆöË4×?mFú›'‰Ï"ÒûB‡é"ü¿„ªÙn¨æ^ZJÇÚTøéÅ‚w"µ&
…B¡«öAî÷¬[Ûkhý¼ ½˜D'ŽÂi}«°Mr;³ÝñFÀí©m¾r½-öY^#¬uë°fHDÒØÆN/ý<ö;&-NCmÛ ë ‡
6yäq™Çµìþ'¹ˆGî:»6kVñ0È²jÍiõ8»ß2sÎ”×Öuå.È2¾ˆøÇÃ-³-¡Š‘óJì®–Laë®Ž`ÍpŒt2Ç}«WãA¨ã½”Ì¨¬Ví}¬öø! æ¸vÁ^s{Ò©p´Î´f®ZÊžb£’[¶E2"üCGÆéßyÎY^dXÓ›Ï”ö$Û	=±C¡P(ºbä/a´}Þ¹ ¶kdOè‹¾me*Â@³©Ýõ˜€] ,­5‡5­ý«ðÔ¸,.ž‡5çÕF
û7YbáMíK‡pðgu³<#ü4…0ìÄ°öcÖà-vý,¬º£:<|«¸æYGO9ÎZY„A:Ü]a¯ùqc%k÷%«Öj=a/7šDá†WU 6"F+¡ÏÏ‰‚šC]f5ÞÆ[{UÖ-íJ1ÿcu®ÙsÓëRŠŸ®¹hŸuF%‡5ÛØ´²½Ê@/þ šM®¡ªd?|©„Ä]œ£ÍZ(
…B×ìƒTÓÉ6	NS†5T}!³Ü–5È
”†ê5”t­„AnÏÀÚv7h[ìÒlZ€[kÃÚ±µ¶iûÐ’i×
WÁj„¶@ŸC'È™}µY,70b!á!®Àš2Þ¬™ý‚¦¶°æ¬f¨¶–)ƒ©è¶ÒhMï`ß†xWEŒðõý¦X6Žôø×zÿs}"s ,"£É‰ue™\ÅBâ’ßmÌ\ËYÒÀ~µ£00÷þ¢#÷ñCÃFêJŽäjÒëÊ#×ç5ƒ5³/ƒÖBÐý'ÔuÖìG_—]ÖrSy¹åµ¤‡éý¸°
…B¡ÐzR“‰±ê­¡k4K¾­h¦š@–i€Ù¦ù„j=`z…¬­ø[l‹}Mv	k:¬•û ·âªmE•–¯a¯fÛøÆ{Mu¬é>Ï¡SÇoñÎ–åé¾ìŠ=±½?‡Ž°FJ})êõŠ4ÌÒY+âE×\¥µvÐG[Æs:Êùv[›ê*Wª!ó‘Ñùu2i¦¼÷“.°aÑÿdû‡\¦'×ŽjÓp4©ÎÔ–RþJÃ‘}Û¬™4 Ëè¤ö1Yþ$Ïš†¤
è–ûc‘âl‰ÃÅáØ»ÂfešÞ>RÊzªcV×¯°–OÑ;
…B¡wåAÂpš°OÚkÇèiVGj ªiéšPš, ¾×Q¸E+×VœµŸëq/Z´VÆA–*£û÷s·)šb;«Q•¬bÁ• *C&…Œâêãí5_d”Ù)òxËþé[	kxf4Ç×}›aÍŒµÝygÇéFk0ÑøZ“ýÙ¢5÷Ôìxy¸§÷‘¿ûÑ rïÇb1¸ÑÊÜ6$õ3ÿ"«ñ€pÃ29¥Ú~Yt!–„w	x&rœ¦ŠTŸ¾ù Rû\«*¹7V“ô\sréÏÏÞ)M›#p’¢Ò(„¦õÕkÉþtÒ¼Âœiï„m?”¾Îj¢'v(ôoöÎ ·q$‰¢C›Èjº†á20ëÚ5 UCîrE€kž@Ð‡0z=w¨ôæuŒîåÄŸáÒ.Qµ+Yñ%&3I•gìv|õ3~„B¡Ð9z¢µýNûDUa*˜¢ñõJjPÞd¬à/i„¿@Œ‹ÚkÆ+;kYÍ‹Ö¦½'ŒTÕpàíWk	¬m?Ÿ‚µuqÖVTŸ³¤@j±™íƒÜGQ´öãp2U›„êöûÇº+¶úq€ÕÙaý¶se«-;k1â½Ô~­Ì5 í¸fm	Öp~]Öî‰ìÃòeÉóL¥÷WÇUyösXëx¦£Ö‰³Fê`$?('oùäd¶Ã#¨¨MÆ7§Ií')!º_d4JfÚ¥ŽþšÙ"U²&n©¤Ã™­]½nï›Ô¬µî«1BÕ“~ddz^Ô¡6ë¡P(
¥Oš0‚ H¥5™P;rš’‹×@i™[Ç,¾Ú³¬H¯°¶.	#1²¼òÀÚ”Wk¿}Ö¶`©Í‹³¶ÍY7:¢PmÂ~ÇiRúÄð¡ƒ¸ âþSM¯ãDÄƒ
¬Y_l:kNkPY;kö¦N8k†möÇÎÞ¹~¼y';«î\-uÖ”
‹)k %Ž`Íè¬K2|Ó$“ƒÌ†¯„	ßÖþ)µFhNvÊ„épA÷÷Fj?9®±xãh]úm:¯X;,>â•ÎÄ´HœƒÖ®^SâßÍÆð^¿Ã›°æ­8XŽ¿a\mÖB¡P(:Kì±¶=+¬j XPÐÐg´–VÁJZÓ ûAV²<2ÖN5Zûìm±äÑýkuSì"@ËF¨,³fÍœµiÖžØ¶¬Í8aoç,3Üêûa¶ïq÷
Öž&íÑVÔoL}ÿFÉZÝ».Zób4›Ô¤æ7ý×rÂ_—ßeÍa#1.?)›5MÂ*¥ƒLÈÎRåmg¨KÄ5ÈÂá«5&33Öt`õ•·í=Pký£S—–
Õî~î Í×Ï…ÙhRÆjîg&î/mRÉÇðØ	yåºc¨¨÷»ì÷¤Þðè×ð»%k¡P(
·ò!!n®íD3êÕËÜ`Ý?"±5YÅ9¥NqÊªÛbÿÉÃ'>;‚µ^`ÍTÁšˆíÎÀjh ·²žØÃ€¦ØBc"œ¸·qÿ,6
nªÝ&Ç4=ÝÕ]±g–ºé6Pµ^A­ÏLî¯I‡£š^k^´v
Õlvüú¾ÖøÞÞ½—(pO%¢À¡+Æ««RÒ›ÜŽçUj bŠl2ÊÂEléQTk¥l–W×Zoµ…R5’ÚÍÏø3<Ikßµ²ö€"0Ä«ÒUJR§g{o#eäzå­“¼8#D*Ó»Š[øÕ©5€ëÖB¡P(úÁ}ß€h€—’1ÂmjP!ù^a› ³šfŒä-Ø¨Êî'¥Ô#¦/Ö{ÁO;¬Yû¯ÁÚé„hz\‰ò0XÇŒ¥ÙÚ °öuË»°hm†§Ú—zÂ¹Ïµž´6fÝ‰Ã´zÃX#A™ŒÅªí§¼5;/ šQ!KÖÞ«%ñÚ4+©1X¤ôÜÕÀÆ’ÞØ6VC8³&j¦NÖ:mXó#ýq¯“‰ÀÑË[Ò½“Ú¥˜kuõÔX Ø(‹KÙôŽ·Ëî:íÇ†3¢I~¹íë•ÿ›@A´WÑý8ÑPÓtŸVmìJñ;
…B¡ÐYz>ûFDƒ±Æø~± ¦â§•.Å6t/ÉÀà~g•Å4Ho‹}vÍÚ¿ÿ›°öë[°æP´Ú¨³¶³&Ê"áKí> ³	çÜ†okÚ!Á˜f°š Ùck»a—Ì¿´š5Yæi­²Öªš5«ÜskÍìMgÍoUQ2;-óñoÞÇ¿Õ·Øú¨´d…Ö´tSÊÒf Õa„:u×ôÀÈ¡kÁjÞç	'‹‘—ž;®KDýQP“Þ"µÞùú²Ì5ÛÉ‰ÌøW×€a\‘KXx¶‹®ø³ìüË‡xÒ¾ZÝzq¤÷æ3`ë(„7­Ó=É¢€µP(
…~\{í°£	gxlš•8ŽLN”©hÔºµ<¬åY2T9•‰¶Øƒ¶Åþ½µŠÝ|¥°6Ö~û>¬­W}æ>È"Ø 5ý¿?y”aÂtBlÚ†¸	VXûT;CîEÀR¹ORË²ª„E5ƒ\9­½Žƒ\3ÛQ~$´¼rýð>XÝ¾4B$Úì!ðE¥àLLk¾ÃÑ¦T×±BÂhŸò5-VIf!#ä„–lî’í7?÷Ò¥—Õ(­á\$0ŠÓ;‘ã¢eBê'ÆBFGã0Ö kÅ}Õ"SèÀYãÑá¬ÂÉÕÅoP(
…BçèæÓ3,5Bb®M=Èœ&¼#dÃ"0 LµÏZFŸµÎšŒxÑšµÅ®­¦4c5ÀÚþ{°æy¹_!½U´UÔ€kZ¡–G´¿ÖoC®À4”´6Ê‡±n‹ý)ëå‘Ñ*2gÍæ¯Œµm]´vì¬¹oV¦ÖšçGó–IÇzõJÖnÁjPJÍ‰PyæãDf ¯*ÿ‘Ñ!6¥ËV0ÏŒ7{p´àP›È¯ÀaÊ±`ª]”¹V€–è³Ywl-×S‹‘°ÖÐÎ„d$ÔâN<k_©îîËvÚ”ŒñåœäšœÔÇîDÞ_¼5¨-k.¢'v(
…BgéÑö?×T{ndŽâ\
ÖPÄ58¬ÁzÊyS5…>	kl‹X;Åh¼jÎÚ7¡­µ¦Aš^ÁÚZx©×\Jj+¼Ê9Âh32+ûù°‡mîgÀš:k¯ŠÖ§±ØrCÖš5ƒô’5'6ÊpU×gÒ¯…Ñäl/Y-ˆ¬ö.JÖnïQE'-ÁÈqYå‹A™^Yµ™…„[Î#¥=Ã'¬ãmY«SzkB«ú.ÓÇ; ÚEô@¸?í¦56ÁH÷öˆ·]£ÌvóäÃglE‡íëLÑ¦Þ£^VF`½KyÒŒŸ”,ÒX-Ú¬…B¡P(t®îžè§}{žá­Éâ™´
°¦*°6€Õ8Èá°æÎZÝ_­yÂÈbÎÈï°æ#ÛžÜH¢6Y þ:zo²à‘S÷BÎlz=›«¢µ‡aÐo|ÂPG-¯½*Zƒªä~¼\´ËN&Œø5âÚ9iÞû=”¬ÝÝ§®ä–4y”Ny	Lj4òT‰Þ/gÛ™"b­¯©”äËü ÅO©
õ½´‡2@y¥ÂT»(ócÖ@fXêÂ(¬A‘ß‰‰ìoGVÓIK§-­]ç&È¦ð»ý24å7É]jUIé×­È‰ÝÑG¢h(
…BgïƒÜk"äœö,Ú“Ðfô\ã|¤Ör&­±Ïie1’m±‡·Å®jÖü‚'÷+¬mÖõ6H£5D‹”ÎØ½ÀšÑm…ªz"eßë0 ×’›9iò]ìdtùtsüœÛë¦É1oDðÖÔ³ûNÄˆãÚ1­‘¾–}5‡:›ŸÞ¹.ãúáòY õñŸÛ!ÙY2³í%ö[Öº"²µò²ÈÔÈÀ°~‚›¨•ÃpŽíž¸‡×Í,zÉäH–iŽ+Õ–,/©åšy†I]9ˆp…UõG¯³F‡”ä¦^±à~
?¸ µkL¡‡f9“Yâº6¬w2ÃÒÿ—1`-
…B¡ŠáþGÅ46ÑÛ÷Aê1ªŸ†’.Æøç±ÚR$0KFæª-öÛ{ ©?Ö†kÎjkýÐ¯ÖÌƒÜ YÉ€µy?•ÿšpyKM£ å:6:ÖÖnž&*c •O9Íý±±æ¤¶Æðv¤¹dÆ]59üó˜ž¡õêöòY­cž†&Ù ×¯uÉkÖ ‚Cé¡ÆKd±”ôn¡48lz?	UÐXÓ6Ï…:ˆ{Ö:co Cš…žj—]¸Ö4¸ËQ¿Õ”ì<5ÞuëÒ ÏãEH¹xüGèºTZ¬uì|˜2¾§•æ\ós²¶ÌÖrŠ6k¡P(
ýØ>HDŒÀG“&Ôn4E±h( PÞn{L‹³FjŠyÑÚ¢þ¤³ö÷·Ý°ùò½€‘/¡Å5­mw·=ÑÀ“ó~pÐ~jd5áL«!RÖó”óøjäÓ,Èj¬ÖÃ4gKƒ¬"FÌXssQÓ¤AÕVI°^Òe—¬‘)Ú"Å…d[©¼ZŠ‹®ä5RÜ_E*³‹²`×f@JªpÆ}ÀZ«4‡kÊ*³æDXÊH/¯ö?^jãºEÁDä>ÈTuÄî0P´‰°Vb8£îèêtg{iÝ£ÇÚKð#¯{©O˜¶‘Ü
…B¡ÐÙºy|þ
D›5iäÖ¦<˜%5Ë ƒ±ß2l‰'jÖÞ,ZC[lƒäÁ‰¾ò/°öÛ›Û Ñ
¬m70¸D°ú„ª°Áq/X6ö›<Òuö ·I\C®É!útüÐð/@Ü¦Gd?þ¾„
´V;k¦ºf­²Öl¨å$ÇÓQÅÚY¬¶z¼¹lVÓ(m¿\Àg>·t|+•'?–©pË0Ó¸Õ©Í–äÀÙ?Ï/Ï‹)ÙimOƒíè¬¹©vÁý>Þ/7ÈÖXˆÄÐ~oGn?SâÒïW½²b/Û5éæÞlY@¾Lè¹rhÙ©Þ{iX¾jq²MZçÖ¬…B¡P(t¶vHÙÍe3äžÂ.ÈyÖàQõ½"›‚š›¼qVQPY,Z³¶Ø.ÙjÅYûº¶µ³æù÷ºÌB1@R`M«Ô×l9Ë ›fBX›&\®÷A>ÊÇ‡~@­[ÆgÖz°ZkÖ» Âµ·i'“Ï<	’‡Ü2«}Y=\v°\+ò°5q:—¨V#¬ñ‚N±"|©µÆA>V‚CÔC#Æ¹pŸgÚ¦c"½Ì’‹È<¢ÚÝ¥g¬/ÁÆTªÒäŒ˜~ˆdl³”jó„æ¦î$Gî+íZ«êìôŸ7aMÕ×«áFÝbM›$ÆÚP(
…Îß9c÷#|5£5IšAd"R8TC.§fãƒŠ6U¾È‚³Æ¶Ø‹Ekî¬ýçï¯³ÀškÎÚçõús‘1K0-[ÀšFƒœ‰{–û¡kó4ÈU9fÀš\aíØzÄ–IUîñç†…¢89Õi†«Njx›¼ZMç4ð™/¸t®Ó×9áýÛÛËf5ðRÕöšÐB‘F6Z½”Ãš!HkÔº¤w r&-Vc_6~1ÑZÀ“­ÑÉK]:@µÛËß³vZ©9ÌˆÄŸ
-ú›¡:é¯å—hŽ}Mºý êÖØ»´s ¼ÃFH—ær»¢Þ1
…B¡Ù9Ž{ƒµ—¨‘iÔû^ë¿<²÷<DŠåZ‹Î;­±-vÉ®Ö²ÂšÀÚ—:»ßµ<EAý8€/HFvŽÓ.q µ8T›­Épœùð4Nºsr–Ú6ÈƒÃZY·Å®5fÌ}t_ÐÙà]žy:£díæ¢Û«ib¼“™”9½ñ"ÿ¡KÌHwdókØó!aŸ*,g-×Z†‰Sþp™RY5%‘zA‡·ç8k>oŽ¨Œ³_¶Bz_l÷*?|ˆ‡îkÚiò_gútDkÝµ#XK-ÆpÖB¡P(:_ÏÔWŠöÚLX«%QüóÚZZ»³vÖ¼h°¶`®Öþ"¬mƒüŒÿ•
ÖœÖúgÞZ [h´S,šÍÚÕ;µpm­!lä¸/öí“u*Ø à%¹_™m©ÑZe­YX‰Œ“×þ§þââý–¬‘ÕþÏÞÙã6r-QØ-õ\MKB0ñdMŒÝ¨Ž	&\7àä­àEz¹÷0ðZfvøêÔ¹¥b_IäÐ™È:dßŸnJ6i
èÏUuŠÝÕD~ËgfˆÛb+'Â¬gpŠ&"ˆ²u­ˆˆÈt<²¦œ2Ó&¶‡–93T;ëØÕ$V¯YÏ‚DoLöÇ&Í*ÊÊXªåÉŠ|¶J‚¬YÍãâö)®­®Žf?¶“mCXošP(
…NÈƒüABûnTËý€2/4•î™˜Ñ{¹2`™Ï×Tžûw´-öqë~ÂÚÓ6Ï¿U#1¯æAÒ¸_aZ"&8Hªã f!ã†¸Ær²‘Ýº8CN-F¾ìÖ”ò¼ÏZ/ãJ†ªdmå´öFhÍùëJ5Û?ªÉˆÇ	‰(Y{Çq5Èð)Ùã^q”FlKCl= !Š®xóã•ìØ\z`»{d§ikêDbØÆ~¤4¦AÎhÕ!´Ö$HF~2S4Édÿ53æ¤Pï§`œÂdä‚’ Ö\©Ô<N¼D8qþàÕ£Úå>Ú¬…B¡P(tb$	íI˜ZVôØÂ)¹T«-ÇAÔ„V¨¸³Æ·7#k‹~Ô¶Ø5¦ÕY‘k5aµ7F¨ÅjõLkV+5pà’2¢ƒ(U¥YçµíZ„0Ûnj1ò€W}.ùYÞ°5Å–Ãdÿ #Ek*{¬-FêtH§¤A.V·ï¹vg|Æ»½¦i¹ñâ5£¹@pIƒ<1k4üS®°£“ìk"Y“.üâHi$Y$Ô`½@µ³vaT­M8
Y¸Y§¶72`IyklÊÐa2r	ºš6Zw¬ç‘}7ÜÈ'Ïl™?mÖB¡P(:M·O¬y¤:ß³v¦û½mÉ4/PègUq
t,²öø›8Œ -¶Úd®kÖþXëÖ~ÀT§A.—ÈÆ4)LŠðïÍ|Ç­Ò¶;,ñ ¤<á "¯˜d~ÆÛD<?#°&Ç’rR³CµðÏ Ž¬Y Ì†)¯‘àìª½ÈG[c½z·1µ$€müMš„Ödàú¦«`­Ó‘á´.u–š§eg­æ\‰ŠWJô$¡„D“Òš†	’LDµË¡5
˜&Ì†U"¬QI³ŠËµ)PCDÝÒ5+\Ø/B·5ãïû¥T›ô“Ê:<|«kjöK(
…B¡ŸÖõÃu)°&œwûõz,1&0›…\ÙCkU:ktaÑÚq3Èÿüñçß»±Ÿ?µü—ó¢i¹‹½ÀšHÓ¤Dfð™À5hÈã–1¶Ihí¾§$2‡Fà¹'¨Ùƒâ›_/Z~Õõjõ’û)­éó°ïÖ_än¦7yÍ„ÖÀqˆ3·þÖÓª|ó	° 1 5²IæáÀ2!›V·t.lø[Æ†Ö’2JwsT;7ÝÝUó¼@2#n/Ò$|¾ZÁFö–%µ²¾Z;w]Ïª,ÈÆYâNáÌ„5÷mÂäçÛO¿„B¡P(úi]ÝƒÑÖ¶Û'lµQYOäÑ4ˆ2Ûy›µŠÖ*X{«-¶ãš/|/°öC`mñø»¨†5Ê³ ‘¡8‡dZõŒ5äâ¹Þm³ ç¸DÁšì62Ëi\µ´ÈýÐÚõWÍ”7ˆk–9!5[®-XëÈe0GHÊÏªUûcZ}~§F4A”ßð:žÇ±%¶ó˜#›®·~ÎŽ…P~[^ÀØ)j¨K†Ã 5ÔeÍU»DZs¡39œF&ý³f…5‚3«‹e·ˆ‹qiRâXÃZâ®¶è/!¶¦Åú£7k¡P(
¢ë§=Z¥í0£¢k€s¿‘†!Ct†¬Ymq ²=z[l‡²zm¬X[Ë…ø‹ˆÂÚ\sM=pr‰¸ZÎˆl·Ágy@˜mXe%‡lGL›‰!ä×^«ôÖÜrUž+–^³VGÖ^6Z«{¬9±=2òûÚ	òLKÖ®î5ãí?„u²`Ž
+îèîX ÍGÈmô/Î„³u4~Tnsž0C¯’3¿ÃTrûÚ›¢jçïâW«i|âÊªØTI9ÍZ†ó¿$ì“åÉYØE\J$þb8µ	rXc{©s¿"[g<w¥W ð…B¡Pè]=¨Ãô„çz÷VCÕZŸ#5sVO{G•C5kUÑÚºh+œY²öÇ?€5qî¯F^Âšh.Ové^Ðz*Í…4²DÒ°D›ì0mEã õk×{#Âj›õˆvs<tî{Âš¨ò9ÔhÍÍÉÍN
«•fl~ŽŸâ9vY»þD#$¬i&"dUkÜÏféÍr$œéé‰å_/ú`§0ðÊþ?µa7hAµ²†¨û	kÎjVTrS¹æý¹ÁZs³×ô ½±ÏZ×öòžØmË•ÓšÂ‰¢™RjhŒq›ÖB¡P(:Y÷ß|LC2ðÌ&#›­,wÙƒ ÂšvZ­yõÒñPdš´Å®‰ÍO8¬€5°ÚAX£Ózƒ54ïV¯ýEv8Ôfþ²ÚŠØGN[~o÷=F>÷ƒ8jJRXÍ&1ÂÌùõª5#µ×Ü u Ž™¸zÔ%h—í°9?X£e¿«³©ÑÕ¤ö$ž)ñ4sƒü Â‰¶µtÇ”JGlµ„œ´zRñwƒFö:`KäåÔ¹œÒ|Ë»ï&Y0MVžn3D“ŸÓ@Š'ÀEÙÚ9ëîåw¦üázF¤è£­s™wJ¬”"q6
…B¡“tõX[ÃçE^²Üäq-Ô¶—Å§Ã`M#KyðÀš“Ê+5ku§µlm±ŠÎýÿ|_«ß¬fí8¬i34¦Aò_³×ÜG6Mc¡ÚÐLŠÜ¬A¥[^ÆÝ^"äý—¼}Á=Š~%Ü6i´öâ3ÀAU©e:èbjæï8}Óüóûeµ´k\rHÌ¶S<#¨%¿`–LfìÈ@5¾Â|HdU0Lˆ½!É²ÜJb*(ˆ›NôÁnfŸ®/Ë¢V359ž[ÏÉ„Ãf<J[¯|þq÷]é¼-EKÖrÂRWen2bqrn'–þ‘7
…B¡ÐIº?H	¬ÉsèÇ§ï’(ÚÖ6yÐHeàJ_JÖV§…Ö¾-¼-¶÷VãÆg‡µm^ýöë!ƒªÖPk&ñ¾e.°†&ÞÌáTP#¬ R¸öË¬§ä·úpí#„5h©ž¹Ï¬Y“ƒ¬f¨V«&o‰í¼Æ
{®üqÌr±¼7}‰v–ôèòÖ]‰â@'—"™DXS«1Ã‘•júÄV1NŽ„³]cÿ¼¥4HÄ€jUrt\Mã–lC‡Nã%@iè£	›ò‘GÙÚùçÑ6uOlþ!Ùß“rPåÿ»8¨áˆ6k¡P(
ýÝ«ÁˆàÚvØîà‰H`m«#Ô@ôA2 aMâL@•nÐi-–ƒ¶Å¶ÐZMjUOì
Ö ·a­G5ÒÕW$÷ý 1³µjrX$ªÖÖ¶†Ÿ4ó¸ò¶ØÛ5ÌIhùœU¹ÂÓ5÷¾àS?Hg5jÂ`FªqCñs›Ô·É‚¼~o÷|·à®FÓ^Zk!/Ç8·€Ô©k™pÅ3û°&s+ò¦ØV­ÆßÉÓ1a‡,¼¨v!f~§ÈhV>›ø5?e|ý-Õ4üýÎUw¾ pR¥Ì"HŠø¢º«}ÛE›µP(
…NÏƒT#HÅ3Ê×ÆQÁ&÷Ï#àøAö² «­z…5ã”šÖ¡ºÓÚ°®ŠÖjRã‚°¶Éè‰ý“ys-¦ë3¬@zõ‚¤}eßle× n›ÁëÍ¨ÃFäþýŸ3è¬Ç ÊãP!]Ôêšµ:²ömÚiYy„ƒ%GÖ]±ñ<«–Øw-T[~'/UóC·$f¥­¸Ñ¢4³)æ…x¥ìq…|g¿ËËá¸ÓB¸Ùõ…GŽ5k"3„,¥i$*ñÀ	,Ø[q.<#.(	²uXK­«³^ØÅS¤ó8\¬…B¡P(tºÔ’ÝÕ„ÑvOkHq<°|É
?¬9¨¼eI½]´ö×šµ?ÖzµßU«½ksÔ—iÃ5äi–q2ËZ--7:ÁrÐó€9¾EÁS™®½-öRžyI!^G¹yÿÜ­•ÐÚ[m±Á<¤ö2²æ•lzÚŒgR²FË~Ö4®HÎSŒ|¥ÔÑ£ ÛBj6µ]jnºXÉT`ž#\éöûñ$É?’°±6Ü3˜õ_Œ®f7Ç{L–®aþjj[ÉoóOuÚõØB˜‘yžúô«¥kûæ@NdÌAžT«uÑ;
…B¡¯û§kÛAFÖr¯mÉÌø^Ô/Ak‚+Y}F*XÛG”
Öê¶Øu§5[úü?ôÄþ{7öóÇ_ÉjÇaUks’TŸ—LÖÌ%R4ZùFÂ€£k ›¼G¶[»ÒûÚ¯ý> Ù‚%l“ÈZý¼Ìƒ4âò&Ø¤µýÈî1bÃ‘.k÷ï,´“Z¿«ãÄUüJ@*‘Ù8bl± x{Ó”GŠ§¿›^¸JÂdƒº½$æ%ãR4Aµ([+J©ñÖÇ–ÖfyÖÒ˜Á5—avá’iªÎoÆM]nJ9‘±†I¶žQØP(
…NÕÕ¡58B‚ÐtF¼IÃl
7‚<è?6äÜ+9§¼ÑhÍiíõ¶Øj¯yOlµ…ÃZÑXc£5¬/ëˆµv"FUÎ=•iÅ|DÇ‡Ï÷···_{E4*»/$N;­Éá#|ÔÔúÍx­*F{t»þ²Çƒ³›ý†7KÖnßW£&ŸÙì÷x©¥:Í¿“+ÉÁ £Yó{´Aµòöû‚$ËØ¨–+¦µ©!*ªÅM÷+ÿÆzh™›_¥ê”5&[ð‹peÐU{Â.iqèËïˆÙ¶zÔ{ß”P(
…NÖçõ“h‡ª5u‘I §Ô´¿ïÇ‘È62e¬­Ð#ºf”Ö^k‹í´Va›é¿këqy¬™VEš¯)*ÓFßÊ h§ûŒS5sùòõë—‚gó hÇ¢5ÙOªÖ^óîg¤kjóøÈÑ<ã•ke(õnçÐe¬æJ£ÖœÖ:<aE¬ô²žØ8´0gõëÕ<ã‘¢¯A»wÖfK±lUI ÷ö¢líÑ²°­w¸#	w°¥H„¼Œoµ° OL2VuØ~tyŸzýkm÷lifÑè!
…B¡“u+ñ4H›cÂh2Vy©YÔ÷y`íÚŠ˜ÒyÙ/ŠQ*Z;Ðû/+YOìÅ4ÈšÖÕôX‰–kY&k@ó(ì5ÈRÞßVÏè%°æ<°Çš¼W´ÏZVX#¨Y›5>YŒÔfoÉ°Í¸Ž/=X»5ÉY­Iôî7ËoÈ
_’,š–RëÒcj6ÈU]–Rd»ÖH„:ÁVäî:b$Ç”ðŸ"µÉaŸM6rpGÈ‰Ç&_…ÒØÆ¾a#Ž¶ˆ.4®8J§ìäxå¡ÐÿÙ;ƒÜ6’$Š"¥RrJ6†º/ÐðÆèö µjpQ»\ÀµP€g˜ôŠ½ï;ô|_c–?~†‚•’H‹òÂdÇ'+3ªTÐ
àëˆø
…B§ÕAJ$!Ô7 3Uo{nÛÀöa­Ó4åo‹ý¥‰M3ÈcƒÖ K«aá kVAÎBgÖ¸†|ðgj6”›)Ü¨+ê*B7H„£Úþœ5mfïƒËë=‰ÖæÚ¼¥ûñAkë»sb5Ã2H³gêe±ç™ÿc=šÖô^vqzEF£ŒÉnX©,f AD«”!»ÙšâÕâ‹÷Q‘—ñ½œí~Ä2}/©þ…zÈÈ˜\–®Ÿš…vIM1>iƒ©ÑZ›jµÿ¨’éö?-ÿŽ1k¡P(
½^wVÛÞë ²‡Í¤³Ö¼F 7ÔÄýEØVÊ“ÖœÖŒÅæÂÂv&öqXsZP	_­ÇIÇ­•Öqâll¨n<¬äìšüãÈjØ©qÒnµÖòZKkŽ­>Û+<«EfÁÁ)kÎ‡òž‹ýà‘^“«ž]3@€¡ºAÚ ]Å¹=³]Rü‘^Â}4áÅœ:·¿èj¯ÚûÛ(iû);'D„5óz‘ÃÔ²Z|ÿg|bð·[‰2@,›U~L–¬V_{OÃÊÎý¡P(
¢ÛÝW&ÖÄ¾¾2qMàÅl²—Q;Öpy°¢ÃQ"RŠ—ÿr©Mkm>­‘YSXû­¡µƒMk µ³~ÎX+² 8ãÁ7e#²TÛTè©I6‚›:Eâ¢Ã]FPký YõáòŒ™s›=š6¶ý».`$6-û]šJs»þœõ‘€X«T]ûu£ó`¯‘9Íà°1ô„So¸‰¶zWoÿk²TT‹‰YßFkŽml	Ô•² ºnÂ9â²s±k	©×ŽIkUÇuùéôó£g6û0ÊeC¡P(:MW?ÖP¹ÓôÚn«Ù(É³‘|0ªl(  ­ƒtNqJ19¬hZ;Xé3±?:ÛË ©2©0{&5ì‡8kÍ`­^œF‘,Ó¬‰D9)´õ¯öþ¦Z9È£É¬syôãÇAÇG¨²™kIs\pœyËY-ªeD)×3~Ùƒ´´*ujÍoßý–!Ú—†ˆ)@ÊÁ‹D	\³HìXpÖò?Õ^W™ta¬¼Ì·‘p–ÝÍ¿É­uÑtÁã|_J=»Õh0¢™×ýZHn7jÆÚÖÌ†s(
…B§én÷uG\ÛŠ„Ù„`îÅnD8MŸ“>•fP 9XÃ–sÊq;È_ÖöšÖ¾ðhecÖ>ÿÂÌ~õøTìÊkCQV[re¦™`FÈÐ»àY©†#³â™.k.‚š£ZÓµ†WpÔbÄ Í3i<š~µã™µ»s±ÌlI#ªaÒYÖ
*™Mq.%5"È•¼ÀQ×Œw—#¢Y ZtÌ<Æ–
·ð×:BúØµ¤–ì$f¯=}©ò}B^Š®ßìiì­„9­è·jë^Áco¾"PNL‰÷k¡P(
¤ÛŸ%µFXÛíè5!Ãöè½¡ÔF*ÓØLÅ>šZãXloZsyÓÕŒYkÜ ÖL‹Ô²c:gm`D5’Rk4~Ô§Ú‚WjI¤ü
žC™¬¶æË²ÒPOGµ6±Ö¦Ìš”šq›þ‹üyÞ#±[Ë~Ï¤%"Z¬!$Êá:K¦:ã®®n™A#¹š÷¯·7Ñ|„T†€n_k]ÒÕÇcÓpï´ÓSSùËÑÕ»“®¤5ö¢êôô^âUþY#ëod‘S‰ìÃÒ¥Lëã3
…B¡ÐiuhšR“çý|/Ð&é¦­˜2VÜñ™ee‚ÊðÄ´þ8¬q,v3iíË2„sÿ_îÜRH‡µ£™5Nƒ]Ê†š7£Ä¥ ×æ	SX‰“ÁX
XšÔ\k<›H’ZkÝßvïQÎ_ØêÁŒš;<ó€Îy$öµÚ@fQ§âžSÆº¢ûiÊ:»iY
Ír7½MØmÓ;}ËîJbw{·Úû(Î{U!$•ÀÓ‰µnÕÂ¿M`âLÍß÷°e¿p°Ï™»Oâ ’ÍÏðIˆ"\À	EÎH(
…B§éÃîëö^²jÈ©m¦Y
 k»í4ŒÆk…`S†µqŠ'”^3»­‚\ÌÄ†sÿ ç~êP¤@Ú2µ¶Þ×ø8`bÚŒe˜Éˆ\'¬aŽÁ.Ë´š³Ö†×Lž`tjm!k°×·Ö¶¬íïgî/BË~&ÌHjÆekiÁjYn¡ ÒÉLhôNbxvþL/ÞxYÞ&:Ycïë‡­¥¤ä,k®&žÙ`»ó°ž[S[5n—_™RÊ«E*Ô§Ù²è/½	ÏÐP(
…¾O$
 ·2NððßÜKÓÚfŠÙ@
<eÂVÊ°„”vÐõÖ8Œ8¸¹sÍ¬áy´gM`MPÊq…£"…6üÀ6g	h#'`ã¬mWã²>0hÍ[Ö–©µ¦
’/ž½jrâvxŸm/éîê,Xf©4n 2,n6(²,[/,È`¬^Y…ž:“3FRe…ÅÄ{L„ˆ¨€<%µÆ/äIíEz‰lßv‡µNÉ:gæ1Ö‘7¹ôJîrmZÓžFúåŸ^QøØ(œûC¡P(zK¤hûp¿Ãª¬&Ëv·à­H¡ÀZ¥¢uSyÖ8Û›ÖÚŽ57ƒ|P3Èß?þöQÖÃeŠkx1œÖŽbR/—šÂ&çä†#›2\ãük…5’ÛÈs+„Ä¶nj!íhËAƒÖžññÌš«½é ­ýzw_örÎŸk©4XöëEžKh©µ tTë“ÐLy™0gÂUzÑm°Z“0ùVeí0D£aJðë\€š½ûi%a¯°FÎ”ƒŽ/½»‘´Æ$yZiè„¶ŸuE-vk¡P(
}:H)œ kÈí~cy(ÙÊz=Íu*ö0F)M¤CaíÓ“±Ø<gÉ“?ÖþçþñWVA³ÆÔšÁ£îÐ ¥š,w¤ôŸ1j!m†&@Û¾"*õ'!¹›ŒmiµÁ9þ"ÏÏY{ÑR’ÙbÒš£ZÛß&ÛÙÄ&«%Ú|'ëmQ#XD…%¥Œ.5 ¦szÜ€êÆd#¼Ô”Ä`—\Õ÷‚–ý~±3/ü8ºÕN÷I)Wñ”¥n*äÚºèš3m«.ü#.´\6{¤»IƒŒÅ±êÛêE0¢öÓß}ŒY…B¡PèD]Ë¨µÝN3k(‡”´¼ûuàškø!¬­GB6‰µc#Þ´FJ;àÜ¯°ö±õîoaMéˆuÔO…µ©Œ²yf‘À’i#–Y¤7&$ä 2AãÂb¤©„lxjZÖp8©YÜZBš¤?ø{ˆÎ¬eNrHÊÐŸ¢	<bxM®2Ï&ÀÖÙ—@À›ÚÉ‘Âäž¥©E§¦ûÈÖì&Ñ»`µÓíû‰k8kÔ›±ŸˆQ_72²ì«.ìû/ôC’¼kMm %ÊØ“~èâêùnÇ:ÄYF6ºC¡P(:YWw‚hð¡ÉÈ,´v¿b›ç…$rRÊ(#Wû°ö£Ö>}^O÷Ï6­9»ý—ÎýbIs<LÅf$iÍ¤k“Ú ˜ä\˜c³«£Ò˜BB:›"1¡ÍRk†j­u¿¬mfÍß—“Õ¸¹Ýˆ¯z‹-¢ó‰}ýžßâöójP¢Á ^Í9eŽòJY­BôÂ}÷{®9TWðN~ƒEwÌ¹5°ÖëuÀZä=§ëÕ·‹¹ÑÄèÍ
VÊ›‰‡>Áø6~É©Ë«®Ëss’µÎ3ôÊeµñçVnÊjaø
…B¡ÐÉúðóßÀ5ŽYƒ$fb?gÔ{)æ	di
!¡Ã°ömZsXû‚ƒ›®Ì¬ýOûÅXä#híˆ$q°¶êK+XÝucÁ5¾|SDÅºÖ´6rZö
YÍ9®‘×üm8jùéÙäšÝéË#±¯~pV£ÿ#-m¤š§ÎêOWòä-d•4¨Æ‚Ä2ÀšÊÀ@#VWÖêe9‚{|)ü.©5®Ú]ÈÿËêÜck[ÓÈÇ®…Ýß%{†&V6óÈ+H9œáÚßqCk1Ü!
…B¡·[Œ Õ Á´™°¦¤Â¡·ˆ›!ª¼WkÑ´ÖÀÚ'‡5NZ3XkäfÌ ›žµ£vëÂ¬ßzœªFµ6ÈiM­!‹V@Nr†À2kØTHÍÕÐíE†#¨Æ÷¡Í¬-‹ S°Al<ã‹ü÷žhýá·DÅm“DiÖÈjªŠæàŸÔÐ‚Fõ6_W„¶©áÉûn^ëüûb8ö¿9µ–ê–mðBJÊŠ!s·0ÿë±«"µv‰8ŸEIrµƒÌr(—ÕâŸ¨ŸpçþP(
…¾GäÖ`m·½WaÚš¦Ó4U ?ÃˆÌškaZ$µF‡6­„5šAÒ²)ƒ$«QÞ³FZK)`(-qT:ÃždU·Ç½ôÚˆÌ®#íÆ)lïÄa¬æîý",$µºªáQÕø‹,3kžO#´Ù¹ŸvíÌFb_Ý"cFË8Ë 1…!Tuä^´¡¼Ey2£1+’¼±QlžsÓ•
k‘·Û÷;¬Ùäã¤‰5Ï^§56–Žïã—ûùÈ´J“á™Xó¼Úßñþ¬·ŸDKc(
…Boµ&œmçi«Ö
¼ìé)y*‰FÏ¬¤´ZO`í“±ÖçÁ›Ö¼Qí‰sÿ<ªs¿‚Ú!X#­YfmY	X+ 4å1nê*RÌn°Fii¬V$tXsPã¾nFðlß>öÕ˜ò[Zc	Ù˜÷?ß¶&ÿÎÙ_äê]ŸÙ5$ecCd$G%Ñ*ñ¾Ž&ðÊb˜ªV¿üË]>X·ÇS£\’˜‘º¬ö¦ÔZmkñš#µ®ØUÑµv‘~¡)ÛkÚê}Ô=Ë’ÛFÆÜ÷žŠµÑˆa
…B¡ÐÛê %±¶W‘I`[M¬	íÌfÝ/¸â©ãÌœSLŽj¬-Çb{Óšw¬1nÍ ?ÊCÔ”AºÃH›Yù’jpÒ×ÍµÈ+Çl	‰peÁ‘ÖHmx¬¸i@9¨qu^{Ù½ßä³Öl¡Ï<·†ã	Óé!ë>«ISÞÝÕÌjlniBFa­&Ø\t1½§ÃxeKÔÜ8¨ÑˆÈ–óêXÃ!ËS¿‹îÿìMnI…‘îDÚéÁðo™¸¬Eí¸" µPž€h40'˜•0ë¾ƒ.Ð˜KÌ5f9ñâe0X‰i€rC"â±*3ªXêËô)"^„µÈE©µ^)Ñ2Óióš·ü¡d,ï™kŒÒz»z÷éµ«_?«-µV-Œ¿®È–C¸Ð/ªò¡P(
]¤w7O{˜õO»Ý´›4¼wxFuí8 Új^é#§šÖ&LZ[°ƒt3Hø‹Üµ1k˜ŠýãÌXlË­ƒ'Ö«@^è[Ó|«"å-²š,
k]Á#a!jÐ³O«u{¿ËðË7K¨}Uñ6weÅ¦rZ k¯µÛE+K Ik(rlÃ°qhñ¹š­Òê4·¦°&"­)¼añGøvVÊãcÑ3uÙÏãËJU”KÆ¦‹Ã.5Æ
’5!¯Ú†ÓÒeÅVp¬õ=j%Ñ%Ò>Ôøp†B¡P(t™~û²¿F“úGÑ´ÓŽµ†k
9#ú¿¶€5O*RÎŽZóÜÚ×³#ÿúýÏ'ƒ56¬´ÖY÷[ × ZJmÛ°f¸)WÌ2¡¦ØÖ#šÝppéFú£—AÎSkNhýœ5^yˆÛ]në‘ä_xózm é%RT9ÓDÄ`M­ ³•A6RÂ)¬¥”%Øì,±Mm6y-[æ›^yÓTLe>§Ÿ5„l·ï¨~‡@btì$2w2kÀH­½M±åô¼ý€råG6ÍKq Y^Ü‡ñÅ˜µP(
….´™î…ÑÄ^d·¸×Ô„ÙØ÷Ä›qà±ÌµZìZbÌami,6Ói¾QÿV3ÈÍ -k®çÊ )šžL«­×’X£™”À«Arµ=ÌÇ–e‹Ðü —DJÓsy*öŠ/ªG5Ã5÷îç)aSË²uõ¤F¡eí•:~'3‘,æ~ýIw$ÝäŠ†ý©MÅ.VZW’nÌš‘É9®á–\[è2µmaþ“Þìç•”§½m­Ö,{5ßM¢³o5—k¤Ö®ºŸ1Ãò”*	‘‡Z—igÉÏ³Þ—ÖP(
….µ¶I1äÏ~£±k˜[¶ÖÄ´æ¼FBÁyÐé¦5sqRëýE`‰¼­-[÷e˜ÉrVƒ
=û)ôÙ	ˆ9¬1_³šH®·Ü½ÿ8¯¶˜Y£{¯¯þjb¤¯ 7¯”ôHÖ71ûã§$ò™LM4XKKŽˆî}²1jÑÁN„wCž:c¶«GcÕtÕ¯³¹ËSk)yfM™» ¨8°›7»×¬z¹*$k¤Ö®³@¶´OrSá6Ÿ{Xsór§VFãw)¡P(
½€ÅÈ~ÿôT›dÁ*°ÆúA7¾ï¬ûoRNZŒÖ0ûO‡µÙxlú‹<Ê¿U$5,§`­jÖ†qD"=kØÔ©ß€Œ±1*›šZ’Í0»n”ÓÚÐ¹A.dÖä€úÌÚÂä4BC„•âýKŽ™^iËÚ?>5§G]jTÔü=™¿lv…Û¹ËÒ0ÃfÞüÙP´æ Ð8.—Ì$NÁR³ÁZk‘ŸëŸ,ƒ¥6ÜüHðÑ?t§5Oqò»˜ãgò7&úPÂ™prÌk™9Î†­ÏTÓáÂpî…B¡PèB}†¤ÔAÖ&Í=M“y*’Ö´Ò}ò—}5ž…µÓMkôÙß¯WßjßØµvz*6þ†ÁzÖH`aµVÙh'zãÿ–À’…c5l¤9îÝ µuo‰¥cV¾\ý`lÚ,³Æ—o¶óá¹noÞ½NVk˜¡™h-qWÙC„¸\K!¬Uª&gž±X«¥›–]
ž=XAfe¶,“°ãGÁìZóQx›1»Æ?t'Ö´†Cû5¹öß(9Ñ”ã°	kÇö"í¢T²|…ñ#/B¡P(ºLŸ„Õ`ù s‘ÝŽ|F±sM%ƒ…Ý(ÅkK©5j©ií¯…)k¿ÿOÍ X»Úyï~QË¬™„É¼aM'doiþˆ«™@rÜ÷$‹ÞÒÛöæÖ†¶|9¨aÁ¾8ÂÀq­³FBkÐ&K¡k÷|ß²vóª%Ÿ
`KWS—rAl·u²es¤qHu³AÅ4n5}J/iè¸ÆÞ¾.J¬^2µF¹gÉÒ²‡ïS=ÐZïÅuµ2f›‡]ô
*­4Ö˜ÝüÝý±âÖ1ˆfÆP(
…^¢òéi¿Ã˜5Ñ~§y5Y„v€;¤µq¸ÕÆ°¹"NÏ$õ°æu[iZû`m¹eþ"j‰£·ƒìaÍÍq	5¯ƒ¤¤ÁÚf°iHü„$Sjn,fÖdïüûå„V< ;=—½ûugÚÌÅ¿c6'¶·à/ò›'jè1B_Š™Râý¤éì…¹4,†iYBz÷c!…ºÌdîñ	¨d3‹ŒIØ—9´Ÿw†„%Œ~£ÖHÌº˜ø½ÁÍƒoJüŸª–±‰´…±‚Ý’ìž^­©0 2“¯^[äkÂ2
…B¡KõYPí¿b)­jà5Å4xCntöšÜCM?ú®›‹ÝÓš7­ýauŽl¿HëYãrÖV3ïþaÍBHì„µm3FA:MÑm"¸m'ôâÔ¼c 7×Àƒ¯®g‡iÕeÖºÖz\ûnˆæoã˜-úõkï^÷Oy„2E¶^:€5T²rxvn®Ø°Ë‘+óiköžZü³eØÆ·JIØ¿v06•8z¡ÐÖÏD?	Š ­[Î×Ô°V7 Z›^DüæSr£±3Û=oeÄïjÂ2
…B¡KõñËÓÓ`cÖÖv ´i/Ó±g0UdïÚ4V:ëþ3£ÖØ´fc±{Ñ_d?®Ô¹ßÌ O”AB«9­£H™kPIÜ4ª³ˆÚBŽà3à'‹ñ3kÎmçšÖng´¶Âé½{«çkÖ°f95gÕ<è`íó»7PRç¬–ð®Hwå´Z3TÝx?²BeQÃ¹’íÆ‘Á?ãOñ+û_šZK%©#$ÅJÇZÉ×&59±Çôã+Ã÷’]ƒ5V:"0U¯ù'Ug‹JåP(
….ê &1í‡ fœµ¶ŒF¤ÕäJ!79MHñŒÒé®5ÂšÖþ©´ö®æ/²]¯ÌòÛSæý‹™5 ¥ÅÖ,à©Mi€7 ›,kQ¡áÃžÔ¸ÎH­K¬uvóÜZŸY£¤{Bòþél&6NÓpózÇè¦”:_
¦ÒL…Þ"›ÚU³¹îÓâ±r´²#›œ\šceW
OÇø¦_žZ+räZuÖD¯OŒRÇ“ñ>E¦ózfï¥£ß³Ø‡—°&»‰f¼r±±õøðæL\“¯ŒRåP(
….ÖxAÊ±CbŒ¶Ù>ºMfß/›¢Îür»(²f-ïÕZ.„4Ø‚ÃH7imî/òô°î~˜$Pm9³æ#ŽkÖ6ÊcnÞßì ±É2’ÜpW5ÚLSnë5,5­‘Ö¬gmÞ¼7G5œ3ÇGŠ!—ï³'Ü
’¡WA~|½ÅS)y-1òWXs~¿:UTënAU›¸Ë	k°#Ô¥ÊÉXSLÂþ•ƒ±]‰°¦]†ˆT›ÕŸ«uðóMXsŸ™B^£˜÷RGDP*ˆ²fZ+¥×ÑÉ
…B¡ÐXŒ<<ˆ%¤º‹ìQó8I4Ñ¾_G'N›5Peðy.³v„k³Ìš5­-ÂýE¬eÍç¬µDbb¤ô*¦LZÃ¦Ì†X. 	+¨‡5Ïªu¹µÎa„¬¶XÚõ¡yøÝ+Ù¶æoóÅ7»–µWÞè+
ã¶$š;&¼™²ÿZ>·F'o—”Õð&'Ãþ™U|oºø;w^¥´´Jû<C¥Î²*”ºu†ÅÈÎrÐNS»1‡5È8WÌ¹¶ëƒdÚØP(
…^@Ÿ§‡G´­í¦ýÃvÜîvœŠ­°¶fFj„‡rÑÜ\ãP\Ã›ÖÜ’ËÌ_Dž¥ä·ßÎdÖ<µæÞýÃÚ« i‹MXc®¶æü¸¶u1ÄÒYŒôþ"XÉk­Ýy†qÉdÄSiÜå…@vç4zÓËÏï^}çÓ¢¿HJ3¯TIUæÓÌ©_Z@fËäM¦Öxðlª\Âüò¡Zç•ÚTûfid)îÔî¼ÖÚ–J¤;¯®(¶d•¶/ÚEý°,›ÊqèlŒFÆP(
…^D7_¦G˜ŒLÛÝÔ`mj°fekŠ*>º3ï_nZ»³±Ø§Fb¡5ýàë cµe;Hó™AÞÓª_RiD1Âîã†D5v¬Qyfm†k|¹œÖ<³öü°5âv¾á6‘Ý‹rX{›¥t)ù\l	jm¹hÌ?ëz"ŒÕº|MVRså%/åÔ~^©ˆrJtílÓÖŠ•=bóô(‚°i¿ÆšØ’Ðr‘ØÓ«néÞ ÙJb%âQ
…B¡ÐKÔAÞ?<
®í`Á±½—¼Š E“ÀšlœŠ-F‹”BHYN­5­=<q,6ÕÄîè‰“Ôf †´èé©5äÁ|(¶ÛˆØ†Õ ÎëæôtZ¸òèë ûÌš©‹=wæ·ÌZC5\8ÁÍŽYäêv¸y‹“•©Tsjë£øSstFÓ“n8!DìbÃIX‹È¿Éb$%æÕr‘¸ª$ž¹v)Ïn×Õ°VHìŠjò¢`ÉÏ\¸}\!n>±$fÚÂ(
…B¡—Ðg´©‰ÉÈn‚Oÿ$¬†¦5‰6£,C××­ÐÌ1¬-#Ês°6lÌa¤Ÿ‹m-k@4E5æÕžiZ»sZ›±ŠÕœ¹T6Hm$¬ÍðÂ;Æi}^ÍPM"×RbíÖ­ûç5¡zvö!ßqÊnø›žW[}½“¶òÚ0Â_äM±ZJ3XãÈl+:ÊÍY­ÊÊ°ê}
a­ž¾a}ULWû›ê KAny\(mëâÉO÷ƒ ãïãGó+ã³+ªqò!ÎR²µŽV#÷šùqMÅþ6$þ^&²à¡ÐÿÙ;›ÜÆ‘$
íD¬
†Ë€×Þ5X4À%Üq%@kÁ@7˜[ø s_`.0šíÄ‹—¡„Úƒd·dþPrwWÑnèsD¼…B¡Ë´ZÛïk([Û"¨ö*¨¶™fö“Þb5)ª8§,=FP>â0â¤æ%k“”¬)©Éa™ç¼û{„µš×Ít1šG¿ðf	­1’xÆ;+6#ãJ"¤›÷»ä‹‘gŒÁxZdÂ†[¾¶8ú`¬ÿ¬qþõ…3bµìujˆÞ ´#oùÚh°Fé–J\bpIÝ`µk´Z#u7I”Éjúð ”³ýÙ°N)ßI›+C«¹´ÄÆE\ÏwÙ~Nž>g|ž3¡P(
](R8í:h½} Áh"µå˜eª¯‚kµ$U;ŒÔm±ÿ¥¬f-±ë’5ë°¶Úim”“š6K….öÊÞ¡i”Ðœ ËqÆUYŒú\$5Ó¢;xÕhÍ0l%²&#.ý'gˆ_DÝüôãöëÒ7<ÃËF³çîr	¥ÉTÜãytT#–Aþ‚\M‘gwU‹‘œøy=µ§ŸÂsY/h:)¬Åóù6ß|úÚØÚ…èinÏjWvAï¡P(
]DbÝÿŽSX°6ˆGm^·z÷:Ó4Tª€ÒÙ¢5:Œ¬–¬ì²†ñµª)6Uy÷;¬™
¬Í%w‘UjÊ›Vº6o±áƒ“Z¥±¢\«­Q/<\'”Æ(î]¼e§Ý Rø›6O÷ ¶/ïNANk®E4§‰ ÇejA,Ë0·ºÇ'Áe¤->ú]»ÕZÎ¥×¹LNØˆ¬%¹åâ¶‰<Èoô]³•-¶ª”eáUj©fµ%¬…d(
…BÔ_Bkp„|EÅamžf÷Sºv˜sý0ÝÂ	ÑñdÕòùeÜìé0²ÚemdÉêÕP´æµUX[/ZC³5"¥j˜Ðhb\ÍCk“U­ñÀ²F5µ$pÐÛ¬ÕYq-h­2î77È˜a¨8MØ´…œ†Ö&„4Ÿl_˜Õêj5ˆ-²Äúœ\VF,+¹´6ŠCº@«]³ÕšöÎkôr_ÆIufë¢åVäA~#SP<{Àzyøš Ùz<­]Ll…ÍÁï·a
…B¡Ð…ô€’5ÀÚTðlb`iæ.‘ÐÚ G7Èâ4¦´ZsXó¢µÊ`Y(Y{¶Èš­as¶fÍ#k8Š$kÉbšf‘Âš±·Æg:sYËYmYëôZÐÚzÍUeA2²†Ñäoð©6„¸<	l7_Ý’Ê¥b^rmÊtò–e-E*sZ ÈÛ[®L)É>Œå®›Y"¥¸ÓWu¤=»ìø¬ÜÅº	C‰ïP¸Ø4elHê9ƒÄåŽÅÈÑ4ƒèˆò\ã»&~fC¡P(ºT«µÝ­Ö6¤µYMëgÝlä¤æ’ˆkaÞßŸ­ýñÜM¯l‹]ÖÐe%kê,"¨¦‘µ3#à¨*ZhƒB)iÎl§°&{&Eºä°Þ›ãjÍÚ
ª­ÚA.(ŒœÆCoÚÎÞÂÓEÛÁãøIÀvóaVkÖr°aÂŠ]r¬±S,´¦{0Y±„tX+¹“Quí<Hð6gÂšŒÊmö)`½(+LMä½}ƒà*Ÿ{N
×DMÃ{øN¨»_;»1àzLÌw9»‡B¡P(t!ÝþÒ¶Ø»ýn+M±h“hœ¶”œÁEV3q1XëÙ›´¶^²ö›õj¿½ÑZQ•Y;Œ˜Æ	>1Kä=×°a›lìyùàrRÃX÷Å–³;ƒk¿–lqakYTœ¦{~=4N³jÀ¿¡{úõp{só%“çè1Òè2%Yd¶ÒmšT K&‡5ËqlJÍ^±®kœøE°'ùpÕGi•‡¤5KfMò\ñèÝÛÝh„R˜¿…¾G¯=Ö¬¥¢œP“x„5Î'-÷°³è¹
I´Ñx/
…B¡‹ZŒ¼jûƒÂšºsXR$¦kãXÐš³Æ³kiÞ¯m±ÿX«Œû­Ëš†ÖUãóc5k}1î¯ò ·*]°õÄuÕÖ³ Ür=²æ13ˆ+°š¯ùúªy¤GÖ&Ö°é…H%%¶›¯døÞ4$4d-J¢ã¸V¦*y
òZµ6["dÛbT€+o·ÜªHüŒ<HÄTŒÛJ$i[m>YXÈÓ[ÄR® ëä3gU¢î´jÍò™-H^›Š0z%üo š"†B¡P(t1ÝÞWÛov˜Årg™Àh‹ÈÚj¦±vBtB©i­ÀZÕ›¬f%kÌ‚D—5Ö«é³æÞýuhejÎj¸†X›ÏÜ·Ÿ—Oµ}‰ªÚ¬Mƒ´Êò×ËÖü®©•e‡æwÃK?Øn lŸÎjµ M¿å*Æ²,q´S9³åGœfQµ†“æ#\aÝš.¤›Ÿÿ¬å¬ðMn;–¶^\Ô*ùãÿ¿o“ËçTÄ7ÝeÊÆd?«)É•õ…Òš-¾B¡P(º\«µ÷·=ÄÎØHƒœ÷{é=^²¶EÍš6/3Z«¬54ê<Ha­#ÿ\´ÅfÉÚn;ôl‰}l³¦æýæ0ò²ÖhÍuŒéešêôGî+ÆikYÄ5§5/Ý[÷î·$Èg•a®
Øü0‘Z\“ÂZ7É5>þº¿ýRïÀimƒ‘ŸÕ~÷ž–…-©[Q›tÍ½ÇiDøÁ/>ò}J$œ%h£	­²IÌ|Ë„54GlÜŠ<È¿´¹ˆ§3+¬é–QrïHk¹ üG;1çY—mÄC¡P(º˜îßß;9ÞÞ¤ÑîçWYÍ,lŽMXë:cµÊcÄ´ZµÆ¶Øè´&´V÷oÆ—ß4á!«3}ÖÖªÈÚ8Èå¤ÆÁ9m®€ìL¤«®Yëpñpy`mAjP•ÚèN6ØxûôÍÇq)ü§öý</½ spÛLO¶«§MùÇ:íâ²ÎaZlæþp6r6BÃJä §·O:±EbÝ§äA–kj.Ò²3rnÒ±I–þœ
e§6ò ¿´>ÒÃÌ\)£µ6)»[÷êöjˆº1ÿ±=ÂZ|/„B¡P(t1ý@ÑÚÛ×~§þaÜ r ¬ÑTqž§cºaWGÖús±­-vé´æYÿ,H–¬A`5€šhX;céEk8Õ´3¶×¬±þ3G^Æk¾­‹Ö0;«­W¬ÒŽuç~öXs/È#ºÙÖßÊoY¨GÏ5ýƒwÓZ›ÔtdœlŸcGÐdíÄtl²–Õ¿þLx<5p&FÌÈj²&Ÿ9ªq[”"ò¢º¹û˜ødíA–^[V¨„W¬A˜h.qÐïb.RÇW3ÎÒa/ó9SÉaÍ;­ñ¾_ÖB¡P(º˜nÞ¡·êuLÛ¾ÒšÇin©ØÜW}±W!)®m±Ýa¤6î÷4H³©qí\Í5šqòÐšyBb|zÉšcš-ÕVkÖ:=ØœW«Ò½5‹w„Ô‘§Øª,HØŒÈÛKÑ$'Àm#hýø`»~ÖT?o¹d%Â^;•„¹öHk^¶ÆLÇ‚'!Ë£3p+_×}¦uÌ´Ñü7<QñR´¦Ö€f Cì–/Fä÷a5†Êºp${ž‘Ü“GÌñ†$«Ä!œûC¡P(º¤îß$òuÿºßd%×„”XÆâ¢HV×­ÏwÆ†ÃHWÚbWY;É‚´.kÌƒDB$Yícv^´†ƒ5¬á Ì¿çá´e€­ÖÈƒ§‰œZýtöwP•¬-|C\ºóê5ç9Í<Ö¦ƒ©—˜ZÇ?F7NÂiüazu¡áêÁrµdMeú{Ë(¢ä]†m›ø+vâZKP3éÝò	_..Ú£ï§$S¸@~N¤Ãš6^Ð$H¤>R--c(…5Cm\?¯ÿòF'¡ò¶8÷SÅ-ÈÕÊÞ»`ßÑD¤:"*
…B¡Ðuûø~Ø¯Âko`“IãjÅB:$AekZƒjV«Ckh‹½=üGŠÖ*/Èý<>ÿ¶ÈÚo`šfÙ/ªÖ
Cy$¢€'æýÓT¨Ì N®:¸¶@µ®ê‹Ý×Ýæ´Vy<2ï‘Ã4¬x[Oƒ5î	r]§ˆÌÓ~˜´Ï7P´ÐÚ<¨³¿‚[lWa5&Ë5š)u§!5+XSÏoÃ2]QBfì§†µÈm!›ŒI#5Ç‚µ¿Çoæ?+²1ZÃ“egä;FÖØŒ¡nÅà¤®ßÀÒÍEZ€—)›%¨)%ÿý‹¾C&~ÜŒ°x(
…BÔÍýûÛfFÛ¡nf#Ó Ã"ÐÜE*ï~ëyŠÖ¶»e[ìÓ,HFÖ¼)¶Ìç‹Öj7ÈrŽÐ4#apÍ’xÆZÙ8ª­EÖpà¤ú3y„.¬-¶GÖøn˜a$os[®ND^:P¦V«•”Î	£ºø³‚Ë©@Û£öÍ¾Ò/â›ÆBiFØô#>’¡øžZš|{›a•î9#Ô¶Vû$—	ªáz[—-…oÙ®ÃZ­}VcÈÂƒç	‘Ô8ž8Cbç&#)Y4=~€C¡P(º¤n‡íVXí°ÛÁed·Ý¶¯Ûi*@…ÑâJ8ÎÇÖÖØÛò =rxa`M±Ñi­vƒ\…5Q]³ÖP…µ0­‹Üf×ŠF.§5\gRA©ªÃu¬YóÈ'?,‡iœÆž°6%r˜©‚kc?bEX£ºixzzx¸¿ù,Þ~ÕÌ=®|žO"Àš,°·ÌÇZvßýQ…¿ÖFXí“K—Ì·½É„³¤°¦ÕH¼¡uj˜ Û,ÏïçßB_L“\Œ–7©¶¸˜Öì–®ÙÒ!¹çÌœ‚¼þ®&~‚C¡P(ºl«µýv¿ƒP´†kÛývS`©„B*( «PÅ|ûµÆØTi‹½(Z“,H÷‚´š53ƒü€$Ck`Æºhm˜i¼ÆÓåÖxVò/dx®î²V£Ú:­-Üøÿ°	‡ÍþîyôÜ!«ñÏ: Ú°è‡”6qB‘~#®iz¹‡ŒÈ7—oÇå-´áœ‹\ÊYÇ¦®,B0\”µîYbj8©ŸÿeïlrG’(<”Ùé¡»`4ªÔÚ;#A¹ä‚;­x-hãèæ³òúsŽ¹Äcz9ñâe8¤¡±{ìˆG2(Ùèj– }/">ó1ºz[ÙR"¬±²=bH–xh|œz(¬2DòÛ…ÚÊ´´&H®£ÎƒGÐc-­}¥5]¬…d(
…Bï«_ö{á4M‚|Þ=Šžö›¸@jÍZcoŠµ4#!µ%[Ôý‰<²–çý3ŠÖ¼dÍ² -	òªµW¤ARm`*¸ÎÖ8ø’šœØthÕÒšù‹TVsµ-ÖÎê´Â­ÂZ.¥Ú–äLV3SÙv«£U¸#»<oU¶wýwx&<vf?á÷ùEžÿüNdKlÈu¤AwÄÔ§#Žƒ"òãtûzXëªƒ?}ûÍ¹¿o1ü§ªšáÙoÜ
Ý¥U(¥DSqb2¤í-G²Š/wCXÍ„B¡P(ô¾ZÝI¤Ø÷`	¹V{z¡Íê¢¨²—¼½-öyûþû¦-¶yA"’¸†‘‘5ŒçaÍó 	Ž¼VìÀÙ ÚY9¨Õ8.ç@6‘59"nào3W–©›œï¡¬´&¿ý"y]UÑL›¹š©¶/‘$7ç¹ù»ðÚÕêÝê[˜óØ+ˆÁ~BÅâº0WÊ¾°uIù‹â¢)VãvHÇfC8|‚¢57…ÔbD}¶Õò¯‡09sã)bEkÎj®Ô«’.’;‰Øât¯ïü&?ŸâP(
…Þ»ÕÚN#k‡d?
±íÖ¶e’àZÕ<1×p‘×Öç!›¶Øž¹¦½\û½ÍšŒŽjËvm§5¢UÑáÔcdvN{°µ¶ý›þM"¨Ë²—ƒk¾åKzŽa€Æˆ›Ð¥ür­MÊ_“šŠTnÃ~¢Ëe¥¶ú
I­ßlïb-Òul”›èUÈþ%ìräGÿG»bÏØ Ë})¸‚"¬öy<Ü•Õpõq»NKì«åÒ6Q´v©UŠüx»R­Ùð°ÏÊüƒÍj5†Øðþ.`-
…B¡°aÕš¬í]ÛÎ³xŒÈŒ/ýÅûA7#ë†ÖÖ#£­©ÃˆuÄþý_;Í‚63\“µ6Z#«µÖý­ÃÈB§µ…ÀšËam>Ëiy´Uk­½ˆÃê1­6¸61šæ£YDÖ5Ž#‚Ë#Fä>nÊ‹‹¬!-Rf.§"×\¦ÙÌ ©©àeÞdw¶I€íjµú¯Ä~ójcoƒ56XbŽaMVžÛHDsb¬½„Ñ0¥CFw¦ÏeÈ‡7Á#NVÁ†çë†0¨Vã£ïã^l3ìî”Üj5‘Öhòh2<s‹ l5Ç·Ç¿¹„B¡P(ôÞº;ì%ßIó4ïO 5¹!ÚŠ6ÓrdÍ#K¦å¢µ	m±5Ò² Ÿ¶eX£\“­ÜÀå°¶Y#µöýä)—e4b<§–àê’ÕŽ”yàlÍ Ûÿ^¶æ¡5S“£7Õ™A6ÙÊ42q	”iÈ6ƒ5xd¼„DH«•é>oLèg>3Îöý+lï›2U¿Ð%YTT£R'7fb[¨bà1ˆXá‹´éúLyîâÎ4U£p¶Ï³;dm>>y)á¥R]Yü¥d¾Nüx»9\ö¾>òÂ_$
…B¡w××ƒ Ú^álš÷;®Éj¸Ôk¤­Ù’“j[­µ¸¶f[lÍƒdäY,W£i¿ŒØ¾Åò¤dÍqÍIm:g6,ÖÚ®Ø^´F5n-¯ztÍQó¸~âÝÜÜË%ãOš×9ÖŠ&BÂÒZ°‰Ê\9M&]^Ï[î«æRÖ÷ž#°½“m\êSRŸ¸ZÚ¢óÐfIYàt6TÏw…5ßäýÖMyˆ°ÚçµPG°fM´ä±ôÏÖÔGÑÚe³š7ÙëMl®'>ôV€u€•øþø(‡B¡P(ôÞZž%÷q«°VÄ¹ßBkò¬öH‡‘¢£›‡–Î­‰!ýlm±Xû§6YC$ac`¤Œ¬5ÖœÖÚÀhÂå*‹i¯ªX{KdÍYÍå¤&×ÃÚ=ü±©:vøG»™õÞT&¹™µ¹€uY¨“ŒÈí‰÷¶¬Z#˜‘ätžíg„æÆš*©‘ÿK†\J™£ddÈä°ææ^Ò„KaÂFÖ¶ÕÝíM|Áû„ßßZ«Žö\½52«L:¨¾ü%tÁ¬ærXs[~>þÉëã»n3ÈP(
…Þ_ß;°š”«I´f+5:Á8ÁÓ¼ŸÁ%×hjÍ—ŠÖ¶,Zs{‘iý dFF³–r¼.²Ö:Œ´ek<ß¤‰£…å\4µE{Ë‰ kžºjdÖ#£½.ë²Hò£C®ÇB¯œÙoM¦Œ>rY62 àäÞ´qIüŒ°FLã8g¸JNÌ”FžïØV«·³óˆšš{Ctžè“¢>‘ÉäžÉ;ªq¬PYÌ‘Ö¾DâÔŸ ÕíÈƒ„ÙÄ ‘ÑDH{£[Œ?[,¢-öÅÖ'¶êŽQÍ‚©¯Ì©‹ekCÉC¡P(zý²Ûï%ž¶?ìd:›Ë¼#äD\ÛÌ^¶f¼²Üh¬­yÑÚtZ³&kùž%jÈ~$°Õ}Y;Ok¦–Õpy”¬Ít-¦B’õN-ŸöYkP­	­ùAoœÝCÎãÄe%¾IB&þnŽÑ¶I^ §ldå°Vt*eë©‘p'¡	ƒo÷“¬ï¤ÛÍêÍåj]ÒZb×\LCê·th`´&3FNjH K‹ÔVû„Ek]ºN¢LŒ òùÊ3úÞŸi]Ý—Ìjh®—0ufÞrTïn/·1ñ¯‡¡òœ"|Rd‹¡P(
}„î`/"®ý‡Ý]Ö6eó¸ßÒ¶*b¥5k&Ù9©,vZÛà0âö"ô‚¬¼&“U¬éàZ„µq½ì‰ómUk.Ç:o³vŠj¹í‰mjûÝ²/•k2š¤·Ãvpcg5mµ&cMòÛ³Õ¨1“¨Íl·¦ FÕTÇ©lO½üõ~]—\fm¦ [e¤ÕÍÏ_n_aí­6ý)!/®G«5f@6l&²ŒÔ„9Œ˜ë{°’3ýßð?¥—ûu‚à5AÿGªï»®ëÑ=j&1ŸEW_þ «õt{«%\×(Ù±×„Ø!u½‘„ð[˜A†B¡P(ôúú¸Ù
­í`5ä=neX(ÛrZÁP5åq¹jMhÄÚbkÑÚßÌ^äþÁAÍ"Ý;¬m´¦ÌÔ„ÖHjuÂÙ´Æ~u_lWæIVkÛ¬ÙÑ²šéŒwLuÉ»>YÒ §b‘¶š ©Nüj	‘Í³~ÞÑ›eÌ²Âº¾³¿f&íI€ÍLýWW7_^“X»NJi´qÇ®Â—^LN“…N/‘m„Õ>m!S'Â×ušª‘„†RüI3¨FESó‹f5@ZJºêÖøQ×çMa­Ÿ]ç÷„Ï?äoŠ¡P(
}„®îÊ¼OHi·FH`æ‰)x\m!ºÄ$½ŒñÖÆµµÅÖ¢56YóÀ{¬Ñ#kËÖÆõ’dkÝÏëÕ®ýs‘E{ãÔ¶Íe¨ÖBÙÙ•äÆW°ÆÎ~ÂˆMfê>ã?g¦MˆEÊpR¼SpüIÚã=ÝDdÏŸ›iío*4%)y†Ëç÷ïßªçÈ2­u]çK0Ô$HòÙÐuƒ[NPÃq_µ#ÇþÓVØœà£ZísgÇuIÔ›ö-½U´Ê»hVk»5Ð^¤¦5Ð¨Šhr_–†fl²èŸþtý—P(
…B o›Í^:¬±%¶FÕ60œùí~+KçUËjã4ar8¬ÉžEkOÏ0ïÿ»Û‹Ì8°rÍÁíµ¡µ–×ÚÐšy†´€¶¤é˜Øêéò<ÈÅÈÚBÉZ=­)Mÿ$¼‰ÂÜÚù—œa#’5œ&È%UØtg8¶-p.Éõ­8§1ƒæ\Y÷¨wÃ”‹XD"#òêêj)R°¬;Új~îš‡ûÐ]÷Æiœ9TÇ	¶Tó¸šKÖCn£¼åóvZëh$“:¯,¦¹z÷s9±‰¨Êå²aª!Ô'†ÖüQ_y·¯ïòPÛuX‚†B¡P(ô!úåN,F‡Ç½æAîÅµ•kóV°­l¬1v^rfÑÈFÈ’ÃaµÇy|±©´æ.þŽÕÀÚ	­ejÑ‡Gš}ÑŠo_`µŒƒçbP±µƒtZÅºãi•ß8q8v&™Ø[ÁjÎ³ZôS[g4ÝÍ/¯à›Q»jÏk%jüo?U €2CòòÞ"æ“…6ò£iTgÝ‹Iœlª™÷ °6˜›»Î’{O`2XãÅJ6]ÜFÒÜ'.Zc$á\ž·[ÈèåN–(½PV£X¤X5@þév)»S}sXCödÀZ(
…B¢ÕÝîéðü,ek­í÷lÂjrhŠÝ¬Ô²œÙº!®[XÓ¢µßüŠÀÚk–÷ÈTHÝp8©YkÍû—Ýû©ÉCkl”ÍçClÎw2RËfã¹Èš²GÆÏäÀÔà›ßj
Ú |eZçIÎÉËÕ´l=kˆ]$¸9ÊÏÎmSmçqÞÚ’ë¯™•Ç‡ü©Æõêûþ¦þ7?ßÞ6ßß®ùÝz_§jÕ]¿œýõ'ö»nBkÎ î AÎj»/ö¶nÞk×}¢ÐÂüøñÊ÷?öeè5FúSuvs‰f5*áïÖ¼jm¡0/Êà5ù»ÑòP(
…>FßÄ¸ÿÏÂj»'Pš°šJÛ¬É°U^q\i-eÓÀšÈÛb£hí·_À·ß² Xã¡»³èIµÖýãùÀšÍg47í°Éj5km$†õ‚¤5Ä~Ðó¤dÍ7^«f÷tã¨Šõfê	©Ê²ß2>†™*Y6sVZËÓ¤Í²¡YîS¬ZCâ\ŽoáÅu^¯g}ëŒÿš¹º’øš›ºŠôjüØW“¡±„Å\á,ˆf¦ÜÊj2ckK†Ù"òŠÖºNÝÍÛÒâtâ³Åã¯w"XzÉ¬f1õÔ;¬é'kÃ³…´H”·á%á
…B¡Ð‡åA>îžwÛ§ƒ8øÏe»7N“Q/³Dœ–«Ör™–[­U‡­ýøíßâÛ¯MÖBÓ¨Ú²äyZsóþ¶1¶Ë;cc<¯É†©5îÏ8q°N*â¢,¤F\³QÄÑåwôýŒÀÑ²jÄŠ!1üRQÞÌ„4:B:QžÌÐ¿¹¹{¿¾*w°pŸ’ü0fúàóÞ™yó3¾××‚5æB²P¬–:7CÞ£ÄlhîÕ_o†ÅÿG«·uZ³2EO…£•D#>÷p¹tVë,ÝÙ3!•¿jÊ³ˆƒŒ.–·%Ë††!þ„Bÿaïìq$7’(¼”¸Pj43Èn¯‘Mi¦A¯,m7Ê©Œ±g™[¬9Ðö s	km¼xìQhC¥U	ñHæÉ)ý” Ô‡ˆx
…BWÒç—“öÄ–ª5³#rëˆj"ÙTTÛ¦:µÌS*éL,ûm±¿ÿþûïßéÛï%k<xØðì²ÅˆÇÖ¶‘µ¶ÑšÇ×Þ'¢ÏòFä´=3Hs‚tyl«™Î"Í=¼ipÆ?‚¿…„eÂmÌjõ8Íª¨"Ÿ-ÆlæiZ¼§ÅUe»”jH®ð6–ÇMÙ¶ ·‚Mz~,ËÃgØ‡9.õ½EÒ†n0G‘ž#ÒxÝE¤Ž*Æ`¸”5–‘yEkÃp²`&›Cº7°VQ- üv§û"­ÕöjmìÝÒÊSÝÎ¿×Ný t»ÿG(
…B¡ëè“°Ú«ªÕ &ÏÉbX¬ê­#¤‹Õ6Æ6ÐBÑÚ·ß~ûþ¾ý
kÎiFn•Øššµª5§µÔtÆv‘Ö<!ò¤æ ÖfAêàzX›öÌ Ý‘ÿ’&…5\Jn”æ©dÙ%tÈ¦)"‰)/†`¹ÚùCióÅ–Û€Ùó”ÝƒÄ”Sá¦Öæ¼ÚÕ[Rí×º^ál`©³ )ìÁkµ\	[·|±fj$—ºSl‹n\qX£ÇŒÚ¸k_dB[£X¹"áŒxî•‰á0r“¬Ö5;EtXŒæ\NP#K„™9þ"¡P(
]M?=|ûòúrüúEX¼¦Vƒ„µLvÑ<¹ÔÄÖ Ä¶Ø)WZ«š•Ö°O‹äA~ÿþ5µaM—³Û…<ÈÆÚ¢Ze*—á×e›9¾®GCj…,èýÀÔZTsFÃÄpÚEÍ>ÑQÆ”„ÜÊTÈbòaÙ<B(3d’+ ºÖ‚d]ò6 æŸP|CX#Î=ÏüÃÇuåˆðÚ}ßÕü'9‡Žp@8ûÇN#üÙî)‘ý¸É“Ã,ÃÏñ{þ/ß[ã+"µï¯!t¨™”ÃeÏoWæøro¡åy«¡{Píz°W'SCf®Ñ.FZ‘Èµ¨¡P(
]MŸ¿
¨¡3öËaeclcµ¢	xá"SÎKC•´5 ŒÀÚ,t{Ãã«|üiÍî=Ëxl\!w"kïµƒ,<\™ƒSØ¯ùþü&„É•v|0©=/HçËò@\	ƒÖ¼dX[×CžçÂŠ´E&C- N£³Rîh;ŽFhðÀ^6ØK3ÀoÍO3ò–E=ý?JÛ¹`	2Ü>º1ºB1Ž¦“ÇÒ¶è†éîÇ«ÝFð¬Æï=ü×=ŽRZ³]x÷ß«‘Ð|%°Ö¾Yg2Ûë¯7hC|F =;®á/
…B¡ÐÕôQšbŸŽ§“UVJÛÅ´,µ0ÌKÅ¢•f6™CÆ,cIjÞ¿ŠÑ$ÜEàžçGZ?î…Öðä¢ÃÈ–ÖXAYEÝÕ¶‘²ÏïnœìZßþŽéRÍÚ“Û†\Œ­ÍÛÕ\ð/)ÂoJó„Xf™'¦=f9åQå1ï‡½¢ÕõcÙÞ$’5"™eÆÝW½µši	=?MúŸÀhæø€ ÛÏ?ßÑL„¸¦•,,Ïã6!Ž³®q’Ödï~
T»	‡þjÇØuø¶Ý_äm£-ò¹ûË„wÿ­±Õqìô{GæóÈq¬á3œð‚šÝãO[‹rÔP(
…®§?kClé†Ë¹µrm)®‡=As>à~µE,ÙÜ1
B4Úi-^N«+ÒÛë"šÓÜòrd­ÍƒlCk­}¿vrhãi¾-v¼UÂÅn{Ì×\þ÷‰¯òu5Ô”	×”0‚ß€¾Ó¾P¾¶ ¬tkBX3'`9lñ6ØX4B9“±jqÔu™ž
n*¹¦´žŽ²FÛ§;qôçO´¡¯	P{Kà4@ÉX×ççj7ä0ÂvèœÌ ²öÜjýÛXñT¿ë¨GüK¯—Õ¹½È8¨‡LžøÚêkƒûýßÇ÷
…B¡ÐõôIúaŸŽyÕnØ
k+s ]¢·íÖ¦’“\eV™£!z…¥³Éˆ<?ÈÇfT¬Aî éÆ;mdÚ‰¬9«MÎjy¿ø;§ŸœÔü.ŽÕöÝEX±&‡kÛàz¦áã;âjöº|tû
CuÆ[š™Ô ÙP˜ ÝT<éQŸº€×f›åó¸oTŠÀì —Jkøà¼®‹ï^„×î„×˜§W·‰¤9žá2`ã{Jl÷ñ;þvÚbÃZÄ¼@«£ˆ¹HTnÃµÕÚÈï<ì ÿú¬öGièéÆ?Ãzwl¡m´vl½ù††d(
…BWnµ&%k§åÀ˜\FÀ—%o]E%oS©´dR”–\Ò¦¢ða}±S^”âÌ^djM6¤£Ú>­‘‘×Î*ÛDHo˜–yèÐh{ÃÞ)­ªé’äÕ(ûß•fKÚ$G;t³X¶£ú€Ó\È,M¸HÃœ:ólÈT¶æ$¨£¶·×,Ö“kù×ÐnÕ-ÒwOøýáåµšl³ÀšÎrX”Ö"zËFîÃWäf`ò–[š§)q"þxo¼e 2z¤ÁÝ"«u]çë^ÅÒTB9&9¹Æ¡c¼Õ(/Ì C¡P(º¦~øX“_åÇÓ‘‘µ…j‚l¢Æo£¥µ²b”°Z…5ZÃëdµ-®¦‘Úx¸va2H$®í‡Ö2GC5?mâ‚‡¯÷H­ýGÞ÷‚Ä‰áýbN§Öp$%Ò[&X©ÊhÛj…‘#n¡^0#&1:ì	pö³ÞP4Xê2çÍÇ¤Ç„{¢Œ”J!vXŒÔÑÖãéáóÇ»ûûÞ1Œµj:ptë~w÷wñþíÝ½?²BÚV£Ó­eÖn°¶R‰lüÆFÌdÞFÔÈêˆ²¹†¥k:jñÂ2
…B¡kê£õX“Ic)kFúâ
¯	çª)à*¥rKÂÏý©mŒmõøÜT¬mš­ñ|GÑZSµæ#%¤‡Õö]FœÛê`tç¨¶K§¦ý$HŸÞ¯Ù.Œœç”³ðiMƒ›v¥©†Ã\yJCf´ø/ÂÉ‡(V%'€ßÙ—$'yË`Íclà:h=®òFY„ØÕ‚îÈŠe&äËüåÓýýØ’QÛª5vá¢ÕnÑaÄ…nkh×à°faÕÚì£.p3ì o­vÛä%—–!~èÈ1Ê#yÞ û(÷Æ^Z»ƒ™P(
…®ÛjíËé¸¾PëAVÚjm•Å¡P{Öˆá©×ò´ÉÜÐÖTÐÛqÍ3 }!ç;"k‚I­ÃHXsìòpÆ7H>Ñ×÷#k{´6·Ymì§waÚÓlK5&‘Ò|™ôã§œåÙD^óÀÚœÈ[ú§ñ\.d¢’›ÁY)-p©fÿ	L‡MI3îR²[…áð¯‚pÏ–ºRˆWÌË‘}?¸G?f®}¥c Úm;QtŒ²8¬!´Â©wN“‹¡k2}¿ßòýÆ2L}{€Y#<¡FË‡í>¨‰&N†¿H(
…BWÕŸ¾9Ó^N¯S9®™A•uqváàè‚Ù2![\O¦©ys~¦Ð0òâézÚ5ïo=F,²ÖòZÆ…q›êX×üØà\«-ªMzMgÍ{‘5Ž¦§K‰Î +?“Zñ'Ã¸RnC 3°t\ËcÂ’F’3^ÔV
øæBwÈ"óõ¬+˜QžÆTIÑ-„ôeÅ|`ñ¢Áš´tÀî%Žk)«Ü~xøà†ý¸š›>ÃVä&‹ÖÜ½ÏAkþ½iµ{¡‡wÿÍÙ@¶Ñ5DÏFÑ€©eµal{£C‡\§}±Ã_$
…B¡ëêã·¯Ìƒ|´1ç-Ãp]‹	À“Ú^k"8ˆ°×šhÖžÉT„5‹«Ù‰ƒsY“ó¢y¿±š‘O*ïxBâ²‘Ëm±'*íÖ¬d­õ‚$TùH»xP³ÏøÈGSb?4Ûæ%ãFNšÛXrm’ƒH™þ€<H2á‰FäJ™'f8æ¢¨vn±¦¯7¤y?DÿHŒGèô’ÓòrXƒ–Ã1?'<Är´Š5L£åÃÉ¨vÛ°Fj,"LcÜ]Ää=Ï¡~Xû+fµ¾¿Ñš¨'«uçšÖºÁéM4È–ÕUø‹„B¡P(t]ýôù«­ÙOsüÎ‡§…ñîäDÈ”Q«6kSI„5JöeËjZ¡¶s8©]*ZÃáîýû©d/^e†n~p*ûµ–Ö\M`GR»t©=ÍuÁÉ>f-ùŒrÆT¤®”Ü&AÎrjyÅ"kÍZÁK@»“H5Â¦ïâ…9a¹ÖÜÇÃãã²®ÂglçpÈO	‹ã	$wúú+~®›¿ÈXgÑx}ÕþNC5‚¬½ÐÉdVëz[Êk}8LÜ’µHç‹MäÇþ~x“ø¨ƒ#›eÄÖ†š.ß~(
…B×Ö§o'ÂÚIôúz¤mÿ‚:¦…ôsX+¬¹ÅHV€¡†¼‚j uÈ"”˜‹€Þž]5ÂØÐZl‰¢¦ÝÐ¨éŽí Ö¬êÎ_4%\8š¬Oç4\&g­Ùù/Ÿ¼6„6ùvæÛOî"Js*YëÑf;ÚMlqMêª7¹—Áöq|§…µô„%Âgh½6OÐPáLânëÊ'@z¥úÓ×ÿçŸnþˆQÎ»Õþ¿ï;Pziyƒ½qôäÇ±ë×{ÿˆ¥þyúƒËÕhþ9(u!œº¬ùîÍ½º®§sÿþ"¡P(
ý	#Õ^D'h‰­tOø!¯œù¥(·-…°&*™yy9!ÔVsXÀIe~vÏl4s‘Ö§ÑZ›i¡5&Ë„l
×8žmVn.â/»œÕöÍ ]óþjd²ýÃµ–ju7M2s_6!°§H&3y”r™*¬!WÖsìL¿.ÂÓRïT¢£‰÷p«5u™É“Àº||¶ÖôH<ÃÈLÉ×ýúßÿz·5i«¨ö7HœD°s‡ßË• Ëó”WÂZtÅþs»«ýÑ¬F÷~Â-úwÚéy½bmÆÖã?Ú==7„B¡P(t}‹‘/Ìu[[;(¼¬k–áe5ê!QË’1”r1íîE`-“Û
bYK%¬yÕÆ&!’jÜûI7„µÖ¼r÷~=pîàš¡ÙîÁ¡µ¶`-mA­¥µÆ*Ä˜l?°†£ƒZYÃå5lE ÊX±5Ý™E9ó)Ú&ÌÄ0ŠŽ%LxÈ™ÊS1,¹>Q3H×e¥ÃSd*+«Öù ç$˜d‰¼¦¿ÙÇ»ŸâGÛß¢2XmP	FZd ƒ»Ç×”ÐpŸu‹k7yQçžØýÖüqÄåèÖë0tgXëFQf¡P(
]]_ÅòxdÕÚR Ã
”9`“oÉ#k 4òT²p[É˜pg= àÎµkebÍZNÏ&Å3äär'×l×ÚÐZÁ°‡k8Ûæ×ÛSŸ·´ö6²6ñòÀÚndÍÔ¤;¶§m\p6»©¤oÐÌ¿LÙ6gº's-º·„µÅqïPx¶ð­ù‘¯)­±6”W8B
£±jM½!X¬2/ÿcï|VäF’0NÙ…LÍ.ƒ±|.C“‚<™<ä-O	:7ué'èÃ>‹ßdÞa^lã‹OÑ)mãY\µî%>IùGRÏ´]>Ôˆø¢Àz¤ì.ÂkýõÁƒjÿ7#huŒÌ8qYu¤½&ÌÀ4¬¦“¹Ëxpå¦@š¤|Älš†vÒ	Ÿ:§“±±}šð*{³aéþ".—Ëår]]ï???^àÒ®_Ëµ,Š¶ýTI
¨Œ\PÃÔåbÎ1ÀDH0C.5i|Mî=l´uäÉcKkÛÐš1Íë½ÖpnµÍp­×©qõJÁš¹‹ì7Y3ªâußmÿèeb_µî1²¸E°±!W	ÌŠ4C¦õI/U¿K[m¯7ìiÖ® ­aÛø¶FìX»†uÁ2–¯Õ8¨Öež«íù_-Ý}þôÑqíWÕû¿ûõÝ²ÝTÖo#"if(¬†sX»…ÞÿC‚Y?YÌe„À^ÒûÔÝÑd+âòÔ{bÃ}rXs¹\.—ëúø¬uH‹ˆÑ”§–²Š“ò›²a_ë‹¢Bš#-	Sœ‰X€Ð`àE´†Å+Y×¨YÕy-±µýîØæ"bÁ­?¢Ò~dÍ² ‡ÀÚY£ˆkc$7öèe©2*‹½›x¿Ü0&rþ¦k×ÚŽ-¾täEÑñÍ{ü“`o´Æû1‚Ì–Vˆƒ	£ˆI‘èºW‹f@®–þÀylK”W„Þ”æjH2‚×ÜkàÿÖ&¸ý)«©?ÙlmÍ D£tØšÃÚaÿó:aµÕ_ÆƒY|êtâšpÖ8ðÉQ*5æ&°çf.—ËårÝÂbÝ°U5åry|¾””À0H“±Là4Œ¥‰Ô}¤hh-ª5Eé°ÆÉÁ\£Lû´f¸¶!ËP»½Öºd«Ö8P	Çæ¶»kƒk?OÖFVƒ°è9Žœ9õÅöé`	Ùû­éÂÐMÅu†ñcÈaŽt1•œc¹@Æ_ös’‘	’9&<3XÃZ!Ðf1µ9`F>äêÿßšŒtóotTX«—¶(ßW-nl ü&¼æÖýoß»ÿ ‡@O¬|‰°¦ã‘mÖ°öÈÚ-ÂjWÑAƒc /¨×ª:N#G¾jN¤›Aº\.—Ëu‹‘ÒÄ·ZÊò$5l…<“Z“•zŠ`[¬<ª5Yµ†Ð|¹0¯ðCH :†ÆæÝÐÚvûïõ²<È±hÇ[Û­uk~Ã}Ì£=+ÈyŒ¬)`YÓ´fÜˆ0«q7#±9æ`‘5›ºÔÐep
AíTìŽ.í…´ÂóÃa\W2Öî#nBÈ}óe)!+³¥$“âYefäJn¥ÈÃö¤ÿ^ä‰få½»O?zÛï£Ì9$@šûŠg§I²U¼¹®Ö®ªw×r±¢µã«°¶Ýk÷=%ùé¨0ïæ2.—ËårÝB¿-"5À7tµËR³
Lè¦–r ä °–4Ä¦éYÛ&+¬QsˆiÐCLa 5«VÛ¬Ýë¥?j¬³S´¶ZÃÙµY#¼í(¬gØi±F)‹©Ù4ÄÔ¸4„Ã0˜ŽtÍ¼Ì¼!b;ÛcÝ½°[Tá@eYBi¥5 ô¯ÍBw3a­ÛA+Óè/BnSü¾
kø€æRVXk¥.ÖZ]pDX—…¨Ö0cuç¶7kIMÓA„‹ª_çÂM]œ<ºråïš:€ËE¤r£¨§ñÞ„÷&4v`¶ìÉKÖ\.—Ëåº…ÞÝ-Ëòô,>#ñXGX_éD[HóLº˜…ÒÚ<#(3«¶\ª9¤ø°U÷$µí•¬é¤:ïV­¬ÆkÌ„kÖ¨4ÜíEFw‘°ï.bÎj\u¹ÙC;æs×`ÞŸ…z»Ü†„•ñ[ŠQIîÅŸÇWWH¥3"jÔÖº¶ê6¶†Qå¥<£ ‘ï·e)ç‡3bi–53ó7SnÃ†¸¶àV¼§§ÿ²¾wiBo`s^{›vdµ£iZÍEŽ':Aâ<Ñä9¬]½Zí÷k‚ÚA.ºŒ˜ˆŒ”²úÐ[ýf kÒãÑKÖ\.—Ëåº‰>=¢k,ü	kbÉ~©%+°!µN&+tÒek¹ÀBPƒ/¹ÖŠg•ÑÚLúÚ­Yã†“!÷ý q@£æaêJ6nýãÚ0Ó~`­³ZW·ê7Bå8+frËq´ñ'¢ñ„0³ÝõŒÿ]˜Ö472"·tÆí\R†%üX©PÉg4ÅVlV<“§Âx¹©@Ê#Ú1ô–Ï÷±3\Q{Çïç$+ý`™YÂÁÉŸÁ5úD.~Ã—¼¯+–=}ÇyíÍÂi¢ÅMF”ÒN:Y|M[¢;¬½©ÞjÔ)˜ì#?`Æ;§	£âºÆÕÓ
’k.—ËårÝÈbäñé"‡ŒËåQF!·Vµh­w]«E“3¿Ú£˜-!¬’ä ¦6ˆ)ÔÃÃy0ïç¸‰°§íGÖÆÎØctmÌ…9KŒ»íÕ8íÚöÇ±!6hl†ÍôÏ®3¯‘Õmˆ-j»ñS³sÔO"äx<‹¥à©5Å³úð·Îs®EÝHä}UNø;î¤h/cZÝú1ÖVôë¯ÖÈqK)­‘Îèé©¶‹â}-ÕÜD›ìô9kú"¼æÀöÖì iÞO©„\'3î—£2å°vÍjÃ+iš@i&ƒ¿ãÐ›ˆn=×Àí'Zkä5¹åþ".—ËårÝFï>#¬¦ek—',á1Ò”Ð`	£	rI¦4(åZ—§%¯-»I!œ¬øñkó¹©T³k¤µ-®Yï1SÜ5„QmÙ^SÀ1¶Xû®ý£›£X´A£?¤FiÔ¬;üÅÎr9‰;"Æ1¦*Jø„h½Y_Bæ0ÇJÐH\Á¥^ŸóýœÍù?Gµ‘ÑNÕ*]üÙ0Ì¶¶É®Âih•-›õÁ‚û²À²Ö&gº˜¿|úÍGÞ
¬Mf)úÀÌ¸“ØÖ&[Ä3‡µ·\¬ÆP‘MaMÖG¦uV	¿qKÓd“™˜;éF .—ËårÝHhKC.äów©]Ó8JÉ¥!í‹ª5…€¼ÈÖ°—Q³áØP91UDíÁqà5ÐZ7…Ü¬ñÚbÎèÞ?ï$BòÌ<Hcµ‡kC\Í,?T¿pBg¸xöõÖr£­Å÷3ÊÐÂ¦Svøÿ‡6F@\Hìw§ŽÀV
^%üo’ÇJ8‡ªR’€_¬fÎˆ©Œ ­
`ÃFCdV†DVëE®å‚Mù’¼íBjÃUK«ñá\/ùË'7ˆüŸêÝï'5Nam: p¢¡«gšØq‹°Æ¥lp9¬]Õ®Y¬6·øakíÙ´²øfÄ¬+£8ð;hÉ6±´ÑÍ ].—Ëåº‘Þß=DTí‚ÑHË¥–e)¢
g‘œ gšù’0W—Õ‹¤°K3 "ÓåbNÈÔ³Øši×r7r[´f8C¬ö‚k›üÇ¼ãÚctí7…iû¡5‹»q5lcHåqcÚõi(al“[„×\!vTÀ®U}–rœå=sõOë2ŠÒ©ˆô?0Æ$ÀÊÛj*B6v¸Pàsì4œö´Ô–Î1T £kú€5náë×PsnwÎko'›Ž¾ŒœÐª!êÜ/†S'ÑÑ#koÕX­¦æ#€¼7¿Ö·Ž½·šBÚÚ]íQï0¹¿ˆËår¹\7Ó§?ÿ|~	©-¹ fmy¼(©Ásä”ÖN°Á o©ÕJšE´‹WäÌò-²×Èjv`½' Ú+ekrôDH\PæÀã‡‰-è€c§`ÊÕUƒ·È jãL½³©Ù2=mÔ<H2/€5ïËHFK
ÇÜ&Í|1†l5È„ÊÒù4—­}òJÿ,t	ò;²QßÀÙ°cël .Lø¸[,aÄ¶Öe$Ìi	›–´¡i÷Ã×oA;¶…ôå³Ž¼™|ºÃ$×áÈ4Hœ‚h6ÆÒ,¾†áppXûéM°×WÕA6Å> &qbÕ`—Ö&MT3ÂüäŸ¼Ëår¹\·ÒoßkV+È'ˆ¤r¹Ðo¤¥\–µ™WÚ ¬ÖðìÒ–KK<åQ°Èé'êÇ+–û‘µ[##Ps­áúá˜8Çka%5¦¡¿šR×Èe†šØfCµsŸÍqÄ9Ä^´&Ûáü}k:#÷±”DÏþdŸV ¶sf¹!A.†D÷þ¬¿t’…\A~·(V´iÑÛ¥É‚¾þu•P–*°&É²9$Å´fM×š°a¡!®§?‚žÝÒ=!ÚÖrÈ»ûìloÖ&4ÓÒVZH~Ûz¸+µ‰:¬ùWöŸmÖmT;Ð	rbÆ«~ÈŠfæ0Â‘2Zãp”WÑ^žî/âr¹\.×m-FZ{þŽÈeuDÍEc(ÏOp~lEÓìZ¥Ô.î‘€:öX‹øÚÏl;Ùoa|1öÅîç7_­m^w„Ä9˜Bæuø©mh--ÖpŒ5ê~$5êÁÆA–ýhs×ZS"ZYÖÙKŽ°òÏì«¦ø,“ÑüWŸHy¡4¬°Ù}
D3€¬ÍØj‰òËÙGXJ
k9âGûb§û`D–DMæBf“}5Vc[K.þÍ*žT¼òûòÅýuï~ZŒ¨U ,¦ÃÉš¬Yw5™ uö>ko*R9M‡#ÝE FPEP„ÓQæõõ“ Û4Ü_Äår¹\®ÛæABbÙ*ÌÛ«z¶'äD.%Ë¶™‰{­ð\d¯DPCi¼é”âÖrÊð5è•ÈÞ‹ÖÈ,{#\Ëc$§}Ó	ÕTó^ÅþrÔ^Å5¾56ÈÞšÁ˜Ýˆl‚Ð9Í^l’SŠ/}íd˜k9Äôk	µnXbGZµˆrÔ@ZHcò¤ür9ô”Ç™™r•‘>þ—šAh
cUd—kÓri²xRVƒÖW\Òmy‘çûðõ¯_>{Û/ìÝÏÈË4ÑiDÂ/Ì[1­3šöÇÖÛ^³öV< M½&ƒ5Ô¦	œ¿tÂ–k„5!³	w‚ñrÉ^äþ".—ËårÝ´ÕšÖž˜Ö–ª~AÏiyz^Êr!¬1çM»i¡T­6Q	9Ñã?¬!“®Ã:f‡‘ÕFw‘W,FHDV)¶×{t	Fk¯ËPmß[$F{5‹«Í 3œ=íÓ†-¤í®m4F#øƒm0­¯,?2r?ËŒ1Ä\‚,C¬eä¥FYðN‰xXTBÂ%0;É/Sø	œù”Ø‡\—…÷„·ôÃÇg_æoY–Ä4(ÿž´†T¾k•ù?â·¯¹-0ñ„ÈÀgA¡_ÜP¡S?Qà†%=GÖ®àÝy}ÔäšŽ"RØi…5ÙZ:$f®xÌ"šAzKl—Ëår¹n©wŸà	Xc²c{|ÖD7B¢>©Ù÷î¶Ö*Uõ™h!ær‚§Eª9RXÓ<=à×¾!ä«iˆ6„˜Ýªµ!§QNÙ}cµÓ~s‚Ü¬Q„®ýh{>í:=7£8gÛˆÓTŒ¡ÑÆy²Ç£”BJY­p<ŸeŸ€Ópïg˜Í²öÅ“'9âüàBZ¬‘÷Jc»5Q+€3Í¡]”Ú©e]¨±H:Ï…¶þ¥â¦¶\%;×4"'¼v÷Ù;fÿÊ°6ÕRÆîê.d†µ"›^(brXûÉzõŠ5¶XÃu˜X‘hmÏÕ’b#l“>–˜póˆî/ârý›½óÉäFºø\GžÁÀàÍ·)xS H€+î¸"ëBmê:MÝD7êcôö‹/CÌ&ªpK/3IæŸr«»d ˆˆ.—Ëõ¾ú¡µ'MzÔ·sq9ƒÛj]Ð*[†e!«uÜê•éq1£§Wí2"°“Q&5Œ¼î9i
®Q#æ4u[Äµ9¸ÆaàÄi,‚m¨¹öì-%£ mÈ“-©Mhm6ìép„%¤ië‰M£‡1&øÇðBvr¾›A†Œ$Æ¢·o‚ÃÊ¡„’²X<DÕLY"õZ•Ÿé`2Â.¨r&{åº°×;”fžý€¹Zj•¿-µâƒ­.õ1åµ/ß11™¶×ß×þ¦ÁZ=Óª5‡%EâåÞaí¯Ö¿,«Y'ì$6ªåçE»+-bÒFÚ xù<ä_¼Ëår¹\ï¨Ÿ~;ih­/
k]N.UPí"…l—EvxD´*ç§‹¬4²RµçZDÔ“BÍivƒ´®Ø‡^Gµ)’š,!Ó­aŸ]FpL€F„{˜S o´X";QGîão9›Ít8à´F:ƒwÜÌÈ?  ‘EâBÉ‘ñ¶T«ä‘¼"_‚fE®TÄÛÐŠMAaƒÈXQ6zA½†›9ZJÊç´ô¬–®&þæüµ) 1ºFµÕ²-—žsÃ£­ Ð ÿ5dYÈ•‡Ck 9$i)`s¿‘¿!¬íÌHb¿FÕVË~ÜþÎaís%Bîkpu4X“XNFãq?Âjzz'€S¨‚¼û‹¸\.—Ëõ®ú¯ Ùé² Žvd;Ôì±	¬!ÖÑ>áÜŸ®k§¥ëJÑ
Ck‰˜ñZd´öøghM©ÆÆ2lCej¹67¿æÊ¶ïÆÕÒàµ9°6šÁImsÆyKjÜoùB¦¹„mù+a®n"i$MjQ›ŠÓJÒÿ¨çñ´¤=Ø] ÕXDU…¸šÖHiœÓæ#ªJCo†ðp(øî`¨'ÐX£ÓcÓ…Ï¨,‹“‘>Å·xˆì¸]D9g1ˆô·ý¿WWlÂ^æ9ÜÖTFjf;rÿ³»AþÕúñ#°ŽZÛ£ÉÙìUkç!"›Âœ:ý¬ar—Ëår¹ÞÛbä#lBcÈt\ÎðŽ`[äZa#Rå¼5a¹ÓYöÖ/=·é»?":MVÆòÖdš¢j“‡ÿŸJƒÄ1çAb»máo6obãÎc¶1	EZü&¬F´GNF»‘9BrW¥—}²€„ycÀ*–¸^â`
kË„¸¦¡&…5½Ó `°ä]Øi!ëZÇm9iƒlâZÎê'“c¨t‰Äq³ÑÔh¤£~­š$gµ ­ëE‰N{q/²•Äª5ÐZ…‡Cÿ¸>Þap÷²0VSƒ-^°¦µM˜qr¿÷ÈÚ'­Ù7Í ™ÅN	k#r·½tÜÛòöðy÷q¹\.—ë[­}ùz½Hö#JÔ®×sï=÷Ë¥æŠŠ4UP[!)<j]:{¯--kÖa®HxSÏwVu‘Næ&­=¾XÃÀØÚÍDÈÛ±53á462šÝ}½\ÍPmèækØ‰asÚã 6»38óÄj·kiClkD-”È‹Œép£}Â´¨[èmÕjM±‰z'‡!‚dlêæIlÃÕšñÁX*¤WS°«`8u*ÉòÉÛåÒ
8­çFGHTç\áÜÓ"ñ»Ä?á6YeXQæÚÿ÷›óÚßÉž´&^áInkÐXí÷YûËõË¤5ÄÅÔ¸‡¤FZ~"²öÀš±Ü~Â¬©dòïÝår¹\®÷Õ¯Ï_Ñ#Ò
û¼ Áj€!IN›xeDS‰ªÉBljD²t @iàfmÓµñƒŒÑ8í&®}_93­™ˆSßÍ…´}Úlâ~;¬†)aOC¡HX“¯ˆíÑÆ-Îö‘40m¬ÎÆ°¶aüH$ãYÜúýÛY± iù!ƒ«hÕ™bÉ`²´^+h”W_Ô¯Aè“§BXÃq5Ç˜‹<]
¾åÑ½²	öÆÂë.³^&¬•Öå4—~ñsÖhm8Ú²Àoäw¯_ûØ¼ºGäº)¬Q;YÕŒÑ¾i·æM±?>oõí ®žL…¼—"´=soK}FvjØç_`ÍKÖ\.—Ëåzo‹‘¯ÏÏ¨GŒ=Ö.ðÄ˜+ChùkX» +›ú¸/¡·c	¥Ëi³NkQù$5îoòN³ÉHŠspí†‹¿­¸àl×†æÀZÒ#m6šMû-|ÆaLÓIFhœÍcÄ4ÖÃÇ_7µzä¶.9Æu
Q×Côd¬,jaaEb"3£à™¢v«P9‹~ßˆ¡å¸PààØ@=>–j£a¤f4ÃHk[Ã],Ãë_shaÙ²6@¤Vÿx:PêùÎk½~ù“•L˜w§°†®®ÍîGxäiŸ-´&_.¿g|¹â	i®Ÿß¬íï4 §°F¤ßß¹¿ˆËår¹\ïÞjíùëóé¢ek’ÙêÒa$qFuß¹ÕrÁm‰½]¯§5’Òkë0…Ö˜M§a¡\€k)=Ðcä­Úän»­mQM(×LstmÊŽÄ6W«½Z¸©JdÆ‘ÒhÄf.*:ë´¹ÃíCHÝÆ@¥#©lPAmP*g;ár#vÒfÅàPÀQ¡€Dósa.+Sã>ØÝ²Ã15­Dk ÉÜ»³å,;ÝèlÁÐ0Ñc¤â–8¯Y.åP f«¿Hn8Q-šÙ{yøý7çµ‚µÝx›‡à?±Û¯	r/ñ´±¾—á6iÿ\¡5B2Àö³,XdÆq#°\`Kl#úÝ¿üS—Ëår¹ÞY¿\¿<	©'Í™C‚šà"e%·´é—ÿç§¥õÓ‰–½òR­EC1 YäXRHoÄ5ÃŸ9rv
¶mU¦ÈwÓ­^Øij°6s‘×X“™"©q1`s³ f35q×l5¢;ãá™êtÀßQMF†JP’\[NÊmMTq¹¢ýkisH•e*Mý%c[4¬¢fNÊ!ŸçoÈYÝ—‘÷h]²qõ‚È›R\UŸšªl×XòY
˜YÿvxÁyíãú,ïDÖMk§ö—†ÉL|Ä{<ãi
kGX>[hmdCÞaøÎ¬íz‚øÛ^ž¹»G‚,QÏKÖ\.—Ëåú‹‘ëI‹Ñ$r•–b#ReÁ¶ØçëUûg·EÆ®h˜…¥O%1´ÃÚ¨´bJ*‚o”…©TÛÒ.yêF&ä,’ÇIüÀlÉ}.W3¾:r§”*Ç ÇìiÉ‰š#k\˜Ò‘Ñµ¡4SnO,7VÿÕK0Zã­’ƒzúã+À§ñÈcŠö—I¥ò†¹ûã¼ #û{>Ô®ßuÎaÙVØurÚ¦Kv.êa"Ì¶T6ÔîÄ-‘4|–W³°¦Îþ¥dI‡ôúµw‡5–1í€l{KŽC8å^b+/}°ï¹Äá°ö9Ck¬I¤ÆÊfNÃXÚãI‘¤Mò“2zÉšËår¹\ _¥)¶PØU2ñÚ]µKVïgí–j;+¬-Ë	°vÑú5	¹Õ¦¾î9&˜O„xÑ²"çh koY‡0q£l-Úf
†l¯¨Ì¨ÆÏlú««ÍFd«9°f¨vk›#kÔ¶±SÇdÓlùhçc}LÛ sÈ!æ’pUN¢v]Ë)•š#;i«ÿ#{1ÈXË©ÄÈŸ#˜3dy¥²bæ¥‰]}øsSS†Ûj#n¡q†#ÿñGhõX–K;”eaß5þÕŒq!ý—C Bb"ªÙœ×>(²¦¡¥ÜÑR
•Ô.ÐLEøÏS9Ö>[hm'@®|ãÕ/K;Ã0$ÏÉÎÏY[m‡5—Ëår¹>ÂbD`íúüüåËóåÜÙ1“E[¯u”¯áýZ(í"Pwnµ"ì&3òÚr(Ä¨Þïvˆå¬ ’âÓ §°[#‡L©iƒjÜÿ”âHJiöüÖ[„zàø0írŒÃZ;Ø<{BÎ!4j"G¦§ŒC€h
k!$úý³—v‘!ÔŒ¸ZR¢ã´úw–„©æXº.1q¡ƒŽºJåf¡´µŒ‘‘«,s_#e¦ÿx¬ýxh½Æ †#pº…Õ:LLC.6¢!Uv^ûã4ox“‡?»Ú0YöÝÏZÑôÒXM e‰É#kßnáí°¶ÖîaŒÌd©ã–Ýì†ˆŸ„zýÿŸér¹\.×XŒ”]¯€µ§s?Ÿ–åùùŒ—uIwµIs5¼¡K6dCýZ-UX×ìZP‘¦Í³ÖîËD5B„‚ÞVãpÃ¿J…Œ¦a5‚ãuñ)nC‰Û­zµ‘iÆ!3®aûöGjÃk/ÿ5›¨cÂÍBhâtÛN"®”Ð†W?ˆ9É
_ÈÆ<²AF¸J2ç²TQ(æÙÊñ5ïñ€Yó$)>ÃƒvÇŽ©54ÂZ¹ÕQ…&ƒúù/ª³lx"s¯±¶PˆwµË XÃ€U+¤&ªx¦ÿ²v/Ç$¼ö“¿¾¬í¬Mò£V4íÔ×ý^Ck÷fý¨„Yîßþýüýò“ jwðü°Ýí_
Õdûž#ä€5fPîÝ_Äår¹\®ÐOÿ{>Öž¯p¹¬}½"zÒO—–+l×‹ÀªÕ.—ËrB:¤pßÜ\CÊí¥æ)@ÔÛ5ªÀ­¢Ì¹s*äë¼6»@r°ÈÕ8L9&Nãj;ð±)#ÒÈs¶„Ld(l³Ñ—ãØ–¶¥J°8\©5êš•ƒkOmÞ¬…råÂm%%­\c É•%EÑM'ñá! z–å#¡_–’S?¯a²µ‰(Œé€35Ÿ‘»üP—ÙŽúHg(M9Nv	T÷hžf@íšòÚ¯ù‹á…5·0¨Æ:¬ýŒù½šP˜ÃÈËhFþkŸ-´Æow/\¾Ã×Ë ªèõVkBñìˆ-Ÿº¹¿ˆËår¹\c1r9?=-—«PØõë—‹²YG²c?	¬ÔRÛn	¾ðÔ…¡µ^bíç¹ÆÈ€ªÃÒkoÇµoÓÍ~kì‹×¸Aº˜¹ÛU†ji®W3NãðM³ëm,£-¸´»çaN2¡•¾c5²bc"§QdÛ6Ëf½šÉ–ø‹±[f‰šóÈö5``“5êPˆÛ¹ªP¥Öé!	x©déçvx||<´óRK†Q mš®!Ö.uÝñÐji¸Ù³qÇÕŽ‡,?Ž2Úá!æB×<¼ö.iC;©ý|Ãv3v…kVð†ôËg	­‘Éw"zÇÈ€šD¬G8mc¹¬‘íîPñÆ,YO~u¹\.—ë#ôëUHí
‹Çº<k§óE’»êInâ4r¬©a{X[´¹Ö´ÑXëÒâ1B-†7¯éñÃkþDrMž“+dRPÛòš,VEã|<1>eœ6·W›=û!²Ák>ãMÛ8qÄ6h»êhD†mY;&^$¦Þ6¡5DXnY-L±DÜ”K!á,× òLÂÒþ‘™°4ª–Õ‘D­þÁÜê$Y[éá¡4Ô¦±‡µ<†P[“ûÄ3$µõ´ÕR;!Í$k?‰Ü‘{¥µr(Ýª×rS¼«Åc ’›úCúÛá{À_èïVïþÌØ%ú‚SkŒ-ƒÖöÿü×?\Ÿ$´¶FO÷øz÷Ê`²«îqBd|¶±ƒTÏÄ]ÁjuDw¹\.—ëcBk_ž‘Øˆ—íMàïÑðí_R{RXÓ\6¹ÒäÉÎÆY`µRð†ž×Ì»5àæu=¾Zµ6(ç†'äèýFìŒÂ	'Œ7‚j¶½È`iJ${Ùü]Â´[|Ã µ9²f!CXs£ç#î`=gFŽENÒv	PÀCv/èÂžø“¢œ±ÈÒ8h’E–«p–CÆYÀ*ÇˆvXM²˜óÚX‚ÆtF²™†Öx¹µQ¤ãÐÆ«øjË†Ô#¸VLRJíù¬,×rýÝ»¯½¬íïFäk	±Ý™ñMm2a	³‡µÏWµ¦,¾æ7N\&ç“Ö_fÈ"r—Ëår¹>Hÿ}zþrU¯Ç‹ Ùê(Ò2D$ëñ¤þ"]¤F†€258»§&k„cr¥oQíøj`íãk¥k7ú­ÍukœGÕÜ8Ù‰^
é–c¿qÐV£%o³¥-Œç6l7"k$5c)BÓ!§æjëb3CltèÖŸÆÍ˜8áëIÈRMYÉŒ¥iÚQû±ÎÿÏÞ¬È‘3[øo_ß†2?f°¾‹»IC¡’@«Fí´ÔºÈM=A?M¿‰ßÈ1Û'N…•­¿Ü3ÍuÓ4ÄÉ,I©Ì÷tÙPqoÄ©‘è`L×ïA}âá.öžkW«…PHÀËLaÓP”ÆMDÒXÑ6ž‘K¶p« ØÐãâ˜ëgçµ…5~‘¬!ôò^2ä„ÝèænÂƒ2BjxyñÒ›êµÆÏåjjÇ¯˜öÖvW+ÖThoîýžüêr¹\.×ëèÝµ{ètÌÇ3EZC,EøíØ%+²U6A>ž¡~ìßÛÙ)¹ÉÙr\"».—k9ÿNJl³†o‡É€Æpm¶I#Õq{Æé‚¬f¬wÅ²öì7Ç't²ÁÛ®hÙ"ÛÐˆ¬ñJ_¦4†qòeW¡PéRJ´ÝyE`-†÷€µI,C%Óò°ÝÓ3¢uËF Œi“ñnŸkD"£’Ui+Cj$ø‘©³­z»,Á÷¤;ÂZ×	,ˆ¤«WdÖžk 5kÿòÉáàå`ÕL ˆvÚ5òýúù^ý!yéé©o+´FXCŒLŒ#r''ãkÅ±/›fR
±ù¿B—Ëår¹^IŸÅ
ò»®ëýƒL°éõˆ`Û½°›ÒÐzí„ŽØë¹¡ŸB/A^„µ²ÆiRˆ{êzÊàÝ­q¸{:²v˜ó gŸ‘q¨¶~#3µA6%ž86DD R"´ñº®ÉldÖ¨Q²6Ó£ÈI[yë±Éb;8ÆÄaí±`ú¸È½%Ñ¶’RxV½üãae2—‘’
,e ÖêÂÝ¾Öý]èÊ^­Ò”ŽýÌ…ÜÊ®ñþË•¢® „Ó°ÑZWDkz;UœÃûâåk/k ´ ŽÌ‡d§d¥30Ck/§w_ÀR=B´«õ­ÅI9È	oHbe|Ž~lúÂ˜óOÝår¹\®WÒm³ö `ƒ‹?Bl+¿g÷õáÇÃÚŽoGá´{J˜®µŒ,ÃÜJ ÇÕM¤È¹3Âùe&ä3 å…•m\áµ¹l-q˜K×ñëŸ+È¡®2”!3êITÛžö~¢Ç©1ö]³ÈÚ,nÉÙ3)Fn¨¬Z¯à'X[bÚ§$s‚Ÿ¿@u)	ÎY&dPù£ÆÔÐ8Þå
ê]Ó ùxo%”†ÔG…x©åÙU¤©ÌV=s¬7dä‹ö"Mÿ0Ùè@´Úq§…P8‹¨¶†Ç¾~þÃ¿,>CÿõÏc.¬!€¦¥M"ÛO>ÛÂš÷Ä~s¡µ[ˆ=õ à³v·¤r^ÕŽè’§ÇˆgAº\.—Ëõz¡µ\»0“ª4°Úù,1´{ ÚÃï§U–ý,÷ ¢CT$Ã>ä”¾x@—_ZŠlAíªFhÍøfƒ,CVvf¸ô
ÓŠJ×\ yRæ
²í¡öO5®ÍíÖ¼¦¾Ø¦Q·†.lƒ^‘òÒq¬±M«G“î‹Ð…ÍnÈŒ†Ã”¢Þ•mY—±§-Ì“¥FÖ\›¨d\VBYép¨¨C«%7p(-T”¢åJëþ‹i?¨Í Lž6X³]”ÿjÈº‘Ÿé­Ô†ÏÐÊÖä2ËU.õë'/_{XSÙ,ñ	UÙÓÖÞjhí°‰m;Eñ)á‘XnÂ‡Ïùö°F”ys=—Ëår¹^MŸÈ``;æv^a)¬¦¦Òg”&ž˜D 9yÁµnß½{¬":™çÎ‚hxmÄv…Úæº5ŠìBÍ=²ñâìœ0mø’Ìq5ËÕ<qüSV›ýçvkçÐÚ,FÍ8M…kÃ}dªH›Cäæ<–Š2P©Y/\&îáñ¨´Â.k°›õþÁ…ÐØ Õgàô*Àñ0M¨]új³Ü±uL\ËóT× !ê3\<$[Ü‡¢ÊÜý–5—¯Ÿ?}ð¯Œ¿ÖØÔGBa_àqÒR	KE6€›mA½@cl‹žjÛó	Öø‰o„;è=þVh°Uf‘[€º\.—ËõŠîý÷`2µûÜ`Ñ»P‚k‚e¸#§ayÆM6ÉFü×–Õfpyäwÿâ€ÓpRÂm÷ðŒC¥+.þ<	cPºžû¨šHZ¨­e¿áŽçâÚÜnm®[3ZãAmkÔpÅÕ#Wºàƒö0Î­®tÚŽa©ø8·SeÆn‹¬4;2Š)çx@1"xL}F’,µ–Lƒmä6ÜÂn¥¯Çšb‘' qÝX¤%Û«b¼jÉ²¦Öµ!êWñ<6Í&²ÆÄÈŒ1-‡=æ¦6_>y:ä¤Ó¡dM†[:‹ì ÚŒ\Âi:!ê‚6knøª”ý|iØôF†­ñ#±²e¦€æÚjOI]à¨ÆNk»û‹¸\.—Ëõšîý¨XûñãÇ©Õk?qñ¿Ô®­HØ`/r¬±Á’_ÁeÕF*Þ†V¹v½^˜Æc³üOÍ´f¼‚cŽ®ò5Nzn†Äñ
«|fÃ~ ¦çjøùÏ¨F-Ë/,!¹ADÛŠ›¿¶ì×ûëa¶¤÷Lê‰9†xÙ	°ÇD“¶Ã!„½[,A“ Ã!4º4Ö¦‹VCÐ0[SlëBl©TMx,åHµ¬*yÄ_Æªl0Ò¦ê9„Pi9Ü!i.‚ÜÊ2”åM ¹.fþ^ûÍ°†Ø	b/šÿ¨ÎRack?]!½ÍÚËêÜûoÔîsGñCTge·vâØ“ö"»ÖüßœËår¹\¯§_Öà1‚.jÚ×5ÄÖÎ«äC
ÈÉÙí|ZKïm=ÒåŠ0\M3­QO˜'’Î0p!(w%²f¸ödtÍÊÐ66›xó:©M¬6ÜŸ¡©ý€áÚaù»ÈšÐã¨š]Y„Ížžél¿=RÚÜØsØC·JºÉÄ_¬lE|Šò'èïm‰0‰ûÜiòÑz(½•X„ß²ì´\°YKŒµ1ÐÚ.žýMé
YŽ˜z.Z¤V.èÖ„ó¨n!‡Ò¤×ªl÷Fj£´®ñùòÉyí·fÓ‰}?{­]\ Õ±]â0_‘ËìmÖÞ\híEg›²‘óÌÂß„µ„N­Å.õIÐšþÕøø/—Ëår¹\¯§Ï€5á1q9BhŽ=Ü¯²’›rë¬é§S?ÚÖÞàqì½$D¹¶¡Ò‰Ž¥ÙALãb,å§êÖÌhÄPmÆ5¢™N¶¼Æã—½Õ¶aµÁ›<&Ý='rðÚÐÆ¸ßÖ“!¤Žcïñ}lØ–\Ì¹ŸÇÖ@fËb|DÐ+”@Xãf„«ÿZ.ˆº¤Cý™„Êpû-ßÝtløv(p•9€ú1c¾ãºÊœ•Ç2|k¯KìjQ‚œHZÓ§åÈ1d™©Þu¨µ¯=Ë³-èIµõtZejUH>{:äSz÷|XÓšµkøúŽ´82ÚN&jç¿øÕÇßV‰§£²8>]¢™¤½’Õ.ãÎÆ÷{ÑNck7ºþ÷¿\.—Ëår½žþ@ÁšDÏÖ‡‡Ó*T¶ÇÑ`9r/3|EÐ…Îýë	W¬ÖŽ£‘›·íOÆsÖÈ{Ü,¸žAhxuP“-$¯¯Ù0&[ÎZ&_‘Qq‡‘šxóyuk6P´ƒç(mŠ«ÉˆA÷¸·pu-®¶¢ÝÜ	9Ãû’}´Î¥ ØŒKq#ŠP)ÄÍôÙ\I5…Ö`­×Ã·Ev3žI1·.Òv!ô‘· ¥z8d¹ÅäGÜäš¥m¡l²$u¬4‡¤ÊÐh.+«­gì”zy¶w1ó÷ðÚï5&Ê¡fº½Õ aíVaM/ ìøoýmYŒÐ_dÛëŸ1"§ì‰M±ñ¤ò%È
XÓzFÏ}u¹\.—ëu-F¾ÿõãû½º‰œd<I´C`MhíÔê*	¢³¼ä>ÁæþµÀ¬ýŒÎX5z¦eWPmYû&3‹¬q1ÓÐ že ÛP2]qóç16fY„jMŠ¼õlV2\5§AâÜh®X›.§«¼ÆÉ¶ka¿-Z™9†ad}ª8sj–g"š¯ÉœÕÃî=§Ùé[¬YTÎ!*—ÂF+B‹ºEÆ¢p¡d†6Ü¶¡CA¶ÞVúÚbÌ@¾õ¬y”?³&‘[¾º9ä/ôîßÏ¾H¦„ïèÂl¯1²¶³HHÖýwþ–ÜûoXC|L>ƒ0ûOHÆÙä7»¡»úŒx»—Ëår¹^WŸ~¬I`í„Ð†óñ,¬&+„Ùäe vÿ³› Ýù^î¨%`Ž“íýS­ÉÈi#²†K[â¼=#—pÀ±Vº®ˆƒ‹«œ–&Hœ—Á@k–!åßkØAÊh[ÿeœ<¶¡µHãKîÙ®a˜M¶š+âøÊ;Q¥6h-QJ!‡Ö†×LK…Ã!aŠ)€ÙrEòb1––e¨H‘¤Û£•å¬8%KlpÕ-¦†ªµ£>Š‚ãHxšê°,ÿ5Ùû¶²¥„·”´Ü±%[^Š›CþXã÷y–˜å‚·¬;òÎXÍûß–ÅÈ>Qä4j`íÆ eisË5¹…lWÞ‡!¤þ½xOÎ»uBw¹\.—ëuõA¼ ¥.íØï…Ðä…dGôZXC’¬¬%6t†Ômä´Êm”&YhŠu½hPFb³·6¥kO'CÒ?cQÆ<SË\«6R ¯W«ñ§ãÁá`¸þ•×LFO<¶çlû8‹÷0]sù¹àæ¸ci—±<ÅKðkHè‡]Ò£HbJûÃò%s”?Â'rÉuYÚê¹Èÿ:ú·-i±öÞD2æª]®ûpì‡:{bã¾%<â–]I¨ŽÛ]û³­}9 x-ó¿r†—äòçŸA
æð0#þk_Üòÿ¹¹À’å(šQ›ÉI‘ÕdrçþÖ‡¿ÖHid6\ì?ÛM6ºÿßXÜÊ´Óˆš<~#Ò<H/Ys¹\.—ëuõî“æA"ùQ`íA}DòQ!]Âj?j;içì.fS_‰Ew®÷Y3¾±HŒ˜1Z$u5J54¸$p=ÓøœH5Ô®‡ÕPÚ(ÂîÅv˜÷œ§àà“•kËp€4H›ÚšÍÜÚ Û£L)é:DYî…ÁJ.Ëˆ¬íiiZâ!æZöyãán¸-ïïîR)uù&pWdqÌªª9’±T‹¨]@-WLÀ·QŸFR»aë;lO–¦þk.t˜<k(á°¶tÆ[ë×O8?<Ö»ç~©gDÐ
•šá&l¹ä[ÊƒiÝbq‹ÄÆm0m7.@g ßÝÒtDïVN4Å~ï-±].—Ëåz}‹‘¿~üõý¬ßŠÏZ£Ö«À¨¬Ë!©l¯Ç¦ùhr[#*É¸§êJlŠ¸v9¸’°‘M·žÈ44ÚÎtÃáŸ ¾gŠ«mû'Ò¼³ƒç]fÍÄ¦â´è9àjª\#œÍ¥i¸ºu›™o6‘Ðì×&²)Ñ¦hm	¥Äý€5½å$Ô––ÃNåMØÚç°®]ØZ+¥V­-ƒÁcBk”YŠ`¢zgÛõ~¬®#ï£“dÃ-¬‘[”àó×VjM.š©.&EV½Ä%ä¯_=òÙþï#ªfé;-YcClfÅm[bã+=.ý7ý–,FØAïV°KÉƒMøŒ‡·$/°M÷”“!?:¡»\.—Ëõê#ðƒ<!¾±ÒgD’E—’µ{59Ÿ±·®òXoAmÔ++ŒÊ ®gî˜«f	«á…¥Ýã|{pnƒk[Rãñ4§á¶=K%ƒËj†iC!ynŽ±¼¦É’š»­q0¥\ÃÈk^Æ® ßf­ó>Ö®*!d!4¹¬™6J¡ÔÈôÈ;nÔ^Ña_ŠÄÕZ+1ƒÕs®ZØjË5ÇTBkæ’q9úiáCEš2WÓø›æMêO•¾kf˜Ž¯^.`C8ÛÎ-±¶€¼²¤¯žù|X³Èamw»5ÚMÖdÖ³ÿš_üÓûøYyŒ»Û¬ýwÄ2C7|æœo¹ý^OÓ'ÑÛKÖ\.—ËåzuýB“¬F–ªaƒ~º@Oß±CX[RÔì[zŒ	ÎÑÀa°š“ŒmFö£œ®x8ÌØÃajWfJ81$½ žqäÉö›ªÍˆ¹¥²qòe‡ë¨ÆÓðu£	°(®Lü	7×¦'®‡Ôl‡k­a9Kî˜ãS``mhŸrŽ‚n
kû ¢*i‰û¥ M±‡Ð€j­&¹+Ÿfi~ü1ÓDDó!{8”.k+bc±®äQp^í¢–«lÒ’¹‘ý!Jn¢Š·ŸÖ|÷-ôU–ëŠB*9h3¸ýÿþÏá«›˜Þ}x¬±¤It±Ù©,þb9¶ðïíoÉbD]ûi²M€4*ãš{¶ ´±36Þ‹ìÉ›o‰írý{gÇŽ¤áÑó´€2ÃïöÂ¢€B‚I\¸àŽ+¹.ä¦N Óè&º‘Žá^Nü
1E¤å1fÐ]FÇŸ™d$³ª%«Þ¢¾Æ&“Éôo×Ç¿Èæ‘1?²+ä…nH(YÃª<„c_……{må›@)YûGêá¡×«á8÷Ôš¦×ø©ÒÐVŠjoº®Þä.Ê8¬Ç~õj/†ŽVûy5œG8æ ƒÜOFØ@OcjÃ‘Ø¢{«Èëƒ¶ïÝß9‰)	K¦îO¹YŠŽ}Dr}´µv/$zÆ]ª@twö­VøìÓº­MÇã<9_h-•Z Z«ÀZÆz-ñ€dØG:«MÛhc¤¸JUÛzåÔú½!Ûv¹¦ùœèä5ÉÅ\…ÉN³7oÈ_m³¦»äPÑ„¯æINí uLÀ3\}03Èßh$lEî0S†M;bk­ßr¬0.áO v¼ƒµÄ6™L&“éô™Rg—¨Œ`Ž+¢8Ž Ä½dmË‹‰ÅÇ˜Ké´¦ $Xµ›YÊ™™ÖpAÌj˜hTB°#Å5HÁfè“­÷[õ¬Úè ©XM s“?2ƒCúü½æØÐYÛŽÇ=@Ã°«Nf2¨Æ3&%µQ3­Æõƒr1ø8š`ïÏç3¼Ó±ÐÒ9”Â9´3ºg{Ïsxá÷˜*s£fºDë‘5ÅÔ`2£%ZÔmµb*IÉSÐ¸v­ÉKJ.Ÿ'¼#³IHyvuÁ»s8ÎàÁüÅ:eÿšsÿ/wü¥ºww€š|¢á«<‘YMü6û Áà .Arlm…Ú¤ÞF’kC¥"¶û?Àeä—ù‹˜L&“Étúøø ¶œH#=]–+ñÙµÁq„÷FbÀxiy••aJ%l	BY`·`¢h¦â¸GBû»!+ºÓˆb‰Hë¼^™FJ‹[¦9Á½FTÃ©Y¿ž^“X^¢k¿ë€úãÏF×T½"oX‹/ógãÍ–ÐôF¥ü@‹Sÿ£:
E&ž&ü]Œ>ç’Ï`´š'¦)”’³.²Jæ:³øR—‘–\ˆ´Z‹@W)â¼/Î,Ôºy_@{ò¿Rá>â}öH¸I".û9 òØa$œŽÑùÉ»˜ÐJÀµjVþ¿ä'P»ƒw¢3é[º0®îÜÏ—ù‹üNû ïx#ò¦ø€•ÃjrBXç'äBB1x³;!Þù‹˜L&“Ét##k{x~~zæê´Ö¶R¸ÔÆnðb#¬«¤&MŒsÈ[7HmŠ­‡ªS¯;!j41²6»¡]ÏŽ.E™£f¢ö7âœ6d#RrÓjzl*êdì›8u$^—û™5ýo5æÅÞQÄðóZµwBÓy£Y'} ”ºŸÇÄ?Øyï$è²Ž>¯èkž]HÅ×Rò|œBlÞ*Ù’ó°îW‘<cå8ÆÌV¸C6"Ym)¤ZÀhèž]V,b·­<­Hœù+2rm]Ör<ùpöm½^—ZèYçÙ·Ú®ýÇg×>üZYÓéþN<û1"¸?ÈWzâ¶¬™¿Èïæ	ØBÞôÀÚz@âV#-c;üäFh‡·ÄÃ™„2¯¶õÕd2™L¦[Ð'Ê«}ÿþŒ~kËJ;×k#Jc—þ…úd«(Ó¶^×š
Û<°ŸD.)ºè£r´?î˜ÑÜéLÂ^¾¶Ýt¸£l[#ü©S™z ë¼ ÷i¥ó"Åµ32½8q'¼öÎFHÅµþS×}þwš¶gô	ƒÝ¥¢´|ü˜×øæ|vgvD2\Ï!ç˜KSóÜÑeØ}d®\‹S©ÊjËZçÓ1“ÕŠÈ½%
 ZÿÇR*?Z(Ä
Òh|µREù—´µõa]ê|ôù<·õÊ/*ÎÅ³«L{éËçk¿°’xœ ßèN÷ÌÑpÈ¬&þúðÿ‘Zcó}­\S4C„ikkg†ƒÐštI§fV²f2™L&Ó-èÃŸOOÏÄj„cµÈ–eeKÈµÖd'$=94$¦'’)5Å˜Jè–nÞKTI™—F"¶#M*Ý)À¶Ë@ŠÖ†b­½ÄÚ[8êèò¾]ÿk2MiííŸ½i†}\ìû{îkX˜¢‘8ß)\SFÛsÑHcý%9…l|p@¸¬‘ù£/~
…n1†’ð‘¹THm©ñXZ%I?ìêœ÷Äl	¹ØÒX5LeÔþ±”T…ÑZ-ˆ°†4[Ê.ý>„Âá}SçÙçàñzî!á£ÏoÌ>µöåór2àÌ e¼G ±ÙëýßÖÙvâ ”FûÞþ¥ÖÀ…Ö694U¿é¶#,ñ‘F˜Œ¬YÉšÉd2™L7¡OOßŸ	×.½ÓX­µõQží.qõXB¹5*h»"µÆ…k.Ô–#ºÆ\3MgÉ£	°áf+yÔ=<~l²(WçµÎ*¨mNU'–´%±n‚Âó6)¸µ†Ä¬iMÛ Û¦fm{üRvmûv]ÒiÊm¡ê¨‡NƒÎ¤)xwfÉ„.d Trò.„ùHòE-ŸçÌµÂd‘bÞÏeia"Â\öbñ_]À*­€Èp®ôJ(¹#™<Z®+ÞL+ó#®Iïlê¸,¸ffïëžÔ¿Ú³xEò/‚hh< º·ê¥ßÖ¸âŒÐûÅ	’Î.é¨ §ˆÉ])àºîÖ(³f%k&“Éd2Ý†>>}GQÚ¥Â¹¯^—åÒÐ~øòˆj58\	×I‹…pÓµÂÖé!"óÑS>¤a_Ýv_#g£”vúATtj3‚y‡€p»Zö
¼”W:¦@Ó˜RÛöP´„dÖ£<ÝÖâ{èïÚm¤¶i„:}ƒÚ˜U“XÕùL£žT9m`×{*™µ#):Zžbð>åx	ŸXª•ýó1Ô%e.1ú´Ñ¾ÂÌV"/™¶…”ÎÅ5Î.cfVk4ï\mPÀÃÿ°®(¨¤9¹˜òyZ‘é}I­å¿|úÃÌ ÆjpûS‰	‰Qs©X£Eóùü Ñ–aM°K0ŒDBœ`MÐ\}@ñˆiaíïö¡›L&“ÉtúãóÓ£tÆ†ñCCeP[Ùž ËBñJ¬F¯AÅçÜÖšë
X‹1­Y‹qRí$ÖÔŸ…³Øúron†ƒtÞ¢ZÇµy` áèÀ¦Ëµö}P$‡¦)5¾Ó_\—fyºù=GM›Tàø«ŽÄ¦ç»¸¶¿é1"Ð…-§¸Ö±Q¥ùGæ\tZ³†q+"µ‰þ<Îáéè:B3Ýyrœ}ŠSiÉ{”‘ÆDÑUûA2xUŠ±Z|‘§-~ûöí˜Í€}xiœO>7ñ¡÷ Ïú·/©Á`ÄùÚJÎM9%l‡,“+‰pÍJÖ~ÞfM8Mª”€iÚ>î,Š%¤Õÿ2Ý~j­Ó·~ÌpîÇ*zæz#4Î®ýBu/ÿAÜ[ÉšÉd2™L·ãÞ’5Þõ¸®µ]®H† ™ÆV{ åk­ ç†žÈH¤]W¤»}oÅ­+¿`Ðn0*Œ,¤„¡ðõ‚”ƒ‰TCVI®ÝÄjëpô4šþÊˆt3§Œ8Ï?¬ZSV…ßnÌªaxÕ†SÖÎÞ$Ö0šõÒÃnfmŠ!ÄNiÈgÏ–i~É¤Õ<¸ulÑ‡À}¢e6ãG»4…5¸Ò@l÷Ha?ÜƒÕ¨aõç¯_O¹³Z›xAúùë7ßÐ¤­$b½3`írYK¹^¢·åºò»BÎH¬- ¶JÑ—OV²ö“Ô[Œ —š»SJEaM,õ»¼ù‹ÜÖgø¾îîz \¦âP[5¼±»<AkÊÄÁe†e%k&“Éd2ÝŒ{ÿó?¿?=\àÍ’5.ŸIãµ‹²Œ"ReÛ~LF$my"*lÕ–á„ºä¹±á êØ!jM8£ƒÈûÒÏÐ~_µnr6<ÊoÔrK•ó˜YimL¬ipÌªõ¥ŸæÔôŒ“,ÆNhîtWÓá-©ñ5ÒZ¶ý*&¥¶è™ÉæèÎ-†”‹ôØùèi:ÀmÎÑC¨E²/h~-]Ö
—œmÜýSªUâšý8_øYm+ãš?9°ÝuçÕãT×+ÚJ,DlË•vä.Ù4ß.¼;7eÒ_Ÿ?ZVæXS)¬‘8³¢ú$_ï)8Ø÷öß«/öý+®1ž°&pN0‰$äz¸ÇžØ{©u³Ýd2™L¦›Ñ§‡ïÿ|†í#Y‡À]ßƒyo$\FX¸¹ÒúRKÊ$¢°.Qtk !Í<½5éû™ØŽ¸Æ‘ýõ»Vþ“^Ý;C¯®-+i¸c©‡Àc3Ó˜üC N)J“?ñkcVm»Q§é¡ÃA”%YßþM:²	¶ŽÅ{£¤ˆøÓüF2}NÎ»)Äé8£š£Ç1{‡Xáx:Åàè+Õu	'ÄÅ'.;³þR…Ö0Ôœ°†+yŸy‹$VÛ´V£«Dh\ã¶ä¹HÉÚf£”ïZB¨—ušBðôÃ*Þ)"+YÛ×}#Ç©y5ì…<ÐÀ­ÕÑÔeD+Y»­ñý¤šV­‰Ïç°ê‹üy3•Ó;ÄZ„t`Xû‡}è&“Éd2ÝŒþzþþVCº‚«ÒÐ›8øƒÓ.´øH¢x…«H€_àŠµ °‚ë)›Ý6kÐQPAã™ªWÂ¹‡BCo/=:»9¤‘Õº_å¹cØëÑÃŽ*É¬q´§+)/‡c$5ßi°6†
l}5ËµôO÷Î_…Õ7aˆpVA.ÍµÅ}¤`ò„o±4Ï™K‚53¼÷½Ë­„s(\¬¶¶*>!èo@ÕT¤ÿ5sVÑ,[Y^`u!>ã·NçJ«Äz…ftüK>—µ9B–·r{nOW §KÊìÃ	fýj2àö^¼' …5Ñ?¬;òÍïƒÔOöuÂç©p&c6DèÕù“­@Ý1Ók‰m2™L&ÓíèóãÓåÊ°v%­Ô›…æ¶‡Z–X»V@šO©€ÖRê‰µØÉh£N3›”™îTP“€ç‹d~·Yv·ÑkäeGTS"dVAMï7³.wÇ¾vûl·B’Üv»â.}É4¢š®Ë±=ç¸W§sÏ¨†ƒiÿ ³
a×Qå|¤Ïj®S0 {ªHªAôšÊÒ<öPÆœQ§Æt†)1­%Ÿ´Pg:{_iÂ-wüCTP—Ö*²½ð|Œ§Ü*ˆ.¸RšÏS[®9ø
ì«î|J9NºÏíkþþwzxOÐf“oçHÅ ÖÄSD«ÖDV²v{.1ûÂÇŠ‘&°—±o{ÄIÐMÖ
æ0¼?”Ýk¶Òd2™L¦[Òãóe¹0›¡¬¡€–#4².eeX[×µ%”¬ùR`+È®i'³Öí75™”ÔXz¯,¤4„“gš^‡]T{ï—§ö2©³H·y×úHDü¶žûÛÇµžÝÛÊ‘hm!wÔŸp°=XNÐ¯Ÿ[u\Óƒbë¿NqzChóD“Z×9ú‰-¼;žižÂ¬¨Fc,y>á‰/5¡Ä±‚ÂjÕšÏµéNIN¬)¬5¾«áÄÛÉP„ûÍ±¤ÜPÂÖR>gTXÒM&_Kp¥ÖRCŠ<=RrÍJÖvaÄá=§S@kÔž«gÕX8¶ïíÿ:XûûÿÖàØ×–jj s ‹Wº¤.‘×uG, >þÖZÏd2™L¦[ÒŸOT¦&n"`©4èéRåQ-ìÓWJI%Ç·<±Aƒ1oE3ô~˜Ï4Rlˆz›¦×Þ©_ÃØ!¤‡<ž"ûõ?BMF™6£zPü^ÒoÜ’©<ÕIm¯EvŸÞ>P·þ~â´g/¢WÏ2ê9j‚ä†Õb˜tohgl(Œ’YÃŸ"¸ã)NG°±Ý	ttØé]ô	ù2\ºS1-ˆR8«TëËŒŽxfk`<!¼4¹}É‰¯—…3iWÊ¯á”SîäÐo-ÃÏ¿.ùôõäòçVí´W´FßéI¯-±Ö4çPÃu ³U/Ýbgó})«¡Ã²©‘„Hk×^ uTfçÖltYÉšÉd2™L7¥”O»>p·5±­Q›56¡àÒ–•´´Ê{Ð*MùÅ`„Hù`×¼£ïg”ih¥)(É¤­ªiÁh—~ÞòYsajrôßMqMÜC‡Té¨	Hû¸ÖíMuNÃ¤a‡¼!»ÖÏÔ¶˜&3‚n9Ê¿º¦èÜ4ëîUÕ[Í°‚Ìá>Ãàh˜¹54ä+„bµÚ¤ªL|D¼ÀhŸ)»5Ð¶TB¯uIÓñ+6A¶µ•¶®è¸ðIÎÇ C±Za»Éæ¿N_ÏþËÇ?¬dmÐÝ‹t#¬†Êœ{éÙ5í‚¼ù¢µÖ2%Á3ˆ&úï×ˆ8\¶QVƒ€ï”^³’5“Éd2™nJ ]/°Y¯Äg¤Ççç')\±]SÆwmºrÈ4—(r]Ýpp„"e™-	mQ­ßtPmûœIkþ9¯M}äyÐë›»w‰ÒÚë¥„HÎˆ4ÆÑ¡­Û^îw[ë…b©Ü¬9²á±­/kZMÜì{ŠŒ¼6Úö÷óÝš5oQV;OÿÃÞù¬8’#aœª¥k§çÔô,Lê"&ÑÐ)ÑA7|6yñôÓÔ›ôÕcÌuã‹p´²DVÝ»îø2SŠ”Ó®ñ,øG(¾øþÅ\ƒã›»‰"Ÿ‰Öh¦!ùpˆþp³ƒ3¤w¨(£“žð5ÀZ‘Ê"’`C$ãrZ£Çh&dkû-+;÷çLŽ#µIöm=ùðM|.Ö"Ÿº4¦xüâ\ùto?òGgw´Ã–MoÈ­! ¿ñž9ýßeÝ‘)ó~"pèß$X·á<ãQ±ÜÎ98ü§@“uY3™L&“éæÜû‰ÌÄb„Rj¼õ‘XK2œ[õ=×K¬”Ì¨±³ÚÛ™5PcÍ°‘nKjÛ ß+
‘(¸ž¤¯ý°6T5÷”ßhÐlì
|vª¬‘×k¤aîrrâÏgÛÁé;Ùøí'ÖÂ–×ä7Aîk0‘Ih-Ð€ïAIšP½†m3EsŠo9ÒŽPˆŽ¡ ¨èPé–B*n”DcÉ¾ZLë’Öøä—[ià±±êãr…Yé¥¦º6W¾ÂD®Ô–cô>7â:ÀZt%Ç#Úe¾·’µ½­\ßt'°&ix¶³C ]V½ô™÷Ã½_aËÔÄ] >úŠlš­Öp~¤©)6½Ñ`Íd2™L¦ÛÒ¿¨ë5å,.`5PÚ3%Öm#X£ó|:­­V_Þ±^N-¯Û {ÑZçÕBØ*vÒiÓzÔ{hcrtÃ‘€óPƒœø (ì$9fÔ0É1å`?ÒüÃ¨žXªÖ6ÜÕÏÌÚ¸¬%oBo‰UWzËt©¯­2¶bµ’kp.ªé XK3ªÕÎÇÓtá®”˜`3Rsœ=é[‹ÎûŒ¼š$Îr^Òtýša«U<"q­¢5öõ'œ##œKó±5&kl-™¾Ì4—Z=Úä9e’/µ”’[Íù˜1ÅËÄËÚS æ
køÙÎœv­g2ãþ§îý¯ßíƒìb¬©×ø¶W­Ñ³wàwH
ÝŒÐM&“Édº-}¦µóy]¥V‰µgZ!zcg‘¯+v@V!˜íÅ,°ÖµŸY›5³&¤5†]õ‚fÖºcã†Œúñ¶ô1’ÒÚA?q7£†S'HºÇˆ^Â’ƒYe—£®—‡»´¦x‡Qßÿÿ††zÛ/aÇ÷kÏ©G$Ö2i.ÑÔqÎ9¡@-üoLÞ'Ç©µVÑ@ÝÃÿ1»Ùe¸‚´–KfPó¾¡v­Œe"ì~¤0O‘ N:d£öJo)m])„/döÎ¯­ ù¼+éK\WxüWO-R­åª%rùÏØ.È$±ÚÕ„Â¨Ò¤šþ·]¿œy?FÉ’]l›I“Pûé}€¤lXÉ]aÍüEL&“Édº1ÝsjMl q‚í¼žP#gH®XkBkÈªE_¢ÐZz‘YÛqîW}¯ãè}és’–S«F%$=¡×‰mî‡B{˜CÂË¤ÚÜ/Ñ¸6–•j€¢ˆ³ï©Õbã¾EõwÔkËiÓÅ/éš´ð–ä+©5e5wÔ³Óè$!¦õ‰aíˆ#À2ç£s)Æ8ù4Qì‹ƒÛ\#é…i¦ƒ3l¹µBÊmiÙÓãiJ…Ö½_–â¼´bC·æJÑºò•c* ·Ëyñ”Û-.#Ûæs¾øTÖ½t¢w8l¼,WåÊ°F´ö»åcTBiwÜ[ÛjñuwÇ &þÚ0Ù6Äýwuÿ“Ek°÷Ôˆm …ËHˆÅˆæÖ”ÆQ¼†€³«¸ ó1™L&“éöRkÏ”I“ÖjœM#f;cÙDRt¾°ñz-‘”èòÙ'H·A¬&Ú&¯äý°uZR¶’Cók,$RfÃÜ¯êø’~œ’Ú¦Í|è,¥uÀƒ8þºªSÑ‹}¢t¥59ep»Û"uÖÅ$ï×aà¶Ži£{ÿ jo9enûÎm¼1á9Ò3kG9øtÙ‡Ti8xï¢/¹øp$¡7¶sá1¸e%çZ=ÊËZGú8‡¼[‰e¹´yªU
Örª'ÒåB¨¶Ðó‡££7/çKóu…¿ŠÓ<ÊáJ©¼}÷>ÎŸ&Ê½ü™Öl¤èNœE¤Ùb>^ ïø¼JöAZŽåW)Z»“Ø¨95@šÞ±à-"]$ÁŠ.k›¿ˆÉd2™L·§ßÿõüüÄŒ†”‰ /ë²ÒÚW:Ñ~øëšÖ¼/uËˆ&Öèì”Àê¨¤eaaà´D5Ù¦ÈÒˆJlhSI,Kâ)aõZ¸Ng:ô©ßŒ¡2(+ÔóòµnšzjMY-m°l¤Œýq6“tJÛ-Z@íÕÄšþ›w‰Š8Ý6 ÚQ^áÿ,r	3Jsõð‡Ä«pïŽ¨h«KõÈxµLÏæ–Cˆ©´ÊÉ°
«‘¶°N'¸ü¯¬hˆÝLŸ¦|:_j¬”^;5´ú‹ó\þhn\é}u¡te\ÑŸ¿Û.HÑœ9Ã†˜MŠ”öî[|Ú.ÈÛ/ZAœ&Ô5X‰@WzÃºì€ü€dü0ÓÝR`-±M&“Édº=ýñDþ—Ñ ¢z5Ú\vFžà¶¶+ÃZò¾´%Öƒ:Æâ§›]?¦£z¢GI¢gÙ†2¶Nk‚¼ãÆ òÝº‘Þú{´Cý»¯ š^<ˆ’àÚàñˆsÞd2iê6òzfmë/²í>j¬3ìpttÕ”ÕðÏ?N¡4-RtS).æ’Â1º3ro(QÒIUYkÈÖ²Ï-6YO‹t^ªå\Ñöú¼æÙQçÌm×N_ÏKË5ìµ\š/xìÔ*>™»­¼ÇEçŸŸþÿÏûCÙa5¤Öø‡=H­‘‡?6?JÉE4#²]¿PÑÚ¨û*µ¤¥î,Â7 4|»²(§uð¦þK§šL&“Ét‹©µoOß`ÿˆÌ¶0¡.kËù‰V.ëº”(´K«õžØn	,å$Å™Î8£¶Yš=TRXÐC9©ûÊoø¬S[_œÓç»ùc Œï©s8§~ªš „Q“×:^%vÓ†Õô¦sœNÎuCÈmÍ'5ýæÍÌÚ¼[EÑ®)¬m¿3…µižùÓ„WŽ!¹è=Ìúc¬¹ùø8W.Só>¬åš)n¬V9¹æK+ÈÑÔo½µ•vj­úzjêÖÖ¥–¥Ñ
½…Æ’ñ¾
ê«‹ŸPÆ¦{!½›þ"åÖ>Ys.5w©µÛïàHÁ?ÖÖ„Ölä_÷ÿA?ì+¬]ÑK`I¶«èUŽåëeVœÓ—NoÀÛÉÂän-±M&“ÉdºA}"¢µ'†5D_a0r~"­uÿæ#+ñÏïDÚ&Ö	Âô²øI©—® väQo5µíH­ýµõsCÏ±õ‹,ë¥ †SŽ¯¡ý,Ã&Õ××F)á4‰PØ™®Qz±F'ÈQ×$ÖïF®w+Öt·èPÑ7Ðuß)mÖŽ¤ÉI¡Zˆ%N“;\âÄÚáñññs­1¸È­±•§Ô
§Û@i¹HÇlâº"õmF!3JÓ oô`;1 ÑÃ§*õoôh‰¥Î_æèçø €éq*1ùZ³s/Ä›æÄºÿîÚ›¼_Í[Gì_­híîA›æÁ>F¾Ûm[ì.Brõ‘ãÁbDú­ýféT“Éd2™n’Õ¾Ad4X£ˆf†µËraß‘i‘R«4Yób©Ek{]ÖÔRP³b£¶&‡Þè°»±;íóú¸Ýà6fÿê;;9jní'8
ú=µ¶×{pð«¬Æ}âÇ5Æ¹a?ä˜Y“ICa5:¨ö3kEÛ×{“YC„|„.]'_&~a’Û°R©ñ0'ï£°Z®œ‹¼¯¶Áþ‘î(\I¶1âÝ9—z¢Åe½Ðp¶-)ÒzËÉW¦qœ‹Ó|H¹fº-à¾šb)oùÓ½í‚|Yâ„ÍºuŽ'ýPÃ`?Ûo½{Km±ö€š5ˆ“gÿüîÉÚ	[¼EÊ¯Û ±E’ÏJÖL&“Édº1Ýúö×3|DHßÖ@nÜb7ÙnÖ–¥fŸ®r"æ‡Ñ²[
îBn)m¸qMÔ[Ÿ)™aÐ„Kb¬+f(rð¥‹Ô~VJyJŠò7õØÙ	¹—YSbS>!·“ãSã„A¤o…-±é„¨ûR"D´'µcQÊÝÿ—Õ-û%€0ò<¹ƒLa¦ æ2Î{ï8±–€gÞ¹è§9Š©H«bØ(¥keYÖh-·åJk4+rmä/rÂ^Éu¬ÕÃÄKŸ¹	 ‹9Ç”+ÝžZÎY¶IÖ\2%Í¾þÒÚï?ëöþ€DŠxAò¦9Í}äo¶ò¦ÝbFX»»ÃÌÎ1^ÖðÕnakv^„ˆ£üš}ë&“Éd2Ý«=#³&^Oì
yÍ¬¡vÑJ¬F¶|WX+Ö’²šc,Øa5…ªÝÄÚQç!³¦@°'ÁµK¬>kÄ†MNMßô¯)3¾½)süÛÎ]M8d9Ý–Ïî5Òit‰TóÇ„hÐHjc½Zù­-ê×¢Þ)d+Iãêö=˜yrÂl4°cv>"¯–fÜ÷!…(æ‘¹0š€W¥€à@Ë¸ñÖ… ‰µFÏ£96kþ8×­7ÓPrt¥úØ`NBh-‹/¤£§—O÷–Š¿;0“xÐNk€´ÍOzZbíÖ‹ÖF^°zËÈàq4)ºmô¿rZÄcÖð˜•¬™L&“ÉtcúüõùÛ™Ú©	¢±ž 3$éµu½¬]à“^w2kJ}z{–‹
)¯i$§\zóšÊ_rð ¨¯õ)tÎ’çÞ’¦0½¾2t\SÌÙm´†‰Æ½ÖØ8Ôè±™ÎýE¹xMVƒ|À› ¦ö"cƒ5L£æÎk×¥='Ê×~ÍÚaCkÍ|;;zÀN¬§ÄÆ"@4äÊŽÑGÔ¤eÝY|”•â[æÈ¥ñKU/&‘h‘Am„kþà—[ó‡XÊ²”É ÜI˜ØØ!²U±ð÷ÓclíÓ½µQ~@IÓµ	òÖçÝ2'°fûáþúÙD©dÖøkÕmJßá{Pë3–Ø’¤VCt“Éd2™nÕ°÷ñë36BÂ²ÿ¬°†;^x:_jƒ?úX‹QY-õžØrŒ‰µžÒÚ·€”	s_Æ©¯í“Ò¶ÝÙp`¥¯^—x€æÕvùLíÝ$[á»kâþ.H¹¶6/«§Ñ4­¦\¶»C2Ñ¤w¢ŽÊ¯eÖ:«Éð®»"L[ÌªtBó÷hê«”Q;$_Òá‘æ8Å’A_ØŸX,j°à¯Ý«}iRgµ´¥Vn‡]Òj–¤.ÁcŠ×JÄ“z2Î©4‚µT¼÷€<zRq•h®ÖÃ—Ù×úÙvAª³$?Ó%¿BzøçG$Ø´—¥X~¡Dµ„äì˜ØòcîzÐ[¶ë§A[ ‹$ìIø‘¶Òd2™L¦Ûb5É¦==“µÈza^Óä…¸£ã‚nVëyA6Äûä½ÒÚKëþFZSNÛ«z6Õi¦fg—äÛFJL¶$÷¾óãq/³&×/*ÐhfMç×ö\?”·zþl“DMÖe%
1½Òamœuw‘×¥¹Á^á÷ÚÖ£~]Ë4ÆûŽO‡GôÂæ]è¾Åô† É'HV]¼k² ÛÒ€o 4Š
€G×R½¯§“Ô¬q*Ž`â#ðÎMÅ{vŽ, 5z ÖvÝ‰½˜³‹¹~¶DŒ¶Wƒ4¬qoìßÄtÂvAþb#ª;|¥œMS×dig7”'jO=ÉÁ]ÉÖ¬dÍd2™L¦[c5ñ¬=sWì3K`íBy5ºÎëâá¾®­øÈ³âP³¦xðZbmÞ!¢Ít3–öqÔ<€“,…­Iãø¼NûÚþE†WF`“áEsìÇ~rHQM§MšòY¯d!eÚ5ïûÀ¶ç¾´9Ûh•9‚6f™¶¢•-¬M‡àÜÌVsp1E¸ì—èý4EX‹W‘ÏîxˆœIkl	°+ °’ÁmtÖ¥Õ&>:–ueÈâ31z<Úrt¹qûmQt/ÅÃÑ•üùoÜdM»a+¨qø@ÂFH”5IíÚ\4Ø¯ö[wí=Hk`‘(ÖC­J SZ£ØJÖL&“Édº-ý³~*W£šµoýõfÉ¥É>H*S[I´ÂBn­²u_Ru7HhpîÇ±éÓ…a‡Ê4”;=¶!IŸÜo˜-Âd|õ¼ƒjÍú°ÿÊ¾×‰€%ž\Û6©MFŽn"‰¯i3ê+*F\yí=Ó~¨·ÇìÄ€PŽÝÄÚ®=
Ñ¹p8>BÇã™™ŠCIÛìè%vÉ’TK¾]m•mü[öb=ÂäF(ÆvýÙgl\rÓ‘Z¤Û)¶æS)ÉedÖs¦%†µœ3ýAŠiåq¦…Ï÷ëMsw‚ilt‡˜Kš>è9œœX³_íÿüþù¤ä¥¬úVqØ…ä©ìdï~±¯Ýdú7{ç³Û8Ž„ñq÷Â‹^‹é&‡\†@‘ OºédÀçÀ—<Až&0ï7òc8Ç­¯JµTÚA÷:î®OYú“¤gåƒ[¬¯L&“éãèÓ×Óéé…<{9_5­{H"5¤ÕxÉü4å”V°†ñ¡vî5ImEo4zªÓûÝ²Ú0Uç«Ó÷I­Ð¢—n7PM“ÏE“h¨óbJlu75%8Å¹2TK(EíFkÂg…Õ®¹‹è*ÈªáÂåÄZ¡³¦z§Õ˜×º~D{>GHÖÑ@Í×FÇ¸&M¬çÉÑ3gÈ¾ÑÅè@Xy)fX›±f’zí±ÖrŸróÔuÖ~Ì{?£Ç/v18PÛäû@ç	´ö‹~³ß bÚ,“|Ã/‹âh$1°YbívF¶[¶íçw		IåšbÚtÓ*Añö…ÕðÓöÚM&“ÉdúH¬v>3¬=“‰ôp”Ì‘ÛãžÛa?¸U±äÖPeÚfŠÅ¬B æmÆ«CÃ€°¹éMÙ[ª1m,G9mjWµ«8MƒËé5MŽ43ì4]Fzº53c±/©39wÔv„w…8šºb2¢¨vÖÔ·_(­ÃÔôûÕp\V×Çèô=f¶1Æˆe‘M¬‡ÝÝŽh-æäz^f;ÇÑ¡­	·à2E>Ð4ÂÞ“Úx!$}"¼‹È®Íãàs@Kîé0Ç»»3ý0›!ØÍO µ_³Ài#t{÷-ÛJÀ>BN…aMÛp™½È­$Kõ½
­Ñ¾N¡‰¤T¦­›­)¬QlàÚ—-@6Úíµ›L&“ÉôXíõtâ>ØÇYöHMÕ kQ©v|È±ÓaZb‡‡€¢5UU³6ª
“
­Sh$rªnÕôøÿUscÝE z«“k£zŒ`\¨§Fµ’YC¤rJc«ù£œ—vØº)Ö­oï'ÖÞC5¥kM¬1y¶{¬ ­kmÑ/¨Y[ÖM"¹Që|‘æ»ÑÁo?t»30KmiX3BìX~›ö3ÛD¦<¸Ñy5:pkK3ÿÿ	ðÙO‰s&1¡µqÈ­ý¢M¹6Ò{ƒyËö"Z¯Tœ1’Ì·ÿ& |³‘‰Þ*š]«*ÕH˜õ5«o?hŸ…0°1Ë}1F7™L&“éCåÕ k’G{>ÑÂG„$´ÀæålÏIÉçÃ1ùÉ‡B«hM‘@a­kºT(o)Ž‰$Ô3‰k^[#Û÷«é!RÂB!+”¬X¥Vi0Œ8¸¶â¥z!$#šRÙÊ`†uŸ5¹¹]­6h€]¯Ô¸vÝ_DkÖtƒjÜÖí*¨uKn[bSØccð~Ø9Ï×íÆà"ð­³%dÎR£‰ÒDq"DÃÁ)·i†Øºžy$	=°S’ÐûlÓägT¿e—g: Ÿöà3híWL¬é×ú%‚sÑ’]SZûÃ¾´ß€ÃZaË»±îß
’Ñ€±²„,LŽt*Ý¦–{É¶
×™¨Éd2™L†Õ^N/'âµgôÃ¬é°û~…Ýöy>ˆßþ@°Ï=V‰5Í¬a_%jÖuO8D%e¥H¤ƒÌrMu9»†íûY­é 	)¤­‘äzvm\ö¡kdÖ*\+¨ÆÑ:1¦dæ4š­•D&â+`S>ÃÞÎ¬áh˜VL<³a¿V±†©­{Úz6ƒ$ ¹Ž>v]4û@­§É'?ÀqÄO°
ñyÑDÊâk“pL	ÿif$c®“lrkÀ6edà:‡k	fÿ`=ÜËy?;—Sþóó/h©æ¸Â‰&ôMæ¤F‰´^Ík·Ñ9æžomgÊgÖøÐ«Ìâ8ãÌÚ?éc X“&kV©h2™L&ÓÇa5³—óëÓô"‰6^©À‘º£V(¤	5?«ÌšSVƒÞämÆâf¿FµìÖË5–P©­¼UÌ¦èð¤VXCU]B×Þ¨¦†ÚœláÔ+±{=”³¼¤ßõ¼m¶æÊ^åÖ :ŸV"š•Ô–Ñ•&kÒ‡@³¢¢Ú
²Q²Ö!øWÌ $ÓÆÎ¹®”®Ø}ï‘F‹#wÕî‘Aóyqqœ÷8£Ù¦Âs’eà´Ó<^ñŒ$­°—ýØÒÐ…D—&r6ü4fÒ”¡ŸÖ>}cbMÊš6T¦&¦ýÄjËW{ð™(¶ý–XûaúXûVm7$š€ß¥N­dÖ­aïáÐ…°D{ü”½w“Éd2™>„>ýIFý'B548÷ÑN)É†ãéA¬ ÒÉ*gO
Á3¬9ÑÂµ·`ÉÌ`€JÚJ¢FbM¥qMNí
³¶š(VG¤çµ%ö6©íÚukÀjØÚæý²)L¹uèÖÅk«fkØœÆE|£¨Ð Ä*«A2¶½ 1v#´j+~Õ¶¯ Úý"ÄÚóÅ]‡ÿ¸Ø‡èà Ò£×<HFß“Ýýã¢Ï1¬«‚cVK´ãlFf
} «&«gA6Pûüû±Ço9ö~:"×–ý„‡¦™Oò ZûÙk›7µ-¯wSñ·zÑ:#©5[w[vúŠÅ>¦@â¨aMzž¯ÖIBÿûüþ›Éd2™L¦Áj”G£´ÚùqfMz«)Zz¬ÁÆ™µÇ‡ãì¡”kÍjQ2k­if­±’‡Ê›¢&6=Ó¨MuØPáB=×ƒ·–ÍIÉìé,[Û0RITØ’æ†zìUb­LÅ²Ø‹è)"Žšë^Ø¨ô÷+¹­›\÷‚TD+˜V‘öUT«aM…çdÓBw#f¢tàïâÑ2kw÷÷w]ð1#‹–Ö|ea5¡µ% ›`4F´½Ø‹ ‚íáî¾¼}œa‰ëkÒB›„•?{bKäTh˜¬íÕ$©¶þ–V#ýñ›éVì 7ÛÖøuª	¤LxÕ…Ç%ç&È†[Ë]+Y3™L&“é£èÏb´W$ÖÐûÄÖžà-r<>=¯Áf„Ä°†ïÊ¨ RX±^9(@Ú^y”­FµzäéTsÚ`«Skenp•ÞVÕÍ·×‰>DÕ\kp¡äÔÊ¦NØ‹JÙX),+¬UFªeëÕËüØ‡x¡`ME5Þ$hi,]ÖT]Ûò®]×½
OŽn€dì»¬6ÄÖvÌ"AlDjwh^í;—ƒŸ, 	ÖœÏ™a³,“$äfjŽ­°6D8A~-Øa	år›-ÿå™”3Nö_?ÿì=Ö6kXƒØ«Ÿ»v„¼’NÄ\DûÎ~+°"ß ÅÌ·œYÃ üâ€B¬}ePÓE¸¸ »Âš•¬™L&“ÉôqXíD˜½»ŠÖþgIMÕÈòp¤j5Â7I¬=Â`+ˆËÇŠÕÀU^MkNk4ÂQ©\¨˜M'lmb«M÷ë$š<·Â;Ýxoþ==Z›œ\î¶6B¥l­m0R*ËÖ¨¦”y*¨¶`š> áeéï×?¢›ì¤K´Vøš­Pö%ß~­'|×á9bˆ]ñÙ¸CÜü»(k„j÷‹¸­ïv.{
µ@…H¶	´ñòHq…°Á;„f0<F0&=÷fËlB’ü~vc’žll,™™Ü@k¿JÅÚbøÇm°%$nCvå¤¬ÆÉk7åÝWºacÈ­ZAbÔ L‚jz‡ÕŠÁÜo&“Éd2™>«½ž_ÎŸÉ­ÿÜùaÞzZ<!Ÿø+í÷[£º5>ÛK—«­—A.¬VÑãŠæfD5<A6Õ¼UP–­b±ÂT…Ò y¶Bµ®&´Ûd\ñšu#î¡¬†¤C2U—RkëÔšÎÎõë­¬…Œ˜äv¬VAºÕÖv…Õúkkj1²J«QÀQÛ·ÿ‚5P!¶½Õ„Ûîè.~’iÃ=Ð!çÖÓµ~¼¿ï}?&´9Ï®6S†ÄedÞO	~ýs`Çÿ	—¤ì!‰dš”µ!˜SŸfÆ9Š=3ú´}ýôó&Öj‘¥2),°û?Pš7iRFK¬Ý’¤úövÑÛ…OLÃ
rÅnoaFÐYÉšÉd2™L@ÿ~ù›k¯¯¯Ü›aítæÔÚ3@´‡I³Ö )ÏÇýäÉgcÃ²Ê¬5KÖÖŽýBC÷ïú¿×TP÷@«[ó¨j9ð×¤WýÞ²·0ñJbMøfÍTÕl*¤Vó–:‰p ‡Ó»8¯àaQY©Ö›ì-JØíke™©lWU³¿›~è(¾#uãý® ·û]ŒX)éœ= Î»>dßBóÜ.‚ÎRÊ lˆð±œaøŸ0Åäc
FÃYö™£9…€Ü_LÑãùiÚ#·ö$Ö¨¦iƒ_Ëi|[«¶°ÃšÈz¬Ý¬Á:†ûao·gØ¡BnÅn¤´Ãæ—ÿe‹‰yÇÖ(Ýd2™L¦ÀjÏ§W¬½žŸ^N@´¤†’kX¹ÀÚ¼'¥épœ<ÃZN)DUYIªJÖ õNØ¿Ak³V-Ym7kËµšÆº‹p¶ÞË¦¶$ÿ²RU+),Õ©/%±2¹²ðQvlÀ‘"£pMUkJƒÖýzfM\Rx@Ø¶²]·©ÄWvDbk»awOIµ>†g£»»ÑÅà{¬‡¤}G‡>”ÙiØ…”]dcÒTƒG0Øœ2‘k?ÉãKKÕù„GR|ž&Ÿ8·ö´NFMÓ†&®S+#8XK“ä…Ö(¶k7Ò>o³‘‰YvîÅP2i,œ³dÆ»Þn—Gèi1û°a°’5“Éd2™~<«	ÓÎÈò|~"T;žh¢ûö¿H†í¸_Z\²%±î‡^aµvfmJ^m¬Qm…^ß¯¶·~3¬Ÿ©òim6«ÿÖ$Ô¡HÛÉñ†XPíRf­mÞ/T¦{1†ŒZË&Ì¦¸6¸ú¼m¯V"…Äk‰µ¥ß€§¾¹Ôt*À\!ZÙšº[tßÑÀfþœIë1íà9Ã”iyRÎŽ”SJq†Ð÷y¢«8—%‘â1Bä¥°6Ï”l#zÛ¸¤Í;Ðš.’œü‘ö™?ËôdºÕÜÚ§ß¯W1a.B…š4áÚàØò"Èµi?[ÀËÖÂÝJ£5ÀZI®!kJ4¾f5~Û|öö*è\Þ;ý$Ã²r_¬VÑd2™L¦Ïj§×¿_Ï¬ç‡ç3­„Dw5ê©L{PXCzíáÈ_ƒSæµds¬å)yïëšµvf­MkuZëÛ¤ÜÔ¸ru«	QâÒ¿£EnkO=Š´1Ya5¨Fµª×ZlNˆlÝb­ÌNöšî*UÞ"rzuä¨Ûˆc]²VµÈ{‹ÜïàöýuZƒºqt¡Ç*ÈÞX$¼w€¶~t9Ö<£ý²üÑÓó.ƒâ²®‡X“- µàQÖCIÂ³”Ä$Ñ‰ÏûãaVÎË)yŸÿúôÓ™Pl¶ê¨â¢¦®±m‰Ý¾Ð9vNÄ ÒÄËK¯Ü–w?´!¡la	\iŒP½œ•ìšºA¢âMrV²f2™L&Ó×¿þÃ‰5´´W;‘mÿ‰Rl‹¥›ö?AtvDB‚¸¥ó*HÉ¬ÑØÈ¬­ûõ{$„é›ÕµX
áU¿H\¸B‡Í$Q;‹W-¦¬+Ö”pFå5Þ*iÁÚ‚k­Ú3µæ_›A:Ž°;ŒÕO´
×y{¯dm©±Ó¶Þ5ê…ÒjÌ}7³¶ïhWÉzÇ8th®Æþýe>t”q#*¬F‡ï»!ˆ¤w^üšpE*ÕÐçzï=°šSîwnš½¤äð˜ÌÇ\?‰W¤O³Ì>»¿>ÿT+åÔp¢Z	ãÊ&ª`Û¬a$iz¾Ò[«­[„5m¨§ÆŽ´s/‘à¤Åjˆ„Üø3ÁO/UmöêM&“ÉdúÑ¬öõù„îjÜ
û„Ô…”c;>²{?ä×0™Ôh%$Ví÷²*-°Ö‰5¨Z	H©kuƒ5ß¯îÝ+ëEeÐY"½[E¢êz•¾ëÚ×dÃ>ð^õZ{KMJRÍÕÅ²Ä²G™‡‚lîrClPùÓ)Vv<, =Ô¸VZ"|cÍZ‰ï°)ªuÃŽÆÁõ„iƒ}'™µà:J´ÁmÄƒ°øŠçäî$Ë"µ'všæ‰&4ÁÆ1Me
kÞb:ÀÁî§€ÏnÊR¿–Ôu${ûÞßâJÈß¯-”åp$ŽÁn6ýÃÚG¯m¬Ñ¡6#8P±ö‡%ÖnÖ¶<ò«T;~Þ©"DZ È¬&°Æ—qÇ^½Éd2™L?XŸ¿¢aä‰*U{x8sùÚÓñù$íÖà/òˆ%‘Xy$‡‘GvB÷²*­ÀZÃRó6kó÷¶¹È÷«»¸H±«.\f®oVW·å.äRÙAjns³Ûš2“b&'Ø‡H!N"öâ¾­é­©5©é¬V†k™5YÅY½½ÖÄvEH¦µ`¬†ƒ=EþËÞä6Ž$QtTS£‚«
ƒFwÆo"™¸"¸àŽ+ZÚèºÁÜÂ¨;èF:†½œøŒN:‘’ªàTlÄ'™™¤d{ºä…ßüŒ-Š²F±ZYwN’ûƒ¡Ýà…gÉVHM„¤…<ÖO‹~€ˆÒpŽR³Æ;iB]›§Wé¶Œ{x+%û«S¥[°Þ„Ö–Ÿ¸^Ãb!!E+z6G3´WÃÂÞ7,gûã,]dqÖ ‰ËÅ(Å(,1-&úÇj5ˆùý¯mV²f2™L&Ó}õá?ß^O§—¨éþ&ï‡½F5k{Êƒ<†¦ñ¬ ªÓ8ÈÉÐQýÕ_9ãËl~®rè ÷œûáM˜ù¦qO`*ýnÛ”ÕTÊj˜eLTë<qO¸sñä‡ÏüÈ$^×Å¢µ×›-¬˜ZKbbrÛ iº¨Ç¨ÓZÁËP’¿VÖ¾>¸
´ÖzZÍ?ˆ·<`¦Á:ëÇ¡ñ„<âjë›	ý½§·1«¹0Þ#Z’Û°uƒ¤BÃ@úãóß"b%¬&´ÆZcf4Ãk4+¯áÔÈ	Œ¶n°¦ú´£5&Š¤Ò6kR¨¨±iÍ°f%k&“Éd2ÝUþxýßëY í|æë|ÂÌ|v<2©‘v¤ösOì-Á·«‚BÎXƒÊ7ÎZ©Ñ4S&ä[¾KÚ¥·÷gOF\£)J¡¦ŠÍÖZ!5	ª¥ÖE-Y Â°xCgrÊ®³R@›;lb­Ýl³VZµ¦‹D	©ýxºÈœÕžªÝÓ{q#ý±~ÁJIø/3Â^n×pT? MŽŽÌ3¤…Ðªš$¥¬Æê§'ý£'÷Ë¦¡ËsÅGæ€åFÉÌ! ëúíÂhíË÷¤"¡_Å†ÚGŽÄ	Í\¬däƒí„[d£5åˆŸ>E0ÓÝ	¬M¶Ú4±Á¦9þfªšL&“ÉtWýþòí5Â>ž1P;aï#ÏûñpjGlƒÜvÛqÏ´¶‡EÑ©¥Rc­fcM¨ )YK*ž6Óø“m5\·£Þ¿3Óˆ;Š­Õª¯| d´ÖtHCF”Ê"›‰µöf­ïŒgÔÜYƒn5ÅŽab½šœª¤“ÝµÜ~¬/Ò¢P­([½*œ÷®ÝP¤—Ë
ûQé½„?‚ÔHpkp¥ï$Ï±‡«†6<³®á©/R!±¤{$ö7#ÙÄ½o´ìBínù>‚Öþn}¸(ù1ÂÚGü)/NÛš­h‚´Õéam¯/ÖVLçøp¹Õô }LqíÎS¹„Ž|äêÆ52H¬dÍd2™L¦_ ÁÁÚéHxF¬Æ°ÆÛ¹ûínÇµjˆÇ®	»ÅPû#Ù4¦ÎZJk±d­Mºtá‚0þdÙ6Ö?S…Ù½•ª¹Æªpò‘-[Ë4E‹ð¥‡Ó.kúLèMáºm­)¯]Ã5!µÇ,_„q;1Ö®|–@µ‹¸öFEE*ÞJl‚¤ïèãE‘[Q:˜l«I´²à¬‘ i#JØðŠ—fØ@gØ()‘þr€·‘ÄkôÕÎ³ÕF(˜ÐÚÂó'P®Æ6ˆ† Èp×IƒDPàÂD¤&°fI‹„µ5ç|N[^WÚ¤8®¤¦Íôäz¤“µ†o@°f%k&“Éd2Ý›ÕÕ¨öîôúŠù™|5 -^èéþ@¬F7Ü`m¶tðÖhÕ{VGžDÖ&Ÿ§Š’¬ŠªÉ™—2Ž_EóFÜT±¾«ÂØb­Ë²û I©*å´„×œ®déâ„ÇWµù&Hèê.Hm40…£Ä=IÉZÎWË;k8S=Ê9×Ó?Ma~xíëº /evÃïš#v«QÃ‰Í6š«
elü°Ã:Ni€b"B¸F^ÅZžñ$o÷>ÔÁ³ÉF4edñ-Ö€h 3ø,X‘ŸFÒšaM´Z3¥)«)­}ýðÓ"¬Ó”Í¥ K-zjÓš„3Ä˜®UŒŸ¬gƒÉd2™L÷Öç—o¤¢±3Xí…JÔ€jg‚7rØÎkû'B÷´ä]bãž–DkCvhºœ³FªRgMû)«r–«B¦t+d¾1¶šktd­µˆh:©ê·Z-w|Æµ.æÊãÚ4Ýˆƒd¬œPM8»š}x‰³vÓWƒ™/YKª“M¼+ËØnS5¶U!ë x»šM´”ÎØý;Gl¦¢âåqhØ ¡ë=þÃ0lc/É$Ké·öÏO—BWMaM¼Â7*X[ÍŠÖÖ,µ‰°Á:ÅÈ1j¨)¨aP\Ãk²’V
këµ•¬™L&“ÉtwVƒŸöÛcü#Ö§Ó‘š«k;2ÕÐ{;ŒT³Öý Oâ°†Æ+¬IxÿÖò5k¢9ªaÈk9wæñµÖ
=/¦Œb€?¦µ+éýJm"§³¬æ¡"<âìâ™ßçë=±+Í‚Þä-‘PÞYË}o?®Û{ UÑWÛ<µÎ…ºž`mãBà6le]ûP´“±ÖhòD[¼óq`CZç¥Q6€lÀ€^kä¸É¸úÐnÂ6lñÿLÈó~´öáë§[ý°¥„‰–k	tÇŒ‚5’°­x\£‘NÈXmŸqV+¸qŠìÇ(-Äi"4Ä®Ø 5éÊ¦l÷o³UM&“Édºcäñx~eK; Ñû|š!ÑûLÇçÃ¸?íPÃ³EÝÚ0BBïý¤ËÎZ¤µÉ£)2ÎÚÕT
ò £_Úä˜¦¨Vq¡§š"!•|Å¼Æ$R5‡¥2š"ŸqIê??Ž¤–‘›|ÍšäXª±Öâ¼/’—újYo-/µvS8Ä‰´“×VÔŽÅl>¸æCEÔ†bµ2¨ÉÆùüÒåš¸­ã²5zÐ÷œ5â;ÙêØ‹ÿ& × ÔŸÆ~Ä^ßýÈû(;Ô­-rä*õXðŒlµÉZc³~Kú&ËRaS­ÃÚramEþ)ê M$¦MÏÕU«MžàeA5’<·à~“Éd2™îÈjÏÈa½"òˆ(¹§aÛéx<îÛíñ¸û~¿Û3§áÂ•Âš¶ÄNµ‚ÎÔ•¹i¬)¯=^rÖîlE’	™¨•«Ò­YKU*«ñQRs2&Áý1ä¿¾h¬Å’¸yvN±ËšØj²“Sµ\rNOßé¬aÈ
ß¹­ ©ÞÉù# 4tÍÎ˜ÕÎµtç@mµV±5=m
˜Ê¶‡¾(;I„”žÚÁñ­šk³]Wøí–åƒ@\?,¡;öçïÈš`­@iRÇ4ÓNÌ²$÷\V²´\XãO™N| Âb2(œã™Ö&Òï¢7ÙV«‡¥5ûüM&“Édº›~?ÒüÈ‹`íÄ7ç¶>²¿†öjûÃóq¶»ãA3ôÐSxNjygm±!6®´=×Ísòà	sömé—Ü7d$E¶$²Pª²ñý
R¸’vkŽO=tÐ”FQ.S¬E/ž©Äÿ›ð2‰íW‰‘ˆñ;:×]2ÖnH~âj¥Y6àmC“+Û2tU-’EÕ:W”l´yÀšç\HdòÃ/úÇM79iüë[nîúžFš…ã|Uâ+ö{ºá:Ííö¿Ÿõj¦¯·=5ÚÈMã0wqÕ0¨ÔvA…è_Öy1yŸ©4¶_(Œ‰iH¶æGâ±Éç,Ô69mhâ Hg‹&“Éd2ÝM¿•}CÁ
Õ¨rí|Äüz:MŒF®Ü6¢¶ãáx$F¶‘$ÿ<ÂZÕAYMÛ¬)­Ek-Í‚då,Í¥àAlæ¯=^ù’ûäŒÌ9m“	„lé¤+Þ_Ê(Gj­9>çýÔøàgòˆŸê›+¾9’Qsc­ºQµ¦]ÖäS“±Š^!k“@÷kúqXÛLÉ"e±©Z^ò¿ô±š«
ücz_ÍVâW©ô0Í8UÄó’«×zÙçØ»ÍÖ 	$]˜2#c$äH–œsø¢m„µ_½ßÚ‡/ßã²L³šÌë”ÔÖ4‰‚f‚\2¬Q=foì'‰StˆðJ%®ŸFèŠöªèÁ~L&“Édº«^§†jDd'‚5¬Ùi;ÑýéÈÝÕØl£IZa£/6p&†Èj>°rmÖ"†´ê¬ÝÌ‚ÌÛdO"Ì±g×gÃëéÖq3gä’³6M”ÒšRSºc1J!mŸàRd“SätUo|¶lÝrÖh•~‚‚i7ÖTWQí¶Á†…÷kíš5z¯µ!”›"t¾t¡âp:Øj^À­AáÙÀ‰ýMXc,5)Z‹×„'=µº®ýÚ´öå¨­ø‚"žIŒ”ø/“Ãá€Õ–k+8ª ¶ø?ˆi6%p!£ðù
å‰´ŒÛciE÷¶Òd2™L¦ûA"Uä™°ŒaíâÝôp÷LÇ› I' Ûá€â5´X£slÆm/13Z«YÑYsc-×¡+ÇKWc)ðôSµ§÷[k‚kiclœ;­ºVo¥Ø½¯h¬EÃ96}æ°b9E»Õ¢a§ xµ'¶þo”|í÷Fó|œWÛ¬åmµk¸–°}÷v£7ÈñÁµk®Bb$Ý²ÝèaQk§lìƒdü"Ç,$úÃ=kè™MëfŽk{’IÒÐ;»†ëÝÆ=vB.µY²¤õënÈ*º}[³ÆXÅ€÷¯¶n‰°¶ZÅ¢5!¶¿¼S™Ì™ÝVl­=¸cÏ+PM-×O+~¿ÅË˜L&“Ét¯pÊ§ÁZ“È~M¡{<á‘ãaG!‘;êŽ½ÛMÝ°·û¾ëû®ã¿»™³®”¬µPÆ–)¸Ô+_Þ”ë¤ÑmÓüsfœ.ÀBÃãÛÇ÷­‘’@È‹Íª
G¶5ö°Jå”Óô&&ŒÈ¬	ÿ¹Fk1eR&åÃ2o¬IGìYd™"wª”¨ó¬Fg^•‰*Š7°VT¾ñä¬=ÑCº+]èzT©…²Ø<¶°Õš.T¡'XÛöüÛ:=kcèá³5-‡ž@ 7âÐ@¹!4ã~¤Ö µ…¬¡xi%»óöGÑÜ4&P M@Íê•ï¬­]µ>‘?±Ö¶Z Hü	¬—¦|ò…ö+`2™L&ÓYíåù°#X;±¡vž’E^0ðÎHš°Ó¨ÏÚ~‡"6Ä‹Œ,ì0#qäÊjÑYh`ˆ6Tl%;è®8kÊiXD%7r]vÖr¬…1§§÷ûoyTkcxÿ„=mÖY›åè'aûÑZ‹¹ýb¦aÄSFÒR7õûET“#kÑý›3bZbÎº¬]sÖ°Î(FAæ[cGU µ¨¢
/‰öègÂh5[½](Š²h¹Óš/ß0™u4r–ÈVPl‹8Ó6ø‰Ú‚²è®(9Žh¹F/í·~^fÁ4Á)þ‘Ð42ú.¼GNd¨/Ö¸¹ÞZí4Ü ar¬4JÈ¶ái.	†/¶Öd2™L¦»è÷ívÜžùIà5vØÎd«Ñú…k×Ø\c|Û‘¥ÖÛýÐ)¬É"ä5EµXÿ$ÎZòW~–„tÛ/¯Šîœ5<{§³†ñV|¿NQìOá€ÔYK­µé¼X´F×¢‡bZ­}š·Ö4dJš¬•jÖ”Ó¢·–tYÃ„ãÙ>^-X»kôæw.°³¶‘7Á;G¤Fl¹qÞU€µ&ô‚ïIM# 6ÊÖÖÚ­ï±R]'nÄjMå*Øüó·…¬¥’ÎØâ±)›­¹›Ò†Èj¶nÑ°†OÄÆ†ÎØsXÓZV¨P¤õTÙÆÍÑùÆJÖL&“Édº“~£nj§ÃvOdöÊ¤F`F-10¹ËwÛÝéfÛ#pŒ†¡é±­LRgm©TKµ"ñb"0	ªÑðˆáºðU2¼ÓY{ü'-¢á­ÆØª¨JcãhYU>À?ßi—"ÛÄg‹m8£Á–V­©b»†j¸°TRã+*Öç](Y{O$Úªå¤°P´VkÞ×®­
òÙœ•C§ìàË½âê:xÀÚHb_¢´)QDñ¬Ñå~÷˜î¢´ÃXõ°£êÍ?>/¤`m•y´&}¢KïuïãzMK43·I( °š5Ã^0—ÇP”žqXˆpYÌð× ¼,õ”Ù@ïâ²ZÉšÉôöÎ`7R$	ÃªiË­îµV3#M|AHA"qB¸qBâŒ¸ð<M½‰ßÈ±×?‚èÄ©¬{l¹º¬øÌ„ªéñl¹¥úöÏøÃd2™®¢/1«M«ô¿~”HÀÚ	ô† Ð‘Úzúßi&
‡œØX–y†^`ŒL.l‰¯Y‹Ç‹\&¡‡+Óáœµ£ÿƒŽ´Â°ÛYæ\‰ãZ³@ŸXz¿Ê;k¸"ÖÉûg4ú MÍ5¯Àb‹e÷Ë
|AS5RndÅuväå$ÈË°v•‘t™Teâ&‚née’”y…
¸4/ZG@Ž^CldBor’ë8¡V Öêzà@ï­pé ÑPM×u=.´ìè¯Ê´Ý/X·öåÇ‹2ÜÅVS”ãq×ßçõKüÏ®[ö5ýÖ5ì~ÕX5Ó„ÐÁhà„ÎÕdë$­°ÒvÂšL&“Étýù¨eiúÈöjÖð¥Ž¶õ´öõ@þëŒø……4÷’Ùv]‡Õ…6kÏƒÓ`$†½ö¥Ãë.øWÎšG4hW÷bg-¾Ò«ô9#¸aTÓË{_:y_-pÑtÁ†ÛÛk-î¬Å3F6–Ôâ:ÝÃÉ“ÊÛÅè~Í‰‰êø:eY“gÛ’’ª¨ò&ƒÍVfiNÁþ”ŽÿXktŽsEùPöƒtÆFŒÿÈñPwã 0ët?$¡\'¸Öµ®.îæ¡ëæu]Pèöëõ[ûíÂ÷÷ûÃÏÕ3áýl‡DÞˆš-ÊjR¾twg¬ö)œµ8bÿL;¨Ñõ³Zm»Å“°ÃÚ½•¬™L&“Ét-ý±JiL´-¸ßÚéI“F¨V0¯?Rä<Ôm7Î°Æq™–Xh6Ü°¯YÛ\µ¸³–†$äIé5Êtæã…Îš7ÐŽJe<ã±\ùußˆsØRø€²0c¤ÄÕàŠBª×:kŠ[ ° Ó*ždð¥lUÉC¬-öK5Alå´sØ;Lî—1žó6PÓ,ÿ´Ì~®‰×ª¶ÈÓŒ7(OKŽ9¡ÙkmÑ›
wy–å=v>J‡À®'!Û¿—vkb¬±ÁÖ•ÝÌÈì¯[b·7Ã´®ˆ@'ô[»¯åpðKÉŒ Q$¤z‹ƒ|…—"6Mì¿7Vû5kˆüT°¦T.Ñýâ­ÑiËŒüÆ;eaµâ´_“Éd2™®S°ö(a"@3Zo±éz$*›—Ó
x[Çeé‡¾­ç¸†ü~Z!¶¿mù+o`¬‰”Õ¼³kñÐw¥%€Ñ[Â)cé¬“:È[÷ô†µ_øŸî¬³–Æü½0ú”Zµ(Èí/•¶d’]AµVžÙô)+‰…Œxgíl¼ˆ0¶€å>dÄ„;æÖ)¢‹Q¯˜Z—ÈëÏ][¥œ(‰Ÿ€~°¼(\å\R´¤
»ûºhˆã:vÎèà|zö%Hó§ç¬aÄ¢NÅ0âMtÑÌ.[·¬µI½L}ý÷÷›´Z¤ûg­°•Ø¾êH’î†³R¥Oá¬sÃ>P §%>gvS}$:i3ÞäýÖ»Ád2™L¦+éûÊ-Ôž$­ÿ„*I;q£5àÛ„¸òÖ?NSß/ph¸FÓØ³«Ö"Éý
kÏÂ ÃxQÐc@
Dï!A15ÐÍdTBó#¦˜$ËPþ´ Ø.Zk2z?JŒ5Œ$šµr- 5Eµ ÛTêžùYzÇ`š_”{kÍŸñ¦ØÚÄ[ÍµHÉš]rÖŽ2ß ÂÈ¤u¯—ª%M^–	Iì5¤òu’¥ÙÃ ²Îš«»ºÁ>Ê¢®qfÛÏ²ûÑÕÃP×}7/‚j0Û¦e7 aÇýJ´öýµN$Ú+µItpÎDcµOà¬´5v@2²)¬ié$°Æ}×8Ð_Y%~·]&“Éd2}¸¾ü‰+Á5¾CrD–•ëÕðpBi±za?M3­Ö…,ÓzZ—e‘œ<Â´¶ï¸vÍaÍš§µ]Ñø×¥à~@ï&Áïšy-úÞ¨<Ò½¨fíl»5°Ž¸‹PÔYS`ˆ¬åOõÒÔôä×6`+ñòÎ‹SRó&eC™BVÓöÝââŠä@zVÓ+ª˜©ö&Xƒ²&'<{àeÕ:² ]Š´nEQ¥®îa7®ï[N„”pœ~ì›cé\×w2Ò£g6æ®¥¬å™\Ð6ôI9ÌK_´t»IZ»1V“ÉH šöJ¯ñ+b­!R`Í2û?¬ÉvW†3¡4HËyPÁVãÐ;<¼³]&“Éd2]­ö#	ý”Bd¶ò6Èu:ÖãÒtÀÍ+mÐ4ÏÓ43kóX·¢¢ Ó‡Aú’µ«]•#´öêÈ_Ð¦äõje8Bg-BjñwÖ4^¤Œ7[S€’“UÆÒÃˆ‘ª|ÞoM/Qé´FçYgM<EËÝ6ÎXl?„é´†ëMzHsúù2N‰$>M*çãŸæÎ%®¨²¼FŽË“¶ë\“V 3b5l‡,Ò„ˆl ˜ƒÈ!vMÍ1þó<â!Móˆ“^,‹¡/`ÁÑ_b>ÐÚÍABi­F¾‰¼åÏEcFÐ^K`í‡õÖºeXÓZE1Ò0j†ŒR8F~5¾«)Ïñ[qØ.H“Éd2™>\ÿ]Ñ=¦`mé–tzD gA®ÄeËDw¢ùô„‡XMK×öË‚¢¡µg]Ö‚ì~¡…ý6H-{RÅµxÉÚû+{ƒO÷8k—»­ñ¥jpñ¡Ë¶nf{å¡³¶ÙçŒà&ì®¦Ïy“òŠjŸ.âÙ0žÜ/Öš&(ˆˆñÿ©=ËàŒðÚ›i¥u©ø)ÃZÆ­Õš´(Ú¼Â¯iB¨Ööu“åmO¬æ’V;×‰I©ZW•dÄõ#ÝA}ÏÌV#]U‡<NãFrHð¿Vãú‘	:Ó¯ï¾6/ŒÕnÖ4°ÿ°eÊ0hgŽ’ù
H#,Rãt ü=Mw~Ø.H“Éd2™>œÕþZOl¬Ñ cmæÁ`£5j§uœÝè!±hm%X[—¾¤é!`¤îBXµ„¡ èˆí==b%N‘ýˆG\¯©LFœ!‰x¥A|ˆk>[H-‚k>SÌX‘±åÚßâÔHÈ ¶ß¯ÏFŒøÌ~èy¸HÌZ»¼2â¬áz³²†~púÃ±j’ªÌ2Ü<dè´–¸¶®“Ôu.Í›{"«,+:IÆég„ˆðÞÇ¢IPÝ&°Fs‡ûjt¶í@@·¬ÓÀÞÚ<Í¿­}yÕž¸ûŸ¡€[Ë5^nq¬oüä›±Ú'€5 ù=š(Dßº¬Ñcæ4ø“—=Ý«±¦²à~“Éd2™>ZßÿZVŠæ_&±×Öyž3‚;°(b¤_éOçIŒ5$‹@°$:rÖÈÐ*­ù€‘}Oì2ƒg-È‰ë!ô^ÃêêÄöOÎZÀkªF§†$´¦Ukqsm_cÙÔ¨OÂ¼ÿ§hËí;k´õ 5‘à~ùO¾d¬Em5o£ý¶H\Fd–ÑM“$MRŒ]]“?f£H¯áW˜Û­Æ¸°Vƒ°š6c#á	Ú±ÍùÊã4!ÞÚ¯Ú`-.ŸàN³|‡nûù•}3_¬^íæaž/Ôp‘hÀê@°¦•jòÁC[¶Œ:®˜­×žÉd2™LW	Y&2ÌP©­ë:!E„«ÕN§'¬Ð{OO¸9‘ÈW—iEµ‘	·ˆéˆ¾‡µJiM5åX›µ‹VL,à}›Ž8¯NjP€"—F0©|»²†UÊÅ5õÔ0ò Òp£zjj2ËÛdÒÄs‰Såm¼­	Sò(Î²x›µ¸±êøÞÊr'õkX§YS´.ÉRW¤IW´C‘4«+zžwCƒXh†g81åfa7Ò"¹¨Ë0®Ó²,]umZûí?¯Cµo»WXóM²ïÔdV³ïç·k µƒÌŠ^š ‰ò´ƒPî5 KL4oÆ3cÍd2™L¦ï†Í› 1¬Äf+Á7Z[—Óã´§‘¿X›ñ–''l•œWÔëp7lr(z:ï½±¶)Ø	•¬fï¬½ÈXåSÙ «b¼iXÅ$Câ!äµ¦‰W­AÞïò…k=–È€ÃÂißú(È‹ÆZ~.cD÷gn!žqgmOkKÖâMÖÞØ²2´çuîÚ<Ï›Ü5YÛ¹¢vŽ¬µºu®­˜Ì:„BÖØñXdi;€ÓFR/°ÖóH¼Öwt3O¼ÿq©kXlSß òv:niÑš 
k÷ 4ÙGcµÏ‘¹9kŠåÒûš.¦°¯kÂg´B$Þ§ ¦!ÿÜo2™L&Ó5ºa¯Xm¥a^ÖØK£»uE@$	·Ë
ó\w¢dæÀZ·µÂ.ê†ÀX%"áuÖBk-Óã<«]®oº~ÛygMl¦b¢!µ-¶škq\–R\‹©Ò}j­)·É+t©·BîG9"[!¹`í9©•‘š5õÕ¢%ˆžÙ¢zgc­I-’§nM‰*/\éú:qEÙ]×õ]áêARDH]Q5eâ\UplyŽWˆÙÄ\ëkz@ z‘èO’büóË±š÷\H²`Ý‰£²y-¶ïí²nlë+ÙkÜ©áîÞ7ÐãüOf5€Ú5rÇT§ò‰‘V²f2™L&ÓÇêûŸà´'Â/ Ø´eB2¡­ÓºÊâûÁsÓ„&lAÜ2¢œ§CK`”òº–`­“ŽØaÂˆ7Ö¼[kÙÎ™‰è«áPýq#{ÿè¢³òZ#3È3T°oQ4¾0%|aÔ=‘Bmeå-f¬éˆ!‚j~ƒ¦òZ©¨ùÕ‚ÏñMó¶Oñý„:b§Ç7MƒEJ:°1“¹~¬]Ç˜&Û[—7Ç¦Ã~H<‚6ÒÒ{ÛˆÕ¤¤	©t.ÓB×:ÔE¿€ÖnˆÕñž„\ü]š!oÁV¯ö™`ºgî&§n4þSâ ±ÄB}56\ñ˜aÍ‚ûM&“ÉdúàkW¬="¯ŸØŒ·:BÈƒœ&½‘¼m`5ìýº‘Ôw5	Az=6qg-ÞfMÈ$°Ö^œ-BgDúêñ*Õkg5õÖÎYkZÿå«Ö°€¢uk!®í,áAÏÜC[$Œ$’Ý¯@ÍS¼Ïš'5‰²ôÊþ©%ög>ÂZC
d–ábÜ¤IŠ!¯þý,1Umíªv `ÌaÎ!ˆ¤ŸMƒû;@©Ã8#$r^'”­qÐÈ²ÎòGú¿¿ü’¬v8DŸn¯ÑEºGÔïv“`@Â7
j·/ççukÍèóÔvçÛ¦Fº˜Å¾Aì¨bÉ‹žÕxC¤÷›L&“ÉtýqZ—•sE€lpÒ$P9"«7Öè©vÍ^—;ÀôžÆš­«[Äž·†÷;o¬°æY­TX"ßC©nºTÛt­Ü"XÅ•†¼Öxf£ck]&PA5ß¯gX¶æ#}\¿ï÷ùýAÎÈ¾+ö…6k
‘`KõyÞÓZ€kôøš5ýHS‰ÉŽ€µÂ%Uá*WäiR4©+\]·bµu_WyS¼i²„ù“P¾6‹³F¶Ú$°6áMè0¼µ›ðÕB;|#>ãÂ5Ã}±7VûL°†ú !$¥mËêÇ@K:µd‘ÄÿˆŒXÉšÉd2™LÚJ{¢J4éˆMk½°’ÖÄ_£W‘R¾ÌË„NÀÃ´ô\ñÃ=«j¢µ¶=ßfM¨Àï‚|î«e|³b…^‚jx	#~|ol;^ØyTg-š™ê±W³ZÓÒµP¹§µÐ\Só˜¦Ø†Kþ]ª°XC©C,`$Ýjë0§Ï”EªÓçœ¦Ë1Ö°RæiÉèŸVEÙ¸$Oj—¥I~l*2]k­«ê±sÎ¡*m‹tÚVz­Í}CmžH0šg‚7ÄíÐÍpZûþõM:¬ÝÈeùzö[ ·ßÕ~u}ÿñÏŸ­—¯­Þ½o€¾Å@Ò…€L°V}íðÍ
M&“ÉdúèÔþ•˜LâEÐEiâ5¹AÄ¿²Ìëi×`°Íz¬‘Úš¼¶º`yZXM`M$0â¿ì_¨tbHË¢ÌYXÃ´²x²i/·£òoMç8®)²E¡‡˜Xñ²5>÷¨²—·ÖxÐÕyÓIVåË5ÏkZ±¦Äé´†óœ³×Û-´(¬A÷ÈÆGÐööÎ`ÇQ$	ÃãîÏÖL«5êÙCê‚,!Xâ„8pËg”žÀOã7é7ÚÇØëÆA(q*j5SXUŠHL÷xÆÉŸþŒ?Úü„ÿ¼któåå„.lutö‡»®ÃÅ»F§®kÌý8xdöÃ[›</“DË5º˜=êÖ>«´áÚñ %JZ²f¬öña‰:ÃÂÖ kò)KÂÃMhT^Ãù(a$Ë‚ûM&“ÉdÚW?&±Ï®Xy™/€6µÑ®(r%Dsí¿,z
^‚sø½*µ;©ï‡Ñ÷%ÔÕqKlµ/œ5õÖÖÎZºb-¥tÑÚk4Wj“çoÒIÒ°³C°òâ×ÓæZÚYS%1­]‡÷‹@jéuê~®Röâ=*^SçB£Fn¥××
“Ñý8ª•³V%¬µà¬aŒ@MgwÉøoÖfZÜ%;¯ðžõF^›3½áçNçF¾Íu	“¸i±Zï€iÚp0®¡±qÞÞ¬]8á~˜'ÀÚì$øïÌj‡cå°¦Ñýüp‡8zÂXí38k
kdš‚ËDü	/ñ‘óÉUãW–×Ô{ãóó÷_L&“Éd2í§?ÿÈj4r¥.(.$÷ÿXC)Û4OÞ5ŽÍïQªCêñ£¶éà­u%i£d-Î‰Cÿ¯š5Ú·¤/+©½$ZjË<ÝªM/W´·ÜØÂ5V×B“è°Ej×½Ö¶5E¶¸”×ôkMÎ7<.Â
Hl:k'%mÝ·ªmkfïèï.zL‹kÖðÖªJé,/Ê¾®Ê®ÊX+]®ë3ûj={küMút68ÏÍÑÙt9 Ö&4‡'zs×°Ñ¥oš¿v¥µ/¿o€+áróÉ£,€Ô5qVžôÚ¿Xñ<6¶KQ¢Æ:ÒAS~Äˆ“\-ÂÓ,Z‹šµ?~1™L&“É´›¾«É
ÈÉÃ 	2ü1ÒéråŠ5”†âû'È÷nºx×óïØ¦ƒP¹FÈÖ±'‘fµlå¬-ÖQ¨YÛ¶ÖT	ŒÚ–0Z0Ø ½#óÈ;£A0-â>ÜÙ²Ö6µ“²Ú]kM“+ñ°TAJkQ»µ _2ž‘Ó¯»&Cf<Ç˜’òZT²–¨Y[ÇAÒ”+°Ý5Ñ}RÃô‘8M¬È²*_îee›¹®Í[z³x©,ÏE•Õç¢¦qË5Çi"Î{×ôÌj£‡Fhž¹nm¤W{GW€µÙ»nWZûòÇ=
Ãý#ì°â¶X7éýT¸öÌ¶ŒÕ><¬ÅÙ"GIw½®¹¶xjª…ê5M„¤«ÃÑ¼V“Éd2™öLíÿ‰`XiÓàçi’XHºÄMâ4	£MnšÆq¦ÁM?¯óÐ ª¼éXbªõÍªd-îœµ¸#vº)öö¯zìoQòYå4>ÖÞZT¬&®¹ç’·-CLjÉªµÀ;ÀŸÀjÉ•a‹C!Óõka×«,KðÝ±†=m¬……÷FHMïÛûÃZ¾‚5”©á*ç¾ùò:åTeõr*ë,£wúBÿ:Y·yàœ+2û^ÊÖú¡§ýègf4f5¬¦ë×¼Àš'À+;ÐÚn¬–’”¡ÑÎ=µèÄÜ^Ö‰ÜC>»ˆíük~ü1ôíÍ°Fkq×€dt‡5°Ž„ü•ÖA¤zí‰&
kø.Ù*H“Éd2™vdµ?/ ±+Ž	±!ÓèAk|“FÉ¡—1áÕ‘q.“÷pä|Óqw5U	%ƒûEkgmõk?Æµ«½kÆ»rœ¨-»(Ä”è…>»5¢¤¶e­ÅjiÇ^ƒ”Ö’ÖZ «k
)l¶…tÜJkØx
–¨¼GAíÈZË±m;k:Më„µð9µå¹b7]ÈÐP{Í³sÝµüªmQ±–z½#`¤«²Þ9L‚µqôjtÞ~I4ârBÛØ£‰…­=Õ°¦‘LW°vˆR'h"˜¶¢8é¾u´õnŸÖ ý¤ñ¡Ñèú‰sFà®ÉŠHº¬1¶IÂˆšp¨f´U&“Éd2í›ÚUqá‚+—§	²I ä„²51Û<ÿD'rðG¼kº ¦‹² ã0H‘²Z¢f”¶aRRŠú„¶#?Ùj7 ‘#ß¯ÖZÚ*amŽª[SŠJ¬„Tez’Qq¯£UYDjJ€²Åj±k¸oU„jr’MöXZ¯†#VüÉüs[°ÙB]n½Vu–¿¶ç¢<ã{ËKIÍ0ºº¤Á¹2ëê’y­¯ÏŽí4× \“¹Œì©y:&È;×9×øhí‘«à7°&Œê§X£+pmtM¦pö«üãèû›kÖŽì¤=ÉbHÄ@Ò½Ð›!]3ý	Ø0SXÓÎlß-¸ßd2™L¦Sû¯W´ÀÆXÃÉÏKp?IŠÕ¸¤×À6ùy:KM|\5l¢šök
 ÕT/	#f¯†\À„mrS\[†­u/wµÓÂBÈuáÜ«(2U´áZ"R½µˆÍÂ‹r„¿KOØ1Ä¾Zè³¦ï5(`Ú¶³¶]‡øò.‚¡¦Î<ê¢.Nd»e”6’•uÖŸ!ŸlÖ•n\]œË®DÚéØtg¢4R“õÌf2ÃtÁÿ‡ÌÞau0BýÿúúPV0á2%Ìp™|ìˆGh?bB×ÏOö£ü£èËÛamÁ¯A# ·gˆ+Ô$Z¨F°&ÝÖðÅP=[¤Éd2™LûéË‰„µDlW mšpÒ>k˜àzâŠÇ.Lj³'[F
®kPÒÓ¯­pm½
2 ZÔ[Í™[gÕVi“dƒì „Ç°†ó––7›k'=ëKÿ›`(mÛ#²É¾Vè¦„l‘€k‹ 755Ö*%µV†HwŒµ×Õd7‘ß¦Èì¬µ-ØúTTm[vŽëÔÐZ_#ù±ÎØqsh®Ö»•jcWÇIéqr Gš·¡“EAÀ´sïOk_â5pºÖîÉª½ÖÓQgQ‡dºƒ0Mšþf¬öaô°öFÅ"[Ðü€º4ð¹TªA¿ÒDDâŠG
ê¾ýb2™L&“i·EÈà¿¢¶ $^píòÚØ]»øéçÅ¡*Ç#QaptH*çh­TV]ÖR´,šJ"êUBiooˆMûCš$õ†šµÐ<ZÕê&]±…ÔîÒÚ:k_G5Ë‚²õX­L·øé*ðc ·b_MËê”×p¼ÑXÓœLÄßü?å2…Z•uuÊñ/}z}=;¨ëøË]gçºlÊº¤\Í²GÆaœÃKeÑVÍ¹¡;¾/é±æJž%´¶3«a­£®}ÆCš$Cê
ÉB¢c`Õ>Q›5%rÌž¹âA™Ö d‚Ä­Õp1¼+¬ÙÃd2™L¦Ar^ÿáœÁb“Hì˜½MþŠFØ—‰^\ÏÕôk¼XŒö>ÊZ‹ƒûA·ÎZ¨x
aoi²Bz žÅþšœÒÒš5l±ÒÎZ{[¶Ñ˜N)nv…,•öPÃ‘è»®"ö»ÛgMðQãEtSÅÌÑ÷_àaðÿ‰yNÝÕÎô^‹¢hÑ€2‡¶inh²,k³²é‰ÞÊ¢v£ë]W»VrYd}ï¸OöŒñÝ°68ÜÀ_0Œd¶uÍûÒÚ×oéR5¥/5Ø0Wp×Ú/9¬#‚cwÍ
“>¬©¡
ƒu5ºÇ<†$¹|J;bÎÒ­}·€P“Éd2™öÒ‚2Â42Í˜Õ j8˜×„Ýró•¬¡¤"ÿ5;Cß$:5=€µ.Fµ–ØŠ"mbéÜÛFl«½lÇŒ(¨Aéüþ´µÆ»ö[kOj¬aK¯„Œ!kÅ`qíš(Ipø“ñHAµ­	ª….k÷¬µ<kØHûújé6ÚñÛªÍ«¢"bk_óœ†®íoÊæ1¬´Š^ µ¹¾X®¬¡å…ozžø¾çÎkÃ0úÁOž­íÇj‡UÜ#INKIÌhRª¤íÕíîÀjÖJë³µYX[ØëÀX.h.ÓÙSðÖ~£)<5)h{RÙ*H“Éd2™v\ùN€d»ÖXv×p’PÚi`îÏ£G†ÂÈý¦ŽíGÉZ£%k/RFÁýš_qÉÐFÜ{bÅœpÒca›î	å8M¶—BF…ÖØ!r»ÛZ¢ÓZƒ™úm1¼Uqäª)vÒY®AwÒ Ó&iŒ­-ÖöP®ö'ÂûØŸeyÕQÇµº<7®ošºàx'NYY–çŽf]ÝpWìÑÓkÃèà§¤~äÅÁ4x2ÚpŒ#ý%ÍZÛÉRQöJÜ^`èÆ—~T<:ŽK!Ó&ßŒÕ>_rÿÅ?²·z”r5–4¿šÑ&3€ÎBïÏ˜ð×Ã‚ûM&“ÉdÚ¹ö…Ä©ýäŸA¸ƒ2GP±Ñ=:ˆÒ&œ'ï§É# -´X‹ÒE’%k
¡ÍZjÖp@wß'hM³=Þ[XK+í¬A[Ö†JNóÎZšØ¢”‘¸h¶4Çé7ÄN¢Z€l~S§€jAikííÎ³ïn¾IyEÖÚ©<ŸË"/Êó©Èš¾«Nu€5çNóz>ùÙÕFÐÙD"xs~9Rr"¬Ÿœ‘	¹«i-íÏUGcYx7ñ0ÖÆÑsÆjŸ-¹_¥™3O"5b5ÉøNh´ö$ÍÑ×Æšy®&“Éd2í¥qÍˆÁÖÌ®œ±±†	F<H¾§A¢!6Òòà¨5ªÅ´ÆŠX-ƒ¼-xÊ±§ãÓ™”BÚv*d@“”¯ñZÀ5Ùy¢5Ú 4¦ašn·–­9SDJÄö¯+âbTk10­idü!Þ¹Å×‡~¨¯ë3Þ2ü³¬ÊODl§¼tKPˆëi€‰V·ckó<ó"HæµÞ/‡¸Š^ä]?Î„u µwo…­žšfI°}¦­±a7“@k’îÏ”†á™žúÃª’>Wr¿ê 1·#î»kQÀˆÒº®	Â- f« M&“ÉdÚ7	’W@ÎkœÝ¯l†WpÖä!:¦Ñ#‘žŸ<	¦Ao­Y;kQä¢Œ±ZhMu/^$µ’Ç‡KYMl¾X79õ›ÖšAšIÚ°Ö
Ý°Ë‘l8-‹0.K¤ö'5•ÚjPÒY[³ZBŠ¯é4È—}×·êG·(yæ¯m‘µE7­ïéè@k4-Ný8ð]þaäóˆîƒ1APj?Æ!r"=G¦ºú¯ßß›ÕB(?Ÿ4` †ò4öÌø÷:Á3	œ Çå
ƒ±Ú'Nî_V½>K#5ì8Ýè -È¦÷$¤¶‚5[i2™L&Ón‹ eáãAîWáB`M—F"­aä°6Ó‰cû{¶ ÈW#­h­PZcIüûÖrÝ°GJÂšX"—ºk4DŠý¥cë†}m­U7)þmÔk-3RE¤–êŽ¶ÖeoÕVOìJÂ oò ±+ªÝ‚÷)µEw`ÚõÃ“•ªåí¶DhNlµ¾lhÄ"HÄDrjÓõÃH¯ÃF¦“ÿ=ÒÜ8±æ™ŽÁyäDåÁ[{ïHiq¿ºfk€6¤øãüüŒg™â tòÌá»ýÿtaªÃ# [ÁÐ­5\€ÛÄ\;è£¬#E,%Ôd2™L¦½ôçteÁQc_-’Ð^¤ólxYêÅ=9^	æAMº#vº'vjÖ¶5h«!öã%„Aç„Vd²m­a¿Q µ¶ÕÖØikM†h%c:ù1\Ý#6M|‹±¶Û¯kÎZB0LétÓb¶S]#8G¬µž-äÒ¹®áöi®«9y¤oŒýÐÕÃLPæÁgÖ/Àægœä’€ÖÞ“ÕÔRSÖ0²–È~&³£ü×ï.ÂåLöcü†Aaº‚5qØÐüZrc‚“l‘g<Š:ðWä›Ù®&“éìÏŠÛJÅñÌÄ¹“„?0o„@I­„ÚõJ µÑFOà§ÉäòFÃ<ÅÌò«Så¢å¦£˜ÜÄ×êHêÖ'wÌ8àß=]§L&ÓYtûå›9l­…°&™ÓŽíÉH›ðJšö»	þÚHcßbTJÖ¢-±_³K¥Xf5ÕÃ¥h¡p-pÖb˜BkÍÇŒ°iÕZD9Ù½AV¯ññžÜq‡µhº¤¿ºy
ö ÔÓkñšµóÇ‹Ä5óÕR9GÇì<M«¶hkð\µ®.ê¾«ØKstÑav}×‚æ’²›ÍÆqèÞNÛáš›dOŽ^ë@k×LYq›4¸f>R[qü#ßÕþÆÚíN“ ß«½¾0H”%z–_Ï
ÐØþ9’zlë5MóÜnÑvo¾«Éd2™LçÑç½ÂÚ´#iÉŸ=>Ò(·'!ÊÿÛ!ön‡ŽÓË± LT´…—'µyÀˆ·o ˆ5gµ…x‘ÍE±ZœÖô-èå5ÿö½8ÄJKì¼E”Ë&’‹ edñ´ÄXkrÅÃ µdM¹Ò+‹¬h§A^3#ÒO“Ni¤9Íá_Øœ«ùóÝ¶UR8G¬F7™ÍÄq]Õº¡«ªÚ	ž‡CŽÓèzb7hìjÂºa­ÇKYÉ²GžV+Ô¬Ñ•Ïï';…„*%ºð%I«·õ÷jÃ •ÙÖ‡~;h
i<¾Á ±ù&ŸžÁ¼Éd2™LgJ¡qÃëCÍÚþÐo³Ð`^$ÞÛã#`Aäˆ%_u×ð<­ñFªp@a›µÐYK›8ªá˜ëÒm5¥5Œ-9kBªfÖp­Á4ï¶ÖÄ‰ÍdñÕá¹ª¬5oÖEŒµR÷´	ò ƒ€‘ŸƒšêB~«ø¯f)i#×i’§ŸTE‚Ý¹¶m·I‘ÂµŽÔuŽ£E\ÑvEUîõ µ‰¶º&˜Ð\¹†úÎaütó‡
N—­qOpHbmXwwO×¼ÆÖ‰pâÙïqËXí*us
©úéiÚún'¢'N´f`f¿òÞ‚ûM&“Éd:“¾LÈ?„Xè¸gX›v¾~í¸V¬)´MêÖà*ð±ÞÍ’ûCcÍÃš(ƒTof±dM[/wiZðãZÐm-V´¦æšrÔD#ü¶°áŒ÷°b-5?—²-¬Ih?~e´ ê0ÀnL1gí‚`vtÏä2Ë·I™á~YTyuÒ”ô>šœÞxîz‡¤×À:W£|é¨l­	®Mãä
krÅ½³ë¶ïÿ­Ýþ’ÕØ0“‘õJb‘ëÏwè1èµk4ñ…ìwöMü:u{«1«¯×°[™»Vâ›1šyÝ)®	¥Ö0‹KŸî7™L&“é<ú4‰ŸFÒpqÖ°ÌQaí‘…3m-_D‘Y!·³à~Ú´fMy-Ò[ÅîL¤h-Öš+¦‡Ë6õÕ–µM@jAÝZÐ[‰v¤Ra-÷Ãæ…h'k%fµ°[ªÆZÉã¯e³mÁYÃtAviÖ4Zº–%UžnÖŠ¤©º6§gt#KËm¾Éë®«¶zvÜ}­«Àeà‘NØßÁ"H)í„Ç)ªôJWƒÖþröŸ.‚”.j+½ :Ó4Ž•X­ð­ý-pn-KÝ,;âUæ‹€Ñ¤á×&jÀã?à5]z\›Ÿ¾ÁÀyå,>BÜo2™L&Ó¹ÒEö{b2–P<6Á2°šÂÏ´ô‘³èö~D äÄ_=GŽ/Ÿ«`…YUÔXSgM($¬u:q¤ÒÑÅ[kJjË‘Aî½wÖJŒ¬Rœµ­å~5=HI”Óü%5ËhpŠ9í÷òÐ†¨¦ÀÆ§—ð™ùøþM“4pCiä¶j6M[ð£¬Aó‰ô¡„‡\U…ck¹v4×¨6ÔÃ$ÍÕÜ°›è|è¹;ûnÓnvCÛý{Z{ÿ+VÓDp±ƒ†ÿ{->Â#1Pä¥÷÷Ö^í•æ‹ Ø×k; è\¢øuý#>­½yCOh ¤—²wÌ{5™L&“éLú<1ªÓ4B‡ÀšföKÉ; šÀiûÎ=|µ–vUÁ‡§µ“JÖš¸³¦òŠ08×®bdœ×”hfñý^NÙR!%á¶sM=2…°E)Û±»a«¯¦=hð±•sPÓa±fír>é‡ÇºH:r^üØlˆÛò„?× ¸†èþÞác/ýØ k¤‹ŒˆƒD^*Ñ\g#ºdOãèÚ+!ÿj¹š:kˆîƒ"ß²Q XS)Çñwu~…±ÚkÍYÍÌ5‰ÙÀÐPí :ñ™„‹ðí7ìªÑ5Û°Z°f@o2™L&Ó™ôqèÇ½´º&HÓUÞYû&'˜pÆÝ}÷’9ÖœC[`RwÖÕbkÞZ‹”¬Þ[(ÓE‰­¡ˆ2o¯E”zZÓÙóšÇWOK×šh¿5/¡R¥Wá"¾7ž6ZSˆÄî‰;(Y[pÖ.ŠÖ6YHlY’äßN›ª-ê®«‹5mE‘”MÍÑý]•´=Í=‡îôfl°uÛ:ä¦r 9k®.Ú~øw´öNYmQ 5ñÏx$vÔ !×"zv€5z`íÕ^w¾Z7°ÄowV#Ý1¡iÕ<µ7:">¬Nö)1™L&“éºùÒ»	˜íwÇ« ÷|Ã‡øëÍîÓ4\39×³¯P×>
2â¬EµyÅšìÞVÃ~Rr¿Ñ¥	°U¼fm†3‚©¡ìº•Ák2D
×<)¯É 
ØLfÝ‚Ë¨±¦›(ÕÍ+Ö³Æpms‘!Ÿü³·’d[Âd+ÙK«jÂ­„^Ó0ÂmƒqÖ¶Üpm@D?Ö=Â}VXëšœ‰Þéráè•¿Ok7Xy‚xéïR©D’ú¤¹*@8n¢Å®‰¼ÒXíŠõîí‰#lðÔ°$–PL£Vª)¡ÍÒûåÃC'¶
Òd2™L¦séæSßõ±c˜Ì$ùöozKÍ¶=÷÷%Õ ±ëhì»Ví5pZ5ÖÂ|‘¼Œ:kËË ãz¸@ýÕ–µôx;ÒqÙšCP“‰GE±H:dòšŽÞœó_ÜX“HM¿`d$(&ž¯CüÏ”Ñ»Øß(·UIo#ÙVm[äY‰x’ÒŽ§yíHÃHçhØaÃŒd‘ÝÔ±ý“<.Šš¬·ß¥µÛ÷oO’/M[ñ¥6UÃ]é¼¶‚·ÃD«]­@ðK9t½s¹f%3÷ì§áÌa¡”@Ã²“Éd2™ÎÓb­w(«Ù1‘áÀ *›…Cî1é*È=nB¦A² ‚ðœëÚZ`­À†}!RœµÐXÃvBKì«†µÐY‹[kqNKËÐ_#@*u‹.…B†ésf+_$Œ„jÔ[ã®oá
Èx—µ4‚i}Î±ý—•jGë"Ë¦JèÝåI¾mÛ*åõ 6qÝŠÚ¡o,fÄòˆ!Ã€­/:„Œ Û¡þcï88r(~‹Ön~™Øoã<òÊFÙ,n'ÿqúãZãúq|0ÃäŠu³ä¶®×ñ ‘Ó@å×.8æ'	ayd#À[ó3|[i2™L&Ótóy7Œû=`M¤`M/Akê«í¤Oön$íwƒôXëZ7ô€5Ut¤Ê³š§€æ§Áý‘2§+Y©ek¼‡RTûkí¸j¸Vâ[*×ò$¦gº€&Ó,U2ªF5wÖ*ã]Ö¢ò®Ú%5Ïƒ_ZmÈì§·”ãSgiÅI:[<LZF³Žmpà4tÁvN
:{üF×ÝúºèÉš¬±õæÚêw2!oØ¿,ü“oäÒeMÑ±ýŒpt*aí8#|³Èþ×]²¶š9kH¡ki°æiÍ€5™‰ãå>5Q—™NHõ&“Éd:»nº%½ƒÞ¿ÿøÇÝÃÃ›[}éÕ§‹ì&éÝËQ´a„tš]²ÏFƒxmX	‰ôþiÂWQtVXÓŽØmà«in|déµå®Ø ¸.‘Õd•-¦÷‡ÎZè­©‰…©)ÕYkJ½BÜ
ÊÔtô÷}µšúi~ÿUÍšþò"KYpÍ÷œ»‚_)þ?¸hÕ¶*Ê‡¦hiKÖjqÒŠ¢u®¦aèÛ)©(asXY’Ý_Wm¿‡IVDÂŒK
ZûÃ)EÐûÐ:.e$îHêÈ[º‹gø"N7ŒÕ^wÉšÒÚ
	#Ò)Ž¤œè°FmŽ`}l¤Éd2™Î¨PÚ-ÐìÃ‡¯_?}~~~|~y~„žžžŸHÏtöòüüôýåé·¿’>| ½1¶Ñ_qºýX“×„jJkXÛïe	¤æDîx$·Zƒ[Ð×º.pÖ‚Üþ…U¬åEË]ÖH®d%dö ¤¦¸â•Îh-€¶XÝÛj>e$¢\7œûï´ù+–RšÎ8bÒŠ5Ú¼±ÆŠk¢ô˜ÔtŠ“ÚÅÁ½›‡¬ÜæIºIi'k­­ø9kÚ¬Õ®ÚÖIZÔEU¸qÀl32L\ãÙ5*Õ\¨h£¿!ÍûîãŸm„­Ò°G„¼—å|ƒFhMÍÕð¬†\q›µ9~­%kJï+=åni²¬:dAÆ€íîpŸþ´¼Ô>*&“Éd:‹ˆÑ@hÌg¬tÐ9(Yíå‰1±Ú÷§Çg~ðòòýÇ3nï®qQÈ§„$~Q°
R¥¹"ãDv mG—¤iªI´HÛaõWà¬yZ‹‡AÎWA
{„¥N§±Úö+‚5hÑYK½µ“l $e5Øâ9#Ê`^eè¬aòìFã¯PM7í²ôÄÎ‚’5QgÇåÓZV&yÙd›&Éóì!ç†ØE±¥ßp^¤eÇí°kWWyZ¶E–Ö#ºaXI°6ÑŽLÈ^¦u»MZG7û¶hÙŒûø§¾{­Ø@’Ñ™Ànâ£¬ñÎ—l£Á¾€_¹Ôr=e)$¼U–|p!`®ˆ|ƒ‘r%¬Æ/¶U&“ÉdúûFŒö‡aX£Íë‰‘¹öXƒß”pÃMzJØFi µ]´½ûB´ÕÓ7•Fôï(Ìg~1$ÒúÇ6šIt2íFÜ€$b„ÃÈE µ6,Y–AF¢ i¿êg-U7]O|¿o¶÷ÖÒ£-^µ†±”!22#5?†A"z¡3I_‡)*M¢Ô%Õ)´ÖôÄÁ[Æ+	øÌòm•g›”Þý&Mªm’'Ug­h·Û¢F_xç’†Þè¶J›¶ïÇ8ZÄÉ¿˜ip®ïŠ¢|H9@ÕÕ-ÿ)×:Ý?ÑV»ƒ`¢ÉWs¤³«¸¡`îáîšvä¹[dÄµëöí©ZóÇ ýÖø³]Hì>ôÖ„ÕÖ|WèúŸ­‚4™L&ÓßÑRš’Ùó³šÐÚ·§o˜pà92—½˜}—%‘"zHOè A©íé…$FÛÍUk(é'©Gã°~ßVmn´áÂçöËúGÝïºÞ-Ä‹Ä5E©{Š;ké)¤†#Ð…7Çö¸r¢µ¦'Â³%ì¤©aúY¿5ÙCÆ`ò–?I‚T:TdL•³ƒß¡wH£Ú, Ú¥ø¦©ªRV°>¤jmBø–“áÖ¶UAjÉ_®KªkË¶EQ%eM gÍ9PZ?ìHc?ŒÂhEÛõËS»ž¶S½54W;I!",†Ìõœ”µÂR 17°ÛÚúf½ê’µPwDgY±§¦Â‡!¬Z°ÑGx–LXƒ5“Éd2ýELûá-4¦1Â.¹øÁ#g<Òð]ÖA>3¶	°}×á9aµ`ž`™$Môr±Ùno.:]äÐk gaLšb+A?ötK{®M#–Aråò#I€4Ç‹Ô3V‹/‚„’ƒŽ[b³D–²E®&ŠÂk³l­Åœ5UÜXS	!	+á µPºv2÷ÔdÐ“ÒŸê¾d¬PMKÖ0ÆsûãÖÚFgèœµ"IçÿgïŒ}ã6Ò(ž•åà”FGˆŠm‚ËXÄ°"Àö6û¨H»Ø@•Ê­\PãþªÀÿ@þ–À}ÚƒUÞ{ßÇ£SôZvœ]kÉ™áÒÏëÃþðfÞg-Í£óx>‹IiòIG[5é1“§QUÃ=Ëqµ¬-¦ôRŠd·Óü¡¦ÁÉd’®«v[	ùäôÃ¬ÆTtŒû£iFaR« []cÛž„ÖÖ½VûÚ·¬Ù‡£•ŠØâ«Ù*G6<MO9©žÛÉ—Rf‡†OKPPPPÐç”.z<#¦‘²ÄBÓ¼‡'oßàþÎˆöŽä…Žô%½ÂGBstÝ [´â´ã‚yÐž/Œ|Îà¯åý+‰åw;Õ´>öKÜ«Ç&ž€n¼Yv¯t%ä“PçÕÝkC´¶Èüà~#sÖ¶Pm„ÖF˜ƒ¢µm^ñ8§3×Øú‘ì4Rƒ>(cµÂ'5ØtÎ¹ksà?Îi¾±¦»Õ\Õ6C{ÖîÑÔ¬µCàµxqÖ™à/±HÄRËè­eYÞTó©ÀZ]Ã:«;ÒpÃZËÚóü§C	¬5$µ®… lmW§ÕŸœ,â¾Ž‹~"#Etßšî5Âœ9)[¥µByµCÖîKdëdù‰„òÖ>¢ƒ/ò™îcCÎ…UAAAAAŸßO;“Ø•f;¾r‡ÐOw[Bz4ºö®["‰Œ@§d¦âèÏÐªµ&T'¸¯ÄöÃ‰l¹^•ÀÜ65ÜiD¿ƒµ®kÖè¯é¢H©ìkžßYs°6ì¬¹|‘{JbïRÛHhŸí>9^·Ö}Y¦‡¶’ß?b­¹4HGknÊq³Ní.ÂËì=;<TSZëYMãÆÚþbøÂ*È([<'IEŒQLX£±Æ+ÏÓbVdÜ‡V¢Mµ ÷v#­uy.tV×œpk+>æ?™ÑÚ,Ü	ÖÐl­†£1kD¾tã¡Ã4Îð<	¬öX¶¬MtY¬„ê)ŸÌ8FÓÍjèù€-ç(¡·°
2((((ès¥ˆœžšŸfzKZóXÑx(Ñ	Qº#í{Š(FôÃ,'â´>T³7ÐAÊmggÏöl#ÛÑóVKþº ¬‰.Ð»4HÛÄ¦Ù·†·¡NÌ¶mT£Ø‹RÃ5(»/¹ÿîö(ÏYÓvP°Fko%Ìq«Ý»y-[	YHc‡Å|ÈÀ3×ˆÍcµÄ¬Ç¨¯f»äÈkËñ×@Jso¸ˆê¾ÛjSAÍ|Å
kE¢Ïóºd‘ŠÈ[P4R´½¶EQ6\è:Ë’
«Ž›"i;·Fj2í¿’ÒlUšŒÓÚÑw§;ö‹±fípÖTk¤µÞÁÍñäX-“ðÝûëÐ÷;¯k:1Ù¤Ššé¤§5êÇH¢ ù>®P;((((èój§ä4“AFý-/t[ÔxÁÈ]
alï [ñÔxQëõ[ÙŽ#ö¶§MO*ø­©Û½²Ø~d}5†ÕÂ0Ô|‘ni&]ï­aŽðö'îº8Wê ¶Tå•Áš‚šsÖDþ2È­|‘2òPÍâ±NžÖ°ì2â¬5kÜž5ÙÉÃk!§ytæÆþOøruÝÔY³¿·¹Ÿ.âÜQ×<>= X‹‹é”¬–Ä3…5öTÏÔE’ÑVZ‹â„{dDVuÏR‰Ì«|1¯á`×YÚô´†¾ãZI˜pi–7x+!Çlµ0N.oÃÅ!nVsÅ´œyÂ×Ð<‘ý#¸ß…÷OÔTÓÜ~4Ý-Œm´F>ƒ“¯§…,È     OÕÑPŠy‡›õýA>³±à–2˜ØR2©®™Lƒ¿ÝŒÏxÞö/Òì—±ãÛ]9¶=yòÓKeu'°F^“]k¶w:DgÀÖ:þÔ§‹Ôf¬±Nƒ$©÷'[[ ¶hÍXmH#õ¸m¤–Áø~Ï\ãIª¡×FYW½.ÊpÍ—ç¬Ygk¬–Ú ¼yÕ†KbË_ã˜³¶ï¬F6›ÃC+’yì?‰£,ªMñPÖAfeZ )7ó¤¬ëâ|•èó“ºkëÚV@ÖF<Ûºíª´Ö­ŸõŸb«½¬ì1ËO”Ò¸~Ýþ—Ó!Ñ=‘ýbËšPš}>L)ï`[Ó ¶–ØÏ:F¯i4VS=Ð}PPPPÐÃ5š‚š8gC¸†ƒÏú[Éƒd«'5Îg­Ù 4§•¾ddÊ/Â¥UÙ”ÕŒøÖ«õš|'÷ØžcŸ´Ä!é"Ku×T+"ùCÄ¶>W¤ëlÃM——½òœmYs¨6TfÍR-Ü–µj¬MyyRÚkTÃù€=k1ÎAkÍsÖbg­zÝq°ù§Ÿ<r¯
i
=c^^¤4¾³fçÇ†AžïÕ2Èsùì½)nZ2=/RŒ2œIŒé¬„ª2™ÅIVVðÖò¼œ—šÙ×Úš^tÓu¸ï¸Rbü™àô@[ML5–Í²øõMÔ8Ñ @ýBîh­7PBä#	îLScí˜ö"ÌklˆÐ˜ÓS<b/ê×L†,È     O¨thB4Õ”©¬qÇ]¼02	“iÔºy}³–i¹sŽ¤þœt|—øf‹$©×«ÍŠ€·ÄÑ€£Ãö=ö°ýƒÆ“B¸¤‘öæoŒÍ(i^#Ê¡]Ö”ÕôlY]Í™k¹ýx‘á*k._Ä¥Azßóqù¦ÚH¡µCŒñµñ”^T!—ÙköÅÎÌ]3\¥5ÏYÛš4ÔÜÈØœ50ãòYm$ÓÓsÖãï”I#ÞÄ"ãšßø<ÊËTT.âÙ\\6ÌÌ™ð_ÂRãžµ²iªºmøoCÖÐn4Æ –£å“Aoíˆ!»ÇŠhð£®rãI1P7¡ štê£ +Ú¾öU4_Ê\úá°È~Â‡ÖNÐ2y„À¦óx|ÿMPPPPPÐCHŽš•KÛ¢4=kr§TeO-39VS:#©ÙSÌÖì5Ã5½SÏÍ~#4h7€5 Ûšo¯WjÏ­ÿ9ƒÆš$‹på#„nya>f…Ògìqá9¶³õ…±!6ª*M2NS$IåïXó÷¬^6…§Xã
×ÒÚ¸±ÆÞ “£´¾1wíÎq¯žQÓFTW³Ñÿ<4çªy¥lÓÝÎÚ¡”ÎÃŸpê­ŒRh>ía–Z¶HÑÌ¸-e6o EÚpó˜¬Î¥6Þ¬»®É+ \§ÛØ!™Â[ók«}Õ tÈŽ@ÃšÅ4Jd§šn¸ÚM¨Åe‹Òäø4°Úc	î÷`¶+iÍ’ù)£5sÓ lŒ¡‘bÙ&ú-_=ý&(((((èãóùe‹@Í÷Ó$âÃN^õ:é¦Ç8‚Ö»egºÁ3ðš÷CkzéOñ"õ	ò­´Ûp¿VG’ÚÎÈkÿ€±Ö,ER[¹üèˆgLðoq£w$8e9`šÔ]PëØð«%îÐºl‘¼^é‡Aš³6h¬9ZÔ€sÐ´fF‘‘T“Æ%5c6[ÉkX‰]<|z3ÖÔY“!ZWB€Ú©Æšï¬¬Mß§µ"Ëð1O¢2eLÃI|›-zy±HónZÛÖÌ~Tk¡¦‚ÁÖæQ%Éœ`)í4ûéïÿÜvŠëWXƒÈdä0VÂÆ§™k'ÂÞÛ)x7aóÑ#Ë‚t’Š9¬šR›\L¡,m„þ+?°<[Øäô1K"©õ{ÔÐšFCM’ÍJ3ðÒ±“N®×†cÊjœ”yê.­Ýð¡þàÍÝß†³Ÿ#­•ÕtœÎÃ`[õèÎ¾|¨ÿó¦ÑòÖ’Ù[¾’´À2pDHÃ½Øo4ÖôEÍ€Z«ª–jš¶*M¶
r¬Êš9kÛÆšW{ÐÞ²†æ 4î¬ËÏñJ®™ÇÖ‡Œ(üºPÈ1%ÖŽªÐV%‘Pñ0ÖC4°å0óÕœ³v?¨í§·6³‘Xim‘ÐÙ¿H2ºŠ8ËÅdË @Æ]iýJÇÆàLþ…Ô€´ŠéuÊPÕº6Z3[m²[;»cÕ‰F®ë=Óü 4Kí×@	´á[÷#Ë‚th¯°f¬Fi6¿f@â¼5ŠÞšDa­…UAAAAAå©½SP§aC˜:i2!N»Ñ³å÷QMé‹ÓÀ+›XS7ýxuÅ;÷.NÌÜ8PãÀ`m…o€Õ ¥7yæÁš‘ +iÓ`û’ÆòD*_aLìïóÑ’ÌÖØ]Ö¸Uíe‡zlkK¥5§÷¢ K%5ÏXó+b»=k‡·Œ.þ`ÀÈ¹ykûMj#¬6½×Y3Ò±COS¡×w‘¦xæ‰}š
ëúZØŠkŸ/â'Aê1â¬F™5Ÿ¹Ih@Õ¨˜*¬-è¨‰ƒ†>Ë¸î±¦i­ìDæðŸ{Bcgm9›åM-¡ý)ó¦Á‹ùÏ 5ÕÑ.e°•ÒHk–ò§Îš…HL&$5±EðÀDtÑ"_“¾{¶cn?W…ßÖ¶Ý5vÂqOU=Àá	&‘SsVA}4©érG-˜fÁ!blÚŒ Qo‡$|usµÙôØåPXÓÝ®®ðæ•=6´#ïÕV›+ÐHnµVÎh[]ñ%BR5Ëš\ÿõ×—ãµ£çº_­c’xGj:s´GÍé•¤F6R›b/¬Æ)Æ¬¹¢ØÎXYi¬æ@Íÿª?¤¡oôl÷Z”÷hÌRÓV£X_s9•zk”ÑÏ‡ÉÍ«®6ß¢C•W*©¥AŽfAî3Ï
|¤{X›FQšÍ£’â*H0›$î¤¼É³þ'ËòºUXk*Ù«ª¢¨ÐÕeªÙ<|¯„~î/äõï&Yý¨_ÆùMœÅÕ\l|¿ÖÀ?oÍÛ$°Úã\IÃ©ˆ.þê­aèI`í)sFô3J=í¼úñLHMÃø9„Ø½ÞÚfc‘pÓ ÔG[o6—0rèŒ£+h`ãÜ‘ë®ÑBýÛ›Ëkþv`ðŒìcíòß./W¶òõŠÏ(¼Ä)n]Ó¤Iýéÿ~^ûî'Äï5]2#=ï1¶™—_i-²ZÜjÑ¨¼b–Ýªáp¬æÃš«²–8°•^pÿnù"¤ ½g5%Ê‘•cÛÖ¼Ï[ÓVqMn5­‡z<L…¶zôk Ñlûj8}Òæ5² Ç¸±¦ÅÄ÷S,½Àç7–lÈ8¸e¤³(¨e¸Ò”·Ye	Þ¬5ò¥mËy‚qÇ0‘ª—Õy…ASeY‰AÎ‰45Z{[mGMi®0¶æõc(pÆ¤Öx¢Eå*H-”>Ñ|$1#ÂÛÓžÌœÙ&wê¾Aê¹…üÐ     Ý<55ÕpZ'åÍØ)É„¯ÕJí0_7
dÀ+ÀÚ•˜
7|4Û\£‰G°»º¾îimEÊÃ[´×xáwÁŠÛü¶¹¼¼Œát«[˜{–©q#¼º‚Öž×Žþvcm	ÖÚ¦ÑHHØkè5UÄ*bcÈîeÓ ÓÄLµ™­i˜ Xk*M‚äe 6Ü©ü2kdï¿Ü?â«ñ8ÀÚoþ¶5³¹ R:ì"j=„Ö¡”Ž¬¶ši°ÄZìpsH5^:—fÿ$ÿué¬EþôÀ5NÍß_¦Å\6ÇK!‰nœHÒb¥%K¨UÀµ|‘¤uKÕ5EX]­Tk­‚òzZóV@îÝoCî½©³vl”&{ÕLß‡¯Ün$Y^aÒŠE0a5ÏWcºˆIl5eÿ°
2((((èƒ)ýÈ~|­ñÐ‘‚Úš—Ùk‘É–4[É{«Ÿò¢wvuµùýz³Á;NW`5¡´ëËßi¥9Ð~Ç__¯ÉÚHŠ¤†ëzµ&RWÀ4Nª£&Ë%ñ´ßÉÆG,Ä&(ÏÎþ¶¼‘££'¨þcMú"«A€Ààžat!™"V&–ÐÙË®n4²w×µª6cÍÊ¬9k&oÇš1Á@ÂAŽ¦÷ë|Ø[3bµ‡/?§ÆŒxÎÚCˆÍ~Â¼99c^}cÍí7”Ã¬µagmÖötiëù"SösäŒðGpKÖ2þY“$cªa-Jbûç‹YRB ±ºÁQJ§»Ö0Ð¦®Ò,§++Ïùnú|WT›ô]¿gÍòúOÔ+éW±áFFÚÉ0°Úc\9øáÅOfÈñ<Ýæ5û¨Ö,oåˆuadPPPPÐ¨@§ggš¬o F$sñ!¸¶¢ö×6 ƒÙÚÆ·ëëÍŠ¸fËkd5Ùµ ™J×@²+<û<é}r	]Ë=l7NÇÔVC+¿^IpÅ_
2ã˜œÆfµ‚geÜ -Ä†Â†6ðÚ“£¿ÓNOÏàH¶u#hð"©!=¤C¯ñý”Àšåõ3¾),×TM×›jTÃ8È
ÁZÊ‹‚¤<(3Ö<gÍÏí·ƒçxn?N‘¼4öîîšï¬Œ×ú;Öx@ÅG¡šC>\º Ò-ìÏVsÌ9$µJƒœÅL6v:ER›‹ÑsçZ”ò>‹fs¡6T\ÃƒEJ{‹…Ñ”Ö Mñæø‰E	Õßë~ýïdÇÝjA5­‰=áÚ6•mG×¤3=‘ým¤•MŸÕ !zÛ	ÔÏ<µ†þÙ±°$7Çx •ÖÂ*È     1	©iñ2¶Fk¶ìÀpQêWmÁÚÀò©5AiM/LEãµ!UÉä/¿¼¸ÂÍ‹_^üç?.1"Èý›¯½¸¹y¡ïà ÇÊ\5‘yò5gÿÅVki7 <ö¹Iø¦ù#x$Û×Ž>§)¦ÝÞ²˜À›¦©	k´d,¿[»X.ÑB}{J{ÙÖ.Þß0Î+sÕøƒJ6¬µuN«éAe<Tï÷omYóqmWc:·/öß?h­mùj>§¬@4^›Ë!tÕ7Å¶Å¶ûHÇi¸zR3_M>ªY;YËªÇ¡UÄ¦ð§™ú#£Öš„@–ªø&ù	&é¹%‹([DiN­îHÆîyW§‘ý‚¦CÃ_!ÐÚn™ýlÙ±¥ŽO4½_»^Û1Áy\Æš¥Š(Ø¬Õè¿†ŠèÜÓ^y‚“¡"vPPÐÿÙ;ƒÖ¶²4S™0™Ù¤Á¸…-ß…„16²%2!•¬ÈXXZ„,ÚÓ	­´³`˜P¼IÓµë•¨? ?P? ¶Eÿˆ"µœ÷ý¾ûùX·d¦g3²Ï{ï=çÜ£+·ã(´ŸzÏy?/¯™¦IÍŒ3ôf«AD2Ž­µœ|ÀZ‘Ù\Òcµ#ÁËPMmŸèö ýýþh4
‚ÝýÊõõŸÐ‘¸FAxÝP|f·Ð­#§ÆC²Ç”­À/®0rƒ)«½Ý·Ñƒô	znß’×þÏœFP¦…EãÐýÆ­jg@11É$¨ŸlÉÐÜ5Œ…â0’ýkx>»÷îLãEXÜ†ÛÉ*È,àm/â«)­M_IL#5óFA²Yüµó:kÓ¡-ÅÓyk
T<õp˜6›ÖRwÇv¸Aø…yéáŒ½É¿¼Y¨frñ"²gm9lÂÿ8~ñ8\1Â–´[k›	Â…kXãÅñ*úÕIÃ©Ø†‰mf@r!$C$7 kïÿü÷¿Öæ¡µ¥%5\ö[øÒÒsY´…5M>òáéÅÌO	NnPƒx{[)=ºEÍaÍ¬5¾4òòY^^^^^÷£Ú ©LÜ³/ºi#Ò*L–¥ÇAfz?)˜h#Ò•ˆ ¶FÛ‡#
ÃüµP£ÝýÑõcfw+• ¨ü©²»¿Å`#¿èØïÈøn7\ƒž~õaw¤,TS€~?€·&Ða.›fE
«A}\CYùÏsšøi_¿†ìn•ûÕÒNÂk'ï).zäî4âƒ!ÖÎ0<#»)Ì½—l„öã<«qI$”e9ßím‰!Ÿ(´FM/³7kÍXÍpmŽ=kËQ-«ÑœQnÍ­MfBN‘“Z^lè3ã56÷àZJ.ÛaÖœt.±ßVZNC5mí€fxk³“ûÿÿÁZT·õ8Œs¡ãŽæƒÐ&ÛJH $,‹}jP¤F@3XË‚ÛØá)ý÷sš×° ¬FXsÞÚ¼ÁÏÏpÙ²emì|ä#ŒY‚à»âÔÏ‰r®Î éý³g“ÕîÀâFå]þÓãåååå5<°þñkhCÉ^5ß¦ów(sÕDô©Ä©ºQNccêƒ¨†P¿ ˜íÕ¨~Ÿm0ªTFÁ.„†ÎÚh”Ü= ¬u+ÉJs4ÔösðÞHkÉQ’Þžï÷GÃÑ¨‚¦ÂZ¿×á$›}!µ!v¤w0ë¥*€:^´Öd#Æì áP¦C>ùßƒšúif*‚råúí½éÝÑ	Ü3 m3u×p¢‘PÈ3Új(‰l¾BKÂôW?jvÿw{’áo¨f‹ g%÷“Õp*D·¬ÍZÉËiálµW3ÒûgK}ª‰cZ&$Oå4whåµ	m®éašý7ðÃ×Bc¤]ôoÎŽéÞÚ²,€­6;m$_waþ\ù(‚EÆvkm-ÁÚiÙmNq°'Ë†!W;Ë7èÚÈ,ttVScZú	Í-rCËÕÂi’î‡xgpÚØoW{d« — ÛàÈV÷ª	ËÃ…u¨&0Ïöé’ÖÃ¾Ç¬Œú————×}ñ 5¨£¬¦r"¬UFÙ½Ò[ŸeÑÐß%5°Òü0Za£!ñì€,3Úf¢>‡ä³ën@VK&ƒJ·[	ºí p–Ë%L'+ø,¨êð„LØVÆ½ÔëvHr +%»ãñ˜%£Áâ>·hnƒŸ&‘Z€›°†–´FÒ”r_Í^›Ô¸?-üé|R³PL~„©²pÇÐÖÎˆmà0©€­°†ÊjGÑŸ¼ûˆIˆxÁYã†5Þ†€–ÝF(l	Z£h,PQVƒ6#ÎÚ\Ë Á4‹½òŸ/¶æSëb5M8ZÃ¡‰òYtä‚ÿ!£>‹~”ÃíV›i¬MGµeÒ©4ä„—ZkË©­ØfŒŸ{ [,®Ë!Áq›’ÈŸÍbIä6zWûN»Ëb£oÐ`¤Xj”£µÙqýšÉºj2P7.ˆe‹XkÐæW±=@=y9¿ÿ
ìâ‡…¸æXMsµ¬{£4R@¡#þóãååååõ{‰©öU˜ŒXÃ!/WLÍyk&F1Ö@(¶‡ŒR?\¶ðº!±)ªŸŸ¶¨J°ÖNžõ\.žDS¹nŸïîæÚ¹|ò|ä–«àÊW zÕñ¬Øk ·ñ¸€Ï .–FB£ñõõxÈ8ÉLHr(Ê†qw@<	éŸuØÐ‚Öú­äwˆ{mÎj¿väMü)©IaBx¬†“~s<'aýD°£3Bà´†ëä„›Õ°4R²G`±I¶/º¼ÉîP4`±íe#¬–À¡¨É¡\pt¤Ù3ÓWÏMèÕâiy¾HH7ŽFèaÝ]H9\»Ãk8³±7¹ýlŽÔ,S„#5~MÃÁiá"gmº–ïŒ™Õk›)œË¯Ö¶òÁŽ%ð±^§Ÿ¶³!Ó	ÒšÖNãöN]™½…5œ;©ìNÓ¼±ŽfÓÚ’†‹HK»ÄJ¬Iìsâ„m\óÛÕ¤æ.ÊÇO…ÎÌ5#y¥µ	OÍ–Bâ6xü_}¤————WT`P¿U½H³¤~õŽnÐ­MîX#šØh§1Á‘\FT
†Ã€ËÙà³)©)«å«ìÎsív½]Ï'óu]®’«ç1_Ëå1¨æÛx1—ÃËòÜùy—¯w»tÛ*u,•Uº×?\w+X<¹;LV€n°Ù†°Üº¤6|g=øn½nÿæ
ÑÿWX29ê{¢€‘%Ò"qöFBÊbñµ'ó€éŒ€GX£ˆ·ò”Ê‘Ö&>£ø¹ú‘z/ÕÖdE¤v¯Q¹y‡¤wP'’Ù“ŠÔX£÷nY£î Â´e÷Ø2¿ÃµÅ6óÖfºk÷[kFBT4dÄdÙý“¼&™ö8T†mÚ¹	iØô0ª–÷¡Ü>Ã(¯`FQ—Yk¦Åü[ÅŸn3¶µ•Zcìc,µŒ{ÖÌ&¬mÄ–_a°L~ûï\0Œí–ÙŸ% a_:‹…Šj*õÖBd[šõ{÷3]úÈ.	ÛŠ„ÖÁÚ±ÿUûa
¬67¬™tdLØ®±¡”Ó¤œ:Z€ð« ½¼¼¼¼&ô¨öÅX‡K4*ÃÈèSEóA¡ƒ—5Ô„Ç`Ô«`GY°`‘#´~_¨í/»	Î¡j¬´z®~|	[-W¯×Êè¡|µšk×!ÀZ¯åó”¯Ëµ|•ïÁÑŒ«äÁju@[eüÃãœ.T£­:ë¯{}ÝÇF€ë¬°,rÜÎðYŽ…Ú¸Œ“S
kÐ—ßfÙkOBP6“ 1Öt‚'.5ÖÞ±²rø¹”ˆ&.ü?†t¦˜Æ$HqØ~á:ÈÏÜ¾XƒÄXã'Žù"²4¼Hä”à~E00TsÆÌ,T#÷<TkÃ¨Œ~ÜÅµH*dˆlhí0P“Ójb2<©™æª¸•—NY•¦©¨f7÷iÀ;¥ëz7‰Ô2'´ò‹¬áÇôj‹°—ÈšÄÃ³{Ü?¸ÆŒlì½ûøgGja¯ƒû³ØŸs£š°7¨ÁNcˆ:‚ÔÀ~uÖL>â‘Å‹D÷®ÑˆÕtÈ*<ÈÚGoœÄks¯ø,H////¯I!ÿñgIäÇñ.Jru¨{½(i‡¸£‘‹ÔÒ.šZhAÀHÇó W9 ¸KV‰iyXgH]Å!­ü·¿]Ör¥R©|Y®C€³b­v\.çªÅ|©†ûj3×—ÇµRžï®·¯Ë|Oä¸§mvkßkVBÂ[£ŸÆÝkü&GÝëî‘‘pØF€8ÔÛ†&”nnsŒµØ:h;ä­/¿~;µ”íÙ£&ËDeõ£ÂmëC#ýÉýxBÖb=lDÐN“Hr\5^R›6}¶£“¸af$ž8#£ábC¡´/2üi­™¢« -_Då`m"2ê¬9sfŠÓ‰jygíÞkTÃ9EVM[È +Ryí÷„æFn—ZŠ_ÃÆ.Í$*ûŽôÐsöžµ‡5j=OÅµžN`”² ÈMb[1¹ÿ]€ÐÄ]Ë"þ1±AíHhMQ|†Ó¨MÏé´f9èq‰»4÷æ?BwpížÕUnô#ìS4“°6	ôX3Œ{î“D½¼¼¼¼¢
óÓ,è‘÷š•aã+€E/´	«0BdD´ûƒ
7¢Us¹j>¨ÊA@4pV1ÁE°V,ÕN	k¥R£Ñ<n¢i–»íZ©Þ,—KEXl¥:ºR3åKÀ¯P«·Ëµr÷ØæÖÅIÀ¼:|`·:¿“.5Ü'­UºC¨GË­ËHn°ã7OOMPíJrF0B+¼EcìÛo#ÿg)©<@uXžbc¬&Ý-¼± µî:;!¬‰$¶’„š&œIíìÅ4òî¿Á5ÕW‹k	ƒ5Gkf­¥Dw)ÀPm®šØˆÕ¨Îš)b­IgrŽqÍh
i¸pX)™N¢‰ä?¦Ù—ÄpZy5ž³·«Y3ÛX[0Z‹¯-»ûåÍRüQ{#.Qþ[üg®…Üá‰>«Ö¶·v$ ’E°m$¥CôFn÷üîýœ¡":|
ÉoÝ’úˆ‘]½c¶/=«=P}3ª)ÒËÒYÀÚS±Í€ÍÊñ)¤ÝÊv¯ñ³äWAzyyyyÝE5’ÆWKçÇï:·º	!D¬†vhE©µÀu0FT2`p£lLCKL£`Žåp–°­7­L]\kR©v|yÙl•MÀZ£X;¾.—ñà[©È¶Q¼(5›ÒZ¹ÄU¥R¾Z¬—Ë—ãz5Oo®–k_Ö°É­2ê"s$‰ØæJŽ˜â¿/ß\?¼Ô…h öe$]4ÀÖÓûqÑUëÀ]³½yxíÛß¸µ/¿í„æÁv0ðfïÖ°˜Rë…«±&	`5Àò…–#©²ÆÔGù•ò=ÇZ ›œ¦G"§«ÆËñšY	·gmzp?QmjtÿúüÆNêm[sÎšÙ!#ædMy*ê®q`‡›A››Þ©IÇ½™'Eµ¨³æÎˆÌ5œ™Û¿@¨¶¾C|¿ûŽq‚k©õJeoé½°‘8þ±hÒ+¯AïŽ0#Æš¡škŽÕ×îË‚D´„öÙä65ÙÉ-å°=ÊÜ~ÓQÍŠ¨ªÑd#ƒ©Å&—Ë‰ÂYÎˆ¼¼¼¼¼ÜÂ>q…œ,øQË…Ý°6»/âD)¤¡ç ?‚c¥¡!,x–¬$qçsÔ]i€µ<x®XnX©”«—..j0ÐJÅb¬Ö<=n¶ÄQkµšV¡Ð*6Ò™&ž(óÉR*•Z­b±™¡éd£W*‚ôÈx—Áv¶Z¹”«]¶ëåën°v f$—¯±Fö>¾U°d2èò?pµ¦ò¼1ZlÄPH¶+¤Ž Ö ùçæ5é@Š±ÄZRßÀ)œò"z|¡AïJžûx¦Q"GØr&¶AŒ­r’FØ"T$Ã•Ås|qM5¶GÒîª™6ôpÆÚ\ak3Ym~cmñüe[ÞüÎÚÔTHg­qhNj¢úš4nóšÃ´È#ŽúôëÎX‰C›9ö¬Í°Õ–†Õð#mm®ß™‰%Àf2LmÐS£»–XGö*ê¬I,d–¨&µäù_MÞ›“¦—ÂšKÑîÞ4HþþèÇ§d5Û †îé34æ¬©^øÈ‡ª'ó°¤ÈF…¹"OóU·K!-TÄ(Íu¾"¶————×-ªýäP0Q>qA"ô‹è¤Á…’ò÷¥ëã< gÅj»R´š»Ç‚¼„œ‹ªàªâØªÔ¨Õjžåfñ¢ÑL7[o[ÍãO§Çdµãf¡Ð(¾m½~û¶Õ ±NÓÍfëm±Uh´^£k52™¦€k·Jü²åK¨‘¯B4è˜Ynwéž¡@[¾Ž\IÖlC17(€úpÛê0ö×:Ãƒûêúâ6´«¡ÄCrLÛ«!_¼@@?òÿsj8IexY²þí'%.Ž…Ý®nþñU MàÎ½4ÂšN¨©&N«Éö4¼œÝÞÃ*Høk–/"­‰½ÇÔþI`³…Óµx42Šk3B*Ô‚‰jù~k$3{ÏÚšõv@Óë®¯9s,b™)Ÿ‘âdÒá™{2NÓÆ]lMŽ£{Öf8k÷i¡`-ŽNÌ­‚\^K1Rþä%6×bRr!þ¬¿V\Ë‚Ó6vèoO ™ÉHS÷Ñš$Ï(Ý¡¹Ì¡3ù½FØX#£±‹†A’íà;Ýºj6—â/Ï‚ôòòòò
QM(œváÐRù¿Ü€Kúd«ž¦Ž‘´†€þ`×ùÏ±!©úŒuÌkŽ2^P³)m:“i€ÑÒéÖ[¨•Æ}¦Y€Ò™•×o_«Z…ô!^ÂC°Ú^àŠµæái&në€9ZmÅ–A6›Å|5ÈÍÃ$áà!÷qÜÎ!Ô¤šg­íj %a²å%4¬Œ¤d(øÖÃÞ3,„z=Å-Ùcâ«€ŒûÙÕjÖmñž$¬}–žqå£ôÐGiBxÃIh’ÑScÀíLkbks"÷Žî@Ö6®Yº#5—™˜n¬QnÇšÓú|ÞÚ«•šG÷ÊÜ'kg×[s&›Sj×Ì]»“vî¸‹j©PÎ›3ÀãyºÈìòjÆŸì¤¡ÅY‰ŸÄòš»_Ã|+±	Ç-¾%&ÚÚ«M´Û{1lbƒŸ¶½‘€tIdöìó$›±u÷z„ŠÚ$²’	€ÍýÂ-ÀFcC›“yÿKöc-ˆMXsšŒ‚´Ïf´
6H†ÏÖì6Þžõòòòò"ªQ
gRÉ™R“Íh'`íj0¼…µtû–úØßP¹š"%?œç™ýQ+ÖŠ@µV³‰VÖ/Ò0k’ÍZ@³Â*¡¬ þJƒâ dÍï
¯CV[]]IgøÊÊÊJ:] ¬÷2Ÿþó0]Hóí«xn¯lµòes¥UÄ*H]6Ùh–kÈiÇõ\ØˆE‘É<kgwá¸U`²%“öïRŠmx3B6\*	VÂ2fä£™‘°Òß3Ë²€îO“5œRÀ»i­6\„¾›€³¸í$D4œÌÆ$¹ArÄŽÿ{ 5+¬†^ÇØn£™ãlö"[Öf&÷O:k)£5¶Ð¬_ù£ñ‚<‹Šk8ï“¹OÒÎ,·6½àšù^.ÈWd9¤±šëqicôl½QZjâkGášÝŒ
kQgíjÑw!âoiÝâ©T<F¤évµ8¶°Ybs/!ndï(Ë¾¼ÇN¶YÍÝò ¢™
iK„U²ôDJcG±·íjžÕ§±•Vâ{®!_…	¥5œ"7*ÆáïÏzyyyyÕ^v:ê…YóþH!z8‘ÐÂÅ}nR;Ø?V«TFÊšÁ³:õ­• ‹ó*j´ZÒ@g!…­®®ÊÒ¼)4ê%3+˜Âä*|6Î¿YYùtæ0Ó*¾}ý¶túéÓaa¥y™èe>5_¯®Òåòå
=¶­VƒJµëëëËz±ÊÉö¸žÏè¬žl«ÔÇÝQÐC0þ–MÃ†wá}é;9Ýñµ„ˆÐp£cöW6ˆ!Ý b•àÐ]Ñ„cB&Q–ðöÇìÎƒ˜i †K¯a‚cDØÿñª«!ÒŸõØÄU“w©µÆ†ÛžÌò…mÇjn¤Û³fŠ$÷«ˆf‡AâŒâÚâÂÚÌ]kÒLÅ5E¡‰cÆBHaµß:Õä66¹ÕWå)­iÑP›Îi.9åøjQ-¯Å±yöÖ=Æô?\¬­oqˆ£ 6`-±C':!ÖÚÑäî46C5ÌIq¸4‘A-q¤`ŒuIž.=7‹sÆjÞyÀúæå|œ¶äœ5!|kCƒžXFB{ŠV¡í¹CâãE¼¼¼¼¹ž|óÒ|´_ÂýijqFéÍRú!¥%¯w‘Ì K„ÊU‚@9­ªú G­Ñ@6Èyè”Nã*`U#U ˆ­¼Y… f:ß(7WVW2¼NÑO¢{ó&“9ü”)à§‡ßÁiCšÿ1^Ã$º<NÖ^jòu»Ø	Â¦«•Ûår±Ø@^$¾£"»ø>óI°Z>ÇMl»£nlÖé*]µ.¯È¢üÐuú½ñàª7þ¯1ãùÁg¤Ø.qì¬uzß÷ÄncC>ë†} Úþ sÆªNal¿™j¸h³…U±Y^0öžÅÕä	ýŸ	¡­QL²PËrq×D™5^ªè–5Õä–µÔ¦bA´°òô$Á0b)#S5ÃY3šlëQTSÆr[×Üe^¦›i[¾ÙùjFk¦Ô´õQ^3Í¿g-ê­-îßí:²û7±e”¶¶–ØZcdÿ@à¬q“göÌÙ|‘ÉIë+ŽÖ”Ôp=#£ÙŽ5+‚m»ÖžúJØBÿ>§§öLaÍ$nš!Âcâ¢AaËÍð3öÌS¿———×£G5 ™Ë7tq†˜½J#PÖöÉ2$5j(Ø­²~5 ­úá¬¬ˆËÅM+6€i)--ZBCD<†[YñX Ë•ZÊh¾a…c>þæðð»ÃÃÓSxqx¾žhåj5~µãtáMæô®ÜU¹PhÂM;N·JÍLúø¡“mšl%Q>Ç½l•k|›u®Ï¼n³N72ý‡WøÃ F7œAð'4|Èá€Â ÁüC5¦ùÿUÖ8²j6aÍt%+%9É4:5|•¯ZëútïÕQÓž­XÆé"HâÜçÙ	`”f"¶ÁYÛÎ’Öq·Cmo‡ÞšÆ“óœ'R—A®ñœÃZ‹æP,0¬¡½O35§HÄÎ©Šn]3K9	/³cc„æGi6Ž&‹8·Ïí«ûgµW/FBÆ	îßLaÏÚ6ú\X¹Hlg7R±íw’û¡²¨øH”Öœµ¦ù~ØïÜ”†¯›Ç¦zñ/^ÛXãÅ8ßPÍzÛ²æ¢Dp:ÝÞzì÷òòòòúæ©Ìª\«Âh¥¶tWº4ðFupÃ,ØRVº®×ÁjçHÁH2!äé3®¿Ø<­½-€ÒÂe¸Ø*ŸµŠ­ˆì¦z[,
«…eÞ¨Á†™ãŒ¼¿rµ’û©ÒZÍu~Ê­¶åîÏ¿õþ˜ûéç«Bã§Ÿ.O{?.‘FRDÚäá§f1×>>EÈäq£X¬µa³akÛ×üFáµ	¬ÁL¬µˆ7pm(Ö0~¬Í&0†e=¸iC–^ªí ¬6øÌ`mÐc<ìñÍ<Y-Ú¬AŸéHî’ ~)sê3H¨ÉV5ÒnBØà¥É>5ŠÆ[ÄBî¨¶ÍX»#A5\c-š/¢¨uÖ¦iVlà«Ž=ËY3ºkd9‡ËÉ:·5ÍœîÞE}ƒc½©ZÆ‹Üiƒº
Ò¥“2_$ößìOki¶Æ'MW3áîÒ`5$Ž»Cân¢
3ÆAc©ò
)’bcá²ä’M_¢…HVºÙHþ‡¦³I'ùÊÐ{¯z§ íp?Ds{yŸçŸûZ•réYµü>ªzë­’l'ý›çœçlò ·>²y÷6aMe¯¯Ý¹½y] “ñ,éÖüéŽ¨´’3Ž3Bkÿædn‰^ýco¬Å»Ù­&°æh³È\N•<ãŠÇ¾
ÒËËËëB£ÈC{Õk¦ÁaGHÑV5pÚ}÷sC†t0ô1¤à¯Ic+¬…e¡µÏ÷X‰Ii’ÒZcà>‰«I¬ÈiG»d­ê‘'õ1>3­ÀýF0A¿Z£Ñ «…óÅbPž‹ÅbÒÍ·{óÅ?`?˜'‹ET.æŸ8¢­ÒÙÙéÍòUL`{úâi·Z«õûúÛ7õr…¡#X0.
›f3Öræh¬aEÃ£"§‚mÓXfÈ!NFgK XˆKœ££†¾€Â/K[û¦È&™½’Æ´C&ò“Ô$MÄL5ÞêÕ‚Ftx6ç±)ŸÑJãÎ´Kxs©ýÛÛFkÖ³wÖ–Yí–«‚töãµDg&‰ÖT«5nZ.LP<Ò-ïÉqVldš![£ÅŠ“£E’ËS{ÖR@í7Ü²vïÖºåŒÜ¹þÙmhÖn‘ÕpnÊôìõ[›Õp&ËàLO£5½0ÒÊÙHk¬tÌØ\ï‘õ"ñÆOÂöÆÚû¸&õ¸MaóÖ®¬¡GÍF«eäÏ‚ôòòòºÀúàêÏâ ½o­T#P^Âjhà¢§Æ9j€¨“;â€k¨z´µW«q€nkmF4Ø@kí@‹ÑŽÖXÅH÷Zq§@.+ìì L$+°†ûÂšl>*6
ÅÉ¤¶‘‹æPØÎN´4“î¨Á¢B«ñ^EžÍq;fúö¤Ígå¨Î±mÝ Úë÷nozüÌìb+×{øÑó9tÕzõ|>BË!‘)ÇÒÍÁ'ªMÑ´6œ#ô¡‘dGüÝ(Ð
¯½€Ð¦¬˜Œ z³‰NÚF_î¦×!k¬‚dí£@'­áŠË¡ÄCZÐ#ª"Kà2õÑöq¯ ¦”9kÄ6Kï7ZKèY³,È˜³fD‘Úö´r°–™æ¬92°Å’Xi–˜‚ÏØèµDJÃÂÃt/Ô–	Ñ9|©¡ý +Y¹~ëhmƒ²ñË¸¾	_íÖ­Ï€h¨‡T^Û¬]ß¥jyF¶í¹â`—Ú•S#D2l,âÃŒ÷ûh™à‰ÆÚ%ò’!3æÃbçBúÑœþÿ©¯‚ôòòòº°¨ö‡O¢ç!äŽƒ ¢)û¶ÔUáü3=µ-Q>b^<*”‚}·ˆtþN«u»²Þ„PÙÍb¡;ì6CÝc«-ñIþÙÃ,ÍRë–›]nÃVçÓyTn¶7²í9`-» €B‹ù`1Ÿ/LÜMÜp÷‹ÜÀÞ›ð£P"ÊäxÜoô­Z­Û­…!®!Ñ²EpgQ3ß{ö<‚ìþ\N‹ÆÇ³©ÀÒG„WG¡»F¯q:QS'Þƒã~“67ô¶Ï&tåxÏÛgÈt\CØ£?>²QØRÉ(~¤ñ!žlq+Á?£¶mÌrì¸¡µ&åN‰ñ"æ¬%‡A:Z0UL·ö~pÿo¾ÇYZ
ãHÆ5.ñ”‘”`HÈpÍ¹kŽÐì‘…>JÝ¤C½¸ÌT³aéG‚~³öþÈ×Öï}"€£ëÀ´M5Š†³´tÞ)1A„¯eá!OS¦Ù•ÿ­Í	Ç2ÜXš8g-£žÚ¼‹-öÖ®æYÍkÒšv8RH%â³¯QÂmìµ^Ñd“á²õU^^^^V¿ÿPÉì$I+O¬÷Zá5¦#Æ¨Õ¨- ÛQ¥Y9óº^ô O!"pÕÚœq}£S€h—Ö ›ØEdŒ0¤?ht²Q@iã–b;ÐÚ|µìl>¯Õjåv0YôÊs@‘ñ¯sV<š¥êÛÌ»ÝÙdÒŽŸtí”Ä\­áÇFä¸¬W©ôBpg˜Cš%ÌB™=eqN6©‹¿ÒÙd, <MpE,ÉËglk›¢RGhÃ}¹_ÍðýaÀ#%Õà2£5^8éZÞ³”È}„@ÖîŠÔYÃYÂN´[ºkÝjñìþMÉa±*HÊ¡Zº³¶rÉÆj©ÓÖ »:­'§B&£š3Ø\œ¿šg|%€›}E
ª-_)¦cšêÚ
kµ5üÑÔà\[ÃæÖõÛ·ùÿS¨­FësÕö‘ÈqMs ãîZüŸ¥Ézg á²Ss°­É`íÞ	¹ðÆ MuÅHº‚nGí]O²G+Ä%Ã-ÃüMÿÏÉËËËëb¢ÚUe5H8MGªÉ#&?j·}µ™tªÑOSP£pAzG^×h«…Ì©ÂOÃ@j"™ÄóÓ-£µ†·d¶5©øìˆrb«ñ^ËƒY°Ñ½Ñ¢B'
áÁ•ÑŒ67óÌ mž*~4ŽrsðÞËÕêA·‹ÉlôýÚøikœ¾k-ìõ˜Y–QÙ[,f„ l`µË¥mH_¹þS†‰@Ã	~3¤3xm#újJy‚yC¼xÐ£ûû#mQÃ©CÖÜÂŒH>Z›P¨í°TÂC–;:Zã=6ª]­‚ä«4V‹‡Aš±FZ³0È˜¯væDìÕ‰Çµ3ãûS5Cµ¸»&ÇY}kÕLvg)"vk!º?ÕZÇs S‘mÍ´2ì¿­u0w8>‘åÞõM’Ú::Ö6i¯!<²Ñ+ÑXK¯Œä‹mkø/í¥<Hšì.ã'a{cMÄ®8.»$È+èyÌd¬
r)†€fÎšÊxö÷òòòº ¹"¾²ùi¯$§'vÿÃgœ§6` ¤´^Öi£¦^‹þKVS«0Q$d1$`ÓªAk4ÔºRMCMcUõ9`mO¨b±ÓÆRØ€¯†Kâ¸4ä‚4kåÅ SÎ‡áp¢ F3mÓÏs<;õú÷1²qË{|ê‡O;µ¨þðàÅA¡5˜è_oÔÃS´Ak:}-‡eDH›ÖrQs”r‘Ìð`È‡|$¶	­!›¢ñ6ŒHkä4h(KácÏ€b³C°%¦q1z£¦%Ø•4ÛÿLRÓ"HYÅZ+•Y"ªÑYãËDÁášsÖR’ûSŒ5œie×V ÖÖRg­Y„?u&°ÅÜ5×C–1"WÝ*Ÿ¥Æ‘$È¨0mvÒ,2åÚêÕ@ÒS[GŸÚra$þ¯_¿síÞæ­õ{›ÜÜ>$¤é©Ð…Ãä@-©úñÇ¥[ÐšD q¡duÊøho¬¬ï¹K¬¦Á{V9^!ù›”ÒŒÖh­aÑ0H_Sëåååu!›Õtªõ¿'¤öR`M’úá¤MÙ¦†c´…åþ´pÉç+B4G[¹#&=²ë+¬‚ÙÐÖ² 5Ðæ[#û±ÈšÇj-bí6éøÐ>)…âÇŒ†,×ú= S8Ì²ÝÙ@Œ°…Ñ–‰4öóç?9_–ÀÞm}WïÅgta¯ô16»Ñ`%geª@™
™¡amal6M9ÜL¦êœ	§ñYX£F3>dùd)­M1¿mÖäG¢èlX6cÅ£±š«‡d“Ú#Ùl£òV[	VÚþI¿ZIÓ ÷ñi#Û’1X£Fboâ•Ö²fJ
ƒ<_$g…aŠ9k)Öš½Î
©§ÉBGxØ­ûì9Y-×Úø·¸‚°á×´&{ò¨nˆp×®Ý»ˆ»Sz@F3Vsè•kîêî~Ä©i–»Î›÷•ñíjÞXSZS`ÓkìTËØDlc|Ú´æ¤¹f5…6…5*óï¿óòòòòºh¨öû«ÏÆjZ	É;nPþHZ#€LFsú·rS,¸äËañ‰}DVC—Z»Ý	¡¶°OáF·+¹Žl]€è¬…-FõÃWËnˆöð!,5¡µ±nõê˜]]ï´†å€íi³ÃLBYËúŽÇwï	Ï’°MOÑd‚¯ö¾ýîÛNaÜ/pê[ÐéÛ­þ›~ml ËÊ–2þ|yrÖlkÖCÊHŽÖÚŒ²GÏ°ÝÆª#±NÙ§My‹¢ÉŽýj <ÛŽšQ/jNžJCi^)5Öds2~m÷îî!í7¤=Ë4 Ÿ;^wÙ°¦bÈ‡¬9gí¶KîOrÖÖÒ5Ë6”5¦UŸœžsÖðŠãZrãš[ÒˆÍ ,á‰*}²O{Å¬µg-Õ~ËÆhˆ‚ä¿]<à~ný3ÆŠ­9k-IqK€5zkd5þÇwÆ
!íbºìKÖ.‚®
Ž{(6[Õ¤þÂÅ‘½eAš‡Æ;`šã7,~`Ÿ———×E¬€DÔ<ûM6úÓÃp=#E^¾Ô5†‹lå*&b:}5Î½®u;iÕdŠš¶®† pÛªÈXC7Z|„Éi„µvXGž5œÌ‡…pv†åšF8&SšðYŠR±Í[:þv|Ü(¾}{ ír…N­~pÐï€×ØÄV«VùçË‡ýqHo¬Ç‡°Áaœ€°ì}c&äV.B”¿¯ÖôŸƒ×Ä†¤×Ä†
D›¿hzˆ®r}"bV?<7ÙññþÝíÃ'Ü±þq—~@Ò‰ØÒÀf*íš³vW¯·q¸*È„0HÊ:ÖbcÖx¨Î?{E*!Ï1—tÅiÍ!U¢âˆËI­”–Ô¯–lˆ.A›A&jÈ¿ÎV;)„µÕŒÑxu¤Æ­1˜Þ'dÈWÑl§_œA`ÿY°æÛÕ¼±ædcNhM(©4tÓb´&+ÅU !}‚½ñòòòºp@5zi!¤ÁNÃ3\¹{‰•ºŸ»ï‚úq=j"/±%´¶÷ŸHÁÁ×°ÖHj8ƒ,"eF¸Œ$Ô©Öð.6À~dBvkÅ7|M4™U+3<y–+ƒEÓ í[¾ÒÄ8áKí›à¥Â×7¾}Û?8ZÛ
v‡å˜Åƒhck£Á®Œ:ÈJëM?éûeEæŽ£ÜÖTaÙü³Ü¬‰u
„Ý)¬a*8<¸<.x'jrD8CKf˜¤¦b$aÌ`l¬v4wíAiô¶mén	þQ“Öè¨•@tÚL@8Ù–Íigm“§ÂÚrÏšùj)=k¼à
¥'÷ãX¥ÓZº³æâEâ¸f8•ª{z8Ts”–æ©%ö«§gmµIÍ„bÒOÛî\G˜ÿgN¡šm­g[GiË„ÆÕøL`[ç¯]–F$‰ƒÌÈÕeDøIØÞX[¨µ	¬iéã2ß›±&²:y€û*H///¯WùJ+þˆË„WªFX3)2Îò 5Ã+‚­V˜ÖîV?‡n~~SG\·Úç¦	«ÚXðHXëh:ÿÆZ§]«Þ¬ÅÞqmÕÚÃÉb>µqhg`ši‰Ð¾æñu’ð8Úœì{ôßâãÏ‚`£SoYš‚2"‹vÙÕÊùfo\ïÇQ3÷{èSkŽ{Í<GÍÖ$Ì™üpÑ¦[Tn&t–/ç·PzLƒ£¶WÆï«×j={òÍ#³ÕPïHr³Qk 5„‹èl4ë6«Õ^ÛÕjH œLW£þHX3gžÛ¶cµXdj¾i-ÖAåæu%ÀÚªÅA®ñH‡5}©Ò‡dÇ®ƒ×bÎZªÿ¹éjKœ˜Ljn›
k´WIAz? •ÌœŒÆìâ¼5g¬Å6‡i"ÒÚMˆP¯„²œˆŒŸ„íµxÆÄ´~ƒµ°ÍHMq,c;'™ aïe¼YëåååuÑ2 %BLÃ	<ã€0”A¢é
ƒE¶¤õêÚ:’ìÇ£½*ŠúÊ­N­
¢QV#¬1S¤ÂoƒÒ4ñ‘Q&ÉºÇB€7$%²ÖŽæ‹a™½iP¼ìÑ)‘ÒœÞ~ý\ÎçoŸ‹Þr‹ÇïcÛw<b†œ~|éÁÆÇÁÁ‹/‚n»Ð¤IØnóÏRm"Í5ŸÍY4‡H÷X9ÍIðH“°F<Ë	«5ñ¡q/ŠzÍa-ò‹Ë+ië­<zb3ÖÍ/©"Üó)Øf,¶Gß<¨ÊÉzÇ’LR+A€5VA2ÒykÒË&=kØ¶ÝŽe÷ÓYK€5c5Õ:•³„â:ÃŒ±sEgcSéÎZk lÙæ_Ö'Ž Sb;³vZ«XÛv|†—“U3Úþ½2H»$È`í§ËWÔÑéjÜñäqÕ×«ycí}	ª©µF7V_ítºšÛôNÂEý¿*///¯‹d«1’ýj‚kÄ2˜j/_‘Î¢áè%öÔ¬6“:¿rôAåËŒJ¬UÁkµn×½/ÉjÔ `üÖffG`°!æO
¬áI„!g°Ú"ÍN‹™iK.‘Ìéõó×8pu‡
ŸŠ3›êØ}3ýàÓlÐøêõW/
,„l…50[TƒÚ-ˆˆR©ì5ÇõÍi³¨Ž&¶<Á¬Ùlö"šiÍ|l[L!zã^¯’¯äÁha½ß¯‡{{­úÛ·Ío”Í¸Ëè¨Êl¶ìöqÛp0½_ZÕ”ÈJÛØ!PDeÖš®T	ŽUAòåXM¤¬fu±0ÈÓJœÕ•Hj«1òOc!Ó5ý…Ù’è¬ýK¼?÷¢Ð¤×.Š¯¶Æ_ÿµ{¥3PÍœ4n¬áLŽòwÆÛ<¡Ÿ~`Ëœž´&.›\ü4,o¬%÷­!°Ÿ+½XÔEb±9kÄ1a3,Ø9ž¸võw^^^^^ÇVûù4€P
	Lž½Â-ŸMg”>Šî@jÓYíHYm½j!p¬]–™i]t ÕTœM³d†]÷f6»¢úÛaô&[€1jÃ¨MÎ
9ÝTÃ4Çh¯MßóÅÃ‰U1f3™ïæ¾×Ólûõ÷ÿi§HÚ,W0| 5ðh§_Gyd½’;BÂ`"€›Ó|®©ÇÇå|Ôd dŽ°FqRÅÆ¾~M}o W’Ø(£®Ö ÜóÊÂHVB¢[¬FÁj+1N¤dnt"ö.û·•ÕôÅeÛXíô”µgÍ±š(!ò\#ÐÊX1éA#KöÏt9”2¾ÒÏ_jª³x-=±ùGOÅµÕ¬b´ª-IÑÌ5=¬/Í¤ï:i²ˆ±ö¢ŸÄY#²)©]v´&÷¾]ÍÏX;×,`äò¥KÜèˆ5‰!°µéjÂCžþß•———×…
™‚Ë¨pMaÛéH±ô‘¼öçÑ´)ƒÆšåfŽ=kdµ°Ë	AýÈÁèë,"úÅT»:ÈêÍ ‹ØGn¬€ì´ÙµÆœÀZ»ƒYjÀZ+ÎAÃÓRí4Õ{”vBh§ðì]L|ã¶çÎiOŽ…&ý~_ô¿÷—Ç_ü‰ÞSû«51ÖÂvñ ƒ×ÚÞ^.WÁƒ^¯Ñï·êœš†œÈ2^xÄø‘&MÇfÈ™Úõq¯X+—ëýF‹•”µÚ›×/ú¬‚¤sfÃÕÖ”Ùè¦Öà˜	a³‹Î4ÀÙáá¶ÑÓ KBk%Mó7\SÙÕHÍUA:ZKHîwÆZÊ˜µtsme`-ÅvŠ÷¬ñ>¥mm9ÁÉX“Gç–}Ú};Þœ3VdÍ^öw—:`mŒ5Z‡¶½wwßÍ.”šà—môM‡g1ýhq*«ÁWSXûñ'…5ëT“Õ·«]} ÆÚùç¬q=5ÌZ»pcŸ#æ®áê`ÍjkØ¸Ê[¾
ÒËËËëÂ£ÕÄDSM§„µèl@V£FSjé³|>?›åÑ ¶%Ê—k5À¬3ÀZŒ–Eo.€5àZõËÝ,`“`‘€œV%hƒŽ£NY(­<I µxsšÃ4Gi1@û[ŠNÐMdFÛ²Ìšûêñ»w¿ûÛ»/~ñøéF!o0è´z(€ÄÐì:ø¬U­V j­Ñè¿9¨‡ŒìoÎ`œ…„µzä–C‡ZÓçZ<Q%Šwoh|kÁUì¿yqLB£ÓµR:Öè«ÖÐ¦ŽÁUãxµÒ®<Qm—è®‘ãÚHkjª±¬é+9Re¨&Šk‰	ƒ¦UEµôùØ¦tgÍ¡š»Yâ*_v›
iöiGy\â¯´Žµ8·¥iRþºl{÷0i.WÄM6±ÐG}nˆæ¤ fU&õÖ¤ÍÉOÂöÆÚûâp5ÒÚeU†¢É&´vI+!­g-£·NxÇWAzyyy]}põÃghIcÕã3ÐÙËédDgÌ\Ã=ö’?¯	ôùfX¦r[¢# k0ÕªÝ/¿ªÝÈvÛA7°ÉÖªµ`°_*’ÇÙb1{#@U`«t†`³Å"•ÓŒÒ¨%ïK´ŒhÿÍŽé›¢ÓÌæ*$¹5ûí1>ðW|ò/Åâ‹¿þºêhfT3Ö¼µF§HËÕJ»Ñïtú6Ò£0ÄÛ<F­c„ÈÜ^¹W‡ZTµ…Æ¶5Vx-<}µO.Ó“ù»ûæ®‰§ñûÒø€ýiÒÄæ’D ÖEãp<`Ž¿¡š*iÌš£µtgM_N)e«Œkê0¥(ÁYK…¶øØ5âDBš{ºt¶·‡8“BEÜ>ÝZKOíÇk%ÚÔ¨;¥ý¥âG“1™®æ©ékTKËÌa£É–YB5ß®æµDXc»š\2
k¸\árÒåh²äÇxÓšáååõìahg~Æ.$8-Géqœ×ö.uëÙ)–ƒB$|f)ˆA»«µŒ¦^OfªÔàXaY—:*\’M«MrØ”r%{(Á”#þ`pÎÐ´Qìo'!®ýØçù¿zýj_MÆ§_nõ>3óÎ;³Ò%R.¿<ÿÿówÚ1’¼~æ‡\&ªQóx¡QËKØË¦5hØ€YÔDª ™026;ƒÕTR?.Z%^‘ú!ì¤jZ.îŸœ®Dq"S¦ãd6*Æ@3dvÀNË5È€ši[  F½ó/¿“§—ùE
Ù³‘ÚŒÌÿ,XíÔ‘³Sµ#§þ¹'I%‰‡rÇ$žš	gÉ‰ÞSIÄPp[œDÎ.¨ÏASUróWÇHoA&ˆn$73sölkArqü8M4ZilYcWÚ&¬Êðˆ“:®ÈÆ/˜Nã)°†•ƒ°'¶µ­Ù¾šéYË³Ö9eÍ³¦–.ZÖpö«ñÂ™#ã¬qÍŽÉðÕ¸Í¤4µïD4y´œµìøÇü>5kæ®žŽ–ÆýÐè±3™ÒÍj·&7H2dZ×´LÛP‹JUßå¦«í8=õÂEƒ»†P-`´…ÒÔä5…gfÕá®
ÒÉÉÉiÇt«‘Ìdï3¨Ÿ½jd7¾d£gªµyh àª 	«ÉìùaDBNOW’©PÂúÑ©¶?ôÊåýûÃ$ò¼b™qü`5XReÀÚdG!>©4[í4†ŸV©´¨åpZ¦)m%²ï\È^ÛÐ¦õ‹ó¿Ç!”¦õbÍyé=$ìÕ8jsSI^¥ÉÔ\[ã8N#ØjQ_qx6L·±ÁA*ÙmŽ/0S{q*XáË1 Ó÷Lã¬³üw3àFXÃçŠÝ€ißØ·¦E_7œ„5Óµ¦Am¯©2H“ÜZË³†(kÄ—Ž4|èLlÒMÏÁZN"$Nã¬åO\£±:	ËvÖô>ÑÔ-;QÄºÙÚÇ+'X¤'ÿJîÛ×÷Âøi›ÑÌNÊJ³û× ÙÌd5\ÆNã2•„5ÇjÎXûš
H\\Ø®öûÕ m¢Dµ£fî[=5ýà†¬9999í[ÕŽ(£µ±‘Ùj—/cØš¨†L‘á(møGK*‚k°†µéW'‘Œˆ+SxiÕŽa€¶¿XËxŒQLeŠt¹iRíù›­Ö|£rå&îy fsZ¦i#MóÙk^Óz…ç+?Çòó?x¹‰m›RÈÆ£Cç5ž?jnnèÈYØiè“~Z’ÌÔüšŸNžý³S1rC`­¥õ·ò˜$1Ø4e_elªŠ›†8Ì±j23øí„~9ApäüK/ý×Ä<~"™n\ãŽ´&Â§ÒÌ6.®4~ÒÆšH;kÐèQã«©ÅvÖlV3°fÍYÃÙbË3Ö´z­ÕÉÖChí Ï\g²³•ÖIo”ùÄðO³ÈÍ>ºìS3R¶ZÏ§@>sØ
€ÌHƒ„³ƒ-'`Dan 4i`6¼ä´ö¸JƒtíjÎX³ENãÂXMü41²Éj:]dk|ÑIl.·ÆÉÉÉiGØjèMCgã–@i²&Ö 8jøL¦9/Öš°‹‹G ‘W«	¸Qö)“	!¢$’ÅiâûÐ…°–ÆI˜V+•ÅV£5,BÚkÔõC9ÍÂ´NJÛä³M½ùÊ›Û„—¢f{å“¶øøÇO?õž?R;[ó=(ðÍ!Ëß/|?¨Ûj°6óÞÌ`-Š«£G&ÕZIílqšð÷“$¡$ièû?^„GÉê×lã]E÷ÃoÃ…Hˆ(Wí¨0™¶Ô(~Æ<Hí«ñ²}5‹ÖžµÃ …ÔŒ³†ÈÜŽ5£¼ÍÇ¶G€-OD ‡9k6ª>“…`”Yå2Äœ}Ø%—¶ÌŸž>òÕ#õúžÖ©"¹´f•DÊÝt«ééSãÒÑ¦ÆK Mž…ÚTÆÈwõ±Ãú¿»ƒ5Y¸²”FV“Eeˆb»KXRdFi`Ã¹x'''§1[íg¨vD°Hky±}î2¬5šk¤5kË¨~l‚Ö–Û•fu°†àùôÕÉ>’„$Æ!TA30×"XJ{L=kŠÓ'‹ó-8j’Î•²g¨Y fsšÁ4›Ò6ÍèƒÞÄa$ÏÔÉlïdéYÞŸ{îÅ‘½@²€òƒ„åSØ‘Ò<,é:#¬ggP#‰T¦ÊUh'2E¤R gÑTz€5Ú 7?ú›ŸD 2xgRýH»xQ0Íøk¼&©#'$:ä(ÑNBFF¥úQ_\	r4ÖŒ³f¥AZSÖ »e-ÌÏLèÂ“éqZ£4®qÕK¶:¡·ƒÀdožÕÝXl9¤fsZ_7ÎZ©õ†=º¯ïéÑFÓ7›Õ„Öx™2H}WÒ˜ÆO5EmÀ8õˆÃ•@î@}çI£n=¶ÇEØh­ÉÆÐšòÒt}$ùŽ_çþörrrrê}[N°Á" 5t¦ÖøÌ‰j—qk#£¿10Üh6€mèP«Æ„v`À‚„c¯S¼K<`--&HddÉƒÔ¯ü¥æ" m±’1íZ´­CMsš±ÓLÑãJÛÊh†ÍÞåAq©úsl” ›e´A×Î_ûâÂ…/N<744Rðüä‚ Ð ku˜cØú#>ü½‚vÆ+âç¯V13tcþmµj,Õ¡a³~Öeh9~3årÉÃ‹ÒWìW“Hjkºi;ˆYþ…$1cd\îxÚ”Ùpž´¶ŽYëçÁSI‘ZVÀœ5S	PSg¾³& ’Ok;Â\ƒê¬e…5n-ìØc+«ýQöèk½ÉË€ÌuÖz¹<ßüL7" X3mk¼Cz‡ÕÀša6]õ¨ MÄÍMWÛÿŸÚŸYlVS‚¦ˆ§I1kÜÉ–¸['''§P°qŽÝi:k/’Ö kxFm$ay"Kk¢oOOÃYJR¸i^§±—0 ŸˆB…0ÓXîˆO‹ÅrYÁZ1N'[)›ÓZ­ÜÚÇíœYvš…i¤‰.½{)S|ÿ Þ(Ùxlê‹_<÷—×.\¸ví¥‘˜gIROoÍçì…ÞÞ=…RR¬¡gÍÇXe©çþ4ôHs¨V­V8y Wg§ü X£Øæ¦Å2¢Wp”\eŸ}5ÂXí"oxÒ´Æ^5Âmttt¡&SDÓ»¶IrŠÔ²*!í¦µ|gí`Ÿí¬©¥Ç'bçÇŒä«ÓYS¹Éfé,‡´÷†åìÃæ4ÙåË`e®þèkX÷88z¦;ÙMk¦WÙgdA
¬)/mk$VÞ±¸¨¾g¬u/¢&aÔ´t¤,ŠËŒL ¤ºðe®ÆÖÉÉÉ©·õÔ÷ß_­q¶¤ôÍÛó
Ý@m 5t³!Zdpaýƒ¨6°<pòäd”$I˜Â_KÓDŒ¢°5+E–>¦R	ÿÈ§•TLçÓô¦
QKV˜È×j§u`Z'£=ÐG—.Ý¿ôÑýŽã#¾áG¢,d£˜IBñóÖßýæµ·®ñKüÃB¡VS+–ö€¾bŒÆf=$'à·á1H–Ô›…<©õffü ÐÆìG? Ÿ¦Å®ó¿¹zÎDPƒ±vð­ÖÐÍ6²G©r<NXZãj–Ñ­·ì9k<©™€*#^äàöäþ¼V¨Ní†¸ôÞll,¹k–³–ß¼fPM_æÈ¶Òì/±›àòzÕôaû{{ö¾gÅTë^[»Õ¬N6I.S’;ž!nk<M5$…§c‡ÿüOœ\¼HF¸H‡±¶Kå‹ð’P=Pc¦mžåcWéäääÔãå2{	˜†j/./·[óK|b°ˆÚ4d”ZSÕNNãj7 "),ö|µb9‰šÌ?Üm!%ÿ1,{ÀZ²X[‹Í–®}´šÔLšj6§¢¦eSšèã>þz}¤¤½6È®Œ$³	¶½õ‰ÿÉµ/j¾_(x S°–¢žõŽ…R©„‘k¬†¬ñ"C¤Œ;!Àµ^ãÕŽÀ¹ÚÙ …ÒZ9äÈmCç.^‘Q5¹LÇ6ò!£úÕÅeüA›Ú¨f6ŒÄ>l„·ÚZ³ã •áÌ³v—	ƒÔY†Öºš³¶»W{Öxå+ÇYË’m¿{˜³fS™EÑÝ:kÑ·¯ÖwôØ™o(«ìÑl¸—a4Y4´	šÉF±…-Õæøá~àþmz‡5£v5µ’Õ		Çm$öšîN³‚ú•@j(—$«¹*H'''§^Öw9ã	X“ö4 ÙÂ¢xjÔ’\í
am°Z›>9„ÏV™ddL_)Ã”Ó¨™„È!†Iš†±GÄ	f[­+‹(€¼’Súh@­ÃP{Ùæ4ÅSÓ6	M3šÒ
Îë_¿¾rÚº¬|,—B6mšØ,dÓÐöÖ'µÿmïÞ @‡0NÃÂ^?ñ¼…Ÿå„vµ!ŒðCH@k`³ ¦Q=¬EøBoŽ?¡Êlh¶a[*x^pÕÀÖkò ’ðþª©ÆšiME÷«E¢EF5£å:k<©Cv¾ˆÈîWÎšÁµ.ƒû²õ¤³†+×\Ûm9k8®>sŠl+Í¼ÉøÆ®" Í¡_ôt»Ú!˜j"eŸñÐnš\v^?$[a2îu"¤Òoí_Çñ¡£5g¬}ý@ì'Ô˜5šjØ¢RÏWãll])W©ñ$Õ¹*H'''§žÖŸ~Ÿ ¶Üš?]FªÈÒü25€Þ´¶œªÆu`°6Ýl49=69}æÚà4`mÒCÍ_‚eˆA«†´—B±‘öøµúâ_-š4¹Œ¥f×>Ú†šÍi6¦QÒ¨û÷Ac8ïß‚VV°l¬ÞÇº¾Â§h4Gåõã/Ñ®Æˆþ)Œ•‹ÁŸxâ9°V°Vªy1È´TØãƒÒÊä0/ŽÓ¸^O\¨—”ÊG)”LS|›Õ‚rvö^rñ*ãù!ñÓ®žV©xà…h¨AŒÇ^`Ít­qÁn\:Ú:`‡Ü¶·¬ÚÝŸk×¨>œZº…µÍÁ™¯oâ¬e1–•™v}]kû2^ìƒz¶òùG0ÕHdÆZS‹l´¸ãM@Ê+$BYõÜœ=:ähÍÅ‹dK`M'Anb›°–'Ÿ|+ÎNSMí7Ç­?îâkœœœœz:Yä¿ÚK ±ö<iõ­eàÚ"\µv»±Ð@äb£9Ûl,/‚Òš¨†ÄgXj`6Xl˜¯†Æ« ›DGdª}3Ú4‘Ê(ÿ[,Ô¯,„™#¯mKíŸ ,P³9-Ó®+ÝÚ¸HvçÆúÚÊàlmmmåþˆmeí–<ÝZ»…GhƒP·ïÓÈf›A¶kI”ÔäG‹°Û[¼‚—¤¬ö„5æ×†|N.(ïÙ³G
%÷—¥y/ŠAjlhCOÁZ9ÓÉÎZ¡T Ú"ò/½s@2IQ´vdvBv@6~B—dÂžPäÒÖšÜlV#¦e;kö”5‘b5©ƒÄa£.HçÈgÊ¦4¹õ¨hæÃ´{›©Õ´ÙÑ#ÙÙÏ]:k”Z½f‹öOª=*®qÕØ¦Äg¹i>ƒ°•KI¡™~àÁ'´«õ?ÛøpÿÑï9Zsñ"Ûô8°@c$YI	Š©2ÇÌŒ‘]Ê[#³ý™Ë¯qrrrêÝºúåÅ–;¶€hkçà²QÀ¶eÀÚa­YiÖ+ÃKÃï«ÖªÍ8i6Æà¬ý0LJÔl"÷0¨ù,ˆLŸQ,‡­Eov¡u³µˆVµ¬ˆþ¬ÚGj&GÄæ4ƒi†Ò„Ì”™$[ÿôÆ­{+«+k÷îÝ#ŸÝ[[_¹‡Â²²F)b£ÇïÿX”l·ù/o4¯$ÓÕ’¤¶?¥ÅEµ’ß­‰™s!Y­T‚yNÕ#e«ÅqP›Š’@Ä¹j)T,øk'ƒÀöê1¡µÓJ' câ¦©ð~,ü+Gc#­_¼µ„5ì%É_AbííW§:Ì˜5;òYÛZ;ZÓRe8»ŠÓêvêUZÛ„™uï¬å·²ÉšKvæ±{gÏ=kfÔ?>Z"¤5[ö†Ï¸1¬¦šÕøRöjØÚ‰Ã‡öõË£ßsþÇNQ×Æ8í1.LA	äOÊfKf¿rÐ°çmªiÉÞýg '''§Þ-œ1@ÞÚüÒeŽX[Õ 4šøk³•f4Æ¢GŒÄž q¶u H*ìYójA‚˜þf³Zõö@aÏÁ”µôÔ²AÊ¨}´@-ƒÓ¦J[¿³¾òÀ7¡m¬nÜ»w¬8Ø(¬FkxÍo“
Ièºlø£Ö>¼ýæOÇbd‰$Lw¬Ë¤5/ª‡Bk<ÔÖ
IAñ'¾*©¿]¯#È?ùË¢ÄvŒÓ”ÉþšÕ8P; ‰áÔl&XmOd8¾¦øE¨ƒFÃHli¸=éç]w±Y]kê§¸Ú3±5¬m«‚ìã“²¦zåZÓTJãh¬áìÒY3¸ew­™Å>»·Ö´“ÖyàìÉnµý£'ÎPßžÖÌ¬5ÜÕR´¦]5£°&¨&¬væÄèO÷=ßÏI‡ý‡­¹x‘íýjºm|&½kÜv5›|†‡m°¦ÒšâçäääÔËƒ°ÏAK[ÓæÏ]ºµ– o`5¾XhV8]¦»ÔÆšûÕ0É(5/HðÀ-¨ÓV¬MÆ"†!¾­­Ü´KÍZ>¨esÚ
CÄ¬­­¯®Ü#¨­®Ý¬	‘­|¾JF»eÐlóâ›ó_­m6²_°mFûß~óö¼î¡#¯…{ [!ÜÅýiº?ôj>eåB)Nà­Ïª²EÐà†Ç†kDk3	YŒÔJ‰­ÍìG5›mjªòq|\Ê"a³‰¯Fá‰“Öˆk›"¬Q
Ø¬
H^<-gQMÓZÎLl0¢Ó ógbo«ƒìqië)7hÇn, CdØt×ëÖ½³Ö»“°Ÿ9<qæÿMÚH£¸ÕÌ¶%R«³OMoÏL€Ñž?Ð×¯GÓÿÀ•«¹x‘-ÊS«éÑj†|¦šxi¼	Í€šh3&ÒÅ‹8999õêû{ÿ+À5@.´[ó—¿bä¹ÍÑØ¬‚¬pvÍiÐ$L¥…6Ò › ÄÑI¢Ùf%ö’©:^TñeUXM¥™·“„žš•Ñ¯@MP-ËR“ÔÇlP³9M¢APí¸qK´T™­ˆ{¶~5Ž÷VîÜÝ)Ý •­®l|~g}0·z÷×wïll¬ÿþ÷ëw>ßX_½Õa²‰4±™¶ß‚Øˆk·ÿ}¤$³³I23â’$ˆ«°a,Vªž7«QX.Ñ8c¶c"v4•$åRX¥¹æ±gMÃZqZôf¤ŒøCC~ð?§/BªaMÅ÷3 ò®ñqiU#¥8Ž“3ÖXøH©¬þQÙ`áÊÅ6¶³fUAòÐ¬f;kîß:['ÇgÃ@Ï‡‹ØÚO3b™ZÝš-Ò—qv-]‘Ùqôbäó‡Œ©ö­¥+ ­~5¬j¶	ä"—Á5u«=‹|kêÍþ¾¿p´¶#zÁ»„5`šF5±Ó k´ØHi¸ä®VÅg 8A¶­	#\œ±æäääÔ£ƒ°/#MH&ýèL[”Ñ×„5–@.7h¨U*(ƒCäã4ü!kƒÓ`µ¨ÚhV0\MYÍÈ$0’&At•¸\¨-Ì^1¤&²‹³-5ÔÞ…lN£¤+˜F[lCV7Öh¦­âÖ6>û•÷‡•[¿+º¾±þ»¿½ñiÁÿ©ïßXý{”lþìÆO_}òx}µäÝE›‘¶Ø,^ûí% ÛíÞýàÃ¡Ú\svnOaÏÈ¯¼$J’jœÄ Ô¿/FÙcè±82¾áe=ªpÎ0‘SÖÈqˆ“„‚Ml,†-¾cÄ÷.Ö`¨q¡.^Et?Yü:#­‡&+¢51ØØ¿¦MÞ³½µmÎZ'­Ùù"íè~…kF™¨Áj½k]„BJoØ#(ßX{„yjy±z!È³ïéŽ;6Ë|e2!)y”\J3WÃh²åuz‚5 
²”Ì€µŽÖv€žún÷Ib¯×vá”®5Õª†G„gJw®aCñ•Z]¼ˆ“““SÏ–@~õ'a/·-rni -‰€jÈï¨C*Ìõgä$Ê›mô«Á7jŒ¡rÐáÇRá7G6©V§ÇZ7«å…›Wš³&OÊ.~Ì°Ô2AÍâ4%°šjHƒÀl«w¥úqZÅãI5ÿóQ<ÖLâJ¥–@”?KáqÅuü‰"Ærò»wß¨Vª¿¾·zHxtº&"náµû µÏ~yûög·¿|q¦>7´·PØS`bˆïÙ`.ÎFÀWæ«TRÃÖÊ“pñ&ñ¦|&>–¨Š#90Ï…¿·$/ÉÙÙAm¤V9vtvbâ¦­IÎˆÀÍµÑ£ã£‡GÓSÇðë	²Ú( "µéì~®ŠØÔCNÓš5Ãjvtÿ3i;krl—©‰¦×Ë!»ÀµÝ–­õÜf·´ay4gSàöA=•ÛàÿØ;ŸÐ8Î4ÇIÈ°“0,»;¬»åîÝŒi‘mÊÊF¨¨jS´XQtu©eáBµßV»O:ø0j„Œ½‡euÊAK@È‡a`&° Á2s™UÊŸö"ŽlFÑç¸Ïó~ª”TiwäL”MÚßÓU_ýiýéx\L~yÞ÷yß»Rþs}´žù‰«&‹vÕRc}Ô &úOíè•‹çÏ_œàsËH ÑKŒ·fâERg‹>€ÖÀiØÎ¼™ØiÒ¶†J´¤ò‘yÀµ‰1222êÏ*;>Y˜Ç8ìùùPÚb}©€”"Èáa0Z,þÓµk÷G†G†¯UTõÆ0:Ñ|/VHíYÀœD È¹IÛ­ŠÜGoñÓ¶TËZ·âÇ¬¥–5rÚ³gÿ‘>jRÛ#LÌžv6wíìt¶7ÿøèà ÓÙŽÝó#˜iw#
å»žåVr?ì­_V}€ÍÐkTF\ßÝ¿åº·~wp÷×g[iìG°PBkÏ¶ÿðìøM`ýç]¯_G	$ ,Œè“Ý¦á÷4Å^ó	…0Ó,À *F­R#v,BZöRIùaŒ³¼f*dBBZÖÖà©ÑJd6ý¾¦5Fø“× ³¡òvN[›`Â9Möt¥8m-%µô•h0c¬e“û“¦µãuÙ¦µE÷Ó™é{%lÚ›ÖºóÓé+EC´z'‹ü1ûÜ…÷FÿüL‘îwˆf<@Rû¨u¬QÅ£¾Ö%“3Cïòa+ã‘¥.ÎÚ•1Ck&^„b»EL#¹ÕÞÄ]ršžŸ–6«éC‚g\E¼ÇxóÊÈÈÈ¨ÿ¿d®v°Ú‚Ô>¶ÿí·lW£×6sMœ¶J`¦Ú5˜lK« ‡-.zå‰Y•SÂÚÔÍš½øs˜imÐZ{œöõ¤öïPÖRK{Ô²•IÿŽÔ>v:ÈáßfÞãþ?nw6?¿»t°TñÖÕ ­þï-?€R>*U1gùjkÿVÕ§YèØ±ëÖÝ
|6æ¦à×ìÕÝGü±º²#–¨ŒøÉö¯>ÛþÍ¯˜œ2>0VËå‹ 3Âš’)ß…‡%
aF"QÄÃ×TK–%–Z"ÏÎÉ€5Çj@¤5$IÆ 3ÀÅ*H°„{0Öfææf÷(s°‰`<… jeqÖRV“7ù’œÈ”Ôä’·ÞÎZj¬¥Î^)§Ér²¦µ³¯ŠÎ}½»–1×NØ²<˜™"ÐgÝj.\žü#EôšÉïg—šL¨íhªˆ¬iªˆÜ™ãs::È§sÅÌx.ùL^9?Xž0´fŒ5ˆFìX“Ä~R[Ú½†5e5J›iom[{Ûü}2222êÃvµž¬-Ì–[€µy`ÚJ«… h…±Ü­Õá™E~e˜¹1ÆÂ#Í;˜#æYóá¬Åv~`Ü^~ XÓ:	©ÑRëj™ÒG=âºCTÛ“ÔÆÕM¶¦íoÑÿzŠ°þ­íƒííÕŸkcãêõqKyãvÐŒ|Ú]¡ã€œ\VÖT„ÉpÏS1ò­ÈV‘Õ \•Ç¼íßoì '2m_ÓCØ>y¶ä¯®®n8¨`„•èLÅ9ÛQQpœµj!o$F„»úGR>±ä7r9!ºØ*iVSäF‘“ó
Z€7¥»Õ(‰rãIÉ™„SVf²È˜°]5ºl$´ôÅ'C:s$;iÐ–uÖ.s×J5MkYg¯T/,ƒ<÷ª¢¨ž¤ÆKW’:wZ¨–qÖzŽÁþ!w^*ßþuÈj<è“tÖEX¸Q‚l‚iÜ(}&Ë‡ÓÒc:	Pc%3qýXŽ^Âú—¯õ³`¬ØY#¬áEb#¬q‘
Hö¯ÐÏx0KóE¨$ÕßÄ‹õØ?l6¿ÜZ«-ÃY[Ãµ†µáV‡kõVýêPm•á']«ÀÁ5ð
h­ˆœC%Ùó9çÁ§-éSû†¤ÖÔvtÙãÖVgO¢øÙœ¶´ñùAçóý=ÐÛ£íý­ñõ­ÝÝßÊ¿…öG½Ð¶íÐ¯Th¬Åaääå “5Kƒ]­°î*%žaHX-Xrëù¼s¯¹ôÇÇwá®%¢‡IÀšºµ´Ø6òúÅO´ƒÎûÏÈm¾²¼ËAC  FØŽüeÊ%¹  -Ç*•<¥TAŠ ñ1
´Õ(Äü#¸_{jà4œújÐì|6m¤Í@“´ÍxH2 mä4Ùè¹õˆƒ$©q?Šj—3#’Ü¯•„‹ÈÞÛYë‚¯Œ¯Æåë•škÃë»rÖ¸÷R:Žà‡BkçÇfoŸŽ’Ð~Yå:½V#©‚Û—ÞÅõöì$g×cÅ#;Yž@÷š~,±Ë‰¡µ~Ö'Ñ°&¬†§\µ£F^ÓQ‡xÆ#O{ÜÞ4ñ"FFFF}§wþ4¿Ün#ry±Õn//·—nˆZ&­Õ[#×®GÍÖbÝ­ú*â 5wÄ×ƒÂ¬`Ê*äÆÇ¯Q½QÅfÛÍ–…ì Ú§Ø2¨Ö‹Ô¤K-µÔ²ŽÚ'°Ô@iÝg{›wÛÉßZ=@AäöêÖÁæÒ½;àžÕÏ—š¡¿¿97ƒ TQÓ¶ãÈ­£•,ˆIc¬)æŸø¤5ûêMTH*…·`ï]y¨Mœ
‚{·Ü%ÄI’©G$t~KùWº<Ü1°]-†q±Í,L¯Zñ%Ï‹Ë×3è,;çÅ¶í8~³]³Â0”l¥’| &A*]	dSÊN<TÃBPã..› ÷IYAhL†„Ñ–Xk©Á–œ@8Ó•%lƒÇÒû©”Õ4¬QGŒ5QÖXë¢^Åtý/2No¥~WÖYãÅ)ZŠ†$EœC}Synpæt8íH§Z×xH­µ$Rt$ò6ŸV$¹ÂÇŽI‰2 ±¬O­™*ÈTg$ºF+!yt‰¥Ä–¯¦I}¤‰1222ê¿h‘•y$@"WdZi·`¤!TdSÕx
­¸.Ý´z«=Ì¼þ¨åÂ ª¸ÍÀzØœymÃL³ª7 k?W­–Q¹Në6ùú+Ñÿœ±Ôº‚šhg÷€åˆ@¦­‡ä'Hû|)ïìmæœ¥»˜MM»s«ÕŒî"-$‚TÅvÀÓØ©Ýb?¶P€¨p×K‹¥âºL£ïMÝl†Í-­Øò~ÈÝ¥¥ÇI1d§X[‚WeZ.ÇT~eXJâ-Pah­J9 zÒðGˆß?`ÛH‚t ö§y*ìÅ>‡’1ÐM…°ß,¯©
ÓD¤R`Â5/f§g(’$ÿ¶7Áó	 Û˜ÖP†Ù^4;ã¬fóE2=kÚWK5l©³Æ½{áW\¼´LÌˆ¨{ÏÚ·×ÀÖíÇ§÷©~bµ+Ó§eª%uIF¿¾‘\ÐQÓwµ”×°|8=	ñi•a‡%â¬¬am*Zë[½®µ—è[c$-5¤öãˆý-1’ÀšèèXl,©»fŒ5###£þÒ?]i/ßg®R çïÖe&ö"0#ª¯ ÕîWÜÊð
FF†oø*ŽD´ŒÛ©Av€C,—6Ò2Ì´L£ZÆTK<µ,©ýkwR#¨ÑPãÞÙ‘úÇÍ‡,NÜÅ|´[‘ŠW76¶>".±ÅªBØÔŠ=¿RgÍ#nƒDbP¥“óÐÈ]Ýžæ«B©h)ÆWÖ˜âÓ«ÊâÅ
Þ³b?âè.imï`#;€µ`* ÿ†¤_¾ÎÉçT„/uá+ªÐ¶<¯QÓÑó]|(œÖjVÓXƒç5|(
=æ÷ãÃ†J©{Ãó`±AÃ„³$]ÆqÙfg5©ÐpÎk¤÷§ùé¦l]æbcËÐZ×º;k³–²vò2È³”i\;Žk§è¬{±³vŽ{?Åõ_›™»}Z¬F¥çD2MkrËäpÔkí6Y­¦€3yŽÂå°6Ê'ô2šHÇþÆÐZ¿êÇ?zYX“JHŠÁ"(|„ˆi$1RTK`-¹G’{ç5####£þŠY9Œè_Ã¾-ÏKéc³µ‡ygìÂLÈ‚P)Œ k5á»õÀ!"-ÂR#§}Rëj;;Ÿì<¢dØ™¤|`ÙúŸíÎîNg+ˆB¿
ç*–YÔ^ñŒ0ùà±å=?¥Î¦@ºUÈ”Ë)?‚à¢b.ªÿˆ§ðñãñ&îÅ
7*˜çú!7©oŒîîwv7·îíï¡ðrw©„!|0þ(ðC­:dX)á¨…¾_õÀ±ÂúÃ›ŽåXàµÖ[Zó«>%®h\èúƒû•ˆ,J…ÆÂÇ”>NJŠ"ç4¬É†evB!¹'¨&Ù„êxr¿lP×äþlt?uÔY#«ÿjÓÚ×ÃÁ…‡¬ÌŒì³²uwÖäõí;kú÷ª]šSí4iíè•F3îPBi8$U”¾€X)°FoMÎÁmå²†6]™üÞÅÑ!Ck¯z¼È—´¦ÛÖpøÒÞ"°Ä¨ÃTF¦©²
ÈáËL¼ˆ‘‘‘QŸMÂn¯@<yòÁý+€³ùy)}‰ñVƒÔ@.Õ
XÍ­0¦£U©Ô¥±ËU°±j¹RU}-€\µÅåzjÐK’)Tömj‚ÚÞÎÁÁ£½ƒý[¿~¸µñxÿ^àyì›ÿÅT|˜Ì_¸Ž¹gˆÔ¿Jd³¦}„ (QÁ³ìPÜ?%B70öiÂCËçÀ|Áo{üÀZÝ«…PÐjqàüê£Ú½(|ŒÏ°5Õl6ËCËã0-'®6J<¬y’Wâ»"ÔŠüž¯XbÉ©Ü!*rÂZà3•
E|ÅÒHÜ¬•ÀoÕçŸ}<X£FDƒ°Ø’H]ùˆ3òn%ˆ–uÖºkT6’¯c´v¨nÎtéhrÿ»ÖÖNæ®aëé¬ûF€öbgê_í½ÁòìíÓ,m_Kü´ÔJãÙá0µdKÛÕÆÊ5ª¬Ë–q„>ÉÓò¨&cÖ¬µòßš^£¾Ô?z)½õ¥±ö&à‹Òk	«A<JçŽWIE¤ÜÿÉkFFFFFýÔ®ö§åe†>
«aò5óçW 6ªµWîÖ¢V{^ðU‘Ø]WƒŸdÅ€4ˆYÀ‹Ÿùnû®}\Ìõ¤v¬Kí‹;Ûö@lûìVë<^]Ý¼äºÈÀ÷nxŠ¥|.W«‘ëâs¹1&ž]½>`9W¯^ÿ‡ññq¼Y+ùnZEO);ïy$§{sÊ¿ºn)DøGJ½šý_û„5ü#ò<ŽXb¬c|M!üsgw)‚¥Uñ"q0¼Qò}¼eŒ°M*íb	Ÿ?ª©<I3ÎRüR¥ÂØoÀGS±åäÙÇVõ•'CØ*°Õ˜ÖOXÓš£ k““	®M0Y¤M$¬–NX;¶uiYKÂE^/r%ã¬]ìê¬´†ÍŒ|ãJHª·³–^œ€ÓNà¬õ.üAuž¿<–É9]gíÑôµF4¹äzHgzÅw>œ›:ü+5>¸CƒƒBkú	|÷ü{ƒc¸khÍÄ‹ [„˜F‘Îˆj¼¸%¬ž¤S±±Qâ²½ýš‘‘‘‘Q?±šÄŠÀH[ ªaðõ09w`©‰ã&!#uk0Ø@/­– ‹ÿša£ ŸJ)_5ªÒß#§å/&µ.]jpÕö$üqgŒv66vwv6Ó?å¡J…ªòT¡Æ±ñ)ºZ@H¹|Í‰‘è1~µ˜Âµ¬±º±è×Y®X²b°5Àšíx>ÁÖª(ËŽÜ¨y‡•z uHîßùl@ƒ,Nýæá0¸³õpÉYX¯Èë·ü‘Š_å¬6ß"Øù"Ä1lE°Bü‘ëB‘«òäÇbÌÒK)„,5ªÊ¶íüºcyd_ja"33s@¶ÄUK4Sž@Šœ$÷—±È5šli‹ZúJYë1^ë6[£ö—îY» ›³öÍa:{áì	œµs½A­·³–f@öG´ÈùwG'O‘Ðˆf$2^¤#BhXä--¹É‹Ó¸‰nKˆHY`Ž8­´1™‹8xiH&­áá»<Z½reã7¯Z{ÅãEk$5ìºð‘;® Ý´–8kiºH*]ù/bdddÔO¬H[˜G¾ÕV>ø`vÚb½ÖªóØ&¬¹€µÔ’Ö©TÃg"‚æ=¸FP›µiøcORû—¤–?¢î-jœ|XþÎ^gß»·µ¿êy "[QÀî®œçWiLÉln|>%ù
(çÑ÷ó­<D+„)w¤^•ÉjëÖ$ÊÒ
¥àµÅa„¯¢§»j‡nåâ( o•JV‘û·ñë5ÏjK¾g¯çí›Aè8YÖeâJ\¨¯ç`©áƒå "Ì3?âÌ 3Ûæ½œ%q&!ü¼†¯ðu6ÄlÂfîþÇœ¥†BÈd&öŒ‹¦Ê³ï£WxF`#qh“¦2®YWM£ZF)¨eX¤–­‚¤²#±µµ–Mî?ÿµ´–±h^yk8œ Ù4Oíí¬ñ¬ûë„ÎÚÉ%˜ù}&µKƒ§ë¦¥ÀF¥ÆLì5½`K®ð—/¡í6ë	gI$žVXhc´Ôd¼¿1Lª^¹2ö×†Ö^åx‘3iíÌå §Ö¸%|öØŽÎÄ|3Æš‘‘‘Q±Ú…aØ­z{±½ðä	¬µV4rŸ”6ì¶ÚXÛuqÖ*Lî¯À¿¢r^CU«Œž/4FÚ.f³= «%zQ£ZRËDôïìîvvw™–NÛÝü|³³³ûÊc• ç‡SÁ¿i£Œ™Œ*jN¬<¤©<|4|V—ü…N»PÊ•ª€Ä8þWCYy”4÷B8Jw”µÀR­/kjêNÐl…QËã®¬¸	Z- ¨°_¿j+7Ìç|W­fËe~¤KÏÑÕÆZm<f¹u¶V€|7Œt¹Êâß•³¬)@ámIîZ	n?AV‹=0`=ÿlnfzv.ñÕæf'N0H#°I¿Ë‹ ‡t ÈDê¬É!{q,^$ÙÒžµÁ$aäXÆH¶e-­ƒdÇÚqcíÂ‹µnÞöWoÚ'm];g?]èù%2 ¿Çÿ{]xïJyîô8-SÿH“+Q:Qí˜©&Ë‘–5\ÌéHì"]ÁŒ~‰‚ÄŠ7h­•eÛØÅKï–'þÚ¤Cô™^‰x@2’Ñý‰„Ø i„5¥YMÄë7u$ÖäŸ˜¿@FFFF}£7ÞYXC $ºÓÚõ6ÌµÖA¶Ýhdå>^#4ÌØ²æ2ad˜¬ù¾gYùR¥Z½NÙ5«ÑþtùÁââƒ“4ª}-©Óvöv·;7=ÝÙ‘Ijû˜—mm­æ< œ}ü^Ô8ÚV#¢Â°5U«åsÞH=tÖ4®UØ„ª&YTõ=Lž®‚Õ”bj¶ÐÁ÷ßdŽ$`­Ø¨ÂvkµP¨òRy;À­5f—pŒ\‹MziA³ c6Ì½¢Ê*Â£ÃW¶ê‘
ñ#8&À"ßYÊA3[‹9“•j£€"Qdë 8²¤"˜o5Gùâ»~V­Fq©“°X»Ê`ÍÚ€]‹>ûìýÙ9XÓ°™Ó?;7=Ép‚	=BWÖòûÕ cŒ–Øl=F­}%r»€Ú I/Qj¬¥5m­¥:yÏÚYÈô­õT‚jß²³&ÛK*ùôß?R;ñIí¸—–WãQÃ™6ÎprLÉ¥&5l·Ë_öªÑ§½†M?¸3¼às=YºÌ”xmŒñºøW¦ŠíUŒ9“A&#Ø±I1$ÏÅYKBúEšÎ„ã \2sÄäöý¿éuèêÇG$7ðÆ7¯¶¶ödmae‘)"ˆY[ ­ÁP‹V¤
Ò¥†y¬ˆnÜ`€¿”ZL¿oÚSˆöÿôÓåÅå9ý)©A½I“Ô¶·žl?:Øê`˜Úæïv6—”ÚXõcpš§”ðZ¼dÛŽ‡HJvž­æM¸RžÚx#bÍ¦°YƒÈðany«´+6+(–´@K!èï( \1¾Wˆµ¦$p	r©Rm-N8€µBž¿¸Ù„£&ßáq1ãyúšÆ~!þ ªÕŠòb‹l…ÂHä‡5; 
PÕÅI‰gÎMü£ÙŒDi3·ÿc=eÖè­M“Ùfg$ON¢ E8c¸p×¬³¦×²¬Ö¥e-›™°šNÉ´¬e¼µî´fX-Á5¾N¨oÛYKïe$–à÷Sç.M”v<ª?qØŽ šô®%öÚ'ï$9LL[ÿOëÌ,®àO_­<3=­[Oi•Ï¢'•ÿfð²¡µ>K\>	«‘ÊÎ­‘ÒpÉë·t$@ì-é`ƒÒpb[¦MIL¤‘‘‘ÑwgÂeo¿ýŽè§|½Hx_ô6‚¾€ÕÀjkhR¨a¼F˜Ü_wa£]þm >ó«ˆ€lÖP	ñà{yFÖ¢æÏô6Õ²‘"½Imç`»ótw³ótogï`À¶ýòîÒÝÐ¿·µ•‚îˆÇ®.Ç‰c@›bU&[ÏšÁŒå.zE€”Ìõ«®*z‘ŠC·R§˜Saœ³\Àq³¸^‹#´†·¬¿³8ÌºÅù›w,åž,¿â‡øÉ!Î©¡ÇÌŠê,mÀ¦³jù|l '?Z…øýS–Ò¼‡!jÄ0ß¯àA{*RpÖnÜ /¢QŽÝo…U?´“!MÑŸÃd5ß}°`Žé#÷ßŸ{æ³ µ³†aØ`6ÒÛÿåOFé
‰•y%æ+ª²IIÓšÞ²]kÙ1k£Ýæ¬¥-k©±–Aµ#±I&òå½5-a­?ÏY“Ûº¸òìËØiÉñ{Ékç‡N1¦ŸDv$õ1¡4JE°HW¯qàN¥­jÂjúzš¥:ÛØ•Ñ	©‚¤&	kxôÊ3¨q.Ó&ÇLèAlel†Ö^½x‘3BgúäÕ4©Égªe£ 	g\õt59åm/bdddô š´„ÌÖ¾X[`VãóçÏŸp_ûˆµÀua~~aúâ‹çÈÝÿâÉ9_Óß&äFëíõ²Ú¾c°kF|pÿ>€®-¶­!å°Ux w Ö”e¡w«Q];#°Ô2¦Z·FµÞ}jˆèßÜßÝãÌëƒ‡·îmv:wi…bÂu	Uä kæ;z!(KÅHÜWÌi†w~üÅu„øçÆób™ù®:Ìxt!ß÷ì©ÀÎÂà`µ¤[¯ÔýâÀßçOÝÀbª£[,´Å©©0Ò~[€Ø|·
Áy˜6Ç0™Ô¦,ÏZlÅ5ÇWA :3g,†Äï°Y.é8ª_­ÂÏ“ÃØ7P¿ÅÊ)ÖGz¶S„r–×høQùÊox¼óäcÂÚa$#û§gg¦µÕFZ“¤‚2ìÐZ#«a%­e!å[Ô’Wv*öelTv&v&a$ã«éÕÄAö4Ö ÞÈÖ»‹í%œµcø¦ÆÉ%Æ'–ï%¬‘ÔfNÓ°iék-Ð™^…ÐØÒ‘×<tKBûqñ½Ûx$ñX•ù|ò¡’¦5hvZãò žÄòÄžR@ÛôÐ¿’L4´öªÅ‹ Ï+‚#„t
Ík¸Ðs±a™‘ÈÒ)Ø)¬Q‡w¸š*H##£ÿcïŒBãºò3Þ,Á¬7KYºØU3Žw,Áì¨ÚEä23Ë ¡â¢kg”!Ã·w(è!¥`d‚Ó5…²¥í:A¬!¤IJžU?É/Ý—Å}~êKÄŽúbAhëÐ§þ¾ÿ™ë›¹ŒÇ»Êjóiî¹çž{gF)+š_¾ÿùþ^G& í£½8!‘˜¨ÌæŸjN³ƒ;é#Üá#+ºa§Ïu7Ã¶gd·}ñÿ<«´~ûè­m¾M•¬`¬m×êXhídX¯ÃDõmQ‘‹É°‹+õ2T‘DIœ¼^‚ÑjŽÕ/d£ÚÃHm—àGò>¾CPÿ.é{6oÜ»pãæ'¨ZŒÕÇ¬h)‰q[¬¬uëQØ’G©ÖÒDíŸûÙs3MÅë'¤5²ïBmP.R®…ÅóçÏ5•$©GD"I¯Õ»aaæ¹ÕG*-2Hb`˜+•nIÓn8¤ôRYçk<¬–FØrÚ¶¦§/uƒJ`µ™F!ÊÉÃ×+ž#h„¤õxÓÑnk€XË•Š	6ÝlÐx±QBœ@‹Š\É9lËUCÚ²fÖ¿~dÛxà­u„`nçKÇ2FV3k-—™ë‹½¤ƒ×Ô=k†j¹èþüžµE4­rº¦å~CaA'{=º„j(ã¯/wÖÞÙðC­AõãGj‚³LãKQX:~1ûQJû¨i„ò˜jI£&b53µ	z\®T[œÁ2mRCŒ;•…ÊÒ<Ä†A¾¾1¨.uZóóÀYçßû¯oL¼ñgwñ£l6u\C š	f›(‚äÄÄÄ,½sÒ§‰zyyy¥UFY‚2&Â58ÉAÓIOHLÜlSžÛ§ÆjÖô²GåÈaÌAnŸo:l3h3Vãxöm"k†mmÕºÝm2EÀ™G¤a kœ BÅ,Ö£þ¥ /½þ¯/4Ój‡šjYùãÔêG´»{ ¥Ýùðã=t\ûßŸ—?¼p\*(’g‚eVdoY/Å¸U0V9"˜_U‰ª@|©É¢xG}§‡@¥¦í6%œ¼Åö“……äü+ÜŽ ·„BCø«¤$È¸øÜs3…POñ>’ÇÃ‚h-I0Ë’>ï¦7› °m;ÐT†|÷Ã¸¿ÅOÅÃ~¡ÈJa»Á—/¢†>™ß)`„O•I—Pyžt‘Æ9bQRXƒ†ã~,Ûî\ãÊõÛ×¡µ«ú78cµÙ"`öfÛ8P-»‚Hj0[Ë`m×rÎZÞZKUÑ1V¾2ŸÝ¿ÈœÆÏáa¦)¾Í7^k_UŽ½Æ³)b}¢Pò±ä°Ò±åq$µõ£DµÌIƒÕÒ9Nƒf©¸H÷ªeÝÔÒ)bP
$)TAüŒµ 2sÁùad Y¤×ªÈycIºÂû—A·åÎºZuüÀÓÚ7'^Ä«‘ØÏ,3ÚLãôþ“ÖN(>„ùÓ)™10ÑÅÓZ³¾ëMY///¯#Á´ß
»„`˜]ˆ+w©‹ûïÐ¢úâÖ6™˜ËÆ¨%ÁèŒîÄYÞ›Á'[d@\ÿVÌÆW^”•Æmtí¯MÑ+5NÛ ÚÊv½Ä„ÝCktBÂ8¦H½5‰â´ÏÉ—?þ¨–’Ú.¤&2ÃOÛ·¬þ›»{{w÷?Û¿{p#ˆ/ÈT[Q®‡uNÃç*–bqê±¥°Ùb],¿Ç™¡¦DkœÆB­¾&øJPÀ1ä1h¬ M&8iFXˆÌ1ë'â*ÈÔø	ÇÎjKA˜4ÏóxfF±1™¡¢$UX¹Æ·‰×ˆà•XB
ßñâO~2ÃçÀŽö)0Ûh4[.—Å&¿|Ò } 4W* ÕAòq|îöÜæõÛ¸k„õÃfbµu™l ÈÆ´7vÖª-·û¥Ã!¹œ‘|_ì‡vÅž@µ,·2rÎÉPm¢)¶¡Z¾Ïš¯‚<2\„¥Dæ¶ 1rb´‰;3Øñx2ÓïxâôâÒª6ª½­f“4ôÑNš¤ÊÐÑZ¦´òµõÎ*$ˆa|[p¿ŽlpMXUÝ#´Æ®µÁ†Õ:÷”iê\½ªÿ"ãií›/"Mî³ñµÎ'ÒVØb0éé§NBgO=m5nàp²BI^¾Éš———×ï›ÓÀ4JSîbX1¦3D×ê‹ŽÅd²éiäå .sÜŒíºé)dÔæ&×´ªõ‹*€äØ"«ßÞbë\K–iYýõ.NT­ÀðaðÓ—’óÃKFi‡˜j+Ì:_ïZãëýýOövpÔöoîßºóÙ'—ßøï›Ÿ¼R](X‹ÚÛ]!P;NÎËASêGBS»µ0B@ZšÅkuK’˜7X±a›HHn®…Å€å¸¤`Ïœ³ bbhÍÆÌŽùaýö8’½k‚0ÅÔÓ[PÌGÈ—3„Œá´âNX+–Ýûk°
aK`­ß<÷PÆ³æm ^´6zX3<2‰õFâWÌùuô[ž#ºÿ\óëƒ«·µcMÚÀhˆM´ /Ð×ƒ¬&
&H1-²ižÔô“Û³¶”ï²–•AN8k¶eÍ^©¡év7Ö¦°Úc*‹™XA‚µìüø:ž°v–Ž#Ä4„`6ÏÚ§ÙY‡Ò¨~w?…4Í³±ÕZh~qN%úÃdD½h­Ã…!a4÷WÜs­ç*ìl³íkB7*›=­=!ÆÚ£Ä‹àª	ÖÒÙI¦'d©9a©³fI"©¡–ÉnkðMÖ¼¼¼¼~/R‚ˆ8ísH	+ÍxJ†—èóqTÈ¡Æ(æàº²½ePg•’òÛxÄH1±÷j”Kßê@NïÖÁsÂ4-_óœÁ›0Ýj5ÔBÖë“Â ë\mîv4Tþ#–ZjÊ™jdŠL/ÌªI¹µûÙþþÊ ï|xã?>úào1 š—?G+õhØ…Öâ‘º¦½
(é·&a´¡áK3øRkk#ž‰ÚÜFQ1IÜ"&>†—r#ÙCÙö1Ôh¾DbhÞ¤É5•–˜d}Ü²„RIæ…r¬h“5žîGJ+;MYh*ƒT÷€Hf,ó5Oê†v«…?õ%Ä‰„IŸøúoë×VwìçgË|ö›±ZÑ>¢¸#Dk›è¨Íq÷É!ò:æZO•ƒk‚	øl=flOëˆÓVDArrªrLÐÚôŒŽ\dæ¬™µö0gM¾ÚTgmŠò°ö'69X©\Wkq[æÓŽ'«%ðþ(ú¡-7º•1Ÿ!7oFdæ°Ál\èJÒ›XáR/{ˆ÷÷æå[Ÿ=½8¿Ô²`~Wü¸Jå#X1g¥E$ÿ¦svqIÿ¹Å%ø:•¹êêüæ£'>^$l0"`“S–±š
 YÊ‚ sQ#œmî5///¯ßÔ§9C+„Zjæ‹¡Ô»â`íÚ­XÀcAW›¸lWlgÄÃ¼6á.wußq7%<n«ÙxÙ8ÍŽ+5veÕ¶j5C4Øc„™f°Æ…êÿ¶/Ö‹<¼üQžÚþÁ.¨F¬ÈÞ]¢Enì~xóFqfF…Žq¹@¿h«J$,_A”[ËFJÒ‡x’€'ú¤…ÌìEkàÛùb!éÖj`RÜÄ=3ëŠý`A<l+XhøÄn°$(…ÐY ²ÉüÔeÓµ‰îÿ‹ŸQI5$c£‘È—³0¹u´VãCÌ·#‰df¦ ™|¤¥/#ÄøQîYËµ‹º*¡¤{Z¨"IxMß³UŽ„þp4«Â88÷"ŽT8kñ%\©%Á+êÂ}é6ºÞ3XÃUCÆj½, XÑtµÌÄÑYæ§/&ë sÖ¦8k¼PZ9?ÕYËh-¿gMÃ£Ä‹H¾2l¯<¬¡ß¥ò˜ÁÚŸ©¹*Çtjâl+©Æ¨5q˜™­qf"1WJŽW4ÚÃ«úcZjU¨ž·
H[‡—5i€­ÖYîh™\`­U­(²%«MW=U¬{Z{òãEÆnZ–4¢È“®6/‡jš¦`–N4OMJ—üÿf¼¼¼¼~wP»¢9+L3!) ºàfºÄm|7®¸k4µÉ¸éÞÊ„Ã¨Ì­ºœiö¼%’˜dÑq‡Ç÷0æœteìX­ve“‘zkM°¦BÈºÑÑ5½.vzýõ·2LËõT;ÄT›ŒÙýèÞšª|FCµ½[û7éA6óãï@0ø÷K´¦þÕ‚5z“EJ	(1”;&àÚÙt‚Rx"›àRh$EU¢vŒÅQRä‰DÄ‚gaHº#AÑ˜,Öúí¶,Ã`æG?b	VBÜôÙ¶ô+(pDaZãNhh0×Î7ÒûG<Úò”×oŸˆÏ+O$Ð?G’PÃÉ¼ÀB¹Ò[;î-ù°¢UQÎÆmç ?@zÈâÖõÛ÷o__§2ïgÇšqÚ*ÒÙ5Úí´RL3eÐvX$GnÏÚ”¦Øó9XË¥A
Õ&â §ËïXËÉÌ«,ò˜é8¡Úé³ËGUýhHæì5Wì8æ·ŒÓXsÆš5![ò¶06¤U½M×ÏT;Õ¹…êjknqnyAd†l-—-ÂEnÖZ<[—onÍ.ˆd½s¦²¾Ñû¾ÿ7ï'·
R©kŒNÆj˜j_ µog‚ÆRJ³\Hw¤Ò/âåååõø¢¿5 &s›Ê®Œ¹úF]‰©¸Å=¡£
$ÓØk*½Ë$òö-nôÒéÊ5V“]Tµ#Ø¥bI9k®FRº(›îŠ{–îTcÊG(c¤6|¹þÓš IvU¿Ù sf•Pÿú[¯Cjoe v¨©–'µÉòÇýŸxkoÿ³ƒ»k÷ö÷?P)à¿}dîZÙYaàHõ°óldxÔÚklÊ¨sÜi’æÔ¿ƒ+5„*Cj“„¦p°o-zdæ9E|@_ü€ƒyj;˜r¬k*’Ô¶¼¢L²‚ÒBÙrEÙv¸KËá(­…%Öui%‰%+!xµ›<©Mið[€³†â&å™áHÖ]£™@}ÜÙf±éÊÜŽûè¼ZSQd\+6¯ß·&k×‘hÉXÓ¿Þ-·¬ðñ¸¥&Zªjî*c6Mòf¬åµie°šéìdd†jöz$ZóÛÖR¥á‹Ç@Ç°üñ4 #R;JXCš>Ø®–@~‘ÙÄfh¢‰Z*Þ3Ñ›ÉÞâbuuynq¡¥Rek="FPkÜÂÞê-ãuUþÊŠ¤Ô¹×c`#[K©åÁê÷ý¤?v=ópV£šKÛd®9Xã%Xc4O‰Sæ£© r’Õ˜ü¶7Ö¼¼¼¼·Íõ·¾¨™k&=	 ÜD>™F^º4mrRF#b‘˜BÛ4XÌ–¸ä !(Ì|2q›k“mfÏYØ£#:½ÛN&c4yiÝ-œ4`MøVk«ûu»ølÕY=¸RðÓo9å<µœ©–¡Ú´òÇtŸÚ­Ý{oÜ¹»@!ä'÷>©_ø/J©¿Ü)î°ó,˜)†f”ÁhV„—ËÌÄdGX,6’~³$ü‚Šº'2R°F]ãÊïo÷¡2òñ-•¿$#.%È*à´³Ã	·K-ÐÔ…:“Å¤óÓü,ä+•ÈŒÕ³È2 Y€mGè@‹1T©hÌ»™F³e½U¿w¢2Í +Í¤ŒJ¥€BÈòHõšXà2-'ööUeKù”úGtU­´Um•ÔþÁªë¨Ö1SM‡eŠ°”N¤ÉÍjv®æ@-sÖªSö¬ñšê¬eÊwY{¸³†&YÍA:BÓ Ù± µãÑ§OÍµÖ°õuÖCÍµÖœìfÎ/e#­Ù¼GKNöŽÎÜ©³UJO]RäBÅò ;ËKË¼´Þ*…ŽöÍtáÔBºIM‰¯žª
ð:Ö‹ÃL¹ï{£äÜXûîaýÐÚ?mpÈ|5 475nc|úäVsJ!uÖ|¼ˆ———×ãyjÏ<û,ø…Dki“4Ä„ƒò=®}zV32sÔvŒÝDQ[cXÓ“›ß47	ÔøQ™ŒV¶‘Kæ×µØl|mWo]V‡]Eä×kWÖšâEÚ	ÞÔË+£ iè1|áÍ_¿úë·^xëM ÍÚ´¤þCÊwwÕöníAk»»ŸÝ¸spë77ï½qƒÈÇÒ¬-Ö«`Âý2£ËEw¬EÏ—`¦\1v{h
°Ê:acF£òïñÊÖJz¿m.Ó>4aŒ€a%‰qb¶6Eˆ3;;ÜFz.°jP“¤ÌQ(X„Y,Ek\)5’#ŠåÅ	ÁJêÔF€[ZÖc E2á¨}“Peœ³zœgº‰%qÖø¿l™›nI
0Ø‚Ùò}`-¥5XM¡qpÙàêº\µVµcéßî?×w¢µ˜L:kŒ“Ä¦SŠjùðþ
Çäžµ¼³æFòÎZŠj6ËÂÈs‘ŒRJÒñ‡“¾ûø 4	*g µ£ï|Bš£5ƒ8&Yüb:g‘"ùnØY‹l-½¶\™[dŸÝÒÂ©3ýÁ-ÍU€.©EC5Ú¨U[–ÔbÏ³ùE£ r@EŒµ”G$Ï±å­£7þ™§µ'4^0ƒÐ2XƒÛtâ@®»šÁšW\JiWµ\¤ñòòòzüÿ®ö¬ÝdcÁNÒ¥à1‹Ñ”uNÜO¸§ È-'\1;ñY›ÿ¨É¦¤JVô¡n›(O.Yw[8g°æÜ6#5¤ö× ™ö¦µ.Oÿë­­•ºÑZWÙ"£QlQC‘Ù«É¯ß|LKAípSm2ý‰Ôöo}ôÑ™"wîüæË€ÚÿÜ¸¼Fó²!‰#bùá0³µÅáT²ÄÇQyëCm+µÚJÑß|1‰…tô+m¤`($‹„x¥ x+È÷†IQá ÖçŠI¿A5äü°ÚsªXŒCqQ˜]}ùg9ªEëJ$Xk¹"—Ä¨²Ù`×š•HÊyƒw¸.Ð&ãO`‡ÂÈZ«Vb9neîžW°$›æÈ§|‰íkÜ#ÄçY…åóA8Ýëê†*!ã›­¯» ¹•Rœ84_F¥AjÈ²EP®-öaYù|g¬AkIYm¢+öt[ÍïZ;LYê? §ÙplúLkãè0M£“£,[q4ÆÝL!-•E<f¬ÆI\Æã¥’üW«ó§æ–*¤:ž9}¶ÂßØrx«,wÐ2V]\èuæ—øcíñWMc¯³´°ìbƒÀZ•ðþ…*ëƒePOU“¼±çiíIy*…55›3–¹“Õ=rÁ§5cÉãS'¬Ébsgwë¤7Ö¼¼¼¼¾¢(~üü>rÒŒ×^iêü±Íñâ8¾Ñ¬43Ä´ƒL–-b"„9gÅˆl]ÜÞ†9®cÐ‹k¹g®ò8sæ˜îb·Ë5Ðh»Ý¶$œªÇÊŠÁZÔWàcM°¶Ò¥gMœG!ù„Á/~ùË7ßüÅ/pZJj¦Ú_š)bõ·>ºy÷îÍ¿}ïrÔÿàˆ'6SÊ™KmÍ-X‘N”‰y;¬í$}µ8³íhÊì f_……Ý.d·£ÍcîiÁZbYÉ?ƒÐ¬0
Û@Ûì(Š"Þ Z$;Á=¤ÆØ3¼CßÌwt×äÅéÛk±ƒµBdüX<÷’í6KÌÈ£¯µJ }V¢²ª&AÆW<ie’k+ÀÚ,	%B=’4š}`-!£-ˆ!9y†BTçŽ0	ÉqrEh°*Xcè‘§ðþ1¬©*rBÕŒÔìÈÿäÒ «“iYŸ5SÞYË¢ûsièÑ¶¬ýÐ»jS-¶? R‡ï˜`ôÂQšÐ,;ÃXã¹!˜[aª–òÓ¸J5Ä3™§æ¤EæL°Õ$þ¼pÐæùsRºcuñôÜ2^8sþ»JµÂ­àMhÖêÑ™£SYî!²^[<Dçoò W7->E‘#fË}ÏÓÚ¯¾sX“5ªÓØ‚µ©‡v"­{Df¶¹–Øœ¬Ø‘á„‚ý™ç³ Ÿñÿ[ñòòòúª¤&øJÝD¼$¸‚à3ÆÏu6Ì¥pº†Èa}©øQ£&î¹tOCû‘óÌ.j•÷‰ÍÌ‹Sc6«z¥qË¾kWMGwXß&i~¨ÞÏ Jí§üÖºXQa «€µ¼©=š©¨í*©ß¶«||ãçqt!‚ª¬U-«å=…ª,tm¥Û@Lÿ”D<¶£+Ñ/Ò(À®—uO‹Q ÷×ëqa,¬±a?ž-ì<·SË¥*ÄD°FE¢à«ŽxkLkykkJ iw‚DVZ,µñkª/	®b,¦Œ’Ð|5.’áù0@"Ù%+ßÔAžˆ²D€5E£Œ°igé$lzëË›kÚž8×g@¥‘æÔ…	Ø€µw®#€„‘Ût[Ö®:PÓÆ‹…­±b£p­UBl¹nk_î­ñcšî¬å’ûOñÊ¡ÚTZS_0ï¬}©RƒËN_›Ü÷›úÇJgãhz^aMàeÞ™­21qJÏÙe;f#¬&´ËÖ²U»\_:enÚ¯
CuÙð‹íkÍ¬øqµÅu¥3@=ˆmÝ<5EDæ)a„`‘ÕeˆoÜP‘!ßû‰‹Éä²úÖx‰ÕkFk®òQGÖZ-ôXÖs-ñÆš———×W#µg½ÆáL9¥H&VÓ:6?cqÇâ@ *ÄÙø¬V³$»¶`&€–æn1hÔéb¶GÍî:³iM<Âm8p«.V«m×yŠPDu{†Ñ@5ª ëŠ´`µBã•WÞŸÀ´÷jŽÔ²¤~Híï2S-Gj·îÞ¹¹+XÛÛ;¸!²<¸d– X4ŸI10#Ø–¬…	¬†»¦¬þ7I ›òF‚TçL)3ÖÂ¸Ÿô"*µIM°©vi‰Òt
Œˆ‰hJ¸ÆÆ2žÖ ¼!ÄÄ»šMfÂ±nÒ,‘’ï•W	‡mb+>/NÎ$¦¨È52j•”›C®$ÁÚš
Jõ‚5LÀHÿ¼LV5Ü¸‘Þ­ÛåÙYHñÓ«
¼
¬ÙX»¾Ñ[åGí±×­Ýš;x1äSEPnÁ^9R›ê¬9T›â¬™±ö ×ÑÙ‰>köâg*¬å ÁÛ49râeÒìèu¬Â—V×p“š› k`s‹Y¥ãäd|#·šm)Îi6¸¨‘eþ(Î.ðGåahÓ™þ)PæoJ¬F¾ã|§c&T³úåUKÖXS¶?¾¹ö³á¬U*=EDÂnËsK?ð´ö¤Å‹d¬&<;Åvgp“—†4NDö#&6±éÉ§3€Ó•Ïí÷òòòú*¤öG7ŠÒ<Š¦\\?‚ÀT—èú«±ŠŒ¸ 5N(tÕäÆ¹%ã3Sðk[)!öìnÚýšGô(s–ôÉîÆÜ·Ý…Íj5½›]k Å|ÓÊJ»Û¾4¤/Ø{ï¿ÿÞ+ÐÌd”–#µ\¨HÞTûÏ;»we«íß¹°±YíÃ±8«€Uð—!Åˆ
S\[3§Êü5£î+Œ22Ó˜rÂ’#P?àBÜ'Tê÷‡} ­IðÈ«øaŸ O÷Ã¹"Ò¾5C7 1N .(ª‹Ê’¢Ôè¹ê€5IÅ”ÜÔ8pÍ™À«Á<(ôGÐZìnÉ¯+D+ŽC¡~¿‹ƒµrÈóbN%£p†Û@:ÁZIÂcœãûæ¨­n\GÌÖ8kë¶OaªijWN
k¹(Èô2_9¡¥	T{gVËtúa{Ö<©=’¾fOÍ%Š“ådÝ¯y 3a–V4¦µŽŒy0³òËRë,»ÁœA×’;[
Ék•ÓgæÏb­¡å%«lU9€5ð­
«kja_Y²×Ü6¿—9wmUžù@Ð½«3s¸l,uªÕJuÕÓÚ“d¬¥)ýv2KMcz‚Óœ4µÚÇÔYÓë¤u8e—>·ßËËËëÑEžµt”®$1°ÊYf¿ä6 I®ãÚ¦dÕŽºƒD`5óÄÜ‡¥7˜1Õ¨m”7–®»oÛo¦q¥ Ñ‘ ßÈ	ìJu@Ð" W0’êøl]Ü­(b_VóŸÿåÝwÿþ½÷Þs€–qš#µ‰ö×"µÈzª¥¦Ú[ÀšÓÞþåo_þ D‚Ï”©Q–ÝUV`cI®˜dá ›è(Ét`†¥Âc	¿Oƒ¾fLyš	’Oø¦³È|…ø'ä‘AqK,‡ÛoÄi=Œ†ÖìVb}®¹·-QDKŠQª£Iêìc÷ñQÈv÷$ç†V	’AÀ¤D&mžJ¸JÊ½ìs²ø1sL5½B*!ok·7:½ÛHÖÚ` Œç¦ð“Ž+«ÜZ	¤–½¦³Ã¤µÆ+KÉ÷Y;Ë+·g-5g«q
k`îŸ*·oŒñkñÖôÇ&SäLuuðÚÑ‡?¢4HDgƒ5[È(Í®Ó¦ÚL´ô¬iº@ÛìÞÁ"ógÎT– 4ý1ÑïZ	!˜igç5wAJríiäýÖRVãœR¤‚_—–W7zª`&ÖÓÚ/òÔƒ¼~ÎºDÆf'Xr9ýˆ“Î$‰ÀkRšØÏdBéM†?õÆš———×—ë[4¾†¼ôcA"S`cMÝª%îØò8Úqœý¨0‘ÔPŸÒ&tÑA™kg-V³ÁuR‰ã‡„l_È)Aµîv»Ýåµ­¯_&Ê£ŽØ¾Æ6+|µ¿ùz÷½w'ô+@RË›jSzªíîîß<¸…«¶··¬|BlbWåøJ1ó‘1N»aZ‰q¬¦H´&V3S,Ž,-1 œ`g‡¨{ ÆÕŽeW´¥Ž`¥q`æÉ²“ÂRY‹.B?G#ÁšÑZ8ë»Ú ÉŽfº‰ÃæLXÃ¦dê©
2Ð8¾7²ºMûfäÀL(Â…Z0én{|–aßN0Œô…²ù¬oœŸÎ=}7v¿º`m6ä÷R¤6ª¬¡Þ:½Ö(€T!$Ã€‚©eÄÐQ5•ÓÔmk‡ š‰ƒœâ¬Më‰ÍÏáÎšÉwY{4XsÅq´°64&Ç ÖN/T;ŽÔ¾¶¨~7Éu¿FSØyÖBÍë(ƒ5ì,ž>U©Ì-ÌÍ/á¢UqÅªKj±Áß(çÖÝÔ 3Yâ-sÃ%uGì‰ÕlÁº¬©ûýÕžÊ$•"Ôê°Dˆäü’žü÷Lžœx×QJc*BsÑü@ÛÉ±¾-ZÓ’œµ	Xcä`°ÑÉM|n¿———×—‹†jd…à“iÌ,PÄ¨Œ±Zêm)æƒ–VÍÀãKl'dtq8óËMDtŒî‡$³NoÇr#{ŸÅ:ë¬ØãÝZê´éšÃæÛjSFÕ$ßËñ. ‡Ýš=[ƒ”?_ï’È:¡‹Á¹¿þ÷_å”šâó¡"©á©}¼{póæ]t°»wpç7÷î½Ý&r?²ŽjÎ@[‹ƒr‘‰”0v»J#Á

q½¶B*¤p®D4)!Ìd£Mn$BQO‹á¿!uK+i4£«½Õú¡¨~¡_löa“ìÿ’7–F56EžSÛµç-,ëy6È!9p@\&L¢I§q¬Ò£AÒn»ÍhÚx§/ˆõZŽ¸Jøtí‚3ä´šHƒµ-e‹·ïßFÚ¸¶±Î¿ÈéÕ§‰ØVS:£Æ*%2”ZzÅþL6ý|±Ò4mÏšLî?ke9gm®åHÁ§A¦¤¬ñ:‚`:ë¯µÇìÐÀÏ$e°öÚ´-j²ÔthšÊæ_|àµÿgïüB$9ÏsÛ#c|'„iÚL†^-ó¦=›ÁÅtCÑEwB‡ÝÝqì….ŽCŠ^Ot¬ V'Ä+Ña£e$;èÂ è$fÁD!{³c³Až ìœe!»œ«ó{Þ¯k¾í¢wŽŽs´ìÚõL×W_}UÝ»ÒªA¿}ÞïyWçç–V–—/®¬’ÂÅ¼ÕARÉy}žK:¦!Üp1[ÝÚ$Vå”3w#|¿·Ûô[“—¶5Þ®ÆíªJ(í_ÎiíÔ9±‘E‹ ;¥ÛÕg!š&j:œ<¬9@ã…\0$Gn¬åÊ•+×ùú,;Õ$ÂÁÀ8¬iÁp¹±‡Çfm®¹Ð#üˆÙt—+‡å’îŽ-2;[ZsËC$Ð²¥23ç¤i/š0†ã¦{hÔaaT*ÙûíWºÔ’­do½Äcåšbóå«I*Dü/½ôwNcH¦9Póå9ýÏû÷ŽO°ÔîÒZíîýw__k¥ð#N’sVkö,¹ßzŒ‘ßT»·ZOQ@%!Ý™XéF`ÎÕÚÝgQ
©Ö]¨§Ç2ë|r©‘v¶èÈ @×é‚ùe‘ÖåR§J¹.Ø‡fXhñÁ,ýÚÈ#Q¥PÊ6­ÙåLQ×
401`4Îm,˜¢À}’à	§ Ë`±!rÕHÿçyKì'Ð¤ ,å·¬wÅ¹ßšãwÆohœ5"5X+öÁ4hMùýlY»¶ªq´±Ö\$ØV7ËÆöû©§7?Ïp¯¬³–MîÏîY[úyœµlWìÖÎÓg?59P{ ×V¨ÿt!ÍÏÑXHí5OZ\d&L',¶L’£-¤Wœ·Ö–—ç.¬,Î/]T>ÏÅ5
‚UM¼n°¶²´¶¸*sL¤fYüU]oqT5fêÈÁÆTÛ´V—•îVé_åo ÷å<èï™Óç¾t~¶ˆäHí3cƒ™¥Œœ8ã°³fkœ´ì¤\H­ñWråÊ•+×9úÜ¾èàÌ
 ­Mµ“!ZskD£	cM·ðÎŒåÌNK5ÜñS*kÑ¥í;c©ZgkÓPa —¸LXá9{_ÜÑXÓ»ÐðÎ€7¬éC‘nt~Ÿ.Ø#T«}½FºG€w[W¾±û’aÙßý5€ö-~t‘‚šyjÓL5C5t|÷„Aá¯Üº9sãÕžÜ´°Ffj)t’¶d¨§EL3*C`dŒ›åf£TjáïŠñÅŠš€AÝf „«‘È(‰áX®5K—jqd°¦H}çs¹]j®ÙM°fk@°æGð÷$Egk.‘\¯ne“™û€ÈÜ4œ8`LL×-RDÙe-’5îDò™àÜø—„š€r€~@‰mÆ+ˆtÅ›ÀœãW”ˆ~yKQAö¾¢ißŠ··­+öeâEÐ¶ÛÖÂ`Ý±Óê[ä{û€þéÅç$Œø=kÈç‹ø-k~ÏÚDdJkY_máœˆŸ/’ï[;_gÿ†¦ÀÖ—ÚS@ËÖæWw>e;-ë— /_)›÷Èz:ÕÛý1ž=Jo(Ý°V½pai~~i€¾òÔpØøg\Q$¤åŒ,Z[l+‚4kÆm¢1¾Ö®3aþrÐ5pÂ_»Ö®×-/R=µ«_Î}“g?^Gm2´_R$—‚5­²‡¹[©ŸFš¿ašÄh¼¦öknXÓ4Çù\¹rå:ÇT£þqœÒ/]7dK¯©WdîÖe§]wÚç ¢Œ§0Æüž3¯™¥‘ˆµq‰£žtÂ%ƒ²”÷˜ržK~¶à"W0ÉÊe}fJkœùLøoaY×%QZ³<,©>¯ÃF¶îî7ÿêw÷[ÑŸjXj"µsL5(íäOíääÞ½ãŸ6æn¾á¥	spÖ¶•ŒÕÔ{Î(FMØ³ÑkÐaZ…øPÅ‚ºa+Âƒ7*Ÿ‘IQÕŠ6˜ eì²Ý–"IšÎYSPc òáF ÀGÌ’èÏµõÀÊŠÀ/ÉÑ’yp~ÂjA ¶íê”*ÒìŠÅl¼fèàVQóîf×êì9`í+ÏÏ>_‰#Ã­NsnN|ìr¿‰g°6
©ªT\I§Ö+ÎP\##4k2å¸T‘mF+€´¡.·wL[Fa*«šà³Œ™æñÍ“‡ç4û™h²–ÒÚXÉý¾)6šn¬MG5”÷YûÄÆZæÌ½RÐýd`–¹|ºº©A1;OªøÑ±'w•4 l"¯ßïZÓ£cg‡|Ã5“cµËüW/cMfˆÆ¸¼næÚüx[(yœù¾ÊNãLƒÛÔMM¤¶½³Á¥‰ÙÚ—™!c¶í:×æë ßÖ¯å´ölé³YcÍP,!ûˆ¡¦]kDŽ0X{5ÑÚY$@çBDÝ€±öyÍ$Xã¹/ýJ®\¹rå:ÕÐº§=g;ŠÔì€Ÿ˜X„Èu+©îQŽÅ8q”tâ®än`ƒýÆ3ÓÑÕòèÔÊá•A	•Óä~h-Þ:ÓO¡€R\—FŒ\b¹5RM$‹¥°ÑlðDQ¨l hüÁ·€³IýœæImJûë;¦{'·n‘yz÷ôøø~“P{&·5Í¢{€!TFrÀî€*ô¯n6µ¿LûæÔ"»×Ðo§ÜœCP]àâˆ÷ÏEô·&N_uˆ•n+€°gÃH‡ñ¦3
xN(ÇìvƒïpÔ¬Y›!R Åa\P>$ÑýêšV©¨ R6™+uT—í4„gž7X‹cÙc1ê*§Rw8°Q’yoÒÀ­£PÊ]]¯(E­¤F<Ê`‰,ãŽÅ’(½Ÿ³Ö4‹Àš¢û¯qÚÞ¹LŸµ-ÒáÚHù¢¥V­kæ‰,+Ïi:gpeÓ 'œµ•óœ5~<­¨=žÖrVû6?qƒ'0ÆOn¤¥3^OÍ6µ.,ÌW·ÿ?"ÙãÖÓ­hÆi62÷Ær#®=“MÐš[°›¬0ŒùÌ-™m[ü7/meéZ0r[_žŸ§î±ÊwMß.Û/ª^k`š}}ë;hcy4ÄUþèòE4“¶]OÅêz•›<RW—íjNk¿ ¹ýªxLm5^ ™Ì…h¬©I‚6FÜ˜èŠÍh÷9»Õ<·?W®\¹þ/[Õ^‡Êôó@£8Ík6ôñÉÜÅu í,R¿®Si4£‰©LÆmCôAªKÌ,YßQV+,é(vL0ÖŽ¬¥³3Ð«Õ€1WÓ²8&qr*—PM•’¨U+Éý@a\	(Q$aD$ò-ŠŒ¦³Íš'µŒ©v|,Pãõñ?¾{÷îÉééñG¯‹år¯¨]\*¬E2*}6±({åž	´z=œ6njO¹õ€¼9* ãó¬¡»üÎè`Ýéºþ€„”ˆF3>:™õf´FfþÁf$ƒ… .~IèM‘Œ5aÆŽËœË%E=ÝÖšyr¼}–7Q%Ù‰¸ÍT˜ÖƒÔÀ7ÅG~u3
"¹¢ª³,h&Ð¦íeÃ÷4pü˜ð1(ju"vÉ…ÐêÏœ 6uÅ¾æþ¾=ÝÑÒ6gW­*ZËPZ&Áß_xw-k­M Ú­e÷¬¡”Õ¼±Æ+k¬é8Öò€‘ŸÝìüÉ·¥Ùäéjk©]X©¿ü$”¦‰0:LÓÌƒéOZ_Àgî!$â½5Gjvódõ»ú_¶©IkbµµØj Û2#°†6ªÖyMäUw°&¯Œ–Øm¦Zl«ÖÑlt‘í]«Î¯ê®ö®97=ð¦4uÇZÛ&ß{,&‚5M±™<¥ùÉrc-W®\¹‹jà™IgGk.^d<í[á#KÐ™E‰ø F®è?]bæèÌÄÝÎØ('‹ì?Lj2ÀF£Áˆ3%ûåÚðáÃ¾P«Ü?::ê'£Z9I‡z¥Ñ@†Û„åÔÙ%ZD´'ŸÍyr!·Ø¶ÊZS¨HLXGâ ”£I cL²ßþ³ù‹Œ¾m ö(©yTC'§†j§7á–'ŸþôþOåÕAhÔ3ö”êÑ£°Q“·V‹\ÏèJš˜jcD\daklÐÐ6Çý0ä]ˆ>d1ÎZ§VÍ¢.Ÿ-ÚéÁJÂ%>/3R¢b >¢Õ6™`­[“dªAKEfÖ Ó+ééÅÃRdÖŸÅµUä×ñh—é¡Ý&Ä$‹<vD3Ý³s-LFÊ¯u
qLY'@7Ö¬b“JLû%öG½^<77°ýn¤d‘T8ln§š\5kÅ„ÈôV0Ád¤½¼|l–Ô²yç$ŒLŒ Gµ‰4È4a$·Ö>5Müû³É$ÿ2ñœf×O×æÀ‹[O ôÑÏ"ùYzI\J\Ù]\\f7“Ïz”Ò5›ºÁõÍÞ^Z»¸dÕ©Vø"­,-qZ¾¸-*ËÑšco°"+M»Ïê–,²±¸XmïÄÚ[[ÿ¦)KH¡Ìê´Ð^_®ÚÃjÑQoƒl9­=CúÂç#€LÅÜ“šÄ…§5Z¯1“ÒØG^cr³CbÂbžÛŸ+W®\ÓQí7ˆÈÜaZ
i’3Ùh¤–Âš8)p¿oÇå%ùg—Ê¡ƒµFÙ¨Ä	³ç÷^-Ž’1Žý#8møð(Ê0š-kƒÃÃ#ûüÑÞh¤bF6Z§cµeKˆ”Ê”%sŒlyk™W…uU]à}«TŽ„Ú¿¬yF3N¨‰Ô¦îT;>9þØtçîß…‡^¹uúÑ7ÿ¸[«1ÀiÎ¢é‹P„†kÅeÄF¶c\DˆTG`mnNnpgv•j
ÍZo® Ï¥õJR¤´ÑI¦ÕÂû: Àpã‚®º¸ÍN±C,°ß!³
éYËÍO£¹ ëó9ë¬IîÄSü¢®9vP,¸Ýp‹¤x4JbQ$ÖÙã4j:É æ¬Õß¯Í„£r"<?ì[ÐÊ°l×JÑ\o”zò±5k¥«Aš,gD¹ý–-âþGŽÿ·3T³ŽMÓ í:k­9Tcœ4Ö&Ó …jžÖV&`-Ó[Ñýüðr’¹0ÕV³Á)oˆýóÊ¸ËFŽtà@v×¼žJ-X È§k6¤X¦óÖl‰‰C2Ü¶,–e#F@²‰ÒÇÔ›K³lðEÀQ[X»à5¿l³¡]kf¸ñ«ÖZõõ•eàUa6;¯/o´ÛØgî¾ƒ°ÓlëZ•h" a¹UÁ·@<m^«æíÖžõÜþÏP™ö¿FLX½¥¤ÆËEöëJÉ.AÄ»i:ùšÈçÒésyl®\¹r=Õ¼±¦Tý³«‡üÈa#…Ÿk‹qEˆM«‘`,m‚VYVÓ´Rr”kÉ!Gû¢³({ˆŽx—xiŠ!œ†ÃC¦‰¶¥Þ~;¼¬f¼ô©°Ú„È–eùƒoÝJW…1ÖZ’©À3J™7X#ŸvØÚKßþö¿xL§yPó;ÕÚ_kšõ¾¾szr÷&q!ØU¯ÜÿÏ°üõrl€Rfª,¢(nÔ,È±YSq#4
è 9k(]à ½ :pæ’AfãOÄh·ËRÔ¥EÙY.‡s1þª{Œõ0Ê+Ô“]aÝÌXÂ¥>•³Ñ™1V\´¦¬ó Ó­`R³4Yw3vìºqæš§£]Y—I'îY*í]Åg-	À3”]Š$Žìï'aùjY-×jh>-‡k_Õ¾ÅZ›ˆ•@Ú¦uÙU£& Ÿâ­ù+¿˜ž²ÖÚ®-êð´6ÖTgMuÖÎß±f\‘kÿízHÞIP³ÿéÓÅjûå'!hJ§4ŒŸCòhæ£½˜§(çç^ô˜Á¹ãå·QS£×âÛBÈˆ!ÜÚzµ
¬­rZYZ¬Ú×ìÚaT¾c½íD¬-raBøl¶qmÇ²"©†äŒ#Ç]ípûÍœÖž}n«90Cœ´‹Mé"ÞXÓ¨‰`í9ß`-í¯æXÍ>c$7ÖråÊ•k:ªyÿÌÎðd&LC×¯h}MG¿k@LÜ„JŠá›Ò,ŸBH!!û—.•Ð«l°öX£ÊÑ:¦Xfë^ºÉÑáÑá 5<|í]é\ÙG/îk5âøC 2ë”Œae3¶}iRú)	¬¨´P\£V„ÄÁ?|ó›ÿôíú	”æ8Íµ©¤v|¬œþ¯œÜ9ÆY;¾ãÆ»·¿¿ ?üWe–à™_f‰¨à#26§	~0øÂ(#_¸rðÃ`¹–c¯ªGæDîå+³ù\\³ çÄWHhÇudì„ß¥ŒGyuP"-Ýx<0Ò"‘h—·ÈNcLSþ+17eµÙÓÇíÂuºß(ŒË!¹{ð|…uVb( 8…'‹€á¨?jF•Y`¤õG.Ã@ð-ùSmÂVÜ:Lö“h7Sj–G½9üÃ{çÆe—û0Ú5<5Çjf¦™©Æ±5þ{v
#MÕÇf‹¤k™Ü~YRË:kËúq¨¶ìaÍPM?Òš”ƒÌ‹ Ÿ¬²\ö”þË]Ôž‡y:síã}•£Ž[L9¹>¡_òàÆôk¶s×xª7²¸Ž±fÑuª 7´omñârUùý, kšíÔÏÌ¾ÐPRÈÈ5`MÝÖÔ»ÚvÌ¶…Ú˜mÛ‚¶ßÌóÙŸÕxRû«eôÜg>ÿ«Ï9‰ÊÆÒPÊg¼œ¼»&†sK_Êÿ»È•+W.”AµßH£ù±ñT°&-„4Rës¸Hº¢j ˜ëƒM&ã¥R‹ƒ¢ÈÃ£Ò×ñÅPBö~"$Ë@YvÅ %v2½$bµ7÷Þ¼òâƒÑÞ•V©Õ©5»JÅ§’ýk|>í¡ƒNÄèÂh]¹O:‚ÍM‚;šb[Qå½÷¾ó'ßùŽQš8Íƒ2Róõ2Óz7È€¼ÿÑ½ÓÛ Ò×ƒ!ÀO{ÓšÚ:ªYƒêÖ"¶¨	Q›Š0Säb¬1!JÑê+Àä„¨SäA‰'m´‡±ªÜõæf õ|´‘éÆ2×‚ƒ1¬xÙ‡Ø¯#ÙŠèRr+ôx‹Ášë—-"l³ÍÖ(ž‰´çnÖÈ{r¨_*˜Ga¬ÏgÒïSïØäv-I*Vm“ÃÃŸÞì“¤µDØqlåŸªù–`Q)ø7Çjò×è±°)WDçË;°VÝz2YÌˆTÏ¶TËk™\È©Ö¦'Œd³û³Îš/ƒ„ÓÜkª¹–ÃÚ“ÔSU
¹°H=ß(}D!)ËôqŽ6aÉ3so¡}¥2<C×X˜Ki)·½¼áÚ½{ùbÈµ+‚D|=–
¹á¾gËë†j¸ã2Öä™YMsµÞÆZ‡±äþRÆ,6ÁWLÉÑ’î jÞûÙÐg'AÍàÚØ6C.Ò:«!^`[ÊiT;ú4÷B6ºå¼!v®\¹r¡I}á‹B5Ï¯†iŽÖì÷™êÇ¼5n¹žfûæ£©%u‰ðE9i šS)lá§]=¢L®\NTËØà¢yõ¹`™C£ë”B&œªIXíÍß|ñ7ÞøàJK€fÆf„ŽtHèØ-‡tù¢˜2çcê"•™)+*ìÎýÞæOþÈs &	ÔRRs¨¬Syÿôãã[¯²Míäf! ¨dFu;aZ³jDÃ+±;Ò¨nDiMì¤šËÈ7£©ž€æðÊ4âF£È–´€}“Ä$=ÁYó²ØhM ÖÌµã3Ñ¬6’Y0ƒëåd	"¢-íqÞŒ¢ÔeC¶OÎ<"x³…ÍN¿Uˆêu'(NI¯ï¹N3NÔKÓ¸¤o—ÚŽg$MP'ýñ’£Á\$s.>d»!^{à£âÿ{Ãr­Îõc.š¥Ÿñ?g×l·Úµíñ¤XÈ-5ÂFÕº£5~ØÊ2UÙ4HwÊ6ZËöÄ^Ÿ¾gÍ³ÚyÎš~¦¢ZÞií—Ö–ÖëŸö>5E=žÁšñ,à1ß¯¦¯Ìå™ÍÆù¤~kH‹Ûó€š‡µ5@2K¯¨œ_¸°Ä7i}~až/¼&om~ž¨¾e[¶MûÕª«ÀZuG_òÖ˜ køk´”ÐT½Õf²Ý®oòòæØÏ ±&S-
Ò”Üï£ í„\öcšéå©Œ»zéZ+n|./Í•+W®	}TK{^óRõ£qv™ÑÉ1±Æ!‹²ÑJJaTö>‘"&î–GI‚ã¦ZFe…xó@Æñ8% šqZª7o¢Þ@ßý€]jáîï[€ˆã– ¢.aÌºä+ÊkcVë›(è+oÌÄ -ý0jR;–©vïßO>úè[Õ8NnÿèÆí['·B Šµœî”ñïŠB*HIn™˜É²làP¤¤],=Ñ‹TÙ(dxP3hÍ”c'½Á6 Á>ˆ®…&{ß¬ÅšŒ7TŒÅ¨z<Æ ¢ƒø´ÍMµ’¨ ”,¤ÄxR’ƒ†ÔL@o”ìÙž(6Öe0±á,!U³ÛíÐkEêO·Ésñ¨93;Úï£R¡ÖŒ’Ã${ï:ìEä·D«ÖÑ~Ÿ?Ó0è\Qhes¸ßO’°7ì÷Bý·B;ll4b_ÆbWB	ÖHíW,œíUãÌ…æ[Ù=kšû!“Ý?%
’—wÖœ²i¦lŸµ…ÉFk:Î+ƒLS
ó”‘_
dœ_­·ŸÀ&5ï¬11Ò²ó8{?Kf>ÖÑF{h:¬qøIfˆÑ	û®úÂXgÕlL¯æWÖHïÇT[^XXÑwO°¶~qžHÈ•ùÅñ¦Ó:·ÝÜ`­íâEûÂïp«­u
¡Ö”/b°¶“·[{&bS™…5‡g6ŽÏB´³ˆ‘3iê4¿wÍ[mÒóÿ&råÊ•ë[`ïQí:Žš-õ­±5£éWö#'2Ù7¦Dý!Èî`tµ×l˜³†¼eæNéÇ¢1xRszÃPí»ß}ýW®´¾ñ:	"]Ð…G¶§ÊIÌâ““M¤Á¶5!îîÆb¡J4óÞÿüOßúðCPm©Ÿ*rçÞÝ[7~úñãïœÞúZáöý›7Þ-X¥b q7$kR‰!Ì#!G£Å’Fà$-R i §£ÁšÍ­ÙT<æ@ŠGzKì×gÎ©[<¬Ù§Ñˆ'ÇÁ$’ŽU H’@Ë[Ž¹Á„KæÈ¹všbB¤ƒ¹aj¢63†µÑ0ÊÂƒÁ(î³ÙêŒF|Ü…•˜¨å]2ŠÂ}¨-	ãXÖG0Ù(Âþ¾ƒµÎÑáÞ^w¦ÆC	ÛË½èªîÒ8¬R°fÖ×dŒ(Ö[r	*¨Ö9Ô{º¡6i¬¥¤–¥5ŽÇoZÓ–5ÓÔ=kKÕ¼³6UÞPË»¬ýRha~ý‰íSó°fv˜.|õ£g3/®}¿iÚü¢ä>ÆfÖ^^~ÁÃÚ4ñ÷–W¡1
!×7ðÖ´imeµ®ïÙjUmÓç———ÖÖ]Ô£H,5…
Yé£f·mÏª¾çTDk
¯Iy€ÿ3™Ûo°æ{¬ùüÇÉÂG­°Æh–£‡5NNˆÉµ\¹råš@µñF5I3Gi˜kû‚5Ûœ†ÄdWRâEØ"ñ‘-ÓÓ¬Ó:çløŸ1 h{ƒ·½˜OÓ›{{)©	ÕÐ÷Ñ­Ö7¨„ŒC<=ÂDÉF«Äì&»•Í1­":?oÎÌZ$ã?üä½÷ßzëŸ_ùÛ·ÆÅžÔÐé¿ß9þèö­Ó{Çwß½çäþÉýÏ›¯4£½û#Þ,NAˆqÛþ3-)„ŸÃªˆ#Æ:€¥}j…^#æJ,65Rt*°›ËÆçÎn“—¡<¹H˜é!ž²s™mèaÍj¹®¨rV–]Ühj~€u†ø´èz†Cp†'¥I$¦Ýd8*[Ù£ÁZÒªÌ`‚"R.¨æ‘:ÇVk÷`6Nö÷K£„DþA3&Ô¥/,k£ŒFÄ§’ YÈöh-Â%Ý`Èå!"ud(OÎLµ¿¿†4ÓÜÿÇq0ˆÖ$ö½0œÃiÞk;·ÒýxgÃ7Å>Ïš‡50í±uT‹M(§µ_la+U·_~bú¤‰HÍïW›¨…hùýjØP:Gþ»J•^ŒG^;/Lg5Ì4'o°­®b±-P¹Q‡Ö–i™VÕ_˜!¾FK¶¥Ì·ªlr•A¶ÝW\P¶­ËËð’ƒ^Ö´¶£«¸áÕ_Ïií©7ÖÒÜþiÈf Æ!¥›±ZF®³š“/}dÆaƒ¬çÆZ®\¹rMäŠ¤ÁüFlÚuMöÍF3Vã<,J°ÚÐV˜(?ÿ#
C5™m	ÆÚ(œyyP{Ä3R"ÓÏcîjŽÔ^Õ^{íûß{íµ×ùÕ†­NSéˆaÇ¶ŠPÈó3qMu}ÏUf1ò1Ü¤$ûá
HôÃ÷
3ïÿùû›ïÿMÕ)rzïÎÝ[4ÁþXÌvëk¯ü‡ú\7â’áÊ«*B5ÇhŒôI£¥˜Û\&PŠµ
fõtpëÍq
	ˆ$:ÒžØÍ8k-¶OŠìÍÅ^MmâX2Fã©˜HµV³ìGÁ²Ö×0Y0fQ«Uè5u›z»žŽ£@Æp`4–•`NCQ¬Y†áh´×	ðËúÃP›öv*³ÏWF}”À^ƒA³3€â¬0Ðx†\#þÀ¹‡ŸºÇ`o ôñÇny# rY9’¶©Ù nØÛŠƒÓl§jÁß‚5yk%µôì½µéeÓ÷¬¹]kgÍ¼µÔZó´v®³–ïWûå9ˆë[OÐìÐ+‚˜èx@eè–r––³Õ8Ñ/Í–íŠdW¾ËšämµÅkKK~n[Ø..³Mm¸‘‹b2Àm~ƒo¬Á±ýó+ÕêâêÆºëÍ÷Z£`ml²µo¬òìs½¶v´¾ê[y»µgµ!¶òE>/T3XK-4ncH³­kÑý©Òt‹³DÚhÊbçÊ•+×ªi³ò‰ý
qsAšã5%.øˆ{–6R+ÖÜºx¤Ó¤ŽLçlµ#ä!/GgçëaÚ‹èu3Õ^CßûÞ;ï|·…ç£ŠCÕª.Q°6»iÏ¢Æ¦wÃšÁÚò8¾Š»ô;…èÆ‡¾õáßü¯GIM;ÕŽ¡µïß¹'ŸÜ÷æ¹Xe>™€ºÒ0×‹„L¦¯€i·â67ÇhÌ&LsLÇC<eÉ!<éÌEÆs!°F$ìÙˆ­ØRžíG“
Ln5ˆ»3j¦ëYh$¬¦7‰Qá2ÕjâÞaª¬±­JàÜ#7-6áÏ­òîƒÍÊ`?aÒËü[»¢?ÃÎ,]'ÙKö°+
á4±Y²ì˜k|5u:W%+ãáàÊÜ"ÿÇ;“–pX{pmç,ò²mûÚöÖju›Yä¢î–ÁÚŽÌµ©›Õ²¡Sê ½µ†Ç¯GFxyVã%TsZK­µOÐgÍãšK¿Èµ_PR[XZÝyRnšƒ4¦HSÇZÇÒÜY“Ô#Óª~Æl§5wÃ­»+Ok&›Ùº·Õ¦±Z&
uïÊüêÆÊÅõêÆÂÊ¢e÷Ï¯×kª`Æmãh³x×T¢5k|áå¯µÅjV¹C¤î·ëuuZÌüŸQcMûÕÔéÚñ/†¬§Q©ƒKß[®¤ôÄRžÛŸ+W®\™Íjxñ³oˆ­¬¹jCuSZƒk5Y³8‘ZXÓr¹Ùi5G#+Œ;,1xJC–:fqì1ú€Ã—>J¯™Þyç¯ÞáøÞ÷?èn*ëlé°m„aK16ÑÚIë2¢‚€¦ÏºÙ}õÆûÿø—ÙôÇ{wnÝb ûõí»' ÚÍÛ7¡*9^Q,Ì§4ö°Éj1sGa=pQÞž"?$~3²ÅÌ«ŠÐßl¨P¦ãEGV‘ÐÇÆ\Ük4Äjúˆ&¤cDx6ælÿT°f×Ü7'n²bÿXúý*–›.m¤ÛÄdb;á+4Æ3æ$Lòˆ=Ôìh6ºÊž³0Ryä`¿¯ÍQ¿£gwI"+mÐJÔ¤ÓìÊÌPp¶Ï‘® k£AŸ9w˜Ê<%qäZÓãkzH‚ïù³km`¶ØþÞÅÁYnÿFÛuZ«ÖA¶×(wcBçíXó…UhÕk™äþlä¬™82Î¯,«q¤ÊÃE~Aõ¾ÒFûS&4n–ÆˆŒ•ºd™ÖÖLSìò¬†˜JÞLK§|ˆg7I'/W®¿0¡ÕÂÅ‹kóËªXÜXÜ0Ù”Y­Ú·ô~v®Õ-¶ß²‚#/—&Ä šÇ6~¬ÆœIp¿µùÚWõÎ<ò2Ö>s6±Ô~µZKÍ4›M4Æ‰Ù½Æk¹råú?ìAl×æãÌÂ‡I0—Ý`‡”E-!Pä"†t†4“%\;SéöµÝˆ›!ÌQ£Ò\/„âAŒ¹öÄv¼£öÄ–í–‘(’ìgL)»Fd`û2òA‚a# Øˆûäƒ¡Ì,Œö÷ý_=>u¡Åˆ ZõUÕ«W¯ªš¶éôÓ÷Þ÷/U”f@ždóÆÚÿ«$BÇfDújpSÅjÜ%ðQQ8it µ4ífÝ®ìˆÍ«ÏNÄh¯	Ç´Ô‹Ô¤Ó¦çÑ™ç(÷¥­5Ôò°¶Ç&@rËRêAžCVò9²¢Ð'~ù«K—ž¨Fü#~ÚÅÞ½òÖ‡oýúÍ+W”ýxX³LÇDé!à×0@E•3¡—|±F…ñ#êUHÑêš1ìðn/8Å}fGBe<²¾Wáþôb/eÈªsë(µšÕÀpÈ“d—Ø?±’B|#>Z(À@ÚˆÜ#©"òáª8æ_|)m'kM½$#qD“"éð¢­ÛÄÂs$=vSóÕj¥Ñk³æl®š­Ý3|¶½™QDmî$¤Å#Õß‘mfŠc¦A*¯c•ñŒ_õf–kÀiÝH6ÐÖ9õÏÿ|*ƒá:±ƒ5Ì7ƒ55ZÄ©.Ì[=¶B[Q¾Èb¨o¿hÀ”V¼,øj~3MZSÌî/:kÁZ3Z+8keQì[T¶LíÀ*Àš7Òsq˜Ôó³ ûõ_é¤OsÏ¶PíSvlµw\¬!÷8¸83:µ_û;“ûªÒê„hk†i ›	[QŒÅŒ–a¼qÅÜg¯ºš®6~¥Œ„¼™µ/Š¤¦kÞO+ÌkÖt-&c„†N.Ì\SÇ¯X+µR¥J•
qýg® 6]4X¦Fï$;]Dê#3Ö¾ª©ßü&‘Z¯S­v»
ÜGªg]åýö”× J;hŒ»ÛÏ;«Ë†
 vúÈó÷ÜsçSwbá(ˆkí!Œ60-Ç›(‚aÔœò@Äˆ*ÔZvþ¹ç.]üH¬v…ùèÜå+ÿBøãÅ7)«öÒù‹ï¾ÉìÁ—^‚h\1X¯Wgë{Ø"kG"McLP$p­ix/Ì8f=ºyšð¸×¬¸:ù'â:SR­®[±8n[X‰Œ:Ñ^Žh°¥ë$#J”øœRbÔFI‰9P¬Ý"ùDÑ<•êýCÃkû"WûM™˜Qƒ¹Ž­¬I:³Ø†G3þ#5z–ì˜ðHÊê¿ÙFSfY“ÿb--:£ïf3b«5Á3~Ëb8-·$.€5f=™o]à‰7»¨{ZÓ¬Ù<HzüÉm¦¶²R#XÎþhwõŠµÊ Z+®X[±(vpÖ
ÆZ 5©è¬íg+¤A^«•!?kš®mÜ¹ÖŠ©\P­Ï/cÈwÃ­ kÁfCEãÌZ~Oý@kŸþtæúYM¬MPpMš'kD5ÖÜµRc"¤Ê®˜¥æ5‡kP™Ââ¦‰â…¤çFxQ[Q†´ö¹R»ÂX«ÝÎJµÛ9[b?kÖ|l¿¤“…ös õrÑ¡ËÉ]ÚQÆ‹”*Uª”¤¤ˆÏà4k9»®¥ôŸÔœGÎ=hVsR¦ÈlµªÈf•š×™¼´ nC­¸8­8­Q(öâ6Š±ÛæÏ¶»-×ó¦~øÔwÞóµ}wßG¶cPÉbõ…b®¼Y4wDÞ—J-¾Þ8ÊðíÄ›—ÌV{÷w/~ðÉÅOþåâ¹w?üðÃs¯~ðÉåóiúÒù¿áA'`+W:‡ë5[¤lÓ–§‘:âÂ!'+"XËçbîµIPY(TgÂ¨8LcI½º®—Sã=ì÷Kßh8¡Ä©ôì˜1Z$gY ?,z–€r@ø/ ØãEMiä>fY¤²o©ÕÊÎ:éÈìf§Ï¥¬BËZõ¯…dÍ¬ýEq7#o¿cq!ìÊ-¡!HDsïO²M§ŽayÞ¥q°vê{k[ÍPŒw0Øš1gúùaV¨©Ðš&AÚ„(J¬á«ÍÀdËúËu—·Ì¥ã1¤’M´£³¶PÌ	kÖP±*6«œ5¶©cZûã2ò³§;&—oT<?; Íè	Mƒ~,Àš±˜‘YÀ8×ê2<ÒkŸr¬LYMs|wZ¶¦/5.¦h§'eˆÏæo²8H¥¯ÖÀ³š‘W­b¯àšX;@šBGV 8
goX™lÁ~›Ø®Œ„Ü-Æ¬åäfxÖkœ¢mç?²»^`2/ºÁWC4eAìR¥J•Êm5›ò¤±«‡ÖÏ\÷˜ÿhÓ9ëò«³ÂØ´õjàKŒÛÂÈ>8-@šS 1±˜kÙü%»!‡éŒôÔ‘{žºóž/ïÛ#ábâx/¹`|(±Tªt|'Ú‚dhD±µK]úHS Ï=üÈÃ—¯|È$È+WÞºxâòç“4}ñQ’Qéâ­žX…5–B\Õg†P
ÓÏ3óõÃòb×Cœ÷VÇ<ë	Å˜É«©]ã×É£³±bjŽ³Ö‚-÷„ -…£,˜s¦>‘ÿ šåŽ´5ËÓm;žkðj¾Jq"IŒ£&Tíd#IXëmÎ6á«^Ö"2kg¹¬×é´†Ú*žFæ#¸Fûh‡k=®”ä?ÒŽ[ÝÝF–³šðLêÐŸÍåâÚjÅÉ.â m6íÑ“ª§vìýc«Àšu9* 1ûi™¿]wS¦TwGgmÆ·a×Æp­ßYc/®YÛaÑšÅ‚Óv˜Y®Zû,êÀäêÆŠç§QÈòMÈpô]ú~Ï	,¤„T£ápåàÍ®Š3 ?õ¶ÚâüE¹ømÁK¤Æ_hLÌƒi§öOœTœÈâÁé…Š¨(£E‹¢®…¾•…é
0&cBÓ’5Âúé.n0œ.mÕ¶rí?–F¿Yµ±±Õœ·f€–ÃZ_|È€Ü†5˜,øiÈxÁ_—±K•*U*—‹¦YcxF×¹k²ÕÐ¬ Í(-÷Ô´Tmnv.ëô4²Ó›Ó¸Ài¿l¨×ž—aï—ìÖ1=Ävü¡ãìÿò>pmÄYò=ÎšÑÚÍ&¨£ÄÙ[:’È*MÇ
m|éûÉÈÙ_¾|é#2 ýýjóá‹L¼òÉ•‹ï~râûç/+Ô2N#W{Œ¥Õº!`U±+\?žSî$³u`‹0}YY/˜Ÿ¶Wl•kuÅŠŒpð>+Ühê".]Êð²’j‚5>R Z<W¤Yþ(¥t@Ô%HÑ!íÜ*LŒO3Ã34¤ôËDWrÝ–<»„_†É˜â¦$Í^/›ÝÜÌ˜úHi¢c†Ñ&/L‘Œ6ƒÏ€5C2DõÒ¬•v/p)P³3¿÷ì)z.6*¢¿uªÛA\z	Üº »l8òTiíðûïo°‚ÅÖ¯­/À¨¢»WhôÇ8àLQr&º8ÍwŠ•Ö‚ŠÎšmB5>0Örg½ÏY0RÖYûljÿÂòÊá´¼½:ûQòpF×ûk…¸ýÐ<cMxRâ“ Ñöã}¶Úƒþ7/ÂEÖ&æùÖL/LNMMóíâÛ79Aµp©VÓÂ58­¢¯.ŒVã+½Ì(‰‘¾ëÇ´`•nµ
±a4ÓáÅÉ
¤†x¾Œ„¼I…±6HÀ¬šÑ„µjjMg4– é%"cC®¯ößÝ~[î¹¹GJh/UªT©<¯_tfÖšyi›Pš[ÀÆ…DV¿*ª	Õ8÷¨¥FHF“	‡ìÓo/œúí G­/ËQò€æ%þÒqíÝë1m´6<|÷×îºdY›kZ¢XõZÛ`-Æ‹”±,ÉC§Dø‹CÀÒ«L‚<wîüPô×|¢Àþ7_½|âòå—Æþë#ƒ'RIŒÖ„PIÎHÕh™y7Ôˆ;¥72ŒÓ…xÞQYƒ|H{É;Ã}ƒßNx¯šŽ˜Ö=1Úº­F&­’¯É•üGéeŽ˜1¡Ú:\ˆ`54Ä#6R?–õóYf)ÊX[:¤rØK­´äQzq¾J£Yå‚´[´½v[¼c<Ôf¬™aªu}²Hµj=VœeV8M0Æ!m‹xO:ÏÚïîYz}°Öå	¯
ëç€Ò6o(’88d‘p°š…Â­ k>§'­µBUl#5/ÕÄ6yc½P{"Ì‚Ü¯ýº5ã´Ö>ššY¶ìÇHkœó~ZÛ=ž…˜G]Jv‘Ëºý£ÁR+.`³
ÏÛcŸ~úO,ýák8kAóÓÓ²Õô]š˜8¸€¨³65mÞ¶&D"9ÏŒN.–}¶ÆÉDÌ¸©õlúÆë–ò`W¥>3:ZÕ$¬¹_ÒÚÍ¨?`¬ù|é6?’#È;j¦Íc½°ÝÌN³Ôä‹cÓþQi¬•*Uê–×¾¤ÄGÉf>ÚÁ€Ñ›†6ó\;¹¶7¬Õë¢”lnNí^8-Å4‘¨Ló„øË1Ø{@\¿Çæï]­'ûÖ“O>öÄŸ~ûOîúóÇ¾<2Ò¦JØÙ}wï‰Ò5õŠÖD,‘M4zS>$ÄSyÌÌ¯—¨xýËv½yîÄ¿~øÖ'Ï½”¤ßÿkrÓØŒ©4…}\öýðˆqâˆÕ×eÖI\6)®ˆóÞÚ©KÁ<C¼¤:W_oÔi`Ù\I®5·qÌŒAá\µ^ÍyÎj­µíg')'Çj!E¦8DÓCtxZÿ¶<“Æ©ÆEkL‚ä±ˆåÙÐü¹”uQƒ Ï4Í˜èXMˆ`S€Œ²iÑZ;æQÁ¿VZv»¾ÐÉ¼aÖÉbuºÝ.¿ßññgŸ¥c
=2AOåC§¶ÆÁ7/Å‰XAl¥‹ kª¯vl&l@¼¦Lïå@i•ÁŒVPÈí—ú€…BkÈ¬µ0R¨Šœµb¡µaÍh­Lƒühb¦&R»Ñ°fx-ˆ~†£úœ¼ º~ZË¯Â!Õ_>¸sç•iþ†a€¤Ñ+ˆiÂhtrzjjd¬-L«Jö°&V[d§‡–gæ§™Iù´0RãqÂýWa4K‡¤Õ-Ž
5ÛÀ:º.E²Œ„ÜÆv›_±v;¬æU¬¯&úr=ëŠÆúaM=j\”ÆZ©R¥JÉVe:NæÀÆ®¾ÆØä³¬yÍ¢ª%Àgn.»ÊQc¶[Hm ¨yLóŒæLè5Xêz½ý—O¼ýÐëO¾~×p’‚%{Tø:×†´Ñ„¢!+ í@°Q*H0üÙ«)œ8÷Ö'Î_¹r9…x9ÿˆà
XkŒE¼c‘÷zÑ»L¶›à‰ƒ&ã?Ç:Þé!,@%ñê^Å¤ÖR¹À†™N¢³IŸcÑ$‚8–â(g­n5¸ÃÆ“ò´H³ýÚ’9bµ!1¢{ëŒxH°¦ûVöZ°–5£á4Ú³§GC±ª.d¨³r­ÅOqsãV/n§½“rÔº[ÝœIçïp¢ý­®ye3·øokt.š[tIûÜâìÔ$§W™÷¸«Ñ¼¯Ó1X[!¼¿f¹«ÐÚ²Môuý¦škú­5ÛÔ„8HkÞZë‡µ©\óRÁXÓ¦½Èj}´V®XÛåšZ¨@j7NyíkuP¿ŸÆh^)-ÜrtæL‡®‚x!@œ{›MòWáÜùŠÇ¹Ng/ƒZÎZ…ØøKI}Ç&§É„”³ÆfçÚ²TÃY³ÀÌÊ«-ó ¬æ"üWÔÀr«‡y@_äe=ÄóŠù/CFv…±fœ–×Y3_íö@k}!¯’¿ðé"ð€õ´‡:k¥±VªT©[\ŸÿC¿ZmBktÕªñéf­X£k¬&_m«Û¬fy”T$µ¨NDh£­_Œ¨	O¸&<ù—_yýí·_èÎˆ}ÕSr}›éˆû†A0é˜‹“(e)ªêXüÖZ·µ_¿õÉ«CÉÃÿúp‚Ëõðår°kfÁZ¼² “D@–÷NÅª]K2Ïâ¸Ay·Èž$/$á}MkäS¡µ:Û6‡%Ü §¤áSÍtÄm³J y¶´®Ïÿ0)mÊTOˆsiÈXÍÁšÞ÷ÿ`@¨ÅA"ýû§Y{¸e
ïÇfk·x5;iÑ²4iâ§µÚÃW©q§±Ž-ˆ­Ýì˜@·î©nk«›ûg[]xLT6>~ÿøø3Ïl5ÇŸoµ¶Ð3ÏŒÓHŒg<Æ£9¹Ö˜þH¤ M±p+?ßXáä–¸(j f†ÚL_6ÿÎ*’šW¤xíš…Öú³û§`µ©«PÍãÚÎù"å$ÈÝ¬;¦&W¸‘¨d©	Ë‚Æ'7hù÷úœ4zÖH} §†Ï5d»:²küïŸ®LÝ®…jƒËaÏûŒ‘ÉÉé‰©éQ¦CÚ÷lzzÆþBÄæAº
k¾„¤Yö#‚Ä”¹áDà"ë_oè†N«î>à?”¶Ê®X±†§v’ûoç
ù"ý¸æ}¶©A]Ò‘ÜpY»T©R·¼>ÿÕ»68s™ývòû&Ò*67÷‘Öœ¯&1Mn«™Ï~”º×šû@-pÚ6~9}÷o¾ëå{Üƒj¶õÐÙ¯½þöã¦‡eg-àƒ)ûd²¹G-ÜŒÌoŠ†Û,e3ã‰‘O¤ë`Tª"i4ÐÀ•ÚKÜf\Çœ±¥lº.úƒ‡PªUTÄ‚àñj"¯‹«ª¼GUÒnÌéN«JŒæ(–ÄÍ?"&SÄÓ(fe±A>¤)ëõºÁ¯Ëw£•¬‘2¢qá˜fk!”îÈïÅæp¬A¡Ì‚ŒÛØl›xg'›#é,dF¤ZÇˆÍW»î6›Y:’ÃZ³õ,ßzî‚Ç‚ž^ZR±¼×Æ¡¶ûïW{ôèý¯=-=£ÍHî{9¸eÇlÁÚ¿AjD‹ @ˆ–±¨¾3Ð8W¶ì:|5zÅ8È¢³©i3ùEkÁYó Cr¿›ymZ;PÖÄÞý:05©Ýjj¾ñ…¯klNŒ”©+Æò°¶Øh‚wfÒ™=Àªµ{>2LœüTƒ¬Lš©¦¦¨×pÖæ'F§ä1Û,Èƒ£NPn“‹§(»Æ7gÚ¾•ÎLS£uk,W3 s‚Ì–]eìuë°†mrf•—ðÛl$Ï×ôµ®•ËÖvƒ±v›› 8fó|V„µ ÛÝÄGo­ytsÌ¶­ÒX+Uªº¥§@BjŽÕ8èÓQñk¦BÂjFg››ÞU›Íóûe$ÅšÌWÏTIÍ'ôwû=µ@j} v•›–Cšé¿mëhÓNã¶ ÿníwµ¡ÿ	»¡¿}ýgï¼ó`èÁ["eÃÄyÏ¾}gsOÍh‹Ñ¶ ÉR¡°ÄÁ#ªWVŸ‹yFj‹°Hwt°!Ðª‘
 `'A•±ZÊ·.ã¯u«Çô3{&U?­k@[U~Q%ç1U_JÁB¤*ŸÔ¿sÅG¥veç¤áêl#‚ü¹éJf·[šÐ™OvŒxØ{kCŠèÓëJ™ã^¶Æ¿2?<ŽY¶‰DkY’ÄÐZî¦u9Û‚4;sÕ]‹ŒÕ4åXC;Æ¯÷wv½÷Á§÷øãG_|ñè7îuúÆ7(Ìð;6“ÜkOóÖøÖNšÒE¬&6c:‡T‘\þp¶L¾ˆ¢r«ìˆláæàŠØ¶ïä¬¡U±A5äYÍÛõ”Å.+bïFn8óû&5Ã4k¬í+‚å.™—·×«YG=âÐ}–Z˜1éÆ¦ùáo­ì×¼]Žì¬Íã¬¹yóÎÏOkN0œ4?íæBÊ;C5vúØfžÕðÕj‹ªíiMØv¸¦2‹« ^M…×–å½‰ø8*å²µ›ßXÓš5ö kÀ™L6kl!a„Ãk{•škCd ·ÒX+Uªº¥§@Z®ÈI)rÒ/QÖ¥Öf‘ÒD¤¯²Ái³øHÍf£÷âm««Ä¿"©µ€iâ-hA?bÿ‘v6]ämC¹Ào|Ê;?|0m¬¥Â/¬&¸E”µt–PÕ“%Úâ†[:†o¶æ‚<°áæjUX}v¶1$Ei¾¸ÌAŒ$
Ó /c“ÙJµÔñH½šrUG©nH–ÃWp×œZÒ0´s½.ÖB\›ûÆcë^qc„¬kÔEŠhv¥8Í!]#ÍUù¹kÀZDì¥È -BÖ±ÿô~IøiC‚µNknLöY
å52HÍÔŸyXëeÍ,jëÜµ£ëµ…˜ær=Åi¿{ñA~É/>HMó?~\zá¾\ô½^¼Ý¿Ü·£ããVZC
·)RÛ2°FÜÀbo-0Ú¹áF) ›m¨€jÁX+:kÁXcÿG÷³K¥¹¶kuÇþùÉÕ”$bßVyT°Æ)(§*;¬ØŒ—üMÉÞvmÀ4ÛîþCºó Á"’Œµ5õ½øZøŠØSóûi&FG÷KÜà˜˜^48C•š“Íkjj*†ŒÕÄm¤@Î k3‹øj˜ëJ\œY¨`®Í”µ±wƒ±f%±q×

Þ€¶0ÂÙu„c¡váÊ]—ÆZ©R¥nm}&³Â×y°ˆºkjöã,´–gJÐ ¯+PGð1—u­pVn¨}o«°N­Hjf¨yPó˜æm[Çþw´lù®¾˜<Ákû³CàG»+ÎƒŒ‘»	^Ù#á9"qOÿØ±ì/MULÙe5¥â›½*×ˆòy‘qlÐ%è“„Xë8Z¼’¥8jIî‡n5e;*¥43ÿŒ‰Š‰L.½áF$û×e¸á³a·ÁY¹xDTi×>Ëü:3’jÊ£ÐQ;‡I]¹eÙÙ8E4‰ S`ÇIqþôdµi}^ÜÉe2ÉzTÃÎDd½žþÅ{ž›ñHËÑÜvÓ¶ZZ›–RÛ2aŽå¿ÚÙa´û^8}úãÓèãO?Å¯ûôSßqb”A5/Ü÷wï½âº£GnlX$“˜íðò
°öó•Å™Š*2©ÌZ˜Ý8P…áéþ$HmÅ:k¦"¬¡BQlç­f5Ž²ÊÚnÖÓË7‚Ô_¦æûFi4þœ{^6æÀ¬kÍúø­ÞìÖ7Òý4wýÓŠ+4A{5kA…€g4›,Å[íàäüy>ªfòûJ/#1]Çj\n k‡U{uŠÚÜ5J«éiªwÌð´¬µ²6öÍ¥/b5ÄÙûjœ©ZC¡È'dvHêÙ$HëÛ0¥±VªT©[ÙWû’C2yh°šítÉì§y'MÓæ 4XM²«FJ„8¤‰Õœ®MjÞR+pZ¤Áb¦çÜvµ.=ç½¶mSÛ;T¢ÖBµÖÜlœ$0°6¬ÔPmé,ÞYžIÅP)Ž `IþÚZÛ­>“¬øšðÈÑšÑTÇ¬JÇHÐ–V¤­×!.«†Öàc²WSºÆî¢ê'FÌ~Ó?:4É|cdN«Ñ¼xWÿQÖÀ:0Œ=
VÓ!Ã»F®X][˜—(ÔÄÐa¡†Ij{bkñ$
„·ÖÆRjª­Å¥Ë1Óbx4‹†š›½¬Gß¥uL±HØF-p ÖíèUeò8ŒÐž÷RÕò#ÖÞuç‘»åÍUóÔSÏŸþŠñ›Ü·§a5M€4{Ñg¤…[©ÌÔjäy6Rë±Ò iÅf÷¬&TÞÚ`kÍÑZNjnCüV”¥­¶{5Uùý“Z`5d&Z~2D¶[Ù`9sy$°–÷ƒ‡ZËÜü#Ád?„‚·8ÖPÁWÛïZ;ùEœ‚µQ@mjÿèÂÂAò ÖfF''güê5SËü°ÀM0·*TÓÁž	ÐÓS£–BÂœH…ÂÑÙ‰¢ÚZi®ÜÜÆšhM•Öh-½ßQ›e@ºÖ3šõB¤Ñ˜³Ø¼—fÊaÍì¸òw_ªT©[Wø%l5±Ù&¬f¤FCvÓj5ÁÍz¤6 k[ÔUSucöª…ìGOjPóœ–CšÔg=÷2‡Ú—il³vSà6^¬ýø¿î{çQ;mÎ/C
ï'#Qñˆg—"ë¹rcœÄ?±“je§Î¦Ê.9†q:Æ£‰°ˆ×¡-TçqAXbSqÑ $¦S
ÄÒT´%ô[ß«¸}ü5‡esÊY×ÏIu»ê$rôªd?¥öÙfÛ		ùÑì²ÞD„	°æA-¦1
’s˜Î	ÖrƒOIF"‹õORºÖ\
dÖn‚2‚ûã¡¨¬‘Ý¿†íÖu Á5³.båaSi–Èo—îG¬H“æ!í´g4ô›ãúMÿæøñ3Çß;núzH×¿Ñý#gî¹óÈ‘»Ž‘óö4¬öoktØ¦š›¹ÂÐ*ËÇ4Wªf+Ïv=ò¼Æ¦¦02àÚ${@5H­è¬My­]3²„µÝ«ý‹+7"ò‘Ý›z¾äõÕñ" –ZŸ
H6 Ö¼—÷}o{šFÊŸõ·8¸ÿƒ®a¬±í æ?æßŽ)u'øf¹âj‹|©¦&ìÛ» xÇªpKÁ!‹5Mqdiš–©nÕ/&«a¬)ü‘9‘ ZMUÖÜaÉ°•r"äÍk¬±M¶°f &B×

@Fk[ðÑ¶W²y ûâçJ•*UêVÕNÚHGkÞÏá×«q€g¦oÎÍÚRµj,PãÈZI#˜j…ôÇHM 8-PšáØG/£xùMA/kç>OmCÛ6°½2ôŸ_yåß!J¤-X#^„ô~r^-E‘Â!ÇÒÔ˜M´à¥’ak!B/­êb5mR¼‡ÑS¿ÃYb%­X“êØÊ§Ñ¬o—MãGŠØ$ÕÆVŠ¤ž°KH‹þ:Ášé•ŠÀà4àP`g?N¬ÆÇå%µQ’j¸áB*4±R i¸†RYkHKÔ”/â”dxh²ÌzYš6!²^¯Û³µiÌ‹d¬éCE²ØXíY8­KÐ~¾ï9M©!Þ{ß/€iØdÒDgÒqNAýÄé	ÓtÏ·ÏœùòŸ>æi¼4¥‹,B'‡µc‡ÉïgdÅE®)²R¹>N´fçÁÎZÀ5Ok;;kÞXÛyÍš7Êàþ]¨ƒ«7ÀS¼†‚¯†ÔãZ	ûÉC|ÈÕL†
™áV±§Ûx'1Ü4»ÖªMõ¡ûÎÎ[AÄ‹ŒN¸¯DÕ±UrC\691??1S¡Ë×OîZMaA5ÙkJ©QÎŽ.0ÒZ6‹à¬±d­æ+­éyT)óûonc­8%ò¶à¬áœ™ŒÙt½-ã1…âØJ‡ÔXî±éí2´T©R·ª>ÿÅ“›‚2+m‰–Ôo¦Zÿ˜£Ú7™Ùûê£ð‰V®‰9Ö¶âøªéÖ
Ó¤ÆÔÇ jÓP@4ô®ío¼û†íÖøMw=¹IÞeC¿zåïüã¿ò'*…½ÖJ-ý‘ÐG´¶¶¶Q4ÚJ—å	÷m-7C‚µtÍèK–T¤ŽŠcñÒz¤·ó<þd]¹ùë@—¨Ê¹_B¶±¾Ætàmjt×ë‰û¸´*ÅÂ6sæþqzv¯c¿+©f6¦Šœ­¦B@!dä×­Ñê€Lc‘gœóœVÞÄeØ×)J²Ž<³mÜt+Ô´wØunµ:\ÎãZÖÍ¬t5 &9LóœvúÎwX‘†ŽÜõí3÷ðÛ}(´oy=öXè~ýëì_ÿ/ŒèJzï½'~ò“?ÿÅ/¾}ü( vlÃVª	Öð×DiZ´&‡m•5+Zµ&X ¦cP3DS¿Ü?`Õšö¢·6êd¬ŒµÝxm`Qì2^dj¾rL5hÖÂ¬Gzê	Òlf${ 1aò¢»òÃ:yNs·}ô¿»áûö¶¿Ç¾:ÉÈ>ýÿ8kóÛé;tLS®8v¥ÆW‘ÎAÐM´69:µ€¡ÂAeŠÙ òU1"4døËOW6Æóõçâ– ÆCÌ‹,'BîcÍhM¨æamÀÂ5ã6ã3/Á™Ý¡—{mœõø}®T©R¥nMýÁ—€2M–šÎB5<6É†a5¤jjhÎ•UÓXk’$Bîc®¦Z µ`©P»
Ór½áõÖo£l&ÿÆ6°]ºô£ýê•Ÿýã;wïÑœÇèÐÍytyøi£=<´´Ã@gMKƒÜs&kÉ¡j´éXÂH.o¾ÁfÎ'‹tkÌxŒ÷-*Lã´)"OðÔqÁ3{yÔ‹GÅôtÎou ,Å­K¹äî^†ÜZ8Æ4£rÎýPúœ¹G_> óÏ—£‰Ó„‡‘`-VÙs¢5ñ¦C9ÕÈ2•k7³8jtPÍ-M£1‰ãé’(%™Ö¨Aj>¾Öj8í;_ùÊº+/gqaš=ñ„cÐ“ßúÁøEÿ€]zRû_½ÍõÛõ6×v3'8Ä›G• 	™!Ëƒ”ÉFÈ€…Ãék¶U«¥»x
ilj®Ug½ˆjìƒFBtÐA‚ÕÊ„‘Ý¦ƒµ•ß¿«æ# ÅJÖÕ•‡5õBukÉÎ.ÄßcX¸Ý÷lèXµæžÎÇ¬kÉñÿ²w†±q]ç™^K…‹:A ¨YH$³2;ä C;TfnœÙL8^bÂ‰:\"nÇµaD@þ4@bÙ”6q[+Q°®6žjÔ6J-)Œ+”8Ðª± Ðˆ±?$LáåJX`´ˆÞ`}ÞïÜã£¹³Ü&R•ð¾œ{î¹çžR¢GæÃ÷œ÷›[ª¡`÷„¶N»G­õW”[Ë ¬"!g ´|Å2F&óxlzKÏ(¡ßª]#€L&:)ýPÜ> Î‹á¬ÊZŽƒð”S·mýW©îm^ÓHï7ZKÅv­ZH¬uÇöÿ†–?ê¡{ÂXK-ÕT©RmØíj ™ì´—€5,6ÎFk"µ'vsõ¯/¢ˆC,5Šƒ“! ˆÓªõ6Õ¤v9PKrZÇ1Úº‰nñAÏ‹+ô·™<°	ÖXyºpðk…¥V£@X¿œ5ñU¼ÂUkõ	ÝjeùPZ"‰·ÕDeA½jl¬–ÁZd–YŠœÏª)Ç£O#F_ÌƒÕd„iæ÷€)†dxX#zEÇoö¹ñ•®™cë#åªñõólÈM“#oøvUä4§ªÕÁR†½ošÐ¬Õ#W‡¤•&E
ä˜•™EÍEúeÚ;µ_÷›JáhTÃµŸ‚iOüÞž;8Íf>öèc†þZÐ%Ûì»o‹É¾úÕoþÉŸØ†Ä×œ¾þôÓßÖùÛO¿­¡or›zûèóŸÿÒœµ½û\µ#\pâ'6ÅÀ)Æ{RÂ ²½§¶.Rëi§à«õrÖºhm”G,~í*‹ÍZ›Ö¶óH½µû];sóûî…©ÆÁÙ‡>"Îº²KMq¬ÕM`ôM]¬Ž vê&žë¯Ì¸óÙHW’Ns%6«%aíŸá¬ùõ»]ãÑ-«œUýªcr¦”'_¤¥	Ï&3q$¤²EèÒÌÈN“‘&X«ÌÓ›ç†_ 9?736::”©èx/Íï¿_å¬á¨= €‘°†ÅFX1lŽRª®…tH;§;ÖR¥JµAõ‘½_¾ÚK+¡ÅÎÔ†À4i¼­ªjmÇ €ìù6tÆõÔ’¨Lµ°úRK‚Z0Ó¡Åºæt“¤âŽØ¯É\»ü­F³|ú¿ýÛB«X[‚¸ ™F£©âšxŒË¨91Qw÷üÆ}®DA2½Ì³ês°¦Ý>GZ±­G<%Þ˜Æ‰§1S/.Ü²¬}å{Ì]ÜœÆyãŠ>ô$ei˜¹4Šû¬	‡‡kµö“ô^:þô×e¸Ùå€jöÇ¨ÒyV“ÕIÊ¡¤Z­-jcD®ˆ¡Y™íkÖáÑÜŒå
‘Å=²ø±i¤µ—_þCq ö©ßýÊ£?¶Eô¼Yi_púêWßæñÚ7A3˜Œo5`†…úÚ;O8v@Çžæü$ÕËÁ·o‹å˜¾ð5•Àž;"F3VSg¾2ÃŽX ÿù½G*¶ð‰vÝÊÅ^uÖzWZKVÅÎÔí¬9PëÜŸÖYû•Òèäü½YÿhòÔ†—BG·B¸ÂMØŽàŒ#	kqË©«¦6Ÿ&îkÜÌÈvÔÖ¶¯å¬õf5šÝöÖÚ=2–Éfyçí(X+M¬ÍÏOæ³Š°Km‰+)ûQv:Ó 7¬5zn¶:Gždžëy&(¿?Ý¼tè¡5X<Hk†ÒØ¾$¶­}¤á0)xä·èÑ7zx1¤«ÔXK•*ÕÕ¦Ù/½´_°¦žÑë¶Ÿk·µ2Î‚œ¶¼AeÞ‹Ðz¡Z/S-IjIPë¢´kÈZ5IL]©Ó‰Ípíúõ—€µæÿÁ«KÊÙ1°ÔW5*Š,† âÚâ©£1×€¨Oªj¢2 #Íoœ‹e‹ªÈm³EÕØãÿfXè&;Š³×Uñ6ÛmÆ¥æ×ìbÐ¤E˜Ö%š_K)•ñè<;£5Eý+oŸû
Þ¬ÙèƒŽ yuã£U†+8Tãµ<ªEÖøN™ª5–;.öY®ˆ-},—¿ñZÔ6Xs”)O„DÿúáÃÏ”•%"Ró &CMI"<ò»>ú•Ÿ|ùsŸã›ê0í»2Èˆ&cÇDdï¼sèÐ;4Ò¡‡8~üØ1ÎèØÓ„mñs^Q`·3ÔhMÀÛ<°vdN)#DÌL"eÊ­Ç[3HÎZ 5¿²;_Äk½ò AµD¡5™k×x$y--‰ý«¥‘»‰j™€5okqxâw‚µ†tî¥;÷¯%{®ßiê‡]j!w’ÎüPïªàèC`mmg-n$ï¯Q!{ld÷è˜6®±M°V‚Îˆ‰ÌËËå,Ž¿¤šØó“óD
‰Ö*¹I¹nýËÁpô­6Î]úðÝÖMÿÿ¿|hËÖ­Û¶å³#hˆŒËÌÇ·mÛºuËC›7ä&ºM[ÓX{€CyŒ„Rk4 Y`5“.ü­°
RŠ½5îÙ:M·*¦J•jc®bx.Ö~¥ŠÐhÕ#®qÒHikkšXAO Áì8±îÔ’[Õ|ü#¦Z/R b­\í$HMG¿ÐhgÕupÔ:sÕe¹ô¸öÃWo\}£5þàœžpêÏ\ð˜äâúµr 2ãõ0¬_1ILªiH„CQd(äPŠDIç™SŽþðÔ¬€š:<\¬Íê¾€JÄÅß¡[úXý)eD7jåÇÅ†ñÊGæ	úðè†5Hæïœ+^{¸}â»áÂ`¡`îŸ¡š¬@!£T^¬ÛV:`$þjÃ¶¤	ÐÊƒ6°-ÆœvX§FÇmaA¶Z³©R×Fj1¨¡žú>)"Ïþäs¤‚<ÿGZò¨½h@Úk±ž<f:~è¸0"
*–ÇAÃwœ«“Ç¥“ºuœ9†pÇð”'ÿ·ƒ5qš\sÛL…+p®¿Hª‰×ÖYk-€=² ï(´–A†=k½µQ¿R‡ÿÉtíUi&ä}®ÑÜ^Èå^Á€$…ZÕþ0)N$d9êè•Ìßk¼–†ºìµÐvÃZøt.k’¯m~l»×zö¬ÝùÑÛY¦³4º›cDûÖ ›±\©”ÏÆÖÚ&Ùè(–f‰`H0#]„Pc«‡6®U4±â†ìuu±Á7F´µM(·eÓ¿ ©mËŒt	êÉæóÛ¶l›Rc­‡|µ ¨Ë`ÑL³ÃÝôW°[Z;UªTS›?ªøGôihÍ¶©½DûœQ	ÛXm8‡Õ 6$ß§Ñ\ð¨v¸7ª%M5Gj]–š3Ô.¼ÛsÝô6ZÖüUçêíkË«+ª­BiÜY]éðÄåÕ«+ÀšáÚõ7/¼øæ u¬ËÁÚÒR_¡ ”ÒjG§~¼5áŒòQÄ’’C¸e³«!Oƒ¶$g©á_	“hEof^]Äd J¹_$9Ö¡&ÇPÃLÃz‹jÂ2Zá˜7Ó"HX¶ØÇ"E„g“	Ö,Û„×Ä_š4ß!,¿Èü<ùl†‘±È „VÕ×Føãb-*ÓZjÿ"!—åEõˆYŒtFu‹ç_XPµë?ýÎ·GM+ÿý§>§=ËÂGÛ©±æ‘]gñ®4¥ÅÈJs0fÙž n:uòÔI†¹{2T2‡ÛÞù›}GLäŠÄù"œæf”G¤7AqVÉVAæü£·Â\b)dP>‘ÜÏáµ5œµdÂH µ5a-Ý±v_kgWížÈ ÍÔÒ)&1öá®‘@*¨Ë£ç¯S×OsÝd?'6× B]áªe·£uÀÚú55×FÑX†mkcÙ¡¬"ü3C´•\®B¤c>3:”ÇRßTš^«ÿ
©±gÑ¯h 2·kuNYþóêÀ7	X»·ùý›6Cj¸i#ÝÔ²cc:å×ÒØþ˜ÐüidÐƒ‚]‰Ô~É¹jÖ	Iýv#Î‚LµT©RmÔHEŠ@f¤…¸À~±š zÃa×Žµñ‰ò4Ø¯Õ!‹‰¨fœ¦Të½U­ÛT¤@­ãì4@lÇ,)Åa×–¯²Î±sûÂ‰ËË·5e«,_ãé\.‹Ø.Z0èŒÖÞü—~æ3Å¨EzHŸù›µªBDŠ\
ÖúðÆ@#T!#±ÛÆg‹Þç.Ë•6b5ËfYÐ¨6‚B’ÍÖ¹‹ "vòÉ_›vaŽV¹VòÌ™dÎYã)Vö°fAb0D	ìYn»ø½˜$4¶O(GOO¶Ã
º	ü´!­ì@n‹åêõÈŒ6b6…~ýQ&öã«EÃ¼à"ÕÕÚT#	ÓÙj"¶Ã±´GKí§²ÔDjæ¨j¿óè£?ù²8´Ç/|^{Ó$ö¥}Lû`©#ðuü¤c1ª”Ãe§n¼ˆþoœÑéÛSŒ£t?ûZš¿9bõ°%îW‰l6ª½¾W¿aG.‚€P‚Êzlµ s9u’Æê±e-ŒgMòÆZï¢Ø»zÓÚ?rÕR_í¾Ô®¡ù»_ûºÇ¶µÌ¯@4l1ßIæ=ÆÝ0-˜la0!†Â‚KUqÓ¾µÊÎíkèÿÇYóŒ¦Ñxè5„w=´{4#o<o«™s
„$Ç?ŸÇ-Ë•ìMNÚ£Z3:SylË™™WŸûÊŠ¤ÜšN.4’ùý›ï%ªmËº•#(6Þ—tG3yýã1
¯m¤õÆÖ”‘Úo_Í
c³7õ`53Ï4®žŸcÝ825ÖR¥Jµ!c !3j«eg¶U-°b$­-ƒ4Õ‰ê_,/£yN[ÕÜòG¿ú1šä-´Û’ v»³|¹ÿôÊ*–ÙJß¥7¯^jO¯¬¼÷Þ_a®]½½‚n¯¼»*Ú×Þ=}7éôÕëÐÚõ7Þèë?ñªB y([„Èf«¯ß%?2lé‰­~s˜í¸®"û« ”Åö3‰V«2nþÏ² ¸Hµõ­PÏó"­]ä9b>ºši›ÍÇÌãu%0ïqæN›@0Z3ïœ±<4ûÂÜ<­ÝŒøÊ0ïô=áeõŠBº*ôIoÜ¶ç•™ÕjPUmQ[Ó µz•{b³zÝ(­­Ê×1¥ñ@°–ÚŸ~‡]jXj5e‰|å'Ï>ÿü_‹Óøv¾-L“´zñ¦ýàçìä©M×Ï:uNþ)ºŽÎ»~îjŸ:‡¸eUñ¬ÖöíÃVs±lq¶wö	Ö&É)°ØúFÔ|¸±æ—AZûÐBk¨;RGO_Ã+%µûÕv–î.¨¹€GÑQ`5ŸÊÈh±™ü)´=£!ùÕøà$u?Õ=ÌÁsb­å_Smý°†þigÍA›‰ßnðnÂSã—Ýµ…Ì9…öÓÀmcTÆVØcv´²oÞE<Î[¸›ý–†î™[©4H†Á³’H¯Dâ=^ðžm[Û´eÛPÌfYwæäJs`¬ÑaxlöZj¬ÅR=ìù ¬­ý&+ “òPfU×¼¹–¼ù±4S&UªT‘ÕÚÏfÐ\F©kÑ¼&vcÕ#˜f›ÕÆÿãô,`Àc¢>]_ ÑpÔìH- šßª–0Õº=µ –H¡¿ºÚYÓVo_¸tùÒ‰¥¾ÓNYÅBá÷¾øÙƒåæ¼ûêÀ‰«–úú—
…÷.\xóÂÊíËý'ÞZGoýäÊêíG/]îS$¥¯a2EÚ7#yLýz
Ì$ò°©6u­ÙÀOÓ,]Ã;åüÇ5Ö¸cŽ˜C3æÐu(e§xÝaTV£PM³<‡T5Ä§1<äÓÝ	`šJšˆ=OL$cºÃ°nZ¦™¦ò5)ê¤fþYVƒÎäÅgg¸	>HXfÕd“Íg<Þ$ÿ±½¿M¤¤YkÓº§±•ë‡Ñ¢P­¾€šMÙóÊ+_ë"5*¨}žÌÇï*C	ÓDjÇ‹Ó~vÜÚ‹Xf¦ë®¨ùõ³gÏr–è¡sgÏÒ¿ñÃ]?GŸ±€6°gÍ‡@ª1{Mœ¶êk°Q#
¨8[‡Â¼ jAù„³¦ìþd¡µà¬¡à¬…x‘5h¥eÖî}"â}‡®BÄˆ'5Ê5‰ÝiœB#u»i¦$Ïù˜’PÛ_y¹Â:æ3ÛÑ?‡Õ¾ZÒ[ãÃ—Z£Rj¿V@ò&ËìÞ=’ÐÆâ2Ÿ«ä†x'V€µIÚÒØ$qý•½Ñ‚Ò¬ÎšNÊÁV¯à»±Çmèƒ×,c„zÚä÷ß›½j¸jh(xj´A0i>“ªeùc\Û ádÿt5ìur±CÀÈƒÚ³Ö‹Ö´ØÑj]Yî”k©R¥Úˆ¬¶8þ{Ôä¬Ií6òE,÷±¸E{0E$ãg¼n?ãÏaÚ‡eõ‹Ô~?ìTK’šµ•«ËÉhGôîÒ‰Ë—¾xé½OîXZ"ÆQE­‹Å)±¥©âÔÀŽ©F=jì™ à‘}h­fµ@»§øY0Œ™…V¡ÿôÁÿt´°´Tˆš)ü`MŸÀ'MZZŠÊqB?hu£›2Ê¸ŽÊRmPùü TÝAkÜqë!%xêñÙi¦gYº?÷€*hM 5!®‚Ù¸†m–‰W¶DÍ™Ð =‰z\ÎÁB¶YfšX´hûàÌÂ³]nBF¡fýtÚÞ&¾¿ª¶>R«0#Öbjñ¥XŒ¯i~¬ÆT› Ö´Þlãjs8?­^¦=#Oí	Ÿ'b»Ô¨‰Ô´Eím}3_ûæ·(çP“lÏ™Ö:š0ÐÎ¡ë¾\ÞêYûfÿü­3¦³gÏœ±°ÎNçÌÙsŸÿœ 7Õ¸íïqÓkœ\ºiå“VBíµÂK
öž	¨–[Ó’5±Ý)Z¨³–ÌîÏ„e½«b®éÃK6‚)ßŸîY»Ï5:Wø¬'¬ñÐ­ÑGˆ#,'ßñh–´×˜¬{a–Ÿ`-l`¤Æ-kÌî+eô_ì:`íñÕx¯¨ÙIdžwR–jYÞ:z'qË`­4S‚â¬´šTÊQ[è¦k¹ù#Zãhï[ÉæµŒøŽ‹ÞË*Ê_ÚîÉBÈM[ó‰jC¡#lƒÑl}äP&OÃjÏm[JÓE¾šX-XsíŒæ/ 1ƒ®Ñ–5”k©R¥ÚåÕØ¨æ" ]%5>ÈÕÀ4ð@r»¶hÐôDØß[0NãÔÛUë“¦šHÁgÕnGÝ^]9XÀD˜Z‚“éÔúŠ­½¾)!ÚŽb™0ý©ýŒ`5j\·–¸`>Ma"}ÜìoÕj-8k¢¬l‘2Ü…t#…1]Ï‰´õ«ÑrEÊ\¡kõ·Œ‘–úrÖWåÈÁ«9Zƒ˜$@Î®6Z;EZçh!!qà”6wÙ+9Â’˜‹d®É°ã†Íe­U1[ìçö®‰–…š¢3^UžU]½¥H¶ÛÌŠj‹‡qÏ¸^l/ChívLh,…TGnšNß[x8”½ö¤æ-5Åóÿ¹HM{ÔH|dšâ•âø3¥ˆœ$"äNÚ¹s¾¤¹Ì´aoAhou`3éÖ­Îù3[o9¿|Kß|ŽÎÙ³[La"3]±…¿ÕææÒ<¬02?ç~µ¾—ó¼¢á,½½æÚZÎZÞOj	gÍÓZÖ‚³jbÓHivÿ¯šv•î’›–d5g£q8FéÄ9¤~§ŒÁn1ºþ¥ÂÜÀmŒn“èT3^œ‡˜vîJüÇøKIƒÜéš°iMË…%VÚÛf,—á„”62”Éå°Ç2£…øW„kÊÊå­[ÉUlCš½ÿgDk°ïÑ1%‘Èf/ñ¯°&iéäÖ»ÿÊ-ÁVã0‡ÍÜ4×Ëbf²C,(•¶mÝ¼ëaùŠØ<€·$>óêvÐŒÎ4ÁE<¬©Iw¬¥J•j²šl4-{¤¶ºmr•'"XS d³ÙTÈ`ËÁš…ÊcmkÆjë@µ¤©f ê§!C:k+GOœ8zðà·†UÐGKÌUhØeV(€fŸÖˆxl5Š€V¿Ž¾°Öl´¦ŠÅBU°†à1×+´Z†lQd­‹SSSÐZ?ØOÆš–7:ÿLL¡*7¬5Ë<Ë4è5ˆˆ“EãKZüè#ú-„¿l»Æ”•	nÙ2Ù^¬gîƒ^µ	k¶úÑ|¶hR³>Ÿ¢Kîï}šï‡â&õRsìfm>>¾!—™„‡`¡i;Úâ4Éü¢³Vµ½_D®}jÍ²ÁZý°kO<ïSûÎíS¤f–Ažq˜ÈÓøi|7{LSÎã)„¥†“†£æÍ´3g:Ð— mùÖòÅóçéHËç/ª]vWºÓép¶kWÍü:°Æº'Â¹•3ò?c)¯ßÑÚ^n½Î=q?Ú‚­ÃZÏ8H‘Z µà¬õá;kÉ„‘´ÎÚ¯¦²sw—Õ‚Ë(‰ÖLÁ.ã‚9t
"ü™ç_Á†¼ÂD?3ˆù‚Æ¹RN ¶=è—m­íäxmthh'´é  Ûxdsc¤@æô¶ä·$¥\IÖ 1U^‹_sò×”I‹\ÂuÕÆi¯ ¬¶Ò¼î*k¤²åíVCCþd½¬£5EA:eÆFÆØ 7’¯Ì(LeÛ–ÍÝX»ƒÕd²}@j<LÖ¬	°ÆÁþ²!¸-5ÖR¥JµñXM„ö¿,Oä9Df?”öi¤bjãÐ¨†ÃVn˜‘#hh²Êî	ƒ´µQ­ÇúÇë„  GÐ«+W_½tõ2®9ø…b?ššê+`xárÉDëÅà+¡€&ëÃicþ€Õ«/Ö>x7h«™ÈMµ” ¢€bEZÃ:ZTµ]fúHP$°S?zì~Ïjec(Ò!-ÒØdã Í,áÑm@s«!a5Ûž™±&ªbœYÂ*C»²fs¥×(†m°¦
ÜfÉ–#µ¿K,½Ôüš>-¯@j$¬f™"5í(äiN,zÆ¡ýå6´V¯ö•Ût4²gªµÀ"Ö:k‡ÅiO¸}jßyå•W^þÒþg¿úÑYj”»&NÄe‰’Ž{GíÆ‹„9žC5_Ò\Ö9JóHv±³|ëý÷éÞ¼¢oø­å›4º\¾éf|[]ý[™iŠï÷¥±EkGüOkZ…€5Tª{mñý½@-™1FLÙ5œµD¾È‡÷ïJÒZZhmØjkÃšU7Ó@ÖÄj~èÿ„;nŒ»nÀ¿g?Û‡¡`×Åã`ÙøY@mûúåòK×öÖ’¤f
9ü‚Ãwõ†Ò†2cÖ2“C£#Xk2×òœIî§HGiKmŒÀHËŠ4X›SÔˆrü1„ÁÎC#tqÓJÙ<ÜÆ4ž6¹móÝÍÐØš	œÎÖaíƒ{Œð'Õ:HT*}ü··lúµ.û³R¬9Vã Òö¬!kt‘„LÖœKw¬¥J•jãé£íýª¦ö`š…öCkŸnÛv5e@ŽÃjêC1 D9j<üDµ
¬T“z£š[ÿ–?ÃO¤Èr÷ÚGlµ'>Ó¿tô“Øà 9"¬vÄk5Z-ÈXÃ(¶ 0fhud[ý*FÍ¨UoO4Md»Ôà2M5‹m©ÕÄh²ËôzØ¶CÅ‚¹i-{Ž$ÿJ°V¶L°¬Yã†T•u&TµI""(‹Mc&žT–4¨ÝbVº6›ô²­„´E‹Ö,”&ðR5íHƒ5é³hbTã~>d6-PÖxä5ÅüëUj,[¶Ý„®€wP[\l.¶Áµ2³Ë‡õv½I`¿Eô/`‹.,.ðjM[þè7ª½òÇüzê‘ß	ÛÔTHí5‹9 ÖVÜšµ/ž»ñCtö,«õE·wu:v†×®Ý¼rÑ•Í{ÿÚ2¬fÒ‰è–À=†µÎÅ¿ó°f•±%]«¢RerþÈ\iþ{Xl¥T	±rj¾Z|ø6¹
2(£‡+´œ5ÉXmÍBkhW/c#uÖî[eçïr®Hè¨ñ¬fvX(²&ùªÖÈ7Añ4»íQ%Cý=­u¿¨íPcõ`>;0í§µõìYãÃ,5OjÖ(]$kÖ4¡#<xª¼oK·¸q&3I*?ù%K{‘QaÑyë:æ6iï¼ƒµ
“ëTÖã®&BZ²H0ÔÂ9‚\ÆHËPéµßJ0ä†íœ9Z³ð~.höˆhÅj*¹–Lï÷ÒFBŒj¬¥J•jC‰Åæm`-é—ö#v«AkãÈŠ«•U’XÃÁAågk‡×‡jÉj š¢ùW.Ÿ¾´ºzZk§¦ 1°lÇ@±HŒH±Y5¦ú¬-LnÌ˜×ŠÐS¤þ¨Q,–'ê‚µH!‰­¾¨ÚÏzÉ©B¡J¤œ7­`.–Ê¬¡HšÖØ˜æÄTãi)Ú_[ÙTo:Ò Ï\	¶*Ð† ­aXJO  °Ã"b¿`±aŒ;¤Òg<É™jHïrÓÐ¬L3Žšå8êYÓâk²Ñ˜ï.ì+¬‰+¯ÉéŒcük–vRŸP)‚Ãßh7Ëä=²^•¬ËEí_kÃiœh¹Òƒ­¦g56ª½òòË/üÅSO=õØc_þJLj. ÿÀ×Ÿ<`»Ô\í4tŽ~sÓÎžùQçLÇÖ<¾µì™kYš¨ìý›W®\Y¾½rñæûïÒh4tƒšÈá¾]¹-6óe±…k,‹´´nö©Í¼ŽÅF‰\X`ýøSBëÞ°– 5”×aÞZr$ê±vmZãèÞ´¦#ÝŸVÅ¾Oõ‰ÜÜ=É€tRÇ”ÛhÆPX¨è®9WÆ›kå$7ÍžãÄ9žå_Éßƒõ>[Ó~ñ]kIk-€šš ÝîcÄ–Aº„‘oÎÌP®‚‡–áªËA]¼%µÒv®ÍÏÙÊè}¦½À-Žã*ú§@PGB0ä–»¹]-àYk­—²c#£xkfÚÖµÛ=`g`pM°æÖ@ŠÅh€5ijhƒl¬Æ 3ÖÒ‚Ø©R¥Úh¬6Ñ&¦_¦šÕÃ¦eó]QÚ¸…‰ÈYmà±-.<£ñÿñ
ÈPWí÷{£Z¼üÑëfçöêê…£GYÞxôôw,È([‚ÙúÈêÅØY£Û¿„¡¢ðÙúãT¨šÂrÅ¬Xl¢FÔª•Éäi¤BZR?ß";d‰ÐCEkeöYXƒÁ ¨æ$kÍZÕö©‰½Ô‘{Vs{Ö­´KŒg9L\)og»|@‚td—Q¾zàÕ+1&ö3¸23Ž+ ÍÀ‹	ƒÜà1ç¬1·6ëÊ¼¹¯Qýa–PÖ˜Ësjú‚4· Mkõ2ûÕÑ7ÊåÅZFÃQ“<«	Öš{fdŒj_‚Ôþâ…Gžúñ³Ï>oË±ÔÞ~ûiPíÀ-}´B×§Õø~»o‘Ž@M«½®Yqò÷j†dÀÚ™÷Þ=ÏˆÄxŒhv“Î›gc´kxjnÇÚë4Gö1¯}Ò~5ÐM°¦ßº£ÒúH-ðZØ‚µp-ðšgµžÎZX¹«ËY[Ö¶§µÖîÞídá­WX#ZðÐ8œ]æQ­KŠ	ÐŒ‡ktá‡m¢Ë{Ü[€výÂHË£'ª­¿ÊZÒYÙ­Cq9`þ±lfŒík¼¡sìðŠß¨2Ì*@˜³Ô¨‹DœFwF›ÛûÕò%ý'gá$¥|eïÞ?t÷¶« µ¬5Z;…Aœ5ýBZƒØX¹AÓE@5mq2ä1¬‰¾8«õ°†|t?¢‹l}Rc-UªTÕÇ5P"(/Í°Q`M#bÆÙ¿V/³dò©uoVëj"µŽÊV‡åË\^½tôôåKÕèà-ìiá¦™Q&ƒÇ’1Ù-¬4`Í@NX&\›¶5k-Œ7®ŠÜÔÆµ\GiküµÆY£Þ°jÔÀFEÀ­¸á±Q¦,j´,7’½g®š*NWŒ—Ö8ãÕrH°fÕ¬k°]U¥%’Æj+¢À¡$VWOY #K­Õ\I5^[³))fõY’¿Ý…ÔŒÏ /¤È}{¡hXª­­ûÄÀ¡}Áˆ?ÄpÁW Ë»ªEøme?–ëmsÕjº’µÆQ_0X{ØÇ?Zúãßÿþ÷{ìs|mõ£yjÇÐ!ôƒ“èÆSç®jÚ¡F‡¤Çó|	Ñ:Fg‘qH7/r6 »xñü_­€dhüÀ(]?.¢ÖÝdÑäë?”ÑÊYSä?¼¾Ï~P›;ÂÀ‘¬‚ k´k*¬ô |w¾òU±ÇÖÞ³†â€¤Æÿhºv¤ÑZ
k¿îK ÍM³Ycøäw­u¹e4k	n³tò¨‘©^*~ }¢¹y0í¿$ÿ±­jk9kÕxHþW®èÅHV°Fíµ,Ü–iåFGÆôæË‰»rs LŸlmr¾4cËñÓŽìSÏ­ä²’+éb²"«­âv¸ýö¦»ÄjùšõÞÇ&P³«*9´dk!7oÈE&ÏkÆlÚ²æÖ?"ÎÉ¿eyýÈ8Î“.Rc-UªT‹ÕÈËH‚4[mb‘rk†jR›>)#ÓeÀE9„r‡¢gfíœgµïõ\I¤Gµ`ªuÔïQmõò.|„:x0Š¾õ-0«o‡±ÚRQ¤†]†8l=#M¤@:£ûà¯¢QkyV³¹§¨éÜ›Zbqd£^/7[$ó+o¤Å„†ÁO¬Exm½F`´
¹	ËkªÁ§‰ l¡¢mCstT¨
Ø‹«¬b™1§iXYRôxŒ£ìµ‚GTz%;Î–Eqhb¶ü¸ùeB*Ù,7ÁO_cqql+ËV›ta•Ú«qaw-³2lj+‹´(²bÙõzTh"+OfÚb4Xs1#ÓmŸ×¿XŽ£úú_~£é<öØÿìùçŸ·ìG(Â&5tÒ×¹¾~öºV?
Óô-½ˆ®Üì\¼i¶™—èëŠ‘Ûòòµ+ù`P×\Þ•qó
ï¨ÁpnŒ#«°Æ†5©žFæöm†o{'*/xlýë “ÎZ22é¬õNÖÜ ^=i-¹Oµ+s—?
ËÔÐJ¶ËL¡äY¢ô5W¦0PÍ¦ç,È?‰wwõHØãØèö5t6­íLÒšªbØ{fhˆ–³¥ö“-Âû-WBùüÐ˜Þ€þ·):73€X.;”“}œU0ÙÁpãàzn/# ›XM6[®b!D[ï«jóç0æíWËªŸ•_8™ãœŸ,mûõ3×6±rÝ‚Ó¬UÖˆ MÈ~ñ@¡6gÇj´`šÝ¶Fç¥¬–*UªÿÇÞÙÆÆužéyïˆ³(‚M«¡ÊDÀ„àJ2—Œ	fÈ= SaÊ™á°'ŒÂ‚ˆ~ø¹(AVQl-ƒÚëlAá+ªAjDèÔ»ÚÊ4 b¡˜®%,A÷‡š `O% "eÂ¶¼›Ý^÷óêäˆ§c–Še[	çæùxÏ{ÎŒ(ÑcèÒý¼÷s°XÍuU#^ÄÁZy"f¬1b^Ø&FSáþWþâ+¥¯8Rmµ=PVÕÐëÔÖŸ'r_Ž×©'‹¢JÀ`ñÇRZZ&£wÉG¬À¥”FxŸáAzT—€5è« +Ä­Ã@›Vµa %€¶|Q6\)åbU
YdF|%|œ(ÞÛ.¿À7Ì`3aZ™–6”ƒƒH,a™æoÇDêm¸vKÎì ®JËæÒœî’ý¬1!ÐÁ˜ãF …Nz".£É\³fØ‰Ìš™jæ…iËßäBYýipÖº›	ï8÷|~áx¼\)–0Å—l3d¶«<”Ég°Û¬äUÌa«( 2ÄŠ,,€jÔoÕ¾÷§ˆuj©©ã5ú!mÔÐuë¡¦•‡‚µM%:¾uòzëŠûÙ‚_&ç‘½¶yëÆÖÖ&äA:’ÛÜÙ¼¾]æþ•+œê&wnnŠï¬QéhíÕ¨v¥=ý.c˜Íõ\#bÄd¶dq±ÿ*HNQTã+Œ$Œì²Öšî¨ƒŒ8kA¤ö½aÍP­2rèK}÷ŒÌ¤sÀYPüHÙHP.*õl4x?$5¸­4í@Ÿ½r°æêÑäúÐG¡Ú¨¶WŸ5Žam°‰‘ø(jáCÖÑ:àB][;zúÚùà‰Ôì³-gM¹#ÃÃ=2ÚZeŸ+îdÖKDg‚5K ºŸûFsJùüg?j_-ª¦è…õ^k·QÏ ”ÖÑÆïõ´üöÑEw)ÕBk’[±˜ÎA´ˆ;mÌ¹YÍ±}úáß©«®ºê:H¬Fþ£9kŒÚ 3[¸vºŒ]SÌßµÅÕ3lä8á"k¡©®E+ ƒ¾j»\5yjÛü=Ý$e½!|©Á5p–Ži9ð%8ó=+	¬ŽVºbèâá¯ÀRó‹8fÜ)z…"RlL‡õÅl*•=rØê$A6‰”Å>êA2?¦ƒ?L1•MÂ_Ðoæ¶y\«¤Ðã:­2CO®•p9ç
ô²À~	˜Óˆ9UIf`§ÛÝÔÒ<bÓ›Ï\n?Èeâ…’9c>P†c¾íOÛZ¶`qšÙié†^'wÝ[èÛá=û#ñr¾Rá;û±-Î7ÙìñSÍ§‡f­ß"©XSFdž°þùÛ©"¹Ñ‰ Õ,ýñOÿì•W^q¨öS¤@·HVƒÓhd½ªöi›WVWA-²Dná‘	´hØÅ•ÕŸUvíÆÍë¸nœ^½¹ÉéÖõsëÜê…+<q™k·¶×oÂyëÏßt¨†M÷†r å¨j:?Gä˜ Ž$Œ‡øµPs§¨³Öl¡³ÆþÖZØP kÑ8H‡kõ¦Ø¿	úBÛø½M‰èvëkí;<c¬b
‰Äª93Õ¨®x³à¡Ölü8ñ¨M‡>*Y.Ní3’Mr	•–ØÚ®äÒÓÞî
™ÛÛÚÚÉi§6ýÖè¢f¤ÖÓ×	ät´¨ºq\õŽÊîWó52GŒÖ8±jÂ4ì9µ\ÖàóŸúˆ²EjxkQg­F«ì6,5€T½	ZQšü–•B>xWœö€U@Bk¤Œˆ×§qxÀ*!ÍOCv
¬=ä`Ímuc­®ºê:X¬f!ýZynY°†ƒÌ`+zCÊ%,—4ºqkÇ{qÖ«AkŽÕjwVs‹Õî\«f¦šÖ¨Ý¯·.<ÖL@Rt¨î?œ€µ„dÉ®3b^I°Ö Æy—r…”J"­nñb
ï‹a­ñ°Wb¨óA®ácGR"6RIk‘­"Hå÷éhMTŠ•Ôì[*K*jDyÏÕBªóO…õ—Kõ7-”¶V×hIí©»šL:Ë±fÛ„€ôÁWM›ÞJrs™´Œ&Gô†*„”Ò¶PÍFÊú:­÷Dö¾ÍpÞ?¤3¤Äteò¦	áEqµVkTÃ5T)ž9yÆ¥Š™Ï‡B5zª}Tûž¥?¾òÄO˜§f"öStí®ÿöúK®…Ú`M‰®ÌÑù©^Y½rC.Úk‚³—öæ“Wwná£m bÛ£ç/¬ïlÞÚŠ]å­Þ­jgî7ÎW·Ö¯¬_½Éô««Õ«/˜‘&YÝ#0 ’Hbô/èÃ^ûÂµÔÜV+_$0qÖ"	#|…iw°[MV«×AÞ¬Öô!S Å`w\ì²ØìÊhÌ]zé
…%ŽÖœÞ×0îº=Ä7':f“îÕ®Åµì´XµHmi’BµðÏ=ÀjS¥q«¢7ÚùDQ)ØÚiñi´#°&îêSª?@w÷­gü„Âû©õi2ÚŽºßNðç,(êì$¿ÿžgö½öi­EQˆŠZÉ	Ôâ’3r`‹ 5óÔä­10ZÓ‚5×ôš3kÚ¹‰tWó¯Õ{¬ÕUW]IŸ9=‡¯&­‹ŽZ¥Ì^1ƒMØB"ëÔ*’Wj?ÞMåä_Ì×b5lµÝªQ–?¢õë*Z$í1se9¢«TÊRH¿†ÊkIßƒÅ‡KàDÃ`Kð(Ñ)²H 1uÌÒbød²”D\EZue2—+)ö_éþšà	UMÃ§!^)Ç
f+º0¯ÀÚBCeËÖÏ¸HnŽ£$=iÆYÆµ3³rD3äôeD‚j\Ymc³ïòÿ}[{6"§.X™†|†Ç]¿`N4¨îÖºNëUÖÆÍDˆ?q$rí÷8¤˜!.œ¿go¥jUì4^•'<äL†^j,rófg»|_¨æ`MÔà´¼—ßåª9TÃTÓB5~€ßª¹èÇŸCj¸£HMÔ¬ƒ¦«ÔhsmØ¨jÄdÛ®®rãÖØ mûæëÍé«7n¾³±¾µUÝÙ9×Û›mlÞúùâ¯^Ý¨¾óÿêüÖkDõoe/ž;W½ñZuc}õrµzeõÇkpÙÏ	×'º,qR¿5ÒÞhŽ;þ+ôÚŸBcSg´Óš!­i‹.ZË Vsßq­¦³öèÀãïÿÃÛ¿üGôö«ïÿõã=õðþûB­÷(Dd×„“„ÕÂÖÔÜø£ÙÑÉÝÆd‹*j°ÁfRHt÷5}ùã[´_k-ì‰í»Ã ùô°=*µA3íÊij#à¾³GÓ§ãð@O×úWf™„Â†[[š†)‚>v‚Mý°k°â¸m«Øô”ú³u«ò#`µ½­µšÎZ/båžÈNFmôÙƒ–.²”&F{€±Úa?ôéß}è¡`EÔ&`pë@Îk³ó§ëÆZ]uÕu€ôðž–¾nÉ°šZ<nðWaWôã`[‘O„Õv2$µ¨­Fd4WR3W-h†\Ýx}ûÜ¹¯]$˜_Q¬1{*•rJáìgòñ|AQ"\x0È¥¤~PK"%KðOQçØOH$J&Á/‹}Õ¼Œü:p,1*[MxfY%èXÄXó]ƒ51Z…NE(É$ñt%Äò^(’·^i]{4Fß ŒÐÉâžhXKxqO„)Y’;Ö9M0¡Gƒ5ú 0DAÚê7XŽ-‘ èìÅ‚îÑ˜n¸p‘4`† Àæ´õ‡õ2§ËCÇõ|L«”­—šx±k6ž†Ø$fdKÕŠ– )Wmqi	TsÝ¯!5–ªýÛïü›§ªÙ2µ_¡¤fº!a ¹8G6rW7¶6YF#ÜÌU1ÎÖÓßzæÔ©\j£Z½¾yA?)ÁÚœ}yû™Þîs;×ÞÚ:Ÿ¤]ßúµk—²½Ï_­¾¶ºQ]W|†©ÆQ¹ý„Œ(k„I¦Žõ@jcãGï °ýBj!5öZÎú 8È¶;5¶PÑ5kŽÿµH-ÐÛ¿üÅï=;P'µO^÷‚Ô"°¦2ÇP\¡ Øî€µÝZ4õ1š+Â¦«°:ÒÞÌúim”ÿÖ¡OŒÖîÞZÓ&T[[S{{´Öd£vHKŸMŠ!éßÝê,6˜bú5ÕÒCäÑ1ëµ¦2HD)dkKHG$‚ÞäÂ)cäóÞSëè,3$²EÑ­ÆÙNSlIÿrƒáŽ–ÏãþÀ"H¤9X3	Ö´dqm4Ã@A5öº±VW]u,V«Øb5ñZWÅòEò˜Y‚µ®8¤æa[‰“0”Šž7_³ö»Pí%¡kÕœ¶¯ž=yõ±‹GŽ4àqa—ô(”‚Ën§ö_$‘ß“vØÕ*¤DÃ‘G’ŠÉ'óIâ"jkä-”á/ú¢¼1U"¿˜IP=ÉÒš-a9þ¥,W5EŸ	=-Œò+s•r×,È¤r9“pËsqˆ©¤‚ÄÀJx5sÑõa¬¹ÁQ`›oTÇ+ +‰ç®ôë gâàŸL°ãÎãIžŒµ„Ú‚FoÀÞÈHÆ…=°…îUT¦Æiº-êã·äù%õk³öÜÖ~À Õc-¶¹*Þë¯«¨FV?aý_u¨Ä?>… 5PŒ~ë{ý¢îÑI}ÒØa56dYýÕÞm"ú«ÀÚFuõõ­ç·¶«[©ÂäÂ©™Tï¹«Õ[—Î_º¾ss#€—^Þ<•ì¾p½ú$°#ùï¾üòù$ºZÝ¼týcOÎÆ@µwß€ÐýýŒéñ>*œX£20Á°½rš}¹SM`kq­]_R´)6
5§]aL„¾ÿö?îÖ?ý¼öø¡º>Q}aàÃ¯RÛ}¶‘C4û²-w„W’&£îYÈg!£¹#[˜óŽY ÖÓ„¥{ècUmXÛßªµÕì[[Gkœ°ñ	ko5Tëéè el¨ÞØäABlfLµ7õŒëŸm,òAþ¨¯s|ì(.ÛÀQvåþ›îi~ÿ§þ £¥–¢ä¹`À=|Ã6hMêlu›ý6{†?÷àAh±V[8jc…BŒÈªE%X«¯X««®º˜üÃ.ÙhsÐše@–Q%O>?©"`¸‚3„âC<žša Íë+ T³Æjxjìhgsû*õŠ¥ÔEÈL+•”¶Qªûµ#rÙð¼X>ÖOm¤3Àä—•b‡ûa1Ø«PÊ¥4„m¸$AfKª
²ïAg˜gÉB‚‹‹1€ÄI4@y¬}©ò§ç*¬!¼Äƒ=m¥t:Wöp¾2ñLey9îÇÞé²Ÿˆ—åO•=ÏšWk)›VAtLÑ‚m¨ì[{4!›=k9ØòÂªæ˜“ÎsmÙ\–#â%²Â8$˜&S˜s°‚ÉšcŠ—8VãBV›ðQÈHnˆO£ Üµ"¼é´–	©hÉ
æb_M!ýeùiì Y<	¨9R×ªe§¦¾úÍoR éšªÑüú'?rú1Õø!®®†žÚeåó;?Í~¨;îl°mWìl<ófõÍ'_æ?Ÿ=wéåKÉÜÚÚwFg¦{/\:×ë}ùÒ¹ç¿–-NÎü·Ws‰l÷Ô?—h,å‹¹R¶·?›LfÏö^xƒnjZ˜ª![´†Ž=A¤B Y—bÚwdˆl5Ã w7ÅF¢Ñý(pÖîX´¦-tÖµ<þ ZÖ¤_þÞø¡º>9}yøÃsÇð„‚òG)èH-2®5rm¯9êE¶]ÎZh¡±†8²@LA8í“'5ôA¾ÛÎš¨~”©ÖCôF+°ÖªÏ#c>«G‡!›F(i”ÅÖÚÔ10Þ‡…F‡|¬u³Ï¬·Úø•‘Ð<oÝ×ÆÕ&û³÷0\¤UàUc‹r[äR£Ê³½	ZÓoDÿÃéSK\ÂV.>÷[‘iøðÝ£šëŒý "hÄ‚%Qè§qŠmºS_±VW]u4VÎ€µ2‹Õ€6ba5Ð©-6Áý~©Èú(lñü|ÉVsµZ˜öÀ¾¦¬vTÝx~ãÂE°Ê
qÑ.–¹¯pG& W2Õ`—/úËI€.Ê|”;–,‘ÄÏ·“/$K.Á·O°Æ–U6Å>Ä•è¿VÂª£ŸšHŒWùiFz>]‘Å”6›M¶½Ñ”#éÁjsq¿Ë‹%hM¶¼ŒVÌœöb±Ê,”µeæNÇãúÃ1ƒó¼
‘øú£óŒÕ˜ƒÕ4p²°yrÍâ4MÄðäd¹1'³9pË¨Œï‹©¸V™!çº)ÊD‡f9‚›”qr?‹tÚ¢N,²âA³^†÷S'l:f°Û<P	×NV¬úñÌIÏ* 'T›^êþçßþæ÷¾‡­æ\µŸ|ç)%õÿÍ¿ÿþÏÿ½p}g•¶×Ûæ©iÕ!Yû2ÕÄjðûæÍ­k7vÖ_sëÖ­«‰/Ž|ËËüøêß%{A¯þ©™ÜÚd±¸–]œêîAkƒÓ‹K3ü¶•\ab°»{°?›]<;ÁOŽjÌ‰™l*»Ô›<üîí¯Û/©øQ•ÇÏ­ª¨a‹ìp=±ïÖZsa‘JHÛ>(b$0‚Úœ¢aw.Z—«VÖÐ/^ì;T×'¤iö™BfcsD8†-Õ4¥	´«!Z¤æ1À³èÝp(Cm §	NûøIÃ]Új¨¶±ÆnŸÕ@¬©R¸v>^$B2êAÊ!´ßÐ­S+ÒPGK»•Zø#Œ6Àç£ã
ƒÏ˜wU“GA7-
{ø#]°VÛYÛ=F¢²ú°Õ\~_íØ‡€çÑßZ{ðŸÝ¢EW¯©vfn,&‹ˆ§xRœ¦CÝX««®ºŽ>eëÕà5;ÊbC´S“¼.k®æIû0|êÖN†«ÕV‹Újw.VS^¿š_ß«=³ÔýÆ©ŽxkÀZ,‘tÓàêYifÂ$c5›¦™©R%âöA8yJ>Å‹$Š@¶“hÍ/aÊæmx]Xã‰DZDžŒH×1¸G±Õ-r¦
Ù¯ä‹„Hju[!ïÍ-ŸöüJQøS^^Æ/‹ÇOÇýÙrf¨LYd~N:½¼ÜE9#>y¤2ve|‹ÎO‹»€5Ï)í¬!‹ƒ´X`Mi"‚5Íô5šoÉª@uf£Ø4ÓÈÏH¼Z¯‘TbMÚ”ïâÆQù˜ÇøŒ{¼/´vr4e]ð|oV*6zyT×¨±‹Ô~`·cE¦þË7¾ù_]ÿkHTãÇçBEè§v˜þV/_¾qjoÉO{í‡jõÚ¶Ì4b!6~¸7ßüÏ;UÝ^ÏùßzþTñÕ›Ï'gJþc…¡øüÚÌâÔT¯ŠVa²•µÜÌÄâbnf±{qb"™í]ššZÌrî™,$ ºÁÞ÷ÆÆTõx‚*H¼5ÈM¡ýcãÊíÖ_Ä€µa®9øÚ[»Æ³¥5A5Ô¾w$ÎZtÙZPÙò¬P­6­™Þ©›kŸš`µk¡‡f»‹!ÎÈJaP—NL‹Œ#Å\¹jcÃ=-ŸäjÇ»Y±øj|EµàKmø”µé³!&[-³_kÔ†•6Ò.Øé­íÛ 4ÄÁþ©f€Y)T#RÉ"æ¸[Æ{Uù AÞ…µ¶ëv;Ä©þñG¿ÙCO‚Ö¾ÙÏ?|Š I‰è¡ ÆØŒÉBXÓtpTël»S7Öêª«®%þ;g°Æþu[W—rñ¥à!ú¹@#yo>è¬&Õ²Õve@Úßñ%ŽÕõ'=™YtJƒh`6ÕAJA¤H+EPCžâÞzª¥´Xc‰IŸ"DP¬ÄkI{ô-‹±!• qN³ån*‚ÄLÓ
·#³|¾\.•¼¯[ädÊeÏçÍ€¤®
A"a±Â\X‹ë<ëûsËËse?N4¦ïaœuÍÍ-Ïu•5»Œòn Ù80Æw¡÷ò˜Q)èÄl¶ÄGðÌeH²†€TL°ûÍ1Ù†f{ì´†Ëæ´Ã5_Odpâl–‰R>/STìÈK'“±t‘îkžK~ô
ö¬èJùFj®rÍ\µQK€üê7þÝ«þñÏ^ÁUû	õOQÿø7ÈL5HÑM ~U?Zèã\µ7OílÞ¼y£zi«j,¾uõI¯89qnã”ç=³Z¼¹ýÎÙ™ÉüÈ3gKþHif"Ù¿4Ø;º6YÈá´-,vOuOL/v¯ÐŽ/mêG?êîÍfS¹ùâÄT7è¶¬*‡Öž«½qâèÑdCŽ)	îÈ†é¬Y–@€_hÿ«Öª… |Ep­=l´)ƒŒ6Zã+°Öœ³Öó"©"{ÁæÚã_>T×Ç¯Žcº§šŽ¦ õµÙô.MÓùÅ ýu¢£}€"ÎocŽZÛ!é~ƒµÚúRÔYÓ* 5yjôÅV$Õ‚ö™R¹  ÃG‘ÏªˆÒÇ–ŽDÈéž£QiÁŠ2ÙõÿcjmU‘íí´Î¶ökÏàqO¬µ ýXkµ«!ÛqäÁ5±¦$kŸ§áqb+NäA$r"Ò2û‘¹gApÖ›ªkuÕU×cµ Ö8#ª!Ù	ôè„—h9±¸þ8 QøÁÚšV«±ím«¹
È—Õvª›J€Üú1œUôÁ±ÃIE©ý  ŒÚGÁZXŒÙuã‘Ã²ÔŠL%
%ª%¬ñæZºèñv”Skö
”LQ*YB~&AÙcCƒùg	{“’§/b…Œ– ’)•*•D¬Š©‘t¹žUò³M”ób´9’Uéüìi&Ês&`­±éœ¸<p^£/´lfË-qvD(O­9×R3sÖ(Ãlô2Æf:¥›íl¹ã\#&­ëÔÔÍ¥»û./ROðGCg5™–9šŠ5b=f´.­RÌ—gÏäA4yjjbµ ¯+È\X?ì _QûëŸ<Eþã÷¿ÿsC5gªmÓQms“tÇËÆOè#)«ÛÏgNýâ™SëÜ¸N	äÆáÔh±›9»²Vô¾ûú;ïT_]Y`œI—Vc_Œõ7|±9ÙÝ=[›Ïÿë!o´[öY*Ö{–ÇüÔÄâÔ7¦²ýgŠùÉÅ©Áî³ËÊÍÖÞ}z`à…j‘}l\UO›;9Û:£‹ÖjvZ‹:k¬¡Ö"ÎZ` ÉY
ïƒe{Âúå³_:T×Ç­Ž±ÁiÚœ¡æMW»p-pÔ‡YxŠºh6ŠLìrá µcÃ_º/BYíßY3^½5¥¹5kmv¢áNZŸ¢@`Yi#òÖšZZÙúZ[k‹9ìÌ6ÑN»Á·]N;»%AbW¬oü‚»÷„>Û±/cí‹!aµÖÖ¦&"FÔ
Î¥÷­ñ;‡ÖL¤I«ÔÂ*Hç§©éšãµÚÙ"¢¸ P²YW]u V£Ášƒ38‘²ûÝº†QªåU>˜öcè‘±¸f”¶·­V@"+~¼´Íá°@êb"aa Ä@Âb’C¬ VjL(éÀÒäádÒýUä˜çZÚ–¢1W  ò°Zbã³•b<Í›¦1÷F¥wRÐ^Úè©ÝË³h_µ¡ Ü*‰™„Ý\´e¡ š	Öf¹–ÛÖµ\NgxŠ¾j±ŒxòÓC§ÎiWVæ±š™k¤dj˜¬É$h%bøi®6J@Wøe®èÑÖš0XQ“P~Ø%SÑ<w$æÔ,s¸9ÙÛ2ÉB>u ãÅ÷ÚèN–b©T˜(’©2„¡§9UNº•jóóV ¢ZÖ¯ÈŸ+BùãÏÔÌT»¼‰€46‚ú/_~íšŽë/ì¼ùÌ33©dã×ÖÏ÷¾|}ë¼Š4ç%¢D@èµÉS§^ýîÂÂäš7’(®- çÙþXsriqztr>ÏG!;8Ø›mlÎ.®½ÂÌD,ÖŸŒ-® k^jijqtaÖ‚û‘å‹œ8:»)¾~£Río"À¢£°`ßwgìÝ´&S­¦³­ƒ­…Î[ˆj‰Ð°ÚÞ¸ö÷uZûØÕqâÃµÁf—„e;í.‚"üÎ´k‹,D‹–?JÑ…j€Ú‰ñžû¨ÏÃ].Z«e«=:kf­µè¬9µèÇ¹©Xkj•½aJÙ²54àvÅ)*Ëß 6.wM}Ö¸–ÅÆ”EŒàñ.X«m¬ÕrÙÚiû¬õõ lŽÓŒ5™€BAÊßè¿HÜu²ˆºaØöiÉºbÛˆ3‘Ed<†êQuÕU×ÁÑgX°æbEXë·*Cjù8‚ÕR	ÕøÉcÖBT‹ö¶Z¤r{‡õNÛÕÙ@Ìã#G.ÒÃ1ƒÇÈþK•” y›M†\U,&/*b$Á¯fîZ*Áúóˆµ\Ëåõä%J€X†`9r5ôpZA#Ižƒ~XÛ&ŽlÄŠëPŠƒ[ùDqn.?;×• Î¼¹
ü‹uU<\2ÀÏgqš—á_‹ÉDg³*O/£96áZ—×Åp™á{ÀZFÓe\ÇJ\kÓd®©)vFîZeÖ_Í`ÎnZ¯4ð. šËí×tˆi0›ùi¡b¥éI<@Ão¤’OìÊÂ™“¥DE„æð‡ÎÜIjy68Í%@FPí_¹X× ›®šKêÇL»¬T‘k7h~­ÒGš`£ÕõêÎ[·V«ëçÏ'³ç«çz»{¬'wÆÇ³ƒÐ&ù5Â3ËRÅù…ÅþÞ^Ø,™å
Ðò|d‡Õ’„?N–Î’(Â[$µ\q$½8uvf¥rX;!bÃ[;1~ŒªH|5âûŸ;Á˜þ9f£ôº»žØÑ:È×‰ÔÂìþZÖÚô8k!¬ÄÖþþ¤ÆÒÚãuZûxÕ~÷„†"é"!­í*¬µ°Íš#46ØuìXÛYiÍú]ß_u²ûë³ƒä+‚kmìv|ÔÚ«ÝkXmkí­=CâE©9¶p‡¥è†Ýü5ZW5
D‡OX¶ˆšb¨ºpxœyøM'@ˆBÈ{QÙ´k­V„?‡kDxbö4µ†±%;ðÖJ;l‰ HµÃF·Í4N‚4mŒ<‹4Xs¶wëÆZ]uÕuÐšaw¬Is_ïrkÖ<êõ@§8¢R0aÊ}¥8?¤­ÕJ	{«jb5ÍlµÛë;Û[WO¥R¢5ç¦©ZÊL5¤a·i…ZVÒŠ¸3™Ì)4ÄI¢d¶ÿöSº‘&ž¤XóÒÔC"ÞŽÚHŠ&/¦y?¹n¨€Š´F²Ì§2ËÙ9¯Tœ[®€hß`kg‰ry–Dœ©
öYÙŒ¶LÙ÷Ådxjƒ5“æxBØynHðÈ{ïÍe§O{i4Oé˜¶0 u6#ß•Iâ²5&~™Yë5®óµ«;Í`­…Jð›Ô›cÉ¤ž,â¦ŠE~RÅXâä™b¡"6óæ9mÂ4;Hp?ºÿÕþkÕT³T‘þWŸñ—Åj·Þâg¨Î×œ µk¯íœïÝ"Udû…K¶¾–=¿qazz:kÌfÓÍÍ¥É„–Ë%›½ùµ4YÌœ=[š\YêÍö÷.öf{'(“,.
gsTm&§¦²ØmKK½KÝÙT²qf!ç¥'VV<@íÄ±§9<ýî»Ï¹kðÈ66FäQ•:Yv÷p@bûSgÍðþ Õ‚Nk(¬‚”BVCQgÍ…ßa­µ¼”íÃYC¿«¯[û8q£ý×]¢^!ŒËlxÇ!´ÔXãANHÇhN¿›Ò0R‰§v´í¾ûÃ«©ýÅAFµÐZkÒ)`5ÅŒt0ÀGCÃ²¡X¾†ÁÆ¨Æ69gÎ,b=1Þ×Ší­šý¬1&mDøF~ÿ=(‚Ü[QnÓ8<Û÷³ÖÖDsyúÖÎ2PÜÒ»á±1hí A:oM´À†YPäÒpÆuDŽØ~¿n¬ÕUW]'´- 9X£ ’±òE
 XãR~àšh"…«ÆªØÿT˜,òÒÎ¥-³Õn¬?V½~àêÿñšDö#Jb’ÅO\{:Aâ~Æ+%Šà71”¬ñbQÏ§$yD®xXn©ZL¼–ò½†­5pÖŠÈ•*ùÊl1™Ÿ+@k0§‰U|—½˜Ï—1ÈÎÄmæû8h¡(šàlV8\íò
é=ûš²‚É÷fÝZ4üõ^™)À‡©£šYpi-s3§Mßšò0kÇ­€?224:kz±ž:b‹XÓ¦ ÌujgÐ˜83;Y`µZ¾"™­¡DÕÖô3[QíÛ® ò•'žxâ; š±Z°Tmû¥—.#-Q³l­TÛ¾|‡íÖæÆbïàÖÎÍ›7·ª«o6&{'r9ËÅz»“¡L®Q9êóíÒEmEÎZë]\ìíŸî'²wé,°–œ9Û=õ—+£Íé••õ&-®?Û›ô³°ÚÞÚ§…ù¡çÌYsUb¶1[´ÆvbÌ²E´€Å`m¨ÖéŽ»¼5B[-’ÜÍîïØÉîV­…züí}¢ú?‡êú¸ôåö_¿íuˆiaH ›dWêc kì°æÈ,Õž9„w-øñXÇ!tß¡ZÍðþÐYÛkÍZ×Ì[“0¨ÝYjÁO#¾_°À ÎVeÜ@Ò¡öÑ°—&¬rÉp?JU¡r‡Æ…gØh"îp¡2I™l}­ä÷ø"È¦=¶ZÔ¶û,VkbÔ¦ek=}ÆšÀDÕæon&$I¿¬=¤³sÖ8a© r7¬ÙW’j%ëÆZ]uÕu€DƒµÓeÏj“¾ŽÉ6TôÔeÈèÎPÆš“%R£ªI»K #ýjƒ}©j¬vÉ-J³5gGÐ( eQÌøE ëLÝ•gYY£ØÒå9æ€2c5‰c
ËM„W¬<›K)ó_]Ûx´GzˆzCƒ@¼Kq–×³>V–çPEKÔ¼YPk–HÍ«Â5|%ñ4Çˆæj Îœ;ÏÆ—CýOM¤õÛr†ÂÆŠè-_Éø(“.&¬)M¤¹9!{·MY>S,ÇK‰Õ,ù„gDgB3Ä“¥“\Xv¤.&éØ¬0	}ÆFÏÌªöhÌØ`µ
'ñšPmmXƒƒVVÎž]5k´UƒÔEõ¯Ò{RCÖnÁj›7«›Û?ûÙÎúÂâàà ÿæÕ¡?y}‡jÍT®˜=»Ø¿8˜l&$e~~ë3‘L§'ffÖ<úì7–ff¦§s3ÝƒIêIæOM/M1Ù?]*.LM‘ã¿0ÍÆRÙìÄ
šžY›\ùóµùÉ7ÆÆž£¶Xd{ZSâˆ!œ:­™·ÆnéÝ’Ý•µ¬k!ª±E»bÛß¹vŒD­õ½ºoc½X·ÖîS_íÎ"GvÉ†¦d:„þÑ4‚$Glì¡öX®öì‰Î/ß¯|µÌµýùja¾ˆ:9k-P›©	6kïh±öÑí\¨}tk“rïÉò‡½zz†)vîÚ¸µWî²ÁjÎLX±4LÉ$ä÷ßó$È½­µh ?…Ô¸s­˜³G‘–ôÃîlXm˜Åu¡2ˆyè‡t«ýî‚5¾T	‘±[?5£µ¨êÆZ]uÕu€ôûTžV5l5“ùlCÐy®æŽBHO‘Vg°ZHj{•@Âj;×·]`ÿ­ëf¬;sÐFá+™tÐà…–¶€Ê(lý{Î9kG 2-`#@ò°†xf¢5,9²*H5ÍöeËUfËE¿’ç{×%¨(X£’qv¹œ)ä±ÊB/ö|…“¡WmQ ÉV[†o³³»8k­‹¡Fs[Ëš›-¦-è?+Ò| ¶	µkQ‰(‰b¢1nrˆ#À÷p uQ¢³š¯'ôFô«ÄÅ3gHÅ,ÊL›Œ58I„j°ÚT ¹rv"‚j„õ«¯ÚS šHíúúÏÆj,V[½òI"7„i›¯ÝÜÙ¹ú|µzj¢¿÷å¿jð‡`øÌß5¦IN‹hr£|sDá¡ÇqeIR‰çz'&JÞDÿ0–Ëå€´Xriª›>Ù£ó+SSK´X+'—fðÒf—“ÓÓƒKÀ¤Ö¸­`N¼Ëò´7«q|÷ÊÁ7éécÃøbã'Žé¯eâ6ÓþIÝµ@­¶³µÖÌXk	5x¡¶÷5¶Ýúû±CuÝëÕ¢‹Ö\Õã!ýa/l$N¦ÆBXcô¾ØÌvCÉ^ôì±vç~eµÚE{uZ«m¬…Î‡6÷åDb¢â!;ZØÛZÝGµ©©o §½§7]Q}íÐŽùR¢5Š¢m—Ô$Ù„§Æ¦×ÿƒUÙSÛXÛ3Y¤öM•wZf¿ZÀ±>›qßø˜ÖàýÜƒ¥Òúj@™;ò Wº¸Ý[Ç;šb»ÁÃ¿SW]uÕu ô™ÿA§kbC†ºnç@"E>¶¨ÀŠ’•ê¥3¥‰Qe@²…¶ZÀja	d˜,âB w6.]»¶õX³ÚÅGÌÖPÊå@ê‘ÍÏ­rQÈÆAcbþùtÌŽ%@¶)ý¼‘sýÒ¥Ç’7Ÿû–%bù$erË³|6›÷Ö*ÊŒ,SÒˆ¡V‰ÏTËB¬²À1/`3wª­Y¾ØlL#£:ÄÈPMCw+1×tÛW¨LjHÚÉ±[2Ë•D¥‹‡Ô“òÙf"9+’ÄÉ‚‡|U@:X‹ó#¤±Z%Ó˜8	«¦ï0LPmRZHv» ò_„¨&[Íúª©’ØüôêwU`ÍÅŠl®oq¸ùÎ3½«7ŸÉö“'Â:<9hÇa¶‘I"ÓÉØôLf$>dí½½ù¬/õ+4dºw‘bÈÉ5:«¥xíÔÔ`ÿma‚HÅF’Zå¶ò—S‹g—¦¹ß½˜Ë¯ý¹&ßÑ0ÖŒ×Þå4F­…
9¦Þ?€±Ö¹·¯¦;ÑjHÃ5T›­´V«+6
µ°R«Öd®ûÿk»yí·~áP]÷5«¹SÄOã`Ó!­íWª	ØÞ×Œã2;CÎnH/µŽG¿ô…ûØ—¬‰k‡þ/{çWv¦ùtzã?„fv†¸dìŽYÚHÎÖDÚ*êZ¹#Í˜Š«n•,Tñ¥¦<&†Í‡ªŠ‡tš^J u§W‚7îR&!»a'k·aŠà €ÛôzYö¯ûÃî´h{Åt2Ë†ý=çèæ¨n—ÕR²±]OÝ?çž[’ª¬®Æ??ïyÞí;­‰ÖtŒ7Y®uZk´"ãpÙÏ`£U¤‡U©´}Øa›!
	õ)6‰°Ó&ÒH#»’Mtf`mxv:ŽÏ‚°ßÂXƒ¶¶Q÷ þø½!*æä¥óò‘ª!G1†0Y~«Ø¢PÕvØÝe³ú7S1Ùk´ÈÖŒdèmÏæÅ‡>²‡àHÍöŒµžzêéñ	IšDùŒfé“­WÉPð¥*›ÅVeÓè¬m9-¾\­K
ä[Q
äúÚ¥ýwo½FŒ£hª]IZ£F"¤e5‰5le M®Z„iE=¿hRi_Ý'FKõ	ÌúRÜdÌ×˜ÚHÊ±«Te(cÍ‡[
óó”ÿ)!‹NY„}™ùïªl
HTNÆ;³Ó[ÉŒÛý¥ÛNÊØ"ýB?ÏÑZ+)C/›1ØR¼hÂ #g–ÆLÂÈÄïÊF÷ë¦XNÓ¹´:kó{á*“ÁRS×82 “t“Ë/5ê‹Êî¯[cm¡«UçüÆAÞ Úä¾ò§_ì@5›Ö~|Å°Ú[ºJT¿5qÚuÿpèÇ—_­åòí<Í·‹8ua¨Þ{m.O&zyÿäÉB1_á?Àlêd–°ÇÄþ	íú”¬^:7væL5›,TjÕtmõù0óòÔgâÌ5žX—kõ¶^±`Íê]¹kN{Wq#?<ekÙ¦£Á®Ûbß/r`kvÿàvÎêŒîG‡·Oí×·Öz°ö»ÐàN3ûãy"ˆ¥4vÇl. Ò!œ„“Öi°}kÝ£a3s+2Ú´Lm¼ÿÈïs0(TÆ¾›8H—)qêtÖXJ³…öÀ±).·ÑQÌµ¡~Õ?+ü‡~×RƒCãÖNÁj6óQ°fÊ#§…i”³ ¦å­Ç0­L‹5·mk¬™"ÈAÁ§	ÁE³Û´^àø´^-Cuð~”‹ Ÿ ½8º	•?¢-Ö™°mÏG>òë†Øà\tq[7zÆZO=õôxèƒD7e©…Œ¯¦ŽÑ [RŠ2¯¼T xŒJ»ž	äª‰Ôb‰ý®åj®R!‚›½ÕnßX£ÒñÂw=eî§ücZB†“„†äöŠÔ¬©V¾¤ ïÒ%:ÌPq°Z¨tØlB6Eúëkúö!.K}"}µO¤€)laŸ…ø‚|-?TÄæì´h¤GLÑºhQÅû@[³±Ióæ„—¦MûŸ9àŸ›ÏBk)Q˜S)k 5»8-eŒ5k}ÀšAº}cûl8‰ÞnPdš^›Œµ,ãZQAM±mìJaáPÐÐVÕTùÜ·ª™µjßþ‘l5­U»%StãÊÕ7®]½Bðã/ïj±ÚÍÿ¨BÈ›çó	/h¹ ^ð&Êa¥¶AìÂT‰‘1:%Têþ	??W)LWóaÖ¯Näò•,=±« vØnWÈê÷Êµ%Ï?Y¨T«¼ªF»’êAP¬4Ú«K¬YË{éêØxÅ•Êw^ØdµwÙñ×l9$û§ÈìŸlPÓßqvš1â|5k¬ÅyM[¤ÈXc‹k]­É&ˆxíÆÚ¶ÂXëÔ‡ïíé÷§¶‹êßŠeö$éÝÓIw˜Ó€ÍJfš6¡Ø}eIç~uzàÈÞ‡Bï“©‹í­¹0H6ö#‡i‰í”µæà©ŽØös;Dð½ýäJ–ÓTù(ãJÎšá2†¶§ŒDE£Ó3¿q!ä“¤‹ìPŽÓbÂScnÐÆÌòzèÛÍMOÖtàZpù°EB~t7EòÑ´V-Zµ¼1fl”*¢-R4äžF¬dûPÏXë©§žQº@ßkZI¿@¾%j€55’T¥^y)
íR%`í›a ¼~öørµx#l¡šŒµÛ¯þ‡¿}9íÁXeµASé#b†©÷™V°}jB&|>CÙ<¢C<¥ôó¼PnZ¯eh¼®0µ/!L‘RBµ„‚ëy†z®ðÒÂxi¥X$h$?SáâÊ
«ÕÎQ‰®½?¢-"«=Zì›gwËáÛ
»z²EÄÆ7tlh}7lÙ/åq!“èPÆ/÷q"n$s:«JH0M‡RqcÛ9°¨4u:Sª^®Ö^ØdµÅJ…¡ mÑ§o€y…jí³^- LqKZ?}ÕþÄ¢šMë·®ší€}ëÆÝwqÖÞ€ÖÞx[mýéùŸÝ»·ö³ó •¢v®\H¦ÆÊ"û6=Ñ¨ƒ,kcJ©dý®«¸š\@ý#kÕòÞ\:¨‡8‚¿PLeOêù4A¥’ÉçkÅbv*–ÊÂÔz Ñ¥…—ÐÝ9¸L¬&k@šYÄ†œ=&ÒÔØø›ÎŽ}5·b­K¶»ë³f"µ(2žÝgíðÚžÔØâú?³{{zÐêß!«Y³Ì,‡uP™ÛÝõfªHtÒHÛ¼èè€ÍQŠÎ†DÎL?$¤F!äî­u[´&TÓk„?Ú€!ÍVgM~Ô0ñ"r¤ô<|xxÚ¢»É‚ÕçßöÅÖ3@œ‚¡ak¿+Ç£`ú7.„üƒklÈÝ¦`õZãD®%F!x6½¹îN	þ\˜ÐHS/óaÒ?±ë¸~m³¶´G3v½šuÎ!#O0²úõâ5ºß3Özê©§ÇF# _ÉI³N-I³µ–`-ô!8QJ©Áš:‚µÛåüfä}–«¹FØ?5%ë¯]N«S5\ôYX£¥˜¾¥b!ùû~¨ÙŸJ—Kp™äq«\,„„ö“¿_”kFH?°–ÊeCñ#µ™é´­˜<ó]¹äU\k)‘åÜ|ÁçÉ…ñ‘l¸úÇ¥uh+ µ:uH[‡±i·Ì!‘`8ë®qZ1/åõ×¡¯8NÈ¬œ—y†ofÖª¡Œ¥5]&úk}4"K§2üAêO57¶Ôœ«PîÈ^h6æá"
ðC–õŠz`+X[Í-V³±"QXÿÛÚ&ª]5¤}—njV@Þ|íÞ­WÏßÞø‡ÿY!”›S]Æ§’ÄYà†S(ÌÓCm®Ñæ	'X´vZ›Püc:´yN¥<§ûaòäÉÕ"G&³ÿD¡Í‘:ÂP/Y.ù,³+ü‹Oúôü7Z6Úõ6:d×¬á«±X›±°†½FR·þ-ZÕCvqÊ6ÎZì–áo´ÖeÍª±Å¬5ç¬I×ˆ‚Ü-­}oOX‡gwŒjVnÔÑðÚñ›¤¡6¤I—0â2C$sr6›®ïõÃMj(æ¬ÅyÍkÝp-Zö‰à6‡jl$ð)ä“×­)Óÿð`ôY–]âD’7¥HÈãLÊW3¹CÎXæã;|üŸ|àÆš‹êIÿË´-äU¹ÙÿotpzVrÿf5O$ä#›Ú/W£‹±ý°÷Àl\ºfØÜvÅÙFšék=õÔÓcÂj”‘d©µÉ©¢!#I²þJ(“*WÚå²zgYVÛ~¹¨-W»œH\2°¦oE5°&ª¾˜…ÝúÒ°UXS— 5Fq&Õ\i^-c
g-¥X’ÜÓ,P9õ%JW¾ÚªékDk*ìó‰wLÎÈ×ðh­ùûZiÎDs:„|vTyØÎÚíMØÍJÄ$¹ï¸×ÌØ«ÙÍ®aK%ü•Rª•LÐc [X=­Z;˜=ÍF¬f;³eR:÷á¬yssyå“ÐÙVËÑbza±ˆÛ‡ŠÆ];T©›h±ZÃ Ú„l5¡®šXí/ÿòÿT3õo½«R»z‹
VôÆ5² ×ïÜýÇóÕ—o¾ùæúÆ›çÖ¡QçxB86•ÝŸHT—šÍ@ñ&~^ç+¨.Ô/L%}o©IsµLÀk4ò¬T›œœGFZ­…z»–:=U8‘™8³Ô„É|¿ˆ'Zo×³½²:i3Y¯/$ëòüå«‰ÌØ8‰×Øq×4¬M‹ÕØØ§wäª¹6kÝ“û;­Ei¨Û¢5·fÇÖìþÙ÷cµxÂúÐÞž¬Žì†Õ ®ÏØèF'Eóvq—ë¯™äÐMsvÚŒþ	R;&R{èam¯sÖîWwÖl¤v«Ñ$;æÑ/¼ÒZ5cvqiYY`ãÁA@/‹Ue}µñQsŸ*É¡~§N±ìÁkÕâ“ÒÐ(íkQ+lÛ~„HeA"Óvmšeknjÿ[ÁMi"È´NMËÓ,›¹TS©“ˆÜóäzê©§ž‹nØÉ)¹jZ«6ÒòkTEjÉZR+;¢F° Bè{Ã%‹té®æaÛHtc}íBŠX`/¬œû¼lH‘_&,©Eµ‘Êñr¤C’d_da™X-N‰í6"­Ý–¶®\F+ÖX©¦1K×l–H–¶ÚùüT%Yô[0X¡0ß¢yZ«Ô¢u¯{ìâ¤-,:Hs€f <î»}p]‘"jsÈ&u]Ê¦ï QgÅ7–[#>5‘~y^æÃ„'XÃZË¨BßèkI™Ekf[9_ÄUË×¨'e}—çÏ/cím}•Ð¾	Êkµ_W@º\‘(¼óÛo¿ý¶Öª½uûæ0íîÝ»·ÖMSµ;Wn^½¬/VÇ.¿³ví'—Ëyóžù“öµÒ‘~r—0Ö
~PäóÃzÝqË¦ü F4ÿX&¬Öª¹‰£G.5Z-]6—ÓSÉBÉ[Z^f1]}¡Îd½Zny9h·Ûpf+['.ryyì],µÎ‚h?<ûC
!Îžš±Ì6£§iw‹Öv0bÎVs‹Ö\!¤U<2ŠzsÎšm‹Í†¾ÿ«÷Q·:È½==P}f‡¬æ–©uxl’YsÍ¢‚Ù\ƒ5íÎ>c¤³Kê·áÇy¨ôþÖÃ®ÆšX-&ƒkN£E¤¦£ÊÅ8Ñ?¤à>Fœ††UAÈpš#±kòÕ¤Ùérí]º²Œca±=õ›õÃÞ•úïï·±o`³ËÖ¦gèê=®XËiû6ø‡§§Z{òÃ»—Ê ŸxÂÚlÖY³©ýB4[Tûè¤{æ®Í„üXÏXë©§žk#>jÉWž%¬©²•,
¦æ0%h(¶¿Ù†×ª‰Õ¢Èx´ˆõÕn¬­Ý\Kÿ!XK¡rHé£Yz–HA]Ì¦Ó=Ú(ZKí3­I){J‰Œ`ÍbRà˜gnzeŠ4ÁÊb‚ok$YðÔÂT­#	+ ¨dùŒ©?-FiqDÛT·ª¡¹÷*O»ç¼d&ŽlÝM6Kkvç•ø™ì<Ké4™Ô‚7
$Ã¢Ê Q&ë3	‘4%c&•ž˜˜`‚m$öçó•|&S
Ê*R9ÄÏ¬ÙL¤ÊfdÍ‹|þËØj[ÓúqCß~ûß}ÏôÀ¾½våêµwïÜÖ)rwãW¯ml¬ß¸P¬Us©óï\¾PÍ¥yÏdðóM)€J©I¥)¨ÿDš¼I0nê¤’îˆ*>Ö\öu]›«U——	ä§´1 µZ.55RærÕÕÕšqÑž~UËÚªËKdüóß[½•,å›/-Ñ‰í”<Îœ‚ÕˆÄLÓ™‰³/p"cDqjÓ›•”·»^kl][b;gÍ¡¨6ØYéœµØªµÚ5¬¡½==H}vzÇ°uŠÍšg‘Ç†82¶ºmF<MŠûmÔ#ÒµMïwÂTëßëô°»kÎY»Ÿ·Ö=Ž¼Öú;g°FéaMŸqhÊá¶±!Ã÷ÛDHq©d°km|h@}=TÉ×0à‰Ó§Xöàµ.³ý|ÄY—¸…ãÓƒ<ÌKUÒˆa6S©^ó'Ÿz;¬=Í:µ=ör“ÖØ#÷LgeŒDˆÆ!éž`­Çj=õÔÓcÁj[Q+cpmªEp?°f-¶BÁ ZX”Åe²á´0Õˆ¥@vù)utbµ{}Þ«}Vß	.K³8-!î’”,ò´L7ZZ_¥,°&‘F¢°HOfšž†ÒœÙ"!q'	;çyØlÀZ©¯¯èÛ×Ë¢§E–©‰‹Øm#µs÷õÓÞƒiQ•#šäø¬‰„Â±MU'¢¹9ÉR[C6l¤ÎfÚÚÄiJ!Ñµ½OãîüNR,‰Ò0×Réœ¢ú‹ù±Iû¨‰€5ìµ<ÀTZœ¯çò‹‘³¶åMUŒòQä—¿õ­ç¾dQíkf±šqCi‚Mä+ˆ´~Õ?Þ¸q[íöÚ«Á…[÷^»½ö]/èk-.¤GVXTkäË,›ó&›•,q¡€åD@Žˆ¸Ï7›«F‘Ökµjê@ª4ŒªGÏ]n6jy…A†üÎ´Ì­Ùh6k‚µg_Z‚ƒjx­F¦æÎü5ÆÝÒ/À²³32ÖkˆH¬¶Î²)½_ëóEkü›4Cƒa»¨„ì²fÍ¢ZÜYƒÕ¬¶öYskÖ 5…A:Xûû_½¿z°ö»eµcïiî*ÖYÍu¾v¦{2Ó£5u[X“\$74fg83´÷áþ»±ÖâUN›Ÿ˜÷:k‘µÆ¦8H`Í~:…hƒj)m‰C&	è1Éý³º°Áý–ìäV™®ØÇM±!ÍÌÈïp+Ö§Å¤éÈ?Ê-$íëïð(€ÆK%yíBM^"/–^æ£ÖaÍ¤ŠCV¬EÈ†‡ˆÏ4æld<6®¬ÜüÇ>ÐSO=õôXtX[ÊÔLy
>kµ¦Fk#ÀZ« ©y¥2J‘î!O­¢ƒXm›h[©È[7_ûîw×þ¥¥2€%Êxh9/ýt_ÂœÆlúiu`•Ío¸051á©‹š‘l9ÈM*ûÅô¾>
(šM÷%°ÓðèR¤‰°â®.ž+ô%Ed+†:	uå4ç¥	Ò£mÒšœœü‚ÕçÌÃŽ659)r‹ MÈf«#cÄ†¶òš=E<9¿(žd°2oaÍŸýú"I–žé«–"ñ1§RÏ¹åÉÜ¾±£¼s/ÝGê}±ÔÊ¥ïœÏUô®€µ0Ü ÕxG¶ò‹Ï}éßø7ÖV³¹"æ·ö=lµŸ^5"¨ZƒÕîn¼ùõ ö³µ×r/‘¥n…~±Ù\ÊQ·Ø®Ù°2ç‘ìY¬Vóå0›çæòœÙ,þé±£K««dõ× MLÁ4ì¶ÚÒ¸dTB./×ÍÚB=ÀykäƒÆrÚS’Èó/-Ï‘Yþt®×ê#ÉêòK½\{ýd¬Alö¬ÖNéïc
ÙŒ‚„Üvn¬Å@­£’‡sÖØ¬IŽÖâÖœµö¿wÄj¿êÁÚïŽÕ†wâ©ÅqÚV/mK|¿dg¢«¨CvWZCš°Õö>¬ºªY_mûxŽñ|U»Nk‘«ñ„qpÖôáà£7¨Ï®öQ»äã8«•jhV—ÃÜø(·°©pÜfgM>ä´¡8-[{àÆZ|.‚5¨“ÿ«ôƒlø„³3ÓýƒP%¶Ú(fÚUÝ*ç¤ã·º­=ZÖðÓlH¿å3PM3¶=Öt8c#	2Šê·öZŒÖ>Ñ3Özê©§Ç¤Ãzæ² )\óÑ—„CY€Õ ,ÅÐÂšCµm¢EðÕn˜l‘Û}Þ…rLJ—1Ä>õ©§½<´eEëMŒK]Ú—
éæíË`•Á4²‰ß·†šI‡/[kM%æ+Ùó@Î“-%dÍ›îÆÚü&‰Õ4Œ>Æ9-*wi¤-ˆf ìsŸûŠÕî"sƒ§lB[²Å‰ÍP[TIÿê!Íñ:^ñèf4ýºÚZg WŒµÚjäAÖ–&s€ð¤þØÍf>Å™jª¾‡³¦ŸÐ*—‰¯ô7ß^”©.Ø
ùRGgµ½mk¯\Q´ÈÕkWÖn_[ÿå·nnÜÙ¸}k-8¹”ËMNÂa5`«Rl4V—Âju:aû•ü\:]e‘™„AªZÍUóêežËå&rséÜÏÌ3ÌaVe´§=­-¥é|Ý \Ý¨][]Í”í€…l<©òm›d–92UÈ¯~ZkœƒÍ6 G0)tJÓßÁ8QIäÖ°ì¨Òk<¶qÖ\d|Ñšä¬5Gk×~µõœµûò€uŸßýwØáb5ö÷®]“b•<GjiÓŽ,›Åi9:ª=ÔÐA3öÇA~F{÷8H#G:d¢ …þÝdÐÏ>¥Šw Öð¤ÔøÚ¤‹?ãý´1:Lœ”f¦…r¢8áÚ®!Ÿ=¼Kõßo†4HhsÈ èÐ8%ÇgˆQñã0ìF}€Š9‰¼ì>þPä÷týÕe{`3‹mOhJg‘¿1±gÒ"8s#ÎcÛÓ‹íï©§ž}üç„Š¬<ƒ
vÅWQ´6‚’ÉdVýÕó‚µvÛ­VÛ†Õ6¬¯vg}Í+£0«÷¸oæqÎ¥E[R¦XôÌíñŽ
â/k"7ý`€Xƒï” ¢²µè´{ø8©„¸XÃ+ÍÏc¦ˆñEdPP‡æQPs˜yiU´…Ñ¶Ú¿ßN¿Æ6Ãl ÛvÄñš9¹y]âl:g³¿«•‹…L©•%nŒ?>r!S^Nšƒ×Ò}iR ‹©ÊÂB‹O¿\^´2Ù”Á!û«0h”×e@Ú
HXM¶šûû¯Ð ûµ×n_]'©-{áÞÆ­wÂ¿*–¡-à0@Õ‚l¶A2ÈØ\»ä‹>´V]>Ú¬qRóúÆšµr±^¯Ô–#©	*kúÕy(È–—–&—«iÅû7Úp¥R!W—š«ùL©P¬Î­2_ñµÎíL³m„óöÙþ‹B3vâû#dãR±3Ó¦ê¸…µ¨´q§ŠH­›¹æ­u”Av[´†¶ÔAZRÛ1¬õœµ®(°Ý›öÝ“ÛÐýÝ4îh¤³­rŒ¹iÑ•™‘4Òq¹}Õ¶W»¿©6{äáÿí¸ÑêÞhí;òEøìéî¬‰ÖdNÑ,›žxMã!±ö÷o¦)â«óÀX³Â› Sþ(3øTÓ–àL"þ ùÀÁøÐXc‹MÄj!Ñ€³ÿlö…³¼.íØ ïƒ‚HÓ2’ÿ7`Rù(-X›	È,«©Ò\ƒj’I„üð($‹àŒ‹HÜ¶ì†>ñžzê©§Ç@ýùŠ$XK†¨È–$ÃŸX›š"Î‚vØõvXª|³Ý¬ÅK ÿ<y‹p‘·”$xãó 3	H#B$Ìô©¥ìÖ§$=!†¾ŠYâA:­)’¯3`[ÊÀš.–<ß¦ŒPöç«¿·R!ÖBº_‡	®ˆ°ôWœf½ÝÔ‚ÈM³”AZÑþ¤S_²Ú:eŸç-rÙÌR¶nÄFÀ¿‹Š”¯f¤+›yî:/”(ûRfå;­"–ã„W"Ç?Ñ—ËUYÊ71vôèäXú@9_Y(ÕÌ·
½üÂ|DkõCù´é­«­6=ÞËë* ¿Mì·Äjj´pK‹ÕÞ¸¶öæ+Wr†¯^¾p{}ýÍ¿ð+ARCé1-6O„ÐÚd•ÒEÈíDT'Ï,å‰=™œÈá«É(“ùvfŒ×›oRIr¥â—Â0Xm.¥½Zƒ”Çv«YYh4«$¤÷Ÿ(VÓ^e¡ŽÃÚx~u.o¿¤Í;Pc7|5FL[lÓ_qRSl…‹œš±ë<vÊiÃÑI³	×©VÛnÑÚýÊ UÇeºv
k¨k]0@'${…¶Œ·ÃŽ‘íðLwXs ¦¡asQ"±Æ×Îì(Z¢¦£‚CtÔ¤«~Œ#‘þøÙ‡þ·ÔU‚´®˜f7=bÖšlh÷ŽÄ¥ä~Öx!›àÏ§“Ÿ4Dç5î›X~ Gñe°Úè°Ê	 küßÁ ‡cÃƒ›9ùT>°kÝ5¶~7ßš”?ÎÎÌZyœšn5!áˆ09Ž›yê÷éûnXÍ:i:Qü­q%9XÛóaëŸEIìlˆó‡a9<5³†­g¬õÔSOKä3V+Äôû†×Š…••Vr$Y ‹]Y¸Z•bÐv)ñåj.2j¯¶q{ãÞíµéKø`ì6$Ä´Oól¦ÈÓšK#<2+Mø~Ilš™g³}ÕÓ¥IŽD¸m!pK¦¸)X+kE^_Ê+j_$P$ìKqš÷ýûô¹v æµZ¦'m£ÅáŒòÁ.ê$·­ÈÆ·ìBlíNmñâÅy£‹A5™8µ‹ª„l™7R$QäôT)±o‚ªB†àÀÚ™Éý^:·Àû\<Ô#TC$/k&’UfËØjb5ÞŠ	ù·Ö
¥¯šl5öÝ°ÚúúµÛ¯?±­½ù“7Þx'‹#¬¥ù©tS«åë…©B½QM'2¤ô—ƒ€’ÇÉ3GÓL¨RÒ`µJ[¥Ô1ã›È´Gï‡
ù‘0\3Èà×þƒic¡BBGÅZ*U«ÎÌ¤«©L&K»6Ü»
®ÝªÔ`M[¥^	ß5`ö®ôC–­lÆg;;sÖÐ=d­1´øµ^ÛÖX³ÖZ<R¬fã c´Ö1â²ûwb«I=Xsr®™6ŽÚØíØÍZ°s;»n°æ²uˆ†ñ’G;¯uiú"E@243¶{».]ÿëÙ# Ú£kÛ{k®ÒÅAÚÃíÔx8ZsYý°š4 BÈáqkì‘iaMÇ2¨lz`2~Ú)&tOäFäÿÀ°ú˜áÃïªÂð©ÿ/Æ/UCÐáqƒ—?ž:;;>|üì3†5Eœ¶× ïfðê°†—f¬E•(rÖtˆz¨¹2HN<OèFëµž±ÖSO==>Eª9âÃK¢µ†$8Rkˆ¨ÜŽV«méZaß¸÷ê…?»$FÖ$Ò0t¾þ˜žxÚÆŠ”Tðh3_?MM±%Å—\ï33jmª"	GL)‘¯Û”ÑŸÚÇº:Ð?WÀ_C@¶y×ì$z£V³ F‡haš£4iq@ûšqi¦ÛbÈ&“Í›ª"ç±	Ø^|ñâ¢5´¹ÖîúEÞÄ¼—Æj{ý:s+­ù…ÒLX>àÍ)‹2ŸEcÕÒ¹ùC/˜Ÿ_hóÍ.¾hß(Êo¦Z¤K/‘§øy•@F¶¨fËVßz‹_ÖÖ¯]}ƒ°þ{/_òÎ_^{åö;?yeý•ËÅ|-?«åH€l\!Ž«¯BÕR6¬WVk¥òØÒÒR.‘«y4ì.‡`-€çš [è×‘âbüBeZ›[Êg‰ëôOôšÏ6êÙ0¤@¨ßl%(ïOå<ø9ÏOÍü°†‡×l<KIÛ÷k–Ò„iÖ˜™™=ûCÑš€Sòµ#µöÆŽ°-NkÆZwgÍÕA‰-ZûÌnœ5[Ö"ˆøÌ"[Äi›×Ñ•8wÇ^Ù›f×gŽß?;$ÆiöàÀŒ	jB2\ãk}¥9hÊifgäÄ”5Õ†>ó¨ØŸÛ¤An—ÜÏ¡‹³ÆÉ[¼ÒòZ¤!…r k´Q>‰œFµjÍÂ
Úl‚ÿÌY›Þ1iN•…$C2$ò“;¯0üà'û[cÍñš^6kîŽ ™¬¡=vjfföØôÙ¨ÎÔËÝñ‡@©À|D¬¡=WÕl¶ˆE,ˆ9éB'n#ž¨	ˆ®g¬õÔSO‡žü¹¢W”(’ô‰‚ÔßšýBÈîûúœ|b²œ
"T‹±Z<ZTÖn½u{í¯B’­ö!B2ì`âiBƒtZ#ÌÑvLã9Z¯†d­I¤òkE`M•Žå’fy%L•Êz'æDkå>Ú®Á“ç"Om¾`‘‡È+GjÔ6µIqÚç¿ÒIiŒæðìoî§¯ýw¥d‹›lŽØVóùFÅÛ‹‡ÍÂšôÌüõ‹ó#U)XKfµ~8*ùø\ÕŠ^úØDššHo÷š¢2hàÑ-^\D-½UÛ\:„ÕÎœùÓ/ñ¹Ž6Øàµøú{Wø¥Ñ›_Ûõk×îüòÆí—S—ï½rû•«WÞ|síÕ¯7‚R9×G¶c"]­¡Òþì‰ýj¸bÙd‹ÚÆÒÁ‰j™?ÎÉ¥ÐßŸIkuZ[üÐ»„EuJóÃÂÈJ«27—ÃÂìéRmy¹Q?A®×6,´ê&½ýùÕÿþì2·|µahãËñ'¶L™e»~âÕH„´õ¬™anæ¸í²æX}GvámÂûã#C<º8kÎXcë•AþÆëÔ,ŽE,†¢³³ÓŒÜ™-z*º¬Û>ÿ‘³c´xÃkn¸%klìAf(g7Æ¬qˆ³ûÙñÃÎ/kÖZ<’ƒ“ë´¨uÁ56ÉûõÙ¤a²	Ú,üÐKMé!’­†¤œpV†»	 Â¥bBÃØYÇgmÑèøü®5³^{pèÈáQ
7±	ÉQ>’À’£Å´i@IÞ	*£O=*ÖŒ5vÚ`GÙ"èŸYSN9Ls²×(šÙ»}ü=õÔSOC¤Ÿ\A#lIÕ_$}ÐÏªÁWV™ðýb;‰A–ÕnÜ|ùò…¯‡/˜—"–?•-qå¥.QY]¬°”žÑš¼¶?\*Ó6Ð_}ÕÄv‚4»˜Í3–\a¾€Ç£iÆSã„8ZBëBj*}´ &Nû~Ú—¿øEaZœÒÞCh?Ð£»˜·ÏÙÂl1“-FlÍU>ß0ÄÆŸíBƒ]œ_‰*"UÉ®Ë•láõ×¯W*\3QÏUÎÕ›s9u_K¥—**˜l«!öÅ_$XD°Æ{%™#J\>ó…¯D¬Ùjß~ûí·¾'/ô6‚µu–©­¿¬müwþöÆÕkwî]øî|À6I.¬:;˜	ò|¾œ!ãä@"XXkõ0s@ýójÍåZ¡pú€—ÎÓ¨»‹A^£ËZa$Y¬kJ­ñ=ÒÿQ­œõ‹µ¥ZöäT	žkÐûz±Î7Ìî?Qh<KNÿR5ÿ¬UÊsÍ9oy¹És¾C¨u,V³þÌÆmÖhµvvfÚ9©¥ÒpÄa; µXÈH<]ÄBÚ‡4ˆœµfYÍtÅŽµÅ¶ÞÚÿ…Äv2òx>rˆ5ðr>š+€Œ®ÌÑÁZŒÞºóÚðû„õw¬K‹FNºv75î×nÎšjì®}ÿÔ°LµG›Ö>»oMjQ¤ÆÈ¢Z¼²¿Ó£®ñAµ°6Ä™ÚFår˜
B&Ã_¨Æ±×ÔÆm§¹AÔâŽµÃ¿­œ³F¨åP?Ñ! ã4Ñý³Ê²=EÉ÷+'…4H±ç´h}ôŸð÷˜ÕvÒaMV{‚dÅšM‚ä¢öjj‡m›p£55[ã‹x–î~âÉôÔSO==úúøÊÔÔ”ß²´&XƒÕð8ü)•Czf±3Õ¶e5­|Z‡Ö6þöé§/¥=š ™úÇ ë+cÕÑMa ¶À1Á
3¯/å`R¸R1(Û±ÖB	ÓJÀš±ÒÊøt^0ãB_È•)0m‘Ü~=Æ—©iìRjŽÔÆÆ¢ÂG@ê¹8¤ý—-æ í?F˜Ìd$ž.u"›#6W¹üÒrs®ùìª–±ÑgüÐ!?cc±áI–Ø®S¹2ß
IY\¸²;7’	Õ=:!š¿Ô>7¿À[]¨/\¼øâ¡r¸ 7 6b”,òÜ7x‡ÿÕ$‹Àj?úÑüc•­¾òÚ•ëwÑõ[ Ûú]b ¿þç/¼yóÞ«y€²ÖXh…BhüJLµèv ”\ñ3§OÞÏÈ™èýÀ÷3^PžóÐ\-JS…`.ŸUOˆÝ’'üd²”WeãjÎË&yÖ´>½ÿiÖ§ý/¥’4³'OŽ$³Õåª—®./-Uê²èJA#Õ¶Ô¬?šYL£/¶ñÕÞ·1'\;­¡c¾v1âœ5ÔÝY‹8²IC1g­ÓZse¿kTCŸæ¹ŒÜ›äžãæÌE\ï…µÁ÷ÏëähM³:GœÆŒ½³U\v‘«|ä XûêìÀ£ö‹Û¾Óî#qYP³Î§®qH'Ë<ÆUÃL6A#DBb?)¶_(F$Ò…ÒúEiJ¡›*HL7Ï;Žþð£;,õ‹k»ß8 ^/‡Ñ¡A#/Fñ•
;™¡B \cljéÿødž¡wôÔÃÝÛÁ ¦`†ÒL¾\ÆAÈfí4ŽVö:’1Ô¢:Èž±ÖSO==&Eÿ½ómë¼×{“¬ÝÖvCÐÛµ“R;×iœäºÒ®”D­ä&H%gtjp¤HZ†XŸ±T5pó‡Tµªü¨ì´“RÛùA§EšÖ6.Övnè Íb	ˆP8e «Ð•±þ±kA…ËÆØfÃÍâ	í¼öû<ïËãW< eåÆ‹ÏyÏ{I™c?ß÷ùfa5Ö)þ±¦y‚5¾R+V„”F|,à*©¢{]Vb É\˜[X\X˜Ÿ?r«*«‹Õš	4lŽ‘Þ¡‘šï‘ÍÏ	œ¦Ð®CgæQ˜e<Æ™ÕjH$‡‹Ý.+Â¿Àu³’£-”yR+}¦¨…IÍ¦‰ÈR“¡†ŒŸf0íÔ©ÀKƒ´þNŒ¨Î^a'@‘¹	×­.3›Ñ2Äö…»Ÿß)áe2‡MMdµE‘’5Dëµ´Æ6¬hºdOÇ¼ÈÀÃÃÓ¹Hß`O†2ÈQhmtTÆÚh6kÞñ´>-R /7Wû÷{öð6ªñ`5Dä‰É3õ¿ý&ŽÚÅ…Óç/½=÷æÜl+÷Ç1ÆdÏ³	zÒ9/•Jy©˜`mM¼=¾vízâú×®í÷
Q7¦è—ò©˜ìÚ?NÅ¦—ìË'S$ŠŒLç‰Bª£7?ÀÏLÓtÁóú¢‘µë›Ö÷'óãÏüOuXÌQ“›¼=•Œöìß98˜ÉÐh-[Ú78¸ïþ¢°,X²¦1èŠÌ5BòåK›0F}{‹ÖmuÌ5mK¼µå­¹8HÝ>ÐÚŸ®j«>`DHUë¨i¦0&!¿ÍîîR˜ÕÖm[9¬ý4ØÂ]°Ùì!°Ï˜Õa5•GÖŠö×Dõ_Ý2ÎÚJ­569kº±Ñýá:H6«êµNš•Ñ#»•¹:ckú›¯­*0hÛŽ-DEÚ_‚5ËGmœj]ÛVf+3­nüÄ]×D„õêk0yÕ6¿kM6à®§A5ª!·´‘åVB˜¿yÍ[X\w=„‹ÖT©	#|Æ ”	Ùä¬9-ˆèÇM[*¨Î<ªa¬5ÔPC«B7~*ç{HKÔJÔªr’Wêèñ±lpÆù‘JÄTCB5±ÚA±š‹ìÿáåõjgçÏÎ=r´Ù˜uÖ@4à
úÖ@Â\ŒhzHÚ®!JP$(–÷³~ìVké´¦dËG¸Pà”‘×¤€~€ ¡w¶7Œ(‚J%'Â¤Vk©Ái€¨9L“ÞršE2ñ9ˆt$®:ñØ0²}M
›@ñžÜ¹“egf©#éqþó
Öä¯Õ8l¥¬Þ^qŒØÈ_þ÷Ý»Ii«óõ³£…ññBQ÷fÒ\ÂXãº}Ïãb5R yÇz»vµšuÕ¾kYØo¼qâÄäÔ‰ó°Ú›‹OŸ~s®R9¿8“«âqU1ŽOŽxÄnfbM‰”—ì_ŸˆgÑµ`Zn$Á ËDÖ&Rêx7ÀK‰ù´Ì.ÐuâÌq?ÏÃ<ë§ÛõáX$QÈa­‘ì_òô` µiã—öâÉ<½¯§IˆÌoìïïMöìÛ¹/–‰åˆ0åMX13´?]ú”†þ HH±Œm_rpÖÌWÆn¾÷èäê°¢¹¦Ø5¤æª ¨jAËÄA†œµ_¬Ôê8kŸYUÜ©…ØÌÉ¡›«…¬žÕWm¸A+¥53qkÕ\úc020B`¾i¦“0¬é`Q­›×°*`9k-ä¬9X)Hƒ´CØY³7®šP…„xj ã¦M†È”×A=¤f0›Ì3“Ôß)‚³Yf9›®˜ßŸXYCìwm¬þ#’³Ö¹ÁF¡@Ý¤?ngñí6`mkË`»x¼R€Ãðæ?øá"ð™HÁœ n*…¬Ap0˜8,€2´¿¯\3÷ìC5ÔPC×¿>æ+ÄXó)€ÌzÐP¦KydöCAÀšH
~Ê¥ëF‹|¹†ÕÔ_M1s‹ó³÷ÒÜÌ5i!‘Õ=Æ"|—sçóužË¹(P¼Ø#ËŸ?PFžœµ˜ê/MN¿¼4/#¹±bM?b‹ |Tfk0Íe?Ö%5›&b5ä8-„iFŽÀ~^#‡›ÝtÀÆ¶<±=ðõ¯?xÏW¨‰°)udïÞâ5ã°=kS"Ÿ5°6aßähzVc¦lÃ$|ø8þýW(|ÕxÂ(1ošbÃ òKßt¬fjVÏñ¦¦Äjo+®V“Y±vñ±3oŸ=BÔ~Ö¤¥§K%z»†öõ$’©õkñŽ|3qœüÍh§Ÿ×žJ¬_»¾.¤éñ€ÝG{µ|Ì/Au‘Äúõkòý‰4¯fÄ§ˆ²?‘+eKÉ„*Z=Ï)Žµ'Sùx‰ôÇx¼8\ôn[ÓÛ7xhfÄ¬‰—(Î-ôßæLgòÉß6CfÁ¬¶c›®lÓÊ|Õ[f©þÖwÒ›ÁÞÐ2ù"Ü\v?j½¬Õ¬YÛVãž­¬ò-.«F–»®µ\:	ºcËUIM»k¹æúbÛüÇ¥Î
ú][DŽ9·Í¬©óZÛuKÚõ´Œ­VÇYwYsÙýá<H'¥‹˜¿{š·Áj‚µÖu´Î!|é—ÃVfœ1\–xMÿ°³‚BÈo¾FÖZùe¡¥›Ý–¥D¡ð{Lk×vè·ØîãþnýRÃh{¿Zk7½ÃöjŒÖW3±ý Ò@¤M|ÔÁÂZxÉšn,¾}üÆ5ÔPC]÷ºé|ús^<^âèDÔ!Råæ)™=“‰*“„nÄªÕe5‹jtÂ&³aþ¾j[5Yj…„Ú¨E…`~Žê7®ÄtgAÆåz¾p+Yþ±‚î²©ý¾v+Ü’QV…æyÑš(R	#y•Lk mÂêT?:R,µ0¨Õxi—- 4ƒe&‚+ìV–Ùd½-­Œ¬©ŠtÉ#€c;Ò3¸wïïà5É6b«òÚDqØÔDþ’BÇ MÙ¦§ÇŸýþáÃÊŠîK“A2¡*Hi è®fXíž¿~ð›®6¬FÑê¹ùWx''ìRµ¹K$‹¼y~ñâÜù“¯Ï\¼tñ…&Ú¥÷‘Z™ƒãSùTŠ0\G<ŸèO%S‘H~`WŒÐl6¾±ØÑ‘"¤gÈ'°<M{7.¤²qŽÅnXjùIèÏõs!~µ·§ôXuÀZGüßå±å’ñÞîXsÛšèþA?šÍ­«£Ä÷K^òÅ§•/¯ý	Ö¶oW“5)mS¥nÁš2üƒPÈîe!ÍmÂ¼fQÁ5Z[ÒiMªqÖ,«9kÍ•A¶ýŸË¤]Õ¸9ýtÕ%‹8V»æÈ€oÛUIÍå÷Û#²ç¦v›«vtd&£ÍE@²I–â¶­»ŽÛ, •ZkWpÖ>ïpÍVAZ^;kÎW3{KgË:õÃ¶jÅYÓâ4Úeo‚âp¬L“2ÙV¦_~[ç–¥ ¦‰¢G4t®ûô+hˆ}Œ5™xj­*à´ÍÞ¶’%‚¶ñ")ÀêëÞÁ¿?©B«û»éšÝÙÚ½k;ÖÚ:Rl“i†·¦ªGœ58Íªê—q¨æŠ02­Í„äœAÛ‡ÿEÃXk¨¡†®±(XÉ"TB¶[_ß#Ïb%”÷9#ÉZëéËÈX[žÕ€µ7ÄjgÎÏ•ï»%ì·ÑH± ¦öjÍ±\A'¶ÒÑbÑ#~Ž{qØd¹AvÂ¼‚ÄC¸ã¡s…	kÕT»©È‘lQÐÂŽ&ì¦2 d?:Rs‹Ô,¨9?­ÖK3<æ ºA¼V!á~Rtøfž[Ø±™rÎb«[×~
L÷‡Rý¿/±fm´ÄûãßŸ~<ûå/éÉÆCyë<tT
ú}ó¾ïÿÂƒ|ó É"§ž°¬ö“ï~›ÏëìÔ+?×»˜{û«ÕX®vòü¥ó•_˜»tñxvm><ž¦.³ÕKåÒÙdÞ°š5þŸñù?(ëuŒµÇU©Jã¦¤‡öíïKµÇáºüzÔÄƒ{‡Æ	vÔy"ç‘f“M±h1ÒŸì·÷v”ŠÞàó;cÉxñ"I”§ºRÙüDûðÄèôP~ãî±ÔšÛ“Ã4UÛ¤QiaRÛ±Còmƒµ*œus¬­X–Ò8Ô¨S{ÈYÓæê ÃÎšj´†Z>¼´Ö±¾»¦«=r}ÚgËk~µ®¨2˜0ÉÌQ™‹î—ìÁºjÖØÀiþÈ–ëµëËAZ(b$Ôj-ŒkŸ3¸æœ5'[Éî˜P‘Îå÷îZç&(L3á‰Œ¤tÈX“»Û¶è D“ !ËjÌY!F³«çö¿[9ÚÓË$¾²¥ÛÂ®W¨Hª¹•É??é¡L”¥ÞEgkçÖm[Û>ýÑ`¸ˆ“rEØ‘l4XM°&"Óœ£1Õ‚PÄ%KmÜÍÁùnÜÛ0Öj¨¡Õ¡eÉÖøò­ù&çÏt:–¡VHã±løXäË[í=PÛ^­f½ÚËÕø¶~ñTôµŽ)KÒÂE‘Ú 8NT`™K©ÒRœ‰†ßä³EyH„c©éª~lŽ²ûÃ¥[Ö&zCV“‘%µ:åƒZµå<5j¨–Ó 5i–zhð™6v45yò„f'§fŽOdbù­Æp[‚lüüíÑ¯ÂlÎb³1‘;Ÿþùüàw¿Û{8VäÈ3R7b@t„ô%úÖ¦÷›’_2R}ön££îƒ¨$öoÏž¿9õÄWÍÛå•œ£võ½€ÑÞ¦úñMÅö¿ýöBùÕ‚÷xùÍ‹ÇÕ€.ØÐ—ï§3ÄŠdyI^*‘ À‘{°7ñÔr…Ž±"A#^Šô„üÎßw÷>‚ùi¤×‹®_«k›ûˆÉ'Ö¬ïO¥:Š£ü`Ê%×¯Y“ìÍ9¾ÿùCñx2ž'“½½É5‘H¶ØÆÛK#@gzl¬µlqO‹ÖDjìHAêxKOlÓBÖ˜kVâ¶§‹0²ÕqÖB}±—é´†œ³†i÷ùjlÂ#P˜@L›ê°Z¬½µi•Ä‰ g«ýyõù•­WÓ qæfÎKÓLø–ÙSk£1HöL²˜f	nËõ^ÐZ×W»’³æâ ÙœT­]ÁY3¨fA'ÈƒÄLÃ£ÂTk°©Á´Ž†ÖØdˆG4D2äv;Cœ©;v·5ÙxøGW/²î]oÚôÛ„ˆù¼Êm¢GŒP- m#àV×,¬µ|nƒÚfw¾ÿ¬µW."'H÷[T#ÒÀ×¯!îç’õÓHÓQM³‰ƒlôÃn¨¡†Vƒnú7j|¥¥¨ƒô}ŸL‰TAkÔòFã^±L,Ct{ÀjáVØŽÕŒ¯F	äù‹?;~¯ZTç› ©?²bÑ­)TCZïžÑ¹.ÄšÌCL:¿©Œ€s‚µNŸ/OZã!¸n£B4ªþ´tËÌX»&…P-(Ü·çÝ]ã©-)}t~šÃ´Ÿ¿â(í„„u6?Sž<y8 U^8sRgl§§Ž¿Zf†ªEðÐ“Í-©Iet«ØöìÙcSGŽ;¶ó~üµC&rd@+Ø¯ñÞ µ¡é	5ÌÞ½û—wM¿*Ó™í™q­v³†"¶šXÍF‹ìyêÔ×þóÃ“©wkÞç¤’,rz²|æ±×ÏŸ_¼0;7WÞ|üÌã…‡¬/ºÈêÊhZ.ÓG‰b*O¥Äó°Vö×ÒþˆŸOµ·'ãTIª÷Z^qžéB†WžJò´}ûº†htãcMŽƒdjhî¥úû3DLbœá’æ·{#Ó¤ö>4ÐÑÛëúÅjÉ~ °·Ã÷‹E{aÖO¦<–ºÉN{Y¶šÝå­!º¬Ù^²Jys¡ýš­Øt¯Xs	#ª›[²&­ÀYC¿‡ÂcŽÖêâ[U?úìg®³:ÇðƒhÒÞ]9\¤¶Åš9Øsë¢¹»`/Î”Ý/
Ó4 5N]5¤½jŸÑ}Çu¿øpÅÎZ8a¤&2ƒD¯9V«6–cƒõ¸Äeümiµ8Á"–ÕZZÚL Gg'Í¤E;ÈxW6ÇCnbÊÜNU:ýÉ›®’¢ñékd¬I­-z­m„¢ð:UŸ©—É€µÆÆQåÝ\Ëµñv:^¹¡í/núà²šJ )~ÔÁ†×8r|Ö‚ˆ~™o5©"ÆYCö±kk5ÔÐ*ÐÇ³ªcñõ›VÇD?â¬!Ùk…¬‡üéHæÀ
X_Mš=rôUØ+‚µÖTµÖ<¯ É(‹:"ie\D¶©x¬†šB!æoCEÔvÄ‘‹‘è¬ç–ó&†üRmG5¡Z)¢”~º^/ñÔHÙ¨5äì4S×ˆtUÊSP˜ðìÕû*'OŸ¶TvºÜ|ü4‡ÓÚ¦^/ÏŸ×eÝs"À6ÇlÂµ“}}K[ØN=ùäSrØÈ9xðK_¹gçóûMäÈa8bdawyçt:3ZÃO› ÿµœµ*§b¬aÅ9L5Ñ"˜hø4èƒ}Î¼SÞ ú`WŽÏN^|}àoÞ<qá±ãGŽö<öØCù„720m^KË4”ó3=ÐZ.™ŒAÎ¥öx¼Ý‹Äú¸/#oÍ£þ‘Ð‘D“š,®Ñh:-™:”ñãZ )ÖŽÐ@;ëéB¢)g‚mr Üþ}t^cq\{;=Ök½ñx6¿&	ž<‚Óêó=žáý@³aì¤ö#"Fk¦™ìeöÚÒ½BLcg»°ÕàÚ†š„‘ÖZcÍYkÎYcãKè,¥¤ÆîpÍ­&ýqû×õ7{3³çï‰îØÆ³ú¶è1¬êý¬¹GWôhOÍÙHHoÓçïX¨ÆxÅEkËf÷×ØkApÐj›Ó]³ö¹ËÎš±Ö€5 HÖÄjÌ¶@`”EvjA¿5’D¶ÛŽØZÆ†¶j*m•·u•BÈ›×]3cAgzáëÖmÚÔÚI­¦ò‘Œ¡¦_g&²ÛØj¼Æ6Cò6xS›nþ ABdµVm®fO€5œ•Ã° ÏB±åºi7SÔˆío¨¡†V>ú÷Y*	Uñ˜O)F?SP·iH1ópÅˆ\	«Í—çæ*3G¢Â/HÍöÅ(_dÕ|¥ ~3cN¿p.¶Š€Œ¨ jLàQ°†]“¹õ–BÁ‘µ•Í‘RPöÈ°DÏ…ŠU€f¥šyj–Ô¨L¬-|¬ÂÕììÔ	$î‚eNž>‰¦Êó'`³ÉðÙéòleJé$®Û™™Š=Á¥ªðx®!L¸)M 5­l›ç°ÀvN‚›~â¢"ýñŸ8u¹$R©þýW¬`³q#wš¸¶âÄ™Xº8,;Ïê`Y“gVË1j„-Vb Ÿ;{[m’‚U–«]ªô…0ËF^k(6íå×Fr€V2šOš¡r|ÀO÷¬Ï—ŠðT‡—ˆè4@Kn/Ž+«ÑDj ]ˆÀdÑ¦µ9ºõùúŸ6Ë%úãcÅ\T­×RÞôAcSë×tûŒD¯°ïm|¦,_ËÆ{ù3ª©&c»‡'ˆ¾i":ÒÅžxQ}Ö$YkkØvâ¬)U„Á¤õÛÜþkKY…ÓûuCáô~ç¬I–Õ\[ì°µÖö–e±*³Y…‹ ýâó×[€ˆ›s¦MS;oÔ²œ§æpÍM´kp‰"Ú…lÖ˜š—í1îÔCwµ}T»îuµ4Èpz¿k‹]é"F,©…œ5Û/©v‹`7mƒbEÎ/‰Þ íÝÀbn`(c‚‚âG.hµ+êÞ~óŸ¿ÉZP¿ip³UÎŸˆg^Ù6"FØ¶š¶ÝÔF
Ù ´­ËN!?qÓ0\D°¦.Ø`š=·°&™1à0¦Èµ¿®‘½×^åØHi¨¡†V±–JÁEJÉGyÛÊL'†˜üÿÎg®ä«}µ¦òÜüÜÜü«Íxe2Ö´>­Ê_:pJ˜EH°¦~Ø–ã”êáQE’p„
bF½ &Ü	?úÞˆßUPÌ>ÇŸå[{½øGÀJ`ª™òG6GjÎR0MºÌJæ:!ŸŒÇîb30f®Î­p899yú„ íd¥<©qe¶2YÑ\«Ì\¨ð6€m~þç¦,’¤HÒ=ŒÇö_\òÈ£?üã¯VK"mäÈ—¾þà_Ý}ìy‹kã¬_³¸ö¬Ñi%Ž<;>zgzôû£A£Œ5""Çy÷‡Í»§¬æ¢Eôy‰Öä„^ºtñü~ñ<t9_^,¿Ð7ØG×ëlËÒüÒÄ4Õ1}8ˆ€Y=1L-U(vÖxDŸñbøbäÓð´ÀáZz(÷:¼|ŽšG–DÒ_=Þ1öh-¥öu€Jøã"A/>ßõ^±ØžMÒi>çl{oª8QJö¶Çõ‡Ó£=ß8VÛÀÈÛ“ô\Vo5XÍ6Æ~ùÿþFõOÿá7»0Õø6¦ª&¾œ©‹’¾¬¡«òšË/X¯Xc«òš+ƒl	×A:k-€5é‘¬š;ØiÀilNomÔ\O ¦ÑµRsØ¦ó÷Dw=²¹˜~Ã&›îƒÌkÍyhÖtdG¸jw­š0Ïz´Ü®b­…;­Ù4HrÖØÒº´¬µ2!R…‘”JüU£5	Â~k’)ƒ4¿ #¡·-¢%P‰+4ŸÞúÉ.[y² ÙXk3ÄÛý¨Í.[Ûµ…¯W±‰ãxbO™„7ðX:³°fŽ"67Í?;ôŽÕm®fh-¸ó#~Ø5ÔÐjÐ¿zÈ/y9U#(@cÌƒiUa´)bd`:7°’Ì~-X#³¿B¤d×§PãgÓN†»5
¶‘,!Vãšœ³&2##sŠç1â¼1`ÝøzQÞ¨_PédÃÆonµvZ‰Á2›^ªæPM¦Úß	Õ,©9P;KÌÆÙE·6jÇÙò¤Š_½wÊ×‰Š<3p+pÔ*ÀØ™™ÙÙòim~ŠÇXlcé—€­RF\0dWiþâ÷‡n¦,d›TjäK/ïQ³ŒŠúÕ·}4ö—Áö½=¿>øÀ×ÿ×±c
ÙÛ—aå`MÜÈè„F~åF'Jœ›·ÏÝãˆd‘ýûírµ=ÖO´ïœdHñ‡/ñBæÞž{{áíÿýÐ…‹3³¼ÆòÌß6uÝK¥}rò#y
•²éq?[
¬Ð˜’ÓJNG<¾EñÆüDŠvÖió‰êcóéÌ–ñS|z±´yp$7¶{lì;ßé"RF92%©õæSý¹QÁZS„ÅRœÚÇ¬—ìHþ÷½½©l±ÔQ,¦’½cÀZ²¿€±¦dÈüÀèœ¦nØ*†ÜµýiåÐ•èåß°*ëñµ6EÿRn³!WÞ;œÝïdÃû®
g÷Kö«äå2È%°Öúáª­æÄÜÙl5¬öÇG®ÛEN®ñµÜÞ#}~ûÕ(Í4:ý45qÞÙÿs™U»Í9lt+¬5újasíÊ¼†ìè‚ûÅk.2ä¬9k˜~z©	Ö(&lmÙ`ŽòÅÉÜ¨d¶i«ƒ5“2"*¢"Rq' »YÐ†÷7.W	g½;¹Ÿ`mx–Öþ‚Òª]X«&k¦RÚ¡Åt6’êM•Zù>b5‚ W,õ¾®Rše7±™•&Ú˜XXã.²°æ.ÝÐHi¨¡†Vnü«…`5…Frd¤g@$©I6,EÕZSžk+c5lšÅÅÙË°Ê 3*l«)’_~›É‡Ì	›±¼¢"#ŠƒDp›Ñ ¼éI1An
£(L€g~Á«šiŒ%híJ¨¦øGþè<5·DxZX¨ršQåÂì$ŒqÐµ`˜™á¸•ï}•ÕlÈŽÌâºÍTÌ26ÃvR¤6;;sïq~‚Q¹\™ã‰Ü´öMä7© ’……ÅÉÚxÊÝ6Ëk{¾üå/ÿú×ƒ×ö³|íÐÞLz\ë×¬F‹ÚF½lib”£¤÷Ó¥Ó‡	UùÁNb õöÅj>lS/Ÿ3°vö¥…'€µ9*87Í–/,¼Pˆtu(_Twmãé½7žöÍ2Åqü¶¤¯lOF¢¯äGúS‘´¯!eÔ0Žø„øoÌp¥Í½¸X+¦3~:ÆG:±{w¿-7=J²M$â{ú_Žæm¤ÿ'	ðr)H¼l°ÖÛ»qc{±=Ùoz³b‰ÔH©ø[¹j­ÖžÞ±K5C,ÅgSÒµù‡ôj¯[í°•Éká6kmõ£û¬…­ÕsÖ¸I[Þr”æÆúúÅç®X³4†ì`Çêes|uG÷ò¬&iâèŒÁÞ4Îmd£€Ì…ô3Ø;‘=Õ¶¶®¦†æhÙEkìá4ÈºÞš¥5v‘Z]g-À5j6¯Ÿfk:1Ë×ø‹ÉÌæŽt·µŠÖL|¿­‚Ô0x:‚Ú¶èTÐoñ‹Ân^¾ÉÚ»÷ÕÜ©rS0¹Õäž)‚Ü¶•fkxk
ÑËÕªºMm¦¬S]²Iïÿ€…ö»Ü~kŒAN»Ã¶Äj¨šüÈ€þÙæ¢¬7É\jÄö7ÔPC«A{('NóØ}Ü+Ï§øß
áŸ¤aµ[¢ù&ÍÕYíìKoÌUf_ûÙŒe5Å‹4[RÃJ3©üì0WLWi©Æ\L{1ÂkpY³ú¨	ÏòFÉ>SCl›íOmŒ?™i­Çª&ªªI1KÕªAýÕ…jÎSCµ¥–Ô´äl¾2urrf¶r³Wd­i25üÌ¼8è:~„:ÉùÍ³“"°3³ó•ù™Ùùòñž®{›šŽOUDnÀÚ¹s¤Fš§s ÖpÚLU$t…P±ÀF–þ·Á5»ˆÍðAûO=õ$¼¶çàÁƒ¬_»¿kß¾¾Ìá½.odX×(Œ|†&x—@ùÄ¢òÏ?Èr5Ãj§¾öµG•-òŒ5¬ÄÅÞøÜâÙEhíÒ¥9|Â™Bz ü˜O³ñD>2¤•q¸–í'fKé|¢©§§i-°÷øˆÒ„;®5Iü=Ñ\©#eÈá£Éõ,pÁ!7¤¯ÀrÇt$óŠcccÇÚ}bÂó#y`m¬”Êõi a‰ðÿÏgé àù?Ã†Õë§Ô+»·\ÈöíÀJÖà¿µÿ–´~™kÉMc±Ú.®¡ÀXòÞ–­ƒt÷…ÍµšFk!cÍe÷‡­ÝÅV»hÍÁÚö®øqy}¸õŸ\ù™÷áJ5ƒlßû{©,/¡˜£6¦œÛ9ðeIÎbšäM2{•g21‘‘ÛW	ª¹eˆËXk+m‹m7“JƒD®'6›©ŠHê ™Pédw²nU¥‘ÝH£kb2Fð‡òBF)—Íþ®hiûäiíf[ùOV=b3=T˜©äcïQI9·á´mFz¦µw5áb#½ÿƒÇjHAHñ:XGq°#Þw.-|´b­›¦—¥y£²¡†ZºéSò@R¾ÇWc¾¦£\Þøj¬ã\ë”¢™ñz5{B¬f‚ _»œ'¢P@
k1±8æ³!¥Ù%k9•DæÅošc¢ñÇ1+4ßÂ(’‹êqºDó5«‚–LÁj¹ìÄ(ßðå§Ai®¶Cµ%õáòGØ( 5ÓfŒ›àŠ£–¤©°dmæø‰J³òuÅ¸gó8jåÙ²-r+¿zôHWyvsKÒ¦.|qs×ñ£Ñ[ºzbÑ£3gfŽƒ?ô`­ÍÊãùÕBI~"w0ãªB"Ë`™ÏIßæ%Vyí«_}â‰'Ÿ4¸öMuÌþÂ_nÞ<xh/: =H«Ô>@¬ˆý0~øð¡ßý`pÿóÇ$WÒ°ÚzûxwÊQëî…ÉÊ|ùÈÙ7+­-¾þzö÷¿Ç0€´bMk{öMƒjªEôR\K÷5­UOµµëSñv?FsòR±£?fhm0F#l–•åR>nZÖx²ÙŽdÊÇ,¥š×33:Ò5ïà‘¥ÝcÅTªˆÑ¦®~£<¾¤BIl¼bI¤Çâ5Ÿò×˜xçˆ—*Âx°Zª÷?¶'×àÕeòknë§zÇLt?;zšh¥öo{Y±5ÛlM_Ää¬™ï9+	„sZ¸Íšª¡ ÕÂáý&ÁÂš•ýŠ~Ä²µ«Ê-XcxÇ„Ætyt
Ãþ³È…‡°‡`];R»Ã8Ëë®mËxjî€B[¿ªÖš¥2w@±Qý<i¨¶šteX3·eÚb‡ÍÅAk-LkH£U€k-­ìm ‘-œ@jü½T§µæš¬kQ1a YYâ#ƒnÆXãLiD-[v\1ÿëÞ³VÇXãuŠÖª¥˜ÛéÆ®Vk”mšúGÃœL¶ò?x¡ý¨-bû«mA¤•fâ2ÃjaYK£•úa¨¡†jèú×Ç¿!R’ÎFÆš\ÔBZAQ”¬e_Õlƒµ……ÊÑ€Öš´ò,»ÞŠÀcxvtJÃoá*&õGbyýÁShŒÅ,¬)(2£Vk65²P-žŒÅnñ©~ô½R©ÎÅ&†³†Ñ¬Q¶‡ê£š­“Z°FÍ¬&«rš0 k
´ª/ŸœšÅc›‚¯¸zß½³³÷ÍLÂfXkjîéÙ|¤kó‘ù©ÊñæžÍÒÑ}±f* '›e®QP9yº2ÏŸ£Eo*¢×˜ðÜ
¼f‚"'g…†ˆ—tö¥¢çÎØhÃöðÃ>ñã'éo:fßsÏºö“7²Wú“%¶ÊéæOz†Ù4«Ú2C‡û€5±1¬W;uê‰Gþïÿ¿½ÂÇuîÜYkgŽô”*ó—.•_(üý[°Q©4€ƒÖÔÓµodÔ'ïƒ–èé4üYÛDÉ#ÎZ{|×
³±Ž<ý²yÓÑDŠ}¢h¯£TŠÇa5À¬#‹7Jc…"°‹5åJc»Û=z]'|ž™mß¬1ìæ»K…ÜHi÷‹/K£ÙxûØ˜§Vé,j+G³ü¤í´ÿKÞ®(ÿþB>žì¿½7™JÆÿ@Âˆí´&l{™å¶ r‡þZˆfXÍÌôÏÖ+Á5·rMg«™!@µp d¸Óª×iM­ýqE¬Öv™w¸½ÓfïX«³%	#×„ÏØÞ1¬}vë•-5wtôæB e±UµÔYãh6V®1EU)T[}z§ÎZ8ÒµZ3¨ÆÑB:…ã ×ÙPE+%ŒlƒÖ	 ±„mCt£õk¬m3¹þÝ¦Åâ 4H{fr «ÅÓ›ºu¸R~ÿïÒX[ç0Í[Zô¥ÛZfz}ì¼Ášq©0ÎZ7/·š0¢«¸ï½#VÃI³¬f	Öj.¬?è±fC f/|ä#A¯ló”†±ÖPC­Ýô…<¶ÖˆGŠ¾\¬‚o
 ñXÒRÕújÀÚ±cu|5µV¦¢î5ˆ
TÓ5:¯€³f1ŸX‹~A}®£ú³˜6Ôy;‹0jQ[Åxns‘Z$
£áäˆæ|ŸÝ¸i^n
(ù@›?\ª+bQµjKë©¹€~QÚÜyCO¸R]X&LwŒ›œá(‹l–ŽÎ™ä±°Õ¬¡Ò[ ´#33÷6oîêêê9ú³#G*ò¾æÍ5ÑfJÙã$sOó,æ¢ÂÙ
y%‚Cü¼òÜfxí—ÀFI¤á5G~…Áö0þÚO" ò{>ð•{H×,¯lŠôŸ>ð§ãšŒ8<®L–«í„ÕÈùò©¿yâ‰ÿôð·¾õ«o÷µùç´\MÞÚë¯WËkËoÎ/Î-Î¦ÇÊâÑN®ÈP”nå]‡“Œf ®ô´,ÑÈÚXOS‚H/bŒ5 J°ûú†X –N7ïà"‹¡}@«V›zÕP×ó†w¿8ì¥èrÝáe}jc»‘fŽŒ½¬'øÅbn/qàŠ&×¿7™Ïyý·%‰ò÷s^<žÚúoï{ùéO›0H^Ã^Û¥b¦Õ/_›…5¦WÃµ¶Ú5kÜêzkmÎWcp¨VwÑZ Wiu‘+aµ ÒêÔ•[ÆÑ­r—]ãéP]â{ýÈÀ‰ökWüh¿ø/E7í+è°¶<¬9-1ÖtÐhM;É"®øQGI×-¾="ØnÐÚ²Ö>{ÅFk.bPÓ&5vK;ÖÉÆH`J…;å³uªüQI‹´Ç–Ç&s*€5@„4µÕÒ:7+Ç˜…êWA^ScMîŸ*8	¯Ä-Û´a6_à«AkÕe¸Õê øm»}‰J O~@¬ÝM ˆ&ÎN»¡
n7¸¬´ÔlH¿`g2Q²È?ÿÈ¿lÄö7ÔPC«ÃX{(ŸÇ¡âÌ³‹ÅˆZ4ulÊôˆFA(?Õeµ§j|5\µ7`µ¹…ò7€5Dº#|ækÖZªÁƒ9Ú-²ÙÌ:µ…Ž
ô¤Š#c£˜9#Í@\V_þÉÁFËæ²¦òLË˜¶b® Ò¡šK1¤†– š¬."Í:²óçÏ[W§éÌ”`í…“6¹@3wúÈ¡ü*£öGqÂH™ù"mä6ŠRinÖ6wÝôèÝ¯Í67½:s|ó‘)ýËÑ]ù8æÚT¹R™:ðïhM¡ÿ*˜”Ë·°¸øÒÁ5d2GXÂ†Áfy{mÏê!ø¯÷;¶ó~V‹7bM’¨^?Ì•C}ƒä@~áÁcðËõ¯ø¸tajrþ±ß9[¹4{îµ®žÌãåÁ$*§GpÌúÆ§@j>¸H,«òÄB"ŸXŸ’oVè‹æÛqÇXbÖ´¾© „¡!,Çân<2>ìÜH–4b¢FF&ÆÚS…¾èl÷0¡û^»2øÕ8Ûˆ‹6&Gm$«ÓÝE)K=d6ñÆ€µv>cž”ˆ$ãýkúã¥<Ø|¼s-²æ¶xi»^6°XÛb¾|!K]ÝÌ‚8Èî«¯Wc`wÖšU§—Êùjl¨5ÔiÍÅAÚ@Hƒk+§5Ö« öÎ*,ÙÓ`3»»×=Èß¹=·âujÐµ
±€f@Íás¾è›‰óZëbÚU[d£9X.³°&iÔTä¦³Ëm°7ýÛ«ÕqÖ4«o­…QM7ÄvÖÜ’5´®Føg`™þövoÚ á«m €¶njmá¢hm]›" -­m©Âš~k ®k Ü'oª_ym–¬9Zy×:~½t›ŒGÅA²m£üQÿÅÝªnÝ#™êÊj£òýÆj7Ôï®Æå QÄùjÈÂ™Ù@/ ŒA„ý¸~ó,µªí_¨¡†jhUk…¼XoÞ6ã†":Ýƒ£”Ê‹õ9[­>«ñåÿì¹³Ô@Î=:»¸pñuN3ëÌçÃ]¸j†ßh–Œëæç˜°aF<&€µ<~ž¶\ÁŒªÑ°ù>ÄpKs«ÆƒÕ¤	ÖS%@±" Z(T$ðÔ°¹*¦Wû´vr
J£6W¦^‡ÓÊÍ÷–IÑÃ*„>¢ò#ÁÚæÍ÷ÏÌD7ÏÌÏà ‚jìš¨•œ\¶®Y"Vˆ¹ïš•AW™?
´ñì‹³Gge°MÎlž‡Ñ°ï,¬i“ÏvAlssoHðšÉ‰<wî•j=$Ø~üã'Ÿzê©=ÿá›ß3Ë×¾ÐÕE<dß^t8}dcÂqïïÐ>ÓüK_7Ù"§`5²E,«='ôoœX¼xV[<éÍJùÈÑûcß¸ð¸1²R¹t†öi#£##Ó}ÑØ ì,£yyZWÛÿ5ñ8Æg”HäFF=’hñR<;¼{÷èx¦JûY‘µçƒVüÔîÆJ^GªÃXj|pÅ1 ­clãÆ1N;(‚›í.zÀÄæ—`ºâØÆâÄH2¹æ¶d¼é÷èÞ6àS³›"7òö¥Ùuk»vY^cÅšß–ºqm2ÎÀvuµÕwÖPg(ºƒ£5)ÞrÖc5ù	ÝdB.£?þôsŸA5^Ùò´[Hs•†ª³Àr÷ØgkŽæ°<‹éQ+B»åz§qÏ»0Ô5Ñ [°iwëAn[A{µ%'uÖ®qtKÓªr3l5c¾YTkðZ­ÕuÖ¦i¨Wéœ5ÆzÎZ×6´ýöÎ?¶­ëLÓ›v·‹ÝŠÂÓm-yëChìÕŒ¬FŽ{ER¹Rb¸I)³,F$ˆ‹(f7uš¸T#­*¬Tòfâ:š0¦µ,ÀBšŽœZ€VÆºýÃZ®jPD†1kW@ìóžÃëS^ÓŽˆ'æKÞsÏ½ÔFN=y¿ïýº†ŸÖ¸ÃD÷“Ù¦ÿp5)»â6w;-©KMÍ4ÃXÓžÕt°!^'¿¿lä­³ÖXkõu›m€Í©D³F]·þ†£RïÏÎóÖûcá Èûs·AäÇ}XV¾òÑÒˆÆëlÙ8éB°fsû§ò“°¹g_Ö«ý‡JlEUt'è³§Ó]°ZGos„â43ÔÌ¤A¦C(&<Tãy«´¬väÄõK“ÏÎÎ¥49M”©¡…±µTJ¿¼3lãuk¬¡j»r‚ã¸%¾3mjá4#ùRä7¤è‘AbÝ…iJê¿j¶p¨f\5gª­LK8X’M™^^Ö8AeËs‹’6{Ž:Èå©{–—ç&£‡Ï¾}}úì©éÙ© 1Ñ¢@+Ú>‹ƒfnðÖ£l¹ˆòJ =ÐýÃ‰×Oà£æû.Ÿš¬ž{óø\àÄñSÇUiò!a¹bËç—–.]º¯M¯P°ø½bÛ+Ï^{êÑ/Ë]cüÚý_ÿ›{ïmü4ûöx<¥¡,¨†¾ÿý½}ï×ïÿÆ³ÏÂjëS/?iXí9‚ í…%ðúßëìÂ…¥Ÿ÷ONŠ‡›»sü˜SUAžÝä6fò¹îÃ÷pZS½iúc‹†ª6VÑ…¦‰Õ€·HíŒÐXVØg8,“Íø™¡)`í@¡wôE´¯ãAŒ3¯òñ »æ‡šÚ:
Èéóôå(¨„r;üº®­äûsc´ëóŸÿ¼ù— —ÌRùÐƒÔB>ø•ßôÐ³Ö§xkCjÌX#5M¿çhÝíU=;ößÖ¯Ék-öðk<³ª•$Œøâ k\%¤UÝubFÞýçFñŒ£«²œæö:ühäÇ5³u€æÄ¥½í¾óç®Ée¾‹²LçG·gû¾8ÍÁš9œ¿†Ü‹hÛ6ßOânÖnFž—†Ø˜òG—©C²Wžô¢l·wWX­<¯½G!¤?½_òõ¬m)>ª©cÍ9k
ð7¨¶‰ç6\5©qg'A#-ØS-¶üaµ><‡·×‚X?³®l¤å¬÷+?´©ré'-2 …kâEcýQÿ(km÷Î&c+®ôÔkö]R¹¹§mÝm6+'%¢H1[n°aÇ	qòVËlWEAzÕxlÞ'UŒµŠ*ªèN1Öâ‚µf*!a55
!6ã÷ñÏþ‰‰	ÏXsá"ŽÕž“O³²¸²´º´0k£ZºªR‚?Q·‘²û¹”èLKYVãÒ Xu:X´Ú4pMA$BZt©d7qI“3Q¢ˆ§A?ªÙÐJÕJCE,§½©‚G;V;KwÚüÜ¹íÌR8œ¥ò±zîìt.k?¼ý¥±öùãËSÜsÌN$HL{ÚÔvÊe¥Eyç Þš0Ž#ÐÞØ»woSSÓáäDçÏžšÍ£$tdùòìa¾œHQ£¶ßr¡7ƒ.œ?¿° E‰£–^Uýk¦í&°9óÈËO<%{í«O¿ýö—~öõ/ÚiÙlTDÒÅ–èª½óN÷{?…ö¿L¤þ¸VE¬†ÕÞ\º$]¸°°ö»ñ(PœKm2Š:ÇÏ8ÕÑõù]ÄƒÆb™)úø\‘®¤ºÅßŠIwíbâšŒ¸ŽH.†…š1¡“ƒ6‰‹ÚÄÓzÜ ..¥æ¯rÞz€óæ/`‡ÉuG€´Q¡ê&,2Rù¶µ+7Êèµ/¤€·ˆ¾¿F |E#Ý÷Û>ÁÚV$‡m=®üÖ·§­ÑÑšµÆ²¦3OŽRg­t&6OÝüMkÈUAVsÞšh­åÿå¨ÖS'ÐpeƒZËãš£ ÷Òúò7Ü×±rµ“,z”Eµ3ß>xÜãÝfñúÓì¹$«‚ÝÅ•Œ¯¯)~¢Ki¹9NÓ	¹ÒG-ÚëÊö¬!­%QüñÝÑ¤vÝJÈë%ŒpòMY³qöáŸ´Æj*íÃ%õCiÊ©çBÝkrÕPcg§\µFZÖ:ëkébsP´Û3ãíI7Xer•)„ütý­tÖôd«mÙ´Cù"»‘™³Æ\ÿÝ÷g~äÎ}=m=}¼ª¬Èâ{ìÄfëüÜÇo'V+/×¡¬yÒ•n[>3räVj«gÀéêß³ƒø¤OUÒE*ª¨¢;AñßA"ý
ÌÂX¦‘`Vc´YbÂ’ÚõXkLw^X~	ÆÉ¤Uù(s-™æ×IHÆÊuXˆ&^ÍjŒTû«¿
y°†³†T“98˜…U7¨ö%äJ÷Øï`-R’+ÒN³šÕ|õÇ¥¦CˆvAQ"\q,N»gê¹é³óá¹åùÕS8k­Â²P0ª^´Õsf„\0
ÊØklÛÍ%7ôBRi4µ·75±´óÌŸËÆR¸ŠÇŽíš:~j6Ð:kœ´_\ÔícË`&›tZC‚µSØk2Ø¦®=‡Îœ9øäËOU8$¸öß~ð¥çß~ç×^kŽüôG«½ƒ^Cï<ÿ%Ëj§Oçå'_.AòsxcåO|ÙãoR)"\øu>HwÓ¶1ÔKMc.¬ut¥º‚­Ô2#-Ý=Zèêx0˜ŽîÁëäÆT°–êâzG“‚¤æ‚°LË°&*£«°£ù ã·í²F¹ÍåƒÍÍÜà%]Kxk|&‚÷ôñìàÆÙv6xï@ª—~8Jhn;n\÷.zÚþö·öËMÖ$`mçºñÕ…ß³	Ö,í¼g­Ñ	ÉŠÊu­9\s´ÖÀÓWYçzÖ|qö÷Ò-µ?úç?ùIíOÿ®­¡¦”¨\÷Y©ÎÝ
­÷_9»NY®å­yÜèë û`°æ9gZtHö6r—ˆŸç{]SÛPSgöulÞ§ÖôÝ8¬Y3ÍÈ›™¦GÕŒÄj<ŠW®_í±úš;ÛT3Ë†Œ¸ø~-¥réýÈÝ_WRLè‘ZÏa:×*²VÁø&dSÚ£.;ÙA<6È¬=b7q‹xHMbyUäº-èVö¬iK¹f}Ý––ÎÎFýŸ%Á£á1ýeÖ÷ãC»;{õtòWt	dê]k×XÛ¹óÃÎƒü¬v²"ê2“©&i§¢IÝV{šÅ5sU&®ß5±aÈ¹œÿJlEUt'ècÿ$NK§ŠÇ6IiAá«µ~Pí½XMá"k«+kca1îRˆ³vN,¼õ2m¯«àMÄVÁ£SÈ$õ;XãŒÀ€\oPÃºáè-(¤ß¨ ©•‰€ôì$¿«æ%õgB3Ž/NŸU’¾®¶|¸úØ±ê©é³sñè$„uì9i†Î¢Â±S³ÀšÄ¥ÀÔÐÚ†vX­)€‘ÖCøk¡öáñqƒoíí{)‰Äp‹f_
es¹4••û>7==·aþÔqúÔ./k„Û¿øÅ¹¹YÃç×.Ÿ?ÏéÝtÒl'/]Z*Ž`£âT³_yå‘3×‡ü2öÃ²ß¹ÿÞÿroûÛßS°¦bÕçŸU¤ýA<ùä+°3·±¦ù '/-à/ßyblÿØÄD?e‹J³Ù°O5oÖ6VõggrÂ:c…B4ÆiÌFcÉ®]ÁX2—SÕd®0@bH2“™Éá†uàÓŒ&c…!HrkîÀ:³„¬Áì@ó¨e2½R¼§ÛZô¯ðêC£Ú€|Ùo‘ˆx®ù¾Ž]ÐZGw†¶ûþëo©UÍ«‚dgrÓì¯_ŠKÛYœ®Æ/f¨ó+ Ùóô£šƒ´‚Ò\ÄH™Ik’ƒµº×´Vâ®íþÇÿ'^óPíw56Üí‡¨ræŒnµJl6¥oœü™’Üw-oÞþƒ&‰pF¬œ¥õœË:k<ô3mh`Ö¶Õqg[¯xµû±›‚5+su%JbsÂRs*]Û¶õÝx|sÖ«?`Ä9k>cÍÃ5š—Ý__oNt®Õ
Ñô¿P8£ÚÎÎ–Fj"õ×€…7DÄ¢µx®!d¬ó§iØ*H–ð”ÜECƒ ²vË¶M;xwöBñ£þ?”f’hÜg›á4Æ¬‰(Ípì–;{ÖÝöÃ°­YJÓ¾8`-âR^Z©Ÿæ]ˆÓ¼Î:¤CŸúØ¿©¨¢Š*º¢ ¬¥»"½qÓz
§”¥o†aÖÊ×@ºÐþ••%´8ŠUÍ#tÓXŒøzvg n4N<=1ŠÍ¦QÚKá¸¦¼b*…iZ‰‚÷¨9T³.’¹j~WN“NY0#òøÙó'î™´ÉZcèÙ¹{ªÑØìâX,NEgµ“r«C¡cÛÐÅ:Ú³¢ [2ü3ŠÛ£!nDéi›È&¢Ô(·ÔÉFpc`8Ÿ‰O..e¾µêÐ=³³y¾+ï^›Ó¤5ðH{÷¼ Û—Î_P[¯L£#G@-Ê!½vðI5¯>}úé§±×ž§òo¾ˆ—öý½÷¢×€5Xí_úÁ³ÌW+Œb5`MÖÞ˜^]Y¢Ô’Ikséd|xd$#±¿5<¾718ØÝ¼õ¾Ñæ®®/ã±\.¾±*œ,äâÙ®Hœ¡Ø™dv8Œ„ãÔKFÈ ‰$1Ñ(ï?SÚ·¯ÿíÀ@7È74€7F £Ò‘0ŒµkÁi‘¸dáÃ¬YmP+9À)Q’ó}H/åÛÆ‚»‚_ûÊß*[RÙXúvCiB6Šc±;5g­ÍsÍ®Ïkn,¶YJt­1k.½ÿúun.¶ëÒ)1ø-—µ,>9Vºõpv#/»o­}i@‰þÖ7»¿™‰Ö×¥pçë9kˆÖÀÚÚ:ylüäkîÖ4Þ«!d«iå	‹YZsˆÆÎÄj{jÿóúŠÊ'Œøœµr“±Ë[k.ºß‡kÒ¦gÍÂÎZC-ÛÆ¶Úkõô«Á7mdD¶4êV1øxWF»%ùñh·M×œ¨:üŒ/ÂâÓµÔYó}>ûzÞ?N}C]­\5©³sÂnûDk}=	ìî¬íTŸ²ýA6DÅ@(·)«cNjRC†Ö>Aú¾'sG¦x‘J3ôæNnÃÇY§í•ØþŠ*ªèÎ0ÖÈe×HjÍ>‹³iüY*m›ÖÎUs¬öUß€5hm_À}ÓkF	¤(Åyj‚7§êð†V}P«5ÓÂîÕ=r˜[îFòÉVïNÝvøµ\µ‚E5_³šKë÷»jK Ê)É°YúÓo^XžÚ0{êÍåY¢Efç¦8&*‹ŽíëèhâD,x†ÄœŽÜt¯Š>±Dz°ÖDb“`-¨®ŠG«Ì’NÃqÀ¨‰	üÃd µid¬?095‘OÒ ŽnŸŒnŸ_„ÑàÆËSšã6¬--]0°ft©©lAf ÛÊ;}æ5fe?ùÄ§O?Êè53+ûKÏ¿óük÷ßÿÚý_|Ó7žGÏ>ýÕ§…­æg!Vc6´¶¸¼¸8^&&˜ÎÐ•8ÞŸ½¯{¼?Oš±½˜º×Õ$%X¦ººcýãã½Ýñ0fZ,–O$‘þñ™\OëºÂZ#²774ÚŽh?#H27PôÒlGš1Î¬Ô³öb©©¦£¨­÷y÷Gµª+á5†ê
4«1‰ïî 3 v}~WúÁ­/’±&Xã,lÓ©Ï†Œ˜Z"šò²f+ ñÙÞs&¶wºÞ˜5—0rggId}9^CÎ)"c}yvqIø·R7öá‚#Íþú_ò¦aÍmØ[ÔÜ´+Û³fµ©¥áîmrÖ¶´0c«Ž½ª ­¶Üd¶ˆ;«’C‹ˆíÆÚOä¾õ4Þ½¾¢ò]k®Û°®¹ð~_ÓZóÖÊ§ARciPdƒk\ã?F`­Eÿa¢ZzØZLv?K‹ðò)
@2+ð£øŽ-ß4Úìs¥4´®aË¶ÖJ?ŸwËY•ØEO ¬õà°Ákéý=Ôp*$…Wú`6.pá€ÉÛÚW“Æ“‘a3\£š¶ÎAÕ8KÜ`çtÅ~¬IQ1Ö*ª¨¢¾ø«8‚Ñ 5A¬Ö-XÓ˜,n…Á6×°æXíé«XÈ¥9>šñÒI1óÔü’£kˆ}ÉÇ„åŸÏÂE{Î¾ÎIøŒ'îš™¨ÆÞ€Z¹Éj6R®ÚË¥®j˜Ij“¦ñi˜k„õ~àâÜüäÜÜÔþ´ÐŒÂÅ@T• ¡ÖÛçç^2Y™N”>a-ÊlÉe'&²ñX¸}o@‚àZÛÆu‹ÆLµF[[£¢µêÃ'^VQ(9Ìé<¡_œjÝÀ$ðÐöÃ¯ž{}nyY#³!·…Ës³ÄðÖ,¬]8ÿ&Ñˆ<Æ¨ßl•¨‘çÀ5F¯1•àQ¼3ÑÚ³ÏS‰ ¶ç¿ñ³Ÿ}ãù·ß~›?«Ó„‹<eç+	rå{GVgßXž]\^»tùwcc¡p"?‘œ™)ŒníŽ'(…ÕE<¦Rñ8ð{:ÕQÈÂ¥YÖFº3…|n´03ƒ7:Pˆ¤º µ[›sùñŸ8:8(ÄJfb`¼<'Œ³[»8`Ó±u«v¶27Ê×3q% ?@RÐFä×šG·n=ÐW5³hå\Ûc¢Þv"`ÅÆ½N)dc	°¹‡¯kÍ‘š³Öê·V:hÍÈ9kWGŒ”Ðš³ü¼æ
o	Önö•G6f~CÍ<®é¬m©Ñy[KcýÝ5õÛj)*Û¢ö ò}ÉÄ‹p jÛü¬æ&¬ýä±5ë+ºŽÿ{t­ù5ØêJT’ÜÏ³(ÏX£Ì"š\4³klà.#m¸Z:Úvàay°¦•êÈ–N™im-˜WßøxOû‚ûo™µæv8`$½µ8¶u*bÄš=¶56ÛinµžN‚Rä°Ñ´v»±Ú]Xg¾×•'zÔ\¤ˆ¤KGkœ\T¿3Ù¸ÏùŸÞYèûT%¶¿¢Š*ºSf¬õ6o-ØjÃp¯"FTüh­t6Î:cV»zÀÚ
 ¶ºHMÝ2&CD]i¸Iä•(vó)2Þ™XOlæh-mæ¼‘,hë$ƒ¼î„# Âô©éÐÉCµäæ¤›¬æËq®š ¹ V5bòå«±³-/Ÿ{)Xµhb0Ma£²BxganM-ÿb,h)-¤×,¬	ß8“˜Ø›ŸÈg³‰á¦ Š†Ô¾hmÇfkM¤bù™8;®[¡µís“Õ8p{ÉÿßË_œž‹†c½±°¸	‹Þ\žŸ;üú‰µåèäÚ©³Ë´³!C^ž^[ºdG¦§æß Žß õì^ƒH¡5‹kOõm	d#säÙÀjTHyúÑ§Ž>iLÆçLåê/çŽO/O3¯`y*£M0Ñ/¿Œpk H°¦¨™x¦P &´7Læø)Çâ3štMdã¾™Á}£ƒDífêäg”i‘Pvh_s3PeªårW L›Â [+û!öÊ¾®øl,î#´uW£!&Z3ó´‹˜ÖÇ"Z£,RW˜k&çº“_nô¿Ë9<µ]Õ¦é©äw×|yï5hÍ_ÉÃÈB9 ±{TÖX?|Xûàvš_%Ó­}7ä¬m2ñu¤µß]ÓR»¥q–Zi‰éŽ÷Éj?‘Dk^Sš_ºcµžúõ]§Òö5­5n¿TÇ³Ìœ5Õxzu¬É=#R.šþ¿
°V¯ÕAª(’KÌ,Kk¬Ô@*DR/ó$ß_÷ÕµÆO_ÜëšÖ$\AŒÀZÞß¶$ÓSÅÜäöÓ¼ÆéûÃoñ.õ
n!‘
±¹°äíÆjêG“•f. µRX“Š¦š[-¬Ù³ñÖ­éy×¿åJç»Š_À«AVTQEw†±cpUsÝ`šyëE©  ‚À¬x6refÀš/\V;rbQýO+óaòú‘i<É‚PWŠ8ªUãš¥ci)&”¼Qù¥yÁ¤&¬™¼HXžŒ©43±´æX-bzÕb¾
H‡jþf5ÃgŠÑ@êisÅ(µ©ýšs-Ç/m0ÌLI›áÛçç5î(ÏÑ¼¦°Kã¿µ†ø…å’A5ýM"<ÜßŽšp×†y)/ˆ£ø±=ÄíA¶h;w&çÏ}s?Ã×†c™Þ\¬?JÏÛ\bnmq.ÅÕ›ŸÞ3wqvöâ¢ÞàÒÚÚÂÇy‰ ‘y`M³²|oÕÊ­	×N?ý]^3¸öìÛ¿zûÏr)V{
ôè#/<ˆÇˆµÕÕÕÅÙFÊ-½1»xñáHG×®Ñh8“Ëå
™p¶ŸœÍB7`œŽ‚Ò±É›¸†Ç†
¹ä`n¦»¹¹04¸y ¿k rÊDÓ…ÐN!"[S±¼ØËLOÓ1Jã‹ûrû‚/Zã0I–Ó<bÓj™ÍÞ—Ìãã=¤oø5¸¼¨ÚGz:y¾‡FÉî‘‡Ö¨R!•2y“±y¾W!dù¦µ–RRs¸fU¦i•FŒH®9^óÉ‰¿ÒQÛGPE@Õâ~ 7á¬Õ°ò#f\¡ýbhÈm›ÀSÃÍÕ?:yœmò£“î¹‹Ç×Wä†J”‘ƒn?¨Ù'?±ÕyÈækZÓ´8æqÆZƒVÝß ÿÒÄlP[#+¶”ÁÑ¦ÙkXTNäŽÔ7š¿/}ab£ÎNž%mkën­±Æ¹®A%›[ L
Õ«¦7iR)Iíço³=âµt«a!þDCò@eÏ¡¿üømÅjðÖ—=ÝeiE;ïEk:{š	Ì8<Xã¤°ó²Í5£»€µJlEUt‡k1Û¯#‡­†¿†±T¼1#ØU	PÍê‡eƒ ™®¼xbåäÒâÜþ4˜Ôp4U8V…i{+µ‡0,mÃ€Nš©s”4J:+JßôŽX“9€ˆË^SéHÍæŠø* ]³¬f]5À>eÊOÙ^54}qYóÇ¨EŒÇÃ¼e`ª-/L;Âa‡bíí¶þ‘[¡ô.S,Ùmíï§Ç+–Þ•Ö8R%Ðkj"4EÙýùqRû1ÜÚiakÉø´ª†¶Íž{xlöõÀÈx66“ÏFÃUÇæ¡ù1à[FùID"s4²Á”—/Î]^ª]¬­)ƒä8£×h<SïšÅ5‚Ÿxô©gžùÕW%1Ç³_~šaµ£2Öä„x?5“V—ÏMéí[]©H$ì„â33±¥ŽÃ#Ãyå;æfÑt,ÜŸçÆ1 Ó128ÉöÏ$;F³ƒûöeX °Ä <38LcÒ‚C\xÖ˜¥0	XÌwCšiq{VvNÌhwsðÆÇ”‘Ü·u+½k€"ŸÙ×g
‘Ú×8¸ð†ÆîÐï\PR„šQçu3û]¤ä¯‚l,E5^dCYkÍŸé7ÖüòÆ‰ù,«´ÜdkÇa~gí=Åìš~í­SÃÚ¶†õ5ÈÙ}óÝjÚ¨ðÑ¢ZÖ~Â¢•kÇkªì¬4«ùlµÏî÷HÃWiûÖœµæä¬5ë­±8Vƒ{à3“Y¯ª!m·ÿ±6RåX+£—ÚvÛ‰j’IìèTÊˆÎXkÜWy¤¨É…x|ìs›nAËOï„@JÒ]hÒŒà¯Í¬í9„¥ÖG&$ùý»|He™š×ØJ2Ý{Çž= ämå«‰ÏîÏ³!“Öï€MÖ˜¡4{h5{/ìÑÕ=jõ¦d#{­;N»RYQEÝúdo,i@áÕ1mºRi´ž"¨1Lä¬VôÕ\¸Èã®òÃ•_?qb¿ö:H gÒ`3­øz¶§-•‹Bæ–Œ4žA¶
Lé‹ ÍVÓ’â”k¯'»L®Õ’›¯[‰äª-\:n¦ª‘Ø¿ ÍÎªeíø¹©ÙÙS§fa£D0Î?pk”øKp*°Èf-ÔÔÄ™úGXÓ¶£éÍ·ŒË%ëñ6IGÊDhíÚˆ~LŒŒLL«62ŠÉÖƒa»¡Pk`r2´ñØÜ¯ÇG ºl"Ê«ÆBQCsÄH&Òx›™Èþ5•l’zòÍ±¹µw/_{÷ü»ï^XÓ$ï¥?Ak+fðDzðà+¿óÄß=uô÷¿ÿÕ3Ï8Z“¾üÝgžyê;?¢Ÿˆ‡½¸¨?³#«S/½ziå­|"LÒf|¤½?–Ë¢Ùñ‘½#ãù|o2“Ï&âùìxÅz“¹X"CÂ×¬å²xdÉ˜`mp†ehÔ¬Å#”F²õl3ËgºE¤ÝpHC{âŽžˆÕç¸qËêEí99í#ÿ$‡80€ÁF¤jÉMó2ü©R¤
Š”Y4ÓÚ¸â·0VGhå‰Í%÷kqº:aÄŒø{ÖüÎšù}Óº%ÀVÆS3Ï;JéYÞY»!m#þOeoüzNð_Ë¦M¢cÃ;n:]Ä²'-ÎZ“ÌÞRš]©€Ü´¾"§k9ÀþRVç«Ùóµœ5N²Ö|Æ«Ež«5¹«¶kÍT<k;¬ÙÈþV¢ýÕ¦ºB3»Èjìô×'qmbô×•	î¿%ÒÛ¯oiáÔÀ¿¹ "uáñ‰"‰î§÷Lã¡@È>\ÛacE4™ZŸ¾­XPóZÕ@4ÄÎ˜l:PËØjv±'ñYYXóvöéi_I©¨¢Šîcí³é¬HñXwA°6µþþÐ¸E5±Z™p´«\œ$ä[û“‘ øËt µZDóbDPg,bÒ"Si¸‹ëjÃdxx¼èYjœu“J(Ír›îª…Î4©æX6nÎ\¿Ò5«)¢þ‰àÚâ$ 6¿|êÂùeBçªÏ-ßÎjZ@8ƒÑBÆUÓ^›€ ­cÉÖÜ±3"ÊÙ;21ÂX5:Ò‚©Ø¸>´µUi@8FFÿÄ0Íiñx”l	†dó9„øïmjåƒ{ÄlÎÌdãÄFÂuéôðÔà8áZ¸W~ÙÞýË%°|ñìÚþø,Óà./¼‹ÎŸ?«IÖ'_]üéôÊŠ1×¼öÊ÷¿Ö4'[Å_{šÍw	öÇW{üñ£_yÅZ¡ÿsìÄÊÊÊŸ^][Y™KŒ·&b™|¢u|&,##8‚ùL&5§X6ÏÉmræb™H¤£04Óìë!H‹_­{HDEÛL&ÉéÚZj–ºJQÎ:pmÑ˜fNžŠèÂH4Š{phÔÞm£qi<6kfÄ­œ5ë¦±»5ú3FÊyk~kM"± LÓšƒ¼‚kÈWéÌµ2Ðö‘³’/Ô±¼³vƒª'B&
EÕouøk6y¤öf3ExJ^v¿¢¯š¯æ]óâŽõùu=oíÖ'¤EÚæ=$BúòE¼ÁØ^r¿“þ+„Å°Ö$™h-æ¿j[‰t²<f
wrö`Íþß¨Éƒ5Ôs%ÅãÓõc±|à'²°VË—Å6°Æ÷3½k|ÛC\0aMÕÝ‡¸2Ýu°œåKÄ«8‚ën#V“æA›°L¬Æ^&›fb›×u)Ü’Šøe%ÎZqïÂvíkrÖ¬ÙV)‚¬¨¢Šîcíál<-<"R°ÖÝ+V9‘ÇHRûø·Ë‡‹¸"HÁÚÒÉÕÉéoNE’iâE"IßÏÓÁû`oXõ‘`‘ì2…òË¾K'Y¹”¥‹°Æ“ƒqoV‰LöƒÆVËe6f’å+ K'«M›Õ@µóL³ÚüáåSX[<|ö8&àöÀJšäjcÉ:‹]1Öx6)1
…@5P¬]@ÿøÞ½{ûÅpo,Ì5XN¨–‘‰Ø¤D³˜Œ…T, Õ¿]3Ù€µVAÑ†(4“Ìå5x¼ºjWWJ¦›°L1ð™Ð—æÎÍÏÎîOÏ-ÿ.ny~vmuá°vöÔô4ô¹:7«NÑÄB<
¬¥^û2ØÊ;XÇíÌÌ·ç¤ï½>¹úªÊ þóŸÿr*„³ÀZ,1‘	WUÁ½ã#$¦Läi*ŒÍdbÎð>c±™¡¡™Dn]o¤£¹Ëg,%Ñ¬6Àºµ™	ÁÔ—¦{Ò¥¬s°fÚYœ|ìÆWÖçêp&‹×ÉF—œÍ#‘ä¦©Òv0v°F£‡"FvJü*V–Ëü·|1#ZK¦b;kTsÖZ½¿iÍ:k[üMkÖYó‡Œ”5=>âò
>%ï¤ÛÞ„l˜HÃIPë†™‚[aK#µÞd¤å4{ ùhZ9i«ñ¸rõ£žš“‰þ5¡šë9¼z.v¹–µmWþ|­ž¼€‘ï¡03L±3#ÖZã…TErjl3Ù÷f”šµÛ=XÓ¸S(4’v¶íì¡1ÌÜkl5È¦Änl!ßÄ@XM¡
²gÏ¡>k»ÛÀ¸Nùl&ÒæEÚYpŸ»XMpæk`ãZ€Å­±J‚0!+2—±?óÔü°ÍéRyæó>Y1Ö*ª¨¢;Aûl,žŽ§q×Hó#SQÀda‡±š‚‰ñ‰o—újW5¬YÖN®,ž˜Ü~ø›‘$ñ”Úq×Ò”÷hSúÃ2Ð¬W™AGB3ü5=‹“<_ÙÔ‘x0h]µLl³ÀXCª¥ò¶ÚÖVó\5Åõ3¹?Ša"‹g­Î¯-NÏW…ã6W?L6š¡3…Óqi7|0hŽ
G½‚•6ÒÔÔ4Ì·ßŽ÷s–éÆó©]ÁPÓ0“Ëb©l–Éh431‚	Ó8Ò¤/,­<›Ÿ™É¥w«ª6Ò8hVÊxk»:"erB}“‡ûahjjlryamií<°vVƒ³V'Oœ­‘â¿
„½ =ræ÷G‡ÖðÓ}ô´\5þ°ž9ú¸…µø¨ÿC¼k°Ú[o­œø¿ùÞÔ®ÁÞ?àXrWUX=kaœ4Þ{PA•É®®d,'Õrh`s"¸å†š;š#Œ%6ÉKS*ˆ†^k-vŸ± Â=;'­ "s´ÃÌC{^æðÄ¶Ôiãp†4J¼¿daÍkZSk;¢Ò$5«Xcƒ<óÅnôž%PÖXóXÍ?gÍu­ù¬µRg­Îï¬yòúˆ2OWåXÖY{?ªÙR+$o¨³L½£åÊ¶í}ÄõÛ3ÂW“´
Î«é†^h¹{}ÖJuí>ËkcxM™BHƒi6\„Ãß³ÆÃ#5I¤¦É?³2l†iÙ€Hœ6Š!%áãÁr6¬£Y:ƒ‚LËš.5d]1¸ß1Ú­°ÕïWÙ"úþµ›°ÖÈë—&	Óþ‚ëiÛMá |Ö³³±q§©Ú$;¥³S­¸Ÿùø‡Çjxe×*‡´'à`“æYb<‘.í‰Å`˜‡i,Ót’)W…Í‰/ø©
«UTQEw„þã?Å¥GÄ±P21PÍƒ5)+T³*ÏjrhVNžœÆL‚äOAc˜kÑv´ö×a¨02ì•æ‰¼H`ÅÒ[±îQJùÊ$)Ñ¤V¨³´9ãÙj	¿­«jŽÕÞ„ÕDi.¼9{îøÙsÑÃËtÇi[X<ÜZm"…¢šw-Wµã{™”~˜J”¦Ãä„ôÓŠ¥R2ÝOU$·9à6óO ¥™L~Ùòéøpkÿ¸jSÑáX¤«*ËOÐžFÇ]f&K	d”oAk\k|&?C g*¸qWW$Ö¬¥:Rƒ8k]ÀZšoÆû‰òvæögúÛ½¶|B°f\ÂKkó‹—è\£ùìïßXý)°Fã™3GÑSOl§ÈFÅ*wÎ kXƒÕŽ¬®¾z"ñÖ/ÿõŽ™H×®P<×I¦")Æ¨%³6“'ô$óŒõ~-éHÆ³ùÁ¡Lš´l³B2Ó]°Ü¤ý+œf½6»HC££»¥	Ö¤Á+âOt3'ŽÍÞÆ çÉÇl¾’bräéYSK‡R®ûŠ°ÖÓÇÿ†¶¬&qêôHì:Þw®ùÍsÖ$x¿oÐ2ÎZ¹<Hœ5Ÿ·vÍ0È°y¥,žÊ8kïWuÔ½!ª1×Ø¶µxù"µ}7k*~ÔÊSá"%‚ÕÌN»kîþ0;ÃnO]sß5ÿ jþˆ‘mÎ[ƒÙ|¬vµ³&?Û.Òœh]“çêÁ5’xkj€š‰`D¬j,WÄugK#…¶eÍµþ`Ò—p]==µJ>Ù±$Ã×S $.šªLÄ­±Øz:qa´ÝÄBò¯:•mr yk«QéXNÜ¶é"’Œ0ë¶Y8Ób7œ,ˆ!m´rÖá±œ¥µâ'xµ`]%]¤¢Š*ºSrûs1BôÌÆç˜XÍƒµøDVÆšóÕ\¤7{eukgíäEÍLÓø4:Ý¬Éa3gkXkAXÌ£5³ñ>>¤oË=½Žg˜-–Iâ§ñ›{29èD³št­n5Ëjn²šPM)L¾ž?{|*47?{brnvqq~?H&Q‡èE=R¨héQ;PLø&TS/g~.Ä®˜ˆÖÄÝ °fL¸PÓý‚µ‰lëøD¶}ïÞDv‚"ÇtëH¶÷kÁ¬¬ªñDŒ.°™üp»µPA"ù™Ì.ý³va`ei^‹¦»ðÂîÈþ¹ÃM{õ±MÃã¿ÞŸÏO..O€µåµó4à½{‰1Ù¢5‚øßxcuõ•¿«ñü½á5@Rc¾š:Öž$,òàgžC«dAžˆþòÕÅ‰ñ·~8ÜO3#ÐÇ³©TW¤;Ç{ÄÄK&3]ðôœ |¤£P(åú›a¦ÁH,6„£5ØLBkV˜j¬f+:/OeEƒ7Åm.*—Îè”‘DàÖ1l.Á6?±ÙïÅâ¤¦5`Íæ‹°ÈdëÜô+O›‰€T7ŠÖR[¹xwÃAšyJþ:HžªééoZs]kÎZC5×±Ö|Z©¢ÇõŽhÞ£¼³vóÚV·eS]½	go¬eÕsK]]Íû‡ý£+²"ÅÓU‰ýÕÖ||æ7‚šãöq!2~TsÙýz /Rœ¦Cò;kÎš’®iîµ']ŠÖ4
[ÿj˜©kð!# ˜úÓ,âÆ®!;êiCó+…jY»ÕÆšk\Ó_Vmw­÷¡7¡òGþÏ“IPúÍ´Ý-V;Ô§¾µ=ÆWÛ	¬Ý.5Ö„hfïv‚5ÉZcQ7šäj9él	Í^[TC^ãZ%]¤¢Š*ºSŒµÿÔm&«Zƒ 5äVËNL8VsA.\D°¶8oBû¿‰e&\«N¥e¦Ù˜G?J¬ºÙÊ—·0ÆjkY 9dsFBô‚%Ð"D2›õk;u“¬91›ß+¯ße@Ú!Øˆ&/òîç7Ì½yj~jñ0`¶áØþý	&YW#¯WMgOUáVÛ¯FÜ‘ Õ8JÄ†Œ´¶÷ÕlÙ£Hxì½ÿþû÷’)Ð«Fžb6/›ª¿½½?Náÿà‡	¥ÃdŠðU£­Øk¡Db<–®
QZHf‡
(®Z’^¶\ozlþ0ß%îÏòÉùß½Õ?9Ù4¿´°8vñò)¹k¢5‚BŽ Õ'`ÔÎ|Þµ£"ÚÕN?ñÔßyÙ0ì™Õ(‚ü]k‹«¿>öggò(KnXf¾¿ff†àÇdª«? 	ÇS]ÈŽ`kf©ƒÆ
I=Bd±xÁe7–ˆä‡ì†gQ%Œ–Ñ£(ýCÇ=Åb™XÆœnä­ŒËvEBöÂX«Ái`‹?š_¶PÌ„T/J›ÔJ®|¼æ³ÖÞÓYCWw­9V«óùj¶²‘ë=”ùWi®úÍ=Ð-vÖ¶54nªÙL+\)¥mªy?ã°qÕDiW|5øÌï©y¶Ú¦kŒÙ•;7-ývòÚ®5°l­«›´æä0ÍXk~gM‡Kñ;k%¬&xÓìµzeÏpðnçî¶ú6|3ÄØ2™Û<‰ßkl0j˜²Î%‹|P•¤ø7ðÐ¸Sžž8­Gµ=šÙ§Qÿøã¹éMš	kzSÅ&ïvÝíÅjÀš¬)’½ç­yõÎY“<OM§âmsÃNò+¬VQEÝúäÿgïüCã¼ï<›.ÝÃ]JÙ^Ž•|ç˜«}úAQÇ03ÌhÐFAèªyFFÌ A7Û1AóÇ¤Ž°Ô8c<³†ˆ¬“3)%i£DMë.ŽŠtA­cPÚ:ti´ù#j}°àÒ?Úäêt—À½Þßïóè«y2òXI”tÞó<ßçÇŒ4c©~ùýù¼?Ss9º£€&Ñš@	;ÌkiH­ÕÄjA¸ÈÙ òÚÊÅ•k«¿®(IqýtÒŠ¡ˆ9)U$¡Ë-+Ù‚ÈVû\ž*L`ïcÓI4p¿Ü'âQš…5±[.ç£š³Õ`µ¿ƒÕêB V©±±¯ÎÌ,/]Â^»2++¬ÕLKµÚg‰³XÉj×„uQl²$êFrØ*¥LDW¼†ÅJªò¼`­ªfµqÎ¼e’UÆJ§‰ë°°–MDŠ““^E…)L¹b©ÈÏ:Z)y¹>M%÷ ¦TX+y“ÙÁoÍÎŒ-ñLéâ/!ª¥%/ùþÏÞZ¦Þ…Ö~»ºòûßÿéß¢JÈç] gD¥ÐÙ€®c°9òøü`,¬¡'ùÅ=öú“+¿,O/ôˆË™H1Í§Éî/-BÄ}}‹Ù!*K©Á¡¯1sz¸pT±!SêCë£´J"º¿kÎ$WzÞ •Ã´*9<+•àmÄâË[zÛÖ3[=°ñ®ÏˆÒØa6L5¬ù÷²Ao‚´;jVèÖÕ\ëš3ÖØZkáìþ°±æ¬5ë¬…ó ÙoÙ´†üî®O«—Æ¾v"ÝÜY»ñ#|`·bðLd Hl¬ûH9tG¤¦ÜG
 •Öo3û×MSéáƒ{6pØC7¼†-ØEhÑªqÜÚqµgÝc}ËÚÈE÷‡œ5/b»ÕìÚPD¶2÷ÚÌÅf öA¬,ê¤ûü<iÀ?j5ˆ&&2ç0°Ì”5¶ÍË‚DâÎÁšpSÿÈF7”F$Eü—X£Ð©¾:;¸ï Ê$Õšk*¾¼¥X-ÔÎFÈçý”HÍW²qKR#ÛÌ±šã8^aË"ÿ’¯””P¢ç¿ðšjª©¦þtÏ§¨qÛ®e×\/8ÍXk°Z¸2©Žµk3Ë«KÇ³} FÂ6Ÿ!@-ÃeKpª’Å4VÞI°æ{l>™qÎ³ÛmæHPÉ_ñ™6VÐdµ5r¾„jn¶š_ùºo«…’EÞd#ûñµå+ÌW»´ºDøcDZK•¯3ñ¢n9q+bzÔÛ/F,¢u°6NÐHQGŒµV½J»®«á§Õ’„)ž¯3éR¥Ú]-ÆòÀÐt™m1ß’J%¼\‰oEd&–ÒÐm ­P™Ëåt%YÊHb$Ùc,I)Êß[¼H¤÷Ç?Æâ³Ë×þpefafæôÜÍ_œY}é÷¿ÿÉOþZûáÌÊ“Ož>Ë€lbFŽ=÷½{šºöÈ‘'`µ ÖN¿Ï¯íúUÓ´öÇÉ¹ûçrÈÒXk5rf”NÉTµlßþýGûÁãBžòL˜ÆA„Áj÷‘Nõ=8Å}KJÈ²šA©Fnšä9@“Š™bCe¬J¶Ä†Ö[}Q$â=jo‹Ù€5+›—&Ù©ØýÒhRi€i]§¬éÑµ±³Ö¦%˜ŠÍÖ r_xÔÛ„ãÔÕÊ|lhµéßL‹Ïb·pÖXïFš–Ý{õÛê±ÑýÖ^ëy`Ïî‘;ìg¬YHÓYÓtœŽvn>Þ°ßÌ¨âàä“šã5;Óm«UA†µp dCgÍ¥÷‡5=$g¬¹<È†Òàµ¶®ž63yZÝa½z6-ø°[4s…ÈâÛ€<·/n[ kì›Is]'gÊ§Ô€5"úûLQ7þ³Æ©%5ç? dvík0¾kgÂÈçn‡Õ\7›Ø,À4€Úb`;¬(˜²ÆêËâë±QBie@¯™.ÒTSMýÙTAÎÏíß?<<Üg`‰Øy8Í=«9RkÌjÊ¬Í®,=–Í)C°S¤ÒûcÛ³ìº“`%ðÛÔ™f¤c,®ç|£LH­~…p9ŒµDÂ`Ã^›¦`;[­˜„Õ„@ÎûÝj¯Àj««‚µwW¯Dæ©…\šMR™Å	ëÈÃ;CõDTvšI§ã[&¶¿û€2l6S	›=4žŒ·&‹ñJ…‚AÕA2MºVÊ¤"Ê„KÔV‹Ð	´¦%—W^H"af³ÅS¥I/BGZÀÍä³…ÉòJ©¢‡õT€gÇ¼†bƒc…òcÅZáë¥xjöÊ·¯|{uuavåO¿ùÃïø3Ö®Í_[Q}ãé2ròðáÃGÁ^{‡ö5aÛsÇDk'ßÿôY^ôÌ•……•/|pÿhT$Ó‰
ö^AØ–Jä¡µ¹á|an¸oøþýC¹)2Dæ„cÀšf í×iº:(Œižg(Í"Š ;á€G§ˆŸ, 7øN%’²Õ›C62ÓÞ¦WMX­ýµË¶¨a­ß¾9-,n†ë Å6K¨g-”jZCu£Ö,¬±Ý|Ôú°ó±£¥ªû6œ‡_­}SÐÍ}/šœ6vÖîRvðõ>`RCŠ‚ìåØÓóÀWöôÞQŸ‹›‚-X[ÏgºX»úNïæ‹83ÌÁ'Î9[C5³‡aMw]˜GðÕ[Öø ¥÷ß–±æŠ ³öÖ¤:RcCl5²ûIƒÄOãŒÀâ M·ÚAì6×9DÎ´Z™`YCk_ê´ï¸©ÆZgOW-—äãØñÄ>â®‘yfd”b¨u «§D!$ gg/Ïê3Â<øŸ¶m5VÖ 5<4š¦«‰ÉÀ4K[6^„ùÖö>w\$Gk2×¹b‘ôuÍkM5ÕÔŸ‰¾ð«¾¾áýÃ¢µœkcÊE„°¼iCjX-¡amõ¥·®_˜]¾øõ>SæM£š©ƒŒQÞHZÞ8d±Vs ÎŒeÇ¹º°±ã” úðÑéh{‚ªG/Q8êk{½Â^—im5W	«ÕU@ZTc£riIÖÚ¥¥‹Ë¯ÍÏ|UÔåS™€Ée3N4A-šä€yÆ<ëb¦Ä²R19îw¦µ´FÆÇEm°MjJô¯)–ÅãOTÔ’Ý4¹Áae¼±ÖL›-BVqz1§¾Ð‹G«U®eÎ)[d1U
Ö<[Q¹“¥T\YŒ8l„ö·¶ìh‰ÓIÄ%ZÒDF&JÓÏë¿te&zù÷ZòÊÇ+—¯¿$X›Ÿ¿«™ ÿ³oHdŠ	­½#X;vøØ±ž{XfÏd³ß^þáÂìàßæÓŠ4KùL²»æaéMsÎ§yðþý9/K»<Ö¨Í™Hv7îŒ†åˆ °f1ÍQšÏe`¶Õ?I´²YÝwß}@[ò€q7Qà´­[£äµàkÁÀ5¥A"?ØÍl"µþ~]ÉB¤æ0nÃ*Hç¬5.„7­IB5ÇjÚœµ¶!­9çAËÆô~‚‡aM›YÂ¯qúà5;²ßBs®ÙÜÛ6x8q¾YÚ:ƒhúµÉZSN{Ç¾öÝwØoXÍ¸æÂElóšBµ‡;¡‘Í¡šºC€^Ú‚³zXÓê`Íùjœ†ïÕF°ÖÐYÛãxÍ™jë5µæfbCk 3ÖÂZ—µN_£P£­_¬F×å‘]ý£àQÀjþ¬5{°»ºÚú9’ÙA{Ù&H€Éb`ŒJºÖºú{ÉåFUÅ=¢E÷« râÌ/ö¶ô^ÙF”egÏ!`M#´û{ø/Û—¶«j `ÆªscŠ¹„K^<§g8j Ù‚]/ÒÑ•HÔöùfdSM5õg¢{î¥rÿDÊyx[ccÔ.šŽµšOjaVsá"Ï_¿²|måÊ…Ð¬O´&K,–WÎˆªá5Eö£¸l,•?ºäGí,‰„Œe‘pQº"sÑÛÀØòGÜ´ ÒÙjA	¤íV³RÕãü»?{SI¯]zí•…äÎˆ©g„Öa´A^ {¿Kf™ˆC%jÕ*ðU«Øö4h-ÞBy¤¨è3¢B²VÈ¡±Á|¶V+ÇÇ£­©HMµ…)`­¢qj¼¸TˆG3‹^¦VSAdS.•&2SL1Â@ µ¬\ÆxŠ}Ie‰)9ÅØ5PP3éòCƒ;Zò…|©’È$#ÅgV~öî/y“+ß¿úôîü¯?ÿ¾¥5±ÖÚsÏ}×xk©,HºÙÎ¾®-\½úXnò™…³O'òƒƒ1X4,ÑiW*ôåôù
L³ÃnÅÌÜoÜ³ýSs
ê÷‰ÍkHw„iÃÃ§¤Ÿ––À,Gi÷ÝçßÝâ)ÉÇ6|·²‰Ø<ã±5rØÎM˜xkÉ”BòÐÁ¶ô#S)hë­ç´ÞFÔæ!o-0ÖÜXl‘»«ƒìçAM)!gÍyk7ïYsuc7%6«p:~ðÕkwSù·ìn·@î½Cj|3\÷hw‡k·rÖ6I»;öuôšÂUdZ×ð*ÚnÔ‚Å@›ƒ5hík:ÃVóy	±ÞÕð3—@gfymlü5»/	¾œ}«B:T»}kÍ5®AjÈÁZ³vË2È%ö+³¿Ã€ÈÖ£6Và§§Cˆ?`¼xÛÆ‰‹üîaGTÇîžžÎMñÕ:}–Õv·óÑqú(pä=D‹êZc¬™fµÑCt­™è™íjëëøHJø·‰_Ú‚¬&OÍ‡5Ãjœ²H.eÿí/®ægA"xÍ—^À¥=XŒóÃEšIM5ÕÔgÍ¤ÏùÚö¹mÛ¶ýõ¯Ô±¶_îÚ~ælárI‰qµóÈ¡ZÀjuá"ÏƒjÇ¿õÕ]@W6'ÉZÖLûWŒï–ÍÉtÓFŠÀnDt~ý#¾‘øLÆš"H˜©ÂqKS¾ö7ÍËpÖª)}0°ÿ¿R)†Ô˜ÍìÙÕßüæ7—æ5eíÍÕ™îh4),‹mG¬Ië¬±Iìl6T,eh:;P!¥_7eÉ•¼b"U
Iò¡ï=ßÑºVñ²øÆ# %]ªÁo©hw·ª,`«ÅqÇ¢–Y¤V¶šV{Of™TœäJEÌ¸lJŠ$+™J7”t§ø¥ÓüBXK¤½8oQ«–~«ñ?}µz™1w×V®]ÖžgÚšµÖN>wì0O<òŽ*!éaSF$sÖÐ…™ËÇ'ÿX«ñ‡‰T5º;Ï÷Ìå²¥*Ÿ‹?ÍÜÜdŽH‘Bá”­~Ä7ÖöÍé Ý×©½]­=Èä_Çiæcše4‡hwSÕS›Œ6˜Í[:ÝØÎ ¬5l ›5“.bÝkp›ƒ3×Ãæ|5wt êY[k5×µž‹-^sÆÚF¸æ²ìGÖPÎ63‡p>wK»C8ÇW’NÝZ‡ÝS–ÜÜÑ}‹¿Å†|,ÎQü\°&WØŸÍ„¼³)Ø,˜![‰´˜£Äý	ÙjÎåÚ0_ÿÖ<6¡Ö#—½Ú8ªÃ½=[c~ûD-¶;pÖ\$Úý4Hç¬9gm=«ik€jlvG.UwHËš"bÕ´&K«wttÝ@l3[%‰&n‘—Y†cíí$P²}“¬5{ìèÖ:÷uš–K°‘g®MœñFnèrX{Édlù|²GKâÂýÍÇÄj_ü«;5(Ù‹Â‰Ã|<ãÈ»½tƒ³%ÿê‹ÍkM5ÕÔgÎ ³/ ¿F÷Þ{ï¾ý¿©_!5«õ‘l1ü Ç>ð*S¼H‚aØÕB¬æ7¬]»FÃÚÂÅ+ÏøÐ•CÙídï'‚4ðK=h1XŽƒ×”&â+.X“&ÓD_`h-–M@j¼6n(¯ ÒGf
P‰r´–,âXM¶
¢EL	$¬†V—WöÖ»òØÞ]yeåûvc‚µV1˜PÍ†‡€s’š”ùW)•jU\±ê¸XM½j,¯t"%Œk@ØU†³Í‘‚yÆ)ä-j¼ÐÄ,’‚Ó&„K§+5
y"C¤q°¼´ØŒ@îW/U1¶ªŽ'ùÒT4åyL@Ë-ò|¹‰Ä3|ÐÒ¿þágôÌ»N—..\¿öêñ•—žgØõ“°šk°šæcV{TC<õ"š‰¾J¯ÛÊå™ÙJ$U}ªZ«Õè¸‹ÿýÐX|ü©*Ÿprrnn8˜-.H“Ÿ¦ÅDê†.Oi=:iü´u¥¶AÍ•=&å¦ù˜VÏhÿcMßðÅ‰»¼ÌA›\¶:`“ÃVÇkD¦Q±Š!m¾H¿þeZ°Fÿ½‘Ÿé¬5í˜n¬ƒûÝÉzRóWGjë#F$ë¬…­5Gk>¬ÕÅf‘66ÇcÖ$:¦ÓÆSõt¢§u7ƒ»Îem­‘—Ý96³WjîÛóÛtÖ6KüüÚ{zv·9£4¨‡<t{žškXŸkæ¨+ÎÅh®wgBUˆœ~°SÌ\ÝŠeBk‘«îÆÍä^ú^Žù¶¬mì¬9w-œ/ÒÐYsÖšCµŒµ¶.DšÙ©|‘Q<Û/oM`Y¯Íí bZ#õƒDÈ•Abµñ}:7eÈÚ.|8qîkëíïê$¡rÂ†>N@kÌø×€µÑƒ£7$xm _‘þ’(ÍÚp‡þæž­ÅjðrÀ›³Æ•Oa®Òµ­­yk¿V $'º°n[³²©¦šúl xšI4{têã±N<zâ›S&‚}
ÍÍ©øQÓ—µ‰¶DIXS&HÕ¡Z#VÃTÖ˜²v18d|uÂ@NpcM¾å0Ž¤‰„„'—ó/Ùég»½B Y}é½}6r}	äÿv%v6°&TCª|”~»¼¼<»ôÊÊÊÌNúÕ"²ôÈKãLÀÆÊU$bòCº%…^ÐÊÁq+*F$©ºÉÖ@Guw•â<­œ‘‡kµ*è$Ãåò0¦Ä{|»j9›,€f5òJx£qÛmÁ‘D©šŒV¦!X/ÛOF@6¿k¯PÒ¨â’ß±£%áæ¥Éo)”Qd,¾Jù_W—-›Øl&Y9^.ÿôú“_5	#WÏž¬½!T“­†~ãî¡³èô…î«"–+‘JD=ž1ñT$þßÌõ®hRÂœí]<*.3ãÕ ¸ý÷RsÃÔNI!PÃóZï§ù˜æ(- ³×ÙÑ‘oyýˆVI]ZOm²Ý·ËF8`3oyíÜ¨
!Mvÿ(Š4dÍÏ±Ó°»£1ç«Aoîv£ÁØÒÆqìakÍÒZ8²ÝÉ¢šuÚÈYsðÓ æÑQÒY˜ôÖÎÜEýM÷ä_Täˆ‚›+Ýycgí£R;k=ûö¨žM¿¡^\ö¶8ø!æ`ËQóƒDpAÇÚ«=Ü±ƒìÃ‘Pp—qv[#Ó´m¨†OÞêåaºû$Býyÿ;LƒÜ¸kíià¬YVÏY©Ã<ôÿÖ ²ƒLHìW?wHÿ³aäš¼xc£À@ýŒdƒÐF|ÃÍFt©|qd¿K þ©a¤_I•gn¼L¶A=¸o+¶b`Â Úê!{gê·\Š$¹îÿò=«Ý¦9B[;3!¨±ÛÕò—Å0d9ÍŠS@5 5IEÍt‘¦šjêÓ	iâ4B“ovâÑ©©'¦æp@¦À4®¦ü\R!Ôƒ$R›ÃOƒÑ€5àÖkÆZ+«O	ÔTs¬¶6û:Y×~wÜšey‘!1KjjG£v/‹±p­¡\Â"äšØhhSÜˆÌ8S	Ää&éÄö¸¡5•FúÆZ«…K qÕ«­®ÙïÃÚ»3¯,'“»¶ƒgVIM¶æ
$²°&@óµHw%STÊªMg‡‰ó„^ã²Rš!Ö|-T†jÓ5žUÚt­VJsÑ]%´ŸÂÂÜd&Q(×˜g†®°ßhéËà‘"¾#}V#_ÄóLˆX-¥Ž5ÅŒã­øiˆÉÙŠÉ¼r'àT%«†'#éòc_ïóŠ)À6Æ3¼ÿ3+ËÀÆšíZCÚ;ï¼ñÈÇÌùûb5å‹œþçýQw$U*xµ§øü¯óÝ•¸†bG+Õ§"qoòèäâä~ý°·‘Ù Ç¹lvX':ŸÒjŠÃ V*ù†šõÓ¦9J“Ž8=Ç&±²ØÕÊq›c6€í¿ßg<6l!ƒí”ºÔÐÛgø7i²&LÃÇ!ý4Ëêª·ËØ´„QÍ‘šNë›ÖzìcÃAk<B]k:k<B3±9©ž²œyæË¹gkÖV=ÝÚYƒ›»Dõ·%w†ÁPºcˆäîN{Â-þ1PÇž¯ì£?M)y{zÌß½µÐ˜t[¦˜fÎ‚f5N‚¼~Èéfã:²8Q¸üÑyn7ésôd÷Z*?á¹Ø7û]»_sCg½¾gÍŒ¸9k;Ö:ìÆnÕÓÖˆ‡ä¦‰õ0)‘Áž‘Þ~;cý`W¿µÕÌ¦Ñl \ïfÕyWîš™ÏYgWûHî1#!ñ¯N*ôÖ‚àþoš¸®ôkp’œ€• åÇkÛnÓ>oSEX9Uv¿`d“\T¿ÄQg’›¶¦ûÈqY#$J6‹ ›jª©OŸÄh÷Jï½÷k=å¯Ó°šˆmXãx[Í2·qI&‡jYèÁŒ%_$bÕ§}oV3±ý+Ï$Lµ¢K»½¦%LRI«¥1ÁœQ:¤¦°‰Ð¸Mæ©˜ÔcÃå&s…£“|¯ô^‰í+Ïµ«m˜I’È¼Eæ_»ôÊüêrdvfyYáüŽÖ’ìàwpÅbÐã¸ÕjÅˆ:Û*ÆbšŒm\¶G¢TAòt~l,ÖjÆªáCo•$´&VCÓµÊt©6­ÈIÑw³ 7Ý7/.–µ8DÈ# ¶ˆ×æ%ZãbµbÉ3¿Œb2Eádkj{ÜÜŽDÞ¤~ti~9±x±¥RÅ|ÊÕ|4“ûÈI§¹òLeA°öâÙ÷Ï¾€³vì0¤­‘Üÿúœo`ƒÖþÏ÷~qþ3cC¹rù<°FþcÙ#Ø$ZäÏI?“‹eANõn{Ìeí‰v++¯#5ë¨%“¡¶žÓÖSšÐÌŠ„Ê:qG+ª§¶ Ù\Y¤¶äšÁæóÚ{™zÖÎ˜h8kÕØAkÔBÖ•7†än8^sœïo)V5­¸¦‚­ð¨5=ê"!oj«ƒÖ KŒƒ{Q½6ÛYãÐ öB0x[ÎÚÝ2›Ý´8ÆN"u¡§½_˜f"ÐYîl¶µÕà5‘™•ˆ­ƒ¶Þ«¹Ig¡ÊEÇo·š›Æòñèõß ²qÏZØYCag­~Òò‹	?’Ö¨¹½õß/µá’±ôÈtë pÖXjô©Éý
€¤±-H…¤@’ÐHÑZ[›-d¼ÍXêØs°Kß	vì×{2!Z#)	@3æÚmâÆ{,Üåé‰Û²&heÐÚVa5 M°&±Ú9ÖZ9·˜æAg[ÀgæÀæóœ;ˆ×”HÒ,‚lª©¦>…”vîöktî×ï±ýúÜ	ØLd&ÍÉS;ÇK¸óMÊ ñÔ@56¥H ¥@Úc>kÂ ‹•DÕµ ÕÂ¬ö<k×®­\Ì¦ƒjFõóm Ší¥’ÙtÇD kLXc‰›0Ž•Ø;1žãŽÉñg¶hX‘ü&¿D#-Ò€Õœ­6/V{íÒ%b ß\Ýæ/tGw&ggfvEäÑJ§qŽQXÊv®ñ„.ä·‰è*µŠ
k%¯dÒF(<<@ÇxW©´)Å[ ¾n^V­=¾QÊNÂ¥Â±äAkµ*1"…!oZö[M¦cOœôZZÆr]Z+‚dlÑøØXßd.’_èfd¯U	{ñÆbÑT,66W-&;Ø-Vô††r‚µÔìÕ«ÇÇŠÊ‚|áêûoœ|áäI² A4Ê ŸxýˆÎ¬N‚B¿8¾öìÕ«Ï|-‹!X©ýC™Ïš†”E˜‹x•é½§SJì#7dÑàÛQø
ç>ZP“áY5Çiu”&… íEZƒ£“`Î¨Ù|‹-l°‰×¾ùòÄˆJ!5ˆÃÄ!¤Ášv•0Õ™j!@«»t¸ÖhÔš³Ö\ËšQGã®µ}¨ŽÖdÔ‘û­œ5µ†­²p~Ç'ã¬­=6ÝY'»‡ÈœðnXHÔ“¬q
€Ý‚Ïœ­æ;k‚3`M‡:ÙË‡Û>ÀjŽÏ|i•\IdÝ‚¨}mz|¼úø6û¸Í¦µ€ÕÌÁB¶[om#gÍŒt6*ƒìXÿ@Å†ÕœÌ¸ì6Ášâ×Ã9‹ÜÑ)pÄ	ÖFhrë1³¬-²}ØE;Ö¦?Ÿ@n°ÞSE°š`Ì~U?ÞP5$ÿaSá€þjDá'À£µÑ‰C=¬}á¯îÐX¬i 6‰á,H+Õ8Úˆ~—Î¯#›Ã4»X©í‹Í"È¦šjêÓå¥=ŠDbS‚5jç~-t“N€i¢µö%ºqB³±Ð°YúrbÈƒ	ê*Ã4‚¶ROU«€š%5k«…YnµkÀÚñlüA¾y6fÍ†€\œáÒùÞkÃíÖŒ¡¦£ILpÅÂ<l2”âQõ˜Î	ÂÑ"jW³¬$‹h¶…5ÍU[½8¿<;iõû»vFyÌšÈ$ù"Ï,(>Sˆ?€áZãŽâ+"ãO‘z±qMddªÒmæ³%/<V"­­˜oê803-òñD±¶ˆ¦«•rXËŒCsµRe\°VI–@!Ñ Åäi]ñ']¬U¢bµx~pÇŽìb!¶¥Zvò[)ñŽ[‡.Äw´èu|ÖŸÑ+LNæ¼LÙË”ò‹7»°ð­¾Ç®?yöìÃÔkÄõ~Gzä‰#ßUÖÈá7 ¸ç^xñd¥L¾zù_Ó%‚e\L/AÀÉ^•?N–jå½4£-«;ÿí]cFê#«µ¥Fí£5ÇiVë}´ÙmW6-î–dámÕÖØl²¿ÏkÄÐ¼=:Jþ#&kgL ¤ÕÐ ê_Ëémìª	ËüÕ]¬“‹©“K	çAºR§vk¦œËþý³>bä¦)#öèië:k›+ç¥íi€j.“‚0H3òXê•!»-XcƒÓŒŒƒf­µc×â¦¬´åfU†Î&kk®Q»6]|b²œÈöñOÆ¾™yê8-”1bP­aÏÚ¨scc-ðÕÈíïpâšQÓ·ÖÞË>3#¦r@gˆ»@T0·ñ ÖœÜç}ïÂX³Òþ0Ìt•^2ðÚþÓ«*!Ï˜(HUEN¨¯NõŒÅîíìÑÜLÑ÷¶¸ÕV»}ù¬‰Ü‚0È`ŠãÕ™kHg®p’Ey#Mc­©¦šÚêºÇÇ4CdØePØ9qšdO¸é?Gå£Ž¬ùð¦ö#î XmÒÂZÖËõÁI1Ckc±J÷C¨¶šæ«9V³°öÒ»KåƒTÇV¥îSÃÈ„k¹i6&„¼Aš¯V¿?ÍóÄjR"¯/ŠÅƒ™k¦.RÊMRa®á©Y$¨ q´ˆ-Td?´©iªÚÊÒÂêüêÒÒÂ…ÙH”ñj²: ^S	ãj+I`gÓ«ÕJ¥˜âƒ¤jçŸzˆv4˜f¼[ñ ¥t©“é;œŸF¤ŽðMà;¾¤X¥ON4].¦Åj$w¨Ò+bƒwÓ4‡•’ÑH)÷yiœCYvºãâÙÉL4AgZ¶n[!—NQ Ù28F^>UòHZ-k±–‘´Ä“¼à–Èp»V¬Tº3<G—ÛìñìÐ«W±Ö^|áäYå‹Vtÿw©‚|œ¡Øâcí£ÖÎ¦‹Ï^~õÕËÏ‚Ó|èŸªÈ””"[\<*0öm*Xá´)ŸÓ&ÙëI-1 Æ/9P[sÓÀ-ÓÖÑY ëÁA;—<¬¼tA¯_sÚH#AØ¬Á¶Ækéô£ÊÖ(†¥þQ2Sn¬i0n‹†ùiþl!HkP©%Äk¾µæH­§¡³îZCáQk¾‡„öÅÐ§ÃYÛ<7-°Z8iü`“Ú™«¶{Ÿ~wmµ6r'¹"?Ž’`­Þ[³ÃÕöÜ"Õƒ%LjÁs>«5øºOÔ‚ãGm¬ikXy³þÄú8È 
Ò°ZˆÖÚ]ÄÈF±;ÖPÍæµö˜š5RSÃšn)~¤Ç8U¾›ÖÛsPG‹hÖÄÕÎ¿út* Äd=Ê\[¯6þ'»¯½SÅDãôR@bHW×ÀË7Î˜±Ø›l6Ùk/O€“ðäAuÛq'5@{ÛÖaµ¿Ž8l,\r.Ør¹ù¡!ì.²_‹9¸KašþoŽXkª©¦¶¶fÒCH„Ê@1µ¢ãìQ5k°ÉYãDç,GPcó1E¢2×Gt¿¬5 jœ 4–Ojõ¨VÏj×––®½ûÖ[+5!m§Ï]ª„ØTß$Žda¹µ!Ø¶{Í·ÜìÍXÞ|UBçê”3…‘v\,Gí#@ °Û1káÈoø¬Vß®F¤h‹™ù7/­Øf ,º>0Î5e~ác´XaM²é m3‰8¯¨P¾È5è™ØTt*1­g”ð_ÃZcP¶9×¨4¼)¬’™–4Ö:—®R©˜ÂiŠGÌkþ¡œ+à®%“©<9.Cƒyzû½2ï])f¼EOöc´¶XÊš°‘–1ØÙ‹Ñ°fzÙÊ€ÛŽ;â<Ñ’ÉhºtŠªÑR)á3–€]D«ÙåÓgµ³ð°™Ù(ÈÀÖ:F$äÉ“oð;|zöÂÂå«g_]$[²š)Ô®XðöÊA31ü{2ãú~.Ý@5.X¤FžšµÔ ¦0¨YNCŽÓ¡…4ïA¶-lFú’Àg{l¶  RõàÚÞ—íp5¶J!møõi#â4á/K­×ÎÉÐy²±Jîf laõ°×ÇAl"5í!VóiÍfŒ»¦5Ÿ×ê¦­5†µ0ý99kÀš­±¯æo»÷Ñ²f&aX#]DcvòQMg?`ÌŒ¦i	Ä‡{nÊ?·¬:üùlãŒ=>r…YÍÁÚ-ó %;[j×îê TC,ZÖ:ô°@v .y¯]¬ùîy›É‹4£G¨„ôÝ4mB4ðˆUh¤V¶®†£u´ë­;>\ßšI‚ìPÓZ;–p/€±ý¦éÜuÝKÎÈŠ!o)B-¤&cËdƒ×˜gÝµÞ~Žú¼ÐcÏ¶­1
[ú¼Kï·Ä¦5lªqË4dŠ?ÿAý#+Ò=6n8XkA6ÕTS[–ÓlÊã£À™PMˆ6eª…m3]°ñ”@íÏåxVÛ	2b,56iÊ•/2< &¬ÅÀ%)ò#5PÍ–@Ö×@®\ÿÝ•+3D…à¬´†I'Ø™q+`Xií4ß@SA¤" %Ýß©‹˜WÈ'0Ñ¼xÜ3”VH¤qÖ8$l&|«¹È;VCo"0íÂì›oÎ/-¯rr@pfšÒÝ§îÑÏ±•{:…®h9++™ÈÅ@Öª*pÔ,´RÉËŽydä{±ÖVÀŽ—kIÓVn¿ió‚Öj^yZâ*›Ê¯£VÑL¨‰à ºó¼G<ëËRq
¹WL¥»,^ùjÈ+ hÔ:ríáq–°Þ|o14¸ƒâÈÁ<s´ã2ûèiKÇR•*!Ž);«mö}tZÔmjŠyüÈ‘ÇÕ¶vä“±Aq?š™ùêÓWŸ}öêÓÓ…Êx¤Xž|p¿™hml²ÌÉ)Â Õ¦ö¨ùßL0NÍYVËí­÷ÔpÔÂ †œ™f¸hŽÎæµ…ÅÍU=ceM7+¿62@¶5^óGlÞHæÆÅ´zhU²È¨Z;ütkA²³ö›nÉ^ƒØzÃŒ¦ÝéQo«]kkº™µfQ-ì¬ÙíÖZc8ÚúÎÚ]«îGòPsxhwçžv©ß•9k½ß¹ÍkB5v@…3‹iÿ0›N¹5Ò~7d´eõÉ$øßª’ÇzPÃ8µÎZÃ¡Ø(ÈƒlTéóš	ï¬¡ßcØu¥×qÚ;‚úqÔ@¦µrH6kºòƒGÄ{¼e{Ð|ÆÛÞ‘±ÆîìásáÍuõèƒhžûÀ¡ƒ=š€‘6qæPÿÀËïk
¹ÕhìþBýGÕ£fÊ½'F{-Øõc%·mÛ"¬æœ5g¯±»dVyeêfsžš¹eéMw¡7Igz	_nÕ,‚lª©¦¶l{vÔ…lÈ{‚2ÎƒºÇGõ„îp!T3üfa3è,íVc5RlÿÜ~êàÔhFjÅbÝ>§9T«g5ô“• Ä,¬Å¾K–Ï·bÆYÓK”b¬6]ÙÈXûŒçc0_À×sNS¤A8}>¬jšŠ]Ïj.ZÄ@€c5¡Û¥ù•™]³¯¼¶tqöÂìÎ„€JÆ	ÜA™.3‰j˜JêZ£¡+Õ¤,8rDøT©P&èe=!9–rà@¹R-ÕJL	ß¨f¬´r‹­$—­­y±`ª•FP\¤4-»-šÊÄbƒ±¤ZR–Gª5VÀfƒ¾ÆúÆZZ¹›hI‘×OÓÚ —‚¡kèVórâ­àÈì6Þ ªŸh&­þ6Yq¼ÈyùôûFJ}|G¸¦ØÃjÖž{äØs‚µ™±ÿ{újí_ž~ú§åÅŸ‹sH–Ù^“Ò_>?}wQ«Ýß·½M–&y…Ñ¤1ÕÒB5ç©	—,©¹ÒG&* u˜fåøŒ’U–õ²—>²™™%@6P:`;‚‚‚H¿2yŠØ´‰¦Èâ®½,gM!þªZB¾™æŸrÎª¡Iœ°$²>_…ê ëq­MrMk’³ÖB#ÎZ««„’26’ƒ£»qÖÂÚ<gm“ý4i£({¨Óîö=8 šk†ÛF ±[›j~®ì
«YBû‚¾ÓÏù³¨ÜT3[X·²SÃƒÖ´…ã ÷±­gµÎ² í‚4Û8àF2ÒúÛ(&ô¯™m!3Áš†c[ZC~ë«ÈÍìýüCOß	BsáŽ¬áÊ©R“°íwø¾äñã§Qî(&äDñ"g€5ÖC‡Þ¦0R–Ÿ’×ÉúÓgéâ¿f_Ú*¬ædsû1Ñ4à
ŒSŸÜtæ&¨­;è¹àFðuÍ"È¦šjjëék¨7ÙÔÀ]Ã ·–ÈtÛPÛ?>
ª!ÎÙyŽãTPüxb
JSäd‚ÔØtý ‰í·FW,ñ#µµHÇjLX»öÒ[×–©'¤µšn4HÌ‡µ„œµ5(³Áü ™.s1c¹q?O½eœ;¼™E»8ôŸW’H'<,9o¯•ÈÀÕ@&ëÆ«…¦«‰ÕHí'rif6ßyeùâveóeDw)2š”Ýß­ùÓÒºÙ”þ˜‰šv+{—Ž³LŠŸ>¥‹QÛÅ[ù¶ÛéSc6H…s¦ ŽECl?‘îñ/ Ì±V­°V­D4=0ç‘½Ï«4jYbƒC}Y<±#‡çâñÍòyâE²üáVÞ²cÇ`Ö#£„/Dwê°“RúÜ•Täé€ÕØ¿«}V{üç?üq˜æ‰#Çˆá×ø£ãÇsÏÌÖ~úêåW§…­™ “m]PùãÑòùó“2Ó 5hã077™ÎEëÃý>5—'âJ_.,¬š³Ò´K†°ÙÙk6n%W#)9`s›Éô§2£&|8J!#6›e³¶^†`[XÓQ˜f‹žBI#uÙºÂÖšC5Çj<BÎš›´Ö°š± Ö°kmcÝ±³v§º;gm³da_][=Ø®{¾}O;\l†w­%Œ<l@ìvÛÕÀ5É\†ëYîÕ>«¸ö_¶¬íÑîÀ<1"…¬µµAkzH³ ×hMÎš“)—etqÕ#£½BóËˆ…Dœj•ì‰vÂG ».®SëlÆ¤M­ˆ¤kNÿØÐo¼ÿ	9 Akoã¬×hU{û=a"tÞš^\>
È`ûamÛ?,«©øQ“±gØkÈÂ÷‡ÆµÕ ›µÚZ3öfdSM5µ5ƒDä¨	·TôÀÚ9ƒkÀš¹Á³(à8?Zœ£DÒ‡5v®Ð),µ¢5ØL¨6Éƒ†5«õ÷e}TKHtjÿLÙj–Õk×Áµk³»vmoÕpµ„<2šK‹¹rG(Í
ã—k‰¬á<Ï®6‰kyl°†œ`-Çƒ¢Ho=«ýS«¹HPMzsueu~~yç®˜P¡hêÚÙº£nKZ>Kî¢þ_ˆtP™"ûSÑè›ÆZ +Fó lišnµT¢•ý|LØgHŒF½ô´5 óxq2É·L¶î ð±,såR2>]Qö¦àåK™„·¸X‚Îà¿––Á¡ü`>M@dœRÔ´—lÉÓEØ'ß‘L¶4Å‘ÀZc¥1Í-¯éuìZ¢U…X¦—OŸ¶¸&Ù†µoü\(Ãpil8k'O>ýôÕÿû`z¶VýçgkÝISÊ°ÚQf§÷MÎÉ_+—R2+ùóÕæTý˜ës™"A£c¯ƒòG,µ×R«ïO«wÓ,£9:{Í®È®îžÏp¼ØhžÒHÉ[c^×ÎñÇÇŠÖX 53ÉÕ=vô)õCib7®œ±æÚP82„kmÈ™kFõ#ÕœµÖrÖ‚iÏwá¬mª>NgmÏš™ÊxÔê­î&›•—¶ö==ýÛô‹ÊYGÅ]·‚5í"4ŸÑ´"Wü¨ŠHí‡ö?“Ï¦ ©­Q‰B¿Ýêæb‡²ûArhä­Y<s1Ü€ÏLå¬²ürðWÿÿgïìcÛºÎ4?³-°ØØ-°¶Ql&µ!KXI©b)cˆ ¥%$WP-’râ°Œk ýCV#ËvZoBe¨mÓx2‘ìl·Þt8ñ¸ƒ(FÔZ·ÏæÃI6Ó¸È’n€ÎêÇ…
ìï9ç^ñšþJ;	øðÞsÏ½¤#Õvÿü¼ïóv¶P’hýµåØÈOÑÑñ>­-­[i_S´‰o–Ý°67©³yƒ*ÅŽýb/þÅéÒ9péV»(Bã Ö¼Ù{Ô;'ÉaÃŒ0)#=_ýÔþ2ò/?¾ 41WîŒ—f)"SÝ£“¡5W‰ì-jA6ÔPCŸ5}É€šL°†,™=É‹{Ý]ôrúe£qoóD¬Á†•émH3°šžÏh3¬H¯2…½†äÝp„"wÿn@Í'µËYí¯‡}öðñS®£Ô1jÍ‡53ZÍ‰@]ž@º,—uÆCãoEô%#ëx(ßî´D¬;"#)RÓš”¬‰Õ®<^Í±ÚÉçß?uìÔ»ÕõŠ—Dë¨{”E­uûQ"»¥öîv€Jàfíb»ÙxfrúE@D9’9‹–Éâ›Í•’ÅD,AÀ½>Zb´W%—“óñƒÌñJ*ŒûÖn2ý»W…âE9mXcˆÀÚl‰³]“*üµÕ±nX+”M†#E”Ï&hPÂ£Ì©>5ZR' ¾šŠ#å¬‘Y˜*d)‡ŒdsIê ×ò8ÔMÀ	a-ƒO½ùè_üÅ[àõ€—.òƒ³¬½¶Ÿ&¶£äAþäÑÿµ¯’ž›…Kí£³?œ›Sc¹c(ã4¡,FlÙ³`¬m4ÎT³!ý²Ôœ§fð©§Í[ù¦Yx¼Ÿ³‘;ñ–/6€Íàš#6}!Çk>®å 4Õ´šlHYkh@‡MTÉYfå]«¿:oÍNATkò_>ªÕ±ÖP­³&TÓn cDºfäçT.@Dg½@À ¶úüîijæg¹þwÛËVŒµë`5dYf“XµÈKó]5]v~ÉWóx­Qyýº‘ì~Éy0»_¬¦¥vÒš£5Ÿ×ê¢šäßX-O{ Öd­ô4O´ý†ˆ8½Hš[]×†–œ­­:õá–MÍËÔxƒ}kú#Çš|"µ~²E(PÝ£æûc¬S ¤œ6@mdäÒ¹t³ÉWQ¤þÓ7¬ÝþH'!šV…‹ÈQÓ†b³Æ/¢êGÁšˆË¬y—åéj"È†jè³Tú(P3eŽæt9 ãÞ¢š¸«ðŒ'zÇ?
Ì8¸º)ÃßoV{Db£ºGÁZÇ°‚”²!¤Èpû÷/Cµ•¬ö¾Æa¿ý™Êm¨ˆN[©úFŠä¤ùU°Ó:ñÓ²‹¦:HRE@8Ö0_ø E«Íê×Ý˜Ž«[%uV³5Â~ñÝw_j?;ÿR/üÇ±¦wËzñ˜Òõ×SI‡¶—uÒ<ˆëÖ»Û€·ÝÜt©›dÓ«@þH$?Çð±TRY!
ÉÇ¹ÎÒ„¦|1
cé+l+UŠ•t¥$ä^¸#Ä¶Tø¹‰Æckì˜œË®Á„­^›®TÒÙ˜23¡Õ±p2‘+">¯5EæH
XËDg¤Ck#Yk¹âÄD%ç—-Nôˆl5bþ“¥b:KJò©·Þ"	YXCû|ã ë‘Þ/Z{€ô‘ÉÉ_LB€ñ<°Æ Y"E
ü 4:Ò„ise*Ó:h$£SÐì§?ZO-HjÔ~à4ßJ“æçùÅòøÌüª±Ñ¤íò^Ü2²kU¿¡ÍÛÏÎþÌ¨–×þîi MœÆrÎŒÇf(‘ý‡hi€¿Á«ÒU9£EÜâÑZ€×ôªqƒ±ƒMkæï¶æ‰óªÎš£Ž++è¬}îåx-Ð¦æ.ˆÅ©öþž–æ;ïìßÙ#g¤‡_.Òú”.rmgMoÚÕújxj,È›¹Öê Ù#¶¯Ýˆ.gµz¸æ‚?]kœn.6¯:ƒÖ«µè@õÊ ¨ùÒ¶Vkíé§Òøn=#=­¢&/fQó±}«ÇŒ`Ó-hdÁ¦5>Ýß¹¡¥©Å+Å¼QñC;[•‡ƒA·Õœ„Õz´¦ $–ç)¥y^Ml{¨†‘ã¶‡qÙâGoÛÏFY(_ýì°šƒ5Ci¦ ’äš,5Vx&Bs¶šÄ½?%{9ŽÄTO6Š j¨¡Ï ¨‘Îÿ5Ù98L´Æ—ñ’Ílé^§NW‘4}Æ6>‰à79irÕÊÖW{dÌ`&ZÓ%ªÌþ˜®N±mÿõ?8RªÉVƒÕ\¶ÈÙ³gCB/ÐÃÒZÈÃNã¤ñH„€o~9¤˜LŸVÉ#×Jdã<
GÂÜòÃºqÜ°mâ9,5?²ÀkqþS	±ZM¿ZÝÈ~ÁšÑK»?‡¶fÝzÁ4Ö%bÛÒ¾¾Ë¶£ÁjR;b•Ó¶±èlÏ5H­¶îp8‘Ïç‹Ôlw+]h%ái&?Wšæ¿5/äÒÑÂÜ0í’Œe‰©M/W)¯1­±B«À8&ZóÍ·EVXSŠ	<ÄŒêL|ÖLdšP‘ìà`ºÖB¼=Q™Í§Ò…x(Ÿ¤	.28”Éç+…áx1þÜ[ð¢ ÷> XûJ{pÿÁ£Ü°‰Ö˜ŒMdôð/âùYÂ(KÅÒQh¶“å¬™!kŒÄž({ÙÁšÕï£šÊëZ EÍ5‡iÃ‚:¿X]~êmÜtÆf›·2WÑš÷w¼Æ÷óÚ¥C2Öö°Ê_ÓÎü­kÀÄAšq³ò×jI­Ûqj©A5tõ*H×³V§i!ïñQ­×,”8Tûâ+˜ûè6œVµ7Ú¥œ@`MÓ§X¬×Jç‘3Ö®.¿i.3kM¤îo¿ÛâLs|aeÛËn­I×°Ö‚“Öà5ý§–Ö‚ÎšŒµk9kvñÅt>‘˜æ¬Q•I#—m+Pæ[òÀ¦<·zKÔ³áË‘Bþþæg¬mhê¤ R60¸hJ´{:{v’ô¸• ýƒÓ#þa5¶õ/n$Â Gvè»UÓš4òÕÏR´HÍ 5’¹¸G°˜á2{^ó2 ¹xÿ”Iê}©»­QÙPC},5@Íf=kÖK³–šVƒ`O@ó hO>	§M¬×	Ð¤1™jµGÆ1ÓâEÚÊFQk¬Q®)ÁTX‹ vjÕœ­æ±Ú{ô«=~X°†fm5?²Úx‘,ì%óLÓÔÂ^$Ûuˆ2Öp(‰§Œ³–È‚w ¢XŽ;EôÃhœQÃëÖj~DüUYûÅÖÑ½x\|FÒãún¾EQY×.S¹ÅdøCf½[îÞæ¡Y·ØÌ˜mò×Ú3îY5/{M·ÍøOÒ¦%3MˆVÌÏ–èMƒÕ¶MsðY‚Ãf+¥†1^™{¦=œ)3é:ØÀžñ9>DÍçÚÑÝ¥¤|°H	-OçM;­Jp¯ÆÏåP*«e³äLfÀZŽf¹B[ÇPº’XµvU,F‡Y¥„·WÉeGK]]¥|´#šHèé‡¿yëxô)ÑÚ?y TS$ÆÚÁ>Ú½¶Z“µöÀÞGLþFÉbÃZ›Ëk¨@6g
M€?¢œnÌ¦šCµËIÍE>®ä4Aó¯óÖYÓÞû5dŠ‡&÷4_]8kSþ-²­äµÉ':çÃ6›…5¥ö+UÄoXsPÖ£Å™h5wþÕk>®95qÔwÖ\ÄHí`ì€µh\û¢òÚµs}N^í¦¾îiî×îÜº³ŸIä5p a×†5[ÿhqMt¦;q'‡nvl¾¼5ð¶E|Ê¬©ÝX³ÞÚµCF…›kâ µe\³aWtÖŒÖÒÔì$Ÿ\$¶AùÂ¦SëÈä3#¬	Ôúägùéh€Ïnà[à«ZP»au6mÚÐª®9¾®±Ü$#ðµ˜©:H	<¡v5AÚ¹çwPi¢nñßXúM$‰Ü¸OÖ¾d¢E>iÏšÉÑFßA_Vt¿mN«á·qgèLÎ›žZX³´ö'ÔPC5t{I&5•9^âÅ!ZóõB6šß{jÞegã%Ï[Ö†íÜk* ÙØ~5Ä³qF£œ¢5³k*äÒ¾ß'5Õœ­&V»ð×¿üåûgwÖÀš‰ÑXt²ÐŽAÙ,;A`*¤	ÖpØÄcaÝSicÛw Å„h­;·åä«Y)o$¼²²†Õ‘ýHÓÕªU±þÙ–.UA*¢¬±*»[7²ÐÀ0ëªõt]l…i‚6Ž^îE{<¯^Cœ#µÅb¢'j÷3ÌXCEÚÆŠWãn4M+Wdz÷h(Mhbaî™®UÃãåÒt¾P s³ ÝÑtÆÌ´Äô4L6ý^ÌF#_s1U=c(B7®¢’T€5:Ò†Lvƒ~9n3}mC¹¹QX/æCª•ÌÉpcŠw<ÝÑ6œâ‘;Rø…b ¥½{qÑðÕš0Èƒí?ˆ½ÆýÞ£G8º÷gÎÌ2å-ž+ ‰ÿ2WÊ§ËÊŸñAM2iþ…ÜF#—*âL5‹jARÖ>ºøzF™£hÈn÷Awãö^3Û‹^Ê¿3Øô@kÿíbÿþV£akÖ`C#úwj;›£Æú½ikN­n³rÒ
”AšÅÑºÚ¤5Tƒj©¬5Ç'_l<³¯ú~š“kP»ª¾µ_€MwÞÓ:ž4a•ÐÅ³Ç‚Ú5â —›Õ<`SÍ£Žå¼~Ì¶ž{\ù©ÿ²Çí 5+³ÿ\•B^§¯v§– ·zk(8iM¬V·g-h¬-¯R“=9ì-n,fÿLPlÈNSÙÜ/±Õ,ývL#òq­‡è~lµ–Î¦–á«!¾¡ÎžNèï·°ÈÏ¹= ØÀÔ¦êGDê0‰ÀšJ»m#.ùI=¶›NÎÚíŒt…NÖN³°rùe×d¥Ñ·¦ÕZj¼éeøóÐ‰äbHMwœ$È†jèö&ôí’Å1N›þxZcgN»€f†ÈX8Çõ²·`Ü#0›Ýyi3ÖSóbûÛŒ½FPsÕØ Yx9Hd%¾Š ØÃŽÔª¹È÷Ï¾ÿË÷^zîÔq(ÇŠÐ~MM³ÖšµÓ¶ö”×æÁ[Z3õÝ4»ñiøÌÄøCŠÐ¾Œçøˆ»"«ý<8^‡æäüácÂ.8ÈÐº^iòÉèVƒÕV½£8,6ªÙ‘8ÂG˜¦ÏÊT×p×V¯I	ZdŠZ¢«W³×Øá©—XˆS)GL0m¤D¦¦Æg&
qèª<>Uê*Nz?5UœË§
„¤æ¤|2Ö5	Æ²xsÅ<Âz” Æf•	‡UD¾8kC©b>©v5L¹t4:4”ÏâÈ…cÙhª(¥2Ù8Õ‹@[ß0­åBqr6Ö8pÖÄjT>ÂiIyã wø? ÑØGfœ8SJÆ­“y¦' 3õ¬-ÃÚ„©‚Ü_‰j] Z­©VÇSó8Íæ8êW†%À]l8xûÏT›Ÿ7OÍç¶ÌsŽÖxßÂ¸&YZ«VõÅWØkÿo„¿Û˜ZHu|p¹tm"ú½YkÖ3ãFk ¢épáýAZ“‚éýÁIku"Fœ±¦Ãš– ¯qèüb3›#7#9v»nÑ³ÖÚºysó éŸ{ZZi-Ú!s¬ÆZG+«©ÜÑç4N‘š]ÚygYþþSB2ç qÕá¶z¹÷üOÞÜïåÖÀºÐ×àšu¡MkrÖ|Hòò ë…AZc­¾š8må,eªƒ”Ã%Xëif26‚‹À!‹i^€¿yîýÙÑÒÚÉ¨´ÖN*!?†LeS‹Åaåû 	GFö<’=aFìDlôüÅKÏ«n`©’îþ¾5UN
#G>XûÊ±ž™C6£«k–m²üMÝ#m${>ÁÁf¾ëfÅ{mA6ÔPC·•Ô.^òºÓXžÄ`5›÷(±ƒÒ´Q`…¦RÞôâiÜJ´Ÿq-¤¡¶6pH¹jQn;úDm)#pÀÒšUï
R«E5ËjïÿX{ÿ¥ob[ÕÀ—’OÖS6Ú›‡€ R‘$o…lTÿ=PÀˆ¸09#qY˜UAêDµ¬öwŽÕb—©œŠWÿìÔüñvã«I|¾q"*xä)Ë¶‡ÿÆkX‹%“¥^mz±ÝÌ¤)Ä±¤ž5^à]/P•R¸ã\%—ìž-ñáÙ¹
°F."\•£1_‰&º’£ÓÓí¥ÜØøp´ÏçRåñ™Hwnjl¢X«ÌåÊ•‰™áb¥PÑ€Q 0–W~¬%Ë3Æ"6XD3
B¡Ì4@ŒŸ3f­Eû¢ƒw­ÍÆøvV…†¶G51¼Ï&âƒ{}Ã9/7ùæ›‡É±±yÁjÆNûèàÁƒÖ2ûµïýäèÑ/OOŸ8zô9™q0tVN(‡t°f4AÇ¿®W-ˆj˜ju<µyi9“ß·Ë$6Èî!ëÅÅ*°FfÈ+'«z¯Ê™£úAú/œ?ÏíÂæ›¤§râ 4Kl‚Á«Šqù–×NÓ~ï…Aj ‘`mÏÎGk¦fÈàÙr·GÍ,ìà 5ŽúMk¼jP-`­µ¬µ`¤XMÖšJ»|Õ¸M_|oíò×þãëÐÊM~*1GøK4qê;qRI_ð<3‡iõd(M2;š9i¾¾Ûì¾ñz£ìD7¹¼Qc:½5 Kpvã3dû>®±a¹YÃÖ‚ßØ¬µÀ¤µ ³†.wÖ\ÇZ0Òy‡N©iåÄ5¥ç5¢¾Ñ,F+Bâ#W±DäBüM2w¢µ–ÎÖ–fmk7ì­1cž¹NMÇæ;hî„ºøª¦ÖÒŒ‹„ËH<gc_T=$‘þö»ëGBKÏòûêíŽÎ‚ÆIZ6(Íå="·Ù-Ÿ	ˆ"É?i$A6ÔPC·Ô 3‘—@ÍÀš4e5=ôë å©±pÐ¸çÊÍ¸‰€lãmž"àl†wË¸.ž·¦µaÔÑ1¬mÚ±®…Ð± ª¹n5£ïŸ½@äñ5+$X3j†Ï„j!Nc¦	ÖäIllµeD}k@[<¡2È0»D¸;ð¶Iak¯ÏjÁÌ~ ÛW×½:öðºõ]4¤a áªmÙB§š´…N4Å@ò\V[ÓrÔDir×lÞÈv3{š@’Ìf“]½É4™ùÑé^4+o`›e¡a­LéãÑúñ¹¹‰ñ©bº0G5cùéñt2WÖlnƒ¦8*³s9‚D ±
äÆ.®YØ]¥LŠxýj‹™ÍpÇ8ìÙ8U’Ã©ÁhßÐÚµk#É®®ÕÀÚ|¶!5²Qg™Ž§û:†ÌLÓU¤ô:
«½}ðí·Åkû9Ðc{ÿÓÑ£ï$“Gö>°÷W3•ßLë;ÃT#ÌÅëÝØq·<W-qMT[	j.LÄ‡4.Øk€Ù¼èŸ_8}àtV[XZ˜¯ž~ö…¥…ó'ö-Í¿[]ZªÚÿHui±z¾º¸tÞb5#˜›çAµzòE'Ü³"›‡k¿¬¹È'„lGÔ#Hãï\Öà4V	V3ñýu*!kFØÔf÷#FÌ°Ö‚…RÀYóü‚`íßÖêô§"DÜýÕ)M‹ëdÚÔÜÄhá~*Ævði%åõïü©¯ï^M~²ˆç­ùòZÖÐŽæ• æT»w°u3<µ “îj^Áqx:ƒŸýxß™7íÓœ´†êþqÎk òóò8ÈM×68c­^Àˆ=¤&ßLƒ“|Ñ1ÖÊ`Môƒú•ß¡ÂG;ùƒ½ÍFùsðD§Š&á-HK‰7$¾­Í€žÙ+d¤³EÎ_T_Nã°ñ/@£ÐFã#5?r‘˜Ç;úGž$û[ LE òm7u~õ3-âÊ ÝÎÀb
ï7ˆæËtªqï·°éS¾tïÖ‡ÝPCÝ.R#£“‡FA£mRãŠÄoZ/êî"Ü¦{(`=Ÿ!ðLÀfCùg¬­f`­Ì:\¡ÖÑÆ{Ñ4–:l`Ü Te´„Ðsû!µ½šC5g«ýU—N]¨ªÒ)b¦©…å¥ÙÖ´ˆ`MãÔlq¦dGâÌWŠ(RÉ“!hMyþ&q„]<ÅÅf¼ÄÃ9d1¡>«Y@ÐÈ­ycÁ@	ÕW_zõØáSÕãkº¡2ª™¬Fž´¶¥k‹‚ôkêIÛÂ…{Bù§’ñMÏ–©6ýƒY	oM¼Æ2]Œ„ÉH&+VC©…ÍÇL]|æ™¹+¸–Â1“®7ŽMl,Oä&Òñ©§ŸK§ÚÆ§
3S…‰±§Ç§&ÆÆMŸáTeJ8TÀf+Ø°þTr´·½—ÒCÃQHB¡µ«˜Àìë(§Z5JÆóáUáˆèÚÀZz¥²°[z(Ã¶¡Ìñ¿¥tAZXãÄT{[+&›I„ä<z‚L”g&€½‘oÝ>Nyâ9T‹;Tû5¨æHÍC5jRM°£ñÎæÏŸ4[cž-,îê›\\\:½‘-,|°ðÊÂ,ñlò·ÊM›_zöW]\˜HÝæ›V•ývjiÁÀÚ+b@ùp5ýk?û-}B5Ãj>¯í4ÅMý^ÏZ¿3ÚzTOdaM¡Ýú Ëë·;ÎzÎšSgÍÆ¬µÀ`l×³Æ¨´›/–‚jŽÌ®Õ'5g¯ø[‡¸›:·*–aÄÎlØ9rñâŽV?¶¿¾µæ?Ñxù!AVûçþŸ;7×'¥ZjâøäŒæ[gÚx,pëTûÄø¬}üñ¾É•¨uó­5éŠ#Á¦5ÿå'B:Zã%¹2HñZ½à~{:>Óÿk}zÓPì&•A
}óoj•MKŒ¿ƒüH¸H,ÅsÄc\·¦Í› ½¦&x¯eóu›kˆálM|oP[“-R¤rLÉQ«íˆ™‰èXc¯íØA½ Ï‰Ù3@]ÀÖNYˆÙ7yÎÚ7ÎjøfÁnçÃ®§¨lÅàkí¸…â´£³Í†õÛ·ÙCk"È†jè¶xjšmM‰á‘±ú¬&‘Öï=ñÏ gì±Þ‰ÐÚà30M[P­£¬{Ì4Š£Xkik}}Ñ”a«œ%¤’BÒ±½Àš#µZTCï]¨¾ð^ýæ'2ú1„"ÙBœ‚µ°ÿŽéc›½‰Y“‡'L#jÄ*– ÒÄj°™
 ãÈ­Í½2«ùÆÚü©Só/~îØ±ìø;ë	xµ€¯.²ïÆ¸£ÍKa±°f€lzz‹É„\Ó­è@æ€µdl´4½m÷l¾”¤(1<É1ÂzW¯Zµz”àü©2Õ¬Q†¸N+Œå’¸eË3Q†GOOEÓ<=653œ§MÌŒ#Q›¸zlª+ÐÏ×áÜ•ØFc"ž¼Ö®]Å×awÅÂ±P”jÕP&	¯Í@»¡U±&X.ÃÎÈÌÜ?
ñ•¹ÿ[Çß<aê ñEA²8„iÐÚÛB"M]ûÞc{O!Í$¿«£à¡Y™n5XMÖ¦š¡è²«–w®Z=T«%5P¹¶3ÿf~¸:ykí|õüùmqò×¿þàƒ]…}xjÕ¥¡¡ŽpÖúRxlK”_ BrñÀŸnßµ4rq’O¼8¿ðÂéªíoc­:tž-³\ëïÛk¯^ÄZó}5õ0I#&TÄLJB2ØtÚ6ÕqYXÐÅZjP­&b¤)ßßäpÍjC¬´Öôò¬µ ³faæ†iÁ9Zœ×Æ4ä€Ö¡šÍì×ÒÌ¯SÿNRò°!žØyñâDAú²¸Æ}ÝiØ^b¿Ä•%5-Ü\c(¹ÏA×èÿ·©óÜ€–¹Ü4gÍ¿¸¯qc´æm>1³‰ÔÌµV×Q)øm Õ6­¹€ã«ÕwÖ8.kUƒÎl	$ÍIl…“€1óöGt­ùC±9t*Í_všŒy®<§qófbFèu’
y}¢rC“Ü™‰äÌ5›8ÈÖ–&²'™z­>9híâ%ZÕà4ý£µ&r„PHÖ²)•œ¤|õÓÝq{¢EþØç4-Wÿ$ž™5Í 5Â[kl$ÂNcoÅGã°j¨¡Û–ýxÉ¤ˆØNµK~é#{dŸê¢ZGvæ^kOs˜²GÞðaMëðpÛšqÕà3[îH½#×h´lK3¹‹´~d‹ ³+ŒæÁZ$~VóQ­¦Ò¢Úû¯¿þÂW_p®š~¨j)ÃÀZÈÎY“Y†üÌ~M²YYl6\Ø°‘Ýz‰…*‚„ó	 M.[¿ÍeÅ¾-V3”à!‚ A¬FZÿ;/VßÙ".£?m=ÿI®»¥‰Óà0X­Ýk]ã¡ÞcÏu~Àuw	åJù¼X-3 G¡$,µjMW÷èÜ\¥R4³â²j\Ûˆ=¦hÈ
ÖZÐ)ð½æ³ÃcQfKo¤Æ11±ñ^¥ ºÍŒ±ŽMmœfSxÏOÀpQ¼Ä_{it4_LÂc²"×†ñðÂŒªb06ÃØ(ˆìƒÌBáîd*•KßÏÏ ‘Ù¨«…cpbúÐñÿ±÷9ÁÚ£G=‰ÐÞ~™']k¯}ï±#GÎ)uåùÎhå2t¶l«q ‚ 9î£Ú–«¡š«~ôR}ZSb¿|/¶/.PåXÅE[XB‡ìšÉÆf†Ñ]û––:Úv}È{¶g²zg8¿T]<tÿöí÷í[\˜ÜÎ§«U™p¾[W=½ˆ½fïlàÈ¼äÛk?ÿÙïe°ÈZ3©ýÀšB®Íx5µ¢H6¾_7²Õ\x?²7Žµ:Îš}­TÐY«Á5ßY«µÖ$ßZàÚ‰Õ|“ÐgPwá@î¦¾£¹Ÿ,%i²ÕO"GoRïÎžs&ùyòÌ<T[	kºs²c°½dvZ9Y,«ý´çÒÕ{ÖÌ€µúÑþWÌ4?6 ^7ÕYC+ðcè¦•DBêOÆæAº„NÝoäè§ž³†šƒ±›ü³S+b[ÍŒ- ¬§Sÿî±é!M­ý#žTÉ¢üýAÂÖ|„•¸ý&%þ›ôý¦×é­échó&ærcéaç	ÖöF	¦¼3™w„Ú^âßž.Ò°¦H\{^Ík&BÉ äÖVIÖÈÀ·¼]Íf×þ8°¦
H™±@b5É<Ó‚Ì9`kA6ÔPC·Õ µ¯‰¿ø‹†UføÌ’›Ý‚fæ©ÂmP¿Ü3¦¬YXƒÏ¸ódn¢ÀTöM²ÐÖgæ©E‡Ó\…jÀZFVÏ[ÃC:v¢÷Ø£RTC$‹\¸ðÞéÉEìØk…‹ Ö²ÖxKÉ–Ô"|H8&é)ÕŽ<ÍBP^úØÂPÆ&Ž¨NÍk’HÍàYHX‰ÕwŽ½tüjëEdÝBn{øa5§Ù=´³Ô¶pc	Î€°fÞ7÷¥RïhbnŽ"È5|È<íÊ3ÅšÚÇiÕ*4©¬_€¿f§'(gŸš›~fn#ÆuŠéHSÉ816‘,LUæÈ€,ˆÎÆErâ3•?¦ÇdŠò8^Ú(£ÆµD±’ŸÍ'"ùYªó‰d¾4EÉÿòÈ `­;–(L”Û:RÐ[,™ˆ$†2Z~4¶Ê?âÍÑùV(9þ“½'ìDì£oVóÊ ÿÇïÀjÀÆÚƒ¯½ö¹ýÛ^>säÌœ´Ñ$ÔpÕ
ØjÚQÍY‘("Ùl}41”ª«UšÏNÑ‡vòüÒm»&÷í›ÜÇè¸]ûö}0SNë7cêÀä3mÿûÐ¡gwmOs7¹+yö…gÿïŸnß¾}æ×µQµûìÒéÉÉ¥}ûªqêO¾ëeGò„\hâ!‘hméœ‚®‘*†TOd{NDkœ{¹U›ã´úƒ×ÌR/Ò÷ÖŒœ»æ©nÄÚdTk­Ù¿
!9¾ Iþw®4Óìœ(ÇëŠºÇ-n¿ÙÞÙƒŸÅMÊwèg°šº{Îjêô1¬æ¬5-VþFOÀ´eXcLùnç7ª—©Óß®,gtTTÛô	÷#øwÓ5ÿædÐÊ2–^7…ÔXj0µ®®2iMˆ^ë¬q¹žµze¼ê
dS	¤A·&åŒ ÖæNëº+—h„èE$3M]lñS—«@IêgGÛšà®§…¾3ÁÚõk³þDhi%º¿Sá&¼X€4[ÉPµ'.>±s<ƒÖFvà¬ñlÏówØLJzqM"Š‰¯¼™°ö¥¯\wü#§6`˜o±]Ö¾Ì)#Å$DªüQÒ#äõ§é3öÔ^]nwüQC5ÔÐ­mT3^Ù%Áš®¶=›‹\ØK°•:*ñÑëJÃd3ÞuwïÌÇŒömæ‡F¨Eû`5‰šG*ÓFüÅ˜Ugš®' ÍE‹@m¡Þ½<vT{êÍ:¯ÿò½×ß{ïõ³§&w‰ûÂBµRC$M¶Æ2³Z'cM&žá¯nnýúL"Ë™à%LjBƒ£9aµX$ÖµYÉÕ¹2«A	n—æ`_LV[·eÛ6UkÖh
‚Ô=,rëå¤OcˆÇõÝ8pì’ÉÞNY‰yÚ£¥Rw—E¸é%‘í$ö+jŸ`þÒl1o¢DpÓ*Ó»g5kb›ICrÐÙ”°Œ H`ÙÂGNÝ‘ßavOx^A¤0o‚_šBe¶—	×`X<°Ñ7W
c©|,)L‘à
£X¿-‘/ñHZËPI	ý¦rÅßÄ¾y[lhM2=ko#u­±Ò·¦¡kûÏyçJ!ggsjU›[Ñ­V¨-@ö^Õ‚j.è‘œGžœÇM=?{ú[kœ^XÜ7üÐ¾}-Mî*ðÛ¦PFél*NfèpÛ}_ÿúöûú¶oÏ„BñJœ@Ì¾û¶oçà7ø#÷¶¥#Ì,Ø5<óáùW!^—’…ª»6ï—Cêëqæÿ^$uq42kößÄY ™>åk=>›!ç«¹årPs´V/²Y/)Ð´VßZCÎ;
rÌç<J„5Ð„ge7×,’œ¦ƒ{½6ñSHä†M[a5ýœ—rîPÍZi\ƒÍjú„Ü3vÀ™$VCZkßm¹§ñºÌYó‘óŒ‚EŽ’õ/û>UgÍQáÇ£5®ŸœÔX8®oÖšó`¨ùŽª¬5k+5–€³fqíò	k¾Téþ}‡‹RÈ­[í?äÈ±òŠ éUÓF	²Jòç±p	¢3þV‹`­U‘–ÕZô½\ó ’Dõ“‰Ý²*ÊVb\÷<!#Íì6ÕC*g„)lœ|‹&5ikSßÜ·<Z„ÜèÌb˜nÌ£«}¢ƒÆ£qõÌ„DÜif¶/ÐVM~¥QÙPCÝ2R“©6N¿7ç>ãª—ï«ùËÓ²Ö,•=išÒ$°gÜj¡‚À´¶á6k°‘,ÒMÑ–†Òlv)PM¤Š@jétfý4-
ÐODzÔö>úã7½Õ^ý½:Öƒ²4ØzYÀšºÖ"až+1_¡ü¼ 4 y´ÆÛÌæab´Agb5rHn&gÄÅ@^½R.
áíDA¬mé%M¤WhžýL+³ÕÄj¼Ìð4CmJå§jRê2³ØðÒF“]í¥ÙR÷êîX®@öc¯ZÜà7J“Ì³ÆtÂTKîÞ=ž`q
"ç¦‹Ed/OqµÂ4³7öM»5Àæ?ï|E£å±±	æ­‘-çòq†¬%âÅã±3¡ÈªUñ‰‰á¡µ«VEdG†Ãù®^\@(mpð~´J‚$3û-Ñš×°&H§i=øÆƒ‘ýØÑÇ~3÷Ú¶_'
ÅDÎD÷» þ‰\Ñ#µ\ÜM·¢šKqSîVÀFÚé}K‹¼½°xomñ…oEîºÿ¡ÉCDŠðpqáÃ‡†‡ÓÙÜ0ÿÌÐ" 4’éèèÍø}º}ß‹ñÌý}÷mêhë@¤]ê÷ÌððC‹ç÷ÑÜ&V[Zš…Ózyœ’¾Ï_ûí9\k|ìˆXÍ¤¹±x´†”Ämolò[ý Hw ®Á2È`äJ^s!#’Ã5+—1âMÆf	 úüòš+ztCÔ¼gîÐëêœ¦C‹OjœzêùkM-÷lR»–±"b5l5¶¿õ‡§ù˜æšÖ|z“¼N5'î,«1	ûÆœ5‡OÌƒ7Ž¥ÜçØ|ŠÎZàóþ¾!ds×›„O‡j>­Õ·Öœ³æxM¤ÿÔëY«ë¬5qXc¾V«ˆDÆ¨ÚÉÔ3!™Óo¦¬ù¹ýf>6¨†¸(FŸÛ~Õ@6{Ã±¯Ë_kÒl7Ü<þináÏ!D$Á!L†ìB5½Á3øÇ`ƒ×à7yo{ú›(Ü”å×ÚB#Ý¿ùÒÍªý¹îv5ðLòaÍ¢›ÿHg\Ó,ldzÕ|XÓ©gìÍôžZÜ@»FdC5t‹3EÒÿ¤gž™65nvó¤žðBãb2Ë†…©Ap†ÕxD}£hM’±&‰ÕxœŽú°Æ*)C0ÍE©"ž¼V55«P©3]aÕ@¾©vµ ªIÎc­?¬ZÂ3œa²ÜdS¢>¸ÌS8žÜ"Ø>é„}ÈG¨Ÿ$¹ŸšI«DB„a5Œ¦Ž5VTŸÕ³°Oš”ÀS»Á`6‡¿Û¸i˜
ÆdCz°[ØríîV®ˆ¦b¯^½ºËŒÑŽu3 m·¡ò#ÈæxD§ÛìF0jvwiB|5Fôþ„èjÌÀX±d,5ÀtuÒ3Õ¼'>×é‡ùº¬•u?VÊ¤(”œ¨‹ùD6Ç¯b_†ÔþP"Wˆf˜µŠÈ¯ŒÅó±X"•‹‹ÄåŸæW`¸ŠO¥ò)0ÍKÁK{\¨&b;Èdì7^~ùÌþ—‹sï$´Ê‘g6«¨|Örµ¨¦\‘ú¨¶"TÄÈŸ§¦ÉiK»öxè!l´C‹DóïK‘ÿy×}mÑí}“K§ÉÙÅ?²‘ÌÊj`Dj¸ãÞ?¿XÓ‚,­÷jÜÒÁÆ`þe!šÑãlzø¡ÉÓu|¸tä›ÜW­Z:o¾ªkÜxÀ6¿pÎ:k4ª)^Dkœ#6v[‹úA|V³ñ"Ê	›³Õ\$d0¾?tÖ­­ÌƒäðYÍ(Ø´f1Í!ÎçÉKãâŠí¢Ã_Üqí	jœ’?ŒŽ«Ý²Ó¦¹åž!²:÷P «Iç„iœ,Èâbëä†«Y<“tñ5rÍŸô ³æîýwíq%ÿèÖ;kÈQäWD~RwM?º^9èä0ß(à¬ã ³œŠÝl^ÖYŸdcF°Óz:ýáØÜõËt7`fpŒPÄjµ\E­ sÏI‰$Ì·µÙB^»s…±j&®XCM=â=íTáåääp²î0EÝç.qo|cöòÛöìimé±jÕ÷¬ÝúéjŽÂlQ¤ã4UH~Ùìì3ãÂ™HøKWäw©Õ´§™ìGßXcá¾Áj5ÔÐ­•_³ÃÒ<${Òºk,@šóG«©W÷õhÆúj÷â áªqÊDo‚µ¾Ëj¢5IÚûß1úš>5â'T	ÅJƒH|ÏÈÎÊH$é›©g!	³+õØ‘È;&YäÍ7=TûïÕ`µ^ÿ§÷–v¥¥”b=‰×L*?§)j¶;\Y1ÖDp0”	ù—Ãå%,¬Å)‚ŒQ 	©¡DX×¸cµ+ÎW³™ýjTÂZ;~¸ýnV»{7é]½Ëìîönl]»Çj^°ˆ5¨ÀGñÔÖÅUPÇµ‹.±ÈšÞp´\¨Ll,µ'r³ííÌI›˜ýÑ3EÒA(r,˜êEk‹)ˆ_‘WPãÞtøÒV°&V»‘ö5ž\_f˜ÝX¹OöØ‡©tiŒS#¸3³6¥²±ÍqøL9»n¼+c~=rüŠï;Š¯väÄGf$öÿöƒß~Ã†A~çñÇÿññƒo›=rðåbñL~#ÆÚ¯f-ª•½.5N)ˆjY¿ R¨æHMÒ…µ…*)ûûºï¾‡–‘2Ù1Ó‘M~}»ñÇìŠ<»c­P Ž†W(gîÒ0¾LŸ~woËN34›Mì–üw÷gÕ——63&”ezßŸ·§ž}vò…}»èc;½ þ8¡¢NHñ¤MA¿ÞÄ÷c¬	ÖôïÐ&²¿ÇRš^ÈXÕˆâœ4äÊ 9ë šï¬±Ôt¬9^óÔRkÁØÖ[ã°†Q}kM/{ù¬æ<ºÂ5·†‰ ]k/ë“š»n®1Ò|jãÐŽ…ŸÁ–þ­níÜiÖø;­Œ5hÃ—è¬fëŸ|D°æŸÎ\ë7ßà5TßÌâÚ[æ¨ûºqg­ânÜYcý·Þ'oÖ|}Âh‘ ­™WýBH‡j>°¹¦µ:¸VÏYköy-hªIº0[ÓÊñÁ{¬I"zàd´Ö<7–Ô8xÛeã°DÇÃ}ïØDlÈuhÆXç&ÿá5C\ý¬ÚõÓ'§!kÀ™Xmˆ†Ãv‰­¬Q¹C6œùfRä¿þ7…Õ>Ît5ùi‚5Wíè]õüËfÐ€µ%ý±"k6³_²vÈÉ¥ÓÖž¼×Hío¨¡†nîª©AM:Çñ$}×½Æ§±ÌÂïGAªSëM`æ…ôã¬j`Ú½÷Î°RûØÑÖ:<Ñ¿ÖÖ63Ö7<Uûû+ã¯Mý¦É_M¤í(e[ûÈÊ…šEòDýâä™ã‡Ÿ¢YíÇoþÎåŠx¨öO^}V{ýU—(òaÍEÈ.ÖÂ^ÙcD#ž³q%N&xÐ½fkŒ²	Ö&½ßkTÓ¯ÃjÐÂJVóAA9îÕçÖu¯ßœhÛî±iPÛùqÓ(…DP»ÝÂ²mœ<ÎNwÁuÈ™¦[m¶tMÏ&‹òOñÔŠ1ù‹³»Ÿ)
lÆe‰9Lð%âòï8®¤±À­»¯1ÚfmŠ%)GË|d¢ÀÜ…Ìàà<9(&’Êž™H„„hhhpíÚ,¿¼òÖ¢öRyì1c¬=øàkèûßùÏßþöÿgïüc£¼ï<{•î´ÛÓ©ªºZk°q±ÌÜØ¦®GfäÁš³ÖÄƒ!fí3 ¡CÚF‚êÜ€ðó„ÍAHdr:.±M®lnXöSÅéP(JVáÊ‚À*ÚTm—­ÄuÔ¿îõþ~ŸÇ_Ï—ÙØ½kç=Ïó}¾Ï3c0-E~õýù¼?}ôÆºÃ‡Ç†ß>}èÕŠ º¨x4°Æte?
Ø¼Ájž«æ£š	-Eê¿rI±"÷úJâ;W~ºy`ówš"ÍWóã¢L&"ŸÀ\C;ñxV'2‘HŽªÇTZëËãµÑi™NÅciïò¹t>‚bÂ´D*§VËtg2KUu&:Ó§Z÷n>1cÆì)Îd†Ù7¡5öèâOÏôökŒÃ¦ÛÃ¦BÒã±ÖÎZÕ8ŒÚgÍ³v‘[(Khnq¸æEŒ¸2H½‹)Ò¶æ¬5Äòx ¤ƒ÷zf°õÙg\;Hó¾i¬öv¾D¯?)¼„MjZôŸÒ*-S„~l>óXSïï£¿¾7[)0s9#Á°†‚<Hs~ïÛ-ó£Zq3«¸3Æí“;kŸAÅ~gÿN;é?¯>ŸJÈ¢È6OÀˆÃµ€Ð}gm–Ô–p¢:óòi­ g-Üh5©ýk$BÖkÊš&qÏSà‰¥ÝÅ÷Ûyk‘j[ô/Šñè­uÔ¯XVO¿â÷—ÌÛ±¦o½ŽB–-¯_‹•'ÉVko©o7¿Ã1†«éß®^*º­T©TH^gècÛFr¿ñóÌ÷øyÁÚ—(|bÁV®*ÒÂš¼¥Ç€›ˆ‰¿ôBÖx„ø` }9À‹³WJí/©¤’¾HÕ?©
	ÙŒor1Žð¦!jìXtÊƒÛ·š—ŽÚØb¥­Vm$ŽZJ&›FùávtV¼q£)‘¼z]Ê&Þºzõ­·Þz}hg6À õ•âÂ¡ÜF€Éˆf(ò@Nœ<ÿ¯ÿZ›SiHÝÌ¸õáµ+Un¾.g5'ª©Žì’UO e@Æ¾u_±Áh|.–sU’å|¦µÅù¨4S	ª}*«ý¥A…—0¥È›|ádñŠìÙV(kŒ6«&²mUó®u+á6õ©™¾5.6²Ÿd‘#G©…lÞÊ•áØ¼3><~d‚pÆV~…ñ!ÚÒv½Éô´®-­„’
ÃA¬AVàŸùm™¥¸xƒs­™Õ)ømX™à¶ïå&À­XK¤lüc‡-¦T"=ã‹Ëâ™t"	ewã¬>dÊ ¿û´vðàGû÷¿ðÂé?ÂÃo¼qøàØôØé=?¬Ëº·ã®ÑˆÇ‚k¶YÍOë/Ú«æ
 -¤Éádù`ê~6yþñwˆ¡rs6›è‘ly#ãz’U‘´œµL¾aug*IdÕñj‘l&`x\>ÍŸ(m,áHUUU*Û™lx1_Je· j \g²ï¥ª;pÿÒ¥;÷gø4‡mJE˜à5ôàaï1[+¤«¨æ53ÿº~Nx¿­‚äDaØ÷nÈ¯
òSÂûXm…}9VãDA!¤á@ÖCâ,œÏÕwð¦¹9ÜâQ°·O}šsÏ­\&¿–>š¹«½™gêµV—Õn_VÚ¸‹¼I™!kÉÏS»šì‡»ÀZXÉjÑÌÜ‰Îì%|ÆÇ 5äb¯nÞN8gaÎš»]¸³ÆòÔ”6³æsO1*[¼õÙ‚ûY0ÛášßµVÜYsiÅã Y}¹ÿ•R¾ˆ‚LF9]´a¸ÙÙ&ûÑMÆFv²gù"ÁS`­eÅ·hCÓ€}¾vÙ<â[¶D‰$uk(ÀÔ¿'¹øEío‘IúL#²ŸÈc\ûûMp?NŸIƒ¤ ˜¹á«ÿò›®FJH°³mj!¤	ËüDÁšã6k˜ãµ0YDÖšý]¾Ô¾Q*‚,©¤’¾T–™$Ç BDHF¡£<´}NƒÎ*‚´ˆì´Qý#h¦Ô¬Äj¼1JÊHÃäÈè$°ŸM6½|ã,`Xíê`ObD¬¦Æ5F9§4‡©)¬5sW&R‹s-kÍfbÝ»ÏŸ<wîÜÏ¯vïç÷BVCwvßüÅ¯ÞÑè4uÅ0ut¥n4žM(Á›z–Aâ7C†øo¤Ž„ÆZ«¹®›6V³°VœÕl¤kX»yX›9ûÞS°Zù*xjeÅ¢ÊÊ¶Æ•¶[6kŽ2aÍÅæÔÃdzÊKe‘4¥kxlzcÇ1Ntí€Ý&Htœ>2LLcÏä@7AüÃ#a$ˆ3Ô|P³ˆækD/»ñ%¿Í³Ø´Ú½N¾ßÎÄlÉìlÊÖòélYLÄ-&²,Þ•Ê74dR¹ÿuúí#b5AÒ¢¦NµÃ›ïÖ^øOÇ¿ðð‘ïybdh¢qÕ…A†Ú²%@5?WäOCVssÕœ«6;Sí"£®gÐ½‰ôÞ×®]9¬¥›vž˜ì¡&7K§0Ÿö´ÎHj@y¢YÆ¨]U}U‘|*’ÏçyƒÏäÒùT6Ù™Nª]-VUµ4Ÿïì[½º‹-Û£T•ªªÎ$—Êí	_¹$SïÔÎÏà³*tÄèïŽ1R»ÇÝÀYÐ‚*Hv–ÎÚ;L)Óœ´jº†Ä¦Ã,®’Ã#6×Bo-„5ßZsmk_÷ûÖT==­ùD6'·Áí¼ß¥ø†…ÕË}ðàÌ½ž>§¹Ó—ƒ4.í1D6ûr–WÉ–AVÛÐ«™k¬¹ž5Kg!ž¹7h:Åj›Q¹à‰	ÏÀYû¼´ gÍé‰xí3ÒÚÂ5ÄâXÞ«~¤‹îwÖòŒ5–Ú°
Ò#¶ú5¼ÌU6ºRô¹‘³¦{ËOÂ#I[ûI˜2HxÎÉ¾NÏø—`	ßÕ§kuüó¡8RF¬W§Ô~ÀÐÎ
èUæ£ZÖd¤é¯6‘b5êÖþ‹Fe&ßgÂPT«ù•ñ™õe°k~‰ºþGP®¸Ù‡Ú:[ÞÖqÕtë@LÐ¦$×8õ(@³PXk–ÖJ©ý%•TÒÑªfŠÙ±ÖÖZc¦óŠã] Í$óÛî4öûL»šêyhÈMZÍcN‰>µ/'’ƒ`ÚÁqštupðêÕ‘‘·Ðë¯¿^³%Õµ%SÝ£ERYAµe¡µæx´ãÄ‰ŠèÉŸß3¬6CúcÀjþjææ¯~rëk•å­Â®Ü€Í””ú7_­vMknÅ~‹kq=ÊÅxgñ,n6Yzädl\OÁaôÑÖ¸Á4«ŽÕ(Äó}5yñÂÅ®µ}üÞ¹¶wNVÚ5%B®ÉÀ0¡U<hÜJðc4Ú¸Kkvîš‘¡Ö¶jëØÑ£ÌìnÕv¶m=2=´£qœ ‘	†«)‹_”E$×YOmF›†oVÎPƒ¡\U¤vÎ=iMœ@‰46gjq,“ÈÐH“_w®¬5†Å” „ã‡ÿñúÙ0^„H`mÚ´iÿýÉÑ‰ñcGº††?>t}ñ)ã;2	}_«mv^®ˆCµÌ	ëŸR«˜	bÔŽÈÇ;déß?•þÎæ®ØŸøÑÎŸ?•Ndðþ£“iv e¦»µÊ¬ŠDòú:–Šõ%a±´ÙV5M’WË&Ò±L¹L$ëëK“ÙÐ¹4ëJ00¿´*¯<Sè.Æ‡	ùß}ijæÎ©Ø©;>¸xçN k¿<cr®Ãÿ^	‰·f#Fœ¯Ön·6tÄ=Yù	#ÂµâmkEPmEñ®5½Ðã×
úÖ
6?K1|ù79ƒÂC2ÿ5ÿ/§øäè“‡‡jžÁæ4$¤æŒ5I;dó%Ë±gW‹º¶·Ÿ@f+’á2Ù·õ
-µÙô/I\íXíéó]žÞY{v*î¬>çVÇõ”Þše¼…Â
aÎÂ¿^x¿³ÖPqgiñ}5Kn"§0‚ÍµkLÏla-I‹ý&¥ßzi†Ö‚ìþþö:mB¢Ñg˜rxôkW`›Ë¿äS5X¢«­]¶„ˆ‘ÚåËZdi²[¿. vÌT<r(OÄ´¯IÚÞU½/OL9÷Z;D[îßW¾¨Ä~^ì€*PAeìtïˆÎ´ž!ÌµÑ@8ÚÒ$mù¸õy|‚­¤+_MsÛïüN)µ¿¤’Jú"ZÕxdZmczÌR3!òÔ`9Þ‚Ô8b ™¬éÝQ.7nŒ¾|ctK-a­§gÖ®ZX{}X›†‚r–Õ$ì5–ÖEeR¼Œsìên-çæ¿wX»wëCF«‰Õ~ò“[¿¢kíæµožÃÄR$ÖmjH^‚ÈÄ_Jî)bàoCf]æ‡rá]ˆ‹‰ì¢‚5Ž›ÔÆJÎ,pø¬/\
áEtmŠfµ6àììÇÂ´J¹k4­Á]–Õ˜­¬h\Ù¶
\0MðÖhFcklùôQ6ÜíPÊvS92>píœž€ÑBzzÙQ•‡i>¢Á@CN5vÕj2¤6}‰C6d/an$®Âq…ŽŒ&2Ô²ªûXcyÀ…l2]Ý´te§¨ˆ\uèÐik¬ÔJd ý[§ù¾ô-ŒzxçøðÎá]Á7ŠÃ6<¾³Æ«€ôrElªë7°fËg.ªñ•Ýwf®,N÷|'ƒÙ—Çý‹QË³Ælë48™Î©›1•OU§Ô¿¶>1Ê'›°…ñØª«e¹åˆ13]%‘=šÝÉ74¥óRR#è?ŸÇV&¬Æ¯—æ½WÎŸÚ?qWmŠ„“æ?õ½Ûl!$Ú&)_ÍB™^Ú‰Í«±—:tÛ^Ø²¶6¼ó‹ -©™ìþÂˆÏZó¼5$T+˜¶&ñûÖî¸++KÁé)üH1øÒRü5ïgŠã •,ÃEÒf^JãåL5½BJãÔb]xéc\ì3"Ïë;zñ:¾µæî£Gtöž™."³@zJï¸HÝÓl¿¶¬6—5Ÿ‰æqÖþ™å;kOo®=CgÍqšû{äçAzu._¤HËšE5ÖÑÜ•ÓÒ¬Æ­µzâEÚëÙÖcW)ZŸ6Ó¬ÖaCcX£½LˆÖÑ"‹ûv¥Íò«@xµuuË—àÊÕ„t¼Æp5~u¸nM=gÐ¶¦ÌvL3U=ÚÌ~KkXmlŒ³FU·ý5-Ò¤ýÛÁØí_ùÌ?­Ì"âRDðÄ„[z”Ùž4}"Œ	Ñ€[œµÒÅ)†Ÿ}X÷(èã¢·øJ}Jr¬fJJk%•TÒ’*‚EÆËðš1ÒÈ~Ô`5i< n:Ùb¦917íy{‘d©™”þÕ/ßx“Ý>£rÓF8uQý#§ô^ÎëÒk¯åº†‡wPõXf:ÔX›ÆÂE‚»r!ñE‹þÝ{?ÇX»|íÞ‡F·>üÉ‡?ypyæv——“™ÊE‹j ›¸M˜‹ÛÊ£1MÉŽ«wqÌäÀéÃ16ë+ÉŒËtefiX3¤«Aj;«È `(dµ)lµÊkï´UT´m]I$ VIßj4 fSF´ÓV™Tn¢mÍ«À¶æUÑU [L‡·6>q”Óã;n6ÞÈà´é‘AYN:v
Ó$®zÜGs„f:Àj6ZÑ¾´ÔX%x7ÐˆQA]¤“€ÜU]rîÈPSˆ¿–ÈkŠù æRfîUN°Æ·­­g¯¿sZ¬&XG¬I›ÞeNœFuO¼ÿþØÎé·ïÍäíó-ó­ÕLï˜k«ùÍj°ÚÄjSÒ›Â´«ÑžFØ¥½]]»¯œ(ÉRñT:‰Rñ„‰ÛO$™n”kÐœð;g<V…—ÆÙ·:9Ð”ˆUWóˆçÙ4KAýä[ödbUé¦dºsi¾ª*_­ñ¡HU*&ƒ1“ãƒ‘ ÷ÒKéH*wêÔ©w¦¦î\Á[SÝßòÍ6û3ŽE5n{7HµÀHãìàl·)¬A)¤ÓZ¯iMkñ€‡k!ª9o­ÐY[æ[k¢5Ö4pr•Rîðhâié‹ã©^>ª¹÷}Ïï¥±øs]Þ#ÒÊ½Žå7lXõâ ÿ¼ƒW
Ò¨ƒ|ô(0ÍB:sýæÖaœÄ*V[â7†}|Ÿ—³öÏ¦âÎš{‰›ž«9-ØZóPmî¤µbáý®
ùÆZ¡jÃ5tÖpÒWÕ@Ÿ5llA´J#e]‰ÏÔ¦£!\6Áš	iWÃŒÅ3~ý^õõKVðÉÚeÅ5›	['+^µÔ€Ýc«‰ÕhDÓ(f¼3IMCÅhœ&	ÒŽ€…ERÙ<Š"Åk¿ö{Ÿ±]cžv5XÌõ¥éŠÄd‚2dnqé9øÆF>šØKW¸Žc¸v3}kºð±À­coOÃ{ÿº4a­¤’Jzæ¨Fó»„~~·á¶QCk<¶·…¬Œ‚gì5¬–ìkM$G	€¥5Sëhç¤µÒÌÂÊ‚l°zý5`­;Ö=1!TK•9-rv)„môäŸß»¶wïµ™[Ô@
ÖnÍœßqí3Œ¸öw‰Ö”ÛÏ—šH–n\3²£¢9ö¬f~vLÝiFÑõQ•MÂgV]³;HÍc5W972žõ]gÍå•¸iŒXkša•E£L»æfybË!Ya·æ
2#…p‚5Ó¯Æã#w¼:1¾cbbb|üHcãDÍðúE`.Ä7Ó|/Í1ZÀgº¤n‡² Í’“j¤¢Ä†g¼¤0Þß<Ø— çsrdr a”¿‰,DÔÔC¦¿À€›Y¿Þxèôž={4¾©ýA!äí7&j¦³ïMÿäV311¼Å²ZÁh5Ùj~ä_ºf5MkjW3Yý÷wßy@VNžj¼uq‹ŒÜ}4ÏÙ&µ¦¾¤šÓ -±9ý|«Ž¥xÚ	€õ½˜Î2w'1S¦«þ5Ðn@	L—[ÚÙÇ/P%Eø$¬¥ 4JBµjzÚ:QU–÷Rñ÷ïŸŸ¸ô`íÒCâú5>6€5©ßµ«qÕXlËgfÂš ÍM^³k=W­.Ò¯‚dñZÖ8¼ÁØuþ`l7lÍÑšµàU„Ô¤¹hU˜
¢Û'ƒ,¹ty¢/E,¾	îVõè–°+Íœá¤ Ì­öÚi£ûe"``”‡Ž^‘9Eaº§®áH5nì%„¹oÓ­&{Í	Xû‹Þå…)(¬¿™*N‡5Ž§Ó“YkŽöýQkz…*6hÍŸ´fÏ[³¨¦ÿÉ†Äf"ƒNk°Éê±Ø‚ÿ{§}Ö`7U‡:\WÖ@7Þ×KY’&LÙËÍ÷Sç»j\õ½Ê~«k±Å+¬³&sßÅVA nŸhw·™òG°MMû¿ûèµÝü†Çw
5þÁ—žu	¤uÄòB–¬´5öânâØ#JõÌ¶¥	ÖhÜ‰Î%3]wœÖ$…¥†µ’J*é™¢Ú—'M„v43ûïêÀÌxlÖlªHkä†XZ#Žµv£Jëç¶§säÆdÏàhS@“ˆíœEµ‘«!¨Ipšôzu8ß1¡BP+‹Å´•Ÿûók*¾sòÞ/l¿ÚÍó¹Üù3'EbqAfÖ‚8þxŽb<:ÏŒëëÐPkŒ‚Ir Íçb]1áÜz3eåPŒ¯*œæ³š˜!ðÕ\Ãš:Ön^8ÛøñÙ¶Ê6…öãµÙ¦µŠhs3ö™<33›)kXh¬xn«ø¬a¸¶r`-ºýÈÑ­cp¦äqœ€È‰-d‰Í¶’¹ùhº3¯BN+¤4£;w J:EŸN<»qÌ2Û§{l¡­Æ1˜˜¤w³orT5’ûÒ‰ÕP<A‹eqcVáW=}úÐw¿ûÝ=jY;HºH k½iÿÖáWNÔMóGýáÛÃ|ËÃZjk†.ÿi[Í9šè¢dŠµ<˜™z°{/ÉWþ8—K÷$rø\pSR°–Hñ\³‰¦D¶:B™£2,3;Òù”©ÇÍuÒ¬†e†	G®V&‡x©Êgä¦"UK¿­}#„5ˆLÜG>¤D9oŠçKibSÿ<˜úä“:Oïšhíïlšš™±¶-hZÂE¸pòS]ùÚ·<«qc÷<³eC†‡}=æ­kEhm…YŒÜ\lë¬q$B‘« ôk!½FµÇÝ³'ƒ4­nç#—oâ»Oûß—/É±p^sˆ’š.®K-¬wd£ÃÞÇ’z~4V§!?0o{øH>ð—óÕ\T?än‚¨þP¦Ys­Ãý™<kmAøóÿœ³æ¿$.óÉ¤ð?¤=aÏš—Xƒ¾å9kŸÒ´Vç[k¼/â»kÆ —¯6‹n2Òó!`cmW@o¿@MÞ;Âù²#Àï·¬1ÿšHý,šÐ&µ€h"[±‚Sð?þÚÚºåËÈ©5Cù1ðäª!  ´é!½Ç”nÊr·—l¶Øi”úÊhcË'ø$«qÜÿÌJ j¡¿j9	Êk³]fç÷Üq%…_ÕÂq×¬V®9ÍÁšö’£µÒ„µ’J*éêK ¬=¼+'¼FÖTìfIO±k`vbG2ÿ‹«•Ðÿ²!·Á«“WiFSŽˆ­z´^šV«‘·„i’šÕª½úê:0^svZÀjb&íœ¾ùÞ{å‹r{¯½wï8k÷.Ÿ,?qbïî¼y­5#É_‹ã‹ÙajìcÝìtQi‡yÂˆRGšØÌ˜lŽ·t£òÈ8À‚¯ÆGkÑõÆVë.Æj^¸9¼nNÜzî¤H­­²q±Õ4d­­²¹’sÝ®ÆJ;?ðþU»ŽïÚÅÔkñ›ñß*ÛÈ€Ü¸q|XŸ˜^ÆÛ6ÖŒÔlœ‰…¬Æ)yœæaš…´ ÑBàµj{”—ÖPæ}KmEˆÍñrÀÆ™HŒÚ¡Úƒ\å´5Áôt.æ©=•±ÕËQyè»{öà«<xððáM€ÚþMÒíñ¡é1Âú)íœž˜˜®ñ 3°Õ\°HA³Ú…dN(M¬¦Ëƒû'î_:OvþîlµFÁ R ´Ö” ±?=¢X*‘Î@b X]i‚µ|Ì¼‘Ö ³>dtÜiU2×riÁZJuž¹j`úÇ|••ˆ¬šgùl&KšäÒT.±oÄTW	ÅqûÉù;3—îÌ`ýýRùòÕ68XëïŸá¢)Øí¶&Sß‡´ñ¦žÔhs¨†ü@H›é•Aºžµâ´æBŠÖ$×¶¦’ƒ½_øË1™Geþì3÷)OÞ—px†‹ß§¶`Lãºj®øÑ"Z¸2Û™f_vkövÇAÇO=ÑåxdäÉ‚xh“ ­¹ [é4g6ûvï^rù[à¬YLÓ:¯žÖÐÂF\Ç¦Ukž³¶Œ—×´Æ:Wž­Æ¢C‹¹´ØMð¸Þ Ì%Œ2ñŽýA´ÖŸ…µòàð´ôL&+°Æ#T¿£ï#„5.š¿†xXÛ²‚Ë²å-käÂQv¹™±,¶Î¶­™¨AÚC¥qCä©‰ïoç«ñ½’‚òÕÏR9¯©“ÍÆöJFYH]B7>Àjg`›Ì`7å¯‰ÉØ…50ÎîÃ®7¹r¥†µ’J*éY£š«¡»¦¹‚GølŸ"•("=»©Øz±áEºÔ(vìãACÓèGh„=êÊÁM¨·œ©YT;pà PR† 4ó2ŠÅôƒ¾vNqå<fº®Ý¼«Íœ;-ïÞ}eæÁ•^Ç@®)º_à%Ëa”a¢¨?­›N4ªß¢¬qC“QkE4ÞÕ¥+—èÖj+vñYXã)¤ãXMÔ hð‚ ÑÌÍÔAÎL;Ki£¢EÊ+Ú2hMþÙÊ•+›iG³™$·îøq¬6ÄC`ÒÈ#Ù¸}+eG^jÆ¶uÓÖEËZkHÌd1Í÷Ó¦uÍ4‹gˆßª¹¸ÚÚx[›E¶b±òMå–G.ÜŸµÑdšæ®=¤yì¦[íÐžÓÀÚA+`ÍêøÄÈôØIiH­Æýœ­æ‚Eü¸þB;.%?FSTyi÷ÀÞ+W.M]z%Ijžµ-ìÔ<kbP€qÒkÊWçùk#X«Všˆ]3Å@5ˆÌt²	Þ"‹å¸ÝvåÓ	`R‹€hrØ–Z(ãÃ‘\FƒÝSz'b!.ç·cN÷O)ÀÿÁ£mg‚`Hq
!Û•ÔÚí„l3b4ó˜whm`·…‘ÎYó½5ÉO„ôCF
`-óiÃÙI_ÿlrd4ßùèáŽbIEÒ&nýf4ýîµyHš}!{c!Í®ÁÅb­Û±òÃ9½E@8‰Ò™Ä¸Î5Gi œ.Y!¯ýZ´¶Ö›F^°ýÍSñhJÖç÷syò"ÈÁZ¡_ìâÖ{Öšc5£:ÏY¬µB\Ób_òÁÝ3—™¹gœj]³Ñ±\$¸ÌN\Ó¶ƒ4ÙºÜœÚƒ2kA^{}éü2óœ£ÆÂŠZÖ¬X¢o–ì~[nÖZé*øã_+ÈìLïì5•sCigiT¶² í/¢«±¬X²ö«Ï²RÔ4®iû8¬…ô¥ð~N¾À—žë-k8k¬oÙ´HûÈÆB‹îß–Š K*©¤g‹joZ?>5;
›÷V$ñKÀš¶0WZ³cÕ´T#=X¼*0“¯¹æ4ŸÓ µÀTYíèö²íÛ¬9•Í2q®V
…”{¶ˆ¯ÿêÜ½[3'ÏýêZ4Î£ûîÖŒ±Ë˜T‘œ¢%E‰È0Ë¡.ÆbÏ[U™·^ûhw{åCæLä\¥€ø.ÝÑVí0Ôº[£ñÕ\1žç«YX›¹ví½›.Ÿ»9s²²²ù9±Zyš¡5Î]ÇM${s„²èFò¥ÛJ$vÛÖ±	æ©u]×¶ÅršQÀjÜ1Ô§]v£„öÜsÿÞêú2OŸ{î9mb¶€Øº<b›t¿±ûfÂåM{	iÏurtTÍk×Oo<{è4°†LÃÚ&Ò»5#cÇ¬íž6-…c°ý
Èÿáúµ‹&’äGtãjŠüS±ÅDz\º¿¹3ÒÙ0Ùc¥“}}t“e™Ôbc³FnL“©´ÇjÂ@šHê·á(iÁÎrCêº«ŽT›m¾JÙÒdÚ9RøÛñ•ß°š¼::ßLºÁ’1Jæa8}ØÂmk¬¨‘ ˆ*ÒË|ÙÖúƒ‰ØvÛ*“¸ç	×ðq½;§±:PÓa_ÅIÍKïGshm¹7mmNçÚrÏÐr§‡KîZ0€Úí€y¸æHîíBÈsu~š÷¦ÿÎB8m9/s<>ò:€±9I"s-6Äjµ¤V¾šÌý4‹·fÙÊÇÔÌâzÙ¬f‘NWX~µúbt:k¿
mþjH˜K/‰ígƒœÇZ+¨ƒ4,ÿ¸³V1RW¤±8	Ê
^Z8P°Æ½Q‹)<5^¶Ç5€5$bë€¯xÂ};©‘½6V©{Ajž±8©W­–oXùýv¾›%5­"/9køiÐŽfò×±I#<­ñÐ—­A_ûÊÓÚj„mM—°ðQWYhìk<ò™…[jÈ¬ÐBÓ#Ëhz+”…µRdI%•ôlÄ¿|„õÃ`nšZÈj’Þ³ç>]W`M+Z²VkJŽâš,™™q"íœŠ@š³Ô,©0:zäè*²C¢­å…°V–³pæbF0ÍÈKÁµîÞ9uùCÁZ k¬å¬¯V®Ä‘ 17.ªÁjÝñx×,Ãá¸éB\¹~¶æ³b6ÕOâ´ñ Úz™lñõ, ÛFÏWóX-ÁXÃï‹Î½SQ)èi®¨¨$CDPØÊ]Ç1ÏVU®´ˆ¦§$˜ŠHd}50­|ëÑ¶èö¶u[·ŽliÛztÇN0I@„X9» ŸÓ\”0š´ÿöOjÛ„lŽØä6úÛ ¤K¬9ƒMâ/‰þÂ4tg¿sgæ`)’BHÁÚíwoo:þêÈÐ»ïë—šø!¿öë€›­æÙjVéÂ	ªÑF(¾†ªí>‰Ø÷÷æ«³éÍ¯lNPøØ™ÊjP7¶Z²g@9‹ó…À3m€„‘Xë-£f;«e¡4!Øbò ;Y¢±Ã…KåpÑì·°Æ§YxOÒWD–v¦T|›ªrÂj;uçâ¿¼»Áü¿a›šõjvÖZØ¹&™jG9kk¸ðÜ^3»ú¢ƒÖœ¼8ÈZ»pTs¸VÇ1+ƒjÎZó+!½˜¿CÌ/=´»¢&ZQ7,Üz’ÿ›ØWqÎ=ó¿~á“ÔDiZíÆÍQ±Ø[ÚiÎ‚tR@zà“öÊzPÇšo(¶E58gc6Ò®!«yì¹;wüfúkîžmp>I&ä‚¨­¨µ¶àˆç¬Iž³V|ÐšõÕL|¿³Õ´›½ØÐ [‹…5¥…€oªŠÔ êZhÍøjÖälaº±Ck–tôª¶]Å‘¼Áàº9­j±>‚³fBŒ,¬(4ÿÑ§r€þŽm`Rí£ÑCl5 °FÈÈ6ø(´_ùµ/=£H75ÍLUÓX5îXuòÄÀ–7ÊÚ>ÂJ³!$,ój Cdó©†²TYRI%=+[Í†õí/›búÖ«q°°JjUC«WCk«_4“Ôèú¼*ÇÏi²DÐNs¤6Ò‚ÊGg©Icc°ÚolÝª³mQsTX¶ÁjYÁZ6ÇÞ>Œãy@k`}k÷gÎgÖùü|Žç ZÆª«•ÔÍ¾³DØÊbc v…“@‰Ñ(tä«âŠ!ë@„nÎÖx0ZÍå@º@Bov.‚Ñs–‚Æ³••0ReEóÊÆÊrhÑ§F’?a"Í•2Ù8-²kld´™®5Ô6ífØ×‘£ë7ÖNoe`ô ùû„x…òIÍùi–ÓÚBJsˆòê^så M6[±Y‹­hMäËzInÕA6t6ìkÊW§ò™ë{þƒE5² Ë_C?{÷g?ª9JdÃoOp ÓïV+>;lV³!îìØ}çþ•Ý›ÓÕ±D‚Y”264tFR]Öh^Ë¡X$›¦œ±SJ2õºS!dÂ´8Rø¨jG¸ñ¸:¾˜òâSº¯â.—KqMe˜¨mÒüÓyÁZXø¨ÎÏóY~ÉlDe’A±d<²4;qyêƒ¿•«¶s"Û½Xs¶š®Aj‡	0éýÖbÓ»Ahÿœã±ôþ{z¼V‹X\ÛšßµÆ!\sÖš?ûñ˜oâ´ƒ&OŽ¿´zÕŠÅï%ÍÂ‡ÅØÐÏ§DqQšYØòçµ‡kK³/n½·;OÀÆZàv`9˜(È€×¬}Û­AôHhN<h)ÒŸç™¿5Î;ÄÊ²€Ùf™_|L«'‹†¾¼±ëÞ_£"i6{ƒÖ¬Âkà¥yþ2ã±kYh##’{µ¯Ñs‘Y?<%ûÝzk¤èª“!ýŸø¼Œ8¼¦r9i#Û¸¡—MxXßR×g™Œœ}ãÛ-¹A“(êûm3Á")Rcõö>|¿‘âßJõþà)YmAƒ°…[&¸_f8¹kV–ÑxL—Úï¬dÃìà5äP÷ËÍ%=+[ùoJ©ý%•TÒ³ÿðÉB‘±™YH/¶]Í¤?2FíyÛ±F5cÔ* ›0+F'“ƒðY_ÇÏiõE8íµi‹i:­I‚´­ï¢uï®CQyl1Û´–5ÅYHMG,“Ë$ µg|÷å[·®Pµˆâñ >’È@àŸ.‘,¸¶Ê8ãl5¥‰Ä9ÊEmaªH+n›X<Q®ˆaÙTŽÕ\hé¬±ÌœUîc´b•è_'XÄ ¥‡m%‘•Í–ÐêW÷jn­5þ! XW©ql=€G”×ß¸qhèèÄˆM.–]½âGjŽÓ,¦9J›…³Pê+x>‡Ù
ˆ-´Ø¼Ø?ØŸS¤¦îkSC²iÎZHÊ^ÿ?°ÚAh\ûÈk›~vûÝ‰W‡†6îº=¦_sdçÄø0!#®[?‹Ÿçâ 9€5|´‹äŠLq¹€±¶÷•W6ÃhÉDf€¿.i
ûÒ1tg•³ŸP¹ëâ”y«å9ªù«&
K¥‚Ùì™D:_§)”!U	­Ù`þÄj$F
Ö¨zÍ³ˆîP>kâEô,/ KQ™Æy»23õÛà1uXXÛ ¤ú¹m!%ØQk°šM±[8ù¸VÜY+°×<Z+°ÖÂˆ‘%žµféÄYk\Š‘˜ÏasaË§©â3ÏÜ;¾³æ·³ùî™{ò$¤æ™„.žŸm€¦V<-È{ôœ4OÄö/_^GüC»ÌêÄHÍ³íjsç¬±¸•‹Þ15)<¨õœÌ"¥¥¿±¼æ;kÙæWÈ_óDò¦ÖB}j†æ×‹§÷»ZÈ¹uÈk[ó›ÖŠ$÷Ð´q¼¦dH¸	Ú¿FOø´†ƒKˆ‡	$âh70fM69iºp·ºêœ <þ/>Ô²Dq-¡·Æ![­–¿»J5Q¤5Î qMsÖè„S«-¾FÝ¥÷›ikœljÖ{ÿ±cÌ(xa£`í)óE(\˜­fðÉÍ¼ÖjAÌñoj£OgØjá0LÞš‚"CXÃ–³¡"\]ó{›SÂQJí/©¤’ž¾üû¬qb¥iÏäë€Ò”Ò¯‹©w$HGm_Ã¾ç5±[_S_ßê†û8úF&ùéwô*rœæjž›§&Lsœ&	ÓÖ½{üø®uÇw?ÞÜØ•	Ö$\¯²ÙH‘íFqv¹X÷ý[NÄËid«ñØ¨fì»A_f´šI‰Z]L°Èé	ŸíŽS€É&ž#h„²GeøËNS·–Äv.«ùA!«IJ¹˜9×Ìl?Ê*ÃIk.ÎP#^E`„»‰Ì¸«µk&ÄÀ ·*Ý¸eXyý;vNÛÄþcaÙ–±â¤&P›ËiŽÒ|@#…Ó‰[½¬f™Í›ª"e±Àæ;l!¬éä0š˜¤Ïqt”í¾†ß?’~û4Ô,¬>x{ìï)‚¬á2vûöÄÕôÄØõ··Ì–@nos³Õ|[m
ÉX»tçÒ”"EÎŸ¿táÂÍó{7ïì!N¤/iJba°|dÂM}éô@<•”UX£‡ÔhVµd°ÅM>:‘€¨"Ãš."²Î<¿^R…$Nœ-lMKÕ’à_Ì[ïc)ï¤xƒýèÊýóDg½R4"t@M+/0MW¼µ0ÒÖA†¹"Á¸%‹j\t¸<HwðryÞ¨5g­ù£±—[^ó¬µ0bÃG5§<H+éñVñd}³÷Á®ýüÏ,LÎt~/îXíâÕtç&^s:LãêÉýˆ¾¢¾ÝD=à@œé½ûÈ"šxÌW‹h.RÆZ¡½ö½Z÷½ú(êÏÿípÖì-(q$à´yY-0âéÿûÖ<y!ªÕ´æTž~ëšaµZåAj¶»k-ÆVƒÙ|þŽ–ÖHïgE¶v‘éì¢”NdÁ‰ksTGª?eú^ù}øÀÚPí‚¶BûÏë5æYG}‡`íî¶~¥‹¢CŠÿ¶‡ÇàÃ~>¶sm_ü•§ú—Æj ™³ÆDRB«Ð53ù±Þ,¬éPZ?26›ÄŽO„Þœþ"N¢AJÂ¶RÃZI%•ô,¤f5þx7ôÕúÒ$u¦YN]ý_ž'F„ëêçyÌîÅ†¤Œµ¾¾†¾>RúGª9J+f¨½pšÃ4ŸÓ 5tÜiÿþÊèz/°?,‚Ìá“H™˜²ö3ø'q]7ÔºH+ÍBÂ4V>ÖËu©XÈV~ÈV(¤á6½º»­ë¶HÓû8jÝÀZ\P5jðšV@ZjöÃE ‡Â9_SS7©‚l«¨¬ 	Öm„þ;ÀŒ; Œe%à-Âh2Þ¤Ê(;Üµá¡‰Æõ5Â * 6‚X
I­ ÔÄiÓæ@ZHg‚Ž"
Þ.D6WY l]°9^–É\òe+ö§½ýýC¤AŠÔþúðáö¿ðÂŸ¼öÚ·¿:8X3öîÓCÆ¯_s%!«ŒÁv¬FéãÅ—/)c„üÇW._¼xù¼þÛNEä¢5%Ò)YhUùdšðÇl"É}ª:Æ,5kHBVICk<',„¯EUùÎdØ_ê!ü2]Ì‰Â¾Ñ‰ÒüâB±8,Éæ¿!ÛŒ.7~qZ5‹”¥Œ7†\Ïš>®±ÙŸ|òÉÿ¦I\h[ãnuJ­q	—ðÚnÃÉ¶64Õ
Ê!©I… V|2¶+ƒô3F–yÓÖÂ)ðŸ
ˆÍ/¯.Ñg¶B¤+FY>Œyg^²ÈÊÂfxr¸‡–×¬‹ˆ¸3l÷ò­Š›kŒ§êí¥ž‡Ûî‚`E“û…j(Ü¸–56«Ùï×.>£y•¢ÿ/è0cQgmÁ£×ÄbZ?cËšÿ'tCà¼Ikž³ÅöaÍnÔÚ\@+¸ÖlªH=bµ_@Ûš‰-×S!"aØÈÚzî%YkÚ{ûe´ñý;ÒB;/FªÍj9ýuõµú–k•Ù/X3Ò¿Š Î¨?HÛvF–Ú1Z2qÔ‡}÷oéù±ŽÊ%×Â”-ªŸüÚï=3[„
« -Q—’ù\ô ©3Miý<¥gS‹žJ!ðéIÀpÕœsg²!¿\jX+©¤’>w‘~‹&X»–;¸ö¦îLÒ#vššÓ‚4‘öÏ+ûQåcMÜâ«õubªˆ¹i~Ø£4ìcÚ˜£4ÓöCiFÇW.je6¶Gjœ2Ö20Uœx!Ù âÊª´l¸fæ\«úÏ0ßrŠ…lÕÀ5Eÿ	ñZm1$?Î³AÑõëË×ËXSN&žFe®ÉY“¿æX­íSYM¨†ÞkÃ"ÃÀ@0Û‘&[­ò1Ú€5n‘š×,Å5——3c-º¨XãˆFWµÙm;2=R³½|‹èÌAÐˆn=R³–šj!§Í…4ÇgÆ÷Îé‹'s¡Í'6Ø ¶bÀæ¾ÙÑDOà±ŒŽþÍéC×¿ÿñ‘wÞßsðöGÙ_uÿ‘×ÿþö#Cc†k¬­²mgì^W——Y¤Ò²Ú¨öSmjæÎb!¯ZŒ—VÁEkhH¦;“ì¡²<˜•O§Ítëj‚p‹óyXŽ„ÈŒúÎÙ”mK#rr€v´˜A4C|Æ*[¬.´¥UÉÕI†µ%2¨ŒÒºhæ÷!p$¯Þ4ÕTb§¥ÓiŸÖÐÒ—^z‰üÈÿËÞùÆÖy–i~
RW°#´š]4“FÍ¶VhS7!²\lg³N±<ñŸ:Q¼NNòœŠl[·Ð’Y°™üii)D-iè
FYBPXâTMQ"wÕÙ¡h5«º%g¦PAé‡ÎŒ@ûi×s¿Ï¹Ïûô­´¾œë¼çyŸ÷=çØI	V~¹îûº79¢tï©Z'Ý@V‰¬ÕXãiÂ:Hç5÷Öru¦æwÏïO!s Æš(qÖRHóëÜ;8þ@òÚ0ë€ ZÕØ±ú5í½ema'¥™®"¼S`mk†Q‰™§¦“³Z2[­æ©é2°ZÝØ·Diˆ?ÇÒìi¿å¯²,‘³¦M¼\L¹$ÿbh»Î±Ø(‘ý+†[k‰³fU®%¨–Új,Åº¦±P--j_#b)RùÁ^Û!,ëëè¦éÉ+Fõ5»¾ŽL²à‹/²VVZÖ5‹ÒÚø9À0n³ð8µ5‡mójÖcT?Ò“6q
ñ[&[˜±¦&6l6:ØFÆFÀA}Æ–­ä‹\w²¬vá">bMè†23\³…¢3§ kÁbÓíXßhó-È}¶øÂ£Ñ°ÖPCý~šÕ>
¥h>Ií~.üú)4A[ëçLô£ÍT«õôÞñÄ”ŒiöuþµÔ"¨]#¥}ã«÷ØX³1k	¬•aÝrÐFÅg¨R"RZÓR‚Èx(j$tž1[4ã#Cb5
!Ë)œ¿(“‰—-‡Ü$.ÔºÆ˜€î•ƒ;×(žŒ˜k “ HˆÆ
ò"8œ°örõ8¬†6·*­/cÕBä†à´mºmÐJ˜ÿƒØOÙ£my;¤†Ú—/_¿÷ÐäÎ®És33»ö„!Ø¹µ$PÄIÍA­ŽÓr”æxö?ôàp±ç^T‚l)°y[ìaCiæš±lÈ'N>qÿco>ÿÚ¹sxñ•¯¼ø?ÿ÷/¾ú—_½çÍÇ¹ÿæÔô·×~OÀÚ³{¦åÜåÚÕÜVË—†ù×g¯>÷óÏ\Å^»P}yöê#êEï½©š±<mÏelƒÆD_b5‰¬þ2QŽÊ	áõm¼­r·NÂtëŠÞÎuðáBÚ#É²Ç¶kdÛÉ»iCÃd…ñä¸}·0{·|LQXrÛ µŠ>Æ…ëÛ¿x‹¾ÊÓ€š&c+]„•FqBOJ‰XÆ"½!c4BG,2,Þ²¦ý;IM¨æ¸Þ_ßï£±-dÄTs•L†l	=$a!Åó©ýÆXF;yTã°&5ï7Ò£Ö™f'Ç4©ÜA‰¶÷S—ÆÿºÔ‘‘çáüÙcEÂ‚X¢™Æ"…«/´½[gQV¦ñš?~JÉ+~ó¸KGá![–Æc³­žqÍÓ×)„4¤C×™ÉQÐ¶&g-¡µw´æ(g5_|Ã‹äŒ°öX\lË:9dv!D³!};„ef°e}KÇ¬5^OÏ²VÖÆç›3šl£ƒm]GK3våÝAƒDFr
S±;Ö}?nb‚º^5N§À2Š9~G[…Ê!`³]á®Mj5,ÿþK?\íì4Ûpf­M¿•iÃ‘À+tËÝ¨³•:¢´FÐ«­nË~öýtKi°ZC5ô{¨€ËbÆ#gš¹»–½øôýv;‹¼c#½i›8oG½årúgfê’DþµÓŠ1íG…”vÏ7êDÓWµ-Åe‘{ªGµ…Ì*¼‚ /©»ÂÍ.öô¬)c¤sù°¨Lâµ¡
‚×ÿX6ZeˆHÿá®î!Îƒš¼¦›;;¡´ÁAx¤Ê…‹$Ó°c¼ˆT}át«˜`Ýi­â5ˆŒIØH³±µ½jfÛû`°×¸
)#«ºÚùfÜò›4„íàP÷ä93Õ´äYí]IÍ@Í9Í)Í	-
è	O[ìl/Ö3[½ÇVlÅ›ë	Ž“àækÿëýv¼öâ÷¿ö­¿A!ä=ÿç»ÿñ‡§vâ÷zà[¡kß×ôô4¿±J ³ÿÞÆj4«U/–?3WÞh^»z¦©aÛ6?˜„‘r?Äts¬FêHeEStÊ8¨”dìZ¹R¶àÆqFB ³€.äj* ”ø°(l»¾¨†±VÑGš¬ÈñåÕ›FêX†ÕÆG0ì¸§ïh°¨ÿ^ŽÕ”"`í{,6pSòv€5»Ì¢!¹Š!¡Ò§a;ª¥ŠƒÖ
ê ÓBHO„DZ¼ÒÛÖ<_$›=ié"‹_Åpy‹š1Z™¦‡.]58å~ÜùµI-NÖ² uýO7Á_e²Xé°f÷ynð™–ÈlÚˆÕÕXR90øö}sØâ‘Z$2)²Kòñ‚Ï÷[,éÎšNQ×ä®[k¥±Ø>§EþCe‡7?ú Â:È$2Ö@¦¾Zj¨å”C¢Ž¾ï_kµŠÖÂ­--ö‡¯G>Zh}…Ñz€5.ks¹îa¦ÚºÕiiý«	.¹íã¡™ŠHùn!²QÓ¸ulbL	##§Žlí»ò¯€gW&&®-’ûy†@ÿ	…ÛªS Éãß-}	¤Ãº¹•U	ÕPDµÇ 4k¼_mkæŸe—m]ÜÍÐ¶³šJÞgWp‘†jhé+ ?í4D¹ã£÷ëÒQÍHNã%{Õ›hT£íG´¶[w3Tm¿£Z±£æQ9L‹ˆæŒ–è+ßø
úÅ‹5X[V³Õ–#%@vqî’­ö8aÚWÀ³nŒ³,àqCMýi‚6(Ž-ÇSk L¶Ü>Ó¥<’! nˆsWçàÎ€pâ4µI“Id  4µÿlõgóÇ[¨	Ò6@m›Ú/ÿlÕJ<³õ˜i3¥‰,_Î«ët×zf_mj/ÒÞ)x›„YèSsXó65/tR“¥AÍý4·ÒrŒ&Þ	k ŽLìfKˆ­ØbEdž×ŒØ,å	Î”B>@¢åã~å•ç¿õWÿðßþó7þêÍÇö?öØÌÔä>xó»k¼°ÓÛÕŠJ «U±±X´~Åõ?òœÂþò½÷–JÛ¶Ë–÷µeÆ>Ù.ì3MY¨Àb+ÊÛÁ&«[Äùº{×ð0!!+úÇ™ÆÆ¦”iWÈŠTL·%Eê5±œµ»¡íã·l»¥ñßß¤è®øne1Z 4à°„”i7ÔêÆ†ÝÀoGÔ§/kM]kÆjÖÑ'‰›‘Y”‘Zí„trµ¹³–ŸŒ-\KÒûs^™Œ[³Ã|5Y\Žo`:óƒ‡ƒšqš=âÖY­[j¬\¹§¶§ñŒG3ÎG6ˆÿ™Ô×êžE§™Ø†‹/¬­ù˜zZÜ$ÎÚ’šhÉUê¡IÉÜ·kzðæ÷g²%i‘8² ¬…¥Hº[s×ÞµVè¬ÅQk‰³æÞš[RÉá*®€ôÇ:U)fîÆ¶e‡m4ˆY
dŸ*"Ç¥…N×1Ñdx½aR»zAØºÛV‡HV"û×­^½VÆš¼4ª!	šÔ  ƒ.–>yÅú`ßˆ‚û(r…ÁrÖ¨‡Ø&Njê[ã}*ÊÔçZþüú`íƒ‹W3'ÍQÍ¦`ã|Ù°’"¬…ajÚ›Ÿ¦\Á»€t¼ßÎ.®8ô6¹j¦F¸HC5´ä¢òû£jSã‰u¯	É ³©ÛÒZ 4ôè&"ûa´ÝÀÚ&‰¿o÷ö
ÔžñÌÇ úÌÇÃR§¹“vO‚g©~ñ`g†jLDË`)¶>3gMíê¢…MÖZ©B$¯dæá¶1+­$ZRŸÚp7/…‘îÑ!`­´2'8D‹T·4H ˆ`­SÕz‚lÃ±ÒÙÁÖ<ébö…¿?MWQ¤>
»ZWÝÊà4ì5¥ŒˆáÔ¦¯‡M¶T«Æ«Ú,Žr^èÐ¡õí“økûDjn¦6ªZjunZi5Õq6Jw¸J©Í=¶ðÓšH67ØÖ \D$°Æòè£ûŸP5çÔc½öÖküQyëÍ'ÿËºëÀÌ~œµ5Ó{ffÈëŸ>§ßYŒìOû=YX›g²:ÏIª(½záòÃ½Û·ÈÛ&0c€ÈTÞ5ñ§†›Ü+/ëî^Ñ4ÞÛÏ2n‘!•Ñ~nB`ÛÆ¦ái+J™·&óŒÜ‘€of£Xj‚5%“šÒF¾#¢´h»ñª,µ~V}1Iø>kˆÌ»ì¥M#;ä¬ÁiÒÐ&X‹lÆ)<ÌbCòÕ²DÈPó”ô¬ñpå‘-Œm¨æ°–Ä÷ÇBÈ”Ö ILã9#	B×Djó‡D´T^ç˜ùhvòmxda—FfI®È"¥Z| –d6ö†žc9X\?âdúgSÜˆ×ì$‰ÕL>SÀØ³ÈZóß¬£Xî.Ç5>×´¹nk­ÈYc]DBÚ®¿iÍ5Ÿ‰OƒÌe÷7óxg¤å‹xlñÃu­!C²ïPt?_ª­+HS‚g„¯F½c,¶–æ"õmP6Ëõ¶u¬VZ¿~4gãàTf©o N³Ø"A]èÓÈD_È…”‡¦¤~Ü4Ê 9Chô²°6¶cªSO`íƒ×e«]Ópµðh
P¥¡Ø±cÍCøunÖ²5 íFVq›•GÚŸ½SwÜ ÓÖ/×wãGá"5ÔÐRÛj5é©è®=ÊNÁv÷QéÎM–+Âªm8í¦rãÆÝ»ïØ}œ6Å9«M	Ó´˜£–‚ZÓ‚ÑL_úÊ—K”®¾òâ‹?îZÆ_3Ï¸d¬¦«®›*«Áb–© ÿQ6ÁWÃCSÌ£xLf)àvI!¡­D¿[È6*óÌzÒX$Í½†Ó* Þ`gW—æ«évlVã(œ°æì€5%X«ÎÿT[µrUû*}¾us+ñrØ6(`äÁ'ïÚ¼|3¨&i&6Ú°™K(®Sîïåm{›>6<´óØN€ÔqJÓÙHÅòG›$à¤@-Á´è er@›µÕdÀÖðtb‹mÒÀ–lE‘z2{ÿÉ“œö‡?4‡ßâÉöNîá÷õØïNëýÓ¬ç|¼ZQ»šû˜g«ge©×|µóoÏž¿ðh¶åÞ{·`§mkêåjOè¿Œ
Çe$‰ž¸¹·wœ%îÀKMàj9­ ùû±Þxùæq±ZSpÏDV¹þmÛ‰*i2k4>NÕ£]ßÏ•ù6ˆ7ƒi¼ÄÊ.V=Ê!#ú¨Þ¦½ô‰S;pÔøû¦š&hv­åôÇ8Èh±¡¬_ÍøŒ[ÚÕžÝŸZkþˆJòûhÍ
µ’Œw×¢wàÖšN,¥Fšƒ™~'úgÏŒ|ÂÖ-µ@¤NjvF¬‰ÓX¤ÜßÉQ[˜i®>c5n­iývÆg°«Eùo.!b?¥Áéãzå­f¶I,h×ì®!}õ÷ï¬Ùs-> »ðcñ;,€kIÒ¨çAæÍÆbKi¤(M‰GþÑf³Ï¬sKº"¡3Ý¶Ë`­ŠS[[‡RŠ¸âBmkzê_8`±žþì6Ó¯¦5Ëešeƒ°QË:NÔZv¬ñÙð#ŠnýNq¡ ’î[^95²éáK®åÃv]ÿ¾|†kµi×QP—žÉ”kšBÚF·¤Øã9MÆœ.Å|ÜŒb¯o×hXk¨¡†–ÚV#¯?†?=ÍX‹ Ç+›(t”³Ý‰Å†tM>Ã¦;öïßÞ{ÇÆ“3ï¤65õ¸ƒªšûiõ˜–1Z¦Ïæõ–/}ýïo½U©ý+Wk»Ê]š„Bœ£íi/EÂ4[éNÃ¬)UD´6T*q#´«Ñ°.L_TX$CÕŒÑtÒ(lu¹Á{`dÿAaÐ`ç ¡Ë¾ÉÎÎ¢$H‡‡Àjg/Ý>ÿ‚`-ÓªUíÚB CËPÖºªuï]O>	Ÿm <c>6£åhY“‡0×1zzÍÉÀ9kí_ó€QZÒ©æ¦šõ©9©åAÍ)M æ”ævÞÖpšŸû™Q›V©ÞdËÊ•DšÁVë`3^KG°ÍLŸÓÕãøjo=ûÝïjÀÚáçÖLOÍLAjçÎMï¡_mÈY­°]-‹Ý|ÍVÏ¾úê,CÖ.?²}cïÝÐÙÝ»š°µ /Ù^Y”ãŠe¥ò–»ËXgá)#7¯èoúX¶l…2)x}bƒÄô’¾@“\7¶ÀÚv&`³å%´‚2Ü^pÏœ3Aœ9p‚5c´~ko‹ÎšàM7µ‘nó€µû4XíÈ‘0&øgYd”Ê•ÌW“BÛ~˜’dÃÖìðQk¦”×RP+®ƒ¬§µ¤’‡{kî±™;å½`dNË”FU:[joZ»Í_áÕâÙ	5å´„Ô´«iµ”k{ì¨`¬!²¦%Ûe°–E?¦ñ’±Zsµç¬µü¼p7¹Þž‡÷¡9¯-n–…5-xCm“ÃB¤õ:ÓFü‚c1ÕÆ©¥Òýbkm!Ç17Ñ=Z·iÓZÆ£"kÅyå­µL~mÿ¿ok3²ã)Z\«`})”7
Övð
7mLZ÷UÉ(û^­¡5l¡o_a›oÛô³„ÙjR4È•ÑjÎõ?±ô£ËL5J El§t}„6J#Õ³¦Ÿj}ÔX¶iÊÚ’%‹¸¬IÍR µ#Ç1"«¶:ÇE/7MŠ°¦ûÖŒÕÄ€2ÏÚ¸âMÜugVk4¬5ÔPCKm«=°L£¯—õSîh¨Æ*X”ZÃ[“„kBµOÜ±{ÿþª=£GÐÌã”?Yj‰¡V‡iõˆöµwè¡‡¾öµÏ>ôüò·–*¥ÍŸÖnœ‰Ï`±]¶ÝÙušŠVÈ®ÁYâ¶öÙæeÃm²ÚÔ›¦F5kc+éö`À>î¹º`¸.«‰A¶ÎU”A‚¡cm^ä–&A¦FT=Ñzûæ@i«XV¶«¬±õö›WQò(o$ íÉ@k\«.20œ5¬µo†Ö€µCCûöß`ÛÃR\ÿh¦š{jn©Õ0áüEH‹6ÚüüÙóÔcÝ_ÒËsÇçàP}…¤{lÅÀ&ƒÍ
"S^«k^›~í0j3‡ß:üøcÞ:üìÙn	á€5D$Ñ")«9ªÍÏGV³òÇWÏŸevõW—Ï_¾wãÆ^DôcÿŠJ¹cAZÐ“ˆ‹Ùgò×8+fD¦úHzÑaWiÅŠà¨!|ƒ±$Þ†!}ŠšHH[ÍÔTQvÉ ü%ñ½RBÆjHWq/Rã×¤ÍÍ<‘¦µ}â–Ý2~$Ðš
!1ÖTéå>dMI2XcÇ™Kîµt¥÷ÛÉA…GaÈJi-—Éâ¸æmkØ¼o-)Í[â,Ž¸õk{rÄûÜûýucJ¿Nì4ölÜK³]érAKÍQÍyÍ²š[ÚøÏªâ4¬âcâl5Ñb„myÓŒÔmÐÉ1âZQãÚÂÎÚ{R$¿Ú—YÌ+K¿¶qù}/€L>ãpÈñ5iT³'*¦µù|€wsSgÍ’ÿ‰I›Ö
æb§ÉýÎkv8­©í´ÅXµYit[ŽÝ§yŒúÀV#ß`-¤¨H-ˆ%‹ö×p¶ŽÛšWß¶ºŸ+-„øßf ¸ða`|·•¶7~VÁcš´Ö3öÛßNŒ…yØW.¢‰kB5‚!©„ÜÑÓ&cíÏ?|íÿ¾¼¡ÝxkÁP‹­e57Í	-Âš Z»ñ†}'TsËÍ.l „°eõ”ú8XGk†µ†jh©m5 Ìþè¬á«©îÑ8MwXƒ‰¦e÷îÝ¡aMã¯w÷þíÝÛ¶ó÷lrE„jnª%¤–€ZÂi‘ÒœÑ¾ýµosD±ud{èÖ›ºžÿì‹>‹5`Ö®#€˜D*W’…ABeY:dÀ´ÒPÀ±®]CÃ%6Ý]Ædz•×LXCu°F«Ú ×ƒCjdvçªA@mß>öÐšÉX-—)(ŠT( Ðq©‰ÓD,+W¶¯‚Õn›a±VE@¶«eRÎ´nÀvSÛDiƒƒíf­Ü¹óàÎ"à@h:P>TÄM5÷Ôò fœf°U•õ'E.«ž¾t–v¯0¡lîÒœ<*iþÌÕÚÛ=ÙòU‘IId½Á–ã5·×öKS¯¼ùÊ[Sû§_9Æ`µo=«›÷Ûo’ç”Ãš±ZŒ=vS°fqý’•AÎž½|µúê…ç¶Ü½õ–W4^b© ø(€g4.q¼˜¨½‰˜,p„æ3#5ð%SƒZÉd÷ËÊ.)Xß.Â¡&êQ·HpM|Ânã¬éùÐÚ´Æ1±QiCm½iÚObdV\58¯I:9®9«9©¥mk†jÞšÕó™D™gà¬ãü¤ý{“•x°ÄSÂcŽk&¿•g¸ˆen§é*-ì3éÊ3úýáJ-5Ç4Ž°Ôø»³¢óä•ª2–?r8­±³­©æ¨e£Ö~°:Æ
ÚîEB8S–r*ºöŽ°ø1´ œ¥ËÓEO§ômÁ{LÅµ“ï5#rÑîµ,ö±¸2;ÞIkÅ%þ«Îÿ‹Âmž'êÖZLïÖZJj¶¸³–‹ì÷½óï®©(ÒŒ/‘/rôRÒHð×‚µf”c6¾Q´0NéhÒÂífýZÕ'ÁY«¾°l5ðnks3…”šà¯’G…‰å?¡HúÖ(¬ñÃŒCNžÔñgX"[Mx–‹¹A„å‚¸x±O'6¦Ë`—Õ7´¹%Ü4AÀJ§fƒnèOÿ¤¡†jhi»Õküƒ—ÁbÖXß8” 	¬1ùZÛ´‰CÆÑ
ÛfH&ŸÙŸ”?šŠHÍAÍ9Í)-²Ù_û¯9xú#ÈÞõã›~úügúq/¢dõ¨•˜³&kBGÄÙX­‚»&‰Á*CpÛJ1¼´
—„TJº’4õZ¥ŽòÖ¸Œw¼áî•Ã‚ }¤õw®ÚÉºSì¦diÒÖŠ‹ 3’©^²ÚGŽ[oßÐÊis+ä2DhZSÅã]lÉyäR°¶¡s¥ÒE8&÷\p²ýàæ½CÚ3¼oàÅb µãXÕÜSK
‘U7Viþt5„rT/ÍŸ&ƒvª—Øs~5L–¾z¦Êž·¨Œ7˜‡…×ŠÍ6o`ƒ×†Ü^š~óŸÿ†j¾>ü£'Ÿ%2ˆHaöAÆQØ©‹é3ÉÂ‰3Ó°¿|´úò…£{¶l'›¿i…m€½€
kR5ä€hMêgË‰lúãÝo7õš»LS²…vºd[¦Å3_‡JG‡5¾¯Ð…L£Û8³(skÍÆeG†ýXûA7}jÂhM¤ÆÁ¿HïÁØ;,\ÄØŒ¿PÀgŠt©©s-–>&™a—¨­ˆ×ŠCFrÖZÄµÔZóZAã5§ ÷U¾˜úb~ò­c›_8æÙ=Pˆ¦§‹ØEþ1DËV÷ØpÔjdÆÆåÍjú›8ÿQÃœ¼M<Æ²U€wž!î°j«W›kF&gûåúx»BT3¥Ø“Um§TÑH+¨fÌoLugwÊgœýM|Ÿ#>\«ÅæÎš_q±€±f©…±õL•Ž	påh-mZK2F2gÍÂûƒœÖÂÓpÍQ­øa‹Õ?Yü»ëÌ5‘Uør-®€²±Ö:¸Ã°–ÅÌÂh=á• nág5à$N]ÈYûÛÖòFlb•jw¬æëŒ!éq‚ØrÔN1›•¨ÄÏ4BÂpüŠp–©‚\[ÍaÍ£ûoðÔFN± Q*wT´H,…D7òÖôéDâ2ç<.Äqmp‘†jhig«Y~ˆ¬5m¨€”ž6X³°þMì8QùÔS›¶ï–Á¶ýó»¹þâ·Ÿ”'1ó·ÏÌ@jQ‘šƒZÂi¤™¾‰Xí²ÛFl˜kŸ»éÄ×ŸßY¦uÍÔU­UÊ•0eMñŽê2ë2Xë¦+MÛp·zÐÌ2Óåò®ÑJÖHåï"ž?ÞA*ªça¨uW†©xTl§õ«!NÒä ¬–/‚tcÍÊ_8}úÄJ¸¶~}`6ñÉýÔ;Òž¦f5¢üÉ†\û†Ð¶¶¼S½l{[7ï™ž<8yð E—ÇHìÍL^ý˜¢šy| ‘L5÷Ôœh2P‹~Zu¾Ø¦zfîeAõ¯êÌÅ…‹5cËxT¯
ÝÎÎU…DAdyDm~~!‡í¼fåÑ^ãxì•¯ý{çt9}àÙ©Èj‚µi‹
¬#û0Ž!Þàe~Ù²ÕfÉê¿¯rµzéè(ÒVÀQMˆ2ÇqzF5›AkˆkxJe‰ˆ›¼Xã4¦5ª¼k€T{OX{ñÏ¶ð“Ó£é°‚`â 8°Íaû‘ÈÆûm«ODf‹RÍ°Æª&Vþv6IdÆSy"#@\,†DºYDk¬öL+!MÅ	#E]kÐF.Ò0ÅäM]©Õ×:µÙ)½p¸ÊYgñÂy«Ðk3»lžï˜KNäQŸøùÒƒ;2Bó<¤¥Ôj‰míˆÒß¿uhÛ¦Ž Ù·ãJlXóžµzXC¶p‡%æ@FS‡£Ëˆž©s
\1;PŠ@ö¹ôÝ¹¯éJpË×ÔiK_Žr‚+Á—ÚlïÉY3] d1«™K·h dÑ¤5žQî¬Ek­ i-	ÉÄ–òÜ¦„Ñ@ìÐL-lÆok›‘2Á·ÌYƒÉ@.qÙØH_GôÜ¸&}€:ÚaÇHÁ^»ºÅŒµkm«™ØÓ‚×7v¤¶Ù–G&ŽP¸«qdIôª0[½jö#lb„^|ª —ª[íÆÇhûlBµ§ˆ@^†l¦ì®™À´nd±‚ÉÌa-‘Ã°4ÂEj¨¡%ìW‹Z´ÖÂF¤&VÖb¶H„5h7ÍLµÝ»	ê‡ÖžØ?³P+D5'µXü˜µ§eæzãûßäñ†vœ~áÚ/¿óÐó'Ž>ÿ‡G+Ën*Y)d…ÔuáØ&^ëbkeÔ-³ü
Õ’´Ÿi/‘%ÔUÌYÆÄwÜ\i‚ë°ÚðÙ:WQI$®Z§ª•,RÏjùÔ~øÁ'~™­6?wZ¶E”ˆÇæU­D‡Üº9ŒY“±ö$Ô¦tþ½¡S­}9Ùìà¸É}Ã|³C{­™ZsWºÀ-æ­±¤jUKM5÷Ô¼,Ðš¯
m.^ž‹ÍÎUá³Ùà¤…šHæ“¹|–Âœ8Ýœâd¸ÍñAhMma—.Î[MäYî#Qß(û°ðZkkb¯Ùoèµ¿ùçSœ×œ›žžò!ß¼`[œÕô{Â*¬^|nŽºÍK—/?|ß—¿Üß~æ3?¿¹LŒHWwîÖ 4`«¿¤Ç°ÇZCËtÃH+8k+Èí/È«±á$C²B 'X×—³šèOÛvR”—X&Xç…:Â@mÌ;»æj÷@XƒØüÃÈµ±8¶ÖšMúÆB;›5°¡ž kNil"»k(7jÍp-iæYOkQé¸µš·fåyHçHGN\EÝd~J!Î?æ7½æÏ?íFY$1XÏœÒ’Lv5C-GôÔ¢Âjç4ŸßÓDìéˆ7ÊùSî9‹þz«¬€‚1Ã4äÖš®ìTƒ5í=²Í~Æj>5A¿äzÎMùÈ¯Þ-²1"Z\Pò¾„¡\9ËÌÏ…€æ÷]IìˆSZ1áÕJ1íXXî¬Ùã/´×œÎÂ¢‹½¦Sªbg-Ÿ¹âÊŒÝt.¶[k¦æ¢¹Ø#¶¼“Ö4?1Ä6*®qmüX[€5&¯©
‘ê k}!(´±a‘…Ò\-zCh®Tˆ¿œ9â$ûÚ0Â×äk¬µt@\â:à›˜ØÊóÊÄÐ,xkÀZ˜‡=6F d¨85Ñ×£ñÙêŸSäRÌÁv^Ó*rò¸~ïV«É¶fè†p'$BòtÓƒUÇç¨élÊUP
êÄv†µ†jh)K ŸÎ ³`­FnOça[Fht©mÖ”-¢@‘'6n§WM¤ž3‰©VDjjÎiŽiß—~øýFiî‰ÚØ¾ýË_~û;Ç¿óµÓC•2p¦ÂGœ´]!ö±¬Þ5]ËIC%ÂD4;Ò™.Øƒkºæu|3ˆMXÔuÚ]‹ì_ÅS‰"ÃÜeb¨ÉTc¼Z®æ5æ«Ý^#/4¢[íÒONóU‚©ÖºÙ!C›qüdAž!U@Êc#²ue;ÜÆ+°\»f»­ßû¬fÏ!ÍIc›bW-RcœýjœÔÎ£Pð8‡5;w"ÓõìY9kawùøï¬^¾z·­:¹Yõ‘8o._º$°{¶»zfNÜ&;Í5ÐÏwãµÔ^“fÖ|ïMrE¦0Ö875ËyT%bµöwa5›<`^ºX=_}øêùWçŸ8:ºí‘Gú» -¢ó'+Mk!(DÁ!*K”{&Ãz‹•¼^fve`Û s°ë›Ö¶ôèzë¸®…~¢1ö©ú¬	º²¹Ù	®a¶khë×e0÷ä´qŠ½lWŽ ð—S!eDÿ,ÆT‰zZ1n*fòü~QœBFryà¿¨µf Vl­¥Ã±½oÍeuy¬ÿ1ï÷¸åªÃµôžƒ[íÃ>¨:þ63±Û¶Ø-»Éá—Z"/Zsš+2^øõ×jÑ»uª¹£ÆÆÎií#Öfqã…YZøŸhL­úÉP¦Ås #¬›ÕÂ µ•~Ðæ‚V˜iv 3ªŽT)mÓš1Z¼Ì½¯`@ú5NãXPéË….-~NGÞ›³†lJv±¼kÍ.M1+òz'­!V·Ö¬¸6™‹­5ƒLP­0¼ß®zg`£q­¥…O°£K}½KzìÓ‰#´¬±áž—~ÊØxk`
:“g¯I 
•$ShkQ\‰©Cï"í?ØÆú§)Ñ˜kxk¿»ÒEì§ØÑ›Òmõ-”Ò« ù;Ëµ°šâDÀ)Ð*ºbœ= ßÈÌeœR |±C1ü‘«Ì™‹€†ôtÊÁo“³F¸H£²¡†ZÂÈ§²8ÉcúŸæ!±Õåf¬‘'‚±Ö»*Htrÿ3Ï€kû{ŸYØTóêÇ{PK8-PZM/Åû×ÛáÖÚ‰ÎÓß9Q)æ˜ÄîµT	É³‚AúÕØð†Ò(êÂ[ãž"«Õ
!»ihØ	ã4]ÍÔ`SWEc°9ƒkáýƒÙ¤A,6ÓdIùÁñhö'ÇOŸþÔJê…hb´[å¬)¸_t&LÓs=W­{¹¸k­Ær°Ú†Öîá×Ûó v‹×?žÌ%@&¨ö_ÕÜR3žáó7Ô¯6‡ªçíZõ
Qœ»xI· 5\·óDtè‚ÙeoW«o_¸zñâ‰ö3L0C³s—/ð¢4{IÞäsÙ0Ø¤ºŠÈ^KìµsÏæ<}ì»‡[óì9¯òŒ1Ö@RÎ9ñÒYê7¯VÏÎhŸØ6ÚM~g¥©kmpP¯5i¼i
ÐÔÏf›R˜¬mÖúÖøðÀ¸ípá>¦Ï*ÌŸKv©TVM6 Œ¦c;­éŽ©	wiÕeœ³&d{*ôè«ãC†]ù¡r"L2
5*gªÁšU?rÝÄkIÐ—Èó “¦µ§5¶”ÖÜZóqk>ÛåÉ‰™W•K†DÚ;Œyš¾íÒ’È¹yÝ¢'ƒ8­EÇÌM³xÓYO‹w¥¹2SÊÍÀúT‘ˆj:ŠÇ^ÇÈ„ÓŒÕ´évtè/ÎŠÚÓÜ¼±SÐÐ\¬Y$òsG„âJid)/%6®q,ÀF‹GìÝ6ù›\ÁûïOnª9»å–ºÜÈë®†äá9#×’4b;Ý)RFŒ,vÖb…­ÿ!ò¦µ¨t,¶Ž¯9ªùS+‹ÕA† öú#'û,$îc®­í³é×ˆÚGyîlôcË+xøc°²i!ªŠ×{¼m­Å?Æä~[ñäÔJÛÑÃO§ cœù*Ôx‚lZOq_mÇÄŽò¯"€ÿðá%›ƒm8Å¢++ˆäì°òûÝX‹å’6Æj1’E°–LÁ¦3M'¿˜sƒÕj¨¡%,ühà1„­f°ÆbþÈ^bù4'UAJwl4Vƒž™99#3-ªÈTKIÍA-á´Èh/½þÒK§G¦—Lo¼^×^8ñÍ_ÿÔM]Ï%V¤l#°šÈL°GËŠ~ÜUÒ`561â¹Ñ¶6¬ÈnòûÍY+WTæ8¨;ÝCÖŒÌ:Õô¦ H™j–·ÒYºÖ&‘…‹8?ä‹ BÌ_zát(|D·®ß ”i·a¥©þ1ŒTc!qdƒ…AZA$8×¾~ïú½t­íÛ{QØCS{†wMe¬>;RŒgœÀ1iñ#8ÃjÕŒ¡«kþbuþ’Á¸ÅR=?;wuÎª!ñÍŽ¿0ñèå`À¹zõèÃ¿úòÏ~ôÄ'/R)sîòeÞ9;+KŽUDWË©ÖÏ.àµ:{Ÿ2ã5j=§£æñÙÉaJ!u§fîKX-Ò¨±šŠ u\º8Ç(l8ôÒñõ;wŽìÚS-3A#©»–AUøjVø(cÍ4ŽSq•Ædã¬)éßaw™øp†hºƒ‡–ŠWá2ƒ5‡2½µ‰³+NZ¨ß'c-jœA²ÀZ¨†<bžÚˆ¥ ˆÉT|Äv„[B7Sös±Óÿâ¶5—GŒ[ki%¤p-m[ãˆm^°’ }5ä;Þémn:åArÞšÎvËïäÌµìÅèj8…“¯‰‚Â'ÐKqWÍQÍAm5Ò8aõQŠÖ²c$ÌÞ¬ÉMCœs²ØšCôƒ‡bÇâ:ÞŒa—˜k:®yŠµ»C¾µ]‘±f»¥“@êð}”ñ{­ –ÞY¼wÍ6`šÅò2ËT¶ög=þ¿!íY3g-zkéXlwÖ<¹ÿÆZÜÆ›Šðo³tˆ¨TªÈ™aÙx»c²vÃ\45ªk–5ËŸÊÀjòÉ¤>ûAC[šf_GGŸ!vÈÅ£ÿ²gmÏyý²¦ô~iFklŽLœ
°†ÅF‰%Þª/U<¹xäÿí5–@ÂWfƒåB}¹·Æ‰%Jx¤iÃÉwÍ¬ô‘Ø>#7–¬®Æ„7þiƒÕj¨¡%N¼Ÿ›HgYØˆ	B‹Õ>ýéM»)‚ÜÍ\µÝ°Ú3'!5@mS-%5YjVúè æœfPí7¿ù=íò_æßàEEþú“7½ðËå7™J»HáBe£\mÁY«”G+lHQ ¤žâµR€5R‡BÒHw°&;­"•hcãaöug„5nvW¸«­ê±uXSÄÈ NÎj.ò—é|fÄÖÔ²y9k­«Ðí¡ü±•lå‡„àGc¯Ú L‘•·s™uªµÖi–Û±ÎA2FžÝÙÝ½gjÍ>!h­Õ†b@¢£š›jNjq\š…òóªÞ†¬æ/+aÄ împëòÑË—ÏÈJ°vñ`û‰ãg–™;[½XÙuß½åÞw<wÇí¢r"g_~û²ÈH5‘–Á(^2.„ÖÀ¶0¯¹½¯	Øö:&d›±­A^æ[òœÕ±Z0ô	ÏaÎW/8ÔN*Ëðh¹t¨¿<PÊû¡¯Rh<Û´ˆjÖÇ&é=:À9Ü®²úëa-¡±ˆh"0ÍÕd†ZŽÍøPZ	©…›õ„¦]ä¶§OI¿´"FFl’=Æô·ne¬¶•U·7ê£ ‹Gc{¿š­ÒÚ‚DHÇµúqkž2RÜ·¦# ‘sPd67g²ˆfiˆNþš_¸¡V¸áHÆ½!v‰™æí^öþ°ãY3­´YhœšÏ.·Ô´Ø­Eö«‹¨%$ï‰²'¾I±qÅ®5=ÿ'ä¬æ´æïÄKª!Œ‡\ð!°N­5?/½"¨%¼ÈáÄxÝÎšÒ)þÖ¸Æ–Å.9R™Gg¼"ø¦#î¬¹b‹côÕ8ÒIk<jR>þ1‘GB¶µ×©I‰×h-ÐšêpÉñWE$÷$Ò£Wåù‚m„Y\é•9¶´ô…ñØÁ–Ag“Ùv|%l:ÞÙÆ§T 0ª·ÉÔ 5›²¬qsçÎr’(9.Vùk²Õ¬«Vû7aµZHŠŽ³kî©Y#bÑjæš½…sØ×›† ˜Çæ1OîC¡9Îh­.ÒPC-åp5Ñ˜BÖ¸`õH5®©üñN´}~;°Æ ì“ÏÌôRcIfª%¦šúÔœÔ"¨åëÓ~“éŸ$ÎZÄlsó¯¿þFUîÚ¯?õÓÎOÝTZf°V)	ÖP÷([l5h‡l”5H F¡#R$kE¯T;ê9¬³ÃÕ:IDäö×Œ5ø¬{Ž®µAnÀidƒP9	¨a«‰¡ôtV³†µ‚ yf½0?û³ã‚µ[[ÑfÞß
²µÞ%=¯á£­¥m^¥Uø&›XÛphç0¶YWç¾©©}‡€Îö Î	ªÅÑŒþ«0d¨§ATP¾šêñÂ²—ªó³Zö?òÈ#G¯^ Õ °3û:Û?ræÒ¥O.+¡ò½÷ÝwôÂùê¯FÏÌóúìì…<-óZƒÙä×±ã›ÐwÖç°%¼V`¯™¿FsšÅ‰¬™>8©­~“˜‡F¤…õ¦ú-6<.ÊS;sôêÕí  ýãe¬¬ññòÐ®àŠ‘åQÆ6sX$mCzU7Á{hW`µ2±ãNiÅeŽ’²C
y.Âš#wRXKœ¶¼È@Ó&ˆ¾V~–)<«Ñš¡WkÜÒ¿ Û˜¤è¬ÙÃ·©±ÆQì¬iñŒç5o[“ÜVªOðwì‰ˆd–Økf‡ñð“GGæšÔ¼ÂÑß¯kßÙRüµ\ÚûÉSï=@¤Ör—ÝB¬Å ö	§éÈ-5XkiVY1|c<ˆÕb›š‘š-\:¬¹³«m½¥¼&å&y¿«¥=k~Y÷H±ÎI-a¼Ÿþòøéë×µn¦yt¿6ÅÆÚâÎš)çîæzÖ¼²™GÒµ†XŠÂûQXüì¯i/;Lÿ< çl«ykÊ„TlH‡´›¾>nª]­XÔÖ¼uäéŽª…T­äÚæŽ1æ0Ífúz?_T¬Éá'P˜'21¿Fš,5-§ñ·Œ‘šny7o€è&äèµ¹ˆ­¶X£Ú±Òƒ@€5ˆM%.sV›xQ7ÛMÉýºfEz5~UÁ“Ýå+Ço(b»ñ#þ“†j¨¡¥*TÁ£ÁšjyÆ”~“ÍÅ–6á«Ý¹éóBµíäöoÄQÖŒÕrCÕÎETsS-’ÚgRsNsLpæÂTû§ß¼þ/¼òw¯_¬¾þÂÅ/¼þÒ¿IÑeQš«$èªfSšH—×”õ¨”›ÆX5^¢«­¤;”ÃIXgÁTc×Õ5LÁdÍX³ÔF&¬kÐ”†½Æyek"oXƒ“ŠŠ Ñìüñÿø¿ÏÏŽ/	«a©)`D5¸h3MWC4šØpÙÖ?H.$´¦"ÉÍ“;‡öì\Þ543Õ­QØS¦“Ö ›¤Ë]5G5 élD5å‡(y®
VUeŠ)ö1äñc±isuYS¹\¾ï¾‹³ä*^¸úð±NÜÅ¡ç>sô§Ëp—=÷ÜsŸ¹8wùá
9â£ªg«|ZÝ€%ÕCò•WÂ½ê¼w°%¼Vd¯EM‡c²u'{kÉ3VKëMÝÃœ¿ŠE¨ßËÛs—NŸydßÃƒ“ÃúhéærI¥dƒÑ ¬q‘2ÿk¼·—î¬…f6ˆm\gb“˜bú]ìÿ\ÑXÓ&ŠíuÀwþ1t­9aÍiY”[Ÿ´úëJÓ‹Ø›’2HqZŠk…³Ö<ÒGîø7›Í¥´>/{:ÅlFï7óÂE?9‘Ù=g²ºûqAÚ¹)>Œlq.ã¶ß”ûd|£Õ‹6uånZaLî‘Ã4=#«ñÈ©yfD[ó:Ì5|
ú€r°ö¬¹8H”Áš[ÿ‰S¹	èè“0ïÓj‡ƒYZoèØ– ßÊË`VÚ¾–ë±»nokNÑZ.2\, k	§yÏZ:#7h-uÖ’¹Ø¬yZó–µTžéæZIû;Dd —rú×©mµ­×zF‚å¦Æ3M^ƒÚ>~[Îûà™Auä@!Ò¢õY6	gÍm³&Ù­m=ÖZx•JÁ"9ÊG:B·ikcÓ'z\»pä¼Ñ*PÆgHwq½<ÿQ»"EÕ.sy‘!Ò#Fø™Â·Ð.ÝÿgïüBã:Ó4¿Ý³Ãî0Ì.lÙDqÂŠŒ=N,Ë¶GÕUÒÿ…T’#µäB‰iõê¢3HÝýgœ‹…,+!fgÈ¬éY·GËxØqã’7YkÅöbZdÕÓÐitcÎåþžï=Ÿ^/Ç’öe=uê;ß9U%¹å´ñÏÏû>/ßˆïÔ
‚l©¥–ž«ýIý"2Ñš@Íž?‘–mYùã»ï½ôú7ß=LÂ¾$XÐÕÒñ×)ªyù£“Z¨Qê1í“ìô©ÎŸ~þ›þ„,‹OóùfóÚ*^ÚÚç¿úÕg«0ÙÄ(¡
Èàª•&Çúú0ÑÔ»6‰@1C²Ô,°_qý:áœé€æà4^íÞ_æ¶î3õX«ÄÁÕÝŒ°©W©‚”³¦Ha÷gÂPlZÚ°–¸=k·¿ŸýìgšªväÈ	DgÚþç9r$Ë<6eÔ¦-7ºžÿÑ_þ“¬µÞs?šêîîš½Œµ5LrÊeëS‹	} š“­fÖ^ŠjK¥ØÐ†¶IÝ]ÙPÝ"0E¼HsàâæÒÆÖCmíN©Ü^l,nm¬ßÚjvuÕ•x_«ÌT¤}àZóZuîÊÕÅµ%ÁÚÖÖòCì¬­%`íîò,¨ï'úÃÎ3—Í2"ØÀ5”Økæy`&sdøòÐè('$óÐf}§Lz[
¶ÚJ³¹’s²õÿ×êµ¡±Á¡÷Þã7ß¬Š'ØÎ¹‘U:’5RË›`kâ-c5ÁZ}Øì)ë÷ð~C5¿S,^`±sú‚BiêÿàÄkÀšè,¨ÙBŠv6É0M/+­§+uÖ<½ßå°örÎYãˆmkÖ¹–škÞ¶–6í¹^£jºŸLEóÊÈ°ÆêÆd‚Zd²D¼°]óèÝi:ÌGÓm»Š;ŠŠÝa—ŸnŒlwXØ|–J²C¤;àNè7kšx‘è¬yn?²“ynNk#/±ˆhÀ©GÅ’,ýÔ9³£°UíéAÍG5$CËí‘ÍØQ¤´(3õŸRÙö¢5¿ñøôþb\KÍGƒäÈÑšYkÅMk<<2žÒÔþ°¢ÔtãV~‹õ¥?Ùí8KÈ#î¹þG~´H5[me
öç¤æ5hŽ“ö6ñZá‚…9/Ÿ$ ò"C 9âCðåBÓÚÐÅÆ^ ²\Ô˜¶´Äñ./òÛÙjÐ¨ÓE¸Ìi3EóÌ‘3Gd5VKÂmö²I–Ÿ0X‹+â•ð-v†AþÞ¿h©¥–Zz&úÉ"d’8M•=j†7Ìr³„~ ó¥*òo\ú‹mjŽj"µÕr¤-5µè§ETCŸ¶+kòÕ>ÈÕ'W6?]¹q§¡(‘Õ{7n4qH&Ã ë†èŒ"HŠÑ÷h^«RõBE ›ýÛª eUÁ›*!qÚ†-òyi2«ˆÖBÖHÅX8#*²[°Æjâ´¦«ºÁZÝ‹ £±–°!¿çŽüìæ‰ƒÀÚ‰Lô=N™"²ŸüÇÎs”@ZëZhbë>`nµN…ö“²qy´wf¶{.ŒVãê+¨€t„q»ÉÊY<Éö’ýØ(xIþÚ&á!+«×®m,o\»²üÁ÷¯UJm<JwÎ—ÚV7V»»*¥ð6t½—i›µÚµóÕz¹}qk¯´v¼¹Ÿm6ÏË×º¿zuãnêC
1	.
¼&¹¿æöš‡Cžè²zÈY›ivÖØ¸°7ÐÖè‹£ínƒKÂ*7Wÿq~Èí|ï§³£ÕÉå•U«%ðëEµªµƒ]ƒTA²ãá´;Ö¸¥µ…=§Ý•úhâ»œ©fGÜ½¸‹D)ªÕjq÷(T@j:¶ÑKtÖÓ8÷h ­f­éâ¬R¸C¤õ ¦å-a5[íá¼f|"8Õ’LHÌ53“"»$ÁÓ6nqåµî¼ñ¥f´¤i-¢˜N…QŽ~ÏÏ<Ý­3²‹f”g>²rrÌ,R.úÑW$5-.A-Õf¡b¬ŸÅg­Mç²úõ@Z¡3­áÉºÜ?ò‚}{TÜ¹fÐ™oö{ŒœÏ„³‡£ÚWˆ)\î-~ò‹°íÉkÉ¯×~ìé¯i§c÷œ‘¸ÝÕü+:©9²í>hÍP-õÖœÕôôJH/„Ì[k¾÷–6SðÏ	ÖT}ØX«žÀ[gmÆ>€•…¢BT¤4¢H£0¼}šcÚ5sØ:¨…D2è³dÈ~êGnñZ°Õx7žñô´­Qðà‹/©î1„ÚN÷ôãØ<X¸ˆ«Ì¿.a¬ýv¶šÍRcÅ÷Šéð+;“ÃZ–Ý¯++tá	ÖÇ±AÖ=5ÿ¢ÜGºÎÊ![á"-µÔÒ3kW£e°Æ€5ÊÈ¹@? Ölö7_ÖN½«ÑjÔ>¾~Êô×}ô(¦šÏÇ´ªyýc©9¨¤mâ ™~ƒ™¦ÓÚêo>Ù\	œ¶¹zcmk‘zµ>`íÎ}åAâ'à+Œ6TëÃW«Bi<Ï§)²?ã´çƒ¸+ãnà³!ZÛºuŸØMÂîæõ!»k«Åfûëœ‚½ÆEäÖíÎ ‘º=îj¡•ÿðÁÏ~vìDïÁ.ª !'vd"¶kSë=Ñi°6%`cÎó±Í]ž™Ÿûéì,=[×i]»>wY°fzI*ª€L= );‘Ù¨U±ŽÜ\]þènóÚæÒÆùÕ‡ËWÅ+ïŒ]mËqãfo½Ò¬• ¶×V×ë¥¶6&A_~oN÷*£RöY<N5äÊjiRžÚÆbéøyZÙVÉÁ±³³uVNdxMòþµ{Íy`‹“ì—›>ÎÂd÷’à“ÁpÍëó7Ï·1ºzhîúìL% SþÅà•AkpéûÈPkÄY%’	ƒ‘÷èXök–T/z%¤çŒ½ÍNAÅÄ—ÕRVkç^Ü¿kÙ"##­ÝrXánýœ4âvœÖ~NºÒ|Û€pÊïO5)ì¿ì®%RËZê­¥æš[ãáV“É¼©\ëO_Ýb³'8ÚÓ‹%r‹åç^ú#3Ïå×)[}¸G1©ñŒ®šm<O„%nphá ìŒ¿SLvú1ÊËƒÖÆÆœ×<²?ÂšÄ0l¾‰ÑZadd]´] ºk)dÊ<:¹’¾°§rÐœØÒ;ky-qÝlë›%ùÕÌµ´v—U@fKñœµÇB&Öd´M©³Vl­Ž©ùÙê'ðnYål:4À:AªRæ®¦¤)Sä¢¥ö‡6²åÞÛdŸ‰½€7î0èM!e¤‡Uã{NVM+åq¡Øp˜ýAEäB?“°5Š m4ö£ñžqö³¡Ø°[Ú.ŽZv†¾lô™¶‚*7Ô"¥©@ÒÓEâÙZÏ²ôÇ\-¤R!y†M 2ïUó/&o#Î€áïþ~‹ÕZj©¥g—ØT	‘…¸þGÛÏÍSG¬á¯±W¯Ú¥ï|ç;Øjá [C˜¦G¦ÂúÇhªyõ#Å5AÍí4VÓ'vgmuõÆúÃÕ;Ç›ç÷áí(ÑâB9Y£ob°o‚Ì~hQ‰±va¢JŒ?A"ÖÌ6c‡ªÖªäóK“Um‡©}dç¢V’b9ì¹aÞ/4cAZ´º€;Ëƒœ1~xlºÊ|µ{'¬ýì„Ä”5™kt¢)’ÿà±Pôx„µ³³—>5Éˆ,ÿ¿§röòðì{ï‘bÿó÷æç.ÿ˜ûG‰Ô
2 SWm	™¥fÓ¬Öö­7{ë“€ÚÖ[«kÍ}Í-`´Ä¶Òfóµ×VoôÖËµ6±Zy¶~‡s[[­opl¨®]ixb ol´RÑ¾~óÆÍRÛ[wWŽ—¸SZ\Ù\¹²‡´Âýbscå®0‘gà5sùîJ»Økâµ^›ä?çìí¬¶sÂÚ]ìÂš²¹um~¾÷æùŸ|o~fvTÓ°5:ƒ¨Á>L5`-@w\ƒgx%±ÍNÅ¨føi-Æ‹ðßbBi1YÄnËÈìË Wö{¬YmZÐ¦¿ç€m˜hã*"`3ë7Ý¬Òþ­Ü‡­éÈQ[±³¦‡qš=So-µÖÒI““*‹SœÝòâÅâ€Çp,öÜÏì‘:mzzý£×JæZÓxø6»yjñQ0QÍM«±™l5ªåwòäÙžC¢«yr#žß|31lÑ$mLÚ«9»¼C0Zk:eƒÀ#%r„°mŠÍµ§ä4§°Äc³»vö<˜\ôgü˜hàLã)}³7²¹³¶7°ùtìâô~>œ8ki$ä—íC«º-ˆ±ÿ„P>ÒI-ž¿Tí˜OqVã*®pU*‹Ä…Œg-‘HÈ%[Z#Ó±ãÅà²!ª{èKãÊQ¸ín'!½Ã'GÆÕ¦ÈÌýéÊ!øVûâÖø¸˜M¥Ü‰‘¶öïMg©ÂüÃÇG(îVÉèëìlîWÄ4VÛ˜qÆ"9¦ù–ˆGQ– MŒÆ¸²Ï}-;Ãg"A¤“®ø„ÁšYo”C¶‚ [j©¥gÕ®fjY!äX`-ÖA‚j!Ub“°Ö¾sêÒÛýÁT³Gq«Zbª¥¤ö‰AÍ5Eô‡-Ã¾Å¼JýÝjsN ´r,ÛâîË–M„kUE:îß7)ÇWªÄñ£ê~D„¡ü&…ôƒc`CÙKÝÛ°•=2D9e5Ã4LÝÝ,]ZDjÖºëîö§‹¸±­üöAdÕ{;­MíÄc½¶N®:§”àvN±ý=´6G%àå÷®ÏÏl£/9§ñL‚EôÝS~ñ¨~Ëý•®Ùëz³ÙÕ]¾º|w«ñÖâÒ+W®6Pu_©2<T>¾Úìª4&èl+U>T…É€µW_=Ã¸±Z“íÌ@ßgë•Æsµ1NûxñÚêñ}õJé|ó¼¬º¯-ý‚ïµ¼Låê
]k÷­$2Žp-ðZ6â¼¶­Þ€jÎjÎ¥qÂœfÕžw	ìÿ›Î›ÇKÏ=79;:;Ú]RZ¥^%Í?CœÕ¼AÌÓûY¹Ò#.öLDårE¼W­©0)„dA:=V¯í„µ÷T¦­MkêþPÇf¡ˆ¿h¬]ìÕvld±qÌÅNCFœÓ\‘ÔvÒ*‰ÞšùMyœp‚ð$·¼ÂáÙ Î_vvqµçïvË”Ã3­l=û$ÞÓmå±¾š÷ªeK”±ªÞÅgçìçsX‡O#ò÷hXëY¯Ö?mh¦'»¸°ÊK‹CÖŒÕ¤ï¾ì3RbsîŒŒ"ù<Q÷—o¾Rž±
xË;"ã¥·XÝLåI³[‘Î¾’µæà‚ãš!ZºO•ûZù–µ$¸Å{/cÓšÓš;k»Yk)­q¸ìVJk.ì5`ídGHðW¢¿àËlúWÀ)¯6ãÏ
¸¯ \7Íìé!\D)ÿ¤KvüÑajàÙi^õ¦Ek#·•±°rh£úfcC$wxû¸ê)éˆûƒ¯?ÎVÛµRž–²D,óƒ‹ØÅŠ9LÓvçÉðL£ØØ)’²yÚc¶åË±Ú7í%M"ƒ5ÞÐ
‚l©¥–ž«Åd‘ÏÞÿ‰¶&øŒœþwOkÔ@~3Xx›JÈ·ß¸téè¥«øq»þñÏwC5/tR“¥Æâ)"Aë×6ÿù“•­ÕµµÕóûŽŸ/Ý¹0­¤1™˜"H©NPô8AD?´r5øg6q­Dƒµ¸9¦Vc#ô2Ut¥Ôž&Nž[¥<Ìe µú0¯éùªÇ®Þ®ç§ÍÔY‚©—™zZé¸äÆ™·ýh_NÄ¦˜þŠ}îWJçWÛšÁÚ¹NtnÛb›#ºžñj×gßbö˜ÓZj«6«ªYP€˜¥µ›¡&QýkÇù©]ÝÚ¸Vk…UDZ«•+ÝÝ_ÖŸß×ÆOŒ@Ä}ÀÛïÇ_=zA®TXëë»<{}¸ñÜà‡xRÍd½»Ô\^ýxkecñê2qþ=TóËd™ÈÎ{¸NÞÀæÝk†kª†Ìì5ã5—¡ZÊjÛÓ°ýîý•¿™¿þß:»êå¶jyvvrv®Þö\¹>§úUÑš·¦%ÉŽÚº~ÝnK;Ò9U»Ãšó[{ñ´5ƒ°°òA­(1Ð¸Q(½?êy€Ô¸F>&Ûˆ°Õa»xºÅÎHÿžBòH@-õ×$7Ö8¼º*²G3b¸Rhý8
™û#@âdD±›x«E7þØ/y¸¢Y£ï˜:hÈ ÎNÞXgWa®H2øšÃAMÒ9¬meªqqHáçÀ³Zƒ°(TSö]±šÂ6¤}™jî­‰ÕûìíÇõ­EÇùð„ v‡ôƒe/å[Ò’mD¬béH…üps=Ü	ô‡½â¼·g¿ŸP„¥½6;í%8­Pù„ÉTØL‰³Æâõµ>[J"FbÆˆ§‹8—Ù)Ÿ7â¤{™^>Ô¡yiš„­Økn%7DoÌFÜî8t?4¡É«W•$E–:K®)Aþp›’ÿÕÐ¬µi›ˆXmÚÕðÖ0ÛIä£ñ³Óº¿p–jË?sŠvg5ø)«ä™DêMwì•¬ææ¥ñNU?Â|à–Á/hêŽ8-Ê>%Â³pHõÊµ‚ [j©¥g5	û}kQS¤I©–2¢í7©|„ÕBÒH`µ×ßx;èÕÐ/e¨ÆI¬VˆjªtS-!5æ¦±HXi¦‡ÇÛš`Z ³R"ƒµò$í0vÇ0Ì&'@¶ `¡a¬éÚ2 ¡5Ü¬–-Û1ô­uËVÃ…¥i*v•€‘òÐ$AƒÖ»V¡q­JßZ=ìf…¨·«›¼þÌ_«ƒh<P„5,Ÿƒ8[n¬9.¡¿»}÷îúÚú7)€”ô%A3²E0ÖÁX³ZHˆÍ¦«q¿WÑSSºšú©¸ì¥ŸÓµ&VãÉeIöq>tÁx7€½dCÕ´Ý\mnl®0+š4‘ãw”²¸ˆ¡V+—Îs´_³©Û´ì#Å…s¥>ûÃ±Z­Áûa4h­½­væÕ3•Ñ10z¬Ì`¼5j%(»íÚZóãÅ+×ÚÚ›[ÍæC5È1ÃmuksÉR(uÍ!\³)lÈÒ!‹ì5x`3±ª«¥­·ãÿÞ0)àƒ©ùùù™¶và±JÁëðè\¥T™›ëRJJ)o”µû†*G»Ô6/„Œ%ÞÃÆ©P| ö÷`•:¶³O%ôã´—~¹ a¬©’±²ã·d­m§@ŽXd›|6BÛ<·,¼_Wédl³Ö
¦­¥ÃÖ¾4{»+ÉñLÈm%¬æaçX•èøå[	~Yöcâ¤ùìkµÊÀÌ°0iKÓ=;–Ó^‡ŸŠAÍZÒœ~{8£Ù)þd¬Rõg3Aê/Ä\èç7ÍàL;_µÙf5ô?ù—£€ˆýá}{	HóNzõ$ÁüIR‡S•6Ž`öLÇ3è÷À5wÞÒ!èÜ)ÀµbÞÌ3š é‰{ÖÂsOXÛ…ÖÒ|	 Çœ‚ôþtÔZRÉ‘ÆAêárn³]ö¦„ÕHÑ?âd–Z“ÚqÚÄ`¡Å•ÜHUYóYk=Óãåúb„Ï]Tã½Ìþ+³¶ÇO«´WEŽ#hšæ4þ‰‰&6@úÇGÊ‚ÄPƒÝÎöL?X	©¶3ÖöÁRƒ±à'J E`\Z(£ò !)S
kìLP/+Ã4vÜø—ñÃzÉ?ÁÓYÍ†dóÄŒ-Vk©¥–ž]$X®¹›šhÚ‚jì°ÐŽ‚i­¦*HŠÅÀµW å[Õ~^ŒjÞ©©¡ŒÔ‚£æúdósÒEÖVšÁG+hŸIS¹¯f0'8€–ÑZYW2Ì2{®,¹Ÿ“­:¬é‚+½³ÂaÅú#æ_«±mˆÛÕÕíµ®•ÏÕ¹ƒ”Ýï°–Aô"H!ñWŸ0É4úàÆî½Yƒð~j‰‘¡6¬1Zc´štL÷;çFçÏ	ÙæÊ\èà¥±è¤¼þËh8ÚjE#Ç,Ò|&i¶e€´fóZóÆÍÅ2ù,%eæ‰UW·k"³Zyff?wæd©¤òÁ™Ùr[;¨¢µWiêâ÷àÌ«¯–Êƒújm’&¯ÑßV™¼z~±mðèàÇ¼xõêêò¦j5j•7"pä`Af¯Ý}l5¤ñšˆMâl¨«åÉ­ßþp3ƒ5¸°Ù¼1555ß]~®6×9?§@Éëó]•¶ruƒÍ8ª-g§½w< †õ6ÈÆé,‡_\<¹ôfƒDíÂ²ÔYƒàÊ5´=õÆƒtÉYík,#ÁJ³Öý{¶åBrHú«UÕ6X‹¬æ§¢|‘ø(Æ5S:n-u×r4‘¢²Œ|aëø•ÛòºoâEœ‰£Ï #ª…+]ØbÄ¦{9kÙ½xyO]1ªéð^5—ÏSÃO3gÍ£EXY$­‡î€ya°Æï™¾›K‚ä£ Ý\‹þËi¾‹ÿp#@•B"@Hw­'¬˜wžFÎNT¶‰iÑó™æéðs–m¥ãÎuËç¢Öä­ºTŽjÉ¬îÝ¼5‡´¸ûêJÒ S¥Nå6©±ä{"ÍZ+µ–ƒÌyg»VDFTó2fU2†v5d…`’j*§Öp‰‘Y`5ˆmdá¬0·MÖ8úqäd3xb„¼„¯FH	Ž¿šje¯Qú¨?°T±MãÚ4»‘¼´[Ü&Š„,Hê G0ÖŠÿmVÛC_CB)³ÅB¾ˆá€ÙÊ-5Œ±l¶Ì¸mX‹‰‘<[h,M”´XH>([­ È–ZjéY)Æ@>°¤~Äþ}Ëzd66¾š¬µS„õ_úþ÷/]"Y„åíW^yûŒyjQ?´^5”¢õ¦Z°ÓxîÔÊñÕ‡ë×
ÍwÎiå¬r²16f7&Á\ëS€¿åŒhvÈAƒ]“ÖB¤ M¼¦{@û
X&Tã´_—
èç­CŠ	{Oé¦Û	Í`Í"
Y<ôâ?œûV>Kþ¯þê³Ï«a«‘,òk÷nÜ6ÖðW£ß@¦3°U‰:Ïý´F!$£ÕNôÎÌtÂjs£ss×)…ÄÒ4VËâúc^ÿ‰‚Ñjn«eq¸	kÍ«CàËhw¥ª0ÍøsîZÜXiVl”ãÝ¶Á“m˜fû*áªOWkí51›¶Ú›ƒg4Žkm±¹ÈÜ·P.¹¸z­}|åZóÚµ­erãIòÇ¦uÌIÛ¸¶”Ë†Lª!áµ(]8«Ec­£—–d«­-Öë]Jk©´—¯_Ÿšêœ­VGÁ´võ¬µ	š¡3;màÌ ]m;aZs–ûŠŠ€†×¦û|$WÛm*¶w­¡[Á[“Ö8k~-§iÑä5Ÿ»FC°‡dw8®…Ã¤sj®IlSTãH!Ö<2PK!«!#¥¬2‘5\±‰[Üj£­ã>wÓÈ/++mk«½®§¯ž$ÂÉ_@¶ƒšäË:œÔÓÄfþÐ_ª9ñ×l¢Ô¤
UY¡b,3Ôrx†ì
’ûßkÃŽ(œàp±·–µ	úÈqwÖ¾:¨y8G|FSÌ)Ú69[-šfiô‹Cz
íöUr#øl»›ÜYÓª“-®= M‡¶»WBúÙåÆ.µÖRgÍÝc·ÖÜY©ZcE´¶SnZã¾ã¤›â¬P² þ“¡¥2´¯…?.Äo²Ø:ØV\¤(Mñ¥ä,øÎqþ·ú1Ôhi;{òìÈ8Ñ‘=g ±þ¬¡Y-t­)^$p_ì8=ýÅ£[# Ý8Ÿ$·ÿ©* S^CYÎ‡÷óÌqš¹cE°ö»(`—¡š®9 c•Â‡íÂ¸,›ŽÍfû{é“-Vk©¥–ž«ÉGû•<š¬øÑÊQ˜„-Xû>¤vŠØþ·ßæ¶°õód®ÚcQÍI-§OÖ?ÿÍ'ëçK_;o½N‰—Æ¦¼ó’–*úªØZ“ßŒ½&X#cÄøl¿Tf ·I­våŒ9ÂxìáŠœ4G8ô¯aÖnõ­…º9"û]*ƒÄ]šé–F5©Ž`5A9ö­oeÆZdµÛŸý—_Y#Õ½Þ7×o¯œµ¬kužàòÄ±N-ˆMËñ"l 7¡rtv¦·wnför˜€Í+ ºÕþ66pÝE š ÝÇÑÒäk­ËÍãÇ''††f™W7.ÉZ«÷v¯nß'Vë»0XÒ½°Lò#V´ˆÄK}}„hZÓ¦†Õ6Ð`ß^{ó­«o5Újµ@hoõm­4kH-†¼q‹Ìµfsksù×[÷ùe,¬ÁV ÄÉm¬ášñš‹K±ZÎXãc°ÚÊí¥¥WÖÖÎ·Ïñ›¬ÍTºæç§¦zg)«ðð)ƒá^$BD°¦ƒ³ÁšÝËØjJ qÂ‚Ö¬kíYH`–Ââ—S&HdoZ»¤ž}­es±ƒÃÐl\˜¦EŒBü‘6öãºìÉ{jqãò2ÈÂJÈ¢ ÿ—¼µ\$dqja¤%',-lg½Á¯ØÚð>³Ú¶ÔÒ¢³¦kíãM´×LÅ‰"Žkù ÈÜXãpGMrRcè‰ýQTšáI¨µ‡'þ(8–9kvf#%uÀšXí¢÷¶µÇÆŒ°DþÙåŠ½©§@µÜ¥¾f¤´t<ž;mñHþØfÄ¢kä•“¶s Ý}vÜ“§ù»³æÈö´ÒGÿçK¦¶š=\ÞOèÖš»·»5­y%¤Ç2?2%#'#­i˜`³¡›•?%è`ãÈ
‘ó+ÇLƒÖøÃãäÉÓ–úH:$`úÖúõ®ºÔ”ûHéÓ#a\F1÷{!ˆf¦Ú‚âú7¸í¯_ÖìœÆùLÑ@ìõ{{ Zrm#X¹ªE9nk¶á;ï^#¦äw²@ÈkZÙ²Zœµ¿‘AšÛâ,71\+²¥–Zz&ú×ÿÖŠÉìÑ8Lð™5®á°á¬yT¦5`ÛÛàÚ™W^9³k?„Ôò#°P-1Õ’ðÇµk›ëkô¨mS¸ŒÕ0â‚¶Àš6ÊÁY³:HÀÍÊ ‰‚d3Y¦U²¤Ê‡ ±*[•:J*"9U‡÷kƒÕx€oÜï®Ëg«WÀ5BF=?Óõ<îhF%$óÕ8Äk„UDcíÆZD&ƒµÿŒ±f¬vûƒnÞ[úÕsêBä‰#àô–MYãô#£5ÔÙÍëì,Á~®®2…‹˜&.gÁ">[-Ã©‰ÕäZ1Ÿú#ž¸kÀÐÒGw·îìÛ71Øžéê¦‹ËÕÕËû•é‚g.\äG_±Ÿ~¥ÚèËpw)ZäÕÁF 2ú®XÁ1\(x-Ì`ãƒú›¼²uå­­óµAÉ5?nnn®îãý«««[ËË[Tn›Åù¯oÝû0)†ôjHI f¨–°º·õmâbÞ¸ù3¥:°Ö9Å®“µÒ­½X£Æ³>73Ã8~½ ˜`Í­4ôfÎjók7âèiûíQ-[-R‹ÓZk0]q×ZS„$aÚ4Û@h´ÿ[ý£ª"#¬±«I
}‹Áýn±yÓZq5d”gŒähm·Æ57×ŠÊô2èrÂbuÌ«µÑ.òšwi	ûx—§¿-í–5{lo"µí‘Ó¿sÉåŠ°ú8µ0<ÚjºáãŒmÃQ¿²$P4Öä£9 éä¬¶k<§_ÎÀ0ï¬ÙáÚ™“"Ô‰Ðä•óÂS`Záh4C§°ó¾4ïM+‹Ñš™ÍrðöÃøä'^‰X|S`­ñÌ?vÉãËÓ›;jœPCîøEÅÒÞ¢¦µøGÞXsTËÏÅÎ)ÞãðJHZ&O³"m‰1[íåÍ¸²”‹&<¬‘+,µñþð‡Áé‘ðÏCt§[¯&>^<|’ZÆÓ=rõ{Ôºfl¼JÅc 29lt§éO«G·øÖÛ#F®_\à’?§¾Ü±ö=mµßÉeBRø(®2
se’9¢…'Š±üZ5®`5½ÉGfåyh	²³8ø×÷o±ZK-µô¬XíP™P“£æÆÚOtÍ™ðG•A*·ÿ; °Æy`à£ÿéÌ™ÑU{BTóNµÖ>__[+_],¡bX+¬9«1ýkb°Ly¤%AN ›¸Ð„•ƒ›F‚?@W­°¯°*Åpv¶²ob˜êÈP™W«XÛÚ¤Hm4«s›@öO²«pVc*µÂEà´™ hu6:uGVÃû“üæÛŸ}v‹+ÌÃþ6tvãö½›œ0ÕŽTÓ©ý½2ØŽ	È­ÇIÜž3tsêØ±®áJïÜpˆÑ3µÕ@˜4ÃVC¡ricm	XSöã:¦ÓæÊkú¹5à©êèle_w€µ²³ZÉTÓd„3µÒ¾2HnÀ[a×ÆÛ„^XkÜDlm‚µZ¼.íÓ»Ò|ç­Õæ"/9¾su±Ù,µµ£Fß™3¯¾³q7ðãÖòýtæþm®ozÔH‚kÆk†jÎjÑIü»õõ{÷ôAþ76‡¯Ï”ÚªõÞ)ÁÚ|çÔõ™n`mr’Œ‘*Íw3$^6è¹{q™µ›³Á¹µ¦k¦ßÚYóÆµÜ—Ýé­ùÅ.	ÿ§ä«ÝŠ©Ø¤©±å$VƒÒB¾6Mâš+‹12Cœíð‡yJó#ñÕxÓÚËZ"ª!£ó›P±µƒ="DE«-^DC;P+¾'b™w¾y÷Y<ëe;ûõ·ä3ú+!g£Hi¹ÓPó65û©¤:$p¦M VÕªó2XãÁêbÏ‚b$ún‡ÇmòÌ÷­¥ÎZDÇµ˜´è¨õ•PÍWsô G-W±Ù,X¤HôR¹°Oçù:œœØ´è=I}%]›×XrÞš–Ý”:k<ŸR|4qÖÒÿÑ9B?¦iM‡Éi-âšË½3ƒ,7–‚Cbv?1ú¿5#­_&¢´ç$5‘!Yäð'!¶ŽP<³ip;\Gé4™=z0ÂØl1Ž‡BÞþÓÔDö¼ÐÏ‹ãXeJ¥U}ö¸‚ÿµá.¦šÒk½‘Ìiûâ‹/ˆï§TüÒŒµ¯ËVÛÖÜaËfTgŽXÊk\›œÓÂE†bb.Äi«›N}va_œ\H–`¿éCæ®}Vl±ZK-µôŒFa¿/½ûzœ±æ²+Ü)µ¬ñž×/á¨]âÄŒ5X-Ã4ÚÖ@5éÉP‘þ¸Ô>ÿt}Ÿ&§ÂŽ5p­œÙlµšè“± Ž ÃcC“P˜	oL[U>
ÑØ°%Žeð.kK›DÜ‰ªLŒ	ÍøP•¶!õªUtÝíƒ°»çæ»tÔæ 6(M«eögSš¿õÿ$øP$Ü$³çùÿý3…K2;|aòE8rìH§(`—u‚nçÀ´@ió½S¼Ô9ß9zy´kŽTQOPÍB gR[-ÍëÿÚ\]["‘ÍÚææ×šMŒµ¡4–MU+úI…Xf¥mÒW«ÍÏ°0.õ»ew¦¯!û¬­Mø¥k [¸QªÜ)ËLk\¼ºøñ›g 5|·3ßû^°R“Û¿@÷—·®l-C”÷C^$v`¤µ\sqc5Þ¬„‘ÛTQžòë2Ñü/VéZÖ¨ å'5GÏšBFªí¤÷—Ÿã— ‹óÓX#4ÙÎ´HnOí©=UþÈ^pÆíäòßÿÒlµ,ˆ=kèSØÆ9+]9ƒÖ¢x‘ž$YD‡;k‰
K!½m­ÈZ+h\‹Ó¡‹3=Ð#kº`“^ðpÆâž“šÖ˜ÉÏbïÌ½_æÚ	ÃÉ·ÅållvâZ´¸œÔXýq˜aÁ_ÖáŽIm„r'xŽ"óBÈpðDyXÓ0ìÓ6ÉNGšiKJk¹°MOZô ‘'Ä4”àšGñ{OœÓ±wÛAžˆÏR[·wX§ö¢>‡ý¸‘ÌdsŸ¯Ð^‹öÄæÚNÌ2öz*å¾N*'ÆÔYóBH·Ö2TskÍÍ5ç´\dq¤¿;Íª µ£­Cµ'ûû;é?Jžº¦i€¸nJ‘?J94lh³y!ý#LŸÕìG_,Œ a=ã·¦!2å¡é
}Ý¸%ŽÐ2G l_ÜêÇXS¤ý?àßüAò—•oŒÁ.ˆÍSÐfCÐ’x};±îT¤/ÝqZê]CÆr<ÜuóHö†qH¤Áˆö%(‰üýÖ€µ–Zjé™°Ú/Ö8Ðë;Qk»XjŠíF$G°Ö¾¯žµÈjh€X‘‚\æª‘ Y„j°šëÓÏžo6ó¨†JÅ*+èBçAš¨ÊcªÒEú€µrðÕpØ¬2¨‚tª‚h°{™hkUv9
ÖÊeå‰<µŸ+4¦Õy¬Fó©‰kÁVÛa¯pÝÝÆjø[yƒK°†X‡}àù×ÖÖá³iÉæDç‘^Ê!m ë±Þƒçþfð¥a±Ñ¬¦éjÃ£3/!‘ZR©ïšpÅÑjô†1Z3Í˜t¶²¹rsLj)Âkc“–ß‚„Ãp‡TÆhÃ]Ö¨tæg€ã¶·Õ§Ö>ˆmQµ>ñØ™šÞ·Ÿ²ý•©660n`‰ØjíR›¬¸­%
776›om-Ý_ÞTMd»¶™O1\C‘Ô„j9Vã©OÜû¯ë€q…<Iéš¯¨rfîúlY°y¶‡ø`-&õGZÛ‰iYo+OßGù•½±Hµ'sÙ|‹¸.nSK[Û(•<šQÚä²-Ì/¢9H–ß/MëÆY!Ü56ÈA-´V0nÍX­ 2Á5Wq„¤µ&L^ºèto¸ûå5iì~LÐà‘FØKn¼%ó®ýÎ.J9M§(Ã4'5«fÚ—Œ5e¥gQ¡!h\®è´A·Òâ9¬kßí!®O2JÔñÇÉO·×"îxçWáï‹‹{Ô|²v®yÌ[ÔÌ‹@µÍ‡‘³ü7:©G¯pæ/b…j,ŽµíKëpsÐsSX\+7 ioT‹æØSÊ{Öò¼æSx¤Ì(Éƒ´ßV¯°M!ØRbK§agkî¶X;­²ÈPóØÃÂÎ´¯é½=¡šúâé“ýúãDlE¿Y8"K_³ù-Z“Ó¯xYž¾^×~Ä˜qãŒ4Œ¹G·0ç¦Á¹ñ~^žþÃ|ä×ÕöŒí§úÜ²™óå°ÆÞk]¼²‹¬‹¯±}#œËk.»/XÒ)…Ò¾$¹ý-Vk©¥–žÉ(lkLC¯sð4N·~ ©QúHòãŸžzýý×¿JýÄŠ|cmàÿùã$2±ÕRTóV5±š{jkrWÚL…¸Æ&ª\v×§¯¹MÆŠH+‚lL•÷#Ë©rÖ5á»à£ArU+{T¤7¤î°ÖÃ»‰"õjx×dk·Ö(ƒºB9¤ÁZï®ùNÁšXó€BCZÖèU“Ö)ýC"¤MÃ­a¨a¬‘It¿ÁÛ<!ó£8hCÑ†•9¡•@ŽæK Åj9[-ŒÞ\¿­¹rŸ|]­½fj¬€Z¹oqÌ5•5’ÞßÓ¸5~è(t§m·`ºÇk¬¼¤HÔ>8 ÙÕÞfZc ®&ŽòBÄÇ«ñ­Ú°Ý;[ËÍ++[c×–™–}7ÄCÞ3ÕZ·£òÏþÌqM2T3VCÕîÝû»ùÈ½ÿwïÃõÿ3?º¿ÒÖ^Áíšš+×»»º»ºfgGg‰0¥ç^TqcÌ‰þD÷GNsÍæaû^g?ùîYÈLÈV(g5`mà—Ó#Ö°OÊ	ØgùÛQ˜WÄ¿wÛLlû•‚´s‘ý¨ ²×Xr¬v(ï?œKI½5=<Òµ¼÷ƒ¢<dŸ½{e¹GÝÑÉ=9/Ï‰,¾è·´¸öà4[=È£ «_rO-ÛE~uáµ)Ã!šy¿š6Ù…¦8`Ff‘vétTó¾/‡¬ÎlIQÇñ,®ngùD ï#‹ßé¶w¢é]‘®¥ÙüœïJô÷°ºKO5©%u

 }û¤Î»§ñ¯“Ê™ÑgÑE’ÎåAfÞ/[kj‰·ÆÆåìf‹?â‡Nöt¨,·'„?¢‰3Æ¯Rü86ýÖ4[mšS °2Èw×Àuqä–Æ¨©_8ÓŸHœ 2jGT¸¢‹íBB0/o¬}ÝG«íi¬ÙŒµ¬_­ÀZóDH‡6õ¦ip™?‚$íEÝ3qNYÍ§nÛÃÁˆ­aØ-µÔÒ³bµÈg?ÑN{O9E›Ú%âú9N½®H¢F$’Â>‚ éXÛµ2Eµ\¬Èo>ùäá"˜V¨ÄO‹ÜfE%¡Á„ðÌTidå‰šâù-­\©Ží§­l}l‡`&ƒ5BH«‘‰¨¤ö1:ou-š}mª×í¬Ý]3issÝòØ,Z¤—ŸÀTŽÕÎj0Ç¯>¼÷m¼:I¨Ó‘Î#'²;/ò#¹jzEm\ÿýÔ(DöÓŸ¾÷ÒPu8³Ô´z	¤±šS4VËæ©ýâþÚêæÒÚùæÊúÖÖ&öçc¬æd©!âºÐ‡™¦LþrM,•â2ó£ç©Ö5!V‰½ÁZŸi |nC â}ÈÜ/KîL£íM€m‚ïB!¤,¶>¨-À\‰[è{o½óÎ;ßkožo®^ÙÚTJ„µæVZ)\“ŒÔ„jÆjf¬ýí½{·•ã²vãƒ{PùX©ÖçFG§:ës•¶zh*œ]Ão]uâûß$7DOS€±vè-Ú\â5sÍ6Ã7»å7~kFs^G*ø¯ñ‹::2’MÆæ#¡zéâ´MìÑ”eƒµ;¬“´í¾ZâªE€+(ƒ4\ã”fŒäúÖ\NkÆ,¦X
¹Kh¡/žâÈ=±¸î@±Ø‘¶ÃxÑÖž^ôh¯Ûm>!ª¥k<]‘—¢­æ€—Ç‹ >ÍÆià/¹ü-×k ½üQ
g#5­>é£Â9I&,ìüÃâ}kŽkNc¾ ¤¨Ð®¤sT³}*çC½Ñó;uD#-Íƒñß:Û‡­£š_Äoûä<u’§Ž]Çeï™™:kO¥df›Ë|	‰Q’GC¸œÔ¢·æ#ñá'»rÅ—‘ÕCòk `-+ÆT;D)$;†©õOO÷ãÑOÃ(¸6MäÅV^ÙÂÂøH˜Õ?¢ÐèlZ$h$xü¼MoTT¿ü4J Çõî…‹!Ÿ$ÛÿšÕžØX³(Fí<+Ä!J—ê2‹°¦g„5Æ`ÆÉeÓ.öŸ¹K"³©^2fAÊ“ÓE‹ÕZj©¥gÉj¿üå»Ö,QDáj—À4t*LÄ>¥HBûß~…Äþ[£ÚŸ¿Píçi\ŠjÅYý›85+;íq´FlŸ-k„d‘A§µ2fZ¸›(½*Xl@[µÂ2Á¥mŒUâ¦9k9X«sl‡å°uwWt'ÌZó·:CñD-]X¸š›·l €Xø kšÕìé"9Xƒ9d¬å„¥v0kÁIÃd¬é
X›¿üÒÐõëïÁf33—ÍZÎ* ó)^é¬`óÝµµ¥¥­æ*Ç¯ÎÖiV3•J“3@Ã¤iH}èäL„&1û2Új"8XÍ@CI"}ƒÁ7ÓKpZyr……5³Îx^hÖ4ˆßT®±Öxÿ«gÞ¬wg~IòUlƒo¶•î_l\ÝXz¸¼© ýÒ7›«w—ŒÖ´&\‹¼f¨æ¬†H‚\‹××VW›Ç»gFçæí½>ÿÿÙ;ßØ¸®3½g @“ (°Ð‘@J	–H$8¶<²!Q–8ž!Ãš63K)Y —Òdh'tøOEE“xc9Ý$FC–YÃ‰£.¢î¢¶ÜFTSÊªV½à‡°ÖÆI \˜Ä
Èú>ö÷œ÷¾¼ÇW”qÑ/óÌ½çœ{g†TFÁŸž÷<ïT_£³³§»Ñ××]íªuËe'b0ÁÞÖZÿ†€³¶ziCárO!Îe¯Ý˜ÕÄtu2"‡®êw%Îe4¯ÅüA~Å²x6•CNðë–ê•°ÛLÃ26žL¹­hÇšö09¯¹î§£ZZ	É™&ÞZ1Xh}³dÔ39¾c´Ã™mXó²ÔÇ»™ÚÇhªùé™"6D(uFsJc‘j÷ÒŽà^ôj¿Î¼kV‰-Wiœ–„åÐšÉ?ØuêL‚x8H9h¥Î|ácþ:¼1I\äá,6³¶—1 ßk†8ÙžBÅâZÓZÒ´¥.¼º¨ùm:íQl®iDn±ÝÈ]óéVóEâÛì,¶Ö2ùG–Òšÿ£€ÿ§•8kTÚ®»oÍí£ÎZ(rfE$2L³Q
îšZ^³"Ldb@i8LüÖæ—3[³ŒayB	G‚8J&{{¸ jÚÂ&&ãe”@kÓƒÔA^Ö@8úaßJä'¡&“‘“êsI"ÊuÌhÍœ´ì¶d°”™bñ£«üÛ©¹ìšÑJ ñôôböÊqµ›a·ÕV[¢Ï€d”6ŠÓ ío2gñþ= šhMûÕ¬ R¦ÚÖ<’#µÕ¾
«Y®H+²ÚPí7ÿ¸² òÇÉÉzÖìÂÊì8T÷˜ÕàÙŠÑè@cå´vˆ¦Ø­~k…]½5+„õ÷÷gÛ×jÙLfH¥•uÃŽªêN«‡EK©™›ÆÖ5Fd©"=«–—¨[bb³š«g®ÈX‹aòÆj‚5sÔ¨{dÁJ¹ýªˆÔª\fÏÚ‹†hÊ‚Œi#³#_926úü£#c³3‚µÑ™ÑP--üó\ ÉÙè«Igèj¶´BÞâÂ+lQë¯àâødé'Ž€.Ðª¿ÿÞ{®ÔA+Ã°Šª!;Á*n4ùKxCï¨È† ­ÎfW'ï­ApÌzŸIÄÇ¸¸KAÿª.„ÖkÔFò…»Bx	.ÜÑ£ôk[iÓ+ÇŽ·–VþþØûkIÐˆzdpÚÍ5p-/Ý2_C/;î½·ÕJV£µíÕfIí,—›º»;;ªöwÖèF@»<u’;4Òì¹6tÆ¤&;\ºrÍŽÁ9ªÝºÕÖ•ÄD‚i7¯©3íÉ‚û—‘¨MÞÚA†`ªñÕ %MÌ2Õ¸©8mÊ!ÕdM;¥œÕâ›ÙERoÍh-%¶¢mkI„¿7’¶G*ç¨ôá†Š‘ÑŠýÚŸÓÅåM{j1ÏÏLFI\9Vã¼®Â>!ÄßrÛ"3ã5“®\1·m:ô-Þî¬ÆÃ\üã-è½Ê¹Ij#Ò:uÖ’ÑNFObô>;<´ÑÌ]Îˆjv¸{Æ‚¿Â”Øs-¾ãëfcÐäÌæÊAÚ­¶]3üºYñÊÔYKó “ˆÿä
œµ4ÒH-›\ùÈd)ÙU.h„&ØÌ¬«Áe<±W?)$2 ^³lüé«ñ¯z†;6­Í«¦1ÄóóFýwo<¹<sFã5E‹ˆó†ÖýóÒUDÀÈ0aµåŒ5* oÊNË–¡lßš-Z]Â8-Mb,ä]×x¹½÷{l&”P:ÿ!îre8Ç)ZûÞÅ‹¶›a·ÕV[Åj3ÉˆÍÂú#¹kÔ?¢§î¬=M´ˆº`?ùðcV	©}!C5cµ‚Íj´Àª¥+Ç^yå•8Ù‘ºiŽkvKû§lilX¹*°Ù¡J³ÿP©U™
^°³Fª˜n6µB!ä(M°]UŒ5b#G‰ìW÷k+†ì¶IgÌ™³¶¥ÑÐTÓx¤;ã´n–ÝsÎjßý*àäé"‚àI:jkoµØ~F¾‡R Ek!ºW™vØ2Õ˜v~K-²YÏŽ*¢V>zdŒÈ·Õr‰ýða’i¬f™ý+o1SWëJ}ŽŸ¤1…£‡†Õãzÿþ{ïe7ÖÀjU=ÊX³·5[MsÊú¡$cn²TbÁ+¸-éYÍ
÷‚ê°šð¼N)$ègñÿ¼€È~Ì-`­u´ùÈÑ™c÷<ô>-àÈóÿ5ö‚Ö._–/qåP-²R¶È…KçŽM¶fçª%ú`O±ÿ¯x‘žFO¹¯Ô©”‘r£DC†JG‰šHhmr|¤©ÿ;1$#,xè2·E-ç¬å6³uqÞV2¤·\Ó©a}u<¹Lù\ÈîgÂoDØkƒ–pPÿÎijæ@5šÙ?œóëW˜½"Ò§Fã´GAglþOöi$¤‹ï[Ëo\+Ã°#‡¾´#ž~‡!}¥‹‹8Ýú>5fŽWÍ„gvDT[OdCjä7X;@aÙô|ÖcÍhÍm5_)]„á‰^>]>ëèä5æ­µÂÕ›ÈîzifNÇµìðˆÇŒÊü–RüRÎi±;¹gzz‹<÷LµFŽÛ:Ó¿þdÉÃW.£ù£¦¡£šÆâfÙqF7Ìñ‹[£µõ5;òveü \q{¤ïˆDÎkI[ìÄXcáKŽÄW³0H&ºIlßÞ«X‘½½Êë7XCrÒvï=8¨ÀV›5QS¸'Z¾zòà ?ƒ”Ô­?¨ÝkóEœ^&RUIV$vR±$ÆþÚ²Œebû½òfk×Ö28c›wGsVÓ¥Ý’˜å»ñw¥Ù~5Í™¹&ò‹—‰ïÖøVÜ%Šõþy›ÕÚj«­b5¬4RDö©!¶d¬¶ç9Á•‡÷<ýôá§%v¬)Yä±;I¹û¯ÿºÿÎ?£TKm5¯€LQíÕ.=$PC”š‰’jšlYRhêpV“J­f«Õ¬°jY$‹f¥“…ºÈqXÄzbÇì~%÷3â¢¡ZˆY-…¬à¨Yº?ä6ZkÖÀ7šæ(Á•±ZF!‚Ö¸Ñ77«)	òË/~ï»ÿá4]ä²ÑÚùK/oíSììË3S¹³ÌŠ‚È­w©¡öåÎVqGÖFFfÖF 4¹j^¹f»ÚG›«Õö/|56¬]\úËJ]fW«b>¥ÃZ'-À6˜`­n‘ýaÛY“’HÔuMÛ¯F<'Ê4‰ÇVD¾Huü6a¢ò±Ž]Å‘u”ï¾‡å=Âk†øZn[úË‘±%zf—zŸ40ZC§¿ÿ’hM¸–Š{æ`¢ÅÿyêÒâ±ú‘ò\£Úƒ¯öã©¾Òær™-j”>â¥¡éZwãH­££ÒMWl•Bò¿óÆ
Gd3î¥vƒ¸Ì.Â‹üÅœþÊÛñ·óz[×ö¨{Ñ¼Õ±:0M(${I˜Ö»WÕG,öê–ÁÚ bR•ÓGw¯¶]?ÒÛ­%ÎZá¶5/L‚æÕ9­óH.SË!€M· j)§åP-’Úu=5›$qUîWk.9­	ñÀÁr@ì‰jÅ2Zãù½ÛùNÛ·»_™4Gp.Ž„ŒñŒ’w[ËH,Ÿ§h`£9¤ÅW1K=í1@“MvÚ/´¼,µ€£së´ Õ8–É†6ÿÙˆs-±‹uäÉŽ·Øi­ÕPZ©3~¢þ_£[kQÎjö@EÖl`ŠG·&íØmïÜþãdà+«Ý<†´±RÚñ9f£^L²Ý°š`-Tð†DZ`rFý,
?”ôŒ˜lz wbY°v ÞÓ{õPŽ›ÖûlÓÚ¿üÔjäM‹”Ä[«äÆe6Éó€¼Öt›—óÒUÔŠ\§¥ždXwÞvX3qip¨Ê6«µÕV[Çjj}ˆ|¼ßXM"EdÏ¾ûyìƒÕ›Õ~øIt˜àþ¯<)OoM˜Vl«Q™nVsPcñ—"«•L‰·¦Iòyàbh0oÍa"G¢ú›Í¤UÉîÕJ›¬6±"B5A›(­2j«ÁV£RË
Z”õ_c“š ÍÊ1ÐÂ´ÖTÓ˜­!4&c5]H»ævYjÿç£ Ö’"ÈË—/ƒ¬°Öv!Ú6ƒÁ¾m[Õüz_’`+’ wîšzñÅr«©±GqýF=2#Op,Û®–±šÃˆj°gÔnzé
øsO5| úØJ¬²BÈz³‚°&krÅ`« UýVÈ£i‘m;ˆWQâ½+8k§×M¡‘Ü‰YRk!k’ë{ïê ø¸ÐK AîLv½}ìØÑ–`í;WVÞ_xè…ÅV¾~ÙRü¬™¹†R[k§/-½]’V››B=¥ÎÍÝ$AÖ¾#c3ÇgçH‡,}¾«v¤QmÔ(¥ÃjQ]HÓÚ+‘™Žh ùéÎZÒ”­X·k¹8H»Ld÷;*“kü$D[¶86®-r%ÿˆm[EpÒ§ç¹Þ‹ÂÈ½è¬åÜ5´îÆ5S2â‘¦Ô]3ŒIbF&Jäˆåà–`Y‘S–Xs9cæòDÓôð	y=Z¾÷•ÓZ•Æ/Ãk}æí‚e¹
^PLÃ„5ÄÖ JGW¼à¶A*ð»>UÄà¼ïŒ3ØÖ4™æðp}›#æp"ïgíÖGŒíƒ_üê‘›Ö:^?ŒÓYú¦”ºnœÞCY§GC®×ðÛ ÍWh}TóùV{­yeNÑÛc09ñúçáÎZ¶iÍNWLYµÕÔRkÍî'Òÿ±õ¾Ý^[	¬¡ÁüdÐ‹ð3 ›ç¾÷Kp—…„×ËÐš KûfC­ýÒÕ“W¯á²á°-sÏº®M¨*{þª…ö+Âß~vMLÄ"Hï‚}#ZË€µj©¼æQƒS›(›@2¢D«1Ûk½f2Ëæ²äG&	 3›-lœÓ³ífØmµÕÖFèÓb5ñ™ÁšÊ ï·d¥@âª©ø1°zrHûÕï¹ûÛû‡€5L5ëÙjŽjï­©€|oqq…p`M†mQKa-L‰B1]ÓY-@ðZ«‚#ÓF¼v’¢l¤ô³ÇÆªJa$G4ók›yž"Hƒ©…[)¶Âî½9«X¨ÍuG­/²Z¨|‡ã™€N/}ðÁ0°véôÙs’‰ä¨Ýµmë¶rßÐL¨F+µ-[X³wmçƒå¾©¿UÞ¼)²†•­ÍŒ¦%|Kß®–Oì—¯vV3ÁŠgW®„L Rþ—`Iª(×†1×*¤ò ×9lÍÕx˜R;2àK”XE 5d¡äƒ„%ÄÇ5Æ^À=ñ˜¾êðÐ¤¾%÷©¨¬°ó
`­«cøÞ‡‡:;y„opôèøwŽ---]Y8¶øë_ÿýÂÂï"­…¾â†k¦jètd5úa3œ{¨ÔÝ]êjŽÌÂjåžªZÐlãÈÏ~|´v¤»ÚÑU:‚è™ÝÁÿÜZ)j6¡dí$fŽY<ÜYó¦l6yŠäí(rc1«!jL÷ÌGXÓž}Il¬,R‰"/"€’™(pŠ¾š7Åvt+@5=˜™ò¾Úî4 <²šNWLY­t­‚Q1t%ÖXž¾ÒÚ9Äw –Xj…}Õ¼òKY¤–Nj58«\Åè•0õò+ð€Z+°Õ”J¤&9ž£Ùà#½ÒnUA^cÊ7ÇvgÃ•ã]Žœ|;šaN\'1"I75óÖb‚~öpGÃW	§Ùå­+%y?£Â\¤Ú.›¡˜Øl²µy9nÙ|ÓJ÷¬¥r`tcÍóû¥µÿPÿ¶ê 9»ÒBHýåk!cÈr#XÖÚ@ÉB°Fý.[ÙH!ò ut¤¦Q¸uõäà #²Ðp×t‹“ÊHØmžºlýŒR*IÈüÇ[;yJ»zíê²€M•”*‚4T3[íf[akÃE\FÀ¦…ê=«‘Á–œžû(´ôÅÛ#¬9å™{Æ©×`cÖRá“zGŒòo³Z[mµµ!¬æ‘ýœê²&F%?†“›(ðÚ“A‡©€T
dµ$Òm5¯€„ÕÞ[ÓUíÊÛo/ë"½NÛÕJ]k9qý‘þj«U®RëÐ!b!à´&Ä6¾©²–Õª˜mÚ±fIý¸hš¡5žÙ¯mÆJó ÿÍÕžÐlmH“xy‘¤ñ™
è´„ÑPUÝÒÜÏ~h-²Z¶aM½šßáÓJˆÕ^ ƒÈçÏ^ØvßVÄ_ëîîÚ¹s—¨ŒÍUÛÔw/%d›¢%¶ž+ãa¦ÍŸ›£²x»Ú*«¡X‰¯¶xá»¾(„T¬böÊS¬À¦`nÉIk¶à€a É(+ÀZç°Ð«2ü€¨.2Ï‡Ôñšf®5×å”i´Yë¬'N2sŽjCÍ¦ÊÙ%²@×€éùà[©49<¤ˆÉñ£]¸rìèò+Oœx÷‡—Ïd´vÞb!×Õ¤óâ´.?i¡D±fkæùãs@ö4º7w}¾‹LpíçÇÇj|ó®ŽÎPÂ:V£"·Õêt7M³¸ËÍ4]Ú•?!¬ÐYÓÊžÞ¨„HËò/T¶³Íj­+-šçR7õ/Ø<Bå‘ð,Ò™:®¥¾šIca‚¿WtÖŠ{c›¤¡Ñ’Ü·âÐ¹ŽÒÈý$ëñvå¸æ–3CX$¤¦C3¬Ž”ÔÐöÚ´¶‡1Eg´ÄÞ y`âäIüÏiègtg-Å6®	‚´Ý†Ê‚tO/ÏÀþ¹êt9@9«ÙµN®èÑñY½?bZÜ—áZ³_l:¼}9fC¤7û“!),†Œœä×8oè¬Ý¬ý+G½„Ó
!4}×Zä5ÿG‚ÄY3þ7Z“Òø~ä˜–óÛâÃgû’­XÓî4`síK_üâ—vS9A²¬†&§ÔÏypàä5Ú¦©mÈ¼¨M?“ 9åìÒÔ;Xn*ˆœ¸zX»ˆ½&/n…"ÈOxäÍòš€MØDE#Þ›1PVÖ<ö‘5¯Ö¬wj‘ÈÍ7;iŒš¤OJ¤þ›Ú¾Z[mµµq¬¶‹}°½6ñtU{ê©§îGl\{êé=‚5‹‚¼;ZÂj©­æ@®aµß,.tueÞ™¼›É:ÜÑ°i	LðtÚkÍ:b×¥Ö¡q| ~!¬X«¯UTÿÈíÑ”*‚XÊYƒÞª£ÜEÜàf­«ô¬IÓßÒ°«à€éô"H]éèF$ŠÌõRsVèØé™g‚±A˜Î-ž=ÿ²•V"ÍÀëðX•	)ïÜyq#ÛBŠ™x‘}»Ø·«O±"c$e	¨6SÈjÈö«ÅHji0½²BnÿÊ¥÷ïÃS«ÖtbõgPœ™a*GÁ"”–ªŒæœôLSG½e­Öx!~›ÑYXÐÆSu&¥ÿ³TÖc3úo’õÍ–B¬ˆrÿ'õ×zlw@h“õPé*÷Î^¸¿ÿèÑ£ß¹òÇ•c¿ýÁ¯~úRôÖ`^ét&'µ {îÜ±^¿têðræøñ?7Wžm4fûªU‰æ³³ìSû<ÆÚl_7^åX¥³¢?Hµ¤k&/€,¬côgY8k¾âÜ0Áe6kâÕ,¶ŸaÙª!uEZ6t†zEk!»16T‹Yñð|‘8¥}±5íF,o-1×8\9kÍy-Ïk1é–å®Ñm3GqRº]ÍÇ%g5Ä˜ä>î^Óë}p$ðÅÝ?C’ù'¬ ÒCû5Eùå½ïÜžÏÙŒ!#	™æm:Ð$îZ¾"ÒËÙ¼¤0BO|'79½BÚ¸Zsž©6ZIueüÞñOÍ…l6¹"2ùcý=k¶¾I­ã¬E/ñúr•ù]kId²m-î¨f£Îâœ'µð	jÛùš;)–Fj÷±#ÂZH‰¤eãçÁe•4ÊÚ_Ö˜¦µWMG­£EÔ†H°îdðyzz>¸j¸kÓŠ%aü¿eT“µEù£Vf ±dv{Í&»éÏ‹k&zª!]¼¤Ç†4ã;g$xã"Ü«}êcmµÕV[·­O=w¿l3v§Y¶ˆt¿ØMõw+²Xªí{ê°ª ¥¯@kÿíÛ×¿¾­7«Å¸þÿ³²ré•ÐÀÊD*õŽ:ë,œ"u×€³ÒRa•ì†6¤Zè°|hœ‘	ªU :\oÖ–µ¦hM°¦¢È¨ZUceTËVM;Ô´‡Sužç¯.Ø«KŽáˆõõíb;”`M¼f¬Sûãþ1`-DÉCœ¬ö“´ÂV³…†m °†vqE $«o•á´Ñ#Xk4Ã~~vêÁ9e‹h·šXí£Ñ"¢–5ûÕ0ÔV.\¹°xiñÊÂ}÷½¡Æáúüªœ¨R76ªêG šîµÔ5ê±Âz°Ù:[)e°VÆÙž5uI“ûÆ²Ÿ°‘¦…û­ñX‰'‡êYÆ§`M¯ç~Z“™ôg™êNÌÈ•GfŸ}æÔ«?ü¯o½u™~kˆNd‘ýá‰×~Ù÷Ës¿ûé‰êÌèÏ?>§4‘Ù¹Éï'²Rm¨ÕZwc»´›„‘Zg«Z£XCE°Æ˜–HjÅ’ÃfO€dÎ»jÁiI÷µBd»Ê/GFk–2§…€HåARh‡Tk'ëÕq†g)­™4âZA~?‡©·fÖZê­EEo-)…´áÿ‡ø®~p&¨fy dÚYÍ-µD|$m	¥õò91‰Ÿ•,òÌOZ¤ƒYºwÍî>1µ;â7æD‘€½9‚3pŠkFTf:¥«½Ò‰-ÞH^©I7Í8KRÝ=³«[ê>ž°»ÏëÉÛó9´étÆt^+j¿ÆGÓúÈvK{ÖÖÅ5÷Ö")KÖ)0ñÖÖvôK5WÚhÍ¡-ÞsV[›!i­ÖBÂ¾/…‘;önß1UAööX³–k;âñN¨¾Q!Br ` —jåo2Ø¦ÂpB6ueÃ]ƒâ®]¼x-<«7ÂnŸýÄÇ>Îfµ›/~dVù!'×Z@L\¬1™tái-î@Ó%£°M×ö’xŠýôe‚_'.CmŽ°ÆKÚ¬ÖV[mm«}ö94B %íV‹ š­1¢‚HuÁ6Ý9LÍa 4R.Yä«¾[M¨–‹àª;¶ ¬uuyè#u*ƒÔT²W´*	‘ÌY3µ„ib2ƒµöØ¯ÝÖjÌ2+‚Ä6Û¬k9h<G"#­eýÕQ½Š'FFZk¡6Ò4…£ÍMÍ‘*‚©†1†œÕÒkH[©€¶SáKfÒ»Óv–ÃÜWf×›Õv©öQ	þœ³c£#3å©2Öš¼µ©™qV³ïæ1œ°štviáÂ……{¬v‰4LFVÈâE[ oVòh|Ì£1‹šÅrŠw4×‹e\GèH¿P[6¤·ÄnmjÇÖd†!ùtª ìœÔ¶5Ý±˜•HN’ÅhÇ66±àÐPÿø£#Gß_yÿ;“õ_¾ùƒWÿÂÙË?|A°fæZ¯éN€âŸþjê·ç~wîÝÙã2Ö(ƒ$¹J5¦s8l¥ˆF&d­Ñ×Ýèéîk”ºôd©ZeêBâ±”Ë2­MõG¶Œ£ûišì 6V·kœ(–=2¦zî$gùmß -ëÆ´tÐ*U
9 ­'Y¬Û€.#ž%¥q¾.¯åqm»çŒ¸Ò —íµñkî¬y#g;ÿi©,½vV´Uª	‰âá¨Æ¸–k…µ= °>Ÿü5LÈrl{[µHhºJµ'ÍXVÝ*$2DkÍþ”ª%¸–ëà™ááò@H7Ôì	;]áÙ¬ÐÑéÈ[•Ûx“{ÝÒŒ³-“»<n\iæ¡Fžå=TËgøQì¬I·î¬1¤eÑÏsù®5wÖôðhS0ÂáÜ•ã5G5S¼ë;,eDþ9	þ2ÔøÿúÀŽÏm·Ÿ
ò¼C°ÆŠòj5[SmõyáõÖ®²mþš*±±ö!3Øìä<x&cM?”5Â“ ½ƒŸZ¼óO?õñO|ú&8-Ë	3Î—|5[3ä0¦cõV¼‡Åœ~rÏÂm!ÑKÕ‡MßY\¿Ç@ÊuË^ÌÔfµ¶ÚjkÃXMÒ0ÎBÝc–*µAg2Ök‡÷íSÂÈS@=6ô…}á@¦¶š±šõV³ÈX)T¬½÷Çß¼÷¾ŠÛä«y|ˆ¹j‰JV‰ÖViÍ #
‚ØßˆŒ¶\á zk†´~ø¬"XÚ¸ZÝÍV­p¿RÖ¬×šl·J8«é’³VDh}=8iñ‹†sªGkI;lí—ÛEüÝ¹¬©tRÞšò·êr[·îbÇÚ66nN³ õ´Å¦þqôøØ¨4SÌjÞ	ûŒbEÎpž]\¸g\ŠD-˜eÜu•ôA÷ïï¬VÊ$Z«¨-6ø¤HÙgé CJè¬[Ýâ¦0Ö?Ä­ŒëêöM*¼NnšÈìî
ðTAÉËÕaÀÇŒ-'¢›ì’³Æk µáñC#K‹K˜T•7?üðÃ¯}ÿ÷þþ…Ë/\vX3b³‘ÉÄÖÀ—uêÔ¹s§~û³ã33‚5‚úõI2Ì6ª|ÛÒf­q$óD5åÝè¶Øs±g-mÈmˆÁ÷¨ÙF6—{l¶Ü§BšB‘É2ÙBÚií‘¹¦Œ KàÆh`))Pp- ¥”Æ
D‹±sÅþ<a.¢Z.ÄßÉ&£‹¤9˜cÓ?µÜÆ±ÓÏçÐÀÿ”Cih¿ûj‰’*5ÈêFµ ±Ÿ(H,P`_uÕÜZ“ÒrÈ.¬Ýá•¥ž³É‘dŒ¤¤±Œ³•;kÎa©³–$‘8Ï	Íâ”iR'òÙµ..Û">ò¼æS¢d'cŒ äô|.í¼^Û5\_3Â|]ÙS‘Ï®Þí¼$»ßþìy”õ:Hû[O#F
ÃûíŒWI1¤Ýµw…M©ü, ‡iÌ¾è^ýSmp;àMñûj²?ÁO•ÐPM¡aÇÚµ‹×Nžd†Á²Œ‘0ÏÃj¶š…é°XØ(†œŸ˜¿víÓ ÚMHžZØ˜.¸ÂU§Œ§¢­æ´Åœ)Ò³Ã·bk5«vôÆlÆ~ì‚ÓÞÃå°!{£½Úžk³Z[mµµúÄgCÞš¥ŠèÊæÀgÚÃC?öôÓOíC„A†ÈÃ«¶SZ™ß­ö^`µÌT»„­£(ÙjÌ.Ù*Å¶Z©n°æ„æKÖ( Â€oc2X“¡¬)¯“uVc…„¥‰EZÃK«!¬µÑ¹9bZè–—mMK`ÓaV+O‰Ö~kÆOèô—Ï^Ú²åëÛ"¬i¬É[Ã@+sYžÒÊÂjlb2ûwíœ›Sõ#»Öè®vcVƒÓ¤3+èÌŠ8íž…û"œU†UÕ¸¤åšÁÚþaý=‚SÀL6Y}S³©"ÇØnM÷ðÌ0æÌû€%,ƒòÄe]Ü5cM7:èÎ0o¿‚!K‘ˆúCª$?<ÜÑ5ù °&îË`­9>Ó·ðÐÛÕÊØ€µ¿z•á÷üG`-6G5`íÄ©/Ÿºpbjîøñ1Ê ËåUXëëÁ;+5
©¿ÆpMµ”F*²#3üÄ4ÙŒ|¯Ãl’ÌTóÓ§Ý¹¦¡PÏ-#Û°¦kr×È‚Ñ
nS%¤Õ‰Ãq-i—Îl©±æ¬æ¨æ	þI§5Š¨Íµ\Ú¼É÷rÇ†+ïÜx]ºYGêª­!µd¯ZÎTK™mµéœÍf®1Ò_Øza#~§Ö’vØ.AêYlòÓ#F˜ÜYK­¨|"$ko—†|aW	ÄéŒEz1þßÈ¨ ñÝÍ0šã¹†üÚ÷j¥¯Y×|Í£ÿÉ’(nhÔà –c¶›‹aZW¼(uÖR™‘'y%dæ¬qøg•8kI«5ë‹újùüÇÂÞØ¶’Œ×ô@Ö§t‡À­WR4äöÏ9¬ñ#g8òžÌuuz^!´[ã„Å°Í0Ø(t×DuË<«ž"œó²Ý®¢k
"ùÌ§nv³H%ýI¤7!š­Ô.KO‰KfÖ-ÛX^Õô£ÙpLš½8R™<8“æµ(¦k³Z[mµµ!¬ö\ ³}xiFj(ä÷SôÈ&5Œ5`M‘ý\pKÍÕ¾°}ÓQíyP-)Œ¶šíV{W-îU»°t¬£KhÆhrkÙ*/^l¤ÀÒ²	!´ú›Ò¸Í•Zs<ö[VÿxKÒž5 2C[,)Vã>q##ã-îÕÄiµQ3Öð\âF5Î\¶ˆf7Ø¤òé¶¼¥›	\+cç_¬5Öb{j‰×±zˆìçÁ—Ã¶]¨¯v©QùHþ#Õ˜je™mb¸²Eˆ!VD¬9«ñíRV“Iøãââû—Î^Zx…jo¼²™*u·(¹Ry"ô¥©é(]±+{ä
X†a¦%”fwÍZÛ„:¹5wá³‰îm*¹tÕ³ýlÙ;˜´®i¬3		*²ƒ7ÃI“‚ þHá…ÐZ¥§gsgÏ›ïVÞýðÃgaµW_…Ö.«ÆÓ”À vVç¹§Î8qlöHcì¬6K$…àÕ}‡j‰¢Ø#òÕt6»UÍëžšË/Â}Ÿt†ypQö·Ön‡Ùä¦Åk©&¯.4sX£r>Ü²vkìVC‘Ó„m2ÚÀ5ºcGg-23JiÍäñý:\ÛÓœÛ	ãÖZ”ÃMAƒìx:ªi½Ñ¦!…Ÿ“8G57ÖÕlöG‘øToá’³­ñûïÁyÅ1 “qƒZÖh-Qvc^.)	}„Kæû×qF’,°Ö
Zc£\ˆcYj¦åQÍ]¸Èc¢ $ìs{ë&•6IHwj´Éçº.R¾2î¨óNqa’˜RcÍë;kšn$wÖ
@Í5¶ˆ–ÆœÎšB:®eGšÝŸ‹ð÷£ 3v¬Ò5XsÉY¨ID
Öô£Ä‚fÕ„ã€ÁÙ²Ú§É@#?DÂZ”±†×vî íÕd²Ñ¬‚kËóËœó
ªÝ¤¯âñ»â-C7=£uÎLC6‡µfoœí{Ô8X!-xÒ“H¸­#>Ú”…ðp(l³Z[mµµúøgö™“Æž5´ÊjÂ²ÃhÏá=ûX(³[íiª"ŸüÊCýýf¬™«öüóùHOñHCµ÷êTŸá0t@[SéyT³®ÍZ¸t¯b^æzV£µ*Jéo¶XháF«)R¯ fL`Z…Ëê`÷HòçTÚÈ8[ÝjêïÁfÓb+Ò¨©QSj¿ÕØú¦æ¶DX›CS‚µ_üâÁ_¼øå/¯¨
’"È×Oû1p Í’æ»vé	å@0‚$P+ï”»FßµÙQš<5ÎÚ([—Õ,Z½Dc»•Å÷¯,Tƒ¥ÆƒÙeÜ1ü0“eºT€‰IÏÁSdnªÖ1¸c˜dxh†wºËk¨ÿPE®­ð‘7«Ï5 z5ðºð=ô>i2«‚Ô÷®Ãj ^VƒHb#_WR`(}ªûÞ|³ÖýWÏJ_{‰JÈkb3›¬2Þ¤ÛßxùÝ—ÕíºÑ=7;Kr£QFk}ÝJ|dZÏusÙæš`­+ÂZä+†ÔJcv¥J6»à*¦BrjuÀ–·×¼[¦˜…¶ØP¤¦Ð!T¥üó·UBNpï€<¶A	XËÂ!5ÅÓP#µ8EVK÷­y%dš	Y”
é¸Æá¸ýµ$iâö8Í'wÖ?181Ú!Ù1sÃa¤–F‹h@òañ¡8¨±f‹Šl`·aHò|"i)¬¹­fá"Ò^Þ~š^™æ÷3Ðš—.Æ)uÖò;ÕT1i¯“VöNÿŠùÞåë(Wá¨1.\\Ø”¥J19%ÙâViƒ3©ÿOs‹­¨ÒÁíF=²o!¾ßñ.UžÔ8¼ÒäEÜª%Öš5[‹þŠç´´ÕšdA¥þOâ?$gÍrmØÇvÇnö®…]¯Š I6¬v`žÄŠ %qÚEíGcÉ †ùe`m~™²ìi…ÕòãˆfØëy~fýPë&eÿ¨G¶­¹³f²H—"½É5®›Í.C8±˜Ž ‡4ÄwÐ³kÅàB‘š^foi³Z[mµµa¬f‰"æ®ÝÿœÖº|B“Ôp®Ú“°†«õ?~ô×)ÕÄjÈúª½¿«‰ÓL%‹o`æ@NnÉžµNÜ³¼ 7™;™(Û£¶U@öW¸V+gŠÍcka°X«mÞÔbVìV˜jª‚l†k²l‘ªç>ÂjŠvUÆjü"ßcËÖæˆ€æš(M*OýøÀÚ·^üß/~oµ
òµï¿ãE ‰×C'ìØ6s(©ÛÖ]wõmÙUÞ©d2üû Œ©YÂù¡µçÍÌµ‘*´ªÕ@æZa“Ùÿ°v–ä~ò
…ŠÄgæpM®˜abàÙÌPcî¿W°Z]ë)6¦_ZP¦(Xz…g‡»DÐ““Â°N¶í•MPíT×h”Îî7Ûó¦ªJ%‹Ö&ÙwHèP—md³„4RÑgr²£A—¹o½ùËw^}üñg¾ÿµ_=}FLfÒB‡d×Ì§ÿöëÕ{Î;_ÖÓW¦LuŠ³R+O14j¢«<CUd©¡„¾yêŸéˆèæ“¶öÛ‘ÖüBò‹D—ÉhÌæÛŸ]ÅŸ±86ˆ-œó`7…iƒ²ÓÄjº#cN@ÑXãW1MñaS‘Ä…ÖZZ	iÿ´ï¬VDkÈý 'U¼%ÑM\bÔ5¼ffp¼)hÍ‘M’ƒšMˆ¡h¯ZZ¹Ð¸›‰Ï|Ç^þF¬KÞI`BãäÁXk.¢¿+6ÝQÄ¾i;›RyC2N#/ÞJš)ŽkQ¾ÕÍF{8ªi¸aÍcj§åZ8øÃÑ9Îþ¼ký¤È4Ò?:V9T+Hñ#S¡ÜYƒÖn´uÍ^P¼gÍ½5Ž4bÄx8é´æÖnßïÆmJkjNii«5-¤+8~Uã6L`“2d{C:dø÷œÁ‰uÑ?]½x<»HÈ£²a5¡·®
ÖðÚ(ŒÔÏ"<6bI&”ò/X›¤»àYÍ]4h<ò¢HÏ|Ìf—™‚ã±Í²UïÈ	×ü]º°x‘ÖVû(…§-Ò3K>ý±¶Új«­Û×§Ÿ#æQpö7Öh-\Xƒ5@íéÀjÒ>ôØ¿ÖËYëÏíV[Õ,¯ÿ=ÁÚ{¿YèüC—Ã"ÄÁÄÝˆhV<Uçv¬’”_ý´º"$À‡Ö`•iØTwµ`	ÖDkã:‚*$÷KÐí°Ãnµ–T­©æÃ­f…¨2ZÝÜ³E¾JÏæjc‹`uµ3F„Wºa°æ{Øú 4BEºñÔë²ŒµÀÚwÿu4ÖžÁmŒ°vùƒËç¶¹YçpnP¹•Ø~ì5â!1€H¬±Qmf´vd–8HúaQ7ì‘±êÌÌXTSfÿ™Å—/œykñ
ÎÚá#¯ZÐšlö9+½	Äkuƒ5M‹Nb¢,Xjuq‡5Màõšõº¬jB]?ë¿6ô ‚ÛT(©wYí ]òµ0Üôí)
	ÿÁk«[HI‹âÄÑv²•ºûÊo~øfù¯¾ó8µ¥Ï~ít`4¹k®ŒÔÖOl*=´tîåÕŽ@»¬úG¨Ü­?‹Bûû án^BÚHÏ&ÝrCÊþÀø‡lfÅ"ÌöÈ§¤ÉŽ8x$‰w]óómºlùŠÈŸ„^Ø:°†`5h-ìQõc 6XP›Û”î6({ÍbFPA¤Žj:ípPs\ËÅŒ$õUŽjÉ^«/Æ‡É1£(giˆ³+ç°ø[ãÊI-Nîžåý´Ô<ÿ±Õ®[yG|xƒˆiH«Hy€UbÌX¨q¢Â]kŠöìEL„ÿçkKíðvÝ’Coq~¿£š±—gq$Ñ1žÃ·§Ù•­sÎZ±®Ÿñè¦E¡¼k\Ö™rø—ÈI1kŽ˜×lv`K#9
‰9“ÊF˜Š5§µœ·†’:HÎ ÿ°€Õ\¹"È´9¶Ö~ÏP-'µ›P€?Všªyå½¬iï¬‹^í±•"R»ø¿..ÏÜ µåk(F.s¡ÜG8fmÑÚBÊ?ÿáòµkxjâ3FÉÖ«‰ NiAŽS’GAJÙR/ þô¥Aqa¡çùŽ<Nc5½ÁZiÇoÚöÕÚj«­bµÏþä~sÒÔþš!¬÷I{îÞóÔV£öc‡Û³çî»Ÿ¼óÎ!'µŒÕr°½òòemWÝÕþ¸´ô¶ðL¬æZe5·ÖÛêÈ`Í†RÅn›£r¼a•?–h¶I¢òQ’…¦Û¥Š\µ°am¼YSdE”†ª•*ƒŒ6Ì4•BŽŽŽhmf›BÖôžjk5Ðmkƒ@Š7"«E•¡ÑkmKŸHt‘©©oÜõ`ZÆÚ3 ¬hÍ`íƒ×Ï¿þõ€j8hÛiœ.5Ä†¾wIÀšûgfì®Q„Ù­>Ø38k¶[-kë°¢ö[+‹o,¬¬,Ýwì•ê\¬G|³–
9íÓìo1•ê†Xê¦ÔÐqËÌ»žeC¬•8›‡ä{uåñXªñÜBÜãpg}_û…o2Ô‰²”æá¡h-$” k|í€;Šÿ—¡×j®?6Ú?ÔQÅû¶«½úø?¼óø?üíëjg$V:ýŸïyùÔÒÒB­ÚÝ#XS¼§XMe› X•`‘¤n”a¹{Æ4—,bÏ	Ó|áÒ»üåŒvíO9³ÙàÕ¬6.1ÑßHÝguTS*¤’Ø¬m"Ìü#8ÀÆ9’¸Ü\sC-¬‹ü5ïgp^‹¨æò@pd´RØ›AxáÉîpÅEñ¦3—>ø¤[WšÏÏáòÙ“I®HÄIÉOl5KIhÍÆœô¹˜vË¢8À¯¯óJ>;ÖLf²iÎAèR	Úî"£òKN¾Î¼×ß·&RÓÄ">téY¹8~Nƒ3Ý¸º©í‚š# 3ÆÓ•~üé®ÁTÎllÅò½kkºä
!mvHKj!‹IM'Ãú´fÇõû¬ñpHô®Ýü“JHïÉñ<©ƒtoÍ,­€d²ùó«|‡¬;¢¹oï•…¶Ý2Fö"Û3É…^ ü›7eÝ/_DØ®¥aªq±,(›W¸ˆâF¦5ëÐÆ'ø/Üh¬X!îÑÑì“1RÇ`.CºYÍä{Õ‚‹Æ¥@M\Y¿Rê©Hk<¯9BÆÈHo¯Æåê·iïWk«­¶64:Cä@Þ¿'ë±¶GÕOAhä?²¾TC°ÚžÃÝýí}shè›k`mÝíj++1ZäÇì÷TýÒë-¨,k/"™F’`€)P[)
D“B\ ðá°RÛëMÍýûU©¬„a¤ŠFÁÚ¡–1ÚÌŠ¶j‚6UC*±³ÀLA‘Ü•÷f™"Ø/[z6÷°ä]Þ
¬iì2H“©»¬nØÝ,æ€5Åío#·ÿ/¾ü=ÌF3Ö¾öûï¿öÚK/Åî_çl»<–ÀšñþÚ]»°m´656:÷`wCåz»Æ}ôùçc¤³Ú²oõQ_íìÊÙ·V–è¬öÊÂÂ=0™ñ-‹6œ9W|fª$­l¶ÐK§<‘ºXíPŒx©g¡ `œŠín…œ»h]B2g¬FÈH¿6ª)[s’ËÂ?Á°kH©‘‚5þÚ¡ôvÃp!R9’´Mïé†ÖjÐe¾ÕïkÏ>ûÎã¯ÑÖ
:K íük§Î]:wn©Vëìd¯¤°ÿ¯›Vj´š¼TRoÄlúÏ.Ù†ÆwÙ:¢§Æ2Zl~˜õååv!Å'ì™(Öv14|æš£çÝÿvÿäOBd¿ì5&‰‘;kÐ™µ8¢îN!n\f¿m²ðÍjvÄG©¥ÖZRYl’ÃZŽ1Ü]+äµ˜çŸOowgÌÖE»ÐRK.Î‰‘¦GîF¢$VÄ”vWã(òÕ4 ïåÚŽH}™V¾¹úQ«ý?öÎ7¶ÊóLóíÎj+µ«~^Û²K£ZShþ`'–qJÎá×kæÈç€á1œú¨¤„Öˆ:Î$#ä*“Œ§°Tuªnei…ÒÌÐ0¤¬þ($(ZV*4´;Š5Qª†
©RSõK3Rù¸¿ë¹ß‡Ûï£×‡ìŠç:ïû<ÏûžãCrìDþqÝÏuÿO£3›²«è­=%oC‚±õtZVZ˜ßÏÃÆâ<HQ™a•#¶ÈlÌ‰—÷«Å÷ˆÃJ¿!n9®éÑRç‹PÍ—Ño+v×œNmÊµÉæpExòGñžµx´„t¼ÓÃQ-Îöð2È"k-+ÚÍý,&?tù*H'5›ÒtÈxÏ_*EpÛÈÏØÆ`¥)q„	HÍ´ÐòæÃîWßý)ŠC«ëë+¤‡0‡Ë?”©]?³®á¨± rœ«µ(‚„Ôà*¿´¥îÅx*™ÊŽ´¶9p|©`MèFTˆÑÛ§ò¢}&ŽÏÄŠÏéR ×Îl«­¶î-«™~£sË£ôÁF¶[M»Ô%tÄz¬=¶ÿÁÝûíÛ½{BýÕœÔœÕ
·«}ðAŒÕx†TS7­u«¨™2XÆZèìÑ"YF|Ù’ Åxgª·›nìcI<H\Yà’•'VQWŽXHQ·l+ðOÖÊ¸oŠ‚”ê±ÃUâ Ò£Ku®R™»vbå@è¿~3ì%…‹ žT$°æ±5?‘ÕA®×ÈCÒµÝQäz,6=EÎÈãGö²[2;Þ?HÂÈ)æ@:«ùj~‘`‘Kï
Ð:ÎSï	çòoMíèè¾àŸ‘Ï‚”‚-©ök™}>ñ‰‰Ì6yç3¯ê©Ð€ÍÒ÷ùöð¾ÓÚë6ÁÁ{Ü¥èQÚF•ßÏQãrŒÄ6A¨Tˆ/‡yÖtXCaÏÚxUÖšÍÞ¦’Gz:ùætŽ i•rU†jeèí·»ÖýòI"FžáÊÅ"]BÒ‚]Þ¿¼Ì¦µŽÕ@²kMäwàëý ïLE r‹%¶]‰Â&/~4g-ÊóûËìLœ5Ëççdé'{páOù²ÖîÃvÌkü¾»ï_ã±8·P;,P‹	þ,wÖ'B$å[Õ×ñ7ã&Œ6Ë‰Œ0;kŽjŒÞÛ­5N”«‚toÍSü0RÆH¶*¹k’L¹Ga°£O(˜Ï‰·Bt;ç­µÀF)®¹ÍÁbý£Gîé÷à`wâ…rÆºGˆÍaÁ«ª«mpòuæEÞ	.Ê·ÖPà2»Š¨–²…ïló¯õÅ]åß‰<'ÛQg~dÿRl¾Hj(ý’#¥µœÛ­1j.Ø¼–O…¼kŠÿÝäF\+o-GkÞ_”Þÿåì›ž”AFds^cÌ+Ü÷‹4cD7­u{0Ï6(
’…$2S;öMz†›{¦‚9¿uÓ†­{,2ÀÖh&ÝÓ8UZªúðäžCBþŒ§Ì?þLkV[}Å…H-ºaÖ³ÚË£Ýg(NV>©®l¢5²äT	€!3Ô³‰Vj¾eÍANsP»v[mµu/ƒ ·*Â^5Vk°ÚcFk~ëèc[¬‘-ª¡gžùÒƒn¹",Òz»šö«ý>k®öò/z¬âKL&ç"fGx¦ˆžBv{E3Ô&‡Æ­µ	1e@ŠËF9ŽZcZ¼I°X“qÆÁÎ¬ÉaÈ$
RÁT£¾‘…ú­Ù^´òäËÉœµ
i‹5WiõÕÐkClWÕ~x`P¬Ægò«—Ò†ØÜÿæO–µ¬ “›kØj\ò|h
·Ö=Ô¿wçÌ`ÿ‰#;v9>³ÓHmï÷ÕZ°ÚÍw~~õÂÕ‹‚µ
§ú¨•CCljHñÓ8k!ý‘¾šÁZY²ˆz`ã±ïäƒ‹;Â5hKÜ¦ødu–3b'K­ZÖ‘ÑßìÇ64L¶±q¾Ø¢ø	‰ÆªíTTOìšÚ¸5ÍÐ jl¥¾·Ü9Tï,UôZ]]Öžþ4´FËïw8Z‹óåŸ<ýß./¿wùÌòù’ÂE°Ózz*ª†©ô—Dkøiì„2á°EŠŒÆ"ò“äˆæÆš=mçr4c0Ù%²•—\®¥ñÅù¾<À4»[ªp­9¿4[»kÍí$²@H‡¦$‹`¯…²¥ k,¨gÒ¥E˜±–›o\K8ÓÆb9®‡Bäøs:y>8Ù"õÊÖ 3›‘_ù{h*tÖlå2>pV³Ú³4\„QGê«å·¬Å_áYs2¹ÇúM…æÁFfÖtÉi²+"a$¾_{ð2RÒ¾m-	R,îF†Ì9c¶Íi~o-—i+ä¤Öj«ZÚrÜ±ØÄª˜ÓŽYÙÃÖšü®½4­õ“BÍÀS+SÎZÓ™8lŽm:\¾	í®¾JµÔ[‹P˜vÆN`”3©{kÉ].a„Ó¹Á¯³É5[l
ÿ‡†Œ45Œ°úÛ/Þo®Ú6ë2¥Õ=×6îùP°¦Wßö¬
„—êÕ*{Å¿»öZY±ŸùFKð,^c™³¥'kvÃ?2Å[ÈÆhÆhÆ€‚5Ál[í¬q¡9Òkäu6‹ÛÚ¬ÖV[mÝ}4Û’	ê‡×XqG‰#×vã®m9ºûðn…øsypÿîgÞªÕÞ¬ýù[ªùvµï&ÛÕ@5cµþãÿø‡—/ü"sŒÄH™`ò
ÈpÅÃa-ˆÉ^ÕPÙ$†“Ï†7¤G-”êAnA²èn@càþZÙ½5nbµ/0MŠÚ¤®°ZXÛ%‹ÓÃ)«‹²Ç@ldAžÀS£òÀÐàeÂ¿ö»—^ÂYSddµœÕ.]ÎRú×˜Y¡à«X¯lAaªè'ZOmç0­>³7°Z‹Ì~XMÎÚ¿Þüêµ«×Ã:!”ÿNT¿5V(w–Á.»²°½l˜azZ·­0“Û™}“¸ìí:B¥£øÉQã;„ômðTáˆ•7fÕ ·^VU$ª*ƒéVC
iÀl„ø£r½¾W±.¦€†ïû¥|5ôÜë‚ÒØâc•®¼¿üÞ{Ë§hµ¶|¾®
È¡¡º,¶ÎÊˆ2!I~,Uz»J2×pMëØwúQŒ†«¸0ÃÌYL³—<Æ§ý9V(^æàÆáÄægÏpjlær"û–n/'0ÆˆLC˜m‘]XŸ›¨Ý7þ'³Öùåˆ“•Ö»À³]†jü¾PM¥œÚkb	Ü^úèÀÆÌÔ"2>’æØHcþ7BGµ¼·–„ÚèrÖð«\O.7Ìbƒ?“·*tÖ"²…?™!:Ì,|«šsÑZÆZZ©É~wæµ ÌÚJÖÜX‹e9kç®­‘Õ°26Â|…áš2®Un£ËYËiÌnyàˆF.üÒ!Í~´lŸæà :E0Ž«;"¼ÅNv6%ße¶"O1îÁóÇW\³Ä»;k®°–¦AÚÂy-bZœ¢á—}wÜYóÌ›VyIzNž™yoDÝÓãJÙD¸Èf†­ü¥Že÷«o¶ý¯„¢ê)…XÛüÅÍ”<‚j:Nžd-W"4AI¸m„BîÙ<«íy*ûq¿KìpBhÖaØEüÒ½Õí¯ÌÅ%ÒK£ÌO3–ÏôÆ¼2¼DB²kÜd3üå®1¹Áfïßfµ¶ÚjëÞé³¡R„¦ÕcXkë£ê„Æ<<Ž§&í–jß †ÜV+Ž1[M¾ÚÍ¿ürw÷/â65wì“Ù*R†nÖ\x9«7­•³×«nOˆöNìƒ,0Ú”AÊTcœ†ËdÖÏ®µXü³¸¶|HÄrÇ^dXTŸÞ©‘ètEžrcÍ¦[d@Ž”(¬Óf52‡qØ°ùP¾@¹±f¾štåõ3g~ÂŸ;ßÅ‰0Ìœƒ²;¡åÚÃôoûïGöb¨Ák°ÚLif&Ëü+`*,`5¬)µÿê#?Ò%XCásj¬
Ì6k,4^Äf3Ý
Ñýœ"<ÅnÊ;›¨ñ-a[„ìIygáš¯–y†Ddl\köú73,ÊXHþ‡×šÕ¦üPÑ·¸;¼™xHßb^Õ†èa5EF6kÓ€Z€5ûqé¤~µÿí·}|úãÓÏÿË¿|çÿª‘Ô¢XG]ºòúå÷F†^=·|ê|ç‘"DôóvçÏwuu±m­Þ?ÒÓS
å4r«w(ˆDÊ²×
r#1¸Aæ’EdcˆcàÜŒËjn·Øü‚õ6ûq)Ýj›ŸK`MŒ6Æ‹ÆÇúš÷eæ›Ü6c¸æ@Ÿ^Ã<&ˆ[Tx¿íUCÚ#‚qÃ†¨)¹j*…ÜF	ä®]Y€ÿT€5ýÂå]±9ýH2FÒHHßµÆX`­ñð_9ÖôÖüá|šó°á³)…ÅûÜŠ£+RlsfHM5 ¸©Æ”Û¬¶¶±¶ÁIEßb°¦‚È=«±c-nSÖ˜]e¬¶ù®Ã#ýuèô^kiÈHQ#²t÷¨fÂ„8…•f.Õc‘ÜJ‹„á§w“†™Æ¤ÛªkŸÔ\9Öûgÿ[ûæ5Í±»Y^ÆP…²Ý*óÇZ fOúË‹üu&­Ö8P²ý¯•³¶ªŸŸÞ¯Ã×ñNvú#H]Ü¹ÏO)·Š‚ä?hý ÆDÈÌ“ß®ªjÙj[·2mÝ°iJÖšö¤tÓIÀíÚEºÈSlV“>Ih¿á™8LxÆ e·>]™-x6Ì’¾^íÙ¬1Ámö”Æð>­éžÍÐ"¬ÅøÕfµ¶ÚjëžmXÛBžHg@Å[ðÐ¸Ç:ÀÚø~ g¬vpœ,¿Ýjoqj­£EþÉ|5¥ö_µ¶†•|5.™Y9­ùEÒÛ7­iŒjdžÚÕ&&h€­ÍVÓrØ02É.¶N2;‡Ë*ˆ”Ç¦lÖ,¾`¢§Z™åä$Ëk•Éav©…œþÈP¬˜Š¬QN7Ø?„·v€šH±ÚkÒ_íÊ¢ ­ÒhíÌëWÎüäMJ _½ü¿iµ62",sL3å.×?<HolÙu'vWMÖöÖ+ š…öÿ’9x	«!`BÈkç;]ðëÍç¦kà¬)<‰o©«PiZCxa,Ë„y:&é±fé;£s[øU5ÖªÉ1ÃÝ„Ù”â( ÔÞCž’|Ûáøx³SŽW„k¢5%Ê¨ÊRR_m%Ž(]’‚ÖÐq€š®Ú{€mõ·O¿ýöé?þøù¬ÒÀÔ¤…ÓšF.Ÿzä<_©D_µ’2úKš;ëx¢<Sé©é/âOîäL‡Åß8¬1ÊÒ`îËF[1º¹æX§;ñå~K÷×ÏÆ]lÍÀgˆgî1L±ÅÛKs}|0¼BƒÆùñ0óRMÐ\ßÀüÒÒÜÜÜÒâÀ@X›[š§‹Èn¼{|i¶Ev«}¸ë¤‘Zh·ÆN#¹âhíäÉ)6­q*md›`-l\cEq8-÷ˆZt[³GÚlÍw®ù¯‚Îj…¸&irTãL÷¬¡ÄŸá( -¿SdNmþ>	¨ÙÿqÐƒuÁn5WJkaš‹)zˆú2u'ß¾uJiæ|«bF?³¦0Ç1¬ž2BÛºÁÆ	ªµÚþWœ¹:ÖÙÊ:‘eh8Œßv
Ûªl'ôo–Crò9‹‹s|æ“1²?ëkçºÚlÈÿt æaþž{i'B`k	i*vÕâÉ:kNjÎi#_ÉÑZ&oµ–8k99ƒ%ÊÝs¤KÚ> m£ÞlÆ©&=U°ÿ¨8Ûmëž¶ÿŒÈ~ÁšeAÂi+K\± ÚôHà—–uê¾ÚÝ`-:dkÂ,ÝÉgö3úäIºàkt†w3Ê³7ðd’òèYœ6Ùµîk²welïWk«­¶îe7l#3k«¦Yåºµå[ß"OäðáƒG‰€DG9î{fß[ž,’²Zq´ÈÍk¿¾Æ6žð,çÄvÿ~Y!¤û©Dv!®0ª|g!(@°ÂÄv¬6<9º	pk@_“Búéž¦CmSÃ@Ó(ó‚Èaæa5aSA¤…öwÕÍUã×yç&Y[9ùåP¿€­_ÀÆÆµ!XMí°Ù°ö—o8«9¬[ Èsë`°sçøZK~Ê•]wmÄ‚F°Õœ˜9þõ‡ûgvx°HžÕþsÆj?uV3RW®^{¤sµ:&GkúàF-N„Í5oä,ó‰UkÕÑßh@tUEŒÈh#ïivg•¤Í²ÁZÍ`ækè­YŒÍ“MfS'tÇÛê!ÿÕT:Éû{®j¯mÄ8H˜ÆÐ9½r¼¬ñXlÀÚ{ÇŽ½xV{òÉc§_¸õŽ`-••F*ÎX;uj¨>Óß/0#]¤^*uu1ñFbµþ~\µ°Ú´÷ÌÔë²ÖÊúä‘3Ï|N—nž9¸ùK¬cœqZsŒ­x£×GñÏÆ‚k6°8?n¯iÎÎŠÆÎò[ÌR_s~n¼»¹8Ç‹ÄbãXeóÔ5Ò8|qnÉÄë ¶ÅQ^°´4Þœ›Ãfãún_7P;¯:'‹æÃð÷×H&Û±"ÊœãpÙÄ¦Ù{Ì†öhó‰™k>ø6ñš=
œ5Tì­®q˜Ò~k¹¾4Ê05M’(	_¤†[òð ô‹üù„ÕŒqD¹Q¦l‘ÚÜXKÜÍäž'¬_±&ZO}„÷P	‰õv¬éáx–ê)¡Þ–85Ö’êLßÐåRAN¢Ã–NóÕxDDãÙ³N-M5ošÀà½ÆÕEØÊuÏ–Žž\æ×þjd_êòoðQ˜N¨QNk&‡¨µºd»¯ÆÖ4Ø’=k©b³€´Õš6æËX( Õ8={Tãê‡q@~ÇF¯†ôý­©¹š"!m#Û&6N~ñË›·[M.å’8Å{6mØ¾Ë¬µ%NU?J¡A¶Áø†Õ–™ÅŸÕÍÄud5iuà£¯Õì~”•R¬EWeŒÑ"ÜÍíPãŒ†›&¡Ÿ9}Ÿÿ³OµÕV[mÝV›,T@ºà¯¬˜í[ªz<<~øàÁƒ=¨‡wPsT[+Z$îW#ò÷¿þ-yx÷‰Ñ 6‹þÜ–k½ZJ†Ë9¸u²†ÕÈÊ­°5hmZ£¶®Mr„`‘äOÙ[j3M&[yX“ð¬¼c‡š³eÖ*Æh¥:ƒAš-8ŠDIb  jêú¢õ¿ö;’öEP²»ÌX“ã•ÁÚ®¼þÑå'úSX³tÞÊ6®ô?t€>Ø{û>0óM8Íû­µ`5ƒ5º«ÑZ Ë	:S:Z€¡†Š#µ*µVjZcã/7rÚ'
Ë4É·ƒA/|)\£æj1%Lò}Ö”ú"ÛÍv™qÉÌëxï°ÖßÓ$Ø_ÆšùlÄCªÒµÚ¡AØ)¬u”JÃ½ücu…}e•jýEAÞxòÆw`5ì3´ŸóÐˆŒÔÄªÐêòòòã=u²E„fd‰Ð—Ä%—”FúG¸†ìÙw¾‹QÞ]fâp½b¥žqÿCÊk¸eEJ&«Í*ãXßhua¯pb`öl÷ìl£·¹yÏÝ†¹Æz% ëv_VãÎÒâüíÛóÍæ«¦®¶®a¹¡ù j‘×xª9Þ·4§<‘æØ˜¶ªq!ÍòšÇT™ƒµ]Ú…vMb›w\OQ¹´]ÚƒXkJ‰Ž«ÖÎZÚnMC
jŽjNj¾oMCN9ÎÐè]×¥€UŒe~'Á·îÒç²#@¸©æD'WJkVIÆì°–M|Ä¿õ†
Hñ5Õ«Þ[œÌkÛQÖ\9X‹ðè<Ã‘Ä%F\+€#Îj^ŸÈžrO­uD¿FM>¸<fÓQKë<‡%ÊÝ°W›Ò’IŽÔ[u\+Ú°Ç‘î[s¥ñý­µæ–5N;ZÆAòð:H·Ö¾’´Z3ùßìYc(à5W’áï¯ÑÆSû²ð. ‡Þš-kjƒ¶aƒª UùÀýÛkY·µ=²ì§è¶†£fúðÃà©qÉÉ%ÿc:ù³Û©1Aa-µ0‰¦0ÔÌQ³.kÜ1f’V›j®h›­¾ÍÂjð_	³9à9™éZL¥eT„¹P	Ùfµ¶Újëžé³ä?nÏƒdÚzcsÐÿš,Hí0´F!ä_þöÑýÏªÙ£5«ÝºùXM¾Ú…—A·'‹gM!ùæ´˜Ýà«5ªw"ý‰šÙj˜0Tè	˜&;¦kQÓ5ÄË:å Å­i,¦‘.¥Œ”ÄgÓDAîØaa‘ÕP©äõˆát9`ˆ§Fü£@MÈ6Èjðµß½öõ¯¿ñÆßê£¹‘kTˆ¬Ýú‡[—ß\¿nYæš[jþÙZnÚz]ŽŽtdýÇìÜ9òð‰;†+GväX-m†Lb3l8åÔ»7ßÅXK4=:I! ÕöXu•ÙÀÇ-F¬ió˜œ7T†€-ÞŸ‘/åTÌMºe‡ÛF|`¬Ç·@µª‚µ†Ñ5–ùkzÅö«•žÂùeèˆbv.UYÅ†âYÞ¡ÔUQìf¹³®ˆÐÎR	kmh¤Ù{îã=ùä¶J~$23Vse·˜ÔûÝåSwý.ƒÍÈ)‘/Ò5«¡’v‚€•
f[OwÇPi¦Çq¿Ó`Í“D|Sš-Ö¢´ª?0íú,#Q˜g¯¯œ­áª­N,4ðÚH½É ¯³ª± {Õ¯¯»lNCSÏ/a®-.Õ`0­lM­¤ßÌi5Þ=6‡ç—újK¸4— ´KB³µæ|(ƒ<Éªq€»ÔuYuìYSˆ?ñýòÕÔ)°šÊšrvÚÖ¸äà´æ0%‘(íŽ½ÁFg¶L	®qæÍ5GÏŽHe´•ÚÝœ5Iú‹¼ÿ	NiÂ4F»{‘*£'ÈPÐ]Í`m•C!gI¿ånã±	Z›Âô«ñ{ê…i¹ÎjÈVáÎ!êÍV5ÄÆáØ¶©w‘oþË#KZ	™r‹;kÑnÊ¸ÍYaÍüÇ4•3ñÔÒ¶uŒvºhÖÊ!©CœfGTÆ<…û˜úŠY4d”Š!Ó®k-¬µtÏš[ê°%/_3²`ÛZR™äA¦¸Æ™/ƒÔÀ!ÙÒ¯âäD—ýí‚fRùo˜÷Twv¯égo«þƒí#62„Åöl,"¿_dfb¿ÆÌµÐ^\‘Xãë¬Ö
Ù2ÐÂPã"ÞsóLS”ßcíþ™$ÂÓ;˜G&ylˆ'öq¦â®É^Òfµ¶ÚjëžvX¢)=­µŒÚˆˆ”¡&}ûÛ‡?(hûþ[£ûÀ´d»ZAä?Q©íjÐÚÕßÒé	Í¤ß½{ñÔ<F$ë_egÊj±Ü±aK¼P­ª±¢[—2GÕlk-Ã5æá12½O´¦a¡>Ø¬Q.ü±«²S¯Á˜ÓÍb­ùCC€þ‘Ð_mý×^{ø7¾öÝ_}C´f=Öøx~ªÁjÿpë]³å3§blILîw*\?¸~°P÷yß:Hv|gíø‰½;v—öîDk°ZŒ›¼”U Þ¼úî©kW¯^èZ…ieóÖ&e4\eun°ÅÅ>¶¦Aº²Û¸×díÕ7Çª¸cä‰H!OD÷ƒÍ&àStIFç:Ž!¾&°ò–8`bI–1ŸbÈÎX«¼þ^^H¬ˆHŽþ
Ï5€5ýÜÞêÀÚÈÛ/¾øöó§Ÿ~òÆéÓßyþ'5gµ(å‹\yÿÝkË§:pbwI$hNÖˆºèiûo}¾k¤£W=×††{;À8ù{:ZUBºF'LÏÎNx^d“½e+ºê›[Y™]™àß2c¹¦Yd}ÝgÏÎ^¿¾‚eÖ=/PÆSó}Ú˜6??ÏU0áÏÍ‹Ìô²ùy]ŽëBÙôUÍû”õß§÷XTÉdßüI2à-¹‰ÛDn‡™°¡ì7ª­–á¿-pšÓš/}ðøþDÑWãH”v\K·ÄDªq9}YCÜ,æÁ)uµ¶ÖRgÍ…J	! œ¾¼ªÇšCZq¤[H—\‡xaŽ>Äw
bi"ÑY+ÐSÛø"€ž´yÃæí›×
ïwrñˆ‘¸K™ÝeK£ÖŠ•oyûHÝ4Æ´æÑ÷,®Qoêƒ)½^lÈ³¥ÔVh°Yfl¹VT
é1U%¸†ìZ÷ÿSJiÅ»ÖÒ]kÅ­ÖôH½µûÓ4HÅ‰ÉUî¿QµŒÙÈÜì§–Ÿ@ð!G6ÊîAÎjüEµŽ"5„Ç‚FtXû“ýkp_í.2‹Ì<µà°}X‹”(¯~´Tþ(ÞÌX#f„ó3ÿ ‹I"œˆI×löœ+û“ô*Úiþß}ª­¶ÚjëÞAÒ{>ƒµ˜*b—@nÛ£GðÁÃß>xð0çÁ‰ÿú}ËëOXíyVÕ¢¯öÁÍ?tß56ª‘Ád™~YZ¿† ÕÜN‹ëš5T“ÊP›6:qcÚÀ!ÂRHY´¦ìþ°q­SZˆèÏ¬µ2ÛÔ$0e5—aÖXüHBÈ®Lc\S##ëðÖ@¶ÁA–ëY}ýá‡‰g|éWßøÆßß¸!cí¿¼ðkr½>úÎ°öÄ¹°UÓ-Žhä¡ÁõëZ¯µ˜­‹ÖÍÇ÷™9®þj;÷ŽÌìÜ«Ìþ5›aƒjÀšú«½óýk¯>òÕS×^Z;MåŒ¿Ø©§íh@à&§«‚•å—ÕB£:>â2êø¹oÎ9#â2}c¼@ƒºBÒ¿,¹QÃ»ÃŽ4Ä=…„®l½!’'x]ø®WÃPŽ›Ek½V&;LybyÇd­ÉN#:[“yì—7nÜ8vúG?zá{	¬ý«®Õnò™\½páÝ«ËC¨ÄIV?;×:+uÖ°[ÚJ"!ÕÖ 2Téæ®|6Ê1³„þ}
à¬QKœµgÙ…–©¶r½vg=»²4ÏÇÍÍ®¬¬Ìž=ÛhÌÎÎ.Œ¨Íß^â17&R5Žã¸aÌWa†Ëæt5`°& «6!7{r>vqÛ}ÉØ _5—½GßØÜíÐa…Fk¡96— )woÌ.€4±šæÞ;Î¾Ö`®š-Ö(„LcFPâ¬9³¹4Âà¸aµ‡©1Ý‰Lå–ZQ"<óšÊ÷½öÁ Ñ¶\m`´î…m¨ÆN>.s,6X¼ØòC]jÖiáN¼HÖh-e5AµuÅÃÃ Öä®Yt¿ËÛu§¬æŸKœ%yü€‹_pÄ¹•ÜWó?.É×ô¼Gt¸ÁÂä—¹‡Ën09Q£H‚É‰w}H@Õƒ/ÁZ*ç5ŽboMkç5›üò×µÜ´§åv­9­ù¸cnR™Ûµ¦Éý3§²t›_Xhÿ³ÖoÉ­Í!U$kÉ® ÙiTAr?ôÃ6VÃmã,‡>´HÑšùjA¶3óÿÅW³@§-ñ–ÆèžYL?KdC|
ivV£ª’	Ð‚âìÖêÎjœ²ÚÐ4„7Í—B®.±ümVk«­¶î‘>'í±(hXã	þóØjºµBC‰ë'½ÿKdBÄU‹¨Ö*²ÿƒÿ%cíŸß¿víÂ¯]øm3ÃµgæIOXØÚFÔoEÙoæ
žˆ¯nÈÄ-Ûíà¬50Ööa 	6ˆËÃÂ38mkFëä–îZ=d™ç†­5¶%Š¸¨¶«Wt“x‘”ÕZ$A1’?"X[7Â~µŠ‚ÕØGö]`íïÝÐV2}>ßû^(QüÁåË¾cÍL5F)ÎôYÖµ.~¡R)QI—µ!À	Ôv*³¿U3ìKŽxõÝ÷ß?Õ…J4ÃPãã€;(EÄªìÓç¤pÍP¿Hëº `-‚šÁÚùr-ÀšÊ…[€_U]Œâ-,|ù¾À‚¬ÑQMÆ[“ S5ôº6Ö®6•Ô¯û*ohØÎæ+rý{ø¸FÃÃ=õ™ûxáŠÜ5#ÀÚé}çØ1¢ oÝ
°fœ¥	Ö 5¦+—ß§
òÚã.¿~ùÕ‘W_-!bEØ¹™á§1vÁjýð&Zi¤Â› teÅáX NgeØ\2=25'ÎVWÛj^*gÏÆËœ²Zoma ·†_Ö„í&Î.¬H×'zYÜ^™c½ØX2mîºžcÝ=2ÝƒÁocÌÒ¢='øê%1’Oô˜£¿HÎoÙ;Œ/Íhuu‡tbÛ íRS¨ÂVƒ×¶«+’R·uO›ÕäÔH[5çZ­Åƒuv¸6ùlÖC‘³ÆèQáÅ×RoMÉcFâƒã“ª5ªÅwJyíÍ!ŠÖÜÇqTÐÒA­0‹ÙèÌíMú6‹´ÐöCDs‚Ôú†y“5Q^9¥Dï±Æ¬|‘„ÕdÝE~IYÅí¥–¡zx¢ˆ3\k9zmi¢X›èñ ˆ1o”ù…-’‡6ør5ÞEVË·XO˜µ°Ý\äµ F©·æm±mje¬p³Ñ¥u¼éxW¸kÍ¦hòÝ=2­ƒÌ”d÷k(–cÚ&kÝÎÓLÃ‚ì~µcŒ­#l—?Œ­¤zJ´¦K](XD»fÖmŒÿˆü'TûÄ°Foµkxcˆ[¡5£5PscÍ»2ñšÐÉM„éIƒ5³Ïl¢iàÂFŽxKŽG}®ÍjmµÕÖ½ë°F–f¤¶ÿÑ-[~ƒ²HÄ=‘š<5híðƒãû¿¥ý³Zad?¬ª‰Õnþ¸Ê†œ—_®6ïk~I•–öh8F-d.^$ÒšðLM”#­ÙuŒ¡X/ÛCL‡Hù†`m’29&žQB†EŠ¬gœÊ‚¬1L/ÜrÍ÷¨Upq¦‡KéíukjPƒ|µ~z¬hk«kk°vì¹k”A~„íuù	åöGCM¨–ˆçØûf·K`ÃÞáÊ OPÙ%Z;°åX­(´_°vé_½pí³Ô&A­ÀfxŠáFWYPG„5ñ™mHÓ©¢H:®EéU¢c!V9TQê;)X…3[t•Èð+›ä9,7n×FÇGRCãzMÓö½é™jøƒ2,°¯Ó³‰ïˆp<{„,íÝÑ˜f»Qm0þ{/ž>ýô‹ÇNSùÑÅ‹Ðš«!F†‹ï0 ¬¯/Ÿ¹xñõÀÚ»t½úê:mx+Õi¯Æ¦µÝ°å×u²k«žÞ®‘:ÆÝP]¥—Ü/ë'Ó~BSÕ¨Z|V´V]8ÛÛÐ¿ ÿÔ+³½Ýóóº‹S6ÚKäcmV.[£gxF»­¬ÍNÌk‹P–xJƒhm©·{nž}g&åòçÈe¼Ö¡y±¯oÞÝïx_hPMäxSÏREÙ×¡Qy¤JHa€‚hß¦˜p×à5¼5ý†…¬Œ‰dsVKˆ-Ìˆ±8¿ŸS4gDcA†AT®ñàpk%nÓ©µ62ÿÿ šƒYrçxíyAni'ì4ÒŽh­EyÇ+is`-ŠÅí¢þÑvÊnàa‡Ã
ó!#5ï±ÆõÆûNü"ÜÜrÂ‰R•Y ÕVÚêµ]‘üýÒ’ÓÔW³SBEgŒ!‡g)µùPpŸ¯NÜÅ‚È‚OÁ7èÁj1ÎoÍ†Tn˜%Vš®Ü`ó¶Øµ–Ï‘ŒÖÒVkÅ½Öì‘òƒ´:Ò×þÌ&-Lšma°–ýàBcÀÉý"¶PÉÝÀjæûjG'Uã¶‘)"Vó¬ÓOÀjêm’›2!©]´ìFÄ,tc´RG»i3§ÍÖYMc`5}1CÄ3^ÉÌÅ:‘šmñì‹Ú¬ÖV[mÝûk[kÕ”5‚ŒÕæpXkh€µÇÇvÃjRkV»uëƒ[Ö
û÷¿&:!ô„’³&‹Â”¹gyX3Ž‹°Ödm27­Êl’‡Óàd©Ò=µt.?OýsM»Ô`¶a°XƒÕP#XiÃYV)X³ŽØ«ål´.šaâ×dÂ@k-5øCIÆÚˆ‚û_3XûZ`µço<ýâ+lYû‘UA~$X;óæòååu(WþÈ¥‹8ÿõV‰É3#6›9q ÿx©³²S
%bµé¬&X“B§±_ÿz4: 3àu´!£QÎX€µ
(:„&j/"FcI	)%~€+,÷T¹ÇÁ—Ò²Í¾cãò¹jcH/*c!#ÀL7ÉJ!GåÄ‰ÕùÂ5íªqY¥¢,!xdyOÔ•‚ú+¬Îxd§œµá:!]ï½ø¶œ5`íØ+W.Ýº¥šG3ÖLÀ×éiwóÚû/½ûxÏãN=ÒÑQÂê?.`ë$«„F=A¥RG×R¥Ó~©}dS›‡”¦´FÆþõ…}Õîñ……‰ë‹‹Ü˜kÂe££¿¹­RGesµ†Jg«Õ…ˆŽåÂ¨†‰••ÅY½d~¬ÏÜ/Äå‚(lin`l€—éÝÖúœÂ8¤E-%ž¯Õú¢µfŠ×¼r`^oL¶Ù5hm½»Dj!	Z;If?—š¬ñK•eAjÏ	Óv\®ßZA,$cê­9§1GN‹³=ZB:­¥Ã\nËpD¨Jy­µy–ðYñó^÷È”ƒŠ¸G­ ²ð·d†ü¦!÷40BÖùV…¼l›§#«!o´æ°Æô”R`ŒñLÊ€±xW„µT(Â´-É)´ÖØì®ß_ÓR‹§½c!.Û§êæ¨Q¯ËA+}¬aª%ëô.'²•;yÉÞµ¢!×¯ &{ä½5¸
Í†³­šã‹w­ñH5¦´1¶ïZ³ë”Ör¸ÅätV¬ø„vZ29¨y!d‰ÆÚÖäî²–•¦šj«´Ö ƒ_?š¹¶ë$¨ö?LŸt»=«U¸mXcÒF3ïÍ¥¹f¹}kmZˆÕ8ørÄl°ÅSYó4ÁÓšŒæ·cï6‰²6«µÕV[÷nÃZtÑ”Ý/m¸nùè<ü&Š;zXãØý`sß3oÉU+f5…gX$°öob5b _–&V³2È^ƒ¯0Ø”Àš­Ñ´~›R ¡±ÈÀ;tyZFuZkˆ8ÊðYC¿ µr:á’ ­|'`¤aMK5Ç.Óv-Ok¥`¦EÕ+¨TÈhýýGd¬ñ }×º!«‚üYÑW{þØÓ1^ä{…vØg®\^>sE#± Ò[o;«=ôÐàCÉ|é?¾W;Ô™a\µ,[dMV³FÐ7/½séš‚VÊ™*Dµ§¯³Xƒ‚ø\F¹íð$µýo²Q6˜¸ªzRÄÓä‰h1ÉP>Xãº6N}cOG¨tmÖÒ«ÔU[/ À8¹)XSÍªhÍ<¸`¸õB{Mœ6H­›·õ]Šz:"Rµ£F•õ¬â_”-Rbè‡ÔðÔžûÎécOŸ¹tëGWîA:¬)Xä§¯\¾tóæÅ›:º 3¡1Ã%…÷W: ±@¦?X}*\Väíé†Tç2Š•ÞD£øj³s+×«×Ù¶Ð{v¾:ÊâúØ˜êgWÔ6ëKc½×¯ã±=‹µ6K¹$¼¥§ðÇæ‹'ž]	‹…ê8‹9Áñ 9Vó›!|ÄÌ6;m»ÖúÂ%âçx×“ìçÖñ—ÚBõÀÞ¥Ml\±kÍ2F,sDanÌòÙÂ…¬5?udƒƒZ±·V`¬qrä!Q
ù@q×5=:"oy¹%æƒ/Ç8ò¯Òa“¨Ñ–LzØßa•XkþÖ*[„!/>û6ÊÀ¤q…iª°yƒš)¿QšŠSZÓ¸K¿g¿ÇFk°Æ§ëŸXh 2Jâo~·…rè—´UH|Ë\'ë¨<XV¤æËxh(åÌ³´Ž´q_”Ñ%GT.]Å@ÍÒF$SdãXËYÓ•B[|©¦ùýIx¿5)O!ý³ÌGŒØPÜÛ±M‡_°Ø¤Q©¥YŽËúFXÓHèHÖ ›achñ®ÇÔömø×€5mZS.-ÿC2WÑŽO·îªaí?xs´HVALÜÕ¥ßðjÞ+BS‡6ˆM¸'gL§>~wÎ.½î±Hw°Yd›ÕÚj«­{¸aÅÞjìß¿%‘ýGµýk4Æ>|,ÈF³ùÍïÿ—@®Ý
›"Hùj\½zõå€h8jœ¬œÕ¢M	-kHAyk=µÐ~Ë -˜3a!Øà,wN@kÁË7vˆ!75¬Æ%|µ6Rž´¹¢¹+r£­]ø­ÐO;ÁÚ	•@®°v€Ïå5hí¯ßxã¥`¬¬‰Õ€5±Çò›ìZ{3‹-áa²kIoNÄH¨„š—®Ù9c°–6Ãö H/‚¼ åmÂ§cD¦á,§>-Øú2XSDôÚ^@¤½Â<9šu¸Fª’ä#«Ñ>MWÀZO/÷í»¢/ÖÖ¸ðÍQî#'ŒVÓìqÞÏ¾}Ì1|„‚Gž€êBÃ;¬*a3­£ÙYîÑ›—ëHfç¾zå•cO¿ræ£[W.Y÷ïwÖø^ÿéOµ×ÕeíÍ'Î½wn„6j¥ÒLØ°6Têè9«a´uwtU*,K]•~TåÄV€ÌÊŒÁZO'?¡£y_m¬A©£ì3¢ø©mdš›P{´Ùæè—Ú‚æ’•67ºP«-œÝ½q±06o°fþ×ü"0u}šƒÑ˜FûtÛžtH‹E‹ö”kõvê»¯›˜›Åœ˜å½ÿœ5M°Æ	žQxM¬fq#k,™B—lÆÈg9#1`$ñÖ8Ö
ˆ‡ÇµäoíSZË{$Iþãà0¯¿¥—~Eo¡…¬ÝX‹é“©r›éÖ¤5Iù£>>ÛÙ§"F<ˆ­6ï¡r;±%ß°¬‰Öâ•M‡‚ã)NÛ®¬=æÍ
š›­Öjüaº¥Õ	®õ[Ëßo]þ¨!íZƒå=ö1¡4IüJ~x³oWBié­-×hÝ(ßq2÷Qx¯9)újŒ¦dßZKgÜG6®Ã™XkŒ‰ÜYK­5SÒj!Ú¿öºì'0míjå¬ÁiŒœ¶ç’E´Ö6Í¢µ¶¿Ø®qíÏ*l[‹©ü˜NýSXSËÇ¬±Zü™† Ö”Ì<5]ê2vC^îÈ!Ðbéôæ²/#}D°¦—±Y7Ìªq7§y¤nð¬+wá,Ãç?û©¶Új«­{Vi°¦¬›í(Úô(öÚ·¤£ìXû‹»§«_š¦Ý…Õ<²ÿßþ¦ hÊáŒ°ý´n£8ŽUÎšãœ×AêFY•rÀšP"Œ2wT¨Ü›ƒ5ø SÇ¯}[¨‚äÜ€BZ¤‘‰‘•¬÷a"û"¬•*7¬R•Ö2ÖN kB5˜‰Hµ~èŠHÁÚK_Säw¿ñ¼ÁÚ+k?€Ö>¢Vtù‰sOüäÍŒÕÜ[³&85§XmïPÿ -±¹"”@J3Ú_.rÝ¼zíÇj.NÖP°
É‡UÃˆTPÈdE7¨—Ô5UfY7¶ZhfÇiUá‹ÏŸ/‡,NÁ÷,·¿×`šO<¤Ý7ô­¬Vy¿ik«¦Æ×„Bf?<K,	Y"<!¸ÔElÉ6»{³W‰Ë+pjµ»Gß¾#°3¼ÖÙqþ¹Ó§Ÿ{î¹§Ñs/°iMEÜºè¬öú•Kg^AË×n¾sé§¼ì•åG‚[¦*Êy"]¼q]€ÖA4¤lµ¡Rgø‰«ß±ðL7¯«þM%:âíÕË£ó}ì:CcãÝ½ÚT·8[í]A³–`ÁDÌµš5w™lÍÕ,åB¸ëO,P9«EP˜f®O¬ÙY;ýÒæÅÑìúúÿeï|c¬,Ïu¿ýÒsrÚœo'é0áBälQS`V×b:›1td†$Ž3,‡¨$ÕŠ±‹iÇ†âÊ(ˆˆ„îbŒHFÍ Ú-„˜ÒTZ[SNjbl
'ž4)'õÃ‰¤éIÎïzî÷áž÷É;ê¦ßÖµÞ÷yž÷]kºf0óóºŸë®õ¶Ô[‹Ðôÿµ•Ü¯|<6@­?¤‹Úú­¶ÜÄiÚÌ–m‘ÕüàÊW…;×RPcJ3!Qq&¤ùPk7ÄÐçx-†d¬+½ƒ¶#½È¾Ê^ècD¼!32¬°¥ï}2Åµ7V³±ÈÏHµÈPWRñ#î­…õí€ž¹ý¡]«±Öõ„&Ù|‹:øJMƒ¦%ÿ|»ˆÍ™¼±8ba¼jŒ‰ÊWâ-!/ƒ¬ï©ùQÜ=Áúm‘C5³)Ì|bNaÌ/ü†/‹21‹|ìQÏ^‹måL1È?Çk1#ifHLa.J…tg-µÄYso­ÀZ3gGñ®5M(õÖÒMk~Ø€l¾,ü]KÞP^mY!XÃZC¼FÓÕÄ­…ªj™Æ_(e$ºj¦ú%ÆgŒòÓd­qiöšØKÓÚopÄI`Ÿ‰ù4Cš/–¹dš4ÆK_Økl’¼ú1`]ƒÕj¨¡ë]‰Ø„l=28òÝ»ï~ŒÈþï.Åacúî?òí¹3;×Í¬æQVØ…¬ö‹ß¢Oûé_~d°f6UA
ãT«ÖLqÙYm²Q™ã¬Qx‡TªqŠÙTYUÐ!”~@gc©ÐHä°J€5"«˜ßÖš‰Ð¬n+È	«i¾ºªí›?½­;c_ËŒ…Øm Úo`¬ûaA™Gù"ÖÐï½6#Š´f›ÕÔf$HS´¶™((Mm°c	¤XÍƒ ³"Ècb5‚ ñš>yGùü Y…O¤2…B¾må‚‰«ÖG_5}°ÜDS$&2Fö2ƒ5ƒ ùf‚µ¾®ê´’nŽã“W°¾%DZI#l¦8Iu“ª±ÖŒÖ9m\‰/^¹²:•äPü(›T $—f³êKzz*`­òè=¬ˆ¶¦µþxÃãˆÏvË_Ûø4:küìg|püÈÑÓÇyrôÄ‡§O?ùpöeí€kÁJã¬¹­m~”¦bÈ)Ú¬|5ÁÑþm=µUårÏðÀàÙŽê›]î«Ø;2&n­m[9kêÊåSk”6½mýÊ`¬ö+âGj#cª]&vãˆ¸ÆÎç4Ý<ØKI µöC¬7¹aªùh-³Áí½m/= Æx’#7#ƒhl`MIŠYýæ¦ìV[CÅ#±²€þpÁ¸º_8óE4Hé¶5¶H¼5;âÃ5'Mð÷ö»ˆ¡(2_ÑæÉÄZE±ºÎ™@Š·tiÞ™³[Î—ËqþÊ"SçlQÈNj6¡¬·°1,Ÿ±ÙK:Vó¡¥7ÝXš”Ý}suG?Õeh‚±ñÖø˜#©EÔMÂPâ”ÆjÄ@È/¯ÕRcÍ›Õ9¤±°2GTÅoS‘w{}™~•¿¡E–˜’°‘‚ÎkÑ]³–kˆ…ASZY×YÓà„Æ2ŽÎh¾tyÀH‰Òô~7“q=ç&	·¹j"¤ÇúKÙWGÝ
"í³¶ùh‰šd3-‘ÅKIî’Ñ¬×"$BX»l•¼ö`QÕÌÿ’5¦‘’HAä¥$Ç<¬ñ´WDò\Tx^Í³õçôá¬Y{5žÒÀR‡³™+>Í{xs5äÍ¾Öh…ÝPC]×$H)3×Y"FnK×®]ûÇ Ó«-ýÆÃßþöÜ¹ÕçÖw­ÏJ Ÿ«Çj—.‰Õ.üåÒ…±QMš¸Ë’ e¨¹‚³6Íƒ5My5X›Õ¾|y¯ÕØ©NÜ&.‚xÉ`/œ@ !¾Ä ƒÁƒ¨Ta„H%A¨B¶
/4qc¢•V®dØVÔe­ÐZÛ5cÆ¾}m3ZBZÿ¾û"ÚaK/Þ+Ë+ÂÚQ¡”>%œ¯‹'ÇÇýmÒ¢Äjf¬™døÞß§ˆÔM|5‚¬‹°vüœö³3>¸ðrs0Ó¼$VãZ*kPI¤œG©\eë(à•y‰´…P®—å@–ôá‡`ÕPt Î4Ê)CðH¨tTýªö®‰±KL|5iýž/Ãm˜—„Dý°	2N­ÖÖ™}ª5/¬Ïš*ÿ2¹Ì	#?~íÜ‘Ç_û°¶ý¢ õ}Åöl§}ÿýc[Ž?}tKkSÓÉc£‹7þftt£þuÚî¿~YïI%džé‰àÜ•õï/ˆÌ¶±­Ÿ½¹µûž‘‘’þiJeôý`¡À1kS=$}«…_Ã]µ¡áW¯!1#U‹
AØœÕ0Í†1¸8£¯Ø…&ÈúÕÁL5$ÒÒ@KKISª½é±xÇ¿&¼5Û1(f#ýi£Z¿¬46JAi¶·„!DèÏ¸,âYÜ¯¶bYnÛZÚg­Ð\‹ÞZAwl†dÏÌDoMDI.»ËÙèÆà·Ì@sÿÌCù™´ÊYuþJ))ÂtR`­EQ¶ˆ©­Æ–µ%áS„õIËšèß$’–¯öæC¢²ËWê ¯°šÑÚ›»Ww¬á»—EŒ`Ê`ãwäøgóÁN4#9ü“JÀÄñªXÐÀÕåñÿñß<Gj9_-I)Î	‘9ò@v­J_ìÌo‹|ØHÒ‚.ÊSüÝ\þ–kž¯_ jQk>Û²hÏš·nó¼IC5ã5…»Ö&·Ö¼
2k(^%gó¢ì²ÒôwZ4f´FQ¤u\C„C¬a±ÍãvGÖÛÂ!•7²šH«~dˆ‹ÕU‘XÍ29¨vC´Øk™ƒ&Ù"nTÓåÄW™Áš‚Ex¸Kµ0WL†ÌÝ›Èpã	6Ú«5ÔPC×µ’¤GªM0š ‘w?|7˜&`Óˆ¯6wn1×â«ýâRh¯vfåÿíOk3gBkæ¨MÀæ´fðsq•Ðš¹nØxgZW	©ñ"mÁ÷Q„¡óU*½Êán©"Qâ JPžHP‚·&xë«Lw‘7’rÚ¤°Ö†¶»íÚÕBl¿iÆÍõÙ a”ª ·~ïq`M¶žÚqtú³~2#ª ¸_7=jdèn[ØJ®ü=¦EV#´?.âÖN_Àgúðõ3?;+:°¦ÏªMçÔ‡º¬dÂ2- &<M/6=ÛGŽˆùZS¤Š°©dÅ°Ï3vtõ…{rÝô¶ƒböòù(Òæ=DÓ]€X öpÁ³áék Í0XÃOÓRk”A<—¥ÖVí +všª—-?ÞðÚ¹HaïÚþÓïž>ö.ù"ï?zìè–ã¼{L{ä7M‹ßÝ2Ú´xË–j¯6¥m>‰ýaÇcëüVÞ‰xVáŸD7Q¹»©ûÑÚÐpOw3OðO³nï œ¿ªvàãZVC½Õ•Ë÷j);PÁjˆ¹Ú«ÉaMU‰€³ƒƒN¿²Akœ@—]è@µ¨ƒ{XOª× ƒÀ4Â–cCùãš5˜i€!#Ù†5YjÜ…lóWlŠšè¤Ù£Ã—Ÿ±¡0dÄ#üSk-;Ò¶NÎk^»å¿qf¶»2âŠ0àÀïdîŽgH&@§¥/üváLq•k¾UÈ}5*ÉX„|>Ð>˜ÈøxUªD›³§ÇÀÌŽŸk¸¤Ý†áÛØ3jó.kà Ö7JÞ`Ì$§’p¸%öåy-÷6öÞPè´–V?rø*Ž˜)ŸÙý¿SnÆiö?s•{kv£ÃšÞn­¨ÒÐªØYóiQqÅ½¯;k¦ÔYó­s‰µÆáRk-IºÉA™‰’øû’E‹7ÂJþÙ-®9óbÇ5Æ97Þ2çXxf™Eš¬ïÚ¦‡b¾i,ôýJ‘™&J»Òõ:0Wâ³˜ØÏ,0K-×÷:Ùµ«‰Íx ÖÁZã­Ål®ðõ¶ÊÝæ	ìˆÈH´È?5ÔPC]?}V[jl¶Ô2 ¡5fMÛDk‚5Bû1×ùöMSg®Xm¬öµW£öº c‚5Yk(lXSõ÷]i÷*»ž(Oì‡	JLÖfL+iêh Èõõ)ÞX«°°0È¦î’i¢¨æ²Mkå
}×š“–j©Œœt8²ÅeÛ®–8_ À>ô;×Î7XûÖOkìX#°0Ô~h-Ð›Öž}yúÆØÛµ"Áj"3Êð6³ÀXãJ%¹ È‰Ö€5‚<ÛLƒµ;ßAlXÏ JËR¸®”ÀZKñg³ZøXè¿¦‚É.ÊGCj¿ ŽBÊì³¯r¢>Ò\¸æm«ì€Ó–/Ðæ5hMÏ( „GÓ ö[æ™Î‚â„t\™—–…ÁN›:µ3ÞáMJÓ¤ÎXnmEé)îHM•¦?>wN°vîµ¯m òôq`íƒwòi€mïj¿°¶øèÑÑÑ×_ÿÍ–-oA¼Íª~	óC€aKÜ‰ÖÊØöšö²5õµÓÂ­oèÀå¡õ
2á&l#@·†jW3E|¨ˆ‘SA‹&®mÔi
#hÆC3‡¤ñçœ‰2 ÊølÏžƒaÐZ©ñHEçíôNzC$§/=xpä ë/6©)6€±“©äŽ$HXLHý.¥_ª,i¤_—«WˆÅ¢„e>ëð‡†Õ¤”ÔŠ½µÕ\iÊHVÍ–Rš_8¸Eæœn'àf·ìi?Òly—óZ“;ki¼ˆE¡#r,Ð1XšÊæT<eå	Õ"«ygl›f* ùY`§|5k¯U¥1éWgªÐ’†9±ÕXºCËŽÿŒ<[Ä1ÐRÎëLkJ‹];ž9e}yÝ˜›cÂ#Çk¹Q”àšœ1ÂŸ£ ×&W 4ÆT_OµÔ^Cb­ñ(°Ö‚†‹šHx‹? ÆôðÜþˆtˆkú‰ÓO›i1½'B!$Ž13!+4®È‚‹Ö€jfsDoí†âøÇ,öÑf˜Móàkã8K~ôÎh&Í^¤×,”#™]|H£ÞæKÒCDrVY˜ÝÞù+‘
ÛÕj¨¡ë\‰¯f–Ð–A-±m±öaô zX#_dæÌ™sWz
d=VcÃÚ§Ÿ’yÉJ³2H„«CwsM÷w¯âu±[¦°kdæZI³BæEiM¡¹ša†uYCMƒVµI#p¤RâÚ@-Öš4Xžî*—
6­‰ËÚRa«Ú²-œÑf¬ÆÎµ.‚ž6XÃ÷9b°v\Rµ“ûŸ×®4Çµ„s´fÖÆž×…Õb$’³Z€µOþø—
Çî¸£ƒª Y®åk’®h*^n‚¼¸2òD3¢G]`°N¹«)|®ŠaÄ	+uêÓñ$'Bc„®®NÐŽ:H
!-8D¾š³Õš¨O[ÕŒ÷XJ¡k›ÞÖ:Ÿ#û¦Ço8oÃQ¸ËIª¾X*pü$±úýösç¶?¾áÜ¹×Îmö³Ï.žÖÞ?}ô;[Žþì}P-j|XÖ6Ž¾5eJK[[7ý°»À)==¥YM¨¹g¬¹Y×Ê¥ÎÞÚ Á.ƒc#=¤dNëQŒ½ÓF>¦˜ýŒÖPkœFl²Ð‡ŒÊ$ždYLðÆ”jNxŒ¡6˜¬¶'§‘8KÃÃ:Ç†G†GìDº{HÃ{ö„…kÈœ5*íú×OîàÀ`õŠ {×uxªÁC!2À<!–(jµf×)®% æ¼V7dÄ±oGNiˆû$ò’H>û¿/üá%{·h`aòàJlµ\#ìtÃµW³¤s¹›ÔDA[#¢ÅHSv7x–†®"HRImÙ†5(é7j>©DŠ‚Ì‡iØä¤õeÓ'ŒñÌYj~äCÓÚÇ”±Š®¯·9°±Š?ÈIÓy-¶Ç6Ps{­^zj¬±L½5»‰g­¨ÓZ”³š;ké®µø3šögGI§µú›Ölá+	9‹¬3vP@4€Xë`¥e@´eó˜;¢ƒVÕÌR‹ÀV?XÓlpåõŒ7ÈÖr&“4¹¾ânGù/^P©”ÿCpèÌ.ó2ÈðqŽpþttÖDsÿ½±]­¡†º®é"ÿC¨f-°å­±à"8lô\û&°†Äj‚µµÏìêš;PG}_k—.|úž«I"2I#k/’VA¬ñjáXS×©;Ü“TKg‹M QµWùø"êâ¥Õà …x¡v³I5_IÏMÌiVCìÖkƒS×ô]mÓwÁg,÷ÂOc)R3XûÃžø—ùrû¿¬Eb)3ÖÆg¼þËŸðåïnŒ–šÏ‚¸›Åo¤V¼µœ6K-ùkúœÕxœyg±º„Mja#_SI°kºUâ*Ö¸WêR6’@à/È•­h°.ªVk¸”¼Dîí"#**¥Á.>w\6ùo§š}ÃJ'\“ËÕØÞœbV—Zæ
ÖÌZKÌTZ£OÍv3â©azŒ0MF3åß·Ÿ{üñíò×ö_¼¸D{ŸüGªY-‚ŽòØ2:úÊ¯§½µeËèÆ·Þj*³wjÙÙZnªÃ·™['šN”Ûq zÊUøì2¸“©¡4+¢ò	ëdßšÃÚˆˆÉÐà¤IÐˆfx–8g9Fû«í¯{$Ç1Ã,Ÿßó<Êk=?[cÔìáöáÙÜaâ`aGÂåóö%®ËbµÝÀÚ›êu­
º5Ú¼¦OkkY÷ƒ–‰	F³‡_NÒn-·q­ Ò†¸ÆŽú²ÓˆC8Šq-µÜÒZ<féa3C¾6*è¸ì©«–Ïí¿’ÒÀŠ'Â´B~¦R:Wô‡JU~©õÒG‡5[o
ž_³ÆRøúµéPÑýž,¢”>-œ(ÍXÖœH2	Ã—$µt»šóŸ[j9\C©šo ]»‘æâe§×Îk(%þ‰¸–‘gºsHŠ¼æûÖ$3Ö˜êõÇ.’î;ªq¦ÖZ|¤ÁêËe¼8­!G_¯Êu¥ÛÓüŠÃN;rÄ&ÉoÓ8/3t-’½&i+fø
û(e¯Qªë¨f †ê‹ R3'·ˆg¤ƒ°Ž–ƒ5Îi6JÌ0ÙWà1P-¼‡½©­²$HMRöV _>lÄŸõnVk¨¡†®¯¾º`->š`MÐ€5®— ¹v)ðv7¨FsµGä¬­}àáçN¹±6«½j5èÌ+¯¼òë k`Y˜˜a5ÄJìeÏ ‹1LÓÀa¿²—Öu‚l™!£ML	ÐšÜjÖÔky/ Hð²ÐØò²nÏ¨‰àCœŸR`•>Y@f­U &Äv5¶¬UxnU©â°V!bÄ`­Ø_‹œÆB›Õä¬š1ã5NE‹Hb5ÁÚme?•UAFX;ö¦ý¥â¹Ù†ðt·c§³šoXKRû©‚<ó²5* ÏƒDƒÙgÃíà@òÉ•õÛÕªáJ¦}}<‡±Vy]Ã¯Þv
ò”Ð‹¬&Ckh?m–¾?/	º*©_‹+VÕ.%ãq™¥Þ&ÝÒDL¬ã…8­ûžÍÐU…’È)ÝÝ•€~S~O«ñíçæÚþý€¥Géi·¢Hša‹ÕÐø‘Q
7ŽŽ.ž²ñ½ÅpZ7ïÖrÿüÊ¬2«–áöYdZ.oloR_³¿_)Wz k_¦(Õb²±˜ÁnÖˆqL4„ ²ãì`ê–jÏ˜1	Ç$f!–4{6‹S§žî¹çwØå©S³g¯×#Ü`…â5SXÚÀZ_Ïœ©]çÈyÑ™µWƒÈkìÚ´Þúe¦
á©5Ê¼0*[0Î“ “4ÈÄ]K”4[ãtEPãH¼55ñO•–ÎQ´È”Ú_E|(²âçR9£ÅU®´þÑæE–x™ÑÚ¼°ãŒ_kWô¯VNûÕ¶œ(}Ô"Whí¡ÛDTzè:,ÇBÁÿ±ÒÒûçÄ€—WABe@å¾Ú—•gŠ [¹
?îÜgè‹t‹Úä¦¥¯¼º/.<KÃoLÚ“-%ý\5¤áZÂj1)±Ö˜Qk-Þ’ÂÄo;®]}×Z4øœÕPüäsû£ÜêMë ‘u-6ç5ÖvGÎÃR‹°Æ-fËé`O&–ÕœÖäªÕW–ÔÏ„vC¤$ßŒ–±™ÆLqé†€4âD€5]+D’§cK ·4RÆU¸ma­-ÒPC]ïtò¿)#-F÷sBkK•'²”'¾¡HuÂ†Ö¸{à”‡@¢C“õW»ø©PíÒü%gF`†jJ1:Õ¸á°fâÒ“û³²·jÀ1%Ã³ÒÍª.¢­¦g•°­··KíœÙ&%(Q·g	ÃÈL3ŠK€ŠAšXŒÙDmŸrìck5ÊÔM
ÖZi¼œdŒp -M-‡>çÓØÕÖÖ‚½†ÔiDÈkO kßÛà[ÖÔûäèÆH|E
ÎZ;«XÙ¶5QþL)«¥Eª‚¼ðÉøÓóoGH¿úÍÕ(g‘´øJ1,Í–úTQäg£šGùHµ=°Ö%f…=Vô-´€?ë’ €…flJ…ìÔ®4®Uü¨^!I2öÌ‰+PÄ5‹7En§uÆNåŠ~$²+ðª›,LºTsL…ÖÊ­!|¿åñsÕ4nß˜=þìö#ôß°aû1.ùX9€µ‹ï81mÖ‰õ·öVZáOin}ôT­¦ÞCC½µÓöª´qvkµÆl­§5ÇõÇYµ#¬æÁøf1Hµ¡¹X36“TÜÈ#Õóa(ÐsÏÏ˜™1óHþÆbÇúõÄÚ3x˜««v¬º¢žŽÉRZÆ;v<·cÕúL}ë×ŸÚ±þÔ©¡ÝÁ[“ƒcñýDžsöš€j!`{SÆqÆgY[[·Ö$gµ¸°£°2­„,Nðww-6zJƒ!Ó>ÇœüðíGŽlW/¼vù›§ÙòT˜²šcOqcMIªÖeY/ŠÊS'¼ËFeonÄí‡V,ã;…¯Æ¨ìÎRGh†7'ËY¤IIw1nHÕÜ@ŠÞØ—qÔôb‹“—˜êô4-ºß?JßPvu!¡3?t•®l™âZêÔ:§{*d®Q
‰rûÖ’Ù“4û:C>Ä_·'uÖÒ<Èˆˆÿ“%´æÖZüæ§}ÿPZ™Cµh¬Ù‹lá».å¬sx‘`mY¨dÒ5É"Àšz6
ÖV0k¯ZËkB5aÞg+ÂE¬oô_:­1y:$é‘Š{üJ¬‚äš9VSbµ¥D§Õ)’¼G ¾¯6X­¡†ºÎEK¿`ÍY‰ÕƒÖ–*ZSnØsç~ûáÞvý¦xZsV+òÕB3ì¿œ=ûkmVËºª\Ó…ÑYŒ…LYM0ÎÕ	Š©°NQx5@›bãeÍ(²“Z#e„g¹/6€¬Y(ý`E„¦Mk!Ì°O°–Ì2Ø-Ÿ/Âƒµ2´–HFX´ÕZ[wÚµs×ç‡B€¨€ü3Ö[Ön¿õÎý°Ÿyæ)k‚õXÆÚñc'ÇoÎ`m2é£´VMFk-;7/„ÖœÕŠÃEH‚¼ðî»§/|¸øŽÅÍú§Q$%‰©*ú°e kÀ*#ûÕ„½r$-ÌQ€ŒµÞåž¥;Šå¦UNÐ^-´²ó+A±3pžÀÆ³Hþ(éMÈA)¢iÌ`-*rbµðÝPkK…ÀK ™¦d)Ü¬=~Î´Ýàlûö#Gå¶mxœkèÈ££ÓÞ;2z‚·ljñ­oiÛÜTF­«j#ìÍ[  ëê«1ŒV»­k›¡š2Õ†@5i(*_æ	-UAYãìÀfÓãoÏÃe<4¬W˜Ë«ø‡¯êyô°/~’‡A{xDå—=q²ƒ^/¡GéÏG‡¾tØ´þ2˜¦Œ`m7l@
ä¬5¹2
j¢Éo“ófaòVi°–FCÆÙ–ó´ÔàŠ¤g£ 2)…¼ÅWq×RgÍê?©´§šã…¦¹ÝÃ©Ã5ÇŽðëî²´·GvHQ'¼/Psc-£6ÔOx¤0mµüQ0(ÁAžŸp`ƒ6¦y\¡P€j6~I{M/Ž_ÇˆRgÍ(­¨ÿuúIštU—Ó’GÎF›HeñŠ91Ü
¶¤yŸÓÚ¤××Šv­i¨g­E2³µ‰,H›ëDŒZk¹ˆ·3#§n/J¼5dë%ÿ#EŽšM™Ñœ/üµyüç»>$1óó=ÕêÕ?¦Ùý¡ò>‹™ ,É	ÍWãÝcé‘ýÿ5!;„øG½FÀ•ÕOæœ³:ã=Ç¬íf“è„Ý`µ†jèúê«Ûr°æQb5ÁZÈ¤ïD‹<°ü”P­ÈWÃ¾Ø¿?cµ,ZäW^¹I¬f€†Dnœ&.¹aÍ·ªyÍ›X[‡ç3K[›ÐXUÖZïr]
#äÞ¨k³¢.kpj†AÔDS­}Š%‰TBY`$6QŠ ®<¡¯šíUã©0·–­[ªè‰í¼ç¥--TB¬Ýo}ÖèŽvë­·>xï‹O?ýÄ}ÖÄjÖûâ/\<ùÞèøF©'ì=QaÛÍ­ü
Þ†³v+‚Õ<\$AËRûÑ…3g.\øäÌÉ—›`5Ø<‰’Å€±2áªàŠ5©$²‚ÝÈ'3G’{ª6Uõ"¨E	7‰Ù€F])»BÍcŸ¼ÏÖ8"{nV–öl¹N˜››Àö¬u+»Ö©øÑ:aËbëB‰el®…EH†ë	¾k³Ú(¤¦¬Ýf< .öžýþß¬mßn?¾Îšt^ËŒ6´§·¿>>¾qüÈ‘Å¼±vDÖVõìlë–¯6#µÖÞ í ®Øúž‘h¨Õ†G2N[€‹ÆdªY¶£ŽÚmÖ‘:˜h1±Q£¡'ÖéÔìfZÿMâoØßŒÍÓçOÞóÒ“Ÿþ$îíK›_:´s3êæLÔBëˆVxˆ7˜oµSÚ¹i¡ñž
ìöä¡—øiÚC2¼ZckçÏ‰¶ûün
ñô‹—j³x‘
R¹ê‘ƒi¤ób¬Ûq­°Ûš›k¹ß	'Qô\ÅqÓËä‹$#þÚ-½Î6xE+Çi¾°Mèe1y|d«	ÖÎ_~þç´Xüèg¸G,Œ:¬±ˆD55Ì5C5Õ­
’;· ~•N1$v<s´úÒ¨æÁ$Þ›,1Öì‘ÿüâ™s'u\ÒÜ<sË‰Ëtö/qW.å5÷iQDK'Ù\ËµØ×8\n‚*¦ôÇHIKç:;ù¦5—§÷íZsß8ý]ÎjIšgBhÉ…þK`Ì*{a5ýGBÀfÄfÿíÐ>Ø‡ò¬†µv5VÃCÆZLFkf±A[²TÓ|eôhÿÖÂlQ#á=ôeý­ëÃà…¼žý¶°j¨¡L$¨¶t©ª4ÓR®ÕaM°öÝ¥ÀÚ#ß÷Úµã¬Í¶ÝjyVÖœÕ~Á†µK—þï§ïüéO"5£µ)—SpÆ€fkœkn£DA¢3pAAÕWVƒö«µ[ážDE_°†¨÷ƒÜ‚*}•JŸÐ­oŒà‘Á,Ò‚üÍW€Æ¦7sFÅe«<]œâoâ×âÓwR©uË¡6+…¼þŒ›o…£ÞþÖÓ°ÚS[ŸÚúøãf@¢‹°Ú«/ŒÏxëw'ß×êrš=Û¬~Ø°YÛæ{ZÂƒ -\¤°ò““gÎ|xöåÏž‹Ùn=˜\µÏJÛ%s.3…O*Øb¤µÐnM/ë¢ÈT­+|`'Ê·ZÈ‹h¯iP˜&ñ*ŸÀÆ,e°P‹5_(+ÍÐ*s—¦ 1/aðíl\˜`9u˜'¥±³BûóÜº[H†¤ò÷Åø!„Ë`3F}‚5Ä #ã£ã'Žy™ ‘Å‹§Mí:PÛ<þÎ2ït¢o¬Fm©‹m“{ÖS®°6F»²Ø;¶à
¦iŒ!!#YÛé‘ +[ÑÆÎöd›ÎØ$¡ë12k|ò¹Ã;zžŒúÜþŠiqèóÝ‡øyÚµK+´pûh>]¾™L·jˆºyáý«û)Ò!¤ÛÅûv»Òemµ`r;VDSàµ…
H‹„dÕßÏ ¶q­#ôóâ® ÎÍ4áÚ"˜4¦¸QMƒ+¡53MŠR!£·¾àÈÑm~».¡¥íÔl<Ð¤taGÎZót‘E²$äF„à«?e¡Ê ‡^úkèí[Õ˜¼vÿšMV)”ø†ÉÇJb~ƒVQšÁÐÆoÑ×$o³–)qÃìø{ÊýË<QÄgoSÇyKêR¦žZ}åkýÂ×„Ü’Kí6Î‚‚H§~Nµ(Á5‘‘Y·³dÛš†º‰B4®uÚ ùÓÅ¸æ¨æ…úHÓû#-Ûç^ÔkÍ?÷Õ’ÈzÎš=”Û¿VÕB5ä<‹Ð 5~¸µŸ²ƒW­@u5ÀÌÈLÒJRÝ¡MÜÊùjÑlÎ`-~‘ÅIr›5”&ØŠÍµ¹HG”¯yì8o!XklWk¨¡†®{ä×ðÕ´1>3V#¿?ÌÖ¾»técAÞ-=ðÈ·,2ï«Ý—g5ùôÒ¥?¾r“‹}jœl¶×/TË9kºå¨6+K¶¨2ó‹:Ë3+MŒ¦Û¥j/(¡`‘€f,ˆëÀ4Ò%3´6E~»µÚ‰6ŒÉý`›à¥,XîÃq’&ÀZkÞÕê. (Ï‚lÑ²ãcWKë–ÖÜ5ýFŒ¯¦Åï»ï¾§žÙúÚÖ#G€`MU/€k¯þnãËÏ¾0¾Ñ7¬Õ°ÖÍ65AšaZ+g½"H„­vö•
™ý?ªÄ,“ÙÈ¶Iè@VÛÜ×,©ÙÚ•Øê„É:åcêy"¹ÓÇ‡Z®Ø¡Æ—Ó
[ß†i¥
½Îšx/nÐa:3\¶FjÕ•+WŠÒrP7 ç»×¸ª"³Õ¸ÄJâ¦ÖxÖõqÆjÅZ;^ÿÉ9ô¬’E 5¦ý
ÖL£¯=*gí‡¥¦w¬¬Uºg“2P;0¦¼Ë!™`md¤=0š+`Ú‚c0ÓL"5‰q,ët6¼Ç]	Év¬G;´ Ï0Ï"›…#“û\Tf‘¢ûf,ú/¼ußŸß¸“xÑ?ÿùÎ]o_QXÞ{¯…ºóöï}›¯¸óÛõ…7/¼“7Ÿàú‚ `Íêí µÝ»1hÔzM#"kD;Ôâ+k¨C™nòÚ°Ü|³Z612#Ÿ¤Eyc-u×æÄ1n[K-œtãZq”ÿÄC|À‘:nv—>ú‹ýÌgê“{yÞÿ«nµ^NY¤>Ü }ÆÂcªSCýéùZÏŽŸ¬qäiM—»ûõ2Áš\Pø®£cõ›ýò2h¬ýÏÄ<àwX“Ñ!X“ØŸh˜æú{E4ù#±ÖnÌ9kÅ}Ü˜ô£¦ù GÊcZû¤ÓoÇ¯Hé®€þSw-©„4å·­ñH½5Ž:²:HÎ\×µðŒ£ZÝ8È´2ŸßÏ!Yz¿ÎzÖÚpkÜ|‹Oê¯mðÕ²·±d‘Ð10´Y[d°¶l¨V¤Ší´Èi°‘<± +Ù!qa–[.•Ñ­hQ’5§#ÂšŸ^©?(Zjƒ9 y.d|Aè¨ƒ&UÙØ®ÖPC]wý·mK—ªr)|&KMK™Ð7—®­An=üÈ#k×®…Öž»X39«=‘gµÏ.\
;ÖÎœ½	4£¶\´€hÊXd›‘Ö¸kbÁi£)ËsïZ¹¼¬Šè¸ÌÊ@M–šÒDC‘‡+à"×Çz1šÀ¶½c¥fü!	»ÒÚk€k(¥¯·wÐšbkT¬HWu^ÅÃôŠö­QI)þ×ÂùóÍW{ûé?ÀjOmÝúEÀ¨öÿ.?~Q°öÂ/ßúÝ«'7†·»ª¨ÿƒÑèÍ¼™E²aÍSûeIÛá?¡Ž½}ÀÁqÔ‰)`¯YªO¶lÈØ*Z+Á[%CÚj/}ì@·Råy"b]Iîh FØíÕ@Ê*H¬Z—¶Œ¯«k¬JVM©¯arXãûjPNu¤Áš‰Eœ'ÂZ ºƒ­Þ¯xÈ·¢e¹^ÃSÃUã ,’kˆ»¸jÀÚâñQÌÅö^úZW{¦f{Ûk\5­Û¶|ZoØ•¶mè
Ÿ1hv¬™‘Ö•ñ™Ì´áÞ^µ<Ë6 =7[ÊrAvèsì$ðC;ÎlÛ™¨Ì¤¿L™À1ñ™ˆL§éöï|ñ"°{ðö½@/~‹ïøDqùwIè†áû"ú«Ûwð›>{ÖBwl¶®	Ê$^°ÖÏ ­‚QÍ«Ùù£P³ÚÓr|VÇZãÁ4™±†œÔ®}ãš×µ^óV¶ÙÅØÈ0;Å9®&ŠÄ/K² Skæ*ù".«\–m5Ó¶µ~¨Ë¶ž¿m]eÏÇ?7LCÑQ‹ÓC+€i½²_‘$Ú´Ö±¬7°¶¤cu€µe|”xiìY#@ýÆ[DËKÝ˜;tœÊA›CX]HsN³ETsY­eºU­ Cgù'éƒ—?j¡ñêš“Cº4s¤°¨6öpˆÊÅŒ G–/¢®kŽkTŒ‰rÖY´Ô&ò™]ûe}gM`ý¾ØÅÖâô~™­Hl‹b§ìEKPt‹m‡køO+‰sÕ®™ÖnNi"º‘5È&	Í8sÁ!)¤iòýgÑVÓ×jbÙ+¢,^Ò^/Ù—ÚF_„nZªñ¦NØ5ÔÐ?ÂXƒÐ¬-eË–5‘VIt?®qg-Ù"A’¹£¯ºãÉ\¶Èbµg"«… È‹gh¯öÉ§*Jä¦™sgÂc˜j@›Ú«±4_-?2:¬!ÀN¿°;«­–åÒ„,
õí8¥åzC¡\I¸Ö>23dêôîÝ»·6Vj‚ÐÆ††(J¹¬èCj û`948¸·Ö×Œ"¯M¿f¥iâ¡ë|*°Ú®l,bÛÐt³kìXƒÕØØÇ'«½ðÂñãÇ^}•Mkã3Æ_8¹Ñ÷¬±ðeRr	¥IÝÝŠƒÜi¬–Û°–¶Ãæ¸pö_L@l 4N‘kYë2%‘e6±Ùþ>5Z³úÐ2Vã³{ÑšO„úÑ©æòÎ€5î²_=o ß”Öî’ˆ¹Y-îTI£	ž1Ì½•JqOš›^¡'×ÉZsXËVÑl¡ñçˆÏXr‰XWB9ä[ã‘ÖŽE‘º©ëgµ>yò¨&ÕB¿cZó<+•Ë@†ÚØÛÔÒn#ADs^Jx”FlÄ’«a¡ÉL³4üç\;Öƒe&¾gð<›_bÃ?$Îg9œP²0"–?}úü¶>ªµú}OÐb2ÝÅyuýÔ¦'‚½]Þ´	T;¿›é¼ÆÝTÞ_M;l‹ádœ·eµ…	3X‹Q#ð³ZX¢Éc!9ì×
€-–Bxkœ®Â|äàeG
mšýiÙn.î:Å!'sÕrSPãáŒQ-8‘±¶`MÝÊáµ/ôôÜÔyPÎ“Ç@Z‹5êÊ”ç©ß”Ž~Æóà´Esx×%s”È§ŠH–7Z‹Öš¹WI¤cGžÊREs²³Gr¼æ±"¹šR‡æ\V!ÓÕÒD4ØÁYÈ˜4D¥NÏÎ¹Ÿ¥4jÄ{®¹³¦“A¬–Cº"´ÕuÖ%g6¦ºÎZÄµÔZ3bÌ9kFÐ9C3áŒ#î«Õ¥´sòÔÂ8OÎÚ<5Æ6n²Î;Öt eáçTËë¡ú´vCD+%8ÎÊ`Í2AÃš³W|
~ëÐP[›Û”üO~cd-£-½ÔŠÛNh†lQWÍ¬ôõíj5ÔÐ?ÂXUª‚ÜÆ
VÃ@#2Ðš`r{J{dîLµÅ~xýáÃ«v<irVKCû/}öéo/½sV®ÚM‚µ›f!£1k…máüœÓ¬
Ò÷«jÌ˜&A™±ªÅø@¹1¤ÁKUî·÷.XP°¸Aecà5á¦…Na½#íMjµ¶·¶wl0„GT@“±>L!<•½C½ƒ \¯s°§<ýšiÍ£Ek”AîjÙ¹s³öíkáÞüù¼óNÁÚ‚µkŠ&OX{áÕg/þòæãßs[mr‹mÆÂ6uðîj‘Õê¤ö£gÔ'Z«d€l°æÂŠ"rƒM€®ˆU¸ê%á·®ÓÏ…nó¬á¯­ê¡£6ùœº^4‹d>låt®¬*ëQ}«ÁthºËÀL°M3X4uÕj„5/ƒŒìfÎšÖåÐjzo~ž*¨ò‡”™^ÿÝ~gµý69¾={TCì[{ç_«]µà—ÕhËWcÞ+bØ\\Àf	¥ERSÍ£¤æÓ&Ì4å„…o.ÚáÃ;£G)n´<Ê´Í‡öÒ1JeÛöÿ,:h/š`3×}OÿT?8&ªß÷¿ž"¢æ‰»îºë#NÄ’©žîŠ3G"Þé™gžxæ‰Àwo+¶H3XÛ½z÷y3ÖäØ¨º.ÀZ‡íW[c÷,#ÀZG`5Q†i>y	ä¤îGR™Kð¯ç­qxÊD¡«å˜•0›»h¡¬°Í–œ·´«šyqŒù`Œü¹”2œ	4ÍALÚî#Wr^h"Í8m· yÛàÎ¥©ÀšÍIÍ¤5ýÌ5¾,V¬VõêmzÓvÂðÉëkón™¼é¬AmR4ÍöJ5'¶:•þÏµO¬µˆ	‘Ö¢)™k&žËÑ¼Ú¾¿$Æ0·ªÇkL“È#Y&V­ƒº“­ñ¨{k™n®MºmexzØág*{W·Öì¡#¿iÍ5/NiÍå ¦Ù¯R¹÷&	Öh¨Òø-	õ·ó 5•Bvd-°Õ…5$:±¸
.[Ø·àÆ`¨ùÉxey!’*ZB	ûËxFiýÐXÄ<nùûÄ¢GV±2ÞDN„Zi¦öWÿ©¡†jè`¬}óGgjSÒÈ7€5Ñ·$ÁÅ ×L÷wáä}µ´ÁÚ«?ûTÖ^™4w.°f)ýÅ¬r+æPûÆ »’ú¯”MtÖÚå«yµ…uÕÐM­“g,€PM¿Ú‘êK0FSE¥Þ±v5ýêÃY«©ßõ`EîÚeÕÁ1~ã€IÆjcƒ¢“öU}ÃŠ”+W+D4ÌM³]Ø‚ýc8'‚µC-­3æïÛwûoÜ	Ha†<eUŒÕp!/¾€žýÝ(öÛø1ƒ5xª•¦ÙŒÍÝ2ÕÌUKY--‚Õä¬¨­á,†lLV,GZcš•A²F¤†èåƒZÊ³l’ ¹ÐÀ]&>[Zh÷ÜÃ«µD¥&¬‘ù¯W¯ë¬5+¼ŸHŠYhox­Ñhm*f[`Mþ[¦iq³§5‘9‘"T‚J [7Ë
!üºóúÑà£<z]|ö"<|ÜXM°öá‡¸kž<ùÎ;ŽÿŸCí¸hh[ûm·i{šXÍamHT«% †,AÄíû³3‘å(é¯‘øi•
}»Ë»Ø}f:´K€Æn³[¼•Mcb3Ü2™g,žx:ð™‹ ê.&ôÑwîúH³­3Aj[¿·•oú–ï\yËŸbÉÁe|‹­[?ÚÊ;Šã†W÷›‹¶[Åö‹?4ÆÍ°iÍ¬5~ÝâW,…!e$Ô6™«Æ½Ž4rž©¯æ±‹ŒµÄ]K~5LÉ.Š_O€­ ÙŠ%Ïä4q­Ó“1´H¾¸b8]ð0áGÉWìTŒ|Á/}#vÿöÎ7¶ÊóLó›ÕjFÚVý<ÆòÀVP²´“¶‹
iâÓs’9kfÿÈ.æ¬)i¤U£ôÄ©3“IÓ6q
!ÄMÓ”üSgPâfLkÄ²cT ”ˆmK°\“f×í’¥MQ§Òþ®ç>7ï³¯|a>ë}ßçyÞ×Ç†œCGþÍu?×ý~¹}ËÖ-½íÿ$X3º²[ÍÚao{#x À6pM$#ŸŒ>ö-[&·[MKîXqÇ’[‰3E%¥}~øÂ–©r]µ [Û5ôƒ3ÿýCuH-Û:MGN†ˆ›CáÌ<ˆ5§àæ¹5ó7ÍÎìrLCF×PÄ5Ž”Øê:k¾mMë:ié®5—ãZÒjÍw­å6ÆN#Fü˜_î¬ùM€5M&ZûÙ^Éœ Z]VãK)­	ÏÖtÏâD¢ÆìÀGfï¹&63ïL¨w“ +Ýòf»Ú4¡«=4_b­ñ
Íö
¾5ºjèC[­¡†ºúÀ¦°SØ~ô™uë±Ù¿	TÖn‡Ô|pÝ¢.L²õ• k°šä¬–„ökj†ýÂ‡Ã7é’«eZ§]ñVBe›I/
¿ÚkóE0ÐVµyH 	#2ÛÆz¨‡$½¢ ˆÁ±¥Ø?•18Æ¯×ìÁâe}ð!#•¶"UËÅRÏh?ÎÑØØ(›·°–FwŒ•Š…±¡2¥‘dµW‡ú‰æ/v•à¡V]ž	™ÑæÖÔý².Ë‰B°E™qBØ5f‚µÀj–.ò|ˆ‚œ;yr÷Bhí‡–ÝÏå»x$hÅ5+bÄ´ÜÂEþlÞ"È k“/„\ü0h•#ôÁ6t‹°&z™¬‘^^¿öòe½ÉÑçª!Y¡Thïë.Âq€/ø§HðN˜Ú—W_|#¥¤ÉvÓ‡³ª]?Ë,U@ßh·íÂµ–+°f²yqù˜hüÔh·†¥†Ó¦/)bX““¶kb¦¾¢µ©¯?{òG'yS¤‰£G¿³cd÷#àÙ¨aÙcÜ$1"¦êHJic#Ã#Ã5h}è*h7-LC„ë÷n}	\_þÒswß½ñª
GsÏþ\›!´@g4K7÷Œñ+ÑžúÊSo>eTŽ}å»èÑ7ÅX²B_ŒØõÈ½ÚyM=”.Ñüé‰/~ñÑ'ž¨aÜÈ€3c„mJƒÖ”ÙðXâ„#op94ÏVÆÈ]ÈÍâ¹=i„ó:Âûó!ÕtDy²A˜‚|+S®ÁæP–sd–ç-MAn¥ìg§]© jLà°‚z«AUÆVkÀæmÛv¬ÿpiãÆ—zÉÑ’€FNu4Wcb#q@5)]¸§(¹Öe›÷™b	¹ýKþÞ;ûo©¿cSŠ³¯à4úé°—xà§‡o&ŸAP·Ñ”Ä:æÉ™Ã6ø­ƒœ+Ù?[·ÖŒ?ÓLHÂ´ï¤Æ`¤6ªùž5;4øÉ…R\«ß/TóVk×™1R¿ÏZÚ#[“•>2ÛG¢„HUßòï1'Vä¿^·f\ÀšÑé".A %þò2®b’•Æ7‹ÕX#óÝ(¯ä–ÃÐL“†|ñ2g8‘›ÁZ£vC5tÃbûUè¨kA„Œ0lºóöyÈc\5¶«Ýg°†CiÃÚüAÏÎM½~MŸ˜>þcv©ETC±›£$7-nE2(ó„ö‚Ì•øµ¯jk«Øk8@@ùcvHV(p3F¡cOˆ~'¼o×l`AdÃ=éë¯²©2ÚSj.ïÃC+ï¨Be…âÀÏš±ÖúJmcÔPkRs‰zÈý œÆ7M®®N_g¨v‚¨Dkk„¬ÛoéV	ÓX#Cž·
=‹ Š¿Û5÷êÕˆ¦Ežxlmß@åŠx7ìÄX£ÅZÖˆÙWVY9–=*Ì1–9"nAîMµ,î)€dTK55¸Öcö®Ïÿ§¥ }•[Ö ¿ööB©I¢:Õûñ7ÍH+XSŸµÂ@à9É½³våNòÄ>ÙŠc¹y­\ÌÜp±Ö K„V´úG3Üš—¿öóÝ''^ØEOÞ[²6ÑÜÜñS'ß~{Bô¹]8wî\uèo>Ý}ÅAÓÂW‡\YL“®T<.–i”;ºz±T%´ÖÖÏm$)ÿ/`´ïòû±¼Q£U7ªëžôtöÿ6MßÅ‚}ô‹B´‡žˆxöH -Ú>wy/kD³oëýý=Näñ—v“J¯ó¯p#Ñëà^ç½¿&,Þ¼ Ag€”­¦$£5+†\±ö~Z0¯ÕšB;F-ò®HjñHí5ùÞš»kjî¬å"Û’Ä`‹¿tæ·6¶5S˜ÓÞhÙ›»Í3ÞZŽ[‡â•k)XDXèÂT|+µaŒ­•¿9ÔÛÒÒ»å¹çŸÄYÅË‰‹ë¥«|dZ‹—&‚^sÏåAêÇ)Rþj"o…ÔLúKE`K5–©kfÊÌéNµ´§šN5’GhÆ“ëÚ]¯+`sÃL³Ó†¯4ø"‹pNjNîâ¥v­§g¦×Œ×$o¶–âZ>²!Ç3dà&Õë³fgÆXãÔÀˆ2"­EHO*K3of~¬ˆ=©6r›ÅAzÄÕ·ü“¶¾j©ržå[kˆVj–ïcð£³šQ˜ JÒ4óÔÎB|£¡}°õ€'‘æôT÷æ¡éÎU»ËyXû4’Ej¨¡d¬Qì®X{ÌÂ •*g©6[Õ]«W}¤£ƒ£š±Z&\dçìñ}³‡ÏN]:qœ_ ÍZ‹j1XæÜ¦H3Oš¤Zß5 L	—¸÷õaÅ ÷…>ë)«’öØLe•ª=VY° ¯\^:ÚßÔ?T.TFË•ž¡¡²ª µ±þRi¬Z*áÊª,„2Àþ¡*Ùó]„×`ªñ µ¹ktlÃH±TîâÁ@ßÃ]‚¸¨Nƒ§ˆPŽY¯<½…üE­k¼AŸ’µFTú?~õË?ýéSÁ"Á‚T¡§:¬íšØ½èäIL5éšiÚ®féýŒ,ÿ#¬&X«¥Æ‚ÕBlÿß–Šjùg›q b!þÅV£}xh	« ‹Ð«PNw% LA$Ô™hžt¤Ù´z#Ë…Ç"¿®.Hø€ßxõÍ¡¶Ð:x¡kM.pÎ>í–-\ŽìvúFãþ l*ƒÔKø£Yÿüù¯ïÞýÚ®]ahíà³;ÑÜÏ~6ùÎ»ö˜vewÚ[½oÃðF«f€-ƒîq3ÕÜ´nÕ;*4/­³8Èv´”;Âgè
[ü†R…fÀYpÐÂõÙ/üc(j4î{€Ù£= ™ôå»Ø#°T ²¿fiwÆ[Ä\Öê;¿ÎyY;‚âmvúÚó_ÛÅÚ¤†áRä·÷×€i¶mM´v¿Ð;¡˜B+Ö˜U IŽ…î…ÒV5¥‹Hî«qÅPÈyµÌNç5]Îk©·–“ægÇüŠ,å¶ØunViOÑ²»ŽþÍ69dè¿K^Ä2UA.Ã­ÔÛ‹'†gIò3#ƒƒD mÙøÜàÁšùi’&s&î_Ã§EŒ>¬µÐY¨R]«8É»–Ü±†ŸFi*ö¸!5üµ+¤Æûiá*‰¢Yæxæ³óYmàbpkM£[u×ŸnSËÂ´Ý$J›¨±JIÍ#¿Ž1-2¯È«‰Ì¥57×oÕÔ85¤	#uHË÷ª¹ô¨>®ÙÀe»æ¬&3uÖjØìf¦)íûçï¡órZú’ð¿öð@’§¶ì£Kîº‚jLZ¥Èæ«h­ioš-ÖÌ»’´ïl&9«é‘{i±ßµÆ°ÐÄráUºAznƒ¡MÏl™–D2zèˆÔ(l¨¡†nœ±ö™MÊ±2H¤^Ø,µûV+R¬ÆÉ~5`­Ü÷
©	uÃEvNÇY»ðÂ{³ß!¡?ƒjœ7[dÅ EŒ˜½5«‡ót‘öõìXkaëZA¶BÈ~$ä$ÈÑ¶
ÜV†ÇÐ)#4þ*°õª¯ \Cz÷ô‘IÈ>¤YIÕÑ¶ZSul4dÿõA" ‹ÒÛ»JÚ¿¼-Nš–øU½[ÙXÓ&{xSÂM5XÓ–ƒ­ƒ¯²†Õˆ„$M‚
¸E¿¿ñ–/ð;¿ ¿ùÔwî°&=û‡¹ƒ{È€<¹;šÎ°˜_dõ·gÍ<5M°Zn;ì/2sáè¾Î‚Õ5Ò°€9Hž»Ô”Ù8Ìjá­ÕðÊÊ•XY ê
¡1Z¹¬ÍgÄ´ì%A„—ƒco n_At&íÈ‰ÜŠ!ùQæ™Õ?*Êß‹`Mž	IØH“5I¿kn¼Ú÷@g1j¤‰2È5[­Ué"?øÁéw=BI©€|vçÔÎS“Ss¿½09uœ÷dÏÔñsCÀÚ¾}C;˜=™?L®ªËí4rD2˜ÖÕ½ysw/Ú²/íîåw·6/ßøÉ[þì“a{Ñ¾-	ÑH\Ö¨mü¬4.¶ˆýä'tÜ£¶1h_d Îîýû{ï½÷ˆÎ¢¸¡ë 3@)è‹O4‰ÂŸšc}(1qÚÅèk–ZëjÚ~&X7xnJ“A¨‰¾Øúý_{Ÿl;›¤¢HšÜ®]Ãœ5ƒµ•¡t›«ÙÁéÆšk™qYtågBº»–fC:®ÍS
™ß°Ë0-i¡o¹9QØÒ¿”=üOš—Õ¤°®‰­cwðà@ÜA¤‹¬5ÞÒôÃf»-3zÉ˜Ý:¸X°&B‹§Í¤ö¯$†¶*]]	FËø¼Ä†ÛxÇñÔ¬³±"ÑÛÓ'T3VÄiV©ÿ¿±IÌ5'4ÉYÍQMê¤õ3&ÍÄërnä¥«Îú)üÎ~¤ž¯Ó2Gl¦ã­1D2ENkÄA&Þ¤VÇZsóœOò×ô'õpMGê­\K
!9¢³•åá¼øþ(_Õ×25b_¢KÒ¿í%wÝªÅd‘kûk7y'ì ùiæ©EKM²¥d¸eOŒ»ì±á–J#{…ÇšíÕq´…Ñš}Ñã -xoô,b²QÙPCÝ0}ð›Ÿ!JD¤fÂVcÍC8GM°5âEþò/ÿòÕe‹¬.2;;{‰nØ“/=J”ˆ$ÓJ£…öƒlV)é´V+†4RãDŠ´EhÕ£±Ò¦´!K!1Ô–˜Ê£ú}û±þ¶«•Bú<{°šèUíÙÆØšDðcD7Z%ÒÚfUGûŠýÑU©><¬Äú ÓEJâHµ¿:Âd«»{Snê>`;×ÙÕJBã“½`Ô"ùjön¥…ñsAÂjÀÆÚÿ¥!60rûµcM;¨Èüùukk–Ýß+wm¾vØH¬¶gjrßBÈLÄÙ\(÷™Qz	Ö°Òk%–ä­T*<ä”uô÷w kÔ?¢R‰" 1o?ö^f9´Ç/ë+ÈFƒŽa;Öxá´Àj|H%hMðmŽb¡ÉËZí¶PsÖjÏ]‚2£?$’7»‘LKUArÇc˜ÓÝîî}s{^;97wòGÏîœ›üÙÛ;¥Y8í—ï¾3upÏÏÞÕ‡_=ú!ÑYt¦˜–r²¢GDÒ#vÚæÞRïË[·
—‹[Ÿ“ª|˜iøh¿0HÓ‚}Fâ"ó›
•eŸ˜ íê2ÜVC´@i€”{ˆYÅ,Ú£Uj2$›³›ƒŸ8K-ÂO#qÅ±‡|ŒQ»¸ß©Í)ŠåÝûÕûŒAš$hS+µmäWÀj1eD±ð0ÅXçÆœ5õºåÇ)Í†Œ³–âZ2’’š]œi$dn$‡/(ÚrÎë±%Á#î³åTMºò:bGòHR÷T1¦X}k…-L[ÿ`­7†^!²½ô2¬¶eðÁš¬´ˆkÜèV¥jÂ<1ÕÖÃŠOÌæÓY¹âÖ[•ãU¢2;cj¿¦¨ÔV³ÃsEl*â†šÍZ9©¡$Veß8§Ü¼÷Íß6g]W²å,‡Ñ<ÏÐ'_Ûö„Hû®s¸¢54É„´æØÑZËqÖr!\óôþ $òš±íOGßï
½ÕGfK`^z¿¿õäÝÖ°‰ð×4+‚œËXºüÎï½Rq œ°šÕ>ºË,À1Fóûµ¸0q Ì×Ö¸l2É„ç-°¹Ñ…ü‘Ý(ŒR?ôCÿ¶Áj5ÔÐ3Öj°ö«_ý
N­	ÜÄjën‡Ö¤ r5×üÕ«É„ìz%—Õ¬ÒXíõÃÓ—NÌ¾ðë_‹Î0×d§Å‚6œÃÚÍškxÆ"
… µUsÇERž À,†VÚØ©ÖV¨Èd[Z%Vä±!E¯ˆ¡
²g¨²@Û× 4=ÖƒÒ*ý"5Ž•Xýîw\§? 0Ùa¿°ô©9v+TVZXdÕÛÝ¨Ö5| ;vDC­Ý¤µ.ìm]Ô	¬Iƒ„KlÜø}Þ&ƒ5~Uâ!¶YClE_ðëõÜçD—µ cµú°­u¢ASóro±–Äö›±6µûè§›­J…`™AdàX(ªDR°¶ ¤
Öð'ûúI±nÖEØW]¯õê~ÐØ:§Ú›
Ú¯FÆ$§ÌÍ°µ-Ô9§5•´M­´d¾5ñ*eÍR9¬¤÷˜ÐÒ•ökM°PXl˜ÛsòäÄÜÉÝ»ç^Ÿ{»úÎìÎ¹;œ¼ðÎÐÐ…©wÞ’vœë0XË`‡cZÊi¤.QÚæ^$SsëÆ­Ÿø¾æ-~~éK1Ñåì³D†ÀfÔ¥*ÁQé ¶íì3<4¶œ™¦âC Í-b™-Ì{lÆbnÿCˆÏw–=8ËÄç­¦úØrhÐÖ³’ž 0„ïN¤~ÒÜ÷ŸÁ¡Aj³†´T5¤Âàï°ÆwM{d²YÍ`MxÁþ(9;¡"ÒOwÖ˜¤ÜLHðg‘âÚÕGViÇ5ÿÝº~ÖH*ã„¤Ê1NÙHÿy‘Ž1ßX«›‹!Xã]²öj¼}ab±öÌX/ÿö–Êæ-Ì½ÏüÓ)ÁZd5Ã6&¢E¶Y|g¸U¬'¬… 4W»ËX¨Ùx<ÅYsXóŠ>]n«%•Ž×’‡ˆÑN®Õ"ÔpEe@—kþ(§Z~,
×æŒü—¸¹–[iDéÁ,‘NÕ8‘n­NÍg­yäŸ0Ë(<¿fÄˆ†ˆj\:ÜZsÜFBÌøVš¦öäõ;jÎ¾Öøß|H†\ ui²ÁÅ:¡7nÌZ#
„ ‘PÉŠ[ó½L¶ ,ÄÖ_"­¸ùŒo¤Æ1bÕˆÓxµ½>#sÔ 0½Ò5Ö)¬Ù´	•h”@6ÔPC7ÐXÔ6‰ÏB‹5›Åj’úcßyßÔ ¶¶®ëaw/å†‹ðãë°ÚäÔ¥É-r³!Z¬~ÔÞ59$Þ[£¿–u®ZCø±ZœÊm«À5Bü6HjEÛÇGi 6ÖõV^:ÖQ)+v}”ÝQK	¤‹Z°¦GÒXß(+ÁM«²)õ©N°&ýnGóÂ1àtuwËiëRçµÞÎÇËÔ*µÖv¬uv-îbµ¨wsQ·½Ïl¦—2È—ÍYcLµõ¥I Tª>Ë›o¾ù>JpMþðµÄžØ3ûükŸßýf«ét%àÖ†©D&ÔÚêé"yEÀÚ§aÎfy„¨¸€V#ÀúP¤:­¡¦Î_€Jƒ³V‚¿ÔÿÀŒ2¾C°VÑÜ'SGŠVjÚ»·4À×ôª¦bk3{Ï (ª)‹8lÜ íV3Ó`äæHÆ].Â%´†xÆ`âóŸq7Ön´‡íU¢Ev>ÿêî¹¹9¸æ·?›{}çÌÎ™_þòsïîØqîíQ}òúÌ5:ªñ°¾Ÿfœf˜†€äEŸ"@D)œacÚWiAjy¢Aæ†¬ü'y<{âÞï’
òÐ#Ì¾†À3“vš9¹u¶“ÃÐŒ“~¿ßyCaœÝ/4Û4Ž¿þ{=™~îÂaÒR_ŸžefmƒI('Ý|¦ßžùÝû÷[L¿á¤ÄÌaûFÁòŠ‹TEHð7­µfáýRÚ›9M±‰ÃV,%×8ÓPÈ4Å/í>¿¿W¶$’³®Í–Å´Ôª¿éŠK²è<5­¦Ákiš¸kÔA¾_.nÝRjùXËàÖ½ÝÛ=ºPÓˆÔbM¹0è8®¦zõDlj²vôÇÏçâO¿C90<c\))kÉ~5#;ÏCò0é©–¸j‚ïv4¥Ó˜¯ˆiîøhÌWÌwÌÚj^y½Þ{¶œi4dþÎµ|\}±u9™@4ò÷¬!FQöÆpñÊõÖ®–¹zRÒ;ÙµÆåÊs,ý¸&ªùeƒ2!o[©Ø)9»¡ünkb³ C2Ï´`…ŒÖŒÚÅ¬!M5‹Ö±&Ë÷7ì"¤„À}'´dÉOEeü¹á‡9©¹W'°û`ÃVk¨¡†nôŽ5Ä^5¥ôóW‘Õ¤M5X£ò¾l{r]ÏÓ	«%Öæ¦ðÕÏì›¼ð·-ÀZôÅ%VCq¯šn¬›š+ÜDXÒZ:V­×Ò¾¡=ŒeæõmmÁY«´q©%v%‘äˆt ¥ce6Ca˜ËßÿqF~ç”I?
ÛªUhŽ[{Ö×<P.‹ßFFªÇN1oØ€ý®•úÝÈ†”CR	Ù<|`ó‹Ãf]ýxhÆM‡E÷ö¢·ÍÛ·?Ó:¯uK¯Ðh«Û¼ÕÇý/Œ5ŠâHaÇƒ&JpÖä•ìžØ5q­Óï}ËU+„FMfëàr¶ÆkFkV™Ÿ.|•‰B_“I½°Ãf4Áê›ò„„èªX¤*’	Þ
éSVéGíbƒ»8yÅ ô
¶§|•B{×@‰BÄÞ>ùžÅ&~~÷€XgM‚§AX¨‰ŒZ¦¡òg¶òGÑÀe|oè‹Í6°ñ÷ZûO'ÃfµW_3°ÁW›Ý?õö»çÞ>7Ê'nXsF«jùœÆ[.3Jûfœæ”DÔ>aû=ñ(Ž1)ßjâ>ú«àL*çÐþ`x&>3F{]ú='3+-Ç§§ÿþðôø8‹q0M¬ã‡éÁ!N›4£Ã‡/]:¬·.0-Î†}¦ÙßS¡üwùiÖäÑ Ö˜€5•é‰Öjm²á±ºËë}e‡+%67ÖìÈ’Z×Lžî—F¸G4º%È†œÄÑÒÙ×iƒ0ÝÎÇj©±¦ì¼ejZ‹[/ª5 ÛÚ_K½tTlÿH6k…Öâ‚Heu«mÚx[R¦È
È~…tÒXŸŒiaÞÇˆiF:Ý8CI¹cnø£=óH[x oƒÍÚ•»W-¯‰x’É’“£™­´)ÈAíúµ$'lÔÿè('zýH®¤ÝZ´ÖÕlÔ‘ÏkÑA“âÈÌÓ:¨–›ÞŸßÛ <À³ƒsòvgŒJç]tÝ´+É3^±F¨¦3L.[Ûó|Ýt“8B¾W-:
¬²Á"ÑCË$#+ô×àm×œÔœøb:$#%˜ÖâN7‡5þ‚[­¡†º¡Æ¹"TAŠÖ£ê‘2HiS„5¬µM> Zû«ûî[ºxõ•l‘ÇsÃEf§¦0Ö.]øÎ¾_X°†7ÖÂ X3Õ2 Y	ÏR‰à¤–U«ZÖk’û/•±1A[°­™¶téREŽõ´W`5(­\é¯†&Æ=c\°VÕ„ø*Žš°lH÷¦‘õB¸á‘c‚µS§jtWí>vê˜J#•ò¿°8²AÍÖ:7P²°7$}to 3Ï/.êÁÅ½­O>³¹³;ürz_Ú:Xíû°Æ—”Û/EšØ­îj&7Óò$?MQprVË-‚4X›™ššxÕd³	H¼ «;ÖÎ!8§œ`M÷ š`­Â>ÑµŒTLö‡®lý¼÷¼±½{ý(à\“\¹>Š 9ÒÙÝßßÎ÷‹¨ººŠM+fU-¤!§«ØÕaÍ­4¦üåAôS«küË(u²EÈ"_.v–¨„Ôþµÿð­oÍ¡©©©¹ÀSs“ãûßæ}ëýÞzû­h6f8FsNsLƒÓÓatÜ´¯~ù?
ÔÒLB¼>'æQùŠqD»bŸÍ Ÿb2™qÖu˜õa_¼xøõKÓ‡€µ‹'N>$ Û?sˆ¾†G!nMºÓ`¢Eý‘‡jþ¾oÿ!£¼ C,ù“øƒÿÏ™PRgQ¬Dnj°½±0‹ÒÔ›´Â°eZ×Ör‡2ÖšÇAzcìÜ”FÎºÎZÊjKtú‘‰…ä´¡.²]B˜h><Ë<ñ_Þë¦døá2ÿ¼EÊado»³¥··XèÝ2Ø=PÂ_Xß²=Œ8«±<#¸æÁO­5# “Oí6âJ è°\bŸƒ¸Í0íÖÛ#­¥¶šî åÅ?ú™kNjñ0[-‹¼®ä>aä¼–'rýö¹³uå&+”ë®9ËGZ‹o˜ÓZÞ®µhƒåÊl5Ã³´×Úü¸æ°†4xz?y¹Îš÷OHñ8?`$¶ë´×h«f4¦Qs*žÖÉ¡Â1ÆôßÄàí«3-°…bÌÉ–4=ç„ÉŒÕd³Y?6}³Ãšñ›jÑÓSO‹äyÍT3ô?}°ØßPCÝàkè3›Š i±&Û®±[iÓíwÞ~ßÇh°F¸È†²£ZN7l`mVÆÚäo†ÕkòÈ,`DÌæÖXqeAY °ÖÖ¶><i_ßQqX[º4ÀŒVnkkŒ=ÖÖQ&Qd _§ßJ“iÕ¡Ñ1­Æc0ûhXöTí5–1ÒSêaqªZ…Ó†NÉ\¶ï8uìØ°Æ­v•ã?ÁeÇ¨¡”ÍÕ»˜_ç»·nž>)gM´7Óx«kàÀ]Š¤1ò ïUÖ~ú
F«¶&ÕAÞI-ŠežZÍOãŒÂe»VËkß»ÊX›™<þCk¡½€AsÑ¼5ÒBB´ª¥ARÞÙ×Q)‰Õ8RbªTXAH¸Ð–M9ÿ`-ÔFB|ˆH‘½Ö>¢µZmwTŠÍB¸æÞRk±}}¥¢ÞjµØ~¹_:-ï1ÀšéAVWAh~/XÓ¬¶"4¢=yDkì"·…v.èÜûêkª€Ü}tjfüÒÁ?ûíÌÌ»;†ìë­k‰¸ŸæÛÓj‘›Îi¶1íÛêœç˜öP]ËîýÚ#1?„é[Š>Þ™	ÍŠmãY†Ï‚iÆ1-N ]„žóaÀì"Ð.ž¸4sèÈøø	îQÙ]½œÀÙú´faÝ¸½^lG…äý¸iÀj'ôÓùsßQýã¶1Â£Áezj° µ!lP£­!ežÞËÜ¸ŒÒât—–C:®9«iÐ˜ÛÛiÁ•4Êr]Íkõ5Ï¦©$sÄ—ÙSORüKåøÁCóð_YMXu…¤¼‘ïSÞ­›Ò`ï@—Â >ö‘‘SÀšašgB¾ñZk÷·àóŠ@ŠáS¡ÁÂ2þ2”ªnÕK–-ñ:>†0f=2”õÕ|íðæ¯âLåÍÕlLÞ»~dJ¸nû0èJì´úÐ28mà¨mIØ(WêÈ¦•ÙHÈh­q$)#é¶µ„ÁDhQqY×]³#)…´Cl,ò2ÈÔYÓèï/§†ë—Üï0ƒj’!‹„Ê®)œ5¤ÈÐ	›%ò8þHj†g"(wÑuÏÉ¶µHVüíq‹Ç•DJj!¶‹°f>ëD  ý9j„@6ÔPC7ØX»ÚÇ k„÷üãÖ,\`»jZÝ¾úÚa¯*oxåÉ«ÃE|Ãš³¿jNO¿9˜UABkÜ´·+ñÑœ5fäÅ¦`¡EX[ÕÖÑPÏM7cÐ¨96µ°ÚRK‰x¬‡°‹ÑþÊh[»žD(³icMcZ°Ù4ÚcáÛ•×†•.L5iPÜô¶C÷àÏ†äÅªŽô”vñŠQñÙ†U‡‡)ìl¹µZcëíÏ<³¹ôäÓTA‚¿´•ì~âEkÿX#hâ‹J‘Ã¢wìës`•¥öK×(„l•e©q‚Æj‰±ö½+ÆÚäÄñÏ[ƒï‚UBª`V„Ä ¯Ð›fÚ’Ç‹è^]¨Ü‚Q}"7žUxeÉšh—ð¯€HÝVè°M¤È^–íÀ$× ®£ÂŸ²@%dc«¡.|·v­š\PXZóo3°–™lŒß	žu6QYÂ^SQd+÷Â¸âI`mêèGgf~[¢òÝ´×uõÚuâ4/{Œ9ÓLßþ,Ni&L4¤6f’¨œ\d%Ž‘Ï@3c3•jÆB›}]×4ƒ®×g§¦gœðÔ•ûóVÞxñòåË<8-Ã#3&³ñô‘Óèüùó0™–ãö‚ñýGà2}í´9æïíç9ü¦¼×ü£4†¨ûC&ÛZYjqßš<›°Y…(nM`ƒ•‚ƒ5:m©Á¦HóŒW^Ë5ÆÄÉI\çp‹-1Øêóš£“'`èô…zæx¦©þŽ5·ˆHË[
;ÅjkT”*Pså¯Jƒ¥öhŸ{ ‹|‘¥´kÎi¶:ƒHï\«¨N¹ m1Ûý|ò>•3‚ù¹"d„^k‘™–ÛïùóR˜²ÑŽI$ƒ=s·Í-‰á@g¡!¾)ªÕÇ<ä#«[ëd?¦˜/Ç´xÍ›\#¥9þ9ÞšÓš½Nk(S–Óì@‰âÖ4Lw®‘>ÂP'b„K2S-k¨¾µ¦+*5~£¡f#Ãuú–´x_žÅ´þ°ŒÊP[þ¬™ í³©’Éä#1cß”*ny¤´H£­@}µölö:ÃÜ£î¦?â;ôÔ¦Ö€[­¡†ºÑú×kÒ:€íÎuëV¯ÛÂ á´û6}†=xûëV¯^ýÀým`Z½kÊG§ræ(°Á1ÁÚ‡[Ö£‹™³óüc‡l—áZ¨ƒìXÏw¬_µª­­c=ˆæRgµövƒ5ÛV%Ñ¿¬•Ãšîà²ò‚~–öDÒjd”/êÒËÅõ¨æqäKê ‡tSûQb·cU¦¨-€^é †N½ØYzñzqls-jÕ¶µí½›Ÿþç§Ÿ~™m&oÜ
¬‘ø_üô§ÀšÚi}Íœµ€·ÏÿÃ®¹“·,ôHfV©Z›k°f™ý0›A°EÄt‘ÔX›<zü¸ª •Ðo°Vªàšk¡¦QÜ%­¤ÅRI>Z¡¬Usjs-Xk
•‘B±vXmoó^ÁD§ ÈBøA]Å’ CdP¤¶ Ä²zÇ
Ÿ’˜+¦:ò0aµxGÍ™¾Ø±2‹\c*Ê¯£áE‘­Eµ`ûqçÝ?š˜ºpnôÝ·ß¨Žòw¨Í»?Íý´[²œæE?¥I‘ÒL»B^ˆ¥áÛ.´gç&&BDšKpÆÎ³qÀì¢íD¦§etAK³Ç§dšEvº|ùü‘#ç/Ÿ½]>{ú:täìetñÒôi!Úñãã§Ñ‘0ŒŸ>/P;{ö,Ãyymã¢81ßÈ×4^*j¬MÍœÀwþ"d7}äô	žýoÊéP„µ`Üà­‰Ñ„i,Ö®\6sÖx`éƒ|uå
"¥÷ÛéG«ºÐÆiGŠji=dvŸŒy)~×o°¹œØ"¯é”â­™ý;êõXsgMR7*ûµV«)¼1˜“÷ß^ ¸·}ý ”Ö½~}¥{pëK[KE¢ûO‰Ð~Çe3±ýáóÌî¥e€n3¨Þ¶m­~VÝm04ìŒ_‡·¶b…ñ™å@ªvšÚŸÝxæŽZÆY³?|Áiúh¦Ò÷GÙ¡Í™'ŸÕnÓâG×OjWSYöô¥ß œ:[“ÓZlž	™´[sk­~~¿P-;GD«Íºü%)¨EX³Ó5+…tZK­5®ô]Ï‰ITÖn³¶j:|âBõí5EœFZ³(Hx-°”ï2Ó³^&÷¿Œ­øNRDþ˜+Ö4Â`\5ù·EîC±Ì;Î~¢ýœˆiœB6~êéÁ‡>ð¯j¨¡†n°±ö˜P­VþxçílR£6»Øî”6Õ`ˆ´ÖÖï¨–vX³$H~ÿœ=<óÂ¯ª¡@dí‘Õ,d$ôYR ?OÕš¬0®%¦÷w´‰ÖVµUb$#å‘þvš*—;Úø¥›ÖjŒUre…bžÉ7C¶7m´¯©ÿêš·‘êÐ1æfÝZÊ„l6ÝÁiCôŒ—1Ÿ’Ž=\¥R¤ÆuìEXM>Ö=|êXW«¶q÷
@9°m^4ø4¬¶üñÇ·<>ØºènÚ¬}îK8k‚5…¶kŠ‚üzHcÿÖÏ¿õÚÂEuJEkÍ`MÓr³|rÓEé"SGþpùà¢f Ê`-ôÿ.”Z›K²Ö¬Œ‘½g¢µâ@Q©"%±Z©¹}I -¬ûJ{›9$rÖ}?¯V‰c…ŸÛ	š™DvÅå™ôJ²•Éé>™ú0Ô`Ín×2ô–É¡1hÙÙYÄBëDEžu6—‡÷‡_o|üµÎÖÞÿöÎÐŽ·/Tk¯ÕÿynHS>¨åsÚÝ‹RNËÖ<FJ«qÚ®¨=jÉ ^žU¬þÎÙý$ëGB›œ…ÒÆÙYgÓÔ2–m6.ÿL5ˆø[b;qù"wB4èììEœ0V<ÃOƒÂNŸ8Ë„ ¹ÓGÎŸ¾43.€«]‡ÎNãYLŸ	A"§‘híÐñ}„ŠœŸœ¢=qéH0íŽÏ@r|÷Û¡ÒNDnÅÊÛVX3$[f5ƒ¸µŒL(”Ü­Œ#á´•3[Êg~IÒ4¹Ô’TÈü¢5Gµl_cƒ¥k!š©"›%¼æþÐõ9k^e¦¿¾þ;Ó¿l™•+®”7yfU¡T*´´´Jƒ/½B:.ÿ4éÑiÎšå@Ö¦7îÙvæý7ô©°É­ike­ÉýäRä
upƒÓ`µe|
˜y·^iê-avïËiÍ†›ùÁÛj©±–nX«YÇ?s”	ÍLäq"~ø 1*1›ÜKó¾J¨/‡ÖTc­åyk–i¨¦ËI-¿-6Gœƒ¼ãZò’kBº½&eê ƒbijb­qæñ°Ÿ×b3?®œžYoïšyÆÖ2[ÔÎÖ¢9†®öÔôPKfc²`›edéÿ†œö#xbk3îb³5›þÍßÄâƒ`‘†jè_ÄX£Êñö¸ojÖä¯ißZ@µV¯^Õ÷Ê+yÖ¼Ò\ƒÙ÷.|$*ìSûØz Ì`Íh-²_º¹¯óþj2V“V)8°¼µÿ)]ÕÆz:ð{èn=R¨TeƒY²Ê=C¦±RÙø¬§PŠÙÍha`äâ;t‹<fS-¬í%rÖÈÁUrX«isX×¹pxñÂî‘P(d±ÿáÅÛ·oßþŠ`7ëeÞ«-àÃ§>ñ…Ï}ã_¦bÔ"+Òrû9O&VZHÛµÖ	ªÉA&mXKÒEÌXÛ¬Ÿx•Z¾B±ŒDˆ b"4mQ“¦(~¸Š4Ì>ž°uÁg°¢v¨É8( ’úbó×le‚¾È‘,ÑS[”Gúf·h-¼¬³µI*†zJx¬Yð#È†*‚5‹J%µÓ8ìô¯Üì¬VÔW Kø®uy‘ûNü´NÁZ'è:Ñæá‘òÄÄkƒç~C²Ì¹²¡ÚèhíSë­”Ô^Œ2yqZÓœÓÒR3©«tÀd$V>¨æføg
ÎŸþ½hŠ÷ðêFFç™/c¡ÉÃ?“ ³3—¸eÅ\2¦óÓSS'ôÅéK—ÏN_šÖ.ž5Í™?4¹OõŽ‚µ#ÓåÎî¿0©-i~	…¡ñÉý‡f&'Îœß?süÂ‘Óg/¿739Å×.í¾Ú}ºxtüìÙKÿýÔ¶{î	µtÛ6
"Y+Pä~&IE\Xj¢5ÕDû¤kWxõ£ÍœQ~—3b‡[®¹æ¼–˜kœî­¥ÖšÛkñº¶RÏ'ò—)Îê8ki›5h–gÚGVk†­ªYüæzúÓTLÎÿ–¶t÷m~¹·«[m±­)¶•AÚï´ïã£)¯_ˆF?lµP`Å'dû	ï!¹É"·~ôVÂúU ¹ŒÈ¨ð–dòE#m8wøÁé«p$¯cå´æ{Õq}»šT?ŒÅ}ÑT†\õ]7Ôü.s «nç¶,­Íg­yÊˆÃƒdÀær^ËuÖ8ãeb¥5’þÚùò 9#¨Ù˜o­KG„ÎÁä¤Çøuë6¶ª¹—ækNOígÈ±Ô²°†â¦µ€\¶‰Ì1Ooôe5®¶˜cLˆVIndö›á>wØéXÆ9,‘áŸ’O>Ô¨€l¨¡†þ%Œ55Êo'R$
JƒÓÔbmñ"ëÖÑ[jÛ §9«Å"Hc5K‚ÖÔËéÒqÙj&­ÄgÖ€´( Nƒ„‹~Kdµ`M›ÓÊºÖWÆFÊåUô½ám¥Ô±mè±Ñ!e@*ÒÈk¤©ŸßÎYTûH1ì©™)cÅ‘Q¸1hCŽnˆ…``H8IKÍŠ)YÃƒâˆî,¼xìÅÅ6t.l} xq;ê^ØûtïàÓÿ­‘¹å¥O,â—þoÐdí³oþ—‡pÖ´gV€s'¿õü"«Õ£6XA°-PD_Í‹ ³QÀÚÔÁ‰úºèzÝ-,É)cŸY¡X€¢(…qhQÄNSµŽ~DâH±be’`X{VÛ[jÅh
°¦\]ðÏ@»ö®RSsk± ?·v
Ä‘”ÚÅ‚›‹Ø¤„Uœ\Öm­ÀŠçYóÙ½ÅÙ—7Û¶Â…ÌG9k,°ÕÂ6µBo÷pµºa°µØ´¡ú7'ç¶Œœ;÷ÖovD¯ž{·Ê˜îQ3LK5ÛŸ–ËiiÍc´Ò‚fA4éJ3	F;¤Éøì8ªk"3N`ì"›˜ìÄ‘óÔ:BbŒ¡æñÄì´L5.ê7^òÞÌ¥÷&§X^šš½DÑ$çå‹ÇßãÓrãH
™¹09CÑã0v¬›æUãÓgýrffÿ~,7v·½ºoFÙ"ZmšÄSÛõvaæôþ×&÷Ÿ?1ó¦™³'Ž¾ð[@²XHBáÅmÛ€2ŠìP 4Ü›Hg
‹¤€/XnªæSñm…MÙÃT¯
2œuì5?SsÍN—ç½»ÉV¿›§ï§@–XC\QñÑõ´Y»¿KiwXücHnA-Û†ÌWÓÿ)miÜÒ]ÙürWûà`o€µSÓ¸XÑ¤x´vEªêcÎ5Å¾Ðû®@Î¡ÖR°v+€©Éè3"•Ë+V7&ýÔ²­ÖœÖ$-½¶œ&GÜk¦‹D¢Îë~Í•xiNëù¨O®L.`‡MnÅ¹Ò\È¼Ï„tkÉÙJµ:áý:â’S2p‹ãüi‰»–ÓjÍÍÐøáA×äÇó“69ëëŽ{Ï4Û„âÌXWkZÙ¦5†lÉ¢nOàï¹ýÙ„_’ï]Ó+¸óŸÃhå•œÿ½³ë:Ï<Å&Ø¦è,IXRU†\E¶h
ÒXò°3bJrh~É2ÈˆbÉU*Ù@K/	Gk›Ù¦¶ã¬˜Hþ¨Ävm‰Èh˜e,LÌ‚BÀÅ Ñ$SNáBò@BÛµY{×[€ìï9ïÍÁ%¥Ýœæ™{Ï9÷Îð#3JÀ_ž÷<ïuñwåiùÑ7“H—Ö‚Ejª©¦ÏCkŠ¡öÑŒ5 ÀM1÷>¦È­[7mn=l5X-©Ãš+ôZ)ÏüèŸˆŽ´BHÄÂ²Cn¿Õ°Ó’² %f/¢$Á5xµn?}|»ÀH³Öièxg§<V¬ÑT+çÖÍS×ÿ0?p@³t`ê5ilìµ×ÆmSã<=n/{m|ü5ƒº×L¿Û^ª©zw­?sÜJ~…¿æ²H~uä¨†ÆÒë3£=c¿:>Þ}âÅO«FÎkÏ<32â<È}¿ù¬Þ-`í›k¿Öè~ü¯?œ˜|ç¯Hñ¸vghëÓ0°bUcå‹…â/~>ÑÜ‡\âc³«ZìïËŠµèzÝ…Y®£^ÁL”ˆ’ùûhpá-±]¦H'«¹¯;½Ã`-k u”€ðÔÅ†ºTžgíÙL:;8šÍ€lÝ=Y0‹Œ«‹¢)cdPØ&•û1¬<»±gvÜ~Aò‘øŒï=ØÏ'5ÖÃýóñÏ“©Ñÿ9~Ú…~^¯•ø¸Cñ£wÔn…Óª#DŒÒ<¦£+˜iÓ–©øÐ”Ëc48cá.®9¿ìãå‹H&˜J—Ø•†Éµ°rmyáâ\‰:FÐl»ìÚ2¦™\´/ó…yØ>c›Ù’,9øly¡\^™)ò¸!
Ë—çfséÉÜÄDn~éòJ±P^^(~8»`©‘åÉºýyÕLÎ^¸¯¯k*c»‘IŸ‡b*?·´¼ôaWùòµ¥òÕQge'1›‚+¸kã­!¿†Î\´ˆƒ6|qšµðIˆÉÆH!]$„ä¾Z’6m‰³üãY~›+Æ	ÏQk°„Ë›÷©ñVYT¿ãÝ‡yãñíU5¼q“h0ÈÛ;61Ÿ<uGè³fuú@ê÷ž7óSÍ±‰ƒtÛÕ`5|º$÷ó!ì
Öî¼›¥ü4ON*„]ÖBü¼AXUý£_Û3î@ÉÆš›±š›$£´›Xkq$¡[%öSc¼MÍ&i:ð,‚7ÿ@n¨ª¬ŒS!õQw-Ô’FÝÖ &Õ#z­%ñZà4AÞd‹\¸Doí{­ýQB!dðÖâ:H_i!#kZ—A{	”æ×Ü„¢¾ØŒFh1­ÙÂ7©ÖŒ¬µq˜“nkŠ2ƒÙfƒOé÷°¦Ã¤+û	úNÞPS_7ÍºÒ¾3m×j5ÕTÓç£/=uß»ðÇûh¦?æRÉ"‡½ïððÖƒÇ#²§óà‘³UÍ°“Rûe¬±amãÖá­ÃÃ›”Üo‚Í$óÒB%¤®‚ÓbµUX­S”¦km§OMµm¡)ŸqŠÉt ÙAOËš§˜¼*L6Þ?õ¢4Æ)OO;q…µ9½Ëa¿kb5ûa–G©9áµõôLûÎwõôöÜqÇ‹¯k£/Ð{m¨öœ:ÒéÍòf½ÿþ>ýñÿÀw¾#Xûtû›~_Æúþ¹›ß™´=k7/…ÜÐ’J¹x‘´öT%kŠ¯üå+Å\°&Rú¨½kV	™c‚/ÎL½²A•ûØÙßJ/µN2ž'{Ä™û»GÓ Á›ÔÈùg¥¯w©0F2'ëˆÉ¸æÝY¾e2®’ÁÐjp°N-×"X‹iM°Öæ¼)BJÌ2qÕ ¬inçóomÛÇŸçS˜øÇ„@‘à©…-jj¡ðñU©šÓPd§Qð Í›iKsùÒ¬D">…<!AØò"çKÏ_–GÆ‰.`µ-h÷Ù<\vyyvöâ%åòP­TZ*¯,^ÎXÈ]½L®öÚåB‰¯gŠJQÖ µ\š˜\WË-¯,€jÿüšË¥Òué–ÜâåRSÝtA­°•1"&›H×5åpØf/ÎÍfË¥9ö®‰ó“ùòæÞL¦X^\ž]¹ú¢4ƒÁEC>(ÏÌHÍ$«Í]«Ë”æÚ¯k ‡Úzía¬2„AÆ¨–ÌmžÔ"RKÊðßí\Kè“¨éæÌoF‹¶ø¥v$ªºí›i'¤†ŒÕëCŸoëÚ:®Q,ÞN)$ê3í6tgÍAjþsç|jk¡ëµÆ·Àì¤ŽÒ-ïGíÁXÖ¿“2HzÐmmËî¾’wÏï¶ŠÝ±
•2ósx
ÎZ\ †àßSmÕÖv!&iŸ
˜¦#µ˜Ô4rÄ¿ÖQIdÕ?­*üçBðúQÉPMrÔÄaZ;ÒógLl>*2¼2(vÖìsE´H-JïOtÖüÌlÙªyjŒö·½5c³°4kMSp¹ÌKSúK§ÒÇë»×û Nka6Â™ô*ïÉ1¢`-p¨ø{¿S³Õjª©¦ÏÇX»W¬&Zó°v¬F[µááa•A>v“l°ã`÷Ùà«%oX«ÍÏ¼£m…ÐÝf§Š —v»$V³'ãvØÜG¥2"u¶CkÖ:Ùµ&d3omJ“[õÕµ2y¥•ÙV†jc/j˜ªpÚ:Æ®kÜî3OÌkÇƒ¤øŠ"™,äß¨Íu_›R"äùq}„×=JÂÈ'za5£µ”KîßÃ¯>Ë–5ýáÿÍo|ë'ßeËR¦{nó†;*¨Æ¸–Ø2æâ S®22Ö¨2Ö~îð¡ø—ÙtSWwŸíD¨¿Nmì¯kXO}(¹!ë]r‰åöw*ÒZë³^×Øf8pxh.áQß‚¢I#/Ò%ô´»½jÀÚýNîIpN;ê€¸æuºbÁ¸Ž§ÔFOæ]Ñíq$Š²ûeÑ".ðÌ˜³Ö›åó]Ûž:}ºõö¡ímSúÈþ¥ôÏöQE¨[jÔÞD	~Zœ!âó[|­©é³ÚŽ¦ÝiK,`0Ñ²ÎËÊÉWhÇ‚v†Åˆ“Væò2QŽb5">™ËeÅ…Ì
³Ë‹K¥‰œXíZyWCª¸¼¸²|›)Î-_[*¬+÷È')fùÉTýº¢Ë#Y™˜˜ NDP6‘Ê¬›ž˜(/^-•ó—Še%Eæ›öË¥‰LK®8KÎÈþòÅr±XÊçõä,Žœ^óáí3år™“ÿE $¥ïÉOs»Ö,¿Ÿvj2Ò\z?¿OMh V³q%SM/ßã0MŒyjñtm\óþÚ‘	©Q Dì®™<®Ý„ÕÂn5-×~™† mkà›ÕÚ¦&GR¡ý¼o Û#·ötwtÑòd]3´Öžé¢(²½w$“=_qÖ<¬½ñÆ'lW£LXV;”P«‘9m#Ü^¤-k|
€ÚuXû²ÞÏ-‚¶@k?šq0ÍþÒá«¢VØc-yö0­Ajþáûª…1Žô« (¤ß£˜-ÖÔn[Ti~–§~~=/Ðª”–ª@È?´@È j®%[Lj!’)©ÑZ¼iMJÄ5ÿ±×ÅBÜá¦a«šMv_-ð[´K-Û|o
ý{žšq˜­‘¿­jZééR åñÎ8²@¶¨‚5ûª!íŽ®<¬Y6‰Ë€üÝªÕTSMŸ~÷ÞÇ*°¦ÒG'®ï¬<Lä½7Þºqc{Ï	Œ5¡šgµ¸cgíÊØå`m#P¶	ì…1I‚µuŽÉ¤Àjîi¶ŽµnàÀÖÎNâ·oßvº£µµ};Q!l]ÛfåZ¶Õœb±
>ŠN¬i[ýÂhLƒÄÜâRg¼&ÓíÅããO8êSYdÈ$1b­é)ûÕNtQyžon¬†6œâÍ¢ËÚ“°Úw€µ·ÜßþÐÚ¿ZäÛÖoÎÉW»%5¤½à‹TU‹µ(
R	ó…¦¦4FÜh%á†1 À,³ÞuÆîÏðMØs& ë³×à±ašÉëg×Z³2ýeÄõÁD"7îŸ?ÂKÛUR™ÌbÕa¦¥ÅjØj,±ê*¡LÚÊ%øknÎX¤ykÑÂ
%/4Ã¸,3¬ÆW÷öÒj ,ä§žþë§ž:î,T×ýYyVK$µJ– ¶Ù5)2ÔâÝi7=æ¨Í:1ƒgPƒË.Ø„=ˆÏC¤¶tuq¶ ¬-ä$¿L^¡¿låê"¨F°ÇÒü•Ë¥e"AÊÓ»f——WòùR~I\ù\ºÀW(¦T²ãòµË“‹×–qè€5êK“é]eœ·Å¥+;Zæ‹%˜‹» ×lqWÞYvå\º¬_o¦®!Åž¶y`¿<;[ÊÏ]`ÈMÌÏÎ–ˆ—/^*ÌmŠ…‹åüò¿<¸J{;f³>ËÐ˜óÎTí˜œÞZsÞ¾Úî=‡ 6ò2Ô…9tÃÖ’­µ˜ÙÂÖ5;#k-´\‹ì-«BC$¬‚ÃÆx3b[×nî¬ùƒ_
DÒoîq¶R¹÷§†‡nØ>5¶ýtuÉlå‘EôŽtõž·>kîo\fµÃ†£u v®Ðò?IQV'“¥ùóÁ¨£‚`MÈ¬÷k‹YAî7ñÛ­¢ð~†°[-ÊëÆš‰9(øi¶ò”f³ñš›×
ì””%ŸÈiœ6Ä1œU’ÍÉ!6q_ˆ*§Õp-…†fk‰íÖŒÔ’¶­ù)‚5.CXd²âô~ý¸?Šv­yV[³2Šï×#)2¼=êª&4K~X§5Î8ºßhÍ[iaa &¬©³YØæÃ%OlFZ<Ím×ÿ&äFÂ[>üiöŽ]Esì\ûâüÕu>ôøF\­²¦šjúÜ¢ ÙŸª!ì4º_»ÎØ°šú­10ÉXÃY»íÌ3ÀÚjÖ¬Åšúa—~äµ}‰ã//ûvs]\é6´Ù*ÖPÇmëúqÆ:Û;‡Z1L¦¶·1Ah§¯›jSÌ•iÇ¦[N­öz?'"äÈyN§¢ª'ÎóäsÏ½46°¹A°f@Æì2I”8b"£äq];V;>6º>éõžågôŒžPÿðN¬½«–ØBäþö·øëß`ZûaXó#7Í„L»‚CN³ÕÖ2ÖÐü®ÉÉ¦;`*ÌuÀ½2PZ|…¿«¯ŸDŽçDj½Á¹k¬¸4HG‚ˆ2ÅjÍÚüFlîp,a]½m`Ë~´™ê«L3nn˜¼¸ŒÀ­*Q$fµØ`‹aèGz&dX5ŽöÞ~{¦·7Ýí!:¤Š×i
Ñ"5,µ“n“š½ƒ¯j¯¾ùw7j±›æÍ4Gi¿(ýÂH_¥’¶¢-ºc¢±•å‹\‹Õ´IM“l³üäüÒDžÆf¥ÔdéRSéÚ"ÝÓ ´%ö¦-åJ×V®*Vd!ßT¼pyqn‰4H^ðñå•‰_O½ãÂòÇW—ðÔÊ“¹¯©Ûå…9?–r%È8I`mbeeNM×f‹y5TkÚ‰Ä~ma›år._,â©­äÒùyfýÚfç¶Ìweºc¯Ì7ìšTÂ?ÖÚ~´´ô)û§ô×¾# å
ÛÔxùA`q¬¹ÃGxÂíT{ðÁû¡‚‡`¸½‚².öÀgvD›×83¬BÒŠR!£”‘XÕl#Ûši#·ŽkqÉÚÕ}<ü/t÷Ý{âîÖ9ûï=~|[ÇP'ÿƒ2uzÛñ)þ['NËt·:B«µ“ýÿà{b»ó“O>Ñ'äPÍUB>tHa#²×,R¥‘®ÂRýÛkwº-„[¾¬÷Î¬5+ƒº¡kŠc mÂ=-£fØ‰á"FjkoWóøœ¸Q±šÔìDÉ¸,2?$U<ÆºÓOöä‡²…œQÿq‡BÈx×š0Éx)F5ŽDTãôP³ZxÆÆˆÔ#F8ý®µ¨2dŒ¬’ÞE÷¯Õo©"Ìad«°e-Øh¶"èT7Í76XãºžÌïa¥¿¥¥‡55«Öl7ôBÏ_ZnFfÀ˜§³p‚o&6«}QT~KgÌ‘IYCµšjªésÔïÜ«j"5ëµFP¿t¯ã4j ¬+'¤ýìbè½¯A«¹kùý·IC‚5Ò q£WLk–>Âk‚ÇfR±\çöö@Wç@:]I‚Ô¹íqŸÞ´ÙmÝ×64¤u‡óQLG*êF==œˆMáqö¹³ÝÂ6é3ÎóòÝ²ét;Ú\£AØ&LS ‰åýWî¿xbô°v²wl¬¿kfC¾¬ýýßÃjßùö·ÿæ7ßøÖwÅj®ÑÚÛºa³OƒÜp×]Ì«ÉgAÒ[M¾“±š0#9
2?ñÊ®LoKc‹ûa$ƒµ>ÑW„†¸Öp™,W}­ÜÏÊëìs¯ÌÊk˜Ö×pf6¬Og°Ø:;›Õ[öÛ íí}¿:Gaƒj…á‡:JÄ
+n ÓuXS$÷BTJ*xL*†ä;sÔëâ]Èèã···Nu=5@GžÔÆ*¦Ú‘Omäd‹Ú‰CjÞQ³6×w=˜ß8ÍÑ¯#5Kz1•ii10šÜ«K…²kw¶0‡¿67µ©ïÙR©Pº2		-/åó³ùÒâ¢’F€®TnQº²²¼L’ˆšVšÊ®­õd¦úHL.—DRæy¹q-ó×.ÏÒóK®¸ÎØb5Ê$¯´4–._^(æJåR1¿ rê¦/-àæM¶ÌS9Ç/Tš»X®+ÍÎwÍ[£ìòdãDžÃÍ›Ë§såü¬ÃÌòL~eùËMsýb@M‚dÖ(±ß!4®E‡d°‘k¡&Ì{1í`Û+8Û‹mäYÍ´J?l?…G™dˆÄ´¬5›"+DC˜‚»Vÿ×’?t“8Èðc ¦Jl?ñ+²½xËÞÚ#üë­µŽOõw¶mŸ¢²7›ÍdÛoï=Ù›é=uªXó¨«ÉM•ÝÏò½Ožß{?&›+SÕç$X“«&«J»k7U%kb6œµ]UíS³3*ƒ¬ÚÈ†bLCF-ÒªŽ`©­´QbÿjMÕÂÅäî×:B	äÚ
èfcÒÿàÑpí†kÈÞ‘ØZóæZÐê¦ÈUCšlÉicÌkI#5ü5ac”Þ_ÅÓ‰Ùý‘¦ív¨Æ#©Òð,Ü_Mb³ÊÂhY÷¤ªýgNU(åYÍ†ðbË	‘!Ë˜ª„›&‚ó´f¥¡7âÆÿKµ¸þšjªés4Ö~OFÚ£Êî?vXÖDjÇ²×Ö`µ¯}mëuí½gáŽà«EE°š‹‚,æg(o´dC.Ëì—<ªqZ†u¶ˆNÑš¦þöö¡ö)d°fTÈŒü~±Zk¿sÒx™£¢;ÎËF“sFg‹’ çX¤3–šr¦—ñÌè¨»zîT×^Ô¬I/Ëcsx†©f< —ÚÿÂ/¾pöÄýÙÑçžGNêÃX{I´¬ýï‰©ñÆ}ÿåõë'_~Ç\µÍwÝµ™²k¿ÓpÁ!5:>+^Vëª¸BÁXƒ1‚±†~^ü/=}}½]²Î²Yf"±¬b÷ÝÌ÷­cÕ×äAkò×9„`Xhö5äàÎk.ëßúe‹ÖZÛá1Ã²…õ÷ô¦2™fªAØ@3ñÕŠõéúf"ûu§²[gŽ«Âw½¢{p »u;TØÅ
ï‰ÇßÞÞ~ú¯OD«ÐÚžÚòÔ„ì£¶OÍ[jo^	ÔbCí§pªpš7Ó40Ê˜§•.]¤ÒÐU@òL±~fV†šÊ	ij&XÍpÍ–óJÍ_Z¢ètv
[)åK¥\ZíÔVq¶J$†”ˆeœ R÷ò+äŒ\¹ÞåI˜\YÉÆ¥”Ãš[¹Z.¦‹yb uëƒôí‹»VH•\XaÃ[©¤-tÅéú	èka2•Êa·•©z„Ïš–Ë©ô|‰:I,µ\cž_{AÜ6“›Õö:8‘;iðÏCkH0 ¯ÆU×Yšˆ/ÙÜ®+p€§u›¶G`À-øí~XTzjðÄ
èæÑý~âcïƒã–¼5† .¶ùáVAíÖãGlÚ’˜Ûo9ü‰»×0WïŽa·YdÒémÛÚ††Z¥4Õ—éÊÞ¶±yd$3úÄXÏ©ìwÖt|úžL5¢úß£±}MÉñÓ 4}TÖµ\n'À†·yÿý»©{üƒøœwnás¹ûËÀš7ÖqÍs™\¤à±E™ýÈHáYµ­¦#ÙÜâOŽ$Å¬¦ac­ÊYãÇÚÈð®jãZr-døD«òûoÜ¶æë C|ÿÍµxÏš¿ö¯Y×ª{­¡DgÍpÍ,É¼H9ám§™{þhS\p.Ú¬Æ5k1šÄ‚#
ýÖ@¦TkkAçô¢
Ïé‰!,B´Hk~£škëfÌÇKµF a­ ²¦šjú¼µÿXeŸÚ£Ö³~ìðáû=ÜÖ1¼õk_îØºuc¯‘ZÄj!	òk…|ÁBE”Û/îÖÌU«$Š0ûBÈ°kÍ]›§f/÷êkhÙÀ`­ÄŒL]‡µ©Ó7fò·¶¯#…É«pšD#vÙ3Ng¬Ù±)uƒN½þƒ×9Nž<uêõS]#¯ôÑGÏ|ôÌY<·çžùÌ¹lwH@›ÙLd¼V	“ôìh¬fûÕø©Ý½gáÃ³=]é“¯Ÿ:Z©‚­9VÃXSäË/¿ýö;‚²zpl¾k£¹l;ŒÛ´LQ­”hQ\dŠÁÅÌß•d¬!X-_œÉâ—QCÕ|AbPÄÊnµzÁ–zd¯×ž4ÝwÑ!ê´æè,“å²²ÇîwÍ³1Ú:É<è;ÒÝKž·e­¡fK‡Â,m$+‚ ‘CˆÖº2ÎjãU"6&ø@«{äJJ‚µh[ééžZ`c¬á	QÅcÛÀéë¥q¨È8º^þXIñ¤Z”÷èßÈŸº×åJÍ#ôcˆ$»´ÊÃ9Ëå~VAÖÚUbº©Ö°LzãÕòÒ,Q…|ù*‘³å•¥å•rn‚G)¬]^)/].N——.Ì×§r@”ÚZç3%rFŠåüþº¦«ÅÂÄÒ+ó‹‹¹–ÔÄüüÌLSŽ\ÇâL¦/¥Z'Ùàvõ×ëê
‹J+ÀÚüEgê•r“¥ËåI¶9ÒyíC:àšÍ_È·¤Ž=šË—ø'rùyr,Ëù™úù‹ËWÊå¥E|„X.æ)²Õ”^Áð|¥ñ2ùðªxô¹"àøÆ3vH¹iÜDXj8G€›.
îg“šÖVí´f£ç5HÓXõH¨„öš-n9Ï?9ÒN/~`XëÎj U.ªLe(`ä“¶6û‡üÔSÛ::Z§¶o{êøT&{›‚ ›oëlÜ´I°æÚO1ÁgÎù|D¤ö'›Õø 5Ã4üOÛ_	Þ ‰Ø	I÷»»IïÇcsnŠÐâË(ZÈ±Ig8<–E¯Œf‡‹°ÎZx¬](Ê"b…8YÄË¯«^ÛŠÜº’«myÄ!#ôMq!dÀ5()*ƒ\=2 ˜Yh	#.29c$Ž‰Fn¤µ¨1v€µ—×Š‚¤”7îªf‹øÂ†8[Ä@Í€iá— ›IwÀ¥jcªëwæhÝàŒyb¥Ž,#ñŒ=WÕ››n4ðûýZZM5Õô9ëKlRã€$¼ÿ°`¬þÃ¸k‡}lÓÐÖ¯mÝºU-±·žÕÖ(‚,É_¡3ŽÀkÎ$½t¸+øë”ŒÖÌHS¼im€&ØÊá¯m<¶¶ÓrÓX3pjt–ÚéíuýãR 5ËníNñkŸ:¥]^éÔÓ]^÷ÜsÏÏ~°ïg?Ø¼y=¹¦Zø¼}ôúÈ Í$›íüç[_09L3‹U€€I	žSºˆ**a5¸àäÉJU”AšµV¡µ—×¿ClÿføÌÚf®<¬Qéa-¥ôv¹­Âš¡%ÀïXÃúiq¢{¥;CHH°ÖÝÓ‡è²Æf5g¡±uZ„ÓúøXhf­gÖûš-„JžõChÝÝ½ü6ÙtV»h©ƒÕÌYkTËkÖÐÒ]Œ¬8ë5¥•Ànr×T‰ïf_ŒÇÝ±Q¸£Á_‹Õì>ê¢ùõíuÍÇÑž:Nñ£o¾¡ZÈé®ZË¤Z÷øIÓœ“Ëx4£ñ¸k¿.Ûö´åRýt±¤Éb[˜ƒ€x‰8dÔAr9×TW(ãh•çÈ€,¦ÎášÍçKtR+ÊKÅ†TîÊüt};ŸŒŽhÅBn1Ÿ©ß?3ÁN·Ô|±¡8nrþƒ½¹sçŠ3uÓÓ¼-é–sóå¢Þ­R)5?ÑÒRº€7‡Wj©/–xmKKùâìL&]ÈçJ¼‚GNægKÅsïü²”kÉ`Z–Ê“™™+WJ+Úv·üAê/Ø©¦Qb6Ö ‹ï?DÔ z°r“#î˜vh÷nðÀ	H¹±0T»5cÍ{jUÕ
ëQ*dRÏ5;5Rc
ç¨p«œ¶Æ•Ú±p¯ªr§ðl¯³!5•@?¾½sÊuŠt¼¶ýHÅfë§—ÆÉ“½DøoÚÔ1´1ÀšÒE>Q7lÙŸ4Z{ã“ç¢Ç‚£76²1ß¿3Ö*8¨Äf ÑÞPšcK‚5J#5Ëc©ðcä©ùE¸£š!Òsò«5óWâÔx#´„VØIŠú_3„Çÿ'µ­î­E‰Æªîm‰¬µ?îšHmµ:H£°`œ%xkU\¬˜ÖôÓZ­«Å…ñÖA{ãc?3ä?îy0!M$Lþ"®ƒ´Ù”ÉJãáIMs 5›|ñ#btK£3%cL³§5{iÒÉˆ{Æ«X%Àš—ž³n´SsA’²Ùj¨VSM5ý6Œ5Ó£TBkj}øØ±ÇÈí?Èžµc[7b¬mÝ4<Ü°íL@µ¤$Èù©ö¯©~4…[Y§k—ÖÏÁÊò uK}±u:u%ŒµµÝ¶n@A!­°±äž`7gÍ6¨qÙ_78G-´ÏbgÒ)@íèŽîh¼kóÃoØÜÜ¨¯?ùõ7¿òä›O>ù°Ó]ÿìýŸ¡8}ôÑëŽØF¡>j)…`/bs¯È®ì9Š(ÏWš¬A|®%ö“ÀšíYƒÕ(‚¬Ð”v×Ÿ¶lØ¼Þ£¼¦…`Í[k¸iœ]ŒÆj[Í¶¬©29
òçdžËgþã`&:	nõŒvÃúho_a›[Öä¹ L3;×ãTþHÏ5&Ä	×,‚¤{T<××Õàî·[¨FƒíYã»sXkIá€ñ¼QØ§KÅ“è>¡@Nô&˜¯KôÖVqÚ93#iÁÚ „†,i&´GãW'µÐD-|©ü³ÎO‹í4q(Q¤\pasÅººbyD+_*ÓóL;Íòl	£³õJéRš.ì¯+]()^œHÑ5æh“©+‹K“©Ò<5®ÅÜÌÌÜÒKi½¹¥k¥éuÅ«øoWÎµðÆ§‰&™Ï4ÍìbÛ]cKýt¡4SGGµÒ¼øº8N³!/•.–&3¹Üô®òü.nŸƒÎR…¹<Õ©LÝdTkI7ðÊÉù/‡Úù¢i¥¿Ô­ëzû—;r4d+¯¼|´þ¯Á3Áû¢«	 g£á¦I‡*!#œnõÐî½pÂîC±uM™B3i°Ž­´dwãÆ*HŽDƒ-ÞW†èêà±Ù€´‘vF‰ñ·Ü/;D"¿Úâ~­ð:oÜi„{Ü}÷^‚úÙ¬¦òDÞElµãdÜ¶m;®ˆÛ§—ÆÇ­Ç?‘·GFNf7²¸y´wðµÊ~FÂEDkÚ¤FÌ#o|Âéa\¤Yœ šŒ5i/?Eä5ÈÞ­·J¿/r°¶Åí\Û¢Éˆ¬ªÁš­b:cç@Vyk^U¾JôÖB/…ð‘$×@&@[uE¬Î[ ´»£‹HQ,¤	ÞZ	òû®ù=k7zk!½%áö™Ð,YáEÉñýˆÑd?Y£ 18kÞ¿zdP"'ÓoÝ™Ç³5Ê ÃkÄj<“€1Éj‘Öºö¬Ù:AJþJ“pëß… H“gµ klKÓ±´yEèÆS"=mbs_È—ÔP­¦šjú­äöª‘ÞïâE€µ{	aÖ”Ù±q¬¶iøà3­g_÷J*‚$µÿk×aY+ç¨‰Ë¸… /Áˆ†t¡'I#¡ó«Ê]œ¿nV¤›mí­°šîjmX)õQÒ}iª¿uLŠAMT#…^ß³ïëÆf¯®¦g9ž}óÕ7ß|é¥w_zé%ÇkœèuBÝÎ¶³ƒ=„H^sƒqÚ˜ú¶UÖéE¶î£÷ß—q÷®Xíé·ÞÂXCß«ýð‡ÿúýÜ†ÖeÝj>ÒÍV$J£Á#bÙÛ5Âd°kkÅ–ÆÜ|~æ/ûúFÏŒvSÙ­vkýpXPz}†*H”u¶šX®XÓ^6^ŸÖpáê¸æ%ìù#!’’G¼²tF,Ö<¨6 °š²ÅëºxuWïŒ&ÙÍƒ=â9ÁÇ×#ƒ®®M€¬#g-VŸ4 ·a­±7.Óƒ·F´ˆÉÂ9ã þ°Q·,Úßùl~Î(—?lPÃ$sºÎhŽÓt½ ïŒë…Yv~‰Ó¸ÉúÃé™ò\Y»Õ.}ˆ¯UžUN–›Ú«Í²=­k²”ßU,åÈ^,N’É~4‚øW®L¦s¹–tº%]ßDudi…JÆWÖaeø/_..-/y¶¾a²´XjÙŸ/Y`ñþâï&–Á=&™¿¾>ÕÂí]­Gi^Ôrô(ß¼°«±1ÕØR7™kÄIv½šŠ”Ur/ÕÒˆx?sòèßæùšs¥}Gö~‚—æ2áŸW’…*ìádž9Ps­¼|~?+6HÁ˜:{vÓ[ÝÖT‰«c¬æ?G æÙí¡cµü~{Ä¨fS µ„¸‘xÓšM7ç´µîÝ©ß6|'v†1hÅMSã=iÐÚh—nvŸ>Žµ¶ÝB”ü?i¨M×­£#ÙöŽŽŽMí#'ŽxXûôÓO?ÁM«8Ÿú`7_‡Š·Æ˜JV¤*På¬±ÞÉ65Â å¬‘IM¤µq&Ò`jH_¾§Ò9kL±³¬µª"H/(Ð‡Îj…O À³y:·âªí´ÑŽ8ÿQs‚Â?-["Í«ïb[5g$îíãû9«¼µ¸3¶ß¶–ÄkÿA£¸,	ÕôÔZ•â^k¦Õ5”]7[³ƒ;ÅvZ¢Åq\ÜÛšg³Ê:”Br^·Ö 'F)Û¿ÀÈ}ˆ)tÀæ>„ÆÉ%»ŒÅ€5ËñÐÆ¢ ­ú‘ÎwH€¬õU«©¦š~ñ"Ç¨x”(€Ö´&´‡íØ1kÃ[‡6mmGúCduäwCjÿ•Ò¯7+ÿÌ"F@4yg\!ã6NC2®¹p‰þCCíÝ†:Ú†˜½ÆtLá©Ac0ÔøK¦µS»Ää³12h5G-58ÍÂ)sÜ÷•'Ÿ´‰g¿z£¨È®žFnñêWß}÷éw¿òÒKwÝ³a³aÊAG8t#ÙìY‹AÆl±H•|áü‰‘³ŸèëyæŒ9k÷hÏUO?`°öÒ ¿ÅùöO~B`†f°ÆZŒ¦…ÍÆožÖt¬uÉ!
àvD=Ö~úßºFr?/kÝÊ¶ÏÖãz9Xk0eˆ$º¤ËE…8VÓb¤Î­çÙŒ¶»‰Öê²ZbwÊZíÉª—v;»Û°ìTÙHv~º¥K“Ù.L5H¡++¿/°—Ýcµ‹õ\ñ3qÖ¸2Nsº½ÙCXRRÿª[Ùˆí§¸3›:ñøisìdôG¡ü±'˜jö†Aj>öÑ;j¡ð™Ÿ†Ó* &LC³Fk ZY•‘såâ.Qí¨ŠZÌ8S^(Ô!3ºœuMç¹r™´}ýÜþú†éÒÒ|ªe^aý4?Ë­”&óó‹×&»2ü£$ñÓ¹Pœtï Ë8S*ÖÏ/®¤ÜséÉÉ4u‘@Uª#7Ì)Ó kÞlfXp»Ù @·]-GïáÛw¥QW&-X³
é)¼Ð†.îïÛç¶s¿¤dR›)]6žÃÁ’u¦žËVéÙLw±…MR\ä¦›®ÏµÏ>DàˆuÅÖˆXÜ¼ÉZÜm-j¶–Ü"[G\	œµ1q2pƒ«ð¸)®Å‡nzXlÉÄ/ÈBÀ¶ûN®¡XÞ:ƒ5â4ß³¢êm•Ð[	9õ¾,WêaÇÚÐÁíÝD™Óð)¡ýÚ¨öàî=”@²xkµT0X“ý©Ï?M?F¬†´AŽhuWãSØùô€Ýìv‚ü5KÁY«Šï·I7¥¤íjŒý4éðŠ¢EbE‰œ‰¹"q
d¬`¬P[Í^l“[ò¿²8uÔ£Z­¬I¾†Ôd ïZK´ÖB&¿¡ZbÆHµÉsS`5ë¶&fLnŒuTˆÓûcVÞóÈŸ¯NhÑÚ.ìÚ“š?¬¹…ÉÂEì:t[C@Y¬/„[a¯k®Öl%¹ý¢±°4hã5 £ïìÆ­Zìšjªé·Uylø˜c5§{Äe»ïÞG}ì´vøð±a·[
È³ÇžYµRÆšÅöPø§M+¥Œ¢µŽË¨‰ä&‡`MÒM®tmóP§F^Ã¢â©Uv¬ujÚðÏ¦ÚÚ¶oŸ:>Þfù"m*Ý®½<©yG¥ñP}å¥§Ÿu8ö½§ß2<m¤·¾í&[ï;ßùÞ[öÀo=ðÕ§iˆöÕžÆb“ðÙ(Ž¼gÄ–¢¤’Ýlâµ³ÛgÞgãŸö–ÚYâHNpÿ³³=gÏœúèõ“§€5Ä·úÁšÑš¢ûß9—ûÛsï|÷‡/ÿi¥ú‘ÁrE6ï0n¬f—b4(Í¬9Vó±ó¡ÒA‡ÁÚÄèèƒÝ'º{º³j¦–ŽY3ìì  —Þ ²†j÷ìÈ`:­eîÏ¶5«ìl¦§š^™íSm$Ì5Í« 5µžÞ.·tõ[KÁQ])ÒC2Yl¸QN‚@T£'Øìb‘n¹²È mRÜwé2Il•{ÿìÕLrÓ§©¡)HíÕPýXjäˆ˜B4¿8ãäPZ&*‰¹wì¦(‘]…ÂþâÜÂÖJù¦Kâ<¶Škå™¦r©i"_$°qzW	6ã‹gµ¦òJŽwo‚þp6ÝT$reR£óyÇ¶ÂÝi¹dë´ª“¦šˆœ®—Rz‡›
\	„UsªÛ¬0Ô2ZmhÙ­¹ðÐ<3½ëÔ66ò!ÈŒklÉÔ¥÷Í'³ÅP°~ËˆÞ×ÒrtßQ¬6ª$×e~°¯‘×ÿƒ‡µç)¨ÿyy9&‘˜«´ã	']ð(á.÷YŠ*´f‘Z$sZ´¬¦!ö=‚mÉöZ(œ‹ˆ-(0[Unãÿs@äBòcéþ-äfî¼óþÏêà}||Ì
èÖd±x;ÕºÍ°mû¦Arû¶okëï#„–1•@:0âÚ*×kÖ›˜ñ4Ô¼W“
ÀÖ&ý·÷(Åÿnþ$ÇÜÛy'°Z¬©IªŠ{Œs u+Ô?ÚA2¡„`›lY­º³ÂþLŽí_£2&´Õ›g-:cE›#¥ªvk(˜k¡ÃxÕ®5·mMÈtƒ³¶zz?¾‡‡µHŽãQÍÚlÛ# šwÖtÆ‰Õõªq]jä«™vRÿ˜DdaJJá@L¡ïµòú¬ÙRGEZs"£5‹|Ô ¤ÒÍ kn+fq¡ã<¡mvC'-Ôü³_©ùéwj¨VSM5ývô¥Ã@™ùj÷Éà.Äj²ÖŽý§á­‡yMÛÙÖ~ÏjUE>]XûïèÊ?a‘9V“cfÞòÁæ±y?Ë+24Ä`âŽ£µ!,¶ÎŽÖ¶)\µíÛ[ÛÚ¶MµuR9îÛ]£1:^¨òÔÌR«o<ùÒKÏ>ëêÝÐÞBfaÿõ›ü¥þÍ¿Ñøão3hD}óÛ†o€ÛŸ=ðô÷„W€Û»/½ŠÏöõ‡Þ‡Ë&}„c¦²HÉ€·‰,’ç>³§ »‘‘Sï«Ëš¸oöU`MkßüñIùñOÎm8÷ö÷¿{.P"æÄÃY¸ïžKopÎ°¦ÝH–<Ÿh¬qª!öÄÈ™Bqf´¯¯§¾j¢ÁcPW†uÆ°m}CWOß ×Xf»¶a§k¬ÙynØ:.’pžËRIbŽÐ zdMÄÐŒíÖÃ“À¡ž&hÜÉöŽôf3#âniÔÀs†c~¨oàidW¶B~ƒZ"ªuïlsˆ6æ{_ÖBõcB¦ˆ¹Ô"KÍµ¥+
Ó~Aù¢ì4óÔÌM›ó!"gK0{ÔHÁåól¯r^z¥°¿©È5·RÓLþR¡i?áùÉMõMMÓl7xo—”nå3Ä{L|°4Ï{ˆM–Š“Ìlv+Ö‰…aiê¦§]m£ƒ²´øÍaï4WÃlÀš§¶ú®þÁ`—ñ|FÕ¨ë”ÂÙ²§J“g¦Ý…ÎÇÓÇSŸiá•-ÜæÛtÕ·`²µÔeÀ·s-©3ŸXª ì}D›×tÊÈ &ÞÄþ(6ò $RéËÆZIþâ†=LˆÕö«>óK=¯qD
Š=’ƒFLþoN›‚¿V•	PmM{-tó³KÆÛr BýãÝaËØží×€4ç¬âø„"i|ÜvåŽ[w7i3fgû‘ÛÔO´¶h¬Áj&µWã”4ó€iÖº\ñý˜ˆÎÔYAÙy¬w
&îÜ½“ß[ú2åÕ2*ó+ÖtQÖo‹8XÄæ„-k«G‹„˜—jH³aU…HS’©ÙgÓ˜8#\cŒs!õðªÎÕ¯ykžhCcläAñVœ5Ö«)rÖ!ãÖØÕ¬j­EÖZ‚É©ÿÄÖrâÿ°w¾±Q]iš_õj4Rw´ßæƒm5vVA½ ˆI™ÈTÃ”»ŠŠ‡rã²ãq6´	R/	Þ’ØºÙð/qÄjB/"‘Ê„aH{:MÖ¦i"²…DiP1‹ED,XÍjaøîÙ%Ùþ²¿ç¼u8®£kƒ´:+ÕS÷ž{î­k»RånùÇóžç]'RK|Ìp	1è£é’¥ˆ3Í³Y8znû?6ê†"™iæ[­Y|#$×NãÌ—TiúS<·8`„‰n7~{èÛßª¢ZUUUõÇ2Ör+ÔèŠ­µjb5w
«­ß.=OIã£ª“\ÿ-Ö<ª‰Õ€µ¿EZ±vâ'NÜ¼õÿÚ<3¿LM˜&ÍU1$OùNØ>2Qæ½ÑmyîÜµÔþ¸i?ýôŠ·¨}|Ü,	¯m@jµ?É‰Éïï?æ*Ýd ¸ ‰½{äeIŸê¯óÝûÏîBú#}pË–Á÷ß¿|™ù ×OnÙ²ËëÅ]ï¿¸ûìî“»wýøÇ»ñÚ~øöž×©“ÔwÚ»÷0¢¨)/RÛ±©4òÝtôvªT’'h€Ò}?_õìªÃŸïåÕèÅ`çíä‡î»¼ïòß7~xzß‘Aò½©VÙhÍOìÉ†tZÀ†S’g}Ñ†‚-X‹5°ö£Ô©RéX§ª ;Hé—±¦ìk¯f°’å:8òý)“ëTÍ#Êh àÛßA…½=–BÒ‰Û&jH¼j™ðnŽæJƒ×°ë`‡-¬o+ Ü)
ÓE|³‰tÁ\:É4DcËjFFFf‘à|Ô
¢±™«ÅÕ ø¤òÇJRKÔÀ´qÙi¶òŒ„[¡6ægê‰®^}gŠ¥hÜ†ÓFÝc©fôúââÔê‘‰‰Õµ«Õízñè©Ñ	û'GàºÉ<oÇäÔèÈ©Ó“ÅÑRhœ]=1!ê>uü¦—º†/QÑ"¦ÛêZ>i¼¡.“‚Mk˜‘Üáæ|ËLÝC¹|$WïVe¸BŒ¿ø,“Ê×Õ‰Õ Â4*¤•Ë™æé;õ¥x]†z|.º¯âŒî©ÃyûðTaŽ.Sè‚„gÚ±rÖ¬lQtÀ šAšŸ(ÌÙòMšâ°é&…R¼EX<ËPr|l¬UXk‘ç»k‰1þq9$cxØ¯a“¥i|@)ÂV®[ -›¿p>ÄðÚ5mbg"nc7m{‡ßÖï!6´S¤¼Å¼ÜêÎøånç_ÄzêÜ»è«»¿„Ö$ÇÒë1ÊÛT·r×›°I-Ž[£jSŽ„‡Ë<¼dÔ_-”½f¦X”Æo˜œ5Û¨E¨÷'{k±­º0H6ÆëÕfpÕ‚£jbHÖ¢Š•iÁ½µGl³1&»k<¼¦ÓšWß_–Ã$#¦ˆÔ’Óûíá•¸lÍ£Z¢â%kÚÅŠ±³6{ dÅ‡a¨¶r[‚§±¹f ºcûÈG—émµ²ÜÔÎ5L¿\	iÓ§ì:·8×&fs!LÄMÙmà6Œ¹X@åUS­ªªªúcêÛæµü§PýÈ”øGBÒdÍÁÚV2ûÉÁa[ÿnÈIn±vófñÌÍ‰ÅòÅ¬Ýµ³ÕÊ‘&ª!½ÖAMÕ@É„(Hœ5ÔÕÖ®£v/#µ—»»§ÖÑìØ1ú¤a©y‚°¬²QÚƒmtéìûö±1°ý­Û¸&v’önä^äÎ]»ÈmtF›pÏ¹l±·\)`3—\³ÄH¶þÎ~ÔÙyŒTƒ5Þ°|sß³¯`Î½ð¹W³K–¤ËƒÜÿacãßSÙÜì\µæFW™Ð[»Ê0…HÙŸÎ4äg0ÖÊ™ó§RoþäØ†Î–ÎþNâöA'ñ™Ü3ò •¢–jàˆí&ß­PÈAkÌ°YtE«ØrÜ˜ËÖ´©^ZçF`§ó¼­X““ƒUÀU
îïíÏÊ>+d@ÊB'“µÐZ¡–<[`U™>ä§ù‰R0Ûfµ¶®m¤ÿçZá£)Z§–œ)"EâêG%bÔ´£ˆ^jJ{”“vSn*¹‡Žg«—Š,XûdÔÌ²R	¶›º³úèjÜ®©ü¥º¬<µÅRü§NñŸ^äZ&³t1ï4ŸcÍQbEIpoHœqc-`Ú|†£¸ÖÄ„ÁJÉ)@lÀT}>«*G_ÕÔÖ»’Gƒ5(:;§ŽRHM%¾mº/UÇÇA$IA¸–å'«¶6åÍa[J‘,‚ÓyM­ª!sµ¤ïg‡,Á‚cM-ÖxØš("ÐË[k\6+ÍH.Rž­kSŸµå–oÛìÖØâ”‘™p-€šñº¢YÒF’;e{n@ÓãËgŠ	îâ»Çe°)€º`<Êwa¥6¸Ä pÒjµüÿFÇ3(à2Z{\á5¨·{7=3²¿ù‡_ý”ÆF¤ö/ìcy’UÙÅ–¸O?s	?rù"VÉƒbù‚‡ð!,¸¼6Ã
~g”æN×*ä3 ýAŒ¶û…öë¨±â#	˜æÅ,’'5R	©"‹*½´Ê‡†ä6ììñÂµéËÖ"!Jüéë MN÷m¶kÉËÖÂÕAÆ#eJ4d´fÏØ¼ð(2n‰M¨ÈLÕf9 7ø0ÈÐëºÈÂ	vòÓðD¥£»k>·ŸµhLçèExH:„@=Å-Üã¬4f¾X’)÷Ð·«¨VUUUýQõ 4’ a5‚EÖk°ÚöÇ¾¿ÉX“žîytí1#µ
VÆÚ­É['&ÿë{Å	C-ÁÚ#–/b>šÑÑäìNcT³ÂÈžV’F˜QYfµ.W ©LHñÓ‚yâþ&?õýüçM_0¼ÆÝ€Ñû»Ñ ¡#GŽìÛ÷ÆG>ø œÓ®	ÿ!oð5øáàeðm99ãQ%éÖ´]²ÅlH¼<6›+ŒD´¢û;hà,7=ÓÇFÃ kZ³æVÅ]RÂüôJSã¼]¹òa#°æ:¿5GÛØÓ
ð>hg-ÖBlˆa?s—„¾L¹lgoÐB1$}±[:sÊ©wUŽ„:êZÎ5ÇÁT9"XÕ8äÚ»©‚ì…ÒHtì&vtôô8XžOÈ-£Â1;à­uöïP}$ìÁOIr‚.îæk`;y6ufªeùªHÖõšCyêÚª…µkms9ôì|é­ÇÚ»Ÿiåhq"‰9ýq¦H\þXé©9PóÆ†‹¦ÑÇˆpB³kÚ¦a ]Ÿ¥”q¼´tb”¼Ú^ÖLŽOÃd%ÙnÄç(dj²XÅ§ÂÚ©Y:ºš·äôéSøX`¥ŒðTæø‡i‹iÖu9ÈXycmº1ÅY^ö©!\´™RB´êOÁŽV„ª¯!“Ã)-Tï¾ÌOÀ˜~v\æŠ.­8ÿ¾¼üMW*‰³æ>J0Îb ù5ðìÍt]&… EâFÒ
òOõåkçR	«IPT 
h‡(‚\„Öl´fî` z?±‚ÍÊþË4aö Z€M“dTÄ·DŽ5m•m‘±æg÷Ïð8ž/¨¨€œ¤	“ˆôP?‰ýOn{r%¼dyýÔ'®{§Sy³lÁ_èV(¤—~Ï_ÞøÌÀ@ÿŽBöÝÿõ«Çú4íîÝm¾òîÀ¬ñ}äòùm›¹ÆU§•‹P	9N úÌ¯@®Raª…ƒ=Žq;lm±±V¿É$R´RýA‚EfÉ~De$[|VÁkIÝý­µé´fÖZ”Þïš*œ5Ïjì±±ÆƒéŠQ-9¿Ÿ=kf­…ð~í&KïŸ9Ò>•ª4›Ôâ‡Z…½æúª!˜ížÉ< ùG»l´ö'ìeÍ³Zè©f	"ÌdšyNãÌ§@r@zR£¤ƒƒ6ûj¦}§*RUUUýÑãEÔYgíŒbµÇèˆÍr5qëó[·®—Ö’û^†5ÉA†t`íæ‰3<òÞQ6Îe3Í`Í–¥1*!Ò‹s`-bµ6ï­õt·}­š%·+’ÀÇžÖnúbkZ†µ.+4SMö	§‰Eø»'TýhkÔÀ«1È(n„ÐÐ¾#û€1‘X&Æ|ã[åT‰ô‡û^¿ýõ>q‚íÞ¼¼å}L¶AÇl—^C¯c²!³Ø<³¹>Ú::GÍÄõÿ¹J‹ç¸Y_ôºÍíþ½tùä•+ÍÖ›ÝÃ¾Z‚H÷wR±›óÕ¸Obd¬½ïb£É‰÷rÂåÒ`¶¿SêÉj¯oÖ¨ioÉºElp§½9yl<Ÿ‘±†Ñå˜±L¦ØÐÑ+X“2üáŸÊ0!®N«†Ä^Ž
˜>ZN%DÈ×qLc³©C6§‚_Ñç-AÖr@Ö
ÙižZ{K°f>mÕºTfŠI-Îñ¦Ú§¡üQ2R³ÚÇ(™_}ÓtPÓë©ÒøÕñ©Ñë¥ñ©šÒ¹É;Å«“µ§¦Š‹KK'ÆÏ¡ç4L7YšRµäjáÛÄØø˜FU£«ùôëÏNá+Ö—sC˜‚GŒ.²‘(F>² Y—¬ažª!%hÍi„‡ulÈËvã®øXyuV“
s³U(/lVÊKù}ÖÛî¼7²tª9 2¬Æ š¯àªµ&ðZVZ*_¨M+f$U§ekù9À—ÓµÝ_ÈX³†^à—
"Ù×­qME`8k^p´ CÍ¬FL5¤Ð2×bc-Ù[«DµP¸v¿¾Å×ü!v×Ìl!´û“Yã §‹C+èã€³Ï®Q¾‡2VV®ã”NgËÀWÜÆCÍ*&vÀv×^@®‹¤×cÀZûÓüª?ÓßûÌ¯þV¬}qWÊµjÍBûå¨	×Ö9’¦$Ò­Tã
Fž¯\ô0Z²r¥âO\,ä|^eÉÈÑ¨²/¶ÐÃlþ¡Äþ2VÐšmA1°k’¸^mö•jQ^¿Ä4F5ÛƒyÙi	6›wââžkÚ*œÚÄUk!bÄ/[CQxÜ;¹áZ²hÂæoHÌƒ´Š!¥
kÍ£vd­Ey‹Ö¬K ±$j‹¯‡\‘ 'ArÁAdkÜÜs&kŸ¹lF›ú  ôb‚˜pfÒe®ëÀY,øÌšªñô¿ª’ZUUUõMÐ·F^?b«m]ÿù".³Ÿuk[Ÿ~ëë¥VHíçeVKH¹uëÄ/&ÿñ'Šayš±špÍÍåL·ÖkÓåF@µž¹=m ^w+ýÕô·Êãk{ˆðïvÜ†³6 uùL‘N³Oväye¯¼rxo0P ,Õ=šöÛx©è–àì¯ø¯Ð‰¿úø¦Ž´$áh*ÝâN¡›ãµ`<µà¢lqË $è5–²IFlÙh{½Š˜=ŒÓÜÓ‚5î)ÃšRNk'ÙÎž¼ÂB#ÏcxeóR)ËïGãüé< †³&5†"È8
}tç§-é¾æyù|cº¿ÿ@/‘ü´<ÃîjjÌX‘#‘ýºª¥kœf[²rÀZG‹ž„Ü‘óÖË;\ÃÚ5µ²V² Ï@T:ÉºÂºl–\‘¹ÀjÏvÀ ¹"pÜà`M®š¬#øÂ'ÌYDqa¸;îœÊ9=]ÃÝ]-Ö¬’ðŽ^)²M[¨6YühÜ‰œd^›$b“\%dqÎÄ…©âõëÅ©ëG‹”DN]˜:¥JÇ‰¥£SFkJ
ŸXZ:‡µ¦üGöbéTýRÞ-zS;»LîbºâBw†e&¦Ò23Ž”4
jÅf§à¦4ÖÏ Þt##JxAT“ZŸk¼Iab3h•¹ÄgéZl6Ë$©³åmÜ­	ª˜–â:¾EªI°–uÊ+O#­iU¾kµs4iÂ…S¸ËÜ¹™>®çæ«1Râ¨9`#cOmÓrµSã²IÎ›M 66W—·3K	D‰úb3·ñ¾ì6=÷!)Y=ÊëÈ£š×LÌl‹õÀM×‡ k8iŽôx+åu9PZ¹‡‘)}è.Ò"¾'ßIóOLtã°‰×Tµü5+†t#Çá­îŸ+º[þƒ~tŒ†Ñyˆ‰c5\O´î^jÿ6`mL`6p	X[°¿oï!ÜT-Y¢k±B6¼\Í®Ä-ÖŒÖ’šaÇA÷÷Õüd~”-bªl„í· ê1©Å¸–ì¢¡Øgó×í+ãZH=¢ÿ¨5¶uÆ®ˆÑÅ÷{c-!Òò ÝdfÅÎZÉBF…³-ZCÁX[¾fÛlmÔ’Ó ÃñW>±ßKÏqñ¬iù
°&zs'•«×¦Áh¥3F’Ùmf³µ)0„óXº“§xNwWI­ªªªú¦è!yjˆ[m;”¬mÞ¾v=ÙýÏ½ XcÝ°†OÄ&V‹‹ kbûoÌÖ\Sl¤Sõ\óÖ‚µ¦ÓÖ¸fšÛÝÝ¦È¶µ.²}n«µ½ædÀ©õªõ[L}ÃªÃhÏå©	Õ÷»>f ÚÒ-ã³¥›7O˜>þØB,¹†ÊW¹§m2ÜŽ¸rI¾’$èEñš<¶Ï?ñ.›$Fjm~¸‰ËzÞÝŠ/W†5híòå+ù†+Z™c¾YîZS£±›· kì˜i¹i€ìæyV{Û@$4ÄÆ0’ŠGëòMM|›æý:zd¡uä2;¸–¯«oÈÏË€fÀÕ‚â3W¼˜íí&þ‘l90­FKÖè–½#['ÛÍì!¹gâ
áZŸXë§çZ¶ku…¢ƒÌŽþNr# , FÈ Ô&ä ñj$ÁŠ2º¤UÈÝã VÞÙ:§ç­á;_n=¸SaÃ!TÄrúã þPþ(§5dŠLóÔŠÅ-NdœVÖN¢3o¨id8‡k6~g”þÖÆTæHÈãU‘™‘âÕ©Õ‹‹ÅÅ5‹'yfrbtd‚ìš££#5‹=å¢ó,Q)ÀCr"õƒ¨Îúbto&'öNÔ)ÇåT‰Ì„tBZg}!+k[éMu~›­3KgG 2sÈÄq@dæ-K÷‘ñ4 bEêòBU8Ž¸ï.× K¥ó¨iUÊXæ“ÕÖÇiÛPKË|ëUéÚ—°Õ¬RQñØ/¿ØFmÈ¡Ê>ÍÃ¥xÛt
%i¢/µd<³£ÂÃÄ˜œ¬^á¬1Äñ}†j6ñC"¡ið¶YB!ç»qº´²Gæ†Z)¦ÿlûqAí&,6lµgp}ùŸ±€ÍxÍü5~‘§Ç¬½Ü1`­K¾ô•bú½ŸF>'Š ×¹4HàKMâ½rÙ>×[/ bÃãto:ÿÙÎâdùZ"¬ù²G=°i7qŒ@=,Vó¦-"5³$AÚÅ°“I-àšvFv+¬Ù¨æ1’FC’£€-…ŒBF|hp+cgMû/Y³€þYÏ%;kÁV‹!âEkÓhmal­±#z«0K ³ä…jLlä€* ™p1Xkì\‹Ô8ó'‘½&X‘)³Lã€¿VÆ.6ž2ù£¼´ŠÂG;óS_‰¥V%µªªªê›T	¦=÷œ#6Xmûz,µõ›[¿}³X%kÏÝ¯JÈFj~ÁZEºˆÁ9g¨4ÉMC,]{DŠV©yXƒÜ*aÍ…÷³Ïmko}zn[k×p!ÐÚpW;%¨»g u·zWÊðþ	èòŸ÷îQ0¾oŸµeß €µï·GŽ|dÂD;!ñ·ù/¼ÜôMÜ~qb\Ø&j»	¯‰ÚÞ¸õÚŽ	¢áÚþý/ž|MzÝIo¿}Ø¨íð‡?ç}Ý¦qEO8Vs´öšƒ5píä•Ô•ÏZlÕ?
Ö˜¢†ÆTcã=—-SÀ’’÷æi=.‚ŒÖa¹€Ù.Wÿòû»¯ÎýC}MÍõBÃºB‹@­·cÃŽ\Þš¨ HÃn#Ÿ_~YKŽ/êîá²µhÖÀ†$øÁœŸl.×Ö¢ y·DdôÂniƒÄ"ÂˆlH¢G~ A³9
J	\ùjFtl ³sæ¶wÓXí`÷A(í œ5ŸÓSím{‚óhïA!å€þñsFj&WÿèV­]/Mñ¤!§F?¡ÐñÖX´æZ­MN‹×'–fN¥
ÀÚ8·M]¯%sÄ §Ì-üxN_Lù£þ;!5"VDAZ!Æ™B6ÏÕr)œƒÀnF´zškõœóu5žkP|H=þ˜*OxCëìm¦È’wy¤AËâ,aS*ß€ç
Z¢¦û\Ö£>)ÖÖ™Ï&,Kg4ëÌØ²Üž’¸QØú~>ÄOïs1þ5_)ÞÁ±ƒ˜7P°m›‹„çD¶Úi*'©äamùŒÖÂÕ%ìÉ­±gË„¾‡’AÞ¥©0n¼ÜÔÚdÖ:HîàÛO3×|Gì•Ë—Pf¸\åŸÎMãX²l“V1€Û¦—~ôCx`KgÊþšç5hÍûkF·¾ÌtçKrÕd¬}õ}ÕpÖm›Ö¬Ó%>èÌ–ÊY“]5-[ƒÅ¦£—¦6kËÕ›ã¢ÿ&QQù£ƒ¥æGSd«%fAÚV¡¨Ø4VR#líñb5{°Ý/
’G4Î$ÿt ¼äj[iz!d`ø„ÆØqÈˆ‘T2¯ù¨GF¶$qÕncK”_	5[Ô’i-|jÑ'D¢)õ÷‰~L8Hžã«¹ƒÀq´3ï¡<³™æìFkÈ
5Fñ–Ç.hÆ&Y¤±™.a¡ùSòG|Ú¤F¢È¿¨ªªªªú¦è;?ƒÕ¶¾àª ©Ü,`Û¾ù1Úª‘ã¿yûvL7o]±±ßHM¬kTAŠÎ}oŽuº¶RHË‘Õ6= 2¬YÎÅ°¶R³ÈÇW<Ýs`þ®ÀÖZÝŸ+Z¥†^îjõ¨6-éï	þ*'ßþ,W ¯W©Ýº%vAã´@cã×Î£?¸)‡kc&NÆœ×rS7žà~(h;°l²ÙŽHÊÜ§ø´‰Ø 1âGöÈfÛsx¯Õ=20"ÏjŸ}ÆZ?î«í¾²ÿ÷¿ß½ÿäþ!3Œ3Yg®²Ù±ZÎ\Ð!ýil¬f	ÿ
Yd¨ð«,‚„FŠÅ&Na«¥7¼™*òCJ‚ìí?°!ßÔÈÔ:ôóoø?-„÷çr.U¤¥Gáüu*o¤%Æ\&0=€5Ù-yŽ:+¯]«¡ñ5ÍÕÒòy´¢J÷f¨‚Ì@&aŠ3ˆüR5—äOAâI=kŠ`Í_u&Ó0=¦jZæ´w|oçÎƒý¯MµûgŠ€æ““¤:ŠÓpÒ¼¦&¼_?ÉŽ–&ŠŸpÛÔõ©1ðûKÙìF
$©Š^Ô¼‘ëÅWJšã#ai¦^ZšÉ¨Ä…Tš’Èd4ßë*Ís"(T[ ±A†¢“®+õ³A7ófÍ#pÏóŒã+Ð]õ¥â¿:ÝÍ‚gÂk
TÝ·oÎÈáÓ9O9·LÁ/Jz„9zËðº2ê¯Æ‰Ü¿>)_ÈúVAioÖåÈ~,5—	¸2;-\šY$dkÜ`PÒœÉdq$›_·1DšÖ"R‹9kÚâ&Ù"hóŽÍ‚†=4]K†5ò9b§qqv˜Äô&Þ1ÆM–£	¹nûïJ/BØ‚¿ÖéyÍÜ5¦Zw·ûÇ
èL¸v÷»Bf*"kë 5q ÞzŽÚÕnv“±¶ÌÌ5Ž$ù¹÷ŸŠT2O¨ÙÄZ‹4=(°b3:‹H ‰2 Qœ,Â‰‰yBh¿4û‚5;Ä%É+Ö‚Bá£Ùlˆ¹*-<™ØŸ8[|¿V‰W­9Ròñýl÷qÖfÅµÐ›Ù}FLüpŸÇ÷‡BÈèZBþc•Ù<ù¢Äcþ.sÑ¸ÄLØÅUZf™‡¸?r…Le¬ùäGF›šNEdQµ£uVã2»n´ HùSíUK­ªªªú&VAÊ@Ûúç©ýâ3¼5õÀ–¶o'’mëúÇŽj•¬æÓE¬ÇÚÍ_Œ‰Ò”9ÇâD„j^–(‚ìFcµ×pÖ,¯¸µ½G­­‡>k]í„öûðGö
T³¿ÊqÕDjŸ*@¹ÄG­P»Uæ4ÓØµkpÙ¹óÏŸ¿øåÅó_¢‹ÚÏ¡k/2¿vŽ;¸íüþp“bÃi“ä³}L)%ßÔQàå#üŒË®OÛ‹/
Ùàµïÿšk£½‡ñðžÏ§	ˆó°ªÁk'Ï~¸ÿ÷h£êë¥yPTs³ÖªÁjf«i^×’+ä•ØŸQ 	Ò!øjÁX,29ùÑÄèñ_77‘`±#åÖ#rYð)3D–„*)ôê3ý„hSöG/qìË±Z­Ss°\ç3ê©ÖÛ;´´`‡!ópj]$FKMwª¿þ\‹ú+;›†œ¨RC`¥ã@tŒ‚Ëyä9¾ç½5kî`6É&½sz‡[)…¬i9ØÝbåÔx¥Z Yû}Pù£Ú^ËR;ÇîM=Zœ˜ÀR›"Ñ1 ¿t§¨öjP|‘–h‹‹xê°K²Î´joõâºÕ%:¯\ºLÇ9Êªtt–Î
›xgà*>“T3ÑŠ<­çÉeL‹ãø\S‰®ÄéæZ•6æª¥tñýú ÜÍó[iÅ ¦ä&O É úéëù©k*»T‚†Ý‘·Ü²¦¾fžã‡ÉÓs±-¤’ÇV˜SÃr6pÍÂý¹Æ=°M±¡/N‰?¨„dDÖZvóryðÔâ×¬±qÁl³’š),5ŠÒû“Íµ(a$Nñ[(†ŒFüà-LMËÂ¢51†‹°×ð±0×‘ò!²å]à=1¤ýêôûhšleÍê!ÅkaõÚNg¯Y>¤¬4ö¯¾"£ÓD2Ò[/FSä“åÕƒ˜yŠ£\ii2Œ¦>kðÉ0ŠYRk¯…PXj÷NgŽí\5H%òÖs mÑj56¡ñBDkÓ1mvEÑW(>_Å–?âE“!ýªµ°hM˜ä}µ 2W%5Æ6,›QžØgO¤…@H‡R`pƒîÈZc©š™j(!ëqÖK™¿à55™|™úÝÌ_³-’@•W§ywÍ¼µÐG"²ç_ã’Ý—”A­ê¨UUUUßÀ*HE>â¬}m¬«Yäóš¿€Ö¯= ªyVE¡öäèÄÍÉ£P†`4…Š økº8õ³R+]7l­§m˜Þjs{ºˆ!ÁóøÞoþ£@ÆQ¼$Rw}ÃHjc&µ:ži‡ÍÐUÍø[“óš^½xëç8¿vî<‚Ø\©¤6Ö½!«‰TX¤¢GqØà5l*r¤,RXöÃ=ŸýåÞ½‚4mºD$ãk¯}ö™nÄ‘;¹ÿäÉ³NóÜ‚5,/6P,ÕÔ”j.§ŒÔQ¨XÈåÒiiwxV¬–\‰¯Vœü¨ônº¡ÇNžKª)•jpiûPB_}Ý¼4iþá³tzèÝ¡ÜLhQ«Ø²ê¼e ‘ëèïí­iÙ¼Y¦¼«†C üåùÛÊªC;22^dË &…t”€Õ
Z–%ƒHˆgìUH«,O›Rúd¨1Úñ#
¶.ncWzZ[z†‡ßÚÙÝµó ‡Ù{ª%šj»Žw¨VúÀPm,´RcÚU>JœýîúO{F§F[®Ÿ;Gù£¨lìj±]}£­T:½ƒ)»úÎ_gñèRÇ®2â‡Ñõ»¶P°ðFU¢:M°¤ðEÓP“eqHK‚ÜÊ»ü @¸•r¤ÄÇä|¶º9µÍùúz+#Sy¤2	tm¬ç5¸Ï„›åŸ5ðòÄiŽØ¸¦9ï71'.Ï_ÔG&$¹«N>› ù6Š‰U9YÈÈ_ËÔÎòd€•y­bs’ˆ»ß,eDDÀÉDãò& Dœfm³¡6çì0"žÆZ#`#¤ö¯„„l0[âŠ5“K!5F±Q…G7	[¬ÊÛÊ{t1{€?
íÕpªàÏ%JaÂµJFW.]YM¦3Åhn:ôOgþ½/‰Ø*y­QåÎ®²³Ò^{`“îÊYSKlF—4²í—w¿úb?I’{§A¬&X­‰Õœ¯©¶oj¼6iÑ|þ>wi¹8ãª/xŒª =¢iþÂgãÛD´†V>P¤([Ä±³VÉØq	dlªé4c'µÙî²=Äþ{…U‘á7É”ßœ5±šÑRBÄH‚Ê"³ig-ÐšQ $ÜÄëó¸íÁÚ·y_ãÐ+D¬7/N<«±È˜1J1£qÂ4à[ƒÿfÕÞXÎ‰—©!C¶d¬qGÕP«ªªª¾©úÎ[*r\OL?¬&4ÛŠÔ$› H¤VØÐÚÖC±ÚtcíV‰j±£Â¬GÔJÍ­YV?#œÇš›ÐKMšût{ëÀðŠ·’Ú?Ð¦`ç©µvuuQù²¡š9(™²«&V»´{÷~šGDuæÍ›æ¡Lo¡õ¥tƒíö…Û7¾¾qõêmfn¼}ýõ×_^½xûZqR8wûâ…s×˜`³!¼Vf6é?FÚÄlƒ[XÆfÚ}	f½¬Ñ–Íkü†¯ÆàPíÒÙÝA6Ýýâ•f<´æÔ¼z±•-Wk„ÕšÊ'ZèD`àl5¤[ÍW¬Áš<óÑGÇ½™§¨±!…“Öúé¯ÿz`íÍ|CjG·–¦©¡þé‚‚ñVÄjT>ÖÔ«Î‘%ru¹\/!¹þ@‡Ìy5WVH’r…vY¾Ê-§k*…¬…ZÔØÙxs¸’2X
³\Å¼Ä~’‘š)¸hÿ–á-sæ´ïnëÑB[àîƒ!þ1¤‚&˜jþ9}ZoÌ“ÝÚË!"ãSåjŸ”>ûäÕW¾úÞÄŸþq~WÆIwÄT+J%|¸Õ5.e´T³øÌdiµÂôk*7LãAO¶–O—ÅPÚÑá*DEY‚(Ë©‡Ò|a€Ö»—†\|ˆrÉÌ×)_Ë…ßO;fã«³¾ÚóÓUD²gíñÁ‘)Êsï~ÝHOò¯kNÕ¬aq¦ÕSOó²]yiçðÔã.+&SSnŸ7óâõÑê
ƒ+t½«åjN`[g¦¾šO#Tz<Âpô„hBWþhýÖHˆä€Ñ3Sícrš©N³‰="V‹‚!£Ù!RSOhvx€@H{Ž…ÇFŒˆb<XFÉ!+4;`Â»€xÛ¸òÕ×áÑdÀöé§Ø¯Y9d…½¦DÜ€1 m’`íî!r_œ«FNÿ“p›sðÑšÞ|œ=>ùl`äJpÆQD†•gì‹¨#v”©"¶?‚´ƒ6;Ä9!]¤’ÓîÚPÍ¶Ä¸~SE$
³ûË[Ò¯[\¹P{„Œ¬µ„ÆØ­Å«Ö4(R“dÙó~[bd¼hšŽk¦(2ÁTóÛLYLl”Ì]û/Š~¬X°fÖCà36ŽÞRóŒf×ãØ!šäãû½kfÇrK5_É$œc¨U›^WUUUß\=´yës?øsxc¢GH4{aëæçÈ€äÔÁÚf`- š±Z¹ÅÚÏj'&&&Þ³`~ÈXƒÐ4Ñ%ÍbÙ3žÖ¬3›Ñ\·<mbkÿnkkO»L5Eº»é9©«™ƒ‚_t/_ãÒîýûÁG,V	H ÈÍ2©9H»ˆ†nH@Ú×_ß>7vûöm¥ÿiwo\¼vñö‹SS·o\å™rá„k€Üy#¶óXlØ/iµáµË<pØLåà‘×÷XC6J4•}"ZÛóÙïyP
yé•KÀÚ¼Æý'ÏÒÛ9kâªrJ¿Ïá„ådéÆÆLMrÀ–I{VsP±T¬>6TÈÕÖ‹Õ¨¯Lå‡††d´¤‡™·ÌGú¥e)›£ÄrGÙýj´Ö¬ñÞ§\ÊööÐ^L ­Ì%5-Ä‘´pæü¡”ea¸%WnI“ìÜ[®Åä@‚8Á®¤Á7ö€&, pf«éÜÁš`® :d{;˜½Eo©¶á·8øðÇ®ƒ!©ú¯Dzš©6-T$4Ÿ³_þèCÆJw.0ŽMízuôÕ‡É±2ÅÇÏ]¥©±	â<F'Ž—¨r”FKµÙÔ©^«9hªðÌ¤WNÝeæyªi^pkË´Yï4
¹6t}y‹sA®:œÉC¤;æ»qg¡¶žkøqÍ:°q£hMßZM³åä‰´Ëa$ôÀ¶Õii¨MÝÙÜê5yúPÝ
;ÝÐà¾»ÒÎÓÝ²kT÷(·¯ÜÏ	¯¬™{ÊÎš>çc‡„‚¸&ñÆZà6ŽnæòÚOA ¤€™f.c”[k±+RÔý$1g„1iéZ²³p´EÀ¦!–¾ÔÃªH|ê&¦h¥Ì´C„¯8rv$¶ZÑý‚©LlŸþúÓ²ÁVÆ5ãµœìµŠpH¥ê”ak,Z£;6Q#ë´.J£Ør8m¬-_°d¹Ú­¹
êy¼á«-X Šš¿¶pÁÃQeci3Tá¬EKÖØt\U?2°'.;cä©ùÏÂÁ¢E¢kIZ”)Âñ-Î#ò?9ÀZÜk­Œkq«5P)8k)"ûpÖb`áýÓ!ƒ·f¯›îÓ(-òÏ’ë ‘¿P­œÉïi-¬SCüÄ`ŒÝ$DŒYp:ÈOó°æ†Šîi~Žû"FôV(éZ^«JjUUUÕ7Xßú³”éXí9HZs±µG}X{TÙ/´ÓnÚXmcíÖ‰3£gFA0T^Žæ2ûm‚`Mñ#qƒ5ŸÛ? ¸³ö¶î®k×¶èv¤ÖŠ³f¨¦üB÷wyCßß½r¯Ç˜š_ò‚<©a©}ì-8íöÅ«·¿¾“Ý¾¥ÝÐ 2ûç·-§]¬»K·/ÞÖ¸ñŒh©\6“f
$°d#ÀÄRGà5ä¶Ý¸g?~ý3U>þ…	ZãbãÈïgÙÚ¥§Îž¼¬ÕK ZÊõó÷³Ž`-×[ ÖrÖgÍ`­¾VK2Ö,ö’? ÏOñòiþÊvÍÚ8¥òõùzëÒ:žéÙØÝÛ™ïãïô¡þŽ\Ê‚j$Fvt1ˆeC£µ¤NÖj}­¨GûõÐ¬MŽt}®¶øJ!‘®¶/ãÚ/[£ew@‹Ù„1 ƒ`Æ‹‘š”M»fdf¬±Ô‹£C lÁ}	OuìÞˆ—@ýcEPpÕ:ë-gÆõóž”M5¥?Ž[ßë±ßámåó¿35~§­‡¸sõêïJG2:¥ÚÈ±‰‘â¹ñ’HrDÛˆ^ºk{ÕH–w)gMæSÆÅ[²ˆ¯ kJåŸ´P£/9Ö(¨D€Jõ£¼KÍªGÀ2çKåoñÆ9SQ-É!8±R
k‹àêyšÏ’o[Ÿ¦fäf—ÒÉuì.Å%Ë÷æÇøÜ O4':ÄàÔÈ¬ãGÀ‘ZR‡ÔÕÐ´§¼–vÔJ¹¼à-µ
‹upù´.qÎï×ú8¾ð¤Æ\¥x6‚ˆM¾Ç{â”S£Œj#I%Tì?i‰œ'kÌbO-à$wm~R\ŸßPÍí‘Ø;ÄøW Ú’éu¼¨ù6ŸQi8p¦àÅåâÒ5Û±tì©ú.J[í£ yôü¦Bký×å‚È^kæ¯\½vPÀÆšµ2¬9WÍC’‰Ç»òž+êÅz«1,ZÀKÖÄm+¬¹ÈEîïsÞEýç05y#(n±†¢Îj†jÁ“ñ[Djz˜â”A{ø-^²f$-±=n­ÆãZ°y1}`…_½X×Œ(BdEÂˆg5=B|¿µ$Z3¯ÌÚl¬æwŒkFl±³Æ#Šï­53ÕŒÏÝ´hb3€.j«¦g¼æ29Í+j~Â–¤Ææ`ÍxÌ5¿Vzˆz¬€µà£)öÑPM†ZÔªªªªo¼¾ýß¾oý°¡5Ñòµ€4´vûóÛY»mxsÇ›†jÕ‚±vëÌ™['nNN¬6MxæÊ!‘p-a¹š‡µØ¦ÁTÆ"µÖžï¶ÙEÇµ]¸mÝí­ÝÎB	Õn¯|¾÷ÞßårÕD2»Ô0ÌG#5p!1šX­kÁ°¯o”[kÝ¾vëÞss³«Àr“7´yÁkŠ¤*	×$‹öW¬¿$X#˜÷%‡Í•59síu‡j Û¥§ö^zýõ?[¿w÷Ù¦y¾÷õ¼ff8\” 
yDkj†ÖKZ$ìæaZóIÖ‚±&Z;süøñS$óoÈÛš§fBòWvsþÍTtØq £W,6Ô4¯°£¿£7'DèÝØ»‘­ã ØÕÀ)¥’d‹ÔÕÙŠ¦r5Eú“É¯Upb0.[k¬¦EYÜFk.½Raœ3zœÏH0¸,Øj#®7t¸†´);CÕ|¼¢—Ó-¹ÎŽaïª!ÊÀ‚«Õ?ZÞJˆ™+“§'<»Ëjãs¿~]›’¯¿zô“OJÿöñÖöÑ©ëwþ÷õÑ£SW‹E¶sÆK5&%z8«ÜÍ[$)»‘JM¦­;™°FG¨ÓÌÅ‚ØXã}Ë6(è£Þ±V
	ô”êˆ…V¯&z€œ-/Ó÷æS]óú oÞlÌR}9(&¨çÛé{’Óâ¦šòdG
ÖDŠÖrf{©ŒSZÌ¨Eiõ g½Ú¬jÞÍÎ©#VÄŠ)å
ÎjòMñ)ÛO}²YÌ–ÖGŸ´ˆ@”ßo€&MÃºÊÜ~‹!àXãÀgp mæšØÁÂF<žE¨ŽÓ-“Xó§m!½bnM\	É|’¤¾ØóçOcrS–ÙSÔtBgK˜Ðw
•É¶É½5.?S¾×ÿ4ù±—ª Ù®±¯…rHþu&ïV¯U„iñ"‚µC_(ÒòE€5±™>™›€ši%enË©JTe@Zdÿüù/@QdR¾ˆQœ8Ha¹š=ŒÔ5; RûÑì‘ýì3®WJ^÷LªÃDÛƒƒZãošnÝæ­5¤Ñ¿o&åAú8ÈxÕÚŒzÀ¶Ø¾j-„¬èµ†©P-y±Z°c~sÎšÙiˆ‰—‡5ŽÍB#lÛô°‰²ýQ€6ƒµPïÈÄNØâPKè·jÿ²ÊiUUUÕÿú¬&XÛL¹# &Z{TÈõÛA59kÏ7¢†Ø4Y¬UAb¬yX»IÀ}I‹ÓHLM°cXÓµ ‘šyýðZyJvÿÓÖ{ ‹”‘µ+ºÛÚºÝ_åÝ[»ªuZ0û³Ï>qXÞV’«väù,TÃ?!Dº€Î]3 ©1Šýó5
 57Xâ.^¼ñ5ÀÆ£9lz†BH÷%^GBâû¹ó_’‰N8°íûÀñ‘ÄóCkVI$Õ¬`ûLkÙö¼öÙž½{/qOÍ›÷ÄSóä™¥æ	Ö\¨~!G&#¡Œ9Æºœ
±ÖleÔE=Ûbû}±`¬ñOôgŽ¿;DôDncGêj óVc_•ªÏ÷õ÷§Óvl ÏuìÜ@¿kuYËAjëRë¦êµîö½XA)eö‹C
˜mÔ\L`^i!…!A„e5~ÂÃT¾€OàYœ¿$
³¥kŒ`„1Ià7l+œ5ÝVÈ=ó›5Ý/u¿5Ü=p°2Ud  ZÇL¦ÚûÁT“Æ	o¼—)‚6õÙ;ßØ¸®3½÷Ï‡¶È6(ú¨DX/lh©•MíÐÁhfØ	Iv´Ö²Ò¢Ú
hûC¥pâõFr¤ºJÈrãu´´AH­7¥G#‘X
*	º1.ÓÝÄ¨
ô@ì®6bùAZfk!0ÐßsÞ9:œÓ+é³yfæÜsï\Ž†wè`~yÞó¼‚µÇçØ[X8zìË»ŽMŽV&¯õô¼²<¹|jaùÔÌÔ©r	¾«Ì¬5´Ì	‚ÀK°	‚Ø˜¹„‘œËt”#žeUVˆÄ›ÅææbJ{ª5ò<?ÂåTŸ³-¼úÞîK§¸tœ¥ºDg³ÁY:¢×Ni¨´.Ç&XkÙ/5’œÄsbF^<ëvÍÀ¤b\ÎÃ}Øn¼ ’MÖ:ßÉÅ]àž}fÙ¡<­÷Êi
B2yÊÕ6}.ýzŸéþª°Æ Xc:C ~#°pÖxR®ÎaÚÛ@šVšì
ÖöX³0ù¨ÍU(ƒô“8¼?Ö†ÈZ‹ï±³°àŽý±ïž0²iïÞVWÉ*5ÕvnÙD—5ÀÈUDî‘é¨Kdúõò¥± @lU`«å5pªçL†Õk5Õß…Î>D0š­[Ã[s§<N¥˜0·†
ˆO¸Ås–È‰£¹i£.7M»EHëÕ`ŠU¨æi,6×<¢1Ô–@j/Wãp-9ZÄßý-^9ÈLc¢âkI2¨÷·»ªõ^+Ö’Ú±‡u‘Ö¤‡¢fk€Q³æQ-¢µÈZ»»±æ-5M"T»Ûª5³Ö¢@H„©¶÷?Þ¹ EQa¤îÆjÒ@+£6	àW6®…d?BC¶usÊƒ‹æ™Ú¨ñŒ‰sþ±+ütÔêª«®Wäîç)»ÿ ÓsÙ"îƒÔ@µ%b}¯ïmÓcµ¸½ùÃk†kzØ%Â>Ó“»Ÿ„ÕlJK5BE¶>ù²|z¬mÝÊ¸Ë}-G=>î/gßÌ_…y~Nd5Tä;²O G<5$Vó}Ž'æå—‰Î¬ ’ÍÔ"6ÛÕ[8k<O÷¬%RDfxjee±2ë†ÕA¢ÙY~ÇiÂ:7ßÅ†~ã’G~c¼vÝRý®©åõP)ñF‹Ò3òu1›Ü¶Ÿÿ>dÑ,»ÌašFÒ0™0‡žÔ°Z'~W¾³£»»-§§ÝYèù¦ç›“ª ßò°vnäÔ‰Žr‘µh* 3YBIÒƒâ¨ôÐ‰r®IßÜÛÚxý6* K]`!pÖ µ^r óM©¼`­åÔ¶Kç{å×êë;_ôµéSÐ|¡+F ,G¶·`­ñd	‚0ç‰Ç,ÃÉõ ˆjòÁjãÑÛ¾s¡?WêÀIk[Óî‚úm¨	€\GT¦šï~Vå?Rú¨ÅjhaÍ#3Ë×v}ùèµîS“£xlÓÇì|eá—'ŽíÊæ÷8qaaáÔôiÜ(´LC\(FWÁ¨ì÷A³p`Ö¨Î¢ï]¦$³U¼ŠKÝG‚'ÎXüG‘¶èR;]…Œ¸:âAUìqš^>Õ¢Kx^´FüHK³ 0GE"'(óQýÒ0ð¶o‡™]’	á#âtŒNk®æ`MÝ‡q^£å–Ày–	®q&ªsÚ 9×f-ËOj–¬UúYè§šVŸÚ0CG£yÊ!›ü±bÏÄÜÉï‘6Œ¹*<ò-äªµ3O>kÝ¦’ê =ºyJA#wE¶@h~P-^³õÇŽŒ5¤)'³á•Ù7±§_I¸	jŠ>ÁµÍ›·lÛ«’OŽ`'¾`$—êï*Qëþ.k˜­†×|>dH	ö¸†•&TÃ]ƒšÔøDÌå|Áõ»Nå<@Fƒ5®îf ß‰VØÏ&Âz´Úl‘0ñÏÛ$æµšk1­%ôÃá"	òŸ‡ÿ´—´\m©ÅÈÒht¿Wd«îÚÞ»Evr$2ÔŒ­5±š¬µÈYCÆMÉ	#± ±;Ãšmî¹lÍF~7²ÖL˜ÂÕ¢h‘$?ÍZ1ÕtUs¤eû¾µµAìp÷lælµZßM‡í%˜0zoÍÉgAj0MíÔ¼€µö[€Z=K¤®ºêúxUAþ;ëz£†¾d!þ´[cX{ñ`mßÖrŸU@J'¬Vc¬!Ìµ©ëÄ_f¦1F¨†Üµ°«iÕYceš‡µ}/m×“;=¢i¨¢ZTißÌ)2„Õ¾Z AÈü¨ûR>*Xƒ³–Õ@Ún-N/^½:1·8{k¶ÂrµÊë×n\Ø8yîôé`M§šð^–f«îZÕž[b•Û¹#³U^CVyÝ×CújHÉ`íçŠ‚<.PÃœDšôt‹€l²>ØŒì®¶¶Îþ~a@¡³··Aá"Zz©Á%œ{·*È·þ"ßÓÓÝÑ944Tîèì§ö@g!Õ\*—´&Žµ/|‰Ç!ë-¸¬I,±þÎ¼óðöwwÓ{¡ÐÑ–K)o¤mM!o%|iX/kà•Ë‰É(­+9Z#´±· C¸ HÁZ|áÎ*ŠÜ¬,ÏYz@P¢Ç·«¬„oè¨¨íµ¯¼ôíÑª@Õ~´£M lµ8ª?ü=Dñ¬Úw¦Ú˜tÔûÈDú(°vê‘3¯;º\™<]Ñs•©åŽ¶¶Wž=| £\Ìïìé)œ/tŸqïÐw°ÆuÝ¿¾äS)RvY1Õ¨ø|Ý€®„ƒYÑ9!Š !ÚÑZ¨AJÊúoÈð4°+jE‚\ŽQ â5yqvÏs=õÇÁ‰ò<)µTY« ŽhOYt
ÛQ4{µ†µVcÚÜè¬³óÖÎ5¼npù•œœ%yêäŠ+¿„óÌöËÙš6¥–r¢ßB°F¦{ªÔÙ54À/O(Ìï…lGfLðÍ@æÕú»¸–sóÐ6!HMè Ÿ­f5áM\©©öã4ÈäŒ‘ÚDHÛDÐ–˜ß¥ŒØ…®Øªï«u¬mlÝ²iÃx¨•ß+rCR.)6¤Ó™kBÍ’5I¾×‡ÿ0fù´£A€[ 6ÏkßG¡òÿÃ5å‰|¨¨~BE„Ì–I[l÷Ï¨kÂEœlÞ†éüLy›Ì°27µn:Ák›6ÿN²jø¬ææ)­6Z$Z±xÍ›j6
Žšm5Ñ=ÖÐ±|VcHˆL\®–ÌiŒÜQÍoìÝróå´UEÎZl­I‚%Šo£Zd¬EÞÚ½d''B&/Z¸V•!:É W@µ@fÉe~ßì4;Œ`4fr¿|¤!–f6ùîjqê#Ä¦1œî~’Mx.ãlbt¬Ùaí}úÓuP««®º>Žú­ß³âGªo'A~îÐ¾}OšÑ&T{q_/¨†ŽÈVó¬Œ5ÁKÖ¦eœI¿«1˜j—©ééu«Ôï×¬XÛJbÿ®v‚ wõ l†lí=xj‡{Ô¸(ÁD¡ÉÙ7¾áQm³?oµncŠ ™/ÆÂ4¹jººrú‘ÅùÅñ†é¥«sÌÍu³Ê¼9iV)æ¦›­TÆ\$¯rcÇm^ÿK7käfWæo ùwkÂµK·×¯}ô‘£5Ë‡TÔÈ×¡ÅkÇÕjýB°vüŽÿÙcÇŸnr"-PZ³JolÀV+Éç`žWý£hN°†E«EUÆ'UZÿ‹|7ê(•{¡¥“ä³dô÷v–xíµy^0×U(°IA€…¶†l´UÈå‰é5utãêåJê¿VÀI±NÉ,<cÌ¸oþJš oP%ŠDÁ„.Ñ¥eŸq'Éœ¡éšƒ5¤!Ïr¨’`‡­¢â9^iƒb1ÚvÉD;Ü«ÁißÞÅ6 ZÂRµÈTó—B²?‰Q¡š'5‰5kä@½69º|aaj¼~:¨U&Æ&+S;kzˆÀ¤üpÇÎöî|aÿŽ|±èÞ±Å#Ê*bôV) ÔïŸÇ‘Rƒi»F2 ¤¬òF[ü”VöédÁ«¡¯øËmbqU…w¢?¡0 &É#saL´¬Vyz-•nnjá‡Ó ´Øñ¼ÞNÆÀRäœjä§`<®¸k 8‹Çø)>4·^0^fŠbLøi­š’]Dnî½dÅi9}Ô”~òñ÷ÓE½\Xë"þÿ3%wB5•6j3eÃ+XD´ J“»Æ“¾’3Ývïj0Ö¨b]•ó¢¢–Ä~na9RR~ñZLk‘½æ<¶Hf­ÙÍº“	xØC›·mÙøÐÅ[*f„/»Àšü,€‰aï¶mOéR)wåÇS1›×z‰˜<¹Å¼&`«µ×¬²KÕßú–Ëíw«Ô."gXÓ’5×ñNd´=„oÉÃäCRâõmÚ¼E½Õ6´òVC¢Hì«éh¹=ü†kAUóÈ†ˆÔbk-öÕŒÔ’ºak“`«­€\ÅãÉÖÂ_NrV¿ñ™G´°¯[¤ }ñI
!‘cû(½ß(·&½?rÖì–¨àŸ%+”K&ZkÉ‹Öxñª5þ^ž2(¸faL0Ö<¬¹±f±šæšÙàÕ˜j@Yh³6lkŸb«Ñä¦UX³Mˆæ§
RÇÔêí®ëª«®'¬í6?í Ú-XS_ì=º›H–±Ydáí··{WÍ¬«cm|jîŒÈÌõUsZ°Õü–gj¬5-Ò3Ð„Ö.CÍe°‹GÔM²ˆÙj]U…¯æÇÍDq©"ß±TsPègmþ‰Kaé™ÒÇV*S£——fY­V©TNçÆÊ*œ‘›+#˜%Só³££+?=·2?¿ty¬23rzŽujó§Gæª³”FÎWæVÌs$ÄÌ.ºšJì5K‰­-^Ztå}­9\«ÒšUCâ¬©×š²üÃj˜lÍOáUÅP™¥eš3Œ(×…‘Æ'ÑŽ‡5Fm›ïTiIàãÿ%ÛYîèéîO§»z]9¤ƒîmk$²DY£‚ÙË¦XÒ„‘Ö@Š¹,3¬!×ßÙ»¦·³XÃáTlš~XÖh™žS†ECÉ­`i½p|š€t¸IkYÕbé°ZK€#*÷„,‚PtAŒ<ÊÚè á¯g˜kŒ1ªÅõ>TUËA£ ~$t¿Œ”'r™½…¯-/Œ‰Ñ^yåÁ5g–—-³~ípG¾­»wMNt¹£û@¿Š…›€•¤-Õà Vý£å•åÄQ-:@e$âªÉ	s­¥‰°žæÎjL­ƒíREp«ˆWçòñ•§ñÂÖe¯(¯±˜16n ¤Ñ^¥Ï7dƒïÕXâ€ê¼+v,òsB5“¯/ãGx%Hr0Ç+ð‰º pNë×ÒÕ%v.‚²$¨s?$äSÍÖq0f[gg›¦k‰ù
,€ˆ«‰(ù£øÎëS·dÊkâ6é	Ë¶@Àªé±¶E8¥ðE½Œƒ³¦{’B¾Ã½"üC*¼¿%£šïw¶ÔÙˆ‹Æ	ÖZY«©ä‘ßÊÅx Ëb„R_àú^?\s¤fV¯v$™×jW¯a¯®•;aež½°÷Ç”D"íŽrÝ%Àá‰È;á–­kÖ›_‡-F5§ØM³Ñ=9kÁ[K(‚Œƒ “W¬\Ó°!F6i±«­YKÐ¦Z_Í‰jAŠ¦Rí¢É U±=®Å°f—6)a„‡˜Ê;ewõÕ4Dç'¬Zãn¨†B ¤Gµ­>©¿f£[ì¯%Zl¾øQª:jl=«™Æ@e6ãPX²V›i°f¾šä[HFgQ ¤H­juÕU×Ç[ÿ”*HWþø%ªí«Ñ{…ÐÛna›XíKm¤‹ jÕŒÕBä_k3ø[…Šè¡¦Øò×¬2¬P‹PÍzyn#\ÄÕ=â¬½ü'ë×¿þº«)Yä€·Õ:»²þËyÈá\¿„*—ª½ŽoXèþeqÖå•-C›{üüy
ÝVæ 5BË­þzä´,‹‘ÊììØOÓéq*!§²Ós3Åhm¦aƒ›__Y¼±¸Bï5[÷¶¤-è'×nbÖr"¡5üµ1Gko~ôÆmXûCÂjÖI#*jz•¸‘#©–Ç~Bjˆð,“jh°IÅæbÿÐ@1c¤VäÙR)•R5$ÌvÛX»}!‡5Æñ‘þ®=½ÀC¦‹70ÐÏ·ÿ¾,`R,[/Ý]€S¡m¿Ú^wë<“ÈÊ”^®¬Ùr+åÂTàå€hþOVµrYß~‹
h$®i˜{>ÅÎZ€'à€ü 
Ö$¯- Úaï 3·íõ¼f•<´1Ýa©Z*rîûv.ù•jáK±x^{vat”Èxv×2ÎÆ`Yû‹¯U&^<ÐÑÓsñÄ@–i…ò<1¦uüµª.÷Ïá"l–a·(Q`H'kN*ž`–*U!©ÓEc[ù!…ùSøÈk5·ˆkya±™»xE[Èž®ñÉk¿¨NnM)FÞ„r7y0#0¦A›–b£>ŒH#~2%¿/¥ˆ!ÛµlHä>VœOý3M¼bJþ 8ãÁa'¤ÎTÉ¡ü¶êƒ§.åDÑÀ6>;?Ä8óh ž1(žßvl×3šMµíñÍÕ(dÕjMÄC9¡[þåY-Žƒ¬	cOÆµµñýÑWûm¶Zà5»ÇêsM×k´á	ÜÄÖÍäöó~„4ìQ`Šàˆý=VêœÇo}ð7•w.¹ŽìV¥¹!HG<±E¼fÕ!m„lXx­ó…ðêÀ4`Í9k.aä…½¤rº‹¯†k"E­T§7¤ŠS­Q•)mQ'Ã"&¶8²:ñ¸&¡2®ô˜VHl’cû%Ûyð©!êØYóTûjÑ²Æä.ëÍ˜ú#Ñ6©2nì`3XkaÑZMz¿S µ„ìþÙîkvÖÝò yÄÖ¤¦ÂIýÜÂ&ÊïH­&²ÍB°ˆß2Ñà×§Å
)ýA¶jÍ¯YëÜ¼=ç2FB²ˆBE4õ V¯|¬«®º>Îú—Ÿ±ÅiñÖžÜMÙã¾}ŸcÚ¡C‡öíFÖ¾ôÛ÷ì«ñ°Š ks3so^Ÿ›9#ãî@M“ZXãˆÓdX£"²§çM\íã2×kT?†ÕjÃ*yÃW³’·`'©óÅðÍÜ­RÃ{ol~…íÕé…ÙùÊ)¬†éù±±¹KÁhH¹Ð½ÆÔ˜KMa¶ëÛñÌüÇNŸÉŽLÍ®Œ|öº’ ggF®__©Ì_˜Xâ%uŸxÏº²Í.ñ/oÖ:ûÝÑ%œ¼ù›>2wÍu^ûÁß“3B)ä/<¬wß¸~r\=×¶7½úX3É¦T¦šúˆ‰’â[³%ù§ðÔJ%ë‰ía-Ô€Q|Kìsé®­ÓRZ¹óÄðpy0Í·øŽŽ.
#ûšS)² sCCÃ¹l'"ÝŠt’Ù%pô•%Ô_!¶¤ÌD©W†XB²Oäåd9Ìéj"«LKÖ˜K-Í.ÜPx Ž€Ecq¢jóT1(VÛ¿£mÿK/õäUˆI4å ÍäIMJ\ª‡ŠÔšjÔL;:¿ubò—ÇŽVÔCmúMO¼7uªP.¯Ù¿ëâÅ‹'N4Òq±§‡y¹¿”ê,;2Ë•ººÒÛmí–ƒ5‹Æ'&_{ìºŽÑŽ\±ÊÍp¾tV^´øqŒË	Võµ¤²-HÝ¥›E}Â6=¢×¹sÙo.r±±U98(òú`^ãš,^œŠe¿…:]'7ÉuŸF.Å««A·µ-WçzmË`ƒüÝ‡Çï²††kÀšSÝØTæ)ZSÕ¦ÅÈ(”$ÏP¿ŠèÄ–çÔB[)›é;ñ‚c$4`ÃlpQÒÁ*­±)R{&G›äAÑ"[3	ÇJIŠÜÄj¤Àh6·m©ä ¿½›³¶Ñ?7SÇf&ë&)”CÚl°†sF’Ì³qCëöDkZ»Ç3¤\>%zµë#ýzr
SKvkÔ`K—²%ðšO‡¸&{í%ØOq"ºòw°š>§žxBHý¹ä.€gMiýO(¡XÓ¢5´AÁ¯™ jQo5×4äöÇá"ŒÌkŒ5îwñÕ4†
ÓÈRÓCŠ8ÍP-<¼w'‹¤¯ñeƒbdc°sÛG1®ÅÍ±"F«ÖìwŠ#FP´f-
„LÊ	mÖï&;ñ.ÆšáZ´lMïÁÕ?ÚJµ{9kqŸ5Ø,ªƒ4/ÍÓš KsGkÚ“´	~cØ76«9R+jLêv§)¸_k×ê VW]u}Bô©}Øj¢5ßbí¬5ªUyðáƒ»™ìË>ÜuÄÛjÕVEA.Î]XÝáš
Hvd¢‰ØBP¿5¨&XÓ í|æ5R»Ïœµ]íí;i®¶þõîð¬Ö1üµ¡þÒ`Ÿ·Õ~ÿö2-½ëW±‰8^”*.½W©,ÝZ"áq~†eXTàÍàŠÍ=²¶*ë8©åHOW¬žó6rê.æ†Fœ´ñ#K×FÒã³£ÂHÎŒ--MLàÙ]w°¶²Bå¤Ì6¨î†hî]Åù×Á\£S¶®ýáäÿ÷´XÃLSäŸ	3\ÎÈ•“ÇŸOµl7?ÿbÆ¦|õ–QÒL°¢± ªÙ±ÕÆ‹cM?wŽ~ØùŒ¸ô V­kÙÁ’å¡®4«âÒCÃL‡†»rÔCÒâyh¸£Ð™M£"ÊdJ.²?È5"\Ç/­«êï/À)™,,˜Ne›ÓòƒöîF2XXcÔ,kH‡8ƒ‰HÍÃU”|04VCm»{ìÍw´«ê±³ÛÅ?SíG!U$a©Z¼hÏ‘Z@µËˆQý ˜6yôèÍ‰
ß˜—wÌLé9|ñ"±Ú‰‹=ÀÚ®Ã‡/î st ¿Èêï‚r]_éF$ä*æedÅo-b!{-¢Zë¸–Ö2°×:5ÅnP—qÎuX±ØLö¾`Ör<ÜLXHF96æÖäX¸È~:'VÃ‹ä§„Oô_€€™3å=¼MGrØ™…
Ì¾íYNÎ8ë•I'€:ë‚P\rÀ¥åpÛ·»Õƒ@œÎU_ªd³ŒêÓ¿!Ï—ÄØ¬™çu,ÅeØéï`Ü
‹(¾ßòûÎ/dÓ±Ù+[‡cƒï·fþA#øPðMí6´ÍGÄU~‡»¤ÑÜ=Á?!2	ÕB[l¤L³šJHoLÿ uÅV•†®çÖñ*{6Ùö×!kÔ@*¼¯k>LdÂþ&…füEj«Üc^‹V¯…jÈïÂg¬PcäÒã§Y4'¤f×Þ2÷Ôa¦,Ó10°¦.V“„K5©"¶±©¿xcô\ÓŒµÕ·$…°þØQÄ0-¹ÅZH‘In°§?2KtÖ`W7ÚÃ[B<äædgm5ÿ‡ö|Q¤±Z°Öbc-
‰€­Êkw—5ÆH¡2ÈYk†j·y0Ó½6©?<g™CÍ¸L› k6]•ÿh£íFŠòEÂiŒl$½jà5íüßi©Z=K¤®ºêúd÷[#lbÝf–Ú£l‡^Ü‡v?üÀ?ÿù¶#ùgú©q£ÒXÍko 7gÖ=ø³uÐ™Ëë'ô_°&vã7‰ypÖâ0H©§½}}Ã3;wmu‘";×¯oï¹xàÁý=ë_ÿã*zúÞ å½Yåßú¾+|ë7Þpiýóæª]V”÷[ó“•¥«‚µ[WÇ×ôöÚNa­\ð¬Ö "¼§ñ¯³·nÂZÒ4Wä«ïÙs#HÞºº87—9·46>µr¶8Çÿ®Æmó+ó³rØ*#êá&XÓ ¬a®ä¬ýpñ7>ú¦ƒµ/~õûB5É¥÷ã­]yõäñÇ^½reûcW®i‚ËªõŽ){è;zc¦EâÛwgGNÍÕH Ú˜5)2TÌTzëÜö³#¤ów*øÛ_*+Â¯±¡h0]Jgš†É‰<­FkìR©Ð?4|¢`å2}²nµ\ªp­»À÷”\¤B!×—äšÓYÜ3ñZcJUŽ|½z5Ejä$Ë‚Gn›•–×EÖ7XC=µÑþ—¾ò£BÛ·4«~\Ý;N<ªÕä?¾Ãý‚ÔPhÞ h—ß»y“k•é™ÊÄÍ……Ñ›v¬9ß)J»¬i{ £»ý0¬Æ~¿+Z\“×vtfûÓù5¾¿œÖŠ©Â0CwjFveZAF*‹¸œ×ÈÉ œýUq	y’`.b35£kœç¤„+kr,sf³˜)‡‘È	ò2€/ëay·.dÛ~d»b"9GËå8ª,JgË«¹°H}JuQ;n½¸”ãý¬]'ÛLŸ…`’Ç¬¼5k¨†xe¸2UëÇ§º¥û²yóãø=™¤ÝÏïÂY“Ìà±fkê®&±‡ØW«lºŒY9 v5Õ&ÛÃ6ÛÂz5¤,È kÑ7mÝ·pB0Ö8âíµˆÑj­µU!þÉÖšV¬mÆçcaW@5g”pŒHï²m µãªU°¥”E²Ï/¼©u¯¡ª`MõëJõïrì	7‚µÑ›£ËÓ,¡ÔaÂ­âµ1T›ª!ŸwËÔ”©“Í"F^P°ˆd ÌµÅÄÔR:×{£Þ?ë×èÝº	FS"äêÈþà—%xk¡óšÆ(]ÄÝ4D
¤æ±-1´_›äàþÄÐ~©¶¶Ý½ÈÆO&µ€lÒn6F¨wh×-‘×<­%8kÈ³šnÈÌ5j‰ÙýÀî½f-œž‰j¬5ô;­”?¦%8k(²ÔØ†rIøŒ]ŠÁC›¶!$N´óÒt×Ôê ™„ŒHád½¼6^Úõ!#€Z}‰Z]uÕõÉY²¥)õñŠwïÖ¢5bû=¬=üùÏ?L(gªYd-«ÉX›»~}fúqœ5ÇjüŒœ5Ïjèv$§DÎÚjXëéam‹ÕîÛ¹TÛÿàÎ—{¶^Ïa¾?ÿñ	×\mà{@†l5ã“¯~µºZíê0±³F]9î™hMeá2´6;;wá<Ël0p¦++ã«Œµ¢KÅÈ¨q*¥*1áiò7éAõ12>~ºxölú4œÆæì"‘óKçÆoÜ¸µøÙÕHž¾NÈ¿-_»ìp/ŽÊ\cù‰¹†¾ÁW¬/«ÑjMI˜kWŽŸ<yådóÓŒ¸j^©fÙhM)ºgSú¶­vÙ¹ÞÞTsUÏÛRA‰¶Ò[ãÿ};<UF%Š'!Ý!ÔUh÷úè´†I$X,Òn»³\Æ!áúâ¬Éa‘;(bu©„xAÆj¶M‘¥P1—"¾Y°•s‚% ¡˜fD E~Xƒà1%]>GH¢ðOøà,µ¼	³œ±¦íå¯¼V ­B“´½ûR5ÿÛã+V…ÕÆÐmP›š¸lQ3•cíÏNNLTNY^X˜œ¸¹üì—-\P²5@í¢Fhð°Œ59k½ç†…£':ú::Zm&^3ó‰7’±Œ‘´h'íúcoG-î„lÈj3Ûbÿ!@Ë1B\"9øÏÒMuŒksMéælN+yZ#€;×`ÖG¢ N¢Éf[ôÊ"@žÀa{êžjá-ò´™d\kDG8#TYäÀ ÇÛ€ÉÄÓ¤ºXò‰Þ
3&²óT¦*ÈË»E…bUJÊMÉf×°!\f¨”IÆ‘ãLW©<öªy\Û»ºßšL6‰å\©ÚÁcÍ±Zl«h~Nñ¤*'ƒ³Öz[M›„€‘ Úµj!c„²FU;FM±·hý×&£Ì3Jå‚fÛ´d¹w,TÛ¶å)ðŒÅzüðšåõ«©È%µdÇ­'kdîÔ©ÊèädeªR…5×Œ×.™½†jÃF„j<$eö;}‹%r².})ª`Qâ=9p3ÖÊïµÑ=7?AD´Æ¨ÁánO$A†Ì~ÝB®ˆßÄÍÕâ(H_í»j6ð)¨%õX3R»s¼HmdÇ°p31±=;%ùGÀZÔ[¨Ó²K‰ŒÔ<¨1&åAÆÀvO_íßsÖ56(j¶¶ñ‰ÕæÙjF‡4õ·€pH›0uöš7¾4hf´Æ#–×½®ÙÆ~ùW`Â139PûtÝQ««®º>Qú”BE¢}Ÿûö?Êj50íÅç¼µ†Eöù‡s"5¡ZÄjV‰æ?5sêo™y™‹V=:`ëHUÏ<
!%¨íßßþ2–Ú3ÔAîÜÙ³¿tÓ×ón¾Ac¦ô¦ûB²ˆ…@~ó; %‹?|wVqý2Öfe¨k”A^¸¹4ýÈãžÏÎ?òÙódÙ‘)Ÿm0*a-Oš¯ÁJ‰pÎ‡,—ò2i¶¸F4b ‘Õ÷Ù9-çç0ÛÎÓN{fæÆë7®Ž/Þš¯\uŽž:»Ñ«í]õ^û!9#j»F%$$ñ×ÈÁÚ×¿ðuPM°vL³µ€-Õö˜Jh¬GéH7SK(Ÿ-×ÙkjÊ<ŸaÅ¸«Xó¬†VÞ:wúÏ[ÒgOŸê(Ôèº»<4Ì·sÖIAjCCÙLoy <,«-]ì-”ÊebLŠìÈXä²ˆ" ä–Nn›Vc	Öt¹r
oDÊÜÏñ¤–Tåu~ÖA0` ³A ŽçŠŽ&´d‹Z:¤yë0¬ñ:¤^æ(Ôë}é+/^öý¯¹Ý% òù*bæÐ¸ï³Ê]å£Ù£7'§—}ob¹wÝ…ÊèÂµ£ÿ{×®]×–OevÉ~ê©IÊ¥îî‹‡Õ¥.gâðÕ(,–ºJkRvyZ²¹ËKô• ¨?)']+¦‚6×5rR•‹DyŽø•ÍßÔÔ›¥3g¬3ú{lÒ<%O“ÓJ…Ò@g›(‰ŸnéëÏs¦k—­f®Ê”¹V¹‘“Q^³þm±Zë€RFZ~ (3°åíûÏ@a/Y‰·¨xãcå²î‚Ä~â_øÌôùQ

Üõ•Ö­µ>\ŸïŠÐ‚àX¬±ctVÝ ß‚ÍsÜžVP_M1ŠÐóªZ‘Åøoá¨^§m6‘Ïá$m¥ÄNk¶‰PmuÕZ”3è}‘VõŽ^íô<„xvÓ–ÍLÐf–¹ØG-ÀSwoö+ÂQ˜ô	pé©'M°Úÿ™3XÓßåØ%þ0Ç¦/,ÌMM-/O.\Xž\^u¶š×ÄD‚½V“åŸÅICjŠ&¿À(jãÃðÉ»&–t˜&’Ü#H£ŒSIQq¤hâþ‡â0ÈÛáwíî9­Ç5=LÕî\éI­¶ÇšA£Uò‰3Iî±æo‰‘ý§E
fXVs÷¼â@ÈØZRI	#ºBþJFéý<<E%Ãšj µ¹­IlìÜ;óZðÖ~W™"±­›kpX8 MÆ;Êc	
é"5îÞV¬Æ<©ø1ù€7ÒB$ÓÀj’@íŸÔQ­®ºêú„÷[¤«}ŽÈ¥6f›¬µçªÖZÛ«ÇMôCµˆÕ0ÖfÎüÌ@ø
°;k<tÄëíí_ß¾G¬¶ž*È];{^Þ¿¿Ú»ûÀ	¢E†`µ?ýÓíGŽ<èÄÂ("Ö‡½ûîõ™Å.èc~^KÖd©Ufçw¥ìÑ«Á…Þ6U:ª",ãâæ5}‰Îä Õ˜¥ŠÊdÌ¸r´””Ë4H:xölæôÊØ¹só×OWæúþ[ã‹³Ksg+xl7n-ñk–es¬\{wZ»~ýÍ7>‚ÖÞú¨¦BÈùÓÉÇ~òØÉ+ØÒ·a<“Ÿ†“-—‡»ôVX…TèîÂ#+e»
©&H-!^Äñ
¸Â}f
øóÿ—ˆb/wñ‹d€5Šó½â³ìÆZ&öÈ FÜ¿iÎ¹*<JX]‚5ú.§0ØšA‡_®“6p<B·fë¸¢8p¢4Xl!ñ†P‰ü8$“í#ÐÂe'ºŽËâæø5l\bÛ®,»eíðaÍƒZÏ®ÈU‹SEbOQ¤†âòÇ7ÕX­ÂbµÉÉË7/ôÏ/Wž= ÂÇåå3¥S#¼ù.XÍê ËÙb×rÿÎööne)žOe‡:{ƒÖ@ËUÉ~)Æ-üb?ST/i¨â‡Àô¬¥e‹1¤Ý§C»²ÄUOªW¬eØoÄÑmÙ^dÆ”žåÀX³úo·Àrj_7ÐÙUîèmSºGI"n	é¡)×&Àùp\ØR‰ÏÔêz6 ×Ò.ïÞ•ÞA†`
#±ÌÜ{ÉZ6ŒJU9/_Ì©‚Îâyžf#w¿‚œ+Òh¯+¥EmÏç‡úÒÿw5¬	LDaÂ„j)žOñ°Æ¨‰@ŒÐ¢NKŠJç0—m‹q¯´£¥£Ú¿…£V	‰ŒÖuGc-nŒŠí8ý¶µÆ×s•Cš¿Æ?Ì8FkeƒxSÊÃBd;nØÒºY]æ #!œ2!éxö”.Ê‡Ëþ:Å].ýqlŒujS?Û:=óÊ³Ï¾ræg?;sì˜ƒ5³Þì”Qi¸föZùË×~)¹V®9o“cjŠí¯¹- D$Œ kÛŒÕD–-²ycb/lÁZ°Ój¬±•l
¶šµš0H»'tÄö”–¸bÍ*| S‡´˜;¹j«l×Äþj¡6CŒi¶õG5ÿ‚IfÖ’ó Õbg-ÎƒŒIÍuZ»;±%—Aê¶J›÷ÄœfÛ×‚•fØRÓ‚§f°æ¹ÌxÊW02è€&Q3l›yé”˜ØÂkxd*¹7±wÏ¿®ƒZ]uÕõÉ[²æŒ5›hRHUA>zèÅ/é0°vðƒ3'_¥hÏqšgµ/V¬-^œ
H Ì2 ÏØaÐÜûj±8XkÝûô´kÕí°w¶÷Ü·£‡ÀþXM1_ûZnÖÜ'_õqú‚îÞ‚Xí]zRWv,Ï_–¯¶t“ùù[óNMÏW:×æg.øEj¶%ä7 £¯Þ(›F²ŒdŽdÔÓLU}›Ú’5Âlb:«.CìjiPñýs-¹‘ÏŽœ;ýþâ[+ï/Þz÷ìœu_["rÖüðÒu¼5eB¾õ¿þÆW]!$éý"µ+_øÅpëiJ ·_ùÕÛ¿êó½Ô¨‚ljF|Õ*ŸèÊ¹cM¥.Þ]©7×”ëÊªÒÁZh.fQ ‹AŽ´¼¿½opXËÒ
]T;2Ã¥ÃùßúkS]å²ÑË¶Kå¡Â¡ì µÖ5ŒùüT,%ŸVæŠÃ‰Art2¼ŽË†\4…Jæä§©¥³ÂÙ×Â.[ÅÈNã²­EÎÄQ@ á`­£§«ÔÙÝõšµ—±ÕØ¼&X;ürR dòR5H-Z©f‘Ò±£×nNL.Ol7+Sï§‹G.WŽkÇŽå°y“°šŠ/ùÀ‰`élßÕÍ›vËº:‡aìWÉ.— Ô a]‰œC63q-‰¤EÝ«å­¹º9ðmâ$vÎ—1ÇcßTšÂDÕ>r™É›]¹¤ÒeŒòF´Ä0›m„±!*>ÀB÷oÝ99E6Z×âöéhƒz±By)÷îøYb–éKã
Ê…J©[m%yjYAœ«Í+­‰Ö”’ÉÛïü±Õù}À¨B¥1"f«5ÿ¦™½¦=g ÑŸÌ¡Y…h›6­¤"ÁÚž-‚4Ž	În¸*\Dï”iS›'7ÅŽ’×}¾ˆn 73@“›Zi²æ¾‚Õ«l‹ÐŒ_ØäÍ;üt¿‹ ‰Õc\ êï¦,ž”(ÈwÔ}ìó…û¶^X¸°sëîÝÏ<xß3¯,LŒN.P9=½L½.'‹è.¯¶×.ÕØk©H®¸‹ìÇ_2Ö> Òw¸ãsà‹€U»	ß? ÊEÄ3ÄQSu"œAÞ¿QY¸s¨'AÞïq‹µ.’ì¬¹»ÙjvH-àI/QÙªOŒÂûc\¬+d?•ÙÝƒZØø£žë[ÿ­n½Ž¢Vk±µ/Z#âCÆZ0ãšnl"Ý#2âµ¸ÕÚ×ý:)2FµÐ_m•¿·š`kbNX(^Èæ1‹…#œ?^B
´&:äJ0µÿí¿úGuÕUW]Ÿ´%k$?ŠÕŒÍöIÀÛs$D>ppßs„÷ïëzìd 5¡Z`µjºÈ›‹ãæ¬ÝçYÍ»lÜx&Fµ'Wçöï<Ð³ÿ 9ýHYZ³vß“í;{ 5E‹|í{ƒYÛ9yüUK44y‡Þj‹Øj•)`M«ñÓ–¦X˜¶tõæüÍSûÛvLW Šqk†”x9—B99|	á‡Ì‹t†‡‚ô­˜Z00ÆEB¤RB8ScJ'áu5ñCgÏŽ46Ž\¿õW3ã³7fço¡«<f—4®ŒWÞ½1ºHÒÈ›Ö¾ù`íXcÉÚŽŸ¼råiòÜŽ\9ùö¯ƒ5,ë-o-4hõ’uV“¡•íl¤½R“-X‹Ü%³—ŒÕ†þç¹³CƒF½½]CH°Ö”ÊAi]…Ææ4µ„E>)Ò'3¥²\hº–£ƒuf` ºdj06°8J_Ð­óV&=àü veÀè°bâŸN¡J?—ÿo5‚Š¸°s˜Ðä.¯vl
—Ä½c¿—¤ÇÃ]lÚê¶j‡{TS?ôàª£þa„jïxT³DtFµÊ//þrôòÍkGY!DäØ¹¾.Xí½é­ÀaË¼Ï2¬öÖªÅðž‡ôt\¥fC¶¿|âÄÐ@?Àâ¼5G­.K¿+¡+ƒ­µ®Á²WDkMEh+¥k “8]S
[Í^Ã€Ë
÷hŽæÚ ˜mGG…ŒŠpU*ÚÄó!!=)lR\cXSÌ'¥¨9–b‚‡içÓ¹žãŒuÂ|àpž+,eº™=ÖàJ×ñ/+ú/ \–qT¦¤~µ’–²å9¬®÷¶\V1!†œÉiP!×ö+%óð· ,XA}Ä¬	ÃP¨‚4_„ÑFÎš'¶0*•D©‘<é Mñ…LZ«‰#:ÒªmÔ>J “Ì4vî)ð„ÁnÉÉýÎkò¡ëœíq±ZJ]ÕhxëˆIèØL-¤`r›`mN ÖZÕN ÉUÃ4d Åÿ\¯__3ÛW°öÎ»ÄŸé;Sï\š»ðà+Ss3Ï¶ïÚõÌ}‡œœ>3=µ°<}ìØ²ûSea‚ÖÞ‹ì5‡kç„i*°Õ¸jºú‚GW‰³çH›ªK«½È7l"#Eà`wÄö!C°‡6ziÏ“âEÕ­…Ìþ`¬E
Ñ"ö¸s¼ˆ/X˜*]r 5„{Œk‰•a•FÞ}ÕZrÂÈCwuÖ µy—:ÈÐÛî÷dµÕ!ïß"S-V@³šG³yDƒÌl‚4ú®jÚVÉÌ[i¡v`¯ÑÂVgé¥â@‘ÿêgü'·—˜¢=èßÔƒEêª«®O˜>…‰&Xc 6!,¶GŸ;HäÁçÀµ®¾í?¯A5Ëì¬&-žº¯ÊeÈïÜ•Öž„ç|Cì'Û/è¾øúë=Ïì\«íz™äþÿÇÞùÇÆYßy~¥ûo{Ý©Ž•xXÓ€}vÙÉpf¼3ÌºI&O°5sq¦>®”™ƒëDdKê]„r+;¹ì!~*;»vÙDÎ+¾ä@aU“•Õ-ˆpnE6¥E\¥{½?ŸyòÄÏMíþù3ó|ŸïóÌ3ã™g&èyñþ|ÞŸ®MÛº,ó«t`mxøž{úÞã°‰d¤Gžð¼7ÁÚ‰³ûçOañqê¬, wÎMÕÅýÅbq°á0‰ŽÔ©Y R° [¸åK2.áÇÍåÁ#W7¶@dP’øŒ£â1…ñœ46e¿½ûÂÊkKgÛâÈx~¶Dí³§À4ú®áá?}äUt'>Öž§ãÚsþrk(kTªý9½’^Õ¸;¬Åš5rŒëÏ5+\ƒ´Z µåj‰8²š³Z}{‘¿›ø Û˜ú7çs’Íˆ12âšb`Gy°TiËçJ	ªõšÙ—Ïõ
ÅÁâ NƒÛÙi~ýq¤3#[å¼á€Â„¶¢¤¬q6ÇØÖNHÁ¤#B¯â"ÏôZµlJÂš$p˜Ñ}HÖ ^5tP­–‚Òj¢Zh 9¨jåtÄUÄQÍ>=ò&W±Fj^è#?=-Õùê2v{³ç™/ÞuæÌ™êùêôk£»ÏîÞœa&2S–þ¬QÃ62a”É›; ž%rƒb˜É‘Èz.ÇÆ¤D%¬ÑCÃžÀ]‘0Ë|lîEaâ)If^¨vòlbEfÒ0-CÑqÕ¶MéŽMˆVÊsä8D8XÍ¯’1D†œJ¥F‘6 ÔÝ™Œ[ÈUUÂ#c¾œV6*bg¦ÖOz©8€˜qÒyÓ’ÖÈN84Z7sËNõ&èÖ[Ž©™¤€ÖHh¼SÁZ†µl>=é•Zí¡2Ë=û¥ýít=ã™pÆa-ßrÏB¹F²B–B¢5f‚5¿°ÖLud uiÏã+k Šh-¼EkÖ ?½¨_c#Þu\¼ÔÆqp×ú©H£Xm#Guàþhï“Ê47ó€«©pÄ'!9òÎ÷û‹iï&V†°f~¥/Î¿þúä®]»&FFvñ_Ì›Ý¿g×ûq+]î¹ëCÄµÀ ÒxˆxùOg .ðšÖHœüÝÚYçËòD§Òjé@K¦Å¼û†aP§MàJúš-áÝñ¬n‹5'>Ý"YQÛ~­CRó;á¨¦1ÔÕ"V‘ˆ˜z^>2¿¢æ6:“EX-Üç¶±"êôZówW¿j­¾²fyuúbÿáÒšnCTWcñšµ¯·n­W©Vß2bÙï˜vÒl;€4"Lu´%L^ì 5†ÑÐ˜ûãáÚ_×göêümYýüÎ‘µw¬&B®Æj¬ÆU–ù•„iwkjˆÍÆÎ›Ön¼{g_þôS?vPQVs ¦ççççk‘€Ñ4°rXcŒÄ® Öv‘úˆ;ÿ³Ï>;TìyxÅˆ	kCnì È‡ÜLV.:—pùsöÄ‰³óg/à¢/_‘Ù=“³‹§fÕ¶«»ÓXCÑ(ÕA cµEÊÓ#Ø¥#­ézzC‰Þ¤²ÅU ¦MÖÌ“ìÑÕ7ûu®Ú6l‘×ÞþI,vvazúí×Ž,½ý€í³g?yéÜ9ä6¹Œ kŸÿî‡? 96ñÈw¿{ú©¿|Êií!ÁÚhí•áW>Ú§®j¨*’!"—Å•8ÂšwÏòüGÆPX”F°Ei–"u03vø z£qâ2%ÚaK[“ÞÅÇM–ËXCò¦þú°Z6W,0ðï-j¨"Kž
dIR!!t˜»&µQ–û»YûC!ÀEn<A˜ÆK“,
6xÉÙLÔÐèþúLY¬uf)LE¶7˜µÈö‡EjiQHSÕ’B5jÀ§ ªUA6&@z«*Â¼ ççF>\FV[¬C`›=^KdFGè}ýèl6ÂRHWÚ£FkeDÈ1¹;Žñ»ËF
ƒ©†^•²åQ**ŒDD¾"DÇ–6gˆJæ—` ¿H¬9c´ÉÅUÀæTÇ™UŸrW9V»³)|XüyòYÑ	w¯H!–utc(glŠòÊW©7‚‹egg’óŸ “Lð!›5×ÉK¤øžÄ|æ(Éè¾"2KIÀ‡
>‚¼:„”	½ä8þ•àõ)/IA¸UÙÁq®™ÚgMfÕÓA$—Z§l×
ìªóõ¤¥Ñuy‡Z}Ýº9ÕLV»ÒWJjôTüûA˜B"õH„Ülfþ5£þÀ¤BWÐ_,­)’èeV[ñt‰i­:  eZº¯’­¸\˜¥ÙÞß@N¤&¼IiV÷Þ»u«>.6—"RFvèƒAqïÿz.lý§,Fm¼~äs“'·m*îß¿§§0´}¤çšõ7*—á¾õë'«ÇŽÚ³<õÖ1”Ih-‚kÓ¿&áÑ, •hÉLkØ¹ÂÎ+§Q(ý¼Q5ºó“Ú
¤¬ÙÌXËñ ÂµŸHWlö„6#¾áæ@úÝ!Í¿ûÀ¨CkNiLêV¬qÒ
¿«Emû¯àÙ¯[”È|ñíè¼~·5ÿkQeÍ³ ëæAF­±8¬q*kõMF®Lj>èV_XÓíúŽ¨¨´È–¨ÌwÙÌ`Mw-A8A­¾œ·BÃ~ßäêû‰h©þ²Á‹h[˜d;j¡öó$ÿö¯&B®Æj¬ÆÕkÿòî¾«õõÉeäæ[0ò¿QŠš ŽžØlÚòØéŸHM¨²šÁÚìÜ¡k>8trÝÚ¥iaKìõÑà€@W¸ŽVjOÏÌ<;Cd±04ó,—èL/êjãÃû^A‡úïw8«½Ã{®~¦Îž F¬záü±FTÝ½¼°§g™H3À“'¼X=‚©ÕéØõ©‡û3PTäH»%×4)1Ž¶$>k·Jµ*3y­‰‘+é¤:l™¯=$7­ÞÕ³4MÒ¹Ï>{©­maaé³¥éôÑ>qbéMÁš\Fè¶f&n§¿ãq`Oôj°¶ï#`4ã¯ ãcÒÔÚÑó²¥ü`/´†°¦ Õ2"ë	k„ÁÚüüAyXŒUpik)áÐ€Œ«xª­R‚ÛB¤Ä¤ôIp.×Û[ìÌ•s¸ñÃˆ¥¬:½áYI&+©,‡Cd¾¥jýé,Òšr!©	Ö)íTC±%$ ¦È¸ÌK§I:¬ñˆi©Þ—·®I©SL>ù_¶ãØïfýâ´(ªªÚÿ'%²ègðæô´HmªÖ [Ã[²oXxëØôîÝ#Û«o-<z|jsþ3sÙ5e¬EìN ¦u•3c£3l3§7öÞ5ràÀ(ž”kÅ’´TAß6`I0’|×‹ÇLü‚ùbVË‡Ûb,«Ñ*Iýl¶Ä3òúgéÔÅ=;²–‰£]ƒœ&ô9{Ý¸=Ì‰ÖËÓªn‹q[s{„ŒJQµV	Þ†˜Py©|ÛéÆ„%kúWAšýiÚcKT—ïŒOYäáÙÃ•”šf[£î˜^0».¥7/!Õ’0aÕW0þ7¸c+Ù’˜Xµþt5sè‡T^ef+ÏÅÓŠA`f7…ö×&²¾—ª¦*/„3Ùß›d×ÇÂ,¤.¬òµAJ$lÄ®0Ò€­®ÉÈõ¾Sâ—Ñ;tƒ¿ÄhÊjä!&
ž«}RŸjÎñ­úsŠ6¡ÆþÖàßŠ»H«¨‘7Ë´ä[éÃšÑ'ªå7¿u%¬½ÉüE6æÖQ¥Ö³»kÓ¦mëít ë¾·m»©O°vrnqyÿ¡ã¨jØ½kŠÙ³¿Ë 3c´÷š¿%E^âñ‚k‹9 èS NJ@ä³b’Béš°“LH%?R…Ç Ïf9Ú¦ì«“ÿ[xóà•¿°fÍoBµ•œeµhDY-Ú;lÀg4U·ZMqiYÚ
|Sø4š)[ÓÖ¬ÕÇµ:æýDhy9‹‘H8ÙðÅ:GÖñ¹œ:”vE7ÈÐ¢ŸÐ¦í´›ûˆ0c´½®©l+Í'>FaÌ—ºçjXQ¥†hlž9ˆñ&ÿ›?þ£ÕXÕX«©d¢´¾@W“%$F ÚLïß¹ó~¨­øãÇ~üî÷EjTs]jµ…ÙNÎOÂb¤EjÖ+Æz´Ö]DX£ýõÓÏÎ<[(\µuÃl¬Ájrjß'VûoÒÕÈ}{ä‰wž¸èü7¬=UÝžâ¤/Tgçö,ï.É¢,­­IŒUd¨ »T*™—¡º(•@”²®j1%ïµoñ|G®‘Ù´Ì/ÓÞÜa„pó—˜Ö¨Ð)Mz´MUiÖÂüí¥Ÿ°ãÝO>Yz{aúÓŸ-Å¦ÏžE÷;÷úÒç2­Õ,·iäy¯ÜÓÒ«û¤ƒµÅÑÂÆ‡ÇÇšã*¤• X®dù‹²±öj-ZäJtñkÂ#ÿúµL¢r@Rê—,!Ñ„¶èšþ(SÊF»µfóÄÌ¢D)V¹ÜÛ[æDÓ­ÄÉš'f&Ã#ÎŒ2f‰nMÂ^õ²v|ÜK°±	€`ãTÉë‘ ÕÌ¬ÐÛ^ó˜jœÅÖ{‡0y2Ýù2„6ÒK/ì°DˆjC!ªÝSÕì›^zõ«N­JÃë…êÔÔ™¿«.T­Î–Ýþèñc‹f÷˜Jl¨yÞãM7Q©Ö›¨˜¤àX“†ÒÆ.ÑÚh9Û)W à±£S•”ÍˆRiIŸíÜäÐÏg„ŠÌA1+gM‰{µŸC"Sµ3EXÜPWÆébÎ¡*áC<Þ˜3{7#e¬B¿ëDm¯TWÏ4µß#gÖ6ÜÍ¥‚j†!lÚ5O—°Æ[¾Ç ía|6z&ª¾RÀŽ/áj“ÇÖè<Iy›0;•±g«	ÁCñæ‡5ƒÕ1÷O44–Rüa½Ü_É[„z5ë-û~ç3‡5=âˆ¾ h*eÕØT70ØŒ|&¥BÚe°éh­[mî`Ê]Û5ZcÑ Õê“ Ú®wXª„»:Ìxeö†^a´zk5Ž•²ælè.#[AÈ[wÜI5Za#Z‰„Èv$	K­¶š­Š}0>‹êû¿žR¶ÊÚûO~cÝºmÅå»6Ý·m×¡¹ÉLFúpÂÝ´míµÝé=@lÕ)<L¥¯­×"Ù‹Ï¸¢fãæ;]bÖô58%3:¬A¿œ¸Ž¯ÝÐº¹æô&k:D°‚4Ij¤¬É¯_qilŸ¬Æâ+Ý®Ý*k+ìEüÎR‰dAF”µÒlñÁaÍ‡§i	mcë­uZ¬E@Ì¦AøŽ¨êæ¬VÇe$¢¬EŠÖ"´VcáPZswnW6	‘íË„Z'þäúˆQ}l‹ºAF„5Ep Ëhl:Iy…™írl–H7lÍê–®ùúRÚ#øCRg2$
h­Ÿ_ºTî½š¹«±WQüñ¿ÔðëÕv¬YõÒÚl µÝ~ûíëÞ§9©	ÕV°ÚÒ¹çÏM/;´þÐ!k ²ZTY«Ïjb¸b‘ÇvõŒþß™b¡ØCä³3Å¡™¡™.Óe.â¦ä@ÒëíXíôw)W{îRV;vêÔÙêä$2JõødçósÝÝÅ¢kI.¡U©S:Yƒµ8šQI&#"Š¸­QÌe2‡W_Å‘ 2ñOÆ,+R~¤=ºÙzgÈ¤.yBÍ“DØ[1åb¯[zûÔgK.}vî'Ó>¡ßš<F¨[Ãeä'(·û>E€ßñ-ƒµ‡îii–²¶oxl|ßx,9^IŒeÆäSSS·ü`.M½Ô`2W?¼¤ŽØ¶·D…µ ^tb¦L9œÀh£QÑõ ¿Ãáñ}Ãm¢DLYÍÍ’Öpò/Ñ+û€Ž¥@#Š…QÖ@€6Æï%>ê"™£Òk$­…Õiæ}Á)‰sN9Êeg˜$TÙD˜c†iš2ûï| c)¬) ¥Yöãö‡R«§ª…^ýÑžr—@«@NÍÿ]õÓ÷ÎÌžÿôi›xïØÔ\ïÐÈ]ÇzlqDô5˜C=¬mºi;12”ÞˆÈgc£BTË'ÁË2Ô+Ú-ãd)€"¤¨	ÙØàl‰í[ýžaS²¹]
¦°)fé¸Pš"&Óè¿×Ok‡tR<CZœ ÎðŒ’4JÑx8Ÿå{Àâ òÄø°Nw‹´NO›ä•“°Ø0'^Ê&(|ßq³â”ÎÆÄôÌ˜lMâ:éÝ§®ô›Ïª¡/‘(Óô:£”ÊèM3IsÕ7šÅMYs/Ëj‡òò95ÞKWþêUZbË‹‘©û²\Ö 3O‚äÎ®­–ü¸¼°‹cµ.Ó(iX³;Éž©]—ÀJ‘v†dF¨%›¨*¸ÖÚ‘Œ£kvD«v0	‰`£vR²¦ç¶‚€¯Kp‰¸am-¯eªHÁ¼Ù/ëþ~ë,çÙ‡n´òÛƒüXCX#|½p×äôAJÖmÚÔÃ;wßuÓN`í&¤ÝA,b:‰“{&)¬œ=6µ€IÎ¥¥k½!?ìÆû	jïEb³ïiœñœ¬~…4K*í”ÏyëÖÖŒ†8[Àöý.©¡„…æýa"¤ÝC±Í'ADz¬qsBS\^XAÍoêº÷ÍÉ¯(«…vŸWp‚äµ¨®é‰]û‘PÆ ÕBZ‹­W(Z‹:Œ8¯Õ´HSì/e1¢[ú53ê¿rdý”HV~*kð“FŸ…†¡/ˆmzøt¥”ÎêwUc‡o¿Ê?.•µÂf8ûlUvo€k’Ù7¯ú÷¯Æj¬ÆÕ_Ùù ZbejžIµ>åAÞ?Ìv;qMöÝï‡¤&TS e,‚kþ¹Éˆ³HÙ.k¹×¢8úôLÏ®ëêÖzž%'R¨–«±Z|Ë+Ö—TSäsÏ…¬vtê>ó‡ŽÊòogÃäü$dÐ]$Ò	)×-Ò%²³I³ß“ú€»a‡ªÒ˜Ä¬¥±;šáy¬QÇ! Å¬W	DðýP£1©Rn7ÒS©±©q÷‹Ì,Ð:`'ÿé×–([ÃÀÿ¥ÏÖ8yO`ùØ_>uú›ÓVkF/Û¬ã©&B¥_±æ8ûywzÓY€¥cfY*¹°¿¬½ˆb~~aú`%ouj4¦ÛbîÀÚ¸4 ’+I§kkáÝfÓ\ücéOÞ\)ËÑÙ&åç%JYïÍ™Ê¸t¦œ<ïe ‹uóÑ H©‚]ÜÛ€<2¬‡šÁü.2ŒØìŠ[ão¤Gž|ùÉ¡ôö'_.tŠÎ”ýè˜veT“W ¦žòIdÕ›~‡µ÷Î|81ñiõÓñ±‰ÝïÿéñÝ½ËSSÕå!ÙÔ³|š™@­«XèÉò 
1€;äek0ÜÀ·^Ê5äJ•‰<Ü†n%ª]íÊ¥˜&`‰®Tí't×qçÇLK³\øÍÊ\K´×2¾x°I°Ö©q†Òiv"wBvfªßbÿ' ¤Ë’¬ØSg-÷Xf¤é	Ë?ë›“HÊ+»ŠðåÝÓL·äÉYè­Ô;ÄxÍÇ¥9Ÿw·Î7 5dgBf€9 _°× 2I®kÐL_(¸(¹/¡Î©|eâ·†ï?c	ÌBUÍFc±0ûÑÛaûŒ#Øà BWaàˆazX‡—«Ý*£Ñë~€­CáY‘^¼FHQ“`ÆV˜G† ¶‘ìåÐf†ü¶Þ¬‡P$¯ ò‡ ;U©ñR¬Íë¤DÓßqñÍ3CO9ûig&í7?¯¹•Ö`Í!ZsÛÍOÏwî*Òz=µŽƒ®>`í¦¾í3#C¥Jg:›¨ä‡†:9É¿æ*NÿçÏóFÙAï5~Ï¿æ$ï›’f–ýÚ0XdK´• ò^Ý
²õk7tÆ	£ªÑšÛ8¢¨Eâë!©ùM÷•+£¨¤óZÐ;*¬Eûa‡|fkn>ß—6¢´Þê€ZØÓáòÝ°ƒ{$2ŠiQe­®°öÅ}±£v+”µ:Â«úÂÚ—1ZÔ¸ÿO7lþö—	Ç²ˆ²îs"- (¶8Sc kZ3Fì ¹G¤´Z[ÍS$rÅdü÷"bC›„ã­)…zÕ¿5Vc5®¦’5r é«&J»o°æþýkÜw#ÊÓm‡á´•¨°Ú9”µ¥¥só\s…¸,«Aj!¬,õñºg¯+>ýôÓ£½„êÕ¼VéÏÅjO=öÂ#ÒÕ~ð\ÐS‹Ë•£ŸgªÎV«ÕÉÛ–'n“³Èà`Ö.£Êï«”˜È»#A(8³ô4V“Ú`–|‚µ6a*‹âê<FÀ8¬ãMÀš6cÞD‹k¢26ðrCcû îGÎ½„ÑÈ©g57ù$õÄ;/¼ðO/œ>ýÍo~ï±î¿ý¤96üÑG°ÚXI™˜•ññ1X)àgRÌ'Jô@[2hkf‰hø²’_,Hƒ<rä`¥$ALrO€@	¯ïbzŒ ¡=“``9Aiøšmll&W®"XsäÈ®1
ánöìaEˆÖ¦®µ›Ø"øFp¶9í6BB´TÖH“®öð_<<˜Ë'S]V ¨q3L»"ª…â‹¨¶"ò¢ÃOÎ½wþØ|åÌÚËMžyïÓêò£C#ËÕãÎô¢—Ácpš€Aî"ùÑÁ5E«^Ó} \Æ¿¿T1·‘ZaÏ+µµÐZZZ«È¼=®tPEÆBy¦4µ¥À!N³HÕ~ÉX#°fZaiµÖGÐÞäÑëgLîÌáÆI¤så6¢Rñú3¾®dÂRsU©&õÌ¼M	œ=ñ´5eÞf>¡ª8<@¤jfb´önæûHåøAy§ûv¼}úÙÒaSò‘4ÊÊý õå'² X{”G¥ÑÒ|ÌÈÓÝCex_¥w°Ô6¡"*œê­6j<AUX¯f‹jÕ|Þ17CH7!½PÆý—Z£Ë+C`µN‚¡tg¡MÊYG §h®ç°?„5^'pêc`å{™˜$D»¬dP«S»Óß¥<Æˆ¿{ñàŽÍ›%9¡A¤îI'AZÓæ3ÿpdEk	Ï´Ë…Ý‡ößUì$á1—N¥1Ë­mÚD*d×ÀP9‹Ég¢RÊô¬_›=œH-kË4›ðß© óÚ¯Ôû™XoîèFÖÕ°q½Õ›¶lÜ°Ùm -ZùàÖç›Î¢5AÚÄ5§¯ð¶bÓWÄÜEÔê7Y«çÙïC ®i¨çÚo_âå…µªÕqíx­>«9tù$šM„ôý+íF¢úZ(®99êx¢„¬)ZsVsX«IkaÍïQiMÃ—Œð9†j_ï¸óËZ}eÍé,œŽh^²šŠ„H¦µSš6ƒ•Ï|sÅ¾¬1„# Æ?z×ÏnuËXv§l±Í¯]yÉLûW!Wc5Vã*‚µmÛúh®fÉÎjl¢¬]­Ý­4È×ŸL¥ÞuR‹¢²ÚÜäóóss“ýž¬vÍ¶@Zëî^;440 «Ñ×Šq 0ôôè`Õ‚b¥ï=þøéÇ|wò£Ÿ;8«á(qVûøg&çgo£¹lÃ7@5`­XHÉ¤Ÿ+J¶TÍ'Õ™NÉCeDRB”×EMšuxöÂ"ómPã59.H*K:YušµŠ–_»”5g‘&·‹lÒ­•Mv‘qƒµ¥ŸykÿÃSG/|þ¹hM°öú‹?zGH`ª5hDHŒ aÀ}Š1]ã¦2®?f]±KRKù/,#Ç˜Fšã÷a-Hµ­¬¤ö7ãB¯ojÉ”pÔ=Hü)çRÐA¼"Qm"_© k¥„L‘Îàº1
¯,KÎZV@%e¥Ñ
¬\KÓŸ ±.±ñÂ1Ú³¡¥¥Ü„¤‘H
+a™…Ë|+é'‡Ö4æ{sEkªÆ²"’¸"ª…n„HÍ ©î±‹YvLMOÌÒ[íÀÌÐè{b²{çšß=˜LÖêÒkÚQì´-‚m”·‘Þd~f¤¤ƒìº¶+a2Oùt ‡‹½Q>«ßP>dÆC³Eg|D×®TÔÕ®ŒZhI	²8þÎÊ'´Š°¤ýj(4'HÁ_{&ÖbB°d]ik‰4ŒYúªé»Wjà˜j.ù‰Sgi
&#«õƒƒ…žbÖèN6ýƒü†€ïŒlùt^b[¿^åeJ4Ó—“m,U0w\‡ù§@ÍÒUUu']MQf'	ó*1ÛJÙ§ÊäŸW2õ5±.[îÌ•Æ†GßwG6Â^Þk©	OîÑ_K{”±ˆ“Ú½Fnìd{+!à1C÷oð+ðšcª•JÎ&ÝÌ7Ñ‡ñÂ5IqÁõs¨wøÀÊš±fÛ…7`WaÓY§rŸtX3·9÷~DÔë§‘™TYžèÉ àè#ôCrïOþÏhÇvþúÖÜž\>ôÁÉ“·í¦U^÷µëÖv¦{nÂ¾¿bë*t¦ÓÙR%¹Žö&ÙDºgî­cÕý»ÉÕ4ßú•þ&o„Óé¬&HyŠðž€EÁš|8).RÊòú¯m0c•:|9õoh½>ª«0,µí‹L<¥/H€ŒzöûÑÕ" V§dMƒ[qzU¡½]°«yÈEõêÕˆ‹ÎúšDy-$5"ä2_Â1DµàF0„á¨1ï(k|À«­ 5@-Òi-¸ý³Äµ•¶ýûP	íÒÅaÍ§U?k_…ó»Á]ˆÂœ½V²Zh,ÂÄg,¼‚fµW½$MVDâ4Ûð\äÍêN¡R«ÎüW´«±«qµø‹ômÛôïn‘]?j0¨VSÖ”)aíƒwyd%ª…¬†¹ÈôKÓ'OÎMk`WÎ¾´°¶­æÜß](®-×]W(ÌR¢04š;PÖµz%è¬rµ_x!´ìÓ%’ i°öñ©?žœº0)i€HçzÓúßþ¥’X%!÷=ì”ã#ŠƒWÛÈ¸Mf¤ìÈl!%¥%bl°o¨Ÿ•0.Î‘ÍB»6Ž%­W5(#n3¯Ž˜¹¸èvpúÝx‹è¥‰nÙ'kÜq„|eZ{á±ÓwÜñÔ·¬É\¤-I%ÙØ8¨¶wbïÞŒ®Ù©KäR‰8ÊWÆûãæÛïÆýæ¶…5NÍôô‘ýùÞ^Ü¡Í1Š¬`Èd*M½•„}ê„.é1Ë¨àL§åÖÔZÅw&0Z#f.Ò³ÒÐEcÜ9m^¥¥`‚>Ã`=¯âV€÷K¶fm¦a:ä²3„(ÚßÛ›Ì¹?¿†/‹jß½hÕôPÍ\E–ÿýAó:?ºP­þý‡çŸ,Ì‚0Y…,WÏ/6–Gˆ€Ì4àÉ²±&È‹d= 'ä9PÜ6 è,“)
œL8P`bB{"†d¦/Jîˆn‘È”#Uó‡)€ƒ‡’qù†ê‚vÙ.Ÿ&j%b!yŠÁ0I•nZ"ì3ÈŽICõ´³­oO-å’¨-ÕØdþûJæÕPÇØ®V((«.G#†l†¿ÂN2¤¹ê™
2©ó«¹ü"Õ³ /•ò	e¯ª¯štÇ¤¸„³¨Ø‘Ø›âI¦&`53‘1},Ê\g~‚ŸÔögîµTH^¶F*@Ëqd‚‰0X<)²fíÏHä°f)¹i+Z–Q†C›Ä/T7ijLç2XË*Ë˜ð@`Jk‘”9nžå('‘šo¿v)©Qš¤C´¶
Íú-…PoåVËÂdôO¢ÆÜÖÁ 7HÓWŽ¬æÿ0]N3-Xš,ìŸœŸ›£íÉd¡§gv¹éÎ®®‘	ÜÛúú®IÕé|úÚ]k¯mÈ–
]û«Ëûí-í>þÓ©ÅYês×~ñÌŽ~¸PçŒó­$H:’ 7ûÙÓ¥,XKR© VÎb(Êí:Ø¤OX°vÃÆëëHk—Ú@Ö—Öo§h$ƒß¾Ðr%ª…)ŽÔˆ„ñPÈk,—57ô¡.¦qÓÚ&+S }aˆDp¨/þ	FÛûù›­/­qžœuÃNk šßƒY-¢¬Õµ¯^YXS\©ýÞ
j„øÌ74:˜¬ÙÇ¸¢å5»Â²5À±­^µ¨œæœfM¶ïí÷V´qßjzšk[!5SÖíÿî€jöÀj"äj¬Æj\=þ";û¶9¬õÝMõšHífÊØî3VÖ µÛ¾ZÕŠÎ-,›¼vÝæÚöÁpyXó,ÈBXë†ÐÐÕŠ¸ö{ôØ{@ë	Ëøó‹õÇ^@”²È7—–ŒÕŽV.œº@êOýì­ÅÉêì¼E µuér.Wâb•ÌÇZ½TB}™™iRÜÄ6‹È¨ÜL0cß¢2¯vu#ÎÈ	R°Æ’É¬Irh,i¸ÆLÏÔD×ÌXŽ4»å›ò˜Ôu¸.Ï}öÉÙÏ?Çb„xþ‡ÐÚÚ>øØºãño}ë¡µW| áÊR¶4>¾wïxeb/Yc®¾ÄZ *)k*c“½HÖVøm„ÊÚÝ‘¶JÓÕýÄ^ ¬LåÌcÌÝ×yË“›cšb•(—+öq\s¨Š	2©z/ƒpÖ:s±Ï³Ùj4Sd•iÎ$´Å¢Ú©&k­¬I¿$d®áÍÇÇ¬³˜GÞhL=œÍ¹¯ˆg@*œÔÕzsåÀ¬?TÕœÕ^· ìÍ‹þ~ízìÈì±£UÊgÏ|º°x×äÔñ=ƒCðØMÛ7	Áfv/.îè†Ë"³®í×f<nahÂå©dèÚ„'iJL¦þ¦o	W\–ås±£	P×^NŒø9ˆõb6±~\¿5(Œˆg°³µôkJ´{ÑZ›ûvð§-«fåfçLÑ»œ?ÄÔ—Õ¹ÕÙfÆ-Ô´‘›¢9[nÎv¦;s<¡-E0¯Ä{T?½|Ù+€gÆ“Àšý«ÈuâC¢ÞwMÙœê;¹k@³S©š‘¹TSÑK9Ñ§©rÃ9’ìXÁ[ÌWH‰¤Íy"K¤Ò¹<ê{Ù”[ºæ¤Aká«üô{½ZX^…C‡!Vã0	T¦¬‰5jWÃ`š”®VJ¯«Â²ÝT¶Ù\» .Ö0‡ÒÂ5=ê…j­21Jãõ]mC1ƒôj¤€½8c9„z¿žt)W„+CPÞ¤Hé^s¾¬5*®þÃÁÀç¢°ö¢ˆÍ`íÉýs³/.Ìêé"÷qÛ®îôÐÀHW±3•ÞÖwßÚT2Ç
H»×5€Þ}›ö†
éÜàÜÑ·¦ç«SÞzíü¯ß¿WPë¤ø*ùï¿J¦
éDi–&/ô#ðÄ¯#ôdJâ°Ã”5‰^3þH7l¦6†³0ØìÄe5c'µPYs9³Î¨…[ kÆÎš„I>GÈ€ÕX…ºK=b‡ºA·ˆº¦Ñ#ô0±ð÷VWY#êIku?·Ô.ëùUìK‡=ã†­¨	ÏµÖ­9›…¢š–Ð\ÄE7G4ü±°C¶…OÂÂµ@…aíÛü|%K…ß¬´V›fÿaeÊŠÍÊ…t)Þ_•ÖVc5Vã*‰¯ÜüÀÎ¾·ÜróÍôÆ†ÖnÙù ßyà~Œûï¿ÿvFî¿}ýÁÕŽjb5ÅóK/-¢…±~¥šÆÀ>f—gµâP¡u­(=­(XÓ„T®ÀRSüžðjýAcµ`„ÿ¼`+õY®[ŽVÏ_¸ðýÌ÷ì¹k ØÝÍõf7>ô9”¡‚uþ¡±’C!CÖ›î€E¨ÄRÿaÓ0“q¿ˆ&R‘6¢{°xè ¶ðÂNªƒƒsé˜þü“³ˆk¬ýðXŒ<ñÈƒvZ“´ö°–HªT­T«ìg©Äb•½%$¯[É—Øæzr¨…¬µq™~ww‘Š.ø+ã|`-“D˜0-,ƒ˜6Z¬	q†uk–…I"	º+ÿpÍVe‹$4¯˜b[Ÿ“s×.t“DŽ(ËðGÑ%=¯GdÀƒ×¶²(}Œ,G§Jô÷Ê<Ù;äæá}ÕV ZI¨ÚŠü¯ï}äÞT kGe‰WSÕl™Åç|aaþðÜâ™Åêî=°Y¯üAè­îºÙ£wÈøÑmdûM¶Ÿ-_2uC–tÃ ;¼ÏZ>Ó¾ˆ\PÕŸÎÊô€/ëÒÒHZˆ.ŽBõJÁÙL9»¨l2¶ì£(”PE‹í±XÌH¡ŸŠÙ,K•Š1á°üD`þ$ ¨çr«äR©Rn~‚¨$çkm4ÓÃ{Ä¤L@‹Æï	ñc–Vkü!ý¤'xÅ\a  +QÃšŸÈæs¹
z3o)[J	ÖX´ß¼,ã5AÍr‰…†|yüÅSÂ3=×€µ” '¹µ»³";šPÅxE°f0cºa3¹ÜKë·G<tGµ_ ’e8í`*ƒƒiyÁQÈZ<±ƒu¿„¯~ ÍÃÌG ;¢ÕýFf"iSâ2a‹	3x„ÌU§Ø€oå©â£? ‡ÑÜOtqÈŠw§ôG”@!°¦¼G…	ˆ;^ýí~«VY-æ;æ;-ct×@WW×ö®Áµ»X÷r©î]Û®Y›¯Gs½£…ÎTª³w¤¯o[q°»³á¶ÅcGçªk¿úY@ª@ÐˆwóVÎ£u›2X³öä›ï¤•£#€&Lø‰j=4¶­.á³hšá>?&œx\TÕ4„°ià³zõjáMw?çfÍ‰Žæ´†Œ×¬Yú«²VW(kúAÔí¾¼¹HÈ\+E¸_™ÚVš’Q_Yó·*è7TYm¥{ ­…]±¿XYcø²ÁÁrëŽß[MMú5óA[¾'ÒDkº‡¢Z°›)¡mMÁÍç¾¸ˆo~\ qvÔ¨I5CX„)E¹•DH“Ô6«y¾ûæØàÊ»jÒÚ¿ø£ÕXÕX«¢díÏÕvÞ|ó-·˜´&\ûñÀýÌï¾ÀrÝßD —.¢ÚÒÃüÀšƒ‹s†hhW”Õº½C› MÛà"Gä' —æK••ÿh¬&Züá¹¥'Nœšª.¨—Vu~ùgoU«‹ü?êžny6ÐÞõDÆCù[PkA¼FÎ_-;oÒþÜ ’ @Ú¶X´²ÅkÜ•ÓÄa”¸&’QBXÃÒßqN¶ëòŽXCÔ:÷É±Ÿ|nñ»ç5Ñš!O_kÃcÉÄø/ùË±Œ¬õÇ%‚‘Y‰{åR±D4Ášú¬E+ÖVÂ.‰G^ÃB¯b>ëñæxVÊ³R^Yi;ÿ28,3K¹~ ððAÔÃYæ—-‰§@ô p©	!¤ÿÈFÄ"$Uà–lJÚÙsÈ¦„.ö­nK¨X/ìX2‘øº´&rcÛÿr(ª‰Õ®„jÂQd5û„aþ#°~ÑWÄZ#7`r~ððÁÅêìâñÅÉÝÇÏŸA‘Y±¹¢æ“k›¬==:ÓÙ©äÉÛ‰dI8Å×‘É§$5™÷c³Ë«Ðð=Áp¶Ö9j…]Tökú‘™PÛDÇ´RI»	I¶-Í`¹:JL˜àWÙîU”1Nù“ö ýÌsŠr%‘5Ó°%£^¥ŒÂ™ó«Bé5@.É&—jJ{F+ü€¡kñ‘¬”GGÉ†•h¬IT;âr¯éD6FO^·F²‰X¢‘à!Ì"‡å2Š²F•@˜Êg²Hlëèí+>ìI®ö@6®A	)øQ½YÖ4p”Ìþuª®\²š6 
,³
6™wl•íI~¸Ñß±m”$¨h’ëIÜçßwóR Ÿ;C²´Âf&¦™a?™–è°8ðVM ‚P­U<'¸ÔAÂ3ÐGžüz+›ï}¯~Þ5ù‡k®ò‘ßÿùÁª…Iö»ymzzòZì —ç&Gh»Þ}#D¶k œ^¿¾{íúžÞrµ=K§Ø”öõtv¯½öÚÛVç&Žúå(Hþº0˜“)ÔåtŠÖtºØfdÝo'Eí»íóó	Á'kŠ}ƒÈí†Õ|XáÝï@á›¡ æ“PT‹8A:±…·:Ná=žð;qXs(ª2Ü€5‰U…¯5 #-­>·(²…Í°u÷UÄ³¿.ª…d§U´/vp‹öZs‰àƒF•µ¯‡Êš"ÚûŸ_³F|êJã®?TZó…]EÍX‡zšÆ Ø,Bó-_.µƒ´ÁýG"J †ËcëFHÍªDIšîçlÿ M93ýÌÎ˜zð˜¶W!Wc5Vãêµ?Íkwß­Ñ›„Èß!!’Ýk7:BO3¡Z$’¸°´@äì@ZÖ ¶+T«EöˆÔXŠ½CCE`­ÜÈ°¿L
dlYq½þÈ;ïð&ÜÚdéì	jÕ¦ªo]8zì§g«§>®Nî?ÔY,®¢­¡¹o)¯ËN—1$dR˜1Ä%*7sž¯y®Cg\aÇáæ±eÄf
ªFSaZÒ¸,C+qjS g^­gž… ¦!vøðÁi O>SÙškkÀÚ;ÀÚ?=vú©o­}$ß~z¬k{Ç Ôq
ÍÊöîÝK‡lèÌ”°Li0-YLÂZÖ"ÂÚþúo#¿Ö–Éç­š¬¨”s¬à4L+ËÃO ½UÆTFÅ'2Pi›ÖLÍ•Cƒµv#/GS*`Mm«	’V¾ÖÂ„ Ñ·KiŽ®]fBXK²#O¥R½¹lV£1ÔWÕòuPÍ¯zƒkÞÔÜË\«)Àýøñ©ÙÃóU$×¿Çúym_ÅâÂ6$tqgmy¦˜ö²-Ž3i­·×žW¥/[åÀÌ(µb³<WÑIµ•6>×oÚUî§Á.§Xv—ÎïÀšR
…kŠvH®ßš5@Cú‘`Ê³8]:ÖêÞ2Šft<VêžÍY×ÏR›¨¥å2ˆ%èM¦…¥Äå°Ý	Ã”0éMÝÕÖ/êøÞÑ|Fï½î¤Ä¥ÑoJÊnŒ³[Ú—¦Eï§R‘Õ¤þ“fÓOÕ¤0›ÅÊ?¡–íVH§òz*ž€ 3 }ò¿’	y‰$8Ex³hœ`t“~PãbS29Ðs¤ydèâËêR¼²FëÇ¯ã}¸„‹±Ío5;±ð×¼Â54œµÃ¶"-S]ÐÌ\Zsó–³Õðë	x<9ÜÆ~A¡¡õdƒ¼­šàMYƒ\&ZO8Þ3ïÃ´³	05[F´®_OÚ/6*¬YCì76Æéýó³“kÏÏOÏCéôÚ¾M»rë±)né*”Æ0”¡Õä4·½kWÿÅ<4·H¯Vg§õ¿©þ€¸“µÞçG¸ÆûXšÕ¦„ñ§øîutèàt@T­°ZÀ+F›…ö"¾;80˜®h°V¯b-ðí¿b‹5ÂFµDpXS6/Â²VÑß†t¶0ÒÉ,!6Q—Í€õµ+bZýÂµàé+ˆ­®²¶AËŠVk¡²F„5k€š»Œ¨æ¬Æ=ª­ùírñÕK¦ÿ½ónë¼Î|gö[ÓOÛÍLIŽDD•Ö•›H*)Dad[a( ’5ÀA £e“™&°©VŠ,ÇñŸ,˜ Î¤Ž³Ë8&¥™D½&9KM¢”1k®2Í¨ÓÌØlÙØ­RµµÊÆîd3³¿çÜ\ñ.¥:Ê§xx„ûÞ÷^ äÅ¨¹?<ç<ç÷nÙ³ÿ—*Ró[XªæÕˆ.qiíT±éî·»Â¹ÖÎfLˆpoÀv¾úÈþþe‹¿é»LE³dÂ} QÃÙÃ±åÄÆx`fÚ¹ž¹ë±o$Xûã`+¬]åIVä;]YÛ|rmUM±0¿´¼<÷¬7¿öd»6­E¶ÁµÊ0¸VÌ5rå½Nkä0ša»ýàÄÍÕºÂŠ±šÓâòÒ²hmfåÂ3çžûñÿæoþmÁ|E’8õé
BxýANñ=²B è 6S±Õ”í¢¤/DrËõ¾\J‰¨1Õ.Ð£DSÒ”àˆx¦h1wÉÄŒÕ[•sJ³…Ü8‘ÚÂäÉ…sRÖ\[“´öÙïÿÓB>ôÐgiM]Ö€µ'žøÇ©Z£IµJö(1“¿$PIbB-‘ê½f¬úöG`íÔäÉø“O:¬‘—ÎZVg¦VhYOµFûŽ;PïjjÄ­ºN‘°š´­ý2"îôHš¾qéj^©gÐ&ÌEB³´Ò¾AÙOp^½³5ÎöF_º~ÞWÌÆ³7=RÍ¦¹i?M€\Õ"®"A_5ÅÌì‚€í\güØ±ËãœòsÏý¤qlªsñØ±ûÜö±Ñv*aM¡`w5_gj2šÝ%J«5ë¬š8Ò÷dÛ´Wƒ¡ãÍ|£ÝŠg[£Ø3¢J6›ö¡z©“$4Šw¬wúv¡§Ó[•1:êªÁÝ q‘üb2ê¬Öo°6(¨Ü@rÕ¢ÄI¤”û¿Iâj}‚ 3Ý“Âë¤ ¤Ë:ßvTd‰cZ˜Þ‚æhk€WûŠ‚&€½É}d@òƒÓÅJÓ>òYëy—@Îš®²É³Ó{›Ç¥ùY–g6	‚¡‘âÌ¡Rõ‹à8ŸŽzCt^"¨6úÍÑfW~tÆt½žO/$6¬A–håj® ¶r¶àr‘™BjìWõRH‚/=ÝŽÛL¨³j‡µ3I_Úf
·™Î¦öÕrˆssŠ@‡]n&x`môÈà(BpW9“èv¨`KE¦fÒÖ¢:fl%‡H
:­µÜk/#$5âç¨¦›æOuž:5>47;µ11jî¢g±’Nì-–J•-ÃÃ•|®XÚ}W®žoN4ªú®¥K¶•Ë¥\v|ê…¥ù¹Éã'çf;ÿôø
½
Öº›VæÓâ°¦W‡’ÆâÊÆoFMã2—â5 êæ]¬=1¤±pˆøŠø<"­ÙsÃvØ×Öˆë÷X“öé´&ôªnØ®µy¯s Ù1-Äµ°b-JláMKTW5ŸG•´µv„êZÔ¢Ê‡w=eÍŠ#Þýeå—Ö~›õ
jÐÙÕl²ê:Š„{9Ù°º½Z gÁ½ZBÍ-Jl¾Ÿß…lÙ)YYR»Éßþ5Ã®üiƒf,hâ°œaŸ˜mÝ½=Öc=Þ fbµ?~ç]t[ãF§5»Þ	¼}YmÛ¶ÍãùÿûŠ(O¯ÌŸ?¿|'Lfˆ&ø"Ý<˜_76Àe6TÐ0i4ÊÃhFžªöõn]Åjß°Hdµ™•ówŽ/\xe¥3w…ëö¥ÅW¯LõX¤ñT6¬ä’<”•ÖÃu¨s™i	$¡K-ÀlÓa–h;1LpZ³$È&ý°‹ël¶½s:3‡CµÅ²Z%‡5!‹`E°&å¯&W^YxW¬sîÂ…ó]eÍ!¿OüË¿ k<à°&V{L°†¬ö`Zm“U¨IÉ©™ä`âq”¶AÑZ¤!¶ÓŒ»‹|µ)K>TS..¢ðâÐGêÌGZ¬Yv`a´¦7Ž3!C`-“x5K}Ôþ>bH³6a^¶ƒS]ö«ÞÉ8xÀ˜Mul	Ï›K$åòrÓ¡CGsRÖœÒÖD5™ÊØë ‰Y/V›QHU“ÃýÔˆé¥É'—f®\é´÷;Ö™ýngú2jÚóÏ7D^î÷ˆRf æC˜	YêÖ«U)n³‡ÚSÔ)ûH=‘6e­€ûF»D­\6Ó®·Û­Lº0QG¤”úÄ‡Hš«„¬~=QŸ‰¹¤9ªêPgC:d7wÖ40öÇú3`YL6Æo[)ÄPÖ&a1±“läçMJñÎ‰õºåå?ÐÌÂj¥¡Š}°YkÉ
ú®2æI¹“OmŽq:¤ã>"ÄÂI2å©©½©Zw&Eù”kï¶ŽTÀ±Õª¥7R G›ìûe)•¸>2l’Óøaú*#ÛºƒfÝÔ'fæ
ö|Šd@ËÊÛ³~ñ¢*økU˜ôfhãˆw˜²)|­¹5?xõE,<ø	L¤!ÉÛÃ{·‰üè+HÏ˜Ò×êˆgâ6OWÕ›µ]-<ã*eä*5¹fñÂ.	k„Ô5¶}®éì¡dæv³±žbLR‡ÊQ	Öä^ýÛÙÔÂH5o'l†ä‰Í#ó“ñBóøìØ@ŽL&‡7m:¨<îaHÜpà¬T-µ[…b‘7[«—ÊÅbél£~ßåÎñt:u'F’?zñÅW-Ý”`tdÔÙaQI±±¨ss­˜ðZQÓTî>Ý²5x0à
•µ ÐBïþð>_E¤µ·¹)äšÂÚuÌ CiÍc‡T3Ÿ
½´
`Mn AŽªcšG4Ön‰­Õ5”µ¨äë•ÕB^»¾²uƒ$Â¢5×!]Xp-Z´«­]³æöŽ×SÔTª†áçGn4DdÑlHŸ(ÜT$$/`Í¶C
³Uð(&¾;ä;…«ž@ðjŽ¾’ê¥¡:TÖÖ>CÁ¨¿{×Þ¥Á…°fn$öMÍzäz¬Çz¼AÌ oýÀ;ß´©AkôU³Ø6"÷~ìûUxvXÃÒ#¢ªWÌŸX9éDfÉ†j[6ù¦‚Ùõ;b¬ç*Jˆ,Ö* ×*”W	Õûæ!«¹ ³šZaÏ—‹S++sãSSóÓïš_˜ßØC¤)¼”.—Ñë6Ê]\B‚ÙÙ%är®;'PBŠˆUæ€E˜ò"	Î”©Æc2Ñâ;Ù Ít3à¤?¡:$ù¶Û:Ó­b4MP‹ÇŒêžü«åÓ“ý±ùé‹‹‹§¾°9­Y"¤¤µ~ø?§5²…I@VLŽÍ×¿@ÚÎMz(PÚ¶G`-ôœÃjrvò$¶u~DV´6'íˆDGu/"›&Ã´ÆÅ—BkrçWµ•2!uŽ¼–Ê²õ%Š,á‘A¿úÏØé2»•Œ¬wÛŒe”ìh¤l
›úQ° ‰mõ^h·À£‡Çn:
¢qßþk£Úªnß0èìSˆ¦ªÉW„†ÀÀ…;èj“ÊÃ;>wù»/>OµÚÅï^ìt^†ÏhF_T mçÿ®¾dC[Õ[5ª•¡®w‚J$sgå Ù¨×9uyz™¥5±Y Ðö"J_	lûè©fE}ƒr¤á£”ˆ‰¹LAór>8Œ3n®¢j€,Ç¹¬–‰AÎb";ÑhlÝÜÓ¾d-t´Y‰âÌ”?!Ô˜$°%ÿs:W¢Ü)—LÁÞ-:h÷Å9¥"É’ív6#‘µKe	Þµz³—$]ìð³Z_:ßÝF—ÕOÂ
2ßê«æ¡>.Ú>¢õ ì˜B°SvmæÚéÃ$*º¿˜å.‰ª&qa-¤5)kæ:o‹"’@ˆCæ		§±ÿE8MÚ›¸Î~ÿ˜›¤XŠÌ>	`ºŠs“¯3ÓŽ }
­Æ®ï}ð]ï¹ðÆ!k<¢!H:°ñ£nSû2(ÔqÒ»Åéå‰Õ˜©ù“¨î$²kûï)oŸ?Y«·OâÎÒspóA¾ò"Fv—¥ªU«{GJU¢QK¤Ù_®>'é _aÏ±¹ãñá—Nœ˜ëtþA^ý:3Ž¬Å»–&+ßiì)h…TQe)‘·¾í¶PY#LÔtµ²PÚê4H÷‰êj„VotX Xãø®êˆÍÍCï¨OTui´özìE4D3 èúcµ²ÆÚAF¥µ€×®Y³æ\ì¨FdDZ3'H¢qÝôGHíwn¾Mé7Nk>ò/TÓlÛ@jó»˜n„hÆÔWÁ$|P¨¬s]IgEÀ½’ÊGV_Ö‚µÀ)œµÑ¬¦µâvï®ÀX‡µõXõxcÀÚ»Iy”¶öq`ëÂÚGÿ¶ØÛNJXûSÁÚU¨¶(V[žz©s~É55ƒ5økK$òz´6œW¤F÷„¬rÿPÖ¨Ë«áhÿ…‡CV3á0N/,pÅÞ™»<·ØyaéÊ‰©…¹t¡™HoÜ˜Ü˜L¦U<$(=<Œ`×“`šJö¨‘¯LöÜáN–#æâg~í¬Â"cÕ²‰U 4Ñ°‡¹@i‚1ð%–ð¤6¸Å /óVW}
¼ëÐZX“ÇñÉ“±Øäòâ•+‹Ë²Ö~ö³Ÿ}Ö=Fú±¡5^*°&‡œûÛ¢µBl+Õò´Túc,ÐAŠ×¶ªhmm/HÑÚìñ©ñûsyÎb*F›µ Š^{ð‰ÑQHÍ.NZ#Ö¸>‡°8Z~Çv?5ü%Nbq˜èÛîRj±¶gLâDÂÆi[yNL™“ŠÉŠ.*%Ül³7¾:ÀÅk7¥1é,ÊUÄå´}ÌX]Õþ1:¤„Z­Ï4¡üG-Ü–.wžynéÉÙÙ'Ï¿pñâBgú¹¥cãÞ¹ø²ìkÕ†ÅY„3"L†løL°æDç"Û;ÞñWÜŒ×´«qws'éòãP:d%ÄnS§Aj”} (ô&7«±“ÐÏY q°_Ì¼o8ËÀvAm‚]œ*ðÌäÚïŠ_ì¦º6‰¶Ö“e·’«0„Ì£µó(ð¬’B×ÃÙ§0ÖÅë¢©wµ71Ñh'²lsr¬
²ŒÉŠ•„É yö$R•\£Íoø5šÒ ÓÀ›åÕø|ôy¦P=$çÉÃwÀì½=x~f32—|ZÍÚjêwdu²xÓ= Åa@°rò2
Î! 	‚÷H1ƒ1X|¬I5sX»ÛT7ôªWa:ïùŒ¾f¢–(Ð›·¹³ˆêZ¤$m"7U¹ðå»wÍeéÍ7•kA¶$O MŽ’²œd«ûÍ<kMX¨9èjb?¥^²’a¿8ÔýQ\Ø’ºö¯s¨9ª…¬FxÅÚô·Ÿº|ÏÔÔÛç;§æ6VŠùI 7”“IŒš6ß5¤.“ðkEeÃŸÁ³¹Zï–R.§gnüòTªrìØý':þÚ‹vf9wXCêüI’”}¿÷Ã6A°ß®l7S°¶p=äm-XvG…5kYŒ„¥5euÍƒ¯×¨JÓ:©Ù?ÝÌ&´ìW°²yØ2Ïö®U¶¶¶´ Z$òu¢Z´pÍb5¨z_ÕÖRÖ8a×²ƒ›bûmm»¶ýãï¾R»QD[+ýRS„¢SÏ}tL™L;µ„w`ðc0„g,x€Ó	—±š}€‘ÌÏ\4ÞC’²¾ÌqLÓp{·ó;kËýýëyë±ëñˆ7}Q°†¶¦ÀÿQ¼ö‡‚5–ÍnfòÒd˜ªj/lÞ4·¸`ÕjeÆkn6’·06¼ZYË·Hjv£¼A­A<©È²Ph=a¬öÃÞûþïýÑûä½àH·Nÿk§/-Ÿ^œ^š¹2¾råÂ+WÆÇÇÓ@M!µ¥\¦ÇÚ°r!3ºjd’Ü˜’R VØ‚6y/XZŸË êôÅñ.|iË#Ôî€Ðd÷À„°NcÔq!VÀp±>d()‰D¾šÏÆ‘Ö…z¶Ï#Ñ,d•Õf‹ÙŒ¤Ž//þó?¯œ>==#XûÚÏDkäA~]ŽïU"$õq?WÖ…|Y¥ KK™BPÃEjÃ(b{ ¬E² =&³ãsSãöT\õBð}$&&ÈÞã¥4‘…Z;ï`­ÕIîË‚XÒ›-’ùâM¯­rŒ¥+· ! ÑL®"DÌ]ÝÑSô´î$@q*aÕ[ª]SWefñlîP)¹oÌÓ¯Ÿ 	«….—V«©y­	RÓ¼³š¤µ%L.7›3ósÓf®¼p±}yáâ±çÅe,ˆa­‰FPˆf„æƒ#š×­qïÏl>´/ˆ#¥¢8¯6€¤–h¶	ì<Úê1wøâ¤x5‰ˆ1ÈÞ»ÕÅLÇPâ£MÈydtƒÉþœAêuªùÜõ÷NkÛ‘·B„9‰¾‚>3Çáw¥†ÓéJ=WJ'ô;Å|í\X«'¤mæ /}Ù0¡C,ð;{9\-`ÀZµXQ´L6ŸS–d*Y©’×™²éƒµ
ÐW‡ßÑÜšÍÞ¤z_£ë>Ýd¸Êî2·ÞæzÙ©=Rã²'aÌò…ITK§šõ‰zžd~ê!OÐSù¿ú0×Ö$ú¸*%ÈjÒÀ/P‡C7R	MÄ‡Å Š¼®	O€5w—äQÔË<Ã{Æ%V¬öá»1Ùg‰UæÒ£`r;óà:z—ÝÍ·K€ðö˜ÅÁ‚8öÓ³!NÉSÏšÓ5!ŒÆ±Ë’W'±Odúƒ‹§<¢ª7Â| ™=5‚Œ€ýëOlØ[êImI§¶lH×Ò[PÖ>:œWËz
¥¬òG†Ž” ò-[Šˆ¿õFµzlnªrÏø}C÷Ï¿,‚EX#íQ´ô¶ã$»)$¨ëÜivz*¹Ó‰¦;¬f­‹«-˜³á‹oGxÍŸ§%ê)añ[X®³¬m/ÂàÂšavPãµ	naÀA‘ç×ÉÔå´«iðÕ/FjAdÄ2Âk‘VkÑšµ·øÉ½:	ÒIíºÖý×$µß{Ë®»oÑÍÂyØUÍhÍÖšøfÄ9„ˆ˜ñ³t'«÷ø6b“C?¹ËkÎ¯ºÃKF÷X«CiÆ$Ûÿ)¾Ã0Íä5Îª3ó×m=Öc=ÖãWÞ_äMïÆòÝ·Þê~ý2„”ÃˆPmœ5¢É³³ä@^Š qáüùÎ¦—./œ0 sa-È{•5»ïZ~Ãøæ7lÈ=òH¹ÜæšRö‡í†±ZûPí?üá|æ¡Oþ÷¯úÓA/äe—ö––VV:+ÿöÊå©Äp‡, 6–÷sÅaeCöBgêå6
ÀZ™¤°”û(ÄuÝHÄ=rÐ`-¡–QøæºÂ65yLªÂ(lÙz/;³J1K"Ÿdo:sæH.Ë¤z4§f7’UVd&F-YŽäóÇ¿öÓ••ó‹ÓÓNk?ií¡?zÿ?¬}hëchk”¬kNk0ZÆ’R£;´»Yz"ä^a…Ììøøììñ‚\k;%’Y‡V™©Æ‰××d&&mÂFœét:Ñm¢æµqÐáí¸T '/JiˆÒ„'™˜—úÙ³„¤„:g[pk7N«.É.Xú;­ik‡í;Dì0¢¨Æ« »š:@ÎÞ{ºÓyX;¸©µÚã¤%.<ÇÞg®Œ7:K÷5êÇŽYd5€5ê©JP—KfÚ®Äh>soH­´®JUó'PÌFÐ´o¢ÑÜùD›hò~§Ó…l¼5êå|äƒ
ÖkˆŒ@^„«nip1Xë°–‘™ç€ÊÑÐ8!yK••l¥ŒHRJõ K’ì
n)a¯„Ì&?¢ÙÎ÷¤*¥½IíL˜[¤þ^o‰D6Ïkn‹m!Zº¯ïéX-'wÕº:U£ÒæJC¥bYX«æzC	ðÒy=&“­”+é¼ûJR F'fµ‹H÷ŠÖtÆÝ–àJÄUª™¬U”j,¡¯HÍ‰&?>™îI«1DkÌ!÷CH=·ïa®=‘«kÚ{÷·!Ú‹šOUW2xñ5ðŒ½¯=þš„£Wá5LèA¬™¨4(Ñš‹bZ«C®PËí$=þâjŽ'pHBíâqJnÜÃ¡Ð¡Í`MÈfŠš49SØp‰$ãŠöØºó ¿^/K¼ˆbhÉ‡/Þö:ôEVÁ¾§¦FîŸg:ÿ,Eº[`ðlzK:¬¼k$Y«¥ø_°,‡È³ ô¾ÝCUÜE6mâãXâMÎo<q¢Xºÿ¿–›ÇÿÕø–_fÇDæ©RãX8	1WíQøÅÄaM.
'®0Âš5-A„›~W×"f«r!×®X›bs³à0	µÇsmÍà'€5&šr¯1Plk²š×l²UÖX~‘ÀZ¨Æ°Ú¿W³&Z[­¬­…v¯ß»ÿ·ŒÔ~ûww©ýÒ´æl¦ÑBæ°æ*XÐP-4ƒtûH-Z7BPcÅ`3×è´â/ïZ¡ÖŠŒúÐz5w{Ô7>Ö ƒùg5‰iÎ&®;°^´¶ë±o3HPí‹}°	úb+>¦f?#Ûn:øÑ}tó‰ÙK³²/8«-ž^§] Î/.“‰8ÿsS¯µ Ð®íHk¹cXp¶aCå‘vu­á°FúÆ­Öcƒßü{tµ~ð¡‡>ù'v/ýÕOµåÚk‹¯¼ráÇîKö–÷¢`Ù_)—s¤_õ i+õ¶"ÌEc¸T*"7E›qYu¸»aB¸²–Š¦šž8F#°
-‹MÂHdSýºl1·úxq_0‹Å¸8o;ÂFê¦1§µ>BwfRÅ}y±[ºTúÎì¥W^9¿m¸´f¬æÒÚ'¿÷AÑÚÙzÇcWÃZ¸ûÈ#aafø®¬]Ë’äì©É	¢PÛxJKk³ÕäÈ	Ú0“Þ†¨ˆD*Ûœ( †Ä»’Xv`'(*üµú¾zÞvÌ0ãàl\Wèq¡+§!òa9Ï1é^{ÁžLj¾}Ö…¼¦ rU6{5éj×Gµh­Ú©Õ¦çDió'Ÿ{nivvæ™+KWÎ-=ÿüD{j	‰man<×8Ö¹¨â4T‰Æß 8­=8Ñ>»Ê­¿ZuXó-[pO=_õIvlg])o’]8 ŸIB{šŠµÔkF4±˜p—0Å+f§åÌ­]Ä´quÏ˜‰¨Áš™ä³V¨ Ð§«Dl»qo„$7W)±„Üaî:¿4«#ë&úøˆÅPY¥X:Pk€¥™B²/A¢&»yb¢^-ÁcuU¨UÊÅ=—Ë¥b¡+"+ËVw*{‹z&‘,&ëù³õ¸rakiûš#‹<M–ãÓºõW£_,kÈ3Â_[¯é©Ê¬Ì´š|LSI<Yk| šÍ1w¸‡D9kÆi¬½åšQZé´øCÊ[äµ×À3 íµÇ•ÇhÓ}	+xÛƒ„f…Þ FY`
­Ø¤âÝæúÜ«ü)õo£Ž«Ûhy9‚5Ô4É\Îw+qR²`ÂŠ¹{¡Ö`5÷«ôZ<`C{üÑ{fÔBPE¤û”Ç·Ÿ:qÏ³÷ÏÏOÝ?2RÌ•G’i•”GJ”µ½éàVØ²©R¤Gv)mhwiˆÿ”7ìæY*ÖkIz°±§Òl=.5MÎý «%Œ¾øâ‡%Tîq©ï€I„Èj^ŽÇKV÷=kÜ€"£µ×Bsˆ`ð«„5MV‡éDÁ¿ÑBmíš-±CVS¤ášuÉc[;˜
ÆT©&\3‰Ågº]Ó2H}ôµÝ¢ºZ¨¬ýbêÚŽ«h-ª¬­‘	âZDYóSv}eí?_Õ¸­†5}3æ7al›¯‚µ€¬ÄgÝ©Fm¬*R[k¡ÇHèíLÜ¾ÿ#ÞÃ	»fèuVˆé:“q¿ÃZ †{X®³û@{$Þ¯ÃÚz¬Çz¼â7¾øÅ[ÖÖBZ»ëwŒ(ò®½ouìÏž˜›½d¬ÖÕ,:Ë‹+S›7¬­Æ´ r­0f«´µr2Ñ,ŒR&&Ôhlô±Á}Ádµ‡¾þ'¿ï½ßÇ’Ã.žššŸëI/3UåÜ;'ž-•JÅr¹’«$š†øŒ0ËJZëëZö;ªé3ãÐãmÒ2ÊsT‘Ú¨)nPˆjTÓÕ‡t“)æIõàä/Ž±º¶Ü¾F†|/«ÑÊ«fûÙê¡G•ž–!kôÇÒ¥C‡ŠlÁl¹ã'O.ãW¹²xzZÄµÀR&#‚µÿõ!U­ÁjFkÿW´¬ç°†*-sZS«µ¨°(PuÿøäìW•ìÈÓ2r¹L ¿ –üª@ËfûR^z+‘P-GìÆ" †L 
/æ£âÊÊØ ÐŒâ+Ü2­M²ˆ„Ô½ŒËqüCR"¼­¸.ã	«tÊ k$ÎÕÇª‰”­Ã‘Æj×UÕB³~O€\ð¶jÖþz	Ÿþ…Ìä¹ç–.~wjü'KS…ñÎÒÌ3J…u|¼-Y-_COdmÓT¾fèÕÅ³\<g)ï8ÃÈÚÒ÷1ãò…ªsœÃÁÎ³¥j.Käs™¸Z8  ¦²¸¥ÔøÜdÎŒÁ”¥*d±SªlA`M€ì:çhëvF·íçó¦ˆÊ¤Ã=:aÈ¹†@qÝ?èý±%þÒÐ\êZ½]ÏUÈÎô¥R5ð+[·Šå|<Ó›,´&Ô-_á#ß,´ˆrjþÞ¨Âcí‰Ì@¡¸w/ÿ|§QâIU¸SV¡2!é®PÃ½¤7Ý›¬–òVgGS¿¯Ã¿ðàí”9Ó¾BÇ7>·Ìb¹úÄÌFÆ|ÌY&UNf9â,m"Æ¾µ_OpŽ»†8¤iE()îqBcQø\u`’ÏðyüÕ_•œ&jCW¬IjsIr ¡•Û>¤ˆÏ°ðViÙÁ!ü‚ËH­3ïwxÆ­	”ëHö£Ùš-·FÄ§j7eBê¹*s3ePƒ½—™Ú¬D^1çÅjwKñûÛcsúÀvæ:Îia­Z k¢5î;5;?7?—|úÙ—6$Ë»‡†v”ù¾	{›²l—H%Ý†wÓõâæÍ5JK¥²þOÞDk«$Ó²øßÖV7H‚ÔqÉÆ…—ÀÁ@¼8nªq’$/HihoUò£HGöVÖ·Ãžˆ|Ž>DKÖœÝÒBo\P‹úö_[WÓ*°ñJCË×$”iG©Š%«Z»­kŸÃuÒ Cw‘µ
Ö"¢Ú/ª«éUÖœÖV+k~ˆQVse-°îgY-­…5k>®eÞ¿¦ä[oÜü1Z§Í„aÍøKœÅ¦‚{ÙP8­ùÊ7}G¤b-ør)¡MbpÆ´Ò¸FøŸ(‹2•­%G`i_@8¬Ÿy$¯„Y­­­Çz¬Ç¯¾qÿ›Þü×ªÝz+©k†kçFF¶½7È÷mÃbdóKsËT‰‹ÎjsÏ.\X\¹,ëöG`]×æ4¢RGK«lÚ»W:@.ªq,û3\¸¿çá>ø™‡Ÿ~ÿÓêpéÔ)y^ÏØ;Õé,#¦Ÿ™[¹0^ÆízïÞrŽ™BvÈ’÷(Y«qEÊ,EØdIèX¸fÙ~æÄÏ¨*­Oy],„[ŠŒ
ã.õtï uÉnM´3–HØjU–Ò½PNáèØÙN Ù¾tœ‹\`­¨1U:tø@'®¿/}ìâOþyñüÊÒòikém°öéoÜû'ÐÚgxï—Þó	ó«ui­–i’É¹©ã'š1ZÃÄA°µ	ýE¾1y259û’­ƒ2OÂñ½E›4b;ÀYãØD¨­BÖÜ&úkJ¾‹ñb‘¶Æ›	„ EmëÖí[åqAàÚî”®ÈÍÅP€¦SmÞ"ÌQ“V?e¤ÜPŽ¾)[RcµÖÆB5X-ŠjïQ-h¬†%Ã¼£1=ýÜ¹çž™žrö™s?i·¿33}±^Ÿ[êÌÏæ«HEŠGà“vÃ9ÌY2s0ÓØh¹‹×©ßÀìÌ>È¼Za—ïsVc]:{¤&ÕêÀ'¯YÃ8]Ÿ4`m4‘Œ€ˆ¬Ä‘¾tðÙª>yÜa0£µèmÐñ›-F«ŸL˜))EŠâ£˜`ŽÐcPC3Ü¹ ².›PÎpª¾©ˆ.•Jë¾¹ÃFØÈ¹I5` èÄXY5àÃÚhæÔk>Ìfšrlˆàƒµf³©CK¥8`$1¤5‘¯ÔÄëªäÑ&ï1@–èÅeói÷J±fžè…é Æ8Žÿµze¸7¬!Äµ%+Ôñ‚*	iÎKÖÝÌR›¸/ÖÂðÄÈýÀš„´o¢iA^Ó|û–8	„SÉÖmû_ý?×5¯5CS*äŽÔ¹øõ!ˆ#äúÍƒ¸íFý–y¤Ó#ƒ´4~4w}‘¯9GiutÂ4›x7oÅþÏ½Æ'ûì¤}¹0ßl¨§y ¨+z›}ûä©ÙSSÅä–ád‘¯šŽÝµd*ÙËÿ¢³‰žd*K“H’P+d°Ö«¹áÍüO¼%9\I³ZK&ñ Ê&Ž¾* v'HØºå¬!´	)]ùƒ9Uª¡9¬‘Mˆý£Õ®9¬pyD-DÖl³Gµ¨m¿VÜˆkik~c ÕQLà¸¾&W±¿IDàÜOìX­ª1hº†äÚkçþ‹«Ûj¯öƒe¡k­ç(heg!NQ- µ×ÛgR»a6‹îX5ËÔ»GÁs›+B/ÈÐ‰_km‡3ßª}@háŒ«frÄáÆ™¶êµ®Ð~ÃµîŸ47¶¤ˆ+´eF²¿ù~m=Öc=ÖãWšÔ~ãÍ&ªqS„°öqLüGä0ò¾÷kÛ^šš››]FXCrR[tXÛôlgqy<ƒÖ}¸>«…ÀF:dþA´´úÈÈHC•jö?¶“u0qé±ÇFG•è÷°å@~ý	V£rîÛÄÒÂÂø¼ÌÛg:KfêSs÷ìÖk\ÇêºXë¶aî!zå‡ ‹B©‚5ðÄè‚!†dptÝöHÞà>f¹¤„µÃèD>-“?@§Ù8Û˜ÝÉ|bìÐÑ¡b*qÆØØÙx_ÊÇSCg*ý©ÒØ¾t˜vèP’ñL¥/6{ìÐ£/k§¯¬¬Ì,/«jå´ö?»W°öþ/}é=_¸VT…kÙLŽ‘]_³ÂÚ„Õ=¹²¶Ê^Äe(Xm¼ž¬¶Öê¹¼|àÓ¹<iVXÃ+-2žNHHŒÕjrOµþÍ
ÕÙÁ§xŒÄe8Ï)éÅ·pû i—ì³Æ`Îjj ð®aê€­3é~*Š„ª¡T«V«dãHGÇÄiW¡ZÌª†¨öÀvB¥jKOO“ é²ÚÌ3ÏÌL?³ô“só_yâ+KÓ3_©ç§.OqÀ(‘Îj’&«Ugð¦)lkÕvXÌFTŸÆFã6J˜C÷…wá^BªÖÑhaà<5ñêèÉ¶à(Nœc•T[}€ÃˆN)R¦I•1	nñ.¬9×55wré³wH¸ÊMÖôóó¯Õ<‡”:àÕäG™‚ÂjHk|*À<œN…j£´9÷•b2µÕü%‰¼Òõ< Žßæä8Ñ(QÕh7k)kM>)dtÆë¹úõF¡Qï‰ë³!	šW§Ï]3ã¬´“‡±y1á´–mµ¤«5³¢Æ,;kùb²å9«FqÉO}îöÛ¼ÓšeJÅr\Ûc5T(BÆiÑ€ÑÔ¿ÌHÓTíÛ¹®Æ²ÿ Ê’ò¹	´€1‰aJúÛuàîÛuÅŒ0ãj™_ÈIz£J¶$ÏÒ2µ_YAc®•e)Ord¤ðº:¶L||ìÑ±³ïžzªsq~j^@Æ´B¸&oymnŽÔòúøÜ8õ¶ÆÜC&Ãî!â …küí¤qXÊJ[ëIRbHùj*9Ì¢ZS×f–.{I¸-u˜ãˆFÐÖ vHÊvSà©mPÍíEôò]Y»ù-*óò5§5˜!Œµ+Ó¢mÖ‚©=óma?ìhƒµkå@ºÕˆ[Œxx~£ùµ›û£×¬Ý¢ù®€Õôb®S°í±Æ°VÉš/ZýâÂƒßVEøË-¢YÜXsJöóê¬¶†²ÆMƒñZÔ´ñ¶Û÷ÿòBZ4\V“ë£aŽelÙ`èÒZ0ÑÔ·VŽpRãöè]­`V©ká:€pµß3¶6ö{œÖ,ì˜³öAkÁÚÝÿiÝad=Öc=~µIíS–‰ÃÈ?…°öÎÈaä®VÙöQ:®lÞ¬m{inòÎgŸ]PäÊââ
 ¦XY¹ ëüÎòÂ‰MÞ; µ×Kk‚5¢}ð °&lH6$U`5Œ aµ÷ÂjJ‚¤^Í)å¤6³|ú§—H‰›ž™zþÂ\>[Ù½»LVP.‡l´ÔÓ2Ž—Ž‘µ/ýE–øhôFÚ¨2û¸Ã‘˜]›"’Bä«˜À,;Ñ
 énä«)§,>(2i|þËc–ÁÚXµt¦‚]zªtøL"Q:|cífjßX~k_éÐ™T²XÉSRØ†Ò³—¦Jû£’4yºÓYXZz¡óÔ%^Õÿœ:~ï×?ùÉï½÷K¿çCw<ÖjYÑÚ„”µz_“L>  U²Ò(ÈlÄ£‚³³–½°6;ùöJýäÿþƒí;G›rPOI-¤“-šâ[ÍRh¡×©Ê½O|‚~Íd+öoßš Í¬õ5¯ŸúO"±}T8Æ­¿'If´37`3Ô$I9‚5cG“,¹~—YÜw¤Ø[|4• ª¯ËhÑbµ Õ2TTµÐVdfjF¨Æ×¼³ç–f–æŸoä›Ç''iã0UOÍÍÎ?Ùj™GŽ…ìÑjX“ŒÆqíwt;rÔæ¥}Æd&ÁyY[p?w¯1týÿó¤Ê[1ì˜d
ËTÜ0——Ï‰óÖBœ­1D[)k Yb ,Êê5ª©d³­@uËÀ¶°ÛœÎÀP™í J¡º¤`ìHóÕFžO£>—m‡Ä²|pë>‡<I> ø0âËX£N3©?
Ãw\ÝçÒ:LÈ¬¡‚½:YŽèn°\³Éþn0•”®'›ÔfÍýwÌI&[ˆÃ¥zï‰xO-µjÆ×gÝ@óø@«ÆßS‹CoÖ“dºR,«‡FVºaª|˜¶Ø²ã0×ZÙºA€Ò‘´vÝ|ôb¯†°¦’5àÌðì?°X;üø·Èœ„’ïÏF­ÖÝ·ì‚ÐöïGK“u‰R ”ig 
3Š[äµ	™ÜÍ–‘›®êt@v±Ç`$R¦î¶ê/ªÞ `Ãš£šHQà¦p”Ñ}ùócc÷MNýÝËóÿîÈÑùÎB·DD›ãÛ¤@º¾FðÂ\q|^-ÇíÝ4ŒÍHåàÈÞ$}a±ßÐ^mo±|p-­YƒÜÒˆ¨éj>™j6Ó©a›-¼¦Lw¤”³ˆ\ú)_sçp‘×¢Ó`˜Æ?3Æ
‰Þà(È™Á¹+ÒKÍÖ„‹ªj¡²Æƒ(þÝŠ5`ÍÕµÐ´VÉMnÔÏ=ÝtHc5VŠ@¸b#]¿ÇK´ÇZ¨¬±ÜH„EkQi-¤Œ×a¹JY#‚FkZ®ï.š÷¿å†ªAba…ÚÚ–ýLÌù1À4l‡)º…fëˆdlZ“û©… F¬Â5¢!‹]öýŠwÕð\j`MkÙùwAÍíF´Z/Z[õX_U[‘_ÿ7¿Y’Ú­ï¾•HÖXŒHQCX“$ÃÆý&¬ŸØôÒ°ÍÕ–—–®,^Xüñ¸mé…©gïœïœXeþ)X»vW6¬Ñ[ f–ý(kb5Lûÿ^ýÕT°¦H`íÀjôÂ~jifå§òé%à‰Êe„£tQ6ù´®KóxB²Ê*=,e#æ'¢`dï °¬Ä1hÐ©#ÂÅ'O±R,)$ºòîí“”æŽ°\ºÑäì—ÿâ/ÆÚ-8ÑÆ¨-‰QÙw¨D¢Ú™Cûð?Ï–J…üPéÌ™Òi‘y»
/›šŒõM‘ùÊ+—f;—_¾ø“…KùÙÏþåÜw¿s/ÒþýâïKd¤­MLpbZ[á­W³z½KkXM¸¹=lq„%k³”«ÑAP&!ê!Ðä°·fÍ=cnæj#†JÔðÆM!¦„Ûûzûå'ïÀI>n2™ÙÜÁ²¼7¯jK°ÈøB¹‘îÐ"QÍ»®)ÔTË^E4{tèÐá£éÂØá«ŠÕŽ^¥ªª…:a¤X7[Aókb~žÈ…ÉÎBç$òMúäÂ4F#³'³‰wu:ós_¥LMQê6ÄVo5/[ó`;l¡6ÔÍ‚ÔJ‹ÏÝiÄŸÃ¢U©„YbÃt>1Ð¬ñ†´d¶R¯ù,m·>q3‰	aH”ª¶V#©t#lwÆÅ4ÑÅ~ÊDë‹Y‡;s»‰‹ÓÀìt^Qã”Ö!Ã¸zQSä§qÕïk¥Õ:=“ÁjÔ¡%s¤ß¢CæÒ˜ñx¬€èuP/£¿„d%ažûvjrY5½¦’WC][ºÐ(•0‚ÌªÈ’$K3û4ïÏd©.'Ê¸\FUy}Ï
Ò÷ÁWÖÜoÔ¤›<Êôp¹T®ô>mß~dø9ó-tÂêÖP{n×e•ÈÙ|.„4Ÿ±2!ïÑ1dûì Öt—£­QúRÝŒ¶S“ÏÜ¼à[Hjä®]8zSç¢=žc+åM±Ò"Ä£5ËÌ¬!o4õ ü­»·ÙŸ˜#›‚$Pí¦êç?ÿù#ïúêÆ~ô£±GÏ»ïâ’>¸©ã7yAŠÖ(j›šghŒÏÏÝ™,Öëå-©<™6—j__ œ¡µÞ2ÅlN¨8­‘ù˜ª¥²ùáip®–Ú½wcö,GAê#Æ"ÆJýTgÍõ‚5!Ôn“5[Ìº_áã-Žjú‰HîcÛ˜–ý!«ù*$µk[A†¬Ö.ë›ÒAwX£5xÈxÛYm¯ «©±A˜ùˆ4ÂH$Kh2æ´¨Éˆ¯£Êš!®…]±×n´QÖÖ6ƒä'µßú]nÕ®¹á†"¶08ª|f°‚›GèÊ*kŒá4¨o©…,¶¦²Æ«c´	k>ÑöõƒÃáY‘µÅÜFÜ6òÿ±wFÁqÕWšŸ™‡}Ø<H*Y‚Á«ˆä’'+zãíÞn:ÂF±ºÛØÕ=4ööF“T¥¶Ò])¯bHð„iMZ™à"ÆvË°•M4˜¢ÌD¸FŠcV[¨È2Š)G”;³³¡°IÕò°¿ïÝºÖ]Ù©<U}tïÿþïín¹ûvî¯¿s¾Ó*ZkE+ZñÉŒ?úãOy¥!iM¸&÷~úbß·e‹ƒÚ7 ¶[o½õÏ­+öM7¾3½xî©÷çæÎ¼<7½ˆ¶†#Õjï/í¿©ó¥/vv®uÈ¨¦v}ZË5sC9©ieó©qeÚ¤'4Í°åùèãw«aÚÿ09°Ú#ç”wVãÒZ;ûíaà'ZB¡>åêÖžXk@RÕ¬tJˆFÖÔ%xY=so.HÏÄné~c.˜9â2‰ÌÑ½C–üûò=]oÖ^›ß;[ŸäÊ5_æ²9Y>BeZwv'EYµìFF‹£G
xÔ8°ãH‚ŒÈÍ”k+'ã32yañâ¹çÏ¿u~îÜ9"|ï±W~¬AkôZ{ã§GFqñ¿[1>¹çÃ÷ÐÜ‹këB¡ÐZ,¯’m²F¸®ö•¯Ìü%hyˆ4q/”#JCç*Ï|ð±¦Íˆ…2"Ú`Šî®80ˆèÄH’w	Öx!šÐùsãö.;1 ƒ œu“yæÉl+Â,|f–"GŠ£ŒÔ$­jc+«¥È•ªÚqÂ3È 5e@'N.-<±47sôØâÑ©L-µîÄ±£Ï¬Ç#¿<=·ðÄ‡&½ý3¬ÆgÊ²Ù/ŠØ6azc1[aBî"Ëf‘N{l•b‰†fe^1ªúÆ©\l$ò¨b°Sz\YjÄ§ÓÔ·^ç ¨qÈ„5TKÝC ÄIŽAÂ½½Â6Nû€µBˆÅva"È-“ì¨ò^—³*9ÌÄŒfçÒ [y?…e©¸>“™½“Åd*ÔËåÊºw§ºã4OËrDa&unô½¦•EXã‰Œt7gc’íªµ¬kÕðPAÆ“Kb°‚¾3É_’”7WSp,Ù¦&ƒža’cž:"4‡ùÕ´ G“Ó^ª<\Jð‹¬
ÿÚæ_ß#MMúš™¶á­h½š—ýqA©‚Ðlp`c¯±5@û1?; 6%Dr/ý¹Y![I\\¦™|dºšº£±½[¢æØ2õf¹›ëkæ‚1Ñ˜§RùÂ”àqÒª¬¥?¨  ñëíÀ›6ðp3ùààÞžre/Ñ3¹gï…·ß~à­±±]KË˜vb³[‘Úq–™ýÙ,­wÕwM?¹í¦ál=G*Òþ9e¹äÙŸË§
•Ò¶ÿº#ÿf£š€ÙâJT½ZuX+%ccœ0H´äék &$Š,¨‚:…N‚Cšk¾E¾
 +`´Å"þá!Ã¸!L„\¦4ÆØV)Z£lÎ¨íÌ…5‡3"€5a˜ƒ~ìfO‚tXc¾L›÷YEX[Q°¦Mj©ÙÈò‡£?+šbÛ¨¸†y?¯ü÷)k!¬…‰×2ƒ¼aÝÝ%ýqÅ4Î_€šLû£°æ+‹Gè&âS­D°ÃL¿PÛºÔŒl}¬,dósÌoÚA$2›´æ°fÙŽ’Ù½|¬ùÐ‚µV´¢ŸÈôGDµ7	‡5Dµ7‘ÕÈ„üX÷«^°Fkß Ö³r¼õ¦µûç(X›~inñÔÂ¹÷Ï ¬ýó?Ÿ=õÞËs*Tó06cµð*6â:°FüÐPŽ¦F`Éå_süÐø8¬¦kwÜñ‹_<ø 9ÿø1êÕ.ž;~îøÜâ/,Îqí3÷îÒÉ3g¹"¤`#Üç%²ud@µr"#aÍúíŠ3†r÷Z*"=b¾}’:ä~·˜ Â´‹üH’ûØC_S—çxŒºœn«Ö­zhrïAÅüX­¿¿>Z«î,¤ÆlŽçÆ ³¹X…-ù œbs>7v hcÙ¾¹xê…3W®\ù—ùßWÎŸ÷ø±sÍcä• kr„|èûïÿÍÓãÍÝb5
¯òX÷×èè•¤µFÖà…»öwåèç;ˆî^+Šç…<” –UârÝÞ2X£ß¢LãA‰î˜A…NûÐÃjÖÍ ß"Ý•Œ3RñøeHoAÌúuhŸnlÇ`[GuL°fœ¶“Q°)VóØQTûqˆj.Jœ€Ô'QÑ–^?¶@ÿëÅ“'§Ñ›êS33¯’KïÎä§Oã†(¢*Äjšž‘éÔå›À?›ƒÜ‚€ÓÜþq¹E¶ÃšÑ»´&nÞeŒÓ°ÆiœÖTR}¬¥0Ð"\B`«qòuZ¬v_ŸÊ×@\ÉpÄ@o7'šÁìlRk­Y6‹›ú/%y³¡kz§ñ–@Ú´^W~ªÉkqÒáº_
¦±*+3SÄCd²åÍRÊñB¥¶‰‡cÕl–yCõ†îë²CÄãðRÿn
B¨ÁjmÉÒ`¡Ú°¤ÎX®PNðTm<9ƒñL;ŸÆŸ´'óùFw‡Ò!ÔRý¬š±~ð<T°£Æè²2s¹BQ]¬'dÚvÛíÖÇl¹€l«ËU>XàÓ¯nÏæÙïœ²½FìØÁd›?`Œæ£Ù|Mµhê ­ñûùY®kQÝÚí3inøÉ‰k[½‚Í,¿—b#Óaˆ²7{ÎÈfÏ¯`ô­9å#k‘ 	¥ÍNìULLìxûôÜ•Óçw½»$DS kÚÖþR#fö°Æþ±0ü¹MÛJõÉ<bj&™Jt®-wVðÙH?<P»‰WÑÑx“Õñ4ª¥`-•Ï²ÕþþÀçTÂšQ°ð´ñ@V¹ÁÄÃÖ`-€5ÐÂlF>ÖVÈiá,ÚvÍgzœ‘šß*ÖV5-(k.°yP’Êj7Ë¯ò³¥\ašÙ¨W!OŸöuyeµ¨¹ÃÊpÎÒÏGØ¢UkD©‘Ö"5kÄ5û¬ý»ëfBÞ°ŽBµßþ‘“V k+´4Ÿ†¤¦% 4ßó­#IjÎ_×h_Í…ÂÊEé¶Ý€šhðeƒ—­™Êæ!hó‚5õÄf°?é–ÃH+ZÑŠO\ú£¹?ŠÕØ|GÂšR»ï¾ûhŽíþ"Ö›U¢Ú­rÑðäÜ¹¥³ïìß?÷òûKg¬líÉ›N-r.º`sßÖ~«É¡:‘ËçÊCkøÔ×šy"I&Ù¾ß k=ä—ï4X…xRÜÂ§Ï½0}
YmnÍŸ½ÿÛ¥Òš5kÚ¸<d$õ‹úžŽ%kkÚÖ`C»Ú­ÝsœZ*fJ?‹«NÍSÒ¸¼Ý„$Øè™¾a‡!oq¬Ifv¶Ù¨O¢UMr?ŠºÖCeí™ËŽíØYßnDV€Ív m•Ô¶3¿Ù
nX9þOs3».]¾táíóW®,žã²Í¤µÇþÖþúGBkß}üþßüæpf°Vßó!´6!Þà)åÑi-¶¬®ýSÿýèç“)ÁS>?I0œc<( @YË“i	’qùÄ÷»Ùâª™xÖÀ·^PB¶x]ô›ð&9Î¥!ëZäJ˜´½43®âyh\Sº%OF(åR£ÛáÕ#GÀ´Ñk«­ŽjÊtT#NâþhA'µÃÏ,Î¬ŸÙPÖbµæ¯žøÙ3wýàh\,KV)!Zv<sXs'HVƒ°Ð’_FØQÂ;°Ù )±nÁ–‰³´ÕÎ«u[c ®–dxÉÝjŽIS‘æ°Æ;“áºzQ#•‰Ô&ÂE±”»¨Z¤`vé¤[¤ô1o·¦Ê¸]ÏšIpnjMp©Ï´Ë*°F…\7tÈ­U¥8NêÖX­"Z#²J›Ë;£¡ª	„µR+ÿD»Ú2¤²‚OÓÍ2J’¬×ÐÅ<*ŸË¹iHw{i(Í!F'ÅR2\òqÈ“Õ‡‘„§Ìb*©¹z–o=ì“¨¿­´)³~i*Ñ¦Vè`G&(m5¤€ Þñ¦š{ª…™·zÝÁ‚‚0G5ý¨¶;ŠÎÐÔLYÛ¡éì€ãd0"ž¬y*$¿QEM²ÛçÊM·—Oe<º1¿í,›Ê×¹º&“=OYŠ˜¡¢;‰Àkc«Vq€›xˆÉ£õ‰	`M ¦Õimé¹¹óoíÂ¯6 µ%—ÖŽÖølÓðÛ¦|nÚ²©$ÔnŽW3m(Ÿå¡Ò Gcµ-›è³PÌ*CµÑ$ÏµJ6tµ‘ÜÖ‰Ä6¥ÆGšpÞ,uSÏŒvvü¶º[¿á*³­L¥FyÍsG¶u7|Ö ^»ÙÍûYÂX‘ï9A5‚‡âÚ-'HŸ¬fé‚Z¨ª©«š;õoð5¥AŠÖBeÍÄ^ÍªÂZðµàÇ–?Ø	2®ŽHÍ•wX‰j,aŸµˆägVqƒ\=ò†Û(TûHxÝÕ•§Ù<à.O:¥Ùl<t<Àµ0ó‘AfOšÚVI «"u0‰Îq”÷×- Í·ŸrW:×oÝª/ÜDÓm†g¬IgµµFZÑŠV|âD5þß«°¦nØoBl‚5â?þ'B
Ö6nm“¿¸±a§æNzçýgß{ï=¡ÚÙ¹oßôÎ;Wg=.[÷_ÇY$r°7‘|¢Ü™¬±
ÖªqRŸ~úþG}üq¿~ÿÖÃƒ!2‚\œ;õÒš/.™™;qâå÷¦ç–mkÖ £µ¯i[[*YÕN»Úø®ikOJTwé
B3³BÁZ{‡›õÉÔÚ×¼„!YfàÞw´³:*ë	m‰nÌtªÊÎöëª4•ÌÍÏ¦:ê°Ç<©},ŒÇŠY`czËe¥¸iG÷@ãKì\º²´®_º2g‰?ÿÕÏhýÆ—ïøî£>½ï°†d½µí™˜M"~€ Ð!G„s5â8ã®ÍL>/Hº¬ª=[CES#ã–ž‹Ó;™I#­Q&E»fkò½œ
jÎû ôÅC8}w­ç>½ý}\àëô‰3wÏE$J3Ž×¢IJZëâ~}ÕÁ#G*e(Wm¦"×÷	^GÔWÄQí$¦"¨j¯Ÿ<ùÜâÒs3ég^íK9Œ=%²áÑ™©þ™¥Ã?‰£LÅ›xŠ*U¯FC­æ¤dì° j¡O?Yì²«pVFØ-”k“v#¿'–Wçƒ<ToöwC®jsS²)*šÁ½z!H°ìíÃ>sý@WXÓÙê[.Të‡ñÆaä­uÛ™t{~àoœ5WÓ[«ƒ(^P9'WEƒÀ ²Agý1ôá~=À]/GBkåœ^q.‹³Ü· †½³Ùl¡P*ÀíÖø-…9.lŒwäe5¶ rµlmùZ·˜Ì-)IKaÿ¯— ÔKuÂÎ¤ÚQ®Sx—²Iþñf7 ã‹LÜ¿ß !‘,/8—Œw8‚ÖÈT.’hÝÀoX¬@EØÍ½°Á4M¿Ø!ä,²üó¢5eA:­Ûý­Õ¤qE/?]Ì’yÜká3”4?&œ!ÜbÄïBV&‚šÙu˜Ù#ÅiŒÖÕMHäÝ•¬} ¥²ÀÚ(»B¶·µvžZþü"Ï3f;¾ì.²¸+»ÿÅSûÃƒ[JÈ›–r‰µ›Š•"~¼TnÜ´­lÍðÔÚ½¸­TÂMitó`g*Ïkë\›¯«ÁffPÉósd“¦40 ØPeÜ¯K]O‚tEê†w6°~6*­Á¦¶†aÀa´·RX»v‹5/VûWg@¢™€@¦†Êš‰k*Z3òô=Hi9O.jÜ`ZÔ`$HZ³5þá‚_„Ö"‰Qe-ôîNo@kZœÖXÂšµH|OžUKc$Ø@V¾XŒÃWuÃŽÂZÁM
ßÚQL×ë(¥E‘-œD*µÀ»ßQM¯ØÈz«53ï'¤Ð3eÀ7šÂöo[#­hE+>9¢šµT{ó×žÿÈ,˜Êš¤5ÓÖT­m©þ" –©k7N?y«Åôû/Syõò“€Z$Œ¿BXÓÀæš²Z'°Öl&†hŒ-X#þ×¡Æ8õjxc|á‡ÿÒ_=h-Ï^|„$H¬­}rñÌ™“ï¿·´ôþ¹¹é68­­ƒÎ°¸Îf‹Ã¥6¾ÓoSàh×PÇ5k¹&…Ì<åA5…LúÒ¨m†m~µIíüaÔFSoHx³ŽYù:#`N£9;ZƒÕöMU{pÙ™­P~5È¶};PØöJnT’Úv Íém’6ÛØ÷ÙÞ½4/X›;}áÒù+§ß>½øÈ#3?ûÙ‹§ô£Ÿ>ñÆC>úè_¬ß¬Ú]«ŒV€ƒž±±	šbç“¹Yøf¹kš`Í'kŒû›ûsœ%hEÖ‘é]/ «Á^±Ü	(ß8%ã#îy	ôèR=®ê)²>5¨;64BOlP–èêò³KÛ¢Àbv@vã.–1Ê çùþÞ*•ŠòY£¨õñ— šX-Z«vâ¢š¼úÒkmá™õS‹q‰¡iS‡çŽÆòM¥w>Ñ4&‰š™@V.ö„Û &í»I¿Z¤›‘àÔ_,pPˆG{lÄ´X¾ÑD^SL6äæØGÿ3 6.{~^ó °#;JëŽ¡Ü8ZzY·´j>L"….jÖGQ›Y³@|<ã³ò†mÚ£rt™ön	#îÛ­HÊTÇûó0™¨L¹‘Í:Ž:|8›<»r©¨ãjõ*²ôÁ„ò¥Íaì	¬Åzyb¤DÖóüâf¦<õqs}ìŽ'+ÒÊô%ï§ÚŸ{Onö²Ù8ÔUNµ—Ë9ëè¦~øJð’	ÉØ´èÎ‘-	«åî¤À
Ü H¡c-#ý÷áPM…Ç¢	ZèZHUFiŠ`tJ‡Aa’ÒœÔ¤°;æwØ—!ºÕµ7°iK÷X:Ô\!»‡krˆÍ9n«F¿É±Qq7«‰g2|´ÒÙÓäel~0Á·)³¹ŠšB¬¦ñè³Ç—Î?ðÖÏ[i-?KÏ¬«‰Öæöç¹Ïâ“ErQU™Fxv¸sØ`xÆl˜if‘rÅT¦YÙH/•D5—­VRIÞl¢m-ÿµ= ÄO^3ž!d»SÕ°„T^ u¾å–uÞ¨ÊèŒPò#þÜÇ,+k^ó!Êi‘Ù-q´Åš­.ª]»%6ƒ/·]U¯v›žž M°­9šÁ<Â+öÜ\c[ç,t­ëÿ(ªy¬p‚üˆ $A®ˆˆ¿HDZ3PÔ¬q~YVûÓÕ•µ0þô3·l€Ô>®3Cw~í8z±GÙ‹Èk‘¸êðU9”°•Ÿ‹Õ;á­2	nd‘c©ó¸•]ò•Š‘¼uÅ6/ 7}4'ÿÐ´Ÿ‰„{mõ—þoZEk­hE+>)¨ö'Â3®3Ö4!Öîóø&qŸ*Ön%R¼%X«m»±“”H‹ýKK§n={fn5Xƒ¿Â=­×fµD>1D¡üî¦«ë»½»åj˜öß…Ó!Í°¿Œ¹H€!Ï>òÈÅ?þÔÅ]§žzá·¿}ojêèôšµC¥LœD+)kíqŠrJåìØfÕj¯B6I„.­A†ù§3U;gúªIU
šÇÕ©˜c±‘þd½^åúÖ`-YAÛÚ»·>ÉPá¶º2 g¾öÚüüÁQ9f°?6¦ëIÉHÌ€µ#HJ„ðls*u„Í÷ß¸Z›¿ðÖ[—.“yùÒé‹œ>?óð+ÿàW³Oüô¡‡¾ûÕÝ°ÁõÑ©#££{&zêÕ\E„ãÍ£Õ’ì°6³p¸YCXBSÁK‚l¹t/ÚX•ê>q•µ¼Ü¸—O?~ýéjR†‘pÜˆ3SuX<¬£ƒt?˜¿îEÅŸ¨M3,$¹hSu’jÖADáÊœ$Åë¡Z5bÉ‹©ÇÂH5Á¨½¾”ž:q,ž‚ÙŸ‘»HÿÔT³VÆ*ª~õ™þ&	ŸwÝ¿o÷¡ª<ÍZ„hÚp…öôK³THæl
Eä5…º²¦	÷ò{+u²È±ZŸ–óº¢–Ç2³·{¼!WZ£Úô)»P+ÿý>NSç8îíK§u˜ÌH6qwí·´ÈnM×s\R¤Ä9ö¤¶±ƒÓG9‹¥G¯YoJ1¤F­{½šæI@£¼	l*q™¯ªê³zƒßÙ¬OÆSvyÕü4™,(hS!Š1séoÄùiÃyðè/¥ ßÑLÛ;›g‹	>5É1A5b:_©‘–™KuÑ`jPp<U®é/¨	ëmÌ7È±,—JCíqlK‡H—¤+Xm6kuŒÉ” ²PÂõ§0Ô¶fèsÀ„Ùy88YžžFAü9§1Uûk‚Žgä?jc;ó¯)¼ÿÁ ;Alrœ„P¸’ãªO°æa“ÖPõDiš™	¤[ŒxÂ¤÷Ø5¨Ì  ×û4È´ÃfæÖÿ»=|Ã¤ö•}ªGÕ4N>óß~||éìÎž8vìÄÉçOœ$dgê°F£È…ÃG?»°_¹ª5Üp1€,'sEE}pË–ƒåd‚BÑ\*UÜH¶D,‘(á6’I•7nâ¿¡k¸K¥8Í‰’É½”ÿ¨Ö/I»ù–Û0ó˜YƒiÏ\'h¸
Á²¨¼Æì­˜FûÃŽØQ/Èë4ÄÖ&>†êšRßT´&fó×1pD¢ ð#hãø‰6ÄŽfAFAÍ6+Z¥}Da-Ø¤òFÈk«*k,„ŸÑhÍÚêm±Ùüû>^RsMMk¶A[[ËØó‰¶ú$Í£»üŽ{ íUÛáE‘-êãL·–îŒ£¾‰l<íq¹é¬¦°>Øîéêž:š9¿µFZÑŠV|BJÕ>§	ÏlC%k‚5z¬)¶àù—÷ÑÛãÏ	+Zë¤'š6vnb}gzÿÒXm5emÅþuhm-¢ši4U¶6é¬¶lIä€5A~ë¿<ì‰qØ‹<õÃ¥cO-ìZüíKûËI ,1<8\ÂŽ‘D¬v¤µd­\J¥Ršá9"{ºŽT.Í™˜æ]±¡5e¬¤3Vie]¡c]1òØìâNâ‚Ù‘˜¡H~ïüÁƒpWî=Y&æ	»Z´íæÊA”5¡Øö1Uªk€ŠBbÛ‘QÝÈÜáíÈ[—ç/_‚Ö.\ÞqáÊ•ó§_ùÞ/_y{~ûä«_úÒªd6öíÎÖv+9j¢g´gÖ'{¬ý¿%køöO!j$”Wå¢}HÖªýPž"Ý½Ýæöcb€$ÐÑÏdªÈij»&^`jV"ÊqÔl cz™fpÆØ‰Ù/ÐP…dšï2VóÈ4f·f;HþŒ¤?FQÍ‹ÕÕ¾¨„ûŠ(t…ë‹K'cS‹3éþÅcssGûgŽ]¿°´Ð$íÉkR—Ø3¦ÇeTC ï’³Ú$|Ã¢4xÌ‰Œ­øQG8	k~°˜jÌÎê¦l¬Ê×+Ö[ö£àIG£æm«ï§z--L´]P†Ó‰xß
ü!å.@-nâ–‘¬6¢´[;1Þys8›ÿˆî—Æd´\«rêÅw·Ë’4b¡6­J[¹4\©áJÜHó´*6:œÚú¤ÕÌegq†l×§¹Ja[.mÕ
´ýKÖ²2‘,µ'o‹y¡9Çø¿ï<øÜŒ˜ÔÚ¨ÒM½62’¥®Mg€.U†ü’<I`RÉd”¹ÜfŠ™Ž|¹­TB|#µ/›áS‘Dï.Bk¥R¡T¢¬´œš„/„Eèk„3ƒÖ ‡5,h€m&X›g„Öú“’Ãˆ@ÍƒIZS½™ifÓŽCZ°Ùû÷ {b1¹)²akZ•žpfØ&¨d&Œ£÷Û¡}òl”ø]”[Î¨PŸ‰=“¸5>{ìÊÌq µóþIö,H¹ŒœÚU;573Ç_ëÂá¼RkÉD²m[¹!é¬R®6¼-‘*mÙ‚ÀV¤'É¶-Ø$i‹M2BgªšL6oÙ¸qãðNuè†@yB–±	bBg~á
°1ªñ>{¸¦I[s
B°XvîwÒ
Ù+ZŸÆÊl£œvKˆj·hÕ²¢fíZ¨vÛÍ«1b/bêqµ!¤ö=ÖÝ©;¸IÊí[ˆg®­–©ñî"¾\?tª®jN»f§5ÁJˆj†©Ñ¢µåpRó–ˆ²FNä§7|lŽ">jµp«~ç5Ö ïQ¡y`ÒÂXq£ÊÔî]‚š‡¶QT‹HkŒ«9ø{óV½ùLŒÎ¬ù½*ÖAf²Ò Bé–‹a[v­hE+>9¨öÇŸ
MšZæ0Jk[Ô	;D5Ñ€&VsXSí¼öÒ9ˆ«ÂZôÀõ¬ S¸ôÚÝL¥òä?
ÓXa5ÁÚo<ôÐCe®ý¿üå+÷ØÅgyvá‡Oýðø±§Î]|ê·÷_y7•¨&‡†‡A’xihM2–DPK®E_‹ghýd¾"1³Jð6PìÉq$î¹_ñ´ÞfMÎõ H‡HÔÏ¼ÝK´bUëƒ¬ôØ›KT4Ÿ'ÎÃjšn/”GbÔF…ZâmÅnä?Ë…°&p»|™qíí·/1üü±Ó˜ûÿêÿæ§ÕÑ±žúî}j¶Â²|øá3Q¯ôTÔ”@#k«—¬á/’Ï§»:ðß‹TMt¡OžŠ•úÉÎÃ <@Ô¡¾JÌ†ë~—NYf¥u³Âº`0é%aÝ‡è:@5‘®’òt³“4¿úJ×8gÊ”Ì"6ÖðÑ?’ÚÕª/âš"5Â[`»$+m°—N¼¾ÔœEÖæ«K‹ÓªyåÄŽ4µìä¯¨u4XkV¥õ`¯w¡JÔ¸f6‰ê4Ç³:G‹•Šô3[Ýf„-tæç’ƒæÆpæC’G~í‹åvÙƒÕ®XÕ|YâÐ›¸Š7~r ëÖdtÏ™êB³Ocow‡Ñ.av#+yEìð ÜüÓgvúíHÞÉÇ”*©bµ|L•d*â*bíÔÅªä¹Ö(m*`áß­Væ<}®x5š1Öf®2[TCöþF¹›åÒ18OÎ <³|¡X¨Õù4‘IÔâ¦"Ç+|÷Áî$í·¡ûø€•ÛI­q·H<"sµí´3âNu” »‘¼Ìjª-QRu868\Î(ù1—jK•1’,†ÊCå”`…·ñ;,Š•¶†™KJ/TÈ`DÒšrƒ RˆæË2¬é»™BŠÖÂ0Ûÿ¯ÝX‰ÈèŽHj^«æáîq‰r%Ð$ 9³|T˜ˆÔL×p¡§›0›EQÄöÚÈÓûúªæñ²•¸ÖSÉõôxå+Ù‘©ý»vZR¡%+!WShí˜bfêðÌÌÂÂÜÂ“™dµV)g2©5òÁö1[ÂW„oÈRØ´…ÉHa…mhíÚL&Óyc'ÝBr•ÅÅâxR§ÑaÎ¼ûk[o^'³“0´ä5ªxoiæ,B@j¶Ð¹ßqMÔÅ Ñ®¡õ?hfÁöúMÖÄ+\‹Ã-˜Ù`—äë$­Ý|uÜæL$¸´ç´æ›ƒ ‹‹0!øfuPcðŸ.¬ºZ„Øœ8VàšÇjÊšÎnDZóšµ0ZûÌÇBj³(²®¨ÙÌKÍXl]I‹V©…2›6áQ—Ô<"ÒZ”«£Òš³ö
æxMýí¥™1Qn¤ºsXû›™z½‹§@*cR3ïuß²ƒlE+Zñ	@µ_WóÙ
X£¿šµYª‚5š¬}ÃhíVÐìF¹÷G”µ—¨Š°Újäv]Xk6dÓ¿›ö¾)Õ4:ª=iÿ—¿lÖ0íì±Çè°öíÝ–”AtŽÎÜOÍ,-”§§²v(›«ÆRÃÃÃå|<CÞ#Ä­¹†6–évèb1‡YJ[Óak9&eˆ,9?J’“{B~ts¹oÊ&€Ö³W°6« ±í5x{É„¸mgn–54‚7ÔÔ)f5rÄ`m9,Uòòüm/]˜¿|á’éo~~^7]øÇ}õQ¸&{h_šfkøA:³Íœq¾kQ§µ™™Ï<Skð(lÏ×¨\“Ã&®©Zëú¸ñWBµ“šØhH)¿°7yú®WÞÞ ±´t DIèdÅÖ#Â~øNœ3ñ’ûõfvŽÎn¯¥wUµÐ­¿"“Â¨$/ l¬¦‚ž Õ 5“ÖŽ->÷úÐi}Ìú¨ºê¥ÜëB4åÚ‹/î’‹Êý‡PØ "ÐT‚.iŽf5öD_EàÍ-üÇl\QÓÆ®ÆBAÒ[}†B*+sÁ<¸¹Ü}`µž‰!xõsjI)uÀ"‰”ŽÂ¸H˜¦Hêû ŒÉÊÁEr\àFI˜ê¡!+hã”Ë±ÅÊ¼º3eXK7 8¤–Óœ8ÚŽ«!°–Næ²†Ñ_¬;†òGþdõ)þõq 5TÒª«-6>Y0ÎKÇs…,µdU©§ÕR¹nµm¢0¹šõ2ìð}€yëbÑ‘²u¼1R£`’'Z*Âj”QAb1n“ïd£Ac8,} µB­£­œ%ìù–ÊÃÈiÃÃ%ôÆ¤Ò’¥ábMÿàŽ{ÈÐ“a¡zÙ7â ›±šˆ#°î(ã´ùååòŽyélnàÏêÚ±läÿµÛïUï±{¤æá;þOšÌFÿ57¸×ê°¦øÙJ7GH‚Cr¹óv³™úÑï~á/¾Š¡N5®e•	™­¬…1:ºó­·Îž|þü	õœ8‹Ê&‡Åq:¦cS3Ov¶%S5tðL5FF@¢Áyo´un+ò…C×Í¡m·l­ÕÕw­´mS!g´–Hæ*E½½ÈåÄ}û3ï¤íæÛ¹pµWÈK¹W©cä>:¬	×ÂkÚ WÒš“šoCP»ªyêd(­Åj,¾±áÚI þ0L¥¤ñìxFÚbðÐailÀš'‚ÞØÜ1”k‚¾ØQH¶×Ö®/ª±a]%PcˆDTYc	Q-¬Y[]Z‹ÖBaíc#5ÀLÖ©1q@#ì– 0-ì}íûP›m®-¨ÚVòS£œ¶¥±D•5­áŽæþîê­7ßŒsä1cÊù=rÏ¡4S°fM7¼›»y k-;ÈV´¢ÿÊ ÿä×ŠPQó	<ÐÔ 5K‚$ò¾onÙ«¬!ªiB4BÅh6±—ÞyéPì÷âÚõ‚öÌ\Œ$òš¢±ÏXÓ~±Úß¸®öKœíaµÅ'wÍé[é÷_P,<YÞuöÝ'Û’äkµ‘µ©P¯ÉI$C»5¶„ÜéÍ½ß=öÒÒ::b‚5I¬wˆuX¤`MÔºÀ^ I`.;—õäò{îÍöÖÈ;Û{~Ø{þÏƒólµó{jµÙüX¡–9¦)Nn}õ ÖÀ3píÂÛHk0èvùÒe‰pÛ/ìiÆ{FÇ9ûÆ°–9*XÛSï!]J°¦¾ÈA
áU&Šk§Ž’™bÆ[ý|Òú*§iöÕ çtwËC„6!ÖOBidi`w™'d2¢ò6êÞÒ@­74àÜÄÛclA(òH“B“Ž^N_SÒ`öH$2PÕÜ­?juë'kL”&eù1Õ©-,ðÛ©¼ë–>Ua÷ßW¼­\›>µ_.ö}‹·UÃ3³YwÇ~Åä²÷þ¶¬C¡‰Ž£©éÙŒŒnvXs;¢Žýf¶µñ~n¤Š›‹¤TfëÕXŠÃ¦éÆ$þgªj-	«eÒ<CŠ±îïg47iSiæ‚µô²7$
'ö- ®š‘ÅÌ•”7Ù“T^Áž"ñ<N
laºdý<§õËŽ~@9ï'4Ýž,`g“é‘!f¶ 8UÉ1V™ø‘Tûa°4ÞŽ:;Õ˜ý½ˆÃã$QjYé·µF£Î?j5t±¤Lÿg³Y´±$_aÌ‚h`r­Ù?Âñ+2úVDD–Ã×ûk¿‡ñO©H![q°´f¨Ü®ê8Àm8[ÛY)~Çø‡¸;ý»pùa DppdÊšÕüe£¡EkC6¤Kk„ÁšËkj³fÚÜÖ{½¬ŒË·@WÓ†ì¼©jÚÌ‰C½ßˆ{ØŠÓldcÄ¢ò5ÈÍœúYþöƒË*-½ãñ¿ÿû¯öÄª®e+èi|Ž°„œz‰ÏüKÏ½5úîó'__Zz~é9ût¬Í,LÅcÓ_lû|<ŸÊ$•ÈÝH¶‘ßXW#ì¶Lbp›ŒdåajÓ6mÜ4\)Wê•á©ÀÚÉZq|+@“`I¤Î™LuMk]ÖÀ2½ò­¦¦Ap" 'â2b]Ö>ü·hY-~¢¨¦!R±Jk,>¬ÎjZ[n¾ÍÍ_*Zj±Ï1š™fëôòœÕ Íl¹·‡ .ê)è”%µÿ¯’µÛ¿¶HuWgAFÍû=’ÅqÍÃÍ ½fm…²•Ö°Ù°õc,P¯…{š:o°‰ÁÀ¾™úë–•±rÿ|M,íœíØÃËu”µÕÂ[\V»[V8ü	Z5×ˆÝ"È·÷²z÷n±?ÜÀZË²­hÅ¿êø£O}ÊU5V¢ikæ©k,›6	Ö¤«Y×45»6AÍ©MSÇ¯Kk×/YëÌ7ó©V)Ô5(TcªÁjÒÕ0ùÅƒË¬öÊ+üð‘…á]ÓÇŸâRçÌçÞ?5¼ixzÿ·SÉ8éCk6m$›<Ø+ã˜Æ$nÛ¤”µfD<iy‘ÇãæFßÑÎhæä0›r!ýR:Iç¤d{jÖsMS«íeb+ÒÚ„çBŽÕ'÷ÎoGN›ÍeQÞ “ù±\CWiJAì°ÁÃ'È„¼´]°¦ùöKXÿ]âN“¸¬ß'ç|FØpÕ'Ø™ýp¢§)¤V«ÆÂšµ°dmÙ_äèá)Ü÷’]±ª¾¥oŽgÊ’²P²¸‡ÔEÖ`ÝØÇÃrŒ}Ýqò‹¹Ü©_ý®»úØ!éPf††miD4í»w?û1 AdZ<GŒäúÓÅÑÑ,g:ËõØ¬‘bµ|ÔUXÑ›8I[4¿þ3‡‘TN[¢2.¾»|ÚI-ÐZoûObSûse%
æYJ¨`+w)V\Y³viËþýb†>¦£îáŒWïçÁû,–É8¨1È£êqUºžõë“&‘FjK@ÁZ¿i—$ŽªíµµôS7ðM!~3Þ€èk]ìædÃ‚gXËçqxÖø ç•É9ƒc]ñFÃ­qúÇlô»Tâ†Idú®ñL;<YnÏÕóî–_,¢×t@±UÕEUÙIp¼¿MIC½ÛòöìèÎÀ¯âß¨ey$pXoæeF’¶¾Õž˜YFS@å ršz¹ÑÃ ß‘¬"V&“p+Oº+‰#¹©7†ðßÈöLN-¨b#GYÊZ9™Å§txów~­š2¯@rueí^€ÍyTÁ´ jRÏP®·ÏïØÎŸÖ²ÀÐš MaÊ)”z°;8ÊÃßŠ¶¢!2Su·»šf°ÆhÖ$†<Z@5£6:clê- ±á6òO/þõƒ_ÿú—¾tÇãÂ5þªdßæàÛD]°Ö³S9ËS‡÷ÖÆvxovï§¯\9½„¬F/`éøÙÅ™ÃÐ735•HÄøô¬Ï@× X|Îä6u–Ôg¯0«ƒÔ°fgIBM62¥¡¶dnp#]³¿O2U ãœ©ÖpæjiU;¨.D ¬ÑeÍË~|Åò6ÛÞ:8kù‚XÔ¦ŸI„Ôñm`¼PX»êçš5kÞ;¨NcÆÓ“Ýˆ²"o&\E#tÑ/v»C¦²y7ìÕ•5‚!ê/¢aE›µß×/[Öˆ®¦ŸP\‹ŒDì ¯6‰6Z©}úö­§ùÀ†1„5èÌÃÊÕtÌ`m%‹q€ÃZÙY=0~¼=hlnhQÖX"¤å5§Ü°~-•ÿÈ[-H7‰˜}>ãæQÄfù¯Ü2ªi™-cÿÛîv»‘¬µ¢­øD š.^ 4aûÑâ¬¬YµonùKlûƒ,È[½Kÿ„ÃZç.­uh”Ê¯Å6.…®¦º¶ïÐ¾§i†}?Âæ".ÃÚ÷”yñÔðôâ¹§k/üŸ3gæþóÆRõÖ×ø“jÅ×þ€š"£LÈ¤ÃZ¥M=°°XXƒØ”#)T“¦ÁÇ:Ë‰I3¤¥±¥zöN4cÉœÛqcÍ¦†²¢iÐ1Ç¸Ùæ,ˆ&žë¬c¸D:¡ØÞ(“(°yÛ±@bS¶Ëçß¶ìH,GÇH×94±wûö‰ÝøODÀÚ¬™÷+2tîÂÚ?|å+ñ$/‰³ÓÄs£š/—r2^4XèM§IZ³¢38ÌX¬åZšé7*§Â%’1?Z÷5²Y„kP‡cR‡ÌâŸy,ÃëÍçw:¦j ®åÖÿøJ·~WÕG5â¹¹ÃýÏ‘¹4•~õøÒTÇ©£ñÏÇxS­¿çÇ»Ö£ª?AlLZ¤ÓZ­¾³hM±³EIeŠ="·€É‚ƒÌˆ Ö˜¹¤h‚)¯o#²­d.ÿÙ¸4Ž‡	$#ÑÌœùã Vç-™ÂÍF…ª
ìîëåLšYH¬|Sttx’­¥Jv°/RË´gô(±\_/Ÿ]î’‡Ø2ún'9 ÌÕjHeåÕ6¬¸ )‹Yd°$L”¨à<°WÀš‚¿‚*ûÖ#»R"–‚Û(>+Š9~mƒ÷£šóŒb‚6\Ak™$~ü5õmƒ»Á8P"‹\Y!=2Ù‘ì@L¬{d8ÿË’Ÿ«rÿI)¿€Y‡x´Í2kÒê0CI‘M‰-FŠ')$üÜ›÷nåªËHÂ®ªÖ¶uº63UMëeíÿ²w¾±qÕçžß÷{_íª/lË@XYS¨s"gJvFg2u°L<3hSw¬i½ u©fÔnØ¦wBíÄÜ’EÀíå7„¬$[[(+ß½dë«5p1‹¨»YÈ½íÕ®‚ /öó}N|4†ì–y1Ïœó;¿sÎx2Gçãïó|ŸŒÖL^sz“w¿ÛA:¬º¤nmòA330‹‘šÖ~+èò3B5 0:cõ©V»µ/þãõß=÷Üsßúùý÷ƒk_×L\ÃÈ‘dU<aT$¹¡oòAäócK¯|øîä{ÿûÂ»ï®œ>õáƒ{ßá?°•W¸Ú¥­Á¯¿¦ú¬ÂOpâðD›~AY*d×õádSÜ~ÇÎíÛGôQ´¶‹u»Ï"Þ#©äS‡¬\¿}þ¶)Ãc‡oÑ`M·³LD–i¼fnÀ¶ßu5Âu1³àg­jqÈèÁbaÄòš-õYÍ—ÈKÄGµË­RêŒKjæáÁÚj2¤YL„7÷Ngq
¨“ÉzåÞ",ëÇFýÁ²Æbd­$‹"ÎjÞ2a;H·í¾ç‹ µ¨ŸZ4¨HÁkÑ´Ã¨M”ì¨“
ßQ¬Kj·SDý<õˆ¢žigDhq^³Ñ×pàòõè<Áí YÕQÐaÍ•t\»æã,°ÖˆF4âê5€üT¦ŸE^kÊ×ÖÖkÔ«aéÂš5XƒÔØ$’	ÑÕ˜êøu¬¥'
–Á¸Tµ0R°öƒ—žÄòZ¬ýÐXMk—ççWŽ~òìùS'ÿöGh9Ñ7¬a›@MO%]’²FÒaý°½å÷ ì
ÖÌ<]uj=ò}ÀOn"	Ê 2ÓlÁLfö
Z²µGn¦&¶é=Æch¤?NÖ4;ÀÊ4ãÜÇÆoâ2À„¾auÜb³&Ö¬bíƒs,òÀîî_mbz_tªµƒ@ÛIò íà©Õ…µÖž{æWÏ<óív²Ñ`Æ§*•<zß¨šH÷dÐd¼ø:# 2XÍ‹Ô†ì!–r]p*VÒÒåUH…[Ä¹Ì¨z„Á«žï—ÔÌbõ}E¢ØFj++–)W‘•Ùž×g–O¾:Ÿé¸eùä¼èfvq±£g"3³4ZJû;>3Û‘1Z+dHƒ4«óƒ¬9¬ÍBÄë×<ÆÂg‘ÍÈ.n5s^+–jòè/nf
 LÈwQ.&š=úŒ0jìRol]|JªU £Á‘i]vÛÔÓ™)x$ÃÈg	êêÊëIHRãø"°˜ë6³ÚÚ®W ¡”2ü1ÉK1†*v„K#wÞd>™6Ã@à	oÁ*6(òí§š­‚$¬i!òvaphXÐW…´Àÿ‚³r98ð²èeSèmˆÑðYsÚUÊé)ÉeàÛÄ¸öø‡ÛRœ#a¨U‘ó%’úì¬aqãmÖ²I˜4¤	Yù7ýèÐŽ-¨¯bÈeÄ»a¿`°F†£Lû½Ô‹Õ 4f¬’±5õ6Tž$­9¬A}»5c,vSã¢´)¸‰àŸh¨Ã3ÝR‘t¦ÔBí(!Ò»¬}ôÞ‡ÕÊðç!­}}¿Äµ^€\“ÕM6Š““oíÛ3¶aòÑ…3¿\z÷½÷.¼úá»ï­œ^\ØóàïÑÕ^œŸ™YfœEV–j…ÜÒžÃ£SêiÞ·sgkg?Ô´âð¹B´·EE™ÌÈ4Üô`_ß%¹U§Œ@š²U)ÇÔê{ÐœÖtœrì§¸ÖØb¹xþðáÆõ-TÞü¨Ùêj¨ù£n¸gÿ–^¢nØÉ°rVSpkNl4ï~ÂÄïïÐbºZ}‹A_êç@²Úr…ºÚúØ¦W‹»‹D´ásî«ÅkÖ¾«YYí®Ô/ÌQ„M„lvÀø,‰L[_˜¯oÿè‡ÌO¤¿Q‹ˆÖâÒËÚˆƒš-—!vtTt&/SÍ¶ùþÖ¢µÝaµ°2U°¶e«ZtpÖlFˆ†w#Ñˆ«Õ¼:í…ß©9¢±	AÚ§°öÝo|ï»ßûwwÜKÆW¬d#†Ua›ë(ÒçvÌ§ë&A®GjãŒÏ&*„¾R•ñ?xƒ57ùÚþ'oÛwö;gï¿ÿ‡«Ë·.}öèò™ó§–±9qfoq§:7aM.ÿƒjXC‰¬Ö«±rël„¦DÈ 8LÄ¬aÕGzšeña‹¨’!y@¸€Q©åÒ*LODº=øèäô4´å’šÇduò¯>Öp{Õè´ö)špx9PQ<Ï+(|cìÍ?1£ñÏŽt¿È±ÄÔ†{H‚äÞOrãúoXðDÂÖyÖ´YûÕÍ¿úÒZ@,æx®nçƒ "H €e(k*Kc@Sé— ¬WV#êº&MÂÐÖ ‘Þ^ kí|ºšu
eêd`€•JoGPL'J{ÈU„…Ð$Žj…º¨F «yµÂš«k'ç—WæÚgWÞ\™IÞ²üæÊÍ¼áãó+Ù‰‰ñÙ¹1#¸vüø¨d¦ja“A …nÂµ"j•©…¾¢1nÈh¾%LF#|ø4¢’¶ëÖ*ô[À–¤\­¤há|_Ë[>mHÓÕA ZÞûZJš¶-¬úû 3 KÌ<¬¢R¬F·²ö; Ïq¹ù‹í©YXòËHÞ2SÓ)e|ZrdE‰¨Ö]¢0„Z¥4Ed—tùxúáçS9È2Â@Jù²3*×ž™N#1W¥Ô@p‰vÓ™4ª~#§´¢6Ú/›>60ÄkÑ>‹åjs‚ÓØ@¼Ì }¿ŠäKNÐàM‰–¸Pörô WRGÉsÎç³Až·@…¢¼f@é*íÄššŸaÇVAD?+"[dßïÂ ö”—«Q¤Æ€ª†¤¦ÑvÄk|„©¿ý}ãÈN­f+)‹èîÊŒTP¯æŠšÚ‘…m±UæYý;8	y›ÎJ¨ûíï¾óÊ+_­…¸vÛ>Äµ¨rÍ
$I†|ë­{ÆH_~ë—¿¼0ùè{ÿåäò¹s§N}ˆ;ä"ÂÚ™[ÓÙ™_<A% $IÔÍ‰Q¢Z	ùÿw¤µµ¿>ªRm¸¸«XJµµ¶¦óCÛei7›ï¸ƒÏ0´öýVPÒš¾%õÁ6g<RLÍ¸E@ãŠ¾†uk&©ÝÈžMBe€³¸Œ¶6B¤‹¾T_cA6ä^«ßmMÄB¡šûA²ºŸwFBb fÞÙ2Ek[vô¬YgC(Šc@Äj1^³%ê¶¾·ÈJkõy-Â5J„kki-RÖBa‡pMÀv=Â_`5&<œÜ<þ“ŠÐ"RcpX‹ÐÌ÷Xãñ1«¯vûŽë£Ÿk=iÍdR–Ï0ƒŒ~ZáÃ›XË	}Ì&±9rÓÛì¹èYýzkÊ)½«áÝßˆF4âªEµ?»$s2{Áñà´Œ 	7	a3HXmFsUÍ*£…°ÆBÄ`íÊuµÖÊá#­­•#ãØ‘™j&È€¬í¹åÎ;÷ïÛ÷ÍGÎžý:¬IXª]¼87þâÅ'–ŽþŸ™Äüùy4µbiB}é,7¾…*÷ )Ý~fÛ 5B²íîÖ<úµÍÍÜ:Ö}Ø:“¶æÅ5Lï¦ù{8*ÔÛÚÔÔÁGÿŠ{.ˆC”&4#°‘²¢…!GIÌcÒcŒB•™·Ëe`U˜Ò2ÛØ?„Û}ÿ j#|Èkù"±ÚÂ‚^@ÂZ&‚ž0—Ð¹gîÛê¤V ÝÏ(Wô½;¬õ©Š*d¢ñQÁ@‡´5j¿Žá."žU%Ø*½u êH»²º6YªHŒŸÏt¨ã¸Im=]À¼öd{rEÞ®ÇšHÞ¶ûŠÄÓ}EÜYÄ}E`3’yúÔ\ËÍË§OÍt¡¬-Ï&{PÒN¦Æ‰L;T£Z9ŒEý1&2”–g]…µ0âvEvÍ|ÍCóGŒF6‹ÖBCÿH…#¡éˆ¶mˆtCAua
Îåß,$)š±7·ó‰tta+;d–õˆœÆÒ¯I S#Ÿ6D^jIË¿å e^«’œå$€Ê‰„íÒUu1ãŸ¡~	ñ&[ÕèjV)d#¸É¥éáááTšDGÀ«”„³j¹aóÍ²R¯Þ”.(Q±ª_qZ¾44”—X-÷¡¬‚,Q­\=Zö’•€¤Èv‡É¦TMÁ_5È®È‹ÉªNkTO•ŠòŽÌCE®ÍDr.òÏ¨_£„üä/N#EÊKÅjmpF¥J=]©T»¤‚*³Â`+´p©cô¸¾äö†œúÕîƒÕì¡DS£l6jÆ†Û?áæ$¬ýV±âtÆvÕ©?"7±Z¿45ü ­Wd†×½`m+oÄüáïéÒï®¨Úì<´âÚwL]óÊ5×Ðxa5hmš\H6çžà‚÷Î;·„»È2¡Í­mmÙþÞRrjºÂå,X›ÂˆtÇÁÖNb udûæR×†Rki¤¶Á"_@b$!i­­3õ³Cž¸é°¶Û`MÆ!îÂ°[ßàn É#$œØ„÷½×_s#'BiÍÍû™†B™/aDì›/‡Gý…#Z\Z‹“š¹ñ¯éªæ”fÁ›¡-L~dº‘	”Âš}qT[Ç¶ßyêJUµm±	Ûõ!/<BT­yˆaê7Z‹F<	òË[¾ R‹²Y<|_tÕ«±ãƒârV³™–xØ	^©£Q¾E$¬ÅP­Ž²¶±^›µµÀæÌë“­^Ÿ¨Ÿ<SáéÁÖqM²šýÎ{0U4”µF4¢W«WÿŸ]Šr=2Ü·†rÿÑYMÂÚßP¤`íº{]X»–Åeµ¨T•¡•ý¿Hk­©ñJkš{ì  Éu>ã°°vøýc£í]w¿´_k¡¤ÃÚòÑ£ôW[þõùOÎÏ%“33’iª©”`m¸©Éš:‘)4 £µ¥kå86µdœÖZTØ˜7¤”Œð·1­õv`6b÷´²Ä"`RÍŽ§a†bLÖÈ¾ß"ï;`§>þxòck­äpæÁ½ÚÿxP	yËalPßÜÝhÕpyÛhækŒ~Ú§–ƒÜüåË(:…XÝ×ß¬9­a[¸¹CVi"_Ö,Ðá1Ú+5ò°ÈŽ÷t€(dˆ> w¹–¢#—Åc£›’ ÜõtïÄg<ÏM-z’d£Ï²)£2,äºÄX®x ¼j,Cµ:¾"ÀZhIÀjjl°vjEÀÆ­ñüÌìÌÊÉÅoÏýç9Z}w‘ù˜IL	V°“Ÿš¢c*Û1î6(•\…rªêÔ¸rôDg‘Å²CW__j,Ì½¯šwX³=·m‘U;ExOÓ¾¾rmÜÚWÈºj2Ðš
Òz(ýËVÇ¤«¡·­VBZMS%82%’lkè\3'[6²;~IÅ	ÒLMYKWüÑóòLrU©7Ú]×ò–¿¯AX2¡L57WeB'‹jÎ4/µ7cR0&€À©j¥ÊqE‰K#›(µXX¤ˆî&³À¢ úFÐ3ûÖ´À,˜¶WË¾iÞ;Ÿ•ƒ¼Êš¬HPôÐô*¨„”¼)êÜRÆAkP²Ó°HY˜ƒzê.˜BÉLfZHášXí`oÇKO‹©Ÿ‰ÐÙ‚4›Væ¤@Ê¿_þV»&FS°•ä=Û6òÂa+l-^§¦»;² r8¨Þi4d4 ŽüIe²êàä…“„:‡Ppf¸æâÚmFkkÄ5r!Îýµz­I`£ÎTÿ\X\1H­-Ý|kœ}9 {7‹ÉjüÍa*+èsHŒS­ŸåÅd©¦ ­m„ Œ•?ö#mð\[êÞžåq¬Ý¥4H@FÅj;,¯]Í+áÄ6ÓÕ´qþÑ/Ò–0Â¡Á!Í7Ÿ§¬¡ªùS}ŒPÍ)-RÓÖƒ56ë?fZŒ æ†-¼96½OU4fâï&#‚L•/9Åkawä:´f-ë´Y—Ï&µ+SØ"Ç§µYz€/±>ku”5Öþ®ô* Õ›‡mÔ|$4ÚÌö-RÛz°·ç©ÑL-ü¹¯Æe:©?<¶ÔõƒÜ«.Œ73÷Gô,I«¹
4•#¤u~Wý)!Z³_s'46¬1ù×XkD#qÕ©j_BR‹
ÔêhjÎj¬2î·&kX‹àÚ/VùÊ½ÄWBÔ
Q-6àíÊ`£,uc ÅçðÏjn½e¹ê¹éÎ—žÜOÅš±ÂšuX{öµùóÏ>{ô“ógŽ]z™ÛAÙƒS›èÑ;Øf­Õ¸aå¯üÉ s ³’»áljkVù™Š*Â.nOÜæ¬13{lû“Ú-•’°À¤ÃyJl4ÝLyŽÊzÉ˜y0×ðGb2#je‚{Úi<Õ4ŽŠ§ü4w°æð†˜-O4¼Q.¤‡hMáEp“?®á…_÷XÉZœ{"e{‘l~ö™ã	5nB©P£r5}âwàãn,’h17LhÃŠÕ™M Y"1*ãD´ÅI*g#€YeLêx/@ÄEx%­›Ôõ  sûDŠwœÛ`ï<†jq_©jÏÜvV{1’ÕäÕ¯Íé•e² ç/Ámó]+Ë¿êèî>þººv£CLMŒ«AÁ¼ú§&PQ ÁÆBŽ=džMSaZe­ìŒ¶Y ¦ÐÎ§{¦¬ù„ðÖÆÖ¶‡2¬VäÇ%5&kå~Œb4x¿KUkÍ¥|…OJÊmÑVü¤ùµ¥[¢#£/XõÒq†s‰¿	X¾ÚàžNq4¸‰¿H U’‹G¾©˜Õœ³®
Wižj†J&ûX*¦D†©ª	‡µRi6Ä¤¿ŒË%ÖK¼oêEj(xA©”­«:`àYª€Ç”e–=üŠ¸¸Ö—“É?Md\);Öj~kÚ`Sr¬AŸ-g\¥kJW’kƒÅ¡òÂØ¡~B·Uä¶õßsû!(`F€1êÕT¦ž	ÔÓ|†¦ÆyF%Cª¾^3R3jƒ\¶ñ×w)hDhà/þ~4'ØÍ-ù	&¾Uðtá°ªVÌ?øçWOFkDHkàÚZ[HõY˜†Ö¦gþëäAÁZm×ÐûsÎ" ¶‚°¶8›˜Müúé[+|\)–ÊÈ&›˜H—03-•P>‹ÒÐHƒ„ÛšÚ:;ÛÚÆ“ÙÔ ~ù$;‰§:‡/ñEkîŠr—íèè™„¢Nê¾ 	ƒ…·Ç–… [ÄikêÏ")5&­­†´æ›02žùXß	×þHTÃ@6†ë…b[n0ÍÏ6—¥¶°ÇŒÛtik«ÅlaQ<³.l1Rcø¼ká;YÕâÒšcGk‘²æÂZ½š5ÁÚ545ÿÔ´z;ÒÑ´BdŽhrìˆÍ -4±§°¿ŽC?/¹ã~þaD^WZ«ïÛÑ™mµD”ÆŽø!hMíÑ™©™½¤xBÐf-w0úŸd4‰BL×èŠÝˆF4âêD5B‚+á€ö1Ê´_´&U#HîÍîuß~OŒÃš¬Ebâ±Ž²¶^´ŽL™¨s%TÓ`µ°ÃÚcû¿~›µÃþ¨ö¸ÃÚß5-¡­ýíÑóG—_îÙ¶áÉA_Ãfä=vâ&B‚Õ@Š4+êÕ‚lF¹{– ™DXk"-d?&ì^ÚÊŠs£‰f‹Rímz’˜’á`@sMjš¼FÓÓÀ4¶Œ
ÑtVÓZáÇ€ÕÔ6í§À>y„ô‡U`sfØ<öüO/øbº&•©êYàé¢AÏºþ"ÏÍäª3s¯'°QÏ‚Yn»e1RQâgGŸ6Ú$¤I99Bh^£Fâ°¥±*6Ø?öb‘Ù£pX39ÐÅêÃüHH¡ä²©¡÷åz«åa½o‰…Ÿé+r[ä^éM°Y 5G5ÁÚÉ•SÜ¯,.¿²²¼‚Þ6×;¿´´4ÓýúÜ&½WÄ4º_K1·Ï;¡77:1Š}z)ŽÕzn™b¶ pUÍ`mW”ÙØg`&ëþÐx‚†à6…ã…¸
vÀòÂ´ç	ÖÐ-eÄÒ!oŠÖZˆ´£WòdÄ±\G·±ÚrT*šTòDG5Î‚KfÎ¬fDš®FíW"mÐ$±”H°™*äá0‘ðMïé¦tæ¢®‚ø˜æ¼x“¥æ–4&"Åb~(Í?$éˆÊ™¬VæéI^)_+4ªNµ$(+JìšRe¡š<¥k‚œA©X °°Zoïi,G
©¾Ú´U‡2d!Cikü†é_1Ášå,¯%ä¤‘ °Ö§´¾Á§ôGpïd+aMgàÔE"äG´ÂFZSä’ÖlÔCÈ¬™#$<çþ¡²Æ«Ü…Ì¤¸g¬õ{»4sÜ MxØyØt÷núaó‘ÚGÿ4´¸ø*­™:&\‹*×"[HÇ5ƒ5kî'SH/œ$>\µÐ97]fçð‚ÔÏ ¥6_ø?‹ãÙ¶üT!H“Nª¶cPY*ÕI´¶6'‚RV‡šîÝ®ØymëÈÀ@ëv÷kqèÔœÏQ`>˜'¤û‹XAÄ60Ê"\ó…!ô„Ô&â¶hð'EÊZDjñåÆÏä5o²fL³:•ª¶Eira´»uåAZ>$sK‚t"•I¬h-Þa-b«hø<_F6Ñº¾ª·ï÷ˆ¤µ¨dˆjÖ";HÅ57üÉ¤V_PcÔâ;®©­:=úTT¦…=ç²åXãA3¶Û7ú…A¬/­Å‹Öü§5ˆÎ´‰¦„gÌX5oµ§+@”¶ˆº­9¬i7ä4¢Ñ»hÄÕÖûKŽi¬Z")MG7ßqV#¾KävŒEHƒÄŒÕ€5 JqÝT#Öm¨vå°–>B‰ÚÄx2é¬FÐzÔ:¬½½X«}ëá‡þåOúÚükùZ2˜?
­}rþ¦¶Î&îmR¥Ò@kJêšœùWE`8î5SÖZ±ð—Æ¡b¶$³¤ÄvÝVÁï¦S¹BKs^$6=…±¬¶g5×@[`;9®$Ig´%©‘ïH@fà™Æ#0šÂÌR&’	Æ#	6è"c¶²"$6OŠc lâ°ÆBÀ<k5	k‘sÿ“kaíçóóÏÍ?‘«ž˜/¤5I&w.Û¡ÜÇq<0@‚t0.+Cï[”•Gî§ZZS­Æšé†Õ~ð«áZ¯:ôðÄ„aš%j‰áÈ›T=¯¾IqÄÖ’Ú…¸§v ^±ÚgùŠ¼ÚŠD¨fÃÉÅåÓ+"0]<Þs¼cfåÙã¯w´gz7R±%{nÿ¨—é@†'«ÉÞ µÚÄ-G¦§¦M\ÓJB¤;…È¸_SrMns,cá˜ÃS…6 šÕX_¹ZÈñ…zªîÁ§qÔ„{óB¦-š%„‘¶ðŽ’„ñu†ðvØíÚiQpzs9M¸cÒšåGòÈ(*Ùf‚cäŠ$Z^—Pc€¦ |Ë™ˆ3ôªZ…$Èœõc«ÒÈ¢‰ÔWZ©ñ.Ó(dérn˜§Ët¼ÂoAŒƒò*ÒÁ”ð*!}Éï¿=™Ï‰õAAr¸T¶0ŒìH9T5|Ò/ãx’&,mr
~‡R²¥4 „Cõd‡JÍé’y—dƒúUäCJ¨UÆÀ.µàêãv¥Süó›±ì÷ºµÝdz[ëCRÇÖÞ ÅÜ Ò56,Þxež#Ò½E$ª10½^É^‡¸¶m+°f»æÈ•Áff÷èæýw6ïÇ~NÜóÁ?ÿSAÓ‰Ó\›ÒÖ§µ×ŒÖ„kwº-dej
Q}¯hm’‹†¾{îÂ$·_»499$ç_™¢RÉõm¾£X.Ž´ò¦‰ÑL[Sf"“½KµÍä:¢Ÿü_–îl½v˜^
#ÂeŒ<`¤	q®òß*7°[±ä'kÐ:CPc±ðƒƒ§@ÞG5‚­G´YöÛï‡íöùV<"HàÌ§dB*ÃM©¢6®
ÖMœÓ(TÒb}ÏŠ5ÒZÈTáæ
#Žjñˆ‘Z¤ÅHí2;È:5k(k¾ìþm¥}º	WÇµU.ã˜ëk‘²Æ¸Æ_$^¦ÖÞmœÖ"X-ž©ˆ§Aú#^±Ñš5Ðc`En5&b5`MhOq¡DÈ»â°æ%mj´Ö€µF4¢WQ±Z” iœö‚6 qÒk3ƒü·ÒÕ`µï‘iqïÈÈu÷F°—ÖÔ_­~ÞcüûëÇ „61>A•#RÕŽŒíêòvØûöÖ(X“öòøOgn=ñÚùù¥gŸ\¼©³í×O?Ý”Í)Ek*ˆ¯Y¡òš[‹ x4›ëžYRz›rºP
dÌÀ³€5vØð’élsPõ"4dµrylO¨«qLŠÚÁÊ4§Åjÿ¥y¼oÚàûï¿ø°¸æØû£wwmzÿýcÇF»»G{ºz	ãFã6ÚÖ €æ›ÊÙÆÛ´ç°fà³ É„/RJáZXs¥jîÄÌÌÓ%¹³cæÐÑÞ•‘'EëvŒã»¥ßr*Ø¢{Z»º€µ üôÜÒZ%‚S©š«p®Yö#=îÙ+wÈnë‘áù]í-xGvo²*¶dúyålFáï;î+rwä+Â{õbµµM°…j§NŠÖNQÞ3ñ#­¨æf;TÖ;{ææäxÆ¤™wW†z©!¥Ú%¨ÄJ§TE%iÅÔx!ÈÜr°æ¶"néü¥•E¶y°TcªXÝÄ¼dÍCŒÔ4Ï²U¯uëË©>KktpSNa!#ªÊôÒÿ¡kœÌ^RpÇ8Ì¤]°z	ßtŒ—#Sð®C=ý˜©¶^Ft´(aWhí°–fÃóÔcÚ#…{‡HjXK£Ó¨"™&¹¢è¨WÍs:_«dùä«Lqa«¨â£ùµŠ¤Jéd9”ìH¦-²j>¥º¥Öø•,É•4Å%1íÉUé98nµ‰ÖßbŠª:$×j9W.!’ë×6°F´=ßW

°Ú ¯®ð{HßÃ–æÁÍccùDX£qX
×ÒôÀàÀS÷xÅ	EW„ç@JY»ôÑ‚1Èh¡ æ_dÞÏ*Z{€góu„ÁZ¤°bv¿fî·Þåðæ	Ž6jó&ð!(R3;I< /]xóO/%Ïœ áßq-ª\qmßþ¯I\KV¦~<5=µ·ZÃèÁ½µµ·.,¾ó¿Ó‹úÊ•“µÙÙìÌü9~$y9<îÄ¶3Ó ³‰¿«@ãcE¼ ïØ¼}0ÕÖ–nmÊ¦[¯kíl¥…^ÐI“lŠÙp×6_2EPM±wkî¶:žÝ°eën¾'„ç}«ùp½ßiÇu2„Q‘–èy—=0‹“šoÂ½ºya¸®fÊÚª¤´4Uv3}Å„5¦(ƒÛkýÈj1ˆ¹Æ#t‚$Ö³‚Œ/ŸþrþÚ°­/­ÕWÖ µ»¾(7‘¬ÙÖ-Åe:åh¦‘ãNhqÈð)³{ f±Ž´¶†Öâm±ëxAÆ”µˆÑ¢]áµS›3Ú‰Ò xDdg5``JhU5	l®ØhD#®žHÌú—ygµC°š¶aâãXûêWYH€ªk„Ã^b5ÀTs+È("ƒáêÀÚ•Ñ÷ŠtG&Òé‰ÃÌ3£‡E8b5¹‹<ò¿@W{î¹Çúâ‹sOŸyíâù£Ÿ,ýºíé'žhªrÜ(ª\ú
Úš²–…ÕŒÍ’IñZ³ò ™ëT Ìì¦7!ç;`M_í¯XåùÀšâc,!óAùÀjišó›hmú`„j ÕŒÓVƒ’;m»ó¥—{û±—^zéÎ·ß¦Á÷cwÞÉün‹în£6"D¶Ë‰m,,e»Ü^Äð!@Ï)ôú¯ÖDksO<«él;9…D­L²ÖÔ…™³£d›^‚ƒTí¥U”®9°ÑˆÊw¿µ÷âÃâ}3Ñ]y—z9w PkÀZ¡€®æNýŠxgµÂ:M°!5G5¤æÕW¼)ö©•¥¹×{fæf{ŽÏÍðOÍvë=)ð²C]½en1=D˜à[Ä^‰‘êŠæ$…öæ]Õ„ZQïkŸØ°‹ü»ËAÍç‘¤“š¦e@[‰”>¬ô? ~èÁFTÁ1`M.÷º„¦YO®Mê3öJ5NbíÈT°¦kÊ¾FÆŒ)0Ü-ZKˆÉLÎ0Ûš‚vá\ÂÿÎ@é’
Y;ŽøÆT5óÉW°ðO)E’·|Ž‹Û3Ø2È
I¨<WéE_¦´íU¼U{³¼¤`-Hæk9¢H-[Pà×']…
=²@QTÇòè"‘ê¥¹FEjA)•L˜sJXËõ‘ær¼ªÖôO¡R+7\ÚUd>³AÉ¦áÁ?ÿ-–‹h\€‡{AÒ.Í`P#LTc!-6%A®:BÊ2b5ßúí¥CºsƒbV]Ö¼ŠMœÃºZ³æÄ&Š¹A£híwÿ!ûÄÒòâÒ²qß$œÖÖàÚã®=»oß>~ç…kG¸>Ÿ€Öjå÷>HäÂÞ¼b/¬œZ^Y9Q›|‹ÈÙ™3om¨å©@ëC{Ê›pÉ©ª°¬fk›ñ‚,µäúZ“•üàÎ•â©kwÞàíÔÿÍ;7ÿ[‘~I
V„gm€Y€ëÌÇ3[mî!EOò‹§B:…Ýõ[cõYÖÝšÜÉËyí3KÖX´z—‡ÝÒÆVßç=wmÐ,xû~B­×Üˆ>ù>êzAFšZ¼b-ôo¼be-d6ß®ß;n‘Úç*k7nûÂ¬‰¹±õø4ûQá]Õlii¾ÕT;‘šfã¿ßqã—£ˆIk—ýp=Ö(k„#k,ârZ½Á'„’Ð]YcÎÏžkbÖøE7X¢Yô{—5~)°ÖˆF4âªÉ€¼ä	^¨¦­=´p”!JƒTþ£2 Í³Ÿkk÷î¼—DH‚~Ø@g5d5‰àìŠ =ÚÈcTúc:˜8R)&FG­ÁÚcÀš9Až½ÿßú¹Xí"Ýˆ:—þòÙgÏjŸ<»´<kA*dacÀS9ˆÏ¼©Z–QóŒ*k’ ›rU¦¦!³Y†ZïªŸž˜ÙMðÇN 5|j°vð ´Y>²»pÐAÍIí0&–«ñ6ñ›ßüæíýO>¹ïmú/=‰­å>‚}—<Ô½kÆU™-"6[äòï[ßH¤Rää5÷ÇaZƒÕì
		3ôÅ.Pº•Í luwu±«uPUÕÑ‹>ÖÃ›ª¬ucÑAš£ç@ÖÈÑ“óGåè®jÓaS}Ú»”9ÉÆ3{Æè§^Øk±bµ8ª…íàÌ«ßPÍ}LV;½|óâŠä´S¯.öÌÍ!øW óÝÜ¥Vf€ƒ²:»'¦p©&x7ÉªÑëÔî"ÓUÁš¬õ&<²Ï\Bœ¶"#?æ4†Gd¼9vz~­ÌFZÜöáRÑPmšï!ÉÒi­"¼jÊºL[¢Š-m®ü@Xkí¢GòÚªÅ<£3é„îCÒÁÕÐeÒòRo õ=?«•—g„ß”	W²H·w´ä­ÃuÞ®ŸR
¥­„ÐÕ4\Ì•†EqDA×yF“ÞV »J%T¦pƒÌÒ›³õÊ®0+¥Ü+µ$LËCÃ¹@Êu–ò7žT•fõN¡†–—«ÒŒ­Ø7”Ï&;2¸s"òõp®é*ÍÁò¥A2Uë;
ÎrRy‹UæÌ²šå•³IåQïÚþ#¼Qµ¼fÁ7OÁ`hg«øàg†i><ÀQƒµÿ&eBº½ˆÓÃí/\¿î’‘½yõÓ@-,K3º«©†M[Ûˆä¬G6¢Ú†Ó³K3™äMKïœ8ùêiC5.XÇµóç=òñÇÍhä¡‡zdÚšh„Jaï^0¸¶wï^Ò—¹„&\>¹øÞ¹38úOŸ8øÖÒÌäÓævŽàÄ©¼V3ì zB>4Ç‘Á>2Õk­“þÜBqçöáTàá‡%A¶¶v¶]»óR5õ¾A4³NÑ7ÕONØnì9äf®æÒ
}ja¹c[Y­ËZ”¿q˜#XÜ2¦¦­µÕ"Ï~ê°Úš|¹-¾•†æÀäŽ¯þùnOqT"$ƒ0€°f»~».*­çY1ÀeqY±¾8¥E§>/r­äå}Ö´
ÕâÊšÇõ©yÚâ'¯Eüº?º\¦9;‘ýc¼šO#Xû›Û·^sF•1X«[µ¯YseMƒ-R‡C¼f-lŒZA4“Sa÷°?£®#EhdQ¯É~dèß¶e›êTu¥4`­hÄUjÿòK šGÔ;š;­Ùhí°ÅjæI|Ã…µ{MT“®F$,Ö„hZ„bvöÿÖZSÉd[+L•œ ŽÈWD¨Fæ °æ®ý}ÿ¦«=þâ_¾xâÖyR Y0ï¿éå§›Ö²Ü)+A(Iòâ0m‹ÄaD²¹c‰q¦fØ¤®!Ur}àš®iTâd2áÿ•÷¼{Ê€L}m1Ø@¤ÁbBEjËÃÔG¥=óJ»ßx|ó›¬*ºãÎQ±ï¶¯G!dÛÿØ×^º¥ûî;ÑÙzÙØª²ŒtÍàñ(çkäæÕ`5ÖÌ_$‚5¯Z›©–ªU*’àë¯L4œõ»:`5©]RØ -Ò"1v4ilÔµ5H­‡¶eÂ5¦ÇÌ±Ÿ3J‰ìîRÁ”ô5ƒ5±…c¤?¢äÆö¬—ùŠ„¨5Vs³þÐòä)nƒqë_Á¨…ÄÇ¹•ùÙ¹ãÀÚëóK]Ý[X:ÔV¬·›Ì$Æ-Ä¥XÐiWz$?uÂ.WIô4s(KxæMBË~©k„ašFs"a'TÖjéªP®ø)ëÕ&¨Ô‚ˆ§MÌ*W³ºrH-ä‚“@›bj6ð”Gô5¸K‘l®ÒZò’ÐÆ¾=§Ý’»:Ø‘ k<…À¯Ã§™'AAæ
2œ¬¥0ßñTªÜéK]DÁJ¥¸°¸–€yº¤~j€{Aª\î"#±’ä_àUSH_ÉZ4—òY5'l&øÊ"N*Az[«qZ	V£’=ÚaçÙ+Ãª==Y°àS¤964¬r8Ÿ¢GæÒæQ²œy›BÁ )Ê¡Œ¦ôä$—Ö·Œ§kiìÒí´3#„i"-@„’5•¤EžýZ0êÁPMÒ¦‘o°"Â}Ä×i	7°ß!WÔäxˆŽj&¨1ÙMc5Á»Ni*eccïä)„?þÃxåÔlSÓ™åfÔ5´5.Ñ“«¥kÿX®ýòEË…üá/ 5~×ÍÒ\ü«U\ü÷î­-làJB]{çÔÉß/ìM/L¾»õþÌÜ[y
.øšVJ­ÄPq'Q,_Û:<ÜWdOÅiÃe^*ÿRMüÔG€µ>5ÎhkùPÍñRR‚w@`ØMaðmÛõ~ë±‡ÇÆÔ_-·¨Ð,Â0›†É¡ÊÆ>C‹obÆýk¼ #Î$qZó‡ãš±˜#Œ¥¹¹€vû`Ûï¸'tVÈ¦ûsÎË·(r¨óØ*!-îX±Ž²ùöû°²Åv´Ô=½T,	’G‘²FÄ”µ-ý÷D öE…àì²V÷|Ôúî;¨Ù6†h±@R£Ä5Þ î
¤µÂp:UÔµYÛ÷z½<H"âÞ­žiº*S_ú•üË–ª1*ó™Ë¸gÎ¯Dÿ¿úhD#q«‰Í"F[Ãj¬¬9«©XVûžXH–;äÚ?¯¬}¨ŠÃšXk'ç36ë†]]bk¥4¬óÚtB¤61á&°ÚÝÇd.²ï7?q'È‡a5õX»8¿xþüüòÑg?¹8ÿwAg§±Ö"RÊlÌfÓ²èwZSÑ8¡¦ æKŸÝäî&vB³¤m=âŽ&ä¹APì†ˆÑ”Æ r•$œª8÷+ÜND0þðãé0õñë~°ÿþ}0šÇ# Þvö'=tö;gb0…¸Íãë·íãö=ÆIhSf¤kl”;9±9³ÕÊŒÚØð†ò5¢š7V…µË`íþgþþþ¹¹¹™›²Ü“Òs„Wò¾@È“F–Ö„ôoR D¦©™öØ‘,ÉU'‘g%µmêMøç¥º¶¦	QÛh"(ìyà¾eu‡‹Ëj*V«ç+â¬æîç¡]ÿ›X@âÿ¸²´4?GAÝ·—–[nî¦ýöìÒ\·©—¥PÁ›$>
1»ÒÔí	Ö&¦aÚ	O‰ˆªj…Mè”˜ÊÁŒe›ùžñXQLæág 4&a³l;ç´VÍVõZåÁÐ3²FCj($§|TòÕÒ—ZZÉZÚ³P”õKãÚâ]3CPƒoì*ã™\}îi°Æn‡É½"&Õ­©Ó_S&ïþ¤Òza™”‹k2‡Hˆ+	©Ì\$oz^Õz9ä@+"IÏKs[Ïn^gPÒ$‡SJ®$—®ªw™¥<ŠC™ÁH@” Q–¼h€+PmÕs9™8r°švHÕ
–¨‡ÆH:e2_Ë¡¬áê”Pˆ†u|ZCØ±”ƒYê²¦–éyÎúÌæËCyÞ;!V#°ŸÜõ³çÇrcú¡½`ªšÑ–<ûI‚”¤ÃZø¼ö†hM+ˆ&R3KHÔX	6/˜íc¿ÈÌ=úïmÛà„°f»ÙÕù$ªýlz"$ù?c~eæå›oZl¹ùÄ™“ÿøæéS§,e×
×$j4òð·¾ÿý‡Îž•‹ÔsmÚžêÈœ\X9¹rA&7ïý~ñ­ÉÉÚ™%F¦²‰¨HÄAçmÔ¬k«Ð„ä=êÖe82¸}p “dïÆ"ƒ#×Jhkø]hÜÏØO-ÞÎýV¼†õi§iV¶Ù
)x›lÖ-ž±B2DÈö©¼Ï€Ô=±~Gl…£Úghk2‘m?3Âµ@îéÛÚ9ò‚æÒQ¬FM3×ÕÂHk»æðEgÖÄtWó1’×âOˆG}?ÈµÖýzñFk#R³á‹B¶5½¯mp2ƒË|µ©m#X«ëýˆ¤Ð{«î8­Õ…µØ$­Å•µ:±5†ˆWÖ|	gv)÷;¯oû¿ìal\å¹ç÷ûî·Õ~§±-××Tm¨ÓÔ¤3='ƒ©ëÆ3“aj&wÀ-Ò]zgT i’¢PÝvRlZ•°l/mÝ’C‚enHT[ˆU¸Ût“fË-.ÕK>mr»B( „îþþÏãÃŸŽÓìò~˜gÎyÏ{Î™ÏŒíäüüžÿ“`¹šX*°Óšmø%°NûË*Û­XëD':ñ¡Åj€Lf–@k©>Øœÿ,]°Åj˜@ÞøåÖ`5Ùöo×T°ö…/Àj+íE\]%jW¢5ní#VµIÛDXHâ«_ý^îÚ¬áù8¬¬-ž?|áôâáç/ 4Èv°±.H±¼."KaB¥3Zá.¡X#VF„‘ëBzËIo“7‚›l!e©:ë•½ÆÔ2€Ö_Î5à3¬ÜÔEMÆ"ì…25Åÿò¡®ÏýýïäU+Þ|“×~ß<ø³û|òÁû˜çåø\,¸¢Ø„lžéÄ698äI‘ŠfèÌæu_Ú·Hg5	kÖŒÖ€µŸÌzòÉŸ 3Q8Õ£3“Âz†ÖÑÆ™Ì%4‚/&|¤«mf!ÈÊ °óÀø‚£…Âäú¡qÛ¤„¡‚uU›jXGñõÓÓ“•}ûjñ\ k—³Z:2jb5]æº$°†ªÆeð«¿XZZ:që½éôÒ¡^s©œ™±²ârŠd]‡-Eó€œ-›%kN(Ðˆ  ZrÌ00s_])W•¿Èœ‡ˆèŒ`šÆj!8ŸÐç9ðÊŸ€Õ˜a‹O”jrWo-ÕŒÄ3¯Zƒ·ËÔŒÁbžÄèp†ÌÆ9s…TH[cš“TFäü,ûzu–0ÇGÕ¬Å1‰Š¤3kŠe/
çkD%Ç‘Ø0žkWMƒµ2shVRyVn²4ÐÝš•Ú„DF9ÐHRžjy%¼2|!y)•– .R[µF‘
~æ”T¬òÐR®È×p#)óäì×Ë€&®$ü¬±]“G‡C»sÛyÓ€‹yFÓôÜm¯6Z#Í2&-²^UÞf5Ù×Y:¬2[w<kýÍäÄh#²dyÒýÑýoícÑ”$È·~iyd?kÚ.W­}Æj¶Â}dX:¦	ÍXdioI—„2•ëˆ•²ÁŠ;¶Nt&s‘zÉÑíô‰O}*z^Ö7þÓJXî.lpZ®ñïÕîÝß1[ÈÐsí RoiO«õÍ=½°ð/Kÿ²‡ZÔ…='—~Ã¿(ÿ4÷ùhj*êŠÊÁ:™H
¶RëàT4º¶/ó‰’òH;:~¦)nÛžŽk£[6LDÅñs¼nQ¦+
êåÍµéˆz‹C5æj/$r òà¸Çaî¸È"‚p–èi>2pl%¤%–J„ôXÖ\~Ñ•ºODk&ýÝpë^þ¡»'¼jq%ƒðL°6bÁ{qáO®ÿWSÖZµGµtsµ¹:ª±°®j/¢7–B5-oÛ–€Kˆ°÷yÍ6®©Xˆ¦A5kv*%©ÑVýcÿ™xÕ>ýÿ¨¬^ÒZÚ
ÆÇÀda›¸‹0ªEb/B k„œƒô§“Ïkš;³ÉR§Õ:°Ö‰Ntâ/Â®Sì}t¯Cº)6‡ 4²ë'’¬m‘$kp°vÍvAÐZÙdmY/»ŠÐ½VÉ‚œzLœ–ËÍ°¿úÕ›Õb'ÈÕ[öbµ_/R°váÂágN>?—éŽ 5wd"Ò¡¬¢D„¼UÁi:(E‚lÔØìÇEhœÂ;gSÎ¨ÓšÙ‰Óf¸²Lkq‹‹¨]õ¸Œæ¡fjýÊ~¤¨y‘Ú?“úHM¸ôÅ³°ÚƒßyP{óÍ7_þÙ“»_~ù®Ý»ïºë®—ïzòI¶»ŸUHâ¬ˆfCeK2#ñ"¹=$E&ÈÖ\f4‹Š‡!	k®X%°&\›Ú3÷Ô³°ÊQ‚Ê@ ùŠP°‰u ¶CÚÕ\Ts•HõâDÂÞ )’ÈXœò™ÑÈ4¸àE½Òý÷—jXö¿ßîþtäŸ¢ÚÜ¼H-T«™Q?+´¶tš4H6ÿcîÜœ[çÂ_h5uÙA‰ £”596!šÍ({`j‘F3Š0Æ "p©;[µèwU°¶3µª³»l“1TªÙ‘à”úXõtI´,élê+-÷)tF´?#±©Vù*–í¾·YƒÃ`4Ï
X9å]Ö hÖlÎ¹òFH[‹´¥øfkÖ •‘	Ö¸—ÞvHÌÛÝ#×äšåF¶¢_ƒÚx,ö*š2¬Qg?=ÿHMãÕÀ2'ëØGf™Š¼½E7ß`ŽÇQE­Ö`”\¤Çq/ýŽUô i}5h­5ÇK:P1á'„È³sŽ‚ÐÂGl>yh–§ä¡äok1oª+&u–ï:\Yà;¼¡VÞudgÝÚ$<úHÍC¼…V&YMÂÚ2­«%¢›F,’;²qÿ~¹“<èEÏÊ¤¦yæ ö™y»5C9öåù‡#å!*]s€svHu¯Ù¹¥›º-
ÓTZyü“ËFžK|Fvï¶ÙA\«°Þ‹õoþñ7äBî9õ›=»v}ó'Oí¡_öžøŸ5‡ÄZDLˆ¼8¶?˜©VðÀ”zEÇüåa+Ä‹s¦¶µß2Ú­UKc[†‡ÇãâÏèt«Kë"gSÞ,ÀfºÙòµ®Í=Rxv—ÓÆjf™¹Ö¦$M+ƒOÃ©tÅZˆ`©¡MÙš0Ån¡!á[€ÊprÓ÷j*óRG<t4±ÁRwÃäß]!]jQ°Iyö³´ç5‚au7È«5ƒ¼¾²Ú;[8¨Â§µ6RcÌöÁð,Ù$¥j‰dÒ÷ÚF–±P-äAòHíã5ƒ5‹¬µ£µ ¬µuï×š¶¬º­Ù`¬Þ{|f’ÓôÝN¼ûÝå•Æ‰@šKk#mÊƒ\.åäÖµNt¢	Jt]mï£‰•HÐ×lO!V»Ñ`Zû ¦¸wË–{H‡,ó’Ÿ¥aõÏ¬ÇÒ>òd><Š;¨ip©è¡;¿{öìƒ÷¡«™mÿ¯þÁ"ÂÚyXí™ÅèXwÓ4ó€Tß|>+FÖY-'½Œ`Ú¥‰Z_›ÿžºòfeÍŒ3,~vh°ÒªèeA*HâòÌGr"k¡™š¡šÇrÚ£¼PÎâ- =í>šx³ßþ6Ë·mú8¡¨!“»|ïÞ½{Yj³@fsbs-!¶€l!
g5û´¬	†xî™òÌÜ“sSMLÚ‘{z$E™?RšHGæ!žÚH:#{šBA:d]ÔŒå†(þê¨Å±ÉÍvÈa‹/mÙJarªËûî?r$U®–Î€Åj®ªÍ?•š‹xìãX7œ8=‹éÞÒÒ+³‹ó½rYç Ø;Ä¨*NeÈ)ª»z²•fÌ·´‰Â†E¢ª••'Ó`°vð‘GÊq=¥£dÎ`ÕáDRcËâÁyŸû)‚Ý*óJ£æÇkÅB¥N“mµ¯#äMA±à
·4«kp²QWÑê!{…4šIGcŸÐ®öÖrYGµˆ°6Ùr(Q:"„wIŒsi-nª¡tIò‹ñ_„vÆ—ˆ`5zXÖb¥Ëò4âŒ²ãR¾¸Æ*³,(e|èƒ!-óÓ"¿H!c¯±^·§aò"yM]ã*d7j™˜z³,O‰Üko¨˜ä.Ô…bé8Á• 5õW‹£®chhXVöÒç»X¤ŒÎêäÊ¼°.“ôÆÓðåâ‰cx·TypKvþâ¿O¸$Fàšrivsw‘=J£l~ðv`,â¬vé	`uÍÒ(]Ws_IiNnûxë¦ml¶ñ×wöX3ÿGöèÄ½¯ÚÝ;AÂü’5Ï¢ÂMÏ¾pzžb5:J¼Ê /71\³œÞ?þ4¶¡C¶ÑÚ”h­\ß³ôß[²zýÝž~`í‡Ï×ú¿¿Ð’=R”é›ãOO9%sÓt"ã nF&e@F/`m}¼Š®Ö§\ï\´}Ëx<><LRküÄ=BQÉ‚¬ì˜ž\ò¼_4â“‹R„ø<»žëéëÔÃ¸--«¥6ÞÂ$Ü‚´¶RScz¥&k=˜.{ŒÈ>ÄeÀ?DEò(ºÿëH
Ö’ÜG'3\F\kÑûLÛUøÝV’š-WU§fZ®ìåŸÎ€ X-ØA^o¤ÚT§š£} HY8àœfJûŒ.¬¥³“ÞØ>sIíÖë´$„j ›„µ?ÁµÕ¼ûÛ Z{RKgA&ÔæSÂ?bo†ŸëAöÃ ˆ)F¼å”æ&€c»iãˆ`ÍkV;°Ö‰NtâCE5< a5¿‰ÖœÎö&ÙÞ=­ijŒŸ½HV‡µ/ÁjÔ©}…VØd`–R ¬ÁgÉìêaMCûˆ;
¦a,Â– ð‘ýGo¿ùïÿñsT¬A>÷í†uH˜ûõóÿàôâ‡Ãk‹™µ}Qq!–‚F:d&ÓGŽ#Ó|ÄF-Ö€·‚µÉ6+r¤ËäËõÊš¯¿ÁZ6Çé¨K<—SÛ)ê(ª+û±Ò¬c¯ ©a,²«_~"DPÕhÜ¦æñ&¬ö3Å›//‡Èìñ÷Þ{üéÇY~ø½÷¶°}Øß¸æþ×t!9R¥l+‰Í­`2[ÙFÖbÈYÍ…µ kT­™‰+3èkÍ)42ÁÚæÉ¬|)
^—¦ÜÆ¡!g5ô)yˆP¸
âG6ÌqLVýb$
ÓÖÓ”'à…Iˆ\œ¯ì:x`×®j¥¼Ï
ÕÁX$d@¶i‚ý\h¬ög5Ö¥EŠÕÖÏÎÏÎ¼BÌÏõöI=X§±§×»¹õÖÃˆÓ“Óønb:Ò{LµRòÄPeý °&[.ld~aJ[bË_±[ë‘ÖÎTÊ#‡“Ú´Ö¶~Ê`­ZÝÊPg$’¥\«ÂzqOæöÀšT£JÃNDTÍg˜¬ÉoQEi¦®-§:E:Ë¾»‚.	¼Þ Ì}Ií	ô°Z-ÒÔŸå«‰sE#"=wÆm5b‚Öþu $÷Ž=5d‹j%X‰‡x›·SÓîG³ºÉŠ|Ö'»Öà…y»^ P¬XÏà ®	Î’h
O£2n6ø•DXPŠ+Zi#<æ¥ê%ôd§*e»Ž‘Þ»³Ì³A˜kBk(å.RåCåUôûÀ+âÒÛ<ªªµ$Rúí[Œ¿dsÿð!à¹·‹÷MÙxêÚ%’)a5``#¬ÙÚ³ˆPÏRÕ%m„ÆLIµ+àvÇm÷@jt;ÏòÝ0¨O(Ë<¾½‚´FMåÒ¢\!¦­…¦k/\x.é¹æ©üÓ~Z°VÚsòäï µï?²°‹¨Ž×épÏ­"Ó½¶:¼½omÆÌ16GÇk­
­©eËæ•VŠ®FÐ ¼lÈ•\»}Xl5º¬I‰Ó¸*5Íp(‘‡Ö‘‘Ð`™ŒÎÍ5_é†C‘YpîolŒaÏ&ad Í6aI$5ÆvÆýFkà‹mXÌCÄ»]ßqcÞÿ•?7Ân:˜‚¸~™jKl),é$ÈØ®ÈlÇuKQÜj –¶6‚w?+!ËKê%:¨öÿCj‚³b1E€5Ã4|«uUÇÇ ±ýô¿lÛHî#ñÑË`M7E{XK'B¦!í3X½ÑÛ6K‚ÜÒ†“	7q?HÅFÛ“¼·Am
æ²ŽÎÉbdSÖ:Ñ‰Nü%‹ha¶woÐÒ|õäÇÏrD:«‰ÕìI€Ä­ßU5ÁZâiºšW«9¼Xc¹:Xc]ÖÐÒù)m 6ÿý{|ûñé@ªB¢ºêÁ¶ÿ×§µçÕcíäçØ·vm¾1Õ¨FÀV·æsqÄF—–YQZŽ3òéb*ëBpXcËß±»sƒCkt^‡$ºÑV¸AÒWÌ¥}^ÂÚÁbà¨ZÞ#~lEkîÒÏËÝüÕÍ¿OXMAÆ&ñÞ{ïÙ –=œ]xîÂ…¤p¾÷Þˆ‡/<ýôÃô‹¶=M&àSIbS8±…:6G6¢‚=C5gµ kgDkgf×q—Ùà“nd°æ¥fkCòé]oH&Ó~©l^µ¶Lj:S<úÉp°‘aårC¼^kÇBýþû*¥´$q…ÈÄ­Ÿªy_5&K'ŽÏÏÌ|*·þÐâ+`ãÒâìì!^%…k šÞ…^1¨	ºaþ8G²¦ìQ×8¨¡Õ:P Eò ±ÍKLsF#Z4Z#Øj`Tÿ­¾›.VÓý™15eM–‘3õqÞZÅ?’Â­c]&‚ {Éô#2æþ'½¯óy+gë5îI,FzXç¢0SÀOj a°&˜»ñ4ï¦âe§Ö<sð´IYšáZ±«›’Œ+5)W’Š=°g½¬ÅøåóL™ÖèH‰£;ANÀWµLi¡LeµŽ‚µjGáƒ¾“9«±Ã+„/:Uªb¬pOO‡r7®Vã¥F®Œ…d‰ ‰Z„h¦–9Ñ—âqÐÓß}Ý[«„.*ß•ˆ•¹Ì[¯×K|òR×$Œ½ƒ¡¬)ÛÑ0ÍnLá5›c©,HÉi;¨XS_ìKLßÍ€5h-Yß†ÿÔàž‘Û¤¤m¼}ÍaÍx‡ù¹û[“a39¦“šONÂ«´­˜{+ÈÅÓŸÿãq¡š‰k×‚ÏH×DkCt\CL<¸çùúa‹tjÔ5´5|FØ«ÒXmxxËÿ®5È=x ¿]?TÀ51:šïêÕ:°¶eír”Â6b;ˆ·vô¹±èíØõ¨Êð,‡€À‹Ó’nØº)$­‰Ô ¤8ª3óX!ª¥–0¤h-@Ÿo|š&5`éÝ°Æ@jÁ5ö¹ík3QÔwÍÚí÷¤aMpÆ=–»­yklÉßj¨^k—¼ ÿ¬¶&Lkëåï‡V7ï_IkéžØ7@j	¨L»zdKIpDŠÝÏÀ5íX³1Ù\ÞUa%²)ùñ†.CG5¿AjWôƒ´–ÖÖ©iÔ´°¤÷ÑÑøp™2÷Ç¸QŽcœw‚¿ÕQÙ
Ù8¤q´¦@xëÀZ':Ñ‰SV9ª±8œ%¼¦	û*PÓòYœEË€üò×¾¬AgÐÍÕp1T#¬¶[ô; ™ÆæÓ«Žk®ùCiÓ| 	t*t5FÜïÝ¶]V{Yhñ¾ šµgŸFGÝ>Á5ÞöÑ˜ºšË<„´FEéJdÌ˜Í£çBJT[CYU3¤yQâ•9åuç3Yís`Ð›_E¤šÅüEíþZÜDYk4ûe	)X{¤µð}#5¡š7y­ûoÞï¤Fuá¤Æbœ	ÒˆÎ>Ìë&ØáBŽ£üýÝ# [‚ll+ˆ°>ÚÂ4ÂP-k„XmF•GJh«Ä¹^5&C"3¡,‹6”áÈÕ'è¥vØÏ˜âÎ¿_M°¿A"¤9>…½= “<U>eÒ°†aËtk×ý;ÑÓvaøóB5r U-¸õ¿ª•ËÜ¥¥ùÙìš›­›es¡°4¿þÐ¡œZhíÕŒàË³Ww/!ëÌ(·ný´¹í 6o
/}¼ +®©%¬¬Ýâ&Ž›0V^#¬>,4½/[ˆj­jˆWU¬[†Ùä×dFu²D¼"€Æ]ä4«&cLm)³ªT#sÓËØ,\L§h	ÝXx±p¹äD‚5„5îJ&"¢9Z—U/JóB†æ`Åˆ (•£¢£_D^cŒ	²\•‹¨åË%:S×ôõ‹å;RI4²PØx«™ÏÃY­V¹Ku¤C3”¬¸ÇMd,ÉŸH¨ól”xr%y\¬„O¥Y¢„UÇpþG>SŒÓymMY÷nžÛ’fd°VÍ³-IÒËq”ÄH=±æš"€X•‚9ÞÄ¦„ùñèÞ'.áò6¤fiüˆ¹ª¦•)[a.b^‘k€MßöNmÎk
¸ïž‘ï©ƒ´ Uábk
ÛœûåÂ´'CJþÌªÅG‘‰ö³(˜À9KsÙ¨û”Ò Y‚ºZdqÍmF µ©’Ù·~÷»ßÑ›¿ñ	hÛ?^æ‡s¢›vàTŸÕš8‘¨_MÊß•6Ilí[;Vµ‡Ôaº1…Pm¸ÚlŽ®ÛÁ»jzÒ[HÍ„µë¹FÆöÉ&I„Ä¶_÷ ìëºÀX+‹¥ÓmLß,Â3°¦ÜE˜µÑÖ<RUsl3’€fŒÇžÀ ŠàÄ—oK@S„f¡þqÊ|û8¼qÒ6‰%d
ÔÒy¾b!ÌB¬æÜï«?¿"áP³fÞ)Ô|Ó×®^M¬¥AŽp(Óàû6gMÁ+‹ïxˆñF>öQ(- Zàµ«ñƒtOwZs;ÈTdJYKnÃ
HßóÚD9(ô›|L¶£Q™Ã-×8o•›#œûøoûÿ®èD'>4YBSÎ#¡!¨jl|W°f–"ê«F|N“®æ]°·laµR4Gµ@kx>:¡1å´âêYíÊf=&‹‘Š†£ûé°¶Übâ¯'w;«Á6S®FÑÚââ|Ã´Z‰ËEþ–O‘¶
òþ&¢]C”RôZ5x­+Ò$Z“éÖäÕ¯&X‚8XnãîlÉÔã%oq£EO³jË\ÛÌP„¤9Áã·@5Âúi§v'…jÿì öæ{+Ií]Ý¿ûî3dmª-ÉL¾Á6g7¦@6®ë<V"±")dó %¡}g5ÁZÈƒüÉÝÙ¸Ðàýõô¬C”¬á¼K;ÀcÊoÜ’y€9ô4Xm¿jÂ&5°"¢áMÂ£¹w–Ê`"[¥Q(Óž{Ÿ·¿ÞÑ®X­mäSOþä'¦ª%¬fªš95¼¨* ãsƒø‰,ÎÍòUz©U»{Ö T¯BÛz”©BA´P8õ®l %Ù`äâòAÂÚ«-ûö3*˜Ÿ%]Ôœ´pH3–[ÎŒ|ß¯%«‹Öh´6¬sÀš&Õ<`T£tÈ¬îsr£#ù€ÌA;œÐ(f^ý~D¡	GNk9ï{MhpÃÈ¢ú©ÙcpÑyÄ>L¦OØ%¹8+æóM¾t¹Õ÷üÙ*5ö)ÕW¥²Áµü„œ*É÷-50*Ä…„’»ekù
XØtÐâÙâ:ý´ËÐXá«BK4 «ˆt—ÉH°Vÿ6²;õ~ùFa‰zu¢Ä0øW}\~¤“3jÕ²8²™+BijúFV¥R„¥6*Eò†•±yžn=²ðÍËo5TÓgþÉT­áÁjioíÓès©+¶:f?Aê# &£f¿}F»dþÿ¤B¶sÏm—.)e„A«íJhíY™?6‰BDz*¼6	¯ñ«Â7¬0dÎ©¹“ÂÌÌ+ÿkrn.Ê:±´˜¤BÖÀµ@kÁfÄ}FÁr6§N}s¡Ê?7åF“™R«^n8H Ø¸÷Çú·«(ë$ªÚúPÓòyj1ÇÇù#Á°ùiK½X];1|nYt»òÛð…Ôû„3O(4íaÓeEkZå¥¸Q­ÍÜZÄ‡¿ò±‚É´„m˜iMa[_.ß^¹'¶åÊÝ ¬¹°†k%Þ'fË¿í–ˆ£ÖÎs‡!šRa·È»²îkp‰øÆ}B¤–´°hmuc‘°€íÊ~!±r5eÍ‹¬¶%„f7_|?´ª˜F?~'3ÍÂCuÄÂ6:dwaXkÑ4pÜ%µÓœÕ´¸¸æ æ¬æUk62T#†Fk¡)6qe-ìádèíè.Ãô&ã3~±	™B2AyÓ¯Â&¡¼ÆOMÖ:Ñ‰N|X&ÿÉXÓ¸¼Ã¢î"ÀšXÜÇÍX„øº… ïU|b»âÚ/Ü»kÖûú}9©æ×j½úX•ÕÖæ§š|,¦ÉD5hí·£¬Áj‚µÝ»åÚŸÀÚ‹°î'r¾ØÝW£Ž%€+WÕÎ¨,ßy­‹©r#c¥GâvÀBØ˜CXÊPÛ–Q–Z©H‚ÛfQ›YÄ(ý»êyfx5èÏÞßïï÷üG•ª¹¬¦ø}b*’hjâ´ j,IˆÑXß}†k9æÄyÈóPŽË:âB"´^³=‹@lÆléÐÁÏZSœ™ÍE3³†¨]5´æmÓ`4tÙàËÝ‘öjÒØàœU<RGq‡ôîjÐÛÑÍC` ÄéSoÖÌF&wí›ª¢õ×«¡v„ÈR:‚T±ÚSóO=|E¼O•`£þÅÓ‹‹¯ÌÎ-ž8¾4¯LÍÞC?ç•¬Ð¬Õ Ì8(²äµ¯Étkë{³¼¡žb¥˜]_ˆ P<¥	•›k%¥“MíÜ9<\eË‘e.Kðk!+Z«
éü€&ÀšÛb«ÏÄtFkRÖÀ5¬ÝñëÈÆy+QcÖä\ó½öñÛÌÔ÷ZõhÎgZ=|æüfäÆ XcM˜KhTªÙ] ¶ŒŽaê\‰Ö¸?2´]yã1Q\ÃLU"48`FÓD©³h]±º äÙÍxWÇ¦úÈ­ÄTèíÊŒ#íÔ@(ùMv!ø‚Ä²Ñ+Î—•Å¨ß&ö‰Ñ1Ù‰ÄÂÇlTª4*EÝ‹†nø±ŽWëµ8Vl@DHZ½E…B±Ì¯mëáÇŽA$öA3Tá¹®üð†­ðÚX¾´uxbÃée2ƒta-£VuÊ¬í¤•‘7ÉìN#V®öì2¬‰ÛÎÁlæÉêšš¬ü/í[ˆù‡Bö9CÙ5Çrëè»®ô_+[ÃFV–:b5ÎÃpó/.²`ÛÌI|!Ö¹ø+­í­=ôw7­åDkþð`]Æ.ßÜ³Pïç×¥Þ¬ÔûkÈŠÍ¤r¬UŠJt$…@Í$c¼7ÇF»G·mï«ÕÆÇnùÒXuY­>ü%4ÓíùÌ-Èj„Ãù›¬!-@1t-Û(BšafaÓ@lËaF#‰ÆD³T6d²¤0	OkÄ*-±ÝQ£ilÈ´^6Z;·]:õZ•OçóçŒÇ6ºýŸ+k\òKX3‚tÏZÑkyue`hËìÖ&V6}R¹'ZZVó=m¯®6Í,ø‡¬¼—asuÒöEc
FØ¸ß¦O4‰ ­µWÖ®Â½ŸXUZcI×¬‰ÂÒ¥jDÊ Ò‡MÈeˆ«ðz’év¨Èæ‚5ŽÉBg“[Èt¤kèD'>YÍPlEš­­€5M%ªY¡‹PÍI±ÝÕDQ×
Ô>Á”i—Åi-©Yc¼jR#ÛEŸ@m0ûØÑéO&=Ö6ßþûºóÎï~÷Az“yÁ¬váiÒ _xî
À œE8,nbÝ_ÉÊK¤¯#ÿÉ°_×(^Ë[d.“„rÅ
¤òE˜ëeÌ?o\Çùœ*¹0ñ7as‘:†ý]ùzÿ¥$ ZuAÎ"-wù±³š“šÊÔç´ j©xçÝ—^z÷Ý7^zé­/½vüøkxI¼&nƒØ?@g3ji‘AaÄfÌµ%Øf£³Z€µ3g~~æÌÝ³g€µu†Wtc†mÆ@ Ú]¯[×““b ò/f,òZÄùŽ‰›Œ ¯C0Ñ¤ÁÖ½9±]×*»kG¶r¡y¬µï‚ý¹$Ò 	G5/V#Õ^e\œ›;uè•CóK”± Öx½½§çga5)ªé¬›ÀºÁÞžë¸ÐCRäüRp™)Ò›Vk“ªVÃ©¢iÊšÇÁa—-´¦*Ëš†a—ÉJÆou³ÁFa‰îæ°\ü5µÓk<%ƒmÅk¼Zq]Ì¹+?¦”E§¯””Ø‚¸ÛÈe`-ç‚[ ¶ewhy§¢DA¨*/Í.é.Î%kŽ|”›ñˆÖ¸Â˜ú[K|Ã…$‚Õð¦˜Èp¨.*Bwj¸«	Æ€/r*«4[#ä0HÕò›9ŽW‘åø:¥>›Fkã${šåâz[&ú¾²*X2U>×,ò|ÑD†MmZ«Q9'¼Sßíjá‘ÌJ6ÊÓ,â ª¯\=r<CJ6Éìíä–Kc£1^.p?k`šVWÖ|Øf´f}Ök
+Ssy‰¦ ™?z˜³È¹'v¶¦2Þ¿1C²¾´nŒÐZ!789Tè‚Õô‡ ÙC*tréÕEN¦7Ýtò2q-øŒ\^¸v–FŠFkxøÆdÓO¨n­!?ªõ×øûR©•¹C…?"m›ÈˆÏ¶¯ív%ôÑ-kÉbàã©Ómu[¶PÁ–Ù V{VÚ r¡Þ‘Å­ËøâÞý²é÷fÒ>:ÁªPÿ*§µöôµ0|<UP^ÉbqeiMCR"EnH;ò™ˆLŠQ´5ÚÍmS}Úõ€«ÁÚF[3 H.ùÙit©‚µ+¶XK›@dóÍU¶ÄŒá¡äÇŸ¦néÌÇ€kWÅjá¸ßõ1À+G4óâ´ì„ÈŸÞqÝJNy¬mŠÖÒ´vå¢5–Õ”5'µ œ…[šÖÂ=¼ÍŽ*6²Ÿšz®I;¿•;‰Ô°ñç˜€­“Ù‰NtâÃ”Õ×¸Af‚5cµãDkæÔOW5Å×UÍãoå*TIL3XKP¶"´ûÁe5X-zl²ÐÕ—Ÿžœ<:90´™,ÈÍ·ïX£ùØ»ÕceV›_¬¡©Í_xæüéPë¡²
Õ¦TšfÁu .E#†HÇFû 5Ñ˜"R;5]|¹„Æ‰"¦ê^Lã`²›à·¸É•{9†2êõÄÖÿ}âºúJTûÖAK€¤œ¡ÚŽjÄËw}ûåU@íßà´wÞyçB£Ç¯t5÷šf	·=s‚P]›Q›ñÚs\cK,-‰€jP¬Ý}÷ÆÙpFV÷8‚à¼9¹‹€\ "™2³hˆ´¯Þ®,„vT¶þƒî‰’ òr`²À\>'­:”¶µ45Ö]©ÈËìúƒ¯¨F$¨&Mm—Ùõ¯;½47«xñÄ¡™õ–Ÿ9sz®0Ð«IWSç7uPN§p›–Ý½ÑTa
Ã|Œü¹ >08¨ô1ÉiDkQCWƒÆÈÛ¹³\Õ.¡åLÁ˜P™HÍ·bSªÛñaá7Æ0õoÖ µ	Ðg"_üÝ¸‡våâ9¥	ºœÍB$û‚5Í­¬ÌÉì¿¡â4àM¨&+GV¡†÷[7HsZŒ$š•ÌÞ1ÅòÄÞrš§õådño_Šû_~s+€Ëºº&¶NLŒUÇÆjjP¦$­Äã+M`MÝj÷ÖÉÙãŒŽJ Ò+vm»Ëv2BÆ²:ÊÑ;Ÿ‰êX^
œuwS‹èb„™º ·a¥Ý¹oë.+S£¡<²U¶•ñR¥Ì×Çøu|ë¤5WÕˆ}kß¿jêekê¿&mÍ@Dc`ÁòÜ³7V‡4ÑÃ9Ë¼Ãý/í8Ršžä×Á„O°JuÏu““G7çrƒRŸt‹Ýœœ$˜äÄÜÜâ©h~ñß§¹“§N-9®‘×{üx›Âµ³gú;£µ‚šp”›Ê÷DP+õ+ª€lm	-C‚jõ±Ñ(òïUiËX¾&ÿ-ù	þ­ŒJ%ÚcgŠÅîîš7Èo6PÜ†·ÜrMßØRûž5ZóÕmt0vÏV·`@©J)kÉŽÅõîÙrWD{eÍ'¡JMç3ý9¯Ð[7…ÍBÊœ´µm”]â.’Ï“âç¿ŒŽ²1I~[¶ÿƒ7Rp8Øö;«µó‚tJk¯­¥JÕÂ¤½ñHˆä9YÚ¸Anº#¨-oÃ<(k)RÓ4MlaøM3ÄJKÂ¦:î˜ypÀ+Ôl¼çÖ¿ÉÒ¡#Žk!\Yó!%­µé´F¤¤5ášßB´í‰ÍâÁ,u““Œ”´‘þh‡5÷ëçßVbùOªU3¹™¶¬u¢øâßÃjŽbªZûÌ'µGYEj{?“$DÚy9Š¨³Fý,)T«Q£vMðê€Ö&>8¬õåä¿¾fm<9Ô;ôØÑÉ!¬ð¡5U¬=d—ø»ÕœL¬¦Ê®ó‹ÏkÏÍŸf1#4+–ãÈ
ÓFG­íuQ¦xÖˆkH#,›á”Bée9Ô‰.émvÝ(]ÆZ\M2xgµ…r¹sÝ8u´ÌQ¤®Š5‡µOOó
=ÒIÍ"A5X-pxöŽ­B5‹‹L´«ÂæÄù%¼¿_û•7Ô}æ¼(ÆxÍ+ÙÀµ l»CN¤;´Nœ‘´vóékÈiX&N¢‘bºŸ0X#'RÕ_ð™ÉfCë÷ÿ~?–nã_ê-à.¢)ìFç5¤€!l"Ü€7.SÅEÓC½RÏtÕœ²€¼¢$ïf…[ÿûÕj¯þb~îäüúu§_œ/œ<~|	_‘!4A(­ç¦»×m–W¥fô,PáÚ@O.K·éžXF¼A¬ €B-5ìÂ¸¿	¬õ…–
Ìh„Mâ»u`M'¼tM3³zL“Ý¤pMã‘a~L‚ŠÔÄØ†­µ‰*Aºc^h–ø†òç ü•£‰àB8ÈLD±k9á½€-Ò“"ÅæHÂ1Ó^†Aœ: —•Eå:r9O`³G(µüÚL?CNƒ¦¨dËû+àå.PeÖªpBîùcàZ-'ã8_j‘ÔYV;lô6âE5UÈ•áY•¸0Sg×à‹aoZÐ2V¨"’éèÝè³,ä“£’÷ÝÆ†7ŒóòÇ3ëŒ ¬)ç2ŽÊ€ÚNÖ˜¾uõ2ï±VßõË$TcÃ…R6â­ßÊÒÚaÛˆ¸½ÑM[GÄh¾‘ßÈ³×ž½ôÄÞ5%HÖxa0uVÇ€Ê†ð‚Ö­¬ˆ›Ìv£¯É`Ç”ú™S§Nþbžw3;óü)¯\ûÅ‰WØŒðo´öäYµ½G	7ZÃf¤lÕyãZ¿b¡…2
”òDt´z[€®:šŸ 2­ÚªQ±Síw÷e¬^—ÔÝ²J3¾'Û¯Ù‚PH|OY4"€AáP	i\¥âbRXÉššz%^>p³¶Ø0ÕuD0	‘*[KmÒñqh-Õ;(kí² ƒ²âKe¼”ó}ü2J÷ý×ô„‹jÕj>ó=î¬ÐA€.8UhMóÚûee°ÚÄ¦”°ÀÍoŠ´Ä–*Y¬F‡Ã©••ja®‰oÃf5uX±ç»b3_mî€–„kjÐ‚˜f›Ÿn»þcÔÚKki?H‘Ú-FÒ#müEØxRko
öí¼V÷”Ù˜¸B²–Á)Dkîàok·	×ØíÀZ':Ñ‰CVû®›	ÎaíÆO~R»ŸáÆ1…›õƒjrQWµ¯°Rªk_ø„wÀ¾ÖÊÔ®ÜrmS‘éíb=“Ô«Mn–äQàáÎ;¥=ðµ•¶$H¼ Ÿ>}R¢•Ms3}’Ìè[TJWwô­U£5&Ýâ-ÑÝtá£ˆÀ:Í¸­€§žþ„®¿˜sq6](Ä¥îGMŒï¨­é¯ãÔß¢r«åÅjß’äÐºÍ¤JÕ«-“"IÖ#L&óñâ«/^dúº²¥.¾ñ«7ÞyãÄÒk—Mälm^îrâ¼W²+}GL`;{¶=°¹²FÜ«™½e-ªL	Öd¿?„,FõW®7[T›ko°¶^RŸ÷úœº™ql½Im˜÷[p@,£©î­0Häd¥Þ`ÕŸ.VkïÉëwÈ„ÕNœ€Ó'ægznš™;1?pòøÉSs³âB°’` kSI™¼ sÅÂzbPð–#ë®’eG¬!ÂEõ:$ÕòpGbë0S£´:CK[w€daËF°¦­í›‹H¢¸ùIb›`9Áïß:N~a>_ƒÕÆLë‚†¤\Áoj/æ¬ÆÑ]éðb5ªÙR§$ÃÅy{¨a‹%rD’*¢³H?êè{hy¦¶É@ûG:ŸI+™‹cl4è¶“<žª¬Â6€¥Ì_w—A^ÝÜGPÕÆÅg¹b«qXH×à'å1+ñKgÁšG€ì-–ÀCÔ5½ò	ž³^7MÓöM/^g³(XÃø$ß=ZƒQ‘ô1ï¬7Ëõ˜PñÐäEòœžbªÌ'ÎºŠ»ª±HXcáöKzaÿÖ½ûY]^½Y$ÎýÆl.²ûÞ¹'îßUGš—E,&…¹ÃñT¶"”4<º™ù9å&süEhRr³ö3¹™ÓK'å
3ÙÌ±Ï/Kk/â“sÜS!Whkßyðlb
	y7ÔnNQï¯
ÖXò×'fìW·÷ñô½ÕíÝ£(k¥ƒ-y÷—J•¨/¬Åå°†q‹LpdÁž¨jhkx÷µmãõ²ñ+¿ã6»vAhsË…6â6‘†ÂÒPJV…©vkí­FXÂt¤†tOlæWTÖû~&F˜·>Ãñ£¨jt/X{íh>ÿìÈHèŒ­©2íw`cæ´ÊØV‡®ìÛŸî‚Ý¾öÕ&BËÝÔˆTdºF-]Á–†´d›öì5k‚1›$€ÌF|+>]¯yØÈuÿôG>ò‘ÕX-øA¦¤5SÖ®RZs¹Ô#%¬\Ó’¶ƒ¨æ“pÞ%c{¨	ÈÒÑˆeGTE¼96–þ#*iëÔ¬u¢ødµdÐY’yãÞ½4¼öÐ>a²Æ"7~ö3_ûú—¿ªÝ‹YÿrlØëoïýÒµÔ¨‰ÔÀ´kÌò}.kn˜Õ²¿œV±¬&QMvønÛÿÝ³ÖH1t+H<û¸ø‚@æ…ç»•÷˜E$kÄq%¯ì¡ˆ#ŒE¶}d?
Î`5ÛF¬]ºuZ[ö³ºúÖd 6¿9Ážýu5ÂÎ¡ËãÏÖz„ˆãƒ°¢š‹Ð¬{?Ö'4ëöÞ×jt©Æõñ¼³‰ÿf£Øìõ×.þŠ¹‹¯_|ý‹/×ìu`íõ_½vñ¢—¹°
am2ôJ¶ l×‚µ¿"¥¬gn¿ý‹ss6{æÌ@T†Ö(¸É"¨ß5Eg`ªê×ŒÅP¤À6àbíˆ˜N²Ñ	?¿Þô†I`ŽÔC¬à”†$¥jÕ®Ü;d@Š¶ÝWD°æ¶Kós¸ò÷Ì-..ŸŸ]\:ÕsSOA,æ°¦FØ„.£×¨í˜ÄÞ‰^b¬š¬ì <F¦¶ŠÔ²áÃA¡y´¦š‰g¿7V# 1?–t¼öpÙpóCZ¬Š#l}8-?¶=IÅUÄªÑØ°°gØD¹ÿ—½ó«>÷ü¾Þ½/÷JOûR¼‘¹´‡ÈLIgö¦n a.žÓhS3ÑTi(Ûm³u]D/pÙ„ë”B ½¤¼ÕZ_R"/ù#]±
s}ƒ¸-#Wª‹_­³]	dÝU+íçû<>üâÃ8IµZ^ù™s~çwÎœùkÎÇßçù>%g5ým@àÑ-Ñ°RáGó)aM ÅÌøŠ, E¯k,!Õò¬7-æ¥i‚ñg O.Wk $—£6!X+g=ß2&¿NVÿh`‰q¦Ì!ê˜Ý”¥\Peš$5ÎœªÈï_"g—¬é3k;6Å ÖJ™ÄÇØ¤¦/ óL­*šß¦(¶ ÕD‹eeo‹½ÔT @î&ßfýäÑ7ªõ8/X¯â>B©]EA£oH¦¬‘KYæ;!J;ø¿sc¢e@ªËñcä4,Eþð«?¼ôPÍLüå	™„³@÷×7ŽñÕò"gV°Y1'S±*Òö{»hvk™?ñ	¸gjÛJç™Ù3§ç—Ng8¾`íÖ^=Ë_q-e
hXS3„&‘Hk?@fSmÀo4%ÉöäŽ´+˜Šl1X“„©ÄÇ°V¦EdLƒ½œl9#z"DÑ	â5JÖ”ÙùÈ¦JžëMx`Ž  Ô ƒnn‰Ž;ºjvlñëkI¦uÖÖ1[WNSRó,HXºæA†›B—ñl¬=}Ë÷Åýü‚ø#¢Äµ8Ž›÷}ki
m˜›7$;€›ëj Ÿ#SZXÉŒ;‹¤kÕÖÑÛÆ¸Æâ¶{©ÒŒHmÝ¡t„ÄH„Ð’M’öèÁ~d¬>*¡iæÛÄQ?‘ëþâ3š`\»\$k0„´EUkWÑ;(kZNce	¤ÖÝ2—8Œðõ[,ln°fN"j½§ôÇÖ˜¸i¿zª³Ã=›°¶›±Ÿ´a¿é
ßü0€ÚÚê¬†¤»Š|ýë8õ{[µÏ!¨‰©€/qšëj©DHÉlÿ„µ–Z¬‘ú¸?÷Œ¡Ú~*ÖÖî•o¿:™$±WNtªsÆ/çæ·€g²—yµ üŠ¶J9‹¤dleÏ"cÁÉ\Þpwfx g)k»‘AœìeÌ`é”µZíªÔÚqO|èP­j¾"®õÀ6È§=|ïã†î×$hÒAÍ1A?[jj6¹xQdÂüâÙW}ÂÂýÀš‹ÏTIÛ…÷ñYt‘p^K×°yB¤‡ƒšn,(kwClCµ»ÿ¹E¨–EYŠC²vâ²}­¶T3©hjO/yÆi¬n.ÂD2#Æ\ŽYu[»½Í2mT5âÊ|/V3Hõ§"²3SÜ¾}p¦Ãuî¹…¹Îùiü9Rìëëåìqÿö"áTšVÎ ¬ÁizóÅ²"WdŠ.5…Šs|ª¨4À¦;‹TêÖEöÂîàOHIej>ñ-f,fûÖ´jô=O„§íÖ´.yªT´PÏÕ$ÙŠ!²½ÀšO‘Å£i7™D8µùƒ‚,'O5o³,G$=™ðH%57"£Aw+ñž×qU¬¦NiŒUí*-)Í>ãŸE¬ê2á&ü¥Û„fÐ•+Ëç£bšð-Ž!BÓùÚU	oU=ËH½)óÉx¦“@<sÞ€ÏËyà5¦C@[ XæýÆ*þJdFB™QY™°ÚI7o4ë‡Ê¹68líØè¨¨œÓñ‘½¹[•C“žé£”5!­Ïš™‚G˜Ì´5¯ZCm³Í·žlÖœ£×`ÍëV{”-]ÍSÙäòÞ®Pk>âœÁ_""Íå>BeÛôÜ4 —‰pyƒ^ÙüK×þ1¡5ý›5‹ „Ö€5Ê*k´ƒ×°3j2£	*&­jê­7VÍ~…¿>ŒQš6Ö&°?‚Ñ¶lÔ	áôV(³Zã_Á·ŸP¼DÜ·—ŽØ\¡²ìñb5/â¹Mtr3žøA|Ð@*¡_M_·kÊƒìÒûR÷Ç°é
uÎh×|‚y:Ò6*U»Á•5½Çß^SŠk­¸¤ÿ!mAdÃºæ(ªaè‰Í‡0TKR#í{Gì¤f¯KÉÚ•ýEÂÜ—0Ø’>=íÜï7Èñ®Hm=¨ùÍgañÃãÒ‚ÚÚóÁhB×ëìÛD6=-@~ãž[oþËO‡è*¬uo¶¶V°Æze?ÈtdÐÖÒ5kZÒka'špX®8¬ ›hpÓ%,%PÃ¶Ÿ°¦kR×¼Å æý{6am36c3>ÙÈß&é¿Ñâ«jÕÝDhì°2‘¤†©ˆ5ÀþŠ³š¨‹žj# Õ¾áa±šÑZè¬¦0vKÁÚÕwX»Ll9r¤•ïã‚'cÂÚþín÷‚5² ô¡ÿòÝïþìgî¹BÌ9byŠ3b1.PävW«A`P™užâ˜ŒÀÔ|äTnüE<Ž4Ó¥f+ÎpŠ'd¶|M°†B×¢­°¦h6ªßÿA³‰c?aµjÅ+w?ý‹{¿ô0<RššPíœÁšsšG 6¤4× 6¡`íâ"3vÑÙÞµ ÒÄ.¬œ~ÁÌGÎ*×ÒÀf¸–æ5M8pì¯þê@ùÀ[Xü‘ÿØG…7©kºÍñ›j&‚È~ŽY$Ö²õb¢`ù‘0œÁÖÌ#KòÈ¶ƒ““â²ƒ‡+¬Û&ÕÖ¡Z¥{¤dµÕ,ø¬ç–^e˜›?3;{ÈÂÙwÏžŸž[¸ ÜÎÃlrË€5ÙŒápR®åUm§–à4ææM‰AðLQß8Lô¢‚K?Ã-Ó~ij/07XsÕÌ‰£DSóMBcv Ô«Ø|’ÄðnÎÅ’ì/Ô‡s=ÚšKXÖÉÐ‹~?“ìÆ€eÒÒ‘]ƒµjFçD^ñÆ6PQfFˆlœ‚€¥Çã¶¡¦!¨iDjPk‘’3%ŽåuÐÌ¤â«SQ¢$%­Êc„NjQê•idS6*Í¶jÝÔZM†'zÚR¥t
­.&‡’0»G>-ïÏ3bJ²~Œ*j×¦¤Ã­ãÊ¿, kÙy­Z‡ÖTªÖ¬ÔOŽŽ”Æš¯ ‹í:é¦ÂÛcRæâˆO|H_™˜œDYsR³4H³îÿ•œúQÎPÏÐšÄ6Ž*™íàáÑB},/à‚Õ²T@Jdçƒ	Õ 0¥ÃjÖ“œ­ºU{æ'Kõ_®(ŠS6ƒ9¼gy¦…¤&ÿõ×‚¶¶žÖŽ£—5-¶ÁjDµ	£¬UZ-à4£ÑZZ»³Îw ù²j	å¨ÔŸ‘€[ÎäO÷ä”xÚúƒU¬Y[lï1%ß”½N-YvuË˜spÜðZ£7vh‘–ŒéXGkº¥Â»´±pcÄµ°tGµ
)UÁ7¼å=£…-Q‹Œßþ-ý¥-DDâÃo×ÈLŸNÍãLYó
< Uàæ=ÖX¬C5‘6ƒÜØ¹?èf,É^ÂÔné) ƒƒZú¶q"dP×Ö¹†$[Í’{ÌB›µ g6úÌÇp(€¼·÷ÖÏ~*€ÚÆâšcCh¶–Ü‚´&XÛˆÖRnÔºHkÝ¼ ‰°#PÄÙºaÿm¶%ûÑ’{­§š{ø{ßAN¤vÓT7ÖMem36c3>Ñø·á%"HKPm-åÑ6RÃ«_¤öÕ¯|È¯©ª!©}sçaÁÚsÏïÛwç>×Õ¡·šæœø§ÂšDºË±Z&*ô÷äq„ŸzFÂÚí¶øÎ¯m°öÖ[}ëŸOýÝÏLY{ûí§žê,,t–ŸzñÄìüüüt.ÓŸ™Ð¬=°´3®`´ÊÂ/9ù™$lVÆ|XãÂ«T’g¿Žå‹ºhBÉp5µ½@ìWàµm¸ÀÇò39’;2tàö/{ø÷¾õø£.«IU“ý#)‹¯TC/á°¶¸ü>‡ß¸x™Ó..c‹ºpni•,HT6T·‹‚5æqn	Ø×‚À¶rIFd7\ãf¸Æå °ör_«XÛÖÎ¥BÙª4H.Ba7zLƒdóöj9(ú¤¹‰ÑH3q¡OuN<B’C,ƒÍ¶£M6'S¨v¥HÂE(Xëœ='È¥¾ì|ïÌ,ÍÕ¦‡fÏ/LwLÏ@hƒ¨eYÌlN‡ ·^`>9>[Ù÷³E]+Þ>Ñ½lj°ˆm†èÐLÓ`­®Ë{`€Ì$­‰Ý^¨ÆŒ /­LÖüˆÆ k~­¿¬qx÷°ìûqïg¨£²‘r›—w,Æ„%ñÆø)”¢uI„ìî:7b':	oª_Ë¨Ãµ€%rŒR9&1c#cÏ’/óa’^3†Õ -¬æO(¦ã^P*Hþ+ˆºdà‘- FgÀjdZbþ8Î3V1‰D¼á™H¦¥ThhÂêÛ*Âªã$šñí“—‹äX6J{Bý0J WSIh™!JdmrÊš¨¶Fe˜˜ Ùü¬EùêèIöõBˆn£ê]ÉK³ÓI;%Àñƒœ4×~nV¯ö+híà·ÿ@skwè'’@_{ó )‘‡'Iãû¤!•¡RÉ6c}ÁµÁ¢_ËnD~#YûÉI–Ð\6ÊÙ¿!‰jœ¹?§ER©Í‹6;ÿ*Ekk°¦ÄæP¸–jmukµª°Â3!›Õ¦jÖ*òr)k%\ Q"£Ò0ÇÆõ£DXSÒw‰ZÍ©VÄwš)ÔÄâñïa5sƒT#ì=‚5³ÁÛEþ—€†ð‹Zsèw\ÕH4íÀEÀþ"ÂªÕÂ’vï÷eã«­7	rÚå’ C$ÁÖÅµ'píç_¿+Ä–-[·òå”ö%ekš˜ˆðIµÖø¸ B¤PÍ–+Ù‹8Ž%kX6j´èï¶.¤¶n7µ„2µ°ã°åýTŸûÆµ4æÖeÕüÄKiÍËÔ>óiP­K¤Q-Ùè–êµÖUZ»²ÃHÚ¿?ðÚ†#¾B°¦…GØ¨m"·R¥©^#ôwº¬sHó­Ä&¬mÆflÆ'Ü\í7?¼QÊZHô0÷G÷ÁWÄQøÏ²€DU#@®;.
ÕvÝ-X;<¼ûä0í°Ó°W±°÷§Óë†±uð—1]±­½šhm`‡W¬=ú8-ÖÞ¹å¿>ö¬ö£9ee¥ƒëÆÊÜé­ýó´V+Ï˜lÖ•åÕ¯©B.áùØ@ÍÄ6mæ(PËÁs\WõS_’µZ"J°è¥“ËL**júAÓ2!_9„³’Ì#´k`94FÒOàêÓý5¡ñŠšG7M-!·÷;÷?\ìüWWW¥š½ÇzañÂ{®b÷¦	â ´wß¸xáU`¹híâÅ÷=•Já¼æ}Ø~”Âµuâ+ÁöØ_ÛµÚÛMys5ÀF´–+£ ˜C^"B4®9u¯5ÇŠhÊ&—‘|vÐ-=8"p€jó¬-³?x8¡´KQ-É€ü’HX-ñ€&oç ²Î²è_Z˜_¸	‘é¥¥S4Q³6§NõeàÈ,Ô<YÝ’dwý“·ç²}ƒS&v@iåB\(Ú2‚¤%vl?IHcÍ&D˜†Ã J×Ø7,Á9©…5±X
Ö|¦9Ç-‚¬¶VÓ+`dh°–'«µ¼2¬1|”ÿ—´ÒÕ®ÎsŽ:â<‡54à8¶§ ã”ÄØÿ¾¨x-×îxµÌø¸f…†, ‘RòÄ™qëÒV†0¨à¤°3Ä¹\Œå!ƒÐ/%Ñ•À›–ÑÓ2„$òYˆG j¢óªúoÃ<	?ûk	¬f}À*…¤uQ/	(Å.úè¯(ØTš˜kë…«Þ’<¶J»CZNœlT \¥1qT6þ¦íeÇe9<Æç§/® °²îw/J×¬—¸§hhiPZk0Sf£ÐŠlF“Íx·kæ	¬1f‡8Ç`M§äûú`cÊZ‹Úç ˜¶ƒ™ØM×x&*	›³nQ
"Mk‰¸hmû´µö­Õeg´­)yo ÃÆ´Á«ì+€&…1%‰JölET«imiiPoG|OM y˜F$?b1¢6R{=S*Ö‘âdLfBÚ.ßpÀ{ekÆ•4WÂÂ£K÷»YÚrã’5št“5_ª…ÅÝ Åh!$•ü8ÎôS¬f´ÆÈoX™öš»ï2!Žk»¤:¬iTØ§J.ú}“’Õ‚²–Ž´«Hàµô(®KP;ulu)£¥I-lÉ¶dH¦Amjš­¡-À§Ú$ñä±·}öSÄ§¡5_§iè¦­¥«Ö\Vó^kWÌƒL{÷»²Ö-’¡{¤­ÎèÞ#PVZ=éU?~qš$VË•ÍE›ìï¹‡à>2‚÷þû³›±›ñ‰¥@º”&#HÍÖ±š¦_ð$HÅÔRM	jwº«Èx¦âÈ›oŽ?÷Üs“£“Ããî.Âº.Ò´µ?Õ¸mýå#Ï´¶néŸÂaÍFvÜýÅ_EØ‹<ôÓúaÓûíÙ·I„<q¢s:ê/y–¢µÓd™µ¬–çÿÞ†d*eÃB!ÁÙJæc(\SöÀæîáÅ2•kÊ_Ò¾® *ðW°ÛÉWDë/Àj?þüó¼¿Û‘üTHç¾"¼-`-a5‰jé@:“ï#Ygznùƒß=ø»Õæç;«¤D^X]]ÕÝË¿<Ó¹ Ì­®2BkÔl‘yM/	elgW©ƒYLxmÓ‘´ºÄ5Öl°õØ¾Þê¶fk â¬¯80x$ŠËSêmRÛ –"CÅýi
JÃ$¥±‹°†‰HN™“Þ­¹OíÆ¹°î¥]pQLnä	ª9«]ê+âÂÚÒôôÜù¹¥³Ksï.õôí˜í,ufÁÂ½¯wÞìS–cô&íO®\o—+$”yÆÚnÓ nÿþìi<2Ú/Tpç¯R(EÇµvU>ðM9ø°ð¥‘Ç˜pƒ¯@/v˜+d$²^kóp\c´‰ÁŒ¶{ßy¢^‰b5j¬^,® 3A1RÖ¡ZÏÕD”lÑ’G’Ä¸v˜)fj$CÁ?Ü',‹UF³j‡5®ñÅ@¹Ž†e€ÄÇë!?Rgóè˜Ÿ[¥Í<Žeó8JB)„· ¬~£tª©ñï
2#l¨Ñ“»…ÞTólK³¡ÔL°Æo„>«pRÑ–(§wGÞ<Cº¸‰¶’–9†	½,OxcM²ÿzPØã;ë’#'0íßyt"†nj¼…ï’Ô(çµ±U*'Ålèg‡eÕ/g³¦‚9r-äíhê™E€-¹Õð~y›yÕÔüZ¾ý6¥bM=/`çH™ÃJŒ,rˆ½÷óh*9	ÑÞ„ÍÓKüVãÞïò©]híKFk; µ–hÍˆZ&¥Û,Æ¥B¥Y•€(¯ÎÔL}¹òç¯¶àÜrZkÔ›íÝÖ%rÊ{äÇ¬©³÷Z$°&Hs¥i¯LðÄÄmNiÆlð[;teA2˜·HH`ô%ÅjÄFIÉZXðÛ(\S5M!tÏ»¾gwX»ViÔ«AÅ¿ûqÿPén™ì ƒšB0µm…jDâ-ÈÐUYóaƒLÖ×üh2†àÕ©YtÉ{L¶—QÖ|W¥øŒûÂ‘®OSqÍG5¹÷ºÿ RŒvõ5ké^kWåy}×œÖºvZcMyA¦õ5ßÌ,›× uYËì— [íì1XÓ17qã6kÖ6c36ã“’Õ”é„æ°ÁÁ?i«æ¤fmÕ’H³€|à›ßÖFFöÝ¹›6Ek£×ŒNîƒÕúA³ k„åA¢°ùÇ¯2’¥{l)>?5UÂ9:"V<¾óò±§¿ô¥Çï¿ÿ¡o}X{ÌêÕè²öúMÏÎk+7mášel_?!«©ãZÆØ-¯.F9•î(A²„}X)³²¥3­­l•&-.ÂŒAª±jpT8Ò¥ý€Uñˆâyc5™žHVCïsH¥@Êþñµ×Èlt1-Äjç_ç^ØÎ-u:s3}3gü^å—}°ýlg‘æjsËÞ»°¼rþ—KlsE;t&xlõ‚‘
›<þÏ-¢²] qŒ×Ì#2)_µk]Z¯£4†®jåæ¶¶šF×jr)R!ˆæ¶÷Cô˜b$ë‘+O¾C‹5Áš«qE6è[l¼rõ‰Bo¶2™4WcÓ-2‹ðÞT3V#ÜóR­ÕÎi³oœ›=u®“í)¾ógNÚÞK¦Òá1#Å!ºûÐ1{äh_ŸßNûµ<’h‹,½v~°ähpÑKg5.ô£Óä³¬Õ£Š'@ÊR©Š‚2Áš¸‹,FÀrwu-§)t‚âRZú¸FŒã4‚´&/CðŒµáiŒf	H…ÆŸÌj:Í¡é£#†€Úu›ÈÒ“?#´þàŽã¯£Ó€8S´*µ, º4ž¨1"u®ÎšÆÇ ‚YU4Õ"ÔºX]Ï
Rç˜4ÆùL|†¶â	à†q¦QÃÊ×ˆv­ mµÅÂ|²ý&pä×;3Ùå6ä3©¶ÚUlMˆ¦ºj+¤¹amY#Q\c]²>qH¸‹µúè½ìŽîÜIöã/9:ZÎ«Iw|:CV¥ªÙJ™<ñiM%×jóEäp™iå½8éŽ&‘Û[D=iíwÏuïÎ¸»O'qÑ–‚•Ílžß{“ 9Ÿ`K™§ÍThZëï«¡¬IpV5›©sDYç³Kç©Ç$L\K®Ýï¦w­™'d…O@ ­qƒhV¦ŽÐî|í¶@†)çHZÛ*Q2jåZÑÖ}|UäšnÍè'?6¾,H'd)UMè¢,Á]&-ì½ÙIpP½°(Z»ÏD+¦ûi
K3[Õ|ðÏø…ËÆVZ|¨Ùõøo¶¢ÿóÙG‰³ª5
 ãø·öI›­|Áš{ŒhÂ%|@µ´½ÈÆ”–f2¿¥–n &R»+µKE´îY~ë®¬%%isè·Å!ŽÝ h>	{,!é‘EÏv×ž¿0PsXÓ’†¶ËûAjH@-tZ»rdšÕ®Ôh-YiÛžÂ·IÇ	Í¬Dtß{›ýÂÍvÉ ’0emýæ£:hk›#›±›ñ‰¦@®šod)Û~™ö'•kŸ'Õhm°öuSÕÌT„Æjw|îÎk¯9yRÓúæák®™|r$”¬}ÎC”¶‰¨&^»Z\cÓ•Õâ#û÷Çú#i¡ÿˆ	kÏ¨É°vLuW	¬y“5zD?ûOsxy¼ýe`ÏƒÒ“ÑòQYE@›²«Ho¢¾sÌÊx¤¤èÏèž,î#Ó%;ÙXôZ»Yik¯HYƒ9^@W«1<b°öüÿÕœÕÅòï¿›d@š¬æþLL&ûð+ó;üðÅ¹ÙÙ™J°ìZö{>Øn?ÿâû/¾½½ïüâ…•Ù×Ïÿ²6¿úþÊôÜ!/œ]êœï,­ž[\s#±¸ÀÖiM¼öÚ‹×~ô£=f¸Ö…ÖŽ)ú¼<PEYÂs¿…±È€´Ášˆˆ9ÀII“còÕ¼ûiˆMÈÄ¿Ø›Ã,“r135¯>ØÌ6 ³ÃkiTëîZ«­ùŠ¼aÈöîÙ¥³sgÏvO½sª·ïT§ÒÎôå\ò2IM5A½§ÕP@Ä8ˆsoŸ¹IÅ›Éwõ‡Ö`öñ¶"Ÿ…ÒåwêªL«‹Öê£ˆ_£Š2µ%’CBqŒÇú`m¤|!‡…iÕ˜ŽÔ 5m
L JšÒ+‡­]¦Rí’i;¬¢ÀÙ¬<^Á)0M„æy—eipþzIñ–Rc{TlÞüf²ì€^=1_[-vCbã.–Y^º$Ù«‘¼û‚&œÂ"–dWb%MâïH=\§. ©ŒÒàà¸¶IV…j"0@8DE¡D¬”Ìù’hˆj²=4ô%ÛXÏÐËZÖHÖÎDµÆØè0iš°±ùV":5Ju½Ÿ†8-ÊÄ¹¼ªPeÙ˜“*eñÔÎ†ØÎdù˜Ïè¿à›ñ™5·cÍå ­ÓyIÉÖ†NÕlàš”8V´]yôäz¢œõ¥!Ú)Òš5êó*æç3¿{×ƒ¿ÀlDk¬=¶§B¢æsk6)Œ•b
Gá89§5>SÆZüóƒ«
‡#(ºcQÕãŽì~é®5VÖØ(íËÔ…pê—wÿ6	­1X?•IXcª«Þëœ¯BÍ™–«¤“¶üER¼Ö=Ö™‹ ÉÖql„¤äòÃ˜Ø‚d!&e¢¿Ä´ y¸\}i]‡5…³šŒ wùÁ]¡#WW{‘+êj¡dmCŠKîtír¤¦’Z7eY2X$TFø©kn!v.“4¬…iRÛõÇ´ÀkÝâ²vie•¸|_l×OÕR±S¼Ô5&¾	S¾o±š+k»øóÄ­&§îâ´{¬„ÓiMœÆï…Í6û¬mÆflÆ'Ãjªi	ñC ÍZbÃgÂ6‡µ¯ªTS[5÷ë'Ä[4À~àŽÃ'G®9ü«7uðÎƒÀÚ¾}““#Ÿ»N³µÐcÍÉ‹‰öÿ¤þjŒÝ£ðüÿ|¦µåÈÏÕ{?¤&V°vÿ[ßú=ÖÈ7¤ZM±O¼}úÌò‹'V¦·–ÖÚUYˆ(Z³¼ ÷ ebeƒ)2€ÚÖ’*kÀU"ºHItnÇÇvË¤jjÿC¢êž^ø~µ¬½à²Z`µ‡úé×¾«¹ä‹éZµÅÐZç—Ïöæ¦—?üpezpû í§§Úe—åj­öÔlgåíé\ôìùÎôÔÔ{¶ÐXX]ž}}ymaþüÒÒ¹7.,’")£HèÏˆMunøû“ yáµ×„kË–UµB-ß­9¬9®á	¬m/¼<T­Nöeiú½c0gþ"Ùb€5f°&ÊöqºC:›Jvázex‡Óâ­ð‘Ô&¢±Ã“‡šÕB±ZÊ2I€$ÌW$)Vó¾jˆ§†:o¼Ú™žž¥«pïÌÌ-yµTãæÐÓTLGffžƒ2Éæ§öïê¥jrÌµ°éŸšªµé\æ±s±Ø Ý6„Èf±õ,¾ðŠzr-u'³€ni)MS†ºÓ] 5ŸsŸï×£lCž"<aM¬bºZˆ‹º5y™ \WUº¢Eœ’Qê¢™A¦`-mxfy.¡Ù91šûû€VˆdäÂŽb„d°æP‘iäËB0˜‹S4kTqV•v¦}±õR1ÔÐ@¤ÞÄW¦ˆñ¼ª–ò<¦ŒìCç‚’¤6
°Ø“ñO„øx›x€w2 ´¨ò½X'qÊÑšÊ“*9aúäðQ§½R+WÆ
…á#»G•YW:'Ÿh£‘­F†Û¬E1ÏQ—§Þl¹Ün—MÛSºfq¿Z'ºk#¿Ò0*n J\Tú³%E²“ã	‰YÎ3Û‘Û÷³á; :°º56Å"ýâåÉ£ ]ó‡D¥‹òêÆÆ,Û·CéÄMt]›ÇÒ<O/Gk9§µC
	km©›Õ¦—²©8€ŠRÈ,â¿{$u—ø1µãI‘¥µ©ê8?ÈJ}çK÷­	w9­ÝìŠ‚ŽˆÍÜò:ÐˆÍ.‰j7\ª]
×®ß…ÇˆÓ•ß<®Èk~j°a’R×B½Zºhmíæ6Œ¼»5aí¾±©r\ºæZ¢ÄR»†	•Oê²(4³H6‰ÊvkÔxRXº€ZÀ²pëf²#®‘e—’ÔRÛ Õ6pƒL•©±ØÌ±‹=¦¡ã5÷Û¶[9Íã{­J­+¬]½´æ·Àj®¬…è*­…Nk)‘nEk~ëª§… Íä’³Ëæ#ƒÚ¼[»½]ªO3íž»˜–Lï÷›÷ì½kÖ6c36ã“(WûóK -™üõç%¬ýG\E×·~Á)4Á&õñëÀ”f¸uÇÜøÀµo¾ó0Í‰ÐÖ€µÌò&Ÿœpš
k6u%3âê}ûº
kÏ<ó|«£Ñ›‘XC×yúoŽÁj–o¨’5ÙSiUk'N<µòåþþ-ôÑJù¤2.j=93íÖ 8ƒ³;ˆjD™!ÅeQcØí)ëšmÊ:'©9ð¡ïSÒÄ5“þš¹µ_h6šbêyÞïêÞ{¾ÿÑŸ‚ý‹Híÿ<µì¬v	­­®’¸ˆ¸öÁü÷¢âÐë‹‹œF»ÑxðÙ"©/Â%Xc´§fZµÖñöX•&ÐƒïtÞoyþLgñìÒ«;«´Ð¾È“É…óH6–)‹ÈEpmÙŠ`@Xpm=­­Éj/o4ÊÈU[r¤19…ƒ&Bõ)™P‹FfÖD 'rˆ\1(MÚ Z%(ÉmòàÔ”òµ°¦Q-«¥dµDU3VsX£k0Åièu·œ?»îtÎ½Ú¹U¢/—í—Â‡Ä§ÎiÙúXZß@±ïtÜšÊ)zª®	ú- ¸MµèÇ ÚÇ§dhWÐ.æjÖ{«¿Â0VódGM¬ù>g;R÷-!-€[r~ƒÎfb@^BFÚ#¼"6JÂ1‡Ž‚ç'†0íÊU˜î¼¡È—?bSa =xlxŒ3"{’Œ²9k”u’
Ìlcæêt-±Œ]eL*9Ñ_EäI/T®¢h¯ŒpƒfÑ©XM%Uqd072žÉÀ€H†Ø§pê8(ZÈê¼¨®Ê½ÐW¨Uã5ÑºÑÌU•F2¦hUÕyeµÉù#ûš¢µ	ì_$5''”øÈwÊÑ1ÀíÆ¼fÔTÕšöõ£ü 8™b‹ÄgõñJ¤¾Ù5d>H
±¼aâZOOYÙ´‚€ªhŒõ©ÌLr˜~³aµ^Ë`ÌäÌ·yŒ¦Ø|3Â8XN6T±c=ÐÔ8.ËcŒÕò0²ž‹Ë!V‡5íÂ¹¥7:gÈ…T"äF´ö2.#—ÐZÓ£ÑÔ¬$z?“Þgäq[jˆ©j±oŒ:ÍCÈ—˜p~û	Éi„wX“dk&©©Å°Ò o¬ÝðÙ›Á¶5Õƒ´C!Œ9B&K˜^	Ø!ÍƒÙÇû¯,®Ýl'&®É*ÂÌC~_@(-•¼ûçh­_*›[°|Û=E4Ø¨];àº–Rhÿ¨]p­»ƒ ¶°aÍ§!ù‘H‰i¾¤‘-X}ÇæÉ.áS…f‰H¶ÞßOÕlÝñõSSáÔºy,é¸rÍZðî—´–òƒìî0’N„«u/Z#Rž"Œ©lHïBq+ƒæn.rÃƒ5ùéÁ“{3Í×À6x=ƒ`»©¬mÆflÆ'ãØŸ`jrîOÀM¦"¬Ê„4[‘Ï¯¥?²Ö°¾jâ-ÑÚ×^£ôGXRÃ_DàO>¹mÄ)-k¾µIà¶ÿ'VCï:ò|`ƒÓ¸ÌayCì‡¹àÇ_þø½­Kþ•§N¬àÛ/d[È`*Rà*=ŽÙæZšº«©Zë²(vOHAšMúƒ»H	«püù5‡í”5	©±à&Nä68íB¥‚¢v¨ÉžÌEŽ“B5K|©®ok&'–O¹ÎY«Ç÷Þ]\íÌo,*Nw^[~]uaÄv:þþdfs¨|_/°V³ü§ãÕFyðÔôôàÌÛ««…SØlœÿ`unzå¢éh‹ÄÅßëœ_•«$´ö.éR×Ì²`ù©§€5]ü™%ø[o9¬9­c}ùåƒµ*öý@ 6f{a´\¸¶_Úê«0­'Ï^¶×²½|€ƒ†Š´#ž„ÎŽ·ùÕ0R»r±š£ÚúÖj€ƒñÌàÉ¯foóóÙùÎyÎ˜»¥8Ô‹÷£¹OnÖ4ô&ý½½yÊU¦ŽÙ¶sG6Ïw	¼µø
_¨16u²Y§Pá°—é#	’RD`Ì…‘®h(tµ”qHAEóÔÉ@kl}êgE‘pSB^@ÎŒàF=^"PÀ	 ­¹Ñ‡PicXC+ÄÊòvH3LµËftoO¬3P¨f†#À›ô8àÐå HžaCB@Ž•ÅjœÂ$
c^U'eQÍæ«Ð–²	ËùZCEm‘Ÿ5^¢XLO[íÉ¨TÓ‚ú(Í·.XƒþDRcÕ¸€Ü£sM€kÀÕòÒãˆ0¡M¯&‚mÀv²uzÁí‰Ã;NªÑ¶¾ñ“GwŽ5Úåj}t&&NžäØC0lÖòžøñf3 ¦Bâ%tå– —×T~´ú¨I\‹½¹!“Ó)“ô¦j ›Òqæ§:>ãLWÝÑxÙ!ûqÇêÔút)}¨OÞýÙÈb½:¬6Ùªo“8W”ßÑM~Ý;g–Þ0Z[Z2—‘.´vàmÍ -‰êÖ¦ÊËòA*Ô r¼oí/Ôù´ÑØˆÂ’Q©Ñ²)Y³äGV/ÒÍ”ø%¬peÍZL×tÜF¤4¤µ]›â:c¸ë»+k£šYzHÍn‰´ÆÚÕüf-.	$/\[*‘IZIÚZaËµ3ÁZã÷®¡ùgJ£Z²{ëÇ|ûƒ¬Ö­ÉÚ:[—îØMYóÉ^ãªKj¾t5ß¾SøÜwC$ŒÌ÷´ú Åµ´ãý”š}ª;¬±ve5†+›÷;²u¯ZKÃÚ†EkéFk!uµ[„£Â³]>åA&©™ž*Å˜mMe¿ÙøïÅfGäfÿ 6am36c3>øwÆjÖ­INóõó¨k‹È ò«š45s¬ib°vîFO¬)žS<ùä“?Ø¶†d¥}	˜%Ô¼ü¯Êò2A‘ø” 3ågž"žñŠ5‡µ‡ß«)ò~ö+2ƒ\™›ƒØ~2ÿ“þByyZ)Vv Ë[×ÂaI­?ì;­•”æ=Ùz¼ÉZN‚E®%Q­iQ© ÍÈ`D
›eöå‡`µÄò»B¹@’ù"!T³25HJqá,ç¤]T¡w ozav¦¯—¶Íôk®aMØ—#Á‰¡…û<ZPí8I{”^Uør|júõÙ™|~fþÌÔÌ©™Îâ2–rs«Md{oùüò{ÚE`MÉ´Ë^<GˆÖÖœÖz+HkŠ—‡¶ßý79ÒUW®6kÐÚPQ×¨½ù>ìù¡1Õ£©Yvâú8d
hm,L9ZÌÉ§_šZëÐáƒ‚5¦—+V]°ÿû:Hij³øšó¹NõöÎÎœ¾©opfÿ<íÀ\ÄsÁ³¾¢*è²Yè’ã}Ù^ªÙŽ”ìÆÜ·K¬µ±˜bu­Ý–KD–(·›hiâ€ºÃšF·\×9Í·Šõì6¬ö¿Ï–KagÌà°ÎŽ‚Ü¾LOYt@‘D²ÁÚF!£~±TÁO~‰ÞýZppÏŸ"FSCÐãîX¯6{7XÍ`Ñ¤5ÉsœÃYœ/ˆâ¤(S†"“(Ô•Øh&)¥1~¤dOËªíµžÚGËRâ/ž´d§ô>jHfÈg% ©¤nsu™GêùFÆy°9¯L5Öø˜½P³bvô#zlÁßùªÉ{ØyãÑ£“<âÚä¨µ6Ö‰é­ôË“7ÊnDùœUîˆÊÊÔ ŒAVõP[¸˜ƒˆ/ú6$—©Z”AP×o<ØÁ´åaµ5su~§‘4Ì9R–¹—HÅ´¸œèS‘|&Ï‰B3sD’ä%ŠJ…Ô]xz>îüÒÒ™3KgÏ“©DÈ+dB
×ˆ5XÓ&ÎTqn©Õ(ÍTaZÔŽÕŸ¤ßîeôócæ×½ªŸÎ–ñæoT­f]±EkHk{¤0HL3B³þÀ"l<X³ðš1±U¨ZøfA[
í‚¸fs…6¤ALó©ÛAÞ§Ä`MroIédA:¬QÀV®<’Ýt×rLÉAZ»¹«ÅH÷‚µ[Ã$`ÙÇ— °!©èb	Ó0¤çI¾cðt$’j4?ÊÚa§rpKF‘\ˆ®}ã¶ëÿ²«¨¶Þe$Ý•µàÞŸR×®T´výzi-ØAv-YkŠŒü=¶¡í²Z59Ëhày¨_3qÙLG¤(_·K
ófäflÆf|ñg¤YµZ ´0U×¾J|þ?²ìGSóØž)ÜÚwÇ_ÁVÄÃQí°XmÛ°#Úç®©Uub¨UcË„õjKÖ6ŽøHtM5m%ý@SÏ‚=üø£k°fÆý+´X#p‚ü'Éjk©˜AöË—Ÿ‘rÿp–„Ü9ê¦æ¡2	LL¹ìTät‘–Ÿ¢™/Å4fž4«¿¬ÆQX­8˜X‹<ôÓùÚß#ý-Î"'è‚ýÚW:‹Îhl¬Vmñƒ…éé™)¡£_)¸À#iJR´Úb5ü/ ’)%ñI²(`oVÜQäþšŒ²§óEhe¶3}féÜÜò{çV.¬,..-¿¿º´HÓl:gk¢5ûK=Y¡\ûùÅŸ]þÝÿp`µíÅ/0
­gm.ÿâˆgW"$®@A1JÔÜÆŸ|H,Ë9üôÓ‹í§^9AU}Ûà³ÉÂäÁjyLëŽj)»~Pm¤»õS©6³pöÝsl6{~z`Çìùùj©6={j‡™QZÊè “=±{¡7„5eGŠ×†x?àcŽ]"* ’Ý)Óy  ÆÑ0ªt¡~:KäÛè]€šIkÌ™Õ'´§Ñ!¹±ÒC|´3¡îËëB[8cXiŽãlÅmÀQI)·¼JfÊ‘AÖRD^¥NÙÈ]D°“5äÎk‘Æüæ1Â“z(2àó"´qw‰Ç”¡ÉÁ|ðDXû›ÓcR<'¬kÂV(¨BŒgòòç‡ÖPÀ*<F@z÷^²Æc9YïÊ¹°V«€µl™Wå;‘Ú§ž²“¬FX™”q4ÌGÏïc((s3Bëú1UÔetÚ±Q`£~êÞXÔ"¯‹É€¼žKíÆH“<9
&¢Ë•%ª¤ìLj=y1òvo¸ˆ¢<ë…°å 4Koa!¤ICÓÙYˆÊ¦qLõð ÆaNFWã×NG£ò ÊøÎÏe&‰ŽÆ)û65f—Dg˜G1\$—ZìgOßôå›p<Ußµààn#m­å´æÒZ\`¨æ‹GËh¬ÑW½UcDØÜ½{„ÿ¢íÇTdœ,Y™úïÛ7ñ’³ãÐšõ•2_‘»nC|Pä^‡5Ö$˜i_>ž®[oÙÏ6Ý{a ¹Ý8å²Yi¾Uß,1Õo¯µØòÙ;ÛØ¸Î+¿ïçb?
t8àKT.ldìŒÇ–gr¯Æ¬ì•ÇâÌP1fìÉx\¦Œýa³¢ŽW’]Ç‚••*i";Yï&2‘»ËDv D/ G[k5\	ÚÂƒ˜>Q°l¨MEþþçðê!o‡ƒÄûiÎÜûÜçÞ¹óJÊ¾?þÏùùõ“ƒl–±ÆÆÞÐN+BrTÓÍaÍÖ0$âËZam³H'1ŸnDk«[ù‰8Q1ÕŒq#y-]³FhL,™°c£›ßåêYÊ9$ˆmö)Tcà‘ïþÄÇ‘Ô6õYK£Ë&~ÕœÔ>¾•¾Øië~–õf¡Íšo6SÖÂžŸ)9M°ÆŸ)p…Üg°F¹Ú¾ÝØ¬\#Ìùµè+kýèG?þÊÕ^LèLÄÆÌw$§%¡üGHj5SÕÌDÞ"cŸ|ø“·í?ó…/¬ÕÕÀµ„ÕžÜ¶­SrÛ`£˜ÿÛ|Üjl"«áM–¾ó
¡ZPÍV`#ƒ5µ3û
ñ£ï¿}céšüûúÓ¡’•q ¬U¢^S¢cU¦ý!¶—¢°kÊšÇ@Ñ¼ #³ï¯ZÒZ‡ CÍž1Ðn”p¢«†çö=æ9 ãç€•Ï‰Õ^ÇòúÒuéjïÜÖhz½p~aeþßþðì,9yôêå
9;\˜îÄ0Gy¦Ù¤ù_`fžÖº´²WÈafWŽzi'qŒµÆ.ä¤¹êå¥ù³Kg¯/!°­,]¹9¿‚¿zgÃj¢µå¸ük?Zµð·ªµ'Ž¡å.¡FNO=µƒ,6ìÔÉ"lÀ1ÐZ!//þâ÷cÝ!X[Òò»íšzùg¹²5bfRõÂäñÛEm	«‰Ô6/Vû¾£Zè‚}‰¶—//‹÷Í­ÌŽ”ï›#ïqv~D¾"¤7ŽBk¤9ªZÞ’Ù“ÌFŒ v¸#J^_çˆÌÌEmçâ‰ãº¿¬™ë Ü§éß-"Ò|u²rX³ù^Ç3à‹ð™BK´f{Ìï¡GH*¯è3=fs™l¬KxÌX¿jkXÍ&øö÷‚5Ý"Šõ<ôÕöx¼‘Æ­Â‰qG!\ïbÝ‰ñE~2r4EO=ØäàQ2lÃ!_4—íì}Øù¼`%X«ˆˆd9«©[Lk ô>Î-V='dÐ'åãª.æE£&°Æ	PQBÒ×(GCaÌ¶‡ôV±ÖGaî˜vÔñ|Ë"ÜHÇ4€C´†<8qê”ÁÔ"_‘ÉéêtTÍº1ß€ðïCUq¼ÛŽÙ'ýÚø	´$>’Ú\ÅÊöI~z¼@ˆ,ˆ6€è%¨b
\åUÔ¦ÿd
ü7…ÇêN X“É£ÙÅr7‡ÍªÕ2°æ^"ö«h[J× ;! §É¦Ääú•Åf.¿÷ÞÅËßëMkÏZK´5Ç5å6
ÖÔ®s [€9#2¨Ööïß?$ûÇÉÖÞñ{Í:ªyó‹_3Xó‚5h`‹vv%;²ÄK,û¹ˆ]Cl"¬1¿…Z¬>Ù‚°ú¬iì m/Ä&ÖýIClÍà(.å½w›ú{*²r¹ó›v·•ìª÷Ú_„îj¶õ‘04E_1Št#HE°zì©¬ÑbùéDPækØë]®æ
mÒ‚´f|aÏ¹ÍûY3aèåõ˜ÖÚ_ÿ§?ÚwÏÇÔ¶½ŠÖ´lè™®\ÔT¶¶i_lçñ4®mÐf­‡Ž…yØsemrõ³yP¿ðkn‹j·GÓ=¬}ëþ~ô£}¹Ú‹÷’ö‚¹³šÛŠ(¬³&JtHwëWì'ÇŽÞÿðÃŸÜûíã_8~KV9··šÇ^«×OŸ>])ÅÛk·	Ö&´‰Ù~KX‹)×Ïðì“ðÚ”:b;«)åð(±O¼`¬æ°ö­ùyIkóçÏßøÆÒâ¹§`­¬‘lFPÖBd|«dH7±m•Ô'¹nçh¬JŠ”Y˜G%¥MÖ€\êÀj$÷}â‰/¨A·CÈ×eÇ¸tã°ÿX«ÍÏ³Y¾¹ð|çÕEŒú54–œV”´gGxaL0àù}£ô=+Äœ3}Z•.3§gvp­†@"ñ?“u5s~®{ßùÙËs×–/-,Ü¼²²B*$…kòô—Ñˆik¸øûµŸÃÚÕ'N<qä¬QÝnöP#r_·Q‹% ˆÒrX+r1*‰Öj»0$WjdîÐË9ËË[NV;§§›`'¨Ö£X-ñë&«­0[ÌÞ·táÂŠuÃžQäËs)e=JY-óù71Ùˆ%ErRvdo”£ìsY¤|¬(«ˆ:ñL.7œ=W×õ>š&°6)&SbKÔÕ’rÓ<°cEœºÆÁ1‡5ÎeD†K
ÔÎ´2íÐ,ÆÚv«F›Ž#KÉ	‘å^¥ö]mÜ}üe“ïž ÔF‘º^RA,èI¸Õ·í¸!_Ñ%:K‘„_Ì˜?ÇQÚÌKLD&ðL4p“W«ñ–\ÞóNÙØó‹ú@!“KÊ5”MšZKÂ+O$Á­ÁóVcö9‘ÙØŽdÉvd££²ü@ŠêX…P:)t¦çµœçí£vW•)"ËˆÖáPÛ„B±$3ý–6åo‰Ýã)~@ÊÄ¤*íÌ™ZCò>þQ ÜÛj±‰Õ’ôÄ[ß`-²¾À,	ŸØgV›ëü~Ä:Y„¹†$u§ÜŒñ&Ÿ¯Œ”Lî/wƒŒ¹<CÏÑ¡IÕ²hœˆ$'õŸX-G¥R#už(.kZ]Ñ!í9€9=Tœ¥RíÒÒÊõÈ¬]¬õÖÖ
‰¶¦0íjÔ¼)¹SwT±ˆ¡#æXI6#$Œ>™‰*°°þó\Tcà&QíQïŠ½‡ËX®‹w+RWªwZõŽrÄ¬yOìµ$2wvÔ`ñ‚yXìŒ ­¥üEX{wYÓÊâ3WÖÄl÷ìæ"þÍOzû—R)¼)èfJÝÊÃ:Üm¼iBZ ´µ°&£‰¨–jˆ½Q‹5Ö¥5¨À“‰´~¶v	CØúÌ#¡¬ä)üÞu^"aãC¸Ó†¡÷5¤vçÇ ®±µè!­›hkiiM¸¶y_l‡ò¹­ÛLZKÚ½ª¬éG‡9¿Ik¨Ê4ÄV—rî¸SæýÉ/~ÖúÑ~|¤åj°Ú)‡µFh÷ïÜyob,b°Fo5wa ³Ö?~xfÛ«æj_¨ÿ/$@‚jbµÿøÖ[_=†âi\ëOÊ´Ÿ5Øøk÷·‡µJûÆA®G»tX“k¿â—V²vm(5Ï‚¼6Aëõùó——^}ÞÌD¶gT±6äQí]cÌY}¯¢¹ÂEê’«!;Ä5©’q]¤&X£ÀŸ)ÚZ=nÔÝ‰Þ$#’û®^½úÌçp¦4«“ë²ìÿÁ?øÀ‹ÕVfo~€äó\6éÜ0ÍÂ¦«YZÇ©€ŠL2µúÍâ?Ïµ˜ÁZ”D2›f¦aµc3e1mvÞZî‡²Ñ?=]î*Få%,Kè¤½|sPSÿ53ÿåK¢5³ðwÿg)[ƒÕ€57yà¡“y*bÀZµJ:d·>‰™ù.ašlA¶<ä¬©³ÚT±`M¤×ò#9ƒ5ä·<m§¿x8Š;ª©zÍeµ‹Õ 5¯VsT» Ts‹¬-\^ºpiåìÜ<:Ûì¨ú]Ë—T6œE‡´r5öØ¬•Á3½›ÖÜ(	¥€æ§g^Ã¡½ ¯õqn48ÖË é«¦Èì…›¼6ÕDÕÎÅo=E 0‡57ë÷Irhçx©í‡’DÉJ…©=,Ç A™Ö—T¿6V
¢š™ÖË§›tS¢ª9P…,Èà$)‹+H[¥«äDpÃ`-êˆ]ÀÇ6ÏŸá¸?,wä§"ë9‘ ›¡y_mQš-~AÕ"»-3’Œ^§Y«Ú£íÕAE£>~¡eåÓµ…ž«¤þÓÙXUq^M²,VœnT,ÑŒåÖ)‡BhÏÕùWxIÌ\)-³×-x¯(*¡@­Å—6Ñ©»ôVÃrÕh²xÕy+­»›“brçäÁFÑ¤ñjM¹Ë™,ý:à²x|‚ŒJð®VWùœƒÍŒòå@.‹OåÔ¦(ñÌiËÒ!­‚¦²å¯b,–YÉ8"vËé´Bf(ËÆh­œçÔlµš­¬SEyyî,è
gWÎÎ_\˜¿|ùüå‹’Ö.mâ	™dBXtÔ6A¯«ÝZÇtøs™öþ½ãöß¹¸µ·Õ±ù¬É	þµ8íMµXûšÁÚ´4™ßqÙj¾ûÐØ¸p•/‡¥¯%aºšzbßCk³;Va-ÜÂÔ¯m¤²Yg5­væº~Ø›tYãæƒ{÷»°ÆÖ!é˜õM3ª”9ª‹jJó`SÁn„Y\[O¨Ï~…¶«¹‘Õîéé/²QlÂjÁ˜ÊƒmÊý1g½›¬¹!ˆ6†V~ó¤¶"tGc`-Ésdc÷ø®oý %‹Ÿq	Â¶œ¶ÅÈæ–AYÛ¬j-í0b?áÐi-ÝÛWÝz/>ø<¬Ü’Úƒúõgk]+øÝ`ä÷^°fÍÒ±‘ìÃZ?úÑ°»¬¦6jëaIíÓtTÛ‰²†§ˆ£Úß¬}Æ 	 YÄ\ã‡Çn»mïqðÌUµ3·qYÍYmòØW“þbÝàþxkÆtk±©¿È Q:yò;ÝŠÁÁFkG|ôÈ#·’ ÿúû4ÄþßŸÇcdaþÆË%
Ë‡¶ƒƒ¤@*f(Ù¯4¤4‘Y²W
IÆž»ÑãIRŠ·gèœ=Þ¤aHT‡ØN'®KVì•ù é}HF«ßHÄ”®ö67@l´.5Gûùÿþp¡‰žiXRÑFä¸ŽŽ ·ò&iLÃQlI s¦jÀ5vÆ_<Š«Ta©=ðp± «Ñ›m¸8sºæáæoœ]Y¾yóúÒÅ›Wàµ+W 5:¯½c°Fà	é×~W_¸zâ¥'LXƒÕ^~ùÜŽ§òÉ8[µDÏZ­ÑÊu«Rè<’ß•°6Ø˜ä¦h‚­üG’½ž‹U¼òØŠ ¯YÔR²ÚÆÅj‚¬öÞ%My·’VfËù®\Ä`¤<Jõò™`-gÉŽe¸LVboX*[>§qß~ÿ î0)D—s‡ùžà“ÆtUíÙ"ÏßR¾„Â-¶ŽcrÖ/kÔšc½XÍå5?$É-hfžä8’ ÷ÂpcmeAú"OÒÚøÄD ³ÙÂg5\ü¥²™f3G‘8ÓûÎ(2‡’´‰7U“uFÜ2pj*#ÐN€:øk€kñº'â|)fæåïfÿÞƒ±M kz%K”T°Wµ¶Ü•f­>Ð‰]¢S.$24çµ+%žSÌ¨<M/–Ïc)®W‹uX­‰µÉ8BÐC2®8­As“5ñï¤CÞfuÑUõ±ÖƒMœ—õ‰ô>uýàáz\CìVƒbéÄÍ$¡*ÿrrFV®d$mRb!µiÓÔ¼íTå b¹
â„µQGN™hÊ…ás¦9Á5‡d«Z+šSk‘‚QžÔHébºœ¤1“¸6•tYc¢<aº®•³dOò¯FÍ¶iO(XcùMŽ'9ÚRÃ
ÏÍ­¨ÛÚ–êÖˆšãZm(³wÆ+QCÍŽMGCŠyrµlGÕºÐ™ÿ²ÕÞÖÞ¦P¤ò¾¸P%R‚±2ÅùQ~ø€†Wyy0£H»ÏÄD`[k+’¨k¸@&F$I¤Í mI‹j½Ó 	F]·»N²ûÀgì%q#vZ«šs•ÛBnãVŒÿÄ.¿ƒ;f	(5m-)XëÕ›Ek* õê†T£¶×Á®¥s‰€háT¦‰®æCkšjc–ùÖ„ðãçØMN öìùX`.(lkÑKZÛ¼l-(k8÷›²¶QÕZ@s–´Ã Ö³ÑÚ†EkŽka48ø^5§—[‘Óø»¿ò”m>h¿ü,äG~b÷£}XëG?úñ²ÚŸÜÿÍû_„×î_+«hèiŒ
Öä*b¨¶XsRjkMÞ¿_J´¦Ûá3·Pøê1ï-€Š‚žf¿X#b¥?~ç$”FŸµ)‡µŸkþÈ#°i‡÷køõÃHó¨j?º¬:®N©¬AbOÊð­U*6‰3•ÁŠ%=z(«+Þœ×"R#‹¹,)\ø`±†Ë0F6‘c›N£îÞÀTü“…5\/9bé}ÏÁjh|Ö	o²¯ß”²öá
eX—ŸÿÒ«Ï7	LÆ¹f,Ú"¶ââ±éúS1å˜‹Õ²%$7ÕÉMã<oÔ13RRbLÕez˜ß¡nh#å“ò'þÛÙ9š‘ýíßÎÏ/,.“	¹ü­]1ií"–ò„Ô¥ßŸ^%ò3«:ôT>o°–íN×U²ÖíæºTÍÁ?.Wå‹Y`í!¹‰˜¾¦ÀH]¢7¤µî±ÛOÏsPÕjéÈtgµ`×O (¨öªu¹ñÚÙB~tT–"å§y ¥‰ÒòÈŠä?¢ æ¼·Dµsî*B^anÔùÚFt>Œ7 |TA5ùñÉRDÎ‚l›%s'44'xsÄJXÍW?â°ÆêA›¯	}wïLé‰@?…‡o„œÇVëÖ$±Xb$ÆÔûSspcZë}<k°æ²ZJZÃ›Cj–ÄE"9AÎ6‚5Ä³µˆWØãNR)›1’á©ôBÌ¼v®ÔŠlBwæ(R©š>G<]oƒU‘;@JÜc­ÈgÄä.ÞˆSä¯ˆŒ$1ÖÞjv¬þ­Õª”Tl…þH—µF5ºøQ+Z¯«ù@E/nãÍIpo{L¤†ŠSÄÖ/ÅÕ¶~dã2‘lXGmÄ¼J¬‰ÓÝBíÌ©3gZöÚ«UŠÂ½z³M*2Õw@W‹ä›ŸevDæ ¤ åsŠ‚ÈU²02€zÝHµjr‹9<e°Æž"é(;ÈÂ€ ,g³!6»Wž=±tU.”çd14wim]Ý&·iOÈ„ÖŽ%•kq¦Q%³^‹9Üis¤4ÄÙŽT³öä 	è’´[Û¾ý¬†¤F—5µþeÙGÖ#ìö¨ñ†r½Õ´8˜QxwlO=Ä¶Ÿ¬…<ÆÀbl~iD5ÖX˜ÚÅy
×<zilÁ2dÉ9¨I!ù5ÿ12œÊ^ä6
S5_£Ž­ò¾ÃZ°ƒ4XCFaèi®m¨«í	›€h½$56a›6{Ô6ÜlIŸ-JóÕM3Ÿ¯ÛMÛõ'Jš-uRÃPä_Në-¬mÕÁ¿ªõöî‰iXûÍ‹Ö‚dàµ°øê‘žûÉ»åâïíô	íAÕøÑí¾ÃÒ÷©5Û?û½~ô£ýøˆXí÷·Ç{_\5©1±™Ëj„›Š8¬9o±*ž<||bâ¸“šbª}õ–¬BÅ<$<ÁïDZ«œüåÒÓXràÃ+¿$€µ—q3|äª³òý}åqíüùùùÙWqÃÿÉ—ãHüw*ƒ«kªWƒÆºÑ×‰°ZÈ‚dWŽ¡È²?£¿Îò˜b£4Ä¬ÝV•[f×ÙÇêRÀNž,ã|/³‘/“™ø@R1¶¼´Dì++ç_½|þ?t:Ò
ˆº¬Ä\3¯uËÚÚ4G¹ÚŠµ1q-‚ÛÜ(ª™É‘Þ°ÈÃ'£U¤‹"mÅ¼¬ñÓ(vg¨Ójªs³Hl?Y¸<¼tqùW7WV.ÒXú’_û]ÇÒ¥5ïŒ-ïþ£	¬í*äŸêŠÒê‚¬¯2Õ^]2/A4.B¥G1#¦h…}HÛ“‡xéCoÐ*»X»]y	«ml×ï¨öl°ë7Ym•Ô.¡¥a°°tyQ¸¶tvvn ƒMÊFÑq´pøTÙÏ±7*×~5ÕóEµØ³tc4œ,Á¬6«ÜÅµv§uLîóÜ`¬A™qh‚à˜6òðO"ÉhV#ÁóQ°&·R8&>ï´Ùö"©ULE£°nJs‘$Ç©B)xƒ$ÅúSûB(‚ç€[®bpˆtVK`-s‹K¾1.‰‰ŒM¬©„RG:cíh ¥¤K mØ"/+`ÓëK²&‘ˆ2kÊœ¿3f!ÝÓ×Ôìº©¨…[£y\/8†È9Î“í¶<&™Zú$4¤±jTUã
“ÜxœÁZ§~Wþ;[%Ã¨j¡mb\Ø	óØˆ_a”»ƒu©–ÈÈFwR×š‘ž´P×´­·:ÎÃI ÎšdÍÓ•½ù€¹ÏªèO>ÿÒ‡Ë9¢8\{ÉÐ1Ò©Õ‰iœmÕl:OÄ–—´V€ç"=_ÞüýÍ>R÷RÒ¦·¬—rùŸ+”ÖôoÂaM´æýÓ´p•·Ð%%ÛŒ‰š|ý°.Oã4	¾ŽFÁ\i°ýäà_<}Àó5D4Ú¬’€‹Ç­×ì¢ŽÓ»×øAº÷Æ-fºrÜÒ¬Æ’(kº1Î`µ"[Hºšï§d5_}ñpwé$û>mc+’Ð¨P¡•Üp$îâå¿Ýæ_x:Éd l@báê²¼Ç•}Ö6äµ€hÉTvïAR³M²µîa;‚%Eiži–ÀÚ6àJžÈE5ç·TJäFý<ë¾?@[C["°­W­mkifKnj!rë~é¢5–TÍZÏ^kìh³°øàÚšA›|‘Aù× ¼`vîÄ¶ßK4U»Ö‡µ~ô£!«%.ýŒß¼Ÿ™v%ª}:˜@þñý’Õ@4¢3KÕj¦ŠÔ&öZìÕ)T{Å¥¼-Mj¿¬mÆj¥òkŒSÛ¤É9u/È·@’R³tméÚ\üê«d1ª‹’á.ªgbƒ´êL!bÉå€º{ÁÚ-^«°Ç.+àæ’›"y{MQMáŽâFk^®Ö=™Ï?õÔfu‡<Ç{IXaíÊËTÝ¼üÝçÿþªÖŒ´/†HVxõFM¬v¬QèÖáÀNÛ8Î`‹Æ¸Vãˆ¨?Ì‘¬2úª¶"ÀJÄ€O&I\£uý™jyƒ"šÙÅóçfg—`µ¥ù‹€Ï…KË—–y?FkVµf°öÈ‘#Gk<pèR*ójç6Y7ý|.¬ ÛqõÁÖ5¦™²*v|í´$µ‡NRÚVÇ²ßkÕ¼\Ø,’®ëíú½VÍ’!ß½x¶8»´¸xv¯e5H‰É ©gîÜŸcŸS´ÇwæQÙòö°üh¾œ=WVK¸"—Óf¥1Ìã‹õ(Zó¤P.c1§U¯É½ŸQ»Z,’ÔGï”½—ýÀjˆ<¬íÊÄÎ@k¬Vãæ¥nÐš×¨µ'Z% BY@B;B”q6f‡¸a”Öinè¤‰h)`˜äÇ13!ÎP “°Úx3sëìH§èiBDì+J©7£Â¶
Çcý	c ÃÕ±\,
ªJÊ?›ì6ê±ùªFd
Ö50µm|¬Ã³ƒl­Âˆ†ÐÖäkPŸ7ÞÞ?à†ÜøÈ(ã¾û°USKg’Ÿ‘t;˜…üFvé[Ð4Ü«”äºµ3í’¬¡=ý¡¥1yfçŸLý°I‰Ôyçÿ¬ñ]¡Ï¶õ^S§üj¶Ù÷ˆª^Fü.›1HuffF –7,à¨sã,±\!G€ZBUÕ¢qÂHÞDµ)lyðTÕYðé/ævÁn}2È)R¡REÀ“çd\[¸tiaqE°ºcÿuâ	‰hž!†k|±9DzP?ÈÇ†Ž™ñýãƒ¤p“w*'Ì]Ö‰j³ÊRÝÖdß¸Æ°jIw`ã÷Þ`Ðžû@Þsç'îãx[«Ÿ¥³ÃAUc
ÖÃlÛ8>nì\»‡ñéýîý8hõjRÖ’Fk¾°X#îôV­á-¶ø »ù¬é,Hniemc`KÒèR’›”e2M‹S×úÚµ j
Q—VŽ8¬%Á‘€d:Á'¶&!|zÏ§¬ÌLhmë±ÅNk¡ÕZÕä™*ZÛ¸/¶bse-åöæ=ð;œb°´­¦ú‚Ø²Q‘ÚnBÇ¤.“!Ü‡µ~ô£‘eÿïóGmå2bè&HÓXî¿³~d5•«í'kÿN°oƒÕd×¿wÿÁosÝ­<HôµPt::²<HÖ@kÂ¾ß­erz—ÖrSniMÖ@W¯>ûÜ3$ÑÚoÍ_¾«0ó“ó ×Q*W³I†¿+g˜v«U¶rè¦Ó/ªe´2h^ul«ˆÚìÃ±îÕ&ª)@sVÓdÒëE"‰Å!°võ…gž{Ît5÷ì_^^Ö>XY¸¾üÎõÅWÏÿW ;±ò]üïÄmmØŒ+/XM× õ;¸P“Vêð·3}kG“¹Rb©9ÂšÃÚîËgñ­Ü•›9]éÅÑÈ¨Ü†gÏòÊ°Úì?¸B··¼­ÝpZ“!äÕ'TµvôåÇ~|èå]£ù™™“'ùTê­«^Ã\9ª^:3Dcc½¯ÅlS¹“Ç¦Ô…mêöF1{Ìä´‰3©È^vý(ëŠÕ@5‡5¬ËW.]¤Sø,Îx4u•ï¾ŠÔ†™°2°ì /r‡žýùQéjhf¢:Ù¨Ý›ˆNféôÁbäŽldLQŠô\¥cÑô0	!­I`£VÍ‹×øéXeØè‘CŠÑ¬iæK²*ù®©íÞµÖÆÛ¶§§q ¤Ž„´1,Ìq¤ÍN©mjRF+ùÖ­ ³	¨bÍ4	ÇyŽf‹çªÁQ‰KB¯Dwëˆ­BÄ±1`ïØÆáxÆ—Å«´êm(®4†A#Z`‰žwi:SU>$@hŒ¢¬0R¨’¤'éØD²J«NY¡òOËÕ6fm`àßºXœ¡’LPH§w5°îØæäÙèøIñ‘ÚÄs“Öü:n©]ÿ|ì8È7Ï™ˆ¤G^¸†|J“5Þ·ÚAhý¥uô˜Dþƒµì›5Ž%?µÄ{TËõ¢43Äë!U‘î  ›t°bPc¨–§ /îT¦†ž–£<MÁVË˜'$']­˜)Lå¤Åa/’ÅÇ‘§<—ÕsðÔ³K+w,
ÕRekÐÚ#	­‚ƒ¿)k€´62ÃÄÅ&¬!ŽïW3‡›Á÷}7yúqaÚS í€’ ÕQjŸ]·2Â.ÞkJ¼Â16XCrS9ìf"Ûz?H(ŒÅ'LWGßú™šû®FÛKÊ²^Zëa¹®ÓZBk¬wþ’t4(Í:b—ˆ¸Bµ³`-jÄ•m€MUlïCië{bßc¡DÑ^*6©XÛ-Hk¤Ð¥$µt¤"™N‚L=Ã#»A7c%\Hszpfg„üÇ ©=ø`Ú*«iñÛÐÚæÂZÖZÛB$·­¥;­	ÐÒÊZ:ìîÅéL¬íÊeDÒò,¨¦ßgù[]ùúÊZ?úÑª½Ú7{8@"¬­ÝkVŸ%þ½R ÷ïgÙoŽýÎjÀ´¶ŸKîoCk6N0Ài!r=ªQ°5:èn!’ùÖ@M·#»«PÑ^ÕòÀšhíe‡µ—ˆg  uÄF­Árvöìü7®ò¾jDËÄBµDÉQ“†°6¬¹Å.|æ?Bq¯]‘5¤<F
3’é;Õ¬“¤ÃšE€DfnÙÑ«}Î¨q•Õ.\€Õ~õÁ/., 7^}þùÓl£GÈa€@(Åø*$8’Ùqa-¢T£;2‚žÐ(ÌPÅ†ästA›‘Ô%»þ/-Ù¨P”¼–GãJšSÕ Vp•Ö¸Žœ[Âazû"ù˜À´Fäÿý²]ù]}é%ü k/?€cÈŽ<…3u‹¨ÆÝ²
ÊWÞè×5Æ‘%FZŸßìÌÌCn§e}ÕŽOh4Ri»~X-]¬ö.qqá’ªÕ..Í..îXxoev–k(fe|øÍ?$Ë`—ÞjbT@­<RÖ]¨9X­¼™qéÃä7ÉkŒÜ_,k"ü qµäÚº¤5'Á‚Io„í¤Ó™@¦Öy‹„žjÜlóûÝOÄHïÔ_Ìæ{á±	•ou¼nxk–†ÏÚãÊ‡„t…ÙÃ[Äu/‡²5w‹Ð|W–ŒÆf~|ŒîÓ˜ä—Ä…m¦‚bßÏÑEì:ŒÖ±š¦ÓðZx=«;@_–û¿ÆqÖX(ÜluxâÄˆñ3 T›"|p9QEUTý`»„ÜÙ³¢{Hä/*ÕšæÔGRý*¦h7e)­L´&+þfÓ¹i½Ö^ÜküÓá/(òä'ZÏ*.Ói·(Qãäzu ¬EXÉâ1±Ás	ÖªS%kRZ«e5V$JÜP=˜SªšwHÍ‹ß`SÜ¬­šyäËŠbíÐTXãNxL®"4aÆ&æZí,,˜ÍY•ärœ'D
Ð
ÈnrŽÃåf/_^\Ð?Ži-O™èZZ;Vc»µF¥Ýàƒž©%‰Z›È™Í÷ß|ÿÍG÷¡‘)×~uÅf íQùšˆ†È¬6´l=îPæãº„5¯vpêòY‚\kÃHhæó”´‚'ÚÔb$dBî†ÖöÝËï:Ç`0"U­Â®t¶mîBqŽò?šýO* ³ kJw#!²gÅÚæ5kÁ¸ÿÁ’Z 2&¾ú^¸oí’ÜÒÖ„e†_©àhˆp·‰rc1àÛó¯H¥pËC¶†j½x­§°¶‘´Æ«m*­mT´–VÖXz×¬¥™-Ìƒ×HbO#¿‘Ý‚µÝÆíèkøˆÖ\\ëÃZ?úÑVcý´œ¶ó³°šÜú•I­šâ“Ö]íaè)aµ¯w?Ëüú×S¨æ¾"P“‘±kHÎ[Û·XcÝ2¬mÔšïÈnÏ ¨½2e±©€Õ¨³&kÏ|ÔC,=`µo\»vC tmè§³³¸\“n&ÿ~ìß"¦V celð|Va¬%o¹Fn"³ŠUÎ°©aøvúûu¼åŽ™¸ÆÀB˜aã‘®–°Úõ×¯ë:k]í¿z÷Ò2âÚÒ«Í¦ôÁš÷VÖc$gž¯:Ltô¼ÀÚ°,Âó!™Þ‚pc¤JáéOb”×h§A”­œ‚‹ÉrC~Ý*9ƒUªÓ3-W³#ùù+¿"òâÞ
ÒšÁZ¨Z{é%¹÷“yè±Ç µ‡ÞxãätÍÒ õj9_DD ³ +Td€&\+ŒäØP²†hpú­©©.yÇÞ
åj^­6¹NVSq¡P-U¬æÄÊÙ$B¾‡GÿÜwœ]šŸ›e™á‹ ^md,S¥°¥üHÒ1…d·j41YÙ®œÑãFØæ49 öÜ ]"C–zežVWeE³S{ë ö·|˜hÆÒÀö¤¥Ym•ÃœÛØK4›µ+ãX^Œ#«É:5(N3®–9§™¤~ôèlHe¼U*kÁDÁ$„'#º°¤/N_£¦ÑõY¤Ïqx…ìD:k‰yTdÄçÎ ë_ Í¬÷á2s‚ôcÄ,XÍÞRÆ^J!ð¤r6PÌ@hÒ¯4³8ÑGKèÌxˆš$qÀf s³“=©sÜß¿"\…ãøé¼Ç€5“<y
 V)¢Í&Æ$|kV¿[o7Ä7Ùð”*{ï–2zo²[õÊ Y¡ÛQ;¼'x‡âa(·FËì¸Ô—‚_?¾@ÏLÖ?Èw{ªê_[ßl"³ØìOÇçY2ì—¯#˜’
áVk”†Â,•Y|¼	ÖØá”â«YšýEƒÎú<Bt'.ãÉ³dêÑQv&€ÜÏÞ7+=ÜËÖz7ÇÞ1RvZ«¯X_«¹ÚBY¾™)!å+ÇT?§vöÜ‹_{úÍ7<*=¶Ôêp€>kû kŠEmÞ*ÚòÁèL•jkkªTpÍYLC*‚êæSnþ¨t“µÞÂš‹zë—Dy!òŽ÷Åj%Ò+1®+¶±‹œV‰”‰ÔH+Ðmñ©Ç½!öXÓÛ-zóKù4®±ôˆ´«HoIÁc®õîŠíIŠáxx¿# ˜vÉ4úQ×Ø’}íØâÃ¸VZSiXcÝ*¬­:ýRcÝŠ´F”µ­äA©1„’5†»b›g?%Î,LóØ#^·­%ku}­kýèG?>BVÌ|ë#û,­	Ô>ËJlë„©!©Ak`Ê«Õ¸”5Dc¾!ªñQu·šb'ºšÖßžÖ³Ô'å†ò°Úè¨’ !5±ÂÚ/¡fýÕ³ù=5ÄV|ƒX»qþ§ççÏcÛõ÷yU¨U‹Vœ¸‰ÝÜ«Ÿ±òd»Bp¦"@»"„‹:§`¹J3.ëÖšlð®ë¬e5Õ«ýØ=ûÿô9+Æ¢½ÚÛo_¿¨†Î¾³|óƒ_\‘iÆÂâwÛ¸6¸¢fÂG[ÊB›9õWÅ‘ù”"˜„×åùÙí¢‘!5×ZÂhž¢–ÑÑÆ4'FG!“×‹0[9GdŒ	%mxmT55t*ä¯¯ÌÎ/,-. kžyZsÃ‚€5hí¨­=vèE—gÆ²Ü=VíA£ÁN±Ûƒ¿È§4dr½2¬åf^›ºý­i«Ý>™T«c‘õÅj÷wŽj¡X-d@’ÉÎÊÊ»gçÏ..’v6;7:Š¯åÜHYihjÌÍD2Øæ"2ÀuÔb8â¾#YÞ+/l’Ð‹ÙEµ0'MV¾îZ­TZ…µ8ž´LGæV§&ù¥ÃTTækö“0‘Íañ,±ƒ¤nm¬b{!’´áž’!Ô~M*™Œ™âÑ†Ù*k%bm¡Z’¥Ø™€_\bCIÄe¦%èCÛÀšhÍó*)‹c¾†ÌD*FmK±5Ø6šs›Óßk‰nWÂ%Ë/¨z‘Siì#A¸IHYS©“µ3¯»yØG×ÚÌPSËŠxÀNz º¨)²Þšì@`«É”g5Lk1"u¸~ÈmRÊZ¥]óæbh4Çwž²ò?>4Í¹y5‰G…éðÖ™836Ž$‚_0˜Y§gÀÁ3ÇOR³6~ÐÍƒµéÚAl|Ôþ5ºËUQ™¡jw8 :·(1aWm3ü»)^)A²œÐÊÙðF¬^RÖr9³ä—v–S¡¤Gä¤·¬UÕ^Û×ù¬¤ËsRß²Qyî‹‹úÇLFDk)KH×ÖR¸&M	q3Îè}ŸsÃ$>D›N°|[m~mMÖ÷J5·ÕöQ­oXcµusÿ/`³ê5.-RÆy:([HnAa~ó½°6$w5ÍøîV
ÖÒÒïe÷‹RÍ rP¢«þH ^Ø1“˜E•k‚µ™ÿ¥Ï›tXƒÐô¹4ÊšÔ´éÛ4©…­$µÕÒç­´ –,aOü•bæƒï1¶Br£Ô6ßÓø,dAúÆGo{}ÇÇÔB@X©øMÓ }cœÖ[ZëÑhÍ—$2‰ÖRîý½«Ö)\ÛX\*šÇºLH7ïÐ˜HQ°kf¶3»C;øú{ýèG?úñ»ŽòÏAM®ýÁgD·OÓ^Ök€šuVKÌE„kf-¦%¬£iüv µ4ª9©8B+èÇ°»]9¬m½\ÍQ±wDÃOéÖùÜíÝ1åý°ey{5ÄþÞ³kpÊšÜûÏÎž-Üõ]e9êú.RÁ%kÚW:V¤ùv'4@:Áu%c|Ú`?m’uW7X#ä3ÎHˆÕ¼¿ÚcÎjfr¨^Ø\Y­¼-?ÃŸ/|øáÊ‡Ë¿z÷âÏ_=ÿ]W7ˆØ,¼?×Hbuê¾T”EåÚkßE…;Ê]®écÓEXM Çm•²ªè0î—'B<ìÍ e1"g®7¹n§*ÛD1f^Š[qîìlvñÒÂðìÍ®,¿óÐÚÛoS´FÕÚçþêhuòÈ‘£ÀÚúå»
à'×”ù‚Š†ÈSƒ|ð„¤Ì‹W‘±å7ÊóšzíäTn×éã_|M¤æœF„jµ^ÎjÕ.$¨F×ë…•÷.ÌžŸ*/\\YY¼kvñ‡ùüÜââÜh^Yž„;£—G²òì‡Nw”qZQ‘šÊÕ^¾6œmtgõˆ³P½Ãc@AäÞ‘´ÅkÀZÓÓ ];kµ9ÏhMK*ŒÏÆ1úfçÎ»ÑÐˆJfŒƒí6 †â³×@ŽVÙlc{[V	‡w¼@*ƒä²fQ¡k1b“˜È››ôÁÊ_”äÓu4—±»Ä+ öÚ¶t*7$6cµ$R§9ñ­5ß¢™1Æv§(+†SX“«=HÛë‚=–â¨w&(‹‘Â˜EÈ,°nýcâBõ’	Ï¨£‚µ’bÇxìSdÇÊÝlsXc€õøD0bC‚}²QôjœÒ„´‹µ‰»Oº{\Ÿ]jÝP©Ò¸JÅ’'›0ÏÊ¦ððÉ3§Ž?Å»;ÕŠÕÜ0’'Š%-FB8ÿ~³ETÆnÝò8ŒÑ²e•òMVÊrå÷b5¹D
Ãv™>&›b//!M_*¯šê‹îò¬	­•7XÙ£Î‰¬H-kKµ ­½¤µÚZÒnÍS!C¨Ô¯ÁP”©‰‚ŽqŒü…h»ÊÇß<à°ö¨ eâ`µð»ÉûÂb[<$®a7¢kd¹Â&ÿU[H¶ió~çµT¯µ„àR|F¬÷’Ü´bMCX¸–ñø^`ª5¯VS5ÐM°&¥^³¥%äöxîÏþ{¨Xc€?ÙÍÔhë«ñ1m»¡½HH~”E ²žÊZÀ²^§ù!×ÑGŸ„B´DS#‚ñcÐ×ÖÓY8ÄØó‰PÛHYû­ûYÖ†èo‹¼ö©Í¤5"(k½½ûYRI¾láœðVýñÁç÷xµ&sQ›„5ïXÑ‡µ~ô£«gk÷î¬ÉÒHÍd5HÍã3ŸÿÌç?¬™$ñ°XjÁjdAZlŽjd"bòqâ…ÇÊCÛÅjAZÛj@j›ÀZ>GvÞÉWÓ¦È|#WÏ…µ£@ UWXAZj§µkFCìkóó¸¾G™˜¢5ò»{9­áåÏŽfI8µqŒËRA; Y¥]‘*W§_‘Z¹ù£mÀ494&>=ú¯«}K0ò£¥·©7:þfåÂÊÏ—®,ÿÍß?_´*£U>¼	ÖÐH|b`Mh¡¶º¼Åið„È‹@KÃj÷°”)b«q‹†Í…¡Ä#ˆü.ì®5aL2biUÙržÁâòÊâ}s×5“Öx{7¾ò•/ó‰ÖN×~vô$®=4Jõn.'åZšµ(FX+L7Èí	Y3š»|íð±Ükojà™³ZZVK{@>ëßñÿ‹àùÿØ;ßØ¶Î+Í3ßöãvæEÈRe3qL'P˜¸¼½×ŒFq\ÆüãÄ m.AC©×ºíP@PÒnš`’ºŒìÖn³é`;BÐ"Qã:+Ù…2A
©Q#Ùð#Aªb'³ýP Øb1X`Ï9º~¥[ZcO½ßxxï{ßûGIYÉýé9ç9«J{,—ç/]`wmíâýóÅ‘û0¨ÄGÄMFÀF!¨üCÊèhÊwTeö*…²9ù—9„$Ùã×˜Œr4Ç•%6æÞ‚pÖÖÖh-ªÕA„
Ñè¶ÒØØvã¨s©º†äú‰YðŠ48¡r«©©©I³©D‚¸I4Žƒ’¾Ö<Òóïª-$ªTÑ‚0DDFWÁH$9Ç+xOr	Õ<LÅU§kèªÍl(œJ§œ­XÂ£—y¸$/»BïØ=$YLÇ<çÒÀL¯²J©\§Êñ&Ò$ÈŠåÉR'/ìÅ€Ð›(OPË÷•Ý*Ÿ	¿¯2¬Œ‘ô8]%º­I&RÛìç%§$vKÉÏœÄ“ Ÿ-Ü&ø˜ïqZ¥H¡±MÚé,=°Û|æ”ØI“Ý?Ÿ¼T·Ùn¥‹
W3:ów¬µñº‡•Ì‹ŸœKD5EÉäyþõq9™Ô$s_¤Õ53ðÍúÇ«¥¦Kq÷Òq}QÎ<\(°ãÕpÊŸQŠe(êzžWÍrêX°úvè,!7šŒZ×Ø˜¨UB3ÞÆ[Ò:´D¹`ŽQ¥ÝÁ³ð™R a5ÁSÀl?ek{öŠàäÉ¾¥…€a€—õ¹,ŒÕÜ‡‘É&ÜÊúøj¤æ“ôt(qóÅ­Ÿµ jþðyˆÛÿáh%"ÜRÕ¢
ë°v¡4x
6¶šÅ?ûß/†¶Ø,ø¶3îa”5Í	&)ª1ô	rƒ¦¶•²¦Íu•5¿È9ÂÚHkÁˆÖÍ|D5Ò}[móiö7BjÀ×ëÉÒ/2¤–V­eúb_×¼keí®È–í²–loìË¥¯éiìŸºj©°lëŸ`mƒÄ­g5ŒD,à²g4¥Jí÷Le+"Vûi|ÅkÕ¿h°&€Ôf«³ŒjýQRS<­øÒvã.ÖnUµ¹ïâÙ,û@5¬vúÙâgøÄ«¿"èô¬R±O>xwi™²µ•WºÛ¼äÆ"`Í!y(ÏcŸiÖ¨bC°ŠìHµv£ÓÜ·Uš®ªÑä·¡ Ù0eµïÃ³ÿûÏ>tµ>y‹$H„µ­«óy¡Ç?½·úõWòyÝÜšmžÔŽüÉ­AÌ&Så>ŽS©6—tgÈîi4k(gØPN£Ô¿‰¦ÉzÝ|"îHÖÈœ›“ÿ‡Y«E1‘V;#[póC(.®.”VßûÝ;RÖtßG¶èK|h4¨û›÷¬¡S>y˜dÈãÇG‹hfÈkÍÆÜ±‚"m¸!Iu0ŽcÙO?µéâ	ðlZˆ–-VsYí:]°‰k­Õ¨Ê¡.çW;ß(”G/>´`†«÷ã¶Ïß¿ ­‘ìÉ +eíÀ[†ÃŠîã©Áª;™Ê":Ò%ç±¸NÖò”–èÓ6XãcóZ5)3²<tXKÍùC[l­á`ÆŽßËÑ¦²uª~ráIó¬G
Ö(cc*rÃ-ÃÔ"8…	Ïß5\0O %¥'X½É"——`©¿YdN]½Ý§T‰2¥ox¦˜-ˆž1ç€—‰\EOž¬1dÎÇ±±/Ñ¿ÚÈ`j±-3ÍË”ë¦¨  YÂ#	Î©ÖÍÑ’IðÉÔ8uƒÊPÜ˜D5èç"»û9DvÝ-R,Š¤F°‹´ÆÜujW¤3jž”ÀÙö·yÙÁ3g¦ª4b ÑôÉT@¼7ŸÕ}œœU;Ž¬® FÍæô	¯"/£• ky‰njÎ6Žr5y¤LÙWø’³r4¸Ë|ÿ‹d4Ë0 æ­¯ã­Ô¬•¼9ô8°a1‚_§g×o,Õ•EyT:·/KÿÅ&Z;gÚZZsumFÑ„É†6sÛ¥%~†•s	åk)‰¼§Î¢«Y½Ú‹÷cÚˆ°Ÿ9Œv„`bX¶wc˜S­©¬v­×Z¶ô,2fZì€³ôºÛ0O¥µ~¸(Í¶ø°÷ßo‡ÍpêÕL_“äQ¶Uk	Q±j6ug(.þOåA¦¸ö 7édJT±7…µ¾	DÔmQ³¶i¸-}¤5)§mjŸf§BÚ£ã™ëh!OÒÑLmÙD?XcÙÀi7ké¥[Ó”¦õkÖ‚´¶•²–þˆ	•¬)úµYcÍd:nÉhÙ=rÕgÏcï~æáO)¶íÀÚ 1ˆÿ_ºñÌ.5‡5z«a×¯ Zí>, SP3]í6JÖ€5…`­Z= L£†ÇQÍIm3ª)ûÑIí}Píïÿ¾¸miLˆæ¬vóÚZL“3nË½ÜØ©°ÚøqˆM`MŠÍ³`ÀÓÀš{A¾ðÂÊâÊòðØËŸ|gqlÛ/ñ ãEEj
w†„ÓÄe.­]+U³ê5é Ó'‰:0Åí´`7fZ“¶MëeÔdÖãâM…%î<¼)’rµ·Hçûôç¯üü÷ZoÿÓÿùt¹[É+Ò¼%ª-±ô“t	cµN4¢ ÈŒ¼©$6<U^Ôx¹ÇXƒš6*÷zÀ½œÕÞJ›%úñE °M´Fo4áÙhA¥eÅf^U6â›Þ<y¡ç>|‡0X»*>5`ŸÞ·SZƒÕ>~’Æ¿zÎÞ±ïö<×s¦Iëí"ßLÍ¥v’‰†fŽ"ßÚ±Ži6Ëj|8–™æ‡öé‚ÍG³vá¼,û×–GÄÄÈÝC¥ù•ÅÅ•ùÑ¼RÈ
À<&K•f#öRLZ›H{dO Á¹[dqDŸ¤ÃšÔ ˜×Ž´æ‚Z­d‰®\¤êD¦B´™ˆ&i—kÍ<BR¤Scˆ)ë1T«ˆlh>0„¡v)i® E„²ÝPãšÔÕ–;¥Ô©È©¬U¬ùI|Ùžú·™„¥b›=“ƒ z!'z&3eÉ9i†ÕâXC óîm
}ªC”’µZ,¦•u[;¥[Gï†Õ®jà´‡µ„dü¸ i^wBæ%U¡Ê“tZ“¿µXµDkÓ’Õíò=ØQ{4´R>k°¥:=-\ì ŸMÏâÛ_%Ó±Ö¤.2nµIÉlsÀ` +%ªhE±ä›cBÔ+ñ¾ÁwŠH6XSkòL]i‘ŠœØÆtÝçQ¬F¯C«-–8Âo$…l…ÚPR3¡š¶Vþ)FËáà_R‚%KU+
Þì©/^,Ï¯®™ÇHÖd¤/­5š3ð!-^GÕxsz2²=§»3¼Ëe­SýÛ_<+ëþGÎbù¸<ïÔ{/Ž
(0{h‹í¶. ™ÁBˆ¬Ý.gÐI‘ÕÒRy-SÂfÌ®jZxhÙÚrƒ²ÆÂ &k_ñ6ØÃX÷Ç½JóÖØÖfmû–
Y‘²¦´xò!-Xce£7ä¼#3…&ì3í'¬·Pó­Ö-•µ¬š®ËÂšfATtæ°4§µ0E?‘ïúœÑ‘ © Xë°v“mÖn¼/v µ®y§µ-i-äAVÓš±!úT¬õp:ý
q¹?‡q›È}½bÓšW°ÖþÍg1ˆAâ³šk‚4êÓ>Z«}þ¾ÏÁr ¿j°ö¨Óš°
Ç~ m;efG«4X{j=’uÇý/;®jO+¾ùôO\~cáò7/çÒNkŒ,7kÅ“ñp•öÉ®9mt#	‘÷q`¬¡¬J+ó+Ìo~÷ƒÉh‘ÕÖ—kî)bEçŒ‘	kÃG«Ãl„fÕŠ	kU¤Òu&‰vEm†fh0ZÒ°ÌGF™x$©dHóóNÏ)Ž|üõeR_\þxmmuíÃ«—–à
ÿ¡ùõ·ä92*ZÔ¬óšá×ÔÄ#4S7ëC¾æ…3X›÷“ÈHl]NÔ³AsŠ‘¸Ñ´Ê5¹Êß¾,Ÿƒf³Ô¤U•éN’dxõ­+WÖ 5ƒµLZ{Â!ÖÈ„|à4ºå±‰ÞOî£j.N¬ïwK<ài7‚Á¾cß­¡®9¦1eî¬–5qŽÍ‹¤ÅjÄêêye=^¹„ßcC‘»e2^øRAã(B›àmYïë2*šU«×€;r#µæläNØv|½+#Cœ€ Ì4…Õ  >î®‰4‘¼£(…5Jž‚¶æá;¡“Z““aŸ‰S6°#GAò#kuÊ¬ «(EÀS5rAd2XSÅ—õ\ „6ÂNTƒ´U+IzJG®	h†pT€9£E‚R¨VC’#0$JBZc»Ð‘9¢ù~U
k,IC°æ¬¦Kmî{s¼|BÄÇï‘•¯©]àúuwdTJ'nÒâôRÀ±V7nCrkœÒê©ªDCG“u#ž0|6‡õ¨n)×šœn6¨1Üuê”>òê™§¦ñÜÖâ+EkôÖ£êg»¹ŠjùÆõNÍvUÔ×êI©V?8­âµ"×Z¦1íñ’’¸Ì8­øt1þB–Q˜~Zù"§¥§¹þ‹öÈÔ5'~¾Zsìy¨ó…·ÁVŽ$ÌVˆõÁ©V“ûÇÊãy·‹ÿ-Ý½PàO×\€×ú™Œ¤´æ¸¦U#ß¹ÖDZª!ê“—’˜Àœ	å¹IuY{Q}ÖÎ>NÒ£•«¬Q¸%_…#¢µ½
7qNSØqìüÖ¸ 5„LÑË·B4›lâµ¾ÂšÎ‡%<kVWcÌø‹0w=#(“ö;\Iè§’o×¾xíÎ
†þ‚5ûï¶ýÏ@àý8¨`MÞí~ßÎ$Íúš‹ˆp€¶›ámKe-Lž…HqMª›1(™³l³ sÎo"µý÷’pH8%mIjŽk7Nw›Qí_ìµHP“¸¶u_l—Ö²ÊšY7Èô‘¥²­!ýëˆ½ÇŸKbªÃš­ÖnÍ²‚?;€µAb·:òÉikäA~ùzþãx€j÷9«IRÓpçÑ£·1®ôWÈ£³wÞ6ªkiþã›}PÍIJ#¾öØc?»üÍ¯±¹¼=hj7Õ›µ¬ÕÊÉö±cÉöäØ>5ZhW
äOvÿ”øþiXMk¯ÒÚÌû_[|÷;/¬ÄcÃ÷/–—ÊQJî™rb6†DIZG+G«.¨uÄhžô¨Ùº‡œó“ˆ‹-™Š4Uò¤[~îØNkæ×ØŸÕ\:â–êÂ…ÕååÕµÕß./üñòòÅ…%Ý÷éÞX‹È#hÌ[ Z­x$A“ˆHXBA+{ŒJS‚ÕÈ´vâÍÐæ‰‚6‹@i;wöJNkø²7ç
 Íˆ‚oQTCÞ¹¹93‰Õõiañê{Ÿ¼{á:­‰Ö°ïOií‰WeIà­yÚã'û~²ïäh	“ËqîÅ¥°—îdË$"Ž–çþî$°&Lc‘½ˆ(mCoµ>Æ" ZŸÖj8‹@²xfÎ¯P²6h]º¸0*¹LQÄ'…Ÿ8Z¡0Ô	m¢ mœe§f2ôçî–ý<Œ¦C¦Ñû—&Á:‹1Å‹Ôëbn³v-+1Å2+_s>ÓêÖR0á‡4	°&Lóq2=æO®dG(NÅkÒÓ¢Š±L¥# Áh£Ë¥A à(¥-
ud–2ÙáÊÐ;UÐñã'@¶!0øcSEãrkØ‹Xm?÷‡ôD?”‹#ûn9hsU[-`ÛæÊ™#[‘çNù,
>þˆ‰«4å„£±JÃ*Þ&\(ÛMôìzóàØ4‰¿)«skÝDz4J›£\T—ÈvP/U`û™ÿtæ`Wvœkó­;¬µc•×µUË‡.—ôÔ";‡9Ûˆ»j0;Mã5aœÓÐ¶fØA»,Jü^&RMQÃìôäPN¦©ÞðšWé°F6xÍ O2	ÊèmæÐS€Í8ê^‘5s•Äü‘(%Û/Ö¤èYaÜÐÐÅ¢5âº&#ÖÄjDJF(Zëñj¢ŽI”uý¨T•Û­þúì‹‡‘	¬‘®±‘	£ Yp_Š´fw-ŒÚÂœ;Û@h·skð*óCJl¶f…5Ÿ…ãõÂQÍÁ»ß…µýU|Œfë=Ö\û·'É°üE„pä¸ö8Ók2M¸í??b·äæ#aPv/ƒöÙÍ®EÕÔ”ü¸Ù-$Ýú±ëmÂù”ÄˆêÎ:nù0"ðšÉ‚kjüˆ¦vÇNc	±E—µ?2’èKj™VkØDk7P´–UÖ2Ukâ-ßfc¹~„óÎwÖÉÜ…µ=ê¸æ„¶ŸÇ]×~öO?3ˆAb·TWsXsV#4wXC[»OÖûQ‡5s€´&ØB&ÖÎìdIÍÒ ÔXû£š“Úc„`i~ñyâk)¬Ý¬ÅÈv­}bx,JŽ•¶!72Ùöí>þÀ0Æï;…µˆs¯­`¹RÚ¤Åó¯È	²Ö“U¿AÆq—ûCEG90Ú&T²1ÓAüÆ™§¡?ì×ë´VƒÕÜ¡5U¼…¯½	lÎjˆGHÒ’,ÝQ½%ÓþK«kkkx@./Ðž¤n‚y N	êÌ‹–&€ ‰É’\D]
e\Æ£ÅR&ô”òÌœ8qâ52é£&cHX¥*ÒšÛ±ñ"_eýØF#“	¥Z1¶psÇèh]šÿäÃ·ÖÞ~ï½ßýó;kBªjÍËÖ×J?ryí0<LéM¯‡ÚÅ] OÒ+÷jjü†ÒÕÛñÔôŽ§ÞDK#Ùˆ¾Æ"|0Z«›[«‘þøö…óWÖÎ_YÁ¯m…¿°¸P’~†gŠ43(m'´†d†Ñ’ À±òÄî	Œûe*2Ž¸†ÒÆ¹°¦VÙ€š.åb£µ¼f¶Ë´&VAL¦Y€4PHMaÄ?™)VÓV•iÖ–yì
„–Õ©¥3©u¬&ŠÖÒBóí‡à¢
ˆÜp¸#°ƒXRÿG»¦
«¥™Š.eiì¨é³Ÿ¨T»•à6‚`GþdÛX‡Å<Èì7Ö£Á4“¶}#Ô¦1kQ.Áb:U¿ëX-¬¹ÖVÜ7Dµ‚ìIßŽŒN…—jÞÑE"¯ÿxz`M¦&'ªÑÀR×ëJ{T°¦|>r»•jÝš™qw_-„²)A-¥ƒ´Á®ðŒÉt‹2·Ùé†¾x†—íƒ³m~Ã‡¨èâåªò“':õÍ×pè¯×í$VkÆù:N&3%M¯ÑšNå8£ùÒ06¤šE$°©ÐsäKd?î;†ojàËô»ÈÑ<WrN]³EpT9Ù‘Hƒ³K¹¡Ò„NùÞ2Ÿ‚ÖH…Ü\¶öÚ5Zû~–Ö<’¸×D¬4ÿÊš
øhTÛO[ÍÝªkû|D´Fºã¬ú•÷ˆ–v/âÂþ#"7îR’L©SVûÈm³¦êbõGFV#˜eH.<|cqf”f ¬Ýûû£·QvMž'ïßC„–$ü¥ÇœVÙŒ’R‘ÜÙzI¼ø¿¬i0ù@ãm‹Öö°xµšMƒ¤¶ÿHÈ}ì§¬lË$>¦‡‚Á#C:WØ¨óh)Ð™€æ‘e5&Z°9ª=²Gm©«œÁˆ3ÛåA«i­¿ÃÈÖÒTYKàµ@kÚÞ±‰ÖÌa„E3,X»]Rë^æŸý“ÏbƒÄ­ÔÕ ²gÖú­JMsï®¬=:5å~ý®¬ý5«·Dc0­îØ1›&@î Õ}QÍAMˆf˜fÃü/Òl¸É’µþ¼V;v¬OìÛ=~üøñÇ¥¯1ù)k§5L(Ö¸}±.k?^‘ä¼, sµb¬^PÜSåâZ4Ì¡$É×á ÿCãŽ-m&ãÎl;P%”“eçQiM×OÔ«-*Æ’|SéÆji½´”e5É…·Ö.|øé…µ+4¢^ûíCù¼ÕyeZKÚ|†CÇí—"©;P›µvÊË_Þ#¡¿õ5™×O4fz…’jOÚ¨pR›æšj†FžÃNÎt{sEaÜHÉê¹v£«•ÑæâÒÜÉÿŽ™xéþÅ+ÜõYÕÚë?Öì¶oÝcmÌb”ù²?:MLð&ã&ò5yŒƒA‚µRÓNP¶, ·4ùa0	š`íÂ*Ñ…+WV
‹k‹¢¬…|\î†Ã& 5uWCC£6­4R áÐM§¸ZØÆ†Àúdœ<ÊÂx~ˆ,Òk¥‘¥<3¿¢ÖèÊèÏ»";¯!ÛÌNFù6¶Õ¨b‘¦1eÍ7gv…}]T·Üdzp’r5ijL€BI;)¬U&-:L`›Ndì·EÊwt5L=Ö@TÑ!‚"©i9Ö3‰QlÖ¯WW2ÄÛƒÊÔ&%-Yo5ž{£&¬I ¨>¢Z¸Ô.L±`ÍŒ5}QIC`ÎÙÇ$ jÏ2"î5M·UWþ NqgIuG9 8ú £©¨Í."å°!ÏKëšmØpÞLfêÏœ:¸þû×)TÛ–Kjuir°_Cg½Vû•©E9iíqRj–CjbÞ£N=¢_²àLJ<¨ÓzMˆ8„àæÂW­ÆžŒXJEÊ8a4ŠW‹œ1Ž°|ÑœüD<ÊRÖ€¶‚c@†¤¦gâ'¦»7¤ø+1ø‡G'¬—ÛS.¯é‰/â+K8­	Ö~¸ÉdZã7”hnæ5½Ø|lušüy)¿4D¨ŽíÔ‘É<bn‡Di¶z™šº¬kJ˜¥æå¬Ú2Ú5Le¹)B‰Z¶…šOlã“t-ìüËEki“µŒÿžÛùÓã£r„L›âðÿ&Ãž¾Á ¯QÈ–€³wpVïY•k´ÕÒ\+Bcš	©é‘&?ŠÃXl“énCø®/cŽ^†céd#…élš é§ÙI§¶	®ý¾òH~T@DÕ\]»Õvý•µ-c³d¤5pmXË˜÷?ÈŒ´fc@567d3’¹œ'›1Ô€5N»ýÛ¬bƒ¸•¬Fc5Ô4ñ™`ÍU6MnœyôÀ(k2ì·øks!œ×Ú;ä*Â
«kNj)«ePÍAí¥,˜®–’ãÍD?]­2V#ï}ûvi»å-²ûÅØâoÔdíÕ_=ÏíßiXûäƒÅ±»JÜ­¡§E°UÂdçèÑN.V'b˜FØü‰½ãî"c(hcÛ¬™oÌ­ž9Žt¦fOœ@‹C+JjÖ†Xc'ÕÕÒ$ÈÀj–yåÒ•«ŸZ¶ßùKÑ×K^ãRÒÈU3emÄ}Eˆ¨Æ´Ó6Lã~˜†Ík°Ö­•zT±DÜ¶ÊS¤W.ŽÒSX¶##å¹2¯Eµ/D£*ßŠ;±þ•×ÆÐˆR07:Óë¤ÌÄ•`õÆå7V>•²†´öúUû#ýKë´ö4íÖž¥ÐZ®~Ž®ÀZ™÷ø$°6§‰¢$ƒñ“;¤¦èípPcM‹Õ‚¬–m­fvýÄ¦H–·W9ô‹+_Z¼²8ñ¥²Jø¬gÒ°&èbeÄYD6#Šl¹býLÞêÓ@HÍq_áèø„¡YYÈ*f­%*%òòµ¸žØ&ÔRX›†ÑÚÆPtÃ†l­ÙÆ­mPHmãÎ®3Õ¦ø§¬qÀŒGX§¤ áÞ¯ào9‹
â’éfÌŒ–º•¨Š¿»`V'MˆìJ ‰6®§åôðB4fŠT&&¤·þ‚4¯…ë ÚrzË‰õ¥5û6ÌôÈÆ¶ˆÁVšê*‹”ê`¸TZãT6¢Ê6ÕF×öÕDÆ;‚±nL¤ž&±U”ñcB€«I…ƒ1}ÄpèªG¼}0É$ÅV£ÖhE¤?š¿PcI~gÎaÙhÔ@>7ð?ˆÚF’¥œ]ÐïÀ±\‚&…ø¦TDe1Ú÷†ÈzV®ŠÈøÕøƒ½²RX3\sí²°ïÉ'©ú”=?çÊ¤ œ+™±?hf³ù×ÎÁ2¿—»'dàÏïnh¤D(­y‰DHQ;é·v>ø÷“	®¥ekf2’¡µ˜ßJ^ÔR,1™®;¬é#úý#gÏš¤HÍûb+LebAY#…îvå;JpÚkÙú²Z†Â6™÷_;·UÂd 4ßÛªÕíÛ­ü#•£_áÿmUhmÍ€M*fåjî_åÎ¨lr»“áßLñVkÈifþçØ&%\TÓFÍ‚L\CÒiØ£¯"¨¬HšÓvÃ,xïskÒ+¹€-K¸ÒO…¶×ïýwÀB¨Æj¨@mËª5k›v3˜Ö·ÕZ_Póq©¥ekBµ­¥5×Ö6±ZVVË¶ÄH¶µ°V±¸`EU ïuŒü+·o¸w kƒÄ n1«©ö®û€5µÁÕžÁÒCÍ°I~|ôÑê­¶ÕðQˆ°ŽÎÂi·	Ö°ùCHGµ@j/mŒçµÔ2ˆu7ýÚb~R˜8vSù'ŸÜmµTê†ýÀáÓ‚5XpX[oàõãÅKç~üÁüðüÊ|¢< ÙËñwwêÔª*¹†’±ŒÂÆ€²ŽjŒÖH¾R"d…•¿éƒjÈr‘.«N¾y¢Þ¬Y j¶½lÁšÄamõÒâC/¯~Êý•:=¿Üê$œ†P`¦ýð‚“CIÀÆECkD·;RJÚUö¥ýDyòóÝ¶`;F¾,bÖh#µFÔ€ÕÄ#„ù”)b¡.f4?^àV¸£Å6è$ç¹Òˆ’±JW(ZûðÃ×ÑÖ®^µúhí±W=Ró<>Rœ>\îOò>É²R!Žn3yÞ¿û–‡X- ÚFc‘lŸ³Z@5éj_ZÓM(uk—ÎÜŠ·hSUk2â÷/ÈŸŸãÐÙn&ºÒ=D4€dì:VòÚˆN¢µáÊ®kKìÊÊÏÁ™O×Ô5¡?‘™p,j	Ö´x8}¥S–4ØESënäFNJ#å±µÈRË¤F*¹€r­Ï™{½Ž˜È¤æ‚& ÉB¢”¥ª„¹r0DÕW}]3smŠo­±£ª-_cÚS‡ep™€ÀBŸ€({ÒŸ—…ÉõÂå5½¨”È"PÕÐ
_ÈÙLø›ª¤ì
|kâ	…ö€>ý{0¬ÍLÃ½5@¨Nñîìó#äo`T+áû´ÎHeë&äWùiÒÿœFgr€6…Ø†ÚÆ¿úÒKÜžn¨ý Nü’ñ;¤¾É±59‹óE{Íù¢LGè'Zlð;ˆ¤˜ŽTöA•8H”1,ªz­œç:óQ
$ÔþqGÀ4‘Î‘»a·"çùBN–G™š³‰ûÿ/-¯ªÌ3S¶­“‘NkMˆ­GÚSk„P¡ÉÒ„ýÄí+“)HíEá°F7ì#k¨iÖomï÷ºŠv-ÂÞ&šßuGÖ´jéÿØ˜ ic†çÂÄ—þP5]{¾Wéxô+˜%$6¬á6‚ŸðÉ9¶íÞ-;jF¸Ö*Iío×)íˆoÖ!p‡Ö`·uT;ô¸¡W`µŒ²Ö§ßu ³pÎ÷Œ¬Œ³Bp¸OZzM
kS&©æÀf¤vè^#´*±Ú&a-ðZÕ²#7^³§¼~[l²þýÖ¶’ÖDk[àš†Møµ%¨eE6C4hmÃ^¡š”Õô¹-r kƒÄ nYüéŸ»ä35|ELeÓÜS U°F#l¤52  ¬öÅ¯\3i«Xm¢ÚõQíÛ)ª½db«³ù_b&yÓ.ÕX²ŸþÉðXá´œ·±«$ïIY«½$X{m¹r‘;™ùaüû“2³Tƒ†[ÀQlqâëDcGa°aå>r€Z¢cb5î¡·YÈ¯á4iŠ€é‡mîAµVkB¶~¬`meùþåß®^0
Y»rñÈ! OƒäP,y€MÃ”µv—yÜˆK GXóD½–¼T‘<Â½½¨"îæT£ÕíÈ;RÖâäA
ÖrÝz³(Ï~™ŒÊ¿0ŒÈy¼†ÓwoÊÁ¢$ì­÷Þ9þ¦· °´5Ñ×RZ{V
Û÷ŸÛY„ÏŽ3ª>îd³È“—gä%â…j‹Õ2Æ"ÙHHÍXpPÃ·eáÒ¯Æ¹rQê™:Ëš—HNÒûN^$;
ÏH	EEÓaÖQ"E9jv|ž7KNÐÀRåÖ#01ª‚÷§këY-d(yN†c´`¢šmRV³q­ù†5œ«æLW«,¹@ÇapÍQÍ¨vhWÔjŒÕ$¢®¤%»¢ãldˆÆ^ŠjÞ¥ÌQ–«*m9'V8ŸÚIÊØÒêÔÜ°1m­ÃÊˆ«ÿ`ÛÏ3WÒŒÈ¾D'X³í–±M¦üY ·@h¦¬šmz*Þ?T<´Üü°V“ç”XhÂ]â°SÎ99å¹«
Ëf$±ÑÅ!ÕµÏPÀ&&çãmÕÛ]’$§&èîà™{,rZ5¡IdM²ÊÏ¬Ò<pÇl¤–DZDq(²ÌVóÂF«ÁF#Fîšys–Vêâ25³Æ$¿´î)-ßfE!Y±\+³™@Lc—Ò·b‰b5Øl‚Äd(ŽS²Ý”™C¸æKvL]ãÙ9‡›ÿ%ª_ƒÉH¦lÍi-ÕÖj=VbrDAµ5«J¤w¹‹,•¢3tÄVP°§yÁšº­íµê-FD6Ñ‰æ~$(jVËe[SF[Ë¦5ÂgÁ¾ßYM“p:lÒ©ý‹Ö\LßX<%)ýŸ4‘á„ Ñ%±aå?×«HU#¶7çæÎÖŠ?ûÙ"þý!	Òu4/b“ËˆõFæ˜Ijañ!ƒkY„ó0šbL„ÈÀYac3-:é‡|výš¥ÇÒ¾×ûÿÖIYÍa-[²Æ˜¡Zˆ›G5Å¥Aök´ªÝ„$¬Æ’É‚ÌJkÃn0Ò¯ƒÌô£V¾£yÌx{
¾ÿ˜`mƒÄ-g5B-Õ`5âó6«1ûêWa5UªPr?ÕØÞTMÒœtço»NÛ19ÛÏX$Í€LQM ¦øÎ'jD­xañ7R ÿ•¼¦ÈJkÃ1jjýãéDcc®õ¾{AB‹nÜÿJõ7‹çÎ­<”›Ÿ¯É@`lìhµ…½w‡ü˜Æ®L±$¸gîÌ&}ËÌ}ÒÅo­– mf®‰wA½©(—Þ;©7ŒÕÆ³këî"¸eüvíü…µŸ›»ÈËKº•6G¥6JCó–º…líê–³›gV2 A0¹ ‹ñ:F
Ü E!Y>.‚#¥–< =¬DtCgi•Mó$ 'rh„#¨`ÖÚº°éž¥†¹ÁåË+T­™!$ÊÚ[Ÿ|ç…ãé´«=LÇ5‡µçžUìÆ8ÿðs‡Ñè(k<5=Q8Ñ(–¦Ô¼R­±#EµŒ±È—7l@5&ko,¬¢\X[;)?‹Q‘–_XY¤5¶€”kâ8ïŸ¶[¹c²ò7¥m<…5pu}ž‡òÜ_¤TR×ƒ^ÏjiÉ×à´KLCk[ŠÒ‚”&žŠ†:L3Òšoˆk›¾¨Æò™MåÂ=þ"àG§ìU9à&‘3~X·êg1ÍJÛÜ¥3¬.Ày céÏ
ÝŠå7FR¡ø> VÕQöóNÙæ1úxºåP±/øñWdÈ!Æ#„v]kÄ–žÖ–-šmb­$¨hXåÒ=y‘NÞü¼¾0…5`K[›æÃ?Õ`E¬]W«Î£9{—ìV§>{êÔÁˆ½
ï¶ÝZxŽ€*(—fÅ5šÜ³‹r¹È[l«Þ¯;Ý5ß”6f$*_ãjör]¬Iø•u©0fÍ—à¶¦ŒZ‹s3oN§–œ@•ZÍ¶_Â^\´Ê5U²TŠv²X–Užã4T+KR“ V(×ä'Räîþi§ìZn©X6nS"dQæ“Ö0X[{[:ý[B·µ×ÒnkÁdD¿ç!0U2ÿV€ÓÙüQÈË[;óiBk8÷cüèÐæP&eéA8…ûS7\Áñáö¿ÜcÐvïfV³5£”1djØ²â›až­8¢mÞâÛ6Q÷JþŸ¦ÿ$’£&C3êœCI“ÿœ©DÀç¶£°ýžþ¿}MÍÃFð…4»G×ÕÙ‰„…Å7>é£¬…1¨hll„eýÌ{§iaæÇXl¹Œ¡vzì‘=w|îs‘gA\"ÙBôaµ[Ak¬7
k,‘>Uke­odŸ¢µkn7÷
ÊÈÒ‰8í.žÑ{Ãë1è‰=ˆAâ³Ú÷ÐÑ¬6«Ý'X£·Ú£’ÓŽ=`\…®öE¥AJÛ~›`í)¡ÚÖëd@º¨&Nqeù••KëÞ"Áòu!¢Óû¢íûTB¥•eßaµ“°ÆmÊ—ß7aík¯ýpQà¥u–¼2Œ¤ÊË»cÃUÒžýUÝ\E†kc•±ÎÔ”`-e´JÕ¼üÙTñ'I²…-øúÌî3uƒµ¸d9Ì8dºZèøìÍ´käã—»ºÜŽ––òyt¥\u‡µ¡N'É'IÞÐ‰E’OºH}c9Ë£ù,ZÖ:€Á .yÆŸ_ç=k¢¬^O32ôWâ_¡ Ô*Î¡­²ÍÓ¡·ÖÃp€ên/¯\5X#~tõÜ'çÎÉ¿ßR!Ÿþ2¨7\ã£%ž}ö¹ã¼ÉçžÛM3ÊjžúÖŽòÉßÚQßáššÁÚ:«Mcì¦ÖjÎjÁWÈóWH\Çµÿ«ËåÅd*W}ãX$Ç%ÍËÔFGÖ¼ŽHp€#è*Ç[åšß£èUŸ"ÛKâÑñ¢Úóf#êš¬Öéq]7Öœ×BµÜR4	uMv³‰¡bM^!¾“Á’ç±©ˆ‹ü“Uîá¨£œ˜¨í¶«o9¯ËòA­ÿ&;.Àšú¢Ei¿jƒ5¸©_,f•]»¢.ÇNúµ¥ª `­C´Ö" ˆƒXŽ@xÁ\DŒèvŒî»‚GH„dÜ2¶…”G5å°Æ^¥â;qMöö~]GIÈ6d**Æj0[›×¥¨@y\c%q¼9ÑZâVž¼'if¼møëüš`ÙêÜcÖ
Öfaº3§îÁp’Ùzc÷™>¹Þ#ZÆÿªY-ƒ3Ž›8ùóC¡öÍZÀj„¿jwa«‘–Ø›y3A·fÙì‹k,ò&ñ’3úÓÚ°6¤öÔD4P
ßŽQ~[ÔÙ|dCu«!¦ tü®Öä%	¬I”óz9T6žzéîûç×Þ&Öæ¯düû7–­ei×¢WWGyš‘x\oÿíãŸýõ¯Uµ¦:µý8÷{Ÿµýn¶©ÐÛnYY9Äiê#Žœ¿ãv<ó€6¢Ÿ¸æ ®õ­Pë#ªi nÄRõA±—ÔãídžéØDKK<-tîd$H‹ä%:£rµ;·_~þ¥_½ð³ßüƒdw“0V¤=xäÐ^m•û˜:?jÙZY“tt<sXK+…5"œÊšŸð#>³-CÙÂÕ’ÔÝuûŸâ8îˆ|6¢ÚÖ-±39>Þ<¬Ý\ÕZÖ»?“™i‹í¨–ÍƒÌ6[ÛØ;l·Šôré©Ö›™ò^­“Ãƒ®"›ÌÆüÏ°6ˆAâÖÄŸü9	5MùÔª™®öù¯b,‚¤Ä5zÒÜy@Â²ºÚzä5}d5GµÇ6¢Úˆ«¬ß¹xç/¥«Ûþ[¡«ÑGû¶«fíI«¢"˜­=ûð³Ï¾½ˆ`4Hœû‰×ê^<wé9˜©["eÍ§[EXƒÕØ(²ÉRÅ2cÛTÄEQ—,ûUïÒ(• ³ºr“$T«9«íLY-´“i?Xb%&?_þÆ+ßpÏ¥šYeZ·e°·Ú8oYy±Üü»j•@Nk ‡&ªª$­µEy5jÑ&@KÁh­•0Ã°¿ØSÒgœ÷¦ºüA~h¤0!ŒC¢*…¹^o®„/Ý»ï^þàus„„×äiù«ÀÚc¯>ñ4÷~ï¿ÿe6â¯þö·À“&	Çézö:Ú F¤Ó.«eŒE2]°µ_¼«­^Ñ]çêø"±/*LˆEl2 ‘Ï
„LeR`´9Í)R]’ºŠh°£";vÜzÄam)Ï¯šë-‘cÊÝzK!{<J•’<'‚¡ˆ€ªÊ)yVLù!?ì‘N)@«êÒþ6#ÀÚµ+`21›VÓð¦Ì’mY+šLYÍhYÏÃÓŠ2.sëp˜ò¥Uá|ã,'ÆD*þnÖS"…<k Çà!ø§°oÇSZ3í
–ö¡:í§mIhœO#fÞïŠàé[`Á« Mš³§AÂs¼zñY•pXëðþì·R‚`Mâ(yÉ‚4F¦ˆßKŽ<ufvòž]§ž9µk×©ƒRÖøÚ5UÖtýlÛþzCíº±¾5ZGÅi%AVT‰‡J$:·í'$æëë|u+€0^,ÖLbU±Í5k¥¤¦ÄÆ¤Ù£®LØ–¨?6Û8…µZáä’¸‰?<´&9]‰”µ<]ÐÈ$’/Fÿ&Òz«Imáb%_ÆÒç8È«Ë£ÏÏÏ_Z_YÒÚfZÖœÖˆ^©WäÁ%Ô(.Ö»\REc4´”oÌþþEåAž¥ÇÚOøS©±·«dÖÚîT¥¬…4H:èæ"·ßÅÐ/Á2"Zv7ö‰Ài7¨¬éÁ]ü!‘Úº×#ö!àX4,4­d'ŠlåxÒc­Üvçöâó¿zéƒ‡~Ó9ë°ö +’¢ÅfÔîe@Æ,ª±ôSÖ²jÓ\XsKÏhÏ®±í×`¹]‡ó#ò&›g³²¶±dm7ÈL$Áææ…µ­Y-„^	«£Z×¶nµæDži‹ÍºÕ|Ì(kLB@á[Fê"Ã¿s÷™±`w?›¬bƒ¸å¬æ!Ã~V÷€Üå°öU`V3XKõ/K$n«VÙ•û£Ö`¹QV¨æ¤¦xýu†O.Aj!þu¨Æc¯ÙÎ¶çöMœþhbüIg5´53—ÿþs(?ëö"á/âÆý+/w_^9wåeÚ:É»m“”Ö¦mœŒù»ÃÃÕ©«†‘ŽÖIaMs…Y‰w[ÚÔOÌDcyöÏ ­u›ÍnÒ\”ÕŽgÖÎ¥°&6¡dmõëîÙ'üCÍ‰QÞjØÕ)y­ƒëÈ£¾QGQqæ bUZÅøÎêÊXý}#¯p+MŒroØÖ†Fi±¶SÙŽ²]˜‰uCYœ0X+¡¸É×¬á€™ÐÔáå••Å•×‡¶öŽiküÿoh·­k[ÐÀîÙÃ?=üÀáÃÇ;GkÍ¤–Aµ>Æ"Ùjµ`,‚O?¬¶vi•ìG¬2ß¸²²XZ^\ ¶ÐËÊ²)ñÑÒLM‹	k;	·ãg¾±Má<¦ÉxêË?$ÖE`SÙš‡_RŠÕAÆ" š¢-µ’Z5¥²ENe†l"«¶&¢)kŠ¶Ñßƒ+§Øé×$”“°†ÍàÔ=ÿ½3Œë¼Òóý·Í-P”B„@Á‘,ÊC[ž›{=aD;æp([ £ÑíÐŒØµCbƒÀ‰;Fä¨‰X'Ët]y½*×ð¢¦ãF¡,YµÚ`iÄJXê „
‡»R@Yý(à"/
ôyÏ™Ë¼˜Œ¹–~ÎáÜï~÷›;£™‘hßgÞsÞ“Vµ°®;è²æL¦LË`ÃP€kó–"~9«Q¶ÌùÃ˜ÆÓ*D–jIi{ŒZôö©9þ³·wS‰ìÍ1ó¨Ì„Ÿ5ipu&þ`m8ÕƒM«ÉlÙ°-V³Çµ¡5¹õH{CÙ	ü–FZRç;SUL3Ô’r:­”…J5“Ø¬…¸épúÞC¬V‡¸àÎdZZ›7H˜‡Öæç±åÍ q=•ˆ)FŸžIŽe]ÝºÌƒÉ‘m[S5Ó­é÷°Êû*:Œg§ë© x2Ój|æ…jx-–bp«ÓóÐ!õIŽÃcj	€MÊÚX<1†_?Öý’µ‡púÁýÈÓW*´>¤ˆ”IY­²¥§©‘¶¤°gðÚ”	]¯Åµ+kyi-ø÷›¶fþ‘ˆÎiJ¤”Š‹HÏãŸïŠ'‘ÔÕl³ZµÌ°^æWªêŒ¤¶b#‚´FøU¬÷Ï¾­%L³!_ÅÖ²·Z¾v{b˜æsâö¿ßåÑEQw¯D¤´U"èìÔÜ©Sp»º+ªU“J½ko%^xnéÅJ´ôÓgEjYÙš³šZè”ü[¹A*Âj@8(¬¬1sÆŽA5sBÛRÇæ§d Gh'Ií>HÍ˜&kX,:q³hÓ;GkEWÛ­+n­Zó	Z¶uÉ·ÅææYúÉ·ÅŠšOÚƒZ8ÉwˆkFk²=,vÁüßýát¢èÄ-`µ9ªù£y$ãñûGŽßy\}°EX“µˆ`Íõ§ÖÒÝõ]Uúªq3TÛÔ[-ÈjŽjÔ×þúÚêoô4¡bí£Eo;È_ý*xv ¯~öÖ€`íÉà)h1}bùÜ¹ëËŸ¥[-zJ7Âš`íÈ¨;uj‚&ñ[`ª¤Ç)Fú§ÒÉiä·ÆøÉqô¶†üN²y›ÙÀjÀZ‹nØbµÕ•‹ëØ\\½±~ñÆSv½Û þd´'xHkÅ.°AUBHõ”+Í(v_y`Œ›o¤1‹±Ÿxrœ§òå8Â¡è_á£‘ç£®¼”Óé!k3Ô¨”˜1ße#Ï.½«<HGHÄµ¿®}g×¾Ì7õÄ½ª}óÛoÃÄ Á7÷ýå¹¹¹¡éªe9c‘My¡[XM=°µ¾²²¼òæ›/þdœÇÒ]«ý’ÐŒUeˆ>ŸõR{GS_Ë}DDTKì}Lå ’‘¬ÆIEÍ`O#M	ÿ$AZ#9Ÿ¨9«±1J¯‚›äÊÔÀ-É`ÜÎjaêg¨óæ0ŸBÕc…ˆVØÌaB;—ÕS“kžÇP¢†Ø,7Í"+Nd‘ítzÁËËŒ(Ä[bÿÔº£…"¨+z®¶yù]jü‰ý¤¨¥ƒ™ÿc¤"¢ÀgÁ²¥á>·(j	n!2æÛ€5Â$ïx»‰½*ŒˆÚ8c:–qÌyðQš²çÐd¶Ð}ÍËû¨2s×~ Ê¤òL>ºg?°öy´Î#À8Oƒ¹ÿþ##òö'ìiåAÂ'Ùßø.ªI’ÌE~/“‘È[¤>Ä„Óµ¸hÊšüDô†È‹†ßÀ©ÙKHï¾˜6Ð´ÔV®Khd°VæN” 6 ŸéLKvT§êAúJX#ÀµAqÁÝb9y6Æê@Ï\iÌÖ­máÊÊÊEÁÚåÖ‰¯e´¦˜1Xóîß€òÙ‰Ì¼øY`M¤F<ËvŸë4sAN#ÀJ™`!ÒwLáZkT?[éŒ±%¥m]ÈqÚ6¤5{< 3XSµnÐŒ Î¢	þ»5Ó-ˆ“œ†e¥×Îš˜‰N'¬.<óÇ²Nk¼wÞt3÷Ño×4´pƒ'n>9Ã³lbƒö™¤£c 31ß5×|9`œ3›IjÇ›ÁK€µÀj¿WYkk¡`í&c·¶P´&Œ™­•µ@k-‹ÖœÕBäÜû?4§“/ÙTOìLPÓè“û¯þ èD'n«	Ó|ãL»ÛaíÎûÇ¡5XMœ¬=²wª7$R!ÁµîÞKß¥­šE>2ÈjÕŒÓ®jX»qáçßMÉj{[gANMu¢©‘ùx"+[c`§†ËzMoåË‚5âxgáÅ+¯œ»þg×ß9ÍÌ4RX­\ŠS,¦8Òå0åj¢'3ñ˜1ÿ>†„5”µ¤“ýÈìäYa—¬‹ÑL`µé¬¦X»òâ…ËkÕn<ucý½§°äS¡55Ô¨=4Öº’DºEàš—¬qc”xþž‡7pNÙ¦/[ßÝ²¨"^¬§$ÈïÿõZ“c7—få}åñ†Ä%»Ì3Fc;@›öt\X\þÛ÷‹Õþ¹Ik¿°¶&\£ð›ÀÚ·ÿæÄÛoŠ·	­ÑgŠo¨ÖDilDÞX$(_Ùj,«áýH
$;m}Y	]Ë\z.#ŸõÓHjwGÜ…Xr·¤áu¿ÈKW½eûe®F¬e›ùï¹š¡Ã8qVct^‹ùh‰„~u†iì‡'•|šYˆVóâ3™dë©ÒÜRµÂãÈ¡Ü°’É¤¹aV`>6¡†£KÕšck*«Pfæ’A,(¦¥E8Œè>c6{¸zI3¢ÚH´uåL„&ûÿŠ² ¥¶Ì2ÕŸÊ±ê¬fue®¯!ïV˜o¥­ŒÛò) ¬ö°Fx6T36±ZæçÏ£½ó<¯R#!XmVR)jP–%%ó —]mÄ~e„Ãa{kàšúØéãùDƒ|¨ó„þÔXÎv`èÈþyü]êzÅ†a*ˆ³?¯:0ò³¡‰ZÃÊé$îÉ®D¯¦©¤UX˜æÛˆ¤ ØÂRF!o³ÿaà1¡gpw”1Nç?I‘¤IEL‡í8S+Ä8ŠpžàŒ~Yí·’`yÄ¶IncW.QƒÕj[«²1õ6Ú‹ç/,ž¬—óŽ[µµÐP@°VÒ7:ê²– ÓñRçñ!öþj0ýÕÄiÇØ°¹½ÂÑ ™ë¯fÁ¼EÉšÃCaÚ6üEÚ©kaâ[[bÖ|Ð¸çá¬èY&Ï~nÌ$¬ÍœšI*j®æ´Æ½b:2T{9šI~sÇâ?!/zà	©ê
ð•Ï‚‡9§Ç0¬¦Ø’ÒÍæÔlš­„ƒàäÿ'rßg>¡¡5¬>­jÖ¸µ3	°Æî#ø‹0~hÕZPÖrÖˆöæýù’5HÍrÊšv¿¸mCÚòÀÆR¶¦Fk”lê™¤1^¬uÌ ;Ñ‰NÜVû×Hi¨i¨yÁš”5§µ/xÁ°&Vé‡k)¤¦jµÀj-e5¡š“ÚWß;-@»ÂZÞ¼ŸÃ©ÞÂWÿ×÷?÷¼`ÍiÍÚaŸ0X{¶xüó®¬©‰À;ËÄõëËK{z6áëU¤3ºDfÝÝÒÙÌÒu¶>]2rŸ“íÁŠ•ÅÈ·{|L’’ñÙ“'OABc¡v¿”±šØ$$A+§®\¾¸²~ñâÚ•WN×«Ï®„ /,OÕÒÄ°«Á¡`VÖÄÌ Ó…×bà-mò•‚lµ	ôô‘ÖGï·ˆ#Ðebº&H«W'“q®ì"6N1ñS§x½0^™Ê¬æ€µk×®é/ÏMF µÿ´µÇÿò“ÀÖ“nåO«ì·?ýü½÷¾6CìžÞmn"j¯ªc‘œ_ÎT{Ý}EÖ.®¬ÒVm¯þþÕÕÅ¥¥wò® ²Õ 	¼ä¶`Õr9ñÊ+‹K9BFë'5rkð1ð IŠpœÃZ©ŸU'8€OJ¤h­ÑøjbMÖXâ“¨\Xó¹yäÔ4ý[ ‡eßß„{ûG²óôônÔß4± C‘5ö;`3XÃC5[ê—-¢PÆ#3œ!ëÃM¢ŠXp½Íïwù	.¾!žˆvÂ™IŒ-+N‡–™!“*OÄ£ˆL_3ë)yMkS¬{åµµ¬&mCàiO×,µ³`b½²A¦JMô×h/5ä?êP¿Ÿ,ñ
øÛ0¬­Û=z?®ÐA}RÖJ ã,ôÑ:‡:Âg¥“äŠÂ†äV#Ó9ž,¬±MLë#ÄöÄþŽìß‡ÐUÆŸ‘Áè“Ô§'$Ø'<­"µ¢c*Ê™ÁZ}œ%Ž9+AÚJtÂ¤3¾L²Ù¯ :`0 qÊ‰²;8_RýªÒ¦Ã$ð’šÇ©Üg•²<È–‰Fk9\“tGE§ñäùT¿A¤ñ»:­ÃRM±}¬©jí¨·†¨‚#…¬û9Å|FÚ8ŒäÀ,Ïf~Oþ@Û¶­aMö"w7ëÕÈ€D<3RãšÖf¢]Ä*‡ÊŒT>¤"gf ¸½•/îí]üé³¢5}u…b´0‡l¹Ér„Æ$L7Ú£e¨-d6Z,K¾×*Ú}÷Ü&Bm	kAZƒÚk!¶0–“·!­ù¢%ª¬µòÙ†´v[°i§¬m6Ù¾¶¦ôG'5?HÛrƒÐçþNt¢·‚Õþ>Ö6| 	Ø‹'Ržý÷£©	Ö¾R¢ÁFL8bvI¨H-—‰_¿Ëj Z 5XíÚ‹›8í#“Z¯“Z>¦ºûº)»*½¬¹ä	`LHlû?ý6°ö-`Í„µgÞyX{çÜ+eš]^>]Q×´Éñ$Öwø}ST®©|mxd”»«™ä”c[MÑ8Y›ˆRœâ¢x†
¼ÔÆØµ±¥`-Ÿ)8Y[}êô
—S7®Ü¸qå	O¼ªr]‡UÈÎ1±B=PS 	wµvj`ªk‚*ÛLl£È­1Ü¬õ(¿‰Z<`­P¿ñ9™ÄI¬«¿Ä¯F2Tî)Ñ.ÂYcg¹„¯ÿÉ^jŸ]À#ü µ2«Kko¬e´¬¹¸†Ï¹/=ùe`M¼öß¾ùmœFNŒm÷ýª½TµM²ÚkB×­|™ªF\DY{óõ¥Å¥³g××–TŒV¾cuõŽ¢•¢5}yƒ°Z³2”7¶!³æÇL„ôÈž«ÖÌÒb X"&=”êÄÀ+˜Fø+PKõÁ³ˆ†“Ž8«1š´‘Ó¶òÛþýáÀ"©†²¥ýØf¼f”F3Ç³Ôõ%Aå@‰JÇ‰R©E–˜*e:1Ä¦¹ &<“R¥™«LÔ*¨e¦6A÷ðI•€¦=
„G)ƒ³á¤å²T°ˆ‰¨ª}øíaMxiì—?%’bFhÌ0«ššYàË_°*¬µXŽÐY2âä²*ìÔo5ë©MÍZ
¢oj!­QS£È¥ûçGÄâª]«Õ¥¾ÕizMÈV“kÉ*Cù€êµ„ÜgþtáO¤LÒ*?ã±ð»"`Íˆ­Ô¥WWO†JY¢hL_yÙÌŽQm¦çK´±ƒá8Á¬\–s¤÷Ãþï:”Û¬¡à1Å
Èì%Ëž°l3k±tæ!ŒFô<Ÿ--­;«¹ÅH>2ÐÚ ÿö¤H|$žZ'þFtäw(kj‰­,ÈgïS—5JtŽZ#h‡4EÓMÄVüH;Û¼ý˜|òt‰ÛR\k%ÙB~=¿D0ä•µö´&ÙåØ.ršŒ²”à·©<^ØÐ™œû]f¬ÙýÖàº/öîºëÿNsE-DÞE$gÉmëÝ€TP×²Ã k™³ˆGžÄÂà;="7÷´½6ëGE&¬µ«YË5Z“´µXû( fÝ†ÃHFj!R¬†ºö¡ÊZpi£¬µóƒ<ÔØy¸.ç½°ycì Üi³Ö‰Ntâ¬ª¹²F0ÊW·þ;5 ­YÐ_íÄ—¾ôˆÀ
Ë~/›šb›Öì(WË¥@æd5Cµ·Þzÿ­·ÖWoü<Ë|ÔžáVuX#º¥Aí¿Jñ”»AžxM“§Õ³ùÞ{¿ýMµ|{8 ÖÞYz‡¶o¤)-ü”Êqú¬Q!fWƒ}’Õh²©iSZej´	kXùÚ¾YQÏNÄ;Ò)e/ÖeÖ†Z¬'Ü._¼|ã>‡ï=‘¦/6Âªu‚IŒë#€p¤¡­©«ZluSø"0ÖÍêIbR‹ÔÆÖkÈVD~åµ„ïé'j=CøÖÕ]2¦Cä›‡µ’Iv%ÛEÑ×l\‚s4 *š©ÁµsÜyÇgÉ„¼§‘éek¸öÌ3Ò× 6Àíí{ŸÿÜÌ×vOCg5ç5G5B¨–ÉjÏÙÇL C±Ú›ë ÚúÊƒûö-¬¬­®,/"™™¯e	ÛGè/b`9TÄ1%ë¯fbš´‡2&,á@XMö1IÖÐ”‚)á°æªZ£áFœ s‘H,'cûô¹òc2ªÙDkÌÚ$àºšFl+#†Y&%0áé|¢¨êˆþH£‰þ8‡™ ­Rª#“¿·ÑÞà9Ù‰iƒYA¦¥^ü¤Y#ºs?ÂšbRµi¾Ä1p±­¥Üeo·!žr¯…a“Êá¼<¬¥m;¢Š©„BJ&!$`;­vOäú³ÓjtEç4[d³óüH[O'	 1(:l%nzj¤3ßÈþƒ•ÂT®#©Õ2¯r|#ó¯ÊÕ¿~pžOƒLd~¿ÆiÝ6]×g?¬Mâ:vIË²29lþkQAÆa[Äa’˜–Ù+6@A)ó*Q2®ÊÎèH@a[WÁ[d—=R]ÕÊr)!7×ØÊq—²"™”¼ßÆC„Xb5ÎÅNH©êÀÏ…;èB¸ÞZZóDHyBCen„žKPZè2©3ÌW¥«áÜªñsL&¤@R¹v˜	³Ã’Íê·eÁÏg\Ê~üã²ŠdB|¢¬ÙF´b¶0kÅkí8-ßÛG»Ýþ»½½°+B6e8ÒV­wÜ‰Ê®^y@VÌ`ÄüEBÓî]»¢	Ž+£Oüôþ(Çh¡ú,Ì¶¢Ê+kAT³Í™“HìÇ×·f<n:-kÃöðg„)m`­MÍšý´Eµ,™ñ¦+Ö€µöâZH„t¨îýmF‚°æÊš÷·i½ýÐ¢9%R2½]¬æÝÕì_¼íþMÖ:Ñ‰NÜlü¡A:¥…ÑhíøÆjÈjk_2žR{5€ý*­Le¨véÒf]M²Úh¦@YíêûWß"Þ_¹ºv!«RƒùlB0„`iÛ¬æc@µîÂhäÃh˜õ­½ö¼¥AªØ½Á^Dqý;¯,¿rý;ßYê­ÖŸøzÚ—ÌN$tÅNf
ùŒ®!­uWª£4U³Fk•&¬U«ÆjðO±°C%®ë\L¢­…È±ZÎ	ò•µËÄÊu¬nH©‚h©Ä3¶É(™t¨¤Œ“ Dkž±™‹yÜ³¾Ð5^©²9m³¹c:!'rf–Ú¹Ú4ü“~8n=ºÇŠÀÚ <ìšngy(çD®#%2  Í33ômj~m¯Ž»w,.\ÿ?× ~kÖzÁqFç^»&^ÃË=õí»-’1šn‚šP­n­Û`çEä,‚šve}ýJÿ¾Õ7×îº²ºˆžFò£ò½ 1o›ÖƒA^Ië^²,)ëQU±åœÂBSH³)oÌÏ*iïpG=ò¾“Óð™(q£‰M‚“Õ5‘ˆG{Xóþ×ì¢ª8Í—è¸¬#/{cd°Iês
}qÜ0,Ä™è¶‰ÕŒSÍÖª…8E8 âI±yt·~’Ø¤!m f5rX£]¶„</ÁSË5Ý/ÃIF²+SWØº˜ñ6Ó€öªüõÜ$¬0S$RòÖEz¨†ÓŸ¬à…¹òÈ„ÅÛ×liÊ§«Ï‡Ç‰;Gkusm±?É:K#´
A³ˆîHIÕÃñöç‘| ÐÚ‘ÇŽ ŠŽ4Æõmõ Ö¶-Â½Ÿ™	ux‡ ^F±*%­‘SM«N˜°ŠÑiÄµ‰JN-)•ð¦f2‰Ù”¨ª¶õró—ä ªMçxbf¾ËÅ!|ü7«T3×t6Íx¼õeáÅdcº‘‘à»‚ÁHkNk¡jÍiÍ—žÀl©k'
µý^ÖÔfM#ÇÔ`íð'>sXãÂT€»eÅi‡n»‹V†Hm{>.eýóþÛZXAj{níš¬mžæŸªª¶Õòðqþ§vü‘]k°Ydt¶wWBCµ„¥d‚}ŸéN•'@Z¯þçGÛ‡ÚÉÝ/üãüP•‹@fym[þÌ0qJ†"¡Lm+¬ùZ¨JÛX×Žya+ùñxÒÖ‚£bÞ2 Z{VÓÀîæqMÏÜ^YóÈŠÖòÖˆ|[ìŒÕ®	ÕòÒZÔ|–—ÕòG[Ïæ‡/ ”
)5M½×@6&Ö"¾ãÜß‰Ntâ4ÃmÕ˜ø†´¨e°Õ
{T°Fl³ëÖY;ú ¢HÎ"-ÊÕ2YÍ3 ÖÖoÜ¸±ÕR„½ÝBØÚ¶|ûØ‚ÈÆÕ\‘:$A~ŠÖj^²vâD“Õ¾»<¥Uê% -çåe áåÕ¥wž[@2¹´R˜ÅÖ£¯žkfà­UìŠ°{G÷|¬OU*xø‡(œÙfâSU:­UJÕø–}ƒÔä-«¹kÿ–vØ¯¬.(ëëHï]¸ñÔS_Á"ë¨fÎuõ©ŒFoÕ›ô4¼âÝ ð1!E]ÂÚ»ØD#G2#aÉ%bµ64D^ç8pQR²ˆ)ì: Ü'nEóŽÓ%Y<1+Ÿƒ‚§æ²Úºk°YþRZºŽ¶výšR!/^Ö2`MñÌçQ,‰|È¿™Ý½»¬)ŒÓœÔBdy0ÿa8ªBµ×›ÂÚëo®÷¬®Àh‹«?Y_,y‹k<E$<è#  M•kýnÖ_vVËlÍÏ_:ÇöÁÈ¤ŸcÝÏŒ=a;?…sÎË•÷”4ÀÞ¢E,ðí:ÏÈ_„„Ãœ`ó,ÆloÔ•íö·Ì†„Éüø`+ÍÁ}Òrà¥ªù<Ž:³”±P¥\¿ c^Ü/,a!Kõ¯h;,QÑH¬FË£êgd5w•®;#€§'>"4’§ÚSé*…¦_$²	ÅR=[øbÛ~€v&Eîé7rú+¦ù¢é‹UF[ôàsþWë‘ž–U	jºÑZÅÊØt2U€˜AÎãÓOÔê¤DÚ#¥sÖõQÒ>_ûûŸEtm›ÏQhãÒ+ëÐ¦ÚÆêø@[5=s!=¥|K!“XÊZ7þ¦vÕÆØÌ'„‹R}UƒÁ?ÄÆ§N=T¦ß5T4h#â.il’ÖdY(>’"qù,CK[kÇÁùqWÑkÑ¯\YÛk/i-ÐZ;äµ‘BLV0¿¥ùZ¨ÏÚaZ‰£Tí¨œ!R¶†]?¦L0/p=|èp¨[ÓÎ] ³šç+‹–Îmˆ`ûßÞ½?°“gù_ÿÛÛ,\#»q¼A³µ™S§f"Ž"ùø{g˜îÈú¬kä“L¥—¾÷<ô‘§µ–¹¨ÖBî£2ó•à©ƒà+âæ›¢iÝVBÂÓ³á'",ñ Xò´„µ|ŸµöÂš"ÇjŒ%üj™WÖ6çA\3RÛ†´æ¼–wƒÌIkmíE¯iôÁ=F¤(™ÝÎžÛ;mÖ:Ñ‰NÜ‚kM³~‡59Œ`ù¨ëjÞý§X‹@kpÚè”é_þ5jÖÈð©¥JlS®æ.™¬võ·ˆß¾zï…¼¤Æ|lGY–ýÖˆn¨Š/„_{úûææñÚ§äÙÿ´gA~óièàI±©{–ˆ¸ôòò…–/ô¥r™êÞQ¾tjGœþØ“uJ¤¨²DTè¸&Õ¢
¯é8ÇqÜ—"¿Õ”âG®a¬•r¬¶)	Òù„j,“ÖÔëùôé§NŸ~ jŒ¤;r¥¨Æ¿©³šGäàPH¼x
gq¯[‹ˆ˜$E¹l‹;Jˆb1iÞb
ƒÚlœ aDr–„ôK"!ýlç®2ÎYLDBÒ«ÀÎ@u“]zÖÙ5˜û¯_¥ÝšÒ!›¸¬5“!Ù×…à·NMïžžØ¦]]æG¨¶UVÛR­F:h¨VS¥š!Ë…Õå³\k.¼¾FªcyàìYÐê)É:DiòÇã=—ì+—û¬álIšLúu\ÒJ¿ÛE2ƒæ%²e®,¶dáóóQ"tcŸ?zW0‘pYS¤cqP°&Æaš)kÏ><R'˜¢šioÕ”30ùàÀÍ&­›‘KC5WŠ=:Òè5˜˜æÖöÂ4€Lù‹Là¥/¦v¾§ÞkGÔhÛ@Gb™å>ò4:½ÒUà^?	VÓc\¼c¥††ýv¸1ãMEÔâñàe Ì8œ•²Ó€ƒk8‹hT˜Ø6ÿª²Duo__Vìñ™¦œLC5!­e4R§ö$¿PŽqlõº9$üÝ?ö˜
¹¢F`Ý@ÚÉZ-QsÆ®ÿ	`%".À]êímÈ'äŸÏ¥˜®Mª–Î“8cêÕÆgKc±9“·¨FÛjb]Ó’Ù3"­ryî¶ŒèlÐÓl&ÁÝP\†Ô 7Z·Qú6àž‘RÔÖøCÑâºK=n5r×ª`È`-Hk9ZÛ§èïš!y3NÎw™ÐüOB5¹÷ÿú‡Ç”þ¨ ÖŽa-rì¾£Þø°œF¸æÊøPÐÕØt+Nhâv­¬7ßÂ´¥²|ü[ŠkØ>óçüŸmxØh­m/cB¢£ËhDd†#ÝúŸÍ&ÎTz'¿ûÂ/Fÿ÷ï@µ¤^…Øi['ÔrÔ6 mÓ¢&F^¡*-Œ.¬…eæÙÄN7ù‰8Š &Nk¦¬TÛ‚k^±v°fÑÖc$ßÛÄ¿Ö#yVËy÷g¤Æ-š†\ÕÚvC9ž é.#æß;N#úGÖÌñ¿ï´YëD':q“ñ1w€4Osƒ´@W;NÐ[íøÔÛ< EkPš	k{]\“³7#µ«eåj!ò«ï¿©½õÛß¾…¬–ƒµÀlì·Fh¼6æ›‚•Ê÷Ÿîùâó*\Õ`5SÖþX{\/îklËWN¯ž[è&÷it
;‘ŠÔ3’)UKåâM hU‡3C§ÑáQzz‘NU­@¦613F¡Jøù\då“ ——©X[¸cií"±¾rz²þÄOá"BÈmÀœºi 6ê[Ý§‚!5^3§BBÊšx$æ)Ž°,?¶Øc“í…$yV‚jv4Ôc@Â`]~Uërj&ÆmÄ/ð¤»•J¢UÅÈlKH¹Ã°kŠ&­yH\3~üÝ3g(y[œÎ¦EiŠió€ÜbùéÌRcðë7M¸¸¼¾¾o}iõìå•Å»VW$m›“ë¡†næ¢Ö‡L+£9v?wØš¨ÌèØ‡"K¶1c?`ÔÆŒ} ÍPÖ(ûc‚Æ™°€Dù¦£±«g°âxl–ÍÚãw;˜…îk.±±Â)¬&®¹–±‰wƒBXŠ¬W¶{7
2ONOÉaŸ[m€Žýõ ƒ2©xªZ‹†ýe4ß‹kN<<Ý Ÿ27ÏÞÅ¸QG -Õ‘Ý­©-Ê/F,B[Ïkk“ÒË<ú€4÷_1E¼RqbÓ+ìêÃiµÆÕö« Q‰t.®MÖ%Prå¸ŒÀ­˜ËøõêÁj”ÌŽ£{5"´/TiH	qÍš­MMAz„êp|”‰èÌ®ÖkT…ÍJÉ«¤±Tl0K=ïôA»¢ÚŒ·–àY±‘ž6GÅZYÝ4dåÏŠKkØY,Ñ›;¹a-ú
²Š,Q…º¸|‘h%­Zs\cÜG{Ä%¾jRÿ
5ã›lÁ²=ª¶Øl„U®ÝwŒ+TÄ5æ¤9b’·ç6ÁZˆC\7sa»§=¬ÈjQ–Ör¡9ßô8ßùØ
Ö6;Œ<\™J‡É¦à»¹
¢éŽ»ØCj•ª1K¢™¹¹	Öµnòþ“Ú×^ýÒ~@5`Õ‚ÆBûþ°¬ú™Ù˜ÍÃ#3U-k‘ÂÃ’ -¸Aj?‘Û·¢á¬ÖÖÜ`$o/Ò*Ú°ÚÍÑÚïÑÕ|È+kÛè‹í¬<F>áCNW³a;˜v(ÏjB5+Ä´Ç[þ£9ø«_§ÍZ':Ñ‰[b.’ùŠ@kŸd´2›XeZ“®¬*õ" !6ÑZziÒJÖØ6—«åYÍE$ªï¯¿ÿ^ÖBúc˜l;ŒÌFGÙ‡˜bmªò¹×žÍ9'Èk„ÃÆý‚µç^!V%ê,¯.-ýœ,C`MÁ÷òæ‰¡°6:¢wyÓQãµjÓR)‘AjÔœIYKd 66fµj.¬5Y-ç.rnYóä?
³~àðJ e¶xòu°„-rTÀV=Eü*Qlié82ü’¯{Ògà“5™øš"q;úÄpNx&»9ó§\þ+iù$óï²Â\Áû9A°V’´öýÖš¶ô[#2£nÏAkàÚ»?~éÝw¿uvmÍ-E´åe5ÇVg5B²šÂYí'´W[[X»¸¸XZZZ^[YèßwvAWgìtÈž¡ÒNG³’ÃX‰5Ö€O¦þA4cƒÅœÖôXÊ…t6]¥¶ÊkêˆMµJdQ`›L¦ÊœËr õÌ¬_›‹kDÀµ*—óyQt^pîoŽ:Ë'7‰lYB£óÚH •´êiŒæ6â¯€S±Tê^EPŽ+²s-'ù•fuhO«~b":{+üXf3[R¥n2Fä T¹ÖË+ó*¹Ì$ú—#Z˜VáP¿XYŽ£ÍÚ§TF³¥ñ†°Æûuxë«šÂ¦q¯Ðƒcôf·ïçW‡.k(’Q•*5X…(‰´¼£+ö0‹U¯·‹ä*	¥§ÁGeÖÒØ=ŽGDÏN×ÐØ$¬Åã¸ÁN¨Í#’#ÉLI1«,HE½ŽíH#C’«MO‚n‰k¼qv¬/OâxÖþìLJƒÕÐJEîfM.þe`Ò7…7bãÔ/–ä9‰æ¬nÚÕÖB¯5ìû=Z#Ù¾¨[ÏùX²tuY‡¾y -(Y£©˜¬ûåáŒùÑ£ÇŽÞsÈ˜Í[¯k{6ìE´bÍ½öàÉ¾}8då< [km~&;¿mÁ¶Ë‚”½H¥7ùÂñû•^ž$4S¬•½½ŒBµ™¹¿|èTÒ«åJõk/¼ðË_:©ýˆM¨Æµ6É£· s›•5|ôØkyMBÌ¹‰HÛ<g¤vˆ0"6É×¬…4Èœ´–Y-¶C5âÖZ?HU­µD5{5ye¢5ýäkÖòiy;È¼¸¶)2Üžµõï'õ‘°œA¾ýÀ±Ñ»cÙ‰Ntâ&Y$HWÖ@4‚=¤ÆvüÎ»Õ`5HM¬¶×	ÍMåj½4ºwïÔôw/ÕÖòÖ"OçÊÕÌò·Šxï7¿ùÍÞ|lßU$f/Av&¯nsŠ}½S…çd?~ÿilF 5\ûŸ§ÇÚÛk/}þågž{F°†Â¬þùÏÁ­)™‰(údÚ¡q=×5Y›ÊDe \ 2¦XDd>˜w7ªÕ‰±Fƒë´„zµ¡`-â¬fb’Jf}¸²º„®¶.Z[_[[} Á€­¼‘U¥‘`›¹º†áC$eMéŽÄ¤x+a‚ÇÐ"ƒïªz´¢HøÑEŒ¬e.‡œ‹t(gÑ*¦Ú.õÞåVŠ‹¬1—¼)dg€¡“»––¯¿ñÞ"òfp£¯\óøn#Ï,MœYzéñÇÏÖNN;«™¬æ¬z«m6tg7ùÉ¯ÖWõ±ÜQX^:»´t–œGiô)÷±§\FH$2´N+±ËŽ,1ÑM1¤ûu²¡U ­¬Ôã vž[Ì˜$9¥f/§D¦}òÃž	éÉ‰¾—®˜Œép¥º?_¯&
ð†²0Í‚-ÛÞs)Õ*JkÄÎ Í2 ’êC¤NYÃ
³!©Àa)K›u/G(pžœëÝ5’—3lÏsPïÇ^¤	r,‰a„¤Fk¼gòr–	±ÂÓ„ˆ6;Š´–æÔ‰ ¿µæ¶®û@4·Âä\>#÷}„þ‚Š—šnãòþ_Ÿ·wwP±ÕY›_HýŒÅugVí×àÛ}Plúçñ–#©¼ùÑÕÂøå¤éµ„5~c‡kÚ„	e±´²(W²˜¨kîèŠôF4l c`-FFëÝ€5Ù„<TB+;€R‹¢†?`¦ŒFí¼Ú 0ÆF”ÆX`]I’üCg3ººT·Fß‹Ëç‚²fÿÝË%B¨jàšñšhí<u=±½óô2!ä0"JsVóþØìärÏ±c‡ïÉèL#2õ÷C»j–ÇHÀ&m{[E«<È0øý6ÉµÃÞN§µ`Üt„/õî¬É‘Æú‡bÊÑtMekXÁTNÍÍÍýå^ýéúÞ?Ë45Æý\ƒÔrÒZ¾™³Í¨–‹|.$£sXà5;È“7¿ƒIÐÙ<s’2µ{Üž0'¬ži#ye­sˆ›¡µí­mÖ¸å”µÀjy‹"ÐZeÈCZ{‘°hÂšBÊ½ßŠ3Íß„N›µNt¢7ké¬¦ÄG1šwXSý°v÷£îIˆ×„FÝ€j&„u÷õŽîÝU«y#lB)ÁÒËÕÔGY°&Rû‡õj®–à-²MVSùÜ#^°Æ ¬iâa“ÂkŸ*öîhf@b/râyX­	k÷
þÇWÇ¸ÿ(A±¼¼úÄdÔ'XëëÞ‘$þU}UŒ&^“Ëˆà¬ÛÛ_§n£ðÙ”)imF†u5E›&çí±‰zš¶ÉH
±ZÞ	R±zaõÜå•åõµåµõÕ+§°nQheQ]6ëD—Y†L>ö|0LîVƒÙÒÊ8)³^®&é§ÞP6Àv’-y	ÉB‰Á¤5ÒBÂU ß™»Ç7!2Ã[Q×|l\ágCf>BìÀ9¼XÄ˜n`q\{ÿ«WpMÙž	™ÙøÏ¡W¾s¦6=ûWÿ…Â5Ý¨«míƒíÔL ßTÐûÍ‹ë?Y[úÕë%|Ç—ö8{ ‘ÅþþìEôŠ$£ª¶&XŠ°´1wde¢Í×x/NqZôYÁªz­Ì9ÜJžGJ³>À1ÔZ˜Œ(ÙiLvEÊHœ“áÙqh$ì ³!4ËqZ˜‡ã0õ£J…	•l¦©eÅc„ëD„¤0q–iFbC7|1†µ8,r4èª©Tx°ñV>¤		P$.é1¦×ñ@³çHµ&qú\Me-iz›`Å„+õ¡æ1Í6e€O“m¼‰DÈÖ°¶…²š±‰Aug> 4kí¢¢Ü +[`­¡*½áyÞ–ú§Í¿Ê›sXãob~˜ß/i‡H’õxpþ­ÿšáZâY z8]`5$Iø
–¬á,Df#y	Ÿ,Î«	à&Ýl,&`8¢£¢Õ“$¿cêö'‹‘Z])Þ¿·|U¯I#“)lŠã	s3¸ŒHûº‘ý( °)Š&©yEÛ˜H®ŒòVîŠË2<X¾¼,‡‘Ë­¤µ@k„TµÁ~öòhÂÀŸvÊøÆ¯kUk?„Ó 5¼ 	xM>þðÙížøe-²1„¼‡lš³É(OZÛ=p¶çÐ¶V‘Ç´pSØ²:·¤ùB[ZÓþ×ú_ÉýÇó¯½:Õ2ë	yŒL0ÌÍq»ô¶j?‚Õj€56«MxtF‚•H‹ê¶&¬Ù@lV×òÑr‰*µ£‡EjFÜò%kía-˜A@Zû4È[ƒkÕÚÁš£ÿd¨&w‘`0ÒÞ¼?ï™3	’šïÚ%?æ;­y75?F[³5NîÁõPÖ:Ñ‰NÜœ$xÖ¤5 íN0MwZ{ôîGÿô~ ÖÄBÊÚ§X-‰‘Eä¤¦ŸÖ°ÝZäÚu««½ÿþj!à
¤¦Ã6d–?Úkø¸7ÐÓ­°ö¹_ìûÜ§›´Fþ#Yê°öi±Ò½žù²ó>T¬}=MÐ†Íù‘Æd…¨¯šÑí°6–²kjn•TÒW¬S~ÝHùF}\Ï“Õ©wnÓJ–™ÄÌ¼EÖòI+++«+çV––/¯œ¾²zákuM²c·Áš*„ÈÏ‘·Ác|à…4ª%EO}Ñ–72šêbÒ@dSg0N ò/*€;ƒµ‚ÇS&»ì{wõ¿•'XSÿè9È®hæ*YÓZ‘9f#køznàÝëW¯^½†Ä&ZS8®]«½³°ðò+gÆkµÙ3gNnA5±š—«hÍËjâ´×ÕÖVÖQÖÖzV.®œÓãƒKž]8‹ÂG}m®»ŠÊ;=úÛÌ¾ß•ÅÐDMÑ”	u”v„´V¢8-fjkä¢Tm±ùPÙT¨æM±MLËJË˜gz3&.¬…ôHÍösNžÚXbÍ2«z>%-¡¤qh•)B²´VÙ"³~äÏH‰º >KRŒRž p‰¥Õ3ÛF¤3Î¨h.ÍºøSÜx3¼;ÖS–PŸ2|cš¸r¨4X¦ü‘æ7Q¸¦ÌÇÖQÉ˜Ì»bsÁBkX«¦Sã³¨oGÄÞš&jÐƒL¯¬~c^°5ÿpÚ§WBÛ0]ÕL­„Ò€¹#¨nØH¦Âh±©GEÞøì€µÉ˜_DûãX¦¶²»Æý	J|œMÆÇå	9n¬†jM·5T´:C/u`7ÎÆº‘¾yª…34ÏBV>eI+nøóÐ©‰q¾~á!ÿóCssü&zû8gºšLýËå±$Ü™þÖUî/C‹w¡â¯\n)­åhM^¿jIÊ¼$Ô¿0]íYyŒhWüúi³‡Þ~ÛíÞ]ÊoÛãm²Ý¸ë¢Ã†$(w¨MJ¤‹gùþj¾óCóIÁ²½®æBßŸ?"Xó_5ƒ5uÀv­{fîÔD/òÚÉï~ïƒÄi?ccÏÍ~2a±‹¡é’§/Ÿk‡kœÛ"œi§£`’6/+óaZÀˆ¼²&Tik[YÍimÕ¶ÙfMt}ä°‡oŠí(kD+‡‘¼´æj^Yke1²Ù’Ý¶ËÖ¼—šâêáƒáwuÌ ;Ñ‰NÜŒäÇ@µì&N»»iØÿIBº â°Ñ°¦0X$00T	¦ê££—¼¿š¥@þ×ßoivý’Õ~{åôfDóØ~Æ£ÏÁ4nMmk?õô‰}\‚ˆj'@5B9ˆo7KÖPÖä.²túÊ•§&Ÿ¸ráÅînó‚”[~Ô×-Jë®j¥2¥"5®“IŒ”´6en)€’«¤8vÌ˜•€êÒQÖ&¼T«3ÂæóI/eI`Ê¹¾ñ^}êü_W&›>vEQèÚÞ0-§6	­5Òf_5ù…pŸ«g Ü[“buÓã‰®D½µÁ³¸É'J€¬±Ê7÷ƒåxBN]ÞàI{è¬«L¥då[ÆseÁh´ÉÞ ah;ÀÁ2ªÚÅµkoZCBý³ë×ÿì¹¿ý«S–è¿}æÌ41>[Û„j¡\ÍS ªÁjYäë:Z[YƒÔ.,¬.÷/--‚x==‹ï.-œ]Z0~²!É\är’WØ„5T6ŸqwV£¦ð5mà]sÑ1-œ“üöÎ/6®óLïô¶wÝrÀ?0D,è&–%[ ÇVætŽfiÚQ&þ‘Ÿ—°c©²7ªëÄ	`”(d½Ú«¬W"”îÂÔj£Ò¥b­ [îrU¸XËà05¾H`#…{Óßó¾søqNGc®©ôjÞ9óï|s8Ž4öùÍó¾Ï“Lj”H„Ê¾d•ª§=îÈaÈæÑT¹†6#çwŸ9ôèø¸¤Žü#Š†‡+âýœ5v6a3îÚ6Æpk³9L¼xL‡À…çLºï}š)Ò6•mý+ˆ±#x6‡5“ïüôÆë“nÈóVµÀØh¶mùŸ¼Ùûgu;C·½kþêAXÛéH¹ã|¤oJÝ|Åújè´2ñè™$‡&)›¦üÐÀ—§ÒÇzD©`žåDMªºEÎâã#ü‹yªªôÆ+ sB<]F^×_U±›¹<NøÍ°™Ç&&$¬Ñ)[¢x<;ËŸ\ÿF&BhS*¥Â„5`Ÿ‰jú™r¯ä´¹‹çÇË]tT“„vv[%œãˆÖ€5øŒrY¤9¸åøâBú]^>ªõM>m¡ÕZ³´æ´æÀf°&»>Kqm¼6ëþ"Èj6üP;†wÿ)5]C[{æðQ`íQxLžèlGÔc
›ÃGžØ¡¬IZkR#´WøqºÝÙ2ÂZ[^cóä¸SÏ}s´ç4_œ–Å)QÌÍh­Ÿþ‰ÉWÞ|ë­&IÍ¶tÅÌ 	«€g­)lÇ”!›'Éb0iòàÏJjÙ´H·~<ÂÁ¡×«}i'¬5—¬eŠÖ2¨ö›IƒÔOîÖšŠÖ0CáÖÂa$k0’aµÖÖý¸»µ­5úbë¶‡Y4GÈŽs':Ñ‰½±šswÕ¬™¢®±'ò¥'ñ1X“Š%7üÖ@£Ê©ÜlaùG-¬E<òWw?6×G¨íÂ],KO§±SØêC-eíõ×¹þx)0à¬ÁlÆJßúïÿÖýEÞ&ê+ëõúêye’£¤¡YÆcÏ{ŽÔ»ÌTnî/’(RW·3hmeó/@‹S}™”|i.ž˜ÇFM	„ºs¬–Íý[[Å\äÆ;k››«ºôœôä³Èj\ä°ž#b/PK`×ä&§¾¹èlX­æ9TÅÈ¬G¼O[%	ÏbFNk¥{Sî©’¼ú2Û3+k±&yVXW‰Z|ÙË)¸ô³©vfy	SÈ»ÎjØøï°…|o$;¿ôÞâÄ…úŠúoÏóŠÕRVoÃÊÛÍ¬†Uÿ?Ü^ÛÜXÂX„Ø|üÚÒÖær~lÌœ—ŸÏõ|þ©¾¾!«‰ÌXs÷Çþw–úí tPS°FØ _Ø1Ž­1co}ÕˆkÓÒID_rŒ5m‚¢ªC›i_âšIZPZh'ÙžWF¶»«I¦Ö|]á©‰TIŒÐLFšÑ§\G…–4SA™M¼¤€	û¶©ITç9ì­¡SZäÄZ`!ƒ´:5H»¤)˜^¨Á :ÐãÛˆÑšÄ<àn:_ïAjK'ÜRhSøc:v•Í%ïNóyK:Åm[µŽF|V]žL('¬Öy.b]KÂ@>ãÎÐüMTLURr•¥çF’²z`èÏCiM¼EIYSQ_ÃÐ„QÊš²%cÌ™kcðiŽ|[1^+ÊWQÞ@x¹BkS9ú¢éM‹¦eYc¨¬uãý85‹Œ9;/ÖÒXQ°»h²½0^ôÊ´|þÂ…Å?Õ
j›m¨¦eŒüK<%BžÑ«2ÐþñS,,ÝÊäAº´Ö‚ÖˆÁO¿ÿÅA\.ç¯ü,m³öëŸœ<A½ÚI™‰ÐÛ2!OÐPêáGxN˜`‘é£ÀZšéª[ê‰»ÇýêÕ‚iˆítÌÆæsÂOõÁwakËj><ñóãÇgÊ£¤-Ì¤FWå(…µÑš‘Ù[žó(mMéîS·Ñ f9pekÖXL÷)°1jkÊ˜ôw¶U¤ea-s”‚í‹v
kM¨ÆFVkÝgMÜÓ0„L•µû&A¶÷yðyþ2ü%5Kk$B¶7ïçÞœùDÆ¾ÿÑŒÅH–×‡]ëLÈ«¥Ïã°¦ÏÛÑßî8÷w¢Øƒ¹ÈÚvü¹ïlxAþ>q\ÊšBhD$ÎÅÒÔì^Ó~çwvÉjÈóëYü¸ksvOÑmW2[ 7{5­£·È×ÑrƒÔeˆâõo|ãuæ_'¾õ½ÿ ¬ý{3î{cµnEkõ·WŸ¯EQpíøÈLyˆŒö`ª–Ë–	Ÿ<ªÇ¹Àã:z|v"¶jÚbsy3¬å­j„ ÕPX-´c«÷»€Ê­Íõ×ºˆI™þ%`	²š¢ÇÀ!Pój6BÍrÌDgÓ.ÁÅ±Km€G¬“j5!÷™þæ9QM)}¢º‰qK¬R/]íýÄhšåxÙÖ›I-Ø°œ”Q¤z®qbŸq[iyiùñO>¹÷Ó;¿üé]`-×ˆÞû«åó«Ë——'–/¯LLŸðpVCÛßT®VÍÕnÈò6“µþ«°Tj»±E–èæÒþ>ÿ»Ì÷qPÞýZŽg%¡[?áGŒÚÛÀåìvóké9Pc°=olÔx;¯šÖ¨¤-¹‘Útliª.]¹±}â°Ókô±>°íÂÌ=E‚Ó!×F–Yg±Ò%:…‚©Áš Ìý÷MH3¢çJõ:¿Ù³ÉC# lyËëš™A:ñî-2Iø?7ß¥–'¼ßûÌX´·%€£NÕs2XÎ#_PÀþ¿‰èÍÀšÅ f8Æ–ÂÚ€öNqÌüÀ
òXpX“–Ô–Ù1g–$£|‚EÄ®9VÅìL›N‚fØuJ¼âm¯'¯°âDÔ¹_I™¾mÈn‡&Xuë8.³þl•YyT9’É³³ˆS±>¯5Vã<2ü&#œ%ËàsMõnRÏõMJŽ¤PææÁ¥\¾Xšº¢yÚa˜c?"¬œ-åŠ…¡Jä<ÂbÚF·ÄiØÊkæ3ŽKâ^^BÛÒZðƒÌHkZ#Þ}±¯C¯ÎOMÏ™·ˆ’ ö³c'ÜT„KÑÇÈƒ<¬q1,ÛòlÛ‡‡Ý4‰»çsiÛÖÒ3=|¯GÃJ%í~-±-Ü^ä9eM kqYY#Þ[æ"£Ã¯¼ÜDšö [8dø4xŒxÉY¨œÙ=2j°çœ…ð#C1m!2sžA’šÇVó[6\	´¤µ ¬…šµ×îç/Q=°>klmY- [SÍškk!ò>´ºb7+kMáBdhrÝVIË.?aâZúÆ;³±SƒxÁÚ¿è”¬u¢Øƒ¹ˆÉjÁ´ŸÀ·c`Í4µQÐhfF*VH6´¬\mW¬v·Áj[«¸1ˆ?	Sÿ¤Ow~žô½û`É0ð£§»°fÒ*[Z±¬5º¬ÕWëâ¦:÷•<ÖÙåd³C£ Ù(¬yp5èö"eM+„Á—Š•„ï»cüHz»ÔŒ	ø™Ö†
4é1gEgµà.b”â	˜KÈy¯~(UióU ª«;1‹½ZÕT"h…iˆ9íÕRX_úŠ¸Ë‰¿¸ô®J‰ˆèXðMÇqÕHè8×’ü"õec4+„XÍ—d§Á^Ð†-"F‹Tžqïë¶ãBIæ#À§k—/<uu9·¾yoí#`íöí†‹ÿÿ1\»þÑ½÷V§êËóË+«óÔ®©¹¬–µÕk&«±QªvûVýyu·þñ&±µU¯ÿø}¦u©±
½ú	LFÓF­£ô@”Âæ‘S¥MØÖ4Õ\wmG¼GšØAqè‚$»šËjfõW-I]bã®Ã¨7až	 J–ÂšG
oÐ+ýIÊ¥ŒJà…_î0RvÅ
—G ƒ°Ê5…eõj~,å,D¬±Vã©G*ró
35O8uçóšt2óz:›0xõœ¹=²·à°Hêq= iMøøƒ5áWà56µÈö%îR=øÄÔ[…4SÕUvkÿÑºª4á0ô? +!åHyùë³¨žz®ñF)¢®^½YFVr¼ƒÕÈ²'#o€‡¿K—ü[‘‰ˆIk1’œµ6l˜“LÇ¥©YªÖ¦à©š¸TÙi}¾9+Î)ÕùŽFYÏÈÚ|3váâÅ³ÔŒæ-ÝQMàkÝ9Iø`g›R(‹ÐÚvÿÒÝoÅœ£ÛòæqZÖ 5`-Hk"4…öñÁâ#ñbijlì;®«!£Ñgí¤Z¬ÉZäèÑc?<Åpâ™Ãc(BúãÑÔSD;‚¹Ï¸~ØT¶ÆU³\Î?×Â?Ô¤ù$š8¬…õæ­¶æbËÏå”3zÒ¦TF³Rì™áÉWBê£ËhšhÏ-¬7vi¯5¸É¤³§éXwƒ°Æ¤ÉC$¤<Ú²<ûL‘.Yú%ç
 füÐ®fíKŸëiÜc¼Öìù›ôá[À÷û9ŒdkÖ<²­´”µ&ƒ‘¬!¤C®‡ïÛ3[8Sÿ®Ó¦k“@jçþNt¢{6ÏìF¤s‚NØÇGŽkîÛO7lë¬XMjVÅ8­]+ì¬®vÉÀLáºs/Ô_ÍÕ¹ÖÁsÍDýÝƒ?úÑ `ÍK×”é°æÆýÿC¬æ#õõ%f+cq,FÖz£ŠêÔH‚¬`ØßC—9óòïIL^›IÊ3J ãˆ¨Ìç‹½QÍ¯.{jsS¦¬'æ€›b¾‰Õš¬ —'ùÒûao®V'ïÒ50-I,«1'Tk"6aÂ¤´D°&o·â¸<Eb2ãcg6"}ì5A«™Md7E5cŽºb¨MNâ÷+”IÒcÉhŒ¹Ä6±š)kjŠÍÜ5¾Î?(ƒ®—ë›õú&°vçöÝ»lT®AkRÖê|osnjãüâòÒªëjó²ëobµôMx‡HS os×n¼?´´ŒÿãÆòàÒÊRi™š4§ªþAƒ5Èqÿàþ¡þ!§1‡5Y[rìáÒá(Ö]hœÄÜµG_'®iïQ¼SH´#2Ò!â*‡§¢Òc+vX#–Ä-Ón²¨æL–Tš`M1™"›©X”FùPäÊå®"#ªhK!LÞJ{tXCoó.güéEÙVt–ŸkÔ`~fdiªO¶5‡–'X³ÌFç8hLéK£hNXB¤²±(rZÅC–òD{Š^{©_áÀ^ˆ-rØ—Î(íºiÛþY^=ë²£˜òÓÉ}Ÿ²48ln»*ÇÙtXƒ×¤j&Heˆ^$Õ²w('RS+A—þYð–P˜ôF‰uÁ/z
j•ÝHÅ±YëCKŠ¬%4T+Äkcóó|yyß‰¾‘¤äp}eÃ'>£Áuqjþâ:¬©ì£}ã¢èlñìÁ>‘X·~¦ ÔÈ‚ò!É„,˜ž.CöxZ1Üµ§ð½]Zy-¤5…•¬	Öè•Á×<ƒCØØÿ‰D5`)§tÇW»´µ#tÈÆRúÙ‰ ­ÙÍí‰‡e)MRD¦b­#d ·ŒÞÖÉÚ“š{N9ñ­ÞÌ>êÕöAá8÷ó~;¨}¶ïH0	S7/`sSÈÏ<ØÍB-ûšG€º ª9Ù™Ì´ùàñY6ûÑIÍaÍx-ƒj-kÖ¾Ü¢f-«¬¥ÂZTãB´µã~Fb÷UkYëþÏóƒÌV­Áj~ËŒ^k#¨µ·#ºÞ6âp
k¿Õ‰Nt¢_´`-´U#´×Ôs S®öœXø6°æõÖ=Îjf4’ŒÏº®F„öjmXíîÖºÃ™GÕB4æa1¬·‚5n÷qá¾§GgJïö÷[Áñ:&¯Ãj
g5Áš³¨vþµ×.•ÇV.×G4¥Òœ/Ý.nå	«á†Ï#²É…´>ØÖ›¾kQÜ«ËÀbœè:°ØK$ÃÉÄÜÜüªÔSË$Aº¤ä¸ôÕÏ¼µ¹¶þ{‚5~¸©†¨pqõ-X£ÌL{|Y/i'‰LŠ¬„-2Ãé[¡ìGÁÊZuV™Ä7‹b”°ÀÅbÑŽ¤š«¿ŽÌLÄMûkkâ4¤=Ë%"­ä…‘Ð+[÷¸ìûä—wp–ûŒ|tã£{ËsKk‹SuPkcc^!U€[³¬¶Ã±_¤v}së®¯”êkçÏ/âö*¢ 9”í7üê¦2àMåhšh¢ÀJÊgv¢¤Úcã ‘ÊàÖš!²Ø®&uMìÃÇp¹6œÆˆ“ŽÕ{MÊVlB´+)ÙU¿=ÌîþÁã$dn	™¶#L	!eMÇhèmeø^Ú›^’`pÓª^£3UÄ3%¢4§F=uÍ’ŠOÀB^&(Âfl&¦"‰AZb¨bØE& ÊÑž(fÛ›˜æc÷9›±h½ç{[„£Yf™.X7Ë`Dñmb±ò0FýL†+ö¾ˆwÓßÔHzdäÜ¤l‚2ÐêpLOªÞÖÂÝ+Ó1/Hªwd&ýð‘áb“nkBß° kHÙ55³·n*‹›¶.k$AªfÑJ^é–IwÎþ»ÖôùW…jTÌÏM-..ÌŸ%‹ÑDµßÍ”oÖ3?IªV)%ÕG•¯SþÝ³….BOcr[Ñ¾!}¸ ‹×¥ËÍyÿ9ÀšhÍ%5ášaÛþ˜ÿ¾–Æj¿–¬ö“S§ØQ²¸©Ù>ltZÜŽÐøä‰£'ŽÊTEx&§fÖ’ÊBl‘úB¶×Â˜Á¶ì»,YsTqßþQý„üÇã£_;=Êçã•7Á!wwtDsLó¼G)kLÙ1²é/[sm-¸í‡hb7ÂÒ,ÇtÕÓui:òyãU5ÅŸ;r¸9Í$B²ekÖ²n­kÖŒÔB8%µ-Y·hÍÑ’Ô‚¶–•Öþe[X36o§¬e¥5ÆÝ‡~ÌaM¾ýG¯]SÅš¢ã/Ò‰Ntb/k?Oõ´¯Ö„iÜ¾ò$ÍÕ 5G5`íÛ¸–¢5X¨§¶°@lTµTVkÁjè>wïºeÿm°[E«ÇÌbÉÍÍ‡à1S€!^v×‚Ãš§A®¬P3õêk#x=FKëç/õÒ=Že±YÃä4%EŽr…¬ú4`C•®)ÊXƒOÔ@:®…­)vTôâ˜Ñ8?7?/EM•±Z¶bÍóÿV—ë·7¶ÖÏ¿úo¸R'R×mè`˜^óR@GhM¾ñ(b}ªJCcK]F0e¢É³ßé+"y²Á!Ú‘Ï"ìì!›
.ÅhÄÁ’­×¦ò¹Cx÷ƒt¬Ï®ÔëËË(kÂµÿ«Ñ!›<È7Þ[^\®//nÜZŸšZY™ò°f0k–Õ‚µˆ| ooa ùÎûýK·(oÇçq8 XÎÈŠcŒùsvÝ©ÎjÝªVÃr›Ö‘q²¶ôÀW}pXóp
z`³ K£O%kÅ˜e˜XE~ rî"² ’¤’šà¨ËËËŒnRÒÉôRËÖ¨¥k²@o¨\ Ü£HvBÁ²9Ì§I/²”G¬íèOl—Ù958q4Œ$Í¿%lÃVÄæ°ÆžNr¬ƒ>–)¬Ù/DOësÄ4ƒµŠ1èwJö©}ãì-\'Kg>wà
ó–!Í¬‰ÜtVXÂh8iq	™I%—Ñôï…~)ÊÎX·ìÈ
‡#@˜•úÅgÎMZ‹;ŽDª_`?Í›£ŒHýµÔBß€iq^µ¢Oìøä™ªò™¥šµkeúLë~y¤ÆvþäjgóœèÝÅVþÊœ$…2Žp‘„Ôèöµxáì¢}<‹]‹n%òBÞaMÝóÏþ¥ÜFÁ%±±jâZIæy»Á8³ÿ_y'8Œd¥5h-D×Ô›^o‡Ü¸*#ò›Òå/²ÏàcHÏ~„Ûž9
È±¬¡00ÑÔ|òè˜­èÏ#µÔN¤Yl#|°1˜Dfº½}ÿçøâ‘ÿáõ[>ôÆ›o™¯cÅ>ãîrSœûÿ‹ˆm{-°÷O]Xc5°Zv$4í=Ò%F‡µÐåZ»”ÛZŠœÈp›ß@4yAfXí~Ê”5¡Ñî­û÷füßÖÚJk.¶WÖª‡‘¬Áˆ“šÆL·µ ¦…}ë§i`ã‹Š k‡wÌ ;Ñ‰Nì©`-æ6>‰¯È“/=÷Üñ	«k©¨¶\c›†Ò¼ZmaA¬–ÍtË~¯WÖÄjw>nEjY.ô¶eMCXézÚaí°–
k)¬++õ·ëçW_=ÿZåñúêk_ý*éŽ£¸: ŸõpeìÖ",©×46£cD·^÷„,s¯šÐQ±HÊôqâ¼j5.ä©W¬VÃ1T¬¥é—u®—¸nÚüðRW"­;’}c&°ÞÖÃ	^ý¸¸ˆJZÄÓÅ¾k<h¹‘@uôU£(	 Ò°¹óGÊ¾âGmÉ"S<SYZ‘MG!r
8ÍR­l%¯¶Ø€]Áê éöåü²yH©÷Noß¾sç§w€5´52:—–—66W–VA4î
Éj¥ö¬F$¬¶¾±Y§£ïúµõ¥å¡÷É…œ*]ìËõS§fžšùbÔ…B Užó fÎežéÈ4½+¶GÓôü"s!o¯,[xg!4Ža³M#æbœ¤5‹Z7±‘Ú¦Ý[Ä¤0`Í›Fk)°™ÏÒiXçßŠd#ÍŸqÇ£"ŒCL†5g ’‰DåíUNÓl/ð(‹<a¥e‘Øx6“ÊÜ‰ßÅ¤Ä)2ÀÚf„´vq&Ø‰Üðèp,Õ9P‹E&„†‹Ñk‰-°àŒ‘¶­•³2›-*•TŸêt9’-É€€ÓÌV*58Á9(Mš¥Zcû§Z¿eÂ„ªT\GäFÂ‰e$5^Öô•aƒ5àºBXa„xÇ\HV•I(Ð¦¤Hô95¹µó³³Ó“g µY’#‹Râx%´Æ{™ã{‘©ù	Éj´Ô&«’^ §JôK›Ÿ_˜/ÊýëŒpX·ü$IƒÌÞÆøiÐÌºfç„k‚5éqîv¤$É«Øß^nki"dH†4¡­ÏšrŸû™õÃ>	¦Ak kÔªr§‘“°·ÃGN"·±;BýÚQÖN o˜Ž˜ºvTIaG”þøÄÃ”­}¹=¬e±‹}Vik]æ¶‹’5»~?VT©V.ŸyÓ56±šO?°\G¾ìbáÝÕ>€Þ 4n†jlº<ÛÁm„Û«Æ[¡n-uÉvTËtQ3psIØmÆ
;ó ÙŒÕšû¬¥ÚbëžØ¢ŸlÍÚo°'vˆ/Ôi-øAV»¯²æ¼ÖNZ³m7ö"DFÄôpXC8V¤ÃZÇ²èÄÖ—Ô$­Y5uÂ>Ž]
kßæFµ°F|í‘ž}í›5Pc#2¬ö½ï…VØJ¼ëžýÿsëRamÇTÎ“»Mc«8í°¶¯GBÚØ¸3bä¿k÷wNLÎLë«ëô£~íüê%`Lo”ª™ª6À¨†ñ›”µ2.#–ŠEÉ—ÑåŠ0N Ç†ÙHm¦GÕ›7'¤EA¥ÀjYaM0åjïllpÑôñwÕK•EêOè;JL[¡}n$#Ô“zãú®¯¯ƒkÞ7âÌ*°&	 szã€ü6¬Gk)‹9iŸ}uqrsX+&B¯Ü²-õ1«b6eIªC‘ÏË!ò}ºy“¼xûŽä5%BÞ»wýúFiiåF½47•Æ\†Õ¾Õ”yË~ÛÖúFý¿rmy~pÛ\¼º±r~buýù>eoí/ñÀZƒ‚lû‰Á ¬zÉDPÓ¥¥Kú½­áÖïx‡²VŒ5c1lCfh'êv.¿@ó©ñG×pò‡ÎL¤2˜¥1X,KaY˜›žÁ\d°`!*bŽ´àÌêÒ</Ò‹µ^Š9aH3zé˜†fBÈúðŠŠÞ6$3‘´ª(­ØŸ%5Ì…5`-›¾y b½Þ<xÈ¬•9(ºó~pRÛ&9ðäHý	Q—Õ’¡÷	¿HÏ´æSnÙpŸþæÄGç4šaEÓÖÇzKX )Øí­yÎè¡s&™€Õ°vQÙsÃ	ûÉ3Ó˜"Éûl)–Ñ´ÀrŸ¬býo2&¬ÉˆR«xÓrkÈ&wµ¸—¹+ÆXCž93k8LYÓ75:V¦jÑZ±MÏò#cú6¥Ú›
gÏæÇæ.Hãã	š$À¯<$V¬…ÝPÇY(téá‚`mì °Æi2õ2ƒÿ«ï/?µô6°Ö\´ö­,¬9®aÝºRCÐ~ù'‚µŸÐ`M}Ö´ÖžÖ¨]ƒÏ 1Ù‘c§NhvDmÕ¤¬Z£5°¶÷hÛ8Ð}WÂZh“ü)ì_çþ µ·¸1ñ½W§	Ž¼íõßhPJdðƒ„Õüa‚¹Æ”¾4-\ÓO†l¢}¦Y¶ý5’)¤ÄÝ2 æ´ÖÒ`„[Ö²ÎýŠL›µfeM´›&k{£µöÒZpñ×d/1µÝ+kÖvjkDÕZ‘Yûª5×å@4ëPaÂJ3]3ÈNt¢{(Xk¢56jÕ`µ—¼6œÆ]-Í¾ý5ƒ5œûÍÇ±w`_å& ¦-›™e5÷¼ûÉ_}|	°º¯ªæÇ6SG·ŒÈÆ®=®=Âd”óFCÍÚé‘ãÇ+q?B¢š®A`µ k°‚h!ÀÚÊS+—ß^ýîx¤R´®Dô¥æj
v2ð/ƒm4Ê¶Vk–õ»q§s“žQ¼À‡«7Ivš›ƒÕÆ†,J©$ùDYw‘·Åj›ôY[»õáú«ÕJÔ]žn@YÄ—õ5Ù:ÈÇ¡fÙTe·¸ 8¨õ)t\©Ôºcú^›/d¬5—ÚÀ°š‡:£¥´¦}¡À.‹6JÒÕ¬y®áL¦:5Ë	‰Úøá~¹ôƒOÀZÇF9ƒùK`íÞÁ¿þ‹H\^YžÛù¬v¹ÁjîÙª©¹Úõë+<í¢ŒWVž<xp±öÚÚÚ2æ"õk¥œy?RÉÖ/ÇÇþÁ&X3¦‘1Ú4ÞýÖÜa5­[	‘B5º&ØÛ)7àX°&#HÕÅ×"¨Z—ífŠèáIŽlÍq€hb5ÁšR9íxtD!â2‡ù$rs}²ãaé.ô¤}Ô0Ì}ÍÊÚâ§øøÁ›9hDQ/ø Ý “xÇ‰Nk>-›GHö5+·³9Tîå¤à•ú˜9*m@F¯7PÇp¦ÿÄŒflaÞ>DbŽbìÎZBûm´«Œ$¾–Dì#YCú/åK¢±JY°v@œî)#"S·9ä1Q®½³™ûs©ý	ËÕ*œÏû/;sî›±Ú*X­¨k7«Hg˜ŒŒ'‘`í
Âº5è›Š»§n’9VÓ‡¹¬ÿ
L\¼P¢×ÙÜ¢tod¶ü…E9þä¡¶³pg/ü)š|[I£¤Rüe¢ ¬n®Ã±/äeåº„«Ñ;¡h-Hk;amÿ ÕkcÅý%žã¢?Õô5©j'¡5ÌEÈz$”ë(;"‚îýžéfÒ4ƒÕx´ì²ÆØšÕl82-üÁ›®‹¡¥;öÌ–>`š¦?jIa‹i™škx¤Š,FÄÒ¹klÚv¤E†Ø)°…!ðÚ¿æMIÐ$ËkvÈ(kÖÚ(k®­…ØE¤¬=a‰@M7¢5°…p`ãf¶¡µL&d`µ¬´ÆöEªÖ»²FXâï{²Ž¿H':Ñ‰½tXûù¿2R# µçžÖè†­Þjò¤W;lƒ5 Xk´±þÚC¸!.X­q±«y½ÚÖúÇ—~!ªÊÐZ3†XƒÖtÈÖNWÛn  ™qÝ'_–|‘×¿¯ü®PÞjðUkßøcHƒÜ†5ƒ¦•:þóµuŽêMäÈ/FëåîÀf{®Âdi¬Æ…âÛèˆN%ó©g”I7oÎNåfc#µ’² …j„’ ƒ°¦?µ^¬Ýz‡ŽØ^Štåt®˜ê–²•(%ÎgXÂÅX0å°’4rüŠ"2™ñÃæ ©„½b#ãQÚ"Xc#lŒ3ùªS€˜rõÐ·ñy¾ðÂc¥|ŸØÍƒ³õ€º°=öØÊ­õµ´C»Ké©·ê›ÀÚÕ¥ƒù9Åââ6ªÝ‡ÕÖ¶nÜFKÛü«õÕ­üm\-•žÚu°å`*ym}u>*ö¤C¯¼ ûS7€mh'©3~{‘YXcn£ÃZº”"oibÈ±#ÑÕÀboƒú‘ŒÖ¬¹VêÞßÖàž€UÚ»Ä0s–£ #PÊ¦›2	fÚ*-ª¼ÏX„Õì•ÀZRá„w’DLõŒyrC+7c0È‹ývLÚ‚
›‘Ér-Í÷\@û•Mô³NÓØQÚ\DØ¾p-˜F†…&DûB!]Íå3n6Ë†aøÔ2DÍÛ`@ç"~é-V+µCOÊrÄlü•ÁhüÌsŠ“ÁŠŠY<Ë’˜Ýš#ÀkD$]ÍûáAÊµHs>Š“˜˜Dâ´âDóá#Aamº\«’ù¨^´?œ¼¢„Ë$ÁÑ¦Œ¥^¯4þÈ€»¸†Œ>{ñÂÔø,&³B4.^XÌ‹ÌJð‰¤F-šÆÎ^àáBD“3$ÿÖsÖ';ÙúÃu×Và4±ZÛ<ÈþÜþw_ì—xhþo‘š!½h‡o‰MÈÇýìÄ	’Ož8’6W³:5ÑÚQ5W{TËÜIûÒ ¬©í>téþëá·³Î|”l¦}â{v¦§B²dG¶ÚP×¶tÆ>ä8HÍŽaÌC¤‡OÂ;@Á’÷ÎAÍ·ek­Œû!’Ö}ÖRži‚55.srNÛU¤¡Ö#Å¾í¸Ÿ¿Hs&$¯iÈäA¶öîWÉZk;Hg[ã|h‡w“	¥y?xþ¡XëD':ñ`
Ök«qé¥—°‚¬‘ô‡£1½Õ‚ˆeCÒS^¤5Ù@Âjt_Vû_kZƒ¡Úû‹¤´f{¶¶åkœ¦Pª¯ó8qºaùÈéãûzŸ~TûÁëï6`íëìƒ¿HPÖêç/­bÚÿø¥h §+îÂP¤2ì´F¤Ä6CóÔ2—v	˜f¦Ã¼KI¢‹_3œ·«½É›³s‹ó&¬ÍÍ¬íÖ„)‚µI¹Úúåµºj¶¶6.YYÔ%U­h]ãBïZlx&Ÿ‘qfB³ƒt<ãìØ=Š@ÀÍ`-©ú3z°ÖkQÜLk’ÚTÐb#¹nƒ5	®ô Od´¾”‚Ü;R†#í_zoseÒÚúä—Ä'›4Kû‹{+´Ì.åÁµ÷<q_Vóþj°ÞæÚ¯®ÿjsëúÖÚ_¿¿²¶”‰Ã†{aJÍâ ¨b)KfrëÜq44b'ŸuçÂwOƒlÈoÍº†¶†Or•ü[ä„{
k¦©³ÕÐWªÔ”)ç8êÄ±ÙŒAó4Çfä`b!X3ÙŠ “Ñ'µã¥.ù!"£
g5éZÌ0¤±‚,”2D‰8d
rê‡”â¹Ãr;2‰‘àÛà‘Â«ÑÎëáüE@BÌË»5i:Ø[Ð©¾±·µ‚5)o©1òÁ)ï¼A¸R>,šÅÌÿÐ¹IO5•\æfÂ‚ÂAžfç,o	¨ZöÒ·Zú×‚Åf‘j3D;JI)ûÃ0hl¬;ž˜´Q
‰/k,{û²¥Ø…ïÏ,’¤È\´Q«6>1§dã\·ü}âù©³‹Õ3|”7X;{qaábÜ5Ægtñ"Üö„6—§q6ÜÆGsŒÏ²y°'Ø¥½Ùøœã6	¬‘…ÜÖ­¬2SôÄ¯MUû5‰ìU³öC¹ö+N|æä1R¾0yËþFc5·-WÝšYŒHrpX×þÒƒÖÔÂ›ÏÚ×­=:ù¦?Tk$A“é¦ÇüÎ)kÜ˜èæhÕB;ŸˆÆš"%±Œi¿˜O9Ð,À3ßÛKÔŽð7Îßt”q‚dk*ZÛY³ÆFvïéÄ¦­½¤b/ù"µ j÷óƒÔ-èjºkÕ²ym,FvHk™H1­Md&xß}=hqÞª‚¿*ïŒ}¸ã/Ò‰Ntâ%AVs]ñ¹'Á´—¾òÒ“/½ôÍÓ°žB£sêo¸x°õ,ô$Í¨&Y-Ãj÷¼^‚5Xí“ÏKkEk&Ÿeq5¯$GêèuÜÚ†5 V;~z¦{ÓþÜïþàG/¾Ë%ˆF¾Þ`µ,¬­¼6ZY_ýÛžu$À?
Sß¥Š5îÚõ k&·!¤(—Šãá‘ÑrY‡ãÔ9MŒ«,eäÐ™………ù|çÑÕÆ¦
^¯ækÁ]ÄQecãò&õj˜‹¬>~­K!Ä’¼–‹ÛÔ#;GãµFÔ"ï²G÷F¢6YÄÐ(ÕžØ›ˆ©±i‘Q†ÔBðgä²Òš¤rV¸Fslå8:¬)
ý¸†Ûp–ˆmè`I†\¾zuisksó#XíÎ'kL>ÚÜ?D£´|~i¹$NcKYMoI‹Íæ"Hkk[[7nl­­ýýÙ–—7þ~`í±©éšDj{à¬ÛþàÜoD¦H'üæÙùñÙ›glx*L S’¾&Xã8”M*ÂÐ°†Í‹¬8å=1\¥#„FS"Ï~Ý3."ÍÈF¤™‡´ªõ,mÒ¦¤»Dn“. ™hcÍ$4ú§tYáin¹ö{ˆ‡"D%w{”Öæ”æÁRÃÃŸ»£Z–(GÜKä
öˆ/¿üò9¶7®œcY§z…–B>Š>@Œyl´¯K#lÜ“˜ªÖ²ÑJXóŒÇÆé‡Î}Ÿ×.[Ú
(ÊË—bx€GŒ½8}ä+ª_KˆŠ¡!ÕA“·À Wý :­æ¿e·¬VåÊ"f‹j˜OÖ,2Ÿ•dfÃ9ˆ·²é<ÃÏ°21l;ÉùXG1	’¬ãu[DD£dm¢6xI(»°°0>Ž °­ÍÔdã…E£µî¢ç2§jßOXKlŽâ³"†jEŸqÉÒõjÜs}ôZËA{gÌÒ‰Muj¤Aj@RÖÌ¥<í-Ã~±ù°šÛBjÝaÍü¤­=p\ËpZ{aíáS`™QVÖt`{?ò¹O‚†¡ÙJ:S0¦áLæÜ÷	 û#¶Nw6c‚2580ó[;eÍoÙ$HWÖ²Âš"Ãj­ú¬µñ‚d!ÚbØƒs¿í¬Y&ä®<FxµíaÍiÍY­µ´W¥7'Ý6šóY€µ0³DÈ´¼¤µÃ‘Nt¢_,þ¹öÛ˜¶WƒÕT±öœº«Á@‰÷Âv»þí±da\ÂZ[VÖŒÕp¼{÷“Í_ÑöµbµVÁ²íÂq3¾a6ƒØ8ƒHÓ]íôñG·=¤^ØïF/>ý#AºÚë¿ûúÓ­”5z­ ¥Íò™qçG6`Í£W°Ö3ê6"¬—YI†9«ÜKíÎñ‘3Õx §¸ˆç»ï8z¨†¤44TŒÇ¶s ƒ»ˆýÁ—ïl®m,k¯–»Ö@Bí˜ìz/§Ò)b€Yžr¹ k1®,À"qLâ#îà¬{p†W¬yÄÍJšÚ9qNs
þ¼f&']]Þûaç
=+XãA¼ü5
ÖrýCC˜Žô¯®­Õïa1r÷öÍú{¼ruèêU@¯¾r0õ+	¬–m°F¹Ú­­×7ë7ØÖþþ)Í!Õ1'#~äý¥	“¢æ´´³L Åí×†ö»OŒóôÊÄ[Ü_yåÌÍñ‰8ÜH,®ù(b¦€«Þh‘²û|2#àq+[š`aBpœõQ8 iâ;»‡E;'ž«AKàÅë×x–°¸k‰ANyÀÉŠØØëáC˜-dZN:U"=HÆ¦-#µéiFL°æ/1ˆhðâ•É+ç^þôÓ¿aãÆb;wE$™­ˆšD+/ÒìQôâZV¬5™ïûÀ¸Ç ¾Ú†ä¶p0Ã¡Ï†Õ\P«‘UÊmÂ1ÁZETË/†3$;Ž	×ÑXC´f	ÕSK#~­ºi²f1×Ô¿.ìº´¸R­™uM’ÄìÑ‰í£KG?3ÞWÉšÄbdrz||ª05Q«U‰›‹ù±âÔÜÄì„ú§-ÎÆð˜Åõ ››_ ×æ±|á,€6mI	V{öÙ³ge-RpKk¹–—‰\^•Ä<ˆ{¿HÍ`-S´–±ïGY{±ÿ4”Þ¿º¨v!MÞýÇ¨^;y„ð
µ£kÇÔeV3;<-6RÃ¸’5csAÃµ,®±}~àÛÿÆ›PÖìžÊd„ï¹û ÍÃm"Ï|"Hkc¢1Æ€j~ÀN–Cî£ÍØR‹þSNjM¨Æ½%±¹²ÖÊ2x÷[´vƒl­¬9¬iËÆƒ4ñ¢7†ÏõqR³!Ø÷»dÛ<È¬¶öDi-S´ÖÖX$¼éGˆm?HóÛ±&GûŸýV':Ñ‰NüÓ“ ‚»¦VØˆjXA~ó÷å-¢;„å°&bbNÌRåjÿOdÊjÄ'®þâoÝDN ía-é—íÚ¬QJ'X3R%åQG9œn9ð¢Lû„k¦¬eûÖ–.­,=¾Š÷#AúçC3P˜`Gn`—„n1ÂÃæ<RN8S3}O ²LÐÛ6*WÏ ]ÒÅu\Púbúbƒjû·Y-kÄæåM€bÛ8kÂ$£5y]PóéðšaƒÍõ¥²*Ñ‚t-b™a jÊØã‡Œ¶"’!Åc]†{^Ã–…µÐaÍGÂGèË­ä–ýÜK%Àbcž×/V`é1`­Ð¯=çõÕ·pðÖ®_gå±Ç®þøÇW¯hôa©…–à-’ o`.²µQßÚÒ|skã/.LõSœÆ«˜»8ÕwpnÚå-<Îç§²f!>¨±Â `æ°æ@‡•Ã™WÞú”øàÓ>Ð	ñÖ+g 64'¶k~Ð-—ršÉHeZRÂ.°ÄgæÉ,Ö…‡=Xc–>Ä*±“œ*n}è¬6L¤°æFò.¬
Vg¥Ç­’ÊRô’ kÂ4eU\€GšÔ¨‰·´öÁ±¦™8Ð„qW®¼ñ†¿wÜÒ`
±½1Yõ¾½ÊÐtoÌö¢šQÚÿÇ@ÿ.ï„µ”ÕrygÅÊ‰Ž}ÿû¦M’Ú,[n3“²!´7G—cÉ=FpF¨E¹¬¿B©ª]dnœìäóXØ%°VdW‘i©¦]1}°§c•“	ÖÊ‘zeK˜/SÈ†dqœº´Â<©“üûšÈ(¢ŸP—µü…‹¸" ‰ÕJ¥E*Õ.\(Ð\í?gÝèê<¬=+Yž#¦(âú³ºJú©þ=î—‘ôåy¹u$´æ¼&lcº?—Û¿ÿ;kb5Ú§;vâÔÏÌÒ•µ£NknÇ(­BYÃy„Eø¢P:$3=ñe®ee0Âu2ãƒÆµÝÇÃG/…¥··|ï`Æ`á‹Ô˜„ÜGš²–A‘Â;Ÿ1²°æÓ`,ÖÔÔ^Ü@íó¥µGÛ6Zk£¬XƒÕ¬dm7Êñ`mû]žû|çþ”Ö4CHÁ¶EkÐZË¢µL«µ6víxÍCµjM°¦ú5&3ÈNt¢_Ôµ:cð›>‚5YÞÖp‚$	rß>´ÖheF
d]í/›tµ?üèÏþì#`íŽÁÚêÿeïü~Û:¯5}Õÿ`n$A?Ž.lôÄ¶\ÂÚ%AZa7á!õ#6¤„ÙCU¨OœºGl‘ÖŠ“LÐ3#¹ñx$©-ÙI;p'†{šHÇÀuáD.  h-ŒÀç¦8ErÑ‹yÞµ¸õ‰Û4#'>Å¹àâæ·¿ýíM†¦­`?z×z×]ï½Œ¶fÒM4µ0[ÈnnÍ¯ôGd7žb5ºÃ`@X»[
[§UªAlŒÌ”ÙÖÖ–VÎ--v“é^!ìvˆÕê-Õ`6¥AÌa„›7ST ¶)SL[Aîè ‡-%LÌKE.C¢V«ÏÝ	2aÛO\€WVWW/œ9¿òÔp!ÖÕ ˆKÝ… Pz¼n¦³g5"¤9XdÊZ\k"– ÖÄ²“åœ]Ç[Ý2ê’RÚçë×á$Ùƒ§âEŽqƒ¢ßã€+nb¹4KéýP[zàíÕk¯ÿ†¼×ÿ÷Ï¿ýðc-ž~uˆ†Qc’Õ¾ßX°öÑÒê…WO/}D_52!ÿð£Úd%²Ö5S˜ŸíMIX«ôfÆªÕ‘ kÉê5>¡#›ž¾YîãÁQ¼+ÚÛ»¶xãàrÕôEm~d:gýï5*Nd¡JPƒÐ-ÎxÆXÍ¨'0˜.P±)¢žRÕÂ@çù‹kàš'¬^*/r‹ä1ï€¤ô=®‘Øf¨Tr_F7.‰ÓÝ±Q[X1]Í/sâÜÑ"Djá›cÐÃâÉ²Jû";ñ%`éª®hkªZ&`ÓßŽØ
r	Gë\!§”Z:,@ÓÂ‘§Ÿ¡ùù©"
¤äÈ"´¶ík¨‘•LAE‚5äÙ¤äþ,ö¡‰Id”É½Õá”Æ_b…êS±ZFvý4Dì$‘G ÉÊ´ìEÊÃ˜“V«Î~£UÊ=ÇT‰Ü†ãÅk€ÙÐ]Ör]Þ`MÀF eû÷üŸAºdWÓ)N˜O?'ÒŽn~!&þî
ÙÛëÇßzgÉR /6Íƒ¬Æ”ß8½´åÓ7Ýº->{dßCo¢®ýtCB¬‰ÆX ã¸U5È:£±î¡kkìî©±ÓÐ¸µÖ>=lP¶Æfšú!^³æ~Ê1,EêÐöM"t¾n$3¾îÊ™vñ‘¢^(PûöCV¥æ¤³Zƒ´Ö„×’}Ö’#	ëþ¦ÎýAXúU³šµ¤ä„µ¤s?oß×âGBZk®¬ÁaÄ#°šASó¡™½È®Ä<YÂ²uÌÌamKLÚþ"íhG;>—k¿£ -ÐÚ÷ÄjÈTdJWó25S•˜ñ$
‡Fƒ¬³Z¢öÇ×®½~Ï~ÌE~óÑÊ¹ÿü§?I›»95ÓZ·[sX‹áT¢§íu‚“ãÈ£wßÕï¢Œ Z{)	kêŠ½Äseåå’`­¨²µ¢ÂYMónÛqwÇqÁoJQÝèÐÄ¾4Eÿ¥ƒÃÃ==¨1äPq6ªL—*8‹Œ€x‹HX#‚°¶®ÅÚkàÊvçÏ¬<5nš˜‹b¦‚$6ceÏƒE¥ŒNHQc 2“9Ç)2&³rë¯sfLCdoÖÒi£‘Ä¥r¾Os¯hÚ‡Š†²¶Ñ‹ÀKÙ”	±uišØóöÇ¿úÕÏßÿãk¯üö[]Y|…ìÏÁÓÇ·[h`µ ¬ÅYçOï_Z=>p|iéÅ…s­^\¨MW²|„¬\ÊR¹ÉÑJ%·I}å&(¥ÝÔ‚®–6ÅŠ›íx‹åÃ7nY- ‡ÐÖþrôÆÃàŒ`­×Zb‹™é“Éé[©ÜhKCS‹jÕ¯¹V¥HzsÄæïÁR„|Ù)‡5bÖDYZ/§ªî»1•—+~D’^>ê‹Ö0³’ÔÀ	mÀš}¸AIÑZ¢à,øO:Žû+|ÌäC¸èçkâ£«j7 Ý «%pí]“'+Qü	ôiâ4ÍhØ°“°!á¥ÏÂß$ú‘À¡ÑZ¡?žÒ…CVýEå·ê2ûÌš‡d	ÁvSÙšò#ùKÈdq‰Ö?Ç¬¦¿M$7D–I}Ufld™¡Ê\æû =6ªy6`ÓLþæ¬·O—©ßznwÆŽ2ÿ.§®$(SÖ{Ò3ð6ª”Ç…¹Ôètm"æ§Í˜(SYšiióUò+»ÒHi„á¿J™²ËtAJþœíã‘ÚÚ?ƒK;ÅjkAZóXk›{é¥Þ kd>ŠÐ0Ñ\¬ ¹÷ãC?Q§laÛ#\ Ã9£FÀš@mó-Xk.­µ¶Ù]vŽzÆºšš¸ä°Y°bS?NV«ýu­ÅaìE4T¯Å§`-¾*–ÔÄh>8›Å¼–Dµ¤s?OÁCÂ`$kAZkî/âR±eíÎ:B&Þð¾ýz$F´5WÖ­éá¨¼ûƒ¬Ö@j	imƒ¾JðÝíS‡5“¶¿H;ÚÑŽÏéÚ/BÓŽM	RÕˆpÚTwñ å°MX‚Õô„ÝFGcYíÐ-Xaíu×Õ0ùW ¬»‰äƒbçþšYlÖü´	k*`S lžù(c'lˆõ°FOlÁÚÒ"¬véøâ¥¨«Ý³©ÿµ³ZÉ¶©½ÃôÈÖJÑE„bÔC¿5n¨ûK‚µ|ÆoAåQšàwÚ Ždr)çEam‰T$µÅ¾ôTž[C1–»ÁA~„s—†ÜYMì|DäÖ õ¬@»lPËì$K˜•„°ËÃkBØ±„µú¦¦ªÒpW/”ËœXM´Æ-a
„"·êô¿þ>·wŒ÷âJðÊ"‚"x=ƒ¿Ê}7±Úù3‹C³~±2|åw³³¯..šqB…$1ô„ÊX:=Æ®2±ÉÔ³>c0ÿV˜…ð5ôµØWDWŒÔ®‹Õ 5ãµ×ü¡àq¸–S¶iœ•Ì‰œ‡Ûž’D&k
4P¹Ö'ÀZP×XÖŽ`ÔŸr"Zc5›é%¾ã”tžXZP£"Ä5·íg¤a¶AI°Vìò®i9l€ùD5šÿœ–÷ÈDæ(ö_$´‡3’É›ÕAZ³,ÒO}æ‹|·‡ò¦#Ù• ŽŠâÖô<ñq£tÖqçE7}U1¡5:Dæjð›êOÕ»Z˜	œq`P¹ZÝxÄz¨™§U°í«†èKsåL^ûVÁÆ…j]EkFHgfI€b–)Éþ4upnV2991‚,a¤Nñ¡¸zÄÚ¶G;ò¼ñ©b[ž.ã[4åÈÂœlûy*R0™]¨–óQ§`3J’ÜO‰[u†„75_K› G&sRÓ;¥ µ¥“bµ&EkÎh<5²ÑomìC¡Ú'ŸÖÔ›LG¹Œ<$XCjó{Ó]äGkÜ¶â×Ï2°æ!ëþÍ"aÂ.²!î€ 6±Ûgk›ß|Î¡Ìt² j„¯ûÎñÌWC1ÛgFe®…œÇ°G¬¶XÃúØ5*CXHdA2jÊ ­%•µæi	‘ØÕ‚ªÖšÖ¬Þì¢ÑJYcK*k°Z+XsVKJkz6vÅÊC‚Îš„5¶`1bV¨‚µÿÔ†µv´£·Ÿ)Fórµ ©}H§µ ½ÚÝS8‹t“öèÄænˆÎl…Õš±Ú¯×«Å¬ö›ßüáås.Ð%»aSªÅÜÅJcäZ³µæ‰
¹óZ+:«k|Î©Þ iþ-$Ý O.¾w|ñ)A’`Í­DœÌ˜íe*XÛC$7^ž)i­Ðƒ'Éð”Œ×Ê%t·L:•)îÈO¨F«¯/Å.JRX³0w!—¾‘—`FVyB±2k”%m'²½Io2‰Ï™°'È-ôk'b®ñê›XmÍÅ_(Gån"i&ÀÈ|8hNP­Ñç‰lOhL»÷ÚÇ—ß"&2V°Ææ¥Ç/}´úë=C½¯Îí¿xñê|u~6ÇŸsrz,•šÉT&âdG©~þ'n„µ°T'Pvµë×vÞpi-Ðš‘ÆQ	k7¾¾\°VŸ1vvÔ!Á4õ¶sCÈ|YN2ôp©j}¢a°vó£`/âˆ”·`9Kp1®”˜*¢b¡ßKÓ°»pyw¸ÈtA8ãiÇLs_ÑÜÐ¤¡­÷dm\bÿýñ Ú=PM¬ØL™í>Ég!’\Ysƒûž¿M¹šŸ@Y+45#‘ßë”¯ _J&wÿ¨¤ÜIþ,GPÔ¢Ž‰lâº¼‚fùF¶\`¾š‚±ØÝ2Â[È¨ý3£No¨b$6æ%£E9sy­Œo£v%ƒ»	qJïÃ?«éƒY*#-©2Š¼@Eºn¶´-!Î!¯	éŽÍ¤Æ ÀÑyø“wÿÂlg“ÔìÕ«Ó%úæËÓÿ=X·rzv¦:k¨¶ç‡])+C…ÐÔ-•¶\ÈwÞÙ¹ä#Ö­Ai¶y¤FR§`5ÁÚ‡¤>ªlí~A~¨g"4º¬á¨€t†uÿ= š™A²ÈT¡r5ƒµ{0íßÊ.T}Q]-Ì6k‡ë8×žùæ«ájBû¦ym¤µu Ïon¦VdL‚¦¶/ÖÓÂ“-‰jaSè%1«5*k7Õ¬%zb711Y-¡¬mÌ_„ç¿«°h­¾5­­ºbÕn¡¬Å˜æÏ–ªZØ7“ÔØØ·Í ÛÑŽv|×þØQÄU5›~GÖÖ$­‰Ñ
0`	|	°Õ‚¬fýÕ¬¬9«ýJ¬öçÕs²æO°šcËˆ•Åkº<©¨1úÓui-†5&Ã{‹Sª°ëº¯Iü}è‰m°Æógï,-îÄò\¥àÎÒÞ£Áš+kè"u{ÈBìÚ)¯*²ß·—±`RÌç†R¹rup´pZ²R0B$–è³vá<qáø7¢¼+köÛwR­çn 2lïÚšÚ¬é(Ž §ùD"e3Iµ,ÐŒI]Ía­7­Iš@4Sÿµ”Ôµ¡tüÊØ_]±‘Ü·l¿òÂÇ×N~ÿã×ÿ°&Z»üÖ•ÅÓ=¶ýáÇ¬ø¥Á_ÅYM´¸z±:?ÿ»+¸”÷¦æwé"æãÛg)ë!ýkhË jYÖ‰Ì¢O{ƒ²ÀjöGwóGŸ1V=wý9hí°´µr FÌj\VËÆ†-¹ÜYÕº©P‰¨U’7Êy”ùŒ Hô(™ýGDÖâÑ@L×ù±=Cø±_º­å‹w‚ÀEJE‘DTÌ÷÷›§P õg9¬yõóp˜Ì‡Œ:‰âê:.ÖˆKÓ…ºS¯ßðhüòbTó4RNê+Ö8…Ö`™"°v;BÙ ;Èè–§¢[œ¢UÆY]!a¾/äÝOß{¾q,G µžža‡3²€¹ÞŸ-"-’`Or#B›ãiYmÒeÀÙaAW6o å¢ò©gŸøéOúÁOðÄXm“k6ÇëÌüE.°%«z3£HcDk™®¦Ò¥EVé=?AŠpu¹¶ îõÕêÐÜ3Ï,,LtuòÃZ'ç‘Ÿ’í{Ï@7vÛ÷ wCiþŸÀÂ€1›•»½²øêbh´ÖP´p-ŽÁMÏÂjÂ5¤5<!Á_‚›ìÑØöAiB2¡žöø€ŠÖÀ5vê+*TÛŒ¿È®û¾â;#¬ùtÃ–_yè¹º¬æaÆ#D8ÐÉxÖ‘¤5ÂjØŒÈÖÓ[Ütµ½~¨ÁMÄ¶$«5s±^€ÉDÈ¿´X-Y´ÖDYkkl_46æéCÖBÑZ22©¬y¤¶e-Qµ¶fßÏ,	gñÐZe»G«–,Ô¶¿H;ÚÑŽÏ•é˜FÐÛaÍûÖ°,ÊÞƒÄGo¯&m­[…Â]£1ª-Vûß7±õjÄïÏÝõ'Ñ–1×ƒÕl‹µ€5§1‡º8WÒ”6§4vNg|VÑšyõ³ê‹¶R<P,©jÍC¨À#áÜïn‹;Ï.²[zÊªÒºÑK¨i1­ùt
e·YBÆwÄÝú•¼,å°Û.åµZÊMLÖªCƒ}é[^¯v‹Šµ“K¯­œ[­¼vQBr°fÉiŽÎK1;IÞaR‡µr©¬®¹ÐJ5tò‰"7Yjè¯¦WÞ:âsNiñ?–á£fÖ0;åiÆjœ?áW vlüY¯P¯vc™×~ò%ÁÏW¾³ZBXsVû-Áß^]=±pnõT6F¿¨Ìæª££Ù‘‘t*Æ².¬ù“ÑUgOfk®'ºî´vCHáUjÎiLÕœÕ‡ª9çOußV¥ZV°Fðç½üˆÐÝ³ÁZYN ‰ÀÈ"HR
ßæ,BÑpDc®©ÿƒ²©ƒ‘ÑÅ;wØ#å²Æ„Èƒt²t‘:ï¡’i´7þå
\ÑÐ+ŠŠ’]Ô€µ¯	ÇA[;xYÒP-.[sZa¬æ±,ZéÈ]J“Ê–çC=!þ]Ö
Mø­¡Wv“Àó• ±4_Ì»ï&šˆ)¥®´Nlç’[
Ùßß8.ýÂ6	õvkP;ø®ÞäÁaÏ¤s:ÞñÄï~ðéMñÁ»ÏŽ#™Éêq,KþªÙÿÛkÔ·¼SR¥)y;/©!“ÿÊh­†õì4n;µåZšŸ±…¹ýûñ3#¹m?¥mC³”²kÛ•	”)7V#¿rp»ò–u™`í8i†j	X´Ö@mOˆÔ¼jíqd³ÇÍµßî{îy€ÔH2"¹9ÝJ²#æ"Ê co°æìFìâ†Y(Y°ªLÈ;’©-Ì7&¬íú UG´5f6O(h¾<IZHkDkLfÑSƒ5IjÁLÄ†°¿¥$C]YkÄµæ}Öš›A*B
dFŸk€ÚP×#-š¬%!µµv	IÕÕB¤o<l»]7È5ÆóÝnS9w·ýEÚÑŽv|Ž$ÈXSû:œfÁôQbï£ßù®ý`$V#Ì¹ÿn‰k`Rat´4d5cµç›±Âš³/JŠjuæ"œÂ˜ZóÃ$¬yK5;ÖY×¸ì€^]Ä`¤xw®ôtHñ%üÌ:ï,„,Hâ•wâ>kçúßÛ¹„Òõ2À­÷5òZ=<µXb	†³¢5á)Ýv¢yP³6m´=#é±éÑåéJc8ö¯Ö‚b°YZ<¾„°DKlD	ÝàyDÞÕ+ÞbdŠÃËÖÔr”*€"œêð^k~®á‚µÛOŒçëg.Ý9¬¥Ù)ú¸Ìä¿«/Õ‹}ãö·ß¿vþ<ÿ ®}üã_¦n­Õ‚»Hkgd¹úÛV·P}ñÕì$bÚì¬¶ûö,û«Yä½ºfÖ»é°ÌPìÐ¸væ*ÿRÅj ‡kkGÅhòÅàACb]M~9UOÌq÷œáÛÔÑYnÁÑDÆkNk–ü†ã¦¼òæVX-8‡îÖ"cµ0øÁ¯—¥2†¡†8ì×ò—ªcAkÄTLpØ8æ-±a–—{¾Ì†{JkÖÃ³Xöãí‚ªhmùº….[ 5{7®__„ mŠL‰ÀìoÑn¥ºÍ²ˆŽV,2ÈdÛ¢:T{yIØlEkÞ7X£1BÞh](jî#À™õs«%ËôV3„ã:Lùá»SO|@ÜŒjzÂktÊÆ@§ÑÌm\h.ê£už;ºŠþÛ¤ò¦	ª0åYÅùšNµ……ŠðÂt•îjÇæçdÑ?ÇÑPº:;4£lIÒ“É_ž˜ÝOÌD“9D5jÖ:Gî1Ò ÝaäfZÓÁ–Üà[Ÿ¬‘i¬†·ˆÏûéû‹µj˜*lÝ|¿¬û‰¸9öVèÍdÜv@mŒ[×HíNõ[Kî[ÁÚ¾ÃëaÌ‡õ&LÂ¡aÖ`8#[CÄ$æ[‚ÐüÝãú5$5¾9²æÂš$iý­F#†š5q
ÑBYkÖZ)k©˜Ó|¼±ñ¢µ†$ÈµšµVyþO-Ñ;ÙÛŸ1u14—ÏšóZRÒdFìº¿]²ÖŽv´ã¶“ …jlr®}Ýe5Áš¬™°9«¹²&äÖ¢…CµÚg²ÚÏÑÕ¼`íß^®—“5Âš“šS¦šùQÒ³_«<Î´Ó+ö>ÊÌå&ÂNÓé`5¬Y(÷f6mz)&5®‡µËÂÅâ;ï¼³ôš¤µbQî"E	j¢3ÓbI3wƒTx¤¢ ¬•óÜÕõËO=“™žžé‹&gB$±&¬½ó-ÙÖ#«ñ\¼´"È]9w¶£Ðq–[?‚%T[g¦uúY%#š˜P@!r¨B±3Â9PÎ`¼·	këmý²’"á2µÓUåÚPoöéj@-ÍË½·_yÿÚ/Î|üþû'ÿñ¥{/ßûRª«%*Ö`5ƒµós¯«Ö¦Ë£È3tÄ›žãÏ`r3æWFdºÏ‰ÌŸfm‰éÈüÕ:­=§DH1ÄáW[ —Ö®.ŒŸuU¼·`¸Kîœqrf ñ®zH+„Õ|7ìbÇBû0šçF8€ÈØ+J¤F:Eå9‡!ƒœ:$úEUDÚúK:,p‰š€y\©0¼Myw¥ŽÒº7V[8‡5÷	Ý¯Ùé“œ@W3UòÆõX–d5c5B×.0ª›@ò›Žæñ7D¸VÀIÒ.G&_ª¢*Æ %Kžd¯$GéiÅB¨íG.†¦xª›µ÷^«IuS>tÅ™U|åéRþä»ŽjlŸ\#„kµih-*	ÖÊy™“(ë1‡•HW‘¨4~jü ]²‰!œ|F&&F&FææFø¯J‚NMŒ¢Fï˜?¦lGÞmb‚…‰êüÂ,…kóÕ*Ø¶g~llVÆ@ü(+ŸuíÊâ•Ó^=«5‡5ŽqéûV­=ôø‡4XÖ¼'6&" ÉŽxõû°Ù·kë>45¬û)[Û}ÕT¹oÿVŸAX³á‹V¬…ƒ%Aný$ÖÆ}…í}‹L.ó†äÃY€µp ™ÏÙðQ{ƒ gOš7ÅöI`53$jÖZ)kÖ‚¶v5k¦¨Ý‡=©é‘µ&#Áa¤U$áœº9á´µ€jÚZÇ®ðlû+pÞ³ØÝöiG;ÚqÛI¡¯¨æ>_{ô{4“Þû
‡¥©n¢ÿ.¨M!Â*9«ñH²šAâ¹º›‹œÃ°ŸP¶dÄbÚÝIa-dGzºcýLÛP¦¦½Q™Bi [0†ÔTé‘œÉÞ·©+k	eír,¬ýL#ßxX{O>ý¤Ak{w ¢)ÔrIY ¬MÉ"²à7Õl…:¬!OÈ™¯PR-Ñtmšßs÷eÉJì¬² /¿óý“kKl+«gVW~ôÔÎã;;
ïåÊuq;Àw¹É¼Õe+ÞË3Xc¬„TE¡5ÁZ–)ÚóV\x›ÒZWmá€°Žké”ýnŸ½!»XHsaÌI}ôÆ–R¸zåÇ—ù¦/_æ¿™ÕB¨`méø¬ûÏÏ<¿¿2ŠR@Ž×üìL/éé®ý©‰½Æ!°j5!ö"æ¥ƒ´Ö0Óæ¬Ö¥˜…ÕØT¶f.#‡ÖxTcŽsVû#ÏŸ«ÑÐ-’4©6X9õ;ÁˆúOf,[Õë•†Ç‡	IXî1+U>qV ÆQ8¶¹ì,`¬x}8vüPG€Rf]eUÁ¸ ß(†co9xEWP0·’7)kLÇxjÎûzókEøH!õ’O­}ø„¸Ô]wŒu“0Jþ<Xã$ÛsVóÇ‡V˜‡`í?P
ÙàŠüIÍ<„B;ñ™š×­1+ð©HODÌY	ÞºÌÚÈaCbpÇ®ß`-¢»õAýá`åR¦4ùì»ÀšhMÆÐŠ`íÝ£ÏNONZ¥ú$ŠôH‚®LµÚädWÎƒ+#Ð[jh6=1Z¥ÃöÐ@šÿÎÌ<©Õ±±…gæææ9Ø¿ççkåi8¯¶PÍÍÎÍañ?§¬b~Á²g¡:BR¤\!åõj#¯î¿b°Æ¤ÓZ€µàIømÖd©DHˆíqášâ!âŠÖ¨_Öføú+ÿ‘ÊÚvS¨æ‰†$l±%!·Í_°^­Ùzka-k	ÆqC´:û×0ñgLk& Åý°mñÿøŒ9 FÍŸÑX ³&¢Z¼v¢µ›y-ÙrhÖgbik_Þ´híŽ	k"¾k±²–tI*kIV»Éb$ÐZ@5íZgB¶Ì…äŸ·ÎèïIoE*pÛ_¤íhÇm·Ãv]MƒƒFß#Öœ¦$¦(k ŠWTCXsPK²ZlÚÿók?¿vV#>úµnM¥5`ëÁD(G²ŒÕ k{ãC¹Š0u‰ÍaÍµ5Éži°¦íæÊbç}›ºÝ®?ÖÍ ¹Äj?;¹Ø½ó½ŸÜùÞS¥¢\†!¤•¬éÞµÛ±M¥+õ£¢<æÄgT)Š“=SÖš¸¼¼<–BÿéèÖšeA~ßYÅtµ%`íÙÎ¯Ò0·Rre­dD8‰0TÊf'ÒId¤½É8®’[³ÞWh§eãœÄ³\nÑ²L­ù	ÁZ£©Zt–"À3ÝîqÝ”J‰‘ÒDß–í[úº^]\ºòðå“ÿxß½?NxaMö"'¯,GV\]ùÅù µ¿üõ‰ùÑ·•W·0”« ±åÒÛ&¸ ¦!ùŒxïëuzZ¼ÓxVëíš9v• ÂÐÖœÖê¸æ¼vÃQm½®Æå#êÍ2‘Ä5µÂÎ`0BDJ‚¦-·Mö~#!B…1*
M®u¤¥dèDÞÎK£Û6^p§}æÆj²kTv]GCYu‡]bÊ-b±ÐSÜ!d(™»Åñ¹Žç‚åXtj€æ³uº…OH,K”„×H"uõì/A\¨Æ©XW»~¨†~>ÀZÏ´èoÔØ
S¥lƒTŠšwå² EÊƒDŸ,²âÁ²F:âºà¸Ã‚ãa¡oé]ÊÅov&BU;r$ßqðè»‚5§µf¨«}À%ÏNó3­öIui#J“¹±éÚ(1™?uêÔø8öþÓåµjÀZjXë2þÙQ~jŽAd¨lA¾Aã‹Úò$emÕ”Ùö??¿P3SÈùù´ºl˜>×I.3ÛÐ¢ý¿hñ«¯Äy—´ö–=™³0ñ‰å?kŸ|b­°Q&$;ªÖví&	Ò`íqÚeËvDl&jãÎuóWîæ˜ÀA`ÜÔ9´v§ÌFZÇæ“iÐSså,\˜ŒäÚ_›ÐƒvÁlÄç:çÈOYj&"„vaHHkMû¬5”¬Á*›Ú ²–ÖBˆŠš§AÞÁk!Z7ÅvTkPÖêl	¨IYkMkÉ,È{üA4UÖ’™É)û0ÆýÕxÙØ	Ö ¶¶¿H;ÚÑŽÛm‡íœÆ¦gl.òõ¯}ç{ÂiÎjõ¢2êÕ ‰XæØß=5)UM[«ý×ÿñÏÿ¼Æj$AþÊXíÏç^þ“½Oó<Hµ8áq½®Ú«vc§sªTCX[»€sÀˆÒÓ˜ÞÁD1óØ}u8¬1*Ü2kHj$BvuqçÎ/çUìÆ°F&¤X7R÷\45îé$¢(¢º»ºòËåÑQFs†¬‘ YoR6XïM$lë‰¥tiõÌ…säM=«¼©¨Çk}x“ŽN›QƒÂcftá‘ÙLN;*’UmÂ´\ŽŒHÍZBYóˆßÝ˜Í"mµj„ki:%8¤†L½Í¸ýÃr{(µýÕ-ÛÏ@kÁý{«X[|áäñKV®Îýò—++¿^]:±`qõâÕ¹ÙÑ21š Ñ&Æ°à¯Œ	{=ôœÓÂX·‡4d³ù,þÿ†k„kkb5áÚq»õ¬&îê3Wg;;µ¾ÞL©,Z#«­Âßƒ¼û3ÊL¯¸«ŒŒWH‘"+nÜù,*ú3hi–òìbY'~-Ú›‘R	õçÍ œÀ£`Mt€Ì–Ï÷tÈ²°4Ù?)A„ž’idâ;$8á¡…ýw‹0p©¯ù˜çx`XÐ7§/GÁ·fÚZóH.rÞÍ¢:«õCš{tÜqöº­“ýk”6å`6¥dÆ)¾xÊÕŠJ)Þd·ÉñŽmG@³:(kÆÇÃOïO$Kàš
Üðô:=j6óEFô><i¬v+ic….8J¯º±®Îl®2¹ƒ6Û“”µlv…¬6:9þä“¸½LŒ¤í¹m,Û5‚æÜUw	©NBks³5Rge%‚:]ž®ŽÌŒÌ¸ä±…ÚØÄ'dåŠ·«¼FÒ[däšìo	kC¯‡‡µ ­Ùî-tµÇ
Ö0‚ü/H
× GÓÒ!qí VÃVdŸöIYã ë~º¯9Aì6½ÍÔ5H¶JK³‡oáyÛ€ö¹ìû¿òÀQ!ÔÑp%„µ0ßHü5Þ1ñ¹Qš!th}¯ùvH-@š¯4Â#^i 5më1ƒ+5k­”µP³v3°}¦ÁÈŠÖÊÚ—&#!2(kÎjÍ‹Ö6·àµ­Í±[ç@²%CÊ1Te²³·ÚÝöiG;Úq›IÐ™Gè°FàÙO{5„5g!ÜÕ [¾"¢­k…Q«WKêjÿmÕþ'¬¶æ-ò¢£…è•ÐÕÄ`Á’yŒ_®²…ÐE<Íü1Äg@VýÀƒƒb¸Ž9mÖü·Âž©ÝÍmÖx¢ïî~ïe`mxGñl¯ûe×o÷°àÎÝÝÓ×J¨n%ÿ{ÑË4LO/—ÝÊ/?Jûèv}é´ÛAÆ=ÆÜ]ÃaMqé©s«çÖUê…ÛÁ”›ÀBœ™a¨@kÙ¬1™ Œ¯¼™@2O¶¶Î*à/áâÏ‘`->L¬¡ŸÕ×{å.²iË–Mô ­qó‡õÜ¦ÁM ÜÀÀé×Nþ}²è%†µðœY:÷£KKWç/^|{û¦Å·{R«-ÏÌOàu—/Wið–LC^#Ù®-[FÎJXKƒ¡ÙlÐÔbP³Ð7bk©¹‹/>s½ìÐkq*$t!T‹5!œG¤º"®Z\<Ö…W?¯Ïâ¤ILÈ]gM[#T¹&÷õ+c§©Õ‰uDNilÁ§ƒ­IlY‘<Ç.Å¸•Eòo·²%3™‚2„%`¿³dÞ€²éLÙ{PGëÌDbCJî_â9ŽvA)Ò±œÿMm6#ë9³T:(ÌE”´’?Õ­¹¶v4ÈjŠÀj‡$aò‡A^Zóë/õA7 ´mü¾0KžjEk–ÆWªE|4²)…[ÒÖ"ÈWÖ½Ñésþ¢CXA_¶N·m‹
Œ;@4Ë›´„Hvˆju¡Mý·­|-CR¤Y‘<J4§5Í«‡§+c(È•ü8òm+ÙôX%7S?¸\Îò³71†\±UÖhi‚º¸ÓXŽ#<kåžé¡=³5~ÁS›M±T»íŸ‡Þ*Õ9ü³ƒZ‘{
ü…Å·]æ·&	X{)†5;Ø²©sÓx‹Ÿ|ø8Àö&µj@e¨k0;Žwa'"©f#È‡ØœÏb3È]²ÈÛ¬mÞzÍ·;ã4²q/È¡šÓ™7Ân¥¡ñÚ[ãÚ—lêxf%j¶FÛëo?¾ Öš+kÝü™,\óMÇ!lÞÈÒuBdPÖü[¬¦¸íŠ5âN*k¼~ã­ÖøPÉš5>zk;HESe-M)mWëkàì¸˜Ù¿~þÉ·KÖÚÑŽvÜ~¤" ²š…’ K(kkVù-t1X8Ô=¶`¢ZBWó‚5g5ÁZ,¬’ù{øÌÃÞ7Æ4	T±x- [H–T5mïlÁ[1³#waÑíû»âH'µ —ƒs¿pí•¯,îìžz¹ç½÷J;öŠÔÓ€3îpA7Ýÿ2Û;¨M1èîcH~7Ï_,§M///—ÜE½2˜šHÆ±¥‰¤›A"­]ZÅ	ò›Ðé>Ïúz…ÐqFjL,ÜJ$#TƒÕ´Ø­%YM6$9`ís¸AÍM"Té¢`:”ê%hˆ½©·îá¿eûžíl[hêtzñ²¾÷&°¾€3¯­¬¬\ZY™¯¾8ÿ/WÒ;q³›GW;ö¸VUKìÜÌÀ ÌDºr9ø	21KçÆ²#à³à-—«ùHí?qqM[»R!]$©¹µœQû#Âštµc¥kún3²‰€5ù¼ Ðe’àÖJv7åí¯´rC†üG©dš4Ø†„†ƒ¿?˜—÷³ŒÊ€´ôJXPNòàD¿!ƒJÓ´¦ÐDPtìüÖÙ
¬È‘,	k|Ö´(¾ŒÜÒ„Ò8"þDªYãfñqíjÖ,n¸Ÿf×ÐÔØ¼^3A¢«I\ˆ"ó
HÑT’«ZÓZ+É,~+ÛBÄëZ&lÁ./ãiVü>‘„&(XÁ)ØÙ§…¾ 1Ž$žÓî¾¤Uè­Dyz[^…kÅÈjÖ”ÊZ”ÎÎÓò Á3fL€7-d¢ñòòa‡5ÑZ#®Ù¬Õž=zøÉqh­BÓµSãh=32–ÊF;N•1äPÙè4ÅmªYSÃkªÕÒÙ¬%NbY«á›Ã?¤Væ’YúdÏÔÈ~œÕø§l´‡`9XãzzQ¥³‹hkkÁ¼ßqÍóynJw½õƒŸÖûq’ ­m"d?’IBä#êüø›°!£)¸‚(^3=mófï<`œ§ÔH$Ó¾ˆËH°ñÉ†„µÝï:o	ÉØ‡ñ6Õ´õ¨-ÞIS`Ô¯eÑÿíŸˆÓxRØ÷™ÊZrï5\óˆÉMÐ ­¡Ñš³Z²)vRXK¸Az4Gµu°æ°ubCkŽìBÍZœ	ÙÚ»ŸGÂ½? Ûm:ŒÉ|‡^ªÖÐ»]²ÖŽv´ãö“ =õ±Õ¤«É°ßT­¢ÃšE`4„5G,~/¬%| Í°«ýþÏ—ìÎ#(fkñBà2{OÃµ6¬¯1€hu\;p7™EÖsa¯•ÞFß~.¬]¾ì°VïŠýr´¸r|ªðÎ7º»KÃ{·	Öv¨öÞøF›ÅmÃSÝ%fÝv‹Ø­Å<ÊšGa­6]Ö¸“ŽÒ#1¬m	°¶¾Ç˜·ÄV–VWW^,—&¨•„d]7Áº'£|äHÁŽXŸã˜ëÐm\+*»|ógZ;‡µÁt:®ëÓ‰ÞAh Ø·?|ïåu|Íð,AkK‹«çÏ\:wiáØ¿¼]ÙtZ¢æ­ø†=Í fµ,2—zwé¿‡OÓŽeâ6ÿPëamàÄ‰ÇÖhÍ%"Ã5=´ÅÝÕb]í™‹]<1Ôi°FSì³\FÄj[¦ ût‰jåB$^B32FkpyŒ=Â‰‰-a2‚ò4l¾ûp„H7Ù†ÿË²‹xa·-6XC|3ºéÝÙY¶WR³öÝïæc,Ô»s¬O!®8LJc¡þ‘í3rBW'†äM…² ×kkî2â¸&T‹ËÕøFuÚ¾C` £¾R£RV˜Šú}e°ætG˜(Ó3„‡ë|ÐÜ—È$¦÷ñöõ’µ©ˆ‘oªŽÎ\.AS„¾ãˆýq ž±ŠJS4^ä–$‚4÷Ñâ¶.‡'híÓøq3«qí“§ò“Q>rªbUk#©t¶³@¹ZnBúøÄh+ÿ¨26‚«ä²*4î;ˆ¾ÓµŽÇ`6²"ùÃÄÜóoìIM,à90’•aÎÂY“dEs3JgN]¹òåjüÒh1¦µ kAZcÏöÿ{	`íÓOØ©0§G³4j{Ü5`vÛµ‹éŒùªÝ$ÜÃš †m×ý´ÇÖÝmÖ4èñÅ”4VÂpkX{3ÑÜº)±´ñøR ¶ ¬¹ÐÖ”üø&•} š5n’©h 3pÀä·x³ñ€N'Ó Ùx:‚4öYã{nkê+ýå¤´Æö™ö"NjwØ’h¡¬iðÐGve­•Ãqs£5ÚXÍŸ•ÙÔ’1\¬ñCÒ.YkG;Úq{IO7pškl1«Õ»aÿÓ?$’Õƒkìïªep¨m€ÕÐÕ^äE¡V­9®VŸÖxÂÙHhô%PM°F˜ëoç>ÊÝŸ™_¡©`M©››Â/ˆchéxDÖ_~jåä¥½S_=K¶·a¼zx8øø1uö)-”"	lfáî~è&­`+R­ÎFœ®”ò#ƒ©Á™ƒ5"kÎ*'cX»´‚ºtéE²ípv´º(àL“@YÌpÑaè¸Æ¢í˜ØÁ×?^+XëÚ(«Œ]M„g83ÂFj³¦-Ý·Éiqíá—h²Vd‚1Ö¬-a©X¥öøÃ‰ìéWNïÙc VÅavŒþ[ÒjN=6)Z*¬¬±ñ$œÑ\WóÐdÿó¢µcÌ@ÇsÏ=wØi`fÂºËjÊ<vâÄþôÚ;trï7Ï%ôë†0¥\·a'5³Y0Öˆ¼“ëD²›°ªóëjôèâ}œÏä¬_Ác‚Ñ¨b3ëG£CÁš›7‚gg™r+ÿæ7¿ùÝR¤ÏçÂš±Úx”a Ò*3<þÍïzAZ¬¸1qTc>”ödA*¹*iá_œ)jÚìHß!›YiŠxs&ð	s­‰‚pã¹EÂ#“0c°J’[54†ë“xï¡e¶ oAlS@¸|i¡“½9XS:$Z³šÓT±å·=½£Dè.LAop°ikjgßo=À#a“éù‘“Ë‡EkŠ„¶æg5‡5TJÑÚ‘#GÈ…Îäó•Œþ+¹.œ`KJh–´¦EÄé,•£4ºÆ‘f¦¶\žÆÓÈYŠÖÆ$Ÿ-`Ý?»ç7öÌVÇRhh]#3ÕÑÉÑÚüÜÜ!äYÑÏíÐþ+KêÍ¿ô³æ°æ)	>yŒÉ[PÚ›ÖÐ×ÐÕ×À5\H*Ö”I«°¤³Ñ1#HÑá°æ·Ä±$°¶õï6'T<XçHdÒ:¶~€¦ÖÂß±µŠÖ|A-…¹ašÂ45¾3¾1Õò™ý¬éAÐ×šõVK®&3!âEcŸ5bÖZŒ$F<ßGT»Ó5kB>†Ö]±›8÷ÿ{¶pƒlbhMC²f-€c²R­q!¬ñ—ÐÈn¼–&ñí–ØíhG;n·ÅZ"PÕ`5Ña®ý%j<¤TM!(Êôt‹Ô‚¤X­Yƒ5ÁÚïÿí÷L8ô<¿<¼	Ö8æô6ˆ«ŽpÚPû7?bB0 °Ù<¨à‡67Žã¨¾+ötöô÷	Ô,¼h,Vx¬™ÁÈÒâ¹s/r=%#ÈîbÖöªv6<¬ój`G»\N[îc9†ºüÁé‰‘lax27RÉç¶l¡j-ÀZ/HžøöŸíøÙŽri#Ø²•Äc+¹&—ìÊxª#žÍiÞ·Ÿ+ºÖ8-X³A¸&;y‹iY_l‡ÕÐÖî½÷rì'ç¼¶ž‘CÍšâÂÊÊ"°6;sú4ï"XÃºImlyzfûPu9×•)ÖøÓ@P#YÑ›Ik¶˜Íê´¦ð5`í·uZ»X‡1G,®]×#vü£q	^äûy©BŠšIf+O
ÖòÃÒOpÕ/Éà½nŸè}ÖœnŠ‚0
Eã$Ï"èÄkKV•æ×¸Uà•ñÉþÈ:¦‘l›­‹öŸ-‹~yÓ×¬0ÒüäQâþ?{çÛæy¥ùs³{·Àb ² Â@Á"Jä6—\2£x\–¤8b™KZ[Gv“Š.&+·É:qÓª…”xÖ6
»±äÚÆLRXí¨¶©ìÅnAIÚ mŠ¶@ÿ`½ÈöbÑ"½èÅþžsøê?³„Ü¸w<üø~ï÷~)Š²þôœó3 ´&a‚µc¹¾"Or¿;K†.o
åöÍrSHÈ°± }¸›66õc_EmZÓÍYIt´°Ësæ¿a¶¹÷ó-DNŠ'|öºeaØ˜ø©¬K$”¶päóÈoÊ~„»‚-dÃÑ—²ÃFQÔUùÕo´PÎ¤6É ÜËÈœPaš$»5Ê0[ìÖª]+µbõ„ ì«i-©«k'N|õÅ“;yŽ\/!ÉuØMÕúTšƒ­ .ýÕ"- K‘¹ˆ)?bÚüüÔüô2¦!dŸ#ë§õÀ¦6_OYõ§”	Ym.?·¸´˜ÏóÐYØŽÕÈªÌ•ôÛh¬–tqQ›ÏsS³F±š„µ§•‰F´ÞØ‡B¤DH HrÛk®­™‡?p¡ù=d…íiÁ.#{öHàðÐ1òÎðšf]…µ$¦Ý¾ª]Z°ýe\`ÇëÖ0éç}Sö(Hk 6š‡{ÝšÞnš´G¬U³É­´Æ[ÎÞƒ¨™rR¸a-Y²Ftb5ÑZ›¶æptKÜaVƒÒ:9÷³uHƒLâšÛAJ\K¦A&po=a0§ù–DµÛÖÈ€l7âTðóÝ×+YëE/zq;¡$ÈžÙÎjàdˆf¬æ~Í±âr'V‹Ö"«ýâ§?ýé5 KÈŒ}º»°æ;_Œnýb8g7‘˜“™§?z¢ã½]E¸$•K„×úÏnØŠ‹™çñôocB´û‹|DÁ]ä05¬›š%Qò™kDÃ<EJ%6-`§zµQ©i$%»ÁH	pã3a-·kWvr,½] ¦{¬Xkk­»Ä%ÁZè NEFÖ)-ÊÙ<%Ò'mVIÖ2ló€¦1FG¯ÉxÒê×ÌrKÊJqŠ²5h³ý½‡‡Ö,ªÅ,ÈX´®á12ÿ|…"šÅåÅÊìâƒfs~ùðŽÛÈGÛr“D½¿>™Íæ&²•4Ž&žÉÄø1ÐšZ ¸ÃïEZSxlÂ€Ô,^qË~éjo™®Æ#ôŒÀšËu²©Õ‹’MîAaÔ_pG	«!é ·ÂFvÖ|RßZä`¤Ç†Ú5\1%ôº7AÒ@Íë½*%ŠÖ8.ÕÐãdHÚpX+×…gøF‡^SY8váØ…‡r°¡­Ú(â)HƒG<*R¥š/ŒÚüÐÃÛ¶l´æ,EØqki“æ-¢H.ö/îìãÜ¢(ªt­VlÖÀ¢dIZl¤OEæbçóî%mˆÔXdZ§I3ªŒÜdä¢6ãœwûqò¨él–)FV€ÈŽ×£Á%¦Ð¨)ý“%™ÅÁ“ÌJ®áZL…LÄº¬öš]xâÄ_Ÿ<y?V§ÚLc‚è®?ådê¹JŠÞ× Yu,×O5A²å+´&$æ÷ŽäÑÖÖ–¦Õ#{D$i˜¬²%¿È%cKÀZ:½°4ðí¶­^¿ÎþŒÕ:ÚA†Qqåâ4uÃÖþÛ‚5T51‡ÉD. ‰'äÒ/¹m#¬qxß¾=x¬ñö>²"U¸¶Û­Øˆ?«ÏÈ=›Å37méÓ0ÆS-P³®„êøB<þ8œæ°«±iÍwÉ’5vIZc€€	Ÿ‚ÉtFpp`!(kh0Òµf-i
ÄØºXAÞyß~M(k^_§ÁëOHkÍûÖ:›ŒÜ—0éb(’0„lSÖüÁtYëù‹ô¢½¸ø×ÿ.Éj¬<§EX³z5ä%@K ¼Ðjí®Ì2–q.iÚYíC’ oÜåHÆÓ˜r–@µ¬¹1dÛÚ~ÐZÝÕÜMÄ¨Í¦Žn®­¹°¦‹ÐB›€ÒÝZ-é£ìÐY¯;›™iËÇÃa$*k×Î¬^(;è5Ê¿Þ
šQµv—ÍÕŽášŽ–•õ4jö€T¶µjs"¥¦é]©Ù±	&oõjIX3Rù²2kÔ¬]?ÿ@Ÿ"Hj1”5ÐZ§Bók†¨¥ù
Á˜TÖ¸è¶`­Öœ‡˜)˜¤YÓ<MZ‡ù;ÈÿÜmã0ïvòÓ^ÖBOì×ÿùúÞ†Ïâøˆ¹HbWsZ]ó³ZXÈÏÎ6I.M¥3U$![µšÒÖÛ¬µÒ}ÏÀ’¿U{ß#N¯ÓÚ28áâ7BƒZŽjŠ£ïeû…Êýuz»¡±aÒÉ¢†¬™	¤P‰<D¹ŒÈ_¤-Ì!48A…Y¼ÆBM¼6Ýh‘çu|¢Ds„æÌ^P+‰,'0z°Ùþ,µlîK_xã¡LÈÊŸ›*$*åÆçZÜ¦§ã¨p>Õ‘MÖÞ"quû•kkÈ‘Žiì\˜DXSžä¯–y…¼Õ–Î\6ôÒ"¬qnÐA‰ˆ$¥S6‰°fðÍŽ7¯’³H¸€P) øL<†XyÎX+7­]v­Ø°Z6K/-;¬Y2ª`›Ëj¡9¶ÞÑÂ 9	ûÆZ°†i²p­Ýkbî×¯]~q'O<™Éaâ?¶Ïeú­S ž:ühi¢YÅ„„Z6hm‘œÆ|zÂò†—åñ¸Ð\Ø°ÁnÐZŠY¥Ÿ?¦`F²ØÄƒdmÀËë—K,‡(¾ð?VGV#«¬½ó™ÒÚÙ0›ù[‡50Mîýˆl¯>ñ0´ö´Zi°=ñØîÝê¯&PÓp“zZbƒÖÙØlàÎ7nŸ Ñ|ì&¬=Hì5`ì“ÆâqÍÁ­íä?þŒfÔFX£´O¬@NÈê-rXë€kQXó©ßÂ`aè YL„L²ÛÆ4È(¬q3T‹¸æ·[ãÏÂjÝ³ Ý›2€¤"Ø‹pëîÝ¯ï:Z÷³TK¶ÅÚ˜]Õ5ÆäñŽüÕ_ü«^ô¢½ØtÀj	TûÔ§TG2‘š'Azv¡ä%ãž»±¼ä>v|XëlÚï¬ößÅj¿ø‚µ·ƒkøÔ(XcÇ`I1Ücä©6X£sšaÙSûÃ!\Æ.¬sÀ3kA/ÐaÍìDî¶‘@vCYÃrèÑá-WüÇ•¤Ó…;Œ¼cè°zþÌÀÕÕ‹’ÕÎ\û>ºB	èÊ%µQ"-Ò<Eäê]v7È2RåEeìåùÀ&·‰©f>e°VÉ§f11ÌOÌkC	eÍ…5²F ¬AkçÏ_ÿîuik1ZÐE*^èn­EP0KØÐÚÚ±*^›ÙÂ#º£š_×ÖÜ¼ÃpEÍ§$Àmßò®‘á<®#©üÈ.½ë1*Ù/!ÀÚwÏ/ÜøÑõ·Þ:M'¨ÅEYAÎOOÎ7—›rAÉW&æ×Ö¦+Û³cÀQmŽU 5âª¿š iLBV¤œÞ¢Žmik`Ç¹–F$\“¶¶A"Î)ò›ÒÕ <ÞBÞûl†Þv[ÄÌ’/3Ðõjrý0g}ˆÜœÕXøãá¤[8oÓ¸
ÅQ_w”S Í½ŠÊîÅÐ
Lm»„h=°-Ìúk:*–Ñ2E‡«ó¸ÜCÛX8rèÐ¸?¯I¯OãpjŽ©-Žj!D!öÒ6#óoY—‘–¸&?Õ«Iœ\ö¢?Z€5…4&5†DÄ<AÉ[Ì,|ÁwÖ´®Ðñà	ï‡`2' äElØ‹Ø›.ã¥½ŽžD.Es#­´EwžÞÈÍR#I{Ô„	ßùQaëo„Ê÷Æ}þAÙÝ¢­År5l MVƒÖæçNòW àŒƒc“—ñ†™Ìõg¨œÌeé·ÈZ:¿0‹ls6[IMÌO¨p­9„-™yH~aav¾IÃ5B+{ó$@N f"´`­ŠG~äÑÃiNê³pÞDêƒ×[‘„µõH‡µoP«¬}üûŸ=þ´¬FÔ]àxš™hM…j”cxú±Ý‰ÕÖXAWÉ±w^“Óš´æarGÌ‚û?_üû°¦ûm¢[GRŒLÙsºIö#È
‹¹¸Æ ¬=á°¦ª5Î“ÎèÁ{É,a·ÐÛw]Y#6få¥HHÒ¥f­ÝºôI¢š¶nÒÚöIöÄîœ")¬y«%­	eÍ­-’0Ú²±#¡%Eµ8¤&UÍVÿmÏ_¤½èÅŸê.ò)óìðóûG÷ËZÄBEbƒµ‰j Û `mà.K‚Lêj·¬ýöýüÃß^ž!HsQYû´ÁZÕtö™§hÆíN"ÕIXcPdx8MwR\€µƒ³ÈÑ½Ê†ÜvöÊ³Bt%ô Þynxèâs/]:¿ºúÐàCÐhíâÅïRv•‘½ÖPæÄ€çH†ØšËkÕ¹q÷í/r©T%ëŸ/+»NŸ>¼”’²6ªX‹ö"_–ªÆ]ñ€µ–|V¬©véË‚5ê³rÖ~×­-ûÑÁ*¬W¯u‚µ@i]a{×Ic#û’igFR¹píWþ£>,¦û·Ów-¿}Ë•ÏDXó]„µKÖ®]ûÑw¯_ÿçã‹À™•ÚPY3$'É¦Ü–ž snäJþ×h"UÉU0+¥²ÆeWÙ±·¹C“–øÁ›¢µ÷¾é¸±cÞ #‹]- ÚQÁšBú^?ÞÔxF˜m?pãàÆ§g˜½Í­!ÅjÈ¢µbpÏ÷“QÅš_­S ˜™àxá-™[÷2kÖôO„®Ù$G£9æ‰¥´©ÙÛä±‚²çÆµhôÈÝ4µCS‡^°z1M3;â0ÂZL •k‰Ø>BdÓ—«á-âòVƒ—¥ŒM7²Ú`;«Õ žhÁÏ4¤@†°K«Ù“¡õÛÁ4" ›©•ƒ U%=*iSŠ|à2¸#¿‡]ÏBÍr=!7[¬1ÃÖ,õºÁ=„2iksA[‹¸f¨–ÔÕÞÌ5Õ%ÊÉFõ°üƒ«é¿	ÕiZ-Â‡Sc¹ÊÈBª2Êå0šÃ8¤Ú\jN ”å±êÏKœž]lÊšHýÁciž.#ÒØ*cóËLÏ¬mI©›v~[~þù…‘jSÖ’Ek>~Œa?âé¢¶Wa±}(D2ñš3ï‘Ìv ›Ã‡w“Ñ‡Òö8ayòÐðpò0\¸ï¾ÀjÜˆÀiqÇíÏÓgí‰ý¯ý	ÉèâßºVþð››7o®ä¯,Q‘Úº
)±ñ ïlreÑÛÒzsl
Çùb6îaˆµk¾RçBÍÐY`Ãµ®5kÉžØ" ¶,Èî5k¢¬;k›J‚ô×!#®mJYKvZccHöYÓÍãvc‡zµ‡mÚË‚ìE/zñ§»‹<K¹Úƒ$@JX{
%ËÍEÔV&±vØ’×$¬ÝÕhßœä‡oÿöÿ6p”tÃ~¸‰«äzíZ»õ£¾¦;8êˆ‘—Â‹®ÝÒ y
!›_Ãû	+r+•,²dV®Á }Ûg)\¹µß×;ßƒÖÞ¹øÜêêµZíüêÀVigå3g
¥`mTæ"åAs‘äÆÏ|”­mœäc:¡Ï}ÙJ…OiD&=³²²¨ñ§ë••ë±_úÚ»Ê‚=Öè2†yý~ Xë7­¡V«[ƒë,e*.­eÙe8#n0z¸êP–pÕœ–é@j›ƒ5¿¬ûÒ;H¶ ¬¥Ñ´Fä*²7ÏÊÐ•xí,ŸõZdP­k±d‚½çÏà.rýÆòÆA±@%ÏE©|jû°6WOg'§›cõŒº­¥©`«WÒ}Y£Gzc;§1²°Z9ú¦hmå½ÓPØ9Ãµ¨®qsÿBGéjÒàÄjG·åÊ¸oŠ7¼Ç}u~Êk5º}¨va-6—v2
êšŽÚüG3ƒ£:Rýší\š­©·um+²YÙ46PMÈæ…nœ5JäãR×ôœ¸k˜‚ j2ç·ð¾¡ëÛÚÜ:¬š¾oxIGtà|'Xãí0^¦Fkkògá­©¹ï$ë:äÉjÉ¿¸¥ÏBÐ¥Æfýwd½\ˆ¥dFm~q„/Ã7jƒµ.øµé/K°‘¤(pÀøkØ8bo%hüJš‡ä†pÆrˆA‰k¾ÐÊ¨Ôµe¥+JUSÔ¦èÄî¸&áì#/\ó©E]í#ÉjÇ¥¯Rº<~rçdaçÉñÉiuV(ÔùCÐäÜœú¤Õøw™« …Õ«SS¸÷gëåÉ&F©”§-ÀiÊjD-;·0";È)”µÃ{W¬?vµÉÚáT~X›Y\–ùH°KaYÒœ}ku5Ÿzã;H" Z,>Å¹XSCl5Çe@f€wØíÀÃ¡)»oh€"b3ÑFìÓ^´£åù!M[Ø…ÙÖ~§A¨v›ÊZ‘NS@íÜé›Š•]K8@Ê«ßau&§¡6
gÕœÒXÆ)K’C„;$ šE\ãîŠš¢­Íš°-¢šnkÖ’fÑ\¤+­ARwÒºŸÇ‹Ô6­¬µ÷Ä¶vŠÎ°FÜâ² ¯ERse-nÕ3_é|Âö°ÎõJÖzÑ‹^ÜŽ»È§ÚüúÍ³ŸjµgA#€m?Ü¤üe%kÐ×ÐÖ „µÐ;aÙn.òóÿ÷/×xŽFÃ2a/Ât5M’°†gÈSš)f÷Šë˜†no‰güÂ8ÌÂÜO´î”ÆàRšÂe\U"”YÊa.Òú˜1c´4EX3iMNV–.œ/4v–•ù|+HÑZ¹±.¤•T©ÖX÷£€48qy \Â²›Þ}}Yzƒ-ìXY9=¬áôM´¯=úòËgÏ~æk_úoÀZð¹~ãÌ™Ôö__}ãª–
_ÌLÓîbÝiM§Â4ñ)ØY*ÄÖ=¸ôöŠs&ÑÒkÄRÛ¶ap-?šï6ïð£¸ÇHBXÊºâë7ÎT›×®ÿèÆ27nb·Œµˆ
ld‘0ß$§‹<È‰í’²™-
©j^•Æ<ÈŒú¹¬ëÚšp-pÇÜ—™8ª‰H\VƒÔˆmõrYl¬ç°7•&xeQš·ÄÖ·Yì„ÊµÀhÌbØºÃš‚±åTÑ(iåLÊÒªŠÒøPã@¬…—}úW¡šÉp¥2æ€¼ìûC‘áOlþ÷£ óµ„cãS†fk`ÚškÏÍ¹ÿˆêÞ#ö<-Á/ÀÚº¶Æ2ujžG€W-ªû«ŽÛÈˆ¥(5Øu4óë(›¡ˆ„zÇ¡Pƒ¦{Ö|5o>êáHØ|Õv…é@©,j“P°)‡¾Ù;¢ IŽd™Rð&M!R«y%›¯•ï/×dáïU‡RÉËÕyÞž˜	µ5ED5NskPÝ+'`µ¥Ú‹'/ŸÄYm²6~™wóòåËs“ÄT›È4Õ”ˆÍuìFÒ”VšÓkË‹©Š8m‘»¶Ãü&MÖ'H~\Ù»4?YÌ¤G
Õ°ôŸ Q¶šcäGF¶l[˜èË._{ƒ_£ï¬
Õ°æÿàõ¨`íÛ°êÀvà±'@²ÃÄ_¶ý¼*BSOl¯YsÛ~ù¶º3’{Ú8-ÎªCkÆüÎ±Ú¾˜ý¨ñàZ’Ô4áö’WöÍ¬Ü¼yŠÿ¬¼¦Ò=6î®¬¹o&«;<¡	~µÓ& ‹ºšÏüÈa-vÑ6Lk³ƒLX÷³YlÆ¹?*klpmS}Öî¼²Füñ¦ØI\°µçAv¶ƒì ¬éÖ^¶æ·îµjì»fBzìÇz-±{Ñ‹^l>þ"
k¢6ÉjÏZ|>*S[æ¬¦¤‚=3LÄª‚µ¤dÒ\DÂÚŸþô‚Û@
Öá¤f{‘ZÒRëû•Ùê¢F0‡Ü„hQZ{Æ˜-¬y¤
so¼w?Œæ×XóµÒtJ.ÎD;È}ÖÎŒî=öÀ÷÷ï<ö7Ež
·õ-°a¶r 5EJ\‹QVk&}Å-’±žÎ”ô·÷¬™´AhüU›¸y“áñò£¾ô¥/½ûÜ¿xéuÞ2Pííµg.¤zã«fŽk-+›Äfiâ² ˜1Ùj›-n`3]ÅíŽD[	œsÐ†š5"Ø–´¥B¦Óø©¥R˜`>É{™/'„µ¬­>þúõko0|s~é8k>	° ¦ôÇ¹i'¨5– ¸UÇêõ_-5š±~0áÐë©‡µ£ ØŠÉf‘<`¶€ šâ4XwTÉòîëÉý™í­Îæ¨•*+ÝÑME¼Þ‹¬9µ)|çG‘Í<¼ùˆwEª'`eÔ2È<ÅL]z›£ ŒV*Ô€3¡d2/Lùq™>ÁšûœX‚¥ÙñCÇ²ú·#‡$¥!¦AcÎæ9zÁ)i›šâ–Ù®Ã™¨„AÇM{S Ùh
Å5%@FuRõj¦O²UÇí©L$¦Õ £µ¢ªfú´émm°¦°•¬1ëšïè¹­h4Šq.Ë–Á†•ŠÕ|O™êàè‹‚5­m¦k”®ÕJŽkâOate}ká~·”"Úg4WkÂjˆkk×ÐÖ"®ÅH/WS wÐZÕXmüþ“—©S«ÓxX£—š´µ¾ìXeË–:¥kYu6ÌöÉ’u¬ZY˜˜]XX"5yª./çrÍ%Ùûc5’éOaÙääÒXsa‚dÈsäGªÝÆ®t“c8\üÞgWƒ²–ÌƒŒ¿Á|lî"ê~-ÿ§ÛŒ=-`Sñš¹Ñ«wØ«O#ûèÀ„µ}b	ašá›@ã¾Èi~Xf[2#RãŒ¿¤ýîYŠpï¸ÆM¹+WfžÜ;³cåæ
sâÛ&#®B*'ÒhK®Æj>rg PÅk\#*k¯÷Bˆ*Û†pcÈÈj4º¶&TÓ½{›51%¶÷YëZ³æ”õÉQmS]Ö’}ÖL	Ü„²f¬Öf1ÒÑò¾°‹ïb’Ââ¤³Þæ‹ü|ø‰ôZb÷¢½Ø|$Âš+j¶=ûž}ðàÁ[žý’£0úp:r¯¹·âØqs‰ºZÒX3#HâZã×wö@±@kÁ¾Ÿc¶NeœƒÔ¤ï!¨Ù:wBë~E`5=³Ä´’ÉkÖáü2ùY6ú 5È¬ÖÚ~p¸ôüý£V/Ž–j˜‹à§<H6õÈ ±æn|ð‰Qk¥h6›Í¡¿õÑ¬Y-Œb?YIìÁ†]í¦ÃÚÞ£§~ò“Ÿ¼Ä×üÚ»ÏÑæ )ò‡ø‹œ?S¿píJš—£9®q Y½6I\H-!šeüZN°ïd¶ß÷‰QÍCûp´µ`æ¡5æ6á0½]ä”ÆÎYÉ`í?«qç^ŽB¤ÃšTEäµÕóoýxÙE5í1þ¯Î­Í¯MO£¦á0žš ­>&s„éj5“Þîejô[S#¹,V#!xáµ3ùM/\“+dÌ…jÇ †Éjž©äê5Dº«^£§,ÔÚäÔ¤š…™¡HÁ#¶+Ó„ã€9m©.…%ÂvH1B§Rq@v¢µÄkyÐNÐà˜!…Q}a%çZDTyM±dO9ÙÖè„-h;2~ä—À$Ž³fa•i3•ì¦U7d?	¯ÚaÂõ÷,¦BrFšîéÌ+}RoåDÙ;ì¬y»$BY@5.e…ß¢€eÑñÑ·Ö¹`ûß9ï±»€Ö½ªîŠr„³Fù!H(3ßMÊUÕ/Ï•5,9©´Þ×€„Í"Ñ°ŸÍ`ïSi•´X°R3ðÚ|/É_X~…pV;aL›)©…NØ’ÕÈœ‡Ôˆi`íäÎòøÉñ¾þJ63uùäel=ç 4~ýiß—ÅQ$[Q«5k¢–ª \cKKcu~ƒhv!aíør³’ZR›¼F&ðjuÇ‘µÕùÿV’!³K³úEºøú¥‹Öp²Ö¢ÇˆOf?þñ*´¶†$¥hbÁÛ>ÃhÃ"›°æÅWÜ8¯ùcØA&² “%kq³áÛ² ª½v»¥jlñ(yÆ$µ›üÿè•™½+Š›>œàm‘°ÖŠ`Ef–ð¸O’šS;BSË‘¤ÏAÓÂ\ìksÙÄ}AVã»6|à2\	YL¸AjÖ	Ö‚°P-á-Ò•Öî”®ÖÖb—5ÈkÝºbk¥µ[uµ ª…“¦±÷Û“Ôø	±óŸX/²½èÅæmû_Ñb¹ÜOÅš…§@"i5œ³\RkB*2Ä3ñŠµùðLÐÎüûa³¨9?úÔYP‘£»ñs–«Ý¿_wR!k1×Ú¸
°ãÊ–¶v¯ÁZ`5ÌEJwÑókèÊ£g¹»ût[ÑZà†Ðhíü±.¾¾Š”hõiøˆð™wÿ(Cy]Eãµ£›;®àQjôU¨ú P­2[žž›¥3n*¿kfW6534Ó’Õöî˜yòÔ)ƒ5¾â?üÃúáøõ¯ýúÅóoß¸~¾'0ç5¦ì2u­­ÛBêëŽhZø¤`L–—iéO %ÐZ½Ù¬­	õvE‹wÝÈÑÊï}ÙhÍxíl›®Öæ/bmx¯¤ž[
¬F,æg§²ï¯6©ª¡üm–|È‰-•jfËäè0eE:$ÆÀš¿^££¥ö¬¾ù®Ðþ‚ÂH…®EôpV“_¿Î8©¡«)¶Ôk9’*yÅÕz­h=EÎkk‘ÖtÚ$GRsX!9ÝÙ*Y(×±ŒŽVÂop@öüª}“Ñˆ	kŒf5X(Õ¼t³/Và²(ä ¼ ég5yKR²F¤T4ÂZÈDnÖÆåˆ£Ã)[xszeþê|ïÓy½/D0…l3QÙ_pÒ4YÍ©—Ë' —F«¿w_"?Œ±ZÁ©Q*o¤§P®æGLÏÖ;WÅS<4ÝñŽY±í\I]µA“ú)°)ÊJs$,á™s0`ÍÒP­}‚`­Xƒ°UƒÇÕ(‡ˆÓÌh«`-jkˆkÂµ§ý.´ÂžsaMdwÌZƒÕ.ƒ…ZFþBs—wNU'Sut´\!l²>KÃüA³GR[¶Œñ·ŒzˆÙtŠ®×üq­šÍ/.Âs³ˆi#©Nþü†åù«JŸå……å…TZMµUšÿì¥×ÿé’	kÝ”µ™í_Àeíñ¯2ùøc¥<¾ê~ÀÆnv¤|GCµ}fé#lâ¡Ê¢3í“[‡þØqíÎÄ=ÿ$c»£ñ—^¥vøìK?Qœ:ºrÊ55›x³ˆÉ—/¤öæ–	Ž±YMüf³V×µdkìx#V	­µXM?°¬MYßíÞ-dksƒÜÍ%÷t„5Â`í6Ó Aµ;Ýa-:÷'€üEº÷Ysa­]ZÛˆ-Îh6&;jl1–|²IXë•¬õ¢½¸wHÍ”5ûÝ³Þ9øùƒO9¬‰Ö>÷ŒibŸÆRá¬FùÙX$µŽæ"°Ú/,	òçÿóUnNfÆyšû¡À”ü¹1…Ï 2ûi²â5ƒ5·Àk±õšÎéRSÖøVJë²š¾ðÀ¶+T¨ÍdÛBÕšGÒD^±zíÚ*»ïµ|DKÒë.¬îßI^a¢ =™ŠÊéª5¶f³d›ÅmªLTzhxx×öüð0ÒAÌ^üE€5÷‚´·ŒPÁþ×2oP±¦üÇØiMt¦Ò4wïW´Ô7vÑ2ÂZ4óOÀ»ÛN~„sØ6ž
°6dÊ•KXÜ‡†¶©4¶ýjN­¥¼>>B§¸ºvvæ,øØ¢°aMæn\;O£¹Ãæ-²ÜŠù±êô”`Mé#ÃÛ³u:­mK7«D=“J9-‚Ž¼‚ØpÍ¬ûCa}o¾û®ãš‹k§C^žoy¥Zhƒ½‚	ªÚ{oXËäølqX£z0§Ç5)[|„°6Î>ÀÚ8ÇjÉå^ý‰š5¢P¯…ª5ñ•k[k0“Q+“BŽ* Å¢¸ †¹œkékÎ‰Êxd§´[T…|FN:¢GƒmÇäé´öBõX¥<~Dó@kk‡ŽŒÂnØ9Â!×hP2$”èM²ù®-XCÔ;ÖFkâ5!d5Ž!5qaïeÇ{5£T¨e°²”‰!¸ÆuJ¤.¶ËÕ4E,Mc²	G®ð¥}÷–Ùí´æ“ø WÍ5Ô„ÌL$êw½e="~.7ÄÍ^ª&£XorWã „	;¢èT/ZS–§úŸ‘	­mÀ5 NãöUfÒÕ¾À)Î·t50km\´6W06ÏdÆ&ùGQ#d
š™“¹H½oK^-ÒÔÝrÎ\zV‰ÃcÍ‰åÙþ
¨vƒ‘z6Öf³)ÊAI'&šš³-prlbaXSÊ¶<!U¯öÕ¬uPÖbÌý-rEkO?A$°öíÇ€fläõ‰ÐŽ˜³¬‘ I¨·Â!M-¸ÑKè	#Ž×:ù÷‡Áî	kÄGRûëäA›ñãËúÿÌ)Hí›Y‹èvÚ`í8&³®k±rMw©O8Ù&A-ªj7½±AXSI &jˆ1‚™–6Ö¬ÝÃ#;Ã¸zb³‹º³šËbZëšQMõjÜ×"¬%i-úAvÈLV¬ÙÐ%öhs‘-YÌ¶kÜÿªW²Ö‹^ôbÓ¶ýŸÑ\QÓö¬Xí ÀóÔSðšÅ3
P¸[Ÿb”mxwµYÃ
²	s‘k‚µ_\»ðk`ÍÀì.¦Š™q·B´Ö*›ÉeÁIÄ(L£a™#¢1‹¬&©M²šÚ`3è«ðJää¹AZ=»­œÙ6Âû˜„µ‹£‡Vù òYPÍáLi•;µ’–ø`6Ø°†Æ6Y+¸N ¿©gõ¡)U)÷Íl3˜@îÐ}åÔ“W®¼üÛaMšÒw¿û­.œ_=¯D»šáZ/‹`îÁ+ šöÀ˜pó}4ï×øRg“þÎk1²ý‘QYcÂÞƒoR´¦ôGðT”´k×e0$fm~òK„|’ï:k	X»´JäÛg®­®ž'=X³F¾ÄÔ¨¦¨NNÍ­-ìØžË
Áa¹÷g¶xl÷—`;gHvöò´CsXƒÖÜfD¸¶7À‡6m^ª¦b5. ê¬ÕsÂŒ«ÞW®ï*ƒ#”…XÒr¹Œ@7¨F®—µrk²ã7e†¤¦»µésuaæ€	kzhmÖÑÜ¬+sÃ>îkÀùRºÆ®‚ÍŽ¸…¼uk§oÚ1U©	ŒÊ÷€MÙ+Ñì…¶Õ˜2›÷¤G"¤CúÛéñHmå©rà		§J`9Ò¢M‘|Eµk0“ç\Usî=„ð7`tSÄaD²•Ë™L±¯e›:†‚ÍwÒçá‹ë“Î fºw²š-2˜‰èkŸRk%Ë{äÝ-f²1Q¡—¢Œ`
e…÷²®ycr7€4šfOðÃÑƒÊ&¶5EMÐ[ðð7äµ€j
;7/Î0‡ÕæH…Üyò$ýÖjˆ“ccõZ~ƒü†ŠÙt:‹›ÿÄ=²'ëÙJsz«þÅÚÈ/¨dm~m2“Î^œX’@hËxö45]Äf$G^$¤'yŽ8ü~!W¯ó;é¼ê¨¬‰ÜÎþWy‹à)íc46-Ò3!ÍÛŠ³Ò8`M'žPM›+@pƒ;Œìæó2ŸˆªÅ¡×ÂôN±Ú=(Û<­uÇ7DµWÎýäý—^:«©Ájº‰ÒNã	¬ø=8æŽû´rGMD 1Q0e€¸,]TÁÙêšm>¶Ø
Aò>íy§¡ƒ÷lÖö k»#¬µÑZge­»½È©YÛ”u²h-Ö¬%Ó ‰vXK
kNkÁ2©«q×ÖÔ"©yD8ö4HÞs&½.k½èE/6ï.òàƒ^³±±3Vók P„µO+î½KŸbÌ$¤qüx£šÔÕ’kÊüV»ñkpgÑÌÄ›«‰Õ<°ŒÅlV¤Æž%Ëm„Ë˜2›¹÷ˆ]æi~k²!)Ù0b[y”àËÅ™þFãŠ0ÍiM¼¦1°Z„µóåÒýÕ,ìÏÿ%² qÑÁ ô’È&{HXM	j“õL¶Ï.,7€µÙÙTÿà`¿º¬õo¦6†gÿð“•SG¯œ}ù%á
_ð‹dA¬­®âÞíÌµ7z X#ÔKW¦¾^!¤³1(Öw&Nu“dvÛ–¾´-ÐZâd°^ÜæW©J€Õ$i¥pØß5œæüÈ0þ#j™ÖÖ,ÕíX»ô=òNÏ¯¾}æL…¿úç—ŒÎ¦ˆ9¬M¯MM¯5G†ÆRÃ(h•Y² «Æj­¡J9hfS[uÂµÁ7¿ò®"V®™¼šd[lnïíuTóx—Û6~ºu¼<rržÌeú€¶\Ý>—”ä_vXË¡k™´)Ç4ïV]*¦ÅªµØþO‘\T“RfýÈä<
-p™=°T„¸k£…­ƒÀš0¾&=¯€×uáª©Jeû²SÍcB0{êèjÒŽ]H›š³µ_¾°vhÜE4g·5†5°&ÉâÖ:{Tºs®¬À]F€µõÚµ_i ÌV„0UZ#ªz,òr¡F<Èéå7^Å¾AÓ×\S;¬o1vMjôËôDqÐ*ÑÙ2±îº9´¤!•!ž±Ájz@¹ìO9 =Uª[¹ä¹œ&œ	ð¸ª¥”-ÉÎm!`=e`¬FwÙ€k_E]û»× ¶`é²´©qkæÊä=Î|ñ~`­\7;PºbWÉ^œš6Ñ¹ZžÌ¨ÿâääZ3i‘c¹zU	Ä{÷ž­VqU­V1$YÀUCÕ¼D8V[BI·M ºI•KéäÈ.ÁšÅs$t°ƒô6kúþ†\ûqì¬‘ùªÜDäÚO€q²‘Õ!iÍRýB61
NÒ‚î3^Øm°-$òÎ ÛìE¿ë ˜½v»äæ†"‡g¿ÿþû/=juÑk®¬)FvQæ50i„hLŒë‚¤ÁÞûd›ÔFøŒhKzlÛü=Gï¶AÛ>5^sVS0qXADkì¹lw€5‡šDdwe-ÂZŒ;Ý»»q¿¡Z²fÍ½ ;KkQX‹ÒšîÎjIm-
lDçüÇ„¢Ö¦dj€Ù(=ìeAö¢½Ølä¿Ï\TcßB56µXKJÏÀjŸûÜ3pÚÝÖ@´ÖX^n7‚ìÜXûð7„;ë‚šT0g²°Æâ`•9/€sZp$³“ÌüÈ7"ä@nÁ2HS˜õcH‹D]C,=ÃÈüç¶øGµ¨­}&ÂšâÚ…Ï>ôY² ‰ ­ÉýQÊšüFJˆlVlÓàd±DNdV«4'–û”NQ6RÙ:ˆ·HXÛ6DÕÚÌ^Õ”Ó{xæ¨yAŠÕT¾`Ä¬¾ýÀ iÆjôanG¯¾Naø`Íg~ñ«;¨ÅI¼ÒI-,´[öÇÇ`)b1(‹9Þ"¸÷çIO~T’ íXWÖV/k¯¯^¨NÓ'*ß”6¤¶ùæ¼bmad¸’BÃ#	Ó¬ÜñÄèZ_Ù§­WÊA¨¬¬}Ås!c2¤Cú]nýZÌ€Ô•_y3]žªÕkn	YŸœ¬#wÖém&9%#Ne.J+dŠŒÑ›IiƒfÕH§´öDÈè`•þ²õg+cÆ¼J¸T£Î÷gÊ5eÜ6$×Ô¨…„kÅÑñcâ8$ ’™‚L™4vDÆœ¼¨{Ö~Éôùç_p.3 cÖªR›gNcÆ¦ØY,2%x‚ñ©#hm¼Œ€5¶•„¸æ±ÜVªæºÚi{W›5¨P“ß†´©øÏ:SBÀ„5õ;%Z“c´ê'$³…èÜE+oA®»Å¯¤}Ä³ãµ=v a¯D«ÅV¡šû¿ò{^*ðRxæ#¹‘%V½=›Ð½æþ#\
ÊëÛõÇpÔàäìqZ³€Ö×<>Ù@5š«œëjK\~ni¡¿X«ŒCkãS ÿyóÆ–ç›Õ9ÛþIÄgÔ´B4vþlÕÉõjÍ:ËWªÍå%Ô¹zkH|FÆ°¡vZ‘Í¥¼‰ly¬[ÓÛFø¥k.Îçw|p	¥ßÔîÎÞý„ÃÚÇÞfí€Ò‘Ø@5;Ø<¼gŸNX†Ÿš…	ÖöÉNƒ‘k¥®)¤ñ ¬ÁiÀ»¤ÕˆOZHÒÈÿøöPÅZ·$ÈÍ§ABjÇOs+§nkG¯XiôË§HƒDW;eî"¤A:¬þÆÞ/,•åÈe’dpîW8É9¬q°‚LôÇÖÍ'ƒöÒáxœ+l„`-¶Yó<H² eTµ=÷Eƒ‘vç~e²%„µnM±EYwB[ãá›¦5ÖbSl^´Ñš`­{ÑZèŠ­»G’Õˆ@k]í ;kq
¬õJÖzÑ‹^l^XóŠ5±Ú³ªW;8j°ö°v°Õ¨^ ›k°Ž+L*Y«/;¨ÅkX]íí_‡Öl8~½¿<æ°ÆˆÙ£ŠÖÈÔ=X†˜Ê&‰o¿$µsHs­MÒ«ÅlF…ÚßËÐz¼¾3ó†dð‚5Z7EÖ.>÷½‹—.^µ}¾5JûËù gûmâïH¹4À©Á­ÙJunª€{?Â…!ýbµíiX"5[žÙÛòÙk¾ýxA¾dö"_¹ôEX3Èë«ÿæêùo}ëâÕ¬õr–˜‘Ã´âÄFt¢µpjp9´%Õ°[3E:ñ0¬Ä"8OZ[Xš®ÔÆHÙC 4¾õüP~„ÐGÞyä‘wä1’Ö¢²­¨‹¯01­†j;FšÓ“ÓÐÚô[sb¾JéÚ´¶ÌgMàOHFà–
Z:[ZDæ¶ýÔ­)Bû·ÖS¼ùhTc¸öžBT¡Í 8	ñ.°V™š’žU¯÷Ë–³PF*ª!5æˆ.L[pU˜²±YÑËfÅšÎOÁ,IXãRß•­BÑ#)BóNkÌíÂý‚@S£ŒWºo­ña[¹`­0eÊÚ¨, Ö÷!´çÌùq"âšn\­P;¶B‹Åk­¥9&ŸOr!ßb[Çµã~7P3]ÍÉ×âèYÎ
ÖàKEF†:à.’šY÷‹¼‡5}m¸ÕvÅùÕÔÚ.xµw×ößÛpØ†He£wýkb5¡‰§FkÊ~¨+Ì3²ÖêÂFs˜5ìÛÑ…h¬Á_`˜¶nybHûNSüï¿6HT[n%/,Îò«Œ¿ãþý“õz^Ëfñš˜_›¿<>5–«	Öªé
m-&Ëõ‰z|›Å¼_}Ö––”YÏP©Æ¤^_8œGGN#²”—îX<¾8‚ª–çLX®NŒþ`õ;ßyƒœd•¬u+Zãøg¯ŠÖ¨U{âq&(E XÐÕ,§ï€Û>An†ÐSä4	kŠÇÖ¥¢Ý|P¾ïá=ŒQVk7ñ÷ì;›ùBa-IfÉCŽ;œM¢Ú+K‹§s‹¹Óï¿jÇ¶Gj§¹rTi+²ƒ¥>m±¨fØd…ò¶à+ÑXe}l š—ò#Ct”ÖÚÅ5Â{Ùié°5‰¸&½Ç”5ÉI»wãìÂF$aÍ¥µÍØ‹Iw&Ÿ¨XÍym#ªul³öGÝ =:(k	3Hîm¤ÆMC@61Z{dç6kaï·6Zë•¬õ¢½¸Û~ùŠøé³f.‚°õÿÙ;ÿß¶îs¿ØŸ°]\H-Á°P¬I†¢(!FæÛeIQª*aX2šUè²’é½…scWiÚ”@É¤[®‘Ú«¾@n­­N+Xêh‹^™Ñ¦A,7X¤–‹.?õ¢
ìõ~~ôOYÍmò£žó9Ÿó9‡´ÊX5_|?Ïû™…ˆ@µ|¥&rnÂfX³öµ™ùãÇUzÑ£vL‚tVûõO€´Ô1>ìp”¤Æ‰ÜMJ!Vl±dfýNWÆg\ ¹ä'Â&ÞêÔ¦y»5	pÜšç‚–t§VòÇ¸aM8§à6 í!ÝÂ¥Ìt¡rbO[óŸ;¬%6aþ"7îÞÝÞ¸±Qqa­–¯ñð\)>G³èÁºª–j|2œ+Ë©¾	>ùÌõÉ’®ññ™¹öèEŠø^•øÐXíýÏÍ»Ò=¬k˜ÖoŸíÛÙ~cÒ¸Lt1Œ©'C
?vÌ^$FÌtÚ
~ÿœ´Óàc7¼X‹§ñvj¼|µ‡¿—â+ð)O(Ô/‹mœSF†§\rSoì{_üâ(y¡hM¨–€µ7äÜÿîZ³¨Ž×m‰iIm·ÙZ+"$”¥¬'€5^™„­‰ñaâÄÄ(™m@œh„Öß±ÚwXÓ`M!ZÂbñš•¯¡1áÁÚ~Rã	ƒ™tºšÖ»JŠ\¥\ Ú*³Ù´ÒU½XÉaMÂ˜õ³fæÝÎÌ‰Ð«‡²Ö™fU—¡çÉÃ¶–ç"7`Jhf‚ý†%9j­HŠ'È÷£0TËÊÄÂÔ¸,EX-\01YÌÀì—¦¥q#W”ÉÑÔ•'3¹þûSWLkëÜ­äåŸý@MÛ-wÒ®^c7R#X7Y­MsÆDŠÊ&­åø_c‘#{ïSRÓŽNzèB°éëf5ía5ºƒh%!¯9Ž…$JlñvD¼Hkö¶ÆŽØ¢3{Bª0'ç¡/[ö„VÈ¼`­ÊiÊa=h¦ÆKzäà²!‡5‰j9MÈ5ÓÐÕ,¼nÍ\üÝÆßƒSB¨ÆÆmÜÞ6XëGI«deÙ¿´T¡â¯:§NØßÿþ©ysSU´çE|"çg•ji½Z)Òæbª…?¬5K¥ù¹‘ÑVs±Bl:ºOÑq„Ó—-3$D¶¬Rm|®¹[.N¼ûîòÈÚÆ¶©j]vÄ>T»Îéë`6Â´—Uºƒg¬Àl& A=êÀš5ÈVJ$×´9ªÉÈÿ_XK(káèH·¼æ3ßþÈøÜ›!	2ÞL¦?²'é,yþQ»žÎÔ[í6Mî2éßyô4Œ&{‘Ó=vF vYMÝìÆ¯"¯aHÛÉ}J!5Í,!ÝÒ}X˜)’²Z²h-<l²K¥§qxØ4ížþ˜hŠ­Ü¿DŸµdOlgŸƒ»¬	¥"¬¹ÇÈ'a/’ 5öÞÀæÄæ¤­û¿²XÍã`e­Ûb„ÃÁ²“ªš=›…Ã’µÃ8ŒÃ¸oÛþ?Õì¡Í;a«XÍÚ«Q®Fi„ËjD*ÅÄaíèÚzåØZBW“°
Ö¢°öwo¼•’‰þÃUCH¥?¬‰ÉÕýÚÓQØLPc$‚K¿©gÀ¼¥.Ù¾ª`‰aœ«kŒ¤ŸIºãèRõÎ{ÌßÎdÜ¹H¬æÎýÖˆ»›…,NÛ×fó²‘¢Vãùµ¡Ž$k!RÔ´¸—]¦X^,/Ì¦úä.‚H NcGæÆ‡ÛJFRÁ‚6Â`¿¯ýëßû–,?ñÅ·¿óê“}}[ÛcŽ@;{<fr!Pu³Z 5v­FJ¸%’Æ‘á éÒá¢•"cdµÁøJ\š˜81àH'$RÎ'çS$@b)F}lü±Ó£#£§cÑšû‹tÉ™&¬m¼qs»½u­Ñ uk]˜V$™Ë`Í½FÊKHk3Ã
Ôµá	ùM¶f`µLcŽ¯U3;Ñò7™˜´¦EjÖ„j<båZL‡¨Aj1è¾ÉcPìÜO¨Í°VAÞ€<¦ûûŽDeòv÷F¯X| Ç²û\ü¥»ùu_C~ôù³¬ADŠŠ)¿å6þi•ªIYónÑì9±£ Ú62ÅWË7yÁùìrãÉ€_Ä%/S»Â±Æ$(kWŠ°§§Ê&Îí® ´5`´ÙÃ6ÖLYƒÕü¡Xus=Þc¶"<4Z4Ý8%K CQóUC¤rŠ¢_Ý´!(ð»_G!Œ™ŸúB/i-Ô©uêÓb¤…ÖÂkú5æ„NêLY‹¿¿×Ô™#OI"]ØøO ^ÝX•¢–g^#í1–G÷ùŽ^É6dgkÉru0Õ­yÇ57ñGO»Ä„)»S²šî\µhÍWÒG³§¾O”)I“¡†7éŽ#ÊÍžÊ,3ú¾FrY1¡á<µk»Lfzqm¹µV*±Øj•Š‹ÅF	ƒÖV«NÉZ±\á/6é‘¥¹™‘euZ+^Ê.6è­M€­Æ7nnl$”µ(­Ñûä_}føõ§@3œE@y>žë4Ä¶pöxœ<ÈÔ¨±yS1àÍÔ¢ñ4¯)OIT‹
[„´]×>°=øo’Åñ@Y-2~Ü­”VWë4Ã,µÛó¥ÕV.×þðý35
–¡5¹‹ŒŽ\]nk™×jÚ>÷èãzÇÜ®_xuNêšëk¿‘¤²æÝ°c"¤?|ÐšÅ9öý&ó<¬÷Ú±-Éj2R€µè/ÒSXPt`¤“Ú'\´v°$žÊZXKÒZÔ¬YsêêU²æŸ%ÂÙ‡]Öã0ãè‡mÂ9=ñÐC­ý[h-_0X{º–y¯ø"úØI?öeÔ]u-èj=Ökny4…–f|–·.Øz=ÁáÆ®E_r`²ß·ðLM„c¦¿y%7xœóé>ä5­>-¤;	¥B4a]è¶æH7¸§¤]×–€5Çƒµ£ùXíÆ‚ -eiçà¥œÎfYŒQãTŸîrÔ¤y”µ©>	m¸®M÷ÐÑùÌ­g{öý÷?´ ÕLXû<¼ðUÁÚÍ›¯¾øêw^ýí«}};c;[[b3ï¤aÍ±ÌTµ«xÙ¦!:ú‡Ð‚“Vl¢³2°ÿ$Þè°FÄ+ÏÞóEEòÑUÁš¾¨—%ä0ÉŠãƒS\‡ÛNŸ&ÏŠÞØQZëkØAÞ|cã=¾Õ¿Ó˜—³xi­±¸Û\l¾´K¯5lGvË¸A–LI;A¿¨ÒÔ@&“™oLÁožB²ê´\!C’¦í‘ØÖ¾ê¼í¶Ÿ!°yòc]ä	ÚxþŽ ú(`^QõU™às_RrýYôVq›¦±ÝµÓY„5ŸrÌ×
~CÇ4Yõæjv¯\ßÑUj¨Rðx¦0u-Ëúsø±€!QšŠ0ÇŽqñÉ'¯m].ÏÎJk^Q©Ú¥Ž£HvÁ!•ÉÀãÊýmÆ¸¢Œel#ý”5g5†«lÒ5Ï†T8©9«ióh@²z—*JÅ±&ƒÉƒC©JEÈ)ÚÜmŒ¬*é(­Xyp{ÂÃßn±åTà1—Ô³E!Íg\´»b[ªV‘æ–Œ_ÂäiJžBdcÍí„ˆY-RªYÓlü‰nZ’—« Í)¹–†k.­9­Ád„CµkÿÛEžùÞ«r–ŠGìû.3Õ‚2JOe€EœE¦éˆ=Wj¤­5Ú©ñË€À¶´Ô GB•_V{&ó0Y£©þ×ëkd:Ö«õf¹2ÏïnË%´iÓVA£k´¦h­}ãµí›‹×0„T$•5Ž×QÖš¯?þi¿[¿|ÝãQùõ¬‰4‚)=¾"!˜2¨šJqNƒ$5	>Rx,:ˆÖë„ˆ|æ#®=úÃŽ¢ö+?Ä8X\óPîãR­Zªã›Êe2iTµ\š“të}CµgŸÕŽª&meM´688Þ¬Õ¿´FâèãHŒ^Ü‡;‹¸Ì1ÁšÑ›3›\·¸¦ÇnUM‹×4rê°ÆVÓ&ö`M°fÒ%­¬EmÍ
À¢²ö{Xíw	˜v`dl´F0DTÖzÃ±Çj=úb³ýŽ÷þ´ÅTÈä5'eÎ³ ã0ã~…50ÍœEà5qŒÁ¡È='HÕªPRJd$†ŽÎ;¨™®ÖÛµÿß×þÿ~–O>pR´×üLÔØ	ù9ºm?Z€µàD¢E…W¡éº‡/Š'½Ùv¸n"›ýAüøìÄÓ³•Y.öh®…H¶Y5\˜Ü¦1öfAvÖ(cfö"1X(Ø‡À¡J9}4—Rõm±åß?™ÃU4þá&	& ñÓŸ~ñ‹¯ýëŸ¿xó&Eko¿úÛo‘IŒ‰ÍÄ[:îyókB„¹Ÿ†º´híïWØ,üŽ(ªõ¦µÄIW8ŽÙ¸§Õq¢Á/ ¢MÙ8È¨æj|êÖFF‡ùú˜5.OÒ²`´>·_Ycëk|“ÿã÷Ö[õk×ê%µU[kÍñ©nÃ—X[’‰£4<RŸG> Ó«T”ÛÂôÀ‘Ìâ"’ÍÐPÐ¬)tÔ©ë?Ôà5í¨kàX´Ñð³nQHí<à?ËKÅ„XC"*WªÈY§òœÐ§ÆjQE³ÈVŽiq–3¿¬í<§ÑÎw¸Û´pN«Uàƒz¯•^Ø&Rc˜ØTÕ­ù%ˆM^[1*3y=MÑ”ÈæÍÕvµ_ñ»3i’!YTà.r¥¹¢ûyž†k ¸&^sfsƒÐ\\cæ ÖW<'seúhXë;*Uý—uXëó2>±	qÕöå9:¬þòY*@¦,ôg5ÆüVúÈnƒ½–Þã­æhÇÎ;5ëµö€„uÎõQTc5_ã²ŽóÝk u ´>_à*´îcU°¶*\s›‘ÀkÒÓÙb±ÚšÉjíUE»±°P^\ <¿s™L–Þw€Û)Nª(®isøÁÇ±1dÅlb¦–5Êº*kÈêüüZc¾„DÂ‘`,©šµzkÝšòÚþâ¥ÖH«1=QjµdIî6a·þl ‘ºïlÜDW3^¬uIk÷øþK L]±áŒ×ÁU£‘ÄgÕŒ<ÀC4ÍmæÊèa°Š<ògâqÈam_íšOãƒˆ*[ÂqäjˆMµ7a1xø;°%I/•2J~¬§>ýé\)“.Õ3™\.S§Á¸$µåg•þîqÕU¬ÍÕnµë¥ß@¹z— 6Ñ­"BjŒ°&›‘sÀV'³¤ÕàËQ¸†Ç¿×ªùÊ9Ô5XÍáA“y\ZCÐämgÞ#2éqÍñè`ZsMìcªjÝ°v ªi-Ò|{b÷Öö¤µF®¿·ÓZ`5ß,.^‹«*ÔñOÿé?9ŒÃ8ŒÃ¸?a8c÷Á•µ/¬eóÆj_úl%VR©Y
ê²¨ñIã ×~`íƒNÅÚÿ¼£¯©A&‡5àcI
óà¥	›ðøâ”õ·ãÓ1aÁÈŒ£)j¶=ÁÝ<MËî)å.Ÿ?™çšc «h”¯ÏsQ0ÇŒo kxA9ÝE®Ûž`µ»cÛ7·ÇÎòÍòJá™|ÊÂÚbó:Oõš`M"WÐ‡·¾é¹i¾OÕ‡¾ÔÐ4i}Ó¸³,_ÐìÛÕ÷IŠÁR¬ìEh²ösr o¢H¾ÊöÆVÿØNW+lF…Ïbzb,TÓ…@`ÑÊßG®jc!­Ü’¬'IkN?{™–þVÃ“ØÔzaMçSœÑ›tÈ‘	zœñD-ÌHX»·Ï_$	kGÈfóÚFãÇí‘©°¶Þ˜nµ›ë¥ê"l–i kV¿›5æê­™’f4«Î”‹TevŽtHMƒs%»oÅž{î¹o†°lHÇ²d°Qí›‚5ÞgKÛªå³¹¤yÉÁ`Ä*%±W”Fac€5ãþxŸsµnâ®€x,WøCÄ
ô1ÑkÒö¨b«q¯Õ¨Õ?&ëyy\ß@£ MqvlÅŽ×ÆÉžÉ‚j›Íe #‹—Vææä@bwWVü–2Ä§ØÜ2TsZóÇ~4û±qÛ²óš_à¢¡·cael žß•¾´Õ÷QèiðåÀ50†ÛHÎŒ½ -ø~¸ˆ•¤1#Béšˆ¨Âœ—á:'.³…Kv£|%,šç+'½Ý§¦*9Ý²$kµJ.e³
ó”œ9Ùy1B’±âY™{°–Ó¼NK°F¬Ájz˜)¤|ü_‚Ô4Åjï™ä*!ndË—–ŠÕ,oc¥?· nkxdqé§‚¢¤5dÇÓ˜Sã´™‰v­Z…Ï ´æZ{z¢M´JM²‰©ü\]áŒDH\!gJ¥eùû—æ¹·Z¤4´>32×aK=±£ÁÈ½ß•Ö8ù 6k¯+iHæŽªSã¡THq‡°¦¹ÎÔýÙ™ ç3ÖÄ‡yÁÄ>/È$³Å¦ÙØ»ùÚ!¬u@í8ü³û¬avqn©Cgk«íÿÚå2äABn¥t©-ãGLE–oÍ¥—e/ÅNX­Ú‡W¥«}tuµ>ý)ÊøD¬R"e¡©ª¾LØ 9†G¸Í*Ðbˆo…idH&`IkŒº"\c¦``æxÄfk\ñìÓ¤°iÍÍ õH*köYãññ¥µû¢µ=]Mc²f-©¬%…µ¨¬©ÏZRY³H¶Æ>ÀíQä2áMÈíxX²v‡q÷ÙûyàL¤Æ#Ä—Ek_?=²šãFvÈH±É‚”¾V]ºZo×~K‚üàüŸkú(6¤g›èe¯ÉD§jŽd:‰<&"ÒI‘²zÔÎÇ0ÓnåjÜ`%iîíÏšš¬iYåw¼†8XcÌÉ²%„5;ÙïK8YÛ|íÎÐÙw7g³×f÷­¥j°Ú1>P*2e’[Öä+07Ç§yÂ°ìç˜IWÛ·–ÛgÌ¶Y’ù0ŒŠNGì¯~s´µÿøêÛÀÚßNNþíVÍ\^ø¥S³1<cf—ŒHµ”u¢a{d´^þ@ÑCÛ_¦=Üe+Ú<NÐ	­£¶	Ö†gÆ'è{¦B_üOœ>}ºû›ù„²öšº:½±½±q§	œÍ këÄZ«>Ó’ÓÈÒÒ¥¥R©¸4~°[¦:Pé|È¤RpzºŠM¸@(Qæ^¯4v`í9¤5#5eCþ.®}S_ÔüñŸ§µ´i%0ZE^€UÞŸ,A”™5_‘<£¡°Ö]Žæ‘²tîaÖ6úmZÑ©Éb³þ4^YBº
Þ¤YYyò
üm</›È…Yûò€[U7—ÏºÍ	Vÿe—Ïlcc^„69©#Åj›Ì‹¿,³«u·m*ï‚×²Ü;[æŒ—¹¼õ3IkžÙ]¹žþ˜ˆËÏœ"žÜº0p4³²X)¨»<f=ž¥è"ØÎœ5,Ô¬1†Ó”.xŠ¢šŽvÆ¹üÆ¹-’°Bæ#a¹nÏþ?ö
Ð}¹TÁOÛòòí¯IëîÈÆTÛPN?-¨¸w~Ö€5k”=¤Eëbnž„ÃšIkë¶¯#£9¯ÙH¬»¬&_G5¶vq![.ÎCkØ†ò>‚ÔØiV×gÎBÓ}±Q$¸4=75…Q¦!*\“8]âw¨MµÑe2‘'Z$—³e`m­½¼V?Ò?‡Îóìr]¦> aµÙ4X›ššøÁ×bSl„5Eò÷÷úxêu.¼$œYšØÂsúØ™Ì Á6Nt 42ÎáÙ¸£œH¡ZïkþÐÌÙ",$¨íþƒÛÖÐt®Y|·g$£o€Ú§>…ãQv©r<×XªåJW[ét)CRkÍ·Vë™öòê­[í3·¨WN]uP¬Æ¸ªÃGWÛõµD0#_4èjÈlïsîÞo”õ¨æçºYÍ1-°šûmª‘pm-š@ªE€Ãš½œL˜ƒoX;À²7®%eµOØ\ä`7H¶N—@¦”µÞY½»bw±aCRYÓáàÅk=â°dí0ã0îOXû“é æ›¬YœÏî¨o”å6Ž)`MŸr©Öíó†³ZÏ$H	küÍÑcþéˆg{8þ9¢ù¨‰–tìÐ&#*[#8ÁoD°fgòá&¡™gJRmç¾hiæDk!ŽK^3w”ÜÀõÛ}°šÉj±'v2òÆØ;o!¬ÝX9j…FjÁ­€<È|ŠƒU¬f#¬1Ö¦;ŸèÈ$¦ùâŽ¯Xo-7FÐÙ˜È\äó_ûÌO%¬É^äçÖcíG*ZÛzcCx¦}gÇ';±yJ÷ÀFZšp_”ÉbÚ¤~¥{ŽûŒDâóã]ºó!Í›?¬3rÆ”Ý[žk#°Ûà~àýÛøèèc=&÷¸Ž¬Æž€5±ÚÝmÞ‰;×š¥úÔx©Ø­éóæ<&Elû1¸kë¥Å2½¥–¨]›©7Š˜–WÕ²ºXMÏÙŸÌÓäHøO&X‹Úš#›óZfaã’	kóÓG rÊ+‚¾Ø&{Ten‡=Rè†ÆEè¤óc¡âäaƒOu7Wúð*Qk2é5}R+y{y9’j{Lkôö3oyVòÜ’],ÏžÊ2ÓŸžÍ
ž©áÚåÍÂ¬ llrÓÅ¶KGÎ4s-#¦é	¬k
ë‘j—-/pYt÷c‘š"ÐÚ­Xº¨Å^u~Œ°öÖ–+[.Œmn®”©ðÃéÊ9UÁ;¹ôf&-•êšü×ÖöÔ/øŒ‰ÍÅn\0XÓ\·¸ú¦GTÑx0²NBtØ+€Ÿ'CZ“s®è´Æ•´VÉåõþÇÎošÀeL”™3ˆÏaÝïùÀšÄ8!×ŒáXÑ%‡56/\óA¸æ¨mEÌ°ŸfÙ¤V­\\T±šŒfxþ•ÙSÏŸJûw2S™âÒ.¿ÀViN¿¹üÎñýHcÞ’`­‘™þ)uÂ.–«s3j®Ö^n·‘Ðf@ˆå’„.© ömÜþ”5~3½ÏÚ½{Ö,8ÐòâožÕ<õL6œ <³ó§Î=*4@­Õ¼{«pM˜iíE<è]±=¤nØ1i™ä·^i~¸ÿxø‡!·ÑPíW½½ù¿û¦ášÏÿÝ·w³'a³ú|µrüÓÇæ›ó™R‰H¶tY­Ž†yõÃv}™rÝñ«£ƒ·ÔûCÏ¼Ê ±«W?Z][û6oŠ™ö³s=Ö8Ø»q¹–&šå¼»Ùš]Ûoà/2Ç,c’Í.«®¬¹×ÈƒKÍãFÑš²P½y"2ÂšáZ¨Y‹®‹ù‹DCÈùîGWãA$Í ‰ƒKÖ’ÖºÜû{*k×zËkÙÂ,ŽñâaäaÆaÜ¿°†³ˆ³š8Ív±š`­wRCY³Îh°”,rÕÙ;	ÒYí×™ÂDMÅd:X³°É‘Îi1ÂGÜR"šá]ñ	zSø	°×‘ÔÙž¶ñ+ºS$GGlìFRý'è¿uûöíàdÆæ‘„5b#—šä3Êæìk!ÔPÍýEj"7¸mx)kV´6q«]…Ð´¹‰s€µ¯}ý§?¥ÛÁskwû¶^Öv6kl.­%ÌûÁ5)kš‡0-‘Áè@r)™kè³0ñõðÚ˜ú„HŒøÌW5¶5­8¾1Ïpîä¹ÊÉ’ì6BOì{§#«Y$aíµw°ýÚ5µðm•æ›Åæ.M±‹KjæéßXÊfñ„ÜmÔ3ä}•³U¹‹Tªt%÷ßs ™ÈÔ¢‰ƒÀZ”Ö\\Õi.ªZî"ÚµU«Þúþ£ÕJNolÚß[™¾«Í;b¾´	—²Yp*	kÂ:ÄóáŠßMr$ZÒf‚ý±ÑÒÚÀ0˜A2šÙÎòDWÒDhØ@>¹"ElV?)‡…ìE,‰±rö*g9¡x­Á(@s=Í+Ó˜²¤‘×Àdäòå­Ëº¤\›uê»r-¤@\ÓÔµ4‡4"¶y¬óÜrugìÂÖØæåM pQ`>;ÝgÔUË«¨«_ÂùÄ°[.V©qä?°Ê>¤©]åÀètÆ4*r]±?	ÒG¶ um<‹ò%#þ¬NN)¯ZË¥…ãWÞ ³¡½(ÔœøŒÊt±BÐŽµŠ¬`œÓLÀ«ÉñŸs‡5h-àƒä5××8ØÒ{\ ¶êþ-ÍÙ…K—([äÊ¬êÕ€5¯÷ëŸ™™_¼$X[¬K}}Óýúÿû›T¬YCìö¤612Ó?qf¹Å÷z[]k·WÏŒL9³LÒ$¯Pæë¬#›ÅôôÈò2ÊÚ¶%®wkQYsã~`íö/^†Ï>÷8Ä&È!eÐ ="|¸c†jœzƒl©DÖè‹MÊO"ûQ³¦1ë~°Ýo|ÛÓÖˆ7©ýåìÉã•“Çs¥z=—"ÐÒÚ­Lm]~Ãµ¿.÷~
ÒZËãƒÃËd Œž®y‡5Á´)·V?úè…ùõÿf®"„·ÄvTª„¶‚50Ö`­SÂ¦y¡—Ï«é9Þ˜­çxÛabÕKÉRÔìyöT§5ÎzÃZ xÇÑ§[Z»Fk>9HEoRsX³1†+kMöÈj=Ó ÷+klB5Û¤Æ ñ€Hm¾ûI2èžðÏ³ ã0ãþ„51ZÜ•© ËšÚaØk©IÀš9÷#LõqH¯­ñI#ºö'’ ¿%VSüÝ?yËÒÖ\ sXÓ+^³"3Ïfì4À¶[Ô›
6óôw³´H=ƒ[ÝŒð‚ºƒ¶k2ïwXã²7ÂÖ4uäöí<þ"1ŒÔ´'aíæÊ[gïnÃl+§ò)‘JxŠ$‚5ñ…åu>,k´Y›Yþ«ÁÑ£1²ñ 	’0ß~)k/k´ÂÞxõíí)¹Aö)Ëö·Z"	kÎjà‰‹r¨8s'ÈD¡Zw÷ë¤½H€5è|M{|!:RO…DJ”ª©Q5á6þ'õRËgÈ‡¼ýØÈÌÅÏ(ºj^’5k_!r{£Ñh®I˜SÕ€f°¶kiø÷S¡¦¼Çì¥]-”Ê‹™9e€UqœyŸŸÁÂUFH™kNk! 5
×h‘ÔôøfœhãÅõ?³’- ªå	mÂRòÍÇ’Zëp˜fƒbÖ"ºHlh³ãä7bQÊcÇ&`\ÁSŽ<ºš×OÁ
\Eß­u*Ú²ú£%éÑÆÚâæxyl>ùM±åö¸PÈ¬ ™^N_`g»<Á6šÊ¸¿ƒd—W®m®p³LpË2Õ³/ÕâÆ€¶æ±jc,XóðÉeýé›;é©•Í±Ë¼(/›ÅóÉÉ£)ªÕ¨Uƒ”€6¸,‚QFR
„aýcG˜›Š&8#¬ŒÓ¼ ùk`ÍiMÇTŒÿ™-ÙÄA~S£:‰Vrn””—)š© 41þ4´<ö¡r%=šª—Î)
ƒ5V­ÑZôî÷6l2‹ñ€Ë|÷€Ôtª-f@ŠÔ¤¬5¤ÝÒcMíûÌ&˜å•‚W§NMÌÏï^‚´è‚=×²“™“žÝW)61ßi€#3SËË3St"œ!+o~q±‰Ø¶üì™µ5ìú¡5P®‚Í/Q“uê×ÊåÌÌò»÷Þ½«DHÖnÜëÑhù½ß¼,õì³ÚÅjÁ¯Ÿ€HŽDÞ1Æ ÌXõ¼aDb CàOxëþ^¡Õ(£%"¬÷0†¼{‘¿~ÓƒøÕïG5eFÒ
ïÒÓ
$×Ü1êÓŽŸ<–ÎdÄg¹ê|)“«"«qÖRÖI»uuùÄTjÜcÙýEÎÀj	ê
WµÕFã%H·kL‚®¬±`6þ}LŒËz—®FX[qG5l8EÇT®9§±ëÀ»/Tv—Ô4ˆÁÌýQæ|ÐkÖ’°ÓônŠ•5m½;­}R-ÖzÀZO\‹ ¦1êj±d-ÂÚEkDÒ’­[Y‹Ôv@¤‰84î?ŒÃ8Œ?DXsg‘X²ö¤¡_å‰‚Jçs´Âþ4¥oùþPzþÞa-Y°’ ÿÞa’µÿjÞG÷„5M$£—G|L\Y“3¿·Æˆd&|SÑÚC:
Îü>…±š•³äãç¶ûb…Ö0!kZO ©c£°ÖSYóê©Í»Û:n_ƒY-/Ôd-âv|!'Ë!mÊû«è·¤¬õMaª1zú¢|›×4V{çÁ%kÄ«7ß¸;ùo½=fhå¨¶cjh‘Õ4“áqÈ\÷”bß»G˜bx–è™mÜåc7ˆù¬«FMC¸‡a•)–"Sý1p¤;µ\FØtçŒ°ôD¼Q­§²FÐ|}ãæöZsm«Õ^'š»KÖ›eíÒîZ½ŠÆ†ýx¶, Œ T­.–‹Ê÷‚ÚŠÕi¼'õ¾ö`£¿¥:ÊZ@5meÑV$› mOY«¤wú¤³Ò²²•¾t5G «KÒµ\Z#œÆ:*Ñb„K¶ž¯TöÁZAw
ÖÈ¶eV ó±8°¢Fœæ*R×¤ëž:¯tH«Xã†æT+W¨º	Hy6˜7ÚëâÀ_]Èæk¿´ý’T6›Kv¡é°¦ÞØ(k›.ë9Ælô.ƒgÒü¶àl9*kìglôXž±q˜¼°yE¯˜®)¡ÃúôÂ…É·Ä:cgù/)eÍÔ*#©¡vÝ¹0‰·?ÄX\$ú'y6×ú&¸ÕBìÒ'{F×²	rajÍjPH	ÁlrÏÇŸ¨ò6~ûk@še`-]apIÏ} ûrŒÀš-øš½Ê[Ã}Cà5Žk<ÖyøÙ{«æ­¹ê€5´ÔWžþ
ëó§*úÛ–E^+g¦3Vµ6)’œ-—èï8])”‹uJDT‹ÐW¹«Ô[Ëm•bùC[ŒfÓü ¯žáÊ’Û‘™eV×%Š?Õ‹¾]ºTžŸÙÆíg;Àš"©¬u`&S"¤R­gSwñ×®¤½ÏuaãhìÐ> õ®¡="s‡®-Ýl–|ìZØ<˜ç~¬c¿bKðÙwY÷ Ô°€¹¤nä•üÄB5SÇñ1¬åràZ«”ª6J¥\X#ZbµR{?Ü¹ñ@kg\SSÝ~ã3B¶>Z+½ð]½mìBŽ¨—S4Ï}Ý2>²?@/[ “’É¯!Ê3è3ªÓmâ‡Øûa	m„,ÈdÍZO7H¶ƒ…5pª«ËÇOFW;82–Ñ…¬–Ö¢´–LƒŒ#l¿·Ñš†HiLz¤@öÕºOþùaäaÆaÜ¯°d3eí	7ÇÖ$¬åj¸7
ÖŽÊsÚ¾ˆN—^˜¯w‘X°Ö	¬}ðë~’Â¤¯ÿh`5¸©“óxRGÉfœ<’g´¦YÈ‚Ô¹¥AÜÂª+kZÝtxÎà,¼²aœÝhÖØÌV„™›èŒš»{Õñ×Ã#|G¡„¼78Ü9_rVã]é†5Ò OIl–ß©U˜àMªRbÅ‡¥9² g&æ/"¥={úôuåA~ƒíw$¬½#VûžJÖ~ŽäØ¶JÖ¢¡ãNì‘E2ÅŽ§í1°Èsºèu[Za9
j®¼y„3&]Ö"¿q}ü}·~¦6¤¶qŽ^Õp±î ÛÚÔÌ0°6È/ÈÇNw)k‘Ö¬ý`ãš>"®mm¬­¬!¨á4¾Û$à±ÖÈÔâ%¦fàOþc¶¼¸ˆi?-¤æÓÕrYyú”*˜…w†ŒÐµˆk š®¡í¡ÚûŒ6e’"É±¤épšôD6À©l’–;¹3¥‡XÅÝBÌ3cAZÙ|ÈóÈ0ží¹Ä6›Sª£[ü“1ˆ^Ã@R®K;(a†ƒl
³ð#úQ.àïè`¶p~Ç±ceZƒÉØ$¾q.eÍû›ÌØ4Õ­Íp­<¶V™ÏÈæeŸ`ÝïˆÆæC5#¤ùÖ9®^¾v–P¬\Þ¢ Eq;9Èml“ÔH+d;»³svn³±¹"VÛA2˜ÜÚ™ÜqL°6´‡XìÜ¬±Ö7f÷„ph
>$q™i\ÓxIäÂ\ŸT4¤51÷q¥æfþë{®ÿ(Ê‘Ô¬à•ovW*Ç4ç^²fsBº3ø­„sˆ6Ï„tdSDQÍPVs‡MM²4¿ÿü+jÓÀ×”ýÊeIÌKÓÅJ_&SÖKã3s•âRCyÔs6ÔT­¹61ÝàW©17>ªM€eëE–×ñ9£ÜÄl­ù©ùr¥²¸4ßZÖfFî½öÚ»_ñ,HÑZoeí¿ òeu
CUc³¤G™‰ˆ= VÙÉÑÓ,$Bê€£FôÅ~¨´Ö;¢Adm¥ºû}Ú‹¼¬‰Ì0ƒÔ# ‚ÚÿýöKË·{ºó¯×—Ÿx`6S/Ñ*¤v²–®µJÇåØÏ¤]Ï`‰Ñ#iWG©+Îœ½e±<~b|Pw ­­•^åzq6"ÐšgŒÚ	ä%bKKìläihš(ëQâqô6›°ÖÂú~‰™@(Äƒö.Yóš5‰TQYs.úÿôYûX°JÞî/2‚š–pÈ–¬Y#’¬¶OµÆý½Ìûýá‡žj‡Ä<z˜y‡q÷%¬=äºškj±›°æ‰®®!¬k°> Q\"»Œ—«EVëíùëÿd¬åe7Iäây‹bPšêÒÈu4ç~ã2—ÌBl`ÌÊÙä)ÂQÒÚy42ÖN8C{c‘‘yô‹|Z}Õ¬+vþxÞ®°¯ÇldàzÐuÔztYó‚úíwQyî
›o¥úd<›¬Å(8Ôb#2×YI×çHœªàÂVWÑÚÜDkª¯ô}ÁÚuÁÚûß0í‡5„5)kkßÙÚzû[¿…Ùb¯ë}áäæ¸æ5hÌ“ýÔ’ÄÄGÝo‰¬ñ.¸q$#´ÐÖ5çnl¸@Zƒµ¬Âj3›˜°µÝ†ÕÆ/†kœEA“Øª—¶xû7äéÊQi¬ç©›(îr²[Æ_DZZ5S?BGàù¢¶Eò¿èÂím»c"dõ#'Ó CÕZ,[Ó!’[ˆjº¿ZH§13)dÑVÐôù¼ûå‹Ü¬]8ùk·%-r¡óÄqÖG5Â¬1Ó<Û—Ís$Ä
D¡3ÏesB.*'STe6
T‘I‚´F×‹‚5ä¸¡ÉÉk§‚’&ù)s®ŠÓzSÀvÅ;²qÝÓ!!Àâšƒš†ªÅš5SÖ[çRë2M¶ó½TˆÊ&™–››};“ÀÚåË×&'wt Ñúpr‘–¶£kiúÝhÄ¼#¢µRÇvÆ<yÜ¢wo¥è<­"¢"ï˜å³b/Ot•ªy”àM&€:û2k–çG¤+à—p"NÙåÛ¨3ˆÌí™Dlf†n±w%—BÓ:HšµWf+xõg•J{i	XKWeŒÊ¯@c©‚1©`­’žÀG„$Çâüô×&Š¿8­‰Lc\›%éH~­Šòó/µVÏX ¸Q¶¶6R¢òSÒZ«X‚ß¸ýžÿÿ!a¯·¢²VýåsŸ}Y5j2ž§76¦.Ø¸ÌËº_°!PãH6p£klõÜƒvÎu eãEA-cÌØâÃ¡ÅÉ}Æ#ÿøf°ÁµÿWIV#¾ýÂÈuÅÀ15á_/ÅùE˜¬”Î?KçŽ“
Y;&‡‘œÛÚÚêGW‰å™ñ«”«]$†/šÿ™áÃˆnË&­	×¿û¸åAòÎÉ2SÈK¨Ë½}Š`é¼ÖÚÎù=èk±%6¼¦ê7T;)mÌ–6)×°Ã`«—ƒû¬?É’µƒFuý‘´–ýðHÐZ/eÍÓ-FbôÖ¢½m‘Ô4ÄH€Z^;xíÁCãþÃ8ŒÃøƒ*Ö<ž°0g‘/Àj_zúxh¢`Í?ÊôO÷c:/Ÿ²™d5w‚üàï? `íojÜÎGJÝèI­¨É:_ôç°fåhêaÍX;Ò#ÑÙ ;›º²»Ás†d,šÇñ<ƒk¢5§2B°–ÏkK¶,›‘cÃûýE8$Û¬YœM]øÊXíØ[.Ø'¿ºš 68}ÇÌ¨¼:`OwÎkj³T¨¤3ó%õÃž£×°Fäc·¯H{ÿ¯Nsø<°&aXûó?'R#oÿè;²î{ãl`5Ò =|&ðŠŽ!ÑÑ?¢˜.Äk~Oò;8±1ìœ‡cÂØÿwó"¡.'´h6ÂT£*Ó¸Êx„ÃÌ6«ZFk]Ö8Ó†qX‹aÍ*Ö¶·ê¯1ª{oS{“ÙÜÀDS±”™™aE^#¨j6¦ù“‡‘Ð*jŒ]åSjiJœ4@nÙ/XKT­	Í|óº5‰jv×I6Ct9šæc2Q1hCiÜN„Ç.e'fjò‚˜Mš¦8Xm¡stOHÃ<ð/g­£Y”Å½Ñòî§øm”e¡üâó¨j9éÆùÅl9~^‹ÍP×ØNQ:µÂ¶Ö»Ê}X&0Óàþš‰ÏšWüX£­h¦§…dHeGÂgNj¾K;³qŸË~TÝÕ–Zqçû6W½Rc¥PØ™¼¶¹YI)Ó‘³gÇ&/\›„Ðú!´¸f‡¦èfC€lC­õ9¬q]¹îó56-já€à*R˜ŒK3ö§‹éa…,ßÓÄjYGr:) e©kÁWHzA’äQ ~öã¹ÐÆ,M[ºd¶¦Áö}“@oš‘šÇúó”÷hÖ"—ùQÒ™¢ìa4´À#Ó™L¦¿ŸÙö<Yt¶N9’®ð·”~òív³±N´—ñY–•H‰:]_£`m™ßÏ©	Ùpµ­oDfHŠœšFl£Èí+7eù“Hƒ¼=zŸðË¼kÎˆf×Sj¸Æ©`Mjø&Ê ˜x¤ÆjèAª¡zÓ‹‡£	¤<ˆ8új/i•=ZKî#žBX³öjÁ¼ß£3yé…Ñë!S'ÉÞØþÝ9•Uu`ÓŽ¥(Àñ³UÊ”¨aÃÚj«®šÙ#!Z»zƒmô">#ê}ñâè­Ñæ	‰ígim÷õÏŠ^i¶ænN³2ôð7ïœég½ƒ^¡¦›Äkšçþ{ç×y¦w£{·íEÑ?Ø²C
„ˆ‚îVr(
4E™Nè1%Åã™á04H…ÍD‘,ßåd·®ÔÊV©ØàzI;©mØV$Cª°Ùµ%š ±ö¢uQÈB,o¼@»€³i’‹Ü¸‹íEô÷¼ï|ú4#Ó	Ü»yçœï|ç;gFòØ4ç7Ïû>/¬Æ¬Ik(t‚e!eéÞýœ!¤!Y­ÖÝjÖ”G¥5G¢»Õ¬µÈjFj¾!Âš­}DNócô‚L˜A¶í³Öä~¢¥ÍZ ¶d[lŽlìíßÛ×¬ýþ=èD':ñ9…5ÂLûÓçF`O9Ðéq5¯.|s_­/Àš°+—UHÞÍEˆ»'AÂjÿã'Çj5žÅ'XS`0bh&.›á eA—ŠÔl±©¹±h1ƒ'¿×ª‹±Ö!¸&˜q`·nlß„Ëf"™Q³&Vó9Ç»V,ŒïHïy¨Õ’¡¥Íñú“[=£o]¨IUë»m0âßÄÿìÎDH’¡ú°QK5Î+yynÌJY+±žê“SÆQ„5(-Ä	‡µO_ûôO®|C]Ö€µ[·^yöÖ«[Ûb­Ð;F£Åyÿ¶ÊÖˆršŽiI¦ä¥Õ÷þ„¹H¼dD¡ÍmùíÔ€M'¶Î¦´Ç=Â2õ½ëë«HZÓo€\û¯?òà™Þñ3ñ‹y‹e}u}cgÕû-0²[)MeËÌçË#uó¼›ÇLáäI\GÊüécå±F¥â°–iŠ‚±]S d3MòNƒv%BÊB$¡¬ùfCˆî/_Ì“Y×ªUµÆvãGï³–+ÞéÈoä&€òŸé$žzCôójÝ&bë¯5KÙnûÅ§k3kúè4°+Ry&úŠJ’´Ð+O[Úã´@/«!Æ4Û_/9®±3gã¨“¥ÐdÍ Œ„#XÐÜöM°¦jGï@4Ÿ†s3È`*X£ÓZN¤æÝ\Ñ(íØ¡Ñ¡ÑUµÕÕ!ƒ³!Ë‹$»6šb­'=¤¼Ha¸'Êf®6åiýºqìF0†l½O­ývXŽy’öyC•ni-ÒÖR$Ÿ™T†¬H\e@è=y‰mÚóÖN€Í=ŠL¾Ù»¬5­ù×l—²Æ¨iÍ3 õÐ`¤æÃòÁ…ÿ˜Œ¼øÕisìÕÌügI®ð²Õ”›Q5[ªÎÏÕÕrmX›RÐRm]qñ4ZbÚJyª¾28RâëÌ
é¾ÖZ__&oRÞþõ©Ù8­„HÇÙÖÎö¶'An´KƒTñÚŸ>!ÈÄ4!5ã2ˆÍ¢ÙÓù	­yJŸaƒ‚œêÖ€DÓv‰¤²–ÔÖ|º;°Ý‹°Fç~r!Ù›‚Úéã—<®ó¬íÍgÒ}ÊùcåÚCkµy#ùlºW©…2Ì¬­—3+ÙìÂÊË$<ž>}TzñIÔ/[ ¯qÕüù¯â»¸‚!{”·‘äÐ¯8«)oÔß6p‹)I×~ÃvÌYEÍ°O$3²éíò(o½øLmÕ 8+n³Íh-i0ÒÖ_„ÍÃñh·4ÈßQQó‘-Ie-Fl'PÍ­ Œ×vÖÕ5k`š-¼Æ–@µ¦ñÐ1¹ÞÉ‚ìD':ñ;U¬¹¸&Â™d›Ÿã3§5®.Ô`-`ía‡5¦}==$4š°fYíDK¤›‹üŸ÷Ü_[}´kÖ´|Xxf{I$1#~{É„$×bxÚ¡¦´Æñ¢œ#õ:1fˆfgl›ë"¯ç¡¬é5oåC÷;\´Ý #4(.¼ueg³Ö+\¼“Ž1j¤>ÍeÇ)òOgS\'r<Å:Åjc%¾U/wí?z`pðÀ¹Ÿ«¹ÉsÑºÚ§Ÿ¾ö'ÀÚëÄ-éj;C¼»Z›«5´3X°æg©D´Èl>oÂZ xÅO±•ZÄ³¸¬pêa18ò3úK¬1Sh¶G\&}bx˜KÔ®IKsZ³9åjÖaíÌ~w îßg¼Óad»¾Z¢^MiK|˜¬“¾µ„|07…p¶.X›'NÒVŠ´Èù*dooU°«*àai–Á½ŸiCkm”5ˆ­	f‹~ø˜=½Ýœ3¬l‹):‚M¦‹YÉšk‡1œýÄOg"§ò6Å¤$:¿q¦¿8­WŠJ›º¨]ÑµÆ_i³ $r“lŒê¶%€x
—ì8™VÁªÛpœ&Zš MÅjÁZDeM³U¬†”ö”˜mÊÐ»ô¿Å”5.¨½l¼ÆYŒË$Cú‘A;ô1qZ›Îy'œÆâQ•ªm"$—ÎŸßä±·’œÖ mˆzºT—ÖŸòEAÐmX3²róì.×ÕÖ²› µ>;s&4²ªEå‹9	t}‚lÔ<
›úÂUr²©ÀÏŒÄbUNQ(Z_<[Îg¼=çÒ÷°ƒäO…°µèÙo‚ZP×ØlŽjAZc\ËÎ©3@î ¬vR´–-eð9YÆA÷lÆerûqìŸÃ­©\¢ýéÁ€^üæß¿L¾ãúV"u|ù‡—ëT³ŽŒgæ–HÜ¦•6bZ©¾l‡©©•Á£×®mo“nªw;Xã‡úÒ¿ÅM„jO<Š8FäUuÁ†ÍRÐäGzø¹U®ÅÑå"„ÆáÃ÷FAÍIu-pZ”×.‘Õ"¯íþ•HíïB»kvâç¿¾|ôýŠh‰TµBÓ’Xijiõ Íb:‹w?ÇŒ™ŽäÉˆ¬–/S·Æv]mð´|ûÍhÊãúõsÐø&V[Ãò×W•8
÷ê|ôËªPãýaàmÛ¬l-Âš5½¶ƒ‡ŽF¼
½•2A¤;ŒJ'&Ö½”õ`»Ï=]x‚‚,BÜw«¿‘pîO6ÅÞMZûÃ/¢ÅZ’ÕvWÖb¸°­íâ/Í “ÖÚtYó¡]cìÃ‰9{Ûø'÷t¢èÄçÖc8¤	ßât8™›Ó§q\SƒÑö=LÀ;œï­›ªºa·M‚tXû›ïCxòØîãéø»yƒ5¹‹@Yb(Ímíq‰mûÚÃÚŒÙCj¤#-2ÒšxmÆ”7£4†ØbMK
òY¬é¼ p²¹ôÐ™KÛþæÐÆòÉ+[o5úûäÓ¢ßöVXã››BWÛÊ|nËÊ2µ@i¤‹l)êÖ<zôÜ¹—qYØˆ?óÐâ·O<÷íçž~íÓ×þ]Öž}ýÙÿrK´»Ó•ÝØ¾“Äb"$q{1Jní­»‰t¡Ùšïá„`hCh±56[€5–ï°sæ§ZsÐ ,…mXëëÞ£ÌG
Õ”‚h°ö É–x¸¿ôPkäñ‘;Þw¼ç6ÖÊÕºU«,/­W«K!¦ð|œ]zZ{ç$!…-Ëß’*ý1Qav.3Þ=ÎÄUÉÐ <¦˜4`­%2æA:$â¥þðÜe1Iëí.’ÙÔþMKLÅ&Ÿwa-*iŠbmòó™ÛÄâ1X-ÜŸ53ãð¦hÒÚÝ±Ê¹3ˆÀð¾¬¡©¡åÙm3ö„ ¦´§vÜÀZè±=Yª!´1X3ìóÛ§¨ ‹	‘°Ã;.¬…äÈºÖ9k,¸² ±s¶Ó¤¤éÁÑÀÜ±}jÓ»
Ìë`/¹©ÇÑó›C†`XUõYã¬5¸8Ô€×zSäA6ä"Â„PÚ'ù,Õl‰_¶|Âí]‰Žkºä·zl±'º‡å‚Kè,sŽv©{kª*¹>FÀ,ÍƒD…¼n™ñ\5X«ÕØúYaÍi-#R3Iø+²Z£nÙIXÑÎ# G”µ‹¡`ÍiÍãÇï®Q6ŒæzðÅ§çç§ß §õ˜j4§Hˆ|cOjž¢JJG1×ÁoG®"åYìKÝ¥:êÙÄ±/®­Í.”ÊKØÊ/ÓÃJ×êXü›AT·0ì•&–×Öæ–¦÷t_ÛÙY^5ií.#þ;™á—r÷®>‚#Þ`ó6ÏÒ„À ë.¬™²À`š£ûÑx´-[ã@$CKöc˜:Ÿµ§5Æ¶Á…¿ö"ÚþNûÛwß¿yó¦ýc&i­‹ßŽ32Éò\{ÒöÉ»6‹	¤ú£/¯Ðk­¯<;{1”­M ¬ïGY£Y†g|ÐNLn#’ºµï‚YöÆzC4ukP·JûÃ‰qš¬yÖdë"ÆÓësX3!“SÝ%NiD%$GâÞ¿{OìÝ‹ÖþÅdÜÏÓÛ%A¶UÕ«E`‹¶ýmÚ¬µ¯Y‹¨Æî –Ì‚dßÝ´?Im,ÈNt¢¿µ°öÑˆCÖ\í1ûx˜+ÔbMåeD:½W¬¶OÖ”ÙÏ7ˆë@ZÌÄµ?™ùŸÄjŸü×÷6ûöºá¿=·f¦ý™š¸LäF˜$°Ædo"´Ð¤.‡4·QÈÒï›‚5fJ“ô;k®¬qäù{CÍšÍXÎŸžÝáÙ®vŠØÝº2”N{kôXL
 Õ5©†sõÒx¦–.ÎUÜ"…¤Ö?>¡ÄHõÆ;pîAPíÒ¥Å/.š´¶hñÜ·¿m°v…Š5âÙ[ÄFCrPl…ýBD>ö!„nubk¼ /ù1ÊlvwXèmkÌ"£1úì/Äµov—¯Ãk¸öS<62ÀL°v|¿`M¥lkþþ¢¯¿Ö˜Âowx÷o‘Y_ÝØX¬•'ê@.y`‰‡Ðk4Z›ŸFö#ºþsVzbÃ¹•A`0¥5Ú¬™°óƒ¸ö‡÷x.‹çx5£þ•”J×ˆI@Ê2›¦ýÁ_D'â°0U¦±dÐáÎÆ9_U”¥7ãÀiy¦–&ŠøPâ%RÌAjÖä<w¤ôÛ§¿žƒÎæoã_±0í²¹‘ÎI˜ylš¹#dX P¸šj´$iÍ»³qºfìð£‘š«ÉÔá] B ÑÍñÚxøCkçåÞßÚ„×V·‡i’#½ý=ø¤S§F]Tµñ‡^üSX’4@)-ÐHû‘œç1v5RY÷h#‘%Ù#÷;DXãÉy]ã'™±ŸðB7€\w±<I$KdCê=®`Ë/–.ö‡4ËZ>o5i²-'R…k8ÃBueE+5àZ¸ÖÓµ°î¶¤¤ÙcÍ¶Íƒ°ÆªÖ~Œ¶öæ6ÀšUGÒ‰¡š-WrøÜ µM+¸²U³ãÀZ‰¦ƒD}¡¾~2Õ%§G¾Ï¨/P“6à__ªã+¿B?æ•‹´ž§O6€6R/ãT‚G?(¥±ú?e®Û;úTs3È¬=BÑÚñÿk2š5ÀfSäµú2^ãÕM§GÈÆ¦1‘0Å–Ð-ý™S9uÄ*­äIè	\KF”Óâ!ãðÙqø¯Ö4üíÿþñÛùÁüµ¬]Ï{?hÍle-¢†{{ó³4Q`’eV^“Fê´vyd˜8 _—w$W,6O­M6ú¿Zÿk‘',äÑ‚&m’ð®Ö>Õ»2}ÂhG÷i:õ[f$s½ézÉm†r^(H8¬|ÀiôÄïˆûïZ³–”ÖŽÚ£švßÙ]Äd9Ž	U½mDÏÖ5kbÍ(¬Ý½d-Šº12Y´m#:÷·ó‚¼§èD'vßw=MªIY›ÖœÔT±V«Pw`Áj°Ä¥ÏC$€”í£D[aÍYí—‚µ÷VSý‚­¾>žé´¶OŽ %3î£ZÍe0²—S«f¿kŽºS;qôåÆs|‡Á€3[ž1ÕŒËpáÅjz1›skŸëiL5áRa¿;Ç;0\¿Íœû£²ÖxëÊ“CéÑ+o6½æÐ‘7yiU¡ð!
Ç*Z2¶ÆWÞ«ŒSt36Î‡¹=|‹º¸xé™Å'øÝ¼«=´¸øÐ#Ï™ä§ß¸¬ýæ7Ô¬íl¼½³Ýt}ŒÁÂf#&¡šÍ”®–ÔÆ`É"Äâ¦‡"ÞÉÞNN‹Ó¸ÖîcpVãàRZh6ÍgÃƒä=r†¸6Ö=p@1 Kº?qüú~}Yý X™­}ÍÚööù¥Õ-FHË9°®Ò›&¬Õ&fÏb‰¶&;H¹1’9KÆÖ #½å2¬fß>BƒÆí¶Þ¯†4È&¬¹²–ijïŸƒÕÞ¯Þ†åÂš[ø+fš>ŽÚBíÌwÓb=›VÂ%_ÔüEïQ¬l©`Ô6S+ÌÔp}¬À
x]€sª\Ë,ª`.ÖrEQ™Ÿ9—Æ\[{ôúéæÐ¦˜Rûé<ff‘F·uU¼æ¨¦¡î§(kI\{?àZäµ@kNjÄêæè¦q¢wk›g\ÝÊPÏ¶O5d5@â%rãÂ˜$ëÙ<Ÿé£dGÿÐ‹Ô¶¡¡éÆó®¡AÍÚ¼#×¨¯Á-‚)—Äƒ÷ˆÃš“!U\’eMåwnÔ—U=^$¨œƒ‰m•\‘Mei¨pš¤<dþZóÉ&¯D¦ÓýäpúQ)ô,ÉYõ¾f#œÙšÚZ`µÉjl†iÁ¸ÿÇï.Mç»zR|G@gÁ7Þ˜Ÿc2_Qo¡½+©‘²Y®¬`yéËDçÒÄ£G'ha¿P'#X#VÖVhõµ<8<8<»Ä3ÊúB¤Tªò#§{FöŒoV·¯4»¬±9Â(Â03`í*ÝÕš%h/(À
7ógA)’$÷¡±FXñšî¤Ë×	?&¶1ã~¯œr,‹¼†”Æ!Im>	ÚZ¬\KæAúá®ÁÅþôÏ¿ûÝŸÿüç4Ù÷í×ßv±=¬ÉèÚ‘Z^>{_^ukÕ>\û³äAŠÜó³—õ/C~‡µÓ##{†÷8C—Ødsq‘©•®FkßámrÖ8
ÕRÂ€\Ÿ;Y¾£M8íÖì`(f¼vDÏüš!´U«i£ä:‚9¸ìž/c¸vßÝ`ÚI°›(©«}YIRÛ½ÍZ0=‰ v‡oKä.°Y­½¤3š	‹‘¤Ž–œú±“Ù‰Ntâs	kAh¡Ölc¢Z²ÉJñ‹ßCÀZ\«í³’5xËÜ¬3u•Å·cµÛî"Ÿüç¿øä=¥ímº>º¤÷B«Ù¯7!Êšy=rú½ÖfŒÁ€8Â2;×­PO— &r³hLaÈæ¯½AöLÜ	­ë’»‹¨7<z]ZŽÔˆ9Iç~âÔ[ØU7[[§n¤-
ÀÚ¤YŒÄÈ§I“ÌK`«‘œV¶25 	œE”Yâù®£/-‹Õ>æ°øŒéjØ‹¸²öúüæƒgŸ½µ³ukgT Ô0ÿ¸„'$â‚.R¡½ilŠI±Î,¶cÊmúP×–Ö|gtð-uèÈCø…¥ˆYÖâÀ„äµÁ‚5ÊÕ&¬ßšeAú]tZCdÃ«ÚÊÖZjÖZ»b¿UÞÞÙØÙÚþp{
ö9€´6uÒa„ÁúIœE€5Å¼EnjdlÏ ™™ŸÏ*ÌàìXyoHà°æ¬Æ#°š‹kMZ[¼3ýRƒÕÎ½OT3r$4ÚÍ£oAï(Y¹\ð1IMC€¤if‘Ê
9}L¨IflÞ\(63óúº§†ÍˆuöR“/™
¦réþbM~ýòŒ´Õ¢$#š’–SB¤Á›*Ð<y, “æŽjž	é‹Èi›ÍËÍŠ5F]dÎÀš!Äåh(VOkªšƒ{|tþë«£D:¶Ù«çr›Æj^ Ö{jÛp½,u)à­ý©†-³>º=êËéž!hKV‘7dÞßÛ@QKuáóß„µ@ÇË6¸Ùõ„¦lg›Õm<Ö2oM¥2ÊS¬•—/??ÓúšIö-J…d+²ÌAÿà	ùÑ=k=Õ
‘ª*=2dÕÀ¿¨º*Ø+ðT2Õ¥õç/®ëa¬ææ"Áò2áI<PÖ\XCYËIs«N¿1=”6™|¦Âª@}¾*i­:N?xþƒË³è<°ZqN:zez.Õ=±Œiÿl5Uš•5?&8õ¯­’ 9‹è¶Ö4ôA°Ëçkuj×¶/Lm<é#7i¡Mâñ¿Âº«)à²®ª`MPf…lÓd
ù5W†Ìw„¹`íÞ{¿òÄW•ËÆáÉuÁšCšaÀ%d¶váÐÆîÏÙqíð¬T3Ód6Ïï ¦ÐZ„µ­õöë×û!û¶oo5éV•^k×ä'²‚d­O9®u`íWkË—ï	u¾†ÇÎ9¬-*NXpxæ™—H’ÿE“Öþ	,X³ »œ	p‘É¼ÞÌ…5ÈM¨f<UÍÇæ¸Fè¼£¦wJ\sZóKÀ1Ä¡¹u¤p…}÷>kÉžØwÖØˆ/"ò·"µ¤mTÖþ•o»)kl!¢ÅH¶D&äÝüEîZµqîŸu² ;Ñ‰N|aÏë€}p†`Â(‰„)5ªÖjyE¶2bà4SÅº¬mdl±†²ö¿º %:*Ì µ›ÓÚ`*C4ÍÓ,¡ÑCÇC²á¨e-I|ã•8È¹`µ5)Ð:âŸ5Åæ©Á\„ˆ°¶)´F!òDñÌ%€!h;1.µ¶ûz7HšÁŽªr&íQPÔv™jÞ¿OkË¥ñ,~	ÈjŠ-±‡÷tMœã·2°˜ã.‚¹°†$¬†°öú­W_¬¥"¬Y´6ÉVE–˜`Îô¶sB8§D#»føëè¼ÖZÙ-$GúÝDŒùÂ²ÀL¡g;ÚO³D#l»s`¬Ë;­I}Þ? Xã3áÇíƒžÉZÁ­Õ-’®66·I„”'Ý@|G>9.­cØ¿42B/©³Ê‚l²ÚYZbã)2²­r–é¢ÝšýUc:h¯jƒ‘&;i†j-Eklmì!5)j"5Õ
¥G="@!sêv&F*
ÜÐqÚÓMhsZ38›,<t'—EŸ‘x/»]µâ³Š|±åÇ’P7¤ÓVWL›Ù`­•‹–GðZR÷ò©¢ãbî[þÒÓ±æsªT›–‘”ÑÌùñØù¯cåï¨æ=×Bª#T&°ç8¹NpõUøÁÂãåHj>UH3…ˆÉÅ>zJYÛç½MìrÅMc¯jO7°j­3,KÉ¯¿wmluÓÄ1±×µF Îa-}C|†¸†¤Ý(jsÒ$aéà÷¦)¡²—ó®"*i~âÑ/\Sþr± >Îó•L¥ ÍHÎÔ›\£ó=§ÌuêlJ²Tû:—òR„#!úº`Í$¿|h‘í¶öêÔ’ººôüó&­1°y2$¡ƒPM5kÑ^$kß{·^<ø"mÖ*ØÙLÒ»8 Š¢W‘—ÈV¡BX£ã`w6;fßÉ¼´8§ãÌÜT‰:´Ó§_^Ÿ¯ŽO•—qì‡ÕÖeµº>7·„ß¿hí©º„µyÁÚ>kËË«««k­5k×€µ«P…Ô4ï¬1qûG2ù„csDkÞXnk‡MèQI•läïƒŒ?@6¥A&„5¶8‰Ó¨­ù`dÖNYcl/T(4s}ãí×QÖˆ»(k×Ïdã×$¿-ù&\[Èò%d>‹ËÈÞÌ
QÇV¤~ñâ¯.–§ 5ÄÒ•‘1º)¼‰¹H@µ‹¤Vðÿçµ‡.=C3——ðQÝÚóÞ|Ž°wÔY„c_ûê‘GÅnL‘Ö¼›¤1ÂiMä¦@IÓkX’£Wò4…«éT¯¨0!ó¾û‘ÔˆÃÄ¦¢Á»Œ­#»û‹ÎjŒ¿¥ÙðÙMÖZ"’C²#¶£Zd5ÏtƒŒ ¦‡m-^>|®f‹ók÷t¢èÄçÖ¤¬É’	éZê†íLÕ 5‰kˆÅ˜®¤ù}¶v—$ÈÛþO¾¬ÁfÏ˜q¤ÇœBPÒ¯W¬q.UÍU¾CèŠ•@XfÜHÅiÜkŒ:µÐexPaö‘ÁiÄ† ¬™¥$8W£|-×=pÝÀ,b{ð‚¼éúñ$©x[;[C?Ëß°6)VK·öYKeìœuøv )¥ÒÔ«•ä}@
äö"ç†»ŸP¨dMî"Ì¼Çš`íâ7l¸ö¿òƒíí^ƒµT2Ý<’„S‘«´jV‡ÞÊú¶ÇˆG—lÆªº<Xjk¼ Í¤µÈ;ñ™Üªé$wJlÓ*s†‘áý$A2'’Nà|fA[Sd+ªµ*k±½ZÚØZYÇ»®»*XóxŸþÒÉ³hkÄÙiYBž„Ýæ²sÕ“óÓä…UÇ{Kãö—V]YÆaÍ-&C#Z÷óˆfAX‹qN›PÍyí{(k=2õË gr¨  >ÓÛ-!'Ñ±"¬E9Ía-êm~…‡÷†e;6Û/ç'9)µIjÕŠºXk×kü0Ál
¹IaãÙßÎTùöõ¡¡P&|›6øº`íÔÎ2Û|
Xã$CòhÊiÌ±_pÆ¨‰–5 ¸É@eðZ*AYD6#´0èjSXûèòGï¬my›5Ô¶-öÊçCÛ£B­MQÖ"Ô…Kä…§6½%¶Ø«Ñ5¤»™JOãH¤,H<8ëm¨A6Äæ°ÖŸÆm²·¿¶)ÑúoôØ|Š¯¦1E~xYtÇ|RÃœH;¿ÀÙÀ­f¹ä›V7åƒ’â¯éŠOâE-‘R¯@Tú-øAîr-Öq±­ŸW{çyhÝpm-àš‘š–é´jÖŒ×ÎOã-òâÁ
‘›VGì?Ú´þ›Áo&ÓÕÈfø«—³c§u]À¡ý“Ü˜-¯¼¼¶T]²¦ÈuyF®?¿”+–ù^d×ÕwfÇJÙª´ì“ó"¶¥…‘+«åºhíIik±fíRTÖ®^5ô3q!;Ùa02eGhƒÙàMÕ;Ì­ûõœ¯¾÷~PcyF«Ÿ­E=-0[£‘„ªæ{€6g´–cû¸ïP&kÙú7¶Þ~{G‘„5p-F¯×@«1¨¾‹¬ÎÂyy9@öe——!ßÙÙòÅ‹¿¾x±R)K[»¼²L»ñ7›¬vBñÜâ#|ÛãÄâCÄ3\#ò4åmW›N™¡éŠýÁ”:ê6,‚µÐvÍ­6Ö8ÈŠß›Ùi],l°&xS8ª9«éH‰r¦°œÞŸÌ‚ŒirÁ×#‚ÚîÎýÄïb+bÑÖ´ÿ?;2¢ZL…hjÛÅ_$¶Yó‡ÓZ[?H'µ6v‡Ã¡-±u² ;Ñ‰Nü6ÂÚ?§NäGHÍ¶19«¹²†}uÓéš	VpŽ„µl>»uµÈjî.òË_ŠÕþâ'Ÿ|òK`­§RøæÃÔÃl‚5:_[±šò­¶¨Kv#Z! 4.4U6NŽæ,«qI’š_å¨k
Éjn*‚IGÛ‚ÁˆdA)u.ÈL“ë¦[N$†K	d]Ö0Ùy’LÈ+Õt3¬bè¿3zšþZGG› 6–¥Rª\©|©úàâƒ/ªÙæqÿ§ŸJZ{Zó¸uëÕíàaH8£÷q&ÑÇ_7¹|dæN‘ŒÎNQ…³W	¢[ä1¿«m :áy†DXÓ)WÂë¸“àç¡t3¹÷m{F¬³Ú°î¦‚mÏ£²6èxð‹‡‘æ;3ØABÉØ÷ëƒÏ¾ú†ªIkSÝu)jJ„¤xmÞ,!ssÙÜ´ÎpÆËŒ	Ëº,2˜ñy¯56P–R#¢u¿"ŒÄŠµè*ò>¬&TS¼ù½£8Oª-u®¢ày}`F<)N×0ú›vi-ð–‡xL‡ÀbL-8x„»íP,r8„W±ª'3 «®{Ð ù÷AÐ npßIÙAÖÐß8)æšT–ÓYê˜‘¤µ`Ûÿ”—­ùLGšpÛ÷†ØÁróöÚêIbÌêÀš‡ÛÊ;œ>úÔ…5Û.Âj¡¬­ûÁju›p\…²FÇV7‡¹œÆtÀn¬Û«,
çšY“©4,æ~‘ÒÞN	Öi½~#X„H7DVdoÃzi4ÌÍŸ@	Ã4ˆà,Ý?tjèBŽlÙDÖXqë‘ k k²™)èë™óóMñä¡Mùszr¥=‰-og©"WÀ9ØS¨(mÜ}LÃÀšãÚÅˆknénDSV³¶ØÄy kpø‹/Vh­­$‡luúàÓ•”\MŠ¹¹JµšµBÖÔø–#rÉTç¸»Û‹T7m
¡µõË§—K#ëKj]8±P-Î•× µ³E<þGÈ„\Z[×Ï¬†uÉqzkgÏÿ+Y»é¬¦ Ü‚é™«/ˆ^§q†ö¨£†‰gœ)Wz Í`ˆÓ/KÛd<zß½ „€-ñh[³üƒÈæÚÚç¤5VŸ¨Í.äõ¥Þ­×é)‡´Ó [¤µë6žÉ›Ñ0¿´,aD#}j‰]ÎÎR´vr®<;5uÍtj½
¬‰Öd/òæmV3Fû‘âÛÏ1ðGè°Êµ—×þ¥é`æÒÂLï$ö,z^®§‰ÝÄZ
Ö´mFÌëÑÅ9˜L	p´q™ÜEô’ŒÕDpž÷ˆµ‹ÍÃd òÞÿÑÝa­­°öÿ£ÍÚgöX‹ºZ‚ÕÚÖ¬E‘Ý² Õv1î¨öYÖ'ˆ-qé~ïžNt¢Ø]Xk²ÉÒšƒš›Aš/H¾&ZólÆž……µÙËí[¬¹°öK³íÿÉ{ï}ÿ†µÕ¯3‘˜»ƒôY‰š hs3-Oƒ´µ–tªÄGjç„jÞ'Ûž¼Ï¤4ÝÆEæ a çyŽ¬[Ÿlg¼ ¬1Ûë×X,ôkøANžjöû
%kðÃÍVXÛÚy}kvM‡0YQá“Ø¥I>ýä?f˜”ÆkÇ_zæDéji°ö)´&Xû†”5œ Ÿ}õÃícÍLE?¤B…3Etð—dà+‡7ÂÉ)¦LÚÔØËyJçQ»¬qÁMDÇÂë*Ñ‘™]^#º0à÷r®^kìû÷÷RLO·5h¤È±±áÁÁá‰ý é˜»8¬µD„5·vÙÙ½Èš” 
Öô5¿yŒà)²Pš25†kÉœLOjxÌÍq Å+i*ãï1%ˆÆ®÷/*kÚbÉ™÷/&’ ]X{Ó:‹w5 ¨ŠL"x`ë@mY~rÛ?ÚIYøHÌiM“HiQZ×ì”^ùÉ&Ô™7|.oV88³‘Éõ‚a†.×5Îd5!E¡ÑZ°&Ÿ‰o¹”ÆiU46Å©c;˜‰ÐtËOM]#”Éæ'šyç56%@2Ú`üf–#†p·aM(@‡ÆðàB`5D5â"ÊšEx«“Ð&*sX‹å&ÒÚùÑFÀ±k½=vÓÎmhp)Ç2Fëa§"2At<`¢! ®®nÖÊ½Nn)eR»Pœ¦™>nù‹Ò0ÕAÖL¾&eMnÅÉÊ…³6)Î°Æ3ž\äYÐ»Bÿ÷cÝr8ÇäE“'ì
jlE°¦LÈVum%x÷{$›¡ZPÖØ·+¸û:aósjöÆ‹rñ¯`Ø¾™½HV’<°†”CÃë……ÒÂúT9›©‹Y¢¬œÇ•Ó`ÙìúÊe îT¶\_W”'È›Ä+òòéÁ‰…³'Õ#cZ“´öá‡kkÛ~x-fA&¬û÷+²	kO€†LÝÉ_À&–ã „ˆ¦M24À&÷a¿W~Ö¤ùæó‘Ü¢#dØáDášíãðãéåålZ‰›ß*­­ªlmkë&‘€5ón~Ó}:4C:ÇÃ$¡¤ùET¬ÎÎæ÷Bùùr¹RFZSˆÕ–Ç&&öÿâÆjÖ^{š÷ñG?bh¡r.^:GáÚÈUU«ñîÙÁKÖx«\°F(û‘]Àeðc³¢-s»sPÏÝ8ýi\bÁI];rØûïÿ#ÈäîfíJÖÚDÂòwwik»*k1"ª±}‘dWl±Ú]ŠÖ¢¿ˆfŸ+Ž-þé=èD':±küÂ°´Ý¦5€ÆºaWÕ1(oU`²9ä·˜±Zfey9¢Z[wï±¶Ùì([ œÔC-Øƒ@nNkRØÁHnÔÅ–êšn¡ò·ñDÝ¤}Ÿ1£ÓÏr”3T4…´>L5WpcXs{‘>Bñú#‘’¾ý7o
Ö<v®¼þöýoK'CœÖ6Jˆi\ƒÓpãt¤4r”
rsþº­©ý¥Ÿ¬Ak2îõÕ[?ØøŸ·vÊxT8³Eïy[8ED¡­ÛöC¨YSXO1h6×«ÝZD6_(r-{	SÒÌ¤Ãnà¯éî1úaÔà6(mÏðÀÃ'÷v÷rÀ}¤wàR’ÕAÓ$ 5„µó«uÁ¹Xt‹"êìr©//fT¬qÆQ!AþÀ²Æ#ù(« i`Þ'¬'vRY­Ö\Y‹ ¦­)¬¹ßaFø‡f\éÉTäÞ>=]É¿4Ù/n+ƒ!d™%:«1ñ%çµèE2ƒ—¨¿Í k= ¡àÿŒY
×ÍÍ!-9^ÈÑ¿¯à©—ÈjÆc3&´qêfýH{.­ý½±µj'ì1Èo´z´®£	ÛXp?Hsqíëï~µ5SZB§ÁMMåjl=Ove€µº¿4@¶:´Z?ÏaÔ+Æ*×Îs%Ý–‡†`ÇF9H=Ó ›)Î.
mÆw×F{zä÷?Šê–Rv$hÖÛè±»zµÃ)1?‡^¦jí”Ö‚Ý²ô£¶½ÅÔÔIØË#·á½I•b>]½ ­»Æu9C†ÀBDÄöŒ½ ²žUÅ©ÖPI³¹J¾HÍÚwž·@Ô’cŽ—×ÜRiz8©±¹´¶ÜÈ˜ýéô<?ßÕéi,!áµƒÓÕê<ÿY"¢áIÙ•Êd»¨[™­—g——×ñ	¡iv(«—¡2Y@Nt—¼ÌO×,™ TYiupDE¥8ŽŒ-Ï¾³4¥&ôú‰¢TôÃ—g—wžüðÚ[O¢¬™ÜD*s‹2¾ü‚°B%j/`
ùåû¸å#ü&è°fº¹k‘×¼@Ë«§T2uÿW¾¦Y5PL…ÔÅ5ÎÚšãYrŒÆ!lÉ¸÷‰}µòœ¥Öç•Ôòò†Ì/!µ­›	e-Ä™?¥J¹—C¿›&©•&—¿HÍ MIçŠèjØ}‚k¿Rð¯óôððQÖ”)T{úé×žæÝ|šÁqgà4ß¼~æèËÃÿä«I¢ô4R¼ïš§?rl§4ƒÍˆXÍ¸Øßc?J‘ãù^ãfé“\
°ÊÉ_RÖÄlz÷<Ú˜A¶mŠ½›´æÌõÛ'A†g‡ðW½¦ù–tí×æ´¶+¬í„µûª±{Ä.k	im÷Pwþñ=èD':±«°öÐbdPÖPÕþÍ7+Uù@ª#ö¾t–Âé>Eÿx)Û¿ÜDµ «%ÜE,ò“¿¹¡ï¬ó°Ÿ*É­&Çä;úœ	b›g7> "5­™|öÀ!žÔ³CpÝŒîcàºžJÒ„mAYÓÞÛE6ñ!¶¸‡<H$µéî€j­È ¥›„«;¯[ÍÚVOûþSh¶ýÌI-nn*§ciÜ² ÆùZ{b¤4^[ÀZ‘Éí¿®)ð‚tV“ÁÈ³¯>Kä­Wh³f¾rFl¦’5 "KnjPÔsëÆ#V¦qQgv-`—ZBç}
ƒ¿JatÓª_êÕ‚3™îáÇ¦WQì™ :ÍmEH—Ôµáaš¯ñŠ¹A.ì¿IþTâ°&ëþ·®mmÔÅhëkª›a‚‡?ö"ä=žœrH˜XÀnåÒ6[ŽTHï2×hâèm+MýÝúçNÔ¬¹²æÂÅK„jÚ	ux&æ**	Ê#¬Ùp`­¨îÈ•âôô—Šy¦0Ud5íq!zõû’ËJo®’“ò{”Ù{Ÿ¼›wæø°_™<(V«Y6nªPðTOŽœ‘¹$û—¦35uŽ»¹„vV#›©l¬y¬žZ•¸Ænã‡+6íu;åÚGŠÈk-ŠšXMz[Õª}ô<‰”üaî_²ê¶›°ókÛW=Ï‘,Hú®Õ½hM¡ÅX¤¦e3ógõ˜‡HgôˆØgek,ËŸD®’×Fõü^]rÖæt‹²$o¤À7“Ôj7nPÊV±w¸"-è¢óššcÒŸÉ"­¥Rf7"Ç!Vòb5Áòk¥.UÑõÂƒ5\&e9YÉçëßùÒÚ’çBºÓHè’ínï6!cÑšÞæíñyþÅæè°Ö“åæ‹o¼±!®åªØ“š¶†æ–ÍJR[€·ê´À./`Ô_)×i¹6W^^#re¥+5ràè·rôÍ£ƒð¶28Ò=ŒYdiNõjjjˆj=Eþãàààµ•±Yá‚‹›7[üEØê`™
Ö8\}þ#ÎiOxŸ5×sT?%lœÓ8ñÀ‚>aÍ"‘é‡öUk¡Gvä´èà¿{»µÃ&çÏž¬à"3áØöµí·¾¼`­…Ö4ÝÃb_FÊ¬øjñ)ŠNgóµj¹Zyþ×¢5‹Ë¿ú•z¨EV{NíZž¦tàÊ•o|ðZè3þ´U¯‘hy×—«]P‹Á¸Š)ÁŠ½YÖ ,øÌÃOoø³«¯6!´Ä8ƒ5¨Í3#9©ÁtºÄ‚»öß'f°F­9õ€?QYû¼´&ôúd5â³¼ V‰¦Ø»8÷'jÖØZh­­dÀµ$’%Ïâú@&ðîéD':Ñ‰Ý…µ ¨=æ#¤®ÉøƒoÕ|Xë“$‰8–Œ¯dûV¢°–t1V#>yû¿ß0´)$’= _A`bîYBÌ<ðÀ‡Ü{<Xñ? £ íñ°äGn°°<Ic5øìFæ¶ÔPÔ
¦¯ibÌ–î…É’¸XíR°!ÞÞ9Æ?°¶u§²&ˆM¨j2,(ÑVm¼ÇæêƒM5‹®”&¥ñý'x·ZY{Ï‚tX{åÏ^yåÙ?ûàÕÑP§&Lk¦ :m„ÕF˜TŽÄg:6‚ çá'háèz™½vÈˆÔAákŒ]Ñ
ók¬28Ë¹çÖüÁîD³aÒEpÝæI.äà½è:6pàÌþãÇÎ.lIemëæ•kË³ö/±Ï¹²¶.amzz^mSš0Ör¹©åòÔI>Ãòé•\H	k†£v†ÞønqÒL(XóhQÖÌa$)¬ƒÔLUƒÌ	æ+y3|‡ªrElÓá+¡µ‰¥œÁTf|ú½ÕuŒk±¶í±xÁiMš™˜—HNr›ä»fÝdšº5.+3rRÐ gO« -79/,ÑX‘ŽÆôKÀ›PÑ«ŸG„¼Cþ{çûgyîù•öåþ»c¯í4Šµ
{šPÇQp<šÁƒa2öØ5²ƒÆ’ UHžž.ëSL½œ’cÀN›ò#±Ø>N8tJZ6Åm¡nß,•¶U ¥¨=Gê”"öHÕªj¥i?ßëš;·çÙ1¨«óf®ç™û¹ŸûyfœMÆŸù^×÷¢uðñÚ5‚Æ©ÅªPM4äµ^iÅÀE»M±
­=Òéf’ëë÷®ƒZsŠõJ÷ºgAv‹Î–¤©ÁAjì³Ü¨°¶U}Û`æÙº†`¦Ï”Ôh ×þFk{§nëæ2wn»ýÚ†VÛ7ÞH9¥ÁüúýÞC µ47ž×Kªå[1?Úwïœ÷x£î­¥8¬M¶Ð C–W¦RÖ˜°\ÍVC­ÈRÍ­¨vg¥bk{¾/]þ:QM…¤p­ZºÚ­®ª9ªñ0aX+=õ”þKŽŒgáÂÙL”Š|E«¥ µ’²-ñFåÛ~B[y®j½ôO+hQ8=œÎdWæW³)$ï1šÍÃnÇ§‡è‰M[¶in=ÞÑ±°i*öüØ*‡•…•ù±æÞ7ßéxSe\ÝçÖ’½76¡2aºšeÙ}ášÄ!ÕLY]•òî´kòÏ€,8!I’¢)‚ßi#ªÙ·ÚóÀkõMFœØ¸fç1|áó»¥È÷÷Mä)U	Ö—‚µh«ÖhÎ™™ åÞ>ò Í×8Ÿ7›®|.;M;ì4ïëßžž_U¤X6k2yÚëÕžø
¬FP©|ßÛ÷=L6¿ò"ŸµÚµßž1XM™SSÉd:¨á5ÁÑü #­y×5­Þ¬qàiÏ²W²N	*VsóaÞíºÿ†›ÔEÁ9ÐÞT­]W…5½»É>kÿyçš5å@&„µOkŸÕƒGIRKêjÄö¬âºV«£­Õ6Ä¾vyÏÍ†½H#ÑˆkŠgŒv˜- °æ‰JƒÌk-{&åeLð‹¡!Höù¡tV«Ö^zá—?û^k;Ùˆ“Àšškû·ÆbªRã$•œClA‰ŽÝàÙa`»€1NÁ»Ã¸yŠ©TÀ³(Åg–£©g3W–#‹nýXm·D5inÜÑ¾ÿèþ½G¿ðñ½¾ÌE6ø«[Y¡£®—­q-”«¤‡†zº2ÕÓ)NküJÇú› ÔLZûçk„tµªä)ÞÄ·Þzò£Sk‚µàôhCµ—Z€5¤±kÂ(¯^Caó
5æ:nUã"»ùuEXó+áÄH,)¹U•µhª¨kÙ-´.ÏíÚuÈ˜n°¶¿§Iì–¡óÚ±›Ë5¨–€µìoXP•q}Ïï±9U[YÙ$Äjeö…Åòˆ6¾I]ÎHŸužOg3Á‡Å	6”ûi ônk‰>k¡ÍÛV\“¯ˆŠÕ 5 D°6X$2gésùÏRÁ?ÁWª)KaŸ?Šï‡ð˜vÏ}„Ç’Î"8E†ð'iÆ3)@lGEø™?’«æù 2•ï£W r÷x’ÁÜ˜/ŽTI`ë·šÛ¡6Ë‘ã¨Á(Ì_4ÍÒÜ‚Æ¦sœ+kFkFŽf[õ5-êJÕZä´¶Ó¡fm½eíþnðcÉNt5ÎÐÕÊssk³³b©ÙÙ9à­e²8ñàe+¬Î€tñ)„t1JÞ:Á-Ë¦¹µrÀƒJ$¾âà\Pìlç™{Ÿ;äVRyc÷äÜl¹S/ ¬Ñw{v¼øjëlFxk‡?‹ÝvIü^«ek˜Xä¤µæBöj®iV›7uM¸V#¬Y§µ_ñþ™²V›¹ ¬=uqd‚Ô”;úû=¥¦pt«HgšÒ¨jél)Wœ§C&‘*¯+Œõv5õNÁe¤Dvô´ò×iþBºg¡)³ÀteŒšP¹ ­Ì—{ÈèZXôïCV•@9»Í—Òxù¿lµ¤D„µøOçòŒº¬)`3HyÍ|ü!6º«™sˆ)B¦¯qÊ©Âq¤>ÖÛªÕT<%0ûØ-	jL¥E;È¤´Æ¡ž°¶;?33øàh_i€bµK•rá{—øÊèüCIe-ÆÉÌDipßƒÎjûNÜ±OåØxQ4À?Q§ÿ\ÊÍŸö¢µÀjßvVóóùGÿÔ}o§È·$¾ð°V¹È{Z£j-¤+ò¶‰¶D½âZhWèÅ‘+Îºr»ID«ºEºw'#o7»Îàh†j<è­v«¿õ¬èè-V;"“`í³*±ú«DÍQ-âÚÎ#VÓîÛ±#­¹¬Æ¾³°æ…ŽÑ2âZ½–Øõ…µhý¸ÁÂZ£ÉZ#Ñˆk³ñ®}nôî l£ùA™\MæJÅ=û&³i`d·PGUù©ôtmdÒ]Ä…µ~ö½÷Û[é¥–Ÿ´ØÞTäCÍYÐ§šÃšüE87ö²$HD3XíÙgo$ãXÑ5ÈMè¦›-\Ó‰‹ht`Óës@Sp'¤ÇŠò)å¾P<ËÊ“l;z’Ê©¤²–€5
Ì)¢D¦u ‡‚íFj±hÑ#;¸–¿§qÈP’a¢Ù7{
$‡5÷Ó›0Vûè£S˜j¬­½õÑ©
„çœ¶a¦‚µhòˆ<§„`ÍÃ¡Ìl5a×}Ô5×ãªÔ­E¢dfg±àËÒí¦AKs ¹”\“•‰]ºO×8a8Vž<vóòòcEYM{²ùù×P×*˜‹“%X“Š†?Ý|y‘„­’!¡¶)ì ‡áÀ…Rn\Þ=ºN)ùo‚î´Y{+ÄlöîXÊ†&s!’¸æiÔ¢µˆÑšg@‚j‚5Œ÷5ÚÍŒ=7x0žÑ"«F¢?—ëWí&¶ŠN"ÖtŒœ"ƒÐÆfg}Å–QBNòZ²aÿãN¶‹E “øEÎ„˜ŒÐC;°R0q•œ¤Y·2ÖDZHn^³fÇ/’É!hjó®¤¹¦&n"i1šAz½ÚÒ¬N¬E^®±:1×T®æ«]Ö\®ë¼ŸWîÔËóúzI9öÏêdÖxËt¬ÊììÔÌB|‚tÎ®Þžî¡U#³Èy g–ÿH }q­këú©Å9Q¢^‚NøPXŠ|Lq °Æ[_âbº¶mm¦Í¥ææhŽ=×—k¢þ­µ¹{#Õ†ï‰T6ä4ÏŒNQÇ–ÚÐw)iåP’W™ÔˆM§µh
éÒÚóŠX³¦]mÖ˜Ìe(RR®ügŠªc4XÏêÇ5µ—¨¤ìÔªõÊ.M÷ö6“‰Ü¡tÈÕ…æLi¾¬âñlO¦©G}ÕðZ¥´·ãxï
nÀÚ­­¨Jt¼ÔÕ[Þäv`-¶YK–.?þµ¾ókRƒ¸X“¦`(,wO5TFÔH	ÒxpÎÈñÈu7É¾P3² ‰ë«ÂZ8ÔdB&¬Ft–¨]s}$‘Ô¶Öî"cdDŸ{€µ¯¥×QÖ.½æ#É®ØÎjm¥ƒù=JÑ‡Õp<Þ£ÌþÃ$B§‰ÕÓþóê0°æ¨F›k>,o{e+«½ÍGæ©·‰³gÏÂkLOÝwŸ.|…Ú5<÷À×ä
Â&ª…¯kÂ0G4	lœè²[µó¡ôR××Ä`ÞáŽ'’©3«^óâAXM°f³ð÷¸ž·CN•Ö¤s~¶ÖRºšØaí/kÿ±^ìÔ;Ùb-º‹ÔÏ‚LvYK²Zô!Ý ÃqçhØ‹4¢¸vaDóp'Yö»$2†û{È¯BXKÃêNÄFVkºÚ¶¶ýg¯V¬Í¶æÔÃˆr·Ýˆr»ïÀUBr“7ÁcDõk²‚ôú4	e\¶ùÎj£Æfœ¦³q­ê*i0V7XÎÔ5o¦Âq¸ÙQ·FVÛÃkšÈÖº|ty×òvÊÚCU`íÂZný<¿¶¥"©i×à‡$‰’å—šJyÃ]ék,¤€µž¡!ZbµÄFÁšÊÌ¿¬)^ƒ,:×Î[“é-À•±“•ZEÌÀÃ¼úšÑjað‘e&½D\ÁN$aCA-R˜î—¬¦	3ÂÏºCCx*°¶¿C°Fì²tHÐÚz{vÔ»3 í7 øîWAùüÐ®‡.¼3´ôÚR¹¼9%Ÿƒ)ÙŒàÿ¸Ò±Àï™2éŸ1k‘©…¦Ë™l¶®Åjkƒ¥¦æôx¶Ù`Í¤Ç6Ùeú[µaoãe-†­E^ó^ØÄ3Fk¦qü*=HðÿoÐ	'>“Ö,: «ö–¾ƒðRÿáÃÖ4ñÁ¢ÑˆŸE\ãés-‚5Üø¹ÁaµŽNkžbK&ýA4œ½As{N…Î‹.×ÑqÍkÖx~ÖBÇ5B‡
Ù‚$×Òü@Eu/qþÑR÷Í_‘Õ(ªá`œÁuµÕË0ÉµÚñuvÎYÑãºFQÒÒœd¶u”5EÅ˜K3—Î‚VVƒkP—!­9áE²ã…X‰!íŒÕnõr£M7óÓçJ¬˜¯	½¸¹&XCuë^dgÛ)ksÅbž?cJàUu£œkm/òŒû;Ñµr%¹™èÕ¼µ‘ ™†êÔ<`j“"žÊ¥‡AÝSgÎ€jÚ®‰Ö‚°jÖ‚Öþ—”µŸ<2‚²Ö×šBWëãuh‘³¿Óé‹’{‹Ùl	+ª9¶ÑÚàx©§££·¹«£c±ÃzöŽ•ËÃÃÖ<1me­4ÎÙ0æ‘½Øù¨>V“‘Ï4¦«ôÄÈb5B÷òl÷C!¾@$”µ›ÿËw>€³ˆª£Ä–Ö¨Z›Z]ßn¬æuÙaMÅj7±$ID¶®#‡OòŽ‰<ˆÔµm’!Ù¢Çc¸þïûÌ÷kø§ò}ÙPv€š5”µíaM}±íƒhŸÕ_O’‚"Xë£·Ž1Šù‚FþE´¦Ë¯¼òt`µ/¡©ª=I¼ýäÙo}ó,'dDÞ¬½ù…¯ÊhäÛßy@•jhjN¶^yæ]°€”Uuó½°uYXÆ™×T$(Dó”H/Z³{\ZÔ‰×ÜL] 5Œ^h•-XûÌuGŽ¸²¥5ñO°V—Ø¤€…ø”¶ýubg]}‡‚5b[/H¶º#¾%@-¯5¢ÜÖ°iD#q-qUX‚úePÍÔ`MÍuKE3û˜$¥#›˜P±«-.f³AWK¸‹Daí½^úÀ3i/íáÿ¼©\“|š)éQ&£à›œEn4ÃG#43ad¸QÁ²ùC:JúèF‘iUlÓóYvEmOžÎ×`a[9Æt"OH­í•m•µ7v¿¿»»{àö€j18š¢¥•D¢žé.4s`ãbªÄMu)À3Aš‚Ã-Gïqw,Á€5ñÚ¹5~Á\»ôê;•¦VÓÌÇ7ÖDÎ_k‚5·¢×(íÍVôÌ zvîòX4–ÔI1d²!¶Ù·Zô¡µ)´µ9Fv:T´¼ú9™“k½½½'i±¶Ìûuµev›m…µÊ;_¨”–ÖfVœÆ¬¥‡å*ÂŒµ™‘¾©M‹±¶Þra…òÐÄHe$¥,¢L!«ÿy©P«g˜k‡ °UeíÜVƒö­)ìHkàšô"G5Ð#ÅïÚ¢5àV«.µ4H…XM“mJ¸\æh`Mbö-zŽ pòâ§ó(!žÕê(*öüæ;ŸC4Ä÷‚Ú§vIzxZ]›‡ëu˜‰ŒØó4|æÊ£…)k<¼¿š ÄQÓ˜Æ¹Ž2¹\#­gÚƒi¿ç@ŠÖ„j§¯lz#ìN½Ð,µjœ±uBKÔÊ1Ÿ½¿"ñ«‚Øsªè• 6­&E4<[²§o°¢B6?ë´§ÕJp%cøL‹">Pì7º_^*§[ræÀ?°¾^„b›ÒTÚÙ¢ow:gÉš9þÝÌJ³k“˜‹‰I…îéÍHzLS-­–ÙÜ–-*kv‚z³M`Mqzó´ánÚ\ZƒÕ~U«¬ÂµŸ<Â×XÚäàuê7'ønÀ›¨Ÿ‚¨X+Ñi-UšýÑÊY¬C™®C]Ccå±±®`MÚÚ6ýŽ/® hJ*.LOw-¬*ä9†o$¯ÂëŒ§KªK¥ÞDï¶FÑIX#ŽýW¨Akà€èàÖ;Ó­rÏ‘#žIhtŒ°#üqäºë1m™oWAÖX‹~qc'ukÉ¢µdµê<w’M²—OÚ +•¡–t…Â5ù‹Äšµš¶ØÌ—_ÙÛÔb±õåã>r[iKó×‡û‹%5ûz©”µg$¬=}ó²³š{ÿž‚Ô,>¢Pù,G–ˆ¿DñšhížçîR ½["4o„`S‚ƒ÷Á†pEÂL	wqù|„5nrbA[ÈôÑïâUäò§#«Öû&!MU;"EM#+ÿÏ$aØÙ’ýSKkÜ/bÛAYÛ!	DS÷íO²Zý’5v¯Xc¯m‰Í®G²'6áöú]Õâ‘QÑ°iD#qm±=ÐÓø"¬!6UË—J“k9¢…/Ãi\ûkÚa×µíï¥¾·§E™?-k»õû$Ep’·„€"3~t†&†ó£®:«1·PÖÀ/óóÑ„gmÈi,³^­nó¼I{!ó€ÌçÇíb_Cìkß»¬m£¬½YMƒd#+ñ7ZCkµ(«i#³YŸd§éR´ &kz§2­ÖkMùPÍ ËÕŽ>úè-·³©%6á°Fœ}‹¬ËWÏ]Z{§²a-t7`6Žr †Cœ×V£qZ­ÎŠ~":×Ô‘LëšÖô°ˆ’¾ÂT÷8¥ù‘'„…Ó&ÑÒ¸ÎØ¨h¦¨íïÕØ…!$°¶««_‘åc7×ÀÚ2‹˜‚ªºþ‡–à¯ñ¾òª÷W£Èf([uÄQ„ê4d5¶‘©Ì.Ë•,¦´:¡zµ¶æJxÚŒÖOÅS³æ]«c0¢>k5Â ªU“ Õ€µb_?’}Õr¼PÉ„-‡±ühÌüˆy¤æ§Îo‰´Hù¾P¸˜ñpín¸xS+5{¤6‚J6ù–ð÷”lmÁrôy3ÂO<èî"àžÁ"§t^ë…1û¶àÜÏ„‡£;æj›‡‰iŽT:z¿µË§Å®.#Õ«X°fÁÎj—k0:ò­COö–€#é[Ý¢´Y@m=ÀZd*?±Ñ6"Áj‘ÂÂ”«ÅþÙ-ö
Uõ—{ÙŸ¼.-Ñä<önùltr¾µæ6Ôq›?g±ˆ¢•—ôS*KK³ëŠÙîît©\Êr·Œú›;)µ«Ð¹»Í~[“Y£Þß“£ŒlÝ75s†Ø”²f¬&a´¹X³&]ÍßÒØgeŸ11HôÓEùŠÈ‚”ÞïL&ŠŠt	{â„uå'Ú”ÉÐV­£§i£+“+JÃÓ½eHŒBµl×¿¹í8°Æ_±R©@íÚôªæ‹‹ó«Ó™¡¦ì¸ZÌ÷ñ×oñ—e	ÀÔSÖø·óØß«Ïš•©™]È­w~í;kUUç.ó‡wr`TpÜ ñ¼Ur	x@á˜Ã­~>d’Øªé6çµz´väY¾JÌB¦ùIüA¦³»3Kæ0¢>‰®Økì¯¼²·e”ËÁfË~`mtjŠ\ áûüß¢«|ZþVN†HË~tRÓÇ&¦Îkèk_ÂÎ\{ÆûÁ3Ñ,ôeìÆ©‡ÞK	c¦TVYMï­iqn>"ª¿yÙ5£;‚•¦©6@Æ«Ò‘Èà¿É§×kDX#•fkæIË5gµh0b¸Æî¤¦a‡šµÿð‰iÍý#Ùw µú±“ÊZ@µaÍi­NÉ›†íÜ ÙêIhuƒÿRa­hÄµ	k*PãÁ0ÚOØ<Rõj¥\þXXáPn¡¿…Åé±€jìuÝEÞ“äÏö ÄÉ)Ox&`Ëã*Â‡™:Ž:¬)N¨[¶ù<ŽZv5£Düõ,ö"Þßú„²#«Æ ò5ŠˆÞ´*8ÛWMƒtgH€l‡@YÛxåÏ‚”étRYsÑq)å*À–g4·~#€±Ú¤5`1#K&åúZÅ}Bµ£j`ªf;Fk/~IiññMeû¹³g_­t÷¤<Lµa‹‰™ŒÈàŽ@SÂ3F\„2ã<´îÔ¦›¸éLcôI6Z‹–‘†fnæŠ)¶E3’`áßÓæ:Ú~ÝNsìC]»Ôw­moÇþý{÷ž<plo‘­°ó ¬™eök•òejkT¬­r(§›DaÞÌúg×&ÈéÒò<¬632321^BSƒ³zÃªz¢¦AFL…iìDPÖ€µ ¬±Ïþ©Hõ›r
a^ïÑŸ_òX„µ «…”ÈÜeŒ%¢¤ÛrPÅ´ˆ8§‰
ßköíE€µ>ø;[ä'[ñšn¯¬[i€mb?˜ÍÙíîþiÞ"3`š šGA6"¡:`°Cè®5Ÿ'«ÑÅµ˜
	Ï†’57‚TÅZ(W›?}eþÊ•Y€ˆØü£He½ú«U9kVù‡X
á[ÔÊÑÖŸM‡$­…ÁŸˆÆ¥ûI*Ž°†¹Áxá¶jU\X+wÌ´ns™J7m€däObø/„kæI‚d¼ªÊnI~•NkTöÑ_ ™p¢]W®dœG„¼õt§þÕÖÜ	öÇ¬¹reøzH„4“‘¨¬ª9‡7R£hm6Æµð —f¢}õnd0™h9Xbã`‚ƒ»ˆr!›²e(¬ãPWOï4¦‘…aÚª­ ee<C:n{æøŠÎæ‹%}Ç‘q<¶@.ä!Äé)ªDÃ|ó„Î¶ø¦È…GÖØ	ŽÇþþ×ßQÂTp»É4˜øƒkwÝIÖDfŠjlF?SX‹/! gºØv$2šïIy-ìõÄµhßÏAÍvbÅZ‹,_òt¤Ç÷8=–my¿sljö¼ÃZt‰ÊšqŸ MîœÅ—J¹…ísÿi~stpjþÏ>-ëþª°ömÁZd5PÍaí£oXpÐ ·¡±q	\“1ä=?• é•f”)Ç}ÒÄIpÌSx¤jþÌÄO2™î–°Æ 9‹*N³»Äm&nÞv`Ùd#@8¥CÚ»$ŒI6Å†Ô’}Öˆ¿$¬E\»FXýÕ4„ÑqR¤fúÚÇùöv«²Æ^Ï^$iéî"´ÅØÖk¤!¬5¢ø±•XX²«°V,|ð«X“·Èd.•Æ#kvP-¬%ÜE>0{‘_¾¿_)ÕƒJRáVŒúê1Ø7V®&Ë~™höZ4>ò[7>kÎüg£ÒÏ<L–óÞk^Æ­ÿyìãf~wxÖ£1˜×Fjy9uòhRY«k÷óíº‘Y,YÓò™øŒH¡ªÉL„|HT6ij)òT´Ö|àž'à3>ï=’Ð×€µÿó¶ÇÙ—Þ:õä©KŽhJ¤d¦ ÁÑ…0ŽÎFŒ,e3V»æâLæáýÙì”«ºP5v…fÛF¨Z‹ù’^vfKWiNçŽhU¹­Ë’	9úïÝ»·«wÿ¡C4ÆfÜµR»yY”ì€F0aKÀÚCh›•v"å’\ûÕþ£7¶øŒ°´FåZy¬Àe
lÊeŠØú°íOû;DhðwÆÎ1Œ}ÅÖÎ	Öê–¬Eazµ «­Ñè}p0ƒ|’%Uq2çÆ%EƒµÀ`Dõ,,P	R3­ÌBžû(sEÊÐ„yÆh‡ØÝ£2ÑÕÛÝYœG¾4'tZChS„—µ´Ê>ƒ5&øˆ\õî¨ñˆö>¾¹m²¼æƒ Æ:5k—¯ „Â5A»A…p¢0TÂ1kÓ	î(©y§$;D­ÎõAS¥{	xÒê@·åFb™nóÍ©-yÅ‰ƒ[úc¾nÙÆXÍ†á??>ƒ"—ø“t¦Ú78"q	øBkIY/n9žÐ9{|nNjš¿bSçÒl÷€žÙ‰w¥´@1CEÏHl%Í—+Ü<»‘)—Ð±î]˜?óeXm-¸Œ¬Ö­…<Hö¨¬k@}Âï‹ÇÑ¾¤ÇN¤Už†ùc‰Šµñq£5\F°‚”;äpye¡C±0-“ý¸°²B"d!›ÉŒáÊOf¤Èml…¿c½ÃS…‰q¸-®«¬‡óCCåU•´Á.‚µJÅaÍÌ ƒ&î°f–ý …`mí+²R=¬æÌQ•Ôx`YèùzR‚@ÙÞz¿Í5#Û6]Ì–×¢u¿G«%âÈËå°U%2×žæ=Ìíyÿ÷ç¬ÑZ}e¹Xm¹-qÿáÑI(#e#ú—iÆÅ`Ä[]Xûíñ8A>vË£WYM‰ðûùÐ$>z`­=i´&£‘¯þ‹— Ò·N­Ö°Œp½Jm‹Â¦‹ÒØÝ@1I7<8ƒêªþ®¯y½ nÒs¸Õ¥·[9Œðk¨›²„ttùšb;­Õ&AîÜfø˜‹èEÃ¶¨Æ#¢šo š¶zÂÚö5k×Õ©Y##­Õ Úµ×¬5|ûÑˆF\»o¿8m”èç@³¨¾kÐUÀÚ¾Ét&-ª˜ËdÀ‚èY›`Í…µ÷~yi÷¾–öÝí©bžºJ}B‰I<&ESê¤æ°&×Gú«Y³€ ™r#¬sNgŒNjœ››ˆW­ññ¨V×n$"+À0Òžý[íúulíM'›ZZö×ï³&^¬vþ|w{÷¥óõd5Ñ”Ø-Ü&XãB6•QFäPªÆµúµæÛþù«÷<öè=-/‡Ê5}+­6kÄÛàš´µµûÏÑ»Ns&¡êŒ#>á<ªl´!tËf3$œÒqýªõHUI"T¶(fÑ|“­°€YÄKV› .°Ú^àüNníÙ»¯< {»!ªÁ{'ù•î ºQ•Ó8h–´îóüC.Uè 5]´ªQ21!Z›ª1N@j#S½Y–k‡º†Ëó}E*ÖR•Ì™Éf0mkƒ+fPÖ"®ýÜ¶ÁjÑRñ5ÂÚéƒý‚5~Ï‰‘ú±ƒÆ«°KÕ8†Óþ<¬awS?r`)éØƒcãøjpsiM‹ÊgÕß£I‰ èjòl•±È`?ýèPÇziOƒ„ÜdØ_uìgªPò#²Ú¬Æ	cßRÂbÖÁL1ïé<B±šÏ¹rþº|U[ó°$HvŽœðŽyˆÔÄj_¿R–:5»´Þ-˜™›…mfI±„ÉÄlKF5´V“¤¼±“VZŒç	^Ó%o­&‹ëb¨š›Q½ÌK~î«€rø<*¸2Æ-r²ˆŠæd8×—Ïß‹	,‡µTëÒlT#¤VÔN@©fŠ«	Ò^eqÈpÊ˜DM¿wiþÌsgÃ5ªÖÄj&­¡¬IX[Œn¦«¹$#j&ˆ!$î1ô§ÏÚADµTk^Ã$‹wj	VO“®[¤²-›-¯ï lŠÑLªgº<½²Z&†‡z{¨%!RùCÔ«Qf5¦V›¬®ôôbG²IÿÂ±²}92±t	#ûkóå7ƒ²f‰#¬ý° ÇP¬
N¢Ññ‹,H®0çr¨ŸbY‡œgGÔµùÎ#JÉ»ó&'5†„´FlQ×˜Fu-éáÓ ‰ZCÈ­³Ïçôµ"°†•JI,æÃdNÊZcÑƒæÀÚþœ¾<¤6Åj:ìËožž¢ÍÈ&°&]ÍÛ¬=¬vÛ¿yú1þ…ûQµ^í|ã…÷~üãB°bé2†|ñ>r!¡z?×ÓŒ¯ -BÐ+ëÌkVÀÆïjhº&bcÅ+õÁš±šw]ƒäDjNk´·ÃN„bAžFÐfízÕ¬ñ~]Ýg’°ìEØwâµOjÛÔ«%m[Z‹¸f%k˜kø¨„¨e5öš>kÉ.kápíÈväßÿÛÓˆF4¢;†W¬¬Ý-H®åA5“Ö‰<|´eŒÁ\k:‹«aÓÐ"¤¦Í"Éj¡ÇÚk)r(}±;(‹ýQ íÓÐœ÷™ÖX7*Eã›Iã4ˆaÔ`	ŽšhÍ{¨ía`U!9nŸ4^ÒxÍ¤¸ hºñ*»åõ”-Y­M˜øÜh?™(»0V;êêŽG'ß«wŸ?ÿÚF4ƒÔ¦@NóB¶­‚µV-e5”5n‚ÖðƒÜûèWïyôf2 Òš~àÏ±î°öf•TåRE4!!Í™«JT­Fb[{ Áj)A#ç5?qÔâ¡ëXüºdç±8-®$ÓIhóÆíD| ü¨ÁÍü{zzš=È…„ÑTª&…m—z¯Ý|GÿckAXó­Ö.ðûàÚÚù5š<Íe)¦!Ìad¢Pæ÷HÈl
ùgSÕ6ØŠ+fÊ½üäò0¨FÍN†·@êl:­ãK›½9Þ€­ž¤µÄf=Ö¾MÉÚ3®¬U¹cf‚„Kâ‚‹ÄúÃÌ»/>µm\aØö"¯¦L’3æ?^½q†x—Ÿt‘ëK3L}%<Í_åÝwßåñ!Ûã<ØmûÍã¯ÁšüÆ‚#'3:û‡Ç&›`V“°ëÖ¶WQÁ•5w‚„Õ®lÎÎúëÐ}›Ð»øî/¿«øo++È{›„]%~3C0Ò-LÿlZ„5–4Ú1¬ó,ø’#6õ3Ÿ^œ™¹È»Ë”M.0\Ô;ìK¼ÙŠÇç¿‚«¹Nè·Ù+yÄœ^òæsÀâšåAÎ#­)ªöýÏ³›dTÖª9¦2×>÷Tÿxßù#r (IYË¡³M†I†×à·tQ ¿è•Õ#rïñ*AIz,Óþºí¬<–Åºš#Óó…Uë=¯±á_µnóØ‹–^»ôÐw5rùäUeí¨`Í+Ödñ(Ä¸éNU¬‰$Bæ¸š<3:©…Åj7†®1€Q.‹GŸD†cü5	{4‰ˆÛØmKT¬)a?Ï‡ž2êÉÙŸ¤ ô=)k±MA­¿ˆšó'ìƒLÆWÔa“Ä¿yPã{%SÖL%5aÍ²P–oyâG/åÅûþæ[*WÖÞ{ï½üàÇ?xé¥?½ô¾\â5©mÜ[ß<E«ìÂ›ÜEÄUNkîàmXSè=ÅCÀv]P³;8"iê\AWrVÕgÍFüƒ>xïÊƒD[ûì×ÿÕgê*k P5§¤¿4«m'­íh™ìˆ­!)¬moÜÏ™¿¾dÖ®UZ;²eªy£b­hÄ'°qÇþ`3¢Ö]£dÞŸ›Ü'·}:÷ðqŸKCCÏ'œ £m`5â‡ëKïKóåókÐzÚƒ‚µ}†U,’>XÍ­ûYãª¤Chóå}(dZezØq«Þ&œc
©1Xå›JìŒ7IÖ(GàJ°†lß»+Õ¶w‘ƒµDÉZ0$´Àðƒ¤ÄöZe-8C&PMM±‡zÓ˜{;ìŒùA©O<ñÄ£OKQÖ¬+6G² «)Î»ILƒ½Â‚üå™vDlAÍ¥4-
“æ¦ˆæs¸Í™K£SìqM¯Ì¦ˆ?,úB†°i[t†ŒÕjFn\	üØÃX#Rk 5XMÄªqNÔÂÚr5’ÊÚ¥KïÌ¯]Z™é[/OŒ¯®ôÚïºSSå•éMO†œÕ6iÄÆŒ­0\jnê*—&ª°Öƒœ­éÍ	>*„Á³æÐg-*kzÀk[³ 	õÃŽYhD†ø}ø…ö¥ø0Ž‰eMØã„Ç5¿.›Å´²Ë—A±„(\3T€+T3eíŒ^à¹ðš?ýÅïâìá àÀ®cØ5üëÅê/ìþ¿Éã§ÄsÄÅ¦ÓZµ3¶‡õYû¨Ü }CXÖÆ‹êý~Pöþþ‘ñ"h–Ã¤¿Aj…qéËÕl_2Ë]”¬õîÚÕqÛñ2_~ŠÃ…òNH™òôP‰Vj™.úAnNk€<6\àÐµP˜Rl¬mNÌž?_)w~qe-èM¦¬ý
5 íó_#˜
Ö ºy	†k"6– 1•IEVó€'n2{`MVìËØkd5E¬[ó1&@Æ™—«i«Ùy„ÐÉ--’Öò“ãã{öää“«¥%#ë~¯ÑK*k†[v=]Ÿ‚Ò¿>|âŽÝ{î˜:=/Vc@YƒÔÄj|Vš¹‰_ù–4USÊ‰Æj/½d‡ª¾öÁ“ßú¦:eß÷wä5VÓû¨¼F÷qÄ¿‘³ ­Y4îpÇ~Ä5)±ãéBf“Ó˜32cà¿—·p 9“Ð.îP/lpM°v=ïÔg°&…* Pä5¶÷‚„½>9­}¢kDÒ³_»°Ò“ñc|ûwÊ‚LºAFa-*kId;R×²ÿHCXkD#ñIìE|*¶â»EhO`mõÖ¹\{6µ›Âœ™9‹€Z½$Èk¬¯ÿò+™’ÄÊ|¿Åöóm¥ùm¡²	Ö 5%AÂkÖQx»Q'‡™º„v·ï'Dg"2Ùùs3sÉmá˜Š2Þ\³"˜ÂwÙªŸ´.¿Òº_Àn1rKýžØ|dž0ÛD5Mè;c¦+‹’f[WïP
`CsÅí¶GEkîÛïi0›'AeMõS¯®ÉàoÃ`­Y¼Ve54K³*(Ò¸ÁK³’Ê€kWïqƒD­ÅìFlµ†ÂâyMö¤3Ž³˜¯“ý,èlŒ5=¿­ÃàŒ2µ½ÀÚ^&û{¹½ƒ“cÇì?–ì¦«!:÷[¼³2Uyg©ÐW¨,ML2m2ï‡ÏŒÖ„gQ²ð9
 C±PÆ¡X¢?0°–áMËº¤C¥J÷8á ÍkÖ5%k^´æÊšp+HKì9}$ô‰:;<	FÓÆÎ#n:óýSX<ÂLÛn[[—ãZ½—ß)Â«×._	#‘Ö¨WóÍ)#¦A²}]ïÚ‡g>|X{î÷?Õû¢ˆTöÿ±|ÿƒFß´‡cØãi˜l;Ýá?£6®ýZûÐqMöý±h‡+YƒÕ¢²fÀfû#àX_’Úˆ8àßj"S:H¹¦lûÓ°Z:äûb0x!£!õ·í¿íøb6=_.R…V*¯ê¸04T˜Ÿ$ e Ö€³éì&ÙÙá©‰ÙAÎxÍh¥2»t~û>kþøë?@w}þ;0ÅVj‡-½GÕkR,yë·@D µ8y O‘#ÞëK pS­´æ'µ¨×B$L!“[­°–Ö?Þ”~Ž—öìŸê#$í…ÕÊŒ u`CZ³êjó_5‡«‰)‘š| ÝØ³êÚÿ´ºaÿü_UäÕ’÷`µïÿûÿôúŸþô§×_çð’6ÑÚßýî·Îžýæ…‡_¼ì {§Q—©`p˜¨ñ&…ò3¦€›	—Æiw™G¢)ÏÓªUrà”‘€êÌ•š#DkŽ„à¡wÔÕfÍc‹°Æ–¨Y3\ÛÉbÄðë“9÷'1M†íh-¦c:ªùè›P-Ájõ`ÍQ>àZ2RÛv]±ÃƒðãvÈF1`CXkD#q­ö"À»hÍP†Ø'ò¼³MÊü9«ÜB\²ØÛÍ.dá™çaµ «w‘¤mÿGçþç#'¨AóZ8êgìã'HÐMàd@%;ñà>n9¶Ö$ÃµHn`eTžf÷¿qAêšÄ³è7¢Ð-RåH¡”h'>d¶/Ï¥ kùPÛ&†ËïnÝuì¨²x¢d}XÓ—›¯Ð7Y®¦,Ä,¿µe-•Õ,†PÕÚ[±ÒØŽ£ª=Áºb›{¿³Ú‹b5So]²$ÈfÂÈ"#ÐpöJ—ˆªe¿wSË¡¬9š¹bñ,Hk:aÓkÄµh2¢ðC-½ù$®óS#ž1Öübµ*ÌõpÊAJšÙö÷îêím#’nØM»$³Ý|ô¬¦ˆYŒÖ"ø>ûR¥²v©<>1·¶V&ù±wX6#Ò"¡Ý+J›Ç'[ÂZß'}l…©ÍqÍsé&’ MRóÞâF¹¼6³¦k!’m«¤"dA¡h-Ø!R9ãÒš#ÌÎÊZ<»v^¯†ø`¬w“öúzYb!©¹í	RsmítÂaDTá¾ý:Öúö“iÊÚ‡QY3šuTó=lŸŒÜþ1àSÆú[Üýüu{ 1ç¬ú	NþÀ”‡-±R×õ÷ðB‘Ö¢¶æÊÚã­}Tse­Ö¼eÍP-Ö¬1`	¬e3ªUsQ­o0ÝœÉHDO÷m¥”Ìú9xôt‘
\*Æ‡Ë=½=mn;~¼wq±<ÔµJ[ìÕÕ¹øÏ&J™¡uÇ¶Hëe83UÈ6±21XÓz¡0·ôÎ…ovº¿HÖ"®	ÖÔào­¦–k¸$9¤ÞîºZRZÜyMG"ÕH¬¶µD-[\‰úFßÝÖ|½±™$…5úÉ§ù¤ŸØS}èjÙéÊy‡µÐg-þ{åüm~t/…ØúPÚ÷ ÕXïÉ[ÖèiimlláùgLWãŸÿŸáïð9…¬æ/ ¦ý“`íõ×÷úï~÷;ˆíOÒØàµï~/ÿ³§Î¾}î×FZ
Þ#ñÖíÞDM
K"ó¸ÝkÑà3¸úÒ·BsÕ^Ú\ƒÍê¸$<ã&Â4HŽÀkn|¨¾Ø¼?ÎjŠDÉZaÒN°F\;¥Õ×Õ>®Zm»HSÖbäŽö"±ËZø ²šéjuºbG]m»ª5 ¸–ÝÂZ#Ñˆk²yD9yprBá¬¦¡¨Ï/ø• ¢º5ÀdÑdµX°–tqX{ï<2š7·~õkƒ× 5}šµ´ä]d#±Ql"ÚaF@4„5v°MŽ#ÏÞM¯l±6#T<hJW<Ô@[ÙlQ›ó%b4î÷æÙVË+ÖÆ-÷Ûç¯üÌ"7ˆÙœbÍØ€Yg·¥A&C¦b¾ì–š5•¬‰Õ„i©¡®Þ‘\&“Ê åÑa‡Ñ&þÀšÓÚ}ko½uîeW‚,c[àŠ©œFJŠ&ƒ&wˆt8# 5E€3ñˆ_m ³DV‹°¦ÕaÅLD˜Äu¶
kìa5ä@†º43ó];ÔÑË°9„dÏ!"QÕ<na±\CÊk¯¾újeíÕJa|éÊÔÄüØXXÃr*Hj^§¢±¤5MTŒ­m(Þ—A‹Ãšá­w·ÞunÇ²aÊZ²lÍ»bÇ¢5k³fqÕÙ9É„5D"Çµú˜Æ1îáüsZ’ÐüF¶ÈhIlK
nuÏv¦¶Ä+Zœ1XóšµË†jlAXó9;ËÑ`VåÂj¢5Ik¾yRüw42Œ%?Æ)cý= ÕU¦¦WÓlEÎîÒ#jr;oáÃÿ—mÉƒ<óxPÖT³¼ûeÝïÊÚbtƒ¬æ–šu[3`†¸6Òp¤HFsÚÈIÿMIoO½™ìÆf­—ä™Í@k·Ýv¼+Ó{¨keulaq¡k…†¥\æPoÏââ4´f¡nèSÆÅMíÿ²w¾±q×™ú±Øý²ØbA‚ˆ…ŒF´)míLgLÓ´ãŽHCy<%ÁŠRCXÎn 8+Õ^;V§YÒF»M*
1)›
æ—ÔÚ,ÑxálìÆ¤Rg…ÊEìÚHŠJ›Å*+7ñ‡û{Î™W/çî°¢cw‹æÜ;ï}ï{ïPÒµ)ê7Ï9Ïéí}¼·:5·°P-=;7süør¬Õ‚ÉîŸ?÷ÎÏÏÖÊY¶ý¿ó°`Ì„c¿ƒ¿z27BÕkLÝàß2ðÈƒD9jÐe-ìñ•ôñ÷HâZ`µ°1­ÖhO“é ïc{>‡@_êÕ$7¸ì°¶:aÍQMaçm;võÞI÷â>î ¯ö¿|ÖVûŸO?=9øü·0í'	òÀ%ý¬4Ç~C5Åw¾óÚzmmý•×k®‰×<RN#§>{?áÌÆ‰£×ÃÀ˜¼÷y¼·œê±[®#ÔD5(wèò#¬y2¤‡»CZë5AÎ.<Ä†¾‰ª›üúíIXÚšÛ?`ÍZxÓ–F’ö"ÑÒáRÀHíÿN‚Œ¬¶I—µˆkI7HÑZ²ÏçIX“žæÑ¬XkF3š±e{š[ö÷÷bÙïÑO`KnýfÂ¶y0ŸËÀ©lpìIIaíêûW¿qu¦Ž‚Wxë _¾˜ Ìäµ¥xTDE²€4‡3–Ilœó“ïØÝ°—¦c¼ÌY+Ã®¢	ÖvéÊvO|´¯`,xÖ,’°fG‡µCK‹Õxi$"/xÉÚ²(myþ®HhaàE¨N-‹··åCnÖ&sí©ÁA’Ž¦`7ùAbgÒö¬&XñÀ¬YÔPíòË§ÏÞW„FÎKvP7gb”ÈäLYkQDÌ'þ&MSÞhÍ=j·×aÝÉ+ŒÑòQ¯°Îª™X-n
jµ)k¬28ÓÉÓ ­m'°F§55ÅîêÔC÷ˆ#ˆÏž×izbŸ}ùdaêòÄ8ŽtÝV´†™?€¦kì%ùABiküÓc‡qºcg[³H5ÄRlÜ½d|¸éq8¬Þ€j—Ìaƒ‘P³æñ ™AF‡‰J–Ð§pèù˜Ñ(—q“Ç0óiØâž¸à'¾®­nOþ*6$"Ái±dÎiÐZTÖÜ¹_ºšãZ]ä\Ö`5ÑZÀÙ?¹| ©E\cØ'¾¢EgÎnãËÇ ¶ùJ¼oñW£3cDÃ˜Y-dAJV[Á’˜s;Hâù ­TÓî#'Û–F~³×Ä5õ\)gì³”÷L†oñr9>¼¡¹cWº¥u0—Ïæ
C£ÜÐ=ñàç»²­´Ó˜èêšØÝ5U(QhÛÅ·æä(R[¥Š°¦(Tæ¬R­Z•¶6>71[íÍgÕ…UOT$•µŸŸ?ÿ|¦ª5aØƒ&\Ë‘U?a¢NR[³Ò)šõû"˜þ=•µ¸±Çà$*k“ekÌŸ#Ó¿½ÝŠ™sÅQ² ûúÊ¹\&·©)VÓÕ_Ý,¶eèÌôóN²:kÇþuÿH©ä°ö4ºšÕ«=ßÝ3±ûóèjÀ9Ø@Îjä>®ƒj×oFT××¾ûœ‡2ÁØ#žÐ(÷G3á¯Õ³©RÍº#Ÿ™…!eÍ£Ö|÷pÂ‘u]ÖW©…}¥ýûdÜ[ÖÀÛõ€65ƒŒ±9ªE\3Ál‹Äæwn•Ó„i‘Ô4„ˆ¨æÉ›[°©g5‚!²ZÄ´z\Û˜§1`µkMa­ÍhÆ–³ ‡{ûäÿØ×WÒPƒµadµÞ>¢_²Úö]Ø÷+ïŒé©É ¬Áj…5*ÖÞ:	Ÿõ«È‹6Ø¸ŽsÒ×gÕeHlÎR ˜‡±…jp›!–#ì†¬½áênë¸Q·pÏu4àãÝVõFøª¢¾-6©—Á!²ß¯¤?¶Úzø±Õ)k¼X‰´†uÿòò]@Ù=˜A&~Íp	0£4Š-ÕaÎ“À“TK.kÖ¹Ä5.ýB­}ÇG“5C5mÄ)
¨.¿üòògÄ[»Ì±?%ÌÊÙ%OêÓ’ñ˜ˆÃš©jÑœ^k
M<ì,Y£¦•(¡±Ë>Äðlã]5çG‚Ë6ç¢0g5kiÞŸ–d‘îîìd²sçÞÎ®Ý]Øº«‹êŠ½Øy&©¬ù£—ä…ùs'{Ÿ<;S­N<H6ähÁëö«r‚Ö,`4`­·„dvH’æYêNË^$x‰ÄÆqþÜxFz¶¡)¶¡¯X²æÂZôƒ”ÁH}$Ô=F¾ò±q-
bÉ=Áru Ö Ô.úY#,K.„[#U=Ák?Æ_¤®dí“Ö‚y¿">³KôR?v—Ö×¢²VœÈâ'¶ñô£GÔâüÅ¾eE0³Í×ã(5ÎÇ wL8	GF_%8­qg4ù€4È¯ÔüEDk^³æ¨6-ið¢56G5gà™¶ÌÁoÞÙ[V"äl!÷”í3R×ý;ž¿$Â7{w×Þ¶Öm{»ù‹‰ÔÈÑ‘r®g÷D¬ÖÝƒÆÖ5=;7”›ÂEuâÁ‰tf „?ŸuÌÎbÂZ™¬¢T³BAÛ…,L([..\ž¿\0VK”žî~ç<¸Fê£`ÍD2˜Ã£ª	ÈT´ÿ kÐ›{ÒÌ{|a¹¡Åü´$­Edã#ÙeMÓºŠ5¥Ž(ÚiR7@»ñþQµÒó$V,7•hFhX»­Üw'Mhôù#hJãøö?Kµq÷|þy
Ööv]ü£ßú¢Xí%XÍëŒÕ®_'	Ò8í½‘Øà5Ç5Ú®ÑÁú<ìyŽ²ñ‡²$©`œKš´&×ø;Í=`výGë¥àOÙŒú5EhµêÕLôtsÝqïûåÂyÄ[Àwl.¬	ƒ¨ùØ0~yamëæ"ŽkÎk‰.k¡ÅZ¬X‹ÊÑPXkì/XÍwE£^k;ªyø©šÂZ3šÑŒ-Ù‹ìAVCZC[ë%Ð¼„kÿv{‘adµ1^‚5rCvÁ]˜ŒÐÜéùÙÜtBXÃ2£Þ]äý¯¾uñÅ¼åRŽ©m5I!ê×Ûß.añÖs‹<"­L¬&’S‰›ƒ˜l•‰ŒÆ½Æk ˜V†¹Ä„™£Üü™Áä.[°7€n¬lšgX“ÈÇDUk‹JäñˆÊ¼°Zg028Ýó¸,áIKÙlF„F³5r!;ÚSŒƒÑ…j“iä5aç&­Õ)k¿õƒ¬½”µWNSµöê=0†8Œº* ´ðGê×,+²dÆoÂì%8	áoò¹`%Üè%®ÙÎ\Q° ¥)’	áÜ‘-XVÆƒEZt†®Ö®íí”°F­ž:­vçm‹ŒGTK¶YÖzrg/Ž”*ÐÙìt±À¿˜1®¬¡©¦¦ªÆlÐÚãÕJ[Nš'à[B´"¿l[–cl·¤ÜG;wŒÛB¬Æn¥µ/Õ÷Y“Hd^€Gbõ‘"BUxiKî
Ÿ&Vâ+Þ#ùE4$nOlÑ6ÁºFÂ[MVI¢	¡š‰kžŠÖ„¸ž=*À…Õnªk±t-¾³ÙØàF‘+<­2¹æ{ðÂ'ñ$qíÖfrî_a{–<È9k=±§ŸŽ9„=ZÌ IƒÓÔ.‚þ4<o­ee7D´z¨¢µ5Ý²ÝÓ•æ;<[.Ð€­˜ÞÆÇ)ƒÅŠÚ®MQ´6¨DÉV)p¬Dª YaöùÙ*†’ã%zÐ#fóÞÁÇ«—/TFr—ÕûÂ…«ÖbdÂÚ;ï<'z^È^„—«7µq.IÇìèƒ¢fUU‚Z¯‘†‡ƒ?æ@Ãí·
O„Ö@Z«sìs6N£°6ÀsËoWäs™¼:ÌAoùŠz€Ï'`-šM,nËÐf/.l‹{e."YíÙñgMU‡µo=xtã_¾Ä	µÂþµHêÓDek¯­¯¯]¿ñúu±Ú{Ø¨_×Ìò¯yFkV…ÆŒ',Ò
VŽ‚50L>#Â4¯þ£”n×`_Àð*3ŽcI§d<bèÂ½I×äVvX&ö{ä¯ïÛ÷éú’µÈj››A*’f[ã4ÅÖa-dbÖ¡š¬YÀ—¹‹l.¬9ªée”ÆÐÀa$˜AÆ<È²IPó]Á¤)¬5£ÍØjüÊ¯Afâ/2Ü¬™šfÚÚ1‹>í7å^¼½#—2ÏÃ.þåisI
kŸ«Ö®\¹ø$¾¤?ö÷›ýGû Ø××ß¾=ä)Z÷4pKspùØ‚ë€5v‘ëªh“y~#_ÆøÍN§jn£ŽØöeÁ/&Í{RKD?7Ô`-xB¶oS;µ@kÜ ¡5ÓÖî²”ÇÏ,%Ý A3Q™¦ra1“ÆZ:›êéF\Óâ¤’!³Þh­QÉ…5/[ãñýàfù’×¬ýÝ©…ôé¿{ûOßu[xçè¥‘Ý„¢¬ìæ[7˜=êÀi@2GŒ€q~oõSE«Â[9râú“"\v>‹Ô¦“hå¿Í«ÕBÔçK‚h=LÓŒ mió$ééê4X[¼m‡O¤=4¹‹Ïþr®pv¡P ù‘¡jížV¼<M¯bÏTA´V¢5p!×šy<øÖ•ŠÝƒöÇ¢îDc3…—®…ÄH^‰¦Ø†j—B"$ÚšãZ0ï·¨™e@k¶$¯jì×Ø˜ üXY	T‹QG€1â»ý˜84Ø’"žÑ]$–¬aÖ(BD‹çµˆk(kÂµP·¦DÈ°kÕðr¸‰<ÖØ´‡cXûØäæDöIGøÍ;«x$¬”µ`I„š5"š÷»²f}ÖJ½ßÜÃ€ªŒó©lû½]GN¼¶´dß¿–ù8	w4§Ö„­0’/’-™ÏTŠô\ëžšÙÒ=˜ÿlÝr²ç_é¥ÛÓOWà4ij|@2
Áª'gçVjnVWÇ4È]Ï}ÖL ¬™÷ ”™Z k>c”B¤[œÖ<DšÚCPÆíö¯]ÿG²7[Û¼v-¬ÔµÆflÈm”µýÿ>Õæ½”¹#OÏù±v|ZF^¤6o~5kgÂ@àO…¶¶­éóAl³ÆGÆÊÖ_­Z}Z®&s‘?úïÜÌßk'ÐÕ«}XûÎÚµk×Þ¸±¶öî[__¿¶¶nÄÆÒ!…kW¯^=lkFW<<Ž °æzGF®ØÀ35ÏÇçdëšÙ}2Q<¢/`wYó5¡*a«Žn? †	ûÜ¸ßaíÓ¯mpƒld¹IOìzÒú˜õjþµm±#vÖœ×¶dÉ¦!öìk$¬ÕÃ4?$…µ8¯O$šÂZ3šÑŒ-Ç?Ý¬)Ž˜ô5Z…~Ø„)kÇ°ëO©Õ*Ryh6Ö«‰ÕÛö¿uòßô“4YîwK™”²+éï>^YeÚ¹ˆ€iGu8c¿=Ê„ifnÕ7ÁÔÜ#…b&®±ëÒNì—¸b½¯5s|dºyÈ8Òa­UŸ'•5&†pQYÃ¾¹¥]±`-"[&‡î¥äGí<ªŒ)kÙllûµ4˜&¤´iµmñÌâ÷ígPÅìvéÒ¥/üï—>w‚Ž:Ê‚|ùÕS””_nå;e˜)Z2$:¹A†·ÀÎa	Ybx.º>rº¡íu„:YnÔ×¡1g€V¼Fè¢Ò!uWˆi7³kZI“4™îÖÈ©Äa¤ó¨’ w¶q¨óIôÄ&.T¬bM¸6®ÞO¥^*h–ÆÍLÜºWŠãôYcñ |ÊGÊ%Xm¼:™õ?UVÿ5Z	G4ý®|î6ÀÚé$«‰Ô‚¸Ì Ek7ó <ˆ[ÔœE>J
jÿQ¢ñ¯¡.)Ø%Q’5² ëYÍkÖÂ&ÎàR°e‰j´f°­§Ý*~wß‚×h“7É&Ü¬ä“Œ[À]üÕ#«¹°öûÞeÍ„5eA:«±»s?%kÿE#QY3‡`-ˆjXA–e£Sb$±7£R«7@m­•°µ*8+”!®Âè]¥ò„¨uK_Kkd>4™•ëcuvj®0`Ÿô”V†²|ë´gÎ®.”NB/Ýœ_’Ÿsužø³žâ­ç¸o?Ô©–YÂž`ÎØÀ”á‹Lá
óšßOšÞ¦a(ö)yŒã¦©-lIŸ‘(¨iOš‹çG2yXÍbG{;HŒûÇzKT|oáòq"ÚA&Ük1ƒ\Ü™E‹Ó¨ñGJ#c#ê¯672'Ï~ï°†kÿo=ué?PN¼­Ÿ”Îj7^Y¿~ýÚÚµ÷Ön¼·~13y…”È5K†¼~ÁqíÄûW¿úÐÊèWê`*’ë,Dk Âö,y´µö€ìüîù(“‘{Ee’ÑÝ2Eg!øÂôX{X­¹q?a0S×f-!­mî/’ -Ã°­uWcÿHkŽ‹‘§Eg!kI{µFÎý¼b€^Â®a3ÈX±ö+ŸjF3šÑŒ­Ø‹	Ñ[¦ÁVŽjìê²V´Z©îç9\û§¦nÊju¶ýõV3ŠŒu¤TÇÛÒŒõ!¬u¸²æ!ÃÝRÂµÓ#4W¬;«bVÏ&Ä“Û££#Á}ž9)éN˜×Ÿ`´ÍmlGÿ.¿·å~ ?–tƒLöY›¿çžïÉ²(K†VR‚5›·d1†Ì¥2©–nlEä	©4Èôäd:Ë…t÷Î3÷ïÔ¯b°Æ/ætré±Çžxâ÷øÕN½}êÔÛ§_>õwo_Žr˜c†9¼µ	Ö˜â7¢c ‹lÈâ®ø%›GPãå¢YÃ­V_Š5j¡ÁšÂ¦ºÍï#ìJ:m°w²Îa¯Ž·Q¸¶3Ý­qçÞN7ƒ\=ºøÌgîÂš6}(Z›_¨T+·hú$OqÀ¬T]­)Ìg„
5ÎÈãRH®°òøøÊÐd:< µçö<Ï%£\†PÈ—¢tm£²yN¯aMv8Œ¯y§5ø·q‡ãZt¢.•Üâ$¼Â,.üc‚[dÊ0‘ÕB½´XZó€ÐB¸
¥µ9¯ZÓf¬ÆŽ¶­\Û/>hˆi>K.kkˆdqsnc`×—ƒ6—¸%®3úøµäK|EöÈjÞdM´†®¦.kdAš¿HTÖ¦MWóMì¸&eí E¯B–%¢õÌè{1—mË)Òú3fˆ|>Oµš¾K‹Cj]­'''«»ÅjS“Hk4ÆÎMké¡Bëà,¿ƒÙ®b¡,úË,®³dSRzáø¹ù“óË÷\˜¼ÐHY;ÐùsC
èhPÚ  D06¥…)kµü<µÆ6iÈÔî5ªØ/iAL3`àdsm!Y¶ü“vÕÂZ&m¡ªy$	ÿcüøÃy«ÿ7wòG¬‘õy ¡¬y*À™Ü@ylAdu|ÀmûÕåÀºa#¬ayè¾§(P~é‰ãç¾vê¿~õÿì}5¿~å•õ¯¿{uýýw_{ïÝ'/^YÐ>üð½wtã=B¸æâšÚ®ý¯çDkz²¡¶¯ÀLlê,‘QÀÆšH@V'6{Ð,pzôFoé6óQóqnä+_{è^‚¼c‚´µ}kÉžØ	eM¨¶u3H[€5ÉHôWÛTW‹áõj[Ö¢²–0I(k‘×’na«k´)-ÑgíW?ÕŒf4£[°‘°¦Í)-†`­¬<­IZ£¿ZÆ"Ÿ™˜ÌÇ‚µÆÂÚû_ýêŸ>)ÐË—I­ìWVã.¤µþ=Ã}íhZÖŒÖ˜) 0FuQãv^ž	Øaëo7AlR×ÄvÌ\_“fÀl6È= Ûb„SÊšÙ‹$² ‰ÃŸiYÆ²%• 4g4A/C6rî&ÓæÛŸíFPcÒ’ÅºŸNlT¯ño£ÝîïäW1eífÖc_|‚_\ømƒµ.¿}já.o–ÆÊ«ÖÖ˜Y?l‡5ðƒ‹ÇtªÏÔ™F{È$«aÅŽkÐ<Ü^„H
k`‹k>ÓZÔ`oMƒgJìÞk+J|ììÙFÅïîÄr÷}÷²Ž	÷:“l‹}àÒ¥ððWªã'Oâ­öda¥Ò3=;[•—H©RY±	^ê-;YBæ†2Ùb¡÷q.eÐR’%þ-É 2Èi„Íl_m˜ÉFd}ÕÚê‹½Á.N±<Hi-<>iDCqúÿgDTC%ƒ½PÌÕ¢²¦Ý‹ÖBÁÕ†®ØU—Ö\„Ô<Ò­F\\K¤D†…õ"UØ…nI.®4ÀºÄ9[rÓä]·Üâ”ˆ¬æk_qe-4YgÝ·¿¦¬ýetƒ²¥+k4XSîzŸ`­$Xè¬-éÿòŽàâ
©eFùÛ˜ï‚½i
Ú†fg+•ÊätÏ¶®Ù¹ñ
- ÓsŠ©]©ÎBmÓÓ`%¢]•Ò èsU¹øCkmmÝ•j±ëòñÕgŽ/>~aÁÿòL¸Avþâ„55þ`³Â ßHÌ“ÆÆVK}ô)#ø -h<ìGºð¸Cnû>š%¤ï„ƒ{ˆóÇÚó£e¹A*xd¹ÑüèH¿µ†+ZÉÚêáC«É’5ÂÚhoÞê±Ë»Æž%cÔ¬U·5ý¨üüâ3O‘@ñÒçÔµóër•FØß mý7ÖÖ¿ýýïN½þÃ×.îzëú‡kkk¯çg~öÞ5hÍqmÍüA™ššX‰£– —ÇÉY²#ö|Í#’5¥AbÂiî‚=ãd½GÌL¸Ç5¦Ð¤óž;ô8k`ªASì «ñª÷‚Ô¸y“µ’ÙÖ6À‹ÌEI'È­ZA²ERKØöG\ó=
k•…/v?ÅéôŸ}ªÍhF3¶ÒdJó¶ZµªùÊg 5•YïÈ“ÿHä28‹L§ëuµ ¬Å,È÷¯ž“Ï^bZï°‹Dþ±þ;ï¼sÏ˜ÃšpMI€˜¯ÖÄ]Ì%«d5¯Ló7¸çÖüÜN˜w?·²ªs£µ­3[{j	ó~µÅÞ ­HZ÷{Ü³|î08ÖÞ :|Ä™_l(hƒFkPšû;¸¢ÖØ‚µm÷hkk¡@Ž$È/â¥·_â9šäòÒËô[0\b“2+XcÆúRÎVS±HÍ¸7£®_Ú†&az“Ì˜(mÉÃ‹Ól)b[‚êâNÒìY7d‡w?€Ftj¾³óÐ!Í;(x	e§!Zó‡??sráÅ^`mh¥ØÊV¥œFkU&¦«ÉLDFŠêx±XÅ·Ÿ«Å4%:€­ýAoëÞfâŸÚ™'A¬Õ×ÊÚ¥`);È	YGkèD€GH†L‚Y«>q`òƒ£SÜÃiÜ|ˆû'ÈjI	eí)kÕboºXµà¹"¤5XMâš¶Ø’ÎàÌ_¾%¢ÁJ¤7Æx).¹ù¯m®Ò…áãmõ¨«¹¤t5o²fÂšÛ‹˜¿Èìó”5vašjŠ=PN¥úpá;„dÇòÀ@Æ[2¦üÃ‚sòT§å3KÀÚ6T·âôT±’Ä{§gªZÀ15K5 £29T¯»|pz”ªÐÙéYòaµB¥XY‘À6Ä÷ÔÔT×äÂñù'OW4¨Y; eX;ÿœ`M4}™"ä¸fET0…-˜)†ñœ{BÜJàhx»â–YÉNÙÑ’°!NÔ’Ukûïä‡A®uë~<µ&sœì:FåZ&Û½¬?ìòáÃuÖýgÂ§¤m;ÛÚÝÝ70Æ£/W½½1W¤Ï?+\<óÔS˜Vxé¬öõ?üÃ?{åýo|ç:¯Ý¸òý/=Ÿ{óGo¾83seýõ·®\ÿð½ó3?Œ´¦€Öþê5MPæÝÓxR6wë2MUÒ¦"5´6yp:Š1xx/;n³“ßŒ‘¹E}íh²Æ á±An<ü k‘ÕbÍ{²vKëþ­³ÚÖmû#®…-©«1›³š¢.²®b-!­5ÌƒÔ+™Éamì³ÆìÞtiF3š±U{Â„5
ÖŽ^CV_QP.ZãX.›Ë¨|}J˜X­±°¬]}³ÌO¾–ÖÔö~ÙAÂPcDÿðøS-&Ð™¬1·´ÆcÌE]æùå/³DX¦$Üf†üRã¤Ç	Ý´„^§ØE‰š:fÞìç,›<M¶Äj·­^’´¦¶ØQZÓ„•ÕÐë7°ÃËç0;wOGRXÓö“Úùàd{»êÒd
95ØØ¥ÒøAÀZNÇê>U÷ÔýOLJ‚Û¬bí‰Ï½¦k8AþÅ|KÛ‚ÁšÛŠ¨+Ãg½år¦­%c¬AóÛ3£µÀl²Ð ´fáÇHdKñ\³hãïÀå3gÅ¬Ù k>µÐåp[4!±i:ÍÎlï^µNB€fâÛîgvëüÐ3ÎÈ÷'”5þð±a›?û¢*Ôø‡¤Ì +nÔo°¶‚ F$XaÆ%\ëÌÐ¿ÐžÄ¤Üÿt¨k:AŒmèx›+k [XÍFPÖ„ ,F$­9®áo(üøá°U,¹i"¢5¼3yW¼ó£„S¯(«iÂ‘ôáa+Ãh0"¾½ÖÖ­¹´»dk°™‡¯n9~‘á6¿EW{<Æ¡Ámñ†x’¿¨ñETcªÅkBµ%kÁ¹ŸŠµ§±Ò]±-Ä¾Ú7ŸBV/ï¬©ñJ¥e#>X[j-SÈêßµÊ£Ô°å²œkÏîÜÝUá³ŸmiÚ‹†*ŒLaÑ?Rª€=z*Ó³HÙ#ssbµq:bWç¦Q²‰lº›Ž‰SŽÏÏàº¡h˜¹ûç°ƒŒÈ”-P½`=òÐ~œ•É‚5gvÓ~…œ/t”.T¯¥…âµF¨–,Z‹›1"¯%Ó oÿyJƒÔòÂ5ýÉääãÏ<»ô½¥«ÇÏ‘™¬…¦Ø;QXÌ<z÷¥q¹±Xïý7,MkßúÒÑEîæ‡Êñ§ÄjB]÷+tÂ–h¶~å…¿ù+»výç×Þ,žÍ•Ç~v]V#o¾»ö´¶¯½wÍiíÆyêÑ¹pöHÍWÄ\7ŸpNY’ë®²{Â£…«›5óÞ@knRÂýn=‚'¼w/<ÁÃÛg	‘Ÿn ku±okõ°Æ¾U]í£V¬EP‹ºš³š•«5ê°–ÖœÖ"®%…5¶HjÔŽeQY‹Œæf6øYSXkF3š±Å,H(í˜EÖúÌ¶ÿÑ=½Ãøí©	6¤¦zÈ‹ÃÀÀÈàÄ—&Õ6°ZBX£bí"¢–J5K¥`"}fÉ!?°ç?ö©Ü¢åµœD†ÕKm˜É.ÈLä†lfù‘:ã.	iæBèC°NÓ¸Ãb;p†¿^vÂÈËû¨:Ý¬†ÈÕ¥¶˜ÊC¸ÐuŠ ªÃ1ßÑ¾¼<ÿò¹ù¥öF!g^9`ÛÑ’îÆý1GìÉIsï7H.òj9*w`z5h¿È)fx3H@ík§N¼zúÔå–ôÂRè•¦oa®YVd–²9Ã«,ÎZ®=väC@kzo 1¿%F’ÕüÌ$2nöˆ=±e²m[à2ŽÁF$jpŽyè"éYbeWçÞ®Î®NÅNd6ú®uîÜiôÖ¹óÈ5!­¹²am¡ )Ò÷© ³ÆWÆ9¬ˆÕDj¥ƒ{Ù 4`íñJe¤m¼0U/ÈoÁ`-õ>–=ª£Ù¦„.tk§cÍZÔÖ@¶ÀV×j-ÒZ°qŒùHÄ–$+Þïc8†¥zBKñŽ¸¤H,ÅWò}ñ×jÀx8Ò/Åøqè±V×dÍ-þ¼¢Çdç#lÒ"]\‹¼&\6ÍmàM¹’qcÿe"hpÉÅ8mÌ}n‹ØwkrŒªW“°°®8­É·_ñttîg#œÔjœfÛÉE¹¯>k½}Ä [.kÍó¿zíû5›É‘—ºVÈÝ§«˜kiëiÃ‡¤8ÙÝƒ\=G[¡2Ô"º¥42X'û‚ã«*dDö«"[1Ý³ ¹œ­–^¬SÖˆÊÚùÏžçüÃ<BÊ#ÿþ‡¿Ô­M8$Höq¥-PÁ„!œ#±Q²æ”†²v«È˜yð¯¤°Û­îíÍðCŠ—,2Á5`»µcªyxõÜ9%A¦¯FŸ¡¬-òÊ?ÚÇßM½ö>û¬Tµ¹ÊÐP±8©$ÈÝ‹‹bµÇ¨}ƒÕ(í®™ö¯k7þtúûßŸ~af,ÿæú‹z;^¿~ãÝw_{÷Í½þÆµõ+k°Úµ]\ûÀ„Jñ–£šŠÑ°=$2{@†÷><Ì)ƒ–$®ñßÂAÍÆÐ®¸#x/´ÇÌ@p“ÙˆL^ö#­k	XÛ¼Ïû-»¬	Á¶Ìjh¯uKYÍ‡.ªyüýkQY«Kƒ¼eÅZÌƒŒ¬fa=hC¨Ý`í_|ªÍhF3¶"¬ý“ÔÖpéÇ[_´öèž¾¾òXÿØ ¢ÙŒÈ9p<RF%+NˆÔ´Ÿ‡ÕÂš—¬]½Ø¡fÐcÇvô÷3‘ ¥°¶‡ÀÙC¥g¿ñåG\º9$˜&H^\r,ƒã<AÒû«¹´¦Isž*¹ËY¡ŽÃÎTÂvKXëØ¶¼|x'
ZÇ~¬Å4ÈãXAÞ…´f°–Ä43ƒƒ9ÏÂed;Z¢°‘ÿ˜jQ5'5ÐÀ¬ ÑF'â]¬ûŸ8þ95KEY{õÂé·O·Üu6 •êNÎòc¨›Ú2T  «Ájjæ™çDþ7V¦qõJ3<ï1„¡™r|ôÊYl¼æ|.³ERó$JÀ¬ËÈl'%kúR¾¸›ÕCg6²Ú™DŸ5gµ™ÒŠÈOüEò%AÊ`¤P‡ÕÛ¹chm¨°BúV&ãŠã °jÕÌ¸Ÿ™”¶Tsºc7PÖ.yWì(¬±Eóþèùc¯[«5\süà¥ƒ ÍŽ¾–¡ÀHJ{8ÚZ2Xi~ûV#B ¶ç7¿îCì°ÆvÕ,&ª})­)ê{­Em-æB²yéš8MS„ÁYØÙþœ…¯m°þÇàHèe·`¼©­]0]mY-šAªdqÍÌ ÃFxÁšŽ¿›ÃùW‘>³ƒDZÛÓ‡²–ËÕ¾Ãí›6äåÁút‡õ6µ;ìžÄ!VëVûÃbe²8T™[©L¥Û2™A.¦‡Ô'¬§‹Ñêh¾X›í™„Õ ¸ÇÇ»äŒ¸P^æk‘ÕØ=ºh‰H©‘\f¶!ôWãÌ\´´»@j2Ùˆn ƒ{‹<À?rÛÂ°yµ‹ŒúöJ«—ÖöýUŽÇ–Ê“ýXË„ÌñƒÌ”¢m¿k>ŠˆÑÒXÝeµÎ£¹¾;i°VÖ`5’ çF+ÅbC.}¬ÉÍü¥&VûÚŸÔšaË³w‘™é+ß~aýÝ™ÜÙŸ­_ùÑÌLæõµko¼öÊ[Åü‹k˜Dþl=æBþm .¹µ ¢¾^Ñ@fvŒÈbà–Ãö0èfžýfNâaV%ZRðÕÈ“ôF 
½Ÿà©×Ì?ÝÖLWKJkûër yX#6ã´Æ¼\ôÈ$­½ c¤+¶	/Hvb3‡v¶ hÖÀ6`í^^.³5mû›ÑŒflMXûo±Fmc}ì=ø€ÖOŽí‚Õ`5¥ƒÐvf€4È	çµÍ…5c5LöRêsÆ¤#0M¹¿ØÓ¿í7Èg„µÄ`GäÕÏ‰9âRÚ±(³ÁdB2»S×XfÝ$¹ ¬éjPÔBÁ•ÑH‹Ô…F‘:|!x÷×Çê3Hr`–ÚSóç’¬FüÄ¹É©©¬A›ðlA‘Å’“lZÉ©\,èÄ­þ©gL[{æ¾gký=«}ñÊ°öÛ'N½²vârjé.2]ù¡Ø=Cê€M+ùr‹eAfAfÆ\àq-x[`0EÐÚüØÀ21áZÈttŽŠxÔ‹ë#¸B:Æ1B3sé’¢òn=ZÞI*äâÏ|ôóØ`ÍÓ çO¾8ƒÁÁ«tæ-‘›U‚ÅJ¹Ö‚ ‰ñ‚cÚA;-Ñ%¸0T"2…ñ©ÉÁAþØ™ÞrÍwÅƒß#)‘K-ünM`Ó£¬NâÊš˜íRÖ’ÒZÔÖžEa2öñ}ü$Éd¼PVùì8ê2¿QmITÓŸšAõjuº{@µžY+ô³THg5}ÅZ.d×¢ÀÆîC8õ—mõ°Æ2Ä‘ƒ-p`d5fO6ð+ùüî´‡jµP°öïjkÏº¿Í”MW›ÕþeM¸KÖØ5ðúÝQ¹‰`)X#ð„ÌÔ¾‰ÉlÍ©'#"+H…Xm/´†ñcº8*Ë2 ÒœwÓ»:7ÑÕ®ÌNLôÆ³ù{=m(_ Ö¦§°ûç3R!=µ°zaæÂÙyêÖzËN0«êŠÖ€5zb»Ç<(á5jµn`Øî¥ç5`ô4”^ûX«)ö‰¢²¶…dH†d$S½Ì³?ÛFaí‘lÖÒ¡µœ	k¹©ºšäÖíÖý‘Õ¢²Fè¸8˜Ý™ê=XÖ†é„­˜3amšŸ•c¬¶ê¬†äWÖ^¡	öo\[{ÿÍÑ7¿=ùÂ•×gr/üÅûW~úúúÅ‹WÖ¯¯]ùîws±„¼ñâ±Ú{k7Þñ§j¥€J1E3Ò41àŒHÌBÌ!ÄhUÖ 6£µðß¤fé= ¼=› :tYCT»—ÙV’Õ¢¤ ¨Þ_dsií—Èƒü¨k„5ÿ*2)¬mÅ·?BYco¬¬y*dØÐ"¬1°ùY3	²ÍhÆÖâW‡û7ÒÕe2¿ê#è¹Ö7LåÚŽò@™l~Ikc\íú–PÍt5cµdÅÚUìE®\„€µíÇÆ:ƒd°ÕÎÛûöõöíQ+j¡°&§~«4c<VÓÔ°ð¿[ÊYÍ‚dX'{îAgS kÑ¶_A\#“~ÞáÞH|›U­Q·–PÖjG’ ƒ²†¾sOûg^æ¸œ 5k­Æ!;ÙM‘‘œ„Ò&±VãD4Y£Á—«k™lš,#ô¤£g 4ÌE>#Y£‘/*.=ö{ÀÚoŸ#òÔé³K)”šÛJ*SÆc™È§¤™e˜Àh„5Àu'úT¤5ÓŽµjZK¤>piôðu‡5¿ Œ°Õºct-©iqÖÜY*ÓÐ³{÷Þ6)lk¤?îEcƒÜ¨ZsH#8Ä‚}	k7kÖhÀ[=)i­¤DÈ¡bhëíŸg”¯Ái¼(ÛA`›š,ô–ªØCŽ”JÝ]zd·Ž÷æ7v	_
Œ¦à`-Ùhí›Ì Ik¡j-ºŒ8~°±;¯±3OkŸ@ü8^üd	.±\M¤Æ6Wç)TÓËdµXµ!½ÙÚ³áqýêšñÚW ¶X¿&fÓõ6v±'·°ÆÄÎÂ!†ÍA¥ø¦:c´uß|ª=,Ö®Ä!Þ[wÊÅÚj¸âK
¿C$â÷ùÓº®ö¸W¬UÙæÌ_ä/mŸUälìˆí ¬ñw¤æ´–)÷fÜ2È"E7ø%>èÉ ÀXCJcW?µAdþtÏ`k÷Ä4gS•Êôƒ{»§ÓƒÙŠ„´‘–le®Ú;ŽýóÓC%iÛÕJKzª2T8‰â}!=ºZÓ›Ê#?—Ãˆ÷¿~eÇ´©9’Ï¬³öñ÷º&‹&Ü%lðà.tu®2+Hƒ5æ#«±T‹C½¿áZÜØwüÕ Z¤êïÈWrüµ¾cGG.¿=Ÿ)ðÃKü¶pyõø*[b×­é¸-ÝÙCö¨¥A–”ÇZK‚œ¶O5ï¿ÿÒ^:wNkk®«­­wâÊµ+SÓ“¹Lqú…oÿôâ‹™üŽŸ\¼ñþYÌ¼&§Ö×_¼¸.VÃlD¼ö…~†À^»&ÈÒƒf2&ía±±Á RS
ªÖ?ë°Æ‡ÞÀ³Zlæèi0žuÆÆ†=WHžexlÍ “mÖ‚®ÕˆÕ"­m=²‘$¯Ídµ@i¼¨ùàÙš ålû£°Æž¤µ}õÊZ’Ø\OSQš£škp3…Êš'A6ÝEšÑŒfl1X‹qXé”8’QsLÜÖ¯Æ3cíy²ùÕ„¦`tLCV{PºZ#a\{sæO¡5¥=îKµ¦ú†÷ð%Ç(Wë#ŒÖv‘©£aÙ\'-äûÈ~7«à—¸Œ;H”äNq;s™õËÿ1²š…fe8ìªMŒð†¬)4MFÇá©3ïßØ{‘ä¼˜‰#ááåÃ©å—— ³úÈe‘Ò2í”£cØŸC;ËJUÏÒÝ`´–ô`[º'ÍdFFÙ½‡îSù‚ÌEŽ.º°f¬ö`í±sjŠýµ§O¿ºpÏ]Ö[°fùèjhk€HËk£’ˆÜº¿mÉ¼ù3œóš©a6Ëè¬vFÄ‚«Îâ5‡7‚å„ÝHÖâJ¬v·Då-ØøcÖ¿[§]øø‹ÒöîÝ¹í(îýgÎÔW¬µ¢µ k®ž,œ}õìÌåË³…‘Ò8¸–¦™¯ŠÒÌXã~FHMqp|e²§« w‘j	µk„ÑZÂÔÈ@9!µ.WÔVSk®¬kQV‹Ö,×ÐÖ‚ÇH¤W×æ@‡´8Â}L6c`[8ÄµÄµÍ·x'=°U £FYðnØ×8ÓîÊZ|`sîéþˆk¡Cvmû€žáµqÓnC¸Âîèe¬„·¸2‹óm~‹ä·º_Å{Â$yðWœ&¯4~'á¿wÁ´ŸkÿC®ýÎj+ÒÕØ½bÍQM»û‹°7Èÿ*XÁ=$¯.kÀÝ›[Ë´ÆŽ‘’ƒ¯ùêÌ[²ÛA\K«6ZNýSƒm=Ý“ÒÔº»&¦ÕrzŽ<J™Öî)¾Ÿ
ÀÚÔ)–\eh²Æ=¹¼:¿
ªX³ïã¨¬?¬IÀ‘¢óÐíûQ}#’€ÜOŒS÷/Í• ©#¸ yÇHãaA‡ËúÇ¯+k¾ûÉæÅkQYóà˜ì¶æ Æ ×C™LGž25ý¤ËI`³™b®]‡Üà= µËÀZ½²Æàsd³CgÎ´JãÄ®Ò³Õ!¢«MvïåGå3üD¬á.òu`V{¿kïÎŒýôekÏOO•óSÓàZ6Ÿã§×OèkúÂw'‹/¬ÿôÝ÷k?|ãÚµ7Ö®ÿ-Oærú"¶¢¿øgØÔñZéí!òèuŸ-[¿lóáà¦‘,­yê#ô†&¢q;H}·îßwÇíŸ¾]nIXúÔ§AÖ:R7ŠzQm+¸æ÷~”‚µ¦ýµ‚5¶z'È kY-DDµDÍ‘µ}ûcïë}AN«Í™R°ÖL‚lF3šñ³ =í±T¬Ç¬6´Ö«Hª=Óî–Æù2Ú[fT‹Âš@#kAY»:3ð$©ùüÞÞÑ20¼çÎ~Z¶Ñ`Oß{ú 7Á˜[ò«ö19æ¤¦6‡Ç#àÚ—ÿÕ®]îÒÏÈ}j¨
ØðëwÏGnî¿Y—&ëÿÈdÒÖv…ù&þ-‡—R5X‹•­·Z‹y˜ò§’õjÀÚ A]:YŽÂ´AìEè³ÖÂ!•ÂD6þiî²Æœ”ÈžÏ?sfÑPúÚý„² ŸºtII2O|NM±O8}yáÕ³d‡ÏÎäxôÈh
õ	3–ú?ìml\×™ßƒö[·ý´[ $Ë‘ ’(è¢EI(+3;×4CÇõ˜Ò1”éÁ0²dŒÂ[UµlK1¼’Óa,/ ¬©€ÔµÀrS[pÄXoµ8ãd‘¬µÑfëÊ1¶dý­¿ÿóÌÑá\+:[ý0Ï=÷œsÏ½ÔËµ)é7ÿçüŸ„„HÖê¾ûÌù7Yw&²Hšîøi-,TÛ´×b¸öà,tŽhv_3Eðû÷zm~©3ÛÛ‡¦†ÕH_Omk×îÝ¹ÓÞwCVQôî¤|rfþÂÌÌÅ¥¶ÌãÙqÆñ]—‚Ò&öCeâ4ë¦JýÚÁÆ¶µ’ÌG&¦Ší•Ê¬É3åJ|ðn S:ƒn0ÒÌ_„C-Hk§Â¶µhà/\s^;BçÛ×.GB££‡:z§­¨+vqb¡±>ÑHh/âÜ¯ïˆv4‚¾yøS°šøô„‰j¿Œ¬FDN£Å$HcÛÙ(­ém—×^ÖÉá´VïâA­q„žÐ{~†£±€‹§ó#M~„Æ‘Z"èÿïÇoìRQÕ~¥Èý Úe%AÕÞÿ¶XM1g5±=	Ò•µøŽk#¹ÌÈ ß–+¨ÈHîI;”B´ï]íÐ<~ò’-–ª(Ñ÷ÕæJI»&}ÙöìÆÕ1ôk)ÙãåruKq×þé=£ƒï?r\S]ú’ ÏŠÕ––)k×z?¬ˆÕ¶Þu¿CDØ“&oHõâ9[5\3‡C†û	:'5Waß¯ëx¤ã6¥…ÙÝ›Ë)×?W-
òñŒzüûµ
¬%ý¯	Õˆeþ"vZ0â0rn±{t—Åø(¨6Ugµ-2‚<¬=÷8OÂjß³kØöÿà™«Ws…«¼óÖô[oU»ºH¦Ÿž­á0Rèz°k]¡:]­¾õéÌ¯?#>>ãÝ1…ü@y¾ý@$C|
¬17Gd½L{PW†eÞÑ{2*pá÷1è¤ã½[Hþ¡ÛŽ&´ë~HZ†ÖÒià£Z4qV»ƒ´‚ýN)´Õ9öG\Óá¿PZJX[IW‹NNü†ÿiem^eÔ‚??³¨¬éNˆßÿg_jE+ZÑŠÕÄ¿2O‘€k;ñØÂY­Œ—ÈàÐh½}ÚèÂÚÈJ[MÂš³ZÖö"·n]fh˜Üö»‘¹8)aMÊÚH¡Œª¶íÐ—îìîzò	s±NªÉæBGo°†|†¨Æ°C°Æœ_uÕŸ=*@SO	Í’MW#ÖGÓ‘6­-y¤Tý‹ƒfÓXÛpmÓbS#È¤*X#2ÅZ6/wþbBíl¯¸VÍ’
)30ŠíkÙŽbß/<qVs£~:>»}îðÒÒ™Ç¼¬];‰†ví•Ýy¥<‚a–¹G°ióš`M‘1úPßÎCx––’X
Q_¡9…ù½Î`šœ¡XD3'2†Xó‚œÇµa®ûúz×J`ëéÃ½ß¢gãN‡ã¸a_aóÛ <ú™ù}^¿¸ðÌÔLmJ´6žŸ0‘ý‚5ËÿÂr¿çAVŠ¬s{´:p·‘J{Ûø®jŽ÷—ãhì2c1º ¬¥Ó ×büüûc±µ¨­9±¸Û¸&d“öDq„Q|Â5ÁNÄã`Í;®ý±Hoa÷â
-LÒÏÛUðÚ
ú[ÀÉ:¥y©#Íj4¨­±°5j‘HHõTÈËž2
¹MÌfÇ‹tñ ÙÜ4áŒŒFçmÙ4c ÙÂœ“æSoÎpœ„ßÐE˜2ñ>…vñ	¿ï-^6ÁÁ@˜/‚j®«…k„H-ØöÓ\Xã€ÓžwTCWÇ)¤µg$J’\NÖÂ`Euð‘’%¶¬-¯ã±(lSD¶k’¥]¢6°V¬ký¥©1‘Än$l!#rÌ AŽ]£Õ=[’ýGf÷äákPíÕ×øCQq6(k©=kä@b1òƒÒi$ =*bPGÜ¿•H™Ž8»ka" Ñ¸Gˆèµ©qÕ„ÖÒ#®yošI£u?ã##ðX')¥jN#ÀWFk"·î…³×”Éï4¥¬Å—Th-›«±Åo”tí©)cµXíÜqxîHWû³ï}ïMw‚Ä³ÿ“ÉâB’¼uëJéõŸTÈ (årÕéZ¡@k®_W­-|úÎ¯?þÜù?ÿøçÿâ³ßÀ½R×ÄÁœ‚ÛG-äÉâTÆ¾ÂƒZ¨ÆI˜å ã«÷“ÿÈ«a¤lJÐVÅÞŠ´¬¥•5ÁP£sÿŠ•Ö–ÓÚ6íÕ¼ù±#ÈÈk&¬5gµæÊZóŠØ[SÊZÚa„¦Î	2kdFn'	ò_|©­hE+V—iž"t$<b
IÀluX™d™X¿Q­³›l`íÉa*ð¼uµ(¬V#®ÏLMN!iK“¶aÃc†‡6lÚpèË¸’¯†aAˆÍö¦¹È¦ÉkžÞh•Õ[Zg”´¶žÉ'ÖX”²Fp):‹––3ÉMž7ë‘ÿst÷‘ãÎ¡ÔÚr;H6«ÝcûÕÒÁ»I2>É×j5!Z¶?ÉhÌŠ2Éçä™0Ñ¿…ÖÞ÷Âñ£YëlßŸ~6O+:pàÂÙ¯œ]lÁÎ¾²[ÛÕrf‚Væ©LDN”NÖX§×I kz$Ó4¶EV‹V5Âš»mæ¦„å4ú²¤17ÑBdµknö¾²§g ·H}°Æ¸m§kËóŠÒn3¯y}aaáàèÌÂ»Õø·ÛBî,"¨É’žØüðÄ‘þdÂÌüÇú¦¦.ïÉFÇæŠì[Kb©‚Œ°7ð§ÖÜ\$­¬É¸?lZKIk§R´pMÀ˜ÍzQ–½:­½oËqêËÞÂ .¶÷}â£ÿL~Ñ°nÑ|älhêšE€¾þi¸‰ÑE5ç´4«	ÍÒÒk.­E÷~š^‘gB«h-´uŠß8_f¦ÙG: Ð‹j—ñ[”Ýâ*-uþ'Nï	zH,Lœû|bŸpdˆ­á2†~pß©†ªf¿Yd5SÕÜ’Sö"¾emÎqmz¶QYþ"tÏtðA,û¡¼¾ûrú3")g¢ók]_d¡#+X[ì¨Îõ÷w´óIÔV¬•Š–)oH¢4VÁM}zôH­oÏžêÄ‘ç÷3»”[<NF$êÚxiíL]X‹°÷¬½ôè×_û1MÎraDæ‘Ò&Ã{·Ã rjÆhôAc«›\Ä@š‚†Í‰-UÛØRuÖèÕt±ý;9‚“j^~òÁdDÖÖ-Î×+Ê)2*kLýrm±Z¬ñÞŽŒ}žÕÞã¯Isí¿té¬¬ýøí·ÏŸÿn¥S?¬U¯^©ÖJ	h˜+;6]š\ß®ŽÍVO^ÿàÓOf¾ÿ77Î+ò³Ï¨‹l‘ð(m—‡ª¦FôIMÓÐœÕÌÁü‘¥Àkµÿ6gÓ J5o·÷îŒÌ	vlGYãå¼41	þ"œ«2Y¬v'H»Š æ}ÔÔ¢®æ†ýÞb¤K¬¹kÔÕšgA¦7­Å¢¥÷­i©!#ÒVÁbP®å.ÒŠV´bõYHkNkôƒ°š‚e-–qí_?<4Ü­j	°Vî*LKWªq.sqXû³[ò‚¼>ƒ]ÿ$B859‚dæžûÃ¡ž:thÛSÁ&Éed^C@S>¤Õ[cX­K¨¬™þÆ`_D¹lµµ®z˜‘HÖ8u9ì·le¥è\»»}]wÖ¶¾âÿàÚëVi*k›°î¹çî¦5ÖÂ˜ g™N¬%¥%õâjmœy3ï/k{íG·¨Ã×0¯íÑÒÏõøŸ<~aqÓµ ŒÏÄÖx>cÆ’÷,2kj‚5G¹´¸Ö@gš¦éÊl"VP™EX‹•³ƒ²‹d[DíXÓKèiŠ’ÚÖè_ƒÀÔvŽW¬ueƒv„µ}Äá‡÷-<½°pv¦$÷~û5m°<â”Æœk$6|üñ‹¼|™ÇF§FG/Ãså2zfÞ2;MI3ì¥ÒoÊ=üÖÚk!’¤5“Õý ‘ÖtD—GÚÂÉ0†ƒ+ñê—ÏÖRq¡Ž¹,Ñ…æOêð‘óÆÎÃçáKbó+ºpúW–“c@ÊÈœö+çëuÐÒ¨FKA:±±üc*¤”µh4â!N±¥ŽôÄ'€.6`Î9Fã8ëB£ó™> §Óù"|å³0¦5:zÝâô¼ÇŠ/êäÊÅAßªö´PÍ÷«YdPÖˆççÀµ97y™¤7*kÏ$Æ‡6æL@[³XÏ-v¨h~¬ÉAÏÝ¯ã[¦­:Ý—U‰}Ê¯MÍAhµ~„¶ì–>>mš«TÁŒÑqiCsÓ_ýêž¯öM}ûù¹<°6:Z§=…'¦ÎœIUÅŽÊÚÆám¢ÈÉâ5*6[Y5aÊ™Ažé¥œëÊš›PMúƒ‘š.î®ïUÃj®5Ïƒ”$Í"ú‹ÜõõJ
kmÝT-°íÇM°fŸU&¹ÅÝ*ÿ´vã`û}V‹Ò}Çš½[ 5ÕQ¤³Zÿ–Þ½°šLûŸ9cæ"\yó¦¹‹|ðÆÛo_©TpùÉtTcë`HÃfäÕcÓI°¶¾P«’«Ÿ^-OVN‚Àö1í½&®yí5šRÛ¾3íDÐt˜ƒŽ%oi
+™-4Ó—Ð¼úµÔN¿y/`&I××îÝ~?ìYÃ»ÿnö¬MË¬óþHjw‚µãÝ¶ñ/ÑÂ‘Ž ©5çµæ;ÖVÐÕRÊáýVkFjMªbbjá‚ˆþÁ’eå›ÞÛJ‚lE+Z±j/HíRSÈrd’®ÆµRAµr—m
“¾†_È˜h-•	¬9«ýô/e/rýÒ; ±CåîÍÛ6˜´64ŒlF k2æï2ýKöüË.ž‰ÚœÀ 4¸÷	Õ8É|4¿&ŠkJ4Âs0æž‘›ÚÊ°§}ãl&«)J¥òø¦5W»æ»ÔÙ¹ØÍV¼æ‘Éà<²Žjd;æry¢˜_k°åØ¾–eÞs.À½ø„`Ê‹”ùáá}û¾‡Ú6íÞ$:,À¢0¦‰s¢)u’ËEÍ2"Í?ƒPg·#æI^\ÕŒ¦©—õtºAhÆ)êÒ}»ÍâíKYðƒì¡6‚aÉVí¾ÆVÄ§Â?][X8yqþì”ùŠ k#ƒªƒ-V«ÃÚ.Àš¶±±4ÈfæÎ§òhY´_®ûA†Ý;ÂÛ ¬q:¬ET£	Ö"ªm-Škâ“4®©=B¶g5eÐ…ßñ?NÄëx*^q“IcÓác}]<,|îCœ¦…&qT¨fŸbÊRüêå²ÚíH§7ãŒY×ÖâÆ5È^K;°Àlû_þèiàm?\³ß9Í‡ž!\ú,6N ˆ‰ip6cÂU½±¦:]
ï¸p•ÎúºB§žSM‹L8õ—œ~„u_¦EŒxÏ ˆ¦RS…RMY“¨æî"ï£«Y$;ÖL[se-æ™êdúì×¦ŠÅ©‰Íeûv&czb0·Fþ…åüO-ƒÚµå\¢ÝiL
¹|µTÒ¾5r"û;úû¦çæ¦Æ ¸©b®2Vƒâú€5¢V›J€·\1›rc|^²kbhð z“ÃÚ¾ô¦µ‡6þÖ‰åt=0M×™9ÄËbQ5‰C.¬™ÂÆà¦yì”RYªGÌO/ÊÞè4¬\;²ZÚRGUûÒØÉIøS;×-÷Çn
åI}RY-‚¹g¯íþÑ»/î¼o©AX;g}½êH{[Ï–ê(¬66¬¡««yµ}Àš6¬Í\yóüù›7ðƒ7nüô‡ÅB¥4ûÖ;¯—Ê±MS‘m:ç•Ùf+rÈJH‡<}ãÓ“ÈoÉé+7>ûìÇo¿ûîo ]ø
À‹vÍ¹¢³ k¬¼DHmãÚ|E˜i”¾ù’4O×3	.îwCHpÉýòŸçªáœ*³–NƒLIkjiPû¢Y´/æÙÿïâ1Íã´/ä™RÕtzlõ¦#¢15ó«àÞoó k–ü­$ÈV´¢«Î‚DDsXÓ©ŠªPÁ9Œ““ÂœIÕ%/Á
R—ÕÄjiaíÖOo	Ö.]Y(nÞ­—ÛÊØ‹ìžìÙ,*Óy"sÄÒ‚•Å¦Cˆ³mkëƒXVß¹f.$ä5ò4’Èpô°[ÏÐà<qr¸nýÕÙ¸îÑ¶ólÛš³=ËÍ =êöýZ¬=Ð¹¸)³xO[ç
„–SB¤±Ð<å%¤u#¶åÍ\Ä`-i“œô•ûð«'¾ùB(ªÊÏ÷­o	NžƒM(³ö'×7Í_<]IdúèLeN4yŒd\Z3X«äß`5ñˆ‹fšW2>#h-íÚï÷‚•c€5ÍëÐÅ£Ì¢”¡L—RÆlâ7ýnýiŸ¸²Ön¬Æ3H‡5éjRëzwîÜëÅ™bY^ÃŸ«‰}öôtf~anæÚLe|³5t4’ Ed²}ô,HurXÅM«‘Æ#hej_c~Y¼E‰l.;,¶1É˜äŠy¤Ar\óCÒÚ)Z„5¶tDvJ/F¬³ØkOoÑþ‡ŒÖ¥§‘É˜Ç[ZclMÆ&lÈÄ1.’š7EÊ²Ÿ#ò6,iiÛÚšÄ5’!Á53e! 6NßÈö²#›SãË\i•ãï¤žþ„c„Þ¬T£Ák‚!­ùëƒ¯¼HÓ“t„Œêhv;Ì8¸â®étÖëˆ2ŸVüf¼Ã<>!þó_„–ŸfAíépìÔˆ#G½¶Ä~ŸÃpmVÚÚ_Å²Ø§¯ÙžµÊâ=÷ñæ¯ÎÊ|gäõÝ,X‹ÏL²DRR  5–¦)Ÿí(fÉ”äÜÔèXuêH©-wdO–#dAûñòÏ'”]ËtôgÛÚdI*òÈHq>ºA¦>éÚø”YCOÓÉì‘­àYÝ@DP7ô5E˜ËæŸ)™“Š»¥] ¬ÉR*ÎØVÖRÊšºÀi´taì»^Jä¡•O’Ä÷gKMcÿZ¡Œ5dR%¹1¡Zf.ó€R0¢°aàº7W®Œ)rìs¬ö•¥Èjß{çúù??ýêÍOÏ_Ÿ.i7xõÔÕ«5BHþêÿÙJIíØ«Õ»
Ü,t]9ãû¨o3]þÍ/>ûàwþK,Ûßg³à›`M÷å±iþ"^ëZ Ãyø§8u
wògµî0"‡g5|Fînk›AÞ©Ì¨µZRãæÊYÿ6+ÀZ* 5;ƒ¹ÈÊ;Ö Ó¸FD\‹¢Z:2][ƒÃÁD2±Yî´œ [ÑŠV¬:ò_»äòÃ°üDà«§Øº6â¸&Xë,x”Ë•Ü$å×`º¹º²öya-ÄÆµ_›(6ˆ¥øÀ·0´y¨€ëÆ<¦ª×;ðæÿÃÇÄvÈ
Ä¢cˆ¶×Œó1j°u­º¶Q;[*šùGÚ	ñ)€5tg‘õéêx&©¸²ñ/õ‹KÝk£²¦y8­y¥µ¥Ý›ÛïYšß½É•µn›á÷ÈhUÖÚº×eªýù¤˜±BÖ#v"™
iò[þ†ïí©ÃZLúæ·Þ{¨¾=Ž·yàõÝóg^?­ƒ“#¢5ýû‹È\b˜ÑæIÝæ¢rktI.a-—°ÖÀjÐYÔ—êjÑ·£qaÍ4_ñKyúû×Å”HF3&˜õ=rí¾e³½Ži±˜®äEB£Âß1øÀµkûækG&ž™JmWƒËŒÇF&ö#«	Ì‚¿Hs™p=ˆëÂ®ýøäBi6†6ñg¶# /£gŠe2±ÎZ£´öß9ƒ´-F µ(®yÜ¦5;šÛÊ‹‘×¯8mâ£Ï9mÅÇ¿ò‘.+Öâ˜þ’Ð¥¤:Z$¶f`Ið+YF®ÒšÞQÖt\³×ô¼£ZÀ5³ñç±é ùáæ#´£¡g<JmYOâ>Â\ÑŒ§sZ@7­8Îi`ÉF»IX&/úÀÄõº°Pg9‰d¾®. !k<ÈÁÎœöýèß#«ÑÂv5×Õ µ°a-”X£iÄ)?~ÆìÙryê`á˜¤`O¥¬SUTCÌOríùå‚:ì°¥¿#“ØNª¾,
[ž’"|WôíÁÊXØ¬•0œÏ•²Å©=(mÕj5—ßÓWì¯©:v¹RÌìùêž¹±‰ƒGg>—I³ïà½ÀšB¾öuóâ#˜ÜÆ…%ò‚5ïDÁ_„UùŠ°ÑM;ÕðW ïlÝ¾}+±qø¤Ôâ$j8ÐEMŽû7ÀfÀZZ+d}œ¯â?©¿öö‘Õ¤Ôñò‰ºÚò8­­é(ÁiSc»–AÂjÜ{Hæ$J‚«ýéÍ›lY»qé­«7ß¸rD,3µi£µcì2˜®JZ«R—[ÂÚº“¯Ÿ¬Õfr2Y÷É?øõï¾û^Úú×&™ˆ²˜XoÖ#Ô°c‘wÌ¨z¿\ù—™
GÔ)mÐû¶âäì_£®‚^,É‘òÊÊZdµÀkwrƒüÝœ ‰•Uµfî"ª„²‚\QXã·–ÖBû§7¬E\KÓš³-(kËaWêïZI­hE+V¿Üú¡)ú„µ§žzê±'±¬MFXË•Ç+•á`ÜÔ¬¡Z3aí¿b©"k_+K¤ÃNdÇúÉNþ<8Œd[ÏIG­/«7%ljšY€¬g*ŸGðËŽêkø?I°¨´GpÃÈ€zÁZ]|Ë\`ó¦`BBäê‚-kkRÊš‹]„›5º»çå2â´¦.©;A2'È|Lºù×G[Fe²‹Yù‰àõo>þù"“ÑqîøÞžÞsþ`Iïvï<9ð×}àÚÅ×ÏüÅ|RæŸÀš È½EÚ’ÊDEª Í³ Cz£F Í%¸d¹¹H"8FEÖ‚8|üêÂšQ›ø+ò˜y†8ß…jãDeáéÀt\éT[S¯€ÝCˆÜ¶d;ŽóÆ—îÃbDá¤¦xH3ÞÅ{ï½÷\Ý‡óõ™…ù“Ï°¤”L€iƒakjƒ.¬Áp°šB·TfM™’gæÚF'H•õ‚%´fô¬m<i`í§AY‹­9¯i!›$CF-b½ÎT„›0—OÃàq…Œê8oÏë#¡u>ôõUH·­ùLKvÆŸ]Ó o|ÓÈ‡!â<-¨Ñš›@þDGp¡‰®×hœ¤CšÆæÌ&h»ìZ;.˜Û‚œêëwêsf:ôüËy, uHrÜ~uôW—_æJÖœLžFã‚Ÿ¬©sœªO9|ÄåSý:ö©ˆ?BÓ>ºûèÕ„jhjGƒªfNsàÚìÔ6«LÈ¨«A»ñ]£¬á±C”©´Â7@®]ŸfŒð-RÆ’g¨˜ç¤¶¥—‹Eh-ÛVKò(þ[Ñj%ª¬Ag¥ÒT•$n,!)Ã6wäHe|W®¿†æVÚÅgcÓhm{¦GGž<hÊZÝ$‘ð?Ötîý-¥¿Lê>üð5™ÊK¶1z°â×îÙo„v/™a„/ÐÜ½	8Suf+¶­Y­á;IkNh>I™ŒÄ0¿Œ ¬}Ø&'Èuý}ªG§tÿR­Z-L–ù“£’Èš±+7w¢„¬­ñ{”PC! £Û[-f5™‹Ó~Ý¬«¹k¿—XûîÉÓ×Ïß¸úÃ…R­ÆOH¯qvvZ;×´­$sÈÿê\ReùØžÊÌ;W®|úñÏ?ý­Þª9kÒé‰¹8yƒÜ>IçŽG¾&*fb¡%7ö°F¬a÷Luìí¼Aó5ŒiM­ûu˜š Úª}û¹ßœÕR²ÚŠÆýi#Hºª5Ö"«¥ëa7É‚ŒfiTSG‹fý“aŽ®&á¸•ÙŠV´âdAÊLD#°t6<Hž"K’Ö$¬Á	¸€ÀxÄW(¸3<8>NElæV·®ßºõýá¡‡‡k›Û¶ƒ/Í†Änm¹‘kä1:iyŽ£å22Õ6ƒÇž4He"ºiQJ™DŽƒçÀ;¦|¡ÃOÒk^3[%«U‹»wó1GeíxÈ„<’ñæÛ:71,Í·ß6qe-‡¸•ë†Æú©w]Õ66±Z&q9­›i›nç™ébMO¹A:ŸÐûì=‡µWöýÅ™‹ù12’‰^¹
ÿh­^l-ç•°Y‹ÆôaJW!•Òùº­5–Ávp[»Ö€3['ê#>3<cÞ ¬E!Î&V
[böôpjÛZ¯pm vÓ_êuí9bÆðwA¥u—ÖN²cí™“'§ÆµyßC´¦jãÄ.¤§ígnSÌEÆJcƒ£ÕŽ\Ò_µ#‚ó%#§¿§Þ˜yØŽ¨¬‘™RÖ‚)¤r!#®y¸æñÿ0 ¯0üŒŽ^¡ÅûqÆOú•~¸ÀtNœÎœ*Ó!rH‹jðšN]Ä˜–,³bØØd_LénáTä¨M¬?zÄA#âsè‡F§»á¶¦õ1’žwœ6%èì–šä;N@¸gö3Öo›.Æù‘:“üöûmú¿;ºßs8ùj»‘:h~è·L MW³Íjpa¤¨yEìÙÀjÕ¬(6ù¾ª3hß#|Ïå&&F9ÓÛs¹ÀjTçÖ¶ôç¹TYìþ~°Lß¯ì"Ý2Ð.ìÙËå!²…á:Š¶%s'F©ƒQ*ÍNŸ˜+V&È2ž*ÍÕ²ýc#ƒãÎœ½¸´ˆ!\$¿­¬m|Mt ‹—>DL{D|LˆÅÈkºœÑ)œßÀšÄ GTè‹Ý²î®·ªLÈ&‰ÔìðAÝ#¤?
ÖöÔr94µBg¾ÊKH`%ôk‚µÎQjŸÕoT°“ >õÕ±¤8&×þ”¤6>‹Õkrí¿i±¯_yçüÛ7N²[múX-©¡§	Ö 5V€5¢TèäSÇCN+¥j)wZ5×~e°æn,z•€›‘±PX¶P£ ŒÐšŠcví°æs–xý4Kƒ­EXƒ’ïÖ+7äaM‘Þ³v'3HHk9¬Ý)ò‹Êj‰´®ææ"Ílû›AÆ$HG|´ˆjÑ’³YYl5§4]âÿx?:¥k’—Ñ/ÿ •ÙŠV´bõö"dAÊP%8ƒÎvl ò	Èb’à/ŠYE’°OŒ×ÝE¼ÆZ€5íW»ué :Ý¼6$%l°ÜÝ9,•ms¡{X>"¸9â_bšReÌï´æÛÓ0zdïÚPt•iYÆüë×Ûî¶:ßIp³ÁP—fµaVWÅkˆdëÚõ™iÇ¹T¤[ŒX»xÏ¦{æQÖ–dÞ_PdŽ‰†¶|•™‹HÞ\ÕÒ´‰Í8Œê–ÐÆÛ:3\å;zùÁÅƒ&¬17Zs>yîŒÒ /,œEÆ;ÛÁ§¼g Ð†­È8©‹VM°fV ‰½v:ÌM P	%µ;"­9 ÙdÓk"´5Z1#bd0ôi¬Å%­ùÈE°.Aý½˜÷÷ô®íéëÉö(§hÉ*­Ýwß}ÇÅ«1øÿŠ·¬¡¬]œY8yòôÄ‘Ÿ,ä+Â´‰òÄ.‡51™Çª¡Ye¼>Û•d‹¹Ûsø…$ìY“Ãˆ™©,JB{DX#Ñf‹öýi§"lÝâ˜Z‡u+jê~F;¥Æ.i6±e“z{JW€÷í¬ÿ õ¯ðåxß›Îß%ü×è}D5G5ëŽqDqíTP‰ž§K‰Ž¸kˆÚ4²EŽñYc8 "¤†N¡÷—Á z#;5Èè§zPO¸Ô€y\¥Aêós0,„“>Þä$â-iñ.Æ¯YMq‚FˆÔèd	ªÉRæ"^fm9«ÅDÈgQ‘G7“ÊŽ{YFØ¡ª,#b¼ééõ½™E\PÛØ›¶v ß÷hBkdÞõçs	Û×ø¬Iê¾s³ÓL:²ýíýI[mŽjkÔS”ÆF/OÈàçHi@àvz~ßElS…ÖÖvþ&0ÃJxlÛï5ÂP  €Äá¹Ï;¢Y…fš¦*ôL¥Á"b5·ÙJ4ÐZSÂZ3e`ˆlû·þm1/óG
b×Š(kmYƒŸ¦¡¶ÎÊi cåu]•Ñ©ÁZƒ»H=‚¶†¸ÖOÍƒ1Ò •™m0qV»äÂñ]Îê¥·ßxç
zÚ1R©…ÍÏŠ±HM‰—Ó€+](k…Üä­/ p"È™_ÿâÓ_ÿÒJ‡Ûú&?á›ö«A]÷R[3ì8ÖxX@ÀIWãä™à©ÑàÙ†P¼Ø*c{‹Û·ò¦š*k PCdHC¼“s?0vR³nåkM"&A:ªyÜ*…•‘Ôh+»‹èH×X‹T5Zó Õj´@hæ°éÊÚ£n„ÚríoE+Z±úø½§@3á8¦‘,E­ì$>T˜A–»ÝžV*dR›6TKkÃjuXûÓK§7)±rxXvCk#\mÛ<)3ÈÇF:'‡Í²Ÿ9†ýOÈDÔå^ý˜ò™Pd4æ×fú-Xl!žP-0Z8ëÁùÙUE‡`mÍñåä-bYlµ%zÆÝìCð
‘ä1©õçº«Eô³~>¯fCzÒÝ™¬Pù<MSÝÍ‹Ù§öšr¬©¯o\{On‡qƒ<sàÀüüë¯ï;sÖTŸòHÆ6W†ôO°J.—ÐXË‰äx¤Ì#¾+]VãËêWÁUÃ{ƒµŽÏûú‹¹41ØªoKó`I˜q'Ír¶à‰=(jÙÞk;¸èX»emvíîsKKgûw~ã¡{vÚ«æuÐ€°†ÛÊs‚µ…©©™™ñ‰™kýùÑ	Å¸õÀÚ á°6ˆ¡¸F”)>:¡õJÛÉ\Æ•‹Pryb­Z¤¿=¦œh”DwHƒ<üŠ	kQYóªØtôi`ãŒØ4zøF-MVˆ·ì~˜Ó|d™Ó&ñÂçñô>}OwÂª·¸ô3z:[ñ‰4Î8ó. ¥ó GXX1”üÈoÝÆåÌÆ…Ç¬³“‡cÛóÈl+Æ·ÃäGèXdp¦sMÎ{O'„êlî§æÝû6á‘þa…!Þ‹K¾êd‘·èÓˆ‰êÒ-<Æq4<Ð“ð)*š‰j¡Àý4/\ãxŸS^vVsvV¦S
ÛHïèd¼ÜæåÞÛsù`Öß–o—š6€Î=µJƒy`­ŸÈŽåú ´¾=}Õ<"ñùê¾wŠí°[mn´R;1'Ï“cÒŒŽ(¦v]<³o)îY3¡ÑkÿABNƒÛ¥*8"<Š$j‹¾SeBK`	ævNå±Ñ%8Ö«WÖ¼5±ÓÒ=Ã£”Â”¯ˆLÍ²[é‡Õé*ÔV"¦pŸeG›Xmé¾4«y  õžÓê¹*¯ˆ0a-°ÚCÆj¾aíæŸsÜdËÚõnþðÒo¿qþ“â4ˆ®Q[Ÿ•I‰-×5	š%…×O²¡nýƒ“…ÎŠ™?óÉé«ÿ`ùŽî"Ò’Ç…hV>M¯¹²ÆVî©çL2˜ÆàÀiIrWXxNs7H'»Õ0ïOÃZàžÙàÙÔ2w0ÑØÖVŠ ¬5/±–víoê#ÚÐD3ÈÔžµ†–ÖÜQÄŠN8¡™Xé²©Ïü÷ÿù—ZÑŠV´bµñ/Ù V×Öè	r ŸÒÅedÙ¬©ÐšÐhx’¿%ÆææjÇVÖÖ.üÑÈHçºá0Õ†Ûvt’XÞ|èì¦ÄÅáÎaf^[5Õ´_ÐÀöµ/+×žìRnVcxšdÝÊŸgWÃýuTÄ	á+ÒÖVkìÓTYWâx„53KóóÝ¦¦¹ª¦i±Š‘ªZw.³®[Þü, ´	vÔ0a%«}m›fXŒœ[»öxüIn›O¾Gxýí3ÀÚü¾îi©ô5
XaPÎ/2òÏ'mßŸ–£³DÕ`ðŸŠ‚dµ\´é·I¾FðyÍ"èbN[õ‰˜šS˜¹Aþgtdžò«ú÷ Âš®ÞÖì]ZÚØËŽý};yuw‘¨¬}£þÎNÎO!ê>sva
áÌs U›˜—ŒF
delpƒhmó†‚~zvö!±ûI
¯&^î™Fùå‰Ð‚3KTÖ<Äj©²ØRÖÕèšÄfy‘Œêéb0ÿã­ô”Q§Ö˜ØšuG˜4v§|Âm(´ò…Sº°s9;¦(0fj“Z@Õx<F8é®Ñt8¯y³.À›Hž¯qæG˜Ã8aqùÍ¹Àw,ÒëÐtpÚÔo«·ŽfNÂ	Pè§.¸ô-Ðá
-|OtÐøRÿ)E?~Î"§¹±ˆ(ÍO¤%±éN7H¥Aê{8mPö§eýß¯D6‹¿Ñ
Á#)óYÒÚÞóÁ«Ÿ“…R¢¶œØùg‹µ"°Æ®4æhÒÅ¹©ñB[unNª®þèÔlc›;¯X ,öµšh,¿Ï)kßˆÕDÄ½X–³0üÇ»Ù¾fÆ…Â
g´P›‘ CåÑIuf$ÁÞvW5ÒÒZX‰‘VÖ|’g¶»¿“ðgtT#’níw.$(kìUClƒªS#ƒåJ!VÛ¹ñ¸ýÓ¬Ö+^“Ë°ª5lX¬f°öæ›7?øîÕÓïüôeÖÞ>%™Ær^Ã´9MnJ¬åKn)”r¹r§™Tëîzð
•Ö”ç•J:šª^c-ÿjg ‡#×:«Ñ[¸E‰ôLÖí ½´6°¬—Ñüv½·•”µ(­ÝIYkÈ€T¿¢ª¦áó ¦“XAX¨¦¾ÉŽ5Gµ«ÖîjV{UÊšú€!ÔVóRãVpkmXkE+Zñ…¼ k!$fmÞñÔS;†ÖèqÃ¢Ð)‹l#É%åq,¤÷4Û±V‡5³íŸ)è#Êu“C(a6?öD×$×ÕH°”™‰)l²v”Š¶Ã!ìI lÛù³Š¯¿ìFÖŒÅPV¤S#ÝrPS#bQ5«ƒµîÎ¶‹ðX*Çùi9¬iƒøÒ&¶·­Ñ9´å€3‰iEý5%d‚ÕWJ†à:eà/é-Édíé/¶µõxaµ®ñSk²“ÉÅ{vÏxe7,å@A_!Ù‰ÒžÇÞPY}(DºSæF¹Í0ž‘Ñœ_¡X-0ZTØLê³Ž­Þ²¾1†=oæ!kËË«¹Gø¥B›Õz´¨’ ·ôo!!r/éú8ÞMF¾aÍ¸•÷î°öÌÌüÉÓ§Ž|ækn.‚¨68A¬%ã›Þÿðx¶¿²yƒÁZ+¼J1¯tÉ]Y“3Ø@¶˜±¸òhÅƒ5m·»\Ä=kE±A5—ÖB/\û'Æñ õ4¨ÿ	8¹d®f‹6cÝ–|9ÜŽWêÕtm—Š0„Æ©>ÌCÄgþ)HÍgÇ4§Y¤ÚtÑ¸³ÍÏÀo^OŒ1\±¦¦.ó°Ñ°ñ‰ùÝ«g…¢ù@7[}5†]†Ñ»8@~O³°tÂÇØ¥ŽØ1¬Â3z~ÝsžôªÖKSéjÁb„8l7¥¬é3
YžòMA+¸u¬}ŸeÛ¡8c›}¢žY$9 ¦¬1àÉ¼ocß–-}¨kP†ºß²ä
íÔ_ƒÖææJE|FÐ×æ ¶™¹…}g®MÍ]ÓŽÖŽXûÏ¶92 ïQq¦å0 6…ˆe/°…È@rZ±°&@SÂØvƒ5Õh¾û.„
¤µàþ›#]Dµæ{Ö"¥iîë¨h	ŸÙQÈ,ÑŸâLsÈjI5¯œ™ù—ÇzªcÐÚCâ±ÈjÖ 2XmË¹ã½S°ZÜ°F,K‚¼õ=`íüù7¿ûÝ7.ý}þŽÜ¼~ã™\®¦ÜÇYö­Q[¹`[¡k2aóZ¡²n½ë{ü9ÎV64·J×}ÿƒßnñbý­™Ã&¼¥v¯}ÝKÖ9óêÏÄõRÙ\û¢Té^PÁ–+u;Ôa€¼•7–bµÝ W“)Rs$kÜ[Áµß1mecµFhÚ¯öèšø@®Èj9i]MmE7È»ýð‰úX^í^7Øtr»¿µa­­hÅÉ‚|ì)iTO<é°†Þ5QÁjÒ€¡-²€¶FŒTrå±c¯“¬&aM‘ÖnIY»þ@ç$ÑYÙ±aÛæa~<¶Ú¶AÈúÙ!UÂÞf`¶M
bô/iM÷XÙá`F¥µxÑÀi‘×œÒBÏyÇè\\“‘m¿ï'¼NuÀµ½Ø_,¹uÿ¼ö­uwîÞGdsÉgù$­uçHtìNªY™ö³$Û–IÓ¸Iú#‘Aycs?ù–ü!Â¬îUø?€²¶)¬¹¨´½ºøcòY¡`~•0@“‰?asQ—6DXóðÕkê<”yûÂ.²™éiºÖpÄ<4Ñ`>Dý97ƒèë]ãÇ³}½}ý|ì¼ví^½u7ï¢EXÓ?p‚¢yíÄÜü™ù™ƒƒ‚4‚‘®’T”YÉ=üß0)®ÅEE–þÈtn
JÐ¶míÅjE–:2‘eCÚ§ÃZtƒ×Ò[Öi.­ÑèX¤…ã‚ŸêYeváðm» ‹T°{ÿ?Ç[4'¾@ƒA¿ãäHãZàµcŒÖ½ªK«¸FçÍ‰m5‘ÚÇHšŸDœ¥b6ô4Î8÷Y´J	OÈ÷„þyÍð’ABsM¹Ã¡«X¡·Îo‡eÃ½XÔáy0Ø¨[>§çôåiõa°9ªÑ´Ý/îXÓž5Kÿå[AßHlåŒ}W/rê›Íµt+Îß¡Èýü9ÁÌªÓóD¾ÈZÇŠ_cç¿JèÈ×úú¶üoöÎ(6ÎëLÏE÷®½Ûí¦ 	Ž–¼Ú%-ÊMIæ`FAÙòˆ3T"ÔÒ³3¶I+€¡fh+î¶roëXM‡àÔ¶¤…(Û2`p[Ð†²(¦öaAX¶ŠSÀfî6`ØÈ…¼7ú¼ß7G‡óg&¤èÅ|çüçœÿü?e{")|ø~çýx—¬îÙ!N·uà½17·°n`q·_Ì]Zœ|õâÙ…K—6+kpLÖ¾˜ƒÀó©Q¹•…ÙÁÐ ‰zXˆHÛá©È ¥ñeftžv VÃŸo†¨¢Ån¹Q&d’Öb"¤ËEÌ{_–Ž	‘‘Íz»{(ˆ£vv+%RfþsÃ—.Läg¹d„µã´ìTFðƒ«Ub…µs·«aÿ-^Éïk¬þæw¯ôôTæÏß|¯zåu9÷Wá°—ÞšŸ§ÊZµû0:i9^x	¯‘‡úŒÚÊÝYK“¬f;ÿáËÿù÷¦Lzaq+…­C€–Äˆ¦¦“hµT×Ý<\b³)D-QUÍR¿Ü¾½È?p'¥"GZKk¡ÎZDµ¦¸vW‰l7qío¦¬EßþÆ^âÉæ¦ýI{‘ ò‘ÕèD¤µÐÔ+k{Iz¤sg±qX™nÜríoE+Z±•,HáÙØ	èÌaMÅ°¹WäÔÄVå<f”Å›.¶et^­¹°F$±òwãKëî-ŽÙq„\H p÷sÏ=w‚ÿï+!ŸY®#òÙ‰û_ØÔ„k*Œº¦P–#”f)ovaJ†?‚ÊlT³ÐÍ]¦@v¥ÚöÈ2ÀZ]nâÏã¹¬r¦gÖ»f:;÷<}­-°ZšÃi–=ƒkHA¹rˆzÓÃÕz´¦YÈ5T¬ñôQÀóoo¤«©&öÉS° /ãX¿g	JåÐÇà1Ù¤R†TébB£P5Š£!Å/EÖ’Š„XR„MÈîÐìC\š‹°xÌ.Ú?zð¸."ºA- ™Áßºlc©oq.@ZÄ9¼ëØþð= æ!X«Iš¸­è‡ö‹‹x­,ÿp/Rii
ÍKKÙ¼Q›’ÕÈD‰ß¡ÙiÁÚ.ÂíG¨¸Æ‘µ‘a<ï
íÐê)Vxë¬¶¹ÎZ¤µHdúE´Æ cd°%Ã™ÎœÑòLˆå3Ë/œ	%÷¾K£ß¹iÐØôëºhË×Ï¨ù’1Ll1…;!êŸÕõ÷®/Óùe¼¿çC˜ˆjC€·ÈkŒAg£{sdÓ7¶ÑtÅ;—‚1<“®°q÷ñ«8&÷é¾·¾ˆÃMòU]É!D¼=o³hLàã-ØÂÄÁù÷™uWoyû ÖÌ•"‚iÛ”u¬@ÍÎªñS£øÛ>£Jô¤9’Œì?’¢
v†?Ûüd©‹HŠ§ÌÂh°Fuv€ZÙ2…nãÊÂ…ŸÓÃ³³#•9Xm"3PxæÚ¥/MÌ4,Š}îûJüî§ÿø›YàP%­±®8èÕ¿¡‚…òôwq‡Ð©Œ”ŒçáFIVã¢%"é1’Ö4ÔêaŸèLçÈ‰‚Õ(;'DK#µU«™t7¶vxrhpç@5Ó¡  ,²´FØl}hðç#°°†°–`5ƒµßÀjï^^½úÎ;_ödÏOfçaÂ¾2ÇÓ¬$ÎKóUŒ79¶v¾Â™50]ÙrÀ_VççæçqôGÿ+}ùÎgÂ+ÑÌ&_!0Öd5(§~!±C¯1ëkÈ‡äQXÎ MÅši@ò¾û(ƒm`©©ØQ³ƒl^fË¬qýÞšØDsXkžÉü{N¬%)UMÖ(kÍ]û›”ÃÖëEËþæeÖ¤Óƒw?V-|¦~÷/[ÖZÑŠVl%ò[²y¥EV£»°Vîƒà@7í–»a¬i$Œ‰°–,ˆ¬©Ä'Ö^GŒ#¨Ù–‡ÑÔvÀSæYÆwq¼O5®_ÖÁ4­ 6`­cHÍ5ÞDï	ˆlfA²™Örþ”8Ëb3nvî¿ËHµASdBÖ·á,ÅQ½Òš˜áÚÅ‹âì¸d…Ö<²‚5~–)’!«†ÛPhFP»gá Vþ|µŒûu^ƒÇ4­€%A’ƒ‚i‹gÞ¸¶ÜÈÿ1ƒ1‘Y\ð9ó„_S°¦oÕÃ™kÑæQÝá,(lÂ/¿Ba5î|öíhi¿”–<×FˆÈiz’€77ïÖJ·CÃ^"{p`p~Û¹spÛpÿ±ýÇÖö›²öa€µCu°F$Ç÷.žzìµ‰b‰ªiÓÔ0Â‘Z+Mó0™´5Éh,‹,”&ZËçXò°ƒÎ‘É	*ÝÅàódÏšfa-æAFaËZ 6¸| œÆþPq&5z²…Þðº">_ñ®k+±\Ã9š›·lL´€f	jðöpuñKºõðIÃktfMÖÂê}›emÉ‚;›n·8ÿÄ¯Â˜™Älb³°ÑÔâbµèø¬!%SÇ’ºØE~P¡¿ 5ºþt£æ§ÂO(
æ'ÄŸË–È +`MÇ×v(²kXØVÍægyÖÁ/ÞeÈœÖòùGx‡<È§ç²m]Õ‰ª²
kÖˆA~î?`Ä7Ÿ
'Þ† È­CnPY`/”ìxTîò„sšS†‹Di¼Ç€ÃÅ^Í\ª¹ÖøÐÁÔ\Z‹•±¹b"¤Ú¾Ý–ŸÕÙbeKg*¡Ng ÕjpÃ,r:v¬Ríß(	kÇká<FŽ÷WÜR¬Vw`mE°ö¢’ 7P×Ö?øàƒW_Ï¥çç»*ÍaØ_ÉÎþ9¬–íNÏÃlàZVfý¶Î–³$Aæ²‡+À°6Y:ûåßóÉ9½œU#ßQÕì”i¦þè’¾ä]„¬mRÎ£í;Ë¹Â¶w/¨FðAëÀÕ^†}nÂi×Þûþ"Ý ƒÂuG7È&ÑÔ’•µFÖýØ@5BóÉ¦çÕþL-¢C‚Õk‘Ø™÷+ôûœ€Û¼ŽlLÜ¶¬µ¢­ØZä“yb¨’²F‚"èæþ££øAŠ“ µÑ±#ãåîœ¾)žš½Íjÿ>ÄŽYÀÚÊë÷`Z`‘Ë£õ”eÙ¤Q¬íˆ\AÆÊ½àZwÍF$ÀdŽqFÍ®xD"¶ž±ÃW±ÃÌ­‡Y‹8¶™"Ç%~‹MŒÆân£³½#•ºaÍË¬yDëþ‹K3k3÷¶÷v"¬…P¤8Œ_£­¢ã÷gìH Ö&KÐÿG¾€	„j8-r´a»±ZÀµçÍÒOÇYè™™å‹¯/ž¹|ïÒâ¶¥t^.æýÊyá6ÁEŠ»tq#Š˜A–ÌJ#döiÖÊ«Ot´ÌGÎ°ÙÖbŒ1Xø—õŽ!³šÃÚ0s^ý”\éïß9€#ä ¹VÛû¹‘kÿ!ÅÕ¬ž¡ãÙž=ù¬¼û/-/¿6×V½ð‹éQ`Í¥5=-­˜FZ .öF#*ð·ËamlŒ­QdOªÔN•Ì¨? aÔÊ&·!n»A6RÖüäš· iËÎiâæ]´Þ¼\‰÷VÎhð¥_üÞN¶•3¡iÛÊÊõëÞµtj»¹ßÂZï4Œ÷è6°ž9Má˜æ;ôHk†h~ù¹ŒžD6Zl¦·»ˆ×Ââý85Ïè´¸Ôà-Noš·8ðÏæ¢}fW}(WRƒ¬´Ñ¼l„TÎ‰´öÈ.¢ˆö®"ØÅâmí\´æ˜¦v2™x$uwH‰ÜzÑô³*¬µwXÙìTavÖ^mÃh„Œîêü…¹©ü/æ†Ffß:ÿ/Ì·uÌå'‡yë•µ€k‰˜Cª£8Â&Y‹ÈÞ‘Œ0ƒµ£{@pÑ\…‡V3dó Ðö*#Rà>DLK*k>&IÍ§Ð’æ"õ°»‘Òð~”“H¶ÍTÓÜg+„ÁZŽ$Ål×þý/éY‘Õú¹‡5•&©L&*¬¹®&eo‘wÿvC¼v#seõƒ³_ž<_íN/,®ž¯æ²o}~¾’.ç8±f°6¯_hþ-L"³lv>”›ä_²Z©jªTÿ¬‹Næ¥Õô)bù6°¶ï î¥¢íÓòmûèõ–½¦‘uƒó&!çÍƒû÷ÝcŒ¼O¡$Ô{`µ$¬IZ‹¤•µF#Ma-‰na¯VoÉk‘ÔLYSW$Ëa7:²æüž°iT;€Yã~{Òø¸$f-D«ÂZ+ZÑŠ­fAÊ¯‚Œ±ñ#æ/âÚšÄªo[> ¤%žç„ŽMòoq¶ÆjQXKÚ‹¬,õ¦rr%ƒÖ¥Á­ñüØ(—Ø—”SÀZç¸V{Í“k‡Ö@6Mªµ¶"óÚØê»í¶GÌ ÕÖ`5­c*ä–aHÍ\š¹2ƒ˜ÁbíÚ½3$DÞÛ™šÙ¬¬cR:»Ûà4lFLPKu¦YÙ)µ6R%¼eYý~º¡®B€+kDÖ.~üjáõË§.w´ïÙ¶Tš|=ŠvèÊ°/]FÚT7ñG.‘i9ö×è·rš%‘EôâMÌVÎVa$ŠÙøÃy.²+­ëøWj°ÖÅÄþÈHGûà`¿b` ª¯±Úùü¡s&¬IP£{=Ñš³ëÉ“/ðy,ž]8=1Õ¶¸pú/¿=M]lGµbQ>#`ml×Ï~Æñµü˜ù-äs£n£cÎå‹|Pö‘èô¾!*kjp]®©ÕÔDk§t	ÁèÍcEÃ*3‰‘)l­sÙ*vßY	»º¬ÅÇ¶ôF/ÑWoªÝº¹Ê/}}ýº¯YÆÆKÞ…|¾wf•YÄ¶ºÂ½‹új­Q^6”Ži/9‹°<£G--Äõ_^çîÖ{LZÝ¢ëŽN8¤Ñu…uh±û°õø¬é]ÜH.ãÖþ>¾ï–86œ…‘A×|m/XÛ|fM?–H“ `påºqo1­›”BR›­­u´£8gìT*~#$A>0240"¹M‰#³P®Fb›Q=¶&ýÅy/a
™!›rnQ°fQ§¬R;4÷)ršÃHÆÂ¤IÌÑ,¡§&«Ø‹ûˆû‹ kÆ	nÉpà(¡[P-Ù¬Óâ˜ôiî0âãÁúq]Îi-K½µBU+ ˆ´‰tç×¤f?NÅ¹ãþ_—ÖBè~P"[¥žÕ°Œr×~`X%eíÕÉŸ|ùÉê"gÓª¨¨ÀZ¹ŒÁ'Ó*òþÖ`5’©­FŠd©”Æ»?´±GçßéôwÖ¤Zú)4$2TÌ?wXÓÇ‹òÆô6áfýÚ¦Vs£NmØžãŸô^°Â1ö‰ÕÈAÅŠ{—½°Lsi-&AÞ…²ÖÈ]$îðx±ÿU¤5]Ékàšx­™dòÀ=F²¾š_ñ¼š°,‰jÞeÜ¯RÃ¶}‰9µÃÂ­
k­hE+¶ÿô['ò¬O`Ùo•Yf!?©E;Á©¶5Ž cÊ2ËOÝNƒlàÛÿÊQAìõÅ645¾XåÔÐ5€5blÚÐ"ŸÂ›C…Ò\={XÁÄPƒ1D4ÙDJJmØ”Ùç°Æ=Ù“ZÕy‹0mÖ:g8ŸüÉ°Gpƒ|âÚÌŒ
­ÝKÂäZ¤µT6‰!¯ug«À˜†ËZµ¸>f
Ê{ÌVÀ4ŒFÈ5ÂŒ]­¿ë¸e>º4mó?ÉûÏ,–ßøÑ™K*VšÎ+ØríÖr½¹²¤´H9¹Vä+‚%‡¿„5=âšØÊ3"¹‚E¿è­ÎðQ[¶GWèÕzX‹á ±Im›ÁÜEv»¶ï¤ööí°Z?×±vîÜoÿÙþ•ó*“Óš*„Èká{ójÏL”H},e+r*†Ò2?§5Å.ÂÆŸ1[LåôsšÂµdæâ?žž˜Ê™(éQs4çÖù7ÀÚ)kÉJkLÖÔÕ`5ºâ”IiIP[§7hqZåQùÖ-íœY×¸®é:—žëÍ= 1z‹ë¸pM³O _çÖMF²ÚE×¶µõ»‹;±±ç«Ú+«4@¯‘Ææ°å¤¦!™UZ‹Þ#J|Œ²Z$µ[¡]§ÿòÖõ[êq÷–³N˜hôÐè¾¯æ¼¶u‚ãŠ7¾NÎa™Óü¢7ä5zÌÏŒáÊÚ¼ëj>F‚ÓÃÍåÔðä´4f«Šï¤æø}ÝNøÕövîCd:Ôä¹mÐ&ýl@LfêÚÈÆQÓFx>wxn~@b[åÂÜ?'ÉOâÉrn¾££pxqícþ6VÖ ¬Á  ˜öçu\JjHLRš‹i®
ûîá»Ù£Ú%ŠÔ¼”ð^ó¶¡"¶}KmEÂ²QDZ‹]áÊ=¿vóGVÐ
Ø¬…¶ª•ÔÉ‘5vÈ<ÌTÒÝ]Ïë?ÛÌjýä´ÇÐF4«Å$HXM¢Úê»ïll\]™¬|°ººqcòð¤¦á=Y*ó/PÉ•Eg¶ÅƒJ¶H•µ,®ýeÜ¾(Ý­ºØâµÊáOu<­&•Ér_ÙŸBÃ*·fÆöà(w:Éæ„aMÖFk"eÞÓ–² kv¼Jä±OöýÜì¥ÔiûéuÒÚüEîk[ µæ^¦ªÝ.†­Þ¼ÄZÒ
’îh£]°Æœ€5± h„¤a*¼Ûïå£ßù“–¹H+ZÑŠ-Å?ûSÁZˆR%ì‡á5¦æÐ/ÛÉäæ(«±©‰Y8Í² Û‹|qó‹õ×s8‹ vX‰”‹¤Skpª»¶{÷xog™{«—m–"â0«Æ}"ä8îÖž t^£ëÍÍ6þ\,–­u,ˆÍ¼eV#ÚÖÎýªb_kkÃRF3¯-u† %1K´ñYh­Vjd†b YŠBhz.]E†-Xëß>Ü.ücâ¹µ:X»|öÞkoüèGË{ðtÃùqz*Ÿg ÅÉªƒõZRdÊ7Šñ›5ÑŒ–¢årvïÚÜÙ1‚˜EÖìÞf^âòhó!Àš."kvÇ6½²š~!_2ÓÙØF)l=2a­£ëÃÿv|v?¤Fýkü7}æRÖ~L<¡ïOÂM¯Mç(ì´01ÅH±=;-XCêÍ–òS5X‹Á­æI‡Û%ïm÷ì§J}IfýDíó°v³a¡5WÖ|ðNM– µÈcÞŒê>„FWÜð/‰/ZøÚI.l:î9ÒÅWÔm›Ñ´3<†È˜=XúWùû¾àº£_l‚7.–ßDlL«PÛff“IP×Ô¨Ñ¬‡A¨&X‹AÍ’*oÑßsN»½ˆ#SìÈmº4Ò¾`Ð­]¿¯m^„ëÿyb«“×BdH€³=
þ)^£ü™G™FE.o²ÎIÛÏ'ìçší¡_·“!¡1®„´‘ê|%3”!©ñslôÖÈÐÜÄD…lƒÀÚÄ¸6=12P½púÂ…êö®öôÌÇ#3ÖdT§¬{Ûd³`."0@KS&ä+…íÜàÚšÒï 2¯Ÿm¾„b6	jÚ>È|$!šuË˜Õ|¨[&H-
l1B)­ïÕ”µž¥sL­PáoqÙƒà5„­N2Aä¿HýRæØóúÛz{ÇöŸÇ$HÈÌÖÚ2]Í«aGsg5`íê—_n@k+ïWo¬®àÚ¿0_§Iz$ã2“	×(¼F&deã~J­¥Óˆ<Hç²h~9¢ük‘/€†pVsç—Šyðàwíc¯)nÐ°Ò$©˜-pcLü¥¢±/s‹ÌÆ®Lb/šŽ‚iPšâ`M«%aÍQMíeÖÜ#$ÒZÓ¢Ø‚¯ín“ ¹Ô”IDTktbÁA­‘»ÈïÏ‚ŒÊ+­÷J””¤©’’ÕÐÔtèO¿ÁÑØþ¤u`­­hÅ³ G•ö˜‡ÑvS{þ°]Œ†tºÔÓ7†î6iuOãD˜­;±–°!òæß¼¸òC^/æ:Ëù!ÖvŒ‘ª¨o›9¼†×Èx¾¥íD¸æ ¦H?šæôE‚$4Æ#yFò%Fj}¸ŒH[s s<ãÎ#â«­Ejsµ:a›s5im)uñéµ%»÷Z”ÖÒµ©RUTÒúÿ}=Ì¦4ökhm™Ž6¶BA6þ²ÉÞ~.þcÎéJ*kOS[°6´$„Ê[À_üxÜp¬ì·¦Š…L>¤6°$Vó¤?aŠîõR°é÷•0Š¥75zP*°1„0&Ó³P ;)­1Æ2Þä"Â^¸4«‘'žØ¿sÿ‡°öü¡@®4%B~øãÿô¬¾Ö>^^ž›øhyîµSg§K%lDP 1·y––÷ÈdÁ}Xó»Î,XŠyCÙÒÜÜa+®–
ÁføÖ"«Ñ#§…F¯Ë€„ÔÙ‘Ç6sß4‹›·š/#u%ïW1{ëz¤2]~/\c8Ÿ¯ê‚Î4q“—½Û¿=+šmFÅMÌ¶°E\°ÕIk
y÷GTc¤ë¥zPã«A1ïñÒM#= Y¼aM8¢…)Þ†Eò–Ù×Þi~‡†-ùè³8ëjÒ’o7Àµ÷ ›{CÎKd“¶æ-žXSç}`íK<w›+ìÁ_.¦×±a#¢Z»ÑZ×°ìû‡y
a *å
C&±á‰‰î'K¥Òø¡~têðþýÃó•ÃÀÚýÆ½ª5SÖŽIYs ûôSÄX°ƒt·~àAÝ+…qÚŠwX3rìFn{‹Ö‚Ÿ)¿{f­©4‰¤¦aßs2I“ð(‡‘L¥JÚÀ¦B¶•£Ž”-Ì•&¦÷{…µã]Ûoû@
Ô,úYû<Rn#«…jØb5§µÿðÉÕ«ðÚ{ÕÉBüªj•jöpõ%² 'áÂÉ
òÙyŠäèÐZ:­êØ¹lIÅ¹+LDv?Ä/}ô€ M°µ±btiÔF¨öõÛ‚0Ëu„Éx‹!ˆ³zãŒÈkŽojG]ÌT×'¤ñiê3‹Æý”5¨(Fs‘M²š¾H¢ÚÖ”µÈjDt1#H¯³–È¼S…µ¨ªyK¢Zl® XÓÊ3G÷±dW¸¦§fÏ‚TÉ±Ë{Zæ"­hE+¶xAŽ¬ý[•¨æX™‘Ú÷¸8õSÌ•re%4rðÓsóFj„+k	{‘W¾ Öo\9²k´˜ëí–mwg~W‘ñq$µ;~Ê 2nˆa0–6ï’Abk;uÁj4aÜnÑšÒ"âDs1Öd5¢ÝºìGÝn•×ÌòPceÍaÓ³kkkgöÌìél›‰Êâ¢)²ša•2Ló]:ÒšŽ®õ¦£:ðÒî(tY#“ˆjÖÞ8õqñò©‘ý'ü’’&cn©lNf¦¬åX‹Ø±ÈI?âÖ®œ=†#›#ÜÅˆø|[<ÅÆ[´(±EÏG–_ßÌFÂµh3éwæÝORw#ÛøÀ÷?ÿ„ÁšÙõÇà·»»žzì…ùþ~ùµÞ\þáè·KÙ)åäêšÖ8fhÆÝ¨˜V+Žjb‡È<	¸¨‹|xù<ÿIä£&Nª™ö2V‹°VK‚|6*k‚¶:\;Ã§‰¼G:Ymýkv:Ã×ÿ]ãúâëäªÙ}òé™¯ã‹ñr#¾Šk«83øäÒ›­¥¿±»rë&¨¶šàµ ­9§ÕuÂtµª	ònÑ4ÐiÕbØM2"°5ø,@/ÂÖ *'¯DgË¦Æ›$å…EÜ"š#[ýÙµóº¼¹¤ÆX-Jkt¥A>òÆ-çÙ|tøûAZz,„/ÈLp¡jš¼ÚR¤&±äàd&:)ù‰’ÁÚ âZaòp‰8<·0?BáÂšz``rrÖ‰çÀJ27â‡Ö’™	ŒÀÚ7ÀxÀˆó…ù>Â ÅQ³|T9ÑŒGkû~xh“¬f'§BÄRÄL	eÍí ¹h	`»ï'üŽÙe¡ °áä[«eri¸5“¥S;i~’ÊiEj§îÖ"DD5¢ŸšœbÖF›tµw7®®§ol\½úÎÕ•—ÎçzÒt&µ,‹s?^"ˆióU`Mw+HÎIµ2…°•-YM—Ëižçz¨¯ïå£æÈ/IXôr¡Hò!âäâ%î~‚ñÈK­Aoš„©Mãb}!ð¦p8¥\•5(
k½ûCÄCiõGÕš qgaM-
kÞ¡ÈD$æ"M]ûc4¯‡í’îæÀ™ß<Yˆ}\.¸	Ü,Ò=(Xk™‹´¢­Ø²qq2¬©ZÞÎ«±CÀp”À.çò:¹¶+µSåú¥zÛþ¤½ÈÍõWŠO^Ùõ0_Ð›×Iµn2µ|qlÇ®#»ºÛÊ®÷	Ùk¬Ö#zS:$Ì†°v¿ÜXM´fÂ›°ŒW“a¤Çì|F'XoY^s/Hp-*kÉCkæÙ~ïµ™%’SÖÒ2”´ù*94ì+-2<Ë ´±‘n÷bk‚¡aP—ŒD\#õÏYo•ÄÞ³xùòâëÏ¼º§ÍìCkmv¾L”Áýx¾ÜëªP[1ÍÅ¤'vi|´µ¤=ˆ“ŠHd¾£pÚ
°v›¾jC´€Lø>d#ba5‰Ðnfh;øF3m'rû`Ç¹CkÇ¥¬ñIeÖê„Cjµýä›È\ÒÖ;ËµtvZœ¦îT£y°È"µ«E\“ó‚»­¤$!³þMá·5X»™PÖBî##MwžIGS£)§	ÌDfÞ4g_pÑ!¥WhlÙÈZM‹ØÖcÄ»ÈY‰;Ã>Íq7Ü4ùÊ›"´†‰%9ÎõÍ¯m%N¸¶Êù5$¶h9¢$F¡—ÛŒ$€Í³ ½ÕâzÈ|Œœ"±Úbü2f±dJâÚgI¶cCè7¹	CøÂØõjÜIB!Ï’ ·zX‹ÒZ@5¾Cg¨¶ã¤æÖ¬HÁ\oéI”µbJ¬VD`k—Î^âÆet¦ ªÛRö"`Z[FI^¡\nþ!ïQ»#L8J¥L­á[Gf’£nvåðÔt¾4ÿÖp‘§#¬É/ÑaÍEw$DÎ1(Cåaf¥~PÊžÝÚìù‘FäCÊ8ò@„µ½–I£‡y-.˜¸Ö$ò PËÇP ËÐ«è š\!s½iþ6Ï²!i-‹ì5wxrv'üªÅkÆj1*srvs?°f‰Ñ[ä*ŠÚ•gn”®¬n¼suc}ù|®œÆŽßJ©¥ñ¡¸êZVÕÔ¤¬žAiì ·¥çñ©”ÊUÏÏçú^Oéß	ÉŒ½¾#ÆbRH•lŠ†·ˆœ90(.ã!`ìÝñÌ„5>p}µ]„„2„$Y-ÂZ<²Fóhz\MWâÐÚÝY£7VÕç´©¹®&V»{aØT;@~òÀš·¤a¿ãYÖÌ=Ó!k²2åV¿÷µX­­hÅ–ûÿ×8hö½c'ž5Ã7^s_ÈÎ2çúÆ(a­Û\¹§s(kdAuö"¯HX[q}ÌÎ›•Så±hi~0m¼75:¶cÇØ$6`MI ›W¿¶à«xWHË$ç‘%§×´ve±¹Yt+êLF˜·d0ÒDY;w.ÂÚÚ¦ý©Ôž¶HjmY©g ˜)k$:öv§
ÃY=kËâ‰ä&ã~Çš~­ROÄµ…Ïž|C±|ïƒWÎ–Š?|fÉ`­œ'›Ïi+å°FSíð›lDt·©vÚòKiÎÕB2œÑÂ±ÌÍxcŒiZqÅ5h-™ø¨Ù¨ÌAë6¦„cÑ%ZÛÎ·]íÃ]ìö{þÇÄ‡›>÷¿R¬IY#N½yê…å³ÓÓs?˜Ö9µ) Œ€ÕXŒÅCjZÈ²t4]©¦Š¼8F`€®IVS€jk!à±ºRk.ªEY~*‹ëvEÍF†®ßZƒÕ¸~Ë#¯_a­ák¦õuf&BcÙþ÷×lëž‰[Q™.šF¿C 32›z›…O±ÙíÍø&ãæçÉeœ6Ý{‚ƒÓ$°ÑH†¤oÆ5zH„Œþýôª¹°æ¢ššÅ*ÝÚº.¿²{íÿ¡ã3é‰Ý8Æç¾ñAòõä†/°5ÄµÈkj˜Ø"ø‹ÐC¡µBJäsª’ŸNåGå*d'ÖÄj6DM=,q|Ä’ÃjKb7	Î¦ÆSÃ³#í™ö&#HniãÝÒ…!™üp*±62Ô5LIìÃí³ÿõ­Ù™5Ê ^ŠÖýkÖüÌÚ?º$²ƒH `D„j3“¡'»w…Ç&:Ý¶O)“ŒÆkÒ/"¤Å–>ê ã’V‡k÷|ÓÆ,EäªU`ZËàµÉJ!—®RM®wh@°¦¢kss•Ùcü‡	Ô²12Â0”0‚|úò
¨FÀjÄÆ3£ù¾+7>Ù Ön(Ç±4q*zóRÏð1©à4bI‘ÈgóRÜ°‡Ì2¢¯å*ÀZº§œž??ÙÇ!¶ôsvÊ»~>TlmXmi°íAª hÇ>póñ3‚ ›…©—Bb^d¨i´#‚.¬XŸYÓ4HE,ˆ®d$aÍe4†;zöÓ›×WKAFZ×‚²Ö\XÕ’ÂÚ² é4„@ê‚y÷éƒÔ154bÒÍ&ç[æ"­hE+¶|díÉqÒÆO<µcÇXÉÜEÌdd8(÷ôu—‹Nk=Åñ#ãAXsTKØ‹ˆÕ€µò!RooX{XžüãeJµJQËõ–Áµn÷ïæWeÜ}ÿÃQbíhöaT}làÍˆàÆ5@ÎÓ ûšÑš®mÿ·#‡šÁÚÅ)j{fz—˜‰Toº•°&'ý!Y«e0€Ö(±–ÎŠmã.B
”)]g›fŒÆ”0ƒ4ƒ‘k/Ÿ-R©Ž¯£õ¦7ÇŸYä¼ú­ÙÒ—Ò‘Ez¹ÏõšÎf/ÄL¨økØ—tÓJì`‰p
ó¨[Fr‹w‚2zÛXzh?¼­{Œ ‡”2´}[×HG×Èà1>y)k›’ õ[7H%Aú¾Ç;õÚÜÔ´g=}ÁNÖ¸_’½›CbÈË%‡,ÈñŒŸB\ÖgÖ<žÙšÔ£²–ÈŒ˜F‡Ê¢ÙÅÛèƒ1¼Ÿs Ýo»þ›uê	÷â:5°»Îë4MÌFû‚aÓÏÆx< ïÀ1Öº¼qV~á.ÂCxHc³wÚWº‚ÐfÛêJòàš³šH-i2òžQU¦ÅìGò*Óøå¿Š-Ü­úµÎè{Þÿ ±…_4l[¦Bw5IdB¾æ¤² éj¾¬û­à÷kgSi¡–übUËC?·I)jvCQYeòýO¹\D‡×\ÀïmÏ ªa-Rà KÖ¼^`¡M°öÖl¦}«‘‡«¼…´6²öÆÓkCî0`-þ…¶ÿ¯ÅrÀ°t=aÄ «	Ö„cv¡±iˆ‰;‡5)=œöA¥PÅ5†˜	™6zãDÈHj‰øNZ)Tr%‹QãÇÙy,F
˜ùÎÎÐØ2ó“²‰\X˜¬HT#„j‘Õ†‡èÎjaµíý°Z41VSy5%?>óÈ>YÝàó§¥âÍ=:qa¡R)õ‘mY•ÃH‰¼ËJUÚéi7£ÌöäP×Þú¼*«‘‡Ørh~Ïé:Êq@>=¹ø‹Ý¤Qr	¹à7´3>}öå²i	§zÍþoÌ¨mlúGï´†¡Læ°ÖDY„`¢¤ÃHCu-aÊzLWÓ˜Œ&œæÑÔ¸ÔšêjÄŒ Ûö×Ë¹I‹…Y‰Ô `tè= ØÕË?ù£ÒŠV´¢[Œo° Í0Ü!ïþÝ€Úã\À–Ž¨]}}e•.w÷`2Zª%„µ k„¾S½’î%D/¹ñÒÍvì~n÷î]Ž£X[Œè.wwŽYá´`xØd6? &bÛm0&BgÔXj§¯÷~ÝÞI_‹Ø¶5e-Qf-&óÄªØbrïµ‹×œÙ“
E±üçZäÐ0GDj¡¬=ÛÙ›e-`ëÖékõ^Ò_äòÅkg‹ã£¹hÝæˆåYŽ¥¼¢\,÷æJé%3ä“ùs£5(O‹H#á¡PJj±›­¶t‘ð­í$cÝ "Ò	Ö:èÚª7áÃ 9±­a/×ÁuLŸºpÍë‚×„5ÐXÓ7;’n{lyáQå="!£©s«y°ÕÈ¼¹^ãXû¶ihmF®ZZo‹äÊÿ°lÄ4ÈèÝïñaMY‹¨¦8%c‘€jžÿH0@g°X=¡ývÃfFºSˆÆ{>WÞxÂ ¹vWkái\'îø:îôÕ>n@W±	o/õâŽqñÐ4„ N¬µ­ºQäuZ¬·f¸¶!#¶±E´F»šgëºPÒ¾BOcÁ’þ•Z­Õ-4{O>kÖ¼{«ëq&|7q¬ÿ³¯–v…!ì…ÝÆzÝ&\KdB5ažAÍ;Íú\Î¼úõ»ÞÅ4w¡[0VSáLÿÖZo]Ëð>ÖÁy¶öTŽê^bµ!\ã-·$³TbË<0 ¬áÜ?;ûÀ¥mÃ—ÖfªÀÚÚv+}RhíÜ÷•£g¢Úw•üQÈ¸c<s¼0t;¶¡Õ…ŸPöðÁ^„4ïÓâšhTmÍ†(¬í{¹W5Œ2¤D¤©€MyLt¶‚˜íÙ4yìÕ\Óí|%]8Þ”Õè|DÐšF¨¿ã«¡«Eamõì—”WãàÚêÆê‚•Q›x4ŸŸ˜ÌöõäTôº”fÂºŸ’Øˆl2ì×‘¶t_záüKŸ¿E-6l UO`Òasi2qñº|Äî"(³Cl"¼	Äü´š‚‘çQÜ„p±ðš}Øn0âáÖï;²¤µæ¸ö»Y>Ú…µ&ÇÕšš(k	\«±Ú¿¸vW¬öo¼ERSO*kc¤[Œ›iM©íc%cÍûÜ÷Tq´Åj­hE+¶ô§v8mü©§`¥Ç%«=¾{÷SòÒ'[aMŽ}r/eI»ÛõèÔBôíOYÓ‘µ/^üâË'¯óeYl‚Æ÷GÆvýt¬Œ(—×5Žoé<ÙøØæ#à×î—ÅjHg®ÀÝÏ„´”³¾Ç¥­yÅëè)"ÿÇæÊ`ØzUìKœû5QÕÚ!s¥ÖÚ:Û–®aßmmO¯»Š<å‘H†‡*hŽÐ×ÒRß”‰±šoS¸X;du5Eðñ¢Ø×ž¾¶T|pqq)WrÒÒ¥²¶¡Èu^þ†i+§dÂ³Þšë›ùõ›rD‹Ñ¬¶-%”³X2w3¬±öuŒx´­þ¤š¡Z°ì³…™‹pVÓ7:dZ#õT{Îi¬ˆxRðÍ7Ož<¹ü«÷?š˜:{vn`Î} §­*6ËHjõÕÖÂþ¨9³Ô¾E¥ÖZ• ¸@ÖŽøi¬9žGe-QfÍF„kQVSDgU­ Ù SóÁ{rÏ¿fp\«{SF‡ÙÂöÆ#/²Ò»µÏmæ:[lzQÈ†°ô…/¹|TèÙ#Ýün‹¢[8Ù†¶f‰+›´5÷±ˆ‡ÕèìÕ£ZÈ‰4øÌ íë[_³àŽ%ì¥Í\ŠÕÈhaçØÂ°ÕÖôñž|$^c`â.ù$v"ÒEy!®Å,HÉkQYªÅ3k?-æñÑÁw4ßfá²±Ÿø£r 3íÜ/ùŸv7é^˜žž±­rÎ\¶­ÀöPÝ?µJ™ÝùÀì0îþóNÏ~´22;2³gÏÅ‹{$¬­]ÚŸtƒdõä."Z“°v€\;¹ñ#—y$tÀ‚»’uØ±æÀÏê`å}É£kÑ2QÛçÐAÛŸiþ	ù)†U3éÍg™¸,‹°6ÐÖFÓÊf(=?;P™Ø¹©ÀZ?a¬C	b5ö8±vhí	—Õ¢¹ºÚ'7ø!Ê'gÏ^9ûåê{ç+e„³Ã§óãÎMæJ”XS)î´*,¼ôùù*¹‘ØõW±É–'9Í&ƒ*­åJ¥ì$˜÷SÑ®>Bù<2J­DHã“”ˆŸä³ÿæm•`ã5F‡5a2]8Ç‹„'HšçHË7E5jæ/•5£µ;WY3ZKÚŒ8 EXknÜß¼vÕ¬Ù¿ÿrÞš±š<û›—ÃnXa&ÂaížºDHË„Ü‡>©ÌÒ}{«Éàå_´X­­hÅÖãŸ?Éñ4ªUSdAMñ0ÊÚî‡ŸÚq„Ý>X‰LÄ\g'^TYL±pÆ¸ßp­°vS´öâê“»~€Á¤„5(b|×X^&%ãGð/yüþçŽŒ‹¼€ÀGÜ3ãGfY:"£™±Hðv‰'xÌ=aŽpgB[sdk=wÎƒLÀðp.B”HÃ…?µ´gÏÌ½K)Ä4<Ÿ±»®dkÞý«hÃÃPÛPAá?àfO§ÕÚµŸ^c.ÒÖüŸbng.>=óàÌeR!9š&sÁZ-Ò°ZöPF$ò›ó†È;H-ç´F$qÍìûã©5§?fIkºIÀšñX¼ÕNo‰h(¢‹Î®ßß>þF]ìþÁ™§mîxžÒ×k‡kñšeA†ý…“o>vò£zuâõÅ/U§FóÓÅ’“Ú¨t5ŒK¤ù¢v7ê·cú6ÖUÅ.,¥L(Þæ¡¥ÁZ/×òÍÍ´!Ei>xè‘„µx^MÙÞ£˜F·øX“!¾¦)ò›…ã–šÅ×¶k;ÃâKYó™n÷Z¦Ó*pÚoláolð…z›ã†ýÊlmp¯7èjtXMR"Ý^×”Y‹Ú©5µxlM7Í­EÄkÒÏh PfÍW¢4-ŒÄ¸¤æ8çaŽŸ0Åž`¼;ÈqÖã¢! Æ‰+ù¬ùmŽd&¤£šõX›Îà¢Z<³öþÆÆÌ6•M1:¬…` ­PÆcûmI=ÓÑ!á¬ÃýûÉÖnf•Ne)éß†òÝÑ¾`Áa
ûàÀ€
fTOkSÙŽŽRN vñãÆ'¢²ÿJ›“áÛÿÍ§oúÝ£{ï×d1ï€ ]ÈmÞ¿qÐÏû›¹YÃ=¶äRfY´:q­‰²æ i-ÆÁ‡ù{¹@Y¹¡	øB'®ó™tav`8Ó™(U³…ù´Ua5ZÝ5>ŽÍ°V‹A˜®ÿÒšA®üMÕˆÒ™W¯þöÎ66ÎëÊï‹ýX´@Ñ—¤À—à|PR!eB¦¤p0c† i<CR¡@ÚÔìŒmJÆ©jÇ¢ìD®µ^Öµª°,G.œŠ¤µ$g@ØTˆ[ØoY‹5b4…±Á¦ˆ÷cÿsxugn8Ñ‹›M>Ìyîsï}îŒü2–)þø?ç®Bh'ås²·X®/Tgf'§éŸV,kÕ\¡ØUœ~íµþE~TŠÇéu`MNþÅžš<PÐàŠÏ="äriRÒÚ~«ò3yÏTö¶Ù&¸šÑXx¿ì#¬éƒß%òpfik@‘GêÞ¿A@\1DfIpÐBY»m?ìˆj‘×¢ÁHëvØ)«1ÖaÞq­•½#D3«¹›¿9Œ °Qk©ZA>XêÛ¦ýíhG;î)²T:$Z³vgÔ®Mõ‹ÚTEv@-×Jý2h,óÇF?¦„ÕÕþkêéÊÚŸÑûÈà ú¶IZë€Ê‘#X›BUS–ãÕžëG0¤}Þ`tK&ÞC¸nÆK„ûŒô±çÉÙ¼[)‘	¦¹g?Ó=EÇœ}«A·Ó¡nŠ,ÈÄrí‹ðYÇH÷Ü¥óY,Nãu¬¿Æ®¬aý<‘u(òyÁ ¦êë&*Úà„M›Ÿ0ZKû¹=·¬[Õ?~øôÙïÞyß©S‚5óáÏ`âÕVšeÝ¯»ØYdÓ•	§26UºEX3Á-†Õ©E‘HpN\št¹Lï‰°–ºlk¾³·Þ:ñyx˜,«óšëîÆÁÿá/øwxk¡•îCkB¶?ÆÒ½1µï>óÞ{/¼ðþ‘‰ÕK#Ã“r¼ÔL[šGØh¡åÏ¨»£c•x—­nÓ{OYñ°v}e[Ã#4XkÔÕþ›s9FcèÒ§0Çˆ –¥«T6±“C–¯v9sêò#ß†Éîx`ïež¹òÆjÜæð6vb°æOâ½@l¤BÚm•kž\UkØ8cR‹®ªYò#LÆÐôF¼Â£ã[ÜûcÎGŒø—åâƒMÉí›GË—|KÜEª‹ÙÑ2$¦ŠÖÌR«‹jšß€Ó¸\Y£Åaý%¶çô´hÆmÁóTjºÜMEÓ`×)½Ÿy„ÿ=ó:Íç™È$)RÝ²'''¨èÖA!”­-/<N¸W]•q¿­mÐgí¡m/aØöú)&VY•¤ @<ð Õ¦!	!Ùy¬Yó²©ý0›¥=*hÏÌ·Á<³F¿¢²Gª­¥¤FÜÿi±HâçÀÁ¡BŽ¯ì4Å6XZZe™n~²¤„öe¤6£4cµkÎju.†ný‘@äÖéúi„µ³.\ÕœÕ®|rå&ÿ«¼}ÿ’S§–‰ÉJµ€|6IGlOš`F3µžbjµ:>#½5•®Õya	û‘bHã6ÃÊš`í£/ˆ×3Mû€M³äÉ_7ùRåk¼‰·ò$6\#YÑ²%£Þ‚5…\]ôÙ}îþVÎýÀ9y¤Ê#‰i!ôÀøl-ÖˆÈiÈkvµ€µè-’¬®OpÑ¨©±:œ­¯š¼Óµ•Ö›¬_ÿá„tã¶d;ÚÑŽ{‰?¤Ëšû?ŽáµïÇ`ÿ“ÊƒÁMá0Bãþ1ÔÔµÊÄòÁ¨qõ#6Y£^M°vµY8¬ut¨Œ«Æ¨õBƒ4Ãþ¼Ã¦%¥±—µC.£DM&^Š‡9¡é	r3 Ó§qË2’ïqÊÔ—¦hyw¬6×}‚ï46wFX{>ÐÚ-emm.‹1X÷Ü–Ã*FÏ²øöË©¹ž3›~XskþÍýO~¾wÔ¬vg.CtðK
ç©>O.ŠÊÂÚãÿåÍÓdÐ\úâ}«ß©¨©³©hÔ¡¬åŠìÕJÙ
è<S©V˜Ëål¯{½ŠM97ðŽªEm-6Å¶I',ímãa¯{hm~ÑØ_-¼%œŸwÊœ3¾=ÜÜ½µ{ó¶§¡Så˜Z¿„ ­=ô“•²ý.¬öø{+¿ûÌûGŽœÙ¼i|rÞ**Üj$²”\H+ú,¸ýÃPXs^©ñà°ùì¨{Œ ¨Å®ØBµg…5c5/RƒÏìbüßdltöÛ~öøùž9¾¥ìæÃ^cØ¢ùíŽmÌRå<)2XûS¶&^kÀµ‹º`ÛØ³ÿr`µ+°š£Ú/œÆ~ùW®ð[mëã#êoI$-t»Öá/GôkÎÜŒÂZª­j¡jmÙ—h/Â¥IiX8‰Ó:ì®¨ž5ë°¦`ÕÌjþÜªW3Ø¡|§ˆLÏç‡‡!5½D*·ùnðÜÙ‘[@[Z"ÁúµqyŒœ¤^mbbaaáøËûª°=ÓØ;~Iãá0·ƒ€ÓÍÔû]’PðÄˆššášUµÑ/LŽçØ?ú·Äa‰~©ÑHj9Œ0t{|y6WÌ[!1JUFf"4W[XX®¬g2ãKJŽ¬×3|A§ˆlä‰sOÐûZYm$(jÌºÌr„eºþ¾`måˆ`Íeµ~rå±?¹zíòµk§Hvœ˜˜ÌÕzA³*ÐV¨!1•ªM×ëÅ^mÛ˜p„œä(×ÛWÄzdZï„Õ€5ÊÀ`¹ˆ ¥9¬qèR›(G3!Ô2››0<ÆÉÚÅƒ=ÈÌAªíqXÓÇÖÖç¢ÛHk)¬9–@cÕÆ–»@µk"¥µ¬öG-„5®	©E\K] Ïâê#àÛ.@—DHëh	§ÿ®ÍjíhG;î%þÕG5`M½©™ÇøŽ_ÐF>äW9é«ÕxqpJ2j™ûzéˆ=±´Ü¤¬%ÂÚu¾S½|õÂ
‰f£¥)kÊì5ç~¸k´†ß¬U‚¤¦vÈHdJõgèxÂ6‹yÔ79Hšpfý×,`:7ûçT(×Ú2!¶;Gµ-'æ:;æ (*Ô¢#áó¤²4ÂÚÚáµó]ÐÚ™¹ŽlAr£ý<v|hi(/·‘Ù‚µŒ²@UM–cÍ«å•o”ï4õF|ðÄ‰ÖˆØ[}ÖÎž>}‘¹a	”`­lQ‘k?ûn**ÌAo£³eä4½%BïæÕpå,Ò|äÚ]¶0¸cøq¢±y e‘Õxl"¸ÐœmØr­¼?öÖî-=öîóÏCkÒÖÖ(XsaÍ­û~—xüñ÷'VŸyüÛGÆij=±o¶Šw¿8ÍÍ!™ReôHmlÔŒ!1"5Èå*Výß¶Á’h¨í‰M±ý
iªZköôkQW¤æF¨Laè²5>¦0§çßBüâîÞÊ.ŸÂÖVWÝn¹•0~e—F~Õ\¶Ö,¬éÑq-‚Z4qUØúÀ‰Œ›pG\‹ÈÖoaÿÛ”Ïnyé+LáŠÀÆÊÖÒ¢5†/o„‚5M¡fýåL(R-++R["æ@úËDôˆÅGˆ"µ¼ŽüWò$y2ËcÉWÔè“'‡È$ýqÀ½û—q9¾pòäëZ¯Ö,~ÍMW{5oµæ-±Íâbÿçví±Ê5xŒÕý!&¸{äe^Üõ¹÷ìòï€¡µ43Èd¤#©¶öÀËyõXW’zL•m¾^'åŸª½„V›?"WµØN!ƒm—®Y­IX«Ûö¨™1w†/á—¿÷½kg¯ kV¯vmáÈÕ«®¼ý7¯\¹váÂwŠ´'S WÄÒ­ÖGµ×¬Ev­¯:MÝš¼ü‘Ô
dBÊlr”E¤ò «¤A
µ¬—3æK”«Yÿ:3y”Ë#ÁÆMíÃwXLRcòvåVÃ&Pc,È˜|x¿Ñ2Íl]³––«ù=FZ×«ùÕªf‘´XCëcq^»ÓvØÜ·"tQ Öªd-?Gð’5 ×»ª= N~Ÿ[«÷óíhG;ÚqOÆýøò—¤«É D1f±û*5lKóccê„6ÅÚØØèÄ÷gÕÌ2Í‚¼¬][¹zù*ðP®À^%ÛKš#”öÜ`K‘Á)ù™P‡¦SªÕzzç¡ÁC¨{^£Á½ú*Ök
šXMÇÄÜ1)RSÈ›ïÑ	2‹ßÇ™Í Yä§kø/ŒzXu—pâÏŸY£ðÃ¶?G¥~ë>"tQE]+Ð;O¤~N«üD+UëÄuM%lþÔ¹‡Ö’â]žlùõ¯Ãj‡…j$Ñœ¾¯˜-i{M†Eþ×Nk6e	mz,câñçél”Ð-Ç!X‹ÝÕ<b"cÐÄt‡‰÷59?ÚœÂZd5 ÔE‰mÈü0mËØ²uëŽ>½ûé5¥B>D¸ÇˆXíEÕ¬}åÅ£ïkh·_?5;ûþãÏüíìSÕÎñ‰Y1ƒIÁn¦²ÎjÖ[w¹ÌJ¿)ÉŽÊ˜`ÍôÆ""ÂZp‚<+eáÓ uy¯µ€k¬vÝ­EˆuU-@Y˜|Ãˆkäµxµ8døýÛ§¸ô1=fÕ¬á‘±…›l!/ÇTHÂu5®DZkPÖ¢°5µ€jÜ­ƒ5ÅáK 4[ýú½ÈkŒT[«1ÞˆÊZCÍÚš®ÿS°6¸¯Tê™ú¥Ùÿöì£%¤‡ÿxBƒ;ƒ1$iÖT„Sƒµñ‘!s¯-Ðw­£0Í3¨F!ÖîÝ°Ú¶“Ç_?y’Ö`'_?>q'H"*kDƒ²¶öONÌ/}Û=»PÎÌ?´ÜãP”Ö¬W˜u§BaSõñ ¸fFBjZ}›[QZ#Ø|Xë¯ó¯[àk(íT‹dõjC$.²@‘:9·ä–x¬‰Ó"«	ÖœÖ†Åhº©+«œY[{óìÊ©ïýðÏ?ø`Õ®äªGVnÜ¼q‰mò±™b__Ëa¦•Uh~ë¥V+È:îüµÜÒ+ÿû•:ò'Ê¬šMät}¹ÞÕS ’®ë9g5T5š­iRç^<üÅpBañ˜˜-üw0aÓP°Æ–_Fìßã4¤AÕ°Æö6=±ƒuSŸµÖ}±ÓDH»¦–ö"·ÓÕZºößFWû\‰¹w µ¤b-e5Âv©Ä£)=’"KKƒäóTË»6«µ£í¸Ç’µr(ƒ×Æ­Ø—a'lüË‚µJ
Û!¹ï¢¸˜ýþÉ¨¬9¬Å,ÈŸ\ÿùŸ}°ø7?Z¡J­Fï+á_m~…jÀIŒSX@ŽÁje<F¦`5þºðEq€Ù!×Ìî8bÖ"
¶C.£Ái:±yˆ!Côõ¹$÷½8AvÐ¿ô‰Î-‘ž”ÿøk°6G)ýWÎtœŸãû˜lO® ®©bmf3cÈÂ0ðkÈlªWË1xE°6.um)‘ú&)“ÙZ47Y3ÏÉ@5âìaÄµ7Ÿ9{Ê¶ 9êÐ<dý§ytY±•G%²Ál¶†"•$(|óMg€5f71?ÍAXKLEÖOÒò5'=FÁÙì{5ÁîìÞºï~{ãömÛŸÞ:²ûauZƒ^ß¢y$å@¾û.¿Á¨Y{fetfõÛ_Ÿ¥Óuu–¬aÊïQî(¢£œ2!2¨Ñš[.ð=EkÒ9…¶Mß¹XE¯|»Ôl„HÜE…5l -<]­ÌªÅ5ÎŒDyÛââ”žqkúm\ä´Tas÷È`æ¯ª5ÜûcÙšº­É½?MäŽÂZ@5÷Õ"£µä´TjK‰Í7IÅ›ßS^®¥Ú!L{Ã•µP®æÊšŽ}ºU³VªŒ•³ÇÌ–°…„ˆÆ°~¾þ?_œØXI›t4+--äH­ÎóõNðFeÛÈî§¥°kÓË'O¾†ÂF"äÉÕ3+jŠý¾wªL•µÿ8¡©„ŠÉ°m×0¹A&çîÉ“wþ²ÐÊ°fÍšoé<`]‡›„5†O)­%ÚÃ'‚‰Ø3•íÈ›g/@
?47ÁªŽ!&*‡xzÔŠ¥6€iFiš"«Ah
pMÁ/ØúðÜûgVÏž=rêò¬‘ù—AÙ7xäæ_\¹zãjnftj~ï|™æmRÊ /RKÉtœ,9=ýÚrQÎ"u=ê¯Õ‹u`ÑœS‹ìB/ªÛt±ïU•©aÍj)X³ÏÉøÌ9f‰Ùkl³ú±Ñ…-´Ç6X{Pbç~©iT\YðY·‚5"é‰q­5«¥ajšÝš7ŒVœF4XA¦^^¯vû$ÈÖYŠV¸Æ½a¨¨’´]`w—=ŠxåÔ²ÿËmVkG;Úqï%k%`­¡•Êì¶©ýS¥A$š*ÛccýLƒÄ¤œ™d«&k?'Žô¿¼OêÅ¨Ù;”ˆ~`#H¢ÜÕUCU+ƒV$;~ž\Çž’8MâFö£…’#MYónk<÷8ã•(µ›EXs4³cßÜÄ–íììîìŠ°f´öü7ŸÖ’¢µ¹Žó÷ÍÍm¢&7‘lO—*×HŒ´>kAY.›.d*øÈfóQÝU±¿&ÓˆäšNëo}~nMfõ·X\Y[ã›žÞTFÅ[=+XCê”¡ˆRìJPY%ÆÅæ!CÒô5GFYsp.ÃÈ[KTÖxò8ïæ§º´!Âš¨gAZKY¥á]ÝÛ¶@k°ÚÈV~\ß9¼M&#‚5‘š9÷ól%kÐy¬\|áâ‘ÙrqFV3fß_&ÛË, «ä´$äd^ÉŒ’ÙáíÃE½f;	ÿ`|2±Ïš9©Áˆëj‘ÕˆjÖÆT#"„…`ÿ?4Ç§@s×°¥I’l7‚7°Ûøø[”ãRr»¼!][»Òàé%kàZª¬]²šóšªÕ® «	ÕLW»“HQ-MŒ§öD$F%¿?‘fBz¨h­)2Ö¬5ú‹hÖ²Hî]ÅP›©áÄL_Fl¾f¡?ö'ËÒöy¸†õ<½×”±œ«tðÕ‹Ê¶M9ºmÝ´6€ÃÈÂø BÓë¯¿~ruuafâøû‡¯&vºšÙÿÉ‡þÀC#’Ö¤äÐãšª5O„4ÏxuØ°ÕD!œ!
ŒI<(v#)2êjéiµeÑšÇý¯v)9B¦"]Ô«©óôxÈ#þ×åŸ?4L†ûxÝ`-KâAZ€o7¿~\·{]M×­˜Þ¾vf¤~ráÔåS×þü‡©fØy….ØoßøÚ£7¤°]Èå&ÆpÎêê±ã¯//#›-MNàÙ2-™M\F™Zµ:™Cqãáj”¯-c Y+Nçj˜EööRÞ·÷U¹ˆH[s½Ìõ3ù„¸†Æsè”mm°ù¬ÍxE|æõj.k
‰…jÈCŠðáY´RÖš…5ËJlU²ÆPÄk6|×Ò	Ò¯;+X2rYƒµ;O‚LIí7²ZZ¶æÆ"ä=2«¿„² íÈd6ýÿöÿ íhG;î©díkcc*XC4ë,ÕJlÕ
m
£órožØSHj¦ä©GÇì3¯Ì.¯ÛößX-5îÿùµEä2Ê¦FÇÄw(iSl8’ÿ|-«`â§Ò\–Óè!FãV2›òM)’±ÅZ 3vi±ZØxÜK>d‹ÆÈj„±Z³y¿jÖºÎ¯­ÂÓ¸kìMCƒßpñÊRM0n¬ÖUä¥lAÍÕÜfd(ïßu[Âeê›FX/·gŒÕÎÎÝ—;o°–É!Æ‰ÕÄÇx |‹êS˜\PK#åµ\¥èVýç59šEep³á[í;|d¨ÍçëžýœkÓø¦PÑ6²}s÷–íÝ¢¶‘-»¶ò¸Í!5Â`í¡ð‘kªYƒÖ.R³öW3•\eßh®03S­”gËd‡JI++øˆHëúKqµŽÍŸNð‚tY0XÖýºMS³éhì´ö£(¬1#HÇ˜fH‹Œ–HlÁ"¦5-ºÂhä³ø”’š"QÚ¢òÆõÿÒ|Ò.Ã5·„Œ±ÖÍÒ#±‚”¬&R»Xj÷ÿHm6‡Ú5nqj8ø}ã5WÖ¢}ÿÁ¾Jóá—AšMŽt‹ÈjŽiDòÝopê–ÖìumkvJ$ÄÆ{ŠHnyÏ¬,#,Q²6²}ÛnÓ×ð9ù­¿}mneaÉ’ 7¬Y;«©Ï³lC#à	ÙÌè€mÔœ×Â‰¥â¹¦Ýê‰ÝÑ`DK"¬¥âZL‚üò|O_º]êO“)¨»\¶ <¸¤4H4EN
(_9Z¯ ª ÉÛ[†Æ‡ÖY­‘Ö©q}á+ï/M,¬žýžwXÓÞ¾qã“ÜÊââ'Üäº±R˜~ögµò¾Ùòc¯Okä=VgŽ£¬q«KË„”5=étäRfÙ¼¦V4Zëªííû;àQM}ö3É.dSÙCêÃ48ƒÔxŸ	o¦¬±Ú±…;rò‘ãÀéÿ=nk)«AkwÐhm]Í¡Í§ykTÓQ-‚šÖÂZêÙèÛ¿Ñ2‚š¶¡¯Úç˜P##¬ÅòÊ]Þ%°Ý»íhÇ½
kÿrL°6èÉÀšxŠ=S•ò „T›ã¹¿¿†GúÉe‡&¿ÿÊì÷‘ÕiGlÁÚO®_?‚H?Â}ÖóºP Af=]ØB–A7v5@CÉkój§†ËHà5G3—Ðó‡£±¿õJ‹¦Ø>‰Ñî:2ÙžŽÑîã„âÜŠ {¹ÃHGWfnÊ5‰kù"˜–7Ï~ð—Éë„5Ø¬PÈXrdÝR ‰MÔBdÖ>7×ÐiÍ'ØÄýEÖYí‹¸ðŸºxª£˜k(J¥ºå0¬}i?jcå.÷©eBXÁ|¬syÛ#°¨`3HiïGNo<1œ°Ø²27E
k›#®1EX3ÿ~æ`9<°­›¬ñF²ª¶‰ÓÎ¨™.jï>ôMÁ7´•5ì ‡šüñgVf(Q+vVgáW~èÏ?˜”3î$"¬íe;š“ÀÓØuÚC3¬=ÓidÖ"«Ô«jÖþžÈ„Íþ_·SdóH…¶¨³…%>Øš^Í›°·æôâã=àZ\¥­qEiírH…4ó~]‚´î.ÂíqÅ…5r ]U»Nc¤R[K3’412>ý£ÉÊ?­[s\ÓåÃF8ºó_¢MN–§±IE„5U¦…ƒè³Þf>þxá>BF€Û¨VeÅ1¹0=d&#Ûi=½P_þÖ·ÐÔÖÌ¸ÿ–ÁH“iÒ™á`–K¿Ãº[¼’î$èÀÍåj°!ˆð—"¬éá–6#Œ–ÊÚ¯¹Aîš"!¢PSaÛB®§§˜'ïqyd\>¿ù¥¡®ÞZ­á,2´tz½¡a­›ÛcHW€µ˜Yß¶véääÊeXíò¬D>¹òöÛ?¾rµPyôÇqóÂcåŸ\]™îÙÛ3ùX¹«:ÝÅß¸ŠGmâõ“KË¬{{ °)š¶·\ïëƒ(ëK¯½òÚ4îµ¾Ú«ÖcxÆgŒFFlyŒè3×™Y‡ð6k¸ôæaž.à„FcÊ„!±„¬†jwÜû.!›üEZZe-I‚LÓ wtµÛæ@¦>iÍSÄµjÎdj+A/@³€”µv¾G‰¾íkíhG;î=r~­ïÐ“Äè¬VBá’²6È"Emoß|°m(—Ê±öFÆý:võÚ£/kåL¹iS4Á.‘÷ØÿÜvýæå;`Ù¬• . ,èj;8Æ¾ßû¨…Êâè"c¸éHVƒÒ¢ÍÈ]±Ú¹­ÙÎÕš‚sW½`­'³óÒ™d3êî•A“ãß­ÀÕ9€Ô,!¹Œ5Yó$È-V5²$õ]”óAç¹µsçÖœÔXn‰w¬vúô¥û~ZùâÜN(¬X¬Q’VâªP®†\Y¢D­4Zò$H„µ¢¢Q<ªŒ"Á¬Ag™Fe­¡U¶4ÚBº˜ö	¥u43›ÃZ~*Õ6¡ükêÕH€ìÞÆÌ+j±»{ÛÜä~=vìÝw5hMÊÃ?sîç÷œvñ½owÌg¡µr¹ê°˜#ý±¬a>R¡`­8ˆäEÇ4ÙF]-ÃƒLƒŒ%kžé“‚—TÚÖ\°†°æÆ"QSsN‹Ì¦ËyÉN›®4'2)dc$hÖøØ8’…ÑªÀ“{Øâpmí”	©q…h²îg² å¼¶ëjÖ·­)þñÄµ4ÒG¼xJ•5Ÿ~çemÍ¬Æª!›9ª%YLâ5.ÌEtýÕ‘ð[\K¶\êb#…56Ö^­3ü
¯Wµ³6èjÖeƒ1Þ‘Ÿ.ð¥£çâ……úˆº@«‹öxçðò·Nk§ë‰¿HÄ5ž€5÷Š‰ÁÂ1c‰ e [D5Blf'(q¶áêÐ,†0ÿT]KkÖtÇHÍ ïÿ»ZON^"ü{AlÅ,ªb¡ÈŸy\F(=V¢ûðpx	¥¼dÅ+ScÚ×ˆáí@ìääÒêêê…ËÖ._XühñÆÍ›?¾ùÉtãþ«ÕÒÞÞò¾‰J/¾õ"žI‰@aÓÄëÓpÿ0=Ulú½9ŠÙ
K¯uÔ·"é.<ÈmŸÿ\˜Ëýw¹@~úá‡rc1Ÿ–/ipåé#„£Açv,ZEiz¯5lÖð™ÿæ›Ô[ñ`¦ë”êŠý›² ÓŠ5±“Pjã4È¤×šÍ-ahøÕA6‘ZH€tN»­»HJkŠÀòº’Èx!Ë@³Ÿ¿31Â±€¦Œ]®Yšo›ÕÚÑŽv|Xû÷ÀZ¹Ò÷Õ')+Cü*Éá«F<@Äj »17CŸ­ôkV¯ÆØ°#ö×®^}´ÿåþÁZW_OW	k¾‰.w’?ÙÏ_VÅTTôbÉKz t%QMªž‘jºÆq½G¶Z`ÇCýRžÓ Æ’xBÞ·e:ñ‚4LKa-&B
¤ÐÖ:3;ÏŸ?_(ò‡ùôxÝ| ¬CKk¨j…ŒæqÔ´WÁ*ØÍÂÂMcëÚ‰ÐÛ#Â´Fœ={öÒwÞ·ºó<ÊYIœ6:V*×º€3QÁ}¯/2îÉ6gä–EˆsTiÖÃ~Ášc‹¸#¬iÁ,ÆüGMo»u°Ù"–toÙ2²…Hr‘×(ýÖw?[ àc¿üî±ùFO°¦ßYtÄV «ýúÑ7qÇ|ü…•™•ÕGWVŸ5cŒF:aµÙ\ÅEÄfiÅš8µˆ9Ú”Ö“>µ3>kŠ‹×¯Gó~áZª«IX3eíú3±Ãšû@Âjiúc¤4íÂÇþJXNj‘ÏüÅ–¦#)¹%§î¨æG-Þy×ÔæÚšX+6[‹æý~5êjB5]6ÿ¼]Âšµ·NP-Lw	l¾6áZ<ŒðF˜"ªý®IÐ×‚)d¢¬½´µps2!}Y¬¬ûäØ¢ð†5ÓZÖÉ¢–¦é<‹í9?DŒlÖ~xˆ§¼ikÅÜöå…jØä©%?°¼|æÒ¥UZbs–Î¼¿¨ù¡>5¿BPÂJÐÔÝ‹@¨jê×{-&F|I,çvz²ÑV°Æ,Šhaàv‰º”’p)™©áë›ÏKP3q-Ã“œ¢à­¼Vºz2Ã$L rE”µBOv|HÖ¶D^q\smX›žœœ^¡çõ©«W¯ýðƒOŸúèã«‹ŸÜXÁœŸ<þˆªÍò#7,½
Ko=µ yñ·¨# MVsÓ“ü|M±é0)Ý~¬‘üØÛ—[zm™'Ì k+…Rº#ýÆ÷ão¯Ý¬EÁâžþÆ6À7ËAŽýÄþ]ð°ìEƒ¾ô¬ÆëÀúŠ1m`0ÒÜ;í±¦û6ÂZ‚g-8­µ²Ä»¦È”×6h†Ý²`û7¬5³khýg;Bª¤¬ ùèü÷*{ÚºZ;ÚÑŽÏÿâoæQÓjÀ´¶ãÉC€P«Y6¤:­Í“)w‘·ÏšyE9QXK`íÚ£—¯/*ó2YÊóh«6Õ•ÉÖúûÇjYûf¹¶2S¨ƒ°E©ZÍS 9KJÑæ5^ÇÚ¿ñ„t¥-ž$Èíî´5QÚ9››"m‹}éô06<›p
Ãô‘U}±ÑÑ:¸Iƒ$(€(täí›'JØC½¿L›Ï=|îD³²æÜ ¥¬§çÎß·ºzþ§Ù²Ñ™GQV‚±qò¯eŠž÷¨
¶ÑŠþÒi@j²„k*Zk|0mÍ‹×Ûl‰ˆ¦•#ÍDkVóôG?/Ùf×Ö†íMÝÝ”¬mÞ´VÛ2°ûÝŸVëØ5ô³c¿üå±c/*ò› ›ñZÈ‚<z˜8}Á³+§¾3£4H`mtßlŽ°ÙÙŽŠ5Wc„r5²D™½?0)£x˜7–ëTSØsÂjjŠ­Ë¢±f+Ö«Eaí¦Ú«‰¨"ª5d?ú£n‡° ²±‹åiÎr‘Òü1mÍ¦óg°[+©-µŽôÅ·Ÿ±e›xê¦!­l­AZ»H"¤µZãöY¨Æý“€jôVÖRPch¹}«aMûh7Ø$Ìo®ìþyiÍTk¤5E µ «1œÓwƒ$ç·Xñ\^¢XË6¨h·,E´†}Úh‘ï{&Ý
Õ´ñÓ¦‘n³Í‹ÕèÚŒ·H}|˜ÀËhd ~9ƒ0¾³³{í0ùÌkÞ[Wƒ´öOÀÚ‡?`k÷Àƒ ƒÙ[8UhÅÞ¢‰Õö?°Ç·^Ó&R3ß~n¦èDm-é¸ÖZZÛ5†#~½Žk‡Ü¢[rF 4v™ñüÒAr"±Ë'Åâ1Já²HjÍ›»BÓ‚µ…Éã+++‹G®}ðÉ‘ÅÅ§Þzê£ÅGö³gGß«}çÂ³³üs_­V-Lì{lZú®¥œUÔ¬Ig“™?ÜÆàVµ\ÍÜÞ½U2,9GtÛ«ŠµÜô‡û©WÃÁñÒ›¨ùlEvÆ'­•á›¦—ÔIÍÞ¸V3#²² ÅkÆþAÇšµ4²IXkò‚ä¾£,Èè-âD
ii‡5›Bø?IënØÄí“ c½Z+HF 4©gljÝ¾+”UºE°¦Þ6«µ£íøL%k$–ú¤¤}•²µ'ç§pëç™ Ó˜ä¯??ÃÎŽÎ.	Õ¸Aµ4X;[^ùùµªŠª°e¤h«»~©uÙ®Úà`Íss*£˜Žôxîóy0˜«O‰—Šù&ôRlÞÄ=•Â™?ê4m·&M3ËÝÂ\¦AœóÉ#z÷+Ö.]šëÊn>ó…M=”ª©«Úxa|	hS6äVÖ<hÂÖ‘u`Év™ð³ìî¹‡O$}Ö,B$qö´<¥=*JÃ4è·Â†Ú*€[¥dâ¤Df_ÝYÞÕÁÚ::)[ssH2"™yr«-¡2-®F`Áw<ÚšÛøkÖÍ…¬6Ü=´mîæ›½§_üÑÉ‘¯kßýå_{ñyj³ö"°fñ®² ~ó…ÕÓožþÎÊ©|effbVíÕ¤¬Š£û*å±}Fk!úÁ3Ž¼1x³'f(à‰O¶¦°tµDY×6Ì‚ÂºÚßT³ÒËÎì<“Æ·êÄÌÃcâ™¥E*k™éSd¶Æ%lÃ÷ÝRKÌ„TP¥pi:#ÒCÖBµ†k·XíƒPí.}!}›#NÜÓ˜R‰HÊØtüÏ¥¬%eko‘Ø[÷ Z¼Á2_#Llç®TêÓÂê»hIhkÿ¯ç™Í’3{©Ìªmãh¸“¿&IƒŒƒj-†7É´mîÌV˜Í¾>†¯iQZûO_–¹ü§¾„UüýˆkÖµÙ% [UA¥`öÔGè~Ð,JETØ$¬Ý¶9vÄµˆjšuÙø0S©ñ%Zæ°_¥;°„r'ÿe­¾v“ÿˆ\W±nj#ºZ‹0‡µ:­®{laåÈâ;.,¾³¸øÑ7¾ñÔâ'WnÞXy´Üû³ï<;[í§.|pì±Ie<¢YNæèº†)?ÖÕ®œØ­HÙZßÞûBW‘Èõöær€c­–«ííë­õög^Ú³Ç½[`aÓ*a7IhöQòÑzyàz¬“°† 	«ÓÚƒª£Ý±š÷Ã¦tM•Vè—@’ú‹Ü¶f¸½dÌ‚¼×þÖk1¢²f‘°ZŠj”˜‹VK¤µû•µ¤ö®ÐÝÀÀbs^3TãóÛÃoä6«µ£íøL%k‡àš­ÉdäRá#Š×è¬ö¤x
½M ¥ök£³KªX³†Ø	k—ûÎþÙ
 ¥†m]];^¥ÃÚs%Ìùk=öíB±¦Ò«ž`mñy@L2™ÃPh6/4ºAG6îÞ$úl’5IkD0íg¾»èê†ÓUµs\Šç•µµsks4åÙ44”‘a?ªbí<Tç|y@{wl
 ˜­>mÜ¡@³Î9ÊH¨š›ÛkÖRVÖŒÖ.7c‘QPÍ”3ë4NJ$=ðF‹d8Bi„|üß*™ÖÖ«e|ÇAÌ}l„µHaµ\OsHn‹´çZ|k¢ÈFhkkw7fÅkl¶lï¡‚­sÓ¶-X÷S³ö×Àrî×Ž;vT=±ßüúÅÉñÃo®N<[­.¬¾wdVÝ°«r·fx5‰kå=éFs®0(=Ô¥µÄ"Óæaízj/â”ö#¦Ðû™¤ÅšõÂnPÑâVÌ•dCFa—}CèMz´CÂœælþ"ÐìqÃ¶°ïñˆ –ÅÇ°ÜUõZ0AZ»þ“Àj3Hí"¨Æ&öÂÕ.ÿê:küŠ¨«‰ú|åöÙÆ=“[D6AXk6®”ÒÂùo•Ø~‘JkŒF‡@M#€“]¿^³¶(5¹VÌfUÂªìckµ”ÖâC‡ï:›dµMãÅk¶Áhe:6Á"‚5b`v»™†ó»+ÖÔ:ú‹œ8Ñ ¬-k_~@­°‘ÊTˆD ó0lˆG$ð¬!óˆÑ¢XáÛ]©¤ïýnRÖüŽ¼.¾ßC·>-h-—/˜KA­†Fê4W/˜1æxah÷÷ÉÆ¿0­
áZ€5yø?á±õ	övæ¸6MõÚÉÕ#?¾¸rañO}ôÑÇ/~ôñ'?~ûÊÊ³?%¯}f²
‡kƒOÍ€_¹J­·†cHOqršª´bN”ê€öÕ¾Z¡¬Uùûƒ(l5$5ªÕ¤¯Õú=±‘ ÖÜCDLC´(tª×™¼$ð%Ø¦_/Ó4LpMÙ@š»Aª+dA¶nŠ9!%^Œ;i´¦‘†S]kN‹®ˆj0ã¬¥ºZƒ°ûñ¥®ý÷ÛÄ |‘¤Óšª×Dj%­7ûi×«µ£íøìþ"óÐÇà¢C‡(P›‡œÔÊšGþáŽÙ}£3­‰ÕÒ.k×/ü·?=Ba²×Øhip¬‡|Gþ:%²èRd”2™Y?î@/Ó_ÞËÿ†ëØ¥Œ›‚ÞxNX-0Z ´4z¸ˆ»B59÷Ÿh"µsç\V{†‹°–é¼4·ùÌÖqU7Ø/TûÔ¡BÎËÕ(a3&“µà¬eÙ
àXý‡Ú›·l>ßýp“oZ4	¬vznç}UŒ3Ga5 ,kÖì¡h‚«ž+e½§Ôµ¬	’mí$rë?LGCëlòq^cË.Z÷ë5À-vÃŽÊZX=üQ¬6û2<¼‰=¯ˆØ8ÐÓÖözyÛæŽüðÀŽý5iïÂjß´,H,!¿yÖŽ¾°º0¹zzu”kÏ®¾1¡LH,¯«£eXMˆæ-²Ç<’ÜÏœÛªÐð¯L'‰l&GÏƒæv¶øc3¬5XAZŸµÈkM±®­k&«aÍç@g¶1ä²}à)EŽ‹¡."MwŒKŠ\á Ê’77œÞ³Z·¤5«Z#à™;‹Y/JYÂš;AþâJâÙ/p–Z‰¤f<ø XBN¿ëøUˆ!#±EU¡ ÖH7§-vVYÓÜPÙEØÄÕŸ©ÍØ)álý…aµ‰ìÌt"P¡w­aà?œ¬©`íÌ™3)¬eí?ø”\=\øI‚D/×ÔÌ9DD5Ø€5é=Á«AßGn{à7Ô¬µ²ƒL«Öv½ŒŽF¡rNn”wñ%ZA×Rýq>‡Æ–^ZÂY$‹ÚEéš²ÖFVó Ø\]óTÈ•³—O-?þÎÕ«ï|ƒ,ÈÅÅ·þæÈ£7nùZù§RU›-ã½_#½4{¼>Yì…ÀËjÕbáäta²Ö×U-ÖúŠzO%­Xœ,LËÃ¿Ê;!¸DˆåÈs_òÎjÁÂEXÌbV"Ïîÿ(Šã¶Ùµì—Ë0'¨³Âµ@5ikn¹ËaMn.·ƒ5"qî÷H1Í¯;û]kŽk`cjI´ÖÕà4¿"µpm@kBµÄñQ¥jÒ"A6n‰’Îj–©ÈýíhG;ÚñJÖ¾Všß‹¸f–öèÞý/÷ÖmPn!½¥
ùòå}£cueAº®ªydTÖ®ÿéÙGGK==}¥þ1LEJ=SèrfR©¡Ù•zh<fehó´º~õÕ.9¬ùþ{¢/dA2ˆ©ØgÍY-ÀZKŸ‘»†µ®M›3=][`ÍÃ¬)vžß²óÒWÎtSé  ëÉÂju‘›x/7^`''ÿ¼²j6å¢T¶d5Ã5h	©	¯­'|ÓX­;@€µÃ§/í¼ïÒ¥4¢’ø¬VÎbñX*É´Ÿ­ô2/_ã%¦b6-W¥1óðDé8ïLæK”Öá;Û;žY8›Åˆ&",šÂì‡®¢…ìGVn‡5{ÍaÍNø p”“ÆÈ›Æ—vkJ‚Ôçìvö_y—.kGWgÞ{oaza¦RÙ7»0c%kÄh¥¬ÁoÍõ²5Véjð¬7gä3“áÊj
Ï¤=øY;–Ô¬lNk!2*kê°æÂNÁY„!eíé)ñáÒvþÇ¬¦·4š÷s‡}sïµ°$	’‰×H|²Ç´ží³£[l¹æÊŽ†j6cÔÄkbµ(­…Šµ+¢5§´¦ñYââ®ŠKaîwß~íWv¥æý¢²àÜÏíWlˆ½®¬õ÷›‘“U¨e#ÙÈ+þÔ%2ýú#Ðùæ|§L7èå¯N‘›FdÚ/;ƒHlÀÚÓ»Ic>øôDkÊ‚Œ°vÎaÍfì &¨ŸÊ8Äh#ZÈ…ôG!Æ#f IIÕ~PÍv!ÃL´ÆØÐÒ¯¨¬¥ÖýföwÿK9épžÈ\V)°YÈËçc ÷üÂøpÈ¥z>ÛÛUáHm¤B9Jkë¨vî‰s·x³%B.úóËŽygåêâ;üÔ7Þzë­¯•n,¾õrÿ³+‹ûö½õ'ƒcSXï÷•F÷½3]-ÏïÝÛ[«Ò>²¯·˜£Å	‘ÕboµJÚ#.4Æ®c8¢®k=_åäCòƒ"¬Yušs/‹v@š‘û¸ù’V?R…š8Éœ6©”Ëˆh!Z»kôKKÖXkÕfY‘ÛÝà#‚ZÂi	k kÈ€dº»H¤µÆŠµæˆìÏÆ¦¦à#‚Ò4)m”U”ÆgÉDìÿì_l[×µæ˜·¹ƒ; mP…1úJ–à‘”Š•¢(ŒdÓ¤lWüG¬¨@V´;MíDŠ¤“ÆµqÜÞV¹H&‘r81‚È€ÝA´¸à£	‚ Es‹	Ø§ ¸íãü¾µ¸½ÉSkœ´yäâ9gï³I‘î©ÄðÇo­ouX­èÄß(¬ýÍÔöÕ¬ËY¡kÈP±—è…‘
ÈÅÜL™êæâ“—.^’¦iíÂÝ’µ;Öûíz £žª€¸$—3­ÖSë¡’MÔÕ£Æ£s,Ê]„àV´|ÌårkŠ!ƒµ×úB^$ë6:¼mmÞŸaÿªÊÚŽÇ·¥S»ÞiG5Æ‡hŒ­ˆEk‹;vò¹äú6 óÐg^ÿÏf!7ùªèC?D´1Â ÖnNc)¥¢ˆ´³±¸ØM—5w	¨–TÖÞÖ¦†o¯–ËÎb<w±,2k1zËVI‘œ(³œK>Ê²ÒôÐªHlƒ‰jŠVeÍ®<‚¥pw[µšÛ.¬eñLqZˆÐ ;jp‚5{
Ý»¡µíGÚ<r}çÈôyT´û_~U]qá;û‚µ§®¾ªvØW¯ž zò˜`ÍãL8¬yøXÈØp^ã›ƒB¹Ð;àÊÚ]«…æ†kL5ÜtRk£5µhiMÖ‚²æÂÚÿùÔâþá'mÜÐŒR„ù/âíÿ²³æÂ=IlÊ®›¯…9?A$¢JËƒÃkñ
!’9á>M˜±q GÚ/þã·Ü>5ZCXCZ‹Þý†k„QXCYkAMúí~›à—_ŽI`MûÚo™nM@þD¼Óp¼5ý¼•<eßú~ÎããZ#˜÷'”µàÝ³ =Ö
#@kÏ2&3 	ièœ%hÍø,@ã¨Ÿ±YÉšHm”¤eÆ={úð¯Áqz°oWßäùãê’}ž÷,Å‰¤²F‚‚;ŒÉ	Bº/K‰Øk|!2³ìGž´æý°Š%À6¦¡ËšÑ’[Ô|K:B¶W­Ùd¯$Hò:SYk†©“iÔ4’"ñ}L¡£1Nçi¸6JºyºÈX­‘ÕÞI¸&uM´öä«XAÞX~wåüE(Y{é¥—
«_¬`Ž¼°¼Z(¼ôÒåÞ¡™j_H{/íËe?và‡éž–åR±:/åìÕYR0±ÌÏëÅ/Í¢±åIŸÈåUÔ6û=.P ^º¬Ö^‹·ãTÒš›õkÑ´‹šºÎFgDjÒ.›Ê¬&±’µk[×¬ydÒ`$©¬±%ckCHýŒÅÖ¸–ÐÕ$ªE‹‘	TK¬±Ñ·?ê°I{‘pœ¦íòå.Öêê	Ö0ñgúh‡Õ:Ñ‰NüÍþ"`àH•{UB6‡ÌFrbo/ü3pÖ›‡«&&æÇ.ÂhÀZÈ‚l-Y{öµ_)²^-õÒöQÁ<Ar†ZTA—jfê˜É”À6ô0¢Æb3¡"Gr-°–Ó’=$Ô¬éÑšâmÛ3_5²dùyÈ´41€5ÑZpÑ·Ç·Žl^ß<²»þ<6JÉÚ4¾V«ÆóäÓ]ù¼D7Ã§í¸Œa¨†6Ql[\¼®ŒJX­]YCZþ":b02:O“°ŠXÍ‚þ"–ð˜2«GÈ¸€·HYK­†‡^¸âFo)5ÕAÈa-p[‹tæB[ì’´¶ˆ]Z	‡dãµ¦šÆÑ`->Êô4-:îìÙÝGõËíç>8ñÐ®íã·eùüÃç×ß!R¸¦dHóî­]=¡¾ùì2	Oà §Ae¢¶‚sG!zI‰ä#,çöÕ6c<WÖRaâØæÊš“š6TµÀkÚmö"Ÿ†’µµå»¡éÊÊŠËØ(~ÏN·¥eg>9óùçgÎ0°ÂQ#¡‹œ*4„`êKñGÂ“(V>?Ã)«šé9{ ¯Åö¹ý´¿„¯¯ú=z†ÕU-Å—ò]÷4çz¾OV-ôö2ÍWY]çÆÁ	´¦¢5¡šnî‰˜&RkŒD/HÜE”	­ýaÍžP/Ê §[q^ƒ]ëÜ£õðOú|aau…‡qß'ü³xÜÓUûç4’7îÒ³¬®ßXç°¶¶ª“µ,rçúÚúÚµuîaX^c´;oÜÀÅoeÁþ‡-¬k¾ÌòâXçåy ?°Â‚baÿ_Yyí«üôº.
÷ëÉÙõ
¯1á¯Ý¸Á¶Ì¶vãí×ô:<ËšœLi–è‹íéŽà™ëjÚlî¤kÖVgôEÎ€DwrëÚ…öø·.‘vTsVcÐ1híLõgËlÇà l¶}ÛŽñ=ÝÛGÌEXÇjD´F&dßñÉ›°öt[Ol³k"pÁSÞH6c{!­kpëlŒ%‚Ð¶WÞ" ™‹mÁgDi‘Î*j!µ­3!CD\ãðÀ÷š%¼Ð¬–Óº°í'%Â\ñóyuÁ¦FL®ýccÅì¨LCŒÖLYkcµ—cÜÅ5%BÒkíÉåµ>ö/~»üî¹sçžyæ¥sË_¬ÍÌ|r®P ù(),‡‹éªþóX­œOWËÇ”ìX¬TKµùÓ4¿~B;X+öñ‡”–†ÉAúd3Á8’¥†ÁTàg¬fEkÖ^ÞÖ{Ë>³¢6ë£¦
5WÕØ‘Üt]b4y¹ptn}øÕe¼?¬‰ŒÚu5¶¤¤Æ/ñ¶4‚/uµà,¢Û–º¨–Ö¶ÖÕb#ìø]@¬X#ÀZ}uÀDÍd]a¯†½VëD':ñ7Æþû!eö²«Ó­«É|„ÖHIì½<D§Hk•	2#{+§7Ií|ÂX»sãmÖ~º^ÖJöUnºÐ‹n–¾ÐÏr°›ªÏDd°š‹^Æ_3– éÒY"6Y?²¢Ó¬·´ÕXÂÚ’7\Û2õ‘=žþ´¶ûÇ? §%Ä‘#k«…<Èý¢µÍÅÅ‡v¥”ê¨$ÈQqšê²ik¯ªÊµi’ FyP×éqRˆøl€åXš¨Ìo?âíˆ,Z•5–cÍÚ•+ýXÏª”¦ùFŽ^W°§Ô'[°†ýaá(b9¬yL€3ÖL=óàT‹ÑX!½ta-êjÑeÄ‡àÿèÓ6X‹<ç°æ“ÉÁOH©êÛµ{wßžó^8±{¼{Òzb_xþ^¯¦ †í~ÀÚæ“,¿þâ³Ë4X[=pX¯©Y;c 5«Wk®E¶Ö£Zúc´ñˆ\{±½ÍZôqeÍiM¼&iñðÓ
›8ÌèÀð¹CÓÜcïâ›n‰êãY†K5_<é»OuðéÒYý qvNö?sš3òCKgÍY•a¯qvI÷Ûôç/…Õ«…–jgÃÅ—c;kG{^ö¬LˆöåN‘…U;»tjiiÝô—¦¥/¼jí/”5U«±+ÒÍ =ð‚tZ[ÐKœ=ùÍ³C'ÏòŒŠSá™Oò/±Wâ¨Ð{I¦<·¤Çœý¦†dd=Ü×¾ÖÓ (ˆ;4ËLÕ{r2i¨o4Òõ©©õF}ª¿}ª®o‘2UVêõF­¶¯‘©ñ˜©õúºX°Vk4Êõ©žžÆF?JS°\…OÚg&jµr5ÃâTÿÔT?Qçë¢Æðº¢¾Ñ?Üß¿Qß¨§ú‡‡‡o]]¯Vx¾µ+ªI]_X(¯Âö««+ký]éò™ÕÖt‹­ÖB§µ¨¬¹´æñ‘”µjN+QÛKÈÉÅ$‘yVc[pÌ‘Ö¢)jÌbkÅA”ïn¥>ŽŒâ‰´¶} †ÍˆºC³®?á#ÀÚîãÀÚf»²c¿9Œ(×NÊšYÉ…Â¤>`pÓËz€©CgG+qSF¤Óô ·=k·æýˆ“Ä–°ñ™GØ”‰é£þ7ó~]$iý¢rÕe
56x©oPö¤Kä‹Àp4íÂ<?ÂÚø¸³Zkš<q—×ŒÖL[Ã¿XãëHí™s/=óÒçË*-|éÚ±ÒÜ\ï\ï±w‹ø:Î*æIiÐ¨Xã…)}ÎW«³?ùÉ¥1ý;zxÐØüˆ-%þ#³O¿riv¾J¯îW.þÙD±£ÁòÑÀ‰L.´KíÈ”§ÑAôæ:¦å=ºK¤ÃÚQXVA!OG8ã™Á¥ûRÊšô¬°ý­5k­%kÉ¦ý[Ø@Âjl[ëj	Vcw\‹ö3l­À–h±½ ½·ýèœl-U×ùwo‡Õ:Ñ‰N|-%k?7S-+eqfIM±¡3Kö®·wNQP=Ð!æ3Åq MÖlpa-÷ßyûÎ~tg=SêMSL…ŠT¹üý¡ù•P¸V(—ø(	iq†ËH:ì÷kú@i{ÓVtVÓÝZâ1@šc„µ­‰-Î¿š¿H:õøù¿ÓÝkùØZ´öô°ÍÅí‹›»Ô	;Å.ß02ÅläBÒŽhŒk§GÓiÖÜ2&ih”ì#	nYÁÚØæ‰Í#Æj±)‘·YÛ×¹_ºÚêèÆ¼%3*R2š¬º<*EÖxÄý +†"!¨¾Òy³™RJøåºkk~pXãx×„¹?8EkÂM$16Â§!ÚÉM~"Á¸_á'ÍÓî9ìÞCÛä…ÍÝGÎß–¹ÈhMºö¼]ïçOpIÄjO_Y»ú!ˆôáÃ‡11XCQÆDk­šÚµ˜)pó+D³5•ð…ŸFÍô¥Å×ßG`íÅ<ÈP´&Rkm³FXÍ´Ö¬Y[–¶ÂHÍ&ÌØ]ö˜ëå`*`¯1×€†HP`¨å³%ÚÎ£†˜2˜1¨³|©Æ4¡ÍQÆa‡êYhÂÁii¦ù ÞÝçŒÏ{XKÆIÑƒ#ß)¸H“&Ñí£Æ ²‰¡˜ŠÛø‡4þÍýEZkÖpƒ¤)LVã”eSÖÞÇ_„øôï¯œÕ¸-<Ù|Sâ3'YÒA€¨‰ÑZ&g°ÆÃdÍÐŠe¹Æz#œäà&~¢y®Q¯÷¯7üŒÞ%²SS:1UoôôÌÕXltÕë™ìáŸÐàþú™…òLa¡Q¼2še
¬aàW±•xÙæB3Ph¬£ÛÕ‹ýõ®áþzƒìç[×‡©C½Z­ ßMÑ®ñ§ÈtÒ[W×——¯n”z-|Ô.¬bîÝï”æÒËv}Öž4X“@œ–o¶™òË˜,Õd…ÿ­sÂ0JF´M	©h}#kâ¹;wBm‚µ‘n™öìÞ=99‰@Þ÷ñæ¦ÃZRY³‘…Ï<ò¨ó(†!	1<êb
™Jr†°nÂ–£Xp§«àR†âAíÜ«fÍ­ÂZ²jíÑ	÷Ž’>­æ˜yrÕ=m4ŸŸîëËk²™Åzdß<Ô5‹¬%XsaÍYí.¨…Ð¹‹kãNkòïÿá»ï¾¬]»vN©×z{?9w¨ o[zûácÅ*¿º3•±1@m£‘ÙWŸœW/ì¢‰|³¯¼2›ÎQÌFæ¥W~2[ÍÏæg5•ï½Ùþ¤.tp™˜m¯3!Ò™´6m8øëŠâÓ¯ çÐÔ‚ÓóÀÄæ„r(Ã+hí~þ"D›µˆ_šÔ¶RÖìÉ9þ®T3wä–°ö?¸mÝa-ÑhÔ•ÆÖb5/RƒØ|•üG‚ÿGt];¬Ö‰Ntâëˆ¿»<7S*ÌÌP•QñyOÚ–Ûœ5‡Ô6QÉWL¸˜ëÉ÷)ÒpÍâ7­^V±vçµT¶
1(ùN@RîåY¨Uûþ÷KUz¯Õä²4¬áÃa&K®¢ù1ç¾3NfËšˆ–cI‹[GÆ·æðÕx¶Úóãó»vìµì!b[ì¤‡ug»^Þ¿5X;MW"´‘‘®Œ¥Óð]­ÒÑ×FèM”&t/Ü–b	iM‘ZÜÜÜyDl¦°çN¶YÃ_¤^­NÝºšò¦×RÊÒifÀF$ìV®ÈM¬œUïk	Cy¾ZÌ2›Åd¡¶®qÐÌiå-—%A…0cÐ-Êf	2kpQz#lÄ9õX£öî]Æmç%V" á.§ÁjkW¾"¬Ñgíé›Ï>9½¾öúò«O>¦oHƒô¢5cµdh	HÏâ–'Š	VK5+Ö4‰¤¬ÅNkÜ,2ŒÄš5"(kŠå§µÏµ–Àg‰†ì>]8Ä÷êð1`D„“OÖ4(âÌÀ*Ný¸tŠ?Ú\N¿ä|Ú›ÉÑÎžåÐ„5B_p_s _.¥éÌ™8G$`í[>ˆëXvaÍøRB^«IòªÝE6±š¯b¬\´FX56ík­5kŸš²¬aˆuC¢¯ðr, h'œœ	m27ƒ*Æ‹
ÖÎjà4„ÜhÍ˜©‘ñi€:VÅêõÎx$ˆUßÈèaõz6ƒ=®Rr°œTÎæSÐW½
«)—W‘ÍÒ€Z—u¥a–z2õÕUým6ä$¬q¥q“÷ÈËlˆî¦x…žt¿”5ø¬¸J\½E,//ÐÕVP×†×ùîìLBY#Ã‘ð>Ø
G5±Z0îW¼÷Ë•B5[(€lÍp¹8‘éG…W²2†Ti“Ñãtc”&cbT~þ [bÚàvÖÆ)T“!ääy„5ˆ­o×.ÑÚC›	e-¶ÅFåÄžŒ#H2“–¦š4ØÁ­E`ŽÐÐù(›’óØý‘O*<Ò>%c/¯9'	a-º÷'•µØûÁïá$b°ÖeoÕ(h)¿PÙâèø vþy8<"A¢Ètì °všú± k‘Õ¢‘/xMâÚ.R!ÕkíÉ}ãÀš‚º5b`îÐ¡—^êå/vàØ¹Cåœý¶|ì$6;6V™)UªðöØ¥‹y€ítQbpæàì¥K „¬©Ow.'\C²Ôu£á8LÑ—å‚*)ZUÈ&ÉÍš»I$+k~]‚p>jUm^½æ´&‘xé’=±·nŠí¤&¨Ú²fíþ‘ µDÄ$ÈŽjÁ	’-¢°–Ö’Þ"lk¾µkòX	‘ÌÅe¡¶MY±Gå>šµˆ(ø‘«u¢øzZb—H/TJCgUC¦‚µÒŒFPÀHZ¬%ÞXûžüñó.­yäíÀjîIüü_‹²<,õNä±Â@?ë’ÿ£`m¨¤&Î9Î•€µj5ŒùJ·{”×ÁÔƒ9w0«YÕšPM­Ø¶ŒÀg>Ë|åèÚóæ›““{vªiçµµ€T•=¾#µcV+æ·o£dÿ¨OƒjÓ)u¼Ne2ôíiBÒ¯Gl–•4”ÖeŽZ­]_4e-JkÎj›Ö×Ëé©[‹)¼Bj-£gFE
@+‘™•çHÈñÓb¹Ú¥‘"·Pš¾6ç#ˆó—‡‹lSŽÎQ>øÏùî‘è‡}/X#4„LG;0Õ¬»ÖFXÜÙ‡Ü®n³çöC›’+÷ðÁË«IZ“¤¦>¸AªfíÄO¿øÆS¤o®­}øú‡W›œf”¦!‰jAX+ç‹]yÒ ]}¬Ù–‚5v·‚$"¬¹²¶…ÁˆE²%67—ÖVš°Öd5s™¬æ¸¦àÒ€Xm(Jf_"†îNˆ&Öœ“\Æ»\=Ð ¿5Ëyd”
ç„ç°ÆÍPLR/÷RãÆc8¬-‘YsXCY8OÝE7f‚57î¿Œû-Rœæ†1ÒÝ ¹ÉadE@&ƒØü©— 3AZ#|êær‰dGè±í<Ce|åµúÆzÝµ{`­±>ÕÈHYkdIƒ„Õp­µûÈzÌ¡ßåÐWæWˆ$Åþ©t†Ðê‹€ZNŽ××³ž€×ÊJ‡«¯®Ó£$G±¬6¼8ÜÕ“nðŽ”Þ&$¿ñÀšÈmñjÿ*¬F¬¬ŽË4º<ôûVeMª™°ìÞÊš¶ ¬­”³ÀÆ§Öš‚YpÚÖÜùÕmF¦âµ¥A²2=È ¤H¹Òk³†Ø@1©ñöæîíãòƒ()¬–ù]À´5Âô+OS_æ¦Û…”5ƒ¨Ck<Få?
ÁPá=±h¶·ÂØi’ÔüpÏ®ØØÞ:8JN§ ±<ÿwk¦±s’V".þèiƒ—SY\£ðÃœ…ÖNÏþï'›°Y-‚Ú‰ÈkFk»w;­ ÙÚÊ•éÊÒÚÀ5ÌEæ._Ö—M5ÿ¢¡T˜8Ç[;©éSK…cúÏoQ=ÕòiéÂü6¦¹Wéö&sHŠ×fYVKÓ.ØQMdÆÅå
Òxœ¦bµÏà±£\_ä&c`ÃIÃ45ÎTLæ^¶…$³ ‰„°³ [”5¶¤¢_’Õîß[[BWƒÑBÅÚ}]û#­ÅHƒù°+Ð¸ZÓ/^(Vku„Tƒ5µ´ËÈW’†;¬Ö‰Ntâë(Yã#µï¢åõÐ7g
dCRÆ2004Äz¥8_Õ÷Ó%\ÐgçÓ—€5ÑšÇóm°&\»qc¢ZL÷Ìô–Òåt--mw3HiÅ"®…k(hUä¡Œš«5 ‘	8æ%l¶îàœXS½»Î·ŽØ›ãWŽô¶=»w¿ùæñÉ#‡xç´¦8’ÚñøÎn
ÖR£T>Ì’%3J¤3gp,FP¸>FÚ£M·Mcèoæ†iQíëI´keMi]Yªg¨c)”à5¸¬—Áb.¬Ao”LzðD/œË´®Ï^ {ôÇ–b|›BFk‹m¦¨±+˜lrZ 6E(]cŒ&lÖÂ=Îjí4™‰à(W9û’ž†u/| ªÑ²@‚]Yê´¶OÈ.œ8ÿÈÓò¹yõæ/^]»úäÕ›k‡MNSk5E¡Y³ÆØ—+)¢b_K‹¥r—GÓ¦<Ø‹‡Ç5”µèÜnÏ…¢µà0rimy5\Æa¡UYsq"Ö¾BDÅ¾²éIƒ$OäË-!5ÿžˆÀlAHk­Ó±ODgùŽNj'…u'¹ËC„§!y‘)(Óy“¨n‘“BäOõ>ÂÚÏ\XkÒš›ÜF ¸‰´&eíý8Ìžk	‰Î1X#ëQüæˆ&a-°š¸m	XKÉšöó1„c=IX£’,“ƒãüorCX3^ƒzyÛÑ5=yÛ)Í‘ÝÙ³ºÊŸÜ¼L*ëÃýi»[=±
<¶ª¤HKr\Ï±Ê3Õuð­ØS-×zYim]¼ˆ>ö§PÕ†7²äGö¯SÀFÆ$êš›,•lyfbaá÷	‡HMQM[(Yc5k•«a}ZTªµzá‡–j:¶Ûë(|ŒSŽ¡§g|É’¢@mp«#Šþh…j^®Ö7‰¢Ö§,HÓ×>&3ÜÛb·kQy:g¬&yÍLF€F†/šþGiçŒ‡¡A½®ö˜ÒöHðqÐgf›Þ«h-á0Â´=	²÷ðØôô¨Þ•IZÏ¹ZEÞµñ†â„r±1}ß†Ä5=¦T‰|Wx„´FÖLX3V¨v¢%8¸F*¤lIBkû†ÁÚ9‡µkÀþ"ì9—{U%0PbBMhN#µ¥S=ÅyÌFè¨ÖCÍZ†7ïWÇÔhÉüì,wX|“k§š´Ï\Yû¶jÔ¼¹5kn)D&Ü*Œ9
XM‰¨ºãAÃ/5¡VØ±l”I8÷‹„Ö<š€¨­yÍ0ìþáº7¨Å,H¶{T¬y‹µÿ_ÅZÒ2fAú-ñwÊe4‡3åàFa÷®×?<b×ï(¡ßÕ«u¢øš`mè,Œd°Ö+9í2¹T—{d(\ª|)á0RZ*“22)F{Óqív¢dMÊÚÛ˜‘•25þƒCTÕ#xªtZ2°’É½¿ìú-š¦"*¿ÉédÉ™,Wj€ÃÚç÷ŒnE¤·S‰Ñ÷&êÚã‘Ö‚ÝWL„|™mÇ¶—÷?üòàaÄX:“'ûÑÛ]ç©\NÓ ÚhÊú­šÑŸ‚ˆ˜²æýc£²¦b	ÊñöpWšê–yr‘…$¨1)Wí…¬HÍ¢ÒÖZº³ˆØ¬âM°ÃÇ´¼`mûF*D4~ÛàÀT$¥1Y‰–Òj€1?ú˜¨Wgá®ýDÖ°Ù®æº{`µÉ;e¹ûüsø¥à:»y?¿aßÁt„ôHŠÖžzê_ÿøã‹–¯{]=±MO³C8r:ÐåŠ°µ«"]–’­Ý˜Ù—éÍ•¬‚Å¶šµ¤´ö\”ÖLYó¢5ÁšâßÖB¤ÀŒQGáZÖT±6ÔËYoR5Û:´ 4³‰b—Bà@—Äšw+$ô@g¶fø„³ð_R²eÈ‚üÖ·¾%4D‹Á¹n‰Ç<uJŒX“xU3d‚¦"¬Õ„IÀšµYª5•56Kƒ´pç~Ö‚²&‡eB®€gð—€‹·¡$Ë~Ô].¿ùLN
kº ­m9Ô6¥I’é(ÑB Æ{zÛ:_NÍð¢µÆ•ÐÎ,qõÐÖÐÈÊÔ™	Ö@¯Œœ“Ô}ý£Tmô4ú7²õ
Ê5#Œ«#••j¦Ûeø«§õ"|ECËŽTWº¿ŸüÈ~`m
Ýíúòòzãðê/y	9\~Ôž©Â46£5Æà-JÖ¤­­”õ+]-”àoïa:l¬·G´µ³ÐlÍ‰ø—nSÄÔ¨ m¯$ôµAõWãK–q•ªïá8®Îk;wl¬}l_@ˆÊZ„µ#ÀšèA’Ï[Ã·38ãèƒÀ™Kˆ?{
-œ0¬=³;ÉÃnÙÔ1dÀ—ôí3ö¤'dµÃþ§beÍŠf*c
x`SdIŠ,ò¦Î÷“pÈÂ¥¾Ñ4 †´«XÓy­Í7ÚhŸ}ì1R!e1òù3× µË4à¹\"cÄ~Q l~ñèGÊwš§N•Ö`8®ÁüóE ž,’I;{šcqŒåËôý§üÓgô‚ÍnSî¨Wû‰xµ@øÕC¬)[€5NDu&¬á4//wûåˆËqë’µÿî¤ÄæaÚW’Ô¾ªªFlåÉíž9†iITóˆ²ZRX‹Êšß|#bí]V3]-:ô““°i]J$–9G×ta;9èD'¾‘OdGÒÏ€ºPñÏZ#æJ9Ë9¬L+ÌÍUóÛ'£¬¦0V‹%kŠ•[.Û‡œ25B¤õPõ&S‘MG)VÐ””Ö×Ï5ëÁí‰fdÇ™Ÿ¿
Ö<˜Ö|2ÃŒ;9½/¤1²ýUÑÅ×Ç;wOÂj1Z;cßÕ¿ÞÙÑý2„vMÏŽ\$i&“•©æ"tëâÛZKdì"ûqzŒS@lá‘~Zô5QZÂZ´î¿²®‚4’÷H‘ÒÔeM6"YÂœ Kå‰d­™‰Óu¤d?Âç‰q¤=Ú²XËfBª$­…œÈ8‘>c)5&iÍÏ}Œ°[¯µÐÚ(«#¦®Mžß¹óƒçn¹ý*Ú~â?@U“ºF¼ ¬éŠùÆ³þòæíñÊ±Ã‡?|ýØ„Å!…>ú„Ð1D¤²‰JZã:Yåu}Ð[T²aoëŠöš5Ö¸Eë~-=«G5#(k!VU­$NsH ÍAðH¬Oœ—´'´{&‰59x°æ°ë©1MrˆÔ@Å)þrìËÕ™é0ä‰‘ÒÌ`¶ˆjZ1QMekCÌñ[dIc,bã.¦yÎåÐÉ“5É`Í²C™+a5ÎXj|áÊÚûw~~'(kÀÚ‡áÆ&oHÕ¬yüL´&eÍÁ/x‹è„×Òè¹–ÍäÈà?¢lI ƒ&ü£Ì“Ä/K{`,Û*®™}Êšî”Ï¾#–gÎ"öïs·£%vž÷žÒÂêÄÌÿ×
õ©T£ŽQmÍÞ"¹‹ŸÂÆ±^ç½¯GâÜÒL™*¶¿]z7pÉ¿kƒ‘aä»ljè¦bú·Å×È‚œ n¢T]XXY/û}”Õ"­!¤EmMs­D3È÷”Y,B‚VÓJËŠŠ<³‘ÍbpG;­q°òƒýØ5Š‰¬:Žji”mü8-±/^4w ‘ÝÀZ÷öíãÝ¼‡èÛ'¶DÉZ|×ü³Š¨¤ž¦™ †¤Î]YCÂµƒÀ‚À9ÃÃ:a;H˜¸aîýÁÖa«ÎØlÉ¶ØîùÙU%ãgºòö=µ©c&	|ó†->LÆYT¢íÚñÑ"5km°¶+²Z$µfD\“ÏˆeBÀšÑ­±¡4Hí»(l‡ÊÕb¯ÅŸ ­DÝAebZ+=vØ®xPÆ³ggq‰¬î#xˆät~]‹E]þî­?}öÖgŸýÉêüœÉPuÜC“ËkW›ð~Ùâ9Û	`3‡µôå
»Ø–÷×kl[¥Aa-¢ZóxFk_ž×ü¶e½ZRXCPs]-™Y-F$5¿ERã¦Hú@#Hê$›ÅjÌ€5Ì ×€µGe0ùµtzaw¢øºüEÎ˜_÷šxæù*™\ôª–þƒN6Q)Ðß:]œ­EÛþD$¬öÞÀ…jOf[K
½¥êŒdµ¢¤Ök$ðÑÇ­–†¤Ô,MŸtÀ0“Ôr-Ž9MÂTRšÏˆûJkÎjÖtöam°{d|—â/¤µèköð;;R;YÙµgäôôiXòôiYöŽu	Ò,	ÒŒ¡S­±å¡ ÁšË8ÂùÅD,Z»¬½†9œ§•
@•(åjZ.Y®'ºYÃ~Õ«Ejex®‰k(¥‡+Íhù*ÝS¢“‰ÁõQ3EÀ1[u™-ŒÚ‰œ%NEflì;|™YÌ…tšÑóï˜¼}¾”¢ÉÛÄ…_ÿñ‚_ã4h-ÂÚÓ/>ûÆ¯»ùâxåÐÄ±åe'5?”É‚œ¨×°ÖKÞã€–â“+Q.•Aµ|±­I°ƒZÎÖÚ¥5Ô"«)~¼ûcÑZ¨Yû\°Fi’hÍ} ƒÄF«²3‡>1U-ž6š»‡•ˆïG\[‚ æ€(‰pbÈähàŽrC–ÇTäIÂbÄH¦:„<Gsù¹ñC‚5¦ìÌx)[•=?øãXÆÓ•ÄCœ ®1Šfš’KAY‹]ÖÄj!Ò¼ûßƒÕXvÚîÖx=«S—˜,hklÔÔQ±¦p:ãAxIñ¤–õ8r ùù{ÁZ®ÖtÂJ`6û‚‡`¨Õjº»æV-39‹ZáÌÀgü™‘å˜ÈˆÂ€ä5à6²äR®òq»‡ú6uÍâoXÌxpèÑOw€áÅ©©áþõå«‹‹·®ÜBZ«¯¯­ ¦›€Óê«ôpkÌÔâ/òÆý¯'”5MLSãà¬öiü²W±±ïnLPs¦ÛÚ…µm	e­y¬aÝÌ_°Fú£f£xCz‚4d¶}ä"rÚñÝÓÛúp„ä­aŒÉ•¬EX%kl¡h^pf`€`2óÂð¬Há™¤ · ¶Ï(»ÒÞ¯ÙãAiiòÚkZA²dT±¥ºæ¨1ŽN¤²€ZI_"’¡î´–Ïû_?y\ûUÉ¦>,ÐVô£Ž°68…µ–¬õœøEâ¦¸B"­®ML<ãÊÚw¿{ùÐá±ü|ùÚµBOŽÚqÞãÉWdb¦vêÔÌDu¬™Í‘HÉNïµ*¿×¨j‹ú®’$™Ý~Çµ$õeÍŒCÌüÑŠÐÄn1hÝÊÛ,¾ÝtøgWï„G¬áð2ýÜV#–¬EX«ÝSYá@• µ0»´ý\"‚®v’5Ö¶d5ç´­ÚaGVcWDJ‹FkÖ› HMÀf¹{¿}”ÄQh­ÃjèD'¾.‘Ü¾³|X¬UKJ|4×~z®äw>Sâû>+}(ð1±«rX¸ö¼š¬µ÷¿ýÓŸ.¯IXË”zùùB©ÐK0ù‹€‚Ô©¥³²!s$9æ`1ÏüPôHµÙr2rÑ©ŸŸ°àô>´fŒöWÕ¬K¥vtïÜã¼–”Ö‚ºÖÝößšî:M’‰¤6ZÌgU­Æ|ÔZcÖ0…<==K6¤7ðñÏF6íÜT€ý›mÊÚf„5º¬­­_íÏA®j¥
§Iž+–' ³RÑ`¡Xâœ@|S?6Ž½ˆ®–€µ`!†#œOãœÑ!M‘ÔÓÂ$q=xA6ÙÍ'a6¢Ø)¹mÏäí#Ý;Fví™¼ðÂíóþ™q)Zaµxî¹§Ÿ~ê©¯~|óêaðŒ8f9mÖ¨Y›ÝH¬YëÕÎïaYõj Z…ÜP]%.>¶¶\“Q­¹Ge-Y³Ö.¬Åš5¯ZÃ}=x÷c Ñ?Ì‰PÍ¦³­\]»ËKIDK†ø(Þ·è¤é–èýÕÁjZh6[±thñ}5iídtí7Xcüs™-ØF6dxE£$‡5A#ï®V!)é0´CczJ°æ]ÖPÖÐÕt‹´Æ¦³‡ô7B
Ö\LÃ<Ò_	ŠT‹7,åÑÑ¤36	±™žÁ¹'FòY{H– rŽgDMUm57ÖdÅ:°eèêHÖÁw	Ô´ÊF:Ó¨Ê;·&XÛ—³N$ü,~‘¥g°VRTaµ®LWª!"Ìe‰«äú:Ùý«k‹·nktbÔÐÓè¸½¼6ÌØÒl@i	çþ ¬5·à0…53PÑÃMé];GF¶ðÇµµ°$WØ°êáý±Ù7š§ÚŽÚdûV®Ú·mäÀìøøàè"Òa-V¬eíf›½í5¬ MHùQˆ2| C’™ìäòø÷<HFð‰ÍÐÍîžVÚýæÂˆïNÿóÁï§äú¬E°£éy–²@©f™üt‘_ª×§ñ"‰q~l>Âš„µÈj‘Ôþå_ÚqÍÅµ¦)äÁ;­M\£^íÚe±Úåk‡+‡Ë¼‡Í—®õÎÍ! $È°Æ¯—Y`Ë«(Ù°±Èï­è-ßƒ¢Îy²"Çþ¤ÌQÀWŽMfÊØ4lqAÍ\ü­Eg
5ÀvƒØ‚vØ(D{›Â•Xk
…ÃeK˜A&a-ÐZtƒäÀž¯Dû¬¶•²i-jÈj¾Ø’¬¶uÅšßœÕlúkÄ5íAWSÞc´aú€ÿNÊZ„DRK‡T'…'žø¯ÿå?u¢èÄ×Q²ößzjÊ}”|fÂÚYfÂ³}èC^“ÑHåƒ²ÊÅ(¬©d­=òW7ko7ø/°Æ‡eëUÁZAÞ!Ÿ&.ƒ0ŽDÍ}F–¹Kç9­ÒZ8å®û¸‹DiMÓ¶øRìF5ÀhWvºµÑ!´`mgvçóoß¹«{zúâà¨šªÍ
Ó2é,AÇSÖ`5ÙŽŒ¹÷‡Ô6Mx9CÝ‹›±-¶	kŽkQY{ûÊk·®û©¼h-¹!´á•Á	y%(ÇªtEX3ZKa¼6Vs¥Ì'Ì†¡›S·ÑŠ¶eIH1„àÄò [å4gµñîî‘înæ»&1“Ü>ŠøoþøÂî¾ÀB˜æññÁæ	9÷“zóæ‹/~|qùÜ„EåØÆVA<C[S ç:¬éZ«©avÅŠ§‡Z¢h¶Ë¯ƒ‡Î¬,Ûø³;¦¬E^‹ÖÜ`DKbµ–¶Ø
‡5¸Lm û‹h÷#^þÊƒüDß°%b(1ÀamIçŽF­ågCà‹>â9¹¡Óeâ‘kFcn@â¾!úÁS'™j"}ÝpÎ‚Ew'9cjr*ât«’Ö"dÕjfÝÿ>¬¦ÈX³ªE7Hn­5kÿ¡¶Øêµ¶"Íy-<9óíçÃBÉn2÷7ÑÍŠÙ¬ÆÎ¥5¢¡1ªhrè÷YXiÔ}`-Wcç§ô.Åœ#çRÚjJ5uÝNmÁÉ,Ódt“ ¬•…aööƒdšY‰¤eZUVõìÆâT#§Þm4ÈžÖ$ºBl×oS÷Øö¯MÉÖÿ²×ÿUÂšëjìni¬•µã,©n[Èƒüår¡Ò¦ÇYh'hšY["¤–"­…»tä/ØÛvp¿‘°6mýS#}ÇGÆÇ·OËr÷þó“»¯«ËÚâ‰çÚaM›K×ÿü™«g„uÃ–ôã&QÍ:‚qÎ¢9Zßæ½`Z“ÌÜ­ŸÐ'äæB2ÿ1€Zsò—™ÿð»¬y! êè¨¹
9¬©®:+£(9Bæ‹ü™U’ûé'#¬!‘™°ÖÆjÎi1tîÉÂ5+\k¥5`M#ì×Ø€´Re~þÚµËòE®åJ@[M±O8F6àÔ/"ý1ébÆ8vÉ¾*K™üìgÀšj‚»Nfž©‘Z6­qUYøì-£1ïµvü•g¤xù.÷#pˆî–Ûf¨W{ðÑØdÍ’ ·„µ˜•µ-¤5Ïp¼Ÿ±Èý*Ö"FsXÍû¹}Y'Èè,¢=«)‚*ËQ“àÛÏ…ñ‰¸M7 œµÅæŠm.»ÃjèD'¾6X«HÖšÃT¤·0£x3åê’:2õNC‚µ96RÉøByì¸8-Äó¿iÏ‚|oùç?úéjåµFºªº4lIÊH?år:£,Hv§µfšŒ—ôaˆùR°Ñ š%s’Ò¾d¦ùì¯‹t°üÅŸü¤¯X‹¸f¨;c¿üÎ¶ìŽÇ»»¼Ó~LFÈÌg0‚­ñ§U¤†Ø68ZDqËÂhú"W´f(à°¶±ybÑ`-†òfZ­ûŸ¾µxåÊ•§¯ôw™oIYÙUËŠ,(Êb²,Êš·É®Ø4C>ý-ŸÀ,¢nf#“ÈjÔ˜…yh³¦HÀ3;„“±-E|'¢À¦kÝ„Î0ßä2ë›ùÛüãíÝ·Íb$°ã¯´F—5õÄÞ¼úñæ‹B§e/V›ÏÏc˜àŠHPc’ åÓ0Q(¦*ŽnrÇ“ñÊÁ$¶ ŽÅj±\ÍRÀ¬¥µçbŸ5ödÑ#AYkiŠS™ù±i:‚s?[½ŸphkA-Cý	X‹‰‹®jÁjÁˆ_»ÀÌ¬î™r.XàäÍ¡‰ÖZFNº&{Ù,Ú>Blv‚XžùÛÁs;¥¤kE,Bá	b=É  ºÁšwY»ƒ®f°FÒ¢²ÆZÖ,]Ò`Íÿ7ˆ½b¬ñ"zAË‹tsÿÐyÍRwzaÀÆD»Ãûúz&vX³ 1Ð›÷=v&*Ô›Ò¿™ò×jü4ƒ.5ïKfq”+É	T3[Û¥%xV#¼€·P(•­‘d©J6ÁÚ†|D62|òn¬.TÖ§`µEºvs\»J¦,±j±±x½ª}ayñÖ{QYsTóí•p#"©ñm³e[· á3¿yCÁè‡jüƒ¼)£õžÀÎfViNÊ¤¦SÔ$®ö)ÎOŠÖ>æ=‹ÂÎk!¢Óí?[†ÞQ§5a°¦ú)QY5TdõÖÜâÃ*qv°¨¹¯ÊçITÓ~Oƒ‘hjø„µÍçÿ{çÛÖy¦ùb{Ý›éb J bpÅ5|C—²$W¬dEe¬˜!»
ìXbDelåÂ`ìÈë4vl+©ÛÄ§màÙiÜmÓ	3@àB#;ên’z[ èŸhÇÛž
½á\íU.ÒËý=ï{>$Wª“­/ùððœïJ‘ÌÈ2|Þ÷y«é,N¡êT!ð!µœ5ðfÏDäEµ‹‰Õ}Ò`-k‘Õ"ªýøÇ?NVÁ^­Q
ió±	ÿW)äÔÙUZ×´ˆ2½N@ks«—€5þ¾Ú¿ÈÉ$ÍÍÉ)2§.º	5Ð!öD÷OÔjÔCÖ Î)0í!+)õì~{j“ —·M\Ð’ÇA1EAZÉ°‚çXpG‚¤²[,•$¤ö‡Àm1¹ÿÏ;kâµX‡VwÊÃCîáª9³mÙï·MÃEþƒáÚ2]dk_MbmZ;†ñj{<þ1‘:ÖŒÖÔ¯¦Ÿå.«uÕUW÷M_X®ÀFŠ ³¬¾ôåyæ­Q¹¸´4”Û†V9ÌÏç¦ˆ¬*Ûw&²Zkpÿó4¬ÝþÕ÷þî6-òå,¬¦¤°EÉòé Q«±P–Ì¯j#…Š(JÄÝ±žõ“Ð¹–Å¬>Ì@‹¶ÚgVºdŽW~øŸ_SÞ—ä¸­5ƒµméÒØÉ“»ŸÚ‘*Ì k|V–Ïfv:#K ±{°éô>­w¨¥³f­9ˆÜú8zãF’œe°†ÜXM^ó7zN¿µ­ÕJ¢µr ‘Ë¦¤n1ZÖÇmëK¬ùõ±tfnZ|ÐŽ-†HÏ¤Ž³NZ‹°† 4+-ícv<@¡©.N*ù{ ñbïæ.~|Q-kü\%°öÕGžª]¾xQ¹ý/=ûìKþþ%üM†«-¤ª
íŸ‚c=¹?jŠçƒ7Š¬Šy™l%Xí ¾´úóâ+YGhÐ¦ÿ7>g-Zkb³è¬µZkµ¬%¢òÑÔê¬An®<°&­µCÙ½f¬…tÆ‘:(©´¤;ª@Q\Ã|s SDÆ~±Z[dŠTª Ö	kŒœÎt®²DXºtÊ{Ê$]µÓSÜsëõ&1ˆƒ‚5HêFÏqgMŒµHj5PÍ`MžZ]ÓÜ"ªAg&´·Ûê§¬A¥ú$f`'l¶ä¦\ÎÐT"§qº©S—¯šM_S²˜8k!|RMº”|‡Z…·ŒOÔÃo0UÏyN$Ûåî*yc‰;íP|P™qýipmtt­É@¬•j±¬]{OžÚQJ¶æbÌCãú5ã¶k7Ž:ªÅ‘Ø€š÷¬¡W¸ã²ÙXÓ-àÚLÖ|WŒžM<³lôÚMNdNÓóÍts»Ýk¬¦ð~=4¼›n5|5MY;&XØ³vë?½u«Ö¾ŸÜ$]»ª€‘#À‚/`)ƒÔ°~ÌIc%Ûç±ïàOx¤”„ÉïÑ*tTñjY‹MÓû#­ETs=œç©Ð\•…BŠaj%%@ZT‰÷Û®¼2ÌRõëèÊü¶í¬v¨•Õø£Tûq«îÚk-¥‘ÖÎ¢©9›·F÷ÁÕÓWùgwêêéÓ§ó³ó¦ kt¬1]¢V Ö©‰ŽÀ~lÊ3éBÍ>¤ÿˆaáÙ«9 ©w€Hy”\¥™8BÁ©•Íèxï^Ù–Ü%…L†$há½€Ôømkm¬†â µˆk-Šðå,öÿe­mb¬E\3PkO‚D[Õ@Æ ÈÈjm¤LÙöxQd7{Ø·üôíñ žEàþÅÏ®«®ºêê>å‹Pî¸”[RŒÂ¨¾|U±zÕZ}–ÃÔ\e5o¯éòSs‹™þÂ¾3mQ±e­Ð3±©™L+®ß€+£Ù``Z¹–á"¢ZÈòéT¹Äq6'®“ä»å8"Æ”–ô¬}zo­µèñÓÄ÷óz*¨V¬	µ^ÿá+W&NN2,ÂZG!ä?÷ôîÜ=sr,EoÃÉá'½,Œ–Õ‹9–”ÔPÉ9ÿ=‡µ,’¹fïn{ÜHÏ6‡µ(KŽ=kÏíK]çœ5ûlsÐÒ p±¢xç˜¦<¸_qŠéVJ…¨ ¶Bkœ@tË8G6»³O-]8J	Žéjj³YØQ-°æëÀj±u­—,ðÉ*8§íÚ1¹bÇÐ±v+°š…÷_|‘+/¾¥:ÈúÛ—>|ã?|yÊEÐHå ª ¥Ö°¶Úk).ÊX+R6ÊóÂŒ>ž_ÿ3$Ýjk#ñÕ‚µVg	Õ:FpÖ­¡ï)òñË‹ÈÑLË„Ôt`}‡{E¯æQ;¬me¬!à$Ð”*h©¬ ><í
…‘î™É"7éTØhM.ž›hl-ÿéÀjÖæ…ôEí½ŒEW‘
ëkû×§ÍYÖ~ñÚûB5$8®š8mKïÿ	#¿h@~Þ“VOŒ2c(Œ–qCà²Œ‰Ùý'ô•§ûƒ·dŸ¨!ØÍi4¸îÜ¦½ae'Íéøè‰ÙYqá~õ¦ûe˜•¹ÌCL”c/o_ieq˜2jñ+©0_r{.gî~Z¬ìq°Sþªõ±ÌñÛ°¦¡Ø×¯¬žS®ˆãÚâÔò"?;ˆ“ÁÑßµ;ke(újÎjb6=¨ù»ý<×*é»°&ö
'Ú8•ü¡>¾¯8—ÃM7­Âý0I_>·˜Š˜Ç¬œ²÷Ø¾±ÞÞ}D;sæØpïgoîºÀtksgíuKy´:<ˆGŽ;¬‰Î(èóXÈtª"È½ÖP4~\1µ°Ôâ¡­gmÏ>9¥À‹ÛÌžr &²¥¿¸IƒGgÒi!Ûä•C‡~Ôh-kÖ°«E[ÍQí¿%Š¸¦bÈG¢¹æ¥Â5ê·W­ò´tiªT¹
­å¯æ=|”†&”¦Kä‰d@Ë‰C5Ö Û‚»k™®ý‘§ÏS õ¼‰Ã@Ý¯}ôÉ'oóÜ9òÑG˜ØnrÒ,tªð1ä-¬ÆGk-Ð#±ƒ6ÏétÖ"ªXëÔ½ã èüvOcÍ£E¼’CG¿Z0Ö¶d5n~Â7¹i¡’;å@:©Qi“×”ãoÖx^aµ÷¹®ºêª«û•/¢ž´~š14Z–©Êa¨ÐãS›[8h°ÆŒì)8«FdÐÍh¬YËÚkï‚jÀÚOxeXÖËÇ+X¨<T¬k¼¬Ášf«YÕ%Ö…hœzp?¸©„RšÌyÓÚg`5Ýƒîí°õkè#<Ñˆ­Zzæ¼u=1ñ
îÚð°ÓÚ&!#üÓK=èÀZO_™'§qk ´f¡)]H‡f(	XëlêµµmÎZ’0â°†6Þ[[{óŸÞùÇFÖÜ8uÿ)²V)éÕ¼¦‚?™ln§‰J*ÄuÇ©jQÏÏ•ž@kº`²U„µxUêmƒ5ÇµMÔÛ¦xú€[kº†0Ô¸€z™±Æ	4¼m÷®}Û†/~üñÅ›ìxwYzÑYí«/ƒ¯.ª’ûK×<zí—sPZÀ5eŠTÄe,LE?T}…)?©¦JSÅžÒì¹»àšÄ@úî&ç7‡5+„ŒuÐnR‹¬ö-H-‰9wîÜùÈjìí­YÎˆñ0¥µÚgØV’“æ¦ZtÚ€Ã® k<¨&3±Z˜a«!¿ŸñÑÁ¨óÒÇ¯DcMç6ëÌÀ 
’±×p’)fVtb]eÞ³¦H%‡xdˆîg‡tÐìÝÿ>¤fæÚù¤Õ¬^ƒ¡Pf½ÉAM÷Ùf£™YbX¾ÞÝ6g¹NSÚè ®jˆµ¬bB5ôÖ¥¨p´iÅ|gïmÅl´õ~7ä´«.ÂWKBÔÙ¢µ¡Al|TV§‘M‰!z{‡GÒŠÀLâFæmÒˆ¿¯$Z¿tÒÂ=¯Ë–pã×ÊÍ5ÂE˜êðÞèètã´æ:¿R..žsX“ÜTC?sgÍi>39²éZƒ´jÉsYÄ›9[9kY;}iî¬kóù÷±“­G€Ææ‚ÑæŸ9ÎÈ5>žP‘’!wŒkûvÝØØ˜¸ù¬±Úegµh¬%££ÿ$ãÇfCPÕwxhì,ÅP^Ðu±aÉò*H1Ñ.½VvÉãØDÑ‰áëÒ—>¢òQJ1feÜbû{XÀgÖq²™ÊLœdXÁºÕ$FZ·A&¬öˆXM¨A­ƒ× µÍÍ55®½Ä­‘àO²MÌ× 5+r®×“0¤ºÕjè,W+õ—Lix­Êa­}Â“dQ-	wi3å¥Ÿ|ò#]|V“,³Ÿ…s0%SS×Óä±B¹I$Ò	Øl™/Ò9f-Ü6±Ö67Ö¸÷6Ö¤ˆkØ<	2ê¬æ Ö1auLXÛc©˜l<#lI~?7ž#ÚCQæ«ýU—Õºêª«û8«—ªuXM½c#$‹h>×”½æZ¨º³6²JÄcv_!­ý¡=¸ÿ6Áýwû7¤‘—ûkÅY7Å	ÖúÕ’&X3k­5 Ÿ³Îd‰³ÆU)úi9ŽŸZ™Ï$7Ö¶¿º}ûw·‹Õ^þÑ3?ú†híõ¬M¶Ó»Öž›c~ŽÂÝJã¨)ª©*{-5^HÏßà3{Äˆ4!—¿€’Õ–:ÊÙ6g¶¸Öèþ7ß›n¼ùÎõé5‘áý¢µ
¤fê«êt¨(…Àþ"«"ÒÕ¢Q
ó“Bé£–aÑë°æZ‹~š¯|IÌ´YB¤íb9¤x@sùUw`®0KwÛðŽt¬á©í<sñã·.ÞÂW»ÅŒ5$tµ0HsÖ½tcæÃ—V0È¤ŠMõÕTê°Å‹DYºˆ¤  ®OO¯oZÿT‰ÃàKçµd^pÖ¢gB¸H,„D·c ¤9k6[\ft¶ˆÑfÖš;lwâEð»îšZ‘Ô¾®²!`¨-2Ò?wÉèã§f¬Qø(1Öâ3£![ðß¬Å²Iµ£áð™§%ÀfK1ã¯•žßÁj
áˆ@‹aOe±Èxvqc­¾Tþ?ÀšF¬
ÒÓ 3d¤f7¿ð«h­é¶bÕŽ¨9
­™–ä_‰ f—W¦+•åeo7«ÏRÂ­
Èùå
Ï÷t£‰N´••‹òÓk œŽ€špnz}§.†Œ0mp:#vÃãòö—+3è¬Ÿ`GèŽb€œü6Þv’ûÏßqEFfÊKó§¸Áhì—fMuY.¾iÔ¤>ÁËúÖ³êeÊ¬6Î]»vtºf™4ç5ggm%¡µÅè¬½‘°šô†SÌ¦»—B:°!9kÏð­ÞÌ*ïå¤Hô‹'ÊÃh9èˆB¿šË/9«õ¶ýó»,Off&÷ÃR›Ñtl¼µ}8k;76öß;.ÝÚÂY;~ÉÂCŒ’QÍŠ"T<² =ÈnLyvZ%ð,ÚqÍœoTháh6;	§-Èvä°ý¢NOhüåŒ•<¢‰lò.M)­¸‘4-b3'Ë¥!íÖb¤³Ú³-¬ö?ï*ðµv®)g$škÒ%I´vVCDbÚÚ_+3l9d²Ùh¸¼pS" 6ÎkÚYýn®ö‘ašûd,…[D²0pœçNÌ&RK&ªñaNtì3D·‡aØÁXCÖ¸‡™k1RÚ|&¶ûjFKm[mÖ´¶u"$µýßÛXsDÄX3mÊjÖ:Cû£¯¦­ÝRÓrEâOà†öîå©)RÏÏ!5ºp®z»¬ÖUW]Ý_XËDM›¥?b5^Âá-U†âWq»¸V¬a|f¢ÿ•¶Žµ'"¬jèýsùþa¶?]¢ôQ	Ø“Vœ•rÊ|d/D“³†êK‘Ç¸,#M;ç¼Ï®˜,b;Ãþ^zîÕW_ýîö9ÁÚ·¬}ãõ“¯üÛ¤`­½òqpMÄöÔñ!$G¦²š©4!4+èIŸ)¤û&ffÆ&‡{x ©FP”°w.Híh-ƒÔÛÐOýs„5ª ß|s´ÚhT­ª©R–•Æs« Ô'‡Mü!BËÆúÒTH„lwÖŒÔ\íæGÓZox0*å
ËÎk¨ÖÂ5§46nÈsy8$°¶mxllÛnB7·m›œ¾ùñÍÞÇ/¾E1¤ÃÚá•žÑÚE¸ÊùÖ[Ï¿{ô÷ïž+,PûÇ¬œ*¤ª¬‡¶V%yQg4êS¤¼<õn¬ÈÝ²kÑXó[¢Ë‘Õ|Î7ô=ÕA~ïS©väs°Ï«,Ò«ÅUìV–´þJ{Ñ£_bZ;Ö‚…¤ÏR!Í›ƒÕûÖbZ\X"¤Œ5íDfºÏßÜükÙG¸”¹äsÖ0ÙbYf=J
k¸Z¨9Ý°?pqe±Í–Ã5„eæ‚Êb¾’±¦†[lZ“³Æ7B¤`m°™`UmÑ²&û›Íäy¶
ÇõZ³½Ñ×Ïuå¦ËëÓ
ZlöJ£k^‰x	óLá\‡·–k6 ÀõF³²R…Ô ³fFV×ï-Ã0Î¬2Üy¢?Îš2GÄj†kõfºÞW
¿œ5±#|‘Hk™Ôè`£A´ˆ8mªÊNeççÏ£Oóoâ´öä~Oƒt±-klÈë ß³¦	ð•
ãºXÇŸnWbðs`´&¯¹Öb®¿+E·Z‚7ô‘„@ÎLöd5±Ú¾I:ÖÐ±ß?sl×0Ñýk_Ý¬gíøËä^¸«f#™°FèEb¬Y÷Õc–B¯ê=á†×ë=F•™æ`ûÄf
Oâcõ¥=,ñ7ÚçcwÅfÓî¡Õ™gô¦Z–?agÍ
?36ÿz‚ŽU†m*rüÊ+¯\?$Të(‚¬¶ñà†Ã¨©u(àš—Bª2˜kÖ¶Z[U»šZž]ÞF±/aÂ–sæÍªfãP!­J5Xš×–ÉÕh_ãD4÷ö¹d†»B5ë9{hïcŠêgûXãà³ÈÃÄôÔ~XÎq=€ ™–2,÷ˆ×88‚DgÍÃ ·ž‰ÝQÉ­Õ"€u’Z8$§Û§õÕ|677ÖÄjl.¾»{¦öGTsVc'Yi#ˆ†bmmrW$þ±¢Q=‹6‹ü¯>×UW]uuÿô…;CÄ©¤Æú’`-OdÑ5%¡ÏÍÍÓXS,‘b¼ïï÷´·¬]N`*È×Dk·¿zá¾<Ÿ«S˜V+×4÷:“-‡fíõMj†f Ü’Å>¶…‰p¦ªÇ¿TglmÌ¶•jCþXåì«xkÛ+™Ê“/¿|à™oÐDþ:°&gÍim‡{kQOmcLØÎ±ý›_ÈªGp•ÔLô±¢ý·ŸÇzÇ†Ç©{Ô–“fô”L<*)ÏÿãR`5ý{aÍ›Ö&JÞ‚’®i‚bèkUâÃ³ì5ûV#×Z‡†UŒLjºæWKü ù¢Åùj×âÂ!Íõ‹œv°š¯ã‰³ZìPÓÁ÷‹b8žÛ»vMönÛ5°³wòæŽžÝä‹ ßjG	¤@íò/.‚ø9{=ÿÖKÃk¿þÃ™°†¡ø³šÒ¨µ!äáý.»ä"»_Ñ+©j¥ŒÅ»í<q4¶Ø­ÏvžÉfò*ÈvsRcœ5•AÆˆ^r‹[ÜG[<oâÄóEú‘ÝQUb~H,Ä²Í¼01>ÎU‹‰F¡£‹PnFnÔ‰ñ‰°Æ"ÂZŒ„œ‡Ö8 k—Iâº}1Ä!G-mDä+¼§yÇZnq%éôJÅšÔ®HÕo53'*¿1[-:kIdhZó›ZÖbÈˆzÖÞ??òôü¬Áš`ËJOä§Y
,×!Bi²bx‡†F–-ÖË‹+ëû›¨gjòí  IQ'Ó,š	PêÛm·–™nöë?Õ
ÖñÞ*K25–Ö3K	…åHta«©š‘µõ¬©ÅXó–[^Zã®¬±ï&[smZ[çBRÙ7¬]S)ä
^Z(‚<?=¸Œ5.VŠ×~‚ûa5xÌÓE×¢µæÉý×Ô³†ˆ blJšjéöRÈT@ÎšŽm&z¨{Ô’Í?«‰ H†`Ïôö<0€¡60™JÑÒ…ŽS.$wxm×ï©ëÞHB»¬Ç7ÂÚÆŸpB!°æ´_(Y^~bäa	UöyÌ¿úÙŽh·—‚G@n¬…XV_«Y=Ú&E­Mkì÷ü—æL@´‰xZ@³	9k~‡§ôæ›V¥+ÇT$XSºH,‚dü·P-²Úÿˆ
¼ÖQ©ÎµaÅK‚kÛƒ¹f¡L]c—Ï_:Í.Ï{ Œˆ„ÎpÔôX ^C´æñ¥Ô@’Ú¯Á$bñÓªŠÆ·}Î8H¦':G°Ì&Ú	yÅjþ\ù³~„
Ô YkÆÁ<‹PÐÃ¢7÷òº6qÖÚ[ÖT†È­ÝYÛ²gmEkmkZëlYó¯l¡ý[¤öÇiØ‘ÔØ™"®q`!£lOÖÓ 9H ƒÿâ!{VëŽÂîª«®îo¾È|^°F½Í×UÞÁÒ@hna
·k¶Xåm½‰ÿ§cíÅ»-kÏk°Zm9o>š;ÒÖ¥¡z²’ÒÑê!E„Õln>*”Kòè_kqºšŸliå|9‰j«Y¢©©³¯nŸÛ^«á­=ùdéÀ7ñ¯2Ãu†ïÂ¬†?sæÁwXÛ¡©Ù»è™Èâ¥j‡0Õ˜¥Rùb}$@[Ìu!’×F	JhìhoöÕ`4P»`—¦7‰!h¨ðQ VÍÒ¥VG°Ó8NUÒ}¦Š*!ýEYI‘þ±ËîÉ¥è“™¸ê'm—ýhwÄ§Ú
ü2‹°Ž½›‘›ÎŒÊü`ƒ¸`¬¶kçî±`m wìædÏ™‹ÏÌ°¯y¿º(X£eM°öîëÏ¿õÆÌÆß¾ôÆ¸`Me»¶gÍA
þÂ‘>>ž5ØB ^©š<1É«ØðL…½Áš¡Z´Ö6wÖTw[¸æÖšœµó1]Äh[»Äkª>TåñHLi¦¦uT„5A#¬¡9Ö6&Mñ
±×LD0Ÿéç îJ"EZiMç¾Û	ÖF¨':8Ë7’×'%æÚÐ;Ë#KV9´Ì˜EjG†ŠàÉìÊz£a°Ö?=Ú´@ØòÀ¥Êœš]&²AÏÚíÛ
ƒ|-÷“/nNj¨ÍYãvþTq±Â ýõ%rXuk¹Æ`Ãvâ®*G¡Pk™ï¨‘ÛßàÑ†C¦Iý£Aß[¿Èl°AœË(ÅŠô›·¶q–AõS6ÚMóù²VûˆúçOˆ>}­¬Ùj¤œ˜bmkTxgÄj~ˆ¿“èž[[›†
}" WÖG¡ý£}këU;ç#ÜQ(ƒÖ$oX­y¤1Ò”5V±e!kÜ~y-+•ôï—7M¶ú]ßmµßñ1ÁlCÉußó{¬—~r7h5Ø5 ¢qmFæ«±#Ñu×ðäÆÆGœ5cµkÇ¯Â Všdá™\øÚÃÚ±vz¼xXÛÃX"Škp¡%{_Är5?FgÍì’·ý=5yhÈŸàÍ.1qÅj#pØfN2ÊlbüÊˆj‰±¦"È.QÍ!í¿K‘×b-d‡¹v(škNkÉZÃ^»JÈÙ\"ü%¯>)ŒJÈz+k:æèXc¥!Ù_|õD
ÊDeÖ”fv$§ˆ#_ÄúÅa¢5¹jP]pÖðƒØä‹Wô˜=½	Ö`vTcÛ4²=_$2Õ¦q[–AêÖÞ¶NRÛÂXsO±Û¤_mK_Í¶¶HëH3XÓ]kÇ²PûÈ÷Ø¹¯+oí±#¼ÀG+½Ÿ’Ò.«uÕUW÷;_dh>/oMS_s‚µ¡«yòÊëå/ó„)Wß£˜kÃØjQh¯‚üÇw µwjCÀC ‰Í¿‚Áš"ê3¬f-.$çXÖ¿”$‡‡ìk¬=nKrÞþBe‚»æûNq­øBÞ®óêêì¥b¾Èò`¹¦BÈ³
À<\Í”~ô#{Z“’2H®žÖŒÕ¶íÜÉåz²
)PV£;îš2Æ
\,ðŠ@¬vr|"E÷z¯Ï0Rñb)«·DKÛ6Ž¦¬b(æ\ë¾Ay`Íhí=šy­©ÑâLnÏÔÂ¡¢ÒR’E¯”?Çãê]“•Vò´ÃÖ\ Ä1Â„fÇMRûµˆÂÚ¡ ’kS­ó„g°–ŒÃæÎ^b1ÞÛ»{÷poï`m÷Àö]þcíæ­[û[ÁšÖ¦¬Áko©iíÝwßzþÜÜ£+×Þ˜9,WÍúÕ¦ ±!ÖÜ`3+ß+×_ WD´b†jÐj¹TbšÔt
kƒµh¬±]`óìþöðþŽô~zÖœÖP„5èÌn®da”6â°ý³è™ÅˆFi$PÜÓÉ¨µ§ø–ó`ScÙß¨ý$ŽØC8Í Kw‡5yÞ#Îb¡M{¾ÔüÐü|qe\ÓÇÛ]“»é”S,¾–#,øV±ec	æ{P=¨¸Å~«&ä¾ÒlžXZ„‡ÿò>¬†^‹Éý(²Zgd ¶•åÅâ	ºÅðÉVðÃÖåy¾ÌR¥5Ö!ƒ5ùfÝCmˆïúT.ƒqæ°¦ÓN…”±ÖlŒZÄ6Ú:#*¡l
'üïœElI]ÝAúMU,jîš®ªÚr?I<äQIkÖ–4ªÍ)‡MÄÆ-s×Y“É—é[·ë|Ðúàµi±Ú¥š£zÒŽ4"Z¬­èf´öom±ßcÖÌYkïY3gíZÉ-4{w§–uYèc*8È:ø.È(Ž;²³XÒ…Æ±ÖÖ†g”ÚÏL“IRû'YõŒáªù¸5ÞpÙuPcp$z7ŸbÀˆä°†Ž/b§ké9«ðð¦%±Â3—XÃãý@A;Pì[Û=—Ê ãiG&¤³‹#s@™ªÁXS‹Úï¬Ý{’úõ°±—ÚVƒÖ:Š •ÙY-€Z”®Dw­Ã\>	­…ÎµÕ³Â4›º–_¥o-)?«Çr‘q:¨.Bë3XË°âû; ¬Õ·*„oÄCÓÓh¶šÕ6‚j¶}Í!ÍŸH}ÌÃ{3Zc©(-­gí! Í@˜Dzå:ÿÚìq
";µh¬¡Ø²æÎŠÌ¶™ZƒD:Iû–Îš£Ú&Àæ7ÔÚïÚÕ´¦igÀæ°¬©Ð‘ÏÎ­~Öì–› –k<Ì3åÞ.×¸cÿûîxµ®ºêê>ÃÚ_å¥y2ÏP9/rcrWµ¬t‘Ã6½‰Ç[´XcýÇ‚¯&[-VAš³¦0ÈÛƒé©ò_žŸe†TM¹‡ÆDìÊHlÑïâ+ÍwXk¼¶Ô0µØ­ça¦€‘Ø±¦e<‹*_:ýõ|9a¹«§‹Ðiñì«S\¿téìYÆ•Vy t ÂZKzÿ¾ÿŠöyÐÈ¶m;¹><!V˜²„Bªé!•ePOA®b¶,1<6˜­WïÛ¦²Jð7xUAc¥–bL.sÖb$›ß‘ÃÚ{ë•…TJ1Íæ«¬É$*£Ø‡UªxudQãžÊ˜CÕš:ÆW_}:“¯‘‘[3!2(ˆ^‹ÄÖimã²‘‡AÚÞÖ–	¿¡±Ý“½”AîÚµsòÁ}
„¤_íøe9k/~ýýîo
Ö¸ T»À€5€í ¡"+o\?,LsbCü¨rqmªT«Vt&†ÓôdÁ±Uƒ5ÿi]Õ|ÑkQ<_9®é$Z‹ÖšÒ ÏÙÖt.…0È¡|Hï·Eî›êéö‘ØPœEþã’`J³£ŸÆ:3¶ÈñWH6Z2Z³Ç8‰ Æ3NÓ¥Ý8Ödºig`vgddyÑç	 lÒÈ;CÄÕ±ì€µ‘§aJàXƒ$ŒEå@ÉTkNÓMæÊLýÒ ÝþE%·5»½Ò@í¦v:ÑýÑZûÉÊ2 à‰òòJf†Ÿùú	Yw–"Ž+²lTêa<>µÊ1àV”×ÆCÍZC®\c°aåë£Ølû(Óˆ‡\~ÔM[RkK6H;ÓWY®ðÅ3`œÒüO t³x–êTy¤hM¿Éh^óòF)gª£2MëkHíuU.å”7¢odP#¹ßµÆà(·ÄXÓ9ëÐ³óE¸‰ÎÐ/ýîá"¾y¾º¦’iyÃéÄÑwXž+“{m­­Üý¯¬±´;ZÓ_p ol˜¸~€›­gìØ1@­W#ÇÆ&Ï<«ß[hãñk¦gíÆŸ ŠÅdAÜy…«AÂ¶–Å&±FÞ]åN'6ïÍ’!`AXBÒÂ–ì;5¬‘Úo%ëŽ}¨Ä•ç†{HzŸAªHb¤+,(·ßhí@L«µùj Y‚j?ÿùÏ¹K­¸j!£¹Fˆ¿—B¶ÔB’âïÉ¯Ù„¾âêAhí©È¦€–Jüd¢ŠÃJ„sýiåAîÿˆYu8x2Su©â[à5ÁüÆ3Éƒ\c¯%f¤ìõ§{Õ¨f.†Á
‚Lì5£5že $†A‚7[ä‹$ñ"ÖšomŸ…U«ìÙÏiØœÆ‰ÓÚbûï5;(DösGÁ„Ý£úÚ0;iˆÄY3FÛËÆHÎr] Fli—Õºêª«û®ÏÿõM½>å³‚@•×kÀDu¡ªYÂ•R­ž«29mî°ö"¤æê€5•A¾†iTüê„–Tj¥¬“’¥<ËÅÙ|LÉi[Ð¬E`»meðYÖìh‹vZ#§òÒéüùÕUU@*&ùjÑ¢¸V‡V/­WÏ~wûÔÜ“/X¬½þÊ•“ck¸hX£‹þ)ÓÎm¸BÀZ‰Ä>u)¶ŸMùÇßihcƒÓ&ôï~ßø˜fdËËI» 5ÌJ^þ¼wtGR2£ÓüLuJ­Ž6'"Ð¨•å¥!þ7)´Þ¨2t­ZÕEUFVùòäÃ$“’²±Bì‚—¤¡Zt×ì¸@cmU“½Ã´ßLþ Ë)c;ßGñ‚m¸·gl×¾]»·ì¾E¹ãåã\¾xYIèÅ3TB^„ÖŽßº˜ÀÚóÀT›»~Ý8í š³rHîÅ€jHñ…“C­h1¬qœ*¬a;X»ë«¶Eyd«µv!€ÚewÖž7ZsEkíö9YkÞ³†kvî~šßóyGµ<ý¢{Ö¹ŠköØlOû)Y¶f:5À|Íª¾.iRãŠ{ÖjeK\3ÁZ®†Z[Ù4[ÊCbf¥±ä;³‹øht´®4Oá§-ÍÏÚw</ m’¾(k·,ïKõ¹þSýD’›fŠXâ¬½öþk¯ÉY{·£g-:kz$ðÛOëJÿ§¹LéùŠ|\l¨·L‘ë¡gMŽÇ¢…«áXQôh…˜º°È¢™á¼™kê[\W´ã´hÏ`Nøe¸é+ûýQ{1’ ®2nœ´Œ½,Vìe’îP'XSÓšFSÊ÷°ku” šá[.Àp+‹t˜fä¬ÉƒD£ÈÍ4¾_ÈÍBZ¦ˆïçú4#1·?6­y`¿k,ü†BÀÈïÞ8WÈYM¤«XÓ¥v¯M×“-Íö“Tïž<WLE*ñ~V#)HQJøkûÜXdëœ‰­µçl,vBc
¾ðá^ „N”:ÏR­VI¶aÈ~TŸ¯õºÙŒ¥ËÇö¡¨NfÓM»=,©BAøi/I/ÑiØW)Z/ðV]V±øãÃc33Ð”’ cÃ’Vœ%œöë_G^ÅæÚSŠ…tsm{‘·–g›g2iZåùgW‹årnýÍ…ÒÄBék6¿”QéKí;¸«ªQ¼4žC™eÉèµÇÜ«T‘©íô!<lí‚ZÛcè? Æ5Ø~3X ŒwÒ ïaí?ÞËYó[+#í·V@5íÕZÒE:¢ ùÖ¶,‚ô Hn±]M·6ùL5®½È«…²¼u`¥¢<cöÉO§U÷~±Ëj]uÕÕý‡µŠ`—vª‚,/”jYµê¼ÆüVåø®œÕ`5ítCOÄ)kÀÚm`­DªE™·â,ÞOQöÊ”dÐª‡¦²œÃšöª4mFe|WŸ±ÍáÌ—AºPî×bõƒ¯_Í¿ h/|ýƒ> ©ûƒÓù¢X­xðìwº}ûO¿ýòDt?þ-ÎÚÎ§vÉXÃb“†ívÒ¦¨¥3%9h
)ŒKJ±jÈ‚MÁVj¿†d³–ô	xk,R7"¬}µ•Ö6’×<£©Ñgß4ûL±ù<8H…FNešî´" –økÕRÖ>,¼è*,øK°›Pü¢®‡‘–ŠÈ0iÍW`—¡-ÍåoÉjÄk&n©E‘Þ¿MÃ±5Xm÷Î3.Þ"BŽÙ/¾èÏ¤†€5ü¶[dAJï>3÷d¶8ç„†æ*:šË6Ë 5þº%Å_ùýÕj‰'i!Õ“<[ÎjØ.–Ñwà‘×¾Õ‘Üï“Ö<¾Ÿ]Š¨µdŒœó¦5ñ™2F‚±¦b'R¡±W@n
i-W¹iÑŠ£\6~–¯FþŽ›Œ4kUSÛc¬Õ"Í™â¨5–?	ë)Þ„½D-.çŸFâÈéá!«ã¤—D;¸Œ(‚\DpÒòüRÌPÎ6‰#¦åò©e¦Ñ_	Ö µvgÍífÌî7†¨¦ðþ÷¯­P—˜’J„¡ÓWhªºqe%Œ Â™l qfg+û÷“ÏQž]½­ nYeQßÜz“´Ç×%¾7šÓ0Ò¢D‚Þ€—Ëôeíw…g^Öíw¢•s³ªŽ´9n¬%µßNý,XíW>Ÿ½q‘>£$f„ß†ý´Ùh¦YB‡ Úù1™XÍ4M]ä gs2mõËc-¸gÖ³ærP—%õ¬á¬%“4‹‰ý~p—- ™®ˆÙW4ÔXë±±µðöÑeÞz3‹®ÞÉé#ãÃ7nP¥ÀQ·:µX»þ‘j …ä™„à‚®™	¤CXâT°f&ÈðÄßìá¥³‚ø$p¢#2îÛcûiXc¢Hm¡Ê`ÍBA°V¡¿¸àMÅzw-£©+éþôÄØÉ™‰Gï&AÆ"ÈÐ°ûÕd«ERƒÕ\Ñ^sZ¸&s­sæÚÁUpí`¥¼jmk”5×ªµL·¡Ê¹ýk(W8DEZaýfþ’8Rš ×&Ö²:Ç·?ùä#uý½ý0Œùâ‚Í\KóÖ ¹ð\a¨ñ¹k{5AÂBœ’Œû’³škkg-”A9WmŠiL~ÔÎÚ6†,ºNc-¢šÇ@n.²¹±Æä®Ú&Ö4ð:)¤ÏHÈtX3GS¬]+å†h½ì²ZW]uuÿõ…ÅRŠ²ÁLõ:&Z‚±
ÎÔT™ŽùòêÔÂB•kîÍ	 fû?´kß²°kµR*]Ô¤¢ÒD,¹Ú`-I~4²ƒqaÄ, ^í8ÆÍb±m¢Ïk­!#5/wÔŠ*“b+mgíÒÒéÓ|ðƒ\šš:}©\+RùÜöŸ~÷»Û=¤V;tÅ§bÇ:H, ÷ÕÐîžñ“Ãä‰(Í;£±äuõŽ3'Ö2…åŽ@kzä¯›Ò&VìÀªjuüèƒ¼»ñ}‘žù^ßšòûSøg8kEÁZ–eÅr!KY†$Péø%èÈjšù]X«.œËDb}írÎbï¦ƒ+LZ³%×3ÍÁ-CnÙ:dÍ¬5–Q‘ÚlAjÿXOïðÀ®mÛÎÜ„É|jã‘o~Ó°Uï8«=aaÇo«ý¯—ž1Kíð3‡§P¥jã±=RŠÂNT,zLdJ$!ÿ‚µ*óÖÚµ,
(«Fœµ6cTcÃZãÆÆÊÍ5cƒkÎj8j^õµ!_K¹¬ÝÚºR`Ö~nÒ$4=Fþ›CØ)¥~„±iKÌ¯ßN`—i9ââšDrKï¸ih„€!Þ97‚==´¸¬9Äå‡ü›Îè u¹¢2½þõòòlQ˜AŽAŒ5V&&¬­ˆ‹FÝYÃX«YtPëœ5nNk¯`»ÖüõO¯×ø‚•z½¦š@„å)Æ6²Öì²:¾¦‹„YVšÂ°§”È†¢N–*zr¯º8Nõ¢ä}ÕØ7«"Ùµ¶„Hé×Ð)´SØR¿$Ã¿|ã$“hiSóšyjì¼0²%ÅÝ¾fZ°–Òä:¬á¬-¬@hkËº 2H`-ÄvgèG÷ÖŽ±‹Ä–èglJƒL(+ÚkÖ<;'@êDÒÙ1FEKÝ³dmã]Q‰£FóØ˜²EfR´|¹yÆµ[˜Àœµö©ØÇ¿Ïo¼ÓÆ
É f$X;’”D²wÈXcÚ.‘8ÄÓ"•iâTó¬ŒÑ<»3SMûVgã×*%©V;­ñ˜v_*„oö„L¨b/`±¥2éñ“'Ô@b}cmVKl5ã4Dä¯ÿõ_Ö¤à®… ‘ÎXÈg¬smjX«¥Ë!dd¶¼ª<fÁZ73í}³ÔØrÊ¡i-S Þ¾FgÝÐ&b‡Î4rú-’§OOÙÞ½_Ó9¥c±Ìc/Ž4É½ôüþ/!Ÿ®fÎšûÅ4Hcµ­œµXÉ¬µMfbEFÓ¡½rKG}g¤²(ÑŸ¯Dm¡ýÑX³WðÒÜ[³øþÖÏ™ÀÚÃZhÈÚCš(#6þâç?×UW]uußÃ —+ÆJÀZ¨gƒ5êí†®^å¥íáþòÁÃS*ŒDÏœyæŒ8M[È‚Œ°­}ïå+–Ö(óKÞ}N§ûõòÐó­s*èK©7­ñÓDÐž‡¹¨OiQ}jH‹¡"~êvš«&>»t‰ùo8kWW9±s`íS•K§‡ÊC—˜´Ædìoûå'ÅjÌÅÖ¨µÉh¬LCÖ®–ÎÎÐµQÈ”&‚³6‘‘KS(0me3Jˆø&fK`ÍÓû«Ì­­‰½qôûkQßd#ÀÚÚÚ›ŒÆ~/Ÿá¦ÜÂg+—[ÌWã¿S+–=¢?%h6¬pš¼È*”Üe³ÐÇ6Rck§ÖÝ¡­ùÑÖÞ¥æ]kwï«Xk·Ö’aØÑ¸¨Í)M‡±É]ÀÁr;vÞ¼@¸ÈãÛvê=yE‹2ò„ë¢é‚;k”AþrñàÔ£×?|4wm*¶@N=÷Üs,6ÑA~†@’ª ©ª
«¥Ö`Í)Í”FÀæº`	#.ùj°ZÒµ¦¶µX)\Îbt?âèWª% §èÅ¨-½5	ñ=nš-”ÑhÉH“[æƒ«Õö4{
##¬!o@Ë‡Ó|‘µÁþò¼Yh,	|´‘"]a<zç ¾Gï­›µo¾¸¼l D/X“«¨³F…@ýMÇh¬/Õ\í°YM±cäM6C5ÝÛÊ a°&¦Á‚‚úVH4£n45ê ù"¸jº(.Âz1	i€pžç/rkZ<%g|¾Ë`Æ6XË(ê¿{·¾®7’¨§¬e29ñ0fšƒ,«©v^°¦Îýx/i³×–råbÍi­®Þ5S½žÀš±ûºŽk£ü¹rËN+PÄþ`£j´swMU‘+þƒs¸ÂÃ!òÏ	­iB´©€v.±sÖ’ßrŒÑ¢ü˜2Ò£E§Ü[o©ŽìÇÉF|Ï8†øÿeïlcã¬Ï5ÿ}¥#­tz¤u";Ñh,6ZÉ­f³NRì¤Ó‰!ÃL^”{˜Iê¸+¡!$hBÀ@8	}AÓ¸…B‡#Jë¼PÜB}‰¥QEÓ®Pb¤#Kû!ýÂöÃù°¿ë¾Ÿþ3ƒ½ÊæÛ\óÌóüŸgœŽ=¿¹îûº;û¡5×d­é_1ËÙc³÷ƒ"÷?ñ„Æ%6G÷Ç¢Uc—&ÅÖ0{äž…ÍÓ%qÇ®;ï¾~Ä¡9gHxÜCÆˆ%Ì·‹ÄEcäk»*5Så_¡Ó—†lÎ»²_Ÿ¥÷wé™ËvR,¹¿Z¡_m+¤¶XÃšgö'Ñ"Æjà¼vîü¹÷kfÇ¥ˆkÀZ4×¾ÝØ¹†¹6’ã½Â
oº(Ñ‡Ù¦•Ä÷}›ÉTÃšHSU·C;TÎÉ­@ Ê£»øÒóé	ýofsÕ¬‘íÿ\–Ù˜q÷0×T`j‘Ö$h×@4ÕA&4ãK†A:¬ERsPsX-å¬µv­±¦Zü˜/ž…-yb?·E|µVc­9¶¿AúîHDwby"8øåhÛrÑûÕ¬[’;n5Å³0»=
»­¶Úº5a½Â$^Æ‘ É¯‘ï…	Nf¶T¨¶Ø¹}:Ÿyò$ÆÚÞrÃjòÕk±
ýø¯œŸ1í:ÏˆŸT¾+—5›¨ÁY«ƒn¨Î"4®Õ9¬5LÓ¨"½ j†µ/ã¨…
nVAæó¢µ“éôÉ'}ôQÕ>š«vð%ôìKråù¡ ã[·í€Õ^~ñÅïƒjh5Œ–´ªq[ª¡õ£?HÖ3HÄ/M¤Îtyfp›ÎUo™-ôÙjÈ!ÀK‘
T]qIÍø19-v­‰Ö ´w_»¬r9`ÏµN‹|dÐš‹ùåxk!¸­D+›Î:Ôµ†²…$2k!°¾±#Mw—ÀÅ±
¬†Ô¤pšt¥…EMùü~!LV‹Òé Ñä²š€‘}dËÝ{ùò3÷ÞûÝÕ—O¨‚ê©?FXƒÖ,`„ï5ÁÑw¾szd÷äääˆ`-'Ábf­Ak-S±ó¡(’eŽhÓœêzÞžÆSâ¡ªÃ»@jìU©[ä5Œ5¿!vÑY‹Þ¢æÑÙÌìÙä¶¡õ$ƒ×ÖªCÌr?tèÕ1ÈD‚¿¦cr øÑÚ‡}†H„ÜÇûŒ¥àBÜ…SfA"Í°Öˆ™F{ùÒ‰}NO–ÔÇ‚j¨·<±Û³F”IÛ+WÞÃ-”Ø¬ÛJ»ñ}Þ¥¹¦*HÊ aµ+ÑWcCŽk¾qªùí¦ÎR¿hèWÀ‹žÏ¯OÈ5¨ÊCû­5G,rAçn'Js23®Ãhóÿ^iÊrJõ°¦5ÝÓ)µÙÀJ)%ù+r2•fµL¡—ºj{Æ9ÁHU§žò÷‹I-dYs‹½éV<ÊÝqÍ{ÖRÖæf`5d—fÀMÑ™YkˆomêË³´ËR‰ÃÚ¿6k¿öôG‘Z¬„ŒkFkÏVEÂŠ¥ÁY‹­if›Ý4×Â#’–MþÛ ^ø€r ;d¦á¯q>¸f£e÷š}yV3X»+jq(6[uÿ;?5÷ÇxÂ#q%DX>m\AXiFwoºón#
e9¸6IÀÅåõ)¯p‰†5ç¬mø¤XÓ›f5	Xëî‚Ò;ø‰Í—¦àþÁ/- Q­-Æj¯_3&¯ãPCpZð×,iä/?¹tæº¹FçZ‘F24b´Æ~:·ýÙéòf…ÕXëÔw;Þ+µRÙO .ž>6ÒEô´±ºþ¶Ylâ6€W“×„q=*÷SÒûÙñPX›³&ü¸	k,2k-Îš±PÃ˜µ–¦5î­À -™¶ ˆjK)¢» jlö™ƒ¯µ$ª¹¯Ö8Û
ý5Kâ8µDÖ'¹AŒfK¹Gá¦ÔîîjÂn«­¶nQ¾y 5^Ê2nV£cí$ëŒî#ÕN*yj¼º-öžÜžÛöÂ¡½‡ž
=kÍÆ´F¼°‘QO©Þhk:ÍS÷Ãë©LM‘ýš©AgiI|f›Á›z×lK,µ/KkRó µ†ªÈâÅgÕ–V,ž|ôÉ'å©‰Ý^JôüKÏJÏ‹Õ~t\k¯<ýWƒµ¾•²ÕV¿5¼šòGÉM5´‘†5PÌÈ¡jµZÐ¬5‚”Í8ìfD&ùì0`ã¥ûj<R°Õ©HîŽå°ZkËj‹-cmFóÔ*%¥lò^¾ÈîvkÅGùi…< œ¯$DÆ.Ëq&$†Ë±9ÊEVšñÐK[5ygMtÖl&™Nµä€±ÖôèÊþåž,²ºR*Þ–_9û­þe÷^zæ2O‡šÕ`µ§ÜßÑ§N8¬=üÄ±Â£7Ž™x“"H­æ‚×¬i-NÃæaMŒVÝ:RàJ)¼(µ—¤1R×œØ¸¹~ª¹eM´æ¢ÒG­=Ö’ézÜHÍïÎeˆ£K—}ÁX3	#kÍ~šÃ´Ø-‰‚×Ð>öºòP}|­V8j‚w­±'„$ZkIºH†‡!ÆÌ6êõ—àÌ]í}`Ô[éø¯âÔÖÛGa5ÁšŸêËÊÃF¡ýK€ÄûKøS–Þ1Gk2Õ´ƒÔN5új°'ªÔ=°Ú)Œµ_¾êµ¨”ÜES(y"Fcp	SÏÏÓvå÷[F‘%5kÆzÜMª‘4Ûm*E¦*µÀ£yNsëÆæ,É_T`í¡Qžpe)#’ÂHØ¬Ìi˜Y–”ÉW«—ÝSƒßl

÷ðÓHÕJÛ)!±éÞ f«Ñ¥Ö‰/Hˆ?•:CIÏøeÁý­ÆZ$5ÄQûíò†´kþ-c‡i-F-kˆÕ€Æbc§ø£}kú—u¬é[=Ìpì½{]za‚}Â`-‚Z„5ýÌ{åm BrXSá£‘œÁÃ8Ë¹dÉ£q·4H-ä,7hƒv‹&ŒÄ4HEú]/vBaü†ÆÖ:ùZ³ƒ,Ò¡ÀþŽþ/ÍV³ø]¡a-LX‹á"!´?²Þ˜ö¾³š4ãCYlH´v®5h$ÆBÆÎµÃ®gåª	ÖŠü€+ÊZsZëI×4_­šM¥Yº±VÈV×i8ÃX£oƒ»6í‚ué\ã™¼ûR‹»=ìQ!&/‚B„k+0˜#i›-ñ"KÀšÓRkl?·Eœ5÷Ôš®ÕY[²a­5R¬¶XÇÚ"Ö–N‚É¾TïDX‹UVÉ“£üGˆTW ŽÚ=ú†üZ{¼Z[mµuk`í€µbA)ðy,ÕÙ±Ê¨Ã'G^¼5ÐçGJ%L‰ÁC{a4¶à¬Ý×Ô²¬ýø7•|Ù²D:Q‘E™»^¤ÈÖrªÁ1£åZŠ82‚Çc¨ÇØñGÂÉß>›£ßzü¬÷âÁšúÓ'Oz$°vÐYÍtøðóbµš^q[M¬æ½jÃdöwµ;k¢5½‘œ°ÚÐþm$zí½ªõ¦ËX{˜´îá­Ooçì²£×A²èè¬aÍ¬X®"È»X‹¢g-qÖ×Þ¥<Jiý¥J1£Yke!G‰Š½ø*ÙlìN@›“BQ%¨½ºb“<ƒ?™ËÞ×¡
R§È÷‘Ö|8+˜l±uÍù,Øù¡9»_|Ùi++7®ä„:H>¡ýäkö­¤míÞgÆV¬¾¹«E1oí„[k¦ÙÓ§ÿpzwîÈäÖeŠX¨ˆßI|4{ž›Ä*°ã`•'«’fúBBªHà5ùä5Oƒ4o-0{X-kÜÙy¤¶h­a¬±Í6Ü‰DÁXc‡«¹¹u`‹›ùÂM6>`Ž}¡³0kMÆ=´9]–%°6NÁdCþ£ÆÝëQ-˜®~sí«™^1!ÿ¥W¹ŒXí*ýj`[Ônç¶Ä$,—óõ4îT˜-²9PÇ°šÃßš$ÀçìoTyÅÂ a5O‰#Ú\ã!¶ WA)ÿË¹;Ú kŸàä¥Áj5ì9~üÄþ,;“:×Ø¤‰Åî€')zœš“‹6¨Í-¬ƒ–,Ñ±f	¬ñçf,V@ŽÙó.Ñýäk–©«¶HN¸¬·–ŠEûaS/[¯ZÝäåÛatHBm=õ4o°ÌÝ~G©"›PÎšžHñ¦iì&©‹Üì‹ÿu0ÖlrÕ´s_íå½ŸïY¸Ößk›ª ý‡CŒÒqErkxŒsö‘Ô8u+m9{3äù—»†ä~þc­,6X£e\×¤2Û]7aíÒFhBC°Ùf3Ï Š»‰›¬éa÷‹T	ˆ2|ð—|aC¤AâtDû#RšßãœµoüPVšVc?˜­¥˜°Ö•õÈlVïÑd·Ø¿þÁ!‚F¤X‹á"Ÿgµ$°ÿWœ±Fj´­ýöÚÄ‘y¦Pq­¡sM´¶_hx“Ö 5¤7ë(¹åë>[B°F4•¬áïBoƒÑ¼ÄQOÖ=øjF¸–ÑÂ’=-lTIÚŠÓ<ÃSû9ãTâ¾a¢Ëf‡iÐsìXk	ƒlMƒ2é¦-6—µ‚š6¿ûÙÚ.-í¬9¦µ‚›nZ[´c-rZsdÌä.š£®ñ"`Y¨{Ô]å>ŠèÖÛ´?ÕBúÜ¡Ú¬ÖV[mÝ"ý§˜Î”kµ¼¬4f©ª±1Ÿ*G•…P—**·¨æv¼pÈ`aØÆšÃÚ)‚ûOy3[*KEMª¡ÉÃÈükqÙøZNÒµ{òÕ\uwÔB—ŸŒ»Yk_M‰¥†DgeÑ[^q"ÅTmú¢J )~ÄY;HäMT#WäðmÀýjûŸNXí­û 5×o%7Öú«1X³A<[³[GJ8f”Ôèwÿv‚7½,®–y6v$¸ÅØŠU—.Ñ‘ßœ/‚~ñƒ¼ôk¯Ý17öÎ„(­•ÕòZ)2S”ýSáš—CºŒÖè<ôèÎ
b5'4dI#¬%Ö¬‚ZV.ï]“ÐÅüXékg¹¨P/°Ö¡ß!—+	rPcÖVc®‘«9|ù[+V+£_¬vTÊ ïÖ|&6zl@i"#[üáÂsÛª•†šÆFEeì9²7n+o­Ò%—1ŸëJ”ÍÚ3æqÁY5D÷«i-k
ñð~Ý<Ç_¬æ=kÜM>.F3Zãh±ý"¬q³«™«Šðÿ·rÖZ»Ô<1cVõÇ“òÅQ‡5Ða_ð~–9:È±PèÅ¨[kÚ'p—É—·ÈÖìo1zƒÔ´ ÷êZ•I¶ÂZâ"¦ ™‡fch*A(läÌàjòŒ5¬¹¯f®Z@5H-8k.(.NÅÖn×(4Ø”îª¯t¶ñiÑ"A1œÑ™ð‘ä5™<ÈÃQö'“+ðd>K÷Àj*"O\ZGàHŠÄI®Ì¤ÖdÀ¥(H÷¾ðÕÊÊï/›—¦
Èzq2^/Ìº»(èÑ°Ó.–¤±´¶Íá“o(QæãDóÍyÊ%W8¬NÆù" Z´Ööžf$[m’0¢l‚[¡}Í›Ô8†àÓÆ¼¡¦s–ºYŽMG ô3€JHªè_ëßØ·wï°%ø/[¶ÚKŽ=ê ½g­ÁY»ß`mÕI1˜‡’.b}kªÕ».R.®Û#‚4ÒFdÀ©aM4±ž9Î,H!g"HXm‰ž5_Û4låá<çÉ=FV=4(~³¸^Î…¤CCÀÓ6zÖ,²5òÒ¥."_-°Ú?[„¿aÙüüüoßÿ`òñœÔ×b.dk,dc)äá¬Ì5½1—)×õK¹H¬ˆlZ!#×Ò^¹¯Z+‰i­ì%NÄøìºjI¯KXlÉLìçb­j.Ÿ­Öò(=eD˜ÆÑ²/ƒÕ–³­µVE\Ó¾%2î–.dßœÉæœ¶t¤kI_­ÑZÓÁ­46äØ¶Þ»ú€5s'½\”^Ë»5T¢=^­­¶Úºeú»«´ýÔJ„õe‘yyT ê”-ÖÙÕ(³¨e·î}êM¤6ûñçŒµW_ýÇŸá5Žuh”íU
G`Œž4¯2g­ž’ßÆ…T€5nR»}u{­
M§/þéO§óA¶“™Z*ÿl>?©FµÀjÒm?Ús|ëVb ÿú×fšôÓ·îe‡¯­…"ÈARE
Õl¶²gÏñ÷nÛ“âmgaÏ¶nMÅîî"YVK² mkDY$ò®¨e+ffV¬k‚5Ï·þÅwïúÉ·kc¯]zw,[Z÷Úí£–¯ñçÙ‹î~ÖºB~ `–“gd™‘¥­Yp¾š¢F´`ãêâ
ÞZbíß9àhÆ [´ÜùÌ8PÂˆÇö¯!”`%/ôúÖ¬ „êÞgf?Ö+¼klrÖB¤tìÁ­ÐÚ¬vlvlyD#Ò@­R°ØzbÜiS'›Î\òà²Ä¿¡f[A|Æ!¾¤u)º?kÎk¡_M{_=æ7äÀ¦¦5šVÖ$ÖÚq—¥
‘¼Êè¬‰Ê¢³æ{ÝÖØÓF_õAi¼	B£6[]k`*#Ýcó™k*“ä »ñùFG{Ù ·Ñ>ŒjDêN+“ÜBg¤5»&Tì 	¢„P›øÊr=³Ú”`í=k§BdìY›…ÒšFÀµ˜yvN°T÷Ì›Ô5%P[˜HPÐA-ÀÚD(ÊL©Á|wø÷ÖæÒûÒ\à®Ø
XC=wŒa¬-,ô¤f”@Rgâ¶Þ®W'ˆ–&îQ¬†Hï/›Æ5i-Õ%X«ƒo!_dóÍd$[HyI$ãfôùnNÁ^ºþ$g6{‚«Î¬òt¸bÓh5´WËè«Åèþ#ž2D0qÔÜ5ÈÌã8amX³½N¸GXÓ¹ÔräD°Æ~î•6n$sä#7ÖP¬ý$²šÝ^zÇ'^{ßšuT±Û°a—ÏWÔÖlr•§úÓ¸f`á³‡}¸•\Ã\£"r‰–5´#\„â “@ÞBA\æ%¢Y/}´·Ñø
»²k¼m—Ý¬5LXcŠ\Säûè<f‘1rcáÆ¹s|píƒóóçþ|nŸ-škNk1²)Ä?]›†Ö@µrbƒÓðoÝªeÏ7«f´¥Y
OÊ4FSÓšµÏ ]%ŠÕ>ƒÜ„qz¦½KÐG`‹~Ô6i´Z@·`­!çßh¬-QÙ:gMŠ‹K šÓ ¶Æ}™qØ­¾šk)c-v¬)W„;›…‹à Rc¨šèÙc[¯.>a4®ù»b45
êyüZ;²­¶ÚºuaÕýFðÉØ½§3äåU+=E®Î»Çµj¯fK(€œå˜kÖ»B¾È•3ÝÂ#^È¨ôÐÒ½ÂQª³†üd¦YÔ}wÊZl,òÿ§RÚP1cGÕ(MgÒÓ½òQ;H‡&<"üO¶ZH9¾s+ùÌ?s[M¬ö‹&9¬y¤MX+tªõ¬³²gëñãïíÚ3RëÞIZ~–9Ø€ZÖ =û‘%bIÜ~PWùTB¶ÂšÝ^{÷Ý±™BnŠIkä‹ä»»-¸…Î4ùk¥.k‘ó b¦f QÉ‰HÂàµ0DIç!¡Ÿ­´ø¦$³ìGg8Øy”ŒjvÐÏb£bÝ5?J+iU[¹ºo%Éß<›k†‡g?=zèãOOÜât&RC!¹?À´vlr¨šÛ~üôéýCUaÉý#Úe9Ë ¼ö%"6 ó1Ôƒš»(Š¯b«5ÁZ µ'¨ÔN¼fÎZÌA§­©ÒÜ4‡5­“O 7WF‰ø‰F	Ë¢löuØ² ‰‚lêh³þ4
ët¨íÃP»Ù6
·9«­µeÜC±RŸ—°9%ó_%ADih|ôÀÔ¥FVc‡ôX8I bJ¥{îfNq>’‚C]š«M˜³Œµ`­…
H+tTÖ›áÚY¸¿ROX	ÖrËÎ>»À±CX8rq.pœ9F\c`m!Õø¨/i·£k-Ýƒ£ÖÍÃ,æ”Ûý8
k¶Ñ•6&Qð¨Þ5”×Q¢VM£°F­WXkhºí"VÄ¹M'·¯›™™›‘iq&rÖ‚Ö$Nvj÷øV`Í8-€`&WÍ7GµÓ¶Ró2ÈÇ)[×û:ž™a­Ë¼cSÑÊj¶DÚû‘­%Ýßk#ù‡Á¦Ø~ÁZß^îƒ]ËúkÇf½¡:Èû[Š»½emÕò{í'ÛÁ&TšÒŒ|Úš[kH—-Ç—Õ}÷lÚE¶aô„<SY’¡Ì´´mø')&’*B›iu
±Óœ–eKG–HU?î·l‘ÿw¸ˆ—=žÁ~ÎZkÐÚ‡“7æ‰ðŸ¿±ûñù?¿ÿÁ¼õ®EZûþ´hÍÍµÖœ‘‘ÃH¼–£ 2£,È¢ý*]Ü›“¡î2ÕÒ›kCÙOî¹é™AhÐ£Ö~¨Þ?-®ó[‹àÈwy9$¤<ƒžÚbÏh¬ƒ„\âh¬Öj¬µÒZ4Öb¼ÛÒ¨†Â>Ü´^ÓšH­×_mi_­µ_MwÄ÷…[TÒ¥‰™a«¤‘ohVÝ=\D›Õ¡ÜùRqô}K-éß·c Ûj«­[k•LoZÛ¬!94_•z¸’éå”kš”N
Ö>Ö½±cÍaVûÇ_9uåL*­8e¤¥¥"¨Ä†oðšòRêXL¬•9Gåg-ý•äŸ’™.2»x²7ÝK,ž‰j¦ƒ/©ö‘³—Ø9ªvT“^ÙÿŠª]@ªóÞÂKC?Iä´–Àšu¬fvÃ³µ§°íxµºgçÖ-Û¸RÕ²ûíÚlÓh¼æ¢þñ².{§¥gÍ«!¹ –µwï{mÝL¥ºnFé/=v–d«ÑØ½åj6­­`o“Cqƒ5Z3)¹ßjz_”E—­Ô\âï\gû˜Å:"YÄ1Jaé´‚Fì”«øi«V­XÑÏ³Ø7L¿Ë@ÿÆ¯¯žýôÓOÿøéÑËØh÷pO»t4ÒÚB>öÑòêÄDe§A"Š]Jš×\¬´Ìûº¤ÐÈ|.Ÿ©tn‰:°¢8hÍ—~zaigÍÇ¬qopÖ®°é`MbÉ:q©"«¹(€ìMÚÈÄ_Ôb¤6Ä)ÆQòs‡7Ùe*u$Væ`®Zf¤$XwnS˜!Ñ"®«šAæ1Gmãnã®'æŠà_&xjÚ…cRoˆ¼èQ•|Æj…‚Â‰µ&Î`«™~£{Ä5FfÙ ¶–JH@M:ëÉnTìi€5}Ê	ëæ
jò ¦øcØ’g°(‹"·}þ#¦fpáÒ]jrc<v*mj´¥±§¼Ôç‰ÔqÎxg©–f’¤j¹{Frið¬¦í³´~¤MEkm!e+g·¹u*‘­¶ŽÝ¤=m29að™mâq+ƒ<'bûk-xk:FV©ÙM°&,éßØÖØ´n!Î\Öl¥Ãb²áñAÔß×?ÐO,¤ ­o#þøð[·t¬X5ðÎÃo kÌÙÀXkíÄõ*È{©ðÆ›zGŒfÖšîê§b¥YÎ²ÔdIæ[˜‘¶œã¢Eb¨^ÒRüýu3¬&m°™Å­]kºiµþõ	wRF®Y'YMTã+õšô”Ãš—GoyXÛj9Ûvl‹á"ý­á"°šÁÚû–öÈJ'l^yíƒs¿=wíÈö‘kïÿöƒßÍkÐZ(…üå/-Åÿõh®Ñ¸Öh®–rÛ	ÁWËOçKì¶7{6SÖÒ2Ø`5ÁZµðöô¨	Òî¶ÙÖz	‚T)þ$Ï«#{3·*õ”j“	þ’0ÒŠjî¬}ñLlpi1\óÛÒÎ¾ÚizlI…&¸V_ÍQm1VCK°7$/½ßPìW³ùiÖ!éÝj›äCþõð±ñFIh¿Ë’oøŽl³Z[mµu+“ûÌH0p&—¡Þro¾R«Õëò'¶gØÈ¨T;Ó=Y`Íq-új1^äÔ™+Wr›¨×hÆ²fµº% ÉDSnks×kìõ;'¥(ÏîR›þW5|³´fª¼XL¼øè“å“t©á¬I*{lˆ€¦ÚmBµeë+ýëËßï %hMˆœöíF^ó:È¤cMýjêBßó^¥{ºw°Ô¶@kƒƒ"¶îä­hkôÌhH‹è}bVRÝË™ˆ½X¤Ãe·¿séÒº®Ž±™Z¾ÄŸCâµš½²¨ÐÄ¦êHü3ÄŠ£ÁZ­Ëðj¦åe—[l¾k…51Z°ÔJr‘Ô¸G'M´“E’µV‘ÖtÁO¹¬ÔqÕÀÊ¾Õ}ôÿ-_}è^f¬}|\;
«AkA­ÆÚco»ðÆ±ecc[vŽäFvk%"lËµÐšÎzµòÙjpm‡Éa-Î,h„5Ã™ÁZst?„Ævo=wSÄ5÷Ö(xŒ¬	ÚÜY#WÑ‡¯qd³n²–9¨q—ÈŒ÷•=öªmdäk²Ø`Nr…~µ(®=´oíøhïÕPÛÈ¿v>/”µöú\q|-@`ïÄf{Ç4­a	‹èŸ²»…3š¦ÖtÝN?¢ikFµYšB²@ÞÏÆÍyíÕ»/paÅµ àðÉâã ¹Ýæ!ÿ-º#¨ùR²°^µ%ŽÌñw k,ÂY…iO(ª®+¿\S&ðf«þ”½öküÙ„5É}Ñâ!5Ám±ì:4	i"ûïVˆ¿aZÒ˜‡ç²9k`šî~{ÙQR3_­ÖT©*H:YÃ¸%`$¦Ÿ†k\BñŸ;Ç8%¿ËøMËå[¶ôã¥1»¿OÚ¸¦¯oø­½ðÛ–Áá‡±¬ÉY‹´Ö’rKäØ¥ŸŠÇ,M^%ZYh¡ç=^‘"v‰éqp†Ãš|ŒÖÌbÇ†¬F­Õ¢‚¬uJ„éõÜPü0hÎc–‹š©Òt³Ù¶<84¤"Hƒµã-k‚µ.Š ñÕÔ«véÂ_~mþüüù÷Ï_ã_þÈ‘ùó¿›<O8d,…ü•‡ø‹Ö^o*…ÔÌµ­IÐH.ÆBR#`#û6÷˜±¶9U¨qèÜ¬©(òÞ©Iu	6à›áCb¦Ùqy”Û¨5øäÅ¦”9Ä‰ÊúBÏšÃZÄ5Ža"i)cí‹Q-âZÔÒÎÚÒÖþ»ãšë‹F¬yd¤5—<Wƒ5ÄÞÚãªk<*ú§em–¥l\Ñ,×õ]çaý|›2Î}W{¼Z[mµuK“û-‡ÀA™^ÒÔ5¯Wùí9{ÜûäÚÌH¡ê© kŽkÜ¢±–ÀÚ™3øj“gI+‘µ†EW°VÄ·+[±£7é³Yôµ®õô”›YÍ;ÞþFá¤M
‹©†Ši`-OVÿŸpÓ4Uí"ƒFªÅòG`mÏ~ðôÓ¯l{Z½j{!µ€jÞ@ö”ö‘ÖÜZóx’ }O­@³ýÎÃ·)]¤;U©vŠÖÔÈ.ªbÐšê%e«!K$«h¶A­{…G÷/õªæÝ™Û_{äÒºî®±7«™¼hãå†7¯gyÉQÞ×Í9Æ›!W+Æˆ®XÙ%%¯º¸­13Üü<ÖF{EXC>&Ûa-TCaÉE÷Ü|¯ƒi%j)¢úzßÆÕ'>=Ê‹»áá²'¸ß·®½ñ°ÑÚ…{gfÅØ›§äFTï%>³o×šÖP’ÚÏá{‚5ŽRÎˆVOGÁi-~qvjŠyÆÕ¡gí;n«±=á´æÖZ©â†ÜYƒmi4®Iœ°ò¾5Á£0Mwä¶6ãGïOCÉ^çB¯Ô©ÆµPÿèKOáÀ\l¢uTÔ|BqzŒQ))ÞÛ<ª6>9›
!-ó1á1;Œ>Pœš(õrN© Gxxà…}ŒºÔvsô€Fw«Ø\>ó,v¬YÀœ†¬
ÒoÑXûÃìÍ8H"!]gDy©%g’”iµ—®©ðy¿Ö¸‰EË-€ÈðR“ÙÈÌ×í¥‘ýž©ç] &?Ã•®kE>Bqu=¡ª‘äcB³H&Ah®"´{Ž2ËÔ\« Wmlš²ŠN‚5N9—8ÇÉà¬ý:”A²9­!Žl/ž¯Å2Hhí…ìä	ÖZFPL>—â$ìèß98Mùå[h2…ÑðÄQÿ ?qÖÞÚ;@Ûð±c³úÅàq1¼?†A:¬uÌT<	C!6LTáøpˆ>$`Íš¬H9ÔãXl.±šgÐs—5ÄBõj¦ÏOZ#’¸\ƒµbI1#àšMT#2ee¬˜ÙÁÏiX­PñÈ¨Ï…‹¨áî‘›á"Êêw«ìç¿:‡»æ°ö—É©ÉÏŸŸŸ¿öx9·{$wãÚÙk6!;Ì\©TC&æZñÖ°†€5¸¶}åŠd×ì³òGúÔÒ
Y;ôy‚4SÜ‘Œ5äÅÓfÏ˜|JC4d>¦PW¬!‡RäamjÀbå#@ï7Zµè¬-kâ%IÕŠkK÷¬ùíœµ%Š —‚ü¯ÿí‹|µé¬ÆIM»²ý[/M°ÆsƒiIkŸ= 'Lv'ß¹Àñ×þs›ÕÚj«­[
kÔ$Ör™b.?M=•RÎ˜äUIIEÏävæ¦©…,²LËÖNÀiÑW‹°†±Fä«Åâ2¡Uu5§ÃX¡ÎroÆùŒL74.ßc½qšÚW‡5”+
Ö2J<~öOÓégI€Ì?iíjÛe¶õž”¯ÖÒ©vÛñ=Ç™«ö³Ïy§Úð¡žyæç³»žº‹uà5§µUÖ”ïüÞ6~¯Ci·=ÿüm¼›­î©P‚Ø™¢Ê&v•k–¤@Hã¶J—õoxä·›!ÝYëºôÈ»3Ý…Ûßœ*)„¬tæ{•Â­ÉK+ãˆkLÅF5.
Öô¶ºym‰oÖ±?­Á-snsV³Wü@X:‹Šs²uo‚µPôÈa-kb5³ßVô}}åŠ•Ë—_¾|âPßÇG?>ztïêY€Í!Íö´»d«G¼þÑ¶ÊÐ›Ø¡av7eµï‰ÐP€µ|²¦
‚í@‰¿­†¯;V?²òq¬5[kÑYc§%—šF¸%	«©sM+?ÙN@>Jæ˜]µ–5ë0‹vZ8\À"¡EX£#ÍÇª©úQ±#Žhk–­™ì£	…D°+n¹P?ï˜Æ†x‚mÆ l<µ)ùft- rXƒÙ&ôÁNz8RšŠþš`nòŒ8
 pM¨æg¡2Xk“7ÿNÏƒôëDó+´]äE»Œx|qÍ-Æ±‹©þœ/wçÓÌá¦Q­¸9=Q*S_FHÿ>óËêzbª[ñ™ÁšâFÒ
âÃß°Ÿse^;Û‡"Xku+š”êˆ:È.žGÚâ:¹ZŸÉW¯9i&Iý·sn}j8j”@²qõá©5õ¬ùd5›ˆÍå¢ÎÚþ
¬ÆOàÄIïBhå1¨µ¨¥‡UWÃÃ¡ÏU‡ÁÁA`MÂaëï·õ0Ú»|Ùðì!`MÿTñÖ¬E9«I—0þ?1ŒÄMØæ{VÏÇ9;N]VŒÌvc-à™¥ø³·£Ú‡X{RFÑçs!ï.vÖJ£5P¶ÖÍ*›˜ŒÝ‚×•ºSÔE—\‹AªaíŸc$°vY¿šÀh¿Ÿ+üŽ4È6çâÀHîìµóFô°a®½ßˆkxkÍæZòK%”Bæ-iD;ÊxX³·6[ÌHM¬F˜ÿIž!wozh»€_]¸.ùu=$7ÍZþ(-E¤ÏÛ™R5à¸CnîP¶¶¬…Žµk¨%Òñ)²š÷¬}9gí?l¬±AiÜ¿02ÂZL‚ä.µ”@ŠöÙë{HüðÕðÈÂ)W-}C§Gv¼¸ÂíÈþ¶Újë–Ãµ9µÒöŒÐË$W*Ê>zÒ•‘|¥:’cØk©@ÂH­ï©û„iÉ½¹
òÊâ&ËR¦<>Ê_$WÍ!ÇÎF]×,Pé5;UEõ°Åøþ¿‘×Š~È\|–˜“‹óEÂù‰é—©6>L$z‰ù×I¯ÚaP1ûg;üþs}o!f~’òµÞÅ¯æp¯8Ø®YÌÈJÕAÆß«ï‡úöªü¥ü†aÐ-µ”Þ¨õäÇ.Òébe×Á·Ž•‹k?I`mÎÚ»wÌtd‰\È(R¬ôæ5Ýµ¦Þ£ŒmGzSj…¦¶4p³Eô”‚ì„[ÓeŸ‡Ýè»ÅwåtIëÖ)Ù(ÂKGXÓƒÐÚŠ\_³zõJ=°¦oe_ÿ²CŸ~zhõì¡ç†/c­á¦yËšœóÉ`.ºðÚG“G&''ˆ	%dŒp,å4h-ƒ´ÓC…
>›ÁZ^C:,ÉnY¶R¨fÝ$ŒC´Øº;¹Øšy,:klÚIŽkQ8kAý±qù9»L¯÷Ž]…Öb¨H˜¦&&CáH?òë	éÂ13Xã®2IÅø›üƒôáFdˆzGÊ%5©\Ë¯]Ëƒ]f7rpDj_Û}uô!ƒ=!/J-UÞ=¬á«qô1ØÖ|áÕˆ8Tkêi;¬¹¢¯&©]omÖ¦HkèÎš©e<ÀT²)Ü$Äø»¹am¢"£|0¶.ÇáØë@6Sq¼gAjõÍ)vì«‘ÒCw³ -2Ä!keØMáI›-¡¿X´P>F:¡Y–ÿ¸VúzQ˜·PàsÍuvò£­f¦$É"Ô^"}uösÄa£ôÑ¿¨å?§a[l¿ßÈëoœ‹Ý0Â?ñ`7–{¹f°3Bš«žc<¤·´ù;2NeÑQÓh½¶|‡	à°akøjýƒ[ú¿¯–µ>Ëƒ\>øÑÃÇŽ½Ön&Œ<õTtÖîWÃ°6³¢ €‘©–º@pgB89mw³g(Ø¯“q¨KoÇüBYk šPƒ"¸M=kÒ=eŠÇKüû7Z«dõCÙû÷²Ôª 8©erÙ
Ù¬WK°o`µÆpXZsV½~îþÖ®M}x~þÃ³åñ¼i+S¿»FØÈ<qþïÃj±sÍi-†ø'#×â„lÇ5¡¬6Ml3­ˆÖ	£	×´H§;‡~JgÏ#{®¦¤ž:Ñ/—¸s‘= fI‘)q"\aÂz$XÚ¬ûOýÕ–³Œµ–4ÈHkk_Y‹¡
ýjÁWk5ÖþCÃ°u‹ÑäÏBÿÚù7˜ž=;îz{ÀŸ$¾yòx*Û‘ýmµÕÖ-Öß«Ë„åAdR¶j…d¹Zº°s¤RÉSf²•ªÙ‡žr\ãÐh¬Q#Flÿäo^ÈÊyfkšÖ«]¾Æ…²³šÔ2óšwËáJòÖô—¥4°PGÅô_ÌÔ2€š0M]jØiTF¾ä¬¬={ØÇªAj”?>½cÇËÏ‘ÿØ·ú-@RK2-.ó‹ù2Ç'.l§œÖV­é°æá?:¼sè½÷öo¥j¥ƒåžÍ4"k-›°	Du¯¼$g-kÑW»””½öîØØØº;
Õ‰ÕrgÕòÀg5ìÐ2çËæŠÊ)XA¤kYö¦?Þ·Ë-°æ'Ú\„ûÛtµ[xhY“:¤¥`mE\;µ5:k «þ~eÉÑé²zNõàÀð¬Öf}©!a¸ÆÍŒµû/?òÈˆ×õ½¹äÈ…ûs@ZÞ§a€™Ûn)ý¹‘ï%µÄXµîE’‚5©2ˆ-ÀóP-Â×þÿDqÍ²ü¬}§±iÍYí27î¬y‰ä©è¬Yý#`cji`spË|3
!G›Fb£ÆiØì©k4…DÈP‰ŒÓ,>¤Žå³o<Â(ÔHº–ÔVN—®fÌ‚³yj»CÜ#w«…µÍÝkÆ`öuGMZ¬‹Ciâ”›_Þ³ö¯^ÉM¨–´­ÍjÃYc‹#pšî~£g-Èÿê)û[ƒôùŒÔLvÍ=ÎÓîsµñÊ:¬6û»Ñ\ORìœ)u¿§TéÙ'VSPz]…Û<º¹‡~`òƒ"XG©¤Fø¸«ÄJK§EkPœõ®¡ZÍ>‚û?—ks2ô 4÷×l ¼½Ø†ÇÎpTë#o
ÓBj„ñ"~kÉîç>ÉÏŸþ\5·ØºÙqhibó3Ç²&÷-ÐZ¬)ÖykMÿ¶·ÖßÇ„5xÃÀ–Ž~þMðÏôaJ–6ÂÚ}:FgNÝUüpùŠ€Õ 2ËÄ dt3Tãê.Nî^¿	šã\5|À•g÷˜!„ÍádA‘£â"e·yÖ†ˆÈBûõf² ÈJÕç]JU¦¬¹£ªq#"*»Í8-Ô@¶Azäë¯ÿ‹ûjn­	Ü85Z»15øûùùó×vçs¨TX˜º1ÏÈµ³7æmV6»†	Ù1g$v®…7GÀµ Ü´ÜµíÅšÞÊÔ;¥¤¦ß±…Ÿ)ü‘'ÐXm—ìHM6ñ&Éšìç€ž4×mä°öz×ÎƒµÆ*È¦0È¥µ%ãEX|ÎY[üö…IM¸æÆZ‚ŒZj¾Zë<ìÐ°Æ=Âš;µ|SùèëM,Ï—9ÃT“wèzå.f¹ÿ}›ÕÚj«­[žÜ¯×&ø\y`bÇJ®¬)>¯†µV­YW|Uþ;û¾5ü¨f¸Ö
k§NýøÊÙWyk;c°–Ï ¢¸GQT¯eMË E-´¬™0ßÅ,l%_Z“Ò_VÓó©tm»åól°:i]jÏN³CÁS;¬Nµü;¤¦L‘—_Üûâÿ~ë…C Z˜ê%F»©øŽ¯óòe³¿¢·¶fM#¬ñ[õ{‡G†ölÛ’¥œtºÖ9x0ƒŸVµrD‡µn‰³ zg1c-¤AZäí3¼òì¢*YjIE<LÇ–W”×«ðl6ñv©Xˆ¹Ùl¤+ÝÃu;‹µÖDÎ$ÄÅ%ç¸ØÆ">[LÑO‹«˜âï­±Z‰¡Ö©õ¯±k€}k³G‚kGÙŽRú¥}û./†tXó2ÈÓ.¼¹sdÿNxd‡]*i/XÙ™iœvT|ÖZ^Ê”ª[ñl~‚?‹ös·=eÆjl®€jlÜšp-ê
¨–Ðš•@²ŽV›‹ÜžÄÏ¢(±ÓœÐB¹£1ÚøÎi„†$£Õüa_kºRN×iksVK×™³`~>ŸKãùÏZûÍÞíq …6 Î›Ú@f"´´±y·šgMzÁÆIºs1ö¬i¦FkÇFÜ]Ó’“VkmòfÏšd§EX3¸â3±IÁK‹qÖ¬^²5R
ˆÛ%^›XXàk*>4^.nvðêQÎÈBÝ’Žê=4©öh­i¥tO
gÍJ÷QûXO™z«é‡'ˆcFC^Î#Æ}õ’?aP;d¸«úÇ#”=†IkÆÈZÜ.X‹%ÁYûuà56\¶¦"HëYèê,Pì±›°†šœ5Ô2?N[CÐŸY…tÌ”?9˜È”ìÁ{qÇIBºÄ¿ÓÙÙcqÐZPlYsZ[A½ÀÛÜ,™1ô™€ÌÎdÉÂf»+hÓ=×?ãH‡½A†ÿúM4fíZ¿ÞL¶VŒÖ„*„l
ÙôOB´R‰8]hMõŽ]¡Ú·Õ:SXj–Ï+x+ oYKìGAßõ Hg5ÁfšZÖd9¬!PK­ZüÝ‡”Aæxçh¤RK/Üøà¿ò¦®«¡fsZkœ­{5CûïÏ™æ¾ýÿ²w¾±Qžçšÿ¾ZiWgw–4oÄsl°¨áÔs00 Lf c'öÔãÜH‘CÂŸl‚›„8Ð?éIÒœCN¨Û*¥uåC¢8JD•C‡qº]ªV#õHì‡f¥ì‡ý°¿ë¾ß‡gf‚ÕmSñi®yç}Ÿ÷cì	±ç7×}_÷˜BFÊù”Ù¶…"‹|™Nõ cxŽÉ;³9kî^»ÃŸJÇ5`NáðnÑóž‰€5g5¥‚m»žÞ_ï¬‰lbä­5È)âZä5¶/¥ÚvµzZ³n¹?¥2ô«kÍŠoÒš¨ßbE 3šÒ6 k±æy#ÉÄ5›Š ²ÛaµÆxµ†jè6ÀZ¥`årä/ ‡b®w ?ïõˆÈ'ºfŽ g€Ì1á‡Èj”Ak/ÏÎ·TŠ9^â¨I¨OmõjÜn.S‰¸„¿–NYä*¯„¬e5®YÄš+iÒÿ“¦«•G™¡Fù#Êå´‡Úäª¡úFµ;³ïRþøÚÓÿ‹ñ×Ö¨¶ü L5cƒcî¦=îÚ§T‹}|«^­(ŽrZÓ¯TÿŠîä3òæçLYûôGÌì±Ø\ÛšÒØj`­•¾	q?}_m¤¢'ÙGX»øã°[VlÇšI¥É@ÅvâEC­Ï]&S$O@=ü–Ä˜©%
|â¼V!ÂÎÏqùƒPW„5!¿æ[b­EÝˆŒ(ç.…Ç)‚$Gnå:ÅA*¢ kÝòKs¼ºiâµ§ðÕ°öºÁÚÖ·'ONð*ˆWB‚5÷× 3ì¶óÁÅoFkô±…6ÁZŽÙÙq’A+·`1„<sFã±·E1íÃXs\¨qC¬¬’]DµËã‡Ñ™xÍN¸‚!é\[¡«½{’BÈ˜,R]üÈJDfç##þˆÍHs®µë#@ž‚ÈA°Æ“ 8cGXÓðQZ§3Xl C PçUuú5ÅuLWOX4äF9M³‚¡ØÜÓhPƒä¼g-Ò¸æ¼æÎšG÷Å8H,¸)ƒ4§>sñd|h îX€5v”kÖZkü™ˆzñ¡pQÜaÍü:šÉ*›Ó2îôV@­Ôæ½£ó+(I,Yþ~_hÖ©ÌÚ‘ÍfüŒ!M™Ó–Œà€Å°Ò8G!¯_Ÿ¥Ëe]´ñ3M?h)2¨lZÄSxhúÐ”}“>[(·)`¨|5n’»jºy¤/üV?{ŠÌÏ<±?¸iµ°ÆÃ5¬V]ßÙÑEöÚ5‰æàˆ}\Ó¤¥­ãEMERHÐ}‘ÿK¯\™äíê k{q«aí²ûŸ~b»JQ/¿âP¡8Ãæªñz†øÊÚçÖv(Ðõ\v¸°ÎÖ^”Ø B·µÀšË,¶µ¿)©ö±¨Í}e2é'–ë±Uaœäi[ÓÜ6/ƒübÃZd5ø<³N5gµ÷À4N~5{áÂ¹Ùâôììti€>ÙÙb[Ûô×Š4”§¯Y$ªŸ]o®Õ‡øçB’o¦ÙÆaC8½yÑZÁ›ÕØ¹O‰@\­„oNk’âQ··önu*t~»ªÓÞ[þ’ÈÐüWKkqÌÚ‚3±Q5äŽš³ÚµÖþxÃZ½«&R«Ê\Ö”UÓ¯æžš\4§5ïNC”B²ÙàuÆ«­Ý±ö+òÖÿÈ3Äskÿ6õL6b j¨¡ÛÜ5W©¨
’±®T±³Q™Öœ—°Ý8¤[ŽC*äÎª6’9À+ä¤4¬œëÃ–'R6ÕÆÊ"±
\R–ÖÃšz=b›ñO±ÔØf:‰ç‡Ö@6`m†Rcç)ý®±d¤ÚÏ½öÚc¸jI¤Èú·^©Dˆôm¨ñtüAißø¾}“Ij£Óšòû»·(»kí¹wïüîw=fy¬Pü”ÛŸËçûž8Ú/>Ë´$bmÑýeÍFã‚£—yºH0ÔÌ»³u€µÕ‹‰ygç¦öP3@VfU–]da%k[+)³;oôÄ®%“‰°–¬BÛ
l&tÓÅ:È ké"Î5îó]”G‹øžƒ¥õ×ÏÂÖ'ÕÆÃKº—¬Cw­[·’å ‡a5’Djšµ¦¦AÇg®à«™üèí+S[²h ¤‘ØEVxgá¯rÇ¯ÅìX+¥¬ŽêdËÒÓÆu+ùÊäãˆ`{eBû}z¹Žå2Ñý5u“û&Ç[³Ò Ù¦NM¹—æjÖXú5&N_]UW
9øÒaHVoþB5O{Ôû °ÆÿYÀš>ÌÝ+§M@æé"0…´œ#HÇab¬fØÖë[1$£ó‰fÃ†gFd9Ï‰¼ª_J Et‡(ƒ”¼’›	H7QÇ“Ik³þYü“™w' KÀÐý¼€†|qUÎZ«90Þ¢@Ká+ÝœÖß%MW6o®ŒŽa)ðÍŒ²QžW/ìV©¹}.í¥Dr7µHïHÙO+,¹Í	ª‰Ö¸¬eÁë¹ù•2XS
‰†o;§YŸ;ÚÕžTù£ÁZR¹úˆ&VãÎÂóE®™­ÆŠ0Hî‘Ôtëº™b-³ZÄô_"„uÄµxÍÅµšÁk¤¦uô§55Ñ¼F]ñº-kà´ÅŒ]æî§±gm’H U’_º§ÎYó‰$«w>|éáÅ‹îøT	…Èz­<À_¡#é‰þÛa‡Ì³Â=Ÿ±àCXó’6“"¸XkAn‰ß'‘êçÖ¨Õ4.e*‘Ž­|ù¸l)â†zÖ•Sy‹‚Ê	ÕØ¾ÀjCj°Ò8BkH°ö«³gÏÍnšž:s}zúÆìÄp?ÿù-qëÐµDAJ7½vÆƒ!£¹VâïkqBvV¸Ö+sMþYë´¡´âºh‰Tvÿ?ð¤!žA£íØÁ‰]ònµðln7VÛ=äÉš;$óÓT	úzd­±¶päÂu(¸a™†5W=¯\«Bµ?^”°š_¯M†aóTDXSf&¤,ðÔ<{ôþ,€5âú5°-ÒPCÝXûk¢@*m}í*°SN1¨ÙÊkthš”yJ¿ËLãŽ«Æ!æö{äñËÏ¾É;Õž)óÁmúU‚ÊÍ˜jÀPÊÈmtP.€Ê –…£%ŽüyÚ?“#íÑê÷ÏÌ0IM«hÿ7n1QíÿRþøš~	¿j¤†£öÒ
<%"ÿf”6þÃD?~=8³oŽkÐ”Ñš1í¹W°öÝ;¡5þhíïù»‹AÎðRàÎ'²˜‹3òzmÄSÛŒR‚µr¡™Kd„”–ÜcŠõ¯ ØÝñø;‹Z­þÁÅ§vžÖØ¬ü± lc:^¤(é³;kd`í–`‚AÝì#S9«¡zZs³½ËùJ°f9#Ñsót‹WÖLÆeÜu®UxˆØ~Ž~¯C+wíZIïÚ®ŽeË.ÊXSÉãœÍÅFOÝcÝƒOyY*':þƒSSX¤È@Ö&¨™»ÆZ)"Øºý‹×ôÏ@i¬“ð‘Îbf«`-'nc¼už‹ó^Ÿêªv¼@JÇrÁæ¬¹â 5qš÷¬ùÒµ ËÚNžœrDûd†b$›·=(¤÷{‡Y­Æ†Âi”—>¿…p~îŠÍk”íñ ÚÇ$SÜ:ío‘ÚÖ#¬ñÀU­3§v¯	wØt=ˆ‹úbUˆHÀÈ´…ŒøYB8fÃ	RÅÊEÅè¬Zskm.¹E_í¸¶ã'õ™ïe|éQ“«½gMdæ“¹#¬í	ëú±×^æ<•VU¢+©ÍéŠ20¹R!À´¼ÚÝV g­ ØR#nÛ †þ+0=ÝŒä¬`’ÂÖ‚ÓR‰Ö8÷úß¿bÅé;pe©ÅI[v
Ö{íVìÐÕ8ÊXãn¬§y	¤ûjõÎZWD.³Ój’Nµó¸ÙåPìXë°X«Ur™­ëV£éšÖš€µ*!»º¶ð¿ù©×©‚<,Yù±cUuÖ–ÞqéðÜÅÅ-§Û·+`^\a„féòZ*jÄ`C€öéçŸ’col0Ú ÖO	xBÑ¢YÍÑM+= Üõßš«Ù–É/$½ãÅ½Y¼H†åÍÄ,Ù£úè°fÆZmÃÚEk>bÍcû¡5íEn‚·_?îü,•ÊÔ‡ÊØ±}Øyü”Ë±ÏÎ~pîÚ™C–
YâK!—Åœ‘Ø¸Æxl”ãß"\Û"¶mj¨¼ùs{à`ö9¬f¨ËÓcüÆ‰žK@ØF¸¤"I¥i²øZU•²g‰MYï¬Å*È…òEjõÎšo_ŠÓnÝ®|µ¬U“Z}ºH5va6Îšòú-•Ÿ¿ P`ù
‚„ÕôU–QÊCÈ†jè¶„Aþ·d057AYyh(Ÿ/•Ø—²d6àÔ€lRëz¡šîA±
òYÆ ¿yªe~¾Ø‡È´w›½ú±Pî´ñN¬T¤¿d4)z–,’V?E)ûøÂÑ™£ji+zD€+Óþÿƒú‘ÕžæíÒ;výì÷š÷©Ýóð±gã§M¾þ AÚÙØkâµqï*®¹·
!éZsZ×ÖÈ/êéÝßNeîÓk„y´dÉý¥fI˜¥÷ym
kihÙ=èÞ·uP“Âëš‹ÉÛ¿+Þy‡Œ‘yŸÑ&Xc/‹LËç²¸¡ªuª	~„ËJrIY¡Øˆâ§	¬Ùfˆô&ÅU´×âÃMÂš³ÆšGø‡`Î¸ùu¡•º¡]6-;Œ¯vX[¾ì.Ò ±³öºÅž<5ùæ;W¨ƒÜ:=Ñ/d*)_äÀ‘›·©ð‹c.§èþ=žÀ†d>k°ÆÊ ë`MZ9¬¡qÝ‚<26[‡
éý?8uÈm8$Šèîæ§7¡ˆ}/ƒ¤WM¤Å‘›;j~øM”æ8Æ¾ºoÍª ûFü“øÊlƒíÕØŠÞ"”Ùº õà]M.JÉýIºbi£¦M†Q"¬%~•Wó½YÇjlH–˜k‘Ø"²!`­Ú ›ˆ§BÄùŠœ¾=È>0Ît\Ñ|a´'{.!ÀJª²É¿	ž‚ùTZ,qr4½Ù	l¾2:H\?b¼Ñ"jË-°`Ÿ‚Âø!¤4Èà,dTí¹Vš­Ùü‰T¥âm¹jˆÛd¹ý -bïä‰’“Xxxj¾Z@µÚ<Hô=íX»±5`mK,udcŒ5;D—ý[¸k¾3E[Í¥–5N©†lê¦Œ™„‘ŽŽnúPW¾AÕ¸½¯«]¼çÒ'”BÖ;k÷½AË¿qúô¢–Ï½Õ
Œð™k8&|º MýlÏ[óœm´ü&‡ÂG…A Ü4Dêu·Ç÷l\Ý°ös~ûËb™üDy5‘™ýðì¬ešéÍnfÀZ>¯*Èh¬«Å†5‚ÏœÖÂ€5=wíÜµk³ÓÓ¤ŠLå#ƒ¹˜ã—ia”·—¦+³¤ø›¢·f9#K!WÆœÌµì˜)'VÙ²mªú¿móÏÝY£á§éóÖ<Ëß3F´÷ËìDiwÃeÊì¸–ÌA°•ÆŠ	Ý¾¹€³v“ÕØØþ‚-kjA:±ý‡‹Äl‘l‰·Æ^UŽ¢13ÖLzšxB({¤Xs–Ã”|Þ\àFdC5t{`íj'ÕÞª¬žîj\µl‰}Q•dØE¿¸‰HD)Ö@c]>þæŠJJ•ŽÀŸÚ5œÇ:û 4P¥"¡¸$žŸ³Áè¨ùŠýŸ®™°¦xþ4À†§©=ñÄûŸ€ÐœÖŽîß©Qž8æ¤æ‘"T?®\ºôëµüˆ‡µïu@müãgá³¨Ÿð«ùå—Ÿý¡hÍq-i\»Z“·¦¦Ï}‡b
!ŠÖŽf3-¹ý/¶k(­ŠJ‹3û÷Ù;¶–á/•ÜhD™¥ËÞºçž#Kš¾¢‰Ó"¬!ÁÚ¼ØZÌ¼‰|k±¯SžZàˆAAe™¬¥ZäÉë€b~×™Î«ßKOŒ¸u¶ö‡¥Ú¾3¿a«Rä7ÝÌtî;Nmc)€CK–2]\‘¥Ë:x)´q9/ö–¯ëšûŒd‚g>ùä`÷[Ûš>ñž5¤ÖÁñÇð6Ö•§¦&¶öc®Y`©j3òÙ,´¿Fëç_®–l[´¨$„ÓYŽ©Ù=2#íÛô„‘/k§-ÃX¯&5nî¬¹±½µj¶»`Í÷qìøY "‹e¯ÂÁ¹,ju°æGW·¹ Ñ[.#ú8¿ìj_õÎµ öÎö¿#‰òêàMcOA#€€à°Æ=
;K,¡ëlî«×È?”|&¤ˆJ>	­
ÖBÂˆÝa´zkÍmµãº[düLrë8ÎóÐÒiòûdO±wE“­>Ò?‡‹®5?ø>ŸÏ†aªÔ|%]š¨L*Jy¤¢±’Ú¼»¢Foh·œ¶>Ö —Jê¼ÞQ 7J#€7BádkTÑ„æOÏÛOQ•@®¶™ØÉßù¤öÖ\¾vxô,H¶X™8kÜü$ÖAÆAk[ä‹C	–±p<«í]«‡µh±Åk’ýI;‰µ†Îµî.M=s÷Fcœ¤Í×¤6_ÁÚSÕÃZ÷²õ—x'ê´¾°žsÔ4kÍÍ!ö*ås¶à
ö™Q“ÚóâÁšrw<D©Âk*†tOM°¶éåö§åVÁšÑš©\Ði±$K-UFùüÄ¶ê$ƒ—U²Ø±rÝÊeoÕLXÆ:ƒ¡&æbÉÉõóçÏ\?wýÜM'/ÌRâž)å:KÌßÌ—Kú½Ú ›Nºî•ÿr–?qZæšÓš&dóÛÅS!)…”(! R¤X€ÔÛS›~^œæ„F’˜ëÃëäL²Ö“‰Ì|“ä®Ý…dÑýA²(Õv`/yÛÚ-[Ö"«ÕÃš[kõÎšßþl-<›È¬¡:T‹´Vç¬q7XÓ7©®4ÉŒ5a™êQ“	ÝRŽÌb³™-Ùˆl¨¡†n“þƒÁZoç‹«úò½)?TÊög†h/SPÿ×õs×±jŽÆzóä³ÇO§è}“Q—Ji®µºÓ:òØ4zÍã5±ÉuÓ+—Ö¾Ìì™™ÂQ®) ²÷èþ¿ñÚBú÷ó Ž%ÿVþhÙ¯zŸÚÁõ¯8¨CmüÁ±Ñ>þøã—_~ù'5zÙ§á jsMÞZl-°bykûg 6 1Çëƒ±ýcúâN”y] J°Y'_.Å¡eÉ×—õÜñÖ]wÙ‹W\"¶k8kÀ/+™èZPL?;þËpæÁ-ÅBkKÏˆµƒ˜.ûhlŽ\”jJ¹saME×ª’ü= ?¨Î[c]'C³¦ÚSd…œÙn‰Ë_SßZ‰ÝsÇ¨‚T)ä±#wÝó”<5—ÜYSêEFbOž<õøäc¼“ÐÃÀRQ°¶xh¨”ókµfjí½¾¼"ÿ¾cÄ‡zÛÊÇ'/8‡ò*	«‡µVQçªuÖb ¤3ZŠ}‹:ÈYsÒE^óU´Ú 6…|?É×ZÕ"……Š¦š?iM¬¦½;h{‰Œ„ÌVêC€2.r¹çŽ‹#«Ú{y
Äj¼3#XÛ#wm8„‹x_;)®P’ÅN½$Òl8hBG°ˆ¥gú©Ò`-’;·Öæ|ÇÈkêY³©Ø³Î8hãïŸé.?ÏÎ4r÷àÌ@ˆ¬bÖÈŠ|(Âu™k.Xp>ƒ|ÖùŠÂAlˆHy~~^ÙÒn9jÙr%åã°Ó}ö¶ãÔ¬ª”+ÖôÑ4¥©ÍÊÃNkNUÊJ)ð·¤½™mÞbó=™ šß5[›ß§¬2Ê‡ª[=Ø¦+®Õ€µÖˆjŽb–FËŽ½WFV³Zb¡ù¹9h·D7£5Ÿ…où"[º1Öºk»ºmÁ×ÿË»æÆÇ™±!í»$Z»$X‹“ÖL÷-ïºïâÒwXÀÐš(L°–ÌÁþ¹r!ujÁkÿæ!Ò£æ•Xmà.qŠÑ±á+ÈÌ5	°»}ªšs™Pî˜{1d™_t%‰u&åy‚Ö@Tåü½Àšûj…‹„†56îì™t-X;#V›^qîÜ…s7Î±ŸíÉðþÜÐÀ6m&OeÏÖ,ÖØð7>8ÃÄµëœ­ñ÷Î57×b*dOçŒ lÈ…ì=0¦_ÍÜ³e½S0"×Ì3ZÜZòJÂ4v:ˆÙ<ñd¯ýÛz«`8HÏÙ ê]”„àþâEbËZ=­EgÍ÷_–ÖP­³VÓ®†þ_í¦ô­±fGçšykìÂ?(õAzÝ£¿C âî0X»ÃÝÕˆl¨¡†nSäÕA…PŠEr³š/VBe˜Šš“É°Ét§‡.U¡ŠÆÚ‡o~Hvÿ|+`bGEˆ°ì„ÎÔ­QìÓ[þ<”KºÒ`?zõG¹þÙ#°ËéÜ/OÍ#2õÎìG2Ö$54c‘"ï>çÕÊé‡ÔlœÚ×øý{)±l¼?M5?ù¦éßÿÙÄá'ü•~Œ‚¹iÖ‚žž¡­Ï%±]GM`"ÃÝŽ–›ÇNô— sÖÆx*òcT{ØÛ»å5¯ÜµlÛ2³Ò"«n¯„:H]D¼ãê§ó-Z(‚‘ogãÀ`2øq„7À¥<…>ZV“ø
¯ÆêªœPàµÚ¨Ho^Š„ç@Vç­…—ˆÌ•\
kLÔ%a„RÉ•¤A.]ºü`Ó®Ï\ ïÆCkn¬±™4»‰güÁÉwN:uˆÉjùÅ‹3Y«Ì–`°<ÖXëÍy$_×@'*cpf·u­ÈrÍy•r'òûÃ‹ÕDdžßŒì¬sÖö%ÎšÕAFk­×.ëfP&sm˜»‹³jf6Lbqë+a3í"¤!NmåòµÏÏŽÙþÞÃ†yFJ¡…ˆèš:Ú07ó×Ú½m-yRëìÝ5Á	Öî‘\¶0	 Ä8ÎR<î°&£wXÏÚå›¼&`«qÖØ¢Ž;®jô¬%^˜–°†åÍä~óÏùâÂ@5®;1rô+ÂÈ‰OimkÍK!ítÎóméŒÉU4Qö8ºy~Ó4é4­õqÂ[N{TD§šGl4jÏ¬ö±#Ý‘à‘Ö²ýÛ<")ëe”«´[†þÚ
Ó•T9-	ÖôwOÙwe¨f¾äÖ'µvFë¾©C°ZŒ©…›¼5@\CõÑý[’:ÞVÄÂåeìtRkÂõ nqV~(€%ÐLÙXÌHì®-[ìdàÖÑ±¨•e—é+“WÛ\lXMO 5àƒIk¡`àaRGî{ãE§¯Ø¥üÿa¼ÞÚv/ƒD÷[p¿ó6üíý©ÙS¥$Îõ}Àšªü€<¢Ïo/È€ŒãÕ0Ø¯¹^v+#¯eÐ¿Âû]$X˜0¶\èg6ª‚|+LX«ñÕÞc	¬™;r]¿6›ÏLÏþêÚôù³g/LQX	¬õ<º…¾¾¸¸	ÖÒ{ú†¯]¿vãƒë×ÏT…ø¿c!«S!•`ß4\Ëõâ°eÇø@Ç.ÎnÛ? kÈÚÔ ³ÏL¸Ù&Yx?¤Xÿ‡Ü­äcØ[-¤	ÃH{n‚5+*­7ÖœÕ‚µêtv_¾ÒÿdÄ4ÕœÓœÕ¢³öG§aÇH¾Ï¦QEäc+ÊU´JÐ
³Áºµ'XÔ¶Ë|Ô„ÿúŸ15ÔÐmƒµv>SqTo)ÃÔV½Ò-ÈÛ\.qÙ2y½Ñ¼êÞƒ‹
sØi~‹¨f¾Úñ/_~ùÙ“'g‰*‘†ðYï0Û¨¡QF`~UWb§Zöš×Kþy¬–JÓ©±ÑŸVH( k36\-ÈQíÎ¤O™©Ö±l£HÍBy!¡|ÁñqëOs;íŸ¿ù‚ÉYí…œÚœÖ®Õzk´¨o}í;ÏEZS ‰Tl>:Ö20ÉÕspb¬¹ÈN¯£¸ÑNñbÓ[¯,íyë®ÈjG¸AkÖÖï¤Xhÿ¦W/ðrX—}¤Á¨2++-¯.¬’¦¬…J&'³8;‰Ýo©‡šÇ { Âš¡Ó°Ðª¸L÷ xÕ}5vAµ £M²kÝKœ×8[§ä~>ÁºuÝK—­ì8¸±ã~ö	 F"'¼FŽ¤&…:ÈÃYÿðâ>úhòí“õ÷‹äàÐ¶†,F¤¿Tä`°²!ed€2zÕÀ¶E-™5M‚ñâWòái©)
Ã\bÎ¯‹ŒZ¨æ¤f÷XiýÚqà¨²]lY[%VÖÚÛošgÂM›¶×´r‘ÓØY$•Ž#$‹XZ¿®²Ét$íQ~³Õ|¢›»k6ä-Hˆ8lBÇp9qÕ®ùÇ8 qÕ×ŽF"79¡º€6GµHk¶âñ„ÖX³pI³îÜtb/ÅF¯C¢œì¾0›lÚ©qSL|tãj?vÔ¸Ûc4ª•ç)N¬0=mD•ö8?VîóqÙé‚ZÔ£×
æ¶ífl¶r"A³””Ôcxj&ÓžG•6šÔÒ£å‚•Zm¶¡š›VoÓŒ×¶CMªwÖÂlùi¸j¼’MúH7wÖ”xX-©|ô]¬zÔ… ir”]:«öãÙt¯Æ»5xâp™FËÓ¸Æ€µÅØkÔC6u£s“WšÞ¸òÎøau®k
ïÖÈoÒÌ{8 `mýÒ7ZZvò‰Qîs¥b¨jOç‰.8C
}T¤†8+ÛfÓq»¸Bùéê°Ú„(§Ï§«1Ë6«f{¾Ð
‹¹Š"5¦¦°Ôïc£Ün³ç+³úQûç"«ÕMÃ¶ ~î´«éä¬	X;wîúl~X»‘ž¸qcª'Ó“)ñ´§çÑG×lÈö•©ÔÎiÎhñÆ™ë7¦nü”‘3×ÏFs­.g„¾èuÉ,Ïˆk(«2H}WÔY•þÉ*sCH‹"EBL$ça.vÆG ª*Hû­µ"ÈÛ_‹j‘Ö‚5°Iàd~W¬ƒ·¿PÇZ}¿šÑÚ‚¨æá"å@²AdSm¯á©Áû*†äßõµn¡)c„I¤,MµûEnVk¨¡†nŸþãžÎ k3%ƒZ‚~[øDÅ¿Õ´ÉoûêcsO]:Yj/8»XSSG×É8ldÎ(H|C©9m] èÒiò&æõ‡Å‚*â:G‡Z!]x‘,:ÒÆ
0„f°F«šÄeÂ«Õ0Õîó~ójÈ!æ1iM{Ùý4øìGÒ{ïýýèG/¼ _¢Ø×¬ÒcF¼³àŸž~ú;ü63Z£GÎim,[lnyàïxóøè	"*Ç¸g›[‡ÆZZy§µ iñ=¿Ôóú]GŽ¬¥ÊYÖ.žšž()•$GAi®³PÌiÂ3°–/ò)J Æ‰I¡ÒÀÌŽÜ#›9Àqˆ µ‚­Ö¼ ²J^&i„fJœ5»À²¥ƒ;ö5´Ö„¸Þµ„Ëþp÷.Ê¦–plêZ¾±cÉòƒÏ|6·|îØ%ºÖž!’ƒ¡7Ä+¿Iºa.žÚrïÉÇß~Œ œ"®šm&ÂDT¤j±‹s,zš¶	Öf¶-–£˜o‡êŠC‹¬ÒÓ_¥ÖKãì"¬EgÍQM[ÌíO ­ŽÔ¸:¤æ4‡µh¬EýNù_½ÊJƒÍªèÌö~³ ãcÜ<rdó#b1GËð¡ò\3V»YLÉuÄþÎ‰‰«,-ìgÏà#}J‰¶„riTdWXÊÚ²qØÖœy¦½×*F+º—„ìX«¯ƒd‹iµ¡ýÜ„kºÍñ!2ë€ÓU¸;»b“*lÄ!“SÇG„…fÒµð¥ÊU#òÑ-@ç8}íô”VØe gú™¸wwšPŒ5Î1Ö”Ø¯!Ø€ÚfˆnP¸Æ3Â"á3'5«‘´øG5¯‘ÓWIWæ+©ÁK£ÔƒÛÏ7Xc^¸ÏðÈÇÕa¢8²•_·ÕÿpgŠs±=`û>›X-ÖA"`­XV¹µ¶ø^„Ö|)ÅôSr)´ºr÷÷z"®é‚xMWY®ë Ñµ¬!]„XÈî9"€®,Ÿ÷2ÈÇÆqì„&—œ˜¸k„CJd÷/ñwJîàGÔ7(„„14Ðvü!Ã›¦<C÷„8á¸Q~?°¶bH ”ÃTê”·.cÄÂñ<Ãe°F<‘Y<SsÁéŒï´g[?_ˆ³üÙjrÖž{®*2øjüä÷HäÖ,jä,º>{ãÚôôùó.\»vãÆ´Ê.©I)ŠÅræÑ®{“Y#9¹´£Œ]{ÿýžfèÚ¿½~6Ž\«3×<ÒF®ékR%¤™kì{ù¼¼@:
Îš1­O«SŽOG‡²€qVéi-º‹z«Ò =¥gÒ¦­yNK}¤±À³`ËšäU“Ûï7¶/g«%Ç@j¡_ÍoA.<`Mk2c«µµ6±@a
ëG ÚÝÆl`4ž0EB2M¢-ÒPCÝÎäþÿ´'W ¬Äj3CTÕS,V°ðioŒG#m–L=Ôqe!V#}ƒ¯“•Êô|š?˜*ðJFSA$›`­¹E‘i²Ó`µkÎj¦8U-\¬“?Œu“Ùr§†µÖ	×zÕŽ²c/ÍÌˆÕœÔ}í}j/)¥ßIaªýøY‘šPí(í…ß¾÷žHí§?ýÑÙß²sqñ=¬6`ŽÞµZsí­û µîo¿úôÓ¯=hM&FŽ|U¥üØ/òÂ©÷´Æy–ý'À·JYûƒC–Ùø’Xíˆ—@®_ÏÅ<È¥ÒéÕ›J¼ô*ô¡\N9.àZ¾%S*•é\OB¹ƒ§ÖŠtÁ+—t³mu-äˆpðc„5c5F­UÑZrqý7×:±!FeZú*–=š’e·=èW»Ðº•Ð[YË¶•ŸyxýÜÜÜ'LYûä™¯}¬¡ k—øG§—‚ÝM§Þžüþ.‡5ée¯JÈ™^f‰ù”µþîž¬Ž%³xÊ¡;*!c–yDU‰ÀþÐWˆŽ1’»ÓZ¨ƒô<ÿZ?4aœ&|ˆÆZD5ïë¼ÊG°hw"cÏ!:hâ²˜+¢ƒŸ@_Ý»Y°öHG‰$™ý1~Äæ ¿[º+{€X.(™•Ï¡òƒß½ÞP]i›†ÝzóºB•ê9ÑE	þ äîò«‰ïfh5Ê 0íÜZóð~6Ìµ:c-ÔANÙX ³Ê"àà–1R4ëÍC*õPb‡éc©wDað›ýtÞÑmõ&rØ[éÍ»­Em‰×üO6¢©ñ–SKFjSÑ€JûÈ|„æÚüý'ez²H› Ï Ä)¦Ò•é‰Q'a¹ZÒ8GLŸ? y$;þíÐ¸†¸æiQn¬q×¾§½;k‘Õ¼ò^²Õz©ÌöÕ=j¨¦_3°š’?"ˆÂgÑ=´µ±Ö¢«ƒ‚È–Ö.ÒEZZ×4]Qnÿ•	™du˜)÷À©TH-kšÑi­¸FkK5Q{)kù¤Ò`M]WÞ¬&¸ƒpdÓE‘¸Yt?¯—•@µ†BT†O¸¶k:Ò”g|5’^TÒœdªAožßÏ¥|fÑ–G{†R&.k¸jˆ!œÀZ]ä«Öü.“Íaí|ežÏ8{ýúµóÓç/LhZ>/7–²ˆm÷Ù»J½ÔE1ÚÖ<õÁ™3×m=tíÿBØÈûÐZÍ€ì­±qÍ&dKömè÷eÏQ’ÇBF„g†n~‰³-Bù£¼ÉçŠPÓx:‹Ïô¬zŽ½uÎÚÂ-k&Œü÷/—Ü¹jTCJ	E·˜°¶à|5vì%ù„àúJD5ÕÍ)b‘5,Öú¸pžÎñ·Ë¢þµ»y/¡-ÒPCÝÎ0È¿ÞS°ÜFÊíï¬•Òmà’ÍH#gš#zéJ•NUƒÚëû¬bµg1¥fmŠ|¦¶µd”Úˆ¬´ÑfÁZZ‚Ï"}ÕÅŽã°ù4ìëÕœOE×\ÉõÎ€CðÏLº`GÀÈ,5L-÷Ô 5DL#žš“ÚïÿÒK/ÙDï„Ô>Q"*lÕÌÎþÔuö×Úÿoí~{›í…÷þý§5Ç5§µ#/
¹äÛ¯¾úôk^©"Z#fDÄ¨„ª÷g[É³¯’
*¿9Ð
¬8*XËôdï}é©»0ÔF„³æ´æ	#ïLçJ«ßYÑB_L{ÞZ–¹ã0lÌ¼¦é‚b>‡5Á‰“È.è’SZÂmÈ~sú£oÆ’4HÍîõ°–—Ÿ8¹ƒÆæÇ@h\–¼cÍ/ùå¸îîÆg#gm‰ü¶Ž7îÚµë ©œ÷uüÌa-)ƒLzÖ¨«¬Ckd¿+hFd¨tJc¯cqp3§Ã¶îm¬J™þ¢¬Hh­¿¿dÓã¾8X eL‰Œµû8¬…"H¶ñ}â2ïYsgÍ“ ÁµHjFk—'ÃÔtüb*¤É˜nò ½¿U%ŠÜìH«­Žd£áçPÉrÕ^Î¬Wmpd¯
Ìç°f´F H{onsz~ÏÕv(úµ¯\!WÃ1Í…óÆÞ€áêvá«Áø¢5T•æad§KŽmkEW<`°v9Zk“Ú$/¬Æµã!`„%úpjXpˆef¬æ•‚3Ö(#ÚˆÓôHr­ÖPì\3p‹ÞrVsXCé*IUX V+æö>²W!!¼‘Åe¥Žx1@*ÍÜ5­Úx‘<"¥S£#Â<›öÊaÅ§â¨Z›Ž¼J/MlÒ_}šçÞ6y°,W+AEWC1¤¼´z\Ûœ56'5v"µ¤
’íP‘ŽÖ`šÅykìÂÅZXÓæ?DZ\¬¼sÍZØ!@\0äiSÛÒµ®‹‚È®]‹mÙ¬oÜ5·o|Î`í™ÃÇ 5e¬!+ƒ¤:ÑÛrz)±°|¶âçÐ†¡ †À.$Œ†¸jÉøkÊÙ®Ð~ÑÈvÙ@T¬mG;hºÚ@—‘O/ØðÕúre¾-
]“†ž[l?‡Såå›‹òFnìËýT?&°ö51².\Ù0k?z(äyF¶m9ÿ«óÓÍÍÓç§SÉThJýýˆ¢ÍñK×3užpÿóçŸ|ò©ï¿_= [üWOkÔnÄJÈ¬§Œd‹šªCcy9½*IbÙîG{¦¼ð!kc3£sÔ(ê³N5•öEX37I;¸jÓÈƒ/5È§ÆX«·ÖØL1äÏ,€¬‚tRÓß¢×]Vká~5)V@ÚÍcE\©¦ï^Äz·º"5tcÁ3ÂQÑ™Û	ƒÀÑ@ù_Ñ"5ÔÐm³ÖÞÇK‰BžÄ@•úé|‰x‘tQõõãÊ¾¯Øœî‚ÑØÐëæª9ªÉTƒÕ^¾<;_i§y‡@ŒÃèè*œ5^¨×ÃcERÈÉ­Pmœ™µ¶°³–y4[Õ¨-ÔØÐþBA+|Vsýýwï|÷;ßyàmÛÌTû
jÈIÅ$ü´„ÑÎüú×¿øÅ/~}ÆŽôÿâ§ËŒ¿Ð}3ÔBº¹F
ÆzJ!;v½úm…,smfFk.f¬õgµ_²ãAvÆböó8k$o6u÷ì’§vÇïŸ*âš%zí,æN¿³sQpÖP§ÞT/¸øl’c¨a°æŠtÆÁÑEcUêèLÆÚiî1_À?2ö³Š°fr8³C]›+êaƒ_—z+—¯l²d‚åwíÚøÒÜgÏÌ-í8¬á~¨}¢tíU« Ûë€ÚäÛßŸ:4Ü›˜ Õ$ 3híÝwôög„lHÛÀ½o¥V\I°–(ç?ä~ŠÌFÐvV³l÷¾è¬Ö-ÖA"]©îYãƒÕ³&YdôÕÂ‘/}x¸]ÆZ2[Ó¬¹WôkIÀc„5®º´~DÖÌfñ`EAš­Æ5‡>[û¤5õ¬íÖVõÒ¹Ö7Z4Ö1ÿ¦Ó3ü)„RH`- œ|X’é„"¬ù5›O-Ê%öIÊ /×6­AfÜbdÔq¿%eê@ó¢JØO{íØ¨¯‡8ugÐ¦½ÙZ»éà¬™8QýFqáX«´‘ã_(ó9¦UïÈ›S X®Xy·I´¶ÁðÎl°š*àãö¢ÖÚŒËðÓÐ¨IŽ ]õRl¼OÀ£ùÛòÚBßç“,u$(…ÃâA{Ô£ûe˜…ð~dÎÚ÷ä¬qO¢û£±&gí1¥ª÷"8$œV7Q°Å7ÛLÓÕHk-Ak¯	?ZºÔ¹Ö´®«iQë–]+ñÉ;(ƒ¼Ò±ñÊä¤X-ñÖ.éÇ$¬ü/;r„7_.ÞwñŽû¾¸ÄüþNßlôf“9¯iøµ5`vÃxãˆPÊtpi‡!\¢|Cu ‰ÓDl8~Z–³eßu³)å¥S,$Þ’ÜF5‰=HÕb*¬I/òÚÓÿTùÃÀj¿M µ0É»ð­G».\hKsK‘3™b:SK‰)f™üˆ­–Íöõõ7§S=ßúÖ·ø|þÆDîüõ?œÓn‘33ü=o-–BJµ6JÀMaô7<mzòvl0ÿÌzýŒz=ÁPÏŽºÕàÜ‡<›Ÿ†Ô±wq.¼•!ÉB ò9”·ŠY8_n2ˆ2¢ªïÿ5¬9Æ"Èú†5×‚ýjÞ²&FsX‹ÂUK`#«@5ž†µ÷“ú­¬Yßv’þU£]­¡†º½cÖÖ*ÅÞ=$‰¤›	l(¡~ìµ2Aƒ\kÜ3Ô|J†š¶q'5G5„­vùüÔùS@q%!…ª~Ö¸§Õ<-Z°ZXú/~@>ÃEqœÏ|ËÉ³²6°ý}Å1Áš+™|&ª½F!Ë«˜j¿ÿ™U?Þ‚Ô”#òž	Nû… í}~yþë¿¾dæìŒî
ûâ~D™¤·®9­&–úk¸b7~o×:Õªlssm ;0òµxí#_`Îý¿_´6çŽ<Ò6äékèß¶ñk/ñyý‘#oq»ÖÖŠkV¯¶˜iÁšÒE4 ÀšzÖ(Œô„ ‰…ÃZu&dÂ_Qº|“ÒŒÙ8jå:Ñ%¬ç‹ªæ6ÑÚ¢:ÏÌá³ÅÅFÄ7!ÝLÓåtÉºîÅÝ7vlülŽª©¹KDŒ<uÄ³ Ôf=l¯»ÆOM½ýýÞþhjjj esYS®—Mv2xã$Ñ­¼Ë&4¤XÆÒÙC²&Oòá¹– ãVÃñˆjª…Ak¾éæ%õ=kb2vÃ1òwOº8!²Ÿ‡´†¨LdôÙÕö kñt¹~y¤ï‚q¶w÷æxj3X BQ¥Žkè‘U²ÏÀ
Á4›à$µÁ=˜ikì¥ˆlÛá¥‡±,5 BèŠÄžËžQm2ŽZ›óëÀj¾}èe|†8`MÖ’ÓæY 1 rØ¤k¢3sÕBÐÉ„)z~q6wÐÌ¦¤ÒÔ‚î)Î‹	Ó22X˜¯‹}2,aykæ›íŠy8­Á×
}Áíæ¹æCRm»w[5‚Ü}¬aÛ¨” ”S-+¦!Ú´¬MTZNý
JŽ¬5{6W¬žš&é$µ)/kŒªïYƒØP0ÖpÖðÖkÍ²$ö±Ò±†Õ|åâ‘kº‡4¢ÈjN}ßDx?‰ýkÔ³¦ÁØ»æ&çvmtReÇ.‘+b¨amý±ÿÇÞÙÆÆYŸé~uÎ·ó¢#í)D6ÑÈQN¾8µƒåu`=g†à&d:ãŒìdìõÄÄ©rc'@›bRˆ“l²-Ö,¯n+JˆØØ	ØZ‚IB©¨R—®|D">Ð®ÄA=ÎïºïçŸÿxH¶-Ê_óÌóüŸg&Ž=Û¿¹îûº8O?.¹ç—ùÇ¿ßËôà1hÀZÁ	¬q"á¾Ãx5.lÚDøèAUšàîö›nRñ#ÀA[‘L£_ò“7¶RzÓ@CÖ½VÖ7_¡Z„Ø±þ'ç±þR™}ypEÂj°Ú·¶:«-Q/³Åö»µ¬IæžiOŸ9=«`Êéèï'„oÈ¥\ÛàØ¡Î¶¶‚¾[ÔÔ´7ë,Ý7^êºo÷ÌEB!O‘4G®U7®Ak‚5ä´æ‘hd$÷BSaØêDk7oÂŒ´>?¡/Ð 6LHg`ˆV¬&m²“Jée´!ôb¬Æ-Âšxç-k@S´ÖPôÔØØý‘íjÜ#§E9¨©Ru¿§_]e¾š\4¾$±Zj|É*¡%£†ˆ9³z˜~àòªyªˆ´‰h‘?[Ô¢µ¨?ñ˜5ü­yU@•ÒóÀZz@“aJÅú‘6Úšî¿gLÕMå#T>r#í»£’Õ{{óð}¯¼4UÖà4(Mé×¨›
JÇ¯Tbf³Å ½
˜¥®þ˜²GêDÞj+vzd&›¿ÖDµ‡"ªþxhô0¨öÑ/|÷JRã³æóVåc(d©{ãÜ¹7ã¶×ÂpM‘ê^«Ùµ\Ûû×{ñÈ{÷3L\+­`\ÀC’(RŸ%Îzâ‰þü·ÚÚžØ™*wIß/î<0†ãçœÆÔÈkR€µcS7L×‚°š« 3M<Q	k¡E-v—øÁy,ö¬qaMp¶¥¹Ëæ<Bû:rÖ¤ðTkZù.ÔF
Í1ÒÒÜ¼zu3áý\Ü¨ˆ„Ý(| .#?Žj©0ÛåÎš4‘{vìÙç^Ÿ|ùÇm%/48co]j‰¥f;é*uê‰ýÙö–Ìuy‘¬˜-ŸŒ_nr8Ö–k,vð€5§5Cµ@k{¤lU=kûDkkìm«ÒîmïËq³»`mÍûïÃjŽcºW)zeÖ8rI£õ‰ÄÔ‹¶3nk=áÏ"ŸŸP@M›ÎY_ÉßOL4Ž¦÷ßß¦±0b-Ž^ãÆ¨`gsšãØ²õCÂN²0F­eÞY›®±qÒ*·‰Àj?Ô¡IMn³D»W šL3V¦è^Z0Ò83Ö±È~ïvCþG“ÊL¶tlƒœRÄäöH´ÈÔÔ¼ì3Y»bdØÊKG,÷QvÙ°z×úèÁ5÷m¸›cýX^SÅ€&‘¨vœö5“Ö\·©¬›Ê»Zaÿ{ÉZ»a¶fzË±Ü(ù ÝÙÍÞ K|ö*zÏ[³6Tá¬©’[(ƒ|çëYãý†X×L3·‹´|¹MªˆDÕµ88ŸEüvðu;ÝjÀÚÐÚL†(ª™¡µ¡Æµë^£òÝçÛjÈYÍ‹ˆò?OäÙ³·l\ºòìk«‰'‘¾)V³XOÆ0ÁH°†ÍFyŸM{ñö[ï’å3"ì°x¢ý	ƒ€6T%ùi²GuøÖ,W—ZªŒ@5±!às¡?? Måó¬K¥~ýðã›77Xcí©§n®©dµ“Êq°b§ãÜÉÓÀÚìäÅ™Úõ“í=Ùl6?0FòT¾·„Ý;6Ú3X*Ò^›Ïw<u(Û¹ÿÕR±{•J“„H¾iº:­a®Ý¹²U}kÖJf¬Övæ
Ýn¥i¶³èE4¼¥hÔL7î:z—šÕ‰…c¤øMV$’‡$àU9 ºÚ”µkÂš$˜Ò®ÊYûâ¶Zõ„5¿Ak²Õ~_¿Z5«9¬19=|MWD‚¨|YŒ˜Í_Vïx$o °mZŒYÔ¢õ§ÖÞVœ¯+ð[B‰Ù×ùz8)›¯£Æ¾0RhkëÏ¾MwY…ô{wí‹®š£Û™îî3¯Lk6eMv»î¦†…0–ò.@®Ûk"??`Ó°€«*ßÓ“çPzuç
#4—›l
õ®¤†ž¤SmÈ'ªQƒCHôÔ(fTìã¯½öûàÜ¹OÐ9`-èç~Àe;á¼öÁ?:ée*‘ÖîÞsþ %{à–5‚×¨¾\Qª‚5›þöMŒµüÎ'ô—‹mž8Ð$=ñÖw
Ö\k¹Ç„Z;¶e |Ý²é<oc^6k±…"HkÊ~\«˜$­¤i[Ä®DÂ3,5Tká\§ñ¹U°v]µ ² =!¡5žÌù2.²^¹ºwm-Kö­K[¯»~5k<ªmíÐZ¤Ææ:ï}†h‚Ái›_~îÞñwÞéPtˆŒÈPÓ”5q›É=¶¦\þn·,¥N«µÈË¶difIM^_}ø–JÙð%9kAÑYCw'´&F‹#pš®r±­2ÌÃ¶[lXÓæ ¦=°&Zkˆ8oÁkcã‘…X»ÂúdáU“Ã[Ñvg<bEF¶="˜ËéO) Ò	Ç‚š4Pm* [.\6·GÜz"<d_)CXá-eIó˜” RØ¡©è¬Aa1`„-¤AF_Íoî¬=ò‘Ø*Ô2šu'‚ãœÍÙ,Ÿ’‹H¯^˜0ÍóB¤ó%bïçÅ­óà_k”Ô	ÊêŒ„¡Æ«ø5VÒ­²G<7´}û°†ˆxQ4¤Nr1ÅûYš½–* zï^SyÀ5­ñýNáó0éì¬=5†ipÙ¤Ê"+^8üÌ
U,g­J  æÎÐ ×`5Ÿ³–ÈM;§(t°±âzU‡[¥bU5òƒ¯3|›YÚ8ÔÜ²t)o»0{ˆbæ¡–Æ	¢›®ŒÅ6XÛ+NC’aÿÀÚ–Ú%«7îX|üÄ:ƒÔì5WˆïW–A›ŠÐèÇâ™ˆ‡1Œ9 4f¿xùÎj¿’‡V ¡ì¹"Ü‘,Çõª!¤Š†á±^*Ÿk+²ccÀ¤t‘žÑÃO-`µZh°vòrZ››;9wúô…™É2KŽ\8=•­Òùì¡,mEÆo÷–:G3€óEÊåŽ§{Ò˜ýt²<2¸ûãÓs§<f$fø;­…RÈã+¯_f1#aâšÅ÷ã®iÐZ±AŽ£ÑÂ ©ÉâB´„~µ¬ñèmLBÐó*§aÓè )A+MÂ6³Öª5tõ|QÔÂ‘ØÜâú£}µØ²&RsZs.¬.‚LQ{dµId Ð Ì6ïÒ»ùvÓ’Î³Z÷àZÜ]À–#/«)u±X¹¨E-êOk›ç#a³i¦«Õ¤ñ®Êr(0$ÚúÂ_fvP®˜>¶+‚Zªj]¢r|òÒ+»sæú¤4kXÓSÉ£~]†©K±´THœá°0F$oÏO]½w-ÝS.Ô§²û)1Üéáøè¡p›Mµ¤Sí£Ð¨vžŸ·ü±Ï«žæ?t	ùíi§ 5éòåËo’¦ŒÞdƒ×._>wùç'T¦r
ñÌ“Õ¸v÷Ý¸kØvÖZÐ|˜¨
ñï]Át7áÚ kX#|/°¦ÜFK›ŠÒš Ì§>ò £šïyZ«H¹åÈ–c×—óÓË®'b¤ÀKLÖ¦F¼‚jÔìUZkªtò7ÃõG[Ìt%$À¯†çƒgFkÚÙE¸\…jÉ©[hÆa1|$v°9¯9 %Ä¦µ-¸]¿¶¹yíÚF¼.~Áb[Jÿš†a»öj¢5‡5.CkÄ‹ —§—öïy×;»'Ÿíh+ŠÌœÕ¤Wµ­)_„eÉæqª‡º{Z™N[dôQ†”qF†_a5cÍ"¼íDP‹³¶+Zk†kÀYðÕ|çiQà°†Î*ÛÕÂ:Òš`‚ÖÏ,ð˜	cçkŒ_y†HØëòù¥í°Ú†aYi<§ÕoÇW“ôÐ7kÍ%hc›‹³0	ÛƒE"¬é0eñý0QÑßfNšì-‰ó¸¬•=M“rÖØ‚&"ªq÷›_Š¼fzÆYÍ’õ=È‘o„ÓòJÃK±šÅBÜ1sŒôÏl6„ösˆ¬¦Z®çÓ-lÿÆ°‡ö«ÃL±¡FÝ#ÞšÃš
 äª©r¶Cjä=,žh°Fðˆ"GêdÄéƒ°©˜€ª‚”‹âoÀL_Ö¬×rò¥ÉQ›š¼Á3ÂÚ}laØåÏ`ªù-’Z¥³®kí¿á¬	Ö¢ÖP˜ŒÍSr½µðHä¸à¬¹üÌ÷A8k ZãR‚‰Z›ØØÒøÚD{#”Æÿ¬lXC‚5æp@k{5h-‘`mÕ’Ú•ÇŽíX2M>õxyÑš[k²„’*H‹qXãÀu~6^óF"CÌ\#Xc¹é~¾U–ËÝMkO	¦±!þc(G7¬åˆTÔ¥üàŠÞüÓ÷ôÓ>ûé§I9ôäP#µÉ€—}ŠvVÃWCk¦§çæÞ–³–å»Ê‘gêRélëlz £8Ò­"íŽöì`)GµJ¾pGG±ô*o9t½›wÏœ¹8Ç¸µ¹…´æµö÷&×îLB!Çâ|lÔÕ%‡í\-ÿñEE±Py—ý
)hÕ¤<Õü‡¹ö
X³×N•6U™¹DÏVe®½ƒNhY»j¾[°¾‚«æ‡/âªU‘ZìXó[«X»vd@µÉ†¬&’¸~¾ZEõ…	±Ýª3MWsRÛ¤\±ðÿÅŸ-jQ‹ZÔŸZÿÑ`MÐ3[ÒiúŸº~8×ýW}Åþ¶BAñÔÝÅö#ïñ[kÐ»ÕÐ¥¿½ôÊ+—.œyû•É6+ÑSd7“L
nlõ4+2ókÁÒ!
ëIÇ³¼Ö©¼”íOòÓ®PWÓ)J£rð@Bk.* -§T#ÕÕ<÷}Ï½ß¿#ô©yî£úd—a§Áj\þð“?üðòÏÑC «ýüò‡Ÿ}­yEä	¶€kaJöwÜ½'LÈ>¾nhíáC„ø{ë¼¶“ù6JàaÁ¸f%‘ï¬!Ðñ›okû¿ýÐ·2ënqX“62]`ÇÆ[‰ÖÚ–þéc[–]ïù„…¶\SƒÞ..–ÅiùX~¿IÅ®]ˆò«ºWD=rbò‰ØÓºŸWI}B2»³b“<RWmhM¬/ë‰vÞý•­ÍÍK[×¶R>ÕØÂîüoXÝøÀëv<p0AJ{ùu_û”/Âo÷ím¥gùÿÙ¦šX¬$<+‰Ól—¨qE»6µõ³t•:3¾ôL;‡ Ú˜ÞÏ"TDV8kÔ*Ê ×­íªÎ¡rr·yká–1»?R[	ÎhÚûf»íáÄ2Eô¨C™²ÄWùì³©Qž7lur†ê·³0XãOÀ5½oÍjB5…À:­1œ,N[‹ü¦kÖpÖ¼:ÑÁH©ýÈ;ÕT†(ÂÐiò ËYe­U'ŒLØu6AÚm&1Ök„WÆ[õuã„ñë²Q¡ùlîæ˜ 5¥¥’ºÏz¡$wÉ÷àRqxD™%tŸÕÏ§6l¡Ù[D©:q›²•kj[«Ã[¬Áf[å­±õÔÖˆáõÞZ ERœÆ7ÊîðXƒÙØ»j§×ß XëŸ÷ùt&VÓîã¦¥Öœ±—a¸e‹ÂE¸ETu2Ö<r(¸jkÑY©Ñ|Ã°k Å!lÕ"¬EÅv5Pˆì´½5£¦Ûg®ãÐ’imm?öÞ±‰wƒ³v(ûúˆ€J›e±9«¡ííKŽ­æ}›ÚDùO“zëL¯• ˜}ð˜%Œ|
«)ÒE!$†‡MÃR9ŸÆ¾ù¶ Bì€5…JgÕ§kÍQ:ÿôwûû÷ó>Ÿ² )ëì9|øðÐ!\dÂWCbµ0^-ÀÚéÙüÌé)&bŽb§šÌ§ùIšÍ¦kÀµó JÀZO&]*rÓz‹$!íïÉÖ‘22¹¹43wjîâÜ)õ­…RH¯¶_0;©ÜO&´V(tAl‰‚ûí•ë¾¨—M÷_Úk6—NÆ›ù‘qÈš"ëÅºª}¼Iµ€ÊjÑ¼±h¬™„=×€5;Ö‚·tÿbãÕÂ!új|ø«Øj‘ÕþûÕPm©9¦E}ÅÇbßŸY¾
µzmä,Ú ?ëW»ÍY Ü?ÿ³E-jQ‹ú“ë¿ŒSýSÔoVYh/X#½ª©!×tÿz¡-½_UA™#Ç^Ž V‰j$^ºtéÂ…3›Û”g#)­>•ëF¸lüÜ¯Y›'>ÖkOÑPµªsûÓÙ”Þ¡lk£Ä™ŽŽ®ºº´í¬i¢ò@’þM5”ÌT{Ä3ET?÷ýï3PNµçÔBñ£àëâÅsjç>9wTûL°†¡†l§k\Òv(ŽÃI~˜þpß¾;ýpíÎuR ôTg'?ök|fäBÞ£ Jìµ&k²³ùkm/4ÝóVSÃ=Oýö+ïª¹Öeuü>÷+“ÖzV;{lZ¶êÅ\o
×ö[ËU:amIu,+"ûýÔ®„5ßéDÒSˆq£f«`µ°6Ø
EÆkU	FÓÞ¥ÐÇ„ÔØDpÍ«!´eDA.m\Í›ó­«ÏŸÇB[µt‰"ÿWÍaM‡ó_;Þa½ÜZêçÙ±ºÔ4§®Hù#DV’‘¦,È&`å¸÷f{úá6SW®Ï”Šµÿê;±Z`P£ÝŠHVrÖ×¸a¬™„jaÓ¸R02iÕÕ\aÉÄl?UZäx·ç‰Äk¶¨œŠ-mÆsá·q÷¡jt«!§}8;ÃÛEkšÆÄa=‘35µIú€ÛÖ¬)…²a[€5?j×DKÏÀÈ&Ø‘‘&äI|3¨Í@È©â;Qˆ[N"÷á¬ÙMø=	ƒtc½ŸV»â¬¹÷U‘æÈþæî¢þ^ûKå¯m+Ìòuð©êîbáæžO¼FØnâ´˜12ëw}ø‘a0oHC°	éó`^HÁÖ™¾gì3ŒxWXt×.™¯ÑŸ¬+ŽØµ>.kHë7X›_oŽ]JÕÓÓÈbÑ_@iáHÐˆnv}ŒÓÉ-Ü_]	ù¨ô¤Ý†*{Ö¸!ÁZK­jB¶ Øçä°fë “;VAF3Þ=9Þó`ÎZ;½k-­ÌÅoÉpýÈ{K–ÝñÜï&Mk¢²ó‚5Óƒ­ÂZÛØ¾j¤U6ÓL€q—
ÐÆPý#FÂÞ>íYÆ›ü!zÕÈ!B9˜DwjŠä05Ak
ƒ,¶‚Ì_©Ïwv*øCa#f¥÷üÝþÞÁý¯îßŸ¤‹ŒõŒÒ°¶2„‹Lì¢’Ä¼„Ì~±šÁû9æ`Ï¿=õñd;-M»Zçh;SpzzˆþÍ÷wô»º:FÓé1>>õƒ„xpÖ:òuõã_ÿxsÛÔësgv3!Zû|(dŒ‰´f•rÕÚÈU‚½Ä·ÈÆÓé„3àÖÛúøµœM7`eÍkQ·
LÌ:òH/œæ
Ý]Œµßç¬UÈÁë‹´«qD¶«ž†h-êÚ¾¤æ·Hk‘Ø¢ðVcƒ ìu¢ VÔvÿ°l&¶j"ïZŒYÔ¢õ%èßý§m$AõFu– È®¶<Jgû‹]äÓõX¥]=”^­Çc@ÔTûÛ¿¿ÿ\xû•™þò©Ô®Ö-Xk·R5z€T	òY¢U²H½³[P*¶«¥²iP-/äà3â– ^/$]jc=/Ôï¾šÇŠ„ñ×L‹õ þ½aø5£¯¿¿ï]}ÎÏÿÓß;©ýîw€j˜g¿™ûäÃs^ÔŒÕà2Õož8uùÍË^>ÅQG6 ÎpíÂé“'®=¶\»×~žZÌòê£>Ú2ªZHÄ'Eá#R-$wé@¹í›èFzç^¸ç[ËÓO=
¡­¾ÓµÊ‚5¯ƒD·´f¶œ=»¥–Žr£ýp3ÖTñ¸pXRBM1èC€Ö¦…eÅBE$švXC"²ØÕ‰,ÂZX;ÅU¡Z\Ù-üùÖV¿Ø¢5·:¹­;øZãöçÁ=ç¿¶ñ5!Z’0"VÓ]hmÏyƒµ;´¶[“‹ôïU%º7µut,KöD‹”ÒK[—7{ŒÌ%K::œÕÂ,{ƒ,ãÇÒA-ŒT'÷ƒjqmO4Öö%Ñý“¡²Òª—ÌË†ÙH…LX‹}4Òâ]ÆDH1ZÄæåŽÆm\äÀ|Ãa=‰Ö¿úÍjšð¬™´Óî›¥œ±Ð§ëkVùõTÈ£Dl›$ƒË|”š[hæPY=¤:¹¯&lKN˜ìµ˜1’àûÉ>´¬…è~ï‡óÒFO†4G/þÅzzœ©…	Ò¦$g$À™Gý#Êg7ÔSïÈGµ+³óxgåù­æ-r_¬W
ÃVùÈ5€ÌaSÓ#=ÄÿL{ˆ®FQI€ØülÊæ°Q!‰ñ†M7Ÿš^Ï#Iœ?~	ëoœNÕ€k…_š4£póúCé¦á/Kƒ¶ËZÓ½ºRkÚÆÅè¬‘ÜÿÏmqëË-D¾â?ãÀ=6³±¨Lù¯ µ0æÃ/ÂjºÞB¼UÌü9˜­=£ìÝ]!Rã¯¬±ýlïq¾'óÆ‹uâ’Ú¿eã-xkµÓÙÚ ŒOñƒðË`ªqôôO£wp¦!¡R$½™‹¥„u~Ñþ%Æ7KÞr´µ’TKBû²ù"dÅdTö@çþÁÞÚ«õ(´?6¬é_«ùñ´æ1ÿüvíÌtW-›¢é;Û“ÁUË>E‘c>›É§;;óÅŽÑv®@k½4«Ñ8×OÛ¡,“÷¦ÎìÞ–Ÿ™¹oðÿXÌHÕ|lj7®Akî­1Ùgµ¢È`Íü ]­XÈú6<75c’Qkª¼Õ-6‡5Ù“Ô¸ÇÈs$¶QTµ±Ææ‡?föU+ ÖÐ5PUÚÕ‚ #ªUNXókB}<E`MÓÕ/ŒeÖe7i
ûb´È¢µ¨/ÖŠõÀÚæâüø@ï@1ŸFª.{ø…6Å ²`-ÿÌ®JT#Jñ’¡š	_m&7³ÛÚ¹y®@‹e°¦œù²±šÇŠÀeÕRÄu¼šJÅ¥½9™mKÎr Î¦´§¹Ú	ü,èTõCCÄ?†‘j{<SdßóYù£¢¼~MDÿÞøäMJO¿þæ¹>ùÌXí³ÏDd&²EˆS>ñú‰ŸŸ<e§ ›¢¥ÍÛ
NFw—â±]÷¢Ä];þÈÑ£ÐÚ“`£xM´Fçà•0”š¢XM–]^(ýˆÞºu5Äm¼åA¦®‘`	¬=¾‘ßk6Û¸e	š„*d«µŠ=&˜ËYKFbGXÓ9Ï`ü_¹|i;{, YË˜:hÍq¹›æh~î9¸—ær:cïu´$?&¡ÍÍË–5KÐºöúÖµ¯øÍ­TRú sÖøí.êk{kœ¿WMk»Þ;òì;“½¥Þ±ÞRI	"9yiýýmn©¹|úZ¤¬«‘ÛOZo`X¬q|GÁšlÇåå<;sÖLøj>[wèD‹¸©}ÎYÛ-UºjaQ%Ë÷ûWMø,6mA‘Ý ²áÄbSù#.6íSÔ†,¢ÿð”#|L.rŽtU»íÚÙí\±»ÑlMÈÞö~SW%¬mNBýå”É\³~±Äè2h³Ö0' ÞŸdA°âÛäK?•¯Æfš0Ÿ…@Hv@[%©¹flj½´ž²aÙý4"òbÅN—ggeZÇZi'¹´c¬¦/Á‚Ô8ÅD›\ê’`­¸­(’â1¾ÿ‹ïSÅm9M+é®÷ôµ¢má5ÞÞ¤qÐ@5ÁšRþe…ˆÔMÏBg¨ŽçñÐp½ùv5ü"®É‘fÒÍOß0ÖOÏ7;©Ýç0*Bó£q©–,€UÄrkM›+ŒÀÒ0ðå¬™±¶Ž{î÷2H`Íþ‡ž5TaÁ»…ë¡u39qZC¶°l™dž|ûRý\qå¹b².Ò
ÀM¿÷î¯1ÛanS«I*uðBÈ³ð:¿cÇºÆUÄ÷»r¿Týž‡Ê=:ÔÓ8|
¢±yb†áq,6QµG-}F¿*“(’óÔ\„—&VÓ¢Ì.g'”))VtVëïd¶GÉƒ «­%’Zt«9ªIvð“ZÌ>Ã{œB³,iÇùšìh&{õ¤Ó™ÑlæÐ¡l™zÈÚì!–¥oå¶2s/“Í–‹ú~ÞÔ6iïÜü1…W…¬¦5/³w\ËÝoãÃÝCŽˆ-•Éë½ám¢bT3«YÍ&8µ}…Ñ‹£±æªÎ‚”°šh-ÛvÖôÔÈjŸ‚¬6Ö„j×nXÓ®Ò­f…ñ‹CúÇ#H½õ+PÛí²Ô4;œ¸l·Z7$ÆÚâ$ìE-jQ_ŽþýÛ–+æ˜[žï'k>Oâ°&RGúŠ´jäq¶FŽ6õûþá¥ŸVšjòÔ½rßæî¾¦û¦jË¤–JsÔ­¢HŸ[•JZ8ê>¯z%\/È	!ÿéQÔZÖºÀœúbGÏ~¹iÜ,fÑP-°Z’ÿxt¬SYÿ«TŠé—N‚jÖ¦¦üg.Âi	ª}¹©¡žœš™»Œ»†ÓÆyÒÍv™+<\ÙºvI+»T¬pmãº£Ä£"á$Á56äÀV*ÂjEJ:{swW<ùÑGO>ùÑÑUw®^½nÕjÇµ;n9þ8´fùgÙ¶lÙBÓZAaÿEb:k½É¤¬‘a¦hÅ:¥Š^×çÓÝ"âéÅ¹b¶ˆ3™öÃb6?–Y0ÑuÎcœÈÌa­u¤Öl—–­j]ºã¿w<øu#8ø3)ÂÚAt~O’¹ë{ÇŽyæ™ÉÎÎñÍ"²"yì‹"²R)aµ&&ÊÓÃ†–ô3{iº6_êÈ.!iDÄé¡™Ñ¡¬ÁÀ\ƒ×4 ¡:RwGµ32,7—?ý§Fj‘Ò®"åxxÐ1k|hîWÇè§ašEZCz°ÆeÄa4`Íkkl§ÂHýI23¶
Ö,Ô_›Œâi} /Ò÷>­“Ý`\ôþøz«}”™Å¦<|áƒ—rnÇ nˆ'sgí‘ºÌÒ ²šp-&Œhn<PQùŒñáÔ|yÜ&¼ÍÖoŸµ:È‘âxÈ
	ÔhOÓ©îN¨Ž}€5þ$;¯KÉ0#ý–TFƒ¤âÖze£ôê .•Äñ-Ì`6ë#DDÝjŒXÛ¾†kÌVS{›®à¬Éu£ZØƒõ.“òûyæhrº6Ug°ÆÍ¯¿aZ—gç¹Íò|ÇC‡2ÛX³ò‹‰cæ¬±¡Ð±&TÒÍ+ ÝT³Öš—A.Ab5î¬ã,'¯pRÝÏzÉŽlæuèÜ6ÚÍ€BM#3­CT44ÒÚÈÿ«‡€µ‰{I_rV3gM{`Í{ÖÈ¸ýúÙó{<ÆÿÿÓµ’ÓZbŸAk>";É¢Wr¿Ê	ãô€ÅiÐ®¶IÐvûM›n»ù&`íþšrÑ~ü45	Ö
‰ôJ@×â£ržc¡‡ÕRd
õdÁ46i?ùø‘ÕÜW#	ò±`«¹€´Ó§ÖH¹pq’Ÿp¸iù©)ý¤K·Ž:£¥³Df2£™|M:S[“>tøp¶¿Ì?šrÇ~+›Éæ¡Ê†\ÇèèXz`÷iK >…b(¤ãZ˜}çJÑZÏ•kÂµÿû0[×IÂe¼õöïR–š:ün¥šOíWtªU³šâEà\AÆ$g5§Hj¦0eíÉýŽSÕkvû"‰ýQ|Ìk¢°ö‡‹¸¯æ_ÖM–àŸ’“++X#¸ÿ« -<¬ñ’éõÇ
yYmQ‹ZÔ—kÛæ)«ÛV.nî-Ö¥ú{{• I©]ßš‚F¤a¬»ÑøË/M¾´°þ‘êGé×Ô@ŽäúºûgkŠ…*ÖÏ]“RÈ<Ã›QJ]ÅS¬V_ÁjdŒøSSüh=4jërõ­ƒw#ŸÕé¡Hjž*‚MµQÙ1Ô¿ï‡ûìSöF5E?žzCy"P—ÚÒæ.ž€Á>4Zûàu('^?yúÌÜ‰¹™|ÝÔo>¼¬i¥'l‰ëvŠeÌì­ñõCkªV	¸vüA¦®­l~”Ï'q×^õdHeò‰3qí…ò;ûsß³ó¹nn­nn¤|Ô”,òÁ½^ùøªe+_¹Š(æšŠ ›Œ5sÖòLó_ž‚?ÄÞ9kA˜H²’§%ªxíÒ"Äj¾`“Ø;¦Edãnò„´0CáŠmkê[ó*Èµ«š›[y´¾k]½Ž`ÈFµ¥ñ~ûÁŸýögÚ®Œx¢¿Ã­ßëÉþ¯ï¹1«*H­TÔPµ6DŠ
ÙÔ X£³c€/¸ÈÃ”M–ºÚú;Û—æûKcíhi='É{tVCÌ¼45Šþ.gc-†÷s›ˆ·]Ü®æ¬ùDlß¸UEZCXâ±ýKƒ£™©ÂUûÆÖ­¾ò½œ2D -kXÛÞ7,–æñ®x™¤Èfm€¦²ä™qDø»ñ(j²è€dM_Cb¨ÅH{LÀ34Àœ—N…$}–Vú(KË`ñ€Gë#©.„œð2H¶éÎ›é'ô¬!·èè)»a|8¬éï™7>ã¯“ä`}ra†¶>l­ÀŒÈ®ò'ýOapÕQìÈG‘—¶å†70kÉØ/!WŠFµ¾ndé¼Ä`M §ùj#zÒrL3Oø‡Í˜RI’¤ÁZ·
$qÚnä¯Õ €zzà,25§MÝÛôÙÞ¸ž»Ãš€ámk.‡ÝdUÏÚ£vòð~\5¶äZ 5MÅ~¶µÖ¬5‡­âv»tåJ¥xbœÈÆCÕÂ7„(=)þ-²Ó|ÝÑ£XkKÚ×=7±®µqÏswŸýúsÏ=@'*R°k@5	XkÝrX[eÃ!£r/*îÑç„Y4ÿ]
öâ!{1aNpŽîzqE÷•åºs
2«u{j‘h¼Èµ`å “Oøn@äGg'äc¨F ä·Ÿê«=hTBû«Qi°ÆA"³ÿíõë/Î|üöÛëÓùÉ™<ÿ2‡îÆZ&æ®Id—×Õ:ÜŽWS¿–µÁÎžC‡[²ý|¦¹ÞÌXg¦³ã¢œ5~´T5®Ak1fdUŒðwZ;ðb [5{Q4ûv”n?BjÌuV¸ˆOÄ†gÇ
)NC­kŒXÌE¦P;Ö®9eÍ­µ˜Üÿ…µkX³ÈˆkÜþ`VKä”†­æ^
k¨LºUÕŸ·nºõfÆ­óïêæ¿$r“ØMÿÿ|1²Q‹ZÔ—	kE0~–ëëÌîïµÊä:*¤>•ÏÓÝÍ›Ñ»ÍX3N¦9¨qSä+¯œÞÍØmÝ}kºñºsjÐoÌ6¾Y¥&²Ïü÷¡:gâY6ì4JýÓÙš:Þ‡%ïˆS´°þ§G_}C¸~×Œ3S äÓÕïù
æ +ÂêÑóÏCjŽj¿û®‘ŽeŸ\NbD^Ÿ™«û×Kç.ÎN^8uqê™#£Gf&çSu“ÿúÙ‡‚³O³ç9k§| [ä5^pí±çˆã¸FàÙƒÇ‰¡y-àšÙkNklÒ[Mtîyâ»-Íö{WãÊfXÖ´¶µãFkÉX¢ã™üõÇ§UÏ­QlÚÔ´<¼ï-·Å<n*À+úiaá‡j«ÍA,YÄ«’-‚´ô
Ç`¦±…YjZêD
8gâ’6­-kµ'-cvK-k-“½R³šÈ¤
ÌþíoA5´Öž3ACÏ”ú<35Ð+W­„Èï®åÈï/iÎÇ¥t-),4¨tp1×õjG-þ™LgÍ
 «&My­áþe@Ö’rLƒô€n•¤¦]tÕÐ>¿¬ñ»v í¶[H„Ü¶­KGYk¡Ê±ªOÍ‘ËÎÃ
çßnL'X[/ðƒ5.Ø
qæNÌçúÔxe±þ¨žÖäH¦¶¶÷Ej&VÚLÇ{Oè±ò(ý0›`ÂC!åC—'6VkvßeœŽÁjŽkÞ²Ææ×1×¢f,«‰×æë á"›YdÚqÓôW'l!ŸéTw¿˜ÐÝeSó[ëìãl(«ÆS_Û¶å4¾ßÑlëH}ÁX­@å£}¿6VãÛc®>eßÏäÏõáÂ‹Í§$ÅG¢­õ³7ò÷ÖÖù$  MR`ÿüìôôla8·Ùh­`¦{®‰=âì_”ÞÏBºÊœ5u¬‘,âkàZ@5ÝÕÖUzhˆ}(xtCÑ^Óó]áÜ`-ŠuRQIdl‰Í¬ZzÃ±aµÆÖµï½61ÑÞ~l‚JÈ=ÀÚžƒÈá¨lšŠíÎÚ–³è½%Ë—^¿€Ö
rÏB$s6yFn«q—ÛF§š „6Ùð+¯üc÷Kj9 2Í5"©²¯°VSÆ9£bQ)L?É¤…i=ƒ\ã	:|¨¥™¾á½³÷
«=…Õl©n5¤ÝÜÛSuSsèô™õùéIþ†r¬Ö
¦åSéžÑöŒÆnk,z*=Ö“ÅuËó#W*uô´^;ÚARH©?O£ÛþoM¾NMƒb*J!¯IkaàÚù”8~v ùN$+^V/Ž°-a4ÑÛ­Ùoè¶	:¡U-‰QNþ¡c­j"öïoYs¬rEòúƒS ¯m¬…h‘£¯öûÖô‰›lœZ‰ÍWªÑiöB¨.A*Ôz3æã&ŸiÀk÷Õ¯òïì¿.F‹,jQ‹úÒô¶uo£7„ä¬n1QÃÃM%A[}]Ùb?Øj §~e÷ËW[Xÿø6taæ•ë™1Ä„ëb°ÖMWa„*Ùl!M›è¯þ*ÓÓô-€5”ÍŽæ©‡$ÉÏ>…äs¼%ÊÑµ’ð šy5qÕdNj>þÚç_‡é×Õ~÷Æ`]ä'âekHÖÚIJ"?;÷“gù™[7uf*›éÉôÔ0F =yúƒßà»a´k'/\Éóç&BüèGÌÕ°þ/Ï¾}ò]Îï9ø5Ïñ?ú¿M}ý?o^{Èõ„Ó÷~ë‰¿£`òè£‡›—%¬vT…ëv<Bd µÇïL§¯ŸVQ“
wÊÌYC—I¾–Ïˆ3MóîvœÖt¬¬ˆŒgÂ3;ÓÂÈ!“µc™!¡Y8qEMOÄÖâ5oRã€Z—yæ?ÌÖ²N×VišîÚµ;Øó5å|Ð~ë°æâZ€µ»'žß]"–¡„]V$’cmkÚëÌiíUhƒÎŠ*åtü6+“ì(õÖRiÁ
üº\RKKS¿ñ™’9k±c0«vÖ×ªÓ ÝZCÑZ[Ø¾¦ÜE„l’Æ=f‰ØÂÖÎiñXÛî"
õ¶Ëeó#Õ¸êÎ™=…KI”47ô‘4b$°™`3³{Pœºæ—s0Ç÷[íá¸a›Ó’ÈM<$fs¢QŒPU9œºï%ƒ„Ô‚Tï¬yËš³Ú•*ÈŠ®µ¨*‰€„°¶°¾¬óÌ}5ËƒôÙ,Æ=­RŸ–äñ'–s—oÖÆØãÚf·¦ãêæÅ˜…­ÒpŽ¯V¬­ÕÓ•Æ·BòÌ^«Oyid÷Ö©|®`á¶\Öô„ÂÔT/¯4³z8m³µ³µ>O²^®[-ÞÝøx¿˜¥Uj³}v‚µñ k.Oð÷²ƒÁÚÿŽÞ’—fÖÚPLƒÕØùÍË Ã¤À-iÊÂ²ê¬b›NÜd«Î„L®*q?|¡k­c­‘–µ¡µ­C»^[×röÞ÷Þ{mµËHyëoL{ƒ³¦YÿlÓµKV.«Rýñ¯lüµ[k>[‚ÔL²‹ŠÖÌMºé«zÚm4ñþ§ê…iÝE5®Q†_ ‚£¬µtûòT±¨²å¼=ö$°–LÃîÄX{òI‚ WÇX;xþü½÷~ÿ‡û’È“èÄ*Až¤c*U35wòÌÛgNÏd³2Ñ0ÓFÕ°¢å{ˆIj;…+xxí‡å7Èõ-•Òíøo½Œ©/§:¿E„ÿ›§~3±ýk6pmÔhÍpížï|ª8‘­d-öšAkŸ
boîò0°ÆVàvcÀkÙŸÆ^“°9ÆŽ5‡µkkÕ=k•¾š3W¸ý!ÀVyc‹§y$;·ðªaíšýj‚¾Œ;v"\
¼ýåÍŽjb5+ÝÄËbwX[ò;w-²Ú¢µ¨/Öx+ÝfárLÛýEŽ6	mÄƒÔ8~½ä¨jÙjÚ]zûô.Í¤ 1L2e¦!<µ>Š&I9¬a»¥ªbD¢Á*ÿ8¯.·r¹NsKó¯*Lä-H-©~TþÈVãç¬XÍ§ªYªˆ¿¾;!5°òŸ©ýÀPúÇSož8sæ¤sf™~*þæc†’^8|8mŸ˜X“¯¡ñ ÏÛ£gfÎÌnŸÓMÎ||1ú#ñÚ¹sœûÝ?:ùkU«Pi¸¦éB>wíøñ}„»–ô®}wE×Šï®µ®·˜»öÝž§0¤ÈG²‚ÖÖÖ’ÁØô¸?~]zÕñU×™¯¶XƒÖ®üþ•VÈˆ@æ‘§Ø>fCVÊ'%]ÖBDb„5]ôGYûÅ$†ßŸ¼5ö®˜ØYM—lóñjWžÚÒ¸z-n<ÒÜØÜ¸ãë†vìØˆ­¨I
Ó1XkÏ¹viÛÝQ:ò½IÞ“æV¢ú)ª¿5|&utâoó±_hhÊÓ\Ó3hs±‹éÞŽR‰+´³…W§"f¡\PÞ¦òK]žÉf	#×ÜRsÖìJµ³6ép¶9àÚÕäØ¾	ÈŠt†À¯
H‹—u“ÛúÙ×ŒÉ6ÐOg¨f´æ°	í6ôõa}}kÜwƒÚ€·†&Ùi1³ßô~_S(”M¦Ý¸ŸØ„5pDCSª8ä P°¬¦Ça·0úÌaÍhmÂoòÕé´æ¤Æ]·è¬ÍÏ›oÇNX52<+¿ô	Ù,t®OÓ'ÀIú¼¸6±ÝiLg¥ÀZjv½>Àü¼¾
eA2¼džÓ½]-i*^ô¼NhZ“ÏÆ@5µ7Ù ’L‡YSG=òÔzàŽh’‘as`ÓÁq<ª¿°ÆÆ`¼é“˜¢š¼8»~–9)ÈøQIš±òQ{;ÓÂž‚kU æU˜ñC†kvfÀª -²ÅÂEüöÿgï|câ<Ï5´ûmV»Ú­VÂ8;‹E«ÅÅr±˜…¸hŠãÉàÍxÊ7R„Ž7'Ž»{L²¤=q[ÒõŸr¥ùã%ÁŽ¡MEOcAŒÝ£¨¡¶NØÃn9RöXª¢öÃþ®û~?0µ£|k?pÍ;ïû¼ï€iÃð›ë¾¯»%>™¾ŠÎšŽ¶óBiygK}ç(øO°"!o«XU±qc+Æšª!5.qâÐžÞ5>úÎî—Þx)5~!ŠÔîå­4Cµ™™™w¾ˆµ¶’¯¶2Æ÷'.à÷ßf˜£z×‚·¬{pÎãý”?Ò¤õù{ ûµ(2ãÕÆÞÖÊ•Êä@ä.&«ë‘&’=)|DšÀƒµ¶¶AÔC'Ù@çÑ¡dÀÚ7föïÆW#\ä*¬†¬ÉQó¦åék?™;9šJ]›¬œÚtndˆ*G`Ÿlèè@7¯rY†cWz$¨*g3…¶2 sÆBàß>08Îó}ð~¡§ÐüØs?ûóÖ¨»µ7Ù­…ñØßö·Šz¼Q
¢qÉZã"7=…‚5vDÑsÆ÷ZÖÄj8it´.Ûk ËXÛ­ƒû¥è«•[k‡Ïˆjˆ½+ü›ÿõ¿h2€(M÷O°}µ@júØ¾à°¬5Õ~j^Ê Uù‰2PÙiF¾<UIºÜ®¶¬e-ë©‹¯–üu–ÉÕ`ŽhÍöêDÜ4kÐ›“ê;pÖ`íÛAÔØ_g7½Ðx…,Y®HkÜûòÚ@uÙªT`µÊ¥´Æ=*¥¯È5§¸Ç‡ÕÆñÖ ©í)ÉbEî¸c|·Bì0T-ä?î'SÄQMXùKê'R[×Àß›;}Ñ€¦65s£Õ#•#ÃÃLßÆË¢H`ì|ùõ±Æá—ë¯Q–27ºéJõ¤Eeä‡xrü³z=…Y¯
×C÷KMÉ¶vp|>áš5¯&c²¿µ$kDzôè“G6?‚ÖPï:²FNìaòš[kÜïL¯þVIÒàýá\-ì‚µVUôŒ‘,üìï3.spy*\”G ÆTÿ˜àÊã ÁEXÓ‰kÖßLÒÊÅ2VArÆÎ(/^ÄckiY»z>eÝÚµköüËÓ-×ÖxMQß&–3k»÷n'²­°­íÝ¿Ùw 8Ð 6™jãœäù#h\UÝý°™æc[ÎHEEÿQóÛ
ÙM­­é´Žc+W6z_O0Ö*ÙRk ZLa34[\¹7*:kÖ‚©÷Ö<iÄÝ´Åk¾Fñ:éý–©µ:Gˆµ;kz˜Ä~Ã¼5[ ­>‡µõ
á?ø-ëkEkF:ˆ½WAzþ¾.s0–ðGUoˆT)Öñ Fã4,¬k²Þ8¸×œµ:#ZóFµ%	#àš°fœ•ä‚X§š'÷sóâHî:Æéjf­¹­æaÙ’âÇüÂ”ÿ[ˆ¦6$†»k”n³ÍÕfÉMåwå 5¯TM®ZÖ™:ÕÔƒ†±Ö!XëË•\™Ž¾oèw]n°69jV7^c´WÜ¦$™kžDY³#“ß´i!@ŒRÈ¯ZÞf 4Ý%_"Ê!ÍYc+wÖØz‹Õü†Br˜³æŒfMj•Ú–(4²FËÍùiífÉOË"f±¶BŸÐØ°±·žÂæÖVfÛïiÙÓòÎ¡Ý/ú»	g5ÍM¼—_Ïü2»×ŠÔŸVÅó;Hh8Vþ¯¯ªú+Uð…ÈGîž
æb'\Âp{àCÌ»ï–HÍÝ„–J!²®™ä¬R¾­-[•æa®³ƒíÛXßT ÖbkvSgk}oïÚ/Ú€5Òƒ~ô#åª±ñÆÜ&ˆ2M6e§éo¦oqz4µ0ÚZ¿)›å_g7ÐV,–ªk*y«³Z)4”Ðå˜iÆ¼+æÔZKìdWÛ8cúÕÔ–-e»€µBWzô‰'®üì
…Ö¸3üËC!œÖHðÿ­?=XfÌ³ùjzŠlö\«çÐãK0Ov›èänµ°Ag6TŒ´« m×¾°tÆÛ§·¬‰¬„V·¬}vcqˆ¨æ{nØØ>chðÕ,ù‘ã¬ÎsQÓƒî·0(Õ!•|€Öø–n?öšz°Ü®¶¬e-ëkOØŸ–Ÿ¶@)O3°æe‰}eÆNHï?{‘@EiRCæWIW§g_œŸÝ'K­¤-ÔÝÝ§|¥'[—‡`¥bU.¿ÄC¶ÌoÉ‘)=wÇS¯=ÅÑã9þ&‰ÄT£hex¸÷ð‰=Ï_ùfª9Y*üñ´â?F—nšœ{ûü'ÎÓ‘v|»R=:9­îN§š†‡û;³Ê¡ê}nºéøšs““§ß:·0w:µ  ‘E"Îÿã™¦M’ÿéùÕ»f¸öKÒ(yïÚW._~ÞqíÈ“ÇŽöØÜµ×g„w,‡|æÈ“üñ1'>úÍa´nÝêÕÀÚ—­i+V¿ðfk·Rž‘¨˜§Õ«ö”@‚çÝ&Ò&^c­«e¨´¨žÉ8ÖP\h®X$ŠWì4\‰Áý·†Ø×Æ¹)>¸~mK¦Öµ´¬iù—ƒìöü£Pm©ôÆ¼þ§UºÜ·?:2ÐÜ¼ïFÈ¡þZÓî1öMÏîoîj³iþ{º»U©¿ø£²>)]ÑÐÐ]4´Eôº”H,!,®ÌYC‹²ûƒ«æÁÚMœµ'ÊqÍQ»~E¼ˆ'„Žšoˆ|Ç0dmñà5îˆÏåJhi#³Ÿ«^ÉžâÈºº…®8÷ß×'XV·sçV‡5$¸
2¾‘m–ÀPðß<’Ðä ¥+|Ä.°(†í`+ç§±RÀæÎÚvrÖØ…ÈC	ÈEŒ&œå; Š£â%ÃÀ·0{Û¿ó±&œpÁM8Ë™Ò'¤®æ`¬æß´IŽ›³ê±»¦¦¬N1¿U°F)7-·5,ÞAG›Š"û42r3©¸µÜ-ž7œøï¬º3ŽÒÇšÏ–ÏÕ¤Jú-Æ‰ŒÁ©ðk®j‚Ö¨U 2¤Æž„=Ó¶ÖÕ°|BË `-ZkÑYÔ¬cÍyìþeÎZË\¢Ú‚Ç¶Ö\:‰¿ â‚]¹<¦ˆC™ýHEë‡ë¹¶¦~cïž‰	Æl(½ß|µƒ*N×¯ë¶¸ `í¡‡V76ú—Xl¬±u¼o†=#öœ˜Á¦¸ í@ œ5n9ÁZZÿÎnX­ß•i~j2´t†h¡½ÉŸ,0R©pÇøøø3hÐCûõzÂ˜KAz$¯$f«‘&uÕZ×NDq˜¬:ÇÿÈÓÇ«ÇR·ucVÞy{Ï“K\c6@W3ßJs‡~W¡®ÆÚ`›–ã|ÅÎ&ˆðâjžþ[Þß¡ò4Às¬Dk‹C!Wo¬OB!›ìØ*ƒìK÷Y_ÏO‹¼4ÄÑú¯î3‡Í/=ÈÙýw››D1$[ ‹2ýÉÕ`®Eg-FA~z$[yl¿ïµ}z¯Ú­êjÔÂ„µrTCŸž)Hã§ Ð°Õâæs
î6€»Û~fV*§µaØ<mÎ¿Ÿû¶¬e-kYTXÓûÏ^–3Õ´¯ÉäK^–˜RG4¯2œ¸uhhÒbTƒÒ’ûä¾iœµmÖ‘/°ã£õgKÎ?qk†¨½8:¢ÝR)ûˆ%ùýÿ¯§ªsaªÕ5ŽT@Â<q¬Ñ_Õ¾áÛ-©ß]5}ƒ§ÉÖºtý’ ?8}Ž±ÖVÁøñ'_œý˜X‘S§®¤ûOÕ4>1\)X£“¾¹áÃÃC/Ÿ]˜ýéôÜ[§Ï›»–nÓ?¦ÏçîS×> Ï[sÁü«ô®YÒˆCêeuF]õ—q×N$îZû3¿ÿýs´„¿öÖ Úïôƒ=÷Ñ“Ï=¬ñƒp×Ö¬[wç‰ß0xíMIu·‘/òµVÀD¢N¬µÏµ`-*É0`+‡µØÎ†XéA»¡ˆj:&)b¬ø“ÙÒ5®Ä¡jf§ErÓE[éhJXM¥‚µ––u˜kúˆ5k×îyúéƒ‚5³Ö\*žº7qÖ¨JÚ{¦µX ²ÐÖÅß@ÐŽšÛ–bç hfoQ÷Xid¡Ù`ÍK#YÐàßØÚ°"ißkèÊ³öw«0P@E2J—ÀZïù"LZÛPM#²¹¥Ü~¶Ð§¦½ïn*ÜEÔ­w?,ÂZ67Ó~ä;÷`µÁš4¯|äœË×Ö”$b÷­|LíÖÍ t”Dî|$t¥Áq¬Z²Bž ¡`‘y¤Å*Z/ú}j¶OYcXÄ:Ú€µh­^ƒÏÕØùþ†ï$Þ³F¯]ä”£-´¥±4zK0ŠÓuV™¼Ì?Ég	LY`¿5Àù?ÅŽw¡ÚB5(¶€õ–ZX Ø”öØ!aa)ž‡MÊî¨Ë`ì`J%Eæ2G®Â»ªæ‚×x;ë@¾ZŽÍ1)¾»cœðË”‹–å¿À¸m¦bo¿põD²g‹Yýˆ¦5pÍWì<ºßoQGTi¼ÖÓ =_Äyí­d‰}$®ÔÍÈjº×á2Ÿy…GIYÑÈ,lä gdcEãÆúÆkÞÝþÒ~E<Ñ²öôŒñšõ¬oû‚³³8ðÕ¨…l èg1:J¢ßÚÜ0äI"l:%GÃBéÉë¤ÑSÄ©üŽÌ´UHl¤Ò}ÐÍ¦}ò¢$XãŒRº“æÂæ¶ÎÎt%×ˆ}¥4²”/àªIš†Ýy”÷þNÀjLv¤_"Hæh¾q5„öÏ¿ñÊóîª¬M2ß…8È“©êM¯·ªxžFkM›Ñë g¨å¡ªÁqÓš•%¢zÌv0­g¼‡ŽÛ®¶žµ€;ZÖ{ÈEÚÒ^·sýs5î§n„BkHÞšÓZˆéyœ§F±" +FÙƒjìƒÆ¾tŸ?kÈâX„ªé³+vzŸáTB§´†°Ö”+ò,-ÒCí]eñ"·tÖbd”;kv´í³´«•Û­CûoÝ°£E 4ƒ5ý ‘Ôtâ?ùÝ*Å\T¤µñ)œ•ÿˆm»Ü®¶¬e-ë­?W46w¢ÊÒÚò}ùît¥øLåH…>æ•å¶½îíjjhž»éÅé“ÓW¯žT_^œ©¯ZjdYàò@˜G÷ºHÇhÊú²†Î±¦Ê°–Ë©ÙXªÅ°~¡šÂî_`zôÌAËu·¤~æ
üäÛö}ž"wÿ­ó³³o}HÑãù9Æ[›'ÆÉüÅë\bôõäð_,5|âÄ‘¦NÖýýiÃ9Ü;<Ô´prvöÂðñÉÉsý\ú)y_×H¡B`Ó?ƒ¨…Lº^}QY#WIŸ×¨Yùáþ—4^HîÚóŽkGŽ=3è£LÉ†zîÉçž9ò:|dXÀÚº²F€52!¿(c­âÎ7»Û^«ƒÕ¶(é¹®.“8k9u±ÅÜ^ãd×Ð’K‹"ùu×…øhÌtXÓÙ"^Ž.C/+ÎÂZû¨•þ+V6ð‰jY[·¶¥w#¦uËãq'f¾8ã°D"`ÍH|7k?Üûƒ®|Û¡í#…æ®]ÍHÑ"‡l²À³Bî”ômFkê"›‹¸­ª(>se4µùðkÿ35ŸAyuH¨tkh;¬æÎÄfxŒ5n°Zœ²æwÒ Ë=´›‰‘ù«_­}i&_Æ½˜?¨Ùj y¤rk²K.q´ìGˆŽ‹œ*K#a³…©Ü®-[×;»aOjá`æ©‹Â›X$é”ÄU+-ä¨»ª%CþˆÌ5Ñ\˜¼ff×†b_ô,HoZ¬f]k^ÉÆU¤}ÐÈÂ(ÒWAì¬¢Q°æP†ð¥¸iMß¡¥;B >D[é‘•S"6gMÖ‚Hk…«¡±ŒôašÄ6æ:<¡)hÄ«©ÈñáŽw3"a'´¦‡3ügGwhŠÑØ ª®¦ímµÊŠ1¾†¾ŠÐb%‰þSS£ši4`[0%wÕ9µÅþµkÑXó›Yk!^äðsÕb¤ÁZ˜h°†bÌˆ¹Tk±|:¹ìu+Zk´XÈÛêÕ©VßÐ¨œ‘Š
èkgmï£t£ƒ(N¸WîWÜWÛ?ówïLL|¹¡U©¬+Æ–6­y)d’ ùc/†„Ct£ýö}*~ÀóG€µg©€¾×*ó™Bwº¨Úƒ,>xTÊ¦[‹)®­½‰·c
míé”^áŠ¼§ÃtòúMøjGáßÞß˜¯öôþC°š^MB¸ÈOÖ„i>`mîôäÈ¹É³³§æè±<×š.ÙgV¤¥KÙ´JëÇ»rÍxi=ÝÕÕÄùwã­ µ.ZåŽuVSjÛ…ëßVÈt:»è1½öÿx[PŠ1#ÀÚ+ÀZâ­Åÿ§ž}ŸçÀ
!e9ájÞ+/#Ò´ÝH q¿$Ï`cxÅ’ETiÖš]‰Tsûo=dÍÃ ý«¡—xì3ä@Þt6¢þÑ(û¨?¨\Ú°æ”‰°Ìü‡)c5M*@6Ð@ÕŸŸ§ÒÇðÌÜó ºÿ?þ›?[Ö²–µ¬?ªþÕŸiÖÏ±Xìê^(v§5(FÑYášÃZGMnÛ´ÁšPM7Ó%n¯Îíë;0yuvD`½”‘ÏO‰ÕÖj‰k¦Ý-UISvS‚mMýdhkÌÁþ–£%Š<å8«) ò#MU£1,Éêß½}û~ø£Wlü5àD£Úï~Îû“çß>uöì%M½~/©c|û<†ØÅÃ³×¿|vöLïpgug?ÐÇË4ƒÝî&‡m˜cjaröBï\6Í8}yròõÊÑ+§U¡"XC~ðÉÌ ˆs²ççIvþ6¯ï‚µíþ§
¸¯qv´óØ`ÛRåÏBíwÏ|ôàyd¸µ_e×­[ËÖò&³½Ÿÿæ/¬NW­\ÙÝÝÚU—‘[„÷o„²¦’öá+Ü8ÆüÇ²¹ÙáJøZ\‰ÂX~¹£æ	ýA1^DÒ2ÎÉvTL·roÂY;‰˜k•8²‘ŠÈk/ÿËÁ‡f 5ÝQß&+›òij¶¯Pø‡/vØ×¥9¬±çÙ´ñ§Zc}ÿ€Áç\—è_c¾ÚŠ¬æI«¤t‘OÖœlÅ¸Ù,ãtu!…B†
Î»à­Af‘Ô‚­¦ëÑYSÏšãZD¶x Ð–¨ŽŠDŒ/)g¾âVmz8¡·DZAdæ¤	ÊÏtâ >e+Z/òØìøU´…‡<Q$Cæˆ¸LèÐÌËíáäŠúÂ¼™ŒÍ²<kìyÄ€È‰C‡«\Çt?ÄF¾;@Í}5¶Cì¢NÒW¶¤ÒùŒôåçrÖœÖ‚%ègœ; q1ÏÂ`m“ÃA"ü ‚5öútµè42JãûyXuH}}JléØùŽY¥Ùn^ÛMQ=¸›1ßPGõè(öÙÔ*~‹mÚ°é®¯ÞµP…Ÿßy¬5êP!™³”e.ŒÚ76ê›ÑY¾#³è‡üÆ~$ÌÄ†Æìç¬)cD¬Öâ®šä¸¦èþÔ&[#v¶°&-Ê­iá	i_.O¨±.5TßÚØº¦¾‚™3“Úÿè£„ïè7à%¼ãò¤jHkÌdœx‡Ï«*—l@vhÍ6›‹­pCqg†ÂYÛûµu
¡íÕ&C¨H¾®TY¥8üæ\®Phjâ5÷ª­“þµ|MŠ$«î;$* Ó_1ÖxV×´\¾ŒøÐ~Þ²·þTú˜ÌW›÷ÑØî¬]979}òÚhãäékYŠåG²þêE×³%h)¦Jù\$Cö4ç
ƒ=ÅbMMw{T+•okŒÎÎçsÍ$ùwS;!Û/Ïáÿüìô[§æd¬%´ÚÖÀµw<ÂÿkFkßð}õ£Y‹ÚÔ,b„#‚k´÷aBšÄsjÂâ
¶k®a¬iw¬¡/kêàZb¬9ªqÿÔ*ÈX{ÖÂ]·ÏyÓ*H'6öÐÚ§²šp-
Gmé„µ(Bü5	ÛF‹Ï8'zÿç¿Às d{@¦ZŽYÖ²–õ§ kÿVCJKÛ–Ïc«j¹RÊÞ!ìîÎ¦pÖ8­QÛÆ°6ï¬£]7RCóç¶ÌÎ_{b[_
)Äñé*ÐË(Òþ>à:ªdjÚÍ¥7 !´tI'MJ:Øs‡å‰ ËO4‘~O®Èx(€ô¬~þ–HÇ‡y8o˜§æQýç?Fkç?ÑPëA+œ5¬±ùë—¾×ûÓ‡‡†zOô’ÿ«IÔ>
Òª+a6½æVW‹á÷öw¶¿~qc¶5M*$f|«!/«TÅŠtú'èEª!ÏžýQ#†k31„»æQ#O§¡X3\k¦{í©oÑ²öä3¢µ¡~þXvk­…A?{¾‰Þ¬oËùØÔX¨Ëè5½Ð‘É.MÞNâÜâ_[‰´b‹g®Y¥•L4NÊB¸‹RýƒiÆ§­”tZüˆg$HÇ.ùø•üx·ßÎ˜µ5kÕ´vÛí½B®Ù³gímT@Þ{ïAqZ˜³&)ÊŸ<‚þ|B´ˆï‚²¼<ÚÜ%kLÙý‰ÁFïÉcxßz ‡~5ÈVCuR¦TÕHœv†„†¯½Qœ”×{s²ÞbÉÿïÙx“!™³æÎšÓÚ~9i1ÒG"ªi³2ÈÈiå[™”ëQ«Ù»—]pAb~Í±Í,4ÅŠxý£ÁšHÚ’ÀþŽ]¿ªË)‘®Ok} ‡Nt¾#Œ5	Ð2*‚˜É×
•ÁW®›>VdÁJ«Vô `-¤AÚýXÍ­µ	Û³!²ÅPì»6ðœÖ¸'_Ùƒ QÈðÐ8ñˆ4µpEsJ\v#rtóÃ,´6‰Öò›7OMQûýpõBŽ„BEõ[±5Æ‰üìñ×ÈŠÜA‚°Ö¬íèÈUÁ¢/_µil
G­Šß~–tREÒ$òtOÝ5–*é7b.Ïg¡ÒØ†±
Ë±d§þ´Qon¶ïw¬Â YJî¬Á^Q‚3vðšJ í‹ a5P-D÷#«uôUs—ïÜKó‹YÞÝzk‘‰‘Ö
«Ù¯h‘Â9z÷ÀáêXëm¬ÍÜ+	¥¹œÖ¾9Q_U1sðÝÖÆ††±Š›ÒZö;‡Vó$zg7-­ô4áøþ×3Xâ”ªRn€»ÆuóÆ,¤›ËÎ¨{Ä_ìl/ä©s.uw5çS©UŠí/ˆÕ<\¤½½©cmõ`/÷^k(<.iöë=ÀÚ©“Mõ'OŽV§3ïeúÜIêçùÚÕ•¼phð5ã(¡• }` ¦ìÊh0ë#Ã5ç³Åææ6Ú˜(ë(ödrø¬-ðÑíl»®œzkîšUCÆÿWÎž×^0Zëøí}7ÂVlaÏŽg±ˆÞ@ZrüY	Ô@üHÍ®ƒD¸+¶_@Bš³ t3g­Ö¢±B9P--ƒ¶Z4Ï–(°‡pûCPS¨ˆk|•òùjìÊŒµ(|µÈjl‰À6›¶öË€ä§‡Óí{Ï>±U£Ø‘€f¸çžåh‘e-kY
°¦z!î¤[èÊç@SYƒ¦$FJHrÕJ§.Ñ¸VÓ·gÍJ ƒ~îš¿29ÿêüIšÓú*å ±ƒ½¨(¢³ŠŽújÎ-»?e}i·²×4ðFˆ–Y?v¬Œñn5Ý$8M¤vGaHsÕÕø;^cÕþZ¨æ®š“”ÆýËæç?&øñm|0ôá[oxivnóìð‰ô•ßTÙ	³ý&µaü½l?¬f¯µCž¦ßJçA}ïáúÖ~¥\ÖNÏ½E$›K°Æ«ªõ5PI1$½k¿$ò¥C3û>íî_wmpâ¢F$¼µñçTÐ	¬1*nhèˆçA’1Âlì/ï­}ñkMMÅ\¾™¼õ\1ÝT¨ÍÙ_!ˆâ9n•™dUáœc¬ù$l?A‘Ô"¬dC!ù‘•ÁZœ¶ÆJW9¬ÅúGzÕôã°ï\)VkQäÆ·kF°F×Ù"°-”&\sgM›Z£Æœµ—½|`ßÚ:_>Ðœ×ìtZ´FÀëqu}4ww¿¶E¨†¸ ©€´._•Ö íf>"Ÿe¾8àÍ2ÒÂóÃÍú|dç2Äš’Î¬I„ÆªqCâ³Àj¡eÍÙœµ½ÎiÚ…•ÄCœ—mÕ†áˆbV¿äç7”\D¢´3b)uÍ~1¬yÉäÎõº^.ÔôñJTëÎùØÑq±ÕíŠrÌñrHÏÂ|‰ÃTFhš”øŸñD8ÎÃG\Coî¬íÝ©Åô~4ç5 Í6/,ƒ5‡,IiŠŽ‰ÞK7ŠÂä7Ïô‡*ÔxDå™¬M›¤)q§‰”~w#­åªû6óÍâ­á ‰Ö¶ö!ì3žTƒµGúú 7ô¬mVOn®Fë#)2—Û±#‡Í=5ª¡Ucš jÇªTÍæê…»6l²GJä—ìèËå§¦Æ6là§ã{¹ËìÁ˜h©Î@G7?ÛÇñ	Áš¶Ü¤è¬qiþhR
)\»pWìÿ
«xZ¨ÌH—ì›^‘ïãÛ>åâ’Œ´FÚÔlLb=‡xå½-{=úÎ~`¡ØÖ µ{ï¬æFùÌšª–ýõïN¬¾fkÁ±kZ°t±z?Nþª–±3ÀZÆÂ¬Ôª–U«Z]m^q#Í\M§[Ó•¨»«ÈkQ©«‹²ÈÎ£ƒÀš×@Rñ`á" ð×¾È¬Î™§÷ÿPïþ%/(/‚kÑØ‰f§G[›ˆÿg2g?+ê³”O—:›@´´‚Ex{’:Èî®Rìî.òÞL4Ô“‡÷»û¶ƒuíù>.·Ñ³Æn|¨©9×¼ïÜô•“ç|<¶Ië[+…ìoWY¨%g:¾rwZÃpô¸~uù!°ìž{îS¾¡·‰Ó8gw)®k LÙ@l6ôiÁýHTIí³ÍY[ÊjåAî¨!ÛEVƒÓØn™‰¢¯ÆJ?‡‹°‘/dŸ×(l!°&Z£}ïY³ØD³`îç–YmYËZÖŸ€þõ2X³]w!oÅ¥>"ûkvø]Gš¯„ ­o›ÃšŠu§]ÒþÕ¹92Fvõõi¢°Æ[¢ ¾š²ûý¿ÊpÍ­5ÎokšoÖ©¦59s¥žñçž+dÜP‹¤f*è×~TcÕxÙ'vbï/ù×ßÅU»Píc×'ÒÕK—pÖÞ{ûúuN>ž?õÞ‡WqöøÐð…Ã'¾wñÎš­—"Hµ©ei[Ó–••MÐ“®¿²²uhã—;+*S#sï>›]ÿð­SVù1Ës§¬w½ú“Ù«ß¾úä¯í}ô‡/½ôÐ½3_ù†p"V§ÁÀ3Ïé'Š%ÚŽ’kbSˆLÖV¯»óÍç/?OÿÄêÆt¶™JŸºÚL6]U¢g>—Sd³k¡%¦p›ÊËœ’ÙaX6òG|;ÕÊüo?sDõeÎš/çÜWÓ™“î”N‘Ó¿z'ëèzÁf›881qùòÌÁ<(R‹Öš±ÛK¦C‡Žv½ü½MmÖ©ÖÖ´bEw3K	,³¨þ×e´qÚœáÉÃnëÊ›µV‘¯å#(—J~x¼K•ué­y%èa)»kÛÍY‹Ö{Ã4ßDnº5îËâú#§Ëí+×Ÿ£YkÛ¶ýªVˆU['²ZÄhÉ‘MÇb&¤0-9yä/Ekœ±Óc†n:‡ÙôQ:×DÅj!·nÝÂy>Ôl/tŒ2£=\Ûæ<©«ÕÀLbé”M
ÖLvâô4šàÞ™‹ ZðÕ…›“šØüjÔE`m@ƒÌ’j–¦³M¼y1²IZÛtEG{Ü¯›ì¢îÆ~ê_3i‰ ·m»r*,Þ¬ÜÇ>Yhö{
@sk#{ÀMÀ¶µ¶oóæÅÅî\GMj!¥äÈ¹…
Vú­Æo¿±1ª./j6/¬š¢
sQ#Ô™çU¥0ÊH°Fµ¤ZC	]Ú	Kßíã´ÌY;Ì¦›Rû6íÜiªRCZ«@.…5·Ð‚ËÆU­—BDQY)¤ÅÅ+Á˜³«­´©‘ Ù«qØk*µjÙNoÕ!ý×1ƒŒûô"WÍXí¡‡Î¼31öî»«WTìÙs[ÕŠ²bÈÀ˜ù¯c‰ÉÚžÕÚ1Mæš¹j%Á†ÔäÖH\ÊwÔRì¬” <—[UY¡× Æa3˜¦H=d±««-]d´Úø=ƒÇŒÖž8ö$¿õ×´œ ´ŸiØû	ž¥¦>yó²z)ÀØ6{®uúé!¦NH­ŸC:«¶kZÐÒýU•ª+a·n0­X©Òþ!â|óY¦îgT¼;Û•î<Öž«æ¥¯-ƒQË@¸ŒÞs*»!»±Ö“ÓÓs^bzîô­®µÛ¸97ú³t#>Óƒ uTý£Ð0qJsqEYˆHDEA"\¬vScÝj"vH×¿Ùœµp(W´Þü¨-ª,’›¶kˆÝæv‹$È€jNk1’ðKŒ5œ5E©ÜØ+¥_ÏNØä@~îß/³Ú²–µ¬?	X³Ê%kéê*U/dy!Ëk¼5°ÆÛÇ9…£ek5™kóÁVsLÓvýÊõK““³³×26eH¶šÇCçù<Õ@"Î"¬‰ÖlU®šJ^æJí¤£cým?žy|	­9×‚jMýxbÁUKbE¾ûÝWÞ@ó‰çç¨öó?ù€ÛÅÙyR ßž<þÂú/ž¹þÖì™0Ì.^¼À_†'z‡Á£aËÑÒý½œÒÂ%:Ùxc-]“ÐõY_ß”Z5-íí³Çgé^«}À; sþ.èùKz#ôÅénøŸè»¼´n§×~â0ß-°öü‰'™ã3tô×hX{&‰µü½ÁZg?A#DBb­AkèË ¼¶¦­˜Î×ñ¦,´VªÌ}ýëuuÙRIkÒ|¡»‰kÑX‹b­µäˆ?«£Â?  f¬mèö•~iÉ4lÃ3_Åñk·Ön_yûºµ«ëõ¹êÒ£é¥å º]jÀšÑZ„5²ãœÕvïÞ}f 8ðò¡C·¢˜ÙÒ3Xè!³À!=´§i®ZOgþšœ5l5¼·®±.®su…6BÙÈÇ&v _Ñ½Ei-ùæbzEE6Ÿgá¶ZVqç•üCxÆ}5Ýn4­Ÿ¡yÈAÍµÝ¿ïŸÿ d¤ìÂ®mn­qÜµ¢bTumg‘Ö\Zˆ-†5VkmÇŽäƒŒÍg[wzërƒM´–©£§­J[¿SfÚ†,r’™ÇŽˆÉ–ÀE‘æ®›)JJÐŒ+"(NÎ­!ï~¬}Ïy[ä5)ðwÌµ2kí¸'öÆ0\(¾{í×Ì¨ÌÍ3{(¡0,¹pÝ@-ä?CÉ+œµs¥~T/èçÊ`ŸmF¤ók6Õšw¬ÁaËiÜšûld‹lÍ›TÛt ¯†FµMÑèXJÑ±ÛWM’ÇÉ’w}uŽZŠŒ	jï0ÖyÆ÷›Ëc_µŠLw%>ó_Àú©8XS¤iI¤›k4BûÝX‹ÎšOYÓM°æ­Âü:`ºÔœÎXùÞN‘?bVZ„µx”ìaM« ÆVN*Z{{×´²„Ý˜ŒÝÂª¾{ˆýî…â|úrÈ£°Û0ÖˆƒÜ£OÞØÀŽ·œJ²ã”ù~È5|?¤ŒÀ#Æjÿôõf¦` Fšä<d„ÈEèNÕ|eV/D…,µø"'jQk„Ï5p´³müŽq`­kÐXá]·–7ÇèWÛ¯"HJ5Â;”xk ’¥öŸ~cpš›ž>={òäˆ9jMüëÆm0šz²C‚µT–_'|­&Z£—­³‹¬“l3ï¡œ,6BEr98OÑ";AV$ÿæér¹62ú³ÓW®Í	ÖàÃà_>pí±AXc2=-ìe:Z–'²ŠDkjÀbòõýÂ¶{îg§&6]¥Ð§Fž†kÉDl6²³ Ë`-Òš`
•áZo]Îlq‡üZ4ÕÊfaG[­ÜXãª±Ål‘HjÜ¢ô3ØÎ­5à”áj7‚/Š)ƒQæ#KÅ±(dô·Ï.G‹,kYËú‚5ij*} ;K´G¶Hæ#`·vT—h sX+»ê¯ZÑSC×÷ÍÍŽ>qàÜìHÊK9˜jDyª4ÝÈ‚TÉMÍ5/’l<vTÍØƒíÍO)¦±¶ÚïmÎ %'yI¨öK\µWÔ«¦v±ßé]Pµª}¢f5œ5`íçÎÒª=96tæ“'{/\üÅ Œ"Ê‹WÏ\8s†?y¬ RX¢õ3SÎ`7.è$Õà5tcß˜™eLöìì†Ï½ç°FïÚù•çÏØ5æ®]úÝ«j]CßµÄå½~ýë	¢FðÖŽ<3Ø¿æð‘cÏ$®Z¶T´?­èy‚ïT	¹V»¼§óŽö†4{4¿ö?js©üúÚ\¾X¥kþ¾¸‡ˆpzÅÖ”%Z’¸ÍN‹˜2’L¸h&E´+§7Á—w®9 ÑVFeqÝÀšC”Ÿ6ÔßyçkÖÞ¹ò¶†•×à±­Ái;8qùàÁË{žÿŠ“š‹ñ1¹›?¡þ6½ïõÎÛß½­¢©«­»)·)k]VÉ½iãÀc[óPí
MEö]¹-ƒtí­ÅæbÅŠn M6©Pn[Ñþ²%åÏ`­N‚Ö‚³‡iÛ½8’=ëè¬mwRÕÖÊË#«á«q· @»Èž®5P­Ž‰k‘Í–%'6dE¬°}ØÊÿ—\I`Mj Ií÷´}€ÑZ@V»~g­ ‘Øhô@Ý¯ä¯Iæ”SÍuÓj›®ú£ÎA\f`ñHÒ&&ä³£O}ilÒÞh¬%”f-lŽjAk6 ³(h,9ñi×®ðF“nÃ4î±C†H{ÀîÀµ©Í›S<«NÑ©WîÂ4{X	"‚5¸ ~2ùkÕ)EÚÖÖu¨@R1‘uyoì®1ž†\njGûLÉ×¨â}¨\5d¦ßdxiUSkÕ©Š±)¬¶ªÊßGÐ+ÑÔfÜ	¬É<Tñ¨~ÈmT”»Ó$vDþ£#£‚5ÛœÕÍØdªyÀHgŽkÚn¤A1^ÎÁ	È+¥9FùÈ
ßÇQ¡.Ò.TI#®E¡#6(¾µúÚ×°È‘`mo¹ÿ "Òu©µ63£©Ø/ÌLð©aBxŸ‰MŠÖ`í?a9<¥!QÛ?­ÏPZ€Dkyè,_É¨qLÙçJ”"fš»ºÓÀZŽ˜|¨¦ ÿÎ£GõÐ<¬qØƒ	«IäžË„Ï>DXÕÞØ íaZóI·ÚÜô¬6799Çîd“Ü5%ŠÐ¤ÆÄ4›´Fþ#°–ÚäÖÝN]$é%.wÕ®Æ®±³öµ®~ø´BBqm…ŽŽ6\¸—¯íÛ6÷Þ•]çBÁ´ÇcÇÿ¿zàÇÀšûŽ¡›Ï:«±9¬9†À!Vû¨`zvèª`xåœ\þâfÆZ9«¡›±HU†jÜÙÊK!Ã1>Ì!~N”Š*Cd¿ßª±…t6¡Z¹­Ê 9p3	AÙ[Ü¥Þ,E•@Išzù4òþ¿¿ÌjËZÖ²þ¤`m¡¨)kY²EkzQ$Z)[ò	k[5>maZ¬†n°ÚytiîúôBitöêH*˜g¼æQÒÑG¿³«ÇÿÌA-Åi¸àªL§6WgÛÚû‡Ž«Ó²EŒÕq3Êž<ÖNgÛÆu«ßü¦PíiC5ä¶mà*€üÝÕ«^ÿH‡ZrøÅ/~zöâPåð™ù«#'~ÓKƒÚašÕ.\ ËÔ’Æ!2ãŒ½AšÜ6Å‹X¡äÐ°zÎ4‰mšÄÿÓ³³¿øÁð4Î§Ïð!·èŽ3j×Îÿîw|3/~ûÅo¿¡æµ‹?ýçÿûë3û÷¼ü•ç>òÌ£5C5šÖd­á¬a­Ñpì‡×ÝÎ7(QÙ{làè‘¡c…LÝkCÆY*ß•®¬¨È‹éÅaÛêõohÔWê…K’Î$´° Í–²ÙWXÇ‹‚!Í@ãÎBrX‹ˆæËäƒÖ´vqnŸ³ëpÝíøj˜lÐ™½š‡}pXãÏ¹E´¬=mCôˆ- ½þïGŽ¹0Ô´¢a `á"`šAZ3KŒ´ž¦ñÇ\Šm‰‘å÷Œ·Õ7T¤5hXó:HFèÖåp*µ¼9k”VÕ™¬Òymûv§5§366-Ù¢<Ä ìŠ½jXj¾ÄZ«­¥¯Lká†ØiÓÊ&ªùxlÎ½kí/	“ž¹³–”J¶¬Ù9Â³«ÝJâã–Ú­;;ä©Õ…þ4¸MV›N¢§" ­¦P—ã´53Í8YHü5QIúØ’|F>ÝÓ ÷0‚«­5Ó7$h¸õ÷`ŒpÅÒ:¼†Q'(äÞ[”#òÒAËD	e“öø&¤OÕFãAÎYÐP¶ùá¼
*™O½@@Ý¸@Lƒø!4`‘ I!#J˜¡ÿI°Æm%Œ²1û>òdT÷¼­â|J½¶S*®Ô;R„ø+¹½r
 Cc•Ê¥Ìó5òøncîK®~POaí?¹}ÌÈÈ+ƒ®ZìY[´¾p8NÄfKœ55vÈKËXÜÖ’ðØè¹!–8G?‚[pÂ 5]S€¿Þw!idÍöí‡¶ïÞýÒnŒHš8é’ÃvÐ4ÃTì‰™¯Ž­¬tQar·K¸Fÿ•€Ä-6˜ä;•«¢¬W-›¬óE µ}p MöªRf¼gp0í¢Ê?‹ÉU¹
g¼ÁA8Xs_M«½ù<yU3=
«ù€zÙ;ÐÚ|Ò­&›knrúÜ¹és£Yâ©Þ'™‹Þ35­a±jšž–ÒHl`.[ƒ4›F/±yËgšåÜóÛJ¾ÃÛø^òõÙö´eš»qèžØõÄÜ{sº¯‰Ö×‚·öÊ¢ñØïÛppÁšmÈ‹¹â(çMjìÔŸu¿í8ùÒçmŽ˜² ]OÆ°¹EcM2Ôq}š±&\3¬Ò.Ê ,âÚÒ¤~öÔÊF|ÑY#`¤ÌVƒÔ"«ý·›±š(Mwv–Ò¯çÿ³w~Áq•gšŸëÝÚª­­¹*	W¯T.nš‘m•«-F½­(J#ãN·þÐ 1RO·…dRE5–lBŒ±Ñ&žAf¤¦âIT…#¦ŠQ€PLäHÄ){ˆ#cÌ,.¢QŠÕ¢¸í5öˆÃnjæbÏûõ§Oî˜Ý[.ôôés¾sº%KKýëç}Ÿ—¨~ƒ57œ@cÕ«Æ¨¤Š<PnæSø
í}k1kZÓš¾<°VRj&7ÕÒR*¥R%~Ÿ@kiÕ>òf¥B QQ}dSç®C®üñ¼vÁtvÁÑËÇjæG#…}k0ðŽ’“¬r”Öp¼øáóHn<6äÄ/ÆYR59B Ÿï´l‘2¬í]±Õ¾£®®Øæ»ù)sÕžu®Ú_Ûìkf«)«N»ù
®ÆöñÐâ…åå·¡./N§â*r4Ã4Cìe¥Alº³„Îáä¬ÉK£‘V3ñ¬·–‰·Î,ÇZ{óícçÞ|cñ£9)Æä#e#ºùdò)ëù½÷/_½zùGoœ¤úò;ë×CilŒÂv¥&«‚¤gâ°5­“›ÖÚ¹o<lw¥•OªÔÆšW%>†åLµµšÅ}JÅ“ØI!^Ä_k«álµ‘V)±˜µ©9Xó
áÈ]E4dÌÑÛ:ÁÚ]ÌZ»»¹™=aþ­í`µÿökþÃ
ÓB$:€ž>ð4CjµMv’ÐÒ§W­BƒÆºX ùkDªuê„hˆÍœ5è¥TXëb®[¢7Ï·Oª )g¯U„ÆAkµ©ýj…TÆÁ s²Œj¾
Ò`@Èi¾›éaÇjÖØIaDvˆ5üƒ¬>ØÒÐðA£ðÊçŠøÃßq¬íØ¹Û\“[ÆÅÌºæ#tm¥¯Mkg±¹¤¨[vÈ¿57ýe:y¨—ldv€;93àJ¼­ÆBö•–Fió ”a›‘“Öv†„w®’X3\{jõPl6C46íÜÕ“zTDçzÖÊMfš ,á¯ýŠ«vë82ŸI‰£Î)zÔ—Y­	¸šÇé\e0ØEð¾TÉHnpU)2e"ÞApÇlÑZš©jE‚E(6È&3‘ÿþlXZ†×U|î©ÒÔUâäíóã¨‰û¢B:Vœ©iÛžQQy‘2He"×‚çs+])éèdÓ¨´Ÿ›òÿ§•€6tÈß¬TÛ…A¶»"H£5Ý€µI—“#9ârwöh%Ñ_ë •Cú…»fQYùhËpFÄˆ‚FZ‡ÐÈÖ‘h»têñÇŸxZmkÕÄiî kA>:÷è£ï<tgŠ]¼5ç©5þÕ?‚iÿãïþkC–®~¿Äj&q[¼ªkìÅ|$Î´ÎäžîÙ1²=ú(AìŽCLù®(m ·o ÏÛjŠw:ôÚ#Lì”í÷ÄßóOø?Ð;€z‡ò„±œ¶h¿å¦µ3ç&§j¬ ¤'ÎbK‰Ïj4iR}¬5×ðÕüo>%iô5š¯¦AþÙ,Æ_~d¤³§%ß×Wþ–ã³íéÞÿó_¾‘½qR®…JÈ0pí‘™a¬ƒXÃ3äÏPãîºÔ´3VˆèüÞ{øÆý*ƒ”lÔš Æ³Úmµ/†µV“*pmUçšî4ûörÝjîn,Èí69l®òÖÐþ0[ß
Ùk`ÍF`ßóÀýæ«a+rå>õ©)om-ZdMkZÓ—Ö°Õr[K¼TW°±0yêGÚ’Å4EõEbCH€“ÛG]ƒÕÌR»yVó°6þ\¤´o?¿?¡4
ƒäËø•i¬V_/ÇMWyOÄZ;©¦¥¦kü®Ó1ý*FšÓÁ²öî5¤Ñœ#ÿëÐ¡šÍU+@Z¶2ýTõ“ ©ÚGe>ÚýcJ?]\üá{Ë¯üÒRÿpË°Á¯{t˜Æ>ÐÚÐ¸w¬vXËáŽaåØqÃ‘á‹GvíÍŸ]|sñÓ…ñ£oL_sœ¦Ý…›‹LÉ¶yØ¯|à¾µpåúÕËè_þé_ž›ÝsðyPííŒÙ`78ci26wg­A”°ÚÆGydó‘Ã‡ù³¬çÕ‰Š›R‰­ÕzõöøzÆ ¾-Ï-ÄsXC¬èq÷—Bkš[X[=åÚG÷kaÒÂÓgžÒ¼ø L?»°Vã´ùÎXìîö8k±›[›m(öPû÷e¬j Û[ê Ñ³´‘¼ûÄ;ï×¦{{f;UT3"aXNÖY£Å‰ôåó}Fh}Ü­
’}Òìí¤r„wþùQ
XËhÐš
©Ò
þv	tIæØYL2ÛÐ28kº‰Ê¸g£Ýô ;gM°"E*®yZ·ÑLfýe!òÑûkþt7°frs°¶»9„B+°¶Eå’*ƒ´{°¦ÈFŒ6ý[>°âFÁÚî¬3Ú­}ÀÒâû¹{3r,ÙR•Jò´¸1VŸëö$í²®ñJ;`í)Ý 0w3Z;"FlóÉ#¦÷´rv{ë2cÏA‹PÉ‘…#šÐ0'†´Ío-Eø0k>†TÃO®yÔÓŽ®2^\“±¯ø[’¢
°ÒŒjHänþþv# ?	yßJñ¶j»å™3S™´êæ!1›ù¦ þâ¨Ë-q?ÛJ„‡ØyÓ Îš0’Jù§
R_ß>²0c`“ÃÝ­M†jÈ®s ÖÞw´f
¼6´â¬µ»2Èà¬¬¨yX3<óC¯+†akíÍcX¬}!§!8M¬&Kmˆ H:†::b3UƒŠ™››£ÜÑé/+ê ¿¨m|”ÑØ­µõ3w­›	°VvÕÜbµ}¦€‚Ô=J«`-UJîÓÙLWs¨ã]ŠºbÒÊÔäÑÑÑÒCzÇÀzõ?“V¥†a	TãgýC¼È—J$¨æBûÖNð‹ï5¬	˜èX£ò8ug&í×ïpÖÈ?sÓB	ðÓ`²ñ˜Ëùj2í#<ªY¤-ãc{’”Ôj¤5¨3Ó5N“[*MY oõíÉÄã]z«éÊÒéã7Š…Ô[o-ô­‰ÖîþžŒ3bW<Ÿ)(äp1þ<ÆN³òG`MµÎWã„¼‘È®—·¦\RÙ!­¯ŒµÀj_/âë «€kÅB	ä­ØæOÂÍsÚ»jlÁW+£7Z`µÊŽ5ÂDþÌ5XMëP©õ=P+¶¢•=Â«8lü­Ýo³þô?þÉšÖ´¦5}Yô¶óŠK5ù^‚…3*KŒä2J8.òFk–èÈušŸ£Ç–_9»øÙÍ³>»±§}j…ÇjjSÔ‘f§V{xI¦Õê-ÕKžÖŠÎVó{aIóhtì†ÕÕ¯½C5ô/vÅ[:b‡^ÛøÓŸ
Õ¾®™[ªüPíoÉU6Ž4H¨©]ícrõñÞÉ“¯]<ùÃ‹CeBÒ»ÑgC‡Ùašqg3J²Ž5¤G2Öìl\>^çôG=C¯\¼°ÀrèâòÇÂµ´xþÌG/~,XûÅéŸžýäÊå÷>¿ra®]å›Â2d¬ÚsÜ¿+=7;ËÞòE¥‹X¤7÷Úï¾»}Hcç†{ö~SV%9Ñ‰æ­1Ùc±ÕeC­ÊË1™O0n+Ÿ³Ö2Èñ™xŒ¥ÛCÍ/nk3×Dgv1„‰HÎhsŒæ1Ž]Âe÷ÃlöÜÖææØ†C|ÕLÆ¬‘J0d°†‹æYMþÚ·¿Æ[ÝœH@ªÜë¯¿üø/š›ílÁËÁj’Þ¦n4X#>,+k‚ü;[òmm„µõ5$s½nc±æX³ºífù¶\®;iS±smjzª¥r¼ÕÖüPlsÖ„d¶óMkÚ<©«u–/òž³ÐB¤­+õ›]eVûÍö]ð“ÖœÉd§Ü\³â Ž´Ð×Á1IO
3ØtÑ=MùýÀš8ª±V·Æ]ý\(Í‹Û¡îŠlHÈLó¥ª±‰kT³ÈÅŒ‡$óÚ8è!ö–E"ÉYsUOygí)¡™4§N|¶È-ÑýÖœ&Zsx†¿æK “vZqB–úš$ãMËî(K¥m|‘îƒ]²¤Â·zîˆÎ—¶§k‘:¬0vVÇ]`Á<5õÖFû\æb#y <‹Ö)ßŸJƒ&2ëL_Å|Ì‹$xò›Ÿç1ù{ó3ÄÔê}/FŠ‘yë³5ÙH5ÛÔeWéXvÖ¨)ü±)¹ HÎš›A±
ÖV¿² ¹}hHcía­¼ðª\—3þ]«Ú‰Yk­UU—xcE°†³&c=û,qþÀÚCw1 óÒ$ï¬®•®y{Ueµº•ä.ºJõv7¶ÐøÜÓ‘¢O°À?gúÖ˜v_“€Ô†»ˆ¨êê”£F+c5µ
Ó!L¶Á'?®aØ?P´°‰êÇãgÏÖ,æcé­¥çÎ,½y~éø‡S)ÊéMc¨ZOågAe‘=f¯õ@p\îåF .È;#ÈNî€Ýö k³tÕ%{A;Û2{5ƒd On#é¿û?<þólfêÜ‡K§Ëk¾oô£µ’ù­AMÐf©ýÜp†¾WÎ€>8:XJîwîGäcêa50-È3MðÕkÿßàþšÖÜ*t«­ºÝÞVó®¬Æ­2´ßîÎVó¸²E°Ô°Ö4ã›~5Ü4Çj‚5Õ@Þ÷ÎXsÍ|ëúûÒ_ÞZ»ÚšÖ´¦/“þÝvŠŸ‡ÔzéàPEÓ½Ú Ÿ2Jtä
ŠRÄ¸ý°¶°ïÆÍ7²7j7o.MñÛ° 1¤zç˜Ê H2k°f¦n5‘¢_¿ÊÓ‚RqtÇãØ+=¿"C5æÙ»ŸG°·îÚøP_óO<þ03Ìè*P´òòµå¯XžˆÉ¦©]¸ð1§O%òÃk'=ý hCˆ3€ßä²‰ÄüEj$Ð°ÚÉSã„Nã2Ú:: ©·ßžžøÑÅCO-BŠÿ/Þœ^²öµO5)@°vù—×¯
×®^…Ö®jW¡µç~tè¹ïúŽ•@Ža¬¹—âÈTsi€#7´aƒzZº:÷~ó[ß|µP56{¤£ºu"VÕÜ’Ž%j«fšUûèå3¹ý»ã«Øà*T)ß£éäý6k3ÕÕ ›óÑœ<Î‰ÈØ­cï9MªÙ°×hT‚ÖhXÛÌÞoÞ`ePhY¬qP!ÕÓüWçRF.MŸ:5IG~Ž 9L4Ô&\ëë$ad"2°ZC_OsK>~Góæœj¹8;Ò32@æ@Ks,wÝkµµ3š2˜dæšëx©'['¥\zÖ|p¿¬5d´¶p’wÖÞÛ·/öûc¥|ÇšÑ:ÖÈïGÆjfŠyPsÓ¯iœâñrCšÆ4ï¿mA+T¶ÞˆÙMe¤Á§Ål·2óÙÈ£ç• ›&m¤el%{MÜã¥àG=â)h5™YôH9Ÿ?ôºiá¼"w	XÕ´9V³½+ƒä†t`3XcsOQ"ÉÑ2£ Éä³Ik%ýÑéh‰GØ¼ç6Åü×öXÿöM’‚iª“@6¥ŠÔ)ãqÞÇ÷O•ðÁ˜Kv• 3žM¤hÐÚVÜ±­ÈêP¶ÈÓ5S£V[¿-ËñÓŒ &FÏ¹ZK+t+¸± U|²ÚùÚù&±žÄ‘ª¦ÁM–Š[Êåf§§ÄÆ¸{_s±¯ä=5-´M[$@FlÃRƒØVZ+ëgFk›lE½ÝÃhŽUižrêk}U¤‡² R¡q-á"Áþ5Çš×ZÉue>öÜë¯?ó2£½¯vÀÛä¬¾ªÉX3ÝÅPíÁAß¸æµ Õ¬V€¼ðÓ*OTùkd‡$ZÈV¤Üyl|(–‚ÐP<ŸÇïRÜH||¸k kâfã‡ï‹ŽÕýOÂœþ’¯‹iØbµ¿ùGÙj¤D-‹Ò 6éø[Ç¿µpæÆù…óçO,KX#;,»¸ýnÓæWD$AþŒ-ÝÆd¾BçHO"^ÜÑ¯¡|ñ|®›.Èìž=yY´H—šÒ#×‡Õß=;’'‰µ¡T¥›Š•tjê‰VÖl<öŽÖ¾õ|4õ¦)áñ'Ö~rï}ßpÓ×DkHdf‡œb¨18Q:ý½$‹X¤LµÀkBšÐ±&R¬V	kÁYûÏ·	ƒ¬‹íy­Õng«±ÓÍ+Øjº±™*b ƒ±¶ÊYÃZSÃßà=yZr¿|5¥‹ÐšFŒ?+/MÜæFÑ}c­]mMkZÓ—ÏY+Íë×M2S°ˆúˆ¢RšQcÜè²O§wí?·¼¼ÿÃ…¥ÅÏ“é±ZijßT)‡#Q \/BoHÓ$ÖR¢4ƒ5K‰”tä¬rvA Vh3JÛÛÖÍÞé¹ç_«a«™ïD™J»U@~]¬Æ\55€»X‘å·Nœ63ëã?@jn¸Ú§‹Ç5ûì$1"ËŸ^ÙÔnf€Æ‘³°Ôb¼;ÍÒûÕ²&·lqÖX!‘µ†`ŒCíxo&&Ž^»vqbÃ‚Þq%p²õ‰ý
×ñ#~{WíÊ™Xíúõ«Ð°v•oí»ÿ¨YäØ˜kXC‡©€äƒùjö%²fÉ}óp>³÷…o~ó[m©øúvQ3ØZÓ×=Ð™[š—zýå¸­®r2h!$•
C×´ÉükN¬UÖ¸[Âˆ¬mºÓÃšsáÊÃ°=¬hëDp1•BzXká®U·nlßX]ýäïh&öÉÓšÁvâ]x¦¬=õò3§^zir (cÂZ®Ñ
/Ò™èS%ä,°&JÕìÐ7ÒÙ×W5kM¤x; ŒëÛ£W%š›[¨N2X«šÍeHPÈzJïæ§²ÀZ°¶Å`þÕ¼µ&bó©ýO³qþÇ=k“•©ý¡W­Ý¶è|ðÁ.î[¶8B3³•ÄÚšÖ@0$×¬?
¬í^©tä
—%žÂÙ3U É'ÉFÒÝÝýÝýº€¯¦W‚Â)o¥m¯8j)Ê™ò°¦ƒî–,Ÿsÿ`€5É÷¹•µ§´¹±ØÎFs:¹b­¹›žPÞƒÊYý"?Ë² 0×Î»"HËñw_d9k$ùX‘g›_ªÛV¢LOpPá53?é¬nj#d4Í‹çbíÖÖ¶Eõ“ìñDØÍ~â%Åju5YÁ¸õ4îfÓE‚üÓó3ó¥"yúB\Ã^Q?ãä¥aµÍÔQY_£úGëa«©ÝÔD|~ÓàäÔÔäô©¦Q‡bé>}Ñ[³¦ƒË…œdoŽ›]ÏÚEî&VÆfÞYcekÁXc®i(¶ëvÿþÍó?X±	þ*Ò#<„BŠ¾WXë©Xüî£«bCCt­©RØ»ÔÞþä“Ï¬Jƒ< _MwíŸýú»ÞÖ}gpæ?Úç.5‡?FŽšÛs¨,„Tõi}…ªñ kZK¢‹úÂ#CCLÍ$O$ïH$-€[!Ý;>>²
ÖþmlìÅGÊ¾šXíÙGùåb¾šj ßZ~åo|8rA2Ö–Ž_:¿°´pæ<æÚ™Éš–cçŽMònZÇpZÔ€BQ;©lº/Dy§3C¶eÒ</×–¥ø¸o¶3Ÿ£@2š¦q6ÏLîx¾—(Èd÷lO¾wqCIf•îÈn¯KUMž;óG´ö¦¥Œüï•(‘û…b6Ú€ž+‹dwß}b6ÉA*e„=A•û¸Ý#x	ª,‚”*‹ o5£©
g­’Õü¢|·ÛË™j«s ½ÌVc‰ýl·Aµ köí¬`¨6e‹ ¨
áo€˜þo`7ò7¡LHüÿÓŸ¬iMkZÓ—
ÖFµ8¬–³`ª2¬	4S¯tZN[Q´¦Äîû–?Œ~¸´oá\v×Â…¥©sK7’uÛoìO¢¼¬áÉzÅÂR™ÿüÞ46!‘)
DnÚß2²>]`ê˜`MÑlWÐzÏ2Bª¯b«)VùïŸøû¿þç¿)‡õ/,?{üøY@ZãØÙåEB ¯-ß<½ô†eô/^x[)"žÒ? b\•{6äÂí04.r“ÕY«šÛZtUŒ1ä»ÚÞ¸ö&W®xcšþ‚7:–`4tó³_üêôéÏ._ýíÍÏn.\Ô®ÿò:ÞÚ~f›I…8/¾èk 'ÙéK•³ÆNëÍ=ë»Ø¶uçR{ö6wtTÇÜÓG6FG2ŠšV-ÐW­ùk•°†*k"4–Ú9ÏŒ](ƒ´‹ˆ« Kß»Fgßqç]1Yjàç¸ií­1Å@¶òúŽ¶;îØøëß¹ì8^Ú9ù–5]Zc›žyæå§N¾4Ý•uŽPÛ×Ø–QØ#Á"½mŒVš%ñJÛ#qÔ¢±›—‘=wÔRÙ¡ÿáŽ¸Ê S*5âU8µ££¹šd¶&W£B+½ÁEªì§Òã*³šƒ4ñZÀµÐ³¦e¦•Ão³U¦Ž ÒE(R$ºŸbHkÎ/³¥ùcˆ<ÈÕøFMÕƒ;-À_,Ç°5—*b±þ2×8r½¡ÐÿØÎÒöFÃ4$M¶c2¶Ã,ý¡t®±¶»vI Á–U$DnçÒŠ%dmjÁuóáÿÜXØ•ýoƒjJqklÎYóe~&¶wÖ\¾·ÉÑ­•ªõ¥eX‹ÖæÚa…‘º¬}•SúsE:ŒKÛÆ3yXÃÎôe”æõ1Êÿ(w’Õ/œ™b»ñ©¸ƒÜÇé‚µY…Bàh¸N²²n”,TÕ³Jú“9%.Ônu“º5ÿZ3&g 3±âœ6Ù:8Ø¯žÚT[?_)5šžœœž4“³æ4?·ŽÿÌM´êÈ2¬0b3Ö<‰ÓÜ¤µC¾eÍ]q¹ý†jÚ€5Tå`Í`v®Í1?"ü¿ì•øEwÎ™S	rÜ'RëpXà$¢uÈ_¬µnT´ÈÜ¥9	­á“kòš9kïÎ]jzý.,¹Ž;ÊÞZ}Ø{ÞÂ³Nµ *Ô‘H¥#b6³s#²ÐŽŸÎâ}ÝÃÃ;ÉáÊuŽŒëìî3\ÓÏ^tØz“5†©pLùëW£¸^°öcXmÙ	V{s‰øß·Þ:sìÀ¶p~*ÕrîüÑiU©wð‹Ž`Èå>r®rˆ|MÖÔ¨–?¢™Ù]$PŽ1”¾H¢lpú3…¨
nùm›i@³}í8Ð“ß³çÕ†~x­¿û¾Bij2±õç§­ñÅ(dZ{ÃúÔÜ:øK¸¦)kœ×þû÷"â5K:ôö²Ó`™¯à«Ýc°¦C¥±Š +}5TÙ±æ	«"`ÿ¬ÂR3hî€BdpÖL"F¾¢JVÓÍK6šE‹XÈHù ¬Él#JEßï½8üµý#TDÒ»vÿŸ®±ÚšÖ´¦/!¬a¬¥
mÝâ2}­‰Ð}ÁZ\U¨ÓÛ‚ýIÍÊí_Zž?·¯°}Wv×¾cS‘É‹ç3YÎÒ2j2bµ:`-bžšÛÔÏ¼…¦¶kÎ‹géÇ6Z?;Ö¹Þ`»$–Yª­Ÿ]a5ŠT¾¯È§Ÿ~øaŸÔõÖ2¡\K€ÚòÛþ€Dk?ýÃò›¼z9ztÚzÌ^;y’Ä0sà…FzÜ.fZ¹ë²Ó4!ÛÞÊuže¢ØÇWK¶}û"Mõož™¾xâøÑÉ%úä˜ýÉçŸQƒùÛßÿþÊgŸ.~~ý—/\ÆZ»|å*Îß£#5ûõ»Û'‹’B.%;wÇ_kí™åïbloWWžW#¹=ëGî¨9xðÕÜJçYÂ%;&:.ƒ›—Q~Â­·ÜªÞE[­P=–¨ÖÜ
Ló‡UêN“óÐtâ`NgÈþ™#Z„B)øox²}3ãÕ„j°­kÍë~M%$¯ä„k+°¦ƒª#_v¢éé©S“SR_w,/XkÖ ³¤`Íœ56–[¼g¸u¼gd$__¥ÔÉT¦›¿.32¼{ÝÓu™ã5`
½m–bZ0X£	Ó`ía0bÒ°7/òxˆªù9kº¬Ý&Ò+µëÏ·ˆ›v)²LhžÔt/f,@ÍXƒq˜ì3:¨T"©¹jý@›)$’hÌv¶¦aËîÒ|öÏ‹;äÁ=ÖOÄ%ð×X†°-Èl¬mŸÇÁBÆDžÕ²I=æBG6ï¦IÁ}+c]pÖØ<­dO98ó²3/ã9i²nj~^D„v1öŒÀE´U•Œæ±qwŒ£:GŠ»²bŠÑf6¯ë|';Kæ¾Q·X°¶µ)&¡9í ¬4[Ú„µ¥RÍª¸ëxÚî;wÓµñLVâ|·™ÐÙH]dº^á£3°W¡•“&pl*Õ*°žHÉíAÄÁA`íÔÑéMõ‘L)=5xŠúÝé}ûVÆÔqÏŒú„Ár1—Î[³•Áš6¯‹J‚´
H[„$HveguøRB½aæªU¥ÍeBº¥ZŽ³·¯C?ñ™V,««I‚$íˆ’fvCClÌYÓæõ±g^v¨öl°Ö¨ƒta¾kVù;sëj;b>öÄ§RÚR›Ä^¢_kµqw/Ñ1Ü›-Öš;ø[†|Xb¼ ëŠ×¤r)’;;åb2Œéìyq¬³³—hŸ©ø&š¡ú*ÖT_ÿð?8X£YøcÅù.ß4FÖÎœgüÍŽsxkKKç[ZpÖ`5à,Ñ¢B[â'ñeùåŸ¥U¢b“ES€…‘#à†[_²¸s§p­¡±¸Sé6|a}J{±S™þÝ]½Ý¯6fÖv'Gëx$“=vÂ`-ÐšáÚQí')öQˆæ
 y€þ«{¿¢K´dgˆ’Ã¦4HXM¸FZ¿‘šfD³©ý•¡ý_kˆƒ¬tÖn»•ä‚<«ù`‘J_±Ó×àµ
Vâ ÊÊ°æ»×À7!6°\Úöî§jT3ÃUúÀZ´ÈšÖ´¦/þ}g
c-¯(<½{¬GÕq(H-šl„Ö³üöHî›,Í3yˆIMéLX;{s»5zÕìõm1bƒ¯#õ‚4Â½ÕÄQÊ–Ö@Iù¹l…
»\ ${ÙNFkëû×X¨fC°ŸÕdµ‡ÿÙ¥õ«LÅ¿-¿}íÂ²jiûÈÛy'†Çµ¡Ceâ‚¾€¦‹ÊáÔ`=¨äíðønz qæ41N3Û¸ƒµv½fzòµC=ãgŽEâC'O½A#ø¯ðÔ>ùä“ÏŽrå—¿¼þù'Ÿ_½~õÊç¿½rùóÏ¯Z¤Ÿ¯«Q…£ÌhR'‘ØqˆOK"¥}IF•ÒøððØìX×@Ïx×@w®eïÁÙÎÞõöÖ6·VÏÐôU•ëáÕ¬‹Å`4²´i¡-¼¥®2Õ¬E]·«„\½¬†t­reÞÚLHçGZSý(­ÀÜªTnhÝæ;!¶»ÖÑ¢&Å4]M.åæö'ÛÛ-mdÝ°öì_Í‘?ðm ‰ÕLƒ5u:Ñ³Æh"’›×u`
kÂoŸ«’À~¶Uêî•­&„ëNæ[7lî¨­S¸©ïÆ²û÷tæ4´.¬©*´5b¬åTœ¢îWuY?gM#rÖ 5nn0v0ÖÇµ0gM7¯
dc«8ÛEÇ]kª‚ô
°¶£KHŠäàUöÏ¬7-]Ä6s°f»-)o0º¤SR¥“œ£-ý¾à±_±ýY,;s;x¡ÄJJ’íïø‹§íÎBNÎƒÛy?­|¨Ûëf—C$w?jM|æ\µ9-®±×sd­MFA5!¤ü²þÑ:Fo[1ctžp~åg¿	‡k¾ÕÇ³èÂ«³/,3ïX)üux_ó…d±nG(ˆX	Àƒ»wgÓ%¾Y«ü¦q(IH’µ;³¹8m¸Ä7â¾kýšCb)·µõu}]G˜ÿ¶yMµ–Æ'­“ƒe´¶Õ´iz°	l<%ÍD2`XÓK/á«Áj›¦ù0„}¦}¹O­Ó`µ’kÆjÎZc¦š%Œ¯q3gí5ï«±©éÞ¡ŸÈæ‘ùÞT™lˆ+\Wë)ÑDìùýJšôÅ°¶Úf£œXS×Ú¼µØ†X\›ƒÕæ.]š;`°&T“hVƒÕ|òwßÅ+'‚dðõ™[?g};	‘üJƒ¬±5ßƒ»šŠ'†[j$5¯u$Z±‹‘1Â3)UkIŒwtöteÚ
©Ô1ù]&kXCª@oÝ@…ý_1`í]õB+¶ŠâGK$’wÑ	aÚÂäÂñÓ“ñó'>œ?w~2®OÞW ”rñÔÔ£†±6ŽÃV¤ó1Ê$¿”¾
$ó³ Yo¾sÏ¦¤ù¿¯­/™-î,¢äì,ÅÌøÖ²é|æµt1Û,ÂrÑlC7Óó?<]Ak?†Ö~ccçŒÌ(å»pšýä'÷ßÇŽKL¿V$*{kåæ560E¡ˆŒs°Æ‚	5¡ò‹µÊ–5c,vlÄÂáQ{À4ÔÎXíV[›X[`5w3¹ïÃàSÒ7Èwiã°g_±Ð~€M‰ýò%ù«»w-ZdMkZÓ—ÖòqMVÓ4FÀöS!Mh’V¥h"ÐˆÓÇàL¯UÒus¨(²¡!™Z¾y[óÆt„W1ªƒÔ4ì"Ï¡œ2­)ÔUÀZ·ÙR”E*}ÍM‰Õ^Ýªÿí9JA™á	³Õ`5\5" A5{ß“æoOh¶|mÑÁ¾¹ø13Îø¸ðöá‹'‡†' Ÿ	äàÌœ5ih|B¹ý‡‰ñ½™Ý¶:ÂŸ‘f@œŠ#'¯ž™­Ì‰ro›`N©$HŸýät!7ãýÓû7Î½qæó}?ÿäóONÿöòõßc§á©]ùí'Ÿ¼ùÊû—Ÿþª¾7?8T“«vÙçgÎYýüÉˆ3¤‡ÇbÃ=#]¼ÌËz°f÷Žì>ØYŸØ WFìø‹£Ñþ™%b¬õUÕ«+Idô%O
¬`­R3ŽnØÄjZT›u&ùä;aáþ=ªù4ÿØ:“Ñ›`fëPûÐæ´·´³Ø07ç#Fžýö·¡4/°íÝÀjÜŸziz ZéÌ'6tõeú4íºw$oÃPëë›u†©fÇTG,6‚á†íÖEödÌuÙiOUº·O6'šîL%Ó3Mñmñ;y	[“MÖ`7ãB9gÍpÍ˜TÓM’¿¦“Àjz’àîvî,$Ùl³¶-ÁP‚ÉTêèÇdÛœ5;ÑÞ‡‘d£;¬sM†å’
q³ÖvD­Ñí±~EÑÓ±¶E%—¼WßÈŸ©{ÃîlðÃx„f0KïçÑì®o­ÿÏËnwäÆ•B4 9X3ÛÍ;p¼ÑÖÝÐ¬!ï¬ÁkÀ˜ïWÎZeÀÎZ±¤n¯mÀ“€©ˆ!& äåpIMkÃÏÎ*wïÚžLî‚%5Ëz[]iJÏoÕ³Fë¢[·Qå8¿i*ÁVCE¹eiýˆÝ05"¥H]‰Üýˆ¢õíƒkùéGtc6«ŸˆØ—¸P·c7°¦Ø¤RÕ¦©L¦Tk%—ÐFŠQ|;hXƒß$ùj§íÝtôÔ©wÞÙ)ä¦J›^zÇÁZÓàô(Òÿ3"6Ô«M±öÒ“MGý”5î&hÍõ¬•oízÄk·ÌYSŒH9iüó·e-DÃV¶Ú ¶‡s^>kˆ«(Ø\A®û-ÅÆÍÖb±ˆF¿Z,‘ ØÚŸÚ¸aŽŸÖ¡
’ÖS·ÿšrûqÎ%=þô\kmÕº;j½¼»fTÜ=_©aˆ¶öAJ²Äóyû–p¹@§”àGà0ƒ¦»¹PñXlb¤-ïïa(õ€äêÏ­zbó] k_£lV#bØ~¿¨öQbÒ	f‹²¦’Ð~"ûM›Š–:”ÌÏŸZƒq¦9¡Û"šzIuéº…Œª
²¦%Î5:ÓˆQ/AQý]ñ(e}ÝªgÑ¦ì#u£ðh*ÞÙM€PÊ.qÃhÄÆýÔÙŸ´ææ­ý|37`Mö–*Çt$úÑJÙÝ/Ñ e]Z÷B,æ§©‹ðþ/0ÖØ`µJX»mÏš6¯@h¦ jáœýíÛÕP¬†-_Í“Zå0l/i’zÔ,òž{‘€Mß°òúµ‡]ï·Ìþo<°ÆjkZÓš¾Œeù8¬–f ì½ˆA™\ZÓ€X‰Öln5]<òÜô|:2_“†ÉÒc=zãÜþ,â
nšBHxzÁ>.¥€Ò±žW85‘=-´`kK‚ììÉ­wñ šÉu«õ;¶ÙÙj¼Z7Tsý°Ú+ÿzö_	}<ûŠúÕèS{ïäâÇg.|ôñ5&«½7÷š5"æ]Î!ØJxæ«1Ìp«†t™³ kþ(S‰ünÖÆãn@¹˜òðw·t>txlïÞËïO|÷ùë˜h¿ÁL»þûß_¿~$È+W®\¾ŠüwG}'M~¾}	èûO>ôÈCýôIÈ”.”ambxlllvýžõz·X4óe]>~dvvdìÅÖñX‹^šŽhUŽõÀÔÖëàZHôO$8ø[#üCŽ*asˆ«ü¸0­ÚNîôrÍkHki…ÒpÛl£»?cM¾šL¶7óUj4öÚ“OR9Çk8Š Åk²Ô(„<ÀÁ ÒÈïò®÷ËXZŒ<óðK“½#c Z¦3ÖEjÈ Ú3P]EÚž¶¶¬50Ëh7¬3½]n@6okWÏÄ«ì»ÈçI‚ÌdÚF°@šfj½SM[3Rrò¼ÔžQD8,qÖ¯)óÎš8MÖþç®cÍŒ°PÓ¢rï+sÖ>Øµ_ˆCx¿·Ï²qX³£6ç,ÔÑFÁ#ÈÔFnÈ°M;gsÓÙÄqýêÃÛ²›×~™ýýÝÆTÔFzÎÒ]°”Ìòˆ`í¿0Mé4+î¬K7š÷ýhÐS­ÿŠ#ÊfÀÇú&RóæZØŒÏ¼N®àšœŸ³v,SRpGT‰;„a™QTÂÿJkˆŠl£lHº?iÎ_?–X±ZK÷÷‹8çmàZ©´©*’;ÝC*õÈÄ^W¢Mž:ýlÑ?öÉ_ÐTl~‚%yš—DhÖµ–óUAÀ‡UmÝ”'¸dÆEwdJ…L.Î?#›èÆaª½Þ´izzëà;/m-íÔÍž:zôè¾ÑÉSìŒÍ`7þOð¥¥Ö´fÿS„JÈI`m×´k7VóÎZ;ì6¼5ShZÛ$~17Í3X½SÙ_[‰
°8X“t`+Ë=1iÍ&W-Fè‘¼ò;ª:šcC—6\ºôôã/#³Öžåßñ³–ä²]Møjh®eðõKëjo•áZà´.‚,»?."ãR!×Kˆqº@~kÇp-ayŒ¾DªPˆ']³¯¦ë²É\mKK}M¼câÈ@[JÄ|W—HM?~5±°«}õÛ_WÝ¾ï*³ÿkÿøc%‹,kD‹|¸tœvµ¥Kç;0S#“ÇàC£5âDê¢´äùãÖ…ºRÊõçPÐÿzÉî6~ÑvŽVÙ—Îõ¦Ûúf
ªZ²¯±Ao–
Ñ…ìîß²#ÒÒ¢†ÉbíÚß9÷áŸŸ8-…Ùj.¹YE$wŽ¡`‘ïùþ4ª!]ZÀµ¤ûØ ƒ5ŠÕ‚±Vé«¡ÿGËZapm¦U\ñ‹ð@å|5û\×Dj™ý~ÀZ@µŠp‘U¬fVšB kÖž†(TYõ—!oí~œµµIØkZÓš¾¤ÎšåU©è±H¯Z‘¸MW«)¹Yät­ºì‹ÉFY—"tnˆË"<¶Ë5ðÒÇæEt1Ê‹KÅ–´çší0âUÓBåÈJlÿúçû¢`ZpÕÈ³'òE±Úkw?òä¯iV3VûkÙj‹@5f¾U¤¦`sûôÚÐá÷–——½÷‡k®àHî˜’Ç&(òE’‡Ø{»Í¸ˆ»“ m¸“·æ,/Ÿ)vƒóÆã-\"vÀÚÐä5{ð›/\~›‘×ï_¹þ-E~I¤eö#—ž²WßÝìúõ]²Õ`5C5ñè÷¿úÓ¯~ßËpÍYk±Ÿ{^q+Ÿã#ÙXçó½™øÈÞƒ{ŽMé‰«
È¿œ¢’Ö,ºHšå­‘«Q%³-Á#NÁLCá
b«q°Æ±÷'ÎH[·â®ù‘k.þQø&Ùuž£D²™kÕ›74Ö`µt©)`s¬ºUÓt7Îýîw/ÿDÖÌ_ós±Ùqú®bÚžyâ)âEFöMN'¦¦÷bBö¶µÍJdcf’ÀY¹]Í†a£ÙVzÆúº¥³ÕDq>4—llëÎ7M75ñÖþV>©Âî¸PSc³Ék.¹_Ùý¾gÍÅFì¸;»M{ÇkÁY»ÂÕp
#±× 4Ùda´šˆ^3·ôüæ®{ßmGv‹GŠ*–Ô“²~\µr8än{¢>Ç`JKr!ÓYžKOž86<ö˜,DöXëGªÐÄ9Ë¶‰î|pg‘óQZÃŠnÑ:2?ºK)Š»!Eê¼ŽŠÕtw¤†ä R»³feé„”êÜ¥t‘¸”_*¸–TJ0¼2t²Ísué-ýIkXK~Ý‰CV*>¸{Kã®(}nŠ´,Qù`Ô2ûç#¥\‘T–¤¢C’å©"‹ÙVHcjl³ä~Î4žÁOÂÝˆÒÎø ”qyIõU3µ›å«A«ó%vhëÌŒ†w[žÉ<«A:Ú4gmúÔààKÓÑèÿeïlƒ›¼Ï5f÷ã~;ç|1¹]<žý¢©ÖZ±Žã¨v-$ÛDûÄV,;ÆÍLFà—@€<ÃØ)™–iœ›ŠœIÔ&õœS›—˜¾=ÙÔ!Ðv3)K&eÂ©šMÃÙÍ”ÝN¦ûa×ý×ŸÇ¨°ý–¾¤çU²±[ú=×}_÷âlûBñüéÙÉÙ…ó³P¬¶_b_*{iø®æ³¹£gHƒÕ‚ H#5rCiÜ½±VÙ³†³ƒÙ<²j…¸
ÖØgÑ9™m^ÕAn,‹¤Cï¨Õ˜tr5¬ùçk¯‰Ò	ìÚš«›Íí¿´{·hí€ºÓžÛ‚Q.cí¡—=¬5cÇ	!Y(.V°b¥-r›AÃ5a§¾»Tº·K)®±`Möy7EÎ±œê%³]ËSñPjëP,®¬Hâ»ú¨ƒìîÆ’ï›r%°š~oüÆÞ_~ö¨:èÃW«Yáef`E×~"X[™½yqéêOÎ¾¹WJÿìl\ê‰…Cq&ªÑ•´©kMÅ)*Š´ÂÿP2ÖÓÝ0n°‰“ñ<{Í»ÉqÅ-Ê—É%Ãi¼aª[QØ.¾µŸxå¾X,]×ŸØªÖÙ†gž‘¹<{ñŒ±š¯„¼Ê4lÑ«o
ÔþøGe÷ÿæ7|øïk¢2‹ñ£Õ´ø¨¤ZH±Œ†ˆ´W }eä_®‚,'6zk±®4ÖXÝáPðAF}>’U ŸÙok÷
‚ÚÕî„µ¯Ö 6ç¬©€’ó¨Ñj6Güo×XmMkZÓQÿgm P‘W%AhÀZk"LR	G©¿C‘ŽÑ®ZÊ¢¬™ÃF$šL´E&©®AWÍ7cK`—.jªZÙ”×ïaÍ+)Xs»éZ­O+îÒÿ1_M/¥€LÛ7|îÙ‡¶è…T¨æ®zÓÅl`íóÿò®âúß½úùgß¥ºñg~í¥s/×í%‘ŽÌ³íÀî—)Èì÷°Æ9SÊ<ºñîiîÙ8lnÃã6wmÚ Î®ž“Ú™;öÂÉ©#'~{ý…ÿ·ß~úÔSÿî·»žúôwÔAÕf|¢ËCBµî¹9Cµ7l†ž{ù‡/?Ë–½„Ö}	TñÕ’µRK>¦BW–÷íáó0òukæõ}CËµss3£qh-\Ó\åi­±‘+ÏÔ&‘
²Nñ"\ÿæÍ'3»4îDAšØ37.€5©Çj¬!ŸéXÍŽšŒÒœÊ}kf¨5™¥¶Qs±[`µ¶¶¶›¬Lo­¾íf¬}pÔrûÒÝâ¸ÁjÀÚîÝ¯<}ikkñoz÷“#Ò; Xë[ÆmÊ2kmh5²­Ž[ÖÇöŒÑÞ–]·.®KK½MÐšL‘â—ªÒ„Ý7©¤ø`MNR¥³æ£û]³ÚalÙÉ;µ{ZE?â­98ùQØ«VNÞe“§†ØøgP¨'FûªM{ý#²ÚFFØEì;XãÑ	ò€ØJ›@šŒ*!ù:6Võˆ+Â¡Ô°ƒçÖñ‘L¤ 3;µu<¿mÛ¶ÛFúõä8é§Þ23NSk4Î=Ö_Ç—uªì¬½ä¬5€¬ÂYCœ´•á¨¦ÕÎ].W¨>´–âÏJSúUÁ%;i!Ud'ŽlR•X!Íœ»VVÀ-2BhÉ¯¡mÀZÇŠÂ%Q¡$7ój³UüQ(¬ÚÙ‘A£é7ØˆÕA*þ6Ác*ýN3‚¯i$I.¢þ²t±& †Ô®&kË­<Ôãá.íæó*ˆŒFÚ—ŠÅ¥Sçg÷
yj’ðÕ°&DÃ4Ôÿk±•«f7‡k,šsÖÚ¸qD#[	ªSÏ”Vm°\£q¸æg§UÇjÐ×#«6v„{žç<©±ðá`M´ÖØH.d£úQÏ_ÚÍƒÖøÙ}yËC[9cM#î½³¦‡‡^=°®Ó|!¤Ž*GbƒaêZ³?—3”Ej>b/õõ€ÑÖ­CÖ¾y3õ³{l´)žK“Ê”Å5m€Ý\r`h ÛkÍÂÖø‹\¿—ìªGÊ í;Ðš^at5P°FÃwt}–W+Œµ‹§:ã1v“åk=1ÛÄ@5”T$ŽZ(C8k‚8šµsÖmÀK"µÖ\/`¼Eœ¶	<9æœ&êF:¨•ÔÇ$¸vºuko(­h-=9»4;[
n^_Ý·vLû!Ý
XCð›ŽÕ«Æ:I1r79Xû»Û´fÛ½ÒE_­²eMLåzÌî–Þï·ÚÖÜüA°E¶ü9ªq»—¯ÆÍ¾l#Íÿl^¡o\ûŠpºOì*ZcáïHè*r-ZdMkZÓÕY‹%ÓpW‡Vçx1a"/t)^NúyUÁPËäÕ£¦ëð™HX)þ¾Ÿ²2¢šjåœg$õlpÞŠ&Óéš8fžõP˜­¢K‚pHYkI=+},pÔŒÖl
¶5~e~øÜ£jPé«¼Oö*K±!ØŸ¿{ýì»t«Ý˜þèÖô›Wß¼zëšfªÇZûþ9ÁÔI]„¶ZC÷a#*ƒ”qæŠ#Y´6mçüJÍgáÈ%üO»§Ú¡åýË§“ûÆáÜÁ“úóûö<Y{âãÿýñ‰_xñÄSO}ú?þçÇøk°žšJ -­©u÷”M5³ÑÐ£ÏFÆ{éƒç~­}›JH¾FÞûôè »oÏ>8Ùµë[Œí!£z®…žú8‘jö6‡5¥H-¼kÉ +ÞN‰Þ•ÙºFù‘ÞˆŒµòöŽü~Ïh~[¼Ôï:ÒÊ[w–ÃU‹BÂ9­Á6NÓ°¶±­0Èûš­Ë­kí¤ÆÒ¶^´vtË*XÓ‘ÁšT›ýîÓÚvÙË¤5ÁZo¶—*GväªµBhÚÁ[ói#LÂîÚÚðz_<›îÃ‚[W•mEä@kqÆÙf“|_UÕYgŸÈ/¡5¦¡uhyÉ³¨¦DH+y­™SÉÝ'Œ¬*„¬Ì‘*­âö\´šÊXé€sìph"£ðŸ)Ed'+@Ì±9³qlð•ì6ÄžÐ‰­¼.\µ:KûßT× võï Åx#&rdg©<×šÆ#3ˆ‹ÈŒL`¤™àcgM°6¡§L®@k“¥¼B&ýâF,±•(_ád°&^óeZ ¡`Ç¬5/F~Q,Dik¼ñ%	¤C"3^Š¬äÀ(¼±q(
BP6"M¯”T°	ZMC¨	ÑFpÛF&8ˆ”4¢M8†¦ùU§”‘Œ’n;ø¥¦i%ù~i¢_åÆâDàˆ†HbÓd“¹lš™Tõ""Œ?¤ž9ªáÛÙDX°¿ÍœµR¤}˜Gf7Se»8[œ-DJÅS¼ß.k¬€¤ÆRÜ`S¾ØÇT
éæ­ñÎÍÚPlŸ‰ÚÀ3Wé§¬7ÇkèJ§C,)¨ztÈcl¦…u%­éÐN²«hg¼•Àš)ø4Í€Zg#ÀÖ´+ß†­½w‰KXgüŒ‡ÏO³ÑÚ–UU¯^~âð…š……á…ÿI5·?†Ì´‡SÆÏú™æ%+—ItvÆÒ4qX‰4Ñ#=¹øèPßX¼&íé™È&³Ùl×”‡5»ZÆï_Ê4™6ð
¡ýßù°f¬vÃ:Ã~tÆÚÕÎ ·CÐÒìl;€f×“ ¡¤‰D•mìŠû­TrDŒâæyª‚ì™îQ‡6-“º,JžÈÖ^-×DsŒ^ M)—HÕˆÓÔ¯‰­\ó¬1A›gn~¸”Œ¤J7ÏXÌˆ£µO¿©p$:ÃSÕ 5ÄØ5ƒ !Âµ 2Ø“¿öu‰º@Úo°öÿU$÷û€‘@\ÆRpÎ³¤6•Ab5é3û+ûÕ¸‹Ò+YkV×iqý¶þ;ß¤fµª eÕ”Ž‰¹Ö®¶¦5­é‹ë¬Q
¦™Öù(×qÒ¢t:s¥|^oMTøhîYJ©Ö¬Ä^:‘à]\QÉ3snø5Ýö²ëÜ4+h	qä®kµÖ3PÛ'K¿L“öíÃy²PÍ‚E^Þ¢kV£À@ÂjïkXj·€µ>¿¶4ýÙÕÎ3¿>sñ­—4ûÜçnÜxI,t›ÌŒÃ€5tR„5::#ä…Ýj®‡VãÀÎ”ƒ?0Óì!Ùmö)å¼ñ9š§uöà±Žk}âÄ¬^üøÈÏO{q×SOýöâýtXÅBpÊž50´Tëéí•IMEB^‡\jÚs/sZs°6J
‰`m¹vß.tä«ÚnÖìÅ§—§ê!³™íõ÷¹Hí¬´–z"a5ekSÉ%ï&*!=’¹E²S•þª¤µÅò..™¸Kæ›‘×8ÍÆû9lî	ZyÿMëë›¾¼gMiýÊ¦Ik{©}ü éW¿jYÏXlâûo“Ú£,—oÃÚéâ©W{šMokßžÖl|]¬W}½CÆdì©k}¶1õLiöhKSóÜ×%	2ý5›|‚ÉÉ4±´²Åˆí‡9rÙÉÉtuu_ÍŒ¸öXP)_íéÀX“¯æÓûYU–AÞ;¹?ÃÐg^kb1;é`RlˆÂ/@‘Ž	 &Ì£°‘ü€iB£¯Í¤“3V'C˜iJ‘xêVH ß—Sj4Û&ÂèKŽÑúÕÆ&Á\d@RáþÐF– <2&m›Ø¶ä­“„€”&á;u¿%Æ7éó¤7Èlh ‘Ò;k«pí0·—*5Îøl×´¶Džþ6´³#B=ctD´6‘(•t½Hã OEŠ¸Q±–OAT;FKúH¨+3>±-¢¹ÿ+Õ‹HóJQÑû+|;ê9aµ5¼õC²Q¡‰JÚU™nµ:¤~¨’ddR1´Eâù´“ ÑÿÅõØ
œ—»ÖÎÔìŽR«m¶xjx1É;üdh²XœÄ ™…ï ¶áal5'âü±Ð«‰ÞTý8H
Éƒ¶YQš[¿áÊ YÙâœ5o¬©ùè~K§”iµÊ]sG]ÁÆÚ³š‡5OlZq>@¨J•?¸™ºk5ªBMÛßh«o¼`¦3kŽ¢-PÚ³&ûçŒµ'€µ&@í½Ã-Õ‹MöÅén”èQ­R!B†Ü×ˆRh­&”íëË«›-G‚Hgur``¨•©45þ}éî¹±®îXMlt¦§Kíj±î®¡®r¸ÈÉ`ÀÚÑv;VûÞ' r³ÕH‚üÙÏÎØ8ì«¶/Ý¼øa¡@a%©4%uaUú?£-
Ãe(D°Ç×CÂVˆ°å‘#:‰Àc‘4åÀãüÓIuxc£…#(Ú!…CŠ[æÿ$ð¦:ÕpSÉ‹jáí›…P.TÂZúÖþ†‰Å ´Ç—£Fä7mõ°hÄf¬Q‰bF,Ò¶<Ç±šæc±¼¯¦Û_È‚DÎZcå¸ën~Z@l•µ‘<­ÁjH¬V1^í?rÆaW°šT6Öî”5ß(ú–	€´PÒ Y5óàoþý_­iMkZÓµg­OÃ@.*XKb…eR¬¢lGxƒ,<MÜªèÃÈæs5š°j^^…nX9=¨ø­$ç!3É^Í×PxuØH8LòÇÍXµµ/î{½uù˜ƒÕUäÙjŒVS/Á'ŸÀjúíjŸ½{_ÜÇßôÈVxX;ûë3oÇFi,{óÞ¾\yãäŒ/}œa;ÓsZë°”/YW[9qD„¤ŒÈ`;îÁLÎÚôŒŽ\\ç,cß’ÿOž|áÅçŽ|‘×Ç´:ñóŸŸ ªž:ò»ß1ÇúÈ‰G^?ƒbªÙw6?¯ ç}Þ½rÏ¨e*¤µÑÚ³æ·éKázõèÌÉƒqäjqÕh¬ùü{´Þõ­¾±#ûF›fêQË}ÕºîÜÜYí«;›­X©©`ƒ²t¦‘`ê ÐV‘WÐÚäæ°k±ì¬ñ èË›k:ã³96„Cª€´bHGp-¤‹|©^£Õ¨œâ‚µÆzAî=ô‡½ÙåCŠ€ôMk8kk»¥óÞ{åð{ïqÕº@´Þ†\£V`ÍÔÚÛ§\$v›Z¶LÈ¡î–.Ç—9ÕÕ¹.–nÐÇd™|ÜŠ}¦ˆïd:F~?îíÀZ5ÿ‰á9Œ$ß³&V³°XkVÉÍNI×¼³VIlû+÷Tÿ¨.ˆñq"·0ª8ÅJûýf£‰gFˆ+ÜíßddÖ¯øb)¢v´AmNüZÒ¿£µ†É•l;#Dsð2%þbÞo˜àÃÁ•q„á–(´‡#+¥>K7Ð¹ºÑ'$eJ+óoO´q+“À^ƒÂMN9cM¨&9\«´f©ýö(¬Æm‰4mÒÎH¤T(9X‰D)½Lä­’?ŽµÍñM)ÜŸ¯!•f¥0,¼RH÷ï˜€à†,…•²¬ÁåL¶Ò¯®ÅöBØUYrW _Ûq¤#â”Ï[c[ž¦¢tJvZµª
{SÔc&«WùT›7„å5b’q`¹"í¬6€i*‹f±ò˜¬6¼¹ ­È*K¥&A±öY8`ó=kEýo(³Z9¾ß(°`°ö/W‚xnå®µ6wí‰njXskZ¬òJXãÇT…hUN.¿õdµ •Õ:Vƒ“Î_ã¤§¨Êä~û wª¹eoM…Öl\…i¬zïðaºÖ,R°öÐ–-½üòC¬q—.]Ø[a¡iáðBÕÂ…ûª‰ç®6ÝÕx˜ZóÕâ0‚ï™VÞHWÚ^£øµÇW‘í›ë£“¿-™ë[žë‰×Ägf 5ijž‘)J9¨:t]TYÙ"üØþ’ÐþOþù†±š9W’Š!Y®/Í^¿~óìÂ Û“€Z¡ .íˆPHv-RDÝg¡†-QÜm¼(Þ²Y¨Z³Æð\,©BÜ]Ê¥”±œN'!5žx^ŽÙp>8óÕº­¨Áòm’Ì˜ ¢²@¼ÉmZ»®F+9kÖ¹¦kdæšbFpŠ¾Il¿Š$yÀÖ>ºŸab`°"ëÍŒ5R7È©ÈáfUÂZe$7Q–oZ«TÀh•[€h¬í¹U¥«¶*[D¬Vi«9SÍŒ5wC°Ë#ÖüÉ¦¡rÀ„fÖš’2í/äëB×¿YkW[ÓšÖô…uÖþC__iùHVÈfÍk,¬,¹º¡A/êËfeŽ	@ù¨|3bSNÚˆFUëy9{7 —ÍâXd4gWÑZŒ’°6uÌõb9[my™ƒ2ªŸÙØ&’á
ìnlµç¿÷Ú÷>q4«}†n\Ö~¯±j?»uíÖµk×·_=sýT,6s|ûÏ	«@)ü¯r~ãI¶–å?«ÙY[ö¨žjaŒŽÄkÓ1¥ó»X~m-þŸC<ºf;­ Æ×‰á…¥¶ïà¼ü´NüÜ`Í,¯?þPSñ#âÛ4TST?3X7nwC¾)¿AG¥r+¤þŽçd­¹¦µéÑ¹¹ù®®©Zê(UÉ‚Ù ·Ú]»öZñŽ€5]5wîZSp­¼šÙCºöm"ìtVLºÓZ[…hþŒÉ0Í6VÓ6ˆmkGi((”­µ°il¢}¹¥‘akõ©ÕÜ¾žSëš Éûê¡? CÏ](Y;äË ƒ*ÈKÅâásÅ+ÅÞ±bqLù"6;Ýgp¦œ‘eñ™?ÖDeÝ--{P×XSS÷²’HtÁº5Y¬µRfÄU‹dº5[˜-TÕ$'WB)6’Xsò¸&.[Ý´F¤±š·Öt·€‘»«²Wm0Ø'û£ŒR~ýç°æö­G"ý·QçÀdC#œS™ ªõµ³ñ°ÆÞ&±\¹œ°K
©:TÖ¤kk›h EÓp/C´d`-\l{”Ò©ÒÊ ‰#Â	>&¡R1:¨>6HÍ±°–#÷¿/±qnÎš­¸[$ë;fbsãwÑšÇµâJ!b¬-Qc(,‘ƒ•¥taÞ»4›‘«`ÌtDñDÇÓƒã;x°Y‚˜§‡1kÚá´‹Œµ”}ÒHHÎXT°fw~ûÕ„˜†­Ø¤•(3²X‡: š!W„·ª••,%˜¸tíH7	·3äúTqØMWËØ¥r‘ÚPÕÚ7°:úOIegÑd*=)síçnkí:PÅl±€µ¦sÚ¬q×"Hóe²Õ³©8R¨XkÒbÈªˆK¿‚=¬‰Ö8((®`5ZçÎÓš;åD?l¹ªÚF<vrÐD¾+éLë.ìÝ{ÙÌ5ÁÚePÍéYÍÄ>ê¦b‹Õî;¬¡…u]ä:kÜMf¨9ä¬ŠÕ„’øž!¢›c¸XÐ4¬¨rÞùù^~Ä	¡è±u(KA"uˆCµ}µ
ì7DÔ7Xº|5¢)S$´ö£¤öÐDknåÌÙ¥HáâÛJ‚¼YpEñ•Ð˜ÚÔt“¿æ1ÉlËe þ¨ú8ékáœ^D©OÉ“)ÂPµœ8OYÊ¡,ã©D]ƒSJuCXuñ%fqŸåËÑýÌO­žÑ ¶‡Õ8CŽ¿ íáG,×ßYkeV“—„•¢á&‘©¬Rìï·Hî®yZ»;«Uæ‹ÀXAde¾H%ªéä½ÂE¸!Ÿ.r÷ñjÖ±VÙ°æœ5¾×°¦Ž5¾#5ˆÆ7*Z»ŸÒGd´Š \ Mä_ÿÕšÖ´¦5}a­w@Êrõ8›å5f“l·ß¦;X‹ø$¬´~‰C®+r
…ó(“ãÔ$.Ókl,³¢®«ƒ2HS8>ÝÓì™?f‚ÔÊÁ" ›J Õ­ößÛTrÈçõSòæUC5Ðì]eõßúðÓ¯ßýõG?{kúêÕ·n\}ã­_gŽËDC V2>#GŒªÆÑ™Àë¤ë=cEe$‰¢4BjÜ$«ŒÅ¦ùHkP©„Ò‡DïÅÝ¨j¥K|áØüÔò‹Øi2Õà4öÐ® Ú®2OÉT‘¹ÚN)²÷¤ëÌGŸÀ9T+¾éIç°ÁpÔB>¸¾'ãÞýÛÁùn•AâÏí³Ï*T3ÕNÏ±ÖL-UÕÉ¤Þlunli¬f–’¯cª	­kéÔÅp(®QclõNëÎHn:ÙªïôÓn3N³aØv`d&3qDŠ;J‹Ä;k^ÇÚÎã£±jlú2V‰•„|·ñ%Cr¢µu-"¦AhlqÕŒØôwäií•KMW0gŠ°Z±±«»±»oÿ‡c]CSC2ÒÔ²Œ½¬!FhVZkÕ}$ü‹ÏötÅ•âŸMw±éUÇúz)9ëkH…ªâéÖÖÅazŽ\.CM–îþU°ö˜:Ö¼±Æí@YìpŠ…r=k<ÿÝ'`•ÖÚøW7¿ï IbïN·ù¨bø!6Rø)IT0£¦©Dó„ŒDÉãØQ†µÚx·M ®Y%$Ÿ?Cì|f‡N?°££šóˆg·£n0Ü1’I@)õf­òØ0Ñÿ>Tæ”éG¼ÅU5Iˆ‰®1h“jJ†´mm¯6þ°†Äk¾cí®Î§í®ÅànI9!ê6Õˆì$²
C)…AF8áOãXGÑÙ9Á ïh4ÝÿÀ&ÍEÖVÔøUâ´Î²öêèÎŽÜdbdd[G‰ß@x‚#|–••–s)Jy>éÿS¬bïL($pK‡s­Y¦¨µgS)é!‹Ð}þ4*o@€ÙinÄù·oVžÈ0+=|éô?â—Í¬µîŸ-”û­ŠÖöÿq¦@…¤K‡d55ø/>	(c}\·6_	iô¶ÚYãŽ±ÆgÍ4"ÁÒùÿ ëÑW?Ú¡7¥Cò®ûÁl¸»Ö×ò‰ùš¸Ö²½\c$öáímÐÞf­=[¦5×³v´\yàðÂ£¸ÐØ<Üä‹³ÑêŽµÀD¶u•Þ(œêËÊXÃe«²¦;G§§îÙXo$½õR7™Îîiíâ7SôÅjÜJs=£MÛ+Xâk4E[•!1VLÃ}xñìMT+\<s±‹—a-&·,©H‹ÙPX¨¦óºI'x>Ö¬+<¬Î¶¨:%i¾c"E^ƒÿFRTmrV×9épË¦˜˜­þî\2Ýà¥f„|„,’Éñö®_üðúõ«græw–Â¹À~ª !4`ÍØL ¢GVÃšB5ó°¿Nä#€Úý,^«A<UÑ½`MTØjÂµ{šk~¹©yØcÇflßá«IA¸ˆcµ»ÎWã›€Õt³zNq(ÆÁý‚5Œ5Ñ**§@ê¯†”•‡×¢EÖ´¦5}ÁË ³RŽ ·lNýiD]kÖê2y»Öœ±Á°j¤æb`Y<Û¢ UyD+¨e|„zÚ$Çm:Ï¹²’=cÇ†RµÊ‘|¤r§d>	Ÿþá9Çjn
¶€òÚIä™«×¯1VíÚ­[ÀÚõ‹×ò‹áÔ•·r?c¦AÖB®HÈ!ÖtrÆ’!§G}ú#.›ê%Íe3} »«Ä’ÃWsÎšE?ŽÂuy$Ûgx? ì;x°~;åÇæ{†¡iítDG/­íCâ+>ÖÓÃ(6!žšU?šv™Dú'‘‡5ëÉgªØÑ²¹f4ùo'çæˆÖ [£À}/zXkéÛjçê%ˆm†ðŒ¤šþUcXÕ¸}{£RL¾ÔI¡mëÊ|æ³ÝLÀ{¬!¿/>[´ÅÛj,Véèåý4¶î¬€®éK-Vi+»ÃjZƒ×šÚ¿~{}SãF}íþð«õ‡ˆé?Êpl5«¡CL?úÕ¡-¬]ºtéÊ•±ïž+Ž5{†º¸õÒ³Ò=6Ô7Ð=¥	Öz@²¾>Œ6±Ú@ss›òü]ydr]ÓXWŒïz`Ì‹>USU-R9U Ö6¯SH¸þ'§ä­kwâÚ“=‰€4ß´ÆvÄ’³VIf¿½{ä [Ö˜D­JÈMNÝïÅ;Ç¶ß`¶Êƒ^V”(«‹÷{´F]$ÐÅ	¼6Ö*‡Ô®”®¼p‘žŸ^/Q˜€Ìø”ù|¿ž]¶ð€5J$©Ã
—2ýô}bJÉ?ÛÑÀ4šm2%,ªºqÎÃB@Zÿ`\t‘°HsÔÞ‡ÞìÛx_°ö¼cµ ò°nÓlñ¼&Ts´¶$>ãKŽØ EdõçAB` *Cð2Já1Å%æ®¥˜»-qÎ&Œ´·;Xƒ9[ÙbvEIwHevLl‹–"˜iáŽ	d	&ìçUÆVÄÚ8'\Ö-®ž
Õø“Õ¬V¬Õ¬¬lX¡4Ôh@Û@6ÿ°Î¯DÂí¶séáÝÿtªÐ¾Däþ¥Yi	­Àn™ÌðÑÎo(8KMgŠ³ÃUª¹4È¢oW“€3ŸÝ/Tµ1bMË• ^ÄÔéƒËvZˆ½ ÖÜŽ=$0:kÍî«,uuÌ6pßõœ
©?¶©±<:±¿lïá'_%\ä‚YkÞY#+Šb	dñ®\xbxøÂ…z{«Ro-kî˜ÆžV±*ÛV1ÖÍà,”S@?¨ñÆÆQ8ª¹ª“ºú).Û ¹±4ÑC}ðO"¥ÄÇ¦¦À5±š¯³ŸnÜ¸}ý·¹dæYÍò«nœý>Â¶R¸ˆƒ5´´rñìÛñØìõ3gÞ‰ÏÎ†TÇoƒ¯“10äÇ,vÄ"q,UÄâ‘£9[H«d…ãdŽÇy˜K~Åj©\4×—Ž¤,-9jóþ&&ráCÒJ$mÀ^“Ã¶‰ŠßLbü&~ÚÍÙYü5`í=.Ô`F¼F²kõ¨i±Ha›Óxl'…Õ;síl68×éþ2©qÞ«Uøj©eÍpÍFsƒÖîj•žš‹Û¢;5_©¥‚Õ¸—U¦µ`61ÈYk
áûäk_çïIÖš¬Ç¿]‹YÓšÖôÅ†5ÊéQZ£‘R)öS"r¶™Å€k/AQÞ¶°Ï‹$–á´{Vg@ô:ï¿ÝŽÑbc°“5£5d´ÆMÆ{ºk÷¤Zë[Mk/¼ Hûƒ'±¿@§çÒlÇjÀ½°ÍjŸ]»öûÏ?¿Uü1¬öùÛ±Ù7ßÑ¤ÓŒ&ã·É
ïÌ¨KSÑ¬“Mf™qœc¹¸ŒÖ3ƒ'W)ÃŒ‹¹=W:y|šÅ}ÐöÆ9n<0?57W{âƒÏ ¶ ÔŒÓœ<ªÑ„7êÛjÙÈ×¦V4‡Ô|F´áÓ¡_>&ã†P¤Ç©RHYk£=‰Y¶¿.k\£Žõ	9kûŽ|ëõ]µêY›n‚Öš[d«šG›F•'Òh¥‘ìÕ Ž«)F$*²VóªB¶ÒÛ¥fÛb¢ýYÛšOuä@°æÄÖ¥i{'¬±ÓR†5î<IÖZÓFÏ5m¤fª­Ykú"[öú	kæ¬=Š±Æœ6¬5ÏjÅáss½Ùý‡Zg‹óŠìgÀ,ã®ÇzºúÀ3Wú¸ÜS?ºgÚÄµl|¨§k2`[fÛkŠÛ{À=ÏL"
))†làmý†a‚ª˜o”	%uÒmg›ª …kºÝŽƒ”³æîÞZs#•^Z¥Íæ÷dû×÷ßÇ[s4æÀ,Hç—Y&Á"‘<Ã*a—ÚØlš0ÒÏ5 ‰ÓÔHŠ¸äb1#ÀšœBÈMñ‰þ‘ðJ˜7´ô–ñœH˜<Ë2Ñgh -‰hT~z|Çuãj¹‚#Á¸ñ„*Kí“©M´©a\íÖvèO(LÊcÓŸ>Þ`_&ÀèXknUÑ°f‰þ¬ËÖÚ/Ðævê#¨Ä¿ŽýéPá†ÜHjPèVÚ–_ÑXo¢Î£ú®™Â¦BMšÓèâcln™ìJv|0brµ)7©h‹…‚ÂChƒcÒ!DéöH&­±¬,òh^ÓÕT-MÑ"·ƒãsª,YªHõ
¿Ñø„íÕUØgà˜HÕ†ave©mfgóæÓ—ÎoØ ‡OZZZ*·¯lÑ´[(³íGðìôé“‚63ÙNŸ/‰‰ä.PcÅœ5dÀv\Þšã5p´Æ¹€Ô¸ÃWS¤	 a©iÍÑš“Ê¿¼Ÿ¶z4¶v½µ¦3Á‹Éïjî¤Î™i~¶5síÒîK^ÕÈ…çžpe/ßAkî'šèþáK¬ïlZ´OL(Ú*PÙI1j
‰G9ÁZMótc#¹"ÍñæÑ©©ÞtßÔüüühwkfk_O¼:Ä<©±ÞÞîù©±ØÀòÖ,kØ2ûÐ0ì×¾«Y¤®	~ÿŒõ«jæ²áey3^xçúÙ³;—Þ^	¹‰êŒÁ6aŠ¡Då|˜ÓÖ`0ºÁ£;¬å¬™-B0
vYJÿSºÖI/¤¹A»t‚«!#¹ì×ï¥èÖ×BÖág2[ŸùðâÛƒƒ?eÞÚõŸþÆùBjVC.§ŸÈú×ðŒ\%P‰O€T ˆ\%-Pÿ'Póª(‚ôºk¼He¤É7­q¿»ŒÒî+"3ÍAVd‹8Aj÷nXóò¤fUFŸf«)\ä~¸íë†jn%ïñïþÁZ´ÈšÖ´¦/|$í>Ùt^ÓtûSYÈM£`Ô¶£9TŸ)æ:S§ƒ<ÜE–¿žN¶¦</ePÎÁZXåŽìðdtÆ*¬)`ñxM,M%ÃcËµCæjé"pqýµJëçÖÝ=yr#Dƒ¯tùÍVs£Õ~¤Á¤ú]»qüÇ+W®}ôÙµOÞ¼rü$içn³î®f-aVkhN›Yàx–8Ëg>"ñÍhFkÜ]9$²IÎÚ¡>xér«Ÿ±âHÕ2Î-ƒjFiªâPí6¬¹F5keŸW+»>ïúo<ømjùÞž0PÃ¡‘WóÊ+Lƒ^cçyŸ~yZÖ„¡Ý‚µ)· $`ÛµojyÚ77S?=Õ£üìu}¯ÕÍó–Éü5ÔÂ›-_Èd#‘:ïhVD‰cð.-€5¿5,óA^¾SÍöOóÑ"kª‚ä”ÔRÏž<µÆF­…æü÷n¯gÕÖX¦µËxi|ót· Ëûv¤híÒBOoïü¹ÉÂ©b}c¶o~~÷Œ®5ÂCšúðÒ† 54ÔÓÒãÂ!¥V5I°F„$¢2Š·P5ÄÈu=3¸ó7”˜9mƒ…Í_ÚŒ·–m¨K¤¶ÖÕ‘0òÖó·8kHÎw¿Áy\S!äì0Viw–7ïCk€Ñš'5 Ê5¬qÞˆéAËí—‰©	²€¸	qšÀâJ˜ÄøLš+#–ÖÀ¶vDRýdpDÈ1X““”#ŽC6#¥ÇKãoM3W©0HØÈ8‡“ãú)gôu‰zÈ|iœ}æë äÛ¤·Ÿý®Œ³N_‘F·™³ö¼±š'5P{ ;re†kÖ¨½,E#$àÓå%ƒ,µ³ceCd$?X ˜ò‘’XM™ÌóC™ 09®Y„d?"Ý0Ay$g;úS<2¹‚
¥ˆBÂ%Wc9âbnÁVÃB>	“Œ´JÈßÀ·c^ÁH©=¯FÚH.ìP”Èðpu„î·=lÐšÓÀ™±gÛÓòÙÎÓÀÆV›-Ï9-X;uª¸V27@;¿@e¤§5îíb5kÏ Ê ï°Ö¸™«æPÍE÷¿áiÍPMzë»ÍÖ0­Ø„œ!æ5ömë÷<«y*S_š{T;ÙÙrÅ¤S¶á¹k–ÚÏ|ãÂ¥K‡U!`ÁýôœÊZÛòè£\¤ÂÈr?Í—•êéü…÷×¯Î£ôþ•¬Åm‡À¤Pu'kåB¼°Œ¶´ÄÃÌ+ÊzÓ­Có@&f6Ôåúú¦¦º§isñ,¢ ]ë°~!+Š÷ÑË—p©ŒBû6T3ýã±šÅö£«³ï¼óÎÕ›³/¾sñb'ÿÊ‚Äxió{l€³X2”3”+*…Daùr¤œµÁÃl"`."ûÓ,•ƒôBð[ŸŸ$ÒHœ¼ÿ./è÷LhGiq!Íœz2!5Yi®ÌQ[ðÃRè9+dû«GùúýÊ€äÎó8¥¸~-Žy2´¦âÀÀXãîµÊk÷†5¸*³fÎZ°Ý»Ò—NºúI;ð¤æQÍ‡ö£»¡š7Ö*mµÛÓ½ñÕÔ³ÆTì¯à#ª”€>þ#_{øc3~s-ZdMkZÓÞYÓ‹ öD_«Y«š›š¨™F#›ª QJ%Ž”fä8HÝkióÓ`µ”ÍÁÎY>âT„ñ³ôa+q¦96Ea ”fÚ'ÁjÀ³ÕÆ`5|£f®Ë»ŸaÜh5KçºuKÍj]£ò³O¾{ý£kW?ùä3Õn\¹ú“³
‘™¬:¸Ú~òävŸÒI­#ØŸ!íó$íó,ž½7”ÀÚŒl5pF[øq¬Hé?øÆñ©]Jê—­¶
Öˆ´¡qžÔ¦ºÇ˜‚6:Úøåz…?~›@4½YáŒ•<òÖÿµçùük¬¾ƒ^ÓØ†½†!ç­©³gŽ Ië/ãš€þ¸©1Ùl»öÕv±7Å›¥9NŒµÈh#`d6ôx0
©YåOëZZffiX35Ë`«ŒDÁ1äµ(:“Ëx¶è¸ÌÈM+:ÓüQ knWÍh-¬˜®ÆÃš§ÖBÊH“ê¥š 6PÍ¬µ{u±½íèŽ¬=qkM¬ÆÑðrí–µVL·î;]èiYXˆ·’÷ÖÕµ_¬o¨§Y±‡z9?]³©9DkhðùÔGÆ@Š=`Y¬:›@}]‚µöÂØ~ŒŒD¢•ÿ8ÕnU½°G©[ƒè~Z³¦µÕÎšïç¤nÜõ´T9›ånùýÿ:®h·ÿþ8ý^u_Ý”Ï”g£ª±ËÖ`Íó7IòÎ`5œ,yaªsdã'±¹«/™ü„>XŸ„r?"ê¤þTþ«ìÔ¸úéŽ„HrÖÙŸR‚Å¬l¥I›t†³Åš¡a'Æ_ó$–Ä„fe''Óý„Ýï„æ,b¤?ˆCá•Ððcï¬¼Vi¬‰Ôd¯™H±€‘ÂÎ<n™œ¬ô J“¬O¾c)?¢hþT>Í?ÌÄø¤+I|çýÀLhÇô7ê%k#*°º~Òl©ž¬Ñj"8jšÒîØ‰ô-—ïW&Ë6:Û À§4t’JHXrQ¾RÚrüaµpõ†ÍäˆT%µÉššÅaõ¦‰ÎŒÚ€5QÂbæPûì—˜°Æþ¬vúÒ)¨L°f"MrX3Z39S;v¬‰Ôäªù"HŸÞ¯2H³Û¼³ÆÝœ5ÖÖ@-âE´ãÁ¬Úï•ÑìŽ _ó\åºéÿ!wNÓç„Yqs‹r6÷m^×´0¼û€I?Ûº@u{@‰•A
Ö.ý§ó»/¼w¡ÞøL˜æÇ@JZû­ç5ç±ÅÈ1qÉ…©•ÓÓÍ¡Ø4Œ64”NõQò8m]^î
…ºº)Aç4‹'©šîêî›ŸS©}}kBÇ'Ÿ|ì—eX#lØŒµüÓ°	‚tE×Ûã³³KÉd©tóâ;+úŸæqek–Ìr¬)$Ò$³-ÇyµAêÁœ¬µŽH:‘aœiŽá˜h‰ÉkÄúóâÉS’É¾Ö„&j«¼’è}ÑsÀO0’‰tkCb|?°vF°æ©w$ØQS®¿ö›Ê!™ÀFˆˆ±™‡µÇqÓL–á¯í#NÊ³w¸†îÛý¿X%˜‡mØV¡{W3®šaZe$²ÕÝÛÕPƒÔl	8ÉYÓ,l¹j_aaWÙ*¤A
nõò×k¬¶¦5­ékÖ¾2bëÖtv ÅÛ<ƒ5SÔH+ša7!e8Ê»žj^NœÞr)ƒ´¯ e’ËéU+Ê…mŒ‘ý¿ìmLœç™ïW:_÷Ãêìž8‚X£±¢huHÀ LÂt&:€fÈ$Ð ËK6šÀ˜¼Ùq`ë$Œ³à:/Þ,«8“®¼œ:±’b;®zåÔq	&m…RW‰w‘š(•|j©[¥ÎïÝsûYûä|<‘¸æy¹Ÿ{†˜ù=ÿëú_<‚$µ»â£7(V5w
1aí ;Lía5B5ß˜üí«ÎY„6Ø˜@Zj
uï?~‰:µ/>ÃUX»özêò¯›|}rêó«—.þüòÅi¬ÚLMÌÌ–Ÿøí›3à–ËoŒÅÞÐ\šm˜¸q7OÊÛ8u­ °±pŒ &Xs1³>›šÚý³Ÿ½D^bî%ó±Å)^²¶©´™M?"Ò¶;¾û£W_}^]¯Õ‰@-}&ŒÓÔÚG.d¬8^¾¬lÂ5Ÿ
i°Æ“ãß'7pê€ƒµ}
êãvç:`³Ûr»!¶ÎÛÐ×NMJi€ÉH,D[‹¦R(fõJNªóýkùdå=·Ýâ>‹	É<™•Ü¨/6&X34‰y»~hmÍ¼8Ïm5õušà¦¨ÜZ/T«³tÈº[êwÖ°i¬l<-ãþ]‡)Y{‘ñË”¬yZã²¼s$àŸí™g>Êvå²ó­õGçñ8ïÌ´¬uµµ‘õà#’›¬œªiuÝ±Ÿö°6 Zk½eS¼¥†³É†þ†x²Ù¦va||:1Å»8ìï”,ÜºÀž¢,Â`ío=°	Å„k.ñ‘›%Bj´Îc„8æ­8˜ó÷h‡uâu—=>ÖFËÕéÙ[þ$pc)d?jÐís9k«¶ÇKCÃÍéî»»3Ã£Êˆìf¨9Q]€µÐè·h*6Zhïßn0Èo:†þÔ7<Š.†¨ô-²–t¿º?¶ÑóYÑ$JxØ¤e/\DslP­ÝêÕ|Šîè³ö‚×Ö|L¬¯Z³Ñuw¶FwyU¥%CÔÃAjj÷8:*Wýò¡49Œ‰!¥g¢%*2”1=p{uÒ)k£Ìrþ–$VÇiJÈÐ+\¶E†(a8•=¯‰yœïªÙûU¡¬á¬¢Æt÷®ª­ÅT‘Gh.ÏËàñèbŸœõÇWKÕ –“ÔŽžT4-Âh>ŒÛ€¹%XíÐo’®F^¤Áš×¼ÂÆb;ÞýÆjÞ_P¥±³†Ø,6n^Vó¸æ"/RÓƒ~80¼
¨M{°Ð_d^gó_¢™ë®Ñ_æFÒµ{"ÊŸœº£¯<:1vxlY°&¥\ÊÚú>kO.ï8º´2qz‡%eÝof­+áéÇb)¡$&ýšŒÖqÌ»Jªm Ìz#HìÐZç °ÖÇˆÉÛ¸´µtk°õ¹ÜvVäd*ã.–½óŽÃÕX$¬©)öqV² /æÁÂ¹?žÿòK`-¿¨ë‘ŽÖl+6s‡VzFpž¢5ÐMx¬®±IP‰è+ÛœnMyÉ‰`M¾×lzº=(rœ
Y‘¿ié>ôÞj»6ÊŽó/Ÿø75Qf†„9ôßßCRÕÔ%›yÃ‘{=ÕÏ4rƒûÍ¼þ.\û‰{¼´F8ëû6Ä¾¹½ˆÙ‚°ÕZ7O~´_¼¤£µø@ú(²äÆðt¦¶jAÜ)XÔPÙÜ«"?°¸…Ô°Ù`µØˆøÿÖdnYWÊŒïê‘šuÑµŠ4÷&DÎCs	Çã-$4&ÓrîƒjqMÑ 9)çôeÊ¥¬a6¢ü|Z„Ô4¡Ô-FŒŒ°€k³kI2û)›d5™@îIÝZ)HW­ÆåN/« ö%®%ž‘Wÿ>»zqròâ•Ÿ {Mž»ðÙÅ×_V3¤±˜öÈ…Næ¨K:Ú”Ñ˜Ô1 MC&%°qZLOë`ÐÛš©Y³5Â²%™ŸÙ;Cìß¦í9`JÚ©SR³ªÁiFjúL 4RûÎóÏƒj$ô-//ËÒö«|ôWV­æBÆúŽ_Öˆ5©»^}s°†Vk¿CZàÒë`Ÿ…|ûwïó²»ô"æ¦ÚŽ˜ÂfÊZ™ã³ÊA;Ñà6˜­.UPÖ¢î
9çD×§<²³Ì	rÁhM¦Õ™`ÍÑšHÍVËõ‘NÜ›oq¡š5MÕÙv“î¯£fm[]Ýà®]•ÒÖÆ¶Õ>½ûþç–qá•`íÛk‡‰‰>üQç©ÜÊt¶þ¬û{QÔz»2Õg'm[±Åª_×”!©žjšÖºbe=ÐX†rFRdCWoÉBÔÜú‰Î®®;Vn­ª]k¯Îý¬¾fÍH„jL²º Öú‹Óƒã`Öh­ßûÉ¬¨¸›fwjº—
ÓtÀZº<}ÖÀ²4;}ä2*­É0Jvü£dQ>Ä(1²› Qš°¯»¥jœ¦×öh(àùq8ŒVÔ2%ø…û%•eP¬ÂkU÷ŽcÛ1Nðe|ïøNå=’‡IùMœê7ëÇQ·=&‹`Í@M‹ïŠm¬¶64å½"uÂÚÏÇG¡­tù*õhVEM•K¶ À'Œ¾Æaš9Ü"Ë›5¹^¦&¬ƒ¥å3Ú±¥µç‡-7Ü³G¶ R°&£ÉU¨«lU=–±UA¸kGWCÄWMïéQ&fÊZf(™ß%{Öšø‚*Ü@¼¨f^#‹Uoœ¬²ôHŽ¬a)L³â5íO‚iMäFR½f<¦1üf´æaÍ»ö{Óþ@[ƒÜoëJÖÕtûÈ`Í÷›ŸQ&XRuèÅ6m‹YèÌïY‹kÖ”•xý@W€\¤ü¥ã×ìš8½ôè“°Ú£KËÖ>òok„g5blùðØÒŽ£+óNßç¯‘·|tk1«m2c‘’Û•bgÄR)k*ù®­Owöö<ÜíÈ¡´ç²±¶ÞÈ––ì\ŽìhPM·9VëHq	Mï4j°ö¸™‹ÐaÍ±Ú•+˜‹\¹tÂ…¤µi²ûÕî:Lq$ïi«Ö@- µ`€¤Ö×Ø÷‡Äj*¬ÄÒO£•ÅûTzÛ‡2îç9‘L¤I†¤a\uœ1Žfü`‡Ad7@Ø½mº4ºç“/ùQúäßß‚ÐÄ^ÀšbSÂ†iˆT#”6hì^8MžÜ-VP…y™BÂ1êé7ÖŠ*ÖnÒeÍËäÆàëy-À5Ã¼@YÓCQäy]­(ÒhíNž’A7ò %Þ£DHü %¨IXãeÃZd#6b#¾ñŸþŸ©Ö’bÈ*fÌMÄÑZ"ãÝÑ’ó¡0`­¢"á`·$“L—*×ƒŽDœ	»ù2õ2”\sÈ™‘jÕ:`‰–pi–]ûoÛîrn–i5›VûÅÃÿò‚¯ø&òý«W.žùÕg.œ½üÇÿûÚ¥‹|B±ög}~éÃ‘BËjA•ú¦1má«Ó,ïÑî ¿ègmÖœÅž²fÆ!œB•k[o."Mm/º–u½~ifD¤±°º°„NóI±«·#hjßýî~ôO*®7GÃ1}œ‡ÔEj2‹~çeŸ3fRw ¯]§5YB¾¹­Z›kÃ4Cjän_´˜)¬ãÚ=»'+'QÙ²•³§²ä?¦d_?h¬6…qiIý`ª,…½¿"
Í•AnlRë`­¨3¶Û¹p fžþ…²´Í‚56·~GkìHŒ‘1ï¢¾Fg‹ÕkuHl<±m55¬½ÙØxúô•uu»–¥°¡­Y£5mþí{ÏÌXdÅ21ê½1?Í¶µµv6<Ý‹/vWk«µÄnk=…–Æj%k&«ÑTÓlW«l"#”åñ“ïél€ÖÊ×:qiè‡Øµë]Ø´°C£v,éÏª#’Ö¬Ñšc5SÖœ¤ƒ8ßkíÐ³ý7‘ÕXmÃM±®Ñš÷­‹‡5Âsr â6
¢)íQº›B¤6$Öë†Aìdxnø1æém¯i‰iúÒ~ü4kß%¡U­ŽvW›uds¡‘*¶>5'C[[m¢Ñ36þ«lrg|»úXš`£¡´{’ú&LJÔDümÉjÒÊŠ¥5/«±X&¤Ö¸éTk™Lßb]L¨6êLöIE\]Uª¦| yvÃêS0¤nÝfãˆX6°sFdØ2iNJ@htla†‰R¾ÌãšXÿq‘jy?’Ìª°=>ºSåq2j¬íL$2ìÆçÎç[ø1Á¤iÇŽ¦ZÐ¬6PÑ˜ÀiÄlü×†Xˆvè¤%HCTÓâC¬ÐšÛl½²v^{“]ÒìÆ@´Æ| ¬AiÖûÜ¡¨`­`Ù/eð]ÊÐX›
ú«± -èÀÆ„z»‘hŠ©:n©ze@ÖÉÀ?º¥¤óþ±'ŸÄ’¿y‚5)kÈjžÖ
R9—_6/,èéÈù¿$ÔnÔi­@–±º¨ŽJ)QÉ¶M¦bÙ‘»;Z[z;ñ†ž–TåÔTÖ‘J©E÷àT–léÛŒÔ´za­þöï¾jºÚ˜ê¢a5ý¾â„5å@¾ƒ¹ˆõZ»¬†ØŸœ½x¾ŒögÎ›?ÒÑB‚c$‡¹…ÕÜÆB6"ÍlÁûŸàúÈÖÃZ"Ö°®Qh×RÑZZš›ÌGúÐÕÈ¨ÔiI(qEb1WøSõå¿â™Ú£$Hå;*ñño}_´¦",J²À7Án"žÑ«YÑšúa»Ð £„=®}¬„0g¼o
[ a_vÂ_kqÀæœEŠtµ5Â‹¢XWÓÆhv§´4¶¬èhìEyy‰ÖÔ›Å<XùËVÛˆØˆo «ý¹X­â•í„X-Ž&–Ä>$€5BYE	{»K6cŸ¬VS5¸ë´šÐ{kcÊÛ`7ÁZ×pJ±5Lì`¯ãrúag•ý˜ìãýÓ‘ZAWƒÕèƒ]`5`Mö\ÕÕ.Ÿ¸tíÊ¯>¸ø“cÓ^»töòµŸÿ#É‰ÆUãSHf@Å@áuµA€™VÆ• É¹ s”°éËDm¦ÊÉó_ÇŽÍvÁ£Ä0†žAO{ÉÑÚ~†ëÜ™÷/g®ÍH­MM¤öOšP/¤ÇyELŸ½Ç†Œ^çË,/ó)ZÄ5³ùmã621ñ*Éí«‰ÖÌÒ±š¡ÚÏH„Ü÷ÔÀìäî§n›šÝ·/§ZÿÙ…˜J•mÖ¦¢d•\ï’T‚=¤`M#W¢R”üXÜÛ`ÍÏ@c>r¬Ù°NºWíÔ 8•´˜'d=ÎÙÛh®†nHÙÚ¯oÝÔxúÖåÃäA.«fÍ…>Ú!Hª]6Ÿþ$JN¼>0G5ä	ì¬ÉZ²Ó±ZëLÍÒo-EÉÁ ¬9‚ ÖZ“ü¤G"==RÖ0'éìäãOW¼¡K°–ïÚ9ÞÛ3žïï‡Pk¯ù<H¡šÓÖ¼{¿[³Ú4+¨¬í¹1¨~ÃêPìÿÈ;‹¬¡5‚M03Ú<,EÉ@c~”_cæ¹FÇÁ[£VÎÆd÷}™¹»r¶µµ·³…Üà¸Q4¦…2L=Âš2“Å@X¾Ú_J„Òö²›€­NÎXMC¹±×7Á’Å5áÖÓÖ¤¬9qM«uö"®O¶5ÝãC™f•ö d"3b´z–rÍáaŽ‰4ýÀËxÆ¬ÈhÖÉ?Ó¬‡T›ÆCg2£>=s¦*ïB[ÊÕ€¿HFkÜ0§/‡ÖV›á±Lw\?ñ4T³|~ZY÷§ãPÔx?MÓéWÍ8_uæÖšÌÒ…º«YÃ5-hi¶_9ÉÀT5‰kó4Òfä1-ÐÖ<¬Åkú1™6eM44Ïg…ò?ÓA—5ÝÞªk$Úßeï©0È)#ŒÙ|¹ªuNóö‹„‡µuþCLønØÖ»Cw6;ê§j¢øÎn•ÀÅõ!º'®`hû¸„5â9k®hí9	’8{,×¯,íX@›3Ã"³þ"X#Øƒl5`ÔÖ1émm‹ÄjFFÊÚºzúz;¢#3³ssûsm©XK”º‘ÞÞNÙŠPî›#R¬¦¶›ÛîøÑž‚5~{ƒ‚55òü¡g55ÉjÐÚÙóxA^>ßRð)•$äÆqAKQf²±Ö5Áƒ5j×ü‘œVñ‚Ì‹Ó†ÐwG‘Á»3L¢›ek(Êa,M[Ì¡„ÙbÀ0çTë
Ó³ç?ùòÙþèN	koiŸ>rß#Ÿ¾uÿ#€Ø¨]»óÓÚè©ƒIQó¼¶>m	Ns(Ã5Ê»‹æ"Å¬¦(Nƒpík”µ›öû†Úö@Å²Ú_6AäÍ| ¡4Dµ‚_?ùÖéûN½8¬ú™¹S wÏzÁøŠ€¸6±ñÍ`5`­âÈ+¯©®~¥‚D2Ãp¢ŠëÃ\†E²š`¾C[¶@]²é¿¯5Î†i®2eÕTn]f†Åó¸×hxQåZEß±6AM®%+YÍHTS#ì™mt½	š«Þ?Õ˜ôøû'h®öÙŸO¤úðòÅòæ»©ÈïGUZ50à²-¨6¬­¹ìÇÁI6SS°š)kVË&L4d£Ð½ÝÃ#îÒ#ºQ,ÔBŸ4íÀÿñ3¶˜‹xMMQO™ùãÖ&•·¤æ|çåõhN"¯xÑ¦p´öCÛÑ›î7§‘@\kÔëüÿP"s”.kôY#žX»™ËÝ69yÛ§¦H~Ìí›ÄG›"ê.ûî¶¾™m}Ê®–k%tçqÃMò	êÑXˆ€ÕGH"êÎ‘»HÍæÍ·o®¿c3_ £ÕS¸µÕª£«Ûõë]ƒõ§ø×´Çû=/¸që2Í±MW#ä%·ü"Ål>¹tréÝ~úÓìž<{³b4¤±¤öØöwfsÒÓÙš¬ÛG{ÚMYcZAø–xoojG}IK²½½«u@zZ'•jªaC:Ùc½­ú»´AZã³Ñ9H-h´tÆfqkØç¦Yw#Þ¾aúcÑdÑ½Ê¼üÍÇÊyò A£‚ømFýÞ`dXÐ¢8otˆ-	Œk\oÙ.Èq†ý‚µíÎ‚D¦æ™¬Àœ±ÁÚcCÃ£ñ%bæ"¾ýn„«fr/¥•=8lÚuq2Ÿ-ôm+v¦G"yd¾°æ\ÆYÊË3ë‹Öt[§¬©)¼´–WÎîw¼ûþ #Ü©X_1Ës"F;gH¾*(p¨m°^(Ä#Hjë“›“áÅÅ²ò×`¶²Ps9Ü'÷ØnÑå€fðL!mÑµ9ËÓ<-³%“ÉÌP¿êÌú“S’š\Ý3/9Šó6²íl5A±Ä*L;¦Õª±zFóƒüô¼? Ñæ§Íe„3…iY‚Û ¿1®q['¬¬EJá«Tsá‰L;S×|è´5-²-¹ÌH…‡5?¶×UV¦6-(Á™R7.ÆîšP»HU¬™¬¦•ÆØk”5Å¨¶²kpìñ¥:%aG}£îµòÚú;Q]ª$Búv¬-Æ÷ï¨+káÿ§·¾žÙÎ¶’‰àÈgsøÄ¶ôF¦È¥ˆ•fÅjYËtºÚ$—ñ¸Ž†ÙÓ‹Ëü þÂ„µw,ò«¯~xåBÞ"®^îÓ_;öÄñ³y2G!E©Áš›0ãGq,[Ô|÷ðÀš.G¸ŸÕ!$ã4’p˜¹¸ªÙIºi§9SUo&ÛQ¼–Ö¥—xC\—•âñ-÷âÀöÖ§÷ßû %B~úéý÷Üƒn&X#ù”?¢P±æ÷ÉY'H`TH(£Dc6×Š]û‹aíI,AÍšØ×(k^yó¢Á°ØZÄPUqsË~[X»“aÚš™ŠhÄ@Í
î¹‹	â¾û`æ!’C7¬E6b#6âáÛÿç§OZG*^9Ò?RA½³,tåN.ýa›`H”‡KÍ±Ÿù‘öï“Êf<fá®:k
‡qîÎæ["½}á.Q—=±4ÜŸÍ7rìÏY‹R×õæº¬æ.vÃ|uõÌñW/ÐûêÅ‘C?~;5yèÃCdðSdðàä”#3M3skqs¯‘Ö˜tÙÂ¹ƒ˜â,IÒÎÖXãËä.é
×ô`©ØiàÀö„¶ šZv¶c¤æ óPm©‘üøB¡>+äw²p1÷=äºÓÔ5Ðî:­íâ9Ñ›Â¾Ü©ýæ)qí%­±ÑÔí‰§žrÄ69uŠûrÓr»;R%Ñ¬Õ§\\™@º0×ÊFþ³˜sñþÿÖnq Vpñ²a;ûš Ö¬5›°l›¢²òÖ[kê¨aÛÖ¸kë-PÛà sÌT¾ÚØXYwZ>»~Xûå«w<ÿKÓÖ­½ˆ-þß‡Uí÷Æï>üÌ»b­{²­Êsdˆ˜Æ ©h9–l+€FWÜ†ê#2yÚQÙH{¬«Ý1¿£ª—z5¥«öç«òã
™‹°#€5­Âµöös¯½†²æX3mÍ•§Ahâ45v¬iíaáÚ»"°"Sm7­f“´¶óc°Ç¹8zZó¸&Vó°6 ¬EXl'÷Q§ŽbDÙîðŒüD«=åJS°µ*U•4é$<‘nÚ!ùÚË·Nçàào~%¸— Dpšá_åXM\VQÝm“ú#ÂžçÁ7äßY ÔlÅ:ë~Ÿé‚½a›/XãÆ‰¦­5™$Ñ,R"¤éfC–¯ø HÖ­	âk<Oƒ5#Ny`¢SèüD~¹GyPjÍ!ˆ-TÕDÐ“`q!‘éIŽ"ÅY…-åhÀZU^Æ"=Éž¾Õª|¿~ªjñ	eŸ_$cÀj¡Õ={	ÒÅaæ+"áÌ“š•}¿Ã3kœ(ßþ7ždR¬ÆFÄ6ïølœU´Æ3k'çk:)è†ÍŠ_¿nÚ®9UÍ	kNY;÷k%ž§ä×_Jxêñ8Ä]î·ÝFšô¸äŽ¬>ýÑöšbaÒÿÙ ÖÈxv&’Q9B6ž>üøÄé	µø—??iÍßÃ’”5'®m­_kDUã¡<¦Ù¶èy¥¤hÔ¤êJbQr[ÛxIÑ<úÓ‰Þ´=yDRÃÆ¯¿Àl ¡/5H¾ÄH¤¹=§À:v«}Ãá‰ghC|þž3í7XÃ]Dœ&]íâ±³ÇÏ7-ž¿|ü“ÅÒ 8-Dî?¡séÛ,
(¦¹bXëië•¸¦0‹›f¤ßQ°-AŒsÔøÄR¾ü$\ŽêSA²‡ìãíàÊÎ«¡=Á›ßÊÑ,£$È?Àj@e»O°FÀ'hlÊ‰|  k	]¨ÛÂ$Qg>`Žö&±É11€5c!ÏjE°V,¬9}Œ%HküÁ5¯«±:N+f5–@WƒÓ¸ÁÚš‚5-"Oo*r/¯Ì’PgpµÁ~ˆW©Wï=ÐÚ_ýç?ÛˆØˆø°ÚÇ¯Ø'*¢½çà4Qmù‚µŒy@&2î)DÈŠ
ˆ33ÇþDH6 Ó@#{ƒ-9FSøQy¸‹5lÛ@š9(ºaKäæ$«	Ž®§@¾P`µ÷ ˜÷¯^¸pé¤vélüã×1)QyœÖÒ2‰æˆLQG˜$Ì?£ÆLwy{~c0ÓÈd$2¥óÉ¦:Úœ/$[í 8·Ÿ™äÑgôÊ6Îìi÷`M„´&ýqßn‘ÚŸÀNçg	œ4þ—þ€Ô 5•©AjRâ4K¹9ŽM4qé’6Ç™#<®½&oÈ@[Ósšùâß‰½#»í»«pÍÃš‹Ý“si–=UY?ÙªÄ§gÔ6(m­®>Êç©T¡Ú„â±’h]ûÄ(h‚[¬¬)ØK?, ÍÄ_á7;4L³ÐhsÖ6o«¹¥nsec#¶"õì¶ªÕZ£žÜ¶z`íðéÆÃc(hªZ¬ý>°î×¿#¬F,=ùÌŽvvuvAZ‚´êÖø`Ö ¨Y e]Î¦ŸUb5îu¡™Þ[jwìÉãþHíÖ’RÚÆ[ŸÍYsìg™°	Ô\ì$Ò¤5­ë„5nNU³›S×|·5kE<vÓîØÃ´ÖŽQ‡ƒ5§­±“J…l¦€›De„°K÷j¨ú,yù«€«"­ªS{„tBŒfbšÚ®UèÈÈÏíEZÎë_s™°)Páq|H°å€È$Ï1zpˆD©Zé«qí'ôœ#Qm£'g[± gEzTÆ¾fín>&ü`ƒ®æ”5-Þ²	MÝK2y”¯“iê™uÂfz”—l°f4+X£ÅÿÀœ ’†Ý^L¨œäIP-$dkªjbaÍÇã”¡ñWI	¨UKZd2Ÿ/Oô‡Ë€5Åê"góÓPÞó“Ÿ®Z¨ªZÌ×’9_[;o‚Av£˜lÅ²álËô4§0T8“‘'ß¦fmþÐü´Hí(g®M…¬:T€µ7¦²6©½é ¹±˜¨6ÃZ°ySÚšÑšº¬±œ;wî€¶ÆÄ`­8³°à5ÂºÖ
ÝÔüÄZHcU©±Ø]PÖ@%Ú‚èÏI”Ú5ú&Nœ^Ù5ªY®#]±¬­SÖ³ž®_ž8]K”g°pk€iEŒFÆ#<ÙRÚƒgUG•·xnô±ÙRVÚ›íLÊ#‚+d¸”óbø‹œêÂih ½'585;5ÙÊµ›o3¸ø[½éîôu|Þþªü V{ÍJ£ß»âþö²¹råÄ{¦ªÁk_†Ž=l5ÿåÅ/ó‹¼‘­çµˆu½.-·¬¹§|=«õ•†-²§·3Ù§•KHcK¨}6‰¹qNÚ*Ø†3öÀ-Úöñ†«wä$	—™DKgõö¡8°FªKu{ºûûÉœ!ä§ÿ©±˜¤¸L¸f#Î¡Ÿµ»,#û~t&Ó•î¹ó.Ù!Z‚à=Žmœéý×
kBµbZ#ó~¿j{cRóç®K¼ª­ÓÕnP¯ÆÖÁšã5ŒRÖPØdš"vƒDÍz£Lk3‡ŒøÀ_ýÅŸmÄFlÄF|X­a»2¥ªT9Ã^ª<!Ì¹ßU§°Éø´¾4—Í	;¢E¶ú³ÙüzXS>$.ÂNk#a„a¨‡5ºà´Íè˜ó¨v€n{×³š{ÿDV#…ôÇk®*~xåÚµÏþøùÔÁ‘PdJÏ&#å±ÉI®ÊVd¤tj°#$›êˆ ¶„CôÇ­A8&½êD³)èl=:›ÅTKä Ý±Í…„0ÍF$NÎÎ„Òè¬=³ÿ yö:×Gx*Õ0qUwÆœS›U¨FëkPÍkjÿ"RƒÓì’íßwÕ(íÌ™Kï#ž¹táÂû˜]¾ÿþW®%+´†9¤J×&ÒÛŒÀ–Fk•k|o#á=FL[Ëæ4Ü—˜›é‰ØÇ­ºš)¼üQÖJê@6¹l§ä€Z=Ÿ“Ñ
Á@EªaSš4k~ÐMBh~ Š5·nÛ¶y3ýÖ¤¬mÞ¦æj·ÙQÔpAöÛV‰ÁÈ. G°&Ns%ä‹üK.¿8¶l°6!^›‡²€µÁZk¶s #ÖÓ NëòHvj.g´&v3XkïŠ3v±“›vÝ3žß“À
2b)oÖXÈÇ½1$ÖÞ~m´ÆÍh¢f#Ú9jóÍÖXÿ±Ø¸ŸƒbP+®[ëÿÍÎ««…iëE[§­ÉÄW²9Šã÷U×èu-%ae5ci|*„‘šüK|H"_Òj£
N‰†éd¿ñƒ„~†GÍ_’æÈU6'?ær_ep|	Œˆkª\‹Ó0 â1ßv€ïé”µÀ`$¨YJÖ8ö)²7#ê—§w®‚‘™xZ„&éAÉcô~äI©ŒoÏâ#¥7ªü‡Hæw¦›±#iæ”òÅUÐox8}ÕŠÖRIuLçËé_°P¶šìAX…ðþ_M¦ûu2>ïg Žã««ì(F;*óÇªüôt>œŸŸ>•^¢µ7¼¶f›ClÏ4±Ävi	ZctìäóÓ°S'q?7§¦qÈ¢ñÑ¥ygùÓ5Í°%­™²6ã&8^gÜO¼ª±¾NîœÑ˜+ZóØÆM4î0XhÍþP'Z¼ÖMZÜß	µÒÚÈc¤^›JLƒ+wM<þø“¤B.+2×,5rŒ?õ´K¼}aACnÝlßŒµXPc"eÜB¥ioŒ¤Î>¹%ò’pîlíìì0.‰Æ=©h,‰Q°†+l{Cl
X›mËüÁdKr¤¼Eš±Ï‡¿(d¦«‘.Xûç—?¿b×ÎÌRõj—…ýä|¾é“OyKYVyÚ²¹>éz®…Ê}p?
õi	ô2¹-ëçWyºÚ“œ’0XóW ´$d^QæcÂlšÛzJ“à]_d Ýœ®Ö;³uX{‘©Â5Éj€Ú§PÀö–!BL»ï.”31%gHý9Ð‚¾Ô¡¬ý7yp`™è-F©±ÜLX”5BŒ%æ*jŠ}P@Î™‘89®¸¹š÷ìw±VW»Y½š±š5‰ƒê¨†%¤«W»K,ŠÂ¤=@Û9úÏmX‹lÄFlÄ7„ÕÚ•«á¹MÁÚPšÖ°L8'—&ÅÊšrð)6SH½ƒ ”¥ÍJÿ5€™xMÓÕØ†l¬ÅÈMiÑI}§ô…ûzÛæfg÷‹ÕþdŒCÌþT»n-ò0­ÇÜûç	\E._>æƒW/ãÿxî"–ýèg-º^ÆxGŒEÐÖFxîhi™zs*ú¦ºª1<8Ë€ZÓ„lÞ:d°cdÇ
\ØjØ˜´5™ý+t°f½°çr€²½sÄhè„íImŸå?ª÷Ÿ©ñ ßýŽu¾^^HA­€jWøHà9Û”>Ð‹C;d£íûW¿z_ÖÑ'¤®™Óˆë¹F*Ñ/]wlR!U¸&Z#RÊš…íž­d÷í;5ðÄmÙÛNåv¿Ò·%:-‰â—69•*-©tQŸª1,Ø,›‰š­i (¹qHVsQhƒm­³]pìYWÖj°¤dÂ@®fÛÖ­Ô¡¨m…Ú%¯±i|uW}´ñ¹FüA5Ïyƒ×gÍÒ —Vžáõd×)>ŽÉ6 y-Ûšå‚>´†7—ig‘Ù9`Ma°FÅ~KÜ6ÐÖÑÚÞÞÒ;”ÇU˜”tD#ãYy:ä,rzÚ@my‘Yvk†j°Z`1œMxeí#7Vo22Á÷¸¹Å·ºk>œ¤…ìõ×ÂZ€oš@B˜ÜŒðÌT¤ÌÝÝ‰4GÌ«1Û#+|müE8èâØÁEo<ÌÐúX=¯1£ë–TÅX*$weÒH\v¿û|-'[{%LIisžD<)f4m½ÖLYcqÂÚÏ×ÙA²ø˜f’{SÖ$ˆñ‡HyL'Í„gÀ‹fM‚H« GgñDÄšÒû EàX#u2Œb^…q‡”…d˜¿_6¯JW«RÝYm>™^Åïhqz5T;M“5Œ.“ÍÍ‹ã8ö/äá³øå¤>KÆl~<Y¬ÝAÐôZ"‡¦ûÊó¸Ü=y}pHFh¼Ùá“ ¡¶9÷Ÿ|û7ž„Õ`²ù7N]gióÆoì0­mZ°ÖÈÍ©jÿ¡h‡H“Õ{â7”5£5ç©Åû@¡;mŽ‘…#¥`ìÙÉ‡iÚ;ÞXsMtY()IU"“ã.¢_o¤«Ó\Y‘">¦’5H-¨YÓ„Ëƒ\YííX©ç±¬yÀô°¦	žº"…H‰^XOgg÷Äj&³½m­m*woÙúT´£·wn¯®ÕÄüM¶Êí7a X›l,XáÌ‹Ûo6Þ\äŸ¹FÈ_æk×à´‹'p<~æ"eŽ_?1:ÿa kþB$»rËlö°fÓðÍ‡fÌa„÷ÐpF*1î7CÝ†¨ÀT„ã0â"3¯é×¬O‘Îd¢\w’Öœì-MTP¤Ú×Ù«ní’ÏõËö²‚|‹E>#‚5`íûâÃ³‡lðçÂg(jnâ¶û(âÖð#QÛèBÊà×W¬¹(ÖŒ¼ï(lÅæ·ºq¶7íg-¶‘²æYí¿ÞHW[ßÛ›YR´vˆf°¡P\FP×îUi;w¯^±ôµïoX‹lÄFlÄ7£ÁÚ+GŽ¼BÍPo8òÊ‘xº2¢)ÌÚ›÷‡ŒÞiHÜ0Që‚VèìÚdW‹äBØŠÀgÖxÕ®ÌÞu¥±¡pÔŒd[a§Xnk„–k±ÙIÊÖLŽr¨Âšœk‘ Kü
1íêÕËùã\ºvöÚÕüøW^Wãk²U‹P^Î·Þ‚”†¡‰khmF"¤-ÑM¢±Å¦˜²”!3aC ¤Q§&×f"-kòŠD«S]›5ndAÎÎ GÔÊœ ¶ßÊÖ
a¨&Ró¨Fúãó²=Sù<¤f¨fœæê ˆKFi—„fô!¸úÅ¯¾¸zõ­W}¸„HW¼­I\ã
õ²‰kÒÖff­¹Ê5%AîýÀZkj`ßî}û²Ù\î©'ŽtñO…’65;„¢¾áZþ®ÇZMjç[YÉÂX»¡“¿2A®£Ok¬¸úS×¦Šc×5Y¿­¾®fkcý-%”¬5*]ŠKñÒú¥±áJ°ëR o~kÜ ñl³ ïÁÊÊÄ“ˆ*IA^‹µ´>ÝÐ›ÍÆz»”ëˆ~FtEo]È*áÑÃ×A[ý¶ŽxCY²5KÖck~þèÑùqTµÖñœô4kF,‘æYµUˆl8÷k„ç5_µö¸ÂáäA2%R3imÚØÍ‘­?è³¦#ÁšûýãæzÕþææèÛ^+/ÑÃš&G›¸ jÑæ<FlNh¦ çØÐc2Êã«MÒØp¹Ë©Ä!$ña_F­ÝÔ¿MÒÚc†|œ(Kñtšš4åFšì†gJ1š÷­Ô˜I`Mº¬¶^Z+T«Yèˆ¸²&›ÈŒ:ž‚Ã¨U¯!K ·ñÉWµ?œ¤LH^‚Å¨XM ÙÝ_j"†WI¨\]$Û±[KZËW->È¾+šTÕækóyÓôXëéÖÈvÜÓ/WÈýãÓµµ‹ã‹(j±	ØNÊw¤éÐ!ÑÚ€ÍÍÇI¦Åj‡Ž­”e¿ë²¶«œ1ä@:ç~lENrªMÙÏãü¼`ÍkhV°¦›&Ü$7¡š­†jV³&ƒ‘²€Öüˆ u<©öý®HU» t’-h,¦¤Ù˜pÌF kQç[Ão´~×å´21qº’Nk.-k ´öío_WÖ–‘Êí¯ýXcÍ¦’ÛWVjxà õ›ÑšFÚÓV$Âc2R%ª¿‹d³¢õ³s4ðhEc½½m=ñ¶šúbföîçZM¢t„\÷Yä÷œxm€‚µì,iê#S•ò±r9KXûüsc5ÅËÿÞ	þü*òì''Î\>{w‘P¨éìÙ<²¬wÇÀ|ä@FJýX`ÆDŸ\4# !UÏÖjkõ®FÒØä†cêÚPFõ}ôÌæK2’Ð2¡fKLÎÐ1›^ÿäv§ÓxÄ\ûÑÖyàûd@~ŠÆ&Z{.{à>´ûÁ“‡Äf¤e@’	yÖˆ*àBXƒpÔ‚ÌL‹[¬Yˆ“\£šwY›ÉQ€g~àw$+Â?·"H¶c±®æŸ§C5%>`MEjè]°°&ó†Jý¼Ï5ž{lýËk‘Øˆøf°®"í¦¬54©hèª&OJ×û2iwÝN×è»íª`‚¹´ZuºlGêž!;ïaŽÌ©?äÓ Ky£ÐÞûMe‹uŒÌíŸËÒe7ÑÉÙÖdÛ~:­9Çj3(_ÊKq²š¬¹°¯ùóÏu¥¨9sùƒÏ®}xí³g§/^»øÑÔdGKdjPýÒx‹EÏ(b‹N¤2ç©¢´ôµÒÐ$,€S5F:Kl¦3°„ääXl Z“ÙˆÁšf”iµk9Y?ÊZ„B5†<«yS#5çÂCOé5Tk<îIí ¦¬Î+—ÐÎœ¹ð…ÅgŸ}öGÚ|³µ±XMGŽ¯]£íÚ/^@NZs©²=™Ü»—@£µÝG<­ªk]»3ÈÍæö19[©èØýÔîHYY`¶©†H¢¤®n»âtÇ ÖX×£÷gA*4.„P«¶™(‘#ëG¢~«êÚJn©$Ž¸C¢¯YÑÚa6ôÐý%*¢º¬±êz<õc˜÷­L×NO·f³­­ãÙ\kÝH[o²¡ ˆVs=ÕÚFFz9R ¯UK¬ÖvŸÊŽÐW€ö"ã|Ö®ÉªTFCLÉ*ý‘£|íŽªÚMJ‚$~b¬æ­û¹ÊšÔ´‰Ç'‚æØÜOÈéÿ¦ý[ kú.×8¨0V®5‰Ñ<¬ÝºÇ‡†¶H
ñÔ®½›á£/f³â6&`³´fñ…T²$©þ¡ˆÇFï~l¸y”ŒÂn}è™ÕmGK.†dzÛ§aÍï`mÈž‚9{üƒ=%®ÒŽÅü,¬ñï&^+.Z+ì™ðÊšhÍp-ŸAAË°!Lî"ÒÐœÕ+ûŒÜô›‡õÄ)\#ÓËx¦	*Öú3!´ps~5—!”e$µ/"¡áûn¯Ê$âÉ|SmmmÓ¸Åj_ùêj"AâcždÉñ~nZŒãö ½Mçk•‰GdSÓôQ™U¬9ëG‡æ«ªæµ:6KLNÖ¿½´´4ïú	í 27ÁÏÆ´|ÿ¿iš
Pf¨†ì¯#®=ÍÚÄo¤A6®WÖ„j(kŽÑ\R¡qs‡L7³ÓÜqš2`3!-È™ô"¼‡5*_oaÂ`MÆ³ÑºÁA
w'NŸ^YyT°æ½ ¹ˆE8X£^lLekcôW,¹uG}³e-'z…AÊÑ/n+3X™‰q827ÐÕÚÓë å"¿ü±ÉŽÖÖÙ½ò¶¶÷”uŒtäÐÞO©ÇK®­›Þºšm·ÿˆk/òÝ§bÍîÔÞÿ?ìoL\çÙæ¿ï~Y½ûöƒáZh,«ïˆ‘KÜ2	a‰O‚3(Àò§†Vo4alÇ&vÒÄã¼8ë$]º\Ò*KêÄJjpºÆqå¤¶ˆíî6È¦T[§dßxÝmRË«¨ý°¿ë~æñ©‘º-Í=ç<ç9Ïœf~çºïëþËû?½ú/W§k®¿žýž‹]¿>"ñuÑ²G¯¬ù´æû= éŠ’“ RzÖhm+c&ý¥hÀ´˜@iSÍ$¯µH;Žsu¼¦‘©70Ë‘ê£GùýkUðºãä~×V­Êš9†ÐûQaSÂæa&ƒÍäª!ßGÃ5-p†¬ö JÉa´!®s¾áam	­­(¬ý­d^&$!#óQÍžs%Þ"ùºš#µ•êÕ¼°f f#°ÆOoñuþu€š&kÈl2ì§TOB#r#°Z°)D!
qGÄ¿¹„°ÖpT.ÀŽy ÛþýÊvRHdkI™¤æÞ—8·ã(œ5D¹`eÍÜSÖ!Û	kÎ'Ú¿Ó¬‘µH]ÚXVÌF¤!Î˜dµ¬«óÂæ^t$Æ1H²R>›û)°öþû"—³g/ÿ~þúÔå/Î¹qnòH4.Q´F¥‹cid¶ô4föŽÝÔä÷Òt½9Ö	á¸T°ÆTƒ‚Ñ€N†ýÆj<Àšž’/ÉÈØh¶ÿG‡F¹]ûÒÎƒÀš'5…Iƒõ©½ùÀ2³üöc|8€É{@jnSsÀÿ¦ÀÙ—5í
Îµ}®”Hô7Ñš×€…'²k—÷ysã]éÑzá£k¹æüd¼Æ~XGBóõ;ŸèÅh¤lpýOÌ¤×…ë“œÁM‘
XÍhÍz®ùÖJ˜øS7zXsöýKýú}gìÕÞoÄ£šÙ@Vrä’*59öo¬ÚxoW}˜d@¶›ÑÙº6‹Úðî§ÇšÁÚŸó<»…>á=Ÿ³ú~x7iÞû‹‰ÌèÄ/öfÓéåj@ð•ÈfÍW„.k	f.”‰áuSbo\±öx[C¹	n5Í„‘½f&RÝ´ÅlÚ]ÉÚ†|tïèunGH”Ê3„$œ¤SÔØlp¶¶)†6Ë¯]Û»\_ó°FôBk¢0³iáàÀËMv#[ÊD6g¢¯µ kŠõ‡¶«\I­Aj„nÕ·8ìÅ	ìÀ-²%U5ÓÂì–ßHŸIj5‹‚5]ÝÒmöü¨j_f\g‚—ú´ ¯'ÜÄ”IX—5ùÚš}ÊÚx0-ÕÃO&oGkb1·w—„öu´(eÅÍ`µFk‹zv7‚¿%3›6o-–ß´efœ>iX‰lÍlØ`#,7öŠÉñ‘èØG]ÉÌ·x€'6 kL`8d¹íÛ7ã›hsíJÓ‚ Þ†·LL¢®-]>fª^¦çUq).cgSlhíXêá »9'Ô®¡«y^ûemsÐÛÓ^Y[ç%µ%”µÜi‘ñˆ§´eÀfŒÞŽ(Â“ˆŽÄqîÊ°YþÍUÇì˜.›Õ]&U¨Akßþ4¢v°vQÂÚ öþewÏÞ[u×Vó&þ9ÔÔëÛÄek¬A‚‹F"k4&[Ûškš¥®%²4æh’eÇ†ð	FmK§ë;×¯Ö*X}†
dš_> 7›‹¯çIþF#¬åÊˆßçÈvužÄêÕPÕ0ë_ŽmÖŠ‹q!¬ ?Jlµ˜I,{XKmÍµZs#HÆ(“‘R™èÍŒFbí)Iâå<„±W<®kÛkkKBmõÍGIa®‰µÚ}Ò†¦pf÷Îïc Õ`·>~tÛ÷^T	K8=>,X{H:šøL¨&¬c{Ì `6;—+GNZû§|]-¿bm3HŸéö|Pãùà A-Èšä%ò­E|µš÷üÛþjA j&b&Â‘ Tí~õÄ&ò!x” =Á¶m0,<[°)D!
q‡°ÚW`5,Í÷[–TuMcusu©ùø`„üBV¢†¨F$oÝ)å;6*Ê`-.X[gÊšÝtä“¯rpVÌ®j-<šM&ë³™ï— ›†@“ê"-Eííø¨«Á(öîù¹âòµß_£²ka¸î³ßŸ+^,¢„¼xkxhdhh¤+MÑéÚIb¯¤ÃEiPsLB”ÌÓi:(Hø«K f”f .Kv<3È5Ð	–Ê˜t6‘r<tð(8ôÒIlQðò8ˆ¡G€jÎþ1šæíy@-Õ¸]{q€85T[¦©MÍÏŸ>}šÏ äA^» Yíòe¯ª)Õk¬3¹låkàš× …ÿú“ŸìÈÑÚËß-ë¬e×¯—¶†¸f)^3RÓ`‡ƒ2Ñ‡ÁZÿ`E]æh5©2ñ¯RÖ±Ú6³àôZ³rãàÐí¸pÌ¸Ì`ƒÀLÍ±×®õÏ¬Um¬ÌÍ++A´Ô²`< yM}ÖTÉFK&-:l3kÌT¬¹.k¿AXsæq’]Es³‘(ÎƒÙc»Ž%étgs-¬Ö›‘ÛÈèä4óapTV‹ÁbC¤².ÑAbdE«åÔ¶5g’™T7”WïS¥šI)‰§Æ÷AiÀš¢wXc“¤·„DXóîýOZ§5¶eÌfÊÚ‘|EMc0sÇü¢5¾i©Ã²òK²ut´æD+‹y0bÕÉg†nqüú]™€ÆDÏp¦ú7o ÉmàGý£õµŽã€5ˆcr|t@¨ü)GR/Ò
AF!ä,‡î3H´«]ð¨kžÓ–Ã¤ÆÃªÖ–£Ú€Çµ§±As²&I:Zƒµî:EÊÑ¢¡å2>ƒk[S- Z)ÿúrÉaÐoãâÓý46³˜ªÁ#d“8ê’iˆýŒX&µm™!ÑÍÔ4€nƒ­qùø’qyÏp-ƒ´8"ÉÌÙŠ,)N›E› &rZð1¤„5¼ûwá1â;`[ÈõÑŽü3>ŽÍb÷h½°	ïÚ/^ñmÖ,ÒÁ^< 5bÂp¬ˆÑÛ^F#nãï¥5™ø"¹Û4>÷ÑÈÏc÷µKðxuÑu`úØÀ âÚ ¬¦x^®®9Z£»NŒÜ”±–Ù¦‰c¾Ï>/¬!h-°Æ‹€"5[TFV…×Q(nM:ÓI4%²ÄÉÚæ¬Ù-šÌÔ×fÅjÙ,$€5PÛj›¿ûse?LOS°F51xÆû´öþO?»ª>—WoLM	Ö>œ¼rnú‹}’¿‚Ãm£8HƒÔF€a%ìÅ“†iŽâ˜0o¨ð™œrÚ1!)"÷8Ôž²ÞîñZ^Ð.µ©=@¬]^A”"ÔÖ·Å1÷J…b‰Ã˜>
ÖÌ:D¹´y¶’5D6å7Âeß“›;°fíÕÜ¤-¡6m{xÛ×%@=¤ç¶É¶ß£Ž×ÕV‚µÚ¬å-(V[!	0c`nƒ@-¯`Vó@V#òû«é±DT¬åÅ1ñOryž2ròàÃ®¼ïáüw…ÈB¢wD3ì¯VUW\ÁjtÿU»Ÿ2A­=dhF÷ëÒTñ:ºÙ ¸©óZJk:iŸY3ì¸¶æ2í²t<É‰´¬‘X¦-ŒÇq[†ìG#µ¿
t|©—K¤õñc»ÈJ«©¡«ÉtãËÏA™ù©ËgÏ…57\¢ô’p2FKÒp›‘!àJê˜õ
bZ2:ÅÒæ"ba°6¤4$)ë’ªùæ×$K†ÓL¥É	¹†`¿¤Z«Y$ Hãkè(,´¾ŸÙòZ5k3–½ò&•jÏ>ÃüE>«ƒjyéSÄüüÙg§N>{™25€X³ Ñ. ¶±ÄŒÕkŒÔ°ïçpZ{ƒWô²ŸþáÏ÷¼éLüJ…\/qÍtçPJó´ÖÏÖŸÖúŸØy2Ìtl×&W­©[3X‹T‘bT¡Dœ°–ïÖ/$sÓ%þ"6svþ½ˆã·Êµ_][I.¤Î+ElÈiò ÒÆÉjû×âÉµlpÛ ¬6`ŽÞ¿a¬=ýÍiDÁÇ:±Úÿ˜ÎlyíüöLçÄìÞæ¦ŠŠ¦	k`ŸÇÌþ±r3ZËuÃ®®îx*Û°»"‚Þ–ÙX•Ù]]ƒÜ&‹Hž—¨VS#’f#µáôd ¦8Ù;üßMYûç#„ë¨–K}ô FØÏÎ®è/Ìó‘¥×AP)ýÖZSLvèklŽ#þY­†¦‡Þ)’_b£)qšY@öÅõ2ü¦«Ì¬÷¹:xŒ¡5®’råŽÜC9(–ÔÐßš/zDc<‹JÇ×ôÉ1_Žýît é‚`3¬	ÔÁx¬ÆÀ8ÀÄŒXè"¯¬u«X­»±£–ZµžT]ƒ¤G¢¥6žRµìLOcGGMcIGÌGz;Õk„§;:”ÌÚØW3nZª¸š)IaÄ¯r5ñ˜hÌ	g\ÊqâÌ¦,JEc7¦“G£¶lÿÅÄ–qN	4Ù#f&rž!s×ä%"MnyøˆŠÖDkÖ<Ûçd4×yˆ÷¡ÙÄ1g+¢¾j‚³qZÐ;Õ–º‹ïM¸äG"Ç[nw°æ-Ïý‘°CÐƒÍû‰ø°Ë’Ö";ƒË‡¬»†ó¹ÍeÇ ñ$›íz,×ÛÑÚ·} kzšÒ¶µÓ³Ç¶ó"Ç¬¹1ø¡­®ŒDµŠÔ¡2.‰àK4µ&Ddê£xdkŠV²ÚÙ™Ó¢LûU°V¬éÍæÍŸÿ»?|c’~ ž—€šu¼üì7®ÊÛI®}89I’Hq,º¦˜ô~éïšQšÎm4DƒÌ˜´ó„EJ}(¸‚pªñËÑ­ãÈ¸s‰LµSåÝ“â÷°¶AÙ M±bd7InO “‘ú¨6õj˜÷¿ˆ¾ž fÒÓœ”æ¸ò5¦ê0ö ZŽQÈe,£EÄ'*¼–¥@²å£¬¶’²¦ðæá,Ý„r=ØÕ–ç@ÿ_62~d€Ö÷?~h÷à, Ò.UŽ(LûïºZ!
Qˆ;†Õvî‡ÖJKe§´)í¹ŠÊÖ¬i§EI£š`ƒiºqÈ-=ŽE(mñ¸¬þÛ4£µu´ð4X[§•" €3Ó×´J´ËË¸=›2aM¨vò$²Ô_­^Í{‹È9ñœ1×_þò¾²Qžè®67yîÊ•ñX49³¬ÌX:æã9˜‚D€´hrôÂþ‘§Š$·¡¢Í²]³k×ßZh´±ÄÚPtˆQ¾"ê=¬‘V‰8ÇeÄSÌùô“g¸ÔÖ;TóÝá@µß©²êûÁÍ¥¤F8RCT;=‹ÃØÙË¬vv
ZC2¼ðû/¿¸ùÅµ_*ŽCmãYU¯-×ÞyƒÊµ\Ïµç¿ýìËÎÄÿ™ä˜ŒFDk¬YÜ¶þõÈkÙ±äI² ;;rÒ´nUz}¿!<ÃzÌ5wVQÁt)­Ù1§•qt°õ[slßt`Õ-{GÿJ@ŒìÔÉieU¬W”™Ì¶çnåG@e[dÕ1Ù^þÙüEÌRís£%/xk’I˜=¿kvm¸3K7¥¦d´©ººaMZ6»ÛøLŸÚL_s°†¡GNkÚÍ †›]nduuC:ŒÊÜªËEmûØ7d	‡j`›`ÍpÍ…WÖ$­	Õ‚¬\Õ¸ÆönÉÎàÏ4Üã:zµŽrSÖÊ;z÷-62u`…Ôª‰Æ¦Ÿq$ìi¹<¦”Õè~ŸÍÜÃ`u‰àB(ë“ÝuáÎa´ÆËØWxX“þÖyG!\ŸÙ.ö‘UÞ-cFBN÷X¢‰9°³ð?	Ñ×ÃZ kNVÓƒÍ‡C5nFk&­ÊZª‘Ÿ5¾ê2øidÍ#©-jŠ¥ÅÓíØ;Î„€5 «¤¥¥×ùÕ$¡mŸ`m_û|¶¯¶B“dqI»SÌ8'˜)8r­hm“¨Ì•.êúÜ5<Áòøõ#ª±m÷´û˜ÍõÆ–ê¦î° ·~‹á#ÌQMƒþ·‚Åå´&*“a?áÔ4j	/¬-±îw¾ýzV1l¸cŒã¹-÷„bb	Ãy½Ý"8q©Ò6‰¸|ÈºÊŠã,Uk÷–UFªÎÓûõé¯ï¸øØÅ‹ÎªX£bÑú&rcZ“úöÕÙcÇ¶ÿêÚÕA%œ#4¯Ý1¥ËHeQß«¢¬²h]Î•Ñuü½L†ÃpY¿ø»:ÛÂÉÑd=™/¸z5,IFíÜ?|–?(dqÈ\Äõ¼T`Ô«Vk¾¿ÚÂÜäøädñâøLÌuý»`-éjn¢Á×«™)²ó!Hãí!É·¯GL‡Š¬¯š¹µ×¢»ÅY·¶·7>ÞWRÜÞ¼›bÛæX±ëZZû‘Ê¶Q¬Fv£„5C¾EWl´#,ù}ñEž–¢l!9yèA'º=ˆ²&ëC”7RÍ\ÄÓÚŠºÚm”5ïrË2 6æË£4?r¹<#¾|YÍ£Z¾·¤–§«±ñÓ[;likÿdóÖ|·oÁÚƒ*V£´¯`Ù_ˆBâ1íÿÊûwîÜ¿ÿð~‹oš“÷~>o±+ÈD5ãíÃ`Í\DR)ÁZŠeÞEd×_T‹7¤¡C¤>Æ˜*’çb`š…“ÜÖ1ÕPéxRU/VêEÛÒ1ÑNZïŸ9Ë~XÍ`M¬ö¾Õ«ý~~áÆ…kó3Ã“øà`¨N'“FkaFìùa9HßµErI®Ë%5‚k•éÈ`É‘]oi	i|ú±Â4+Sã”5‰uÊ„!QÕd©‘`zËTÄ¡ÚˆPÍüJôóë6ñ“»¬£š_¨ù[´§¦NSwGâ#„¶°pZ>œ¹¹páÆÂ•É+7¾øè…›7`4`íÂ;J_3\›ÇhäêÏ 5gâÿ°"[µ§÷òfýÃ†r¶ëûÕ!ÛÕ®yLsÒ+6hÞTÏ¬­ëìï“b­­ö!È¡›D.o&ÂH„ÛÂ`×q Me)ðÙŽ.ÒÄjÂ3ÙÈÑËT‰UT¸KùR’!ÍÆŸ6º]Øöïy¹‹uIkÈˆœ¾¨²5>Ú¡«}ÿyt5…XMïT	†q÷ìg#ÃÃYÝK'§ÆÝÙ´uÆ¦fÍhM'»	ÎOêXÏOy*Ë)Ž#°ZµÁ¸'5E´Ö$©r#31ªÑ÷¬!§¬™Éˆ3„tŽ$©Úì$Àµò‰,€7lùÑ+b»d˜s‰ŠªÞr#2çÍ_Òò-H°i"9˜‘¿¦::žËÝ†Á0ˆü@B™=øìw—¤úa±ä_¦/uŸt«íÍR|?³ï±V½4ÆD\™QÆ·Hcë3X‘™†€#—qÈuô.U¤¶¼ŠµÀºŸ`ð¼&N³}\d)¢›m-¡ülK	'‹ñFÊfù_)ÞX‹BÍ*±q¹¢}†>i½½‚°}z¦±±þRú"ZZ(4ÎªáØŒKxÞž	`-W”¶%§£I{#Æ}áš•°™ëÖ"Ûm§ö&ŽÖùŒ‡Z§ÁB`Ie¬MÕ8z2¸MßÖ¤·}`¦"z¸öj#]<\Ù ¶¬`MYï:eM´Säû^>ýŠ•PM±$92—Ûè.ñ­ò=¬1¨Y‹5úêó[mY]÷VE¨ƒ=¶gš¿UÛgMZ£/6¬fÒš3î·_çÇ`8	kÇVo¿8½vÕ×ÖE²ú>AËnFƒ5{*©«K†‹ÃUUeAF+Ó´ŒŒŽb`UÝÙ¬œçæD}«Z{€h'…icš‘®>Jñ.®ý<û4´xq‡| «]Öho	¨ÍÿlaÍ9AÍ-œ›/¦¹ï:«¯ÄiÚJ–°„£0D6Þ	ãV§f‰Ôd
Ö8±ß*~áX†ËòZkºkjâ5ñ’Z¬¾j‹bm»špS^+Ù
Ë}K­®}ë­‡î—+äÇª^£Ï.#°™K{„Ãi‚ºûäbÁ2´&VÃw¯D!Y0A* 56R>«	©òÒ y1pp`æ7ÂÈŒÍ=–AšÆd5Ñš}s†u5&|FÐ› ÏÌYDLÊ	½±1½«=¸’(Z°ì/D!
q§4XûÖ«¯ŠÔvò¼f]°ïÛÿê«|¼ÚÏÖR{&ìúi£wfT²ekDS‹Ç5øÌLEB, ¤©UiL7qo…sîoK´
ÖZÖîæ¢Ú!f‰zA"ayå×ŸƒsÞ¡‚@ºÚy¥@^››¹~íËùÐÂáâÐõ…IUÐ…¢#ƒKF‹KŠ¢é(ý¶‹8†KŠÒ#]]CQä6 2:¤>Ù W’J´‘h8¹ISsÈ6ä90nDÿ,oÊ
X«+{³k°ë•‘C‡FF—ä=ºcÿrÈW|s8k9€Ðˆjÿéj ª8 ¡§YÚÔÂÔüé³7Î\¿ùéoßž»ùiGCÇ§Ÿþï“¿ûRqmþ£h-g5rö‚\ü£×ìõ³/¿ÙUF×8‡kë)^{é`)TF4Bs»›@jìýLÚÛ¬¦Dâ¬Õ¶z‘=RYÉaZ k«Žßå@ÍŒû—XAzV3Xc¼¥ÀÙu‚2ymíÆª
´³J³î7?ÈJ¹õk›)[cí®ÊŠÊÍÓ÷nÜ¼MZCNÓ¿2€µÇˆ‹ê>-iíÀDbb8!ÃG8‹4![5°­u|FÏ,²™N›³qèŒF3Y€(‹ì­I@éh¨«e†kOiÚ\m¢§æ¹×)k šÕ­¡¬ÉÒ×¬í0VsÃ;²ƒjÒ†ƒ6Ø§ùXAYc¿$æ*½TÞÛKž²'²Ç»©Ù2“z±WŸ¬28RZ"×(DkLeŽhÕ,’GrNsèj¬©XÍ^ÃÓ°ÆÍÓ”oÕ-Ë‘”JÁôáHâñrN[KñgÀ›ˆÒLÂã)½ˆý8‚5FÖZn)kl<|(ÿQfìÕü ªã¡Úª…¶Œ/’ÿHÙÙL`È”’Ua/+*¯€¨Åx‡Î7€ZÖ¶¤ZzkB/¹<oÙ03£nØ€7} 3©cËi°†è¨h9\3xcÕ4¶q]«	Ö¶O3Ÿ ÈÎ[¤†ü@w³ƒðŒ)´Fäê…ímXrá{ì=¦©n]Vª6¢m„``gƒáT°èjÊ‚tÊšÁÚp‘…Má¨ÌÓÏ­:µ`9·û5r9×~† UÚVY«‹0©‹D ¶º*~ÁW¨XV£c×žü¥šž=`"¢5ÂÙö³“òþmýBó;2{×ªµ³ÓÇx‘@ÎÏ39At§>û9®ô.’KÔ¶GèŠâ¢«èïÉ´­kÍ¢¬ÕÀjÙæìú×¯gèÌ&*X3s‘¡¡ß•¹ˆR ^¿¥«]=Áû¬öÙÕ©yâÆ¼@mêÄõë“ü?hòÌ™-òÑV†µ’Üà´‚_)õÎk)ë„-‘»!=*kÖ”ŠÒWëÓr<úk›ãÝåÍkÂt'©¯¯‰6#ÁÕ6ïÊ–Qÿ¶‡À0µÅþÝ0SX»lH¬™)¤ŠÖ´ÁfŒ ÝÇ¶}ãë÷Cj4"3Vc³X!~r´–¯¬øòkÔÜŽ1Ôrsï+’ç-Â´WóÞ"ù¬ÆfáªÕ€5GkàÙZÂZdä@7 Î¤5vÌVþ¡P®VˆBâa5}ÀÚ/V³8lÎx{{Ûm5Wb-ÍJâ¥9X+a¬56r³¯Ý‹g®ëšêeä§LŠQLëE1vÖÝíÈØèXiÍ’RÄ9JÛãHÞ=+º<«©¿œcÜä¼1AíÇæŠÇo|ymñÚµI`í—ÃöíPÖÂÉh‘^=<˜,Æ6™~¨!šcãçŸFU‹•'¡0kÅ–6¹-Fh“
&$Ø’içÂ§AEkLF´Ú
Žõ“;H¡Ã5võ*‡jY¡š^.@5zÐîÂªQúàóOŸ93¥ÌGBšÚÂÜ™3g>ûíc]³£»û%ýô¿tò£¤I^¸1-°ñWV¤|FæoU®ùTHpqíw{”äÉO‚Ó•‡È…$¬Yf#.Nfê´¡FmŽV·®£jm5¦jNY[ã"/’hkm£¬qçò!Í]D°šŽAè*óÑ6–!×E4!ãL+cZvo×ž—_Þ¼±
vÖXÇ÷{Ï››7+‡@MaÉjÓÄg¾]|ôCˆ™ýñ`çp¢É¼úk„ƒ4˜ÍÓšíDg2ÉQÁ£<#¡5(L×™˜USSÁ‡ë‚ýàl\õ	´¶÷?ªI[óÊšeB.SÖÀ4íÂµ†äí‘lejû9­ãRi©Ieå½åÞ_#xìDIË4£fÎª460j>ðÏ”¬¯ñ5ÌåÅ¡‰ƒ56vA–/ŠÓ¤i!³ÁupÆØ­gg¥ D
 fíU}Â@Ò
×¬q®Ý5ZÖÞªiw5kÏÂšý·ÒÜ‡]á‹Ö†÷Q³ÓŽÉ~	Æ ¤:šƒ^¼£q€Ê\¡,'![G§ŒÙ:bZJ)’FbÎ:„Uã3]ã¸0@ëP]¥lL	Á™þIzq+n›u?…kÃÛsÎüìùqÞOŽšMXõšfrðûˆ¡š•¨½öÚöã´0m™ØF¸ÑwÂFS£jÍDlNoûõ+©i«9X_
kë|F¤æ¤1±™­ªÛ²¶Ô¶æÂOœþ%HIjÐ·Z*ê"úe«[‘.z&ºe¡?Wd1ƒkÕ¬öE`˜¾kícp_àub/Nx~CA‹‚†|'û¹¢ÉlS¼µŽºµ0ŽþŽ'zûYƒd¶¹Z>Cº?cÞ"2‚Lp_°¾>3ªÿhø@=«¿×¨Ž–°†÷ãÕÀÝ°¹ÅvbqMÆýg><seòÜõ+WæN,œ>7“hy–æÊOü]°&D#˜ÚpÈI	Öœ²¦+ð%aéâñ”d7×6ÄË«Û¢áöx8ãfK:póØ@>ú"ˆ—¡”Ak«ëšÄ4yâ»uZã*émhjÆo÷¤ù†óìwÍ°½¹ÈÊ¶ýAÅZ¾²æ”3™çµe½±Ýº¡ˆÇµ §yT’ ÙnƒjüÀ(gâ4 Åk2ðA’µˆLT¶Q´žÞÏ¶ïýcÁ²¿…(ÄÂjÿ‘WÅjöx‚¹sñ6V#8´(JJ$¯!¬‘Ía¦Ä&­ÉŠ¤436ËÑ°ñž)LÓ"£¯Tc(J½¬omï”]ÿ!D r yE›«m¼û_Å;‚ú«ýËÞxTûËÕ3W/|~öôék®ñùÜâÂr™í}RÊY:VRD—µ"(­(kšÄÁ,.*«Ííò÷Oó—Ôì•‘ô `mˆlæ#Åj`—°B`ûœ¬ïßy°æÓØ\ô÷¯Ï¹Š$‡<ª‰Ôi?0Rsù?›Ÿ:-UM˜¶07…°F&äYö/~õÞ{ÃO¥P× 	‰ÙŒ$¢½}ôáÜ²!×oæ/§*×þâpí3åBf4ò´|!…k¢58XëG]#¼-$a –“Ö<ÄTÓNªcëj±³_¥D'»„ÁÚqçåO–dLŒFù?XÌ$h§F8Ps°¦£"x~µ38[H¦Ue_S³µ{µZ»W°µuo›÷@pÓ¯ïÙ\¬k¹ø¶Ø‚53@X;pþÝ_×g{QÓø ÆX½ûdB·Ô«›±aÏÁ÷TÅ–¬È˜}ƒ':¸,…í#ÙÑ¦‰ÞrÜÚ¥œm¿Cµ,‹O`6Áš“Ö,tøŽ·ï÷Êš6=8ç¡lGV‚²½»|é’Ù‹ô–^êÕï M5J©]óHä0¨§‡™Ü?tŽö¼`Í	n,›J€áñÑ'É\ñ¸yBZrã#[Kú¼—$»c£’ù 5­[ÏÓöÚ¢ÏžFu£)Þ“$KæÚg; 3cÉ[þ¯ªš-Ü¬ª¹G Ú’.kAÀi¶w k!d°ÅGJÊpÕï°öØ3pà”ÑØ>ŒÍi+Ükt¦öh’ÃÆkÇ;tÎŠ±«˜î«ÍœøÑÖ`2.t°Æàr÷º8g9®0XÓk3ö6aÎ½>ÂÚ-XcðˆF¹š?õIø@²²ë<à†GäÛ»v-5uÏfB,e5Mý	|¦bµ6âÇvà\«RÖÔd-Ö¼d kž°€ ;	‡4ØÌžÕAgy ç®dÂ'+23Xc¨«PÝSZG&uUEÙ´~; µŒÖ`5TS<ÍTyŠ‹f§_è¬­©˜^ÖÈwäšp¦³¶=Lï5¦Õ|·˜H²st¨¾•§«[QÓà4Û©Y«OÔ'ÕÈYùiÝT°æ ®ZÅšÁ·ØHe˜Z8×ºïú­ÖxçY_—kE±å¬æamåðœÆµÌ¼°¬õÈfÄÌÅ¿¤¨Ýž	Å‰Æ8îþhkj•SÝÔÖª^ ±p-éûZjþdö¨Ü ÉÖ,>¦TXcÉlD¶‰ÕØ\h²UúCk®TMøx×~gÅ¤åKGÂ	gÞí1ÔØÝÁÂËjúªÛXök¼m¹š/XÂy‹,Å5¹š5ewR²fò"Ðz?Ù¢k‘B¢wJ3ìýßT¤hí°ÆWÉ~tŸñH€t#AšNJ±ç'JÄl%q­¡«¹`YC¨¸–¢ÿ¬¦à•ÑFyà4úÂ(­‹QÕä)Xƒ,œäHÅÝwË›ÃõWƒD>{ãj…}õýÏ/àsãÌLhøÂüLñÌ’,¹ ‡ÓaÓØôícáXL%àa™BvAkÑhºk0<ˆJƒ±H›
Ý˜s"7þA†.Im$Aú&k<—L›ööÌÈ`&»>6žÔYˆÕä‰2â MT#Djüø2¹ª¢‡©Ó'N¨¶° ¬I^»|zá‹³g™üé£_¿÷AçIJ(Æ^:ôLö¥þzÌOî¾y=ûÂk7æø‚ËÆj’ã8œ=+£áÚ)«]Ë\”¿Ãµ‘ÑþÕëåãº¶Üiä	mÚ	xMêÛÑšöÝ;ûë£kbÍinŒWæ} ƒÐäÐo°^Ž9=Ó6a›«?sfsašó›G5ï2RÉw,EªˆŠ*ÙÅm\Ën³4HXmô6ýçé²=þóô Æý’Ö€55vgÝ¯ÿ“ ­íšH$¢u‰d†Ÿ€œ éŠ´NÅˆ††r«PË iÍƒtÿî„Óp{Õä²p ¶OLö”[53\Gl:2ay·pí©_ª9uÍ£;Y
¸LbšØC£Kîsž#·³ƒ\É]¤¼Ô&½-å—ø]¼ô‰yö{ðq1µc'-ykk€Í×°¤nÕj²öH\Eˆø¸\F©ÁZJçÒÁtñÖnõµ¾õ-PÓR²…ÔwRQ€fë—1“a¤~ /øinFý>\±š¢ÔÁ¨–gÞOñáÀraMÃs¤AbíÑÛšAeèéQ2dhß>ÌRÝ½JVDjÃŽŸ	±¨ª¶¾–^Bà5³(ZÃRDÜåhl‹5V³^Ø†nã‹Ç$Ì	Î	ï8Âs
§Éi>NìµŠ¶½p!¬å5YSVäkÛ7M(CRaÉÀŒf&ÿÌsDY„Ã5’)jGŽÜÖð„i¢4{v4+HXÍr mxO/¬GVå„5Ÿ¸°á¡Ë×³1¸Ñ=ÆÙ…:]®¼¯Vè\°&×\Y–{è†Æ¯¶|ñHY3X¸ˆ÷ã­<HŽV´vQ³M›©?[(}^Ó÷b›%á	ÖVeÍÕí«+)W¯[5T¹jÐ¸.Ö‘ô>”^Í$Ú[¹Ó°‚5A«ñ7#(K¹wÖô×úÔgWÙ0!òÆ)KˆX¸ÞFÖýé×Çõ“Á’ï¦æ[bÿ}±5)kèOTÁÖ¯nL™ð¬Õ¶V7öAk°Zyc#V$íÍü1ë&Åùcl¦"/b²MÔÆZƒÆ`5!
¾!¬‹Ó$¸1ò…ÌÅ=K(ÇPí6¶ýKqme-§‘-c±¨éèÏ=É--Tc–Ÿé·O‚„.Ù<¬1Ú`À’ÀaÄüSØQ×.´W+D!
qÇ°Ú¥Ãð%kê³&Z3VkÙ¿Ûþý¬–VÇ¡´n×O‰G§…RœÉ’ˆCoÌÜ(:#¤­­Á«Ÿ™“ÖRaXé…L²¾Þ@M†ýj†ýÌ_ÿ¬Kßýùiº#E`î¤ïÌñnéÚ«aHî#°öÅ0‡¥QlÍoxoTþc1S¾«ƒCÑôPï-Jòê#Xõka¸€“=¿r#‹‹¡2ó…ìâò!ƒ5ñW”eÀ‡ôÌ±,Lãª¿<«^ý\¨jÂLC5•?œ271Ë~<5· 5mêÄå\œž;3uzáÄ¹>øõÕÏ«I¹—ì®ÇÁ2{òæõOþðÑÍ?Í_X¸9ÿÅ§7”©¯²ÌIÑšpíÄ)Ôµ ×Ô»èwàšŒTþøL}BÐZÿKÄÁå°FôsÄ^$‹#äÑš†Ãû3‘Uuƒƒ*÷ÐG¬˜©hÕ¬IJó¡‚5ö¶6¦©­Î-"s7r¾f°šékU_µŠ5±‡ÊªÍ/ïAhƒÖØ¿ÿýiÌE@5‹œªf£`í±‹X÷óQw6QÝ”Ìd°™ð­nm’©Ò"9”[Ëkä6Ù@f3	óÑ'
r Ç”i¦"èi
Nh~î„5ö Öž³LH^Y#L[ƒ:Ø±Ùéü0;Hö•8í¤4¶ ×šÉÑû¾ÞO(\sÖ":ºðJ–E_ªG6ýîYÖ]%K}xôy§FŸ‡µÒŸ+{ðÞç2¾Ö#hc–êÖá„µ„Ë™Döt‰	þ˜˜¥HŸò+mÑv†²æd:×¾ÛŒ ªq­}Ç¡Úri-˜`×†a¥vš	÷,â,2¾Oí«U²f@Å:• dÌ¥»õÐd­¡Wqj†ûÈ¸©l\Êa‹¯L¬9 3MÏpM¢±M<ìRkœ0Wsí0€†|fþ"šæAN ™âí]o¿v„P‘;ºÚ®#ª[s»ƒ5±Ù/ðó÷®ý“ZÑÙð±áÁžù`æèÍúd]±•©‡Çµ#îOr@X®A¶…´²ÖµÛÉò|H®ÆƒS ‰ù]Ì]Jd%¿ÒwYQ+†¯³O>¹kZ†@Jƒ¼šÑ[ZS8¿ þîCk‘í÷VÐø±²ò®Ü·ðÊš‚ ¡óQ6u[mlUeÄ±nˆ‹ëêÂõcéHÅà`6©KG¢˜?ÖGëqë°1³?Û®<YVSÊºúyR±võUŸ¢#6·åµ0wîÌõñëWè‰­wº•,E<«IWs±bäVuÐÆ®è&RÎ’‘ÓTÜÄ·¬·sïãZŠ¬ýã}¡êò£¥¼A¿ú¢R±~”cˆuXs¹–ëÈ {‚§Ö8ÕÆÎ©ìF”¨Ú.c*» µÛÙ‹ÜÖ¸ixç~GjžÇ<¨qô§þi]i*\¾±ˆ=òs Wöì'¼¹ˆ‚J5fôÀQDM	r´&/L˜Uö—ÈB¢wN3ì£Gaµ'Ž–Þw”ØOä·`µòšrÀí¾ÃD©¤51»yõ›²¢#g“š¸xÍp‰”¦à„0XÓÔ1œ"\Y…œ•K¦3†j¶e³¦«IÓzù‡tÞyl×.’R„;ÊJQK2\ûñ¯_€Òd¼˜C4?(…$H&Ñd4fy‘:‰¡¥É{_¹á­QÞåõÈK²Ê"Oc™.	IBã+`òBWƒå°ì'FÈ)|a¬ÿGÄA" µ Õ–©j€˜i•êVª>o…jSssS‚-šyÛeíÊG¿üåõëgn~06‚|76ÖyT;t2;–}áÐžú_7ÏüjîÆÿsóO7ÿp#§¬Ù€9‰u]£Ÿ¶98Z³®kN\Ûüµ®ýãˆšdƒkŠ[°tÇ6nc’M÷ï¤qƒZÇ5ÕU(})ÖåÐj´æƒ¹² ƒàŒ‡6ñ˜_eî`›™ÀnÞb„>kæY	Í•mÞ¨îØeRØì²Š®={6‚5¶ik³&eí7z¸ðï.ŠâvìÚõî‰_¿;;8Z‘”sín¢ÝõÉúH=9`™`M—ü(j+/eÞÐA%KÖœÒ±}lm«îÈdÀµŒA û^ÐdqÒ½cµÀ’‡XqÍwZ;àI0‰ÍÖ†W 4wrÛ•ÞKŒ”^ºT¸ákL,îƒ£`µ`Åò91N3|óÍ©Í‘\Æs|	áa£•ëDbòïç3£žôl—‡ƒ}TÖÀtHuö27qhº0.ÓÚReÍü …k;ŒÕÌbDèæA-ðynÓ¿÷‹x‹ÐDmQ°æ8‹1‡Ó‹¡™T- FÈ;ÿ–š^ü!á3­ŽKfÝ/EÌ…œCôÕ²!qá³—
kfã¿´dMåÈà(c…ƒ†ØÎÅZ;rk}×ÛG,€µ	•«Ù¥(ÍÁšSÖ¬·Úg>Ž¼6¬»VÆ6@švForîJÖ'¬ÝŠÉ[ æÑÌ’"¥ŒpçÃaÑ-6ZäçÁšT5–ýK»[:h^rs•‘l„ÄçºÊ²Yš§=ù\F”»¬Oç´µçÖ.>ñüöÇÎWÞ}¬"RFg¶*ÿ}¼®¸ŒøÊ:SóøûqœVþ•uú®uéðšãr IŽV”ÑbMÿe™HhÓ±^æ"#®§éjÎ\ÄXMý<úÎ‚5ÊŒOÁj'þÛäñ?¾>ynrF7»ÈÊÀÚÊÒš¤2®#8ˆÚn	kÝm¤C¦Â9MéCø=Êo9VœÂ¾ÇŠ°®­Q_ÔPfãù¾øÖÃ8? Ø‹´Æ‰‰PT¨Æ”÷#®°šijtX¾±ª¦ØŒæÃñ`Î<ñ_°¦ÈÖK½ ó­ñð¸æ!ýœK\hÅ®÷•º«ÉÒ¾½~
jËu5ÓÖØ÷X‹5¹‹(òž¯ß#mÍþsØX­`YˆBâÎa55Ä´ÃGïûfi?ÒšeARS]Sº¿·†T_ì<ûKh¨Fz<‘Óhp­Ájå‚5Ñ·­xÍ¡Z(Å*gÅ!­bÊÈšªªÀ1~Lü?öÎ68ªëZÓ÷ÿÍýuknPÂ*•(—ó["*YØQ_5r[æC–ÔÙ-[Rô¤0ãRP#Œ…ø°‘mšX‚xˆ(‰ºA8å(¦ì 0ÛS›|ƒƒ¦l%Ø8C>\”}§2?æy×îÍQ·arÆUZ}Î>ûìsº›8ÝO¿k½«ÎjFk‰¨™ö¿$ÏþÿùàƒX‚Ájø@âvüô[°ÎáÓÇo\ûðIkù#ãùþœk	^y Ì±R§|ž†ÙrbT¢ËPÌrrº…nzçê “‰ÖpŒŒa÷(9ŠS£HF–†cÝD'S}X+*€µ€Õ@L¡š}ä?·í;ö¡ šûÜ§ºì7Sï …ºJ?5N 5ªÎ_:ÿYjóg'.¥’ýý©†±¾‰‰¾±Þ”JR`¬‰Ï>úbï‰/þôÅgŸ}ú)m×>ÿœöè”}M¹ŽÖ‘!š×~àÚ¶Íå°pÍÓš8ÓóÀÍ¿/\;¦“±'ÿíÉæ’™šÆÆ¢å%ôZkªôIÚ.Î­D%=xPþ°F8ƒ…M]‹l…©i¥œåææ–pÈRÖ
‹‹Õkm.WJ-BVÛ(Z+™GV¤RŸE_#<®Y#Ýmü¬s°Ð¹ÑI˜-Y2/TVELƒÅb…üˆºaÃïÒ +È+Š8Z‹Ö¹Ù¢µDJéM¡;jZ·<M"¤”5ãµÍq—Z§…Dëã'ÚNŠÔ<¯IY«)|¤9÷;RcÐ”`-€µÛÃ™ij
Fzb_h]g–IkÁ$}Ò£ÎjL]‡D'Â¹ÛÑ˜»#§¨äjÍ-èj
uX3Çµ®ë'ÄZ¾L®íq/A`i²¢‘K–[‰×#«~6®@sÖnºÿ;iíe^”¹ÝE$¤FlÒ–íIè˜í0ò¼ò ¡+%8’âˆçþ•ÎÆVy?C¹ÿ«ª×ž:ÕÊŠbÄÁv]E+GÁ—ûdä¯Á,ùýë€.›ê’8fÞ_GÓíXpòjÖ jÃÀ1ílÞ_DG¥Aj‰ÁikiVS"¤3±%¯«¬Ž2œyiœÈÍ°šMHcï8‘Ö 5ë²¬y/Hk<§i0H“Ðæˆ¥ŒdG6;Ñ8Ö2O	cµ2@©ÌDjŸGRbéÍåópí/,U)}±'·¯åþFÀkO<¬}ÿûÛÞ&Zc"eM°öD;¯VSŠ¿7ýJäô;Ë€Ö\¯ n-‘ÑÈ<Y‘ùØÂóx…X<9HÏDC[²p …Ù°(Þ"±þÁAû‡Û¼¬äe¬f^Vêèù«·Ô[‘‡k{Æqí¿‚´6ÎÛ
Ön«­9Ž³$HÛo+Ë 1M;sð™=¾ß˜Æ/‚µ.ªØZX"…E}²{¾§ÕÆºêj


š«ëôÃKÑïè|ýÚÇ`Ý¿J¬öjš|Eè.æDDlË—¯°9imÉ½K´Æ}tX»É	V£¢k¹ UêÞÀ	2Û
Òû@Þ¾h‡uMóml÷ë¾·ší<²ªÕ|¤Y–ýžÔlÏ¤5èì¡ûFH©šb¹dF5[£ÿ7É³6³1³ñõi†-N{òˆmñ¿ŒqØmf#0ZEÅnÇjŠÆ.ûàƒp¡*j”a¿`-¨Â²Ž«]p[•a™û8³Ï+X[®J²#ç„Sµ„Kc;STƒ(ïT#úÑæ$õjƒûi&ýàÃo}uý+Ö›å£ËN«Þk|üÆ‡'¯úðxMèÊ•ÃdÌCù¢ÄÊpgá¼¼¡P%#ô\|É»‘ÛTÄÖM€an–?ä0—Õ0žcÇX·žkæô­¿ÔŸh»sÇ“"µÀ¬ßäÀT2Ö‰`›;¡XÍ“šC5ë‡}#”öÎ[o2PÓ`µkÇ¯oÆäÒ¥—.õ'S©TmŠè[\P;8Ø¿3Õ¿sâ³ó—èkðé—þðéñãÓ7n¼÷á™kJ‡d­©ŠcHgãõß#ÛCÒ$ÛÒêZ‘á	iÛ˜Vl•9{ƒ¾5‘ë—5U75…8'‚ú~/®q‚!d8Láš¹÷Ï„µ\o©1×kxö—”!¦å–—Þ¯wt”hµ¸Üc——Ì%dµ¥%Å(lO¨ÍÚ«¿õ¤F]±´F@ÇºHrá‘#&÷&Ëšëë£fûHÙZ‹q›1ØF lÙ(Ì‹²làæ¤µhk"¡gÁiQK¦3^joßlî"Z
D¶óØÆ‰Ôþëóÿ\#×¤¬Ýôî”5cÏk{³M»6ÙÈ¦žØ‹Su¤§Å²,¦éSÑ—<÷…P
#4U£9¥ÍwÐ†¬ôýŽ`©QÅ®ƒ…§I)ÓªU•´&ÀÃ6r±˜ÌÝØ£-Î`BeCJÄ
é:Rs‹¢=YU*Rð%eÍëj„ÄHÛeÝm“ýµù§dÝ¯B´jéZ¦z©[U×2ŠÖTŽf¬Öª¼GÃ¸eOƒcà™‘õi¼„Ã9­<M×˜83˜^˜óõk¬;6ã‚s‡”‰¤-X&$°æJÕÚ¿Õ.2óámæ©² á4Ëƒd×ôuÒ ¬ÝÒ¯hÜ-¶¶ºóáaøÌöAFŽðš×:ðí_zî›…ÓÕÞd·u°›Áš'4Û‚dGFaF¸5gÍÈpÖGÙ
f²¶XŠ¢F¤5ü$£_bÊ
É—X½iÃKÏ‚jÀš…~xáŸOk‹=¤ªÖîš<»‘DÈÞÏšlÏQL—k*~{°¼4•}íÁÂÂyÊt¬ni!3Ôœˆ•§vk½mÉÄ„Jxy«ÕÆøü)Á’¹«9]í·ŒÕh±&w‘ËtÃ–¡È¡éñeÇ]É9~øú•¼þ†°–‘É$Ò¼²f>"küËëŽ½¶SÒ3ºš®Ú!®Õ5ê¿ ð\Œt
ŠŠjk+‹z¿|mÕ’å»ÖÿhþÐÚ¸M¥j’‘,d5ÂàêÔÔjÍ¦ÈwÃiiß\¬Ýs¸6³vf5…É]¾`Í.³‘ƒWÖ´¹™ŸøðnYÁ+fû@ªeéjlžÔaÍB±ÖdÔ¤šÉ!1Bk`)ñÏÿ0³1³ñu1íGG{ÒrÕþ)­ @õkšT¬$3’LHH¨“ŒkÉŽŠ`™e6vqa¿3«êrRV]ðt5eAâÍXVÊ'mªlƒÕšãá¼¬iDþÁEYõj‹{Àr _]mµÞ2í?|ñøáwŸÕÑ|C:Å[fÆ¬_˜†¦†³íÖrC¡AÉl(h„¬Brr+Žýá…XŒuYÔ˜†fL×Ñ¡Û±ü§<}p ©Þ<°ÚŽ™.2•Lvã]IKUçÕO—­çUªæXíWŠßœ«M½gj@Òû}JÖ“yèôù!Ô‰·O¨áÏ¥T*NéÕDêf[w2ñ^çÎ? ¯%¼ß‹Ÿ|vþ‹é‹ï_¥!8¸F¨õÚ5¨oê¦1äoÜl’ý¬5ÉvÆR×ÔuÍhMáÕ5‰j½6°EªM^kZPÙÄ¨Ná&Zs‰NNWs¶"®bMÍ" 5‚°K¬{X³‘`…2¥Hi¹w•çªhMT'\3“È¹¥$N-íè€Ø:T¸öØVÁ¨f`íÁ4­mƒŽ+TÛº~ÓŽŒnŽS)ë~ÁZ[¶oð§m	ˆ	Ì!9@kŠÞhi-',HYsnÈpúVß§9àuÓS´·N j˜ŒŒ¿Ÿ!­jiiÍ:­Yg5gDŸ›ØÎùæ×3Z×™ª&XCõ¾ \»°8#	²*J78ó!>>©CšÂ',rÅ"ýdPT®ZžÔÍ:a± £ÖL¯%~Ç[V½¦uF½~gÏbNnäd£ÞÊUÍÝ„5lw£”5_õƒÌv‚$pqÊÚ‘‘S+]¸L¹B/Bc
	¬¡ž-ó¬&ò"¤¾Á^ºdK<D Á­3çG…U°iY¯æ{cßGXû5ƒA#8édÉeî½Ig4XÃÁÿ¥mÌ¼¤Ÿdÿ{“Õ\ì›4XÓ¾ù–´f£Q=B[rxTÓÎƒ°ÑPaHJÖ,$«Â1êAÍl	M›0jÎ4ZÂ?SËóÍk+Ýjlžþ»Î¥²M*µqÓêë×oì(|ì	…c5B°F$Ê¥lÇp‘?¬êŸ½ ƒK‹@þÓ›ÌEÃUWU·äÌ9ˆ‚âçšÚæ¦pMÙ‚–†ŒFWìHCm,:‘Jª%è²f°VÒ!aw¦„Î|{_pÆé8l®ÈjÀÚ¡ëãÓïÇ£æ£‹ÇÇ¯äýçXÍÉkÚn[³Ö~9nC;ó·­å¢FíD£îËGh[˜_¥ÏÞµ–AÉ%îŽôŽEÚ&zIêÏYŽ¤†yÿ.„3úanš°‰Î–¦˜šæ«Ö,ÓœÍ=#t¬º ÕØ3s o§¬ñ0
c32"«XÍ{@f×«¨–í-âIM <©yeM!aÍr§,O°†®è\V¾œÍœÙ˜¯K|ƒš¥gv?	¨XB>õ2.þO™‹ÿîÕ¬Áj¤@ÊVÄ´5µ¿®à„­]m>Ž"2‚ÄH®aÎæ ªª‹ÈsNbyVÎV6/ž›L5cÂ˜jÎ«­MÓjáÜK*rÿ¯ýXsc5Cª»qá89:Ð¾buo>r<¬áýH3l0¬<mp	‘13¤4ø•Uò©Y‰Àsô&:“|¦Ô1Mðä@ðÌDµÁP^¸92¶cãa­¸SºšµÌ½ë»¸MÎÏþ×Y‚ÜMûöêôa:Ã]£1š©iW­M¿}îê‡‡Þ}ýâÅwG“©Ä¥ó{Þ~wo2I$ù:@»ÀC@›Hõ‰¾ÞÄïûäXâÒÞ½{ß˜žºöÞÔk×À5Ú®ÑÈhM¹ÓÈw¤®ÉåLEÍR´–¡¯õõ¬)ÆÖ„i;žÜ½’ÿš(lDÈ}arA>jk¾¶AYÀkvAK¬ÛÜW:/XEC+,,ž7/·DF#¸øËâ»üŽy%ÅÐ›t5j]8Èò ekŠgŸý-°ö†Œ¡5T5ç;‚½Ü1X-ÚP_‹ÉHC¤¡M°FxX#É1mÑoÑPÏLóq´Vk´¶2ÒjeAö¥¼¦ý[Ñ¢<ž&L[‰(´¦ +öi;H°šSÖ‡‘€Ó6#>˜ùƒ?fkhCš](º`°&öò.øšV‚5[iX“‘>°eg(Z2Á„Ÿ©äfíz^ k-ùˆj]ùkyi^˜H¸Ns‚6Û=®#€U¯q²ãÁZüüa²Û¤i*l.X“²æAÍm«}Wìà`¥9uMJÜ‘S+Ö^¡n­«Ó´°e
óvdT¸%,3Û~M}Ÿ5ŽŽÖtò´d?rôÙZ½#žÕd<¬ÙÇk<Á8Ž=«G³‚¼ï[íGÚÛ}$Û­"Ó%`ÛBÆ‰Í™a¢«Ÿ»iòxÆvi&¨)T[J…mP¯¦k÷û
XÍ‘˜œ =žyÓT«Í`5w_v›5¥f®!——´uYB–/šÜ0ùÁ"þ¬_lÑÝŽmø
¬ÑgM^þ[%­=ñÄ¢»Êe#i/TæÿÔ
Ž.8â2)$,›ßRÝ2¿´|.çáúh"Ü‹Åø§;Ò\kk“çPu“(Í9A¦~f+-v¬†”·ýÕçÿý…©Ÿ§¬$+L]¶†+–9~ò£ñë‡Æó®\YFÍšëC“mpukXË`µ®@[KOÕ5-Mn«uþD÷
Ö0^®£!<®¬™šÐÖYÕ²ÐLþ+zûVFHÈ(ZùÔ.¡ÙÇ_¾öÚ—_Ê¾7HV¨aƒÕÒÎÝ»D„¦Ž‘5'­9êƒàõéÞìHÁšÇ5ñSFCì,ZóÚšä5†!MSÖÜ¨ëŽ×2eµ ìÇþŒþj·I€Ì0î¿ßev’êÉ„ÿ©ÛŸ¶~c6r6fc6¾.¦ýKìVÉ Æ·)ÿŠ®¦€Õ¤µÉË¸.0ŒÌÆÆ"©jlDA¢™‡µ¼*îãÒÊZ>·£¬åðùêÝûç‡c¡9±ÍÏ §p"m.ÒÏF¹ZrðÿkÿþÇ<«YÁÚW.X#“ˆë=•O"
íÕ\Àh¼¬y‹`æ6RcÁÌEB1š«u[¸°K,ÅÜ‚| còˆ´lÇî0ËÊƒêÊx	”¬×ÖWWkVîÕçQÆª	ý‘U¬¶ô±çn¢ÚÍÈ·ôû,^²ë÷^"ÄôÑw/^ÜS?zèxÇè¹sÉDjhÏÛ{OÅÕ`-1A$êaååqšHñgH­ŒLÈd÷ÊDÿþ—~|è½Ïo\{gê/Ô­¹@\;ƒz÷WáÚåË¼¹Ä5Ÿéq¢»Z™ ™ºÆ°#È„ôñoPšž?‹Tê·óú†&~ÇfæI8ÈH6$üå)Œ+Ò?Ú`Ž"¹Awl[+Í-¬Ù"ËÅL‹K™©ßÚÒ’YRRÈ|ÑÆc=æPíYPÍ„5kßQ—5.ùê±&GÛâ±ÄÕjM Æw4ªH›0]Íç<F{£ñ(§¢:B„\û´ÐaM½ÕÖZ7¶·Xò£@k:êÜb‚®ØGa56GkÖ\cìt§5C´ì8Á{e§B²i¸½ÆªÕ5Òn-#ýÑ`™#¢L!å¬uv>ÊUÜö‘È|è	ÚÓÖL5ãÔÁZUKóW(cXVóùäeÙ™t5²ƒrJ¿l_±f‘=Ü k×<­ù0W¡»$¬=¿çT>&ü§ø·Æº²ÐéfL‰´»£„3aÌ%ñUSÝÎs9˜$g‘6™ÉjvÑXM°æhMÒÛaMÏP.$s¶vFX¬yY-]È€5VÆåÈï*×Äl®`=PÒ¼°6š>ÚÃZòDÿà¥áÁý'‘×xˆ×\KloÝ­²šÅÛÖ<‰i®žk˜,ðÈåïqó,Vó.þÌ\d\¼ù”2ý‹ Ó~zs”q	ÜUr`Ã+Ú·cÝÏ_cÇ¶oõ°f¬¦Á¬¬MNN¶#Ð•ÔøJ5_l8Ÿ˜¹Q¦×nn¡uÌœ’9™”„›Cók’©xs¤"R.«m#ÿ¹¢º~‚æ0 Z4‘ê'ºK
eéÜ{7­&â7œäŸ_½jòšÁÚ¡©Ã'GZNR°¶L†ý9§0¸¢[Vó…9Dú©üýÓÀšÕªifÂš:™Ö)
ê`¸µ=Ô±±ÐÙSWÅg²^P­X)·¤ßí›á+¬™ ö1"KpÛã„$5Y!ê¸\°Æ	¬æHN±„ÄÁoÞCòàC÷ß»„ÝP-32Õà'mBµ[»AÏgþÀn¶þîÒ­lExØ°šO¿Ìè„mÃÍ’6ƒØîuœ -ÿq9 
’>²FÞ˜ÄOqþý—ü‡Ù˜Ù˜¯…¹ÁWte>¾LàÕo¶¶V#ÐÐkõ‘‘ŸgEUù¸Ô-¬ÊqÂšøÈŽ] šó}ÝUµä¸jl³ÏÂÕy~<Vwêp¨¶-!yêÿ¢PøÈ™q©XXs¬æ`oòüÞ™>½g´{|$?oèôxÚRö!°€Ô	¼‡µkÎQ
¤‡µnƒµ0K~”Š¦Ò4Æ «½j³	~•ÅÀ'¸&AˆrA©šTµ;UôÐOÒ¦ÊÓi§ºÍ*§V{¯~XŽª°ÚÔ…i`š‚£üDŽ~0šŒW.;9Ô]Î;'ã‰äð^ÌEâq*ÖÐÒ^ì›H´‰ ¢ÑhB°60«®«Š÷ï|qG_/JÛð»¿øâÆÔÔ3SÓŸ_sê^#À¸¦¶kÿó«·ŸUéšá"bM¬6êÔ5³	*ÕˆLlÛÍÅÊù‘H}SEQuàüxÐ$³9¡PsÈ+kÐ–ØßÇ Ò³š;¸3€5:æ²T‚€VœË’!]!:Zn!¾#åK—.êPƒìBzecÙqŒ¯nØ÷ÓR¤Çg±yX_íÐ×8#`5¶í4¯â+íèæhTvˆemõ$=:XCaƒÝÒÚšÎã5ÍB·îØ„­ÕÇOG­-
«¹²¤ÑöûtÜ2¢ÆÁ‡8Í€í“u[Ž"bzm-#Ò	kÎÖð–±ç¶·6½eQ‘‡5ÒXóLäOì:{*Íè—f0¥Ê²t4ÒÛ¬ú…s^i3uŽ	kDO¼8ë¡Eï÷,\+ ¾-®}T+¼<¯ÁSìF”bÆŸ%³¶˜±êú¬#¨jÚŒÑ²}ûß÷ÖÌ¼å=^µxœº •¼BÆ-iÞZ‡¤ÌúÇFÌ)$¸ŸƒuÆ†þôL—HXõƒxéKo8â6¡!-ŽWàÔ&dA’Ù®1“Ö‚™¦ããÌö@il¢5]d¥Aª-@z*ÙwK’
×áa¶KÃ—­t­CvÖû¥À^$CW;úö2<968þÉqä¦ƒÇ²œ!sŒæD9‚!SŽW¡„9XÃŒq^	Á/2²ß—ÛkÉÝÀÚävþ²ÃrýÙÉÉ Öøñe»² ÉIÜÊµwµaá¹¹wót{'F½ýŒ&ksy[SíjÂÍ•hjóæÎ/+ì wKU4•ˆ6TE"‘êæ0iÐ½j–/;¨ÀrxÐ™ö[1ÀÚUK]·ß¼®
Û`53">•wum(oüôHŽ™§?Õ2Z¬±ßVXc35M€æÁ-ÖLAJÕX´‰f<Hë¬#Ö\![O¤v„ì–HseþÂ¢*`	™	ÓÓ˜+Ñ‘qÕ.œFÒ~2‘¢Æ‰`Íê×–c»¡óÇïÿæ’%rã ÔÐ£îÍÎTd&AMÖ¾ª¬ùš5{8!MZÚWq-=ÞVWË¨W»­e¿Ã3:Á®_Ã2 ­ÅÜ#Kî—m?
#ÿ1Ö<­¯®\øÆl*älÌÆl|=Œ ¡µ'ŸyŠÔÇ—'Z³ÆØ
ÖŸ×,ÒÁ´f°Vå„33ÄBKÏ¯’Ìå`M¹õULÐþŒ¬ËQGœT¨6)CÆÚ6ƒ5X6ÉîÁÂE4Xó¦ýÆjT8'OOQöõÑ©¡Ñî9¡ññßñÌõ¿çðž•¨a¼7ª	cFZ++óÂšx[‘Ómœ,Ò?Í¹ŠÐ4L€âã5ÊÖ’ÉX<A…ƒ%ö‰Óúv`+BLÉç}ÒµÀ¶_fÏ>±uýj}Ü“G#[ “´DŒßyÇlú>Ä	òâ»G/]:ÜŸ¬ÇÑä@2OÉÖmgª6žJb79ñâŽ^TXN`fQÈÏÃ+ëªêüz{±õ¿tbçgŸO¹qùâ‰ó7Ö~¯¾kÎRµk®ñ-y‡\HpméÝÅÃƒ1Ô5zž?¢í°ê5Å;ÆvÛ
[C}­‰ß¤+õMŒÍÚ¦œjnª¯q&LSèš1w¾7¶¯VËvï×ÑŠÓÊµŒ{?óÂE‹
­=vÇÒÂ’R•±•åÅÑÌžàkÝYºZ!ÒÚ6#6V¾/IS5køzw`t4ÖÐP_ÏŽM7n+£qò 	8Ê
`F £µ%âõÌÊÚ[yNo½Ìš£‰-Ñú¦¨t¯øPDàzb3‰3èÄÖhM)§®ÍÈƒÜtÓÒx-`¶³ñ°<È,`»£Í˜^¸ ¯y»Ù{Ú-CÁò7"¥FA†¿~Éh‚µdñÆ›ElÞ$€5¤5=—'kâ1½‘RùN¹öQ£2Ô»NÓä¬q3=ÞÒ•iYÒZuu3û¬1vë}Íš<¯qÉçG2.êÂ
ÄWÉ>ÄeAºs+?¼D]j•¶N´Æe(K«ib6¦º ÐQžÓÜ^Œ5[á~×V×âmà2½1—ŒÎÚGÅl,Ò›#Ñ¾Ç„5§¬ýãˆ¼ ¹Óü]µšY}} Í«jÆ¹ß—²´>¬õëÑ/f;¡MÊš…ZúÃj>2œ ª'¶ã3XÃðLX¥‰Û<¬1ñ‘žy9Ž©ÂµLaÍ›÷ÛÔ£ž+CØÌþò>Ø´XÛ*Ýy&¬jü6aX{ö,ñÀc““ËÌ[tà®¹s¼Ú7ÖÞÐïLZ­!rŸyøäTU@g€Zµ`-Úf9w*Ú›‹ôóÏw¡o‹)V{þ—?ºúÆegÞËþsþÿï—/_¶4Èë×É‚¼8}=oÙé±Z6¬)òÙ¤æd3fÐÛ~ºÈg² ™ØšÓÕ¶±þY˜ß…f°¦ÆkÐšÿF:cáTÁÏ”+ºT™Ðò1J¸wIOûr˜L´& c®#¡©ÛrlrÑ§`˜%T«™g?	‘ÔŒÔ‚ðuc^Z3T³=[ZófF×Û-1õwh–-«¹Gªù7HÍ?Ym¬1•E
KÔ«Y#pDÅû—ÐFŽ	BÛš'i·W]Mçƒÿ2›9³1÷FcÄnU­=¬=­©56åjb5œpi”Bf°¦C¾9‹T™-¿zÉ0:Ï+Žà„kâ¹…šâWQi=MC|Öâ3ïïOvÇÚ+WCYƒÕø¡³°X¬æ“ !ÁÚaÅÔ_ÎºžOc´œ¼ÑñSAÉZ%uU††*k°1×äP-
Ìo1âò"5óP­Øì>#«‘i™”ðÇkã	`Ma°6Öw³³ZÜ>ì­AU§;T£Tô>ï5¦ª™º†¹È›çÎ½¾çÜKÃ X,F–#oPâ°1£ª¢ØùƒÞ¾¾ÞxŒ~nHj	¥BB³½}|õ-öÁ‹½ŸýÏ‘ÖŽöéS¿W¸6ÙîÉ…œ‰k«_y…eàÚØÕŠ¡ºd;¯‘ Ö}¬ÜíV"”­±>©Ž¬lÒw¯P³,FÀ¯9•õMõM!'µ~þi	ÍÀM:[Fpj@ÇŒ‰õÃ.aRZ­Áj¤@š¿`Í&%å¹ \áÖí¹“¤KÃcD¡k€À_üà }£CûÚŒ4T£5GQ'ëëKË½X˜²úÆÓ•km­ÑhCu¸0Ö°²·•èe±w]EK=ž|½ŸFQ1®l	Üd'7[­½®òDóƒ„Õœ°–)­É‡>à4„†7Í¼?×>½¶}²ÎwÇ†:ŠÖmÁgÄ™‹“ìlC€Xþq]Ö@4hÍ`MÞ šöÀHx­ŽÖCZã	*Y³FØV¹æªÜ:»$¬k˜ˆpâ"¹¡ß2&Ö|/mvÎ|h†£åb–Š^ŸAj¢±ÕLŒ×CÈ¬¢5Hm‰g2‚tÜ\ÝµÎ5@Ì")Xc•ˆ%(cÂÔBÝÙÌ«…cÚ_ä>ƒ5Ë˜´þØkšØÍÒ°¦»Äj¦£µ3S$•jÆj¬˜hæöìØàF0Ú8a¦ýÌ`´`Ãrß¸`-ˆQîr3‰½‰K„`M;
›÷‘²†¤åAº‚µ@W×ö¤YÍ‡0C/_ï3eóN^DãVÛÜm^Q³Á‚ÍlÉõK‰¹êŽ=OÔVVsìU¼ ]<¡ð°FÈ¹ÿ,…k8‹;vV,w¶|NMî]¹ó<²UjÀT¤´¦Ì(‘IM+ÌËðï×WE&Ž¨ÝbSe¸6‘T+b«1l€ï~ŒŸÚx?Xíß„¹È&¬ýU¸¬]½ú°ªú(ïâG'O_?>}z™8×Ü³<«ejkÙaºš@,}
—ù*ÖÀ®€Ö¸UËk¦ióSÔq|ŒÕDk\ÎËi©Rc5|ûWÆÂMb¾®üª©TÛ…W?¶ý»V}üñ*ã2æNK³²µ%Ð‹&¢4ë
íƒ¶cÔu‰p€5Ïj^WËjˆíYÛ-”5ß›™æ&¢ÍÛ‚‰=2ƒºu½ã-êÕ¬¶t4OkéžÞèƒ¤s._µTU9Ù‹ 6>¾|×X4Ú\/˜õÎæBÎÆlÌÆß9«¡ªíØ½F{
Jc7XS@l‹åØÿÌ·;»,d]|®àÚ;Æø-O¹u„>«¨ŸvÍÖà(åô· ³± ¬USA¿â†C9µ)uÃV>Jº\Íµ•î(¾û×Ïms¬¬ñÙéX~ÒÀÚô/ÎY˜£lFCB+µœ…•áÊÊ0!¡ÍÑâÂ’™Ëd@e3‹‘éh.’g„˜Ð{ú:v”œª-[wm÷@üÎ.ú,îôM°“ê¥Š$¼ ‚PÍÕªñ	¯êtÌú-Î€iÀek´Ã~sÿ¹£Ç÷òä8‘J‚{Ôe&Á2Y\°2Àýƒ,Y[!¯o÷âÅ»Çvüì¿¸ªúÙÏžÜ±åúñÏo\=þÅŸ]Ÿ¾qÆÁšº®y\ó´®‰^Ó(rG1¥kI3†$œb€šM«=µ£¡)²X£šXÃi«‘HCÈùöãçÏ:˜6dô²Ój’{‘%«y[˜[j°ÆXb°–•êZq–"jrî/Ã-Ú¸´´ýÎpÈjÎa-ÛžUl}aíƒ¶©‰9PQºc$ÒÄŸ¿!Ò‹·!³­T6$èÛïUõš‚$Óæê¦ÒÂxDì}MLH3CX“‹H":07RcÕ8Bl[ìÜÅ'[N¢ªÝÌ„”}¦Å¬fEkÑ4¾™~ìÍÕ8Úž†»ºn1ÝFÁÍjµ‚,ÍIdÚ\X·y@‚d:Ó ”f!™¦À	®g¶ç»±ËöñQ(ÍR%^º@‡#K´¦'Jfô:k>²1Ò$
Ö|¸Š´±5Óòý@X#ÉKdueÅÃµjSÖ¼Ï$ÀDfË¦¾‰Ùt$póç¬é‚Öa1žä1Ì!šBs¼oµ+ÇQºœ{½.Ù}ŒÁ9¡“´p6©öjÞ²?ÛÊ_€¶ÇÈlÏ>Í|‹5G†ì)C[”¹E›ƒµ&²YÆŸÝ*® 5¯¯‰Õ|ÑÚŒ.ko:am¦²6njZÓ\&¤Üñ¬¥	-¨Iãk7á.£3¶ñ+žÕpüp	Šd<Ó§ÚjØæ•—U¸A"OŠÕ2­û	3î77Ècí-²
³—õÍÕ²,›WV&cQ[VÙ2lCÅ[WUM6U7´á8Ä§iIIk²1V‹ÇºÉB¿û»¿~]m«Øe.Â¿˜Ö”y¦¦«M_É?~ø£ë‡4]ÍÃÚÊ
’1}tØ–+ -² 3`Í>h½ÑH°¶–£k«¦HGk]|¨V¶ê¢š„H(iìQžË3¯IX#h´¶jù®/×<©<¾‹%JÖ„g¤ÿ-A^rJ“B‹ÎR&þp÷SåE3lhaÊŒd4ÄÎ¨Y›©¬eûAú’4OjFmšÆà¦ZÌªV„5Oj·Ö26“ï£Ï€´A°vÿrˆôñ{pLDù¯±f,ûZC”ty~ˆ$
V6ÌæBÎÆlÌÆßµi¿Ò%ª½üÓ—}|4`*^Ã ¼ÑHÁý|ˆ7¿Ërˆêê**à1sq
›PÈq•Ì*@m4)Õt‡•¤ØR«ï8¬&“ŽTŠ!¦¤Â—¾ûÝÇô«múÅÑ÷_À¥C¬vù7S/^¾zRo0r%!oí0-_ÿ#ç9°ZLþ"¡pˆKº!d’Ã C,/‡‘@\›°Æ%ªÙ¨j&µ…m‘àîÓ+$,Ò©ƒwNÀj’•ù *à6«UÛdµj–ÿÈ‡<¿‚™ÔíSï½sãâGÓ‡§ßsÿþsÓÓ'cIŒ>â|
ð¦&Ô³ÄÀ y+#ÍÝƒü'a5¥/d,öBÍ°Zß‹½B«ŸQº¶åÄù/Þ=wþÏSútóùé3¿¿«ÉgäÌ\£Þ^3cÈÕÓêšuÉN¡iZ2äØŒ\ÈÀÑŸèkh®ôiµ¡6[0¿©bl¬É}kb©!2øâ\$æ&Ö_Í»?ÎÌÔ5ÝEÈZä.Xc5š­™]ÿ"JÖî(--é¬uÐÈ¥Å¹å‹–v”—–?°•LÇg«=kÝ°ÔcÍ±ÂÚÑŽD£ûŽ4GT—×©!°‘èHÕ]=VýÕª\‹²§]üé«Æåh¬9RÄÕV¤ZEj)°(ŽËH<ºytÈd5ë¹¥±³r,F[?‘7Îñ¢µ RÚZ¹æðáAÍß<çÐŒñöa—?iMŸ´‚XÖIíN³Ø…¢Ok°<<yZsCc#ØEà‚hfR›U«I=ã2›N95×Çµ]<fcÙ±š[ãøØã`­óQÒ$õÒ]ÃhDT¨i¶a¬)=°‘±ÎÃÚ¦ jmµÖ¶st.3H[K§APå]›ÒfŽ§X3mM­ÓØÖˆ‘4­ù†m
FOmÄ)üCôDÍ‚fGÂÜ–!>{uÖõÂõàæ`.ýB6ÚÝ¬ÁhšIÓÚPÓœRµ}GÌ’°ÁÌEÆ‡Z7ÙGÏµ-VµÆfÑ>¹oÔ	kü™· hl6ÚšÊÖœ²FÕoI-ÖŽjâß__Ÿ6Ÿ‘#áT4Íé*ÁÄ[EŽýY¶#¬1¦çe¨ä7k¦“2Zvb¤Ôí”Ô Ö¶“ëˆ•ˆ·ƒ|˜¿Ñ¬=wlë«Çîš_V
¬e&\ú?X üÕàjª¨¨Ä¤°üàüœÊúhiÉüæx¼¾>VMÀjm–©Q¬£ßÊ]¤qüd9ëÓÖÒÍVdÓ¤ìû©‡eÙ°¶l|dÎé‹'Oâ	™ãaÍkÌÿV—5…_¸…°æ­û4z’;
ÒäðC‰šì{(UëêLßÒR™­ÕIX«k©¬l(Ð§tþï€5YõÃ`ˆf»þcøkð¦Â4Eñˆâ!óqÇ¹ƒ F&†8÷8ÿþ{³kÖ|µš&AÁšµì,Hvôä¦ðGfº„³ñáEµ€Ô²² Ù¼a¿s±p˜	½)ø/€`x¯œ —P‹'t]õemT¡LÙHÅ˜â_þi6r6fc6þ^Y(#ù‘z5L#^þvÁÁ¸MÑØ‰ß~ü®'vÄ$š™°¦Ök„ ]—0ad–®jÈË	SAÖ¢sËÂÍX7¶è·ÍTJR©œä0ø³ñŸüäÁ³gÑÕøý:<¿a]n¦¦G»÷ŽÂiùWNŽd9%çà/É”‰8Âµelœ‘2éT5œBB*íïG“Ð„pV¸¦TDøLò´×íÖc•úsÆºÛLT»H”(ùŠì4ÐŠÕ~¨„Í³ëWóQÿ!T³Úô«—oÜø•dÀÚ™3(‚ïîÝ<þúÛçöïï=}zYSœr·d*I;îŽ¥û÷§~`½©A¾‰¢H"Ö‘ÂVd¢7*öªŠmqÁØ¬ïncÄâd¢âÀWàüŸ?ÿb3B¹×ÐÕ4ð–&èýÅr!/;yÍáÚ«Â5µ]Ãïrx8–
ºd›×H×vè]wp¨—VYY±eÍ´ƒaªÂê›æœw,GttÌ&XËÐÒ\dÀëå¹¥ÌKµríØŠäÞ]¬Â5íÅ²ìgÊÉF&‹äÜ¬‰ÖÌ1…\È‡6«ïïŸÖ6<±¡½frÃ¾x|´½¬ÞLû,za5|üÚPÖ¨1š]ÿNVŠÓ@¹ÞVØíi~u‡ŠRC›#¤9*<Z'¬½Z¤rD´6SYÃ»ÿ…¯Z{>[Zƒ=Hƒ4PƒÐØÓØÙNÜ¦Xíö‹ë
ÔgË·‚ÅŽÕ. RÁ?lrzTxìâ(2³7Û]»ÎÖŽÖœï>SäÄ\ÎÒf
ÖXÂ¸ÆýÆo°ö=ƒ5„6q˜î1WÈ@èó¨F8>äÈÃÀ®Õ§AÆVßì…½Õkïû>kkÀ”×¼Zy°àx*´h'¬ë¸;½q°]hMØ¥!iÍ»IšÅ#2šÎìS—Si¯É[x‹ÿeÐ™§ºwß>	t÷9/ÈI—	iâš"=§íÑÀ8‰¤ã4 íˆ„6•¤‘¹áõ4¤‰ç¤°ŒÙÇþ²I¡©%!6m°šï·¶WÊšº¬y+È^Çá5`mï­æ”5<œÏíàÕ¬™°Æš#2–3a‚±š›Ñ]}-ÒôžbÔŽB¢ãØ¦í…åÀÚVû‰¿ÁgÓiÍT¢zXÛ¸Uqlî¥OZGß‰ÛCdàm¢÷+«¬DH…Ë•2ª…ç„½Pu´6Nšy<îmû£iV+/þîc|Ú<,]íù_üR¬&/+‹Ÿ¿ñË·¦°‡:|ø­‹(k‡§_¶`üøée.2G°æ M'®ÙÌŸgá'(f_…5çç¸‚‰‡5Î™@JÛv©0[W>eà\ççRÞ—?CKU]Ê\~^ËÊÆ.ÙF~é`mÍòU»Ö ®½öøCcÓ¯¶Øð&".çQ5[«0!±i€l”³=´j°&â6`í›_uÑÁ8*H‚´=‹Õ|º#Om:ecâzd÷Á\ 3aóÈ$µ¬þjÆjnd×(C‘årí—šˆ›
'‚µÿ¨¥vÛZ+ Öú>™­\›Ù˜¿SÓ~M¬&ƒ5E­ù6(Çj]D•’§0Lû>*ZZòH‰$ªsXËg1¿çG“½òYÒ÷åÜ„kæ¸ïÜÚÕ¦jkU¢•ˆbÓá+Ö¤UaÖñV öÁÚ[/*å­=`¯OŸä…‡NågFAaÍÜ Ãá¼…90YËÇ³$Ù‘FØX±H˜´F" Afœ(e’=G¯ÇÁZSCßñ6”5ijÆj4W2A5ó€$k‡|Í›(wPí¯¿™º:=uV“¶vMôtùmìCP÷wÔt–Î	Eãƒû;`SÓ^ÞùƒpV˜˜P_Ãâ‚Dm·~–ÅÈÄÄØŽ±¾ÝEÖw~®xfôíèe`O]?þçëC'‡z?ýÓSÕn¼÷¡5^óN#¤óµk¢5‡ki`fêZ?¸r'™/ÉDjAP·FÆcU¤¢"RÑÐ²_ÏÃçV65Õ‡œ¨ì×![˜fÚšg5ÂÏ¹â™Í­—äj^Ž?ÜÝ%´†ÞV°‰Õþ{gçyîùý|Îj¿u%ÛÂFÈQä£Ê	8ˆI˜2¦”86á5ä[ ¼pW5cû¸8~wÒŒS°Ó:N—n„¤J&ÅEvŒƒÝ®œä°;9:‘K©z²=ŽZ)‘Õì‘öÃþþ×ýÜ<Ì„6:ŸN>Ì5Ïs?÷s?Ï vbf~ó¿®ÿÕ¥¿Ë‚d¶_?ðêÕŒÕðÔ,¬	9Ö.·Þ·o¶3uå½T"ÛP–À²Q™‚g} X½|!™ZÓ5hÍu^S= óŒ6líÉCÉv><€ÕŽîn
DØ…kå
<£C5]Ÿ4T[Þlp¬æFÂ’µ7´¤5Ï`_”ùûå)‘
MâTñmÂ,ø	¬>¬9ýJGGfÊ,œ°æ;²qQIÎ|¦OOë z­l³Œ†nÖMaš£ñ .Ê¤´=L2$É‘,î!/«Çµtsºœ·<	Í m×šý\€ g…‡ÞNïˆÍnÂ”¦Ý,:Q—Ò ­ˆŒQÈË›‡Xú¢ç$B´ƒQnbë*R·q¦6-j%Ã/]ñ=±]þcFvv²sÅl„¤7«[ü ‰`pÒš[J¥FX€Ó®L º~ML¼…´Æ4Å¶¸2;»ïüˆ7¡Û6N#2ì§‹[*¥,É+ýÃK%kCˆkg9² »°îß"Ró±C×þIà×°Ñ˜:ÛGÂ†LXct¡ë¶êÏ<¬ñ§µùÈªP­YþÁÑÎ:‚j^¡¿=[$2þÌögÆ#WöíÃY\¸¤IX#OA¬¾Ík˜6]Í½hÈWš»fYGîåÖý>Ö¶5%$,ô”ñ]c¥5‘UÔ3—–€l½½É“¬â.r2êj$Xï^=b$¿úÚa5ä4Éj‹ä@^¸ ¬]²vØsŒ®z›kNØfÍÍ–™Œ„‘šö¿Î^d=/¥»ö`Ý†u¼–°F«gà¯ÆkºV«hèÜÀ5è¯yO÷FYy‘NIq%kfùÐ#Ó µ'¤›}çƒ_€iœCif$B«1®ËþÑ-Hw“þDq—¤5j»Ö”Z¨-³Ëš£µ DYÚ}¤¹ñs™º;d‚š†4Y-´ìO—Õ¼ªæû`­¥7Ãf$ñ‘ôGyö6*ÖNýÏÖÚe°VXNËƒzí+“Åµld#_F#HMÅi²qBšR¢
É+<Ê¡¥W«1—‚æ`*3CÈ*³±ENÚl‘5*[kk«äå\Ÿpê9--UUmy•uŠVÒ qcª©Á?–W(»Žoî¤ÒXÃ^„jïk—§ñtLÍL Ý}.*QÖòò¬¹Z¬l3FËÙ(|#[2¯´2/&<cUí€žgb°ÆšNs¶mŒ©¬a.‰èT_Ï H±¶Ïu‰!XMTq.#r/ ¡šXM^ý`¨FJâÍE²7ïâÿ1?÷Ë‰ýWû»
\fbh€·TàRAÔt|êäüIà©)¬±5
«Yf$˜8VÜPx8ƒç¨?Îo9PØ’ñšþ>Ù1}}áÏÀÉÿÓOÉ…\XøµXEOÅrošˆkÛQ×?‹,E2¤ÚæR¼æÚ®ñg[²a‚ÉiÆ¾zÑZù+L¢zÿÕÚU"dÓ*³ðomc,Ó€7N4]ÃB˜ÆjEI‰M]÷ë²\KˆŒp£Ú®ñ&Jy.	’áyOµÿÜþ[O½¨±á'âaMÜ&X1ï¼2»/Õ¬‹ŒoÚÔ[Û¨Þ´P³Nkp™å*A¤ÖXˆ‰ŽX5°¦îjÈWdœôGÀ¨i·q™<"+àµ†òvïéF<¬¹²5yŒÖ2hÍ™÷{[¯«Yú+1˜f0’k(lÅ–O¶§Á'¡Àö]1¼{XÃÒ0ueA6ÔÜ½'PÓ¸'~ñÏDXS~£Ç—w™\CIkî¡œ†uhdÛÖmÈxÿC|†eBq-È¼Î«í¬¥™÷oçaq8x€n~‰ã»VµFL|d¬%Z
˜Mœd¾ü¶ì®j‘ƒ Lç‚lXÍW…MÓ$”qÍàÌÑK„;çÌ´/‡5Ÿ	ÎiÆ’†Zó9<lJkƒ)D5Q´5{EÄÈ>wÄ5.‚q&§lW&éÈ0Øù gƒã/ÿæä0¸6,^³M#×ÐÕð‚TÍšw‚d[&¬ýò¢0Êq^aâ£¡ºfë–·Â&ÂS¡Y€y­Ù{FvÕ‡
S#e‡´5$µÏ¼7>{àâ)c5< ¬ölü£¾uXö"·®n®Ù X[í»,ÿ)½¿Q4ZZWÛÚ14©YÕôÒ[¤mm¤@-3ãu÷É“Šacµ~ºíójöóTä¢ú­ j×~>í]2õÒsiŽ_±ï/ÌÜð|¨Œ‘Û€–“Jk+zlÌh±–P™nWÆcw:­)ÃXÀ§ê¸æJÄ¹ãé¬h­5Û?Ê_È’¢¬­’Ö¾eøÅ”%Y?
Ó6oeÜúˆ5ÂÖ’æ¨N@Í·Žø(–yÿ×„F!ªyr²=4îgÏ0ñêZÚÁ›ínuo¯«ö%|ŸÌ,ÈH8ÍP-Ì€dÈ’99Bk›Ù1OM7ofüfÆÐšúØÀjÊ¾¨—'öí¿ÍV®e#Ùøò™‹XÁšƒ5s-`V_œ_O”WÖŠo¢5X­YÁ+Cž^ÜNRF5¯µml€ÖªhÓ©ª6–Yo[¯WüR¼EHQ¬ªæW$p¥@iaFá”~cÊÒ‹U¿ÅçïÖáW¶¿Jè³NÚ“¬]ì-Rš¶R 6!J³Ô¬7ž‡™?2Úúõ±^ÃG^—cœäx+ÛuÍ×©q®Ð©{£žm¬jˆ|Ü+Vã~m]¼×Píù§©–R±ÚvLÄ<ª‰ÕÔíLûÇ7ï¼ó?îÜ™»ûÉüÌÛ‹çûû#‘ÞhS}/ÕçQ<¶¥ l 
£ÁßlŠb¸á©Zô÷Ö5"®õ¡éõ=9Æ«­×ˆ©þp ÿ©aÈîÉ©á’è->9÷Ï'úþøéäÌü‡7'g>†ÕFý7‘×<®©vZÛ¨kÏ«t­7Ž‘Fþ8(à36¸˜¼Õ×Ÿ8Q_^]h°V¹j-tFÁÚêÕ­-"7Ž­ËÐL¥i2ƒ4bó¹+ÀZî:nS$ÕØ‹Ô‹©ˆÛ€³2å?îßïöûÖ­)ÚÄl¿œ ƒ‚µ§–ÁgÏòÑ8o¸fg±Ø{ E”Œ×4dåÀZ­^Ž­;¶Ã5SÓdû¨s.œJXSŠdR¬ÐÕ;;ÅJ®•W8Z«U ¬yX›RÏ3g0Á1\ó–¬}©/¶¯W¢9\óñâÊþü'Â+ÄÒ	¤¶[™·U¬‰!+Ä,ÃÐŸsNÉ,šq
ÙÐ1u@'XSi³Ëˆ´{º»eér»÷øÞk|´¿&œmôh3ÇÐ%ÈÍ9ü¹šêà´<ÖLÌ÷èæÎw·k!­ùNkð™×ÖØ,ÜE&œu¿ýW°€Ó\}™L|!¹	t2,ó¦ü„¹@¢Æ¼Åe"Ì™tEj,y.É-È‚t.‘Lt*î³b»°<mVS×u-PÙRƒ)qZà	IkÀñ5jŒ#ÁáŠ-$¨aSc5Áÿ`4™²l0‡XMœfÍÎ*h){ Z˜©˜”¤ÓÌ–uYóÔÃRˆAZ²å%am¥2µpM£¯{ØÍšè[«µLBJhŒ½ªLŸÂÈ;êÀö}³‡_9L ­¡¤]±=ª=‹µÈÎÃ Ýì­«¹¥¥úê0`ÍE&ÚV/Ae˜	IçÆÒ:õø@¤$F™jmG£à>–½5uúHjJiú[«ÕœÙñºŒ wÞ«9azc¹@Þyõzà6²¦maæý½Üåœ&>#,Ÿ`eXûË¬–‰mÜOÿyoõ¬ÆêÒâ.]w°¦›w)}Ð«B[kØÀ‘ùÂ©>ûì3ˆM)ŽÖFV¡Jëñ­¦°™´ôã¨lì.œäv?	ƒ";øN”Æóì‰ÔÂðì$J£5Ú2x-#!ÒNB|Ë`5û*>Œ=§ý•þj¦©±ùPÛhM°v¿Ñ*Ö@U¿u´…¼eõÔ5ª÷5Ëäa˜)vþØÍÒZ6²‘/[ÁÚØ‰£ßãAGlâ4ïØŽ-<°ñæµ¢¡˜²59(š—GEQ¥^×°'Ÿˆ­‚rë«ˆž*®*rcU%é#9-upA[[-¹h[q|ñÍVd¸UÆ\Ê#±P.øøuðòyáµwïàÖ¬©d`®Æ>RD7‹çdÂZÍÊÖrâ1î€Îr .æÖC¿«R†¸œ!­¶Ñš±äAnË‹Vnlkz²¼H3Šáˆ‡\Ä”¼! Jÿ{Ì‹²Ú¢T5¤,Ù7iX=ÙµåíÅçïLŽ¼±x÷Ýwº"¥«bQ’!å 9ÐEä¹ç±Îèí¥+6Ý[ëÇ¦TE6ÔÕ?5ÕÒbÆýÊÀt:rø~b uÏÃòŒÄ)òà[¿é«™›ûõÜââÜÜ‡¦«R×oú.Ù?R@{¸¶cË¹3‡kJ†TH\Ë¬\«ïÙ*ªËÖª×VŽ•óçq™ÊV‹	È.ºŽkš:X[£)7qd’æÛÏ –ÓEjüá³´Vvß}¹ërËHƒa1· KóçÕ÷Ú¤5}¤-ñÂÚ³‚5³/7Æ#‘x-xÆËpXSõŒV[©õÕÖœq¿pN3F••–âÝ0½° Uìvùr [ºÚh‚9',øÀ’¸#\s´–.­–d¦²Æ`ñËƒ_\¦fÊZ8…Ö„k”ªÞö>">¼„eSíÖŽ²³b,1qž",QÓ-œ#ÍØ‘Ã®mŸ¥LV¡¶Öj¢1ò!9"¨9tÓ’ÞP*ùQs—éh—–7ZË¿­Z»ÐÍOKÕ¬|«éïËpÍeBò°KiÖxÖýAÁ™¡S`Ôï×œP&ÝK—dÑÏA Õnqä#™ù«‘µ¶#N_ãéÁsÍß7X#´6Ë¶ïÐy¿HÆ%dç˜2U®(Kë§ÆnÁZŠ)iŽ/áÏoZJ³û&9¾4;Â¨8hÁÁ‡¤µ‘+©QM‡OÚc8À5ë¹&]M-±»^<÷"y°Æc	ÔþüîÛ¦dm­Ášñ–g5OnýŒHÓ×2IMLå+¼ãÊp&)1)%G’\‚Ù}/óßz;ÿqå–Š´&:«=F$y¶ H€­³óêÕ2´:SÐø]$]ŠÖÊ¥oVRW]U«)++%c»©¥9o ÞAÝ±tµ ^mxXºZo$wÇŽ×‡øønW?Ï˜·ˆ¥±/*M¦¾wÖÞŸ»‘óÑèÌû
ÖðgÉÉñ,_¾–·²$.Ê¨f!¬»8õ¡g¢œ­ kß]¾Ÿ1˜W$&¬JRÞ%‹žÈç©Õ=(ã¿ƒÕˆÌðRµS‰`UÿŽˆk ˜ÁÚV@Í§?ŠÕ8àÃÁE_û;•­ÝïËÕVî²æ”/ö•P3 ÝlY™šm+£C†µÈçS ydâaÖý:à
É°Ùpm3f¬E,åpëãù-Õ< µZö!+
©ZÖË ÚÚØí¿Í¦Bf#ÙøR¬ÍWîã×Õùzì4þD~þé£L‰âæàÓw«UëiP4[4Ðß…–£–ñÈ”¦×ö#þn¢5¶6{5CkSjý=‰¡ºŽÚÖ¨,ïÑµÄ¤¤$â±89M[pí—®¶VS;lër#çd¬“§¡1…ÊÒ8x‰M;5kƒà/Ãr}ÌÛ /"ðèï÷Â™÷ñ÷IŒ¾Ì¦»*7kë«ÊŸ¬¯¥i¿wJªEvä2F\UJ+ ‡
<Ä~Æ	«™³ÇÝùO¨Rƒœ&g&çîÞüôíwÎt½ûóÅ7xãPÖu–Vrg€5ÕÙœ{þLA µåõê‰l†xž­õl…åkâ6KŽTÝUr¸—FmT›}C##ç/MŽÐpûæÍ›,V³-×~Œ^ùòË{­víØO(£ylo<aÉÞÇ?ä5Í¾Ç¡o?ÈÖhõ	zÐt­¼Uœ´Vkm$	RèuQ†¬3XJ¨¢eˆj¶àaÉºû6•åækEër"ªk±Èýç¶ÐÛþç{õê+Ö´SÞbî"ì
øíY%BîsÚE@Mö©ñÎL=•4¥9v’A[´ÆX›Hý±¶VÞÞ[Ö[;Õ‡„…ñ@jT¨F/ðöviÖÎ«‰ÁÃƒ„5fƒ8Œ(.„ek!¬)ªyo‘´xç­%Hó†~Ì´îÿý®	{°å“MhEj–cÂ*›è’â
ªÛžmÍ[½˜¨-PÖhƒÈºÑšþ;þ=”¾˜ÂÖ¬|Hô3k«ö÷èhÖöhÕe<*ö(ŠÃŽ†~š‡UkÍk¡¶–ï•5ŸiYªY3;È4‡‘ía£5XX:ßi´ØÌÖÜî”® ®t‡`Œ™6gìÈ¹ªÐFƒ'u\qavýÕÿ0§ÈŽõnàœ6o@›9‹Œ
Ô±ƒóE{PY(­#œt>È ]m–ÜHÔ4)k.óqß¾LFFXrukd@úP:¤;¦RmÃ'¥¬±Ak‚5×Zs±·lY.¬Y„yƒœìÀnîŽpoÿ¦BÚ$l»¦©Û=É±»Xm°æË×ØkJV«]µù¾vu•)¿¢`Ëì{³ü—~ùÀËûì}F°vX°FXÝš§µ[²íï,)¿ZPSj?/¿?‘¥k‚4ËR—¼éíN(­‰6•·åðKZIkkŒcId]¢¶_(å@vÈ‚¸N¬VtFOûþ˜An¤fæ"$@ÎƒkÆnó—7ÚŽüqîú„—ód¨éùÌ™øç1%2I-€µÌ$Hõ¼6xaM%jr…üœ´ÖÀÏ° Ã½)mÀ¬fçßÀ©ÙieUÿB?øÏþïgÔ­™¶†ý#‡SOlS,×Z”‚šBÍ×ì÷BkÑ•L°öUs‚Ì 5jÀ¾š^°æ…5ƒ¬´5Ïdþa+áI&©ÙèX-Ã’-„µôr5„e>z‡3‚´â;Ñ*äÔoNòâ©
œhª[Z[±È2a­XS|GŸX—…ÿ’×²‘l|‰Xí+2è?úð×"ª)d5R\Ì¶Ö¨~ÖGîUmm$Õ´Ö#þ*R	a¯]˜=VõlÌË¡H•j]1×A^¥kÑDm9ÂÚÐŸþt¼¿ÿx<>ä, GqSÂÚ¦×1Â—kÿ^Xaí¶ýs@Ï¥k¼JÞèïÍÛèd´F3ßlÕå™gÂmØXë'4ñ¬¦¹ØÝ…WénÐÍ­Um×ª¬)…!*³›žÿ-¾Ïòcâ± Úeë°71Î‡–Ð´fîÌ½×dµþÇ»ÞX¼3†˜­–[¤¨%†Ïü+ ¸ã&ýC‰ºrÐÁŠª„c'“ÏIõÁRý°§HŠÔ5¦˜IN™Ö&ÀJ"¥ÊjnLÏMÎ,Î­­y\»óÚk¯¾z@Æ0Ï7=¯6Ù%”t¤ã¹Ú|<YÛtâÄX}ã“ÀšÕ­!¦¯µD×D[[£5k´+Öï*ÀnOjl^fc&§þ¢‚¢\Îrñ)á3xÁ¬FpÀ2R¶å· ÚSA?l¦OóXkäEb;reúŸ}Ï¼÷/¿µ‰8žÆÀ²•%Þ¥	·E»ŒM‰š²$Œ¦ 7ÕÇ0¸ìÖL?qµjåU-GŽ:XkmGZk?ÂÜ]´Eˆí ý%Ö,ÐÕØ­mW°vÀÛö§›T³æÿbumyÍš°G¼&øÉ¿mÊ·‡¢ÖF^j”fÝu­ í»B2&<OÑÓm6ýà•Ð¥‹¡™Q…rõôÈ	’´G½/Äý‘Ø‡ƒm"5»TÌ[E—«¬)Äi¶‡ØH@•*®sçÅð"§»ÓkÖ„džÓBš=¸{Äc’•Â/‹Â˜®Ý5f÷(l
£7oÌ¸äðm4L«d“!d µ±~ã#eLVïoy Ö¨P#Œý¤°™$Å“PUóí¯SÌFRFqÐší¥±Ü„bXã¦³ñ²š1š?ƒÔ–7`ÝgBjpÊÚFÖ¬oø,Ht5”5œû•9Ú‹hôÆf×zŠ¸»l× u¼·fpÉÌ\D§¥–‰ä‰@k¥«jÊ"¤ó½Öèü‰” ‹ÕdÝïbvØâ«ÁÛ‘ª5ÀoÌ¯	óó×5®±ŽýeCµåmki´¶:
–õÖ”’ YÇN kÿoâ¸g5^lLWÃ*`5âÍŸÝYüÙ"1¯üñîg[øã‘–#Ó£üEÁÙ¶£ÙÜÕha%`ÓÐCp´SÁZHk¬jní°­‘Zœyä;´¦*Q™?"¨šXÚeƒÚs|Ö\&$þý®©˜zdo5#ÉjÜ8­	_`¦rÁÚþ!ÊÙÌ]Ê7Xó!é*½Í›5ÿÈˆPBË|dDº³H:ª¥“ÚŠFÄý›ÁLGk®6ç@*¬&÷ªñôçü V#`5úa76v¬å×Ë†
XëS|%Û!;ÙÈÆ—Ç\„
µ‡Iœzáè‰±b±š`í¨z8YOl•œ°7«\>“1O3‘_ØÐ£Šµ¶ÖÉ™oksÝUóª¸‡) ¿1XbuCES5¬¯+¯ZŸÓ:tVYýñº!¡š ¥N/ž5”,í«…õÞ¬ÝY¼37=zã£(Ö!›HðÉ
cž›Ó¼¶hr©„ÕbDo\êYHk6x=Í¶@Y«\µÅPGy5àÒqïR¹št5¤˜ãp]T¿qÃxÜ_æEžr5½È/Jý»ùÉüâMA„4ÿéÂÂõ÷ïþÛâàØÈôÈøçS‘‚3g)U;Û5°åÜ–®þï&ÎžN¾Œg·$eÉ_J\òÖ ~>ï«‡Þ (ðLÇjßp2)Ãýb¯O®dòàŸ&zc\¿>1¢¶k[ÝÚ’¸6?ïpíÂk¯ýX}×^Ù{xçcÇ¾}^;W”Û»„k.2³O6›M~ªI}eËØ‰¦XÍšÕQ¬ûk­ôcˆFyý+uYáf¡¬fƒîa`Žó@îº2X‡ë
„²ìDÙ&hr¶-¿}ê*DFHIÓ[:þ8ZÓgð\:l)²-H56•7&R©„tµ&…>>Õ{5‹¾&Ëƒ¬¥F®_°Æ&XƒÍkáÌ÷F9–·ŒòÖ\ÕUíUÕÖeYPàcÊF 5…/Zû1Þýéy¡ä2UM¬öKIk_¿‡=¬jÚØòC!«‘ŽLô=…f»`4WÎÀ*\÷í‡U³	âd+¢ Ù‘™hL½z»™AkÏmû{]c“`Wì8Î’-ƒïnþ:	Yí©ùê:°ÖÞ·ëÏ;Pó²š¸,CYÓ‰…n0`“ÿˆ“ÑœEk¡S'ë¬qÔ‚áÜ£¤C¢Ù“ˆvL!uÖ¸îFØ”Öæ“*¹hlœ†°f}×F+]Ý°‹iPx‡ 2'­ÉÒ®¬É±Ÿ0em–4H`Ío!ª²IkOÚÛoªÒ´zAÊµß³Ú¤í×'ß~Ô£ª”ÓˆBVcóUj!ziÂ˜aœS—ÂrµŒð–þR¿J/ZÉ†B%]]%dC®F"+P‹5Çj;‘Öˆ[·`5kuÿ˜‚~(;g¿1Û¹+È‹÷åÚw† …IÞ¸dMiÔ~X¤6ûN²*ŠÔÔµVç¬*‰”’©Îj‘þaØ“S&¬·zµ¸±Ú7žæ{ñ‰¬öƒPWSÁÚkJ”¸&VcÿãÄu:d^Ÿ¹<ÓÒöÑèßŽæŸüOX–ñ9Rã¡eËƒ”p¦©÷€ìµ9b©i³JÐe™œc$RÕÐÍUÂ	k2ä£Q;ßÅe¬öj§>°²5r!O9§G`ç~cˆwXÍä4D7¬ú]$´ÍÈ™ÜA¤} ·¯:8
•µûÕ$Û1¢šÃµtZ[ÙrEPó¨çYÍ=µr 3óÙ¬Yæ¦…ôAÎe/¢*½Ç…¢H‡TW¶TU‹ÖZ`5+in*¯(l¢pm,ÿ(N^}äý×ßÎšøg#Ùø²˜‹µD)éiÊ{üºhMÆG­Ví(€¦¼)ñ˜²3z\Y³E›^¡€5]ÃG¤ª­ºMôÆË‘”µ ®ªºº¢Š2ÞTU4EIT‰µÀj•Ñ¸¢WC"À5±6Ê6ìHg5Á]Öîüln$Ú[#VsrZMoŽã3š§Uæ±é1
šIY‹™í¾auk1ƒ5ã4-{ZãëšÙi‘Ê– ´áÞ¦â^/«Y
$Õjg‹ŠôCã½Å¾}V”þÚk?Rì»4NýÕ?Þœ_œÿ·QµÞ¼s}X›YX|·€¯žA.Á2Ù¨@"œ&k«Ëk“tkÕÚñ¡ã][ÎPÅ‰Ÿ9Ó•Àh†P°ü*'lŠÇkìõdAZB_rÊ`m¬Ò:ô¢·ÞÂ´:229—:O›·K¿¬Ùþ‰7ò'¿çÚ…AÛ5Þ'éÓìcOïßq@Ô?_Žk?–eÖ”‚µh«ôµ'KJ[W!§µÆÀ®VÌýËË[°ò7	M!ÿnœlæÎ}èJ×¬ÁÒ5ÄÎ¥ÃKúô}õ:¼ûi‚mMÖ
r‹6mÚR)Yƒ‡œPMæ"d=Ê:î)´µcü‡0X{
ç~Å3¯x/†ŒV›¬¡é:…ã”¦©V R¼¦”H"™à²ìE´“hŠ#˜Šz¹‰Àj‰ÁÁvQ[ ¯´#»¤:Œ"445·šÕ®‘¹Üe$”Ö¡´V«±‰×^\YI³Õ•ƒb¯Ö
‡BÏE¶PX3~_¯¦7r°•	hL¥~9ƒþ ¡uqöû
Wæ¨qQ†{šÝ;I±Æ[ÅÝÚ’K¤UÕ@kK|V¬™X0DÈ¼Š$Õ)®žŸ¿ð|(¬m‡Æì¡B¦4uÍC\ ¬ÉdäŠk§ÆÀÄ}Îb¨­‰ÌÜ9%´iÆŠž ÛþbÎÄKk^­óOvÖ!7€ŽÖ¤»)¤¤i¬Ýàÿ
ÁZ§qšÛ5umÖ81im$°{$¸t~d†¿ŒÏ&öÏßô±¤­ùy`‰Ð{ò9Œ…þÅ[à0¢FkàštµwÎÂÚ;oû4HŠÕ&‘Ö&ß1â	ûÙ˜qÂƒœ‡µeN6OWÜtêaÍa¤E)6þÀ‰‹%”®D€5æXä*i™ÀóQ°¦,HJÖ4ªñ2°svÃÎYb¼s<7lÚígÐ™oçŠØ ³5ßŽæ`ERZ!âi20t2iªš`"iéjýÊnÙ'+ôøíßÿñ?y(âg?rÕk×Hk7¿¨éÑ¹ËÓŽ.,Œ¶TÞ¸Ák	Ë‚DMs®ý¤1pðÁÜËjFq¬õTÉ{_©qEXdÃÄ^rfåPXû®”´†f
Õ¼Ÿ¿Xm½ºæØõ]0_ k$¾ìù2Ù)©jlÀöüâ0ú®‰Ò|§©=6&ö[q²×Êj‘¬Á?÷‹€8â©˜Ñ›04Ÿ¼ÃHšäŠ¬–žù—PÍïNVs[Ài<ÒHAc:¯}Š$ññ~"5NP™áÝ/+?£]($ÖÖ¤¬©ÃK99¸L•°6¦8ý•¿ùOÙÈF6²ñeè†­·R¨i¢5YB>Lœ¶Ak¬
Ò 5igi–Â±MHF ¤5p%«ª¨­iö²DÍšÂ½òßÓ¶±-[›Ó–‡ ­¦qˆºÖº!PQÉXÍÒR,	R$X{õµkÎÏ]Xüù…ÁU<'ï£ò*y¶ƒµ8ýÓ°zDgã !Á¥ìG¡X,ê[ªÙA+•± _~Fæv‰©v-ÄUÝp¯íV­VÎÑ:óðc»R5‡8 ¼ƒ±ˆŠÕæ/ÿêµpçî'Î/Þ¿óNêÑ‰éiÞž¥jJôåÕ–¯®z’®.|TÎS×\ÝØ”T‡í3Cú›Ð›‰ô¶sg’–ïˆÈ6ÜTx‚ÈÓõÉ¡¸ð7ýÄ“¤×'“0V$mà‘ä¯èøPMÙù…Éóï¼1÷þÂÇ«ixMg×ä4N¼LV]ÿÓO¿¾c?r§LÓµ*®ÀjcÈlMµc:««‹*í±´ki4XS·l©c¶[b¤U¥1[kP§°YnQ‡’ÑX‰|ŠÊÖm((‚Õä©z:$Œ–ñÔ%X3çþg¿4YSOl3å4Z;ðÊ3ã1ü:‡®ê#Sþ¡î&\ÆÌD5çã¸fÑ„”©DÈDÒ³\XÝ«%%pñeJ–þØ{ààAçâ.œ“¬f1}ÇIkâ5HÊšÂ³šï³fV>ÌúX.­¥åD~®¶´ôG'9á,XØƒ®Ð-jÅa§ò‹¾TõÂª•¦JY³^irØ^Ø£Bµn“(}sWº{šEc
ÎÕ|M‡n@Œ™A¢øÏ~kP&q»X3NcóºZ:­…ó0äÞ?"`²ðÞü¢Ø‚3W©f3b÷˜,,qS
#íÖÚu¿ô1k¾ŽìFñ¹÷‚ÔíZ÷::Fã¨ë<]šGkìÝÜ{÷(^²cJZšÁÚH kƒRÖÐFþ‡5ç×¯çà\úª„5XHªù~kŒê²&eíEXÍ7Äm Ýƒª« “ÏÒ!Ç`L…>:„5jË­EÉM[ÀLŒNæZÒØÂAØÄÎ¿uåAºîkük¶È5,\Ì7X›Ý¹XÍÑUk.v³b¶ñ+³`±u<.3;	LüùXhµc8c·š‚‚’²$KÊ
ú‡EkÖ†åÅK*ûŽý¤²SwÀZdš·ˆ£5uÅæDÒÚâ¥Ë—Þ¼;=½0»ÈÚ'x¹±¿ )‹yÀšC f—¹¢´FXÏ4Ù$³¤z±ÁI@#LXÃˆu9¬AjðZq¸¬uód¹õ(i²Áµ²ö:Í€f§>P§5Yø‡)”¡±®6M»‰kO kOh&÷„'¼Hù;AÚWï\sáø(=2‹Ö|¹YfÙZ&³…cfØsCYÍm+4Ws¨Zšªö08cî@í~gÜÿÈCÀšUç=òø©ßE£•mÔp´(€5å]”—[]óÊÚi¥ZŒåæÓ#;›
™ldãKa."TÖÁ›ÞàÁj/<ÌT”¦5€$Lû7Zf¼L)3mM–öØàLF”ž¡5¤¶¶¼{VÙK`ëßÂK›Ð*æ¥µÖØ¬ÉÝ™I\8^™37FgRRÎ§Gé¤F}™… +é«ÆRŽ\Gâhj1iwb3í2ÌD¼+Ng”–“×«‰`Í]ôf#	hÝÅ1‹Ft™€Õ¤ý™®¶w»jÒ/\¸ û°Ëwß¼ys~þæ¯/ÍÌÜýðÃÅ™™Éó‘hÞG7FÍoº¦ŒoB9…XW yr+I×&õkËÙ!| “Ãï)Ã`…âäÙãÊƒD\£­Z-ŒáüO`YŸN	ú¾©ÜT²·´ÿxÝª²‘ÉÉ
R²ù0£µ›ó—.ýüòbÐvõ‡Úµ[;ygô“Ÿ|ã_)Ÿë‡¸–™IüoiÃtÅ˜£‘hy}ôbkÌr!«Õ0ÛàÝÌz«]Œ­ñy‘žÛ 4å@jR¦wVLÕŠî+(Û°I|†«Èsñg,"…j?%kŠgo‘0õØRSl«o9üÖ#{kÏ¤â©Dj|||°¶µ®c«% 2ÁšAZ“44"€µ)¼EšÚIs‘°–ß„ŒvhøÐ!ÓYIª…ÔŽÐ’¸³3õ`gçGt})òH»ŠÖL\óÒZFÕšWÖˆPXÓƒøë|¶ÒÕÛí ›#žü0ÓÐ[y­á/a."spTÏ¶n- ¯uëý!‹v‘[ò‹¹b é“ú¤¿a=ÑŒd&Ø¢ãš¾›JØ¸r®yç~N€¿eÒ‚În|É‚`fs ¬m·k¨æÍ†Ã
»À=ì6NñhFxLKZ0¥L€6
Ts‘ÖjÊ€”°¦›@,bt™þfOa«àôL›¬u:X³+&§…ºšžÍ3£‘ÎN–©ÁiL,–z«=Ø©)Ûà„™?Êq„$8hÝò ØºP+ì’Ô~Xí¹“HþáäI´5Ã5¡šwƒÕÈ‚|1ì‡ÍÄu=ð!Zcâ¸Œ3­)Â\ÈÐZ„X&¤…ý×¼°–Pšv§„ÕH8§Õ¹\Ÿw°¶sVXöXÏ~­ßXM1Û	®q#-Â7 †©ý¾$XÊ‘
¶Õ’ÖôùÏ*™ûk(-Å’_)%k¬%	y‹P3\ÀgnOËu3_ï-bˆf™âªï¬-˜³Õõ™ës—ß_Ÿ§?«£Y”;™A[N Ÿ9-˜»Ý‡q™¨Œ´Ev[R¸{!/¢GÙŽÖvaèH•hPµ¦§¨LÜd>Tq«=kUêŒÿÜ½Ö¾óø)Pbã ²©¿Úãæÿ(C~ã4øØÔ°M¥jêC¦~Ñ[1üm°7Ck‘ÔÒí -<ªéñïŒLk‘0’=CVóÂÄ?÷ LKóÍ°å)‚±ˆÁÚ#OlÝìJô0UÕbkÕèj•ÀZK#Ê°f&#õc}c Ô65uû?g}F²‘lü‡¬ñêaå@þN°¦ôÇ|½Ç“°fÙ‹$Æ³©Ý¦µYëÑ'„ÍÍÍÿ*ÈÓ×¡ªÂ5[ëã´¤ Ör€¶ C¤²´7†óG$0®1éjEŸc5Phòü5|;f>]¸t]/©ó’ðXé_4t6`­7ª¹°`‹Fã5…oÍ‚BºYÜ¨Œ=–Ã}œèÎ-ð’Äï¿îÞŽuk÷‘$S±.(sÐxgY™1W?Ný_š<÷Ã›-I¥œ™]UR³öžX¤,¢ï¶¿X++#r —FÏ´. 0‚T±°6|’÷`ÃJ„ì«ígY•USöúÁ	nrâN7%Éˆì—ü–L$p×”!I2éêŠÇRÓÓ##ñé»ósswÁµ	Y¸®k—\íÚ‚dÈíÏìÜ)uíyØ¨,âq-ƒÖ~Š±°¶$°u4šI}SÓ£êÕZc¥ŒÄØj`5ÂÎäáo“0¿!­1c,êêÂWd]n.ˆ¶i)‘¤>’ynWi%EeêØ®:Z³|©oâÝoqÌ%MáË	¬áþ^kâXí½ñTM°Æç¥ÚyA‘¡´©ÞÏe<ÊZ½´·övM*8¥šÊµ5“ƒ§Ãæƒƒ£G˜w*t9q`š6×[ðËæií¿ûÎØK~®b-Ý[„,5‹·–Ù¿ø©_\ÙmÄÃZa¨\¥YŒ8Rãà=Fº™+¬8M¨K=î»ÌÄ]6ëW€Œpr÷JK“9÷¤=
Ëö`®R5êÙ„sˆ<Ï‘¡µ
°¥|}í0s“úúÛÐÚíæâÂÂ`Ít5Ñ˜×öÚÃâ0GÆ•0F„]B-‹Ñ ²L3—~`Í”0×9Ûy‹07­Í:¯¹¦j»¹Ê’÷t_G¦! áàÏÐŒkÜd×ôÕ9hbSÝ¡u Ž0R#i„Ž&­]Ö|Çkh-¯‰Ñ,ÅQ æNmg°Eo/Â &Ú,HU;Ä‡S´ë°ªYÍ¿BDkV²Ö…°vT#ÒÍEÈ´ÇÛÞãiÍ¾xmi*ki°æU³4X#V‚µ`Õ6ë¾XÊgVìØ‹DøÍGJdÁììƒkdC«}“_­­ñXkãÖÍÎbØ²aöjÁµÛ_KÈ’_¬àŸT4ÜF8/Cœ_UYÉwTOn5dëïEÇã—°«™¬VëzamØñß`µ[;5XÍÁš~)Z3—¯-ÈWäý‰Ú§iªæÓÈ12cçTÆ‰÷î'lÁ“Zf€šB‹.BXÛCŽ#Åg’Ò µnÀÌÁšvr#õQ¡UËp!åq¡®§”³»H“D¼£%ö)Š<ò­ŒÖØ¡1Z­‘ôHwlIkldÒ[Á)þvS‘­Õ[B¹`d{fOl™´öïÆµt»~#5m!fêj+wÂ–¬Æ(T“ÏBÛCÛÔX/HXí²kÕ­.q¢JÔ
Ö 5¥?ÖÛ^šwC2aË¦Bf#Ùø.XsÞÞ²ƒ„Í\©šBsöÓ§ó¥¤Ñ.M±¾ÊÁZC›¬Ç
Õr 1K ±%'¬Amë¹ælŸ««Ë¡5GV¨è,pTÓ+\ªRæßŸÎÐ€GJŽÕnù$HXíÚÜµËÄô¶éË—¯“ Ÿ×‹d^e¥^5nÌ‰AfñèzL e(âMáf*D³ùR¢#—LN‹ª7gº\ˆ“X’'M1ú4‘Ù„ÊÆk¼c5óª´WxŸ9cEÀÚÇ~ÂpifäÓ›Ÿ^Ÿ¾±väúäûwïNóv!¶bS2*Z¼ë\—¸£«&çžR˜íì014<¤Ÿr¬áÄ}2YÝ?0„·XöœÖ¸rò80—$ô.í¹¾ÓÿÐ‘À‡d€,HX-A×¸d‚ëC¸LÄ‡¦ÿ×[‘Hjpáæü\*2y=í×‚5_»6É¬Føñ®PÝüó“×_ß±¡(Ä5ßv0X#‚á§'šJ;N˜‡¿ë“­.]·î¢’ŸŒÊJK¤«·9`Ëˆ5ºh@4}ØNYZ	ÇÜ²M›6¬Ãn¤k“Ëƒ¤z­(7·¨È¼üqÃ	rçNò=«=ueR©,ò¥÷R)ö~¤µH]m£w!úx=†lÍ\Ä—§1Ôã×Ü75”À±¿ÞÐ‹õfÙNÑÚÁh˜¡Ü´#”){ç`F›5‚¢5Ñš+\ÕT¶æa-,ZóÞý¡»H€k¿XL;8h‡Ðe$€µ|³Ë'8¦s¹ˆžÙ´ ËçD˜ÅZÖöÀfZó|×¬à. Ëp‹·ŒXGÒb7‚jˆ†©öÞMj	€-ÞKŠÖ 8k’Ü¼eqa¾©}Úœ}d±%@rUò°&DóåjÒ88“Û—£Ú÷Ý~ÅÕ©ùTHkÕ‚žÙ˜†ì`M!QÍ Ï¬IÖÄfÚƒg…î’š9)™mPW™˜é;ëÀ|”põk¦¬yMÍyA2·Ý¢³s©ßšÌÒ9¨»µ&ÙÉ-Û’¹ˆú£§<»9„°ö(klàš!ÖÌ²Ë%Az\óõjï:ÛþÉÉ_®ÊQqÞ©_zQ€m!¢iR™[qc–ùÈX´ýÿ³wvÁQ×šžû95wç(	•
•Ë.XÂ*Üw§Y?éH-	áÖ ä
âøØ…éÆ¶"ÛÄGâ'ØžÑ9AÂrRŽÂ¦JþQ!À91å`¹lÅ¤ˆ¶/ì0IN%ó¼ëÛŸ¶¤è$37ñVïýío½»ÕQŒºŸ~×z×«Ñè«8øG-4±HÉòò…ÑåW/-{õUkWe¿þ¸«…°¦¦Ø[)r+*P'G½ædÒ,Ex.v¼DÔ‚­<² ©I?éD¯>‘%‰!•îjíîsVø@æh¼’%‰cù®gŸ|€v`5„5Ëü¹ìú	åKœyýõÓ§¿ÈÏSÉ©Ã¤BZ¶(©$˜öš:­ˆ‘³)YaÍ‚™lD4„¡å
‰	?R·¾w1Úk;Xf”¶¦öFuq‚5èŽoR,ý¥Þ.SMHxò‡7<xrÓ]QÕ„køAi«WI[b×ˆÀÿÑ!A5M[sÍ²™­a»Ç³š8âµÙÊšÂ“£ƒ­°òìÿ‡ÔÙˆPTc˜³\M7"ÔÕØ¼¤æ’!5Š×ŒÚˆ%*òoUJƒlJ¤)²Îåj3´Å¬a		®¡ª¹¾›Çž§vMmsŠÿq¾åÚ|ÌÇ||­¬¦ÏcHkÇHÓ68´é›xæÀÛ1¢Œ¨¯×»¥CÊ¢`©KöXZ_%V#÷±p‰åC2ãPÈÖ#Öbê~ƒÍˆ—Ö’i«#ËºH÷¦yãì=NtÃj+Ö>ûì÷¿¯OÞßûqè.¢¬-éí×sØs'ó4‹%y×Ö
c]Ù<üÓ1Ðð’šNig
Þ²ŸëUüæM"ƒÈt&Ó¼[‘ÛÒ0QÈIŒ3•«Y
¤Dœïx¿~ë‚=A$ÊÕ—Ÿ]~gr]Ïµëçzîîï¹6q}trr|  ‰Dº»¢43K¤ûrÑçŽw	Öø4o}ù¹Ö>òrúðì‡Ãøvx£'v¼««C~4¡c5+j£ ížØG;F>.…¨6=rôh­ÖºÊSiH•Ï%lK:ßûêíT¬fÏW—oGR'®ÝºuíÂg2‡Ú®]>=1º¦¼Ã5j×¦á*Ö\m×~D00±8Ør‹A›ìŠÆ„¹…(Mi@l±BàfaÎ³ƒëƒc4*;ÈDAdÅòe%ËW”“ùX.?HxmÙ²å%ËvçÏßXŒò…ÄbDëôqï{˜.î¾´õÅÝW{Àâ•)½´È_¤ZúZE£	”Ö@cÔ95åííÙkÖÝ­eKÍM°‘ÒÄfÊ…Ü³qm '·¯ÇÁšWÕÚ]ÑÚ‰P[s–3!½´æe5	k>¼ÇÈo¶ügrÒÞjÖÂ’5p(;a‰ÝÆb*1{Ô´60k[™rõOXÓ¢§5@ÍpÍµZ#ô	R°&¯GkÄÆ° <ËùŒ»ÛÖ¸—»ØŒÕð$ñ‘ÈgÅš9B:¥@–â>Âqïkü~” éaDó7á™.•5éYNHsŠ˜B£Ö˜NŽNSSÕ¼f2šh­ß»<rïÁšïsO ¿é)\ØCúup¬¦;½_	ëŠjšÃûB5	lÖ{z„îmæ4rÖ$6C±ÎÙ„pÖtBÞ£ªÕ|P¶æÓ";?ýôŠ;}=¸Ak°›°fö" ÚÚiÂZ‰·ˆR ¥¬çÍ€5ó1DóÚ
§¡ù‰3[ B`cm­IMc÷ÓhdƒÒk)å<—]½´0«lû©WóitÄÖžämÀFŒÖ®\]¬R5¡Ù«9$›ø w¨<üj¾rã>Y–DQÖŠø!ÍÕµ5‰8ÿ{øÊ‹ìõîÞNDHËd¯¥¤7å/ù}Ô«aJÔ¶{6«]ç:ÑÚé3×0iúââ‚±ñ±H’XðÑð<<w¾J[•Ÿª×ò°šª†x0c÷°æ56«Y:®1ÖoãßžÃ3ä3vÚ:ûG×RƒÖ,’' 9’·gWKîD8ŽK
ŸøØÚa¯¾g“üúñQMZàY¿&B4X	°Mº” ÎŒG¸_HÑš IÛBŸ;Bm1;Ò«jl6ümNó·9û	jsÛ@†¬FxV³®÷ˆÔ«PÓ 5`ôð&X­”ÿp`5ògâé˜ÁZ­Äµ†J)kÄ`]‹ûoð‰âA¢ƒGß§µù˜ùø:ÍE$¥=¯ãw=¬Ñ]X#i»L¢‘qaGòêÖô;Ð*+U+mi8X_P—Â”ï7ã$AªÝšúŸÊÅ1ÛÛ+ ò¡iwÀjË€5j¤xV3X{E°6Ú¿dÉÅ û_ýÁw—1hLÅjØî#‘e ¢jú!W2=]8c)4a–üV³Ø1ÆU¿™ T“©Qæc6ÇèX­¶¤a³·ªü±*ÒYM°výÖåË¾š¤£Ú­É±Sã4…ûjâšú*EÈK¤D­µœWÕœìÍÅÒÝ²I%ÑV9øk`vÒèc}ÇûŽ€lHi½%9å;vÖU(á©Ï`’ÌÈ£G?7zêPýE:7rôÐñ¯"ìBºkíNuñ”Œ¿¶0¿¢sò«Ñž…©îÎ]>ó‰ÁšÄ5p×K“ñ©.Ù?S—lù“‰ô/ÿcÈi¸ÖáFœ´æ`MóƒÚ*º.l$:µÐ(;F¤45viÔ¦¹¦!¬qÂd±45l·K,_›áÕ¿‚4Hcµ]â5!Åj»öÿnÿ‡rÜÿËöO)k þ3|Þ“¹ÈK°çjrÀZ.Áo©eD°Ö®µpBÓñ)X¼µ[™Z,šcâX­…ºÀ½¸4556ôôìØºÇ8`/¾Þ[
ÌF„jì‚ ¢çšPMÒš±š÷ƒ$ÂVk¡²–¬½k¨öÞßö™½¶]JIke¡9~˜DŠÕ,€)|¡-©g†o&¨9A¬L¨VŒx6eë(ã~¹óëƒ"À'êÃp„Gr Æ!=^HèŽÖDkšøàg9ËÍ¥¥üê^Sòcps¬F0JW›	m6aò0BW j„h#à°ÐáQ¿(&ß¸`çNêÒÀ2.º¨‡`\˜¹aŸv¸q»@Øf
gÌíŠ@žcUºš£5tµ³$îÍ„5NØý‰ÙŒ˜|&Z£vö)M3òô9Bƒ¢çÄp kˆjlÜ$¬íµæØü‰ðmÖPÖè±æ…µ Õ~o²Ú5+Y[çmúÖ¦ü÷ÙØCOz_žÆ,”Õ!¬ùG„Ù‘!¬MîiÁ´h|a|KY‹nÀ~uë‚³¤-?† îY¦g‚µ'½´¦¸²Œgü¯U$™-/zÕ^[³²ìÉ¶'2“I&“Õ-Ôñ¦óó©îÌdr¤—ÖjÖ°òç¡ûè“É÷>øS®Î+ÄO‚^Ø‚¶ë4W»~+¦ëã“ÆòÇÆš÷õŒ¯»8
¬‘å™i`¦_$ƒoºÆå¹amjâ|F¼°&Z×¾%ŠÃŸj›áÙ¿Ã	l;Dk’Ö9Aƒ«ßÃm®W°À5d7WþúcuXÛ´j=`œAl)FÛp˜6b½k-Š×ÀÚú»îX½=Í$¶M¢:Üýk”E=’sEX±F^Í¬[ûÖ¸Dã\Þ"svÂuµÙ¨Æ`±j5bºšjÕ,V[9¤CAêƒúo3F$TàÞÔTKVJ¦¯
BïƒíÀšb°xN;&OÈ'¾;_¸6ó1_Ÿ¹Èãä9JO3í`q]‡SÖ6—=o¾ eø!9XÛ®òMê-ãÑ½?1m..®'M’7Ë*®&³"6«UƒÕøS˜XÂ=UU`6ZEø5ï­Å5y
Ö$³QÔ«AB®éÍÃv‡I.®IZ³(TµZ^"ËÈIâáŸPÅ Uj +„¼€4¯qs¢[ kŒÜØrûç˜2Í³?Kê:šZgmM#µ-^V£»2Ðg]yøáœ*àÞàÿô§ŸcüxkâòäØðRÚ‰H9~NŒ^^@"etÁFNËFRqYªdº»×–Çó#ñ(—Íª.M¦"ÉÐÑäâY_kŸVÅ_ŸËÐÜÌt3ÿŽcCNÇ::k;Í7òm T©©ùtŠRw:,¯­ûý[]úùïž;7‰²ö«Ï¾ü…pM´†¿pM}×øç;/Ñv-Ä5ßv@Í°=îBúZ lƒƒƒ¬UðI,ñøÁX¬¡):V¡1(t„wð÷ Æ+H¹@Òúzùík%%Àîý[[×€5híÃg>üPY²~ÜÿÀðš3‘ßÈÃDÛ¥/}g÷Pm×»¯áÆ0p6’ÀxE:y€Îýš×¤Íc³¢@·dD\«‹%F”iR[Ù²…F{ûöe{”¹g_ÎZkõô÷Ö:!µ©$ÈvˆÃ­Í’Ö¬nM°&\«ÖÂ,HC5cµ7Þxï½=Îf7Æþ²”,§PhÆîd
³"ÝþèôÔH`÷¢ž	ÏDkÊ„dŽ¦ÙfÈÌ?€'{t‡=…”5Œü	ÐÍ´6yH÷hô¯A³"6K4Õ®¬ÔUÏáÞoràN…ÁÚÓžÕ¦Å,YMÃtŠSZÖ»~ã*1'„óÑ=lÀš?Ðœb¶ÎØ›q €7óéïùGÚ•\ãÖ%ö<Þ¸(ÅÍKkhk/^Rc5èÌä6][k±ÈÒØL°öbÛ)í­ávlfæn7·þžfœ©=âò •ø‹„Y"µÐ
R¦ý¾dmO(«éèÃá‡ ¼?>‹Œá5SªS¿FŸ€æÃÎ°™jº­-,`úJRä²¶³CWÛÚø‡!e<ô‚×4÷°64´uaþÂ­W·.
p2™Œ-Š âÛÀÒÿdZ.ªm©¨ªN.Ô„|	ÃWlñ},«cµ‡,dãÔ«ñ‡þöe»>üðgöC‰?VŠ„÷$h˜y]ž¹Äé7'Æ‡'Gi„Ýœw÷äøº%=ù6k…ÎUDîYØ¨ižÆiÀšíP™Ì”´í¼é/¹i¢šÃ3®µ™¾æZÕ9C
â:Fôñmâ9Ð×ÖúÒú“tXÃ±Ú‚»6˜äª»Ho|);.Zß@‰á`m#3eJÞyÙëâtåFyøßsFýj­ý`
kl†SÕÂ®Ø:„ò‡¹µ™ÕüÑ	uzr„><¬ÍÖÕ ÈPX[…S?+j¶Æ@ƒ5«ËSEìy¸:ß„5Æ˜`-“I ­	Öªñ1–¸FWì

ÖØŠÖë:ø”4_¸6ó1_[$šôÅ°VLë.þ:QaBe-_´Ód­8ðúÆùwæÖ›PÚãf•¥‚5´6xL¯ë—
Öš››‹xo®jlHêÚ$k˜‹¤…Í¹ãÙX:âaÍ¡“>¨ß«y×~%Aaäëã£ÝXBð,]4Xƒ€É%y¤ž“Yé,ü“RíìAÕø†H8ûVÂ%=ÚO
Xð°fo`]Ò³5™@bóÞb Ö8•iïð%”«}ÿÛÏ<ópÐ\MÎÎT£“yëò—ŸÜêOž8ujtrô‹ä=¢›EKznÄ¢Pb¤Vëêí’mu6gEÝX••D%„‘Á°ÖÛ·#Ô¦Zµ^“Ûž‚’Ú‘ÖÖúk#ÑÅÿÆšN°®S&ÿ<+ýµ­œ­Sš"i•”®E0séí.i…×¾;>6yùÂääePMúš‰kJß®ý,×ÀŠÇô·Ç5þ_êÍÕ´«a6Â„ÿÁêêºƒ×9Xklªhoˆ;:s)èkDAAk’ÝüÙ‚H”)Å&ürLJÓ0Y¼/k-!ZY‘°¿íúFû%Öýç¯\Ö„i„ê¹f°véÀîK’ZÎ¶µá/Â—êYþ™IÔraV!ƒ¢Qšsê—d¬™±ÓQ²V×ÎGc@‹¹Kä0YÙãšukÎ¨#¬×Ú¸XíuÃµ›Â5P€ÖòÒˆÂZèiÊÚo@kÓ<¡m™ÍmÎ—Ëiž•)Ö"•Ê–]M™ï½&-ÌÛ¢é×,;$/Á|¥¼Gk°fv¿‚‰®dw™ ÇÆRz`Ëýñ‘²R¡Z%gÆl(k·Æn¡ß7“ÖlóëÓö_œÆæFLc.ø2EmšÁ£Æ‚-ß5¼ºÛ Ë×½™.¼é)ƒR5c<§ÔIOã´ßÀPÁÏ¾xC ÆNˆà¸f«7¤˜øÌÀÍš_{XkSCì§ÚX»dÔ&ïþO½xêöNÚÚ{b6 ÎÃšsºýíéaåÓ£G¡µàæò …%kò‚|9ô‚„µQhÍ5Yw%kù3iÍ”6ç.Âš‡5ÖCßþ6=³)Lf´fS¡¸&QLó…qjÖ"©…å*NÆã‘¶6¼ûô¾tQÿ_×~F­]±ÓX,¿òðPÁí—¾w:›f4¼ª¼¦L~R	’qÀŒ·¡…Ñx^u%NL5éh¶¶=íÐŸ¬Õ*Ý\¿ŸåÿãYK‚|é@›¹D	Õ®“Âq+H„¼ÎÆ3g&Nl×'†û1íOæ­»6ºÎ$µ"FA£1sVàµ6jØþÖ8°2*ða•‹ãRäµ¼ÂPq#¸bŠÔ$·=jh¶c;4¶/YLÆÞ^¥Ëˆ±°&ûæÊâm‡Iƒü\ƒÍÌ;MmJÓšHjf_d&ûGFLDS ½Áu¨k«P¤V	â`9,üï‘Bu°fôsO(¬y\½û™„Øº÷Û>»Œc°ìoÁù'vL8G{µ¬¶Š—ìaíOykÕÖH9t½¿ÍEåpSð_º—Ö”2S‹…1a´VYQWYGZ|iÖýÅ¨k(kuø6ûÿÌ§BÎÇ|ÌÇ×ÂjƒßPÓëbTþï’YVŒimi)>Hu0œûàV
¬ÉÇ›$Hª[\¸æ.AªÕšëA¹¢¼úí,Uñ=a‘™ø#§å-­¯hjä 7KTÎJU_W
“~À(A)¢JŠ)XöO*3amº»ˆXí:I}Ôs£7;’é´–h–—L¤óÂò ÕÃ)ÌRfŒªcëžRÔ5[ªey›LÆtM</–eU´&'¼I„$Hb·^j‰^Ÿ<yu$ÎÐ¦›·÷[.`	¬÷Œ¿Í7åc=	UdDRÙ’•ïÝå])ÖñdŒ(¨_µ™¾¾\^²»#ÿtsŒ&é‰½EgoIwo:Û7Bä¨¬yì9™‹ˆÞž:Žg$ýŽ|~ðñ'Êž aµLÃºbÃdm+ur;KãÙ’î#ž{¹+/)Qt·¾ûÚ‰þžsçÞ=7A2äeÁšŒF>»pÚ5>œðk®ýO9P.$¥kÂ5ÄÆÙ>þr€4\sy‘êc±ŽŽXÉ¢¤‘Ö€_¯zWÐÌm:¬-òÆýL(L‹F…jjz½Â:ª,^¯•,/)¦­e[^^€éÈùýçw¬ÑÛ`iMmÖÚ6Xk“]Á@¦¶«¡¿gèÅ¡8_œ¦jÚ!4
ê¢)pMÓF×yÍŠ×jÖnu4Ö)Ú	r Û·´…T«¶·gåÀÝØñ™1{ §ª€lâ4‹÷(ZÅµWþ9t„-Ff­ù,H%A¾G¼õ·bo™b5M´M5[û†ô+¡‰?“íK¶I,]Öôáo3ËÀ „Nì:uÎVØq±(ŸGc3¯°év04Ã°°æ:xÓÔmóN¢²¸XÐf°ö˜ƒ3ƒ27™é1Âàoœqn[%9
Ö}‡4qZýLÆdYÛµþà”_#M5,îVÀ_l3+Kcbž!€vj?É?ƒm­Þ­¬yOHùŒ­ŠÙÄ9@¶]ò©NJXyöTÛ!6ä´SüÍ³hsÙœÆ°oçT7l”6™Œ k¿ÕŽ9ªTÈ#kæùuYsÂÚ¡$¤ZAž;Gäè¹Ñá|iaåšSßùzÊs„õ¿kD˜)&s¡sÂ;X³™ÄµTwdA\–Ê£©nêd[Ï8?´lèÊþg¾Íß×g”Óü¤,!Ÿ|†Äf£5×›nkCts´§óP¨(¢O‹õÝ&Ó2I5[Q4Ïoª¨nhÓ@5gùç?ê”I”ì¬ž{ùågV{‰éjRÕÎ¼þ³WÔ 5­Mœ¾þsˆíúøð8fQÉ$¿‡þ±á|k’×ˆ¢ÀZË»ö¬¡ºÍPÖ–jw°æ-¬DÍ:—.ÕEkáŒà‘ÓˆG	ÆmúÚEÿ¢Í¶ßÑOS¬¹”É²G­¯¬,mÖN²ÿaÃú“’×6˜H¶þŽ»6Þ¸†26Vœ¦¶ŒCt2Á}„€†¼vd·ZWàÜï|:þ»-qêj4*BƒÏ]sá¡ÉÜ¥js'@ŠÔæp„Ò¼®¦”ÇÐ°Ÿ˜¦NØ«•ãi…zæ¨²þdµ)ÁÉ$°&eMÀ–Kä2MÕUÆj•u¼=T”Z“f¼ÖA1Èv¬ã7ÿ0Okó1óñ÷/Xk,Öî­!«kÅeÌ‘ØPÚ®a&Â§:šD’üèXv“´f¸F,)-­’/dUsòÚoYrQ4/­¬‚Õòó’ò¼“óöšîXª•*5Á³rlÛKþ)tí—m¿t5…Öd <Ëº
ŠƒÑÔ’¤>ªv’WbïˆIá–¯ƒK{1u¬ó»Ñ7\ã‰Ò‰ó4Æí„IM­ùHfB]-Z‹˜ìç›òÀ8gN_¬‘9qëÚØ@W¢ðÙ°hy6ÍËKtwá.çE¥by©r(.•©¥8-Ÿ;HO~ñCsµÝ%HoåÝmiš\·ìI÷¶ôõRÎG©ZkW'äÖÝ›3X;zXÛ\_*o3)i|pè©t–4Ë^º³ÁtjÜ–á>šn'âÖ‰»+Ýý¿n^K¿ðökï¾}í«Ë–©øìàÚ›ÐàÉo›«Ÿî†+ø”äqÍŒ!sAíšÖ€4ƒµ rm°)–ÉÄ2?º-Î'³0ƒÆöªï«Æ@L/`&ÁœìGÑZ9±Ñ×cØÅ
rÑ"€Í0 Øøl·xQù®ókÏÿ’Jµ 	ÒBÒŽ#–1Õfz¯ÆNÑc­¿'U[“I,¢?v"ÓÒI$jH…ÕZ¬©šÓ×ZÏ¬·Zc:ÑXW
¹YtÖTcà_“ƒÕ‚èwÚF?CŽÓÜ¾ZJÖöM·Ù¹çšCµ×gv[{h†Å¸¦kÖBiZÍæ 5ã3§¦qt9îv¯9ä?ïò!]Ð†.þ¨ÀÉ–Ë€+ƒµûé¦KÁ+°QìTt1R¬vÜ/‹k0šƒ5\kÜÃ-¨‡ã,lª?¦”×ÈÆkÜ¬×üÈ#€Z?]©O‰ÎÂ'~Á¨Ì£š°M7­Ú6 ‚‰¼äLZÙLl­+m…NØÈeìæ/â.à» åµ X)qŽ»9×½âôða\|£ê†NuŒGØÁl /	À3Hè†|f'†bjÆ¬ŒÐÚ©Smš¤5Å{Hk ;¦67
š­íÙ«}®}:räÓ”5oß?U²†m¿o²&X{C Æö”5jÖ~?::º.ÏÂ›€ŒMˆÔ ÍAe3—9ñ^‘3³ geB†SåC¦¢ô­Ž——ô\Ã^äü¥¡È²¡KAä“ûøö7¹aIÜ«	Öè¶VpûÖEñT i‚ŸÈ–ê*G¡·Î8ÙæüSo!›¹¶³…¸ßy	µúKÞÛÍ¯çßÿýCg.BÎ´
Öo‘ë7oBi?¹ùú„Xí´U#ßê¹1<:>¼@¢YþE«Æö(kº$+ì¶™.É»1›³ÑX(ÕŒ@Æª45ô5¾é4HJØ{®wab°&Z³ŽØeÎ±›%"kÜi¬†‡äv—3ÉW«•,>¡¾j‡É„<¹zÓƒ'™l(hX">¹ée6©œm“ÁÚš;W³þàß{•€g5BšêØ°¹ó.u,»sv—5jÜtt2˜“ÒÂÃ¬s›Îh­æ»`kŸ3’Û,^3Vs]°ÃTH%CBk·ˆ¸tÃÆ«ÝŒEŒiIÉkµxBš°ÖØPÑHDEie`m°À²sdðùƒzgxÿ¿Í®ÍÇ|ÌÇß»`­¤G>ŠqCRS käE*Š­ßZY1þeeú³µ™>kõÖ
Ö\TÉ<¤Š$ùíï;.CRÊZ9‘|]ÕÔÌÛ\<…¹ˆGŠ’µÕMÛ›%©Eâ©Á{g7°¶|*	òÂûëI¶±,5f…°€ÆÏç­/¤ÇDÌ4¾¥ú«ë;©³y(ë&üÐL¹Œ	cº¦¡)-ûûlŽ¨i®˜Íj†’m»wÿôi^×Mçì<:yágn}õÑG§?™<Ñ…èC$ŠÆ14¿<Îø9²=áºÒöur"KåÒ©¨Œ*«!ç%"¼2€¥¯Sƒ¢öD90¡Ú3RÓíGÏzÉx<tddçÅ%Åí ÚHÝàÈS
L¨^k´ÌÉCÇÉïÌôu¿­u[t¥{ß¾~ë\÷¿x­$2pí3W¶†ÑElï\¾páMë Ëoú&¦.O?ýoßÙM*ätcÈ´u)º­Î‹kGEl¬¡´QV×P§ÓLMËÁÁÆ†€³N¸ãÂÙ°¦Y ¬áËáLFq¤B,¾+Èhòb/Z±kíŠ÷?»K­Ö

ÝÎS±†¤Ñš¡š;ìw)Sm¯èóñÐ f¹x¤kBJSAÆ.²Â5Y«ãfYµÔk#²#ilïŒg*êjj€4å<æúéme¶7‡ßƒ°@Ý²ÙŒ×qÍŠÖÂº5SÖþYÒÚCVµJk¡²6jlÀÚoçVÖüùûh¶ëGú‚µ÷mLF‚‘°éóL(nÖ€´2ÚêJ0“‘9µtÉ67ãf’#™œmÞ¬áÉïÌÝ0ÖÌèQkHkv¯NmY§Í
ž´Ø^h1'›­Æ®r3/Æ«sVª…¾ý¬±;B#0Ð6 &)8x$³ÝÌ!m‰AäåaM•i ¯Á]vªKØ·*ÒXM§Î‹_ŽýhZVp¾Î[˜ìå¹t·ÙG²-!S#×¤¡Ágj¹&pcn–"žÕNÜÝO‹gÔ¶KmpÚ	«X#‰pcÊŒé©/žU1›ƒµn{ió·çÓÏ??úù§G¹!TµfÒš	kOIX;îmû=ª)F¥¬]CWûãÅé¢;QäçžË˜Ï€µ™Ö#3üâ¹ŠµÙ´ÆÜBÖ3‰Ê7‚¶¸X¾h(l‰ý ²šüûÉ„T@kÀš5Æ^¸ph9™Õþ{XKÅeÛŸà¯®a/-MÅkUŒÚÉ—L
ÁZÐ`M¬¶ÖŒ¬ Á6ÓÕ<«É°Ÿ¯à8³ ÚÆoæ÷Ü=>:¬¾7T«æ-Ï`MŒ«5~®V]ú£ÀÍÛöû±Ðékb4ë53Ýçt6Ù‹°XÏÙ6;¸^rÙf¦—“èHQÚóÏ?‚“ˆ—Ö¬óiÊ†u<_Q}òãMkü£åAn8ù‡“6”,LH{Ö —Õ8Ýª‰i 4`%In\s`ŒÃ»Öo4F»“lCØ-TÖü6Øž¿ØƒÁi~ê·ðÊÙ6<ïÞ"l
CeX“•ˆÃ4›pnKw©û )‘œ‚¡höþ¥|&A\K*b	YB6eP×*jTŸÞh‰:×êêŽŽtÎw\›ù˜¯£vGÇ š0ñ¯N”iù±ç	gÙO)Zqq•¬õŒ‰•1[@kÊø°¶2°>#Ê“”êÆ;üªê›IK©N¦ké@É;Z¼<›Ÿ×Õ]ÛÐØ”È–GE¬™¹ˆ|CaÍXX;¬¹Ö_Ø?öÅp¼»õ…$Ujöƒ¥ÓÑ;IL,YM¤ÂZ¨¡ykL…g~0ŒñD'y«jI&ã½EùÕ¾^m«ýx7¯¸©7ôÓ§¯Mâ,29q«§çÂ¯ÎQMW˜AJëŽæ-UA]Ñ’%‚¨h¬‚jå%Q—ªÍÂ?5ÀšÐ­¯…Þ]:ÛùñƒB¢‘lWg{JY+2„¤›Z0Æ¼OP„?³Kµúº»[[{ñ“}±ÂJ^V%›£µÞ·Fo¾=ðîkïFRC“4\3ZsÚÚ¯Þ¹ðm²ÓÈÍ›ÆÓòñxÊiäöH—Œ!ù–ÚŒF¯yXc¦¶ŽAä6µt^ëhÌd(3ÁZHhš³FxYÍÔ4Ÿ©Opä?‚e‹"Ë×m|ÿÎZù.`m…kçw-_»Ÿ$Hšbã9¥¬Ùˆ²†Éˆé—^»ºu ó~|a²¤>64Äo/ÉÑ$®u
ÈÚ+êpÉ4¶+Ö2‘NÆvk˜ÝR×Þ›mh/­«hà³yfçz(ëƒ2¾"{û±…´i«Y³Š&ÂhmÜçAJ^s¸æ«Öæ”Ö|“5Âtµ´6¶9“Pg¾‘]H0À?³[­÷j3¼R;k!•{þÉ¬Y`äÏè®eUþ!|4zyÞÓ¶éá,q/' ÝÌ¤ÇGùX9›ÖìÔÙŠ×Jñ.’o¿X÷”Éf³nZ™é ›C5†[¡"ˆÌû8‚d®^ Û4sî!Ó™4¶S¶žˆf„Äk®bGºeõ¸^7°Çù>*–%AºzÖ±D›´~…M»=— Í`á6ôí’!·™v6Ü#MòïWœ`Zã0<Ì¹Íyø¿e°¦Ê5Î÷Œ|NHZ9(khk2ïŸò‚|nísÓ„5ôW“®ÆmtðaÍE>7–g«h:°æ	Œaš£ÿŒ4Hv»fæ‘ð÷Q9j!eZ~u¨\YË([ó°öMí„ñ©Î°ùêµ6t{~QAÁ«Æhq_®¦-±¶Ø)Z¬%yÃIÆÔz;™—‘[SkX‹¨û
[½¥o›7‚û«ýD·Î\ÿÉŸpí¿õæ›£ÇÆ/®=3¬ÝèÏ˜1pðMÀ³Y°6Åg®ÍŒÍ!+m¤=BVÈaÛƒÀÄ<!åÑÏ½Ü¥ŽiÖž]j›.1GHƒ1D6Öv@r"Áíªzó^þêÅVµ]?õc´ÕëÿøÇ?œ<ùà¦?>¼qÓaôµMÖ[Ú~<¬œ	ÑØ±ŠÜ¸>p‰D¯’²vçªW*‘)+ÈÙ^Â4?x¡L#1[Pów†—ÎíØÏmUAM°CZ“½ˆ:akrÇÊ‡\E"'ÂG# šÃò×MAw÷ßcÉI"ƒ®–¬Í™}?ÑÒRQI=-¼V'H­q¬#ÓEåk¥ƒÿø_ÿË|ÌÇ|ÌÇß³`ìGk±VVF35Ô5Â`'ÿAXj5 léÒªÒÒz«ª*k"6º©©519l«¬Õ‹ã\§}*1‘­¢¥!©«°]Œ.(Š®èê„~ 4RßAF`µe3…µŸMÁ6Éþ~êÕÏk1š_…rrJ%ó,’ŒHžÒÂè,ä5ïÙ¯9Á=p’­…w{,ÓLÔ¦s0‰b.]Í[‹Ü$xŸ8}áÖÄ—£“Ÿ\žœ#5XËF ²ü¥1µäÒX9/GÀÁO()ÏJ\ë"ï’§T©ZCUg²€<D›ÖNæ}‰ÁZG§=Mv†GEtUêë=tôÈ¡\g¬Ft6Êò©ÖÖã]µM™ôñã½#í´_ªÍÄ[×­qX£€Œo½0P‚kdI÷£×F''ÌÀŸií_]ÆlqÍCÞ”ÿO}×5áÚòç¨\“1$þ%¾]@g$Do [»üFëVÄô-»Ð8ÎÊ‰\–³™¿ˆÐ^`°&¨]‹¯HëŠòµkKÊ[É‚Ö>üÝþ]÷&¤i¿ó ~˜fM	ÖCgW&† _^uMKCcM$bµ+Ð¿ak­š5Äk#ìš¬±Br$ç‰’l{¾ò[¶ Èí+ˆ¤70PGYC]ëg*%„µßØ>,Xó#Ä+&®A¿=ôPXµ¦¢µYÊ¬Æí-Ý~;'§ùl3b'Þý®ÙZ±ûêÅ`M’£§5_ªfÒ—ã1–™ŠÚ4Óü©îêÔîÇÒ	gŒ¶"V#äùVôÉ6Pö¬íPµ+a¸ìÌ÷K«wzõ¯X/÷}§	¾»;ŒÙà™ŒÏ8:P³p.ü¦1Z>û„71wHoâÈ¥v÷Ù•\!	Î…¸¬?h`Wh¿k{ñå_©tFÄ'¥©Ž9‹ëŒ÷X[©mÝÝ š< R[¹]Í9‹ kÐ—ˆÄ4…z­µ1¾«iM©’NLãT“moõüV&7RÖ¨WƒÔØÐÕä.BAë×fÍ³šU¬ÍÖ~‹ŒþþRÖzÌ¶ßE˜×HˆÍ|ýY€ižÅâÂSÂÌ†Ý&F†v)TöÀUž*9ð=ÄEHM°fM±}0¿råœG
VZäÐò¡E¤Q,Ê_˜ÊÆó åÝOÒ9”þ‰Ð”ÍÖ´ •–æ–¢Ã¬¦ ;œèK¤ãYò–óN3‹Õ¬WæÏoÞ¼þúõ‰/ßTz»úaŸ™ïÏ£dM°6¶ ¨0ï¢Éö–P-sÂD¶°%¶—Ô<¬ái¤ÆùvÑšô/ÌEÌ£?°„ôulõV¢öˆˆM°&B»×z­ÁdZÎøWgÏGâ$ïºêuÈµ„ü$›—I)ÚI”µ£ªmX³Ñ`Í, å©ÁYó;eX[ÿ ŠÖÞ¸áMƒâz4µ ÖÈ1D­b2«fÍG€kÚÂnk3	é*Âè’(usOà_Ö«±ÏÙ]Í!5€RÉƒ ÏMk0‘ÉÈ¯}©…1pOã‡dX«­±h¨i¬¬•—S!?o„*èqT\:øþ<­ÍÇ|ÌÇß/þÁòÝû¼ë„}ï7žà‹¤Òâï>OÖ«køŠd¼5ç5×—ñcM]ªäš_…ß}žî2y­ÒÊÔ¬C¨P.?‘ZP(gHò!š©·Næ§—"ØþuÁ>àKå„\ûçÖ|d4{bÜDZ•OHO5"i`–f£>-éìDh¯¦`Aæ%3F7„	’ŽÓ4DÇL}ÛÐêšÓøAbÞ_q[ã\¬f/í?¸ùCjÐÿôå›ÞùìËO&&o}29>9:Ö/¿Ê¼T–ngÑ"^˜Ü&óâbµ(KÙH<†H‡¼¬•GK:;¡h-¬!°õÈ¨_X¨ÁA#ÒÛ@³Þ¾lÖ#4Á®h¨ë8z¤¯û)9Ž:zè>¦Axfüx•-“¥Åv†g<]¶œn×ÈìŽSÂ'—Þ’Ö®•q%Ýãf
ù‰ÁÚgæùeˆkòñŸj’ýÍûî{™:2á5q‡Dk¼@xRtv”°®Øb7A[F1K‰bŸž÷h£g4›ÛLSÓý‹WÈ·~:æFU¬ö²ŒË	8MÖ<¬=iÂšUŸì¿òn`m(¾h` Ò=kh±¬ÆÚ°ÆaƒüDØˆðf¬háÈšÁ[¾¹ö[¶4T+y2‰ïCRë4TÛËGúÊšéjaöŽzaM¸vÓ—­=­ÍÖ 5áZ(­½÷Âš¤µß¾÷Ûöþ§±eÖ9¥Å;¢XŽ‹¢­éÒšh6w¼&íK°æ›e—¹°ëÃ0‘m®.ÍÁ§aöãý„ÐmÛýº°1 0ÝÍ­„µkä`îØìËèÊ—;Ý‹?aæ%´PYó”æNM–d·_aÏÎÀWß²ÂŒHhSÍØ	îeÉ¡X°ÆÌû‚0
Ãôh]ÄK=LÎâBY9‚gÃ¬îcñî‹[M5ËôzœØMÛ:a:®w8?Ê]DëŒò€47–A2	hâ3ÊÔtÔ ð^:ë±xË™Bòc?ý‘ƒ5hÝ	krƒÖ¸¹ŽØÏMÖBã~sî—²vî¢1ZP°¦Ihß–­Mq[‘G5$[s±ÐãÜ°æ¹OÁ£ÝŸ[ÅKèüc<«‰ÖÓd56áqéÒ•/?p•Lú‚EEâÀšžT ¢úÎZµxyœÿ!ÖŠ’™†L$O¥ÒÖ”®¥Óø0É\äûçðÓÿ†dÀjt`¹ùÓŸþâæ-ûˆ¥M('Çä_ü¢§çbþðØÝòq:¤«Ts°FdPóÇš™ø¨9JÓ”0Ë-3î¬¹£2%¬(ÿÑå@
Æ@8Š
¼°f ¶ÃÀÍ§9Ú²Öv°°Ô`|ìÜ0]aóÒÃHkŸÐ°9lvB²M„èLþý ›;ß€þ$¼q6!¬Y—l`çÎ»Öî¼kÍš{eaÍ‡§)Œ³Â²5&Þ6Ä&þDƒæ¶âÃMíÑµ¶0Íö¹YMÌ]DyÀ™R^s’áù¯þ¿FS„9Ê\D´ÖÜ¬dÈåÍµ ›ÔµÆÊÒÊÊ:²‹“‹v,³­Iöûó6#ó1óñw+X{ßzˆÓUí»O<þÄßP?l<jÁ¶{Ë¶ñµ±¹¸XÂo<#K—Ö+ª 0Ò:`5D6¤7N}5Ž1”µíUò…Ä
’ÖÙ™ÚŠÑh*Ýå`}…n„XM8ämû=¬	Õ®¨’K’q`,F83zBQ&¬ÉÒÉIeŒŠ„@ÉSZ:ä5²œ»+µª]#Ügo­ÍÍ´È”gÿÜºÚÓÕ^ÕÈ–ùù› –ýX+~öUÏ_}Ôo¿‡B4ÅTÌ(²»<º0?‘-)Ç¢:Kj|Ó^t_Ž¯w¥ñu¶´WV6¨#'¼–îéhï´‚(!=2Å½9!÷w kOÃKŸ²ËK_¹‘0p÷S}‡Äl­Ý‘(3ÌüûúŽ¿üœœ\ò‹Ôt<’yÙ¥†l£·¾üËŸ}Bä¯ÌÈŸxÓpM´öJˆkÔüÿ¾ûÖ®(Ï*²SâšœFØ’ù„D5ÁZK»JØHƒ”?[Ì‘™ÂYõ{jãDçîŽ¨vYA²Œ¬&‡~ü-\&D+/ÙeÁ|íyqÚ‡B6ë²¬1cdxé±ÇdÎÇãôÿeïlƒ£:Ï4½¿wço¶J¢$(
Ê‹+–
ZàîêvG+JQwKÁiÙB‘PÔŽ·\ØjMDLŒ?ZÉ`clk
$Pìò’TdäØSò6Ø“Ùx—­Z1øÛ©$8Ù©Ì½îç=¯­h*óÇù¥§ÏyÏ{Þ>ø8}õý<÷#µvÕ±<p–éÅ¸ë›JÕxëæX¨5SÔD5f}“™^~³k¢5yìûê·å#‘=Ä®Qv	k:1°aI-ÃH`Þÿ<kÅ5õZ×<­{¿…ÖT²fY¯AkhkÿÁP	›C5AOzÕ=¢µ4áa¾"žá˜nÇ‡ß°Š%¬¢Ò«\ø£	hXFÞm4&2sNýlì¸òë”íB9çš/ ­}÷npUj šÁšA›ˆ¬ÔB\ãÉ€Ó 5=váOâš 9NóÖ":dOáš;ºùµv‘š:²´æüûYÁJfÓ†¡]Œ£H› ’.‘PöVÍ1K|<v¶§F&Sä&õX3-r5w„å€‘³5òêgAqÒ%A2c¡!œ‘yÒeB::s	‘vÂ&T#ìUhøüóCb5vhÍµZs¨¦,HW±vðÏ„µ?àØ?%]M¤†®þr¥o²Æ¦ÝÃZ@pž³xxXc$lYG_6æHŒ…rc9îÎ¹ÑŠÖÆÌ¤<©ÞùÒxNŠ™HÌÒ QË1ï÷Á‰¬wÑËi³öÒ;=+ãïŽköÒiþáÕ$‰à'ÂwŒ–AqVÐÖÜPß=<˜.S{µnÙùºþ”ÃÞòý]Çý!«k¯>ÿ>‡ãS8;7XûàMÜvw4ùŸ Ü%šu¼æÖl‘ÓÐ¿ÖÜÌ`Î[@k¢µí
p±,Ìh¬©˜M÷YÚ]&,¢ª‰Ð 0Ã58Íž3¶“Ì†L§o"†sÏR‰zÂ¼ ÷AkûîØ‡kˆÙAšbÆä„ÊÒ8W[lÁÚ²Á}dã-hn›o¸éË„„Ì¥½ŠH†õ!«]ý¼Š5C­iMPLü.•úõû/÷ßÒ¡à5QbØ}°¡õ18QÍLE®_“+åI'¿“›oØ|Š¢ø£²°í;¦evƒ¬¹ ±‹…ikæàßÝ7Ögþ}æ,GH¹ø8ý¯‹6#‹±‹ñWJ‚, kêh¨æâi [Õ¤§m‘‘ÈVÁ¨æ?T~¼fÍrxìh2_,Vé«Æ”½KÍ±5e¥[R*kÞÒÐ‘íÅ˜DÀÎLVí#z”°šñP)¬!¬ýìä1àªb5Ý­cA’‰nŒjªÆ²º¤‰áz]d2‰­H™˜ógmÎn‘ÍsQ×*XI	«¥Rír=¬_€Õ¾«’ßÏé®¦´™·%G©bíÒù•£_œ¿Bd¥zíð6Hm»I{ŒàNAQKGË»–—µdòÅ–^üóm9õ™¼nÅL¬¥Ðü3œÍg&‘¬¬tj˜<J8cÒä¶ýÀÜä““>H¡s¿8¦g”­ Ç¥c‰XÜ;x_´Z%l9uÆÖ†‡éÅ¨Œ­¤›©«mùa¼]†_žšþôíÏ^ùì_?»Š¼fõk¿U.äŸ¨]ãƒeëº&\ƒÖ¨õÿï¼uÍ:\È‘Ç'%=²["ä€šÂ•°®;Ä±›—ÝëhÁc"³xzÉ5°Æ<„5fÑ¥Ë–òé8ð·!¹4Y½¤|	d@
R×(Y¬½´V*ÚQ·†¤š2Ñ@—òµÇxò‚wÇÑøªÖP3£ñá£ÃFkì­)—´8ØÒ^o°¦L	îÉ}Û¸KsÌG‹Åññc(+‚µŽS=™2c”V3$AêŒp-±/kúT´V¢­ÍIk„°6'­½Ì&a-(Y{R{í£>*õùJ›€ÇˆÍeDÖÖ±yê2.3\sr™€sF8Vã;¦¤`7h‹<FR#ï-»ñ»að¼+jã9ßhsŸéP/¬Vójo^4À¤ÜN¯¹öÈýÏò0VIÍ›‹xp³§aíY£µg‡`-ã/góaQã­ùÙÍðÑàæÒ9TgÌf—g
s$Aùªñõm\>¬	”j†ºKFˆ‹Ë„OGÎZˆÉ 8D7·Ñ+³Æjv¨Ù„®†±ˆuVÃiDæü¶qqVÓ‰Q¾|vä¬–CXƒÖ4wçCRÔØ‰ËŸ:¤7H¾Íšzb‡Y¢µ£!­†k¬ýB9Â5² q„áéÍbu…°¦'æûöÛ’ô5Å|ZcaÍÑê¨rÕd‹Wþ³º¸ƒ,G¯«ýà#ª	Õæ`GO2—+[ïÙ`–"æU‚¢'™V#¢qûÞ	ü%ãÑDGC=òù`¤²R°¦ÐÿøèKs”iÿƒúPaM¬¬½ª”‚YÀšÎÏœ>335AÿžTG‡øLHª[éhÆ¹BVk£”5»†#[(­‚5Û]F¤¾‚u¡›±¯É8k;KNF3S}¢PMšÙókÂ.X“îm¹.ºt;Iw[¿†ý’ÖÍ¸ÁÁú`“xÃzuãÌp¶ù;·l¼Iæ# ‰ƒHhôÂV!ukAJµ¢oÙõ!;	Öxx¼r f›&^1+Mu,]#üâ°µÚ²[©¤ÍB]Ö¬bm=ØyƒšÄÁlrSÙ¬¬vÇ§©¹¿«ö3‘ ÄÑ2!5&T¬žçnliD·ƒ5B7öÉ‚>Ðv2Û¢ÍÈb,ÆbüU\û¿1Fàý(óÇûüè ›áš5Ã–Í ^À¯ÉÞÀZXw`†p€Ö×ß^‘j^ÑexfºZª-¸i­æCû°Q÷«T3QŸikOµu ¶€HÉl¦Ø‹íaš3ñÂš·‚$ÐÕ¦/ülêH/!3ÉD“Ü¹Ó-O(²IM¯™f!°æ‹±¦¬"E^	´3k‰’6gA"Å-×éZc¼å¬µ;Ts9-Æj±Z€‘ˆÕ€5C5Ìú¯¾ýÙÌÄÄ…›(>¿ÂK”½³Ò}ðìÁÕIE¬Â
Þ—wñÓé,Žäó½`-Öbñø“©¬#Õ×—‰Gq]i›,<Q0XlÌWQØ<2©¦ØZÛÀ/jÚªêO¡µ'öïWîd[KÖUe&bé¤k¶(+Ih-—«ŽD²-Í«;2~^‘ÈÐqg®¾Âïàí zZ“Th¾g¬ëš/]³dÈoQº–|!¯S¸ÙÀYi¦#äEò²:Ú
˜ŒÖðÆŒ‡¬F8cÈÀ#2ŠI´|Y2¹fÂÚ2è}Y4².º¤Vk$$ªßÙXÝø±QÖ^°”G`aMý˜Äl˜Æ=ÉÁk¼Þñ¥=Þ¿cÕ©D¦säè`P6Þ&g ·ú¾v0˜³¤4¬XkmÏ´Ö˜M*’2A<	¤µTª«,½<=5jö>ÏN#ÑJi›à	?HáZ‰%$¸6_Z•5‹£†k¢µ×­ýKX³öã²*…·%kÚÙØ=¬AQwSâ"xÓ©ÖkôNógÊ»ò×VClZ	¬ñ<Á‰&Z»Ù¯ÎÁ"œUm»×Àš6‚ãÑg5Ok^O+e6/ª±ñxñYL>$‰)OFfQ°<&ÅkÔa	>Ôª®%Íñ€e	‘ÀÛ lÎ}DBÖÐ(†86!õwQL7!J;6tVÞ üâoÕˆÛÄzNR#8HzÛ¡S;.ž5X;)çÇÃ²#j²ÆñìÉäB:1M[€m»8yÁd5k¶öñ¡¯ø§&YÍ+k“°«8aM¬öXs Ææe5=¦ÿ am>«F ŒD˜ÉQcN\34-	žÕè›aëœ§“À>¬'Á¬¤g5ÁQ¢¬ÝIÑqñ]áXõKãåeQ³|Trõ©t–ÿû£–Je-OóýH_VoŽîÙædmgH,ZU¯lwCVS½Ú#¦«ÒÕž|æI%K¼zé§:¿zuöüÄù=]o]˜èèÂR?…R}9á¬üúrObªÍÄ4ß~M;Ãê0Xap²ÑÙVÖ{Š%w“³ò4	hwÛ¿)•©±›™Ô†rÿ´·ÞÁ|wmÝŽÎÖµb5ºš8íî»m3%k'î€Ü><qâ¼f)ŽœnÒØ©cãÀV‘4`£ý&þp™LuÜˆÈöÍëé-}ƒ|CxBéò#>Jó =¡y<³Ñ¯„G®ô¥j%ã|VÓ~}‰³ˆÖkn†ˆ$MãÔçûëOPUæ`­Œ?2çrOà)PcOX´(ÚRmí­é~À[$)kšÐªŸÑ˜îÜœûim1c1þkHyÓGë‚4Å¨â­zMïÖ0ï'jª°w¤JMõÏ[˜º¨Hµ:”Jõ÷w©fM·¥Õ\€xæ¸3!ÝÊåHlí)üE0=lIt q±lv]¾8à ­:—L'Vó°æ+ÖÄDç.œCW›¾0TAò`ZÓÇš1D¶„¼ûÍÿ1(AK otJS=Ø Kpt°¦£Ï„RxÞ1€t¬V4eù:RàZŠwóŽÔæX-2—‰âçûtÏÎ^}êê¼ñÙç'Ô-Wg¹‚éC×h2ŽñY,–†Öhs–ˆ!m%ð­ì@×Ö†©BÈe&’ÈÈ›°#äÛ±T}_!èô5 ¬¨•¯<:ç“fùpøðH±~Kýd°†¼Æû½ÁÙïaÞ«}¹wÿdKleE"šèÌÁ7hÜAg‹$DÎ#Ãe•‘Á¡czÇøÚkÓ–
	¬‰×¨_sm×fÖ\.äý/<pgÐu­1·.b¾.R°æÔ5Ok–YÈI…ã7Ò’ˆ[}Z<‘^ês µ Í8[¬aGËÚ5«V­YµŒ¿k«#Kè±¶Î:b;sÉdãûï7ZäC4Uã(sÁÚ÷ÔD÷±;3V¬íèYú.[O[†üÑ|¾MŸ³çaµê,kÔ¦‰ö¶n~°Ö$qf`5KˆTtçGvïÎ´@†8Ü¶JS}¶Í¼®Ö*Xc®¸ ,*£µÐÒ%B%ekž×þ14ïGX{´ö—ûc_ž+\“>u¡£² I}4ìr%džÛ,xXZÙf®ýºŒ™XSt6”ËˆÉT¯ö·!­sX-¸’4I'Æý{q#î®3€¹öJÜdÖ$3ÂˆÍ»ô‡¨Æ¢<kùéÄà%‹¹~i€Xôè¥Ð	5¡yóGµG¸­ç¸b—5Â¾¼"&ÐQM,Õ‰Á Ðš–ÅJ›$œm Ä“8Æ%£W6™%?¥k ˜ÉjÙ4árv2!ˆNVãb1šÜù“aÉa×y?²Ÿ5°Ciö*ØxÖ:ü‘ùÕW ¡Ú\dÑJÖ0í7aÍXí¨Píš‚µ)t5_¯6==uÁ³™H#œävOÓi)«9~Spô±€µ u5;a«§¢iºW§—@i¬Gªß­çÓ Xm>¬}Û—¬Áj”´U£Å_¼¸´|ÍxÄ¾%_OKŽ–Þ´h­XÃgÄÔº|FÝîi­ÈÿR|D3ÂÇéj|î–³fØâE$]o—©˜}æTqhjdÅÔž/>Ú31uzªc…ð5 TÁ.‚î?§J}Ù2¸[”Ulë§kì«çÇrÝ1hÛ®Â5g3ÂT¨àØßÖI&cÔv—K}¼ÛGº€æ”ŒEÕ	Ûq	=Úšë;»¶S«ö!Úþ"·Üp°†È	ªØXBg#TÃÅ‘Ú4 ÆG¥Dª’ífhG}¥¡µo*­P»Ùš®•$A:´òG0m°yIÍý®G©ÿ£mDø=n®¦-T¯¡yë~9?ê”£™‹HbÛ|Gm ÛSeØ½‡²XB²Z"ÑÙë”g‡ëŽÝ Ñ¼ˆñ¸=h¢¢Ö8ïïÿê?/®-Æb,Æ×íÚ«+T9Xû¡)jL°ð¯³„Èº:PòÚŽæ­ÍÛÍ’+»ÀØÝ¥¾¿_ûl§
©
nr¶*\Gj¤bû–.’!¶.tœ6š—‡£ñ¦æúæ®–|¯¤*‹ÜÁu±dId©°vn¨é`4=0ñKÉ1°l¹bÐ™eBŒYæYD4ÎKüDXqei‰Mœd•é®HTd…l1FÊßZÚ”Ù.Ã~¢{ŽÕ"Õßråèb5å@ZƒîKoc 83ºéÌ¯¦¦Î|Q1433j°Æ]:®´œHu2Ð—GùÕ…‰ÉÁÞXSGsg<®W
°¡~Á™üÀpw³øÞd:†ñ¶ÁOOLæ©yë«mÇo„à©bqx.{\–‘™AÌGDktVËdFöüä8´ûžØ›ÐÛ©Š¦Ì^"WÖ0‰Ä+*”šÙ˜‹DÉŒLW“‚4pôõéésÓ—~û™õ\cÀmä·û§WOŸ™ÃµGþéþ;‚®k·6Bk½Ù‘½üªÒÖ
TÑ)­ÁjE¯“}¿²$éC]ºäT"±X+Â(M{4
¶ktÑjÅ:9ƒb-²nItíÚUÕÌ@5`Mö;Ÿª.ßùûß¿#‹~KƒtÚÚƒî}Ý/°ö°Ö³ªgÇóùwtëOÕ,™Óñ6¦Ö8ê-] k|’
¤qÊCH
2t{Ã¶Ýd*ahPNÝîÈFíÀ¼*ˆ>Sk|_ìËCôß+É„œë]*­‰7ží Ö‚DHÖ~íÅ5kSÚ6wFý©ÓÕô¨›Ë:¬«­ò°&.Óàñk«Ÿ†®üŒºÄdµo$é‘ï2§ÉÄßMÃ@C“¶&ZóÂCðUaÔUy	¯J0ÉY/W»KSƒ5Ì`1¡žv¯£·Ô¤ªñk2dtÁ‡Ø¼²À©©†;<ƒ«£òÌ¾|ù²|ø/ãR"âªM´OóÒš4µšÑÝèm$½
–Ž“ÖV£Ê´cÆQà˜”6„5eHR¢føfqñ9Ê°¤¯ÁgLÍR«M;òaiRšÎä‰´¦b¶¡	z½,²}dRÞÇ_)>—²æ`Mkb5k²6'¬Q±FÉÚQPÍk<T°æHqjhåŸÁZ8Ñºƒ5F"·0¼ ¦u7ÅmapÀšo“ÍÈ)¬V•-ˆB¨[{ôþwU³&»GkÂ4"øGÍú;‚µ‹¹Hºg||Í²¥ïÞŠè^Vy*Ò›€Õ²iØ/ÝÛ›^µà*2R´åŠIEW°†·ˆn<°Ú÷è…}ïsÏ=Ã¿Ì¹È'Ÿœ}cÈYlû•7qúÕ™¡.°}bâƒ3gF½xFèHÆ¿{çokzRGïÉÑ¯h¨dU2›sÜvÙ}oÈbt¬ÖU¡g\uŸŒ˜$kuuLùÇ°mß«¹Øj8Ë8ü‹ñ\)ÜŠ
ú;7›Ž¶O€&³Öj6 œ­Ýt³Ô´ÍÄm„«eÛg.‘(mÔ³a6"VÛLÑ×7Å=›a6ï/B5‘ó¥5^X6aÏk¿‡ÂÝüÎj¥ºš‚Ñ&!«©•šc5W¢fæýÂ5½VÖÔ¤@´v[CØÐ$ã2ÁšN1~i¢B 'šÑš´5Äµ¶öBÂZ7ÍLÑÔ”Q5fN#*^ûáÓÿe‘Öc1ãkN‚¤¾XƒÕÖˆº-õ­u7ªÉ°&¤Ž¾b5>jgtM8·èkhèóÍû4¯híOqë+4¬nßß¾Ü‚‹©šSLc±Nh-•çV›î¬ohnÉ¤‰¸mÕº\Ž‚55ÃÆµX+ÖÎŸŸ&ry“,abZ,«µ¦ç–É3.³Q›ÊÑ81T³`Õ·Yó¶þYxÎ…SÚè²Í—'2])ÑZh-âYmçÃÞR/Š¶o?Ÿ™¥Y*¸6}etæ•©þabù[ç'Þ
JbQ¸(ž…zy••q^FgWçpr0Ë­¡£IöÙ|–z¶*U1;8\ŸÊLæyÓ"|ènËúÇÆ¨`ƒÍ²Ü,xB^‘ïgYŽ#“ÅÃ9Ý‹ä¿á‰šïÍ}ò	jÅ†1š®E—Ä*ö~¹÷Ë/GÒª_£6D×eØ-—¦nÙ¯:‡¤“{wæw§_‘1¤ˆíW¿ú­B´äB>óÌÿzîû÷†]×Àµa(P•k˜Œì©±^X³ÔÈ±¶>ÔµB!†p»nØÕ´{]F‹ÚÀŽ­5X¡aD#hÃmqmçSï7&“K«×®»õ÷¼ôNãÃˆk€›`ÍgL=d°ÆÛ0eŸ-ÝðÜÅìè1>e—™c[g[÷d¦³MÎý8AN²õõÈl}ÓYÖi[K_ª¬“	¥/Å‘Ý{ÚÈ„¤¾-Õèjù]ì{òC` ÑÊî«ÖT·vùÜó.J3!ÿ'ekT­yZ+©ZûGï1«yTƒÕ­-¬¬Á%Q{ã{—/ƒkNX3Aîø†kóYH±SI4vS¿°í¯ãy>¶÷¬†$#»ˆÌe>º`%ðð¿öû”¤È‡Ò7úâ5W¤vWÀRûÖ»à·mGŸ}ñQ'®y	­”ØØµ«9ZSa o©ˆ”‰gØe¬æªÕxŠé¨žÞXv¾0¸† Ü—9å VÛ-Ë §†tÕ¡fGHæ5b'²"ÍŸÿ,B‡ÝÓ¬£;KìŒ'5MA5þ:ºb5­™¿$	ÒLE\¹šùBz@c‰)Á"´†Ä¦—„¬FâáJÖØ°&VóÂÊ¬Öè¬ C#È)3‚ÕeÂ*Í~ä¼4<©-Lkaú£ÂÐL1¿hM£×Ö†h„H—­çãÕÑ÷>
¥•Àš±ÚcÈå.’àW]Ý3~ñÝµ§Ê1ÄÿŸÿD{É¶€Õ"È#XV¥ãE<^äzS¦%#``­Ø’'%aÀ’$¦ÂÛØï?òHØûOÀÚó÷?3{éK§ÏX¿µé=]øJbÙ?3µÉt2L¿WÃ¶kZ+¬¦£ùpUø5WF@ˆÏBX³à9(Mç[¶ë	3ÈL°¦*5³ÑÌ<|,r;V#¢9»­¾›9r 'ë/Œ!·¬® WÎº«á	•É¶½ŒÄFõTÛ|3sÔµû6ãû(&s¬fi<ÁeÍ	l(iºfóF
Â”
)«Å93Èõa£Ð
²ÔfD{ÈkþXÊi¥ªá¿{Ì×ÕØ¥¹ÑP-„5½AÙFpÍb#^*Yã7xcƒóítc…k¸Ä•QZ"d"ž Ž‚Y‚“––Î”û™ÏèPÔêUè\UµYe3¡~kO‹þ‹±‹ñõ&AþèF%<ŽUÝ(DÓ?HƒµÚú¶Ú:°ÖÕÑœjÞ"5ûæÛ}÷UaÒÿ&°6VÛÕ~¨Ðµbys¡uEûþÖæ ÖVÈVD•>ñRUsªƒê‚t[C}ªXkË®"'um-ºZ©°ö\P±vþ<9‡ðÂD¬	ê©Pò?x6ÙDƒX²³À°ß'?–jk½ÁÎ’5Â–úæ«‘Úz—¯Îf;”é»«ÁjÞ[ä[%¬6ýs æ*õj¯œþõçç/ÍŒ^yë
éo-¨OKSV¹ôJô¿ÊŠ2²,º¶wõRUOFt{_Bý&IÁ\¾8\Ý›ª'2¶lx|ûúkÛ©ã¬hÂ¬Väã=Æ½ûi±µ†Ó«LíðñOâ¦?²wpðø'ÐZ.K¹t|TÖÒùañYtð`£õŠVk$ k9~Fã¯Ÿ;ÿ»7^ù•Á™ÿ×`í•Ó§Ï<ÿ¼píSr!ùþ5]×Ö­<Lb‘+]ÃÇßB¬Ö/RÓA'cT°Ñà,qêÔ©%‰ö„#4fÒ<¯Ù¢Z­Eí•Á°¤=®IFI•]–4]­ÑÜ «—,ÃJtüzhgõN`MÂñ2!ÔÛºúý÷ò6lÇ†ñ‹==¼Á¢ZM|ÖMWì¶âdoºÓ ­]fýíÝL¡4E+ç­D ­¡½uwt´Ö¢·evìÎo“#dkÇ©SAo5˜ =jêMIÜŒçgªaW`¸vmkìy#/:Z3qí—NY{Í+kÿ¢\[(._.9³æÜ­kY-úøNÌº«ö=ÌüÞ2°þ Ç„^~Ý­i# 5…¨šcâ8Íïò²š[fÉhmÁ¸9hÄòÄ/èÞSûÞ¶m®h­Vþ•£Gžµ03Bó®ìÕ¼±ˆ=LU®íÝ„¢U#«ñªÁjf-"-ð„‘ö5zÏžšž=®jÍ²Ì&™ÔÖÜ×Mœp¦Ÿ:×"-±ÉŽªÙpdˆ“š¡còã¦®©' Å >3R“)Ï&(ƒCƒ9ƒ4lÌXPÞ£s±Ò4}Ÿ#C'OòMÍ²ÿ—´¬ýÇ`¡Mv]þÊPíó9aÍ±šXd+Èa+HW­Füfzê—ÞjaZã4Äµ+ÿX+ýKÜúÝÔašŽ6eY—Åx¼iíÑ}ô~V„Oƒü¶õÃff°FPÔëŠñ5‘ò¥KÝ¯•È¶45‘úØÛÒ´2¬a	™Ž¦[Š™þMÌ[º})DÊó³\f	íØÇò‘N	«Éÿ–É“OþôÕK—N³2;3{á¿¯å£3—f6é7ÖÄ].ðË”³ˆ'Q³ó¬!CVÃÖ_¶‘b5WŸÆhUÜ„ŒÈ’ò³fÎ˜SµÆ9!se7Z@iNbcâa×ÛµÌ³®o›õÃf·Š7<œ|]õOŸ ’¸Û†e2¤Ïú™)‚5M³[t¶Ï°î–›o‘a$¢¢«7Ë¬ãÙ÷oD¸›<­‘ ÂU€[ÓüÆ\áY³U5akµX‚Ii¤D471]M,É¬†% yÓú›Ô=î¶}×4jw»—|Ö* 5ƒ5ó|KGªÃÔ5h­®
æoïî“ÄfyòŠO°÷MóŸc1c1¾>×~¼%Ÿ¹’5Y@ªt–Y­4ˆ´³:‚H3p mçR“?0ãûÞ”‘Ä›ïÇ›Û±…l•{ksCÆ±…®/dÀk±xK{ŠãJ\—M)œZbíÀÚš9\;x|­cµùÂxçÎj˜Aàz_á“IbD[H@(‹{E&ùM’ÖØ]xXó-Ô<¨…’|¿¨Î.M¸=[Z:dÜÏ[xPÍX­ÔÒ^–Õ«¬]ºôö—¦FW^ùâêô¨nÄA¥9wì
Š)**ÍvE&Sò‡lâN¯7DeÉê$Ù?KHé¬Pç5u†ÆpD/VCWë.ô·÷:Uá'“à‘‘L±ÐLTõú‹«z­0Iuœ6H5ÆáÕFÌíì0`öÉñÁtîà ÍÔŽ?u|xD´v8O¯¶ƒ¸ùçŽ?Ie¶†³ø—4Âoã¯OÏLy…fk”®©G¶|!ß~X“ÓÈÏ‰ÐÆß•®kÉÁÁ½{‘­®ÛO ®kv(ÈÁ?Ž‰JKw¦<VhÇÀ»Šè¨!8D£ˆo–+”LÒ5<h¾·lÙÚhkðš¤¶]±—ÉþÏûkV{È´5ÜF3X{á`íQª„ÎSÙÐ±¶Œ`­ZÃÙS§­Àš€æT¬)|d}k=l\ßªËú2¢¡Œúb·Åâ"µTýÅnÍEÂbµ†Véj÷Ü³kúy¾pMáüûK!‰“)kìV²ök§­kÛ®9yµ–ZXGò#˜…˜õÝÛ·VÕ]kLÍ¶QsÛ7ËÎÇ1%`/MnÂÄY\ä)Î{óã7rMdÐs-¼‚#1ç1dWÚ‰	w Z-°&]­j+:à]Ö€/l¡°f¸†£µ Õˆ×'äê8ú–ÁšÔ0„2gÞxe›RØÔMy5ðÎ†ÊÄP×v Ü®	osùwl‚ÄLSÖD|"?Á­ØŽm8¢ÎÖP“.•œ&CHBSIjG&68Í&öEJ„dÎ¼Ä¦€Øx=®tíüQ™¥GX(lœp`º‹ÃG¨joò0\ƒÕØêU¿ÈÇJ‚ôVóíEþÀ~Îtµ©@X›š5ŒR\S”ÒZˆj!9V	OVn³æ‘&lÉfQ¾„	öý8A>zïÜZÞ«ý¹ÁM²µNdYÙEZr,‰/Û°l•ó5)ã¼¸úÀÄbtGIÊ’x2ÝÀZ:‰m¢³;üWNÃ±¹uk¸Ñ<ø`íŸœiÿ“NW»4ûwÏü„~ØŸ>ÿÓK—.ÁjÓçGO•­ýà‹+{ÎÉú˜¼úôðÒšGxFKËv£Ò’þõ¤P’ZQá.–´&U(Û¾b‹šn²«!7›ùŠXpM`ù(©iV»ÆçRÓøb©“àš)kâ=nÝ¬ß^·õÃï|øÿðíÿPÆ"ò‚äpbGÙAŠÖp‘½ˆÒ7‡+ŒÙ¨lc¼ÙêØÈ~„Ñ€5<E ¡õ 2VØµÍåA:uí¿iâ+×B\›™ÔôXPVãqýÂýÕE¬Hèâ¨ô6UÚm«ÍýMôƒ>`4:®…¬F}|žlÈŽ”l©H0jï–pm´¦ºZ?ŽlªØim1c1¾Î$H#´þ¼UÒ¤«¡´muccä†5oÊ 3W ¤e>Ö	Öˆªûª¶€Ó­ê¯h_Y‘ èØÌ½¢i­Y6dBÆø|SÒZ¥SÜÚF†Ëx>YC8Z[Óh¬æ…5•xxa¿ÈÏ¦Ïëukš@4+N0¦Ù^ÆzÍû1D5lCìT‹$NêYÂñœÖ”ßˆ¾$‹É%$ÕIîÂZ;9ˆ×²Z¤¤6¯é'¤¬MOÍ¼òÊ¿Z^9ºé-½,Ý—)Ø«àv¼çGKš‰%ôcexNíR—¨LŒ{|”—V¨†°–ç}Îú€ÛÈd}ƒy‰úZÙH4ÛZÕÊ­&l¬eUˆ¾Uˆ}UÆcDÖ$#°í°a¼‘½Š/&–·Öâ¹÷ß?~xï kÅL°¦	Ö#ÕÇ“ýˆ´¦>ÜT³Ao/Ÿ;=•;9}õÒg¤B¾}õm`í3
×ð…Äm– G¶Ç5+]S.$·Õf@IF8Ì©kaÚëi·6yèÐu™xy¬~¬ÞŒEœ¾æ
×Ø-¢¤5üúW™w4ÂAøMÊYK“eI$HVój~áhkò	â{ °ömYìØqÿsÖÚJ%Cñ„þúÑwœ?T™	~Žpšš^	þ´-’½ÁÚé¬u÷%¥5 ¼Õ’	¹mOâÔh'“v™Ot¤|5FvOl^\C¹¹Z‰'ä3a"äýAÙÚ\ÕÚÑÀÒPÍ“Ú¿Kkü2¡Ì¦N'$ï*$dáãñÝÛEi%°yù	FÔ1#ïQ+´ÈÔy|—Z4‚Ó@Bc'i>8eÕWªÙÅþ4zGÈ0”ÉK¬£YÀÖ÷¶ÖÙ…µ÷ì9òú‹â/HÌÓZ)¨±’šÀN¤öâë/S³†i> B3ƒµ!bTõj6L€m¦“YC¬¢ªí¹gšYÍ.¦<CÙÈå 	êÓWP<ªkÄÄÚ±ÉArõ(¿ž‰j5£p×5°¶ƒÄLE#õÁÁèÃ8hMÎiG“ó…dÕ;‰8KÈ†>ÒÂÉ“‚5SÕŒÔ<«™²öñÇó“ ‰£9±šG56	kS¯c)RsÂÚ3*œnäïÃ#YÉ™Ÿè¡aaX³íšÅýrù­ãå+Óks|VôèŽÕ=ÞR•jaOl…Á 6ŽRÙ£Fä§\“·´û¿"N"»r©ù|'ŸÑ›ì–ìp£ˆnÑðæX£¥Ø'os¬öwŸþÜù@â;kw	mÌ?½0TV¶iêêÌ…‰Mo­ìR×d†
ýÊl:Úo›‰àLŒ&gÃ\3Ôf¶EÉŽ\Ïº	Ñ´¤§í;àÈÑ…k&£)Ÿ‘)ŠÙvÀŒf2p…Öh{èL"A;D5çÙoY•ÛÕo¯Bò¦ZíÔð!œ†®v› (“ï£¦›\E8£[6X$ÊJ”âYù«Eöm›éŠøŠ`‰õ¢#(fë72‡šÀ+ió³ ¡µÿ..³M¿ù+Üršmóbž_¿O4M-Œhgy7@‘ë×oF@¼Å
Ù6ŸhðMÙõÇUBjn/[ãžÄf
›ƒ5¢3ƒ‹½œFˆúZB}8k…±Bn#àÚo,Ö­-Æb,Æ×Äj#'Ô´*ÊSÆ~¤¤Èv ¿Ud%_)iiÊ¡WÂ¶Vm% ¸*ä8ÍÇ¡úB_‡ bÿdj{}Öåa­KZR<KJ¦­ÅÝ¶„HÙxä šxm-c	«yaÍ³Z lÇšôÕXóƒ<	Ä(Q– :èƒHy„ø&×ì½M	Ÿ 	ÏùÈ¹ƒ9’Ö]°ž–ú/ºVÓýÝ³ZV¬¦W²Ú§Óç/ÌœžùbbêÌ?Ì\ºzþÊè(wgW°A—
r{*íí<™¦@`¬5Å+•è—¬é|F`Èb,+Kó:‡'[·À YkëX·^g±¿@§µaÁZ¡˜ïco¡]¶¸¸8‚($O’\#RÙá_ïŸ¬/îµ8ÜÛ‘Ìf?yÿ)d¶DöàaZpÓ	*³Ê5}	_4 ¬ñ†YõprüäÑÁ#3ŸÎ"­]úÔ¹Bþê3ëºvú4êÚ¬·ñ÷¸F.äZÊã0NiÖ&¯+„É>ú±öþB_X‹—w^×ßßV®Þjå%±$fÐ{/*[ÈêÜ:V–­]cÆý;×.[µlÓ´±ñ¥ß?ôÒ; ÚKŒð0VÓ@ç5¤µ€µ{­fí"±ª<žÏ¤«u‹×ÚºóùLg¶›Ÿ]¹Q°VtfýlÚ'-	•z¶nŽXyyCs};RKMYC_k»Éh„Aò0X»Œ²¶[…Ž÷L`1²°¶f–^Zº­…†°¡²5t56ñZ¥²š‡ÂhM§Îc„ †À"Ô1˜éµÊGB£¯c3óWvB,æÓŒñ’Òœ'¿{zNT#4„Òš˜Ï“yötðÀÁX«
^„Óòè{ðäåqÍÓ›¢¤bÍ§@b\ƒµ±Ú$541`¡k“I´•=öÔ
Åpð…Âô„ÕFM‡ã	ã+Ó²„L»a;Çn5v/s»—±ˆÆÆIPfÆª{
`“b¦Ò6Ì!{lÑ±×fkø¶b5¥ElRÖp¾\"5Bð©4H•ªý3@YûÜåA:\«åÛÿkhÍ
ÖƒjŽÕs®ýdAþâ7¿øPemù‡ÇüXélö(e5mó—J0Íói-Xvù’åkVE“9e=¿{±q¼Ä2Ä5)kî™‹ã‘äÅ‹–jr’…z$@¦I|D]ƒÚp,©<EÍë@¦¾™ºcl »²í«eÕ›ÿõÉÛ°°fæ"Øúª< ¯$·g9;‹´6=Q94ûêÌÇ²Ž®¦JGkk.é‘}¥ý¿oáÜ ý©n>+RPÆþ[$a÷Vë¾æ®çbë•ía»­ò µírbµÎj–y»ŠÙ¶*RPÆ¸ÅR"·èjÅ–-Ø‘Ü~ÂüEÖ>T—5Ës¼ãÃÑØ|ä@šìå1¾éÙŽÜ¨h@ÚÍ4Ç¾žžÒL K\ÓzºP3s¾ýl8{\²VI‡l¯­¹!@4mžÕÂð±°®F”V«ŽëÙÃ|H+Ñþ(´ƒ4e‘²yã-T¬íkæÏÅ²9z˜C™5j/Öäà/£‘lVÎb5¨Ÿ=c÷ÚrÖªóš`­ÀØ:VUhÅ‚mì‹í±c1ãëI‚„ÌªÆê\´@WsAËµ>j{€5XMœuu)Mƒ&Ø[­I¶ÒäSý‡Di÷Q³ÆDµI°š`­+UÌtu¤€5By XfAÜ1i2Éwá†6ËQ8µfMd@¬†	¤XmÝ\dIClÇkçÎË²RwCdª—Zþ" 5SÔ²$BzÏGƒ59ñ³D¯¦¶®ÑOÍ•Ätµ.n–«_‘²i3bµwV#QëÇÓS£ç¿À&ì‹ÑåW®\ÏœnèÊ”í­t‰1¨~8¢ðúxR-æ"KÊ’ÉÞ4wû]Yì #ÙIä±h¢—@éTmJª¶–|›òñòFrùH’>}2ÁÏŸm…ûú'QÄ€µ±É¾†Ü`õáÁƒ#ý…öÉûrï°¦Ø¹Ã{¾ÿ‰"—Ì™_õñƒ¹$²ã‰Üñ\é-¢<ÈaèvVêáË¦f)X{ezö_‰·UÁæº®]2_HášxM´&\Ã­+
òæ‹Ý“ûññ‡ÖHƒt&þV¿c¶^Çéuee6v–ÇËøÍøB®Ã
T+_ÖØ˜,/¬mÌ)v>µ³zÍšU‘µ;w¯½ôltU{BhÍÁšõÏÖøÄçð¸A¾{v¢]4›ik¬IaÃ²­¥HZKQÁŸ´¥B¶ºèˆu÷¬sg&êyÔJZ3çÇöÖúz3èWxß~¶02°]Þ=Å{>¯­Í†Úš¹Œ%‰ž;&­‰Öœ´Æ¶ ®]6ZcððfV—eà¯™B
›œûb“¹v×þxc8¸zT «ŽçÂ¹òo¯¸Í¤5žáŒ¾ÙÌûŠ0¸ ZñÊšÿuüY]­hM+:aÂÊ{—_{V{ýY…ÁšGµ…S :Ø÷ÁšÜeÙiEf{±p‡´Ö˜DÚÒ¶¡Ñ@Z£&X±+Ñ½&öl“°&Äb—›>!üb"»Çc O‹Òîô…NCªéê	c<ihzÙX—Á¿`­F³$H¸‘	læì"Îhä>´¶ÃÁÚ/ùÅ¹‚É„|ýùÕªýóW€[ ¬ñoL¬fÂÚäã<Bdi;l6¡šÅ9¬M¹üGXíª®­X@Z›¯³•ÊjÀZ)¦¹3_ä&Á‰;‰óc4Ùx±=G1¯‡5Ã5êÕ­ýý\Íé¹¸¡rü¥eñSkÖ”ÇÓ‘hZögó½hñéò%ŒÑ^BMsåj{—®FŠ8¬vü©‡õ¿ù¬=ck|
uÆ:fþé§Äÿgïì‚ãªÏ4±—³·¹\-«TRQ¦(É¨„ü¡ÞnEè´Ô-ìjYt[Ð†*Ê &Æ‘í¬? qZŽ	–gœA’W²+ˆ[†Á±U³¡ÀØµ(1„`˜OÈVåbÏû?·ÜsAjçBOŸ>_Ý’[JÐé_?ïû¼¿Ýà4éâggÎÎN|âü±Ù3§^Á#ãg‹&"n2¶pMâˆ+\=ruð—GŒèÃºúÖ¤ú:ýVÄmj/K†š¶ žÑ$X[§åyë}P¿>±ä$.ÓZhk€7XnåýÆoË6Xûðë{oý©œ5²En¿ÿ7M’`:c!Cu‘D@
pn½þ&UEÊV#þ‘>µÕ7³¥ÄºŽÇ®—•vK1Ý,„ÌµÐWÓbp¦´¸Ó¡ûVj.’¥²¯v­wÖ¸¬iMé#nvW`­1ÿÚ~™ƒ¤A~˜ŒD\¢t]V—&àÄ´O$¹ekqÊuÙ´Ì5Šç%Yk¾ôBµš•ÝÈ‚¦æ®Ík^óú›¤ögÿÃ½×Sþ¤‘ÍÌz$xÐÛ²^¸ª{½Š‘ò »s6\h~B®ªÏut kFkò×\V£™gRPD!‘KBk‹ƒwÑž¨r„;:É&Q¬~~»çžÖÂÕA¶ŠÕº ¢+Œ5äÖ^=9}æød={âøeŠ‚ŒÔAlÑhLæ˜ m(²8RX,3Wk[Æ¡›4{Lˆ<ÍDü¿£5RFÒ}ƒèš pÆ±ZYÃÚsÖ¯Ærfú$™"Ÿœ<ü˜¾ŸÎg^Cc<Â5½nq]"²ñâ‰îgÀ¿‘öR&»¸>„Qµ2dzJ°Z©!×ŽÓñ!ÜžAx-EH?Ílãiœ ðÌÆdã¶•šJ3M57GGFhL“=´÷‹ÑqT“ß_*YÖÈásçFE³#]‡GGóØT€Û(»xbüÆK$]æ7mÊ—JÌ½;>{üøWÐ˜ï?üß?üV°¦dÈß¿mI#Ç×>+o]Ûõ2 ­jÒ‰	•B"²E,Ò÷­	äµ¢{íÉÇHÏŒ_"´Ö5Â‰ÖÚv:ÒðÕªÛ 4ÒFZkíM]D‹`À6i§¥öµ¦®×ºò;wsYM}kLdºï¾­ 5túî…µ­G6©]²DY…TOWÈgcPZÈT— UAâfvÖÄÜú‡;0ÕX:ä¸‰ÖŒÉ¨ˆl†×`– UÍc[h¬Ñ´¶vØ"FŽr79ZóãÖÂak2ŒÂDÈKÂ5ï­«…
ñ¬Ýˆ†”€5,YjÍà³Y£×Ê@°•­¡ kÖ‹§*šU‰±&<úÙÚu°ÐÚþý»ïøi*ü¶ˆ—ô^3ÙýþÀu±­Öœ³æS!çÆ÷‡Q<'ü…T4ÿÉmAŸÙ¤E5‚F†`ËÅht­)³_s¥^±#î²¨Ååð—Œ5¾£p½ÁR€’¤ÇõÂ:=Ù<4d¸Å²:äDÄâÙœÁª¹	ÝËe¨Ù×hGD¦Çõý‚jìŠÙt·¬VB5ymO=uðÇ‰Ô@5g¬9¹ýÞWÛ#gmBUÌ‡ík _ýg±ÚqXíKWyÁlµ«ÔAVÌ‚¬ì­yù	ÚW¨
¹PÈàÀü©¶&LóÖ¦×šÚ,:½Ñ;kÛ}v¿Ökýj„¹†B´J¥©†fÆK1üµü…/¤£Ñ4ÿy›öüe‡á ¡ý»¾÷ýwîÛx×–gƒp‘ó°Úèù§ŸçOß1h-¹vêÄÑÙ[NNŸ`.ö©kU\w\–Š™ãœË†´4@7s‡Øèt×/óÌØMÖ	"’NØÓ„jÎV“Ö€fêS£šEÜÆ\k0ÏÜ l,6¹jÁèyhÛmÍÊ•k´¶ñ:öc©a¤Ýzï×ÌVsqü?¬q‡ÒhaÓÚXíV\(—y«¸ŒEåŒÉÑ
ŠUI¨Õµ2®üLl/ÐÍ8ú‹qY³yJÓÖŸ/€¬é}5¯kýiÈE?ZL¥T	'–!é(ìÜ´úë\$Ìîtr³Q˜5¢­Ãµh,Ž²éì ãÖPww
ña_?UÊ‚t—0\Óx£yZ›×¼æõ7Ií_I|/°fíj”Cnî5TûÑÊeä0$yç˜qoÆø$‰Éq‰QåF¤¦7áxj¦'¥ÇïÔ‹EXa<^“ R1ÇE(ÙÁ5(ÖVÕ¨ÃlƒùêJLt¥ùèž¡RË=kª¼ãJcí9ƒ5ØHIõ“·,J$(U°©¡+·4~-ñXkÒHxB<ãÅvÃ¬›-t³òÊ"aÄ¡J£L8;°¦aØÇŽ¥ò$–Z]dúÂ$¾š]v=¬ù÷<ºP×$¸G 2è²ahˆi­Cje«*ª‹*UH/XRÂ<‹k¥ÂPOFj™t¼@Ñã@çÔf8z˜Ài~§ÉnÞ|h*öf†,ð kŒÊ&r§mbÏã{3­#Cãì)Fó­C@±büÏû³ˆ¢%Œ5ÄWMk¼s)5$¨Ãtu”íC¥¦ã³ÇN]8þê™‹Ïž?K~ÿ[¿7)’ÜKÃ5U
9\Ó[«íÛ·ïú®b?Jc;x3¸k~äš£57&ûG¿ál§-íÃ «C-¬m[­1Uj£ü‘’Ç–…ÛEh–Ûßµp³(”ö%-ííKÏm"Áh!¬}ŸÚÈ­Xkà}`ímCC‡Nÿ¢v¦ÜÂÚLª ¬a[ºäþ™Á^ç­Ù•·?îïìîgÃ®××X#œ5bþ‰iîè}°¿#òÊòm’ƒtÐ&vó¸ÆšŠÄ3XkÜÊ×‚:HÑÚ•mkÞY3kTó]ksqí£ ÐBTÃScãx­Ñà<[I4>¦X£Ïò¿är-³É›_¤Ëá¤ë£;§Ó|Do!A½£îö5b8ÁšÏAòÖÜ!ï­Vã‰^¡§æm;ý;åOàe€,¸æ®ž•ËHY°ˆùjè xˆah ôrü—â‘!%‚¬±‚­Ö\£‚DHçg…%&¤e£KŽƒCËùFh®g;Ùwâ‰Ê :ytŽ­°Íì‹~XrCðß¨Ánˆ3NlÍ?c×‘´#zÙ^Ô(oëf¯ýÓÁ7?ý\–š¿ycÍúÕ‚Ž5Å‹Ø„5HíƒK¬†³ŽX£ò¸±78Í–ã“•`ÍZ¸¯åJ0«æzhavikŠYˆP×Ö×ò÷£¹ù"îŠÀÚ£§5ˆñúRu²Ö`4JŠã±†m·Ú|lêâ$/Ÿk('|äÒ—wñ7‹1 Omy–$H‚”Þxš…àþ·ß8vÌÂ£Ô¦{LË8uK¤®Š9½ßOäÜÛ~–„z“kA¾ˆù6Á¼l6»‡¹hö5âPåÆqÖ8³žGíZ«nk–	ÍtNgÖ©3-„5±™ö„HS)=l:¦yŒc¸5¤‘¶þkÌ2¢ûu§ò…ïÕ5Éf±„Ñ›´âfÚØT	»	ÆÈèwU‘·R%¹šC/[÷\y#ˆ>µ+äA­’<¸±„çŸì¿Š¯¿z·Zy°ˆákÄ‹d¹ÞvàÍ›Õ Ç«—·öµJVÅÈ~¾{0Oxmçû)×zz¢Jñ1kþµÖ”ReEñý*¬Å[©9X“æim^óš×·Îj·Œ¹Ž×Oñ–‰aØHã±™ƒÍjecƒÆ’
iT‹šÂj4²f”&Õçêr›…j,º¹¹ZB5´§ªe¢JEŒ—b9’!;¹âÐ¸ËTO.^ŸP=`1Ó¾?¦å'`Z«h¬½¤EAÖ×MŸŠ
~™¸û0R‚ÙˆÔä®YUc€e¬¢<ÍŒ„Ñäx¢šÖQl>¾RÙ$(7Ð—ËõAj¦”cµ¡ËXm‹‹§¤JX;{g_íää…SÄª¬ÕKÆguu–áìRü•î•ë²€ÈÛ‰==›ÌŠj¦Š7•
ÅL›â gÔt'r‹Í<¶y¦¿¹™È©ÆF*'ždúÝ”R UZÈ£¥RQ5‡ìîÙA	´ôøp_f¤½´goq°Ï7Œ}·vîw£i
+Gh Úa4ŠËFUäHU¤>62‘nmBü†šŽœ:5MML?~ðÝÙßÿömÂFÞ§oí·žÖÂZÈg­ò­BÚµëŽ{–æ•Ifåž½J†,Ç5bhðÔÌd#ÆòÉkÒ©øe°¦M¬m¡Ëño‚Ð,mdá"Ðló×Z”(¬¹ðþ|Ó’¥ˆ‘k¯íÞ½ÛPíÎ;RcOÇ$`äÑè©Ó‡˜:ž9„¿¶äHûœ5qÝÛÝ¬É¡dS”fl_°fžÜ&x³ë²âEz-_df†QjÝ
Ë˜»°üÇáÐœm!«¹Œ‘çÅj!¯•áZy!ä\\3yoÍB–éÓ²þ5õ©™ÑæÜ5o±ÁhXV<Æû	õ¤ùºCPÊú^f£_Îj¼Gä-ojb0›²ä!÷?pà«¶›ËçPþ›+‹ô((x[µÎâ'›U›iIA›œŽÕ^÷c`M¬æÜ5´¥¼Òöçæ5“Ó–Oß²–€~ñ“Ò¬ôP2MEŠˆ¡Ö:8¨ÓlðSÖ@1ùc Ø´ÓÙÁå“ú¢ƒúbD‚$Ô³9M‹è-É† û—B{’^	ù)pû¶ò¸¦Ák8xf£!XO¯Hr™"Žyš©y	Õ~e¬¦ÅŒ5ÅöÏ`¬©cM¨¶Ãç@†é"%ÜT °Ú¿¹P'U¦5éÒ~{mî¡Ï©˜,ÂNÑ!dÂÈ¨nkoÉ?ºõµw5Iyj‚5k¾gmdyíÈ»7¦_Í_ˆ`MÑmüÀ…ñH"Nx	}¨5–Þ3Q(î1Xã/ÓDfÜÖî`ÂÚîÝ[u‰ñ¡ýWí'?Sh?Ó°™žÿŒ‚ð³ÇsuÉ“ö¶Þ`m` ÁÖê²Ÿ^GªyÜØM5°4Hýj€5xŒ.ŽÔ”Í\›Úz.²ë¹¶ªV’L’ëWiú5UFpôEAËý—Fd£uëÙSúÏÛÿC×¼Æ÷']’/‘‡§;ë?´Á×pÚí/|øõk¤Š@kÓîeí"U/èŒ·ÛhšVFÞˆ
!•=¢ã×Ýýà¦ëÌY»‰êÃë®„µJMk¦ÐHwË¾ØÖ•ûÕ*³ýjòÖ®·HQ&H»Œµ{Y µßØô„iì4hËž—`Í)¦ä›X<Ò XKP½#˜²)›¹Ö)\#­
ZÓÕ™ç)ÁÚ<­Ík^óúÛAÊÊî]ÖH¨7“°+ôØc?¼Š(HŒ5`­Ù`M¬†’º¶t÷çê:žDŽÔÊYM×ÅŒ}\80’'QŽ«U­úü“°hi|¼8Ñ¾4Ä4[¿üÝï†ÆZ˜Û$÷?wKýÉçÎôDÕôW=I$1“-Z¿87S-Âš©”IÄÍñ–Ÿšñ¡+îÆZýmxt$ê×[Ò2 Ö7Ð7è”F
‚ÃE6òš_‡×ß¸x[íãIÑÅ^‹°x€lˆGë™¸å2`Ñýtü-f0œvIŽ)x¤Hé¾,°@JÆ¬µ¶CiR&3ž¬aŸO5“Ûß¹fª¿@ld?×hâq Ð4£nâb¶®™±Ã“£Ry<yÔXcŠm¾42626:ç-E~l<]Cx6ÖZ	bk:P˜˜80]j?8{ì«‹`š£5áÚ[¯;\;ï“F0@·nµZÈ]›ºZFì%ìA{‘§5k^û+ Ÿ£k¬"R­k±0’=ÖÕR©1ØµÕ-lÑ(ìz'Çžijb-ÛyŽ ~¥AŠÖ¼vÓµFH¤Fd­-Ïï‰u¹pÑ’&(½­w ›•ÓëaDS”?°†å¯G»îg··3Ù¢jR¹ü@Xê†ª«&'Û&“Vb5	\ÃZ{Þ±‹Â•ä÷Wn['cÖÚsœµOýæÓO§×Ê[“¬i- 6½°Rf¹æ›ÄV¾÷Ã°CX«!?YÍNâœáŽqèjª8#Çìþ Öx˜aÙÈØÌäì73×ê´V>®Z»­Žœ^‰`M`*’¹v-/ŽèJÁš§±øZÎj¶Ëù ´_¾š#[`çnFVONNØrQz(\Nâ(`ÍJk­Y5$PÅ—ø§Ý¹ÁJ<Wè$ðõÉTÓ2‰wÀMë{Nª?NP¨ØGž©Ì»6v8Ù´„¬ö¢ÁÍhvÀ‹µ úÖ^§±ÿ‰,¿OÅi5_þèV>¶Rc ö¥qØ°š¡Z0amL¾šPùkÇC_M¨FÇÚ«Ãš§µÊS±ËOJW…µðDÄªŠ«gXË7QÕüÚF…ot¬Væ­ù9kŠî×sŽ¼BÛ«ÚPe õ€i=jc·}¨*ÒWÐ—‰§5þ>½qMb/ñùÔ¾}»¶Ãj[ŸÚâ¬ý,`5ÂþÙÓè˜2ûñaÜ‰ÜôñÙS¹º·‘™p-É8kÂlðf[‹I®¯·ž(¸Í>¨Ót»Bk.ü‘;'ä´i/Â
i‡p2»ä¢i\³nÖ³YgdÃá´a®á¬™Ùö —eÅ‰(Z„ÿÒTóÈI¬7õ¹s–ÜÚq†ç¨p„Í^Ðh5 MCÓ 4åA‚1<&2ƒÅ4Gmµ’úoºévD!Gæ»Á<·ÖA*ƒ¼õæ¯ÅeCÌ\2…ÈÆnè’Ù^9­ùÅ­LáóÃ\îZ…Ò?ºjžÖ¤ëÍS“l*ö`$¯–¬QÏÉäoŒûÁo¼Æ&œFáiM¨-ÕÀg’›ÈQ<áåB!¯Þ¡Où×`m1:3Ü„kÜ¦6?ñùñØóš×¼¾Ý"Èf›L*üÔ2ì4šjîèHª$Êbú—­I&;aµÆU«l6èATd7o¹Ñ¿lÖ®†<ªí+Éªê.±˜äÂ“€«rY.ËíMù¢0),JPÃ=—Ôµ”Èïîªh¬=ç`í@äãé€•æ©AÅV— q ˆÍ„‰&$30ãæåX›FZBÊÄâúxœ—É\¾Kœý¬È†ôÌ	ñÖT”y}cö€>=yà€u(ø€æº:&€+¯²!Aá{Œ‚Š+“ö!+OK¤ÒñXOuCÃÁCA)e©¬¶…q‚ ‹l‹3…JyZKÍúÊe™¾Uë;bíãéaL6æ‰ó,ƒµ½t¬ñ†XÛ¼wÇX¾ktŒ\G"ú‹;¾Ø18¸÷ñ‡å¢IcL(t„=õ«5±i•&
ãã…Ôˆæ³ð;©Ò(jê2CäCNŸi:xjúÀW¿ý=ÖÚ[4®qcçuáÚY]Fÿý³ÏnÙ¢bHzLv½ü2e•c’½ç/å¸Ë‡âÕ
ÜÒ±x*Æk~ÊÚÂv‚AaÆ6NÔ¶ýHu%ïÉ€HYkn(vW~Óî×öí;÷Ú¹?þq·Õ@«m÷°vçNDÀˆÁÚ‘8ÿÂ¡#bjÛ3©4°Ö¬A]ý6[ˆFŽ„›‚Çz‡SÚS)l)›—­‰
5Ó¸Fæ?Wi.Ö`Xö•W²Ýô`F:Vá¶¡n¡Z¯þHÈÆbîÚ	Þ
š®È„ô…(œ¶Òšòû}ßZ¥RH@í²]Ê"¹! ‰ÖŒØt7·,@´FpL{Êô¿Ö¬&Js…Šb0s!%Ì5‰#ÈËÊ½8¥¬ƒýî™ZƒƒÞ3SÂI3ï7õO¯q'»o™ÑˆÙ¸Ì,›k ˜2!e—¶!Ì1ñ”ðWuÐ%<Þ"$’FcÕ<
±œ³69Í†‡N–!]@_¤y˜™%>ã„[iÃb~[à˜ðÏ|•°ð–»­eíãÝøb2åQŠ×–#UeRyˆÄ~ê*yUË)ËDn\6°†ü¨5Uf*¹ŸVÿë}
¥	Ó¼Øeå5HM¬æ}5¡š|5+‚œ _íMPg-ù'—YFjÜÎœ¹à“ +ËÃšo¿-Wz»ÒZ›‹m—NÄµ¶ð= 
X«ªnj¢÷¬ëÍRÖæ ÚesÖN;iZPUÕÖª"H©©~ª¦%5[O§cö¦;µ9jWc±€Üñ¡‘üR>ºÂ~ßºõ®»ñÖH¹=zöüóoŸé'†ýËcÖŽˆÔ8Cdÿôô6½öI±—Ã1ói,+$Áp.1€5¦9‡†§Ex2DàÈšØø¸.âF€2k˜`ÉÈÒ²a7*yd7W›¤‘5°W2ÉS‚Ô~3Q%¤Ê”ÕÊ¶î6ð-£ÒBKÜ!ôÆpk
 Uùõ?ýúëÕXO@¦üGXL$¯I„‰ˆÊð£”yïjV?ýOÇoÓ—]{#aHZCk Ü
ÚÄ<«ámyä*«k”B:ó'üAåÈòvµ+j YÐ
t-¸ÆÝm¬Vž®‘eI5äê{µß¸ŽWùÈ6´ÓÊ\5*h%yk¨!*[­!‘`Kâˆ`-Û×‘´¡kòÔz	·fæ©ûToJ£Ö€µ)hm>Â^óš×·§ÿúðu`ƒò©ö±÷ÍS½ˆm±ýÉ5Ä@ªÒXÍ*!s×<NÞeï¿ËYMMÜ±èH)—HvêÃ&;w7D‰±%æö¨‘¡öüá¥µæ©©¤mß&RûwU€5Ažx•õ‹„ö1`¦øGÀŠ+#öš:Ò2‰Äœ²R$24âGª‰Õlƒ¼±&±Ï=qõ&,‹Ù¢çPÚÒúlB5TÃE|/ÈÁÚìñYu¬YËò®Ò¤XŠœf&
× 7]Î1ÛºûUmmd‰ÅéŸâ!7>×W˜(¤‹…(¦’¼ÒÒvò¨Çå÷ôé=É@®&ÚSÜLþK/F%¤Œ0‘óÉ¸ˆßü×‹ñ‘¬2
ÇÀ%€­#9³wè,ÆvðFnXÛ·é°`¹VkÍL¨wä$çJé\]Ck~T£R`#q%¥¦‘bñÇ³ouô}ÆdÖp×»¯Ak*†|é3&Èþý#[Ô»öÎîí?ÿù  ¸FÔIè®™|Ð’·«¦²Åk{hªŸk!å,µ‹j!4|5Þ¶aµ-YT«™jí2Õl½ÔÔ¥þµ}›6½¶“ùj;7íÞI%äŠ`šLÎQM%=z$–N·žþÅ+¤•Piš*ˆÖ×øŒ”yØ3ƒ YÑ4cã±[Û‹3™Ø Œ\5 ”ë£²8<Ü,õöw3`&ÚÉê„õ™¯ê\ÕÜû „\Û¼Š}¡š6²†C>3R³•4§o­œÖþ¡l4vÈjåñýå[ˆlºñVŸûGÒ{,H{O¼÷Þˆ#¶¦pë÷yÈf­mù—„Ï•ŒqétÄêí}Oó8¿«ûá·v+/ÛÕ+ÓëCa÷Ý›.iÞ`ÍôèÜ*H±ZØ²æKF*’CP†0¦‹Ñ¾±a…ÛC¬$Û3Ú•³ebÙ38@:bÇ‰ž"¹TN­‘6¶]ëŸÄ}-;^Ÿèßæ¤é_ùÑi!¥ùE§Y[MýjÞWÓˆ5+=7c-lXó¾š7ÖŽ#7[M¸&Zû’Ü~ùëjpëo ï«…ªì¬…zz”úÓÃ^Œäþ%Ká1pŒ| ÇjåÎš{p#Ë}GŽ,m«ªnm2[vÚG²	`1®ôþL¦'‚ÙÜ`qÐ* ‹ƒŒŒÑgU¥ÖÚE‡÷‰ÕvnÝr×#(´ß2úöÒ±£¿|úçù vT°öÆQÅ?NÖ\Ð_úSÓ'ùáNNß"3ô”ËfbîšN¹Du«a£qÚMasNŽ{f0…ÍÅ>nÐZ’Ž5«Y‰D(•4Ël]6lË§"þ•ÞïÖÖ€mðÚÊý÷ØXX·_Níå|ÂrÛbÀÍOZ[¼Ždé…{!5˜zÎî•­fÉ"2Ì6ˆ[mµÆ†Î”£·éGJ¹ykØkr­à!aÚM^×{®¢ ‘MØy6¤•+<<9L©<û:6ÔBZ36Óìë7úbH¥@¢ëáMŠ7o¿YNÛ­üÿ¸Ãê­…žqíQ#ìTÇøÀÁO‚Õ«8wzÖ²¬ºûÒi›ÒÙ¬éI6MÙÀÚ‡-žmžÖæ5¯y}‹E´¨ËXSÂÈX3q4EíB—±¬¯Ç\ËQUï´*©ÐŽÍÓ9¥²¶0Y9T³¾ ŠMö@RI%þGbÙþþß¥ñ	ÌŸ<Â)¹£µZ‘ýK±yxöËrÖ`5°èòÜ~‰È—N¢¨±^~Zà¢y2âØ©%õQ‘™|4Ù	w¤Ó&`oTjqÄ¦µ¥]Ükj
Y†‹<õªÁš|µÙ“Ó'|9y`ÒÁò/É.è¢I+©QTsL7õ‘k4JØH^R¬!¹~  ?SE.tª¥ú#‘!SLj.1ãÉ®”Hö%£4²OõNõ³u‘Ì53Š\ïÊï}|ï8'Jünó¥Ìˆœ´ßÑŸQ,ìØ³XU\¿ðs;F÷í#m$­Åªtz¼ Áî#m±©‡©oÑ|~¢fã#MãS–>ø xbö«Ù·ÞÿìYH)Ò×BZ.äK?ùûGžÅ\Ûºõïiêšò&íŸÃ\£u-´×,]jsêMÍCê½›êˆ2Zmá‚ÚZìÓ±¶¨¥¥}A-ó €5âÞò˜iXkKCx¬©KI;¡5bú-­;ÿ¿¹ó›¹¶ý{ßßðÖ6lxtã£é)8c–ß¸”!¼%E\?×Z~Ñ0bAqA×Z‘ÀÔ°ÓL,Ñ¯m¡-ÍZ#2×¨Št°£ÝÍý}ôc6÷^^‰K4¢ùrHŽ×^¬56å¥.•ÑšÇ5!¸fr¸Æ½b1¤ å*œ°­okîi£[Ù²ýðf§´˜ÂSe7“ÿòò¯_òk'~fäúÖ¬ÒšÖæŠ³³f°ÆW9}¾Ž+‘6¼8Ü+ëóO?×b««ëßYü-\®.ÀËn‚1¿žã£ýÙNºGCT«4ûÓ ]„~µ7]ÃZ9«ýj_ÂkÖ:uòj°ÖlP¤œ•ê^YF7•ëQ’cÌbü«ï&\öôå#?FüœµÀ\[âZÕ°àk€Mrh²ÚÚZÕ5®_3˜ÎBk‚µ´`m¤•¬¢;€5Š 7lyXókOÔÈM¢ºÛª&Ty¾=1yh›=>]%
›œt*ìKlTe"~³(Hâ%ŒëÖ¶`Úš£µÅÉ¤2F‚ô~Ã4`ŒÕ:pŒª‹$|e…ø°Ù*J	áª7Xã9jn#’8_³bZ»_±«÷ëNg©œj<¹e²«×ã½-ƒ÷\väþÕ?ýóŸa5œ4C®¦MÂ[°5rž¨~„Ò¸“É(Í’kP›éæë®5P³Ñe+ $¸HñèOy\Óº,Òî~?$µð|øTkP­B¶÷ ¦ÿF?{pf¯rµ½n™j²ûÇ*‡e²~)Mõ¦­í˜¯V]P›_Ö(ÖS¥kbÔÊ!’I322û;;Rƒ›­<cgía¤‰µÊg›¯„œ×¼æõ­ÃnœšzŒ[/ÛÆ•û‡{©°Ó@lƒµÆÎþÞeËžh4^[­%EkÎWëß;¼¸ó2¿„Í¶ÚaXQ¹_Ÿ¤]­¡&×ß—¨é“‹cc#­„ûÝ¡ÙjXÃ*Ö3ÖÞÁX»ÜY›œ<ñÜ	FªXT.Òñ5”·ç‘`Zs!ñD\GHÇŽÑÔÊf;Fi¶ð¬hŸN2ÆÒ·AŠép¤–‚ÕÊƒ ½±öÜÅöËT›>1Y¬Õ«Õ{Ej5ªQ"#Rcéiª–ÝÆ¥<šíNæjª‰[è ÏDTÅBv˜LwÇKø¡{ªHçXk<Qù8L^ï ê$û×'#M™8Qc¥rE†ùe’dH¤G:‘5†C6®´Ç/„ÌjÓ`>ÂHk>¯¢"ÇF-k³`‘.L7õ˜}¡lHYk‘J/sÉ\zbhÚË¨F³ôâg³³¯}ëý¯ÞÔkïã­¡ Æê°¤‘-[ÝÔµïn:ìqmÏLY1¤nB6¤&»Áêêø0´Æÿ³µ…®­v‰ºÖòŠæg_Smu°Æ¾ò »¬B²¥k_WûÒÝç6íü#škYÛ¨IÌeÚ¾Sz=*‰Ç¹Ü¶Q*µDjÏö‡sfŠNb¶™~elÂ´t´[sÉÓ=q²#Ekt•3ewmß6Y”•æµÛˆkî$	’>6‡f,žÔ\Àˆ·Ö¤0fÄ{khnßÚ?„•Â³Öt«ì®sqD‹ßØÞj}*¤µ ¾…¬Zk~ÈšPíò0– Ô.Éã—ÝµúW¬üö¹­C}s8cA¬¿)ž…h¦Å”óšnþðÏlç6«qª9[Å±Ú‹ì·†µ7	µ È²aØÇ‘A:SÍ–ÀX«»š³V!]¤R.ä€öaMÍf1÷ü»ÅaÜªÙÀý€Ô¸#_ÙÞvúH›:loNHUu\ˆ•DºùØÕ5Ñ‰	 -›5ovÝ©¿%«hß%_mÃ3üË¿„AO3üšÜçÈøÅ\¬]¼xqöøù£dA2ûÂÇÄ[‚#?(7‹ò•†ÜüˆïMÓÉ„›#î‚€U)KæWýhe2ÕXgjcÂý“ªT·u‹U)3M	#ÖÀ„k?ÄP³Q‰Àç~¨zæuõë—ÑMª,Vt,ØÐì¯™†-_ív•Cb¢­ÉhXÓ]|Fb¢¹i7»$Ž{1ÚÑŒ5ËõG·*ºYÿ#Õµv	ÖV¸áØ7^ª°Þ”2×TÓ©p7D»+%Lã~e^?ò°vi€T$½wüPÄ¦ðŠ3òPí‚†š…]Œáô%XãØ­5M"êã"-
Í ‡q)Ë"fö!£µ4]æƒ
aÆŽ®".ÂŸÙÔ	 Ï÷­Ík^óú–ôwO4ó‡;msïÔÐZã0w›ÔŒµf%Xl?…« 4“vz7¯jvÁìžÓÊm5sÕáÈ$N‘•+UÕdSYýÌÄûWuwäGZ[(€\È
uå[èEºÖ6º*Hï¬º!?t¨oHpAcP%Eb²v×	¿Âüèâ¨Ygð™é·çè¾“-—ÉDnKØ m7ÇªséL:ÏærÔ¥§Òº]ÎjaÃZ	¦üâµzÊ =ðik¾r—ï°fT·U“ç‹ærJun‹$bUuÉnYyCŠŽ)¹_ÐÐ=¬ªÆ¶X¬êî¶”~^Kõ6§F°ÅzÆõölˆV* žèï€A	nn)}1šg­ºÇ}ù*™h;Ð8èvXÓ !ö€äö¼ò!Im¢˜J¹RÈÆ‹Ý}ü{ññ"pxäÅS¼Ó›%cäõ·Þ'Ê©òl4òôÏ˜º&sí®-ÊÝþÞÏwíÛÇwÇ}ÒHÈk!¬Q_æÈIþ….{­¶½…W¶´‰ÂÈ–ÚÖ&å@.ÁN“òääù Éª k6dmçN‚¶ÈhíÏlÝp—`ï»ÿg¦g‘Òû[ã}H¤¦8/I—Ú«}%q3“Ô4ìuÚìÓT¬/‘UÓÚ@?>Ú@UtàÁ·½R]“H&×JÝÛzÌoC½±YÓ7vÑ‰çßx>T™·†µVî­®!‡!†ø™XnU×´wååsÏpÿÙèÍÿ<Fjº¡9ÎšÀìŠ€Î‰×d¬ý³gZï?¢ðçdåŸWº9'kŽ´ÑñLjº‡fš‡6·½
¨…ã¯Ê73ÓÂ%¼	ÕæújD‹X¤÷Õ¨ƒ Ëj ±Õ©}âÚŸœ±öWiíã·º¬ùÑk!ž¡ò@‘
0çÛ^ul!G÷Ýwäô}wÉæ$÷{X{‡‡š–¶ÞxG{-ýÏù¦j›tVEš~B Z{†Ú,s¤-Ö£¿>3ƒRqBû.U´oÇwß°ÁŠ =¬½ñÙ³ŠK
Ú‘Ï‹ÕÎŸ¿øÕ…S¯=¼0½m€O°¬)9â£/í]®Îµ¤%ÉÂ‰ÍrÚú¡›œ‘±F£•ÝË(C"3dsKY!ÙgOIkIe…ˆÖà-¾PUÄ…ØH5Ö¬itå~€M³ì(ñÕDBpØlª§|`Ýý.³_Æxf4§}HÀ‘#
‘WFKã¯e«q‡Æ :Ä„21K!Qöˆõ©Ý*—m…Œ5¹V.{Q¬fôújÜ=©Í±ÎLv>¼i…®ÌÑm®­øjal?¸¦…©ÜLX«aüQÇ)h“¯ö£E÷,ŠQÊ$ö›õªÅeÁ è)j¢D1ö#jcë‰e8·‰(ýY…Bª²ykêW´†ØxßÔ;læÚó´6¯yÍëÛÐùNãToïfh ýQ>ÐÆ§CÄö/›ê}ÂòãÔ°Œ@4ÄÅ£Þì„Õôæ;TV@nGûTÅøk‡w­Âëá®h}r —Ï7ÝÓ2Ô¶ íS›‘T$«ÖÄk§JCÀV"‚•&LËÄãlÄ[õu™rÆšYkCVøÈÆ ÍÎÕG†‚êÇ)Q2ºÆµH†:‚@X¥Ùú\gÍ—@¬V.‚Žût‘ÙS'#ÌÃ‰IÚF$…
ŒÙ¨7g§>âjà³‰Å'GtEHðŽ?Ò­9áý>æ“á‘Vü¬¾U3…™ÇfZ[Åt´*Mîã0÷™"Ã¯‰ïïê*2z¼É¥5UMïH
{fˆñg¾5c´ß³cïÞ£
{„˜F!²X+	"_|ñÅŽÒaÄÔµ11»ùVœ5©4Î?=>‘Jv“þ2>žÊi°ùHž__SÓ‘W¿:ûÕŸþ×ëïÓ¼æDä)þ*†<y0uìxä‘»Èñ'`û÷À5™kCÌµrZ×l±ÁxÿCòÚ®‰óŽ…ƒ¹k–4ÒÚÖ’_ŠÖÂ„lU=v±-"µÔvÛ×uî™ÏÀj;qÕ¬yxl»VÛ°UÃ¦7Êf«ÛzŽœ.¤ÛjéŠ‹ea53Ò|hÿ`G‘´*rv¼©m€Èe¬á°õE¹fwwv&Dl¹šÎN-ÑG„¿,6î·Ü²	ÓXãn7Äæ£ÿ>{ª±\á­¡Š}k¾òM–Oœ½öÏð¯ä°•B#¡þ¿€Ú'ý1[Ê*!½±f=k•5ñç.¥A´æƒ3Ë@ÖœFT™Ôü
:³…}-ÈÐíj
MÛ²bÈ«úkZÂûÜ[¹£f÷²éjØjÆj¾š€Õg5`í¬ö'Ý\ä—¤ö®7Œ5)r5|l«ÿ8`¤Æ­Ëå28*+„5±švbµ§ï®z…h~3×ü˜5áÚÜ¡ØÐÚ»7v-=²DaH\ó@ª0DÚHÉô:Ò6k+kXæ(e°vïÞŠëþˆóÕ¬&[Í³¶ÚyÃ¾xñÌ…ÇÏœ:ñÊÉh-	€Ì£(?¹oé‹V©‚B{<!üØ=XkuI±š¼4h9Ú¥}[¤»Cß–Œe][Ñ<¬Q	®Y<$û+"qòuXhB®[GÛ®šáp“@¸ýË:“ÉU”L®ÜO¤q˜Òûo_¡T±¾àVC^.‰C|¦ö5gÿÃnw$pâ”¸FÏ\‘äMNÀP8míZk^¡_æÖ^žÌÊK+[jsC =¨¹ÅK… #¾w„Gx ÉkØ÷PËZ¡¹øÆãÂ5ßGè°L­j0ÖL<ƒ5ñ_–àß XÕX¢	­ŒÖÒ©¾ŽþÔà°uLÌPŠ¡2y:Ö¹lØ€”yom^óš×·’.òDs/"km~LÃÕ$f;Ò!ÛØ‘«	Ö¥i…Ì8J66¯Ú¬÷Þ!®•W@zTãMó®ªH”yjfPŽêÛmÈuLä£¹ÔPë’%C¹áj
…|Y*Ëí÷a¹&_,ÏDƒ|‘D´dÕäÂ|Ú£5'KìÕk:‘‰gø”Ñ
Ï-Î70ÐÖÒ9`-íå|5y÷©ýþ‚NP°6jvif52JÓ–S¬‚WÑ@`S1ŒâÁª”ìœè¦¬"ÙW v'›¢Ý"=Ü(I%$Iô\Xì£ŒµEõô8R`öÄØxóÊFsÖ8‰³F€ðŽqŽ§ò¿Îž±|Ofô°`m´©IÝi°ÚŽ£]xk \Si|ìðïFÉFS…äX~(°•FÒÙqJ%‰ƒäƒêèkDœ}ëâW³Ç©½Ž·&V“¨…|Ë·®‡<À5’F%hDC²÷1  ½4²Ãpí/®aÈJøjØi=ùä5êydD\,5³ü~Ä†{V#0o•NmMùEÊDŒÝ´tèFÇ¤ööòã°ƒ–5r¹wk7n}êô»ï¶Æ¢±Cw:ÄŒ„6ü»x
°Æw†±š‚eúg
­­ªº‡0Òl0vw4Ê|÷†„¦­%sÝj^Kd}ô#<f“±Ù	¯™³ÆZ»Ÿ˜µöz®ùPÈÊÓ±…!×DkÞ[[¾ìV™Æ´òúüoÂhY…Ç¬lmKxìÏ…b?D5î!«‰Ö<¬ygVc1m¸l,¶MYó°æÈ°a…Î¢[þŠÇæ‹%ÙÎ„ÛO¿Y]d™Ç¦ÛUTÎb!©•;o—£še@†¶ÚçÖ­æÛÕ>°H‹¼ÂWXZ3LÓòo_RÆVAÖý5g­á›æ‹„ò8SYÁ0+ÄJ¼&X»ïôÝPÚ¥®µŠÎ"\¤X{·iI­þ:´ÅjzZQO4Þ¯Še
Ék6µXCEeEí —?v-÷ÜñóíÛwoÖTùÇjÒÓŸ=G¸í/ÕHùì<¢ü‘iêÓg.Ô$¶mÓlµ:Vñ£ú G'ç× çÏû|àúš†dRˆ¶8X†‚ìàœþþÛ8mÎv'ëÏØ‡ÖÖ¬#üJ°ö€¥@®s×¬‡ÖV©©6‚ETõè£Qy¿IüìolT÷™ï«{ßu÷í®d£dÙB^e!6±ˆðìÎÄ¡t:cÏÄÑ¸ŒÝ™Np’UÅÖ“¦¹Æ%p’Ú©mHÁ¤T‹Ýe[m“š %@L¶ô.
íÞT».eËÝDI”n7RE·/îçûüÎÃsq“î½ÚþÎ™óolvâ3Ÿó}žï3 X#_¤cßÏI1XÎ¶l¼6o!ÿÞ]îÚ‚Q¶YÁüŒ[ã£ˆøß¥±Ø¼‰vx×Uik
÷§"Ò@M¢²†à/XäÁæ_?¥v$+/C4­M¾SÍ><5‡jøk›à}¯þ’ú»oÙ³æeØjMéd}x_!ü¨,´ßÍÇöÂdëé1`ãúÛ4–%iq#99kHI#EK®P‰A‘†Œµ´«ø)Ùÿ´DkKZÒ’~oýÁ{ò*ƒT©c[ž®!5ÇNL@kš‹=_ÌvwHüÎ±{‚m™rw·J6REŒµUÆj»GPs¬Eµg¤óíÙr¶KW2™FmÓËÓÅ¹±B‘&­u/‰Ðl¼ÚöÖîŠfAJGL'žWf? ¥ðGú}Éo€Ñ·Ödüi á¸ÆªÙâdÌ–Œ\÷šùmâº”Æ96“xkˆè°4Å,Ôd«EYíKb5×@wê‚.èÞÛ”?²Ö=V]›y™>ýKÇn«€gžñþ¬;QJÒn/gŠ…DÿxU6a©0™Saò³…êpëT{¡*ç“Çxä¥žÇÆ¨´l ÖæölØ·‡÷#”ûh„Ú˜ÐS¿YLOO%ãS`Mj„õ;cF6,5ª#im£WíÀìÝk›¦†f†sc¿œR»Ç¤ZÞÈóOó-IãÜ$Ü±Ç_~]ùñûjH†®YçÚu­kWÅ¢µï*häÉg>w×Sw¾DÍ"tàZÄ]ókŒ^›Ðîèªñ3ÉpØš[§í¬p=j­ÍÍPZë,6F2=uþI'lµP*ƒÔ]øózC¦ìþ­$i.ë$)ýùa|J`-‘Ólï—*ÄŒ0â´LÅîÍÅÃã:«Ò–”9kŠìçG·œÛ#©LÊ’FR)å‰iZH=ÔM$£˜qÖXŒÏDhÎVó…ŒÖB\óæÚ7¢1#a%¤@DCÄwV3Zó¼æ¶ú«À"Ï®;Žì!÷Rä(_âSXiÎšc5ŸÛ*šÜ/¢­YùÖá"¬A¯pu#¶A?×YkÑÛj2šÖb‹‚ë›’Z¸"šVáQÔVã/ø¬KñýjÔ@š­Vk¾šœµ °ÿÚrJ3Ö®-‰«Öµ-ªkµOiXóG=Ú­?¦m=÷k§ÚÎšÍYK¬ÖÚ·níÒÿÇI£þ±_à×7ÞZ² çÊ4rá"Vó1´vûÞ_¸ôŒ±Ú?úH²ENïê;ÊºH}»tñê<µ3WŽŸijzíÌÙÏ¤¹3X·\P[Îd¨•o
Šæ8äÛ„»(bÓ¬±Š¹H”µI£> Òz˜ù}1 WÓv2ÆJÃÝkpºßÂB 2@Zë[Ý¨ñÚphM=lz•©jÖ°FîÈ¾'Hpînãöêêmk”Bb¬É6“/¶™9×²×„cô mQm$ýl®Pr‹Æ’m†ØoXSë×c©ÉVS¾•=næ	‘l{»«®­h$ëZj&öó„Ô¢³ÕX]ÓúëbE6Þª5ÒJô¶ey•n~uj ë–Õá~ÊèÌy Ñ©€NõJ©I¸”ÎéÃzzl´–d0*æ¨d8šJT°Š3DkO<aÎjk[òÖ–´¤%ýþEó£yòEèPƒÃ(²Œ¤yÎç‹ùj}üâ^ýx	Ýp[ªHÂBV39P‹Új{¨fzìü0ŸTnZžÍ¬æÓÒ¥þb?T‘f>óðHÆ$ÁÚZ8-R5ðèì‘øN\„“ì‘›é’Ã%K*Ò;iR2éö&Y‚'ždÑ­æ-5O°¥­€Qc/ã!ªyV‹6¬™­váÄ©+.Ÿ9vÐFæ8sçîíüƒ
7¼ZÀ3°6Èµ˜¸ælo2=ØŸÍ¦—µWŠ½(¹|°¢@ù¾–¶Ññj®k‘gÔ@bCP!S@k#ó]ÍïùoùIF)Ìp¡
Q÷3‡(™ã»@Òã!ET’8öKZrF:ÀKO^šÖ¦ª³xpCí]S]Sœ›KƒžñêðÔ¬@pÿ™³;ÆwìÀ·øñ™3ïÿ3s×k\Ã\CÌÈ6ZÓlˆã1%X-äÅ˜c@dˆka2äW¿úUÀ­ÈûªÞx‚®µNÍH­SµÀ[Wëºeõ+›•-²¦yi+ÙÛÄTì§ÎŸ?ÿäI%B2[”ÐÚNhíÛd÷?ùù"~ž»¢ÍšË4ŒM¹beg•û¡²Ö
9f¦2¢m>ŸV$OÍebk°Æ#ìåÛF*ÉD6”á¬ÁÒì¤RfeSÝ)]›»9‚Õn£èÑd[u®	Ú,¾ÿêi'pÍ)Z
ùçîi-l\K!Í\‹!©„Œ:lÿ±
I*„±è9ù}ø•ßF?±ŠÔ@þÄáš„kN¡¯¦ÅÉÃšˆ6’6öEŒF–H›í­±DA‰äQõÍ:ÙXÙégö~7yT.ŠlúRÀš±Z0]Å·«Y´ˆ÷ÕXÂÈª_Í§õ§Ùó½7L7íX‹Zk±Ý•§3øÌmÌÂX¦DþºÃŽÖÎùˆ‘ÎÚùó¯ÔvÍËÎ2r´]ï«ëÕ¤Æž½©ÎUªlê*Tê¥>azÜªÚgíFâv¥ö{V»kÌYûæ;W_}ùøé‹ºñDøãñÎfãûïÂ{›–“™N¿9˜V³“Œ0ÑZ“þ	i¾1¸ßûœqñá7‹cñ“Ô 5±Z)ÓÍêã1Ö`?‚"©‹4ŠCngÆÁšG53ÏØ°¾µµ­ÙgÜÿe¤DIâüÉ%‘÷•?Ö:ÚôÈ—üì¿üüçâ´{ä¤_ï%˜Ç€ík[XØµž5ÖFlèî2×Dk©2¼›ŒÅÍÀX$FÃ°bÍÂÊÒE4»­ÕhKc.ZÕñ!7Íd 7¢W¿€ûÓ¬—în MEœØˆÍ •ñºzÝ5`ÆbÅNHkÜ(äîÄ:x!©©} Š—‰î‡Ör6tG)U\)Æ+ô¬qû›ª$ÚýÕZ–RF–´¤%ýþE£#jÌÙ#Xë0Bc<ˆ\|vå®3ŒÎíË ®}TÐ·uÃmÛº‹åþÝ¼½ŽÕ„jQ[Í‘S‰šîÎ(+Ó§A’¹j¥H^F®½•6*«Ú³ílÐKÔ¬‚„Ž¤¿=xâ‡Fhñ‚­D-™a±xãg‡§¼À1k:²®6v
xok@hæZÜäÌ¥S·¦2'²D•CÎ£š…‹Xƒ¥öûhÊ§Žèü¦®«®?5]ß­s¾2­Ì‡zêF]:N/|VÃu*ýYÐ·´üè¤8¬ˆõX¡>ßÒ–!d{M¸9§òGê ‹tJ5²€+4º§£cm|t¾Òºi¨:JáãÈèÜ˜4'‹ŸJ¾„­¶02~à²™•-Zã'4¼:N'­j®¡ímÜ4ÃŽ†ºÚ]ŒÇ±¤X­RgÊîô´<;.HjRÔø?~ý}ôî?3wJHáÚé‹¢5±Ç;Ï½@61þšºÆ=láø¬$yÄ7¹BHYkêY[Xµj¤¿­­€Öˆ!Ÿ»å$Ô¯YÛ¼b¹ ›Ö®\Áƒö¸ÍtòäIÌ¶_“)VÛÀ”„ü’`í±Ç~ø»œë*¯Y³õ\+Ö’õ‰¤ð,ÇmQ
N5LÏÈN¥“lVaeRI¡ª±Ùý¥x¦Û\¶>n[dÚæó™ì¿Øÿ"7/º¹8ó"xæJ!A´ÖÚñÑlÏþà4Ò*`µÖ¤ˆ·4®…ÞšäPÄÑšWŽ>¦]vÔŠ®´qá°ÈÕ µp'’Ùít¤’GØ±fÎ8æŠ kXkBF¼5äQÕü–x6sàÆ«ÙÂ¾¶ht$[ma¨ÿÍóGXÂô‘GlÕjšj
šÕX„jVæªùÈ¿2Vó¨†Äj×j ½«fÏUÃý»7­‰×¤¶¬EÛÕØ˜‘è¬ÖŸ[q´î•/¬…Mk¦o_kœ?×ÞEtÿÝ€ÙÚÚÙÃ@`k­.1ÌÛìÁþB;>Ãö{+¬Æ•‡;Tº:«:øj¯¾j5ß|ŽzHFaŸ>M‰ÀUÑš
 )m~óàAÆ«Ád(m!*ä·Ïl_ VfŒã4•í*ëô¢Z³‹©M(&¹ðÈGM13Ú(\±‹,Àê38!jÄÃÚW$^3G¢HÜ5XïËŸÕ¶Æ>(NÙ$|±ýO´ôe 5^ø¹òúþ¸ÿìÁïÝrëíÀšÑ°æóú©‹ÔBsšhMœ>Ñk·ßr;ÖÙ-Î^smj&õ„™«†e¸‚VTÑ¢Îší{±WÖ­¢¤ÆÊ´^Ö‹’û}¿š¶ëUª©6;þ-¼»à­EsOgórw7b²š­M®ÿmh®™ùëj"-p-'’P¸OªmÍF¤æ*©bÊÒƒççi,Ïc®u j-¸lK)#KZÒ’~ï$HîýäSürÙ¬ý™æaïAÔOlx¢%¯:È#°Ÿèk4Ùu¦¯V5Æ­uW þÝØØj¾ ò1Ä›éÎÕ}ÙD¢I°«ah”Ê©þñö5Ÿÿ<¿B×¶’e!H³rH±Ú°ÆP3tâÌ±ŸþÕpO\°–L'&T9×…Ïå‰\ƒ5l3¤7×ÆæÌ·BãêÂTÁ
!5»!®ËäL0ÁZ<Ç^Yíº†µ¯	ùëœ8qáÈ«§Ž5é³‚t£Qi×zÕÜÄ'Ašî¼ú»HÄÖ’É jÙL_w1^W—d3™xLÈ¶µ¤4·…™ä©ÞÙIÂ¨™§­åûÚFIV®.@Ö{FˆüWEäìÐ®Ïî Ö¤9Uüˆ¯fŒ-¤ò:+›´³™xü iþ6mæÐ¥·éeƒÖˆÄÇl›ìêbR9 Êê†g‹Ýyœ<µéKEpdÿþñ…—ß5_íõ_(Ìß¢Fä® ÐÇ‘çÌ]{„~±gžù¸FæÌ”¯…tÀæ`Mcúkì¯âYÉUJ=+Ir£üqåšÖ®.j×¬\Á„ll55˜me×J°mÍZk\ºôë“kÖl·Žµ_?¹sgPiÌÆ˜l`í<™*„,´w­XÖÜõ|µ/õ÷’-Ò[Í%,Øhö]ìÏ²cóÖŠüHàVí*TØÍÆ]I¤|4œ5
!³÷“ùx6ÃA_¦¯%ÏwÇ!š_[p?À†Ø¿rÚ‰zÈ‹×{kÈÇŒHaÌˆ3×¢îšï]ã*$,¿ãiì4‹pTxÎ­ÂC“'´èÊ/Ñ—CöògÂ¯åÿyQ9R[Ö|Çš¤4‘ÀXó+u±]ß´æ3F¢¼VsÀ_óôÐæ.à·`ÇK]l‚·ku’ÈïÝ”Ú¢Üöñ™-ŠjúTïªŒ†j<§§ÿuúgsVémµÕþ.â«E\5žÇb×ÁZÃÍã Yb‹kŽÒXLñ6¸ž8:JWÖÕ­0cí‘°²fä—Z;·ž;¼æðáÃ0[ggXë¢gmy“r 3ez×rs.’NTÝ%,ÌŽé¾waµ'ùOèicµo^¬Qùç¾yúõ× ¨]ýÞÕ—¿rùÊÎì¸|ò
lŸxYÆ+s„\Ï™†«¹ Š ÖLT]N]á]ƒÄÕFkÛâ¶Alð™Ñ×j;©#dÆ$Øq÷#hl cˆ‘¾û·54A_a$›.ËÊößÆ§*£9Ã
wíË
íoálC¶{[cfß®þ›6å;nÞ­_ˆY.¤p`cµùVì(š½| øf	#ØpÖ¶Ñº¿À5¥+òäoý“õXnú§‚5E÷û‘ÛýnÄ"	ý>¥ß=oPHjìˆÒ¢¬†`3­ µ`#yT»¿Ocã”i9ÁÛ
½¿èä¿.«zqöŠ9Ù~2[T“öâq¹lj®ÔS%¶É¬Ö­Ñ2‘h­·_ÏZÖ¦{|m$AÊV#c„{ßôéO-iIKZÒ'.‚üã<ù!zï9:Ïï”}æ¨åS-°Ú†'Ú2)7Q*?Ï0®	îæ__KKß Qþ}Þoã¬šŽ‹xWMž‰ŸO6dº‹	’3úú2ý*È%ãUO·¯k~`ûÞ™±1Xm<$Ý kßÂ _žŸšê‰ÓLjìI:^èI&åÅ’~üõd(;ô©#Ã2ãÚb”L²Ïöí_vínf:M#q!™Óeµhjÿ‰³gNyõÊÙcÇŽ½ÆçüÌkêÙÌöÄo,ÚeCh,¼«×¤Ë¾jiÒiá¡-uIñÏÁÁöáþâH7]QÂ·J‹½ÕÉžNk[›oh[àzP.ä»[FÇ³r½¦`ùnã,cŒÄUÅ!oLhc“vt/°‘¡6-‘ãOÛÌÔÌÛ‡ˆÛkêfS.dkë±BO{aJó±g~É$¼©Ùñb¦ˆÑÀÚx¡°ÿì‰ŸŒ?ºãÃ_ýêõÞ}[íÝ~ñ‹þýu‚!Aþ7´öÎÜ5¦®=Lï-d—4„›¯'\C 
“ü]Dd.·jU²ÀÅ°¾ses÷Ê›Û×¬kÓxà«­[+Lc¯¹Ù`8È“Í›ÈÁZƒÎvú¦5­8†Õt—î¡Síè²®ÃÕRI•æ¦Ù9æbãDò-ÄBd«rR9Î|Ûk<rÉº$´6¸<Mc[ª¨¸‘¾îŒh-Eál,}ðñî–îl–Ô‘¾n¹hÒŸÜtšå…!¯9Z»y)$8òõÐ\q²‘¿âPˆM!”‘‡_üÃö£¼å÷BCáª®…/ùQ0OE?<j,adí"H#µèPlÇj××AòÅÂµýÆp]¸xNƒÌôŒ¶²yŸÍ»nÂ%-nw±ÚÈða;Ÿ Ôà´ÀUCêV3Vó¾ZÔVK y)ÔüZ±ý¦Ø"áý†i¿K¿š-Öë^÷õ‰:\±DBgËÄjç~*‹Â²#I‰J —=®u1S»‰Ì~üµ¦êéÏò.õrƒiU¥ÂÂ¯R5¬ýÒ®O—v~Ãýëü2· È`ÄÚ;ßD?°™ØßØ”uáå—Ïî?ø*ãYd˜Y¸/ÖY½RDPÌMë2ôÒ7(×åF¸ï/hß®ã/Ï%Vc78åk#=Ìi%)0r›uªÇ¥ÖÀF‘þ«svÿj}>GˆX®#_Éd:údÇ¬B^h3Xû9ÑýÒ=7Âh@š²/;Ø"X»åOàgF™Š2L¸{d­YJ?s±ícIïg¶¤IGÏ«yB»…zDökéºùjQ”c•ÍV^Rcã1Mu¨ÝêpT`ŠÒûïÑ?aÔÝnnn^±¬)V×\³‹òµ4È&kZÜ¬5;ä‰lÞš5=)×•d­AjôL” µ^Ú µnžÌ©í­X¤Ášœµ%Z[Ò’–ô{Ã6`~í!8
F«¥ÚöQ	¹§‚Å"FOïB¾·ÄûQæt(º_«¶|w7°¦Ç8”Æ‚V‹¢ºï¾ïÄ”uE`C¶/³­Ÿ»Pƒé¤è)WnßtéÒ¡±YúÖà68­vËš_d9ò J–Œ7ÆÈÝ—e…ØpÐœ6™¶¦g ‚#¼lqþL+FÉaÀ/”ZìãòáÔÇVƒÕ|¤uÏ8Âuü¶c¬?ÿ3Ç¬ÙÕ×íéR.6c\¥íªÀYÄ®šÎi*'l‘HÈô`¶a9_¹œ&À¢~]{:Ë†ŸÁ`ïB1#Ä­ö+ß1OØËˆÚª(ÒœìY>X*”k€óèè¼FcÏâ¡AkÓ#£»Ç0­—Æw?» Xã§ccÖ¦`22 §!ÀñIq†ãV*FãÕñ}kSô¸ñ-›OÑ·˜_ ÍN=ÿÆ‡'ÎþäËîxëÂÅ×ßÿ‘r!?×pÙ^?}ñâEÈ«¯¾x5s8sí’«…pm÷ªUæ®y­ê%f«¬¢.rÕpgi	ûëÚ—u®[×¾N˜¤ÉXcÏ!×.[!X[;´éäöµ°šKa4Vlèa¬Ù ô×ÏÓÿ–ìé™Ì)³C’éâÐšö$ÂZëemZhË³t[»Zw&ÞYêÎ—•ÝßÖÍ¹È5]"&ps•ü‹m Z,ý’zÚÚ
Ç¬YdÞ¬5£·SOGp-j®¡Zþß
ÍµHïš[lá6B\~«ºŠeÑOô
O‡{ÿAŠ’ZÔW‡¬aœEòEŽâ¯9ok-Ä5Ál ÅX¢óè´­of·…äÆ~ô±¸B-D¸E9%0Ô|¤F«§-xR“¬]Í¡‰ýÑñj<d«¹*HN§ŠÓ67íYkb¥JÈE|5¿s£n‰ŒÓêë ®£vo¥“"H)‚jX;Ò­MÔo=ÜÜYß39\gX„¿ÖSŸLÄ)»ì_Å¯=‡jãs9U€[Ã¾š&zXEû‘w”©ÿ™°&XûÁU`õUJº)ƒ<µÿµå§^¾r,¢5ÅÊƒ±²%öËNCÈÊDôïùýˆ.äbEX»aán˜‹c5ƒ5Ö–/ÎZÍ8Ð+´è
³•cÄ‡ m(kÈtBø?FÂGÓ¥[Î&e÷uß¯Ødýgú,g„/R.7~v[_Û>\5„³&Ý{÷ƒ»~óX#¶Ÿ-²ÉØxf.6d½ˆŒ—‘¼5^»çE¶ÐÉæj!ï&#’†­AxëÕ¹æ#Fðµ0·j5®Iµf©¡š!µJ ýôkÐLpf2– ¹ýZqVÝj¸‚ð¥hT¬ö’n¯¤BcY,Vÿ@sSC, ´€ÙDháHwå÷«£2íâch†T‘®B$-mD Æ[­<˜+TKtLpI)f¹Ç|ìˆ-ß‚:×ötÐWÒ²DkKZÒ’>©>ýOyƒµ}C­…7Ÿyj!iLÎ–ª9rø
ÀZ™›uÖúºÉ\ŸÊÙ´T@ÂjÕî3ý”{˜FÉºm}Ù^¡R,Ñ
Íwéã‡Z­Fá¨±µï­8râ3L³VÄW²Àµ¬ ”9Á]ŽÎX;~Ó¡;£“Öž¶:ÍFg“´¸5àÅÅ"¬FMe£eL†¨&VS¸ÈµÔ~kèU‚êÏ<såŠ¦½vð5óÓ¤â‹9XSÏ‚]³Óª‡q—Î»ë-¤Brý¦eŽat4œ^^GúE“,Ì=-™ÁÊBoq` “ãß¤™Ø•îR`”Ý_®V‰¶f¶g>b°66367<<7·01±{úÀnÐîéÙà…Õ¶‰"Ç·yÃÂw>jå1C-¤&±U‡€5YkDªææúgéiciŸœåËQó‡;§¸L¼YÞž=ûá.¼±cÿ©^‡Õ’-½û÷¯c¯™»ö21þï|ãÿøFkçŸ‘»v' 5šæ­E&?T&,fdÕ*ZØFÛ;ûGzV¬\¹‚0J!-M¤Xc'Š½lûk'/‰Õ.g­iá™rH™žë`Í2FŽ&zªI]X‹ÐZ¡`È
q^êrÖ`ö-kÔAæ+Õê‚±šºÆs³œæÁ¦T›ÎYP=ZbsíèÑDéñ‡R-ü_ƒ!úÐC}-.’5¼ÆXcƒ ·G)„UË\ûóÚ9#‘XHkf°ÕrØB ‹2™{Ö´Ëü^xöÿ£jžÔ"±ýQc-š0BÏ¯øžµ°ÒSl„×nBj(BhÒ´#Ý)±6q¼8±96«íµi>ü¢•/œô¤¦úGHÍ* ,°ÿ_ç¢ÝjÀÚõ¶š–SLVÓÃw«!í„Ea@máªi³x¤­yþNª»~JëaÛÓÚºòœ`­n™ÑZtÒZkÿOo½ã3Ö)¶ŸJHýñø É8KÓ`qÕ*åIsÌWSî­Xí©Æj÷}íé§õ»M°öÎï\%”Õ`–µ^¾òòñ+g._9sæØþýÇv¦)‡SŒH¶¬®µ€ÖØÁ¥ýÛ~ý;elš8Ã8åqÍrWÇØJVÒÁëiNŠÕ,2#“‚Æm}¬ÄtÜ¾k¤ä‘*HÎk}4­a®	Öú6tô)úfn›®Íœæ2\©7ÈXÛ¶°ÈmÝûvk<_a¬þñE`gMäÆ¡PHHó¬±µ`hÛÍ
"ÍŠSr?OÑ‚ŒBQ•HÛ¾šèÉØÉjã™G8mnD5Ø®ÆCi®r=ÐT’©€´‘5G‚5ª=YQè9j%,¬Ya4ßÙ^w]ìaM/!myÖ»%ëì2s¶Z"NËâdVK—ÈšT¾HP	ÙßßÝV,vënÆƒjÙ0‰»àô_?µ¤%-iIŸÈXÃÐ¬}ÑÚü>¤N5J¼*©yÂ f=¦²Å‘Ñq`-CM
.«¨ªÕVó¨Æb¡ÚÓè‡}¸•J)ãí„*'‡Û''ç.šì¢MÊg@FŒµZSÖ¾öûGŽÅ4^M™ýÊ40óš²FµðˆUpBfšX*­3VS:ŽÑ&€<¬%é€Kb¸…¨aµ0]ÄÍáyõìÁÏœ9sÐ(ÍŒ„s±uè£œ)”Q÷¹vX8™ŽYj$øêÞßpŸŽRx®Ð”EêãÆ³¤Wd»÷Œ(r¤†?þÚ##•T¦{ÏÄ¨øA¾ÐB®iù$‹£èÙ	0ndnff²ÐÏíÞ]éž¬ŽL<;GãôÂîàk©Em>›ÁQ›¡ç‹™Õ¼r`<Û£AÙ{7uµ¶¶çª³sÅ9L0K÷—×¤bµ V;Þ8vöòÏv¼uêýwßµ©kßýÅ»@Û¿kHöÅÓ?p1þï8sí¾¯Ÿ§òsßþö{ßÆ\sî®ltNßÎÚèÑZ½‰ÊD/ó±Û»\íck+\ÖÚªÈÖuk·oçhÝÊu›pÕ6üõÉ“ÎXã¥9Ýõ9Ã5ÇüèÏWÈƒ\‘ˆ¡µÁ3þ:ã½É)#ê`›Åh«è;'ü-ó#ýHZË<¶À‹`Ú ¹6_JË”—§3qöŽ;êÊy¾ÀØù‡$¼5Ášð—|>ä[W#´VÓ\3Z‹âš˜DŠòZØnâ]E ì?‘d¨¹K”ÖÀ/ŸÛ¯†µÕîã<®}=¬„ôßš¨ç2+Åä»Úô`Sßxz…y‘Ô~gŸ-
nZB§-<vý!©yVC»ÃHô“Ýj­Yb?¤&T‹êò›×Påfò¨³i}ÓÔ~6¿+¬Õù­Ví­í¤ä2LÑyf+?a- µ¬éÿêWÎ»ƒO¤z:Û[[{êô— U¤@»Ú¸`MÂ?Ÿó¨·ï¼S¬¦aØO?§	kbµïáp¿ðÂÅÓWUyÜ’E.^9uåø•Ì±ãWÞ»|ljõ2)¾±ŒjDœcp+'­!£WÊeNè´.­q†•@ 8jDöº ðÚ•	ù.çøJŽjB+#MãD–?Ò@„úÊ†èMÑcœl!§¹£o5¾šï©}é“V[É¿ÜC¤ÐkË­z¢4òDlÃÚe&®_O‘#¤Æ‚,f/Î’F,käAÍfsk<!#YZ·pàÄ±1¼®©Í«VcÚ"¦ZHÇjf©ÝÊJ†ž`M	'
tÛzþ äfu*áV“Üíà„ƒÔÅ yYkŽÒ´°5¦¶X0GkõAÿA$°&Z£}ë´}Z¬[ÁZ’{Ï¸k9µ?÷WÉpÖÝ;j–(¤r~X£Xi‰Ö–´¤%}"ýJ ;äÒï¡îL¿P”.’/b:¤º%•-õŽÌçåé—âê«Úf˜fÊ/Àg×iîúnµ/ªyRûÚ·¾£ÛHq‡hf˜7ÅÕL4·÷ÒÐìÌöµºéµ8¬áyâ…u“Ö
ú¢Êa‘—„óS	ž!ƒ5møkJG¡VÒ`mXkXN²ÕåRkíPÚ D+ØÚ³Z´R…3V;rååÇ^{íµ7ƒF„kŽš¹©>Å:VnÐVÒ=XÒŸÍm‹§UKO pº<4dRÙ2gqÐ–µ„±‘ÞRÿ(?¤r¬<žÖFòƒË³l SoºiÃlšh`\ÿ‘S3SíCüÛ§ç[˜š™~v÷\axª0>½P= BC‡†&É¸m(œß†¦Èy›ªÔÖ¡MC¹ÞÙ±92K Á1e8B/j –«†d7i·:>÷³_}pêÂ¯Þ»‚·v‘TH¼öúßÿÈ%@¯j Ýs–IÄþÎ»¾ýTØºöÛßúhÈ Äß"!GsËr£9-&Ú«½í­CkWÐ»­ñ³P-$ø†±®AoÛáµ'ÏlD÷ót°ÆêswjÿV`í‰àÌX«v&J¥lqÙñ&=áæL©¿4<ÕÚ.­ôçÆ¬(’s0«å³±ïŠøkYÂ*û1×²ƒÝDí05ß¢¹u·Ì`†šÚ§4â%Pû_Îds«ËBþO‘jÈh-ZiæZy­R¸6ÿ‰(Œ•žÁº6£¹=«E|5)\ûš×}ÙBZ3T­yoÍC_ø‡F“+yx-îµù°HÿWNÎgcååY=Ûa½xIäØC+ÏjaŸÚ©ÆjZÁ">jÕÂéj§ô`¶Ú¿…jèý 2”¡E¨yR»iÛ'HA‰D¬uôŽÎ®Ÿ&“ÿÜ_om­‹8kì†°ÆÇ¼rnërÙq	£=Š&š¤^ìóÊ½j>2ˆWÒ
Xû†MÃšBû¯^µ*È#Àa/Zjÿ@kW²g®\ÞÿÞ{g,gõî\ü¼Í7X[^Ç–c¡˜«`+DcÇ^`­·ÿå 1MiTÈJ$±Ê¤4÷ò\êTÙ®÷Ð£f°æ:Ý€->“ìIFjÓŠ†þ¢c€PDÿ@¦‘öµ¾Òï¬éRiÛÀ7J!±ÞÔáö•]›!²]¿¼î¾}=ý\O ŒÅò›ýD¤VOü4Êï¡ ‹W€µ-çõÒ½t¬!g©9>sœf»Z“PjÝ¾cí“H«• éHE	~´Û$@³œ6úÓo¿uãáÓˆµd«y‘5]ï©ohJ&¼‰Ö¤P˜Àu¤íãEØ§0·>Èî¬Ñ§«½ˆ	¡[¬œN&†“¥’`P×z‹b5®òÖ:Ô¸¬m–hmIKZÒ'Ká7I¿äöYä|*5?ß’ÍR‚GsYªM°6XJÇKYr‡•NN-d¹rªÝ`«	Õ¤¿ýÌmu1Pm[ŠYÓÙ8=bIz ˜F<;;»÷Ò¡êÔÞÏ?ðÒŽÖî¼“ÕSO=å« #Éýjc{ö¶dÚ¬ÅÌVS3Zà¥©­1Î«:@[šµ-¤‰ùOà9}°4X—ŒÇV_ù2È8‰¨àQÍ³š/‚ô°öªtŠ~µ7­E­E½5®Öžæù¬³{j,v\2ö‰D¯–]FZÁM˜l±r*«Nöxj>ŸŸoiÉr™ÎCÕBµ®)Ó2?U˜*åòøîQeúïaCev|alxH£ÓXUÓSÕÂÌ¡s»§™h7;÷³¹…¹©Â,|¶©]±øA00ÛbýÇÔÈ¶—†°CS³è{;Ä)B%%†ºÁj®@pDÊ¹ýìÃßztÇåãTBÉ
^cõ®J!O«¤Z£w 7${ç]{i]‹$x\£Smô«_…ÖŠ•	6L™ë]X7µnÅº¡.ÑÙ:j"pÚ¶k»¦uûSçÎŸÜþŒF`5?hí®ê[ÞØ©awv‡_9œLV+ý%X-ÕŸ„ÕººªÅR²Dd?±KPj7âk.´¿Ð3œKe¹u‘9"K­TGÒ)›)gÄeÝEU¼´Åš²xmÖNÎ3ßq>sr&'A5;¼p…À&X«4‘òšÇ5À&
lÞO’Íöû“K¤¡Ì?ü&\xDOùÃð<ÿbiîáT›Õ~I‚t¸öpXÉµ«±Dšúü÷Â+ZM\YœÛüÃ-(o—MHmÁË"’•æðÌ+	ÕôewÛ2m¨F$û‰¯€Da¤g5@â«ý›Ï€ô´v,Âj7†mk‹¢ú˜¤æg­%¸wô•W”Ù®±Ø¤‡Þú¥Ï¹±Ø^×§Aªmí~½ò	²Ôâ…j5^Ž¬ŸÌ¤Ñ°&õkšX2ÓÚ¼ý’Bûµ§ƒaØH¤öÂ‘«G®^U‘ýä@’µÇ™SOÝ¶<~ðñtìØ±¬Â©S·7ôõX€Î óvŒÙXôHÚŒ7d€ÛØ¤wRû•×È"0sƒ×2«y™¥a0ÝÀivÙot@fávÏÏl5W]¿íËÁ\ì2Üü­Y
d—ñ*$qäøÍôÄ÷o³PHf­ð…¶}ù/¼{Ë‹»èS{ñ±ìµëÅ{ðÊHƒ$¶Çü´ÍxhêG»g×æõ9Ã`l>Pƒîô¡^P™Öá‘
M·Šµ(„üD¤²Ïˆ¯æÆjÖ
"9Ð‘j7!Gpr³"ØBûõ«…ZÉ/rÝ5â²M‹öƒ O^üc­>!Õ¹µnð´4HX-™$ã¬”ÓDÖjVë'½?Õf9Á\
XÏkÒ†}¼¿Úð‡ÿåSKZÒ’–ô1‹ ÿ OÙ–$FS„?kX­H`?C°÷ìiëÏ¦8Ý—IÃeœ5vŠyú§n µZ¶ F•É?ì/Œ)×¸¤©h™RÏp¢¡<¬ºº9âúiW›í=´÷Î½{¡4´}ïw>uéÒNcµÏ¹;§žÕxÒ³ö·?|^®×¤ƒÄäš\øFA¿i^4X‹¦$^4—-Æ§êEZÖÑ
q¾‚¹jAŠ¥7&"‰GX-Ré:Ö¬òÔ©³‚5.§¬érÝàûÎýèM«‚	CŸÍKì×YcŸQN»S¤J	Öú2üùL*wgx?/¥ø9ÆbŒÊé_¨‰eI–³ùùQ¨Ér0²©ñ‘Qkªê˜‡Åª…Ü,™ Ó³SScc”s2-äSüŒfý*m<t 4†?6hÌrG~‰‹FÉ%ös‡f@7VÓsŒÉþ%´V›- ‘<Uù&Dc¬ñV{¼÷Ñ_¹ü>¬öu®}íßq×~DÔÈñ«Wi]cH6ß¹¯Ý÷7=ÆÐ5bü×ôU§¥0gd‘1RZeQ#¦Ññ.­m¢8s-´¶f2km¨•œ‘VŒ¶“çÏŸ;÷$•ª‚dqkÜŠç?Fÿ¾îá‡yeëáWîèLÎ=_ŠÇÕ³V¿‚†óµÃf452ÕÕ5)XëÅYÖ7·’æ‹Õáä`*•mÊåúóyÁÚòDu¡7‘ÎP¦Z&û1oýe¢!é.o#'µ…Qæ—kô©yY ¤›É¶ã}0ÍP-Šk7Ì\{®®ý°6®y`ã	So,ž¼¢ÌîF,zÌ"…GÑÇè^ødU{‰Ô?ò@>
R¨MÕXX¡‡ÃQk6Î{kaÆHØ»*bÉ#Ä¶Å½6)L‘äáÄND¯-‚l‹[m($6i|š3ÕpÔxÒ©æZÕÂfµÀVû»ª‰Õ,Ò‡ŠxP«½' µ¸±fº)§ù†5–!ß$ãð¹­õ	&\k¤÷o]ö¬E£û¥Ûˆ}T%iíjW‹•5¡˜²2LŠë§@¿‚4`mV¬Æ¯µí;.b¾¬æaí›ß}á§¯¾Àïu¯¦áþû3©GO]yï6ýÚNÇÎœù"¿áëÒô¬š¡å°VP<a°¦ß÷Áû~Zb‹¶4}gB×róhˆÇnÐÚ¬§ù»ó}
éÿ¬`Í®«©—ÌØ&Ò4@róýšÒv¿F`7ð-û:ä¤õõYÛ,›mú¸?Û·a@ƒÚö=¸qã.òE 5ùNÀAþ÷nÄ:Sãš²G´tHL»—5XLÐÃËœ
¬*hîn²"EÉ#b2sÖ¢­ì–Oè«Ùƒ%Lìg‰Aâ©	Ö„‹®ÒÜ5ûk –BQ«Ü¤žsô¥o¿ªYMäÊzd[_o?,tÝÜÞTk2F[V°Z†vœý§œKÆm<6ïiJÄ÷çd«IÕ*•IÈ¦¬9Z{Z“·ö‡ŸZÒ’–´¤§OÿqV“ZFÉîÏãÖÓ	Û’Q6ü wéº‹EeEgƒƒÅnÅŠÄb@Äjâò®‘½jQ[-DµçÐÓgöÿ÷ýÊAŒ÷Îk1²E
…¦ÂÐÐ,°F¦Å¥KÕÙKzë¾éó/IOo—.=k°†N|ç[ÐÚóÀ_PÅHÅn’F4Wðh>ZcÁ°Mv[Âv&ãIÖÚ6Æ9I¤ÚÝPzuluƒ*!¯å‹$“ŠÔ'ëƒ2P«®aÍ§ö?°šµ¬¹‰©gÞtÑËÖÜ0l¶vÉfÏšÍƒˆ0zÕš`µ2Ùüq]ÌÁ1^Mgb–",“A#á^éeT\dºëëãñÁ¶=-Ý4CdúV—r•ì ‰"ÙQ4b×Üx6S©ÌO,ÌÎõóDöƒ¦=c@ 7»OÁjcÆÆ«]*zšªö”@2«LH8Âc®‹Íàiú·Ó3C­²Ü¨PQ#Iöï Ê$§zù±+ˆ!h„lâ¾<ø¶ã­·ßñãË;Þ€Ö`5{¿`Föë§tQ±jð­k/Ðºö7>Æ_C²ñþ	\ûíowÿÖã¨¦%E¤ªU;'sÃ­t£,«‡Øà3k\fÿÿaïücã*Ï=¿ÿïîŸ]É¶ÆŽ"[‘««;XÁ.ñ¬g˜¦0ÌŒ=L4ãÁƒ'HÈàŠ“ß¤™¤vÈmHèÆ
âGÑ…p)q¸A¡"‚þ Ñ$lH¥ºpÓÞ….ìªü±ŸïóÎ›“ÓiR­îêJ~Î9ïyÏ™'ñ8>ó9ßçù>haí‹?X»üÄ†ekŸØú……ik´Æ¾þzik;NðƒDWö/¾¸¿uÞ÷ô|õ¾Çê£\RóMXMvN–ñ‘¹H/°6)þã@að¿¢'Šõ²}Ñ"é- Y[Gc]ÿøp¬®D[)™îPÄùxÄciÝÛ°ÏIÅƒO<‘,ñd'®mÜˆ˜&Z“¼ö±	lÇþôÆ;pÚ;ÿVcu×j¨kA6$´¯y`ûY€l¬‚æ0[€S^…w,µ"Ì`lþä%žëç¡3!R| }ÁZeÍ->ŒæÀ:Ù‘xm-h·h¡8åKÙB¦˜—–ÚNÓLYÙÍGmzc›->	Íš“Ò,õñ|þcÈ«ß‹jRÕ<ª).B5-ª¹8óV˜Ô.eÙÂâvŸüõ¦ØlW(¬ÙææWµf2½Ý­ÕÚqßûúZÞý«VÝwÇA)ü®&ÿ‘›`3“åd“ÝJEìÕ*ktX³‚µ‡Ì\ä^k°š™‹üð¹Ÿzã'x¼òÚ+ÄéÓoœ\—&ò•³ú Ï¿úÙïåøXÒ-3ÅRÉ\A"Þ¥ß'Q”à9ØMúÇ¤NÎOáí¨ë‚Áš^Tò×<"W…8žÎ,…`6Šœ¶*cK§©d‹hZ“ì–ëZŠ¿,ûUÝ¶p~¿kTRžãÑ®AZ?Æ»ºäñÏÕ})AÚäon·^øJm±¥¡}÷æ0ò¿åÚï’‰Œö!´v³ieð—ü™ãÞo°¦j6 úƒL~Ãš^EÈ¶Ÿ#£õ9»bJc«j¾µZÕ‚š5Ë‚TyÜUÒÚØÐÔD£úûnçÚ}Aä¼±Zþýö®q°šÍÿ4
¶EiŒ„~À¢ä‰(§HË©¦âd¢Å¤Õ=cà? âµ‚Ñ7÷Y”5YŒ }îž£µ¹˜‹¹¸RwK««Q‹4\‰wlßmkÃãÛwCq¹œµYë ÖÈLg™tåÌ&¤fF´Vê—¤™@†YÍ£ºÚ/~ñØË1}êË“£Ø’™”kÒeU¤ANŽ,_;5½ü!ÑÚÚ—,–‘"·U¬&%ëD5RžŠ|ì™]•²–O&±‰	¼`.`Í;ôÇ(‰sî„ë®F?6k7FÆ ¶H>­å±“ÔïÚˆG­`-š!œªFÔH‚´Ú¹£J˜yûí³:»‚5ó«‰ÏZ˜@m6gæ/ÝIªŠQ™JLYSŒEŠ²
Ž“fSG†EA3Æ% ­¼÷¦`¹ùùþBvaþü¡	Þ§‰žhv‚²*À/¥Mâ5BSò-3ý=c¼+ˆ`"²é|FÖû[À0¾×#*KÛRîG5Ò[&wƒ5Ù˜‹?,¸BNMOòºçÅS“ùò–-Ã©aºgï›!ãJ·ªÇ‡Ç+ˆuÒÔ{ý©™Êúß¯«T;zDªš…·yóˆlü)
Ái„·Ðlü±Ólü…ú0b	Iéš×{n|ÃÊc½4XƒÕ”¹¨u	2ÛH{g¹$mžX9oåñêíjÖØ€µG¡µ'pƒÜð4wøÀWŸÅÕëÙû~œïÆ„¹··©iI'VE¥Ü»•ãÒÂà±R%¹ÒŽÑE¡P®¨»Z\w/ÒÅh_eƒÏÒœ¦ãO¼»0Tè0»fÚÒ¼ºñ­·e»”ézd;ëþ¬•¯‘ùåiºïšºfCqÍ«kðZ¸xÍ[Cz^«™©•Áã
ƒ¶1!“^ëQÏG@d—dW©	Ô\;ì€ÔBÂšmAl³§T-!	ÓÖª_ï‚Û)´úMkÐß ØÕŒpOí`¹03²6®…¨Í/p˜ç6«Çº!4¶Y45‰j`Z`ÖOXúãã©ycHMÕjáø\Àf=GÂ¸fkmëþ@X°]ZY»rX³–ÃÌ4Éð‹·½»î€îÕ™¿H ¬…a”[u`U£«'ª#bCåI*ˆ’©ô ÐÚ0«U¬Íäqæ7 cµ ÚyVSüða¬kÙ£ª=sôµ?½ñÆÙõëŽ{NkêªÖR*Qd,L1S)gÞŸ4§ÂXÓ#§L~›K¦5óˆ3,¥T«æÒä);eÍ“B2i÷õ¤­•kä6¦Äjºš¤é$&”¢Äfœå?2ª^k2ëÏup©Ž´”rf'b°Ö¦ÛFªb“'ØR,	Éšü,kŠº0avû-Ô©Ý|Í·o‘¡ÿÍ×]õÝë¾}- ¦¤ÂkÕûfsõPÒd¦©¢Mè&¨³€ÓDLŽÙÔâìïXÕ [æ`×T©1ht+[(Ò“££µkØ\SleCrD ŸJØD#$Áó†ÛUœgµ¦VåA6,jªo¨‹T-Epë h-«~µEuf¬ŒÍŒ!±ñTÁyXKR(Ò¢FY¯t±æ
™¥ÿ‹„5¥ÈïþÏÿi.æb.æâJÜEÞ×=Ÿì¦*¬g…jöq±@¿÷©O#˜5Ö ·Ñ…V5CHTë£÷òE)ÈjÕôAóÓ‡Kò+ áWºL¯ôòÔÈT¥2[¹fñÔÔK8N¬]ûÐÖ—ªÒÚVØhóæ›þ¢dí™CÏ¼øÜc‡ž{¬Qý°£IRc®­ufhm,éû­±É|œÃŒDçbt.F‡SØe2	¸å9É\ávÛ:É§¡ ‚¨Fƒµ 	2h±vè$É2o?ñÖËçhˆýÉ[ŸØWÇúFØºÆÚ•Wç5'ô î³.œoW+ižÏ%X+¤åÙ¯;vuÅT‰i	(ÒÆ¥c°kS‡„µ\óP11‘M6ÆÊûw·e+=…‰ñxŽ½…á>¥&Nà#2ƒT|
¹D™µáÊÐ4´Jë¡RmÏé§ˆa‚l€€Õ\!	©\Ê‘ü—-ýtùœÚ÷<4…DÇ+³3{z^\.XO”Õ4Z&¥sqþ@*ÄØÕÇÎœ;ëiMÀö??#\Ã^ÿ_ä§â—¨kOo8èõo?´¦\H|F¾6X›hƒÑ 4bbÁ÷ˆ™|ç<$5ØlíZlFæÍë´¶EtÄ^Þ¾öð¢EËV.Z¶õÄ‰0{£5¤µ_=€®Fl;|ü@S¬?–ùñÎy­c“K:ëë;§+ŽÕXiƒƒc©U‹«_6}¿IˆÌf±C-Ò6›Ù9ŠôÚ:²ñRßð€’\ˆã†ÌËÿîBúàÆDNÊšn­¿I¢¤ñlàÌ§A
Õ8fO¬?Š¬F¼c‹W×<®]d5RÃÒ‹Ø$ÐØˆÍ¡©šýÖz^bµH§¬Ý¯õT»WcX[s¬ÆzaÝÚ»Þ€ÅÀ4Lln£ƒÖß±1jð“ß1‚fl¬5"Ìn—€¶šç‰M£'5&„»ŒÔŒØT¦†©H€jûR5P-°€ô²ÚÁ59‰P«æ9M*X»t£5U«iEU³µŠl—°ƒl¼Â‡CÛ¸[ÖÝÞÙíjÖL?»I#5Z;®‡FÆ2Mßi2Í#†Ö#_M
Z¹`°FŠ²í'S¢uñÚ­[i?°æ’ ?2]íþg^„ÕN¿sšÜöõÅ£ü?<—Øˆ½È+¯œI6F[’ ZÒt˜È”Êu¤’®ÌÎ¹sžÂ{Tëª^‘:!~=QÁŽÁÂžè¹D8Ë«¼²6J–E)âô<à/É\jŽŒÞ¥ò5¹=‚j<íM´¶0Çnõ]£wÝÅž h™-^[º·kõ{¿zAÖýP™ m…:[ãá¿‚‰T3¤5€ÌÀéÌ¸eìf
ÙxH^œ»Av‘²îÐ‹ØÈˆD{3ITbs3D0¨ëÛ:o]¨]¼¼­ˆ_BqŸÐ* P´¸A()X“äŠ	îØ°¶F™u‹Ö,ZTïî=\è+ÂfEæþÑÎÖêÉxôm³{kQíPÖxO 5~èìI>ŸNu3šËI¡@ífÚ\BX©YƒÕ¬Möûs´6s1W"¬}+—˜Ø?!Ÿ¢MÀBawÖ­‚mõhÎ¼i® ÉêA	ƒ¼å“b5sœð¨æYÍËjÕýâG?:ô„áƒ![	›.žx2æ§µ•Ó‹ùeºÕr½$±ùVW²æaV“äc?ýiwDŠ\¿’V°æ³½÷êŸb3`ÓTE£æ‹*R¹'l
¾–xÊ;A¶hìî‰qk×„µ%¦«NUXC!zí£“@i`šuXcWÅ1“ÓªÅolº,spßt6]yùcÝµ@c„Þ9Åb@ j ƒuÅx‚[£)Ä\ªÛºH²K¦s„RðÒ(…ýû³}“c}$Cærñb_Y†$îª€Oûwí¤vŒÙé
’Ûôì¬
×¦Fe*JÖ 5éY§¦–­Ù›×MïAcÛ'Ti_‹°¶§ˆÐ*¤MkŽÊÆ;
ãš¹ˆÏè@7úgòëfúÎ½ù™ä56óyóMpM Q»öâ§¢5u]ÛüèK+½Ñˆpm1±}V®ýýÄð.D¶ïÓrM°–ïl_Ò®X,ZÖz—à‚"ÿþÃ‹uêðMÇ—­yô&ÊÔŒÕ±|cEj{`ŸÎ¾xzÃ½´dêŽõ48°¤[¹´±ä@FT€5Ò0ˆ¬(yj¼€ô‰	yDœVâRzçh‡Ô–H¥¥J+ÚëµÆX{b#ÙÂ‚µˆ²`ÓÎQ„•ÐÞîxýIHP³E9‘a_È°ºV[^ófþB6:µ½kRÛÐR8ƒ”†ð±ŸÖZÂóà<zØ0ã]D± 2È¤5£46ïi5k®nÍ;Bj	€-m~QIƒ‡6¿ÐÍ+m1z\ÓÊrÉš¶ ¹¶V·\VìÑüÌFí¥§U¬ZüH¨PígFiáüÇwÕŒÔLV3[‘p­‘Á£ŒK…G´K„©6^iXÆ{‰í™ž«V­:àû‰G/vÖ¦zbŽ7©æ­%FC¬ÅzèŠ5¤û+’ÕT^í]ûGÖ¬YöèMkŽÕjÔø‡»°¦Ù+gOž9wòôé“ÇŽ½}ëþ£´WK¶¤A4<Ct§]=å8¬®Å{ˆè/î²)ü÷P;m,‰
U~ëòcn!ÚñVûiø«ú6”ïéâò;ÚœJóR+–Ó"!éÌÁÚBéj÷Ü	«	Ö:ä&¢’5\ÀVW]›µG—.¬åºö~y=øÂWÿûÁ[LÍ-DyÀ"Ú›@áLQÇ-8ýßÕ©ø«<I‰äir~…² }
¤ÁšöB4/È«ðk¼À.äIÍF­žÓ¾ÑZÄïÕ´¹Å`ÍÚr«;6âH÷Ô¿åþ›X3am‘vMuóh‘ÝÔª9TÖf•åž»MW#ä/‚K©#8i¸˜Bòc¬EÕ>µ§QåÎQtÈ±Z¿åkëJ¢Vèk]¼À1×{.æb.®Ð¶¿ƒÒ§íÀš<‹€4«Ûdá/RcLvu‘þž*‰Œ’i](wŠ•™-e.~;Yˆ‹S ‘ÕŒÔH{ûÞ#o¿ýHKÄ–dÄ.U´Ø¬å;Á©‘LûCý}+kËŒÔ´G›X3a•4HÀb*#"c'ei¡²µ¼‡5;!X“êÆÎNG“äF2un"<cJÐ”º†®¡-® ¢»»³7`µp‹5âµ“ÇÞÖô>yËš ¬ÙÎëhÎjDÅä:§IIMo\Ê¥Oþ‰¤rébKr ý†}c½2! Ð,Ž3%‚JŒLX_¯\×`ªŽCÔãùÞ±Ê8dC¶¡üôs°f‚qûv)Td'vlß5Cí›™È¦Ë2‡Äµz¹ŠÙœ´f¸6MÑZ{»XM~'KˆÜ3gÿrø[um-õ¶€sb<õW“Uý¬QHÏrž/ù³/¿<UY¿~öÜ@íÈçŸ«ïÚoÿÏ¯Ö×>zS–Oñ…¤ëš*×è€¶•¤W¥_¢é9Z[pAËµ‰	gæÿ}ÑÚÄp~Qogw;Ý±ÑÖplm_Ì„XÔ»èð‡i|}âÄÖ›¶
Ö|"¤ÅŠ/6l Û¶mÐZCCÓ¢EÝQt´þ¡"?ŒØ@2/WyŽÈîrz,ß#3Û‘wAóµqø—ÊN]xÇ³‰”X-›Ík%Þ´·&âwßVL+m¸-7¿î `­ª©9_ÛlT"¤D·ug%¬¹…‰pÍÓšÇµ¯ùê5¯¯).6"Œl†*~Âêwž½üâ.x²;ç‚§éŒŸ_ÏïC37Â_µžLÌð¤ä@ŠÁÂ¨ÆÊæ&÷†¥5‡kî[Q#7ÔS[€m–ª\Ën§Ü¦¹[¼ðfZ‹·hÝéÖZ¶µ¸ý7ƒZ°c`³éNç%bË —Ô -ÔV-h‚¨™ª†¤h-`´@X;Ç=¦p8Ä¸¤k¿oµvI^ûÛ¢Na“îÅx@^½ª®±	qÍãŸºCÒgeÙúÎwr«%’ˆÊ¢'Ošå„÷oùƒXíùåk^âÊr«½†U-°¦xíE›ªd;K§ÿôò÷Ž’ùúÑué8¾¯“%n¥© TÓm3.ŠîÃ»µV3yL¬&Rc0DãÉ®~-Åš[=j—½|¡&ÝJŽæ³Ã†­¬š™i’ÓB‚/PéÁWÉiÅÎ`“Ÿÿ "DN¿sà»½{ïm¾KUlÜº€½Ñ¥› ·°†È·È¹EÃ~áÞýÄí\{k…óæPµ—¥?J…3Vã$žþ8ø3WK6Z­Yò£jÖ º ÌœÑ–êÖ<‚±s[ gaM-$©ý%¨ÕÔÕ,ëÑfðij„ª­0ÈÛÉÖÙÞç§&Dkkj¶ÖÚúR+Zß8P;³giofP¢VÏÓa7àã6îæ¡ãÆ¢zË£2†*–hÑZ5€M´–Ír­¦^`éRPÍÖŽ9Z›‹¹˜‹+°íÿV®k÷~Zac(ÛÑf–ýY¶íû‘fºœ7dÎú´Œ¦Ì3XË£%nmé7M­«Y
¤©j?">=ö	W¬bI—$î(Î'R…>yÜ–Çº'§–/N-›\	«©jmþýº¨iÜO<óó)ò'1µ 3ÓÎªÕhª)¬I]#ò‘$#àÍÅª('k=ÙÙŠ„£±²á˜ŒÅz;{zª¬fI&¬…`íä±'ìøúpös[ª*›±š¥Å»i*g]P­Â\M^ä/’Ó"I‚ÞkîörŠÊdQ¾þñ¡9Kå(\X:Gï'Æ¡Ýñ‰ýÛwwæå©ŠXkfwíR4í²Xk}hÙ7Ecµù9VTjÈ;7•/3LMòN—åIÑÖî™œÙó‡=¤At[(I«HˆÍtŸz\Î"…Š
ã`˜DÜ5\›~äè¿½;;»~ýëož={äõc*_ó.þ×H…D^ûôS¸ã—.’”EJ× 5‡kBA‘fØªþ"ÐãÄ‚üp_fÞ¢v%?‹yX[²ä0êÙÐÚŽÃ= ¦68X®áAùô¶ãò+8ÐÐÐÚ:¯g¨V -6°¦È>`Óe°Uf¦F–dTT4“÷HàÂ9^&á“k¯¶Âx\<´éÚ›RÜ×PÛ²*i³H½ÕX’‘Ö²³æ2Â”ÂyŒ¼ßÕ±îsÑš6f5R32,¯).æ50Å#›Håÿmˆ¡üÀÆêþÊâèË?Ó†`z¢[=¨‰Ô|Üþél¶Ò Á9'®)à<ß;D­!^óÔæKÚ´÷Çæs&ýâ .´`[Íå”#,¦Úq~±Vñ;Xá)=Oô4	jAî#Ùê]ÃSD‹Hí¤êÕþ§]Ô	ÛXíÌ.S/—cù+ÎýW.©¾fI}»uÄ~µ®q•­#á¢5ÁÚªÞÎX²¥¾©¨jÑW‰©µ½	kä†oùÃ>Œ G`µ­›wxV¬É&ê©IQ{M¿×9Â’8{öåÈ#dAžY¯Þ÷ƒ¹T”%]nH*¥>Ó%2úíïÚ(¼­öH3Û}"»$’’ØÎ^«a4fºáé;¼B§™kóArÃÿÑ•=ÇSmÖ¤Ä%r7ÞÕlŠ0M‘Ð_"Å—°FkÐ’lvçÒ½{ÿûjªØºÚä?âïŸJðÏÀÜÞ?|pÅíl+VÀjèj ô…p|™ñ£U¤™‹¢ðMç)jÓ^9ˆUŠÔ¬1¬öí¿»
X[¡—†J†k×@iž×a­Ö~Ä0ÍOO‘ ¶¶€ÕÒdbÂT¥kG§šÁ¡>hjàÇwxXÚ¬¬±Õ·Ôa2ÐšLd<ªi´r5Úg3ÑÐÐS-Kä‰<“s+”Æ›d¬á1#ýVœfÈVÎvœ”0ñg.ZSÌµ[›‹¹˜‹Ëÿr[¼m÷°Fo5T5³ÜÝ¶Ÿ¦Ê}éÁM»Û`-ÇÅE,QJÙÂxbx€4H	k5XM)ÕDk*Š‘U¤ˆ™¡ë4¼)Q’0•[¾¶½}jj1°¶ùƒÍÛ²eøºkDÐÚ3Ï&q±Î×1ùñWÑlj,Òeîi¯]³¼Á«œ!-(_£ŸMžS\-Yƒà«ÞÎ^P­··».Ö¹„XÖ|sî“'ßþ×å€Ö˜û®]jÕ]­Qa.`ºêžŠÏ—’K£‚µT<žÔ“í~QG	t†a%²™ZùB‚ÈEdÏÜQ'²ûS-=±,ÐF?s/ÏÐŒ7ÕkBl±Ë°
äÉqé§qu!;æŽ´ïÙçìEö!™íYÞž™Þ2…/'ÎüôgC=Ã°Ÿ Íp
¡Íàm°æ¬H ´ŽŽ
*›ê¶âå`Måûñ‚ùOOö¾ûåË•ÙÛÎýÛççÎ½þúY¹÷»Ú5ö^\«:ÀÐ¸­™ÑˆÇµ‹?²š`mxX_° jÛ^nZbþ"8`Ù.V£Š­}å_<´vÇ;„hÚ´ã§TcƒÖ¶Ý÷*_mhX4¯7žõÇèƒMðéËç¹ÀÂk4 /`u:5U.Ä‡ºË¸ÉÍ­eý»ÑÏ€´qS:ã…8;”g¡´ÁZJ8í*Ùd£:ØQM}ÌjÏ¦¬±ãdÛÝçiÍ›ÔµËç5€Í§D¨ÈVÅ• Üüx	Èâ™a”òü<®Õo¡•ÁøÃðÌý>8[“Ô¤©…] m`u;Æ€Ö×ÂêšûƒÂ(…(n^vc`	 Î¦~±Zcs« 7ˆ-¼¸Uá…·€ÝlðšÍÙÜêW•fˆö»Ê)K{	jâ´óð´ašVŸ)T£ÁZ iÚXXa5w3érqÍwY¤]†¸Ær…°–qþ"R-Úß;®&öt\«	k¦¬Ýá¤µÅ‹Ÿ&[Áëë¬WuT~ê”«Ñ»
k3ýÀš3í‰Zè\Á©O?ý.ýÙÿ12´eðë`í•×Ï{yc)ýòÙ³ˆâƒä5‹ÕJ(cé4P•Jñ;Þ 5xGö„„&#~Ï«í¯5?t5&©ˆ¿`xX3ÿàÕ7ÂjÊ»àûÌkõDV#™±Y¾X*QùÒ< gH(ì.wbÓ¿—Æj›rdf€jVÈÐ…<'DÜ‹ƒfýòA"ƒËn¶LH™jØVpúf¥Ð'•0É³y¢Ð0X“gpv3yŒ0»VÉˆ×Éò**Ìk~uÁ„ð¨F°ó¬ÇÞk.ü^p&X»Îþ$Åµ+°U¢R²&/È÷ùùð´²ï_Óºè¥¦–ºVlüÌª´¦Qo¨ï‹¬ÿ‚µL¦Î{}j¬ª—èÑ«£L£ýQ X*¦¬²o£¡ Dkxº}k®ÝÚ\ÌÅ\\žmÿÇeÕ7!Î¨NÀ[6Þ¬UúÒÜ"ðÿmS.FNT‘J‚T®í\PñÅjÓ Ú7³ÚSŠcâˆ£”Øà,+öî‹µ4´dšëÖÞº|jrzDž}›%®ÑaOîÖ€5âáÝß‰0s	Ž¦ÁmÖ5MgÝ1hÆÆÀ4™œTXÍ¶ü ž1^i.—É¿¤µÆ­—èÌtKXã·úEÂÚÛÇÞ~îÅ¬ùk¯"8ãÓ!«÷öµGmq°6js\àåM'T:‰ÚÝ»d&0´ñ© ‰FA[ìA„›.<¥:r4Ýá°-»Ÿ¼ÕM»y·kû©»šíë#}p–òÌNb-29=V¦nfØ¸ïg2°1Ù7•é„•e>‚n–§{x2¥¦Øê–=ÂLa5F	¤*Ù,°6«Øioü™±HZëœ:µnºRØxîËßyòõÏßü'5híÈ›ØB¢¯kM²ÍÆ_ØñŒó…|À7]Ñšñ}±iß_Ð?Ò¶½ÒÙ¾œ0YmQÓ<ÜF°Y¼dÙ`í&`í×»ª®dEþjfOßÇxàUzìÎ›Ç»[&bõ=1xŒ•¾þžž*ÒÖ@6hv:OYøôÔt¾xÜ¢£r¬âa-¡,HÁ?×)rmŠv9—çÂ¤yP¬Ö&{aYW›uÃVplñ±ë?ª}fë;Zj©k×‚tHx-LlçmMe¨Í£›m>½°fèq¿ÚâNþ»f"@V( ¯°¦f›SÖÂæýž×ô¸×Ø.Shô‰›³gÐ¢ÍÝê#x~o¢7B9“¶z`s;o6Øè·l3Lw²c9µ“³ì8c¦4/¨…«Ôj¬,[?	µ< mû#¦ýµã’Âk jÚ×¶‚ü¤5'¬i¢X%X»V»ÖjµÅ>þ^I†}M«š°¡í
«“UN«T,	²œGW#½›;\¦ŒÕ~øp`Éÿ´Q†,YÍÁÚÙu‰ÄÆâmO;{æ6±¼qL[ltL+9“})bª[#Zœõ¯ë”&Õ¬Èïq -7Ûå$²‰Ü”¹6µ¹«µø”yå4‚j£<¹¤TÊbêFA^Ni«)k.ñ¥ ñ××#£«)K»kpõ]úsººPÖ61ææ§»öê|WN¯¿gTÀ÷A™üEn&ï‘\A¸Ë¼øé°†‡ÿƒ@
>#Ð3xLg4rµXM›`V#…DãÙÀ6|$eó¡>ËuŠk®Áb!Z›G;ÏiÚ‚Å­AÀƒÈjH{dcª\Ž™$A`ÍzÂ}}ŸZ°¶›‘&\FZÔkÍ)kU>³ÁBÕ2ïWÍZC¦Þbê¸§§ÞH™ÔéuüÔqÅ z(Jt¹¿¬
èáî`ŠŽlµÄÙ¾sÍ±çb.æâ²ÜEþ[¡•~?Åik(kû'ØOÐ*$Ng/ `0ž,ñëÞ”£¢¼åKø9ê£ì5XÍPÍ³-12Kô(Åî<3™ï›EYK§êÖL,ŽÎï¾µxÚžm½U
Ëò—¶zXãj†µGb‡ ¥÷pÙ35æmD&Åi±É|²y~´ªªé¡˜v6‰y|‹,Í0‰ kQÕqÓRÛ`-‘†%KHÄ’À²µ†°ööË/zíµCßóÅn.òB™Îò !$ÑXçªÎõL¦jÔ#VUÂ‹@–u¨¾±Dið¦kA	Ó_òíR	t³AR'U±ÆRµ
e¤´6.ÉU‚OBíM»·gf•“70Tì+ÌÌNL ±ÁQÀúY†¤Ó1®³|Gº3S lc“Sg2|ËÏö%KQŽÕ»Ú6÷ö²1 Q§d9›ÍÍ‚lVPn†Àážýô,]âbÖ-;[ÇÔsçÎ}û¢¥kzó3J×È„üõ;ïÐ$_HÄµOé‘‹ÿ“÷#®íØqëæ‡²Îüy¸Bâ©0Åö	üû3Ûÿ¥m¸<Ù>2"@S.ä¼î%Àqn'ŽßtÇ¯`5éiš£5*w<°ã„”µ;îãnýª¦¦U¨H+™¦yóðŒ«%‡è$b.ÿ™ŠyjŽ*ÓS½eƒµÙYr3åq0M¸gd—Lv´¥J¹¶œ„57JÕ„ÏI†kB²Ž.£5·Z«5#6hÍ@­:@n5Õ5o6âíá0°¹²Ðæ©Í£›V6›ÔZBOõÏòûï¸_[8\êc ©ù	Îa`¯ù ×ìX©í2âqm,6¼kŒÄV…¹ŸidÐÌS[¿ö¢7hKìÆxeÁÜ×13‘@O“š-¬ÔPÕ`5ö³„A½Ö3Ÿ|©±~£!$«-rÉ¾Ø¶^¹¤Ô
õ°†ØÇÃ°’Ö}ÔIkS1{uÓ¼L¾®ñ›„$b:oÖ¸hÞ"Oÿ€H„5ÁšÔ7ó´¡Û™BüÜ±sGÉ…,‰ÎrÖ]J€¡HK–s>Žêž¬q:¨ÚL1eÇy»E‡i¦°Õp±k¡òâ™r9ÿRžy#MÓš=‰`"5¢4T/›ïzi«¨ àÓß(Â@/h^ç.íÂ 4ÈÍ/%6ýf¯<ûsSÍ«÷Þ¹0Ñµé+d2z¬c½„6ä>ÒZÃ8a´ö h»Å˜Œ“Lõ€Ðgp–745ƒ5JßpéÖèzf|vÁç°±#›í‚!`4P«Ñ[- q-x(RÕfÀjë!·Ÿ`Mñ’çµÎž5Ìš¢B2ïÙÏÎ…÷2Mê¤ÞC@³³hOÔ	mÎ
Ò
×œó4Æ<Fd9«‹Öhü’Sr’¼dÛØµy\£ñÝœ%ä\ÌÅ\\Fü×‡ûÊ³ûQÎH‚4HäŠž†ét<Ñ¦ÌqÈÁjD$ZTÞW)ÊÍ£r€jßÌj"µ§>ºšßxø%•¨½âîSOw™Dî>|4æ­é]³umgûÚ=üæÜüÁÈÊÍ°ÚæH€|ˆ­*¬ÑfmƒÁÚÖ¦*X«Ú;æÇŒÃÔ‘’ÈsŽ#x÷G¥¸é qDÇó<JyïþÚéÑæ±8V’ aí”µ£ÀÚ|_!M£?b5ëK»AgUæìÕ$›)‹%b¶_œ+¥ÅúƒQí’v_¹¨zµ‰0³Û¥’Q¾ùôS'Þ¶{pi-Aãì±Îz
;v«à°­->Q‰¦:Ò±t‡JÈÄSÃ(l”Ñ3mM1“çƒ·—'Ë€ÞØ»{F¨cÛ²sXI&3Ê-rßr€Ñ¤šÀ«}½åë\ “ìÓx`zfFè>Å{{J×ˆ
°ƒcñº×©ø8wæìçŸýúOHl¯AiJ×`ãt]ÃòÄM×ƒkÐÚy\Û)Xã¯ï‚i9¶]i‘•ÊÄ‚Jû’Î%‚µöÞN Ùq`ZsÊÚ­ê…ý+¢µ›`5’ )YÛvï}«ZÈw×ÇÊe:žgb=*Xë§â ¿eM•ÓüÛ:'+ºö÷NÆ†)Z“	¤šå«%ˆ¸í"i«GÕŽs9Fpp»ûnr"çccø–ÕµZ›·ñÞ.ò3-A2¤W×~Æ5¯¯y`S„€-°Š</µ¹e›F;¥
š‹d°\'BÞoƒ_¥tx¾vlÁY-¬¡%XÝàždcÍP²c §Ùh»@]»7@µ°ÂæFÏœAçÇÖÆÂÊÂ*ËŽ 8Ô`›ç8¿ˆã×^ƒF·Šäÿ«¶KÆ)·0	¦>ô5Ó¾‘Ó 5Ïj‡Äj ’nýáæj¦¨ùå›uµKú‹ØJÔ°îoik{èS0Ÿ…;¬õ¾g´v|Y-eí¥Gåë ·³©é`]ÓÁd,S'—¾ÆäPÅœøÌB‰ ^Í5ÃþÀ’¢aµØUÊ³ÚéŸ¼ñç7>Â_NS¼vöìÙuñâËçÎœ9÷D)G@EÐÄæD5÷ñÞy‰PñÊö;Þ?h°æjØ”Q«É?Dþ:Í9þ7koOJS±¦›H„uáêI“:"Ý‘Àû‘¿‰º XF$È‹rêµ­2ìGWçòñ°Y*ãìºg5öý¢«}uûíÞ"c\³âškV@dh”yÝ@)›	jµQÄvË¢=È€_?!Z#ŒÛà9T-±šžÌ^ukf,X±]Ká]«=†ÙèÀÌD°«eÿèPTÊ hß²íW
¤ä5ÌEV¬é/ÂŽ×\µâö}²
k­ [kÏ<Û5èÝaU^æÏO¤¶€à¬©ZK#¡tÝzk±á‰¡W®ô[ˆ–ùdQ—’!’4¸ˆç:\Jâ]K»ÜEBelÀÚ¦9“‘¹˜‹¹¸Ûþìð@!k¿5ºöú*ãûÛÃXT$”ðQ$a›yô‰¹Ær¹ëHáN;sÕX¿™Õø€yò‘’Ä¸ds1ž¦Íg´§$Œ•‹C™©‘É±ö‘|{~ê¡ë1ÅßºïyåARûªfqÖ6Ü÷äý÷;emX{æ=üEb1Uœ¬ig0æ}E¤¸iWF#ö°Z¯yC‘Hò¨Fºƒ8­5`5Ÿ‰°f°F:DuÊš`ëÂª5wì{ç¸‘@›kÆC´ð­,ñ<{¶`{•,Ë²0ÅË,•(#X-m>$@ê¦Lá7µq¿<˜ß˜i¨k,9ÈºsÿDõ²1Ú?ÞµÛt5¶	hí_waÈ¹’×9ƒ¶pÔÆ÷q
t[ÞÞ¾üù}ÀZ9Ú’Qé˜hmÏS™ŽÌHQ3ëþS¤?R­¶ï_f*àÔLe ¼|_…?£0‹5SÍ@‰&˜ŽLöeo[?KEØm¯Ÿ=ýÙ¯_!òÈ‘_Ó%ÛÛø¿bìñðs*]£œÃý­[¸&@üúë&v)ª°Æ¿d˜¶éöÈ­·¾W°†=d¯¥Eþ‚8¼òŽ(òúë•éiV#Nl¸wÛ¶{ŸÆ¼¿µ©{^g,VÎÇú]äÇzbdÆ¦+ý‚µÉ%cX~£§eÒ˜ˆã³0cÊ)V+’‰”æÛ®NK¥ë‹]j)‰Éx[Õx×˜‹Ãr¹j*d"‹´Æ,HkhjŒL¶FüÖ´5lrò÷áx­°=°Ä0[˜Ûìÿƒ…g4j-˜3Ö°¾Æì^–pl3l±Ùƒ	‹—îçnÈyncpS¿œš"E‘‘Í¯¡€¾<Æ±·…ðÇ¬„›z·ÇPâ£wÔ|ò£â(+œ¦•¾j°ZÕ¼¼fºÚ•ÒF5v¬k•¬ýMQ—éF¹€ØzMX[ìa­†²F kÇim¿’ÎØ­ÝCÑîÞn¥®k
çwûµ®R0VCWÛ¼]M©úî*eÿ¯>}ÊÝyñ¤å@â y†»L“ˆ+òÑ3i}2Yqj‡Á,"†]‚5jÚ­o®qþm;Xkö‰¦Ð–¿lÄÑHFÕlèhwá©³¥d‰HL'™*ã²™GV¯Î92#‹Ã9Œ”¼*‰ køŠŒòur(kÍ\?PÙºîÁ[daB™x£sÞþÂW¨k>xÃµ™)h˜@^+[ íªkH4_HPËLCCJ3ë~æXo6+iƒŠ¨PãfÞ_ë¯¢ñÀu&°]ã±+ìñîzLD<E<ž1'ÌM„ÍÎ;ùÎhí:x‘àïOÊ&nWQÀö¿ž¬…ŠÖØ°¶­YÔÚÚZþÙöÔfM°½Y$ÁYì£â´L†ÁGŒÛ¢þa¶'êšäEíÑR±Cµ¡h±˜&”$¯fk…´æ¤µ¶Ýä2©Cöœ%ä\ÌÅ\\F?ìÂ°ýþ m¢-Ž¸0SÆ(‚\Heè§‹ÅxT¨$íËbQuŠŠ'fg;$µøm_Ð_-Äj´ýô'Š«K\FDk‰R£ü“péŠq_¼rdŸä°òÔfý*¥\Ì5°MÚšbÍõÞr›>YÅÚÆžgð‚D:ð¬
ÏªF ™¦ŒqÚ+¤ÀÅPÒÌK$Ï#ù¼’!k‡.›¨j=.Zqí„µÀ
R5koÙë?HÛÜWjoãÏ”KºQ]¤ÚZSu¸K¤§Ye:I²õp›y»Ø=¸AŒ*Ðã’d»D¢…”t4Äµx‘‹#—Š¢z±Ñ‡Gé«Ù’’é£³Û‘pÊÓüsË"¶‰][ .ég½=Sz·hœvJ°†Ù£ŽžGCàÐ)»ÇtmáM­×0óŸ–~†$A!˜M‘–9„ ›ÍˆÖz{*œk¤®
1«ô•
ç9s‡‘ß~v`­yóÓÎiD4Ï=‡/ÛÓàÚŽ›?0ÿÉIW¹æXm—Õ¬±e5'È·OÎþ}e2–ÒõR_ØÄdñá/d;? ž}ñ«ÍÀš§5r wÈX»÷½m_<}ßî¦†îg3HjýôghŠõå{{Ç(GT›œ¦_ÃrBúéÙùž´º`4[+Äxƒ¤Ÿ¥ëz€5È-í¼E)3I%"&JsY6ëPJ¤ÀM„Öa¥^Ncóy¢µ³°š-®±m×®UÝF.RØ°a5bC[Ülù [-dóOn0)ë7Ç6…v’Þl/n8î2âç¬Z.0.tÈÂ
ÉÆ9š‡?Qã4ÛÅv†hÞ¦Ÿ8d–"¬,PZ ª…=û«9W‹+M„Ó|*$“¿„3¶ccø›`Â™ÞÞLæÀ}OÒ»·Î¼û¯<~±$²Fêq`­UC9hCT‘Î¦×Õä-2ÂUêœaMWûåÃ¾`íÏ?ùóS„äk¡­	Öè²vôõ3ëé•N‘VRJ1Æ‡Ô‘ºzÎl \¶D‰P¯l‚«Ñ<ZJ¦]¦dõ†\ŠHÉUÃ:}–¦¬1È‰D°¹ñj\$©óNð:ýèÔ¹p5¬†ÖÆ…C2ZÂUÏ¹*8½‹K 1?'óGõÂ–“ójùŽlJü_öÎÿ7îúÎó'Ýo·ûØ–¿È²eùtÇN-:^ð¬3uBf<öN4Žñ`ÅÀŠ:SZÖI)M`H=-mšÒTÍÌnZ„ˆ‡ÖNDåŠd“Ñ;¸àmN¬6(:[¸J{Ò=ž¯÷¼÷“O3IÉvOº•üú|>ïÏûó™‡zÜùÌãó|½ž¯d-±qÖnýO·oø¦„d2yqX?lçÊ ®Ah’ÜÌ`ÄB gµl¢5ii«×ËúñVFùˆHiÿqõZU°á©¨Ì£ùQÔàÌ©Y€‚
As×¹e#HP;KØR=¾WßþÛ—ÖÂyÁÐ…s»ùy~l1¤ËÆåH‘ˆÒõz X“tKèaXMÂuÔßKÇTºÖžØ6œ ›žV [JÖÒ(l£ú²Õ;$QTUt5ÖKÈ•X‰•øƒÂZœ¯ÓCJžF©ÉŒ§Š…Jº÷¶*¬ÅM¯§Òyl2: T!®E£4ZO)¿ÏjÀšg5Õª-½øâÒ™ý	8ƒÞ#Ü”¬ëPÑË•¸½1Všî©ËM
e^z÷—@450&ÿiíñÇeM°ö3`í	'­Ý9øóŸOÁ”|'5FB3Â;pguF¾"QµeíÔõ3 ­UNó-]-uõpZ¿êÕ 5Çjk®bíˆÅÒÒ‘Ðšç<CZ{Â'WØ?˜h3Gæêõ!—äJìÈÎÌC’ÖÃ¥1OðxR­‘Yˆ« 	8½$>æ(9ÖZæD£Fê¢´aƒâøçãþ/«ha†Þ³ƒ¤‰óå¢RI§åùôÓ¸ë—ö‰µÐÖÒŒÕöíÃNd0‚DEâ£ÝŒ®ìY7½N.ÅŠd5Î’çˆÂ¦åŸ¤@³hÿ`é[•ïTFÇê†uªX„ÓTÞÅP,¨wöH¹È™Ë'ãâw¿ûÍïð…|ãCJ×ŒÖ”
ÉŸÌ¯-dÕòÐš[ö¹¦käBúÊ5BÌVìØöÔTÏtç”âÔ	=ƒÀ5.#äCîÚqîÜŽOÞëùÄåAÞíií^45eA>ô°öÕÃ]kºZš7¿µ™ÂØdv6Ò<F¢ÍNÊÂ?]žîŒPÖ†Õ#‘‘¦‰…40t¦Ð_7& M4E²©¸jÆÁ´ô¶!Ÿe2b¶ŒêÕÌ’‡¡24Žª)0<â*Ölç“!¿±(8sòšp-0ù}`lFladc/j›-nâÖÏÁ´é'øÅÖð‰Ð)‚ÑGp6zú¬<f£ÀÌFwl‡á=PŒì‚E«ßÙ,°$ù<çS8bcçç?|sã48Í-6höáø›`ÏŒìX®mtJ|d#<§9Y-PÕj)kl—?¸§i©á$Èp|àyÍB ö/.==\,Žrwìðá³‡ßzHúÈÙZ°†¤uZ£yv‹5ºŠ6ñU9Š‡úcr,ªñybkÆjÎ\äÛb5`M´öýï¿ø«‹GÌ\D¤¶¼¼xêÂ"°6÷h<C¢¡yõŽÇøpNæÜwzÁš¡G9J±I^W gÆg†gIìHšÌÁß.-úðNyKá™Pm‹ÜüZRÜô¼dR	‹[ä™kg0Xãr,*ÕxV&c:9œjSé³uYËÈc’PÉ‚=G…rÝøoÊ‘@¹Éž±å‡ßÖäÆÏ­keVº¦¦×œƒp€7çÎ¡j6Ñ›²%Í³ÃÃàÆ”‘ÜgPtæBÇÀšBš¿ ÎÂåi®É{³š›®^-X3-éL&> Ckä-Kk·ö·ó?SxXó´Æ¢ 7vS¬¹gFî/÷êº5×ñóÖÈ¸‰I9«wE‘8–f‹#UV‹0W$°ËŽLL l9´5qöPœûâ\ LYS2$¸&V[1Y‰•X‰Ï!¬É2@±7eF·áú‘ž‘|»àøÁÝÝv†F§°6ŠÒ÷Ñ‚ûˆ“¨+j«Ýk¬æ+t¼HsÑ;OóI79†õ<-<ë"ƒÀZ]½p'ó¥HÝªx±Œ£ÈÆ»%¬Q±†°©¡®ì² ‘¤¬)æ_þùñCo½<íD5ÞjÄóšç½S¤JÉäéŽgc×‡µºÖöæÎ®æö¦0­n#jU¬	×)Z3XsvüFiNX³1üõFð%
’Ö¾&ëÚ¹ÌªˆÏu×!“…¯"-ÊÐ±qÉ5)ÉŽj…Þ\{‚*4’{·oW//jÝTP.¸KÃ<€ÈÑ‰ÖÖ:²ê[£•…™mÅáá¼ø”~jr©ÈfÚI—Dj:I¾£ÑÚ˜Œ®ƒDOûÞÓßá½-ÉaDOÔÍf%jb6Av{²•Ùi[1ï©U%§qÆú’ñõLœ*žY¾ü•™ÿ†ÇÈ‡ šB¾~ü±åB¾kè!Ú¸æš®=þÊVïâoLxµÏÈ‚|S
[­³³ƒ=Ó=‘AÞ*Þµ5Ç×lÇsd@Ê`„sUÕÚ.ûCÒ;øä×wuvõ7´Œ><€g~° +›å±1ú®‹³==ø‹”zfy+FS‰èx¦äÇQž7›§›éþôÌ8§zµ!¹@9HN°Z\úhÈQÔ[M°½¤Öû´8Vc¼ð®‰knð!Z»>¯= [Ubˆè/µþë†~líx"Ã^ãg¬nf+[02°3Qš[XÃZšMBØö„m¬O¸‘ÐèÂyóëoj/?zVÓÆÌ—ãýÁxÝ/Î;ój»M›Âjœ$g’íuÈMãŸ¦)Äh~ Ô¬NûÇO?Ôpê¯Ej^Y#N¬vSÎý,¬Ò×ÂÑæµ¦?"êÕå‘£›Ïþâ?=¬w‡‹Ö˜¢½ÖŽÖÙ­«‰(Nº·8â?´LWs¬ÆeJ¬ö°v	oÂ| Ù½»4o®ý'æÏœº³îÔòÞûùèÊ|%•ÓgõD4*_(­ ™µOF7À¤«%uÖx’CÍ†ø€Wõ“Ù0ðØÄD#Sžâ`Mõo›(%ÛÂõVÚ0t¤3š~²4¼œuÒæXýM9©*5ÙRòÛÍ	Ö¨Y»ë.üùeÓŸQòcÒX£~K”mð¦¶ödÿŠ¸ðï”°‰ÝºV4æLùÁ7
ÙðÁ—_6‘†:˜6Zd;zãÉ.°‘³™í°&ZCXã‰Õ¨šéÛ”‡B¸ä>jôjª5¯ª¹=Õð™4ZÓÄgrï÷°fNÀ¥š½©lí·óÏ{X¤5…O‡ìlîB^knh®÷5kŠ«Ó!U<®·Ú=Š¢&“×um¸’‹-LUam$6@tlkŠ)	q—‰iœHaÌF®‰\œ·ÉgÛHaûŸþ»•X‰•X‰V¬ñšOP-ƒ„sptjŠrœí·Ak8[Œ¢ßÅIý¢ûTz|2J¤µöVÐëo‘ `MžýžÕ€5ÌEt›˜àÞ ·úÚ‡¹ž5Dh6/Ìö×EÓS¥Ç7–î¬íü°&ÿ~Âò!X$Ak?:D-ÕliO)kÀÆDIa;9C¶FÝ‰<ÕbÙh€3Xk½~¹ZSkc}KWgCs¡H¢ÊjW[AÎëº¾8wjiq¯AáÍ{Ùa«Vûr£ëµÚªÙÉ\SýÑvÔ°‰h“Ë’d£5ª3^¥ÞjC9U¢áÍ¿ª±N/Íq°|Õ–cÿ(XKYßTƒµñõ\àmËQÄ6€©ó°¶0•ÈF X¨¬‚–†üeà³m¼ü­Šå4~K‰‘¢¢=ªW+g£±Á‰­àÙÓOG@žïÖñrBç­‰¶‡5Å!ú­Uì*±PäG³#$FñV<f~ïÌÔù½^Æ\ÄhíÃcÌ~÷ñ'ß8yŒykø¦k¬ï©rX«ZéÅ5…)l®nm¡£cdMO![Š®YÓÜ¢žØ[»Žj„ðN»WáXp°®?þÖáÍÃbÙ¼®¦ùÈ°
×&éŽ=V |'Ó•|$_¬¥FÇúe×‰‘ÉÙra*ÏF"³‘ai¯ƒÒrI˜MšZFcQô±ï…Õèµæbôm!Áh>þ6¹±]þG¯¬¹lÈ Âf#µ-pŠcÛÿ‹åÚ­5–ZžJø“ŒZåtcØXCÈ@Z•ÒìñëÄ›¶°jO0Øú9âGZqÚ<¨±ú™æZ´j¸~øu¾£Ýæ3·¡ÙêÔ47zR“¦¶D¡ †¤&Rc…O€”µÈ^‰;7Ÿhk°ÕN…dYAÞtÔ9£½HdX9Ý¿xälóáëtÅ®­m6im³^Ú0K4¬aTV»ËFÆjÏ©ÁÚó4eíûß¾ôì»ïÒÛr —O,í­‹œY>sß©¥_>J°¦Bmn·¡mÙ-6‚2«BŽñÛ²¤wgãOçl‰iv7M‰%šÑ«±#±*6V^›ÂT¿#Âõç„ÆÞ”Á<ÊI‘òV‘™Ù¢<	iÚPñSºRÈÓ–/ùË¼fHÎöíCüÃLˆ¤ÞEÝ4Â$Ó§Û±˜üMÕÄ^·ßŽŠvY;šÉãƒŸ}ö’43\ýÄÖÁ­jc”Oc Åš ™ð
intž&ý&[¯£ ×¾hÒš¦·†T³0¶i.T¦W/ZÕ¯ÍQš«VS j`¡ý{ jæÚ/Z\+lûïó/<ÿ<ßXóUkµ{ ‹Z{ «îêbL†ÙJT±­5|™ì¬qIÚ6[èá=ãíOLR¬Q=´MªnumTi©ÐšîäÉòÏU€òöŠ%äJ¬ÄJÜ€ÕþdÓÐ(¦ýj˜Ùk}}Gã$ÜQö*kH×2j|r|†ÂØbš¶ü|òcaˆÓÅHÙ‹”=«…ÌE<«U­uÉGÊ¥HþW¹Vl ÝÝ3mÈäûñ&ÌVøn|ÇÎé­»_³Õ‰!Ä{Ù®†5gì!TÂ	2›…Ù¨5k½¯½ÔæíúqD‰é¤¸mU£él¥X"›G"¼Ž¬föÉ´Äî|à.…HÍ™‹„…5b^×õ¥¹ÓwÎ¾Ê[Äš?µÙ‘óqÖ©U[ræü¥\nªbüèŒ"y¾Ç»&d3`ê4õÄîµF=|¯âd7H½½/É¯³›+/jN+‘ä§$‡± µ>.ñà[{ld¼—NÛvg¢rÍ,Ó?­äP­‚…ã)‘¤5r°O¦#Óø³‰Ñ²‰á<W.ÛS9Sæý1X+ïÛçT5½Ð„4‘Úy;œ×QEæöEU‰ðNyY$/sh¦RÚ{`Ú„¼o,¿óÚ•µw—O~ø»_;ùñ‡oxqÍµÈþõÕTÈÇ©\­•G*WÑšu]c{ºH[GÇ÷:f³ÅRO&#·ô¼÷	°Öµõ9Gk;vøkÂµÇÿÖôÇtö0)S¨iÙrAùRy-¶fkébv0Ò³&;‘.BocSÐi¿¤sª?99¥,þš4'Fø.92>:šTÉšp%E±ÚP²›@i«uýŽ¨‚·‘8
›:c[TÛ­±¨`ÍöœýûeÍkŒ—?âšW×þG˜×ÂI‘žÙX®¿dyæÛÀ?®æN2«¹ðdÆ-W?®ðF·>Ãa˜Ôf£&Æ•¬.üÞÔ8Ïk„@ÍÖ€Ó<¤iøúµ„¦á-Oðãž``ÊjÄÆžÁ?oÌkaï¶×u4?ÿ£Í¿®åMQûGÐ<Ÿ«–`¬Aâ£”¢±JV³¥–¬Ìa5³(¼^|w‘P| ÍQCÂ—®±þKaÍ÷Ð1ê5ªÖj7ZcêhGP×ŽÊí¿¡¥j«@Ë³%®2l«í¢Û¢ýÀjÖ~õìO\ºøê»É‚T;¶¸÷Ì™s‹¾ùÍÅå½ÀšŒ>”ô ãì–h”$Ê˜y8Ç(ïÖ/Ñ,QWµýej›~‚kä’Ó‹‘ht–SjÉ6¤fÖ[œ¤m’ÖÌSDØˆƒÑ]8Ž°šú´’ÿ¨ŠÙFÝRQ· ¹¢ ¤%I¾î•ž–é#2f92²ÍÕÿþ?¿m“šiÖÖÊãšypLv1ÃBä³÷·¡ªÉ³_]¥±ÁG;ÅÏ‘@i”Æ+Ô?Ë<=Pk'lrÒšÎ ¬]7j×©±†»«)¼¥PÆha€FàÏ¿þVŒJÖÜ@æêÛ™ýïy¾/¼Ì»&¬U!­Ý×{ï1Îƒ´HË†tá{ ²*ß±nda¡C¥Ÿû“Žt^¢•«ÊptR´–-p%™À¡fˆd®Yô:Xc¦¬È“‘•X‰•¸~üû·ÕL¹»‹þMxÅA\âiØÅF ÓdR““ñQU M&RÎ*Þ›l¬9/w­{j¬‰ÕT±ö«¥FKÕƒÕÒê'Óˆ–T7LE¢ÊÎ–K•bÏÆ;~¼ñ÷îÉ®“¢v¯M«°j´ö³·†ÉrÉ—ÑÈ²Ã¢3—ÿèÃå=òQ)`cî’ Wµ’È¹F]@£‰U7€5”5•©u™¨æuµPÅš·9qäÔ§çæ>°{âbçáÍ‰Û„ª¹6il\²yBÓ„î–4c¿¥¿¨‰T†Kn†òpeàAd*JoÍq¥î6o¯nð¬o;én5íqZãc#X¿ÐxMâµñQ¥-}k`²ú—¢¬i&X›¦ÝséÐtizØ­dÇ·XÙ°)TÊJ™ÜçN¸Ò5B°&+#¶ÍdPÏ8³ šá	–»¥Ç™àž8™ÏÊ˜HNMýý•×®\xX;vêò±ßüîc'óñÇoÈîPÔqÑ¹ø;ZÛå[dÏf+T®-²‘Ô”™}Ú9Ž@NÙÁ5]kð„ÜŠ¦v|]K;b×,F`5Ã5”µ]»è–MÉÁW¿³kZ:;80Û?Eâ-L¦)×¤R<V ÖgÓã4Æ.ªi1=žžZX 2¬×VL1Lé>06ªBµT;ŒÆ×'õ,WK$®áØÉ.±šÞ©>Þ:Äµjä¨‰h6‹;WH‚S3LU¸F*¤µ Õ\Óæ5ï9â‰õÚø¶‡7F5‚Ó5ÿHhÓê÷á3l~`=çf‚×½N æC…l¶Úba¸VKT3>ÃpÔÅ%Öß_XµAo—Þ|S³¥KÌžYzf‰ÝRe1˜Ù,óK@ûOß\dàðõ¥×™Ì/¾î–y «öâVmµ£Ú¼Ú’ôªi·(T[2«~­×d@ÊÚå;U4{­–Ìk­µ‡ûC¤æf|·ý@©¬kýÃuxŒDú[ŒÔn ¬©fí¬Ù÷mj7Ý£¬Ÿf	¬ûfg¹#µæWvÊ´ßAr¡rõjO<éâ‰‹øö¿ú¢3Qoµ½KË§N]¸üMý^NïçÐ*š³	!7ÐjS¢}¼'Ìè×X-'9Í¹;"È)ƒN“êÕ -ieik,¼«’Hf÷ãÈï@M¹‘²žD€É‰¶È H%·@l´Øo3HžAfæŒ¦2‰´ÚÏP±—lÝÂ"©ˆ"].…Ÿ3¤hž%«ÈÔx.“(¦’4Â¼BÖ¯Ç7iíÁõ¾ûþƒëI"¼}=mÊ( ƒÑÙDob5‘ &hƒ‹îÙ`ýÍÖ{XS€PjÆDãj`~¬­¤iuÛ5¤ÆÀ&XÓ ‚šášþ!Âþýõ£R:™¬þ"°«þ…¾3#á<H(^®oÆ²)0î×ê>÷ÝDsM1‰«kKéö6¼¤U¥mÊÚˆk\_&`µq®'$b@i>MTsó“‘•X‰•¸®°ö§ñLßÁƒ£Xv÷Ak‚µ¸@MâÄ† LLJX@1™ÈQ>ÅÕjK”C9µÖ¸
Îï?³ô…j6ÍÄDzbKXK'Ú‡ñ€ŒDÍP£ôJaã»6žÛ±kë!éiÔjÁÚO.‘[ ¬åU•x@úÑ`-&×GÍÑÙØbxöÏF[óy•tÇÌ½¿6­©)ZCgg3[‹×Õ‚$ÈÀ
X›_:qd®ñÎ3§ª°f—cFvFgìØtàé¬©Çu©žHð¿·ç:òÞ]ý²uï¡ö9MI,º‹ª)ÐŒàrO[òd²[)îr†—‡…(!·ëzBFyÅËØLË°Srë¢#]°•¢(ç ŠAØ†üõt«ÈJX›î)M‹ÖÊ¥?­¢4³Yt¶ÙYÞé={düYÞä>¢8¯afjzßùb¼w¦X¹fSöˆÖ*LXÓ±úæÂŒÌüé¸Æ ¹½‹®½zêv#ïœ|{HhícÃµÐ-²ŸB¶‰ÖÞƒÖ¦óÙo´&X­uLÉÓŸÄ“ïËƒ--]j³¶•ÈÇŽ¯éÜjIçv1ÓôwÄ‡‘‡ˆç>yî¹¯óåïpÃÑáÃoÈ7÷së“l–ôÈpCÃp!=2Ð2XI	@h£­.
ˆÑ{²i ŸF…ŽOØ5{rf\ã¯:Um†M¼L7¨«q†Á‡r 55Yó¡ÄI\ü	ï1Â`ävùŠ'5F-ÙÔ'ÛÓY‘¶ ¤„‚äÈ{Á§Ç5ÌæR+	Ék>Ïà3í½¨Æx¦½ Áà·ëÅÛ›ìXÜ`ì¶Ä
¹-Ùlvìg@p¶¸©12×Ø42Ð¢š˜geA…ûT«_^·- 4·ùÕÇ¢[ÔDiB4PÍ1š_X¯%5<:WwôèÑÓ×¨iŸ+’§©7¶Ç´ šü’`³ÉME ` ©E´QC{ö­?û©ášˆ¬F£5X;Ü¹q3¬V´~ .V±[K•‘£Õ«qÂ´çÎk°ZpKÑ¹ö_|ñÈ¹@º^Ø‹s{/,[Þ»qyîÑoÜ—#­!¬ÉìƒY*n|¦¤õ¶ª?·ÇöÙ.¾ªÞ²1èâ³Y<æ3-T€fIfŠœ+ClÁo_OÒ«îÍ† -o•Ii}Ô˜jÓ¿¹ÏYèŒ{sm™û[Ûx„ØDÞ=]Œ“ÂH€/%C‹¡\ÛýßÿpŸÚ>Š ^"òY7l€Ál/ñv£½õú«!1¹Bry<3HmÎbÄò$5Bs·ûŒIBÒ—¼?˜Ù0X˜Ðj^½øðSý\'ª	Öœm?ò2ž%v®EÔ´vë†ÏN½0ÿëÌêa­–´F6d'Õ‘b5§ŠájÍÌ¢ÞÆúz´ßXA—%ÇjŽÖ:
Mú3Àa$Å†+°IkI`-­ nÍBoLßî¾nGk+&#+±+qøÿs¢îƒ3Ûk}Žâ‰Õ 8ÝóI&RTÛÈ)”Ãc*|ÃÕòJ‰åFk/K‰ÆýVš›Kªkè„F`‘T"›5oÉFlç#¥raöÜÎ®ÒôVY«ÓJ3NÓþn"k?;\Ú3Ç³Ÿ¦a>RáÓ 5ºÈ6&²Ó[-ËZ>Ö¶*¡$ÊëIkU}ç--äB:X«%¬™áÄâ­§çö]Ö¼¶æÓY8fbðfµv1pÅrYiJè`g%«‘Òž"YTfÑÜ%HjLe¤ÍpG–#Rë¶+ÅzË La=BÞ*…jî§ÃÑöÒµOIŒ3…è¤`£(ŠV‘Ó[aZ:JƒlrYµYíJ‘Ò´ÎWò¢qåC¢«E 6|HÌXdvPÍ²Ï³$)e­²‡’5R*¦µI½³ÖnÌ92Ê–†H™™â—¯-Î}sÿ©c¾óÚò«'iýÚI¹ùŸ<éhÍz®¡XBkôA{L¹?Ø
­Íˆ†kŽ×LZ{êà¶ŽJ¥ã©m•Ù––ÁZOÏ9,wkŸìø¯(k;`5"ÖÖ>ÖÔeíðQ€ÿ@>™E"y`Þv±ìp>ŽkRA‹Ä˜ÚHZÎ0¦Gð}Áp$‘§3žÍÐZJï§™<2@l„á›åÿXèœš}ecHòðïåxÔk6Vçþò]Ÿ6‡$Äj6š¼fKÙ´\'N ÇÞÖÐ´vük1Ÿÿ×üÎŸde«)†5¶ÿÂèa½ðÌÍ§BjÎB5Â«g¶|®X
M¸ùåsÅ§ÚXYý¬Æ±móÐKhçŸ˜ˆØªIN3NS|ÄZ+®„†|*Ÿ>zº±õÆq]Pc×ªi†¤æ'ò°g½yX«Ã½ÁÍê5zý@¤çì#v–pÒZ­FkÎòh³U¬õST
¬)*d5„5çyÈ5XsFžÕðì§ô"¤f°ö®Úa/Íµ·ï¿L1rãþ½pWNZ=gØ*§C÷¡jIçü¡±$A}éÐ\†WêŸza¯ÑL§x~2žfwNYþð‘·¤KÇÚÚLœc#$à‹ÑVÙÕ€Y&ŽeÿÖDÊnð*\îËØåM	I®º·}ùá‡îEñë†¸ä%y¡½Dp,±Œýúµ÷¼ô ç”ç
Q¬ÓI„“²&Òc%0ô_ïjÙäè¡ÄõŒk]Þ£h
mN[­!^9c%ÂSMÂvý~äBò³µq11ÏÉõ·~q­0íV)€¤@®GÒ{ÿ¯_~aþåçX»FZóòšÌûš«vW˜€9UÍb˜ÒuH”¦1¨Ñc¥b°¦ ÕX;:bz=iÆjm¹Élvd²0™RqC|L°f—ˆªÓˆw£Ú½R¶¶+±×ÖÆÇÆg°"Ÿ‰Ì6	ÖÒ!®ÉÑ€‹B{¥ãmÊä8ÕØ~¿`-”I,í‡K]sZ•±§Ðå/£Lh ?|Ë-=ÓÓÓ·Ü±ãî­˜nåû4#ï¦íüñÝÆlaX#§á‘·*EcÓ‡öX½Z>ëPM§IÕ2‹šÆ<±*†ûc4£·N–ÌòÙX¢->uQTE?ìææ–Î®N¬FÀj¾bÍÃÚüÜ™#GNv(j´¦Õ›b\leÖ¨9À&Nó7íZñöÂû1iuâHkIæÉ-(4ä¯$ùÝé2O)T*©ÜFú´èûƒˆ¡=5´}w7]âª6ß$AkO=KµRÝ»ŸJÇhÍ™FÚJÅÕ*Œ-=‘×~±RˆFQË µRdz_…œÈA~Vß1›‘Yü#Ë¥|CT«0òKÖ$¼Y±šu0*JP›ñ ›“Ö4-ŠË‘^» ƒW®¼záÔ™å“ï¼CWìw><¶|R>þïˆÖÈ…<&È8­Q¹Fçª‰ÿ{øŸÐÎÖ:d{qyMþ"å…§:ŠÅŽ)4N¯›Žô?~ü1kÀYÒØ¹>kFkÏküè³›7GÈ<|` ÉÈÈdzl"19UˆæGbý³m!-mmlß‘ññ1€ÍšLæ†º'ê¹Z7Dòc£q™Šr¤4B^ƒ5ç,_s Âtj8@syuœè~ÛÛBú`vùÊ°æ&!³[`c%ÂÔæ–cÏþÛ
s5Z˜²Ðaršå>ú%LjNV«RÖ² Ôz‘í†Ä&H€í#HíÊÒÅ¥+Ï|ôsÅGÚüŒ¶fLüÈfÀÆ¸h{·.j¼vÇ~×¼|laÊÏ~‰‰«R3-M¸Æ*Tsãõ˜ÇO¡í·~Ðî‰ìz¤v]uÍ`Í©j¬µ´µ&¦7/¬‰ÐÜL²Ö?8ýÈÙ_¨ÕñQ[Y×äyïþaqÄ²V;R0Q¤k°Fú¬Æ_Ów•ª)ýñˆù@ŠÕNœ™kÚŸK~sîòå9ØKîùê°B¸öjàÚªVîÞ›¡ÓÏ·@üÊ%IÒà¹sæb[ü«˜æPÄø:/­ŒŸa¤†Ê†ˆÙ›{0wHÍžDô»LuæVexŒ˜ø§&H”Me®
k}xƒÁgFk½ÝÜŒÝþW?¼mûî°¶)ƒgU¢OtöþgŸ½ÿ’ša3¢§¡”ÑFú%`MÙŒ¨m8 AR®0X4ó~ðÍ=€Ø¦€Ñ "r%mÎ³×ŠÕœ3$teŠÚj°Mee5	-8PÚ5ª£'4?[­Æj"6º¹©ÁÿÞ†7ð_IÕ¾"®ãÛí«ük®ÓÏÏ;VÃšÇ5M^ih~€[³-¯¼RúÌE<¬±£jƒFkÖ{¸¿Ÿ?N¦Y®sŽÖžrâ6#S‰\am …Öv#Ñ	'~kcC]œ¯›
t@ÖêJÙÚJ¬ÄJÔÖÞÎÄGPåùí~jw—±î—ÒFËeÌ¥ènl7ÔEtsqÀ±“£"Œ"\°fÂšo]C\œ«^t®¡ æhmUkt¤ IlÍšééu[wžÛu÷ñ}¥ò¾{üñkÖÜmÕj÷*v°)9mmë¡=ÑiùÍ—f§§ÓÜÃîQséiŠYÍ[ó¥èª¶¿$˜Ä²mm¸zAS¡à1†öFR"ê››Q×]Ö$¬…`íÌsógîôdÀ™ƒ5NGPY=Jšû“˜HXR¼žk¦ÀReÔù´½~rTù¸p’Ùˆ$§µÑKGù1üâ'z{‰na˜]R}’›2v6&†vÇÛ[¥àdèµ 6ØþW¼‡’ÙâcÐDzÛîƒ•WéB¥˜ô”!žÔx$z•zJe<DzJ…²äR çT´ueL$+S$Í;Rÿû”àX„Ó >‚‡EeÖÎsòüù*­Ùs¾P_Ÿ^pz[%ÿè…+ËËTƒ`ùÚ«lËÇdI‡l`ZÃiä"··/}ûÿ|û×•k†kØB:Ë¿ü§*¯	×:°ïÇÂëTyzÍšã[×¼õäñ®u;äÜ¿‹»ð°öØ®ÇÎkO>yüëlîÜ|ø@×ÙÃýõ·ª¸ M“µþ¥ÁH6éÆ¦¦hÚÄ5zdPcåw1Á/N)¸M‘H§Þ‡a´–Ì‘	™ñ¸–Qç› ­Áj÷v[?ìQÊ×ì´p“	¤¬Ef´'ªÐ¦–k×aÍgC²¾&6lµ™Íƒëï/Áž»ñfOòûðÊ9ÛÜ^ÝæwŸ;BÀæmIÐÖ×¬tÍÜü[HSÕ´„aÍ¡š#5í×ùj®ÍÁÄfW.icuK0|äF;xæŠélnÏh¢=ó+ÁÌ Íì˜ÚâXmÎ‚Í'4ºfshL´gƒÙ¢}ªCùˆhdòÔ®OilŠË§?0áßÓÆÍ+kDk^[SÁšk}³nV­¹	6TØAöôôLW+Ö<¬)j)k”¬m>ûÐáºØ@>«>þ¸Û–÷ý3«Yƒ5ÌE«‘mýÂ‰ªÖ³/<ªæ`8F/–Ó§¾‘Ìí%rN”Æå«Z\ó—äa°¥†”Ìn$lþ Îê_ºYŸè–5©gË×_²/²]
ô¶¤2ÉÄD»K4µ>œm9irI®Í	ÝöL5%¶ ÚeÈ Ä§J²îÛ‰\‘lh&sJ—u£¨o;‰rˆÜt[ßPŠ’èekòÞ‡¾ÄhæÔoŠÙÈçAáœùW”ŸÉòvN›ÁˆÙõ#µéi’fßÏ ò!!6ÑŒ·–—4d7˜iuKuÕ`Rš‹Õê³m¢šÁÚíÂCóë¿‡°DHepâžòàø24ˆ²’Ö´§%v=M×º0ii[èh³+´M'd”ÐÕ F»5'¬×e]¾‡Ik>¶>ÙáX"Á—&õ[Ö”…O¤ãä_€j·u;‘l[)[[‰•X‰šÂßíe~·p Ø½}÷îÛú.¤ÓS3Û0DK‹§&Óñƒ½ê¬iµÊ]Ø#Y`ÍÇžëºö§,;DígÔ›ûŽããCtoÂ2_)Nkù}û¦€™Ä¹uÓ¥;6®ÛÉê—ßýcïà¿+k??´L¬Éc:Ö€µ¬&ò±½fùFW£vWk>°ÍÎ¶ÞÕV#\!A;—Í†®†y‹tú‚5³	Ãš*ÖæöaÎeµYéáò[XƒÆmªyo7R¬E›Ú«„×T_Ç\Ïgl¤þÉ«Éµ?ó\ždé[(*Ÿ€˜ÑÒ’2Ìq·œIeÃä@œõÚMÒp°ôÌlÚý5Ý]Ü2Éñ8h·ûkOAã3iX¹¬\yú`÷(U²ìÆÂl²Êóú¿Õ2‚æiün‘ÙF ¯ñTñ<¦#z³±êWyšÉhŠæÎPÄ|"Ï› fåjÚ&›êûËNo+ötæ÷þòØRËÅ3Ë¯[~õØkÊ¤ãÚo>De­½«,¤‹ÎR´&\3Ÿ‘ª‰¿áÚÓAíš(M¦Úu`’²ãxóÆç>yo«¹÷¬(k_}ìI¥TméôwmÜÜÒÜPÏmÒèžýcÜ¼(à-™M¥Ñ‹ÀÚ˜Jg¢‘Hl<N&ä(¸–¯¦Ò#c¼b025:ÄÝquÅæ]Ó¨Ko†¨ºQ¿&-©cµ\C§†ÖLuã|[B›‹ûl5Ló;l!­çš_<°v#áˆöžÖ´hÿ9ãÙ›xÎÍ=áØOpèWâ»6ƒ3(b»ä´5GkÕ¶k„7aRÕ<¨1|ŸEdö}ã2v¡ÐCWØkcjÜ˜]³°._º´¼ÌxeI–PÛGàÛ²ƒ2ã¶`	HcíEgûÅêh(Îã›
÷<Ûy5M˜vcRóOy´íôQéôAÜ¬ßdÙŒØÂºš6[7›É6 AÑ4Ð¯ý¥Èð[gQÖˆ‡jÚA*tZ¼ÖÒ²¹¡1ËÃi\¥`Í]¤$¬ñIpî¡G¾þÄ¯å<
›]|ñEÜD^¼ÄÍ7ÄjKšæOåN_8¶<w_ÒZ^;N“BÖüj\[¹DwõQžÎ²•ââ¤r!2^¿Šî"„¥2æÿÙÿx~ÏNñ[³Ÿäž dÇ¶ŸTÆÊðkkäl¦k»k•úræ¤´qŠ¶×æ@ÕÛ»›!‡~JYÊÚvõMåþ]’+
°F¹ÚKïcÓoÍ±ÖÌ‚œ¶ö¥Ï¾+…MY‘œÙ y©xí±ØzžÜ1˜˜¦nfä*3’nkÄ†{X 6 ×Yö£üöÙAVä,êÐp,d(òŸAMC¸\Íí½®FZ¦TCÒÌÍohÂGkÒ-Tà=Zwú´6/TS°v•¶ö¥WZZ:›µ–†þÎW®ù¿ÊÇ_Ø‹º_­.Ow˜.¦•0­‘I<õ“h:¦ˆN&T°Ÿ˜Èå\_óT:ÍåÝÁÚmµ¥Çë Z[)[[‰•X‰ZÂŸíãS…,ßoûáá5¾¾SžcíŒ§f¦¦F
“c( [Zsªž2—*»Neƒ$H.ƒÓ«]•ù¬%AV›J&”µÏ)Žç&F&st[ƒÖfR#…ò:ƒµ÷ö•{î¸ûœÕÜ*i5`8nÌ A²š•©¹/¿²±*­åJ¢´X‹Šš@¸|bc^;ZÕ
­½áQZWW˜ÕÂYÐy§?¨²ZâYSÓ¸¬°&‡IkÄ#XãËˆž£»©Gë¢¹-¹õãn”®‹ŠãÆj|y™hÏ™5ôÇ{‘p¸cBJ“W÷îÞT²Ëgª Å
4ÌÞÄ;ªnyS‰Ôè×¾*¨¯K4A‹ >”Óm·$§
¤@V¶¡Åï_¨ìë)¡”ášVÄn„æb…©)ÁÚ¾Ò¾i{s÷!¦•M'+[§fÅóðX5ëqÁ,Kl*K‚Ç8Ç`»Âp}ÿtÅjÜJƒÍ·”½p¦k°RYZ¾üË×Nþ£ƒ5úcÓuM¸æ{®=ãÄµÇÎí2ÿà?«\*×ˆm…jn¬JëvkÙ§íÚzeMáaZ
¾­}õÉGˆŸnn–1ÉáN`­¾¾ëþ‘ô˜<úé±f¶ h#rjÄÈÈäX62HÁjÀZ±4[7Á­Œ$ÅœT#Œö¦Rª:0Jc•œ&XÓÐ—låv·ÜØÄqæÐ©ÜTäµ^¦P7ØæM£››õ\sH€ZØ"òmZå¨i˜¦áµ¶±êÔÿ×qìª½AÛ5¼&Vs¸FTIÍvÕl¢•³!V#,éQ€ÆB0Öˆ+~óË%m,Ìn³a™åÊ²fK"5ŽÝJs{V¿/ÿËoZ<ª}ô©Íl ±Ó1DæŸG8B	j¬7Ë€$õîtÈò¦û¬µk»*2½dÀjìoÖLTÓÄÚ˜°éßüS`-ìÝ ZÖêêÀZ™{LòëW¤•«[wî|üÞç1Xã"%6»xQY|š¿p„j5N(–ÏŸºðêâþÓ‹¯^Ž«ÙLõî¿]íªÆg:ÁcÚÍ‰¶Uô­†Æd+l*Z.“âv›6¦DUÎ	ÒXÌ¼$õJ«9¶•ÂfÖ~Pîþ¾‡)>Ã´KRÑÚ®Ó¹™HKÃ™’.Ú\TêÀšüLä™¡Í²ÝÚÞÍÏíÝîC}·Qãr8÷o½d°fY$æèbñ>æýfÑ¯g˜Zµ~ƒA)†îél*aSXn¤å§˜Ûÿ=ìœ{¿ÂeC
Öd‚Æ4ðz†IÍÂ}CÖn%×â_µ­¿g-Àf)šæqiÊÿÍ3‘ºÆ;_0míå—Ö¼ÃˆÂ‘šÖú‡;_éji¨¯«oi™‹øI`âOD‰j°œÑ"Ã%L¹®¦µ@]›üÞÂ¤¸.­åŒÕ½ÿãJœ]X"¤”5&Ûÿd…ÖVb%V¢†°Æ'ÆÁ™ôøènz3¢¬á*2…û®xSS““Ò½²“8er“C<wúO´5Ëøò’ ¿ï“ «lîF‰(é#TÕóI‹¥†’S¥­Ç·®Ûºuë¦§?ôÐâœ}¢>.Hƒ5á›£5kOMZû‡¼¨¬tuÍšÇhªæüFäà¨)£‚5h-OíZíhäUí•ZðqNÔÖ<­ÝéÈLwK¶æ`Ö`í*;pÅ‚6'§ñpîÿ²w¶±mgš^`n J‚ Áðk$[ðÐnDa¹Šœ0¤>ªBJhF¬jÙÝ-´#"ì¤Ž?R«®ÔéÖuÎÂTÆ™ qbGpâÆRàÂÆÆðWw¶‚£:HÔxÇ3±`š“-úg¯ûyùæøD´·Àì=çœ÷¼çðC©¥òð:÷óÜO!§^!›/D£‘z®Ð¦—)»±³?§´‹BµFüÕÏ­ÝN\¾rEdÊ¢ÜÆfh\’³“ìÄf¦"ëxnk+°Ö˜ÞtßNúèE›Š$Éÿõf'²¹‰Ui¥q¢Ué¬í Ø=Q$å¯<uàØdjƒÖôÏ‹ä!íBf–çˆ¾üP«FoèÿÐ—Éil„sq;€àˆiHRÝ‡¸šA}SÝÝm#“å©Õ#Ó¿^\|æä§ï,.¾£’5Õ¬Ñ!X#¨\»áhÍ‰k;¶^•¸&\éNè+?Ó›ø+h¹ÆñŠÙÝ¥É®úH÷½Ö¶í£Ë„¦ð°ö¿÷è	V£æòÖ§/¿9ÓÁE:6ÓV[K&$["ž)äzJ‰ÒØH[*9Ø3PžîÉõLÆR“$&é3˜§áàpO,UÌDaç41Þ›¦.ÄûŠXú#^Ì8%X+2iU=(‹ ){YBÚ­U¦”­q¤h‡Î<ª¹×pñ®}µ=¤ÇµóÚ9‡HˆÍ-~Ð>8µô»>Âr¯W.}j08Ñø1ôØ’çU“ê–Òš÷‘¶æA0[Çk^Vcq¬&IÍ‰jÑ^b³ø´Ê"T†€Û˜º¸e«Í4±Ù¿o‚l3h¿¸ø¯‹w"Úçk0ÕLcâ$2p6¥$-à87µ°—Ù“BrÚ—A5gBÓ»]„Àì>;­é³=ì	¥±™¿›–û-â©­[ÜÖKÉ¸«±Ú]•µËÄ×[êy‡8ÂÚ'ˆí±Ú?ìR*û®={žâòô÷kõÕT"«$H@ÍÁÚâ¹÷>ZXÄ¶öð…KsYYÆýkå0*ZÓg¸©ƒVžá>àÝJÈ¸ÓæþI¥ª­7µûÏêFNQé–àïû$­­gKsÆø,KÑ›½¸‰=ùß6ƒrýØDÚu¡É²*U¯œ%FÿJ]´Õ†ÿ,5}ûWÖc±3øurÌuÎ©k­ýr$ù-ýÑà0ën­Æ×$H‰´—Þö¾¼E 0ÁhçJP“ù£!Nº›‚S<`!š÷ƒÖ\6$±¿V©4#¾F2£ñZX[sŒæ~&RsÌ´ºÈo¢ª¡®kü<„5kÐí˜ò›(kß8Ú½þDó†—_áR}üEÊÜ=¬…•5fo4tlY[¿²¡&"1óž×½¾·ØÓ,E·íØÔ$WH¾…µ5ã[!šìNr·4¬eeT#ZK“9·óœrÄ¦ú5áÚrÙÚr,ÇrTÖà ÁÚ`ßÑýì<úüõŽŽmM“ð5Tè5ÃÆb'&#XMéJ@4ev—ÊŠ{'A¾ª¸à®eŠ¢®1ñìô†Ð(TÉW«á‰®‘.Ô±6Rî®îÙqu°¶ªµGqm·æØk{®~Ö“qL!“MquÀ6L“‡2N-‘c6‚Ô¦‘K(nÂ¹ŸHàAÙtWXÃUDéë‘h¤å‰kwk_PÖXÏ¬¹)0ª™Œ¦‰Ç2]R½=¤±›Â‹(%2£æ@‘Í²iäÚÜU±9É‘ºœÃs±µ;pØ5“ÒÒ¾C§‹ÔqZ"6™HeÒ¸(«œ­#—j´´ô`¼³]9‘¥®Ú·Oc&Ó“ˆMŽ‘ê:^ÈÐÁz:4I×°NÈ<Ä¬cº”_ZžÆºÿÀÈc]SÓ0šša‚Û€µñòÿ•TÈ€Ôê±¦‘Ý4Ïž:vhÂ^ß•ÂW±Œd×Õu`ú{?úõá>}çÔYr ­fíìÛ¿ÿ=™¬çOI^ù<òÛ[±…t•kÇÚ¦¤èBkÃùYÑÚ
)jGWÖ&¦Ll_1HŽmÛ£Š5ÁšµY# 5Å>*[\®ÔÌÖ§Ÿº¼²v»´èN4´¬íèXY§'†(¥Ä­djuWËÐàP©Ô3TÛÑ“…*eþþc©ÉA*GÔ"»]]N¤F'l²S;á5¤5%?*ÈM‚Ô\vj«Ci/`Xç¢g8i­FeBö]»®ýòÓ%ÂšÛA¿ì`'d³ÝY Íw²§læÇ{°Z0©þxµÕÞ0ütB“`æÆ¥0yþ`sáiÍ›øØVíÂIš«T“¨æIñÓW?}‰åÆ§
v6úC¦ú1GPZxñ”Æêg‚3(íÖ¢ Mr›vB5XmQ–è	-à´àsÖõ>‡Ø<ó›aðûÊìK|y$ÊŸBXVÖ«sZ@j>‚¹aÚÍJ[ì?Ñ¶?‚óŽ‘¶îîÔ‹|êº’5†ªÊáXíë—gp„Lr Öè­–›råjþôëÆj?Ö^þ_çËªO:ý:ŸçoQ°&X3ß~8í½…Ó‡›“É‚®\}ü
‰,”ÇèìÜ-_S6žáì Ga«ÏÿA‹&Ç1ã57›ÇöÿÀZ4#X£Ïµ*’¥»0òpÑ½”Kí*’*˜âÔOj%‘Õ•Ä:sséàšlÍz/t5	øJ„ÉÖ‘üÎ»P(ž£:ü‘ÍëÖ6e-1²S¹4ïcÆa…¶FK²ÇßôAÃÒÎ¡¡ÉœŸÁ†“±Yh§#{gÚc¨j5Ù“ OÊO«4dûd6F©l•Åïª™Šµj¦†0Ç«ÝXÓÑÔ5ÈPÿ­b5²5ùïe¿?{áHüÄgÎ ­É“Œ°¿œ²Æ­­MÅÖ¾ñïóY›«ék>’	¿rÁ·ŒÕïfJ×$h-0…$Ø˜Î&»ÇI:c'­h_&ŸjÊ ²ýda¨¼Hó°¶\¶¶Ë±Kã+ùœD›íÔá("UíÈG[‰£}ãé¡¡Ø
XC,è, <.g#3 ¢å
«… Ö«ÝZ8Ùè`Í{f)Õ›†ÿ+s¾1;<AæÝTj}ÚšÛ³gºÚ¾=ssÖþ3ïl´Êƒœ›Ÿ›S«äÉI¼e-i°6ÈDRÄD*B#©Öâðí®d=ŠZ=Y‰ì¡,Èïêç{eíÒ…Kf°š…/C7»fÍ-É…•+l´b(Ò¬}c¶Pªõ
gjk<B®]/©\Æ)³íÖú:ÚH™yë:¦Ø†ÅyRZR'%
d¼“XÇ´mÃ~.Èý|êÃtÅÁxA¿_k‘å-ƒƒiú1ÌH1-IaK¥:ðZ›*+eq˜~DˆhÄjr	*OK=EÖ¬©ÚD©<=«˜VxX›Ùãl³š3Û‹¤¦r#]»Ån¼{"I-“c?=†ã³ò¹ë§)áç÷·Ï¾ßÈ©+$EþŽÊµ³ÐÚqíé­Îò§ª\“Ñˆ×—ÿ˜^¸a%:0¼}Å06#ÛæŒÕ„j„ëÚ§YÅ©æêÖË-{Ÿzê©ùúšdù8ÖQ›jY›Jµ¬DUåos „	d²mu[m²#UîéÕF(Íé>Åx>?†Xw¡ZëLgÓCƒiM+ÄÌW¤¬›o¯F$×a«ü7‡fºš·›b¦ºµ>³ö7…M'¯qÚƒš=“SR×Â¼,FlAH`³•`o”¢µð~Ä­Á>üªê/y‡*Ë„~þÒÅÜRª¸ÖÖÌÂ¿â1òíÿêkÖXÃõj¾XNó¢šÍcÚ«,~ð›M>fÏhä¦ícÆ*!p°B7·hX´©’#Ù 2‚Ñ‡Ÿ‡aËIp¾m	’ù3þÈ÷Žª]XÑÜ,>ŸNœˆ6ÝÖ8Çv¨ ZôfØ_D'=³1÷ÀZ7T“Ju'RóobÉ²i“ÁZueíÑÇÀ59ŒœàÕÒ;¦¦ µ±±Ž˜±ž²»vY3lµÉÔEþºø”!RÈÞ\Ä`íÜ%x^k.¾h	Ž¹Î{xŠ•Ç*g*â«ì`5L-çQŒÅ÷rßjs•\sÈ‘Ì¶Š£Y5^‹Žòœœ
Ykx@v
Óš$»uf2B²þ£b1½ŸpO¸¥tKF‘÷Q¸¸$Í?Ðrê 4®
ìt=à's•àgQª]”II¡S÷Ùvþí×¬ÒËþ÷ÑÏPÌ¾¡Ê´¯=ü>Ž#,Ð§ 645”*ð‡gûàž×x
€³9{pà³àÝ|»5Kƒd¤ÎuŒiP^‚ÉpÍÃ©öN,ŽÖðéGeâÔþúq“ÔõW[¸¿îN­EÖÖª­=Ïb¸¦¹‹–HÔE2î-¸×ŠÍ+¿ùŽ.®HÇÌqZÄµ ×Èù(%Ñˆ)\Ã?T´†ÑHn´_Q©mî4ÿ~K[u±Ümm9–c9ÂÂÚWK=ºÇ3¬áÝ¿_ÚšµXÛ¹îèööB{…4"Û§‡2×ýb\˜6ÜëYíîI/¼˜)Z?1Kñ§Ë§&hï¥Ì’üli¢Œ™ƒ
Ï0
ÙCÖö¡­á°¼Ë]‰©bãTÈadä*[ë¢U4p¦ Ýœ¾f°ÆJØ‰ÆU4YC!d?FÅZ²é^!/Çš–7ê£Ñú7¶¬lÔªØ‹¸¦Øg.<yØ¡šM™»ï8z'×wGš¡HNª5a	1º¤#‘ušº–‰œÈà!QÉwU©4kVÍºõZkÏa1Ö”£‹Â:1A_NwLû!`í]œûF< »ÉVŠã&øL†#Ìíßv/dàÃå9–rV™Ý‘ÈX	nªäµN	Ö”y£‘IL"fÇÉ„”g³ôiã€;­?r¡dG‡k
æ¨h¶ížÕœ¸éQ¦“ògÃÀ¤«-©´Êòoþç§×OÝ¾rýÊ;gÏœ\ÖDkoŸ½~þ¸F†›ÙBîÚ…¸&£\üÝµqvÅŠ¯ Ö>|·krvEyrr¤|ìÝ«{>‘ˆóìßµP3Xãw¨žØ?ŸÛqÉÞ–úÚD2QYëÖkhªHk±výt0µ¥êS“Óê<ÐÝ“ÇŸ³o\‘îÕP[Ø)XëŽäbÝ…\;°Öiúš!›s÷Rô‹Àšµ/låW'iÍ±xÖ­©Ò­Oœ„Þ¿ßÆk<f¸†ÿRaÍ{‘­J˜Âf„
ÏO~nûðê%9ÂOÜùjOÕæÏ‡ìLUÔ«Æ„žÕ´óáap&#ÿ%PÖÔ ÛZUwÀ®"¬yT{õ†5èLqÝÝBc²y^c§­:·	Ò‚™#6[Ý`$hkŠð,l»ï÷”æÑ­
¥éàÞ	'×o¸iâKÉ»‰È&³pp¬Sw5ìˆ%#¾fMëŸ…MÈ†¬‰ÅjÞ”°6ÃX­Ñš£µ¯ó °¶žî‰	%?"xÈ2Õ°v¤Ë¬=ášaóéýz©ÿú+«IWCh;½¸ðÑ†s ûÃæò¡×˜¯›`&PIÌfàåÿç1iD4É;G¢‰CwyàÒ™Õ¤Qui¼Y{6É Š‘
§Ø¸yô‘Q•!gåÞHärüØö‘¼ŽàÃa-£Ž¬»»Wä	 ˜R.²º†¯sŽý?ÛÙ?:Êûéxœ$×®Š²Ã²„Õ€5e@ŠÊ$£I:Ã;‘ïÖ¬#¶xò€\C€µ@NÓÎäã!N´,žÖxÄöt¦v: †?äƒ-³j^ý6¯¬©‘gª= ùiüç>(•íaþcþf¬£;1óòq™Òf­ªÃˆG5ré¨«kqöU#pËq½Q;¶ýT¡âyxÍÓ¸æZ›åö´gù»0i­ kwš5§QÆ¬­G¥°Yër·µåXŽå	k=¥žtA­·fµ¾ý­tRûú}Yì³£}h`b0C=-ÝbŠèødÚÉ2#XÛÍ*V»Gä[IÀ7ÿ*ûŠ ë†‹8_ôÇÅ"¶’4ôšêÚ62U™ÛfÊaek»ö9X{”÷æD kŠùù­ÿð«©Lq:jsÎý},³‚¹™‰)ÉMþ"cd@Þ=Ô»®©¹ž¶+õ[X{>k¦¬Égê‚X-j]LÙ4å=*åçeö¶v™ÕyrÖ¢ê{ÊµÓš­â…‚ì¡3X>MrÏàãºfp«YgŽKwŽ)©.êÏâ¤šNƒµuäÐŒJ@Óç<×lÒ"ÑÕ²«TúÀu|cÿ:ÇjMý\Ó%Ò©aÖ1¥d¼4;}s# ŠÄ{jÊ¦ºŽaÎÉ/•^jd@bÛ?=Û×YàqõLëK÷ñ—Âß‹ÜEf6Á™K€tàöO?úÑ¿LÛÉcÛð€AÜ´ž¡Eì6Y†û¦:êW·¡¥úÍ¯Ï,¼súÔÛWnß>»piÁìF¤³‘yÞÓJŠ³…Ü'Z“¸æ]ügóôÕÒ+~¼ûÃw·M®˜Û37u€¿þdÐÑ­=áaþêRhy+9BÎ7ÔÖ××w$i)W_ÛÐÒæ`CæžÁÁžÞ±T[ª­~ Vë ŸÁ þ¢˜íåŽsËÓ}xŽÅ¹úê·ÔÇ9‰ÐÀš&ÖÌÌUÕ*ØŒËú€5íÓ®+ªNš±ˆS×Z[|´}cšdôñuC3¡%PØX´¡cØ0’Õ‡§*-áSaø
&6[ò¼@1óG({WØinÇ¦ú¹©Vm6¹Â3ýs%jñÚ©
H-°ï7Bó°VMXCWªýÄ¡šìÿà3Úu-;¿Ü›Ù‚…`¨23?eï‚‘õF llÕ¹RûåGŸ¹Xà4è ¤NþG÷†5¶êQ•ÓØ³îý]•áO¡µÃ5¦	r16mÚtb“øÑ»ÿy¯¬IW{lÓåËõ“•K£bíÚ-]Æj{öp“†?WÖ*nÅ?Ó(X{ÕA*òÜââ¥“ç.œ¼p°’(º*—/rE¦ª‹It/Îs)A"Ñèó+²áRÔ›’4¸ªÿJ¦Æ2Ø;uïÒª“Mc!­r³îæè
Á9…\®ê¢bD—_I3å‚]RriõÞÌ¹ûJ°Ö»HNkÕ‡ûÏvšwd¿+‘ëÌIòÃÙ*³«ÊpàŽÎýŸ½Ow5çìŠ±ÊÅ‘lG¹‰ ·”©†êrò™BžÂx
ž`±m
ò©RŒ·
„5›<ø—.QÑä1X­žiH­Z˜–†«ˆ ÅeGòöhjÒÓ Í]¡ÿ¹TãýÍTª£»{Óñ7¤#w5¡š6›·4àY¯Jò»g@üE¥±‹'ô‡¹v×®Ïq-,®j,RÖ&’Àš„5þ.ŠD®8˜Ëçópø`¾¯ÕuEUXÓ5ç¹\¶¶Ë±AüÇ¯æùVšËGW#²/Å8ÞN”ßßWÈQ¬6$Xk*æ$-Hº'ÿÑG˜ÕvÜÑû%î__:sã¤šÈxi­HR‡ÝÑå‰x±j’Õ¶«]åòÈ
Öˆ=?`íQƒ5„µ/ÂÚÖ™‘¹®±hSa->¬™”f£›h‘HF¨ã‘$í£ãH…M÷Œº•õQZ$[ú£ÏjÖ¶zX#Înr•i†kQç4¢pVVÕásaÔe‡'XazÏÓQn¥ré-FPj¬£¬¦Ç££x¼sUÆ6„Èá)ðê¤	Ïà— ˜vµwr‰‡ÁFA6.Õ£0l ¬mä‡áÃþŠ3¿¿Æ,‘í*ihGB#Ê£ÌI'Êfó$£Ò&›²Hm]$á§b±)ð™lH€œîhÃØú—e¢È³™QÿlûQhí_DkÓf©“nœî¹9‹µqš÷AXëX½öz‡ ·g^˜?sêìYk‘}êÓ+Ü–Ýˆz®Ak×nyÿ«\é}LâÚÀôî‰ab…‚¿½wÅÄž=#Çö|²ïêŽ«4î»ê² w)R›Zã¯l~/°V_[ßPŸèÅú±ZCZCJk¨M$z)­+¥èî´XÆ2•J%ÝÒè‹ÕDzgûìEòüvšÝK~œ¨¤â4¢U´æÂù‹èW&jƒ–¡5K|´½!á´qÇk–ÉÁø5v6Õ@|ï£eC†…5ÃûÛ~¼Wœw‹ŸÞqRþ‘àÙáYøy~$ü»†_/s;VàìýÞÎš¯¥«ÅZSÀjN]óEk¤Dr¢5d5XÍW«IV{õÕëÓ<ª1+(·Õ,`Ó„‘õ^a´ÆöÅE«ŸßG„ˆìþ^øÞÉÃ/®‰ íÛ÷Âù¹T‡{4Æ®Z±v3¨ì!r©®æ÷šýi9Þb¤†‰g±îÔ¦#$7nr¬†5vÌj³v¹åòå6Çh²1È®®m°)±Ú?þ£þ,<«Ñ_M¢gÈjŠKéyêÒ†7‹Å›Q‹ÆBOÏÅkD¥÷™üYáš"ÊÇûhvÔ}Ô72Öé6¥8‹àH3äµÑ¢,£h£ÆCEùè–gl†ü'Ÿ|’º²UŒvZ”™QLóéï“¯fÒT8GV‰üÞ¼xvº(l$¨UVJa°†©¤X²‰kÁèæÑQyóråûÚû¯½­™H†›ˆ¶‡É„¸äùh†š£X‰Ö®)_òÁk¬¼‚¤CªÅøx‚º²qÆJÕ<¯¡¬!ˆ¹|ÈPTÕÎ<¶i³šF•õèšbkÎ†¦ÆRÚƒ ?
WK"ÿGÑD¢c}MwìÈ›B5Ü Ãm±½´æâddÒZÄ•aúâò¸›„"Y“q=+®1¾Z°Æ&\«.®‰Öz{“q¥¶4©ÆPëà`>Ç…;ŸO«Ò\uŠÖŠ5ärÙÚr,Çr„„5*˜Ò==9
mŽ‚fkÜîiÏ§u—b;z´ U o0'}‚z|¡ ™g)«ñqõ„±Z ¬ÝX¸uãäÉ“ÏB	ÅL¥Ž?Â¬šB*1’Þ$½=ÙÑÜ˜°Š’µ_ýjnÇÕË3W5nêµ m¸†ÓH k&­qžKt“¤ÙMë `Ì…‰jÖâqÔ´UÑ¤ÙŒX–"[üÀÚ–-uÍõ+¡´ VüE,ÎÔ÷k•ï=Þd¤Ùå~:×ÇŠø¦$H+G7çœÌ|é•Ù(ÃÖ¢ÒØs*làà 3÷m%û…jQ¸Él#ÿ€<I<†b†½ˆ^$˜‰F£u¹¾N‘¶.Û’Óšì®mc–Ìa0úÏbàÏïæîS¯sŠ÷ó•&ÏÛ·÷å{ÆÆzzùe´q[r2–èUÓk¶ièjd¤Œü& ë™ fa/øl{»´5Wª6«QÁƒÚ©%›àL¬f6#Ó8³Ú=55]šžRô®ÕmdYÒÙ­mÓ§Þ±xû:#ÎÈÿ3†t´vãÖçF#üY8[HPpÏüÞžaE~?C íÀ¡ž_}òÉ»sWùÚG.$”«A[ìüÍí%rzZÃ€\tÚRµ5õæ4BÇµ1¼û;R«GÚjc˜¡fâ“©îºB¾;VÆÄk°££.Ò&ÂkÙ\~<ßžÍIhÏæÁ`ýB4+Êš.Ëlº(ëßVCLëãÐBæXÖ®Y`2rÍ„5›Ý¾÷Ïï}|Ýx-Xü‘ß…ò"ÿ¿Ç•ðE¸é@ð í´ž÷áìFÂ°F&¤r!•i‹ik¼yTƒÔ¬yK(óá§Á	[l¨ª®U"à5íªcšŸ…3"ÙüJÜ?²U—×˜Ü]T»táÈú‹7×ŸÐ·þœ(‚Ð'U£wž*Ö¾„ºÖÌªESkìC¶ý8Œ8iíOj}œÄKÙt"RwÂR!¬…ŠÖt`º°F<¶m›Ó,ÈšþHcµ«\£üEJ­eN#¬ñaþw·n\?PSä‰ï-ž=½ÀG;†‹òÄJ&©‹ÎÐ|Q°VùòÎ]6ùC¹c"ª7»ç.Æi–QR»¬er£2ï/¤¡4Ìü•áõwŽ’üÈg´¶ytóæþN‹~½[ÖŠš3BÄ"ÿ¤(ü¸3«ñ¦zl~Ä
âH± PÙÝ›ãÉâhâ% ^QÕ«ø‰HxE."Y®üöµ×H\dp)ŒJ|„Üè&Mµ¬·rÒÊ ±Ç©{X>"fß/:{Ü×®wôÒ¶×|mÎèLek‚5@2AZó8bµ0¤Ý5œ–æ yGÜûB³c[ê¿”6ºÁQ¯­ýßD¼»mæHâÄ‰DÇ“ÕŽÄ¶z;ÈÀaÄ-n^#XÛR§ðÒ Îž#v¡°cw.þØ®çºÛE´¶×~<;<$OL¾’¸øsC½9¤Rn•ë
ï¥5Â—­íÿÊXŽåXŽåðÂ×Ÿ4«©h­Ü£KCoúNÉA†#}y%Ö†Ú["ûÒ%Çi»A5kÕZ¬	ÖÔa­QÂ¿>ücÒ}¹ér©J$°íW	uf”õ”µ½s#ck;@µGÕpM†æ/Âü»Æj¶ýÊÚ¬MŒ%&|x@h6Fd k˜$ÇØt.A)Ô—ôžÑÜ°¥†4HÁÛaíN‘sgÖDbÖk•T#—Äçå@Ö¨îÛÅÉòÉd"Z JOËpÝg)f€Í’1õý¾ÿxDF#RÑúÁeÎãø8š]×žn_§î«k`›¬Ip„Û8Òå\Î`Mx‰AgŠ4@êÈÆ‘ðZi¯ÇÚÁX&?160;Û3›ê¢ˆ°-Ñ‹iÇ¸úXA­Öòj§¨g¬³–iæ!¶ÿ§iåAêi¾”H—"IñÛm]]#¬“Ór¥YÃêò419²ºáÌé·±îÇaäúuÇªkŠ?P¹ö’·…ü6¿zþœ-äZ@ª<-\³pœÈÒ3\~÷“=sW¯ª%vÅaPóvT­ì ±îÞ¹½O==SÛryþ°ÖŸÖÐæºÔ;”@mKÅ¨_£½Swœ‡:jm#18¸gl g¼³/? æÙÒÇéz‡ÖÖ™‰$d–å¼ƒ jl6qá\ 8fÖ0`FÕþ§Ú!3È¾kì<¹)’€×Î‰×B½×–
l·ÙÝÖÞ¯ÿÎw%ÌdDÓÂO
ñZ#<­½u§?œfá{®±ÂšÁÚOÌò%—‰¢vÕGÛÂB[u`óºðšmUÃkK¿#ÜÑ}Ä}Ú{^Ø´~Ó¦56\¼I¾µ®Š¬æéËCÞ—ÅˆéK*Öêüø‹ü	þŠšúZ=>H›Þ¼Ìú¹yÕ¼²Æy€VûîsÇHä‘ª†³È‡°šk ³÷é§åÙ_1‘qÿ+|–ßºuJ«GâŸ<÷ÑáÎ,ê’•ÌD1kT¤Édvï-QiÖñY`¢¶+£DBf°Æ£</—eVäÓA
[F°¦h‚çÈ‚Ägd3&þÛ;‰4°Ö´ÙÈú’—$Ùw9›P…Fí«uz³WKÌËjŸ¹+lÀt	ÊY—þ'xü¯”/OJ¼º®¡¬}G6Žê_Ý¬}ö·?ôÍJÃë‡˜©–ÍLý…DˆkÎÊ_ºê•”52MÇ’Ïˆr&ÓÐâT9&%—ig¥jª+£™§3ÁÆRÔXœÄ†T'´H~¨¥AbŽ¢Â;õñþÆg9Æ33Ý‰ØXêøË˜Avt¿SY¤56›¬ì^ýü–ºÈÊ• x8û18¬v²¶%–hÛ·oWq\°1Bk§Òeât Âb¤¤_æ`ÖT„®Ù.°vûåDÈåXŽåðñ•äèñGwJVS·ìP)ÏnŽÆ··«7ŠÁ°†ßE.Ã¤WºÚC˜ÕÂî"|3º`	!JÀ+Úç°F¦öh¶(2îVö ÑäÓ“©h5=Íÿýtyîê’Ý¾{ùQ¹øíy‚wGióÖýŠ_<¾uÞšbO–idî	Îl³%©‹l‹”8Û Ž_2k[ê›ë…j ›gµ°q?áŒû5œû½læ‚d¦Ë·»b;;ï^¢Š5E“ÚGâ¹~X*torê2yD2™ƒ¨ûu]$*$•‹
™/s^Õ¨ì—NgýoþýH˜€žº·¬E³9Ë½]+j T×¶ãIÇvíiì.ŽÂ¹la¼oûÑ£ù‰’Ò!'RåCåÉ‘®¶Š¿KÍ°'ÒÃk:_5ÍÁ4kL4M;€ã©qfÂß½mÛ¡òÈê®‘i–]å'‘mæøÂÙ³§Þ9{éøÂ•ßðöÛk|‘Ö~È÷qì—­çÚO»ZV¦0LF\s¼6Ñ;1±ÓÀÚ'¨jÐšÂ7ÅÞÃJTþŽ.ÏÍÔnÚ;wëþXª¡£#Á_ËPO²#–j[¹²¥¥­¾ž&Ù%*×bm#)Ì7Óƒ¥‰ñöö<÷88@YÓAº½/ÁÂ9ò<¨4ÌISŸÁi†ÅÌ=»©¬D¡±Uµk•2sq-Öð¹f©×”:Y™Z›ã8¯¯y%Íf6B¸f{7õÜæîßÞ®ø]lcœñ{¿±òšƒ5"TµF ¬…kÖÈŸµHÞ"@µêÀfˆÆêAãªÉ™ê5/§ÝÉk^T«.²ý™¹áê63úÿ·/¬_¿~°¶¡±yÍúõ¿•s"q“‘ ªk_Þ¹_!Û~Û¼²ÆZ§U{£µLÀhÝ7¬%ÔTën¸|y&¥–ØwvZ[ª¬qÎikm#Ï=§Î##5®OŽÕÈÜ±—OïïÛ5ê†î(Þxò×oÏ~˜í‚,/FO^:x³‘P;œtEfF^v>RÇæèUî "»ðá¯t×¤ÅŠ{o¹,¾¹4Â©Ê\Ïd:ÅTl8;ZäÆÍýŸ”s¯lÁõk:*ÚŠF"$Ð)=²¸ng£B¥iz{F8Ó+2æ>ŒŒÆÛr±É‘J2-r˜ÝüäÎŸÉ6ÿþÖÏ^ûC'CLsÞ!lœ€Ý0ïxðñç³C	fæÐŸ	’˜ë%„PñqÔµ‡¾æzQó.ŠÎþ¢bý!ÔâV»=†‰»ƒ#a´fïËRG€ÕVÀÙ@’°#Äömª)*îHutD’c‰Äzlûñ¥	Ãšo´fÖ7ÖŽ¬4F¶p£6úeÓŽtoÛ­9\û¢¸ÆjÃì +Úšês‚µl.m‡Öœ´¶œ¹Ë±ACì¯öNàBž>ºóVìÜu·¿°Ü“nÇad?ß$£ÅMP±]ÉrfòPõ$È°»ˆÙ‹lp¦c«-Rµó³Ã&¤ôöõ€ƒc|5Žk
yºcÓ‡K¿ûH¥ÇšüûÝ·ëQ"¤¬ÍÏ£¬‰ÑPgEw0ï-2Ih–tF&4ÀŽ6ÙÇ—hM}M¤åyÌEV.Ö¾Ë'¬9;È3—Ö4z]­©â$bf#M•›­º½*Ç=æ7xS‘ŸÙv÷8î²ñ5¢mÎ¤Ó9’]úô1®,	Ó»ën^÷å&£´¦¨)£9ùK)·eçþÖœ¨Ý¤´´ºåêò ul©2Æí…¢œæñ0‰Û÷ó.•Ö&á­‰ò»ÍwŸi^¹Á	a^^Ö¦MÏŽ‹Ö$§}Ï 7K‰´i%œ‰êßd&ƒÚ&'È®®)2"»æ¡ŒÈùÅÓ,m3‹HZ¬Ýv´vÞãÚ½¸&ÿçø­AZM`Ü(ƒ¼*{Ô2 _”=&ª10´ÆËìäû3Ú»u™2›æægR1„5-^“è-•JT«Áj«j‡€5¥…¶µ%”|”î™nÇU…¥d“…jo<×'_«#ŽcÅ2eÞª zM°‹¹¦kÖkCaö—æV‘Ú5´6Ô4Ÿ Yi¿#isã•ÌHÇk ÛÒÜG›…)îóÍŸô=µ=Äi,ç–’]xW=n‡Aí¾‘0@8¬G<¯…2!a5VPM‹—Õœ´Æ«i„XMÊšR Ã¨vEëÛK¡íÞÉáò5üXÝRó%êZh%îWR«~Š©‘Ú??óì³kÖ¬9|X;Ñxqý¦#åtQéûXIÏ#6ªÃëÝd#´ª^6øÅÅýÃ«ÑË*Q{yëåù­[gf.Ö–öY³4ÈÕ¶Í‘(Ý%Vª9V£öÏ¿ýôËÖP«½tët5„ÛÖ›ÈƒOž¼Ø|ò$™!ÖÓF©§q“¥ŽVhMVšæï‡áH¥9¶•°Fxz©`„÷‚ÊÊ€'ÊÍx±rWåðÜl°–UîÃº'É‡+d‘¼ÅUY{Yszïß¼
cþF•:+çB0&áN+ó^Œj ËÈbÓ#MjÏf?oUV	1\<„txÒr€ÿ³Ÿ½ö>Ò˜,EÉ .f°‰ï¿F§2Öïèaš=§åÉ9lyŒW;Àccï=nej>òaLõ-	²Â\k‹…ú_3hücI®£ö_ªÙšÄ=‚H
ÖÔŽÐ€°=¾?Ã=4Òl=Õ›“‰ñõÇÿá¤VEY3N³ý«ÛbuÑºú†„ýmÇ›«yŸóxÄy‘tÄš;æ¨€VPÐ¤fÒZ´Q¨/V+kŽ=XHÖÌÈÓBµÎ•ér"är,ÇrXü§kƒ|çÄ¬ÿƒµýj¤™í-å1¥ß€AšW.:Dì¨.Yø|ÕÂ-Ö¼°FÜÖÌ°Ê'ÛsƒÀZo÷@oYm¶™ RSSm©Ò$ßú§åß¬á¡Û¤xù™²«°æc¾Ë~<ƒ,EF*Þý™ø;Mi•M©A&99Ð¸Šøò¬VÛP©þù7V6xs‘°vùEÁšYAžyýÌ…7y±Z”‘tªeU¥¿£7XñíØš	}Ö
9®
5µñè¥¶Ø9Ã¨u›³ˆjéœü}‰VfÌÂ[é&i'Ÿó†h:æÊO¥L DVIkÑ¬œé­ÉE\>ÍýMVÀF¨cOÿÎ"5£Ð©o@&ÎŠ$¸ý¹ÞÉ2ÝÖ&ˆáÙòÈ ¦Ù„Éb–dH¡)46-X›œ¬¡¼1wXA¹ßL	÷p±#¦ÖsmÛŠÙeF°Ùßö‹3ómm«W?>O¼uú…Ó$Bš#ä¹ø[âš\üÕrmß»žÿúc]T®u•Ë½½Ó»‰Þ^åç¾ë„5(-`5…Ü'?§fŽØ{çç$æ÷ÎÍLN¶µÄ’CñDmm²‡H`4Ò¶¶m*6ÖSœ.OòÚæÆÆàôp:m}ˆ‰áñÙRªÛ¼=É×jÎñ/ªNl9KûÍ¶Þ«	Ö“Ù®yRs.þì6¦©‘¡­q|Mí³96„c`Bp^ûè—Ÿ^§ÀËó—_BŽ‘ÁœÕê¿á0.|RgÂ~“zUX¢Â¼WUz»VÝ‚#p-€5…ë¶æ¥5Õ¬…ZcÊ²KÅ\ä%§«¹8/JÓæAÍöžÐ‚™„µ0§Œ¢µ{Hk,~–;¿ù‘ÝýCZÔXˆK µÃßzöàÁÃÏ
Ö647ŸÀ¹¿I°&R…¥EVhµ¸Y±©a^«c¯¹¦Ø,V °ÕDjfV¯~±#5“JYSì­Õ”5ŸI<7÷ß›á4¡šcµ«¤l`.òý—}Qµ³í¿qëõ·®Ÿ§`M¬¶°pŽÞj¿·¸xáð{Öze Û;¶eeÑ\	EßŒË}ÔËØŸ«^M/×Í¢"S‡‘c:«üx^#wFûØW‹5¤¸'QÖdáß¤LŒ¨>¬í’©ŠµþÍ›‘Ø­3÷…ü/E£D5L  ÇÉþìªG 5®ÜîSË´î qº“«	%míºñÇ}¾÷e0òªÑL0³G™ˆÈHzœlÆÊÆiåŠÛÌRg1b¤ÆÄÑÚÃ€ŸzbûuÁ÷°²ÃÊÚ÷dÑ@X©HÞ"ä¿^‚Ÿ±šmr®¤ØÏþŠ•¨eC9Þï°d˜»*kvðXÛd”µHsuïþà«éÌ¦ùÔüS{÷‚kûˆjâšÙÁâìpÑU­›„kÀZO.›Ïók'Üí;×ñÅ•­-û÷/Çr,‡â«Y¤‚ñ¾£ûùb_µþBoyÜ¾KÂhˆ…¼ÁZ!§¢™{‹8$+°6V'A.Ö[ÝuX³ LÈVŒ‘IÞg6„+úÀ¤œÛøº<5rh÷Ü¥p{qU—d¹ëQh-,­±ÎLM‘æ‚¶æ]-7iMlÉø˜Z«ÖšuÅþR°Vß‰lÖZ¶`ækÖ\ÍÚ+Äñ¯¼r!`5£4fêg|mˆ›=ÎŽÖ$¶uXˆÔÒ[ÛŸîšfŠv«UŒÆ56NãxMwgÍ•„­5ÞQ>Ž%ßÔ©ë7·ø,gkJ‚4 cj¬·*[!¾~/™¦Ó­ø`>9ÄõŸf©üö£‘äÀÄöíÃãD¹ëÐþûöñüì„Kt¥	Ü5ÍÕˆMb™q‹JÓ4åXný„ë¹ÆYD4¯Å‰ÖÓŽíf÷›ÝC#(keO™™YÝÖÕE\×êãïœºtúw>ø½<F@6Okçùƒ²ïé¢µo[Ïµ'‚¢î©²0mº·ÄxìÃCÇö©Àš×[Ýh­í•½œ›aŒ­mI%‡‡"õµÉARS’)‹rIJ%úÂÐÌüàÄÄàP©<Yê Q±‰ŒuD"Î	¡N°†qKŸ=í/Ÿ_Ii|Æ¬†´V©\c§àQå9Z·5M•iâ`MFþZÃÍ×X57`«ðÚRe-Äjá³ÁàƒYø­ü:[mÂzÞ»«=åïÂêpÝšÔµ¶æaíïÂŽŒl¬®öC`T3]ÍPJcaÕâ#à¶@RókUaÍÍ¯÷ˆê~~hjnØþIíà‘g€µgŸyæÈÁÃ‡7¬_³fýšæ‹oFq84²¨ôñ^Ñè}–¬¦¹ˆ¤¤@V@-Ôûþ¥5k²F$¨ÍÌ¬Lœh¹»²ÆIhÍX#æ„jŽÕ05#Èï«¶¿FY‡·Þb¸n­°ñì_8µøÿØ;»Ø¶ÎkMgî¦Ë ”A¼ð\Ø‘,"¡U‹%£ª¬uB“ú©
É‘UQŠw¦FLGŽ%Ëù³êJIç$vC,ùÐ-\§v'’SE
R¸˜Šì¤…øœ É9	œI
_ôÈ`pnæy×Ç/Û„é Nç.ZÜûÛßÞü“h™›ßµÞµ²@OìK×¯^ÌËŽ#L	dkRš9þê-=«¤8ã„Xi -Ã·”ŠáèM‚šRÔõnÎ|’E6ÊìÁ!dË–{îw°ößkBªJ“Þ–	I $ñyXãR)©k™N¹‡pÂ°'Í|Þ[$¯ñÃÂcÃÃl]ª%Çy€L†ÄW+ŒbeŒpÛpîáG˜tˆÍ¤«Ý«B3V£/KnÄlD¨¦26‰m\aò•ñnä‚›Q Gz$·ö=Ö´2´J£TKc½u¥y+HÅf\"„×T¸&aÐÁš¨÷ÊŸôÆ£ÑŠ)´t`iåÏ§þT<4OÁÚM° ËæD8\yÜ!C,·]iÚ1ÛŠ9*Ÿ×Ö>àZ ®)n µ_,ñÇ¬õ©O_oÑ›&Äj„KµˆÅÄ‹õDÈõXõ þÓGmÝÉŽG©…Õh€}V©sxYÐë—ä	D·Ñž¾P¦ƒhÎt÷õ©%h÷b5Ä>ÊB‹,Çj¥î"AµK¨Xãô†œÖ“µ.%ñ.¸­/7™‹Fgºp‰ BjhhyùôÁ¡ks¿·ffd(…5ãµ`šÁÚ©kÎý‰mdŠ)s‚M‚s¬ƒ°XÎ_FXd(n ÓŒÒ4¸àgüE”«ãùHÐ›‹°)3—ýiÝtäfIFØ{máûO¬RkTåÐP˜I7S£2õVU(EFÕåU{ìÀMy-út‰` ™¶¬È¢p—R¯žl‹þd’…,§’jêtÞ·îØN™“×é•Ê“ž9;ÚôõlDw+ÿHé$œíëýÙÏFÛÚ$Mæ¦g ’žn3öœZÆ“€†f6K„BÊl$'(µ¹Ûü“öX˜œÝI37t5 î±Ûöï:1]YÙ´mÖÚì°™ûàu9˜#ä;ï€k*\»l®AÏµ'ŸÄÅ 7[Èsvnœž¡K6J¢µwÎ,ÿi™–}Aä£ŽÕäÝMœvqxßáß5U®\¾sëÖ¦\»þ¸A¶D<Ö7BÇµ:gUIuuíòòçûdÆ\‚·Ü@¿x[kUï–J†‘ëŠí¼ÑI2•×«ˆÍŒ÷Ãö<«	ÖÐÏ´_’îè {H/¥¹ë|ø#¶«t`õÜ¤¦•!6Q7qV©&ç§Ú”c0+³ÜRÓR\f¥„ÆQ†›ªÛ8ä]F~íMFŠUk\„gZ‚ð°&]Í>™ÖÄj¿õºQÌ~üs	¤i-Å5E°ý·Ò…5È‚,¯ªq!n‘Ih{»ÕjŒ~?ØõœFêãÇãŠ‰‰ñ|ýÄÄâà`òZ}}EEýüµj„›ùy‰æ/Àq[ÊÚç^¡€Ò‚Y‘Ô4gù*S\°†tmmÄï¨uu®unuõ‹jÖÆÝûá4Ëç)|?s¦ý4Xã%V3X#€5š9Œ|@\-.^]ˆ-\}¯ fÕ˜=–0,æaÍÌ)á\¥~Ö·Î¿TE¯‘”½¶!ðI!_M-2ÔIt$T¦¦ÛcðšFî#Òš2÷Üù…uÐ¤5åÅ“¦Þ‰Mdg–°,ËŒÞÐ¹mFOK3ìˆ™qsšÁÔª(MwLËÄ„/ä[`É3+qCý±#HüÃ{ž~ß`M’™,ùÅcj‚M>$¶#B2Ñ	lÒÔŒãà£Y‰šŠÃÌP]Ž]8Sá@&Ä5€ÉÁZÐ»L|Jóþ$>²°/l“¦Æ…	ž"wÉª_ÐhúšýèIÞŽ›UîØÚH[l}ØˆÍŸú•¢¬±xbÛ§P}s£Úê”‹°…3‰ôûlæXk=üÐC*×¼¸VŠkl—ºq…LÄbt¬…×úˆLZÁÂÿ:ŽÕßú»o¬Çz¬Ç×>Ôc­¹–Z55Í§ÃZ¦v‡ÉðÉNæYÚ%/µ§RÍµ¤BÒz—ÈêXl`æDw
ó‰ rgyaM¬Vìš%\A;oqÝ}|9hBD;æ&]SD®M2ÎþÃ;÷Ÿ>¬Í¬>Äçp’À}#’³±ÇµýûYÏ!­MMÖÎ}2JIOK¨)ÒÃZW5 ¢à­/kUt
Þ(X;°á„µ Ö^ùÍó¯œ\8_p„æóƒ½¢!+c6äÂ¬û«´¯S}iMÙiÌùùlR)»‘Ð°ì“œŒ#’Û’a»i}+X`íÊËŠL»à¬NM$GÌž2¤›Î±íº³¸ Ëh×í-‰t÷üìj©`5ëÐ¡æ8iF1ð-›¤Yö#£“¹.óCiK`JkŽJ(†¬ÖŽ°ÔãêÖ¦¦Í4¦­édÐq”Ñä7ë‘ÍF°f"^"³3ÒÕL[Ã`Ã‘®ªÆ¡¡m°Ú³;ïÜ¶sÛ¶7^çâÅ×ÿLÍšÑÃŸ/oÖtíß‹¸öKõ\;x¥HkÏ~¯™:1=Ò¥˜91=¤š5k¤nÊÚÓPikžÖž>¼zàp´rÛáå­›µ\®¿·¾De¼¯mäÎh#;pg¿òÈÔLVSôŒ¶7Òò©ir)×Á:2¥2q>TdÐ*ÓØ‹ˆÖÄliýãdäßÏ!ˆÛ!…eÆin¤µír!÷M°ÂœÌV´„ôRK°ñWyéú{¿ÿ€&lDyM­Dsó—²€€š²\¦±|¿·Ò[ék±5@4ŸéB×øLÈ2&#ÿ-ÖlqC‰°&T³$HGj^Uc¦•Æëiªù©¢|6¤_d3â.n°Ii“µR§‘/Û/›5à5‚ñ³ë€ÚGýýèiãýlÆòýgêµ†ÁùPãþ*åBZ7)—ù%B·»exa­„ÔÜåZ±ÙWn²&ßÜp<ÚobÈomª‹â4¢ÜP•WÖ»·yLS<Ar†ýŸçõÇ?þü—/ú4}<°äù¢k…m°&\[(T….]¼TQ•_ˆY©šˆÌ&ÆWŠ°£5v…VÑƒ‘°FÙ BÈ¹Bj¬Nó?ÑA²Ì†Y;S|Y§[s++[ÛrÿƒJ‹åÒ’ÔäÀ¯×·s=ÑÈ«:Ó™4oá¬Î	ö•ÑÉ{Š¾Ò£B-´¥Z-¯És¯æþ2­Rƒ—ZéûªM¦ÚûºòèC¢±§!3¹A:ÌùÑÝ÷rð'/ ]\…”¦æÖê¼¦™º­iÍQéÂIˆSg5Á!0IîæX¦òy·ºS±³°waŸÉ5~¨ ¹Ñ<@í¼¥­É°²–¿·D´uC«`­U¨†ÇHë™riÞ»ßÇ÷¶îÝµk+÷(çþèð¼ÂašeJzOÿùÆèÚ}÷ý®`C^+×À5BµÉ_Löþâí	"Ög‰U3°$õ}©¸<³î¹ë±ÿa¼­§gÔlEž×"I¹»GÌX¤£‡¯}ºfº±®î$¶EÍ¸8’JÑÇçõî.<Ü§…j'Ê¹‹ÂZ¾k¡¬•Õº¯#ûºZ+RUD"G“µ¾©i2ÍÚÚkÓoJW[Žg2gÈV9xe«þÏ¥µRXÓî¹£;÷Ë™y(RŸ¶£ŸLóUfª+3ç~5Â®NjàÚˆI_±Ð–¶¡/Q±¶±Š–ØŽÑDle`í7¸‹Ô¯®ÙYºk6aÐ›bŸ¥»ôÊŠƒCQªWg]eËé´ÁZ*6OíSØÀj0ÐT„£UÇæ<¿’(jä2„Ð4ìŠ€µŒÁÚ°¥<šWÃÚ	¬ßRå¸[ùC‡xPÙG>sÞëÜ~ìÐv ¯£|ÑÄ@†¬JÚÑ¦rK=ÍK8Na­¬I	›}j¶-Ç@3@FÌ<ÆV=¢GŸâº%Û!¬3¶xN[Û©J5‹›ˆ™õ‹þ“š643­£`m?°†²¶mÛÖ†7.^:yþ•×ÐÖ.¼úÎ¿
Ö¤´]¾ìi­¤rÍãÚ'G£ÄHëˆ1úô»Ö®\×‚‚5
v©_ŸÖ–ç¶®VVÎžÛì`­½Þ¥ó*[ëŠF[g¬XM_%LÕÍäÚFGÚzFÛF£Ñ¦hûÒdO¦=×Ö›ÌâäB¦©WËP"1M„ëx^K8mÓ(M{lu^ö6Í¶0dÆÔT6¦AXGÖœ€kžÑXÝTM >BNûøº!Û?ôT.ÑÑ¯¥>’7K0/-í—‘ÖÊßM÷ôà‡€Íü¶”Ù˜ÞØ}ÍÓZPµæ‹Ö€µ „lºAX#R÷AWó¨VšYÞ^Dk¹‚µ’ªµ`R¾ÓZi5¥ºšß¹9ü±/vq¡	‰×/-Œé/ e¢¿Pè'm¬’ [òÀÚJ!ûÆùyKõ
LE¾0njFi¬·TÖX4|õP’ÿ[[ã…âC5ˆwˆ`íæ>kÇƒÜ‹Uõ¿ò¥OçýŸ«ñÎñâçÝ°_|‘VôÃö¬öñòÅ¯ÌJa%L¾ZÊ~{ÅJËúÜkçÎ0NƒTJã/ûL$ÒÕt;ýDb[õ°X"«¦«æpZÙt4µÀ,2]ÛyÚ·4g•HæY±ÑÓwÞOËµû÷D´#³n »£Óåq©Hóü½µÆ~I¸o8yèØÃÛ…l¼Ý:ÄûàhÆRk ÍûOCb÷Jƒt¾óˆ+HÛû{èGZPÄts6–2©±ó¢‘“§-âþþŽ»éÃ&XÓJø^Ø_‘×ÁmÕpéW'lvyD×ø«~D7Ì,Uª¦z;~ÂCü³˜±C+þ ã‰èÜ)H­œÁˆ7ƒtãî½œî·n@•—…5Õ.”\ƒFÆ~xþÀ“ž›;pß}÷keÅ5Áš6Õ	$ÙŠ¦Ð9Ö¤—ÖDm>9žøöº´¶ëñµoõ·µuœí dmOr»}œ¯Ý9+ÏþÈÙH:ÛÞÛ€k}±¾žQÎœH¹kŸéK«µ8WÞ¶ÿ×œßvzS>¿Np‰˜Î¾	ZÕ°ã3p{3è°ÚÌÌôôÌ?ž>Ü”%	YmuõàãØõÛ{*ÃM´¶¼Ÿg×2‡É0ƒ!Í1J´¬¡¦…‰sòO w¹|ŸTˆñ¢ª’÷âê›+hP³ÙZ©½ˆ/Y©ÁjÀZÐXP¤ƒ50Í‡lCðÚQðg‰3|]¬Õ„”õ¨žsÄ–LOÛþT>Qò\Ö«[êœ/{f½…'CÖCµvÇ±;ØªG¶{ŠÖ„ˆ©g° (/BÎÐ‚5ÂWH!ë¤¥ð©Éª¾lå<HÊÂiûH®­#mekép¼5ËÐC¬£'†GgÓô¬•£I=}kKXõËsQî#2¨AYS ¥Ia³‰ßgp–*dcË|
ts^'ö$¿ªõÜöì9Û¯«˜Ÿ[ÛY×ô*²_}Õj×þU´¬Éò7äBR¸®ñiL´¶sëwnÄÉym¤X“=™´k~ßhíQµÆ~ÜÂ’ 7oÜ¸ym.Ú4·­ióM#4±hÏuÅéˆÝ8ÒÝ4’›¡7x]´ƒS3mí‰‘é®žž¥¶ö
„µ(+Xk§‡<ô‹¼ÆVå Z‹>Q’š¾07fS±šõÄfõáŠÙ4!ÝXFþÁahÍÚcsÔ`}"¨\s»6cd3>ÞÿÀxÿ8WŠÙÞ{ïêÿ†ùH¯ÅR¨b°(Å7Pe<&Ë
kÁ¶¬&W>þRÖ4ÒïI*[»‰Ö,”‰Çˆ'µÒ’5_±&ã?ºaÕ1š±Zi¾"¥ÂQVVtµò¤v‹k%é_ŠÎ‚r4]´¸(öPûìúõë—.-äóù1Éiãù<þÀ;‹BfÈkUÖG!5¿*«©a,%¤&UÍÛW0,Ù‘@¢ˆW´6Fe¹ÚˆÃˆ‡µ@Y;þ’½?»xâÊ•w-uÿïµ9bµO5ÓÕþðëçŸ'ÒëjNXÃ`¤¥X¥‡„2¢Ê½HV‡*(ó¿6S‚ë=›UÙÍì7z)Wo‘ã‡êXÝ·zj{¬…iYÙûZMqÖà7»…lHKƒO¦‡õÕ÷Ô„8_¦©C»ÿÁ=µéuoÜÜ½ËtÊïw»Ìù{{ÓB4z¸‘)UŽ·£ááíÇŽÛ±'‰¾¦à½nO'ØVû°Z£Ýû4}°a5A—xGÄóC\"…kFg…iû#'ì†\EO6»ƒšjKÕ²\Hüôï ¨ŒôD¯¬i¥	À]·	i%Ë]d@‚iÆiô  ‹Q ¸v×]ª§sÆ&:ðpk+i"•À=Ö¬Ú1¯"V3^@?€4/ÍkMM»o¬â«J6Â7ÿ©‹Âýc•º¥k{æ¹'Ÿ<ÀrÀãÚ¸vÂ‹kAÖR2éëKñÀ±ZP·ÆùAý±}ìYO„\õøºÇß}»3™é‰ŒŽÊZ|‡¼;ùŒh°V{¶£··»;Ñ×ÛK DÄ ±TjuMûÈ!ŸY"¬}¨$È7VÂ„ëtòbäMvV}™ž¶X¼"Õ6	ær±DSÄ6måAÿˆÜ±²¸:43´¶¶|ÐêÖµzµRX#”³ß™ANuÁgPe*†•|ÆÞTlKMY„–X@h_ÈjÕØKlÚÈ—¹áˆí¥½k{=¬•dAze­ÅU|Ô9>ý±ºØ²ÀöS)½zœÄ­Íš«>HõJ5ÃÌÌÕja¸&-Sa_¬·Vã¶ÃeÉlŽNâü«i¡*cÏj>áJRnƒcÂ8î`®.—×ˆô&‡@±¬üÅ”?#’PÃlX­§/…¨-ç3ªyKäú²éžÑžÞT
ù3>­	ÁÍ~ñTŽÜF1›‘ÌÆV¡CZ³=g§ézöÙJY3:šeƒ$û˜vg`þ¡ý>v~>«‹Ö±û»çÞzå¹O_{ùÏf4B>äåÿû'®9Z“¬‚‹ÿéÏÅµï½´wë¶£Ä‰éèÆËüé\¹²í¥+ªZûñ÷wy/H`í‚Ûi‹¹Á¹E²ªøº~nëÖ;ã‰¾ö\"¾qCc´+‘ØÐŠc‰W}1J*'ÛFÐÿº°|a74Av£4´˜PYas¯JÕHg'Í³jÃ*[»¢5Mõ©OdejPæS!]qšúaGjeGlŸÃÒÔÕåk~b°ÖOæäø¸Äµ~ö¹9Ä6Ff$ÐöÞÅ‹Àmˆú”KWtË-MDÊ¡Þÿ¯¸|ó®g´â&ûþZ­AižÓJûa[‹5—é“ …i¬„Ï…,åµ ØÃµòœÆÂLˆòÂZ€i%Æ"_ÍYÄ£ÚgÄõ"¥-œ<9&TÔÆµŽõ·´L&©É´ŸPKìù–Áy¬å6àP£&ô·Hk"´P9iMxÍûö‡ÿXãÃw¼q¤¶E•«­Î®–UÖ<¬aÞO\ùÜþÕÊÕ®<tú4ºš;Akÿî”µç_ýç>¼ V³¸Èò¢1i‚/ÇfEfKÙ¯íp—¨1c±Õæ’‹îÉ„XÆÄ>é›ö6ì¬ž²lÙp K®;i!Ê8!WòþíÊŒ$Ä}œ‹Br–äœ ÆáöË|$)I±Ú–=’Ì²’Ûjk3½Õtù‘8öSš¶ì‰d†7zª>©‘c¬ÿó…îýÑÓÎ½ß¬9°æ»˜@b×Lyû¡t5yA2Uáš Ì5Ðæê"»™—?[vå%N‘,i,åÅ51Üm²šG5·ËÕ$ªÝ¯IcS‡µïy7?µÔ?uW#þ%!¬'â#	P­•åLS#´Ö g¹’±þ´lÑ“ÝÇïmmÚºAçÞpEk ¢1±MLçýO‰(è&s¿T³ ›Çµ@\Ô5»<ÕŽs?°f…k‚5_µæJ›í4ÀÚz"äz¬Ç×=¾ùöp'°æR)È’¬í ¿´vÀLG3mÑødKn¼—dbñé‰‘Ä Æ¢ÜE>Ö>Uä‡çÉûv‰zlÝ÷¸‰x¢"N©Z÷@n$šèh™šè‹Å ,Š—–ßäÓü›OŸiøéj°«GÖXl£(¢šŠÌW÷#ì}rŽ¢µ!`ßGR ÍZr$VBnsA^\èËØöK‡7ðÞ°qÓK/mÜT”Ö<«þ"ê³öÊâÉß kÕ¦y)ÍòPNnÓÓR#"ùzr'yÃ7pÒ6C‘P§"©ÊïTº–ýV¶X·ƒLŠ~ÙtaV2LXæü®,L™íT¢)åÎNíÃaÙƒ…"‡QwˆèF²ŒÕ:dC¸ŒÖä…+F·á:+>'Ôï-µÍ(KFà=,A›SU±¾ÙÑŒ¥ÌaªIÄ3–³?ûK¹.@øíµ$GW¬fõjš™ÎÍˆÖtœAÐÆL"ÜìÎð=zÚ¹RÛ€5RY¸€gÌ™1á–?}ë­·ö¿ráêÕ×.¿|ù²l!éºæ
×þàhøc ®=Á¿Ônº*©V`hùÙee;.oÝ‹:+EM±‹´ö8´fß´?txy™?¢}k›Õ—ikc¢uc¼­=ÝT¹)ÚNÏRõj¯Œ55ŠÕràL7%š“°mUE´i¤»c7„EdÊLU¯^Q	œÂ³ˆš"È•@ˆÆºšª&.såjŒÚ˜ìé`mx÷€ƒ5 &úv1Å1à2v¶ïˆpü#Dw½f°Ú˜}bÿˆ›Ž+Þ„m_‚Ü>¹¹øýU»\¼zñ÷Å#L5\eõS¿j—{2aÊ¢`úâ‹/2gëƒcÜð"G]Ø±âƒß8Õ$÷¼Ç†Áv¶l}\ýu`i¸°¬±¸6kJ‹t±.\ûÐÚßðŒö3¾ÇÂœ‘õ3†«Ä{„Žúñ3®°{¸=öý-4ûÌßà:.×µ«™=	°üWù§çØ%rU¹ŽãìgöHš}Æ……s…hLì÷ãÎ/,äÇM“üÂ‚vŒÖ\
ÈiÊ„Dck0YMQÏ¶"\µâa­ZèrMn—Õ¼ÁH€j6HTsÁ6 µ¿¡l!ŽUD£þ· Û­Ý 	kGŠ¬¦Àûõ>t5ÏjbwW²öê‡†çÌ^äµ¯¿÷Á…-Hj1³vôÒÙç)£Å‡<¢9¶äEp“b¦\¶×]"8+gÂº©ó™’”&sÿa²¦­*­9™µ
7—ÓUÕæ ’®ÖZ³xByµIO™È¨Š;rJ°v™–™Ô‰Ä³e²)@ÉÊ§à	yûWpš¯=tìPmúØïÿä'/àß/Ê®„iÎÿ^GHclœE\$'ZµÉR|f‘LñÞ½®²íŽÿB4¯€ÕL[ûN)‰•Nü^)£ÙbÊšô4›ÜMð€Jƒä‰ C~b~>eBJáû?±x¬ÊP‹¿)²uMMSg¢Ñó¿1Z+…µ v!În=¾ëxÓHÜ¡"~3¬‰Ö§±**ÖœÏëù·Àµ·ž$„k^\ó´¨k“‚µTªaZ3ÅÕXÍ`Í£ZqYw„\õXo|ãÛI¼cÎ>C9+M=ÙFÈ‚£6Ö:Fé ²!zF¥b¼©`mÁ™  ²fbµrIÖ”ù)ßNÚ÷’¬UÄcJjéÊÑY-žH¥GÛGféaœiŸœÂ­ÿÍÙÙ¹Õ¹]¢k‡{GH‘¬´æëÖDkª[ûäètÑ¬?1ÍÆXm1¤¬}‰€°¼ÀfÎ"›63áX-€µó+-¯<ÿ›/ªé„êðÌåE2uÒ¹õ+Ô…!A¨®b^xØã¬»‡ÜÅ-èj)ªÆ•žØ)'/3„ŒQW’FJq_ó4 Û0¥ìœsubõ2ßžUêMªÏÄj{xþ-é,8f	/¦¬u††wl—ê&Xë´SÒõxÁCg3¨†¥ªšiªÝKsÔ®EB1nš¤0Ç#ŒŽNÖ‰º&5*Õk6S6ä$1½³nÆ´6yŒ0š‡?°–›:a8vâëSr9qÎô4‹mÛlgç97Ú½¥žk¯œ¿úÁkæ		®!®k¢µÀÄÿ§"aV'ÇŸ@`“7ä»ïžÖÐÐž}öOGŽàðïHMããì«ãú•‡Ú·Ïeòi·ÎX›»sS<A=z‚äß¦M›âX*ãØOmA”~kM3³¹Öº¡™Ù‘Tovt§R4Ÿèk‹¥zFyEb©,Ü­¡º¥“f0"³NûXW-Z‹‰ÓØ²EfóùŽ‚5F,ÙF‹ØåE2‹ a&”9”Ó?EG‰¤.Jz#Bëg6Æ·‰ñàƒ¼›ŽY|<6ÆÌM¹XŒ»]DÁ€ àÔÉ……ú†ÅÅSçn’Éq
ŸØY,’Ââ)â$7ÓÄÇÉ“×jêxB-c[Í¸Š’*‹“§ò6cÐUš3”FÀš„ôBo|Xª¬¹’5–´5}ÍMˆÕLXã.oŒZ
ãyý¸‹y=äGñÃM C)cpš™(Œòù3ƒõÀ?-/b~‘ßVHtrñLƒÅ–úú–úÁE®ë/ÀCãüb¼ ÜˆÛL($q³-òc-§®]ã…†Åk×‰–Bîù5[®µ,°S³¥¥å"X¡¾e¥~pðL}*IL2éG ô% ‹Dúõ
i[8™' ³‰ñ1›('Zºm‘Ø
8@ôW³¨ççžŸ¯o˜W´¬„\d)ž±w›þ"a]3„,Jƒ¼íFØ7á+@Š®ÑÄÞµÄ.UÖ¬ô(89ìÖuk–óL¹V}Ô«ñá} qü°Øfí¬f9¯½|©P¸NÕZ}(Ì·’7¾ LMASø&â7J†vœð®-H'½üö¦½e-÷1@p*°[„S|µ£SÂ°\Aj’¼wèíBoÚ÷ãóŸI…«“Fkæoÿ’ÝDyipOÆ$œ5X›•l§ìýlgR´ÆÛ¸24"ì¨fÖ#`¥B>,·‘íÖ’ÿt½¯^k,B2×¦LR$¨±Q[ìr~ÀœYûët'AŽÐ#ÔyMnú< ZÑ¬QfPeÀF"d€gÁ4Ø×Lí¢ÅeA¢¦ÉSÒXí<‘XVƒ `òC*ÄjV+X%YLGÙ¦êÖI„<ªó ƒ¿œÌŽï=¾kwcÜt5`/HyDßDnb4nI(i(þœ`bûe ®‰ÖqÍG.FºR6+÷£²¬9ZÓÉÂs#ëžo®'B®Çz|ã?¾Éôµ`Ø¯¾™Ý0Z’)²elœÅ ²#£O£	kJ¢oëBTóÎ"ke„5g/rµÅ}-ÉàÛìlØ Êßf"¹ÉÃÉ¦Ý­øÃÏNÕ-\Þ93³6•›™#1í°¼ú:XS°&_fb5,F,†Ö¦§C5˜A
Îb5ëŠÅØý2áKÏÂ•›y/q9Îîñ Öˆ"¬½"ßþ T!`5Vc7û´a…ç!—“b¿Š	L¥®n˜ÍàFéY&Í™;lÅiéPEŒÒt%5:GH½¡ÃuÕYõÔ
0Š$ÍeÇy€=ÇÔ¿«!T³§mÎº†kX‰ÆÜ@SefÁã™Oa$“Í’ƒãz5§SY~ }5Y•À\¦CÝŸG­«Ã”3*Î|R¤@Œ­Žjª›JPS+m;æv°q`ÆˆŒ+Í»ií±sÏžóÉÚ:óþh”žÿë­çÖ¶n{îÃ«'×.¼†‘¿²!¥­]þÃå¿ÜP¸ösR!1ÁK, 5íñåg˜m¿t´G%¬ù8²Ó`emqjpm[å™5Re6Äº°œ‹çF¦êîlÔ‰47›ƒÊ¢Muu­SÑÆ¦©¥ž6Ê7;š»»3=Ý]#Ñh¬;•v’f8góy‹ŽÙêˆm}/ÔË6–$§_Â\ µxIp#×9	ÔºßuF"üóé*Ÿù¶7¢vIÒàF}‹lmXÓ1÷ùž­ðÞàšq ÂŽyZ“‰]|0ã¨¶ùóEå&òüù…<ŒAžP '™XX<Ixþbg!ÓY,×†„Q4ÁÄÖqÁ‡Ç: ‘‡»°¯p#õvýn2¬•Ï®Û¬ýC`©ð¨Fx\S|Êõ”¬Yäù1øÉº*|d°ÖŸ/pÉ·Lè…š&Z
‹gê[`ªÅäÉþ“‹ù‚~šq!ô PYà¶iWã\1¸À•D~¢ºÒ/>Ô5ððL¶V®5jZ[æyèk÷¬ðð<Ð`}õµ•ªª•ÂD¦¡åíQ[úüúY˜öG0XËó.î;µ ?Žex*^æ“ìXŒ×Ž¹{NLp_—9¬ñÈ<¡œVëC+ƒó¦¦ñÆÌXÃú·˜Aºrµ[E•†¯
kLýÆ>{G£«ss«5k%°¶{÷n¤µãxŠ`&¤HâÀƒµçµ¢gÿË-Öþ`ÝÕ¬½Ç/š§¿Z<EGÎª€f=›iñ¬&fò9›žâ¬Ä8›AFËfe(•uþO¢µšÃˆ”é3€#·ÕÛúp’d^a<¸Ì
a™½e'å¥LE3WökìÐçšG	Õ(×ÁŸ\‹ª˜‰y¦â“›±ãÁ{¶$I½FêWî5¸Æ)ªtåARÊ|ìØÃ‡¶GÞ‡±Þ§:â1X«Q†F	˜ÊÙî•™¿ü%]tPÉ’rÊWClä5Ñö‘ÜFDfÙÂ)ïÜ v—ÁšP«œœfžÓlcÇh‚ó£Ášéu‚5=£E G¡`ù~»Ø©ŠP½v	²!ãápÅÈtÓ™óûxkÚWZ³æâx ÍîÝ¸wkc«¸º5WVxXWÄkåPc2wLÄOjdƒ<éqÍh­œ¸ÆçŸÂ-òšüû9¿»œóƒ´Üš\CZ[O„\õø:W¬ýçé[}m£gÓ2½¸Œttg"èjµÖF;ºÛF;¸vt)×G5×asrSt¢(¬++¬)ÇD¶ý!B6aÂ’Cìoo›TZ,Kè¥Iü Gä9]·yhªkzU5Ok««‡eYÌƒ,*k¬¥™.ûVw•®FäçgEJÔ1‚ìJÀj€ÚmFhÓÞÍ/ñ¾÷¥ï;PóÀ¬¬µÔ¿‚duÍµkÀš¡PµVOì(]Ñ]£‚
{EÔg‹ŠÚÔ­ÆÜžIb‰k 3Œ¼È–ì…Ý¬ú ¤R¦)X#‡QgcsÒi»¦óPmõ°JÖ†k†QáÔú.CaC`ëÌ²ËÍ`6LC Â?‘!¥’_LG{$eÚ'¡´žœFx²dÇ¨ˆLZ¹ÂÙ’¥9:\3·GÓÒêg5ñ«ËÝö¨X.Öûç1ÏjÚÎí$r'FþMM;÷×5ÝY÷;rì^ýeYCº ÎÈ§Bº\H*\.ä‘'ž xM¼öø_÷ÈãXö?þ'tµ]ß­ymm×O¯(Iêô_rÚÆ
rÓ¦›šFpoÏÍ4¶ær]Mª^k%d†Š§^"ô«#RŽ¨Ý==mÝ=£]‚¸ö%Zr«Êªd¤y ›z¶·êÖÌ.›ÁÃ¨fVÖ|€d~Ââ2"©Ró#ˆiÖHcÃ!¾í -Ø#à´ ×ì #›lä] \—ž£$²mìû£&¬	×`6F„&ñeÙ!0 8–3Í˜Äâ$ª›MkÄøô’wÌ­MXó
QVRó°¶ÀZüâPk^YÓâÝEî±±xe\ûTf°–'Š°6¡’>^0ÑÕŒô€fb,¡i˜ ÖDŽùµ¸áØ¯Ä™zàÊs—BÝ>cPQ~p‘h(L¼¬B¤3¦È9Z«_©ii¢°-VZà7Ö–•ê––pwêOÂV×
…1Gk¦ËñÊI¡ãJ0rdsiãã¼ÂúW 3äÎ©@.ì'ŒiýŒGjAí³Œ7£ù†Á€­Êðy_‚ÖÊGøšÏƒd-k_Ö*‚­Ö¦hckc¤¶zjqÕãš¼ûKû¬qduãàêOW©[ƒÔøn°öµDbµq›)ú@þDûø­¯WÒä¹ðÁË+àXU}KÈh6€5j„?¢ß¼ª´b “£Ì÷S!k8žMó†ËUA×kÀïÍ0ïßZÒ‘ê;ºÉ´àNrŒTR|/w@$ã»´æŒž€¼xd7q­SpÖ©,M$L¯‰Öö|wÇƒÜ5›²tluá‡Òf!Æ—H5$ÑCmOßkš’•Ù­©DMSeÍO¤Ûå¨óö‡ÚÀ:ã:5[?:™e¿Šp]«X’Å¤¬yAM3m‚I0SXâ£Fyö›«`FG5H´ø’ÒPóÔcíî»î€Ÿn‹…ñ/SËK¢‚`FWìpkt$Ñzþ|tÑ»Aze­´dM‡¨W“dUbJ¤ p€e¡[Âì¬ñçßzë¹·xOÒûâÚ­hm6koË"–f{{µ”þb<­%›¶³ØÅpíÁu‘õX¯³oÿÛ¨3mím£œdº›Ïž]jkc”®6JpEÛTž€½Í££®××Ò‰PíVý°?å(aMQ¬™²&NQ„+úh<Lóá6u¬šÌá³×5=¬Mï?üæôÌÌ¥Ñ­­î“®vøˆik‚µ ,ÁÓšbuHf]Ê|”Y?l–à¬6’°Æ¤±®Tu×H¢æ¶#¼qÓF×`Í@íû6hÀš£µÅ–…†kú¶z¥:@µê¢žX
k¢9Gqa]c…)Õóâp¢N‡åQJÉèçfNøo¡Œºç``¡.¦Â2úù:ÕªËÑcÄ^ŒiÝ…f:ˆifÉ-¥µ1U>$%ÓHî­@ˆ«±Û¾T‘9¬ñdÏ2ËBÒñ÷šŸ‰¨ +¢]î€·,ë‘ÆMšŠVLv€ÀŒÜDpf52é.ÿ[#ËRW<&×Gœÿ‰%†)´žÕ€5_±Æn]·®Û´¡ñü«/¿óÎÑºšô5%B¢­yqÍ|Fè-¼ßeu*ï>ú§¿:YXsí°­q€E	k©øe°±r#Ž”5lÜØˆÛ¾JhŒ6VVb5"n«£ »Ñº¡;+c`Z÷ ìÊ3X×$úzš{ròO‚µ=TöIÅÈÍ7[ccm±EakÖIÇNÂDm kAxHÍwHO«•å[p©lo¿Í>|=sä_ÖîÐ	g9&Ì1Ó`tÆwæ ™!€¥/‚kÌ¤œ“ )2µšÔý7'©é("“n’wæ„€‚3R"ýóûÕ`­T`o¢O`­´dM}±K»bk´Y³ï€µ±¼‹aU¿ƒ5ÉŽ<!p¦—Gd£$Ïú9P?Ø0¦Wna\Ö ©BÆŠ€Ž‹sõÄ™„1²?9d\È¬åy.ÝéÚ
c÷
¥BªxŒ1­~e¥~KÞÍ@vb¬`°V_@ƒIŠt/IËBA=Óˆ†‚^c‡DÞÕ«é¤–B9ÎÄ±¡‡ä¸hðÚü|‹ýó5„<å}8úø
´¦%lÁöV¼v»Ej¬Ù®ˆÖÑ`­µn1_áýEÊ·áTÁÚ•åïkÐ‹VBOZ½ç'ŠÔÖÀ4µrÀRs°v	êÊ/P„¸ÂïRxã’~½^³ê÷»7õ-×ª¼+&°‡]Ý04,Ý’…‡¬‘ø¸¥èÅuRÕöÐïGõÛÄ1ÒšzßsÏýÛäp§™eCi,Ië±)FH§TÛv-”É ÛÉZ’#Å†ÃÃ’á91|÷»;j›Íõ—`FÅ,7À-˜M(}X;¬c gdBªÍœùQÒäðhòáE¸Æ@NÒZ±Ÿšå@²ÃJ^$¨GI›45pZš¥,ªÒLŽÏ^6+'¨¹ËÀ¤&2ãÞ”©1ÓÃI^sm˜;n$¨U>=O…€µ
éjœÀ«EãTã0ò«_9³*X»uÍB»[ÍBƒé(
›èÜâfT°†L¬ƒgæ¡µ_Zâš§5—
éx­½ý©§ÚR±¬K@lÖ8cóE¤¦Kí7¿±ë±_Waí[jë4€E;õimmí£X’çÚ›;pòUŒŒ`á¾4ÚA.°Oö=³ÖaíhàÚ_FXûZûô‚“+ÚDûêÜlí¡Gé´ÄÎÑ«kÖ¶Ö ³7gf%¬&­ÍâñƒGÈƒÞU=/±ÊòKfC]Ù^ºj1›¬U'(«K„Rñ®PÚxa´…$/mB_ƒÑ‚Ðs{ë~âüBaå_–W_“°ÆÊàìuJgË‰Ü‘Y•g7E¨Øv’ås½:œ²dBJ¨QfŒQÙ0„—IfäêBj9q¢2`ÍJÓEpµhÌfÇ1©Uå°¦V •Noß>L>¼óãtI5Ž×\feDÊZœY2S³Kºã
Ñ[¶ûg=£@	R¿f¼¦A_˜]"ÔV­è×oÊšw1’+âšƒ7c¼¡¡49×@¾ÿ4Ç~ì„êÓ®9XÃ¿hJÛ¹ŸÙÜà¶¡µ—_ç×åá¯¡­ýEqùÆ–kœÁ5ÍNd¤®ù1Úš¼"ù§ãh±Ûvþú8wxŸbuseeåÆÍ[ç¶VnlšÂ¶¿=7UÄñ…ä¿þ3]]#ñÆº& Ž.îÂ´m´5÷Ði-×Š)rdÏ(pëüûíå•°V”Ó¬¹"AÂRp{Å¶©üE"ªVs¹‘P˜ÀHcUÔš–F&¤6cñ"9ÍƒÏÀŽ•6ˆÂkI‘Ú8ÏláŒÀa‡æ6BbJÂ#ýñü>ÒŠœ²Ö-i‚5Ýí¤&´û€5Ë‚gµ NQºq¢à-M×µ 	òçÿÕú¬9T”µÀÒ9JüÃÿcïìb£:Ï}¿¯ÏÇe4¶f°,ÏÕ`ã><3±fÛd23¶kd'¶ë¨T¹µÄ!…@>vì“c7Ge“ÖHØÄ¤J&² 6B"[XÆ	Q7
RK79ôˆ¨U·Ô‹}s~ÿç]/‹9q¢õ?3ë]ïZ³fÆÌ¬ùÍÿyþÏÝ…)j’Î²<ÙŠÂôÛORÖ³³EÚQ^Ê—(EÓ‘$HN÷³S 5>Eð ’½l|þóÃõÚ7ÇCð4‚µzeM*…´_i/])ù3Zc]¿¨I€m±&"Æ<ßqÏ„4á•=À8g‘ùÈÄ=&=Sþ«„á_"B‡ÒšQ³Aàl,V/ZkqÊcÞEã‘X-®‹Ö6ùêˆ=RðŸ/@µ0Òú=&“u7©g^“Nžö°*kŒ^Y­]zñI¼`‰#ûIÐW¨æ»ÊÜ=­Ysµ»¿¹}ÞhMÖÎŸ_ˆÅÕ–y·äÓ÷b‹Î`©‡©Ì{Cº_Y3íf°úcÂÝ€-“ùúFBbÂàîQ•âfð¥¬I×fBïéùÚcÛ—pD-°&#àêuÎÉgíÍ›^î@¬6³ôLÃï1×›¨YÇ{7]ÞúÞ÷zò`@¾À=²Ñ:@´Í¥¸Ì„ßÂøMa
Výûpfæ!’©Ì`Ä‚MvJ7ÛAÎ¡ºc£ÆYP¹f«,ìd„–äØ¯p°¦Ú2e?RpfUgŽÂünh,§8¿ÍÕÐæ¶sßæ-Â³½•'PÈÃ’'’íÉI~oîN¦ã€SD°V™6¥3ÝÐ ÔvÞÎc-ïüút1ãÓ W®YÃ2©;F‹ƒ”ºU «EÒ_¦4ÂV¶8X³LÈô™ëã§>ýôþýO‘ô×ÂÂµ´æc²-G±3¸¦,HE@kAlvW‚ÕªÇÈj¬Æc,¬ý·<ÝÔÚ6µÌøÄ	¯u¶qxß`M{ñW k1Õ›íM•ÓBÄ±€Ö>(ë‡öX#®úw8ÓÔb– DÉRý²%œ![G°ØEY««ÛsãÒððÛ‚µé½{d¿´52XxSuáOÈŸ`å'VÛøäk''zKm²ëÿàƒ=$=¦ŠÈ<&³u¥šG~Ò5û~K¬­ÜçSÚ¹èÙCXh­¥XÓs˜¦f´¦'Ù:n+{ŒÜŒ›t‘©s<'ãþ(½Ö8) ˜Ñ+›ItÀRK˜”Ð·J½]Èk&™é ÚUŸå2ÌæeE™šuÕ±‚rœ íî‰w‘‰Gƒ5'ÎåAˆ<xX ÙŽ”Gq¹Äwˆ<dÆ »—þt¾û§ÿóØqÌ$"†ƒ*_ë–È$âFhkDWÑØæª™[Ø€ãNÂj¯º¾Øê“m°­©Š­ùøIT72 …kÍ{ØM7Ü¼xg¹ùÒ‹3ç¯]»†!¤Áš§5`M©†kïýúu¹øAÞì¯ÑûoüX•5â¯¼ñÊÓ$B~ràÀ‘w,Q²ÖÐPµ~íÆK3èkÀ,¹i}º7½&ÍÉ·3Y'X+f:ûø«B‚ckXC^kmëÛ=OÀgC™†h^kF¨¼UªûåÙÏWââ^½Â,üƒ°«'`-¢3»ÛŒÕ¬±ÉZUk¸ŽÐ]ÇQŒ!av#í^Pó£aÇ.‡mŽá4Šo|¡ûDï!Íkin£ÜxÄ••ÌlåýBkgææ µw€5‚Š.’!!3áÉœ”5Âö¸;ZLí²çÖÀÂhëoããå©×Ö<®Y¤õYsfn-ZÍûïCkÀÚT kð¯9Xã·‚]˜Cë"êÅh»¶Hƒ”¢¦|Cgªh±…¦ÇMRƒª$xñ¸üõL]åYµdS`ŸjßêQÐD]x‰,Ö‹ÖØ§Ÿ€9OEqh•?
¬Žv¬»§23«4ã&XqÛNZƒõ»Å‚B@ÏÓšØ.§¦©¼Ž;J0ôÒZ=?ï85kü‘h„Ÿ X»gÊZØÒÙ#ÂZ¨ª}­°öèþXñÙÔt¶ˆ
G‹ªCê§žy6ÝïXÍ+k>emßÅÌØÉ~räß^Íëjœäi°öÞYšo†}uya6"w‘ë±©Àì·ìTY$KhÎøµ¬W²ÛÔ~Å2,\Í¶ïµV]@•ª	Q_Þ¾=CZˆTøjaœ
J2øÏ&I¯•ùlœÇ„ÁwÅøX6OMÜÀ^½—|ÏZ«I©1-®T‹´¦dúž·þøÖ¶|¬€ÏÖý=oJ"“7ÿvùŒ`
‰g¿`íMrå«íÜ+ÿq\ä"áJ‚Ýb8X»HÙõ¾¯$H`Oÿ.RJk†­ÖmƒÚ¥=²š–r­|bS›¥BJmÛ*\QÜN“Ô˜óZáZ{ZÍÑRä?rlœ2yFì{¶ôì¬ ûÓVPÖN„}ÖNlÌ+“Åx±ENI±tìË¬¨j\c¶R$áVÓ¼ÙÜW­ìŠ´ªk#½ÜONÛ}9hZ¬yZó¸öB0Ùû_þa5Vc5Ïø¯»Ôª+Lü µ®®¡¡‘ÖÖnÙ ²‡¸V’¼”‰ÝØ—‡J5ô…ÉvÃimÒ±°`\YXûqÝ»(VÆœØ|”ºx>Ô¦ðÝ£xmb°¼Ç“Ê‹Û£fk7n¾zãÐð#kèj„)"Á	T3ÍŒýeû'á¼ãc{è-…Ž>Øòð‡s&j}I\ûJ[PÛG$6#„†PÕÓ ‰Ó‹®åuP«¦µ,E‚Ö:Àš¹.»ÓõCßÌ®ÖA°VŠçz™–(Q(¡«ñë;Q-‘-ß”SayÉÒæŒ–±ŒÌËâ€¡Á`®é5°&ÊbâÞì9±+!c1_aáNV¦V²H©3&ÓÁ¬éÓã€€ë Þ?ØÚ¶»çiÂ›¾)K:$=ÅæíYPN¤d¦=’Ü„a‚5éjµ1h69öêÄÆº=c°åjV´F:¥ÁŽžÊ­¥cßÑZ³XÍ•¯5J%É//_~ñ&§n_¹sÿ¶©k›áZè3rö=R!É;®Á÷Øv‹Ö^Ö”©ŠGPÍÂ`îG”±p¤,ÀOW­™¹4³víÚtåÚõ™dfýúºÑÎd¦Az¬6:š©H&ûÚ’ÉÎÑd’|]qøÝ•=<ŽÆ02ØÙ6´[°ÆKÙÄ+Û[ˆä*’Å0À5C2áŒ+‰kŽÔ|¹nô˜æa-±ÙÐŒAú™€o›¢½ý3è­v30–ðœÆÜ&žÖh¶h‡ÏÄf$¤#[Ce6	q­<C°½’Ê˜Ù¢Ë)‘Ø© NŸ©ma†¨¤I¬GXæØ&Î€köœgáKž5±¹Qˆ¯D³½a$“0`¡08F°º‹ˆÕ€3»~Öª‰Öœ²fp£º°ÉkJµ`8‡7pºPß2Ã	À>Ûá Nñå7§ŽNº7µ€k‡ç¦©âÛÅ>í‘r¥ ºà6Ë2¬?<eTæCÇLŸºW½åÂ–EöóÜ¤OO¹”J3#á)÷>tï=ÕÀcò¡z®EÈPš[óÃf8Æ¸D‹¼‚ú©kS€Y¿´<‹úØì8úZË¬`­LV„‚Gõ!p‚ô±ÿN´fòŒÆHoµ†ˆÖ™¤6#æÜ?ÓÏZ÷?]îÝ¿T´f¬väÒ¥ýûa5‡jžÕÐÕ¿º|ù®håÜ;çïü¾eîúÜÜÕ«±–˜×ÉÊ*Ö¸Z8`ó¯•faŽ¤á.µÈÆjì5bã }•—W¶›`Û´|êÈŠÕž‚Û²–ñBO"è•í®Ô°ÕDEkâ7FíË*_‚|Èvå\(!^}Öè•Ø\Ë;Ç·™H–òdó¬Õf6Kí2×+˜…G¹ŽXí«L°fh`šò «Ìá‘­7±…p‰Á¶n'’6Øq8lgé“N|SýG…°†æ=!A*!›¥E–·»ö«p³Ì²_9ð±“ÇÃÊDÂš`Í|,)§{¹ÍJÇŠÔ«Y"OŒLïOÓÅi±O×ŸaÍ:e°ÿäÆ'6¥#UÉ"ž$‘¸¢Ü’I8cª•(M‘R“ìñ‹ÔE.zßÓÚþrZÕ`5®#Qzbk¹œêÖTµ¶­¼¶ê1²«ñøÚ‹ôõa*¬¡ µö
­­Có?e›~Øì›ßÝÏáÔ‘J»ºT½RŠÍ·BDÇÇ†F²¶²¤¾º¼Q.Axvs±YkÝ#»M¥Ô bs¥ëÚH_õà¨Òã†:'nÜÞsSu)k”¬‰Öø¼ý´VÖLgéI†›ü8ÍOîÁcd5kƒ(k5ÑÆ©kQÓÕ'ÐË×‰jqkNœX«Øgoå!¯}YY;3·` ©1„Õú¬!2§¹=È™x8#ç°H/M”K0fùÖxGBœå2ötDc²ËLA¹ÜÎ|ÊgÈö¢Ç•€ aÁ¹_oêœ{óÜ‡ckê‘M‰›ÕGèôæ¦²…„:­éqt·Æ`8B
²Y6õ\{!Õª”HõƒÈø[*vµ}Åôw3ò¿Åh\}‹µÉ‘Ÿý_ƒ5ÑZ49_h}•jÄæ““£›2uèj­M@Ú¸äGhé?KUkV05ˆ{ñâå‹Ë——?ýåòõ«WÎZ{æ¶3ð§nÍâ£ÿøÃµûgI<á3™pMO$K?Æýö‡ãYë~k–Í?ã‘a¥AÒSmßþµUéH%ÅiUk«2›6eFÓUk3‚µ±ºÊŠŠ¾¾bƒ,F;ÛºTÆ)}mþ`_k0Ÿ?¸;•Ëš)Kð–w /›ËŒ*%ÀhýË©ŽÖ‚š5[ÌwÄH-ì-X«ep°»1%°Z; ¦ Å}¿l™`¼ä&A“l¼1¼c‡!’Ÿ6†žÌünÈÆ‹º56ìJä(ZóÂá`f«qØg(sàÕø–9‡h¢Ÿé¿Ô‘Ð¬ç³°\Mw>ÀjZ‚4HkÖ6s”öœŸ&BÞ•²fiBC3~Xeˆn™7ëG‹qhtñŒs;<€‰5Ÿÿ¼e’2U‹ŸÙ¼D¿o$‹š¥ÛÇ%™–ŒåaÍîðáéýR›ö`8¢"6•¿ZÝË÷$vu<µxôhA„%QÍñ–x›µ±£§4ïé5O÷2é.º;¬),©Ú»0 N==Ï¦Xê¶Oí[9¸ákò Õ_íï–ºŒ¬¥UsDH/É`0b±TkAx¯à¥*+Z£,õÈð0)¯¿ŽêîYRãJ|dÖœ°vþêï/S³F({?èœVkÞÔØ[ÇRÜcq2Y9W-Æ¸Kì ™5Ó|I†¿|7çÀØZe—J ºZM\."%%O*§‚ç…­œ±_¹éK?`ÍõÑÎ¢¯íí(ðœ%UÅR·,X«Ö²9º‡H¿ï!à9ØŒÇÒÉá;rOîš¥' ùñ/¿µù{ôÃÆ cÃßîÌB_˜*
Ö /ö±±ƒq~‹¤?@‘ë³fÆ#Î‰Dsö+vš²º|ÆB0ç²ÕzYÛæV£±ð¶Þà¶ð%¡fÍPÜ¹c»XM©˜ á³z#4fôtsÓ·âEÑÒQŒ¤¬ñ]:IåÙô™NØpš}Ë´T®¬Ðà•µgž¡ÓZeº6.uÉHÜCšiªžÐüJó—rÂZ46‰ÆîþüÔ)`meZ3\Sdoßd[
™•îØ}°Z­ùoó¸¸kÇwV=FVc5Ï,È—:A"«å]2Á
2ÑÑ®­4ÙçKÞƒFvt°¯©©kl(?v|¢ÓwÃþjamyÖùf1°øŠµHZ'_ÒÇZ€B
õ«šµ‘yÞ§h·=8Ä§w®î?4Ì¹amøÒ°üET…dñŠ{K}ÅÓÚÃ“u£ÇùL?fNø‰ˆ’GU¼&M ìÖ¾I(o]­Š·ë5ÑhÅoõf.—b%X;ÓB$!5°YuyÄå,œçVC5BG²‡õ"ðÝZŽ	'ts3ÛþÖËú‹ý…,b(šeõÀÚ€©JPú#‡0ºè€à6÷ä6Bmy2(ùÌ)Fþ"y¡#©°ÐA‹èh­êÐ]FkþÉqŸçp¬éŽm‘\{BÓt?3	HMºšeCú¬G!ep›ÈLPë892Q‡´6k´^› -ò¸•«éÏ©Ù mUkuÀÄÖ\×üéù_üåâÚµsw.Þ¼{ëÖkŒ¶fa>#|E®î¿PéÚs¾ÞQý•þú»O^yC¬æaV¬‘_{ 3Hb/È3ë×¯/Ò0UÑPYQ¹¶np¤­am²aýÆc£™dE¤¢¡Šýk’<##d8`Csœ§Tm¾;+í>¨ÏCM}|´ìËf]µ`!ÇìàWÑ£K-›}8V+÷a²ùÌRåÛŸØ¦¬&BC[³,G#6.\Í,Ò(NJ{=¬•…g%ŸöÈÂ*óI‹ÔÌR¡C˜ÃhLEÃâBFØah/Ù„Ê„÷¹,HyH’=i´ç9Ña£­=?~Vû|¨§a¾è&ü^æEïæL´,ÜKÖÐÕ¤¬iŽÖ4‡ßŒÕŒÖÌcäºk€f?é7ƒmêá.®J^lAt3™KÂT2!Ç›ÒÅòù™§ÑüÌú¥Iƒ»t0’Ú¥£«©9¶é¢•ÊÔX B`Íé[‚µ{‹ŒÌû/L»²7†Ž½»J÷x×ïÍ&N§PØ4±P2kÈÒ,sš¹}tîþª¸cÓ9÷¬…¡g’·Ý»žw8Œ~ƒ‘°[4—¯ráú­BŒ–ÆµQVdãŸ$§Å
Êáí§ì»U«)òuwj²“SÀj¼eØ{Æ¿Ë·ÿ¬võÎõ«çEkŽ:XK7Ì:í¬ü%qÀFhjnö½`ƒ(FB¨æRL%°™?d¡€<†„’³×ÙÒäy"Ze«­–#Yöš6°N·Ë}Šç—Ž&§~hM‘Ïõ6%z~Ü“ïåˆÞvë}©7pig¤FÄ¸ÓºüfêÑ¨W€ÖäØ¯ìöÍÜ\Êó¦¯s`˜ +ö¶?
Ö¶‹ŒvìÜá[]“øhíYsÃ‡‡À0åŠ‰n¶#mqóÀ¢³ß`©·í m/cµ/Ik[·o0Z“˜†¤&XÉ˜‰ÕŒÛ¬ rSÐí‰­À$uvŒÆ(¬ t,¢‰ñá(+Yƒà’E	kêŽÊb=Õ}ÍZ9®±‹åŸöÑ„=žJ
ÖT2Z¶¥R~6kÍ¾Å‹¿ºqÙÞ Êiíx9­µµþlr–'¬?ºÂÃZ›ƒñØªÇÈj¬Æc)¬ýçî®îl{ëPWSwë•jùBÛAù@ª6	óÇÖ‘ùÝ¹Þn¢·+‹Y»šò…î6’ G¿kûXóÂÚ™ÅœÅmj§ûÊd²ØÐ92ßš«†Õ2££éFµÝùÂÈ(Œ’Z&GÞþpIgäý—NÞØÿšÂãÚ?é=•§£Á9Œp}¦ùÅq£5‘šÎšƒš×h–=¥É½?¶V[;[1»fßÓj¶¶ïDèUkê©Rs˜æV
gÚïõ3~o¥EÚ« jŸ]åž_èeoª Oá8+iÔuJ×J”-@r°—NáyW–à\-kèl¢„9¿åÅ¬ãáågmØüÛ»è€-ÎÖì‡ìª•\Ãväë`LàGb©	BÅðÈwÜi³¬Ã^V7°B©•Š„Zãèä<é«š#)	>Þ¬½_ÛÎ8/6ÛÍ`ÙØœu?`6bnÿCui²ö3» ª‘õ*Mt6úê«Í/"²!­³¶µ‘–k—þùÅ_ž£ÑÚ­kçïÜ9´kê¶öñ_ð…Ä5¼þ£‘_H];¤ÏiGÞE^#R”ï
ÖXh²†¥÷'Ê‚´˜Yƒ»ÈÆ›ë3HÍ]mÈhƒCè½™LfýÆõ´_K¦pîo¨¨l`´xÍÜE†ÚyTG|Mù‡i<ØÞ¤¦´î;ù¼š¬e3
Øcl01È ØlÆ6[Ø%ŸGÍ2Ú4gÄm„×à1!²‰Ö´ÃkT(TA&ø(Øn¨ô‰Ñ‚µC6GjÃ)ˆK°Æ‘*JsÛ\YN8pJ+ÇejÄæm!¹ˆÙ¸B®ªJ®G†¬$q»¯Eã×Ùå4g k¬ 6¤#`Í{AÊ^D¼f‰,ŠçÊ¥5SÖÔkí¢’1…E’ÖT¿f*¢’½>À)çÄ2á}¯ÍHß9‰ŒÏmá†©]²n¡ Í¤5Ýh@T?.óMƒµ)C8³æg0Ë6û]."»dï±î©Eƒ9™™ €{óÓ§ÈgÂñt'.s°vÔö¹$Q‡­¥ãòæ´pGè£õSfY©GŽa6”³Hm‹e½JLòÿºX!2îFloeÍÚH­3""·bdf/ÈrX;e)$«aàë>‚äè€ÕÎžÕ¹‰^ØÀoØA^^>kºÚÂâÂùëé…;w¦bz-*ôi¿BÂ¨Už*’sýÔì”Wˆn1e-P(¹—Nj\vIQ#øÚ-Uºn€lI|è³©òµlÍS{QÜ±‚\Ç#ÅÀK¢.ääY¢,Éuñ^•)‹ËPu@3ûò7ÿK)n§YÌ)bv'±;eY[Ó‘à®T¯å/ÿ.T´g!¢­€ÏŽí;ÍÜ
ú¡45ÊÀ@5®Ü†\¦ÌHü<±‡™º¤= ·gESl#³Y™Z@lŠ­°vTl°M`¬×XýöOk– ÉUÄ†=	ÄìÙ(€ÜiÁƒ?AÉ?áßJˆ[Åb<Ú˜YÐ)–B–Ec+ÂûÓ§]õÂ&šb+ÊÎïXŒÐk-Y[GYKó276†ðeÔÇ=Ü›ç‹×qåû!Ãµ•iÍpM)&}¸÷×XjŽh-,[+5kºê1²«ñxÚ‹4`í*U“;ÿ|S-°v¬Öd€DSwç&m]úð-‘õ«C'ÇŽË`ÄPíøÊÂš’ g«ù<Èä%*ðe*fSrÚhÌ`µ?.¶ý½mcDf¿‰IŠ˜nœÜ«¹q#GW³ö[éjÚ¬)–.Ì kcƒcƒÑ¡¬Æ£‚i<	…k¹Ü# EÚªÕÖón¤æó$VTÖÀµÓS×ekÌ|XÔ+`Ùoâ¢ídÔ«ÂÎ¸¬d–"±(ù1ÝPšƒ5ŠËm„S¯¾e’ySõò%-™tù«q~·ç«éÙfN‘¤½çCamÌÎë„¬þ!> ÂÀ€= ZÖ
×òÌuˆ©@Üî˜”¶BÂ ÓÖµÜëÎò§Ð&å•NêÖaž€ÏÄiš<H:0êgj¬æ›®Ia«Ã¹_…m„úb‹Ôˆæ±	þåïi&óÑ`Í¡š¡Ûú¸BlŸ^¹vîüÙås·®;÷±`Mv#·¾øâ/®ñwçNŽàÚs:)ÙÿWÂœûß¬=œI`èí¼ûO/ÏTõÏÌ¶5v¶5¦+*RmÊÎmÈTQÀ£E*’uÉdeÅ¬ÆtÄ¢¯û ¤µvù_‹|BèµŽØ¥˜º2ðO¨LSƒ´,#+ÁZVf%ÂH<¤§y³•k¯f"›„5Â¬!‰ZçÿlCh°Ã[Œ¸[p€,—Òviß®¯TÖ4w‹7d´’Vf=×¨;›#dØ?nWÅ±šæ™45;VàšaWÏìÀ:JÛ<¬±ØÓëëèÙ¥ýàD#ŽÇØÐ^~uÛi”æ˜“­?ÿœðÆýòyÝ­=÷:f¡²«ýB#Üá:?³éfÔ‹‰ÖøuôÃoyªf fÀvýV›Æµ_?:¬ÄœÃ-_QÜ¬!V]èGt“Á¿H˜DÃi˜K€„‘V–ñhhZªˆã±jžúÉ”6§Z¦¥‡Ý›ºpz¼À÷êJ¤äÅápÉ{Ï±dÐšË‚1z}6$[zi\ kö|SL…kfjâ`­?‚å,?X¬¬Ž×zd«Nk>R¼÷÷G5ED§ˆLØå÷“ÌÌ\(ƒ5¯Ž„°F,}B6Ú`?G¹šåçƒë—/_¦ý§µÂ–¬ö›Î‚jüY,.œ»zýúÂB½KÝ¯DX1»F'
Ø\žDÄEÊó ¬¢\Üv‹îC)‘yyH©Ð¸$…Q@gÇÉÒgÂkëªuFØûÂÊ‰$J(g*'6¯¢½W«nQ¹¦Ž½ðœjŸí¤Rùùîz{É‹•ï¾ùÎ#}¹^ÌLJú¹HŸ =Ï£wt@mdEªC‹`íÍ[w~ëÖÏnýîðË©d„€L^üRÖ`!K„ŠP×$¯ÁqÎ·_l¦ãUí¶ÛÍÂe~,©R‚‰Áh…æ‹ÖÊ®eÒÚŽÝà°*7àŒw”ŠöoŒ[ŸÕÇsk;T7«ÅKq¹™4Ãn´fiÅt¤Qmffg)WSð×ÂZ9®¬­Ý÷$M{Ö§£1´Aà®‰`¡›*¤µÔXãYîßýÍýñ3÷½O1.#+Ðš.m¥\TÿÞrî$Ê!=¯ù±vÕcd5Vã1ŒÿôY»E¡§ÅûÝ}$E¢½kpb‚®é\	[`šÃº°Ûïíkk;)ZcXAXóÎÈcAûÐ˜‹WmØ§ÜÆomE2Î†ZÇˆÑA>Ï[L)wéÒØÉ‰›GTyD kÒAT°†M„ùDðŒ!¬=ùŒlNŽcÑFú_§Ó)’ )¶Óy+mÌ¡®Uß02R `Í5QöIàK°öN æ<K|¹šP+ð_Ô4TÖÌÐßò_!­|ž”•h*§¯>¡5"oEà*^Ðk—GF«Ž·Ö©»Z5š@F•8Êß£æeålOàwÕÊˆÐÞåÕø~Ì>Hc<t¸·ý„Îÿ–ã“wµp=yÀVèpXíÍ2‘¤6FÖè­b2è½h'j] ´±I?GÕ¶kjþL 3—	¡í™´5'#Èæ:YóÖûGC5ýa±f¦Žk›êØùáù³gn~¸|åÖ­+wþBär†¼Æ¦B‚kAæ	å„ûßÝÿ®`eMåŽ˜@zXó¬F(%føÀ…Ï-Ñkm¦³³¬UTàÙ?DŒÖá™lHE*2u£ÀÛ _ïWTV4ˆÞ*"©^Ú_c”“h*€hÝ»‹±4y«¼Fíêl‡ø‰ ÊK%\Ã½Å'B
×|kÂ[Œ„´N8où™þVc?œ†ØÆ-Öx|3M•l-Ê¹Ìz•GYíZX§¦/«½ÄÕqÖ¿J -ŒÚÔmÍ46N;}æÌéSÂ5SÔØ>Õ‚å!Û§XC[c34	½„g=aiš·ÐP¨­™3Öø1#Á>³šb?d:ŒHYsEhÞo&#r¹ÎØÒ·, €ÑôzNíÌ<¬)’«!ÖQYæ«€`=²Ô8[°“MMq#¿@ ¬ÁF"<j±@ys¢Z¨­qo(5ðÇq‹ëîµ¸Ýz4óó?¼k`àù©{ÀÚ8[õ[¦§Äýs‡%ô™f&íNí^v&a/¼] GSã¦ôÓ
™ðèolÁÿþˆT  Â.ÏNkq¿RS3¦ø–%k~^¬Ð˜«í©ËÌÌlQåÚÒ…PYsÁÄy÷o\Zº9Ì7ˆ‡í?ôú/ðì·œë¯ª¡¨!«Ì,²eQ°¶|N Ù3{ÝÐ~^ \ ŸnŸöì‚×4ø<¯kJg¤±_Ý¼8†Ê‚ †xÀÚc–”œñÔ:·~b/õkö=\(ã-8Þ›å­½£à¾ø¾aî_³†8¼	•²ÇÈaWÍ²…žzªFGõPgL9õÏ…œÊfu®ÉWÿXãPÞW¸t$þnQ&ÑLÍËðà'` ºú5™ˆ`ñhŽ#ºŽ$Äg9§‘ „m¿ÖÄ?>ñì÷7lGòÚnˆæ€ÍåAn@Tc¥¡YÑZ«}ÙU„®l!3Úh…šFˆÖ¶ÛC?áüEQù	þÐqYˆ¹”Éžiæ© ¶Ó™Ììl$Ryú3TÚº(ûÓ)SÖÖ¿ýmC‘ ’/yPE¹¤V9ýhê•µxp0ÒÚøõåñèøý_ñQHk?(§5ñÚ$öýêDKDi¨&ZãkY£5®ŠP[Û»*­­Æj<ŽMÖ@²v¼þ:zû
è$¤®u‹H®ËãçO›_Z<6æÔmS§é\ª¯;—>)Qm…k¾!¶¤%AêÇ¢ó^Üf‘T”;çdyÜ8X•º;G1íÏ;'Ù&&'Þ~{bzøÃ›x‹XË’¶¦|Ü–ÿ:ñú+ŸˆÖJƒÄB°v²³º&…$ÓHÊRSJd’‹~SXS÷jE¬ÿé§—¸œ8±’²æií4ÉDœ°¬y^‹JE;óè©™•œ¡¿6ò–õÀ©¼ÓaàZ“‰„Œ½*r¸RDÑÖœ	ä@AOÃDÚÙ¶—õQžS8X`ÈuC%Ìñ‘›¡+})®qvls°Öáä6\åRªœÇr‘%jQÖ@Õ²³µ¦·š†Ö-œÌ¶ã6Âþ÷=¬Ù€1ÂAìÒÔuÐV(Òâgðø|ëUk“Š±º=ØŠ|pòÕãÍ°Æ"XkæoK3]ëÈ„DZûðÒÆõPÖnÝ9§‰Õ@6Öô[£áÚíÛ|ãOïçþËÌw_¨éò	´¢)´=ÐÕLXÖN˜IWõOã ÙÙÚ6[É™[Ô¡Ñ=É¶ÖÆT/ºZÝ„ê)ÇT»VÙ 1ÒÛÝUhâÕhjoê¢Œ$Û‰µ5Æµ¾\¶	—ÕD[kòežñ²ç’'4
KÝ‡‘‡£–KùŽ„ƒ6ŸÉö6sƒDzkg¥Ï^ê•-¤sù\\«2¥;úpËþÏJµk
?ù“ÖØÅèXíOHP¬Ö‡çÀ4QØ\Ð9{Aäö)‘§¸uÊYAŠáWOäë9ÿGC²ÖDB>OS·ü~ök™e½Vrƒô¨fiBµÀ_ä9ï/RžÉmeíÔ–z¸¬å^Çg»ÔÑLš¼6Ž,	«´ô_ ¨€*uÍ6;Hˆe0DÉš·ü¬™te Æ¨ûk±æj{u_ÓÐ¬}šXMÐÚâ½{[Än„@@Ù£jšõ“ºˆ+?s|ÚT;2,eÑ"YX¢M=iã~&bWÕšè’‚7{BmÊÒ>§¡‹1žkV(ºöëó¥Ö!•=’°•5åÓðíä´H¸!Yª5Ìû“7oÒj­.C·µWwTþšm/Î,ÝüpøÀð¡w†5ÓÕ€uë…}}þ½÷îß%ò2>ê°¶Ü¿·@›µë±…?Ó['-£5¦ì•b†n:y•W¬­q„i:q÷‚:zsÆªY–‘S>´!…%×Ð¦äz¦éä¶V³î'¼3¼°·”Ëç9+0SíY“`ÍÕWÛwi&¢å×aWR ÈøJˆ#`52,Äj%Vµº»¬LìgQF6ÄG´ÉÚ·uÖ³1ÿ7e3ªÚëÍ?°r!ä†°½‰›‡°HÚßÝŽ¤A¶`Çpw4Ö$ÏnxBpµ=ôí¤µO°hÖµ]+ÃµreýÍÌúxeW:Sò0Y¶âÉn4525Ù†	ÉoÆ(X“°VDdóì+‰¶æ¨vš¿œ•aÐžë×î[;[‰³dÊÉ¬Ü?dµ0€µrš›ÆŒšDZ¢ÓW-2¤µWVÊ„$úÈ–Ö 5}((X£órT#V¥µÕXÇ3ò;®M/
MoÁ,íÚ›HÆëê-Ð-ùXBm?úñ(4I‡ˆ¦G;û†Ž‡ñÁJö"÷?]–»HKÔ¡åÆäFI°Æf…}O™+ÆiG32­aÝ?ÉjTý·þåÃÅâù@jÖìËSàÌ
ž“ªµ@Z›=®k)hmç~Ñ™ökVøÍòµ5T¼ÿG°Ú	ìûË2Ú	Áš§µ-j,b5›óÊ·„_¹ÏMN_ÓŒI‰S­•óÚ7z9ërT§†KœhÕø¬Oyž:å‹WK÷¶#ä'¢€£õð€Ÿ‰h:õ#•ùöÊ.O®`/£ÈPê.x“ýAfFü=®F_ƒVäª/ldÅ°DËB ÀZÂ«kêÉ§iâ ë²Æ?#ˆfŽýÎÆZÎ1fé©“D'„­?‰Íˆå@~Ðl¬f.#UÍnÿÍªª3Ïß:îÚ­Û·ÿíß>–'ä$C^»rû£+çˆóàš©kÄëG^£díw -°N#Ðe!5Okï€k2³á‘gn3ëá´4ÍÖ’ƒ¨¾ÉL‰­³¯sÓàÄè„Ý­¹x¶·ïnl%y¸©=ÛÝ
¬ø¿ÓZàûì^:™#¬u—x!…Ýj*ÀZ-r'Ÿåå—*ÖB{‘c®¿Z&°)˜B-ÊŽäµ·DHSÖØ— Ô¶}¯–½ìÑ>ÕøJµPËZYX¤ÙÕfýÞ^„æ‰Œ)ºW`VÓ¢š6&gþ?œaJ$å\§¡ßwN›m¿BÏ†é¿Í!±ñ)e9úƒxXcÊp0‡O>—P¨*=vêˆ á˜ÁŸ¿VS€k&­‘÷°yó~/­Q³&÷~¬û);5.ÖºwoÑK0Æ­ÍYh5Sr×œrf7Y…Â8Ï’l¹¨ƒZtS½Ä3¡ÅaRÚ„L-ÞôÑ´q[@k÷¸]ÏÉÝ…ˆ§Nµ¨ã©¡A-¡Ï&1‘)ì×v(¨…êXìªZ4J$d*FSKìh¬~6n¥´>L*øöÂš`ãú÷vƒVLdQQ‘Ù“¡¿”Ö?ssÉkK}â>q"°ƒ|Ž;`qèul «]&û‘jµÛwÏþú½»·e/â:¬ÝYÀ—bê÷Ëç¦®þž§â)5zšF¦<!¯ ª}èH§­1'ü±bà ÞJøõ£z1É£v9õŽ/êØ²{d;ÔÛ>¢ó~­	"A:cVïÉÒè­NYoÊ—ÇÃ_Á¡¼¿ôlËG¡G±Z¡&È…7ï©j˜Â£:í6é#nÈØškVoöÅ›¤šQû´× ÌŒŸ¥M‘Û¿‹m¤œD8Bˆ¦)ÎfT³j;Èœ´*5ÍÃš²%©mu>![¿RYS€i<€+Y³>Øf%‚ï£=L¨e§‚ý–—¹9Š¦e°f-±Åö$/þcˆÖýúÏÈ^déë`=Ïì[Zª*S×©*àYòµ›ö<6ØaX¿pwyîâýå‡hírZS ­±ô™Ã‰b5€ÍgBr-c«öý«±]“µÏœ{x{w_·!»Pzûú†Úø¾ïXÙv‰‚AGŠ~ c¨j>šCVs±ƒ$ÈåûÊ‚<ûY‰Ö4ûÁŠÀ2Þ¨^(“šº:3”¬Ñ»sÔŒûGZGoÜÈæÇ”)]íÝý²|ÔùHŸ[ÎSBj\-ž¥@M1H!0&ý¹Fóì78#»à„}ãÂ5±W,2ÛÏó.XÖž^1Ò|¥h‰í1PœfaÛVMw¥€šµ[Ô±Öªƒ’…uQº¹bÔˆ*Ã´ÃÂYSHÖê¡6Íl½%µGãAt*ÇO™Å:gGñî ªœ“)^[²­•P€z¶Íig®][•°•</s³ƒ5OkVdÅÃ¼Ì@øTH`(Ó“j
néyÞ•­áÑ/“©{ÌnDè¦ƒ0Á-Þq„	ìƒX¥½c¼­ñ÷df’Ô¸klHd««¬¬“ÀFlÄðãâù+ÀÚòýo_>wå‹[·Ö>þøö•sW>ºýïaéÚÿ:Ä_P`O#À§ÂÚïŒÕ\:th^[_µv:]µ¾˜®\Sµ~ã¦LUº¯1Y•n£µÄ`'µ”Ò}Õ»kÈbEEo–_*ÙiÊÚÁîÝÝí¼$*;Ä‰¥´@
k)h#žÆIÍÃÅ*Ø€/çÑÉ†Á#aÓÏŽÖh¿æ’¡ˆ`à9l*acd—ÆCa±Úç_Áj®híOT¯18T)åjJ`tEjpÙ¿r™ÃÆŸÀM„`/¦2Y;`I‘ !ÆÓ‚µ–EnvZš.‚	æF‹ØÃ‡W×¡9’nåJ×¼¤8:‡Æ$eíþ/Hç	ª‘IÕœ´æ@-4ïGY[€¹`&® LSK³zu`s°YIGcè8êá@k¿æÌðÃŸ^°ÆÊg´tC{H13ƒ8¶köÄù<Ó`·/.Òpû¹›J˜C²90poq×óYÿzèi„‡Ì¤H²¡8`-ô!Â5ÿî:Ná~G“ÖX/>€5ÑZ¬¼Õdð‰³Úâ‘œûã\Åi6qqoPcùÖAÆ±zWd’êmœ4/ÈµEoÜïM"X,€5"ðžRÆÛ;^W»Løø¼ˆî¿wöîo>úx#®Gx†øÔÂ«ss-”¦|G§¨yû?“úü‹ä›ªÙT+»‡7hcµð‰ñì,ñ¢v%²ÉE‚ê K»(d­c&o{á3ÊŒ€Ô"7˜ø›DvJÍ`–%ã¢¤žØ=<©¬(UWZ×c§vÎX?Êb˜ð—‹›e\ÛƒF÷7š^óG@M°&þÐ\šløY«"M±å1¢žØÜ¬Y½š³ûwÍØìjdI’›ˆ‡û‡l(k0œik_Q³¢ÙTÂ°&è“¹ˆ³Ù¾]N·¿¿}»åD*Ir§OÞ’~f¢kë¥n í{0Äãè²ýý³ýökÕŒ‡µFž|u-Y:ÃÊ^2¥Ú¯xØKl^Zcvñîòõåû´Òg¸rZãÚF¦÷áâOÄ&¦iã;ÿ°«±Yä€ªŸˆÄÁÖÝJiËk9+ôõí~¿¶©«]²v´i‹J©R¾wpÏ
ºÚÊìE„µ¹Öì¼å¿vb©¬ˆU4¤S8 q–9ØVè™ÂÂ¤@[ì¶hêíC]Ãf¾~d?§Ýò†(²ñ§dbãÄ%jül£éÁTà‹0vž|dX‹ÎVTG×ÌÌ,|m«øÿË×xiít=)TÕDˆj¡TWgþ±Å¨9ãÀ^`­”+€^DV”»K5®ÃZGžÍ‚£ÙÒïTÊªP©V'iiž2}Ü^ÜÙùëÐÁq™í––}™/t «Ñ•OåCb¦[Ý91Ž’s‚gQ—ÂV<œ¬šð%8”†Ú8Hƒ”¬ÆÆO6Ÿè‘¼–hŸwui»Ú=m^Ö˜OÂfb7C6aù<ƒvNn‚Òšƒ¿*•«)4QolYùgÖlÄdÄ¢yÓ&ºdS·vùüýO/^¿ˆEäÇqíÚùì_lSgºît.÷¹ÝGr¢„(Š/8„X£!®ÝœÈÅc;¡%mâ±		{¶*I©¦t—
¨$©LKÓ-þ4)Ê°¡Eé$@ZRgQH[*¡ÂtkÊÞT–6[s1êH³G½9¿çýÖÇÂ‚M9çŽ¼¶×úÖ/§õòo=ïû¼Ÿ@l¿VåšÇµ#[g¶nÅLô¥}¯½¢<)ôØ@km±ï¥µ®ÓfH[½fMk¢º®yÝ:\ÀÔÇð1²!ûúFTN9Ž<Ô3ÚÑž¬Jpecà Ý±‡ú Òî ×l:/Åq‰I–cªŽó½Hk·ešquS¯N¿m§àÌ“Y¥-d0 ½|o=›ðÎ’­·š"fž‘­ùú8,C•âæIÈ›¶U†×Ôl‰ºSBËú„ÇEr™Ö,?’U³Ó³‚µÙÙ“mØ'Ò°ùÄìNV´•yÎÂ’;´p£­íÅÀÝñEÐF&«„5-¹0ÈÔfÍ<qî™Ÿ4‰pñŽÙ‹(Ì¸ŸpÂ¢¸ðZh1®™²æ8k‹›&)àÌ9:ªš°Æ99Š´‚þ×°˜²5Á0Ž1Ð†»©§Blz†U‹INÚTGÕA<¬M5nÖ·qø6'°1aýRãöìžòRÛÂR¹åE'¨êcèô4uz;5É¢wía-¶ì\bLöS¨Žš½-¹,ÈÈ\›R £æÚ_	k#«…U<Ðòá}û@’HTÖr#8AÒßX˜6¼àÝ×}dåÕ4Þì¾0{Í„UÇj'_?rçä¯}Vã›âK8M$†Õ‰hô÷·æÝYjÉšª¸ú4û÷ØÈß‘…›-YdåŒ¸ES*5
XÍ°¶hX—fµSkÈh'+ÀkH®çdÌ,²E%Mº3B)c°ÆFuÓ)šÓ˜Õ¸¬Wï®º¢¡ÿ¤q§Í«Ž/ºoòn×àØ¿(	/J¾]¶,äP±¯€51s°YàCe ÛEAï£¶¡¢Á`ø@k(ZO²höf+Â³„v´Ä`íI³T4ßTÍuÃ&T²‰A`ÞÒZp³ÑZmÐ^°»JƒÓè	^a±Nù¼øfêØ‚µŸ
T±ÀZÂ³²åò(©u´uÕÎwÛ¢-ÓêÙ¢ÆêËîgE%­i™f@ÿðu´Y3VçŒðK²…o‰‰kFðòÉàÅ'O|(››v])¤µ_TÒ1v|o™ÊˆÖH¨I[kZ±ï_‰•xÔ¼ ‹úUÞ¤õ´WS7ä,Êš,ËûÆd½þ?3ÓIpuJ*ôtwö§ãŽÖºÕ~vod…½È¬²BX{IJX«Òoà¸UÂ¥{Ž;¨Éh	S“ÑhúèÌ…Ï.‚i„²!Ã"òW^ñWPµlgeµY=vôÓüÆe*B â…º5ü­°V=‡¬æQM^ðÁÊÚßþÝË„þ
ñXpÅ5âÒcXö’ÚØX‚Ö2µi+;'Ø1·^+2ÉDkÓb&EF={H¤ÃÂ=Æ¶&V¨#›@ÍÒ]¶iÒ”£è•Z"ïÒûÍ²Áiy¥À˜Bˆ`‘ÚÈÉ]nÑÒÚ`µÃH{,+x½ªlwbPVÙŽJÈä*/LFÄŒÑ ¸3Þ_ä…` ”),+2ÕÌWD¸3AMòGˆÖXž…èäõ†d5l8‹`,ÂœZ¶uëØGòZÇ÷.ÊcäÊs×Þúøê‡Üüã—ŸP¸&€M¸öm@k öòeA¾Fò£ïÑ·ÏÁš%ÙÎè\ïX½fU5‚­ÖV­êX³f]G_¼PHŽµ¯i¦Ê|t¬gË`­ct¬µ®=ÑOä¤
›öôèŸ74 ²ÅH€Ä’Ð-k†-]’Té¨ó„,
ÖdÒÙh'wAsS˜Y!©ù±þtMá‚ä5)šÔr9XS§5¶X¹š@/ä´¯=,	Žî¥´ÝÂò5ÿC_ÓI»)X„ÆÒà#[!¿þ‹ÀÙ¬él,Z¤™ôÖ¦);AÑ°æØMI{íHÎ#ttœ}ŒÌ9Í³š<R˜¾ðŠ·ô‰’ö>¬yT#PÖ 5c5LóÖÂ<H£µYR|§äÇyj¸æ]ÉoÎÞT6+$RŠÖ¬<í0°¦¬H¦)‚ãècæY<…9ìÅˆØèqF|¢5×{‰c;d*‚[š’2Wnhx.µii/Ê6>@"8¼@1–²¬HŠà(?ƒÐø4MYK×¼¤É–ötf6‘Šb˜ý¢5sÀZmd©ÖÄ–ðÍû}Oì²æå¿”©ÇC­ÑìŒóED³rÕm;—‡]_Ñ÷8÷ß=íÝÝ³³×¬™Çë'oËX“¤tµ/)]#˜ÜºùñÕÅùÖù©šÚù–²å‚lŒˆ{ì»/qÏj’l¼°fV¿¶É>=Kl4,ã©n…ék&º1uÚeÖTáæÈŽWHc/B×l3èÏÈ8å`M.S(pf,7`+4–°ŽJ¯"ãWÉöU­¥‹1NúæŽ)ÿ¢7ƒ¯¢dØìŒ«mÓ5·¯@,©b*M“röÄ“*Z³´ÈgÐ¯~¬¡¡I|cÛ¥oiŽQ$ÛðÅš®!¤QHfm«!)y8ŠÒ<±1»‚fk“…©Œµ¤mkmÌ„`GÔ8é¬ÎÞŸ\M˜¹ÖØÿìZªÅ‰¨˜ZÒ…j ¾’h;¦§Û"Ióƒ\¨š«„5ßÁõÓOŸæ÷I4qšœÜ ñB«­¼0Ó¬91-ÔÍù­q„µÓ7çoz×+`í´Ö3vÌ¤5DVkFkÛ8ß‡k+±Wb%­ø»-é<çƒóŠøè…3ØõçùbáØh¡Ðƒ6¢ŸèÙ´}ùóÉä@÷Ážhrâ÷¸q7Z»OX3eíÎ‡-v5Õdyj³Ê5ÊÛ;p_Ž+W?^ÁcOBËèxOwÙfŸ‘ýhqñúÅ—.^¿ÖHacz÷˜NÊ¯ÂiT¬oL$í7Gr4÷¤ÆÍÃÚßž[5¼<Ü6ÌƒjöšÜCX›¦Ò¥å.¬ñZ.™u˜Þ¾]Õ¯«Z ®q[i[©^ý­!¯’ð.Š%$D™~5§o"kÂét–0·ÁJÑã¤ˆ±Gc‰¹+Ph(qz.rqÁ ?ëKT©)YhWm@[“g¶yŠªªœ×T‰,ËL˜V©¦¼G70Y(+F31Író±Þ¦tR—¢¶`‰9X;èìû™(òmÚŽOŒ³l æC%kÒÐŽbùž’ÔþƒQ×º.1›ñšM­[ö[—Ôpíƒ·îœ¿uîüµw®`
©øÃŸÿ@¬–ÑÈ‘ýwm¡daMö"­Q±†çÈ½i¤ÅÔ­&û‘TÈÕu«›W×µR°ÖSèékm^³¦½£c¬TU¬‰ªx¶¿§§íÜŒÌ–ëë¦%6A&¤>)&„.x×HZcs=[u„àqF?ššRõ¨»Ò[Ä!›>U¦n¨‘7ëw²Æ19ùã0	â¹ÙŒ!×?öØcfàÁéþµÓ§D%¡-‡ïZ†ëÈýatV©²IÄA:ƒÖ¼”ã
ÕDa¢ƒùiØ”ð8U^ ’8q‚\È6„µYX†ç?Ïå]yX›”Âå›§UÂ!^3eék&n“í™"ÉÓÃZ@k”¬é¶ÿ÷»¶Ø[Ý‘,G‚,HyŒˆÖ€5Šƒ‹¸°UZ‘±’kp—ØáÃÐ‹d>Ú3XÍ;uë .á4d+a2ÚVk“¥Cê †kì* “¼eÁÌ%Äé%aµÆ^°ª¼§\O­ÑÖ,B2¨ÑµþæF;n†ü-N,·éHb_‚Éã3kVFè2 ÙÝÇ8*RsAd¤¥%Z;-•
ð]Ì FypxÏþóÚCÃšùDäª"E#Öè}©[ÆYÄêŽž½Öø†öUÅJƒÖ\ªìÉ“4W#È~4V;¥™°Fì›·nÝ¼JOì)§Å(j½epâÂ›ß`Zc‘š¶»kkõ®¸Í×«™§#8ÍgKí7³·¦£´²±§3’SŠæÙd_èk²
.²±±×l|uuÇÒÜí¨QûªÑñG”³<]âKgSÊ]Ç,X}JˆqÊ¤w×yhÃA@;N²Fö·Bµ§×Tƒ†\%aMc³>n‚›k ¬ÁDÛ!$t4f@ž²(Ù.\cÛk×>A¢$TEÆ¢T´µ›ƒ?ÙŒ$,âïèâq–á1n3æÞ«ÿñÇµ†C4=›ÏþþZeDÊRDÎ0ò2zµS‘šc¨´	lÎÁ?øk&ªuu"Ò~özžÛ¬xaá/ºAøL¯Éå’‰öMZìäMÐPí>V#ü I[$¯àô=Ezrqò*©·O>ÀdZ#îÒÚñž8>L„tç~çX{YmEZ[‰•xä² ÿgw!¯óFvQ…ž^àwf!^(v?>ÔÙ_à7YoY»VTØ5 ½íêK&Þ¨u«ý¬²b-ô‚üPç¬À°™Ip×0R›Ïæ#­­¹dº˜6·'z*Æa´@mdd|âÏÞùÍî™ï˜¹Þ|ñÀÅå{*Èbã¡Ë×¸H5ò“	78ŠS½–0FM˜}ÇPUA42‰®Z¾[¿Î­²‹ÏN/­QyRæ\ú¡$´0MoBÿ~ÒSÒj¸¦’—Zƒ²ÆIÚ”µ^Õ–|UREÿR<•YÔWì¤œ8¹|Af:Wóà‰ìaY]KVåèM¥i%ecš!û²Ö­“_üŒØ—ÃÊ=`Î…\žª«¯ …ÙJ
Òx=Ó‡LYÃKÄ(ÍóZŒ1ë«1Ø%H£]6Â+XûÈ…ÊÔhŠÍã£ãV™Èƒ)÷cŒÑEÁ²ùyuekaKlÂ{ŽšŽ4_¸‰´ve¶ë&úÚå;×Î]¹rÃãšÅ·ß~{òÐë·yQWìoö}úékÀ¡ÿ‚d‰{à/²{ënþŽuk.^¬[µº`#ÈsìKÆIÌí`‰œÈ1¸V£´’ë‰\<ß=ÔMç»âœœùßGäÇúºój½îÃËê¤ž¬±õ§þP°Æ#887O‚G3ÍšÛ
k™3Ô÷Ç‹
Cg	®#¬ýZÃ˜!Q ´¹‘@‡‰Ö³
t«¤5{°‡Á¡©3†”_¿Ú¨iŽWáìÂ	kˆMuZãÂN˜MËóæá?ËhRŒe°aÓpwJÑ‹ó/š¿çG3‘!ZcÈÛÓ¡OíÄZöÔj`-¬X3wÒ uÛªpIÜMYói¦¬•)‡gÐ¢óÿ h[¶Ð‚„f!“ðeýÎ„pŒñÔgá«Út8£µIXÔŠ¼ù¶k¶L0µÕK;2rilXšÚ²Dknú£É?dJÿô fßJYê¹?7‡ÐÌ™B¿BeXpë¥9k(`1¬ÛpËœ2/IE¯i¨c‘	é¥µ¨SÖ4üÿk&­åh°&NÛèŒ]UÕžkÕ”	©)îk¯Àw¾Ÿñ![vÿ×
û[Ò¤U±vZ9 k²$ºyuñÃ›7Ï_¦¶)^ÁÖ=>ŒU­Æ‚¾¨­ÖœW¤!žÁ^`
,àTKîú„ß³y~È;¬‹BN›„^²ˆ"@6ÆYbëÈBIUlŠ˜¾ó3€ž¤1vT§8%IZz×òöYË·Cª¦QMÜR¸V¤Xd[/ï@Ê²Ÿ’C0	‡¿úÓûÒÄÜ&«9HR5SÞ,ïñ	D-6Ck"$´-6ƒµgŒÖÈûß™@Šùä(BxXƒÀÌ‚3càSEji¢3ë‡hj,ðd§ÇáZÂS8¯,\Ôûp-àÈÖü
ÙË:„»²±À<?jÎ q¤XÁ~ú®@`kŠ{aí•°†²öì¯Ú[ÇÛ©Þé@<j9ø_XÎ`Ý­vNÐ˜NÏ%ã‹7•	yçfE"dHk{®õôì=.ÑÕ•­Yd=®9m­ISW¤µ•X‰GÌ^X#ú;ûû7ôúHÑMg6å»v½pøp¬˜Ç2a°X+âüÝ…zÐ=1>ÎwŒÓÕ,¬ýË² ¯ÖaÛP—)Rãë4O}¢u¼Oß|Aš1Q›p1BqÐoßùìÏvxçÂÌóˆç?¯iòJˆM”ó;ž÷Ä}db¼¦±&Í9CHy¢¸ö°UæýöÂo»/ô€ØBX#ä¢P®÷”æp+ÐòX„ÓÄeúÒfù,a¥tÔ©ld¦$BÙ)Â5vŽ¨U‚™>6ü%jûPdš#¬pÖ8áÇs,‡B+ArŒ‚ïyPÎÀÌÀêšeù_Þðò„5Y‹`=¢gr'T5¡ì<2Yíô!ÓÑ¸32d!x¸ñaHk
¦0›s‚ÜÐšñZ µm¤AÚ9ÿ½jzÝ‹Ltu„öý¨F n¬!Á½÷³Ùó7.óóêÊ¼síÎùË”¬9'ÿÿüD´vúôë3û_G]Ã^ä`íÙW 3³ÔŸÁ>xM6Ïó\^Xž^}–ºµÕuÕ«:¾÷½f¶ÿCÄ»Ç¨_«ëX·®c¬ìø±¾¾±îƒýÙäªö¾öQhm,í¤;c›;k}£=…N+óëìdM6JPÍŸÒ'Œ³¯q­ø,øðL!5Í MÕj>ÜH»„i¶BCƒv¿Åo5eÈa©O!­1gŸ¹\H¸‡[%ª«YwlŽ‘‚NË[ (_›íÜyD#	mÿG]©Þ¸ 7È6´sŠµ™èã²ò|ésä¿-/¨ih$f…œ€Šc%Ä×ÚÃ;ªq.ª`-Lƒd"TS$·ÐÒ±Z˜	¹8U^š
‹ºdÊ/Þ2¥ÌD3ÅF`Íá¢Ôl×=zìÊ^N0c_¿ƒöÐÜÙ;²`ÛÄn 4&J2Ïm'<²-e{9ôRÃö†r¶Ôm9•M‰± ;©«îaFì¡Ïug@ja ¼MóÉó–ìoi”gž–„ÄÆ¥¹6³í¯/7(¾SOìÝ¡»H9¬R«œ?\$µµU¹ì“0U­µƒq¢õ,¨6Lûæ³mÖ*”5byùÝù%?Ë¼NœFYû#¢ûÉÛw> díËÖn}¼8?ËäãßÏoŒ¸ðö ö¾í—z•t0¶TY¤6XñšOñÔF{ŽŒ€t–ÆQ©e)ªa½o Ìól^‰ŸåÒ¦ÒÑ˜¾€ù2ç"U”¥?¿×ëåþØP³mG¯B5lùXJ’g‰hœêTú*›~}-èË‡orÖc"»åy;œð‰² ÖkÑÄÉ¡>»ž4G¡–éc2ñ&üB0`LÊl†£¹‰È\Â´ RÌLþëŒó±^Æ"ì£ÄDŽœm1 ÖÖšÀ†½#8&(cJkjÂfŠšBš›:aƒhÎû_Oæ°Å‹¶÷Œ:c[BäW‰¤Ó`©2VKÑLä¨qTý‘¨ª5‘ôa5oOó`eíÓWëÚ×­Y…’ÛÚÞÚ©Ñ"E&ÞáÄ¦Œ-b¸­á
i´¶5,[óÒwÅXð£xWG"8a»ÂµmwmÛ¶im%VâQÊ‚ü§BAˆFêÚ™’ºú¹’34ÖÝß;#¥$“ç&Iðñüæ8I^°ÚÐ12F„)k¡°æ`Í'ANúê´{jrÍ†9­Æ,äÆs£¹t}’/CEÄjrî—ÝžfÇ~{aëÌ…dBRN43Câ€‡59DÜÛü”X×õê«ï!ÈM ~´YK§í$)`RÄöpÁSç–MY#@¬¬Y³Ì¯áZSÅÁ/ž1nŒtî¬ŸÞ¦3{Pä`Þ¤(R(Þ üG.+¡M&ûÞ
XãŒlŽŒfBa×IkÛSûM½¤*tNÍf†ã °æ®õŠSîpT¬ÉûQˆqÂ.êäÏõYil¨h2™Ä¢$`M¶"Ä2ò„C7Ÿqšš›Áh»@+Y;H k…¿XM#ŒŽ»€ÕËŽ’ý(=ÍR;FF:l-ø¦ÿ¾Bf#lUWÓo»qþ­›—/_¾ýÖÅ_\»|ií“/ÿýÏÿþÉÑÚ¡C'?ß7óúéÓŸ“ð(eíµ Ë	JƒtñÁqºÁ¢nõÙ‹ËÃU«V¯éøÞº5«kÝÝËiÉ5¯kîëïîkmÖ†ºÇÚ«êšÇ»?Öº#qhÝ‡†º»wð·THfY»Î_XÓJ}VKè?A»LJ
*³
mí.¡i¢µ6ô!XëØt×fr!Ûð;o°tHá“¡¸{^¸Èf"·¯ïƒ5î„¶Ú^¾I6™NÀqÛ©i¨Hék³*WÃzÛxbšc4bÊ¦*›rØ’4¤€;EÏ¡÷¤d@f‚ZÌnkŽÐ‚™·úgª½¯rñdAš²Hk[¹¾ÕÚ‘ÐaäŽ´µEÉàÇ”2SÔ¤³-M9]Œ0XÓ:ös.ýjŒT§Y»4çãÏB°#ÖÙÌ»{86s³%–Û¸n5 çÌHÊ›¶oÊôÒ¹¼e³Ä<<H¦O@Ì.ÓÒ½Dlí.êŸÃàC5XCëœ§µÛ¤%EÎJ:ôó©-B¶¹¹¹eA‰°¡¿{ÉZØ›¹p-¤4MÝü¡F`3EU5½sô4nÏ‘©_Üm‘Öá³k†¨¬yZ»>ûK~¿»ŸHµW;aM²¦ôZs¦ýÈj¿ûL;1_»4e/iØwyXs6"B4–Dq®­ëˆÀÖß	rQ-³^°ÄHç4^Óçk>Á¥ŒÎ]Y3¶àhD‘>iÛSY’ÛIpoÜ´}›2Ù]ª{,Ã[³v ©<ÇWž¼R,J2š",}XKñcöQ8c>ÂŽù¬ºòK‚c=ÅjÄŽŸ¨–íðû¦O?ßßG*ÁdÍOeš*Ö‚ŽØ˜†€X*4c—ŸÓòZÌ†M¤`MÁ! <F%Ætª_³¦Ø¥IÆ;/~ˆL“Ð^D+`4·Š%JlP!Áô‡†hfüÈÀüM8¸¥mþ\íÐ’–€èS£nšÖqk¦ÞžHÂn‰Hî¬NÜ®bMZõßN%­YWì§Ÿ}ölu»P/é|%¹ÿµ ©rÍÂd¶Ú¤–’'N\•´V½sOÙÚ*hÍâØX!øŸQ°Æ-ô±LHÓmL{W¤µ•X‰G(þG>Ÿïë«é.ôº³™Î]gÎœq?3äGf±‹$I²³00Ðßßgùò"·.Ÿù£°!v kW—üiš›(Üå A¡Tí«ï6ŒF:0Øs>îj³³iò›Ïvk»woµDµ>ÎÉ¯©ðÈç#r—²öê«ÿ{]1-íK:ÞñÆùa<ªÍµ-	ÖŒÖÂ¾«¡	¥ÁÚòôBÛ’™Šx«~›:i-_´µÑ iF§bNÐ^YãVSdÚcËÙ£Qïšä–Ü;€°¨#¹t¹U}¼b°–
]&¥®ØÔ£imSI°V2p‹5™Á¯0‹0ÌHä.ôÆ.À˜)ÂŒ£*=¯¨¦.­Íš‚²òÞ
5Oi1M½Õtfø°£í
º¬Ö¬9¶Ž6¯ëê‚ÿ»Ž¾¡š5ÆÍ#<0égQ+ 7'¨9fÓ&×/|Æšk—Þêºpçòåóþìâ%6Dµ/ÿX»Œ-äé™ý·|óÍç‡Nšù†xéYÁ¤5‚ÙÐÛ>\FŸu–r<VW×M/Ï­ZU×ñ=!Gûzº»»ûí}ÌŽ5w$âùþxë8WÀ-5ž²X¾&Ÿâ_œ Öúd¬Ò/¶ÍÐšzÑ™¶Æõr–R½úíäá46÷ç¬€5ßûÚÂ­ÔÔï¶úôfÑd¦6Ùòïç9Y¬)S0H„4àqÓPK²Ï1Û*ü	=Åƒ¾Ë„c7D³i‚B5Mœ·ÈÂììÂ©ÉÄ”oõåž
ÕHe²¢´à(†Zƒ1ãFCÿ’SÆxˆÕ¾XÏ”±§'6Al™=Té/‚u¿ñ™ÉjšˆÜGÂ`÷EèQü%‰Lo­Ìti™åòÒØf×žÓ ì?Û$ª4Ó	Ú˜M¹¶l2’tQ6ó~7ƒ³Êzµ»½4@q“´·%ÛX_.öîøÉöÞÍ¢3vƒéÖ<5êCt>"Ü0 çáyïyb¾ ü‘N½è>þ@ATË·0xm–—ì«é¾tÈ‡É‚,s¨Ù¤2<¬=\˜7„æííí9”5yŒ$X9¼|öìÙugÃ’µ0ô5½ì¾¢\»Fâ™NJ‡NžþX“Wì%`]íKc5`íTnþæ­ßMÑÐ`icÔ[ô×j*kD¤Ö/Ú?ÒXÍÓÁÌ0.´T‘Á!útËš€†‹î4Ñ¸©‘ÅbciÛŽÛ`2ðŒIð`Œ,E6mßÇ]™˜%0r1Y,–§Y[‘•)ûÑ—Æaû’HeùöAFëå+¢—yõf“{I†Ë®¼<WâJÛ{!C=CÍ5ßÿêOhkFY*/SA˜Ú¬IÁ‚ÊPÖžø_Oh >Â€Q…bïkTŽZxß»‹*v“	¨GÍ <K‚$ÓDiŸ¹tGÇjw‘Má¦äIj;Un4Q ¢ÔñúªUs®”ÏÀhâB|!dDÒœ CXSÄsã\nÇäX“7MKÿš¹i
¹ÊZ%U^Ó<–
³œðM˜mmMF’üi¶ú×Y,c'Uäóp«q&Y¼¬-Î>¨ÛšhÍåBK&{ôƒ€´Õ l- µmžÖ˜rwã¿[¡µ•X‰GÇ2/‘²FúãP!ßÝÏZÛ¬3‡×Ø·¨*ëMÑ»`¨?^èo%Iñ=¿x°°v{Ñg½¤‚³SÄõ8•M#ðPŸÊ§k±nhi÷XÏ-y£3w¶î×w*[a«Ìúp…<@¹”´ÏZe+,Þ®j¬Ÿ O<Wµû0í;ÃZí\mdÕÙå¹rË²Œ¼]é0âaÍb¡‘JXs¡¯][˜¬Ôg€¦Ð$REyXÞÜk$£é}Âl›³E®Ãê©]Å‡ÒÂ™¤ƒ\Ee_”9

àdé_ÒZNòð•Ô3"ƒSBVó$Îà<­ÉÃ£7)DÏPhž©'R"9Fmz½¨ÂÉ°*d#Œ›œåHè-FÊÖˆÍb&ÐørPQyAÂg šýu'”9²ïÅ‘cÄˆr'Ž%j«»~ÑÕA:¤Ã5ÉhšÌF kÿçº.2¼vãÆå/\ºrå
œvã2Òšyø{äÈíCß|33sòõÏ?·šµ}
Ÿ
Iä>¬}J;ìî2k]UUÝÙÖUÕÕÕ­uuu9cµƒ£í¹ã{p)ÍU·úÕÉ±ã£ÉBwwžúut5©ˆiüE?úh¬£cÈ¬`Mt&sÕ¢”5dˆX%¬1a-ø4Y
H»•r’ªüebl°ˆm¦zZkr Óäh†cü,ªRÎgÄØìk¥òË1¯põ÷2›ðD#¯¯	x0 ç‘î×4äD¶1Çc­EGíÚlKƒÁšuf›gäìŸSQšÅô41;¸óÅ¸Y°"åæºks°ê®¶¶(ôRClçÜ¬9X#î:÷»[Øjm1ãmN¬ähÒøH™¢1ñ—Ë|\Ö•™±û«KþíY5övxe"ËŠš¨Abmb´ mëX9ÅzÏp¬©/³Eª^™Õå¿ÍyIÈO±G,L\ì|‰{	Ú9‹Íì³Õç>Üvj2€8>Ý³Å­y\SùZ¹Ö$Ö*ó Ë~r´=Œ}¿ùöÛ ×Ú®šµÖŽÖŽæä«Y[©–¥^o?|Eïß¿{÷Š¨éñ ¬f·Ïyú°vÛ9‹·®æ6^ýÝd-Ž“?¿Ð¥&k–÷È²jÕLBóá¿çí	÷bœR(„vÎ.Òölpgwš0ýQÏf5‹%8ÇöFMväI(JA5ò#­<Ye°;c°–w×,‡bPªšì{3¸Î²™wH,£¾,dÅïØ&
$k²´M'vl%±°bÄ9àÍŸÿé¿ÞÇú“ç¾éeÊRÜöþÏŸ\ûý§ÔKe|ý¡2±‘~ÈŒ•À¥énžZ=i¬fJœWÖ\%šy†<ns/¤i*>ÓÌ‡uXÓÛ€Öô|K­4X¹1…&ÉÍ4V[M:Xm?Òš»$ÈöŽñ\”ŠÃ´ÖÊd®¶jy'°önÛÜ²±š”5gY™E«Õ5O$¥—êo(ûë°):fãÆHc¤¼–HdþãÑÖnßÆ2L„¼ÏdäXmhûúâÅt1(gÈfJÚšG5-ýýÿo+±+ñˆdA~‘êï·_Ö½ü¬F7ëÎ¬uv6é;½ðÑÍ8¿N‡ú	`íØÈÄÈ{ÞÒ±Ú}¾ýÄ‡÷$ÀxXC¹1V³4,Õ7ð3·Ð
«57wŒÊ·ä¸ƒcGsêÂì»(küÖ~þyÙ÷kj‚M›,wËÖ^•ºÖONŒôÑ{b"Yñ‹£áá¢¶­çþá¥š6'¬-W(k•#4“ÒY¸’ÕYG´æ–‚<ú"a‰G­iç]yEÖJ	ÖÕA-–å	’É2¡™ J¥j%+=¯7˜c•ó#$Âq¾wž´\ãÇ¿`M)7½f'ÆÚÆs¶ R ™Ñšìõæ©DGYƒózkkÊ&v0ÐèjZÏ ”ØÛÒ/0W$A_hs‘¾6”,¸LH‚‰<ü÷¾wôèÄRÍÓŽšsÿq¼¯
P{¯™’´{‚25ÓÔ|õCþõ_YáÃ›çnÜ8®våÆŸÿ¬æØäAªrí§OþúôçÐÚ¡Ï¿á>3ƒ›„¬‰Ö0yM°¶/h»Ž¬výl{uUõªÖU«ª«€µö¾±QºIäê¨RÖÆºÇ›û’íÕ‰žñæÑn2"ûó}}Ý ¨0­`@˜…êvÜrú£YÄHÔQ}LŒþv,YNi&›j	«q7<ó¸æ}ô°™8Hk>=’ ÛÐÓØìiÆ=Q‹1éo^—bKÐ^:è¼&t³ÖYvdÐ”Í`ŽŽóñ$ñ@ kLdBÞèÎ,PÛ\—l ^xwvšMóåi-Õ¦g0Ù(Ãz,ˆÕl¥k½²J\!†DÔ{¤À^{Ëf°/íÞÂ;Ïž`Õ¬`M¸æXÍJÖ\ÍšSÖX¨l´æŠÖæ­‡µ…™êënEkn2)·ìáð¬äaXW.gŸó gOqÂ´G
$yS†jl1j3}Í¥ñ°LKk¬Änv—®]‚›&§öd²zÈ,½f»:„0\3½Bôn$·Àzmóh-z6ïØç@2åu5`´¤oé?^ñ±ÙCáüa÷¿lYû0¬f&6¨B‰XgD6`}äÙûa-´ì%d#°vR!Èsç/]:ûÒäAzVÃ·ÿêU|E&Oå"K‹‹6SØ?ŒeÖÈmÊÖ>‘6¾Û[`¼S­HYµjžîø\k<«)Þô7‡rÀ›`mŽR›¶¹Dõ ùÒjlØ^"Äm,óh0¹N[ÕÓW ëY<H{ÈReàR9%¼œJ91(b+Š$v¾ùØŽëK¼Ù"@·ïþ7ßÿÓW?~X{FÖŽ?|Âí)ÁÊÖ@7-(	ŸH‚}´™ ×Qbš
Ý˜KuX‰(Mw
F
“ÙÖBd.¿ÑE «­µ¬H63ó°¦‡SÉÀýß½IkÀ"ËÒÖX÷¦aQBÐ*JË`5«8kžhÅ„ÔvõkgÏ^×Y[ùbµO²F…ŸÜeµáÕÍr´á)èŽóç¬ˆŠÜÈ4UéŽÐžßô®æ&gçI„¤—Ìƒüû¡µ€×ú
}{ÅãÎc¤Ñò ½?aEk¡ÿŠ´¶+ñÈdAâ¥ŸÖ$=2CaÃ¶hIý…”)k|çôwfÒI¼"‡FGsÉ|~D˜æµµ°b­Ò·ÿæ	ûV‹z#-…ÎMV‚ÖY.§.XÃ¥ŸïÒŽqbBc•LŸ]<ðÙ©S-Ó[É…Ü­–ÅàÚ³öÍÊ—©c5.TÅöƒ§'8ÀÈx<Ç³¿&Ì‚|hi­>2×²°ÜV®i[V™úÛ!ª…ßæ†kèÀZ`ÚïÒ™k¾v.ø?S™Æn–»¶Ê§`°ÆV«O+éÝf{i¾¦ãàìÏ©\ WâÔÍŸÙœíìÕ:@‘™jÕeúá›c*H\?¸@Õ× "K:vf=ûYd‹9†Ù	[çs¤5E/µpdP’1ã”5 Ð\ ÅNLÓ0[tõW‡jSúlX“¢¬§í2xËP¾&em/Æ"rÁ½ÿ¨’%¨É`äào÷ª\·‘fT5V#¬éþÞSSÖºÖi¥Ã¶uð½ƒ5L!g?ÆfD=×h´f#Öà“s_þúÐÚç33ûm4Æ†Ö×ö½bÊš‹ËgW_¿^W]Å‰¹}Uu;¬¶š“|Gëñ±\ûætl§¡Ä(6ÎÉž¾‰ãdG¶ç’¸‹Ö€4kS€dgžÂšH.Ïš¬ˆívÖ}^™¬ùC2iJEõ;ÉÁšÂ¤5îþC$lu¨®yaÍ¦¥…=ÙPÓ£2&î°Æ3¦3V‹ygE‡alÖ‚o^†É?³ÀnÑU±ÁæAMYÐÉ©FÞ¨É--T§±ÂGX‡!¤Ê‡œ”uH¯:­MŠU^ü'•¯ÉÞŒˆÅL(RW€õ}ÁÌ¹‹Ä¨„”g„Öø÷ê“ »¡Í¦€5_°ÆMYG`5”µ@Z»‹k¡´&KÈEsw4`F‚µŽ´äRÞTf;)Ž3Kp\j,éÕ›Ä`Ædê8M	šã1‰gb8…ŽÉaXÃ„µZ!\Ò2(ëÇ%Ñ[™«<"8`m‰ë5E.¥oG1FžÙÑÿL¦a¯9}¦Á…`æ‹mBØ°€¶ …ºoVs°¦ˆ:ë×ì¡•5‹°ÓZùÿÑÒ1›T™ƒ{{{5¹¨k¹aß[°ö«·Öî·ƒÜ¿ûÝwß:¬l§‰Ûç/hâ•µ[ßºE#ìÅ[‹\4›:5¥õá²÷	T­y˜sâ˜SÒä4¼Ñ(Ô&tÓ>ôQcÀFžfŸ­o¿i¹æÜ`°ÂõnÇ’€Ð‚êâ¾":dJøï³T «;§Œ£²YÒ¬Ý/x
bqá ‹èìÂFŽßâ)ùHõ¬­ÝR\¬SV¥ºŒ]¨kzÙœDŒ´žÂÎ‘ö×V¦j_ýXŒÑž4Z±O°Ÿ6+åñK#.Ò”0‚Y%¬&¯eNQó¬¸…Ø\àF˜[¿Ž¥fmb3£Dù–Xj¤àÍÈñŸãÑ@ÄŠDÙØÍã­Íˆ°Íä°Gâ8Œ@ndÐÖMŸm¬¡²§Ùe`Z¼8‹iÁÚÓÃ«±ƒLHYãøz-Ü¯&?Ð2ÌjkÄÔüÇ·	eW&B†ekÜ×öö¥û\ŸØŒ¤5CuË˜1Nãm‡&¦®Hk+±Jäßcã§tÓúÃ»vQitf0•ï …S¾©%VH’D=PHöðó[°–+¤kÆÖZCaíY×&ƒäG_µ%lÄ,b‰ý=&Vôúiã£Ö(VS>äÁwø}áD*ßr`ë…±wvÏì~þ¥,FðhrÖáET`ííæ‰‰æ*|Tª\º}§ÐsÊôY£3ö0
ÛÓaÍšÝ½²¬-,µOdArwWN-ŒÛ6Ú•X¢Ø(³þlÑ\FÞ²88¦íZ-xDX©š]V-ñTU qXŽÝ›åÙlMCI/Á™rrÄ,±Ý%Ô½¹A×ÞÖoFoƒ™†zöá :¬;’õÂ6I]©ÕOcµå¥
æHÆIëÜo–þ¤×üô§/nÒˆ0Ó‘tÚ{B†ÙÂ7	k„(MwEÌÆ²9~ôèÈ4.ÂçŒwu£«šmïñ½GGšûX‘a ¡Ytµ²Âdwu5w€w¬ƒÕˆ.`ÌÈ×9·Ý:¯Aj‚5Ñvþç>ùX›‘·Èþý3ßÌl¥^Íáš±Ú^#<­ñ«o;H­¹X%RçõŽñ1½ÖFÇ%1ñç¼‹#äøñ¡þ¾Üè(×†pHÝ¬¥ôÿÓÎx;E5¹~®jÀjj‰—IeSÁIÊ,F²µù”	k,Àna¤>J†Ôæ¤5ÆºÉa7·0÷~ß]‡…7l®ù°W ­ÁbžvV¤¤Á hm@uŒàèÀZcC8Bg'¦Û 5Ä&`0	nx‹ km³óìÆÓDhSÊ„ÜÒÂ³µç~b$bÓÖÁØPð‹p¦µFŒÙÛ‹~AhLØ®™ý[¸S‚µÐ¸_¬fEk®1ò¨&i-ÔÖ÷XXä”Ï]„ËL¾’ýÇÆÆ¢2ÓÙeª!£|QIgÂ²)ÖŒI]t+a0¯·G »¹`¨×08³DH½ÂRCYòV™ŸcK°™‹s|kÐ,kÇO~2XJA…îãÚÐ&A‡f,x€ž{cûÞæ6’i¿R4AG‰k¡´67gÃ9ƒ/ßõÙõ+¬ñPclÏiå¿*­Eþ¦kšØ(X“ãÇ7òwkG;ÿ“ÑÒØÜ­”ùW¿
²ƒ™][Óf$”·Þý%´Æd»}MMpÚ¹s—fi¯öû¥¥oµÈ®Ÿ‡«X35Ï”²à¤aHl¬dÈCáö”5i‹ÌÜfî î\Xc½7y˜Èfl,ÑM	ú‡Ùø&ÏPÃVÚFáYIBšåfdË~¾Éwì(ñLö*Ahyúïkƒò#cïÖð)Åc%]Æ.â‘]©†Ù½ìmšŒP¯¨„‰—¥¬AhO‘äHr#:š£°§¬´$GVp'Øfb›¨	*3v¶IRcžNr"Û¤Š‰ÎÖBd[+VS8`3P3¿FÖX¶ç±€A$OµA`©©)ðÛÅÿY
.™`‘Ã¤´©^ÉV¡VBJl‚?I{skÝp¢&B~°f´v"ÔÂ•{p)vùYëê0%q¿\À½Îtøãšß$z”¾­EÓ­Ý–w?®–ù ZSÈÀ¿°·O×a‹Å°lÍ„µA=tSh¸Rµ¶+ñ¨dA~](lÖ¯kð­XkÌä³½gb©Í$B¦ÐðÉ¡žd÷®Í©|n4‘ëÈ%LSÃ9=¬XûÑ}Yó5AØYN—yøv¢V©›#Ó±¯§¿0
£IXõ¬¬¿Ò.\>{á­ßüL5k/™Å°fZZ(¬‰×X[·ŽcŒF´èpR7BVkk‰6Ô//´-,ÌE°ˆ¾'	²ÂX++¥¥Qá{a°Öà¦–*cžŒ%©bfùX[óÙ;»Ø¨Î4Ïörv÷rF²-Èr]pcÚÆ%¶p¨¢*Õž’ª«üÑE—»m+ŽíDØ¦A“ÆÍ JÛŠzCÈhÚIzP;BJ¯:2n#+±M˜fä·öMKÑjoö÷ÞóúPèž¤ï:~¨:ç=ï9õ‘‚Ô©ßù?Ïÿ!áZëÒÇB³5]4+›XÍ£„ákñ´ÉJ€ä•á•Â<6¨^ª–ApffÜRÈsµÖh­ÌcIŠÑ l}U9DlF¶#ò™m‰˜ ÖT!˜CX3Ó~=µJ`µŽÕ¸csÈJÁ$ÂZ}&¯$m2üP@Cê¬·Ð6N³xCªÇÚ¬üE:Ó3pÈÁZÛÐÀ2Æ˜‘ÛHœTûl¥D2Üvñ½÷nÞX½Œ¸öÙo­vk~óÛÏnÜøìÁo~yT³Ž×?„Ö^ò9NY³@v“ß(§í³2¿²mkkWþîJcj¬ï-‹ôÿ‹'{'‡a5Z­õ”V¦S¥ý—IF36Fû[»»‹üÿB^¤y‹”ìãRäd	)-¿1ð5€ö—ç>Ú0	R±áØ_ªYw 4qÛŠŠoLQë3s„&;ÿ¨è‹£D<J+ùGhfØÄØe@:BÛÈ44–3€b÷<ˆv…R4…Ri%t@	lƒ€ôF	Õkðî‘:?B{júÔÓN ¬ñ>”$é^/:eÍÂxI÷r²ìçNDµvLi(ŠJ¨áà.Ö
d1jÖT±æ”µ¿ÖÀ4nq¿„5‡kaÑšñÚÇªœªfˆ¥Mg”Š›§q´ÆŸNÁ\b57åìF|æ£Lù½m£Ìú›ÖûG-€³µysð'l~©q©ÎCE/ä»Úç‰Ô­æÜT†ÿ[©ZË —T(k¡ÆÉ²Ý\´ÀÒ%ô	T5ËÓr>„µ°3v×Z¤q[Óxj1RcÈ¯k^YcðÈ«=ÖÄ:•›d8Œµkñ4f¬[ªeéçaHûŽÇµPYÓ^ë´†ÅÈÉ“¯r[ûmHíºµVcqoõý«§ïÝ»¹Pµxs‘×\àŽ>SmeJÕ¬´Å\àõÈˆ Öç˜¸q˜ír³î¬gv‘ÖNSw=âaÇMûw&’ÐWy7×ÕÌb„]|íChk¥iîÁqåû™’8O&Àrî§a_ð|WkI}¹x2¨âÂO™Âðòà®\»ß‹ñ#ùñ\œ³¬I6rœ=ø‚xíµ/^‘½ˆÕ§‘W(0’ûˆB.Œ¬¬	µ&HI3®+›Ì¾ÿ9:¬‰§ÒB•Í±šº­yHfÖ9Ûó›éijž-AÍ2!}ê¹&Oªš¬)U¬f–þß}îiWö/ØêÖ ¤:!› Zf4ò‰§[cÔ=&1M&iß~å€HíËÖý^¬èûðí²oåM"¬á¸¿ÐñˆH(ê²ŽÙˆÅ>Z]_¿ÿp"ä+!A5nÅ9’!³%ïÉéB´æ«Ö‚…Ý7¥µÍØŒoLäôp?/ú]-]­ïG}ïæˆ(1ÐŸiA?žü¾Ù}ïFK	šIvþbÌašÖ*³ X[?õPbŒe{ÛéÖ·µïÕ"?‚{ûóÃ¢4ikÝ,’sÇMáöÉ±•c‡Ï¬,w÷¼~øçŸà0BŽ÷‘ç	oÜTkœ¬á´Ö7þêû±"Ò‘(NüQ°V¿¼¼Ð¡^“¸¶l¯š÷‡°Fb{ºš‡5-½y¿Â?¡»hÍgbæÌÄPi(‹	#Ñ‘‘Åˆæ:ª5–2œ›KeýjCSòºº±e8Kgà7Âp Óo÷‚®ÉrìŽ²Éi¢¶¦’Zcs*fƒòu`kÐÊ8œ•d´<#ê³öÚk,å)šÐÅ^Úa‹rÔKdjK2œtnÐ;r%ŒYišk¾æ5v2ô×7 faÜ§£€5Fr‡TŒð÷*]Í¼ûm0Û9c¾DfŽÃd4ø@©qch–#ŒDkÔ«v#l]¼ªËä«ïÿ
X»qÿú¿»û»ßR¼†ÝÈ/ÖÉŽ¨-6ºšÁ‹—PÖ´ƒéskÊe=–¾°5¤¶t§Åtš4H£µb<=Kvf:6s|rœ¢5$DœigÖ:ô¿œzc©Ä[}ù\¦”Íkb58ÒŽe²C2Ì{Vó¥k>/2À±iðÞŸ¡-¤¦5R¥ µi¦«Y6¡»3Ù¢¡o3mÖ	Öœ´Æ*¨X¿¹0Hò@Å1¢±+íí/0c4€%ˆòü@2çUhÓvš>_W0§Ç5ž#èÌÆ}±²ã0!sOÈÒ¿¤5ígNÜ§ÿ' éÍû”H-¨ÄSÐþ›m	oÑ§5þ@jÈjÂp4Å¶;C»KZqíôô¼ØGÆ˜	$,M
¾4à5œÆ'z{šcY=ä;š06M€Q¾šŒ|HQŸA³µé Ö<«xž6A[cóZ.÷t>?­­ñÈBN¿Ù;x8²$¤°œroŠU@§Â3k‹Æek|¬Ñ¼ª&6žæ¦ˆoˆT êæ,’¨5Êò•´0þ ²ö¸ŽØ_=’à¼*kiDµšQ?Û*im¹âçö•ÖÜÞ³‡Ï=þä[ï¼ºþêú¥K—°Ót·k7OðþMÇjuó‹ó šÉj…`ÍQ˜A˜›óÝC5³Ñº›<ü¥²1"À4—oäæëš›ƒ`V— c.Ï™;¤Æµy×z“0íL‹ä«‚µÒé™°žØ!©‡±˜ì†Ëî§½Ò6t`¼_&Q9N¯éœÐÄN|‡ÑÝÈ«øüpì©'ö X(U‚--„]x:âÜ±¿ˆwAœh0X“ä¦}Z0oSò1ÓH¸€Îø£•ç¶'¼C¿O…´ÙÌ* 6YFÂaj`ð£¡ÆÉ”„2:—s	¬±¦’”/dç	˜“òîç†S?‘Œw+’Üpüá¶jm,€jb5îô×¬¤5CVÃº?]•â)&(­ *aÍ‰xþwN%´Y·5ŸŒ©aÕ|òÔÍUÊÖî‡‰æß_IksEîÀá!ó´SR¤ç5»y^Û”Ö6c3¾	ñŸþrxX?P>ÈæR¾LVRS¨¾~²!%È‚ÞQü¥Ë&ß9‰1k‡ìVa/òpÉÚí«]µ>\;l;åê®…&ŠÅÞÞžþ\þø›EÁZ+é‹©ìä›(.““oR·öóËÇž9L/§™þËGÏÆ<éìcG|ÆÂ‹*SÖ»ÁHkë÷9YW7Z‰X––Ø”o?|¶ÔØÅõï6Òã–	^™à¥*ÚøËøªÍáêÎÇ&°ÙÚÍè¼Í<slçò¢µ¡\YÄgKÊ—Î»ÊƒÌ#gj)73ß.kfŠÒ6Þ\·(Ñil±_çdsÉé5šMf³„—‚‡5ÝôâêÎc(@ušâ€y!Ñ©ëä`@‡Â·ƒb5(EÃÈè3!óf@:)èS¦,R»4
ÂFÌÆFCkŒ-·^kc­s,iÙpÈ¥HS¥(öC3k—?°fòšÍiÈ„=båêíõK+ë°Ú¯~uýöêõKëëë”¯ý£‘ÿ÷Î3¤@žÙ,ÒuZ±j·žùÖ-Úesà°­]>|aô2Ùõ[ÓÉekõõHkØŸÆZüH¼›áv¶&Õp™œˆÅzM!ìQ/9Õ¬%‡qì t“ƒZ-ôù‘ýØ‘ä5Á0ûŒo­O¶‡5æœx}y,iMB¡jÊÍKv +U­FØ4ÚÑ„‹¨=€MKtÔHzš&<®™¬æûS™1rjŒ1úìbžƒì<Õ.Š!+RûM£j?°¶Ô¼6ßvÊá."Ó äà’"ÏÇ=`Â¨`Íf´È2õBšA“Aj•¢°íÝñé¢”5¬ OÚššù‹ØÍ)kÜþe "<¬9R#,QQ­ã]}RÕ„bF=–ñh…`ÒXYÛìižˆ`À}I‡‡5s…\²'`CÈ†Äµ°ÆÿÉ‚\^,WZšŸÜ×ÜŒÁ¸ûñ/Fš£‡5¢/#…3`5ŸÉÍ™¾8ÍÂ9q2g­y{ÃmºªO›¾ÙÉß6XsÞón¤ü¼¯ÓgMHkv÷Rš'NýG	Í±H5'ºÓiüü 6îÕ5Õoã!X«Ä5M¹Ô€µWßyÿþ[÷IF£ÁÚûÖ„k«§/¼·zsáã›]¨aUm,ÇBXò•É®´Hp.3XóÆÔSÂ4gýX+aMœ×èÍ[8˜;KàØ¿ÛÁZÄÛ%7í&˜e¨>›®I4#29U–åY"‘C—ùŒã2.¯¢ÔÄCí›£ M)gädÄE9£ÿh.£"µj¼ÉC½`“®ñ}¡J3D53ÄwÊšÐËuÅÆ|XƒÃ0wtJÚçjœýhIy“kv¤f/)_<Fýjbí•5-Üè[XæT‡xûÂÖ¾ÅŽ' G«ÎMþAÐÛ!¯ðùpÊ·ÁÆbDaKðÈuPï&Äpñ¤¹ŠF’L5˜¹ˆik£u[–Ã>V`Áï™PX[N“L$X›Áh²ÂºÄ+k
«hó; Gƒ5EðÑš"Ù…%$ÚÚzE"dHk^]›«m
iMÒZA1îQM¤¶)­mÆf|sâ¿þxxX‹ÊVdàG&¯½Û‡AW+v÷gôƒnC&èO$8e4Á¨ú²°ö0¬­.gí°¶aËê@YÃ¯=“½ÀšE²¶qè¸0-ƒ‘±Ëwž9|ìØÊÜé‡ïpüœ¾Z}[lï/°‰žlñíï¿Á™º&Ñ/z¸MTÚW¦µ¥öª¦¦¶…Æ¦:PïsjÖÂÖ™´f-ºÚÖô@‡iFiA_æÃækYØvsÖ #h¯c•)Àb|3S2Þ\ŠŠ–é¨9È ? (t³AxÌÒhL{c‡ýçñkeå3¹¤Gç
¦Y¥À(r<®Å”ë¶&±ëGî-ðD†ÝÊ¾¼	Ô3œéÕˆçDTÅVºº«w²Ze¿µ`š›ß´ÖÐ¢´ƒ#=¸×¸-×[Ò˜FÙÚ¬±Z§‡µ±_À`Àš™hÆå?
˜,'–ÛÆÂ–A\ûÙµk‡®Ýæw×íûï¯¾~{õ2äö[áÚƒ¯¾s÷—'ÏAd'þ;‚šì 7`í;Ðš`Ídµ5ËÏ¬ÄkFW.b9k¨'jª‹“Ý˜lÔ¶m#æºÓÀÚÐ@G~x`x"^;®Ïžå”ÍH~ˆÿhuYËƒâöi¬Y©Z.“¥I6ùK¢5çÛÏ~¡šÌEÄ¡E¿@hŸÉ]+¡ÆuZÂšå&v“d€Ó²Ós™ãkÒãù¦k¯yhÓ6áû°"allˆimó]£´hVÂ(†”´xª«íÇÓlXÛkK³£lmq©Éôž‚»óÁ`Hhb°eJñžÓúh´ÂZMì¿wgKX€ç¤@Gp£ƒRÙZvîÖ|ÁÒ™Ù‹Ø¼°æ»b+Ø¿k‹ ˜æCˆÅ6ýó6ÍÒzˆWztÓ
ùýÏ[Þ Ò‘Ÿ1Ïâ»¬Y›m,5í–»ˆÙM|P]jÀãÃTÚ,t“å+´öttÿ ž1´‚ä5	m…­ð¼Âi¾Ã¶ÐR¡CLŠ›6X³Æê‹Íh¾´6¿$¦ äB­Ú†°Æêëæ@êIXTªi•õj_Ö’˜?ÖTWÇÆÒ¤âëÊI,^µpqeV»X)×BemE?ÉÏ®ß_?{ö˜véíK÷±í¿þÎ]@Í¬]¿wï£d¼¦­ázÙê8«ñŒk»ØhÞÌÝÍª%µiˆÜ9H°æ%Jë­íì­hYÛ^¼°Æ§b¦’ö	6îV0ÍÕ4Ã4ž§•Çs®ÙvÉ¾Å•Y¢ŽNÜÆJž·îl‚µ2&QvÄ7¨
',ãšà„ÑD:}¾¤÷ b¶Â¿‚ZÏ}ŽäóvtEkÒÔøCäkf"¢;°¹!›1å½5‡“$té‰¨s–¥h†û×ªi(î
DXá)@Ó¤¶p‹„ÒÔS#ñ¿œÆæ¬OÜk¹,ËWúÒ`¢@ÁòÝÖ’Æg(iÁT’vêÕö—‡¼–ZÀµŸeë¯Y½PÑ¥ïE+f¦ÖBGŽ\¬îNã	ãÁ}©0ë‘U¥È¦éÐ¿ß½bà¬Áq«˜’®¯W:BzZó1û?øäa­¬:	¯ùê5¿øÏ¶›±ú%kÓÊyËä¢¹ááŽwônTEF‰á´‘Ì0€•v—Öúû‡IÏfr±Da^SÈO½Ò^Ä—¬­*¡Ä•`»°tÿˆY[«Ê©ûý=““V´6K5ÖöN*!NRÉfŸÜyýâÑË33ïQLclÜÕ°öòËmá½ 	WSþÆ?>›ìÆ_$53‘*STKlÊÔº"UkPÛ¨™AŽŽ:iÍ³a%¬i³¦ØÜ7J$«É,ÛÔL9‚·ò¸ö<ê´S*Eê²r{R?j.¥äåñagiÁš»fZ–uÏÇ‰VšøsMeê›Ê´ŠÑdäïü!sÃÉLD„
‹»äG`±­\å‰ÆÍã‘‚5Éq8ŒÖZØ`š×T‡žLP§†
X;¬å;Z™lÆ³š«aÓÂD5Ád™è»})ª…” 6‚RÕ–”5³Çg'¢Éšl!—mK·òïJñ3\!ÃÂµVàIbéNaš$6nÁ‘
6WV:­pûØíU™CÞ½ûÙ¯ï>ø?üú×*\ûéo[“5nVµÆù;¸Ay‰}?¬½xìZ¬ïþšš‰7'x=n5‰þT=¦#Ûáµmj×=‹Íööôe««jÒ±†Y`mäÃnÖoM½åXæûTíŸÑ]Úøp²uJÍ3-y2§%¬æaÍ†â7ó|Ú£ð>þ’Cx÷;š3ZÓ1}S<î"VÈ¦pùŽ$92c~R‚J¶ÐT„$à¥1EP`6}úk™VŒž‚Òp‘_?…lV¥%¡×Ú))SfÈÏ£2Æˆ„IkSŠÂ^p,˜2Œ°‚`°«åé©»QíVv#L]\Ø%D3õ#w.ÊVD¬XA:eP³›ýqÊš“Ö<®-†MÑ=Ìµ›£)6;¤9N'xI)n†nŒ™œvèÆ¡d& 3HëÓÆÚÑÚÚEcz%ÝåOÒÜÌMçŸ^›&Ö”üÖŒIß8î"ƒ®"¹@šW:ù çí/ezjÚ±c^Èµ\ÓRÁaJs¨G8^3ûþ®º…¥ÚµlíÒB“<¬ýA]MñûkÖXU°Zž¾¾¬Ù DùkUÀZ‹‘Öí­cX÷ÖÄÑÖt!-´~©U(k+Êv;úêÉg/á×ÿöù·YY5Çjµ·Ýü(¹ðñ"ˆ¦èZŒû«ŠUöÚ,eDÚ"„mFqn¯B<'•}××U›f¦;KY?ê¥ég<•íÖ¯SÖ|™ëkXšZa|Ÿ]b+7„P,‡‘Á˜P©ó¸¾DeÎ¼7_²&œÖtá‹¨QÆÞŠòž.õ2ÿú
‰ŸñŠ÷àg-§‘ç¤¢®a¶ÌDÔ$L2ïG‰h†ižÖÜC­ñ3ÈAt´6HSximÏS°æV€n"¶¤†mÈS{œí£{ þ"¨~ƒ#ä|&Á8í|NR«|ÒgZOrø¨»Û±KC™ÌÊ®_UkUú°ëºSuÉQõ½°Ì©›óz%¬á:%Xª½tn¥J°§çOÅf’þ‚Äc-E<š9t´ºÈ
Ô¬ÛGoá3¬=BZim.ë¯@kDÙÃš!Ú¸wòß4„ÜŒÍø¦dAÖÊsKõôýèà»Ó:úô£»”è@È–ìAT‹¤ª²…LñPw7°f¤†Y_h/fA®«dí´ïê/,¹ó¯c5&#²×ïQòýý“³éô¬z­i$›±ýóg.÷þ|îØá£‡I€<üÉß_>ì`íyX­Òº3H¥ŸÝ®mAT“'$‰æ‘ýêEk0É`1ˆŒøŽÅ#”5„µˆ¾W½!¤Â”4>¸º!0N¤n;báÎÔV¡VÕÈi¹HdˆÏ[?r×Í,ê\œsÜ„oòb$ßÑbP×Jlk…²¯a+˜²¦þ;µv6f?$UÒBæÞF‰6©¥ˆ%YÚ¼™ªÑ¸[Pýƒ&’*É@q#qæ†^Ucio™×ÖX¼û®Q›ë­s¶ù¡wÁ©{GW ”ªuò;¬óÁ˜ÕÈ¶t€Y@ng?ÓžÒ”Iù7³rûØ¡•Ÿ][youõúg÷®®Þ»ûàÁƒ·^¬ýô§wÎ©dÍâE9~ÉòËU­#Ã–X=sìb}º¡¦!=ñilË–-õ5©ádýB2N£ìô6I}3ÈlébÏäD5X·}ûöXïÀ€D5ƒ5tµ|÷álGâZ>OíFÆ™ù+ýÏ ŽŸ^ DLtsáhkšuæÖÂ½Zù°9ö†JŒ„lØäx¯ðÈHÃØ‚…/^c(óejvƒ
ÂðõRª:ƒbÀ….:¬QÁ&V;ÕÞ†$D€hcàÅ>Ê€ yhº½<‘‰êmVïGÝ´fXâÞÂ}½_ÛõÚìüC7} |ÖÄp»víÝ»kÇÔ¢U«Äf	Óš­|"¤ÂÓÚ"hhÜ×JS
½‹rž%‘‚7©hŸžð-êØbRcÖî ÷Y½ê9M‡kJ®À™ùã¼‹.&Äqk˜‹Öž.¯±PòDûÐÈé]<µÖ´oëÂAš[q˜M¿pJ ¸Áe
CµÐ	ÒÓfn©èh3ïwÂ¾&kµKU¾K”±—§5[<>ìçêïëˆmüçCc?rÖˆÌsi~Y±MØ0‰ÌQ£Ë$Hk­ñš+£éNKt´¯æPW«hk,Z;þ¼lE.½MHaÃ`ÄªÖ>NñøÒÍY¬Ö«,´ŸV“5ç‚å¼ùf×Œ-×1P›ö°t‚™e‘Ø´<ï®ÏÙ÷0ëÀ„e_è¹Ý•;`Ù’ƒµ²Š”Ëº°ÆÕYŽrK™³»øÙ4h\âœ P–„¾Þ#4QÛ©ÌërF­¼ùÂþ½ºT§3
~¾-Ì¦ÁcZÐpuà_ü-ÖÖiæÇ¯ÜF3yd \{NÙ‡ÒÉ %$3`Mò–WÖb6ƒ5«h3 “…#]Ò6ÂšZK'Û—y;H¬k64&YM‰“ ›ë§öÄ“>‡’žàÅyO‰ç¬fÎr1_‰F,ãÑ>zkGí’»Z›è®â//6ïVõxÇÔ2=¬]äÄ½¼|ã~‹ƒRø—ÿé%fž?¢¸µ5å*Ó¸ <“¬cÍˆu%¤ùue@k‰ð88-Ñvª®vLÜû#J„ô´VÙeß¯(‡¸6ÈÍ-Æ7¥µÍØŒoDüù_¢³S£ÔÑwp²HeÖâtÔîCJ*Õf¥§%RC}°š\q»SùLgkª•HGk^X«È‚<‰´vÁ.tÉF+øó­MÍ´_½gœæÊ;Ø_êÁaDÑÚ:ëclŒÅÌÜÿBW;{çÎá³ï­|rí^;ÆiW,µ—*iÿ&XíÙ­Ïþž‚µ™tº‡›S³øªQ[§$È¦H×(ßéÎà×ç¶s« µçÏ,èä+^Vå@[Óç+_æ’e¸³°„hŒ”š¬¤Àä\*ªØ]vFÌˆ/J’”£	xˆS¶s…¤¥5èŒñ­ÍùÜèPéÀ—àŠ8íR¡y9|qœ¬KšØ'(ËG€BH	8´ðôœ·©hÊK‹£R~#uFÎÎ<8“­“¢f%j¬Â0Y×u[~O_iIÛ¦±ag˜øû4H£53’!¹ðûð–,C¸Ç4
D6ïÿŒXkÛÐ¶TÔæD8ƒ58ø3£ÇÝ~ÝÔ¶•K¼ÿ«Õ«WW¬ýòÁOïªX#$«½Hðß¸Å¤*Ö1J9Ì¶k+[·OL‹Ýñ†­[)Ž©©YH'’¤Ã ’˜Œpå=E¶îdŠ³ÿöíñ~Xá®.…‰<ÝÖ†òù,—!CÑR¶#ÚÁ¿þ!þÏré¿yç"‚rš1e–Ëù†Ø.ø|GEe‹ì`Ö–a°×Âoºâ7ÆPMT¦ú¯{X“oH˜^(PrLÚöCV.\mÛžFÏQ[±èif×Õ¿{ÚÉ$²}^xA›hŠ«Ø#¸ÆÎ/´wýxŠRšÂ`M™‘Ñ){#ÞkD£*KÛåÂé‡ˆh;Zv1×‚¤é¶"Mö¡¸™²æd5„5‡kÊ„•5±Û—F-ŸÊ¸¶¶æPÍ>‚®×]KÓŒkB6¼D$AJ¬dÚo¬m2³H–Œä)"
dÓÕ¬	dç	óƒ\Ú½omI/®×Q•÷íÛ×´Ö¬¶÷Øøã{£S•ºšw¿ðŠ2ç¥UVõ»¡_Õ’ü¼²æ‚w /"õ-YÐ`D¶…•kŒZúðî1ÊgžÑ4òáŒí¯¬éáõ*?•¬öÛÆ@ñ4ý‰µŽ¡”Ä/¸˜î|^…ºõª)öúõKo_‡Ôz_Ç’¸÷±ÞÒÇ÷nÎÿï6G]Ê”ÈæÏ`ú­ÏÐç‰DªAÅ Á\ÓÉ}?b
e Ééc=}°ÐA-ûÝAa3;¢ÖÑ¬Î¤ÅÛlóC¬V.àâ¸oŸÍ še
–`™ÓÅ·½{÷<¬eˆ×ñJu”u6ø‚a2ÃjœCÇ©Ô—Ž©ø{wjÛ.ïˆâªf-pæçôœk——]ôZÛƒ¸Å4îS¾ÆbÏSVßf~$L™Ø¶G‹ÕDf°®ÉÀQ`öP;5@M!Ã^Ÿù„
ÖžBgÃ’€ßô´Æ{ÌJX{.*&ßÐ©,¬[Ùà{”ˆšè6CHU:Æ’LERšXèZX¸²¼åL`ÝK¬æíÃøEÃ¶`+y×â±*×½{¢ÛØ<¬ª¼baÃÊ²á†?®QïLÖÚµÙûï\%ÒÛ÷{‘JZÖ$ÀÒZ©äXÐ"Ø6«Ö6c3¾!%kdA’~‡Îr°w®8Ù/Í$Ÿè£ùÙpMí¾{"›ÜrSJõà/‚­ƒ«W{„°¬aîÐ˜@zXcé²Fª˜®å¥‰ˆ6†>ìê™¡ji&6k1ÃM)Ç:çÞœœ=<;»rôÎáÓ§¯\¼|îœ`íÖ‘[t26P3X{ƒ?.ÞÀ_äÙž’‰¦ÄÌL1Ù|ý$È°ÓZV hlæ:*kyËØûGü‹afý¡m+,gC>ÌêÞd@zÇçv¶%u‚µ¡:XmS0dd™ùˆÕTÐT¬á‚ÁˆÓÊ€µŒûâÖS²nÑ´ìÀ¸HkùŒ4ùKwÔ.;·ãRªSOT`mF k4-mpð'B4ž–$AfidÎÉ?ŒA÷ÝHLVäý	Ì˜Îå‡¨”ž¦	B˜´faÌVlmØ:‹Â6kV"[·Q³¶eÛ¡NEš¿·KHØ S·lç+ÂÁÎòÿÙæÑÿ|ÁëëWWoüêÆõK÷Ö×ï’ùÎ¹—Ž†¬­IŠåŸÏË·^þ§WÐ¿ïÀ3üÛ:<Ú]ß°myyKl¦ÈåÙxýö­ÛÓéúêúîáá¡Þ0­¦†[Mœ’JÙBŽ!ôMŒŒ¨Á÷ñÞã´·@RìPkl`-ß?É×e;ðá‡f6üïi	JG
Bk+ìÃÑE¡rÐÑ˜nk|dHm!¬±ÁÂÖÀs"pQdÉï3­}.¤KvÔ  Û 5n†e!¬… ©Á(ìpæÎî‚™/kÒsÌÊâÌúcÃjÌÍÛ1VI:5¿h!v¯iæ¢#d5{Ó’>ÑÖPÎT§¦·ˆ²†RÈžŽ#Å¹ØCî<uT´kú#Rc(kl¡²¦Gœrv 4yKd`2Ú§…<µ´4ÏÆ{ŒÔë¢LF,È]ÔÄ°'ÓJÁšºi’¥Fím0˜æ¬+vÓ>™úóˆÜ´ŽXÊñ‹’5û™¾Ô6_Ø‹ä”qoka›µihXóÝ°yfsá&§9Lì:š¶a½±—ð‚¬.XcÈ ÖjÌ4®Ä4Mc«¸}|Í7Ç]^VãVYµöxXó­§+¦|IXJ2ïuZdV%±ñ“0¢/`ƒµÇôÄ>Ýüä[÷QÕÎŸÇN£bík÷>®«êº÷þGub,½ÄB|uÄ×Y;¡PïYSU5:Ê×^óyÔim`gÍ²õþCœÓ‚5>Rc=¾þÃOU–&¹ê5'mî&@3|D\ŒÃj¸<æ,áB°×<Žø
¬í–™Ä¦µ,:¾!Ô!ÄÔ6P¬…R7Ž4ƒa™”ààÏÿW¯íÝ¹ã'hÖê·©gPMZ`æAI{œPf>!O=÷…ÜCÌ8Ä™ù³áÃ:es°3ü.Öˆ§è˜†NíÀÌoßçAîAc¥iO®ÁbÔ¨1Õ@2šh,0Öô ãEµãæ × aí¦fìa¬&í*!w5„íÌb5²!‰8#ªÇH_ˆkoUû™¶ÔèónjJ‰MËHº«‘tqXKó„zªÔ„Îl]¢Ž[¤ÒÁßGÄ¹èÝðvXzoÈ„‹«ë‹WµGKk×²µssÙ&ENµk¦¬q/¸÷¥kŠO7¥µÍØŒ?yãþ§KMhíj\>œ,ötHHu˜WB¶¿£T[%ÜþþlwëìÄäñ‘‘YýNþ™BºÚ£„5åAú~ B…Æ*U.2å²ÚMI¾^ñÁSoe²87‹´–vÈöÉµ1®u2søè™+gÈƒ<G[gßOÑ ÆK[™ZØõÙt,U›šM‘õ˜õÉ<$®á	yæJ»9Œp‹Ö¿£í£mÁ«Y)‚-Y¨ÀL«\™9>ƒàüí\#íË7’(™à–Ñ…Ô!Þw@jQ–ÊÍã¤»dÌÙ£Ì©—Gjåfß×ÔJÜ™.S^Ý +kÇ–a¡Ùr‰3:ÇÓ3M¯[øÉ oy6òrDì±DH`Žª8	4'@µ™o\°²™¡XeœØÖ Ë ú“5©gÛïtµ>t¨îL˜¾v¼»¦¾—D[ç)$k¨ßÆÈmÂeÁH÷V%@2G-É¿Dk²fÉ,ÔƒÍ$¸këŸ]}ïÆg×/_»víòý»7pï§“îýG8ç~XCR°f´vlËÖk$K]ˆ××oÝ¶µ¡!>‘Nëzl±˜Îêã©á¡áÙ˜+¹¬Ÿÿ~½3c³Åžþ‘ãÅd’lÈÒ†Iz”¯ªJ?‘IûpŽéëÈnU Ùå?jÓà>H˜[¬ÆXÆymÍZ¨¤ÉlHhZÙ†‡5Hƒ3ˆÃÓ9NÃ>q
·æ6œ5²a°åD7…àÍËjh eaEld|´·_Q2¤‰mÎ‘Ãä=G`YÂ´âààÆƒÁf‚=-» 1þ#eÃ(XÛ‰Wå”„@i„Þ¶÷{;%âÛ/}á¨qR#ÄeÂ4´µ°f?†j¾pXCœZZš¦­¤R1CÄbŠ(îü,Õ¦áÚ‰)a`tËL£‡ñ©8·v˜’æ]û¹ÎÈß40­°xukm÷šìF¦se(OH'¯HöóÅ°ï{M]ó4YËëyÕBÍåŽ"»Õ"6›§¯v"Âf­}5–®Œ’)_bþ”Íßkñ‘Ö³‘´ý¸±õåR5?àÆê1*kÞþÑ‡žºÇ†3,eÍ¤ª…†xM‰…šj;|Y¢÷X{T›µçÕùøìÉ·Þ¢\TÈë¤@’kÊƒ¬‹,}´ÚV[Õ¶Pí^µ¦!Ž¶æ„5¦Äl`ª Y.$ŽÕÔ[3m®áZ•ÇúVÙ&SÖÙG,™Ç!¯ÖöIs‚È20aM°¦ig	”ínÎ‰ÝÇËk\ÐáË›>/MÍèlÑèø¾2a¦€–˜á®×•Ê;
HÎ%L¢ì\0HâÄþ½ûYçÊ<tpçÞý|?(¸§kNƒ;öÖž#ßQöü²= ˜yŒ ª`¤B»YKlæ÷0dÌ]3„óƒÄRZP—Q¬fò°FéÙ/­Ao‚5†ZP´ö­=OÉbVS˜Õˆö=!“¶˜2)Ž JN Â±›-YNþ÷T¢ª.•4V–c*"@Â¹1OBô†Ðƒ³Ì´¿
þtŒºš•gÌM”,Heë¼ø¿¶_Ò×Ö(g6X»•&Ÿ²3Æ“wÏÈaD¡n)õÇö[,ÂÈz»~"4ïÃDj~áêýût¸Ú÷W”­®Í5Îþ}o#£Üˆ|X¶Æ-kÿeÓ½36ãO¼dí/:J¥¬*˜äÿPpŒû{ì×õ m}©ÕM÷ŒŒ§â±™ž‘þb§ Éƒ?‡¾k¯ß6‘Û¾ÅLpÒªºa3
ªÓ­ „¨—,¡vÉ|Ü1…ô1‡j1Çd‘ÔÈ‰•×_×ù–Ùç/¹ÅE0êŽÜ‰™«aþäŒ¶6›@YshVáô¢šþ|õhŽ kØF!žY£5Å—.Þ^¥¸Íœ™UŠ`œföÌ®DöŠ:[·ÔÐ¼™¯Þqu<-é’
6Ž/W~ˆÝÀWA¥¤¡Ó9›^À–k
z¬É‰  XÓ“—•tÖÑ¥RKªÌÈªcæ²µè<Âuì2Žôà2?áZm#Ë×æ3ì2QG>“ ¬3@XÎ¤¡(â\€kAš] n;ºç€¾Ö:ÕÕ	±KÉÂ8 éèžÑGú·ÄûÑžÒÆfcÀÚÖ-0k}Í¡)knZ2Úv<Fx„Ú²	Ö\H—ëüçc¯¯¬\~íÚå«×ïÞUÅÚÕŠÿ8{˜ÕLiª‘	¹²²åÊò™†úšú-[Ó)R ‰šîÉÉduMz{¬8<Ü‹gÅj­s"µþþ¡þž™±™¥uöLV÷³ÈQñi!‘Pu,B]Ë µé‡kI¹IŠÀ+ÓøÖýk‚1»`˜…õkº+Â„GÝ=¬yT¨-ßx¼yÝóPZ±MycÅÐÏßÁš£§Û±3°ü—Ü¥22_©¦ã4P”fÖ¸Ÿºrx#¦­FkôŠYÈ=Á4 á`P™)§ìE[L&â¥¢ƒ©I·05êÞ%þ(¼%1
ÇGQw±¿ Í‰Ým‹G7F‚z5R }Wl[„ÒÚI–aÍâÙ¼ÊÎòüð/[gë©ÂïK„åìAà5‡‘AÉšÇVÌk7u‰\-·ÑÁ±%¡9pÐæ4fh´º-1hkÚíí"lm]$d6o÷Zf?ßOwu‰òÂ$Èðcå&V3&£­Ý™EGh^`ÒpyqØÎ´wµÐZðÒ££¶¤d­v¡Í2YxV‹Ô:p«¤5ýv8÷¸0J	³‰ÿ ¬q¬ÉU¾§Ç6à¬4K	Þâ`’G,û¦Æ•ßÌ•%kÝùWµë—.]—ª&wÖê‡ýÑG7ÛÚ>^DÛ\üøæ^Å^¡!X†h»Ê×§‰¤’Akl:Ž“©=0§y_êæÍÝk}	33žs9FŒÖhÜæûsú+Š²BÛW{l¦ÈáÉW?À&#™ð«ovÎ)k¥’%ÐÏÎ#;ññ¥šdz—æ8ÞÌÕ7Û½XÛ»Wß*þ4ã`V;w}´Kã~Ñfí¶’f¸aùù?0ÉZ{)[ÒçMBk:R‡K“ÃR‡+VƒÜà61ÐÌXMÁÊºb#¡¯)ÒÌ¡Zà1òýÔ4ýá”6d50ÍR/¡5W°†¤÷wªJ“ÿG©?úKr—#d7°™%”òˆ†;TµºênëÍU8Ú/4,»¦ØRf5<‚ƒtÑ!X;÷Ò­QlÑ¸(g˜‡ÉÚÆÅç”.8[ÙGW­É2¤µ ›Ù®«ë÷_}”Çˆ£5‹¢]o¶0X+[Bmm#vÿÅŸÿÙflÆfüI—¬}ŠéŽ*¯éé¤Ê(—è)!„ŸÔ½ILŒBzø¦QÁn¼S´æÅ5Ïj>òè…Ók7O;Ûˆ+PS¸´æ,Ü™-¬¥Ð(F¬gH†#Zk=oš%äÌl±êòÑ;GÏž9{øð1ƒµ#·È(ç;Õt5XÍ`áß¾øâßvÎ*ú¹AÓíT¶6ÂÚ×ÓÖ1°šµÑ¥Ñð'^9,Z“æ&ZãªkÄÙô³Ô*±_5º(¦Œ¶JšsgfN¾ðWK•	“9~Ò76[dAZS]© _æA}17á6¨]öm-ŸÈ\F¾`®2ÎÄ6×B5Ã§«–§åà—˜ªÊÌæÊ"â!@<ðršÁ@º,À‹…¾—sÞþ"sº9ÝÌÃZ!ª€8€‘¯"†úÂpÝ±>8ØKO¨Îk iõ ÿêÆ:¿ŒŠ9ÿ·-åq{C+BÚ†¨EÖ´j×˜MQí¦Y:Ÿ©k,·uRÁfjÛåÕÛ—W®®ßyXC[S$´æaMkm#ºùá9<F.6´ã'Bg5ú8%]µ"½ U)º:%{{‹©¡¡DuÕö±¹ã½UÈÍý#Eúó`Ù[•WvçÁ(yŸ¨júÜZu0Å:c¬æüWBXƒ£-¼V)\6æB´UÉjk¦µ
H3®ÄKÓF=&QÙ^4¶
Yxcå0LûXîð°öoàŒæƒ¹ ¸¬±W›,D.œ2v!¹¸ 3B9\ráŸBO'aíÓ½ƒFåbÓÚíy’w®·þ©^iš;dBLSÒº¬íBBT¤„µ“V±f}ÖÂHGkû‹ø?‹yúPO¼ÃÁñ|~CF*×2èKú4¹LÚ–«JóÖXSE[ËþÂ”¤Kí—yNsk@šnÆXMÝÚ‚ò—š›ç‘ãa6&µ¦Í/5rXÓ÷ö•Õ'Ý½ ,ê®ep3~A,†ºéaÍ™÷k–¸pX›fûGkaÉšÑZÛÂ•kFR¼†7²5†û=ñh?ÈÐ²Ö*³ Å4Ú†Ÿ ­i%6À-‡£j˜P.[ÝK$0XÍ÷Ä~DdkGOž?¹~0WîÁjõãéØ{Ü¬«£ÇÚ{íP`µ	;”fðzH@c #´i‚Vls7§H;DŸ¦ƒÔü§êÇú ]M‡qÛ-8³ƒýßô¦Ý%Ë­Ç²™õ`Æ}¡«Jy_S#§€LI¹$µåØÅN®AŒó…P ïøRiÚ·ÿ~Ü¹€`··P ãš¾6^Ûõ9àõ
Úwl2€4fÂv±jìÄ>äÉ'%­qš´â8ðŽãMøÚã`7G‘[ ©¨jZ»ÿö„U¦=šBVväHªN-xœž™ç— &@Ôûû»DD¬fÆý®|üÿ½³‰mëÌÒt½œÚV’ ÒB	¢L´ËdÈb4l+f‘ú)ÆR"©Ä(–*ƒ€6i¬¤cË(ÈÈ"™”…Ë±Óp9è‰àŠŒ²Ï44È‚ó#È €$ÐÂÛZ¤—ó¼çÜO×„]…N/“÷~÷»—õc^>÷=ç=æ&B†b¶ž‚Ë(ë`/é¶ô˜~0›þ€Òm½iªÕ[[úº«þ›^ï´æi¯oQ1–"Ó‡ÇïôUó¤W-cHÓ2Ã ådÒD@á‚›´ìÝüÈc?^ZÚÚ”úÄZ"dÕLF<’M¨Æ°ð³ØÝØŸ´q?µE3ó0ØüÂx®þÇÉÁd¹<ÓXÃ‹ÜŠoø\½)f¨TÃ2§<‚ìÃ4_«©ÉZ\²výºÁÚG{z{=ß³!ƒd‡·øw~kmË•Þ@X[[;˜ÁhkkV°–¸¸0þGâŸÿymbbìÚÉ/Îœ<‰{?‰|ª¾{÷Ôë_¾NÆB¤«©nM#òk<Ã¹zNWŒ3˜÷Õ3Œ,Úÿ+¤¶ÝÓ1ºÙÑ»Ï·ö4uóyçÃGh­½»eÔRÍš–Þd­Ç¥5‘›¶ú	?êªÁYP–~HÕ%Bï»&Ê	ºfs¥¹2©rKT.DöûK$Ç”Ô3Íò!8ŒŒvk–mù5’ØxoÜ»Mm3¯Û$:’ÕÜq¥ª'Â„Rç¹ÖÊÐ›>(ˆÛÕ`5
Ö@:YFò´&­9´Å”ÆÊçl6î†]–brR1L!]µÍ¥Çäê5ƒ45Ó€¼Rùs"1SÎ6b.¡‘_$Ñ‘J±!Û5M3g°Æ’ÀnäÓÚ>ÿîÁù{ë«¥!¶â* ®T#„jžë²ºzuuëFýY|û»Ö·m­­Ù©µáµÆµ]|Jœj4&&æ3cCXNµNÍ`Ö?^—Í÷þ)Ó-åÁÚ¤áYaÄ˜5ü¬’rå×lÞdÍòì÷{¾
vkóÙÃc¨ÌÃyÍ5nŒØäÇ6å@Z$Ö@oã!Ijš|â	Ö‡DŒµ+ðšÙ÷j!<Ï×ò1ZÃÒþö¡«)¯OÊ’Ý&ŒBx·1ñg:&X344‘Ï)FÔ$3äp~¯¦pnIöá^ CU¹æÅwƒö}'kžé¬v&ªX3‡VZ–É'£ë~l hQu¶¼\©:zðÐ¡
ßõòþ#¥ÛkEk+Vf°æ
ÛeçÑr™…²eÎlFX‹§°ðÀiÅd³íþQV&mÒØjƒÎ$¤!œÀg ÔÜÑþíç6ù˜.#ÈC—ïž¬éÉ<8KìÔQ1sß­+—âr5—Û¼jÍ~‘¤ŸêåÖ‚Ä¶! pÁ‡u(²}|$SÏ=^TÓ=àYTÀÕäI„f›Ä#Åj6íÛñ¢§VáSšºH^ùtšÞ·¶¶Ö#Zû;ÊÚ™3Ç¿/V{_Âš0íÛÖX^»–¿óo_ïéhágÓ&ãÏ¼Ö”ti§,ó
1•iKënM ³žù1Þ"Û{±AÁŒÅ•KGàCÊ<›6Œ…5v»ŽÖoŒÊ»MzãÁx~±Á©…i+Œ®Jy!A¦,óu)”MîåÏ™ãô¦²¤Óoòâ3ºLõÓfY¥ðí`…ök ÚÛû÷Þ·üFIWÂ²~ø2ƒÝg‹³Y£lùŒn×/È{D!G)kÔ®	ìTQæ…eæ	¡¹’&T³	¥4J4û•Û„XÇ56d@îÀšü©g³GòPÑŸ¬K¨†Sçn±ÚüøÔlº£h”KM™’z4;–Î¶d²˜ø·°Õ–Î¦ÑÆd=’N¡›¶esùãÇoEº,.ÏÐÚow.äñ‰æ®IkWO‘O“µ„ŸÔ˜þøíFf¨ú2ÍáEøÚ×\£ÆZœ^”§A^ß“iÅbm-–Öä1ÓšóÚp×Sm²ï/	ÕtQÛ•Övc7~úñ³BAÍŠSqÔ­³À]¡2SÒ>øh©Â¢ì ÉT<1Žº ‹XZSÈ=dAú!uY{ßªÌ¹µ¸³®˜î•‡|˜lGÈl}m­1…˜d©RyžØ,Á·¿ùnãÝÏî½{óüÍÕ3¢5PÖ[JP´&ß¦o¾apZC^ËËçê<Of´†®¶¶mÚy±Xü/ôÅÞÞØØÔ‡[òîßÚ
eì“Öäò¯>æßï§çpíÔKÉý3‘¼Ftfö“t™ÖL+ÍÁx¬R‚Ý´ÃÞ†k¨gV*Î¾%XÍ›ŸÂpK˜˜³Ûèô£¤‘}ÈsK«ë!@½½Üö³ÑÏ©]—UùšÖ:mÖ`M5tíò‚”X»ÿ+Œó’ú©cjP,«GØ y|eú;—‰Õâ@Kói†i¶ô m"“á
7wðç>£þØ3ó˜Ž2Õ¬nq&ÓuàåÅ|J°æÕjZ«*­K°¦ìG‚CÒ!µ¾¾ŠE&å	i:â‚–kçO>øîë›/¿ü{Ã4`íËSj²&=-àÛbµ»Ç=¶n­NÓûðÖ:³óÊÖRkõT¾MWoçÇ±™°üÜ?R‰G‰ÚÂøTÛü'ç[çÝÁ‹8Ê¦¬VTøïzš"©•e¸‚lXo›‰Ü,tÃßB5E,¬Ù:T«ihGE‡XËl3ç7eÍT¨c±²&o¹&±ŠÇ,mRÁÒ!RÞw‰Ñœ¹¼zm…š(ƒµ}J‚<Œ¤Â \< B^£æ
Ú,/Ç&cIU‹C@3£µcÇçìI`)`™¬ ³‚5Éj”¬¦EöýKk.ªiÓÚhÏ¦ø¢ªTŽÕ--:¸´\‘Î¶Ÿ®‚âÇ•MÏ„ä«jÂ5VlOè[LoÚ~áíŠõƒwŽx–IYÞæP`ms[Z–¥!n¢Ô_Ö$T·ÝßšIj»\.éCÔk$ºçÇËôÐ3XS`ï"Œ^ÁZc\]€5ñ™£ZÞŒae€ˆ³ˆ‘Zô¯›ŽY’qœ†ÕÓ|­½¢šM°¦1÷0¥qè -ù)„oDç3D"x	Ÿ°÷‘D’NãÈJE)°¶¾~x£SÊÈ3ñ[óc”5ŠQßû>þ,ûþï¾CU£ã¿‘ùiþú¥kwn\EÕZmy|AÜáL´7ÖHl¢I”“á9ÿ¯FÒ£ã¯¢?ÖT½æMÖ|§÷áÔÐ+ÖÌD˜}fÿÅŽ~;Fí‘vÓþ`+:¦š¤µŽ¢´úå£Ý]Â!ÏQï/¼',-/Õ½Ç.Ù‘½N‡—#K‚57¾ÿ,Àõ¬<ðð‡×T®Æð¾ú«Áe"4V¬Ë 9ÆOË°<{Ú Åvô@ƒÕèJÉÏ²ôH3ÛÄaèhæÑ/ž{ú!OH³¡vÍ3ÀlÆjÐ¡LF¤âò=…°8þÐC…‚•úd¥œµêz°¬œgYòI]DuSù1·tÚ!M¡ÍÞºhë~ì -[Ç”5Œ8¬©åzJ>Õél¦#;ÆBÜ•å7Ÿ5EdFY°f”«)S³Àš!ÛG2Ùq"¤`­)ÒI‰~‰aÍ~÷ºœÔ|F»ÒÚnìÆO9þñçÉ‘’·äwIöøWÉs™y¦NL²V›Ï´4ÆÇ?V˜ÞwRÞ~X·fa-ö‘²W&Pœ¦çfG6{kÍª;•8—J%óy\ûYJ}„Ó.‚mÀÚ»_œ¿xéÒÍ“ÿ÷•ÿìöªÃ"ˆÜ›0lúEíôoûÍ7¯°šÈq±N.%¸–kwïý:°æÚZà§kJÜÜ 	òŠÓZœù¨äú>¹îûIÕ!MÑ|¿B[µ?`œÃÏŸ)ô¤bM¥f%í'»E	‹5™%=jv:K­—G÷šÌ¦k¦ìí‘¿”5¥Göð¯&Rã$Í.})0ü‡?O
uÙ¬¦Â…
(Çéz»H¨¡jþ ²-”«ÈzÖ'‰m¤‹AÁBd¶‰Ø’±‹?¡¥ß 4Ö6>á·™©Tv~÷„µX-ËÕ‚§3c‰kSi9<þ/šO³Æ’Îa›n&¨±&¬¶m`h(p]Þ½¥JÜ;¿zþÁç÷Ü>©½|à¼ ñ~©.”6‚²HíøÉ{JvíLw­oÎå:sÓÓ¼²FŠNjcSóJ7ÇçÖ¦.êJÂZºuba¢#äÄÌ\.7=3×Ú:y÷K6Ô+ÃµArHË½h\¨Âkž«kŽbÎjÖ<2ÀZˆæ4H"¨k„†šs¶cèY­šNÊ\Ñu5óè`3>7Z#â¼üCå¡5ì"Ž4Êú0¾ýšô¬=?PãË:Â¡îŠš¨ë5Èdõ˜dà/Ëæ“Â¸¤ÆªXû
KL$Ã%gŸðoZ#yAºÅHÜ»Ù`ÄqM¼vùi‡T­m=
5‘ ¶TÙ»¼T8¶‚S*°&@»k^(ÆAf½ÂïH8Ÿm²ßh•ø.ª¶›øóOÏ¿9ª¼%UKeid>:]î1ëˆ¹Í=›<‡¿¥š®ÐôlGl¶²¡Gë	µI8~Áyì‹Œ]ÐÕ®`ì®]Ð„z)Üp›‘ÏÉ”ne@²tm-ŽQÁš‹@¼w‰-BÙÚßãÖÒ´l¶í÷ÔŠÖ\>ûÛ°Öì6šs²@ðÊJiK,‚j'©ïå•¡¾¾žú{5kX¼‡%$´öì É…Öþòí×ß~º§%{ã†Q‰‰ZYÅ¨Ø&ëGÁb ÆàmÒnõl†ifî¯ÙÐRŽÍ^O^ X .|ƒrá-ó4øõ‡ëw~z`‚´”è¤Åáü©Ô˜¡Ë££<›ð ÿ`·\"+ì¬iÏ[ÊìòÁbòí·ŸØÏGïà¸áñ'~¨GV’{y§¯ ©±øŸ{ÙCâüýga5ÁÓðÖ?H4“ßÔ”á	)vcå<öO¿!I’ûSàÿ,w’mG6lAX2€|V4e®ƒ³PÖ 2‡3ìuLØ¤†ÍG¬‹6#›d*¤OZÇ s‰
åîWùù9{™d£	µ )›U7ìì¦ t¦®?¿B5v³ÎoÝë<,‘ã§è”öšþ~Öü¼~—ëx¨¶·)[ãÙìm-nÝïŸdm­FK¶¸bÍáŒ×Ä†™8±]ÈfÆî`X!M„¼&«4—ÖÔíVñºùˆ(ý|×bd7vã']²6ySõñ±z®Z˜LŠÜæ1ê·º"YŽ,Ù•ÉŒŸkßtU:{âa]íökM%kktÄÞÓ‚ó`¸šjg<O)Ñ)1Ë»©
yÚËY×:¬Maán´vë	ƒµ3×o\>ÿÅùW.¬­Ý{ïù/H„DZSK.ƒ	ÖÌk÷O¿vš±¸¦ j­»˜áˆ²VGWk6ùO¯µ·K[ÛÜÞ¬ynûVpƒÓþjkžÓçÀè³Ñš¶-8(8 tk¶T)†ä«
;{‹#°X¹
QÉ2¤ÁõÈo8OidWE§sÊPÖÊ°€Nõìg¯Õ¸yíƒµ	¨™?Úåq!’³ö$ÀZ‰G³!ý±½—rtHVKŽ¯î-Aoß˜uV3&{Thû
,óˆ<!ÕB˜¸6²p¢‘ok›`4BâàÌtzb|üìÙéé…©®Ì´mù%Ž%PË,­]ªL3ãªØ±ó‡ÇØV¢äÐ[Ä„C›e€9K¼yÏÈ×OÝþëëßüõêóï½ˆ"ëªšó2›JÖkÄÉ«÷® ^Ë¦ÖûÒ¹L[ëüx.g°VŸ˜˜ŸŸh4êÎkx‰¥Ú²zÑ¼ì³33,ÇçŠÙô¸
ðø5½ ¯Íkú	YrRo)ITÛ×Àµ8
ü¾å/¢„È k!â.	ŸÙŠy­<v(Î¤5þ¹ÈÆ¶³™%G2|[7vÚM°fš9¤A6‡6˜‰‹¥Ü•ÑèE*{WÈíã&X#.ì{Å%ìhxÁ$‡¼è©‰YhqGWS([Ö¾¥ñ(“.	¾+×÷²gPö6GÖÕB—5«OiÛÁ`Äu5Žç¾²¼´½ÙS;¶¢Z1`mi	ð]ZÆ¢¬½©×„‰×Œ%2ËöŠÉlÆª£QQXgØFáÓlD­°á536Ë{Ê¨ƒÒöÁ£‡Ž–Ê-Ôª­`s¢†Xü/ðäDÁ¾±â5€ÚTæ©ž~s[¬¦¦×£°šÓ	©LQ¬v…¬HGØ\)Æ±g“EÈƒÜ³a„DxA4›öû›™Vñ¾Çø)„Š­fHfñDö¬1ß4gáÙ‘0JçÛZ²‰ÅÅ¼d“Å­Åu.¢¤‡†¶JPŒ²æ°öàÁwï“ù­¬E¾ýäÎ'7F³DÎ2ö3}ÄØ»¤)ÖÚ"O¦€5‹(ñQkt6·½Ô¼?‘÷?`­ÌD<á‚c´Ëšmj;XÎ‹ÍÑ"Lv…­Ve±K×µþkK‚5Ëô¹ƒ¤6J]!©B\Z&Esµr?fXmV!-N×*ÊÀª¶äY×:}P„¬”2éï¿qÿ…’{£d«û8õ{™šò6ÈíàÛOÖ#ÜÆ~m³bà¹‘oˆãt7)jÇ!Éczb„5LIHhÀšA[Ì˜Šf‡ïÇ_Ú$àÐ³©"N/ û¬f?ÉÐÎ€)r""	hhi9Uª«šÑ[«J[¼k©+[·öÞZ=E<§µqÑßõ²¿yDn©9Y@<Ð*ãrY¾˜_–n%«Æ›Å›¹œÆý…ÅÓEþŠ¹Üõï|%¤{ŒÄÒZìé¼FÕZdß_ò¨…ªµ8ØÜuïßÝøI{Aþ7`mÆ×Sc¹bi×ºòä´`-éÞ}ã‰é™‰’‚, &ËzûiOpN‹…µé°ö çþë›œÃ¬¹'V°÷Š`ÍÏQÕù\+¥@Ù–âÔE	bShZãgÏkœ%þßyâæÉ3'Ï_ºøì³ÏV5œ NIàRÒ©ˆ§‰'o‘×$±=™ Õˆ©©™bµNºZ7:k/þç`m{[‹}£›–-áý|š¯ßz!r$­nmX-ˆgv^†Ã´¡Ä•ØUMw+Ûen¤¤+§Èje·)ãV¬Ô€Åš)/LiåŸå—A7œúÅXKfÒ'Xµ¶äÆ`5¢G‹ºžª/_µl8èÔµWü«!ÚÛû+å2ÏÄ=‹ÿrUN"{“¯R³†ý³`-HAl)Xé+TâR5/\ãˆÍ´áÚš¯Ö0´Ÿÿ¸Qç/
‹{´Ûé©1m'æ§,&t¾^«×a®È²kÈÒ‡;‡‡©E÷‡ÔÂ} åØÏ b;¶™`[ÜÆaùk·_ÿ«%AÞ´ïrBü-þÌqi‚)k|˜{‰L©—î>|kõ§{%ÏäÚrze8Ô©UÃgj*5´ÆÕ„1ªÙÄj(iã8¥ŠØ
…Ì˜ú|Oc‰Ò6yblž*5åCÎñ	³h°V’‘K3¬UÖÀ±æØ³®Œy1-¬˜aÏ‚³`ióÎlƒá@5£Ù¤¨:Ä¤3“î5Î¹¢ëjÌš—Æ+h=rÚP—h† 
)Á}$vaÁ†3›gîÅ(¸3ŠD>´6uð$I:OkJ¯:Š_Ò¾/Ò Ù‘´L_¾àéÊšñZð‚$´Š .$Bzcì•#ËÅh°æä›ÆI+j~º†­úò|¸-ØÏ{yòÍ½(nƒ…Ë+¥òÊÌCPÈÜìß´6±ÛåþŠ!–IŽÄ¨û 6ßt€ÛVëF&`¨í>Š—:ºµ¹Â,ö•‚¥\«)¬\$VŠÔ1ñse"TÞ€Ó µ+·ƒlnPÄÆúÚ+ÞþÂÛ×£a «¡é¹a¡	>¬âOÀ<Âh"D¨PkŽÖšh­Ùc$ÍD_!\ÏÒ:Ú´)÷€TrÊ¦€µüp^9m‰ÅD~ýE„µ'ã’µÇ»AÖà4¹Azƒµÿ«}ýí|þ’å@zk¹F06ê4-¤ › 3nÖÝ@M{"ë‚àæ„h!µ´#âB­kSpæú‰'D²½\"ÒØa´¦LJ`m	q­¿Ûõ9¸À—ÁT•E{Ë\‰Ãj…¹jA©•%¶~ÛÛsð¨NKðÁ©@Ž‘55Ùìÿá>jÚàÜ;(Y»§ÝWÞ#àö†Ö,ÌKÄÏj­y‡5ÀÍ³±‡'aÊT4È±>suŒú5ÁNpÛ/U—Æ,DÀ¹ŠF¸‰S›ý•G‰O?YÀÜhAJäýR{¨¡diå‚rÑ]b9"›Îåøå¥Sê°±™2–å@K­ùÊ—9uõ%ŠàµßGþÒtÂÅ_°vH`íVËÓRÖ2-™ŽP­–	†Ÿ‡µÐnXÓkyø n| .|ôÝ¿Àk#­Å&#,§Úci­$imG\óEXÿbWZÛÝøéÂÚÏ&G¦y#!3:×>buEÉ,W‹$C¢”sõlfbm,‡äÄ4¦ä4=9°ør«5gAJY{ð‘_>=vü+Àš¦5©cJV„Û–Ï§?>K—µ³å9Ik³µs(kfùÙ™3_pûâüõ{g/Þ;ùüÉ—^ºê°ö†"§ß±8ý¯DñÖégÎ‰ÖluJ{ë(kÁZaÙ)?¦lí–œûaµ+RÖ¶ƒÔ"À¡šµîÕÖZHzú^»î½6_’ŠV)UyLVÖY‹0Ï\U„ðKçWB0÷ç¯±f%%3¸`­,“ÐGˆÜ„{ÝU\Àú=³ŠD°‰ê¬ÍRÈ¦NØ8‡ñbÈ”Ì&ã~µà)”¥õ1W ŸEBÓæ8œÏXÆÁöÖ,óx‚!œÆÝþi”,q‘m|"MÏé5«\¥Ab‰<’ÚðÒä€X´GÔö¿Í;ÒiÍl!}‹Àrqý£ÕS$@bÛÿ¢~SÔG~_Jƒ|ÍÜ™ïR²Æ…Í÷^Z=ÜÙ¹¾º:Ð™¯e&Ð{©l+¯†õü|ƒ¶íùáÄÚÅFªÓšb[ÉÚTC½½?&£sa‚.Ù1JÝH•)œÈåŠU¾½òÜœ:Ô¹Ôhµj;¬æžî,¢kÝLhÇ ‚¬Å“0sè¯nÚïë(4c›:eìMŠþFÀPÃ6ÈXÁ00z–$.‚•›ØÛÆs¦­ˆ´Ee–›!šææøB‡h‚Š®fV‹O\çS.fdë¯g`@X
¨í0¢s{¼SüÏŒoÐ­ûw”5š-¤¬	Ù‚¤[÷Çÿ./9th“ò{6Ÿ3û¼¥ýo¿š<rd©lT©R>íê›x“¯YxŽ¯þæ«û—}udy›$ÆM
Ïð„´ú`#¸Ù`T ‡ÐŒ¥VÉñ¦Â˜¡2!‘Jt5W ¼Z¡?QzÎG#;?O…jIwÔ#‘d=Þ ”ÆpXÓ´z*Èó,Sø*ØŒ(D‘Ô[™)¡`‹…µ(³‰0×è4÷˜r{âX³eØqû[¡Ý±¶FYZæýmYò µEÅZ"‘Ê/&RëÞÿ2.Yû5kïQ®FˆÕþª}}çÒ·ßþåÆØõ¯?¹ö’E=ãk: ¶÷2bB0é)bµ^l¦G¹-¤2!5aÀ~&:õ©|ÈÍò#£â>îšÔ\¯	i9«É@D°jõØ¶øM)GUÖ¨\îÈeËœJeuêäâŸa_•5ð¦ËzËË$Uõ¶úÀoç$6UµÁãJ³4Å¾ÿƒÌùeøÈB³P½›knþ`í7ªc¨ôGò#qÓÿÑ¼l¿’ Ý² #;H L½®uGAú(Z3¹f{ÖØ»áBô÷q#R‰–OúFIßQê6 Òß–å“¡hÌ”‘?Aê#È6–OŒÉ9&»iÁ\ÙµÄÎéÜÕ¸UÂ°Fú£â5mê/‡³EÇçòçÖRyÈo,EîïÇ°ö»"¥>6÷è™„“œÏ]z ­ÀšuÆn–Ö"`;Ç7¤µ(²ÉÂŸµ/w-Fvc7~Â%k¿˜œËdÖhÅ§}¨ž)æÆÑ?FJÅ"ªW 0À¦²¨\%Uû@:Jƒ±Ý6{‘æ,Hik—:ˆ(•$¼u‘âo¶ÌøU!Ý=í¤ÔÞ1_ž«ŸK¬MÌœÓ¦ks2ïÇl^iäC6Ô®ç‰lº~áæ'oÞ¼ù—ÂÔûµÓ|àŽhíµ·0 ”¼öìóùsH3k¹žƒ5º•Dñ£kÖt0í®¿BÊ.#·þnÑZgÖÂ×cÈSpWøŠ-?G·Óü²ÒJ#…’jÇG„jÄ¬¥eÁZm	Ç¯’yô*É‘óve¶Ä%¼¨zÎÒb¯œ¿ä#Bé[Iß^)YÝ1}«y“P'ƒ2’2é^¨v{/m=Fa0P®˜ˆ÷jOØû¬1o¤æL¡qs#lßb¨CfvÓ€`	–Ö,O¢Ú\99‰²6sbl¸¦f}\¾œÏ©²Ÿ¼¦n ë¡DW×ð€›ô ÊHmx8¡5mžøø–Q›F¡óšÙùß$ÍE°ÆïÇ¸úuC5JT¼fºÇeÝXëÚ:ùüí¾õ<gøüÀp}|"++ÿ\VÆý\9àŠþÚ‰Îtš¿Î‹u€n¬>~Bß—z­-L¥ò©úüH¹µunf¦ØïÍ°#EÊþÎˆ—ÁÒ‚5&¤jºŒçB†Mƒµf„c!w_{éš‡Öa¨ÇŠÙ|<ˆù"¡ª5¥ÈÍƒ‰@kÒÑŒÖDKlÅdÅMx¶Ï{Š¹sÄ"B±2ª˜Öx†ÀA·3ZÓ*évvJF³/å_áûd‰6f1¬[zŸÙ'’I`‘mìÖ„jAYÕ ³@i„ÖA\À&¼»Ð³¬Í&µž£e¼õÑžÁZ
}ŽÔøV
I^^=í9Œ'—Khƒ³O`ÉpD^ç…•}s•m¾u~L³“¡˜Çâ-€ÈËÖˆ˜Žà3™‹lc)`iÄ¬ÚK}°ž=f ·9ûÄ‘Jl)Â³
Ó´!üÚLô¼WhŠM`ÐOBä­k´W³¤Èkrõ¿t‡ÉÇËÎ‡…µË¼,lŒnw p-"	C	;¥g‚³Ö¢Ì¾x†#,4x­Å¤ÆPÀÃÀ'›hìo²ZÈ:$6ÈhÃãG#ê¥]é°¥Òëù¡'Ÿy¦©ÍÚ;ÍÊš*ÖÖÞ£d‡µO²—î|ô—o?Ýl»~'ÈŠKÔ³.c)Nä}(ÎÇÜ°4~ï¨Ö»kìˆ|ûµm{£æµWk‰¬uû¼•	úÇ0£PëÑMk­ŽÖÙÉ‚ãLtr­~£€Av	ëÑÅ>žãÇ*_Q§RëA9l Š³ÖT½\“rO‘&Á;þlmöƒûÿ$¹Ô®ÉýQ¯Y
Ò $³óˆ5”7IgHiš&8€ƒ¡5ŽÇ[_ÒdŒ±ñÔoTnÆ# 9D55C,tøS.¨a3ÂŽÀj¬TÜ¦¶Úöë«+‚”eýU&CHð‹›45ƒµ@DàÛ¹‚59Œ˜1u’N;hŒ­¶ë[Ç±¾zU°Æý¿;¬áù{²0^|ñöíUü ÷µ¤òéúÐ"°V²š´d#µ˜ÏÂ’È¼›àµù$Û±‹ÿ…ÿBÕÚƒÇKk„„5!¹ÞKk5“×
æ2nöo×bd7vã'\²ö=°VDÛ’„–!Ç>Z<U'­k¤˜‘inÇþy4¼ûõv˜É79A~Ó”ùWÖ>¬yNLKl˜ÔëÕã½ísÅb¸Åd{u~»ý©™ÆÙµzyùBmÖ1X¡±¡½{Ò`3Èóg¾øìÚgôZCZSF›}ì>ý¡`í-ÁÖÞZ<÷»w>ü]Ãþ©)pJlcÝÎIºýH3HŽ§ÂJ£1ö
º„Û\µÆ8Öº:¼b-¦5?çô“³”2ÎÊâ0÷tzfXÂ*â4@j¤$õ«–q˜mÁQ–ð¨ÖÕLÉ
R™2ÒÕfØ2W³æØ%s)Üu$¸ECj²}¬µws@ÿ/™?¬%	ŠÔ(yS§Á"Ÿ‚æt|NËl¥<º†¨B¡i´Fø1¦1ÜµéLzšAü?ß22³°0M"aj`` ¯k «­³«¯¯³5•È@[k×P¢¯XÛ:]F; ;Ûr`s¢8Ç6Ç;ËˆdŠ¸ý:Òxÿäúi~w¯{XMî"*,¿«süQ­Þëê$5æö½{ë]}ÃÃùÆ|&ÛÕ—OwåS¹‰Wê‰ÔTc
çðTš«
‰5ìÃ§„ÔÞa•RŸ"òÄÈœlâJ®)ÒsMæ
ö“™ôîk YP"]Yc]h¯6Ik±¤BøC™ö›EÒ„–>éÂšÄ©HeKŠ‡w:®Á;ZRj JÊVÌmÜÂÂq‰ÉËÎ"6æU·æV~â†Ø¿¬â/f|+ÐKÛò)¾Dá²¡Íá‚_’ïgPEnƒX÷ÿ ¬¹°‘)"PÓÂ3 =BÝÚm`JÛÞ¦bíÜµÇêÒ?5lòLwÜÞ>¶wyù˜¼ýgýÛ+ÙÿæWVøæ±Ë+ÉÁêõ¤µù÷»ÀBª1ŸÉedsÔAY#à÷ù Ö¸KS±·„
þ"GfKèj4@KÏB_5¾¶ÿóÓ<7yeÞlMÝíôƒUÍšh»æ/Ýu½ïð­úh¯Ë_sÊ2ØØ#VëqhðDHƒ+V1šur‹g˜z\*dï£°ÙJXÓ˜¥Ëj°Î£”Fx¡š1Ú ¦±4ÖýRÖ:SŒšÛH>Ÿ_Le[ú¶¶††`µ¸d-àZ“²&PûÓŸÿ$GHK‚üd#}íÛ¿ÜQ¯¹Q½ÚŒNk~aM3m¡pÎeèßkß?dº;wBfïÎSØ“[„³¡+‚ô-&¹bÇÊ{rÆjÞ;˜‘š+¬m”³Z¿†!jÔ°!uðäÀù‘G½Œ¨°]9RlòuÕ¼E…ÑbÁYþˆ9LQâô°|ÿþÜg©¶ð“†f®ýO?õÆ}¦ÄI&kÙN$/u¨f¡£%É=+ž£ÄvT™‰Ä$ƒ)û‘åÁoèhìaú—Öù3S¯\ÓÀ1%\‡Y?wVó'Ü,×]îÔrx–®¦Š°Œõ[XÄžúE%/’)¿ `¶ÔÀÇQÛàq
V3ií5C|â÷_²Å9cýðêÕ—Ž¯§óë)A|YKJhøX#KHÛ~$Èµ4pdÔ«ç8'=³óû®	ÖB¯µ`ßÓšÛZZ3i­Z#"eµkj¬4ñóü‡ÝØÝø‰vY;63×žËap®>•s7ˆgá›ÆÙj¼¥LŒ7êõ‹gf¦ç{±1ëþ8	ò±YŸ[®Hk]ÕeHí˜«Î5«šn*Þ]›jÀek0š5YS$‰p‹ß½™ ”mANkç¹?O§5±a°öM$­½e´öäé'Ã¾óaç©ÞºÚ­eëõs‹õè,ÇŠõU×6nY\‰ŠÖš¥5‚Vk·üÇ8’…Ô±n¶Ú­.¡ÖÝ[µ·ZÁË«hã^œ+ã’/<«`áÎèË³*'Òîê ÁÅ@ZÍKÌÀp„ô0˜N&#ŠªôµŠ":¿W©Š“Ž†÷—Ì:.‹ÖÕÜEÞ55òYè	Ê%¬EèíF°(õ¶$ßŒÈbÖa-ÀFÜS*[Æ*AZó¹¹k,mñ?ÛtvblB\< ³®aÁÚÀPW^@6€Q÷ÀPgç6†½Õ$&4ÓhçîÊ—dAï57…Öúi¸)ðî¿=0´õL×m’[¬=ß¯¿$LX»ë—ÞÓûù—ºúîm­wuöõ%(Š™ÈÌçÒ}©Tßp¾ž§`>Ñš£Ùzó"ºSy`-?õ±¾3‚dµðñÌœ}Â“N­( YŠÅ‚ñml©“„Ãg9iðæpö0—ù6ëÀk>öMÂš¢‰ÖˆÖ‹ˆNÀƒ%jS_rPŒÜAD“±'dˆæU¬	Öö©œÊ³ö y :§éÆžð˜æ'“Õô”Ãè$i æ‹ï¿ÄûqÐ±ESKGB]?‹Èº_Êš—¬Ù?-F5nb5_þ!ÀÚA`m›´£ûöªµ4gYš«ˆîÕý);Rà{+ÍLÞ)Q¥ÉÏŠŸñ«³Ûsƒ{k›{V÷Ö£kðwÂ¨l[´¶|d‹Q5¦Õmí ±ÍÏ’Ì {Ú7åøO±œ6ÏÄ5y™ØPX¬eÔ­N3XóìK6ÑÖPÛ4í°a_9¸AÆ ááÑîžÍMrð,oÜN^UXÝ.EBZ³}$¾³þÕ¸Ç¬fáîÜ5Ñœíøp«|Bc£5­,àDH[ã?ØÉF©Ö´r u¸æ£5kï½¯È÷I„ÄRýÕîlîCX»óõ§ŸÞÁRvŽíÁ0ÄM#QÓÞ±}õlFÈôó›û„´ì4Æ…hQ¦#(§ù8¯ÔSHÍ4©îi
{5ý#,o’ìÆ\„jŒuï÷-²5¡±47?ŽÞEí©!¦kþü5ºeÒ[ç!q]ä
Óƒ³$û¼·2'’%3éÇW‘û/àéÆŽoˆË¸ðƒÕ£Áb¬Å^¾áê›±œT8C¼g±gßx”ƒË¼ïZÔríi#1 ÌÌUFG6Oƒ”´¦pPcR‰”/˜ã¤ò ±*ñÛèjÒ¨º	©k"(÷ãŽ›‡‚)óÇÆØ‘f16æù¬Q)Û©Ä–÷k!M^´v»~kÚJÑš¡ùñúdsêx[KªžÓï—:øXM¼ýÙóœáz…MÅ!~”%	UÉ¹¤V,Æ°ÆâÆƒ’Öþ@<$­5ÓÚZ}ï2ø÷{Ùš+kü#´Ô¸TØµÙÝøÉ–¬˜/"—!®J¹ìŒ[@¨z¬¾†ºÖàÚÐôÂÄü\nlbZï2õÅ±! M	^°FüöXû(\B°ÀÌŠ XÍ2GBðæÕàƒ0éR+dá/lc¹x`uõæE íäù‹ïžùâäù“'¿xþäêIŠÖk¯«ŠW­a3¢NÈH)Ï°ñag?ù@ÖùFŠåµ{üø>kf0¢ZãŠ‡aí×Í¬fî"
áš•“µ«¼Ûj>jÕ*H¦úðµTãçâ{:ÚËs”V)Î9]´æŽ…žîò °V-ÐFm–,÷rÄÅ´¢ƒî~=¥ü¢ªúBåš¼B@DèÖAx^ã&Ð"CX3¿FO€¬)%²d´†%¤€Of´$_è<à
Gî¾tjì`¼X$°«læ5–68bf#(k\	G“º˜ŸÂ$r£Ërû††É?ìL$º†`ˆe,‰Å|Âì@d"‰$RT²%†Y0Ÿ`š,IÉlÎwwÿúúí¡g>|ò®Øì×(kèj
`ß?ÍÝ=uü8ÚÚñõ®>IvÃ] ãp®5¥ê!ßÇ=ŸžâOôÜâ¹ôøDfÛq`ÙA§òkgEh
}GÃj-ÅIÚD‘™›“µHÁÖ`-øgÚ†Üü“Â8‡ßŠ|`â ²8¼)ÿ‘»¯lÞGmaÓšœè´ôí$¾°xD¤F´pBÅÒ¤Æžéó¯´CDj`)ÂHéð›‘‡:F;·X›o„'ÐÈ¬‰ýB‹n³§ŒñM÷×” è-“ÖŽNÙÊWdõ\rÿ‘W¤¬9ªyCìP´F„4ÈP¶Ô5î—6{:T¢cw?˜¾<´Lf%#ËGöcÉåZ¥p¤òÜJ™O¿%ìÂPÃ–åZ7ÌÑ}£Ç*ËI\Q9ù¯DÅhJw´•Ã¸¤ÌÈÍMßbÞÙiƒ$Hox[íÁ_¤Víè¸ŒÝÿs•#ö‰¥ŽbÞ[\†žj+Ç°†u?=ð¤Çñ"%ëy8ªmv:¬Ù;µÃZì”Ë»’O	7léCV„øÎ
áJ³ œB…µàÉÎæ\Gc´ØÒ¬h2øŠhJ°Æô®4#ô{ÉC[ví™õÖšp-Nƒ„ÒÞûÓŸÉÄcDN_ß¹ðé·èkŸlÜøä“O=}IÍÌ#‚ñ	_Ì¹m£Ó«­7°ñç ãNwu´£ÍZýÁÌ;Æ™…“”¦1ç©lÎXNh¶eøá-o±&9, ±)k6 ¼ŠY¨¬mC1f«e™û³!^«™}p•ŒœFªÈiœ?TíL?l	1*…›U¯–ƒ4bÁ¨ª"Xc7×'Ì¥ÿ©§^ø€º&'±`7HÎ!ÍÃ•23æWº¤›DBwzœF4lóÒ6	aOã"MìWRÎ˜·z5T6ò™yžßŒÕ°ìÿƒ_¹ë?7=P_E¸Æ+ƒü<ó1’XˆÀj4áØø®Ñ‰¼åzåÇØaVýöwæ"Ã±ùkFkë÷®’yA1s°‚$Änê²v÷îêêêVK;Oe—¨Y‹ú	î¸¤5w„ÇÀ˜gdÊ_¤É]ÄYÍ÷ß@XûüúçkHkî	Y/ÚŸ@h´çÚtæþ">,¹k1²»ñS…µ_L÷¢ÃT{sk‚µâŸ¡ÖÎª0ÌÖ2Áé‘d¹-W(u¯½lzš¹ö³RdSÉÚdœš;‚ï##†Þj­C°Ö¡ÔþtkGkq^{r4Vã£p>ÕÔ& 	òââââ9n‰ógÎ_ºy‘ógNÞ¼§<È·ðn²æ•ÆjHj¢µ/¿yùIÁZ
·ÇßRgª·g°O‰’I¸ÿøèÅgíø{Ç	ë‹ÝœpÃÀhíÃÎÎ;‘:¯™ñrÉN±¦¤©#'Ód	X#jòéG`,¶ètN»µ‚¦k¥öb™‡2ˆH¡Žñ¼”¢ñëx-X+¨ŸšŒG¸#¹í-”ÉDXó¶Ü<ÚÏæs!!ÉQ×ãDƒz4G—˜ÄBd°P!(ãù•“)—ž¢\6Ðk­£}ïÛƒ%•VÙ-YSø<nQ£µXY#XÇnþZÌ iÊ‚d¼F¨-v£qV¶Šxwtuu<3ÐÙÖÖ	µä‡,õ11Ü	‡¬/:¬y›ìÄ¢Ëièj0Z^ìf$§Isa<<ðåÕ§A²ÛÐ§Ck]3É.wå0J¡ùêm¤µ¾¾aƒµDšö»ußt'¹Àm©úE)¾x@f2ÀÚtÃ`-OäØøÌíãN8²ÍÕg~D¢šdÄr‹J5Œ~<â_C7†9¾(´AwÂÇ1¬E¶âI‰L> ,6ö	ÙœáøYc5Áš,Œ¢Hê¸A´­ÎâU³´F8¬y¦Ûi÷eä±%ÐzDF³{ó#_{>±—G~ÅÙ./Õ2>a§,F”(©nØjÁöÕG¼Ïš¤5	k±®Æ-®\´fwãµ=ýê<U™\®Q5Ö½gÏöòÿgïü~Û:¯5ýÌæn I%Ò…r!×’	…rB†Œ¬ÒVÌúQ&’-éˆÖHt
Z’•	ÜÆRÛÍØPg‚ØƒI%€íƒ¶†cªŽS¥zPÈF~Áz §˜`®rÑ^Îó®µ?í0ã`ÚÛ@ËäÞßþö&%Q2÷~ø®õ.}áòìÚc¯½ÆË%	²˜?¶V=^š¥&[Æ2ÌVâ{1q/„hŒî…ÖÈVtBÝÖ®ÒÄ®€‘Ã7­·Ô·Ñ†¬´Ý½|°k½«V:2Â…3¬†ŠWÔÝ*¶ëò4¡ù+¦)œÈÖ˜aÍ&SÞ›1%$[làyé1úq/r¯wãÒÕ½gqOƒ´lg$·îÚ«™<æmÂâ.Øñ(˜øÇlêu¢µ¿÷÷4Ãs>tb‹ÂÌÂñ,4T‹\Ï,´—)'YòÚ °¶ë¨za{4›A^n®YCY{çÄ5Œ 	z¬ý1}åî?ü·Û·?MÔÿ(Xk¡7¸~’@‹k’ð´®3Á¬r½Á§;Æ´E×¥>ÚP©¦ßÞº¨±©WŠyÛh×3šÝT`3vÆB§f6qP”gOiËƒ~ånX·¼l²\…ú&üGjí…|Sÿ¡Ý‘OÎ”¶aùì±!!ÚÐ	¾ê´VN²§ê°¶ÿ+¬qäji…²%}Ì}¡,ikÌHVÃäO«‘¨h.þŠW¢Ð¼¸ìqå7Bgèk°Øãê¦À™_;Äj‡Ý!Ò;¯yå‡(§’ÔGZ7mÄ¾Ãû»%åÂÑ6~Wî©,áJ|–Ë`c´®f«UÊ(“9Ö”\ˆœhfÃùŸ÷,V!pÝõ³WÏž}áþ¦ÃaÎS/qrøú3éjWg÷&Ô€?	ž3¹êX‹7›a-øQæÖ2M°V0a­P`Ç”µO®ß|€´&\s`£ÕZ,­)jö¯‰j¾fæó‹‘Ø‰ï«¿â|:°6F…ÚŒán§üï…ñ\fdf²’(”æù$ˆO˜"V‹­ _«ÅÆýÄÍDkñù{»^¼@´$
Êhá®9¬p§Ï­*T¥Æðò€«ApªX;sré‚r _¿væÌIäµ·.||õê×W?zùk“F€µ[û^ýù«„`íU”}·úÉ?˜ÖÆ°™êR²³Z{®ð÷Šk]­-|Öp®Qq#ÀZ³ÇÈ­ÞÅÅzìd¢Ö6Á’µ8QåØ¶‡”óò2˜]'1£TGÎ™–{XÂ «ªõ,QÔÉ ¿FˆŠÞÙ<”<Ã
–_²Ñ‡êPÃ’À•Ît:Ž/ËÊ®êÙÔä×÷¡®©žütP«ÈÇŸ`yCÂb¥ _×\>oh×Õ#ùŽp"cik’5a	ÖY^ÔôP²Ü”é¨6=ÃZð¡gô¤\û‰Õ¨\[ËÑ·l¯›1H‰²µ¶^«=súìhëè¬±‘êG8ÓèïTî£ø3cGkå¬fq` ³cÓ2Z6‘Ö:!{˜ØK˜(¶WotZ,b4‚¾¦Z5,FÚÚróÓY°lixJž7ó…9µÇ^ÂÊf[X±’5¬d¡Âgÿ—J…Lž˜+äU­ÙkÅ…’4ž|Ñ.¿a³¿ša-lÄ“â:€mB®˜Ù¸pKê…ijüHÑJÆ"¨VìçmËïAaSHk ëªW“q?âîý`A°ë—	É(ÊZWÉXGMaûâ$Ný"SüX «)Ð÷šþ©õÏÕ“ Z"a’|AOƒ„Ôþñ´ÆÍBF‚Åˆ‚•Ç(-ÎªÈCÇÖjÀ9œ³ àç³Õc ­>©ƒå1oÐBK6#¨š¡)<IuYµmKH‰‰u”5Þ.êB3æ±_)6¶Ü´ŸÅ^b¡ÞËØÖygièz]–’^¹$DØ(ÏKåFÞ{ì¼V¦o[Ö¸ŸYØ–¬¶®ßžyˆæ6l‰MŠ*Þb^xõoá~	¸Q³&\òL¾¨Ÿuð.t5­9â?„{dXÝ]Xj×Îlg`µXZ‹1¬É©_Á’ÉŒCp Nì8óµ‘…|ôÞ½]÷¶aMïË®Y;A­]ÖÕÈ€¼ýÏîI§öÔG¯¿ÿ§=\OÔë\¿×G–Êh_ÚqR”Æ¦­·áQ¤BWÖâ	þrÔ:ÿŠä"]-¸kúVxåØæg5äÁ„|E¸EÍ_ÌÿíPmË	²V&‰WG.kÃž°"“ÁÚò²åX1c$qŒ™µÇÔ{­VuWÕY	ùä^Èò/?zä	ihû)%¼8MŽýD¢˜=ñðãj°Æ{a(@LÂš'D‚QÆhhs&­¹Í?j©†Nf.ØB"£í÷‡XIš=öBn‡ÈRÎ`!ßÅþü€/bq*”ºvš×¾µ³µÝ_I“©Zr-	Æ`5(6B£LŒ½öëè1Oý[ÓÖ1wHüüo¼pusóêæó/kÐšÚº<iâÚgÐÚË˜D­mÒÒo%ëeÓé– ¡mÿÕg\BÕFs˜7¥+kZ5GVÓÿKÒÚû’Ö¶iMiÛ#ŽkqÕš 7mýÇim'vâ{ÿé§cØ‹s™_Xl¦	®¡G’T­­Leó#s…ÌôäH~ffN®¸Têôd©iýÅƒ³ ÷´$žYŠŒS‹V>ìâ
X³\ªµ¦Ï›Z™šRµ
ŸAÚ*°&µíX-í~|Z{çÚ§ÄÉûŸ}öYh»]7!òÕ}šÅ«GþóA)…+9³õÍðFWÈéÍ‘`­+ó÷ÐéBÊ%Úûö;Þ›x@Câ2Ñ›ˆaÍä´ð5¶pb$,é\YIúûºdâˆ4†;W­‚Ë€,?¤”ÍÊ_Ä2#+=ä©5ZÎPMÍ®‹¬fytW‘Úô7Ù¨§µ5`•Û>»kvš—J–gSa¦•¡Ýø3ÆµŸGHc£ùÚîRTH çyô­«'	Î"W×X8O8¼…QLjÉà."$±(œÖ"ó~ü)W²Ó3L¬v´‘fcOMd;ð’ùó+'²WWMýÂ1Ðl¸á+¢µÒ$—­õŸïõÉþ×pïßÜ|þù^¢öææËB5²g=Û…‘¼û?ûúªÅ³'OÞ_¼¿«£ƒßx[g? 6•K§W'Æè©6?Ö‰Ì¶ºJGì7V§ççiHe'ø&emfD?K4iz¯=Õj“#…–ù"x6RP§µ¼Áš˜ÕËÔ|Fœ—w?Á´ãš"Æ0pAše4åak /ÌÅ5kŒb}M~ýq‹5ž†ò|®°CÇiÚá%OÂÑÐdÌh SØce9B7Pš5lvZÙv˜wííÔ·qL·ØpòüöaMû}âxBÎ#¯SÜ@XûÓþÙ ÅÇ—bë~wƒôÚ4‰k±Å›Ækq¬?/f{kCï‚Âjk ×´ê©•ütÝËOsy{útòT£º\=V…­ŒÍ=V­©yµù‰l9^.\îÛ²j=ÖxÆrµÛd-ñ™×¬m)’í-y/ò˜îObùùµªšjäy2ÔÔÙcjjœ,-KÊS°²Ej¬éµËm×¯»¦&=MF¢µEuÉ†ÒìŸ
ukl´·×ë|³õˆµ$Ô8@ˆÈŒé;#êºÆ’¶ÄÎ"ÁÕÜy'ÀZœ¯¥OÛë8ó±9ŒÝ…‚Ù?µji|ØÓˆÃÔ¡wÆÎýjŠÍÁÚ»_áyûöÿöÛ>øíÝzV&{o~xýÊ(Ï\¯ãÍoß¤—É±Ž¿+f]ZÛFJ?ˆ.,†€ü"žhëÈ2aZ™îq:©›‹.Ö@H¦È ¥yglÝµÅY¡ÁšÂØtŒ§‘ÔT¹†L|¬z°[ï®pM¯Oa4Þ.–5°¨®Ó_n±ï ŽRkæN¡¹?ÿå¯ÿã•'~„¾¦f0t‘×h°†®õÄCû]:s]Þgj‰«öc1¢ @í¹ÿËJR±a2±—µSû9ò»_ka™ÚµtV£Æ]¶x‡ˆè!ØIãÆÃì@Âû‰0¸µC‰¥VÆkrÖbæ0H%ý+3¦%G*2fõÑÒ£ßRÚ„¸lVÊZÿÙgã–Ø¦«‘ù$Úš•4¿Îðk,]ACÇc@Ð»YSc"E+]Ëâl6¤®Í]ù%ÁÛ—Üûƒ´ÖLk´ òÚ¸jpmÍk×Änºÿ—‹‘Ø‰ï§¿ÈÔXf„z¤ü|–Ò3sÓ3“¿2»‰)aO ²ÌLæ‹ùé\&‘ 36Fþ)éiÊ€®!26ƒ|¿nˆ²_¼—žB†MËƒœ/$k	[S UjeLÃòM0KŽlYwì?œ‘YÿÞãâêõO>=ó)¦T­k¼Å¾l%k?×ù­}’Õ¿>tèÐðÐ7ÞáLP£9—³3fûT®ëï€µ=¬íM$O¼½gôí{ßÑÐ‡í{,võD©CkÝþ©/5s©(oQ–Ž[²fµ*‚#U²JRJ­»¸[&Jƒ¢&Á5˜Ÿ`+†b4/=cC¡g…ÌôP Mxfý’jT&Ðu¶ÊÀDEgn=$<ëÁ®Ëý|O~ÈÜEÊE¨Mç7Áš2ðfK…"llyz£nîY¨hZ±Ô¤VÉ‹Ü=ÄeùÉ(¢¹üŒFäÌ|P3mm|ž°1%>â’ß16‘ëdÀ}×!#/l;e(  ©ý5Ù;à°ÖÙÖ6(óWÖ¸1†îÒýHn6í›RäHÆ£³ÚËÖTK®Ù¯®Ý»wb‘çîíÀ#|Œj«éôÊXéP)dà
°º NLLÐýWM":ÇÆõcêNÉÚ!NA/„Ôø3Ï8¡Èf¤dãð²`Ãh­¢	»eƒµhãüÕÔ;†³æÙÐxMap,ƒ¿îøÑ0!‹»VLE,ˆX	s²Š§Üû1H>Q»±$Ìn$ìˆŸ(ÙÂløßCðŒÄ§_°¦Øæ‡2É<öÓ‘É5DRçll0·Y3Dkê‹í…kM°ÆunW£ˆàÀ‡%%ý<kˆj¤JV$;¬l¬ötõQ*Ø>M•ûðOÜšâÊk2D/b­Âë`ÿ¹jèt	µ*ÑX7{vU«}om‘2Ú§& ªb-ÑÅ]D×á¢­’å5iÜüœÛñÝÇ µÝáÅ^×šçÓV cùŠÖT¸¶qÉ\!A5MíqtÃrãÒ¥QÃ3\'+ ´2!×öÔiÃÝãæ"Æ®‹…‹ÎÐåä»C0âö,¶} cXc¨˜Ñ|­a‚Ÿ˜Ñl— 	-zDýØäÎÈ mPí°ûSYã¡Þ{?ÞGSŽæRâÀkAYû§w¿¢Zí·Ü½+iíÿÔëë-©÷ÿt÷Ã¯è‹ifËœÉ­‰ÎØÔæÔw’Ó!QôÄ28ÕG4»mònëÀÁQù! sHv˜¹²f¤&Ã~‡»¢›G²`iûq‚Ô!Âº*»`gN'ËìÄ¶Xã
Z3TƒÕ{lÍžQïý´õ³³L—ÁÚ_ÿB3lXM˜ö›¿b4©i(lf8òøC’Ï´S°_9«A_Š¸ø&ýí‘ÃVÃæÕkØè 55¶Ž8ä2XÜ»${Ùvï~xŽ#À4yG2óø#‡_áÛ€í¨‹ûU¯äÙŽN÷xÑ+ë\6ÁÐœ;-cc(YØ=šæËoSc°Hÿ9ËŽt\“É¬ù	eAò§Ã©Xó>kŸ‘ÉŽ¯Ÿ½·¹ÙŸ#s’‘±?ož Áš›ó[p~gÙÌm¬DkbJŒP|Û /“@s»4Vÿê+ÙAþ·ïÌƒ\ZÉ]¸ÇÒš³Ë°ÈÛ:¹c1²;ñýôŸÏä)˜™™:OW›ºŽäªsz>SH€kX«Ï 
ÌLèX£Ûˆæ6ú÷Å`í¦jÖz4Ò¸Ç–™ÏgZ
í~¶VÉ.{œyÓç©QS+«þþ•UÊƒ„kªdû¬öÉ{o½õ:˜ö	°F||ÿÙgO¼ðWÙœšé‡ý°vH°æòÚ¾[Ãç)tÃ¿©»«àN~,pí˜Ëùäß†l[ø@Þ!gfïÑÆÞoÂZS°¸ÖéçÙ.Î·‘7ƒµ>Œ,é@CZ+K•9ÒST°„{>o¶®é˜ª±2'S³{äTjŽ#ö¡+i‘Œy¸ÒV¤œñ$Ö#UW÷hhDc^¨&¡¦ª,Füü+–dÇFŸÐO G¦U°¦®£ò5Øq®’GO°ÌÓx¼)uBÚ\ð!™5àvQ#vÌ¯\[‹#ÅªZ®ž™a•aI?àg<—ÎÎÏgêT¬m‚5V˜}@kmiR5 Íì²~‰nîâßÛ18Ìœ“6;¨©¥ÈÈŸ|Ù~¬ßUŽ¢5}tªJróðWˆmX;‰vÚšeAµ¶ìêªU¬)€·©ùBnZã“„”æµ)u}jÍõHðc	Ø Ðh)3]™W%‹™kŽˆ7ä©0WHë±–8#‡B×k®¤‘Ç¶Z¦½îòX‹kÖÖ¸;1rZó	Hd³dµköÆ(U°KIx&ÖžkÎQt`³­˜Ó|íKC¸¸¨­‰ÖbQŽQkÎjÍ_Àv;¬ù˜H>ºŠËï>ò9ƒãÇ ¾ahºµÉ`ÝÏ-rƒ„Ö¤£ÅÂÿby-À´Öøµ¬O:òG .eŠ	f/ò:_Læ5Qflô¨®qåZ…Föµ§—õÁH]=¾±få 
^’–-óç«·PÐËÕŠÔ6Úz7
HÐ´¾ÕhŒ^º¾ÕX¯S&Gš?h9ïÖôiM£”:6ÄÇ¬µØŽ_f§.]W#µSù’¹+Xb,²»9­‹Þ' Þ€	`&o=Ýí	sqšß®B‹ýjð]ÊZPßƒSËëî¾"Úô¶#dð‚ÔŒæk!õ0v©Û¬ÝÅNum'È_kC¡·‡Ü}ÒÃnùäå kj´†°öîµï|pûÝwÞ¿äÞ+úp½ŽäÆÝQõnãœ¾°‡ÌFç3Óù6bÊ0€¿ÉEâšyh¿yn¤b¿«ˆÛ´Ã¥6MÛ^·é
ô¦m¤Ÿ\Ì«Œ«¿¬Ú|b®ƒØY«"“˜A=4{ñ,å¯Y°¶LÊdŸwy,«|ZUÕ&òË¿Ðkí‰§@¶WèºFlƒ5e$>#ÍúbnBä†T)ó)NÇ"»="iMìfÂœ$9F´Üy¼Æ?¼DÀ1Ö<Að€4ƒ­ªš¸ý^ÝFo¶§HäYyÒ_üðVàÞ»ýÓ!£dD1›XM¿»lNÌ&.ËÀg‘¿ˆ *›Îò¹4[ÃÛÏ>ûHö}Õdü¢ŸÌ_|Y°öµÊ-NÜ;{vX÷œÕÆÜ`$›æòÂaÍ Í•T[eš”¶@kfþc3voÈÌõ»[W¾ú¥X-¸÷ZS¸²v`S"¤KkÖô¯ìK¶}j'r'vâûé/òÜJ59LúG’Öby„Ëg´Œ’¼Çñƒ„Ö&gææ§2zËIžæ¬JÖb‡µ‰ÒcXÓwaš™ŒôÌ·0,ì—¡#6‘Êéú—8/7ÈÕUM*’Û['_ïõó+÷Ï|úÞ[Àîý÷—Î>K¹
OF°öó[‡Ð×þoïÀ¯¿xõ(oo¿>`—ËL©Ž×E2¤°öÚlf4ÿ7DCkoß¥pmÏ"UkRÖMjí²€É¬¯i_(w¬’ˆù'Ãj X±ˆªIFJ^!*3 ÂºõáœÌö«!gQ°ZŸuRãí¸BÒ#@f5i}n_"G²)9Hm³)W¶²Á –¤ÂÜ\ÎýÉxRMcD’Ÿõ1§hNã"ÏÎT¢ xD€Ôà¾©¼—Z]pfk¯^sÖ ŒÔÄj“¥¹‘$VÊÄ29×šËÍ/ÌŒÏçrãüåÍgwírRã©h­³5=Ü9Œ?¾ŽoÐa´ÆM‘ùˆØæsRã†#ï~\!7‘×Ý{òžW¬é¬,gêŒÖ°‚¼j´¶ya­³­·—O®·‘ü²Ê'méáÁ¶V’1„<7?ñæ8‹dsç&rÙ6Zéæf~GÀhÉ‘Ò$õxD)Ñ2W¢#6b2´–/9¬Ù+’!jÀGY¹e~«Âé¨n¡Q[”éKM5Gs¶ŠMü‰àþè›ZÇƒ°½[„æFø?Ašm5V`©f¤B8=°ŠaQ€5uÓ£8œuë§Ä`ñÓ1n.‹Cäó-ß˜bÇ_$I³êcC®¶ñmC•gÄjÛÊš-‚ugâ„–kdBòÉHu:9É·‰ŽÆõìlòâi’Ç.Òâ—fVy©§/&ÝEdh6Ÿ§•üÅŸj4*LõgIž<X{ú ËÜGWÀ[ Zw­bÛ:€fÎì}	‘[EÎ’[T¡$êRØJGp l4ôjZO|Ü¶¶ºmf0yÊÒK¬±àžŸeA~ãlé°¡æ5âˆÆ<â¦žk‚5þjÛÅsuõsÞ²D…1ÁÈç… 5ÞÚ®Ys1Ša1›kÁfÜ[ËðàV‹XÀ"Xxéš÷U«;©é¨ ²¥ÆäÂ*—‘TªmøÇþ–LÇûÿÇa$.Z3‘wð‚¼vóÃÛØ‹ÜýçÛ—õëéÄ>Wu0`°¡´{0ªda“úöCzaIx!ÁSÑTulLÞÛ`Í8v[ËîÄaä&‘ÞôšI×Ü j6˜ ½˜Òmáš´îxRãÜSj4ãœ`ÙÞ¾*øÆ™f®ÁÉEÙÊðE8^[V©¦ªŒ9ÿp~‘³Õ?›Œ¬=uXúšÐMZ†#x÷ƒgÜTŒ&sFOƒ´Ùøˆ0óŠÿ’ÕþGž’(&”ªz*J†ñRÖTÆ5 M[Á­!MØÆ]³tb{û„¼§è£Í43ôø¿ÙÞÖŽ£GÛ¸Ä ÉdòbÅÜ¥œõ8/õˆ­èŸž£`LÂš›$(TK]¸N±J)³1‘è=Ë…\†ûã_ÖÌZ{‰ª5#3­ÝH¥Ê•Liáp›ð/VÖ˜#´íÕk¢±@¥§ašÖ2G®b}£½}CÒÚ·ÝûC"ä(2c°V1\kVÖ¢æŠ;­Övb'¾Ÿþ"“’UòÉRedf\°ÆgÿsóS++ç¦+X=ààŸÍ`Yš›ÏÉÞ¨_|ëj¡d-ö¡fí¦—%èÞêÍ£Òq&­p<ÓÚR ÿ1!µ/‡±Îèo®®¼±zŽ+á~|ûÏ1w]€{ã­ßÿþÍ7È?{ýÌ[8­={òþð&Y~áM$Â±O¶¯ŽxþÐ `-·B bE)k9­£@mûÛ`m×~ÁÚ^œûOÄ´sZì1Ò"›0•èwE%žÿ(ûü>V•(™E%Á#xCJ»ªñÖ+0²7`Î½xû£³I}ã^ fÒ!èƒ§äRUx{m¸Mæ"EÆ01TëfRr&ƒxœÅ`¶(ç‘êà9è ¥Î=¹+}ðßöŸNâþJ0ÁÁ^f5ÂUGÑ8LÞ"Æk.®%w_²‘“+ä¦"–øMXÉ´&¥×ç&¹ú¡Vr\]üH…„Ö²ý´Æîíª)tcÐÉ¨3 œ¬?öäîCAkL$Y6·´ÔŸf^*ue Ü¾}G÷ùŸŒzé(>#è»†¸vVã”LNÌ;‹{ïÜèM]¸Ñ™–4òÚXz˜¯œ˜XåÄøÜ4í%†ið„Ð¬úq¼ÄWeÜÏý¹I R[@°nm)M"E­%
ˆl#4ÖBT
ŽhÉ¼e¤2dSG:·…`Û–Ü¢&I-ÀšV¢¯x"0Z¤«±ˆam·€ÍŸ@~À›<ýƒâÕSqïµ˜ÌâAS˜ãˆŒ7ˆ&ód¾ð\1Šèâc·ÈxœÁp*‰“è'¶t“L¹€ kÿ”5jÖšPM\æƒfbãvjíiÅÁZÍ¹¦·¿ÒÁ§"¥L"5_üüx‰×ð´|ôX)ý¬RòX•KZW£V-:Õ(–U+\)‘ ÁÿÚ#ë[}]Ì Ý²ñô2THYÊZ	QW×E«ÝËä¤©´ÿÜÇŒÔèt~|t´¯ê}ïN¼Ö´Ôz]½·ú³uëv	aMÔlrÚu mC:°1”´;CQû€úâÕh%¶|Ã¦©‹ƒår[û¨o—©E3mÃé$Øô‹VœlÂˆUfÖüÁÚ·*Ô|“•…D,‡¸¶6äš–Í%ZÇ†•‹AÉZª?º÷cGn.%¾Ü¤¬AkïÐgíƒw¯Ýl¹{ûöÝ½üðî:˜–å{ÉaW¢.n‚u$q·ïÖS3*U²²î×"ƒ7X­ÛFLÏÛiÆÊ¹}¶=ÀšîÐÁÒd7Î$Ã1Ûî°æYÊz\öS™’EfB<µ„áL£X†îk”§Õj%ŽáÃº5ikäøVkÔ^)òfL|L	½Õ?“±¢¹²¦H³á¬©ÇµÔ°W¾d‚g5jXc¥h(^ šÙþ“ÌèÁ!û÷ƒl‚5\™!y’…OO¢coŒDmÛCP“Š†	`(«°ŽIŽ$ßòúÝÞê½õÃ[B3³Y”¶%jÉ®q± ÖÒü ¥ñ;–$Æî,~ýÎ§ú—øëa§è¼÷Þ	¼§^BZÃ_ÄaðÖÖ^¸w‚3Ãý¥áâ˜|'s®ƒƒ<³°éÀd³iÃšW§yÝ+
Jô€œ£[_ðÆWÄ6¬5Kkÿ]ÿyZ»ÇH%N„tTË‡ævZ­íÄN|/ýEþ÷dR¾¾“#•üäs^\4Ÿ]o¦&ó3èj+ÀZaz²R0i­½å€¡ZŒk±°`í“Ok=n‚¬¥ûGÅçª;0\+èÍL'í9b~u%›U£5ðŒ%þè8C¦ÐÕ´9•»Tœ)Ñø­û?>sò$ÉjgNÞ¸Ÿ†)M#·‡ŽBYØwh-ÚWT¸vž‡7E‰h…SÖbCä¿1¶t½³wt¯!cXkVÖÁZ½§¥÷h[(ø`áúšRWQœ&¿E;û–GJ¼¿JËäM–ì§n`«O0§¦eüHQ«Ýå':ë+“¨Hâ•®™²ò8±OÄ×a»k.™1L²Û4ºG­5öiÌœ»Ø#•inêÉ‹7¤l#e™ \dÂÑBpåîòY”]û§ù,îãš:Bkå°òµ´Ì%kÛ]²ëÙìôøô©Ù	Š×rm²Îœµµv½½®±±¤ËuoGÇ0š¶„Àæ°æ‰‘·õ²BD³É¥ý)¶¡4:®-Álû:™°f±­½dWs/XÁÚæ¦ˆ­sñÞµÔ®óÙA&W§uªLD:Ó««jØ>1³@ÕÚyú®Ñ#ûÜøÜ\[jõÜïÜ¸ÿ¹hmr!—ãÚ	Q/UÉþòGH€’k!$²‘‹êµkB`Ë‚“¼æj™‹km­š`-¶ìW„ÁYä“â5–ÎhÑN'?÷fÙ:Rì6™”X…ÄÔÄJ““QJb2ð”ñÂ "°<EØ¾&^‹!ã=·§m3°"šž¤rË7½Õ6!ûñ›^›¤`M±¹…>kÂ²&a-\YsX[£ð…›¿uW£¶¦Æj»O±Úâÿ:RQÕ‰KéH^E?ÇÊØ¯RºÖ]*W‹ëëùjƒ—¦Ò¨×»TÔ·¼V-'Š5ÌDhif•j£ÝËÄÓÕŒU¬®é2º¢OW`Åƒ•Ss²^GT+"·ó_¾4º~pMEz–XÊ"N1ÕH¢@uŸ;k×QÑtŒP¼mbÃLF.1–AÒhjºu“ÎFc«žpËÕ²ÈÄŠ›€£Uûb^òBd´5èˆ¶]›Ã6ÄìmýmXcíÓu—¶¶åµ:ÿÖÒ ÚÒpz,µÔ(ÕyÏ¥µ8áÁQÍ#¤ArÃµÿ]„µ±+w?ÜhÝ»±Åù©­ÅlßÓ¥ú7ä8ÈÀå5s‡ä®óK§‘è´ŸXÄÆÚØL×Ìzâ7±ý`ÞýÞ¹¹²f$R0$»Ú‚;;ÝÒØÅÈsée:Æ‰Nw=n™ãì«VjŠêÁe…öÅp‰,¢Ì’Y=&²0óåYj´‹ðøó+‚5ÁÖS_þTSÓ4‚	`uË;°¡­‰ØŒ±Ï¸¾RÑ7Û„5˜$“aOðpMÊƒ”¼fîý¦È¹ˆÆ3aO¢]Â4,FöÓh-2"á¹ÌR3È{æ'â·Žöîºu´­'‹eœ’ÔÛ¼]ÂÌäZÅgÀ¿]#¥,»Ñ×²iD52h5«¥Ó½@þG–ra=]ô'cµ¨m­7µ³÷9djÙ6’Q%þØùœµ—7GLn1­å"^±±Wœé¨¹þ§_¾ÿþW­5[ŒÄek¨kxpa;2˜ŒØ­æáÃâN«µØ‰ï¥¿ÈÏ¦u!?â.TÞpõ<ÝLMÌc¸ž§ÕïÔŠŒFæºè¦’Ý–Áç_|ñ@`5÷i†µ›×G{¬¨—…×®µsc#îGC$ðƒ´w²BEöˆ¥ÜXf|«=ÑMÖ(´Þ0XË&Ð]JÅé74–>þXm±?ý¯¼Þ»ªÔYŒÅÑ[îÖ~èh?b].³«e2S™±³î/XÆŒ–ñ
¶öÿ—5ë‰ô¶PíÞÛoÇEkMÆcV³Ö[ï¼uy—r ýÄ`|h.óËiTžbQ3Â²|en®ûÈnÛ!EYˆEÁšàS°CÔå<™±ÊyVÌjF”­ïµÍ•5À¾„äF=‘†ÇËYOjî•. à± …²~«”OkBE8ÎD‹‹L$	Ú¥ˆ=!ÞWM[AY‘DW
ÀÆÂ—(kÖˆ0;’KwÌÏó¹Õ……	°ç|˜l0ÍHØÖ¦è¬Òk¹t•k8aM-´¡3º©u¨\WˆáúñŒ„í–È‡Ä¿ßÀ®W35RÿÌ‚Û/êj.ÐÚY­ˆd_vªdm*M©\g
¯RR¥w¡µñ‰)œoVÚ²óÀÚÂÜÜê…•ñ°m|üw¢5R<3ºF‹ËO	k¥b 4n>$J¦m›×ÎH-b_ÐÍµ3vh=KHÓÂ†1¬	ÍbÃ‘mXsTsÓäkL‡0XÍXi·Kk“¸C‚¡¬†mVÛŽHIMQGÐàWS¡ô¬Û(F7ßËfº*‹ËÖšq.L¨U·=ÌæÇñÈc2ÏfE[D½HÀ¨¹AÆÊšÃZlÕø¬‡‹Qš2ÃÐ’ËÉÓÀicîZc}®LÈƒ«KÅ¡viûÚk§“µƒ’([+MÎÒúBí†kÝë§f«²ilííZ¦¥nXãcî#[ÝàZ7¾"rì[FÅë›ãµ+™‹ºþër¨j†ìzlÌr	×ýwGÑßÈñ‹ÍÍ1¤AÒ0AÅoÎgÊ8½sMéÈÁÚ•¼ELf[„Õ8¾¾•Xÿéú%|_¶¶¾wr„OÕleÊ»B‡gB<§c	“âl‚£¶]Ezœw|6F2UÍÃ¨,Æ26bX‹Y‰…o8´±¶¥‡ÑÍSúåPç¡D€µfi-VÖˆkÜþ§ï\»CjÜžõúÞ=	§/úsqÅ.ç’¨o@àO}%Mºñ£@[uziFŠ¢?Ùîs€ÿœÂ0,a	ŸñË§a/™á(·ädáÄ¦‚Æ¶FÒßØí¦U¡8­/î’måk
ž»bWñÕeÅAŒ,+-ÒèSmZX{Œ$H…ŠÙjú‚¨okUÁšxëË)×‘VkÄ^Ó4ÚÄnæIhëo}æ»œÚžrÔ3¾B+®=H¦=aÌ†Jö‰“ªu{ä62vx¤:c“ï±Ñ’ðŒ"5¹MrÀau0V{XëhiílKd¬(@ä„šŒˆì·Al3Kv„²<}‘Ã-ki¹AÞx¾ŒfêåïB5t5Ëƒ„Õ°î÷JægÉOÉ|4—=Ÿ¥Â¯kº¤&(ËV{ ³%2Ée¤¿©rÍÅ?‡7‡µÑ÷ß¿ò¾yŒ<HZƒÔÀµfÛ÷4#jþÏ,wü wb'¾‡%kÿ9;?™,“ã8)õ9ó¯`ž0ÎZŽ	Ï-Ìg(-«DnG¹Át{aÀ`Pó4Èø6¬ýËºì¥j!¡Ÿ‘ÆÜØY0×âss¥……R÷X?Íãáý#s•®±V²&3ÿýÃ¹ñi î­÷^?û1×€µOie©<s½Ãª+vÄj‡ök¿6S‰ƒ90‹7E@see
ÇþÐ«&´Y+L¦Ù©ó;£‘ýÛè¹ Õõú:Œ„³È­ËG[C_5¯3‚µEvFw/]­«²Œ+wÐÊ”LEYC'cgˆY]Š+Á±O
ÈUÖãÌA¤Ý«Ë˜¨y[m©oå’ºpÅï»Ê*mãÜ ¾n3í/ ’3ºôª'±iBŽ8µá¢pâ¢R‘UÖÜÂœû¦‹?[ñ*Eà2ž…5µ[fb&Û™¶bµqbu"g"šˆ-ÕÙkºcr!Sƒ`TGÇÀ Z—Iküª€»êŒÝÛ1¼k×WŸ_0†Æ{¿s×¥á~£ºM’%e0µÄ°†ØGE°vvñÆÀ¤=¤[9•N­¤Ò¬_‡ÛTT	®eV±\iåJaŠ¿KäçÕé…‰••U,û¡µ‘É¹öR¡Emê"K
ÖdiTGÞB4WQÿqáŠ©ÛsFÁœ¿Ø†`ìŽ"nª¦CDZ×‚éˆ ,`šÈÂÙˆ¹ŽqrˆôÇÉ!“®{M:,Îæ&ññˆ1ŠÎ]î6×¨i¼.(Xg®	×bLsÿ~—éâéxh)’MÑÄtÎ‰ÁdC°­@¹Ç/m+kèj±²÷Ä¾fKÝN¶±Ùöàu®àç<}ñ",Fé8ÕÝ(ägË¤0â—Ø¨ 3—u˜úd—k³Ê“”´]ží£¨Ï¤pzWÏ­Vj¤¤¹Ÿzñx©Žøê¬®‘](ïÉSs´J¬>]­¡Äµž–ÝB§_q«KÕDÊMúüH²*‰½ëRÖh“à}Öa>w~ü/ûõ;wÜR°F\¹ô³KW¼3¶šŒ.òS½.aM°¶7áð-{ðîw»þ™ÇÐá‚Ù ƒ¹Ezmš	¾ºZŸbƒþXOc2(ä4ä°æCšeEOõVù®3DZ£Ç!…GØŒxf:¸ö]ÆO¾çÄ»·o_{çÚµ›{y†½Y#ÂDºHîÑ×Oð%B«‡HÂô4±¦Í1$üGdƒ±¦éf¢)G2ž^[æCÚ¨•³9võiÆŽ–@&iL@æ¶²ôG·ï÷ŒzŽ‘ûÛG‰+v5ß'TóOu	o`G¾†Î»I…äO|Ù¢
ÐQz‰ñˆþÞ€µW?£äÇ/Y ‡±þ„5Áš‚=$G²SJšÒ"½byén^Èf›?Bg;’fO=þ*YÄ]fi-ÔÌí¿ÀL€†–&P“ÇÐL"é–í­Þ F2&Á?ž‹”HXMqëèåË¡„wü+ÇlŽaÏ‡õ©`-…ŒÆ¸Md…ñ¾rsÙ¨?,fÛüh©]í£—?“Ãˆ2¿ˆC0	‘Ì`é8ï§67‡Ç$Þ%Zä
œ%r’×¤Ë²úNXSëkÛÓÑ÷ˆ»û÷÷8©qcWvl#öƒl–Öb“ÃµnÁZÑíû©Å7‚©ÿ°#­íÄN|ÿ`m*»0™,ÍÏp‘I¾ÚüôÄj–.Ò3ÞØEîV¥]â˜çÈdRø$·´<o™,@µP²Öluõsž¶b[-Ö	³ÓjS·5:/#«Í,”æôYWO!__=7±:N®‰°ö†7Çþ×ß¿ynüÒïßûäSÅë7o¾~æSr a5Á×Ü—­ñþöï_üZ;@â€ÛOËÕ#35¥	Õ¨ùa”æ+&¾3£uön­wmkÆj{îHZ‹;úÄÒšÃÚ­Þ?“ê|¶":Êš²ËDÄa–‡B€\Hk…®Z‰³y¥L¨ÀÌËÑÐÈ*~¨PÍ¤1EWW¾ì!¤+3ÉPÕ	a,Ãpòú×e¹=ŠMàí‰Ê}³§…ce8&³ãÝJc—ºð°¡>l‚
Sù<å‘Â5‰iî©‘¯#j‹ë²‚†Æ›‡Ãš7ÌžÉá)Xc1¾šË©ÙmØFZ--’¡ötš\–Ïˆ(ñ­siipà@?yˆlKR×võŠá”!Ùà‹6_xéù]½¼Éi0†5ýá0¢8Ñ{ãþ;½°ZÿÀ®¬>ûœZI§ù& Éôð
’	­SäAÊœ2u~|œRµñlf>—~ówÄéÃs¥Ýy«S£+¶«kÈ¦Á\ÄU4¦4aØÇT\XÓ=B°Øº?“[ 4…ìH‡µX]c*ÐY€5n†qá˜°7®_cJžýºï6iÍYM´1ÓZ~¤uMëæÉzž§'`¼ÖÈØGZ=˜ÃX‡Ðñ>/·S-'›XÍZ{èã`ì%Ü 5µÅ}ÖôÏùìd`4­LXc%yíÌ:ªU<’—ù£í4î\ÁJŸfTSóã#úPžµr¿!ÜX‹"©Gâ$HåG·0nxì"OpJ2N2JQï1•Fƒ,Pä°öÄ5P,A3j1n	‰m¹¡B¶z¥VõE­·º!¨Êò¿hfÕ¨ ï¯!!HõîuFkþr›§!’K‹w6([ã¬n¨j×k Ž"f	a»ÃH]¦àÅž‹PI»PÌaÍ>´aéM±…ÁvÄÃ’ù|dÁÆ2ÍaV¬¦ÅcÛá¸}ÔÔ ;NÅÐ ŸNµ´ÔSm)”µ×Ïé'¢x ¬=¹k×nÿö]±ÚÝÅ¶–:Ï¶%²9ç¿`'ÂŠµF'få0²A5¡y(zÜyE¾Ðn{=5-B5÷ñ-/[¶É-ÄýúƒCk®“1`Rí—¶÷ÄMà/þrÙÇ­RªH|«Õdæ[DÇ¤Uµôè;È6}×PwýÍ—iÁ®_<pÁj¬à1Q¹$®©+µÊÛfÌS·†$š™JÌCXòsÜ{=üÐ#OìøaP kzŠý™=ü0KÂ6dÖ´ñ C;‰{X@rŒüÑO.‡Óì­'/wÈY¤E2•ýIZ4xXƒÎøm%%‹éV¥.²«õÿ²w~¿mgžŸ? ‹½[@ô‚tá¹jÚ‚K'&C£²rÍ”´j¥­¥!­Jrm).ÜxìØ8¶×#ÝLjÇöbW2àhÑDpÍ`-GÈ ŠB;0Š)´:·¾èÞ,°ŸïóœWGLL¯="ÏyÏ{)™’yÎ‡ßçù>íCåÈjðÜ"°¦’ÇÔæj~ý<k„>¶»êçR!5æˆÓ›ëæ<u~=Éñªb®¤y†4"Y»Ää
°ö•˜&óýid,¼B4á°ÖÃ5IFôv§Éb$–ÖÎˆÕ"d~ÖD¯W eCz°ÞÍƒÜÝxAÍ ‡æ«X;LÉ!-WI¥rJ?ª155€Ü¥¡~‘?PW’®ïÖ‚Áˆ—¬¹dkÖ1µ	Ö4°Æ¢ä›Lh–~Ø´ó*ONÑ°*Íåm­úþ•áaÉh‹yy÷/ k,÷»+óy{zéÉ'7î®¬œ%’…‹„Þ\©Y{5‚µ±„´¤òE?ýµ‘ûXYÄÇa®2–˜…Ž£MíªZÎ¥[Ý[/-/Ë{9ªY{Ý¯
šãAgÇžœtÝðìõ­òÃOäöÁkr© ¤4ÀÂ±«·ÖÞ…!ˆR'È‰dÁ÷öÃmnâTT¶4aÉ‘ì4Ñ­Ä~¬¹½ˆÌŸkµÞ:ò›dˆ´²Îãœ­á]šÚú¢6M¬‹ñA>Ð¡6ÊNÄùf@!²Ø+‚Û‡'>r÷¡¸!„Þ®$<s/ünS°ÚPŽ”jU–"œÉ†Þ—)du¸B¤g="®i‰dßå?¶†.ÙôXKÓ;‰šÆëÌ÷ågh¿6CM[kG~s;H`G|ñ¹·Z;¬½ÍÙ#°šâüÅÈ¸ýÙ³µµÕÍg¤\òQ¨>BÅlg.Ëßäp*?¤Ý^L´cÚOzä>`ÿ'Õl¢šËçUaù	ÿ›Š“ýÙFËÕQmö"iè¤%ÅÌö@²ua¥lÕ©ŽL9÷–šMüY…x–ˆhÍùŒ{¼Á|ðôgeáÇ+ŒBl»ß.ÈrdÖÔ;Ê[„ía‚¯–PzbƒB||Ûq+öö÷Ù¯ÖÉþo4;FÆÇÇtgwSí~*Ç+’ØF>ŽPí¿+ÒQø¡¾âB5Ä4á×ÕÎž½0ëfx¤—ö^÷ÁèúoDSðº€‰jªãä›Íj?úãlw¡ÛÈÄl×ì‰þþCü÷(QÖÒ^“ˆZ(ñ®±4Y“ÿ°¶T“ÉÉz©+3Q0V*#ÀpK¶&Ëü üÇF©Â Hz9Àã!,Øiž0RÐËWŽÓM‰¥Ã¾vX#4`Ë!k+kÓ@ÚÇÜÕ.x'l–²9©mÉ•ß`­1=Ýœ)ëÑ\‚¹<Y›œÃ»YGLFbb‹lì5Š	MJ“‡ ÌÛ¨5Ëi>h0íèg&²bR&ûéT`Jóß]ÚH"±§yÕÚW»ôXûß´WûàîrçýGË/uØ7h¬¤Ò\j÷0Žz{7ñG4ñ;»9 …y<RZ`È2C½ÞÄÝÒ8r‹ò¹(‘‘g5†¬¡1¯•5Ë¼¥GjB6ü£®Ü»à9`_Hˆ.é¼ÖÿÅ°îˆZ¿ˆÖ¾Ï‚M`M'‰ÙÒJšY@²†ÏŒÕ~¤°œH(Lì°ýþßUƒjSÊ0mrÚl²Ñ¡Ê…Džcû›´¹FZ“5¤z›XO&ýžùH2$ fVæðÏòï¾õÐì'w–WÉ.XM¡rƒ¾ã€5±RÿÁhÞpöÑ•J‚S~‘Úb¥dHò]5L©Y>ÉÍõ3ë|NwQ¸†Õ„„²&‘«n|þ1&£—I¹øl09³ˆT—Èp‘°eÛÚÍÕ“A[³¶¶ø˜Lf²¢i¨¬IsóV‡ÿUÒZkÍÒš›Œ@l‹EÑšIkVµæÀE}7r7vãE6ƒüdJ&|ædÇ•en£\“‹•\õ“+Õê¤>‚¡Š|6Å{T†ä“3bµ3ÎjM%k1¬µ„OQccc;
Ô 6wÚÒd"3©°IÐpx!ŸÒ›êØûjdÅÖk‹tÇ¾2¿p{aþÊ§ŸÝ~ˆ¦vãÒ¥'—ÞûàaòÙ]lFˆ‹WÖè‹ýjT°öáŸþÁZ.[´÷D¼ûgØžúäÙzþõaàÕuXUûÔ¬­m:­ÅÂZ,­O$:öt´w…<È¶^ëbÓcõ	|bo¥l$½Ñ‹´ «~ùÊÉ^¹W§sâl%›×Kòþp»ÇÖ˜ rd+R¯i)SIÂ»¯ñH?IÛcÀÚõ	h'b'_ªcâÙö¢©‘QÁßæ	¾;6‘ª +•kâµ½æ©£œ!ôÀÐ;Ä»Ûƒ ±ÝÈMÛŽo²îoíHãÕ?Nî› ZüVL±‘‚ÖÈåàz`ÈèÌ'ûDjÜ`Ê<HÇd2‰¼Ö·/¹gáV"žPÍL ÷P6ª,¯kÊs¹xõ×Þ6J‹ã¢‡U'\>Ž7½Jð#á×‘H€iCó´ÇNwäÈÐ]H¶&”9”Ø7t%ÓžšÊµfAµ©OF&Û{ÊãÕRy_È£¸Š@jÎelš0YV³Ë+ªz)å4_&kbÛ2VØtwó¡i¡ÕÚ¶ŒÚ-Nó{à:´³ŠÄX V½!´VO·È‰Q¿üúÖÚºÀõ¿Z3¬ié«p‹4€ÌnŽ[6¶­&·‘)’62	wÍªŽîÔÄo½2Á>&õÈºds‘ ­Ek@š"YÍ¾¸-qqÃÅªþò»ðÑEk½Äÿ»><¯œ¨×É -SÊ¦Bº	ŽÖFÅ2µÞ“³æ¤wbäe¡5’Q§È?†ïJ]r©kkòDF_í#R3êíÈZ ÓouÜÔk[Ç.L–\Hóhz+Z^4¢ú	~ç³ÃQrObî-â¯ôþÃÛ"$O­eiIÇðÜÀšâ%Ô;ô5…Ã»ôË²1[]æ^Ø`óÚ kV\¬XrÀ¤i›™ kî¶'9Ž‘]Dg·Å„ÆV¼áÏ¦ƒdÍ·‚Ê`-t6c¥#[SyÕ1JÍà”g«Ã`í´âk”5Â›bÿâÀZz»Úfb?ÑªÇ§[ŒDý‡jÒôøŒ—žé&MG‚¨9œg{¦hc›ô;¬I’ôìR;ÂÀÍÈ³«™Á]ÄÍ5"tÃfKK_ÑF3”µ±òÐS›Áˆýx	Öä3"`«±ÅÅ}ÝÊÕF9/x]\‰1öœv¢tHr(&ð×Á„6kˆkcƒ51ÔE
âG¨eXñËôƒ;sòÖj™Óœ¬@à0ètÓ£9Â­¾Íƒ§RN$²ÖØ+ç~­8H»å?ÂÂ<K0Ô3êÛñ¼?Ùaðù€ÒA2fZç¬–Ë~7â²„^ú,¡’µ9zÇBJú›!Ôí!ÛàÞZiM0È«äqõñãM2à/*¤¬½Q0¹ ›M=¾xþñéÍÕË÷Î&g²Þ^;céŒÖâÚü	m	Ù µL‹Ìu¥uÍáNáð%ŠÖšó ÿ~[ZŒxm&§nkAZ#šKÖ¸Þvý wc7^<3ÈÿBaùgC‚5†ÃCG+JôÆi+“›Ç~Ü‹TÅLªB­nKO'¤FÖ¢†ØM%k^³F‚I¤©íp3¡-²ôbÕê°ÖR,VÇKãóW¨ùIåÄÈTd^CQ›KÝÛ¨:÷ðg3Ÿ^"ýñÉ“K|ðla9¢µóÐ°Fìù'ÞÚ#ÀðæŠ‹‰„‘EÞèˆÅÆYŒ™ŒÔþúˆš¥yÑ©Ë1¬9¯Ýúv?èÐ¿´K¤æÙ-µ:,&oÆî6Þ`‘Ù”ûI¢B!ãüC¢5ËR4‹f]%‚9–MVKnkc0Ž’ó€Ôº	­ãn|ÌÊñ:S?S‹šñ°å„§åõCuK±&×.ÃŒÖ
d@Ž²ñýë%e[ö«;w™ŸŸ§„®†œæn…Àcæ'âõj¹1d;6?ŠªNyZT#Æ³­¹êH•b5\mÆåèÑ¡Ð
Ü"ÖÜXdO¾sp–â Ì;¬µ&òJsÉö±N
Ö¨GÛ vl€i30[2Ý÷xý¿­_}N`Îü:N_´ÂÞ×è‹PÍií™ÌMò«›Ójä”ïLÐjVS¡z"½0?4Ï'ús¤A2ÊHñç9ue¨J1ç§”Þ99^Åò]é‡G½¹ÚÈvg5¶déô%oHƒ5vòËªá8qš³¡—·¹ë5±£¡š©o¾—¤Ù¦óY| ¯™'|^˜îLø³aü±	ÍèbÆz›H&ä”È8Äï£² }Í=>"þ‘/ùªöØqY%X¾Ë‚MñXP‘4à±ýt@süÁš¤µ¸'¶FâJ5Þž‚¦Æ ¦¸Ðkÿ¹Õè°Kå%­•¶°@wãTþ¿)’×íº^Ÿ	S¯Ñ#¯u|ûÙo/Éè©’õ*.á¹7:[(Ó§°\¨÷±_,omu£b]ÙrTÛ0·|•ÂÖF“.èÂ>(áOƒABkÿÈ±­#'ø=8±wbÄ_–‘×êfí¥ñÂBËHk7¥¬±É+ã´vnåæbI˜ÆÂiM¹ÓÑZ^ziÞ?´°êŽLì¨åb­›û¸Edœ)ðÖ«…VÚÛ|æ“›Âí8" ‹±Í0-Z2ÛŠX8C¥“ù,>ÖI’Ëk¥}mRk®ZûvS8¬Ý¥%öiå±ßùõôò£_Üïà|–V­Ys_®Œóz¹Ø«’«q{•zDj’Á‚…	5]#ÇwûØõG1°ë’Ú ÅŒ½öOü¼û¹+¼@-Èk	#:aCöó·äÛ÷F¶Õ”Eóäÿ3ª»q0jš†ëT¸<K kÐvÂþ´K…?+¬,bSøh¢E½jA1i†n2‚9¼ÅvÇÃj2p$×1:ˆÏ%6“€†éˆÔ4r"}Â’âÆŠM}ëï½Œ¡¿žI™–AWs;HXàádý)fÜ™³ÅÌñ[LBË’	Ä:Cû44ËëAWkT¬åƒýòtT’~ê{:6ÏÃeëÐÚ—?Â{ýñ=¬û×.??OB%¥Ësþ4›5mC`Ëà Üú¿¢`M‡ÖÅ°V;­0CáÌû7ÿŒ´öäI³ÅÈ–HköçäUkž	ÉÝ#®YëÞÍƒÜÝxáÌ ÿ¡éŠùÍ£ÖÈ÷“£5ÑR™›Å=a| èçâb1ÇyM6¸-„jÜš„µfX{²NÃM¥áÔZœúç‘ÅáùáñÌX•\¸V)%ÚmúbK\[HÎ¥²:(µìW÷öÙÌÂ§ï¡¬½t÷ôÃ‡ïž}*›&>3{?”5œûykûÓ‡ÇCkXûÎ|8ƒ¹&‹¸)ý/ÐÄÄkcÊô†Ø¡Z±ûëƒÝVv²Äg¸÷OÃk\„FkÜÄj
µ`#Á•žNš®Þ•%$/ÕýÆÞPÙU"ÍQdÕ=Ë%¡ôµÑšc9Oš(ô[×4SÖTŽVÓ#9\ÿT°‰Ì¸¢;Â¬K„î,YkëFZcÛa­FB£ A;lk,öì(Ô
ËH
ÒèzÄwDè[s˜`í h¢ÀM¸JÒ¼Ãšäæ!ŽLbNÓ2Ä1Ió¾£#ã™qÁZU¦Fb¬´*ÄdÊ‡dÇ6yDºãˆÓZ~pÚ²Î|Èn¬ÖÙ‰£HyõópÃÁƒ×ÑÕÖ÷ÁkWé¨ÎÈ^q‰.+k}­|Û·:L¢Ýh­a	)—‘\KëÂü|ä‡ÕÆ††çpùX#’šO>«› £Wÿ“¼‹\a lŒ­ycq9ï~^U)k&¬Xëq³ç?ê÷¢Gºbf[ô;kyøÞâÈmÇ1º‡´ëjDnNoÙÙoŠ†@› M‘¬ÝæÙèXŒ
°G{Î^¬›ÝúÃf€5”´x3ÍNF`LH5aOÍ* ‹?ð­cÜ@JMÜô>kàš“š/•­¹°kjŠ'(k½Ý®Qj|0rÐ²’õ®.?VÅ‰ëÿvýú+×	þ#¨^iË|JE¼GÈ4î·þè©	iµªñÒ’„«Þz¹­kcK™kæÙÕ°^Ô[z»iÛjßX*×K°ž<!«Ib/°¥ó›Çe¥®þ ‡HM(¸¬|5}Å@/‰f¡7—ÞÞº¹¢fk7÷³TSäÇwÖn"¾kÓÓ‡5’0k‡ùÍuÁ&Ðš·À6ü²‚5`wç3ÆÂŽÀj ™KM^—¥T¤n"åÞ$¬±hJ‚ÜaÞÈŒ`Ÿ4qx	Y«zSð³©èˆ"Õte:®YÓ"¦µfeíî#™÷¯uæó‡_þ>kûåàÞâíÒÈwŒ+Õº“ˆ¯%çi¯K |i¡ü†ÑfÌ§=zÃ)Ï§L‘4×~CY³&T¨°IÁ›…óšÂ’o€g½^ömt“HG/†Þ"Òvxc•jüëñ0¬†,<ªÌz?TUÒp2¡÷Ú+dVtáK¤)’ÕGÀ‘¶ŒÕ@%@Íœú QMXÆ¤…¸SY§5wïW†#oÌ¿ü=´7oÉf°æ4ó¶ØnçÏÈøÌ%|¡ÆkßÓÓBjŒxb„ºŸì,?ÞêŸà¾ß#XS¹šu@S
ì½C6E*b%ymÆ¬G`³Tš‹	ªú­3“|¶Êçƒ·_}ÜÑ÷÷^Äüšp›)kçŸ?çâ†‚‹õgéJr¦bÇÙ…TÔ³*•ŒsšK¯6ÃÈ("7Öqÿ5Ö`Óv—Ïö
ÒÚ{ž4YŒ˜´†¶êÖ’N»cÿþXZc­• n7r7vãE‹o{ó“cÃ8”cð@ÊZ€[}e•Ø!?ÑNR™œì·Ò-YÙŸ»²†[¾}…’µæ4È kÜmélFølÑ½¾t®¯VÁ²1ÎôÚg“‚5n·.Ô;šóþOß»qãÆÌê%Ò.ñucíî%.·~ˆBášy8Q´&X;¬ýtßòè‰üáŸfŠ8>ær‹3$T2Jó›[ /@wwŽŽk]lƒlf0bìöµ±´öÒW9ÄŸÎ*Èdß6!X
ÖÞaÝÁ[T- s{7ÅÙíô¡6OYCRª0Û[(w×O©^LàÅ‚ö¼:˜[ü—úµ%Ë«*'ëÑ24ÉC™-X+<R&€Rž:g“*é¦’ª…éÕ6`ôFúFIPãyÄ|54¸ƒ‡€5òe¬3÷Ä^–<OÛ$d>¢r´ klaM•kjqì„3­ÃvÔ»Àš?6)OÄÀÑjk§±Zº’îdä^ýZ0ÇÂFìßÞèwfóÝIjÀ3² “ƒÞ[÷þ}b5<Fp÷OKycIÏ^}þùÕ×_{Œ–Fàù%Ê6ÿ˜ÔÎâ1úl:É	¼³Om¤*™bu.ŸægÈdó3·ezƒÿm,ÅÔÇghjhœLâ£#S·SÙÔüåFþÇ?Pl$Øb)ýÌ%5îííeÖ®¬‰¨rü*˜"$ªiW­´­šÙÊ÷ý%­Ùø„6]Šx$^ÛYÓæÆ_š	)–>R·5+]cmâàˆï˜è×œðJ” V‹c'£ùV“aÿÝ-žÖâ#X k¬cX‹Ó#µ²`–\Í7xÝH‹œ8Ò ÉäK”µØûKH– šÚóõÈ6’Öfë¦b×¡&§µÙS¯VÖÄØ]mæã
’Ùå·úqUæY÷Öõõ“ä@2 @±­^.®	u)æ:ÚÐÛÎä$>ÿZ©\ì–u¿dsBiÑýŽ¢Bs\*G$pÆÖ¬”Pûm*êŠ}A/†fÎaîróãµ›l½usíc¬!ï,OƒrHk‡§×,ÒœFÌa¤»w‚›f«‘@ó	žPÖù«=á'B8AGî)ÉBÃe;Q¹–"XŒ0h†5'6G±¦™ævÙ¶uD+û•4û*Ø¼¦ZÉ‰¤M¾ëj„÷À4m-RÔ¶•5ÜElÏÝ;+w~ý¯ÿò/ø?¿ÜÏõ|N%Ô:Ý…zµ(%’`à•ÖvŒ²>™ööáÌiÒŠÔBOŒŒþM¯ôEç1Ûtnã™ ¶à¢Ð7ÑB± ­yØA¾yRw(Í%y÷×fÓÂ¶9ÑH_Ñ|W÷¬Bö¥,9á°O;êliÇ	‹Cò
æÁ2•>Ò²¬|,û¯ä3²—Á_ÖŠräbÎB€%&åa´ÿ²²Ù~™h¿é Ö<ÎF, ²iøÆÑBÃp”L(1*aŽ«Åbéñ–D‡® ^³V¤"M¡ú°ïË‘2·qÀZXC—ÍÃii’$ÌŠD>!Õ3-Ó›¯?¾z«õøE‡5eÉeí9q`{*\KÎÌ¤ô¦j­¢‚kƒ5–ÍÂ[ñÿˆŒw˜U³n÷‚Œa-ž„°ækûï,-=úç°KkàšÇ úb­•Ì¾?HkqÍšm½±›¹»ñ‚Å>våÊ±yÊeçÆ¢qp)¢S½zÚ‹¥ÉbÑr8«ÑX²ŠuN€š©jëÁÒ`í‡Ê-zxò«ûÀµI]k$¼F+í'Ã’åä•áÜX:Q´OšnÏ/Àò×Ð<ËÛã´å†ÕÞ¸ôä³Ågg±y
°}°|÷ƒK—îÞý±¤5ï´öÎF¤¬)’~È×ø,
Xkk£¿÷Øâ‡×2:-s‚µ9`mq!£Óf.#XƒÕr¹®¯Ï<¼¼<½ŸBÌÜ¼Ù¬¶¹ÃR¸¦/âAg=÷ñ›.á¬¼»d]oJ‚'nLr­WòG®‹–ñxRÝoDj„„5!ž1³—s	‘MçWÏWdŠìFwù‡¸ˆQß2ÍËü"ùdrÕ{™ìjCIÓI¦$Ñ±¬kO>Yµà»•i' (‰ÖÊÀ†hÍÃ»ª©Ø6dr'"yµœéœÓâ°Æ’cTh´vÊ¥¿24žë`$·þJáŒ¦w‡5ö§Y˜
×‡Åˆ\ûS(k ™Ñ‘J²¦mö•¯åóÌcd}}ÝÎ¼²é¿ŠKPæø|mÍžU»Þ¹~yýÙ´c!þó4”˜O%øö¹,%æ„û÷çÓ\XViDXàezsjGÈ)Z·WùØCÿNnVjeE•òOÍZSîÛ¨s/)CÖk…¶‚„¬¨16sÁ÷10•Æ;+ÓØˆ .ÉL8DŽó,8(„ a»™Ûo)a³g ÏXj.ÀYw°šKj`CìQ°eÁš"€šƒœÁ§ßw4Ä4Ï‚Œy-SýG©9qÐ`TCXóFk|iaþ"‘»ˆéjÕ´¸²f}‰ÝÖ‡îhÐZköÂð«˜]¿~ÈRßåþ?ª¢m¢Nta+-™WÐÞ‚%Q±FÔÊxÈmtÈ¦ívïÆÖÉÞ†qÒá®­ú•lÑ£ºZžÌtü~ýTkŠ‘LœºœÖ"ÿÑ	ÖPü¬¤‘y9´›kwä ÉïfkHúa¯\xëBùØ…›«kf)ZÈØ¬i¦ÑLCÄ`"SÔÚXšˆ¦ÆsŒ™VÄ°Æ=;i-¢—à-åŸû‹$Ç€eqÙX„n6kh¼Á•>=iiçÞ„Òø2X3Rã1ÚeM»8`ùþ£üÊ/-ÿæ×KöŒiE%m°æf'QN[O`µPQGIšs§ÿ‘Q–Ñ¬7›3zu4×Í²Ù½±š.¡a¡>kkÈb¶M˜øæNŽcs&®¬™3ˆÑšg~Ø¯ÍAÎ€lT>ÐÍþXOÒI˜­KfSa3J¯XM°†¶fµ˜uŠ*ø(T"RXöÑÿ…Ö¤¡qu	šŒ¹´¬aATÚ	ªäa	öh³F÷4lÿ9ž²3ä†h`˜)l.´Åq$aO,ä£W¶M£±R7ÓÕnÅbéƒ=}·ú‚µœ4ÍË€$2íEùó›(L†P$jY¼6žqlZ¢Z®3i7EÙ´ùÔ«êˆýø·Ö>G_cMˆÕç/ó‰°:­&ÐîD1õâæà¸&(‹tã¸dÍ¹^£;é`¬–e±Ó_„ýˆ˜-µrøc«ZÖâ<HhŠ“31®ÍTŠkÜ=’/w^Í~c7r7vã3ƒœGT›WSÐùj±<òóþ2¼ÉR·ÖÒÖ>99^f›$kÀÚøX>5ˆ˜xaœ	¬Ý0X»ßp7,îÛ^ý‚µ=× ÁZQ“SC	ÞÂ†yCËT‡r©E‹d²R›W“µòøüûÄb~åáÃ™ÅäÌÊáÞÀ€YÒÚéË?¾|þ<o‹Ö~úÓÇ_•»HÔô_±HSlbnffÁÒ2s•b.SÌ°©hE# .2ÛÇ¾Î[„ˆ¶,w‘—–ºð„”ùØë›±$¨fwâ[Zzë
qše»xÀP5U˜¼V*˜°F”Ô¼n¦ò€œlÃ[™“*°æÍU…^Ývú5­®[k¾€*BkF²	'¯E²­º
ÒÉ ¨wûË£õÔ&Tr£T;¶úY–½76½€ÛJÞ±=X©\€öjï~ý{ò8‚0ûGò"CºžøÌ!=¢uLk![BcìÂÀQXm€˜«ñP5Àœ*aÐZ:WaÂ£“GHŒ”§yÁZ_G+›d¶Ì  ®9GgkmÝwf_¾•L§<óèjÀÚ=£5ZêPhIÜºõ6Ù³Œ/^ßø¶>kg/¯k«V"—O¥ÐŸ¯:4œÖ¹abÓ˜½eX£ã:Wk™£ÿ0P¶É'Cãå–\5›ž°ïhÌ¨&Q«7¶	n}	`M	p«Ã5^~%$v×…ÇD“s¿Â+ØXiI»~Eâ¾v-¨n¬¼!v3Õùú]&ctã‡4·ìû;Ê#þŽ¤°][PŠYÄ¾¡=¡-žôqà.gÕX4EìDloç±©5?á±·$®½ññ%Ï‚ŒÜ Yx—µíìGwqT¨	ÕnÜXêöÔ4dikbèò3ŸutÛ+6¡fÁêP}èºõ„/1¬ËedBê%¸&°iiÙâ¿G]­³ýÏO®ñÖÒht1vX[Â¹ÿþv¼=j[K¨ÖEõIãÓ°2N%ÉéªVµ"SëRÐïÊ¤t4È,œ*h›.×beRÏ©>\G–tÁÆ’ š‘íæµ;xŽ\(—/œ3TãF˜À¶bì÷fÙˆ?„«`\õD0å´&î 4eCngD²éaýŸÙ8ÇsZ‹Óâs€OÅ©,>;CÚV#:À¬ý¼1	‘­-››«3&­9®íl‹­{\³¶)]í.îP÷ó+ùÕéÄ†«~ÙDsIF÷œt¡Ä÷&ôÃúÏÎ¼VL¸n²Í”l)-28anw×Ýð&Ù¦¯Ùáá-½éhÚá&".¯i'wÏztZ©…TÈhª)´GxgnÝ`Í¬ÑsM×ån&V½Rp6¹EÎZ¨oÅ	Ë‡d]ÿ½Ô4Ä4ŠÕ,×Q®YxéšfÔaMô$âBiƒÙDp®Ÿ¡´1æ ùEÂz/ÿí·¾÷û”ê{¥9¤9š<FO*Îc†#Ä~f:ù—¿+HônƒZ÷?¿T†Èùö5•­µ‹ÑÚŠ¹FùÖ÷ZþùJÆÊ"I]ÏÌåz®]Ë§ÍXK'Øì“-Ir;~gÖ»»ˆXÍ`í‹Ï.¬÷”ùôòÊ³Õ
P•†°p–\@SsÛýþí)zbyàº†=-VŸælæ‡-5RLg€¿ÌÆ&X#„“šÌdBcl—Ö'5n†nZtïæAîÆn¼x°våØä¾IÎF\7ñ®W¤¡$°ÖSlÉ
Åž¶òd.U!%S#QñmGµu[}¹dM"þ´¬Å§ÛðAeÂ²I˜H”É”ÇÇp÷Ê«cùÖÒäž¥Ææ'«c4Z{>7ü¾·Tåá?ýÓ“Oo.ß×.}pW×cNÏo+Û‹‘WIqÍ‹h!×ˆ¹±ÊÜâ²¢o‘sø0eäãOXÉÝ_8	4”ÿx±¥iÕ¬MÊÚåÔ‘y«³›\GZgn›l˜%Xcˆ§—Ëw,+q…ß]‡–¼h¥ÜÓ={ðÔNÝzè‘:«2gÝÐÈ»­$³,Gæ˜~ÌnðEuœM0>X rTøT#˜`í ³\n¶•ŒØzÚÖÀ®RaÂ,!–Jb‡²òôê
àE¿·Y(÷¿«ÃÅàÕ|Á’Pwì ²õ3fHMA‹z`·Vmõ8…eÆ‰¡\X«dÙŽµ5V;a­3¹GK|!åâŸHïéÌ#®`sPÁš†§÷õÁm3Hkƒ_<‡Ô ¶«ÀEkß~M´†ªÆ’¸ê°&V[_A¬]Ÿ^ÝcßTþ"c·çrÕñ*§eúI@i”SærÃó·14I¡7Oþ|äÍ©£W†è|qt¤PLài™›2.•óc µIrk5¤Êþ˜a8–Y{r½äpBj…0p0rrv(kjµ/YX“Ä"(h;òY;G6¾ü  ÄŠºÉ zh‹üü™`E o§F‘ÔšS °ò0çá.aSk„=Ñ1ÍZœ? ˜‹øRÈf[ztOL¼¥è§¬9­…–Øq›5¶„ÔLX{b_´ ¬Õ{¥z×ÍëçÔ!\ñÔožÿ>ˆi8@~ÿÈ)t¶Þ	óÚÙ[ëª‹¬9@™‘&U—¤ïÅ¬¿Àÿ5]1×ë, 5É*kýPOûÆ6’¥­Zio-m•¡ÊÒ]»T$›²Dù›x\ÅE<UÉ¬fô©IŒ¾Ü}M,ySòø>*xQ0ë_ÆaDqS&"+j4"‘còƒ”¦'+JFk`K%kLmI¸C#°àŽòú'D(æµUŽ0ÍN#mÁ'r[rR-P³«ˆö…â4‡El¶è;â¢5­›Ú¯ÅÓf1B½¹o\wã²z÷îf>õŒ2âµ¸ÑZx_Že‚›§-o®®ÞÿÃÎ~ˆà)‚B§µ`-Ü	¶¶ºHæß:øö‡së ¬qWdÂ•C–Z¸Øfœ+×GÖ¡ïžåèáIŒ`¬å6
Ö¸)ÖbeqïI=$ÌÏJ‹4.Cf±|ûZ·µÆ6N™–IZ¯º±ƒzà› íqÊ`õïdkðÐ% “m¿o«ËšÃÚ¸äãH
$(fÒ$&"³1mÑä-òw/Xë8ÑMa²É–Kiú>Žzúf’à$Ì)×R°Æ˜°üËŸ|Ù2†SîfŸu‚€ƒÔ™:Cˆ…Ôi-•a†®°[n!×–[$1o·äù£‘"ZÉ+²’d3¯”qY$¨± ÖžnñœÜø³÷ž>_Ï?[ÅzgPI\>™QÞ%xè>Ð™V!˜¥£ ID=òñàAÚ“a$KÆ^Ñ¦4H÷ƒlÎƒ<³ÉÇÕ©È½__¥ ¬Åþý>ÓýÆú›ÝØÝx¡œû9ë¿ùF•·Ÿ1N?ÅÉ£cÈ\Å¥ªµç•Ò$‹b•t>Ñä]pæ§ÁWP‹½ cX“°ihZF¤f©„ïPÖŒmèŽÓd©TÍñ>šîÉÌßFöZ\ä–¯ð¶;¶0lYór„¼½¸ð³ÏnÐûÓÑc÷Ÿ=û€ð*NÏ?'¾PüôÃãƒ’ÖäþHù_I
Ö®Ídh²&7Hµ[ã³ã±±¶îâÜâ«ÀcÅ¯Í‚tVÚÏ7Óm­¶Fdk·B<€ÖÞy›3Éñž:á	/zü¬7·æŸÉ…ÙIÎ¥ÄhÝSK˜|”8šÙ#÷Þ¶ÞS‡Î9©ÏX»™ï®É‰ßòcº	hÌJx^ÐmÂaÍüG
¥Rš‘Ùa©xkS#5ÈJ×
eyC k [ÁÌað’h­"Ô¨vÖ
%aB=­Ä3 k“EÃÍ&¨º’ƒ¹»Î*BÉZ\«ÆaöÛè¨}Z°–ËŽk›;È¦	L4V=:4™Êæ¤FØ
'Žáž°©<i’²IR•–Jwæó`œÌi ´drp&¬&µwƒ‘A¸Á3W/>¿Gšãã‹(küÖ(!GU¬ùIY!X»œ¨Ü»÷ÃË{Z]ÏË÷õuäæ¤«ü\™*ýkccÕá9x0›¡®{”¡©+SSXFÂ¶“ãÅžì8ÿ8LFä+â-À‹-Åbg±ä/¦;µøhTa˜KjiÌjÞ¸þ¨æ4¦„ÉXj‹v„G4éjF_ÿq›š9|wÄÖF¸…]¡TN,)g{,²")wB	loôsüˆÀ!F)e4ÑÅN­Ísõå‚[3˜yjc³g›RÖ†%ˆKÐˆwWCR;wîØ[l»jÖÜ\ó/9Œ¸Y¿Ai
T5Â`ÍêGU×sh–’1©Ìê‚mÂóÄÉï#­ñ°—®u}jQ£®—üóÄjGÙ*ëcdîÉ‚–F~Ý„.Í7Ú»7ÙüojÇR}ÖJhØ\h!ƒ“Á@"CytÂ>@Ñj´\0rë'PÙ
Z#­™®ééš r!hØVÈ\ÆùpmzÿÒÒ¹›ôWsDkoìü éôßÓÒáÜÖ#´4*iïÞ¶ÃpÑ0Tp9“(lº9KR³é`µÁ:`LÀ² k¶Ú2ßÂÎD,°Ùv([Ëfmºá»ÙÂ_„ÈS´ÆÇfÏÏIä$ßøŠNkl(´ãÑ/—§W7ýá×ÑOám¯åÆÏ“:‹5<K³µ¡ï×îBrd¬
Ãl-…ÌJx\£Å|ýåðª¥ 7SŸ=ÈQÍÁ‹ŸéÈ¯Ÿëbc±£fqBš@ÌNL,	C;ÁZ83ˆ‰j„µ‘ø(b“ûã÷Mkˆæ!’?ÃF º˜zQ])§ñ#æÌþÑÌD¼Áæúßá€ï~ë›Ðt…|f8ÆQ$=ÊàQøéh'2–,déC‚4I¥WÊÄ„-¯SóVÜõí•G	ëý«Ñ#§ïÁƒ=	R 3à46'÷ô­v‘Xôª\ò³‹3É´2R³üÑH?M³MþZcWV½#¶ÃÁJ£‹^Ê|Q©ñ—ñ2ËW>ãú¡’]L¦q”N¥kÀ!”~Ë
c¶hƒaF6"rïçž5ŠIÇ4-Eöpk¿óä	°Ö”Ù,­%ùD[‚l-HkFjZ8µi@ðÙë7þf7vc7^,çþcÇ0¯»€ÁH±‡÷”É£¼ýËŠñÍB©ÇÒ[ˆ\VA?šÌ×¸Ä: æqõ?€5¾<BFŒ]“ãµEÍa‰–Øãó&­-XåZno‚ëc->]xÿWOÿßÓ¿:W8÷ÁCIkwO_þáÙÓ|ó×¯~nÊÚç_`Ü¿oß‡oÃ{¬lM° ‘‘ùðÚ± ãÇ"¥j™´¶¿ÊÄŸ˜I¼÷þ]bmmyí¥éÖÌ\D‹W¹3dü CoMU3Òsg·©Qm˜¤Õåà(³ú ê%KWœ=U÷Þj³Ì›¯wM®a]½ê¡üY€nêk­æ9îÜoÝÑ0š´”J+Ã9h8JN3 ,‘1©kþR˜(«ÇQƒµ2²Î^}ˆ’(ˆ)J\@…	‚‰{Mà-B©Õ<):lÀp-¤=jà1@½š<HÇ°~"™qEÎe´à2¢¥ÒEjk	ƒ6SÖföå;òIUŒ§óiÒÚXIa“‘?»%[;É¼÷\¤öœâÌûQÒDk°šNÉá¤,XK­²¸ÜgÝÜÈƒì£ì-u ?¬ó¿TãÆªZ­Òª'ÇO›˜xsê“+úLaêha@ÿ¶£Hp 0FÊ5ë‚=Ræ½ðn¡ÖS<ùJ–d(XÓR60v4÷ 1.ÎDC‚ó±ïõ›=¸â¥ÃZcJŒKÛb+ÈX€Ó‚lHÈE¥.‡Dk¨i,åÉÓÊÁþÐ^'*¢ÌNo±™¿ßbKÈxå»Ämq‡ì?:øÙ”³[\¼÷€žIbãµ;F’Ÿ%GÞy/(k;ýE‚´pM7OäËa­W¬¦–Á§0×g(ÙLýß»•³|R9 ž9Z²~
d˜õã.Â$‡N(
[í]Jbk«ÕzÂWÑRª¶6º´q‰¸Õ¿)ïii‹£èÒ¦ÒÐ2Þ’èÖ]½¦·«º¥!×‚ÑS¼D¼ò½¥mV“œl]q{J;Êòê ­M¯nËÓˆgwV°|d½›~e>.¡¦ñƒ)+³ÑÒ€t¼cšÞµCÅ7‰ùÎœ/Øˆq­ËƒcXóJ€11­yè¨È43Íé‘a¬#Vk´†Š2? xËª·–­|F“Jö%h¶¼ºÃZS¯5g5Å–—7ïÞÏ:^ê‡q>c‘õïÆÍ¾õ¶«Éö)Y”’9âê¢[ä¡þ‚]¡JO¯…—,ûE¼FáUdÅyÇaMƒ kÜYDiL¦u+Øˆ­üÕ Û3QÚžŸ•f ­Å'~”„:%rÔgµè ú‘#ž9ëÄÆÆŸÒDHîÜÏ9ÒÚl)Ì4³ï‚T¦Ÿáò­¿}Y=¬¿)…ÙÍ…5Ùó[›Ašëm6’ï?G
	0šËhb3¯z³ŽÛhh(÷~Xí/›1|»¯±çø­iYãdI¢ ŒÌH†üB½È9~KEÙ`¬q#× ù„H?ßj¿§ÔL’`mp¦’^7]-°BYóæ:uúÇOï¥²ªXëiI-òÁµÞýBAo.È*0Œú¬Á-žéÒZ¤ 2¥ýíŒì@1ÏÝs'(kÍygÜR‘/¶X+ÕÔlÍ	-–Õ¸±Ø5ïßÝxÁ`íº^¢ö8: ÙŽGGû‹Ù…+ätq©IêVÜ5'[Q7þÜ>ÁÚUWÖ°õ°ö{‘ØºŸ¥¯£R5 Ùø<ã–É!Äˆ„ú‡fsS$;.yñˆF|‚¢&qíö§·÷»Ï.=ý,7tì& vW÷KOÏžýñ½óÔË0B°öî""­!¦)1î|¶Ÿ)Ñ›§d“6>†l››ë’!äÜïëmÿ!¬µï©½»KukªQ§YÏôšÃšàŒ›‡¤5Ò ì!÷‰P…™W’ëTi×~ž9Zàú°Öc•2êf¦«A!—Œl÷v©9v{GíÔêéZÐƒ+L…Þ›åã™ÛIFvJ“D”S(ëŸM‰!‘®i5ÜF=³2¦1ñç‡bÆì)NÖJÂ0.#ÖÊÈu ‹k	Ò…š‘‚0nsj°»Š°í££“KXËåøÃSÝšh*Ë"`Qµž™‡d	™èˆÐÍaMáë4³&ÙùÎ<|và@ª£5}€æÙy`M‘´®Ù©ÖÄúÅÁ}ï­Ÿy¬TÈÏñQ¯‡8Øva€Ô~|öYm¶á¾|Úº¶u¦æ³¡aUªÍ£¢Íßþÿì]L\gšçWÚ»ÕìíHâC.¸ƒØ
IÕT¥Œ*Ð®®XppvaSqÆk·cËŽi«¥µÛÑŽãÆ–GîA–‰Ç(W9vÖiÔR«¥»ZÍ]´Jß´´¿ÿóœ—C%ÖÎÎmÄCÕ9ïyÏ©¸êüÎÿyþÏGKc¤nfªKKUIkãUSÞ£Ð‘­„²öËcSDIýüÁ÷÷L6Š™uH¡`më dVl{­’·Çæ.`B:û‰ iµÊw-|ª6ÿ1¬NÝ,€š­¬…©ÈÑ?òÕpâ”	U¯aº8lî!lMtlmLìy§ÔáÚwµúÒxqÅÉbqpQëZHË|ó[­¤øCcElÛ,4NÊ›~ñ¤‰išf`>‰Ã¬7È÷-’»X›³a	úòx¯U€FÅ.†!)ñÊ»ŠÑªžõWx-FLàž~¡´\á3¢ÿ>ˆËGT3JUhfŽ­Àc«0êPó+à¬¥…Îj’YðëÙ’rÓHNx«ÒÓFèí0MehQÄföê&¬ŠÝdþÁmöJ¨é5ÁØp8„Ž¾Í4wíŽò ‰Õ[$BÎÀÙÚ Ujà²îï†=ZÚúúXD®ûm–à8Ï‰Å°æ”Âˆ…‚‘àÌÙjÛ¼ÜAK31¬ÕF0_d¦ì®±oøÿùT9”°–ªoT¤ì"R)eÝŸÝsT±¹	¬q›ÕœÝXÓ~=ô M,­ÍÊD;ñÏ§ýz‘´{M1ë kÔ'êÕläyì¢¡ïõÉpN!›½v!û^w¿vGGsî7Ó}ß`ÉQkìwFk‘°¦ˆFèo€ÓCLYSŸw%]²¥tI¿d(íp{KW­9¬‘ª©±“áŸ`5¸	0c­–kÈkÎm‚59Bê ÓÅËäÔøÊK/ÑF3·ˆTaš‰r"-†Ð4Æ‘Vô•»±­`H0çßÓä }m¸q¿)pûãÎyx÷7µw6'ÚÐÒè(%¥Ë-Öi€£'¬¦h†®ÁqËªpLÆˆÏz[fyÁ`¿‘dr`ý1ºš«iq0«ÙÇ#Oït•SÐY#'[Š§P¦€Üþï°‹µoÆâš›¸ŽÌ&iM"Úå°¦C6Þm±-²VZó¯9xÓ7WÖŠö§”µ˜Õ ¸¿þwÿf7vc7~JmÖì`|y‰CMŒ+£UPÙKU²OìPãMIÉ¹ãð™Y÷{¼JÖbX»‰²¶ãRiTt®CÓ¤B°ÉV*SYÞZ™kœª,Ñ›¶ØôµÖ@4hí¬†¨¶ö_|µúÕrîÙýûÂýö³¯T‚òî»GÛ»Ú‡ç.K\ûÝ #Nkí½‚µ9ã³Ö‹¿Í^dk¡€HUX^M3H7tÒÿ²²¶±[mÌ>ì~©q^§A‚kç¢Õ¹MõÍõnž×Àš9v•² )­4og‡ÒÔÜàQP†‘Á‹Ö[–~.ÕMxPZÀ^•‡ó“¨º&Ä<	‘­Å	ÓÃ¸céHê‹'ÌØªƒ­Ã»$êñ´Ê>Ñ­$>ZŠé1/òŸµåÉ{+Ò"ŒŠ>8 "¯Þü;h"¬ØbsÝƒ²¦É kìè/LÞ›ªOË`Ò0fÝÕ 5ze±°¦;7EMM2ðN5Cks›{ÛÛ2mäRl=²Ú,»£ÿõãÍ½]ë§6;×Ïšõ£>—ùúZ¨õÓyì´vbýü›çqÙ“Ìµ'IƒÌ-”‰Ñ*ekCÖüojléÆBulrlh*;Z]­¯+à˜233>³­õx{4Ößƒ´VMé\¯0¬õçû'ûKmk‡Ù`ÄW:›Ó¿	Ç2†ÆÂÀ&*vHh>d‡‰1ÁÝßÖ.©ÕÔ¨iÝ´é“"³©ù¸–ÍŒ/­MÊ‰°6,ßøaXm£»{°­c^(C„ØQ‹FlvÆ–$;EüÁð"›IChÌçkl=<É`ÑxD{?5X{á…Êš­Õ*k8ŒXµáåjŠ/¯Pjs×±v*ý|Y.ýfýH^±ÿë¹ f/Âjuƒ%½Æ=üwns!Ä•“Ö×_?Õª¹ÕDê§µ&ÛÅ-NÑ·Š%1{£{%rXv©_kUú	ôAº«©(¨Ä#“+‹ù¼©iñ«»ø[ÁÞ"Mr_Çf¤OL&mcÈ«Kã×E¿·>(áµîAÈmcp«m½( Zƒ	^öî )dŒÃ“ÑÈÞ×j…µ`ÿèÑè°K£9Å#€,†5…9‹øFÀ¦²•yn¤cQJ£´½R2äìÇ·7WŸE°&qMdöÃFkL)67vû·wû­ƒ#OlH¨»-ù¶®2öÖiAp“{…+Žšùí ^¨ðŠIVÕÂ—ÊLì†ÉÐHÍƒPVÁT$¬|‡Áá¶"š"Z«ÛKÊ ÄäºÃä°ò–&Ì„µ`seM¹Ô¦UmŸKk- 5ô6¹_ÉfÊNd ­1A ±A[ÀMÔäÍo¥g^X>ÒÎú•×4#X£öß‹ìÐÅÐá˜•°f¾#ìµ5žY-åkÇ[÷m'5ÉiÂ<6Ã¼_ýüymÎßj~ða“¬ZÒ˜…4÷¸¼l^î‘ŸÊ¡Ÿb#¢ºµFŽX(§ 7|¨’YYDbêQNê'ÕI>dýú×îLì¤µï¾>eÊÚ›o>ýîY]v
8ü#Ëîr#~œ -³lzI-dFB§ñXw‹´[Œ´gHÁZöæ“@kµ°v\‹"Ù™ËDUk„ñYŒ]V#vÍûwc7~Z°öMçTÕÅÇˆ™tC~x|¦2ã¬¶T©R¦fÆý2MR†vfÏ™ãžýˆ²Æ‚¯XX°– ìSÕ*²Û<¢o÷›.k^Q©Tª¹tq¼29E.ÙÐÂ(M¶{UNŽ/qµ±¼öä·¿ÿígW?þücÅû×t…ü³ówŽ>Æ’j1PI°ö;X­«K~tàšc½ðw¿m)Ìý†ñÅ‹å´µ°I«Í-ØÙÒÿ/e­#Zonmõq¡eí!¸æ°¶)iÍ#.]K´µc	IåGƒ'»x2$èäÝ”h´vÆi­PšÊB£ÈÁ‚Æ .ØŠÒÀÈXyùe8-ôæ¥=›Bò;¶3!yþ¢šžò¼Ã!@‡5%3Z–4´`5¢Ü.‰g¡AË‹=:ëÖDkdQuê$À™¥U `!†³Â7¶#V›pˆ`¡¡Mù4ÙÏ÷ƒŒìÝW„gR—µt}vœ«e›íÍC3céÒ\_3a-Á(ÐšA\*Í‘ú(<#HìMåê›÷t2Å ·=„¤¹Þ®d’ëwÎãîÿøÔæ&/û÷*çål°gÕö7Œä»›ç9?¿Êsö¶#Ì•«Y.Èæšê
tµêÐä8½ÚË““•¡ŠþR«å4f…~¬R––øÇÈNãßXªËÐ¸°”M$&©Y+¢õó;mûxcÙ²ÁtcI¼S0»œ¿3Ú©fJ‚qÕM»BÛl-­Ålâ²š­@tS\±¢íZ'ÿ#6š?"we­HÁÔâÆÊàÊ;¸IlEdæá`QcôèŒÖÝÍ2ž
ûã£M,:)Xó1TfdâóÚôIz>_gÏÉëïi×;#Ÿ^ÝÑgpëþÐ
;N‚DYã}#°Ú—ï½ $dî²è™—v=ÉÈË‚5%&Sôç„{.G¸êQ¨[Û c!ºó÷Ò´HMé‚xˆÌëÚÔr]©ÇÌC©{«õ°É"%Õ€Ö¹ã"G_ÊÿøRišÂ¶é¢„5š`krp¡L¬ÌSY>BaPé )‰!4´>s;Hç8
Ôî>|Ø'Z“®ÖMëµn“Ò·öµØÖØ#v£¶J‡½–7(öZÉš ÏÛ³¡‡&<(zÛýœƒKd`³¸+vÎÂƒ|«Ù¶›©1ð±ÂwÇ[V²–±¢²Dª7Œö§t¢]Ÿ"§vkk”Ëç1µŠ¬¦ˆ…µÚDÈ£¤C¬6µ¹ñe‚äþ(¶	ÒwËxDš‰"•¯AjF–h£ú%2!h3¤õkƒ·6GXJ©[÷GxfškM˜ˆ¶ñg«0ÏQ¾V6iG;830¾îhmÖJ‚µ†A™iló|¸@dÐÚëšà	ŒØ²dCÒšžûE¸ì{±´£IZ# 8+Y{M"ô½þ…ìý_yIÂÞ
Éi¯½æ$&Îq{¬A¼¬Ï	ÏI“¬†ƒ$è'ñÎZo3Ö¬ûµÔ	ÿv3†µ}KZÛÜl§}™Y2ŠÙÊ*èÒu`ÙŠ°AClµTƒ±Ò¸Ò,»XßE6$½Ö2àt!ÃFW*wöl.¹~öBóñ7<v 7ÜEì"ÞÓ§Ÿq:³Z¶B5Õ…,”ùL9†5WÖ´ÐšAc:*Gãh«Ë­…§¥w»ÈÏ?øàkWäkk¿Ë¥"?HÁÿÑW6lÕ×nänìÆO*þê.”WVq¬µÐ9Æ*Kâ5•tJ—ª µ”üE*Sås@šßjJÖˆ kdA&(Îvc}€±dh”f—'ÅjÓ““Ø’ÐM*KˆÕ1õøÆãÅÒp†›ÈÅ¥±ºe:­-CËR×¦&¿ü€’µ§WÕž¼ÿþNÀž~vTy
6íÅaÄ.B ¬i]¹‹0ù¼W2Bo[hõÏÍB¦ÐÑ’]^–ÛÈN0£Ûs‘Fkƒ[}GRµ&iíÖÚ´fŸ"5Y8÷w6u~xy¢Áç¨P\gsfÐuÐ«¸É>A]C	+òAÎ)"×ìGª<M˜6AÒ¢¬ÃqWFOÖTÆÂfÐÓd*>¯mŸ ö¬BÍÂÀŒgÖð-P³k‡5µt+²Rá–ò8pítž‡TëF&äË/:¶´Ñ
L]°QâH¬ÄlA@×Ã6X "”¨Å2Yø3Ã=D&ÑpØ¢ŸÛdš>EãÙ´hm†?¹
DÖ^®P¡9«­yÆ#L)|Ã`Ízg×ÙÐÙ¬÷jÑ›Ì‘¹ØÙÕÙ»‡Úµöf¶^üEß9¥\—·7·¾þø‚å¼Àk _g~N	Ek§Ž'p\=~½³¹·lÆú¹œJ‘b‰…Xä—J—*7æp© nÕåå*ˆ¦¿ž¼EÆËÉ…ÊpžQÏù±cÄð8§z¥|¿5Å–‚éšá¯&>*ôÐnÙØ+P™cw6]~s„"Xk®{ÅÆ!‘Õ¯±Q›õ¨Õk¾_Šú‚ó¤koÄÄë‚¶(‚{ÒÝD¼ãI~œl<0ÜSÛ$-¦·°	Úõ-Úä7ÁÇß·ÀjŒBêckl0Ð‹6×®³Í&N¬QÖ®’©xmÍ¥5sqUÅ6«}ù^”k<¢„ó72‹ÌÓº²!{Cµ+JTFïF¬h„VJ2Um)ÊËÇZlõ(aM¨ççÓ,Q4:Ð88‹ß²MœžŒbÎC&fc;ÝÁ»‚[‚¬©AÞ^È?ƒ5&â`Ë‹û¼$ÐËobp‘À²[éŽkdE^¿ÛG(rÓ÷FöÌŠÞ6„™r„D"åLQø€+Äaæ4@@ü&jN:›‘:R"Û¢VÑ¶*v<B¡aLm½ŒátoÅ†ÿ™„nÜÏþ„Ú«R•ŠJc«wßþÞúgb5‡µÙAJnÓ¶ÍÕ5YÏ¶'-e1ÑœÒªMáæ6Êt4*?§Æ¶òà3ÎÞTÏg›²Vm×[\kÚÝD¼ŒÑnµëgžù…Plg—5m{X²cG8ÈÒ,5¶GKîÃ³«ÇHžùÍl^½ÔŽóúGQÉ&GH>„ôMçƒÜÖÑ2âjp†¤ÆJÔ&Ñ‚S$ÙŽØ5:x1xåUpÌ6MB“bæVü¬ðù®ýÌ°WD'ë k¯™-$V’ÐŸo·^¬Æ÷3îÒj¨@¬ù¾ý@-^hwfj°°YÙX	*ã7•æÄ£¬$Çär¹ÐVÆËßzb¬åÊË©”Ë²]g¿[ïÜÿøÂž=oì”ÖÎ¸ó”ÁÚ‰S$AÞÖ2_å8%)óÅ[¦7a›yŠÈEd»9_ô!›Õ>~g3ÐŽ!l©¨mº¦. ÷¥¬ýXZsmdc™÷O{kláw£¶é¢–~Æ²kÞ¿»ñSrîÿ+B-–×F—”ú8DÂ@?>úËÕc3K]j£3Hd…S­sãÆÐxfÍ©ÐÕH‚¬õqXë~ÌÛvlY)ƒÛöPoç¸†¦&ÓÉìäØ¸V)KÐY5]¦ÓÚýÕk3øŽVüò‹¥~{ÍYíÞÑžôÅæ°k©g>Ä¼?4û'ý‘
¦ßx\LÂjê»ÖBã¬Ñ¬}¼Fqò/l§:fÓ­¸ùÿÖÌKQmp£ûÖíûÐñ°»o;r‡ªvîÜ¹½ûßÚ{îò@¡ÕªÃ½Ö  ëGÈ°!Z‹R¿TÈ´‘ãh†ÝB©#¤6JVãƒwâµß/rÅ³¨-5yâí,Ó°•Á°%‡3çäŠóÔœÁ\mÓê¼)[ÏÑ:b˜Ö‡F€¯ çM¾ò Ï3PÀ™F!©gÄ¼èÔ}Iá
À”©?æFÈH+7¿‰ÑŒ(âø«y¥šJëÏbÿ8Eg5úH‹Ø¦ôYc•i¶H	h±§ˆÓš¸Œ`XkïÕíIƒ$X†©²±îd›\H"“s4_[?uöø pmu¸d`ÍF@5ƒ5R¨ŽBþwËÏÎÓÿT…p”84©î-—Ë¡Ùé“?7:>>”šªT²)’orËÕ.,”1ò+ôüê—Ã3¹Üè±ü½_ÝSsƒK÷D¦ \Œ½Q·:#_‡µ8¡ËéQ85i>ªêŠ"5Ÿ÷’2B°%)Fˆ]GÊÚ¥ìæ3aÀÂW‘1dtŒ=½¬l&Ôµí›W›luÉ†1É‡ôè?0Ø·²ØÐr )Èæ‚J¶SXÃ¸6¸ïö¥¯à¯ðh†&¤1Ð*š¡d¬©	S`M_˜AF=Öô®yÍîªš‘Z@5â€®u˜$/¢dïC¯økzº8­—ãôÆüe«¡!p³6m~óÞœ°C¶è¯ËÄ¿qK¸v˜`ªEüb¬cçÓ[¦7jã1­šÑþ¥Òx>à¢µÅPÉÚ°)frÉK»NžãN5­6Ø>9{—eE°&xCXS+µ ¬¤ÙZ÷ ¸àut ¬1T^ä†w¯–{?.þ‘u¡vQü¤†_Ö<—¯®›ÎbÏîÙ¾ºŽ÷0Zkp»(Ý½Ëš=³E[Mødð¿?½M6ïÁ0S®OfLSC_kÌ`¡^.óŸ_*{B]±?~–Ë±ŽFž§¬mîå=€žû³Íª‡ËH{ÉQ„Ò;…Ñfàk~Ú9AÆ½C™S=mÕï±Ø¦Q“+õJ˜Zé¯†A°½’Fó¬XìóÅ6•µ(tDà7g5B«˜Õ=‡÷_Ó6c2U/eÂ­®4eqðÐAþ²a5')ò w.v~g`ÂjJ}´nkZkpÛ”ÆöŸÈQ„¿^ú™<@PÄ×^•°&XYÉ„‹iÉ1Ö3	ƒñŸ3p§~`âÕWÓ‚,ÇMO©ê·o6ƒ»g®¬5q™H7²¢¬M+~™i M´¤ÎApõòñ¯S.$	$	É¶Mv`N¾ýÇ××›š.|ý‡7ôy ‡`Ç´3gÜ·\{÷„Ik_eR¸‘È²„ËËä[`
É7Ì¦í÷,E ö´ÁšøÍËÒÊua4¦	vØ¶mi¬ƒ	µbûƒµ''~k`_¬À¶9wïWwUáš©i~ïÀqÄ…µé]óþÝØŸT›µ“eÊ!VÊËUX­Ê;Z6;=9Ž­R:«ÄÇ,¬†6?:šIg‡õÍ]ÄaX×ÑZ-¬yd‰#-+Ë¶ÿ^úf—ë
ÓÙTºØ?^©„9†ƒ™©®e*ØäèP¼aYnH´ôˆ¶¹Ï>ùä“û_<Öž>=®}G"¤Ùy[{°Ÿ÷3ŒP·ö›.RÙÐ×ÁzAjÊV*`0B–Àj±eù÷×ÂZÈ>Ùè¶3œ‡÷9/¸-umó–h-­¡¨ñÅúòå½ûY¤Ý‘Ù+”f%B’œfEI#8Ç¡µ6Î‹¦ó*‰!d­O«§y–vSg‘4/5F3aŽà)ZPÞ8‘-’Öxœ5Ð±§y‘=Ez440Ù¼`-Ïù¡ùþË%R¡.oø#(áÒOUNÅKB°(©9÷4ÊÈ73HdPÖ$‰L!¢FMÝˆÖ|ÅDïˆ-ûÇÆ†§ÒcãqL\é1±š43ŒÀfÛ7]sf¬åríj\ÍV}sosÎPG¡š¾X5ÏÇe¤wýÇ?~¼¾>°gÓ`Íò[T>.T‹.¤º°¦8ñŒOÍgG7gë›A4‰j°šBýyš{“Õ™ñÉDj4ƒ_xr¡JÖn9µœIÓâ dUjÉÑcÇî]R'òü¥Ó¬QÜ†´ðzÁbÅ¼½0$ÐM¹‰´×HEµ@ë‘fYÛ[ø\ã.uÂžØž
üåc!kQ‡n> æ÷àéþ„ÏÚÓ†dJ»BýðMô/q¸â7*°*¶²-þäž7%¨¦·uìÔ_ŽuµÉ’`™Ï;š*¾š1ðH- ´Ž¹~ó:ŠÛý«
ÖÜ¼_Yq§µN'j`M¢šrabâÐ`MžüE.a˜G?—Yò”´íë˜Ï/.ùïÌ#:ÜÃÕÞ`µéRmÕDkŽk^ü¥MÙ@DþJœñ¸úR¢±FiD°Ö/kÉƒy]qad°¶í}ih»¸2«h”Xº1?ÁE§·^••÷V8»5«Që3eM`‹ÿ§¨kpÈFGGÛ ·Äö´­5ÆdE64v×µµpPCƒƒ ÁÚ=Û`˜FSÇš`»¦kb>¥Sz`¬hÏá›ƒÑðZs[ÈÐ;V¬ÂNŸ×€ƒˆT™*$XMAb3HeGr%W6xû¶Ëk5¬V«¬±Gþ"·Vg×ÚWëU‰]†ùAÅ6—’ÕmÁd$ì«¯÷í þÅ°fµÉ¦¢qæ5Ñ‘›ï¾y˜¬¦<ümZ‹8-¬ì•¥ùf 4§;[k^çÆ&„å²]ž£bÍ;p;gsdpBšýÁ¢²¬½ö¹åÈüAÌüœAkß/ÃÆïÿìÛtÆ¬©iÚ« ˜™é£—	ÆX†yÖ¢”3)hðL†#?@çŽü@›B1FlYHž“¤öo[õ‹èM mßÆµá?èœ·IKì:DÒ° Á°C•d)ož†ªÕ"xK%ÙSHg¨6#‘ÄtPõ_Ë‘É-Wž;û‡djÏ¹¯¿»|Ù5z¥F	ê¾i-±‰w±î¿‹K	O’‚öŒ¬ÊËIžÑüûëä»ß(jK¬`X60Z´N×e5ˆZa3cÉZf£b¶äçÿTãÄÆý kiT«éä¢%­qQ/×[Ek¥]óþÝØŸ¬Ý¥gê•djh¼RÎ´¥“åBi(Å[Á¶7lÌŒQYT-–“é$°jÖXþÖîÖEybsf¿XùX‹œ¿’I:­MÕ‘²Wœœ¢iu•‚µJÖ–oT?‚Öª•!Xí†¬üSË¿ýòÚý»_]»óž<yÿêÓ§ï¶|^°f`pï?÷`ÿ^Î×çÌ`ä"°†]?…ÿEÀlŽ¹²Úb§;Zø÷;`ÍZµØÛ]m­­Üä$hkmíÖmÅ­¾‡?Ö{/£­\>—kèØ'Ë~³h1§~ª¾-òÖEÉFýrB{p.˜Pô }ýc7A‡Ce‹}úÉb´+ÿö1Oj"§‹EƒµéV	wìå”JY*¢Î¨ülºE„ÈÝ/»Žf×`'pÑ‰¡R'™ÖH€äœ\Jòë¹4M.$'Þ¥†|ÏDQ½´]raM7Â»¬M°>ò!â6bnÃšããZ(Æ¸yT¦Rí¼†dÄiD-®IKKiCPW¯!‹t¾Æ¹?Õ;0ÐÙ%\#š\6%rýìzÒÚwg»ö¯Ÿ:ùA^@Qó‚57ý
YG>+7o¢«aNÙ¾Ú­¥F’j†Ú›ªKä.òG’éK•«U®ìWqáI$²3S:w+L’L<4óË{âUƒµá5’>MGs…‘u1I¯ÒŠ`MèNž«¦{¢c`ïèõA-´SÛF2F5,§¡vx3k8…[5I‹•lÇ´T„É ¿…#|ÛLKCOn®	¿“7uð“#/|Ó#g9Uµ	Öˆá	Ê¯zHœt"‹™, µ“ßXê£¼DÌÙ„…¼\Íïõôððë·n¢¶Ý÷4HÂ@/‚E@5¾LY«ÑÕ”	t‘U,Ó ì/f0RÜjk™'!òÊË#ªæl¡a=­íâ
¢Z«4kÁZ_‡[L=›*…“ä×M#1§>¬G,ƒÐÎò»éoV(¨ßÚdëFŽ†VŽZ4Ð“R‡kªÒHú”°ÆÀ;aw#£mï÷CV0‘ÓŽü+V­´­°¦ÅÈ]ö:¾ö4l€Ì[[gYµILnà6²Á†Þ9"v÷…NÌ¬1ÇÂ¡Þ">[3§ÿ6‡5m6N”Š‡þçâ‡‡qH>c‡5¶ƒ€ÐT¹–*k:	µ‘Âh­‰|û7Vûê×ÈL°ö%Æð-òéë\}«™o¡óîµ ‡ŽdÔÒÖÈÙ¯ûôºWÖ†æ(š]³–söÚ0åÁZTÕg_L]E÷¡9Å°Vl×ÎØŸ—³ÁÚ”5-Ž3YL‹(ù–±-:’iq¢™R!÷u8¬2X‹Ä5k¹F=Û‘#Ê‚¨)÷Ñô5‡'òé‰Æ·g´ôEn •´1ãª`IF¤ÁÇüú¯ 1;Ê8Ì3%|<Fö‘:”gˆ‰Ž2 „Õ}ëRì~¡«k.ì¶4ªŽ‘Ap&¨OÒ¿¿²]bÃ/²¬–Ø”9ær]©FªÙõkÚJ¦æ¾þzýøeáÙY‡5þlX)_8ë½^N ¬óé\awisÒx³”Ã•SV£üû5t±Ð[?ÃA<™ùc™%×Äu¿yT#žkÇMWã>×›n!à4n~19°k“ÛXî­íÆnü´`íä{ß¾³¸V^_Ÿuå¦ÆÒäbÓ“:cB[g«C°Ñ.»œÛCÕñ†ëj;•µw#X»›Z€5÷Y«óq{l«A(úHIô$o{d*ÜP½ÚË£ òžéÀí²¯]½úÉ“'O>»ÿù'W?øË_ž>yöìŽ¤µS¼¥[¯µËö?>ðV'x&ëþ$ýx¤­Alk,)`ƒÐÒsœw/Àm2~<©$A“lGžk+wûñu»{û!ÀF9ûÃÁ¾ÍÖ¨TsVÖöòìÝ»7¡t(+Ðg P5p%LÝÜŠ#ÞµI­påÜxAYVxæN¨kœ¾a«<Ïôo½þñ^´Êo°ííÕ´Xíò>X'*ì°o¦ìH`i]i¥±}Zëß:3Ám‚ƒ,óuGf’…õ£E¦ñïï—}žŠ¶ i
!DŒâ5KÛ•kÚpEÍ–¶ÖýGA32R +CÐšÐ-[ŸÍ4ƒj®¬™…Hè¯GS*Â7Û H_ôÓÕzSlÂj©¶ÄÀú©õãÊgY‡ÕÞ¶DÈM¶­¬=>Jà.’zxôÄj}}¦¾}µ³7™È¦ˆå‹Iòåk v‘<4´0J$Åìã•©©QJ*û)RƒG©ÜC~:}O°Öã ÆRâ¤Cbga:šb¿ÐShËÇ¯j`a…½¨a—$-c2I±aoÃ¶ÑŒ”ˆ9¤1Ðˆˆ%3Mk =¬DËŸ.Ù–Ý&œó4‚éó–ÂgÏÇºdÂXvÀã›	ÈžÀa"2¿kCLÃ®¦‰Ëbˆ¬¹Ž¦!þ°à¨aH°oc{Á_¡f- [T²f¸¦¸¦k;amÑ\}¸ë•8D÷Œ#®4Åµ5]½ Ö^TçjÎ~%2+oÔÞ&¢´â†iî,ù§º¶–ÃØìÓƒµVd¶ÈÑ½NTä“»»·¶VJzçsÿ	‚ßÜü4ÅÔ@«å]ecì±hœêìÆ"ÀÚÊà üIšôÐK¶²2‹Òõ•î»7o)‡{cCÕj-­k(imª¬¬Ö7ôóSu¸Öµ„£NAˆyjH“cà#eX£¹¶7TÄÁZl!©¯çJkl›	ÉjiMG–Wà4Ÿ"!9“ñ¦ØeÞÝŽcÌ»:»	¨)ÜòùÊ±:;ÛN[ìÕ¿‚šoÑÕE¦ÈT²kö†
¶Àj¼	©hPýší¡B°šðÆ×Ù-ØÆPŠÀjÜk‚=>ˆ“ ƒŸ¤Â÷þ×¬2­Õ‚ßˆÏY«½î0Æ	ýX#rÂaMOC0<D¼~ðÐ¿ÿ3_êŒýkóxýBõ³WPÛ¾W•3¯"’!‹a6ò
R‚#)aº‹ºØý32™æáRÐÌHÄÚ«y×kaœ»ýþÓ·`lîýš Ïd¶oÎrIÔHÛ™Zi­½iõÜžŒWIÚËM6PŠXÎBD¨¡¢µ5&52Ø=ñQˆž›ÓXíú8kˆbw¡­)òL€5PÍâÄÑÄúÅL›]€z'@Ë€l–	r9æ;ž¹föÃ@ÑS˜}$pG˜›¤9ù½ñtŠ»OHƒ¬)Z{c›ÖtçÖ…µ¤5g26z§±y	›M²Ø-ZÛÝøéÄ¿ýë÷Ð‡±©¡lºR½‘¼13­qf*e­Œ˜•Ì¤'1€Ÿbf )-Œ°¬µkïßƒVóHhJíðñà—ÃÕkèN“Ùœ•/TÑÑ–?Â©¿:Šç×‚{÷/1²}õWž>¸öùÕûÏ®ÁjHkÜµwß>z
?Þ×ÎéÚÓ }±EkÉæÜÅ$ÉËðš0mnŽ»šnk¨flü³D¡£•aš^áÇ¤&äÙÚ²Ì•­¾•üEÔ¿hÐ?G(•;ã¬F¼õÖƒýû¼ÕèÍE`“9s!€ÒÖ ‘1¯ê–yNIQáTÕC;¨j;¬8Í±ý'WÉ?çÅm<Öç‡ö¹_ÔÈ:?‘gR'ó¶ËX‘Ü:<$=’Y?ó¶³ý¢2$u],Ë‹é¨˜ºrz¤ˆ£XÂXBçzšQ@z'	Ýµ¼64‚!ÒÛq¤îÓ,`š±2¾"•le¼*³Vï°æž"õÎj	…mèNø°^GÕÛ —hïìÊíAW«oîjÚˆ\	•ÇÙ²Y ²·÷Ÿ» «ñGûsxí3,uIUuäveþÝ;'š6É…L¥øfs¹&þøñè]ÈÝøhTD8Ð•¬Kt]¬®‹ÇªïTºÐ?N‰çÒ£þþ™Gø@NNö÷•p„|!_àßë¾!&¶õG&#øF³:®õ7zˆCDþbzó°0Ùþœléµlá4Ð‘ÒØÐ(,8Ø§ÑLX»¢‘àÏŸ+Þ²Géë§žö+ObSË×Ãp.Ò,\ü&RÎ†wÚôLhª6¾Ñ=‚5ÖÞbX»þiŒl¶q OWì‡}¸Ûú~¤¬)2VÖÞŒYÍ•µaí`Íþ+NO¿|äÐAþÐL“Ù¦ûúêPËìW ¼ãy„µKŒzÈEØŸ#F¬E]1¡÷š´kÌD$npÆ¼Xë0 Òaœ;[¦-)P}ÝXSh£{vÍR6ëœR#¯P{¾µ‘4ä	5X“piÌ†ØæV"ÚÃ&ëD5ƒ´6º•ÈàuëoÐ÷ð!‚ÚÝ»wy¯ÚÀrD;qì×O°ŸI#«£K÷–,BÖf»QÄq¤û?Ú»Y¨ESU«„3§µ&^#ÎDÅl–	ÑM,«ÕÆë~±bùlGì ºýŽ§÷d]DÚŽÇWg;»6ooÓñCiÍ…5‡µÙÕÕýíqçÏÆíá¶'ŠõüÔ·ÖÛŒínzž¶Ùi?¢Áš10åh‡µg5–î*Âpÿ ¦…OÂˆ¬6B{µ°‹u`;íêAj^ÍÁRÁ^«V‹aí â™Û‰¨ 1ÞAÁšl¨ž„ýöacqäOü³xMný°ŠŒ½úÚß“ùêKf¿ø5ãW~fùÎcê—M d²Ý±ö’Ÿ7Oû­
MŽ®¶Gx'ä³”J&ÑÈ¾¦Uý:ÉM­Õð÷æ‡›o?^ÏA=NÑf•$¸¨Œ¤J)’pD•ìJÊ=tîwˆcÉLípÀÄØ÷÷îsÇ5Ý<ÄpV²vþÎ‰Û¼wäøË+ßýÄj–º¨g2þ§²þ„#¾ˆ½ùM[+Ö´Õæ“îâ/ë‘Œ?È kµÒZpa‰G±[ŒˆÖ:ŠþùO°˜Þ¶–Ý¢µÝØŸ¬}ûí·\ƒÖ6xÛxô¨Z¾Qâ*Ï2i&)ÊrÈGLS¬2UH×Õw­œ™´fÌÆF­²†¿H­°æ}v‡*t„]ÅÔlÁ`6\^N.	ÏdÙ¿44Šžv£º|q‰XX¨b.r1sÿÉÕ'ŸßÿÇ>ûË_ž|õbÓÛÚmXÍa;Èà0‚s?y9l—)WSn%mÖÈ‡\¬²YÒ#ÖØÈ¶0ÖÒ-áÓ/&5MÅ©AodÔÌnîPÖœÕšÛ¹w>ho´‚ò`É8ÂJ'eEÅ¼ù6²&1Åz­!¡upÍóÈÔHž=|‚’iåàû"ÓGf•©ÂXÙŒ–ïÐbßbž(”}§R°†dw«T˜@žþ#§©A³òv#C$‘Ó²{¤I¶|­1¯`Ít¿V®çô¹„tB/‘˜„!ÖD`² ¤1Í~¦-‚¢¦01)ní+Â–ýÇŒÖ²8ö5•ÇÆÑp­ÉkÖ´nrg×Õ\CKÄ‹Ô|+ÕÞKÖdïž®¦æ®Nškƒmí]ä¹ð<´W †üÎwwÕ`µ·÷ž{|á1†Îœå¯…}³È!«‘yçYböèùÏžñ`ÆÊZv¨R]¯I£"¸d¶Z¥ÅZE%•ËÕ1¬ ï[½13L»5þM““¥Je¸g|jr²q2êX`Î,ýXÿåÍ92¿œæÞ^¨F‰`QKl8Í˜Žq?dÄd¡)v€5–¾£6NÒbæ
"›ÃšËjD :{
ø’•?ú@ã°æExÀ—t`yIÎãDdüH èVûÖó¼H`-žaá¬¦…;ôÇŽ$ÛNýÀ‹ZÉòæý›Ÿ.Ž¼CIÖ§*g»þ>šZ¤¬éë?›°ÆâMgµàhÍã‹“F=<Á·ßðV¨ë,	m³û[‚­w¸_Šçõ³jö€¡)æŒŠP[¦}üä!O‘ð×„§æ±¾Á÷ò'æiï©ÎQ÷_±uŒ	‚Ñ¯´"Xr(wfî}Ï0ô…&Bü³Vé§õcxño9ö-wª+cƒÑv 
ßó¥Å=£=3Ô”Ô…À›¬‰dŒs\ZkòáÓ!s‚AÐÕ˜ˆa•ÃZÀ6ïSf‘x.¬Þ;%’TÉ
’t}YE@n«ºÒ²¹yëÖ`uœ	¨ñ¶=kòŸý<1Ujx™¤ýÌ"OÛò“nGQÍXmš×Ó©[@ç/…fÚ@²Ö”©¥&[bX‹‰x«ñ0Þ¨ÕQ!ž¸Y†…äZwän@èúÛFoÚpýMÂ°f„f~ýÌðÑBÑÚá€gÌhŽ ŽzýÈ¡?}/Xû³³Ë_¿&GF,FÀ32±xÄò?¼ôP‹VØd02cn#ž©ƒ]]Cs“Ãˆ«	¾|`#ÞËMà[0aÔÒs(•Iþäk¿~ü•U}Æ>~|†Ö<5ÊÚ¦ýF7÷$ÊzõËI¾„jd>J¸*—¡Ÿ:"IÈ‡dy˜­Q×¥8²KÚÚœ¸ç²jÓ 5(-ÆÖÏEùÖÕËåÍ7ŸÝÍ¥–ï–±€4 Ì, ˆ…Ê>Ê6Z¤™7®§ZÍåU#üB0÷w‡8!&Ð&DË²(h+S–ºvÓ¥µZXƒÖ®ù*ãîýúj)ŠÐô¥­R+aÊÚnÑÚnìÆO'þý_sòp7)XÛÚZ¬˜!’J N€“ËÊ)HŽV+%D€~Ô6ÚMÓ[‡îÎkAX5kŠ'}mÛá"!¹%´ÅÖ@S\`n(¸¿ÁZ!]N”».ŽVfH¹\ÖèøöÑ2´vC:ÛPvôÆï¿|òÅ$þýÜZú½8í³kô?ùêÄ‰Û·y_Öð‹øƒBM±¹‘þHcµdò"ÔÉ YÍ\"—	T5ÝÌÒ±TÍ¶¶lQÒIm£5€m£…Ç­ŒÕºïÛe\,FÖBÅÚ~œ ßÂº¿ùAgL ¨â´µ»•¶¦’5²žxªéü{¸0ÿ²2S¬îlâÈá#fÉÑ‚4¨ÌL•YøçºòÍŒÕØ¡\H}<ë.XÞwh¤o2íiä:' Ã˜¢œÓ¸Øj'å@É“ñXä¼ž
<½Àkê€"ˆÍ„ÆxH€êÜÃÀ,Æ´˜Ý&×˜ë¹Óš"Xû³—°–Â€y´ZŸªpF˜¥)ÖšœÖXFf,·ýû›ƒØ&TëíÖ~t{Ws“
×r—ì8¾'—£ndHNäØà3êÇåüeÊšY
RªRõæÝÏOáß™
ˆÑêæ7“uõ99MþÝGã•Q®&ŒÝ˜»øQžÌ/—rÉ©þq”5+Ä«,õ÷ô§õÇn	Ã´æK‚5­'°Yìã/=•!cn1¬¦­)˜ñ™h>Zš4¥]µ.mSZHíÓ†;ýùò’µ j:®¶ÑK{ú	§C‡q¾ZiÝ„ÚdÛßTkI4B‘š³˜þ5iµñ-9’=ÏÑÕœôÄ3~˜6Nº°vóS«SƒÒ´‰	°výd«`; e/P°$HÏƒT"$_ÕžÔ
k_üwÿÇ?ÙýŸÿÿñ¿¸iå_Ü|]ÿì¾þåø?þe‚Å¿.þGXqÓØ‡ŒYpÿWûo¿<Ö?é­ÕÚ¶AÇjÝQ”EÙ(…«PMõÚò eX»D[5B ã~Õ6aˆæáJ–á”|$èƒHi¢,«lüg½ÕÚ-:©­ÕdBXÛÜ»Šw?¨ÖÔ’ý#*º´ˆ8¦š»`›ÉlÄcÛû(-í‡²	Æ!x}‚31“çÁ³í1QƒjÑö¾çÁ´¦îÜåÃËBÄ@Ï!-‡3ä¶}ÿ—½3Š«¼öýy¾ç<_ÉcmYñCP•ÇV:$ÌœÙr'Æc§6xŒ°C%djnnrL"À>`ëœCB“ 6I“H‰H­¨ŽCÄè’k™p®…T!¡JGÜ¡¾DmyAº¿ÿZû›í	ná¾"¯™ýío{Ûž×{~ó_ë¿ähCÙ)Ü—Ÿ7>ôCh“•?
ÛÉj„ÂM`Ííç¨iæÞ/X3ðR©šÙ†P¶F
$î"Û~°û	$5lCör¤žØÊh´ØOðuŸyOl–í§HrÔD]±ÍŸ0í3ëàæ|'xóŸ(5Žþk?:)ÕèI¤Y 77ŒÍæEïÈ]°ui2AŽ_Ñ¿üW&›o =¬Ž¶T?H	mHi/Ÿîì$/æ$êZæ<õ²êš›´6¿jm‰né{Z¯€hKßßºÏê8Wy±€Ãˆ~ÉsÕò1µq6ÀZC|ÙŽgN_)¢‹\z»AÕZMÑÚ“!’G µí-ÜÅ-Ò7B{Ü ¡6¢»m­mÄF|`Oz_ÜÇ›`­««ûàà0ÄbÝQ÷Ì¤>ç.K¥bq¨«HûÐÎ×ÕTïcI‰°`íì-²iZÓJÈm1¬É8¬ˆúÀñÈHZLeó|P†fÑÓ?¬<…1äœ
ØP0x·ü+øì½'p|ïWïßúøõ•y÷£ 5`mz™¿¯&­ýçkrƒ¬²$ûñÍëÚ,Òam"š˜HƒN+¢"Ž¸Ð›"õ§ÒÂ=Xû|Só¾›KWˆ©©#—í}°ƒta¿¦+rû#Ï¤èP”Þ Yñ6m–`5üuã•˜w<ôÏá¸¯lE¸Éîž‡”Ÿ2.sXÍoÎÄ8ÞühmÍB5öòxQ¡È”Î¼ ûX‡õÝUîÆÇG…ùAŒ«¶H€vŒ`n!bQj&²ZÍÅ:`Sž¬ý…t ÔÒ¾Ü«_Á”Ð³"B€æcå”AþŽýÉ¤£ª«Ù!Zëí1G‘ž¨›Âµ¼±šoð˜B;æ¶óÒµÀn“ÜXG vÈ§q©l¦>‹!d¶±‰IjÙšê·ßn]¸w7N——Î^;ùè£vOvãþ•gÕ–p<oÚ¼z{ûæÂŽLž>nj€X/vXÛØ|þ<	R¡ù>E¯‹îwÎÌfëº¤KtÐpÝbºb×uy¡ãC§:ÄfÎZ±LÆ
kZì£µž®ä™pEûŠ®öÍªÔDxZÿFw„˜´,Î%KI1û°ìVíŽÎ$ß&\ÌLY—˜Ú kÔ·ÄUjzIÐZ‡5óûQI¸U	:ª¡X¯^«µæüðT¬%6#®Õ”i™¨&©íæÒåùsçnÂe®`õ o0Û	NÚâE÷‚×BÁš^³æ#w®%´Æãÿ^«%¶dæïo¿¯>y|	«ùŽíKAšvÕGÖ‰„ÒœÔ4~k8†ñ$“Ym|å£žlÉÃŸIÄkˆí_ŽeVÒE¤ey§­Qo•¥«ITHŸÉÆ£,Z¸!~’tÈžQO5Bš† A~&\á¶è_™2Âš\ÙËt9^P«µÍ—Í_„HÌû×È0
µÅ||a™FÊø¢4¥\Øó’dæ/Š]@d«sH»Lø	ËU_§ÉÜº©éÑ½ìû…dRá”ïµ7·ö²5ÖÖÐÚc¹øbcÈ2@ƒÇ8{?º†&XÓ	ùŽÄž“`sƒ¹MÀþ(S[€µŠ»B±ÉÉ_Ùö–Û!“~ÙA2€làžì%Š‘©lÆý?Ü¶÷ÀÞ]{ûÉ]ûA+Ä5	hX€\²Ž„´˜² —Gƒµ½p;IfÆe„ïÁ6ßP™„5bÿþ=x¹úŸs]M!b{ôä“2jtX[ ¡5…EG]vBºZ^Üc~RØò)Dµl¼õhnn"«¡2p,¸¿ÈØé'?íÄì7ÜœÒ|Œ‹òWVÌºzuáÖÇS«·¦è(‡+{ê£0Vs“¤&ó>kVÇÆ>JX­Ž+-ÊuUCH"m!ÐU¹–}Ça-­%ÒZ 5&Ay,­•â§¶-¾&\k>¸Q´¶ñ}‰¿ç=Ò‰}ûÊ‚µÏ»gÞÄñ¡Hž@~ýsléâNDë<žzNk^ôúd¬ñ¹µÁÚbbøXS¦0­!®+ç©ÃbQËšå†Ëfñ%Côþ²mF1Qh»panŽîÃïÀ›¬÷Öˆ32ƒdÿ5ÀöÑÔµ+G®,>»Â«âï-™²î¿>ÖÔ
šæÜ»nLelÛD¿«jrêŸ T7Ç¡¢‡‘h"Ò'–iH®Èžð{¡­ñod¨öÎÙ³S·æ/_áFb°FX;-X{üÓOol¨›VÆ£qíÒÆ‘¶LZ«TšÒ]%…|>”)w‘rÕmíUÁ:Ì×±'ä|û9‚ÕkHgã¤«ók‰]ê­(aŠædV¬ÉÝLäšë'•¬áÀh!kƒ0K%xÍ^fI4ÉukkÁ«Òî¸æ!=ÍH-,$	â3B­ÔšŒì‘	äÑ^Ô4$¬üð004IIS„¾Øš‡¦ØDâi§`µ‚t´±í;´DqB½L
­;²œ&RË··×¯?®lÇÇoßÐðÔ¯¯e»$]ÖôVnáÈêÂBasS¦PÏ7)4e((×G¼ÀÉl#mÔà´3ÐÚ$•vçÏÏåêçh)1YNá´^ÌØÕ»·È/=ž!ú´æÕ&Mžâ¿€±—ç5ŠÕÁÔ,±Í•jfc˜TªNþÅ.­$¬)12DU“Kœãð¹“ØÂA€5›×Ä)®Œõ1¶çRý°
kŒü|ê¼ø½Á¤q¼þƒ9¬‰Þ*›á™l5ÒZX†Â<€5?ß”¯Ãó}í½'vTwl³(¡†©õY#H€tƒÅÓkkÖB¤³šÃÚŸßûk¨ö…5'3ßCeþ„Óý…½¦ƒÒþƒÚz¤Æø-2cíÃéí+ü¡ƒê\3¼ÙÃ§µO‡¾?üÓ¿tÏîO©Ø"V#‹‹Rm0›J
FIn£D›ßÙƒüdˆ
ÅBÜŸõhÁÄé-ñÉÖøEIBµìèò‘åÕ#’Ö‚ólM"¤…¼ –šR‚5¢ÖíÄá-eBc×ÏKû©XR=â»Ú_–45F™±¤Öœ¤¬¾/6sdos˜ûVÓŠ¦µ¡•ä ô¸Ì²…ô|¨Ìþñš!4ÿéø2 Í2!ÖT³6n#ËÀi‘r—¤uvåð¯?£b÷Gâ3¨¦~ØHbêh­B²»víÝ¿w×n«í•‘¿T6e8ªôÌ;ix`7T‡à¦%á×·€tw#2-ØÕ\ÿ‰lœ¶®!PßÎ-ÇìMÒºúòˆÓdÿa²b8šæ¥êÐ¸rõ³9UQ0±•÷L6E—‡ÌXgk9?‡;HFŽ)ÞÅdI‚ìõÕ;_>öÊÖ­ú®±¤Æ`ï"NþÓk¯kWÕfmµuzj¡<_Î•©s‡ÕbX«ËAn2„ÎLOcçÕœ9ÆÄbG‘°éX#-êŽäMÖ´¬UévçÅ3	¬ÅyŸž­RÃB­¥ÙaÍc$«±mq]M°ößþn#6b#¾G°véÄ¥2yåÙó3ƒ]{Žæñ‚Œ†‡s~—*Gõ–¡²ØÚzXS˜7Ï5°6½:m5k|™Wrã%ŒÔt:þ„4°ÁZ¾'Ÿ¥ø`¶0‹ÃH¹Ü3ô¨†È–™CÊ˜cÀÆæ·¿}ÿ®ç¶w”ùõÔ-«.7p2X#·X{½åÍ…±7‘Øä5R QØHyÏæf‹TD€[!'
ß°‘°*¶-T±Íö¯5X‹´]úœÈËW`µW§vîœ¾úÂ´~(Ÿõ©fíL #ò™ëøôúælÃÐˆŠÇÐ±JÜeÂ}?ÞòŽ`Ø¯iOt.Q‹'œÉ.“i?™Œ`×aù663ÃòÀÁ‹¯WË´CVlÀhí¯a3Ù|õ•âTI¨Íê#¶Œ»X¬Yî9kÌ•ùPGº‹<I¡‚‚ã.ÜÕPœ `4ƒ5&ÀÚ©;@:AA /ÇÛ)mšCkUz;•ˆjÆgðJ<±
˜Ööòë6,îŠøt€€Öð]”ÉHµhAS˜æ#;=	§1*Ó¤­©HFãAÇ5†ål˜d8ìF¶.¬ÁeæÜ/ë~ý²@mI$ï÷–x“0jXnâÛ£Üp®L%gw¶©€ÿãä Ö393 O†{ÊT²ß¸eu=ºÎås‘†âˆ`ÌTµvGWý'ÀÉ%æ,+5A§T¯µ™ ˜kk)ØÉÍ·v…)Hi>räCbÏŸ$A&úšÖ’yüåkr)ÙbÔ‹q³â6ñ`€CfÏ±CAk××°	ÍïËrlw«%¸J%žyiø&Í90iÍÃ'7o¾ø|åykŒ}ÎËÍ*nHrQšZlâ4wá!Z3i-´Ä®¡5"ÐGµ°ù˜<ü¹~8¤vÓÐš†äÁÓYÍçÚÖ×’áÃú ö>fûJ[ÍXóph3>C•×Â4A5žò13?Ú¶Ø¶ï´©EÀt\îSîoI×8®ŽXµhŒ½7ëpâŠÔšÛC-«…Y;¤Áž“RŠ÷âYTŠµGê{Ë§U†åu¤5ÖÀ7ÅòÒæÆ¦ú…Æ.ÛX¶(€–Yb%ìi‹ùú³$³ï€öÆÀšnlrdqo	wc÷˜¬&X@Å±µOÜ YYÇÆßFPŠ=(”…+Ó4¡„0¦5žsfÞ¬±ü(ÉpDXÓõÊ‹””Fše@Zâ#VÖ*Ÿk!7Ñh÷ÇŸ|õfþÀšYø Ëv= emÛ®h`0*é{Ù»Y?LGiÛ~6kÁÆÅl¸qÎck®‰ÃmÀ@ž’W©+?CV³Ó'nPèiÐï9Ö8^ÑÛŽ•åÑ”z­!ŸEvãsóŽnÓoQ_¦6-‹’5Sa&Ñ¹‡œdCÈÖÓd7¿õ–ÓU<îrîç†ALÔyûã©Öp(WÓ¯!flðaNî"-`Jƒ´ÿþœ`"—°ZÕ’!î›M°ânImÖÖ-ZsXÛ±ãôŽƒ5£´ª¤ÆŽLH6‚ÓŸÿýßmÄFlÄ÷Ö0;ñÉó—Êû.kÝƒ¼{Èe3 R”óò{zÊRÎHæÏz$ºÚkJƒäyÒY-ÀšbÞoÉf{ì÷ÂšT&rî²"­¥È+Ü|3™Y1Ó)j†Ý=ÔsþÂyÊÖò~û«÷ßÿíùÎ8­Ý={æ›ïœ9C·µ·n™zÁhí¤ò e)ek­Þû—Öæ¢‰7ÇòýQ?°–ÛDD2™ˆŠ¢5Öâ6kéÜDÕ24#m[Ú×Ü|ñîåwŸ^j[¥WæñÁÚ“rƒ<ýé±ßœ>FÕÚöÓŸþ¡sl.Gý@‡Y‹Œô¬~´¥£k${ZK7 ®m9¤·½}„ú6ñ‘˜D	ì”G(@ÃZ¹¢r}&úpE·õ-‡dÎ¥‡eô?.X;dÆ"ãæØO5{¥p5PGPYzQ¦¨Ék’&œ,ºÕEŸÙÏ1Çf¤$eMüçµuJl—ñHWËˆ.â Ì/¤>òpÛþàé»ÄþQ°£CÀ5ÊÕ†‡{½6ô®±2˜KÕå°·©­k›™ÓØÌ`d­²Ffb“Úö­[MÛÇ˜©ßiF-›·o¥Cê\A
ÓÇµ{Èi‚5t5…R!¯?.V›š^Îl>2µdt˜É
É‹Ž2ÐYíVûIVpØÝýÔL÷P”Í¤¬îéÊöÈñqd°—Ìûpý_NÛK„k`SRü×çV€\(×aËÂ®ŒqÖÂŽ“)Áµk…µ¤ª­êY©¢Oæ>(ªë§âÉƒ>‘sUÜ^Ûº€Iƒc¢Ð!O™Bêõ¶ë0^Üz×s{ÔN{/Jü“îØg¶îóû`íÜN„µ›7é	§k,ÉÊþgà(wC°¦g‘3U?ÈWã’µªdµjM¡$È ­©1$Ù6¬}Öî×ç5Ç5_øªùŒ´HÓo/\óý·ÉkÔ|H¦_UaWÐ×îC·ê>7‚=ì{}Óù„Igr¼ƒ!¤þš/ÚBK£L¼F¹qg*F5vkš$œ–ÀZ<ƒj7ß±lÜV&ùƒÚj+YkÍîÜ¹LÆƒÓZ€5“Öj…5ikdf¦š]öðÑ¿¹öÕ~qšyeµ§_rÈy›&ð(tÛ˜ºEfð¹9¬±¥ã}…Á“¦:-ÝKÒ—Ëeb®jpèˆ&ÂòRÓìâÀf^ç	aÁ;pž½|a|Üa55æÁ±ÿ°·È–*7ÎA¥ïw‚5\ ¥®‰¢¬ñÚ¯ì'/’¤HŠÉvÿà]{·)µqï¶m4½ÆÎ÷¶]{…hB°ŸPÎ¶z{ÌjèrfQâ.fÉ`GTÄ	è>#RgÆ#’I—õ_´>õøÊ£nÝ«pa¹mV[YnR—ke@–ÓEÓ¬è”*{H:ðYòeQÛXç\C:?;†4~þ|¢2uùÖÎIPg.åjùJ‚|™76Wï}|UÝ®.4é›™ÏDuÔªÍ"‚e(‚Ã-Ì>ªˆ˜´Ô@k‘¡«!òÞ=[gÖÊl<á4÷"aUvö,ok¦Î>½¦h­FY+ä;;sUiTc4H*g7ŠÖ6b#¾7ñ²í'—hòœ`íÅwvtä²å¡Ri(¯VÿHýÃ=ªÝ­_äÓªí·ƒ²fŸq¬­YSäÔ¼1X(:p&Ó>Î	gÃÍ×Û¨ˆ«+GCt·¤A‘&2s–9@ÝZÿl>þƒWï~ðþ{4øãõ»Ä™/n–n^ÜÎ^ü|õÕŸ>¢{4àd#^²
×<~yýÍþæ‰ëcQºY‚ZZÞ"V¾†Ö±"u-jÖj/ÿæÄR³K—o,ÝÙ4ÿê5½Ù›ºryé–{ÁKY{ô­·9ýÈoŽáDyºó™Îë×ý!ƒ“·aN)M‚#MmÆM	K·Í6µ¤ù¬ÓìÁ0µÆ:DíÍ¨$èóÎi÷«5˜ËŒÄ 4õ´'”‰ÆÆ˜ã2`Í>Efëðw2¬@…#¼ûV_·°h—¨WR¶c	·øvñœQ›d4	=ìºÒÍð°&UH¾#íšÄ¡‰Ãií1±ÙP1rKÚ­‰ÎB«rKZbç¢=dA¢Û‹¦³É‡ÔŠ¯¥R"4ÁdæÓx—xCš²ÖÄÐjzÚöN¹yƒl$Dšpãpô/l•¯yÖDh‚5æ¯©Z}Å¬û¯_-ìØº:=ê0˜o”ËHÝðptÆsf¶u’ÎÝ“Ø’Âk]O½;8T¤Ôrî¶ýí§þÛ<ÿ§ÄRl.‹1xëµEÍZ¬V»ê¸ÎYáÓšÃ–Mè€[—e"zÁ›¯„ÐÕ®f5ÒÚ!!˜ŠÒjØîbï‡Îhî/„¹„ût¡kiI™›uq&u7&Nò\Y°ug¸
/,á5áŸ0Ölí(nÚ»ŽÆ3œ`‚ÖÎóó7‰›°›¹Ó3?x¨ƒ/¬j 5(-<ž&r*®Zª…4ÈZ\[?RC­²¦í[âK—Õ]-T­%qšÌF˜®KlI$H-ÙýURKÖ4„3š¶ZR[[ÇÆÞ'µ{}‰‘ÚŸ~ñ‹_ÌÀ`Nj„Ïù ÿF¦¶Òf¿¦1%&Ú‰Äæl”
^ÀìïÕÅ[­ñH,¸ùÙ¬Ì×Ëº‰¬ñ©LÊ`íÊ7¥5›³Zµ)vCãB?<Ð"3—ÎˆÄ¿Ÿ=XÆ@©¬f)/±cêøfa–ï¬)47÷GÏ‚$XÍ¬«æñ^L¯ÙP«¬yº$œÅu¬šþfŽýæó(Í~€ß¦Xâa¶ýl``š–Erã‡„dŠŸ>,NK`v3tsOÿßfªYSú"Põ¯rùõcû-µÝß~°l×¶m?ØaØ½{¯yó?Æd÷ÞýœƒîPÖ(WÛÍy«QƒÈØyIüÇ^Šš¦ü ÍÄnqaˆÏšÛ–§¦–—–ä³8ŠŒ†u!qZ¯Ð0ó¸ê‹(ie½i€uŠ-ušNP¢IZƒÉ2ss’×"–$©e‘ÖZS-´Ê.×á4òŠîàâ3…„5O…”²võ`íÞÇÀÚ×¯ÖQË‹÷7u¼7™ ÔÊQ$Rd Òj‰-5-Êy&*¯
-‰\¹\…·bû”D¦µ)rFm~}.“¬­bX#NÖÒÑÐœKi§W­1øºšbÖ6b#¾7°ö	Yû^ü¯ƒ—ˆ~«YëŠ29Þ¬ð÷¤@ªI^¾åÈÿ[çmÁZà5¢¦'6å Ô¬ÑòÕY-eá• ¡œ;Î~Ÿ®zù«W—æ^^hÍjqd(Wîéîî¯vƒk…¹þ÷!´Ê7ÏžÿÕëüöÆÿºôŽZcŸž‡Õ®NIZ³àÜ2Ž?üÑQmb›ˆlìÍÙ(BB³ŠhVAùq1Kç€Â\±ˆ—¿R#‹º}¦ùnßå—/5_¼våÆ•W¯]YZº2õ4°Æ wyX{Ü{¼‘	¹½3Û"¿’‘Ž7nÊÖ\S‚‘C‡q€Ç-¹]Lê+|H¾É´ååÝ0²™ßàåÙ¯[/ g®!RÍ‘/y˜uëeùóº8¬	Ý~´I­©WƒßF`5QÞˆr,	(!œua)BŒ€d@›Ñ?¯é?,ÛÏR§^r%Çé	'8cÎi…7
K\üÉy4­¦jMËfµ†ýì<ü ««·w8›W6Èââð °Få"¯L3eZ#š‘M‘Ìš²ºŽÀ’L¼¼·’ï˜1l«Ïîà`+ôf=×®Þ[OËÝëž³Ú£‚5ÍêV,ò…é…Î…åÂæÍŠlïÿLVSD=(¼ý=Ã9¼n&IÐíÖŠC{èêýîQ`íí·ßíá_èíÞ£XøF©nÐïQêx‰>]’)]‚Ô©pÚ¤PŠÛØüœ÷­o-ÅÖþZÒ‚ã¸k^E<ç—øX[…jÕh%ö0Ã+á"ÖØ¬1×èÁ¢…—·yâ%¿šôf
žÙña­´ë¥xéZ;–qÂã'òõïŒÕF¥â¬Fh|>ö¿×Þa½ÅÅËçNœphCaãù"§Äm'ìŠ‰½HèŠ-mVsï~qŸµ»ë*kžÉóâZòHë“Z2ñ!äAÖªkU§‘°¢íogCúNO†ï ®%sg7Ÿ9œlK„¶x—l‰M	#«}ù‹/ÿý|à4Éj1ž	ÌÂr[z1žpEýh#ˆ³stÑe5lFlRíÅÆVÓ:ÐZÀ5[¬æáíh)Ø¦“ä&¯ˆÖÂò‘ËK*ZsXKh-ÖÜºŸ²µºÆåeØ‘0÷Ç¸0.®SsI™Ã“—“Òy¶`Ré¡«cAM8Ö`ðçž¾ì}—4YóI|Â´3 k¬ kÆjUžs~ãLkV³ÆÙ$üGC®‹{f›Þ¶…{B`4 =~lkÜ´ŠqÿÃÏ–¤Ä®Ç@(S¿h¨&tƒ«˜“¼x@ºÚ?Ø¶‡üõÕ#í	YúnûwÿpïOp(QCl³á´•¨©©ƒ½ p„dÁJâxÂhŽlÔÃyKm®ÿÿ6‹·®.·í\ZF]^ÁJF§hg(ž}emÁ­zÑ&Êuyt³,Y9ð‚ZÍ-…Æ–™Æ–…ìA¸Bû‘Ù<ÈÞÖÉíb»JÔB|
¬}jV#Öbí¸±ÚÂÚ­ÔŒ}t»ÐWÚê»t¶(WµÌ‰˜K&ã¬Æp'—°ç”­1æ""g@æø¢è–Õ¬Í×Â¬vû´‡2¹B.´Z‹7š1¬m8ŒlÄF|`íyÊó÷‘S„¾vðÄì¤äIª·‡ië›§éÙ¤5mäêl†È/`0ò õô,È kf1rk±¡%µÅÒÂè6¶¶«Þ¯‹¡ˆ¡(Vc-_h-·È6¾«˜–Ûq× ¬Ö·gæ@u~ö½÷ß?× ¿¸sï½qwâÜ;ÿáÕkgÕ›^kÜ¦ùVÃÀß`íÍëDZ³¸NÍÚ/Õ^MËf2f9T5Essq¤¹HñZ1×¼%GùÚl.´Z‹÷Ÿï»¹¯yÓ¥›7/_»±Ý ÖôÇ4¶y…`ÑÚõÇaµ­Ï<³™vÜ=â#™àCFÜºP×Yº!§d˜o´¦ÛlGEìôSþÔ¢¿)Ÿ‘R´–4„†ý„Š×âWÄÔ;dcà»Iüež#.™ñ]Èv¬¥æ‘q{ËMÉ
çJé-}ƒµ4usàÛCã•—ú`:1CŸ%O¨É ±‡j5‡5"Öo|PT¤¬1 mIJ¤ƒš@ã~§þŽ¸»Z¾&—‘AêÖêS²È×¥¬5&°œ±È±ÆFÍ´a÷ái‘¤*âÿHã¥í®	ÖÙd1"‹HîÇ´Ìî<«Ý»wüø½{/ß^ÔÜšÙŠÉU AÍšÁÚñÕŽlnÜº½IÚžÕ½MDÃkxÞðÿ
×¨ZîîÖ)Z£7öÁöÞ=¥Þ>:91¼§ãÔÿøç§9€Õ<¼µšf]¥—þçK§N%Ýç‚P	«)Ð£œµ‚¡ÁÄ¾ØÁ«RkˆWŒÄ2_X.ªò;"YpÞ
öì˜„Ó¶A-üÄdQ¯Ïi­OGã›Æ9x9÷†ddêá/®÷þ§1ö>ôÐ'íøé<¿n k!âÈƒ*LƒÁ„oöi¶ó )ýÒ‹'NˆÛ´ÌÒ 	³î¯*kþp\ƒ×Üa$àZ-¯ñ\7œÙj¹Í÷ß"±iõkÕ§³š“ïÕ¾³?$ttùàÊ˜=µi-ÁµõR"‰df_ý!Âšt5XíËßÏ:ª9«±y$°ÖÐæ{aŠ	v‘ÐZ¢`9ùè™¨gµ±Öò1é²¼¢V3¯öúúVé'ÒK.¦¨6½Öx$°¨-ˆÓGG%”:Ÿç?J73iÄÏ¥ŸiÁ#¬UÝ ­¥Ñb‡ÊKäØÕ5ÂŽO­¸f-°šH,«žF™àž©k„¡RYlT4;qÞãÞiIÐÅKM°çqø´vÈMG˜ÊêUy®qk  eÇd(¢)Åñ 3yCÆ±_-×¶ýpÛ÷ëìö†Øû©ZsÂø‘áè}Ôdé¨&,ôïÌacàòßYÕÁ¾ù6~ƒÐÖxÏ¡"5ÓÕbúfAÊÚñå|‹UåÔvŽ¦Cx”AñsHh°<9õÆö¬ óü¾˜¢ÁåßXÈÐOýtk]æC5L¤Ÿds“Å=k±F
äÕiÞ]`	9¿ª¬,wLYÕ‘45Iküb¸˜V'Él<sœf·nÄ/šKyáÁnÓ7Qv¤Œ\\pX‹Fi=›¼ûki-¨lZsXû|£-öFlÄ÷Ö”õõ¾ò‰ƒÏŸ˜ï§‡Ï¥úr@Ú°Leé]Òß/Ï­üö•DW»OY#ÄjSj‰]S4`°þþvÊ/bnÝÅœÁÚb¶žµÜpW‰”ÙÇwuÏŽïQ›l™BÎ¦UdÖšY½ûÆÌÿï/¾þšš5LF µ©#Ô$½lEÂüÑ…Õä1"2Kâ—äC¼©j¶¹ôÄõ7É­Är6®UËa0Efæ¿©Èz.¬óµ¹d3ÇÍmï\#òþýäVQ…*óè?½õÊ§Ÿª'öu’ ;ŸQáEÌX¬)]7bU¦¡€ñ)Žê;GUJ83ª·b@N­²)JÓ1mULÜÁ=üðƒ2ˆD/ÓÝïÜfýîøhÀ)¯§ýtIhHŸ4½fÝ*úôSUÊ6â„ºJ&­m)Uè£¦ôHÞW€Š@œÊÖP×DaxQkžúÈ(@ÓV]pÅèí5ö"ÖÂÝÕ‚Þ†s¢†nX9¯|H±Ï¤&Í¨Í–ØÙÜÎ7ÈÎõÈ¶î…‚vðZ“*Ù`µ™™úíÓ°šÅÕ—=rŸ¯×”æ©½vr…
ØmV³ròÑåéé­üˆºÜ>§ÖÀµr–¥áþÖB*ß/GÈ§@6š
Å(Pë<:3kjû©SƒO1¼ÝÞk€–0™ž(k´/A`sÁ½ß² çx>¤’õ3óùDXÓà«úR9éCæ²Öcµ—ªC0ñ¯4—ÜBŠdø&Ž^²f´gOV4Ç§9ÎW”éùÌbaâJ[$ÿ?¹Œ|"gH¶uiÍþ ±¯<OÔRÃZ$ÀÚÿe[º¼4ºsß>SÙØÎÅ°ÆÃKÖà5d5k”µ»÷ÛA¾÷ç¤l`[‡ÓÂ$Hm>þÿeEÞkÚ4ˆÚÐÙþ¦ÄV“™pÛ·GØ|çÜVóðÌHß¨ù$ÑÕ>taíË'f‚®Æ¸Ør‡ÙÚÂL ­óK`öI!Zm-+é°–ÀþCòÖÇ…^ãžT¦'¶ÆQ>¥Y¾rdu9ØA*aZ{™æÙ¥Ñ…º%ZÓÀÓ¶’—äù áa“b—’óé·°¤W¨ùwcn‘®V“¥ÖV÷³Zh:™xAê\¬¬ù‰xâ'mêË!Á20a3gÙ›qMýÙ$2ùñÙÌ¼Ÿ‡5„µ{›µ_£v¡©a"Oý¤’´¶{Ûð‚™`IM ¦Æ×{b÷îX}ÀÛec‰Ü&šƒÐXÑÄ¶òyùŽàû†6k<}«}nºdK¿3£ËÇ_~Ù-Í’Fk¤E’¸~üe¤µ¬º_ƒÊT™g”ýS_®gi¢u,“N§TÊ–Â^zn.ÊK‹M•¸lCN]×øjÕŽ9i3XÓ\m8¡5ec ªMi;»:k¬À·Îªø¬A½±ÖÈv4<#ryQ\dVé†@kÕ}ÔÀ‹P&SÙŒXwlIkœÉß­©w°ƒ|2äAÞÖSó“ùfZð‚ôæ"kÿ°‘¹ñýˆÿNŸµƒÿE.‘ZÍÎÏŸŸQwµÙnÔ¼†áµ3=X(D=“ªëDFƒ×j€¥`ÝOÿjR¢.	ûÈ2$TamÄÚ­åXõ¸â@÷ðHWwÏÐPWÇ ¹™¥3“hkPÙFòó««¿*Üýâ7ÎæÏ½óúÿqæÄvX»reZoÈ¡5åA
Ö 5€mLö"l¬qÄêD4±M¨!¢yÛ5˜-ÊÑ››g”÷o!â]3Öî´]~çÚÍÏ÷--Ý õrz?ÈÝGÞ:}Z=±áCIŒIËëw|vêV{Ø*ÇäbÖŒ–JhmÍãªTCZó¬ÇÒi$yÉŸ_Žút\ÓWUa-¶‰skâCSÖ =Ia RÉŠ%]5þ ?0Ëqg¯üÜJäÆu•p¸ƒø­$X+]i·¢[ŒˆÖ€Ašx+@áGÒX§ù/ë‚Ö¥ñh€55Ê¾ÏÀðbTïÙŽ"²¸µšM„8«ÕgØÙiHª>ãÀFaZ!•uXÛQhfm.ÈÓŸ<—ÂVŠ×:Q)n¬¦®Ø(kÊ‚|íÑ“ì‰Y÷;«½@Cì«ÀZ*¬aÜŸ­kýuõd×DÃ“Ô7f3$DvËf#òèQÙZÐÔ½®Øqªc¸›W qh	ÿH¡¸Œåz“;jKŒÁ½ß#€Nkº0v:–ÛœáL`[ÃGIÇëd¥hK¸MËÁÆßs ŸóYøFL*,»ÈæK‡ÖÜ¥4‚+¿¨ÐeÅÏÙyQ^}Q¾»˜ç}Vý×Ð{=íA½YäÅ›bµP´vyÉQK—Ú®€in0âF‰´æ¼&\æýµ¸f†!ÖÃ5‡4Ÿ|#A2ë“Zð±™F¨Ì·ðXÓ~ÍQ-ŒßžéûïŒj<}^lµ¨V;xµ/XƒÕÖþí<æºZ›D³DTK¦õažÃÚ¿È±FÔ„ãFýZK¶œ šsRÕ»?æ56´†g?)åB’ÙæŠ¾€²¬=›Ô¬ªZK”5J ZÅ5m–U±ÃæÈÌ~OÂ -!H;UÏ9–›Óuõ‹Úé¦%¬±7p‹ÑÉ8Í…5×Ðî‡µjî"ƒ‡¸±ó?ñL&nÏï_¯ÑÆŽXÕÏaÙêæ\Z‚…½ãY;—¿¶¾ŸmvXá…ü&‡7ƒŒ[¡U–¬»bÊbTänqhµ—8ðÄþ]»Ÿx‚R¶¶a	ª¡ÊÑ$;±èg'3%ArF%jL¼bôuåÏIëOëÜüôòÎKÏk++‡	X’¬VË\?N‰±ìïu‡Í¡kêL9Êdðæ¤q:)²ÙØœuÁ.í³õùˆ£1ÙŒÔ74H{TÜ×[¶ýÊÅ­M]š~õÊj6Ï÷"½b¢œ·ß$ƒÙ8²÷5°~¶²Éc$¶ðO+t.2ëX=sA-Ÿ+J~ËÕEé¼"ÇI]×pñì«5væ­bššäÓ1­_Ø±ÙpÙˆø>ÁoÀ5>·ÕæÎO¢ðua°£Ôs¾§ˆËÑä…Éžá(UGIQwuêsà.’ôYÃa„$Èº5á¢®]Iê·YüÓ¥!¢è]OËdàâ>9uw“hÖU|ŠSœ½09CwO±î£³³·Þøâ‹¯Ï.æ^<§yýÚµ3S·¦žžBZsX{å4­Ö‡µ12 l×Õmt	Âz®Íjcš7ÊFR“…V1*n2BsT´vçÒçwnÞ¸vùæ-m7.Þ¬)é‰†?¦¯xAÂjÎk[4„r%'~9„]¼'® ^©{uŸD†%m1ï£ŒM¬–ææ¯Æªòæç­-d‡,!º
Pyu~O¶ªfÚXÍF1W–:B)ú£½%M¯á¡ßIfƒäh®&M?ü¥J©ƒÃÆ+—k¡`rë*–”ÜqÊ-ôÀVô™èæG"M«¸–Àš˜L¡_HÂ"I&ä­H¶±q³IhHi
C6¹ø‡#‡5Æ k…l
X+dp‰„ÒÖÒ`mëfoÖÖDV$Ç;¶nÝÑ´jÚÚôŠ5î‰KÖè¯j=|xG _bÑïç·Þ¾½º@ œK¬Q@>G—ö|ª¿2C³xœûù™sÙÜÐ |FffÞ}ª;×s´w€¬ZÝ‡†öôò†’6H¹U¿Y¼LÝ-WÅuË=%¡ÔX-°’;Žø ÐŠš,Q²lZ	ŠVk{Y™¦5ØŒ‚¾¦¥àÛÏ¢9?& ’à0á·C‡MF%:øÕÓohßŽÖº÷}=/ô¹ª¹‰üIze	i¬fÃAºùcÌjDûóñ„¿NRÖLGÓþâåËb¶Ÿ	ÖŒ×.¹²–4Z¨5Y Z­y¿² AµÚDÈZX[ŸÛÂä5'·ïÞÍ¶ oJˆôç—šÿU\†#<k<¿c8¶Õòš¦µ0¸	$O‘Â¬öûûýL[µjm±hÃÌ?a5Ö™lS¶$RÛ1š.ÕR×Æ•õZK¢ÎûNWëm`ÍV×£ˆH)ÚµJXëd\]NjÖ–Öj•5Çµ…Ñ¦º¦ÑÍM1¬UÉ‘`ÏÊ¢{ˆ„—üPœÜ¤¬5Ú+„ÏZRõ¸ûyé(É®Ý°ØX%ˆo*k±ÿ~\‚œ„“ûfÏ~3ææ.âˆç'TÚGæûÈNw›8¹’Gj¶_#´òîjÄ8?J¤†®V¡oS`í3ïæm±ÚopA™ öôZCP³rµýÀ¸ý{wïÂÚ9ŽëÍèÑ@Íž&(srS¤ -¶a./Hv?¤{gúÞñåÛÓ+®¬açAž¤œ½W®N·Z—éf 	þÉªTƒÿZ™Vp>ÝñË!ûG’ç¬‚ãÎ±‚\Ó
h±ÌSe`í¤³Z-­YïMYA"o}Lo #<Ïh‹S¶ãYðÍG:ÔGÑ¬1eâÖ l65“~igº8É÷ŸiÄJ$…­Ø’kaAgä¬¨íÎü]`í›#É˜°Ö—«: ´¾Q´¶ñý‚µ—pQ)ÿ¹y„+‚wÎýÝ¸“Ö­O6£Ììl÷@®…(š¿}m}eV{zj!äx™¡¹"¤÷çršÄõ¸ìX*u)†X¨Ëd° ÌQ4!pìjFåAª›íŠÀ¶tËüêìù÷îÞýâë×o¤Ëg¾~ýíÖÞ9ûQá–!©IRÕÞŒNk²ƒÔg° ÊÈÖoýˆn2qZcc>ÇzÔÜßOÅZH‚ä^ç°;yÑ›’µûš‹w–xÇGÒç­Öô3OkÇŽmFuRckõh”“5oJ0Ò	 ¨+Uém·[ö§Gh]]ÿÑ8DÖ¥Z2Ýî•˜‚g?·RK[gf*ekº#‡`ÉnmÈeæ6¹%-ÖdÁŠ&ø3Îå:.‰Ì€Ä—°ŸäçzccV‰<@¶g#}üdoVËµï)6t‰5L•˜W%¾Ðe£Š÷ÄæÐ³]mm8¢)ïqÍŽv—³“øŠ.Êy1ïej±˜êÕ4wHãa{Û–¥§6°f^T™me·cÉq€VÓöõüçßÑ
¬µÞ¾ºj†0$=zÅšÛöƒk‚58MFÍÄ­ìæÕéé¥Ñ­ê ¬Mæë³ý”nf£!ìIç
ê·Sšä·”¸ÐÑôbr†4º»R“ƒ½½oÇÊZ;œÛÕáöÁ£Å…2O*ÔŒŽÅ‘Ñ< ³@Z¬UB*;[ã@JUäd0ÏŽ=Q1Æ«¤^-×bp
M²}]—®[ãÆ)·~¬â|F¨÷¬©~¼)r<yk¡I÷ÃZä«%ŠÕxq²ú'û^o’	¹Áj!Ú×Ø@jç‡.¬ÁjG.kÊICµ¸f-¶Q¤ž.­Õ(kwa5žk‰´–ôÆŽÕµ?ÿ-^['+2ÙÖÀiáÁ4ÌjL"Yf´AÇë[íAíã;‰lµÏõÃþXWS$´öî¹ª’©‘­–¾ã‡Â,DªÁî‹r†”¿#xÇ€'ú¯Õæb,65zŠ±ÖeMSfÖb¢uŒÈ´®kG¬Ýfk¨j‰²÷Y­¯«_7úl¶àOL°Wµ':2×Xë+"XÑì|ðñ'”ôhyi4¡S`56¡Zk>I8“”«i®Í«ÒßÒÞš5CÕmÄnþÃ8e7+V¸ÞïYŽjìÆ×Jk*T3VƒÎ€5k:¢Ûÿcïüb£:¯v/Ûs¤s=c±,û‚*‚`°È ™©‡©ë8d:›šØÁãØq0_>E¦v©"ÊŸ´`šÚi’ çðŽ¨«¤–{ÉN.>•‹|(ŸÓZ‘¢JQ¤~Q’[.Ú›Hç÷¬µ_^¸Kä5{¿ûÝïlÏ8Ië=¿yÖzÖ š§=*!Ò`ísÕ•™™ÈoÈŒD+SÝd¶ó	hkï."ƒÍÈcÍ˜{5šu:x ½‡±³ñãã¡H/³o’Î8
+0–u¿p‰ÍàícýŸ\N5S&c|&€<’+gNÿëh#1²8MŠËhŽI&p\/£‘ôÐ¦	ÙóoÑçg%¬Q¹æ“Û|}§‚µÃW€5¬FgS´n›ªä¦i¸mP_o]¸SÞWàå_<S¸&V¡‰»øí 8.QÞc
®Sâˆ¢e C§µ6…ü#-arË“O.†®ØÑa$’š”5(½Ñ#*k†j1¾\ƒµµX‹‡"þ°vé9‚Ã¹#§
Ž´îîîï®ÇZ–.6Ü´*-}ýCØ½6§ú†ŠGT{6Ì¬‹[VX{%•ã~fn#$–šý¹¤xAÓá.¢ÛvþÔñ‡ŒŽÜê³vqBIüÑy”zúË]eKç«Ÿ¾ðÙŸn¾‰d~Tf´]»yîÃE>Šq«&ÏÛu={‹Ú4sðßšš6T;ÏFÑš„6*Öò‰o?˜FSlF”µ´VÚVÒmO9^·ŠÎÍ\z²ù£™ùù¥“rSÖn‘Ž!X{öÄ¤çmþ—Î¯¿Ýúžjæ0¨èëf©BL©…rd×†ÙÌ§ŸÏÅUšªU£¡=µ¿C¦ùž6£1nË–øÅmÀR7i¿a{á¹Æ£) ãRõHó'dQbïÙ¤àÞ†#D€?°F4IBÊ¤’•õ7¾wÌ26ØJú]KõõÂHhM¹l½À™GÕ®å¸ËHT×î+âˆ¦‘M3¢üÚ|—¯jhÀÂ¿÷Ñuë
……t]ðÔÄv—ÕÎjÚÜ²ˆ—HKÐ¦~kÌÅjz®%›F![³ÿèæå-7¸Ås÷·ðk¯iª–:–)míù9`mnVE@°m|\¾ý}ã}==}u©|÷@÷T1—#³‡fk×¯Ÿº8=510Øváú¡C×G
»™ì>-!ÍÿX½
¥'<"«¶¶D¢dGÄ;­9çFÎJÄ5WÐl)9­:û‡kš:~yDe-ð™µøÂ/‰Ïm2ìëBºøºXŽ–õnþm;°¿*3À´ß§6Óý$k&û!µ}zäÈîm­Iéšú«ÑW;ÂÚO·¹­ˆï,èÌÀŒáƒ—^šŸa¦9KšÍœuXc7Ncgt‘Xµ†²Æ~·´YM¤æ¶F×4DÛ‘û†Z 5ß-ÜR6pöOM[|pòÝËØ"ªù$nááŽ"£v÷DX“®öÆ_]ˆ~„’!W ãv!Úv2×¹m$w”ussÞ—-µN§š¦]Ä"Ò†AÄÝ>#mž…©±™_D‡ÎŠd@
Ö¢ÁÈ]ÊÚ‹AZ³Í}ëÎ<ï#¯…=¾)á°–öHÍêR™Ð•†‘¬±égðÑ-Ë³ ÝjÄÍûk-b$eh3fÚµêDÆÁÙË/ãÌÿu-Ï(ÙRÔ¦U]m¤\|'rlŒ	Ejû™cÞo¸¦<H™‹<ÍššžÙ¾ÿSÔ9þƒ‰gA"§ÉdïŽ]ªCÛƒ5ÿŽÇ{~’wíüÍç$9îÚ	³™'Iæ¦™%a5jÔª!­1u[wïÕ¦ÍxÁLþÌ…5RW<0„Bô²8Šïòl}£¾Um…ü_RF>X„Ó$ŽO3)2¬åRmfÊ-!ÇopÙGåEöÖ	§µ¯a5 ˆ¹µtQµ«Ï?ÿÒ•“W®üîä"¶’9ÓÕÆÍÀ8bFF$S°fÁ)âª…<HÚ
­¶„µŠ,Et±›ÖB[…ˆ'ã‘ù¥³úf©FY3‹ß8;±µ!‡œK$ÒšÂuµ™5‡‘µX‹‡&’@Z;réÜÏ™ÉÈ.û±B
¸’OðÐ§ïç*••ÒÚ³÷(kø‹4m-‹„
 `-Ó"#¬‘v×.Zë‚iJ]ÝTðö)N\éÊÈ9ÀwéùºC;dêUF§¯_\þöÛo—þWçè@k`ÛM›T‘‚¶&XÃðƒï Dk˜A¶ ÂjïQ®FÀj¦§ššút(@4¹ö”#!¯Ü
ºóeðŒ,øW™á&»å,´6sf‰$	k‹WkRgÔ›·|æ™NñaËÛõZÖ·Œw¨f¬	}Pùoòu”sioäŽaŸ.õDD Š–¤¦~Ñ\Í]úñöwXscæ·_?õ\HæcIh•‚5E¸Æâe€µ1ÿ!Xn†$ò°`—!¿ì e0¢&kâ¸1€Í²7Ëžp_ÞTõ„7‡5&„3ÇX±fÆä¢ZAÑ†ŽÒÅ*ƒ‰Ì¤µ£µ!®-ÐÛŒµÞº`³ópjŸy01v'¹†:ò_¶nÞ¼•å°&H¦Š\‘HŽl¨kèlÙ¸L]BèÕ«k·a5}°¸jA2/5k³ãÅ–ÙõbFªâÒ…©j‚­½;O‰îÁvá=#&¬µœ?u(Ÿ›8ôÊõë´;¤èhµìÑãI¾£Úa3²Úê³rõ€" ˜MúTs	…J'œZ¬tckÑ»ßÑ-I‹¼ã©Kã:«Ö¾Íƒcpê¯åµàDâk§Ýÿ1¬3$oQ‹‰z¦’µ^½«çÇ”È÷ý?@!'¼æ'6=ìeu€Ö8§rem7ÙÆkŸnÚöýÖ¦k.ªEXSP·†®6Cá¨öþÌåy”µ¤dí_k:­¹²vØ¤56Pu­†ÖØÈƒ¼	¨Eb³Mñe6<Pb«UÙØÄl	Î#²ùãáö#j(î»Fl¢í»3ZH€žý–ùÛ7Àµ‹¢°'Ý2¶V‹Áræu OŸ¤Täæ°Fv¤£QÔÑ@¹†-rÃ$s$$³ê‰-j®†¥P±¢²µìÊ€¼ÂÃâX‹ÊÚœÚb§õ®æ1’öªµôÝ°æøœ"£ae 9˜Íš¯%ú›ßÙä
É‘É+®w±D¬’éax&Äâpw4…äwŽIl€¸Äi2›ôE^Œw
6$zV°FÙšÔ¹€jB1¦b1*Ô@6ƒ5æjÃÍÖ0Ñ„À¦1z²€ÔÙìATÙ”¹¸×tµ>ò½={aµOü“HÔ6#/‰0	rZÔtø<	u`Ô*›gE*ãr,IÕ€;w#¤A<ûKC5B³„Ö>¾1—j„nø—ïÄü”èo6îUŒãm5å¬U«†Y¿Íz¯µt¢¬YÝZ‹dµ·~Zbk'ÔÉÍaí*ñüaHíÊaJâgsÐTKVÕf0óé\…CË Z½3W=+)Bz¥šPÌiÍ6cIÑšñ4ÄÆ/Ÿ/‰Ö*DAÈê¼ì cWìà00Û‰ls€µy/¬ý×µ¢µµX‹‡Å`ÄKú	ü ¡µ‰c_ê¦”“n[Šh›è,qÃZ¾1'XKbEÍá°v64¯´Õ‚ûTà•jÉJ¤µzŽeH&ÌfßßS˜èVãáî‘ë‡ò•b–Šáñ~¥h¶÷vgòS‹7Oõµ,AiŸœþ3°ú'±õçýÏ´öÊ¥
#eAžGY#¦ò¥qKMùiÀm¼Qù#ÜTn7‚Ê&?ÿ<·ºFÁ\_¦æ+Ñf.?¹å2 vFpxöì•[—o¹T£·<ñÌ¿¼l¹—£›%êbmÒ?!AtHE±Æge•„•ŸúÉ6P#1XÛJ=%&;L=…YduLžýÜa“ZtŽv‡cSÁ©üGŽvÛ¦èôÚ°¡,ýd“Ø¯‰‹;ð&‘¯	˜F…TS6CWÓï‘Qƒl¼y[3BQÆ©XM-²‡ù-3%5dN¶^wÑÌ½ =NG`ãÈ9ÛÝ´æTÖî‡Ý¥"¨ipžýí:¤
ýFv€5”µÌk:¬Y†£ñgj]ÜØÂe|íN ­‰ðPÅr[sª[ƒ¹Šë6._}IJèQ‡µ×¸!ëà¬f´F«¾+“Ë“·è/È±)ëêŠS}ÄDÏÅ‰n\üI†T×eÔµ:%ë‘–éëj#¯üêÐuù§¨ÃZx¶X;n‰Š™q°&‚c©¬&Úp–ÛÉ‚áº5N¸ÜC#ÑUÑ#Q/è4„ª¶r†LKŽ‚5_ö°	ËNh§ƒÆ¥SÃžØùG€c%úÇØ@Úíâ4EuŒß3ô–<€h¦99¼Z°L&…rÖTn£Ñ‡#þü,¶RCg3©jŠÕØ„µùË3ï#o§FoÀZH„T±Ú™àßo²ÚóäÝq‘²iøËMÓÖ¢)d­Àæ3Ž÷eµZ™í~¶#ÑØW&Dr\iëëØ"·­jqöÀj¶ïnÂµ˜ iõjX‹|õÛ¯®õúg…]µ6µ|ÆÆH€´Ù–¤©´×‚‘Pè°C¤Ã¾Ààs'§`™FÍV-YGQuk¬c3R—¬5P¯FDV‹#5¬¦˜ó×«[}ÒhuîNá­“6 Zdf›‡[Sò¼Áš?ŸvâóìÌtÈp€¨,Ü)Dû*ˆf›@,†.i.›7øË^Vf“Qií…²¶ÑÈulœ5i6fM´¹£ k±¿Ó18ŽÓˆ»ŽðÄß¹ 5dµÀjÿð¤HºaãûøÂç¿Ùõc¸
-m'¶"8Šì¤HmÇž¢ÍÚÎ½\ù¹wR#T‚ÆÆ™àõlÆ…öt¤»¿7­ˆÆÿ£ÙwËhÀóÃqúpN	!ÞàËá‚XÇ*ÆJm:ó­k…äðMË´¿˜ À2`­­(ãPöÑ8G1Ð°$3Vcú? 5`¤ø£VÚ¡ÈO>9»<Gm,+)­k€ («l‘›}m¶#ØQµå,$n!éÌê9•"W_¨ˆßšì’Ý¬¬×Bv3X;)e-ØAFiME§kØ,4!Q÷Ë5‡‘µX‹‡Ö¨Vã£Ð±#G.dEk•
òÆ@IR˜´ƒbeˆÌÅJqª¢o4ùc÷òÑ ­ET°Fœ]ðzì`ÞïG»¯…ÛaX®ýúë5Ø%Vcg*õÓ’»‹‘‘‘¾
ÀˆšQè›èëéF|k,M\øðC,*¶Ü´H‹O µ““Rº^$ˆÎå´&ý¢ m:›õÈ0F—µLŸ\F¦ªþ&Û1£|H‚öØ’×6Àj:ë+@k1š>zòËúK3Kü-]:¹ÄŸñË—^=ŠÕ¯Þó~™‹(õR°FÞåù‰¡Á2,U¶ÖZ°ReÔÕZzæ·pœèµB„±ú0{U®D	Sx(VSøw°Õkcãàå¶\_nêÒ‹ë5HÀ\{üø,vÜ&sužðŽD:cïè%ðŽ—;eëps©WÈý¾]ÃÖ²9¸ÄëN<!ŽG•G±ÅZM(²ÔÁD5ƒ¶’\à†€76Eû`>ßÕ¶6Dÿ²ºÂÊZâ(ÂÈÑaÍÂšƒf#¾PÜÚ°~«]…!$ŸãLdg‘üX,R°VÜØPW·‘oV(k^³&e-Ò²Ú­¹å—fÕÃ‰}`“a6‡º&m­{È‰Ó£¿¸0]ìéVo‹\q|`÷¦Ý‡^ùÍÕÚù'U‹5¸L¬¶MT¬u07”Ê$.#ü»)ueý*[;µÈeU·[Ä«“ãÅÓ.b9;kÞUêÐ¡¤y„ImOl6ŽšÅpçÃ4=·÷ôP›ÀÆ²½ƒ]­"µæpbˆ™¸•$ÖÕµªÓšªî>ÔZ?ýEí¹M‚?së·¦ØfÙÿS5Z¡ùÎ ´G™‹HU›QÙáÒÚÌ¼Éj.­yÁÚJeTóš56=„jlŠ˜
ùaäµ˜Éæ¤°í»@Ûw´÷¯%¶ðÐV!#2ÌîmD¤¶0<XlÍbÔ²›Ëjä@¾qê×_W¤\Ejœ W‰¸ƒùÉ–Q#™S~üj/íXÆfü¦y,Ó‘¾ÌÛrY{9ÿeù^E¶¹[kW¢²vw$5küNõy½¾Ášã–—®ypæƒŠš¯³ùy­.Jà6ÝW„iú#Î"NÊl ÚBÄŽÙ:12ãœƒ¼¤¸±"XsñLÇàê•é­¸Ž9aª²4{'ô4ƒ5Ò÷?íØf+¤p„tIAÜÿŸ°}.èÚKš,C€5t1úªÉ›×ŽÇv‰Î†	äŽ]{U&H£dB1Ïq]Ô@2Ñºš¸5ã@÷!ù¢†Õ.“²º¬ï^_«ÅDÈ×~ÄŸ9PÖŽþðÎ—$_êßx¾2ÏNÛÿˆ€µ,D6-A!­(9Ö»<tªÆ1‹ÄÆj±ó¯  (¦	×äa2-ÖøTñÂÚòò²ši£ä’´ª¡ÚUÚT®«	ÖÌX$ŸÀ
*Mso“Àj(g¬yÎ&ÄæW`Ì—šyf²)f—ÎD7ÈÚ¢5â¶WŸÙœ
 Æ®`dz¬­­­ÅZ<<°¦È#§.žÛrì§Ï]¸pl¢g¤ ¾Ê‘êUœèœh²–Ss›JV»WZÓšçA^6"3Ýq4!tŸµt)d?òSõ¿îî´LHùÅ—Jƒ]ƒCm•‰SÝ=t§¦í[¥„õHe¢{d¨>?A•Î#ü]š§Ñ]Í¥kÑïÔ|ŸŠÎõW§5ò §Aµéìôù·a·iÕ­!™‘ñø¶`MÜ†ªVÈKV#ú†óLòrˆäýó²`dO`mûö'¿|òìŸö–~ÇÇƒùÅÃ?Ãû~ÞÒ:­Y¼­˜¾pa‰°ãàAS£`jÏÎz)ë&Wq¿F?Î&n¸êvƒá¹¼ ª0·Q®	î:¿‰ÖÖªüzkèaÊ‹”q‰ÐãjÔ¶í§dwÐ‡sô6`mºèL †Ÿ2[B ¬C’Z«¸Ðà(j«ò<s;uæ‡Ñ]ÄGà,e°æÑÊ8Ë§ë€µÄÁ¿+ŸÂlVƒÙ†
…¡Â
­ÁÜCÂ‚£Y€59‹ø
iXõg<>Äa¹¯‘4'9*Ù:[r[×ç8áòW¯òÅúQÀÌiMåêkI^\þ`‹’9’g‹eiÃ+.ìëqZkÁòÂèè©ë§¨e£Ùj‘‹}­§ßÝýÊ¯$­AjF¥›ÖNÛlS‚na	X¶fÙvÎ”`î	k{ùQ4(Î KTc3$Žy“:ÖJbµ¥cñÜÙ-&B²èx8-®!
s9ÒÔOoŸÊZ5þâ€_Tµxô­…\KÒ![å.¢—Áé(5ÉiZ‡× ³‚™ÈûóïKÄ4N¶0¥›ž©y›5¹AŠÕ¢®¦ÇaHY‹UkÑdÄ+×jq­Vió!bÛ}€í®–lÚà<r‡Ôî¡µZ¡-†¶¸7«n¿˜ŠÅ­æÈn»Rõjèj_½þúëŸ<»/¬Ýu§snåŸ2KÈ GA[Cëb5Âáp”ÀÁGÞ\®Í¥5Dµ4“œ>+Ï%N/Fi-vÅ~1HkÂFw~$Rþ6I½\d5BSÎÃ¯à71Ú1°œ¦¾b¡Ik†jÖ"­q$Â!™G÷‘Èjþuœ/h®§3÷ç'¼²™°æ¨û›Ù«°Èà'¼”³£6Ë$˜q%!ë‘mï h¤C2k©¶º£áÜ(·þ;ÐÕh¯Ædç£ß{§‘]”¬I_S+µ]´bÛËu ˜d5Ñšú±AjZ@—ÛÉqäœ×Ù¨jsÈ™}´P¹1ù’Šä]Yó²&Ûþ©=¦wæò‚jÚÕiMüZá¾ž¯47¢pz¢#”Æbe4[èd¥˜JSè8Ú2Õò€§Tœ›´&sÈ×þ¬Ì°Ú·‡¯œT‰ÅbN5km†ä0UŽ×Ì§ÄXìQ½úÄæ‰°Æ	!¡UÎ#1˜ãOÈ@2¥%E°ìÊI^cUO,Fe­¦hGÅÖÙ¶Ô4DVûòË/×FÖb-X“¬æÙÙs—&äÞßÝ=äæÉuÅlÏPW¡â÷£ÊæIƒµÕqí0°6«n#	¢Ý¹Ú´N¯Ð@NËèETF[#2%@-SÒ64>UœºÐWÀ'´¡LŸÈ©žî)’×¯cãÐ
h,~ûæï1…\"!réÜ’åAžôïU•ý"‹h…‹®g°ÚyˆÍF;ÏÊø4)mã²…d÷è+€µÒSäJš´¦êµáÂ°ñÔöþÒÒµù›7ç¯-Q·ö»+‹³Ë‡ù³þñ>~VUkÀZgÂjçÏC…Ó} Iž’[>J•jžU
`¦ê6øéã8¥‹“ ®19@z¶$èfŽüÆŽ1‹f"V™Ö$"c¦^w~­Ãv²î—-É~Ëž{œØËý|ÛÄ§òã¼Û6YœP6%yƒ7, ;\Xke‘¹T ®.C²ãÚÚ;Ð?(Nr@KÆ*£,.òPó=NG?ÈvÂ5´!;tåëzÑa­^È§•9„™Wa¨§-Wk¤6Æµè9ÂB®!hmëeÍ¿Ued Z‹Bê)¯_+ÖuuËGo´äæŽ^Ý¼N5†·-û9ôG?¼k×&'çêp#ÖÖgÓi
 ËB¡§»G°G.^ìé¾í¹~ªH‡ê[8u¨•>àk¢5G'•¬½«z52 µ@ZTÉœÞ„kµ±Éw¿ª¾ƒ½ü'¬µxñèº[ìš­ò³€_vOc=Z”¼â3bY€1ÓÖ64•ÎÜM„	+"4v½€ñtFø‰†ßï€Óà&¨l7uV“ÐßµÉrþý±äÓÖÞ¿<Ã+Þ	›ë\y#uHÊšP-ºAi-ÒZPÖÜ’-hkŽk×ØjI-ØVèl÷¥¶Àlñp_…-Üj˜-nþxpE›Kj~º„^ gÉ¨	›“Yô¨ÑÔ´}åî"§`µ‹V´¶*=8¶ÛAž1ežóuÏœ™Â<°ÚB®NŸes[‹ú@[l­Éº_V#ÖBÑ>#±)vŒ kÜ6.„’içBMjaÍßØ¹,í3Žj¬µà‹ìk±5[ÚØ2nÈQÓZJÂš¦ùÄÃp¥Ù`ÍiŽO§tR#\?ÖD†Mfsìò·±EÏT ¬=Í(H÷îß¬qÂ¢çFz)ÛãATS2$TåÙŒ Æ/ìz}Ç÷ytÇ.ÊØvÑdí1ZaïÜ³‹A‹5–4ÇvXAl»¸^Š›NQ×öîùÍçêÀKx˜JšdŒæeÜy'oP‚n¨¦‡Âf‡.kW¶œ‚J*Óã˜Œd˜´(kÚðµ«µ°3ÍÑP­ó½ÑlQ+|éÌ{ª[ËVk`špíÄ«nÚOèæpû6°ö	ÕÜôí'Ë•,*Zò%k£ÙzuY³Z4Á™"ËQ×ìv##33êŒÃ(Sƒç\e³:6vBé¶t'ƒ²‹ÖˆÆk Êöì°fÚÐ“k°¶kñ0Õ¬©RíçGŽ]:·åÒ¥Ê¹©SSjŒk3‰ÿ;\ÒÉý¨¸¬‰ÖVKƒ<:)aÍÔ2ý¤G³ÂO€5yfùŽ7ÈÒîv·î§N*É Ìv•rÓÙ¾žÁ®þ‘nYø7eêsSãÝý==ý###ý§Ž4=¹ôí™™ÙkoªhmifÉs!ížÍ×nêÇ"Xûú=’€5HaÍB=ÖFÙ§§Î‹ªÎ›¶F%\ãx4õ—žjû@8"i»æÝ§/Í\;sF²ÚY2k\á8þ•(™âÏ(’0VSœ¢N€æÖòý wvPÖ!¢#>è~ÿâû±ÐËWôJ“Ž«™ÿ;Ø5Æ1|Ëª_Ãîéc8õ72QwdT;ÑOiEFðá4"÷GŽfg¢wÃpÌ`Mo€©‹uÔ¥ŸHê‘¸ÉA¿Ÿã€v1A ƒ$PU¥T‹ó	}DXL²!»†úi$Ç ÀÓÖ? a­ vµåÛà³•dÆp‡Õ8óÙ"¾!—ÀÚzT°­&«mÞØsCIlxDòdçÑÛW7oœ£OàËÏ¼¨f|k Û«~¬69y•šµ9²(×Ïa"Â‹çñëZ¨Ë“£94!P¡éZ_a¨ûâ|Ù6ÔÝ­ïvoÚô..¬9¬½;0´[Øº›ÍÌA€5é®£±êÕkD-°é"‡5ÏšŒºsÛl•'	Ùæ'`—¬5‹ƒ•†Åà4žDB‹×ˆš"â1kQƒóVp¿GÐ,X¶Ði-¶PhŒh àÅÕo4Smš}ô‡çx‘ÚûÀ;ýÕf¬Ýš;‹0=F^€ã›`p\ÑÎ°Rs;H¶`¹Š¶vÓPÍ«ëk×ØµÕµÝWeãñÀ:6ân^#ü IÄ¶Ènß•Ù¡šl>°9Ži¶úT³‡Ëjo˜¬vñ³×?›} ’ý³õ/ô’Ê‹ÁÔ[;]Ûq­öRrzÎÒ)IÜ¹?K,Ç’µÚ4Èè/Ò õÆs€âŠ. :Èn$èc¾”¶id1‡µ4ÁD:Š-šÇ­“À˜¦©È²&œ¹BØ‚[tq¦K”5}ú×<\Iø4#l.8‰ëtƒRÚ# Çê<´Y¦9“Ác"5ÀLtFp0­MËzò¬ÉfÄS MÓ®fk{öàIOìG{â…ßìÝóã];}ô±GÝ…±ÿ^‰jž
ÉŽƒ?BÍÕPÒ8eI–ý^¯¶—X·gv#UÛsöçøc¹Az„4HõZ¡^Ùûîm~ª%—W¾!•­#OVÅdÅk˜.–ìÇœLid/òÍUéÎÇVdž«¼ü¬ÃšÇ	åD²ñ©æ¬-Îüä“¥å³ŸœÍVàÀBÊ
7*Ó(söCaX<zÈ¾¿@‘½lë…nx÷'}°‘Ûd Éî^‘Ì
\Ë™F\[>y/¬h€šÄk'Òbµ÷T¬‰ÕÖì ×b-XûéOÿöóÙs—Î]"²Åì¹ì,ºÔëÐk’f$õô„›ÚzÖxÔèjk(k“Û¹2’Z=sE*tå^WªW?i(Ê¬u¬¥òƒƒüuk›êëÀç¾‹®É#íx]ò|@>5ÒÞ10B?«ë?Ÿ¹öæ›¿¿vmé›_«pÍS!‘ÖÖPÖøãF «mmØêÜ„Ç)ŽˆkÖgmÔ¼!‰ñ¦vë²Ö¨^Ímº¯iCa|Øk?ºtiQíìŒ¾É?;??Ï÷¹ÊƒÄ]˜VÜ'þÏ3/¿õ5bžÞ­Eî“ —ÒË@"ªÉðJffA(ÁÔ~Yë+öJbäbµÍáýö¤z-a5ä4ƒ5±—¡‘Ù"&#4Y#ªB>Î­;f¯	jþ¼4¬f°fÜØØašH£<E’’µáf—ÓLêéœq)©ÊÄÐpBå\`«JåAZqaM»Ñ2LCxÅZW*ÏDA²vƒµþ¸€k
{á	¬EZÓD§.®­²šùóºïÒ»ºk[‹4Y+úÓë ·ÍrÙÜ0·|ƒÿF7Öñ	àÆîÃ·MW{X{R‹Ò†ýë·vâJ 1] 7³;ß†²ÖÖ×Ý¬ôd³Xàô÷Œðë©ßEÏTßÀ»§ÑÏ:Ú; µë­­#•¶.ïWPîRÆ£)kî6bxÖÎ!·qM
¤ö*c-#ª1×Hø²ÜCHâJ *„u4‹§ÎnÇÙtbù‘¦’6œGX‹à¦'ÒH·8“$½U–£Ò¦í ÏØ«³ÂÑ·(ÝÙCagÞmm“©ÉÇßl!µòéÏMO“ &íŽ$!ïþcÇ\VcM±A5`M&#ÑÒq-”­ñ0i-àZä5€·PM¼¦GÄ¶ÕÉ-€ÛwÚj=þœMãªšißy¬^Õö[í‘ÔâL“û’š[@YÇëÒÕ`µk³+±,Lç˜jˆ¬þ­-è¼!s0¶ k«da’Y`MÊ	ŸÀi~¯-ªÛ±ŒÜrûþ[·î­ZM±÷¥RXœ¸Ù•®ðéÕ–²ýFƒ%_7:ÂÉëßÇ Ë…Jÿ	c5­y®ºöÐ"Û Ë‡d-ô­VèÜ˜ª¹µOµˆÍ`­^/¯s#5.Áò©§°6¡6Í¯²0NcWr£ŠÒxÂÍ´ÿi§¶RÛì\°&#}X“e#ºXRU&i3H’w>òÈŽ½/ìQ—µG¿GÍÚ¹E²`yâ²Ð›üÇ½×áÛxYœûI¦ôFnz}~às}óX©°ÿ%=	Tc´°&+HƒµÉÙ…l®>•Ì/´ÒÆ$ôµ¶œ4¶J‘Jµ¬¼U}Í¼e)t´“lÝF«Sûë[¢µWÕ)UIØN™²FäíO>™\¦þäÌìâb–òd`Ï.’ sYŠÖø/N¤G½Ú¤é”/Dž…†IÛ5§±<‘„q[n¼ —pÂÜ`Íöì¢ÃÚaƒµP´öW+YS$“^M7«*k‘Õš×ì ×b-ŠøïGäÛ?KÖÎÍÎ‹³£Ó-YEappFR8}ä“îÕsÀš<[Íaäðr–[V4ÕºóWÌ#¶$Z(–ì‚@s©jnæÌø©²Za—òÝ‡H!,õ(-¬hÎ¤úhÙÝÞº{` kà³s7¿ù¿üãï¿ùõü7o^›½®¡°<i°ÆoÈ7ª‚µ?ÿõëNZl%±³J]{*ÃS:S
ÖìLòžþfÙøT&Ã©”®/?Ú>3Û¸åÚÒµ-ÍŸ99ÿþe>!L"­	ÖxGþì¿ìÍÝlïÑ:àí]Ãe8§	=m›ô°™,‘©¤2¹êäÛËò°µ°–dµN%	cˆrØ:”ý¦>¦°iD¦ØeTÔ†yä~f²ä-Ûz½7lBAÐðq² ·AŒ™F˜•{Õ.[¬†asfØÄr5‰öÁáa*”¤ÿ@k¡Vjx-œ¸ñc2ÕÌç­¶Å,Èí]ƒýÛ8#òÐ@JÕkÂñþCý’É¨ã5·~4xKXcd1çG‚Vh[ñÜ¸YDBkÉò¼¥An&Fžþ[:¯Þ¦¢A&#Gív¹|M¯ÕÄbD
 Üò:îÃ.Ü¥AÁºTaˆ²ÃB•­BŠ0´6Ä~}­àÐ&Ð¡û²Å¾Chh0˜%~¾2°»?Üd=;Nr‰&™°*²š""mb³Ùá'„F?Vc×„ä’y—€0`TT¢Wmk´Èn1GQCä±ÈoŒ:×'Þ¦êhFð.˜–òÿÒ^–`øð¡n-H}5/HÍD<üû©QSú£L"ŸSpØÔj6\FD‹­Öà4«c³5	¬1Öîkl5­Öx¸²v8°ZÌ„”-ä‡6ü%v^×îÃk5Z[|¬níï“$EFr»×|ä¾¡-Üoˆ{Ñp„³=Æ¯|gÑjUµ¯®¿®¸(VûÅô¾ÿðª5ÚÞ/,0ÓÂº'”5fwGX¡KµìG8OÓ#+ƒ?
Ž²ÐÚ(1[çò­+˜KÍÍ]Þw+Ö¬Åðš5šeßZ·nn»î;‰ëdH´L`-ÚOº_Ì‰4Z“ˆ¦™uÿÔ“þÛqÐµ~p@Ý°Ô€.#‘Z|Í`SÏ}L2920gU=Û¬…b‰‰ù‡è33™Ð„Û®u”óSþãSÖ¼ý5S×Õl\ÁmÕê;h_**Æý²ƒôÜF2…aª[{ì±½Ô±áÜ¿ë±<	Ññ”Ò÷²{§ëÖv™ÈNq`°¶ç‰K^Sƒ 9’|1Öto´-ÖænüRá¸æyüÖ²Í)J·J…ÇTª˜5	4[l“?\æÕjÜY²Ì¦ø¯#P³l•ô:ÁšîÚöÍ.ã‰ž‰?¬&eíyUV,f<<Wä•æ²uªYK„±J®4‹AÆ#Õl¬d8(«T2
5ÀVäÑß\A³òRêt,˜y½LJêùt!Z›<­)n$VàÚkHk©ZeížŠ5¶5;ÈµX‹‡Ö°Éæ³Îì¹s°¶MM\¬TøpZé&ÝÏ¦O‰ä´<i´¶ºÅˆT-.×¥{þPjMÄ"6d4NML«¤Æ¤¤Ù‹Øê ÇLW©@£5b|¼¿Lk2þeû€µÞ^Á}vmæÉùßÿñ›oþ¸ôïo~{mX#Î(¹ü
B×Ï”àö¬µ¹üú½€®ñ ë‘íü´|!G§é…·nØìl!ðóª)_@ñËÓ·EÖÀ~×ÍÔ?yùìüÂûKg–Þ¿tîìIª×ægfÖè«Ì—rÐá[ï™²Æ f{ûBßt¡«,gG’ßù> FyZUi›ªnÆ]Éoß+„«QÓäç wüÉA‘›HN&ü
Íx†kËÕr“`MOöº´†Â†?˜F¦Ìðð´ŠAlúY.FYÃtÿÇ±mcåM ¯ÒÜ!{Êé€e¶ÉM¾«ÜÑÎSð]ø0p.•9qv«~„€ÔxˆÙ\Xc`\Éj0œí°Æöîîþ~ph§&¬ ®µUÖy‰4&æ2!mYÏ@Nërvé-¤?n\¿¾…„€Ö¹y+ÚQÜÜ¹5Âe‘ç:¯^Ý¼|kùåÔ¬y{‡_
¯uûÇòÏ´XM­]Nó²Y‰y`Y–i9tÀ¾©ñ	ò §e7É´¯‘SúºG µJvzäÐ€r ùÇæîÝÖŽ|ŠwÒ¥¡‘ò¸Mn·N·ª í8pòŠÞô” ½\údð}4:«º‚Ö›€œpêwÁ¤*™Ó°(iª­áXãékZåjñš(xÙÜÃÝã‰†ª)ó^åÛäÓeó—½‚7+/FãÁFhd»Èk„¤5èL”Ö*fÕ€7¦^O—¹1¤‘™ÁÚ¹cvFË–à·EÁš=’>k¡fíù¤hí0{TÖVÕÖ×Öà5¨÷ô×®Mû#àÚŸÂ`X½/Ûƒ¨-ªmµ	’
‰n¿5hãàGf9DÓO5Äá¨–¨jži¨öÙgÖfWKxœ»ûl{k4Ä^ØØ­ÁµÕ£-´;³$DFŽ| §D¨¢ŽÆEÁ6B[ëŠ˜õÝš[ªmŸ3X[¥jí–­n¯ß÷âÜBýBè”=¦.‘ÙÀ³BXß?: Fš£I‰78ýŒÃiyQQuÇ‘Ö8×ÚÊ^ØM†nÚ˜°óÓ™¤s‹ÓžeL²f°&KHØ2D‚†ºè'Á6d!M3k‹ýôÓ	¬ÉÒ5Î¡5Û	²1þð¬%'H¤5õ°fT^#ÒÙ^Ih–Þ¸gçžïÙù5j;}S;l¼È{¨ICPã"])ÆƒÌÀ<û9¦m{ÐÛ„jÀ ¬¶¡i•hœ=zuòÆòËÑòUg56Ïƒ@X«Ï˜ëb‰ÿê:m˜M"$¤V)BcYè*[ToÜAøP3U ÂS-owróç¾J½%eÍ0lƒ×0ƒDZ3XãÛçÃò‚<{’”Ã—gá¾Y2ãS°Ú8´¥ÉCDÆ¤µ;ì%$ƒº¸Tç’ËRVÜfÆý•cÅaÍ"ó¬Y«5OšlÎ,;¬Ž#¯i¾™°ÆÂ3ùÕAÍYÍbÍr-Öâáˆÿö7­S-z.ÍêKêÙ…çŽµ-Ôñ§¤«‘S}Ù¬ä…|ž;Ù>±ÚêÞýÔOâÉ_ÏìÏà<fìýÔD~Z
mNl|7?ÌÂpWW‰3úž"ë±¿-_&JÅJýpÿÔel½$B~öá¹Æúù7ÿ÷›ü7†™›×¾ycÈ¥3Êƒ<üüÕ«·i¡õgzúz´åmHí<Ûôøy†é`Iãk:c›ŒæA£ì¾>¬¼Jöåe’[Þ Iñå–™™ÙùßÿúÌµ›óÿ~íw´Æ^Zœ‘ÅÈÇ·~Ä]ÄZµÒ¨‰sX;8ìëª<€‘#ÊÀÕ‹®E0¥Ž|øñÐ—ÇˆÄ´ŸŒm{¼XSYGŠÖÊÖÌæ„,I ¯·LýšìDššäû¨é~]:Ìi&íØ*÷ÊÁÏ@sXr½±em¢*¶MtX#Ê,Wù¡V¤>Ã†®Lfp°4"³÷º™…í½¨n¢fÔ¶ñqÚ­	ý¡¸[[kg×[{ÿ@ÿ€dÒ‘æ6‹¤ƒ™1’oá~æ“è=¢ëk«å˜6@fi£	¬åZÀ6²­_—ë¼}ûåZâõ¯Ü?V?lnz"5Üanß>ê°vôÖ²ìH:siK²”¤u\kA¹›Ÿ¸Øw‘¯i9-èwêõ‹Ô«`Y§ƒ»•«Al¯ ¤n/áÍ¢:º«õ:i¹ZIŸ5=G*¤{A"c¡µöš8SI)sä_w¢™EÕMÇŽÒ°^¦½`-0š§9ÊnZaÒÎcY8ÔÂš9…ãTáPfÚšx†jüpÐ\,åßýM‚¬Î¬Òâïdï¥íVwìMT¯	ÖÎa	ÙJ/´&ÈèÝÏ.6c¬á9{DÎ‘ð›jÖ<ò¤Ü yV“´v—²fÚš¶¨®E\KüFfûs>gz_P‹³ ¶‰ÚþäÌöYÜØÿ“Ã2ê±:ªi¨}¬œÞ7?’ µJÓÀîsBg<€2þpr‹k«†¤†®¨’¬vQ¬ö‹óçk³p\…Ùââ–öíÑ6›®X÷Ïa-e¡‰G[ÚdtŠ¤˜Å}]™ouËtOkÙH$±Â2&A²Ákû¶ìû`ûÂú^4YQ©–´þL¼D¼›S-fô¼ûüÙ­Í¯¨'ô„R{pTnDŒÐq-*k>¬Æ®Ë"µ±¤MÐÇ•°–!š{ÃgnÛÏ&8ÈEš(éxZ¬f‡1½‰æO»–&VÛŸ¸ø'”ÆÑæÔT}a‘®¬IXƒÚ­êŒDF1êýe#¢>k´\ÛI›ô·]t^ƒÇÌP„'­ÚÍG9Š8­É½_¾³«Ù£*Z»‘ôYÃR°¦áf“sö!B2¦<Ñ¨8i%ËŽ²g+º?h·“ñ\¾­žLZµÌf©˜k¢=+J‹°†ÏÈmÏ‚äAÉEñlî¨å7]-[!¡1çk\UËk€Èø5˜`Æ6žç<U¯r5+Rc`¥1iß¼ˆMæ"ºŠ§åÜ?ëY,,žÞýÑaÄŠÖì¨œ4dW‰L€53ynÖÖb-eÍZÎþ=§þ{çå}îyi÷rµÚ»#ÍXc[¾ÈQ‹38ÌÄ“©×üÉdf0ubÏÄ.Á$RäÆNr8¤n€67Øí*œsV`­ˆ£¤=FÂà“«DAÔi­h£H«JÝ¨á"7¹8½AÚÏ÷yÞ?¦ŽV»W‘Ÿ÷}ïïýÍëq
Ô¯?ó}žïƒÏÈ,¥ý?Î^?’ºN¡l_Èúî³#Å&}^¤îØóðØýh_%B6%¢Úa´@mvMP“¦eæœX*e†•Y¢PªÔNíjuÜh‡vï#²4\&?2Û‘íÎõQŒJUœâ“¤ëË¿þõ¿þöKs3'Þ½õÆòð?¡¢µg`5hÍ¾xÿÙÖJÈÐÓ„hgˆ©±iÁñˆl ù¶õ™;#™¶±±ü:0Ž×–…Â#4È;wv]zç¬¦ó§ÇèÀcãÆ×~ÿ4|¤íhaDa›~bï¥[0´¶í¥ýëÔ[¿ä–aµ~Vj¦
¿““îˆ™#¹)÷sž­\€t¨b šb´ÜOñš´2^`­¼.5Id [f­Ý°ôg‘ï$NéŽ£=´ÿõXáÊý|çaÎ½œaƒr^noæñWFg«@ghý;¡ƒ5†É““ÎlQY»‹Ö8cýø^gOÝÌû
ƒ\²\7W‘–êÞtjAôÛ«uw/DB3ËMäì«°].«‡ñ¿	XS³þ9AÖ†f¹ãµoŽço&(OW«öXZ¿ÐéÒû¬-µ<´4¿r|“`Qy@çjå]FF(…ëî›Ÿ~ïç‘é¡ž’"ÏY˜œªî¦VM#ï‰ÍÈ5ZuÕÌœmÊwH[6©k‡:Ú+ðßïµ_Hi!õçdiÍO4w€ìá|U„5G5‡¡(¯ÅFkÑ5$NØí ÃË|‡Àr¢11º.„]jÞWóUÊÔ˜$ÍÖÜ2œ4-6ØTò¯	XÛ¸µó³N•¯}†ÀväÈ‹/–Ë/ÖjÊŒ<Þ45¦‰ÍÖ#ûÃ±fe¨iàvìÁ½ß-ˆk‘ÖbõšÎk6 ²ic"\ã¬Á7&*gãp^ó1
m šaÆ&™|óÍ#Nbjä*ôöàpj‹gìOß4òsR¡6uÁÔª¡«	Õ>Œ°ÖÐ
Û‡¹Hj-6óþjûçRÜb¡E]5Ç Ÿb$fø)óÞcO§³Ø=t§‹#9½RÒVæ©U#²¡-v#®Q²ÆÑÂ7 ƒ›c>qLëšøLƒ6"e\``FÀk„–9Ò´¬YždÄ5aT„5wõu2s\K-8«Y£kSÙ‚¹”¡—åUdŒçÜ—ß`-Ãà°†À-p±"·@|¥Ÿ¨Wc»cþ¨“›ŠˆÔ,A²ŸÏèC)_ñ/86š‰?n $7cxˆP †Æ‰TFÓÍv©ËÚß™¤ÉoVö=»ë)ã4°&‰M¯ÛU\ÛæéA|Œ‘²LžÐf-t@Ã^$I['¡e%í5‡ä¶óù2y0SÙn¢ƒÈRzŸë ËrT6sÎJ“­61en·C„f¶ýœH1üçÿöôï•©ã@MÁS~y%+X£ÇŸÁZÜ¦BúIHÒ“‰?ºo¡ÊLÿH€zûåIÁ’–5Ig6/$‡R&¥±îÀZûÜD¬	Ï¾`#¼fMiMéUa-„µ5;ÈµX‹oKü'<ÖN¿ú'`áxø«‚má|*u½¹ ¬MõíÈ6KàÏò\y™ˆi1´v\UkûSATÓaO0Ž0K`­T¨¦¥ºõX£µ%Í˜+<ßÊ3ò§ýð ö‰ÀÂ¿’SÞÛ7FUo!ÓV¡SuO½Ô¶ÿü½õñ¹ÛWO½ñÆ­«Ý¾}ê6°6ÁOZn¢tø•gŸ•õ£lôsB5Î4ÀM®ïOc1‚¶ÆO9hu†|‰i^#¸Œ2Oò¤¾ì¼t©ëüÎOÞyVÃÂÿê¥™cÐÚÄ¥ƒÇ“X§ÿ¬LU­Xã2ÌîAT£4@¾Œ^ÛäîP+Ë¢«FÕ•7RRT“Ïöæ¶ÏGŸ|SU°X(h¡ÌÜx¼HU5ôRüFp¹• š`MÒr£,õ›gÂY[ÿÆ~‚›ùóÖ¶b[ÒËÜ'†C`3'I•]óW òøæzíhg½²ÕÜx4
 äòŸ„9¶sêŒí°Á´ÐaIvBQËçIÌ/¤;{%¶ÕÝC{‡šúöâ-"àbO'¨Uå"êjÎki	],ÇUÄHjæðw¿‚ÚonÑÝ¦´a¹¥µ¸é•‹Ç›ZÖÈ ÁMì¦°Úþ?Ñ/røAZÜØßzcéøñýàž}›…³Å¼¥o8ŒôM"­QqvïžC““}ÕnêÕ²Ý»g§€5pç~€íç?Îz›+ú#Øã°·’õÈ¬n¥ÄéLöýLCÃ2kœí=ï,2uòY}Ñ"´é¯´1A‘à2¢˜Í4†8>Ìe¿1ûÑE4Ç§Èrb1ˆ^—¦¿”XøM¼\3d‰·ä6"bŸïÕ”Ù`çïIèhêëÝYëçZûÁ‘]§ÉŠDöïê²Ï”˜¡ ±Óûœ¦8w¹ä†O¤Ã¤FÕš6Â­…ªµ	—ÖB*äŒáÚjâZ$6vXMsŸ¹Ä¼ÝµýU|¨Ãw€\ÓàB›v—ØÖ4	Ž‘Ùt²Ù/8Ølÿ³–þÌ$öÒþ…íÐ¡3{¸¸×t¥Ý_'œ%qGRùÁX„€ÕÎœùÐa-ªdÔbè²%-Ú@’¹y¡k~>|Á 2âÙfµa»sÅO®´z³:É~b¦¢TöÆÊFæ[ïQÖ"©…XlñG5kÌãÉ^Š‚[Z»­ ñs$µgÚ\ƒÓÍ¦h8©b¹P­¦£Ö¬Ã~CEZ°‰ä§1÷—HYO©±¦·Ã–ŒÆ QkÀsÿ~ÜßÝ‘-Ô«y ¬™Àf¸Æ2¯“¦¡GÇ[2‚DZCK*×`+U«¡­aø(£ÅÚSÖìym#dDbÜ/CHl	jÔ 4”88©Â®%;(ˆ½Ö]°ÖØ{žòböÄîöŸ×<j=gýøÊ‚ìó³¹Â@V(³(Þúïe1Á|¦ªY®	­M+Í™BÕŸÖðí79C†Ödï¬x‹<#MT;5seffNïSU•Gwââ_ ¼å€>f¦þ^ŒÖÏs	Ç…*­ZÜ5°L9¾ä6þDžEf‹AY;L‡'5·ùÙëßÍäºï#«9¬­ÙA®ÅZ|{`íO?æ#ê?¡¯¬?r„Ü¢êÂÂõR3iØæ÷²(ÿ)X‰(kAZ[Ýad©5ñå-±]SkÖŒ3WÞâ²
´6X)åëh=˜÷ƒf™¨¶{÷î}=ÀM›åÉ¿1ŠoûÆ²Ue˜”†{'ÔÛ§?¹õëåeªÈ>úàòõåÇ0ý¸ð«OÖÄN?ûþ³›èµ•¹w?FýUP ‹Zb82Í[CÇhÎ#…ÏÂ‚·^ãSNìü5jå®|õÝåO>Q¿µË—Ž¡åÍtu]™@¯‘{ÿJ€ßU5NTÈ193{¾’Ë¾ª@54”­êåGMÖ(ûyD²J?B×K¼õˆ?:×én¾°MI-ö˜—‰ÛBZÅ¦]Û(Ä§tÉQyö÷gÖÈ@„{	)y¤CÂ¡a/°öÖÖõòêçZÁgªÕ:í¯`"gp¨ô¸$\àl¦pi%‹„UpÄÏk!%²žNW$¨•*	¾î%†vã¬¸@8aÆ"Ô¦X2d$5·ë×N\LFi‹]$éQÙ/V§–æyù·67`E@ÅÚþ‡n¾ÈÃ_¹À”ÆƒÏ­ Ö$¢«^™(âñPoJóÉgv‘mÝ20¸·orÀ>—ç?x÷ ½ÛkéÒøìµÁC?:4°qFX;y´³½XIRÔá*Ö¼Úû5µ?Qƒ¸^¦Pu(d9D©N‰!·ëæè:Â)Y‹ÅjDp^4ˆr„ròj¤50)\1ÓÀRHqŒ¶ý¾l+ý£57(A4sf×r€µ
¾œ9b;l'ÂÐA Âš‹}
Ö:yYÿC?ÛZ3XÍæÎyÒ£—¬¾/ñcëN¬x9*kŠSlZ0ï÷ÆØ¡7vCklp`cí>ÜLHPÚØ9éðøCr¬În²×…k<72`[Ü ·°ÅSä6ßEnÂ5ßþü9S˜ÍÉ@n„¸‹0 ó“íÇ44‹×lHj×x§_J€DV;ƒª«k«…SÛ|¸ ÅbÕ› 5FÍ¡ù´ð,íBz–ÿ>¬1Ãªˆ#94vnå¢;… þ"‹]‹Ñ»_Ñ(¬7H²/Óíí]-Ñ´Ø(Ìõ4Nh:ÖœÈÂ½Ñ>‹³¦zÉWÛÚôõÈ[8+2‰¨–ˆl!ÒÆHk\8s“M}=£·‹íÚô&	Í½°6ãë2˜ÊÆ¤Ò^ˆ1¤7V£Ev²JÖ^p¸ã3¿­*WÃ»_6ûÎj‚,«AÃðc¶ëá§¸C#»¬%ö£äGsßó4ÇçìäIÂ`M%pœÙÜþtÆÕ"³ß½ žfW3lïWÍß%kJY?¬µÁ“r“oOgÇ`1”çÊfG0IåTÇÑœë€Ÿ,‰µÃBy#žÿ(/Èï"­!®yw gµok/"®˜˜Ÿ™˜7óFË“Úª)¤Iƒ ™p„ƒÇîìTw*o÷ý³Å5-çåñŸ,ŠÕÐo.­mž0X{9(kO‡¢5âi¬+s˜“¶­w±Úõ5X[‹µøvÀÚ«˜‹èk`íÈéG°ðWÔ{êÝÝ”MNøÓ“p*.MX[µÕÚñù…Ø;?²´µ¤>‰^°k7†¬—êƒƒ¥T©×:|•‡3ÍJˆÜ­¿•{zëät“•Ù7Tâs+~¤ÕûË•CŸt¹^­Î½q«ùôògg–OtâÔò±™üˆõ<ÈŸüägÿrÖ¾Ö~FdÆn®"gDp(kZ™·Áj
½LTÈ]Ú60¼”+­ÿòüæ®ó™ëç±cùxùê¹K—€µÇÎ]ïRË´µ§UœÌÿ;°†r÷Õ×_õþOkýÐšÁ“·ÂÞº¤’o?e’|²óñ.!?¤õš\#kSŽË¨Rýqœ$A>6ªêE¨;‡Ð 1za‡‘Ìj9G%¿a0ÙOÐ »ÜYÓoÃxTúUÇL-¹à8‡“J…lIYrâ/Â¡¥‰/|ÓLOs«6íÞWÍæNhÌ‚öÓHkaVÉç÷(Ld"4ÇÂwKÈ\kw!äABk…´ûhÁ¸,D@5-:Ûµn¡=.MÕ¼ÕZ‡ˆHµÍ²ŠMMøŒ€m­XÁÝ¼xñ5¬`Ü®ŸG?-^§zMK^±FÕ‹Z­­ÌoØ´¥(Ñ¬ ¶{¹‘¹âÀÞÊÐî"ŸÑN¥Sõ
™œûÆ³*Tç)DÏ¨‘		øòh°¦V‚Iö"3[mÒ{ò(Ó¤	›h‹£ææá€%t×N£=£¡Æ?Z_c°U§´þ
«1ýQÁÉõ6m\ù„H`M»ÝÁ)¾¡M®Únÿu!=Xó"5_ œÑb±\d5Ÿ„^ØfsÉ•Q¯prS"qï§(Íp-0ÙÜââ…7 ¶Ës§Ï³rîiiÚ¤¬yWlOdEk±5¶‰kÎk1²Aa{·ùš¹{¤6Ç5¶ k~b; ›† nŒlI%£¶˜Ù°hnì›ãgŸ°ûª™â¦Kˆm–CÛýšPÌ™,’šFv·÷ØjÕ>©i{;ú;>  ¢xƒÝgÍ›ñ…ô…–„vtŠif1b“l‡µ¢òŸ™g;XI/\LÍÓ›¸Ÿ²6OKìý7n,65ÝØŸ
EL9ùZÐ×8kX`ê‹aô×5ÚáL~VÎ<‡µ—Ùœ¸<¬—qÊ0çìÎ#Zôe"£cP°âü¶Þ} åÊ¯åöv¨G¸ÅÈšÞÑ¦£†g6Ca{ò…ÐgxRocê[íÿö?þòo­9¬ýå7Ï)¶RšZXË¨û.´¶ï=±ýÑG·oW*$¬fnT£IW³Ã;ÎÌ„g&Å~:ÿRïþÈú$îk¤­óAš³šÇë|ÄæÒ¬öò’”5U„u‰$YIžÊUÇøÃÏWÑ_»ÙŠ@xŽªw>åå¦‘€C6;òÕïÃh;FhÈ*V#ô¨v7Z#gf®;{EêÚÄò§W¦¼¥þr!3úÈñjËeSVß--­€=¤ÿ	¿¸U‘ç+¼6­à°¦“pM9’Üç‹ÛÌ2ÐÚ¹Æš5­ÅH¶×i(Úžùw…µëÿeÍr-Öâ[ÿ™È9ýÂ­ÁmÚf±ÚõJÏÊÚà #9oCš-2¬ k/ßWYÃrÎ>Lâ¬Åh¶åØ×†ËhY§õõ`>UÇÜ®>\Ïà!_:”ë©æáÁž2M°ûRZÝÝWÎ`¯”ïé¯L^ûèê‡|rëÔXuùöS3ø‹Ü>­Éi—ß»-R2×¿ì8Áiî9]µVjÐØ›.·€fcÓ#º@o“Ó»"¯ÆjùX.Ÿg©¤§k.‡×­;õÔU~=$Ðò)“»ø²$XÍ`JÂ¿ñO'Ï¼yv„/žžj}&~c—ÖõHMÏT\ñ‰TFâcÄS"6¢‡eÚ+hdT teYŒð&qÑìù-¬óÚz©Ö¥T…ÖÉ	ÐÙÔ»,–ãë”·6Š1	K,x8¢Œ»Kh«`0ÈÍ*{¿H©tZ#:£|æ3CD¶hi{$
÷„dE;B„dÔ{°¯ihïÞ‚¡™Û†`â_¹iz¬qí’[:ÇÁ¦ÏN³¢40mzÜ%-ÒµÈ¾	‘W^éhÁ2òÆÁçåÛ/4×ôdV„¸íæãÏ­?xpiibbii‰Ï]ùê\÷x¡;=4”Ò·Í¥5Ó®xv|v¼­êßí õ“ú•²`åjÞ[%k„þ8zIõÔA¥TbÙˆê¨d\Ú=ÖƒM¦ŠF?hoŽkÆae¦%Èü¥°F¸¾wÖfÅå8U·õ8b…`ÕNªšŽh&G¢Óc„5"¼¬@WÛÚÿÂÐf­ö³—bÎ%ÍÜdëÒ¢žF0eí³Î.¼9(v~öâgT¬yˆÖà0k‰m´Æ•¨^;·¸¸xù›ÌFº¼KöGžI`0âþ"¾\³m"n¦®5–®Eh³=ÚâÉÁ½1œÜâfØ¸-îèl6Ø–p›«l¸f§°û¦©1Ûçÿ{V¬ö°Å)ès1Àh‚6–l°«°±ÿw›HP“žæñj’ý(Vªq|øöÛó>"÷å¶–Í«S\ÓæTWW3°¦¯kZH0Ì"¢ÙÝdÔÍ’™nz&‘ãV¬âáŸãßôüÊ…®¦Eõma'¢d£²6¿(X£5ö|kº‘ÖL(Ó)¬ŒE0ÓÃ+*qœüu¿	 ’\F©[\ÚÄ¼û¹·b"dŒ„Ë¬-Vo—ÈPÆeù• šnÇU°¡Má·„äHÿj›Ô4ç¾'¡1½rÀ•5q2[­FŠ>7ù]r-¡Ì#f.‚Bf. ˆlÀš€‹ÍBÛþÄS”©=L­±ë	–ˆ]O	åà3Ir(p†hú
s$ö’wd÷½?©	M3›ÔýZ:¬âñ kú…ãÆBªÐ^â‘Ló3)º…çØÈ£¿d¯|ž^ˆ_ÀÅŽ©‚ŒüßéØAGlL"•ùU¶h¬Fè™€‹´Ò,€µgŽÍäæVŽÉ¾XûôwÝn%¢eÉïÁ`Ÿ[ò÷ÎKMbu¥I´ŠÌ›dw»ô»$ÁÉ¤´@kºPZ››¸Ö^‡Ô<žVZäÍévðìÂ‘YƒµµX‹o¬ýˆvù2°­k;wnÞ¼“dÈzžG`âÖxÖ`­	{âj®8ü¾EkNk+ŽežJd,Äg føA*|±]Þƒƒµž:ùJ™èí­ps}°§·gßà°Ùó¶W™R5;Ð7¹¯².?6píÇW—/Ÿ»UÍbùÑ©7N}ðáòò©§fføéª
áß+-Q9f¡?ü §§¿þÚk×Üa¤W"äÔÈ›¼62†}!Ç†•xRK¢ä–/iŒ}nùÄò¹ËËt Þ9ö)´vQ–‰;Ê‡ò ¿Þ7¸oÏÉ­¸=ªl@n[55$–¾ENŠ>K¥RµIfÚE8µ?D?žŽb0º™¾&XSµ kë”Ä¨œGæ|y›Ú$×”©¬H,BLWëçôuÊ¾é%±”ÅNÅS<òf^•®&Ù¼È¢·Næí‘Ö£¹æÓ‘íd 6ƒ7…f!¸Šyºô™|F´€Ød°6®!SÁ=¹‡Zó‚÷”Hg2a{Dp!rìEt5#¤›8Ö” ICÔð·n¹qøàó7o
©ù¬öñÇ¬ýÄaMÖ#ÂkTµß´%—«eñ
Í5QM—nÚB™z~ï¾Ù)|û'÷íÞ=@&¤Åäì@º)µûÚµ}»63ïwZc8‰&¦è)Õ{Èw•~ÎjÔ±q‡¨
j6·~Ý].›¾UëEl.“!Šr6vT#PãøgÀEôa<ièÓÛÂa[ØŸ¢	H¼YÁ›*üFÂ”X«S¦¹%:ª!ÖâsÚÑY2
kÜÏÛqåYŸ¶Ì±çÅÛ6NûA’	ù*qùÂâéFƒ‘Ë(l­CXÃò©\¼“¤Aº²¦ˆ-±MR‹[L„úÚ²m«ÅG¶ÝØ"®jÓ±*¸½ývmì‘ÕâæÜæÈvKdÔæá£¡Z„·†àC'T1 ÌG6âvgŸµÃ8_Ÿå-ˆÀjÂ4vâí#¬E\Óã‘›[pI7·
Ù”æ:zŠ,D©ÊŽ„‹ÒÝÌÑÔ¸€Ï¸TA^Ô
QI”.Ê[„TH"¦AÞÛfíÊZÿdCUÌ¢=°›½45C2O	­¯¸½H(Ðf­M¡üG·ÿŒæ­Ö2,0†TÆîÑïÊš&»p¦5·ê'Ägz±˜ù¬9¹´æÉ“RÔô‚^^D5ûHO–•çh`ÆÇÁ#I¸iý(úøÿrÃ~ MÊ¦>i\ÒÏúÑ]¿Üþ÷S¡Fcì'ðòß…¢öÔ®]CpOÐd’ßÜ¼Ÿ{¼G¶@-Æo”y_ZkžŸon~…tK‚¬´eM1±¸Ð<0&«j­¦në[@¹ua@T”-V‘f¡+rƒäåá“Y´Þ|#ê“ƒÕ¾zú«÷;ÞGYs;H>lå{¬]Äƒ¦g:æ¯,ß^žïn7‘8…r'ýŒf´	áüœ@U§&`³eö‚AÒšEÞ¬üÍV„ûœÐäÜ_(å½¤­¸	Öž‰°¦25—Ö\XS,ý,w§éðkÄõ5ïþµX‹o¬YÕþéËskÐÚy®_ÈU1ôŸžî¨ÊO¿*WÅj.Z{y©)`Yƒ¬F„c©¤dí˜z‚´¦Þj<EÖJŽ eb˜O¨†öVlªU&?5Ô;80Öwh°ž)çûö];4Ø¾p©Š öãAZŸ˜ÉŸ>uêÄÌÜ„híâkß(§A•ÃpÓù÷í¸&835íÊÉ„w[É1gby‚5h­„ÿ@¡M××Ï»N‘½Ö¾äôî;Ëï$°&p>„Ö< @€m°ó½Nˆ	»FØd¿	—9aÝG‘‹R“;?ÑINŠÁZ[¦WŠÙ¨ ú:ƒ5¹>ú®e+Ró8°õ‘mÖƒuýð™i&5L!)M«A]µ­(n²}¤'pÖÛ+Xãí±Þ,ó6*[3ôã4Ì÷Aj` ÜÖiáÑï}Â|A4 F`«q:ÉÚXZÖœóü‡†¸ttÖê@[Uz€…®Ö§OÓŽjÆj.­éÂC
œOrM¾F¦bV°F{µ¢`Íf<“;˜k¹Mxó?/V³µÇ!y…š§'MVR×&.®lPŽ•Þ’Lr€5…ÁÊîÙ34T¥·Ú@wß8M²µ³E°°ïÐ |7nl¶Gþ"ÿ(mó¤'€öôGDc¦™{kùA&-³‡i¬à$½•Þ¿£B[Þ±F|\$xgÜÚè+¢!8ékÍ¯‚ãGð"‰ïÄ›®9«%ª*»,ûc&aÄ©ÃÜûâB1›úF<¢ƒÐÜ_ùìÅ­	¬…4HáÚi”4Cµóf ÉÎÕeÖpIÌ!ÎÍ k¾‹#×<2ú÷ÇÍb™c‰-nÿ·øÖ ¶±ß7þð¶v¶HoðÆÀÐùóØ8sŠÔÙ-F\‰LGÐ(óÃçŒÌI¨œeÂÆ‹Œ¶R¦9¨ÊS;‰m•ÂdÑHa³šÝÚj°–NœER-M“È4s‚¹*„°}ìèN¹{ƒºb³¦I(Q¿
¨É
Òc•NkÎjšlW‹`‡O|D…` Ù|nP¦ÚÒÂ«ztsXËóÈh­Ñ˜šW#ó¦þ Td“»gÖà¨Ló]ž‘	¬…dHï¡f½Õ`5£5…ŒÐø>¡§¶¾ÎÞC/…–éùá+ÜÅpà §¨½°^Á×é?‰å£Ø‹PækxC¢œa¢5*Ô0‘ž¶ý;ûÅi>Š$ÄF&äOà)ûGÁšfž:i#AZ#xÓ·Ö=€Õ°‚\Y(·,ˆ§µYè‰ÎGm±ÏÚ|s©{lÀ¬9š›ªíù”þÈ¹@E3g‘´þjºM†íÀ²©yAèår¶ŽjÇ_Y“5B¨&X«ñ, ÖLP£~fb…ÿ33óSÕ›> f¢o.W(x[%s€5Ž ÍÊ„H+H•¦hÍk…|Ê×Ñy}!á³çX‹Þý¯‡‚5.‰2“aŠÚ=Ik°¶kñíˆÿè°¦ðŽØ¦«ÁODùØãüŒã‡°¦'Ò
íô­­ª¬tÅöXàh¿ó EÙ\fJÌó¥Àj¥Š‚<HM{z±’¯(Á¼>$ç~lG¬Ùhß>\E®¡S•šûöæ‡š:—kÎþîÄ‰©ÙN ¯m¦1öòü²XZóªµ¬íØ²årr\û\;C(yB’iœÆ1–eÚ¸(¬§n¬-Ï*]²ó,‡GËéå[·®~üå—–¹ü?VÖ¨Ö¾¬y|­ƒ¸¦ô73dÔ`¿ØŠ‘ô°fŠãê ÊØJ½Øó½LÖ\RâTÌÀ.ûmk|ÀÆQÛ¶Ëòp/T¨ê4ç£ü*‹e”W[T×¢œÎðŠ>Ñ-kuTzË¤ð¨¬3VHlä±Á°IOökàP˜JÂ‘@‰a×¼HC”p&ö65a2²owR±Y«E×~;'²šÏÔ»1XnÅZ}­•ú5¢£H>¤\ãZ6t´6mâßÃqä3=Šo.ñá©~àPB	kzú>è­Ýé´FJeoþäLa˜ER«Öéd1{vê¬<ûñ£™…ÖÆ§‹Ù¦æÊ¡}{wU{Ôâú½ýükÖz­Z§¦yl•ÁÈQ…x‰K‰ãˆçš¢£•û+”»„>m‘óB5_²¿` 	‘Ô(*V©ÙÙÈÆfÔ>‹WOÎQþÕ~è:Üôˆ|!c.¬Z®ÓÎ%5eqÖ.DùÁ½Ÿ³^÷°FNv)T£:3¼?ª’µkGŒÕØ0ê¿pVãòüþ”¨9¬]€ÜH
P('ò +kªY“ÃH 5(Í”µ`1Å5Ûu,‡FÙŠÐ/›ý®íqtsz»¢ý
û_ÓÛƒÃ5··%»±kKÎr@GÝØïÇ9Ãÿïø©0¤f Æf{„µÈe÷¬¹ócŒ¸Â;±µ4/è¼ ƒ,JŒ€5þHa#,§­*ö¬A[ŠÜ¶,éhöyQ-µþ
?ÈùTW„µHjQYk±È®…ùÅÖP·°ÐÜÃ½±ŒÆ‚°–ˆm^5N³1eÒŸÍûdKÒ2SM	U¬­kH|"–ËXVu›¡^(Z“ýˆ!‹¬ŠÒ¸¾ã%âi"BémZs/*¸ˆiÉ3˜k2ïï—à¦°|zÖj£žÃÔQ`¬Q^öÜ®íb5)fXBb)ÿíßù;Ô¶ïY»5 Ÿ¢tÞkži>œ(_ª©/6_ª`bQ[wÜkóóÙ•àPMØ¦zcá”7Åîš'½q¬ çÍ”(Ê8šsJëÙŽ±î)Õ©Ñç!Gg¾\w¨¯¶Ø_AkÎjpÚWÂµÖÐÕ0ƒ¯-¯Ì]º2ŸÊÍÏMMA0v}^¸‰¤€µfÏl”èšxù_Ø@NMUUÁ¦Po6F€ÌhR¬ê¬FÙw<FòU¿Û`mÂ`­ÑòuíÖŠb•’µ/ïÂµW×`m-Öâ[k2=PsZ×æÎ¾úãñ#Èý¹¬8­ÊsQšFsGÜ+/ß¿hÍ¥µ\ÃÇ•tnŽ«¥a-³¨(å}µŽµˆ)ké¦îz¹RSTz9ËrÄ?óÌ“0·ïPOÏ`½Dâúðà¡qžÝs›oßž¹º|›Æ•Wk3ŸÞfsCÈ×”6ÀÏâï“	“™ºFf¢¤5‘ÛÈØ°6Âkcf$ÂÁˆícÉ@¾0¦p¯¹ue
%³®j>ÿÉ»ï~rXã[ž:¶|îô•‹ÄÍÇ5ó—ò¢µ“Bú¬”„¸m[YeçzN{4 Î“ àË¥	õhfêEø¨?I)M«I_Öôpƒª¬ØÌ»kËãßDÈŠ²kÛ¤¯Õj°ihD:Fb;H&c™dGjÑd¿©g<o`Žm½¡± ' k:jyìl¼YL…Lz¬E0‹Ã_‹í±±„Ì!ª9­öÉÌf(àqç˜©h±v€5›rA[ÓŠŸZÄfø>n!ÒcCkW­;6›:€5þ‚üáséõÕ4¾º¬jKÙýó|+Ù•4Ñém*›ƒÙèz=;{¶cdl|¼¯DÏvLÕÚ,ŸLŽ«|Î@µÚ®uWÇíéÝøÞ{V´vR°æ¬uÒ¬DXÛQÞ¶2—ÕŒÿIš#$''^dW~½ãkÃÄ‚A)WÉŸrÍ¡‡yÍ¾Ð+æF
F"GEc‘Î¢q¿Gè‡ß¢Ò*JÐQÕýE$/Ôˆ åiÝ„¸Îbe`7Û@µä…N¼ uÚ“°Ú«¯ö¾øjPÖˆË‹°š—¯™–°¿ÌLS·ÅkÎkî.‚dƒ°Æ™ñ¯6	mÏˆØ4D±-øûÇXöÍô7s%áx À]‰!|óÝãm¿»»±kÓžÀ[Ø &v¶ÆçaûÜÏÉçš˜€ÆÀŒ8£íCß"©ióÿŠ šÅ±ñ´xO>d°ñ_ÅâÉ£‹“~·n‘ßH@¡&’Î‚ÙHéA„k¼~Ô×8k°–ÃóËûçþêB×þÄj®£ÝS²Æ·º±aa¡e?°r;ÒÌb¨sÚ‚õð4ÌÀjL )›±Hè–Ðœ4@®¥l™ æÈ,Ù–™ùUÛ]Ì€ÌS¥Ì„1»43Žs—Ù²®¥ã!³œEk„7‰¬æ]Ú¨uÖw‹°Æ’u‡!FÍêDæ"ýúf<e~‰©#¢š0ëQ<ùå)ÃÄ4œÕ[íÑGqTãëß¶«hŸqÚ.7^1Kîñ‰@ï{®¬®ñ˜së=Ê•Ã‰k?¢’Óšv[R« ¥Ãä¬ÏÏU‰î‚rX™€¢fž­Ô‡ZjóYRá5i³Åâ›ÓER¥À®)ÆìEŒÖøðüæ¢@íSùö_™›9ui!ß©Ñö4È–Ã_DîýTÄyY‡Mk²–xÔˆ§§º›½8 7FÕ´A’,UÙxÈk»‡( k„_ÍO4¤A>mŒJÖV“Ö¸Ð…µ#×¿<òå‘5;ÈµX‹oAü‡¿ñ:>£ž›Ö,¦çÆÏ/(T®–Ñ‚ÿþãî%KÜkIÐhÍ²E'Ö¬%O3Í•ì”5¢¤¾:Ìëî¢Dƒ5ÁZ—H®3lÞ{ú!ˆááž}ûÈ¬ƒT;OÝBäºJÝÚ­å7Þ8ñîUŽyÕìD'-Ðé!	ù‹°ó‘Ú›b5$6ºc³>û#sE‚f8§©!+V»SÊÅº/»ë¾¼ôîo¯žþòôUÑÚÌéËW&.~zñ¸úw_|÷ûQYÓÀ¾T2XCÍ‚~8šÉ˜Ÿ—™q‘Îˆ¿U(¼€´¶Uù*á	o9põknv°ÈKkeóó—<7Ì%kÔ›kGkå^(,ÕÕ,Ršžõb3i¯·bi½˜Ë†jê«¶Zÿ/¹6Ö+LúMôIÀÂ-´À¶Ó §ù´ÁÒìEVË§JtZƒÑ{©TÖr”¬uÇÜÆÖœLóy:D¸‡›`65BË2S+\Ë–&Ÿ·ÊÕÿ!Õ¬¼öŠÆ7½rØ`íg‚5ç5vVïÜ³t\Y/¹Ö‡dt’+ê ³³g§¦ÏÎÎîî›ýÅd¿ŽOŠÕÓ&'Çigïí9´{ªc¼‚Bœ$¨RÛ“Àš<ú…Àü9h„ä`fËƒìw{M"q ñª¶žÞ~gå`9"!&Ö»ûÀÈ„ÓPªÅ‰ny‘Ö<ÂkÑü?L&çDZÓ‚ÁZ-Y`,À™†k¼R#™øº¾#¶"œ0ÙJÖúµ˜y^²Úés‹„¤4WÕ4ÈÐÿBTÖ<ÒQpZxÆîÆÁ™Ð9®·iðX¶m‚Áµ7ÝÂöàŒI	na ˜±ÛfÔÆp¿øƒ“%oÚØãæÜ&‚2îÿ%Î¬2óˆœæßŸˆÊZ$¯¸g«xAÆ» §`ñßLÇlƒµTm×Z¸ ËšZø‡Yº›ÆYY`M®²Ó#„Ú½	`Ëå.\HíOüEÀ5Ô¥5KƒT&ÌÖéŒ1ß*<ªŒÎx]‡w8æ5ý¬Ï×©¬[°¦&Í–0éz˜G4ñ9c„o¢Æárœˆ	6#Ô[¢Z³ÓÚùRóÒàV‡ÕÉÙ×¬wý,B™1ÊÚ“â6ë‡}€6¯tK„=fzÆ ¶¶ÙÍo	¯(V¬8žÓ¤¡©l7~0íaªÖ ³ç 3\!·'ñà·©ÝÚvnP™›¾LófØ2þ—Éä[£1ô1Í¹jŒ¶âÍÃKK7“>+NkþãZ+‡eÉ°’Ë¨Ô í1C p5Y[µ4l?–5åCÍ©ÜBNÿb¦©_›~3+?Qžü°ÚŽg±‹¬Ak„rŸÍÍ 	hï\È¡•ñHá‚*¿ä ÁBv${Ç>Tª™€-—í6zÖŒÏŠ9ûçÃœ—Œïª¼•5’õŠ"o—ˆkó5k¡h-A6[ù~ŠkA[ËŒw„µf«X»~}Í»-ÖâÛk—‰j0;w:¡µ©¹ÓÙÍçÇÇ«Å¢lo«t¤Vøá±š´æ¬¶´éåyîRDJsßþ kÉbhÇ&pK¤5¶’šb0µñé<gyCZ[†Ð¹Ìdà¹¯§Lí?€hËÿóÖ·ß¸úñíÛoüöÝw­\qZûææã”&Ñ>ò»Ïîà'3âÚWfÞe¿W­åÛÎè>.{ÿÍ;°)Í.5 nÏ4KÌòCëK”ÊäÏ|uùêåó——QÖH”²ïxøùÃÁcã~‡µŸža$¦‡À*‰_ím£²ì]WÖó+tõTÃ ßŸè,/=¶ÎøòÖØ£¢±šçGJY+3ªüm½Kk4OcU+,"kÂ14d:
²Aˆ½ Þ^5kÓFU3Ë§¬ðZÝpyt¸-Sï… 5‡µ
£ƒÓH?o‚Ÿƒ­Á!ÖÜ9ºÊ‡I2Ö‚²æf½¥TZ‘ÇrhhpÏ¾Ö–½ƒCMfý˜æÄÄŽ05}-¢šU©ñÚC­B¶¢"Ûä-±[tGÖgL¹å¡\Ó+ÖoØdÏ{.;®YäÍç=¯F~ÐÇyÜ(fQÑk°šÅÙ¦ìÈTßîÙÉüP½>$¿›ÁCjnÍÿ´ÉñÉA‘éÑ¬Ag’Æz!9XÍbckÿ¸ÑWNvªþ’–é¢¥ÃšË¹4-hZ>õ»˜†[uW¥Á*Hg¦"^)æ@æçHs¶Ç×‚d¤5žoi/éª0¾ÂË/Õ¶âÉ¥Ág[ßL›Ýíj]Â†\)ûqÉj`›±š%ArÊ<¢áòþ®ÅEõ\#¬iÎYÒÚ¥_¹o¿MÊZôñ<HFÂ¯"¦1¹7–ãÙÁ7öÄŒ6í‘Ô¡íF%ì"6vŸ±º…­¡“×÷ú–4Ä¿soßƒiZ¡y0Ñ·ùàœcÖj&óQ\‹ØÖ²ÀÝpÇÿÙíÚ hA»­¹çH*ÝÚÕÅO&êH¬$´´ÿ*¢íÀ7"ë‚‡,…ŠÅÅÍ‚µUFn„¢5zb/t]àíR‘ÕœÄA#gLt°n‡m~j–Ç#o;‡fN¬1uX“æd´X©v§4Íç®˜™w?aKâ1^1oI÷ÿ×1¸=¤7Ã¶„m>º³£Æ‚78L´ö$–±5¶ÙOú½r ©±ú$©£ ÝÖ_š!$#‚òç]ßyø9‘@öèýûí@Yâ
ù”ÎºpVÈ¨S£á¬ÂÌúq)Ayã¼í®4PŸ®–¹´)7ÏOëz%	Æ)aÍû5>õ+fÕãÌR!9L|«YŠÕ€µœ²ƒø÷‚¦¿4Ô4Â*ÑN»sÐÚ¦›6lØð¬ÁÚÓ¦¬ÑûæëI›µ‹W&nóX?1snæ’§t RE~-è¬¤?RÒÐ 1¾+÷¤äÓÏ7ŠÁ¬e»ÃZ0‘ìç$º#g½‘^J±Àa-4Z³¢5Å?ÁjŠ¥tÆÂ “YCÅ¬¶Öhm-ÖâÛ¢¬™í5»‘QœÛœ;?>y¶£ƒŒËIÌ¹6?=Âamei%ÛÔÐEM ç—Ñ‘9:Cê‚.Éa„(5—Ë´Vªí6‘z¾ÞÓ_Ö}@GFrì6´ïÿ°wF±Q×¾¿ïç¡oW²­1–e?pÂµå’™Îtê:„LÆ:‰i=®€Ž*;ŽrJ@B¤±O$h0éÆ%‰ˆQèˆS#ƒò]„ÄurÐR¤¨jO{ã‡ž¨G¢•ªH÷÷_kþ<à¢[Ýsnä5{ûÛßS›zÏoþký×ûýCøà=yhñøÜÒñåå//--?¾|~fiÒ!'uEýÙÏ~ùËm´ZY§§H„”äl!•CSƒÖ+RÒ,¼7vÀÚTÉ!¹é±BÓ£ó•ùlêw,./-..½ö¥2!g>&Î=P`3µm›ÁÚ™3:`g2 5!mÁUN<tò*íÁ”_®zÜ7'ä"XØÃ	*2kÔØ ÅeI‹&œÖ˜7¦ðêWùÂ(Ù’–ÎR*[÷´'_¯2)–/½TR	Z¹ØT’A¤[tÃßÂlˆ//ÂUÝD±)¥h.tq*¨Á3ñ™cXt8„6‡6y/¨@wµYY‚5$Ò¬Ößµ;åÁ®½ÙºèÓ¯a_¨BÏÐ‘º4•©Õ	®:œÐ5XcEÁ­¼hþÀ§°ü¾ñ€XMåŒ‰²ö²ÛAÞäöÏý_©•ÊÈo¥!wŸÚ÷ŽAjJ|œž>3›ç¾Mc¸cƒR„ûwìî§ö{güÐÈ†„:CH6ëxí=Á9qCSÓŒÕH‚<á?›Òæü¼-ÇÑŒgtu7‘Õj'¡™Qö‰VDq!K’ßÕ±”ó•ƒÇUBC8øJ¼/´hŒœ§Y8š¹×Êr¬™°ekG2#±ßU»¿#›¯†.óÃ¢.¤?âäoF‡IT{¶Ä(¯þù­®¡:ëf"ðÙÜ%Fvæ®¼u*öY«VÖöHZÓÄ)Í±÷ÄŒí3K3G´ñàPMkz¬j«cQ»×–®-žâÁ«ùvßàFó¶`#»·ÙÛÙb§IÙ<"Ò…e‘›~Á'¾ûIuDK kkHi•ªÓ0ß Ø1nˆWà®¢vÅõq%škóù¬—”ñÿ€H°†É“,t†€aekêNœÇ»ß>§©¼µwá­*‘•ø™X-ÀZÍBÒ÷3ÒZÂWŽf!íÃ/1F“,çIï–Í"oÖRÁ÷ßÛ¡iNPäfç±vu¬ œ÷ÍvëÇ`É‚Ó|¦+šÃ†ÁW$,™I£0O_jÕ­%£W¨9«q`©[ü#¥=£	y
r´6:£ýùÏû^ÿóŸ¨2ó|È×¿¹ý3Îdòøƒ$F~HÛÎ‘÷H[ì‡í ÖØ3< Í]ÄK×¿€ÔøªÏF"£Y¬©¬Õò{ÝôÊÍŸüdÛ6þN“úsÖ•yŽÏ»ÜYŸ£€>Òo¡6°&È:ˆGEÚ³ú'b¿³´7ÃîeZ»ÐÙÊÛÓ‚5Þ¸oÿ§|:ÕPÕ®O~LuÅk§:çœžê”£¤¥(¢…üb$Pzóº$m¬žóÎ\³1—1&4°F‰a&(öØr<)§kõ9O’4X{nrµ²&\ãÁjÖªcuÅ)¾ÿÝYõXÿÿãk/J‚œûóó?Ÿ¹­ó³ã³SÈjü…³ö"‰VerÏÚÊšÓÚ&) I5"ñÖâœp£ãU¬æõl¢…žz”55>s*&^mýôÅî*•ºs™¡vª×hö,}­ØÒÎ¡±ç©÷wËf¾»xýøíãï,ÿË_–®“	­Ñ§úò)`í¹ç «¬}XƒÉ×Òè…==;›ËMoÃ¬+%rŠàÚ0§ EkÓµ¬±—=ÓSMDn*-<Ðx}F„Ó”	‰sÔ©£çÞÄƒRÉT"­aIœÙy8‡é~·‰ZzÛkÅÈTm9ù¬öÕåÆ<»•$¿1{i8A{*…F,3²h¥k²)o1£Õµ45xå“¼!.nyè%±•lånJt„äåš€5~Üfz¡\Ç"N
ÖzÈ}Lœè.L#8Æ®Ø.¦iz‚!	¤¢Ñ
Ò#ñáHìÜÕ•ÀrYwìÏ
À4„ÆZ2]a5‚ëvÈ«y5ÜFîb‡L ¸ª³„é¸ÜÁÕ†¶«À¡Woº´&ªþ>ñ2ÞýÎ#é²vã9ÞðÏ8S	_&—¹@¸ŠˆÖ¦óSyè0½»‡ÒÉÌ Æ"Oÿh—*¤óhNýŠ$ÝÑ{§írZãI,Xï:;5ù²»Ø­¦è'ƒ¥¥9*ÏªaCøeDùMÂ7¦¥²&…œ…ŽÖFPÙé-¹¼"ƒùyŒ(¬1‘±R.K²U’m`8©|£¥‰½qZ@E‰lÉJ°±×óG;	&­…x’ôÇ ¬u?	«ÑN7HÍ­±b€6G\²Uƒ5´µ‹ÒÔlÊÚ6l8ŒÔ©Uãê8_u&jc`KìlkÅ¢m×ØmäLS‹šb·äqWÜaûàN²Wz×mÇ6{Tm„kGlÇ­¸÷Ÿaòs?¾ëÜ¶ü¬¬i6/ƒJ+—”]Bw†­µñ<mr3’ ½ô(Éj³k&pÉNKóFWï£÷Vjà´·ïj³öí*;È`Y¿Fî£ÃZ¨M«O°Í¤-¦ÖH-°±yç5—ÚtM½¤”{æ,G‹>˜j-ZóC€5B ç å²š‚+Ð˜`-„›Žðû2ò™7†r4=[{S,Mó°–¬1‡ÕtjF’ìðš>'Ömì)q»)!­áØÏ¾ï;Ÿ	ÕDk4PÃ"Òº©Áa€™öSÁ†âF«5Ž\”»ˆìDH…dÎl\r¯’ÏöIrû5÷1‹ÕZ#jV+P˜¾Ê{‹›’”é‘¸A=GÍÅž=ç&/WÒ8/Š DÎ šk\µ*w¬SÏê$IÞÚ«§¹¨¦±§§¸lïôð4o
Ú€µmÛä1ò‰:¹¨/ ÷	Õ¬MRO¬™O_þrr˜wpžÿ#4ÃF;q™2 )•ãWe)½7'kÿ¬élõ#—©o·ENç,ê¡ÈZ˜œ›±é-ÁÚäÕƒ«•µê’µ›i#4ö(°U	kÒÖÖ»b¯Çz|e`íéÑü<Û¼™ÌÏÏoíœšRw¥a
|„ÄÇD›/¯kÂ5ÁZºÖ“YBv‰Ž†eÖ˜ñˆ²ZAIÅ"w75Ç6+'†´ˆú²{Ç@êÖÄpôkÆw„(‚<dêýðX_¦0„¡ÆG‹Ëï¼óÎq’!/.½¬½vž·ZKª[{›{öÍ—ÖŒœ 3ñšHÕLUHÃÊŽ¬Mƒe®¨é	¬NÓ¾eZÌæ!oÈÆG›²Yû¤´Á-XÊÚÒŒö¥EÞÏ‘ìÄ§`ç\Z3§µ9Ý×„&(X{fâäÉ“òþ@T›˜PÊ¢ö£L<à¥àÀÚè(}&¥×(fv÷5\ƒÕÊ"¼‘š€µáo”'9A‘lDk<°Ü]ÞbÜ´™·:(¬¾Ü|ê)aQr|î¨/tG'je¾Æ~ßð§FYM!V#lÒ5Ù-nË¸…ˆpµb¡Ás y†hcŒgpUZ±ÛZUd™Ï‡k”¯™îV×vàÀU¤V˜ì¦Y?“Ró	ƒÝž_v1õY;ªLÈŠ)s› Á¬ú9ÑY±Îñ3ÄÔØ8§ùéÖcýý˜¤tö{ê}`iTGÿßøÃ.i‡»­™jÉ:°fð–ø>¶KH¹ˆt9A#sT+—†øñ—Ë2Öqë~·	¬&ŽsÎNåb®¤Q—{1ZêHP¡$»ù‚Kh<=F‹?9–°ÙîÛÄè~Daúö•GøOž$úýkù—‡xF0w\‹¤{¹•w­‚µÎž}Ó€-öÄ~+5éj‡4³ÌÇ‹o9¬qj²¬¡¬Ag3×LY£nM3ŽÙŒÒ|c
¢ùF,Ïœ_ž¹Íÿ¹ê—“ÇÃÒ½ÛK¾ÅGœ.Þ^ú?‚kŒ×n_[bÿpéŽ×>¼öáàíÎÊƒ-ìiø ÑwþE&ÉÎ‰m£þ_ßÖ¿ILƒ¼'Ö µ+¬°	ÖÜ
’hÐ}!Ü*j¤¶úÖU˜`–^p«îF²ìGÝ -[Gz[§ÂíûUº–ž¿²uïÝÂÚ·y¬­Ý0Z[ð{O^Ü–Ü¨_sLSÖ8„+ìöLÎ|qE|s]e/WkÔæŽ!«U¤ ³ù’—i Új¹Y¿·píMî1Bý´Ž††ªrã„çyÁLÄXÎžX™ªMLàô<q¢¬F˜qSÀÔªTüiDðÚ' .üE¾³ýáíf¹O-Ö¶?üàß?øøë‰„†ìfÇužan"ÊšÄYÒ­$Qé¾QÍª!îfµB¡&€?Ì”2Ov–,ò94'uZ»5oNŠÙ5b…Ú 2¹@
þ¡8h¾Ž!Ìkñ¥ñÞ™ÓxâÇ«zZ¤"¯µm» ¬¯üŒÛÁÍÿpX;¢HÁÚæy:b·æa;ÿçÆWÒ¸:gz^šc~º7“ÑiÅÌ`M^þöï„¡'{d¡x/°‹YþpÝ-C{¶\¢¬]­¬¹d„µ¶Ž|ÍjXKÅk"5F­ÃÚz¬ÇW#þîßxKôo/È_dþ’>ºvXë<»Ð9>Î_>"[OóÆ¾1µ©ìÙ³¶Ã´vS´VÑÛjG³¤@“ê4H›Ù%z®5˜ŒVÙ’î¼ËŸêbwO?ò-œµ60ˆÚ³»"†ŠH@C;ÇÇpý Q¬­-Í]œ¿ôÎ;ËØŒœ?~é"°vdòy9µ¿l°ffúæÞo-ÖÆh;ÙwXè¬ÃjÊyÔžCdÖ(mc¾ŠÖÈˆ,<ŠÅHÁ´®ßM½9·ˆ±ÉGKjÄÍ7Ÿ‘Á9~’Ä§Ó”ùùèÐµÓ¥µÒÄ3hîÓHÎ# …K‰‘š*%HS`§Üdá†"Ü”Ù	D5Þ"YeÈÊàPÄta´<a‰h"4ò$·¼$”p‡Ú†n£F±šûønªo“ç#«æËß®ôS`zö_TGaÍ»ª¹|<‰]±ÜÒñLacLƒÔ¡K}°¹¾;‹å2ƒƒ9ée®¢y$'.­Åj5N	hMë„+h°°«©¡c‡0¥Á-õ]Ës-¯—½zU¸&XûÊAý·=‡µpÿçÓZ<F*zÙ†MP#ß+1Kž¡ÙÚÔ,Žý};ŽMMÍNo£f­ÿ©þ]»éµöþ±Çä¹‹vj'v=ÅÄ”4ÊaMái‘®¬%p5Ðn[”€Ê.¶ó6×úé×§ð‚¬oîéÑ/Æ¹«G£¿š¤SJ:µ×kq<ò¨²	½ÍÎì$ agŒ«#ðU,cÞ$û-»rDß~g2NÊü™«¿8ž’@jþ²ôybôJ5ÏgmÝ{eþEhíY‡5øLþ!ð3‚Ó@kê´ÆÃÓ¸çkŽk.­U)kÐš†ê˜×îÕ–W¶­œÒ«ƒÝW#´-ßö£ka¬&^Ó„'ÆiB6l× ¶k‹Ìï¬zÜ5a­¹Ê¹	rrfã GÜþSãŽq`ò-œù†ów£Z<©ðˆ«œßã¹@lØ Óü k™<EB4£Gø=0X3aÈZ¹D¦-÷1Ï;Üº,'­•áü­ç¯l®Ä’5‡5mŽkÒ1<ï1|+ï¨–e1jí]µÝÃÂî¼“6c·5ƒ5”S]€5¶Äe$ÂçÑÂßAÌiÍõ3³ô6ØNdÁhÊf¡Î¨•1M`ÜÒ{6DT‹È¦MYO<CæcrÁL ¡5].ÙÇ'Ö¬ZÌÝà4Aý’ÐÐÏ¶?¸=üðß}»š
ÚŒ×¤½¡©fŒßKL!Ö~=òèš¬æ°ÆhQ -tcíó¡	¶±ºûJ$A×ê£·æ;rÖì¬ËèåZ€GÅï"‡Á‡*ÆÒV¹F¤AúºÚ…)*!:[I°ùÜãi?%€µo¿ü2%k‚5úa#«aÝOJ4æ®­fcÓ)].¹¤êÔÒnR"ÊrˆhœÕ¨r0¢c9r™Î2µw¨·óªÁ…·z[ÈùIÁZtƒ”²æÛËáò›W79ù™ÀV-¬)Òxm½ÑÚz¬ÇW¢+¶`íE`aí’Jù¡µ`µ³gí¬Y9n/7G`máò_sa³Ø›Ü¶V-Ön×ü)‚5±APVðlÉØ*»§Û n  …>œ¥,†À“®Álz,ÃIý_þeñúÒñùÆÞùôÒòâ©¹‹¯½vþ£¹‹ïNîyû9³ïWÕ°&f2wµÃ>kÌäf¬MÀZ¦éËõáÙo$âº¾ÜtTÖ¦ÖrÓn)(l?ÿàÔòqÕ¬Á†Œ‹­)ø+ïîQS›¶äË3]Ç>?\ìh’Þm•yŸ^~H°62’øâ)óQmoœÖF€5¿OëîÍÈ‘=ñ‡„£xr£õÅ¦ãOÉ¶ðÎ·,ô+ãÂ_jAž”%¤kÈøæ¸ÎÙ)r\Ç¿¿¬^]=CHkú‰ôÆe^ C+«ù®ŒÇv›°‡&Òtôho5¬q@!eU']ík?¤6–Ùºº…ÜnØmwV´fœÆ^g f¡åX­¦ <$EwÂhå¶¥å7µµBlÔ¯ÁW*`kÈ³m$ÓåhÇÆ®¬‘óÂ™à­ÜŠu?Ö0ï¯³¸uk#òZšoK"%	}½cã;ÇÏŒï<&ÿáN|EpƒßA[lâ}´5Lû±„<A–"-’ÒÀ1‘+ $áX·P$Jœº*
jB\V:0?}þ©w;5—­qpVS·>SÔÊkÆQ¬îÖï2›‡C“ƒ›ÂWšÅXA¹dëÖö‡ñ…ý¦ÝI~åŒËU¤ÇÁ_Àh„a›=‡:Í²”9¤µ]ÒÙž=tôz‘@Y{òÙ@kWæDiÚ	ÈŒç@k±šxîb¬Y;!#²U…NgØ@5ß‰vP‹´–láèK·µCg¾ÝfÎè
›o
qƒÏ|îÐö¡6“ØœÚŒØxˆÙÀµÅZ‹>ðƒ&GÂmåá[õ#nÿ§,Ÿ_åÞ—‡ÞÖJ€$Ö^®Æ5¼ù6o°c¼1`¹ÀÂå+?©MCT3½¼³Z=¢IZNX7*˜÷_©‹ÊšëjßŽÊÚ6Ò kµ‚4…ëf±ÃLHrÔfV¶ÈµTâ/Â	>uôt’”7ØÒî ØlxeIo¦¹‹†²Š
›ž%ìÒ}¥±¾Ù×Åtz*¹âÃ•æf]’¢ælq<7ÀOæhYLµX]¼¦V3¿‘	ªÔ’Ë‚È&n>æ?R¦Žº4ú™)kêŠ-Ûý?ýw‰l$ARªö¸íJ†ÄUcÈÇ%¬©k¶˜ûpˆDl ½®¼HŽ û7$Õ|ænV[íßŸ"q¥©yÛ-^~RÒœ²k$	^Þ¼P«_¨Ô×ÛÜ¢1M5C>¬b=2&XÃ%­“_'¾ýø:š‹þi>ºU•é/o`ãïÊ(Ä«Ãjê±f°vjóüå¥¥|¯{Ž2è‘[Ü¤•˜+o§4‡2›ÊâQ+Á˜˜ó|f5É5Â¯¹I®7£’¶Ê$ÿ¬ŽilQY»ÙÖëÕ4ÄŠ5=ÌrÖÖc=¾°FWìßk*[SãYu];ôB/ÖýÐZ®ÓR¾eŸTk°Vs‹? ÖÖ2ï?ºk„ŽaÔîŽ~RPØõÂ@Æ®$Yú)»	Öz˜i¥@Ïd\1<@ˆ®]=|¦[éùËÅæ²¿Z\ºø?/Î§³t\›ywñí·ß>õ¶5[3ií[?ÅõQ	€Úi¡i¨eÀÚôl ZæÑ`µÄ¬ŸÎkŸ¿‘ËMÇ,HöLcß5“ÂŽë‘¹¹‹fg²´ôÏ]º¾øîÌk[â.kêµé©—dY¢æÆ¾¶ÇÛ 5AVM£ÖŒjÿ,Eú	o]'ZÜ=÷S:àéºó6±›¬Æh­i¬f½©4ê‘MÅÑ¢:´	ÿHRó’'aÀ%ãL”3’‘<ZTcÄ‹”¬!–¢¨k,Zt·‡ø/Hø	ëS:yL‚²˜g4dC!ò’5BˆÀo'4³5UÞ"™–Ó’4µÌÀ€:5ÔÀjý9¦.¤ÁcNmAWÓŠGš`Ü¬Ù4Ÿß˜¯£|\’ÚFyŒ(6µn¨mèèøutà;W9wõ»;ÔÝÞaÍ½]Xã
¢Úäó7*ª»¬ÜÚtëh¥C
•¯!°ÍŽïYÿ8¥œ³³³c;Û¹“6êÄ=õ”`íÕà)¢žiX‹{?jj­Õ8Ji“î(}g·@î\éên÷ ¯EêÕ<xjOQBšx¨©¹g•²Fn¥ØÖ67I^ÞñÉ«Ö|ñÈxËá)Èd‘Õ¢æáÔx­ÖÂ‹%F&ÕôOÂM!ýˆ„ùØ-FBK6‡½•LËÖ¨¦­a4Âé³Á¯Ÿ€Õk¤Ez75×ÖÞ|ëù‹ªX#läâ¥¹X³”µÐfMÃšvt‘Õ‚Úk3Ëi\f‹¢Ý·Ã>Ã‰ÆÛ°‡ÀkÉçêÀx}ZÓäÎmí°›M>¶ù(0#Øý ")<ÒI-LüáÛj¦ºë7Nïó°-ž$óxôGd±à
©yˆÊÖ{;aÇ%N<6X†EÌ.dÄ+÷ô¨%#ÙD‹¬¾‚ùgèÝ(&Ìóä¦ÕUÚZ÷VnTö:«…kÐZÀ5+7ŠÖ B5¿V¬¤2*˜Ç¨e9¬xEgL0ydžbB(DOÕUMƒæ–‘)½²QU`b+ÏmtVã˜"tâ…j¦žqÆèú™êÑÔEÍz]Û×ò¢úú¤. :š·Æ\føÃIV-|þÄ~"Ô±‰—FGpaNEêñ'—ÖX9’ùhìá·Ë—;¸ƒiúÍ‡i˜M†$aEkß1sMÐÆø¯ñkËþàfeåØkÐšÀ”Gýh°‚²AÅà¯w€5jÖè‚n?ÜT&;6Ö›Cy5Îæ\Ÿ*eA¾ådÓ˜Î., Ë"ŒÉ xaÌ>åîÜË0¼‰;µ`l^Þ¬ QÖ¬`mr!›žŸ“II«·‡ ÓH¬&ÊªÍêHÿWxKKÎd®¯!æ)XTø-ØÅœ²(Í˜Õ¸ –ÑEK¶ìUŽì!ž[U³f¼³®¼åª¤î‰(¬%°vhÖÖc=¾]±{ìPÂŽgöÙ…G×T­›ÎO¸g67Ë_$*ók´Å¾y«¡6ÞùB1€ÝÃ8MŒ´œãPÔ@ƒ7ºx7%@f^Ü6ÔE«á‚n‚¬ûû‹AW£QY{»e¥j..ó.éÉî¡7?Z&	2Û¼ùn88Í¼{ùò¤Ãš<FÔøÒ«ÓÐÖÖd#2Õ×'™2û|:7}a:Õ×—xö›ºöùF¦QßHMçR…Æ_ýÕ¯æ–Š·Ï_?{iñÝó‚µI¾ã9þØ'´ö´hX¶>ÖUl,Ê„Û%÷CiûG˜”•˜2ñÌï\5Ô
45/7÷~<ÝA$¤öãµŸÔ8á¶oä¦b¶Q¸­EÌ§¤FvëŸV*¿¤7Å*T{ DÔ’œâË¼Â('2÷/Â¿EæÝà³~	–S*³&
(Ùæ”9´Ýë	×œ(Þ*‚¶Æ´«G³ýWÊêàþþ~Ê#«c•²F„Æ×>¦ÌÖÖ:X•´–îlkCWÛØÑ¶©£³XkÍó¤Ž†MmožÓm>˜‹$æýžY£ðÄš|ÛJå*Ðv«"#Ì$É}I×å§v¬QçØšŸ=³s÷Žn³Ù‚šÿõã©FØÿè†ýÖÜ<$é‡Í™ M!9Yw7O+ùPÒ£¶É–Ÿ¶¡"gþsŒþüòš‹¡nPDÕ5P,Ù4ø’ÛÂIH_´Tíb«aîüDÄ«ÆdñjoÒÏÜáDI‘¤B–- 1„7¶X¤¶_'&9r‰/\‘öÊ¦ý	?¡¼åC\C[3O‘³\ò?Lêñ.tV¨iç²lHÞÔl‹Êa¨ÆA…kU1"¢Ú²‡ãƒm÷Û&°U=œÙîŠ;¾³ù‘‡€kÎjB¶kLØ„lQY³-=\gñ/q‹(vÏ!ØýlqžŒá¥Ã•*e­²†…¿ŸÆglÞÌÒZ›ƒZuZ¡áhpFmUjy¥BJ× ²7ïæ|%ÕõrÚzko6»õÊÖ`3¡š"¦AÞØK›µ+€#}\AÓM)’Ysó"¥q…`ðÿ]	ªšÚš©)t©ñ¥æP|ePgŽûX¡ð¤G¶©swz­yßfÍ<¼16c*œàŒê¬ÃK„µGC+lâ¯ÃÚfÿ˜¬«AL	]Í¾°»„…0^B¸‹ÀkX‹°ÿ‚TF°ëõ‡¿þàöï<üßà³}¯³³áÕ§}/É‚„Ù0}„ØÜÒûõÕ2ìWÑ‡‚£.ÞYÈd
ö¿ÞdÇT´ö“I§Xv„`m’Fö[A¥B€µ,eiR®Ô¥ºŽ_BX«IAAêÆ·`¿K46LGêz=}Fu.¨A¶¹A¬³&kÐšik§.VÒú•fùRH].«j³¼WÂYWìd–Ë%Ž [/Á·áZÚåÐÍ‚‚¦sôt@®õzj%OsœÓqþhtî¯VÖ]í'7QV£ZXc8Äc=r=Öã«âÝoïƒlòd>ÏÙomÞ¬º‚´ªg;i.–ò,‘ùkÕbXÍšq–îZÖV²K‚ÿ¿ÂzcÌt-ãE·¬­8‘¨v±Kn#b5eƒqÍ*Ö§ºuÓ£k6ã¥å¥ë=Å'õžéã‹\üòK`ár®ò®5[û‰îÙŸBkZ¦a5Á¤Ö·sü0ÎFpRØ.Œõ™™+¬G7ÛÆÆúR»~uí8ñÚâõëÇòÈÌÇü}ÿ…›÷#æq#àf€|G_lÄµÃ»ÊÄÉýÜ2©QÕÔ[®5‚µ‰²jÎßÿô±‘Ðm¾hytDÃ_™ëCºÀS8Sël”0ú1J-/lé-yo¬“[Fi%„µR±Dº$ —o-CåJEz'`.­ñJ^â/R2@ãÈàrZŒ˜ ÉÑ7B¨"µžj]](kTƒmðÈî„ÑÜèQCº¼æ=Öc‘ˆlFkÉÔô3[ÍCUé6’!7nlÖÀ8WÖxÖ«•7Í˜Æþù7ïWp÷‹°öÜó•®­ì}«rëVïQ”óÃÃ[ßÎ°Ú?Í"ÜM3yª§©A‰Å&¥TƒÕH{|õUlFÄ^fà˜B¤¦$Ð k",tJ~?%MJ+R$š]ëZzjz8)9–)\Gëî)ºdb$R¨ïr.‹°F8á%ÚYHE9É¦Åj€ó§†¯Šk:øEZsïO‹kÌÖÈmôW>™¼t„5˜Î1P«.Ï½ï_Û·ìoaç€‡Â¹ÿÃÚ“b5ë«Æ_$3$4âÍß¤¶¶KÉE`ÍXÍÕ^2´GÌœçªPM6’›ÙxüÆ¿±3–ï£¯Å)ßˆvÅZØvÍ§l÷>|ÊÆÙÌ£šÚ"¡ÅÓxÆ{€-ãVu_2|_<ÀZèv_‘Jô‰ŒkÉòþ·ª†µ0Ç^Ðeý(×þlV-ÓµÜ›iz««b¤t¾‚föÈÞ½7VW¬YT­]årâ¤¡Ì›£…ïìÜ¦=ÉÂ®	áØXÐbxDå)ÿaA
šÉivZsªò¤HˆËZdFÃôá¹–ÎqvdI/ÂëšU?Š™?Wº]Jba’š‘`€µ §¹ä=°æý²ÙGdþèxFˆ•J#œè)ÜˆÒ„ªÕTªÆ€¹ˆ™„ìÛN7ìí_P¬¦œÈÇ1Í¨dƒÒ´ÀÓk  gÂËò„ülËÿ1Xj)Ù4dÆpEMÎ][Í†ÚTÍzŠQUì´­û©wemr¾F¥ë|™\= *ó•i¿wTïe	pb“_?kò§êÕ¤sZ6Í1¬Éš}ƒ@k˜AâÜÓó©ùùÍµ5àà„V§_6(ûQuF³4raIœ¥‹kì,¤sõÞ8ÍÉŒ‘ [ÎV3Ö"[§B6]_á:½Ûª2 VØBxeãý„54Zû¯ëÖÖc=¾
°öµKŠ	qšÈ6ÛÉÝoaÁ›‡à¢œñOƒ²¶¶$&#•æúº£²äækÕ’Y¸£I/“°F2\=éŽ…e=Õ+×RÄ3ÐînòÍ°šO$¬™w?£nmüè"®ÿ—Írù"æýB’l~q^†¼=?È‡süÍÿémÓ„yŒLŸžíëë;|ø0Ü6<lµkÞjÍ
Ør}<Ok"·\Akv-×dð–ÕG¹Ÿ/éÜõë‹‹ÀÚÒÕ/‘Ö¾¬¹©	0¨Üo¨~íGxŸOðÆudË7NÊ¾X£6@®"rNæ3GˆI6ÒÞÜÉ9öHeo
¸&4#¡Ä`æÚ)Áš%Ôð†¾§±¬‘y×N?l‘ŸÌDÌZ¤„”Fh&yRk‚µö¢b¥3UOöiÏ ?k„PBEkzjð	‡$ò£#[¼$4±°ƒyŠlƒlºÖjƒ|6¸¦ªp_ÌRt5g5ïM†tRc-Ýohð>Ø¬MŒù™öË“$«²i÷`‹OÖVÚb?öí›ÎjŠIìÅÒ{¯ÐªÒšß´	p>±ß¶­ul||çNœûßŸUñÂ™3}ý]=»ÇáöýôgïïïúÑ«ï½úªR!í&éš&¦Öi"ªÖV¨[#´h8g!¡²»ÐÜ£?ÞÌH„y‰ÔJžÒÈP,ô8¶µ+ÊåHk„SÚj7Æjßþ¸àÍçþì yÕ}²´æúe°6aß³Lø³IìEns6$ls)…v¡dN§V­Ön#-µ<ÛÞ‚¬vè,ÉØ.¬m¾tE¢§iÐ¨ó9Éjo‘é¨•5ášµY«*Y“¤ÃšÇ?™‰Î"J} F¬?þ›$ 5¶p\3¾XAµ?ÚTûãÌË_ÌðX×þýö¢±¨¶­kÚœÙþöp$‹'U³ß³3F‹ç:‹ÇÜô Öî•¿º¯ jÈmêö.ðÖ<àÙ!Û~äƒ5nIé^¥@"«ÕKÚÈ•n…Öäé¿ãI‡µˆj1Ò!÷nh¨ßzãÊF¾.ÂZìE>ÍØkC0Kø.¡· k‚'sí'¼e¶Î+®±&oz°«>åÀ6,52ÀšOQØxš!gÔ­¶5yI)	uÊ’·Ek\7ÌJÕºªšc3÷gØHI4°Æ0"í	}!òÃó”qŸê9ij‹Í©!“mÿæã¯ÿb»R!÷Q¦†ªö½×ÇrŸ¸v×XÖÜ’ìH@v|^(X«‘¥o·0`õnZ¬ù‡“éo=]×ðÊËÛ¶žÜI5+YëÌõMeõÃÊ
ø×P«Bî
0S­rfk¤oe¬éÅm5uévLFÒdÏpCf{#ÀiÜ>á-¨¶XÛz[é×f.VnÍ‹¡ÆPÖ€>˜J¯'U
“´&áW6&&Š!õQÅ†=¤`öIƒ›äèºæS†3™IÉÆ2é¿æ°FhÁŠÖV×¬™wì²ÆgãWoÞª¹WX‹^<}qÖÖc=¾2°ö¦ÞY$¬6O kJƒßi@Œµjo\®\¾OÍ°VW³àwÀ„Õ¢33£ø©®à’)˜‹HkvÍ¢¹§Ø\è.ÉCj3¤Rô2´jo)&ÕmGëÍV¸«ÍÍ™‹ÿkÇ¿T2äÇÖÛ|Ú!§_nÛÖñ†T#û‘Vj‡¡µYhç~vBµk§/ ±yw5Äµá1(­éÑ¾)ºc3r1%uÏ_º6³¼¸øÑG‹ç?º¾xdéÝ#““†IclB^8ý†¤µ?(òðûÝ¥‰òþý'CÈw¡ä­°G x‡yºJƒ²¦ÑìÁ†c»ƒ5©rD±Åd±¢®¦kå*"û¨¬<¬qVfúfýfõ_$4R/¥´IqšÒ Í{¬~@¿®ªŒ­]¸ '8èL›ék'N”5AÒ¢#[ˆkŠ™­ÍÛ¬e3»35B)µ3ËJJ«Õæ2I&¤–´’L˜ÆHÁŸ?ŸÏ:dÞ¯&k­èj›Úˆ-mÆ‘m6µ‘žJ «‘?òI¬=ö%¿„ØSiØ$›“4¯›WÑfÇ¦6ŒûAkgŽk­Ó³céÌ µjÇ¦†Õ+^S_ìW_%HÃIå‡ïá¾ÂDõjú9%‚—eF²+Ô»¥¤µ˜1iBfO3È\*#¾¹bÅî_Í™™Er²\ƒ²Fð;°æ{ÐÃb$ÛKÔ´I,®0VuÁ^Åj~ôe<y›°Ù~§GSÖØ&žxX#‚	_UKN‹Þ}JûW5Ûš(yCìÍ{/½há-±_PÐV Ã’)1§H5@ÆÒ…5ÎÞÊZÀµ ¯9©¹y¿Hí¢®æ¨vÜ1MPÍPÍÂi=Ìÿ¸6nûL´Æ4ˆkÎk_|ÌÎ‰jšpªí#ƒí¶ÙCGÂ5¶Ûì<þ/‘-N#¯Åó¿)®¯gŒ÷w©„#¶­5µ[7Ô×•X×°Üc„a‘zU©Ûq^ï‰Á5ÁZV—²5ŒDžÿgò™Ìw‰k1Rë2!·Ö×ìÙì…«‡f‚™oI…Z µ?Æµy ˜‡ É¾”	[6YŠ¬Å-ŠJf*B$–ûšZê#›eJvÓ2×ì*çKVãå§BEž-‹yŽÕ°æ£–’<|£µ'ä321::‚mphÔÆÐXß8Z–¦öÙëra¯½.c‘}àÙ>Á(†y?æ$BnhkP#vþòêç:F#hlýLSqdbÄÚq—K^q=òÀ°VÈ¤82I·=½¡ög/ø®;ö‡ˆ°¶g’˜#!±×aøÄê²Î÷õçP×xë";}¥0*a‘ËT #ÈŽéCÛÓ–ho£»7R¦'/Ï]ÄUšDÈÎ´ÊöQsi¦Ö9ÜëYŠèj¢5€L†3Œ®™™Õ#ßojZò^3rp}\4ú‚#5qKG$Íö¥ÍÞ›çåŒÙ*w¥1;H7§µƒ7;SUQM9÷Ÿ=´kë±_…øÚïe¾&VñÂ™EkäA	¬õò'[Te¾öÖÊ§=wã¬v“?!‡Xcµ¶s)æœPMN°¹wLºÃ¥
Ø‹Ô×„=(kâú®ñ×ŒOª@’’ #åÑœÀÚÙ%² {çéjD¡‰‹k_º=£ÓÚ§ßzúém–Úøû+‰ÿi°XƒÖ,¸ˆ’†yãÔØi°\#k’ÓÜ©¦V‡,þ›~G³€¾Ÿ/’…yéÒfyÒÑkfk{”kç½ÖôðÀº_âýÓÚ‘²&€µ—0Ó·<0î]rh·Ë‰-#º)Ëk¿
ÖØCïT“×xNÉ£½\Tb(Ê¦!zï šAríG@Þðˆ¤Ö ùøx^P)ß"+ÑšýFŠènFk‰k|8.Å"ª-Iîc°ë÷%i†6s6³“è8"am!×OGlé^9êh+YŽÖ¢ÏˆÍŒâª}F´¢IWK7tv mmy€MêZ'þ 4oÛÔÑvN¤FùøÁÇ°tV°Æû¸Ä`ì¹£G')WS‹5r¬ú¸áÒenlç8†"Èké¼¹7çò²™¢³útëØ»ÑÚ«Ö{f#Àših&±¶
ËÐ8´(t¬a>b!$®°g^›Æ†Z¦ðf¨hLÖ.Ý95ƒºwÖ<Œ“<8VAúˆ.b¿WbØ‰/ïÐ•+…²,rôa6Eyä™‰ê¦ 6GPÓIL«4_ŠÔi[Ü¶L<ÓtèÅgqìD°â…$¬8Í:«]R¸˜FÝš&æ?2¬…š5´5X-rÚ6gn¹JV“¦fˆf¨–`m~ðˆ¸¦‡ˆí7ðY 4ÂApû‚á3L 2í·gªd6Ívßtb´öïK+Ä°éx‡ÌÄmlÆlÓ¿9 ±ÿ´@Z»¸¦€V¹OÝš_—hí­×ˆÍ¶.à¹xÛª»ÃI‘÷ÂZ`)é#¤»¥Ù{;e*‚åSz¯Ù[iÂYdµjeÍ»b£»Ý Óö&¢ZðzôÙ].²XcÂ,@Sož­ypah¬¡«Iýe‚5‹FÖœË<q1–¬™].ëåtg3Í57%Ã¯Û'×á˜­Ü›•I_3âRÎÆèhu¤‡R8¸é°ÁjØZ‘ñM•49Ë§læÆðkópDWCU3›ÓÓ 6™‰P‘¶ëþo~‹‘ÇÕ;q‚Ü¬AtŸI‡Ûþbßg%@–'$­9¬Á†4]Åi>4âEìÅ}uß¥kÃ/{å•ÄòÓÈj‚5xŠšµ#—;5E€¦L‡ÄXOT¬K«†Ãhöý¤®êøí><uúð,^c½ckèŠ}àÓO¾ÿ	éñ¢ÝÇGN½uji>MgêËy5œÓZ§¦LÀsáÀ¦™ýóq ÓEà0›KOñ­Y\Ý[ ™PÇÔ€M–ÿn©GpŸ¾ŽÕ5kÕÊZ¬Z©L7V
w±ZÀµCÚxœ=tvÖÖc=¾v¿¿ôÂoûÛ•c¤˜‡Ö$­ñ>õX-=>î³d({à>vl7¯^m£Å"5vi £Y2×Uºf9=CÈf”LÕ§¨R³öj<© 
5ÁZêNÿnTµ;®‘´‚Ô½¡K·ßùËñ¹^
Ïçñý€×€5ÕíÁÝaí§ß½@„Vkèj§•ï8ŽûØv… Û¬>nÃßŸZµaCöaÙ?Õ«œ÷±>Ö[h,\Z¼6wmiéƒ–®ÿîÍÅ‹×k—Oñ£!d°ï×®þÑ–-°Ó~ZBk2úà¾ÉÍ’”ÅQ7w&Å³Q8Ñ`-1ÿ2§ÝíJe³çÇlßMAì]»:n©Uã)X+ûŠ?–x.C‹øMeQl×.k—Fôµzû™óŸ„ªÙNˆÕ¨k+‰Üb!I™+GÁÆ¿ÊbÄfUÒZÄµþÁ\n¡ŽÈfvìî'v×&x'%ˆæìfË\Œþ":p­sƒøŽZ³eAr±ƒ	—p‹Ä]DÍ²k­›kì5ŒáÞ¬$@µ«7Ž>«í*¯“­eçµÛø¿.ßÙ×7þþ±Ùa2.Û¶µêþÞÙ3³½ƒ;úx“8ÖÿÞ®þn:~¿¬mi±’Z€5<CºEgnØÀ–³–ÉSÙ¥šyòžÿÍÞùÆFyžk¾Ú¯ûa?{¬±-kÅÑ.^l,v ;S×¡djˆSC1±ð”Udb—©Ø»ÕR&]l‚ˆOþŒœš¶ºE(AÓµ"¶‘N¢ètÈFMÔ©‰´¿ë¾ßg&¸9«=R? ßóþyÞç}=cìÄïüæºïëÎ÷÷ÚK,ëìiBÇ¨žÂ"]ÙÙ$ŸÏRäž2eÍ/ÓâÁ¾œÍœÅJá°fy”¾Oì•iàXÁÛª•ôeÚƒn»}1?8èbGËü`OèÎÍ¥Ð™Ÿ#ëIÖ=ß¤^ÜÇsë¯Ì”³Ú³çLOÃMD°Fîãi–0Á–¡Ä¶ÉÐeMéjQXÛé£
©³å²ÂšXíC=|±¸ÀºdüÇ"‹ïyhÃâ#âýÅ÷6#?ÑVššh-<´‰Ð&`+üúÿ°wþÈþ×ÒØœÝ„l¶e)üó/Š‡_{­žÖ–%/>ûÿ˜¹>îlrXçqÂy½bM±ÄqW ”LÐVá–Ò’ÁWÄ*ÔZ,a2¢7ÏqZC]M´Æ&²fÀ%;È›EÁYz™ØøÓnE¬H+yœ”ªÓ³8Î…îdie=Ê@DÏb¥}¯ç%¯±IB«C¾ènX“±†¥O&¦$~`QÎ-ø UàZpm7µ-°!!g%ñäe°¦dz`?‘àYPùÉ‰z(R—uËuªTû\‹³j™d2ÊÔÕpÏÖ|ˆ-€Ç=bçeì®íÞøˆLÿOÒHh$ÐóäGD~¾¹ŒDVóìM„56ŠÚšƒë·½¬H
µîÖ€5£µ#-=ã,é­A²Â¡rNe-8$Kv¢¡%ÐeIåPËµÊñCegô*¸6°ò?ø¥9Œ¼ Z£î12;SÍW—H}W’íÄ8O„W’ëšõä ˜i»/`3‚5&²´Éfºµªe<“Ø÷›µHà6ˆL³q5D«k¶#+œÙ`-Ò?‚˜y‹OÇsé%•5BkÐÚ¹sË°¶ËqŸx÷_"2µ5ÀZq†ÍÌé5Dæ\OK×k—½%æ¾43úg‹Ön¡«aÉmÍaÍw‘Ö˜ŠÁœ”5­ä>æÑÒ˜HÓqM¬åõ%i‘Cº“|ÈN<Òå(â$[Èp”o¾qüø©ùÙ™ŠºÓòhü»«§0ðŸœÖä}û	‡¿úbK[ƒÖT¬6Aï¬M}Ã0špÍì"U®æ*Û VÔ³M¥WÕ67iPÜ@>?žjiÅÄÿÜÙÙ³×'u}ñØõW±™ÇrrÄ^P,ð°öúO²`«×<4=öšÔ®É½’d¹øÓzm3ƒd"4>5Ë¬˜2SªXO{&¤R#Ö©öLéŒÎÌÿýâyrìh¸F5®€Øp€:ƒ5³é :ÞG`J!è0ìXë6Í…Àšë9_Àšv:4<cÏ†P‹®#KÀš—­iÌÂ¿m+Ÿ?nêƒÔ´µ9ùö‡P¡ZÐÒßlë'¢Ü&H#GÈE5ó(_9;ä–©â255¹úµ+ŸÔknÙçî¬a-X»EäQkÛo®,³zqò+×æÆ'ÔÀmhxj 1“SþU¦amf3]ÖúvlÊ?±eÿþvý#nžü¯‰ÐXš‡5þåxEkîÓo!G«Pã÷&*Mb35®ØlìE³W~$­ñøU[uÛºk
?dÜæ+aó±–Ì§µúÈaM¯ &ÔÐNCg‰+¥ä=ÁZSïñ`EŽ÷8Ÿí!òdPîüIÃKp…9*,äH‡Æ„{¿··‰¼G‡5\ûEj<¬DÍÝjÍû‘	‘Hl‘
É"`cöìõØg-QÖ" ídµˆ†ý\(UÍAMœ–0Ú-þÁ0bK©}ÈŠÌæ˜&d{_+GŸ„JÛûï¶	ÓÂ£4ˆ)’lÂJÌX;‘±ÜóÐb»öA„Q<Òcé¯“K#a¹ŒÆ8lâL¹ÆüDæØ©Ó‰ÛÔz`#¬1¨N•«jRÔPÏ„fHhUòåãXïÏÖ2×¸p¾X,õX»³ Ö\][óÉ]r/
¥Ôn-Rç{Øâ-‹I?¶8ñ#HÝàßHÏ0‹§0ÌòœG…¥4úËÔ–èÄÿÊû2“y¤µf1m-$GÙù”Ä;1MH…4XcÞÅ‚!¤ÅjXcpko³¦r¸£îPÅwÈ!šÚÉ¾8‰!$œö³7þÉíûYá5OyDFch™ÀâšLFvÛxãRõW{ Û¿»UzYup“²ÖÛ`-†éˆI¤N  ‰Ðÿ`{ó9êY™Ñ—Gºz†2¯tÅ2~¢ŽKüÖ"mMœßÅßl
›|*;è¡>×3Õsèã)`í#U­½¸våÊ•'Ö^ð4HyA^.ÎÎÎ‹—/Ï´Ìé±Ö0.Q,v¬	¼ÌÜïC)´-¦áð8.hã¨+3ÎwåŠ…à›$9³ÙˆÍŽ=ùQ È©¤®\Y#[ï®;¹•©[Ò^ämìEØˆÕž[†µåXŽûÅ»_etZS­Íh9wzeküIÉæØ’ubKå°æñX9¬ÍéöxL[;.Ÿ®Ë÷çMùWTYk5œÝð‘Ê©¼îŽuMä—Ð¤yÇmäK¦cP¬2@°ü=wöìÜõã‹—Î-ªhíÍ¿“}?¬FHZC[{é¥Ã'ÞsZSä>ZÃ¶|jšR¤3¢4£5fZ{ÎÖxÈSd@Y‘=­ý«ò­¸I`;ÒœïéÇz·£~P¿ùñÕÅÏÞ˜Ÿ¿ñã§¾¼}}’²µ§íÍrÃƒ5žÏÅ5!QÒ`'÷ávÕiQ{Í€®ØÜ¯ðq=X+¬yý9CÂ·ƒœV0·J¶ùêÕ¦šbþîõJ0*Í©rMÍ¾d	é±šâ©¿åº“†]X‡Þq ­ÕòkçŒë\Aã™›Î[Ì:$koÉbÄN‡(}£{B#ˆ§µµ±nmÉª­ZKk€µdçV¡vu„3JÑrY.Ã&×P]Ý 
µl%èkt`Ë0µQ²–Å;n%^!ÕõÖŠÖxçv³eØ0¬‘i~Ð×Fnžß·Pm)–õõkÁ3¢A®ZÆ¶TËÄÀz`[[gßæáÊÙ¶ï·l&8ÃÄÓ ™Ð±ÃÙÉ¿eäa^ýÔ¬=O>,?Å&® g•ß—®pàr¶Ùo‡a5…çœá‹ØÂÙìc®¢.qÂ
²QkDÉà#ÂšÎÛL¨'+¬€Öxô:¸±ãåa4L—–Ú©ÉÈ¿dÝ‚!ê›ùA†‰x‚Ÿüúßí- ¨[(Z;·XÃÀRKxÍâ4KkgÉ¼rEî"ggÖ4œ©u-­E^cç ¡5¥@Bkÿ=QÕ¥½Êè³øøP«?"§±Ä‘?DjáÁï”0Ùâ½˜ÆDä5#5_|„’æ45=€8ÖpK³YÙ†(Í—Ø=Ë½%E¼w–l‚]\òx}<“ÍÕÔXO¶âõÁVzáz]¤ôÂ9*c+lI¶`Óšb/XëÊ™µ_V·$ÆÖToÑçvÝÕÖn¾”µX³Æ´ÎàÞ—‘šâÍ•¡‘Œ»gùd§ÝôÑ³#µçîIh¯0ÇÇðÅ%H®´÷` k!NÓ†Ð‘KhÐ—[ˆ°0mÍªy"!ŸE­Ÿµ¡¾„!]çL¦Vlº„ÆÊñ,óš(ˆ–Ür…t/åC>5¸Î¾)ž »Wu©ÀšùA
ÖptÔFÒÙn¡IŽ»-)’ØöÐ÷7šÞ&|#è¾&ÓþÐÛ]7ôl~>‚ÔÓ›	ò½]±_EŸ+Jøû,XƒQÜ’?ÞÀš:bb/òò¾…âô” ;ˆ†·G³ÞKHü’ÄFuSei²fúf”975¬}<uÈam ©¸uÿ„%Yâyùü‘ù*N]®há3:LM?s7Ñ 0)bJÆMÒ‡ºŒ9)h³B6’ˆ6¶ázÎÂsklB.dUs« MM½‹÷(ktZ³å–™^È¦ê–‚µà.«-+kË±÷wÿoNÿ/{#äÞjçnÍÌ &#•dBfkÜ!ùc”¹üUeí ‹ÃÚ5dùk© gV³¦Û{Ã`-Ï%Žkºã~¥?’õhÐæê2ÏÀ/¿½­C÷¿€jr2ÚÙ„(®öÜâŸ.Ü™½ ¥þ±cGÖHj¸ˆãÇ·Ö<R°†“þ!yBNO:Ãœ¼úuùÌaM1ž™}ÏŠÍCã=lCb8êÝäyfªïÆÕÓÏÝX<võÜcÿjòöÎÞó£åY"$îýkvS`÷ñ¡ÎÚZÞ™›Q cšô.kŒÍ½Qé Ê±›07µîË}Ô*|ÓkAwÀ$äCC*ëHd«ÒÉ­3fëÕ5áœ<™a:—xÍD6Byzú8Ù\!ñsñ0< 
‚°ÃÆÁ3 #²Ak6"ÂZùÎó!·omc(kHÐ¶}+ð¬µöµ:˜¨EXcë³
n¶v”·Õ°Ñ'	®«©bJµš\e¦qôF>$¶þÕõølXÛH96Tf¸ÆíßîÍßåÎ`Íbtaô ½˜n.ðjRÖÔ`@O”ÍpGØkÙ¬îØÛ±ÆÙÑ×3=665±GHhžáÏ# ­ÖtPsG~B:&ÁÏ!P/ÊdØak†#Ð€HþÉO½×îQÔ„ž“B¶Îö¦Þ(YÙ¬ÁšGBa÷d;Ú¬ö6¯HŽ±¡En	ðöjÚaŽÖ€â´Rñe‘üøÔ¶Ø Õ_Â&Ë|(=ÖáIo5‚ÿNnpÛ¹+3tzÖŒÖÜc„Õ`Íõ´YXr5@mv›fk/#–™¶æ}Öî&5m!	’+Ô¼\Í•5 -,Ÿ½úê«Ÿ}Æ¢ø°ìac´°ñíCˆÕÞ×ã“? ¬}ÂL®½ÿ	‹á‘ìA4¶p+CÐŒ{ƒ¶?jÿGBz¤ŽmpíÏ!/ã2 »w‰_ª¯ehñ+áÖÒ![ª€-öU“U]½¾¢.šéÍ´Î™Ã¸¶>Uæ
…-ÙêeUz¤$dœ!åÈÇŠèkáO@õ.8l_¬Y»GY³tæÊ7WÀ—Ò­)Àš;òûPt”¶Øv	+‚Z…“;_¯c†ì	a¡IS0Ô(M„¾ØM<qXã´÷ÄfpŒË†¯÷3z†ÈmJ–gÊ2åÙ$0&áªlicƒ5êÔ,z)YC×ã‰°ÿ€Ô˜éîGçÓ¨À°öäç¿°ÆØ,n
‰Z¶Óöo|ÐÜC<)X{çÇÝ ›ø3”¯½ñÁ@Y`5õàyÝ-e° ¬ÈÈkîzìw»TãÊªÔ6Ø„8xø¤ÆÞ`íhÒ{ôòYûŠPPª“eµH˜áf]ôñ®ž¯šbÐšxÇTñ·|ŠÛº/«ÙÚ{tZ;H9ó¯ˆÝy{ôòüüíÛ§ŽÌ/¤RúãßNe2¦ƒ9¨¾€4?Ò‹ëd3¿Ð‚×¶‘]bèhN’nÛï¡Q³ I¨­e!öY‹Ukl­Çäµì=¬VåÝ°ÙŠÖ–am9–ã¾±ƒüßÿèvk*á_Ÿ°Ún	™“ÅRV^[Ö2¬Å¿ AZ‹°öÌ\¼½úíM4Ûæi}É¿ÏõïØúH…L·7uÖAl²ÑõžìÏ>]§ékˆ?ÆŠ¤ àôãÎßÔ.üéO_óÔ<ÊÚ‘¡“ü~û z­éï²,FÎÀjÄ‹/NM³SÓµÖñ×%§É£_*›Km­Cª\ÃrU³!]ÏÐ‘èmT³uÅ³ïÜ™¼~uñøw®;6ÿ«ùÛGvòzj½ì´ö‘÷Z#H»”ËÈ´
ÂdþA$À…T!åª‡ÝÇù´ó¯P>¿>,uj,á~68(Þ¢Uú£Ò Ê–ÔˆÊ2ÞíwÒñšEk*W­hàFçk†ÜÇk¸‹ nzÝîþVýRÖ%@n/Âw–ä4ÆpõFÕjJdut 0^aMÛ(¨Ù~ëÖ-ÚyþcÌ¶HË’É­*Ñ	­ùN{-?kÇÀšEfmNõi(ÖrÅZö4È¶ÞkÀÚ†g®’‹ß,F`6ÁÚ“·kî0BÝÚÊú›çÑ €µLŽ¯D¢“ió€º=4 ¯e{¦‰íÍùÖ¾MSÓcS¹áýo½µìÖ~(üËC½žÎÀk®—)[ÒŽeé^#"6´7³p‘¦)Wášñà&p…l°·™R+h'¬rÍÊ9±ûµæã ÌEDìÀ¥ÌÄ«"ÐýÌìú9H^ÏzM{¥³=\°VÂ2ûŠ0fýMZkzZ[e‚l4[ÃòÇ‹Õ Ól“y\¹rI^ÀYoçu7ÈÙYÒ ý¡¥AÞËkZEj
ÊÕh-ª] Ø¾úÙ«ò€Õ~°Å‡0-¬¶‘ Á.(kÄ¢o„k¢5ŽoFmÌTcá‡HlZBll´srSüšAˆO‘…`\N]K-åûò«"¨ùA•‹kgÇÊH,2ZÙôW‡Õ9.›ÕÉ[¤Ú¨r}{»ò,H¿­P’ª† ³¬²Ü2Êùh`+áYZ«Z³rµr7Èâ\ô+	öÄlYlYMQ—HfLÈN$V©ÿ,¸Ìg5L3+ÙÍ!«ÖÜ[?	'5º,äAVÕYú.ÖìuÃšŸpƒÿÚÀnÐšCPMrš…ÌHø.Õ„X­à´¦#ã2MÖ
Èkù¬ïc9ëúQªÏ
;ÖÄk²ƒd•?¥iŠGÉ<)r7‡¿ùÛHvÛÍU»?X§—tf4K[k£…ûXÌ„Œ?>w­<ü-üA_£EßþïkG¬,,ŒXQYfH2—J½ø5é	‰ÊRÍÔ§¹úia nº(°–ÉL}A’‹ñù.nyë~`Í_`§
â./PH1dr&›šË\‘ëR›mé¹î0âl¦	G09ß8É¡àµ¶‚gŒ¹ÈÃÈ¾äÜÁ¿¦˜óìGG5B;æ[3#ÔT„÷Z¼Ï²È˜iQLÇpT#ž+SÖþõ7–c9–ã~°ƒüG†üF¬¦„HŠÕNç9X?!ZKJ½±‰¬õÝ©£8âÖÊxwõj5;Žj}Õ0~Ìçó‰î–ïèÔ¼ŠÖ:;óUø>bDh6ýœÜ±f³Yá8uZóR5v E€5oé–Ngöêéù?-^'RÝª¯Ò¦š?êæ,ñõß£×Ú†t.3„”´FÕ¬öÅ¡´!Ù‡Àb¬†ñ>¬ÆüD¾¹çÅÞûèÌ8nÿãêÌö:Õmã/6œ½º¸xêÔñÅ;WO?òfp'™—HyŠdß«Yà@i»'ÐÃÀ-T¯‚RM,xK¼÷áØ'm4æÆiå
^šÀâ•â¦¼©}5âK·™6CZœ¬¹Ýˆ(ç&/
Ä½­WÔ‚h„üùåó(ÐåE¥©ñít;‘Né˜ÌaÞOæÖÚ{qÙ [;­?O:­E‰‹c&¤ý@›¬µuniBP`\WcÈôÖ¾>nnÕò`ÕBñÃ(°ùN|–õA¥ä82	,“©NHÅÒ$5®çvkk±ixfT&"Ö¨Y³*ËƒÔ)âÀèÓ£×VæŠ×ŠÂ@­Q‘Ëa[2€õãeæ¹´>0ýÄÖ­›Ç††°ƒlÝºe¿Áš!˜Ù÷ÿ\{FALÔÈ„3uÉÖ€•hêÏw¸{§‡hÝí®Çu‚a®Xvö›â–Dâ?ÂÆ"ÔJñy-X*ší‡H†%‹6#œ‹n"vâ$KL•,ûB^Œ#Ék‚5‘^5ÙÝó½=„#W„ˆ2œv:;cc²"Xûëš 4ìš 5âq³î—Í£`f»¢iïô¦ØRÖäÞO`92;;+LsÛ~­Žk^±¤5vAX;fÂš{õFjlPÔXÄi¯þî³ßýNCöÚÚŽ5†ƒÛ´×öÚÅyI|ÂØ56€¼œ±g‚a‰kaÃC¼vDÚbêbP>íÛ8(»(¢Ù×F¹|G8~}½²ÆÐ6¾ø¸­Ê3.¦|DŠÁdØ[5Ï†Tå´¿=NU$öY¼(]ÃrAŠ#´ÆÌ ùRyŸ5ô;¢¯qm.jjÚ„¡`ÍøH!übLù´ð®”÷¨Ë¥1ÉI‘gÚ<%Ý¶_ÀfO'j3Î’Y£‚sÒlÀ´5ÆfËS­Ø,8¬­`$SB¥ÑšfVˆÌüYLs>…jùØÏ%µjpYA´Æ¡ÛC
^Ì¦ùÂ Yè‹ŸžÖ˜¢ ŒkPù¸e SÏ.RsXCZÓFÒZÒMm7+Zš#w?úà_=¤½”5Imô|¼˜ i#jŸ+BnÑß˜—fW&­	ÖDkÕ)>»«°ÆÊ ’
-1ÕCèÈÈäå™!JÕòþ»Ò/ª™4ÄV†ÍrY¬pØ¶H@Œ1”™KM}ñÅ¡éD\SášÃš^á·tf}úÓ‹·yvjÖ^yeòr¦‚P9ˆþãËMd 2/Zƒ	Ù“:¬eˆ	TßÄæ‘üHíÜ:Ä?À«ÍƒiB³Ì«Ú.5÷‡l†>åFcOìÐhGðí·-‡5ÅÛáa¨¶kË±÷Ãˆ`í7dAZ>ÑwNŸÖêÍ±3k2soÏUâÚ—­4ûþT†ôƒ{ì KÊüÑk5ºF“-Ö ouyY²cÿŽtÞ·€µ~]«Œ²NV!¦^p`º³M^„nwh‚4 ¢$­1¡¨®vé,«ßn=»ˆß.†Äüü±c·/_!rIÞtÆ–´60`vZ”þØ¬PÂ×ëòÚð‰Lpí£÷^?óúG&°…|ý=hKNHƒkEs›y‡·~¼á»úÎ©/“Z5}iíb©×Úck¨k
á¡v?mê–ïÇIkU-=­»Wû{U~rÁC‰þVs­…ñ Sæ?Âá ²ícH¢_LWµw‹Ò¬Œ­ÀŒ“ÒšÒù:NYÜÃõsCg“m$Zw'?I­‚Æì…	‡µþ~IkQ&@fÚ¹$îýÈ˜]M´øŒ‘Ç]Òš÷WkÞâ%ARê¥7$[kV°f%i¬lc$s\e#LÀ–b¨äÖÏÊ$ÚZãÚšµÈlÕ¹Ä5©}Z‚µÇ€5ÅQ·oôé‹ŠÅ‹¯jŠÕÀ7ÐïéÙÁ´‰H¾gX¹Ó›öoïÃŠ,3>5®†ý‹ö¿&X#€5mD_[½[DP2ë"›Ž`:tå¼ŸâÜê k.›aú"Xóæjýlt “Z£Îf°Oô4”º¥ùâ TÖ¨Ú ,˜]žlü€*bZ2àÅörÄÚdb¿Œ¹Böò!þžðœœL@|³ƒ{™PÐ¸‚JÖšÖ)²	UYG°°vÍÌ…µ³Þ[aðvöå³rƒD`³|Èón0R^±Â™-²š+kÇêÕŒÔx¸ªf’Úïô`¢iOÖŒÔ ¶{â<|áµIi[">)[ØHZ³‘+jå–9³±Æ‡‚Ý½0µ$\Å£°ÿ‡ÓÚ;KRÚš{¦ÐßÖTÜk5x¼†
1"¶ŸNñXŠÕô›3Y¹Ãø&pÓDÆ#W¼)Z+æŠOÞÜf°öm8Mk­©XmWñÊ•+ë«Öóÿ·Qä±¨¯Y™#‚	c÷lÍ»°fé’•LÙ‘j×ªLãºÐ›¨•‚e°– XÃZâîot–¨nÌ°õë¬Óžkì¬Í©¸-ú?h¦Òé€C†+ 5ïš·f×6ñWÛ=ePÏh‹=¨`ÂªŸgå[èìè.ì)t´ PƒÖÕ¬1öçoüŒÝn·~|„kdCR©&vûæƒV¾f°öÁ:}§¼žÄ»=ŠÔ„»‚¿ˆpÑ…µü£Øªh[M±P]m¿"vZs+HÁÚH1³0ryaaFlÓ¬ßUÊ³žc(Njö
Dû+[i†¢øYg§»*6ÿTqÈPM¬æ°vâ%-^¸øénß·±/yyvö•É‘…–
Eª²+ƒ¤}:`“ü¦½
-`Måp³ck!t…ÁF#Í–ðèDf;':ƒ8‘_rÎÈN'šQÞŠ_y§uÐ!<2Sq«ÕñP`/’ko×þÍ7–c9–ã¾pQ#¡áÊÚ;£µ5°š¢2ëêØÌÂÌÝÞý‰:oqð[×Ž½vøZc}_k°VWk¦¥aÓŸv—dŠÓý´ÄÔXûw€
Ð™ä¶N=ŽûÓýº]MlFQU·”5NtÞˆÚ~^ƒý;ÇoÔéƒ5é´[£ÓÚ¢>=O,F”¬™ÎõbfB°fŒvfx„b«©`êçÏÎÐeMbmœQb¤¤7Íë ‘­µg``fþmÝ]Ï“åäÈ‰K±O8«)rÿgd32Ö&-ª5’=Ü¼öòVXSÚJ!µ#Cbˆ'¿hJÚš	mä4rÚŠÁÓý •n‚5ê×
 ‡VÖ‹àÁ—ëyÐî”sç‰“ƒšƒÆ¸d5’„Š	k²÷wÖêt›ÓZ”ËÜ­õžîjfùZIL#D(1BÃµÍ`M€µ¶ýÛÛÈƒ„Õ€µ¾®êÓÌÆÙ6†Mí‚æ²Ù¥ÙLe%LåÆý5lÖ°Az«„ºVVW/è&|ÑQí(`í ÂÚ­'‰Ñ‹£•5HkØ‘¬l\)¾C™£&F„˜óÞ4­"µ†)vo“5´yûÖý[:Û·l§6«²5%ŽE¬1i‡RÕäÝÿóövå|x&·‘ HBazMÙª½ÝaOpýºÄöÅJØJZf4	IÔ² ®éX3Ñà#2\ÚbÅšFbµiø5Ý6Ró”zÉpFZ¤1ìº¬Ù«±
ÖHŒÔim'£Ò¦¬èx#·L{W¨ÖD*e¯©jÏ™¼ö¬+k²ºÚéõ—ØlÑDh"5)l”®7Hdµ¨¬±”Ðš»@:©EÈMU“¤æ¤F°!¦…½,K„³«›/K†ƒZ|hÑfÉ0^êš->
GÿRðúÿ µ$r)[‘5k‚ž67—ŒæëMR‹y
žÄdÑaý=a°V™2HRñt«é- sÈT"%Pc­É	rWW sXópb‹EkÒÞnÂiU©¤EZ`´00c­iÛÏøÖgŒ¯¸Â‹Údd™%Gu®¥AŒpåXæé›t²¶c«t3€Qx~¤¡“.0ŸøI°ÆAH¡Ô)àL¡#¿Q$ÞvEÚO†$HC$êÄtžËÅ‚ó¡Çºït÷û³k£ï–Û9ŒmëH„Ö,ï~¬F ¶ŸQ”æ®"QéÚ#îù¨5`ÛMä^»‹ò¼îkÝFkëö–ý`YÑZ¾ÙFÖn­«qÛ¶Ã šöîIPw<zàé/_©Z39YìjNW‰Ö°
5ÝU^f‹òÚB•šuÃ£U6F4šLÍ¥ºæÆZ[¦Aµ/È¨!H„$0 ¬}W/ñ)qûÓÑ]ç_&ÑòÈäV^¥Ø•CSS‘${0Œ…­1MðŠ\°®ž™ôÆ…€—™üÖÂ¶µBù”ÍJ{°æŽ‘ ÝÌHÖ­Y&äcöÁø-ÉjJ‚Œ+Ö\X{N¨¶kË±÷Ã¬&XƒÙ’LÈC59Œ¼}nnNy¹Ê
"µ ´Â¯­I˜WÉÚÁ£øAÝVS]D<âH8XÀWŒYÔ¾S½$:X±abGŸXMð&oHåŠ¡·™±ˆ¨¢‡<Ñ‰îw[\BR{;ý6¬6»xýô¼¸i^©NÀßï>»}|ï·ÐÚ@u]¤MORü”ÇØ‰×&Îô´kgÆÖ¬ìl‚Š6´5¦Îô`<òÑ‹@]kkÏ‹×®Ï¿ðå—ÐñÖx=pí6P Z{ì½om{Fœæ°ÖÞ>mÚÚ[Ê{”’Zá)ë°Æ;×’{ó ¬¹
êjÇÆjvG-0Õoy‘«ýFWKÈžÄ²ÉŽTZ‹x[5?9€°wP}ÜÖI‘²#?HeI¢¯)åQ¾"+Ø¯Ã^·ÿR=kùçÓùN“Ö¸ ‘Ë¤§±óöjl5a#¶u%T{-Â3D_ª­G›’ ›[¶nÙÚÒÚ××âý!í1Ç¶ŠÎäÉž± ­&+WE¦&“ÅÒÇœ\YßP¿–’ ëWV6p†ÖÐÔ@5ö'µGå/¬a$§UÖoØPWÙM5_ßØ8Dõƒ¨¬‡^k›¶oš›ŸÞ¼u?;Þ8o·ìN0mµ
×~ô#þÉmM’Í<Rù¢MkRÛØQ‰&XkäÚTÈ
|1åô+Ö4 £M9Kœ5æ]Ì-%2Àš:­%D Z‰ªÆL”Öü„G¼Ð@Náó¼ |¥N×(_14e}¹ýû ÖøÖPÍÌÔ¿xOé¥Y•ê(X{8y’ÂÞøŠz:ÁšzóòÚª[{î‡{ötj`šâÝ¦ºo?q	?‘³`{óƒdEBcÚÝEðyöWî©í‘ÿÄâÕj¬´Y‹ØVRÖ%¬-&¬¦"5dµ’¦V×¢ÂÆ¦œÔ"±…Ë×G9³iY
×"²•?ÕÂè/NkKk.ž˜ÑÝÚeµŠõskà´õê¦æçpƒ$‚ŒsÔR¶ÿjxêšs¾"ø÷³…ˆR]‡5¥§AktC¦ÏÚB1WKÖ×¢$“pœì ‹)©^eY`ÀFý­ý¥Cú#M°…%ß¾“«Â•¸$ÿQ’X(hsÑˆUŠ˜£ÁÖ„4]âtæ4§Is‡dÞžI/é&ýDèà,Eør]³"á;¹°ö°Â‰8§Wà´š(‘oHî-þíHß¢ÙæÃ«:DZƒù'ÿéäAþƒB°FV¤Ùˆ ¯‘ô¨†ØHdÞ…ÕÔ@ûg„é UN“kâ?^Ê[½rM„5š¬5÷;-æá¯Ö†îIðdëV<	”ìDU»|äÈºRÆø=2ø šô_!uJ°–¯Ó¯ñPÅf~¤²\ØÜ2õÓ/LZ™rkV¤gZ*-FNS³£¤YŽ+29òŠ$“Éf-ÃQŽÛ‹Zþu¹%²agæ#°›úa3"ãÄcâ28ð](fsSì|Xyš:k¢ô>V‹vnF£¿HTÖ‚k¿¹‹,+kË±÷‘Ãˆœ OCiÏÊom>¹ž!NçàµsogEk™Ü\ªrŽ¿G&cd´ƒ|L[º|Ö”4/$÷­×d§óý;¬©Z>Øoa"XCYã§|õ*Ä7¤6¼Gä4¢ÖÌHhí¥œG!î…ª¹2‘Å¢îÜìâlÕ¹;‹ó‹¯Þ9NÙÚ©ÅyÁUd/ïãþ „®È0Ø÷#­‰Ö¦&@5>d›CfS+µ!PlüÌPÓ~‡5+]£Hm@Í²Û&ZiÆFÆd>ßB•Û$­•.Ð%àÒ Ö¾¼=©ÌKhÍ”µ_nóÎØxN}<¼uóð!yŒü[ùŸwK,A” ÌÞèªúÚËº±ÏƒÓ¸¿9­9®¡­Q¬Æ-"óêl+[³nk «ä6Nkëø	1+XÓvŸdÀìóŽ×kj6Îé­‚ ±‚äç‹*×I—»èj‰¤ûBjÕØJ£ 
Eoú²Øñ`ë\ªÍ§ÖPÔØ4§Zú*=„l.°i[Á’3à”¶Yä<Ò¬­ÝÐˆá>Ãšµõ\Ä¹úÆmP˜Ý„=’îj¼ƒ£h8J¬)næpë'’Öl5|'k©NÛÜµv ¡eó¦Í›6mÚ¾}Óæáé±·v´í›ÞÜ’j¦õ ÿœý¯ýä'ûßzâ­ýªÆÁŒÔ¼vl­•|ý›4'Îrfçl^”9ÚZglAùó[èÀ*Úk†ß¦Ã4ç£/?`"!-”¨yhàÇÑ¼_SÐ—Ÿ,`Ç0¶·^^£—Å%8„1o&Pz™¨Çíq"û{íµc¿¨kï¾ÛdÖÿÔªkÏ=`­½ý‡'j Ù•³—Üc„lH†?¾r~´6{þÊi~“¨Y3Y-¬ÒÔJ®ýÇt5™‹°X±Úù_ŽkŸù²¯E\#Ø~¬‡,¶†íÒÈxÍ÷%™Íƒñ_×¢°¶~i×þ¹ŠjÛUÝU¨VUHmk”9çhMÛ¥"ú‹¤„dˆÛ]: ÝMKJïÊ3ð[Å.¬¦1Œ”³ZHƒ¬N	Övá8YWAWsæâÀ•5½v)KS€L—mt“J¦°¯–¢Z¬1´b6.ÑqÂ$\î¦p¡ÌŽw†L —ŸáØskÕqM’ Ú©Qñ¦!_Rj¦Æ±Er˜„rýÐ
ÜjÅˆ|ú”Uªéµy6kïí* \škW} ­%}Öpùü¿P$-Ô~FcµGÿãxèûß‡Õ@¶ß|ð¸“ºñ:.ª±©¶üDöBkºµéü
ø)ð¯ÔiWS÷ðª9sÂ¼ û0´ö’ÑÚÑk€pg?_•®Ê‹4>­Àg!4/Rcuï|‚*ç±'d‡ÔVÑ5<ÖRñÓ/±š`Í-F¸Ék*ZûT´¦Þ Jµ¤5Lff!—Å¥JO¨½¤]³f’éèh%FœÈ©Ç„Æ]Ô®erãwÏD4+HÔ´C}4à#v^{…w]O?í¬ó KvnRÖ ¹™%+Öžc]VÖ–c9î?;HÞðˆÓ´¡ˆŸžk´ZØŠãk²ç²ÁšWt·¤.KZ+O¥öæú¨GÅš•~KóÛ›fî˜gŽ…ÁM°ÖÌØËÎu2¯‰:2ñ 
ÂqÂmúûÛ%«InóŒH"HkÇ¯§O_]|óMFÇÍ¾_r×í#¯ÈT	Ã?ß¬õY°ï¬Ãj,üé¶<È	¶ÂÙ£×•7I¼Ø€¥„±Úò'µæÚº†þ~þÂâ;‹ÇçO÷ç/Ó»À#“×iÀß{“Ö(“sVÃ«¤§‡·÷‡¨]£3¶\>Sx{rOAözJÄD)ŠêAãM±]WÓU1H _˜öÛX­*À&`5w"éà–¸Ž§‡×ØbêõÀÉ^µ	€xQu*mo_×ÚxË¸°¿ŸÄÈt¾©)Oý`ˆÕNkÖ«Ùlá­j­¬×š¯´~›Åkå´¦ñöTj»&¢u¿¶}}[çœÔ·Ñn)XsBËâÕMÂ‰´8SÖa5²9nh”ÙþJ6|ûµú•Õõ×T˜þÌÑ@kóNïâŽþö…[Jƒ4¼ ¯ÕãKÒXÏWk˜H6e¨QïÞ´il{Û[c0¹›OŒÑam¬¯sû¦'¶·	Äþæ5%D¶	ÀJ°&M¸¶¥Ý{®á÷h°f"$ç.(š‹\Bë5!“U±¼&ŒÙ±wõË®3Xƒå„L2óäZ)F%jrÌŒÙq@¥Èj¾“ˆ–Àc[ìúÂÃY„5!^£:êµk9”‰¿}—¥§‹O½G£Ð_-› ˆ~üÖû®þÌ¨ÙZo/•jÖÿý¹ÖÌªVÂš‡wÁ–u¿d5›å¯Fe-­E\kœvÛ~ÑZðAX#Rû,zü9\[:Ò!-îÙhÿõÂZ|Øfi^‹ek÷(kqø—Œwa,!8ô]Ö*ª4ZÃÖáÍíùÃ%l]Z«PüyLÓê!\RÞ™iÙ‡-Ùê…„å¿qA6W”u¿Ëa-ÚAÞLU•YÜUy—e¿¿VydLƒ¬ˆÄ˜"b²a‡V–&:3F`¬b6˜îsÞƒg?ÓØ‡è¼;öCE!ty•ž…ç f€Ÿ Ì²*]Ÿã”×”¬=eØcÇÞîœN8M«‚‹G(mlEmÞ‘MÍb
[€´ßwˆey†UÍùÚîÏe		†Qª¶ñÆoì¦Hö×ßpãÆ÷ïÿj#>#1ˆ|è›>òùÉÂªÚUÝ|'D´^KËÖÐêÕT”jfåsbÅiB4û4çm†6i+,ƒ³"Û‚²&Vû%1‡¿ô’D6oˆ4úòÓ;GH_YøÎïëêR3XB¶ÊšÒ§IÀhâíºŠ±·þóy+›Ùô7?©hùÉpW‹Ã16ýqPÖ6 k‡ABåAš+ðÅÛ·Gføokáâ‚<†e9šÉ5©±9œüÑd’¤yñ™`ï!;¡Ç³Øfá9â2›™{ Î÷u²ŽLOÆ ­¶oMWÍ<­8@Üéq@ËåbŸ5t5Â5Ñš“šÃÚ¿úÆr,ÇrÜ#­é3ë³7.«AkÆjdAÎLÌ Q k|°duÝgG<2­…8xëÖQŽŸÉzOÓÀjåÉ~dŒ¤™ø3“î$ò|A¸erèoëä¾—O»…¼ê¨¬B“‚µ¦Ä´¿–5Æì…«çN§Ó7ß¤1öŸ.'7ñØ1‰]¯¼‚çßð­ƒÐÚ	ÊÖS¬gXi·ÆçknÛOÈò—ZCk´6™õã*¬±HvJý×ëo¾yçÒ¥ËýýõÉÉ«×¯ÿÏy!iŒMêeð9Aw7êä&¦vôO}üñôkÏwR>–¨(dà™‘ŒC¸•>eµgèg–°â“Ê·_)Àæ kRÝ§ñ%\†&6h:Û:\ÇØ0×úñÑ¡÷È&ëeiub[A‡q†«õÃhí«Û«vÀ%XëÕ†•Ð„æÆ"Úùœï|«êµè×¯`§ný­Í‘ÕÖ€õ­-|¦šÈj*«Ž[‰Ñ´!X«¬få2”6¹ó‡Rµú¸íçjrÂ-N7pÜPYùŒ<ŸY{à…	­I\sX;ú¤•³ìãmÀÅ35G.Xî™ÿs×qsÏ¦
ÔÚžÛŽ¼eÿØØ4õk›:7mÚºu¿ÉhêAÐéæ­¤1E?Ô«Y6F‰Ñz®©ÍÐc=§Äô{²Š%ÿ$É†>Ë4ü-rêà‚RWl¢+¾*b+“Q©N°Q8]xXÃ€pšñW¨9ãù^ß”ù`Fs.SˆÓÊ”·5®¦·šÃÚ»í{÷4™­%k¼ÉxüYÁktí×ÁyÑÚBxŽ¼ÈÉà©G¹ªfc„µØ[9DL‚ôìGÍ6_+¬éÁ€`S‘ÓœÕ´_Z]‹»˜E¶¥¥µHkQYóá_’×Ì·?
k1Hyƒêê»Gª­×UÍÝTç…aÍ–’ÕBdJžj§Ö…!{b8bï¡¹ÅÈÎ_HYŒ¨`0TcùŠ²¶mõjÄ®ê¹õ‰1eˆ ¬iÊÏØ‡$HB%Oœ“„‚5Ü²N‡B® ¬‰å¸7ˆ‡¡ØLmÖ¼¥¨Ð«N‚´‡ÈÅ	iqû×Àh.F sHÃ>;oÖXß{»mç5Ÿ/01X[UPàtõpmÕn^]Pµ¢¡àßJZËÈiÿðÙ;Û˜:Ï3Ïï÷ý°Ÿñ"dyµ22YÇ(çæ˜¡frrÀdhì.ˆ´ÚÇŽëøÇNNÁMšÄ©Nd»MŠœ@Ç`Ú£Føe<Nê¬\EêF‰RÅRò¥+Í*/Òþþ×õÜÜ>µgÔù°Õ*âây¹ŸûyÎžó;ÿëú_j‰ý‡[¯5jÔ~,XûÎßýÝßü·ÿúí0’•ÿ>¼PÑ¬ÉPÄsòEk¤?ê^6àR›'?²±@bËex‘°6ÉdrºÝUæRžŸ½´ùíWÂ(÷S«õ˜eAŽàÜaá|}í•R ¶mËÐ››/}‚Ø¦ÚbªX\¶ý±£$ÝþÂ©ýû÷·m}^¬¶ct‹…ÝãÖÔ79­í9û§wÏÞTÚùtá-ýØ¥@74D^vFgej„üãÑDƒä6ý“k“‡ÿØ¸ÆæD2œÅHd6.	’›	kÐ^b
IÍQ(­¹²Æ1³œ<02[T ¬]	MÖfÌ]äð*¬­Æj|£F&æ‰éß¬)€µáZ=À–š›CYSu·U­½‚ÛaÖ¢¤Å°
_«n½¬Ò"INÏÀi9Ò!	k¼æÉ'á†ÙM8G$Ê"‡r˜÷6k0BO³D5&‰P´vuF»™Ÿ|ù“Û¯	¬ñ9¤&X£ßÃ´>Ö^zjƒ¤µÏiš5)F›‚Ûm¦­¡™‰ÍNó|\C·¡1›VPÊÆ€Ç ÃµýæÖ?-Î÷_¼ºö^¿E|üoÜ¸qŽÎØkhyÖh0™Éwý|rêRïº|å:³‚à6fY!Fm0—*Ç;H{d¨eç€ÚàÓÊH‚Ôe k½ëº$•ñz˜Ì”!ÖhÇ……sÍOÃˆ]L›³I"	Ž½ÉUd@"öÉZDÊPk¾[º¦›5¡eztÙÊœ+jîÝ/EÇ#¯Y¬°Ú
²­h{IS ·&¨FÁWcIQ‚bå18¨ðTHÍ2bâNZcá¼®2¥-…{?ð†FôgÉ`L—Øéþ-T¡•g—ølØ ¬Ëaäõr ·æÁ¿UnÍc
”µ½mß¬®ÈÖŒ\[›J¡Ç¡ÒeÓÊ²ÜÈ'úSS“íÛ·÷ ¤¡îÛ±u°¶£»gŸl-e	‚zÖ„ä<DÈôvj¶‚jh†mRÜ,6™ÂÆ©MðÚýO‹Þ:¤Šu`cã2‰m2*€™àáY«Ób$šY[•ÉÁ¥q…çîPß¬ˆrPg¡hMº®ˆ1@D&úŠwX‹X`Mð“1ãô¦:VoÅ†7Iž"ž™8¬)Ó¦Y%üÛ"U-i„=\pèãçiŠÌ ”µ «±hÚ•7¹‹°ÂjB5¯V¬öÏ|±$».#¾¿·ËH,Zc½—¦í/(Z‹¤¦]¡ºfË_Õ€µeƒ®Â˜58óérÌDj‹ä,2›°›h§¬„|H;=W^_áµ^1ƒñ½Õµ"ä]ÕVÂ(«^2ÆP\^RSÃ)Áš™ŒlX[AOìY§5"1‰ÊšD7Ö¾byžT¬í[t˜(­±×@Ô¬®­­Ïö¡c¨cY©QÞŠ{cì–v‡‚&v«T°G‹ÔŽçHò“²E¿´¤ÙšZ¸Y˜×£´:n[¸ÆtµÐo­08án‘:ë¦#wÙI S™¤µÞºèJ7 åmtôÚPNm8†äþžz5óù1m°ÕnÛ~ZcçÛßþ?þð$€Ç-ÊˆÔ'dÇ-MEkæE©ï¦1
«­£³Zo&G¬[—¬©h-·ÑÒ‘ÖV{ÕaM¨¶çÀk¯½F=5«³éÜ;¶µ	Ö2 m¦,4PÐoEkU§Xí…K÷íjèÞñÂ©ã=;ž¬]êìiü*tÅÞHSžzXóVn{¬-¥õÀ,Müä É] @SÙºŸõ›{ˆ#šþé˜Ì&JÓÚ\Êe¤´BÕ•°fÂèi±bÍwB;‹Óôåf÷Dë~#Õ€µá##7«‚®¦ˆæ"úZUÖVc5¾q#ËóËËjc¤8d.l3øB¶ÔÒ;=‡_Ú>"fÕH¬À² ×–6§ËŠÂJøŽÛQw.ƒƒE7zÉmy"ÑÞºe5.¨X“›D–(ãH’„J«`yÍW–^)Óg€vs[þèöG´Å&9ñË¯¿þòk!INDêR-¼%”¹¡º¿æeÈirÛ®©ö]íã§~õÕ)m£4Y3XkÌãCB75yˆ×kªYCTgÛ>&XCfûíÕÅw~ûò;·o“Quõàò«†ùé¹3Ó¾—(k‚µ@kˆju\BÃ;Ú>H×kŠÇdßhRZkÖ`RÉ\½ìö;¨Û­‹¶¼†ÊÆ­)Îz\ì–ï£•ŸQÌË1ÉÛj&s­Iµßú®uƒ(n\°	IÙ>¼Íè7ÞÚÁK­xÖ»»¬ª©Ž Ã×‰,8ù‡’µ.z6GIöØÒlëq¬ufææº#¬™ªÆ®ÇŠÐ¶ÎiÈk¾)·¹˜YåimSYï•]Q^Ìc +-ÀþýŠ,¬¶¡ººº¤Ëç-KÃ°š‡rJÖó“±½ÄÈÈÞ‘¥lúæµ>õÔ®Ø¨Û4mÜ²°`ÍäÔT{.Ó³µ}h[áz€µ©­MûÄno¼ñPwà)&­«s]‘˜tóH„5MJjƒçêšQÓêÜ¶¿N{½°BlŸŠ)DÈ³=®õ‰N‘jnÎ‘¦l2¨cÎ^vÄÖg"KÝ	MqÚã¤ù8v!/éµÖA@ãØìZX,¶W‹Á¤<!CR¤Ã =’'óéÚva
Ù¬kÔ®MLSDKJö¼’§©UƒÊ-L3äoµ‰iÁš/ÿ#Ö­9¦±°"­ý¹°æF!VcqP»§°wÔØER+Ä5ân\ƒËîFµ¸„µ0b¤öñ+.5`£dí³»òcÄÙ99‹”ÏÚ1f‰åôté+gPºó²5Çv b/`‹œdo|‹Bkm^$÷¿tƒ? ÍäþŸ_Ø{-•Ú,V»gÍšû‹T´€Kþ¸Ì™ß¾ÃŸß~¾cF›ð¨C§5ßø\„6ù]U†úæºY¥D7×Ïl{'¬1cÁ>L)Î´5âteA˜Á <¡§x c6z“ÎÈkÎ$4ß®ôÉ¶gÔe\LOl„µ|¯OE™²9@( -/X{|MU~@Î V2½¦W=úëšOþ-í—läâ/÷ÇÄí;óüáÃoùÝŠ»‘—¦¦4`íñŽÓ<waLbNVz=zíãÛÞ;³äûo¿Š	$¯¯9Gñ©6P{^Û»÷µ/ìNg*sj¨6ÔX%Äå (ôÊãåÚwjwYnÿåËÀKOé}_¼ðÂþ7ö;¬í¥€<dAk|+Kƒ$HÂY¢pmä|CÿÒÍ³KÂ3¹—€jº`NŠÍ£Yš¨76lfÿhRéäœ!Ú¬zÍû°!´	ÖÊÈPŠ F˜”¦+±«™ÕÛ††‹ám–ÞhÚö»²vséf´‰%k|]™YMƒ\Õøæ­	Õk‰ÿÚ„GË´V;7—dg›ÿùNk…ý?V”µëO¹ÁH¼×jõ[ž›‹?‘$÷½¬“f©½½Ü=»[›òÝkU½øCVª:­ÊY­V£)˜"o.RÜôa¦Û/ÏÜ¢[Ò—XŒ,J^ÃRqì´¶gÒŠ!°ùûøGŒ£§mÕÚÛ‡&%«n=ñU?¾üT¦ÁcŸbÒß¯žkX@Ž7fÆaµL#³‚µ1VHnŒ6kãÿpñ_N¿L$™—·~sO°6ß½p€šµ³ÖÞsVc=ºo}Ý(½ÚókðhÄë¥ŒÆÝŒÌ@Z³æ7&§Åì+-¸É¡mèn8ØköI¦½A\f2Œ¤m½üDÔ|M	-VaÝ¯9ËwJš$èrÈ€I^N ™Vk4½ùDÉu0€ÎCÖ¡Ïšµ^6Bca"Òš52Ûö†’žLIC§;Aöd:»;%­57µ›næDæh„5›Šm×l#G´Å]d­úªAjè`éŠ,î"ßR:¬Ø°´´t–Šìë šhMÊñ ÃšüE†Ïïõ8p3MOluÐsQ¢ÐXÂ}šÝÚÞÓ>5–Í1˜Ú…=$—šº·îßß¹½³Ù¨TÍ­Ö5Í6™B8¦9·iû´sšmÂK¦—•ÁZHŠt	ÓÇ„³˜’_ë|VàVgnë#Á%°xM»ÂÐ\´è ÒšNx¨Pn§ÓY"µ%V˜æÈˆ}˜¡âÑ_ køŽè‘u]Q„ƒøxvnB_ƒÒ&Î€g%ª™ähÍFoóîá#QÖœÕî®Ys\³9NŠÖ,d.ò:½Õ^ÿ´§jÄ?›ºÆâ;­1¢ä½ËÖ´Æ¯ÿˆL„ü·¢ ×Ø'²Zü¿ø>‹LV‚BuÏ¨÷µ¼Ìhh«¯µaø=×W¬ÕÃmUŽA;†Ø†NÉ9"Õ`¸/{ª†£ï—­W¶ŒGRÅtGLm(Ö
­YŠä¬ñ0	VÙ›ë ¢obØOGD£‘$djNÁ„7Ï¶§(5«öÞQÍu-ÛW†Ðe¢ÎxxyÛ*4·²R4(ËHDˆÃæÑœxü‹Rô+Ö!>R(k!ãR MtçT	ì„†¶F°lå„R•ÝML£¶Ùå¤jþ|ÿ‡¤?þò_ù¯ÿ‡/ŒFðèGUÃ[äÇ¿üÃ‡'Oúc+¢¶’5þHq³R¾>ÜB²§}¹`‰õÑà ÝåÐÖ*ƒƒ?ÿAeÕo²ìÊõœ5X!	iíÀ±ç^kÁnBZkLÌ5íC_cµÆû._>ž)ë¬Y¼pßÄñã/<¯’µçåÞÿ¹%ÀÚ˜™ümR7œ½yöìÍt?5Ì#[ -PÇéké9~ïÊƒ¬*“¬†Þk°¦d\~õBê¶¬ù‘$Ñ6”’59„UV³UT–ÙN5H4ÊãÙS7G
¤µ»Yí{ÏÏ­”¬U­(k	¯á¹
k«±ß¨¢µß-/OÈºß>È–7$ók¢µ‡5}ˆ$X+ºP(­m±KÊÊð¼#EG,è¹Ö$°F°ÊìÎ™#O]²Õ£A­µ©Õ44]MVç½÷b©è•¦Æi¡Þ\Õ•ùE¥@â0rÛlFè·öÊ+àM.Ö<rKyêåÏkÐÚ¶£““S'FwŒºÇ &1áŒØCä=å¶½ù)BZ?z›¹pÖLG^îgJÛÅa4òÎ×XP
ÖÞ™¾p VFZ{äÈJ$=ÖÞhž2g“ŒõOî\Ó‹Âf>yÜì¨Âv§G·ü"b†¤ß¡9oÞìóV¿€´èoŸq€Ð8aÝRh¸êÂM›òöA¯Î,Ê•$›RòÍ<Á<Ñš—$¶ÁtºEÇk+Ê`À8Æ&–(ªEMm©O£*­±³§[E]ÀZ÷öíÛ­d;ÿ£>…A¹ÂZô…ŒI1ÒqWœ5A5ŒmEV€ÆÂ€C:Zg×>¥¢ñá «Ïk2B~›3ï†9=²÷ÂÚì,þà³|†_Áƒ·Ô€{¤WŽÕã“ÛÚ·^šìïÏ¦v¡­µïÃî«âµK¨†[{H†Ü'_Hk¶V×lþ"ÚH	¶WD´æ­)Û6$?š#‚j)ÿ$¨NtV#p³¡Ú¢{v*Ó µÃškº:²š\+s‘Û´Fr[Aµøpórtf`–\§"¬¡²1Ÿ/\fÎý
w¼mJ0M²€ÚU÷?ëÌfDÎ´3ê)bLfˆ¶Àv=±° ¬…–kà:œ§AjAXƒË|9QM´&¡¾ý‰®&eM¨–°h¦5 Û½üÿÿ˜QmadÜÅ¢5âÞÀ	-î
½E|%þ*V#Ëç¡4÷	)F,#ü(:BrkÕHˆ¬Ÿ+®ç"ÒQ²kÅÈkRµ’ÚæÂôBÛÂZQC	°–7po±öÃ¨JÌZ:šh-UT¼6›]µ€kQY«•Txb&N•ÖûÎ^×ªZ`³"÷}\™˜cÊÍûµuÞã‹6èw%¿°âc¯-ÓÂH”Eè„[í3æaö`0ï¿VÊ¡HOží<³ Iì=§RsœØ@êÁLÀ5ñ‚±ØH7î(œW$RÀ 5Xj°´ª»ÙsQÛÌîŠ1ZX¾îC™÷cøHcl±ÚþûßÓríä¦A¥ÿ¡­ÎúvòCðÄ<hƒøË“¬Ý²±¶¡¡‡¨#ZZ«Ïâ2BA;¥jx‹9Bä³þKäo5¿Áë##ŒÕ€µsšµ
yÖ`Yå"ê÷eð²ïòåýx>Ö.?)Z{eÿþLY«TSŸ5œÀž}‰ïCb¸híÈÙÙ†¥={—n¦RêÄŽMˆó»¿¤üÌÕ†Û’õáÎeS2Ã±
4ÿ<¡ÈÞ=™r–Èha 0ãÑ«‘4HóyØs¯Y+ÈabPó€‹ÅÑ]X++3R3a-AµC«°¶«ñ*ZCX›8øÇƒ*ÔŸV)¸†°–]Öøså`Ö^1Z+Ìƒ<ân²¬Ki°;nx!ücË0ÌY³kŽ3	É!£åªˆ=™súsÍ5X>r„ „°æFóð
Öà5óá¹ìÞY?¶võÖí_ lÀÀF¿êÅ‹¼;;vì¬W‘‘ÿÒK@!tÎ’:¢‚5õ8<­©žMë|=Ö8›m¬™×ˆ¶oBsVÎÆ¶?5ÖOªäùÅŸ¼¾xø·7¼%ORÞYÀ€v®¬9¯IZk"ùBƒ/ÞÒ¬ôÑHÓg“f ¥Z5ÁZÔl#¹iŒz„`Í[b3%'®wX*\‡ˆÚœÜ4`d\Ê‡„óœæ´b®å–Ü,yR*_]+F/ 4…‚ÊØéÐ³A	S óå‹âEß£nx„}ôìÉôÐcÍí•.èYDc41%m×„i>iû…GÖÄiîß¿‘3†DuM?nŽ×²ÕKfñEG;mŒÖˆçŒÜ`5bDq­!5ÛVœ.ç9y–lq‰Œû‡ÒÙªc»¶ŽNöoÈîÐ¶¶·gkúû·uv^ÚwüÅº\46hmÿÖOMâ™'C`,lˆ#«mz‘S,k\ê„Lø¹€ß¦|P…k]„H,V²¸=	´ÖÁA”Ô
aMGŒï¡²ÅÉ’a®îVd²0ÚM$Æü+×°µœÆŽÀZTúh“K÷ˆÉ)=ÂR »vÖ=ñ¨Ò •‹}X…kAéŸœFxÉšN0Í@°F®äUÉf„vžYX±æ=Ö‚q¿ãš£¬&TÒ´	¼Æî.b¨æ¤Öˆkq5Hóåß)[+ü"Dnÿ¾´¿œÏâþ¯‘9¯ôÆÄÔƒ~06œûk£ÖæHTŒ†VåN%pN9­¨ Ö\‰Ù…	EJK&,Šy«qBwêg¥¼4†ip½<úÊûÖ¦S}›¯9«Ý¥¬9¬Í‰æ®aGYQ ÃwöƒxïJ45ÍŽ,ÖŒÑ€ˆÊ•Q™®c`Í(i”zqš{ó¨éÀõ3¦\[ó“3”4â–ýâ>ÐÌ.ÁälÉ·„avmÔÐXY’žmìl–Í%`d.Âp˜=JŒ%5lR6õñ¬¢
{‚R«Q¿¬é'gX×Ú›__÷	ƒìhÿôý]ë›ziÁ#âÛM>ôNÝ½Ü±˜=ðd‘A‡µõkš^ÛLAu­9ÔÂ:È·åëÛK‘Ëª_…Ö^Åró³„~‹´qÅ
HyVÖÎ;w¡¾Hiâ"^›¢L¦¨¬ç¾ýöË¡Øbÿ©SO>yü¸8uí‹/”é°ö¼B~þUR²¦›;°¶ù¥GŽðåbiËÍ¥¥ÙÙ‘¥¾Ùš´`-EÀ`%YJ&çÒú¬ÀrÌ¸ßú¬˜ïgÇ­jœS¡-gô/}­MÄg†ý+‰ 'QÔ(OH{’d>;ò½HkP‹¾VXX›¬FÀjÀZ`5*ÖVÓ Wc5¾qyÓÐÚ¼%B²¬©ÏÚLKKmíDíÜk@Ê¦M”R¯üÒÚõ#×lß-éþw±ZÎiÍS¼u¤Q†È>ýT¦å¹z[)g““? &çþV‚$Hû¸QM×H‚ÍÕ*{óŒ!5ƒ5&æ¦gHÞ^|ýhk¼ûRÀöÖâÏzãðô®ÑÚ#ÖmÖ’„6é-±¿š#rjèôQÄµÓ6e7ÞØH#l
ÕDiÀgkªW“ &¢Ûµ}rhì_ßúè­åÑÑßÿnñ6Òš/ù†Ú3,»Ý÷bÑšî£÷a)mí°OÉØX³d1Ú“R/ O%£= ¾7$¬X#œ5Dž¦iV>ÈâzÖkfè>h-”ù0Tóëx¿/e­‹-ÔŽKÈ·C¶éLÒ5|5ÕJ[{“úÀ5ë!¹ ¨1bLøa^¾º²–Ì•ÏþBhƒÒ¼½Zs¤68Úw"°õ`ÛŸÉ4F|û­ÝÕ*B&$}ÕÀ4,UXP¹q´Ë~XËÒàzV4&mõ,FïkGkÂiëÞóŒYY›ºIŠ5ÙihÌ5Ôl‘	ØØ®mc0ý”`mT°V”ÙVÓŸmÈlÝ·NØÍûÄjü÷J“‹ˆXÍlú%­­onek´æ‹QMAf°f¸¬™/$Nlü~¦°Ùj§7®US$5ã3OPôûh©-	Faí®ÄÇ;¯cõË’ÃCcVwF#6ïÄ&i-ÂÜÃ»õd¬±¾-Í×¼+Jp‚µ:üúë´Ö„jøpøpâéé2€d§Öýî<ÂÁ4(gãwîè³¦Õ-&Az?lÏ$(n´¦H6€_÷Žÿ¿î˜,ì Ý›ÐþBS"B™mþˆ«ÈcµµõÀ+A×4§6M•ÕË¼•ë¯=ÈVUÌ–µ%2ÑÑ<)øRDXc*ú@†‘GzF1ºÐFéš7¶GRÍÆEÜ¢ªûÖöÍ®½v·°aíÚ‚ýh}º	EZóá?•3ÔjPæó¬‰ñ#“v½_@A™Â+Þ´²$˜Æ&ôÁv«Õ›…¦jœáÑˆj:V°åÈšÔ0P¢¢±˜Ù‚0ÍÎ;e3	¿…ØÌ+<ÒÃ¸<ÂšÜ½ÊÏ®Ñ;Ç}…yuèÌsçÍäÌÙ+Ig´–Öà$Äö‹:þ áòôÉûùtµ´¹µÒlC¸êñÝ÷ï|@O‚O? æ¡tGxÖ?ã`n ¹s{NŠ ÑÛÝËÉ¡ª¹u•™¡µ¯Æ hÍl{•y{âÜ„5Ü ‹ü!‚µ*ü ÷]~ÿÉ¦NÞ]ìèyèøå÷/“
ù$¤2!Ï'°¦›ph‰­’µgŸýà½÷ŽÖžSmóõ§ž~fVo}øÇÆ*7HµWãŸ“©l›´4˜ÌÚZ'ØÆ>ÙÖ¹Ä^õ±´Èn,¥iÞø ¤Ù|R0)øk,hÅ6ßf)"©ÁjŠÙ`­*ÂšÂQÍIÍjŸµÕXo¬-'Á›"buM°6Ó2ÃÈÌ®ìÏœæÎ_<vo‹ke÷‚5*Õ8ö»áŠ‡–m¤£å„	ÍÔva=bZ[+^¸^(ý”ƒÞÖHå‹Ñë½±WZc—V^¹õdµ×?úèö­^ÿõ¯i»öó«‹ï~í°† ¢nk–çÈjù@ž`Ö¾:zúÄÑZNsk~6c•9òiƒo½ôi?'HoGX“²Ö?®²·©»ÆN¿|qqñÂ…w~{p™fÜr/x÷Æ+ï&ÒšÕ­}¥µ©Qì ·Ž~þùó¸µChô©Âï¤Lò(—^S#a˜u¾Vê#ƒékÂ°®M0*nSk5Ï‘SA÷Ó8–p‡µOMÍbpJ[c°Ñ™ÉúÉ®5y“làƒ "o€P4Uù”×¯!W–çe&o’$Hí;mNúšOk!ü@Ix-FÁñC¾65ÁjÝÛÝ´ßìû·oíiÈÙ˜vXc+1ÍÝE´Ä¶sxõ‹ãRrkL!ÄqŸ¬À¿¿<ÀZiŒ+äUR½422lÿø|VŒFQÁÚƒ¯Ò€/5YAÞékH×l©
ªÖ 3¬eÉ|Ú¶Kvý´ÚkŸÝUÔ>º";´¯¹iGSþêˆM$¢Y3YB6à&S„Þ²n¡¬“'À\¤Èæî¦§«xEÝ/êÕEX‹þšàŒo—ØBI›ˆÉÚYf+4	ûB†J.‰ÉŠ~YÌ°Â&yk,‡øµºüa`-bXØk iíà¹¥óòŸEX{â	¤5ë¶öèáÃk‡«‘©¿K€ÙAç3Æ¸î613mVKP-(kÉÂi-f/â´¦kŠÀ\¿’jö+¾¢dæƒ,Î
¢0Óñ£¸/ˆØ
ûNVû_0v¾„¸uM•í=T6±ü¥ê˜mþã¢ÚgË}À(Æ@c_‡£È¬PÑ˜-÷µˆ%Æl%õfûÓªÈœ¤Ö­¼Ä -cbÑ£9F…åÎé,ZE(YÃVO}?½±%Fn¼Ù×PNµX²öª-v”­-˜Á²?j µd»®iÏ¬Ù¼ªÒœÕ±±,A™'üV½™$&V30óžj	–ùŽMUÓ±hÍaÍÕ4è†£Dp“†æP&—I{œ9‰°¸·[]ÊÐ#!·k>«LL]mÆÜ2 7MªxNkÍÝuÖÉçEkœyÀ[ó=ü*UÔ¼îñÁM'ïèàæÕ«›o3íb¸‰èî?É†Ë¹Cq¨¨Á{rðüfWp¾¹©©wfo{{/Ïÿ ªZÎÌûKÓ‰c²‹°¶wØXí‰çè QVYf@T¤ê¾L¦§óøûï¿ùTO®óøŽãÇ/ˆk¢5í«©\M¬öUkŸö«dmóÛÈ½Yßg©†2æá¥%6øL^ŽZ­0²?…Ê+CfÃZÄ’ M^u\+2¬K›æ›Êyßkç6íù²dÊ2ù’ kL
ÛŒöä(i–%!M2Œ™´p-s’ÕFœ/-«MGeVûseíà*¬­Æj|“:­-’Ö&æÓêkT?#$þý--mþQR–?Q2ƒü3Z‹¸¦ñÒÚÂñØH'‡”V‰]¿Ý²3¸‰HEënUÆ#y2ºhv‘<S¥àC³…v¢³ÈjPD8vÛãå×qû£_üzqyd»­æØç¿þzâ­úY2àÞ³nk—ÃšºbO²Û,FÇk:?TU:ô&JIjŽ-ïgHEo;míÙNk7~áÖOn¼ó#õâVo·c¯ø·#áŽø”o·bytjr{þÒQhm“ºSÌÚí.(h V~wdUJ[§"ð‡5&ÖÁfäKbø–q1÷ç¼U¬Ik“¸Â@õ]ë,.¿¦ëdôÆÊÚD`:§u ¦­G¼Z•5’kP¨€²PeÛœÁÓ<$µÅº´§ +<|dµÀÕ´DfãÁv(M¤¦è´êµ"mbZÐÒùA¬UTØÞÇºÚa­&Ò!U©&XSb$ÁqyÅZÖlõS#kdÓ\‡Õ„íøŒy–âšXX+©˜%—*U3»¡¼bcº$URÜˆÍP‡vµoêÙ:5‰_g&oûÖÑí¹¢’ìØŽfˆÛþÖ&þkzC<ÖŠÇÈu9šÉ¥¹·¬U/…U­4Qeý‹MM\ qÍU2]œÐ—
×¢žÉDbîbÄm¿NÏHµIÍÊZÔv¶1‘ì.Xt¤ðA€:?4,¶ÅŽ
›[öèhNbw«í6†‹°V@ˆ+œGö¦?”¦ÂX­…†ž	Iólµ1‰Mè†¸6{÷ö˜‘ÌG7HgµÐj-Jk¡d¸íIÄgxáÊ
÷3bù*±Ìö3ö‹Wç?[¼ºüÙÕÅÅÅe6L%±¨#VÂgôp.3ÒÞbyÙ.aÿÇ?Ú¡.´âÄòï–	÷;V¾–µ]fÏ‹úYüi8Ëy	.±Iÿ–\åûs~ °ýòUª‘Ù³e£˜‡|µcïNš:&ôÒjËëºìÁ3É¹þT×ÖW•¡›ÕV•µ@k-’ØA-vÃ.­*7z+çŠZÛÈK¤øbºBïGkIA›±ÜIkäHÆÒfö„ÆfDH'+aÃÕ	hö¸„sétõµYF®]ûîµÂ–Øò¦ ¬¡»õé™Up¤:‹ÈjÌ†–èºK±!ØkÆ=Åk\îÖ(~]aá›öâ:§5=48?ZÑšöë;§'!“øE×[»4“ÕìÑ>Í•~Öª“|X·F•f^‰¦à8Òš'?†!í°]†S"$Q¹N>ýî	ÃaºÏ!ý¥öJX¬=¾³«Xsí¬!äó¹àÀ:ùõ"É¬‘IÏkFIðìÎgŒwAkãX:<DÏÜÓÞ£ˆOÆ°„ØV¨dR‹¬F1ÙuÙ‹¼–k7ŽÝxåÂùªR¹&6fx™Z+«zŽCj—Y;[ßxòøŽûNk¬O^>E2$‘Žj÷k‰°Æ]X‰4ýÕo~úÒÛo¿¤"	+Ž#Iè1J:®£±eU«–&Jæì>“*QRäXK­YùYã`Âd‘ççÚ;§´èS‰)äPÔÛ|¢HÅˆn	€²Æiž'<ŸjƒÈöXÜ	jÃg…jŠcçJ¯ÌÎ®°_RÕlY‰‰UX[ÕøfIkórð÷Ð›LHëµ–jiATK³7\¼x­yHdSò@ÉÝHæaƒäæèÊšŽ4Ã²UÑ`­¹¹~À½¿Z¬qïÐ’„áQÉ$ÖÆ4±°m™¿EbÓ?þº¶jbñÖmðé6Ÿ£¬ÉÀ|¬O¡3¶bðrX»otûœf§3 Î*Vû€¦éÌŽýÞ#@žþæŸ¸´ojù-ä¼¯ùf?Qs·w½ëtøž6teÍ w5åGyÜWûx}R%F¸ìïÄ;«‹{¢×›³×Àµãcilx@bŠÌµ»ÑPº¬d«Öº€5e:ò<:>ÉsJl“=?èFçdA-g:ò*rÊ«þO4ÇØpc‡v)Kÿ|žWU°f.“lõ¦Ãî"–á)Â.ÚŒÄ3ª‹;$dÓ’)îaÊQ·{ÙàsûÊ”xîãŠ–Æ?	ÀZ¦ÒÚ°)×åòÚ×º-VSÐ-­zC‰Wk7ÿÉ´Uâ:¤fá^Íb5–=Ã#³}%7VW¤+ª×n”ù×¶¶š¢2b¸-ÝØNÝÚäèÖ\°6ºuk'å•Åíû(WÛ§<Ï½¡šIgúfHØË”ïeã°&:Ó«Ä‹oz¤Mxs5ÜF dÇÞRÍ5Î kÐZG/é¤‰ÁˆVeÍv\ ¸ºË«_j[!3ùlA8”³%þÿ»7™Ã¾É¸zvÆµ 9€QÁóò\@9í×V@PY.¬aÜ¯ºšªã…j÷Ãg"6×ÓœÖÔûÂ™36…ÍÿÄ…;”5¾,‚²æf#¦«±¹íÊYHkìz¢uÍ'­‡±ÿô‰ƒó3Ÿ´ÔÎL,(ÎÐ8¬¥YðèÓßÄ¦j¦9’Ï	àÈDmß4`çuYíÌ¡C3õ}çZ:lÕ¿RÌVEÞù¾>=òÐÇOtXk9 ôÌÂÄÄÇÁÚ’sºìðLí|=yTä¦òù™`ê”Æ¼82ç•¾3{<ïLßŽ@MõŸÔ_»V_õIKß„ÅÏˆbW¥nÎ•k®ºê½*Ëêç¤ýÀbð˜ÅÆD´²¢+R“®0EÌQ¤m™Em}:¬õæ×Eº ¬–g‘üF›5ÊÛôM@$c$¡Y1CXfX-8„)¡švŠbse0>Ã7RÏ²×®Õ´•ôÅ&k‘Ô
”µ¾>^°
-ÒU¬›s2ó”¶ÒÕ<Ê<Óß’¹\QÅX‘hr,+yÖÊZ™Ò½œÕ8|±¬¹d€µJÖ„€•ÖE;´Ú$8r´#tF@–<[¬^ã0Àá°Fd•k¦„5}{žÆ
×H…çÇÈµâlþs³q‡H¾Ÿ|1¨ª{ºk½¼lÉÛPZø6àh¶›HBk¡ûµÜN8`bÓ€±ãã€Z–$Ç9•§£%ªÉÚºŒ`­R#Åß—ªaÍjÖ®?¨^˜Fk/œƒÕnÜ˜.Ëô´7ò0~®ãùž¦7~ø³Ÿýìý÷O•æ0ÙŽ²FµZÕN	Õ¾¬Ýw"Aµm“ŸŸOo$ãÍï¾`íˆî
ž}vié©¥çŽláƒ;}Vgdk	¼Òãã Z˜u°]Õ0¥¯Ó$“¥<¤Áq«Á{p'¬5êŸ“
/{ƒÙìäMc²{ÎJJsRc$TÛc¬vì|iQÑ%kÈjŽkž¹š¹«ñM‹ÿò™YŒÌ³"«i7!N«e;6þï.±ex3µ˜Oíœf#Ã×¯WGiÍÕÜ%±•:­©Š­—A7FÓ5¶EE9óéÎ7[
$H‘·–ØUù:³ÂÐt^ÙxÒÖ*µv®¬Í´°Ñþöë·nß¾õë·æ3ÜÔæoÃO7~?	×ÎØ#@5[“RFƒkÖÈ„œ:ÊfÛ	Ú¯l«Ìœ~“@DS.{ÿr 5z7H¬ÆƒÇÉ~Tè¯þ(õJ‡—oÝà{½õóŸ|­½ûS#ÃÐkKŠÜ€5è˜jîœbwb=j¾" Ù çzW5Âî¼ù¹p)Ã_UœË33À…ö¦0ŽƒKôÉ-Ù3â`@eÃw¼pJ¤“	œ–WÏíŽ®¼:ØUQ V—ç¼œúótX«ë®ä%GÇ°&1D¾ÓeÄ+¤ø0ØW 4–Â,È0ãv"l6nêéétXc%²;cuj^¡¶k%	ºERc"à™8ÕV³ÃâŠ‡Ì]ðuky–µÕå}ÀÚsü}`{†š5„5Þ<#lG†‡M[»–å!å%Õ²©ÕÓc<!6%C¹ÆìØä¶ž\¦GšööñItë¾KÄ>âãš‚Ý‹BSò
4;~Êƒ”dÆÊÔÛúâ_lFNSF,+™ª'½…Z]0~D8‹É‘ÚtY$€ßìŽo¬ÞMaâ—"¤9j!NÆM0	‰ùÖ´¼
¼#õÌ$Mõ"â†]VjùðÃ›¬x­ÐZ¤ààa}GŸ<©åáö£tu 1v}ë[ëÅhÓž@Wƒb ƒµ«V¢9¬pÃä´í8:4d5¾ŽkRÒœÔ|çEkœ5k®­->Ü1ðø'‚©ÃkS©»°P_ÏŸÀóõ}gj[øžµP"Ü#d;Apð	L­Õs4MÒ¸Zv‹ÕZøYfZêÅ]‡Å]ÐçÌ•…3Nkh†9]_/“Í\Âñ¡ÃÓ<ÛÄB­i]\Å•“
ëÕÃ£k\qÆ˜í—ÒÜõÆùk{Ìzhíµ{·¾zXÒp°´Öˆrn–rP«·G¤Û•UÍØp1…ŠÑ’« ¶+•s}-Ÿˆ$ /¾®0ä5àò+ì´¸%$öÒÐ`!4Í–”	Û ¯9Í8šãj˜­€Ö|]u§” æ^ýVæca}¬Ò0_-±7÷‘=÷ÝBX×
•5:b÷‘¹0§ÇGVc½Gx®£yAj¬øÑìõ**.ÓY‚	„ý‚Ãˆ†‰´ÆÞÉÊ1¹‡”¦„aÖèš'µ:Er$TÆs8º=I~¤A`¨ÍN²	åk6^œ!Íq$„ÜKxØÎz¡1$8™Ë[}žç$Íe Ë´°‡…\ˆf•e™^š‘òºâ6çOÖÑ.F¹ŒvçÀäJ7!SÒô°à^iž#7ÕòCå•Ùš[GJ¿VËlË¹'Öº´ÆÂ¦N‹Òv¦¬=v]¬¦XX8wŒf¦¯\h»ïý'»¡;s,»üdf½Xíýã¥­B4V6?<õEÈüâ«¯È¼¯ó’X3è¡!²&¸OlxóÍïn–¿°ÆúÈ#Ï>ølIñ–ëG6?µÁò6ÒE7l[BêÑxÊŒ'^²n4î¯É6Ø‡Ñmc©ì¸PÍØLW)?Ò/R›|ã<(ûqm½Òn9IÍšÅpm‹­¼…ÀjÄôÜÅö/"ÀQÐdMŸvÍüçÿ´«±ß”<H`Í²`ˆiBï	æ5—ÖÚR!ôGjö•ŸÐZŒë³O±-Ö¢³=BBdU/8–#÷Ñ”µn.É
|®×­ÁúW‘Ö¼´¨A`	)X³ÎøJÅ¨œ¹ýÑ?M”./N•^¹rõ#´®‹t@#¬ÙÚ3²l7ZÃDd¨‘¦g„D5ROœØº¦´q’ÌNjËÆâÒ!,E€µ—PØœØ@5V‹£'~ÿû©¦'þÃÛ‹ïÜ¸­áhòî‹Ïš’¾ô”ÃYf	ÙÔd°¶iç&”Ý©­GMW03öàH6\Üj)Y³OUEoHgv7ìbX‘Q‘Fv#ªÐ§THÕ4„{psOBûm€ ‹!x“‹ˆµ?ÀáK4o@4Ù¨4bƒåx}åÏ•à û(«qTõ5íBº£Ï¸‹Ä†kll×ZDÊc§ƒM­=ÆcÁ	2ö³±_ˆk,Ô¨!·m¤ÑRš,à
i¬b#SéêÕk««×ò4nn¸öØY~×–Þ3‚6]wsG@µÖXF®,m sòæÍµ©š-[(zƒúkÙ¡¡Tª±{ÇèèŽÎîží;F§¶nel~–ÐÚV|F8ZsXcäXÆÆ5µàé¯Ž‹pä>:¯ac°æÁït“?Ø¦€e;2~tT¸MgoˆæphMQØ=ÍYÉý>â5ÖbŠAd5ƒ5lø'·Ûqp÷·îïÚžqP­Wv!ßñ.Qåí'œ'êø+y3-3ø@
W†Ú4/LƒÐDkÁ»_Ÿ,©“?æ}¼ì^¬èjZ<b*¤ŒxOìÛÂ5WÖžÈ?A­GýÂÁýä°å[r ,ê¥”±žßN	ÖP¨ !¾4	‰ìÀJ°Kgç Fl­è	uñ,‡>6;tÿ¼™‰3L€süW‚fŒÀ/ûzÌ!,1ýøQšÛ4Tç:ÏŽÜÏ½<V_ÏÏÔ_xípÉÏqž”µÿËÞùõÄuféþ|¹87#¢@ù+P•QŠ¹”Jm¡@ÕThÀQMì¸cÇí1¶!‰±Ò±c§Ò1ÒQ‡$-‹N!ÅØ™‹(-7Fn÷ÇJ”›Q<Î´5“›¾ì´t~ÏZûõvÉž/±¨½÷»ß½«(*NíúÕ³Ö³xn‚5‡I†—xú‘+H’?tB)Œµ¬×&2ìY	å×­—ù¸…ˆ´’ëÀ™¶I–*j¥µ1³.‡B`M†ú5z¦)ó‘‘º¤‹b¸@ÚoôI±[ää%SˆÔ˜Ž»Mƒx,•iî½ØÅJQccÌ©ì§Ëï“î¨–_59ú¦zl¹$V«PÖ*FžäeÕ.ÕKßsZ‹ô´ ©UÀZ“¦´Š|œàîûŒÎYI›®Âé°?®ò=Œ¬4°mƒKh–‹”6sL*œfåJ"X³GÃ¯¿Á7ËatbÔ£°mÎiÍÈf!ÕÒÖ†€q¯5[é—3çW,öë“dºâS[ƒ<‡T	½ÏÜ"GÛà*Ìû)Ws7L{szßÏQÀ–ÕoŸúÙy¹Wmãò$PÓ¢5)#ã·Óúf{‰YV¾þp`c©,ÏSÇ‚Ã‹”µ'?UÄ°æþ0¬­¬|øÑ‡—3™’?Évæ•­}õO…³¿!¼úÉŸgµ—ÓÞõöjo|;¾0­zõ.}ß
¬mÿý_>{ð$#ÇùOòÚ;'Ÿ¬ªzòçÇSÒKÕ­AI¸)Ò,º]$Aöœî¡†ÒjÓŒÕ`-7acªi`nŽtŒsÆjÖßO]-ùw³•,Ë‰‚¹nipô´ýÅ)çµC0Ú!—ÔÌ{úlÙÒqqî‡Õ‚²ª…4HX-³	k›±?óþÿëµ	ü,*¢\Hb™HÊ½Ÿ€Ô”véÔ…Gkk7fn0ÞR™éÁ0¢4­²4ÀnÊ+”™Í2( £%²½}¬Á2ôÔX›Ãˆ:ƒj¨n
µrVÛ¬F”Ö®5­^ÿzµé‹ÏÿðÝ×7ß¼™ùãëÿ¸ XûÅïÜP_°†jÏ°&iŸ¹ˆmoaÏÅ3oLŸ>mú¸ÆFÛ‹’Ö&5	°	ßäºé/¯_;†©ûŸßþ3²/`2‚#ä©·ßvX{Í:cs±qeüŒ)kº¤MY…8áµè=ŒÛ 2Ož´“ÐŠ2PÆD¹SOxSl‘Ø¨%©©€| uá•?;ú(?Ø¨†ØªG¬ñb±)4e-›àPîk£ „—ãj=3Zð›mXùÑfþ"Î!v«}‘¢Öo°F©©„YÕ¬ŠáÖ¯`ä[Ø<"êÒ^·––Š–JY9ApiÖDkõ‚µ-ìõÔµÞØ¨¦:¯Af­ý‹â5KƒT'Ô™£Go]š™ÙRWßºq	üÛN´ôÔ×¡ÜõÍ¥ÛOÏ^¹2"G”Ù‘±½;nTÛíùåññ#$CÂj/¿|V«IES¸#&.ýÛ‚ñ#=¯-,ýèlpyÅ…µÀ`l	›c1‘Î¹Ì‘ÍæB¿l¡“G°x|D÷´
CÈø,¶Nkáˆ´ùïäÇ‡0ªI“¸N±ÓÙhø¬²!v´«ã%l<o0ª^ÛÁ^äö±) KpíŠÕ$-ië²YÈEdæÈaÞ­€µ;kÜ‚u¿[Œè'l‚²Véù?r2ž’%à0c¿LìÄ¯Kv¨ß¤€Ìð,¹Ô±¬ÄÃdRÚ[iñrfI(4Á“‚ìxlÉ;,y4öKÏQ}gÍ”©I;¸#ü‡-¬¬AfG@ºÛìFk/
ìŽ¹²Æ¾¦Wï‹ûWJGŒÚÞÏ,•VVÞ‡\Î¢ÜG6<AÁ¼IJc†ŒMŽ
Ø2Okj"¶d™·áõŒ†e\2’Ér™1«IhœKp?=^»’ÖÖjÁh¥L¿´rM9¡ilGˆrÒ˜VÓ^]¢
Âa_”¥ÿ‘>mÊuå˜ÖØ·Ð»~ªY‘ZWµrQÐ4Û¥: /sK!dT§kðáÚti£µkÂ„µ kïø-†µêºK¼XõT!|'¶‰GŽ_Ê|´ŒÈøÈHYsD‹&©]¦ÄùcïÌÏÑÕ¶q?lÂ`Í½{í‡/B[‘¤æ°çÞ"Â8Z±fã¹É¿—¾Á_’êX¢`îÁ^k¡²Í´;M›	w×½Íw¤©³¿(ñŽƒåkä˜kn{¼ŸçDk’¾¾Þ,ÈÞæâ >J\‚HÉ$ÓqÛh~U´fSxC()ÕÛ%C,~s½ÙÕ
ÁŽ-ž¥ÐÔò»³{¨Sc[u×¨ù
Z°«:tHö"+¬Vø~¡ïÝÿ~÷¥ß¼ÔXûÓWˆÕ^:+R.ªE°v†0V#æöèËÖöúÝ¿ÿöÛƒÏÑ#àøqPiíÝ(¯Uç~~.µm¨.“¶›¶\ÈžÉë®Æ×-s]k)Ì@æzT ÆÖKÙ”<‰öÖÅØÄYŽ¦ƒÌ¦Çtq- [Â2;êÜCGÇ–g 1çµ8Ø¡Ïa‹<Z…°Ù‹,ÅQú§ÿ³›±?™<HªÕWÍrñšåA²È¾¹DæÌ@&bµk¹vëÔ…@k0+êy„½H%¬¹ÛHðAY#ò&«©dÍ`MTŠªÜËLý9WœAÁZ˜ðTÈœ]c€5Ý‰Ìâj&sýóÏ¯_7+×7/(3ñÐÚ	êGÒÚÀ`ÍcîôBío¼1›/L~ËqÅ_ÍXIlcÈX Güp1ªn{ïÚõÒÂÜüòü{Ÿ½÷å°­ÝÝÌc$nµf°6;my…øÅ‹ðÊ+×L$²1uÈÑµ]°fµh„¤õ[Ã:Reœh²²Ú¾Q)kOœU÷»Ç¨§F›©	ï×‹'XãåÖ
Æ¼y¨9ÛÄOV¾ýƒ
±Àhœì,q½–6nüèÆÊÃš°FØš…@‘’ª–ÏŽuVgóUf)6«71­&N…d†•á°–JS²&;‚‘m°ëÛ‰º¶#õ¤AÖ·bù<¯[·´bñ…²ö·XZãc ¸Æ¿Üý|Ø¨¬mÁD„²ÖÒ*Ç’-=-§÷îé™œÃ]$?6{evÇ01~å
 6²C­°ó#ôÃft…¥­7ÏžÕ§	ÛC7öœ‡×°xIô¶¡^Æ6 ˜2!ç?—™ósT[nZ†<ÈA\9ÜÉ_~0é!,Y1«ÅzY¥²ÆèÑá'Ç[-.‰9«i¤é×Éí­™çÁ§ø}…\=|:ÎAS#bTcËCØ¼ÄòC€NÀ0¯³™²æ°f;k¾¹½ˆ[JwŽ¬Ö×‚¤GÜpÍFXLX»çÒÚµÛKÉ%x-	ë”d*hëà–v–U÷…º¤äÇŠçV3ë™	Àeˆ|‰k<«eîz[ÝÉÄ’Ï6ƒÖÐÎÀ-ÉjÀ›0L!rÓ)·UÀàM—:NÉ=wlbù±‡AS$6v=;dstU1$MˆÖ ­õLf=yyãý‰dCmeMHÅ4°&)¬!€\IÎãsûÝ$õw —•´y¤‚óÌèQ‡%›ìm¶Ì¼ê=Ý­!u/iëMjãhÂ'À:˜z`QÇAÂÆ _üµ^ò ¨ui‹î®Ï·b´TÊ]üÓvUÒƒ i¤¶¶«m<).3F{È’’5¬*yy6ê#TóMU€5Âçü©ùŠ¿×)Ò3§C5¹è"¹Ëñ”ù¤]ÃÀ…5–Ö‚Èxi­ÅS"Öt÷Zã4N×Z=	N2¯F ª12‚äa‚ÝÈSõò7…gid“±'¤Y„è îaX¨ÇÐ“K4ŸyÁÄ<º3Ûl=·íBƒso®H?´¾<w¬æ«r£Ä+|U£\ì\5n½ùBÑ¾×EY+VÕˆ¾­´G÷!Â{6es¡€²Æs×µNÆT­íì¦[¡»{¨»{L±k³Ý©ÝŸÞ¨díéãæµÃþíoQÖV¨/møií7zÇ^}õUXíƒµ/ªEáÎ"ê®æ°6»“’‡‹j¯¦hÙ²U°&T;ÇÍ!ñ©Þšî:xüÜ¹Ö&…¥å¦õeuMŠ€Ç­Lr›8«‡‚æ9±Æ—Ÿ­2Üo&i$Ã¸ÉéMíÚ¼e·§¬ÙÚ»´é ™nê.™vfµÂO%ª]xûí›­j–¬…‚5ôþMXÛŒÍø©åA~ø0F`‹äB­YcìRS6l·x§2ï~¾ºö@kÆµ™	<Àj,6ŠÃY-JyÜYÄà­H£)§]¡55ÄÏz³ìäÌÛ¼z« R‡·æŠÃ¯‡K+‹M‰µï>ÿüÞõ594Þ[ûè#ÙéÚ?Ã“=áUkÐXjÏüEÑÚgNïAYÔ´<¶Ð´69	Œ™€µÄ†Ö¸ÕäObÊÃIrH¿üóÊÿxïæ•r)Xûð”`¸k"?Ë–¿‚°Fœ‘ÎEÂÔÇ´Q­qÜåØiM+c°H[k4X““‰sV¨TälÑÈ¦(šŠ&6ÖÈ%´W¬ƒð ´ÖÜØ×'J³Ôš¦(Á§_…Pš^\jŠ\WÚ™Ø!,Ì”=k¾÷0­ÃZÆª ´r'Ã¨¶k±aLjÌWFÚ`­žo<ÍS„Ú4OŠDc·'…7dOº]2ÛAþ;ˆÆž=i2šã³õÄ~Z°†÷×ß9¬Ýš9ºµ®îêÖ-J¬läŠ{:óIRžli‘äÎ=©¹ù˜‹ôŽŒ#"´6Ò9{ÑûòÃ¶»kx|saªò hÒ,÷±`°Æ€â4Ï‹„†`5½øÌ€6æ$ž±0›a3ê§7·>aa38±U÷kØÈ°°£ÝàÂÉf/âršlTÿo3eMÿ’øuB´X›ãn^Æ({T‹5¦¦y1„im Í‹mÏ--Ý¥°ëAeMT"HãåAN,‰Š×V‘­Vbe-àšj¿`zb«ÍZhŠ­PÍZX£ÈL™„2XÈÄ<¦)éOëëˆjüKTLBh®rH œ*Ç4owºI£e%ói€úšaZ™‘Ú1«]ƒÇøaD‰êÛ#"4–‰ŽÃÔùœZÝKðÃ^dcc‘ƒä^ò¬¹rùý½wñF1Û“êØÖÊ Ø„ŽSjF"#O·	¬J–¡3ÎN–k‰àµŽ°¦?7†	æÊ¦¸IXã^lLaÂƒäR‡×euÒÝç€µú:ÉÌ×_(ƒ‹°‡uu’ÿ­ÈØu=ªºÎ.šÓÿì~µ¨Ÿ±SÊ–=îIW™ªÁuÈl!5©l2‡ÜR·Å¬ù?­«Hƒ‰‘s¿±QçéD,¬±
ƒZ­CŸnÁf7ãJVëÉœÜ‡{¸ƒ?ÑUSü"Y‰Ú`5¢¨õµ0, [#ÇdÆËn¶bJ:˜öBøšÅjÁ:Ä˜û
¡DÎQ3lÍ½ÿšÉsº»‡s\‰åÍoÝøj”¯ÿä9Êµ£··‹&TÙÜT‘=®E½ë`O¡õqöhó#ÁÆÃ¯<Þ¨¶lQ&¤ø¬H¾þ¨Æ/4žRh«ìûIþ„5ã~\cçÖÔbiíøÓ7ˆýkz\Oööå^úê+>Ú^‚ÕÖ@µBc50PóæjØ@NïÕ¨·Úsb·XÍhÊòãÀÚ·'ù¥ÏžcŠ¥Ýe0%AÒÀ\Øè‹¬)í¶k@í×4Ÿæ1§ø,ò™›œœã§±YSwšƒDZÜ¡¹®(8ÓÒ´í¬i!ªÊ´´}t\ÇJ‡¥¬a-VÖ6am36ã'–ùÏ×V¿?ü½\›ÕT³¶Ê'u[K'S)ƒ5ŒÌ»z>»àhlj¾:´]½ukf9$‹<²9v¼«t­¤4ä³þNw…ÌåíPÖ»3÷q,‡Ó{H*aû‰ÐpM”Á\Ù/]K^ûü‹Õ/>¸ví;üûWî½~á£Oâ;¹_ÎÜ lÍ![R{NO³gÆY±Î¶gî­¡†Ó²ƒ¤
ù-d5t5èŒÏï§ç€5¹EîÙ9­ÚLÿùú×ÿí½?Þ¼§0‹‘›z…ðƒT˜Ž¬ô™}ä´·xÁFò“Ç¹V:“¿$­bÔâ42³ÇÕ±1‚µ)“Õeˆ8ªY½6Å|¹IŒ:¢mƒ¹$Á??ÊœY¥Òädmm9º¸»ÈKÍZÞ€kP­GÂ ÑƒÍ(SÃ¶ jAX³-³[Œ¶³ËVZûFÍÕ¸á4R]„u¹·ˆ;ñ;ÈŠ`šxˆÕˆiŠæØ¯4H$5ô0K•¤ñÚìEfþ&kþ7ŽÂj¯AkÛ	—ÖÖ`m?Öý­W[±Ž¼ÚÚS§$Ê–ÉÖÓCÝ0I-ºÍž^Ø£ËôüŽ;ó’×^&iW¦–ý XSÕøË¸©¼rvª^#Â <ðBlzyÛ4ô×5‡ì0eN1¦°©dm4Bâ m41!®˜*î»‹l9¬E«(Ø¤´®g+n¾ý ÷=³/šÇ]X‹štÛ_#(¨ÇÈkã´<lä¹€ôüÇQ<Fûž;RÊÜ=&-Ê“ÿ¬ÁZ’¾T£¦Xd–›»!Is27È‡•µ`2ÂLÖ^÷Nkžyw8‡5²ãJÇú!š»ë÷2ž,˜ÁqÄÊº”")\³œHFÚ]:FÚ£9 aibµc¹$¹—”g.IG;bJ]¬%7”´;w„kc{ÇS"——a6jà+žãDÁšVà)$VâžøŒì,²Ú¿‘%3H€J~ç6.+D\KèmüePyuhcL¦54Òß4ÓÇÿr(ËVÄ†\Ä†aUm¢,§Ç¤kq’Á(†Ë’þ¶Žr“¹xÖ¤O³ÒÒÊ" NçV6ìaÌ¡¥YY¬cÁ„'@2AG0è7zt k5Õü
ƒ5T‹¨”-A3+vjz%êë'6ˆG¬¬qtã’XMÐVŽ-öï#[|…i†U~Mºýˆã¦?*Ðè4¥ƒÙèreèeí±YÓbîb2ÜOß—Òq€°ã¦Ë1`E£§ÜÈ¸j”£cÈy”¾PÍ.š‹f`8Ïµô¢µÀ‡Í›±ê/$ŠESÜ˜/ä”[ÏC)k‘+05ÑÊ¯GF'Ít“ã°Æ…ô“³0­8õµ¡`­eš‹¤<ZL6trÓ÷à&fó”«é¹³)ƒY5Ä.0¨Ú½{ÚÚn"Ö`µ£3û{èÂšb…D ]ØòKY# 4(-"5•ª…¾j®©Ajo<6~†Îj šìú½’…H¸Œ–Øßzç'ß9®ÑöíçZPw]ó­ÖÇ>É–@ÿª¸Ôh4@^‡ú´{ß¿î®—ŒÉžÔ\—Hò:Í½Ó§95öÑˆz«3ðMÀ¸îª¦ŽS•ñÝ.üåÂƒá°–0iM-Ö¸-qó8lÒÚ&¬mÆfü”ò ¯•`µ’Ìûcû~Pà»æžåEoZk7o:­)‚].E¿ûå¡C°Z%¬Å—`“Î:5ˆ/Ûê”ÝOôæ#'ÿÚl‚éüý4HŸþ&kÂ.*.Øù‘,?j×EŒE>'²iõ^fõÍ>¿·öæ›>ºðú©¡µýûÍò$—ƒöú†ŠÙññÙÏx"$ïìÓéý×=Y”4`mòâÜï/Î_œ§tí"èfÖ? ¬áEÂvú­?_¿þÞ—ß|yóMP%\ÓGÂSrïGÔÕ¬3v”S©+Í•µ<ó	9%/ü+—±¨Q©ñäžME5–	¡å<’°Ò4UéÑ6Å™èkÍˆkèlt¯Ñ£äMoáûQÜE`´f™•à5¨N×jžíò¶ÇuµöowY
ý”*ÿŽLSÖŽZƒ¢‹¶œÙ@Zg°ãAíÁÅŸAºKˆ]"<V„å?ög•‰¦Æ
9ªÓ4³ÊI×Gšë‡YM³Ž4±QÒÒ¸«ðÆ%T]²ÛÓÀwÝNšÌ7H†´¶j'TIî°Æžâ(_ÜÎÜjo­¿u•4H.ÊdP¶·¶tñ“Û)A˜Ø.Îõ´lŸLÍíÝ¹“2ùþ‘+;v÷ó· b6Ò?¢\È6µÂ6ÁLyá…€æôrlC]‹€Ö·RÐ\‚3ŽVÿ;^ÓQ§4Nd¢9/Y3@#Â¡@TWÚu:b‡µ¡•mC€‹÷#ZÃk[°VqÀ“.mí`¦59O¶eÇã3d&[ÿg|ªÒãÄ¥lìÞ"mƒT½ñ/.•pé(8%Ö„5 †Yf4f~1äAjè}Ö\Z«PÖØø ¤AJX£ÓÚëßIZ»—ñ.Æ”’«¥c¯/e˜Lv@p$=ÊZQ´¶Ä3³–oGÌÿñØò™ú’›rÇ.s´„ïä•‚†Æ_Ã
Ö8@ušÒÏ­±+š°¦¼g%´ê‚ÜswˆU@.f’îÛOsp™ôCk@+®"LO¨˜nB‹[‹˜ÖÅ3çO$ïò‰0¶´ÞLešÔÃ†ærÝ~’,y;el3„jŒÀIdå8Öe¼Có^{7ÕñÐëÚ8áÄ,Q×Q·ˆEu-I‚	ÊÖPŸ{ünÎ;^¬ù^µØõ¬ÐÃi–™®Ç÷?šE>ùÕÊM«®Nqrýå-õ˜AV8Œ¼ã?¡dM±AF(±y~Á¬Ø,ABéšüJ#›Ñšoýz@}ßª™þH}_hÒ\^cÇí 5¯i‹¨eZUÂªÓ¢>ÜúœôµèzÜhÊ€J3X{JÉb“f7å>2+ òŽÙî;âJãû¿¾˜k6Ë.p]÷l¬½Û²F385Èu@VVd¼_ ;?Á·Šƒ
¾ï+Ø•‡F/»ôUà+Ö¸6xJÂ—+‰7Åæ²¥ñ(QŒ¬
…‘ñ1`'B—:5ÅJÔsmnaÍ¼ QÖko“ÿ»Fä‘ÿ:ìmÕÄj’ÖXxäKŠW£Ø?*ÈTí7D5+Dg9§€Ë¢Íq~¾=‰·‰T¶ƒ”Uá]“2a6ƒÄT)5LýØ{RüKèJ[;5´]°ŸRÕ¬ÍÉñßd3d8in§)h£¢ÍaúË kþoûr¿în&X›mþ7uí”ýüEƒãu“Ö:âþ€&«KqˆÕ6am36ã'•y­ôýa3„üŸÀjö„X^†ÕÊ=ö¦Ts‹'bqˆüeõ¬šI= ¥UôYK`!’ePqØMûó±ß±ÁZ/×†Š¦j:`³BÁZ[_k¡Ã©„*¬„·+æúµ¯¿#J×Ö–JtÆ~Sþz{ûoëý38Bž0XÛÚž:M2£àiX[²6þØcž9MÖ£LF<Õqn~~è";æÜÏ[ýo]œß¹×<!õEÝ—ß|sæ°F%ÌV£²5±š´5ü¥ŽËb¤%‚µ‹CÃýcÀšpí“óç)[ã2æ	/¸s	Ð˜tVS?l0ðò˜*ZSMè’©æjf	´S\ƒ¤=¢Íä¤Æâ9ÂŠ•l¦$ÊQxN&ÍE­
Í¹B¡ßŠ×ŒÕä¦®¤±¡6kB¹ÀÛ€´€lÐšïÅ
œ/hh‘¤5Çf3RÇVCVëVþc7Ûá±ánÑšAY°ë×Ú†µ´ûù§ÓÖ
­žA;M°Óu±¼ÈvvA5¨+¾
¬AkO?ãÄðZ€µ§åéÊÚÆþ™Vr(ompŸKŒ¸ÿdÏžüæºZ¶·œ^X§µ´ÏÍ‘¹ghhaV©WÆwŒå_6ü”Z¨pÿ³à™²¡¶HZdc*š½JqB)œ¦’5æ%›±cÎj	Ïif/â„ÆÑ k„àÍaMÓÜÂp³6B·Àe¢µ0ð•+ÌHt_dÐ_Ñûšç?`ÍÍH‚ÿßš‚aFkeœ›~‘”;¯pã/j%aJµkl„UŠL¡‘«ì0æ2»XŸ11›¬]ˆ’ ƒÅˆƒÚ/NÅÂšPUPÖÖÖJw0 Ìd”ÙÑqL4…±ŸÄa#)ýÈü:V;øèC‚dÒ¬ý²[%ëQÁž
¶ÝxƒµN_bkQ‘vKÿ%“ÜØ9rä6ë;·ŸS˜{¿‹h>r8©Ò<B>#G´¡„‡ð”ª½$[QÛûÔªÁd50™¤±29°C„ÖØ xT¬¤áþÈ$¤%©H­¾0«ñŒãÄ¢¥%Êî»ï¤b`,BµZÙý";ª¤àÛ„Ú«áÉésuåjEU€ HG§YbcÙG´§ãìÖ¸Âö0±‰äÒDWu™·`-jL…îÑBŸ¦áÄ‰-Õ—*a-DkÀšüEÊnÛ=3c%‚qˆÈ·?ØBú¶Ö`-a³ÎWŽ›X„@ÁW¿ÖV<œ&\[‹3«•2	&QÔ`8Óí8]ž‘fBøƒ±…ÒB›LuM0Psc»‹ÙE: Í¥«F9JzÞ$sþìØï¿ð–š*zfe±PB‹JÕDrºÊˆÕrcøP‘ãBÈ×ßÛšò½ s¤Jf!ºóÿqž/ÕÍ“Ãj¹Vô<L™mŠˆr´á®Yzz*€ÙÙYÐ“£¦­P›Å²Ö¬!›j¶ìÞÝÞ•~Öb/ÈÕOÎ.­ùý÷ÿþ_úŠ«	Ö 5ß¾ûkáZHü1Šçþj×`š`s¥±bCµš@ÍÇŸînM¥°ëïjOU•ùŠZ¥ˆÖjÖ¤µlC¥år#,ÃuWQµÖÕíFUf¼ßƒä€¨ÁG	’¬ùCr¾FÜ/V³Mð‚ÔƒðÏ{‘4H'´J1M™
>Ñ¬d!	ò®JÖ:AŠÖ6Ó 7c3~ZyÊ|4KHv“«¬-'SiyÔ”;VÖn
DbZ×Bš¹5sh¢ªÖ!@ªB6\‚CÑ¦"ÊˆÐÕ2[ùŽÔöÊìÑhÍ	ûM&ªiÊB’[‚9™Ùc/XO°dV×>øû××‰¯?øøÍ5øIÚÚ‡++ØßþîwäÁ?ùä³ÐÚ\Ô{vöAZû•+]±÷iÜú	5Â¶dÈ¡óçæ\ƒ¼.žZX¸«M3MV£îüïú-ôxûZ[9Œ€k‚5šzýËÉs±Vðëvö÷Oÿ`ñÆ+?ãŠiå=ìâ¬«òQdäkEÃ1—Õ8ÀHWTSØT’Æ· Oq~ ~¶?Gi4r¯°:ô¢Ê”LG kê¹ÖU÷‘>™C}ËQ:¨”îháºà.$7ŠÕ|ìˆvV`¤=BYsiMÃ˜ÕØÃ5Õeò	Œ ;»ÄccÄ0ã:W.óžj¡5v<"sMÐÈŠzlFØöhZkmiÖ$×!±mŸ«ñi­õà‰×žG[ÖÄjÇ3VpX»Åý¹SM½Ak  µ2“ò™Ÿ#-²g~v65Ù3´—æØã/ïÂr¤¿7È+ðçË;v`	})½k‘¾‘;÷# ï6±® EkÖÎÜXŒÑ ÿ5U)È8­¡­9´¹¨@Í6a[èÛVC6nŽk>ªÌPà¸UF8gá÷…yÈp£½µíˆßþ÷àä0ð1Î#û@¹Ç·EekS}ê²v÷.ÁT Ÿ)y‚c¬«™Úï°fvÖÒ,uR¬¬¹sh³Fh •7G5â_ª×WÕ|:!aEï6Í¹—ÐÉdR¿¾H.S`XÄiàJÔÌ„OGí	Ö8H`Ø/¸Rv£%V&•FŽÐöâÙÛKœÈ-³¤çŽÜ¹}^{.RÖÜr9™ä”¥eý=zX9ø“	Íü…âÖUÎÓÎ~ª)¼ÛÚ²•ñ)]syÂŸ¯ÃšÅ:Ïû.d–0K‹»MþŽrƒÕBe2°‚‘J×¤¬5(i±L9Á°
¥Lþü˜?]¨))”úæýÓª™…3pxT¾¤LGêI3¬g\å8FžýÚIhË©öeL|…¨Ö~3Ã³²QÀ°š¹4Ÿ•Y«`rÛ¸4qiãRý%±XkOWŒ8¬)Hƒœˆ­\WÍV¡}‚U,±	<4á—¿<ÕÚ#‡5mYÌq„yö”F=’æƒ!¤Ž4±ÏŒB´Œ°Æ™<VäcÅ™Ú2r4³”H³fv=š	á–»ŽpLV`9oë–z•›=ä³µ°ž™É7ÒÆ”,z	mäÍ“ÚQlËwu«”­Wy,<Ø ÂI:Ç
µWýÇ+£ºò ¦©Q°–ÏßFëŠépopú:‡æ Ltîåë¹±¬úa²J€$µ¢¹9›m(ðœ«êwkõ„µ²W×®_;|øÚõïßEWS jPÚK¬BûkâW¿ŠXíÌ¬—ˆ›©œÆåÛ³C?yÒ·.²<·=Q5Ù’î™œLWeÕØPp½AÄdÏ@£u’ªH«Aj³kø‚t'•´¡½a)S£`í´ŠÖÉLTKß‡5¶¦{ÍZ·ÿ¢o_x£ž ÝP±Ù‹D±Å´ÆÏáMXÛŒÍøIåAš¬v-–Ö:JI}¶XJk–°íß&-¯ù§X]³p‡YIkË±xVÙ¶&K¦]pˆäGÑiºšÍÈŸ?ÖrePsµ6ƒ5­¿¡IQÈmž©GA''H†ô6§áO`å¥µïþ¾¶víïo.­’™øæGäºß4ÿ~*–h¶vîÓ­“Ö×Ú;­áò÷Ææì³V¶ÅyÿëÉ¹I­††k¤BÎÁjæ9}faža´öÍ¿¬}qýÛÞTÙ¿ÍZ»ñ¹áÓsn3òÃžù¡øÓ1€ïû~ü•ª»­·}[u¹úq¨¹èµà\E±M&¸ŒJYÄ^™Í¨ì·å]Z{ÛþóO470/Ë
Ù?6r5XsƒGÒ\„x´BˆrmÏ¸H›}KÄ®H Ò§~ó¡Ï	ÐBášÏ?ªf-Œa5‡µ‘ÎáÎrÍ0ƒä®¶|M×Xg¹XËwbÒíUi¶qF‹a¥ÖêÒZ¥Ra¿0C	ÛŠ™H½§BBkD»ëtí·¤ÚÕÏ·n=yâÄä´Ÿ[0xÍ¥µ£û1™9J“µ­\“·¶nWo5G?]¡'çg÷Í£«í¡§Úd¶Ùùlüù;Ô@6Æ½½/ˆÍÉð)´Æ†¿]ÒZ@5v4 Mr›;Ckì[SlÁ˜“r†lZŒlùý?í[5¢G(^«„µÀj¾´¦¥BPs1,¦µ8|¿×Î»NT<-á\µ°ÃZ¼Wé3âŒ†§›g^¸=jíÖÚ^l,(?ÐŒq¦Wï0‡µUqG”IØÊpMµÈ¡ä%‚š5ÿñdg@Ú€?!–Ök‚H‹€×îÜ¾#?JæÁÑûBóxI<cëvJ‚\‚°./j—à ç6îm-’,Ç @ž9w¾Œðö¢z­¬+‰Ö¤ª-ËRN”÷L–HuÓÙ¤F–T¡çç{¯¹ý+‹Q‹%g¾?‘1yÏ¤5Õ“©Ç ¢ÚÝÌhÖ Oü°p¹é®,"Á nêªf›kæßx·)#}±qºÐ‹@ÍY­#Gƒ<!“HnD’Tã8êä8Â,Tg&#ºW×7lÜ ²Úm;t{~bî/"Þ“´VÍ¾½96ëjšvˆÚz,¿qãË³”Ö«í×IåH±«ÛR®ª¬VkŠáçH-ÁÜÑ‡ÞîÌŠñÙ˜tXsª{‰¸ƒ¦Á¤SÜ¥`Î°ŒCz<–X’»Ÿ†:óõ7æÉ8Çˆ'‘hGÛ ­9’éŽ†qÑý8Ëq	fÔ8-Aí@C¶¸/—ë†ûw ŒåìÞ¸NNM	óúÑºH§ÛÕm\,t!@rC†«îâ‹SË“>oÒ:ÕÒ\®t!’×Á=fä}U…ÕäGdI8@fiÕ#G‘Fž“¬áCYÛ™ÕÓ­Ú
¬mÕªÖ¼%öÛkÄêí·WWþóÝ¯P­f§y¼j¬öªÚc2TÚÂ<¤æ‚‹(íà§O²–Ï˜yŸ<þÿLTcaÍ-‘Â,·h³²Ñ—èg¢55OK—k`1ûúZV" Zh•Â³ÒâÇÌ"Ågé9cCcœË]ÍŽÄ¼ü5e ¦ÅÝûjQª-ÑiG£ñSi¶"X‘„µõ¬£Úúƒæ"›°¶›ñÓËƒüÞu5nIJåÕgˆ ©åŽ”jXQˆ¾„¼NTâZ@¶Ïfnqô`F„°J}—½{h§BvZ‹5}ÝZ°:5‡µ¬9ËãMô)"aM FOl¯f£/vø“ðo"Üëî:Ã]&Wï}¼¶öÝÇôRúzeE®>úÈ\?YT¶v\	d6RqlekÃ˜ûÑèx~ÞamˆÅ
‘ñåÚ.E½×Ø“´ÆH¥gPÞôô7Uhï}†ÃÈÖÞIù]7yIý8®oïÜ¿zhHi—³ ”w¦øTC6[(’cÂ÷Œê‹êÙJÀÚ‚5öÌ{ƒàŠª:CVCi¾É„‹ÏÕÊB13È©)µWãþ¤AÚ@ÕœÙÉ57ç¬ËuÎ_0®â¬õªO6Ô«]ãÓÔ`AvÃXpàÀÛ÷BâöØ!údz¸‹ÐŽ­{d×X9¯fØÝcdBîî®â[Ö<9‘]îÓ`±›Ðí¡H××s)vÈxTÞcJ*[»MÁÍ­	Æ[¶¼ztæêÆÑõO k¬s‰–°ös2"Ö¨YÛØ€Ö.µÖ§ZÛ¹w·T;úk=ÐÙÎ;(ß»cd|¨g~aVX?œéïUŒÈ¾ŸMo›%@z'ƒ³Ø0éßÃ«èŒÁ6øÌXMlì¢«Yk)mV®~Ì«\tx“®æ°æÿu51Ç¤±šƒ˜½bžªL}d×wÀ¥JXÇ|¿R\óÜGÖŽƒºck*ÃQìaen±ù°6ª1Ukƒýwås¯­'ÕE$r\dåìbÍ¦¥i±0½‹‚5b…I`-ØA‚eq8ªq‹!‰È¼ÿ;`EJÎU˜Ý&áðruj‚ ØdÉ-(d°¶$á/i:ßåeÓ¾¸‘H)ìZ¢0OHË›ú24Ä^vÉ„J4Fð ¿J¹‘²2§-«ášP5“Þ¤Ê-Z/ fp‰,]^Y,­Z±ž¬hí}8ÕŽy{úV\×ÁÊAC6æï6Þ]šIK—üzSã:gƒi°[Â‚|HAG¹,µŒó0
É$åN/^Ì”iÄa•WB/ÃØ c	‡*ñóMªVKNÔ—#H3q(r¶!ô?¸î]mã ©q´RQêª=Ê]&d¥ëÊ(ká’"u=xjãùýÏ›}+"Hk%kjk ”&õÜôW™¾oŠ „®AzshóÜE?ÃÍCú9¥…6×öÚ4) &}ÛìüÖ€(Œ&ÍD°']ÌÏì!™yœÏtGÑUH~lzÿìÐcÍ:¹ì¹3$÷ÔÕªSœž,Å‘N‘8~£š»ÿ7ör]ªMtu’&/áâ`_>oÆTØö·õr¥.N=a%¯ûF¹AeÍE]1xûÊ5+²øÂ3û¨xVö¾W^‘Iäd6F´1=MMÖjkb[5[KTÕ´oªµ>k¿%øÂõºôKgïüçKQ3?7¡TäG+T£Ï•ñÙ3Ó F‚4µíÛOÚ#·ãØôŸ$µÂHÍÖ˜@’
IxnduZ\7YnIË4DY‰]æ™NYb¾ô0ë¨†˜†ŒV3 þ‚Õˆ*¦9œJÉt„µ o€U*³`éEf
ÓØìNQB×Ü–OÅzZ@4yØr{“½{‚dBñpÅ¨¶ºTúçMXÛŒÍø‰ùAª)¶­¢Xv\+%y§Qƒ5Ìkù’iye%zçˆy“¢hku™yYD=] ñÉæ;uR®Æ a2šz¬Ù™kv³q‹ÈÍlôd)h3„S »zÚ8*P1Àj2C_ìµ?þàã{kÿýƒ¯×.üƒ7¹SxB*#î5`íÊÖdë¬N;ÆÇãý}aná+[»òë_CkŠ9e>â/¢
ØiMñ–ŠÝ¤¬Mçö~óÍÂ[ŸÝüÃî}Ç©ŒFþñ—›7ye†æ?‰°&\ûA‰—`¹tøáÇ‘æì>˜ÀZŽ„]Ý›ÅjÖ¶4Ês±j„lƒÛÖ¨'Ä¬«±€ˆ™šR ¢™;$°6¥<*›‰/°­E?Dp€îjD"Ë&7:è2]_­ÁP-Åj¬k&é}dvÛFÊô˜Ú†h{XXkËg¡5P¥·O°&Fc5ÜË`¬º[E^rTÌ³Ðµ¬›Ò³ˆÒB§5mƒ›ÿÃQWŸ"DmÁRLCsÃußOÕêÙ±S¯þíèÕ«øóŸÄ_äÆ3ìúøÓOÿüDÜGfžß¸z”Ó.ÑF›_+ÿÿ­-¤C‚©ùÜú‡wîÙ»°cxÇÞ=C{gÁíÙ1¾j€91ê÷?¯w×'¦«¹vµ»:;{wÅ°–Qˆ?N¬ÅýÖ¶aBmÞjm¬é5vÎ6PÓˆž°¶£™0Á­Ö}Å6ñø¼->ëÊšÎ÷Óãsã™JXsA/ìÆ¸ùÎ£•´˜Õ|ÍÖ†®²á>"aM#ZXËLŽ8…,n¦¢].y†„˜².cJÖÖÀä%·îª¹u??Ni,¬¹©…@r1e·0'%À‰fÔ²T‚sŒ;à8ÓÜ2†sì`ÝŸ!¤`u”V—YY‰šr$MZ\A\VÒ&.©&ÕINÑnpfm²_d¹›–’J¦$µó§iâ6½	^“K²(‘VW¤æÅQ¤^ƒE0µc½`»¼jÀÊó´æ×RÓˆ¤wÅfÀ#¬¯KX#<Éº©¡š?%Yv%¤°ã·O^°¶ž sQŒ±ÎL¦Ö Za{z¤Ë=b&óáE)—ÙQøF'2¯·cx¨ÙÍf-2HVU«i-òåg1K("j"nâüÀÝð²žØnR“VïO>oæ‰	«•¬Æ0Àg½$çh¸æŒYa©G€5UÙÀÈ‰¡#”¨8÷»¹€©sJudJxåâÑHXæ©9ÕîavœŽÁž0iaò›Žz·–ÐLó< ©d";~›Áš°ÌÉL¿ƒ‘9Žxè®š»ZÁ„þëùæ\ïH^O³¿·°ØUÃmp®Ð2&;é¼YÄo„¶¶‘aÌB’á]H$
Í/ì³7A¾XÚ'{“B›¿'åú‹ü"j©¹Q·lo}}ÿŸ½óë‰ëÌÒýhÎ›‘°Å¡B–o@6 £PÙru•*"
Q!è(*â¤ÛvÇ&‰±È‰;tÐ±ü'Ž,Ü Ó$=mù`›îX‘=}—ˆ>céø¦ÏÝ¸¥ó{ÖÚ/ÛÕí“±¨½÷»ß½«(ÊIíúÕ³Ö³²2=®îSyoúÀž<#°ZWW2ŸÆ–LTš{?Þ»dHˆÖÖâ,ÈÏW¯\Yøþèí£§~öª)„j`¨väÈ‘-°WòQ¾I5›~+3àüÑØÿô±š_Ÿø¾§ƒÒ[ùòŸþåç¢5±Ü.Î.‘¯ÿÀfØlÞä0 ËT5«ÛpÙNé$ÇZHÎõÖÖ„§@6Œím–ôÖ:0FndV¥¦Yg5›/±y?n†-6EÌØûÔ#—Ó<ÀƒO¬nsóqÉZÈ‚\‰e5ýLþóû‡ØˆøQõÅ^˜4mmF]±µžDWk¬Õ5©²VZ~³Œ‘æì»âËºÙˆÛÛŸ¾ýÁýùgÂv¨³NeDkI:©ù¥2ß­¥ü¬^%ÈgXô%¦</\h³H‡¬åA2éUàéTìÎÅùn1‚¬öhve¡îÁkßÝ¼té£ßÎ-Ú³^{ûƒËo“ÚEj¢ÃšW­õd6ŽLnÙ‚º¶Z›yòøâ˜Æi„| -p¹H|rq‚üÇ‰©ñ¡á©‡”°Ýºùo£ü:sð_ÅÄ	Xû‹híFk
ïµ6M†›ÇOFó€X>Mj#¹)vY/P¦¦LÈÈR¹Œæq\Ð¦i¥2Z!·Œ•Ï#­y’cšÉBÁš®åXW“©{c5’%Å"«4X/0¤F0“É§2R+©aƒÖòy`Óà4n¼Î–~Kk¶+]ˆº[ç6_<"L³Ago¯cŠÑ
PÓÝ×ÐX>dI²GtÃœ¼!{[’UEPÂ¼çƒgÛö{45qrT4ØÑD{5¾N ÔoB#à­šÚMœ¹ýðI`ìØåËË¬ïQ²vâ'?×§9„5pMÄvÛªÖî#À<YÓ lÜŠ¨¦Û®ÚŠ&¤´> ²{ßôôp×Ðð¾Žáib¨¥—¿P©b5ƒ5±Ú¹ÌK]Ke”I)AÍ"U±&·`MÆý´:ÎÀ5¶\ô*FÆÚøvz'd5fƒÚeñTÇ´§Áë¼~ž‹QÍƒ#qÄ´ŸRkDØÛoy>ä;®ž^¦]ÌjŠÜÎç÷«^­ýo÷ç^: HUMº&HÑÀ}ú	¤&Í-f¶1©¦Ñ‚µ×‚ª¯¼)¶ÃšÑšþ¹ª_­fØD£Êá¬ÌQÍÙLÆÀaÍû«!]9¬‰éx„Ig¯Yc2ž*òwµôNît£e¬‰YîžFãÍÙ,GŠ$ÒÝ¤xhå]³‰´¢ÌE­çÌÝ6_ùêO¡5×¯ž)p…l$´Ë³ã/#åÑÞHkÔDn+k|ÎsØH¬Íï^™_ƒ/€/æÔ>ŒÃ»ó‰‡ÕJáÙÙZàÉwœ”5'03‡Œò5#Ú ¶àáÁˆà@k "Ü”±‰fÞj:¶’º&Sf›ø_²«õf“ØANšrÓnÜ¸Qó›ŸBk¿‰iÍ£XYsÓþ’FÖlx.ñ•#U—ÅÄfCTÓÕLsÕÏïÉæºïÙHÌ”3˜Že…ïÝ<2˜CÚN¡	ÓÃ¬ÍÏ4‰‡ãRÀ^hgí½´9QüœýÕšÔ„8K‹jÝ)°'¾ÈJOÏ¸® ¯éÒ‰<½m™öjP^w+ÈEYšf,2HdÛÛº3$pdªù&*ÇÀ™Ê6ò8rº\<É2Ë[—“œõXsëþ¬Þ¯óÞ¸MõkYË³È(ä)Y›uµ”ªf-_í°–lÞa±ukkqäOçæ>Å\äöÅÛß"ª½ªy€iÒÔ„jhjýÖúšçR­Ëö.ìcq`F2Å_þxïÞiš¶ÚæøêVn#êèó§«%Ïø^\ýýä¢Ž-JäC†ã<Þý ‰¦øºÁcÃxC°6ÞJš¸Lû%îí(ÜóàL4¶„Æ¾5Æfà(wV[µ/•Šâ;­k$ð,6®ÄÂš+kÅ-ÖPÖ6`m#6âÇ–ùß]Ysamæ3šbu"6)ùªjjPÝ@Ýjø‚çL±¼¦Ÿ€µ“7æ‹
Äƒ›HÜx-…›HoEd‹j’èËÛÙôZ=uhÐšªá~a9jˆ­=1âz'(Õn·¬«éÊâ&W&ûè’hí¿¾ ríæƒ›0PºòË¹·1¯Œ`íWµµVµ†·¬6¼tvrÚ´¤5F*ÎŽG˜fïü¤T0úÏ/é×‚H†¿ÈÙ³'FÆ¦F&N}vë&o¢Îj–x¹J"$#8š`ÞÏb¬æ´ödâ,´Fùs·]Vå#âÆÊ‰‚•ÛÅ7T‰kÌˆ=õY“-Ê¸öc¥¾å
D5—U®–Õ;å×/¸£©š.ËR/€3n“viçå«òù,´ÈùéDš; Ü'ÀšŒûŠÛ¬1ŽQíÛúëë°£Å!ªG°¦ao2Õã™ƒ½Le’å{÷–f2m¬E™‘ÏˆÙ@“›Í­Èj\Pp¼­ÛkjZÉ—Ü¾,ß~Ú¡o]†ÒEÎä¥ú—ªÎjÇpî?v™6kµ¢µíÖ,€j‡=°csÓÀ*I²b´ÖÖá})¼ µæ¾nž}ç6ÄCƒ5hXëôz=¤3ve­i•l‚7´4~4Ï¼Ò‘Ôt°>Ë¤½ÄfÞÃZÖ‹Ó<Ì5’)BgA¹¯”’¨	Œð‹Ò }'Â¶gFQ‰Z|g"T“¯ƒóŠ"Xû!qáyñ]Ñatµýƒézþ>^¤ñu"%ÉfÐ€&¯G	ÖlÝ¸ðÎäŒ r1Á)(kg‚Ã¸¦Ÿ"^»À†C^´eIYSA¾uN›”?x£`®ìÁrdÚª£½
¥V¦ª	á^…òøhÄ©
f”)ã9_Ê{ÔÉ¢8ó·Tú#¿A±ÖÞ™¥šM‘ìClcd·YýµkïàVb˜ª¾l,9KÈwó»Á4Úª±^P¡£«¦§‰£¬~Ì“!±qX3 @f[A[	™~+$ÚÁf€¾"*?“à¶Ž1t\+™×©	§”’Èf^`æ½Ê(¢¼D«Ðô:À›òòMVàeò•£œW­ùasòNjÌ³fÃZÉHn#œš)R«¨©Ù®4ÎÁs¥c³Ú×¨×UÅ]ÑÚg5E±²æ´¿ªÃÀ«N™DÔžÁéÑ%6G/BÜ¶^ŠÇfÈëRkÝÃ=÷•ôé¥gRÇâžh¢.;ÁƒWã‚†Æ$p…ÊbÏzda0Š3d#X{Fuòþ hLøCøXƒ/°KÃ&ijÅñ¯*¤’dt§ÉI„òÔ'†?&­ë,2nÅ¹,ïÙ¯ÁvÙãçÚéöÞªÊ‚’íéßYŸHèëWsåÿeë¬–kÏò›öÄé•tŠ^ýó‰;·u…ÁBO_ª²¥Vj!±$™Ü¬!µµ¤ZÄjÈkNkÅY¿{8·¸xåÚ"_]œzK¡Î×„Ij\³ÔFG(S#ý‘Ëöö»>ÞõÒa3º£Ÿø£Åé{ÀÚ_xÇýuhÍ¾G•ÔF»Ãš5`SâÌm×½<GVï¤&kõ÷Ùš˜eiá?Sßö¢³6 sžôHj¤åÑšqˆÃÓœ¦açoSAZkñã-œë…meu«g.,ž9£OZNiÜ´º¤Í%ÓÖ>š+ö‚,f5-“ÊÚFlÄ-þñŸnÇf3÷gf>»ªÀ^¤¡áªlZ79omºõQH-ðZ ¶·é„r¿.ÔŠ´5ùL²W^þ)ë/J¶”46û™v\i°–7\«b1{ùLÞSQ¼ß³`ôÙ'ë€`íöµÊ;—¾»½ðà‹/H‚üî»¯nÞ¼¶xíÚ5Z­ýòsó9Íû7­7ùMÐZÇ0mâñÅ%ÒÞ¹	Õ¨+“ˆ¦¼G÷yÌîi‘J†ÇnDEk?¸8}ñág·<úîÒ¥GßÜBX#Ðñ>¥H.nŒm°æ´†·ÈV‡–Fûóˆfv™ªì²k‘pËf.{n±¬ôÇÁœLF¤¥Ü©¶¥9aÛ ÷’Åˆ¬ kÙ,÷£´Ï¬©WËbåß®,òëÒà®ÊÕÚ3iDÊ¼,N*	·„Ù*–Ë</´œËÙáXUû6ä?Æ°æõj,×4aÒÚ¦æî6…µ\kÙ\®/Á²k±ÅÈF9õe8ŠÈÂ_!SÈ
?°uyÜÿ¥cÇ^¸wìÞrÍÝ÷Bç÷d/b¬æî†ìvÿÆ±»tv¯¨¨©@ßãºÛ2FòïŽ]ã½ÝJ¬™žëèîÝ7L$É›zò‡–Ú³ús÷uš²æî"ç¬DÍ’"£Pú£Èfm¯õ*ç|—³Úó™úsJ<õÒ¿u‘ˆÙ"P33ØHŠdà˜fÕj±òõtZpzôÛ3"œêžü~×Àt«ÐEn#÷XûØ¯Ç
 VÚoíé{²Ú WP Fºá¤B¤öËˆÖÍ%ˆS2üì]dR%ÂÓ×’ÍìÇ”µ8^á'Â5Ò uÊš¤µÛªÛÜ(oØ"„\ä!ºF5iýÊLGbô
		Þ¼ËµŠË`³v¦ú!1%¸Gñá—aÈn9÷Ö´Ö^fOüÆqMÚkÊÞå0¾ó='ýþÞú¼YÉÚ6&’®±b!çñ—¿!Ÿ“ÌKý9 6Z®1\Ýõ•:·Æ²‚ˆVª¼•`(Îƒg„Üx°l¾J¨àæ}(ÈÈŒqÜ{X‘vä“Že%†\Á2DÙ•²ð·¢8?"›Há™Óš«g EàG Æ÷ðh¶¼ÇV¾}1gHÃ·¦É,`‰æWµ×-‚!d±²&Ñ­±œH<Qâäü`+â¡aø*Ô§9¦‰ž"Xã%Rj±Ç¥5>âC¦2ò—Ï•Kl)Ih	³taxÍÒÐÌ•„i"kÖûŽrAMOÁçÑÈÐÐbX«Ö"cd—-ô`Õ:ð"'’O_0X+
¾ž#›£·§¾]±¥VgësEª˜Ù¯9\R2SÌ
éz Ò€[oŠ|}Ã±T†º†öœåT3i­EÚÈq9¾¯Û:ûRyór‚µ}©Do_w¾2Ù¥@V«,Mñä“èjü5µ¬ÕÄ°¶žùðÏ kW¾ý~á¨ÑÚ¹SîüH˜Ÿˆ—©©ïµÒaj_ûÕK/üüý÷Oœ°&-09ôÚ´F.÷èÝvì=ŽS§@Öâ´ ¬Qô€|±g"0XM¹Ž| Ú+¦òH³…lqû}@Ž	Ô¾W0É~H•lìÆZ›ÂI®,J^•¬¶®§Áh—,¾ÓŠAÜb]U±²Fdüð&òOÿø±ñ£’ÖþX-Öˆ‡µF­¹"7XlÙüÒZÎkÄ:®5Òï4†5n1­U¥’ß’™>Ä5®z3#L°æ9Ùv5YË”òe;Ž\åk&³eÔ¶e#Õ¯•NkL~ˆ+äíÅÛ+¥³¿…Ö.¡«Ñ$ûÎµ›Â5¾¡{óM¾Yû	öý/Èè‘V×kýKKgéµF!åÉgMW»8ÂjdüË?y&$W€'\H„gÁ1~Ì}ò%
ÝÃ[,	òÖÃÏ>]=#Z»påŠÃ´†ã”­¶š8¬Ñ2€OýýÁšÓZµQ‹Â!Õöš+§hŒfV2ÞÊÉ@„lÀ0Z“²öÜó´½Á2+µ,‘VËRÕåª«q‰”oxËôHu`KghŒPÌV&N4µ¼±¿ËÍéLÃ,KdgQä*â'¸Ìf|á½ÄˆHNóðµh¢›p²é¡h±»'ƒsG‡<F‚y¬¬±ÖøC9øó«½ÚKÀŽð@¬îƒa/«Ýz÷î½÷ˆÓ$¸|+2‚5%I^~óäòá“äBž¼¿¼\Ëƒé;Õ©19ù÷9Eäðp‡üPhŠ½ÔC´µ·õ/ª‡ÕÚÛñ¹nœ†¶¦ug”ëHwã—Ö@3Õ®9{i†(:Õî<ì‰gl¶Îyn¤¹øgùï_ûmÍ&ÆµbÒâv^7Â9Ì·¾„ÄÆ§¢˜êb‚+ÎžŒYa‘?¿oä)Äµøîñ„¾WØŸEHB4Wƒ&¬4”†èú–}1¬z5¬5ÜGÃŒóqZ\@X‚]h$­àeF¢ÍÒã‚¬ûA¶àé¨Y÷sS1ÈÍ¨^Ò2S~°J(¶^¢æZÌ#”cNû¶f£ðÊ4L+ä0$fÁ-!6"Z¿ì'ÀSo¬ßŒõÄgp[ínüiÀšJé$È}ÿíQ‘i6ÌOJKS	œ€ÓÚÚ¿ieÏÕÖæ©+VâÞZT[]Zæ˜ {^ý+–ù&	Ë»ÄNpÁ€ËÌø^”"})N·à	¢ÉÐêZÙƒúÂaÍú~èÀ¦›m.:`ôæ¡,I?•n Ï=‰ÏúÀ‹…2=TKÔdJÇŸÖŠPíiƒ‘_ªÑ°ãV$­i±aQ2¤N³xúÒ&‚ckÈçý=m-…ce<kã8i¯Ãš±–ø‰‹¼H“#Œ÷8B˜w‘`_Gµ”ê(Sz v¼ó5Â™—«Yè’Á$ÇøGaœq'Oœ¬Œ¨îÀ‹ƒJLYKòúBM©ÙcÕU&¢Ô4q NúÙN´²=•ém9¶…m¼Ýl;Ô.í¥ÍõA%7çR}]šò6qüøóÏm#¿¾þàþm=™¬î“ÛÖÖ›èÝ×] Eö¶ÎþŽQšÈ—¢¤uÀg€O7Åˆ?:ÙÑ1„¸f°æiEÆýsW®]»óÎõ£·'à'Bùðì%?öj
¥>ÈcüÂ¯~Nü„þ,öÿïñØþÒ»XãíþÍ7™SPÁNœðš5Áš®õñx®jÂ¹
¾r£}k6>Žlf`N«ìñ&³)ñÿ–ØPÒ‚	Žý«¶DNýjQÉšcjšIm!¸‡÷•X¼ Ÿâ´/ô£¡šÇÞ™­ªš­ãñÂ¹³üYAnÀÚFlÄÖbD1ÃÍ¼ØT°ª5¶Êcd“Þgø*©iÆynÞÿùoò!}µ.RÏ¢cF)­’ÒÚòìH[K‰ÕŒÖÊ /¨PƒæútJÚä†º¦Tš9‚KMž]0Îj×z{óHt„9ß+ÑŸ5±²¶Æ…uá»ÿù@7¯Ý^D]3ž¤ÙÚ±×e	ø§¿¶µb|7}>~OD1A2•k]©–	±ÚÈˆ˜mÂ45YŠÏtQ ’·tSÖ .¬?Áàÿá×«¿¾õàÖïÆ~}æ¯ˆk¼&Öl />*Z»¤µ‰',*M&†³hSm%|cTä´éz8¸§`šRL²y¾ùÜÉYøàÄ‘©W&K¨]¶šàä˜f¬©‚<¥+y\Èm[{Zûº>P_Îâ_sê¯'®	Þ²ÑØpÓ*˜Œ#Èë~ŸbV#¢=ªØÚl·-YÞ,‘ƒ‘dIµæ}}}-ÍîÓŠÔXŠr Ÿå¹®­‘¹ƒhÐVi‘
–šåc÷vìªÙ¼LÁš)kÖˆ8X#–OÂj7îŸÚvíÛ;D÷kLíëž¶Æ%µ¹©cxt¬Ö×k°ÖÞN
$¬Fºco¯Eg›˜MÞVºÆ¼V9v!³óÇ¥a¡A‚<_”ñ[š·þv>IÖ´ÉE´Â[®Õœà”G\¯ÆZØåTæûaUÜ š¥8t ¾§?–êØÕ8øIî[´1ŽILCw‰9ÎÂ}û}ÍóÇ1óå5¥N¥ßÈb§8ûîŠhmVbUp~´·£„¢JÕ(ÝNŽbÛH 6-ÈmÄa-HkDpî÷•/Ìé°§A†¢µ9œÝwD)²Ž1²Æekk„Ž:Êiß)÷1rØYxf¸š9ÃùZS6V¤*ÔÐáë¡iŠ{ Ë½ËÔ4r#ë /± Ç°«$ã“P"æ‚Øh¥˜mvR©š+uk, MÏ’Ð³„Ý80¿æ °Þ/YÌæI˜¨ƒ‰®ÙÐºæ£C:ÀQÛ‹}ä-LMª³ÏªjÍghY1ÉÏ©x¢¥D#:l<f“
9åi“ŽÛÆKØ|Â\	všÐ7˜AÑ`(¦œ+S]Œk^‡Õ¢šµ¿Å5‚Iâ§bµ›…Ž¢ÄÖ¢`ÒÇgë$¾¹:¬•H&K+£Ïfžµd¸Ë?®›ic2-Y¸/'‘¹©R'««õŒÀ4©þØ!·‚Ðo@±<³'$·~w¡ª6#Ù5Âc'ò…Ôo‚Õ0ä7·åAJßã"ªkh[Ú’7
òIŠWJDKãÉ‚_Wäÿâ=	¼§$„ë½àøõþÒÊ|nÿ~2¯É—ïëh+ðDðyþøqxí\nÓöç®ëý1wêë9r}Û )"Ùî> SÕêÐ•¢‘	¸•{0éèŽDkÖâ,È¹¹Å+Äº¬Ý^¨[2rö*5Ü+hµó1ñ~ôOï4˜flÆúóÏß~å—_Ñä1‰Zsmí?£úôÇ’çd=Ö:6555¤¼]óq´jP£5^ªf>oo•5?QæfŽÌ·ƒ - +k%L4æØqÍÅÝ§´·ÖW]VSÎ£â‹À+åïìæ´º…¨ËšÅÓFÒÕ6”µØˆ¥Åˆ¹‹8¨±ºÊÿïàÑPG%·Ãšr¸¯âÔaR<Eà5+[û`nþïEJBÊKm®¥•lrÛ~B»\TîœIË­¿”µj‚5ÁYžQiZæ"ò„·t²ÑZUJ÷¢éVªQô5Zcß¼IäooS˜|Í,õ_ÖîÝ»§·çÃµ[w¨µ5UH#9®ML¥Mýð_O-)Rö¿RÐÆ§'äÙÏè2ÆÕ£mitäâ 2òõ­oÈ…¼õõÕ¹Õ3ˆl«°&Z#ïNzÎSyO¸#¬fÑ] 1ÑÚ«¤¬Ña5Kº É‚Ã•Û¸"ç,Ýqp/Eƒ0MØ4ù®Ó4»2]/0³‹7‰Ïkl²úÎ4ª…Hä¸möæ2ô–Ýˆò^ôŠ:oNdÄr1¬ùèœCE~—ÖBñšà5Q{j“ÁÂTwÒŒ»õk_Ë¼V1¬=K[óÚ¶˜Ü@µ†
f[­¿vÆn6:|r¹¢öpùa|DÄj„{6eVS;yìîíË÷—oTl eÃØ°6Ô5566<<…®FLuõíëÛÔEJdGO[ª¤·“Îk‡®w¶CbŠžžëõm¾ãæý"5ƒ5§_&$¬ib'+=ë5SŽÓÞ"Û_T½ü„Í„På˜Áç¸§¿Í)ÂFØ¤Õyx>0K1¡…ÝØã¿˜×¢Ó<bX`gGÅ‚tÆœ‹c?'¸ê¦B–¢iÖ…5®žG÷}qÿsÙµ5ô%ù×K!R×éIÉK!LAÒû“b†$HK”ã=ns“Go‡¦Øl„j,Õ^Y·‰R%ÏDFkrT.øšuÎÁ„ßaô¾@—Ó<œ‚´Q‚£:W#Î±«”Güµf6›µó-¡±HÌ‚¶ÙßÊTÄa‡0Ô›åIðÈ@Ý÷“’ð” :#£’ÆkÞXÇß?“­@iÌ4:²ñ*y¸eåJUc]Â3äxo&Z'œ>Ö\Ã1Í†ùy^úkóQ€ïæªÒ¼)køt 9±ZHÀÀeÜkÀ˜|`ƒFJ>Ò@`æ°æÊšIpni‚•;ñU±Cáš`5éù\œ¶ß¸±½GÈ ¬ÏvƒTü¦BÆâ`T5âI3T1P‹	ÍÎ`ÇiÊlûÖÈã‡V9j™qÍ%IŽùKå]±K-ÁÑiM;¥)$KÝ»xSI¥{B«9$Zo´=šöDT´ºÁ]¬íáÙÄ5ƒ5ík­­(Œ=æ¹»°MG˜³I,õ¹íù¶¶<‰’PAF$/tiVoüêqJ=±Ï¿4]8 w‘þÎÛNÏZ¶ç1®*¤»;z²ƒ0êÔ 5¹YrqÊ¶Ñ”¥-+uý@ujß‘sçrRŸÚÙCKí>R yBbÙŸïIv¼)² 1pjihui­ÖH#´;wFÏ©‘#Pëèîê2TûR¹Ÿ8á¤F²#ïí
úÀ’åråó+¬¼BËÕWÞFŽUñZ 5SÖœÖFˆ©ññÌÀ†õ_§Š ú{Í‹_öeP[Ã>Ù¨» f3^#¨î’š~t˜g=²yœ¸¹šŸ< 9Å³Y])Õ$£gÜ<þƒÛ¥ÿ{‰xtga…jSÖVŠ¼ ƒ²¦·ÏçþØˆ]ä?Nc£Ù÷2èjôÄ&štõTÍlÓÕ[«.Êk1ÍíF\\ûtõÂWŸkE‘„Õð«Ozž€ÃUÆrç·L½ö,l†öæfÉ¦J5ÐQ¯hÇ‘	^ 	ò8Jx=;zÌ.,Üùê«wn>¸ö nM~¸æZy­‹7hÞžw½6 ” ltÚ²t–›8«‚5t5`­[-Ö£­Ñ›ïâ£S\\aÝ-upý‡÷û_ÿþëEüu/\»¹úé­Oµ¿òË.Ÿ>m°æ¸f°öÄZqØ¦ûÛº‡;üê,R³ð"iÞ\EÊX¹€†&)ƒÏ¿|‡ŠîU¬’ñ]v	²Vrê´m½ÙH‚´âïB¢n£¯v+Ñ4S•zqU2˜R¥y¶>ƒ…à©%¨>,5Ô;çEj
Ik~¢OÃxÖ	­!¬mÚÜŒ¤¬û[6Y0Ñ²ŽjA‹Ûc³yF¸$[Î0­?I²kÜ¦/HÖì—×~ÿðò®Ã»–O“cÿÖV;m°F2Œ£^µ;–——wUT¢µ1Œ>Ç·OE°FÛØPKÇèèpÿ¡¥¥ŽM-bµ#×a0…ij°9¹1ê´‘±YxMC{5 M¶"Œ$¿ÑZTTI–˜÷»«óÅ¬æj[5pPñš&ŠaÍÂil¹ 7¶Eõk¿Â6Ôœ°5f‹Â°­˜ç
º~ Îë×çì$¹ãko´ïôGÙùÆ»™7ŒÕ<·oR¤5T3™±=³Û¨)PšnOJYÒZ0îÿ†j^²šbÇÞýï[kŒÈT¿²	Ì¡Y€µÐvÞrÉÌ6ÞÓÛƒ9«?Ó	~ÓÉ‚5‡1™‹ ²1ˆÎŒI€4Ès5#ÉMUoÒë¤’í^q–åmM°æ>•
`-Úºµˆž¢=Ëµ54µ5oÃ,n3]Màý)ätÐýÿˆHucLX5•NÖ+2¯W«hÜT–ÕkÎ<ÜÄp›ªb:ÓÚ¶È&’îê³Žh~Ž	s‘#äæ83XÃþq/’š`­©É| Ë›ÊÌk¸«S³VSs£¶µæï`íçÅÊÚÝŠWÖ,O3Ô"þ\÷?q:Óž‚a@5ñ©Í8‹†«“Lùƒ(’)¶B`=Ž¢UU9«X£µfkvõ2¯Gã±HÎKD¡I‹îZs\t—00sZóïùBA›í²›ÝÃkå«« •‘7)ž#J{óy6Ô©Éº*‘jnÚ›ÊÖó.–Ä7éP2±ÇŸgõ —Ÿ¼™ex«Êùì8~ÄéžþCçv¢š¡§9®aNEƒ5ýNÁ&Bù>¥®_O'º¹¦ä€µŽT"ESì=)XÈ|á­C’Øä82ÔÑÓ=Ôj‰E°&ZCX›{çÔ¡É…iÌD}·:ÝÑAé¥nžûx˜»œPR£óùÉ7¥¤qÍgÁœ™ºÖšþÃ+ŸÎû>×€XZ‹¢ÑÕ,¦6ó[Râð15IÓ~r~T#sMâ6Eƒ×¡5±•¯…ÔÚe>Ú©Ü#ˆhÌx’­Nq’ƒÓkî9÷‘g´Kiþã¸öêð­h-®X#Šœ ùÙ€µØˆ¥ÅHÄj¨jd@»'a6ªÖ¸DÎ+x!óäêuYqØ<ø¦úÂÌÜ>­+2í/ÒÔ4)C‘âZÒÍ’ªg´“ÊÄÌ„Ê`­ª,i×Í¼Ò"™ä ‹Ü1$±ñ= ´ 4¶2"ð™;÷s§¨t›ïš]úêAÙƒÝÖæ¢¼ÄWbX{©foÎJN;õs€½¦§e/²46ý¡`V0Ã#gËrÜüHä×ÿXƒ:±¬))rD’÷ëßÿ~ÍñÂê#^‘Oo¹´æ†±¶æ´ô	Ö¦¹ßèh[V†ªýö¸JÊ˜F^ºP£ÿ(¥iXûçÐM«†sYž`Mc¬–us÷6¸åòd«UK‘WA`%°VZ*×Z(D‘Ï¹(~â•k–¹§i¶qJä9`Ãy-¤Aú^Dha‹s'ŽàZOË¦–^Ì!-²9‚µEÊÚ:¦=“Ök2„ÃòQç”kV¨f‚që¦Š<"·Þ¸wX[>vx—¹5Ÿ8M½7Y9‹ÕøòX{óîýco./·¶ÞX^>\ƒä@ív‰kSÃS­µã]ÃSªZhmîèž˜*Ù×¿täÔ9:¬]Wdg'ëzˆMa˜`-zAJ…ÕÎÖ<¬×'<²ö9Ã³0²àpðaÌ{¾ïó1IéÇnÉœØXÃÔS¾ÆoEF"Ñ¹¡3@ìAÂÚN®£³}&´@k½¥š“ö¸{çö³w ZËÒiMxc0bFýkÖ²™‰ÜûjGu“ÏˆçÌÅ)žzak	+´5?Í¥5ÄµÛÈ]&’yÕšµÀ¹Ž¶aFPÇˆí,7›7G~ÙŠ(4°Ðñ—CAšÕ±…Y65-’ãÉÜÿQaà÷ã4)"»C°ÌðËí&-óýIu¡ãù´©-µÖì²°ZY«ƒ×Vfa¶ªV²–uFˆ,å=5ÏE|¼(XvôþÖ’÷\õq?21å7™MJ[ÍGi†VÄæP™Ì`MG™¼85`ˆvLjƒÉø]JZ³ûUÜ:?_n­©akÅr/âÚ}zb[8«XcÃÚëøû—{A]1«ÙsaM¸a¿óeœ÷t7fƒUVøƒ¹E’£¦4n.	®ýk¥––èQ	ˆf1t¿ãa«L‹jä8¨pHA´wÓv”6‹«b­:!#a/H!F:©7Y³Ó”N/dÓÐaíÅ=úG%­Ef¶Á²)$Ä©|w[}V9==‡ö•æ¡Ee^äÈZ®?÷³ãÙöÜN|®H{<·mçóÙ,ðu1­:Îñq\Ùm×»yô¤)Ð`­š2"ÓùdçÚ×•ªN¤’Õ4ÞîÎè?¼üõždÛ©žÑZW_ÿ¤µbX#LY[\xçÐ¡%±šZíŒÜel|GEÅk»“û¨;à%BMºßå8Má=;®l\—9B–oý—U·æ´†²æ´±ÚtsÊÚÄ–”€
ªjm’ÃN#\%Mã¬K€4í£¡ùVÚšëÆÍV¦Öù‡Äx}Z‹­­Î“$9YwjqX³HÀÌ)íß,þãßs#×H‚Œ•5éjqLn(k±?Zií6œæ°fÒš™¿6â1Âur~^HU8]†yÿ‰j–>p¹ÌÕAks1¬±„¯M}«™$#`­¬¤W×~Í±ckÖ[Y"‚µdJy®­é€Ž¦ó‘±H½2 Ù¦ý!JCÄ°¦Ñî;·o?X¼ó`òÁîÝ‹‹s«®]¹f	ë—¬~­ö“uX#–¶´©¯¦`mËÒƒµá|úÈ‡2í×Û8Ò¬F­šAÛE	j£KÓzåC.ýîÖ­U ¬~úHv‹«¤]¬ý%bµÖ@µž‰'OF‰‰‰÷˜“WK|T"c°‰Ü)5¥ —>'Ûw`MŠÍÔ8…áøH0§²"®Ÿ†|Ì9Õ7@•„ˆX,3•÷ò”TZ9¦Èhé²Œh¬=ß ŒIßÖ;§9£A!òÂP«8¤ªu·õÍ'¥®JÎ÷uÒ…¢¯î>õF-qËGÒ³«y0àçï+Ö<²uGky“Î†ÝtG[•o­¡Iö&­ÛÁ´e¹ò¿w¸bù=Ñšrd@µZiâõ{k'ïÞ=yùäòý†ŠÃwiŒ]Kl'’LÈ!ò\†»»T¼0Mÿó±qº­Q½ÇîKõõ9ÄgšÎë×£ò=PLÕj0šëŠQ¤KeB4Ò„Ø0¥±™õó:×»«KÎT5!Z 3FÒÛ:lÜíÍh5ÔÆC’Ø~ +6Û7:‹…´XfsŽâÔâžk¾
M´ý$?ìtV‚Åƒþ;ý,¬<Aj^£æZZ‘Ç«Ü6² ŸÏ½¼­Ä,Y¨F˜¡îjÓõ4›¬¹Ê&R;jý²A5Æ“b¹E5#±"ïþà+k×ÄkgÖµµðÐD5`Í¸ÈÍ…4s†æ"³<3æ½v 9Ñ×¬áîW©)R Çƒ¿»[“–ÖHD"[n6p0ã×yò$¹”zþ.ž”¦8¶âerâ±™Éw3œŒ²FlþlòEõÊpÐaM>l°w\ÍLd,\£Ñ5«Eg®¶°‘Ÿ¼Í:²WxõJ*Î6´3yÉ!„ˆ(,Ø÷×ÆÚÂ8
Ø°Šdëç²pÌìùÙóælÁKDÁ½ø?Ùl!©PÃãŠ¢µÍT©µ6ÃUÀhÍzïØÚŠúÞÚ»E°æ¸Vì©ÞÙwËéóýê¼k×‚X„2Ÿ1®,óòµäÓÅvñsÔI¦µ1á€gehe‚&õu…¸¡jMbf*ÅÆ8Z[¦£Ñ°îé&/®¿Æâ57QƒæÂ¿Se¨HS–+zY@5÷ñ74·Çð5lGÉ3G^ëDÜ%ÂM•…ýƒb»*òü’IL”2˜'µÓŽ‡ZQb*™•uÿÊXNï-¨ãx;æ€:]mÐÛÒØ‰(:ÇÛ 8»óžp+¯ãÂ`ç¾$ÆLÃ-ÉŽöÛ0îÏ#¦òÎ¤•5ÒÎåàg¿ÀxŸòÎ)†Öâ4È×‹jÖî,ðÙ(ÞÍÖLíñÅñòŸ|¹ë¥—^xÛÇŸ˜ë»··?ç.œŽ v†+ñµ›~}tóæMë0ý×3Üì{[Š".ëÚÚÇv•ì°öd„òu+*ßÒßÒÜÕRÖw©i½Ø75oVv£aª™õKSv.#nÒÍn,¢¯‚Þ&^Ó¤¯Xk’ -õÔZÁÞU³*3UN+PÍaíÎJ$ÿþMä¤£·XÛˆøQZŒ¬;A¢¦³Än+YCXÃÇ\×(bþŽüéŸ*xì‰,.Ì_]}
Ö´ò­_äàR¢5‰k°?B
Êpôd¼GòÁVX†·°œ	¥?º®zøÕ-„ˆƒ‰ kpMZ[¹}ó«Å;×¡ü]!`§?8¬Éê”5Ù>Ak†khkÆjÐšÇ©¥é#oM|2Î)¸õ˜¤ä´‘³ÿú!FYóôð”*›™ž}ø[Èuõëo¾þæ‘­©µ¥`Í¥µ¸ÕšbD5rOÄlüÚC…lkVd@	¾"‚áHV–|ÿYïˆt2æLYƒ·
šÄ_Äóã‚E ÃLõâbž-;¨eiû Ð[Uª¯Oq!t_Mfô/€iÚ)Ó=0r¾Q„$H%@F€bK1¬iï=ój}ÖDzßæfôµ¾>:’D_rÞØÌòµòR5Ùžnÿß4H²M^ó&m¬Ek;jw48¶UF)kª%×e¹æý÷NËR$*YãsÀ	im¸9+ryùþå“µÀÔÔÖÒÒ‰.|­{5®5w´Ân]Ã#ãSÃÓkãCÍûºÑë{JZÈ„´f× lÖY¿“5eÚ;3uY3ZëdD0âðyX3Âj„äâ²lô›„‚}6F&¦aö©\WVM{µjŽJAc!| ÅÇf"ÅÁ”¯¨…%ÜAÃ ßí?È6ÚQ²­³¡’´âb5ŒEÌ€LcÅ®mc–ÓjmùöçÞxX;@ÉšÁÊ¬¬qAJšÓdË?£•ég®²Ñ4›¹¹£
ØåèÂ`íLl²‰EBÍ³ªZó[0„ü3p˜É_Ä\A¬íµ±^®"Ú#fÝ>2
¥1*ãPåkAL#»‘ÐÂš*áDk7½Ìè–šê2Éùžs)70FÙ°šµÖöÄIsäÆüQei“GßÍÌb¿ruFeiÀÚË³W3ÆiæIc·•Db­R°Æë¹’@qa;?/}Æ*ïrí†ò!´`ÃD™‰>Õt'ŸÓ¦¸;‡@35öfÞÖ³Ë”éhÌDAkóâ4¶:›#Ô.›¢9´VQbÅj¸	™Ý?ÒyIi°‘KJn dB5‡µg¹AÊ’´òß¼Z^òT¡Zkl4ð™hc°¬ D”þ¼¡7qçF°ö”çéž®\ËUlb¿$©—ÕU27Ó46vnÓ=ì!Ü„ãœk‘`WÁÈ‚³ld‡,¹16‰.om¤K…¥H&Ôu3‘mÏ´Du¨aºÞ$’È=ÉÞTIª§¿T+À`<2Xi!Ûsèú9, qä?O0hkÓ7¦²„äZ´í:8rô¹soµQÚ u¯7Ïo;Ø¾¯#Ù×³ÔA Œ‹…ùžS‡ò{}xdÿ¬>Ñö‹_dNêïÃ†L‘ÖŠ`ôš™„Ö®]›;:lïÁ]òÖ§™Úk¯áâø>öüØ>ÞûÉë÷î|“µ·Õ¤¤Y—Ž›7?ú+iÏjªÀþ+Èk×­Åy
ÑÚe[úá×®áþ.’ýòä¾¥ø@hŽ\ c‚Uƒæüë‰f‰¿xØY-üG"ˆãLÍ±–ÐÌnâ¬Ì<z°(X‹QíßÿÅXÚ¼fba­Ø`$$An(k±?NimaAVÙ.¬“ÞVk(kM\Ý+äê#ÄyE1°9­ÍÌ¬^˜	—çb…ÍÅ5‡µ¤*×2ím½ë³8øöÂÀZ’{Ø;]Æ•55T“Þ£¶ØvËœ—®Âi?4!ÕB*Ÿ&BxÕ
ïxf+w_Ã	RŽêÒbÆJƒtiícÞ›Ö@NP˜‡“ÚÄÒÚnBe#ÃT±=æÄ‹¤>N|ø¿><õÖ‘©‹#ìOQ†­É>júá7ÔiíÏþæÁGÏ¬^¹çAKkbÃ',gÙœm+TÖò©DÂûé˜q×àj‡5y>
Ä«±ÁNÙZ*Cnä¯˜Åc¥$4}€æ0k/›’ë8šåÎœÅ!QÖS<UZÚžË¥I>UÙŸcn¯ôËzãBÀ3§3¶y€jl!ê·Åˆ4­agïÿcïlª<Óvÿìû3ˆñ†·0…Ð5DÃêZ³Rh€ai•æI³´¾R±c©U±mthmQ«ÇÌc¥1´ÐŽb§‰Ïn+¾Œ3}s;l™ažàN“Î¸Ÿ¤išìßqž÷ÅíšqÏÐp²Ö}_×ußk!‹–{ýÖqžÇY¸¤™&Ø]]Í]ÍòilL¤û¸ä5¬%ÍîÚ4ãîñ]Mw©h>\Z×²|©:Y7¸4‡½H(·Ô`mWÉ’•ê©óò¾›lpz± líçº¾“iEèÀÚ…åŸ_^£U?¹ºz±ºz%96UUÕøKV­^½òqÌF:‡‡qð>uR[?­žÞ}“…küÀk	)k’Ó Xu+hì¥œÍ¸¬îeÏ„—ÑQÁ/2“ò*´ZŽT:lÇa¨&”«5m4”§¹¼%Îá\ÓW»ºFhêÖl"ß^$ÃÑxØ}WŸ@Š†hwÕò`cLBG%¬¹ü&xSô·¶~YÛÓºu+vs›Kç6ÏÑŒtÖ 2xG¦üÄEÛE©g¢7CžÖúÜÆŠ å€5Â+ÖLYc”5îDª…fkÏoF½ ^3T
°Æn,†5¯h»Dk¶¡ksCH9;ªàLÕg<™Â;­‰¹<¹‘íGŒÙüT°¬!Óinr;ñG/ðjðÓ× -bß?F«´±š©)¼ExÖÍÍ€c¦»ªq³åœüp×Ì”*²Bùq3“îo´!…¦Nj¢Ó~pÐA èjšyƒM5tTaçý×¼67Ö,ÜDÈ.6ƒäìÀqÖYM;¶Ñã&9¦£HhÑg8ú,f’IÀÔV²|%ØFV$ß¶ëþ¦ºqŸµ|3ÈØ`ä™xú¥.¬òïúTå]°4íhäÖÏÉ9.ðgÌªž ÆEÑV?„ãTi#3Ñ·™ð–à©Å_ÌužÃšÎ¬˜2´¥vØÁÆßÙÌ43{Æ@UÑ¸v¬é7¸ k)î,hF†
ˆÆ§smOl&#[!ë‘lcCA6[\šíN¤»²x{õæH´¤Æ\µiã•=Èf=›ÁÒö‘Í™V™^éÏ‘þ’ì ?RîGõ‰UÃ~êÜZ¹°çú3dQ´#ÖAjmÏ—Øq|`<•m¦ÿÈÀñ!ŒˆÇ&ºñ
Y?x°Êµ|XsçþÓçøŒ†²5
ˆ±i„èJJªßÙµkß±×ÜØ÷å={v^ß¹û©Ý»‘Óö¿­@JãM	oN>üp–`ûá,7ËòlH7sZÃZyôÄ¬¦ÏR—!«>¾eÙ`F•KBËw¬d°»QÉZ¡™7¹&”¨» £É‡st‚Vš:-Ðšip~²§M6û)ä/yµš‘šÇ; ›Îó³œ¿=kùý°CÑÚèÔbOìÅXŒŸ¤´f^kç@5nÄš1ÕJ4ÔM*”¦â—«U³”¸Æ5¯Nk×&N¿ùÆÇœLÄ¸–´I”?b,–Lb	I¤“ZmäžL$ ¹Aöö²hÆ#© k’{d$ìï1X@bÓ:ÛjÀK9Å+½¬^š?{›·-3×Þ÷ÒÔ”`?ÎP§ÁšÑš·U1iMìhm²µ·Þ>râÄ‰#ËŽL÷NŸ8qøGßzë‘#WwŒ¶“ÎÎ_ô-¯`èÿî"<Ç«ùøìÙ+Ÿ}ö1°öãüˆyø1ôZ#dãaßôËçR\d±ÇJ¶YêcŽ+ZÍL×R®½9µãRŠcWÀ<CŒÜú1éÒ[ø×g@X3íhüþYÈ(r9Ê)$Z¶ò,ZÌÂµ)¾Ò•~é^ÍÐ½ ƒŽ&Àsa-0š!š0.N‚äô<È¼ˆV½}T©5wu±G]ëN6“I?ìÉ¾>Ii²á\[@2ec·ü Êò£H²¥ìXÈ“TÇ¶’Õ»V,Y²ÇGìE”Ãšä5ÖäÜÏÕZö"x‹U+ž\]µ|Å
ø¬úÐ¡ºªêÕU%-ÕÀZCasçÉ- Z{{G{{{×ôôs	þžl^+aq|­Õ¨éµ03Hy«$[G\P«—ïˆ^3fâ/qš[¦v¨>•1XÓz†¡qr2ö¡1Z¦¢'T­¶5šŽ-ûC£îÔkÛ…0·x8¬ÅaKÑr°ëðhHzdCDE8ÈÏßÝù‘tHÙ0õâ5s[ùÉðžŽõ×LºÙG°Q§¦p`Cl#¦¢ÙBN$Ç÷p¿6NÊ…k±wÿSlI„ü7vkÜ…kªYû+Úø¥t¬8ÁQ«cú×hBpT1&tóÕÉÍéÊ8Fˆ´X"|™S$ª6cIöÜF¾D~3IÂ}FÜƒÄl«)›eS’9FÎ'Ié¼§§ÀÚ°uUébÚ¹9˜Ì$´šPo§•ikJp[U¬­•Ï‰Î"2óLHc7"4VsXæýVÄLPlXF˜*¶\ŠÒ–%šåJÚz¡÷“|6É\c&ÉÜüQ&VÓã½1¶ŽiHØ5Ô-µîk¤C²¤!§1­já¡fyá™<XËÖ‚äÎ‹ÅÅ«6,•¾fÊ7Ì=¼øÌR6öÓ°¢N£®÷ÚYŽg>ÒÝ~r;Ù–·M’Ö¬-‚ØË^|ã1ÝlçågêÀXÁÃLl-;Ý•K4ó„w…igÑ’Sšÿ"	ÛFÙsA*-Gã#qé$#mø§–šªü&	žÂ75À¬mÎu55SÊ–ãÚÜK16Í™\6©þ*]Ï=7^›Î(ºgdÇHmNª\®Çh1·RAea­_%D9K6Óð¿²¯±7ƒäÚ^úÿZË¤ãCDe6Y9p| 2×3I\ÖîýN;k-ÿkg&Îmé<=qî¤º©Ñ9»šDIRÉ}|ã(Ë}Üy»Çý¸ˆï*À³³gøáüÄì~ `‰PÝ†mm÷¯wÖ^
ÒšÕEXa„±Ú²öæ¦æõ˜Ov"›Ù‡–óH¤þ+DTónÖŽ^ô‘ðœÈ&ýg$ãKÔ	v’‘8®EÐ˜]ÉjNsÍß2]MBÚ…¸X»Á}öÚüùù©â ¬5æ×¬©ZÙï"¬-Æbü$¥5/å7UM÷Q+½Ÿl0VÓµÕ‰kÍíùÛ³±•l 6÷™(8}ëÍUy¬†=V±0ÍU5ÏÔ¥€Æj8[hæö"‰,yyÀZÂZ®•§½~M¬!ªÅÐ–õÒo«âË*Ærz‹”"M¦æoÍHc{ãÖTÁ™[‚µÝvÇ‰æÖkekž¤N8«	Öº½²X“¶väÔIê×NP™öú«'ö~Käà«(i§^=rbÙð)«’í-%Hþåö¯n_º=?²öñ­_‘j¬­‰Õ^­©/¶P-|¿iõŠ™^Ö›lnnNVä$¤a†\Öy²CœZÁ¼MféoýmÔq÷Ák¥å¼ÏgJ—ë
igòã¢a6¶<‡*ž ¶²¬V!í-ƒ™‘™/a-BN:Ýš•o?¿
Bù¥Èj*K#2` Ž ¥í0 ÕœÙB¸rfƒ‡ÁÚ¸6¨N­Ý2ë‡×0aÔ×¤õu5’çÔÑ'Dy±d˜ŠÔª¬…X*<È…æZ^¹|i‰X­\±ï¦z¬™¤‡}ëñ››öìAZÛ³û@ËêË×QÕà˜Vuè•««á¶]ÀZAÇ–S‚µŽ¾®Ž| ×¢¬Q}—°ÒX­V[Ihk[kÖ›WÅEFç´úÚÚ!C5ô·£QÙšqØ^ecéhe¥,zD¿ÇŸ(‘Ð–ÖÀÆNSvÏÆòM?˜ûÈ¿Äjù´æ#VóBÿ]ÅÅkAŸcç¶ü
¤Šå§<ú°j×˜=Ñ¶U8¶™m¬ÏQue(ä)a(!2‹`6³ÄHr =5R`M¡mPÖ×¼hÍ†,*ŒØ\Y›ÿÔd2ÓÍ¤‹ÁMš«Ö‹9a¼†våâ™RÐ¸±&EÌ‘Š Á¸o1XãÁ¦µ9ÄÁ[¡HM‡bXúÒž“ïa!Æ±è°¦*7¢‘žuY£OÁºF/k£ss^ 6“RÝõ¿Þ`õuÜ¢€)ÉyœC´™Y5£ª&FzÓïnE
k²ìNï‘)¡Ã„É5@ÄôVj€Ž.”#§y°gâÄ˜õ¸þKàÅÎçS·á4öÀÂX˜dI7mtùi(àðƒ£9¬Õ– ³Ö-i©Æò¡5kq$Ç±‚œ¼xý"ÂÚ‚—SÇÂX‘&!Ÿ‘1!™¿ÑÏ7,Ï`3ÁÜ|]¾¼÷æ±°¼6PO:Ö¢þvhm¦wš1‰÷Á¶ÂB˜K¶hbY4}û-Ò³ Ãwä–n&l%—ƒË„º¬*9ÅúR#°•Êë_(×G/É²\ºÊf5‚t´XilêlïBlÃ($—âÏÜÁÁÊ["•jæÈ/<qkÇ»³ýÔ'ú::Ò™m`ÛP—HfdwÛMursª_™ýý Z…»‰djàøñÊÖbh‡ÓšløÿÖ µHk‡¨ >×òÊëjhjÇ¨;VîãÙ„ü:µQêã<ñá»œ=ï°öþûï³U¨jÃ?[ö\Èý¿V«l?ðÞV½uèÙ“dÚ kòëæJÕ>=´&‡5
'¥Ÿ‰Õ°	¶”Go‰]`ÔVPglfxæõgÐ›fÀ›AZTÎBCñš.·¶ô¥û³k÷wîß¹qïÆ¶+×fÏ_+þ—kþµØfm1ã'iiUk¢´sŠšQc5ä
Ì·¼÷×8.œ55—Î£Ås'Ø³†k¤AŸ>]S˜Çj(kÐ—G2i‡Š¬ÏZ’MšDHø&±Œ,H`E’ kk!7¾Z³â5è¬ˆ›MÄ¬±X7*~eqÕZùÜÀÆÇ©oNœ1aM°¶ý7tZ{ùeòÜEkïZóÞgq"äôð«‡kºÙ{øê‰Ä)ßÂ…Jr˜ªÉ‡Ë]ÝAÿµWY?|ø¿þë3h–‹µkßâbð#°hMh”5kí¦ÀÚÊ]()®näÊ™¶FØmÍÁ:ŒŠ5WU6·mSßëWÅþ²»µ•	Öôvš’½(«?*ÌÖ*‡À4~õØ+‰}ˆvhv½Ù^½M@Ã,g/.¤T-ÃCÌfp¿ö†k¾APÓJ,°VË‡µ|nKôÕâ© ¢«¹Vk\›ä+bŽÖ5mÖbvSøöáÁãëð“ÍHà¸¨Yv]Õr¤µêÕ+è±VRòèå›bµ—baÍ"‚µ›—ì¹¼áÀöÕ¯_¿ ©U	Ö@µª•-UìWÂjÕUËKží<uòd'¨ÖÕÛ>ýœý4´ÄæGªäsåqY^ChéVqX«&{G"Û~Q0X¦RC/ZCîãÈÔ[Ëgd-£7Ì™LQQ$±‰âÌ&2òˆÙR!Ÿ3k¢XÓÎ'î™/¬ù(f4„aþ
±)^«ßûr}}T;§4NËÿˆj`›ö°¹ñiCí—_"«\&·ulHšt¢*-«Yãˆ›B*RÈ6Š³ÈÄ«±¥nm"Ô¬I_³H6@šãšKk&¬ª.®¬¹¸&¢‚«$OI ²Fh^Í6cÍÓK°æHÉ\„Ä1c5ŒAØˆÈ ¯À~k„Û@¬²Â]±™Â}(¥¿lõƒ5AäVXÍaZ›:CöcÙ^ÖS­,7SC¡Úw‘²6SZ#}M)“²©˜cÉßÍ_
Þã"£5¾cQ$V*›–ÜVðXc²Œì¢ìö C±R®}lØOhaëÀ/#_æ,#2Öì|ï±f€æ¨f¤fRÖ’º¥â1Ð[M	ùÀ™Þsn§uUÀÚ¿l³«á¹áâ…U¯—ÈêÄU±  :fiÆj\|FÆŒÞœÂñ –CDÕj®¿Ù@![©-<Oü*GÖŽ!o’Ó|Q]ìÖ¼”I‡Ùà	‰ò­¹þ¦3Á~OfýH@j D§_wÿ&÷†”ØFÆcÙ
ä²œÀ-ÕØÔXD3SD2‘|E*“Ñ)£0!™­/ðx_òÙCÍÅ}(lðIßµ½}ìvu¥kíc¢úþþ.:Ovw·ÒH&•ìkO –“-	­Uöoª_Û'kþöLý6j¯4àìøñÖlvä¸ÆvÛ18¸ž„‡5­ý£äÄ¹3Ÿ~áó3ž~òÑ×u¯O>ƒÛÃÁ§H—ÙÿÄÛoü8•"˜F¤Ý¹óþû½oÁôƒ÷ÏÏÞ¾vþì¼êìkT²#­éÓ[Þì{¯z#oukÖÍ‡è^6¨Ëóú5C“ï# µ¤°¥¥ªŠª5™=BYâ5¸¬ X×4÷7?]7ó)c;æ°¦[Ô´0²ÿ­¦,òÊ•;Žjkˆkwµ]seöÓÈ^d¦ø!kÜGùZ„µÅXŒŸ®´fœFÂ›:ÎKê×Ûè‘·×ò,Š×<X+8½ê›0”'5ò4¶+¢v
K8¬±U$•‡—¶`(¯fJ€40sVãVÀÆ,s¾UkNh1¬Õ(e¦üô-ÞŸ]š ?»ÞÝkÏ¼øâ±}²DÈVr™ŒLOqM¬)\_ëë:u’ÏõÚ»§9éÛ×¿å¸±ÚÕƒØï‹»ŽüõÒ¥ßÿîãÿþÕ?œŸ§ÿÜ­[ÐšXÍimß{¯‰Õ„k{û†Õ†OÖå`˜–1ðZRöüÊ¾S0l‘¥´˜1¤„3ÒM¶åH5ÖðZÎd*Üf%ew¹tÕçúy+]QŠJ¬e2¹!ö2Ì±+Õ…Ù^'^Ü$..\Ž©5‚€.ÃéÜkkÓ¥©J Áa´¦¯à)b¤Ö0ÝC`-™€^jÁ–t·“·®f±‘À±c+¸jùBìÐe-àÚ¿Žñ5j>‘Éwƒ¼FŒß µ}pÚ®—_ÞµtZ«Å°öÇ_ ´‰áp9pùÂu!¯¯¼xýú†+VBiÕU+«ˆ«W·Y½¼DWç“§NVÕ5tuc	¬­N?òa¥ûö[y^ºWÕiÚP×†4l@VëõÌ•þhl†1¤µ¨8“Í"å”Èˆ¾•É	Dè²FlcO„×ÛœÎb`³3ÅBÉ#îDLnAE‹‡ŠxE¬Ëõl~"ÒâÂÚ×l›b*t»~“ß¬‚"í¬úœÄËÒes›û·Ö¢‘ù¼8Œ@[ik¢5ÁšÖtÚÅ3;wNLL`9:+kb56jl½OvœÉ—Ükˆ 2öÀÕ˜ÉeÁ¼Ÿ‰ˆÃ—1OYÔ17äwH0'°Nif7§5=’0áÎ-"õ[Ðãý™¸)1’‰b,J±äˆõ)X÷åŸ×m‚ÊpáW‹ˆkcmäCâ+¢ð6Øk KÕ°Í•Í­››¬™2šÚ_{n\›W29}¹°ãYzQ‹!ó‘•6°¾Îî,Áš¨…©ó	! Á>Äsã$G×œ¬‰‰lÎ@Öqp¾àdƒÔØL¤>Êy„‚ Á¬¡¤‘rÒˆbŽaÝ¿S‰Žk¯YÕ.Ðh­¦VÞ¸Œà1B-Š"]*°V>	ä®=(eR›mhk¡‘6gØ#‡5FÌ¾J#Ä¬…ÔËûLUàøhYþzd¤µ1ÓÈužÁ"©c›xÌÂð:Hnk:šÁšæGEù[…zsV°ÅÆŠ‹L¯}:Ôj¬QZ–)-km%•‘$¾Sfh$QÔ\7)¾HV¤ú{Ö®Íl.jnäoàúnþ8aþHùj®]líP}®-›Mvu«6½Fv¨ýdb¼›Úµ¾µÛ¸0AfCCP,7 `N\¶ž´&X{úAXãÿõ‹¸†àòxý˜²q‡º©ßêöí8EªEíÝ·ßýÕü»o«@Í9Mñ‘Å'¶Ú>ü€‚/¾fy»ÂÉï¾ý¶`í)ÕE<F»‡÷žöf>oh`-1Èg³'ÉiäfYæ$òŠÜC"EÌ)Œþ©½¬šÏƒrÆÖ{«1Íl-Þó×\ÖfïÎÞ`í›oîÝ»åîß¦FïÞ¸mêÚèšo «å§@òåªšxmÑ_d1ã'*­!ª]8'P«‰ªÖ&5‚~Žvñd«¾MóB4Ýo°!<WÈK“þg)Àõå©5jèveÏkÍT VÐ+@ëåKWÅl‚ðÀÈK8-„R +kIàcH Ä%â<H"4ò« 161QZT3U~ÚÞš]ô¦+*(Þ¾gÏM.â(k¨]Àšÿ}ÆddïðúiW×a±D­d5‹e]\K†Éx|6ÝÚŽÕÞw¾=røäá«fCrUm<èãÛ·ßüýÇ·~Öä:õïo¾	¬I[‹a-B’CIÐ4fÚÇc„­Ñ†4ƒeVJ,©œ»øƒelUŽ†©ê=qTÎ
ov57
TWìþÜ#l¸NCo­ÀW®Âßü+ÍE&Ïþ"/s EÄM46mU(ôÐðâÌ¸žÆÖt´Zàm$ØAšÜÆŒûH\³cÛB$[•Ø[XØ§’.O‚ìn¶®ÕMÍ}D£0›ÁZ”÷¨€ÕœÖÂÚ¿
‡5Ù÷k=AÉÊª%|Ÿ'o^®^ñ(ªÚÍGŸ>ö"†ýkAXãŠsÏÕ«ËÈçÀÚçÕË««ž­«jhY½±JÑPW]MþU3Å1ôÊÞXÕÒÜ×½~^›^ß@Y³Ÿ˜Ý`j¯†åAªßš#‚5ô5ÖChGÈ¿_b›Á\\É+¾EÉŽ¹¢l;W5}iÁÎß†t e`ð“;m-"PfüÑ(†µ0Ê‡5r$ÍRÄWCÔ÷oÓs‡çˆó c@³]ž5¤Ÿ•®Aj”ÇðofŽÖÖ¿nk
KÈþM[kdÓ«¡©1`ëqÑ§£ÄÜvš»'Eêóö©OµKqÍš¶B³€k|¡«ªkÁ‡Ä´5Áš[‡ 9mf+Ûõ‹³XÐ “ÈªÖœÃ´Öï$­	ÄX ÃšXÍâÒ‰B¿È@r+b"€Ó4ªÝ³o¢^rÏ¿°õÏÀÚèÅUpÞÜ˜œù7ÀkÖTPc§R:Ã;*Ø*æf”þXÊ«
'o ÂŽÐûF"6€$| M}ÌÄ	$´c96æðaD¢#V3?*¥ ´®åÍÌ"Ã¢r}Ç'èÿà%,Xc·EE.HG<·²5DÇÂ…ëŸ_¬q‹•µ¼.kÄ†‚’èjÂ*r<)ÐÆ"êüœEØiØÍ­«kœ×N+Ž¨5
-e‡ù«Ï†ˆÌuÅµŒ	ÆXÔÝN/§ÝÊ,/Õõ2H™Ðª[òóJA‚…Nœ<ƒ7ÃæFT¸žÊFW='2 ÖÚ$å6KKËe@6t»”NË’ù˜«õ—å¶É•?±þY2òRCC	ò Rk‡5’…œõärÉ.AÖwg¶aY«ëC7Ùàõõ	ù³}íãXUŽ;ÇÇI;Hµ‘·14P?$8ª:>Ø*Û*¤"X£ =ÎƒÌƒ5‚_1T­]§H Ö˜U–èiJ~|w~öÃwoðÁ}Ç4ÑÙŸ|ô	·î¾ÿÉ'ŸØú}Ë:Kð*Ý×ö›ƒÿžgn>vì½cï½C]Ä·„W),#µÃ§ÔƒÝj%EmKÐÅTæê²(Ì»Y3aJX›r"í°oÐ ½:fš(¢5/èlf¹=?{þÓYXíþ{FkûtêÚßîß¿ûéØÌÔ•ÛkB¤—¬åãšÒøZ„µÅXŒŸªÇÈó‚5bÕšsçHçCšÇQû[êdƒd5Þ”,H@íŽ»ò%ZsX»=(-ì=4p‘Í	b5%@ŠhleYXú§Z™Ùœ£6t]MEUª¹ŠÒT°N¢Èå³‡¬ÍLLŒQkqzÕ-`íVÍtµýÖfM°ö¬ö‹(re´FÈ~ŸÏ÷¦`íàÈ	¶.­uMÓ}íÄ‰ƒ ÙÁÁƒ;–½õÖ‘½1‰ÜK6ä²«W¯žÀ)ä¯ÿî³7~œ¿ýãgÏþ(SÖö¿ùkÄý‹÷ýéÕï×¼‚™«	‡‡/K™±òúöÞÍ¹î>]ZÛÖÈwØúÉžÓ{r·âãe@8£áM?¾"¬%¾®õà˜JñÃó©
àrâ/`OÒšœ]X‹ŒÐÒT0èNpO«Ùx«­V¦&¤y0‚%ØÔ¾e¯Ñ4Œû«­åî3†ðYcÓÚ¤FhJ)í±GÅ>a•ÍˆHI³m 5Güæ‘n¾¤NLô[ÙV¶Ø¬†.&€{òæ®•Ëo¾ôÇ—ûù1½ƒÖP×œÕDkPûN`mûž»÷ø\­˜vUWm¬:ùJ•¬EñD¨kÕUí4…¯^ÍÊ’Â^¬ ÑW»ÒiÓóS>§OøLa¹¼ˆìÑÖ¼ýZhsÐšås~ô—ØLEZ°3oH]ÔŒÒá¼ãšúHl·I‹µ²¸Å57hg«1ª°ËWÖðê'tzXx@hËó~£x—kb4ÀLÔæÑVÖ*oÖyó—ÙÖ³uî	lü+ÚÖ\”s?”Ù<.¤A2×Ê„°z€3a|Å}Ö¬)6»ÐV‹‚u©j¦Až©±hGˆ[¡öKæû:¶`øHd€5 KÁqÝyœgº™‹fZ„ËØIaÍî:¹Îê¶Ð™ÍD7¾ÃØªFF¶zÃ6oÔ-H|žÈ_þ—î:=…²F£ke=^¨áÉÂŒÐéQse32 ÄydÌ`­tÎ`U-àZ™1áÝ·«= ÑDmP­…f–¾_ÀB{ÖýhlØo’è!”A&ss]`Â§àYkøGÚ^°æù:Dö®éd8+ARån2w¯r§=®I«€4næ!"4seíX^Íþ#ø³jçÎÑÅ‰oæ¬¶ÄæåùáÙõ>ä†„1]<²ÈÑ5d“¸§—Î W[¿,Ù$Ùì”Rê<ÕQ&›¦žùƒtã {À=ÄïÁ½³T/½# U Æa‹bqÖ43ýQ++žóLX°-‡~Öº™Óë[ûs)Üõõ-89ÙÜHŠ…:£mÚ”I÷µ×$S¹ÊÚöÇ“½kG;JÛøÿÃ¡mT²uóáeWš|Ò¿Éw_«êÛ.êÒ€µŽnœ!+Göv\;Î_¿¼q¹:NP±fÀVAäŽ‘¨­rÇ² ¬å­9l¬ñËECÛùÌÏ©»™ºA?!3Ù‰˜Èÿ¼ó‘Ç'ß}÷Ý÷÷¾úŠ,Ân@lZŠ,	k9¤LÈÝHkÛ_zéæÏS;´¦ë³À¦a5`ÍâPÝ¡––CB¬•Oºs·}MsÇ7›SÕ¦s'¶&E	¼°á™Î¶‰N%¦nß¾4z­xltÍmêÔ`5¤µÛc£wïÜû˜6smv~4ÀšPM_Ô‚ª6º¨¬-Æbüt¥µÿ‰ªæåMZGGYÔ†ö!ŠKf(+…ÞÂ´µÙù³çg/]útòAÏþFÙ‰øÐËÂX…j½­òîOŠÚ€²òTÑ–Mg•êX[+U-‹À–n­mµ\Ç43÷ð—KdPÖÒD~›5ÏCñyÑXK«°ìã[çÊkvƒM¿•½v7Ÿ‘²¶ï5ik«é¡ü
žrßoÇ‘jX•dƒŠƒž ÙœÖt—†öö¯~qð¹‡U½†“ÿôôÕ/¾8zýŸÿ{äßzããÿõÙü?þ€¦f# ¢`´ø?*ëÒ`Ø«6kNkÈkæ@ÙÝJ%;·tô¦úú**’V|ÓûsÝEjÐ˜½E²Êú±AdÃ*·dc5‡5BUjú ´>Cm¸&xËêíqOpV+Oé¸ŒÃlÈpe.ð‡*Öê#YY#4Ž?V‚ž¦›{Šx¸Èæé}…}½ÝðÙ]îÎsI\kbì°æ˜öŽý¶‰!Íï‰’–å%%ËÙ—ø®t\²âòK/_¾ISò›7Cz”Z\²¶GR—s`uõä54¶]+VÐ»e°V½q#âekuvž¤v5šô¶¼aKûððú-÷ñ9Ccc·exòÓñ%X3\ÅR fVý¦¶IaK·VÊ^¤Þá¶Ç<7Ò30.‹cAX#„d6ˆM Òlð+lYˆÓ5}˜²æûüdÇhG`ðOy“"3¯DƒÂ†iñýLÁ‚Ò!5ì¯ßZ[ùÈ¦'([ÃŒ £Þª7˜üù§Îp-ÀÜ`M-±/ºÞ†ç€ÂaíßƒlÆÝÈ,®W‹¤5£8E¬¬Ad ã™Ñ–XÍíïuÈ@02©§'ÂRë 3ØD1f†WW¨\ƒÔÎd~§IšG¬S çhÑå4sáF˜±þ™àGÏµ?	¨©ø/·frc3eëÖ¥±¤óõ˜Y² °Í••Fæ"käÖ?#+È2l"7Ì¸™{Y€´Š°G«QäÃš†yœàs$g2S—{8™ÈÃ&aã²‚éf¬¸”fáT¦-Oó°F™švÖ![ÿÂG¨PˆFóáù¤«51Wsì*`‹S!Oµá™ëUÕ¸‡Xd¬¬Ë¯YåTâwa©xPßS;Œ<ÈiÜ£kúé¢ÏñÅÆÂá²¢¿<zD5-šJÆ;+KK76:	ÚKò@BŠ#Å…×Ýe»¨ÆcôëCVKò†ÓDz§9B,üò ¯dÒiOÙ˜É¤?ÜðÏÏ¥»ûŸhkëO%2Èg ‡éŽÖÑ¬:Ù¦kA&ÝÈ_gºì@zúP5]‹«Ho-!vt >“§Lcg{óø ÙtøçOjÓºÓHv<eW×âñƒ½ÙÌøÈ 	9|EŽ‡PÀla´ƒ88ˆ„çA:¬ÅÊšpöÌc$BÈ¿÷©XS#ÕÈp<oŠÚÉiŒöý7ÐÚ7÷n|÷Ýï>’¶öÕ=†ö¦åhíC÷ñÏpyKÀ§·¢µ¨†]Mu€5jÃ§¦—uv.ëõ~×fëX(@sEÍó•¹´&C6šl¢“zÍZÜ+ÛxÍÇÍS³ó Úµ™Ñ+k¢µûŸŽ;¬—s¤æÚT±"XA†}×¦Í c1~ÂÒÑÂ×äšÉ±ÉIþ~HY£HÐ†ìoLjn«÷Gw€·Ùyþô¡ÞmÍ½³DkAi3³©ÁZcA²H‡Ó	L*[y’5šÙ?&‹\]Ëfj©Z#RiwíçìlQ	)ö&»EkåQxuEéÌoß$wâÖ­[¿,?÷æþM×EN{ž<¦kú{ûøëüä{O¯(A\S7Ì“òÖ–%kÄ‘ ­I=»Jì8þÅ‰Á_\U«5híÄ‰éáÃ@Û^´¶/®îýýï±†üoXÍâårQ$°&¿).äAîµOî†‹§ƒ§	›ee}˜X`5’MfeÉ¿M°æ‚féoõ)]u9²­ýX“´¦Í×‘gŸihôc³]†W-[šfß­ÙÇµNÎ¼ÒÊµ„uV†#á@¬Ì«¤r$°eœÐt±›Ò<†hñÔh­+€gž#Y¦ë›Ç&XñãMB±¼¤Gí`@5âá F˜>§Z5÷‰§5”V_æÓ›üû±wÎy¬ö2Å‹úÔvûö]+«ªwÁk»V Ÿm¬®^‰Çˆ%Bn¬m9¹·³ó•P[ËŠêª–†ŽõÓÓ[êš	’<»e©&kNjl*¡5†‘s?ïLf¢¹à3â‚%~/æ†hZ‰HŒ‘"®Xsií×˜ÐÌi-˜÷RÁBÜ_M_Â[8?†°p<ÀÚ&â}oýÒú5÷yä´‡„†r$ãQçú”yOkæ‘Ÿmë_·®v[ëÖÖ¶nÚ†)ý*#ÐdsX#/R1ª»üá³Ñçs£èo;I‰$¨[ûµÈÒ”µ¼4HÂh¢ÕyeM’["$>°Ùº	jkp_>)B[5(ÊûIždÂTìõ‚
×FÖØÞ3mŽú-ô]ÓÉ/pÁ%’SÚ°¹½¤7ë¬©CöºuÀÚº²'¶ÕÔÐð õ…5òî‡ÓèƒMÌm®˜©ñ˜iCO›ÖJgŠKgÆæ*Bcä6"ræçÛ‡ØZhÀ–Wýd+k¤âE€Vêá.µI­öñþ×Ü¬_·ÈRXK!1\´îü4iC›i
«©JMè+é}Í™ÌÉ$Smj‰Ö
y»»ôÂ…jŒ.H]»þžëç Zž²vÝ;­]4ë"ñü[™Ü§]^…`¬­ýè¾ç±FkŒœ€œ^Y1œyd»(ØÃe7âèÆ›z1šàì'tS÷~;ÆÎL4
5lœo'”™MI[–üKˆ\ÈZÕžk«¤:ÔÔœDcÆ”AŽö9ÜùŸµe2ÝÃE˜MêJ€{H[qCh—¢ºë‘T©¯ðÎõv“ÊØ^”¢õõQàX«¬Í¥0Z¢Ï©G†üÏÞxw/X–Iôes|*Ãu£MŒv”«TÙxjõŽkl´5kÈ kÂµ‡À´†×§±ÚNÆ{¶?µÛýD¤¨¹A¿W©-¨ÝøJ)Ÿ H}ÿ½nß|÷ý÷wfGWÝýè“{ß·yBÐ*]sqmÿîÝ<ùM,!eßïÒ%ÊƒÒÚôúeƒ™u÷9Ÿæ]…u.ðº¼Æ`Ç/Ze~6?` Ç{WÒÖ4cKuÅž½R^|wtôîí+÷ï‹×îã(²æÊýÛSQ7÷5c.¬å£šnúÃi2Û¬-Æbütã kU¢µsrì_Ê¥³®
XÃ…‹½'`ëbuéÎüíûFiÜïÿ'{ikøÕ_;+kqlE9¬Ö¨;ô`“ªÒÒÖ_­7‘ô~_ZI¦[ÖPÖ´·®j•ØÂìHÖJ-8I×­•Ÿ†ÕT‚¼ÿÍšòûwŸ+=³eíò“\Ä‘öðâkû}òé§W/_þ:ñÊ³[NíÝë.†kãNkNkÈhWŸ:quzxðà‘Ã8Bâ(;HÜü1y}/‘ŸÉ_Dåjoò~èµf—ÁZè´ÆC‚¶<MSÙä¡g;ÖwdÛ²ÍYemË˜W=ù'ÒÍË2zo•Ê€kØ-çê*”ÇQ)k¥RY’f.B°ÍjÓÃƒ³nÃÍ«†ª	áV˜²¦ÓØö ŠÒ•„c…‹hŽj=ÚÅ]X¾ÿ#K‚5naÍ½E´¥Ë¿é¾&±Ÿ›‘ˆ9a@[êÍ”µhõ!ñ°$Œ\ªóXýä“ðñ÷—I ùE^ÈËºboß©ŠµÕJxÜu¹Z~"
`‰íÐ!C´Î-ÏªÿùÉÎCUDSi]Í[Z}}	K·lGmZG*Q„¡2K•ù#Á«’NfGÐÕ`4MÂÚQöðÛƒ1á0–g/B0ÔÖÆÛÖtâ‚²ÆÍÁË!	PóãZ¾²æ§ú,ÈfaÑgzž€mñÃCè¿ÊúàOG(d3§~vÀžÃ#›z¬ýlÛfN©]7–Î@'£§çHŽ“Tä˜åAžfB0ƒW”É‚Ÿÿåó§á8XÛù®¬y›5î–éšÁV_´ZD­IZCY3ÿ¯S[e°FùÇÜ:§5³€TõØ:8JG€5·¬™1gIXK[Æ#Ï¬«iÇ]>ü¢4ß¸°ÆCGz®I– 8ü9ng¶&þH$³á-2·á¢r3å•‰ªæÞpïok›3ÉÛ¤VºZ›)F]ƒÑ¼?—½¦µ„œ<s® Økà”óíú¹‰>Øš™ëÎhÎ^Îl…	O†ô^f,kV`Ù‘€Æ²Î'ÌT«æÌfžÃ¡…¶˜P¢Våí°5}n¨g«#ïÙÞ)·TW~½e…!Ù±cí³v]ú9±oA†åR¹KºÌÇ=ª:ûÿÁaD<X(a§xÌP¬¦Ij
Ê½ËÍÏ½À—³,]ô}œÔì…7ˆö¨&,N%EdO–-¾V#*Š"üVéšN³ãœ›ìËV÷9Z'O§6SÍ•dízÕ$d¹Š¶e“e¥M\åõmŠù÷÷f“üÒÂ3Ù4ùë½)µ‚ÎjŸ#ý±¾5‘ªÈè3¨UÆUVÁ`wî	žbã¯Ø=C)9‰Œ´Vdv0
˜Æ.Õ±š)kÜ
kDÈ…Ùö«ëµij?Ê¡¿ûçïT“|öÕ'_±Uöà7ßóÑû–tçîµ>zÿž±qC°Fâ¤Ñ–BAì¦œÖ^ë•“ÀZûð´­ºHŽk´¬ùñŽöCr†°5zëë&BS…U¢y§l·‹ÔÔkÛÂY²ñgb3?ûÁ”¤‰óg/Œ}:5öé§WpìÿæÞW ³š):F­ CÅZ¾ÁÈTè²¶k‹±?íDH`M¨ÆpR—H`­¡pÒ.vuÕ¥õÜÄÉÔÄÝaµÙ»÷ïß¾=;{šãƒ5îÉàXìÇ¸³åõÊk„âŸ¨63\Ö[c·¦e7’²cÆg¼çeà¡Z€ÍhÍ'Å«~}fÕü¢ö~î·û{îòîíÛ÷\æSÖÇ„R!_ãÆ;ó×ßyý•†gÁµ½VPƒ‡—©ãÚÁ¤59ö_½úêá«ÇEn­ÏNcí?¸åÔI:øÅ'þòñ-Á#Ÿýîøñï1¬‘e¬	Õ¾U¤\ûu!à"`íÖ®¥ÛvÇôàp_6ÙÜ—ë¯C	ŒÒÏÒx“\ÏG¢jt[AqeAþìë¯ÉÌ˜·»’ +úUÒdPß±Þýhc,§’Vu’ÍB…eÿÏ=:›™ÌuŸàÛNn6#auTÓÔÇ!û±6„XÆaMÍÖ4é­MFýÍÜÖ -èKàÚÃµ0”Ÿ¤GxŠ%ËeßÿäåËºüö.Ô:ä¡_¸ùßÜIRÍµÚ¹üùå]ðY°ÑZ¬vòä¡ª8­³ù¤Å+u¢µ¦¾îD7=ÖZñ3íŽXTy#l*å£f¯cÇ5³å¯-/NWkšd´ÌX#…µ>c§×MÃµ|Z³•«?Ôa‘Ò™Ñ.®>óú³Ø¹Ÿ©/x<XÍæ÷¸K[¾ÌœûC„³½XŽ	·.²±fŒ¬ùÜ7^ªæÛÿÇÞùÆÔY¦ëþûÉ99ßNB(!Ó/4¥%4emV!%,Yü	Xa?4”R¤´U[=mÖèÆñØ?Ó4qœa§éÚSÛ±;8ŠÐ6ã¨‘tbVtD·ÕvwNŽ™19¿ë¾ß‡×åt›9_7k½ïó<ï»t¡¼ë·®û¾î‡–—³åËS——‡HÝ›jì¿qÀ‹±'˜ÏðQ5zdkÆVTwaßË/k
ß:©y<¤¯PÀÆ²KkœhûIÏ¢Ö×¦¬É»*Ã(Ä”ã:BëjOb˜ÉMDÈH¹
G,3Ötó”©jÂ96†znAÆù)nNBh‰)™–~¾`Í9oÄD|(šDK;I}èÔhöÏ7‡n—•à¸`-âú¥³Q´VT¦ú%ƒµÂîð®[Ä ¦³äE©¿™*F!ÇÜ‰…QìäÁ‹³3Ã6£3ÍµäŒàKtDµhË”ý¨¡ÁáJœ¨*z *E]Êšd¶ÞÇ3^ËÃÕ¬•…:°Ö½ÿ|Üfwù!bë~ÔìƒŠ£6o‹ó¨Ü½Ä5†¤O‹`¬åÙK‘êpí'kfç[H¾ˆL<€-4Kø)z&gaÏSÂqÐ_¦‹zÃ5Îàljœ†<Øøš3Í«?¤²Š×RÉ”ýŠì÷
¬¹?	ãhDžäÐÐÈêX[º¡»²µø,,¨M¶õRYP’()éM$[[³°ZOÍvŒÕ&øKÏŸñéêmÓõõI²Ð°›ÿÑ-…àXwseóÐæW¸ãòQáFP­rBIÓAQÓM‘ÏjÄ½•µŸyÅa/ƒTÞôZ¨öé?»¤†;?ïBà4g4PM[å~Â›“k¹Ü»wîÜºõ-“¯¿¾õí··o×Þzë›[pžÓÚo°„|lß>ï¶Æ%ûþ³ÔD˜)XSìçú¬}_[²ï¾aZ¬UÐØZYDF‰G–¥[[Së)Nk
ØDzZ‹øŽ³ã(˜üò·Ÿ^((š‚ÇpïçÇ¾}wqÁ±4++È@ky^ÜœÔøZuî_Õø	Ç?¹R#’OŠx/-TƒÑk|­sXão{`-·ˆ¼vmíÆ§‹Koå—~;Ÿÿ‘6~mäN¿Qwž"å±·(¥…DÆ
ÒäY¯6ØÌRraÃ8Û¬‚¶La	l`Í$7r\ô©­Àšâ(Û:Söòÿ|ï±—Ïyè½ÿ]òÊusy¾y“”8š­½ð‚lF¬˜ìá-UU{öàâï¼v4R¼H‡Ä¤?Ö`4•¯}xšýÄþƒï|NýÖÎà7B~ä»_|öþ—tÅ~{é½÷¾:ó’Ò ß‹`ÏípŸtZû9´¦kP÷=ÿ<Ô¦«V)vGu¼­kðA·’°b5Á.#ðø&0y{ÁjœÁÑFŠj’V”<9®àJWl¢Ã3² Ç¢
xq®}\Ë¨YÀ”Ë–6{)•îsb^‹ý]aÓœ]PÖò`M´³ZW÷~Ã†dBª•OïŒ–+kdé{‰k>½éÀ…ç=:·Uiïz›?ÇúõÅk×ïºIOë§þøGpmÔq·’µ›´Tå¿ˆ#ï½zäÈ¾#õWQ¬­aà¿nmný'êŠ‹ÙÝsöÜ¹Î–ª‡7?^Q“Ì´×gRüK2‰DÚI”Vüò©O¥êÍÈßLYÕÊ|L—Ñ´H=†ä†ˆ©±	 /BrZµÃ#tÑXZ°¦ 	Ñ8ÊØÏpbzW^£5»›Læ;BÇîååO„Hk`ÈiMx†˜¦%3ûVL±"ŸÕˆÂµ5VX’%	úŸ*ÙHZž0¦›šxÛ´Q6KDê»ˆÕ¼XM{“Ã?wdµWè—”5Q˜÷ÅŽÛb‡-+v“øÅ¬:T‚Ì4D°5c#Ö4³”Ô(ÍËÓ`(·ytŒ©†6m´j.¯iI7a k¹ñ0”5…ûô¦½ñ=ì Ðfê™}s„d=‚5e‡N=øWBeÚ2j7YYâèWŠ¸&OœûU›Ì&ÜÚÝwq»/ó*d9×$ËÄN6l&1(p[øTŒ5c/^`4¹ç÷à¿áØ¼åÒ¯^›ÊP|¦E‡:þ§¶¡MgŠÕ’+>¬ ³›ªX×¼Ž;	"²ÖîÑgMÙÎýëúeõ_Ì3Ç‘k†œË>¸æÀm45nÍ¿Ø@V-5À™^	Š U©Z .¼
\9yH¨„j5}•2óŒG¥8ê÷%¿GvzÊ7udVVÀéœ`/±ÛEI[ãŽó¸ÒD²6Y(h‹–š†T¨HëœèwŸåÇJ!•Ã’mÝ½{Úð`¦KÉ“½ê—F>ë{öôõÕk#ÙÞÞÒòl;I&Nó÷©‹Vj=ÛÆHÖç“½éz}L5­ÒµÑúnÚ°‘WŸ&AòtO>K§Ý§ßµ¼ˆ@môØ± k}ù°öºÁZh‹ÍMñkëzíÙÔÉ_¼eej¸>Bh ÚG„Ô5%<ÞXz#·”#€¹;K9Dµ'ç>ùöîü]’!ÅkÖtèŸ¿4mLÈGÕn-¦µaJ" µ€k¤½mµÊ²‚éFV(bžþ5ÒÐpB0a[8‚9mÔŒÍ|æð¦…<Z›]\œt?žÙ¯I„Ì-Î7®\89;åRp°‚Ìw‚TÌšä*¬­ÆjüdkÖë^ãm-–\kÈjjGª4U3 XµÅ¢E5Õ¿›»ñéììÜbÁÔâlž¤	¶0Ê¦dŸŠ`M2Y6­@pAE3Å-•õÏkQÎ`8xN¬ÛŠhbŸqr‰¬….4~áÒ6DÚ¶>öÞ¾þËx>)xíÕW¯\ÕÕ[´ö´µ[Sü‹¬FêN¨¾Øí¢µ	«iÃ•ÆQX£~íŠ¶çÏ=ÀÑæÃ¯Þ|ûí/ñ‡·ßÿ})kŠWe0â´fyáù•gqEõnG5<(Ÿ?vlº²ý\kïñ_k~pSAëˆ<~úEZTõ©-6.^ƒ¼#;R€†¬FûQ–Ë`)zÐ“Ç+²”Äm¼üeê»Æ5UÈŽ÷†kNÀqÓø,?ªcIí{K1¡Ù(ŒcXÓÝ’× ™=’°ÉŠ3I¢7áDfŒ"€—úñð“!´XoóûGnºZ¼Éa×ŸÈ÷y
VChÝwä±Çd/²¡fŠš!¥%×8W?íÚ>A__\QwüÜž‚LW}=ÂZ+´ÖË¾°·,•i|4Ré	ù?²à=êxà¸l–Éxd/¢‚B¸e?¿)éòa-dDF{/XÖaQÃxä¸R"Åü\G|+n¶÷Ó{{8«cƒ¡‹›ÕË1v2cÁ„5†ÖDfq°Î<Œcm
Ý0'Ñj#fâ¿LûæòeÌûK/Om5+HÁšî¬iåå“O0e ©QÎÐíƒÕ.È2ÖÕ@5îî©/—Õ¸#¹éKNvXÛìøÑÔÎHu4ðÑêÖFÔ>“Ã$Žé Ñ;ÖÄb6²LIyóÖünkÂ1Ž²šâdOƒ$Œè*CÂ$ö:ª“y&ûÀ¡}q"¡Ö,L-ÈE˜¦Xnì_.*aªŸºŠ€KMåE”­1Õj
®³e-?‚G¼v1µ±÷´H¿ç%þ¹pVZFc1uéÐJœia+qž…„5#7;ë‘Íª@MPÆ]‚jªt	‚Ñ*0dÕéu[ÙjÖ¨!6ÂšÑZhŠ¯¬=`N‘´ê"·ŸïP¼Žg9˜!¯‘ðGð‚2[€OV‘°¦«#“×¦%È‹Ói	Ë‚Rf™ã,¼T ß:¯•ŠŸ4Ö‘èÅfÙhË:e#‹r+œéwÈs³(zc­Au+PŠÌ¼=›!7ÂZ2Á#t9äž´šÅBòöøNñx“H=Ø”mH·ö&Z†ûšÓ­•}§û0ºM—¤2½{Žï9Ú×Ý<820˜MëC©úêÝ•cãJçN¶ÖwlÛ]ß™Ldš+»3•íÓíõd€SÀÖÝ>::]ÉYõccC•ðYCƒij¾É“Õ­«my°¦<ÈXZ3K%?ªé5®¿ý-|Ón"]í"¼vñÒµOnMîy#—[ü:wçÖ7sKwn|òí7³eót*›cü‰§BBkÿü¥Ñš™ŒZ#òDm'´ikàšñš5[¶v¯ÂêÑä´	kìÝ©Ÿ¬GvîÝÏÄaM3…˜Œ-‡½6]­‡†þ |jÓC¦–nÏåÅÉ©IiPk´ŠµYÿZuî_Õø)7Z“™HK•}d„±^Q3ÃÕ’O4UëI,k$àÌ/å–f7JþÁ]š7ž,ŠÃÙ,žå9Br …°–`ã‡2 Z6uqAhÆ’­ÙùeY–3õxŽ4@vÉŒ#Ûœ1ßÿ”U²}ÿ-„«ù¥wë‘#ä9\ýàƒóW½Úßoåæ7Öø™Yø?ÀöÂë<‚ 4…5äÙ³.¯$CpÔè¨Ëk
Û	ÖÞ}Þ°ÄH`íù?ü¿~ñœE>ÿ|	^{PûNyºXOæ?IÂsX;‡xwñcð¾gý›ŒÖf3­}Ùîƒû»T£Dc,š¬Ú f•Âª¿xƒM“S¶Õ*k¬ÑTmL 9Žíqr	`'³‘´2MyT³^«RYŒ€ÄÔ®aàbà%ý†9½±íËÙÌ#dAÆÆýÜ=b§1÷(	R¼¶_ùb5Ût%-Õ±¶—Ïr3Àš+iD>ªÿ «¡¤ÅÔ¢É_Dc¶ó»]Ýp@¨æ´æ#ìžreíÁÕWðuuÃÚ°›Á¸ß>;57H‰m2†<^ÇÕuž;w´Ký+Zûº#;Hô4yõ·§Ùnl ^Í^m5®„€«ÙL˜Þigp¶QÁš[}²ÃŸQ›A¿ßµÓ—S¡½¸)†µ@j.¤igŒ™ŽÆ»°î{=ÓáfÞÏ><wœéÞ¤»PÛ´¶MšY`3Û–­4È¶Eöv°†5xsÃˆhwƒ½˜g4Qu³óðIëv™D?c3nV­6;)Xcú²2 Mt{KûÇOR¹6ÉA5Åþ…[÷³ÅØ›¢oÈ€dc‚›'A³ÈVÙeá™	hlm¡/6&"›ÝRÇœlæ#©_j¿Æ0ó‘;¿ Lúÿì5CHãmX©tïH#5¾£q¡…µë><ury™ý˜¨},/àÔ/'H„Hba™²µÆeò .%¸y)“XlÑMú™æqC5Ö4p<»7¬éx 6‹aûwi£†,‚ÖÙŒÖxüx€µˆ|b‚šÓ_b6É|¬1(@K+®‘„ÎÛá™ƒÔTT¬µÓüSÅ™~ùO«åÃÚ©X#È€¤jmíZœû:z6~ücùÏêÛXr°ì.á«è$-ÙNN"®*Šáì©´hD¦ð~×^÷¦”{‰=RÀ¥G@^b(¯B“ê÷î7•¤xNã3N‡ôäsç›9{v«W˜HH–¥x|KRè—M@É$D¦–Úƒ­{Ê‡J©ìë-LíN÷&Sú¦aŸCõö¯Ûst¸­7UÞ¡¦žÝ­½i.ÂC#ÕëS]íõÕ(rmúsžá¥lÇq¶öéc4Ãž¨ÏŽm”åãÂZÌh†©d5"(kÖBŸµ kÁòHM¬öiðÔ¬ÚÛ™ªvûwn+òR.w1·8wqéµKwgç¿ÎÍÍß½qçî¥Éùçç>ºuK°´5Áš|›ÖB±ÂÃ-{bZS+ŸƒÓ¸ÌÖWUw‚€Îø ¡Š¨¥1%Ø}aYÅª[÷òÒ†¡Ï‰¨ÉZ°ŠŒa-Úkañ°vX(ÊóiÊš³Úªäj¬ÆO6þÛkt|”Ý–hmŸqcˆQrÈ([—RöjÝøÆÜlnî.°–[lÌ‡5E˜ZNLÜ7Ô|!3ºé X†ë!× ±a± T´Ák…–æ˜ÄšÝ°[ñég)mÊš]¦ŠØð¥È×ÕÂ§¥5G^}ôêÖó|põúÖuý°Úý7Ÿ1Z#SXC_{b»ÿõ;vüVàµ-Çé“í¸[ùŸ1Í‘M_Hl"5åCÆqæÍ_|÷Æù?ß)Þó,H.øA
Ö°î¼ÕÛú¬±1X{Žgå2ÖÞÚ×3Ð}Tß±Ò4Œ{FvÓ¬æŸ¨NDR šb`ÿPoÔSNðž{¼ 7	CEkê´6È@=J:¶mì€‘£ÜÏ6eZA+°Ö,±Í8­¹9×´ÐÌ7!ŒÒbmÍó½vwWo¯µÄ6‘­aÍì {»½½)Ä³ˆÐlPlC?;Ã8„gë£ÆØþŒ5î¿ÇÓ¼îb5!i‹ý}ažØ¯´ZÝ´	ã~h¯ÿàÀlæøÔžŽj¢³TÉ¨Šm{EqÓaìBõÞ¦—Óp[7­¿ÒF¦™JœùQ‚½­š½”PµÓ!ElÌÔ3d5>c¥Aåj€Ã`mmÔ‚c?7‹Å5ŽkêbW º‡ULc„ãšÀÍ¶y¥gñŠŽ+ÔÑ:ô[Ë‹ÝAµ{ñTbDƒ5\B,ERl¦§Ô’"MD3Sc¸hUC·òT›÷Ý&­¥wîmzp¨£Ð³³B’Ë³[¦ÜÔì2Ž"d;šëˆÒÔX¾páñ?«jbû3ZÖB¸¤šKkºypÄE5m5¤/@ˆ¤Có"©ï4c°H
–H¬Qþ‚%!«QY1¬ñ §5ÎsXã®€ÐxJ[@q“‚f*¶·R˜ÑZC”Zì”&Í/ò9Y"vk´ Ö€ÊþÍ<õré²D6\!šd¥¹ÜxykÈ­()YV ÏDPD(XÂ«];¯Sc"¬p†‡«iD™O¸9»ÄÅl&¥9¬iÂžS›k´,M´åÆ@Û¨6Õº¬&±)ZCU³­åZT¼V“¶EÌÖÖÔòÈ-UUœ‹f¯kz‡ÃšÂ­ iµfO=SÀs(B~~ø1µÕËD`2ËõÃ¦Êš™gf<.Ö£ÐTÊaŠ›U­ŒRfïè/à+ÖLÛaÍ-…Œá6oË-kR@‘§)!hŽfBœ7Í“Æé,h–ÃHª©¼©gÕJÌòÃôâ¢,[>8˜AzË4tC•E½Ýiúè’VßQßª¬ˆiÏpßðp¢7Ußc}Õê»hÜ)W’t¢·}bºƒ+Èp[×ô4µºÐÜˆ¸l‚ñ1úªÁd£•@\lEX\µÑÿ\Ykú¬mÉƒ5Ëü¹€üæ_©	Õ®½uCÙ!÷‘ýG/‚n/Î6~¼x²vqñí[¹“˜(Î½1÷ÚâÒÒäRnfñ\ãæ‹]Ãwä6‘òFû«õÇÆR¸æŸ©ZµÂ/ëN?hM>Í­õªçDî¬‘É{$‚MKw –›¿î«5!Ý(”¨Åo8ÉB‹Æ‡4;9GÊÒ½ÂQm!/2°Úª¿Èj¬ÆO7	òTðI%A’r"=©2!U=Û’,ÒUU%³‚µÉ6Ïç6/}º4—››º7¬…¹ÒÃd6Ö|(I•š>vLdêÓŽû%>•!“B=^0î/T—ìhÂÜE
C Ä©·v(,ð:Šðùo¿Ô)>xõÈýG(W›™ñêÌÜŸÞõÌ“ ÚŠïÄ“§N=eDþû/·WðtÈÐ¾ú¹>þZùîÜ‰<X#ò_¾ÿ—¿|þÒwßý¯—Þ´¢5Àpû~åXœøUxb‚+yAê~L¬væØ³G;®\9Vß>:®š´ÓãCCX.ê=1ï“Õ¸ºãþ¬& 5|HÌr¤÷
Åâq¶)²×¯Ò¨Å-¥ìZªÇ+›I>-ñ0ÓÍÊ4¯n‡s¨¨ÌF(<Õy)‘=Ñ¼,‰ƒGç—­5´ChªYÃQ¤·[ìÖMHXóB³™äL2!ÈâÖA%³…ÿVÃd¤8XAšÂÆÒúûwÝ|F¸&eÍ¼ûŸ«qsX{ôÕG_¹¾a®ýTØ~>«Ø$]íáºŠíë©]“1ä¦õtÆÖ'½]­êçÝÛÕÝÇû^¸TZý°+ë§Ç' Q`m­u×bÜ£zw‘1šð­Ã=ü²ÜàjTÐjÖ˜œ%4”VÕ[²—ãÀj±­#áÚZPÖb.‹wÜóºhk%ÀÚîØ°Äû°ç¹—hð"QÝ4à°ÆÌ•3·ó÷ŒGÜú1¿‰Úb3æ`kM¥C#÷ö©Vk4ÛmØùÊdû½Lol¯U›T›eF¨kZ„Ø¬»3ôµ?ÏNÎ¿zÙ²¦¯¸/öClü‹D·•TÈI+5ƒŽ ¢H2cÄ@¹‘Éšô‘bfÂ§ˆÁô0Nfb÷ÃË.‰q‚{ˆ0Õü0ÿ¸Ÿ?!NCYcn¨¦çr=PÐ· T3»I¾‡:_Cˆ{y¯Ì7;éÚ°¦XhÈ²¥[7/ÙˆÇÈB#æ"S[KØ¶6ÂË œÔ³&/XS0°h*wX
|@0³Q\Û¦-C··ðp2s³yÐFL#Œq+HhÍlEœâœC!ÁLg°-*Ò8m&„€¹4qkÀ¶¾®fy‘
)këê6TÔVÔ¬©2_È‚~ré²f«=rêïÜ =.Ï€v$C†¼Ë8R•vÎ“Q6d¬·	³‚mˆ Ž¡éiµÉ²ˆ>I×èjjÙ)8ˆIïb^´1tåNšgàœP›`Íž cÙ_ÁF¿ãDa·gz%M]Ìzc^–¬Mêaä_&K#‰4™L1*j©å§I$JK{“5-)Õ¬e£ÄØT²³¥ÍŽ<L)GßÍtggZyê5{Z÷ïïNw¢€wÀjõéÒAíÙ¶ýü×z°SÈîz’'¦»ÊË;T˜6])D‹ø,˜>ÚÐXmÔgù¬æ°Öš—é#‚µ_¿²ï•ýÍ+°ÚïÌ¢ÿbî‚ejiªRc¬äG4µÜÇ'j—æ_[úæÛ9~åó—.½±xáµ–ºÜâìÒùÚ™ÙÜµO>¹uSÿ[¹Ü_ÿê…kÐZ¤­ºÉº¯’_ó«Ÿw¶U=ù§5©kG;«ªN˜±ˆ(P>d‹Â­EŒØ…kXIŽdB¶Àj=9ÒÄ°&r‹FZš»·²æ^+ÓÚ*¬­Æjü”}û[*ê¨0g#6U–I;Ro²¦…¼—c-ŸpÚß›ù\ãÜ•j3›gg˜çÓÚ÷'ÔHeÊÂ\¬–1½°ƒ)ªÐôédFžTé´ÎÜ(HØKw4H^Ö:š¹1&åÑ#ÛPŸMáiªÀMF‹>óe‚£Vž¿Â»Î_½¾¾à~¿¨£¬=à{…ÓÚÏN!¼XÛŸé½×Vê×è´âû„Žf‹B*›Ç™Ïß~ÿ«Ó§¿xé½—>ûÌ`í?èîf)Êƒü¥a`$Û©%¶Âžõ˜r-±39x´¾ûÙãçŽMŒs;X=v5ÊÆ{TÎD-Úî2"GFmÖMÅk€n‘lª‘ÔÀr%a5`-êØCð*Âh™)G[]üa«´ºØ9fmt_6
í«};Á@ekùQmbM¤ªqStw%ÖÕt1n@UKwwYÉÚJUY\ª˜Ë“ãù—«ÅÁÓÙŠËsë7¬[WS¼éÀuü—ÖžÑGîÂ5ÑšmÖÈ„|hßùtXÛ´ýÐ‘íj‚½]À¶¥xÃÃàYqÝ†k¬m©‘(VëÊtñÏHgà[¬ÒJð+åÞz‹;ÏªÍšÀÌ‚ƒÇà0ÜC?KQ/ÍA†S€5émÄ
¡1ÔÎ'RÝ´w‘ Ó´	àåegÚØJ(XË+Q£ døâ
«+ÇªÕÀ¨pådwñFkŠ8Ë‘ˆf³1vXÓÀamhˆTÈžêÝöØž½Ëƒ{?ŽÓáã2d¼L@c
zª½¬˜¹™¸vÁ<"ÙhSH°FTãŠy<6*Y×8¢­›Œ¼,·FieæÒÑî+|‡5æ[#ÍÄÎ¨+7õD;Üœ«¼á-âÅkŽenïh0Økia<²1XãqL4‚÷n¬Ü¦±èNxg&•zJû®Ë2aF4.³W,»,ˆ­ýtÁ&÷‘ÖÝË(hSM%<jA‰ŽS€œeC²^.RÓÍ)Œ£–.ýqŒÝ ÙZ’hhg…¡¨E€æaÒ’3š4dëó5šÄ¢":"6®ÙFš°ÆÜÍð?²hÍ‰þ¯#ßL¾XÑÚ–Š:
Öª
Öð>Ù´¸uýë
Î›?ÿ=kÖÜ|„º¶¨…v1Bø.„Ó–Ãd¬±†§aç/Â;˜B–°â£ kêW`^î‚[ž"™([³¶¨VIÿªa³Ž×).«Y“ªf×8ßëÖ"XS8t9­û,¢ %á°æÂ?U2Yd´ÆIê‘c¿ÇrH,QR
(&­í[ayI²¥¥³/Hf›Œõ
å^ÈálX+§OvÛ’\F--míô#!W™ÎiWúºÊ)pîÛOAÚþc£ê%	¬áù¨ÔÇ›ñg‰ÝJxïk‚ñ»°7ókÖîÁjk«a,‚¹¬&;…!5	k×Þù·/’þxëî¥¹EXíãÜÜää§·n`"’›l)Z˜Ÿ¬©™|cæµÉ;·îÌWÍÏ}<“»}g[Èo?¥’Ã]F\[3Z;tˆëô“÷¿ÎešjˆÎs?¶ïè³¬ÝWÏFÑ—”¡HËñˆK¶kØ©p-êÍPøEšÎÁñGØÆl:øM[ÒòM!‘æV°M»G„~Ø!	²ñäIî³«f«±?uaMt`3v„¶V[(­¶†uÓæÜeö³~%›Ÿ+Úœ[,—ì|\ËWÙÔáÙWÐÌˆp A‰uJÖüž“¡«Z†+d†ìFh-£¦Ø–¡ÇÆ©LÍì˜°TÆ ò¢ÖÆk	|W’eë®_¥qêŽë;¼]þ"lÏ<¬‘üÀýt6…ê×¸X<²„HñšáÚÑ£"«ÀUØÖÆ"—È°ûê‹/¾úê«3_¼ùÒKo¿½âÝ¿ë&&„´òå_~ŸÖbXÃÿßR-GG6´_9·§{Übâà±±ÓãX6WNO¦pœ‘¿*ØÔ \Gª«›Á4¸©ãd“#K¨UéúÛ-ãÚæÙE9LÀtOGä1BÈÖ‚îÌÚœÖPÔÙW\ª6‘‡lyÑn[`-)~Reä†%G/Ö®k. ¹¦q‡4_þGPÓVÔ¦m(.Þtó©›×_¿ÿ¦eARŸh'B².«>v}ÓŽë÷8òêŠ-ê‚¸¦?[EO XMôfÉÁ¤¾ŸÃÿ¥·µ7­ÐšÜEô®Å0Õ{ckP]éjãØ˜Ökz• µ¨+¶yŒˆ¿$R	çð÷ô¼ý0XâîvŸ¸ÇÈÈîëŒÕX‹y-X@>ˆ6p‹y,Zõ1;ÛŒ3åQ‚4;dƒ8¬s¶én»ý11ªù*üû©³š‡ÓsQžî#•{—‘¥äîè€†²vYxæ,f´fèæRÛ¬jóFÙÖŒXs;Hµà1âzšP­†ŽjºkKÖÜÚc§Ü<<«ÑHlyïˆIGÌ~d™J0Â\ ½›uZkjf+2‚dlÏçJš–9¼<ØÀ) š‡þ}mî'kk–“–viÁ·”g úãîêO,Þ†øA¤­5C¥j‡¾†•ÿ‚4òË§„m’a„˜Ë‚5bÅ’Ð0à QKkùÖýa ˆûkÈLRÓŽ­´X+Oø2ó­	h¬h¾Æ¹Œé«ZÝ¤ª™?‡×1°§ÔDN{ö™¡”4jØ¤ªiÄpoäý°íOû§~k„0N%k[×Ìaò”½ðƒ[ã*vÑ$$tj5j®Æ„-V˜k“Âæ>ágaÓ/æò’$‡@ã«ðF;‘JpjB˜TV›Ð«FŸ4‚—Ñš!(gEÏ#-Ó(šˆ®±æ|SikE‚ÀTÓd¹²dÂ­%­šñ¬DN|;ë¡GÝZiSª3Œ—8–µ´$8À‰ò)L‘2ÉOˆþFs}¡²Û÷w÷"ÍµõuµÕ¶´5TVWs‰)í=j°†ýÈþ+G÷OK³~‘]¤<VOkÏLGb¹Ü§qCÒNŒÔÖ´‹Hí?c5² ¬ÁjdA‚kû~#RsPssþ¨¥Ú¥¯sï\»uwin~öÚ¿å.~tq¾fî†D¾Ì-.Ì}²¶¨æµ5TwîÎW‘	9Ïû–“K7¾ýäî\¥îÖoÿ
®!®­=´O°öÀ)üÆ¸öÛ…¿«/4\ëîSÏ5†-µm ïpr¸­¥î–	«9¦Ù‡ÚšUUœ€çœÊV6Õ.ÎZöÐrÌh>ˆ—óc!‘W²†ò.\›2R[…µÕXŸ¬»ÈUýqg_;®ÍÔ¶0K”aÿˆÅˆ_e¥Ø³‰/Ï÷ŽÀZ™2Ãõ<fL0Ê`€Œž–
WÇ½„›ÑÇ8?MàÍO­¤¡ ’ÀWž©ÎÊvtæ…®¬±£W~õZÔgíõ›ýÅ÷ËLq*r
sX³¸	Ã±{òÔŽ'8uêÔë;^xA¸&´úÕÙÎP¿öl°QeF¸Q¤¶†lŸ½ùÙ»g¾úês¹‹¼ÄR#Áâ	<îÞÿð/%Ø;!Ísÿÿs÷©èúàþÑ±	®e÷MSÞô‘¤_êŽÝÈÛzJ·i”–½øO#ÛNñ.>òqólø…¹?ölëa/XËš¥Ž…Íºè{ÓÖTÚGŒÕ*AcÛÊ±è,&q­:ð™ö¾‹»­ù.¨kk4Õ¨uÕ3'ŸÆØpZÓNdÆ€)CÆm|ùÿhµš³³š©k6Ôo¸úOízàé?y
ª½mÖLX;tè/œ¿~uû&Zb¿`ÊÚ&E]u²6€Ök VþT1œ;×–iëLf2]}}Àš´¡>“ˆ`l\ÚšµÇö—Ì1¹ŽTKxC@ÇäÛ/aÍ…4öæ÷‡éf€8¿Cï¥çwÕBÁK£¸¿µhL÷Ð-Æ´p×Ù
ŸÀ‹e¶øiµwj‹Îp#¯mcË4Ï’HâÅ@g»£õ<X“Sdÿ—7~âñ)ªÕ¨KƒÔt›UëkšÈMtfát6é°öÇÍÀß•µ€kÀ˜ãšœ %«écì-òòaˆŠ°öjt¤6ê}5nÚÙ@ê	kª¯-”.QÊ~tå5Œ zì0&Ök\lUò„•Nd¦ÀY¤öêI¡yBbWôÌ±Ÿ/r#}ApØ¨ÇÞÜ}r¹yoÇîžÃSËéF±×2IŽZîx°iyäÇ¦¡åÆ)´@hl¤åZ‰ãY	‡KÖ\#+7ÉÆ„µRÏY-ðZ~¸´‡3^ðí}ùWd¨Ð
ÛaÇT6SÎ¸+4Š46ØÇv­±	MÙÞÌÝQ­F7ÁZÌÿkÝ¬øüeª-BSì×â4HÁÚº­ÀÚåóýkc×‡‚ÀfæJ0ÝF|®2¶1-‘ÔÆ„=rCZsßËZ~\Æ¬1Ž*–
œ‹¾%§—$Ï]ÆŠgŸêºäÿt^¶ogM”Æì
ƒ+§’%›JLjLdKa5–áCÎuÈ!ÀkO‚¶Ö{jÉ’ruU(+jòLH9ÿ+û5Áùœ[È*—
Òàù$‡1úÏÐo¤·»££¡}ªDýšS‰–=øÜbdÅçx™£W®tóqio{{ß•éQÅ8Ý·&¡£‹•ØlœÍ¶¦ê kòSØ‚Ãw5î±¹ˆ±Z§±k¼dí”Y÷ýzß.ÄµWvýú’“š£°ví­Õrïžœ¿ûÎÜÇwîÎÍÏ-ÞÉQ¶–[ºsgi	ÏûÜ­Ü×_/.Îð‰À‚Roé7”ûº`òÆ­¹%úMóN.wéÖ_ÖœÖ^y…F¬Ï<ð¤;øÛeº­«OQé»jA§Vº#´ k@\Û‰
%!Y6R‹›ˆÕ¡:óZ±ÿ)Gp¦»ÞD9Èû†éšÊ‚ìæ[N½7«å[A6ò…+S”ÉmÕr5Vã§ÿå‰DÂg¹J×—‘÷Tc³¶ŽÆ6nY›ŸNí»{ç@šHXƒÏx¼ÓZ¶È†e)°-#,#sÃ.—½ |aV3éz™v •`â/ÞÈ2#*;¨]ã“šÃšÝ½m(ŒÜ²LëÅ¯¯«{ê©û‹ÖEšÚu»ï§¢Û–ÁB‹7}:û$‘ë×?ü0í²ÏvvžØheý7¶8%ò˜$¶8PÔÞþìÝ¯>ÿý›ï}÷ÝcoÃj¸A"½Â€ZÛ.ËIò+Žãäß¬é2ðî±ƒÇH…$¸¢²%ÆGlÖXÔÈíôØtÏ E°UæÉs÷éÓÕ2…à}µº[o£œ¨´0kÙ£ÍnîéÌÌËûxÁyýš±ˆ”'Öô˜m,@4åB²	ÊšvÕ¡RM[ð¦÷àÜ˜Õ4‰¢Ý"£Ò»Íl_È¤+f¬IPs-ÍIË‡1‚ù	~ÖlW³LS¬mßŽGÈ!ÙÅFkOYíÆk
Ò^öíÃ¢ ]s Ô"X«8~|u€+ÞPÁ)‘g‡Ïï>7œ¬é¬]C"¤¢=_Pô5¸ÄVí™Â«{¿ò½¨ì…^¼÷a/XÛÆn£Ç÷3!Y]ùõpè°æDÅ‚íË))æ¶|‘ÌBøšöñRë™ó`0~C266‹a|ÓíEPÍÖ,Å‡mÝˆÈ­a/F%ƒ;§À²Yü2ú3u[3ƒÊ˜Î˜[Àj.LŠØf'dyaEYcÚ¬¹®£Z|3`ãkRù•\ 1Zd¬éÞˆL¦ú5Ü÷7o¶dF¨H'¸Q£°mo%Î"ä Úùžýh‚YÔåÚ´ºÍöŒ»GšÝ™ßb\k®„ÍTÀ&g{€
ÒDkk„~ @1½,ð“Ãß²¤=ŒEØ‘¢9@Þ¸¼ys)‚š’!§JQÚø‡éÝ”ÙÚ0Àšð ¼µØ+‡îGXÍÃù,K5wVóQ$µ¸ÐV&¹(öñ'ÈVÈ.þ<¾\#%RŒÆ¤ÖÐmÞ›®¦´üµì×oÖ²FA5ÔëúÏ[GloÈ¢¸gÍ‡·òôý—/CkÅöóDÆ'ž¼(Mc£4M¢2?ûik° Ì±d°Æ*¹'’1bÔûo]ç$Á)¨GSl.Ÿ.›y†c„»îŽ%Xã6ÿ}!±•*Ì”¤aMB]6ëÓR<uY¹CxÓƒ¥ÉJ×Rp˜¹ê×†ÐF+4| ³¡¹¹ûyy¢5RÓûÛötöí¯ÏöÖWvàú(LëL–4·wuµeÊëõ_ë•ýíûû2½$y¹¦‰‰‰1R©ÒÆÛEjÚ<¨=~[Îd1­ga!èjùÖÚ«Ydk?“²fekû~w9?ÂjÄ;×®]d%wénîRn¶eñb,k™{ç£¹©¹O¾Yªšœ;ùÚ\nvöãyÿ½Ú¯yîÛÜLÁâ¹oîÌnž¼ûííw.Þzë­· µOÍÿ_?ôØ¾]‚5§5`m¸µÕ>¤híùçZ»SµÀZß}}d[ø;'û<¨%Òx
KÀ×z©èÊÒ˜x0È;!„VM†ûûHü Ë¨ÖÈ}VÚÚìªäj¬ÆO×¶?‘R±±d5»02¢T uÃK\ZöDgß?f/¢¥TÐÒŠüæ¥ÛÐ¸ÆM¬Æbª¾X«l°YQ¦™½ŠÔ„kÒÔà6Û lÿ0ôÌ
=ÜP-Ð›µ§^Ç|¢½ì‘'Ÿy†Û§^weíAÚõ}¯¾Š‰û£û®ËÊý&×vk®ŠK¤6xí‘-[xÓpbtEÐÍúoüé~.ÛÁÔ±=ÿùggÎ|Fþ#f¿ÿ½`M…Ë‡dqñG!ÿÝ2, 5YB®¹#°T:•¬qûðÌèÆijmÛæVZíƒãcÇ6JaCiîŸØM›lÁÚØø6ˆÍú;HzDá©–µ ¡mV²X¦èà„¬Ð|Æ›…Õ,5dvZ3ˆfùFæñ¨²ª ±…ÔG(mÍæR’„)1­¾Ë“ÙÚ¹Õ§å& ¬¹omŒX„–‡haÆF„ß}óã±¥Î¤8÷ÁdÇÕÅ›®Þ|êOÊ%º®&_ÈgŒÕ µ#|Ø¾cFªM«ma°}ÓñJaY³¶pÛ~€Vkg¡´D'q\MØ’”àvÕ¬™ŒVÉ ßµÆvVcÏr5¼ÆÀMûÇÐÏX#9Ða­…M^0ZpjÛÆÎÙØa¡íCËs­0cñ´ÆÄF!ÒuµÃ.OSÛØë_¢‰ÅlÂÌüi ž‚‘Ü÷WêÕ¢oj8FÄ%lkÆuvò%	>½oÈ"k[A!U¬]Ð¢|G°X“¯ˆà¨6Isµ³O&ùøŸ¿úËŸkqÈ·Ÿ[è´¦nÕÄp~?)ÐÂêc
£6Í½16°f¶ÓÍøåÌˆÇâN¦Œä	ArM¥:•¹Bz"¤ MÆRädR‰Ïã”ª¹¤Ž7¤Õ…†Ø"@N62â C¾‘Åy˜hV9‡õ	AgµAÖšJõÙzSéœ³YÇ‘]„eFlNkŒBåZpyØ$Ï¹ÿÞ´öƒˆ:Ž…YYTÇeÚ’	iìÄm{Ä`\HL¤Ši#fÂÕ"jŠmmb9> l!ÿ^"(Ÿ¦…"W b-kÜ”ª©6Gt°x½µÅÞÑ¿ãz`µ8¾k—×­Ùºµ¸ÿ2vÀýÜ¡adÿ"¬­én;	^[Û’¤#	þùf:âÿerø!QÑZÊ8ËÌxh©ÿ:Ø´/+P¢¤¸Ï’9+.¾fÎSºdª4ërYÊØ•—SšMvò¤yREåj(@!xsS=-•‚ÎÀÄ„zfÑ…)ëâ†‰wk[¦kÛ¶úŽæL2‰ÐÖÖÖÛº_ýVp]ÆÇ«í(¹÷ûÒñš^jÄÄÁéq©itäs{ÇÈQDN"ŒÖXó …g¤œØê=œE,2°škÀZÖT­&+ÈÿÇÞùÿFuŸ{þOØß®4Fþ"ËVä_lc!ƒê¹3r|GXLüU£d[3×|“¶r±KÀHj.H Ê]“dMz)×¡"_\¡¥J ·½Înh’MSyCäé‰†Jí¶•öõ~žóña›ÞŸ#?žsÎçó9glc'>óš÷ó¼ŸwÝG„ÍâÒehM1³€ÿôì¥…IÞ´˜¿|ifröáC
4æ(kœ¼è•’ÄÅU‰ù‡óe÷?[¸8óÛ[‰5wiŽýðášÊÖ€µ·ÐÖžßÞ¤níŽÝ§Iªéîþâ‰>ƒµ(#2O¶è3OtË½_d†•d&a­¤Yôæ¯’tF%m%SŽÿ)§5 î±÷µce-Ž’¿*¬•¹°VT³æº+þ"+±ß`Ûþ©ê¤`mXv´ª\Som¬¡X4	Û<¸û>ê?ËhyX‹gù,(F„^£þ4ìC.¬fØOáØjìNèÀjw‘…VX¨»ŒÑÁ!ØŠÄfÕŽ‚
Ö™^Ó™ÿðÓrNTü´â§¸?ò€ÄTºLÖ£(
qå¨öôž=GÎ)Ž4ƒþf8‡!ÕÆl«Wãâèþn9òç ŠçEj«ýEqîÿüo°ÚÏ¬…ËGwâäJ3…¬/¹s?¼FŒR¾–96Ê¨Û?™…´æ¦v¿l7%TÔçxÁN±ÚöuòŠ$ 3õÉªlÏõôtL1…¾*UÒ‡ë#G^x£µJý‚µŽB)^Ô÷¬I`³<Èú(°ŽÇŽÐ:€i\Z‹ùŒð‰	q¾iBryS›4²*¯d„j²j¬©´-­é$;ôXÖÂ¤èDE…^Ùùóè¦[wóf¬övÌ‡kHk¦«1Œr_ùµ?w½†ï¤®®îã
Ó€µº
PBS´Ð{ƒr#·m;¬–Nwê5ÅHgsw_‡ŠÕ:ØÃjðXk‡`-#¯Ï‡ôà\qÈÁT¾ýc&¬ÒÐÐÝ^éÇ †`Ya{7‰©Mg%®áÑ#šC#ßEªZ¬°·~è#VÕX(†µ8g±ãØÀ˜‘æø÷»PÍ–Z¨ùAa´æÓ(ëqñm†¾ìZ/I·["dN|SûíIÁÚ´Y@j ùëR¥£ÑYL›f£ÕÚ5\û¿Ÿ|”5"5WÖ<Ü2NƒÔøÏzLHð²@9?zñ™{‰Lªª,¢71Ë¢)]'÷¡ÖdÕÐ¤a›ÖQÓØ0ïØTX¶†€¶ÖÚæ€5Q’ ElÆzúdìµwö…y"?YDzgìIcÇÉ9XåPù¼ÃÚdÛ)‹•”ªmœ[©¹
ÒÚ"´æêZÌ+ã°6lø¶,¬ÙFDxæ=Öâ–ÌÁßžð¤	N.•qÖ”4`F|HÂ2¦ºqI,¿Ym¡4h^‹ÖÖZßDå@®BM«£"¯Š­½M6€5JÒ¶n5 ÊZ±´¦3Äú’ò+[ËÏ_©à+Dd{´z-Ð™Íµ³o)†5	ý§Fe‚5HH´V$²ò)	ïcêrÓÖ²b2"«ìs`Í¨îÉiÐ€«¶â5«WÓ—«ÔUzŸ‰ç¬ešu¾Z)GšHrLòyvâæß™Ì¦!³{Îz;!°$€V--</äÓ¥Jä‰kéBÒ±½=ßÙÛ—ªÍre:‹cÿ¦ž~¼Û«Ú‡2íù.„4Z¨Q˜ûŠ2=zwG¥iÇ´÷±í<°ØÄá*âfš°ì°æ¸öu¨&VsXó¢5ªÕÞ}ãì…wqæGYÃœßãÇ¶Ÿ_š™¹µpizúò§Õ“·Þ9óæìtó›í¿4P*-KNñÚ*½gÐ6Ñ6­±3¿y8˜¿¬ÍÎß~€¶†#$¸ö6#`áÙ=Ïa:f´Æ=ÿt¯Ý¤†þØ<B¶AJüT°ff"3í¦Bo5+.!m×aÍ­Rµ3µÍõÝ¢ˆH,üšåÓ ZÖ"‘ÐX[)Y[‰•ø†º‹4£êCkd¼+ù:ÅM]°Ë¹Qò¶ç£Æ²Œ—‹„E<*ñ;vÖü‹¹7íËhŒ ’º^§ 1Õ¬e9­Ð’ú7Ë^¤TÔù@rQ–]ªVSøÁ¾ ‹\¤µšŠŽ%5«Ê€5E” s„¢j	ZÛ¿eËYbË‡[¶lùðiK\ßƒÂ†Wä!¾>uêI
Ø@Öq¶/]bƒØØ‚ÊâÏû‘Õ¾úðÃÿñÒK÷¾úÙ—÷äyJ°fÅËÛ@5·Áº„æØþücÄn‚{ÚÕc¯í–ÁàÔØº¡Fîrãõ‚5¿ýbØßšéß¥íkß{Mÿ9N÷ŒŽ1­Ò»àt¨ãP¨ÖÔA»€Ñ<åÕi¶–ò3¬5š•ˆôÊ*1 Kiòo,@o¦òeÇ:¶~ilqìÒ8ø1Nl„bZñOlÕÐ­å—ÐJ¬VjñÀ†ËãøZ_‘0°ÿT}EŽr×ö•7Üáw(ï~xß¤éjìhÚ)kç>–GeÚ‘§7´T kk+ µšºÕ4‡¯[½º¹¹aß¶µ«iŠM,)/#tZÛ4ÒÛ½	N“¹eÙ8??Ø-ãÑHX3jf‚4Ò\>sVÓÜ «=ÇVšÓz¬šŸÅ3ã5‡5_‰Â†´WÃh&VÑ˜1ˆY-\¦°U3(ò	ÄÐ'þ}lÔOˆþ<¬vXf¤tG.Sb$"[Lk¼VÅa0ò¹Ü÷Ô×Ù:?«^ û\£nž±Õ­IXS[µ3æ©üGÉm¬LÄ5kÅh¦¬…>kµÙ¼8ÎL"«dÖÛsÝq`fí«µ¢¡A+q™èŽ1#’s´i#ÔHedQ6$lç°¥º8<•Ò5Óß\MÌ<ÓÒ®hÙ„‡&Ñy^%#=ÒökÇ!%a‚jÌçDjVL·qçÆmWku¸6¹è,ÖÂìÑÂ3—µeh+ÃÀ£”G0ß%˜méhF¸)ÜŸ?†5†:çkl\`Ž#\äØ ®9íbI9D&;Ð­‚×ó,4s`×¢wSÎË–«ù=žú«Êšìý·^DR+__’(¾%ûŽØ3³ãRuQ@OítpúòvlAfÖôŠ½Zr^#Y0v©¡µæÝ/ß‘ª G_±é¦à™UUµéîE?kËZäàHWJò£”PQ±˜ZöŽÈdB@¢vçÆl¾PPn†¸=VV%‘Ò²ð^ýò#…`B9>-×(>ÈV"Ò‰Õä™ìÈd;{³ÒÙZ;`<
r[39þvsÃØ™£N¡õØ¸hû•Ì=º»µÏ`í£°@cqŒk¢5SÒ"ªñ·U5dµÀj„™A^¸téÝ³g/›9?bd†åãeÊÕ¦Ûîßÿdcå7÷çîO—NÿöÆ]+á kÍÒ?KdGƒ7Í*ö%Óómç.ÝX8Ó6ÿðáí‡ñ"ù…k¡ßšT¼=ÜùÕû'ÛìMUÑZ× ijöðožÝ ïD'GNóEI‡´5+`‹Xî²)"P—@Þ!¬8) ¹¥¡vËÃZB°6d5Ï‚T¬ø‹¬ÄJ|£mû4?Ñ2,\Kdí}¸D‰dyÂî£xw™ÊfÁ)â¯ÓšB”ÄWƒlÕ²…RÇ³ÂÀ@’ÓXFR²f\æùÿ&‘‘1º’Z«´=' «#5-ªTÓÌ	?v%uuå§döxð °&aí9ò¡²#ÆilÏ[|øüó Ûþ-œ‚ÙÎ"ÊñÝz°©e6}ÒTræYŒŽl*dûsLm4Mû×sçþë9ì¥þíÏ÷Îýìý«`íÚ€†“ûNÜ—ø,„|Fþ­	×ž‰am”æm»ÇFXwÑ±Ýò„o<6¦à¦!}Së¶£…i>:^?îÙ&l==Ra¨iâ•Ta,WIºc}†[uŽ†Ìê¯Æß~y¹Ø·´BrƒÕ
UJ‚t>œ2ì\TcjÕÜÀ?†2CLi©XUÂô„èÚú’%†U´å5Ô˜9“E ¦-æ¶€`D…–!µæ¥‘çµŠºµå´HÛ¼¯®áÎ!5Ò<êMw‰k÷?w¾æãkç×Ö];wn_E3^5T©‘EÙ²ª¢©Ew±i¢óàñÞîÔñád^-ÖúºóØã`œ#`“¶Ö(û”56ÂdFC5ýÀ¬Y©šq­CÛ:– 5óqËµñ!òrÕÍÒ[ûÞD°fÙ‘ ñˆ*ðÕ£&#Nj"±@lÁÈ?<%~¶BÇ¢æk†‚¡96so"ï~‡³@kZ_Òå¼>Í.cc`Ì-õ[ÛÙ– k`’0XÃüñÊ™%_ÈõkB4âÙg§×LJ`›8ð	°FÙ—™²Ææ9Ê€dbš»Œ°×Ž¹6ÿ¸b ¥îÓ®Ø€¶I¯_‰•ÐË˜r]ðåW¥gYkÜ>Äš¯ï¾§aee0›±—³Þbÿ·Ô>›‰,ûcXÿ~›9J²ÀSõÁã ¾°|F<õi
4TCTÃå\CK«Ü¹sîÊës¼€—‡?!’xV¬¬£Aí¢k	Bè|qÄ6¯„TÜ+1Ê4'œKüÏ¶ƒBïñ½-èUŽéæ¢%°3N\´pOÿUiJõàeA²áRlÕk$û­jÆ(!¯Ç:Á
ylY¤¬‡‘„ÝÆ,Dƒ‘p¦Hø·¥u!;’‰ßU´÷[M(ÌSRÉt¿ä:¿²ÔQ–ÆØF³è*€§™±Q¾fÛâŠAW/ÝÄ‘O­ºµÈ$B¹jœYÕOÞ³X!1>]ž›!s”5H­4¨tucmZãLÃ*”(ó%{‡Ó|«”¸)Ë1™Ì§eN"õucû mþ;ËÒ½É*úîÚ™MŸHgT\¼wocÿööŽ|×`_Ïý™ŽVJ¦÷¶Žôãõè¡1€67åt‘YÕªÅ¤Pm‰Õž|R´vý)¹@^¾@µË*SS‘-¯';g~93W¹89=£#òÚ§÷gç’gnÿîá™d*½°ö¨N¦Àþ„¢Y[5é‘§gnüñwkÖÜ½qã¿¼-X{Ï<!½nMÚš2a 5O…Ô­þG]ƒFk­O<ÁÑŒF˜]M—e7=ÑÝ,wÎ¶¼¤È>¤Dƒ&„`Î~wGÈåêG‚¥HX÷í–WÖNk<ÚT´¶â/²+ñÍÖ†›†›Žó÷f8Ï&³
¬:e/’ I?¨Q—ÚÿA#Hó 21˜¹†9@9ø±FQ[R¯|V§æÎZKw}‹`$âQ	[´*Û5vVãámA]Y‹ŸÇ’$=^Ès8uø =TN…·\o>§ìGXmÿþçŸã7žõU*Ú¶ç7oÒ;m°Ák÷”Çxâ8ÊaÄæÈël?øòËÿŽä¹_ýêÜW¿úòšçABØL©õöŽšºŠµÊ…<qÚ
áŽö]5—ÑšÇû¡>{ô}ñ˜c[Ï”iˆnÔs×æÖkÇ®ò¬1V¹fŒnØCëFukâ¥DýX{a|Lª™à€Ætµã§¢yG5°FäÖ(g+äÔ 8Šp±×®14è`,RãC£XWSDt6¥°UH¹EbÜ–Oç7‘G«h:ŸO/égViÆ8¨k1ª±n¡Ár°ÖïY-º¬YÂÚÚµû*6ºVwè+ƒ5ÑÚ«úýÖŽ\;Â4Å>òñ†æU(k«ùvxx
ÖjbÛê&2Óùdz¤7••+Î¦<]“4$ÅSršˆÍþÕ­ç³ñLf|É ÒQÍõ4wt|£i06&^³TÔv;g>‘9G¸þpd`ÁZ‘¢¶ÄiŽnšÇá‹ÔâxÖ´…R¶°~RÌ¬É2ôRcf5kk¬¦«ù')vÑ01Hãb;ç&±íÏQ‡ªcsk®¬_…˜víì€Ô5&HjØÈY|ös`gµ>š6XMÄVl.bÔæ¬·ÖÀ$ÑšËWˆzk$L9¬!n„yá4`M¥ÐSé"/Ì²ª4£2‰gÆk\Î¼g¸ô[còégcÅèL˜ˆ¶÷=Y˜(jŒë°¦":T8`Ò½ú…f:WXœÄôqQ<¶¨¤H¬µ­‹€Ê$ÒšR#SÖj	O‚ŒËþ–25x°3ž	,ÏjDqÑZØ‰A|0Bs_HN8¥±ÜÅGŒ9c$äDÆØ]™jÂÁˆJ™ÊÄOYgaÁš<¯¨PCQcÀ³vØö·4›¾ödÝ¬zTY‹´µ=WJÊÊ·"ç—û—Öw²2J| ‚‘e¸q	»8Þd‘	Éé‘WØ:%6Jµ1—³žäRtßÐØŽâë	äìÇÎ#”Š*ý“¤j½¼{µÁ×Ž«*i`‘…9OÕÉ‹`)Y–¼‡‰bVšî¬®­-kÉT¿ˆÔ–Â¤ËÄ¶tºW¥ipíC‡p{ìéÌf{9»“~õtX;1ÒÓwô(°6•ëïÜÔ…¤Y>NmÚ´;‘cýLbZšñÖ" Æû‹kì‰÷‰ÑÇÛª»ŠT‹IM¨æ°vJkÌYnÌ²ï¿@äem·f¦ä‰™û¥J]³ð›ß\^˜ýôÒ|Yç›ïà*’[›#Ð¡òÑ¼Ýþ_#FoöÙ­¶õ?{xã³Û_<|ïÁÛoÿÉhí/¨\ã•À‡ºasË6#§Ô­š‡Ÿ«jW¯>quXëì"')j³&‡m|yõ{QÏìÈKÛÂÝù‹aMaÏ
K%ñéå•5¯X+nˆ=±â/²+ñÿ42Œªv|˜‚µ^n=H\¥)TK$P÷•‹bæm?éDº\µÚòíÖ´s¼#ü.øÈéêÐ‰'›u»~²ò€5pB1À!ŽRûˆaZ‹=ûµ·ƒÝ"#HcFh·-UÝ´£¼¤Ær+>¬\x{ÇZ{îiD4$5ƒµ·^}õEl
#6:¯œÛÑ‘/©ŒHÅ`£]Ú¶—‰/£±ñ ØØÌ1ò¿¢\íWGÎ}uïËk˜ÞA\Óó>y˜"8âe‰tÇ=ÍâG~'x†¸6êáåÛ<ãõÚ;¦Ã(:Øî_ÿ¯ÿc»ë_yí[ýããJUÉýá5½Æ¯ªj¯ÏÕÖKx«‡ÞÆrí…ú±úÖB»¤8šÙe 5 Xë‘fÃÚ:‡5ÂA1m Ù#´6el¶Dpš°iÏØÒôåyc—âd}*O¤#V³>ki>xŒÕ¾Æ’³E°Æ®IèGÚ¾Í-×^¸C“5/tiäþ…ÙËœ#	`‡Öö?}¤¦©¥®î×à¬×Ì·E¿µmJµâÌwÜ·È0ß4˜FUG¬¬	Ó:Z©S#€µ(ó1Êƒ4ýqÔe5«T#ð„´Sœ 97¦š5FÚÕÚErNeZ B¹š«f1²+ÐZ€*mKcÍBú£í± )rƒô/FËqøÜÉÐ2+ÙÌð·!‹ñL¨æaIE°æh¶‹3\ç*;“rœßþÝ]Ûé‰} mnâŒD´5Ó4X£\Í}úÕ [R›qžÙçÏŸò9y„õY‹½û!µ×žÑø	‘lQ\ñÌÆÈ¼_i…®ˆqÄåÑû®QG‡Ö¦9wÅv‰bÞ/[‹I3wHnœsÔ¨}"‘•Í–õ¹ÜFR–Qâ¼‡›)nNÉ•Ön-¨uœä Ø“‹UHi¦·m¬\ÿúëm‹¬ÎU!4L«Å,í`<¦pHsxsÖ2XÓ¸Ú	m™¨;mDšSPÛœkLŒbYñ˜¾€LÃ8Gþ"»¸€-V½¼×šðLÔæ×,'|î&JÙäYBƒl‰lj‡}¾¦¥ÆÚ¬‰Õ–UÖÈ‘Üzåú•õ[·žWõšPÍa-Ê¿ˆò4Mú°-DÀ3.dG¸Ñ„j‘¬PZ}š–L|ãíNýDÌ°ºÒŸQNðó&Áž&*ºÔ)Â#8Øï Î3Ždû/¦:+Ô ôKIãêRÀ*©Ï´¦¯Í7£;x¶V:ªx1Ñ”ªâÉ•;¿]••#?8,¦‡ùËU(CtS¯Ä³Áîß]Û¸!tPëîÚÛºwª¿¿oïU(eï”Y‰ìŠoJ!û‘khŽjÖXˆaíošŠ“šÓšÅ“×¯fwö³oPžöó_üíÖÂ¼@Õd°r±sâÖíóoŸ¿5;Œ9Zç›«ZxqdÒzžùï@æàÍÐ§oö›…¶²é…o<x8‹²µ·ß­Ý}WÈo½ŠÍÈhMy8Fk´î!ý½ë(¾b}|˜¾Öuõ¥®tB}º{á1÷ë7íæf¦ÅkVaRÂ²³X§•3²Qµö¸õ£ÃZ\ñÿ7a-äAêƒ4HÆk+%k+±ßLw‘¿ëMó'óx^å‚5Ñ¹÷R=$î7Q×í)×ÀšÝ ¡Éã×Gb)IÛFÜ9ïwvø3Œ	eÝßïHkLDgˆmþ.q-;«X³Q5WÙtÿ:ÁîåTuËÚDyt' ×ü-WËÙsvÿ–7ŒÕÞR@jQü…Í€¼¦„ÉØØxÐßÚÒ"cf³Z67ä§‰ö?ýZ;räÈ½{×]Û÷Ðà²ÎA,&­ëöŒ+ >ÑïÜ‘¯À^’»šõoó»¡íÞÏ†ØýŒ`í¯õ¯ý5‹ò TÃµ~^úëeþk:³}hˆšñ!R(	­äÆ§Ú!YîãëÕ˜‘QÉË9kåÜQVš36‹16#1©±ìÇèÜTO 5ÚTã”Oµ±sX³ÂÓ@®‘ëX>©·µ“¨SéØã°&_Hö±Œæ°fËÁZÄ“øÊŠ¦æ
{"eh$On8D—;`Í#†µ§nò»Ö¾C"$ÿ9rî¹MÜÐ‚ß\¹„9jdÖÊ²Î\çÒùî‘‘ÞÎfõWÈ&KRˆlRÖ:øŠfz2ªûk4hÕ\tÛ~'3›™Ñ¦ff-Ba®r‹›_³×UNÌý¾â!¬ökÈ‹DÛRÄM±ãžh„;­ÄùÅTæ'ŠW5âëuÞ\/$J³ë™Ç°¦ÞjZål¾ËÃIW+ŽÀÅâNÎçþqò€^k˜¤ö}T5Ïp4AM.þÖØ½.#êÕ k¿ÿý³öâä/ViÔ\F‹•5†Øiƒà®è•Î’ÿÑ‡:œEé‹Z6´ŠB}Ñ–0KÒ—ÈŒe6ºý#?©Ù‘`ÉOx›5–¤¡9!ºÚ>¥ÍÅhfeB k¢GÑ™ítô %Év´—ilh%m[¯lUn$rI2<,–À‹Åà2[ñ;»	8Šà|÷u°†Âã	kGÉOQ¥Ú’ÁÓRº—Ãš>&a8Y} ª‰½tðpŽ£è	-º0oV”t¶˜V[*ÑÔÒp}õuëyýäõÍ²î»¬)k^²V¾d«Àé¿Ü³ 	o§æ†!ŠGýuÃ”CtH˜ª %…Æ°Æ! ½€/3Œª.MŠ ˜“¤‡9¦þÅe±…ipqýÌð©&Ó/M?î ³É¤,j–Mš_–ƒ$Ôµ|;‰œ'ñçò¾Ú©æ´ežH[KË°_”|ÒÿZ:Kk+Qò‡ÚûòÌù¶ÈzÌ§ÍMÏìíÎgúöN7î½Ú•LvõŒ¬Mqˆß=·&'4ÁÙ¯ßÿw6ÆJŒ4X+µbMÍAÍ=EŠ9ÍCÇë=±/\xk~öS’gï“ïx‚[Ûôì§ŸNOÌÜ:3{?11??ÝÖÔ4œêLŠÕˆP¹^–BÒRTGå–Åz÷þé¹ê¶…ß>øí…™»Ê„4›‘»ó_üX#ÃæìÙ#Hk‡t§?É{ªÃÃ˜wS]>è>#à£î-ÄS©Þá^÷ç÷,ÆT“±›ð˜]ª¬¤4Ó/¿Ó¦F‘ËÀšžÿ‰P³6ZbÇ%k+þ"+±ßPÛþÓÝùdïñãÇ[ZŽk©Þd6Ïnœ?øk£÷…¬íšî¤öwÏ‹Ùüþõõ¥K>æ9âS÷‘¦Æ®šÀë¢ÕaÚ´ÖÈ+Ú©as‹ƒi-.'ˆ;˜z'ÆÞòùÄËÙÞÊãiR6Ø X;/¹IØî8ó·ÙPíÂu[ñx‘ìu…klŠ-OŸ{Ú;²‘I$ÙI‰l÷ˆm«_^B6s¹:Øuôh×ékÐÚµ{TM]Û°TÊ;<ÿxÒ)‹×žÜ÷“%Ó’ÞÞnô}éª×®ýs(^s]-„q-Ø`5>¢{E'ô’{×:fã >ñðCÎ£Ïÿþöq
Ùr¨i™RÝuuYN²—Á5²ÓÐÍìo¶FÙá6#ðØRÊ#!n+ŽŒv­yLA[[­5Z‰ä¦T5ªJ‚²Vá;ö5"V«("4—	‹hMÂZ³V+6l®iYÛðÂW_©g‚ ÆoÎÒ ñ1X£ÇÚž=û÷“ùôæ–¯7´ˆÖšË+š,R~#k×šSÇOŸîM¥òúGt¤›ùë T5k­õ¸Á(#²=r®…®ØÖð€tHöJ}Ô„#¤æÞ"(kDäô(h³¾/kÛk^½ÆŠÆõkL¾´ìàŠ íñ…bg~æ_k
qa0‹Œe4™°W@kÆs»“Õ€5”µå`­Š
¬owÕ^ßY§µIº™U¿£›Ä5Æ"73ƒÖ ¬1žødü÷Ÿ|Î%ó®¬±·pë~7qeÍ%5Í&µIY3òqJÂ¾2
°¶~ý¤©™¬:¬±EÞì]:3™LS€MÎ#€0Í”5q˜ÎaÊ¯™HlÇ'Ùs¹ÐŸ¨ ÓÈ|\œŠÖ¤öñ`ÇFÌÉ
Ò}ûçìŒ™BŠÇÛ®´¡¥T-¢·±~³òŠPÍ	-º£Eh»Ü ™y<Îj1­=Z½f3/2öz.qOH_gjÌ@H½`ŠBdfþe%ŠxQ°Ö‚@ašš‘›5±¢ÐUd'“™Ü´ºîüõÕ¢5`L^(k§Š•µ­:¿þ"-±õ÷ÆsK×‹ÊÓœ&	1Ô^'üHøØÃ¹Ž‹=²Ä--³ƒoÞ|4£vwº»cR•`‰Z1%Á:ÂK	!3¡¿–¨ 0¨¡,U›ÈÎZò[&»ñ”²4ù‘®—äM´“±H6Õœ¬NðÍ%ð±÷0yús+;]†²å )“Uòø¤…tSS:›I%iì²÷hï@+½VöNÛ;Ð1Å_-ks­L|@iÐXÈ}|_°öÃ²íD—ÔˆeEbH £Ú;3·.ç˜NÞ¿ü‹ûXñgÓ¸MVÎ.Ð"{fbæî›ÙêYÄ¶²jXï­àïðÊs%ÎÅµß?û/j–÷ª'>ûìöí™»n?¼ýÞƒ÷nß~\ûâ‹°á[f
yZ;È{²/·4ø—:Íz´æåkäˆBlÍMÃ]hlÆY)ÁÞp¬SÙH!ó‘š’f×ù˜ÏÈâLHÖŠºb½²–ˆF¤¬ÑdMÀ¶â/²+ñÍ´í?G*>ÑÙD&$C{»»ÓäEbier†;]ÒçmMz~zcì„Çãh¶¼¶æ¾"qýÚRÇ6ÂÒï“Y’ 3­hiQ`7"Z³(8¿iŽ0¬&Bc³W#Œ’YeÃ½Ã'zO¤¸¨é';êvì“¿ú§E°vþgûaµ7à±BµÀj?æCÁÔ‰Íqmÿþý{ÎºÂ¦ÖÙŠƒÊŠDd#«±”¹m‘Î­Æ<°û4.Ý!ïÐO6\{á…Ã_("ƒIhoCƒ¼!›¨±†×~ô££ ÛKO<Z¼å„J¶Û§âµÚ0¤níåÔðæ™½€ ¾ýCj¨<ÔÎZ#­êë+KÇFÇ§ŽMÑò”ýÉãd–NM\X¦¦õÁ¶ò Ì`41Á+n3xÅ ¨y0è“Á#ºÚ¦Á>aÛ@~Ó&ÏTˆÐaZ9AM‰LGŠûÃtYs‘8’0Ü³qÃ¡ö]»¶eº6ZÃY&*Z{ê)ÓÕšë‘ðräüujÖ¶bØ/H[kºÜ6(mCCËj\ûW·¬¥¸ðtçª|7
h~€—F‚µÚ«a«‚¿H£´Ik™zz®Ù§QÈ&R¾"Î¿£Á]D°FÏ5K~dê¶vU{Ü@xŽ„5Î;¬y'¶bVs‚Âõƒ`Ì,Ô8:—1òGQ*d°Å ç'X0g‘¥Ñ.vKæýæüH¡…Æj¶¦ŒF„š5æmbãè±ýÛ‹&H÷C8Ödi8!Z3¥EN{‹lÑÛäç¢µég$I~.Zãð?Ö"ëþX[vÞ[prSìçãMÁÏ¤'A2¹\Ú’=¤œ@Dbô¢vù-â)a˜PK‚c3ã·’6v‚5[³> V›F¸ç£·F¿˜‘·ÄnÔ…\à—ÉC’OëoìC‹5BÖìçÖlUsƒE ¥¯0˜ü×«ÖYÃU×:¦Íétu@/m-‚¨Æ!°A­	;6b¬=ÂiÅ°Vä4âK¦©ùKd?~âìÁöÈ®:f ¬qðYt,Awân1.¿ØR×Bð»?q•ÆÞo£©åºþ—“XM[±$²›FÊ[¯W”­BYÓ×qVƒÃwh;í2¨|[ý‹î$LžÚ¿ž£Â=Gà#2¦á¸(ÒÐ”<öÓPOA“+K$ý&…0–Ê–ú¯@
(lF¡#³uüÛ0V%Deõ´¤ ÖjºP7\·€ÔJ§KÓM©t4hÍztš[ÃìÚ‚Þ"CÚ»˜ä=Y*o«J£ªª’ù,>Id¢£X(uÒ(ûèÞ\#ÚÚîñ¡q{¯P.I±?k4‚Ý¨³Ú¿ÿc µåÊÔº” à ÖRlýèQl›¯#™þ·Éé333Í«¦?ýÅôôÌÌi?Ó—æ³s?_˜ŸNwžIµMÏÜšoK‹œ­DÝÚÞÙ“p)Ë‰fo— †-¥AT‰ÏÈÂ/)^[Xxx÷Öü­7.]"òî­[¼xñUµvÛ­q³@\Û€…?þÝ­y&dƒÃM½]Ý ©Ž¨hDIÜÛÎ#ÅÏ˜iÊ5[¡|Yqh¹è¥“%E.k‰DÖLyŸ¬¨M¬ø‹¬ÄJ|#ãïzGò¼ô>Þ‰‹¼6¢÷½ŒÏ$«¥Òm–wâ®²	¿…ÕÇMÂQ¡Ã@Ör!“y?F°¦m ¯~ÏEa˜ñÄG³ƒlolÇE$—a×Ô»ƒ-vÉ¶†iTÍ®'XÓZ2I>÷ÅãX7¦¸³ž Ö6Ü;¹™;ƒä‡µ#ç¶¨Tí-`MñîÝÇñ®"ÈlFl*kÃÝÿÜÓg©sºéY7ò‚?xøðÁ“RÊvØH^$1¹'¨S{N pù>Â.Z;ˆ‡<AÓí;Š};vl¦3ÕMàÚé…Ž.Å¸óZà´GiÍ÷:V¶6Ê'PB^Gv¨¬humîmÏµ—k™½Ïôutäê#Z›*tŒÓPF“Û…Úo£ùDXœEÆ†ãÚ˜±&C‘qikq„YOG+†Ï²4žk(Y•ÌË`l°‹·Æóæ3’LñbÁVÆ"å.©Ù±Â¢Lcã¨ðAqpuÆ9ªéa“}_zá«CÀÚG×®½`ºšàÚCM±Ö_Ýµòó_?ß €Ë**j€¶–ÕŒšÔ†·1émjâµÆQšÆöµªéÄ€
ÖÆAµ{~.(U?ñŒõÙc„XgcÏ€TsØ%gê6ÖDj„÷U0¤ó¥˜×ŒÎà§x[AÚ–òƒ‡9A†qq*d˜:ßafßC4v°ª…1Á€ˆ\½PS³An¼V…dvml›¦ãôú3ßÿÞ˜„Í9ßŸ~]|¥9«I_×È}œ¾¤=;=sÿç
úbÿŸW«ùV{5î³f¨R£Ø¯Çx$«G{ÁãÄÅ÷c„¬yêãÐœ»Dcâ®IHË9-˜s±Ì}÷9øu|°÷Îj¬OZÕÝ·U±æÒ«<s]&*}coöÿ&Á±æï•³Ê¤QUß—ÖX6ª	våœÀ­v‘>[U×Lª+v•¿Ô×r²²6N´ºÀ ,Ûˆ£Z© ƒ¡&œŠs!=3ïaÍ+Ö‚ñ“GGÇá›"6Qÿ4ÏØGæRº‚uIk‘sd 5ób¢g©ÇšR/²¬-ïÙ½}­¹áúwöàÝ/X;µX;µlÍš$šï`ÜÏû@kkæFièe°æÉ®ª¹ÂÆé`]uLsšƒˆ„]vÿ,´ü!…Giƒ5dÁ”
šLË²¬,I§Ø2	hJ;EŠÚ­™HÉ˜ÐJ f~kîáOë6N—ÙµvVé‘ú¥á.¢OD[5kºfy™…dg‰Ü•‡eÕ|e8½Fl…|w6ßÍ ²#ŸÌv´WÕ
Ö²8•¤Óš$ì"é±5·w¤lÓÞú]¹Lf/cÑô—ŒQÈ}tLÓÎ(Íã‡kÚ–5O~	ÎuÓ°)Î]]¢5ÅæwÖ”ï8¾¢s~áÓÉO/ÏðžMåôåùTéì­Ùtz¸¹¬Óþ¶t**ß+MB£îm¬:œ.+ïS®5f6ÂqbÍü­™™ß=øãßÝ¾}kvæÆƒ?@ÝÚvÛ‘l£5kÝsgÃŽµ'¨ÖºÖƒ¸¶öv¦zSªi¶Œ#×¢”¢ kš±
À´gºä%²¬A›_kÁ2¸AN¸²¶â/²+ñMÖžéèÈ+’
¢ÎáÞ|~DÅ9ÃÈlÃÍ.êëÍ8¦Njî3Úr¬ÆÈ'ÊuÔµÜ.‚9d¸ 5ÓÁÏÎ@2ÙÇ™‚`­P]­ed+ß˜+rõ… kÚgÐ‡<ø"k¦¨q 4âªZr˜NÖÃÕ‰æmÔ	ß»wrßæÖö\ßÏë7e@¾ø¤vá]`íí¿Mü‰íîåËüÙ6n3^»ðªÛDQ{|íéýê¦ý›¨6OÙgTàâÕl÷/¯ÝvïÎÉ}wÈÂ»ƒ!!éx‡hÆ)xéš“›7Ý®ƒ×†•/ß©£Ájäq^ãA^ûßñPñh,ùsùî©úÑ?à‰àFE(À¯mt´~`¤Kœƒô¬Ý• ‡šž
ÏPÖx¦PÂ2`,­rÜ¤5NàDÉÊ¸ò wÃblÒÏb…Mõ[e%É>ò÷ö°Ë&ÊS}dÂj]ù’‹€Z‘NQšq–iÆY±Lf›òu\?ãð¸®Ö\Q,­iGÝ¾}× 5º¬í8l¥†k­ñ8äM±=ö¼aßZÊÕ*PÒê*Êë0© á.íÕ0ñ>}ú8Ø†Ï÷ãd·þ÷éÚD;w^îô ±=p™„´ÆL¶,cÊ£ñÙºÀ¶L¤¦¹_ôX-×o¬–CßdÆåÖÖ4äÑ¯¨iN«Í|!@•ÂfÑ pY8úˆ}@°pªHYÓ±¨[v›ºÇ§ßþÝèÉ.¨ÅbZøô>5'H>Û˜YZ¤k‹Xà}Ð†©•ZCŒ^y80‰È5½f÷:ùŠbµi<ý=òô4C5uY3X‹›¬AjlqGl8ªIXÛ/Tûàù>˜ ¾ÄC!ý1JE$&½Ïš²…h€cÃ0Ç3–=¼ThÓÁ¯ac²hüf9‘üËŒôEí*VYf?Öl' ò¢œÈ¨tmÀ“i  gÉŽô6hj×˜KY#;ýŒS••ssÐš|5É“$Ò´†ˆmîÏ<n´VÀËÓÐXÖ£Ê¦Ži1¬Å£Ø2†5§5ÇŽñhÐbk#qó²¥òe‘™U©±"¡·f 3O“¦¶Ú—x*›×¯µ¬ÀuvÖ@aÀ˜„µ'e)÷(…¬mÝze­â
rv÷ü›‰u±Ð[ÀÅ5Ñ{û¹ÿ#"©ÐùØ½_¬ª§jŠƒˆ—.¥ÙCxY@ÉpVÿ\ÝÈÚÅh¤,Í×*Þ\÷„9…š†^Ä·am±«»d5RšR%ÝFRØ(òp¶O“Je+7V–•ZveÙ*ÖK¨c=­\Çn¶®M•µ¥C…ö¡í;©¦Ó	öt“µŸßÔšÈgr­•­ø
gúúM­‹`­4¤ˆÆƒÐèÿqTW©½t5ø‰Xm¼+j›ŸÜì}¯]-Ž kŠwn½Y·£®¹sfavöòåé‰ù¶ääDSozbv"™:®öÞmÉJ¬V†Ñ
éÐ®ê·á-ð@gÓz-û‘(!œ÷!·w~7ßöÎìþÜ¾u÷ÆÝ…7ððçÎ¯îØ_ü£µ›7Ÿ:|òÉuÛ¨[³Z….Çµ'¤°Éo¤{ØßÙnASM¬iîÈeôf#{õ‡Éf%ÖØ/‰ÐgÍqÍjÖ,rbÅ_d%Vâ›Z±62Ø×1Ð¬£¬¥:{»“ä“§¡ÕëŠÒ†em$‰ßŒ\ÛO,—Síãe»ò‡ÓØ4iæwvNtÀj‚µÂZ°¦ùr&,°‰%`5‰A Áâ€ÝœÈØû6šV*3Hžþ—é4ÿ´©DóZr‘¼H„<¥Â1±ÚëWŽìþC2ÕØæçß}[qéí÷Ø³]Âz
và~|÷Ýw/\ø//~GèM7¨íÃs[¤Ê<wS•lŽw,à4¾âÉ“‡<Rñ‘z{
ž}•‡û·.xMý_=²kÐhÍåµb^‹#F5ªâ á‚Ü‡žØšŸÒ 'Q=ÚXßÞÚ^Ûnfñý†v~îho*’2¦ Ð4ô”ÿÂkòð½¹¤ä¶©1ÁÚ3=,ìd(’á¾HqWÐ=}¼ôJõLõôõ©eOº$mÆ÷Må&Ž	ÆJAêL;1ú0Y­¹¢ˆÓV±€„æ¡AFju¬ÖíS+òï<µïÎÍ§(U‹	X»)‡O„¤/vÃ¾kk›hMìŠä5ÌEjÖÖÕ´l[[^Òy¼©©¢…X[ƒÑÈ¿ŸtJ¾ýÉ6üƒ:"Ó~	kã&©	z×Ôã ¾åc].g]ÆjŒ)Tk‚™™ÓsÖTcçµ‚2šúõ¼gñ¬E¤Ô4ÆÁÄ1-F6_È$À[,ª1+Ö¼xí»Û·+ÛÒ´4“Ô¢Oªa{?Bj­íÒ$€š‚Õí;e/2·X»KÈ+d?^Yden=0b%kg®ÈV„ÙŽœ]«!®íyoÈgA´ß2=ä'Ÿ¬y$»¢šµØY$â4šŒ„PÕ>ØÿÁL›]£-I!R²†k¬¸ˆHÊíûÝ¿±ãÿ³w¾1q×º¿Òýx¯t¾U!PÅv–g2#ÂÅò”A£à¸ŽK>X`&Ävü'vb»±£64NÜÜØ‘›*=)GV{0¾n#¹Mtì`)Gç&G×Ž«‘ÜúÃIšH÷÷¬µ_¶Ç¥é¹_#3{¿ï»÷ f0{~ó¬õ¬NŠÏðá·zµÆe/N#Ø²ÀÉœ¨Eƒ<ïÍ§½Á[¢´q“Ò°9¼¹syYŸÁk×¤ÏñýHK›‡ÐT—æ­çdM9±2«Ñ–¥¬ÀhÀ»eñÚ–:¤6éÔ1›‘°JÆ=„smã¬³V£O-Œ%"‚ˆ`íÓ~«Ãã¨68Dè¹¢A•}I›8ÞrÐÍ¸³n=±W‡ p•­5Fk³Ø÷K¶ ±×žÊš$ÕjëÕ»=™¦˜zÇb§Å?[­)öã‚µMÕ›¢—ë&ØEÅÓìœÑÂ·¨½»÷{§oBJ‡ãšL¬Ž:²ÚÍfÀ_’dMèÉÌWXçBP(Ó“»Â9KKL«üÞŸmÊ©\%YÖ’–‚™IW¢ÑH»N¤£dpã*æ2‡•WÕŠäªru)¬ûE0µê»†‘$¯Kùü¶žóüÈ®áaŒúÓhr#ùR‰$§»·':ºûò}u-4†é,m?1yb:®R;XÄGàLFâc´yŠñ¢ÜNäøñ•*5ZPÔ"JcÙÀøà>\“°öä¿ýö†5éÌ'KŸùx1}¦W.*x¢¥ks]i½ç@†©Z«±REB(Ï”æ°F0%$ó¤‡`’¸~¾Ú×¯½ñùÝ…ë7oÝ¼vE.#s‹¨k·¬½à™; o‡«óÆV£µB 5îdÁß^ˆLûOµ§ù¾‚|fIiEä'"XóQ ±ŠÄê æ·pðÛ`-!TsaMÈ&iqmÖÖb-¾‹ÂZ÷6¢[¯@{U ŒÑ’ÆôØn—ÔZ¹Lª±#¶³­í’×1å°ÆB¬,‡úk:1äuA"zl~@=zcçè.,Zki­Ñ[Q›‡$Z²B3ã¶<#Â§ÅÝjÕcÛ¤µ`#MøE/×{öu®©“§°‰¢¹ñ?Or™°‹ÁÎÇžúß¼z#½ñ77¯¿{[Œ67·øµÆ_™cìBÛ/.IvÃ(
ªó”H+c{^ýX°ö· ÁD6lúŸýŸGÖä/ieÍJ~ôÁ~ðñ#Žr5 ¡@Ð×Ú­|m¬àÞ«òšØ)„cVû°÷xáÄŸÇ‘Z7Ó§t½Îº‘æÎÆÁ|qŠ¤IÙDrÌ”Ÿ©©"wØ˜b­M°æêJËV”…‘óÖ’lZf¸Ííi©6@Ò+Ö¹B_Ow:“€®2=3}Û¶ÿ®PA©×@O_ÊÓÕ}¿Q÷îÝ\m3ŒƒãXÕ›êÌys= ™öÊ•ÔŠÉ@g†ÃfSòø;{›öþè­£ÐNíwvBÆGŸå•€Ó
§^@Ùk{ÞÙ»w/MÖ¨—«á¬5
¹Q5të7Pf ºj¨ñdk{z ´›|H~£U¢~‰œ~o›Á4Ïåg")ÍGÛ Ø6¬:á[&Í
‡5d´Ó€Ù¾àq‘ÆØ#+¾.‡Ã™¡¿›Å`mq3gË¢SäGÜh-¤9:oiÚ°·²VÚ¾×zq¾ºnG_O•qJ®„ÓœÕâäGÌ4¸CF£Q`nsXcã­Ö†Ùõ…lu[6¡ mj|¬µhy‹[ô‡fk c&›Þ@\û9¤}úÑ”`ír åßàZÄiì\X3m-”¬…ÜÇ8RS¼áÚ!t³¨ìÒ¢S™€mˆ`€Õ$sËñ·"ûÈb¼˜÷ÄEÆÚ:¬yÆ£ûó«ª­EÂ›
ÔŠÚš´Æ¦™Ï`ÄjÌêqCÞ x÷Ó-íüCËy„¾¨Áv§ÈÖùÑ#ÉƒÜôPÝ®eÎ[Ûd=Á#s†€Øò–Mç°ÌûÝü!2­šI¨Ssþ
¨V'mÕˆúiI<â™AL¬ÙÈÒ$µéU‘€¥9JYcåA‚PÑ	Ñ3ðè\©Œ™\q%Ráü)­1íÂ²¡¢ÒPM›û_ì—Ñš[ìHÌÖTbV²£ÆSCbtdä°¦±Ãk+Í=YÑ$DNc–à§{Ú§ÎŒ(O<GbU€¼`—Y_žìç]öó¤œ˜ƒÝ´Ê\íëá<Ã:@ ²vWÝºuðö`Ž£©Év3Â~¼éÌnŒDÀ–Œ*åêªõÌÐwmk­ÎïÎwòôt÷=†Wð`fwï¶â0ïÖn+gNìÛ^l›îËËZ¤¹ŸÈì@ù+®Ú1‚á¤† öÕû“6ù‰G™H!Ø‰8¨ÁiNi;#’Ž#~«=~áÂ†¦5ÉÔò—.]™»ž•Qˆ–S›ïúŒë–*NCÞÚ½;"K	Í¸5iô¢@ñ`çWâ¡¥;—®ÍÎÏ&oÞýòú–wßýdX»téžL!UÿðùÛÖH®…Öš¤µïcø|îä¹ãç
)jûù…ÒŒÕ’Q¤fŽhrˆLj$…MåEšå®¶ð-°&”yó±ÁˆIkî/ò_Öb-Öâ;g9V+ÐBªDðÇ]öýxŠdvŸZß•œq§X Köýæfþ’<¨¬Ù"7‹ò#‚´ihìs‘£ÿ ¥MëpqÏ[Ãªü`>Û";½ k ™¤5yô£«‘"ËjD4¦r:ª ˆ/{\+Ö°„(`ôqŠ„N`m£ì?6<NŠ<×‚Gv>µç-^½áÕ¨‘yé¨¶8we“©bqaáêUÆsïaéûÞ¯–n^BcS!›¹ØÜÛßCÀæqð(Ô„¡ uûAîjGMZ3·xm§‚ó~ôW î9] "^S~¼_b^{Øb^°V.®±qPÛ}3á!ÛûÜ×ëpvúµÃ33}úk~˜ûû“ÒÏ¦Úd<bkÍl<Òt6¸9»©iüœáefFù“÷«nKê[Uj=ÄL©2Ó×±h5WÛžéÜÆ¶—*¸”¦ºÇÒâ³LwBjo—˜ÆÔ!Õ¶ÖÒ,Í‘mƒÐLCíÔÀ*?âD'H
ÜÐ¿ ÀG>×P³÷(ºÝÔ>xŽ'O`ÊšÁ­OÝ ×ø"íí<¶²f¡—Â¾dko/Wâõ5$döž=™,t©˜?A¤È„èHà32­Ÿ„ÿû•©ÄGƒ²…•øMy}K!	²igg¿š¬õwöŸ>]$y™¦‚®f&#ÅÐe­sb*ŽíX ´@]©±?­‰1(-ŽX4+£µòüÈ ÛE“Õ8"ã6Œâ´È@ol@» k+â+ÆlÊ‡lD"ý¹ñ±ºùMó-Cgd>^ÄóÑ|ûÝ#ïCxî2º°öé§xöª:ú¬vèb¬¬ùÖH-–Ö‚dT«&P“¶öç·HACùâæ
Û¸ðÈqI§è¦8oÖ¸k™3.³zô*3…íVJÖl…Ï‚´–(Âh<ý›û5[×Ã[¦a½‰–¡üÄðH Ô×Sÿëešƒ;¡±f(Òºùe Žã(gXhÎãü(.«%'¾EZ#jçë4'1Yöò3Á7Éq‡1%Á°ß¹-N‚ü›Q®¬…	»–©·Ðž•0uþÒ&Xx¸u¾g#zršwÄŽK¢õL+”
™«%5iuZÛØ.V³Ž•ÉŠš Ø…e/õCüÌaÍã©Ë‰M7.à\rá‚¥]º®c[hô>D‹ ¢¾/:—Z¦›ÁZp'Ac)eÍÖülût: {e2œf¬æyûd)²©×e+¡qã¸9Œ8SK}3ÙZ«ª
¥¦¥(5ëÂÎDÏ#[Æ|èN%9È7®1—Y×ØXBƒÚºkPî"¥AÁZa{g_7-#³üULº;†‹'NlËÏLæ=7åT<¶«8EUò‰©îýÈÈAÍ¶¦©yòãd µßÐ¡_’šZAÁáS!b^‹iíI±ÚF¨5JÌ.f2 ™Z'¤ÌQ¤J~
dAÚ²™È™4åù«lu+§µu. &¶üú·¿ÞDÙô?.Ý½µtíúí¹{‹‹KKs\í©P»5`Íim§ÓZC µîãÝPèößÑ çÈÉ³Èk…ôØñ³íö†6Áo«T5K‡tZÛX¬ÐÒý5l:RkÚôÛa-
¡Úìý~×PÖÖüEÖb-¾sñßPs¶ ¿Ú9ÁÚn ÁJ€Ož:)Nkç½KõÄžõö7ürŸâURª6ÕYQjËÊÆÑù)Îð?›k9õß’:a¼–­Y¸yU>XA2îŒaèÖ˜ùµÐtµÈŒ‹;Q:WÐÜÀs®÷ÈY%•ó¾,ekŸaÀøœ.7v{K”¬}NµÚíÛ·•]ñ¸z÷îÂÂÇW¯.|¼påê‚õ`¹­¿âà…lr!‰mG}î„d¶7÷<F-mGp¼HXûWóÔ 6Üäq(1V8ˆºÆÝ”¶p…zrÃ£ëIB]…×Ê€Í‰Í©­ÖXY5V–'8ŸR¨¶©û&Éâ“F¤uf˜Ò-íô´1œék‡ƒa$°ÆIÀÛŒho²e’±ú®Í ¥•J}:RÕ•,ôôä©L)‘éîmµÌÅt)®v‹Ä4<óÛ5c5^¥%-)2œ ¨á„V—Ô˜0Lj@Mž’Duõ£G?ØP³áƒ¼cB¦ ØÓ Ag°æ¯ŒÖŽÝ¸ñè†dE’Ž?úšš6`ùÒ„È†W8¯¨à\Ÿ¬¨L÷ö¢7§Ò9¯ñŠ c 5 »[‰L»[&	‘Y~4ŒÚÌË_{p„Ë“°ÚkHmm¨ÃEˆÍT¶¨ª­3‹wz³Æîá¯mÑü™àâ/jébaÍÛ«ÚsgnÛXFcªíhœé#|iZ[ñ«X°ÆÀO¹b^ã`<‹a5d×PÖÚØ7ò‚cxTR›%ü¿¨–j—á2˜š5XL;¿å¢õÃ†äÞ8CCle?’ÉâÚ™‚µ•žØú(óAZ3R¨¶ßQš5@ËF!Ú±˜wL3gÕŒ™­¾ÆÐÚ&ô6ƒ5œ=8\M®á.3‡l±HöVzk7³¢fmÀÚÄD°Æms6ÛßÂ€Ù”JÌ°"[¤mA#€µååâD1+DãÑäˆò¥á·‘Úeñ#ÃºÆ]
Ò!­NMæ"Ô¯]ÞTg«Àš-K|[nôâ5g³`ÎÏ’¦k†k¬ÙYL¾-bBû«â5·ñ¬æsÖW.6ò4Áš|<¢kŠCKl™vý@ÖNZ'ìŠ$®ûj©Á­µËšYqi¢ûÊÊÄŽÄÏþyõFk*YS_ìêÊ;øÕ¦¬9¬‚Ykj3àªXøµ°sèÒÁTàK|$,2IÐ¼‚æ˜²¶Ø‘‘?ê›ô‹+$²q‚0Ž*XÖ¼ùŒH¤ÑŸ9D5›M¼pš«Äçp`PR« ô¦äÐ`WgM§i±–JvåPÐxÿwæD9”V’!û
½™mÅ‰	ÁZ¦·oxbº£”ïóBgbócýŒ:;¦Ø*â*5ôcû¨Aí¨Q¡öã¯¿~QEjçÎÙk‰8÷QœFNŒö¦>Þ¼Ø­E¹&Àš:K_»øÆõ3™‹×.žÖü÷I-E¡=žÏ'UÄýT¹ALè·êXíH¿pq>ŸåM %à_[º'L»¹¸xoéÝKK—x`°ö¹h-hkjÐýè“5I÷l>B™B7ùÐÚ¹sl¨b~ñÅ³§ZÍV&ÓÄŽL"r#B6‹å±ŠaM'…ãßkóú˜7^«y$Aä÷ÖüEÖb-¾cñ_¿7Ö=vv¬Têñ/Š¬C6¯NOÊ\·+“¶÷>áµ
nOšA_DbÕw|¢üðrZÓ\bD'™ìrv&¹)•­9­å#OHXÍ­ž©4·üŠW?§#Áº‹ð·(£nØ…±sŽ§Î;{öÈÙ^ýs(IÇ¨¯|*ÖÌ^d¿„µW>á¥—ð¹´¤äGAµïÜ¹uëîíï,Ü¹k±°¸¸ð±h
Ü/ˆUMñü›û1 Ñµ Ø8MÊ¡>þ{Žã$N<¶çØS6)llìÅ}*Nºp^‹6Râ(‡²xa5l›T¶r)î0¬fŽËz_µÉÍ5Ô""è¤¾µM¿¦
6–Kiµá)eÇ¡¬é³÷°fMÊZ5Ó8’ð&nGÏÌ$n“d¬T¦”‡©êŒëk_2Xôë^Mmòš`ÍùK€dò…cïäF1ÙJz$¦ìLþ=ÎO´©æñ·>xDOôËg¡5FÊ`xêØAò U±F‘zZ;n¬­oª!’ÉÝXŠ5X£*~ýyVJ‚µmù>åAªË¸“«ÁÚÀ `FŸÁ:šû‹tf½ãy‘¸÷Ô¬Q1Ø&X#«Ð«Y_í~k@h@°C¡cÔ4[æÕ«iê°z¬ù80˜«b«+kÑ9ÎwÏ¢Å;C´Ñ ¬þ
½$•F²ã`É-ÀÚ¨nFk¶±=ƒáy<F†G¡–ñ3ççºžkÐ`5ðìî—%±¡³IG; þØ˜BÊ)òëŽÕÈ5Ü ùˆ3!c\‹¬EbeJ³`æüC‡Ôó‚.™Áˆ…÷Èv/Gç7^©„mPX›ñœµÀe#L´À‰Úñ)²m››§‡¶ÌÇ[Šb5+Rã)žÈå¥¯µµ	àÚ&ÀëQkÉ­†Ùááä6ðâ3›‘Æ,‰ð ¶EµlËÈjŠ­µÀ˜ÌulÙ	MŠ˜/zKl§5¸\æžlËa­1Žo#5n÷‡ŒRªBa-F5íË±-´S›5Y‹±¦qT r×ÌÎÚÿv¥—INOT´Ö¨\µYm}2‘lµ×º7n\hðTH^Q¯’I<¬Ñg/¦lë ßyV¦ïmkœôY`-êäGhà%œbbW#Áš5¯¹(ÌòÓâ+BþU"«t¦Êš¨yÿkàŠŽ8‘¥¤>iëº@cú:zòà8f‘^¤ÐLŒ\IÎB#Syš@p]ãV‰mnh	Ò3kä¡ô[KÔ5æº’Òž ÄUl˜&Öâ É› ÛÇ2™>~ëúùÅÌœ,uóGe²%¤ØS£|˜íd³ú¦ISsW‘àùH0
ar5ä¦¯¿>rŽÜG*Æ[¨9©•ƒÚ›®ù³ÃšZììÚÍŸ€®Þ‹×¯Íg2ªýS¤¨ÝP±ZÆºŽG¿yD@4Âà™õÖrm—ÍÌµ¥K÷ks——®ßT$…ê/©è!8ø?ûú­ímª±‹ò‘#ÐšÃšBÒÚ9‰lÊÊ•tfRš@M*/™d&¼!+ÓúÐhÛø}oSÛVµÕ•5@mÞ•5XÍ•5K†\+Y[‹µøÎ	kÇÝÄÀ¶°Æ{T½ôÛ­Hïv9?íV]º’V&Ù¥¹Ï
ÄéC¦ËêoÅÉ‘%«R£Arž”ÈTE¾C ÆVi"9,þ²N)iê²&#È¼ýÝu)-T©•Õ³‡w=µ®¹­çÌŸ¸P¨ÏãïêGzw¿þúÉJ+ZSg3{³•‹…Lû•Ôø9@Îñûê•¥¥«WA5`íÎÇbµÅ;·¾üòîÝ[ÐÚ=—ØTÆæÛ/¾yé'6/f£šM>û÷{fd€5î¾ÿ3°ÈýÏx1Ý›û÷<±GhG lv™²6/_“Ò)^+6ˆ-Äû«ðÚÿ‰g>zåtq’d<ä3£žMye Ùy{Ü2T·f÷©yüÃmÊy„Ê¦&OªA¶wÐ¦þtTšÂ$RZïÙö¡>Í°ššMWÖ4Á_ê~úéL©¯×@­:YHoa| CØ¼&Hq­IÙ‹hÉ<FXíÖ0p¬qÒÛØ€íÀÑƒ6Üxî‘ƒÔ­QÆ“®4H‡5imT´³ÌÛòOaÞì‚Øqý£ÐšbC“,ü[k°…ÄñÔ?…d²õäIµÇ¦;<°–Hð¦¯C¬Ö"¢5ñÌT“l.i9¬¹S‹ -·)|…kòÄ£JÛŒ‡?;?¬Njª9æ°ÖósfLíÓYHQ,óÕUéf Æ¾Ü’±b$ó3=B? ÿÄ6Ž[m;¨){=ì°¦fØá”Ð3›pb3Ç‘û"wÕRs•m9p Ö™ßD¾£ú_Ãgê|°ÆÞ‡TÎo‚Ó>eD(QòeD`éÌE¯Yc£[¹²æ5kn1òKXÍU5Å«¯ž	‹ðX¬áµ¯VÖP•›ó'v-g‹ã#Å—Ó¦ûG.Bo[—;Ô„u-mÓŒ:Ç›ÅºÙÁþ¶Ñþþ!N¶¬ÉÃJ-¶ŒçÓÓoÖï‹ÿD³ú²"Áá‰Ñþ¡qþÊ¹gÉ¡¡­»FÉŠ,ÊŒex™Ïr­šÀÌ÷ñ4B³Ææ<XònØBÑ#/b“1¡îÎh‘ìöŸ†µP¥¦‘öÄ¬¿d&lKj†E^9äG¤³)"j›¥dÍ|…’fù(;êÊYªFIó¨æõ¿ª\Áœdbv]Óœ¸Ãìùf«(k7@9ÖÔÓQ_Õ"Hh„MœÖ¸‡ÖÜÌ½òéAX¬¦‡ *)‹|$£	ÚIXKIéûh²F0…ÖÖéR·¢M¦wUî©`aÑPDÀÅ‡øüõê¾Íi–*)Û~åÿ±•åa¦N¥Šþ#E\}Œ£µê˜Mè<h-%Æ©Ç‘$—Éíj¬Âq¾‹zµ"1<î*t4e)eûÙ.¨Åa¬¨ýá>Nûê''~ÂMrÚ× ¾/rÅýâ‹³(j§~¸
¨Å˜Æõ—Û}x-ÖÖbX£­‘îÅŒ÷P®·+å¦™’Övƒ¢Lë%còãð°	1«­c–°ˆö°Z²5	¬1¾x}‰fk×î‚lw/}reM¡
õß˜¶FÅÄQ²èŸûé£^·vÖ-›»A4s…ãlºHH‚Ïdªilí2ÆaWNÒÖ¸wqïK¤MÞ-sasÒûû°†ªæyk ZŒkÄZÉÚZ¬ÅwOXƒä/²i‹wêèˆIS¶ÖÕKÙZÆÜ‡g‘îÙk­•vuM&cV[UV[5Â{H)SÔ*€Ã<¯ufÐÜ¼—`­Ó2 ;k-ƒQÊ¹œFd	‰œÆÝ"u)t•¶":;÷b!56–«‚Õ¬Aõë_œJ¶n|Ù`Í¬ $XX3T»ýÞ_–®ÁiWçn.Ý¹soXƒÕ ¶EîÄÇWï,,Þµ¸º¸ˆýÈ_HlÇ5Šˆˆí%‹o^øÍÛ³‘dINä~*Ød/¢¬†Þ¬qð‰ýoò] ð}¨Áž={À5.TA_3^£š>ØbË'¶UD6qv*÷UÁY8#ž¯–*9)c‘UŽ`“Á–‘±•€FB—`e¬Fà:$·)DU³¬H¤%³šìHõqz_‘¥žmt‚Àzdßää¾B²;S„Õº{º)D“²¶;#=7]QnðØÐTÃ¾ÔSÒL„¦eK|d¦¡öí<\˜„<rãÆ;7lx„|T¸Lº˜†k^±veóà±c7*›€5±Úú&HûÆêÖõl­Ôq&ÛÝ~Î˜­«KÒZ)‘ÊÓä{€þÞùœjÖz¨»„Ú¬±]'¨¦j>Ý²Í8· Ÿ‹ \Ñ‰xSgl-Õ‘Ç¸1?±²çƒ
6WÖ¬ÿxÛÄÄæ6åA"É@O!˜¬9É	Ôl£é~›x‹h>‹ctÂ»i-tÝŽ\úqqÕÌf’Ê¼½šYyÙZwá¸G´ß•_ÎxæP>·Çò²¬§Í^û£¶ŸK?ƒÊÎ?£Ýsˆ<€ÒÉið‡~-X{!XA:°•	k|fØï´ö*¬öê¥3PØ!/I­gÇ—ç5×1ÒOó»~3Ë]ýùCãmmCV§ÖRÄî¬ñ|¶5-?„ôFòj\×¥mž(öoVrg~~Ùòõ$ln>4ÔÓ˜#¤ÒsÍ´§G[Ì±?‘¶Ál< ¥¸˜æGÔ?>Täg;<±khËþ¿®—	Â4.ƒµº¸HMaUk Z¤¶1ç°Ææ[â]­>¼Cæ»²p¿§2X‚Ö¿ŒðDx»GÎxÖ¬ž­¦Aõ£ôn_ßÅkþ ‹ñš½r–ÿâÈÛ86 ¹5Ý¨i¸´¶ã‚)k¡\Í7,ìüÙŽ¨ÕÚŽÙ;¢/¹'õqqQ.¬™Zëmâ¤œ-$’2ûCLsô³T"Ÿ!±¥ÈáL§¬Ì*M¨ñ Ä&k~™Ts®ÚFXÌ²ø¡4</¢h=lµ«—‰æ¢çŽ«K‘'™²J­*fµõúÇ€…"7q%sr-IqJj0W(å2Ò{¤²•¨|¬Í`ÙR’¸ß1Ó’/¾?32b°öZ³Õ§¹³ú]S­æ¨æUjNi^§æ¤f©Hj/ï.œ=òúŸ}qª½!5ç´Ôb>{[okëQFkk~<ioZ¦Rø	oã_ ºµzáZX3‘·>c¾›üø,ØSåH-d#¬ºÂZB$‰
aÛìõ…/o>´ôåé3Wi“}W×v¨Öô=A·TÄ5ÞCÕ;¨I»{ ªY*$IŸ½ç(‘?E~®W¦ñÌ†Bá¸FÍšlkµ…
æe•ýÚûÆ÷aº:¬é«%‚°æ[áÚZÉÚZ¬ÅwÌ]ä¿º·u…±mtZ3KrŒ–ºH8 <EdRü]É˜ŒÂ–6àªÔEß
kÜlS_kñ)\TRõƒ9‰ùÎ|.Ê@a3mQgloºfbZ½áEÁšLÆ¯	8¨`Ñ² 9jž#…s%ŠðjKÒÕ®¯Ÿ:¹þ‡ÎjÀÚS{žxþÃ_¾¬Zò{üË–óKsW>¾óîÅ¥¥wïÝ‘°öñ Æ€ ãîÜ"Ù¨fãÆn‘¤HñÚ%#]dûæ/ñ÷ýó^@iÆ 5¬çÞ:úï„Kkd@
ÖÔž e’¾mÄ‡ÁªÎ¯TŠðÆ¢x-låÀFübS§R£1Cn>òSbzcCZtV˜Z”«n‡ï×ët“ÔC°.¿¨„±éyºgfŠPc7=¬'•š|m²3ÿLzÛLßÌötiffßäkSJëo(dèÃÖQHŽ}¿;]ÓÚ½o_µlÒt5µ3Íô¬9«%U´†ÆÍNªµš$ÑôHS­÷<ˆ€hG5`M>‘fIäS¼{çB²IM!]­‰Ï÷Ã~ØÎ›PÛzxáÉt´Fþ¦² !µÿKT{™í@iÃÈZ&5î.£e•iþ‚µ`öh´ÆcÚÒ¼6a«æÚÏ\äöÑ¢ŠÖânØÑÖl•°vi-Ž¸ÅZX.ç7E¿±‰PmTS£3B°ù”!ƒQ­{ìû«Ø¸Pc™»ÁZlÀÍžH÷Ã‚ž{þÐ™3kb³3ÖXãã ˆÄeFó¬HÝ8ëS)kÜTµëjÏ^Û¯@]M¬æ°f=Ñ²ý2™ˆq~þEä3Mú§Û”ìy˜ûÄðÄDç2ÏA~¹ˆAHÝ2çGîÏÐTuLÉþ‡q…ëÈ+A(ÛŒäXÇcš[ôi†‡[Òˆ±j©<ìŸàÁZËð„Ølb|<»«n¨RÔò‰Š|eŒî"óQ¸¶z4Š¶Ô"^#½1xŒxÞcWläWAøŠÓš‚Gý§aÍqMcvqØ4ÐYìÞ÷—®ÐÐY'$È{0³HÖ¨]E(çÅ´2ï)MEcXƒNe?ú63 hÃS7.Ü€Db+æ«äAŠÕˆË`]eÄjÑ×)KÀŒ¾U~’TÄ6Ç¡·ðÓöAè2õJÖÉ	1ëê:î¢Ëšša«\º+ƒ
&Xã“T—ûHJx7êK‰á9ÂV#±švÆfU‹îäÇÏÓ[—«eUº)eiô5à“c"Égá‚Æ¶ZÛl5^ÊR²tæÄå]kÌ žÁ‘­ëtLg;;&§;³$ì‘±ˆ_ˆ)fÚ¿bêµ`Õª}E‘ &ßGHíE+SSrN½üògÿôèßRÔ£­×Êi<R!ÁZ‰.qÛx{Y…,Ï4W›Ã2(¼–
êrh\¨¶N!Ó—8¹•å(—âoÞ¾^qmáË»4ë™[$Þƒ×nßÆMÌi+¹Œ›Ÿ•ƒÓzSù×º‰ãç Ôîí…^²xÆN¶§½3­)ÌRa”Æ×bÀ¯tÜó-ñ;ßÒf-âµYikŠ@j‚µµ’µµX‹ïœ°¶{ ¿`Û6FÙZ/î	cØ’KTKw‰ÕØ)2ê~mš}H#ÐÚßÄµè¬\®>>?’uMêsèiÊ|¤ˆÍ¦&­¡´eÏÕr­HúÛdàš|G<¶ØyÌFþçÚaÍùÑ?väÈ×G¾àãuÑš„µwXÛó°«a-Bzú_à®úw¯,½û§Å¥3Ë—Ñ®\º
­1ð¸stû’¸e5lWÝ4ò=³Ì]îYC6þižM!Û‡û_}k?ö%¯ì¤‰ÖÌaäƒ£‚µ?ˆ¨¤AioÿòMüRE”Y»ŸÿƒÀ¶:±½qY	,ÖœÃpò
µ¹ûÖ!Í–8“ð)³¿N“Œçl§'½ÚmÓ~NÇÄ n3ôWSr$šÐä¼6“J÷Qº6Ð‡AX)“îé«ÈôMOãýß½¯n}ºP“,ªKTÌõ%“¥ŽÉ©™LeE`5%DÉ6ÄÓ ·yƒ5B‰QjºÆFkÖüHRe.ß°V°«Éì%RÖÌÔ_àLÅÚåÇŽ{§¦Ã~@­¡aý†¦†jl§0ì‡Õ°×SPâõYmÍEÎ<¥uøä L÷5·äòÍ²ð¾¬áÀå±ÉB´É·Ÿ{ä,Òßòõ˜ÓØ‰ÕDvÈjìÆ‰žf°ai¨#+‡µrû~>l§{,§éËjÎk•klñù>efüå:š';Æ‘k F«yxuÛ˜Õ@ùŽC;[æÙ,+ÑÌúßPAšF¸BÂmrèÖ<#¯H dÓ*‡à8`Í„5¶Ü#V{EªšÝEj ‘°öÛWŸ:´¼¬‚³‰Ñ"ö!Þ-+¢ìÚPÛÆGAÔÍduZß(zWçPÏðDÛt[Û2pWœ U7wÊË%e¾Ù³dB4:œïÞÕß¦ÌÇ‰,‰fƒÅÿ{z3 7äiöÛ¼²káé: eÛ€Xº^±
êô¬Ã`Ç‡¶>6Áp4ÛIcµÆÕt51\­[Ž¶S¥Í gµDp µÁ'C«¶hÁùß`Ä6q[Ë kAmÓÍâ~I-nè¢­¯a-Š„Ó“vìyFnUí@ªçÿß‘¿ÛQ¿Û“èSÀÛå—/ã0³­hk1«YX/³î‡Õvîp)/¸P‘¸ŸÖ‚ÊüúÙ¹>ÃÂa¿"•NÂj4-3¡M™	lyûÑÒS*]ucœDÎ’/
™<ÒüÓ9ÍìJ\ç0ó…5ñüT¥4&*z¢vU¥”ØZEÚßÖ*C¦Òæ:I@qx¤“j¸Vgí¾3™.:ccß­•ªj×!½ª›scnppòD©/©¶ÇèÍÂ¯¬¿‡Åûe¬æ]¯¡485ÁZpè7UíÈ¹RáÈ¯ŸLbº¼áÑG÷>â æå fAœ#ðZ µ kqvI©$TÛ¶½ )ìÉÏ/·ù/¤G0ë÷q“é4EçŒ•§Ûß/˜M&ß¸N«µ;W¯Ü\ºwûö½÷î.Þ¾÷«Z#õeÏ2é1‘~äñ'7–Óš6&½gŒ¥¥Õ¥Æ×±'4NØLQÁxç0gµø;Ô&Œt‚/ù½<«ñ!im~%R‰k%kk±ß9am,uwç0·ÏÐ›¿—°æØxøã7"!_]G½ç:=[ñw:5†pª”ùóe•¸?¦´9AærùA-j»n°U¬åe ™´)«r	ÊÖú‹Èµ?êÐÚ]ªµÙr…<W:B€k_¼þúëòùé³Ïrý8H‚"æ"o›g?M°1‚š¿¹°tmËµ?-:sçÖÕKsW?žûý¾¯X»òÉŸ€5Û‰mØöÞÂÙçDl—äXòù+/|xì³ÏÞzá¥¬ÉÆX|HÈÛ'Jx‘-- ¾ùFÛ¹×Y^{-VØ
ÛåÄæÈÆ&ˆlÆmn‘´Æ‘H4ã$³Ñ›¨¶·ëtÈždog:½±y0¦§#tã±¨Y;¤Yò#û§‰™™\©Zë›ËuoŸœÙÖ÷ôö}S3i³áÏÌL¦Òûô¦»ÖàºÄx="ºú¦¦ú*Ò.¡¥Ó X—Ä²JEáé4«k ÜÆVóTâ#¤´*Yã¦ª›ÞÙ£B@Â_ÆÉb$k«(¬b5*Üö;v¡ºz£©jXJâ.ÒN§5{ÿ¤8­·«u=UR›1ïWgŠßjr òÉÉbÉn ÁšõXcØf*šù7ùÀR!_H€šµžq
¢Ø÷ê:L
¤Í¤·iÐÂ)ãEpŒ	HÀ2Á(F6f>°[Œ0*×ÒV,þ=ÂÁ kaì ÅÔ2!Ã'º¶…÷Åf3¨ä·•åà‰ò´"„¥–ñeXÓ”.ÁÚ¦‹[.þü²¼ûÏ(ÝQÆ¢µO‡ä9r€P>ävÏ+ÉTiàš§A\ó b›ëjpšÇ«Šyõ™C[–ù™~”…³=V½¤µ|S-ýhZ|{mãßÛ&,ƒ•ÇQÞ&x
FpÑwX{xqn~ZÛ
åñ/×?‘Ç"®õ[§9Ó.QyËÿJc"+—HŸ&eçytT‰|•á	Ž"´m]®¬åÉ&†yô*™’Ñ¸-?tþþ‚5©láµ>ÞØ	†š3(Ö"cG×àþ¾$gÞoY`M[>¾æC"ˆj.¬)ÇzA9«v3f“a¿le×Gw45¤¯a ¡µ6µo\Ïxò’Õ‡ÅË–àÃZyhéHÍÅµj>}ÃŽj¾šWÉ©÷¬cD‹ú"ÛwÖbo”(4I)s‘¡ìCrQç6—™I	‹ÆuÎm
3)®N‚§”uJ[gO‚ATTˆëcô´Ôkˆfþ~¤—!
Öø
rÿÅm1 —ÁÜèh¢GëÿV·‹ós]•UƒHo¥Â@­3ÿT©çµÃ#¼›ybÆÜ‡ûù®Žš„rÅhÀšvÄÞ—ùãŠI¿qÚW?þêëûä(òõ¢÷¥—_Þ¸1Ê}ŒmÅi1¨Å˜†ó}±ÂkÖ‚´¦+_¸îaê¬•xg6êJuù²i‡µ²_AglÛ— Ù”ß¬ûY-­W'êItýöõ‡ðí¿zeáÞÒ=®é÷n“5s)¢µ·Ÿÿð‰=5¹Œ<Þ_ˆ£è–;0®Óž ©nGÊ¶4XSÖ<@-‹Ž¨"}xô€K¾Õ=ììÀêÂ·´DýHZukÿ°kk±ß­~Øß+”
æ9vòÎ"ù1úHJÚ~tRGþôø•,MTBkD¬Õ‡XÕg„7½ÂÉqë5øO^Ð`‘c.ßÉ=ß–U¡¦å=ï1¾VKuCÍËÂ:bvêXlí]¶ÈYÎG®jÙäÝ.­	Ö^–¿W‡µçå.¢ë…%>\¹¾üÇ+·îÉ}²Twè÷s¼8÷ñïÏ/}ykîŠpXº#R¬1½ªu#ïzf$±xå½»Á.‰íÃW_Ýÿ°öùç¯~¦}ö¯Öb=¬)Äj”¸yÚäç/‰ÖÞÝ^y~%u_ŒQ.°ù›Œz—q¥5§‡#[`¶SÜˆHi³K¯“V€5m¸*kÆaÚ†v:!"LcSîÿïØb¹Í‘0_Dv==èm}”qMS©öô¾©©}û¦ûJOÏô¦^›É$)ñH¦J,Îðb¡P¹o_— ,59ÁR &Ù}b†|ú3=Oïng„}¿/½}¦@¢†îÜÏjukC«ê[Ü$©ŒI$6 îÂ1·ã<h?GÜû«q#~ÅaÝdÍ¿í?†$–ýjˆmUoÕÖ++©ñjŒM’§ðKg**R¥V–„k9þ£©å²Öcßck|·ôÏ(¦¸ÇêZñ°lû6¥;:ŠI5cÏÐ²¹Œ µi£h.¢ùÅiÎp~¶ÃZà5ßˆ®ªÅæ+Ó ¦Åpf7Ÿ†cñ>^$bõÈÔæð
G6&
l‚34µÒ¶hqBí„5¨h8¯Ü®<jÖÐÐm‹ŠÕ~­¹ˆš¹‹ ¥),#’Ï\û­+k"nŠíIÐ!UÍ…µy¦nþ­©á12	SÖ>’ryð/Õ@#È­Ù˜¹Øÿð®yÚ±õ“ŠF–çaË¼Lj5sLž‚‰>ÕrÝèéÍèŒuÆjÒÆÕË-Ë×ëß, .¢¬Ñ­Ø6ÑüÙ“Ùñ~¾J[ÜÛLfèùóµd7¢5ÖErÕXY%HsÖæÍf„sécÜƒ™ˆöl”
ÉÜ£.p–‹oÿÞýAY[!6MA”Ö´°¦ˆ»®±Ñ½\XaÔ–¦BÚ4éë±D_Ÿm%Ã€¿‘Öì”êŠ›*Ûw\¾PY•+kÎÿCÂÚ?ë Ê¨Fì¸±#<Š1/2%/~i¼Ò›Ã÷‹kÜ8†(´µ´„ŽÁ\Ž²ì‡Ãê­1çäªÄsœÑ…Ç£á2ÎSçêŒYr‹H=[l­UvôÚ™dþÃc[mjéÊu<¾.'<ä9Çccwzk#_@R_U:]o‚i}ª.ÇXßRaŒõúÎ"_,Wè–“oçH¶#?cÓ™²±LyHíºs±Ð 1®"@ÚWNkrèÿú«¯/þî8[^eìDbIÍ45aZjŠÀg—ôa-¬Bk.­¹”½G9@'©ÇQI +ü-öþÔ…ÜX9e¬m¿„¼/½e–_ƒMwoÝZüÓ½{Ÿ«‘`í6í±_ ûåCjpðÇžê§{ýò‹°â8Þ—%záéÍÕÊ‚6Ÿk– 6™6Ä7x½¯-ü;Œ7„îo>‡¡šß+„j	k·¶ÅoÏ¬•¬­ÅZ|·„µCK;yHÒÌÇº1éU¬–äþ{ç[Õy¥ûù<÷Jóm$ËÆ²l!¾€±"åœ9G®k%Ê‰ÿè;2Ž‡Ð•‹8‡„?Mà¤¡êŒ›i)ah£¶SWh¦6JD&%4d¦MJ,G–oœ˜â´P@M{¯tÏZûe{SIïè~‰¼ÎÞï~ß½·	o~çYëY=™Á°&Zs».=q¬N–ÅÂ;¨±¬ñ¥z’ùó{ä:cSŸ¥–ç¤aÐŸ©, 3`­‰ùJD+à´(8°Œ•uÄVûµæ……kú‘fÅîìx$ïç1òÂ~3ÖÝK8­=÷Üskvüô;¡b§GÔûøuëàôÌÏß»0ŸŸ˜¯®é›ëë;zæóg®ˆÊ^Q½šIk×?±ð:6,þÅkï	ß®*à6·?Í~ûCâÛ¿zíñoŸf‚°fÞ"BÕ«	ÕÄfèn”¸jÔºý#û'Cîþãÿøã!!Ò+Ø‚ÂfÀm‹‹lÉpüòÂqã0 VzÝ9„7Î½ŽªfS…)kÞÊZ$“$ã%G»8ÖÔ1¤¬Èíý‡FÚKÛ³¹ŽŽÞ1t¼Þþá¡þ¬ÌÞÚXæ²C‡ú«rCC­+„e)eöËº††ú…mnØß[*lïêêÍ†‚6^hjèi¹‘e(m¬W¯‘
¹bÍéÓ$7b»ù¤ý&ÒL«éeõÈ>ú+¼ýöi`mõš‡Þ^U¬­²Îò–\­>ohkËÊ³™ÖF,S)Y¤«–¥°4-³–îòÂqk5ÀæP¨Uáš•¦¹®†Úh-Öt'ZX ¦¹€V/XsÑŒ¥;ŒH]«'$­±WìÚ LIBW%¹æ"¶!½‚¬Æh+G7¨"F/‹(m>ã„5ŸƒbZºŽæN"„Ãš;ûs×˜ŠáB)÷Å¨f'ÈþÛ*#ÄâÜë¨ÖÚ¥¦ÒXˆÜåÖ"«™µÈ.§5‚%SR!!5¶ƒ®¬}‹—”5ikq¸»2:Næ)V{íÛ§^{íµ'ÐÃÈ},RX¯ŽÌSØrLÓ.È"›1ÍµªDP[¿­æ<¶ÿEÏFÝ€MÉ±Ínæ¾²ÞÊßjÖñ{³n[}a€2CH¯È·‘ÉWøú{]X«_?:Êï_UÄÖëZ¾ pÜ¼é+Û˜»ŽäÇó˜úŸ¿•ûhÕJ5Ï’¬&X»ÿ<£"†³ £	ÞæPh4óA»1›HíÿÖ|BF„.Ø	/ÿXˆÒ™°`ÉžxœÄYRf!Èñ”VirqïkµÑ±!mþ"ÇN’¹ªg5…³ZÒR¨VYMâ]’2EƒÐ ym\ÌÙRr°f¢†¨«4v$lnÝ°á/v¼kŽµéVIf¹lŠ¤8`-?•ÁKº1oœÞÒŸi56e:j©‰Ã5+¤¶šä4[¦Æ3^ƒF ŠrìË¨†­†ê5!¢´¶\cº²V £Ò4½u$˜­¤©›rûºÛrÕ0aÝîâ}ýê„¹[®¾Å¾1ÿø-XSyÇÙ„ÿÈ‹*5Õ©‰ÕB|L>ðüsÏý„2µ‡Dj±¢æ’šaZ’ÓNDqœ¤fst66Çµ@k&­yÑZì±ÕÝWÝWè^¾¼ šñÄohPz5d*BDÂhYèÉ«iŠ”íü,—ÄªtÖq;•½ 'ø/*tjöúìÕW_š™}qÖ»c?mýÖ¨[ÛóÔC±O³ÑšjÕÚ8’™+38ÓP&‘FKMÊv1KÛ,ÊTâ¾”ÛìÄ‘(&	§èFh'BÊe$Èk÷óZ*Y[Š¥øœÅ_ÿ­–ó/þÃø&lÁ·­j³,Èž<ÝKÌ¯5“ÏZWÇ²ìgc5…M€µp4ò[Îq€ÈìÙFþX÷’×¨Î×¬Øš‹-`-òßbã(«‘f3ñ—êæáß9-Û÷çkÛj²§bTO”ˆÕùÒO¿³çáµÇB¤žÓT«Ÿ9N…Ú|_þà¹£µ*—1™k™åÉg×®Oi257%VÏ®Ï°¼BŽ$¸fRÛ'W®RÑ†³ÿõëü¸ŸýöÀjßÙ<œÕè²F¹‘¬&<{é¥¤ÎG	#”!y1@´æ¼–lê}BlÄ–ÎÁ-‰B¶EÍxL´Æ@·	ÂôTþ®R%¹…’6}EISæ·mµ6ÀxÏ÷§ÇS‹1XéÚÎX¢ƒÛX>7ù“`9RÕ:4œ+Ïmik­êE€ku÷ýö±Ò–ÆNò·—Z•êØÞÐP*åÊuçp©×JÔ¢ÎØéªF’ÉªdA`I>dï±ŠžØû°qX{8{8Š@koZ¤9Bî»O±fÅÝ¬^a¿H#è—ýHŒ¬bÒ(¥ï‡[´’oÈ%BSËHî¨¬$­ê‘×FG›z˜7÷4®ÇÈ¦kœ²b5pLÐå±>X‹¨&Íÿ¥¸Õ¯uÿþº]÷ïÂƒ@àD©»ã*³hTÏ|%²rzcÂ} BœI×ÙŠð…¦q@0î#ÂéàÉOèkÌü‘50Æf+#64³a‘€5ë”‰Æ¦u+Iò›CH¬Mœ$Ûñˆ¼Eî:êp&]-«1›°	UloÑg-ôÅveMÌFÄ5kžÉ&V³$H`´G|DZ6m[/sýú­V¸V/FCJÓ¯M-ôß¾v½ðíÞ‹¡dý±ÌTÓõlÛ½°°}iqó:µ™û»µ¬hÁÕA *É[÷•Ý[7´l%0©+l¸¸LóJ½zæuü™"º©u«¿x¯`msKßÀ¶m…ó}› Ù9)x‰J5QÙæ?ƒµ•ªù³û^n™‹¬L8ø/H€¬Ñx¾ÒÄ›€hºGñ™YÍEœÓ|Ô2f5Áš–ìq$ÐWÜ§|©|±r>±s–¯ˆÔ†ÒÝêªzšEã*19vŒLH"VÖ¾c[PÖØk•pÚ±˜JúÓh\Dmt>SÜr…t”STÞú¯q_AÝ¨ûA1h!àPDö#Ÿ2ñìcÄEß"“³¯Õ¡zÙçô*|5²	±óà4ý€ÞÈ#¹(/ÈleÞ„2®Ñ-‚ËgøTK!¹ÆúÊL®¯%_'±.×ªïÈ‡Æs*L¬;TWSà#±aá?“{ê‡wŒFÀv=M™žþˆšÆ¦Ž"äE™î<WEjŠ?|îHí›Ä+'©E-–Ó¦y¼Â‹¶ÍpI7$hÍ¥µÁšÅò¦BŸýÞˆ‘´hmIk“šèmðcƒc»JÙe•ÏÌäùsS?ž<5«ÞØÀÚ‹Xøû/IOâ={ö|ó§hm‹ÁFþí`ZçáA45j*Uð/)¸5ä&Q±Z¿K;&R^º¶œÅ'¢1ö½áè¨–ƒÖÆEkø«5¶ÛRÉÚR,Åç+þ†5`Z»íÀ³ [çá-ò[êÍ(rd¡P«£%­üŒñ-z~Z‹)ö„ˆOm³XÈ&•dBš¡§kÍ…à.â°kk¨m$?êZÜq-Ñ‡4üÐîÝß[›©Ì·É Jû~hÍa‡ª§Þ}Ëv³‚-ñpÐƒbþèÄ¹3ó×Þ9·²âüÄ93õÊ=Z3P˜Ÿ™Ø9s|æÚ…)D´O®M	ÕØ/ˆÝp9óÄô¡Ú'ÀšÌ"/\~íòÕO®NM¾Æ?¡´Ö 56š«ýÀeµoý°öâ,|6{böÄ‰_<A€lˆl!{Ÿ–m±—qlNlqÿ™Á†ÆA>âKŠl¥[™‘lÃ±È6d°ÅDÜf'Jp´æÜ¦›Ý4Ä)’æçì¬–6[Ä1zK…ëÞ®C	vmêsoÞ¾}Dý²«Hvj*u.Ë•†KåÙ±áŽTvìÐf‘ýË±ZÇ0iè÷2å]¤QÂli÷)ï*aFRÕ>’ËŽDö‘x7RìBVäŠÇN¿ùdÄj_~F­±]Z‹•5J-pYsßŽÀšêaÈ³ZCN%3ü›ðúc7êS}¹ð¿p¹N}r‘ë*PwÙÃÐ\ßÑ¤šµºf±¦zb´~w}¾§.@šÉ}–d$­qóú[¯™15¸³9À¦Azµ©˜­X_¯zªÕ²±)¸hÊšG¬±'m ]NS„{XúÁ¡ƒÅb~#kƒ®fî!Îj¨h9k’™ZÐŸü¬s™Ê×«)8«C26¯Ü´­fŽ×ºš£çé­ìGË‚œ8iS«Y£ëZ€4Y@êÊÚYD
Öbë~^Iç~PVc«©BX#Þ¿hJ^SaíbGÝèÅ]»:êëw+çq-"ŒBé¶~å&Ðm“‰§`óÅ­+7 p­ÛÌÓ°æç¿ËÐum=…ouÿôwÅ­›A5AñnX®€ú¶UŽ¬5J?Ã+æ+²Ñ˜m qoß“ï¼~ š¦ÅM›¡7ªûæŽžß°uCan.F3•²%ƒÜ¸`Ø%”
)<¯Í¹´f l"!ÒËÔbIÍ§Ÿ•ÕBæY¢\(ÁÒyÍ7˜‰t‹6EÈ’²ƒ#[ZÿÏUÁV’ÕÒŒf8b½±H„æ´ðïá,¦=öÆÆªXZ[fIÀtËÊÆõiKðÉr¥-xò-„µà?"Ž“0]ÆU(¬»Yê—'µÑÛå3ÙÊ•‹zÖ\«Á
_ª¯(ƒßZ•‘ˆFÆíÎ²nYk-*â?"¾ÕBsÈÚ|Dm t WÄF¾Š
IŽd3•O¿¼0N%qˆuÜJ:dW]K¶ý+•-[oâïX>ß­Ìzpï*›ƒ¤`‡ƒÂM›³‚Ú¿ñ¿¿1©{Ô@µ¨yéÃ{¾¸ç+^DR‹Õ4‡´(|æ¼Æ~;­)§Ä¥5Ï:ô\7Ï·îöÕQi<ù”`G"×>µ'#Å<J­ô‡Ñ*UV›¢¦–ªkÖnÍùZ{jüh´Fð1÷ÀZ$±ñÏªJ­QYIðz£µ	$²ì­‘‘6»Ó[ Æ—%cáçßjš%Äµ,¸f¼ÆN,•¬-ÅR|Þ¬ i0‰¤Æþ,úÑ¹%cVä–ø.?Y«Á‹`MÊþí9±¸´æÇT¸ÌÌÓ‘”ÌDò³€¬è)YÅ!¬	Öê‘Ôj+9‡õã-R³+E´·>•«!»™äí-X3QÖý_oçDï~)kì‚5Ù‹|l•w6XS"¢<g_:1«'ÅtMõQšÎNLœç=*šKWOæÂ®BþÜ™ëSfvÝ9m=×ÄjWÞCoƒÒ.\¿þqE ¦ÉÕÙÉÙ«°ÛÔåÉ «ýDik_¬é{«Zí²:¼ÍÎj4äÖ£Š`Š•"éŽ•6—Ø\c3b»»1ˆlæOåÄ–LŒdt\£7Ž§7Âo‚6(-öübz@;ôë!îgõz‰xý×œÒ‚¯ã>›˜ÍXÏ¹-¶#YèþÏE[…é"Ëÿ±Ìh¸¡3Í:[5‚d?½ØÊÑÓÚÒÝÃ‡:²]ÃÃ”³ýa¨}Yð–-oÀ8²$£’®ŽC¥¶¦Rû
þÃ—es]hwÝËúG‡F,32×Ö9Ø †Öi’#%­ÑCX“ñ2p&VK*k°œÅ£ûÞÀÂì¾ÕU+¬©6æài„5yÒaÛOñš¹R¦UA“ËéÆL/éÂy[“JÕÒòÊ§«#)\Æšê$•…ÀSÄÑ­c¥Îk»©\ãœÃZ±¨»£š4ÖØŠÔÉ¸¸ÁÂ`(ÒtPY“Š(r­[ö;ªH±:gÂüÞÇ„Í—Õô
¬'Ìˆ ×".cb°æÊš`
»§…t
>IÆæuëjÎ«•/P1‡‹êÙAóì?ÂŽÈvÉ‘‰“0šbç‘ï¼¨nØ°ÚèExm'n¡d¬ö´p-„³ÚzÅZÖDkoMüû¥K—þýÒÎ—>¸ô±óÅû| ²ú¡s’õ8ý^á¤>Qpüè£˜ë+Þÿˆ¥ÂÏÚÜÇu-uŸO.^dà
Á"\Rp‰‹ŒÑ’i›ÝÐQíÛ40-qçÅÑ'nŒ*Jº‰%›/Yx:øÌ»y…=l!FuÿXsKì0²x,øqìz†Ms1ªU.„µXY‹ü-‚Š RAdhid“PvwyeªQŽý|S®ÞXªØøªÆ7C^{Œa1X{ÐaÍimEjœ®ØãU7–û7!Ó2å
áµjÁdÄ.°bP°®’9Ôà8tïR÷ëaÐP‘¥2IÉÿ´1Öà3K¥”ÉCT“JU¸I[3 SõvkZ¦¶6é“›UÓg¬]mò›Þ˜¨áPƒgp¦R4õRÃÓ„oÎLYZZ(=_[ëÙh¥–kã+ZÖ# m®+™«Tid”1Ïga®£½>æÀa#BuGŽ"¼Diä?"©Aj–ýhšš©4S#YË.9,?LÂÊW¥5"‘ú˜ä4I)¯œ8ÁÁ±M¡›¢'_äàÿàw¤µ©'°†®¦ÿêÎœ~_r­:ØoÊ®!€êhdaSÎšé‚Vì0¶„[þþuêê©ûï:rêÕÉIï£úÒåüš¼¿‚Ú‡¶êÖˆöNÜU”™«í=¼—3­pYcè‰Ý³5(g)‡µdÜ‘Û†¤!¤)h_*Y[Š¥øÜÅÿÜBþ-‡qV2VCa3ÈÎ²A—¥ÁÕÆg<+£O‚˜xÖÀ<F¸N$XWþ=™ÊTF-°óy}<vjó¡ÎA¬ÖL5š>4ìkV;lä´`Y_£Z 6¡Zôùf_”ï‰|Ç‚t¦}ÿ×ó‚5O„Üûu,„²êõùÿBìû ¸dÂÖñ)ecLŸ›;š¯ž«ÈË|‹š=™C’ôvC;)LOÑ{­º¦g×ü•÷.\Œvvž–Ù’Ô„ok‘Kä…k““×¯_Ÿºn¬ö1û#8Œ°ýaêP$rVÔŽóKPh‚§¤AÛ-`û–xmQ`‹‰Í‘­ÑÙYe•-mIÌ«Øl‚ÇÄ\pÚÐ!(mùÈ0‡¶!ˆM	’Ú-/òõVÉ=‚5?x„^Û>&9MéáS†eËÐØú·Ë”dh;ŸLvHQëÍöv·gÇF¶(á±²Lµ¥KÂnú´•†‡¶ô§[G†:2¼cSy×Ððt¶¬¼44ØH·´;ª0„\qÿ›÷=‚¼ö$ªš`í™‡ÙžyP¨ÃÚ¾oŸÞ±c%n­©j¸;M²#†sèvi?J×VLÓ‚µeéÁŒh­L‘óˆÂÝæ0B‡µº|^-Ój@·–LFÁ—
Ö¬1D>#œ†Î´„}¬ùZK¤æþýSbiu¤è‰Ôêë„sŽjÅÄ`-áÜÏÑO2$4µ$·Å5iÎpà<ddÝ$è£y˜(Í7B‘}!°Æœø_žÿ¥Cnc”µmŒl‰ðõfŠÀV®Ûª©¿Ù®»@4ÁÚÉ“j¦¦8yd'†H¦³M°eFoÜ½Y÷3i-Ø‹h‹”5^žéæ"/¿üVˆKz}öøÀÇøE0°Jü†—ß:†øÈ‡¼|Ôpƒý³Å¯Ù¾|[4þ½Â÷¿þz©E´ö©°-L×ˆØbÄÿÕDµØ€ÊŠÇl•â ­aêŠ¢]æœ†¨Æ ÏQÆý_ÚºHý)	-D¢Í°–Â	r\îAQÕÒ8o;÷WÆVD|Î«°u&Ô¬•©g–×±±ªÍX OHÄ°€„j³9¡ oiïA]šy‘¨˜ù!So 5¬‰Ú•Û7…Ö¸Î<2ò¬ÐÑmå}àPã• ‹\Ž¸Ï¦S&pRª&Ô³6Ù™¬ì»È––#TÍpS³·Á²Õ1D%jCöñ°£§EEj„YôÃi€ƒHíc‹gŸ§™ejï¾ûÔùôK&NOòY$-iBîãâ ös|ƒhzöúšp\sqÍ]FB"ä*}`TYÞDdÞ
óx\X»ý¯a¨e×ÁÂþ$ƒáh˜qÔVnRhªÐš½ú‹²ÔfgtäÔ‘S³Oë¯µïMÑÚ¨´–Öh‡=È`ºwï`YªANÚRè‹Elù¨oûEåm“déZÈ†\*Y[Š¥øœ	kÀÚ[zé´¶EÑÞ	¬åÔZmm•:ð«×RümgÀå–u²ë~ÞB‰xlÜ“þ
¯,·k´¸äÉï³d…B_¡Y¬†¡?Vþèm€Y1¢µB±¾hA‹µŽ®ÜÝõÁ¬Vôõ¹ÿëýÎjÊ‚´’µ½”@ÃjÖÈ}{<J‚DÙRL=CNœ;;sPÅ÷R“ùrÍÑƒ=MMóO4µLO“ŽEêoáÒ…+3çæ¯MÎ$3ÒÀÍT5ã6oÁvíå—'ßzmvö5;«BµGðøã¿ü%	ŽRõô£ÃÏ«8¦^
1JaÃvÄ¶$°%‰Í³"ƒW¤#›T¶-ûû‰¤Îö%EÙº¼jMOq8M8öúÈòïò(—´¦§wÉÕ9’ÁkO‘T%1,/1Il‰HR[Xz·!MKcñ=CÝÈiÌ‡©Nën[Ñ°Šb4r©‚'ñ±|„®ÚMh8û·w·¥ÇupãH•ÄmßÞÞ¿}xhh[óÜï´¥ÿð}Çî;}úÙ5Ô«)öì‘´¶çA‘yÿo(MP[µzÍéì;¶‚äÇ´JV±U©FM“k”LdÙ%°ñ?
›S©ÞžžL™¹äôôÖzò4Y«36 ŒAç4ñš-A3Á‚šò"Ùt²…®€Ðš—«ÅÆP˜ØTëPJd‘Ž {Ö1%­úÑ×îµ½°-Ò^ÍÎHm+×GJ›[ö»£Oí€µm‚5]ˆ¦ÌÑÔ 3ÔAŒ»	àæÔ{åºu ^ÖîÖ¤¤a3r™…ÊÕ\Î¢ÛÚR“÷o 1¬…`æ°ö­XXóøÏÖ2!nòzë&/6ÅÍK7…lŒa|Âi¸3´i÷í#{9·k,Ù>ÛìÅ¶h8š-Æj‡?øë¤i;G¿píF©é´–Ô4ÂGåBõJƒGœ%ï°T.–*X+çÕR¤#«¦ÈôR	@7©!Â·q`í{'ãŸ‹DRX£fÍ’ q!Ù8~ÏËÇySïˆ¬Ùxøg»¨má/—0i…D4•É²&…ùÃlŸ4p›þëv˜·xÔxø¬;	\B²n	c™¤nÍ ¹ÔÊ½aÍ”5£C‰mÒÞ„hzã²œ¼Häßß§Â8‰ƒ²˜¬ÅTƒÄI~¿$õñÜ2C’²¼I¡˜’T[]\Q½|Þ9l|£¬oÜ"£~%Í0Qƒ7TƒÔ<¬IïÇÕö<ýæe?ò“ôÑÇ¿#–:‡þ‹Åí Ô4…œ”ÙjÖf¦sBKÇ5‡µ8í0N„´<È¸2»©¯§Àç·s	±Ô‚J:çuG45þü}’EX/Oÿâìä©sw¥Î]õÄä©‰»N‘þrê”Ì¿ŒÖ¾O+˜=’ÖbZ#à³½ÎjüíÔ#"+ÿ2"Kp`øïGLk‹óÚøRÉÚR,ÅçKX;|xËû5êÇºÚ`µ-xB¶fÉ~|‰æÙt6Ÿ“$%u	‰[6òÔä)±¸´fÄ“\¾§G‹”9Žd2~žç\è»
<°PÍdª×ÂVÐu¨vk¬E¶"õÆk-Í-Õ,ãè“ÐÑ°¶œŠµý__Þ/ƒ6óA3¤Žé¹•­ÇÇ£ßÿáÓ«½HšÃ”z[O;wî(8†´¦‚ý¾<¸Â†BóóZVîÚE8™&™žú›ó{·œ_9=sæ3oÝ¼öÛ›×?1X»¸WfÎÞ¼vóæµÉ—56‡5Ï‚Ä–ðÑÇ½÷e}óY5°gXø¼‘ÉÂ¤Òå#-	l‹[Rdsfsdcëÿ/Lþÿá»â5ikn©ŒæQ‡$°}w„¯]>24„ÖfüÆ9›éF¨Í&l¢5C8¯nNF°%ñ‘!~zˆfÙcMccU#ýý½å‚µRWGo®3ëN·Q½F×¶R¶µ£;Û;6–]VÕ¹ö®c(t‚µtçÏ^x~°¼üÀé>Üºæô}ƒ_@X{óËoÒ`Ï€)‚wç~YúÓ~iß“§ß¾oUUÃš}ÒiMB%´XÃÂŸvkwÛZ°æ‘nÀs¤aÉi-¥z
ŠžÎÀZ=QWç°¦‚§QÁWÝ° J¯¨±+ûÑu5ÍÖ7Ÿ¯tXs_½‹#[]sËúŽ´®]¯+ÈkŽob´ tNizÅžq{µäˆ˜Øâëì>½½xVÎ.­		ÿ‰p©Ž„ÆðnÆdŒÞ#{Ý6¦f|oPv«T+¨i¬ñ.òÚ(Rr±iÛæšÍ›6yt×Ñûï¿gÂ`^kqPF"ÊƒÜù>y'åiF#•$ø–”5^1®ImMÊšgAÆÊÚM¤5Qšˆ&R°1~fBcC˜6,Žk®¬£9¤iˆÍYHó‘}JÓ¦×Yí×	bÓó+=ÂÉ€jagÁˆÖ¾;Ö÷™XmA[\½ž†’ºš/‚Ù‚fYìÔé&"MH÷ sG–ÔHYþ4p+^ëü	§¼g#Uk‹Á¸»Anüò—Û Ž»¤¹‹(´vXs˜'%Ô6«Z‹›fkjB¯¨º¬–¥‰;™2µÅæ|ÈÑÔmHÈŽ«©Í¹·;»18Š÷ËðA”ÀO°†¶&òÒ»Ö¢È)±‘ºJÙï‹Œh®¼ÜÝ+3ddòÌ’[IV™3B3Þ¼ÀcÚG2$ŸñãÈÄ´ÑCŒ»)ûÁ`M»Ì£®×°šPÍ*Õ>×Ô@µ<LiWÊ#¾×ïä)<óŒÊ‚}ôéÇÈcU®]ÎiNj1§Å°öŠxíøµW^™93Cwœ€kkNk®dZs÷þXZÖ
M#d óWrQX»ÖB³Å‚ ñô¸­Ricµô‘³§î¯­<7uuêø‰ÉÉILü/ÿèÈåË—Ö”ÎÏ|ñ‹O	 C½¬=¿wo®õÙç~~¯`THÁVE6‹Jœúÿk!'2uôoþj)–b)>OÂÚá-íû_8LdW¡««X£§å`k«—Ä2àUnþxZhèêýŒS¯«Ön¯W‹!µ
´–a¡p¯äðx–éy__%åk•Ö`Í`‹C»|eë"'ª%¼Ñ †¤1–Eê¥Q-i•Æ<={ú÷ç+3ýÝ?CXsVÓæð ¾Ï_ÚaI8çÿ‡ª3V£›ÊÔ«W±™®È<SÝ¹E}‰6mj)ìÚPÐ3¯PXYÂm¸t±»çäµó˜Žì}ôâ5ÁÚÔµßM½wz»~më¥«S¿ûÝk~LÄ¬æIÕ EãÄ©DôSó6ìŒØhþÆ-!#2lIb#’Ä&‘ÀÚ:F6E[”ù³…$â6ÙØ-€5˜Í# ˜Np+$¬™ØRQÒYt6nbB˜ŸXxƒPÝF0þ:	mî@æc"FšÌ€¤·}ÈnéÐu8¬­½‡’ª¶Ri{	3É\kooW÷ÈH{{Æ‘Y:¼vµuÒÛ¦äg/P9rà«§§×ì;½â¡7£Žu{Öö$ºb?)çþ·«VcóÿÆ
‘bºÚ
5k»[®ýÕjå)Ëº";2•j Z³öá¬X­‰ #­IŽýä@:¬Ai á
›°FÐ]]ÍàÍ!ëq&l* ,ã%"m+¬V_“5?Ê‰fe@Êd„óPŸVkCˆŸüõçhæ—`ª$¦±û·[ó	§°Æ7²©7ÉVØ¥,À›‘˜›Ûú£¦Ñ­Œ)ÊšÑšîaî˜ÍI„k+çæŠ[wmmÞ€j¶óèý÷ÀjG¾©hÞ{§`U^Ø££;¿Gœ|Bj´öÑ`-ÑÛD@5ÂF®¡¬9¯½Ì]D®ñ
ÁT›ŒIzd"7ò¿ŽâÄHÃµä+Ø±²æãâù:$‘M¯¯qˆ_ÎiaÓ+kÄHá³²š‡³ZLk	pq{´ÖéÙ3dSÄ2Yê!i+²tÇ^EiÚÊÖ°h]ñØ÷Ta	¬÷þÛJÖ‚äÆcäBnLž YÎa<e?¸ŒÆ™iw#H8+³ö™›†8rÙT×ø‘`g	-…j9.fpjÇRÞké4:˜LQÑrÖG·°ÈíÐ¯@)~N‰Õ`yˆDG …¬Pà*xŒVs‘hmh­vß˜2¬,rµÌxO5ÆÎ4yŒk-»“YéÀš(Í"hjî(Â+´½Æ¥Pc#‚÷£ê	pÌBU£qè3_}Ô‡Zn¿2FbEm¤SšFÖHj¬ŽÔ(\›9süwŽGåkÊ*Ihküyò\s‘XZ#b3f#ÙjöXXÆ"šFˆ&0qGÀOId–³ãÊL÷sñþ³<ã3293ûãÉô©€Oÿ½šc?. µV××è´w/žm²e$Ef%›ßc«"­=ÍŠ3Ÿ-Rw¼±2vLñ‰ãÚøß.•¬-ÅR|®„µ'¶´õRµÆ2!™unìÔ3DÍ²!SÆ’$¸<ŽÖòàšÅ¢r±ˆ«°‰¸	?A‰š¯Ü|Kw°È-¸éåó-EªÕ<š›òJ.ï«€Änì}k¨ÜÒ\èkáŠuX£ØÍq.×YÉ±·ZëÍÓy`¹¡›%&|| ¡ñî_ú‚’ k?üa,¬½
ª±]–£ÈÄAL=`´Æ÷h Dn`SKWAö&+È"iúàbS÷†ßM]zb~þÒE÷]¼I¶ë°ÖšöO^¿t“ÕÍ—õ\ûÐCºš|ûkúðñ²PMßÚZiÓ³M”¦~ÛLy3: ðHãÚ…W§”ùãÙ°Ý‘Ø’ÈæÄ<þÙ,7RÛ‚b¶Ï¥!*É]isËf¯` Ì!Œ1Šå#rü­ÙÎ0ä7¤ê6á™ÂïM â|Ë€nBgÈkXœ( ³è„C¸‹pf4Û9<b·=Ý6ÔÝ›.µ¦ÛûKÃÝåå­éþí$D6®Ùqß??ÿ;îÛñûßïxèÍ/?ÈFìyZs‡ÁÚ›Oš[$ÿo{{ß«ªÚ¼Ñ{Uã2Ž8‹ð·H9¬©MvŠ2zC6®òªÇÌ7Aju‚5n«Sh„Ëm¬Y ³PìV×´ÑúìCd$Ð\·UÑQ§fÙÈu-wýè	ÖªUãøÍÚbËÄ?„”±€e’ÛXxÄ#Ik‘€j‰LÈ„Y ¹€eZj7kH;kÆýZ³3j·v×ÖÛÔ4Í¹%ÉjPšÁÚúõÛè››ƒCaÒ'ˆ£w¡œIO›0Ÿ0MJš`í"VÂ7¬±¸Áë°&\=±ö"n0âibµ€jìB5e?²Jt`œ–ÄµOOÔ^áàÓd¸¨æÇß„CÕ<ÇµÑ!~±yÜ‘ÚÖb^KhlÖ?Í@OÊ´öik±©ˆÍnSÙw^Ðç!ÒÒø@D±¥P°šäòF+!uÏýrïùÞc
€-.ZK*kn/²ñ!a¼òeãÖ¬XIÐf¬&«ÇXÑBP%|òÐ“V^'å¨F›.k}Ì9©ê›µÓ2Ëq¹6““U#ç QîVkµÚq|ÿ¥»ÿå±}T!½RMÊc&ïEY–BR6^kèVÉûê!­]9 â6ˆª#ï±‡/Ârþºæ•u-+a5SÔH=×‘Cè¦ÌDØ‚A¿g>‚jß@U‹A-~žQ§§=¼Qí«ÒÔÈ~ä¡F²Êe2Fþ,÷1`!XãäÌô™™™ãlÇg¦çgÄlóÓÇOOŸ0’ãËÜe$¦5žj!²Ýi­I®Àj-ìùŠø/!SÑr"ÄÓù˜5,/“Œ¢<%ø—ëhcZ}ŠŽœ=;s|êÂìÄÄÌqœ!/G&•ü(1XóJº5÷=rwZ×ÖÁÃD'ª#ÍZ-ÑUî"¼5‚™jØ²‚µÔ›ÕDjÉiˆÔßþõ_-ÅR,ÅçHXkÑ:aµ‡5Õ«‘eí¹bµGÈ/aÞÐØÊ^®|kÿãL¶x„Qÿ’˜ÕPâì‚=ÊCPã ¦ÂkFgò#Áz„Ì
,åYÝÂÎ­Pš|³Lÿ8;=·…u¾¿‹ŸÙùÞ¶.„57‘°ö1}O°bÿÒOŸ²$H}´-]mêìÙWgÎ¯îÖä)Óã–žŒ)™¾bSwwG±X(ù5Öv4;.ýöROoÏöQê“:êßŸúäÚ™©ktZÛÙ´aþæÍÉÉ›B5¼%aíz¬}-úÖ#¾w‡÷ŒÖ¼5 Ïµ+ôØ–Äv|Š²¶Øs$–Øbb»#²­"Üã¿qUC°Œd3`‹lþíÑG0©ÍaMƒÏ†UÍÆ‹€ÓÐ×8g4§TÈ‘.o‚>–%™¸4‚Û‚àÆ˜ÝltX´&Â×MÝšº‡Çšt¢”+êë—Id[+ÃX©?ÓÖ?B
åXÕ1þ¤Ù±ïIzbc/ÂóUñEò “Þý¡¬íÛ÷ä£ûV•¿ñp»ºj¸†}ÿŠeÌôG `G´V®Twf§·Þ¼þšˆÕÈ‹ä¯z=”¬1Z«´h¯uéÚ­¿38„+*Šuîá¦¡±InÃÃ¡¥£9œuX:äzìåµV‡5Çõ÷Ê/’¥@M»‡›‰p†i"ÒØâÑ'\‹ÂøÌÏZ‹apVcNb6bçÖBÈR8æÜbz3»ˆµáÚÖss»ææø<ä¢5>{â¨|ûÅj–É¦,H«)ÐÒ4{AMãhk¡Ñš”5¬-tï—´æÖ‚²F¼æ”5›ék1Ÿ±JâšŽ~îÌ¶$¸}ºëˆP-lIjó1‰kIbóÃÓ!ÃÁ)ívm¡ºŽ:o¼æÂ?	 µÏ.®Í™([Úb‡‘ÛC¨Fž1æçðL¹?+ªø—.O!Õ­1É–¥k0—’%Ó«ªÆÍR8öçyÆ°¶±2µñäI%A®ØX%YÎc¼œ™©eqŠ\ÈþÐYBÐÉ	ŽÚã~ß¨]ÆÜŸUdÜÔ?ÕšðéW¯RP‚â"iq<¢2¬”Ðˆ?	ÊYÌGµ¼ÑZ¦R&Ä¼3We•€Ôe%pã•Õ¤vø³ŽïoÙ-r• 3Æ‰Ù-qr|K½zgÓ‹®Ñ!ýÐ,î®[ËÑaÍY-RÔYÞC¨U#LRã…ñãå&²üg$µÒÿî7¿³TÓ']ˆjþ½²ÿXû7Rûgµw­½2óÎÏ¯ÍÌÌœ9úÄüôüÄÄü™éùé:çœ=Ç”ípB*ääd2r­%Š6õõut´ÉÆ°vË]$tYóÂ†èeº"³¤²F‹´ k<›þ×Ë/Íà}rjü®IY4ÏÚ£÷k éÓßj)ð…oþä' íQëàçá´½ Å|T1>(BçCm­Ææn8ÒêYTûtVcä•±±iÉ’sÿR,ÅçJXÛ`îôY#²7£9I9ë½ŸÆÊu£ž¶ë™©ç×¸ ìŽÛú¬…U­êzò:é.#ÁÄß\š›8G¨¡²5+¨`ãb^¾#}°š<FZ¨U«F]óà^wåõà{TT"«UôöæÛö§°¦—\ûñfBX£¶
¡Aµ_†¢1‰[×O¼ráÄ¹s×ÏÎÿâ õ==ùÎLµr+kúÚº›Zzò™®f`šlbçßÊcÝ-ë×–.½…ÓEWÇXGsóû¿½61?uæÚ•÷ÞêÞyó­ëã£O"?´í9`MÞýÒôøæhzÿçÅ?Áj«½gn’W8 ¨Ån%ôÛÖìê^®¾ùd%-IlI‘-‰lb¶5m®²Áæß}@[Sôø¬)ÐØ¬ Í#˜FúÌ(Lc8êœÝU‚û`7{–\£ÆF3„ƒÛ8ÅLg´ù[Ëß$±¤&>‹–]]Lt§ýCD¾•Ä(çJÛðÈðpi;o¿|ð`íô>Pmßž´„Ç{¬F!¡Ïä÷í[Sµê¡5ÐˆVEú#´Æ‘ÉêGÔ[ëko@Y[Fÿ¼ÒãT{&6uòÊx4ô­·„HðlaåÙ1ZßR\[ì£·5œsïZRÝ¾ 8P\Ë’è ïx‡µv`ÍÛßt,2:/\Ó\@t-¦4ˆ-YlD22ˆ,ÜâäNÛ½ZZÙ»Ó\@2
wƒÜ¦Ð»¬™‚ÆÒ9NÁ1J‚ÜVP3×ó5›¾²­(ZÛ°sB%iGH~”~™ÅÕX2¯gÔX³ˆxM¸FØð´·Zæý±ä©`0"qíf¤¬½eÛBi-ÆµdŽä¥6‡´˜Ô|B,.±…6:&6«k[×§…#û§(laœ¿l©QGÏ~Œï1Vû.¬Æ7Ûþ¤AÖÞÎhÑ$Ô-‚jÐ“õåd•d6‰úôÐÓÕ[´¦çI‰ûØc˜‡~ü%¥µ k¥Æ7Þ³ñØÆràoã2· 	QÏ7&„®ˆß"=ÊÂ/˜"²Š¬UèÍ’ ”2JTD4“h#>37.Î—1a1*#KQïÉG‚Öx+WÍQNM·V q™,W]Y£ûvQw<€ƒ¥š¤ ÅŒd´Šlyª¶6_èÊö¤Íä©¹®1')jkÖ‡Ÿ¥j«Y‹Mï}M ¥‰Ô4~#²~TrÊÇ·Ú…>L;µ=¿úÕ3€Ú“?ø%¦"Ú-?üº’¶5)j–àˆ¢víÌôÌÏg¦Aµ½;ÏÍÏïÜ9?=}vúÜô™‰ƒg¸…[#mm†÷KÒšû÷{"¤kkæ2BŒtÂßB^Iç~gk_Ô‰~lWr€Ù³Òje/êÒšðª<Õð¯³W§NŸ<uêÔäK°Ú$¿šË8Bbà«[÷Sï¾­ýä¹çžV³8|øÀÆg5‰kª)Q¤=	2Ö$ÙYÍ½Gb0fÄ§–­1d´'ÿÚõ?þj)–b)>?Â]ÕžìÝ¢,ÈÞv6¸­³õY…8÷wf‘aì•nÕ’5Þ¹v8å‹äLì²s›XSµOó~&ližÉ£±Ð°`M¦·U£6Ôý_öÎ6¦®óÊ÷£{¿]ÝÑý6’maGå$ÈÂQ9Ã¥(‘Ox*D€x©M?TØ€ãØ¡à—¼a¶Œhš¡µMJe’PYI‹­çÚuš8~ËÌ8ãx¨,§¸×)QM©¥6‰tÿµöãÍ®(ö×F¬½Ï³Ÿ½Ï68	9¿ý_ë¿Ê#VË¡[ëê ª©%fÎj¦GYè2¸@““ÞdÍa‡_ë×ýX»ñ©C&"‹Ëéé³äÍüÉµófƒœnQJI˜;ùF²èk¤gE'ÈVQKÓ¡ÚæòÃûö7§v‚k;wö×õÏöÍÎ}v3wçÎÉ;Ÿ'FJY“³É.EŠå¾zõÕ/¾ ý’–öþ%#ÙŠà„nVÅfKØRÄ–L‹"[ŒlODÈvì˜ˆMÌ–èÌÆ80`ˆ•{èPTŠfÔ6¤25+g‘lU÷åÝ><×x‡ÃŽ}í¹"½^ðOÈ¶O°†Ú„70*²’tÄc&Zc÷±Pe#ÒªÛ¶{ñx¦ãvÁÙN®'Õ7ncÇ›`CØ;@vãON=ûÇSüW;HÄ5hÝHMÃ~Bý×ž¢ØeÓ¦S/œZ÷àºuë€5
× Û‡ØkÂµõkÖÖ€ýëy+?nBC*åÏäžÃ{9šÂZay>!º*ôÁ±„S?l27ü°NVþð\“µÂnjÚSW÷=Ð\ÏîrL½°e™/XãþŽºžžòº¦ÖÖ¦ÈUŸˆ	Xcj'à™õÒü.¡…—YœÇÊš¦±¯¿‚¯mÄ†ªÆ‰ç<z[Â_ÄÁLo2Z{5Žº+¶!¶èœæjt8<?“W	¬õ ¬õ="s‘ŸNô¼Lú£Û?NŒà,‚ÌÆÜ¬_åÍ`Í•5¶`©=™©pïþ„ÇÂÚ{òƒd×p“CðÑî[œøžd¶¥¡í>äµßùè›!\’ØÜÒÁm‘p^óý^	‘±;¤öÔ’^‘ŒþÒà²Z`µÃ¿j¼·sb.Y-ÀZÐØb³ÅŠ0ÄË[‰wÂbý!—Léiü&-ÍMÍ×
˜®Ð›L?:V¼rÓE}òy«µÅÝ 7=pñ{›hŠÍoåžÐ‘…¼ýX™às‰Œ»ds«·ë®Pebd.Q€•%¥sßÄ]indBè9§AÿØõ£žkY¶>Ú½|Ëª(¥$Il—]Êó,HEžÔ5™ŒDY°«,úIÌ–}ˆùŠ¨³MþöfÃ»ÖÂ<ûëv4ûG"CGÇ7è5@ó†×L¨y¦¹ï£8Í—Ïx3MV“¤F:¿²YIŸÿ7¯þŽüDn¼™5Àkš4Gðknnznîú,Buj$Až«-ï»~f¶ol÷î‰³³×fwïÆ’ûyGlsOÈ­±~%ËÖ`µÁdÄ¤ÈdHõ¶ìîÚr×k$µÒýû){” VÛÃiùØp8yiúìµwÞ½ýæ5¼ûO^`±½!XþýßÃ«
XsZƒ×<ëKºIƒä‹ÈSFSý¿’,K_«ùÏŸ‡P-¾ ƒïjÚ,RÑæ±b9r9–ãk$¬kÝ]ƒ@Ö§[ºÓÐZ× âÚ eR¤«ä¸¥B ›‘—ï%‹@ZÖât¿
ÿ´dì2‹J¦µ²98ê¢¨•ãÓÏ}Í•)z®™%$ïk¯,o5¦k5XËi­Ë/D`óà&²<bX³_R©Ñƒ5|TgköL0°Úç^ü›ÑÕ~ô­Ç÷[¤-/èjŠã°ÆS¿ÓS×5h-Ó’Î°Œ¶T¢§ufgXúZº¨ZÖZið5\XV;Ì¯ÖÃÛ÷5¤ë«kÁ¶áá…µ#c#goæ6¶ONŽköH26«9¬é{;&ÎM]šBY³ôGç2ÅûÖ´Ò5Bj›]²‰×Þ2ds`sbS,Fl‹#ÛÏ/¾òÔJÙŠ£ÆžØÍ¨”m`ròP”yˆ¼Èññ}CŠÃØAl!œÙü@Å†˜Ê‹?·ßH‰küiUò%Í‡åÕ~Q0|û ¨lìœ8«1[$ÙØëõmÚƒ!‰‡ÏãànÝ3N{×ÚT#_rôÃëK?ÜuêÃ×øå‚_1ø—±?î‰½_]²/ïBx³L»N=*ÈG}tUk$B®_‡ F/lªÖ
˜@j]/&+r=Ü¦ðÕU±Õ‹¯°0ÃOrsù°1Œ¥ŸvÏ„Ô¨‰”ŽÈÔŸ´F·òVªY:Z'°¦Ò´_T(ë±¶¶¶­z.¬FšouuMÀDæcþÕ«ùŽTbµh *ð—Kl±°ÆæGÃµ  -¼‡SMb‚<¶ìÜç‘CÙœÝÖ`1$4œè6)i†iÛ\Zã¬£u&;ûüÖì¼o×!«á0òË±¾`­…m¢ïªèŒýª*ÔFú>åT¦"WåÜ¯¹Fâ@Ró=i1«…DHïŠ¶&T³Â56„²·Ilã•¨\ã–û³Šä•„¶¥¼F‚“¿-™w_[”×byÍ÷Ø’†þ	uM±á‡Ù µßÿ~hQiÍ5däø`-Q¾–ô¹{èýZq1“â"Æ•(ªòtõ=\_ZÂMU$w£Œüôo7Zã”ð¦ØXó ,Ex…ïåjž{‹xR$°Æ,ˆ€ºËnt.CûJýó‰ÊDh8…ä¬Í0ŒHÖ"ìçX´2¨j)Òü„9YdJÂŸyp¶áà7…z©…N`YŽR&Ñâ²³ðÈ\A.$o`#¢7…ÂdíoßQ·u#>‘•Ãùkóê~L˜û#/e?Æ½05å¡'IÍEPÔ€µ/	Xµó¯45B†"¸dñÄ“e—þ¯^zãK©ºÐ8¨Ñxæ}WÔ ³ëïÛaúôÜÅñ¹i=íklë»ÙS96636{æÌìØØÄ¹Y@Nh7={ö„Õ­IZKÒZÂ¿?hkzUÆ4›CD¹ˆ<aã/È*uÐ”ë(¢­ìûUùüÞ­—‹_Ÿ÷ö­¢×oÝxùehT°öRÜÿíñ½{ÒšñZ1xdQ?¦ŒJõ3+ù”\s#ÿ•±Œ¦HLm¼Wž¥R)ýÄ¦–Íû—c9¾&ñ?p‘¥î"J¹&5­ëÀ ò=ÂZ&£~›ú½ÔÓ­½Z-j²f°¶DÍZXý\\3ËG|?\ùÇ©ŸŽ×w×æŒ`Ÿ~	ÑsV24få…å­ªæ&Ræý2ø@i‹=Æ’ó:a³¾´deÕ¨µÚè€Fg5÷ª§ðÜ·¿l¸¤ôz}ô’ˆH-®Á'.\G·š¾~>£–à©ÖÖ–š4]›iû†¿b†Fá©Ê²ööAcþ¾}T íÙ3Þ~t°ª¾½·vœöÇuµ]µ…;ü–o).Lóî9XÍ30¿òŠ5¾7îÔ.á+2?O/mí4g˜#²y@j&¯Y^¤,G(b“Kd ¶$±-‰lÙxþüMeF íÀ"¹"«@Ål££È$È=tÐM#±†^CŒ‘i¤,HþÂr—§‹½vî²Ê6îáÚÐd.j	ÖÚ«sÑëüˆÙê$¸ÛéÛIr‹UµÖe ÙÊÍƒÌHéuíÕ½ûÚ7¿ðÑ‡ˆ€k”X ®¡§yäþÇV¡\I¨žÜõ Æ.d{ ×~`–‘¡t=¸¶û9š®‘Š¥"Ò ,·©æf5Å.DMC-® Ç†÷°U6«lmƒËlù! 5sQÇ5kµ&oo…]©Ô‚bžþXKÒ£"	ªÕlÖxS–ýMÛ"\
¬vµÐÉÉñI2„n\¾Ç’Ø4$\FÊ…ê4¿/ÜJØ­[ìÒtPã˜ÐÙc€Ï„tˆ3LsÛ~9|cÛ·³™™9¿±b÷ØùÝ}ý”©‘©¾j<†ŠÆ¹LwOô_íÃTÄmFHŒd&X“²„5¯Z[(¬…<HhÍQMÛÉPµv'®ZƒÒÔDfìš‡~Ù\sB'ØÂ¾4´ÅûŽþNm±YëµˆÖx1[Ba±%·ûˆ˜È|˜ŽÉHXíwCí÷’ÖDhñÄ1-%YM£¤.\DN³öTU\G–ð´|´m¤”
Ö¸Lz$÷)Q-¦µ¤²&iÍ-FPàÖð»8eján:h2T[IX	[(xŠUŽÈYÐf:·;™š=,&jË1DãºÄC•Dê¡â
1Ò$Ä†0†µø!ñÕdÛ¾º#Z^ž{d€hj¼F:¤$»W  ©›öÖyÜ ñC2ýž7mÝÚ±u+7WäÛÃ+.EåijžBSËb8…lÙ”ù¨—ÅÁdò#ýÔd(¢ªkU +;…øÅÛ·äÒ¥€ÓÔð6¶&jžÒ,û0½æN?#]í¸îÜÈ¹‘¶ÙtX!	ræÜôujØfgkç€µ¤¶æEbI“¤V–”Öˆ¬ÖbgS×L±Ÿ$3óÿêú©ZÅ¹º°EàZ‘$±·Þ¥ö{'o]{ûÄ;˜|é¯Cu^Ôÿíòþ@k/ZP¬†·È`—Ø÷ê‡Ö5¢wP“­©-"~=Émñ•{šAÆ´&\óÖìTÝ/'B.Çr|Mâÿôj«uÃjÀZº%Ew5ô{Ø­JÚRº˜Ï’R•yóR¤­JÚ‰E¥µ$°Å‘!` /©M¹m^üð4q®ôq§µ,µVkeçXh…i™WàXŒ¼ÆåP)@74¦9ªÐ‰`í`
Vãàî"ÎjG>7§aµBŽòÅjÄ‰©wßÅ5xþöªªž3Ù*( hÔ]“FjÌ¬EÂËdH@É@kÀZceYgÓð¸R óÑ@
»¨$®©nV¢ÚpËÑ/¿ÜY­okñ9ÒZèŠýw6ù±	˜.¬ÝÆ×äÒ'Ów¦þ<Õóuh›þøãkç 4÷Î"à´(R ‡»ÿmVÂI‘K!Û+‹#›ËlŠ'”ùÄwá"êÌF¯\­ ¶QþIÜ3ò%€ŒÄ‡#!­ónôÏ‹MPÆÜ¥6™‘üêƒ_}049ÙûùøÎí®i7©[I“tiÎE¸\%Epb99–ðõ	€É-wÛÆ{}•E×˜ØÌî“Z'§ÊÜ#/`²ëÔk§=~Vs7HNöXãý‹O*…ÔÉihg¥¤C®\Ãï„xŒàÏ\@Óµ•”¢»5$[H‚4ïþ²ææ|UØ˜?¬y¢Ú0Poþ!Ê+7 3t]c¤~ÝøëÜÛÓ¦öj…øŠx…ZÞ"Ø´q,äFeJŠÇ::Bl($øÁÎ‘ð!ö‚ddæ¼fw±Ç¨i~ÖânÙfßÓ¤Ænd‹W®qAç>Õ‚ÊÆŒ¡!­¹íï[Ïÿò±™óy•çÇÚ0QŒp˜øéËýŠO4M	‘º…bDìÒ -˜Y$c2Òi®¹´&V“%¤»Bb6þŽeãs?„-‘É~o7MîaèÏFªÅÝ×DjaSpðY’Ô|»xíÞòZ8fKfFTcS
$ñ»C“÷Qµ–³Z2bp[dÑHöÀª²µøO³[\e°V*½»´Øo¡cöªcÇV­¹øEkKÔ¬a?B?ì6­Z³éAóô¾n€›Ï¨jÀ›Î’­¼¹Ïï±ÑI¬dU”¹¦Ò4óaPŠÊÏPÀ¸Q–“F~`–<ýÚÊëOr?‚!^" çŒ«Ö²ƒw	't^Ë6­-oëF2%ÕøB¢4÷1+ÜÁMÓÖ¦¶!ÙÓôš®×ÃÃžù¨ˆŽ–y®ç^œ£©i¶z²j:§…¶3t¼‘?Ö¾öO=œÔ¾úê_\RsT#§Ÿ43)ë“5>!]õjîÌìXí:*Ú„êÔ¦Ï^¸pabã”fžtí93}}lÌlFXÑ¦•ÉÑýòƒÿb–²ïwX´–|\÷[ãTøP;À7q0Èó
°­Z#A¬ô½Û×NÎ¿ûÅ«·Þ9qíúÛœ<IÙÚó–iK‰ÊÖc5¯\; ‘2¶#GŠ©âŸÝŠ/õØ›àûiÑ7I*k~VÞÓ#ÒS =2qÐ)©ÿþÃr,Çr|„µ›ƒ2š%7H~5§|ë£äDØ\¯ª­Å9˜m)ñÄü‹(“v3GÏñHæ®pHÆ‚Ï””X-|2®n.ƒxZ8öþÍk¢Á@k.¬aÛ/ÃþVúª•Kp“dpzj-¯ã½¡“LÀ4B³öƒ®«yñg?ûË»¢š1Áµj$Ažžš8yûö>G!²åÞ^¶–.iÉpA9¡,’™úúê†††ö†2üÒ‡‡ÇwN–ñ{vc‹*Æ+Ç÷í¬Äb¼XHŒ­Žùöþ\ò¹íÂš¾·9AÞV|2ß×íZßî¹?ÿyjþÌÜÇŸ½ýÜ¥¹Ùùû(qÍýFœ£ºqÑs"—"¶¥‘Í™AÈöÍ'"•fCJ5z¯Ç&ôBålÊŽÌ<Dr©Ç¤à‰¬Ñš^m’ô5æ±Áoï0ãÈ¡îÉÜêú\µ¡¡ÜšîÉÃ(pCí½€÷«ß¶`­7
¨js¡-‰lÎcew“%MQÛ¹à½íîG‰Ûåà³¯}øÑÓ§ž×”¹ë~šbïÝ¿×`-àÚ©S§>:§=ýè£x?²ÊÊ"ìüû× kë‹ŠÑ×V1 k†jÑcQ²î'ûÕ…ÐŒ¢4œûÕÞ)÷×hlYå{~øc)k¼iÝ°&ÜíübÒ„ÑBSîum}»+:ø:=RØÔ“º£ƒ1ò‘õÈ6¦‡ÙÁµ´Àl†e~=b
³=Ê‘ÔõÀZNo
]HØ‰¬ùIÀ2X8Ã²ß³Iô3B°¦FSØq[SgÇ·¿½õüù¼¼ŽmÏÓWí1ü ‘×Äk#°X¿u¾Ž%¶«¼kUl}ý\R.$°ûö'­ûEk¡ÕÚ¿/(Z;é¸F×L[³Ý—ÔL[s`cÔÎÄO9ø, ]Œl÷ìÄoKúC²ù!˜Žh&‘Í¡mö¢Àf±ýÈÒÒZò¶€j„£²Úï¬j¾_ƒG“™…¤FD“á9`xI_³VhæÎP\Å¯ÏBÏCDóðv$üÌ5õ˜YñðšÕ¿8ÆœÃÚÅÅÝ /*6ñU¼xl•}-=raˆÈMßQ¬æ¢[@5îˆ;›i·ª;u°‰Y±n(Õ‘ª´¯¤X_]kÐå~òFmN¤Bš§{:Eš#Ä¸‘²:äAr£¾U–:¨åq;‘¬<ÙógeçÐyÍd5Î³ñôÏÎßQQ¹gGgSTº[X¸G>=ïQŒÕxmâ£YŸâjìZ¶ŽÜE5 ÐøGe?’•ò|ÐÔ µW‰o¾;å’°{ôÖôš>sÚ^gf?ýtvîÌÍ¾3s×Ûz>mÃ]äÜ[/WµvnÌn%Æf§¯ŒÌ‚rc³ê¼æ´5«‰ü³„d'ÒXMþÑ­‰Ÿ½¸Åš`!|yã‡•š1þ¢5Íû- ë’×TRüÖ
Ö¦^}ó‹WOÞzóÄÛ¬¯.PDñÏó÷ÙÅÒÁs¿8²hUÑ@MÈÆÓÒRó€,–¥¶ÃšêÖ°ËÑÁÑB’°vo“H—ÖLV‹XI&l™–åDÈåXŽ¯Cüã¯©Të&ÌX¤»žàðhMË`ÁæúŒáU1½ÕpJV=7“kæ¸
½Í#‘½Â˜ŒàÝ/ßGYA²Zù­i•Í)û¼‰XbîV8¬aÿ(*“†³a8"H`ËQÁZ®)32ŽLF-×Œ“l°É(¨æ9b5¤­'EKZe„5o*¦O_+¹péÒüYÒë©W£·¥ÁZ*­6ØïVu¥²2k3õ5-eãã½½;ÛË
‡‡kkjš±òß7™ÁÅròÐÑî†–tÍ![ñ|Õ;ê«Þo~¬&¬yµœ[A^š:3{³ï×ÕmÀÚ•žºs´ hè›ë¾-&ûä3Ö@´5—ÕœØÔxm1bÖ#I‘-F¶³±³í³ýÜBÈ†¢­¨ŠgƒõüTŒŽv×PÎvð@ØyM+äs[šó8&Ý­ÐáWl¿*ÚH‰„Ø†8ÊP>%ÓÉ!NíA/–$r"ÑQ!MÄ&dÃIÒb»(VÝp—â‚Ç!D/Ñ^_3päÙŽ<8xJMÕBÍÚ^CUžŒBjÄ“¯É»ÿ”z«]|ô¡õÅkÖ—ë5t5~;X$)M×ø¿ÁY\Y“¤y‹dÊËj…e„•«çsØ@9#ºZ!)LX?ª>Ç~®q“•Î1îÙÝ‰!Ÿã7bÌ†°ÖÖOn$¥jô›É«#SRN#rçïÌSÝšÂÇ¦»­±5Æ¹ŽLAA(Ãš¿lîÄfWàâû4ÙóYtÈzÅ<ÌZDWµàØ?ãéEkœl1×‘Ø’¡¼­­ZãýŽÎó›&ÆÎ•I1ë7Íò½DMW`5f\Qû5Á¬¬e£[Œ<Ÿ 5uGBWcÒÛ{ÿn ÆÆŽ²ö^À5Â¸-‚¸,„7ËŠŒ“#—µxˆöÅY-¶ß‡cØîJlf‹3›(í¾»±9¨ù1ÞãÈ!6Pm õþ!s\ZóWŒhw§J×\Pói0¨*.B~P7á"Õ®ù^eœ¶rµ¬EXBŠJ=ÈÝø‹˜ÁH2@‘€5\#W¬|à	Ì Ý\‚ƒÚ¬Ùwc¬GâÖÝ*.ãýM=“Žðwï:¨k•°¥Si°h[MpU &¢´ŽjP7 ["1à«¤˜JdËp’L£¿ð1â†Ùy la2›—°e“à®1×9Vš…ëckjEkÖÅ¤>ÖmP}´¦Úa1±€5Ô’ÍÔôA™›;DQí ?_L–©ý&&5Pí¬_ª!ˆHB2•©±¤q8}AýcÆ3ècÓ(esªéïùíì¹s7ûÚúo"Š7¶¶fïì®©èèèD$L¥'pò'fË›&oò¬•­…Î¢«ÝZc™%êç¢ÍYdk%uåYk“Þ"Øîß©iZa{!F	¶Bo`MåŒ<àRñ±×ßºví­“o¾úÖÉ[o¿ÃvòßÞ~IŽO½‚i•`iíéï~w³xesÿèjf9‚sLI	_Y?¾ÖVUA‚|W§BÖâÔGö÷¡¬y¤øŒhaKé°œ¹Ëñ5ÖþI¤ÖR]ÓÝ‚*PÓ]ßÕ]Ó…ÙHs¦«  *£V0éâ"9	ËÅH:¾,‹¬ÿüŒ8‰××Åƒ=w•[Îjæù˜ñz¹(ÁÒ¹E®†ÊpÈ÷ŒG"K°fg:¬õÌèÍE6æ-£õéÑî”Dµ8>F°†oþ‹®«Ó~-47ÈhxókJ}-unúìÈH‰ðF«©Ô²×rÖ"Ë1]ORdc3ÙÍB–ÕUäUìï­­-£Nm<¸¶A=÷íl žmààhcgÉƒÎj®êY$î"”Ë±Ö©`íVÜbX;3{çfß{WnÎÿùÒH^gÃ•ù¹‰¾Ý#ó#—T£65G
?†#RØ<Ø>‹Éíý(œØÙ‚ùÈRÌvyÿãzþ±=÷ÌFn$2›nm>Päù÷¤FÖ>£0dÃƒDÜ‚b6wüWZžØºæF@\‰ÇlÆ$&¿‘&9äïíËhïÅ<²·XkgV®dîv7#Ûà/ƒ0´qÈeâ¡cÌríº‘e{MûO>ÜüákÏž*8µËZ`³¾*øÇÝOFdÖ^8EŸµS»xlÝº5fÐ_¼ù!­®!
*-.¥^M¿Âkúß€ç®¢5¦²ïÖ\™ÊZKËÖÜb„#ÁX¨è:AÙŽ=Ê+Ô]T#)²¼ªc'
[+{ÚjUä†=ÙŽký^³V®CEgg¨ffý…Myð\®„ÎØ|w¯þ˜ÙtS‚!¶†Œe3Ýfá.'¯`g£Ú#·¤ä!=÷Q4ujÀœæ~*šËæp+wlÈŸ›øé#Ùk{VÖœÎPÑ5ƒÐ€5.ÐkÍÝü¹€ÇÈ)kì.­-î0B¸Ãˆ×­jÿ*‘P¸&^ƒÄB2d˜Âb1¯Ù<RÛ!5ÒO}´±/ma·m	^sfÓîÜ¶0à¶Ä¶TZóÙ=‘-c5‰j‡cV›<¬ÝWOl" Zk1EèÃ¥xÔÆÏ«à²5Hï²—¨ßš
¾ÐÔJ-òáMÅ%k]±wƒ„ÖØ¥ªY"ä]ACÐ»=zè/?t4Xc´²§ðöBÃ
þš)þÒäC¦YÌÒUiý£ópX¸”S™ÉA	KYWä,#­LÊòãªRú·ÁŠ‹Ge“K|%+ÖnÌ£TmuŽµô±be–r#5ä¤¦ àISÛ³§¼,O]…×§á([·ÇêÓv˜‘ˆGt\úxØaM¤æuj-GcN3P#÷q¯8MÞ„@MÉ¬`· 5e?ž ŽÀ@-(j‘Äèx[#³³V¡†ªvf¶²ïs³äÔå×ÖòùX¾uãÆL}wí†muyó2)Ñœ»pUmzŒòµÓÇ¯_`¶vZËUÈ¿_âšX­2jŠ­H¸i3HÙô‡ôÃ îü‹W¤F”Éñ×_~ý‘_¼üÎÔµ×_?ùÎÙ[7Þ~ãí7^Ò_çû‚5—Öžøîƒë¢²µÁzÆÉD'ÈiŽh|a~RSlÚsR«–@3Þµ¹Ö§HÙ"¶PYº›óÚL‹h›€O—!—c9þîãµµ¤»»µ®t¦pÃ_©~P6#EøãDÎÇTÕÛ¬	+øtá,tÃfA	¨¦Ó{[0F‘iÎÉin›¥šSÖ$Hdð©¨${Á”7ï´`Fk°šä4]ŒÖý
fLÓéˆÖÖ¬O’šŸq\bí!	r«ÙCAr7¤¬±ÔàÇøÖØÈcéª.Ù@’ûØ€'e&/›©rBV·W·4ïÖÐ–Ê›::+Æ÷Ö¶·—•le5ªOÚ'­mrô™ÉÞC(²Vór¹ï]¶ŠµàBù®eA~öÉt_ÿ¯¯üdäÎ¥¹sõ}mwæïôýaê“©Ïæ§¦Î’ÖGdF‰žZ
ÖÌ 2f[BdK¨l	dƒÙ<ðÝxÜGïÝ»—ñ¢|þ#£ÿÍ/¾XPJ~AQ×Ñ#„›Õ³}É&dÓöeDm~ø‹o±wdPÛ\i#w0Fo³@`â½ÃÈa5Ý¹ÒÕª«{EvVÈ½ÉerŸõnŽAp±Æ©‚[Á<"—hoï>Ú}à@ýfž
_6XÛoÂ‹÷â»ì°öšâÔ)%B>ôÐÅÖ[÷kÈ<+Â÷QÒÚzQZ1—8”¢.«—¬‘ùiR•pZ­zñJ\3i­PÖÆK´f"\ƒ?‡{šHð-¬åšðX«k*¯Tûìá«µ˜CšÏHÂZ%_liÀ!¹9šÉÅ¿¶öj¾ŸXsPs,óÁ.$L!=¸WCÒ¼ß/h÷…›lž„†$Û¬q ÊŒÙÐT£vw°Úµ€kœtÎÀ¨·"¾ö<†­ÈØÌcI33—þ~Ï‡„ÜHˆÒ,\3‚¶éœá­ ¬…¶Ølq£5v/Ys‹‘ ¬™}¬­]Ö‚1d¼‡™†ð
N$aJb¥l¼î×|[ØÕ´†kñn¢ZÐÙÄÆ~_æ#KÇzi?Ì–@µI^¶ÜSYsX[BYs"Ã!i8bþ!ªZ“¯H	Y€¼“o•”x*äšŠI\þåS‹ô™LÖ¬Û­a2¢LÈMkTO¦ç2®âiéÈÄm ã +}äÀQoûÜÿ`	°FÒšjëÔIMmÖVZU[V¶`mµSUYÌ×ŸÇÖ,NÖŽ«¤À˜€è­|"[åÂ÷ÁVDåk´X«$H‹,N%Ö©3é!ƒå?wÖ‘~mõi\VG•Ô„jEjC„>2­DÍ{©=“ÖzW©™¦¶ÿÙ?ÒÔIí+@ÍR»akØñãï^ªYxî#z>!×?ÑfÛúúobþˆ²F[µ¶	ŠÒªÛ[;šòë¶R_»eëÖÖšêüoléèèØš-AhfläüØì‰ãg&Î3RD®ÕÌV±¿¦µ‹ŒÖýÖˆ2"Í.+DhÁ˜ÅÑ½F‚q\,¦Ám@‹‹8ð_E^û<ÄöØª_¸öÎñ/];ñö­[æ1b°ö¤hMUkÏÙÓÍÍ/*ò@É^°Z¥‹1jj˜NÊ{¦„CÂÒG‹Zòz¬¬VkÑ­9«	×–!—c9þþ…µæäúî%?¶Ôv£­1íjI‘aR’IÑ$’êm«`—²¦åÑ>çX€¸v/]-v"ÉÄ­°q|j-e).)\‘ ’M¦øDf*l +*[¬åãÜVWWXWéÏÊìJ_WIDk£_v§Gãbµ lyÉkÐÒþHW{É½oœ˜ÿâÝ)\/Ý>Iž#Ù8'g§»Re­Y©V2YRõ]ÀZCy{wÍÎv>»š+±N£6ÖÔ§*ÊË*[*ó7ÖrNt×G…Ïƒ»HÄjJÁÜ¥`'HÙ‹ÌŸšþí•ékc#³#k©³ï½óç¹Éë”©ÍM\ù¿Gvî¼y|Â¹ãÊˆdÖ¼„³`Éû	‘`[ˆlo$‘fóØõ‚ÿ–ƒ½ÕþËþkŽ³ýüçß|âé§}÷¡Ž•ðÒiURÏfáÌF01bÃ‡Äh‡6Dì ÀZƒ÷ÕæEI…ÿö |If
h¬} £“®·¾äÈê^c=ØK9‘(gîE¢?á”Æ‹@ÔÓ¹ ÍI­‡òæ,x&{6
XXK-	2ØAÒdí£SOÓƒÛÇ"ó£6R[¥½ô!lÂ#X+ÀlD>#ÖZìG9ÍÏxea¤†÷vØ #ÇÖÖ|Ä4¼üõÛÐVÇ»^ÖÆÍr©Á
’[É‚4VãÑ"º¡W‘žþ¾Ý*b37õXc„ä$³¹Ú%X‹QÝ^.®…CÐÖ˜¹¨¶°b-DÐØl›­i²E)—á>©lÞù:`Ÿ…7ÀŽ`m‹	m¼í¹‘£ˆ33m3Ù8ø—÷Ì<<2ñÈÌX›g@*R³ÁZŸÃZ”É›#}ºjsÐmâ¤)kqGlö ¬…¾Øq«5ïŒ-qÍýû‰(2ÚÞK
l~HN·ù‘ÃB±ÛRáéa[º€M»+lšy¸Oä=qíOÉ‘Ýï£x”%ã0»«jNj °&T#j²î»j-G[BZ[8°Æ˜H‰ôM-ÕŠJVZáO•d5*ÔŠÍ"Eæú¿šÒ‹Ç~ñÈÅEa-¸A*6­:&}Íò—­8ÍÖø>ž
Â	º`3QèM‡5]Óeg¹˜3ÑV kz~¸²´*•Òíd9™¼‘e¹2ÂJÛ53XN¥KUyW%ËË"r(¹¬ûÍÜ®kÍP?mß»~¾ ö%y’ÙT©–jàDÒ¹GMÜŸŸà˜ß™O¡ª…ÔGÜŠP&Ÿ‘–ûè G,E æ¹–úˆõ£"’ÔH«}ñêù(³„Éø1rèÿÌâýéišYŸÖfgûkÛk*{®¿ü:Ûu™ÎžëniÝØ±aƒäuªX;+ê:¶méhjª¥YMª5oíØõü™‘i[Áô2ÿ¿¢µuÿP¸°š5ªf-“	°æV1šj4rìÍ$t@‡Ó )>øõX:úø7ë£¤·nÜ81uâíc×^½qëÝ¿=Qå•ï8¬Ak¬’?{ôÅÈÁŸ×à ³šò	c6ûÏ^\eòáôµ*	fe5"	jÚ"He?*Õ 5½Úþñ–c9–ãï[X«nÖo±55]V˜å°&nKÁeékÇúXÍ×"–óµuX³k÷„µ°ªI6óm‚H}† kÍe©ðµ(÷ÉjmÖÊ‘ÔkåpYay%j‘õ£©k°Z~¾ëiÄZ`
ç‘T}U”f3úåÁ÷Œ…-"†¥Ë—#V{ÛiéÍêsczêöí“éµÙ3Ø,Í“Ï’š†Œ—ëf¥ºJ[*Úõ/ÓÚZ3PÎTàÙÐ°3¿–òµ²ñ²ŠÚ^LøèÂ<ž{ðËÑÁ–Ø[Äh-Ê'öïÚ•`µ/”9vzîìÍ;Ó(h4T^»±¢¬°÷ÊÔv¶Ý9{ç\ûÀè@õää
×xL9úãÏNc?"#`Í(MsÊ=át1‘mi•-f6~{u•m×“OîúžÂÜÔ´.~ë¹<÷ÍÈæ×Èu›_|‘ÀzP Mk=ƒt6™ºpÔ[ÓÙz÷q`J¸‰«k!2TµÙç‘C“àQ24à°6Ù5É´~R7ôt×ˆÚrkœÖr‡þë¿†ŒÌ$§ÁnoZ°u&5þS=xêTÁú§MV#bXÃhÄQÍÒ Ÿ~âé^xú£Â¢3=°ðçpÝ‚œ)A*7R¨¶®€žNÅ*–qX£X1ÅYK9A–—éPY–?,AMElöh"fCËß”íÙñChËX‡ kLÑÖL†ó¦lkòíg/ç¤°md¬­Ö/žutÈé_Ž$IXUkÑÔCÓ@iñ¹6uaAø©ÞH¦Gn‘¢Š1aÔUã2?ƒÂnÌ¾½Å="]L#ôž£Û?ëT°¦Ø*óî­M\ìéÉ;ß‡‚HôcÞ/o‘€kh~ÂÀ©çF*#R‰+kî1¨ù–`5ò =ò;–Éžð	Éw‰íJ2%29cL^L†ñ™í¾Ù qqyíž¼ÆîC€6E×±…É!LóA¨¦¹ŽŽmB4ÛuÂEÂTµyðw£G3÷k9ÕlôHÀÚâ«‡à‹~ã-.’o?Gu¤/2édÃ
Hÿ>°îâS?UÍÚEÜ Ö’mÖÈ€<v‘ÃÒ»Ó<ÒMÜ]6cçZ 5fºSßÄ= ™siÕ*“àbÌ´EwŠT*kmIÑ
ËD¦Á—Ÿ¿§¹ø^ê€“iW-z¬A T›ã%k¦b™YY\’“—*Ug4:j×¤e²Í¬u¥µÉ^½2S¢±+Âvs3¡šÇáÁ'¥@Íâ âËDO5ÿ3€šW©½òÊ÷ù_æ%ÕÌPä…\{˜K?ñÙ%´©yùA³‰Ù¹Ù~~ª'ÆÆnÞ´j³}ÃÃõõ-ävn…Î6lãéŸ"Û:ˆmÍ€hª»¾5/oìúiŒû³&°yÿÄÙéÐQô'cZûQ2²@ƒÖœÙØ€µæ†æ„»HøÌòy
ùBºwŒ¡ò%ð1çk~°ÔjMï[ŸOù‹œ½«Ýxï-- oiÙ¼KkxŒ¸%dh­ÃyAZ5ýà"¨®*ÑÏ‚“—†’ k	X‹,Éjœ%#*XsGÛšµ	×ÿ´œ¹Ëñw.¬u×Ë²+H	j]øG`4‚Y}ºD›xkÏð ¼-vì»Ù´'c7.ÚZøc”«ñ	ÒÒÒ\Ù˜ÆñÇ¸V¡\F"°Jü ²‘q­ÿ~ú¬5gâJµµò×÷Oät=˜P“J#~tV–V±°åÖœ–kˆj§/ÍO“y¡>C!@šæÐé¬Lý [F‘½6­Ô›šõ‹n®ìÌÔ´`êŸ&U´¥}\æ"ããå…ûþÔ[ž?¼}x<÷Ð—´Çsa´„ÉzO~ÇXí+}ó k×æç¦ÏÜI×ä›f“o?ùßWnî¬ëÙÝ«Ñ°mrç•ùù÷§®üöæ¹©ãÓïÓŒíöüüg„±Ú'óÓ¬”TtL^‹%¶Å‘-)³9´=ÿ¼Él,?ßù~Ò5’ÌH—Ù·ùÿÙÏeß,j+]eÌ&#•gœÚF»…mÄF¶É~/pZCoù‘Nk¼|ò+Î¯î£Ö‚J¶C4kÛ×Ý•Û;ÙÝÕÍýâ·®\<J °š!`­½ýðCÕ55ÊzDO¬ñçrsùŽÕíÜ‡‡e7È7p”ôÆuÏ]¾¼ë²”CXÍÚ¡¬©X^³vñØ©'_ žeµzÈh¬YƒÝ”V¤k+µ ë©¾eA*?ÆY-³Ú`ÍNX'áµÂ23ÍÉî)·¾Øù´Àöò5²É¼?Ÿîk–9\Ë5.Òrò´ÂBõÄæ±„˜M±{äáÇ0éiª«ëé{½ïÓÂ&…°ŒÛÄjÔ´õkº €«´Å~ý:ú©oºW­qˆ{§%X-:a‰lìÞÛÅ4æð}Ò™{Åš¿/~3y÷kÆÔv†`4Bk(Ü¾Q8³1»­‡,Çžž¶>b¿ÙókP?5Ž¼Ù?BHNáÌ.“!y.(k±¼æÊZÌk¡1¶!¿°Éòä¿F…k±Ï´²q4d³ADæðFRK2Z8÷1~+QÍfÛÒÛÒY‘!12¹%#	mK1ÛaØýPMƒÏýª“š¡šëj¿åðÿÖîOZ3EƒqÑX½®ÅkŒB?D‰`-2î/ååÊšÔ1| 7)òâ¦…m±“mÖÄjQ"ä±5RÕÖP–¤<Hæ¾~Å]’ƒÊ¦¹ÝBõC£|c/ÎÌw½,+‹‰˜Àv•HCCMÓÉ
‘z *ùqéœœ²Š=°–‚ÌxYRºju7ã)BÕ¸þQÑÅ¿?é˜ÀZNVª¼¢³®‚ÆÚÃ´½.ô“¼lý²\BX‹E5bH“ýI‡~ÊÀjÏ*÷QæóÄ¬š_)´p¬RóêéÓsÇçN6æÌu2e$‚.ÞµŸ3Ù;~:ÜF-Z_Ó·T—µ´¨‚ÚZ“þÿoâ±V]S'ëþFz›6·¶¶ÍNOŸ›É:'eäÉ§][;{îdì	iK‘h­m­¦=ÆµÞ²ÆÆÜÆæ,`­!“c¬Ûö{:n¬KÙò^q)¯%¸ñæ4Z®9Æ½|•×®Ý¸A¹Þ{/ßB^³¼”ïÐóe—Û÷»¿X/e¯^ã°¹DSúc	°&aMVmQn…ûjþ7S—x#)¬ÍXd³öæ(²þ÷r"är,ÇßµäÑ4~ýÝ„º¬aÙ"‚’ Ô&sžÇ|EªÐòÂC1C	ìÆÒŒ•…aKFLv9~»õ&Zš1ïoV	[†›L„ÈBXªä@~c"¿%–÷µ˜Šp¹¬™Ü»)Ö­ŸÛ˜Œ’7JË3Áš§ ~)'ÆÀjöùó‘¤§!¾i)×.œ¼0B±‰ƒ8¬t¥¨Ü;šFÊ[›¢œµ´ë@QIº»zgc]3o²‡Ì¤Ó5;qï¬ˆÜòÇM*0AjJƒ¬E®Ç–‚é¤ªÉ\äÿ³w¾1Qžy¿’óîœ“œw'Qƒ‚i|£tb°Yg™ÐÙ‰³0!ÍÀò§b_4¸@Ë:Rµ†}À@Ñíã¶e¬mÓÇ–Æ´«ð”iÕ‡V­ÿ¶­Â)ZwõÐ§e©I³{’óù^×\ÞNÇÇ·MøÝ÷}Ý×=3
"™k>÷÷÷ûþ¾›:yf|g°UmÉ€µ$&ÉkYZK§Ó±žkäWïL_›¿==35uûöõoiÂvffD&þÇ//Ü:³€Ñ±R"O2ÎŒ$²yö#&rÈlPÛ]FÿìÄ/ï|ô‘	Ç#ìßÿÈ¦}·hUÐ¦ =’ ™f¯ŠÚü8@gTãG’)dwV$
¥?º€â,¯¥Sº'l{^=|ÚèÇ9E­‰m iª’ÊŠL‹ÜÚ0•Ä—$]ÉK\=Ä£édåC|¥ÖòTºï«kŸ»d.y%k°š¹å~‰_¬ ?|ò…§El«V]»†;ùùùEëWå‹Øòqî'ÿÑøC®çž¼6Œü—*l_Š»óUX5}0W˜ÇÃ»2HŒ ª+£¨íökR%ÿASœæSÈºŸÖjÑ×~&’Ðª¢oÙrXö"¨ÍÝ]ÈI$I’,ÂS$[äÍ¢š&NZÓàza»Èjªæ•¢YÐâÙl]MèÂ7+¦1sejŽÓL¨-sq§ÿši{mÝFÌÔ³ì·,'V“$°êð×¸÷ûaµpãáîî‡I|l”d»0MéŽ–ØÎô[cÐ„,H)kž¤TµliÝÅg™^kÏHZ36#ìÙú›)`;}™„H&\iãŠ‘Í	kYù’¹â†v7hËIjvð#ï×;ÛÉkîÌ‘ÙœÌvo[¶78lËÆ7»9P»#«IU#R“©ÉÉRÖ¼’µ¯9åŠÜôš¹öfê}&É©ðá£/¼¶”lÈ±¢ÁÚë¬½îXÍ“Ö<3HqÚ–.lÉ_f;]i0mÕ¼ÅÌ4Åv†X¡:½Â¬{ÇYm9Á#žÈ
é¼Hx‚•S]¶ZK6ÊV™+ž]I’UÖ¤°qs”ªÊ IÓg­`	‰‘<¤Rm¹ºl«'¶Ú¬­ÞÌQHÔÕùwolˆú7ˆÓ|øŠèý)Íâš3~t~".¨uv
ÔlRÝÍt¨æ8Mñœö49û"50ž¤Ö£?.B¤æP«~ú±¹1wêÖI5P›°Ú·®îš¾qåÚ©ùSgiÁqew÷Ùñ¹nßîáºx­K"›[ÔAÒ¤¶-ÚÖ¤ß–BˆtuD¾ûÝÇ£%ž=srfzîÔ¨Í„$µòG™äz8Z3âZÜÈjq¢® O´‰xÂartÄÔ©9XÓÅ1”5¦ö³
7ãlË"Àí˜Þì—šùèÈÙŸ7ÇÆ&`5‚…Rù(Àš“Ö(¸°ŽFVë=ð×wÐ©­¹¹·d)žªH´†6ÖœÇ¶æœÜ$wäzb¹§¬]­Î–«é_ÏA,&B.Æbü´…5@m¨O-±«ûš›á!T€0]_´ò£±\iÜËÈúÐ¡ró¬TýLÕìý8ÝFvß5ÞVdÿÈ±X“W$Åj!Óú:jX‰»H¤NEka@ºÐ³<cÊÖBÖT°-óFuá2X]¹/U¹ð”5`-›Õ¬äG––>þxdft›xÕZ'K‚Xö·B°Ê›+Çæ¤0àVz‹úz#u°SM×)mX«nÖzeáŸJ¥´ŽK;Ns_ÞÄ›ö¨B[¤èXMéþFXûêâÉùóô"gÑ‰—5ðUR{_¢•[¨)^V‘îÕÒv,´ÅcÃ×®ON^¿q¹¾ó:jÜÌø73¿ºØuãâ­3#óÔxSÆF>Š9e¶‘œ2[6³eW³fÛué°cbÏh{nÿÕ(m;ÞµJ[Ñ¨Ma ÝäFšÁü§X#˜Í3tánúZÿùùJ´í[ÑËxRl²I®/NK]Kvª ø–À¡¤ºj“ŽÇŸÅ]’ôÞb©pý}E­Õýý{yò>¨	Ì¬ä³¿þ…hxÒÁÚoµ]V­XuôèÚ|†ƒÒ¬­À¸Ÿþs¥™r5ÌGˆR
:]Í¥Î [€_hÍ$§ùü¸ø 5šcÛ ÒL›5=‰šZ¶vLEdâ£¨áyE>ý1ÌÒbjq]õèºƒ¤>ÊºŸ Û°æ¯õ…A´0»…548—©àseƒ¸ðŠÔ²œüwwXl«¥í¶›3óú­YYÎaš“ØqÆöÑµbÓÎ9“ ÉT©â`³hâ5­þÊT±”~ôë–­ú×U!°µKRkìBEãcMqÐÉÈlß›	´fÒ =\óPÍ£52!%¬éðªÖDkFZcwÒšç9¢‰3ŠÔI7ŠßÄnÚ¼Ò67h¼?·Ù17³¯±çm93#sçH0ÚÃ¡£;±3xèæPMÃ_œªÆ†¬¶orïdýƒ&AŒ÷Ör,&®y±F#A(ßC"Ì†Åz	Úvy)Ql>Å>üðºæ½êÂÑ­ÝÓfØâ>²æ¾>§¥Nm3œH¸n\<©Ã>³Ò5Éf€Y“As¥6<çÁƒKÌm“n|ã*ŽÈµ‚Ú;\•æ¶ŒõTŠK„¿CLš·\…R´l‹ðç¼BqŒ¢° Pó–(’]Af¶©šB‰C¨iŸˆ“Ô ÝB3ŠÁÛµE5ù>º›ŠÏ¿äº^¿¤?‘7Ö;Y÷ïÈj*X!mq'"ÓóóXõŸšënlÜ9=»27Ýå×’­]Ã==±†Š6h¢®2J	®[NuÆ²¾¥JÚš¼/åvÙ°ºEýë9$µIuã¦ÝA&ˆÕÖÞPwlÖ*=Z³Qi@S¢¶"’QÖØ$­9¤¶a¡‰gäiaM/å1‰a% Û2RYùëÏ~ôÑØ‘‰ÑÑ7ß<ÿÙ‹/¾Ìgµ5Ü¹H„äÞß~…QÖŠúJa5¼=™k}¯öRŸ¦úðª¦~Ò<íAÂAg–o¿P-+ê!c1~Âñßº’•8/ ¨IÒÖõä@BAî(µö¹<ä™àeîê”XXÓà8ì~¸fCwmþ¢@Tèñúz‰D	YTª>Œ‘G8kuçöWù£¼VÓ›éƒÁ`ª2U‡qJ!£q’Á¬E–Õk®bìEùXIX¬?[^˜gnp–ó®¯a‹,.*®% Å*ã‚H}‘ÂšúŠ¶ÞòòÞÞ@¤FXïÖz‰Ît*ÙŸŽ7ÝAµ~OXÓ×7E –Õ”Mbrþ«MÍÏ_\¸}{aaúøÁV–œd<œhâ¥’^ÔM-ádEeY$ÕTUÛ3öá_îLtvõîŸW¹Îíñ‰3_.LÞ˜š"e~
a:6´µÜqæe¶ÜÄF!›IÌþ´ç×{²íîêÕüqííø3Ø–!6Žo–ÙŒI“‘=3†ÿ:ñÓÊjÔ’Œî–0eòtÓ6æ#¦ƒ#YšÄ/r ÷‰¤2#SýI]§EjÕZš‹¶dg²týhmß¦çžXÓw`Ç…xD
!9_ZÓ·¿‡þrw­‘ÏòÂ®€µ8©ÀhÊÌ/ærY)‰‘ká´üüõÀÚÆùëóå/BµaìqLåe(©Ç$‡g4æcÈ$9:™‹`Ýj“ÕK#Z›ú_#‘ñ"#Å”ÝHT…ÙÙ¬°ZWW÷£’ÖüíÔtUÅº£Uªg»²A6þ~í&¼,F&N[cÈr~´'íîÊ£´L Rµµ ”{h‡>…3ðwÚ68ÁÐÐtÁ¥ZgëÐŽ¬f\û­a¿¹°°†¸VUˆ²V[ûóŸ5ž{tÝºÃ_w·7²µe¦ùµ²ù÷7fPáŠžá<¸]#LvžpÊšgy7®jÒÖœÅˆµ„$$®I_“¾–	Øjv<m''47JqB¸M²Û	v/ÒkÙ–kîl7{ºÿll€ln–“×ì1àÔ6vfŒCwö6^eQ¶ø²‘ª6	¬U?¸¿È×ÿ™²æXížTz8E+N†ÖDjJƒÔƒŒËt¹¤ÄÂZ&>°Ù  ™€-§²FÀjàI¤Á-¤6ûå3TÈY¸Ä
›™eùpÇBÔ 0Ñµ`  ¯d©îy"Ê‘citÀüeòÙ·w=ùË™0¥¼-ÄqÞ\²\µAyùÓc{å’òåyK¸)Jã'ÇXPÀ^°Ú.(ôù6ÿfCKAa
½uÑÎC‘Ž±ÝÍjÙ¤«¥›š’)×SFJÐþýWIÓÇãGêzýüç^‘Úÿ35jî£‰¯¾ûá‡.N]dÅ9sFÈ6sþÔÎ®é“óÓ§f˜t%»º£á®kƒ¾pUKøJWcKWÇpMeu<ZŠûpN‚Ö¢$þ#³EêZZ¶ZXkiY­œ–‚H÷Á¹S§F¡µSãgç¬Õˆ´µÓ÷ÐZ3…k.2ÎPÃÕþ5¢5Ï~4S‘è¹|ZÃþF+²¢ÊµF‰‹žØ¾ kKóMuäº³çß{ìýÑÙw^$òýußŠ¤5j¡÷PÚm[c7`©hfõÓŠúšKûš{—ª`M.9Ö[ÄæÑú¢$Êz°v«= ·yÊšÑÔˆl^[l¶¶‹ñÓÿÕZYQS?$§þúê¾>i•÷ŠÚŠ‹Ê[{K{‹	ÖAÔ5Y—»$ÁšR!á5»–ÝÃgY÷—0éÚ­é½$ ›’hV‹bBRç—]¿ PlOVËDTv4«q.OäŸíÝ‚õmÊºcçÈ´ö”g¿ëê™ÅjFÙ‚Ôà¥“#çËyKôÏ
DÍø± I­àYk<±¬54T$S©¡@¤©©¦m¨•”È@ƒ?V‰†:{Ô»Ý‹†c	Ö²
Öh`nWÜ¦|û¥ŒµÉÔÂÂÔÌÜmr0/Ÿ=Û]CÓé¡¡t"OCmÁÊTªnsYº’ÜÔú²ZÓP
k÷Žt¢³‡f§=ÉW›/_OôÇºn\þooON^¾<½°03ë«…©nÍLŒÎàB"o®Àv¿j¶îç@‚áT6†²¡Sý.nT€™2‚Gv°bíØD:Hs3>Æ4Mø«°äH)mC•m)°&mª—à0á9þ›“WÒ&Ó}ö`ª>m×ðYÿ+ÿNÁZú‰j½†Hõöó8ûC8²$SrÉÎêõO¬O
Öž»´ç’ )Oã›þÝÖ¿ôF€µ§_ø3MÖV­Z“O¬Z…é*A›`Nkùù¥³q­¢h­œuVºš8m9½Ýë¢þÁ0½Ö0	ia?ª'øL!Xc“±óÁö_¶ü!Óo-C:„ÕPÑ 3ˆIÆ½ž‘Çt~KÄpU¥Í¿!êñÚýÖ€=Ÿƒ5F/¼ê5ìöÈÒÔ¼ðjÕæ6lÓ#èu°Ç~–Õiî¯äuVa“3?[@3£Ù.Bs°öó¬Lk·þjÛÏüíµÂ‡>~hÝ¹Ã ©Ò5J5;.8ÓDŠ”Æ¥~*Â´ïq+7âÚi«¬¹4È#®lðü+¤K‡c³á€Íã7oçðNìÆæ¤78ŽAÐÆîPÍ9µ6w|rùÆ'2!aTLæ`¶ÉûAÛ
mý2sÉlâM¾£c6žcs¢šAµ”•ÕØªóî¥µ‚ÜÒZÞ}…5‘Ï=‹I¹:|Š²¨¨É°D“¿÷qº——¢ÖÂXAêø­€,‡²æšbKX[qtË1¯Wáú©KLÁ3W¾ªåP;îÜ|T” MÁš¬‰ãÖÓî:÷åˆ‹KÅ…+éòÍÆ¦C$,*B‚aUåË¬Îã«——.)øy!3ñÃÄr#OÎaßvßê²ŽÝ[7l¯­jiiÙíD58Í¶ŸÔÌ˜i¥Ò‰ï#ÑTAÖ`Ð®ZˆçžÓÍLâÒ[¬R¦™¸fúá4k(§IT³¤¦ø˜Z¸ÅíÁ3·¾Â¬n®=¶l~fŽ{(Ü‡ª©oˆ¡ÿÅËªèEšH‡xãë¬¯oK‡Éy|jƒo˜\ñJuÈ¡î¼°%\†b¸ukUËfÚ~Ã§ÝsÓÇÏ~ìsü­£ÎÁß"’Yƒœ¶V®Šr×2ÑT¬Õ9Vsò¿e<ÄN÷s&ËÕ¨[%ð»$0à¬Z“Gç1*ÙLªÑ¡±ã'FÇµYDFµZÓ©¥ñ™€µ=u[ZÛ´ž ×K_Ñú¢f"•
Ù§‚5,«Jt×TH@ÕÃ2ƒåÌ,‡9$§ûFÀ)kÖ·?Ô¢Ú¯ý÷ZŒÅXŒŸ¨°ö¿+)Q«¬6µj5m2¨/omVô«Ë‹{ÍrÈ:X¬¦ÀÖL¹¢D±ìV3—æph–¥°9Xã¨ç=DÖ"ÉÕE	¥<.ÀhQLùEj2ñ¯SI0M.yNÑÍ‹ò1W®¦±moejï?R‹j'Ý6ôœ¿¸úë/Œv«y¶ùÊç˜™:ÍíY>”MåQk ²)hj@{µd:‰u~º	Kþ¦X¬¦r¨5P_]YUË2Ã]ÄXÆ£y¥!¤i;æB‹!ßƒRØ®ÆÊLäì(x455Ñuù»‹«ƒuõÕ©TïPbx8Ô„Ag[E2É¿>ÔV2”J‡†Õ©dÜOEÜÀàîžŽ—_þ4ÖÖ<Ô¦»Øðµ¿Ü˜Œ×TÔ<?>??ÿåíã³3ã§ÏO/Ü’‰µèòÊ×2ç»ŠÙ²=#GrfF¾ôkwZs4g i¶]º´ÇŠm¦Ò±í±ÇÛqÕ~" (´.¥¨¢@y‘Ø˜Ü«˜µ"I§¥²aÑb=ÿî²!éÙ´ÍüÔ&IßÈO{Ò}úïöãˆ
Úpôg¦äÊdê‰'zûRO¬Ý7Ð¿þ¿|ëª>¦íÂ¶‹ïÕ´Äv°æ¹AîøðÃ£â25Ï_±fÓÚ+`5D6ì!å/«jX¬ÖX]MïAW³Ð¯²`mI å™¦jˆl|„`Íø† k¸òW	ÖÚCµzÑp»V‹ù …ðL¬ÖÍYÈ¦ý ˆ¤R":	ÐÌÛA©ö˜ÏR‡'Žé2»`Í›z˜f˜K››:Vóä6—éH¦KÁÁÙÐ 2Ki=X³ý³‘ÔŒöÓqbÂ£<´Žó]i÷oÛÐýèÃŸ;·î\æ§`Xõøë‡ŒÃˆ<G 8×$[ó+Êƒüþ{ž=ø/ÎÒñÚ=yÙöý{¸¨épÛ˜c6Úr„C9HÍœ,¯1^­ÉSò„Îœ(r¸Ý7¼ÔÈO8mlh›ÔÁvƒÍÜ–“×8¼Ê6‚1®1¸“Ž~B„Æ\{ÚxŠXRKšZ5 š¼`óLYË§çÖÕØs4ì”ªV¼Q3ËPª£Æ	R¦WLa´}ªVÇ5«pF˜AnY·f»KÿgËRÖ.| ²µKWÑuÍËò±ý˜S3¬üâ!íƒ\˜š'.ì§®™Ø5P¸Ñ‹¥š¨Î2#¿-E$	÷åq‚œZIù§ÐÌTÆî†÷ðŠÔ§y#ðn%Yv›7¬DRÛ¾Ý÷›ß´DÃƒÛ·oå^O¸l·ÇjŽÖ,¬y¾Mž¦–=dÊÔRÆN,“ú¸ßd}X‹%@MkdFP{É:ôÃj™øÁÖ©É~X;ãÂ©…¯ð)f	™™;|íŠÏ?7OùÚÎø eµñ¶ÖH™oû`4><Lþ‰`­#‰4õp«ŠœolØ®+Ü\HA§°šÕÔª>µµe5Z[¤¬¥qîÔÙÃÏž¡«¶ÑÖF‰œ´&mÍ®©YK¼	R#d21œÆhü¹Ê´ÉÓá¹ö{™CK	ý`$žFpcF6dQÑ‘#+6ŽŽÎŽÞÄeäÍkúNx+±†{dzÂ¢·vÓš|h­”Û}ÅëûŠ76ÐòWÎ}ù«”D	½¦çšÈLœÆž!7®r^ü×°&ƒ…3‚ÌŽhŽn‹#‹±?Õømõm­CC­m5ÑºúÖ¢æ¾reûQ¿V,§Çï2,ˆrFfÉ¼™1]Má²Ýh&Þ,ëÚË®6Aëà¡µ•¦r-ª¨“¶ÆT-ÙLÅ³hdI^ŽeUÆÂ¿ ªªŒêcg©‡tªß[ áÎý{¶¦||f¦kŒc5£«=î±šI½—ãù±wNó¯U-1É+I•ÖG‚­mC½mÕ­©tS<‘Æ»"ö³ä¤z#Ñú¶Ï‹ÑimP°­u¦û¥¥Ò:+ôd:¬íßO/î;°f30ß\] ?Íüåãã8›ÔÕW‚Ë”FC5Õ0b_.™®k
Ö'ûM¹ZŒþ‰S‘ðû—·–{Sißà°Ï×“øKÚ_K$*º®ãBr=Ñû§“Ÿœ˜›»ýØùcB2µ0;± »®‰ÏfF<Xs g#Gb¤Çl7_üg–¥—ÞÏÕœÍZýï2ŽPÙ.]B¸RFÈì;pü¿ªØ¯ Ù6mjÞôî¦U¥*½–Ê¦æÚ@ê^öo@6åGÊ†„‘ÔH)lêÓ¦ó+°à¹AllÒÜ8y7‰~¤5$™€mýüÿñCE¿(êß÷Ø/ÖþõÀc\x’ûÆ|o—¬$ßŸÇjÄ®ßîzK±/ «mÚ´ií%C®ß©)òñËÏÇÖ V#”©l¥ª@0˜f‰‘¸.Ö½ÍºPÀkbµ2ÿ M%¯ÑàÆRKìÝ¤>Âm0]û^c‹Õ$¥ÉÜÑÒZ£NXk´·s2¡³ž‘‰]¤òu‰Óc»J2­5Bn.^y×¼HÈl·{	£¦®°ÍŽÕÄ}î9¦Æ ß˜ƒ5µS€«	Îîó…-§ipnü¶wÝ¾a[áºGÏ}ÝÝ¸µV?.Ë©‡>€RáÔ+í0šc8MÐÕŒ½ÀÖåõYË)­=ïù÷³+>Sõžl^õÚ¶1˜í_˜8{ÆÜ‘ìNèÂqÀp€›ÝÈnì¹âö¤QÐæÀÍ¡»6-¯yØfNûì¡ÑnšÉÀ‘Q‡ÝÌàa[Ú™dÚ¨†¢6©Ã¢Ú'Ÿô>ÃÈJ3ü§‘hnb»Lg„5Fªº9QêÅ'^µ'ãÐXÎÓŠc+Vlyýõ>ØâÁ‘U³F@j[ŽþöƒcËŽ^Ø²jÅ1¾Œvû%A5>>;:[ž!É½™‡Øuä¡¦e€Îüaí²òåÄs,´Fd¹ ÌØˆ\æ@AÞÛOM/	”·–ÀåmzïGcÆŽ9qI	]eyr)+á1VØâ/+,kÙ°Y©þaëü¨ø”]¹²ìd…­R{µ¸8¿ùÝ¿*õÑU©½%Ÿdk'"T#È?‘óãß]|GÖ£$µ[·8ß"8-ÌŸœ¡áõ©g§ÇçºoÌ]k¿1sf~îp	Ëuh]¿©Åò‘~–É&VÐweý‚µáD¨¥¥yP‰Ü³
G(~ ûZíS-¦4ÞkÀÚ\÷ê–îé“3ÇÏNOÏ`b‚¾ÆÊdÉsù´Få†£5xM´Æ¹¦³è}Jˆ¸
w…sê°ž"–œã1+oé	pÚ”$oTÏòcKñ .Ý¸îÐØG$AÞüó¡‰7_üL°¦Û˜ŸþøÓ»\äs;Q ÆTðš~Cû2æ[¹þ:b‡§šf"D~QîNÌb5÷§5Ãj®jíG°&ûíÆÅDÈÅXŒŸª°V=”¬¨““ÒÁ½6Ô4T¼4ªƒºÝÇj¢nÞ©Êµ¹7XRùWy‘kÞDk¬;ß“ö*[	€Æƒ¤‘™“eeþ2rIØõÂ•~ƒi´Ö.k,ÏÜ¨u§ÊoRËƒÕAj×@5±šòñS•Cß|ÓûªPM!V{ÆAºHrðPÖŽ—ž>Â?IK¿Z”ôœ«©_‚‘]H#m©d"K ¢¥Ch[	,äå‹‡PÁ:éƒ­ÈD-Ö€µ;Òšç‡|•—¿{T«Ý4°)NÁjß]ïjÜIöåjª®Ñ8éG^WÙÖV­õ§k’ûâ[¯|ÚÉ7Ž7ÅÓjÊµØôHú¥Ötv&“dš|ÚŽ¥¯_ÿ¿WBÉI}:<ØÞ5~ÒÐØÈÈÔèØ‹ëÉ‰Óc#R×tØÀíßÌ=^S°(þÈ€dvvÖÓÙÚ²™«ÿ;Úv¡³í¢CÂ%ˆMŸöPu-›,mÄ¦'dEâz‡ò+÷êÐRVi{Ñ~ˆ]*!V{Åb6…#5>›pa-IPÜúù”Ò7Ôß?´ï•WöqóáÒ¥M©þþæH‚µgqƒ«ñ©!o…5ÁÚ¾ðÂ…5ù«PÖ6­ÍÇµçG°L°&fã%$Uk¥Øà/bÍûKÔä4ãr‘gŽ5ï×íÓëZý°ýhÆj„ÍF0AgóU™žkƒ¦ž’k?ÜmxMƒa5(BµF;W Ñm­±*Ö¯ñšîÌ‘ëØe,÷0ŠÕØ!1.,©AY–Ô]&¤&öEœ¼Vjîi³gžôêà4:ûöõ„°‡`.ÿ‘p•kwŒXXÕ8©ºÍ‡Ÿ;×ò«_q‡}kØ¿møk4H¦~Øò‚”£¿5U²¹ŽÙØ‹˜š5g0ÂFˆÕtd×¬±=ÎàâqxÍ¸ø{¼ÆámRÛì‰	ÿœ„oŽèÂ=Xœ0‡)u3Ç	FÂ¢›áÛk—9,¨±™ÝÎ5SÙ2´ö	ÀÆ¡mRÜ¦³ø-{SXˆcçpÛ>;ŠÅ¼-ÉAxF¨NÍÅÞO 5XíÁ`°fì9…µì2go—ÙvÔå¶Œ—¤!cÚ *	r)…>Ö>ü:F[Åß†PÍn.’ rËÑV,YÁÌ+G³Ý¶¤¬á&Â`>ë»Ó£ÙgÄ4t^ÎÙö‚ã§éù•ü,m²„ò
˜bóH+”5¸ÑP~üù`‚·%åäw˜ï€åÁk%|ð.Y^(ÏÄº<¤¦‚¨>ë)ów¶TîÞ k‘šBˆ¶ýå; Æ˜mÒOìMµiQBRk^óÄŽ«DFQû¡;™
«§‰ÓfguKÓjj.¨OS¯˜©…)&TZ#£º~ûFÂìòßÀ`äøµÓs]5çæ××ÄÂ[¥¢oø™ÖÉ¦ŠÎNªÕ¶Övônð'be`™\.[6?UëbØß ‹–Í…Äê²­[Ûw?\@ÏµS'GéÙv
N›ÉÀÚÛ?ÒÖžÈ¦5(u¸ŒPqž	×o]ar\Í'DÇÌoûŸ/V{–cøØÖÔ!MíüŽŸ˜µf7'ÆnÞ|ÿí÷ÞÇås
ÌïKYæT°¾XãS‰¸ø£¨è8‰ÈR÷ÿ+Õ¤¦	ÒîA3«óyÒnÎ,ñ”5â^X‹.6[[ŒÅø©úö·!¨ÕÕ“è]^®bH;ôÂî±´–·ªæYSšŒ,Ó&ó.§~ØÞb¥;Bÿ…±ˆ&™Ñ¨ê
`ŸhH‹ÔÛžk)d¼ÍØd’(ú™µQ:$Œæ+³ë=bE¬ýb~³7Ð†º,o•°†À•’$6½}À’¹u¨zµÇŸw¬fý=ff¿ûî±÷Žèi{œ¥¼Ÿ¶Éÿn«©×7«Ûqum•ñ˜‰D<áóq®©®jbÃ¨jƒRÖ†Ó‚	ì5±šíàÕËé«ïzëñ7ž«Ý´kTi¼0õÝÅ™®P[o°’u
JK¦z+Ya`èx<™îé¬HöWù;;¿ïð·øý	I:0¤<§§c°¢ù@ª¦ª6ëL´6QÎ¶=QY‘îúË@¼&yy|âôkCñ3#3S_žY˜]8yrtF«ìúßà})ë.Ãkb2ÏŒb»O1Ûì]¹‘7ÿùæ=Nÿ–Úè«Íñô[oÉ‹Dæ‘
°Mi‡
ClÏaGBóiÛ‘FÄf+Ú¼°Ì†ÐFp&9’]Ø6Ð™öJÚ4x½µ¡5¯›€­ßôÐ‡•—6íÛ÷Í¾×`Èßýío_˜¦Ø8AŠÕÌÁå%B÷–‰§qî?Šñ#°FÞ#~"«ÔGÈe@>#º¿Z­™ôeŒ¦óeãKÐÕØÕP_óhˆd¥P$lXÍ…ÏqZˆæß@øc²ñ—Ô¶»jÃnw»¿ÝØ>šÄÇvD¶ü~’´ÖM%—r!»å/"NS0úkM5A»«1³#‘Õìè„5Âô»SVM›ë›–íU¢¿SÜÇî@LÊ¤e¦Ä¶§½ehMs½Æ¨Ìù«mOl]fò1kÏ}ý+lï6oýùÚ|û®`àïPÍó¾)@5+­}ªÆ¥ƒ5/¬ª¦ãÇ¦–Ô¼øjcó,G4x»¨£·s¸–ÓÔfÄ=º™áDŽ Ý^c€Úthsš›hÓ.hs£ðmRƒã¶û —ÒÎYR™D³ë)6Ù9Ù]hs!MM¨Fä‚5"·»cV¡ÚÝ‘£æYs“—f8È
lî ÛÆ"î”ðÉËÁqÝ±×ßxãÂëÖ²ò 	¡Z&ÒæARâöÁ–cÖ 4¡– fc9×ÛöÃr5lÖd(¢³'Ï”è•éù"éÍ¸:7Á%díÃ~ˆ,]	‹©Ý––VýÜ},\IFd Ø•ha³)Ÿ8ŠTÕnß^SÒ4§ö õy¹£Ãq3kÓ/ß%ð-óHƒµ»QÍ˜ôC­¯*!ÜÇÇþ¸ß©]ú­Þõ”ô¡Pæ£Ë}|çM „*µ¿ã'ò¢šÊÓF.’`?3£î×3g»g¾\˜žÿöF×ÎÃ¡p×©oO]ßý{¼Db]gÏn(ÃÌÖ^]6Œ¯Jÿ«Ö;7@kéš
òÔ»¶¶LFûŒY€›ÊjJòÔª`uÁñS0Ú´`m†™2õß—ËˆGk¸;ÒÃµhCMSM<!M€¿ÖœÙ±\¥÷ÒB3A!ñ–~ØÆ½Ÿ7}Üûùí*â­éá1VïÙ±#c³co¾øö{Åï½M[ƒçEkºOi×¸ŒÇÚ‘_Ú·X+%}ŠreAz ¦Æc„/<³Hv~‰ûÈkË³ºb«/R6ª‘	Y³(­-Æbü4}û[ƒõõWåHRÕ ¶ƒø	KÞiE‘7·“Š•e¢”ír‰iåK—Û•‹GÌÝ¨Üæ":œ‡Qv¥>Eö	£=Kê%ªñcÒ ¹;Ä®? ÍVýÖg$µðÆµ?Ì£y„/¢ŠÖ0­¨ÏkÛ[Ýf`À;¾™•É
k,HNWû;¬M-Œ~tsâæì!U‚sP'@ £‘y	0Ü‰Æ:‡É€ÅqÎ…‚­t\‹ûÈãÆÜª³ OC-‹û¼k¦e5J En\þ+õÚk“YÕ_íâÈtWS[o[SCa”–hj«¬‰‡*È¸$óqx8™ì©õ k[k}Ãä[i=¯pt¤‡Z‡R	©o¨’Ïâƒ(}ilPªSŸœxíµ¾`åå‰ñ¹Ûãã3´Ñ?Q6‘°ÚÄé‰‰÷Î9R›Ÿ9y2£³1¹/²y2Mê\s¶,h# 6ÑiªÍ2jì#U'¶‹1…Ò#a$´¬«{DlûºiCØ¦2?‡lDæ'ê\H:»LZ$õlŒˆl
+·	ÜT×¦MÃ 'F†þÉ7õÿc×Ÿö~H¦#é¨_ ¬	EköÄ÷Å·©†éÄ.khjEk7íX»Š²Ú$aþh½!Õ)›ªƒbÊ¸RÕZ0h?ÄXžïuí8ì‹FÅjƒ„e5F" š5Nl¿÷µ
ÖxØˆnÊŠ4²ÚµînpL°FpMXVk<Ì¬u5†kU½¥¤IyŒð·Âj¶µ£2"½pIÁ8;fËê|mF6¯‘Áºß;ZCÓU¦M'‘¸Æ¥ï).m¸IÇ€ Ù4µyD9‚Ã`¤ñ\!úb´½¶µT³¡‡»c?ÄFb(Äf³!5‘¶†ÖÒ¹>kìÖ¹ßî÷­±»|Èìx†œH;XhcPdOÍ),½iâ¦wœ‹Ónƒãî‡oÛr³Û	¨ÍìÀÛ'Ú@6»åˆÚ'µ±‹ß4@3/R¥!¨™ÍÄkfÜ‹j÷iµÆkg¾ìðÜÕU×%Ós¢Ü:U•/å,XƒÕ–"Uð´BÄv”Nk²ÑhYí‚óƒd¸ËòI$¸[(A]µÍ ›þ^¦º"l&‰E°ÌÕ1ïn¥SÔà.÷˜.QÒËJ"e3xópy`¥JÙD&»Rÿ.ÊDk„²&rX†ÕÊ#…`^9Î+é½›sõMÛ_Þ]VXH…“‰ÑLZÚö×SKQš)ñíq¤¶¯_šš‚[bë‹0~”C¿
‹Mê7ïÒŸ›œH-«HÍöR3~"ÕÌéÖ—'gFnMMÌ:35òKjÉFNÍ˜NØÇ¯tûÚñ~$Ÿ;ÑÝP×Ý),Ãcdx8ëÕêë|þ8°V…C˜ØW‹ûH]ACD°†	lKC5zj•M‘\
­ezœ¦ÉaiMÙ£3ïkržO’‰¸–_\ìhÍâZM†ºšŠúˆ5#»Cû¶Ýš~Ü&qÕÉ\¡Ô#Â¤@Ô8xê?’ÿôÛãtÆþìüºuc/’$óþØ±¥o¿ÄOîógÞx†»}ZX`µMt²!šEkkú¼K_ì¾âbL"—	ËîÉp¬9]MXæ½‚K‚¦Yé‘÷b›…5XXË
HMÛ¢´¶‹ñÓÖvâÔßZY“He}+&#CPšr{KûzK‚$d¢nž˜Þ-cù‘YU¹µP¶ë¦}³È©©yýÔìèî‡Â>Áñ22Æ°š5t&vs-H	0MlÖ ¦Ñ(‘Î
REÅjœÈˆðVÜžíMBhmyèYÖ”ð!Vûµ*Æ”†è
Ö” 9ÅJtqæü‘C³¿§š‡@y9hV¨¯VòV—ÕÕIZÒr­ BÔ
‡ã|ú7ÔW«1`mX#”l§©°BVó¼EX!Å;½¸ŸhAT¼cd5CkÏÍL§›ÚªÓ‘‚††Àœ&9$ÞL‡†Áò`mi=‰a>ˆv°F+÷?‘ìáœ¢šmà<ýû’¾Ýxmqû²ÿŽêêæ¾¶6
'/ÿ:ìÚyvfæì¹Ã_]œš=?>þ'>ðxoäË‘‰ñù3ghÔ6q~ÆŠk##8E:ºœæhÍf¡íÍÙ{j³Ûx‰`S¼ñÌó?Îöø[O?ý´¹KZ?a2o2 ´çj&¨h3J›£6@[?Â½Öð?ClûÒI¥Ej'œ$!X³æ‘@›Ý˜ò˜žúæÙK®>ûÚ?¾Ùõì/ðà^‰²¦¯ÎÁD¾ý—`J\û‰·^Ø’¿
em#ÚÚ&
ÅU¦F¥ùœüEpEÅùk7Úæ8ùEZÎƒÜ_àÐ¯pTI\#²-‰¨h-¤k>ãI0h“)a±ªJ±¯’Ú
À0îöÑmmCŒB­k£uãZŒ€nP‰5à8+èÝ6°&ïSµ¦¿U0eœ!¯\ñ1uæ\E˜±e˜ÍÑšÍï6ŠÔà5Ñ›yä÷˜;ëFGdzHÈåýáÌ5’Ùr5^­×štH'¶Ù—‹÷~Ö}ns÷áFZ;Ãf]üf¼ú9iæÜnz¯eœýÚ)ŠsÊšóíwi/e+kÞ¡ý¿Šg´Ûú6qœkûÏÆNxdçkÞvo8~û·ÓÚr²{ÎxM‡·Áo‚8o³Â›X*wX‚ÓÙnc®p˜&5-›ÔÄj—=Xó"¬IVcË¥¬yi9’!Q˜pQ7Ÿfq‚\.ê)É<Q
ç,µ	 zHUlG_‡ÒÞ€Õ>¬)þðKÏ^Äƒ5±Ü–e[¶ð¡œ°ý®Á3ÏKDƒe”ð
[æä>,›ÞÉvó`Í¤ËñgD "JÖPöe¶ÔM?„’Ò|kN\ÊÈ’µ•×vJ¿çßÏU°¤¾¯KÕø_ÞŠÔô@hUJƒÄJDêZ¬¦ Ý\•¬Æã„aµKjŠdšZß«h!³ö;ö_åmæ’ÜRÁ3úÍ¶†"¤èƒj^Úßá³‹Õi™Ì/âù8ñâ\÷ô46:VCQß.|ûíÌôõï;†¹©ø3ÞÆã Cb¸j5ý1Ö*™'Åš6o¦©ZH6Há2*¾¹«vkÑTômÛ¶
Ñ
è“dY›IUS~}ðF“Ó¬<äçmXB*ÒÑšË„\c3!®eô5²‡**Î<5Èãìý¢yhdûŸs œO=‚6þ‹ j~OŠyï/á×dlöæÙ÷­ûì7oò-¼wH«ž¾gä1b;cËÙÒ¬Æ]{3Uk9•
Ëø]Jåmž7Äëô[EæÒ†®¼äÉlT³æýJîàüPÍFüþÓb,Æbü}û{[4«n­®76õxö·J¸‰Äâ§lEÚŒ}~Í*Œ ¡3uÙWgµ(ëzùýÃ,dÙý°ÙGúDp4ðt¸•„ƒµ0[X+ãŠ°MÖªÐÖò°3…BÑ†He€¢µ” MŽð•Â4¦¦^'F™ö{VŒ¶ÃÚ¬|óG>Ö—N|<q¤ï-‹¨?`€Žm´~Q÷ëdSY8Þ–L„xßCh1ù5¦‡‰Î¦znÞké}I¹öÛFÜlúN ×3 V{:ƒjÎyŠ$È…‰®ªº
80ŽÓde$"}3•î®ŠušHÄËÊ|»kc=¯¨·šÏ·Pav,ïèØ½½'ÚùÊ÷ß¿ÒŸN4{KÇXû^
½ÚWLéˆÇü1eþ¿yúÐŸŽ<ÒÜüÿÙ;Ûß¦ÎtÝï?àœ¯#
D(Ñˆ/ „±P2"Þ±<ÞGxlÇ–µ“ÊqmR’jkš@)i
¥/ÉªÜÊîZÚjJ'Ñ&iIx‰Òf -ÝÌ¦ÙTQÎÀ“vN6_¶Žt~×ó¬‡—ÐÍ‘ÎùP)÷ZëYÏ²M€üø·®û¾î“_|1zþ³©O>9ù‹OÏ½ù©u™›“Æv‡™½täfCÀÆ®ùBÛõë>´¹ …ßJmï½÷Ò»/}éU½M<ñÄOK¹¢¤UM'	–ÔÝ^;ó¢µ!!N°Ÿ`aƒÙö±Íò1ül°=ô<¡Íß*>˜àD² =Rão¼‹_Þúís_¿p¿—[_¿ü9õjÖèQ/z´¦[Ì&^~Y°¶æä¦êÐŒÀ«¿¦<ŒUÿzD6©mÕuu0Ú²:²cž‘Öø±1}ÞE215—*ª%¨r„Ö¢EÖ,­ÙC \!T{ÝÀpÂSéAXDÙ
%ýII£˜Bµ\ÿqA›°DÉª=Úx)ÌFŸ5~9(¥ÜÁ œÃ”Â·áÚN}HÅ>ÎûÜcp™ØÖ[Ý‡5ƒh’ÅÌƒÖ˜r¶p¶Ã^³k"s‰Ž ™k¢Í\9B6Â6`ã¢bm[¹0`”µmùNQl«ýEk°“{‡‡‘Øx˜~»{ö÷ßø»µl%Yì‹ÆKþÉ×Ü4ø{I<±ø5göŸ»`P\ö6XíþÜ
o‹ìöÐ8g7âí^¸ë/Î}A¼	º)8»SIXÈâpç"™;Ž,²iw¯µ(ø¦µGÉ‚ü†ýán•»ëÑÔX¥k\±ò˜|ë¯/,}š†‘VÔ­{Ëë+òÖi×[ä’—ÉáÃ=Ø¶ž>ýã­'inOSNãxÖ`8÷œ “òe…ìŠØJa­î uŠÐŸ¾¼Fœá0Ó†ìòfü ƒHoetV#¡ZU¯â6uY³	êH}go¶¾±qY¨Ö–e¡3%@@Ã¸w§©Sc³°¦pHM¨Ö«à-Q¨¦û†ª8r°õ·Ã~‚µüãz»ûÙç¬Inñ}˜7lIj&ç£ÄMÄ šQÓþ¤Z5jÔ®ÑPD›Ç™šjçñé‘‘éÓ”¨Ý¼¹çê.Zt«WohƒÙ†¦lºª-“H±4÷mÄ;¹kíSñ@ SÅU4ÞŒ]V<‹ÁY6Ð¾XÃT„‚µµ…öfÞš×V¬]‹¯m'Ö*¾¹@ß¶á™ó,;JãgüPKÎbÝ±)¤B¸ÆÀïôím4‘äi¡ÍrZ©›‡¥#ÇÂa<§:BNþrŠY>ôÆÅS/½=úÞûgß÷â{Î½Xãn¤¤5­c‚µõk6¬©6ÅÙœ¶2ðåêk@6ƒ`|]Ëûõ\+œ3¥\:×ÆâvþAÖbr ›¬²–Í6Ýøï·K±ß;{¬C}¦—dã ´&XƒMÐ×”ý'-œDz¯Ã¢ÿ¢º°*¹%§q—™eµGj‡]ŠoŒ
×Tb›+j‹*qô'©‘piâ4>ó:aKtµ(ÖÖdâL¥PÄ:¬ÙöÌ¬ã¿ÜºßáÌ%AJº¬œŸ¹®ûñÄõ©$"ZÙêP_M_2ÈÝM´À)£ ü`_K$iÂ´?Âò!’µ'0X4°–¥}v°Ö’ïkíK™®a–Ö¬å	ÃjÌqÿò	Õ 5-ˆ×Œäž@{¬¡+Oõô4d³4RKÃƒƒ˜–D2™tt÷H‘_õvEŠ,Æ0¬Vez¡{ÿ¯ÿñ«®–nlOzQØô‹øB!|zzhÃÙ‘jJS&!ÃdèÂ©ƒtŽëk}“tôa;Ç>:3úÅG£SSHj#s3ã32ò'¹eAðÁÙ†Á5;€l|…lû³YóHßŠ„¼²¤µ½¤ø©ímÝÐÕG‡l*"±©:Û™:àqë„çùWFgSø*¦JÚÆº»­Ø&\ƒÙnÓtñK ÍüÐ>?Ãïg“ ÊHx^?{’D_»Äíùg«Ë·®*W$‰0*ß ·q`Å¼|Å†jòj™‹S#«Á¤2y#Ñœñã
±yŒa5œE¬UqìríÖdÞh~¸Ô ²mI777×2Q µ.åCšÈ7¶æ«Ô"úGo½µ{¯ÒýPÖö@4Uj-ím{Ums`;ršÉà€Õb–®MŸ5'‘ùi¥Êš5ÂÆÌÃþkkÍn Í½HÌ¦ÐÄc5ø¹ö,Œ7¿2Ãg\Ãl«qE0±ÞÿØÖÀøä/ÜL—:èL°FaÍÛ9à3ij¶Šƒ°æ² ]¤Pá»C˜æâ°¿{,ÇÏ0?»Ëþ‰‘ÝÛ‰p¾úfÏ¾âÆð€äFxi“:\XîœwþÕpûŽxÓŽlW|ÕýøÄž^æm~¸‡ÜVº3F(kßøÍÖ_F’ÞçYˆÔÑ"$¿~ŽL"˜«ˆ4LÔÕ­º$Ÿ‡Kö0¨æeAºðÝ ‡V”ã1rrhÕÉ“t¥«-3åC‹…-Y#üõ‹—2%ˆ9×¼¸4¯¯_šŽj|9Â˜uuö%AýETÿª¿Q‰ø@]R°V¨ïìî	[Z*ËRÁ¯wóE¦9ßGm§:©ÁjlIéi&µ@i?ôEˆ#}ð²yÏÕž©ÙNjZKIM©.î|v—þI¹é9ŠùÉñ=úgG¾š¿°wbæÂ7Ã7·É4Áùª¶í©µ¹W‹E©H ðŠç›º{‹ÍmøôGíÜyÍmÛ2m;HëOkmJ7?%X{jsE™Jè½V»£Mrš|"3˜?míÃÃ»wO ê™ Öf´Î”Òš<!ëê|ZãPˆÕ‚ù¼Ÿ‰k-üýÖî_—ÝV‘yw¤‡¤çŠÕÊ€Ë‹«ÃÇOãøñQ-q£‚5³´éN¤–ÑšXÛ°N‰§ˆjì¢5¢fE’ÏR¤ÓËÒÜgdºxAšI×Mç‡+kŠ¼k„)Wó"ûƒ%ûþ¥XŠï°6Ðw°£±ƒ£E˜Zë£6¬fnÏtP	 û•¤zÕQWkëÁz=Lÿë0}õíqÖÉªlrb +ˆ{q"£ëš-NóíE ²¸Öx jÌû«EùLÇ/QaÙ}T³}°…J®ÁškOÈÒkG=òáµ½ßxñG5Ç'&†C1jäc¸^†BÌ+åTÒ´†[Ðïò©H ÝÒÐÔW‘Õ˜ú±ÁB¨¯±ee­KÚšGk–(h-V“g¿ËüO-ˆKZÃMkfwwW" Eô7Š³Þõ4DÒ‰X4xµÄã™h{íïß›îíÖâeÔÅóGÒûä(R¬Ú…Q}w@Ž”½*T„ÕÆ¢ù>¾=cGÖ:²±EÚ+b}o¼ñÉþýù¹‹§¾ùéè› zßñ©™s£`¥ WˆêÖfXa2ñÙˆ°mnF°æ‹l%õl†Ø®ñÝ$œ‰ÓÚi5=@ñ5‡î=ŠÚø¼‹Ü†Ñ±’FLÀlr~Î+i:9ïH%“ÙÄl‚¶[ØØ‰ÎNýƒ{¸ÖÒÒ#hÐD¡‰™{×'ž;³ÿ¯/ü¯~ú¬º¬©t8d'ø•ù¼ õnýúò­å«Ö¬cI]Q¾&ÌÐ­zÝ†¦`sQmŠÂrY¯	vsÚMðÃ¤£¥9d2REØæØ»äÉc:@I[s¨¶O„F¿÷D­™z-±=úãÇ÷‚fþÓoœVFd?ÍÖtÆÒ
p{Ô;VÞ Ðyn¯|â²³¬9\[rv°Ïø¹ÚüG_‡CqÛ¦3á9ëZ%jb5OZ3Vý†È˜²ë	ðMÏêUFvÓemàjsmÕ¶üå÷n·‰Ö"s fÍûàF‚$¤öÛîÑÒ4HWµ¶°q}XÛ?qðbÎ';gwÁôañ’ö÷8^zí°ŽËú!g(¶Òpþ%þ	dÃdR%Þð©¥5FRàæ”hx0œ¿¤¦ßà6[ëFhP¸«Òí{&ìõƒ¡ÇÖ,¨-¦«}w*¤ ›•+á4sµœÕ‡Pˆ:L“‡,a0ãŠ­pÚ[2î'–‘©ðûÍ£2\µŠ—\Ž!äc·Ç „È…5s‡Ò¥ô{'àÖì9Dé¡d7’ûI?|}û
ÔøzY?¢¹)#ŽåÕºYr-÷¢db°Jöôä{ÿ5°:Õ²i­Wššó}Ô`›©•úôÛB5Þ÷~xßQäˆ’yû©é~9èÏñ¦ûö÷QíñŽj´RÃ¤Øøò»8ÿ™äµ¹É?}5sa|dnîÚµ™þcžûl|O¾±¿Ÿdå4orEÝqÂ¤¿­áÆÕ4Q%êjk/Ò8?f$“Q¥–@[kªÍØÕîÛY,òØ¶Xk{Š6ØÊf© ¼Í”ªm†Õ(ˆ@kô/CEž=Ö8-²Õ»´;¶ÓÖÊë’¢µ”	×Rt“MåÕmM²ZÐ¦Dºêzs@©ˆ.l½"ãŠzÔÓ!ãÞŸ¬	ó$I¸ÆøÔÔ©ºãï½¸vèÀåË‡pCR°ö´¿úê³øgIYÖ^;nm­®¶½Ö0±Æ2è©NRÜ™êJc)†qáÃÚB‘‡(kùXK8\Ë²'š¶/yŒ,ÅR|ïìEúPYÔ»1Ô(DkdÇgä`ëA>v¢,%T_M™NXï0¶(ËÙŠ°,«Ö*ÉttsÂÑLEX"ÂÇÚ\N]P”™Àe^Ùcê ?¶I{ŒªjÛ~Ö”©ˆÃjÑx.ÃúxÿþÆ²£÷})Ìa²éÖ?ë±š¥%Ï´^™|3/\Lb ~ãB=Ú¸g‹fG2¸ze0îhD[3ïûù¦Ds¥h„„Š®tKÊmÖºd9BÁ_•e¯)Œö)]“¤HP.ß«Ö¬)ò¬ÿ·Š¶1Á_k~zjfwd¬«)Å:ÂjTˆ‹‘&26
k#Ý¨ÑÖWWdšwþ¾8hä¼L†ÆÊÍ-4¡mÌ›£Ý½Aék;)øÍ¯Æ~õ«¿tÃj=]™xêè+G[ÆH„ìIåê;ö¿ÒTQh8Ú‚áŽœøèâ…ƒÿ60À_®fþÓO)Þ=wîøþ#oŽgçÇÇG>cEf:‚g¤`šs°F&¤N%ÍÙ>›œ´l[`E"³Yþci…¶Ûp›	œÿeC¢†>ºÉîw|=¡˜N½JÈMÔ¦f5500ØÖ×ÁßÌý‹•ØýæÚÂ]ñ"
Ö¾þë-`íg—@3±šÑÕ(³wÊšâÌc'O^ÖÖ¨BmÕ†õ$)©vJÔ@·«–×m¨[^·ªÆXös7ŸEÝX÷›&J,Ž²ãÒ]Š½ÈAAü`Û©BI+ŠÏœ#¤ìüå6Ù^¤{¬ú¯¥Á-‰Ä79Y§)	RÉi+*m?&,Q;è~Ô$3´ÆóQãô/¯ÿÚWå€5¹÷›^ØLJšakgâ';êy m¸—²Yi·5.¬iæÀŽ‰ëMØ:6®w«)œ„fŽ‡m ¨‰ë`4åEBpmüÙ«š¥È]G!3ßÿQ¼¦+=(^ë—G$oì¾Að’áwIƒ,õîg_”Ô3°ki”™9“ìB6&šjwÇ"qÛŽÚo_¶ƒ\^¸±?4FÙý	Çý ±›Ú¾3»¹6Ü¶3 ³oo<ðHñ¦¿îW?¬Ur87È²ÅYÃ/yvk†»üÀ35„ê”îáijB7¥­<Y÷£·.½µuÙVçÞýã·Â&A"©m=½jëéòe«¶n’sˆü5¸º!.Är¾ cÎÚJsÕt©“é˜¥†mIå;â7(–ôŠãlE@0)›Ë:“p×Z”‹?„«:û’ÑÁMÁPª·—ÇHç.©Ùb5…®¬¢†—ˆïÒ/Eëý¨8ºŸ7É#FRóHÍ¶þMM7Ì¬¢æ¬‘ÕÉ†œ©M"¥h6&GÎßaœ¹69‰äÜÜüÜÝ¹¹Ùoúg&gúc©–«7¶«-eñ˜¼éÁ«ÑH¶«¸‘wì©Šì B[¤msÛÆm™BT·ãïÿ§ÞE 5îWµÉùu­ÂÀZ¡­V³¬µÇ#Q3/äûmé¿0~þ¾¸FØLÈw]¿5ÑÚGk)…H4‚ %¿GÈu:·a`M‰Bž\åë0D]S¯¿°i»a“Å*SÈðåw>
^·°&èå{ú¶V2núÑæŸEk›h)ºžD¾ýrQäA*0­õã
Ý—'™;aM'j&²y±X§ìÅ”5üUpšŽì’´¶Kñýkˆ½[Uj;òAj´PÖLÔ÷±n„–q'P¾Áx‹`\VH²·°¦bF<¯UÆbnáº‡s< I” Ö–åË‡ÇV&r…À¨f~1ÂàÆs‚5Õ¬ƒiù3Q2Qâè %kÁýA¥È¹8baíƒ©—¾ô`M¬ÆºW||±2y¼NÙžõà*‹+õêú–±WS“Á|'ÊZ'ÌŒÅ#©lScgC¤)Dæc6mì¬*¶4öÈ·±HÓÑ¶õ¸L=VIt5P@¤H·EcAùñ^9?wóæì±\¾%›'õ4W ò®{7ÓT*—ËBj²éÏvö¢|ºÇqr0U`3w/»ŽìlÜ‡ŒR¬Ü©ŠòÁL wŒ?HÏ€ÒÓ™µ¹#GÇ”‰‡hp~¤§3Ôy”üÈÆFªÌßìo<ròhcçÀ'£So¶ž:uî¤’`_ûb
›™˜™C^›‘±?,&“H,šf*V˜›ž´içp1é	m““×Fœ	<|]È&hsRÜvÀ˜þöâKBÌ¦ø-ØösÇl±™ÛáÏ{:BÛOž|rÝú|gMú?Ô&UµNß‰daŽ¤8Mõjª‹ãëþLþ&VX³ááåö°Úú?Âj<¹«~º¬±Ö
Öø(ˆqÿ
Ö0Ù ·YÃ5a¦Q°–×¹DcŸŸmý`‡¤5rW‹.AnãÖÜ¬¶g3ØŠ4We¶“Ö¸wˆ{€Z  ×^LÍÔ„l”«çAAÆàx·lÑŽGÂµÂv¬æš¬i¦ÐÔÎ´s1(JãŠ]üç)hb.=â—³œmˆÕØÁ³mzJ/f²dsW€œc<¢gkL2*¶3z]‘r5OES2¨¤4Ö,ÀéJ¯îéçvÓÛobpÌGhš<3›› ó€³Eã6»´AdgvM43ƒy@¸fçÄî6S:ÜÆî¶‰Ë—±ke®1ºmbôò=6ÐmÂl÷Fï™ã¡Û9ï|™.8ÜvåÞ9íl÷q9„ÓnÿôàEéK>‰=b›5(`ÓÀ±HÑš#´W¸ÆK¡O
Ód‰ÆV-Ç‡¤-'
×€m¼T¾lùég¶.{Ëï´ft5·;ëþKxAR°f9Lù"ÎhÄ•b‘ŒH ç-“¹öjÎò/cÜ"Øk’žôb5A9!ë­\6#JI1ùwõ!•¨ñ
5Æ©ÖlÔ4î|½7[jbaø¡mW‹Elx¯±|4aüùMôzæÝÀšçýØØØG¡o•¯Âj^®÷o	û~{À—Ôl5ûÇô[V»6ÿïØ‰L^»vÇÂÚÜôÔäüìì•»×æg¦æfvoŸŸ=¶{vfvo¡e°xãF ª%Oµo<Ûøo¿¯ŠTmr…}ŠôÆH/¾ÉÙDF:[E†Û±	.£lïA™âÆíµ;žjo­ÅVCjì×âèBxø·eÚ+8­­–¶6}axvJ©Jºÿ­=¹¦Xs6#„k1~Â¤¦ñYwO RÁÔ§Ý§!'ÖSû½ëßˆ°Ý"’8úKýŸº|êmÖÖ4Åáw•,âyŒ<ÏzõÁšMÊ„l«N­|Ã¦áš×Z“5'ÂünÅ·)©BsÊš' =Ö^= ¬%#‰´FdÍ¾eÉcd)–âû?h­u6vp#&”TñZR=”B7Œ”ÌÉË«%«…‰!—Þmßd¬‡ÒCcO"è.!/†o¶Ë)•hd´“É3éˆé«–(3°–ˆ¯\™ˆ›4ÈÇWWòŒ×\-%²G¦pÙo	/X¦”üñØ[Ï~B®ÄFWS?êó<Z¬ï¨Mëywgäµ†*Ê’!°-,Äˆ|¾!Ê%ZŽvä›BÉ|S¶PÊG°øÀñ£XìÊ·¼Òéz… ÖzºùŠ)¬aÖ{K5)Ò½æý³b5œM>þxž»“³7÷*øúòi(äcd=FRy¾3ÅÝÙlˆD)z"á1S|}#â	”nw5%h¹FåZ”D“±±±£µu…`ßkûkc™µeü3Cf°YOŸHvmŒU4(O2XFçpêÁZ[[­ÈúÚsss÷n^¹2=¬‰Å¤£™25úÛàÉã³‚5WÄÓ,Ì¤Ç÷y*jóBÈ¦Í3ýÛ`6û¡XB$ý¥µjÒö´©i#^x;×¢í§ÿüâ‹/Rÿõ×Ï>KEÛ×2!Ñ¡à¯æBËoªè®àKÊ
òs0ÐSÖä`ýªé³µ/?C$À¶\[·iÓúpM9yáŒúµjò#WØ@jS1›ÚãØk©Ä1c4TOAVÓUôJÖ]+:5S’#A·¨)^«æepŠÛH<½=¡ÉXG˜=t[Ùh¼9“™Ù)Ö¦)¶É—äG²¥k®&äb·ëÛo"ÓèØ(é¢Æ¨ÝÅBtûV=–¼ä,â÷"Ùwì`b‚AnF[cÆÎàÃšðMƒÑØ¶e¢Û¯â)§>´BS›¦ôGÁšŠÔ˜ýEratG=Æ5þ"ý§ß–¬Vª¬¹`tæÿÄÎàˆM?Œ:ü8{àÐ³‡°·5àø ;ÛƒôæÃ›	›)»s­Ó#¬æïÞæ"¸	£0Ü½)ÍÛµBlB²O99/
m–Øü`SÜØuýÀvŽÑN´{›&lRÖ©ÏÂ;Áð}±—-V¶†± Mâ†r<¦ar‘¹à	Ùz$%®ñÄég~¼Ò)kb5Ï`da"äª­R×Ê6dlJ8\ê0ÁU)©ùåkŒ~ùš¦.‹MÞ~:¯¨IÊœRŸŸC˜vÕÕ³–ñ,Ìù!ŸÉ^‹?Š@³¯&IÔ‡R]»^ß™°,„²Ýcþ(»GO[“žÆÁnRel_÷:Mí‡Ü/4ïy}5”Ø®—¨öâ?<o”t7L÷ÅÈlÐ­CC-‡VPS•Ú¤HGÞÈÉ{¼síîìì<LNŽ\ˆìžnÚ31?~óæÌLÿìîµ¹ü–ÛãÑAõ©mŽó¹x[-ÿkµt{›ÜnÁ2ÁÚZùö§»Rí›Á.mÞ÷ëbU4À—¨…Û¶mÜV›É¸¡e÷cu,ÆÛvä6&þ0ŒÉð–Ó¿uñ-!­'dM¡µÔ‚ kª>6ÈŽ“‡zS­fµ\] jwtdhSgÀœ\"k¨¦ÞwÊˆ¬*/?ESì÷oßæÁJk‡´æU­½øÁ?AÕ4u×'6”o²Õ,¯9q«µÎw
‘±¶L·ëK;«ƒ5?×ý"Äñ`d“¬¶f!o,Ù÷/ÅR|¿ìERùÆ¾
°I¥BèEJƒ$)°•œê`Ò¼Éðª®ºÉŸË:³Jy™îžÎC@í¡°Æ¯±r[N¬°h­E/Dsú•…D$Bæ˜xÍ:íò~Š¹/]Ï :åG–ÉZÄP\!Èb<‚	HÌsƒLuºD'l½ø5¬öyÂ%Ât¹Žs>F·ëña…Eû:HØ…h	Þ,²föô´Ð°»2ñc¶I(l*	ol/Ä"¤(]éH$ÉJÒ¢÷þžžWzÆ”{"B8«­9«TdaM Aé:71a5b~îÞôÔøîôÚBï|Á®#Tñ;2élc™mpWUŽÕouE°¡egw•8™OöjˆîÂ8ÐÀZÕÎ]ûÒù|qdÌ£X¢”¨xk©(tŒµ4ôô¤+*bÁžƒGDj=IáWW´G{Žv¦B©ž£H‰€NcY}GÇÁÖ#ŸÜ¼2{“¿GÏ•{ãçÏOO ªMŸÿêüôîYˆíæ¬è3 6>r~vs°¦ó;¥%m„c6[×v8ëâ‰
`V•?„ÍŽÄ…äið•Bõ<äf|A0Ø4%mg¨iƒÚlœ·ê™‰ÛØ	.¯Ý"?…öÜRÖìW±r¿pi¦+6°F¨Õý4Æ^gäµš0ÚMÖ6Ö\„)Gg[°ºb—ÖVzKkN–"4q_ —¹A³D”ï•ŽD£ê¸ˆ–Å-¤Gà³½Ø»=]©1„Ø#°Eúš“&6”(iLSµšõºWP%§šµ’ ×äiÏv×àhÎD©¤fÇûÖ"ûjíóÈìs2ÙFÎ¥Î69R¸µÍ:D2´Êo4é†Ô¬ç’ ¶éi¦¡6„ðÝW€jUE‰jÀ˜#5ÚÊ5¦ýæ» ÌÐÝôÅ†ê†ßzëí’žØ‡Kì 9ÙÁBœÔBÚYíÜQ8äWþ¬d@+ãŒbÌ&^ÓÀtñ8ì‰lâ5‹m„¥¶Eâ²&ÔÑ÷7QûD®Ø 6€mdƒÜ 2‚6ívpg7w	»Ü£Ý4q#§’Ý:»k·Ñ äÑÒ 	ñš‚ñQFÒe-BšÊ‹¬dUo
×ÌÂd£¦Æ`ÊÚ¥­Ë†N{¬†’æPmwùò“XŒ¬‘¯ˆ(Ì°šQ;†ÜêfzY{Í×J=øÎÂØ­„ Ÿ'üiÊh>Ú¯¨Ç†ŸP¥ÓªUT¨­€Ûwð¡1NG(\MB/¯«ƒ;)U£›qèïÞ¹2KsE#§¹€Õ\¸¾× š¢{P’šï(‚¤®Þ´éÉ^”¦†÷íç/ jò.=Œ¦¦ŸP)j¿Õtë¯+güˆ•°ö9èjsúçïLÎO~õÙìSÇÆgfýswÿ<xóîÌ…þÝ2õ«ÈÈnü5Ýý3TÚ¶ÄQÌˆmµÅH´
Ýlc-¬öT[;.Ö¬t€”Èµm¼yìh&Å *“6Æ¤`×â)¬UÅÉ/) «©ÝÚ}^«`*VS{lvâ›þÙ‰™‰Ù	õÆ>K”øû´öm\­½keîŠá5—¿ÊÃ^ð/S¹Ò4ò q[ÓËÉŒÔílNuõ£|YV;õ‘’£ùC¼m×+ë1B	Ý&PVÛ´fM¸ºUnY\¶nHzÜ…­^#OvE	¬qá_ùŽ"îdŽå·EFp‚ljÊf­º–Íþàï–b)–âûÿmK.Õ7À'öÎ>Ij|†G\	v ±„«)cK&:«S‡)Bì¶Ìƒ5%¸õìÿ2–YÂ‹%
¦–GõcfÕã¡@ ^É×ÅAOdÚ/|c—ºä´8¬¬Y;'ÈMöz¨I
	ì(ú‘ƒ5ËjúH¯’j¬•¡ïY1þŽ”×
õñåÐê2Ð¬ºZ~]T©5ÜîDeëèÊ®mäƒñt]ZRjo+ v)y$"ƒ½¸ë§³‘B´k,›&ì7ÕRû=X“ýÖ	Ú»a©E’›™nŸµ)˜#òR¼voû–»s7ÓÍñ8¾–…,õ±x{ãlª1‰ã9g!¦Ò8­¹Y®øhHŠì…Þ”ýØ»³VëdEª	nÃ\÷ÿöZ:DbxY¦Èn•æÌ´èÝè©·¬3UX»:‘mÉñŒllÊ£Åé_¾¬Ç¬ÆÓŠ;«aÏŸ¯Ìîîº9sïæî=ÿ6ñÙg³¯Ü¿÷ç=ãê¬½1ÎîÊ´U7Çlì
ÏDò[Ýµ¯¿sáÐ;–Ù\£6élžÌF¨¢M.$$“šìHã»ÿ¸ùÖBmP××Ä­á¸µ~“UÙ6ùi&Ê””—™Ÿ8s»j‹~Ðš`í§}¬¿¤F¼|é’LFÖPŽ®¶¡zÄ¶iC
eh‰½XÃ2¼BQ¼…ë\c9Òyu
’•‹VE++ãDˆãgÞ”°ñ³žI^S€mìê†}l/
™HÍYöÍ¬£ˆÀÄ2áµÅæ‰½{¡Ä5%!,«ÐNX{ 	ÒœÅküAä=–
jvô íëlÕš‚¶ÍÒ™Î4Â²šø“i“-×kž‰c5i*m»ß  ùj@ßƒZæµ²\)a&81µ¯¹‘		n¼”óð°gÝï»Aê°
'²1(äFb7ÒÎPÒ%µëì¥¼vÛÍôÌíë‡ÐÅmTi2²}gLéÐèXí°ö‡Ä=nj	ÑœØÜ™'ˆÓh±ÍªmfÔàïãœKâJéÄ}tscÙêãYÍ9Œ˜ÉbQzgoá->ašÒåp¯¤1Ãfáúeu,L\(Tî¶³!Lù/¼oÝ_Ò›ðœûIk’f–$Kèû÷sÕM»5u0UN%°Æâä[½óà*¯í³äÕ)¹.†S•ñf_¡’§ºY}e²N^ƒ¡rš*”^§ÞØ€\žjà¬&sþAÓÿÚsè¿T¨¹°¨æ•©ùŽ"ÄúMd?âýh45¸õiùñŠÔ(>äY?j¬„¸‰ø.ýúŠH€íÎ$°6wvæüøÜŸî\›è§Èú›s÷®Þ¸wwbxÏÍ=]‘.Ô±l6],Öâ$ÒL’c”:Ó]µÍÜc‰gíµ¿ÞÕdÑíºyG3ÊÅ*êÒ6·CimµÅ^uÅTBAU3 ¶­vc¥èD;ÚdÃk®ÇšÎødãŠë½ã^<v¬bfŠÂµ…&#ŽÖÈw0´æp­3EÿÒT°²2„Õ©¸â3Î^¸†°ÌxF$DOlƒßˆ¡$ÙN~¢6~Ì˜¬„±FÏŠÖI{ÿãGJƒ4y¬©èO>xÒöÆ­mÀaD3¶&†iP‰|ûKmEu8×eGú–‘ºTØ©ïéÓZ.ÇnC°fh!»$­-ÅR|¯ìEr¹Î¾Î¦lª³k€-ŸãD}Suåk8U™ÄGÁZVájSí”wVLOI(ÐÑË_æ"Ô¦	Ö*Í›øV@YKÈ÷a-!ÿG±Z<ŠºFÊøµz=ë<’›M‚”!$´†bSK¼)…ÃDJ}±Qµ<]M°¦Ïô¦dì]Ý;—i¿Mûø˜˜¿ÝÔªâžYe½i]Ú—DW«¡9Y>Ñ„þ¡fY¹”ú´D(unI5ÅiîîÅr½H}#È–9Qâ×onjXc¹”·0A+îßZÓ-km"]åqæf`ïÄÜlº9Ã)äñÖ…b›äð'òÑöµ¸¾³hå‚Ál¢€Ä`rE8eä©¬H´yÜXËrXU%?ÁöO’_Ò·H¤æ-F1à`*8päµÖ®––\åJ¤CJðb©†|e²ú`G“È¾`P¯ãÕ¡žHNC9ìînèè›ž¾1FÜä¶êé¹›{ÆöÌ’93N¶ó3WvOƒi¶¬	8VÊl¢6M²¹’6¿UÛ;&°ŽôBI: 6Â`Ì­‰Ùžn)(Erq~\è&0W¼*ÁíÄ¦'OX±í£S[!8…ž<ƒtöÌçÖøüFÙT¹fYÍÀÚÓ/Ï½|òäI\—µòòjÉk­ëÃú‘ãÎ#,¼áU«Œ+dØkÉä
ïÎfŒXƒØèË'OÈÜ2¯hSà P„ƒC+À!g@Mæ#[\@k7^"$Á  Ù†O3(„i.Q¸Á»Ÿ/Pea-€Ì&XsR˜ðÌŽÒØtv¾²æ‡ïéžu¯®™Á¹ö30êìÑ˜=Ãjš©M¶á3Õ³‰Þ¶9[H½RVþ6˜ÐÕ
*zÙwµêï÷‰Çà˜õëÃÈ‹eíÃúV±‹iµÒppfÂb›µ±»@Í‘[I¼£ƒwí‡Þ¹ÎÎ&&[¸qíÅmï,tc~[Çäá¸æÓ¯Ý½=uø®Ý¦3üMƒæšÞãì0–nþ “!7öÿ×qÅÚú¿Õü¨$À¶Eã[%jbÌu!JS*$®"$=HØ‰ÄG.UsÆ´Ú&A^ú1ö"[9¬	Õlø°¦>k[EcåX¾®2¥Ø\9SH Ð›óÜ!ü¢‡Êk+ýù¬‰¼H€ÆGfÛ
#ªÕ']¶cý@‚$ŸÌa³ê>JÄU
E:Žn1;»—ÇeÕ‹ù£ÔÙ 5‡j¿á(Á4¢Ôþj½]š}_ûüågÞ~[ù
¦î’*¯ëpË Ù%6œ“ˆi¥6IÂÄWw`´ùy\<è 6=ù§I
Õ®ÍõÇ.L÷çûÇç'*¶ìÉb!ÂbÕ”oÄÓqßŽBÛŽ6:[o„ÜäX8‹Ãš3UøG»ÓÑµhñh:hVkŽ¦Ç¤ k°Þ¶mñBŒ7HVÄvÐdÜ”UðrÂ1[{³'¯E÷R,öOÌ_˜½ø¾k·ö¶³„ôiÍÂZÐðç`ˆö©
S¾V¯6®E¶­W3Ü®Ï$²ÕWñ<æ|ö©­TèN©8°®k§ø½-®™,È÷àÅŸ«òZ°f¥µÇS¤a´õ¸BÒæå5•°½Vm~·zÃtÒ`.ÌÈ@ðÁà Í»dæ``â&*–ÕˆœÂ§5¡šˆmIZ[Š¥ø~Ù‹t™Ï“IH[ÉSÜT­À¿¿a?aBBé!aM‡X>õ^¡T=£;‰ŽÖ¿Ñtø°¦š®!ItAjÖxHlI€GdAR¢–#Q=±°V–H`6RÜ¦hÍ#³-8sì?*õK9û!'`M°dXÍ9A¾ôÞa“úqö¬ñbœŸz£ÿÂpe°ÒÀ.	Õë%) ëèlÈMjMkÂL*…LÅÉ´gèá™Å‚kj£³ôãÎ’û˜ï<Âš
æØ”~g¸ÿé/ô{«H€»™,‘ÆØä«àì–è±ééþh&P@ùÂc2^–£a\¤¨äþ@{{„öÖ¤µ|K#uÛˆÜºÜAV{Ô4UÔz©cì¤4©Ù˜À×âTAR]q_·¤±±¦\¶íîèÈµ¨,­3´R	H–”Œ:O©_ËW¬ (Æ€dÜNZÆdj™NcxÉtì“ã=†Ö¸“zsöÆØŸ¯LÏà9£$I¶™‡b:áM‚ûˆ.3’‰w999Yâùo}H~G¨÷³ûGªÀ>RY«ÊŽüRá˜í¥w¾Ð:Ò´i´v{\¡ÌÓ¯_ü‰\8Á·WÏœyìÙ¯W_rŽ¯?¬YipÏ?.ç~&¿xÞƒµg 5™Œ<{æed¸ÇÖ­ÖÖ•¯Õª)]Ãg«ÖTã°FÞÍëÊ)ZCnS¨ê¤^?Óy9÷+¿—ä4ÈÁÍš\s¢¸Bš®ØÑ¡¡•eÑZ¥µ2û­kª93I“àh`íÁ@c³!×&’£¹6°%]{?¬¨¦Á…ík¨Í•§q6›l¾ÈæÍ­ŠÆÉ?ZdsW‚5	Í½3¤ùý¬Ô˜ñˆ‡r¾efËv•ªqWƒã\RôHí/Ú•ëø†XoŽk²¦§EkzXókÖœ®æW«±kp¸&Rã JI6³”FpÖÁ^ú3b3FÍQœ£6N‡t¥Ó»¿™ajîö]hm†ƒýîÔÜQÂk:é±iÓÙ¢š®Ü6qW—÷þ&RŸ1õíof×öÿÜ®û¯…µJmœéŒýÐ(5éb($5)!Q¨ÔÛ£3økIÙ@ò¸>ò2K2¡!¢Ú[Øòûö"DiÍšÅµ/_^N¿59ƒØJ4¿96sSÅæ£š	åÍ‰Øœ5$O+]/ìúe6Û“ER=oLCý™’F—C›áË™¾ÊŒ5ì5A¥à/ï+ærÑÞ]»º³û^'vît¨æ¬úä>2<Hj.ùÑ¹ôKS3Ž"Êê¦G
Î»‡=Ge¡ÈJDÑö$z»í>«]Ãëñš±ð á}jd~œ7›{óS'&fg3›÷ÛëŸ˜èßœ!q;ÝMrcC¾Œ6ôÂNd$¢áTŠ5GQO×Úf-Oµ–lóæDë‘8‹ª\: ¬ÅãíôYkÃ2çëf°÷×Ú[Fº~Åêûò°FB9ÂÚÞáÙý8vqfdf¶ÿØìÙ§.Òí¬´lÍfBz¸_R
]‰ÖœÑV]½Í’Ë¸tÆúÇöþ}‡P¡òl,W~­I•U[<`­:Œõ÷µO½7zH°F5‡ù# kŽÖ€5â±MÆ¯¿õÄ¦êÉå8Ÿ ÎÄU7
ÖüÄG_-SX~cÐ³–ÎØ•Ü1 ‘Öä1âKk	)k^&dÓö¥ÎØK±ß›øAµ¼EByš‰ª·Tµî÷%“¬0fíÃ
Ií ©ÑQVõrk«Älê£ðPì»aÍõ¿fæX-ï][¥?˜ƒÛ¨#–;ƒ¨õŒz±˜î°IWSÖïôûp%ˆáÌúOÞž2‰¦`ª±³ñ¨…%`­TWûRûñ÷@ÚúPÕäÇSÿƒü”Ð2#V—™;¶òž¦b¦àõäxÇ³´¨njÊbyúi"’äÿ{ç×•¦ùý¼«Õ|[É¶0ÂŠüÅVá.Y™
%º¦ä‘««€Ri ¢j«Lù0*›?vŒ	ÄŽ“Np”	;›&Ù‹t”Td‘4Ð6É`á‘Ù&vÿIƒ˜FLlÅêXLš´4Ê¶´¿çœ{|©€3Ñ~ÚH¼uï¹çÞ®S¿û¼ïó†³$@Nµ„²ÝƒU ÑþÓƒÉ$í©ëÉ®hf­Ä`ÄZœWƒ7±YÏ¿e`¿›z5Ó
X›_^žÉ%zggOQÆ+m«£àeZh¡L(½38Ø“Ìód¶1–KUíOçIéâ/ÆÒ?ZãI{ìýkªÒÑ „7L–ÃÄà‰³/ý}+aØ=•ˆÆÎ‹Å3íçH	‡Õ¡¡¾¾Q
* N6™€¶w´Klkž¢)X±b¼h4	¤õŸf|‰½P¸ÙÙ=õÉ•ÅeêÖ¨2g¼&gÃhËWMËÔÅ¥•	ÑsÕg¤Ö\+ÖÙl«¶¢Ÿìþ	›©ŸÜ+ÆˆÄµÖ´yÀæS›
]kmJ¬C„éÚ³O[jû<AÿûßÝÀ±ÄÁšµ‚”´Æ§ùÊÒÚ‡(k­=ºWù{J)Ó¯@N«Ä¶iMå›ÜU¥ÍZµI`)ÕE‰ã&Q/lš¿“‘H0˜ˆ%ƒrÒ!Ê–+$°Æ1³…ßvýØXz’·û‹ÖÒ¤õ
¾Ø	'«1éàåCº°î
ó9}Á€<!-¨±;Ÿâ¢5üŠµbbs\¦pGGhUP›=—©£¥1BÊ™hÚ5U¬…5Èœ§¿Ntî{–èÚÑíæT´¦>mP(7x¿åµ-VcœÖ$«ù"$£SÖà0?Ò@š]qÎ"k ‹9mRCÑä]7ñ¹ÍøÜŠ$·KmŒ.V¼ÍÜ=¡›ÎlÚ48hsÍµ}i<þ¬]ÃoÄmæ#fþüåo¾üòK0Í2G÷àš·qögvÿÏ
ÛÈ÷Ö>ß°/öö¤5T,1›ÂèVu*ù’–¬YŽ«6.þ&G_oh¹`’ô=×~PÍÂÚZiÍ·îÿX;µm¥o³ž¦@Í…Y˜œ3$'ži £c5}°€iMçä¦%¤úsëm¶”¿­&kCÆ]ü«ÍÛôjzá4jZ0ý=þÚéh!<n-D”ÿh»^J;±NSó9° 6Üx†N&Õlçk£©éÅìØc€aR;ˆÉI!c&ríú]×õš
5ÜúqæŸ[^YœžX™YZš›Yå•ýÊrŸ^g†f‡ž*	þ979›hÖÖ–<[ˆFëC‰`%QV©t[9}wPÉòñ¦É6Å›Šët>šÊ,oø¤tÛÁ£Hk™úwÛŽTÅ©S;HŠäîòÉ‘Á`*Ïï–»w+$@æñT«5îTFreåŸŒüªld™/rr	ß¥æ~4g¥5¿lÍÓÖDka½ƒÐÍÝ6Þ®ëHi.¶ú°fD¯jÓq}Û/vðÃªÑ{!TËa¤Ž×þß_»0öþ›Êwþ5¹RÒkÍ‡5î>úøã¢5ÁÚ>2!ÅÒÿP#V0¿º¬Ù#‘s{F¸‹k‰Nƒ}VCQÕšlËŠÅ5%B6yÃ¦}ÿflÆÆ^dˆl8`- Î³·7’“ÝXÛz®]SE¥ü¬ôòQºo_eÅ¬F0Û2®ÄÊ¿WN
ÁúéËeë:™ÚgÜÑ‡5|3b!÷ÄVÂÂZ,cŸÍ`ÝÉå"‰ø-fÒfÌ»\#§Ane9’íI(|ž0Æ‰Iîòì7‰ ‚µ§Ÿ!yN°f[¬j8Ab|ukˆZ.91aÕl/ãµ×Âm™Dœ<Âþ¦æ–¦LÍ8Ã-‰¨h-Áý>›DV«Bë(Ëe)­½HI˜éïÆšÉÝ3£ì°\ZV“¢ÌE`µé•e*’P	Ã##Ù˜ÆÅ²MÑ<b"b^4¡€xˆs–¡²%Š¤Ó”°ÅVhŽ1ÎBÉÝÌÓ¯ñXK@µ`Dm½ƒ'¾Æ¬€[%½@§ºS9 4T–k:#d&ÖÖ·t´Ÿ;ß‘­Çò`~îõsçšã‘)[¬škQzšº_Âüä­ Ô@!Ò·|çv²óÎ'wnwwÞ¡9éÊ•åå%R$—Õ”^¥‹w–¯`óï´4Ô3#¯±)d	½`(nm«6üþýöÚWUÔwëÝ[~v¤íÑö‚Wh9ì	mlO>ö[WÑ¬.EòÆO~òŒXMîü:h®õšƒËoüX{Æ£5¥A‚jk¶I÷‡>÷äs'»J÷ØÇ½ä°”ÖîÝC™åj•¥µ{öí¡Áš<œå6"ZÛ±ô^qeŽa6Ì`"IY?R™	ŠÖøjˆ&äéª-l¤“B{ikâ.Ü	?ûÑ?Š$F¬ÉˆÍ Ñ™î²‘@I7ZÙA2¬­D¡ù¸%lSøÄægDúÅk§=XóQÊ=ã.yh&WûÙVb³Ê¡s¦>¬yp¦H]êr¶ÿ~¶#ÈoÔ¹È»Ä0à 86Øi	Ó]íÂá2£¯‰Ö8¹0Fv$Ï	Öœ°öŠ(­8RçÅõjl.Ò±š Ú»lÈ¿š2°qaB»žª½ë£šëã7YÑ›q\£´¡¬ÙX’Î¶â?,¢lÎÜáKíþhŽ3F`Ø„kRÚÀ2&Þ…/­ÈÆÀ¬ˆÜ4rý¢“u¸ö«²õ±¡¤ã´ï†5F®¥yi‘l’±˜rMo^ë¼kÛô‘<¬>†®‡É_DÀæ¬ }‹'¬Qz	Xã³ )OZ3ƒó‡djYM_ŒÈÌÑÏ2Ø§¶V{}mL=ž)ŸÓBÂzÉS°2Ma¾Uë¦§ŠàŽ÷ùXg	­¤9K„‰Â`£ŸþhÍDÌ¡ÔˆûÉ­”Óx<Ð‹ÞóÏ£©y6ýos+S¥æ•L/áp—¢}Š9?baáúÒøø? @øþkCã3‹Wp->¤§¥÷P[jwcxwy¶!Ci¶!Ôu'†jrùHÿ®GºòÔ›å°„¤Ô´-Î±-%wþ iûƒ©8±ûà#§•¯ßÕFSì®¶|jp0z°­Šj^Ck²Š(A’;³ÌåÔ_žÁ1.äÓ9¥íZ¼|w\©e#‹K`çäâòüäG³ã3~·5ßdÄjkaZ¡z&E]À¶u‚6Ö˜Ú°rév_´ª]×BÖJ,¦qä¦µ£—/½óþ¼² _axûùA’úqìwEkÏ¢¬y´fûchmÅc¤µb×.(­š1€~};8hcà„ðÁL»ÏmÚ©sfâkkë¥µD“Åµ&³'mvÆÞŒÍø¡kH*íÐZ£@­±¡Q°¦kòÁaÿGîZZVC]°îÈ¼`!¯m«Ö2ÉrD8óbÃ5‘[ÌÎÜµÐZvÛJ˜Ù1µÇÛŒ»ÈöøDÒ»„.Ø‚5ù@&ìíÙ8;ctÂn8sÞÃµ¯Èç!¥F:=Ÿ“»XMUM,Yy°,±\±_ýŠ4Èq^¸¥šqàßE¯L¾Êù4u5õ¤d±ühiiIä,kì˜j¢Ï½±ëy*Â»ë*IY&c1ÒÒÿ"žùæîfv]­Ff˜>©©êÕÄj‚5åž¼;I½Úôär'F"H(—k
••Ää"B™LD˜Ù¦HÛ•TÕ`¢¤<'OŠæÓ§Ó4ËG•\ åM+¨¶_rÞ#©t*AbfTßUo=b°Peêå1‚DK°«%Ï²`±Ôf‡;ššú[š;ÚÃT®‘éØLNñÑd·áµdPÍº *Ø&‚©›Ñyûv¡À[ä;Ëôƒ’½HkK½}ŸÜ¡¦IXLÂÙ
‰’Óš€mÐÚµ‰k¬qxã(˜»~ýS¯OÛÕ«Ó*ë“Î¦úÂûÞ‘VfÃ„ä}çöo»*äDò[°Íq©Ž,–zëOüüoÜ°nÌÁ4‚àV;Êš]Qû¥÷“ Ÿ²°¶¯7‘R5[Û·ûþ]Ì«Q™ÑÙjk÷UnÙ¶Š+Õ›<]GxÎfX%éô€’&X*¢èk(j0vtÐhiüûex*|¬@ =Ôiµ5Œ5„D1©1c#?ò´5íš¹øÕç3¼H™KJ\sÊš³tô ýžØâ2;7“¢4Ç5=±}K~¿+¶«}³Ui.‘‘‹‚7á—¦z0qáÄ5[½ÖÅ‘s÷')ºÚŒe$ƒ¾lyìçÿÙMâ¯–Íza59@
ßôýR3ì?»0Äôö˜ÕËüž¹HÿñŠÁµuºÚ›~X<ÓæbÂ;Zlã·bÓÀ¾ª	äÆƒ_ÛÕ"b[ÑÎJÓÎLi‘ÌÖ<VØ—ìÌ ¤æ?îi»'$sþ­	ÕîAk÷PÖ8˜¤ÅÓ0—NÁùŒf×cÙ æO|XûüûÀÚN#­qÐc^[ï)lí½Xš»^^Çµ:ÑÏýÈ¾}ýø‰7ÓF7îuy÷qÍ‡µKüw>¼cÛŽRëß—1*œ¤µbÈ-„£5+lˆÎ ±­ž¬Á“ú:øÂà²­Ìô^¼ñÐêJa^sA:ZOwEíY²Ij?}âŸ•ý¨5…¥4ú©9Aí8ÎÅ¤F•šâu¯@û'?øàÕgålû¼l”ŽakEP.MÓfKÉY0ejTL›;i°š8íÚä¥Æ«×ñ|\]X]ÎÌÎÌ¯®,MR£ve<Û1»„¶Ö—:ª¬Åd¡*/+;xôh4žÉ¤pAïÊ5¶— ˆE¹=„ŽÆ"…–æe"Á-+éH×~jÖ(ïÎQ…–Ûmª¯yþŒTêàÑ6Üeæ…nLÿs Yþ`~ÿ~}õi«H³1lûñCRƒÓâ\¢Ê{·5„œ˜˜™™üh^¬&iÍ•­9Z«n'¨T»kúù„êÚÃægÄ®m+»~“5M•ÞN[lD°jâœI#5ÅË˜dW‹ÖÞÿòG}a¤K@äùk_„—ù/?~|UÓÆcdÏžŠm[ÏUHdÛS*ùµšðT<k.Œ½‰ë³.œ æ³Û:Z‹}«jnk&¸•¸)­mÆfüPìE€µIk8
Ö”YÉ+´¦* r6´rÉ\¡‰$ä6BõÄVGj†5ÿzì[—CÂ5ìûÍš—åµ%fÒÛcj1«±àq.:SÑ.^Ÿµ —)KH1Nq0ÜH±Zÿðy…`Ã£°°æá’PMN7ÁQÖÞýâÖen²eC5ü³má:k.ß€õ\gIDPjiŽJ™BYCxj©oî®ÏÄÉ ÷
ÅK…©~ˆæËS=/žé6Þ"Ð"Âšª`5“†bYMÎ&·V'Ðô®O,b=
&³åå(g9<c,z9:¸eÐÝæ²ñ6D,röYAîSk`Sf7Ê
pÑT«Xé)É.ÉNETcjfš$é$“M¼^76æ”ö±=VßTÊz,Ô>Ð^–oé¯7^¾MÊã?ßQo{ã+„Ñ‚L 4ÝêËÝSØà#¢¢h·Ä‚…›\c+$û€5
ñ„o‹ ÛÊ}Ú®,^Y’Ê6mO–¯8#‚ÉÒÒõÏ¼ùÝÏ>ƒîu*j37~¥A.T´Éîß8G/ß¢E›°íeØØuÜööÛ)ž”)’ªÔ62$%pjÂÑ´Û&t¯]´æB~þXEÊ
òäÞ“Ï#R°¶_(mºÚŽ;jwiFyÞWZ
md`©µmi¥]TãÔµPˆ):YŒûå›“à'¢F±ƒêknZ¬äúÖ¼OãIBÝ˜È$A-à£ÓÒšƒ5Žf>ôpoïßüH°ÖwÊ¡ÜÐèMˆyøáÑv0&þ„á/³n®€ƒüß
ÒL}‚óaÍO’tWØeùyŽû½ÙîÜÌÌ³4ïpÔ±»~HÏ$Oú$—àxŽQÛþGÒX÷Ã·kZªÁj:ë¿t‰THN]iß…±ããb¹Y#˜±;T³apÍ…5ç)T[¯ª	ÉþHLhvkF[}—Ç›«†ÝtÔnl
ŽB6mn Íìæ†{b6bž]Ðv+b53]hþáKv°›–Ô±l<é^³O±Ac‚7ŽvtCñÄß×Kl™A®×ÕŒ²ö=Œ ×wÃöHLsVmÓ
T)ç{§’¸÷Ú‡¥ª]ÕÐ×v]ô¥µâš54·Ã¼×=Ìà4vç¶û5#O¬o‹­ùè¶Sj!‰]Ã![ Å$]Ôun~âO‹ßÑÒQÙÑÝ°mkòÄñ©nÀì¡þl}KýÙ×h—Fyšš©;?žð}½¦×~î£%5Â–©©Ú«ý4&ýz“¡ñÇÿ¯œ-?ÒÔ”®]±ÚÒìÜäôü¢ê—VW¯,.ñâKJúÒÊõÅSá¡¡™•;)*Êd³/ãáƒå»Û½ãù®®toFàŒÖ9Ù¦ ¹¬FÑµæ4Q«JµT¤SZ#ñSK/W/1U§ƒ	t4î‚Râ†ûH„>%‘h*JÉ^‘]é¶®®6=/ÿÇ¸Šbå© ÷jc¡’òLsž”Hn[k°Úôä"âŸl…ù'kEek¢5ô/h­+gŸÖT¶ö¸ßµŠu3FÇ=µ Õjõ·YF#ø…à„½â@kåèåw.óCÃZ†?}òIÑÚ¿{Þ£µ“”>¿gaíñ}µ5Ûè„Wç®mò è¶4MƒÓÍ€újNMÍ6€µõ±ÖbÊ„,r„ô{dCnÿe“Ö6c3~ñ_{õ
¢ud96Ê½=\Ó> ®IàWm¥q-æ¥¥‚(î>™Œ Î8(¡ÙƒXÍ8ûg³ŒEÃ®ÈØ÷«ÁZH]„yƒâ<‘aŽ²Æí9Yë¢žyž"¹œ
ÕrÀZó’øÎž¬å2¡¡á†\<1|æ<÷ÏþMá¼ÿ(ÃÞƒ. >«)n‘¯õê­™¼Çm©k¯Ñ],*ðBj‰]GŽJ{åöPs7t£œü,ê–‘œ’ÉÁ*ÄMÆ³81¾¨Àò¥³/žiP¹œiÅíŒ ŸYËj/[È¯p6!i°“u.˜LÄË‘eEQBZÍ+©2;[hJÐÔX#ÙúËU¾
Á¯ã'
ÉÓ4
$5Byn˜ q«J¥Ê³Íñ‘Ëu'³õ„¹”
óC&$VÕ'HØÌÖTŸ;3\ß<5\ŸÐ÷¹¡¿¿x¸¥Z“šF`t)XK
"5vX¹Ô5FˆMAõÚí›‚5Nuð`í}ã”ªÖMžäòò²T¶+(kÓÚroï^5ÚVŽåµéËó×ï^ƒß„i’ØxAh¦÷Óp`°WÚônÃäœj“‰ö/m^›¶wÞÁj³½Úl¨h­Mñ;™ÿÖŽ)Oòéµ´öŒ_±†°vàÃcŒÿØÒ	Ô¬ÑÛhk{ZP'^Q»VCNã7GŠZx+÷ÌµZªûC¢9¤ÒuÝ} ÇÓH `{`Û*ô´A.$L¡!ÒšiÈ€…5…ÊôtõzÁL] ûO‚û)>êÔ)¦§Fò¬D7ÎuêÕkÍË‚´›ÈüÖØ–¾ÀùOùSÇl&4õåŠ-"á/!™Wãæ·ÃvOš3f¸	×$¬Éê_¥+–ÕT'ZãTcU´³‚›dø¡CÈˆ‚16,ú/K^Ó5óo\¿0Þwó¶gÝoxÌwƒ´aæ~8]íÛ²øµ&¦…cØ˜j i˜ Ëˆ[º&PcXå`·[Ì-«i¢m…ík+±1¸]¤ÆÎ\ñ›¶¥{+÷-¤)4º(kŒâ0fz°iÎ®)ÁÌ
'¾ÙÑáššhû6²}‹Ö¾‡¿ˆÂ	k Î†¸¶1±éÿ’BÐ¶H“ÞËÛÖJ´‰µ¨&J*ýø‰Ãþ„…µÃ~¤ÑÖŠ`íÒáÃ?>L¥`MÚÁTŠk­Æ©.3sÁ‰Mß×g˜UO=Úì2I
Ô{pé~æÏâ+V‘QÛÐÓÝöµã5¡––~`ãÇž‡j²Ç™ k^XA­ØùÑ5½ÕŒípëë¯(‰£ÝFejÊå~ZIÏSëkW§¦|Ô^[yæ×I¤æ]Õ©­.ÏŽÎN\›Ÿ¿2¾¸8=q…»×ï®.\_]¹7›™]¾3Ô™nËíjKÓGÒÉh¢lw×~ä¯¿mckË• rå²íAÁ[*Î-(•åÊ’HÓ=’.÷ûy¥Ãä?®¤HÑZŠO=JË5°,ÏºQž	F$]GwÑà;Q)”ªS×šF;Z^ŒeHAce9µ¥µ‹Ÿ#_sFÒZq·5KkzËÒn¢NCX"[‹¼5OÌu”æÃšvý å8")`›Ô•Ü—³^¡5ØcWV€ß£ÆÕDk¯ürìg/Z~L†‡îåÞ/‘½;i:º}»¼×ZÑºßbýú2n“Pÿ)<¼Guã-‰ƒ5Å–b!m=»ñp°¶6ÒW×š½‡‰ÿ¶iß¿›ñƒÈ‚l¬…:ÏK^ã=¾Ôªµ«é‹‡kd–/ÖnÿpT[åáK[³kÔzX+vñN[ÊrÉÏ(‹'¶o…Œ3dL.Òç	
Æ07×â-È¸ÖpQ¸ûã•‹§r\Ï9ÞŽ3ÃM…Îœ!Òg5–//Ýd¤¾úŸÕ”
¢k_ŒÛ<Îºj³¼ÖÀká:àm{,„­W¸>«/%ƒª–ËQa¬ñ¥4ÉætSÛÕ/^{éï_<#V;c0ë&šñ´°¬ö[ÇjXPâ¢1¿<~§/p„û‡N<!Ñ#ž'ñ±pÃ²u’³ŸN"Ð"—'s„âmú×œ<ÍrOjJ…Äjk0¨l²â
²¶É9ÑB¢f"ŒÂjh‚!H¼¤¼,V“‚ÆpÝÀ¹áþŽþ–Ž~¾ÛÍ °V_ßÒ¬|Gª
JdÚÒ‚eOà¦ôGHMÁIAtVÅ‚yÁD7_vòö2í×®ô©Í¢žI ì†8ÀÉk‹}ÝS½Ø’PÐ63/7ÉkÏÍ\¿ÈÑˆmr~RÌf3sîIrv©Mq•äH²#õöøYÄèFñ¤ M.$‚6ÛëF’.Eò/ê¬­àN§·cÏÈù_­ÚžÊ8‘ˆÖž6¦ÿª. Ö¬°F|xò©·Ž<ðáIDe„eÔ†£iÌÀ·jÂd—ZÊy¾™d,¯<<›Ýº-’ÏH$HPxI_ý˜”õ(^3aLapƒ‚5UáUaGR°64Þ[kæÀqH©Â
’cæáQKN»ÉpH3˜ÐÊ\vcpg„(ÌÁ–¥5ßŠd4îgÖ¼¶§À–×MÍ}¢Î}GMº1†#š³Vý¶Và)Í}iÚÒ·Î¾Îª#GoÞ4Ë÷0#—j°fhèºtahh\ÒZŸ`­8²ÙìÄÁ¿^Í¡ÚZQíª}hX0Ú¬º¶ `În7ƒlf`dxS¨æozhXaÒüMh¦àèFÈFS¤K+n.¡M—Ö£ƒØ:cÆ™´7–á|lÓ„±h`gÛ8Àù¸vê{eAò0¡œGŸÐ¾[\£Õm³zÙ5¼ÓæŠJˆtÛÐúx8Nƒå°ï(=üðÃš5c#òNXS˜‚56€m‡gîàgA*-Î	jºªKkC_‹…5æ:ÚçÕŽ«0®üµ²ÖäÈ…ƒy2‘¹Å®ï¦0­^ö•=LL½ÚÙãÿ›™çý(U\SMÔ|ßÇ—já[+ÍXÎíkÅÇêÑÌZG«Huõâ‰ŸÛôG^ÕOMþ7ÒÔøu½nLúm¥ÚÝÉÉO™|5‹Ï_›žZœï=5>>;¿º´²zåNß©Ø©ÙYrK‚ÉHþhª³Ãu*o¼‰Û8´ÁfÈª+XNà‰VI(WÅ=§Àiª‚)ÏkDKŸÜ%XXíhT–iIF2`\€ëXŒÐ–-€å2Yäs$>Âh	BõüZÅr \.Þ9¾Üwj‘DÈqÜ)Çåß¿.ÒdB:Zk4[ûãyÕØk%†´µ¥AþÂc¤m;™jµ•Vu^¬)×è÷ 0ñXeõèÏ~cM°œäÓÔšf2ö¨j­•}ß¾Vl­l­ÔÂ€¾Í›p°FÖÈƒ\ŸéG6‡ka¿7v†Í…mM‰Mim36ã‡`/Ò‹d,Û(ki/XöÃgçkäê5„E±šêÚRið¬d2Á39²C2ÑŠâEk¡-Ù‡ZŠž ã‘%¢qÐŒt1¦Ù-;s=ÍÀZ‚óBÜóÞÊåøæ¼j³Q¹†Q”nÑ¥‚×ôQøöêJ}^žù¦½Öïþhp‰ÅëIî1ªm—‡jo~që›oæçWoÍÖ…ÃºÁ&D+)Q½z(K_5Óˆ¥,´¥d;ÏÆ¨pNDX«ð.Wš"yøð<Cñé+=ÝÉ©û{z^Rñ ¬&eÍ4¹Q¦ÏjZ1¿Q\fi‰ iä‡°Èé}{Î3ò~L™I#Ø<vs=šVÒ\sCV°¶?Oaõ &@ÞI¤ îÉ…ã¸Q`8’
 lá9¢å3Ï-K	]*¨bå†ãHO­’ô(/çßY×Èkx³üSbÙ\IÇpKŽš@Z A“j™ðTOO/ñ>­¡´é”ô:nAÍÐš>žáÎâ•Å;·%;ñÇÎd²¥oqâÚ•¾îî^Rmz{gçææ–—ç/Ï_»63·4½:?vyrÛ±	9CÂj
ç?bÈM®c2·-@Ùß\Uïìþ‘Ú\U›s"qØ±IhÓ]5Úž$ò˜5ŽôlþŸö…5OkÎ“‘'?<°£vßˆM¬F¿µZ–~[®•îªÝA%
•lhkj•4Ð.™ÖÀšîÒ×e#«r›C1•«	®«¸ç¤‰lk»¬Akƒ:J5ºM"äÍ¾Qu+
ÈW1äFhMé˜iØR5µfãq×û´§s;÷["ss=tp åXÍÚ>eMƒ9z¦ý:¿,œÙÏ ì©k¾s?;Ä¦™ Ïs„ìòÚ²¹ÎØ<áEšB îì$QJm±™™ÌPÕ®Ág1ühº«m€Ú…±1éui&˜û]°Ù5xÏ¬3‚\‡j@N»z?4ÕÁn†×DlÞÃnì«”ÿ˜ƒ•Ù@3ïèÇŠw`ã„¾¶j¶CÐ&uMÌA1Žl„Ïk.„hlÞæÜ\S7²»ÑM¿#|\›ý¼ì{JkJt®Š&¤o|7¬I¡ª“R§¨ºÆöº’$h¤÷»zç-aA@yoÎìŸ?á¤5y>z°fp­È_D±Ol?+a™y§¬çfæ·^#Šª×ìeNð4'¥W~cýXMA+†\•<³áÙUÇêÊë†”¶ã¯ï9?P½-§¾ f$5¯PV+5g'R_OÞºµèom%ƒãä³¯Z~Exy{’ðŸ²èØ†jp„Õxý”¢†é£Òñ¹Nf:ièŠäF'H…üÇ¹Õ™NÖä†üä“Å{½]#µ¨V‘,8¥5…W0JÕ´zi­IEéPW‘i4!‹æÊËâiþ?WUxÔåî–de¬`újÏÒ]Uè»Ö€µ|¬‰z€L4ÅÇkD[•|—d'iš­á<²;FäœÇs°Z‚Õ?Í—Ã²Ù¹ˆ¨6;»877caÍIkÅ´&\««¬‘<Còí–Öv&Åv§ÂåAº–eæ—0:*ÅjâoƒOVÙµ¬FRãE,ÈÍûåhíï¬ùÒ_^Ätý¤‘Àãï½WQA˜=üÐðî‡Ük {•ì3ÓkILF4àx¶.¸¼¶V\¶&5Eœ–Ù”Ö6c3~0k54 [ÿç¨\³M·XúT¬Æ«YéÍÙÇ6­VºÍ´£´Tímèâ/GHWžë‚ÙZX‹eCî	!M‹ty'µ)û‘#¢U$œ‘1Æ	¤’aŒ*â%v!g0I¶V-ažâUšËÄx6”…“Àš+XƒÕXÀT±ÄÒ¥d`M=Î>š™÷›¯~µen®º,SÿËr*vJxâv]†/ˆIŽ!‘ÍrÅþaŠ“’4%m/mnRÍ4¬¦ÿÏÔéÓ”¬Ù–¯cÙ/X³ è³šµwWÉ \Z‘`ª-M:‡ò«R9Ö«T:ŸŠàHìB·V£Àéª|<Ó”ŒæÊRäíW½vÂø§òéTs¤
X“ÁH$	‚­"©Á@šj‚TZÙt}ƒà¯†PÙî²˜ŒZ@ÏÆpS¤¬|ç–Pƒ«%º±®äÕœš6x0- ã%•èáÐÓÌglÝšNlª£<FDeœÁj.û‘2c4UlI0DŸ$P1ˆ­ahqÉ?ü	 ã££só—ÇgÇæV@´¹™ééËµsK3*hŸŸœvÙ¬yñ)ò#NÓ×‰…iÉÄUi¥6œ±:ßî¿(KR?u°M¡ÌÈ'Ÿ ÛÐco=CéÚŸÙÐg­˜Ö 5ñ-Öe@îª0iÀÈ†äž=;jµ
¬Fª©Dáò>ÁZå¹su6w‰Vn6ÿv"“’dQRóaÍ0/×`6~–ƒ4$9iÓ‡„c.\qšwà.8#{£m¶æ`ù©“DËN™A:1Á÷ï·šc6;_[¡æ¾ÎU”!éº®ùíÕŠÆ3–ØÖzEe@ÂÌ¦<jªk\fb[cÁZ"q€oBç‘¶ÎS§n›\†f;oÞï„°2Ð)üš¯É(²÷Ï¿XU#Ü¨‡PMÛ:Vs¤ªM£«}+üÝÍìCñ®·»qUnc/‘ÚŠypä„“ÃÒ™;8\óâµÆ—ÅgÚíèßüËšûàÚƒ² Ù6@5‚Ú`‰6˜ÿY¤>!uJAõ´Þk×»EÔ6l;ä"XS˜¶7xÃ.7HÂik6RáÃZ©×^k›“ÔLê¿=#ìÁž‡®hiäó5ý	ÊÍT³d%¬uú‚UŒ¤ô¹Úö†î©s­¤±lÏ©“ÚCµ•g‹AM¨Fý1£HmóãKk»^‡¸µjÛ^¿÷èxþõ«2yÊôS37&ßVò£~ŸeÌÄí,nmaõd45ù9éåõ³'5mñÚ§‹#a,çVÆi^vhh${~àüpß¦"‡=Z.ÑÅ&SF¡AÜ,\©.ò«Sñ|ª-ÎJÍž"ÍpBË„Jò]ú½_kJ¦·}ÁàÎc¨]Z¼3pñH›ÚðŒDÑÉûÿgÕÁÝ€¨üŽ*–ÇŒ
!ËÕc_&ö8ù˜¹’2VJÖ¹”IN-Î,Î³tÌ,©fX»ü¶Ÿ¹–Öª…j¶:B·ÕjÔýa-,lÓ;ºö9m‰ëºÇœÃ‰j='*7Ân°VÍùèØØËoò—ñ³_ÿú—Êƒ–ß:†ÃËóækxöœ¤ë´¶÷q¶={ÐÕÞS´ŠÑX.¤Çn³°æJÖ¶hâ˜ÌÁš£87s°æ&DQ&ä}§­gC6e6!7c3~ ö"íál¦½XƒÎ“T_fâ%AÖ1Ù«d“¥¼ TÈŸ¼NY(‚5¿"­(¼¼B¸ŒHtµžžúðT˜S/§E^"¦—°½‹à÷Í 1Ó;aaP©šÕÔT·Ç•xÓ¸´µ”"R?âZúúR ItxeK¬Fd™‹à›_ žý±¸4±4ƒ¹È7ãôÁ®£ô–…vbU†°*‰ÑSO*}Ñ\(¸¤p J¤pÍçÊ#Iëµˆ‰_c5¨kh¦™Ù™{±»ÐÝo’ _¬‘—þž’:VcÝ4ï aµÕ	ÃÌwÂ{4•)5u©ÉŽfr”Áuu]»sq¾-M L°–º‚-`V6¡þôàþ® Ô¨`«J’MAì!ó	ªÑˆ4_’c	k†œâh“…HwÒ$ègÊÔÏ’GÂ¤ïU{8×<Õ_ß ”öpÙîx²Çåa—"È ³8Ì 1 h38ÖC0	f4™ ‰£¶ 3&VãOáhRFû–—{»‰CË3c£µç¯MÌ]›Yš¿<3ñéÄå™ù¹¥kó/ÎOcK†¾†˜fX¸ËÍ`½ÃÐŒÓ¯¾ÝÀµ«¦N^Zœ©?T“sr[È&hƒß`6}ßmÃ©l˜*¿óÎO½õÛ·ž‚ÔþLcëÿ|1«=Ã½éçžÖÝ»ç÷ÏÁg¦hmOí&­¤¥”îÚ‹×ÞVDî¢jÍƒ5¥ØT›û¢JÃÚ!-:L$èÍ3!MÔ‡5¾+Qø,À.æ¥hÍ(k'¬¬&T¸"ÑNÓOÍ„í´6>44ê#G/YXësî"}##§\k6Œ9­s?›U×<J³4q]ÖÜA°¦±(\*$á=©j2F®zýÕŠR™9Jó›b{Hè«o÷ëÓhŠ-d³¬¬éJ×ZÓÈà¡ÞÞNîbê…Òk|K(RûZö"¶E6ß/Ž}2†ä{ták_u¿¯¬1šå@®/Y[S¯æ'?þA¸ÆÃµ?cnÂ¾q8h³Ûú¤Ù‡?{pÜsÇßnNeÓXÌkþÇfþÌÛƒ¹ÍæA~//HBé,¡bXó^ì7èý¢ê°pNÕR>ãŠ;#ŸM«–ô+®ÕÀDª`cNŸ5ÙAªÕš…5pÍ‹5Öý*i“ÔUZ*³%h¬ršŠÎ|«ÅIÃ²šÂ¾­ç¨‚5z’"ÀT{ž”$@ªOþ@_#_W#zÚCýS=Í™‚µ³ýb5Ô8¬ñ9¾±E?+Ì¹öêÊ}ÿ`»^ÿË«¯ú¼Aîã±cO>ö¶ú©½ÿŽM»—¡•:ªé•¤#ª©!&iÆzwbâòÐâäÒ•É™ÑÆ†ö™…•å¡l¬c¼¯c ½!›è»Ó—>¢.ÕXyä¹r2:â,VƒQµºf}H¥¾òqŽ2çFG#Í!Ášþ‹#¥©
>STgU ÿóSÑòD&ªž’œtÉö±)ÓE%ŠGi¤v4v$ƒ$GÕ3m±	Ó»D¤Ûhœ¿•ˆ’ˆsh–$Âæç,¬Í]¶°vŸÖ·´¦äV\Ö(,ÜI¢0°¶¥ÆÞ7ØbòWa8ãžÆ.*«ÁÒÜi£É+ò8]PnJØÈk…Ô/Ì½ü²Qõ~CäHkÄÏŸ Ö,­ýøƒ~ü(_âæýž‹¿JØ¨€3&Û„ýÅªa\G`´ñÔÜEÑ\xGøÚZ±´f]F™u!äþO›±›ñÿ»½HG{]c6; «‰ÖÚà5R!kÃ¡^”*­U«‚VSãTQÉë °f»Û8X{` Ù°øÊ÷±ûug³õf}¥„ª¦ñ|8f“!µcl`šr"¡	ÁWóÂ’8h¤{­³ ´hÎÁ ÏEÉ‚äó3|‰|øg4’ÉR-”Œ¡mI?ùíc?}å…¿Â%¼E>š˜\øæ›ñÛC™ñÙšŸ±äØÙiEµˆT<<úãÑH³È‰/ˆJ6£¬%ÈnKÑ&) 4ãÕß?õâð°ša[R|ï¤3‚t¦ýö `mZÖâr1V×Ò´Åcòxç¦¡¾VN»{UKR²¿½cÊAå•Ðq4Þœ+Ïeº”­iÍLžþ×Óxþ7‹«$Ñ••ÇÔº›ÖÊŠ–°}½Ñ¤¦áÐjjêGRk y[=Ôv>b…*OE“rŠ¤v½,üÅa*V3²Y»©jÈÌh&ß¬)øpã
ÉTzß!‘›Îhß¦K#££••æÑgGkG‡Æçæ—&0Á.rifìâÞ1¼H0ø’À&ã“Ówÿý³…‰i‰l’Ú¾»Ñ«í:#¸Ò)¿‡™F½]V½°\cûÆj%ÖˆD¿Ý²¦LHŠ<,ªQ·fqw‘“kpÚ‡Ï™ìÇ'ìÁ’y…ìù•Éå½•ôZÛ¤–ëêsí¨kfÍ­¦,œ›™02Ø2ªæäÍ€y£‚µ ÔU¥¦i¥aÉ¨~€j‡")X°¬Æ†˜vi:³aH…wÜ!GÇ=/ÈC„«W³á¤56oâ»@zˆæ5{ äÅm²=Xã‚5™xz´f€‹™æfðXÎœ6KjvW m–Öd9Â³.Á±ý±æ¤=“gÿ(\S|=xsøÕ¸‹pÕ7a+6ï÷…5ËqEÖ|YM¨&VóàÌ¼ášÛw×Ö¯6&5=Ø®}7±¹}cTó1íþ±hÿãKw(ÊtsMŠMÓoó›zAëPM;¤¦Š!Gkv¶ãÚÔG7Ó¦P-XµÖL©tµZÜ&r´¦’6I]fþðÇo”>¬ÖØË§ñàÈ©PM	’‡Åj¼Ãw1…Ú²—„ÂM­9¤Ò`:6-|€ý@£¯q+Ó†);ªìhh¯Ù
Wô`¼/‘ãBµ¦T£5[£¶¾í5ñ8­¿…’èaåm(÷q×^n¤qóï¸qã	‚fÐíÔ|…˜â^ùé×ˆO?³ËCKw¯­N ©ÍÍ-Ó¬ìÊx(;@óëÙ‘ý>qËaÉ”1>C$1nRìA-4o-­w~l‘YÑþvwC6ÃeÛ1Ð”É·¥Ž­‹ŠëA^‹ºÐÒ÷ó'[zý“ÍH:Êª—hAo¼FZ²¹Ýù. ©@7h´Ë	ÖÊÈ„ÔÒ í”±éfm8œÙè]^ŸûhfvnÞSÖ 5kž%$Í±÷U*êÄc šˆ_¿OÒôÛÅq»®K±­óÜEô“¬áwX“V-ýKIEÖ p^ðÕ¼…éÃ_~ÉÈÛcýÙ;ß˜¶Î<ß¯îÛ»Ò¾»A€…@o@±DÁc‹ñ¢TñØ`Ë
®ŒÇöÅÊIICè4ª¶IšŒº%Ó^v:D§ÊÐ!ŠèPH»©ˆ&l)U«ÛÛ"®*ÔŒºšô²;ÉD#U³#ÝÏ÷yÎ“ƒò²Wâçãç<ç˜„„8~Îç|¿ïïuÖž¬}¬ýX´vüâE9Aî¼ÒÏnÙ«Q×ú÷4ÛœGeÍB\.ñÑq˜¢”ÛÜyFÿ•Ò—Ë´•JkDl+ZËd¶¥µíØŽï}$õXjÃqHˆvRƒÚ¤v³ò©šO&ãMË¡YšãtWæ7ºæsA;3õ'|ÜÅ(çbUæÏ¾ñÆHï½‘|W¾’þSeä*ò:„Ä'/ný±B9«ÃÉlæ«ºR
›â…J@*Î4¢VA3lÀ­±ƒ¬ÈÆìóÙ8`E6â l4píWXV;.V³°fu5uX3°¶FâÜÝ;±
>üOÎ,ÍðifþØµaòÑ#µ*¨«a|B[>UÈý#Ç_x¸‹–Óõi`…„µ”'ò×®£¬™‚oåAÊR	˜›öß¶¨¶º*X[äbšß”Jêx¨"“‚8CQ0¬'/UYH°RFGOkÇZ8Ù15ÕU¨ÇF„*µŽ´úÍ@A½Àšçþ_ü"H·6.FñÉËõ1¡kõ ©%Ë«Á<!#Ôå%¨0È§¢ê—7×²]Ñœ|6©|Eøk©’ÎÀW£5å·æýž¤ÆDS×k©YJ|Æw¶|fäµ.t?›J¸"mƒÝ“ÓK_®ÿ ¼M¢íø<þ"2†\ŸÜÕ÷Ùôü?¡Î‘¥£NÚsôüùö«ûksË\i r·€4D¶ÕÛ³·mæ@˜&d³ñ4¬f©í·*Û_ln$°vùO¸ü?+eV£þûÇ"5[šOàð§í<ŽÁÈž=O½÷ÞUêÕ`5Ä´†&n¥ÊS$`šc7@kM˜÷·ª¨9 ÎŸïÐßG+ƒÉ<Þ¡¹²ˆÖÃÔ0	î'”ýÈ¿Õ…Õ$±§AÙB¾Æ{éðÄ„d5h«ÿþÛþkÚ¹@MÃµkoN"¶íš@pór!®ÆŽj/ªJ,­ù5kÌ¥¤)¢9”Ú@o›\Fxðše5
Ö%=Ø 3’E\ì}Ùí5W¤¦¹9ã¤3`šyŽØ`ßZLÃbü%ÅiB¶“â4æÕØþ/°¦¦kco^óMü!Ÿ×9eÍ'5¿%¶™›ðûa?¬«9!Ím<ìtYO»	ØV}•Í#6¡ùÚšã¶RHcÐNoÓ°5ª¹™¶o³sâÑòšö¥¸æ+m%ÚZ	 m*p3ÂZõw°ÚV¸f­ ½4H.ªTów
©¬Iš4+…¼ ÅlíÒ­vxF6o1\µ«j×µ]e´[ûG6ÂWÖJƒ¼Æ¯\C`ƒÐkúxJS8{@Öì”Jc'«£¾¿vDXs{Ü98Ø;œléìê¦™Ú´æF"Ç«mòè÷%µ'`5‚Î4dÈdXýOÉN„P«å>ÒNíEâmy?z­'~K(Û@ &R#«!¬­L,Î}1·þÁý…ñ¥…•Å0.‹'“'¿\[/¨^œ<CnLf’‰´jÌöÕ×ìÝwp/ÀV@ñÂÀ8¥ÙHbÜ9d µÚ¨r÷<ç%ê¹Õx¿õ 7T12ÚžÅ=Ôµ eiiÏ+•jì9XŸïNFêF§†£Ec3i²Äãõñ ú†ÆHx‰xêq‹eS¬ÇõFk¬Ñ%Ÿ‘ý¡±¥÷×fö/¾óÎŠä-×ÛIkV[SÎ,·,¥«‰ÛÜ{Î
º„yûðªk¹¬ÁiÆeœoA@ƒÎDn
ñžÚFHqknùÁü'(kâgŸ}âü ¬QGxúôO^Z‹Ötëï
ÑÞ†{ç•~]RARÖ,˜™7§ éÐE)Âm^Ñš&¾´–gSÈÂ[ZÛŽíøÿÍ^äpýžç	¬‰ÖúU MÝË!Âš±(j¡$°F7l/„Õë]>ï|ÓG>dÂ>£¹¼1’	Uf¹I8’ÇÄ[}z{_éª¬‡øbÁ=õC¸ŒHP#P}bºÛêQ Ó"¸AZ»^ö`-žèÐA<xýL´€$ËØ`7½Âºm½°FXaMIðÒ_Uº¤ÄêÜÕ•;Ob*ÕÐSZ$	'D_Ó™òóUÞ üÄçx»UÐ‘fØ¥â²,x[­Þ òó¹=°v–Ü”Ÿ½¬ýßýÂy³œz¬vÄ/X1Ü[£òçç:Õ(¦~`(]1vú],ZˆhQVr	å~d§°ï (æÈÅŽÑc£Ùø¨®ññN0*Lk’c¬ù3dó]gµÖÆhžß1BM a|>²¡ZÎ(Õ3¤ÛùH$‹|—ÍdÖ°KIò‰Î½K¨8˜öö^ï=“ŒBk*ÛTC¦Î\Sx£;q@¤­pó`MÚ£KòƒTÂÉJ3Í„Ë{µ·LL”GÂIÊÇÇ)a[›][šl´Ôõ5ôMÏ¯ÌO/Ì)Ám~Ó2ÀHãhmöÖê}\Hî¯¬‘×Cp–ë»Ë7t$x»ûí]6Nºt6)’¶žíÕOåy„âµË2NýÖRµYZƒÓžzïÈ	y‹yéj] ¼nÏÎºº:À,ÐÖÜÔÒÜ´³Y2›²"›66œX±í(«fEkôó3ù®P(C«»\XKE…ª$øÒP]AbdPÚš¸?%k‘yn²o×IYLá_ÊõY31ù&1æ@ÍN®ã œÜôÅl‚5ÑzÏVcØØ^F¯Íg7ÇeŽÖ|=Ìy@¶úumv«08ùÍšGdNuãÈ…ƒ5çÞ¯¤G&øâšË‚4€È…^#ÒZëŒ˜‰ÚŽj„hMÇ~ÒÕä/¢×¥¬éá[÷;\cp¸æ+kî"WºšµôqmÙ<Ø›	£™sn\eÏð]ÒšÕÕôÜ2òž?cól[0¦±DfÛ¸#ÜÁ£ÃG5§®ù;f'›IØlŒmÍj[ÀÚ×Yö?ä-Ræ¯(Ô|…ÍÕuŠ©äª6»G`]rr–)»öÌGï¾{-°ëMpÌÄaÍì¦€ä®UqèÐ›°½7kUºnÉò—(×œQ$¼¦:5œÝ¦‰‡"Ì“Y~äè1ô´ÞÞcFP;{ý¬iy­§K€t!Q­”ÔÊ¡‘Ô0ÎúÕó‡:[L•ÚEìOŸÖúb/j¶ïµñ17È×í*eŠ[Rs½Qn‘Ö±´´8¹vcíÃ‰õõ…Ùû+‹ÿºrom±;ùõâúb,Ù•ˆìÛ·7Þ{&"¥(YSì"QÐÝ&ðl*•MtÀj5Ì f¹î`Z)©ñYOq 1]ŸOÈù‘Ò´ž ‚€6¤(juï¢$s¨kwù\L+e¾u÷tfã;ÁgEŠpë—Ÿ°VLäCÖÄj‚µb‘WIŒ,ÆÇ–Öææ–3Àêš…5hÍIk*[3´©-ët°æ1;öÖ²¬\ùD‚3·Œˆëõ§–xªôÉ²2Bud¹–“u¤xw²ÿ“÷Mã€Oø(1VÄ/ZÓ?‹‹±ï'DjŠ¦¶fÔµ=$ABmý²ñ­MÞšÅÏU1>",®•´Æ¶¨¦çC‘Ù¿-­mÇv|Ï³ ÷Ë&ˆz%	j‡Î÷÷S»D‰Z;UåùYßE<€Õô1e«q<7Y³–¹ûŽ%«Ð=fdäìHXƒÖBä@¾ñofºÞu	+yé>¹€Öø”†ÓìÈs¬$¬%SÈØÈc$¡ò+dÕ°é¦läHMÀ6|}³—ž¿”¼ô+–³îçiÜŒ/üÜcµÓÀºþíªYBX³qöæÊ“j¯&ªéW!`M‰àª©çk¤¢òfDéªId¢ˆ"d(¼8
¬I£¯\O¥ 6n|JTã)X» õTß¡†eÔ±š©W[[¹¿ŠÉðÿzŽ¥*Mít‚œ”:”ÅP«Ó šY”&ÕÅòYA_–n…ÆÀ°htk,Æƒi‘0‡¦ql4Åe¿gQ1•M;6:ÚÊmOýPIåŸ:¥Éx4›'û1©­¨6÷´9¢/ÓÛ›É‡"ƒùH¸¶Ry&¾3Us…êBž{À‡º³,§À™‘ÖztÝï)jÝ@±RXc¢ò•;™š²Ì–âØ–¬+ä[R¦$”d²­¡ep°-™ÄèÚ	4·ONNÚªêU:º:==¨Úµ0KQ¹‘ã+·`¶¹ûFD›[¹¿ŒîöÅòÚ’k_(HˆTi›…7XíÛ»dG*–—·e]¸Hd3°vâÄ³/rB²Ú9Óyé´Mƒô•µ/0¬&XkÀÿ±©½ZÛ	œQ«¦áÕ»5õïln“˜ÖÖÜßV%J3wÖÃJ™ŠðO P¦óm(ß•Íp1Bšþq²`\jJN"*Z¬)-r4µ?Šè–ÛÕ·ëÝw³pZðpQ„2ÖÖÞüèÍqÛe‘M1©#6Õ¬=È˜”À&ÌnUÂ¢Â§5;x@†&ææþK^ï5ÅÁM!X{PØÆ ßýA2¤ï%ÂÔjizº~Ø„e6½ì¾€C Í©n×tL¸VÛBÊžÏGéA0úûÃêç±Ù~ƒ§V\#tV?±ÜÌ˜ù‘Íük©²œ¹‡ÙØö;V+ÖnnD56˜AÇN_s·j6WµÆžG	ª¹ÑåAòÜÌk´NÓn+míq”5‡iš<šÕ¶œ±ùm¥‡Ôµõê­£â»Ý ]š–Õ6öÀÀZx‡=p“•ëzZ'd‹Ï¢!Ý6dT¨VŒ/¹úÌ3}ä@^eÿŒkÎÒ¯YûhWÙ®«UWûÊ« 5«y	þ6r*nb5Ž@4`MÑ‰²F„•†Yn,!õ‡Ø‘²ÖüÇ 5>¯ñç'×@£ïµÙo'©½ñP™šIÙñcs &Tûñésç´¼O?û¬5~ô´áÛïÛ÷/½2üÆ|TSN¹Pmllzel|emáë½_/®ñQ:ÿ»ùßÍœ93	Ÿ<tþP>Q<¸ZËôvEbqzR+0mÄHß©‰»€$45ð]Z!QR9èÆ
°6•+áñX S2¨¤ÅÖ½ÊX„ÖÔðŸÛ3­,ji"š‚ûRéš\Ö,ÄU½ßß€¤üŽx†IÞ­ÕÓ{o½.øMX«®)ÖÔÄbÕÅ\LWðQY£xíõ\¬=ä1bi­%êänQ„mò£Þeµ
M­;›îKKøõM®í¿}¹qWÛa3pMiØ'WÈ OS1§Lû×_dC[{\”{ÿ9õÅ­ÁkÄüªè[ni¢[çŽ¦‹¸û‰ŒÆJ×X„ÊÍ¨]³ñHT+±„$$®y¸¶)rÛr;¶ãûù·Hâùîp¢³Ó6¤ÿBËM[@™%aœÉ!6–IcGÔÉÈ'™|¹ëYTjÜ¯Ã®ë™'ÓFFkgCÃgÏº»…×Ïä“²¹°Ÿ! {±ZiMû‚á´ZÒ\bÂ·
´¶x-£`-GàBR+lè¥
³2—péZÏ|¥ô‹—\"¬ö§¿~‹µoitvûÉÊ™™NLE µµY*TìnoÑò‘Æx…³(\$÷ídLË,Ê§UˆÇåFWÛè!©ŸýÇ%sãÓ3‚4¨øsÝûüÉéOyÚ71I÷ænÜ\9™ú<ó¤¢Õ¹ldÃ®ŸÅ‡.nÙø@:ŠOSù%‰,Ö&Ü«ˆJ\ÍÇˆx§zâ	^†ÚZw“w H
~¢$`j”Ê'òéÒÊå7KfGO‘ŸçÎ	¶êêÚH­h.–¹ÞÛ•›"Èjl¨:¹`0cJÛêš
Xƒ¼ F„l
gV[Ó(ÎÎÑß™ø»Z5•½ŸÙaN*RYnH&{»Â:ÞWÀÑÉòh!¡	Ž ~£¬}“KãU¬JKs4_[BjCw›]YZP‘Úòû+«ß¬-Ì}Á‰ù5NØ3;ÇeÈíû«ÌÅk2<s#’ßšPn¤xíåËÐÚ‘×_}ýIç>6—o§m$'­²9þÒ‘/Ñ[Ñ$þÇk¢üÇæö&[ËÙ¦µº…‰®ÌÌŠ[Fè¾zdx*Å¿?Í|vjÍ8@&h¡65X#Ï5l•´†§g
þPÅŽ]»p¦‹&H„ä)‰ˆ§Ô2ú=ãŒ3 ™§¥MÔ&Æ=Ÿ‘ç,¬ôºCWÛ6Òç²×ÜÄ"[IF¤ë’Íf÷b'k„Çjè,”9õL‡Ôlø°æe7r¼a?„°æ1RôvÀjtì µ ­âGI„JR“S¿ØìðïåþhÙMiì¤ºéH½éxñ§cªY{ÈÒÏôe56ß^Ä×Õ›ø¸,ZcÐ\h¦Ax¦¹}YmÙš†G–­9TÛš×xúÛwæB²m²…ds“éZ©€æ[˜ÍåA~XýØ´Vk¢Ä½ß ¤¨Ä²_g„o!®`ËåõÐÉÅ«^U‘m±&ÅÃ±šý.Ç\ïþkUì,¬•Ð‡&R%kå}W¯í’dayÌÊyÒç„ŽÕ|Nó'ÀšId=´}Šk#, @e ­;‘Þ–;j”4‚Q¬ö¿ž5¯)OãÀç4@íaR»”L’-"ãG
œ.þèG&ùQ½ ù˜Â´öi5$yûm÷þ}‹˜›ãÍËwCiáªîõhmôûåû|¹4_[àCt¢þäâOKc?$èÞ“¤O¾ppš\"1É‡ä?
ÅƒˆfÁôÁƒ÷¡ ¨eu½üF´ âiîªHNã–]&T(öhëá×¤èz£úò`‹¸iTr` ¨&4i+›ÂÌ8ŠhÆMKItÕÔ äj î’býH6eï,¾a,„‡!l6ÃÍ-Ã;emA=7ÐÕ–f–€µyk›iÿp¤SYCâþpe™,¯ÃÞ›ÓNLÇœ‡XnC¬P.Žë­†)oÃ°)7SÒÕ«íÓw µ;w^~ù“O^‡Öl¤z­ý„§ñ<~üø•=²„¼²§¥¥ŸûºHm%°Þ”ÉÞÉµ:Ðñc(kì"êµVb	I8Hãa"¿ÿoÿf;¶c;¾×Yyüë.ˆÖx’	¥‘ÙDí… apM‰å;:ÛÑ¦ª­Å¦G†iPª”¯Ò¦jFlãDþ	ºs±ì¼1rVy—	«½ræÌÏ.uëNAk}}¢„ôÉ‘È°›–Æ±†ŒÊE„$È˜Ø¬BöJ§ƒµ„œFøèÑ²o0„³n‰jl,lÍÍ{össë‘‚5‡j¿õpm¥væÎ4°Æ/F)S ¿ü ËùÜæÓÒ||+5ëDã:…¯p®¶­$UcŒHJPTêgÏŸI$-«uw›Æ7ýMW.¾pZ+ê‰Ët5Û6×ÜWÿr?€ÕÓH§ßD×ð”²;ÀA
¦«¹gR>©Pe	!R^ÒHi­8<šŽ\¹(N˜S=Cà~Zâ¨àÙ©·r¦#[…Z¿pME”£U ˜a{Ù¼"Ób-™©‡sYHÍ²“½ˆ>d¤ô¤cId¸–Îœ)¨
šØÀšÕZG-­qû”“CZX³ÄÆ<hùÌêjÖ
XË•ñí¼Šµá®ÎpÙ‘nc×©GeŒa­?ápw·²@¸IÐ‚¦6>‰ébÝ8ðV>k¨«›¼:½°4>9½vëÆÚôÒí¯°¹5·¶0>¾B~ä­ÕÛdF®Qêváíî·¦†MÎÔ†ÜèýjÃV³Ý|•´ØËŸ¾úê‹ˆg'¸`ûøÜOÎyfjSô ÖN¼÷Ò	`í¥÷ŽÐšlû™©)¶¦MÆa¤¿½ªJK5WUÀK9·deWCXËdhðÐ•ÉPú(Wš`GŽ4žáL”Ÿ€Æ}ç¤5ý`£ù“c¡Ê‰wË#è¬tºmíWº¢¼?LIW)S›1`fiÍ1š	ìFl$6þÆdÄ¥+>`6Ggíž‡7½¬ðÝ!KœG\/lFÂV[Ó¬4^ów°š¸¡Ì<œ“¿^ÚçøÎ©k’ÚœS$éPè²|ì8«¥H¯~8ÍúA²S€n:)ÏL1ëï@±PÓ@hð…5—¹Á]„ðE51š7gÔÔSÖìX¢¬i¯QÛáóÚ£M!ýÝ£½ü·ÐÖ¶ ¶Ç©`ÓsëlÈG ›xÛþÇ„5×ûkËf™ñ©tÚ†·ˆø¬&X³#WÆå>“•·¹kU­±s¯0l‘yÝ¬\GÅÃM±7÷ï¸öQ•µl°­µ,šabÃÂÚ¦Ê5kB:Ô¾sGmÂHvôèÙ.²í†z]¯yý7 õæ÷9msšúñè'ºY‹þ=2~|Á&?òÉe45ù‰ûøÎÛwœŸKõØªÜ•ï­ÔÔùZšý´EY]ÅLdeæ<®"ÀÚX¨{l¬ûüäD!_HBjƒ/ƒÉ\ý>ÁI†¡î«MÏ¯rõ{$¤÷ŠÕÈj<Àp°XS·{Ó?¬¤éG’%Ò­,[‚5ÒR¢q,ÓÜïToTœIPÒÒ­À?rÂÉAâˆèQª½r1_.øæé8¸XÃÚUˆ*á5-2wKÍÝGZ¡FX‹åYÜ¿Ž²ö%×ÞYYZ\òŠÖ<k–Ö:Ñc½ w–£pØ¶[c/á–—Û1R{ð>dûjÑ"o3ÅmºÛ°·QLöƒòéye`š4H`íþ ¿~V#¢5+ªaàÿÔ•=²îÇ_„ê5%Föïéç’Ã9‹8Xk“†fÐŒ%Q¬VkîðÑÄV"­=Ëjl6òÛÒÚvlÇ÷9þûOuÓ^EíÐ!º¬‰ÕDkM:CZÊ#ehjý,…"2sç¨½.Ð®ÔÈhÛ˜’Ÿ¶ì‰]Ù¥çkƒÖ¡X-¯„ÁK\•X“{¿]àbúôÈWj^Ë´¬sÈ(ó¦ÑZ¡ ?H€£ù$H‚LÇkÉ®?“Œ[ùLo§AÕ«YZëoÞsñGÿ|ZŽ/Š=Ö_oÝ¶°ö-»™üùÉ°,íåM®­©	¡™°ÒÂ&"±ìóÔ®EEkP#Š”þ¸˜åSg§”•˜ºžLê[kÝ‘_ý’`]Uí·íÄíAR2ÅµÛÝ›÷ÖŸK©6;ˆ»zGÀ‰×è.$ëP¼ˆ?7Áµ´ºÊ·hèÔk|»x#kÈQýÕfØ€ÑbÑv³¶ínj•¥ ¤Òü¡<›ÊÅÒ,ˆ±‚V¹VZ½äHc'¢’ Ñ²Â•ÒCR–×CÖd!“„Š=ž/¿$3¦ì½0Êš{Öî‚¦@MF€K™ÈŽpR½ÛÔÃ-ß%û’Þ´Æ½gÞC¡¤)î ?aBÚlnH‰Äe±a|~újC]  Ø÷U©9ÛxCß¼Ü¨eA²0=½†ÿ×¾7fçû¦A6<"W¿PÜP†$™‘†Ó¾º‰×ˆ·>ýô-þI^?râcsý&<Ó$­QÀöŽÖŽ ­	çÀ5xXÛ)`¦ÉÂdkÇ‚d£^Mk5¬ÀLÂ¼£0ígqìB`”dW&Šdéi3Œ ²FC	°ZšH³ê¶ol­xe-›Û2ŒÌ“b5L"öRx€6>)HÓ|ÆÛ³)ìëÞCÈ`e4Áš“Ø„\®T­´÷šŸéÏ 1…¥4wÊ‹ÖÛfVc°Ý±Ù¸íî›Øç\F$Ã1÷Õµ}
Î	ÖH æ‡ôÚk°®ŸÓ=î”éC'83Ý°]X»L&0›~4¢ÛyÁš¥y
î¤Ö|VóËÕ–¥«‰Õ´™_ªæÛê?HžVÖ¥=Dl¾Ãˆ7hS¸™¿XÍ‘š]ä&F{ds¬æOüÍøàæ¿´%«iPÖ\vD%¢™ÕÓ:%b°<+5s(5¯R¯«ÞkÆìœÍ(njVlÍFÂØ¨@ë»¶?HìEJÌ ‰°öQß»»úª®^­rYÀš+Pó“"¡·‡ÃkÁ¦‰ÈbÓZ–·¤;JÖãÑá¶îcSù£?&ÒÖ¨=€5ô4ÕÎžñêÔ©±ž˜4‘?ˆÔTøä}<áÐÏºF¼ýú;¤ÞÝöÞ¸1ŠÚ]Å7æ>ÕWµjB®  /±^¿~oá§¡ÈØÒÂÌÉP2™ÇÚ£¯Ï©‰i‡…|Mq/@ÆcïÞÂ`v ÈaµlÈP¸Hp!VS3;l"sE¬CZwk¦-öP±&ØÈ}ÍÆÝ»ÕaäR'Ô+yk#Ø°Is#›$ÎoƒHW“+5q«ÓÓºÝ7%Rã‹ä-Và.&Ö‘Õd¸Dã%Ce1¢\ÄUpT‘ã‹¬¥'¾|eq}um‰4ÈyáÚ¯7Ikˆ¥w
ïëå_nr Õ÷ÏPÜûÎÂÒ²·Ý˜zž"¶W„IµmAQeFåˆÒ,®NBT?˜çmikJ…´‰˜äàk^äEuÆ>~ñJ]`zûà	«‘À$ö¢òD;ß«_ˆ&`«’NË·rr›‰Ç 5†ð&KH›	Y‚kùíªµíØŽïµ°vá &iZµ|X£_”Nïl»@w¨“”H®H[ätk`-hj'êÀ«y)ý%aaíGk„·™;†×Ï¨O& ç
KÄØYX#2d”¹Z6*kDÔŽTÖÆé»¦|G³ÆÉ¦Ðy`­6™¹t&VÛý«K­ue’—läÏÿ°çÿ¼ðÏÏÒvD°ö¶„5{ÛVã±Ë-t–É­?“ß	Òœ>®¥¬•Q·	GD/,"‰¬–µ´†ù}=€$™)A*¾þÄÔÔÃÙ®l0uÆÀé*€µ?˜în¬©°ÚaÍ\Èýñß¯RìVÉQ®d~œˆÉ)¡W[«b}GXSÖ	i˜˜ô¤sùD*HŠ?B1ûSZ:öZë@Úê2ªLKØ}à5`-*¤1VÎæàÉ¬jÐÔ74ÞØÈ=ÐNý&’¿^äŠÊ0©‡!=Ä<•
Ö$†e£#ÃAé´`ÍZ‰¸µ N.+iµfŸ:Ö	c
iü“åá0dfÕ'XËf:]½a#Ð*-‘ä¶*zN#WädŒcH­-P@]ë«kèëk¨kh˜_\ZX gN¾žkksX¨ßX™^áöñ7Ë³³Æ@rN>ÕøúD3`ïÞ¾¿ÌüæË/“ùÖÓpØÇ”ŸŸª™ =6:‡’Õ.Ókí½ãïjï½„‘?yM6=›« 5‹”·¨z­®y'#ý›MRdÚ,YÄÞAI„S‰k½™ –¥J0›’öLäø1óJ‡@­C‰B£­‰“R…:R‡O¦¦ŸôlêE„PÄ„ºˆÙ™%7x½÷%?ES“
Å“(×5k„XÍ†'‰¹Óì7Aîvá8&.ï)mnâT5Ñš`ÕA½UÔ8oÍä<–xBª©®Îè	Êƒeíˆvø° Íhk¶¶g¨éÁ!¹FNoªY+)[ãÀ·‚|ÕDIÁTÆfÒ ÝÞRøÌNZ®ñÀRÌæ:¯=šÙxl÷ôôåµGw[ÓÃxøƒÄcZŒl–Ö´•RÚ–Ê±>ñ6Ú»¤GM*+½c&ÖÌµ2FÒ6J<…Ù«×¤|XX“G?R¯{uF¬LMê,Ó)Õ#,ùC×÷ÑGo–dAŠÔ¬¸æh­¯ïÚG]í”{°«¹ŽEköû——0š^¶;2ó³výÑ©×ö8sœúÅÑÆ_ËgŽEóGžF--Ss«£“Ôè`ù¤FÔÌmG¥É—‘ ÜjÉÕe•’EÔÞ& ƒÛïr&ËQoÊ[¦ó5a@ö&_ãþ‹3ë3ß|3»8³vo‘{w±‰	˜gbâë|2QÜ—À¢+¦žfI^"’dÇ½55]°Š¹¼Êj
5D‘V ºcÙJ¥šJ¬{ä¾O™ˆCÔ¬ÅdÀ «¡†ëÎb+Ø¥uÄä‡PŠÖDyq˜>Û[¯LÇx!J¾?ß¥"¡¼ŒÖG5X#ÙQÐ"ÒZ"‡,ÇŠÌ—G‰¢ü’«48u°X<¹¸¾´Nsì¹wæÉ…œwÚšoßïÑZ BJ-T”ox¿ÒvbWõïÞ£¢&çV¤U›ŽMÖ­êÞ$¶©Ä”I¶p¤œx2!?O’ QÖì÷?AœSò†…µãðÙÅ;¯Ô®4õ_ÙÓÔ¬›}åÛó·)ÊHl8»njÅj¾+dx­9=D~[ZÛŽíø>Û‹Œ¡£ÇY„g$D®z»¤5ÁšR!Ïw†"ç›”i>‘0§5Ci|Âé	ê”ë.äÃ°‰dwÝ®=oøa³;Äjø€\øå…2SšVˆ1
Öjc‰lž93¹þ@#¢ñX/uè  V<r£"QX«–/N±ŒÆ†ÇcÖèBC3“¹ø“Óÿñ	çÿæ7ôX{•vØÎ¸ÿöí™ÄÄIl5ìµ„IÞý:QFè“²QÉœp-!i­ÃHk…zø¨OƒDJf{å‰ŽáŸ)ÎÖ~uÈÖ`5k>«¡þÜ\¾÷ï\d¦MºEÙ¬q,‘½Ó*‘¦X:A³¹¢Œµ€µ¡žQ†¤âõ8ªƒv5?$sd/­«£ñà)Œ ãEkûÞÚ¥)ì9@½Àh*Ÿ0	‰Ñ¼¹ZL‹ÓèwÕ1˜4v(âß(™a¬©®ˆœoËÇ‹¦0Gý1ÂRfP.ý##ò˜÷lC4*œÐæ`Á5/R^2$aüÙ‹ÖÊrQ5€mï’¹$ÛÚº»[(Q£P­®ª
*ëÜÑh®+/¯C¦‚Ö ¸††8Õwvkgl.¯jŸ$Or\ý³W¦çÉïYþfniÿÿÕ97zŽ“9»úÕW‚µ»7×f¹Çü—O>›¿INÐÍ/¿zóæ[ŸÊSÙ
kç¨×'Ô°èc'¬GŽï9þÑñ=?zïÄ	ô´@ÝÎf¾{y“VØæ¶¶:hÒÀòÉšÛhôß#Lvm_‘”`HE5zbTÍ 4å‡vÀi»”Z
#¤}ÎI€$:ea­YQÍÛyÎ:ÀùpŒ ÷Ñc7ëå§ ì%¥Lyþ%xåðò	Ë¥;êkK•5^²§ô<Åþs§œW‰ðŠ©ò-~9ÜÈ“Q¡f¿Äö½¶¯ÁgB´!Ž¬ÉößƒµÏ¹©¬‰ÐŒ˜ÆLÁ^´¦\fj×ÆÔ›Oý¸~¿±ÏÚë%¸FhR’ùˆ$Hó Õ4š‡7_eÇS{³[~4¦¹ª5bµÓJ÷U±fšma.òX’Ú–EhþÃ=ÜU­tnãÏ3ßÑ»«öa›wÈLxý°eB6º&ÖØüžåÓAÖKæ:hô˜kÝ
ëa:£‘hrí–Õ>rÂšÖ®y)Nkš.Íür0ò
sfŽÎ¬ñÔ Qm´Ù‡¢#ZIR£S´¿N=:•%éQý’Ô4úej®ïõÙ³gYÿé	—ÿø¼ÂtSkºò‡‹Ç¤„~ehS©&P£JMý° P›#fgMG˜e²½ª]B%»÷n¯}pïÞì­ÙõÅ™™9N®­¯}Y¿·fb}†«ö±Å“ >äYHs!åjïAbo¡O \Cè#j	«ÈÚOQ'm$6>+Xvè’Í"´bÑàNªîÝ´Be¢®búÝBNu¤Á3š]Ü‹T2I½„ºÝ=é`_›ë¦˜—ÛŠE–+Ü·Xà!²„XmoBc™JpªØ%Û‘x_!CH)u$Á$ø?¿¸²²ÂO„ŸËÊÂÛä#–V­Ak¬&ÄñÐ¼í®^
òˆ‰˜;&¿Æ6ZÓ×yõ2l”§·™^"óCIï•&’œ
¬§>ûŸMóÖ¹Aêû?{™¢µs–Ö<T£ñÂ?¿ÂÍñ+æªª_›¹W Í’©mÖc„c¶–*D¼ð#I-ÙŠ×ˆˆGky6ÒxlKkÛ±ß÷ø»Öº¨ÕZ»|FÔÛXŒt†ÂíÜ,RŽ—-©UÖSCj„…µmÑZYòL’+­ýS)«¹… ¹ÖzKƒ&J‰1%1RÎ_ÈkRÖèÁV‰ŒFH\S3l"˜(ÿ|Žz¬üóVŒI’a5[‰ýÔS*3]ÎÔ$”v•°š…'—&b3Ðž.(ô¬õ`Ÿ[w'‡ûZªVEsŒo+CH–†êx0Ç/ƒâ Æ ‚Ûõÿ‚ñí×þçíwWºI‚¤øÛ±š\ûéé¼|sKêýSª»öÈø*rÖÖï›…¬ºëþäPXhU^#°ÖAæÄÅ½=*û)’œØaüú5êh`“fÙkÕ%ð˜ÊÆu?“5WSŸ‹Õ0'çMŒc±ÕÎîL6-[Í½épÛ$€‰ÞLN« ì `…ŒÍ´Ánt¬¶qfÜ$èŸ"R#¢4ÍÀÒ9h%¹Úâ¸< M•w³x¬­ÑVQ I¥vpÛRf#vØŒkaoYMûf/¥Jâùßÿô$ÎÿK«Ë+““*q›Ÿ¦OÛüø8g¸F®ememù«oïìÜ¹ò°vûÄŸ>}õå…c‚µS²fêXN³çê7Ï’ý¤5ì¡P­"£ÙZ] ¡IsÓNNþ °Æ)•ž«x]WYÄI…DëdÌ_™s‰Ü6Í„×âYÂÂÑˆ£çT4Êë)´ÍÏ?J9?4R€e´5/0§'\"ääÀ¦¾b
ÎZRIãKÒh%àÃˆQ‚5›µÈÎu[sÙŽŽÐ|UL ¦ýFeÍæ´ËdãXá\ 55ºG<-¶	Ô¼×Õ­	ÕÄg¢6O Æ)lEÃqú…úý9l•KŠ­Y i¿»ñðçÌ›ââ˜5L 1_±:£÷ã°Êš¶‡Q™B4ç[A–°p†xæô4Y:s£ÛmH€ÔDÁô»Â!Ú&Nc{Ì®ØÜÌl[ØAj{5ØÚ¹ŸÁNJ™Í!›Ý@µÅ‰šê­Bî³zúÁaLÌ¦ Î6ÛAj¾Ef½7“N@}‘qàÄ¨³Ý‹¥m «ñì,ÇêGÊZ9º›úaaIlRÖJò ¯JY­õõá«e(uÍégL,!²ùFh¯ÕK{ç?AZy¤ë=6uöØÑ‘h1üG0¢µRMÍ²ÚQ’É~dqôIEí—ZÅ¸çxWaì¬óã3Ïühú_ç®ƒ(j·EjµŠ/îZAJ£¯‰Œúg—–Ö—îßŸ›û`}lf¶•s3c‹3…úØF#ÉäÄØ×õÆ;Ëd9æ
yÕ#äÕžãTÚ˜>²\açX¬1û´gI“bÜ¯vsÿ|#Ð¿G‹˜±0CjË‘¦ä,Þº{ˆ|H¸ì`œ_¥8¬!–Õó‹š±€LgIW	¦A3>&¡/Õ¸iAÑ©ö…ó8UÆMÎMšõ+dRbj 5%Uç;±¸ª­,¬ø°æÛ÷Ck¶ÛšBLß	x5ÜŠØ&Ùí8Tò&Õý [/•nrä^n´.!^¹´7&¼¡=÷—íÐuÓgÀ}±kT¾üâo~ýìÓÖLöÆé Æã	þ {®PÜÞ/K7S¸h)¢}ò‘‚¬=Q®P6¤ªÙØ1!¶ ¶ë×¡µMª¥Êá@M£¤µÿö7Û±Ûñ=Í‚„ÏdÙ!ÿ!Ò}ÁÆyBÅjªX¬1ÅÏ_+!*ˆìÉ™˜&þºéÖ*¿º€¡;t×uhÍáƒc5­D´µ;£W µt]ËÇvãTuEÈ"µ‡Ïé‹|‚OlŽä¤YUWt¤A‹®çmàÝ/Z³=CÕˆæœa5­mØö;V»{s±¶râÃg>äw€W*ª+©á2ž½®\‚$–B…­sÕÔXX‹'rùZjÚH¿ïB!*ŸÓÊ\¤ö‰	‘"ßš–/¼ ¬ÁjÏ¾ø²ßaÍ\Ï­-Î,Že‚¬Êõ @Û¤Û³<qûrk¡VÆöÕÄyU×Ãt¢i¥1M\‹æ€±Ýãl#Ù5h&Zü¸©xP¹(­\	ëÒv7mÕpP–ÆTïlñœ:9n[ª}hŒâõ´~ó½Yùp²bfü¨é¦¶6Y+˜–µ#OÀy(,‡‘`é`M8§SVLÓ âÁz:Ãï5­°³FfJeÂaò éû¬õv¶´3iUø@ªèKÞý²V”ØV×@ž¡ŠÖ<au¶A_ÒfZæãKKã4=›¤/ÛU‘Óôü4øD€Ú´MÏÏ‘øHÜ UrùþôüªªíûìŸ.¿xäÄez:œÀR‰§¹v;§<H!­QÉÚ{;ëøV ›Ú`#¬	'ñ\&8â¸l“5$É›kÐW]/r‘ìJ†#µL—œF0¤‘€–ë Öh°fZÇ
ÖP‰ZOæ£Y¸Í2É~Y‹h?q Ùc4Z{€#rQó5¤5Ïr’LÛîx°Z°•@³°æú«1°ó›b;8ó}"ÙÖûEÔ4´êÐWY(ãz@üeƒsdBzá×«éÆ‚É{–qž½0n'Xã
Ž#n5PéÆßC‚šmŒ¤e8;H!!VëÔÕŽsÈ1èÊ9&ÀÚVÞý>ª9\+-Y»ý>Ûs·gíó>OM9``êÆûss÷ænóœcä©'øÕ<™:£Ç=N(ì¸æžkkþãžþ‘{ÕüQO®A±â6N°sGŠþøÁŒzü'ölÌôà”¦ŒlöñÈø3ÛŸ××Ç&¾®Ql)­iÐó¡°­f›Â‡µÛ*»³ÅiL(-
è"k‡Ö\$^ùeåÍÍ’AÌ¹†*FJaÍWÖ„jÖÖ`µg®kU‚5‹f¢5ž
[ºÆ“3–ÝÜY³„y¨f“øi"]Ù‘£G³Iéj£&û1í˜ÂrÚƒÎ×pÚQ45ÂŠàÑ/T³·üXGÈä×-GÔþ?öüD¸ý§¸ÃÍÇÛhj¿%<P»¥0•¹_-ßšýâ«Ûã_ÎÞÇŽiifqí›onðF[üðÿ±w¾=méºß`Ÿ ˆ?BFoŒ€ QñØr
Âcƒ‘SÙ–ZÜ#'ÒÚ¦9m’iRµ¢Ú-gzäéV›–J&$ÈQ+ŽN’F­¥¨R…N*¶Nªl©£hKG[#ßõ<ëaá$Ñy×ÜØk=k-ÿBü¬ßºîûº·ç·®_ÛZÅh0*XK[1-OžÇ‚G1i¤…u0¡¤%’÷˜éS™ZËBX–Ëà&§äá˜-2}¥,ÎÈÂº£%$6«¿ó_Y— A.Kh$ˆûRGaµb÷þDÇÖgøïŸ•YïH‚ëU}‰À@<£Ö8)ù’$ÈqäÕeäOïB¦Ðª˜rsÙ‹ðŽèp¡\ïèüú!±Ù¼²¶/UHk»LFºÌU5B"›­Q‡ÖdrÍ_fUWÿ®à˜g,Rã<»Í¿²lÍÎžÂ.WjÚˆèÝO¯¬—‘ËK|óWŠß|ž©D¾UÖž}ÎÀÚ4ßH»\ÇÆþ8Ö.¯ÌFÄ„r¨òˆPþ"ŽÕlù9ÞŽJX{Z{ª´öd"$a•µ=im/öâ—žyr<™¤©Jz‚ˆŒKT;?¶EÎ‰Ñ¢|úDñ(bl‹ª`]Ñ†z¥z kƒž-ˆm?ZUy4ùö™wˆUËj|¾®Òh&jãÉ
ïePÔk¬2£™0M:œÏŒÄÐºb…¸$öÃl‰8„K&›ˆSHÇª@é¢×åÌ¾ºXœ6u›vØ¬æâÑ:~“(å¦RZcc]8Rg«ÝCÉ‹«é±I%Ìšmâ¹ê™É†ÌÆi¸–ÓÅF0²ãŒ5–d`ÒŠÛtÃþo4WV8—Ö,«)¨üþìþÃ2W2Sd‹ð|"”32³Q1•e ¬uƒpÅ£Bßœ\ö -’ÿ€qÁbV'Åòx˜mÖ²¥@ßl¶ØýLñ(à8ËÄËÉè\hšŠÊyXãuÇk4ŒË…bqµ­
SE%òóF20ZcùÌPŽÈË‡T: ÃJjsŽÇt#%¸yà¦;TæB\6ÌAc1"ÐcÍ>YAæó˜@’
8•ð†y§W“ƒƒhkõÊþ¬Ù7ˆfŒèlæÉiD´³I‡3mhL{6“‚²pùnKC=°Ô¼´ÔÉ˜ª¹a‰ÖÚ›[ß}õÓÿþqkaéÁ£÷¯=úé??ûê­ßü×o`5`í¿þî7‚5$59Œ(twâÄqÑÚi,FpAèãÅ:a2ÉlmlµuvoHÏÑŸeWYÛ£Q2#émÁ7UžJ…™G€5zÈb(">K´ª¶–Îx¦7ö,ÁïxNýÃû†e
#VŽÀk’Ž¤ªùA¤Gk"¤µ²ó·çJÖ“	hHS¤¥4‚¥§¦=nâÆºÙ/¾E¿»—r´f°Ê‘ž¥CjŸÈnsÂ7×=M»>âžÏÀ†IY¬‘Ü«Võ!˜›í¬ý ó•ó1t¿, Åg^º(¿³l-ÿ/‘˜îŽÔ­)ž@5×û³[ËËºÙX__·C–,Ö	Ú­íy‚•ÝäfÂ;bvºf¨Çzß¨²Ò’MV¬5²Á!…–þërÿásC+÷mÛÑ‚[ÚVl¹…ØF¿ÿÎÚšÙ.›ÁþòÌöÌÆÌÌ6‰	Ô¸ý|Ô>Öj¬Ÿì]÷Dˆ†&;Œœ–¦$­&ÜcZd»ÞXòƒ¬aÛD¸§ý6!Ró{bËðqemié…æRÖ8¯·7 3óå¬C–Ü´ö!nW+,uÂ—éíâbæ¬z`#«á•+9Íƒ4†lªQc(AÍ„5Ù·J35È"Ë]mDSã»´iÙÇéÃ‰?ŠýSýê¥†¤f{^Ô¦2Yíókxå^ÛÜ|ôèók(j[×(á}¸~ëÖöÑ™µµ[ß_à<\XDÚ‚ÕÆCésiÁþ!d?bÉ¼µ @É?Ä¥‘‰Áèa%p­Ëª¾VæÄX	ÌâYkª{’’êÒdQŸ0³¤>kÔµáÚ/|ëVº‡Œ´ú²$ó³Ÿ‹\'L´’À©1U(™†äŽD#.'j¾Í¤E"$ßk‰Ë‘„šÝÄ™ñ²‰9-…ŒÊ$¥xÁ4«™YßR«5
šWV6?]¹õI¥´æÊÖ¢ûÎ.eØ«Åz˜;ÊÖT²~•ó°¬ÕÈgu’©Âüñ±¾ZO/#—	 É6®³­ëòå¯|²¼ðàÁ§8ÿYÖÞÖ>>î­²m±!3”5QÛs1ógŽiÿ#ëze“„k¸ñ²õÜDeujþˆ›`­2ö­aåÅ`7³¹ª5ÕüTÈ=im/öâùÚ¹ÈÄ¹ñq¡ÚD>tNÅjØAQ©&a­]¿Xk3Sà D¶žjëQÜƒqÿÎ•Dù&U;X³"ŸIpmuŸGi•º4¥šé(ŸÞ'ŠK8ð`“ój*~É†ä,—œ"–€‘è®fÖ€5¥(êÀÅ$ª[/ –Œ\0åØî¢$3Ê±_ß5S°æ¹öö`e¹ic£Cö¿µÒÉªšTöÞhStLçJ+Ìlü¦¡Å‚Ü‚)¦;—q±cõÌh_ßêÅ‹gÎRäÍMæŠáÄßaÚÿ|«¡ª=Ä‹zî"\õÌd©·ÔäSÂ5[€ s±Äü† ††‘=¢å‘îÔQ£RçÈ)r–yF£P #¡MÉ›œ4'âÙÖ\Ær„ÿx@×9aºÖZ¨ÈnŠ¥”?B²Ž1@©0/¯éš&‹x¯à*Ÿã©‘Š£“Ý~Ê#VY³(§Pˆ–"¸aCÖý¼ÌÎSØVô*3PýÖ2,2#Ðj|pp"<mèÀù_éô(£O6Â™A5¶¬"¶Û•ÚÖÃƒÀ5X­FÓNc/ÌWà)òòææƒû÷/·ÐgóÛëkþöñ×_üþOÿú<þý(iÀškyAÐqâøñã¦{‘»]b´æÞÆÈií]ˆlÑ±ik,T±Æ·ÏCZ$%êÕõ”&ó4¿FÈ'óCyÜûó½‹£ÉQ±wÅÂi¢7ÒYgåâÙÁn©lÃlEèýì`M¸f»¬9çÇ…eÜ#$Òqc~?C§®Í`H£Ä$iGº®ÆÌÕô§å3š6'8û­šéÎh',£yÏ€Èô2­	ÖjÙ›±×{¤6¤«ùÁ17ÒÛ¸ÞY=ÖÈ}$H9¤ O¯í4Æž_ÖÈvŸ[>°_ØñA±Ç„5±š7p»+”5`­¿ÿýØ_.—û÷ïg°¿ÿÕíþû9´Úê/Ï”û½`³r¨ÍÌð~o“OPg?=fìóÊæàÌNè¸{E­ôúº1ößz£ÌÍ§„ÛÏw¯»Ý³a~€›Ù`¨»7¨Ø¹ØÞà±Wûó”«z@0Àn^f#PÿÖ*ú`»±à™Þø)ŽUÖÂak¶™Ú ¨Lmd³Ãp™ÉÒ7à¶#%ðéðÂmÎÓ-¬Ù¢5…`­RY{¡ù…æz>dªMf¿%Ã@cÛY>jÁMáh•÷xþßWåð¶ýZ²¢X0°ö²	¡Ú_^RœõMúßÙ7zæíd’¹ÑuS#˜ÀLZöëæsÈ$?¾O”ŠÔp~D®•E¿ñ}Ä¡ßëyý#KêÔè:‰€öåw_}õÝ#8Q¦ï—ËËÛÁüúÂàÂÃ2¹ÁØ¹…KZZå@,jÀ¢kàP© žŸ…àQEPýM‹E]úÃ^ÿÐ@¤cZh¬Í'â¤½Ä»³¥þýƒ¬±_:Zi’Lþgd{U”á¼ÆN5¶ÇÛ˜Â¶¬$ºâ öYÝÀÚ@0Ñ­­[QÒdÛ•àÍãšgr#l2õëŠ-3šÊRœš j
#W$G!3™üGz_£×ÚÚò2°¶våÓõ×Ö?qÒÚ“‰J¹ø4dµ	¶rØjzªøCÔ_S•t…ì
I©Š«Êƒ´°6§ñéÏ9R—rŽ˜q¾þôò•Ÿ¬¬\îú³µo¬y­Ö\[ì‰ç€µ?qªr°+zPØ:£ücƒmˆÍ„hìúÇ1]Ñü;Ek£Cöî¶ŠÞØ~glßÒòšn{ÒÚ^ìÅ/5’j5b§ÅjÔ§QÙbyYøÖ¤^DD…m°Ë]Bäú3ËÒÊ76¬E"âµwˆwwÅ;•¬6=­ªUi‚sYÿ¬A%ùÉÄª(T«
dd‚ÌŸ°–€nâB‰lŠôo/àß—ùíh¡iBÙ#ä@þû«©hÌ°Ú[b5kŸÁj¬õ7©j‚»9›0'	¶]›†ä>45U›t¿{Í±ÆB­8H^ÄˆM©TCG{{GÏdrålBèg³œ&Z]Íw‚|´vòØkóåòá,¬Æ«ˆÕ€5`Ó£†`®d™%]Ìw½"6#’Ìà53Û‘ã8™íæü»Ø­9N'ÅX,Ó{òÁ5Ê”žÊ;²8æêh
tÃïÖ,ÄeÍ6‚Â¡*`MÓœ~ç#J€ ¤Tâ$ÙË7l!®kñ“¬ÍÙ^Ø,8@àaBØ‘`Mðæ„µ’Ü†Í#(aS â9hm*3:5Dä¸* #‘°r›ëÍLjU›G|ð	ˆKÁˆ¥—
©ý5m-v·)¤±¯RæW¯£‡·´/-\’Ô¶t÷.ö w—.1‡o~€bvüù·Þüˆ"ùAþÚ˜õ»6k„<"ÇUµöúiâ&ÏV¡ÿ([kÃRŒF8X#û€l0v<éH¸^i,lDsC’ŒÙÒá|&?1ÕªÖåèh$@ŠØ†ÙPÌk¨k³‹«ÆRD¢Š,"ló„È„2°v‰±5-ŽuwëŸAÕÿÆ·ßY÷³áÀˆ-—ø¨µÄ)kB9+§í&6qVü‚ÌDbî‰NRãIÚÉ›SÀæwÂf›Ìf&Õi¯v³´%nÄ¡#,Õ™·9vìHöØÇR÷dõ8cz…ËHV›W¨ÝÞ"Yýn¬XEçðŸø%kO1ï'ž4ƒ$€5G/þ -åòÆ°&®ñéÌÜË<ÚmxOöYkFüe‡ˆƒB2=†;|FèQfã0´/Åöj‡ó¾øðÆXK»–Y¾táöê‡àîh[.Øçoö7lë)îWP¾
¯ÑòšÛ67`í)ñ÷„µ&k„±`É!”	¬Eªžª«QžFÔ˜1;éò‰azÔDF*8âKî	=úùƒhÍik¿~zÍšÜEà®zg'bÃæ¿b2…Ž¹Ðhg;4Œd/OÈã*¢Î×‘÷#7ßOÄ£µ—Lþ£Xí¬›™F†”ýH75—ýH
ÿ)}ÝAã§æI'ü&÷ñŠÑÔ®ß·E•ŸÀšŒDLÐ´äËo¯}ñÅõÏÁ³/®=úêÑ_¯yPƒÖ¶ÖÐÓ
ùuÂ$®ªÍõ¹óéôD(’ÎbÁFÜ¨€3zªÅóÊË'õ6 RÍƒ¤41¤ÉëC	Œ€RA“1™ ñµÜf6"Š%f°`Q¬&2ª1ƒÑZìŽVö¥À¾”öNò4g¼ÂZ³ñ”²?lw2<zy/&D¦/Nýšòh¹¼H«“xJ®Ö–¨1Y‡LÎ9£¯ÕJ\b<üp‹¼Ojó6ID¼uryå©Uk-Ö¸‡•Ð¨‚5©juª‡€Üz ¶&UAjhÍF¯šÂH±¼YËn³ý«dA†™[SÿhôÒå…>XZú„r¹Ë—?øXûe™F3‹kŠƒdA¶¿øìtû‹-Óïì‰¶OËz©­Íyˆôø‰Ž>›±Cñ$ÃiA„µä»®=–	v¬æóšÒÕö¤µ½Ø‹_läkçÀ³±sŠ‰džÏ;îaVlÐ—+qæCOÓGQ`ºWïg¸‹QµÂ¶QÔ¹Q$«!¬)~ŽÕÞ›>ˆåyoª¶OUÔåHPçž´¼Xd½ü^þ2ŒAâ4ÓuäFí:WÛF&.p=ruôÌH<‘ô k|.*{Ä:ç[aMÐ­m.¯cë»¬“pE°@Ršî?¨j1“†	¦Á7Uuj–]`ÊŠóÀ‚JÉ˜JçRÁÔ*Ù—««göu$.šHÍµd¡VƒÞÖ,«©_ î"}x¯¯ü-MVYx,¥üS¾­î¢¤š˜“%¥h¼Ð‹FÌ3´¦H¦7@í÷ÉIì¶8ÀV÷b²¡ŸLêõpâJŒI,u³Y
ðÓaùeŠßHúó“†tq€’ÅH¯
¦4'Ë§Ñ[¨õ-ªM©"+TänƒÉÖ9B‚iàšV
çÛoúº-2ÔÖèXO1›P"—Vz~Ò\.‡Áø“¢d-ÚS]ŒÅ_ElŸ±Òˆ<ò­ÎF°¯JCXc-XcÜÕ@Ö:9.kšU7sÖj¿¼]Ú|°ùç›¿z÷ýoŽŸþúÕ×fª¡)¶5Jì9qû&©¾ù^»W-×&<[ø>Æþˆ¶¬Ù’5ÎñBQ5çxº†1?Y5þ—™äÄxWÏÐ+SãÑÁä¥kÀX&QœGMß°©:m4CšÁ ,µ¡å¼«]ã0½Ö0¹$ÉæÑ]ºqCŒ¢ƒöÑ‡ÖÔÏ“Ä«A_Î·ßg6A™ï3âíaÞ®Çì$THt
6\Ò<uÍø†–Ã§_Ukà;ô<vŸäaÇ|ï~giX­%k¬ ×Ã”écæ—Â}žj¬Ý[^Ö.Ñ©|Ê½ü‰ë±¦…KƒôF|‹_Z«„5PEØ7âÒV±Ôš/¢©Ç¤5=ÝòH¶¡;kó©olÚÇsÌ0‡¥±ñ%®›Q°Ö#|,o”·ƒjµÑ¨%[>iú…qÀ¼€#4:Êno×Æ@ ß—ÛÊâ³«ýðZÿÕíÆ€âÿÖvÛAÖ‰ÐX;F4«ãö¬ÙR5qÇ>¨22W˜Å <û»Úä­á™ú¶Íš§‚Ôêdé…jœû—ôŸÙÏƒ4F•5kÜ—(W#½­Þ•'9—LXR“Îæƒšè‘#/ÿ~nî%’ QÏÔ^Z<ëœú}?‘¿¼$T#”grvîì"ù®›ÚE“•A75¦FkÒJÙèú'>¢JíM45þ<á4ýyBj ‚É*Q“Èç5?^¿þùÖÃ™å/®X®=\~¸¥mmb1BjïÌÀÑ	ƒ]áÆ£ÀWg“y®O1é'+2Ÿà×Ïþ|R‘Åâ!d2Í’ÂdÒŸ¢-6ÊšÊÖÈA4òWŠq_!@‰Õ˜HÌÆ³ÿ2K®$®þÄÀ@ñEÓLL³Ï8ZTvä>˜Îc9’ÕVP‹3±'èpÒ1™í‹—`[ßd© OH]&ý—gJ}œ eÌ™JÁ$	X#M39©°ŸIe?•õyzÈkkë(k•Ò¬æ`Ízø«ë0£”ZlûÑÈ º´ëï(Ü5îê%m\õÎWä4*XóúE¨m5¨l—Ú–Æ([£Znåë·øg3°FX#€µiD4Üª_l‘hnx±=ÚÒY?v°“D{*¶’Yo‘z¯h%¡‘ö°YkÚÐvxuU¬öÊ»g?ÜW=4´º×ˆHÄ—Ö*ü­‡ÿË?íÅ^ìÅ//þùµq°L#]ã‘ÈxZ9qÒÆ1…<Gþc—mBD{®ÖDMï_“/P£Æ8N_Wù ÎEÆÙÖ5üÁÞ~ûUXí‡j¬öÑÒò^K×ÛÑZþÀÚP>–P#µµv‘·Ek‚5vAj„>Ós!•®õMà×?”œ˜Ê'¥¬9w‰[ŽÕ4Í	˜€µ÷å/r«®n~¾¿Ü´QÛ§XƒÖê±Z(TÕÈõ=NØ­b/QÍüÄ®šï¢#KÒÈ+oÿûo'Î\Íél(ùéNáSqMÏ
kÎ^Ž*ðGkOê¼“Š2X«C]A™áTxÍM+HPFÆ¥ÃIsnL	 ’FæÖPßŠH%´¸Ñ¥It5s®]äº¦Žg•¬/	ÚZ6È·^P†
Î]lÄäGª5?ŽéèÌ5R¥M‡»^½KŸB ¥VD†É
ší&4°Ííò¬!;¬¶Æ ×Ûac¯VÍ˜Žð… 6Õ›H†Ó«g’yŠåraÕ„•OR#yMªV«!õ_Ž=Ñq™ƒ5ðK[”«Ù Ö »Î6%F6˜K¥Šf½pfŠÚZXŠÜØÍpéòå•û›ïÝ~ùÕoÞ½}eüGÏVùw§<`ûøõ¢µÛÒf˜žž‘©@M`ÖÅ÷×ÜÎN.9˜&Ù@œÎIæÔWg4i“<ŒF,?èÁÌÙWÒ]ãX)T€F¶Ô°6:ÏkÚ^ÔêÞá{‹‹÷†{MSëÛ~Ï·_ý~*$àviRÑ^Â´Êšç22¨µÞ»×j8Û®Ø®öL„]Ut´ÙÌÊ†¯¾YRs7¸Ìe7Ú‡&Á3í™œT¤ÕÏÝ$™Ù‡kAlùùïb5kömd.B<Óš¦TÈŽ™íÉ¢~;ViiOJZc‡ÀU]×m7nP‘õÑÏöÄV°ý¤¤âÖFÙq‹XKa–Ž¿ŸÉü»¿O_ZØ°¼çhK™ŽfËÀƒrì22OÕRàG¶dy{ƒ‘6=eC¯é€%G‚Œ‘[ÿöÀö¶ÝòQMC—‰¼æí{2<Àã¾”y}o_?Ž¸0 y‹í`#ÛÏ²ZícfImW"¤:<6±Ö51Ö!¶T3Ó/ÅYCVÀ««ð–	Ó;Â]Æ+OîÄf¯iK/Cõ*¼#}Î§un«j·ÿ¤hqM4&³vnB6·G[ÎùQÁ8·ª®Nü^©ü7Y|	"[|é/Àš‚ŒGËjVM3¬æWªÉRÄc™i‹˜¶ÉäïóÉD×ëçŸÿHM¯?u÷™J®Aj^Ïk¿EV“÷ã£ï¾½ö9Ð­]{8¿Žº´¾¹u+¿M	×ŠÄæt9Ty¡Pc,i„Ê‚ih-ÛØÊ%“4:D¹t~b(UT”â9h"MR\TLÔÊ"’ý˜3*ë:kãíÑ(~Ê2#!»£§åb)J­íTF¾q ø«_±[Sû±äÕ°0îK¨½g“IoÆ&TÇÅ[ÉÀÏg'»ã…`A©ø´5¨†	ÅÙ¥ =Ìÿ•—Ùç)kôDá233Y wæÑQsýJÅ•7¯¨h­²×Òš¯­QÖÌÜ q¡tP_g8‚5þ8hÔ­É{ÔþZ~WÍ$#Û½š>kçÛŒ³[Ê„ÄÂŸÿ»Ÿ\¹òÉ
ÎýŠ7‰oÈd5´&ÁeÛôŸÏN¿ØÒÌåð––§§Ç‰=ú• ia•–Ú¯!±›×vÉl£ï¾›}÷ÃW^ùðÃÑêÈ¾¡Ç!#?#­åÜâŸÿi/öb/~Yj†-£~Ò®#‘t:œŽÐnmÌzmÐÚ š×0–Û9TEyhØ•˜Üq¹Ú5ú”«s•g'&Î¼m”5{ßmÙof¤So4T7W×9Ÿ|ŠXV3°VP[5”µÁ½UB™a,
ëjã)8ÍD"Ç¨P]@LN$“ÉtÚ³™ä«9aÍ9AJX{pkcyyC&ýÛ X® Í(jõ×dUàPœ(À42Ãb)9M]ÐJq"›Òœ0'óR©im"9qñ¢Ïj¼÷ÀÚÓÏ;L$0„{Dä÷ôë|xÌxô	Èº¥¡)DäFv¥hM¸ÆÝLqÊ7›}¦h\'‹Æ¬Ü’ne§á(ó.)™ž£C±ø‡©4²Óœ™Ï25…kbM¥h]2Û…D¯É8)ˆTks‰†›qœxo@Ž ž86
Ànú–¥®ÍíXŠ˜=sVKÓ¶ŠØlâc¯}v+b5Kj
™Š0J.’¢vZò|3Q¤ž€¤˜ Õ	DÕ`šlFt3fRÐ¬c¿†3§ý
 IÞ‘â9‚—"ûÉ>¾ÙÂZ”1O÷bùõ—›Û–nß4™Q˜‹XXS}ˆD5Î“ 5Î•ŽŸÀ¸š¸ÉÔÚ¢‘áµ–²!;›ÛÍŽæú¶ƒÓÀÚ‘õ cûA®m>{€H¤´ˆJÅÇÏd¦ÎL&3üÌ™–˜Ü§F2BX¡ÛËs}½‹³Dë±ÃÔaë%‘VVõ?8ú²ÚÚ¼ß›û¥Kó—	IB¶X›àƒ~ü#Y‹k–ÇìÊø÷WBšcÎú±ÒÞß>¢ÛÁœ/¨iË¶¾6cÖžf¦„Fñ—vÙ›m•yÖ&o.x9	kGŽ¤N’©ßO¢¤ß“PV?.«hÍöV“-$®ZÈ;ã#Gj~I»ýª´QXX3"“ƒ/Tb(×9dã°Ö~Xºs¼VVâ#aÈŒO'ÂìyKGzºÙ)ùR±ó…ÿ²Àœžn•5†ÛÛzˆ;ºiŽÏú·Ë÷?‰i©y
PÑËÐ<­_nÛWÍÛR·wÀ¯Y#)Ò®ÍÊpÙî€É,®yÁŽúB¢6ØLRšÐÌÓÖª]Õš‹ÝíÕŒ¹:¹ÆRØpäã,ÚiQÁZsîÃÁ˜P•Ái5£†?(XSiÚmÖPÖ|X3âÚRâš`­FwÁ#ÓbÍZŠ0&<G,ÖDoUþ¥ßÏUå_¬s¹a£ž½l@/¶Dj.l¥šóè'ÈÈð_ÿ®`ëG™ô¿~?ÓMÖ¸òÖ•~K	Ú^ÿdB’°F|ùÝw?þ¸Eæã·ßªõõõ­õõë[k~|´ž,?ü~m9’Oçk±‚QZ 2Ä"±£‡äUûÐ©(ä‚ñ<RUAEj…dr$~¨H5æWµtþ„°ÙTL¦žØäí«.­»x¿‘x	÷«>–Å#š…4±˜dŽ#B2Öì1%lÝ”?kÔV§ÄZYÊâ¨lhßè±"ñ2îÈâÃÝYÉvL!½¬™“ƒŠo°‡ž£ºxjZé¨éL¼‘àPbjutt(Ÿç?Þk‡¯¯+++°šoéhé£S‰LQÌ¨l ’:ø©+„»bfWÄkÐî`M™¶jÉV¯–®¨ºÑmFŒ–ÏHµü QÖp‚yó}£ëkVZS‡,FÖž{öÙç˜Tž{Vb^Ux‹X,ã]äi8Ìw+«íxBz¬æ#¸ìÛ÷á»ÀÚ‡«ÉÈ¾ðcŽNZã^Ij,¹ÅöcïÅ^ü³ =Xcº­Ñ›M–c6ÐÖ˜®êqy@GSÌ­‹—\sòæPß2ÜCØTn‚CLBÀšu„dQÉjœùž:Õ®Vfºxåƒ_8¢ZWY]Ðc=¤J*‘©àYL^&÷‚eFfö‰‹Ò¡¼`í‚Zm‹—x±š`MÀd\ûwlûÿóVÓî"RÑâq5Ëjæ¢oŒE‹Áð™rÆ‹måê˜áãê#crïÉA,öž¹x0ý­5ñ²¬†×¯ïF'X3˜È{ÿÁ£Ï~úé¯¯›ÿ»—%¼d~J¥àa,HËÎ2‰áµ-¬Án¼°Ö],YO'ÉÅ,á]ò,©˜ µÛ@òÅn9lvYåBª^›W
]0ÈÁ?°f„µHÆO¨6R—­Æ£¤wŠF)TKYHB¾ôèN4#´ÎÜ&ãÝÊšt5‚-`Má™‚•0Ž•dÂád>9š!¦21eß†{j„_èS¤ÛvŠuü™	AÌš@Ö’—mÖ$«:Òå‘ÀZ”Ü¦^æOQÖÁfÀ¦ÀŠ@ øÂÝ»øDÞ½yç49·Ù¨FüŽVªèÖˆã'>:¬lÂ2Ëf,ñêç•±º®á9¢ âjÈ¶Ô gã»v†ÓLáÄÄPfj4Œ„©Ÿ9Ó‹¨vv—~hª5‰køøc2BÁ}æðÔª!¿Ÿ<–êž»{8XcíIkvE¥ÚíX¬ÉÒC8ÅŒî}<·²26#NXó[­¹*5çiŽX’s;Ø¹&kOˆkva%´~jlÙwMBe~@eZZ§þ\JÂõ³ ½pY÷$7§RÛe™Štç'<²,“©±å5ÏaQ»â+k~›5‡kºùEk»¥µõm[Ûå©iNsõh–Ñth«±í`ÒñŸ´ƒU‚5ÊíHxDµbÄ6Ï¬Í°ÞØðž¯µ{y»#¸}À{½“³*£ÿNNØshÉèñ$HGd<<h`kã§¢©2Nk·dAÀd6)’Å~xpc;¨‘˜emÖ¶›vœE«UÂZ%­!¥Åêl¾yè‹ùÃš.ü±®„5î^0]pQÐ60®6­®Mª6-€5¬ÔUêJ†rõUMFŽÖôA²¬ d¬9\SÈRI€ZÖDh¢5ÁšÖ’…+W£¡ËâK‹ù\âåÞE0mx‘æ× Cašú©jäAjªYX3šýÔ¨iBL§Ç™mò#“gòš.	Õt¡;ŠHT©àºjšâ[Ãj×¶®o}ùý÷·¾ßÂúñÇ/¿Ÿ//±¶öÝÿ½^n/—ûåÂ_^ŸGˆ
 kÔeÇÆÓãó‡UÉŒ–FÙšóHp‘”4HsAPsŠ’3˜nè2‡©€¹¦D%š|ˆ¶ nÄ‰Þ8(â^œM%âê;3k¯Ñ(q$«	C%lê0É§	rM¶I_)Ðéš]³ÌX¥µp‰|o_`€dÇî"ßŒ)8HÄÔÕ“óÌ$ÖHõHCÉ"nÌ´XKa9¢ÝLlÌêê¨ìËëËÇfnm®`Þ¬UäAºÎØ
­^Ä¯Lyè¨Zz-ÎýZÊº›1Æl mÈkî\Ež‘»ª:)»¶vÒ°ØÖ¦9ìò‚·þó×Öè¶ð¼F,¬½A"$©ÏZXãlˆàú5»˜ÜèW#‘ND(^˜iËÍ†„Ö.vXM™NgVG÷½+R³´¶/òîjøñDÈ]†±üc±'­íÅ^üB½ ÓiSÖvY,2HîcT›kFW#ÚÂaÁZT-±Ñ÷™£èg„o'b›ëÃrÕÚE¤#U‘‰‹o+Þ¯U°šÍTž`ƒ,#™¸Ã„éeBÖJ>ÖÔí+›Å3	NkÁ†à^Phm…x²ÐÕ6GœIÿ ”žH‡’kb5_XS›3çI¤ÿQ®½¼^®•9?¬Â4PÉšÇGÖçòÝ€mÀ—\m-SÆ”ƒ¦jXƒQÆlqyl°vá‚X_%$ÊåQÁšXíU®ŠúÖ}÷ÓÿÜú·cÇfNÃ³ƒ0]Dt±â¨—4-’)›¹EÚ6Æ³*hãálÐ8”/=•é/%ƒåeÙ¦ypÑä¢¨ž ¤¦TÀ_–@(
9U.Z#JqOéwgtB–ZöÄùÓ Gš!/K $ÄãªÍ¶ÝåÁšË‹”„æLF¼â6»C¤fQM¬6ÅÕPx$3d`mt7™¡P"k¥LBŠ\÷¥¨Õ°¨ÑB¢Îù-9E4êá›Žt²ŠÊ
ÇZÿótt6ŽÙª6ãü¯Wn7Î_rô×!¼o*ÏH#¬AkÖ’•|ûÙFY;~CÈÓ¤Ab)NšµËbyL¦ÏQÃjT²ñZìå]uqvLlmêÆË¾—®ÎÆÆÏá9"5Ít\›ÂcejjQ€¦Ö“+È`>ûËäÔÈ{ó3ÀÚaiEÈk~ÌÖ´”cÿíÛg!ªÑ[{ì¼Êµ“™ÓžB¸9ìò…2³"XWú8”S¸ÄÉÝI•Z© ò(ÅiÖ²_wñ—‚g ‘Q©&%Í†£±IKm²úZ…e…²öLwŸ:¬É²»Eä¥‰ÐÌòØá{Î0p]€ÔÑÚŠ%µ'iÍëŒý3ÊÚz¹'²ß’ J;ÍrŽÕüKiab3ñ˜³mä5Ø²`&‹H­l§…V6Òî>|Ø¼BàdßÐwÙ¿mùN,çàpÈ&¬jY`ÛØöHLC‡}£¬ml—wœ-Ë,,çÉL¤ß<¿LµZ¿Þ…^Ëéh•lMHcõd¤Bk;…vû@â»gÅ5…šZi"`då6xÁˆ»ŠêÀ£ÄiÖ@˜‘| Ãº0‚¤FÎ~;þ±Ø§ë,Öú9Ö¿p ÁÁš‰§(k·”¬½ð‚ƒ5‚ÕØtAÒYöë®Q¾*tVN³/6h³£±¬	Ô¸;UCbñ•RCQã£¡sŒ
î7Þxã”ýnî§áËG¯"ª™ÄŒ Aòã5ztZçGReÏ¯ø‘²µo¿üüsPm~ãÒ:ÐÆ­Ø(/¯ßÚz´V×¸Í?uX>ó·æÔBLuµÌ½DNáHT+Ø‚L*Šmàè¡¢Ù¬Ê3½ÄÕ$»C–Xlò9 ÔTÉäï‘­¬¬®‚`íEk 	©n@Ž™62õæàÅX§ÌÑ_±™?6¬q¤U6’‰©.šÂ˜ÁÔ¢†¶ùó9ÞPâšÚeó~âL±hœ‹_¬þ7Ö—Ob1²I"$éˆ‚µJiXC\ÃÊÌ<ú£i®	+÷Ñ:ÙˆÏÂ‰Õƒ:AÑÅ ¯'¬WÂž1¨îaUÍQirºn@0þ%k@âBº¨…µož?}â!eÍBZZ›öŒüÛ£ÓïµÔ´µ0“§-k2â`¨÷iÍš¹ûŽ#á	\¬ó¶â­0ãŽ<]ZSäŸ|5÷¤µ½Ø‹_b¤³9amœÒµ¨¶¤žu©<'Ê _›ý(XãCLÿí¹9£þyÔØ1ûê"ª"ª—¶´vÆ#µ
V;¥hi®Pî·ÊzùˆÎGø&zÙ6Ø½`Œ†WÜ†Þ¤á=’‡¡ÕšˆP¡©–7#€%˜é¿Ÿ?oß`«}ôÄäªÆ¼$Èu¼ëû7bœP'¼«ÂÜØàº¯*‹‰*êçKðNŸ™ˆ[)6â”k½™ÅÙ"ýÝÞFXSÇ Á¿KÁšjÃq!…e‡Õx_êÁï/OžœBs¥åUª6°6Éâ(I'ä‘Îäÿh€K[À¦+•Ý¤L²?E¾£d@Ï(n(vÏ¦ƒrUf.TðT¹M–h©" Åô`4'O‰éj"6¹¦ /nSïRƒxYÌ™¢²/f¼†+[ÓÝQ›‡$;4%kž®fCÃLF·§2IÌE¸:ÊUÐ¡F‘S›fB@°.‰g"6Í¥
9…´ÔW÷ÀfÍlélcÓ–Õãš%«ÙŽÚ Yû.XCNk7°¶ñÀ¨@Ä{îîÍß¼ù:¨ÆŸ‰µñÜEŒ3$;sâô«”P×†½1}pÌX‰tÖ“u‰O
k¬h¼Eè¹Îz°}L³¸.ù#Àuq=¤ëYÂ¡5j¸‹€fê375'“¡Yï”vtÄi˜­,HÌû33ØeÌÝ›û¡j›ÎbôC9ókÕ´à¦T­&7ÄizáÔµÃÇ —á, ”Âê‹a,eã€ÌísGºw	ZÞÁî”sÖ‘º×ÓÈÒš¥¹X³¢ÉOÍ°îý&&Iä0ÁÂ;jU6³Ï¢œ9â‘Ik^ivNí¬É¹Ÿ`!ÈyÖžÒ6Ï/e¹ßt)Öþ¾$7B0Ek~äŒjÖ¬	˜¼@FèÃˆ(ïÐšïöáÆDÙÀp%8ÓköA°,v;Æ1vÂqÇè±ýŠ£æQÜÜkó-p.VsæFÜ¶ÆN.+,	4õ@bÃæ8Z©­ßÁÚÆŽKä6gæÛ:¬„HÖÚg=ý•nP·Ñ¤üGxÎ°›ÌÎXÄ­j‰:ß’`Û3‘˜F“miP%wHÆ;ºfWuW×U;ãØ‡èñasæ\ßæB[Õ„hëÆÒU¤5…ñî¯TÖœÃˆš±ÝV8Xs¬¦•ßõšÖùPUælKj(íQ”ÆÖN±c/ÙÖ×&h»¶oŸ™]CÐN˜áOÏ¾¡ïEßß¥$5º©YC‚ŽêÄ5µïL™šä4k~üêË­ï¿Ø¢#öúür$´~ísš©­ŸåËÛåùõ[Ëápÿ<¦2Æ*ÏGÔ§eàPmˆÒe¸9Æ”›Lr‘d®€ä!â¨ m€E`@cõZS”‚Gâ„®Q¹²šÅTÏF6O/
Ðºã&õdŽ#°Ù$emL­`íåYB<e4hˆ¸VêkÄÇ_×>æ²¶Šƒ_¥¢RJµÄþÕd	J.“0½Ø˜Þ²ò9	Jª¿ær#TÇD&cŠÊËomnšlDåAVJkÖdD°Æ¢dHh­F×Œi©œl"MÕ6»–\Ç:Bv:ýi;L*‘•M°¦ô	j$I1~#cwñï_ùteé2¬FÐ›··~*Z3ñÞsüÓR›fiŸ>X_£zm&(§˜	Î|&#Ø0°ÆÈ7ˆì9‡
—¶U'Öj£ú«ÃbäIi-òtKÈœpmfÏ½/öâ——	Ÿo;o-FÒ‘´ì´Žµ‡Ñ¤­õhÝ&1"*^ã/[ô}h˜b5‚”n.mºFil_P:¢`MqÆ,ÝääXòé›7vUÅŒ:&.šåk"‘êÁ|L»åò”«1.PÝ,e+QËåC9Z…ÙæÕùT£4œÆKÛÄÿóçºÎIÜ’#™lº>ùþßþfaÍÔfß_›	4zâi…F(,­©ï3MXÁršTÚÅZ`fc‰{Zyàèpw1¾J©š‚÷6V-mVÓ³˜n-«j¸‹l.'p²S‚¡Õ¼:tïS2£\ ƒñ,õ%(LÍ²!.”5•¯Cã"«l‘ò4–“è­)v³E;6@oÇQ=ŽLÇ¶Šà¸ÁwLb²`Îì“ÝHIÖ‰ Çjà<Wà‘"‚xzÁ†‚5ÀŒïPejÂ:µÂÒjlsÎb„š(F®6¨&XƒC°;ô3 ‰‘)IÄÊ#"CtÇf”ÄDÅe8Øp…“Q§Ù¶8ÖBÈ²KÆ#ŽÂŒC$…=Í([–ëºXšd¦‡u"ÆéõŒ	@§gˆ‰æi%¾¬Ý|ýÎoäiIíÔ©ß±AÁÈÎ›>ú˜xUV¹O·£!œqÕ¾GMÖkí6ôvQ4A¢+ÊµcãÜ®†ÞÂ‘‰ÿÇÞÙÆ¶U¦}^Ú»+í·GJ¢¼Èr´êWI‰ªa­4cµ²±ÝDVä;¥5z„Ü¤	/…RÚ2¥eh‘v:Mdfy(Š2$eŒ:ÊHÍºÍî2LBÕ‚<³Œö™Aûe¿ìïÝçîI6ð¹°Ï¹Ï‹m’&¹Ïïü¯ëM³;™¨ŒŸ|QjÚµÒÉkW®•¤Áš9fr;Bð¦6kˆa§Ÿ”tE‹‹ä:¢™¬A_Ö”-
Öæ'f>rÔëj:áŒƒµ	õ/¶Ö(¸´–j,ÂƒùLH¶5ÖFÀlÁ{©gémoF5·´6_±vœ– ˜
ZØÍ^Gl÷jÝÜ	lå¼Ï¤2¥ä›Ãw,`5$µIåB
gÍ-ÓÁ¹UdÆ†<Fæþó«÷’ _ÝÜgÐ`«Å¸æ•5çØHb´´¡“¢/„Ë{Î
¡=$Ã3‡g†oÖ 5 ,€8Ä4C;‡r­I¶gŠ3g£S-½CkªuF W72‡#‚5/Ú æŸáG:®5å`}¦6\£6	Iwjþfc‡j+¥À™ú«ÅZÁ‰¬­4#$ÅõŠ#D×JÓ	gl¬YlKƒ»b[ê¹Þ¶^C6kš8
I­ÕãªkdGkA¡ÐŠsqì§<ˆ6ŸAÈÇOÎJŽÔ¯O‚Ò6‰`‚­£kG×n/½é•5¡Z(¬)l÷’r%×n¯í2@sæWÿŸÙq{i8AÚcéŠ(Mxæ¥4Öâ30Í•kZxTSãëaZ_›£“ÕÇŽ½ûîCï½÷Úk†jäbÐÙñÔ©SocýH™Zð“øqû˜ø+§Yî£¹õÓöúï×××¿üvýÎê­»«/oüù.íÐ§³.6SÍVo
¹ÑšUÅ2Ìo’×¨ëlÆ¦GØ].WË•:²h¦`éÖàR@kõ°6Å¤ÅÌA›4	f[Ìcg•í!÷ÈYä³+tØ1ÛÇú,Ë	‰pºHé,OYgõñËÌŽ2o©MÓÂ¸ö–³0gf™U²yÚæÐÄM©!XG–PÎr¥<N“ºß™ÓHÞ‹Z¼¸¦8ùÕu2Ö66äÞ¿½juVÞír.ø“Ý³«ÃøàGªÙ‚µ¤Ê;ØéqÝ+JÒõ¢¯è­ Wc.—HcD\S¶}aù/½ôêÂ›‚5à[ÂÞƒE%Ò˜…ýï¬YKìZötìÙcgÂ²ÙZc¥]ç<¬]¾zõêü¼h-”Öþ“ƒµCa¤°RÒÚvTó‘å¹#­íÄNüØâß©$
—à4Ýk,Èr¾k—úû‘ØÔ[£3Ø’£–TŽ•8®EÉ6æDÉmAŠ
]®YiP²vé2ña¨—C\ÛbyŽ¬üO~þôÒsŸªeQ©p/¨­-™ ÍÑÚ8”5y-_&³Í'/sýr¾·ê¬€¢:G¬ZŒ¼va-·Î¬=.]Š5#&<>ÞùÃ;”s¾D…ô9¶UÄ%›DnÎEÈ¯ìÒ§ä˜Íœç%Ð|©UªØÙ˜,ªôv+–Fæ«¡¬Móå!Þ¼›„I<¾ûîÎ\qßÀPè ÑÑf”.ePÇj™ÈpqÂIiÇ5ñ¬á*¢Ka¥8’9Å÷,
šìDŠµìÒ·–A—S‰]Œs¾T5îZÖêªR#jL`òY–œWG@«¬ÉÒXMóhúðt‘¨«¬Í`Í’mEhªe3„5<µðÅjŒñš<Ù†kt_#J'‡K¤?ÊW$hêÐ!ªÁÉø˜EÄiðÍ ó€é¹[1h%`ß[&˜õhÛeNþâ2;[A4›ûœ	0¶F¨Øï_xëÂ…O.<.×þÛ·™A-òás?=ç{bröF$$]¸ðœêÖPÖðì7½9Þ¨áà…‚Gþ#Ñßc°Æƒ»ªîR1™´«Ëd{ª2Â™.*]Ã¬›B5XmôÐH‚ÖãbµQc‹dù–ÑL]ÅHY}¢’g“mCK« Ç³¡?k‘š£7`íö§¬ÖäÜÓ=²Y,ÝMJ;0j¦ð©ŽW|¤í
ÁŠC^F#tnèiGœô¶Äv(zú‡-®ý©0˜“Ó‰ËØå´5¹ˆÌ²b§E8 8î™Ýò@…mq!€Ò>³8{–œG!ÛiÁ¶7Œ][[{“ï5kË¯zim»²¯m·ƒ$¤¬!¬	ÂB.Á
KÖÚ#Ä5Âd°&Ñ!:
Ö Y(†5îÀXåëg`³™É§»5I.ëŠ³3œ«Ê¶|«©R±L¬ámEšä¨EB§çé˜šüç{aË RÆ–8gZ¢]öUzXÓYê¦óÀ9óq›4PM…j+$FöâŸKª$Ý×Ì–)å¿m!«þ{5kæóè\ÛÐáY§fŽ”¨msÿkÎÖ¤¢kLNà2Ñ£@¶c?ï©.3¬Áûä8¨å×ž|òÍö]f÷¸Å¹k›µ%¤5¥AêBX˜¦—þI7¹Ùƒ'"¹ÜùA1–„êÓÜ€xFüÉêÔ 5‹EjæýøaéÈÅy&,¦BüÿUS­óçÎéÂuS;…o ÞÖM-ìÎù¡lFˆÏþç_)L»{‘tS[¿ñç¿^ßX] äÆêÝ7×‘”“©F´õm3›ÍÄªÐZ£+56ªÆ”=’(ŒÁj;ÉŒ«âéQ©rÚÔáUk‡ÑXÐ[µ
	´FÝ3´d°–NOX02´<¦ ëF3UãOE_:;ŒiÈÙ¾Ú¾§dV\„Ÿöe²ÈeÌKkiÖ^,GrˆhM‘5’EÐÑÊÃã	þ@Vu›Qw–ªkur¡IÁÌ
)ªÅáJ‚"¹:ÁÕtë)—;€éº,›ësë¿ûUŽ½½A«µmÒ´¦TH»º1‚4«ÝÝm©Á¡)¸rðå'K%½ÈÚôÐÍþ¬wQÖ`Í`ûbÖ\=q»aù›—^úã§Ë/½Dó~-X{ü¹ÇˆsæÞþü/ùžâ¼º®aå¯åîÆw÷€›”5YŒ¸Ød²šÁ—\ÀZ@kT­9-÷ÃgØÙÒmÍKk?\·¶#­íÄNüÈâßüSŠ~˜ÓÓÉ„¢P˜.P{izÚJØä¬uq'9‘+8pR—5-]êAŒÝž›GY8X³¹L»À©]ÐÚü&YÍ³Ú9±ÂZwÛCKqÞƒÈZÒc™M‘¨*RÉô]Y¬Ehª•¬l-«“ÓÕ\y$ÑÛ;r‘®kG‚È7ÀÃ±é- ¬æ“ kTŽ­Ÿ)qåÓò„Ù‹Ds3ô­jJ®æÔ”Œ¥XJ¤lMž ¹|4«q©œŸ¯Téwl°¦^Ø—.iþ¥Š	QO˜øˆ™PÒ½”OÆòóïÐÕ&è Z Ç’lXDÿ2ã©N±Fæ8¢Ã,O
Ø¨©æ™iX;.r ­6bÛY]“ùoé*±¨{ßY5/&È0ÉPým™’¤°ØÄXLóÅ1ªG‚´GÌR€5«ÙVéžMxœÖÈ»ùØgTf–}a¯5“ÔtÐW¨)i¶´Ðš# –ü;R³V’½Æ0ÿ’ù,óÍØ¡‘$êÓÈ˜JNäæ•1û X’Ë”²«_Y†–¾Ïqá—á@æš©I9Såš½È@N‹!gNµÝ„Û&vàÂ…{>ºÀå¸¦²5ÓÖä/¢`¸}á¶\ûO)	R®	6+›ÖÕ‡_P|³ÖÜjóFž%«~›å™L“Óm•îÌ—ùòK£WÌDž¡ÙÚp¶7/È…g´ŽžØ(k°È‹'E$Œ?ûúLâŒàkU¾‡ÔXZ/l’I€µ9Ò$¥«¡&‰âèÅ&–Cl#r`Ÿþ±¬!¶ç/Â-ƒG©aÞ'„DÈ^áØ8.TÖ8âaÍÞ „5±šG:­ÌÒV
Û#~³3}µ†¾hÍŒýmÉ˜`7CZ7]ÁµuÆ`Í‚üÎ+¦¯§ÙbÒXÍëš v?Hk/m%5–¬4ØÌk„Ó3ø‹±¼Åö^OOA~í!‰ej–¦H!°&Z˜dÃS•h(
MN‹Õ[“éZ‘ŒÙÄVÈlÐ›¦·!¢ z($b‡[¡Õˆ8tOç°9dkÈh–ý:âi/ÚÛf»½¾­ÚÁ¶GpîÔVL§²¹"eM°Æjèº"]Mô1ò![Â±ïï³¦vjÂ5Ÿú˜ÛÌXDÎR›!•±—ß![³ ¼ºÅspNÕAzøËæŽAÌôVº1ÿ‰k²"ìòt	Él×¿ê ë¯¹¢56‹{°öØÚÑ£=+Ýè®X- ÃÔpÉ•l–Ù©œHŒbÎ”¦…a¢Úë^TÙÀ5Gj„@Í²çG0Ë/L_Vãëwß{P“õ#¤Fp9QÈBðš7ËžÿüÿúñÍ›¸ó;+‘×±|ÿîû¿ÿýÝ/7îü™$Hr ¿»»¾aüêÚÝ•B²17k5PYLKR–6Í2¦Þ-©ÂtÊú·¤²™h¥
'¥’SJ€¤€,£~Ø rš%åG³2á¨h-£{Š±ÅEÁOëuV;ÌpBeÖdP$ ¥1·ë–Póq¼.X#{Ÿw$›ñÁi)šZ•ZbŸ™ç õ­Éáð•­:2 `ÚÉe;Åmûö¥Ë¼EÜr5Z¬•ÊîgN_M=§©¶çJéz'íDc[wÄj2ïFäÞ¿Õ²Çåmð£c“3Ê à¿W‰Üºfh]%Ü½h»› 5wÈÙ€$í@Ü|$ÙˆÇ¹Brý#ðþæÕå¥W5„5Åã“ÅáZ­/*ÖDkrÑ€ùï¡ÝX¥šBc·Ïíaä£ÃhíeOkÂ5ÑZêÃÐb„¯ÁKk?\·¶Ó{'vâÇÿöŸ
…±‘1tµÂ’ /)ùWH`íò`Á2¯Ö¤ïÛr‡cµx ¶­ÈãVA‡œ¤Í¤<ôœ¾­¹xùy‘ÚüVcr¢¢ËM„kðYÖMÇ–õÂ_‘r9Ñ†ÈF—Æñ‘ÅˆN)³§ôüHobäâ‡ÃGì¯¦Æ$¯]¾ä ¦ärû×Û¦=¬ýá«Õê™3«ës¦ªqqà¥£±\žé€‘ˆ].tZÍ|5š3X«W	°²½Q,ðôFªU6¡5÷ÅÙgË´ÿ§ÖMÏtµ¯”z)Iïî³–&h6ö,Vóf[™´´hïð€Mz›àH;™04S»tš
×Î*û‘Ó¡70ÿ¨3Tõ èoìc?#$H¡Cbã†·@ŒŒþN8ÃJ>“¯¥Ý˜dÌ÷Á_mÉÒ5=­	×®fÍ!k<ðtaÐfI£k.7RaÆˆËÿøÙrÒÝ:ŒWh‘§6Kê€×”$ëQÙ·š={¤Wª  ý¬Ç›AØ`w¦FY|ô(³k ð$šs%kš?@ÃjÂ;pþ6šÜE‚'šhoÏÑe²¶ ºšlÆ“Ê7&gµþ~ØX3÷g>ßc5$b¤µÁ±'Ö¸G»R¡Õ˜ê:ÎIÉP$‘^ÙqàÀ©ìPhíš`í¤D#åûÊ>e	|Y„ÕkPÆrÕÚ¬­+1‡4·LG§'yã™>À_N5ÀWHmzÂºû,|²¤åõ7£3=ÅùR5=·ÂÁZ½¯uØØ,ì¿ÆZ¡*fs4r³!¬­é÷"tñW6ª_úZù>54´™ÏDk„¶µv±ŸeÅ7aùÍÕgOk¾'¶ï.¢ÕvƒÂ`-”šjé±.r)žžØ"BV3´b­b4ib¾µÁ•gnÔˆ‘ßx0å´•©‰~ïó–É"e -Fà[¤zhÙÌnÂhžûÜN!”…QZ+ÚB¤3e-e‰ùs½îæ…4íwÊ¡íb©HpâŠº`7m¤3e™¥…¢FqªÚç~h¾ˆÍxLXƒDÈD2ÙË–†raÖIØv—žFdŸ­Ö\_³Öœ{º:`YcC™§·Ûþ6;VzÕdì×®+Ëº]Í­…¬¦XCÃÙß7¹vµj;*O\ÖG_yb<1üÔh{	.CE3ZÓÐÂ‹j®yM NM ö¡|ƒ-ýqp/õI²éÇùñB v
P3RÃ£ÿÖé…éJqóÆÇÿ
«ÉJÄÑš´5Ò"¯ß](,®ßüóßS£¶£’ü·±~k®+™XýrCV‰J6…¹QRÍSÇ¦±LQel¬’íêE‚¢b<¦û|rˆ$bÚ€ÔÊeÜ£¬U™evUƒ§”­_Wg5bóáš26XNÍRV]´ºè"¥el`l›.*~ŸýBÏf°­âLW”ýîBâÓ_gö‰‘Ëâ`ç.æ·…á2
‰äI¿Pµ	r9ö¨[@‘‹„HyØR÷k¹ü¨&4HÍ~îJjE3\R·¶áRH”©»Jö£Á#k[¥5áš’4”®¡è]Ì'¨bºš±víÉAB)¢5ŽžÎ½þ¡[‘xJ]ÙLYë0×ÿ‚nhÑÞµòéòòo¾Y^\þ#ŸMÖ˜Sžs°vþ5B¾ýÊƒü‚80Ôÿ´ÊØ(‰~oÿþž{Öü Z·¬™-¤Ø65Å¾¤»ãÀZHküç’oCi-°ÙLk•mâZâôNcìØ‰Y$7ÙÆ¦Iƒ”ž†_ÿ±¡AnÀÅû­	ö WÁôƒžnm3-ò”®´­´KZSXÆŠI©LÀš§5ÂhÆ³šPèaRädçVR¦õu¢Ýä9ží
Lªt@¬6®ü˜lo•äÈ2eùað-;bâ¦¿¿=?F¤ÐóHTäCûUGŽÛ[›,>@5fÀõFgynýîjËÁš’w,¢šØ’Äd_Gg$†Ê&€)¦å*B°Jç{UçÆ‹z³Ì#ãûÒàâÖôÙ_|qþÁ‡1^~RLÃvØßýá¿'&ÿrV#D8²s,Zš‘¹pVD–gBcÒ›Ò&ër1-JÔkœj|–ü˜9þ“YšÖì†&ÆèªÑ«F'Ôf)ñÖz‚³dáUG2$‹ßlµ±¿dN…ÐôååÀ4å(û“Ò’(¡s¨SSd,ŸÂ‡!ª±¥ r=ªXceƒÞh,k¬½ÿ¿Ug(TÜ¼a©JÌ<Ô¹§u!2Û½»»›{ž²‰ÇÖÐÅ,WÅ$7!™i0.qmÏ Í%CîÒ‹lã­wïA¥ë·V²¥õ÷[%Žûo?öÜ[®ZM°Æ<ê{bÿÖÇòéØö<MÕÚþ{v"àš$»!·~	jÚ¦q¥8¾a˜Ê|˜JNÓjp,Õç×+YIc/r(^ÇžÄO„ÄÞT¡R:4Rº¢ ùh%Y–´öâg$Iž8y‚6Ëù3:¬Á!Æj
¯®-ð¤žm	ÉÜEÈ„<
¤IŒ£Òmî4âAŠ*dˆ…¡¢qVèÒPW ŽéÛ#™w[¡q¨Î…~"[`-€3ÖÅgÆ©¹§¯IÚLk³±Ô6¬#he™Ñ)ÆÇ_‘Ük’G|ÜÊÕøn|m›Ys‚¤€ÄÇµ5k‹=GåÚ*Ô¶±]Y³ÿxh½5Ráa-ÔÓˆÍãfcS5ÏKÊT´`ìpÓZ‡§Äj¾tÍ­bÔÖÖšÑmÌbÅ4¿õ“F\ò'Ö,/’QKg5%ÖI,#dœâÆKuTH»Ïp¸†¸º#•µµ2Ñ&êÈf\ ”`ã£,$¾‘õi€æ«Ž%ë=LÌGreÅœ&Ì>½×ŠÕd]á#„5ë§Æš%áXMûmŒa<»S–JzÈätÁ)g^bk÷5Ð–{áøÉO1¶Ñ!ûaw}LS}Ú·wkV’Åþýñvó†lw÷+¿ÑÚ¬ù¢5…gµ°'¶FÖº•:éd¯¬µ'®=1
Bf¯½þÔµ'^b8íJÕBiÍ`-è©’š,Eþ#ššú€Ú,ñ+EÐÔdÒÏTá$5ªš<©iºÂRÄ¬‘Ô¨Y¡š\Y\çèÍ›wWñ[7þ|ÛRTõ…ƒÍÕ…Bbnc£‘JtÜhD jKw›.†Û²'²ÑH¶JÕ÷ØÈH²2c\­ZŽ£/UË˜4ÅSû‘º(£¶úWæ¬:BWš ’Ã¨¯fvÖH|Tý4ÔršI˜8Dn‚µ‰+¹>ë*SËT‹šØj˜+‹¤/‡Ÿ¤æUÞ»~KƒÔd“®dEjUòlFójÝ–Ö$3:ÁûU³i|¶ÈeéL”ëš‰!³áXNýO•ÜÙYBæ†q…„ó†ÙÍ66–? b-€µÐÒKkV¶Fá3ÀÖAÅã.yCR€Ot)kÓ®^­‹§Ý!hw£¶¸µÅ¶{×ê;K¨­fSmóƒŒë~#Ö" âÛñû°7áß÷·Ÿžz„Nk
„5`ØÿôÓûÏ¿v^°¦Éäé/Î©pí¡Ýš	=¬yHy²ÃÂëk
J.u®n¡5¡ZP)ybsÕ¬ý`Ù‘ø÷;ÒÚNìÄ*²‘â^Ö/¹ Ÿh\·…À3†„¨ÍÈMSfƒ"4InTq3´&kÛâ\–J™¶†¡Ú&V{ü£¥ã¸@’ümuhez#­%m2Ó*nEd¢¬dÙ_î"5‘Hw^|þêÈðèósóPâÚØeL>˜È)xXÃBÙÿ&B°öÎFo£ÑÕµqgN„C5S™¬‚w—£T¾lîöv©Q…ÔHÑÌ[G6ïgÆA '72Þ7\šçÃ¯
]Ã€Ÿþ”Œ:n”â.â[¬!­ýý+oÜYÿÚñ­Éš	_æxÌøxÿ|'­Áh$› W²‰¬Ib¨ÅHT¬Í’dB<@LPF I6“§,4ntR0P3eŽöoTqVYMKÉ¢ä@Î¥~FëhkRÓ˜ã€Pù‹ä¾Z«ÝƒçŠ„ÁZ$çD@k~æ?²éÕ5Ò<­yRãaâÚpZÚZ¢m|¸²‚=M¢­½’¯$l¶91¶µÅ'Š˜õP“3Ò›Ý[d›0™ž:jylŠÔ9IRV×ÆX>Ù@BkNV³Vû=½§géöùý·a2Ü ]Pã¡§¿‡5r á43îwný˜Oò?£6=(3àØ±½ü®kjòOé^6IÆ^K&DSGJ•ä¡alÔ°]!†Ë‰±CG),üÖÒÃ‡’ÉRßY‡Ïœ¦Ô…CœžF˜»ˆ±š«VC52'éj´[[2|[zsqî(Ø¦SÖŸ™E–p¤­ù>6Än6rZZ ‰mÜü^ÅVX^á–$fÓîe@’æèhÍÔ¼ï#\È±eÎ¶ÒŠƒ ÖXOa=ÀÐÎ›m5fNÏ8-í4¡õÍ.£ÁnýªKEcCaû~eÁÚ‡7	X#mð¨³ª‡a\ÍÚŠJ»îyŠ„Ì}1V4ïƒtÌâ±™ƒáèQÆÐ$­&þŽ.\Ç´	f¢"LG®v,³Òâºv^CVø$‘5D~-VMAÞáLFi'ò™¨©¹›Apn*CV[Lÿ/€Y$Ö2Ï~N`[g[Ïïf¤!“~Þ>;x+"Èk™5ŠhLÊHã eiPŽ“\Ü3Vaø^P3Bë"œ›éM%X)`²d´1ë<,ó} È;†0-0–ŽQˆw°¦gþÎ``ÊYU‘NŒj˜ö³„ÖVtykUgm.Öà¡7Y„#!«Æj2"¹½Ë5ÔfÁt¤8¾RIdÏ¾¾%¤ÝsîW˜ÿ#†"Ä‹›H.Íóê§6=ˆ¡ˆª¶_#“àFZ¤&ëG»²ÿ]è("KGj<´/Y’ÿx÷æÍë,ÎÝÂ± ##ú^CB››k,Î5et³lJ¡ã…$¾cÕ
)ç)¶Ø©dËuÖÐÌ[&ƒËˆôO¥¢@¿D±h>W«	ÖbuÜÙ‘Éf‘ÖÃÒ}Ü_I—Îsit°ãj
¬õDsLW³¦Úr}2ø·¦3i5jS¯Rë¯M’Èl¬³
©»j¶­rÓ
¯bY^1ŒhÊ´2¹ºR8ƒ|¨°%äÒ¥–ÝÒÕÐÔêus,›\]¾uL3}`Ø.­©bÍÙƒl¯Y§´‚ðËJø‡dÝŸ
~òVÈ7ò©¹qyàè–@Òÿ²VV.˜Æ»8»;ß)þËrûÑ°Œyá·ÞR0ÙPýàù×~úEç¤¬™'kŒF†öï6_…¡YÈj¶ÓmkÃ'G"ë{£ ­½L¬…¼…´gzií‡y-µc1²;ñã2î¿4–"-ûòàåK—ÅjÓ2í,$C4ˆÇ/b¹G;¹¡dýHÛ•Žm
q_o‡5‚ncÓI›Qm+«Ñ¼ªí·Kš¡	%>f³ÀZÐÄ”¿¦­©ä'Ñ–¬`™R9CU]Ö²àþÀZu|$›;ò·ùtþÄÕ7à4kr&VCÝRscÕk+­ä›À¶_¹ˆw6×¿Zíu¾d–	ÀbL—â³l>ßÕk:[Ô@NŽ”¢µº:Že9——óÈ‡FŽ*]DÚ#ñ3øh*ò>Õ,ÿR®Ë¦«½óÝÿøzf&}zýÿÌL„qüøTÐ´%c-Þ4ï`-ðJÖ5%CJËÌr‹ƒH´Šäñä<–³LˆÜ›$TC@ŠrÏx€nœWÏ¹2¹bÌ”˜È\»µH‘P‡ouÆ.½Èzq¨CêuAøtH·{¬ÙÈýw…‡íñˆæÂYA*PX¤Ë09&‰eZA'è~žÐÂ¼Ã>¥?òdËÙ‚@dCHX3›¡`.1 äZa±[8pa’oÇµ~FqInŽêÀ6e&R¿f]×À8`MöKÌÛ2ïÿ‡Ñ?˜L¡V·æaM7½O}D›µS¸A>	‰Ö$¯©œº—ÆÝ†¸Ÿ®ñ°Îjê,€[O‚IoŒÎ)»çÚ38}¢Ð‘8I
è€êÖ0É¬TN¾8:^BcSf__úäø‰‘’ü!iØôÄvÚ—Ï×À2ˆìž¨¶’¹Pÿg)kkk®š­qFh7yz´8Ó¸¿10áñÊ@;,^s¡	$a‡¶4ÑfJqþ…ab¤ó•Th‰2lìgh¦Má™ñ–XÌígÀJDfšÐfÇx¼§÷îGD®k„8ýLg““¦8"3NÎ ¯M\=mªãäk.P[¬µ¬¿Þ¦¬yuíû”µ_ü3&#Ö¨NÔn9w 704Ê#H‹4ž‚¢Z­L$ƒ ŽAD˜æ¯Ä2MÙðKc›™T^¤‘œøNvé-½´5ƒ€6%NÒF¬Ù„Pë33ùVcrKthJÒX&ÐÕb`[k*ÖÐgÚ.“ãŒ[:‘kn	Vw_Lºug—ÙŠ°ÑlBq‘•ƒM‘XÃZ\Ã—ÑLdEo)”Ãr%‚y3í•Iså¾H@j<¶ðÙ÷(k½<5`ÍàÍhX³-®ˆ!±ÂŠnÃµY+â€­”o|0 ’,mdkF\1KÍ`ä¦"%<2Ü«êÑr‚ì&{±›¼c1/‘w”ßc:Ç{XÃªßãÛ>ò6Ýå;Ú:Žu—ÀæÒŸ­Ø,‡Iqâ)Õ©mËˆT‘šâ	E`ýøLHjhj"µËýÇDjçÏ?ìE˜¢œI?j§ö;"ì{}ÃHMÁòúD55¾^½EËë÷ïn|ûþõ»ë,ÌÝZŸK&¡²øâb[+AqÚt¶Jj*ÔHnÃ‘Ÿ«qîé&¨rõ#QÍÖ£•TŠÍê‰Je¬œ‘‹ˆÈËÌE |¢j¬ÆÜ”‹eˆ:ÊZ¦š·ä’jjÃT$“‰ŠÛ˜Ÿú˜.h$ÃÄ£&t
=®;|Ú«Âé.%ÌRµœÈ‹™ŠÛEÊÞ,2¹X4=på©ŸÔ2ÈvéR¥Œ?ëg®VŸ¯æÜDB ^‘N÷Õõ5>ª–>¦ùeA¶Q\Fbw‡ŽSZg¥RØ¤¶îim»ÅaþýŠG÷ö¸¼8L6ÄÉ–!É¶<-¨G3X“m©W~U™Ì^Âeõ¨§5mg‡¸j¢1ö¿,/¿ýöÒÚÛ/üã„5¥Aþœ8G5È¹s"5[pe¤Ñ¹óû&ö`@é¥5k®ÖãEŒÏ6áš‡µ=:âoØ—`QÍ`íå±-Úá=F*ßCk‰‹‘Ø‰•qÿ³`ÍK¸.õ[‡µB!› hMJþ
*ÂA¿þì´›ar\°FªI¿<“­|¬ýê	M,H„ÔÕ¶²Ú#§ÜÌÒ…FzC«_K¸Ž6m$¢Pï“èEmë¬¬YTñógYº:žŸŸãoúLQLÜr¶ýÏ)¹äÝ®4Vsq«ÙÄÞ¸7p%ÓEÝ)kèiºÕë«ØUK…Ò,Ûx!-ƒSarÂ¹N
æÆÁ”Ò‰ùùCGæùl«Wî¹ò/¹ÄÇ{Ù'A*þ~ztãÛÉ¾ÏìRvŸ¬‹ÎzQM¬‹kÐaŽ;í&§Ä¯£ãØ”‡ô@ÖöÑk½ANÇæL"ßH•ngDw‘¢YýOÌ"“¨Üu¡Ñ<ê´5§iIr¤+¯‘?Ò)êð\®Ï[‹ØB!›eùíM­ÖB±M›!ªù»¬ñÔîá¬. Æ‡‰R%•HÚOWNY³'ô˜¤r™ËKAÛ®8ÇØ0ƒÇ¡n†‚#Xhˆç^çÁÜgoêŸm’škÉfÂ±´´ôïG?{ëÿ0XSÿ›Ÿ{iMÞýO*~-XCZ»@ýÚÓÒÖ¬LÿÉ!:_wì†ÐìÑ:°ÁjjémMžÚ™ÛãÓÓ&t(WXK•(Ú hí$µk«á
YbÇ`ÍÕ¬3<ûÔYËîÃ¹½ïš’ ]Á‚øAò€ÎØZ°9\#´eÎ€0“£iÔúõ‰°¼*ê J›ì€×ÎÂ–×œæ)ŒUk‡!¾ ¼a¿îèaç‘³hÊ™HÌú]Ó6	f5~’m?ÏYÉg":Î!BRÓ’>lÄ”Ÿ‘šT»+8õO|F¬a2R½o¬G¾f2#ÉÕñ×Æjöü­‹mfzÚVÈj¡!ä2ÂšX-pP´!Oã²­ÊZ`¯ÉÔcbµXI«Õ0kª´¬F´jMÊÙQ™uô/8.Æ¡–`-ÖŠ‚Xìç‹Õ¡IˆÆ$gdx]oCTRY‹ð°ÆËx©í…­À¸†`°BÖ"S1ðŽL7Þ¯%`ƒ¸ØÕŠFÌÏ1ƒÔ!öC7Ö¬d­µÒ«s•8m=®áS °E‘¹ð1VÛ5@Œõv/H+R³›D&®Qóë"¥,Æx‡±EBíºh9Pœƒ5Z‡ Éž>: 4áIŠ„ÈÊCÐÞK.ò1Tí8’šNÚZÐM´öfOÏ)kÖ¬ÉÚýíÝGãÒúåLÂ‡•¯<•ç³Ç_¢}ü)hÍ9?~"¢FpÜâE¯gÔDj'ŒÔ(i}ôÝýrñÈ®à%©ù:µ÷	’ÅižÔœG¿jÔnbüH|s—25R7°£_¿5˜º´¸HûæÄàâ`"’( £uF¬-h"¥îd½,“¤!:Àw…Œù³¦Ùªk%LQ«WËÊGô~ý‚5×T2G+r7SæX±Ï`-_TÎF¶œ.ªtZ½]jÈe}ö‹?«I¢·ªkf.ýçÓèoEë¼6[ãÓ	(‡W$Uhø•ð'ï•ÙŒ:[c×Ÿÿ&ò£¤hÒQŽÆhß,C™`Åª2™8Û7\f€vVÆL¶U¤‡ÑhòÃ^ƒµtéCnŒÍ-|ð›ß@kë·–}"ä6‹Â9ŒË´7Ó•®d.É±Ë?N\‚56ÕëÇ™¤ØêØË4À\àÔ5åY,AˆËKk˜›üñ…WÿÛ§NkŸ<FæÍƒ
ÊÐÒö<zîaòÎíâ~y®§ÃY?²¬©Ëm°§[K<	-"ÙÚûnüØ¯¸îÚFkÎƒôeò;6×­‘¤ÿC½Ö´™Ú±Ù‰øÅxv¤2Bs°c—y*	R¡vk©~ÜùÕâÑŠ×¤²!öÖDi²Q’C¥ Ó¬Ýa2+¯­Â5¶Æ¯BËþçŒÕy$ÙÕ†Â€šo_*·sœFt«q‚OjëÍâ=‚¡?ÂZ:‡òcþbÕòXª·zäynZ’‰²†œg°æXíÝµTÁÚo€5å"¾¶¶Ñìí=¸1—‹¨LBvˆzXg Þµlyå2Fý‘¼æ¥˜Òë½]é Öö™³:£Ù'Ž¤‘yŒMFNÐŠ›oá¯h 6V\û°Ú·Ÿ|ûåiÜCúŠf4Ìd¤B ×§¦¨ëJ®à¨èÖ54ÃŒÑâ™+îÙWÄq„®V¯ÌÆÔNmjŠ£B5E=ª¼	»Z.N°¨™h'ö«uÕŒÕr±ksÚŽ¬q'YÄêŠžÕxø !Î½>ƒ6–Al×ôÐ"„5ŸéŠØl#ßU®Ä»“eÕ®WRÏHL†)ú
!Álé@ÍÛNYíÒ©(eo<†pæ½<­í%'’}k˜ÕH?ÊØžÝŸ~ºëè“o½ªýƒç¬™m¿œFd©«)
JNÉ+æ#ŠÖdß¸†ŽÆZ%j<ù`´gî¥IY““¿`»üú¿”2ÌDnÓiü„õ /Ó B¾ý×ž)ÙåÈÙ+RÚ®}éìGÒWÎ¤Ï¾rF›$fpÏ|xHV¬mDÈ¶ß\EæVY°¶h‡´‚Ó&­dMÏVY÷	ü¿@á G¿ßÎè…WÎXºa-°ô§a»ñšNð%j®FñL¢G-»qªÆ~ç@rXq\G÷éAšÎt¼æE´!Y™.á|=ÖŽœ>¦Æ‚å³÷¯‚f@íÜðÑéÕ¾A4§ÁÚ²aÚve`ÁÈ‡hMºÚKÖ\‚!ˆd´´‘1h‡l{ZãAÈ	?s¸}©ò§ii„SP2|Å¡¹5›UÄ²b‚ãðáLƒ,H@¬ÙÊå&[3yò¡ŽÏN)ç‘û4JzD?ÏWŒcÀ›r 	^Xk…pykà*¢JeÌ´@¸¨ë¥­”LÀ,–5e6„@Çfü†š§&‘&#@\Sò"²š¾Ò˜/íB ã£!¨mÔÌ;d3®uz]8³Mž
Ïj‰T/m†u‘¬M§zÛpáKÙá™.¼|DºX‡!ý³€Œ³¡`žPz~?¡ßA™ð1Oõ;+HÑZG#+÷‡°¶Å_¥ÍÓÚQ¸`s¯µ‰)Ÿ¾v-±2L­ú™`Í£Þ"Îùñu/©yCGjâÒäÈˆ‘íd 5Õ©·ÏtÖ„õ½Ö…¢ÆLñùuBv"žÔ<«}~ç.†"¿ßørýîÍ×o½ãý¹V£0ˆU"¹x‹XáÒ¶²€ŠF?µÏ¤Dâ}ßÆåMí3ÒÂ@¸Œe;Bg‰J5V­Ø6¶ý°ZÌõYÖ¨$ã> ÁZL’×À÷ÒÆpÅBmjž*–Ë,°¬MMåFÓLÊÑWÛO‘V.Cn¾ŠÝÒ¸(øóÏL&ë pÍ`aÍºˆÔ2ø_¹ÆíØ:Ÿ›£ã‹þPñþ'G5I¥ù_£‚.Þx1k~ÉËí‘ž¥tš›~T±;Ÿ¬(ˆ8wòÃ“ÅÊÆo”‰xë¾Â"
×¶ÆØ^YÓüø1mHY,õ›y
½—áˆî›ƒš³¿ömŠØšÅ%]î…Ô”™+—H%[&±õí7û5² áòGAZ{ò±ç`µ ÖRÔöŸûb÷£çöï>ðô^¤â@1ëé1…->äaW²:Dj'A—¸­´®é¡¸¬Í%·jkPý÷fBÚ(µc1²;ñcÊ‚œ?TINã"lqÌÉØGÅ©vÙÁj’Ö†Dfº§¹W÷ôLÚ_«ì–ôNË>ìo-¨f¬öp «)÷Ã²ôV,ðÏ“çH6—ÇJZDjbâÎBiã©ä¡RX+æ²Ü&„ÖÊ'þv±³³„¤Œ 5Ä­À¶Ÿk?1‘‰èü¿¹CÀ;ÿ÷«L†×•
ÔtaQW™³Õ1sQ‘…Ú 6Ý	.äò§ÓÕ@vË—Óyr?êHTµ\	÷þ‘ççKùñ‹é0?¦‚5¾SË‰ÕôÑ¿¦»›ÁÚ7ßüZ»}õíÌ@ß×™)jžQÙ¶õ¥Qáªc“¨ÊøÁ¶â¾À˜¯^?Ž¾ 6¢R8xHK{@è²®6u\ic5¥¬ðu¥2ÖtSÓ9þa#¢ž×–ÆR«ÏN ¨íC«®Ëc^Æ¶½Ò{o«ý(Ñ[¨¬Y„EknnÀHh4ÊöCÂ`å0‘-·—ùç¬Œ—ˆr	,ï¶¬{ñB¦£¬p¬1bÈÃ0lþ"ÌÚ?®á¶AGg¬uÛn^#XÓN‰o†k(%o¥Û·Ÿ|ë¢µ·~æ`íA•­Q»F¨ÎêIøi½pX; 7Hü6Øš¦p{y§n0­_3ªú­iwöÑòâ$¶nö“Kc9Ÿ'h±¬é; 9¿~ª‰ÕJù´ÑZº8œ-3Øg]ŸEkJ÷û_=®±
`§bM°”ÈNj[X®y˜CVSÛ.uZ>iß{)e¶}†cX„æ4¶PZ3VóÍ¯[ƒ4w®×çB<ã'ð¢+®Ï ×qsêÕL.Ö\$°Æ®YžÞ¬ß¯q1KüÄä9öÑiZ{åÌ¦OK7œÄ½ŸHÃX’D'YÊru>¾%˜­¬ò­Yû5¶×¼µˆ–ÛýEBX3.pšàO¤wÅºZkßŠ´†MÐ‚ˆ@H˜ÂOÁšÚ¤ImTr¡Ð*“Ÿ‘§#šDºn¬5ë\%G95ŸIÏ´°QQÉPFÓ§F£¥µjN]Œ¶ô1<È¯ÔŠcF†1žö*^#=ŽYèì†`ÍjéØR³EIyÆZ’þZäJ²Â„Â€Xk[!•2š!øRƒhF@;½†”ð/v&>jàY§#2§¨±ÁÃm²Ð¡0ðI¶Yù™óîd@Ëàï:s
ZEA;Û5?lƒ5óà'·qšæ%³ê×³£+©ãqK„”CH²g™‘÷cÉ²š‡5aÑšŒýÛÛïóh;ÑO05ÂgOàÓOlÉ|üÓý“ô4…'5ï'â.?¼HÑ‘‘«W/MÇ¹…¸çQ×ùÚg?
ÔË~DT#ýñýw>ÿüsªÔnÜüø¯ŽÔX*pùø»;w®ßúvuãË÷ñYÜ¸õe£³«çÇÕHrº¬å¡K²‚4,«"™$û‡©éÿ:	c¸l„!ÊÒc-ðaÅ4ÑmÔ”kŸïŒÖ	KÜøì]L\gšçç~WÚ»•p‰•
¸)B`¹ª«„IÉ5U|¨d@¦º
·]¹ˆ
°Én'Æô¸“ÎÚ+õâNLk[Ø­4ÝDÈ°ã´G–ˆ{¬ôÈr¬Y¨Ñ÷$Ò¬¢¹é›ýýŸ÷¼gµ·¹àIÕ9ïù¨Â‚÷üÎÿyþUâ¦·‘À¨úè‚è©¬Ò7ºzâøÈ‡ÙÄ¯BUï&éL–ü#º—È-H¬N•ôA‚#SgÛyuYË—¹e$VsB[sçØx,Óy—ZÁÍ9rô8}i–£La#ÜãÃ:DmÖàût6“$¦#y9f%“¤*‹¢5»ÙYu¬Æ9”“E^È­~úbº¿ú]>Ýk^ZãÑÔDcìÄ¾zç3,ÞJp!Õ‰1„­xÍwùc¥„5ÁZHS?#Vlê]G;éJHÀüÍõŽ›‚5d=£µ×LØ#f~ˆh€k3\lÃ$j0›˜d–H8õLÈÖ¥Ïó6lY!€	-šZë÷uþÈÓÚn\³ŽäA†«í µ×¹ý×¿Ú‹½Ø‹ïKäÛïÒw2Ig5| ÅjV¹¶ai%³	UÉ2	º”GØÊð 5sàrÎœh²Xè4Ò[¬×4ö)žÕ”¾z´èš¬©*ø+²5°pTêïï?Æš«zÚ¬aC‘*ë–±H>É,®Öÿ“oþg¾öxQ¬FÉ´vÉÕÅYOj%Az'HïƒŒ½H.¿¾^Ì\WÄ´Î`\Eh²jø\¹(ÿÇ2	ùÖÝ(6ÖÆËhz@[\©‰Å¡réÝŸ\=Þ?uu~~ðÝÝ~!3æÃú»;cS17Òc“gêí¶ùuÛ WÎ¹ÌRp6â¢@øffP“²‹Ü6Ác0—Ú¦¹„&Ë*“Ò9TÀ¦”Œ1Mtªé6ÃÇê$ïEš\¸z¬ð§:ió/†YÎeŒq+õxzðU‰J×x—êHFj–V¬±bÓ'@úú5OhnË¥<ÀšK…Ì§W’ÝÝÅtòøqtµ”*¨Ã$|†,-¬ñ´ƒ*'P°ÑÅ”ÊÃd6—Ù¥sõÙâ]v‰kò†”­¾ìüíÍ+Z~ð†\DÂ4H _ëÀ`„cMÖg9ß~®
k]‘zþA]*QhO]ºØVù\oBÖ©ìÑ7‚QÅ8©>ø¬ïøÔR3XFÚÒ±äÒ,ÜÖäÖð 4«Ý\t¨CÁÚ”,ÛY¾jÍb[X33õÃºNÖý°É5xý<ì|‘šâ40t¨„ŠÛÞä| ká>·ƒÏÝGN’ó¼×£	ÀnÓíÒ¾É1YõsŒÔ´ŠŽˆÉà4!Zðn¬‚à°î¿kæ$i¨g°6«’>FG%N™~<:gNýî›ž&R°6wàÚ58Z3aíúb!ª¹%±«j®ÚÚM1ÙX£¿ªò2¡MZü¶åÜó£â ÙvˆÇÆµªàªŒpF6#~¹…ô6Šò‘£[å­­âéiép±Óc•*¦,ÆÜéÊÜµ}ISf¨Æž˜PìoÄfœ3ÝŠszt\×Û*5cƒí_ÅodAæ!ÚRÄ·”À¨âY”÷Òe9ïŒ`hL§O“Öb –}·+péFÌ eÔÃZX¤&Å†ˆ &JµmQ¢A¨©0Ú©§U¬¥+ìŠTS‹ÐŒ‹]&vêÒx¥Žã”ŽT”4w™­ŠÛv¤ŒÖÌ’µE¥Ö–ˆ†[ñŠ{þ4¬D¬©/öÇ®ÏÿíjŠ}ZkÐ_#kÇh­Ö¢©õµ·çwË ë‘ÀöñvÚ’U©qqL`TlÞØÐ¶ž9d¤öònRCñAR“¦ökÌ%©Ajÿî;_›ç#™·Ÿ®ÝúÇ??[Ç÷usíë§ôÂ¾ß›:2·QƒÖ¹0·’lLY½Ö‘¸t1U—&£5)þMLLDc¦µ±r7â,7â¸;?‘8£ž ÖØ§µ)o`âpÏQ4pµ\ãÜHV=ZÁ™ÈBt‹«.šI²;WQõ™‡5Ý÷SVG3¦XÌ7˜Fr«Q	x«å(Bë¬¨aheÛ+ö¾?VaIw¾>mA5(üAd§ëæ	2y”­E\VŸßîf¶ó|µ\m29Dæd©„%˜úƒfƒ¦kD÷TwFÖ#sëŸZ£5ŠWoî´yy‡´FÌ
`Óƒ€-ÅšPÁZ¯®¬¶:,ûàÂ…á>;Xã'XS;ìTÔ]R"[]ákR7÷Á?u²ÞÙ³gX{Ùý.X&$‹Ö3¸ùüË™ËÝ˜·µ9Ë.‚>Ø·-­é¸­öcøßŠwÑšÇ5ÚºêY/”ÖC5{xLc ÑžÅÈ^ìÅ÷È¸ÿÝ¾¾>*“•ø8Ñrò’Híâ+¢…4€´4ƒ¹"[7þ³d=¤S¬ibM±µlù?a—Rdºð¨ö«ýä“+?]4uŽ¿´š#%Òó<³HXx/:~¼;Ãv1/_ŒôÒCù¼rñëjkCóßüä*D—~ó¯ßü«})¾X-pù`»ö“Í¿ p­çGk±²±™\ú¹K'XS¨“Z¶´À€q9‹à;ÒÛh˜/[Z$6[}Wÿã¿Æ8ÓGË€ù‹—€µ†¦W›°Æl¬¹XUúÊ`â_>ûvíôé?Íå)A’¿°'2Mn²‚„ž4÷U*°Z˜Q‘u³r4Ñk³óï¬(µßw¸²NÂrF†ßo#Jbd…²¡ê!&B›¹Æ-#ÒêÔØÔ¿ h™æ2Ê!@.Ë»?._±™¯ªiD˜èi>÷‘ðÈn0²¡lûEkÅ}ÀZ[>™îëKÖx4ÓÚ8*ÁŠEÄe8‹~BbšnÌ~§²ñÐ!V$Ø¹û5ŽÖtvˆ×.ã;Õ™­iùÁCp,(Z{¬¡«ýPÍ±Q¼ñà×‚.k­*KÃö¿õÌáÁšºµ©á`©Â$@r ¥Ú”›æõ¯rÞ©‰4^é$75Kô•ú°ŠÔÏb ”¦t//»‘Ù×äWÝMšäã©)ƒº·i -míßLY#ÞeC‡kòé—Õ8ÒÑ5lê=¸nŒÂ‘ î¦§×2#^	b¢wÊÚvÕš‘‹Ê‘í.róel¶[pÒW#±ÖÜRÿeâ®IËŠ´¤@JTcÃD>N!	Â<ÊþÕy&ÃI¬;ª9XË(· Ôh~-ýL™ŸhÖmmá¥ëü À4+Y»ƒ²¶Û24î•µï¨Z»^‡¾?¹;9èYr{EQÚOÅ  ‰G!‹qÝËvžÊ³JŽŽ"ÈØù(HR˜¤Šè‘—¦§Õ(»€Ïcõ(íÇÑõ*Þ`´PÁ˜Ï…*—È’ÑxZq—Ë¢8³{4xÖ¨‚òNˆÎÆ­á$Éq†òˆ´ôEÞÆXr6ëF%A®Gº«h”Âä6’ á²:Eœ¶&I¬X³LÈ:ÁšžaÄ¶Ã·>A£ˆˆAÌÑ‚íà h­–uŠ‡­³Z²V©2Õ‹T¯ßu’'Ò|!ƒ–0>éL¡Q]„”|Î×„äz­ÕðJ„.ý2ª×•%P·¼Kq¼¾a?!~_ 2ÇjÄ®žØËô(<¡ÆUÉôJéX:ùú›5Koº€ÖB\cè5`-”Ô¼ŸÈ»ï^µJí	ZEžDS#ùÑ4µ‡ç˜•v’Úó¿'nß¬QÐþüù—!«ýñŸo~¾¹¾þõ×O©T[[ééíµk÷ÅjII=]	“!{å´É÷xq¢Ž~Y&öI‡X“==YÕ]%k©a“³KR^‹G5-c°š>	.w¶bÌ§ÊÍënU•Ls+ÈYDÐHb…2ÑÍ_lŒ»3•&P>~œSÎ°£@¿ÏŠìcdw¨ì<HN~ý™N~¯9ÄjØð,†Æ°î:ßYqÁ~èŒîj¬•0B@grÀr÷HEÈÇH«$É†o©X*ù¶øž T–¹¼å|æx±¥l¬ýöÉýÕÕû¿ýÎ<H¼E,ÈÕ Û4›ôv¤ø„Ê^ÄRsë ¦D/³’±+‚–x õ*EQFþÖ›½‹ÅÉvî9ðÿGFÚ-ËWL?%~zƒp¤øPy/f.\˜ùœûUµvx†>Ùhmê†ÝubL¸‰Q³šYi…Â	B#ö5]ÆúªåðNZÛF5kû^”Ö’><¦íYŒìÅ^|¯Œûç/ö«E&Ñ£ÑpÍxM­±µš^™ÜqÓHZZÂ5æ‡©‚.£+vÏÓ1+)ÿ.3àÒ¥TM‡Á ¢šg5¡±øÉÜLØ[ILc2F8™‘•.8ƒÎˆ|¾›1b‘L%‹ùlcPKÎÖÕöcÁxêÔ ÿúo~…$´x¬yXÍÃ“áß?Ùüì³oŸÝß*OgIk´‹	Õ¢•kó‚5]e (éï¼Ì¬ñeÅhÐcÆZ¸ÀfœÑ•³}ïN57OïnÎ”Õ@ÒK]M¯˜¦Ç5ÿ¹³gÂšÚa»ùt”¼­Nœº)XsÆHÕkb5n7r;Ò²M ­¹îXA]×ÆÉc\"sõjvzv­ì`MòY%Þc®"‚5ŽŒ˜AJ•7°k´Z¦s¡h5j@šãVe^ßT\è–Al“— .Û)¬ñï³`+lmÿéaœ6ËKË´vC¿ÅÊÁ½ýÚä-²o…{ÞûÜ¤ÃÓðJ‹DP¼F8ðj"<‰E´b)DCvÓ	îõ	†ÒÖöu4°¡×#y±OSžÑ›{Ë†Ö3gšê÷b)}Ö(Yc”¬±;€µåGïœ»ëúaë!g\Fšx÷Vùøsÿôäá³27HµŽH:Å¼]ï:§¦Ôeµ¿ïTªÿx?°¶„¥ÈÔ1\0´P¶G•‚NÛ¾%d¶©Ñ¯Ï¶#o’¹iÄ`´EGc<€µë«ø^w¬&X»¾4ÈÖKxLK_+Mû˜k¬“ü£°£Âšç3‚¡M‹áÜ¶”/érA¿4ÞÔAÇ4VÂ-<	gû(ä¬±WUgëïëÝé´Æù¦m\Îk5
ïäÜ6«-™“Ð”±VÉÚ¨kp°°°
«]`íÀë7w¹Az^óÈ¶«hM§ý¯€Ö®é¯‚D­Z™Ä®Pö¼¡y‰¡8 ½­GîD–C›ÀUDUfºó"¼³
·qÖôÿ•äevýGbø<fhÆ!<êØÆc¼ïô÷V$Âa i¦û\üæ¶rà¬ÊW€¡H\dƒ«j6-‘¿á™íˆ‰ÑPÎø‡±%p»6ð‰	!3ÁšGxe®ª3·6pi„JWT•V³B!¢ÄÆ
´Æn¶vÃ]þ"ÔÑk
m‰nõäX k
ë‡-M,‡—|ÚQFGÄä	9¦‹ÖÌÈß2)ò}°kˆ€Öd–ÞK»—º^ÚdèÚõºê2YC*]G‹.’%º“©×èm#õœ¸óÆƒ†|$²šp#`µ&Ý©wéø‘âììë°X²›e€j¤=†®9PÛÕLÍ;?žš·Œ’v”üC—i§53ó2_áá¹­LÍ¼ÿŽ@QÕníl§æãÏ_Þ£öŸÿùËÍûkOÐ:íÉæíÛkë×ZîßZ[5uìbWºV-Èq!I¤Q	QŠÕÀ–ô €¦´=2fË”ð“fo-Í±YGãâ±(æËC¥øÑ2)‘b³0j“1Ìõ1l	ª¤åViScš’X®úå›¥ ©Öº¢LIC¾1aŽ™S;eX…+	éª˜ÎAeçe¬ENB-D±bÔ9òƒƒäQên ø‡§›Ud¥ÚqPæt»0ÃD\¶<þ²ÖÕÎtä³å2ß:Ã	ÙâÜTÍ&I›©À†e oáë'Ö{4ÈÝ~FkÖXˆÖ´jˆ¤€5™Þ¤:PÍô¹íå%`¹‹Ø½»þéÕåQD´&PcC>™ö1ìŠt]ùâÑÍ/>àRä‹ë×oüæìgIÙ`Š™y™˜¡lmfæ—dbÎ(r›yùPWŠË)y[¢‰ã²†ÐNÄðL‡‡°Vßzárk}ëåÖ,<«!ôÎÿ'i-Hka8R³Ø³Ù‹½ø>•¬f½ÀNÚÁÚ…Ðb5þÊÐiM)ØòíïIW¯,EÜÄÈíLEý—â–&*fc>tkGJna|´“ÕLV#®ÔÁjf É#i3q$]ìÜöÕe¶¡!U4Al”å»aµr4‡Ì%ßüä¯æ“åþSW¿™‡4ç/)ÿZ³/…Åw1k®w·cÄùŸŸ¯¯¾•Ç¡¿Xs´VfâRâVzQez!G‡,HõS‚Qi—…Lm¯bµe×ƒŒFÆïãJß~²ù•}y	¥Æò/åøþ#ÜE˜ÅjŠÏž}ýÖ[JDëìDWb-`3Zƒ«*6ÁÐˆÝ¶¤h	Î§‚)ñ‘€µ ±Iµº–HUÐ¦ä±ƒÒxpt5Í²Kzä)	Î.”ÇªJñçX%®‹5ÊÆ£1•a#%âÃ7zËñ=9XãY0XsˆF0Pøz56}ø«"5‹€ÏÜhÉmdvkù¢Y÷!ýd~ Û=²Mj6¹îi(¸¶7aKÚí‹Öœbf}Lmã…[;mSMÜ]gÈ®öÖÚßD´[‹6`ínCË™ïhêâ!”OÕ·†¡²ö£»íp”æH­ ³{øüg;9D01Kdc•PúJ:Múp‡]`¢°LÁjSEÙ?Êu”Í?%jÖ0ˆTæãÔô””#±§yvtµHø±Ã¼ŸÊ4€ÌÑÊÚõk®ö]×$³-ªpÍÁš´µý_árÈi¡ÎéQáhì<ÛD˜É3ÜÁPáÝCÅMá>§“¦pPgC;›¡ã0¹=ò”¿|µzæ©é,´Ù™Asn@F»DƒÄX¼¬t©qv–„ÊÂéijÖ$ZŸ¬šH³¹°0Çèš­	ÖNÜ±>kÁ#4ÙŽ„µ ÖV{à ™KhR¾£4*0˜<í9¦:kF«P€6P”Ë„Åz°Ì¶d¯OðêjUþ•
'ÁS”¸‘¢ˆ(»ÿQÄà@,1
°™97
Ä”©0âêŠ‰Ïk¢È›•­9}mGG0Ùl‹ýÂ¬(OeÀYCküÝcQ–¼ë-ñ´¶²±‚ Æa Š=«iÍ'™yXÉL[cÀB¡±‡µà ·mª5üòÊZ:ËJ’á1©BGà7¥#ôÈÆá1À4SãBëàHó‘2Ó-í’2±u okJ0hmä¸$`³ÜµÚpg£~ß¡Ý¬FxX;ñ€Öõ$.×§JÅ×qyýÍ¥ìëšñ0h3YM¶fÐÿ¿öúnIMÎÌ£’UZU¦f æ”»wÎþèì'³Xãëg2é«ÝÃQäßÿªyßÇ{,ï­Ý_û?ÿ(f»÷t+Õuó6ÂÛMü¾îß~º‘M¥ÓXõ'³œóÍaVÈ”–ì5{?[Lˆ{SB­r–}XŽ ¸q¤ÄëÃCûµþ¾büh,YË¶oˆ­(gÕ+™Sþ\\A¯Î£|P«²Äª2 ¨À3ò gqbd—>ŠŽ{–UïM­âˆ_˜ô#ºñQ-œ×o¸þ ®Âå\…asy;ÈSc3	” ÕÛíL³6ºiZ¬ ½åûÓ‚5¾¥b1Æ{CyùhŒ/©]X+&“Y -3)¦³åsVFéŸÓs÷Õ¿îÓÕ¹õæý¯†°+9X£ÜXÈV=ˆ”Û^¸L%æPš©¹»ê­f°fó—>ƒ\	5Áš["¬ÉåæÑo-?úBÙ7ÞPõÇ×>äþ n«Áh3>ÞÿÊÆ‡†/ÿpæPf`­µK–‡1[*‚,=¬ñ´õðågvÑZjEûŸ¤µTè1Jk<ÝÆžÅÈ^ìÅ÷§dm2sÑ;Èº	ÚfÊkD¹ÖLy]†þú#•’½¿æÂ®ˆE|ÇÒOˆˆìºVäâ`gêä/>úÅá_ØÃ¡ÚnV»råÚ¾+7“®{ŽEIÍ¹‹ù¡"S²³%Ášòaä-ÁZ²ï¸¤79ƒ”Kƒ¥¾¾¡!|“ƒ¤›`iÆù„Êtÿæá{~ˆº…¸å„5B]ÖVs‚@àjÄh-ffQª¸Ü-`jÃ×¿1›É€/myýå‡‘dÓÈÁB÷»§’ýÇ‡Žqu¹y^°ÖÒ¾Øò/ÿíð›|ðÜ„µ_«=î<Á0{,‰ÕDjÍjcž x_‰Ö”òÕIûPRƒGIffYAfó>ÚÅù‘¯;È~\GœJA½LÙ%ª@`¯š)	¦7¬É8DEmì ÊôS°+.Ùi—Ej
5Æ)°æQ5ÚÝ;\°t°¶½•µp(X­u—ä"czª>Îœ8¢‘†žÅ"~'{Ú«
ÀYF¬ù[¹qØ•¨u°â¡Š¶–ýM¶¿‹$.ädÙ¤4È3g<xxNy¦¦9Vã©-kï,·:UÍ—¬íõí'EiÁ÷Û!ã~Üx‰v]vkÜ!µÎª²cÃ°§oÊ:¬éZ%#“µ©)žÎ’*µÇÖf‹éÇçgÛ¦ÜY”xd	
²Ñâ2ýÖ`ìYÓ ê¨&YµMø&^ó¯B„’»H³‡ì<F`8¿å),¤7Æ>BX½!ËôvnˆÈ6éÆ:ÓÃšÎ'©qŒ'RÛ‡XÆç¾"T#ô¾öiæPà9év›ÄŒŽÜ7vŽŽêG$amkÑquQ?‰ŽG%·a¬2¦ÙAÂšØõ†±•5HÍ|Øy¾hM°Øˆd¤AÅ¥”G’Ë<¬É_k)bÕ£“Êï¾ZEÃq«Š4F[aÜŒ­kä¦°æV¥
r­Ä$‚me&±^‰çµCbW©êí!3ò²l¶ú5‡ÝÔ©[ç
Ö@2n´w6#[R]çkh?Ã)êÅ1(q%&K~”µhl«ñ%Q·à¢u[Ñ(r[M4.éŽ¶,‡rG±Kæîè·9à•5¢Î-j=¬5Z:$ÀVgfl*å¦ÑdIX[<ûeëPÃðBÊ>Âûð‹êØÁ9]*P49„Ý+é0_™@k	M0zYÃ‰† Ø‰åm/È0Öw–¼q"y|¨ap¨;¨RÃ_Äèì,Zêcèúøã°ëõñw¯^7þŒŒ  W¦&¯É0ûR{N?5¦%@í–Ü0‰h;s©QûüÖÚæ“Í{·nQ¹ö´&qMnýks½]Ë÷Ÿ’Î‰qÝ˜EÀOÀb)À7ZËß˜lV`ÅÀåºZ3’nJòå`$Rã)Wh­˜GCëñ˜0[<fCŽ0OàêQ…Ò˜h*Òy«=q>¯dXVñ÷+ÓÍ;*ð7æ>ŸÁ©“Ê˜Ñ°ÉÂ3¶à³yJws˜w‘©Â­¬!ùˆ‹üòÍÊy|Œ^[áíÝ'<ÇLÝ¦)æK|gå¨ÎŒ™™–ô©c€h-ß“P5ÏL–/¦±r*Œ4ËòÙÌLßÖ|§µûbk<;Ê©¯ÔhÇï
Ôj ³Zikfáo¦Ø|L	KŠ¸ü]NF:ì~K}y¨òlùÑ£–®›W>¹!‘?üôGg_{ÍÝ¤Ó¨¬]ø%_þÒÚ0w‡›°ªêhŠü²5A¿Pß{_(«ùéÎí±ã¶n¸pa89|ù»iM¬6ß¢¿@¾jí…(«ÿþW{±{ñ}È‚üo—,:z/uñ+Kn6S¥5ÅN ¸«ñç†I'NÒoÑ(	Mó&Þ˜:­Ò›ß~qšä6’¶ù{áb7«óºÚÍºkW8Ó`­Žuz¨/ˆ¨16Q"—£T$7LyˆC Z.GJ[¾lÂX-†‹}ùüÕŸ0;ª§°¶-áÍèúûˆ[A$ÿýú/y¶“¨qŒu¿öNÓeöäâºà€UÖôdkÚ8.¡‰ãYÜ ­¬Ê,A®d?ÆM¨þA¾º:qk'÷¿raÍ.ða5Ì˜ŸÿšxödówŸm~uðü›rlÖÀ4‚q³òJªj**Z«X}šRùãr	iÍXvkRÖ:k±Êx…ƒèØo°ñ©Z­“˜ÝE»Ð´*Î’Ý£Jå4e—=±Z1
ÚQ­²à¸Â­BZ¬íê²ÆÀ‹j!ºœÆ#tôk½y¦{ ¤™Â[s+Ü”ÃÃÓ–Ïïð;ÝnÓÄBe-ºÔke;Ù%ù¯“gƒÖkPZ»lÿ[ï’Ü8üàÜßzq’5ÏjV¶ö¡â.
Úð¡G˜ŠÜ=#M:]{¢…†k-íZªhÀÏÿd;°v’Nk‰24–“¤Í¤K\)që!œš:UêFOë.v£¥a‰4KB$·#p[ÉÍÊr	Ar{üo_- !pÝ¾èQÍÚˆ}E0X¼ó€X|kÕ„5ƒ6í¸	­Ñ¾3imá”½½	8ÄÝ4Ó©˜m6†b©$È€Ï|›Æ¡ävìLŸô°&žÒë2Ð=rI½kÜ{°DH$4÷jm8&3!­“@h“j¼•¨l’I>â¨g0Ë–”ÅïÂ¹hqÖ@Ãaäï7“)¨®£oPšŒûY¥–/jœúXËzõúâÂÁÚ‹Öý.RÁÆwIk× 28K•a\èZþ£òÍÊŠV€5­ŽÊq•lHjÒ¦qûX0¼ªªð¦;:i´F¹ÛôÂ‚@MÀvd¡Zà—ÏÌñ£Ó§«cœc°fýUËÆÎ«„H¹Š|Ýj3ñ×“}‚5³ägXƒùšâp5îzªñÏ•‘%›”5Ú«Ykä­ëÄÍå("1¨X‹F½-ž'uQ;‰¨«53X1Ú†WÖÎ÷èT©Ip3A‚`ÄÚXM´&^³!ªQ¬Ú5ÁZ5´‚Ïj:(”F»ù”¤·4ª§e0Sv	
Ý˜”˜¨Tº†ÀaÓ„Ær!Uƒ÷@AàêûÀåHäŽ	*ÄÎ$HkÒÖ¨Z{0?ûæRº&9ðfPœöº£5'¯¨‰Õ~þs|¾-©õcüø«yMœ$?¾2¼ËPäÜkâ4KäS¥B5PŸ~j„Ò½°öå­ÕÕõ5ŒúÙÚ\\ûòËÛë]×Ön}~ks½7½x}u}ý>“uoo”Ü¿‰“-)¸D#²£C&ýÉ(°6¿’¿‹¶³×JºéÙ¬|Fx¦Ë|¤£Õq®³‘ƒÕR9¸	È@ Ó==UÝvË#ÌœÍ"®W$½)•±Êo†&":©éþâxÆš„êE¡\töGXÃY·®”jo¯E†ºe)T“3Û“š(™Jrµ*M3q˜ýÁ?'n³]6kòš´ÃBµØŸ¦úgK…lœPÛ2msŸþ©}*V{!V#T°]1Ûào!¿—œ\3Â±Ži¹B:±7"÷5Å—£Õ‚èŠˆaÊfxÍòt­ñÚ#> ˜ŽX÷ÓÍ-€5±ZË0ÃCõ	>p„løxÿ/_Itµ&4õíd5·Íƒm~æÔzÿ{Z›šÍlÓêjdAÎÿäâniH¿ ­y»¶÷,Föb/¾7Y—x¨ù#7äº&ø£t‘ì¥ÿc9qÑf?¼$é·8nkÊu8÷
ÔxÔU‚{óþ}d|d¶Æòðw°umå‹8[ˆg¯ìëÃ´ŠaI#*]c%ãÇ\æxà†´&X+ªu5—Xê•ê(aë§6À`mÂŒ kÿß¼ê`'È Öž?y¬Í•sAX¹‚.‰—js#¬ê®,$¼é¾nÙœ q€(6Bi‚µÚhœ6C}ý°¢ÞÄÄEÇjª"7aíCK‚ôí°Ÿ¯=yöí“·Ç/HÏ/ePÅn“Ím*ƒª`´ÎÉqÞÐMNnBÚmHÕ¡uŠµ”Å/¾“ó£²Ã:;Y“©ÓñéWš¯¡µ„©Æ{à2• ¢|_¦\Æ^Õí“¹IÔ’–»,ÃçþäÉùkzîÖDÇãÚîŽØ;}g;µôÚš‡µÓl©ñ ÑŒ?ýÀ1f¸Àã¥ÂëcŽ´ÜÐ§7nÃZ‚­&ŠÏ °ˆ—Ô‚ìéö0fmÑN}™ÁšVÖ»Ýz´97¼ËþWªK©Ýê|T#”£ÂÚ™GÞ¸ûàÌ
×.ŸÑÀ2s	ÇøÑ`­½]¶Íí.õå°hh±ö Lï%Ù™¢O-Ph“˜HFJ³KC˜é«—ÌÀJj;ÿ:j[s§„5Šœž"ÑžY˜ƒpeiË–¯!¦e–ù`™€ãà7	¾“°Ö†KoÎQ×¬ Ëža™Ã œØö°¶“Ö^cä:UojS­½ck$T
»i™ Çk]õšáÊöƒªB#¬Òý±OVÕÎ2iN¿dûš“ääxt‹ûÓ‚µNlî3âÚÇÓä@.i©¢Ôç!¬½¶þê­;×œðÊÚ.^#Xìn´Æq+Z£l_ákù‰^ZˆIEƒÍ6tÓ¶q° i-9«×ˆi`Â´*{pX¬šA°†!+ëˆ¦dÊÓ(€ÓÈ€Ó[EŒl€ítEe©Öøz0Z<_ÞeEâ¨ˆÕ¨Je)vŒ+¯®‹”Œ^â)‡‰p8o!qžœ!å,y tsødý…*‘QÞüu*Z«#ûÑ|Aðõ’ÕœÉÎò´f–|æòà„4k¾å¬Ç†ÂÀLäWçƒ#NcKk<ª)XÍŠõóÄºŸq 'u"bþç”Õ0Ñ„	Î’š5PÍòî{ù]3*Ku4ÀHJ‰Lq¼Ñž ôÇ:¶¶GN,£ÙŸX¦^íÿ¡¬‰ÕË?FM+–†–|ï4÷Äñ‘gæÐ¿-©õ‘d¦fj¿ø	’ÔÍÌ„Öoþ¦ñP³sé'ß›~Oj Z`ÕïÛ{·n¯Ý_LÍ=¹õù=ÌEn}yïÉµÅOoßÞüzîHêÈÚýtïêúµ^õRƒ·äÐŸÊ6J\K7¦ùIô¢®ÅÖèS'ŽJ$Ëö
Ö²eÑtzìÉÍÐ³Ux,Û_Þf5a|ˆk€œZc«3»Y‘å!ã~‚à¨ZÈ`¤\+e£ÕæÙ6ÍcÂ5GÆÇ9‘°v¾Óicê–vµåËkº¹#WáÊ˜õ[±¾ “xôó' ¤S¿€\Quv¥\•P¥[!^V}š}öHœdJc$G®m©·–›¼$o¦'“é¡¥¥ÎÎ¥!~4£™ÓT«©Û¾Œ¡²¶ÛÒ¹÷ïGUK5í'+ƒÊ5Ý<@ÛÅa-å!Ý§pŸU®yZ£~?’
¸ódÙÞB¿]1)Áby¹«kQÞý7oHZ£ÑÚkÐš‡5SÖÔ=€4ÈË­ÜI$²¡éÆ#M‰ööú@IÀŒ•x†‰>=²õîðð…C\j…´æyT³¸øÝ†ÞrgdÙñöžÅÈ^ìÅ÷"ò­‹Š²“ÙtïÅAòì7»älã: · É²ZÈÎ™?ÒÖ¶kÀ5Ùvœ¬©¡ñ<,xúnVûbßâÍ›þu¼üùþ´õ˜,Y¹þ,³DP;ÖW$W-íÌTÎçkëä0rjÞn	¥IÔ…PdyèÂ¿üÓ?)Ý`r}Î··>}ŽÏæ"e³ëÏƒ)kQ?æ¡´·À;‚65Y(†d•K×•9»LÅ2/”øÕúç”h'>¯:Õhx:|aJ0Qß£*^ž¹,Ègÿñ§ÓÊgÎŒX&Õ›	­ƒì¨`˜dnãi6ÊîRµRÎ:Í•KÐ$MÆ¬timWÃ“¼†G¤¸1Ž¨ÎÞ*cS "M!Óu°lR‚5…~ ‚cQc5-¼Á¯°Ï}ôú‹X×»AÍí	ÂÉ‚ÈÖ$‹%ÁšÍt49­	íˆ½´Æˆ¡½6b8=ŽÖT³lyàóiPŸ5v9ß~hMÑÄÃî¶î?ôyZSHUã¿PY{4Èw¸ÞB‚£)ö9`LHZCD—ŒíŒOo’Ó”vu²•ß•vÄh~‡Úàd"Õ?I÷•JS³KÇR‰}I
ÔÒ‰4Ë„ãY‘úÙÌb8ŠA3¬á*‚™ã[Ø‹x\›[¾}ˆDØ–WÕó™ÝÄ¢Ü )ZCa“=¤'á‰­w”ªyFóxvžñ¶°¦#ÞR$;"…wÇYÐVðB`Í:FtZ×4B+ú@‹¸Ì,’çñ/’1Ù‡.è"©±Ï^g­µ'æœñˆÝ:Èèguðmm§§Ÿ7XSZá´ä5àâGÅƒëˆLGpŠ<pàŽ³îßÝf-ä5vuÅÞVÖÐ¨pTwè-Ä+ÈÁIùÀ'©m<æì¹¨­m”·Vä_žvé#Hj@]`ò×éé2¢„Ô´‚ÍQÉÇ«u[æÙQ°îS#˜[£kËW“o	º…¨ÄQgÛß39®Å8‘µÔ)yr}ÏDU&·YŽÕtrêßà¯®iqÎ&xg`’lN8Ì™C®46®ð5u‚5àÐ:«IÓÛÚ"e\Jš‡µÍjõTùî¾Øž×ŽÖ|>$ÛÉ´´‰¨–”Sƒà‹)…í$ Ê©‰Z°f‘0Xs¸ôƒ`ìå¸ë¤Ö ©A·%j0)ÑI†$h6»ìåNtk8AÔ7=ØÕeÍÇ?ÈÅSré€L‹Ýñ¢ñ£u½ÖíÂ‹‰v&¼Ã.ù‘ìIu>û‘„|‘šu¾f:¢NíÞgŸi¾LíÄp»õd}ñÉ­[O6×VSGžÞ»µötb»¿Ø»º¶¶º¹þd==Áo;ixVƒ¦â]j72L'.YOÚ\Ö«Î:k’eË*Z“R‹5ºëò¨47ÁOÉ`ÍåºFk.˜õ`¶Úê¤Â©\y²_
#€U¾ãS(7r¾YŸpT´øˆy¹J«Œœ·û9JáŸäÆ!ø¦$kÇvÐÝ ¡òºS¦Gu°ªnÛHvx¤BftÀ,‡è˜/e-’ÏñÕ
°a›Ò.	ûœæh ‡>˜¤»ñ“l£í÷Ðèi:ñ¼}ÿ·ŠÀ2”ÖvÃ‰Lðvà	‰”FfðnŽÖRÁ]F¬,¼J•âIXz.÷:tÏ‘­ƒ	áÑòM÷•­Ñš£5YÍ®)òcYøz¥Fƒó‡U¿v¦>E•ÄaMažÈTu„cµ0–/44Ý¥êZ´vY´æR!y²Pp•Ä«¿KZq­þÇÖ^ä^ìÅ÷!ò¿L¤K}§&&R\0“ãNýš(Íå;^:i‚›ÎN¡¥M‘–D¸J‚5M¦FjŠÞ–Hêða§¬g«ù^Ø«ý®|qÍœ¾ƒµ¡¡$oh°6”,!¥k°  ]QUk<¡£îL·Ä¶²îÕ&ù×Nµ°Ú7úËt²½é•áá/ kçvª[ÌŽ¿{F;ìOç6ì0oQvWQÊi€Qe"ß±—£½¥ð0©ÐŠŒqcQ>Tr–2A.YÌ4wæ‰	½ez‰°¦9ú½‡p¢¾GXí9f_rùÝ<¦M(I"´Ó’º42Y ýC5Øq›L/Ã5ëtSµn3–YÆ¬¥vÂìÀ¯ŸîMD¾%$	'ŒÞW_lîØ“íOw€­Za«H‹#½’Ë»‚®¯á-¤5†þ"Êqí
+{am®Å«Þ]äERcõø\›e{;Üp [v2<]digjäTN³",«‘aHkŒýÐd5¿ðÍàEÈn‰„Î°°7·Ôk„y°š¶†II¹ûðÜ9pí½÷À5‰jÒÖÞc&ÕÖ¨~Äð[ÆýwßyçŒ`nS›5Mœ-(iºPtp([kïBokoh7y ‘æÒ[ƒõãÔÒÒ±t$ÂèXI? ÁZ[&ƒ²Ö¦ÌGM‰Dµ¥Ç§§•Ù§Œ¾·]Ol`HtÃ^ÕŠ`±zX–?ä¢Û‡ó 8&ÏgÇzå¨ÆÃ¡VÀl²ic¶R½EÜ8ÜVæ$Œ\¿=Áš·ÞZ­‰ûlŸ\J‰½ïCØ)X«©NgÓK&Ç`6ã5gÊp§ÓLÁÓkaK~HÍ§Iî”‰·¢”5™‹Èz„4HŸ+ºz}NëEXÍú¬ñØÛÊ±SX3\³¸¹dÔP¶E¸ó’u,¶"5ëLí‹È\ó2;.[Æ-êÚ^:°W¾– «5=/ŽæäÏov‘öà£Ð_ž­1$†¶ÑÑüVXãK@‹J½?ªW;.Œÿl
šön(œw¿ã4y>2Œá=ilÊÁ´¦hVÖYÑƒ¯8&*2ÙP&#R}GŠr  O£3Ÿ©ÁšBu¾Šè®p¦"pÕB¥Ê	uøM%©ädÎpM;…sul ±E1ÑayŒžÔ¤_¤dÊY¯5R!îZ¬—°AœrØº 5#i÷’éº–(^Ýk/­!­Mü~ðâï_ógžÉþ¤&ãGU©ýê¹”aÑ/þMw€š÷~ô¤†õ£¯Sû\îÛejDNƒËÖWj"_oÞR'µŽ¹§·Y¯mn~Ú‘BM[å‡CEÚÜ\:Ý;·HQyzâb’Ú4~RXÉÖ“]a2*CHN¬ÅRõÙ$œµ—£õR‹³»TvY±–"&BÚ®²Nø,óåx…kk#²Üâ£ÊLûrÜZ¬©×L§ä®K Qþ²D¶Yþº0ŒŒYÛkvQ•6^é#FÞ$·Óo[¿²©,=ÌÅL÷Ø“ô˜-3%©Nóe5‚°æm›ó*¨‹Ë¯?­Oó­Tã“L‘œÐxœw ‰%'§Ýf&5´5åA¾P´æ-F¨¢DCýþå1RÑåAÂ]°™3QX‹kÖ<¼u˜Ïˆûü%NžüäƒOIYÕ€µ€ÕÎÉ`$È‚¢	GHÐí2®˜7|–çï&@Ok7¶ýnO­ö?^¾ûYl­yR#Ø¾¸ÖRÛ#éÝÂZÉ”µôÛ{y{±ß‡’µþlm±w°¯þÃ]Ü2[;ÓÒXƒg›ºfr”'­UÐ®¨Ö[™ôÔljshÊ -r’^
–^WÛi.ò×A5:Ÿ‹ô©’èLø	§©ñ9–ÖŽåëòŠœ¼ûyfÕM´–žÐEÌÓ	V³hßÏ]MÓ«‚µmaí¹µÃþý°k­e«’;rÖ
:®<@”µ¨Þ…¹ÔÕÀsÕ9ÈÒŒB¬ìJ3jK´1nîì¾:o´6áœMìK¿üªÔÃ ÷óç›rûúÝ·¿ÛüÓÁI`m$h5ÖlÙ‚5®íÈ­$+Ò%K9ÌšÚ”<FYvå“ãG™ÆÆ,ÊÜF
RÉØRÝ„ÇÄ7Ï±ƒÉPULmêÔ¦?'‰ü_öÎ(¦­3]×£syÎ‘öµ± rc‰…L{l¹Œ•Ç6DV!2Þ˜Nã¹¨œ@ˆªd§…d7¥;7¥3-•šÍ!‘¦îi…²&M”Q·¸ÔDQNÊ‰4ª"u”ÑTg®*›ssž÷û×Ï‚!§û²sÁ{­­ec ÆÿzÖû}ïGN¤z°gÈ×˜„ŒÚƒ•¾bÏ«ÀÖô­Ö|$‹0´ÏkmžÛà4ÙnpK„á·jm‘0Æ˜KKé6"Hx´pBY›Ç6bW[l_¿¦ûö£-üÓ¸Aõ6i;ØoF%)€×èzó+HÄ4Gk×~þè[SÌÎ_z}ëþìý‹÷ElÜœ&uùT‰ÁýÊ¶Fª˜E&£üpq#•Ãf¤<eÎp¬/‰j:3:<6œ.tsjen™ùÄÉ'I€Tï5,hL7R5Û…“¢57oÜÏbw@dXºL"‘Õ¶Z­[lq«MÎ­·ºcM1•¡kÝ	A\öÞ"~G¯¶CÛþ ëBW™l›gœî
ØÜÁ®ÿÖÐö	È(¼„Õt,d=Þ]mÑšã=U]êÄQYI:Wîê¸æ Ît8œWTõuŒ¥lmõð«T«Ñ"[[$¾é|XÖ	ënp¤µ¾ò ŒûžNk
Ö{•5ÓÖn(“,"çh%—Ä¥\È!1‹l[B"c-ñó*ÂoMës¦„GÂCñDÒÉhÀ–ŸÌçºä[Â.ø‹IÌü‘Îê˜ôâ•D>ö¼9Äµú³MN~õ•‘^£©—£`bÏ‰nip
ù¡èEÍšd•)ðSâ³	i”ÛÁdAÄäå‡öF¦dG—t8k·¦sa¾Œ~z(_•g»bWïÚo¦Œ„\]»C´ævÚSÓ2êWDÓÝQÒ»Û¨E£1X¶ƒ!ªs\rÏHÉ×ÈuöW£Q9šàÆQY¥£t¤X³MÎ™,®r¬£Þz„Ê.=?OÒ _=p÷aP³˜Aîµ#Z8Œ¬¿Óºþ/ŽÕüRÿˆ½ýæ'jî¡›šÏ}œå2ÏŽvj„k¨æZ_¡I¿,úñ~¼ƒŠ¶q˜“ÿåu27VZ›ÏžýûÓ••§-KK#£C
ÚÔ”0¬¯oaûæB{–y×XMB[G!ækì×
`1Ïª]Ú¡ÿc•­M`5Þ#*Y{Ù	k"º!f¤m¹X­î£f!©0Ê àL¥Ö¥â¸¾óÓÜª[;¶ŽnN‰áØOb´T0dsŠ¬÷™z²ñh¸æÒ•œ£îP= ©¯'½1KjfKúè4eXÜ«Ú€o‰ŽÙƒu>×Dkí5'ù²?‘'ý¦:=Õ£¨AO`¥uú¸Xß°¢51Sèyb'¬}Þ£.kpw{WE\i†Þl¿aDœIi›5XÛ¸L`›ºƒ*97•ba'M[|q‹HÉjNX»ùºƒ5ØÌIk|:`Û8M¶hl§z’æßfÓš—Ö¼y²ítÛ¾Ø›9êþìµmZó¸æQM‘lÛêº”øDÈ	»ù…Vû­Ööc?þ>JÖF¸7r}ñôâ¦RhiÉHªÏ„h‹}kKòR­™&¤Ìî(‡4®k9ê\ÖìŠæ"
§«]üÛ$Hµ÷ß»uÄùÿKOSbL­¸BŽMØì1¿@>ªKNW«ÉÏ¿Ð­ÌDž‘ÍâY,amüGÔ}ëÐsðó—èSríÄkçÅjr!¾%œä_ÏÂœFŠ:i†Û	käc°x€5Šê49)à)«kž§™a";QJ$ª#:'ÌÙä%}ØžxôÖoù!­Vî÷LÏzá§Ýxúg’›è/sRÊšFØ°ÔDf¯.³|›ÑÔ…ôQT{jYŒp¶«rm‰!!ÌDÌob:ÒdGâLû-sªÂázÓ¡p‹ÁŸK%C¡³™n5Ö¡-fj8n“êBs]ÅW¬©[s€`cy8wk·d¥¥±ZB£ñ%ý¬!}x‘Z:ë®FÊÜ­PEiÊøih§±c˜iÚç›¤…fÞþA•[Þn$ÌŽäî0‡ƒµS³1kî"”©9‘kœpqã”‹8ÿ!>$ÏÏß¿¿¯X“Ë¶ýŠcÎRNèÍ9]è Ö:°‹‚ÆöŠrŒá#u˜ÃÃ¯“¥EtÔ—–ð£„-³é¼ø˜ 7ò	("¯åñ‘)N“JÄz'¶dë-Ã3ó¹»v÷ÆCÆ(Í­¶2\vÈ?¡¢ÄÀKË@W38sc·/ 2Ÿï*cËöhíiN°fòÙve›£8ž!–Ræc…\^c2d1’¡”§ËCÌbÀ·¤˜Q§	5uW‚$¸F˜©µZgÏèUy„`Mß…hÍ±1 ­=™l63áÚ9ýä$‹ž³˜T3~W“˜Œ`›	Ë*Ö?x?tîFB`ó»=¯ñOÄw;ÚIUÆÒ¾‰kèå8ð¹^e*ë–â”±IYƒÝ0Šœ£Õ5…m$eæÅtTŠÂFÊiä¯RúA~²Tœ{>¬©„FŠÔ&‘­ø š-ÏT(TkÏI¾´N¶›œ3‰i!¢c`0PGb„é¨~¶¥bâèïRU9&AÌ™ðÛçºÄa®ŸµÛÉæôþ—ÏáMµÇ¾oY¶¦1— ÔàŒ ×ÙÀ2/Ákøp™‚µpKšD4
žuw´u˜A¤
ÖL±À„Â ¦ikRÙì“Â¥ÙK%»]Á”]†êÐfUmfÅ:"©vØâ3ì}¢æöÀ†Ü‹ùÀ™wþ•¬yX;Éb¹…uOk—ÇÙ¡¤©Ù OJ±<6ƒ¾×,ùQsÝ‘¨æ„5ÖxóùYmã¯OŸn®v¤Õ {%uø¯hj·VZÉõu€Öåì§­'*ÖÊLÃ‹É*ª"ä"›kúßË‚s*·Æ¡_™lœÅm](P£#£uÄVÕ¥	ÖÐÃa)RýEd—¯M¯­ÅãØ¬áiC×`?†“Ù(¼mbîñš>ÅêØDI}Ñâ<¿Xãã"Q*U4;•JÌ¯Êùh’Í©¢5]íE-–¬'K*Wc¤nµi.(Óx†é“)‰Ì”q‚'ò<¶™›	ýÌˆGÁÌ…èGA9~þÚÇw‰ád%1Híï¦´-îÖBiR’w¿![³BJý¹„§RrQÆm¦CÒ¯gµÀKÍ®R[b"ï3Î¢Ör–Dÿ5­×n}rSEk5¹Ak³PÕ	]Ä’ÅÏ?$3ç„qš[gô²‰Õšm+bÚ´p»<ÅiÙIêÇì£­«dˆ„…kDÈj»¥5PM¬FDÔða¯ä~ä~ìÇßEÉÚ*Ò7Ô³pšéqA\–¼]N.‚iIðlQ°ÖsHI^§/žNâ#¬%Mß·k–©(&Ê9¤u±Ž§) ÍþÙm¯°&”¹wû¶«q³öˆÜúÓ›žGªc|JÈó+ÍB=]RbC"ËÕÖÚA§‘ÑŽîl&j‘-•™0­›–}æÿÈ¼óßþÄšR÷.ec ÓÆ·ßn ªÅ¤š	QT€&ç³º\ìuÎ¡^×L@—j•¨wèÅ™ÈTiáµ.«Ï¬Nß™°W—‹ð”ÍÔ³r‚ä'T—¹ñ§?ýyr¼WŒÆÏ!'H¦ÀiÜÈˆz¸T¦³8óTÍ´¦S¨¤‹ãb}­ÇÍ¨ßâh…h•ÒØûó¤&_âgm<KN“æ¢G÷*bÜ5ERƒ óáçðúš\A9ßìÖlû™]tuâÚn-Í‡§4ÖnL$ìN@j,mô·ÚS5k²¬Þ7$ÒÙ%ãgkªÝ:™Öb5oéïk×ÜÜãCX#Ä´Y‘¶•¤§õ£ïñ¹xT3aíë¯Í^Z{´kóÖ`í>¬öÆHk°ÖHÌÖÏönzæÏ&©¶Üº¢ÁÕX%w.Pè?’ÉW«cµRuØNñ2RÀÈò]ºpáäØÉ½ù^ilù¼”µ'Õ„’"qñB°ÖB'òÄ¡…£eƒ´J×œ¾Öº¬­á5­m­a~»CµB¥“ø±‰¹|x<SµDðëzˆ“£Fjo<©7x¢5pïu°†Š6Ž8vTc‚ë_ª°’=<‹î€²4ewÐšM¤fÈöC3ÞügÑ’	=V»ññy„Êâô$¾šL:ÞTºè9D5¨ÄEAšƒÕ¤6Þ9¦ÒA—o9Xc±ÛºŸ`­ÑRS¬tÉµ	•
 ƒØ,ûf©µÙYkGmå>1EB`@ÜùÕ^*¦5JÓ°Â¹­)¥ÉúYƒ5žuf†=ç*¢**1qÕ›|5„|eŽ±$LêÕ^–¥	¬ŸÄüé6ÂŸZbÀ–±š¶4ˆ™EˆnÂ*V˜æ„5!œÑ›Ks“ªÆG¤¨XƒÐˆ˜!—ûPiWñgIX‰šG5¶UŠæ48Û.zrñ·ù¤­»ZNÌÅN’þ¨íDXÇu¼cË$I2f:¢5›
Þ,2m<O“wf'u`â°mEt .Ê[{÷k rmjáákiŠA³´Ÿ‚e¢³OYñOëý#E¿¥s„Æ¾J“r—üHxPÛAjÆiwžá÷ø»gw(M{úà™¬úI{Üüªcó¯Ï6ŽDZ÷ž=½¥’ƒŽÈT˜m3Z™e3}ÒaVö«B6«U¡ Íct'O×ãíSJÙà^¶ë5MdZ]¶ž¦›”…µjq/­©FR­Öâu¹Gª)g^¦È: Za´U3›Æb]eìUêb•68ä¹eX,óÿBIõ—{‹1.%Î4ù|ãÃ@>ÿ3&ÐqÇ¤ô8)–Ú;næY•–ÏJ¢©P¯>ÂK7Uð=£EEdû;m¾Yá»‹±WÁë»u‘j5üý5Ž·— ^…Â÷Éå{Ÿ<xp—·^”)P³EÿÁm p¤Gcd›²F&*§7"4øxÖ4âœ…HæÚ2¹¾ÀÙ8cÝ#`4£¾Ü×³áã›—k—(‚–§Õ#`Í;B~hUFjxÓ\=½Êè”f³¡ëU±Ö¢> ¶ KòÕùóçç×.ÎrºåiM¸Û&6‡‘ÉnW­ÍyNóº±Ÿ¹ûñãÇÉ”G• )ØY\”–¦^£ò_([¯µC=Àš³Ia²Õ©O ®\¥³fàM¦$)Ö0ÛR¢¹Ï\„¬¶[X#£«©¸<½-V›¨ñ	ˆ8—$å>--­€ÄFXš;#Tö‚pµA²çÀÚÂÂÔTº{jqaJM¼ù¤ô-ÖÔ“uÄXícfJs1YíÁW›6»TÖß`qÍ5™„ù‚ªâ5Ñ „†ú"šÕµôÁÌHYŒ±U~gØ¹¬ñÛøµ3¡¼¢©š—öN¦èQ°¶DÃÎÈ+Â4¦èÅ2*³Î³àÌŒ@ââå%qYFHYÅÀo¬²ü¨y6¬hV3o;Õ%eQ,ÆQÎ’9Æ5G+õÎ˜DcÊz2Hw²¥EÌ.Öò’r>¶ã²3¹K•”uóÕöÄ³~Vþæq·KÖÁ¦-€4ÔjU'&¤œf€´HM°–´H'˜ŸÞhÄCÛÁý×‚ÃácSŒ}¸ÃÑ]ÜžèÌaßÿûï]½hÊš±šU¬Q`É¦È[1/íØ<°£©^M¤f>:[ìé?å!ú[éWÒJ2µ ÎØ2ç/,™ÒîLûi¢>Æhdš¿º¶,}zMn+Q…ÁÛ@NþÅ¼ëkðé…'ùêäâOp¶³#¶¸=^X[¹+·~ÁÚÖÃøB¢@kHl¯>/>o¯YO"Âþ73‘ËÜrS„¶ýÚ6_O·#,YÛ)¹…j›ä7kô©–ëˆÓÏÈÍD66g¨bA6ç‘%çÊ×nÃÉ_ïb0Ï0MÁr(n–ÜCzïê xMž<ÎA[U{1˜M9j¬&åqyŽ2¿Õ9ÁÚ*«ssúå¬ËóÕ–2BoyYm¯´¶×2tð_ïÊD üT¦‹hl&Fà	¼É;„lE—[(uùKb–qÝGÔA‘häÏ©ì†[½6y®Ò<ë~.ÅM©d
×û>Å¹“åé¸*Å^f/ˆ¥7(Žq”4ý-+“†Ø2"1hSÞãó.[ÂjÎÄ}K¶’é“ ½CIÄP¬õƒñ$öËDÄÚ ]Ïq•4ÃZV£[äv¤K| ÚNã~©j
?ð=Õ7t¤ÆQFÖ|š"ª®Ã„êƒÚ ƒ8vµ%èJ· ïŒ±ß¶´H%C’ÙonÅÉ²MkÜgti1úÁqmä@ÂQ‰¬YSä¦¦_yå§?ý'ñZl‡†"S–üèïwXô‡ÝÔ;%5"ô~dù%mÓž=ýòËÍg8ˆ¬o~³±¹ñåE"«›wž­w´Ü»EF§è´ÕhgG:°QŸ¦m„5Gp%k™2zî¥€]û…E`î×ÊAI×êC–eè¨ÞÞ¿üÚÝ&Å_¸C>‚Ôx¹‹ÔÁæ””wØÜPàœÎÖk([ºTH‘´>Ø«%Õ–ç+Èâ&ÌuõI!CHŠ.ÏkgîKs«h›ÑãÌˆßÄtåF7À¾aº¬Â}Ì›u‰xfÈ5n¾‘M¦5}Ü4ã0]a	5?H°.4jú¬pçYd=T¯ž¼ði/¯4÷Ææ'÷Ö×¶•µ»7÷äAú^k=Ì+‘¶ƒ=ˆmýe•QRâáúÿIá-»ŽCZÚH~7I)Àü¬†ø«‚5ZcÅúô›°¾jP¼!59Z…îýdB’B{ÅO½ôó§0ò‡·i£úZÍÝ²vÕqk¯ó‰4TãbæÃóçÏ“
ùbZƒÕˆEêC­èÖ¸§·×´ð}±çþëOöc?öãÇ.YÑ’åI@hÄ;M¾Vu@	ÌuÐš„5´Ì’®Ú;#eÍˆ8“yReò…´joõöÿìtr[ZÕ^ kâµÇú¬«ñ\¸ŒH£¯e`G˜l°X´M”5”´:“@•sú1f‚ÓSšÜÇL{ûèGÌFä@–s¿þ^úË{èj¾Ï™XÍ5:3Xû¿íÝœ„Ô-²n•Z\(Œ©NÞT%Cä{•©†Ñ2T9w½ÝE”‚#éMŸÿñîôÈôð+ÿú‘¬•Dkô9ð¬våÑk¯ßkå„µgoÊ(±X«qa]VÅlxh1ë$˜ÓXVh8cŽætmŒË*„1op2¨˜o$¬iCM×Dk:Û¬5Ì% ÜjºMô/CKYC¸àú¢¬Iâ®tMÍ‰hnÙ%5±¤ž®ˆ›Ê£°M¯¼€ÑÆYp×8tYbi±»fÍ3šð3­á	YÂ£c‘È1A¤5Yé—k¸æ»[oÃš·	Œ{(¾¥`³Ý¬fXgƒ½´f{qˆ<4ûý÷¿ER“7¬öÖ××þñkSÖäÝÿšsîŸ]Û¢\möüüE‘ÚÚ{ÖR=ÇXr·f<úÖ(cKéûH©~&Ê$-¦XFÊeª0a5$Å‘áWÞ™Êðg1õ¯âtšÇT$QT"$§;jÀunrõöò×àR ƒ0Ã‘ÝiâèÌîko-HmùÖ`²‘Á“ÓGµ˜¡m;x†ý¯¬éj¥¶ÂZø`xÚo¶"èmg\ÚÑfÓ„5Ô0¶0áLë,cðKzïLc@Uv#¸¦‘±Ô`†Ìß†Þ²æ]Bx'ÎÏŽŠÚC„üÖ`µI%Bò‹Y?27yxý~yÒ ­7öêËw”®-·nÁ^{,FÄižÕÂØ©¬Ý5ÙI§Äq<7]M9ŒÂ³QÉ¥GJocÌnmóP)_¦7TL¯hT¡Ú‡ÖÐÉªÖ%0Ž]qº[¢#Ì%æ“|ªTÄØÃ^@M¡cz5×àØR×l+m˜yˆÐØ#lå¾Yç×á8?““ÄD`p¦žkJŸ$¹vÉiö gøhÒ™><DjžÕ¸à™@°÷ÉböÑiáÀMd	k¿f%>ƒÑ;+ZSoìÛ”¤éñPÃ¤Ù£»ênÙ^e2u´i2: ±¥h}h-­RææïŒGr)×¤“r5n¾fí!p¶'ŽsæýSÓ£¯?ÝUöì,SÃÿw7©yP%µ’š`,Û@K#ßqã›;_n´2Ç¯¯<û_¿Û<ÒÝÝ–im<8Ü–kµ˜i3ªîkµÊ‘¶\´L?™ŠÈÛ‘É2bLÜ!Êµ”Ò±º>æ³™÷gèŽMÊc29š&Á½6fSc{C¤ë5fCûÌ}´"·­Zÿkê|Ža0R'õÒ/u:3+/o*ÄÀ.ý¹j>SÛ¸®!
É ¨:—¥¬‡¦%D½©´Šz¹YŸíÞ£LpšÎÆÕW.\¤7¤ì!e››'…ÉI‘f”.9Î3™Èb#A®„iæc²SyƒþJµö‚J‚/|:Î®¹åÍ{·–kd–ÞØ“é`MkŽÙ>?ˆÑ¯”6\ ]dŒ×à6½+]—"mb3;ùi+»ž¡°›µ:ân†lÊYº{ó“OsòªÉ¼_/m5×(èópåªÏ<tèÃŸ_}I¸Eß5"‰¹›l=«yR`­ÍîDçÚ«¯~qéü¥ûóžÖ®y^cÍ˜®ñ[·æ¥µlX°æÖòƒüO?ÙýØ¹dæZÈª^yaa] •M9ÿI‰k|þÓôa£ÙPÝ°eÒÏ<(ˆÓ£d™4HM‡Ö¯”O .GNÎ"Œ‡µkÞ
Ò—¬½û«{\¯êðV·Éhèkê„]“]SÙZu°Z*tt#~]¸ÀåÌa`­¤sƒ°–-•†¯_ŸRwµ¢kùË_þ¨—Öfûýÿàu˜,ß.!o©v;VQõŠ"_Ì«¹ËG}õ:‡5tD
|#ìàú°ÎÜu.ëž˜¾>=öÎ?«_ÀÔ(ŸÝý§¥êîöh–éšW6XÃŸJüöéŸ—­kL÷ $…ŠÚ¬ÍˆÒh‰\q¡	êŒÅ€ò›:´Â~¥JÚ¥BtÁhrãÖ˜¶lBüUõ°²V¤v>«W²¦*8n¤—h’rîod,ÝZçtM+—rª×“P'J3)fwx«ã6/¬±fµd#Ïjakì@Nó²°«i4a—ÍqGŠ§³mš‚2¢~Ÿ„ïLDBø"†9¬a‘[¨«ùÇGHYÃ¸1zà"â™ÊfÒjdû+¬jM°&\›Ýšÿí¬SØ¶d+"E-—ìÄ1Ü\¥ åw¥SÅ$®&à[Ÿ5‚ÂŽR–wQMˆÙ€ZMgk\s¨ŽdÇNV'´¨rý¸Wôæ3²”¨Î‰Ã&'@a'//]xò¿Iõ”µ–)XÛ©§Ùz­­(çï.Êš2ÿ¶î¶ÐÙÖ[xN”Î%Jš´f¸åÛbÇÜö’pÌo*$­ù±÷±»µiÐ1Ÿé„µ Í]38Ów-pãˆÑC$Aò¦U!¦®¢AÜ©Ëò:çò–?Èä9JŽô$K	UÊè{Ÿ•Ê9s€×Ö[«˜øË±_!ÁíMqÛºáÚJ‹>k°Úî²5 -ÔÖX¾¨hm¥ÝÉGÝ*éÂŽÈBÐ¤?RÑ“ØÌ„µ˜96°ÏŽ¢~!`sÈúÿ:û ¾Û†´yr¾ô76d\ qBúKX¸™qD–%‚¬fœ;/ò²£A“öYê%[A¹;|ÕQW Ÿ0NÎÅl†^Åc—S»±¼É£Ã²ç’Ýž£Ü¹gˆQãB6/¤ÙoÃÂÁ eÑá ZÈj¶iOd	•	ÀHëêî–6AÝ+íÍ$ÁŒ@2Ù”²oÊ(Xs¶„6þLDò+N!Ì‘éØe«?§, Çj†RÞ12UåQØëŠ÷YS8Xc¹6:š›1\ãîC æIÍ—©é¹ÿR»ãËÔv“ÚïT¤vgsý>"›¾ÙØx°²\>þàÙ³ß=]Ëé31Ù²ÖIuYÈ¦E	¹¾jÑé™²­¿>œYÚÖ¨áFcìÈBlí‚µÌB™lI,$³x‰ðpúò£ƒ¹I –¯ÕbÆhÂ}…KläP³éIGÇ=¬ASvÝÄÉàBBn#)EÎŒ2xÄÖ–ìGˆ	-|`Æ.­HovÕãøg™ákT«•ºfš*€ƒêêÅ3Wb¢¦/¯‹˜ã–¸/X«BY')à…JU³ƒ¦À;èR:`Úl€d¹õÖ–˜gÇ…jƒ:…¨S£cÅ¼˜I0Ÿœ[n>¼©4Hy}¼Öœ¤–ËkýÑÎö7[ük¬|ÍÃ“”ike¥¼§ˆ2¢šò‰\ÙN¦Ø@`#óòÖ"Tû˜<H½6°FP²f¬¦fÒÒ€·÷ŽúüÃ—žÂbäÊ/ÑÕ:ûU’ó°æ8ÍÂ­ÂVÙ\Ë„Ök»hÍ¨¦èËì6„Ìf¶-FvÌqg¹Ÿ¹ûñ£wYãså:S\ðË2ì_Lá3"Ù>”X¢š-É3ïÏõG5eäl¿Úo&UÚ´¹¶Ö,:0©Š&?…µfA>~üþ»ïžáh!0ŒØ ¦aÏÏ
XË”Ó4sAá‚¡jµêÄèôððX­ÐM¤éƒ=–½ªÉ$¬&XÃ‹ëÊ[³çÖŒ˜¾3X³Â1:¬IGªûv­T©a(D±«Þ.µ­[w.Õ:"0b{±¨S¹˜$SDœÌÌýèú;Ãª×å×6æ"¬IÓ»‚MÅ,9ézéïÐôîÖž¾inìùv5«ihN¬ÐÁ¼£)%ßÛkÝ>ÍîbÉK4ìŽ”Ö‚·gÙjÄÙTYÏS…·ÚÀn$í“I¡ZC^î
¦æ+ÍZ„ªÜÌ¯ úãYê[Z±s2ýˆÏ"ÊÙ'Äã>©©ìÉë_•à¢5Ý-´b@X«Ù†7	…66Kùi°Zž	v‚‚µlö6]°l1û}¢˜.Â’ic,_’¶«âŒ9Ì†am;vÚ‹ì*Q³å^X;Õyh~ö·oÝÇ™kVpöˆép~® Qq~~žYˆgôÕÖ(UË‘ú(»ðþ~¬ i±ÆË;õÂV±MgŸ%a¡[G¬2`Œ<GÐŒv»Š1|ü9¿øT=Í°«…Â§ÖdlH¢ã…%òüäA?iÅh-3„š­­!¢1à¦°Ãwï®ÝØº±e=²ÑÕ`¶åUF««“ƒk²¸²ä¾œx¶­²…¾#:dîÁmoŸµÊ8«Pqs^"Z8ÞãÍ¬±ÜHm§ÚZë˜¸7õqÇêÄÞ÷‚5Ño0nÊ¢ Ùu	}3ŒiÇ>ö^¾üäÜ¸Sáò	ÐgæL¯XO~4¢Öê®.¯¾¡vÙdBZÜ½©„]ÂšÕ©íUÖi¡¸v·[(ã0h¥ˆ@âb-P“LÎ'q÷ã“Dè›5Êã¬rn+ï	=
ùPµª%©oãX—«Ús™17K¬ÔƒV³d—ŒébLÏEkFclkeK…44jº›i£ˆŽc6¦à˜]L´EX2cÌ°N‰‘ì kCÁ^Âö¹¶Ö´Çiia¤"Â.{2Ã5x§°6«}x
ÃTò6#Bç¼ã¶œŽv(ÄwÐ‰«jcÂ‚Ï"‘Fglê£ÁÓPÛú(#U‹lk®Í×¹,¬Ac²Fì†5vrÔn=SÓÉ¾)ÐlXñ
…¦Æi€Ú^Ró öbçÇÝ¤†ï#÷ÿæ©ö?CRÃ¡s}}só›•Ü­;w66î­ôõui%)-à2`+™´ñ)~5(‰åŽölªŒ³Öê£T³n–í")R‚O9Ò®DÒ.ÑG’Ï…¡ú(u³#èøYû¿7-ö’¬q`Öß¼‹öÕÜnMÍXCÙŠôE‹	ÖÜÞ!­¬ì»(5L¦øM.)&,WamœÏ®Ä¸+3ÊSäeäìÊ¯S6›¬Á€ÍZA‰ÅØPc¦·²D-o“¬é¥^\³ø°Ik¼(ãý%Mœ%R/Ju
×Î‚…2ƒTý«&Â^æ©xa¬^ækKKøR6‹€'µ±êðÔhCçêÚXUrV»G8‡‘ÝyŽÕ0‚ì$ù‘è‰”s,{h½Ö©úI®$È2“ÓiO‡Ötm ÒRÖ£)>òÍ\]?™Œåzú‹Çlûâ&ÈæFÁj²ï¤8qÕ„µkÜÑsûƒW¯|.Xãê8“Ên7Hká¶›);×æ/Íomí¢µÏBTS¹ÒZtO¤Ç58-4òÏêöûÒÚ~ìÇÿT‡–ééi¼ûÊ´XÓÔ š™ v:—³+—L•)™“3‡Hâ2Âñ>Ž¨7™	!„m«·ˆÐ˜gûš5cµ÷v÷XÃ³ÿÈãwß’[˜UÚ3Âœ8¥ÕK4)'cÿBº­£ÐA±1´”ye„ªV1üÏtÍÎ.\ÿyJûu®O¬öG¸ðç'^{Ý<>·`MñíÆj±(-­hº§0b3Ñ-:uD6c3§¹•ê:µP—˜‡³‘W=Y}ôúÈèââu½4…s©ÅúúÔ^Ç~ÈG¯ó3’›þ«ïž*“.ÜßýŸ':ïMä¿ñ"P¤+ˆ	ˆ2¾lEåa*c1·¨KD%§ÇACFÉJ;á¼«Òw™ù÷YX
vãI1¥ÁjòÔsåA²Ñù¸H‹‡ó\ÀÔÃ± «Ä|£ZŠÕ„4¾bžU k]E³=aXde¹s„‡5BÈJHm+On×Â Î‚kÜ2±WOVU°6–‰‚32QRá[ù@@kÏKVÃRZ¨®9^ó–«½8ìYºõê¹8KÌ_“!¤]l«	Õ¬ÏÚ#kâ´y\FÈz¤x­§SýÑþc§Yõ÷Y‹'¾]]ðPð§aN`§|iMè™tmì$´vAÅ—™é± RšûÍŒE"J”D<Ãn_–ô \â›èidæ£…?ÿšƒ5Õ«­s_Y£P›‘»ÖaMÉ[w×à(î\	íÿ‚Ò0½7X¹¸l¥gnä ý*xì¥ðd¦VÛ¼§c¦ŽFj2B™L?s‚˜ö‹È€5Ö‚5öÑ+÷¨|€.]€àùQõÇ>×˜]g‚VÛìãË/°A{&ù¾kOœ°&7‘Ã˜åÓÆ€Ñ›°¡Åú2Þ+
FŒÁö›#6Û Þ•5ÝZò
Im”äEÂ¡!—¯<ãˆÆÂ)–²AA‹»eíq“å ¤ö’ÓDoM‘“Î“Ê@nÖQ‘Vd[ü¤/†R¡$Hóìc	:"W€&)ÌIz¢7»	£»Gs<Ê N9ŒsÐº£¹Ò3ûBÚ8*Òø´Þ¬)Øp˜æ[c+„‚–€Ù½“Õláµ6w=X½1ÖºLn†ÕùÖ¢V$¾²…Æ)¹®0²ÖÃG™„¶1íë’©ÒZ{˜}”ée_Šm¾”9ªË~á¡…jÓ~yj¬…5k‡¬YM7¦§GÜ¿QB;÷Ú^Ií÷{%5oû¨Vjx
žm<ûfãÎ—˜‹Ð]må©ˆ-÷€>ØËëåÜZkee5“ÌtgZ‡­}&ýS³Ô€5"MÊ¨N¤“‹9À!	@,”q‘’‹¥¦nÊ² Ì-#e­ Úëv‰ùfjq…m­M'Èr«›á¿7sï5íª„{l‘škÚùógTŒi¾PÑò••&s©õœ¿^æ3šKÈÃXÍAcE+h.ÑnpC¯ðõÇyJ­„ô¬º¶
³c¢¨ÖF
\$»e¢ZU÷5½eÍßd.W$™þë'˜ž{¹ÖÅÏ—®Q¿¦ë½ªrW:LX«¾’ÎÚ×?þ7`ÍÛA†°æiMÿ±=Ö»¿ÿ@¤³³ç`*J®|›Î:"ˆg`Z(Ž˜m©"â‚AÙ<öûÈF",W¡· N—ÖÞ~ÜÊ­=¾yCï“K¡²f¬f°¦`	ªi$[â«¼w{N™²Æ•rë7h!>Ûk¡‘òÁ­K—¶¶æÏ;ZqÍ‘šþ}Ö·ÖÚ$­yZËÎeÓ^TÛÏƒÜýø{)Yã‚zÕ;ÓÓ§‰RXBš-¿] LŠÙ¬<6•´ÖknGÍRœ&yŸŠn›;s:†¬å0eÌ™´&]í…ö"·?þî³r¡@!tVÖ$ækèµîB©Ê•´tFaëÒ“»0œ‰«•†§kµ,3×"¶ý¦©ýú4¬f™ˆ'€µK®lì»_ù,Èÿ¾ÙŽ–Æ	G>/iÍà«Î6°T·SY˜p¾du\Eo`©O´+Uã‚]‚Æg•Òõ µÅE±Zaqñt?…È/½Äe1uA½¤Z¹_	Ö$é=ÝüŸo&8+í•cÉ`/t–ÈA\³Ò²*]bRS§Ñ$¹9TW4QÈÆ‚5W¼‹¾È×ohK×,Iœâ™Jar<CXiL3°p¬pWß6½2¯˜á€5~:Ç«ÒÎ`7¼Š5ƒèyP*š<)¨sÚãÙ¬ˆÝ|¦#;õ4
†,Ö~Öµ¬òÉ3	r¨évSîNn«ÎB(¥5îÖ¶!ŽÁ°aËƒ=‡.¾Eä£û´Äv´Æ{U~â5âÚ#ßgmv>è®6¿€õwæz¨P°qÃ’P–Š)pòˆ9XfJG1ß‘XjC0œ@æ’ïðÉA.WO’µ“È÷R§öéÒ§Ö‚m"]esìÕž<99§J5Å›;­­m­¹,Ho/ŒpŽyã!ëœ´7SÜVWIŸÌó†S©d/ÝÆ¥VnŠ3Ü	ÏanáaÍ¤6¿íÃ“›5®x…¯±àk)ØÁÐúm,„pôyŠ©)¶ª$¤Ö¸²ÀÚÑ@™«ˆtlØ*s«ÏuÆÖl$Hƒ¼­Á´‡?²¾Œ–¶LášýnVÓ›_Nkú·W[ãnA¼¿ÓòˆSŠ¬.“1µÁ¦Gš‡H{M°² •®©ð÷9dÍÌpË3 ÓIk ’!<ž‘j ]S=9Eê1ˆ¥„ûÓu¬Æß1Ï3ârRá’šY,9Xã¸6ÍAÈxLÇÙ’êg~þŽæì»2Zë–„tf·—"XÆ½¤¤¶ÀšÈ©qnÃá‡C§Æ<ÀÃZ{ÈjÎ,t”Mk°YT"DF)dSˆhÁvXb€DÙê„"–hYæ)s^-£ŸõëÌ˜IË&+Ö Y
ê³Š¶Ÿ'91yú·)s{¸µe#¿ìÙÝhÍÁ¢ÚK/=\S3ã)‹Q7NzC‘=¤öKj„45êÔ(V[Y]~ðÍúò3vl|³ñ`óéhi‡×[©rä«õ:ntî˜.'ÕŽŽ‚54³À’Pmm¬ãTn‘ouosa*mŠ(¥jÖ ºP^Èê[È<µ02Q /«H£n±¾ùã(ôÎPÌ­iä®@jzÞmT¬ÉkØØß¤·f^Ÿ(xŸ&êÅÞ¡îj\/ÀÕ‹Õ±j³Õ&QW[ì--X#ácœGôÂ`2~dßÌË(hÌŒØ!7ÆF.ø8F'eu2YdˆÕ‰r0&l>]Ýä`¼áê²óuf±x©JÅW]|šv!*¦•¥SSI\š«°Lüù
3O5ÛþüÖ'ÿö	´öà‡µ0R´æƒ†Ø©¶Nµ]‹fÔóÏÞÄð³åè*(èËÍ‡L!!µhJN7f‘®Ë½-ù÷ÅÉÔ­·ßþà1/Œ²¦—žŸ5S+	kÄÕÅUWàßõ„J¦%SLŠ¼Á™¬ú’l(¼²¶cŠô¨æ‡[o¿=?ÿ‹_@k³!­k§õÌíŠ5nÏj_	ÕÄk#lxií?ÿd?öc?~Ô’µ²þJ‘´¦ÕiM´S‹|´¨mñ ,S(ýQ×+åK…INÂ™Li…hš;kIŠÔ1 íX4¬XCXÛk?¾mƒÕj\û¬Qa>AEÚXXë¨AkYó_Ê8ñM‹	Žd°ü aqìúh¡ÆDšQƒµ>­™°öÇ¯%¬½vÓüy™OÞ•®vç÷wž-Öà²RZ2ü"øJ,tÆ¡Tz9IÁdõvöTZ·HY3·
‰|¬š×jÜ2ò®\<ÝçÁ®ðùJÔõÒ›—þöér!êèÄVÎìjÚ¯“¿%OH!š©[Í¸†²$F™é‚æ€šŠJ¿˜¦™TEÝ¶G.ZªE³Ò&&‘\¿”¿§ÀÚ3£P£5(K—êÍ7€hÎ4œcý
0ï¬™ŒFrhÉIk’õ”ùH¨@jnéG½úÁÀíôž.B-¡:µR:RÅ©¼Áød¬:Q¶}[†¥E}NAW¶;ØÏ?0ƒH;ô–
ùbZca°v°ç>¬Æµv–ÀšÂ¦NÕ}+f]Ÿ5ì;¶µuñØÖýc‡:eKiv"rBuuä§Y“§T?&¸¤òwµÐ·h‰0œ9²Îd¦•I58ÈœH§F/œü4ÑÃÖ(\ã·1<rá$»s“¬ÄjòŸGXÃ>cùî²†„åB¶V¼®¦58¦Ý]a¹ì’9$D¤c5(PÓ¬ä5oÂË%#¯PPÛ	k‡¶‡îŒ¦µxÌ-Ì:„=êšv§n’5RKl0ÎL!•¤kè„°ÓJñŒ=ÖsŸ5€¤#9Çi,.;~œÒ¥Rž›ÖÈå—¶ºúÕ‘u¨=mnuyý®²AU±vÃ…jÖ^¨­ITûÛ‚µ°3öñ!K‚4XÃã¹õ•Ž{eÍ
A…iqŒíORçN|!2£µ¸üÅèÏVœJÌüLHÊH±]Gx„.“(;Ú]©$$£›á¤œY&ÂÙvAœÁ–½6wÓÑÌ_$0'1‘³„«¢³‡ëîpÆ¢53îgÓ3k"Èn€ÍEÜ,æKÜ\›vÐyŒÑ4Pl“š@žXOÃ m>æ±@HgþhÊ¨òA¢Pc€g¶(§Ü:jEALýåi#J;CÁ¹fýÈPQëÄxùT#2NW;²–lËŽ¶†[ÎòÃ=#ÞaäâY¿Ü´Âà÷Ôþ–Ônÿ±¤æ-E,È|Üø‹þÖÓ?üáÎf´Õ:||ss­•j£N*s|¥u¬j4À*«ŸR=r˜_eÉ	{FàšE9“wòÂ.ÈúüY(c7ËK„5ò!¬ Ë}Ò³#;R¨Û!‚ÿ~ÑL½edÒ7öÀHâ°BÝ;Ž5é$5¥IÚŠK›\M¬áVJu³¯ø £ÁµšûË·±oZž‡`­a9¡œZ²›Y²MíêÌ8¨+õ^ær„úäëDo1@Í@—Çg˜t”ª_Œ×êd
Çêü•pQGÿµB¥Q¤ m¬V-Éƒ§’Îº§'dþÏh—ö÷é?M·w¨ÑÚ½ëË²îÍû­)vÐÚÁýW~ <•qo^èXïÕŒs%Í„¥A8Èt-Q8¥÷7ƒµ>ëö—äUy·ÜÖ'kk‚5¥AR³öÞ©÷þñê)Þ˜§N½wå­kT_0élgvØ;TÓÂBm[ñöÛ[_üÂÓš,%×|÷tšo1ŒÖ"ÞeD·9»ÿ½ó‹iëL×ý¹Ÿû‘l‚\pb!'Š½m9ŒEíY{03©«­Èù[™ ¶UÓî“’›ÒÎL*M‘DwZ¡ìàt¨Ru‹‹¢€¢îs¢ÒÖ([uÔH½ª´ïF:¿çýÖÇ‚!=çÜõ†7x­o­el ¶¿õ[Ïû>ïAäAÄ\²öã¨‡µ1SåÂ‚’IØ`É4‘ÕpÀ™÷+¥$uÃ$zZ¶¤~¤.ÝK››Z³|,Œ$ÈƒDX­ ÷dA3_%5WÛ'iÄ`-•?¬’+dmx˜Ä†K—JöðÖU­Sf™ª1ï/N^ÿ]º;«9£TCù©¦ÐWÖkÛÏn«rìÛõõeq^"®ÇcRÌÕ¤¡å
XX1%HH3€cŸU´™£`MûÅr]]«/]W|HgÒ’ÊúÞdD–`?½†Å/¨XÛ±‚ÜnÕªeXW”áa°¦êèÞ‚ái<v­L>”ÎÂzËà–^˜!°aÝ¨4Û)Jj›hQ‚÷2~ÓœˆîàÜI˜Uš¦1Œ	w‰õ¦«Ydƒ9‹l*	 uMçä(Yð™Ü¼Û;±¯ÁZe‡Ù €=EkÏBVs[¨F£ˆGÃŒs9ÁÚpq‚ÿéêj,ÆÔ0	ž§wRmåÂq—÷}ÃßÕ5Ê¶al†\ÛáNXmp¼§gðÑþ ]íW†j°šhÍ<ºv`ííË·^Ýtm,•©’ïA«ÚŒ%@µ¡·,pÌN?‰Jï8¿+E¬€Í }ú4ï´*¿1µø„5P­Ÿ~ÊÖÆ&¯ŒO#¹Åç)ÊzråŠãEÙ‰>ýÍXs;e+Â²åaí&JZ«yvÍ Ž…²$–9h­855j)• Å€¶=´Føj4m„ålk>ØÉÍN¾vúhG©‡;:¯#¯¹ÀÚÏqøí˜©k>9’ $‚ÑˆhM•lê8Htlâ¹@Ms´&ìŸžz8×o?ðŒ`¾&PÛ–Q!_+Ô¤=,ÍQ°ÆÍ`m/§…î"¬÷”¬Ù=ƒ8lE>ºu¶w÷ö>Tt:ËÒáðÅŠ0ˆÒÖb†m4	Ìé¬¿gÝ¾©®ª;%?r¦¬³d»"#¿ar¸!›N†uç:ïq6½u±a
#;P4)$çÙë·ô3…‡ÝoÂ( µN"è‰mHxEj[nŽ„˜Ì	i¡5Û»ð&NRs+ Œ`d æ‚]~Ÿ˜™ãâ_JhòPÓÎûÔ\M|B¤Ùô`Û±úÔJ°ÁÝ¤[Ç¥ð”y]	Ö8¥‚È¶ÐCÎd"±•-ÄïäJsÅ²y«Chû­û¡µÁ¡ñã+íŠ>8Í@-$µÿoI0›þOµ1M}Õ¾dµ¹NOµFd×!§™—²\úqóÊä#Jb”²¥HZB{h.Ú«ñ§X ®x!“âT[ÕçiA5ßšJÃvôÂ7äÎ××w1lÖˆ^k}ÕíƒFÃzí_4VŒÉEWôa[o4¢ðZÕÖ´D‹óÑ2¿XVÑÚIµš‘†®3¼MfÃg«¬©Œ°)Ž
m\J˜zûçÔ/Tæ,Æ«\ÁÕm1\W7Ë÷ñ£Q>0Q0Ûã#óì®Ä1©«–+*Y£ƒ\eMElŽHyˆ"j#Û]ÁÚéT÷á»¨j›Ë«íÍƒt­±=®Ù¸#ª‹Æˆ˜v½ÁyŒ”ÚÓrÇÙ%«E…jºˆ`–Z¥üLJÏe˜ÆŠ­‰³‰„5=³¥AÂRö*ônã=³Øößûà'ãÙC=o¨KÌ ÁšŸ¸öÂZxer/¾%¿õjóÐoß2Z»öZ­qÏ}Òš5‹pðã‹‘ƒ8ˆ2~ôÐ¦ËÌ©±É¦:4Ö@3K´†ÍÌ	™!{˜;VWcõñÓ³Jž|L5kkòÜ
j
b#ÊTÑ³/Ö”Ÿø™XÍ‚:5¡’rFÕŽ5U¢2g.¥#HÛ$9g^!A£<ü‡'÷þõÌé…Òûß`ù‰`í“‘ÁqÁ‰kšD˜ž“‹øŒÙs}ùë‡ â™Õhk[k‹P?ìj—)kr¦`Í‘0«Ééƒ}`MF‰…Ú™ß-Ä3µ|:)ëØô¸µ³¼Æy½ò/£ôKâÙúâX­B…ZÅ²CÐRFãxwú?æÙP×¸îÎi…‡õ¼µ.1uÍ|ÇL›!ï²î´5÷ñ0ù›±uÎV™_åù­“gÈÒ`Íè¯«XÀÌ¥ +Écµ	jÖè7Ç¥|k5×Ë“4Ø” Ð Öœ…ñ¢NØ,l ¨°­vkí³ ªyX#%’çX‡‰j$Ud4†hj-5š)Ù¬´g

¡+ì¨æï¡Žk]»²g·äZ1ÍÆ€ÚJGÇ¸Ü 9Gó­—Þ€×œ´vÍÁ‡/¿ý@åj}}„ùõ3Õb˜ÎÑ¬M--xBÞ9_TD8[dêF7äFWlgŸSšè§6Š«Hÿpµ»Z\”ÇÈ•SÑüØ»ÍŽþ‰VDèÙ˜›6T½æí µ\kjMYöKK¬ƒ«9X+ä¦§®Œ–e)¼bUqé«ÂëP^sN]ðßjˆæ6B¥mÑß£^÷ßvlX…ñª¹PÆAVu«¼D]Óã²Ç€K†"ÖÜ6[œ³±Çó³Q©kŒ,LG3gð »â€ÙÃéy±ß±Üœš¬‘9…²öõ”þ:suÓÕNœ ÖÀj-kŠ}Ì‚[¨ª…i­Þ Ë…%Cªß¬&qK<$1ËÅÉ@´’]¤ºÏ­ÙÙoƒ/t)Uà”uq–Õ¡©E$gF*D]^ŽV0ª&ÚuÇjD½R§sh L;,ÒÌRÄåEÊR7Â²CRYÍ£rMjÜ¬AX,FzhkA"¸wê7|ceˆ¦qP|Æ—ÖÚThÉã¹»kC‚D»!ƒG5íðA®{žâ«òsw.i·6y8®!$!©Å¢æšÞ®ž3K‡hÒ[ÔÆÎÔ!‘µæ†+œF˜K¼ì‹ÕJ8tœ={èìÖÊãs—È|Ÿµö­¿wïøñWvÇ=ÂƒÚnRû¿u½ƒRµ§÷¿ü‚£ë›tÃÞ^×}žn67¶?[Z&¤à5›æ€ÛŽ`–O,dòTG¥ Y0ÔH,ùe1r‘&×\!=Có4ý’¯S»€]¤î›Êwfh>šW½NÈ­$€-Y{õÅ#RÚ¨%	­rš¥Y°-5ØÆp˜íòÄÑ¾6µW÷è••cÑ„äWrå/ÿü‚ð‘yõOÔTQ1õÉ23œ½g¬ÝZå¼]x4Oc²økp_gæädÄ0¢V£9!¡‹ˆÌ$ô“÷"&ZúðKØ©éúÖ¨”óùÉ‰*xV0—H½ò¸Õp(k¦«2¼<šÐÞØ$ÿ;Š0’`4oâOâ…ée‰HJ(–Ö«Ï`Íc ãµµ4w0\+E)Á4¥8ÛÁ‚b“Öb++°öÊ­ðya5Xê¸ØA¢°_%²¬Ä¡ããCC³×AkÂ3Ok¶åB5mOÀÿ+R×L[ëÖt>üØ¬&|·{¿ïŒ­[ð 1’ÅAäAÄê/¢YM×T.]âŠð•ÌÊ¿ÿ“&>}ÈfkÐ›ì²=‡dž5Ám` G‹„|‘èL*IÁP-ÉÒ+X˜&V›„5o/âaí¹Ò—ÚÉlg!Ó¡XòôX•è±h„=UuÁ,VSêkrjR…k“Êœ¤~õ¿~8v
·~z;^üÝ7ï9Ÿ¼2>¬ýL€šFMÞ"‘ItcÙy†äŒÏ\rAZ­`>õmçÌ2¿_µ[bEWÏÒ’„1åœÊÚ†>\K9“A+Éä'Ó‰¡ëä}Ž+	Ò„µ·dCùÑs”5ƒµtªØïÎŽÉw#$´†kq&(’Aèg½‰‹]'e Ù©_ƒéÇÉjœZ+µóuW®­)Oé%¢µŒd®§\*¡3aµp²Ûª³	ÅƒÔ¨ƒq']½œš˜†›¤ŒµÌ Ü.ì;°¦U˜é„í48Z*l"šyy­8™ÊWƒ‚µ*”.8ÃÄ1ªÅ(Áð(¶;ÊrêY¨½±ìèaªâ áE6w˜/Ý­í³	a­‡ÃƒzÉœïÛ’ŸÈ5Œ˜¶¨k”€[¤l g6ÅˆÂt5µ
H$¬d&¦ ‹È2ê7Sz/Ã´«ñƒh¢µ‰ÑE*Õ2ÑjÁ‡Ç2é<ÖkW¦ž|Ü³ÿŠk~}ãæÚ\Àh¶aCDlÈzI9Úë†}ý”jÿãdB’­$Xs¬f!œ;¨Ú‹hîv ™¨¸à¨Â8G? BÐü7wm|éyNv™Û€	qºçŒ•µ9ƒ@Ï#U“¦¾Ùç}$±™çºcÖ¸!ÁM=™š®è¡æGçøÉŽezYf8‹Ð¤nŽ_XcÙlµÖSÊ¶¬93È}½Ööç@w{×hí¨3	hT©ÅÈìÖ\¢}ù–Ój.M»5ã/‰ÖªÞõH`³ÕºY…¼D$°Ö°†vìÆæ¿,u¿ÖåLÔa:¾t„7¿®Ä%qAÓ ;ŸÖH©llÊùd§æˆµõ}!ªSÚoÂÂÐ•¤™Ÿ>LÅ.¶]žx{7ê™F>É€N…i¶Ï³6ÖÁ°%ÜØûùò¬Ö°rFá9ŸTû*ÕEä¬à'š¶ö¼¹J’&¼_‚ÖòÃ$v–Î&i’ô“ ß9Ä›3UˆSëºâÊÙèÙË„YèÜ¿OZûàƒs|°eqZØZáîsn¿¦¶¿—Ú^T“KÿÓ§¡Ú—ôÀ~úåŸŸn|ÆFñïÆÝ»'"®i2m¿K¯3AW¤Äž”þZ™D)ß–9“ÍfÓ‚µ‹ Œ©…ë×(](áÉ„˜vqÈƒÚDggøC$ÚºÚØ¼åkm¢ñÎ<îJƒÉk»Ú¼h‚ „Ò­k5^ƒFg6ÍÞ£n¬ÖÅU¶^ŽÕ™EÑ°r|´`ðØ‰¼Õ ×½ÞÇzè2—y+œ7÷ àì×¿þå/ùøÐF]©PwÑ^±Z|¾4cîaj,
Ö˜i™†¹bØT3 ¡9ÎE-21øÉs9ŠÈy¾}<êÇã¸úWUˆWÆ£V3™XÚSKU,$Ë.÷¿Ë]Ö6olÜùHÌô¢<HkÖpíPÔš?¨ÞˆÖ’FiÂ5çNa`&%É»f­ò²4ÿ]¬’*\VwÚèÙ;7±¹Ë®1é¼°f°æŒûßÓi×ìñäµk}Wß Öb‡2É±9+,Y}´^GÿôÕ[Š_üËZóêƒ‘¬Xm·ºæ-F–.ÜÛyq?¤¿È3‚5‚Ž™æÄHòúu4{àL…Ú%õõ•Ä6;+±Ì%­ÅV%¸ô“€àäÒ¥¾Øö‰E0ÝpwZbëS!`µ°Éšc5‡QK‘H
X#"É{ˆ,ÀP5……ÿ˜)èhäœ.æ)VKKt›<‰àÈ”9ƒã‚µU[H&Ì]{#ÁÚÒ`úîL¤ÀÚ»–‹øù§Ÿ/×¬Ágècrª&
rëÔµZ/ul¨gì`æ€éŠ5Ë¤PNŽUcÈ|CNû|þŸúù°êìR%Šá?”‡3QÇï¬!Â¼úê[ôûèß>öl{ûÙóRJ:U/”iÅÏ³µº pe¥E! “E\Xã¼´¢Ô|å{ˆ—ØAâV"f®šmÃ5®NÚé®å]	£¬ÊŒ\)™–¸ÌÇÞ²®ñcšg¯Êœ_œ¦VkìôYÓéd i<–ŽÙš…ÁÁ#€êl~Øïcw'l¿‰ã!.ŸÅÑêŠb„WÎ*–Ú‡(XÌhÚˆøz5#?±òHÂc1»øÝñG‡—×´×†WÆ)W[é;špS¦ÍüEÎ9X{0ž=`%dÃ¶_´F=y.ö¤Ù¤›÷ÌÌ®æëEShš‘£µŒÌú‡y	©v•ƒÈp4%˜iÃÅT1Ì/Zþ£¤µxnqqÊ`?‘% YûÐÐ„µ›D+°î'%²…[?+µîË¯Ï-Ï½^493^Öp…ùŒ¼e9*<ªik¦¾Ës„ð²+ÁöÎ+B°æDŽ4€C³rš 6•Á8#ÇhÇÂüFÇaøó»~¹æÝof¨u#3Sßœ’ÆÝ”<á_¼W*ÓO¦ãz0ôÇ©ÖÚÑ)ùAò›ÒN6ÃWäð²jÖpWi®ýúDK°vç¯¬}¿¸Æ>Ïj>Z¼‘Hü‚Ö —ñH¼¬Ù#h“µˆsgÄ¯ß2Õ$¨e†so,ØœónIfJ3¶ÌÇúKÎFHØÃÙ;Ôÿwq#xr»‹ï ¡Û ›î±# iÔeÂšIr*T#dêoõ¬®‹œ×¾°	¸	¹¨rj|êˆ!™ý	,Òã§®éËG \Ð{7¬­ÁYYû*$	ó§båFbtåÛX±¤•`a}ÖbI%:òÅ ðµ’ãž+"T?*õ—–äþ
¹õ¬ˆÕ¶ö·Y»b?ù	·öÇCIíÅ¤¶/÷‘Ðèþ§ÈjBµõÍÍ§tW»»ùåŸ57Ÿ~ÛÚ¸,–8ÜjI—_ ÔtN•Qüªx<h\þÄÖXCK‹&Ó.ÛŽtÇ4H&×lŒJ¨n$‘¦ÎàùˆQd>OE›, Aê×`³‰€Agýÿuæ;Ùè²
K--ûq¬1ðN#]-ñð¯\®!˜Z®©¢0\VB‡à­Æ‡¯åb›„,^r'V¯î¤Ç³ÜÕE4ôyzxJt4üº°ƒ¬¨> Am€Þ)0[•«µÃ9úX—í	iÌîÃF}¯ÑÜðQtõ4¾¨O(¼t"¼"OÍ¥2mR1‡Ô;‹)M¬Æ<L>¤¢0ucÃ”µ¾/Òrê”®u$\ù™½ý2Ù™4ä\kÄž(qñš½Ü<#”Y»s7;ð§[Vå¸+’Ëƒ×˜qô¥¯Äb#ï_»vû«‘0iUk|éê ‡¬0íqd¿â<K°ö´6ËÀøM°¶×½ßh-Ä´‡AFäCÛ:Èƒ<ˆƒøAKÖô%R| ãç¡†Ö×!5y="v$‘ÕÌ:aÄÁÚ E;=|rp¦‹û‡¸9ˆaŸR>Â’Ô¬Ì¾7‹i(¬ím²†¶vWuh@›í°Â}!šVBœÈ­‡á¸r§k™Ìià’i}!èr]“œÁ1{ïž±Úwß}÷¯
Ö¬ÇÚ3fÒí‡m.j|~K]3’)”k"6ƒ5¶ºÀ1.ÇÉžéŠù‚^µ¨³k½eÔ°Þ¶Âð¿þ¾JsOæB˜1áŠÎÇS±öæ£Ëoÿâ­W¿â™5…¯ÿíÛg··o,"'€*ÔcãÄWDT!ÓKäÂóªìk‡Ö”0Ò%»GfGpŒT(+=‰ÉfuPL,†¼`§²Lˆu‰ª}QWR¹Õ[IÃw½®¨´HgÌr	¬i‚ÇRta<"t ÍÊÜX×Í]Ä-v”´°rÍ¤3¾ð)Ìô¯¤…Ö„§­ñ_\Å¼~le-¸Nx(3 §¢Ò¢jqÀs&l3´
(Ë ünì“ãÂðpæ7ñÜ÷¾²õöìàJ_ßqkyóÇdMš:sce“Ý¤A>”6û«·GfßÆP®Q‘ 'bD4i6þÀš1èbyTCÑŒŒEâ¹*¥j£q]#†Ø"§'¤³ÑN-><5*éµßZ«k‹9àm*ðT?l†”¨°&‡ÓÒð€$’h5›èjB7±Û2ß³†…¿Ò é(¯•Lt^œ-ÀbÍÒC—ÖÖüø¼yFî‚5GkÁ¦½|D95¯æ5+¡ŒÝê£fªUªðÌæßÏ–‡5ÂvÕ+Çì‚Ãyˆß—€;ÝaFAšÙýW¬[ûØ!€†§öerquV›²Nk°äôôÃ£GÏ=|bí¦`íèÚÚò‰¥Mè€5!­ñõbRÓâ]ý[“WÇI3F4¡Êª}F4o³ˆu:ŒfÖ,Ö ;³‘…^zË£”½4sD V¬YR³“ËÌ±œçBÄ°\JþDí¤Õ”
µvÈÖØ¹‹4î$BjÙ© 97BC3s©bŒåšbÎ 7Si£‹™­7€5â 1–<·ÀïŸÎmÐPo7¬qÈèN7—gêj|)Îô-J†L9¡M·ˆd6ÂAõÇN0æâÏlãd5<ôùŸ`Ö2¶eÔŸ¥@HÚšÃ·‘AuAÔwp.¾©)öÖÙxÍ—¬íï´¦e¸7ä4Ojwö’Ú‹©M£*íÏ¨h›Èj_Üÿ÷¿ln47>ýò‹ÍåÍÏî&š­Ã­o[LmµN$qÊÊ ¤Aj–öh¥â™öL:•RÉš,úýß$Òµ,r¤`º­»TâDšã¤†r_äµëÙ4Î"åƒäÓ©Î@5Õ‹FÑ+LëeÃÂ;‡J
Ó¼+~{Éç?ò
…ÕêÆlö"¬Ëâƒùƒ"kÕY6È¬,–g
Õ|‘kz‘šúÆÃ[òd…	ÈWp’/-X³vê‚0vr†V3ñ~ÊÓÄŒLr9€¬–ËMŒËezøL”g¼qÚd©,—0k2 D]'3{‘«¼“ 3žô¹Zu²jîÎ\Œ%4Qžn#˜ò_o¡ªmyÓaÍ%DvôÜcÍUkú®eeÄY¨Q¬ÄÔÈn/È(`´¤d7À®åD–€»¹ÅÚ×îÜX¹uëæå[$ŠÖ° ¦¦Ì…xÍ´µ«ÉXß+÷hú³L,Û¡éÌ'A&YÄþ±ÄyÖÝŽßþ#­Î¢ûÕ]ïÖÕ¢{ªÖü?…yq?hüè5ÒÝ5&Oæ
°WÓ®b9¯¥&ÍˆŒ!X	çÓt`S7)#­Õ¨ÓÖ¢œÅÎ§qs‹PXó°¶´D¦¾K#`ÉÚÎhÝ&øÐ¥ÙZ:¶VmGªð©1uÅ´†Ø²+Î¨µZ«%™º_þUmä“ofï]¬ý/ƒ5æR¦Rt5`m}»»-UªIH³4vcµ²ÒÙ¦ ÿ¢‘kwy%3Ò
VÌA£Í[[±øst½'»j&àb"0{O&”.ß¢ÇšN	·QÖ¶¿ýöùŸýïyô,<»úTì”;„e²!I¬b×8å‰W!ƒÌRtŽ§òYÄÉü;pJgAÉcïIò£2KÀ.LQ˜(ËÊDSFŠ`M—UebÉ'ýTc2ç¶ÂåH¢AØXÁ‹k~Íh¯d°C¤ÒšFFj…Ün-Í"—'ÿO¡}Õh
(©"æâ,²ºÊ<”N)ëU/›†Xhàõ1ÁšXfk'ª…´Æ0„µ`½ŸÒ´ðk(mÈÖ=~õ`vˆÁ¸ëOŠ°æsRø/¥G6Êš¢™Åôû¸méydvÀžf¨CÝu]öŒ¡·11»¼W™7^àc“yigäAVSrëW›5Õ_‚ñ°Znxj
¦ÕßÈÜ §¯LMa²ãÈŒ…¶æãf(­	ÍÖn>–_?£%œ4–ÐäÜoiÍ•Ç[k@Û25kSÓ£«ñ~GÜ>¥ÊâeõÌ°tÊš÷}dè7ÒÆù0IrÇTR†"@Ÿe?Õa8¡`—0Ü^‡T°šùÂqÒ|\ ‹á3+ .óÜàG’GœÄ'HÅµ 8VáÅÍ?Îë{»Àn9$nÔ©©Õ×¦^ŸƒO§ËkkXö~¸ŒyãáÃ‡Ï®•ÍÈ-¡×?ë_Èk¡9ä~IÍîýÎ;Km]Ö\ÚçZ+hIæßog¥b69&°–äV¶~ö¢
¦9‚à¤¢.*R-[ã¥—Ø”¦]Ö7Öa5*…,—‘à1yO:ÍXã¸õr*žsôß‘ šsÐÛ¬~§ÚòFû†h'¹‹î &«ÌöNô%&ítj,8b4Ø%zó-±9,¹¿‘—¯ds©•ô&#È Ö|è(›u»‡Œó4I`cl?‰mƒi	ÙŠDsDHš^Á¿!ØF
6Zšf.‚j¨¡ÜIÕBkQ½Ó•K¶r™XIkß«¬qÈÔ>¨í­SÛŸü¸+ññþhj˜=nnn?}zÿÏ_þåÆ_Ö—–ž~±}£»Ô$±è?‘TAAóP-ÓÖmW<Q;à³Ö!žJ]Àü‹d;!åþ¼ . f¶‡™´ !Ê”•I,”Ò©®N(Ma/‡6"3]NžXœôÁ†óƒO˜e¥xI», 2WÍF°–Z&µœg´µ#–è+—±8Ågùœõ×?Vfò"xvÁ×eð)ü”nƒk¿Fx/÷sÉP”È¯Q_n»4Y.æ‹ôÃžÖ®põÔºY©01ÓjFó±ò$Û”óÈÇf…ÏäõœU¼3{WeN%ešxNgòJÎ-¿~÷Žw_»ñ™ŒoÞô°æiÍŠÖlÐGÏÑÚ!ÁÚ&X.ÙEƒ°Ëš´T´¤^¡Zº}`–
)£Qù–¦;¯dîÞÒ³*<&ž{Ósšxmöå¡èÕGƒãW¯=IÂ³Š^o«!³Ú_*Ž£ÍßŠÕbI…MF<­ªP™…ÖœDç-FÂDH¾¼kÿC_Âö£ƒ<Èƒ8ˆ®dM! ’fµoÁeËÌŒ!ùXr ¦Ö†9“MÒYe­é`Í>$PJ’#†hvû>/HlûW#„#5c5lŠ×ª@ÙdæÒ):§HžH!©ýüçrôç¦ôDõ–¡®Æ—uMj´$ìoÞ;«½i¬ÆóÐ–Ú™||¾ýoÏ6<¬IIËÜzËˆhìbò«© §\C}Ã¸¿¿ÀiC1ÕP­«Ìœ¥ qò‰¤ÉÚûÐZuï~ºKf{ÖŽ¿ñ³Ÿkö~DäWÏ?¿}ûùúö³í¿õûu…§±ª®c&XÙÉìL¡ÛhÍRÄ‚PJ”e,ÊÌ{Ê!‘!áŒÂ Í|:±ev³“]†u™®)¢¼ñ˜’ÉŽpmçÏ¨Je±Ùü „ƒ5öAf…š|!ÁD&Xdrî¨Ÿ’öwYÏÓ÷v[Ó?'"zHÓ Q­Ày;‰*Y€Õöâ¨ô5Í©ÕëUyAØ„×úŒº|ýYto{4©mÁlÛ˜'5ÝÂâ6…ßá<û³Ö ¯úb‡·\k»¸iÕÞÀšœ£µÙ‘·¬œ]„ÕÖF:ø}z3[vôq¿#7“šK&ªE´H!"’ñ(?„µ~lDø³ÕóñÇÕQœ®UÄ‡¤µV›(ö/NË76Ÿ	ËH„d©Fk­›KaÙ¾"tÁ«=&#ÿ%€ë~¨›‘æM›Àš¥©[ë÷˜¨£‹2ÜöÀ™}„µj¬vÁšµkSc
§ï:}îþÍ¨Ñ».ÇÏ¸Fgâ$&sÇâ&ODõÆ®Hl³²´™çè! BB˜¾ÂžýÈ1ÜJD†?Q¹I
Öæ¦ã<
gŽQÖæ¦Ï½¼|´ycŽ¤Ì“¿~xÔ¹AŠÐníF6ÖÜ‚/¿pXwÛ”5	jkÊ
3\r°ÖÖk	ˆÚ9h’ÙW@ÄL»Y
Â©Ëä±¡ŽÕÀ¡Ê `/$¹“ÚjH4¹ñhF†ú[òÆ*SJ[r|«IIë2±Ì;ý™ƒ¿Â‚°S=±›–¦]¦«0ÐX2šŽ:áK–ŽèoöHÂ3ç3ÂJ¡4I7bw‚2}·V„ùé*Ø#ÃÐÆßmkDà*à›ILPçÊ|$ýn!7R<c©Ò%`&ãHTÄ–P7m5×Á8kÉ"+¦ÊVÞî$´ñ6íÙ¬õ™uÿñï©Y;>îyM…µýÙ{ImGTû’ÅÓ¿l¯?%	rûþýÍ§Ø‰üe}}iãÓûë«mrão¶"Ý&¡e³ü¶ä¶EtmˆÓ/-UŠ5­¾‹™ŒµšK§»•ÛÕ™J -ÝiÝõâB"ÖÞ	¤]¼ˆ
‡˜ÉXÏUaÙV¢’-ï­JÝKÃ`_77
,FŒãXsÂ[J€ÔQÑ8øç¸¶ ?ª‰¼¢•þÈõÔáBoœórbÊ¹À^Úk._kXS€“¼ì•ò¨ËAÜ9N]º²Ívh¦ìú¾5*jŸ§>G>	=	ïmKÓÇ’$Èj^i2+¿…í~‰¶Ÿœ,ñg*(DÒZƒKÂæ»´ñU}k£­>BU»1µ$pÚâ­YÈÒ­ñ¬õtô½Ò—À¿?*X³âIFQ;ÃLH¶õBå"wÒ\FPHùÿd>ˆE¨kæìÉ2t}Ë BOL„ÊšD5Èj0IdÇñG×®ÙD×××£¹ËÑÚ^8#önw¬ÜýíWº+VÛ/­¡«¹ñ)!{-FˆPOs«Tä ò â-YÃH°–1“ßÚ$ÿLƒ´udC‚Ô5-_v}×²«,îf™Û¥ÄªªÖL_ÌF“ƒöaÀâû² ¡µfÄÃš§5Ý3‡§è$pš–k)íiwîxúWåY0Û‘4ÖùÙŽ¡¡$æL/¿ÿ²µy¤6°&VûNucQ²FÜ~ÞÚ¼ýÇç-¯­ÕrÂ3uÁÖF`6(PPQ0cs+²è¬è*õÓ"¬ùþ°f¥kj¡]EW³fþfÃ‡r GIWù%™ØßÆ	wò/Í†rû¿76^›®c¶Pè,öWk.éŒ‰‹ƒ‚5N2	3B/ìäM“©®ËûŒù‹4Ì3ÿí‘¾fv%L kÊŸÄwK¸ÇCªúªDr3®Cv ký“Õ¦vÍí²×Nsìç«¡ÍÐc$ÖŒÊØk¶$4ÐrO`ûXU#þ3ù
Ö¬ÁÚðœ–ªNÀlDJþ"ÿ k^CÓ@[|9Ìêá¦Ý=¸YpØîì—Ùñ^RÓ0|5|ðèÑ`v|ë•{¤@2OÚœÉBÒÚ«=ÉöÍÎ®¬k8Ara’œ`ÞIûY³ØC&b1ÐÍLEY¯¥&Si¦;÷{ò*F9[$Õd+Ž’Y¥HMY:ÃWž\ùŸÖâ˜…’Ó“zm‡Ò^×Š­VË£š«Ws°ÖT6äÒFûga‰oÞl6q„Œ`xøÄ×sWâÂ%°²´‹¼æ| Žùr5ÖFjn‚—‚×í ºÕ£Ù78c~÷Zžéu¬%óI’çëæ
çÒeœ¬	¿þë¿ì•òg‡ùY­);PÁtGu¬é÷âµ-XÓ‰^yú‰ú|Ÿ/WâSpé_ÿ:ÿ§x‘|È©¹¯'{O k'ø£˜²vûŸý?AÛÞ´ÈPOã w°%"Kf»Ñf²’ÈÆ!B,³$X‹šÄo‚Õ•¹„Ev
eìL¥ œ²¬GŠR8…=H¯`N~,Ð)âœI!\PiˆÉLÑÐ£8aMKkN¹³“l49ß)…~@ÒÛ|2¢•¦±f¡;²ðü×%P²tÇ EÇ\lK–sej	íl q¾•¶¨,ðñbšWÜ<·9bÓ†B+wÚÛmÁ˜}¤–É^!Ìã]ItÆ{
@¤fï5±Z)bnÿš–¸eqaÁ¬æ|Yõ-mdðøÙdßÖå­-c?Ù¯¬9<cFj¦©}/©… öå}*Óžnn-­‰¤Æ›xõº¹ÔÜ¼ÿi‚ßtuóéf	E,MNýùîVK©ƒì-•0BN/¶+Asº£­Ôl-Ún^ôíùTv Mé¡,É3I1\*m°†Ÿˆ ]ð–•RP^JZ¨‡5{‡¨FŽiÓ L7)kÁš.¸éÚA§¬KŠiÂe¥A
ÉÊqAªÌª25åÅ>ø~õîÄÄŠÉþ†½î;Ê–š_‡XÎzhÏsk¸K¸l€­×TÓo0?W,ÓÞ}|4jY«É¥Ÿ÷>o¨\?¹#•J­Sè7Z«õ›Q˜ò¯+²%¹OðA›£”¯ÛœÄZÝÙØØhÁjw˜<¬…´vÏ/X)ú:†ÈQÅ·?ÚÝÎÿˆ´ÎvÓØØñ êloä£²µ,3„^¢\Ã¶kÛŠÇÕ^`íÑ›‚µPY3â7®ŽÇÆß|s¼ïêÕ÷”÷!Xì£æ²Çù+}¿ÓHÇoóÖoø
¥5ÑZ¨­Íê¶Óc{oÕ¡…_‘¹ƒ<Èƒ8ˆ°%vF4¡ŸÒõëxJiV‰v]f³ˆiÖØé‚ãr!Érªê˜Î&ÈCÀš¹(¬&F¢Ñ!û àß>{‘Ý°Öná Íô‚Vé3§ˆ”im‘î¢:'g2§”ä€ßûÄ¥KùÓ—~útb€´hRãëX'È7]ûÃwÿ¬}õÖßÿ.V»½Ývãöoo;;Hß]K~ÂøË`­ÈÉKÁåØ1©¨x¹§~¨¿ÐÖ¦Ÿ‹3œ‚O©¶Êål‰²6ÔÃiÀ{ÿ)KŠs—ÖøõxægÛÏ·ÿö×éé\Y×Ëmmƒ¨þ8ü£=t&Ó`í˜$¡W]™Šœ±ÙÙd.Ùü)o¥þƒpÜ£L>ÊŒ;?¶º=^E¬¥’7Ñœ¬ø*vî¬W¢<ò*]—k×ÙÊÕìTËì·­.OŠ^ÃØÌ…»,É¦ç´=¥k¢5Ö!ª·Ù%ÍÐQä‡ãª×Sä€µ8¹¦©Éêå“\
Í ¥¨YËdh4…°FÝ¯YpÕ#Òb‡ÖBOc6l/áwìÙ üHaÃÁA¬û)óÞ"ãäƒµðú¦F&­É»E FÎáÊÐ€Þ	y)‰,Y¦dyÑY?^æ<¹ÕE­Ã‘NAk¶¢‰àÄ(°Æù	[´u¾‚¸ÆøÊÇÇ?–«?I}£¹þ	íuÚ_x†0ö]Ö`3uÁ&5X#¶D$­–ijKÍ•XkŸš;zt•FkâkÂå·²RAZ@kV´¼ÖR{B»þ0¨í$LZPqDb×N5Îù@3…îì:MÌx{¾ÎÃ5Ö×ä_¾ƒýZ²â§2=MBê”ŽWì5|Å|Åî4/5Îõn‹/>!µ875=ý:í°_òDæª_Ëfäë“]S¼vX#€µ BdCBƒýlGÞel±Ö® `Föû^S‚bì}jÕcÖu:LMÄwƒºâ‚ÜÆÚXÍ2 •uõYßz+­+½Š†½ç‚µ;M¶è’TgðeûŒy×ï0Û™çˆÄ2ÝWÁ–Áö*qÓÚ-Y[)_¾	š1\»±£‰÷Øt*™Û8nÓFÈjN_s gÂšAÖ|‹aE¤q’bRñeÌCD1ò—ÍªñYàìÃJ$«³_™ûóf_†ê²–véi%³U„×bÊ;K0@_cŒ«_âHÏÖ¹ãÉCã[Ç÷Œxb/¥… ö½¤ö¤æãvaÓåãöÆúúæú§Â¶õ§O71ÜnÝØÚ6›Il²>{z®"SºÙlo#Rf3X"e$“*%>üý%¬«øAU´†'²y§$LI’ÛÌ"¾”vvëˆmXC^Ì´;·²5ºËÈ²1£1Ë„³!/°æ¶4$x«²Çu)‘šŒô‹÷£LGh,s¡!õœójÑ‡’·A˜”®ÄE¥9’ÈX6+ŠïÒÃÖ-‰¹Q#rqyË’dC„ÓU’­ã`X++¥žújÒ yÝ“ùÈ/UWÌÄX`6oY×J5©(-„f~þã‰éöÔ¿uñÔô‡±F©kØH’@Cà9…äÆkS;þ"ÿ˜éåµ¬%v‡ikúCGºuŠ¢Ú4—YRån‘’VÚ+ ãÂ·^~–f!àßã[—oÞr±Ö|ÀSb5~’{Çß|svè•ãðîïé#n¦.kŠPRÛowßyXûjŸ´¢ÚÈÈ«8ð°Jk„Ã4Om(k™ýƒ8ˆƒøÁüE2i‚	2CªD©„m¿Ò ™.2Ô˜LÁI\SºÉ¡UM”Ö$­ÙRPG°ŠºÆ©ëàìàÀì÷eAzã~Kƒ¬)I¬ÝÉl„>ppO2#¥œÜQ™ÏD{;Èbµ«8öá‡“§/MT3×‡˜¬J‡Ö~F‹5€é†Œ&oýýïï(òÝ¥ÏÿøÇgkV¯[/ëÎ¶šj–:šåd·a‡+GXôÏ÷#­)IR@)¨¡=„iÂµë,ú$¬½'£÷sçÞþ`-hˆýî»Ïÿû¯ý–8ÏuÄ®‚S©â" qÝZcçÈšáJÖ˜†˜­4wÖ]f•7wS‰7÷`:ÐfýªDzª_ƒÅò2¥¨Iá˜¥”ñàõ†¾«" ­I¾«çiê¸¦kšŒr@ØcÙOhýâHVáÚ`ÍÑ [ØâùÅRüs‘Cg#]%•‰¦h
-Í4%.Ã|ÃFDkûÚZ{$sa°æ°ŒðmJhÚç9Ž7Â-^¬C}WõÝ›\½Ê„}íÍð"§uÅfƒµYî>ôxkeÐ,û³xìÈ‘y€M&;iÍÆlœ6Æ†^ND‰¬ÁšIj”…ZŸ×|U•J„Îr¼˜‡Õ¼/»õ³ÁK^½21uE>ôñy:bÃgŽÍà6Ã5FÀÛæ
4fvý€ÙJSÍÄHe[£mmeµM{[ËÕ|mz™²­¢Çj­+Â6sñ7Ñ‘—w°XzÍcÛ?·©ÍY™hÄ·Æ¤œ±–RÆA‘W½´Æv»ê½'+œn±3ÐòD)–Þkæ9úŠ4sˆr²‚”ÇCÐá©]_íùø“'¼ö¦þ2­×¦Ÿé??óõòÜòÃÞ®‡g®5›­æá58öŽ`í£±ÛžÄÍØÉ!´ÔÚ®-™o¢Y('IòbÐˆiÞ¿ÁÃšL¤°dDµ¥opÎ©÷C‚–ëz/¡³Mv)NÖÅjÊ¥£½‰t®¿vØÉMtØh˜âfåŽš
'rcËwë<":ï£1±tºa2˜c;íg« =’ƒ;Þþ$Cò[kŸÂ[ðÛ¶± ;nà×Þ´ŸA0ô´ØF²Á5°LÊFiLÇ"ÝÖ¬Jä…gÒjÜÙnFÀ-Xs¼3“ÿäÐ§Ã„IDa#-QC.#œxf5kYsâ¡>¦•Û¶õÊ¡¾{÷¶|Klk{:­…œ‚ÚIÍŠ„ª»îJ;µíõæÆgëÜçéúþbcuóÓûŸnon<¼ñÙæÝÍæÑ$à¹²”…².á“ì™JÃ]É‹‰‹Ù4ã3L3Ì¬A… çË§òù´zå˜ËÅE€.{¸˜%W2M¤%?¶«[^º['Aëk!Žþ—1tRöšit‰ÜšñO“"D7Çj¶ËçákKV¦¬åÉ&”u£®È:9Ç­˜#«»Œš†vŒ·üº%‚ZÃ9>ämÂiÈ 5h‡¬‘RY¹TÁÖ_”ŽFð0q±™<!Õœ²Êd2ë\£ãKQ“2ou˜GŸ³ÙÍu)S®™+`\Ë›Xql2E‚?s>uÁ¤04œdÿÜÝîl¶^ó=¬)<ª9Xë¹×=Ôƒ0«>šzašùkÁšðºä•5ëÐžÖ@ &ÂN&¬[¹¤]ÀZçK‚íÿÃÞ…¶u¦ëzsîçn@vŒq.rccËÂÈ!Ò–PTaSUrlDí`i¬ôÄÊEPâÄCÚìi‡I{H“›º©{hÇ$¦Þ'!x×NÇ!›BàÔØÁ„™’1ÅJg®öe)ìçýþõ{Eõdûª7þjiýk-YªÉÿzþ÷ûÞïÑgË©[yaB°¢Ü_±;½#é÷¹…9ÎÕk×®2åÅ: 5“Ø¢žÍ<Ÿ9XÛ#­-?æbëÃ°j- µ]mmˆŠÁšî,Bi­ÅÂ?’5\ÛÏƒÜýøéJÖ˜™Rú€’ØžÌ€ÆæFß[_0¿µ^©¿FkVÙ†Œ T€ÀÑq¥oH‹£­)¸ß›)Z`Í¾+-XÛ5©M¤™p©÷qÓ5ÔÚëY£5.ûóåYç>ù-°–&²£ïFß´ÁÊš®®1dübÔ~øáñ»¿ûÝ÷ß¿}ÿÙöæ	ÀLP"ÇƒZë³–k4Ã.–eá¯Ç2*MÀ±­WH„×DÔ4õI7r2KÇÎÍ i¦¬	m»ÈUVÃ®>ý‹@X£ÇšZ¬ý¿'ó…‚VÍo®ÚD½K@C²PW&ekhÀé†5N"ím©Êlù	»ÖæK*€µ—•÷ÏHb™Én#ÇG³ÓÌ°Í`àô`!»È*Àf]±i_Ãæà¬ÿmÐšFu À¤…ç4¾ZÃµù]—~Û†_à)óe„5Îp‡Cíä³Syý&˜YÓZÛ3ÐôcOj
·i±
1Î¸=ÿñL^3![Y½0²§ç@.þ À—·Èå-¥Hµ8Œ¬Q®¿{÷î×ÇûZô ›¾8zæ É¡Ü Ëý.÷Ê-©f]ö£**jE¢Œ”†£~"Š|¾ÀŽ~_e«’ÌOšõ<Œöëþ'ß²}k!pÄÄŸ}´6ÆKkw¿F<“ób_«(kÆjÖVU¾¶´¢Èò„º+oô÷—Y#p}$¤mÓ¼<xiÇ††i.üH0@‘˜?±|·µ9k\á‰¼lWÖüDCþŽ
s‚¤N«ÉZƒ'Ø¸ÜÈÁ3¿ªo–ïFàúhª'46ÎœF\$¿¬jÉçÝäGfÿÌ™îË—76†)V[“Qæ°F÷!²0ÒãÃàˆ¿ã~©fMzÖÚÄi&pIr"ÑÑÇÙ€LZã´êÕø„ÊhV‰$4“ÎX¥)•Ôc£úø›Ø¦¥’¦e*‹Ve5ÄóÑ(û³'gl­¶kŽãØW¾¥ÏÁd7p÷·]ñ[pØ4ã2¬qÔÁ˜Ó¿\Ïk$´Ç&À¹ÀtDcý°&¤™(ç™Œ;'ÍìÛFáÍü	†ÏkÎrDššö"iöÙD²Î’]K¾{´ÁÍ\ýGtËÙ‚…BèFnz!U Fº¤:²©ç¡ÅTnÍdÇ©ŽvþÑ©‡œaí…ÊšqÚß#5ÏižÕv`²‡_|uoóþÃõUlú¿øëú½¯¶‡#ë_|¹³¼¾>¼N"d.5L™îŠ²GfÎÏ ’1`3`X–YX0¿®"[&l/fÇ§êt_C8›±D´J*MM_©}×Í’%3“Õ¿§rô€Ý´ÖíÚæ;L|AïÓÇØZºY#Ìƒ$ÔÛE3€5fž«Þ&c~itÝ…DU§ó0Z!¬V×l5ÁJÔœœ„ø\ƒN“4ŽLhuÐ@¬â`M¼’\@Jƒ´]+Ôi5P`Z²Ü'@XÓ#Ë ·!Odf§2æ*–cò‘½*EÝGÄj*XÈs§0OI÷øþC¥u™›Ôð_1ûÿ‰Ñcc·óü"Š¤Ð¦/cÇ¹ìÌ CXû‘´æºb÷0O¤@ÉepµÔ´I6ª´T"nÔg	téŸ–¸+~Ëéz)×ô`ê`9-xgµÀÖÃW®¾¤yçèñ+‚µWã¹£ÀZ¦®\<>;ÛËjº÷ÃXzüøñÚ‡­Ò´¶ñáp­52`-È
á3zù¿ÿÃ~ìÇ~ü$ñ3¨HNRQeµg2¬þÁ@Ÿi@¯Y³š¡‹ì bM§’Ê,1Xã°&E‰[ú#¥VuÓ¹øPjŠ¿´fAÏ”iå<„-Þ´.2­k÷ñcÙÝ…žÑIzfë¹3Ì@µ²œþ³×?øøÜD9;Ý×¡L—iõXãux!ìEÔèÌÁÚ»¿ùžØß¿÷¸u¸.Ÿ~ÍWõ¶ƒÅƒér³¤h¦¿ÞÖo­^–b`6ÓÔ(DäB:	ª+Hß©}âHíÆ=è¨ZÛ‚­`ùÝ	kü€‚µgz27_*^ô¬µµzQÖ€5f:é]õÝþÓÌ…uES”óÃÖä²ë¤,ñM°¦11KrÅÊ±É„æ@ÑšY±6"M-[N£<¿©êfî+éL]käÀšO›riX®TÐîªŠP_k0ýÑ¶þ+$´°¶¨³˜†|ÁT\Öj5QwvÅ$(©©H‹ˆ¶Àš…Ñ,l¼ÂZŠØÐ‡g5OzŽÖìæiÍê¹øàÒ¯,¤«µ:séâmKÖý.¼ó BXËY¹šË€×1G…Õt!™äó“2öä.å]¶¸9'i…†ýÎh"ÔK50õ{Î8³T+Ã±ùËo‘¾wÎ`OHbÖÎ‹áˆ¸ýŒH`mailHàÚêªyA¢¬±¹lbM÷ÆÆF¾ª·!áèŒ­Mã»Ldsçƒûð,ÁFuáéYV—aÌ¦‡è-ÜìãŽ’È8Ø”â¬ˆè’œ|¤!3ûAû.³‰”¦Æ€W“`†Ð'¡Íœ*õ-g¬¬Í‡ˆ¬”ésPyX;þü‰7Ål'ª³ÝO7n¢Ñm­¿øfÿá…e´vðKá¶º…ˆ¶Õô˜Uß‹¬S¬fl¦š47ôbšŽÕ›Š­¸˜4•¬j?$ãªdqÙ1È%Hm±u´ªÖzóªL%Î0*!½¬TÖàmÁÙ–€2á!Œ3b",’­Û!,sR'ƒæjú¤CiºWõ™·iÄvÄeAsã´¾Ïš¬°Ö–ŠË„{<1C…r#Öêñe°¦mè4â`­EZ#´¥>‹Ð8›å‘æÔ {~“Ý€¶À[O1Ýº1ŽÆ$T½­¸aÅÁë¨f‘$Dª~Í:bs*š£ÂÚº…Òñs_‹ÄêÌGÇŒÕ^¬¬} ö"R9?Ü¹G·kÔµ‡›ÛS‡ïï<\XÝùb½½ýæööæâòæê_7a5zK‚¢úaÖÖ@,:¥‘k£3×SL¥ÅÚ¹s×³Ø,d§jõÚ8ÊY:2"0S¤fO,TŒbS(t³×ÓüƒÙd®¿ˆô3ûG‡óáÓ\Û?¨Â»<Z7D½áì`T>;x‚%Mœi‚`Fñž£R &œÈËM™W©¨YDžÑ´TA9ëím6yrÐ,¡Øô¼¯×ò=¦|³X¹Š‘c(Û*žp­·Ê¼‹^‡Y¶ ”ðP’!9«O‘“øe6ÉJ™"µ)r³œ3?V«©š)¥\gÖS÷yuÿ®ó1¬L°4x»—ét­”Ÿ]X©…°¶7Ò™AJ_£`M«ÑöfDò•ýèˆ±š.ƒbz'¢ô™0RFÜIýJ¼°ä\2uÜýì³ÖNrj^›yçêñÏ¯k°›.œ†úâG¯öÄ:úÖzâ}=­3n´Äâã·×bË!¬ñ2¡²F\¤k¼¢EZËBk‘ÑZ l™ý<ÈýØŸ
ÖÀ¬t*eâ>“ äc¬ÆÑÌºc³DÄ6À9›_²S˜_ävÔ‘<°¢ª‚h;;)ð­Ï•¬y]mo$ÉÔKÎøbCó4¤µ´Zªé@¿þcÇ2¸é± Kâ3¢	Z;!U12B¥æå©îtp™üÁôwß½/XS"$×Õ¼Œ`í½~øÝ³ûÏž-è
@”V§Åš.À5k½¢µz¡‚)0_P—ªÈmuY%t¾·ÀÆ~x­§?¾¬}211:ÃÇãwîå«~Ä-–bßFX“¤\(·ÿô-é!MfŸ1s´šëm«sMÎdÆ”4fi%6v×„‰X_×Æ7ÈÖ4
b°¹dZeÔ˜/VßkwAM÷Y%D¦iªÂÜLOj~á¶*ßTsoÜÂÛ"5ï°’ Åƒ[cWöÂš355·=E‚ûÖ»£12c`7	LÔo‘ûX,ND-˜"~êÝBØèæîÝêšƒ-ÏjÞ’p~q8ëH‚'	ö(ƒÖhwÒšÓÕHƒ|… Ö.)½ö_=zôàYk¾Œ3>KQ½†²–RZÜ&@»²”ÖFdtGahZK[îg1M½)B\ˆÖÆò‰y$Xu¢ßN\&$¡Ýž'’’5‡f|ÁoÊ‚\`Ç`¼>q½Ä€³Õ5“Ö¸&<ˆ/Å›e½•yo”ù±r¹áaÌ\„MÔZ@Žán0ä|xÊ‰p¾Í*Ðªj.1‹)Y¸"4}ƒzýUq‚d—rÆB€ÑJ‘º&î³VØlY³5c:QÑ¬1¡=ÂÒ0±€<??_9;öVãw7Lþãðå§ÃÃ‚µþµ5ò ûon^ºùteÍ³X¸ïýM>à½U“£œÁž±™±#&ÑÍ#€5¡§›.§‘rk(É¬‹Ùd],7í¬9AÜKc®	ÕT¤~I««4^ò5Çø
v1êÕüR»Î‹Ò™êñ(…x­Û?È‘—ûÈï²š\-	!šÂõ^µtÊF[÷¾•¶ûmhÇ`Í=WHk¶ãüø]F¥†æ©/íqoQ--·Giàç5©{§•©¹Ë_&=6êvWR1îc#ºuWÐLÏˆ±|ÇXÿj;Ã	ä7²^úÈÜØ{N>ztŠ+äÖÌ/Ý…ÊšéjîZÞY?¶Øô·’š™ŠXeÚC`íËÍí{<æáb²di}ssus³ŸŸ¨qIµ°J†jºp¤øzœëá"Ã6]¯O‘¹‘‘«Ö9¶EÍ9‚5Õìª—ÍhÆÚªñä¸¥Å˜3³žp†Î×™ëY\FÔ˜Ì¤všÎF‰€îþØø¬ªyKþ FÍ ¿5Ø×Å­òo^$ÒmÝM ­Îêoa&š|^>RõâTm‹\GYj©8  ©[ òG4£ ƒ—juœKJ¬Wb@"™»­ ª$‚š°å+KßïœG€ÃAs3zCÒ9€†ütEÔ³íÝ“SE¾gnNs­æ-Up—Ùôõz¾Ð;Wå>Ÿ¸Mªù±õåE² —eÜß
k¡ÅˆÁšuCÿ\é¸z+¬(lÐ[Ø{DÉFÂŠoÊ¤˜¶å:%¬åø7¿ûõ×<"úš5I^/Y\¬é5ÕâóÊûœP
À§…IªÖÖBT³ð·iµywùÀÉ_¾(ò"xþ{ÂÆØV5ÚiB«êÙÌÏöÍû÷c?~"ù7Ždl¹³ˆ{Î±÷r~ä&XKöxAvä*RØ¦ö0ÊÊŽÅ¸©´V]l#}äB·šA¶dAkÐŒXÍHMˆŒazj‹®¤2Å,°¦Ú„(7š%3}óÌZô™du­Ô~\Â‡ñ“Ñ¿û€:‡ÝùîáuÌ
òïð×‰q°öìûgSm„y™¢„ŠféÒ—à%”¶:b’3°ï¢V­Â¨e±árÅ:f»k‘z¹­­\OßàÅÿ–ÅÉé;êÅý—¿¼Ï×+[[§Öxe	kHzÏþtÂ,:$#Uˆù¹B	
V“Ë•áºbÛ´ÒÙÔLVjêbŽ+V5VÃo@³hz¤1›ªR[Çµx‰ªˆl¦fGµpßE¸¶KÆjF`\¿Qé†u80æ:~;«W¢_
5ÝšP+úU»82¸7¬ì‰Í®¦fˆˆÜ~ûxhØ¢’¨¡‰ÜGf<kGf;l]‡5n0Yt7ÛÑHM_Þ¨?ì²æùîÅ¬æ7‡ü0Ö¶ kàÚ.ª…ÊÚ¥_]:}á~ñ¡G~ÿÎ],F’´‹:c÷)ñJû©( Üf¾lUn‘°¦‚H‰µ2tÆ¯¦ Š5iŽèls¦¬¡7*R\öD¬v.óanh{oîJkÑÖ–N.™1äâ‚n‡O.ÀjÄMxim
µ´Pl+™œ™.ïšˆT^n„¶üÁ¶ªrm«ƒ®NÌ`Ì‡?²ÚÉn$Úòöi8âxÕnNC|3&‰áãªf=›ÝRÛ 9‰Ã!BcðÚ2iÿf'lT0ý4‚s:2›8þÉù®¦2¡ä0r?‘Ë5ºn.ž>	­mý75ÑWï…#Ýün(«V³æ»‘Y{i¢ mÀÁ.ìQd–b4ñ*ƒ­ž0h6WV	T%rL‚¹ªÛ( 3ýË¹DÌ7È9Œè%íeÜgÛS¢ù=ê´w†.®¹²9¯JGZÝgM=Ó7ˆ«4ví8Øƒ8ßÁ\—œ6iF‡MX#|ë Ûuz¼Y«²f!æ<MÂª5‡‰NZk‹Hâ¯»¤
ˆM-Öì‚Q!º¦.Êõ3Ð}ƒÛù„Q—&4S^²å™õ‘ø¡%ËÑ±ö¬UÖ©hô£W>úüÑ…ÓÀ˜£µÖ’µ½Êš’?Öj/&5e?~±sÈíõ¼Ùnï`Ö‹hù²xeµƒŒÎÚ[ÓM¹=«,EÞãø¹,†š–š™­ÕëÙñr½vl<Æl\MgIÌZ$ajfôX­Þ–‘î¦ß02ZŠØR«§~Úr™aŸVü4ÓÆ£9-Þ­$¬©µ±˜û÷dÇ¡šo²æPÍ`M;ýz(ºµX©‹ÎU·&o“Š›xéç¨ZeKò®•Õ%»<øƒc¯M"zUÝŒbCLÕÞ2§Y)ÑË5ËÊ8¨3Ÿuñw£B7€Ù_)Ia›Ÿ—ssB©¼i‹pB´Æ“!Ê•ªš½­åY•ÄÔD~ŒÌÿýz¢¬X6«T°e'XoU=ºÊÚÊ›ŽóÇ–—Røæb¹ü7aísfDlÜóÞIñî‹êKŠÙÜ"‚eAŠß,(•ìÓY‚6/HŽ4ŒxXSä$¹ÅÅjŽÖ<«mÁPöÒW¯Øûh‹]¹ö âÍ{–ð¯[h»„ì‰èÒ µØ×¬íÉƒBçãùB?ÈLXµÖóágÛ/ZÛýø‰üEÞLÅlÈY'K°B4ÝÉù±#Î}·ŽøE>Öæ,	¬X·Zå”±‚ºG3Àš‹=ÂZhÜOÑëÿ=¬r÷'/£HMBšMeÉ‘ÑÑs8_Ùº!ùSåR½½ˆ!Ž½ñF¾–ù``’£Úbß™î9ÿÎÁÚÖ„L¼5kßs¡õìþ‚ªÐêæÔ4‰ÅËŠÒTµV§¶ L+ÆM&–`‘° ÏH’TUF‘äHZ–Iƒ$³V¨N¤ú‚†WU,ÆŠEÕþôp{•\ L¹²U,àÎÎVašJéPÕší™ÄæŒà´òÉá³g¹¤®ša±3ÐjÈNjsV kb4iœ¬I¼×™™Öã/­[œ×ð1ª¨ÔÚÃš»Jë†FÙ—õÿ dçÝú56/¢5Ïh-ÚÚ.¬…£à+aª)	’Q¾Ps×b1×…©MÐFXáYèíhCîÒX k-Uh´@dc¨»ÑZëþñ‹<ÙÅK—Õˆ°fÍâÚ•-]Ý)ÅõÒ;û€56q|IÔÓ‚0Xc#g+©î³¦q…È>S´c5kí®,€mRÝ¿ùÙ‰²êÕøµ˜7ä|¡¨ŠÈ¶b‚«'žÜ~òäÿ“Iß° ÍÐØkkw—Ô°Ò¸»¦fj ÙÚ-ÖPÒVùBY#¸³ÍÒÒp¡’‡ûç`1À±™þ¥ÍQ?„5,ü€ðÒš§5íºƒU/³ò ÀQRTÖT‹èÖšÊš¯2“´† ©Ù£ÎònÕ»Qó	ÁZ ÂÍŠèÎèßD¯ÉvDð§âB¯Ò)9c7÷äòðFwC–¨ré?<LGñËÀFÑÚáÃ'×èd &ÙËàØ9ð(jksÆ"°LPKF5:#£"Q`£µ‘z³i£fCn"Öu£¢ÐÐEÕþÒT•ÉÅÉ†ý!à‹ FÙÇ*/#XN(ÏÂß#2K€d´äöt&´òiÜœ;¤'5…öy>vµ%äé/9Ì\B CßáÛ¹“xçGŽ1Ô®sú×á ›"$¶6…Ž‡¶ÔøFo2"ÅLa&Ò®ÓtÖvÐ .­:Í&øÆÒÉÔ|Œ¹3„úÄ)’ÿRœP2r26ÀlÕ§©‹]«k‹ÂnŠœV{Žvð‡…æiÄ®	ÖB\û‘²¥)ÔZÓ=©Ù@Öü;Š/¾ÚIevè„M?µov®2³¹ô8ó”n82>ªr“Äô“e‹Ås£Sd ¦ÑÍ²å®z6SÖH~ä—ÆnIØjZãÈLf|ü·Çjm#@YTF*iòFßØ,±e9D5eóTY´9Ù³¤ù7KG:ÍVÄ‡¡¸?`‹6öñJ›…‰²ˆ^õn’)Kíµu	a¬uÊåƒ‚Òª* óØ4Ó|„¨—ÇÊuÊÅº*G'_{MØŽìæ,ÏõÊú±€£¿k&)àDOËk"Fj®+eÎÉ‰_Ó…¥Gj…Ã\‘›U­òb„úfw7Ô3€¨ÉŽo&²êYözýõùªµ3•qrá‰b=¯`}0_a¥Ôœ•ÊÙÔÒáôÆêÚ2D¾Ö^rÖ	ñ;N¡¯ñæ›‰ kæ0¢zA½sìù"5ÊÔ¦=¬eäˆƒh*Ël™ê½Hr’VÈâÜ#^¯Årë•-ŸŽ{U/¯â5<FŽÇãW¶®½ö«¡Ðþq¬¶WQk-ZûÍÛ'—ÓR´Ö’©ŽE´¥16´ö|.d:‹²¦7÷‹Ööc?~‘ZÑÌ¸É1*Ô’ÑªÕL_“‚ÌFè)5 `KÅlsZzçÀ6S÷1Aøß•ü“b4ÝöxA†°¶¸¸¼Ä«Å¢–ú§ñÒ)îåô•¥ÀçXVswfŠÙ«T@Xá¸Õ¯½6Žr1pãcXí;t-Ýâ=ñïþBü{‘ÿý/~ùég&ßý€°†'#Î"¤=’×hk‚5iJ¢5JšKõƒmÔ-»°£8ó(›a¹˜àlý`­L®Fñ`)ìØ¤s-œë;40ÍÿÀÅÏ?ò°¦œ~¼gÏ€µUjg:iáÉ²£¼‰ñ*‘Õ_ke9é›¤¦ë¶^‰Ð‘’‘¾´°í*ºu1ŒU¹å;BjœâS[Åº­iý³Zcl˜åˆy4poUívw`§‘MŒ*ìn{)ŸJéü%s\«9;nçêMþ¤ÉMn{„µ^»ó[m´ÕÆc™¿%¡¬æ"?¦ ±þe#¶P>9©"Å©É)vLY36¬xêf¡¤CñÍöÂ,ÈÐZñ#X»­wI×Di–‰ÂVÃk\¼ÙµNŸPÝ³¼ó€ÌGµsŠ›ƒ?öÇZE%¬ð±ÐÅd’y;éhTõ"rQ®EÊ‰2õÎ›1ä¼`­Èª‰¾	µ<9‘ Ú°öa>ýl¿}ëî­»Ð™CHüN]¡Ú¢LF„jòÒ³Èâ-AÝåË|çåó…<k£¬.b+UUƒ4F
6>¼änëëYnuô`ÇÃæv¿sj~]å­×€Û€µî¨¦ÊÍÓ¬ŒCnƒ¼¯gí1˜=:CÀ<SWBÃN€c:ÆF¶þ¢™Äyàç~-Z3’c½¾´±A>Õò&'Nžì§êO	‘8÷?ÞèÚX9)Z;Ù¿Ò/Xû¯âß°9h¼ã	Ô	œôµ¢ü0§¶‰\šdu™W\Ã|}$fË~\ë+¯
¿Ô]MËBÜDn%‰éú~™ŒÁ9~u³Òæà®@À3Jãù6sœÈ¾Î+BQq“þçŽgàÞ™€ò;xð³§®ßRâË!¤]&û“}8~m#BRS„Z›“Õ!;æ1bdgÅiB7Ê¯°·R‹á,è†éF
ÔP˜¿„$[íÀ–_àƒ„cÊˆ*Cg¡2y««b÷´`­s+1Ž˜ÏE;ŽðñÐ?Ìƒô¨:ŒÈ9VC[{‘¨¥=üæžjÕ°Ùùâ!ªÚÎÊÊ6ÂšÒ!77W"©ŒÕq3§®D\Rgšª³QƒÔ•O3çjõ©sµR=•&GY”œ/§Žó7PŒ;Ê0‹]¦ù†Ì¨±õuq­:$;$-»!{ÌH'òR[6™VN L˜	i­)vã‰ñmB`3M!aA¹Ã49bóK€ùÝu=˜N6ÕïzP‹™-*Ê·XùôôÿÐôy›Tÿù„²üùÃV¬‘éX¤3KA–Uj½Á`ÃúQå¹¼otÖ!0
ÑäP®ó!BbÄ!·KfÆùÞR½Ö»1a²*R"qÞÃ1({äÞD­è¢6‘/LNÒMM_Êðž+3ÙAh¥2ÿ¸¿‘/	÷È‘k+™Lzcí>}ÖBXFdÕ; X‹Eq_ä1uàTOî†²M}·	¹¿Š+b9:eÍV´ÍÇ3G®õÜäNµývæÀÉ¡s?±µµ%Lƒ©GÙ¤y\¹¶u•iéb_Êf3üûI…QíïãÚÊ‡?\þðm",Zk¥5Z­µÐšò—DjD+«qýÿ°û±?IÉZŠü¬q¥¾§©•µ,D\’a0ÖâÔ©iò3Ÿ–0uS:3í.T§süQ­¨²iE3‚äP<D5âç­%k
XXãá.Å‘Â—‰Éûnå‰ä˜•q?2Ì”¸lvó¬é$¸$K¡šÁÚ©8¤&+Hy¬;aí3	\ÿªË²õ²,EŠL8¦­åÖJÍ¢¤,Hå7„'â¸à¸¦ŸBÙ­ü"¨µk\]§Ó¥Ò°vçþæf§®Oc=ôÝûÇ?«½²eÂÚÛ&¬Ûoò'®Ô”vw¶ÊôAoí‚2ÿLQ¢¡Aœõ¹,³+g`+=0É]IY°,h&{–Ù(d«kø¶TÏA—ÿèÌµt¨Á3àcÐìªãçƒJÜì;*ü’~°N‚gI.N#¾ÏšNš8P±DH{½Ev+ÕZÖlfA†"[02Y­=W$°VP«ì‰SÙ),!)óÊf¥°)‚ªµ]Í¨L;Öøbšõ»æØ»n/Œÿ~·=tôhGÏÖ¯¶N‹Ö^¡QÞ­ún%£\“¿ˆ¿ÄÓâC<àrDLÀŒ å1fåäZØ·Êµ˜S]äÈ[a# MË²FÃ@áiM®eüôEò!XëÍ§YÀ&Â¤µyÅ“©	Ò°w„¾¾}kiÉ—°­.®-ÝýzI¨¦/Å¢ùõ¯.„ÜLgÖ¸¿\(@‚íe'­*ƒ°iž/BãÖê Iè1v2„5=ÐçKÎ¹Ç›y¿Æ‘ªêÐx8ä³Æi<R°F¨þ„w>c~":(Æ›ÂgÖ” 9«Î¶Ä€'éL¢š8Žm£š¨JHFzó.#ÕÂÓ§ô;1ÞZ=Ù?|‹‘JV{õå§]OÛÑÔÖ†Ÿnl<]þOHíÿ¼˜ÖnµwªVLƒïyÆFYÅÒÇPœdFøâ‰ÖOt¨—ùj›¾µ³.NÖC¨òa$Im½DùšŠSÏò™¦<M%«³öMl¹rØu`Ó}Mñðèt6ççg*[ §='­WäÎ™Ì¤5£­€Ù„â‹· °GºîØA7Ý<¬ÙQÂè,d5½F«!¤kí0ÚèÒ¤P8÷}À-+')×;%µJ¢PšR/"nm'£/“2ø(Ürš›¦ãIó%>àìŒs‡:}ú(yi§=2Xcó¢>k~Ýí_H‚üôŸ_€j;;êtýÅ—rçÿUmxóÞÃèXßX}¸óp=u89B“|Rr”«Y¥ÓèEgSirûa7’ ·b½T4§Át¹4qn$ŸIñÁ®`°†¿œšGäÎÏ3Û@Xð«>1Qçw•’Ñ¤hÿ*Ålº³(WIu½)BsÙ,°Ö©–v¨sìÜÅµf°Ø£ÛH7Ilf|ãy¿Y¹£¤5m–±÷¢$5ˆ×¤.­Ül¤tó'U>‘ÃÈ <ë<%=IX§ì®Tõ¹æ3«I¨ª©¢Â;ÜåüjùQ~[ze¢€õ’êÄ@¦•=âê]ü<Ò@$ã(ÐUðÚ?]°ËP^M­&økZP1Úm%Ob»\¥ieI)ÄÕ’w™Í'^›¬7c _¥"m­=»rK5‰÷?ýÛ°vªã÷=1ÒOÅÚ#dÒ
ÖˆŒcµ”9ZËÄ´XQHP“­éÁÎ‹TŽÈ¬Tôsæä²,kÐÖ<«]‚ÖBMÏ,ûÅjºh‚Ô”$ï:ÞÃêeG`­c/¬½8rùñòò^óþçc(æÃ;ºeùŠ„ÀÆ€›Ýí­íÇ~üDAÉ¾T4ê=6ª	#f³×ÚrCXl%ã‚3³ír2t¦¯\ÕêL›ÑÖJW«Èr1ú©…gTþ">˜dKÉIï¾»hæ"ÎXÉÖP¥°¡ñ)Û@'1†L×(Y&Êµ¬„µcçÆI¤]· ­Ýùnhè}Úa;X»ôï¿ÿåg¸‹üæ³û&² ×µvkÞfm
&G(Å1™kº&Z32a:pu¥D½XO”eëoßY¬yp±Kÿ|mâã;Ð@œj9uXƒÕÂ,HË9ZÛ^_í¯—Ò˜˜h7cæùRi¾w¶j¦XG+N;"-¢©|#-^²äè
˜oô®í\/a{æPöÝŠ;ch²›êb®Q/$Vx]L+ ®Ÿ“’&º¡£1ÓÔJÖJÎhDòÑ$TµÖý7¥5ÛC”ñˆæ¶ 4ð‘Øë©È§ÕšURD´"´2–Wë1b*ãj»tï²è=«Æb-Ö|ú~(·…ekÿ	­Òù‡ï:Köt¿¶•ù4ÈW>z	TÓ*$8wé«áÞß®è…úâ¹º~¨j¼›ˆ#²¥˜¦}hí?é¬4Š_Å?·{KkA˜‚5º¬9^ÃÔpýõÉT!:­±ET[¸¬æjâ´µ529bÁ‰»KK‹«kKo’¹Hwl'²-Y,`Ü¦v³|™ÒµE¾ ï\!§µÀ··í'Âã¡ÉˆÛÛ}PpÚ‡º$Ù¿¿ ƒÓ‚/]’aåF±~@ð"`™F}í¢“ä¦ƒêï&Ü±¥÷ÝÕ%{$)ÖTúæšE7-[r¶«Ô­R²ÆÕ_é‰ü'›7O.ÝÜ€Õž6»‘ÛžÞØ8¼vò)àqóþ{­xÆ—î,üÆ}.¬fÍÓ‰X)¬³´1Û 1ÆúN}*2À	Šø"L—ŠsÊ¢_z–ŒúH+1’´Iá5BNXÃSÄBn}‚5 b’Ce{Ž¥¶	¿èf#uÙ‹¾›‡ÍVåÐ.«…­¸Öt­ˆìˆûu¸C¾[v¸gÛç„5¶¶+`ÓÐöäŸ¡Ci”'¥:AMV2ó%¥81P„¥e¨â1„GÚx]ƒKb™?ô!¬qÚ5>´.4(ÝñGzr©žÝÖi{aÍ¶^YS\°Rµ¾ðÙ^Ts¬†IÿÃÕá¿bÉ¿¹¸mG‡QÓú)]Û^ˆ¬®/,­ï,Ó`rÉè,IYZY´–Íbþ!«þ,ê¿šlŠÈÔKÇFg˜†å{©Ò‚Lš¼’,E}Qª @=¿3ÄÊøÔ„ÖfÆ37røÔÅ4ˆ–Æ«”±ˆÀÓNAq–äH„$kbîøÛ…•!zO¶k§¦{C7›uËìÅDon<J9Y"[¤¡<Ä.ªÖ†k#K’ê­5™ç'¨_ã;Êæˆ#U¾X³%1NŽL:5<£O;°¦a>Hê|] ï¨/£GÛ<i/D±¬·Dæ~}wÈ©2³)8“È`o³›Ù'Iê€'•^æ_Ÿ«wõÎc¿ì&uE	Á{r‚zekª½·åÃ‹KË‚µ)kÎ`¤‡™æÔç‡¢Pm±U§ÀÿP–º+[5þM¬Ù¬EÔ÷gÅ$¦±—ë³nœÉÑžó°ŠÖâwù?õ²”‡lza÷ÚÒÕŽ¾Ï¬ÃuÓÅW ¶S‡:.n]ÔŒCrÓXÓðÅq`ù7Ë±?´š÷ÂJ•¡Ôó´–Q88Ó½þÓÖ}?ÛÏƒÜýø	â¿ýMl%‚ÓA”·‹aŽÀ]JeÄjª	h€ˆ€x@äb‡Ð`5R¹ >7qZYw®¥dmOäãåß½?€Z$ê´5ùÜ#¬ÝŽVYuR«•Ñ²ta¬1õq—ýäÎéi92Ê±ŸÇ°ösYA^ÂÂš¬‘Œø/Ï~÷_ëXó;7Hæ-îë¬–œ®F˜­ˆõ«ªû˜˜ŽCÔ«‹èouÜ#ù^fØ:G»1™œÿàNG’<Èé>:eR…ìYí´gµgÏôÞ{¶½}aáÛ9²qiÏ—´*8Q+U™ÖŠå^ÜÍMÕ@.C¤Pb¢EWÙ.ø4sVélÍC8¥ÄFkÁj
»¦5/`Íz›g¿~Öelw—jÓø¯)¿ ²)}£55Ð
à²­¬&¯¬5+]Ö›‡ÈW¤’sªZ¥Õa„±û$Hô¹ÐÖvcw'_„ØÆ\{1ó(nˆ¤)â’#$™]ÿà˜B[FN3S„¬FøCÖ`0ûú›¨Â›pÄÑxœkŽRÏòhiíç
•z¿ô
ÑG™R…j¿x€——ÖëkZ½ŠÓø&×S§5AF5Uçç~îÉš±DÏtzTEkØ¨ñóÃ'H÷)"ËfÄ•­Þ&wï	Æ†'NœÿöÍ·$¯½ñ-…jT«)ð…\¼µ¸ô¦Áš»-*M[\²:5îLZ«!%!ÁIY#’—©Èä¦pþü¸ÖlémmŒçœù¹9Å,€1«F÷P»ìàó°fã9{šª99
£Ì‘”SÊß±ÍJã…·8ûjãD!R3–C[–2vÄ”bËä5:„ñô<ƒÓ3úöj&°qµgÞf›U²)	*Ö¬«½OÎW*'N4å›å
¿ÄË†$r»ïï¿y“4È›4]Û…5¡·½œhåµ[ò©7ÌO¬ÌÃZ7¸Š±ló›Ö´¼"„ò0£¼Pu¼w†ŽÈÔ™¢ë ÏCîtî›ªL•tÁ'Wø¦ó°Æi½ŠžÎŒMÜqSül|Vî<¬1²&MXÓ3y†3¤²Ç;w§1bì€ë¤{¸`Ë•·:X#<¬A ¬=Ok]ìúnm
¿u®ÜvsW¾A¾ þ"°œ‰g¤yXn|DiÏª9âÇ]7OÝœ¦aÏ–„¦Ý‘¾éø4)ÈöáÌ%5s)õ,Þsõû‘(í|„w!BY­ÖÄjŸÖîýÕ¾ÜùâÏ_n>DRÛ\ØÄIdó«‡÷v¢ÃÃ‘›ßÐùú0k—#ÉõíÅ¤Ù‰€i)|)lú¬M©ƒÚŒ©gm“æ†ÙYŸ9½&ÝY/fe¾ÓŠ#õWO‚¯ü¢Š¤Ñv·›C.«Uò¬‰™ë3ê—ÆÆz³MÞäÏ“v"'üæˆÍ‰©&ôZÇk[>`¤,í:)Ms	¢2{Á1ëÇÖ{„¢Rà«É™^<FøðQ…˜ô5x‰^ÿ	lô»x¦_Ïé/…ÉèÚ°N‰Èïõ*ÒþÈ”nJh#œºWB‹#4ÃUxD¡ÙLÜVš$pÚIÅx¾8ÅV¬XlæN$¸ªùúó²%d;ÛÔ$´ŠT'UˆÀÿ;†ýõN®joŒ%nÿÓØÄÒòÝ[Fk{aÍ»÷Ë¶ßÝ)y¦ÇlEôžs¥ö¹œ¶h§¶$—ÃfÍ…5.ç_=aB“–æ.¢ôÞ”RÜSµv÷Ð;kïl9i-Ôw­dË
dµ÷Éëˆ«¿ÚÑW\<À|èa-æÃ_ø4È˜÷õ‘™k1ïÏØÌ²>üÈî›÷ïÇ~ü$fÉe’™ÁÊfJ%ÏÙëæÎß—µ™U¿Ù"kÖ‹ss°F¯š8g™aFdœL±›xË¥¤8Ró´vÅ{A†°­=~wÑ¯Úœë&ÝìÄ±×WØ¥ ‡™b€¤IòNLE²hÇ?ù <úä·ç²9SÖâk¢5±6Î=Ÿ¢5ìóï/n?[ÅÅ‘L ¬@*$¡­1Pé¤.qN²åÏEµs+Iaš«véÉ]Öq+2ýÁdîãcorÊX¿ãü„Î
Òš¬mo»ŽØ›ëë÷ß|}Ž¦/jÞ&eeEzÖUtµNW²Ï/áBìÜÝ‚z¦0Œ{s*ek¨9°]ji¶TnX`ßÕð.rrh°t3³Eg
îTkDU°ÆXr‡ÿ\ÁŠMÜ%~rÇ¤çMÉÆ^P3jdÛÍ†ÁsâšG5»3F›÷˜½ù–Øn‡Òš"Ö´­¥3,6jòëŸ˜œ¨¡§E<¨)…)ä¶ .-D0çb,Z²{Ïjv³#ú
ÃÎ¸»£øqÌEŽãÌïl¼Yx49XSÅšÕ¬i6¥üÂ;Ûƒ¯ßÙâ}såønüXíÌ¥˜FÍ¿ŸmJ”›}8Ùäwš›VQ=)LVÃ´¯™r9oŽg	~½8Œ §á‹AÂã	ÀìÍoÏŸŸœûß"Âþjña ÛâªÃ6NÓýÚI)k:½Ù¨áƒfÅj(Py.¦J]UµFY°L÷•¦mB6;ó#/ÿ ›’{BJZ—ž`Ã!MØ8¦\Á3æ½o+í
Î‡=Öó ±Å—ÿö³ŒgÅsr|„$y ½¦-ÓóDÕ#æ<rä×s (I£p.q^ž‹³”ýUÎvvQ°ÆeçÓ§2é?¼v¸S°æPŒ¯¿!¯­bç ¬ùˆ”4,_Inº-‰ßÚØÙ¦— Ü%0Ã,'•Ñ4›•“®€dÔ_ã¡úÖ’çåYBÉ•ÝîñäFò¡÷*]èl¢-ç-Ò;8OHó$	r«Ùº$g_Í<¬‰æ¯Ø%ôšÔ”íÂ»°›^Ô¡g ¥‰FÝÐwðÁ®¾qç4²%9Ø¢Ó`-È{Tc°ˆh¥VtH´&»aÕh%GÚ£È6c¬¨qG.)‡8rZFkq­1ê¹#¥!c5}Z$û.\¸uëÂ§ËÖëzÖNÛeò3HXb5]Êÿëó¨v×Ç?ïüuû«{·•ÿ¸¹óç/Ö~ùÍ7÷¾Úé¯Ü^=ÌÿµV>±Œ˜°ÆüRòŸÈT&›¼N¯4¡©]õçøÙõ‚ÄÇ‘ø§F!¹Î6t²¤ùÁ	â‚]ædfBäØHŠä:²•Hê#d¦ÞtYYû¢eÇ³’C­YMaÍõ#·¹Æý3¬X6½ó4÷aË²wPo[óå’„©º¢©GiŽÐ"Š­-ö6*6K$˜Zæ(\3X»=Ÿ(wád¬v¤wpVà`•j	©í³ƒs|n9È™fDðŠž]^&Í­YýqÖC•mkó·%ØñÛ;—BZë’e©,fk4l¡¨ÊóóôSµ‹Ì.“ùÿ`ïübÛº®5?ïó> IPéÁ/$J(Ãä YBBR@ÔD–TÓ[*ÒhlÇ2¢øBµ_*÷¶ÎE/9‰†]É¹6Ü	à¢$ÃpÛÀ	|ÑðÓ}.0¿oí³uDëvòÖ¼hY<ÜçŠ”dQûüö·Ö·úm	 Äâ«D>–gÓ%ÈÙ)â½éÌ‘;äÞ6§ÞïÝOh‚b”H—d=Û“°»ú[ee òò1ú¦6Äzÿé´\Gˆ¤>:c¢µw/ò A¨]XcîQþfNÖV>`©pq¸/1šH»˜0ìUw‘ðÈß÷	‹Öœ´æqmq‘Íp;¬eø à2¯¬ù"zP´vñ}˜A^3ûjm³§crf‚džÃ=AvU ›Ìrü©àc o4X§ÌÅpaþpGjâoÒZD‘íÝëÛï„µö.k|¬í] %ÒDt8&)_2%¹O}eJÅz±gvv";Q§r:Mw³3W€µ”³Õzb£29¹øõX{ó¬`Íìóµu
v¥2lÐÑ ·äáËìÒ•wúP´¸·K¦F´*•°—j€MfpÞÐgUkÕÂÄ•ÏN¤‹¹ŸÿêôÏyåQ'¬Ñ{Å%AZ¹¯ D<(Ïm¯o=øí´Œòø"êå‚æ7¾ëæ¦(Éb’;½´/ô‡™ÇìBYîY´¶àR ›ªOsf]^h®þ 5e”É§ˆõxf_k,ý[íŒ›©µ‘eVIˆØ¬˜üÚC³]¥úª$Ç¤¹­Ý3ð!8ã„¶ÁÚT9Z³ûH–©Ól£´úbG"Îàò°¦`'\H´þhm=²aéu»¨ÆM›0B‰Í‰t‰‡P–¦YRágMcµ¨óFX{Bä¥OÐÕ.½ÿåâÃÑÎÜp'¬–<°–’ÆfY›²4õùWÃ”°±Q	‰å'É’Ûrë™þÕBÙº¬A¯y~@ÀÂÚùóÓÓƒGÎ?»5œÍMçqï7B»¶vVkã5yA"³¬Áj<†ÐÊÛð>4X[/öô”fAÊÿ›,Hûu# – æˆÛrwim!$6ôè¦Ó"9áiÍN:îR‰¾8ddV™,f‹	UkÍYoàG°³@òoðZð	IpØ;MÆvõhÍÖå„‚GuÚuœà&À«Ì?Õ¬ÉÜÿY?íß_lŽmo«n­w{Œ ßÚº«YkµÿÃ‡mü^›Æf1æ„—y«„Pã‹Ä|Ë3Ã6—ékfŠog%Ú#uÀhó°š˜Æº®¹
7½Ç«ZAŠ-¶¶âžh5µõek„É:ÂšºÛY˜”æ¾(öcTöæç5ƒ0Û÷Ýp,Ø¦Ç§<Ðûa*¤©n
k¯ÚAxF]NP²0âLÔyA¢§‰Á 6ƒ5®‹1 &ÌO1Šæ¤”ÞÞfi%CN3Ï0†å“"omÓ= -5lëŽèàIV¨z¬ù6×¯ÂÚGûaZµ»7ï"¬¨f°¶µ–í|ÃA¸íùK¹Šlm½Ü|ÉÎØØÖË-ŒMÆcQafÔ¾³Œûf¢‘áEŽŸ™,Âl*e“*Õ÷xÚ
¶ÙË°jZ?~XkLg3i²ÇU ÷”q~TYûœ”€v¦b6žvcƒìÐÓi%=v@c‘“ÈhT«q„ÌÈ"KÀÉ;ÌìS!êÑô°&ƒü–vÍ/AB$+$BÐzºAðdê‡V\iñ ©’l÷ç½€qÖ’­ÍõWJS,AµT©M
ÉQË„¬®ö«\°¦Žk’Õ¡<°¯·–—±¾)kÝ^Ì¸øƒÒÏ,h©Òü	ª(3“oÈT=MÑ:´[¢ušüÊ*žcápªP…yŠFv"ßU)±Ê[Ÿ²)¶?_+’ÏOc9KôWâj.ÀÖâw>Ucl,FˆÖwÿG9ó™“9öNF3öÿ1nD–ŒÊ¥“]±´'5"Æ©qAOÅT—äaKA‰k‹Þ×kž=ø‹„°&W+Sö–—/r‚ÞØËO&°­RôåB9Ðßû»´Ö‰qÿ¿ÿû/|ÑÚ~?Èö<È€×Ú´5BX;(Z;ˆƒø^Ì S± …cŒ»”fÈq¼‚¬Sâ#|f®Z}	¶*&åk8ÅgÄ8©.Ø¾Ò›w{BÊz½dX²& yjmÖ2A*¤ÔéäÂMNLZnA,’}ã‰	þ%°Í¾11=Éêã$k“x‹\Vg–ZjÔ¼ó½°öŸð*ŸÀjríÿ©ÁÚ6üE…1´†+zÃ£¡UF*¸0íW…9ëw÷ÄRšxÈºèRÕ–ò‘JèL	Ê¬Ÿ<þóátšfØIù@ŽÂjÊ‚\YyÛ	kÊ‚üœ¾ýÓù9J6w®-ée!µZO—	%:Å•+ý¦O•u•Æ+ÇU ¢J~±•mUû~`­—=oó¸`jc‹¦Å)3zp×ÑLn-ËÄRÚÕˆÃ¶–ëÛf›¡3€2"¥¬iÔÒaöá6ÍzAHW-r¶ÅÈ…„­°ýžSÕ@hìacAPž)[Ùš*ëL™Óµú“D]ÖˆÎYÄ8ÊMDm°ÆHá);=LÛ°ü,€·vV·ûaÍkk}3Ç¨a99³Kj„¡
”7e¬Œ'.]JÐrÆjV† ÈCêËÛsev)%¾XÐ¨—}L´iM«ÊKÞ bµÚ””V©ikv#†¼«CB|¹~~žŸõj\ÙÈaä<D¶v_Êšn>ÿ‘ÍíûÑkfÑÏX§tƒÜÍ!›6¨œT­ñøý+òŸä;Z
$lÕtüeÉŽ¾~ÍŽ´ûøëÀ.«ù=Á¼Wá^ü…}$íj‰–ö¬åµV,g~ƒ»œ$Š™žß0fAõhz*íë€· þAŸ48ô4ø,°Ü9ªg«Yƒm²·×çç…krŸ›¯.ta	«ÑlMÁxlðÈ °æQ-ä4n~È¿ÓàUuMÏ¡Fƒ1–él»,Ó»ë¢OçZª¬3+þ^ÆœÕ°	]â×³ªŠø(‰ŸäcÂ–IåˆÔð É²ÚÒkØÂ”;m<A™4¢[¹Ïé^Bž§4Çì¨oÖ!ÍÓG8nîk#ºay;= x¡°XQ(­‰ÂK‘T°™¢£pØfÏé„#<£Ê~4X‹Ä€œ#	NÙó€3t’ššÔá%sòšÒ&ù,Ã¢$ï7ùÇx/&¬ïZŠú5¶Ö1#š¾m.|hk´Öz×LF„fm	h!¬tw?¿w—[ÀjÜî‘ý¸I5lúâÒ¿3öòÑŠÚØUj/¿y¹i½·”È3yBº™mÉƒäþôå3õ³XqÜ•KÉ#•üvšþ^¨SZ‰r4,ÂY[2á§Ì·ší)¦U}–e“Vÿ5¦O’aNÇ»{Äjü(ÒÅF'‹½ñ´2#Óú?qV>Óu/¬õ –™~&_ÈÆ#ì5U¡&}°û(5üÐ¿š4‘-ª«;óD9¯§R…?ÊXš
eRÍi¨²ô“¥U`M9‰æ9Dm+¡?Ì0jbƒY#ý{õûÚ É\e„‡•â7+Æ®fë$¥@k·&Òõ7&ŠZ|-#àÍÖ¦VeÔ¥Ö«MÍÔ•æ“³CKý$õÇU¥lj šb‘®0<‰ÝÝfäOS€®müEˆ ÑÚãÇÞ½5¨SÖ¸wÀÖ—›¡7v§ˆ+©ÿ,3ç‡µ“ì«Æ>Œh =Œdi}‰8µËÿf¡7;ÚA>±0ÍÝJƒ×W–—Ÿ<I$fjŠ-ZÓêƒG2k±ï‚µÛø‹üò©ƒµv?ÈÝ²µ>Oj»‰kö-¬ña7£¶óEkqß‹¿ˆ
Î¬Ù¾I9ˆPžqGWQÕ¦ñ¡ÞØk>L$¬^(9ÛH@`KâÉ;ÜæždjÔ£Ú~/H_²ÐÜÙ09­ÈF“µ"óÂxvrbV—íœªãÞDŠzž¤‘z9O¢ÜDPÛ¦gÏ k¿:é¨Mž«áÚÕÃÚ'ÿùÉ'°°Få˜)kÛ,ÂUÈkLË'¤°šÜû‹hgÌbZœã?[JÔJ"(–öä)§T%§5¨ê²L/–©681Üi¶âÄD kØ¬Q¯öè–…õ­­ýKyµ.«eëÅ¸ˆg#TÁF~}!ž‘Z"XÊu±×Ûbî$z¥±¬µ4e‰Õ°ÔU˜-}\×i¤ëU»¦®•Ì*fZÌ¶jŸUmuõJWc…ßhÌ–õ-´ëÛÐÚÌÝ¿EpÇ5½¥@2°”Ç¸­qÐbMl{LEpÊ`WÇ=¬ù{ÓÔÊx‹Ì¦ÉœÍÖ`·éül–qéÓµXóNýÁ2Ÿ¯@Ó®g5Áš³±±d©¼Ölów`Í>)±8ƒÁÈcæécÇ‚ÚQ éÂ³Úï_¢Ü¥oxàöí¾\âËÎè!@-—âWš5k§CˆÔr\"ZäÔJï‹T6-'†jŒÍ·/÷Ç!];L\ËÓÆÀŽÅÝÊÏÎQGOÁÚPazÞÃÚíÏö+k7ÌkDlvÓ\óé›×Ek(oó4	lÈ®Í–©Õ… z³«N-€5ù‚ Wò$ÆXFžÛ¼skvÆ67‰ÈŠ©…•Š¤5ÎX³k§¸‘´diRÓ€2h.÷Ñ¬EuX–!¤hb¢²'Í€¢ k¶ä@÷Ê•õ±íõ|có`:Ý‹­æ‹Ý]/¶Ç7¶¡‡wº‘
9¶ö­µvDÓ&ü§ƒ¡º†ä:€C kÆb2½¸ˆÓÕð³4mK”xH¨eoT6pï2‚Ïµ¢7ó+EKw¸u‹Âx¡šbAÊ…ñâ›‡5‚çpŒ¨{¶.l«ñËÓœ•c·7ð·JUµÎ*‘7	”4BÉfòlô&!§	‘Zè,â>ÅîY´Qt+œ–ãÑŒ1ÁPOÊÀ¢Ã’!¹‰8¤¿Y^`Äd4($Â˜E‘á1ºOšhÅq`S’8ÆU«†½ÃxR³“kgEä¢ÎKRéüˆÜÑ)"2vPÄõÁÇÎ¾ß³Z:"TÓãn~~ï77#TSkµÏï}¾cœöUíó{¿ÿ=;ßnP¨†¼¥‰llçÑXð*é¢•€[ÊdfÃLòr6íðU…¬|oãh3´ZËÂdœ¦™Z6ƒIä4Ÿ¾r9uY”†}ÀZ2Ã4V¬Qe¸YÎ(’]’LP3nÉ&SÖ€­Ht‹RŠXúƒÅúŸrÈmÅ„!¬±§µ=cû&á-ü	)l‚5z›ÖÞéfÚÄxÑÎ‘–ÛRn#¡ŠX$4Ùh	Öj­‘¥Ÿ¸¿/°´V]®Anà’hÍ.SýÌT¥¼ŠxIž§&ïçJ…ÙÑzÞhå²2Åé|µ´Šÿ>)KÀZ£Ì‚Wž§^e­µ•Ì˜^¦¯¼€Œš7ìŒ[Za¼•oÔõCPßätÁ2A*Á_Þ®ž;>Ý­íQÖöº2*´³<s„5Ä¶±š ZÔ¦Ÿ»ÜÐb¥íá*<2r	Võ%;ÜÙï¦~95q\·×4X{—¬Ž'dÞ+Ì‹˜íÅ×ÉóXY96slf‘¦Ø©Cší|¹ZHjß©¬ÝøåÓ§ŠÕBXk—Ö–‡C]-„µ,‘Ùu„4LsúZfý ò â{€5+~V"<º=!Q@5i¹+Ìxãä4Z•Z"!XûÌDµ× ‡¹ÐÝˆ¬ibÌ)#@yúIÉ	£üØõbüõ«YR±ö‹#L2*ä«ùîùR€±ÙÙb1mZ½ƒkõÌx'`bbB°vf¢|Z®ý£ÃÙ‰Ëˆ[||}õØÕ¬jgÏ‚L7úÓ›7•Œø`çÁ&rEÉ]-I¸3”KyÌ9X+AMFe°—¡ÊÛð¶æ-+mÒòß¸éËêA—8Ü7Jë ¾ŠË‚Ô/V;ûkˆ}÷Û¯v^níì*çíÌõßš¢R­Ùà;ûúû©Dk6‘é¤§•™ZK,ak²ø9‘ãe^Àš²[x•¦œ¾ÍK$°îgbµÇ™¹–Õúœ’×žXP‰º<sma?¶ºâã^ÆþZ;»öji\òeµt¤éñÆj[»ùØ3$½3ðì7imÑHUªšß7DÛeµƒ5s¯/³d:ÕJ9éuIk­£g5í‡Ù8£óæfA&<¬ÿ…ñ£? ðg-’Û±•Dç±'_§¡Y÷«·zk¤¸š²&ií­NÌ¼ÀµÛ}©Ajä:š3Ò,KiàaÍlF"Î¡˜6¯µV+[æ#Q¬\­p)2UÐòó³éé¹ù©ùg”þÍG_›¬Ý¬±³ËjôUkÙÒš=
3±7LFè7vãÜ|¥A7€êB ˜.8®
}­^-TÍB3>ó°æÉÍ É·OwýÂ^¥­™Ê&ÙˆDb(Ev!Fqj…&7žD¿äÜËç”›YIÂq\À!½Yá¥Ô¾Æ‘Ö„eîUxoè	8Æ3¸eŠÊöà¬†Éåü¼ÌAkÝró¬kAvo¼¥FkGîyLûûÿlã¥µo·Å4Þ5ÏŠ¾L·r¹J]´Øá„´«wJ´Î~§%Lãyk¼“VµJ-¶R.ŒÓÔ,»ÅS´x*[ÁG„Ë`žÑµÁzð¤(q+PÓ)L÷ŽÚÄ®Û›àŒMØÖ˜/Ñ†¾¾³~T°µ'ë2Ñ«ÃµQcGøÂ:'•1tÆqrB[€hñW{bs $6m}wl!š¹øG„.–
Ép…T2Æe-üÚÌ£Gv\iP$*XS"dL5A¸ø k<&™Ijêâ}C†Pv²N&ùè.§R>ùú¯ßç/õƒ·€5…+TÝƒjÖnÞ´¦Ø¿‘$\öüÞŸÿŒÿæÎ7_}ñû{Hj*]S:äVdlp7nó‘F«±æ4  bœP}pe¯)K2…R²[n¤9••	°6~¼ÆÏèôåñŽ´šØœÉZ1^4ç^IÕ¥ÂÈs™ã“Ù4‡0)QyÚ$ŸžÌÄUP(Z‹CzHJÝE•·Ù/‹SCXÓ/‚P¡sÕÐ`M³Œ‚5¡ZSõÔÀ’¬&Ê†¬­j­Uè'Z½å!91’Á=U)ëFRã­©¢‚´ž©•)¤ÞkXE²>Uæ÷Ï’Akj…Z+#7iU…›2N¶ÜfîÕ~5*­ Žñí•õ÷sä'?Yêo–†Vyx©ÜPõ°ÆŸ·Rž&4“–K©x¼NË®ù)_wO:sãÎÍMYŒ´{÷[xiÍ²,tÇ–Ë‘Ð²ÿjë§ˆZÑä«¬tÊVÝ²åÀFUÃ¨=7;°ÍÝKåèÃÜsÑ§tX{Ïàíõ'ËË¯kVZIDùh³ïv„ÜøòÃŸþòK“ÖÚa|£‰Öb{,F´B Lók¾û÷ÿøoqñ‡µŒÌ…cÒñ•»aZ¶2yåÊ¸ÖÕ¶ÆŒENpÓ¦þ¿1QY’Ëf×P$eñØKêYÂç?Z
¤%A¶gAb/ò‹§NS«yl:æG[+ãÅˆ¯IYÍNuf3þÀ–'.OL?]»üq¢o<;lf¼°f¬­½KÉ¯róæ]Á^;çv®yX+,«™_œ	 ¡,D.™ ¢PEmÀ¿JÃcc‚5‰a#K†¿ú,qÈ“A‹·E±þ"O˜Þyaƒ5<Ä€µ—;†*s[›sÊgÂÁýX“É’+¬Qþ¾µç†ŠšZòvþÞ¢6™qIV±%wfÝÜJ§Áš6öFäwNQFö£®c[L¿‚9¥•1M*ŸJÙ \jUŽüšªý%VœAT“»µú¶¦`tH…wê× ·‹—¾š®\Ív}ý²šWÖSÕjÅ¼‡µ2äÚ¬uÔ¦ÊÔz×Åj‘ì¡C,ámìRVŒh‡µ]+,¯¢ÝøÐ!ÿ‰>2´ûwç†,w2¦Ö7Có´‡o¿½ü*ûãµ´¹—Õà·ÀºÿãK·yv`qYþ‡Diä¶p×)\KÂjl\ÍZ2) ‹:ŸÔt_p.ž@5·®[+³,,¤EÆ-ë[Ì+KV[}6;{a.ãä³ó^IÃV” Öà°0®­­YþãuW¬¶y_ÉÅˆ| ×¼uãB-y÷W\ôû¾jæìè3ötonÜ)8ÇXç#~(g~FÄ~7FP¬%¤ãx	ÊÄ °Ì$Á¯Sc‘c@4ŽVôìµ‡ò•ð¨Çvì½ušàž­Zœ¢`M¯"ì›GXÛžá%Ÿ‘ÿ¨lÄm¼xç‡]ÛÛŒ^3©iƒ2¾Á±#7AµvVÓGþ¨ÑÚƒí±‹ÉWfèèH)€#ƒ2çË(NÔZha<V©²QÊXÃµÖ¬BB¤ê„À6®…	0‹s€GžëêÆ00~tXš‹èÎè”5ï6B°5pûµq.ÿ½®8Î?¯T4~¾)~Í¬ÑõpHë`7eì³ll£ÖÂ{kD—E@iÎRž9c:‰Õ¬¡õ“5nMÕ\ëa°)§˜£ã²t0‰"&Î:ç;9;£ISÖÈ<&’Ã	œüs.©?eUD©Tg
iâÈ‘°öéMz­yX#ö+kHp&®ÝýâT´ßñÜe="¤mm÷þüüÑWÏ¿ø‚þjƒk¨k–ç¶µ‚™’¦‘…XýqB¹¦ [£ÔŒÂX´s®•ë¤tB•YŠ²NÃXqPëøñHvüôñ‰7jLƒ„ÔFi:Ý¥Ù	œ¶äœðÒV×¡fuÂ3óQ¹ì—~ÊqpEçP;(Z»b³µ_bKz´ Ý,0ZDã*qDõdT”1Ù(M…ž£]½ß)¯¢–U›¯5f™NíÏÿÒÑ…]þ˜qžÇkÝNž"GUªf¹%4·‚42¤_×Ø­·¡¨•¨u…zKf3óà’ŒBš0Ë™½]Î¨Òmé_ÐêlÆê_}¯FÚø-)kGmµ±Ò(±U©ó<WƒÌ‡+˜˜MÏ6øi¹³v¡¸FdkžÖ.°ÆÜ®v›ÇèÎsòPgû}n]Z|è²IØ–	Íüú…Ô1«Æ‡Ïx4RãõàœbX°6pû±{Qÿ{ø¶WÖ^÷ø+dzô-ãn…1sÔá½œfC~¬÷?üòÆÙ°h­½/öCm:Ýdk[Î¾Ÿ	jaÕßÞA§µƒ8ˆïÃR¬vær½`M+A8‹Ø˜³L˜”ôå¤§É•Ü$|´þÞ(%2)]ßÜ¶ÆÕ>Ä*h“ã(k~ÉÆ¶û³ ‰ß:V“Ù°›ÝÒD6‹Wÿ™Éã“Ódn§'ô§!Æ—­óçuâÌl¹žŸ˜ÄXXCÕ"ã…,HXí¯ªYÛ…µ³~ø)&üL–Œ_m­»ö•:­1Ð%M6‚µ®^t´J>´U2îILp°Q±Õ@Ñ×0\#^²2æRyúÌ¯hp%—°ìKnWñ÷¬}_r<¿½K¼œŸ?/ +Öë5¥ˆà`Rfeã*TÞXAÈÑxÁ(IWP„ï¡¦‹©ÖHUuEY•ª]Æ9ëGƒ±–ÒÖ¤°qSO*f@v‚f9zJª†\.#'[f\B@©¶’©~¦ä}
ÖŒ+ªŸñ°¾…°Æ)"Ä4}ø[©â½ßµ]upæBûn‡-h”®MÕ²ð‹°e
n3]Õ%ud2lL=³ð´Æ^Xc+2c`ÇØÚé6a­ÓlëO*kt×^Äîñá1hMM7‚¶}»+Oë¢÷øv¯Ìl«†ð©X§|€²SØ¬ÚsX¾<€{ÍÒ¼¯´9Y¿eÐ}(½hºØ¿d×¤?æë‡ba,ùBê>;÷ì–Ö¨•ú¤<2RP¼¶¶éYÂ´5ƒ´ëà™˜Íâ6L²ÆõÎŸ»0øÖ É¿Ö—‚$A6$D:C6B°0cÕ4vü¥{`[ÙáŒì—DÂÏlŸ+ä:j¿Rx^€p¾5eóæ„2)q–Êh¥¹Ã’_Ðc"œN¹.ÚrñÌDèÒÄ%]ÕXÐ§Ej§Y˜[[¶`ß¯<ÀcD×k?ìÞ†Ùœþµ?æý#cë;ÿ¶Õ~«ÿgáÏøTÈ5éBÒ·Ìoò#CëBïž	¬àŽ
š¼çH	VÃÑÃ`jÁ²Ê,¹sÉg„«j7Ü2ÊÒKŽ“VçæmwËÕüj:d_€6Ú}-º½Ù#ÇÆé Ž»ÒÑÄSÆk†gˆmÝ}•MNs4êiÝQ}ú.Ìåñù:eèGø®k¤Ö8’VõržQ¤b£€[¶C¡+`]Ã5nìG,ç¾µB¯©fˆ-WÏ'NtÊU€#o,Ég'¸µˆ"Ý@>’÷]7âPY#ö™AŠÔ>&eòÓÏ‰ç&¯='r'2øò¹$5ìù·è{½óÒVI…ä¶1´ÓTš‘½ˆ„˜¨î2‚5IŠø7b	çX\½<µéÉ¬Œù)eS5?%L‰ÎÀgj³o q˜^ib¶\’|ùR=[Ÿ®OtqLL
ý¹Óé¢ñŸæ«a¤q&[d‰ëÿF‡Ú`­¥­f›¦sv>þ6‰rKVB>¿Žš8øí‚¨$'Q%Ò-š^ÿËH…¤}¾¡š9-/üÏæÚY,AÐóQä˜þ†À½*PUiª`µU(3ë”Ë´C+°„)ÅN…	½½"ƒržg“ä\Ai#©u¾² uCeê«´®UQãùF‰çpœ*¬z‘.9u+?%|«­b:^„Õ´:[Qá[Í| k4ŠÉ«aøà•Rë»û`íu™|¸`g™ \í0­ÕýëÃ\‘è—ÕºJ&±Q0bz*ã$#d´qn–¢úwd´°7 ¬F0¥¬µUN^\¾ˆ°¶ò£•åcÇVž|ðdyeeñá““‡O2ÃµSšŸÍbÿÿ¸ñå³¯˜÷áEÚâh°4ÚîÞŸQxEÍ«k|ïEkqÿx3Ès.2cžE&Û+2	 Ö0[¤6”Fä¸.U`IdR[‚ Í“:—ÌPô­lItÃÇÚ*Ö”Ùkø4ÞpëPÙz­Öã Óò~ÔráäädšÝbV+XVò“ÍLNŽ“0‡î¦¤²+â$`mX¨öÙ×ŽÕÏjÀò5Ä¾³Ý‘Y{°3héŽD£ØÃLSaŒÂ¨fDÕ–ïyTHÝrdØ#ãeÁZµ2Aä•W&&þªølñê×W?r¾ýO.},Ê?<½óôÛ»¿ùËWçF–æçû‘æâåRKS°ÆZ«Ó¬é7àŠ€Ô	WS¦Ù&+N™ƒrWKWjX÷›¡¾¦Ò ã°wÏcH¬I[0_ß;ÒÆä¦¥Ëm@Nu'ª‡s®“-æfsÂlùš¼HÇn`Jba½8âE¹¹!›~„ásùçÆ«ÕàˆÂ¶vXsþ"Ñ:[aªP‹(œa¿µU‡¸\v~èuå¶aÍÛ‰°§q@nlíŸ¢Íò•$ÈvsÈÎìùév#i„µ‹+,{*˜X%Â=ü2Ñ70@ef_nØœw†“Ã‡pn)Ø®ÅlV `Îã1®áÀ5ë‰Wq°VÈ«Z=¢0´ÁŠ„îký4z(óSènÈkæÉÍÃ|öøú55Gnë8A®	Î„n×9«û‚¸<lnnppN™Dbn•iM¿8ZÜÜÆD*b”´k»ÐvÊ{ŽèfÁceHãÌDXKÐ§Š¥šR~`5`mÁÜ¾•éxá°Ì5x7Måls°¦ÇUð´Zkr­(À©pöEšŠ'‘ØóW©•›/Ø› [é/^¹þ¢—}:Eq°¶½þ­ñ—'3H­=‚Þzä·zì_Ö»”>èaM¤Cì:êÃbìU9|×óÌ|#o¥Š
O…v ™Y!èí»`-°½i9>Â88.pâwD&ìâƒp°ÆÀ	kì+t.p©ô:œ>É‡Ê6ÃÌ}_ è’(¹ß¥-þqXëè±®iVBëèKèÕ¡OdßZ›u?a°æ#8å­ùÃ¶Ø^RSXŠ£†:Í.òS,eilI}–ƒœ‹(ùÑÜEDr²´<³ûÑ‚^|Ü1¤"Å·C—É±”æ,–UÌ2=rÿzg4Òù¥»2w¸ö
ªµÁšn6¿Ó>§:íUk›‘ÍMFvv"‘ÍÈà¦Áš6ÔFÆ@4/¦Ù-Cèût½à¸G7Ô÷DªcZßw„bÝ2”U®Akÿt†ïÂu5ãLV/b+?=1]“CÑ$NÉu"r/„‹5"dÖ‘Ž¤äB«ÌR'M¦yB^O7-õZ `ÔêËÙZÄ³LÛ–s¦±ÔÇÐ²ÅÆÚ2¥Ðk¢)g,\4%‘Ñß¿ú“Õ*)Ý°V¡\´~ðÝÊRœÊ—*¼§K²Pªõ¾Æ¬Áçµb¤ÿCe’ÞF˜v™‚óe‚æ×ô4Qƒ¾#g/ÊÓxÂ‹zJ”]Òû°¥”	q¥ª©ÿ4Âl¤¿†¶65µ´$›I¢–&˜îõ%Ky›-K¦Ë[ªK	Ç±õÂÐúÇþÒù2î)Z³²1oÞÿƒeŒå¼<œÊ0¥¸*{'˜Zž#\F÷§«É4*é—!#ˆóÑ”ÉiÎj$¸˜JXÉšs5ñ/ëXÍ5ø\¾HòãÅ'Ù>L@kO–}l¹oØÍƒ¹°c¦³ï†µ_ÒimÑšÉjº[MµIkÝx-Ä´ÿ“­ÄAüÃã¿Ÿ³5É™)úx2ª-IQ«f%k‹\ŒæÆe¥ B#œ‡N¦#”¬ñÁbRÀ(èÈE†¯	Ñ‹Ú¼jÜOÈ
’pž"„íMNÂ2ir?²™"9N kÌáÇ-ß¿X.fRd’\¾¢JµŸ_>ÝyxdúÚâGžÕ>†ÕnšËÇß@µ1Ía›¿»sË…†÷KäQñ2f‡*Õªõ†3
eÊYŽ²‚ˆøQÂ05BSÍ™ý×3—“—ëµñÃDQâ2k+ÀÚ,XûÅÓÿýTÆ&_š¶´Tâ™ ïµT7dW·bCt>‰]®•ÁÜh‡ÎêN›&@—ŸÒ4˜2+eÃ3fR7e®8‘æS-gvÌä«Ü³êç3‘!8Z*±q…%=V|£o‘àuqñÒ‚£¦Q>aM×ïlûÍü¿Ë¸¬âKØ|ørµÐÁŸ›Âß¯¾Ú[ÐVÐ‘²’^ùïFXcÂš‡ê—·
1(ó¡³Ö8öÇîÔ'øÉkŸä>XóûÜ¦/öáÇ¸XáöÇ Õv×ÚÕµ”¹üöáÛ/Ñ[K££‹	Þ)‚5«]às1Wˆ¤EÆÚ’.ù?¦+.yûëw½^ÄðÔXÊµ|?ÄÆ¿~R!Á³©WÙé¡%™ÛÀióï±1s‘ Dj4[Ð 3¸¡»óT­ êˆ}@Û¼.Tã Éj†Í0I¬l9B®1úp}Ñ<hÿÂ0'|Yì…5„1âÂï.14i‹Çê7F~Ü2¹±t'ÂDc¸ÄPL›¦lÕŠM½Øp	Ì6íðuIc³ãl~(.ÔctCcú €§eÉ‘„¡°öwÓA#Ï ¹kc÷Çî¦µ›¬	ßîßƒé@`¿Ý«ªÙ‡Âßq<ä6h,Èn{Û8b"öò’?Ä~@Là©WÁ¬Þ«R±þkÎ?m¢ÄÅ¯YŸëýN‘šêÊô^Ö%& å¤;î%Ýù24q¢1!á^Ìkw¶¯›D³°?¶…dë`‚âktéJÙm…íÖøj¹7mÍ›@bYoÀjžÆ¼´¦`¼·ÅZ˜©G	=xhHk6=ÁãØÁgC«† êSO%šÏˆ‰øK™ÆÙå¤ó÷'´²ÈmÜ†XŒ$­-½ìó’1vy‹&åƒÅ»ðú§wô…Ö<¬‰Ì^Ym$¬¦Û[±G÷¾xôüÞç/w ¶­¦=ßŒD·mz'	ÂyŒ„ž€†fãDÔ2iû–9Aè„H4‹—ãYgOüÓ¤Š[I6ÂZô@[4~cºÖPýt*E…Z¤Võ²jÂÏêGhS0k¬i—Ä–¦â­§+Mû6'”Ò$Û4µ M:a”OQó;l®Ñf!Œ–à-X6„š´–ˆ£XŽýòƒ
¹#ÒÐIê‚á˜ëø¦ºF7þXL@J(w—VqSf&¤n[Kº{¡1Þ°ÕB‹}56×¦¡=MU—~YRV¤^µYÈ¿÷lhÇ›Ý®–øŒ	ß’Odi¢8µ2¹+Óôü‡43c×²éz^+ŽÌ^«·þ×l¹„üÆ
™äÁŽžrejûúYÁÚÙ7ß´”D\¦3düÈüDf–—-ÿ 1JÇF¿ýòª¯ûÑ#´EP™˜,5‡H3‰„ÚÈ8’èKÀqÔSj®è{ìzý)Ú–¬FŽ?F7 Çi˜‹¬|ðöÌÉ“3‰£µT__çw;‹´÷Y{ŠW@;¬}\¥é¶÷	Ôt3mVþ¡N‡Ekqÿpç~	kêÚr@B“¸FÀolôà Îú¸ôí“­È(±8
«‘
–3Ë~«_Qç­à³x2Ä…Åý^í%k°F¦VU³§uÅLî¸ì)7äö• éI š+(vÈOÆ_e¯üu4“î;)'HüEBVSÅj‚µÍÈµíx|ûw¿ë0Û1?Ðr\wk­ú20tQ­h¨¹¦¡fÑU\ó{
KÊõcÊ0_Èü4KI«¹r:uL4V»º¬9žKù÷ùöÔŠû©`íÛ?ýßþ‚:g±®i	€…Tf&C¢¡¡^¥ÕB¶²0èÒÔ›‰Õäý(o.«cãúŽ‰ÒŸiÚg§’ôà
TÌcsiÅlÁ·*WÂ#r›£6LékAŸ&É,ªi³€*ÍÀ_NÈb¸~ßfMì6âaÍÓš×ÕÀ²ÚB;HUñû·<«ía·rQ¥'Ñi*ÖPœöÂZòò°:?†ÈÆT4/²9újkÚkÜ…|æO…‚ÛâÃC‡fÞß…5êÔžÕžï›u?]Ö¿ûþ¥ÛüúóAò#ÛùÀ¶pjéŽ6[GY²jµcê eï(üeôM×¦Ì	²œG^›R±šÑZþBvîBæÈuéisó«ýóø‹Xýšhíšzb;o™øoÚýµ/¯£«) ´µ5nmsÓ)k·¥´mw—ÑÖÈ„\ßŽsÝâð½ªWíB—`Ç3Û®I¿`‰A]kì¯ÀO°[´¦ÖëK‚¾&¿Ckÿ­Y:˜ÓÈäxèhÍÚ:Xc£‘{VøP!Ötžg2ð3¤\PÙ[¯h‡×Ö²… §ÃTWcƒŒ,ê}±½½A"¤¸Í˜çµ®žëG»h}í/ÀÚoÅcû¥5íìÏƒü·õî^‡cÌL@ó¬f*X hqÑ*V9p¬™Uod­Uél,x¼ÖÈIçœ_«á¥nº¸¹Ú`µŒÆ,<ÄqÂ…ñ£?­OòáÎ™[ˆ;)Á“‘¡cíùjþ!ú&={Áe!©)t<¤µnkíþ"–XI8gk=àÁá ÌÌ_&„Ê§èd$N¹G<÷$Zè„³Aç¦–W0ô€q&.kª^K¨Î:É@[³[Žxë>³®4ÆVÝÚÍß–hþxÉšÂŒúîÜy÷i;>ÿüÑÎ7ÏŸ¿ÜÀ¢ÿÑW›`íÑó­áêÕÂèqÍæ«L°W4ÛK;HŒñF-Ýq£F1n×žÖº +<üKdß×0u´îdŠ·l"k`02A¿¹‹ÐDÔá¡¶qÙúëÄlŽ‘.Õ
ÙâÆõÂpè»×íÈØåPóTàÉš°MR+•Èïp]bÈ±I½­d®VåÕÚ¦Eb>üÕ”ÓMÐXø«ÈJR[fË"5B]±‰ ×_°5Ò|©u5ø¾k]ýå x8\(ëõyš©‚²a\
dw±¡E!¼f±ƒ,•l´ÀÄ"u²–F‚Þò”¹—*GÒiÀ$ûkŠºEgme3T‰B£1ñÆùÙòö;dA¾ùæYÃ&ÁÚÅË©9õu»xõäÌG¿>Ü9su1Gÿq%>Š©ƒÆCŸªLNÙ¶Dn€‹¡@&;Ò.—ä#œ£míí·nßVôãKï·ÃÛ¤ïžì[¬]yøÁÃ™XçâÕ™¾áÎ¾€Ölaí;iw¡ÚY´Æ†D;¬yiMá1A ¬ÀÚAÄ÷à/²ž1ÀÒ´gi&1M‚TŸ3C‘Dç!ú«YÁšXM5Ü‡÷q:ºaW»b+
n6’R=mß²ýxèäµ6a-0ƒÄ^dmÜÞÿªYKGEj|˜Íö"|Età*Fdí^Ã R‹…g&míf¢§/—Ëã£';)6:9
­).þèrìûDíNÉ‚üÛßþö³Ÿ>xðàÎWk/â›?û…êŒãéùúËn¬&O+:¡¢•<¬uÖˆx°Æ~¹£4²
¥4˜ëZò…œ89}b”ÄÏOàÛ¯îÿÀš’˜Ú/½ùÂµâþ–NØS’<Jå¢ä#ÕGðöàIŠù€Z*ºØAS34 )(Â©š€Y>¦p•Ì
"']«i¹RÓ«ã5§‡œbÓ5±J¤H,fµ¬öìR‡]0‹ß4+ûP+p9Š”‰˜5PH~±Zb£XXTÜ}•›—ÔBT¶yNÚé„tÆ‰P\›ššb·fö)¼HGjFnHPÆ7^Nã:;†°Æá™MCOã02 ´6¯‘ö4Hô=\ììÖÞw¬¦r…wç’»ˆ`íÒû?þ²ïñc:cJ& 5Ë|tÛœJbˆ”h-%XSµš›ø”§¼ñmjÅ4éAÊ‚T2$?£5Ä´¹Ì\mãÈà…©¡ÕyÜöçgßÖV ]“Ëˆ¼E›Ý¿~M‰‘Ö\¥Ú¦wëÌ?
Ùð¹Pš¿pþÂùkG¶ã%ƒ5¡š7Œq7ƒ1qÄå#tƒtYÄ+’šg5=Ôî½1¤aË.µÂ2[hXQˆ8Î`MRÝÔ8ËFaµkÜôÒÁCƒ_Ëºü±€ÅÓØä2bÞâZêê¸„¬Ð³ùÏGËtZ[€2ä1òÂIM½/º /:0óß>²±¬ÁalB8ÛÏkØÖvd€/ørÙDhúÁ-8j÷b2ñ¨Qj`)¤©`õÚª:F8ÓK?6ƒMò"A9ƒ5_Uf¤†'³&¬ŸSø¼Çv3ÈåLZïùYçÇÀœéïÚ²›9Þ’û¹ÌûJ#Úlü5Ô¦Ö´ç¼ú³	¤5öL_‹·…³ðX¹Wˆ;ÑÔis‰Å¤M "™‡C‡œ6ôîâ„õÁNZ¯h&0e†ÈòÇü ù$úœÜå%skŸÞ½ûà-\ùixýñÛv…¾?Ò`¸ÿèæÍG/wžS„|3‘Gßlmnmn½£í|³JjŠÒìÔ6°›«Õ‹=ìÚé ¿S#ŠöÒÈlì×gÉ”¯5¬µj˜qmC-BË~éñË$‡¦iÀ›•§OŸžÐ‘YÙS0ÀÀÉ¦r!y\x–ÿì]h[gºï7œËs@þÀØ¾‘±cä©Š	V%;FL,ä©£\åËÝmMÒ:!™ÞŒ;m}cœÒä¤˜$öLÒ¹˜9›`›Ð)&”æÌaŠa—}W87‡óû?ïz½ì8!sÕsã'ÖÒ»Ö’äX~×ïý?Ïÿ‰´¹ÿ=)8°1Py±-î‡g´øçq_Í",€/Ô³n¶#¬Vv79$e›­œKKü¦PË­µ>µí§-^×,:>K]¢É0Þ¯ür¶TqÆX­Z.¶Ú“€l%ì¯”ÕQ.iBµ>#ôX«ÊUXY&%«c“÷;ò¡ðÍ~ÏêÇjX›¨˜€	vŠ7(?ªÀšŠÓ0QRe>;a‰“˜‚ÁjÀš<G*÷î·
<Hëˆ*b»øÕ£l~rQÊdîÝ ¯„kuûNüüãNæ$|Óç2‰«$2Šá&W5qYy¢]:kFn­ZË¸ÀcPÉš°MFn*qž¾µŒÃÈò&êÚnX£^ú¹=¼Œ¯Á|Ôõ‘2À•Xß.?È½î{¹m%·ümmOd ¬=1ZKívï7V‹ðÏ™ö3òr”Íû/ÿ²û±?-¬e³,a®1æ7a›­å4ãå´"9‹”6 ¢5U¬Áj9ZŒ&z{‡ µdgo_ß³ÂëX‰ê9²X8(ëþnOÉšÒ —“•¬!ªëYþHœ£Š)9ÆnX³Î’^MŒ…$MLÔåHDrÿØ±ìÀ—'“½}½§úzûH8¬†ØN¾ãsð×ïÚ]š¬?¬?þáñß×·Úÿ^Éë=2â+ý¨LwsïgöÒeEI©ôæ#Ò*kÖ¬¦½ÍÒêºÖ(JùcgÏP+§kG¾üøËùÜ|ƒævïÎŒûÀ¸Jé”´k+×ë{¬¢‡‰¥¸Zp—5ùÆÕ„é	‡Ty¦†7-NjÕ$ê¸M×¡f©ß’âÆ	….üÜ…öX¦]ë2·jÉ–®MÙý„d	É®)¯³h(K³)k¶tÐ*h,'V³°–Ø¬•J{óý^PH@h|x]Û:XÓ lrZ,=Q,NäËí²K¬g4WøV2ÑÓ¬iãam[9s›í|ìD3¶áž"y6ÛÑ×ûÄ	kL‘Î+`µ ÏÚ‡·¡µëOx3lÜ¾ÞÙÑ7Ë;âÄvr`gH–ÿ]Æ?Œ6D¹Œö:˜®­†¤k©†åq~¸°ÀR¥Vœ´êÒl›ŒÔk“sçè4.!mª6õüÒðüsIhæ-rþ¹ƒ5u\[d­Ýy¢™ÉÈ£«Q[ªY,ßQd¥:¥óG·`5Ñ ['Ò-Lh5+|ŸÐš!¬…¨æµ5éŒ„5ô”g©ŠæÚ/+íé¸yÆ5µ€0ÃqËƒá8+@s]°iŒ-yXVüŒx$÷2æ7‹H:\£ô¤¥â9ô†`ˆ÷ŠePz¬ë_šÃR²Ñ
Ek[fÒ_Ú	È£ýÀ£ƒKßIY“_Åk¦½lº”èqÌûy8ë/cy’#XóÉŒ˜)½˜§ÈÇG¢DÜ¼â–:Ø’·
W£zZSoVS8¬jm/¬9¹,<0K¸d°MgRÞ}Ê#SÕõ•úB·;­¿¶?Ú•½å)2€ÌÚ
­ »B—GãPBÇuˆãŽî<ª1à¨Ñ™˜AO	DµPWc¸-¯yb#ì	äø)½1èkE­\ûMZãZ9J0 ù5o@ˆGµ^2<ô¤9:×ÏerNŽþ–‘™|üàë?ÿb}ýëÏ•÷öb§5ízaíÖ*ªÚÓØúƒ_«¿Úúê_×¬XYÕ$­€Òö†ÏÑ…9-#ç¬±‰"\EèXWÌÖ\Â'Æ —¼êËd“ié¡øØK1jè9<øWg³X$÷dy@º~6™±6Ø£i¯WBØúÉò%@kjÃÐUÌòt7þÛ 59yŒ(œÆêÂðÌ±ZÐ^-„µŠ;'u±b‰úRÒLá*òê´So‰©JÝ…ùa– JúÃÎbÐi,ùçIßëémã÷æßç–²!~fD¹CÎÐÄºHÓ6©‰5~5‹ÅRÿ¡K?™Eêó˜‚^­2B¼c½ñlbrbð*¿ù—h²†+Ii-O¦(þÀZYKbuT´Áù~xÓÉ ¸!^ž„Ñò“ï£¯õW-|óùèÔÿD=Ýé/òì
ÎùŠ«fyùp'H6”¸zõ·SZÅ¶ä[g÷IÏ[ìæ×u×KúzJ:*õqÔUªå„Av>™XÞxwXÛ ’ØU³¦©GâÚ©‡o2éƒ& 'NõuhvayZŽX»ÒN‚ák‚ÎØß¼¼ÓwÚôzV#H„Ìf½e¿ÉÙŠ¹ÿú/û±ûñÓÂZº&Ž‰Àk¬	­`‡€OˆµmÌAaRÖL{üƒÕdŒœSd§%–Pë3”ÔHyjI'ÇÅ€µ«×ø·Ö0ÿøw×˜$ÊAÅ,nueŠ!ŸQ†ãéS­­Öjcª;6vü7G µS}$º'Dkß^Å‘ñ™>‡\>@5>¨Xûõ7«÷ÅÌÑtQ°VfÅM°Ö¤”Í7ŸÅF¢ª¹`’u%Ív•8)Ý£Ä.ˆÇ—6qN£Ášå@Î><üU7]«é»3áX[¿¸€eA™€ùÉZ™¨É‚’×ŠŠ*ò,±4WæY[Í×rMsøÐÄÈŒ)+~ÕªŽÅñd®TÍ|á5¥â/RÕz¥rO†™Ï”©oHé2Ÿ“|Õ¬)Ÿ„òf02«]WÅ5’ýV¿¥Êj^kƒ¥”w¶Ä®îÈÜ	g.üíÝ¢-J×Æµ Z“¼šÖ:k„Ã²ÀúQwq'<Žhb›Žy]í¥l¶÷ŒÒKp„œ½àÚåÐ—Ë³Úm´µÛ>ÙÜdAôú‡›±¾'²ÙØÌ8UË’¶rÏF*š·Kqïª¹öóÁú„ŠÞõË8Î…1>95U?þýçÏÁX`miŽ©Ar ­ï]€j„ÀÍy÷³¡XÍ°m¯~ Mþ"
¹÷[9Û
Ì¶p`-nŒd¸$ÉjM[¡ÿ·j«
]™ÆÖGèË?ìíCTô¡¶³ÜØ„Ž‘¾üŒCz}ç¿ï;acó(ÏÆVS­×eíóªþR>œ°ikÜ¹Ù@ÒvÜùÿs|dä²"áNI¾#œù?,X‘Ù·tm)º¶ºI\ÛÚZë²Þb[ðï_ýÚÑÚ«ÃNJ}Cûz	]Îj¹|:¢Dm&JùPßënGM¤¹Çê!|=(ãJ$«˜e«5áPã*ëG-zµ=K'8ä¸³u5ÐÈÃÚ|³ç«ÖH÷¾ÀÍkf>åQoxÚžÎ›¤æiMã8‡œf Ü‹¸\Êc-ÉPÑó"«ÅC'÷Fz /f¡³ŽÉ^HÔ§ÜNj¡þLNC©q®U–¬OP*1ÃJ¤Ñ3xŒõ*ãr8É9s_Õì¥¤G-òhÁZu-CI2¬Ý¿ÿÅ­èÓ–öfñeË÷[ rúÑ­ÇÿúÝ_aµ•õõƒ,$¾.¢£ê>Àt€¬"™³Ç‘ÄÌ-E±Ø ©Lc¯Q7‹tD´ŠÊšÓœšÙªQc”?],é`f´VNÅn^KÿG3ë79Î(Ïááh†”GÚbkâãÆ/p±Ckñm:÷š«fÙ¾³¸²ÕAgi§e6£bœ©V9+DÒ‹ISûP\rèM‘Ÿ¡b]«Ù\1"g.#ïÍ»7{³RÍêã%L"ûéøö H¾Í2Z9*Y2+T$¦U•šOœ±§Ø´TŠ³êIÖ{ý¼è`àÝ\bµÇ,¬AëÊyN3}ó¾7XUž?[X«ñÓÀ]k¢P­Pÿ6Hj¦ª.~öYýÜWŸ-Þ«XL±PGŠ` ­]½Ìðñ‰ÎL´/AñZ‚”{ëPž¬¹žíIW°œâ?›9ÌÂ!M&
­I]‹ñÁŠ;ˆÕŠs8ÜØÜ|×£ÚXÛ^$¼i¥ð¢µŽØ‰ÏÞ<­Ñ;€«¸×üe£×Ejó³¯^ª¬lw¼Ø[›ˆËƒÌÕ÷Íñoe?r?öã'vîÿ@yÞH™¨.9in#6¥%s¦¦%4ÿ9ÈäJ¬s XË¬uöålp$ÇµÒ²‰ÄÕ Óž°yiÉ°¶¨é,¹ ÆpÌË²ò”eS¹¬¾¬ãgUI§¿Ùz}rb¬Î{ì£“¿ù’°3}2kWÉE¤®è€“8Xû¿Ô¬çæ˜ŠÌ}¤•Ð*·ì+e!ÁLSÐÐB)‰ÝªÄ6X+ò8Ê•)Zc‡²í³ç>¬éóâ/2{a?êLî|{Áw§‚µÿsñéwxýþCó“´ˆsãÌ¶ÅF‘Y‰ùµ@ô…&peWÎ-Õ
´Lc‹kŠ½¬É&Ä¦9&0+Ñqõj’à¬º‡p¾y+ä´j…34]SO+m4aYž”%¢¹ä%ù‹06t­e¶ÜÚ l¼" s9sôÉ
“w­aÉšís´6kºólŽ6>òkj}.e'ÝžƒE-Ñ‘-ã°ÆØ…‡²Ý9ûòØß„f¯F¼Ö$®=!2q# 5+°Ro5Zs¸&em³/±üîõ'½±hïFb(‘’¨¤¹Hæc«0×=#uZãËHKIKTCUKÛ·]3|GÆU&äù©±©çß?Ÿw†,0ÚûìžŸ¹øÏÚ8ÍqÁZi™ËAäê*àFÈrjjéâÂÁH¼¥Þ ÙW@?l î`Í!‡¼ìx©ÌÜúí¦Îìd9?
ü Ì>Q(µqFEcÓ#›ýžJ†¼F µw——¤5ywœòÑÉÈë•ä!KŠ4Hq[{ˆ^ÏÉ{AÝ¬W™;3Ì;EoŸ™–‘éÖ|>XÖØÜ¯QÂw¦ˆ[nMxú5°öú ×ÄjqÕkk†Q;…-ƒjj’ÖÚ.lcc_‚’šAWëb/»6\õ¼ßUõf—ÇÕVI
›Nyñ$Ûõ¡ã/5“õžå¬Ì5ð´3ê¬šC:Fß CñœB_{à°¯ÁÀém|8#´`&Aö,×¬ø¶íú¨›£5;®hW¬™e¡ÎdTà£®ÒYga¦z6½H¤ö©†véh)‘º–zÖI’¤Î\eÍBMóHiSª$oÆ¡µÅ^:½q'ºø…JÖ<©íQÖÔ§ƒ.kß=]™ÞØ˜>zðé§£+ˆi++¯B4?hÇË¼úeßïvSÝì	€¥q¶R4J Z “°ÖVT‘Y 6r¾TÖ¤ÑHGŠùÖû¬ô(ÚÚÕêÀä¸²:ˆêÇœ¤Ù¸2ƒrjƒƒ›H]ìà5žÄX<±u!|v,›˜ð’¬›lìˆ0.8ÃLß˜kÓVji¾,>m­¦~8ñ3Už†ÁÀÊãÐ¡¿þ¬ðÉNkž°—‹Ëé¤#Äñ$ùõ×€5fE“üTtY‚ý0”UšnÍfÃTÁ²õ\'
ƒ¥n:´r“–Ù'³\.N,0”ëS¹ƒµC$Ç¤Ó%êJØXŽ¿?^*å¬UVÆ/^ÌOýûßšõ8Ê“…kŠ¿Ö7vò›Ö{u–$Ä!é¢r¶Ñr3K¹‹¡Œ±LãR"S›_’Á€-ÅüôhcSÕÏöI}»?kojãU69—õv²ˆøöM3f™Ü×ìNë½Öò›å;/UÖŒÖfwwÅ=FLPShu±_´¶ûñÓ;÷“oUž€ÕF•TÓÒ’±¥©	r¤)QKÈ¿ŸvT4ÄÖõ³÷étJÎý”€yüñ°F"±DX´ªÛ‹ÆýæÜ/3Èh&Lïo­áúŸM“‘_“‰GX£§Ùñs©§UÛ–ûE½^&N~yäÈ)P­¯7¡®Ôàô%ÖÈT£nŒVgŸÝÿT¬öÇ=][sš‹‘¬­T
ÖJî»ˆ°´ps°Ÿ¨Ki™q›±õW#!²ØÕ“RÙÞ—ßÕj'N\¾)X{ç-Ä¡r6ùN	˜¥ž]º¤…À	4¹v[E­±tZ‘S¿5Xc&3uC›
·¸íØ	¢³irD"˜ë…mÊ›3vJ¦þR(ì²Öõn™¥qÓh|È&©3ìò½!«˜ÿŸ^BVâ¡±J©>ãSîŒ–ò-+ÒÕt=f€VÝMlkvïÿùØ¡iC`¥áY›Å¸6”oE,$2!­/‘¨O¸W{µÝÕÓìz¶Ú“÷a‡CXÓ‡o;íËƒ§9BYæìg³O°ßºñí·ÐÚe[V»bS²¦Ø˜ž^¾~=!ŒTjpªs('Ð9ˆtX&dPaÎT-™‘jØhyš‚Ôš“[ZÎŸ~^¬¶]§öýûÜOM=<û]Á2äž¸ˆ	dÐƒmHó± ¹-Þ9°´Ý‹m¥GùITkB†ªò7™aÂŠËªFf¦«y1-TÖvš@VÃ½Ó»GTñ¶íbw3ºT7‰@nãÕe_ÂÂƒ`íÌÏ¤‚A^úôú\™ëŒc‚šaðjêU¡¬Hç©°[»éíÛÀäÖV7—‚[ÞN¥%`­	æ¬ÝéÚ9Óµ®} ×¦µ£O¼FY#\¦äwKZÞè1V3¸*–'5×ÑÚÑwª 5›=é3à¤®uy[õ _6;4Ï¬Y§ú§Š‰Ð	­é;.zaMùŽÖlx…ëfäÙŒ`×Iæ÷g^ Î´ŸãÛ°fbßa–þ
z¤3ñÕØÚNèIpÞ1^àiãÙÚ	rL“®¶kGC™Ív¸EÎ:“+¹sdqMd
XIIÂPF1&ÄðQ]i”%#kÒÔ’b42` Å¤S:rçÁ±éÅ§w¥jìíˆ-X{{Ö>¿Ozþ£é•èÊêŠ“¢¯†5Óûl”É`âÖ§ñ&O~4ªAFéŽD=3ª¡ÒeZÏ§X£é'ŠèrCZÆ¸ˆjJKå@ýØÙÑžtöxºL ÔEÉO‹òì†Úœê)ÛªG ëŠÅz”kœ 	ÁZZØ-×ö[ñ˜a™D]9Ï~×(FcÎªå‡«ÕîéJQü¤ºg:0ß ~IÇ«Ão%<”±ú=‹”xdw*2ÕÛz;ò>h¶H „ãrµª_QTºr©¹-îIþùì n"*«Žó-Æ­ú›Ýd<Ê_¹Ü©ä ì°„çï½7?XkÀe]É2KŽšÃ˜Û!F‹î¨XcÕ7N”ùR«ƒùÁÂï¯mÖ¸~ ÿôsîÌû×0ðµÇcŒ¸–²z4Z`Ej(¬é?¸Y9¥< ßcC’Þi)×|‚¥Jýû6>÷urÏž9XSƒ7Ol´à€ÐñáÃ«7®<;ÑÙ— T±ö¢y–½.–/|•[~©²öÄ®ÕúRÖˆ Ö„jŠH„áu5¶ûm±÷c?~bç~ò¯ÖÖðFÖŸyWÉÏÃÉ&‚¶;Ìw)ÕætvôÊþ®O,G™­5Ñ>ÉTÈl6P2·­E…ÙÐÄË/ÂÚ§÷W”)bžJò3Ö¨¿XR¦kÇŽ§(jT*¥^&;éðÙ‰	&©úØo>ÆZ$E±Zï)Ö{`÷|óøøôÓÅU9Œü÷Ö×˜™	I>$ÄÅKL‚MdË—”ÂÏ
[‰0l‘þtè%jÅñÁ‡{ÊÕ"S¬Vk'm±‘Â<÷ä—t­Ñ›~ØWÕÞ¾þÎ…Ï¿0Ùð«Yûî‡õ¹2stÝ„é//¼ÀHe1Ï`t+—‘Ì3É,ìÈÊüµžèÒTì:ÉÍœ¶¤)nchÞðž NÝƒ-À³ªM¿˜ò55Ôm˜yÒY”(/‹üµ{R®.+ßëöç¦¯‰B¼vö;f³*5m<·Ù–Éy>ä4§²Š5fÖ`×¡õæ<Ä®8é2ôR?5Q?m3Ü¶‘ˆ!YÄu
ÐØ±]á[/ÂšvCX›%µäÈ•Û?þHÿÑgW¾½a”ÆÆ³š`ÍhíúÆÆæõY5ƒå(‚½H®£#—ì°~OkCI¥Ö0e»ˆð]š¢6^£ò×Äjå2í!TÈ']í°†ÃíÑÎãÉviÎKk&¨íLŠ¼C'ldRÕ‚‹«‹xBi¿9ýO¯uÅ›©E?B.4îûbÆ[
H0R²Q¨¶ÙáÎ…ÄÿíœWÈŒY‰h9a˜_Ç ÖƒÊˆ®¬Ác¢5YÎ™÷)Á„®Y_0pôOˆ!;³H¯p	Ïs8XíÞê&¸´¶¥-Èî‘¢W³µn–m€µn„¶µÓÓˆƒÿþÇ×eA’ù÷?lÉUƒ?Sþ27ðÃ÷nA ,¬„	eè|*¡ãxËÚl@È¼6¢|gZMÕ™j£ŠQç!	—¹„IËmlÚ«q¾1kÆ`Ž}FæÎ†j¡Ù‰/WchPfG˜i¿ŽêÎWÇq0xÇMS®´È)¼¨7X“XÆž…å@ZpÄÏÃš»ê™:äµ5…Oƒ$x”7òÁh$svT"D†pË\Ñ³£Ì5Î?Äµ›–¹\ä}ø$£cÌ\¢5›—¢QAÙÊòýé¢szcyúÖçwï¾kzÆ×Ä»p-ô±Ž…,­ˆÓ¸E{…WÌ˜q_”µ‹s¢ZÆJÓrÛþi@ŠlÈª]ÍÏÊ~n*g…	’¤ÉÅ(Q&%’,C~ÐLZik8zî\£+™øÖä5«ÿ§¬YdåV"ô›,×){ƒvµ§L‘FkºëaÍ)jâ5öëaÃ Njªx±£G–T(&ß¢25·¤@BU5¡4p8®äiŸ¦\ÈÁñù÷>¡ ³_Y‘ª6=d2xK}ù“4´f©® X­i¿µÜQJ2vë—HzJ|A›TgJv`.î!Û†æ”B^6‘ÃXsõÏÿÛ{ó– 'v+rµ\M°3Qƒ)L=;YêB¬Tƒd£Ïá/¢pÂÚÛªX~S¥—­-¶®g°ðïŒžºqX»Ù—”!õ5—;F_ºÏzV‹Q­fîØQçy›5w—w6¾Û©Ži„5k
	j7ùg>”§,½ƒ£'?Öú:(Óß•ôý'am3ÖùÙ…]°fÖýºOô¾¨­…Ê÷ŽÕ|ì·ÅÞýø©û§jk+éZ–ª eoÅ˜a²¤(»O›«[3ãc›‡za2á'oÚXR} ;cLP¼@*!­I”†S¢FrþØ]²¦†÷cQ›‰kPŒþÀ)Hvœ(OLœ;§þ‰±QË,‹àîŸ5ßþ|©–Í}Ä“¬OŒž:•8ò±ÁšpKêgo›{>Iúå7ßü’’µë‹G{Úë¸3…(£QhV¡¡‹†yŸ~s1XcÖ°ú,æ#²Ûz/õºr)8°h”ó•BæTïy?É'~HÜdíLk¡
¬]ûæñã»wïþðÍÓÕõÕµt5b:iŒt+Õ%??L±3jZÕ>@M-Š	ÑšK7²Úr:Ö\²’ÈM'»3ÁJ'Ã¦ëÈvH^„Ë«ºxÇø~Ì™Ü]*_“—e†i<XìgáQÓp!L´lJÍ”=IàY}Il/ª¹ýàØ¼‰ha°øî3«Õ
6ª¹ëõÚKÃãQb¬Å<¬Ù†`?à0ö}„&>s¶‘{b¯žæÂÑ‘¸òãío_1÷­Ë=«)|ÑÚ;ÀÚ;’-9$]m³SŸZ@8AÚÊd˜™ãÖV³Y¾3¯­ªÃÔt‘ŸKÁ5ý²æU¯æÜúÏ“âO\ssÚa «™ˆ Ekb5ë´Æøn#Ú}nV½¶H$kSSÜ™^k9„¯ˆšj'«úCßbÖ*Í¸!õ{XóèæŽë–›¬Ñš^ïÐUH»~Î©”­ù7¶ø<2ˆvfòçoþŒæcŽÖ$?yÀšÊÐNËÄ5(LSg¶C<	7 “Oá‚×r‰–jDÝœCGÌdŠ¿e¨áº9wëüÖÑµ®µéG‚5Zf¯>øó_#¬ý¿­r‹rhÌßkUJ$cHvqÕ¢RYçlv;aüªÊ,s†©äjø+gŸ/èº´	·´ÐÒËø ñHšìÖZÞ§ßð0ø
ì˜ÂN„mß»#„»g?`7öt–‘ƒµ36æ t}±šc/FÁÏn„ðâšWÔ¼¯£ºyE­M±=ð ¦hcÈ‘ÖÜØœÏ‘ä–aXv#Þ÷bZ[e’™ŒÜ mm0H6töB(‚¡Þ~nÞ’ÜAfš½IÓW-©ÄÅa*Õ–ù‹ý…²ÏnêrøeYê³öXÓeŸeÂÙë#j¥KDFþ'¦ ºÒ2‰¬e²cõZH“Ï(SÂ2åÉ31ÕJfÌšÝR£½(ùÌRë¶f	ÀÉX MóÔÀ|³Èé49(üTÚ»PÖ&Že‹ö£W ‡ØÛî–²êÞÌ5aåšÁš–wÂZ•»™ªDk¦®ÁW –ü§ŠÌ‹U(¯Q+Œ3‰Äa3Ž7ðõ˜¿wožgpà_ÿ•´ÈíÖÓýPEfÊ™T¡—ì6Rl–Ô]Mè[ñxžG2*ÉË™Bpyø›×±QÆªs‘VwõjkøÒ{—òõ"?dÉ
Rj[UÙ˜Jš†%j´”+³Ç
LMd½L-Þ´yá-`ÍÑš˜ÉZlJW3aÍ¹BÎþür"—Àé0S °Ak&™%“fPŠ1ZL nÑÙHzVã7S¸f³Ý*djhÙXÍÓÚ‹é¸|Â‡¬!è·óæÐ	kš¬\GPo•³øg•5ò./ð}
ÖvÓZp;<Ûëa-¤5aš×´ŸŽï·ÅÞýø©ýE¦¦ÖVÖ2+,öè‰<·2@i'ÍYäH‚|dû	.@ò®ÅWDY“`-%dK2›aÁû¼÷„Ô4ašX-´	aí›Ï®‘é¬†tÁšn÷;Wíèj˜õcÞIÍ¹öTu>)/r>?—%u³3!uë?<«	ÖÞþðö[¬bZ£ÉÚã£*€`úbl#e¥¼;Ú¡F)h®Fy4c˜DH¢lûJ[5ÉþÂ—Krþ½T`‘è?ÖÛ›û¬¬‘éaíÆ3&v×2àñúúÝ»ôY{ºT+1_rÉQ2ˆ‘U¾V»§ÂJAÓß}	²›ÄuÁ­sv	Xmrï;(ÉMß„5|!…g~µ™Ô\ô‚Ê ^—hêÁ¶bï42µ%­V¸Þª–œ# »¢6){tU-Žu°	a¨¨f-&¼—ÀZÕ›»žg¼pÎ|°ë	Õkeµ	¿—O‹ÒÊ˜xæî4páíø´ym-èæƒhÏCZhÓÏøX©mçq·™…ÇpÕøw*$µËÛn8Œ¼£kJE9òd™É2§öðV«™ê`-–Âo'µ£l ´,‡]	"¢:²b2­Æ5çœ™/«ëàù©‰Éyœa+‚$Fâãù)8ŒXóãÅï5rûwt5²ClPÓ|,¬>Z•Á±4·´TF=­HÆµ:DÁšŒÞªÎ’­b‡Ð{ûpèÞÏ9wœ-,Å/îiv¾Ù]±Âµfóa$†ˆVÕÉª~yQD¥¦~U‘ÒøÅè‘Ç˜j“C‚¯æÿë¿1C…‹©rŒ–´FÖ]r d%Kt,hP4shþüV·	j]`QœðDœá¼îÖ8¾uðÑ£ƒGé—¸-ýõw¯â5Dµ?ÿö»U×%ÚÔn|N¹
ìZ’ÎÌŸ_@Ã»ŽÓv³ ª	zPÐ”Š#-<^®8íŒõ©’ß‡0Í¥2²Ëfƒ#«rãÏ·zô½¸ tÂkÅ~æýÈ1F¡øf>!A÷c…4g×Ï—ÈÈYÌp«kdWxZ³'ïÊŒdC¸ŒÇ¶€Ö”T©‘6Öì¼ÁGøHó˜HºGÑ®M$*å	¼Q!µÜFsJvÔerTZÇ’9Ì¬÷öÆ;)«‘$UDšT’AÁÐ€Ü±tdÛØào¶gµW´YÓßôûømÙx$ÛGïñšpJŸ¨,–ÑÇ4"Ý£«ÀÎkF]E*Øji=BÊ·Ý`ÆaV(OæÉOÄB.éLMÅl_ _©ÄZ¯=šmç9]Z‹”¶–ÍÀk£‚5À®Vo/ê'jýÚÕ†éš	d¬?÷ÖÎÁ’ -ØáÂZ•€·*šúõWB“‘ªÉ<ÖPåmu˜åd62Å[ViÉ$&GÈùa±]å9ÞZ£q°v¨Jç5*ÐLVc¢²©¸Tî6i­Â+S*ÐBÏnÄÙï‡Ëá|Åò*sÍ8óé`IN—¥fµ\”OS…*ëJüÐ{—kõ´`­1ÙovÈ•OþíÒpUÜ[ì’oÖ`1{üøqþÎÖúÇ'Çòã“÷7#§ëÐØtÃ÷Ä&!ñ/‹Ö®2Í_yÒ™é{òæÃÞœE’Ÿ~Ò’ÈÿºE%³ÅLãÕÖzmZùZ.ÇÈ:dsÓd’ƒ‰w}„5kaÜ|xâ¦pÑ”5Ög{‡LTë¬ù4“ÖˆÍk×¾š¾Â3[`ÜÏÑìÇC~¡”›ÓÕØ„Uk!ªéð~ÑÚ~ìÇOksÀÚÊhj-’1aŸÀm+†$`ÖÇàš< Ý|$8×Éä!øk~ŒHb#¨½î8Á‚ÓÖÜ&„5ße4ÈÍLPízb3I\KË–—øEšÕÔbÚåd¦ê,<&õu)©dàd+ÿÎsµh,!T³&k!¬ýéÚµ(P·~ýébZË²Þ´×ÊyÍ	”3£¬±G±šû¥*YÍZ~‚;Èµ¢0Ös¸É’vØÌ-åá÷“	ìE>rÝ°a5òÊ±‚$ÿòö…_°è~øáñýÅ¹J«ŒdwË©M¥¶Ú`©`YÔ(’¤ÅQ£Ä\ÂDã8©¢ë2K™²©ÒŠWØU±‹[ —¶¦L(ÈcA½†ƒÒ­éqËý¹9ö:CîcS^X³)º"3­ó‹áJZ]ÕŽ¡šñ¢HÍ…j³Ò É0.y·~ýSh>`7Og{b0ˆ¼ÂVýÅh›jÙEÎÌ\$TÖ<Áép˜éu0ÛÕÆ';†]¯Ã¬È#¬_#ô'é{ò£õµ‘ÁˆU˜s#h¹f¨öŒyœ4ÈD7ÈÍÎ¾ÍÍÍD26p2€5µ[s´–BP³u}bˆÉ<I³¨Ð2r^—)å¼RdËüTæ¹ˆAðÁ¡ƒ=T×µçç'|î£hMNþÜˆÕ[&¤aõ(:sk‹ºcôGˆmu»ÕUr´Q[8xt¥´Æ`UíiçQÉ­Œ´¶“É¬ù&×úð'ÃZµª!˜üöÙ0 `,¬&u!8€{Uå KUK€!û8Š±FZ<Ä]g§¡z!í97wHÔ¨i³Ws|ÆV)”ð2XsW“F‚#–úQhˆõˆ‰¤F›ì%z±¤Èn)kG×ÖŽX³Ê­¥õ¿ýùŠ Ñô¡]Új­.µ{{î8µñõaÖòlÛ 1ÖüLÜc¤$Üâr•»f>®nMÙòóæ’Á£3÷oò&¬˜0eUc†JPXµê:žÈÚk±uÎ’×´!¼²ÆÉÖŒÉ\î´<ÚaÂÉq:Àšoƒ‹šyc`â T•f†vDÂOp–#lÏÇ€Ø¸'„d!¬ék®Ï›Àc$l®¦sì‰*\{ÖR e©(^cvŠF-#)X“í¡@2‘å’„ªH#¨oI-"Ú‰i“CœTÒš›+ê˜^ÆÔbÃk{Ì ÍUýñÖ§7©fí¥¨öznã;+×€­&"i¡Z©TÓQkdU¬+Ù¿­ä
¨ÀZEÅÕLŠ]ét£RNSy‰Ôô4*©[ê€ ækQ ï*ê´ŒÖŠEÐ£þžL¶ÜâÇ
íöØËt‰Ù¬¹É† ÇP™¸ñÀdDkaÓm[M¥_¸¹âŒÁšÞþMÎT
§è×MæL¼Uè?Ä[7—C‰9a©=N?3J¾Q˜§µ™‘)i­ ‘5ûÕöö”^V.<=ŽW¦:¬™ÿŸ¾P–?ŠœTû­¬w¼ÀD:Ü¬‘Rluœ¥Åá÷æ×ùIµ@Þ*¬ÖRË·yÒ15éçqª,K|<6VW³¶r6=™ÇÎìþ…·.\pyW(¦ dC¥«?¿|xÖì>ðÑ¿Ü—ÂêpŸjÕ|³5Ô¡6c=Û“Îã:æ¬cÈmÜ)U^¤–ò“š›bÞÅad/­ÙÆÉzJÒ½¹qÃZNh…¼oh¨/„4áëaíÓk_}u}wWlX-ôñè•µP[c+V#öFöc?þÿ)kKK+ÉÔZF
}2pŽ$ùƒ£6@ê °6ëXm–€Û˜ó:8ôµ“)‰ü9J¤·Â¥õJßeBoýÕÂ,HŸ‰°qÑCÄ&¢Šù8‰¹Ä–6·¼vMkçÆ&±->>66vî8Ód¶dßŠÆ:O!¬M
¥˜›}þŸ$¬IZ#qamua©§\#}_ºX9¯,
ò&494ô÷¿«§1ŸXvDIL"nR'k+‡ìãõt¬òô1ž$’œÇ÷x•„vyA¾&óÖ[ø‹|q÷—Ä¯ýÍÂÂâB¡D¾Û½JË² +‚µþA`MŠK†|)qkÊÝÖà$)ù
[lÏÈ^¡I¸4ª&leþ"g3€BF’êŽ¥Ü15žb¨HhOWV-¶v‰ivyÖ :Ã$+WÈ–5v“ÒÂg°ËÃ&£*“¿­­7+MÃ³ ¶Ö}”W÷’ZžÐŒÖìì‚ýrV3H#@Åd=cÞ!JÑ–ðØ&p‹ÕBið•iº°Ö·¹=*l>ü>É%³?>I<Ñ¼H8M-Ì‚d)€ß``­wùÃÛO:“››êZ1”°†j*U“´lÞ<"8W±–­§bC¿ÊÅ4ÙaHªr”<¡.àø»éÅ•„e=ñÁh?R,ÐRÏ}:«wÀ&÷~k`y«wð¼ø½)kj¶¶ðÁÂBšú¬ÝÁµŸ;XíW˜µÊù©£5Ð©ÚPþ+À  %iÑv—¥qxäN»‡Öx„=Ï‘{Go	F†Y€VS‹|èi•n0JÑ„³f`ø‹
4“ÖäV*ø2‘]±šx×0=íP€~<Ä¶<Iv#z=žMèÀñY¤X6Mšæ³Ë³Ñ]ž®-muuEXÃrmM"Y;°ºþø»ïþö»ßýý·¿eóõßþ°þtiK¬Ñn}6\‰Lí³¸Š4ö[gV¬Áˆz¬N:ûsVMD[–SÜR»kË3«VØ†‰ÖÔWMzwCT´.IHçõ©Ž„hMHèVk„aÞû1„5C4'ûâ[`õH8XsåjÞ·ßd7÷)Ek¦¨¶F¢NÂ·WÓ+Ú8¬UÛ¶~´§3bK8H–àhã4²;ô|Fð“Ð¸M k,žÍd™]Ìa$“TÝ¼Š%±!EY’!–ÚaeÊö É2bºYAØTÓ”5\“þ5ícÙ`mÃŒû´½Âiœ~ôô›Ž¨lE^k;ÏûZºQ"®rM¦Ä„£µôØ¤0E?¦A&ÀöŒ¾9
×Ì£×ÚOTôƒ+–‰FÈÈdkµ±Iþh–í‡ëLúÕµ.+ÓN¦åX!b.ÒC‰e&†á"¢j›…Í…áºëñÞ"üy)9Ú.Z…´"
Ù@ª•´R}qÒQá ìƒµâ†tV•&…»<U[Ó´S¿Þ 7I½–çBeCýÒ‚y5Ò(ésMž[‡¿ZZìhÈx¤ÖÅIu9s“V4Êµ®Zåže-›n*âÂ&¿feH°A§ù~ò«¬,’¬‘Ÿ¿'{áŠ‘M‰Yl|üýIúæ¨«(é.Ç²ü´Œ”‘#!ää;XÚßb.¼{aíí®%¶ë±ösÊ90›"†»:›½<;$K[`“‰ºbêîÙƒÂ¼»u*ÀNŒß@×ÄÅÍi4q·žkhµæPíEiÍÝ=$’ßÄOf%­%ˆ¾N¬I<™å†lðO+k¾BA|E£5þ%öBZdì#Â(»SZÛwÙýøIã{`m%²ÂGŠÈ1ïÉR_íˆÙQŠI·„ä5ô5PM¶G®ùÖÈ	Æ9õÂæiøï#¬9Zs¬–¬…þ"×îßaædò
ÒEl.©“yX;†écš9û•¡OÂ:Gü‚Æ £gkõÑ“â%³ø²f-±ù§¼•·Ö®ýãÓÇwy¿¶ˆíä¯ÔV¬q‰\Ò4(XsK¾ŒóãšP¿
Öìbt`¨±–ÿzÚ
‚5.ªïÿèË#	§ª(^•¤wãÙÛ·ùæ¾úýgwïòíÉr¦æÀ$µF™*¥\V`URYn@ÓH››)¬fê´¾q¶˜^¬|ßªËF,Ñ‘©T-°­P ¨SÑÊ¥ƒµ¦,WÙ¶®l¥ªQS-ØjÙÊ6W÷¶Š©*œ×u °féŸfl@z(øf°fß­JÈjÜ4ôò
˜†DµªS×,æ††|„ö"«ƒ$"¶t‘dÈI2"'2aÞ#SÓØró±Ö:ÖÚa¬0XÓ6fÇñÿØ‹j¯f53#é½òìTçá+ß2Wû¸Œ‡¿`í™² oNOo"¬uô-÷v$]UZJE1hiêvÑaÝÕ†t½h¹W™Xöç•‰¦ñ°f²ïÖjPÃBZ­½Èb‰ssSsE­ž7X{îÔµ…>¸sk [XËï|`GW]Jä6Ü­k(mèjÓæJù¹RyéÀÁ¥¹­F©Þæ2ù„vL(#ÁgÜB6#üplUè©äØ÷##yÉ¿23pmF™Žd2š‰È°ë=T5jÔ¤½ÒLZÒ/&‚…ŠÕ >ž	ÅÔmFsM§EIWÓa›àhÎ ¬mun÷z !*™ì ù«
N°ï_:zààôÁnÆ®X×º¹ÅÉmËÅÒÑ•-Ã;Á ãô#‰p=¬ÒµÑ‘%$JôòÝ/º]æ²•è±ÁŸGE9Œ-sR%¨Ù‰Wxƒë;’ºÝÖ­“D6¸Mª|z}¯hQ9êÀ,Ö©y[HÛÚa?ôf!NZÍE,Á‘0Út(e[É´OÛÜßŒÑôTüP¼¬æ¡YôüÀÑã$5éká+=Á|ÑcÃ6Ò-<®Ai”Yf¾˜N|@ŽîIú¬E”éB’²Qwb6ŒÙÑªcìä ¯!:‹ª[vŽÃ¥oôN¿ûö­^£µ½Âš·ƒœ^Y9x+ÔÕ^k±ŒÅœ°¦'*Ts¡s‘L}…¬ÍIŒe9XeG#5Õšk2C˜(
%:FR‘†f±2ì¢è1¶åo$°Z+ãèL¡™¨hûäŒkJKÉ¤³¨“i9áñm¥´…žÆÐœ'ÄýfÐ4X7ì‚™"(
³7úiˆ,_j³¤ÂŸö¸-ÆXg5f*j
Æçç™iô4²¾W.–Qõbœ|€o~ªÊLµÄ·©þØµ2%Ý-þŒX4ÊüZÅBÉ5…c}éÿ±w6¿Q]éº¿º÷¯°Kþe˜Ø2Ž…Êˆ*¹„}KŽ¨T¬ÒÁÈUÇEÅ *ˆq”„Ë—Q€V’žÄîsuÏA‰ÐYÜ)FVÏZ-bùÐ§Q&LZ:bÐÓŒ#Ýßó¬½Ø6†{Ò“œ‰_Ê»ÖÞõ…¡ªÖþ­ç}Ÿ·ÑÛi–M›TÊz™Èø©õkãº´…OË”3”fg¦†LÁ…-ó¾þSÓ…‚-T WÊÓïOëŸÖ6þ:’äýGçÏŸÿËLâ×É‘ÁËG)­Á^¹ªµX÷â†½Í±}¹ÄÿÑ´¦KŽ×ð®`Áíb#ª3`w’c¡á„H?Î[Êl ªíTÖì×ïíw§n½'·“ÍÍ«ç67'öÝF3ƒ,"Û/‡5¼ûofºÏïðîO-Fö¤O’Œ$zrì:ŒìÆnü—µYÃ¿`2»ªÈqI¼’GÑ6r®åÔæºH&ª€g`Z†ôHðÆHI9‘™ß˜QÍÿ‰ÂZ
kÄÍûÙö¸ôÈUF´Æ7B¹üG
GÞŸÂuâc,ï<-±–«9½ÌUrcf5ÓÒÎV¾‚##°­É’ñËŸ¿|ôøÑ“?±(«® =ÀZ™(NqUépHãx0)‰ªôõmYPµOHzŠ2ŒG£ÏÅ¹“—ŽšXr¼PÖ~âDžb¹›žÝøÃŸþúäë¯)YÓéqK†r')Íò»0!3.B(ƒœ¯Ùæ«…°ÇëBuZÁÖôâ³=Kbl4eÊ¶»©\»€3µjÇ¥>ÖÀ±¡C±h­)Öm	¬)m‹#›G #)-PZOƒÙLB‹¼1uêÕ”72Á	 i«¡MÙl‹mû@›¯¸¶ÆÑ,RÚ6XC ÑòmuRÿˆ©Y«h)¬9ÜZHû}m‚ch!,-e{kqÎòá#)«)â¾DÐæŽ]‚ÈŽÂ¹Ÿ>çØ˜5)U Þ&¼FÅÚÇç7VÖŸ{RXéÊÝBËA‰h¨lÈkù3%gÙß—Í²É¹¼<Lyy¹jÛ²_í°•õ¨Ì¹ÜÐÜ¡³s|Qek?þø`¸1K6äÔÔÙ‹±ƒÄ§ß¹·76€0¹‹èxû‚Œü/>¾­ôÈ/;h‰}›VkI_lu`»\<{ùx…¢µËÇY’€ÑšVCÊµÄW$A5í	¢žf.ó@£qä4ï3‡¤Á6‰(ÆMvztAul:¿sê£¤%¼“æa\«YZèmíÌI¡Þi†xgXcÃkÍÛ­Ž'%Õ’«@*Ü*àTï':_K~rÞ–XÍÁ¾«¹’&aü<%@³w{ÏX´ê¥píeÏÓÕ;O_Â]›:{Áú<²“ØõãCÙ–ô„Ê1å#Œ¸Ä_A4„¸Fæch§¦Ï©ÖWÊa­„ß˜#Š3†µrÙ¦Aji¥©|Þ¬u¸è4A->Þµ–\!ÍdÑŽ?pb‰œ¦ûx,DÓÅ‘Ì’&.ñdbßøJãh*Ÿõ
±tGëjÁ’#†±´¶…µHkº)ÂÚvb¤ù.)©¥>]Î¦0¥….ey² e§«©$º­ÏÂZè*|d÷~PŒûY‚B6Á\‡'ŸlHB²¤ÊˆœqfY;T‘"±1”o¦øŒl¼UYsl¬EMG)þÿæ"z­ÈjŒ,ªi¢sÕ°Æ6¤=j¤¾0Ö™
`Y,1ì”þ¤5ìNÜÑá¤ý'5v«*V(ëŽ™¤<‹h¬À:P!7Zâ(>Ìa5bVSmP–9 ÖT®*£c$)õ¡b-Öô–k«ˆ™(‚7ã{ûËŠ”Ãê@£Þ¼WA+uµWÊH£·8[êe¢ã;Áïôâ²*Qš¼ÈC<€ß¡ék¢š©?N¿?LæGyCÊ¤¹jÿGÞª@lÖÃ”SôüÆEÓÂ‡”êÝŽ—€¹©©‹JYPó:dHºªÉ^>S-hÇ³P÷¦:„"çõFßäóo>¹ùq^ØÄ,|ù_áâÁÕÿùÏÿ¼4°ç»[§XËFV#X¨ÎöÙd°ƒ´Á=oN	ºí¼u3z;»ðpžåà€T52/SmÍ¯Y-fCê¸yëØÆ&½ÖÖÏÑñXã©]²(x…WÛÜ¶ÞžyþækÞý/„jëÉ©ÚÐÒPzç”Ö4{ùtµ]‡‘ÝØÿX» ¬MšÕkY¯ù¹`›œŒŒ½îº±aöC_r*$œ60±×­ ÝÂXc«Yr27`ó$“š­†;`íÚmª{<÷ÅÈQÒ†šì£²ÑäŠ‡±¤…Wg3£¸üc×Ð}né¡PçÀ&“L>îù~ŽñìÉßÿþG×¬1o5Ššôdå ©°\ìÃLÜ‰‘aÑ˜<D8F^öÕªÕ]­¦Jf%ÞË›kpðýÿ³Dk5½"%Ÿÿô¢‹sT¬=ûá‡g°Ú³ÛOµ@ÞbZPRþ4‹¨K–{pÍïWù~ðª&Mbdu¥Ê495r	IŒÒÄä«çµÅà–ÇCl£¬­Œ½çèl
SùlX|%bó¹•5ïñ×Iš0»Ú¬M3`•è-¹‘¡Ê™Ó´õy/9×NÊiËÂAZÜ3¶ETc´=ÆÛÚøÇ˜šjËÙÈç©óoÞ{­çõV‰m;­1J¢ûµ‡ìè…¯·ßàakŸÇNmþ{”ÖìÞ¬ÿà/$¬QÐ 4HjÐWºráÅhŠô5Ú•ÂjÁQ•Úq¹¦Ú	R³¶côð´Z'å9ÀlúÉÇæ†ò‹aŽJübexñÇáòìòòÙñ)z­áÏoZ£VM¹X šÀmí.B›YíîÚ dH47ˆMã¤5ÙAžX[yD;þ´Ž#$qVÀÀÿ\è^Ü:m­FsÕ£kÕB>¤odC)¹¥emÚˆØòöÐQqÓï“85ÀX<³ñÊådÁHÎ­í°ÁCœühÐà ìù•ÿÈæ´:BXskŠ4`ó×p‰ê¼§Ž…¤ïÚc$D 3Œ1…Wpà.b‹‘;/4ÖÔ 5z¤Žu(ß®¿¿¯ÓÒ¬¡t>ßê“Iy•„ç}-ìd	rspÕ¬¹´¾WóG|«6+QßCÈê¿Vêº ìx¤ÉÚË35~xým\FTLm7ƒ´¾fiÎa<‹ueI·5†Q.‹ÚWà³ÀNÑ-$‘íÄŸ¶ÂŽÒZB|ñx¾«¯õäf?Gt‰¶#1Ä-lY´+|¦15XOÙ†`5BŠ™õ5428eÒºGIÃ71‰Ð‚ïƒžÂâœÏ›Ûkš¶`¼0m¿
×ÞsìTÖÄÝýQTÓ&rß[akLûpfî~Ø¸0[›¾Òt¢°e¥Ö˜šfóþíà_~XeÁšVØ¾Èˆ k§\$ûž@ÿF°XgiT°ÖÓ2df}¡˜PÙ¤Ü^( ®apBe[”kvÔû•ˆ><VÖø:hêšhÉ›DLìnÍr©£¥ïÝ\¬ÔøÄ²X*Ñ•šê2Jš¡	°šªNÓS°Ê‘àM´ivd*Y/óîô[­Lp°·,Hì¡x\Ù”^ïh‚XE¬™”IPJþcƒ‘)&*[øË´¤ª’Ú‚ª×¦ó3J¶Ç‘eÜ•D•-Ü†IIUÙ”ÓØe®®|þ›óüelâ«>ÒZŒ+Ø®ºuý¥ƒ¼çäZ£\\#oP	e-¬erVÕ0Ñ»€È²ÕbÞ¨d¶ÂÌ+¬íp¡Ù|’JJÙùßb»¹¾y‰X_¿´Î$³wZS°„¾¥Tí—ÀÚÊk×^SÖRiÍ×éSR§íŒÑÕÝ¢µÝØ_³'ö…ÜIw„ÉåÄjºÈÌˆÚX6Ì}šßº‡T &(;7!KÈ“ê£ŸÍYXÒaEøò2¬½ðei]WpÔ63H‚ŽØÛ%EXówœê­”Nàî[X‚DHE³’î¼/Ó9ºgâáo»Dú#!r2¬¡|`òAKìkßÞøùKHíëŸo<Bäúk]-f<óAM(u¸ñÛŸ¾3ò–ªâ¹Áú¢\…ÊÊeòÒjð† §§<"óËCkµß<|±t5Èj)¬áHqO§ñ(?‘ä“þüèñ<MZšåLÇAÄiábEsmÃ§/ÊN)úìyÐi‡Á1Ù'P-¦ÆÄDÀS%7AoÖØ<§Ú£A»VÖš„&9®`*yæÁVœ¿òÔUîá9«o-&Ê7)lãh­%8-öW^÷”}!ƒ¢Vu[ì$’ën1’Q¤‰I÷˜Ã¹!NÚëÅqGÉ§@ar@^UDVKóñ#ªq$ÕÅ’Ý¨­Å<É7:ôÇáÖh[
ß6?gB<vl“¢µ+VÖ”[+\³¿Á­}|ïúŠ1ñà>-uvé#Â~Î°FíZÖdÉQÃZ!ŸØŠÏ)ä	cuÂ&©–¶X/R¡†!\Eû’ÖÊ³wîï¯JQû‘ºFXƒÐ°·|—!Ü†±`¶›ÝNìG°‡Œ±öÎÝµý—ÏÎ/u\6¬Uh’Ô$ÿµÙÔù³j¢`.«d!2jjŽèÂ($<† ­â=R›kÐúñ£©#£‡šÜÞ„XLkŒÙZmµ©79Dôœ³HÀ^°ZPÒØð\,×32²…^xW[i³–Ææ´-Pù˜¸ñ@“ðÇ#Âš%0aX¨½’>´úqí%kn$>¾­=}*ìpÖ#Öyj©=…¼FÁ‹7žâ²“ÓüzTë¢_DWÖ¥°æ¨ÉxÕJšXMV>ü×È²¦àÇô[¿‚•$¡³Xí¥`Æ~p;Ùr(îÛn„ð¯»^)ÌŠ–QÔ §_/ŒtÄ°SÁMQ{s‘“yN›ífÞõÝÂv¬9y‘Îb°“æB¦áÎ„!Ž¬Ô 'C&	seÕ&ÜF.ìà²ÚçÃHGœ.»V4'	-i3ƒ0
G2B´¹h„î²?!±‰·(kÐÜÝœ 7NXéÀf^Ûq7&‹¥)‘Ö8âFkŽ ´!z%ñª÷ÜxÙØà&¤)8Ô°‹?VºÎ”©ÿ*Ñ{Úv-Ìmy=OÙÑ	BkXKâÍ59©o›wÌkc‡ûa‘ØÑ:co°œ©Qí¬·JDûP$ÝÔ\ƒ¶<±ÇQI«¯ûÈx©_úÕ`±U®ò¹äK£¿¤þjF•õ§³S¿ÿÿë‹èí¯ôþfbcl? eýËã²Ri¹Ê“÷zCÇ›ú›ÈI)ŒY—ðRÓüù'—ôõ©	ÊîW|y6Ô¥ê…ÁÅññ*ó"¦"‹S³Ó3ã&\r#‡“B@fFbX«¯ÕÞNÑ«Ïo1×Ï+Éý	kö—r¼¸byM{¤Aê­ñÅ:	GnÅŽiŽw”/¼õ4ð[N¹‚óD–KÞ4£RÔÌjÜÈvàùÊ¾=w‘m×¢²i$Hƒ/6¯n—é¸„ÁÕæ±½Š®L4HvübZÖÎŸ8¿Ó2tÆfg‚Gî”Ö¼‰kiìÂÚnìÆ¯ÚfmùwY‡ühn–ÆØYF\ôÅ"á,zHñ@®×žuV3«©jÆR9@çòO‚µQÁ9‚A\[÷–øbGÉÚsºŒòæÐl¬Å]%y3¯2#SÀVQ”­5:‰z!KiÑÀÄþ"’·Î}§,È+Ö>çLú/Ä·OžÖHƒ|üôñ—ÝcMvcº¸Mi7F·z¾TÆž_vðšBsG9Á3 ÊÔÂ\$óÖ7s_¼8wîE(Qñ	rä_žÿæÑOþ@üùÂåifÓJ—å©ºx³Ž…ƒÓå"ÀÈ‚¡ÀPÉôVÃFÎœ1¬)BÙâ[€µÐ‘ÉÝŒj5ÂuB3§…	,(cOÉc‚3{ø»Õ°Yxóùb„µÍÞÄóvköLŽå6-vÈÑL¬úÖ¶@Z¼Žh–Âšé-Æð•5àM1½:[ô X1Ìd¬g#¬½®¬µ§ššƒëÜb{5ôm}½SOK#½%ÞzìSâ±«´_ÈaÄ¬–T ¬÷ÞbŸ\¿¾¬u(÷±¹;‹7IW.Ó½—jo{AÚù‘é;äA²àª ›ï¨XJ5EqPh†qY¥.±WW‹8„¥ÈñúñïÜ9+JCc¬mùHÖî'°ÙÂpÄmíø®"€Úm$·nkÇ+=/+¢µŠ¼ Ü½ÊÙZ¢OcD¢«Gèj‰¶æÿõâ2_¥‘ôÏŽïö~oX›·9wbHb¬r*¤â€÷lìé%5gSÖ_pš	ÏÊ°¦sÀyc"O¤—á˜…?þÎM“Û<4Ã‰¡"8…I-€“½ê—_½ì¡:›KÏ0AX#8 i¹­ÕùôqÀŸ‘`ÚÁ6•µ^¤Rž#Úy$…@ÜOŠù¡–Ny[-±Z³i“nwÿœÊ›ÈçþèÉ2ÂÇÌ^I*ZHQc?À±M[‹ùïÊ+ÇFoêØal…0 ’;‡KF†5"æ3: ˆÖü}„êè‡&1¢2çam;®òääÿÆˆ°t"	›˜þöõÀaÖ”lÁåhT”“ÿs¤Œv[u€(\qwl~\NzÆH–U…š²$Û;G9ÌƒP?”(ypeÅf+k© ñ&e1»{õÄ'|˜V»O¤§‚3ž/ÛCÜ¸#"¿uÞe¤›c-CÚC¤CN˜ÒÈp¾pQu©ŒædŸülÑ¬V¬°æGvŸS»ó0Y)¸¸ø_f«ó@&5²¿Ÿçô}òÄÀÙ‘ÑrÇ?#†j‘ßBa4ÄÛ¬ÁHcMË(|V¢Æß×°uýt¡:Ø¤j m„‰£ISÿjCEÉµyòìKXWÒmÊ~FóJ!„|Á8«X”PkaÂÕ6[eÛ¼õŸ­V¡)€C¨*¯)×q¸Á|Î¦ÓQìžLQ8Ó–f–a<"§¨6W% G 5Ãó®:¦x¦³ç3eTÖ†ë¥¾o¡åï¯¾r]]4a5Ã|ÆåÅU9Œ\±kjyvu"»wâàd»þ÷¬¬¹ˆÍõÉì© Ò˜Î–Ö¬_»°2RO†ÛC"ÉžƒÝk©²¦0ªÅ$H‚Zµ1Þ¨5~6?<† GdÓ.6¾d~Yt=ºqm%³Öø£ðh›²½EÞ«»#»±¿.¬­¾Ët8wxöð¿°ø˜Í’)X³’Æ¤‡Å#}¥‚‰è·¦©>7R™»i­S5l6°Å,i)jkÎ„äKn¬YXsr ¼VhóÊh4NZ•°FLfÙ¡JmšœgA+}¥<ùcÓj#0pjéÅÃ‰‰1'$Æ&kÄ=`íƒ¿ÜøÛ|Xí‡??»Ã‚¢`ÙNÙ'õ×>#ÁXéïœW«Öò.Ú±ŸéˆÀéÑ
\¥ƒ¬ÉòìIXmâ/©W[2%^Ù„ÕÐÕ>¸y—šµø¿øóáá’œ¿¨Î2¬Uf	<¯¢ü¤sf¦à¦<­pbZf Ä¡–‹ÉØ‹ÒšWî¸dA}¬õ¤AHù@t`TÏeíÂ×(>cÜäG‚§bµAVîkâÅ¤£,
–²æ©×‰µ{1ë‘«pV¾#--ŒâÎà¢÷ÜYíuXcvŽ´F8#8\g-Ñ²-…5ÅVXk¦)¬±ç«xÔ÷Oaý˜í-°ÆÖ	”Cë$³®ïYÁyëÖ-U˜WˆdÞäÈ=3úõõëçŸóYuämO(IJëÒg§¯¤36‘hmíŽƒ¿=ZèÌ»¼ôâaÊ8ê¥Š(­ºÐUÑ` yñòñÿ¸sA)g‹$Cº¶d5ÇÅ‹Â2‡=ü×6îÞFhS"$˜íö¶þkl¸ßå³——Ÿ–5b<üÏrééÃ -f?j3oY6¤6²5¥vþ\ùðNX¥ŒN:â;gË¾QØF`ý8okjW²(ÌÑÓS[k8‡‡¡8Øc4…ŠB¼æ¿)ùÑ¸7Â“àKØB7|Iü	5pMwªžv¸X-€ÓÙ8
µ@ãŠyÅðÁmàÄS±Ú;ì²Ã™­@„0­AJLÌðƒ´æóØ eq€ŽæArWƒ!›Cü[#pËÿ‡óVÕÓ‰ÿ”y,©Â&BVÖšljXí—€PnIÑ¦ÙOGˆa:û>D6óó'Þý‘Õâ~0\×ˆàÚÎ°îHÊ©¡„¯Ç×‰¶»¬ÅFi=<feNáGÄx«9|˜Hµ4Ü;€š¯µ×i;]SÀE´MbéR6¥9:2Ñ0iÐ›¥«–ý!Ç#ëLG‚©Š-{Ê‰´æÎ¡>GRÃéqÍÂZÔ3v(kè'ºÚW÷ŸXëZíŠÎ~¾$¸¶#r“o„µW²é˜É¸TbF¨ÛnHŠZ½Ô€+
@Õ<EXþ§è+‘Ï!TƒÉêÃŒ¢š„»xŒò3TÛ¡·•žE¬×‡AIŸ»p
K,]òÕ´Âþ/M`­ûæ5ô–æ¢*2‚=Ã#¯Mð¦l¦›¯iX£8­:ÂG¯·…´†^.{¡&°ÖQ©éo9^/ŸÆœ«QŸzð`á sÂÝîçõåBZË“Qëš®¸õR½Ñ!4‹ÉX«Ô[šrjr÷W—Ðrä²q­³/¨:AÎ]:¸PÅÐÙ~ºÃz$Aòô)ÞÅ*2 –tÜ\m ±Õ
¡4Ê&ìeê©Îä-çæ—¿Ç(ñûó²û°ó±hÆÆûîÖ{ßus†2±~u(ç…‚6²Œÿ\dÉ{W®¿„oÙaï‰kZûö\ÆðD¬YK•5G„5bsƒ·¢zÆ(6?\÷tÃ;ÙÊš'µ_kŒ\Ã»ÿÚ;ŠÖ®Ä?Ç¶<UB˜QTÛ)¬­^üÿm7vc7~5çþœ«Ü!òèìÜo!3H)r²«ídAÂj2í·•ˆ¬ùkˆjû8¼·|H]gY7‚Õ„g/¢ËKR;KÖž­`›äWšœlÏXTsI_9IÅ$1óèÑ9*©ë@OE§ô˜P„ýNËî]Zúª°—6I6bd5)k×(ûöÑŸ¿þû—7žü°ŒãžJ±´ÀXR±q©¯/© $(™š¬É²‡Ce3¬&‰iÍmxQ>þ,–£ˆj5^RMÖn¡¬ý»Ì'xiüE=ºù%¯ù„Wýq±Âêf_*™™¦×3E¥A½œÆ'ÀLeÕùj£lÃtæzÿ~&=­i-p™aã:©õ¢§AÐYµµŒÒ­³d²Š°6aa¾ýGGÌnór0qù[Ë§f®T+ë1˜Ôñ:<ªií-ÕÑØCÆº¤ÚÚ þy,¬m@ei` É‘(­9Æ}˜b‚ºaÍD¦ÈD,S¼QXÓ&¹%B[<HD,ãz{ÛëÑVÛ„Õ>_?·ÉvuìÃÍ+DRµ¶Ö2{N°»Þ•Ù³ÂìÚ‡’†e¿^ºY-cXSö‹M!mZ—ÀÚWsm…2íîIáNsØçÀñ žX\ J5í³ãö„ÖfŽS¸vA¥j"­]Hƒ[ÐÖ(P{LN¤{cëâk·—5Øÿræâã;å:¨vül1‘IkJ-2¬|ŠÌf¾2†…”H£Ú|-e4¿ÕÒ…m
!›±„ÞÐÇþ £Íjn±µ‘#°&Œã= Nö®ZCjó+flô<)¬v:¨TIŽÉ Áù‡M¯ØËàÒŸ‘y~ŒL¦+ØÌæŒ‰øäI"X°Fì¬=Ë°Óaßxûìõœéï¤ÉHæG8Ml[Wlç@ÆôÄÀiR(ø„ñY³}?p&‹‘C0àä>dê­-3ÁZ]BPgàfÍ@N‘„ƒfH‚4º)û¥]uQÍRY´Šdà¨¥Á]b7äÞðhö„b®æc$ì"4ÔU8Ì³­"=«t²\1ƒ¥¸ÆNˆ”Õ|í;E’{¬%–þ\ò}6Hûj”þjI·5©¤è‹3
vQ5s°å×°ø!­,A6ñÙ“”K×X=ñ¢É(íÖ˜žœb×ò%ö¬`âDÈTYK…µTY3®uu·o#µÀio2†4Ä½é¨QÍ"[·¾úôŒ,E
,&ºv¸RÑ[†üª¸úô€|¯b›tÐOŒ€H£“ÆØBAš<¥à-ßÀZ±-X˜ ÞÅ¾Ÿ§Â=“4‰–nY/ûÒÍ $¼JXKðmK—ˆ¦û¨%
1º¸ºö6ùSÆÂÁ°ÛÛ °ñ¶.p²>Ë#|“ök|¹ãÉÒåÜÈÝ	ÝôWÆ ¦Zæ/V+-œ¶p¿äÕÇ«óMÀÔ0¢™‘óð˜j¸åÅX@
›Qïõ{ÃôþR¾oqQÉ	Àe¿úÊ"òSfUl!™`4¯"FN+?§/ÿ>.þ5M<RçŠ³¸÷K•¼“Fk°ZkW^™“		³‚ÚÆ$¬íioã|hll ƒd¦UæàjcH³ù#ËgÜkCÙ¬OphŽnähûbame#UÖé»PkjÞ~iýÒæÆæ=¥~Ld»yoÔä.òÁZîù³k×Ïï´ƒÄveÏŽ,HãÚ›…µÕ;»v»±¿"¬Ý¹óŽú¬Mæ>úŠ4‘U«[u¥Éj‡SQzPM(ä!’;hóX`í jš¥¤M‡@ßOYg€kWT¯ÆÆo€5VHe>É[â,¡i*T¬)>Ê-ÈX›–ÑW¯çYQ=LEc{.}TÉ™,­ñ’›_˜Õk_?Ÿ>ºÝÑHÖn™ÚÈö/–”)"kd …³å|]²Ze¼Èâ¤i‘ŽÄœ¸d	¬‘Sq€ƒn»V%ó’KkcßÝzoà•71ŸøX{â_î¯|òçãÃÕ~2.ë3L
Ó”73¿0“°ËŸG4×©4®W…rÃ¤÷·zÎéçdšAË´†wHƒ–]Œ=rb™hMåh>–Ôæd5û/p3iÈxD2Áå²VóùOÛrB\îÖL&„câ%šriØÊj¯uVóÉ~4áZ¿‡Ç”§”¶]PsÝš5ÂÇEjSäÿÉÄ_ÿ>%ÙnhÊiN#IyZl'£[’ˆÔ•Šeæ4…%²4¼céÌ÷zÒ’ë(¯­ÿD\úü'&Dœjh¸@Æùš¦çZ ×¨VÛ“y~ýüõ™•ë+âÅöî½û2I ,çœÃï€ÒF°“ÃÏÛì6™É²Ã)X› ­”×*ÄfÏN3¦à´EÇgÕVí?~”{ÿqÙÊãå»Ë)¬Áf’Ûk÷µ5q›IíþíµµÛïÞ¾¿Ì'ð8<~œŠÉË—//J°Qx9¢z_³ÕÅ^¯,!SHŽƒ[lâ>W1œè˜ZùÛŠßV‹¨ÃÍ3°°ˆ¦°f ÒN“²kÜjÒ1”ñ$vƒT¾#ÁýG’~ÙÂÀ q<´Ùä1ªJÚ÷“(çÒd±lbÿFîähƒu›þþ—„å¡ž;ïÞyWÙƒúÚÚ;!{Ö÷töZïSõYÌ(äÇÄèD4ÒGTÇœ}(áÛY‹UÔr/Œè“m{~¯ÊêSþžÿ¤>U~ù@z¡Ä=Ö$[’¼`7!Œ-	=«äôC
K{1RO­úƒˆÃ’n}=|HÕµ-WL‚µTq1§EÓ~†\ÛÄß7s(6gã:FÄ3zèëíû;ÃåoÂŽÍüiƒk³Þª˜	kP›­D\âìNÄ£ð™;®¡iíÍ™Ÿ 2Ãš[gp•¡R“×A¦7Ž¸/èêšÄŒ•®•Ò#ÃšÔ7òÔ6ö3%:¸J`­aí‚	$Ny´£>#"O3š™i8Ë¦"™ò ˜ËØ”â¾ry÷+—û äjÙ®¢ÏÁ}(kÖ#e$ÂÓÖ«U÷¹©—Ô&üh½¢&OMîgmOY¾ùi¹v8¡âŒÌKeMo+›ð~Vµâá²5¾ä«ÌE§kEÙsÕ@·ÁßÿíÓá–,„«$r mõ“Â<ÒR,>˜z€ÎÅ]i½	¬ñÁ•Ú. 	ïÌ ¼çý"Õ¢2%½ÕZrÛiaÖÏ!¦(¯[h‘'TqgË7Í×ÐáˆÈ5øŒ4z,U5OSÍ·©¬ý«þRZlÑÃÖ"LoÕÅqLW:fßÿŒfÙŸ½ç••óRÇ²Q¹ü=þ"„YÍÖý1^Xa[²ÑvíT—þ'3Xæwf¬ñr™ô¦Máœ¤ ¾ŽšÔÜ)B¡7¯Þ‚ÛzaNã}Fø“¼¹ŠïÂ±m1!FZ[_?§EAŸÄ
íÌ/Œîï9»¾'…µ42\êzS"¤eµÑ×Xmu×r7vã×…5\ãî|5GLê43³Ê—¼f'5å¹c7É‡$|¹R ›œææ”[üû÷qGn•Z¶ÇÙÝÄp`j'¬Ýg~ÍÌ¬¶Ë<+©/mËkÑt439wtîèdX›>¬É™³y™àO×'pë_zqröè)t5ÃÚ
­nEX»AWê/¿&òqýñãÄÚFc¼JXx4¬é«zf–{J+ÿ]*×H•›X•?m°¦ÞeÕ…ßƒ_--ýîaó´uýr›2á½†ä“?=»ñÃ_ÿ¸||†î1$ìçga‘i˜D™M ÍäÜh5¢JôÖzÊœ®™ÖìÎ1l½[jNmïtyúôPËíÿ¤k·£:²&ç•Á#šJ¶ñ¤N§«-öE{A˜ëvlÕ¬5û™ù©ê€[’Z­i°%8ôZöÈáÁWÀ¶ÝrûŽe6G©³¨håSÚiÌƒÌç6–G©Ðè,—"^íqsl/e4_ïŒmr[œ[ßä„¸vé5U®\!†}Þ]AYûx‚µó×¯¬¹s½[Bš€]«Æ&çC–Ã¾aˆ<HÕ2då1.–³-œJTêò(.ëuçAN=øUMme1<»„Á[2è7‘áÿx÷þ+X3ÊEX“§?Þý	¬­¬­‘yûÄ2qâiÏþûã:¿£tM¥’‰°Ve¹ºM÷}E:a€5SýD;È”Ê¢´¶Û`-ö¿×Ë¢ß×ä¼OVŽ U3qê}Ñ’1éSª”qs5	dMáfkÖÏÒ%]ý&ï½0ƒÐÎÂz”‘B³ïŽŸÖq&&qEÃ)ÜMêYÏËwö¿sç¥ùHØ¦û‡tÀ>XÍ„BOµ¶^£Ð0?1Ò–þì&n5Hµª:·4ƒUYv©êãdW~;ŒT/?í9£3îa1‘‡j¥¤Ég¹%}Ë6º§Ò"SÖÒËzËe¬™½t@»[”µÞ¡^=C÷Ž	‘ñ6 0QE¸³Üè†É;Ü:ì³#ji<&v|4:û+âõ[iM?Û¢ÏêÕœ)@…Üòa,F“k¿6–Ö&³µI~X*tZš,FŒrœ5ËÃ>ä#‹Ööé‘Ü	ï,>…]'Ö>Ù`©EM±;”5@íCLË_dÿ~HÍÌ¶£r-Æ[e6€SˆæFk†ˆÂ‘#³ÌJïÔ[…p¥ ^CÖd¡$X«–!XwwÍU]µå“º¿JÐhE—ï)µå™¶*}¾K(o8ø‹u™Rµ
šS%€þ_ò£ÐœÒ6œa!?EÒ(¦ÚTÃ½Å˜'’›Ãj|>•Rt6eaãT|·8¼õ²ú‰	+|ßS{;Lú#½JÕUT«,‰œNY»-ž5AæÕbÕ«¡@ÎÙ•²Œu¿»÷»ÄLÀÆÇ}˜;¶ê³3z}ÍÎ(x¼J¯Él-‚+~ú ŽêFÐ"€_¸dÛ]¾óIˆ|€ÌV)Ó5¼!·0éj£‡gfþ×ƒ©ÏÈˆ¼üo|`\£)ö¶°¿ÈçW&È'Ú³þo\%Â¾Ø¹¤SCÎ	ºØ¥¾C{9×dû®xPI_í$XäÞØ^²ÆÅ¨ö
Ö6ñWW×/­Ÿ;6`ŠµHþ*‰¤ö‹aÍEk×n&ÊZ”ÖRVãrõ°ö– ÖvFvc7~MX#._>:÷›ßÌMt64XÄ—Œ}¡±\V#'ÑÐì9”]uYÐªË¹9¢ÒmÔP„8u5ñO
ÂÚ›•µý£IƒÿÄØVólá(³2Z;6Ã‡ó¯ÿ’ášŽÌ–f™›ÌÌÎg—–ÎÁk'ÇÎ±ä„D¼ørK`íæÚÍ?à,òìË¯¡µ'.ß‰¨æ¶«u²K°Í"J•j±>Ÿ-¹Fƒ³*aÚ‚ò;F8ï oB®À™ï@óÖ‹'_<<ú[^2†¿Ç16ÙTò9¬öí£½Á«ž®¨Øn¦žo§|z
9ä£µì™ª•)XÍr–[½²$¯jeÛÑ«(7	V?uÓ™œç¹0[Ã`Iâ&»êAÅÄ&ë‚Ù<4CÇ6Î^‘ÓúÏ(…—?„¹9w”pýb5ŸMÑµFÍNÝ/À¶ýý¡pÍ´Ù÷h+«Õ"±EÓ~Ls¤ºZØDXÓjZŠjJ~$_gX›ª·#6µµ^ÒÐ!zÖROÇ­¬¦›÷8´[fo÷ÙéÙn&¾¡•õ{?ÝãÿZ×®¼µ5Œû¥¬Q6€¿5k|©›‘çZÚPÑæÐAžä è–SÞcWè¬©©Î©™ŒßæÌß“\'°†µH>_ñêðð0«Ðg¥ªV+‡ÕV6î
Ö`0Œúñyt#lijF¸ûØ±Ê¶Œ´`Íõjk²¹ã¤È§m'î«».#e©iÁ45QhqÊÚšã˜jjÞ:’#ñÎê¬=âð£8æ¾×f.éuÍC¼9gNM4±Îî}¿¢¿3æ^b.Ây²w"¤.Á¯Ä üÌ®×„S F®éâ`,Uj”9-ÊDAÚÕaÓ‰JÒž¾»?É26ç§Ch–Šª6\» K€$
²§dâ¼¨ì²è}nVó+´ÈÊ’ÆÇ'‘AU›ÐÇûM†å—~^C‘“U+ÊÆcüƒ—%{Ië@£Œ½%ÂëÛõ$Z¨¼ü|•ÜaM»‘ç¶4Bö/¨ˆ¹‰¢Sæ™1Ø!ü
š]x*ÞkŒýmâˆ°–BÛ[c+­%©A*hŠ¨¯µIG#¡`{rï¤:¦éœY¢·¸õtN²©õæ8ŸC»òÉ K%ÕYX-IXË¬}¸Ò¾zâ´fV‹‘¦AJXƒÕ¨Ù>±±³ÂRmí?ƒ5²	ÕÓÉ:)o_~›¥„³ýü–òHÊ´ÖáÊµ ±á Rò]˜²ä`/¯‘‡ËN„$ŸþŽžÊŒ
,õàÞr¾2,[Eµ‡®PúVÐûºƒÙ#G³rÕä=nPO}ööÔäc‹Q"ôl1‡èDdc*}LÏ„÷š¼ý>hkÏtÈºW.ÿ÷bqðÓ•BRY–//.(7yðS‘Ñð0ÀFckQåÒž¢¸mquÏ:–!L´ÀÚàxYÎ@qÓjFÕd­W~“§kÀ).ZÑgüš<ÀlÌ*HYYL<^rs &ï©zEG—ñÅÌÏNëÜg‘@ò#áÅ>b½n8Þ1Z˜úŒ	èÁg3Óï/_·#ŠTUñ9‹²b¥‰!hÍ')Ø‰H$#|ÃAÛÂû2$5ä üº¹šêC”fá›¤ì²¢×}bf@ÂÚJ
k››‰®¦? Î±"VÀÒ-—LaLv™4ºž_ûþ9¬¶Öl-ÿ¤#íÖ¢°æë”Ô»#»±¿^ü÷‹°æÞw.ÏýëWØ÷;ÏDß8`˜O5Y¦Ü·o§¢:+•Ð†±¾(ìXžÝ‹z`Y?ÛMÛìhnìêXTÖŒ£d
kß¯j®sF
Úšê
$©€f³Ó%%>27W Õ¦§h²Éá9=óÙá£üÝ2¥‡NC<÷Ý¹cß;v…ë–'X×]»»úèÆ"Ë¬ÝX.VB»Õ0æUÒUo µF	Ý«Âé„OdÃw}­Lé´¾ç•Øâ+}aÄma~šúÝ‹“G÷"†íE‚­;°F|{ãÉòÏþ|vœ¦×eÎÁ•Y¦ê¾îO©›ó,Y®šƒPïíÒ–´M©óO“Ù¨ð§Û©YWcã;x9_Á5Ùab(T³Öõ0â®ÓÀÚ¼ÐÌÎ‰+ÁŒÉŠIß‹Þ>õr-…glÖŒÔÄl~(•]þ¾Ñfd{å‚©aE-lâÐÁuÑ»´f™S©ªäkS¦g¦§§Äm‘Ö¸õ\!©-qa‡­cGšîã¢w?C=ââQ¤º8Ú:20ÀÏõŸ`5`?\0ñŠ*°æšµKRÖ¨Y»þÁõµ+ÏŸ?ŸÐ*äA}(4w¹H†5G»KeìÈ“õ1cÚ(]ã>­ÊzÕíÉ°%Oô3ÆH“\ø'šÆbdyí>T†’¬ýxÑ±ùC¨˜j3¸¹·šn#?~|WqŸƒI„$)òw–§ŽWX¦V‰ˆ‹j\ŒàÚ:ŒNºŽº™#zôk›Jk~àiá'†‰´6RS
.f#!çI>6”«! %‰ŽFlãìGÀ²wu`>ô¸þÎ#¶âçI‚›¤`MÁ=4²ªî|Ú¡LK/(
°&lIYƒŸ E±'nÒ‘Õýï>%£à¥«ª:;’Ã	ƒ@WÆÃ•ký~Â€(‘ìòßgyŠ½VK[á““C[C¶†5~oÌ©.úbÀ>ÂŸ5}PP×¬ñQµ¼²DîŠÙ£gbÅî³ÝÜäUŠfjÉL{Úuø>F*ÝÕ çˆúW`7×ñ±“†‹ðÖEh1Õr›É·ÄìGƒô*BÙ›IKj™\w"™%î"ö³©'vVþýÌRa•hÁì#i
#bP®ÍL'º7×œ€(XÓé´
Ù4Bò8±Ša
I¼Å`„<IbãDW×Ê'Ýí1Ò<H6ÿ™²91k2ñ°m;r-#fëšøõf©[#™C³T¡týJÒ~MlÕ…pÈÌ—²Ö¬RÕ6>Î£.<®’ß_mõôÙå˜Cqë•WROWüùÿçK”ìõ;"$m„ÿ?ziÔX9Ö­iQGì»Á[ó´lXùâödøéâ ƒO*Íj©¤†7|’›T`°¯f@SMídãBßÀêÔ :§± )Çj•Fo£:ß²fÍ„;_+†YÐ2®3@FZýJwä6O=4,­P=@ŒNU¦ 1-£ª¶\üÆ¢áƒñþ"Ø‹,<¨wTJ…V¿ÁÈA±šÜv{z˜a@Ëþ¾ÑüÌáÙ™ÏDls·ÏÖäÜ¿³ÏšimiŒü
rä‡ÚƒÀk{QE.« ßkìòU?ª¥h¶¼IÝÛ†Ùx`½þWv µÜÆXó"!ñžÀm#tàÏ‡Cë××è¬6´oËd–QüCâZ7ÎXÏ¯íPÖ¬­Ùnl {¬ÉbÄ±k»±ÿ…=±Ï^«s_áyL¾{áÈÑgžòÕÖ`6CJ‘¶s¿g½®=CiÝÙ, 70Äy*‡(¶å´•{IWK!·fAFX{î”/‡ÊM™³tfã÷çh$ÀÎ´øl´0©l…é™Ã}UÈŽÎañ±´ôÝwcc´Ã>wfòWÛ{:—þæ“o·nÜøÓý¿MÝÚŸf¤+©qüóD	lË3[5tJ€-rÂeŽšJ»¤|µTNQ–Ø6¼ µŠŒÉAæ§…÷÷bâwK)«…ôyA~¬ù•Ÿ=ùáÂÔxõPu—á|»R®4Ÿ’OÙ(ñ²µ‘rH•”uô„¤¥$×1øÈYBqvk“®9Ùå¢¼²¸Lài¬GêNMþš¢:Ÿƒ·4ûÖF87ÂÈÀÀù9FjDC}L‡`ÊÊd%lÖ˜fGD”5„¶X¤aÍµjf4‡qMÖ¢$[.Ú4ÊÞMbÊÝ°ó¸"æ§U²V)y:¶)
¨3ŒvÀZ”É#H(-ÞbÂ³Ä–‚Y:ô–ë4öÄësÇºW®Ó|tjnfd`<&#ì¼ÁÝi»VîÝ[Çºÿ =Öx¾¬–4ìž1¬…9®;×žuzð„œ¸™;ƒÙ:ó¯z½S/GÒ©ãÇUXöÿØ;›Þ¶®lMÿ€ÆEÏJ‚!4‘ Ë„ &!Âf6Š!õ¢#AdH§ÞAÀ8þ@Êj'rŒRŒrÒ#7v}ÝN —*Á•» ÜY¡àTv Ô¤†þ=. Ÿ÷Ýgûˆ–ÓqO2Ò
y¸Ïá‡$‡ä>Ï~×z×ù%ÀVÆ.™Ç¬¥Áh4Â¾¯ãsIkn¾†|ÖS×^[ùkï>¬ÖÓˆîÁÉ“®ÓBvT]"ª¬JXuPÆ˜â²”Öæ@†ˆ¬–I¶†µ°'Í¡=‡¼âä¡/ñ÷rÇLñ1 Rul3"V3’X&ƒ`TÖÆÈ°zbŸBls
ß£ÇÖ8…Ô€‡úYæ½4ä;á> ‡;„1‘¤µU\Ì4Ò|âú2CT2Ž„ÇÊ†(@ˆ’‘=nGÈ Fù˜_>x'
qØïJÁRÞ œUmñÆlÆ¯ºñÑÎÇ<-Isîò‰²úfÛ×à I+íE‘¬£´ëuŸSÄ6ÿð¸ÎÃ˜$Ø¹F“#–þN†¢¬ÈRþsž‹¾þB6f`×®±©u°§ˆOg×á7GÊ{ÙÃ¼–¢šWÓ"®!IÌ±oƒCQ©	ùm*?§&làÒ•}í4Â	´œ€42°1Ÿa(û+@.Ã7‹:±ÊA[{%gDX;ÜgX“¶öt;³»ûNª¥*ÛÏ9Œàò!8¨žËÖxÔ›©á©ò´ÚÂ°¦dG ÍæWN}´Ô¢©ß‹ÖõªuåþAaÅâ*Ùˆ¯VngmbÌcÔs‚TþZ	/ôÃÃ¦E¬èª¹6G*À-›¼Ã»UsAc{| ùª·²æäz÷z‘Ùˆ¦|û8³²TÒˆé+ 41%ÚeªS-Tñ>ÑqÞùL|J‹//mÝþâ2I]LR™eL’«ª©ZýBwv’CåZ‹%*¹5õÐi“Œ¶kšãºàaµëjíîø*Ípr§f«ãuj|‘Ä&Eˆx«Tra±4+×J¼¶Ôž-µú5oÿn‹ ;Òÿ^¥V³MZ(þ.Å…«°Úò#kWvw÷^ƒ5åÏx8ƒa°¦†•	òÛgDh¼á$ä²aþÿ£âæQo•¬›¡ZòtÛX4×e¶o›Øý´7‘ÿetÛ˜ÉR¡ûmÛÏÆ¬¦ÍþÆÆÔÈ'[¬)Æ$“4	òíëÖP‰±yCÑZ¸!6‡#­¥°öFV#>;²ƒ<Š£øÅ`í?,¬QÕrQj¾Rœ‹¤‘÷h×cY‰È
ÒÆZcÓšòÔí7¼iŸ©rÌ‰éú[+ùÍ˜ù¦’5ÃÚÝ“Ûá‹@©–ÊáS?»Y`^k7Iˆ,šlæ2YÍ-¬Vk­…U„¶³gï\?óoÄ™uƒkïË‚$È›ßLú	ÿøÇó?ÿûãë5ü¯<b5än£x}4•‘ZBA€¦‡6(áØç@¢Ü![ÝX¾P×Zn«õ=‹eÊj>—Ç2ÀÚµáùøü\ªu5š›-7+6Ÿ¶·\I½;Õ†,·gÀªž®z±?lÙ,¸>V6×)•™±çèãfXl´Ë10}ÜÅSX™wå[Ì¬ø/ó4Ðr.£òK¬ÔÑ0‡¥ÚñÄNOð»¼9ºÔ'Ø4’Wrzd`59J†°*#Fó%ö¿žÙW§Æ<žî#¯YY+”Ê{¥%ˆqÈm0hi	«E‡È>ôÒ^êé„ŽéjWE*­õÁš7©žæˆŸØy¸³²³³³÷ÛyÃ2-'f`kÚÝ°¶A?ì_?ìõzèi$·¨ÝÚ´fLV,ÜùT)¾3Î×2¬ñÁZ>í¨ËIs©„¶¦r5nË5XÃ³©VEkƒÝÎc7’4V#ñ¿þX¤fxÊ©ã]°k.XãŠÌfaíÙ>zòäÉwÐY«å†]SXða-µƒ<Pµ–
k‡»«ùwý†#DT„ œ—É‡‡Ðêì²Ž+˜÷³£Ÿ$vûØÓ 9="À¤æv`£æ5‰l„²y£Ž-LŽvä¹­LDkDZZxsHß°eßÎ=I†£°Ár†líCºä¨Ÿ•¿Ö‰~ŒbÁZpÑ#‚mƒíM:l¥bw±v¹dã“N 0µ7ZuÝHM8güJYÇòT+yì24­E<3ŒŒ¤ž-­]ÓË[ÉóX]ƒ9;!sLÓkÕ²ÚðP??qÓW/51†	på?êEä³”Ö,ÚD´ƒãoê‹m6ÓFîÓŠ¼5@«@ÜéH-#Bc d)z¾(ÑlCHCu›—Æf*Ê»=·R>P¶1òg"Ëz
Ã÷8÷Ìõ@xü¥°–Œ¶‹¤ÉÚàvowm»?R·‡ÑwãþC…Â{_»^­R	¥jŒ¡ÎÀšT«.KA«,/#´¯:%’4Œ°–ƒÂläè…Ä*xÁ4UâC\ÅÒ±XÑhdÓ.ÕåIª3ØU0ˆe+Î¦TÞ$ö’Ê¥ì¯Muv´2«UlŽï÷j¹Î˜r™%Ÿdçã« RÐJ¬ï0™ËµÊh—U­ÍÀA³`\u#ýSRÚÚãÇèXÚÍM^6­ÝF
Ë!k§¤‡]è–ËÕrÖùêoñÝ7J>4üÙa©´Ý„™*˜€5AÔ6Q!˜œã¼¤¹o¼+ÛèÌÍ9AiöÔ$™,!îQ_Ð®@ŽL©³§fåæ¤nÑõÄm¿‰¬†°ö;X<yjaGÂÛ­øÉÜ±ìòÕ«­fk7k·úpí«Ý9³~ë·{ë¬çqYŸÈÏ'.¤:¢È_ÿïƒ¤ø,#ˆã­˜OÒØUDÚÙ’·`~pä;–"¬	Ñ"¬¥•“†5ÆLM÷v{c+++Éº¤#ç¶·„µ±»t”“íe
ki¤Fˆk™”Ö~2X;²ƒ<Š£ø¥âŸÎ?xðŒSŠKç/~ª‰Õó.AÍœ
éâlIé²¶ö!1¥õ¥ t —²$9¶)aÝß Áòuç~Bþ"ƒx.èKŒ	ØËŸa†›Ïs­’Ê½ÖÈ×,½°¸ˆQ³V¨ÂQ¬æX15½KÝ5EW¾ /õïŸ©’µ¯îàÀHîå¸'xj¬‰ÊêjK°F0«•eÈ/§~:_«qŒCGì\]ÕŠ&@‘Íº mùƒÉúâ‡3Þ1§9¾ý¯7ˆ=õ«¼&X{aXSÆ¾|¦ªÙT"™öƒCU0ÄAÂÝ¨::yÖ	U×õþI_5nÜò¦£¥9#…¹4vÄŽÉ³æ6õ­aÚdÄ³;òäÎ%ªu#·Rs/°Æ³Á/Fº–­ªÓ¤¤›í¨ÌûƒB;ôKÑ¥¶À	”ÎŽ¬ºÊŽœÁMã¸o\‹#QT³Èy-º¹¨2Xb ±Ô
ƒŽŒ®I¤í®#¬±/#<pd=Êdó#õ(Gjyô¸xHÄ[?›íúÆ’ÙŽj"«1_kãD×6ÄäW¤ªíÜì‘<Ö[ÉŸ©IY³»ˆüP§O)”œTÕB~&ÏDEç²:«ñ…ÜK¢4ºúÕt¦¶z
ûüüß0iç0ð_Å2Â`fs0f£ôH€8­=}leí1¦$Øö+YYþ=8ù,«¥dV#&Õø‹7ˆõ5¥#Ú2ˆk—•ÖÈ–ö±ªÑöP¤×’;é±z8°Fy
¡\Z+ÉWäMêôG"©fÃj_Üå5\DlÂc<H¤3XÍö"Ü›„ïI$¹˜G©OƒaMwÃ‰ÀšmF"·H)J”£èâ¨{œ:ˆ©HÈ™²”|è˜ö#…) Ã_À/ù
›üá&Ô..5ø¹•š‘Î":U ü’Õ±±ò*í$É±Y3…p¤þ+klÞÝ®B[òš¯…ñÊ°–ÜÇnÚÛü•àáý€X²¸ä6¡YôÂ¨¬™má£X¥&—H1Õôx«–&³¨¬Åø	]Ë›µ×”5C&ô‡À%>:}h 8'V³cý!\YÿâyÌ°à9UIaÓbÉn5eiºÊç5Í‘Ÿæ%F]‘¼k»#RÌVVÞlÝKÖ2#ÛÃß=<QZÓÀ·Jáö ÂÅOäB“ÐØ›+'ëÊŒl¶ÕW¦žÕjÕÚ²àTaX" 2ƒOJž¨ÈläÚÙÂ\Ë²™ËÌ*¥šë¯ø?ÇfÖèSC]XÍÅ¡B¹8ÀÙl€µÑj•)á‚­K™_”­èrfÏ>"¤Ëua£äAºªM¾Ä®4ýkv@-2µp×åmÐæW PŒtÒ'5z0ÕÉèäP‡¥Û[MÈlœnŠQh¹J[DË¶Gjm^ˆŽøæ”–¦×(°ÖÆWåonµ5<tYE\¾ºÅ2 ‘öXÅÕd°4å/ÚòÒo~£2`ûRnÉ;R ÆïJåÕÅ¢–„³(kÌ]¼·óû+±Ž¢©Ù¡,È;›¬8ßX?³skýò¸¶3¦’D½Ï 5SØ|tï
›Ó¹GWBç[ß5¬¶Ø»»*'c—5ÃZÚ›amcc·7§½Þ0Öª–&“EÍ·„µG×¿> kÄŽ8-íåJúèŸa5ì ò â(~)X£rÃÚÚõùígL.­FŒ3.G3®M»rí,³ÞÔYyB"´±ÇÝž	á3ÌØÃ_Ô­ÝŠyÞ¾ßï/BÐE^«6^‰D7³ÕˆbŽ\~~MAdSuLÔ«-f5ôV—å(rG˜¶²Âvdr2¢¼úÜ}ëù?_=j®R–Öl+m„s€¶¦¾Úê*'Zw„á*$®,[BpÐ2Þ&K¢JÛ`EU•Ýµ&OÅ¤º¸¸tñÎÙONDiíý¿ËIÅžZÖ0¢¼ûÃÝ®×'YáÃa„¤ªíLEEßè‚ÇÛœ–k’`“[^CÁù‘]’™$™ÒØ*‚¬¦ù’‡,vò0íÚªAÝ€uÃruX»ä8û#Ëh„KÈ© ¬$òë3A7ôémšbÔkèUýá¸3ãeã¹-Ï 1¦ëS­®kØ´hÉÔÍ crÉ¤Göƒ´ßHãöAãþØ»?–pÁ§zU±m42`S®Èk~"ÚM0.5	‰wfÂš#%³x£ÛÖoöî‡ÖvÔÆfƒÉæµ¤V‹‚óÊÃ›âµk½‘éÓIjÿéi/hóNe02¬Ay5‡¶úÍè×/â“šï$î…š›éÚ´ÝÈäçpØ¥¿mMæh„Mœ?oQís Íh–$:J_ƒÛØ2äø#ì©½áNRjŽ§¾§j7ªQ_ò&Dg’ÓBÊèåWªZ¿sHè³î|¬%÷p±7Ë0*t Ibü-pDqŒÐVÜ&áºPp 5£˜T³ —nÒËvñ]þ‰Ô¸‰ôçdI?Ñì×±®vÁüaDc¡UhI€Å°–°WÌ	DZ&$ë@3êŒ­ÕŒpÞhÇ‘è.brJ
Ø¸E#.+Ñ'¶Vá‚®%üZÕ æÞqº7¹ŒªLDL\$£q6ÎóØ%ºìvý:~qÑOj2CÚt¸ÏcMkŒÌ£ÁîOûNéJOÕ¿„;FýÀPºê^	o	åùi!¢ùãÏ²šãMÉqaM9öæ•v¦25’!kà†…5w[‹V|ÒÙd2Âg¿\Ul­zP–L¸•+¤ƒŸ{¯¡tûSšaWÈk>Eî¯Yë‡5W­eÖziÍZ´íO†
	W÷ôÛöšHK<¹r•`Rbr»°4)
QU¬UÆ%U²
¦±Zh±6ª²µª|BÚ@ZU][­U’éÆáÐ(;‹b$â%Ë\¬Fé÷b‹×S›~jöX54…)­&ùzWtºJ®ð{Ä~Á1—ƒÊ.$‰N«O§”ðÙ2‹1$Þ»ÿIÍöx¹Ãb¡f Ž»vÐèeK+‡šŒ.STMÕÛÒU›€Ÿî/êú­kMiˆÔ ú¶³Þh"·®~¤Þ·m}$W7LnuµUíº’òm0,‡g‹‹„@l´~ªŽ¹?S­RVIˆ$lBRÕ
jY93ü“‚t¹­Òr‰9ºðÉ\«õè=b}ëæÍkFR^Ó´z·>±¹31Ÿ?{kçìÄˆŒFQrE^êF´92ž×p8ÏÛŒwCfZI™|49Váâ;¡YMl²Ö×;š‹ˆÍ>Ýã®›,$îë-«­ÓcžJòµšy{YÍæý×î^ûõÍký#ÖÖ|{ãŸ‡GÞ‚ÕŽ`í(Žâ—ŽÿôÙ¹Ï<ƒ×ÎmùmàIS
fI»~Ÿv2"$¬…ÆØâ¨Köú	ij62Êi4…v#ëjýfÏïÞ}¤\ÏjÅB!ª*^|ÊlÏQjÊYnÁqóÅ´V¤×'ŽËïÙ3N;sçÎ™3';6ýøãCå©]ûòÉ/ µo¾¬iÍŽ—b¾l…ó´¶å‚½û³2aË1{dëò^Ê©P JMYUŽQYèJ²ØÅµµlWk-þñýuº`û'J^ûc³‹qßú)°öüÏ÷ïãèÀëýËLBZfÞæÄú¡g\%U*T&oF(‰ûÒÔçLz'¡ºéãî¸¤Z;Ì…1#’¬©ža9dªdÆEØàÞ$-Å¬ô7¦VOžÎ¾'”Ø${•œó$]1`Íçõõ†kß˜)ž!¬EkŠÈj Zr5ªéëÕú]û·^ša­Å×ýêÒ*Q¬%ùEY„FFóÕ°¦ˆvüì÷ÁÃ´ú,*k‡ªÕú`íÐÆ5ÊÖá4r 7˜55ï±1«Üöµ+7¯<Ü;=6’O+»ùh‚›™þðÄy‘|8&ÍÙF©ƒ’1ï÷Xå2Ô”çe…ÕgÐ–fØ”i6a\’‘å™£¶Cª½±k Ö¤·Å†ØºëÑî£ÇOw¿»/1í~ º€lf·Gï°£Ó£`ù($nX#ó)FL}TDtÚäÕOw†5Æ¦lF2;Þ4: –¯Sº¶DR¡Ï“ó!õfVÖ#‹´FØ’âµ´ÍšíIºŸ,I^ÊCB/î½Àƒ¿ˆÀVŽÌ‰¸”˜Ô>;&D
±ƒ+d6¤gá6º­rG¸íÉ¶7 à•ÅÄFÎDæ˜KWiÝ.&ÕgŠÖ¾Z]±ÅÊ¸~è'ÀÇÔœ§²oüAÃöC•Û+¾*W‹ã¨í%@fé/ÜEúÓ õ£b†E†ì&ÿJÖöIóEþV÷^µæ\nÙÆHàì«¦4oG±ÚÁqàY²9ŽÉ	Ò·y)k°¬–$:óqÓô9ûæ­opG¢[ ¶QËæ LHÊš|²ØSàž®¬ÝÝµ±X)tØ2šAŠÕpêet‚úfm-ÂZ¼é©‚¯Ú­Ù‰‹X #jX…ÈVZôÄ¡°´§4ðÊ–ý•eª9ã³ûªxô`ñêUÇ›0O­êÆâÀnEEþñé*ª¨
U4TÀÊI¼[ÈJþen¹TE¬Ò»Š}¦m-â¹#ÒZ'É»÷¡Ëÿ¢:ê“[cÖHÙ|äè²]V5æ¯2ûP‡ÏqF.(è¨O¤3~›tÇ…p­Úîv&UùænßÕ²<ö- µ›£òTÙt¨ËFjsë•~òúš+k$QŽ·KØ2U$ªÝ×øx>Ó•¼k±ö¢[’ÔGÒ$U¼¶õÅd•dÑª+Ú(‘Ê‰”«H¹z|NëÅ½'ýìAïÉ“kdNöùûÙš˜Þývd@%bnØ{d[Yä¿£3ŽÏ™Èr\‡8ÎX7<¢‡Ú82òtlÄ°Û¬ÅUm‰]Ñšn6vwnrÛ£ÓÄÄØÚpFöÅPàééá‘¼çÂ·ÅµG_×úaÍ¤¶£+ã©äµuùÀÚ‘ÃÈQÅ/ÿùÁ¹ëÄƒs‚µ™<ÓˆÚ¬åCo§ü›Æà3T59ŽXYSÛÔúú_×yåBÊ„î†µ[VÖ¼1ªõÁÚ#}‘½šÕ«¡PÄ–¡Ov«&§<Áš*ÖZÍÖÂÅÅOX¯ªÐÝwák(éë›gÕî(ØMÿ¬F_ê'_¾€Õþ÷wïþ;kYÖ,¡9g>b‰°F‘xR˜‡›ÍÒÒj¡‚²&%¬^Ge²ƒµJÅ
Ã|Ç«|»šæjÍ÷HÀ9ìFDÃš]›öøÛ¾ÿá.Êªá?¿ÄãyF›s‹eùU5´ˆQ]£±©"ðˆã=!ú+Ùö;QÏ4Mº‰:Xw	`]Ã÷q¿å”5ÂòE8eÖ³k:Gó$V§l\²4pŽd(à~µ¾Ý­Öø›Û\¡!—dkxáòµk&5fí‹ÌBµÛºHãšÆkÊZ‰2µíe‘Ú*©<µB€µ"°¦‰ŠJåµÄ]$Öšž’|4êj‰sŸqäaXKïNÇ½2 o’#XsÑÂš±‘‰1ƒä˜’]é¯vË~NÞ€»1ý(1Û°­F¸¥I<È–ZåÛ¶ù­.«Ó¡9¥%e$ªUš²Thå8—p{ &Áp"Iþíü%HíwÀ£'=2´[c‡“1¸F"ä½Ïƒ	dð‹Ú€µÇB»§k'OžÛ¦-‡S©4"ÿÈÊ]Î‚æ­_cž!oÒÕxnÿñHwâ7	k \¦(ÁF.ÑšÙJþ v;¬ÑIÍ÷Z2»ì»"rŸ“"¹À~Ð²	¹ÊR¯}"˜y9±W`*ˆjb3YŠÎ„äª¾!‚±|h4FÅ¦D‰ :C¢çi–¸FºÔëÃªV"qéÃÉ€£DPéÔZ#Ü>|¬õòÙ³gÎ@æÎ &ü}Ùƒ!	ßAl%”¥áË~ý‘Á$žâÔˆðÃâSLd·úS'¿^XÓ 1¾ÔñèB0²¥†šºÿ ªEZKYÍøìuX#~BXóml¯F(cÝ	‘2Ç˜—°Za2ã\>.Û9
Ísb«pÐÜ&žhFÈ1Y…>Øs`šœ8¢õyúï³¸Ø[{úQ‡Ò cÉÚ®bBº¬mŒeú1-ÜülÌÙ›Ñ…u‚µÅ¢Jž@P	ˆCr„Ý²5¢Zb£¦ÒÕJ¶P¬Á,eÂ)* R;‰äéâü"Éþ…ðo’-‘Xé ¤«ékG°ÖZ^T·7ã`ñÙ,µÉ2LÞZuwÊ„ìüy/Zï5¿ÝÝÂó¿kÔ‡çß_ÀYö°”+¾µ\ˆÙ0Ë{XëW)2+)ó+é¶¥«X‚t™QËJÄ =w…ïB7»ÖwAµ6¬É96€ƒ½ØcÓ&se¼C–-S¥œsZG®T··eÄO,¼ð²¢û[6Û•+-™æpÙòêmyh¶ëIF©s{I‹…KÝ
ÓN±wíá“{ž\»Á k)®ýÈ•Ø\¹RãwVÆ2ÔèS¢f}7TF²—Q¦ìVš, °å½uÌ¹RÞ}ÕÜsÄÊ‡N€ ¬–*kýÁ¾`MÙ¸²?¶¶»»BkÌi3ÓÌ>ˆj#!Á#.a¾•²&‘×•µè1ÂèÌðÄÊÏ)kÛG°vGñËÃš»¬]ÿì$Ÿ¼sÛÚ¶amFÒšyÍÂY€µuašFZ©<}–é2áÖùÁ¹ë"4·„m¯×¬=™	Ù qM2…5EÉÇ¬Ö*ªyi“„Èù¼Ü˜ËMñÒûw>ùP‰ß†ŽØ}°öâË'w_|õÍóoþôøÞóç×±žj"¬áÈ5 ü&˜­‰]új…Ê\sjcSÞÉrÐ(·Atµz—þ×èL¤œ¨#vÝ'º0H·]]ýpXƒÒ„j|­aM
Ì©q4Åþ†øÃ~ÿ—ëMœ„Áêà›TYçJ^ŠUZ5Æ"éõc7`ëEW¸`èjÆLÛá:„JÙØÖ>†Ù¼rO
çàšN»ü~uwª[¯ƒï`0:¢+ûd2M|¢¤~6Ê±ltùÁ‹íN”K`ëhWÃYG„µx›šŒˆÖŒki¤>#[\Z²¶Ú,ñ¿½PZBè,´Š2ÙÕVšHêÔ<ŠJšÙê0¬éîÔ	Réý9Žo4ìû}ãý½Ö¦>½²±sóáÆG©ÄüÇ4™ã^së]´6ÞÁŸî~z…’µ±‰ÞDfc‡ßFµhä¤P˜¦ÕÒN[fãÓ1Í#‘Oc1i½U†¼%+ ›åã,_*çTxà³S«ä¶Ôr–ÖLhn¡%;iîŠíû?u.äcHT{ÌfÍþÏŽ½l¾|F×?NÆª•-^&°$dÆ%DâÜe¶0ôhKGï;°ÿˆÇ¿™ÈB‡µèÞÏ­51Ñ™ÊÝ±aó‰7‚U?ša­ÌTg's˜q®c¬cf5=UšM"“×önx†Š€B6…I€Å1ÃM ³™Ú`ÇrM5×Ð#Å6F=Œ­®:‹ÃàÄV3ŠèeöX§cX“•?-~Íl@l
Â—ãÉÛ¬Æ_á¿\* Ç—ä¦ïu3™ub	[´‹õï +ÇUMŽ…Hë×Œs~Œy+•HÅr‰&™¯ª9B‚c6ä<jÆã?ÿŸiÞFZsZ„5T&ÐFr”¨mÆ¨6`ûG­'JG›Ÿ×¥ƒ”¯q”P¤šrJgë~VˆŒó&9*ˆôÜ{-àX
k\ú”5Ÿ&?‰	ÃiÙZFä[Æà¼ÍÝí	im­€’&Ð°Æñãí6Ð
¿ÞX™dÒø÷ oH÷C8rF>òÝpsù‹WKË¼úq¿
«‘`Œæ:'\+×²0?ÿÞ¢¾lZ$D"¹©ðPÅ­šèÌýüäO*aMÉ¡/
§~p”éA$Ç7–X¤KsS'A€©*;*¼"•É—¹Î®[¾¨!ýJe6¹ÐmVIJ¤@»DýóŸ&`:Ä¡ž‰ýü›¸TÓ¡·¨?}ª¿ž®©g62Z¶Båž’fµÉ*å}þè"PˆÒäsÔLß'—¥XS’*rdá˜[ôÐµ¿µé.,—9ÔêÝ¼ù×Gû×b›µ'Arö¢`Ë0ÀÚoW‡7÷öÎºYDø
|±ÇFŠš=I0yBN O¶yoŒt#2Œ$ã4™˜«‘TYKë&å€³G•%kk=ÖÃWö'Æð„ÄÑÊéÿÃ#Ó1ÃÄñVÒ¨fXK‹Övþ“ Á¶‰3›™?kçŽ`í(Žâƒµë×ïÉ·ÿ"êÚö3É÷ÀZÞ!FÓ™§„ÐÌŒ¶Î^4…µ±!xÄpþt&¿=²ÃRF^ášQ-m³FýÈ"Hë°“Á«é¯¸°AÉÉJys•Úr³ÅP^¬tG#gÈƒ¬…VgöyÈë¿øòÅ‹¯ž?þýþrï‡ÇÍvEö‚dê£¥eZÏ¤ø¼ÇöÖÖ*_Öm’!+dñµ¶nAçû1Óhýµƒ)Á°VÅ|uåÎ(¬é4žŠ5¾QÕXûþ{þ8ÁÚ~x–m•rjO:78¤¶ÇÌ¼ÔØÚƒ|·œøïr°?çg“>åJ1=W°ä7­QœÒZ	°ûc˜Ã1œÏ%8§`Ín˜:uËK2g:¹²cVFÕ¬GÖáö“l8>n+Õx3mÖœÔÆ¦AÈÉ¿¯·ÑïÙo@‹ÊÚÁHD6‡n—‚°Fdsh-SáíÇŒ·D‚`ÑTÄq˜­ÌN‰IH
k¯C›‡ï)Â^?bâÌÎJïÓ+;S÷>²Å°ÆV°vC)‘Äé(×î3ANïlìÏð®Wñ9À¨hÃÃÓÀYæ„Ò…uzˆÒì–;D^^ÎÑ RBÒ-!sqûXÕ]”KÍo·\µº£]Z"ÛQ¬ö@¬†È#ã;.TóÕI´fClëá7òôñ=öOöÙ®¿t÷ÛjízÍNómÆlf‰„¹ÄlÉNÛkïxóF3ÈTr£@Ò/'jâžÄ	„—Ö TÃ³„‘aÍº›$ŒXÀš<‹þ–Ê³Ã]\u?›„å,­nÉ#B•›Õ´ |#«¤ÖÑÞÞìæ;¸á†v9<Fƒƒ‰™F”#ïäÙèÞ
]S—‘x+ôSÉéËcN'D–{9ngñ&B*µ=CãÒùë°šü€^^*'Y¡2}íx¥†GHa¯óÁN2r!)þéß7~,ãôNý6~Š¡ÍóÖa5«ùp”Ö8 ã±‡šK_®ÄÁ,H®‡Bç8¬¯
¡š	-C]ÙËùy·ÃöQ¡§A4²~´áŠ5î°ä<7±XÈnþÜ j¤ðÓäP-‹Ã|8Yd‚ÓclÓÅj?e0Âir&3›7‡?Ôos!‚(Ãí ÃAï[;^ñ¿ƒÄ&–ËÎÂ'ûÅmè°&SH„#­#>ÈÄr\}Üøn©~ƒÀZØpñ2þiim< ñíj­Ú.)—}¿šEí˜Ýj4á1í‚až#©±2? ´†ÅvÞ™¾(·£‹<Ë2S3HF7°¶äÕHR:*Å kÜÕé¸q5°F±°Æý,"à‘ói))é†V"ìŠºðžê†l/itÛdÞ´*eaCk(e9/4`5þ®ÚÖÉ!rryY)Œ¦Ò†j›zt­@VW¯^-±dØ6Ëü›ÏýõÅ¯Ÿ<Ô<Îw¿µµ k1kàÚzfìÝ½´5w`¿3Ru•ˆ›âP†:eU«éŠ¼*òuËF¹á2=’ØF¦'NÈçÆ®!\Óšµ8àðJogã¦Cìô&N°R¨I!¡„)g$Â—·”Ö®¡­õÁZL„ü»NÙ¦XüIX{…jóGÞýGq¿Xü—óŸæ>kÀÚü­Yf¶å>‹Ô•'f`2"?¢‚5g¡5¾Œ¦‚Ed²MNðñ?CÏÈ„¾|¹•ú‹¤ióõšéOñ{Eõ$iÍ¿s,²VÑØ ·íÁ™$-AÚú45ÂÚC<>`µw›úæO®3?U˜ñsØà6`Â·­V¡¶õßK@ƒÚºP Íwx»-·Hyø«|Úù~\å¤yÌNX«Îž*oR­vƒp©œÂý’÷0t¿‚%ÛWßüþOºÿ¬‚OÝÀÚñl(|ÆÙ¤ª¬%¡`a"x »—•j‚*ÃšÏklºBŽŠEµpfÆ˜Ùóã1ÙÁÄ§ÏüÞ–åkZæ”pvŒPJ]®_ü¤ ­Õ˜%6\‡ã¬½tùo–°;ÑH"…5o&5¨EQ-ÙDlkÜŽ˜–Âî©)vq`@g@s-:)F¯´qL´†XõFX‹¤"%ºC}°<ï¬Áuq¢·»·qæŸ÷p«Y\»A¼ËØ¬¦uWÛìîO‘6¹»62âŒG~•ªM#¦g€5‘y/|2l)÷flMÞ…VAoòÂ ,ßÚJÊ‚tµ<y=•JkÉ5l@¤´ëX¯ˆÝ3’ÙR%lÖà7ö½Á«ŸGqµÉˆöî±
sŽ×¥r™ÞÏãÊëuSŠzh—gX#<$,¢¥Iõ­iôF5ºûè/Ž&&ŽÂ1‰`ÞRÙúÛ^Ùt'ÇX7ã‘<Ìi‘ÖÏó_x-ñÓ :• zÀšu6ä§Ð TÇÜÂÀ’X$*9Ñ;Ö’8ðò™Ûúg2‡LìDÜˆL,„$6Å€m~æaû|ž.Ë9Á,¸Ú‡MG?Ë¢€È-¢iÔ}ùàÙKÔ¸ kÝÑ2úuw³ò(7AéïL9,B’"ò˜#[zÈƒXÔ3!#½úÆ0ÈÔá›°‚íHÒÿ:ñhÉrØÍÖ¬4FŸ¾”Ñú`í­!³1õ‡-ççŠÖœì1bPÛ°%ï1æži)qÚáœ™ÉB÷sÌXrCà¶iÑäD¢zp¾L–mÚ¨4š˜fëé™ë·©ÁÈ¡>kß]-³6®½YY{ÖÀ¯ŸÎƒÌðÓ‡‰çHJoÀšy•i‹Å=ü¹i9ŠëŠÑ­Uñá/dEt•"(Â•×).7G™âÄk•,/·=çÜ*/|°Ð:ÖVÞ9þD6+ªáµLæ.¡´xWÕ»žhÀ0¥Ara50YQSÙ±¼Ø	E¢—O‘Ðí(×â”[OSM‡é"‰Z(,,Ö;„?ÒÁr¹®`­<ÉX|†6‡¦Ö†¿ª¡J-kXÔ¬ÖÕ_*8ëVGm“%OH'2’#Zj×Ê^	Ôa%öW”°€_K$ä—lT
µzî‹-Ì¬
­jNÒ±æ6`íƒ®ædüÌg–O?ø@Öý*Y{CÑÚÍ•aNØ9s†>œûœ&ÅìW/X6Õ›Ï#l;ê5@$ÜéN_¤¾¡«Ù³U-¯œ=[†XYë7º‰¬¶·96±»qs—wâ.òÚÍ}ŠÕVÌj‰[ÿÜ7üö­±™çõÈ‚$Ÿßv
'?TSÐFnå-³ ç·Ïy÷ÅQür°vþ³ÐûÉ$\pôÀ¹Nß&Û2MŽQ“6µ~öôŒÈìøArŽj+H‚»ìéÌ“³t ¹µ¹©ÔGç?ØúaMq:No”¨1pÉqÎj*[ZŸ-/†ŽžÅvßc–¥2»0sæÆÍu’…j7ì Ÿ “Ï¥yýß¼øêîƒçÿøsMM\”8Ãâ#Gm3¢<Ji©0ßZ%yžù!£¹Z.13¨În2!ªuL ’ê¨fÃ¦úVsà¼Ò\wJÄ&?<YvC}ùè]o~¯¿í9?þ÷ù¬¥N7…ÒV‰Ê$¼%»€37‚†îjÆ¹¹~Î)p ®gÔMVÎÒ"‚'¤ïLºØ7®ñX—®u.'•@´ßèÈË)N¾$rô¬Ív¼9Ÿ…L/N²”×()`©¥&<kð”:çZImw'A3~7C›væ÷óˆFÄ‘¯‰”æ¡P‹ÁŽ:ŠÙ`„hq–#z!o‡ÿ5Ç+fEÜ7¬q›FÒ]`tµ€zÓR|óÖ;i0î‡µ±äðØþ~o¢·rVƒÀ!4Þ½Ì›hÃ¿!XÛ%Òj­×[ÛßGK›’z–çÆ¼Æ:çŒ›ª‘	s}úíê2ÃŸÛ¬„MË«%¥B–n+re‚–f±µ…-ÍÒ¥¿-ÉˆèÓO;µGF5B’3­ñ±Í Aµïîßúøñ}ýßypîé£f½~éRï)knª{¬q*8AÆvØF­Hky ·‘b„¢µt¯ÓñóYãˆ°fø’Ç£Õ!v¬—™À\«“EqÒ#tŸºAëœA}.zQxÌhM*œÁÏˆ&.ãS›ÂÄ"x€`-:1†Ï—Zbgƒå‡OZm©Ï­`Ëäb¡I‡7énz]ƒ7ý°F¨—ãIê%Oµòm'Æ®<ý»ªC³T ïµÃ®ž;÷ŒÖ"TâÂh7è‚<„;“Ÿ’¼vrä¬1< f°æð±„Õ²baõÛð»^-D0ŠL-ü£øå<H0Íüf¨Õcˆƒ©Æ?kÙ>XÓ†ÑaX›+¡5É>‘!#Öžì0×(R°æ<cqŽ`mfž[{çÏÀg8:°uþ¾M ´<{\}¢ÌÄ373±Ÿù·ÃmÖkdA•ÿi/óTKoúÒÓd‘C´6(6‹!
bNùŠÊd$À2úql2/¦TÖÆT£*XC\“_/m2!™ó«€E¾+‹£Ù€n•ì@¦ ÷ù?f v0„ÕêuÃZKú?ÛZ$Í°u#@³¦É‰Ÿo$¬ËÉNWG(ï)-¸ð0Eã7¿ù¢\EæRY™ìeóØíq“LÁË²ÖEÚ@Ýln©=ZËMšÕª*CmtÉ‹¬¨Ùé8TVÓš€XÐ2#ÃQá5ÒêpiªsàfeŽyµ$†3ú[«½¼”Ûú¢´´U£3›š›–Z€ O¬k¥Òš`-È—CŸ\\ýÌÂ°&aÍá‚5Ç±`Méë+»{{;äÃ†ÿ›¾ÂìZpK{–LhÁ²]x;Ú¦T…ÌºÀlœüÈbÄv¤Ùâr“¶Ä~%ñFemwbz
%Où¸½Ý+¯ kkSÄÄ„§>¦Ç8©½­kº|òdÿÉ«Fke?Hikî»9^åç„5+kþé(ò(Žâ‚µÏ¯cÞoa-?o\»ØZ´™‘N—g‚v6…¢feM»¢´™¼»Øh*Ln˜ §¦ÖW6÷67ƒ¸ÖÁÚµ“ò.ÎÜÍ?™Õ
•!<òV[,	Î/~°ÀJ×êêrQ¶‹‹-P ÖæÎÞØœ˜¹ó¾[a»ù
Ön	Ö’ ÉDüòîó÷›¥\êl~ŠE®jpÃ,™ÅZ‹ÛUSC	/MLa C3G.’ˆ‘Yïâ5Ôˆæm×$ËH£´¼xPdmS\„µ=ýq×¾ÿ5¢Þ—ÀÚ~8_†Ò
È$åÑÂ€æÖZ?¶P«µG«‘¹'g¹qªsJAzI´Ð£pÇŽ\„ÏŸ|F+÷x¥]!‚ƒºjïcz]¡Ôé.•Ç„'ª;¶ügÅgI^SÇ+‹À"Ÿ¼S˜IyQ‹(Ä7n¢Žfrä™º5‘’ìê-œæmÚ]í6ÿù€Ùí ¬QîmV#JÅíBa»Uj›BÎÅ¹Aë'œhÚÏèÉébÎRDX‹wy”ÂÚábµ4XKd¸±‰‰¯Å’åº`Z{Ó§”5‚9\¬ö´÷ôæÃkk™1V<wGHe™€Ö€µ³d=ŠÒ\}®u¤µuÀ{ÿŒ+òd3Rðeau¹E6î@ÍKb5ªýrÍVŽúÆJqqÍ°vþóëÐdúxŸ5S™{HØ#Â91'›‘Ý§Ô¯=z´¶öÝýwN¾Ó»wž“œZV°Æ¹ÎväF*@CRƒ÷#¬1Jûc%š8Œå‡F#¢;¤uáD¦Ó^¸[D&ÄTñ65«™Ã„iö@ÄRœe§¶<‚ëeg4®bã˜‘Íº·Æ¼D ¬¦£<Åì×q‹Ö»	ËŒ;ÉHæÙ3(BÝ³e"[†ÒÜü`¼ÇSÅÊÛƒy~Ä³Qa½.¨‚õ¸XTÖå¤W%h6Ûó'·Žî_¯¨ºl6’Nt	u¥„ÄC;ûA. ãkj_´ƒ•¬è;	ßÄÒ7þ8c—Ÿ¯Ð±pÀÒZÂU±ÑÛ@eÖVcó–5kýºZ¶Ö¡JR‘Ä?@Z^~"Ç³¡ŽSšÆGA/d
™^é£u|@¨FÌ£^0Îœ¶…ñ´aÍIvâî"¾+’ü	VÖbÉÚ¡¢5âéˆÊN×ÖØ¼Y[ë§2ÆðØ¡Ùèô5`½Ð1P„¢ÄjŒ8h™·pÔŒRÍ`ï¨Æ1PQ*á(êŒ™a†`;lE`»œ\"ŠóEY ®)–qBæ›UedyÕ¿¬ÛQiW‹i°XÉÖ˜áÆmÄNxrPïJÅj
n5}Ä/w&'¥ƒ7øfÏñ¯—N×g)XÃIY™†uúˆÖÅPuML“%¼RT•[†=5_0œ,UF%tÁjíDAÖ HV
YÚàúÌ1Ö41´y¿aM© åI¦³ò¤ÊÖJš‚#½Ái9¢\æ×Õ¤UÞÂZdUSÍêÒm~r³x¼]—ec–Èå«ð[¹;vÙÎcÿa\ÛˆÎýªXc°9=Å9NÁ·Îö>ÚØAl"À°ùÁüü AÌæ¨¹(k
R‚’žéÁ´ßY«j\É·°óõpï£Ý™žÜÔæ&*k\ ·µ‘éu:ÉÀjMõv°"Þßß›šžž"ÈLR`nsü<¬eÆžônÆ®ØŠ¤%nÖä9òV°6®y÷ÅQüb°ö€H`mÛ$óóÿó"ë}RÖò'’€Õ8UF¤»JMiìcKkHnÀÚÌÔÄ‰éžLh±ÓZŸs¿a­7(‚j¢2n‡ÚµBq{ ÀM“¦fœ”¿·°HáÚ2&WZ5}oƒü><´°Hb1oã|ªÖ¾ÝŒ¬¶—(k/DLÿ—½óùmëÊ¶tÿ=–K‚ 4‘ Ë‚ &[‚Â"b„Eêˆg$CÊå°K6b¹øìè•ËÙHâÈ3dyjøA0ÊìWváA\IÁÈ¤&o¢QÏjÒÃþÖ:÷øŠQìv€îŒ´MÞ{î%MK2Ås¿³ö^û_¿üáî“{¹OW›ƒî±Z¤g¾ÙO¦H]†#MÕ
ùãz-_/3yÀ,œÁ/õZ©&XããÞ°‚o—£ºÀÅráÖûï$n¿¹!û~…“#.ãÛÏ¿´ö—¯¾üþ
õG¬]VóEº”ª4ƒß2³,ó¡ü0Ã§NÛÕÚ­ „¥õvb8Ìƒ9¯|†Ë¼Dl#”(vœqË\7\“G— Ñ ¼D¯nn*zsxEWªÊ;ÑÒ(°FZˆÒ2Û
¹õ»Ä@†4m+¤Ž$°Fh†RÛ~ëj‰’¦QMN#Ü÷ÃZðy	k¹MÕbw±_¬¹n-]d¬-±ÿ°Š.þ	i…Ð¹ ¬ÛÂ¹ƒÕiŽ8
ÄÇCc/^øI§(»Ä¦Ù¦¦¿Q¸ãº´[9ŒõžÖFz·¶_Œ¨ëiÆv5Z_3¬©¶Œ&2êõÄ9UœÏhƒ·`I­\ÌƒeåEêËyX'i~b~€…bæîªùLêš%6e=ÞÝü„ô3ðLç¬Hús‚!Çj}/iŠÍ™½g>Y-ŒVÜ9kØÙ·5½j±`-*kº¥ÆÎØ¥ÃX¡ôÈ æçÖá)¢2Áš31h´ŽÌ†6]‹ÅaÍÚXðD´JÌ1°Æi?„DŸñJz’	0ÂÚ‡áùþ‡»£:Òöý!¿D£“aÍ\æØëßô#°9]PJ#G .÷ÒãUTî¶O¸b˜‚›ÂDÄ=´&"ÁÃÃ†5¾A‚WË\wê½b»GñM()óW^£ ÇðÅ&‚ ‘ÂZ¤ÊTC‹²ë3W¸'!ìŒ‘hg~Ìá¾I$ã®$¦¡óéËü‹‘ƒ°Æ@÷1öÔ³'±õ
>c48=”A6“ê-eM"Èo³Z–ÉiŽKcÿÒAqëkJ|ìöâ¢ðÍ1©žÄ[»»fý wÏ<CÒxkkè®]a›šŒxr.Â”·/Ò§õX,Ö@·`œâÚIîô[tñt¶þúËŠ>Ä$SHG‹œk–]b»ºrµüG>eƒŸ$f?LŽ%@—,¡©KM´ÖOÁr›|Akkê#ZÀ™qXÓíÐvâ£ÚÇ5u€‡‰‘4¨9MŸõÊÿó‹)™õ×ÔG´ Ç`*ÀK³NiœÊZ©¨4j²XýVµtÇôÛÈÑ¼TYÞãÕr»­^ÞùïxNÒÚ°iwŸ*ÔØãU¬µ&âž6É1™Vø¨‘‘	@»¸ÈOÃµ);Ûb^_Kš½pyÆ©å¾ùæBêÖÊ¥©QÖ	|I´lº¸”;2PXüç¿Ê#Q¨†ÉHì³Fjú}ÖîÜ¤¾CÀ¶}ùú¶þÇ{ }‚NØè¼^ ¢‹6äf„gGèÝ—u²Ô–4ZËÀo¼	3[[³»ºšQ­Ç».Y»ììûõ]‹·ÏŸ_?§MLxžt*dØgÞ0z3g>ûê³ß­¯§°vN“²¶ÍVKì§úFëþ×ÂÚ	Ik'aí0ã×‚µ»°Ò>e“7(S;»0ÇLb/âéC_“dÖBš®My¢Å6d¦0FíäA>›ÂµX±[bïƒµ¯º}½
˜i6	9ÊM{Î«ÓFuj3,ÂjÅ.ÁZC)c+gçX2\Zá5gLò¼ƒ¶f‰Kn}ÖÈ‚”´öÃ—žc=WVKZ@,i,.®å™mÃÇzc5O>X¡1ƒ”çšÖ¾
ª¨¿ZiV(‚¬ÙQS¾ŽdpVVÞy/‰´öøºâòîý—>Ö¾zëÞ÷®”ÑîXÕj¡ëå±IF\#Íe Í‘ë¤…_ÈašƒˆvÜ¬Æ\0ê1ÂëŽŒ’7
QxH…)’mæ%j¿­Ôd#çz¸–jÅ5ÛòyÂÓcZ/¥]€ÌŸCqN*U7?ßf»mõGJm²š;Ý §:,EÈ‰‰‡1’q
kèL%°6—¤A>Îa6’éŒnEz2µ}d«±_9cá0>âüÆÏ„{ñìÐÈÛ[#§FúNáÝ¿}ÅÔÒðoýK¬ÀHwÝíÚ]ÿn}6³uy»73©òî>plw®n–ôQ×”eåé[î¨ú½qÛµîÜÑ£ÞïÀZ‘waÙíÀËeÛŒ”µ$¼úãm ú6Wd¹9PÌ´¶q…ÖØøÀŒv—G=j‰Í€†U¤wÐß»·élIÝ—+W°ýÏó¾Þã’¸ý²a„ª÷u±f¤qŠcÞû®“!OûPï&?¦½Q+HpkAd™¢,}™Ö<U‰f6=ÈÖ¤Å1°-I$»:°æ×7’±S Ð%¸'Qƒƒ°E%*JkÍý;{¡¡™èC­)NsŸ3²¬’í³õð †Gzv`&Wž±¡þ­Ý–‚QZãœõÝ½=™Û¹¹4o;é»œN²œÎ²ƒp£MHôì×Ù´î,%¹”ÂZ??ŽMd	½»|2­a³€ÖAV;L ¥ÆKSsü„Ð~™dJn–×Š´=v;ýÑ½ÖzœÿaƒÈÔ‹9?sGßQ·+XÍþWsÝnz¥ÒÑ¬
¡'­whå¨PøèÀ¼ÿ ¬9RXëÛ¢F•:ÕWû‹ð'uÉâæÄÃ1-ZSo.á§x)±„´°fRãûË)ý±ÉìäYÛSÐïS]Ö€JÊ lò³Á‘Ü=ÿÈÊx6¹Œk®¡f5Ò&óÀP^u]äO
ÊìÚ2=Wdñ0_)×kÎhmbzßŸç£™yÄ–U–XøtR«•àÏ|sUí°+n1-“þ|É¥Õu„{´.ì¸Þ¥S,>9u€“>¦¥p­Íƒpåqå|ƒaå2D©ØÁM‹ÔKkîúÖÆ’²åD2üÈ_XÍíÛ”¶—•S+¨uÉf£D¾(¥0ïÈk˜×f&ç‹½p{Ñm±§”–­þ©rX*?\\â"€ô{NWCey±4¾v÷éw†5"é‰-Xc¥NÒÚµ;úü×.#¯=QÙ†²}22àWSZBˆ˜ùjÉŒ¡AoIY½ý’"6ÛÝ0˜¤²¹»ŒÆ—´–ÂšœËžs"q$u\z1´»=´ÍHø[ÅQæ£‘ß]Z¿Üá0r'‘Ö”ûãí1³Úë•5„µ¹‡v‡q¿¬ágZÛØä³åÖ­[³³·f9²ú=«½?†äÞ7KEWŸ‚5f?m³>tÆÈ‰$©’CZ{~óù©oÜŒîýl(k—ÞbNó%k—~ñ{Ugs!ÜÚÞ¤T´¹S‹Êëj:óí·xD.¼sçÚ{ªsÑ™2Ï¿a“ë9¡mqÃÁäû{=ƒÍ2kfEÉq 2ŠdxðIJ[®™ù£P`•’HºeSMæ*n£TÜßºÂ°@âä·AMó·æ¡ó Õë>ÑÍcO6ê;‹™²¤úƒÓ²m´ÞÓÏlÄú#(èÄ“ÖÔkEÇ€ªÿa¾
ÙIÀÚþ$¥V 4ž%MÍCVAk!cE´Ge™¯É\¢
q!b„e¶A’;Ø’'Êh¤±	!™Ûjòð'33@›ÁãÀeî£ÜÑam4a5"E5óY<‘ž<¨¬Uëu÷Ykt“òäÿþÜ"3ß£ÂÖAk½!åÑˆÇ‘¿:ìB†`-'Œæ}Â[c#Ï?8uêímædùöóæMÙüº‚¶ëë»»çñî—Éˆàq¢-v–3ËŒiU5#nã’qvz?*Ú²|wÓvƒTz,,ˆÕŠ9¸­­ÖÔi­Ú¸²,K~¹A^Ö<üDŸÁd›¢1±[ šH½Î‚l±ºmïÊê*i”uÞÙ§Ä4"ª²"&¼ÿ¹i¶#·¸?#>¼åRÿ$’qLþý–Øt¤'X>v²cl –hl‰Ÿ£œS¾â!‚¿jïèãž’ œŽgŒ{Œ\?“öÄ†\"R	…¤o>tM¨íùÙ0”iþá„q„7³¯BÕZp¹8Ô	k>“à ×R( =±Q^­œ[].ï©W™{VqøBîœØÛÙÓW³*«×Ò°ºws(ÅÍDÚ³U¸|v&íÜb^äÍ¸ií ªY¡#:ô3×©¥^þIfåpêÙ¯ÔÐTU³çHˆ˜ÊÓ:@-ðÝAXëV‹ºš¡l_˜^ÌiŽˆkY‰h¦føöz@Þ ¬wÕDh™žn­<2œíFåîž…ÕLLOŽ©IèîV¯¬ ¯‚5²Ó†ºû2(p$A¾‰²æSÓ’Ö^=
¥•ÎLp‰zØCc‘l}µú+×çgäÖO”pé'<,©óÚ M×B0Ä±q)K¸+öWË…¦ˆ¯KUoùºJbJ‰uR×øÿQU°æ,½^éÈÊ®‡[J\¬©?'&#(miglðíx0gÄ+_=¦×P¦ÆÞx^]©U®f·ßµ<Ûkeúu«ÜÃÛ¹-•£êÊVûpªÄDL€ý‰ù#ÒZ½YW·ë¦ÖRúaÔ¦2;ªÂixiù½G­CÍÌÒÄQÓ*£4Êî‡E^^Éä¹.»Àši]‰Ûùq¯¼¶všŸNþ!KµeœZzrÔ6)Y;ï,H6¡h:K|ûµ»xÍç.?¿xq}}¤‡P†n·ylVÈæ¥ ~úYMeBÚ+ËÞ~ÞCk½ œÕ`¼ƒOíEXKiÍ;`-IÓ%Dlc#ëçÇÆ˜ƒ˜5ae›-f~Aôâ0ò»ßvÐ™9Í7Bv*ÌmŽÿKÉšaíÐò0ãW‚5–ä—¯œ8qbsóØä­oO®|ûíÊ¸r&u@µ¬$ve5º¯œæþØ³ú¼1¬9]’wñæöØ˜YÍ#Ñ²3òI]z='J“‰	vJnµ–sšÿÊÉ•“Ù¬Ì@ŠƒúÐ«+gádƒm~þó‹wL6d¤+µâ·Jƒ|®+éŸ}õhóÞ¿3Õ•«‹Â¼FO—“J4b9Í„V^dâ+ãÞ_—]¿ª”íüQ‘Ô°è‡BÜ×EˆÐöÀøsÑŠí¤Í÷x%=Àšò /!®}dÏãiÒ«›x¦¹’W'u£„šåò1ûuÈÐqêC¥zèÂ#Ã 7WD?n]JId°f¥B°Ö2·qçj»e—HÌº¦dóH¹4Å²c@²%~’ü…J€/žDÕCuã7Ò!¥'`iŒ#”ŠÒ¨>Ð€ðöRH“=$£è™Ü#“uÔ­™Ðâ¹}Q€Ø”žâ¨ÎÄK'ÁBm™˜ù³°fN‹°½“#VŒxÊ G¤€–ºö§¬æÐ‰!†ÞÆrëÔ¿ÿ=¬Æ«U	§Áüö:Áÿòåï.¯_^ÊÐ[‹Èh|Y,ñsý×Ë€ß˜¾IwvB|f=ã(°fìœ²}‰z}ÑœÆ²7«\·uÑ ‰d¡k«Ë°Z„5ÆËŸ¤döéò2Ã'ŸÞ}âS1îáy/¨i¢¹g÷€5F;åO—ËeV!”·Ta Uétõ´ÁHÑ˜Æ˜V¬%;‡¥37b‹‘Âš’rœ‰Oqé›[ªé±svÀ1 ™Êˆ k0©h4[KÃgœ‰Œ^/…5“œO™á,§±j q”úÈ ÚA²çØ‘¶–ŽÎþ2pÔÀ„+ÛD%²¤^Œt&uÌïÔµÄDÂ=ÃškL¯åÒ2Û½`rß«a ¹sâÄ±hi¸òªÛžÍKHdaEî–nI`12D¤³4ÂÞq’áÁHJÙÓ¬™ÑšEµ.j	kEA[lfÃ?oÒx	i§xÆíÍ”5îƒÈ@1Ófƒ3‰"jF×ªÙ´l§(š´{¿
Ñ‰†µl—ÊÌÊçGe•”Æc6xà7öŒÌ }-üje£>¹Aö‘¢ýšÐ,ÅÍÿxÐÖ4>î˜f2+î‡5Ÿ²°&ŸF{Œ¤ã†ä´:}%àÄ2Å8tÕ¯¥Fœ8ü£kVdˆ¨Ò­ÅñZ©¬Ð"<VÍå 5»¼¨²!¥‰æª¼P³_Ù¸Z®#)º‰ûSf ÁZûÝŠr-bÃ3¿¡‡í¤QÁC`&#ü£ªD¨˜!,y0Š fƒ~åúgŽ`cÕ`X«–<•\åÓ¤ŒJïÕÑ²‘[ÒM@*[R«Æ”Ö¢£6pI¾Š8Œ”}æQý0˜ÆõùæÙyÜ%kHw‹õÆÒÒøUMÜÄÕÛùêÃ_(¾¹úP"d¯±¼T,M=¬.Ì4ët¢ÓmþîS«j¡ÑšÁ,6ÅFcs6ÉÚ&Fº2òAk®—”ãšmF¸LâTú¾ðÐ‘á<P¤mã?ÝE:HDXÛÅ’MŸFFv××_loãk¥šèMæD;Bþ¢€ÕDk—c¤b;©XãpÌia"~­o?´vk‡q¿VÜ%êÊ§wÛ|óÖ··&§WÎž]iÌ¯èÈ1"|?&kl¦6ù 3åquÚ×kXS_©Srƒ¼yíÔÅ›‚*îAWë€µ¯&³ÂµéÇÒîiÂ­ÚhOu9¬Üç––N/åæ²Jæ'2´‘™Ÿ§;ÚÂç+å¥³wrYúùúkÁ;³Ú5>J¿û«b¦µï=½·ÑTê?òöà•ffhwV"ãX£í(3ù#k¸<”äå²æÁ¦¥‡óßU¢PàhUÉ©Ò¬‘ãùè¼KÖAXû›r#BJùÇ>~ð¯ž4š]ØÑ7XŠ²˜W•ôð ¶ÿÐYì+ðMKS‘Ä®Ñ
gÕÚÌ®ñò‘ùRcö¡ÉË>É­P°–ìHž<Ž¼¦Ž×öO¯H!“G˜&†]Ò¸´U©MØì|\¬ñíh¨„ÈÖT9AMi4ÃZP3¬i§ƒã šÃMjüDtÞ°¬i†E´ˆh)ÄyÕU,±iUVË=ö…2aµÜ‘[Ÿ6z1¼ic3w1Œ°ÖË ±È`CŠTY‹ÛƒV#1³òâõç¿'éiäÔs%=’™êjÐšæjB«¯ç·2²Tä;ô&Íö¹mSh' §Öð7@„Î¾ÿÎ¿eí_•™XÌ¸v^.fìÁÖ²Š7‹Ó¯üxû¡aí!¸Hq\^°†š¦›ã.éî“ýã§O6Ÿ˜Íü¾"»xöß»÷$¸û#¬ÈåmZr”Û&4y^l½[ž³¡ß9‚1Ø-bZÜÄzü «YÞ’ ç¾‡à7¼fÇ«š¥tÆhí¥¥£rtÇ‡ì÷è\GF„F~ŒW`cZó3’Ål	çyÇQLx4µ®Ð1[Ÿ±4xÆä"mÈ'ðQ¤.Cg²ðwØ
_Ü]ZwóQ
~áŸKPã}buN[vð^hH¦Ú›¬‰½µ#WIµ¨ò?ì›«53ÆN'¦ßÑÏ¢Øþ£ƒç`éA¾© ÖÕ"s%´¦±3Ec‘š‘Ë Ðõ'•jaßko&­ý”ÒÂvpúìLO$#DKZ®1rÀa=’×Ô›
klTæ:!=#HÉiúü #„5ö¾p6¾Õ0'¹Ã••‹˜y°fÍ™g†Ðù_jlñ8ÓÕQh³ÿ#[Õ ˆÎà:÷'pH	à
8+ÐZ©9(j“ˆt+ÈtÕUwf—Ýj‘5 <»z^¨×Xi”ë3DnÛÈA˜ÍrÚ‘9B–!œÄlÈÓ…òq=µHýuû˜è?l‹~;»Çuù
Þº´ ÄPÕÍ”ÝXÃ»ð…,ƒo/b-"CeˆÏ€Ø.Õ¡*E¡¥*Ù©ÖTa¼, É8©ZCSkê]ÂI•Qæ9ki¥C¯†TŠí ¹+OòeRR#ß†šÎC¨åsìëZo­M]@¼]Å^äêð6þ…
®s1¥©Ûç™qæ1›>¹ykyù…KÖè³–ÐØbaÍýÖ8v!ós|/meIjíAÕU½HHƒ”¹ˆ$µI{>Æ&Ø<BóB6Û—íÎNð =üîÌN¤þ"IOìkœ0¬Éµ?Ã›õÅØ&Äë»ÌWY­e²óœG»6`íåA>EZ‹ÊZ´ƒô¯®c v#T‰¿Þ^D´vâñ!¬ÆaüzÊÚ	.7€¶I¹=¦ËÚÂüÊ-2 u#ÞQ"	bÄQXí¯0
š`SÁ—¹2£^‡O‘ç‚³ç¸÷‹ÖÔû`ä-Ee£‘ÄãÖÙ¬©ïVf¡ºDýoÎ•×:7ƒ¦6O¶ØüçKŸß¹ÓºCÕ/¬F&ä×®Y¬É^„×¿tIväA>ù'ä=²ÐØ¤ÍŒüŸ—n–›u°0TAäÝHn§uµüÇÇ™ˆœû¯N,¥ñ«¤j”ÓlÉxp@ðr|ôýŽŠµ¿qÏ7ë~<?xðàéƒG÷žëªê¹¥ÅrE­k&¯—­—˜x*ê\=%ç*îT…	©*ŽÒ^Z	¢a«í±KÕ¤!8+pû§Ö9°²ñ¨{”Š²Ú–ëÞÕì;l	] ±èÜÄÃX‡ØŽkzy¶“»„«yx‹´¬»…ìG)jÈiÖ˜ïDll¢´æ&m31Za{ïs(j©Õ3-®¦9A¬fÿéDQ‹€ÆÆ‘BFÈÐÆÚÑ˜a}‡Õˆ>ˆeÄ³0ÝÅ1œ·.ŽÁj[°š;bóÞeYÕUk__cSÊÚwŠóÛ#½}#Û”¯)x{~îè‹ÔZ)µEÞ—‡ÿíó¹iÞïÓ¹†d5Ãš¬ÞÊõEŠ?òE² ñ:Öˆ«Ò#—£†v?Ñ›ËÀÚÿãîÞwëë$è©†c?§îjüâ†÷77ÊË½­ÒòHuú4Òcƒk¼VˆV’Þ
*SHP!Â–wq˜&B2LAÍ§üæ²E‡’ |1Š`Æ­åg(OÑçZf¬TH3xEQYÍ(æWu†c`5ã›˜™¸’üb%g"¬EwÇ¤œÌ)ŒœtÞŸOò
S}š59>êú7k†¨ð"¶¨Bé%:Òe­žJ´äˆ`Nsl\ñï5÷òÅjÇvöÚ”ÑYóWŠÉÎ°&†Õ&|ó~±ƒ”–âÃW<œÐj|nGµ[´ëwÞcÌƒôYÂ„4Â˜Æ˜S“Gzúw‘Ÿ©Xë3X;ØhÍÄ Í ¨Í1d-?ºÏš½8L=s	¬e³Æû5tã)qc–æ “˜¨ÓlF¶ýþð˜Ò5ldo™Õ¸Å<ÈŸàš@-Ú÷Ÿ9ó¸ûµ±ÏòÑ,T¶xž„¹ýä&X+F9-ÂZ£q’oÒ6#JÎ7­)÷±©;í@É”…Çx¹l-OV¹É–«,²:¨:`9Úëž'e%_–fäŸÌ¦EåŠU^ƒëzª£‘¶Fœq/\sŽ=“OpôùÌ	¤é+£I0MŽ*rî¡#5\ÅÊè‚ªÂ>ø—=2S
*MSÚe}þÏkk‹ÌJÌ§ªP£$¯ºX(+ŸSDætËRÉ>#D(‡l)WØ’vûœ-F€LÑZ£N
3›>Ø˜¯Û^tdƒ²¦™FÏ/*i y¯k%íö…«ÙŽ3™W*‹`UL½Öªõ…ùÓkkó·VòùÍàˆ´‘…æ-,5¿w[@Í¤¶Î]¿˜LìbºÙò.$œæÎ£	¬±9š”íˆ»bgœéêeyd]»&ÖRTSì_/Hr 5ú±­S³væÌ€m8sb	j¤GF&†z«Á¥—ö)kÔ.YÓ™!?ñµÂqiíPY;ŒÃøµMmƒt+üE67ßšÝœ}Ü5Mc³•³®Òæ>Û‡›ˆ4‚¾!)kïOâŒÌyrO÷)Krvb¤OÝØ8KÃÆ‰í›1Þþ"×(k/dÁà«ïÇú¸käflõš®uÃfõ%–YûDuà£°QEYkÔn-œ½óÞ¡ß\»Æ¸¿HjÜ/XûA°f‹‘ï¿ü÷%¼µ––ÊÌŠî†­é¡yÄ]CÅj3óy²ÏêÕ‡,·;*õ*iP››‚j²°·ÛXŠ¨^|	k÷_÷¿Ý¬=XðàÒÓg›ÏÝß¬ç™:ñŸ¤Îô\¾ þlG¨™&£cIM¦ùL•F*ÿ³ìÎ¯Ð®SÙ€áÜãš;¡1Í[ãÛ9Ûõ×„YL“ò`Vè¥+‰tç«jøð‹ã6A7„ê0Æª©^Ýúµ=u·i ©Î¥½ŽÙ9”÷•÷À›ýq{_FdJfá\Œj]×ò­Ïç§yñ¢½-ú"­™Õ^bV¬…ýÇ:¯S?ixmZKÏÄˆâ[GðR§è=Ê«Œ\Ä}k×ËªÔ"&ÖÍ_ÿöšÓR€5'É(…EÎuz­ðöïó’kL¿ªJÀtÄiXÌÌîyqv¦›EÜüL®ÇÒZµÎõS9oX/‚m•é•jžTHXÍ°f\#–Äw~Œ ““?¢·ŸšÌ>çŒkðéAX#1SÈ3;ËˆtW–ó«ËÍÞP‰£šÛçÀ=Á³!	ï¢¬æ?æ²Ÿèk)¬…·F»fÁÍG–^SS!„²Ë¾e¢p2eµ$Í‘HÑÍÄÔ7ŽL-–šB¨3›M‘wÐ“(ÍaX‹föæ¤þ œ4*±Ï4ÅfET	d<a¬'GÈa¬ã\„!ó¿ÁÕgÒºÚÏlìYUã®-–yzæ UÁ;ÀÚÆ•=Ü'÷ð4H¬Iè4ÅSKþžBc:»¯Ôâ^ñ*­­óx¬éF„c¨f/}Æ‚bd«Ð[¡}êi¾{c/HÇ*kÕ¼™™ëbË,@šÙYÆƒ–¦Ž¤òÚìœÜÓ§Q3Üø™Q™/J³àBÚIiläà¢ïHðé›Ddë†ê¸À~ñ±ÃêÅo­Áj<úìŸ™×ø‹°eÓk™è4Âž2èàl´ƒ„Ó,kì©®^ ¾š`JÄD¤^_ÂC¬¦ò4žÍ·ÜÇ“	my™öWŽPâÆ^Z°y­r«ä«ósÓ¥J9WÔëº÷ÚË¡¼œëšKîÊ@_¶"´á¥Ø‰Ú‰ûwåœMc™!˜JFkÅz³ÍT€Ÿ°eJÅºS‰ÊÚÕšN¥_|s{œú4Jç@¹êÊÌÌÂŸ×òíÕuLQHn3|¥ÄwWs÷A¡™ú¢®Õ)UHÖ)åÅeé[Yýú¢…jkçz•uBž”–ÔÆyÊ2¬ó/¶ex¹T®x2Ò—õÍU¾ŒE¾ºo¾¸ð° f©’Öœ–Yš¯BµK‹kÕÆÒââ'ëj£©•µ›<«¡¬ùòB>Ï/ãé/\#~lNÄÃiØ’*ºƒÌ6Á;Çlº2N€tÎLÆþ"ìfƒ÷HgÅÚo^þI-n”	¬=x d;CÎ£:zºÕÌÄ,Ä†3.W¿$z¿ºôÙïpYiI]‰oÎ„|þöËW|¥äÚšŸ»bÆaüJñ	¿q†5;BžœÛh,>}’„H#Ë7Aþürèïs¯5Érî?ŠÁ[•ëL8’U¤‘<F¤¬]…«âµƒÖýO!3¯1‡  -HQ¡ýÈcRýÍf’Öêˆ=S®sMâäÂ|u~eåý÷n¼¥È×T±áÏ÷ˆX²¬ý aíüá_þï—Ë0¦$´u4óÅA9ç˜­QäÒy2¡q*£Yg« @Òš%$¨`¡Å:!SŽ`­,•mêö¿ü½Ã
’y]åMÏµóçY­zôÖ±û_=½º\ŽDHróHMj	`@‚FhÀŸ–ïk<L ŠÙ¦-´Y“¨E©7'ä„…’&Bs’”xÍv"ÖäÇwŽËd0s¶Ò›J%ÀÙ”ÿÜñ¶¾? ³êÖ#V+IIó_òTÞÂR¾ÈúK^°D+adxCX‹›;æ˜Ôts>óÖ;ÝÓg“úØ(#jVåú8C6ó`:ÉIÔ±îNrŒNÄKe;[…®£ˆÍž‘ñs%ñ|GøI§Æú”¹=²õ§SÛJ”Åˆÿ›!µPñí¦Øt?ßzq~}÷ÅÖÖ=ÙHüí›ä‚Ð`[Íõ¹S<ç3Zß§†²dÎž<KŒZVÔ‰¢ìàÊ\J,vå¨XÛ8¹±2ýøq±\ Üãa*¤Éž_YðWrL ·¹éZ|Žµ5nfµtÇ~rwPX^
õ¦;¬¹ž1ê¥’ØbñšY,²™þxÏxqÓÆºxªÖ†Äk
v–"Jø…`f»ŒÜ^²çýì@dÎhdä¿“ìâc±{¶#à›Ÿësf»RXS$LâQÚƒ,&<
ÑtlF,ÆM~@»aaû¯íãº˜±hX3aíønp2áb7…54´sZÙ¸¶ZkY½ÚÔ¸•ùõ8qì¶¼R«¹7Œ¡O+iýÅ…¬¡%^ø5ÒY'¬™>™[Œè‘†û„ôPïí©bd3Çíƒ5aì>±,ÑÿÿÁšÃ­NærÚÌ)¿ÑÍ°g€Wy…‹b„5ilæ$ëlà™FY'IyT’²Fðî·	C="ãzÚ°Æñim«íu+üaô*`ãÎðÏ•¾Öälôòç7—õ¶.í}/ÖçÌV$}0#JG¬KFÊ/äÑ»åÁ'„ûÚ—ðÎ"=’OSb7)ÃÒ§*Y€õ’:A^d¯r?‰†§O/aæÔPÉZ[½[m¤4<9à7-'r>ñ–3ñ­´×Z.ÂôlãßuÏ$ÔhQ¬S•sšå½Å—À<i2B¢£âqqÛb¹R£T±/¿6Ïâou¼JšÉ†û‹²©!¹DÝeÎ)²¤_±Þ"mçå†þæ°LŒ•z‚Ð(V+6Kn½V ö®™/÷«_À”t<¯u•H¥Ÿ)Ýµq¤ÿ÷Û²ï—äí*<§‰X»ÊÙ|ž •ÃkU¬®çÿúì£ÖÉ„¼N@h`špƒýÂÚ¬³1ûò¿|Z°—½Ö9‘^ ËgÙ-±éÍº#›«Ü@­‡»æ"IøÀiVÖŽ"ß‡Õžmm±B~jËálŸç:B“ ãŸ5…<x®ï)°vi¬Õ¢®¦¸qêÆÐ+`íq§½ÈãCX;ŒÃøõ`íX„5íæ°È?yròèçö¢›ÎrAÝMÉÉLVM¥@9O€¡-¶t5 nl¬7…5%CëöSeíJ~&ãÛtn&3· HÈ‚ÊhºÍ--å8?É.Ôs]ZËÐ´}íèµ?}íO2éj¿¡^j#®£mñùJÖ>ûòÄg_þe5_=½0oÏüMv¹Ó –5á4„:ùQÑ†Âµ%²8
X@jQ’ÉÌ¥Z¥Yè;u9–+Éšøçy?p¡æØ|!úLÖÖ¿ã{»ôàÙ™ûžÌç¯4ò2‘˜éêGÝËWÚLFMfd¦^ùg©š W~˜ÔˆvìU;¬-SìÅ	¦KÛÜgê{m_›);Rç±áãó©“Ç˜ˆ¬¡`X`jÙ 9wísÒXˆ$H•ÔwJ kò4Ñ@Ö	É1vi©*jœõ’hIak††4‡iÓÑ²fëäÖRNSx\°ÌævhkÓ(kŽX•63PÊ'8ã£¨†éD¤/cdµ—Ž"tK×ñõ:âå³úÞ¹~ý±·X“qL¬XSçÏ)‹„ÖÐÕÎSëýâÅØd¯h­yÚ›Ôà‰Ê6¦Š™n›cVÕ
êÉ\sÊ…z’q5‚<	‘ÕUÌX?™ëÍôöÄ¹åaw?eç´kf5BðZpóW¡»»›Ä½g›$E>³Ç'ùu®—‘ˆ¹žØ\¼ÅÛeŠ`ÁÜáÝKKÍ{EPýþ{QY£2Ö¶9®êÈmÒ|’”K©c¼…CF$Îâ3ŽÄfÜ…u<[§L_¡^sì’Wâ¿iˆ‹ÉÔðBMÙEë’­¤ôO1F\ðDçx‚CgÈK<Ò3˜ø‹XVãBX3”E9ËzR<§Ÿ‘dÂ¿·¦Ñ¼­]X-//¯VôõìlH[ÛÃ*²²«í”—I†ÜãyïþS®n‘òh_‡Ö”šÒ’©(Ök¯-bët„ìdµ€¥§œéò³¨¦ÅiÑHÄÇFWŸÑ.¥5¶oÆjýúóª8¨¬í±TØÓÓCQšÜE`œi÷Vb¤El@ÂyÕeLºVfj’Ó’šL8šÎXçHªÉÎl™Ýúx÷>×Á±ÕÚAe-<²;DY-Ñ;DíÚ+"Jjìµ‘Œ7íÖ s>†¾b“lbZlfAÁ«’ƒõfÎ<:‡4ƒGfSÉŽÆ5ÎÊP¤ÁA[e¦–Ô†m¥m‰Ìò’$3>·kã,Q2Í5I»^;ÍWÈË­ß²sAe4½¹ï§æ¢ð_›{Ú’É"¶öÔg€|‚(u
e'Ë‹{`m´Òo_ ˜·øu>Ž	ãCr]uŸÍ?ü÷5?ú½”ò%WP‡÷SÅ^Ã!„H•,PNÞVh³©¯É°6<>Új•ÈT7pç(S“ÍL¬“Êœ¦6•Lj²‚¤"¦sÓƒÂÕTiÍ6ªÏ™ÑÅEˆemT’Û(Á,X­¢ÉÁkã…»ëô0Û¶´XMº1ÖQšº}Çîb/ï¹(§ÚÂß6ÀÊ‚œ #;‰GÝrÉžà1"£”Xõaë›˜Þëèë9Õk^ô†Œœò’ÂîØØ‹­!u‘Øz11Â)ùgqBK™Œñëi­÷…a-õîwOÜ:Ë*cÄñúŠ5´µOþë9ŒÃ8Œ_Ö€´ k\L¨Ìb.+#tŠª?”ížC,P±šÌ 'Ñ7„f¤eg$­1RÖ»É,#¦ABiþsPYû*»éÏuàŸÓR£šbwCNKó3aùq&1Õ‚Úº	fìÜÌ™¿ÿÓ×v—ÕnÅ×Dk¢%–½ÖÏ«-5­}ùè?>]¬.þóŸ«Ô1{N¤§¹!Ô@,,ÕBX«RÇVe³D¨Pº ½Ø£ViêÚ¢)Z«Èr
”+¯¼»Ê{ið(ÉóºkÖ¶Ÿ®cùèþ£¿üÏ%|K(GYìïÉ `Q*Pd®Í1ÙÊODeÌ9JºbFs>“¤CÚÁTÄÝ¥<qÚ¨‹Y”#Éic«ûœ‡ÖÎµÙ~¡8.5ÌM´å‰Règ»#6s›WÈó|Pa-2±q‡ÕÔ;¡7×­qWêdÛù%~¡Ó ¬áŒ±Q­ÖÂ¶3ëq«ÕËÚÚÅ+GY_£HÆkÃT–ä<öÂäÓáï1uQ¦@æ#µ¥°ÆÆ¸?kDzÆÏ2Žm_ÿÇõííÛ×‰¿ý¬)Îã‰‘÷ÈîY¦ÞìlÒžY˜ý˜*<Ç”ì‚òÏmu€æ–õÚ6¡Åz>_Ì¡÷ÖéÄJBqÑ¦½Ý¬„SÖGãkq6#\¶)ÁÌM¯ï}«ñp 4òMowå5òdS¹÷èŠ3äîý'OpvÝPåÛ2Æ9\	ªÝŸµÓvÛÿ‘Î{Œ¸¦£QKóÎÑ¡¬Iè
Ïâïqç¼¥1‰lµphe-IoÔ‘NëŒˆ\çàPËÁÏ ]’ÐOÑIÄpfN³àf¯fRÓ‘œdçhÇš5¶ÚÅxGÉM¨B¸rKÌÒßÓÓŸ°;ç˜ %ÀãSi£mŸïè¼¶·±ó.•‚%®8÷ö$ ,®®ÊroCyÍ‚>j÷vZ5Îî kk­^©|Èåqúj­‹þ”ÖZ?Ïi¯<à0†_9½á.Í”¾ÿ  ª0Í•kÚ'¸&M-±Q¼‰°ö¦ÖýÜ†I9Mi3ƒl³´Åž”0AÖ µîŒ	.¸	oˆi!˜žÔÍŠR6f&OBkV92ºpîãR{ë¤
Ù÷TÖ‰ÁHoß45²­Ù¾*ÜìÞ›¶,/ò'+V#—¦5—8é‚Ö´Q³ÈÝÁò$!íæzŠVˆŠ=òÓ`Vê×Ï#±åg
á4Â§©+Ãkù<Ge†Õ8U+,å('ðz¤d#,H–ŽôcAë	„úsP/ µ¬=hMQ›R›N•w*(ÜS*ESy²æAkæ9W™úæ›ã7ó|ÆW¿á·V¿»ö`üÃ(]>A9%Üžrã
¹¢FùàÑR¨×¨Ð÷’4à†L8 ¡éÍª.ÅMWk’ÔÊÃ~.VÆ•QZfJƒqXobÔ¯i‹¼r¥x¨»*©+•ÛÕ¥‡,²Íþ´ö¿/@nšÜGÕùM“UM¦ÐÌÕàÚ|±´òX£6íL´ÆÐÖ»Ë7Ÿo£­‘TÁj2á•Î8º #é&æý¼Ë˜$äêÝ §¸	Û„ó ™“‚µÐA{‚·ßn'«9âûOn®Y{1‚—Õý<·¶Œ_1­±c¨#tÄþc‡”y>…µk1R>::ÕKÖ^i©›XíØÝCX;ŒÃøuâS	j	¬m€kÕ²„•52¼¦Qðjhl³º"ýœÌk÷e¬ÕK}rƒŽ.ûþÊ´†°öbŠŒÌTÈNy¬tsr¡Àœ“þe?Ì™Œ’_fHâ?½òöŸþ® 	¬Ñ;RÿWÒ|ŒÊ:ß!Xk’×P¯®­•è%è0ª¶^¹ù¹9ÕÕà«Îì˜çƒºÄ<X,VÔùªT	42Únê*¢YÑäÐ,b7|òý;WRDL‚aíòú³û¤A>½ÿè«¿|²TÕ1iµ–+ñÂÔ„RŒÁr¡úÛ„+˜Š/{-ŸÉ6Ï½Õ<K2ŽËfDn±~ Kn\òµk¾`®¹-Ñv5H-JwáßS8se	M:l¹vÍæ* \Ëž"2ì¯%çrð,ædÍÅÞöÑ¤ÆŸŽˆ¬Æ(8AÖólò8Ös]=šå–ª¹ýîÀ2þlÌ$®ýº§ŽÈÒÉÐ°æ»!Ž[êÔ¯ñ“nkao~ó0…µ±ëÿ¸ù0)$AZ 2Ì¸.’X_ÿø>y'´eÃ²KH :S%s1¿'
õÞ!rÒ6#•Ö8O‹~Õ²¬ ó +«¤Ê.â ¹\mtÇ£ãy| •Õx…°ŠfíÉlëP|»ïÜÈg»»›b·M=rÿ¹8BÊXÛ¼{ÿÙ±¢ó ÕT×514ürdZˆÈ[Á–†9-=HcÿŒ`üýˆpÂ*vµ–Þ&(Án‘f²²V¦{,1ãAKc<b5§™õôTBÜ–š·~Ð”'"ã@/âR7¶Ž ml#¬%FˆFLZ#È¨+9ö#Db>ÂX°tÄ8øóHâ4b|k¢Ý¤@1#y§jT>EwN\¹BÛ´ww6Ú-„´ÕUmuÃiÇxOÿ½åv­îQÞVQãC¾%.VÅMáõµàÒ!­½*^û ÿ¾93z@j¨Í€_7ž´ª6üÖ]IÚ@Bm†53ŸC»ÿG´v Õõ'!
[`¢ 9¥Û´¿KÛìœÍE²>¡Pu¨Ž¼‚¨4&Y+kVÛ8VQÈ`Ë¾ØÚ}AšÙÏ(kûí Ï<Î<;ó
sÂ/–:ø;°	°ùØBû4˜ð«õ¢am+ N†ÅsLWèjÀZÚb	‘ìGik9Õì‘¯O el07$ÿ{²øH€ÖFHMZ`¬rj‰„¿êB¶óN•î<Ö†Åá#ufˆÅ`ÍÐPJÚ9É]þ½±wýeÿqV+Ø±JYÎRØ“uMŸhk_ýæ› q*¢˜U5Îã‹T²ò*LSõ"Eu•–,'yŸ0»Zîgžlc)H³g¿— 3¿ÝÚM)-ŽE®Š:Û œÕ5}µ*Z[ÅßRí´ÿ{çó×™æûù+F‚’YxÁ„1B&
5”puÉVH Tjc5U8¤²ˆªmCwb7qì¨f¬dÅ½sí´”ëÁ‘<\1B­!’-¡^Ý»°}»…²™MK-V³ëà~¾ß÷¼*ÄîtZ×+ªÎyÏ©â—]Ô{>ï÷y¾Ï0zÙ8áªé²r>ö†çHÇq/Ïäì™dýÃ_kÐÚ8€V,º'\Bˆz+×77»&Ÿ=]3ºÖ‚¿ÁA¸†ÖX­[ÊåÈ8’Åô=!—Qµo!Äf¼ßw…ùŒÎj¼Ú8!3BëÙL‚:46\#yeìÑ:"²Ú±ˆ°v)ÐZÚÐ—ÉÂ§#h¯Ãô×2NÂÚI7HÕ¬YÑZ*­y š5¡Ú+…5IkVÖNaí4NãµÁk¾ZÛ¿­í†µ‹;95{œ™aâcÒ™xÿGÇ¿ß¹< ýw`”/@É^Ä;çÏ;R}±ÁnÇaíáNZŠ=CCµÉ«Ìi6ƒœ¦“4–Ì¬j^æTWÞÇ¬GrªÀj½vëí/Y` fÿ„hm?ÆÏ‚yÿgŸmN'ž›ê6|VŸµ:Ž¾(7“ë5Ü|ëd\T†Ë*åI(j.2R¦­z eúU›\C4ËhP¬SB(<š\¹$NË`°§¯d½H„\}öìáÃßÞKTð]bN)¨¨¢<>Zj‚ƒiË Í±ÌPò,!„CÌ†¶{TWkƒØÂ²GúÔ[9=Ÿ±àN·æSëœJ[iã"§ýj´n¯ºðÄý%
¢\F´í„<<NrdkÁÏW+5t:PÖÂ³ËeÁ3tÊjÆ4¶ÔbåZŒïfA&IaMuð,íT#ú:'šž:&˜Ž
³ïÂš53n3Ž.‘ŽŒÚŽR#_kUiï"«ÝaYA¥åÀ‰üWƒl²³qÒÖ>Ø~¾Ô»D"ä¶—GsÊ
VßŠIÍ¹)uµ Û‚·LÍê‰]˜œ½ä¦I’U—µQ²„xuñ¸©TÖÈØ¹Í"°¶1|ú÷èjÛ”¤qFø†·ÛÇ{’ÖxŒäGó²ÚŒÁ7ò!¥—ßÝ8dµºgçB)½í¶ÄÒ±DÞ0v@`Ñ
ÒasÇxÂp–=õØ³|ó³ÆÝ£/˜CŠÄH‡2ƒ1„æ$^Ì]AovÄcñÎ§d°ÆÞ'ýUPá,É‰Èkl	À&P #B”6’ÀŽÐ$ÒYd7Ž5$|Ø/péwªŽ, ™ÎŠeü$ÃF°1¬ÅÐØwÙF!;D=»ÂÇF{¥uxe£Ô>;XZ®Âj‹/’å kI«ÕOÉÚ"ÇË¥eÃšÅÁ´³•`Öà(ìo€µH{AeiÆUÿ&Š¸jY„5Ÿ1«)2jãñ£ô†èè¸ö7ÃZŒÕöXasG2”5Ò"ôHc#6×”Ñ¡aÍ™ùjIÏí¼ønlJ†Røå×§?Hvø=lowç¨Šv?ùòí“×ÊÖúö–¢åÑËÂœæÃ^ú‘¥¤©„í8¬a÷8I@kLü‰Æìœ|E8Ác…<n!çš(kœaX/Sž¥&4’Öäºïˆ¤ìÒžü,dF‰X‰sUVåÄ`8åçf&óeæ5$õ®À1!"#%Ì´À¾À¤D¯»õf?LÔlÛ‘Ê™ñ.
<³ŒìFZ$ÙË!DiªeV‚Ÿ:ZU®3Ÿ„¾…'>ëvð¨jw®ÑÒ‚ß?(3sóÿªi­-XÓïÞL	ÑÂÇ—Û~r6u,¬õ‰{éTYëRUy¹–¤­ÕùT?ÛmgS½…1ë×F™ÅÉõg©9]³bR['729CJæh£‘0'øA>ßÛœûW¼£kûAYÔØDmícÇÚÁÁÇk›Yy"üo~KºP™öj|“Oÿ“AZ‚ š[Ÿ;¬¹Ã‹ôÚ÷®©dò¥~¤C{_o÷lo3oåFväéÖ{4:¢®Ç¯ŽíU`m÷ÖÄh šµµpÁ¶ëÕt>^Ú[VÖ>úû¿;Ó8×”IHX»@0„ØX„ÜaÔ2&CJc­¬ÉÄÿwº0}f{×þ‚5–-§01:O!Ûî©;id49áùl²;ÄÌìõ¹«3¹ÞÉ‚³Cò¤‹ìtçUNFEòì$}3et.ÏÚ¬X¥¬7Þej?QéZÌQªÁj´9ÖäyðøýÇ=¥ÑÚì4Tàî|½#$|N“×ÑÖêõ3M‘†Ø‰ÖjEÈƒ{Ü›%Õ ¥Ê¨N‚¨d”ÄÅÆÅ÷®}Âû·ÃªK¤5½‡Ó‘ûü >þæ·ÊíÂZ-Ÿ›¤ÉM†Iš84MŸe–qAœt6„.Mw¾Üä*mœXá •VÁòb+6ãÚù55Z6Ü/}%ž/NH7È	¬áB†¿Ì KgÅ‚µèiX­eZHgú…m,â¤JsZä5E»¹pŸÐ6‹:`½ µŒ¦MS6­Å(ÕçAtjö¹ÇÈwGXã±œ61Bÿkö„GÑR{‡ŽNÀ£8ŒG'HÍ†¼D÷‡.¼ÿé§ûÀš&jþw¥¯™Ðy‘éÿùéÚîÞŸI»›¡±1A+›# š…µs3°6Á1kòVá¹Á
7Ýý›¶j$@ŽV¸›.bS¦VÙÅuòwÔAb}Öjó‹HióÓ÷DfÆ5¥@º.ÍI:ÈýÉ)›7C£µçÀÚ7Èfp³ä½ÅÃ¤‰—\×‹²ÿÓû[Ç`•½|=F¸94áóD¤¸ã‡ùb/Ý_uå¤Ä4ÃZ@0!–¥5SW(N3ÂÙ…DOwö#‡„ÇQ›¾PÔÓVbÖ8GˆFV¬±×‘kR,‰êZ0ÑÓæŒà†¨QÀ³ ƒÅ#Î
9ì/ž…>Ï2oÕ§GŸþ¬.ý‘ð9ÄRŽ"Zúºr¡½Rf°Lòãòb"$i¶qî¿ðÆ¡ÚX½ÿ.B[;ÑÆ¬A¹Ž¬Ëé<Þ0í/$<ž|Š7±úeŽ‡q”›×‹;F¬à0Â`nð8¯ýÓýõ°öýÂš74‘N£0ãÐuñ¹Ê•¥kìGH»€ÀpÌ‰‹8	§©Œš@Ú€Ö0à9¹hÖ8)¬;¿½½´ôDÂZ„µ/OØA*gÑÐ£×Uk¹W¡Zgè¤Ò»•«)ÕL!xs³µI§ÿÖ@2+kSMœD” ­Iƒƒ@)$ÔuMÒ!;ø‹AJ¼Hùën`tŒæ5Z5˜QÐÆ”¥é(ùéA!y„·yR%‘™dðOwé<wv ÒB${ÿY1“ì• ë¿v[¨xÚÁ‘,eßiÎòYÔ;HlÄY­5ê¬ÂÁX”òU”•¸ŽâÇ[Ë}9ù«u7[­Aº ))È0€¸¬­ÅàŸÀî•úÛCçƒÇøíè¨F4u³¯ˆ¬Têj Þ4Dq]ÙåôV[¨òT‚×²føÍ±ëE’Â¹ÊH¶¨»˜kôƒ|·o×6WŸÝ›ýïîF5³Ú?BiÜ	6Ø@Úr÷`mm)pšj5X3Pc5÷Z»è›S‚5	j6‚T«5ŽÓFk>‘Ó‹8ƒµ¡©‘Âš#…µ¡`Ø[â}©Oþ ²ë%'2£µX)kÜ‰—YŽ¬º)v¦¬¥¤feMñé‘¨–;	kQY³®våÑ)¬Æi¼6eíÑÆ†ÊmR s‹Ž«3³ï;šéº(Y3¬¹+¶ìÈ5kì´^i»Èt¶©©ý—Gö#¬Yû:Q³¶º9‰ú¯ÒÚQÞÌkWgÄoZnÄÍ?_Çk~–ÞQk¬;Ê$!…±·w¢Ð÷Þ—j¢r5Ã’+×xcÅRæ¶8÷ÿß{<óø³gùdx¼R‡Í’ü¤²GêÈiõ†rþ·*šûj	}¡Q‰†þ_¬èÂuTZn#5R—'­`²X¬M]úTïki|ùI°õ5¬=­IÙ{|ïÑ³ßt!Ê‘kÑÓ=Ù`i´úæ}Ò-À·é`ÅKçV†ò&-£³²©5uèèg„'G÷ÑU!†"Dû(íQ:B°‚\Ñ¨Ep ×“›.µœ:Égƒ_ò†\APÈtñ¥ä…0qçÛº{v[²GUH”³¹{ º°qUªÛ›N„tº¨–Wm3¢‚íhLëÔÖÔ®ïMîØò;¬…í|þˆØŽ§opt¼ÅZ:Hg¥X–ÚƒèTŒÈh¬vèBÞd€µ‘kÔ¬í?øó>ýÜ¡5HÍ¬ÆÍ6Ìœï3PÞ=DSRÚ¢2ŒåzÝfdï˜2„Ã”<•Ó…£Ý¿´ŽÏÐ—u”fÖ¹šP÷!]‘±2A)•ñ¬ß_ÿ6´S¾ýmXªÖLkfµÿâXJ›ó#Õû±»bCmß|ó(Ä&{H¼)|»7_*Ë5£LÂ”¢Üt‘¤³ ®Ó`5mb¶4"¼Å`ÑNáó!Ý÷Œ×Ø JùP4>¸q‡Ù(Q¼l-bê²ô&ÍÚÆ.ãQïr ;`-T¥ÅVÚ 'u9…µ¨qE¬Áž15á8Hi§´ÂQÌôØ	Ž®R;s	þõjŽ¬ù€{ªªe$xÄjêÐ˜$‡ú]6­I]+Üœ® ]UyûÅVNíjš¼ 	\G¨YÊzf2È=Ôä½ÃNžäð¥ÂÛqûÇè%!–ÍÎH¦Øh>bX;sÔvMƒk?Êò¯PÖRM­‡¼À4zfnÎòI$§‚qo+nHm£Icc¯¢‰`ÆÊì¤­uMHêèÊÙŸ/¬©Å'ëÛ²Ù[êåÃ°Öy­œÁÚÀÒžbà•°Ö™éýd7w6üÈ‘åbñšû‰I`­žÂš¬!1Fž›mœS4å.2
Në˜#»16ÆDÝê¯Ac%U²1OÉTY’­ðmÂË²åÙ…†<‹4²®2À5·‹¥ëø§EgiÂïÓ˜{¤¨Û¼ZCÑ'ÑNß¸Ö_nÝ(»…‹-•¹àlèªPªv}¾2šð[¦ãÙøJ»Dƒ³Û³ø?²ºÎOØjKæ*Vù‚î¢AånYmá˜ .[ŠÄh
ÖLkt^UÊÞx…Œ¿k,DÈô,“Ðùæ¿0ÝÐ€ÉUŽÆi™ô8°VK*xHI[p”Y±¢DÝ&(ÅiD=l*ÃÃ[µ¹I&GØ[ÏžÝ+}µ+,«™×ÔjMIûŒ9…¿ˆœEÖv'º—°cÔRvn’ä£îp5ÃVyNÉµ%$ã‰Ø2Ô¬6fp.ƒµ•h×ÞÎ
Ö²ˆnÛVÖ‚'¤ç»œ|­4ñ`ÙOj‡m’P¡Ÿó
»Ç³ÕïÀZˆ¨¬í_5q/…5\ U±ÆíÂ)¬Æi¼¦øi; ¶G4Z»paæÖ?Ýºõ93à°’Jú0C¾˜Z>Bk ´}¤@*„m¹‰ó#!rd÷ã}"ƒ5;Œt*kÏænA€Ô(ÿq.¿³ÃÂ£û¬qÉ^è¬ÕiÀ¦š›/
Öæ(mÂÐ¥Ow?Îb¢Âm©íª~°öŽ² Òèì·¿MÊ£´‚¡Œ:©Í2=â²¥l¹³Ø—4É‘T¦û¿üñ~¹©<
5 m–…¬C–›ž5'Öè´v‰oæ‹Ëÿ)G‘ù	èÅ¥À=jm’9’Ï×mæºÈ:kÂj…³%e^%ªßZmjÇ{Î‚díp]¤ -eJYóJf»W£Y-ÀÚ—²”È"¤¥ð6˜+0´´Fé€Òî¥¢6uË±"‡¥äÊ`›¨¶™tDûqß6«iËÎ7¡G€WW[¡¶{&³Á²mŸ‘hÉ¶ÕˆÁ›@Í!J#Öuc¼nXËFâQ…Ð–KŠ„–­ÍYAYk$õã´–îc÷µhàlEâÎ°&ÎrØ¾Øq‚ÊâIo:QÍ¡±c÷Ï~ú¡FX#@5—Eb9Jº+¹#O”v9Dñza«³%Oq¥åÓ¾¾‰nöXŽ0]«W/•<¤~S.LPŒKêí@ÎÑÜKÀÚ¨,ÊF+ß.×¶–—¥£q¿«Öi à¦pKljÖðõ'ýñ‰nÄQìÇ¿ñá½Ò2›»÷J*b±ûµè,p:ÿ¿ÜVüßÜÁj&·NÝÌÇ…k0—vâ1Ãš¿@»Jn›eøäfNc+BccÛG£ 3ûãXŠoþŽµWØò‰ñü‰znÈÎ°æO1eöÞkí©Lk¾û/&þWS	{¶ Z¿Õ!ßk¨K`ìÚŸÁàY­ÅYŠÓ’d±ŠEPõá<…Å´qG¦µ*ê€zbßãòX#ƒAg—ï¡Èe]Â³ˆ°¦ø°æÃ—DFk©£G—eÿ™ÃˆN‰a-¬ÑÒØã¯µîïÿáf J[BŽ˜‡›Íûe/‚yÇºZž’%d—ìC¤]	ÖºÅhçyX6&ãyñÉnX;è	ÍƒHQö¬Wlã—:sÐlÆgi'’—QZ§$û."n¢$ŸŒ¢&>ãÎ¨G›Ž‚„Vç×up&?;;×, Ï‘yÆÏhÔJ¸@*µ~šÒgÂ.#%x`¹?[I©Žu¥8’÷ß%«ŠŠƒ¸F¡&DRåu»t[´†UŸO€7	¾~cÆ•ª:MØÔÃ	ôn·fÓa¹ä§žUôWcªÑ"Ý‡¬Ø}xß“oLgA§âí
•j7Þ²z6~¡].Î}~ëjÂ“ª$”ªT™IÔÕ—ÔkN¶•¬’–ó,5ÙÂ­ÖÊ¨‹ÓdçësÜ• lNÎ¶Ú˜a¾)“b‰µÔªŠ²Ë£¬*¤T›/a9R­pÌ4u_Bcûì9,W ·ò¹ü™3…Ïgò··†É½™«—ª*é›ÿüÑle†×Ä~ÚfÍi¼t5ÒwÀ$®¾Ýµ]R&iV–9ýþâµ¥ZIu)cnK] sc,×ÙÀ“ÛÄ˜(a"×ûÞµ¡¡K|‹/@-“wk×¶ßwŸµm®.„ˆçÔp!fºA¼c‰ÐthMâeŠZ&¶­‡µàwLY#½¤Oóoî¥=Ö\±6!eíÊ)¬Æi¼.eí‘uØ¸÷O_!©Í
©Z´™¹P-´ŽÂ4»óï—Ïû	pc3Â»ë•S\±îïß‰v€Ú÷*ko*µ¼:CiZ~RÞ¶°Zl1Êä„¬Fz}CïƒóÅiwZƒÕæ&.ñµ‘Ò2÷|±šÝóÝ+X÷ÿÛ×Ï$ÍâÝuf ¾X]¾[yxŒŽ*²MgvÚb†œ+®³6x_Ïj
ØÎå§ÛxDÉ²]fv3­-£¼ï—ÏM—Fço½ûŸ,·Åoíø¼ö ¤A®í=ùúáãÊÂ½Í7vrx˜©Ö.)×óÉ×Ë‚&¾Ë¹þ2WV74Ã`0HnÑbÍef/¯mÖZÑÏQÝoÄqF´ …ëè”ÖØqc^dªå©Ì®\!“ÔÈ‡3Xú5’ ã Ê ‘Öjà˜ZÈ±Óišaq¨TcìðiðX#4ÐFhfV‹ÂZ¸/D<‹Î‘ÕF½w2IÖHlÈø3BÁöè0¸¤ wÑ8„Qg]÷pØGT–†¯?ÙzbË`äWþ/(Ö BÉšþ‹µ_ÙsôçÁbd(G0é*…A^ûç‘Ø,§yšîsªð»vØ&
3Ðú1x]
W+ü³L÷Ô‹%ý+•XV^®Ä5XÌf"„`Í)ÜØh€Ìýñ‘²fTó.´[3¼-–€„î.«›^d4"ìS7H6F­{ìg®"ßU×²œÈìT½Ìjï¤øÂU×Ò€3c›U1öEXã|
f¶ñÓôIò´“¿Îá|Oû_a™¿´\
×k.ÔlÇ6Ö×ˆÌñÐz=S©›­*ÕÚòF¿Ó# ¥²9Ê”µgh¡vX^|‹'¸µ
[B*© mQ¡ÓòÝÅn$Ù ÖÁvnL¬¤¿UüÙ1üQ°Æ0;JÈJÓ2:ó‘#ðXkáŒgfµXJýûÓ3²Æ'þð>kÀš»­ªã"zÎ !A-ô…UDðlbªÛ²ÔC.…Õ°3÷óØyÃš£—*$6KÜS×¸`ÛO \lGX;©l7H¬#ÿbtG¶cÑ”58Ó•kVÔ8ËÈ°ÖÃ¢$¹ùŽ.9ŒÔgoù7Ö¿…EÉïN$Ošm!R¦ýêjM£ë6 „€EtÿDûRðÓç—U½%ß]|"µv?¬Ò,#­•*nw)Ÿ©’Èm!5>3íè‡ô^à<øàf9@S¦§g€4€/A?—ëµb{a]åoü¨yR2yîB±qõæçWËo’ÌáŒE´=•æW§ƒ@d	ªVR—ƒe“ïßôb3¬ÚêHlÓMèO	 ¸ ³TÔ†•	o®ÃeJä—w¿s:ËùiMi¬Hò«ßÿ5+ŒØ÷7Ï‘ 3|¿ŠáM‚n’!šPª@IÜKTj_ýï[›p¨f\{ÀM×°šÛóâ¤«Ùš7H–íîœÏ	Ö¤¨¡’9‘Bƒ‰P)lsßkki†µàR3Á€ÝÀ{¸Tí±ÐÙaÍd³ªÉk#ŒHÙõâÂöÀæ"ò„‚ÊX+d×&ŽY‹øöjXëÝ¬TÖèîøäÒ5£ÚË›¬¹bT;UÖNã4^[p•·IP¹æ¿½«››SöÉ'ùâÞœWŸ7Ò5`¸Ãõ0‡ÈjÊ‹äcræó/†Î_&ìŽ\’²fØï­Y[=Ð\zõª˜jµ\¯;”ðNÐMØÀ	kýyü9ðÐšOTÕCzÈ\}jªP8ïå®ŸÍ®3’X}úûÕÏ°Ùd=²„[C/-e“äoÕµ™ÁŸ(K¢ÂŸ›…Õ†+¬QÖëLtòÚbaÐ^È!¤­á0i€dô—j_Á¡¿‚Õ²@u¡'×ûîÈ«}ðõoîŽ/¾±³ÃeD.‡‘t!ižËSÐ\ÕTCr¥„µuÂ) áÊ¸aÍK—mé\b®ÌXá€þ¸Š"8‘·ÂÃ$à² klqª7“ýVpÏ[Å„iêHñRrgU•qžÚÊà"é1$KVU0îúµê óž-Òšî¾ùî0¯¥šnYÍZ6¢uôÇ®pyàBÿÏ“ÝÀ:5øÉL™O™ÍÌhéw"‚[ÓUÌ		áa<ûÝ^lŒ:³ #¤ŒÓãÝ—veúõ‡?óñ‰ýq«©~Í°ö±—(2ö'ªG3µÙ’ÈÐ åYýäYË`ìÚNý*$nå¦¤|æu°MP)]cuÙl,½¾%,»‹”ÃnÂ7g´™	ixök“ŽÙ“	¬)s‘{ÝÓõø¬•2zK’O#aid)5Ú<²ï0ì„5oã“tÌ32´©>áMìf¹êÈ)»ïC#-‹adÆCÑ’Ÿ›îsV¶16èéaöRàx<ÒZh¸&¦‘Q	#GTÖP”ã½Ïkýõœ(2	è”òxFÄ Nëç:—­ ŽÛ žpÇÛN™²îNÞ+éO’Ú5Ä´ÖÃ¦5PÍÒZRæ¬aÍ¥j­Öâ†ž°ˆëýÂ¨í0áQ›ïlö
X;ÚŸx(Ž23X3SÅ£Hgæ°p”V©ÅäG+Œ%°Ùó¼öc”µÚZŠÕ`Ç]ÉØ©õXèªF7l;>’]ìCÕ$w“„fgáàÜÏ>§\4W­ÁH¹œðNw5»R)-7–„j²qDT;!­m§íÕ¸²ÆÀÿUiq#µo·%%êZÎÊÁ¥<•l`¨£Ñ a{‡üE
ô)°…+NþÒá9Òöé»Fö¾¼‹‰2®Þ¥
QæŸ‘†Úueˆ6±Ó€>€5nEWmµñW¬U”þXÓ;pÕVú2Œƒ˜=V~¶Àr¥|ŸŠLB©¤î¶<ÜŽ·ªþ{W‰·Z«‹¾ØpúgHéüµ*ÚÃëü4¿¬$"ÏfÝ©6W/–eôQ&	ŽOpŸé–°VSEr˜í Í~’0#¬¥y·îâÇOÅ
ŠtD÷ôo·)[Ãý§Î¼EnMZí*°Æ$§,QFšÁÊÓ@l^g‹G%Ö+u­¾Y#ÄŒsæfÒb¹T÷JU¨ö«ýÝ.¾ý‚µý¸ÜÌÆñ\À@kû¬1Ë?ž<ßÛ¾¼ÝÛEÈÒQiê¤9Ãá˜Fº!2iûJŠÎkbR¤jÖzÓ¹Xëì†-P‹µ“œÖýlwõr%è¹64@ò$-Úk¹¾mÍhÜý¡ñrV;˜è¥ÑPk’Ô¸ìûê‰ý
V‹NÆµGw§q¯Ö66AYcÍw
V#rê.úÕÊÁæNkQ
·éE Á«“•š`£­YS¸zsjjHüÆúÓînLƒü^7ÈÕ59óßºu3´‘t~wh€£îÛ”«©¸lžhLæv!˜Ö4ÅHÍÏO~nk¦ÿà,+Y#eM°öóŸ?}¶úûÏVI„|ü°ç\R®Ô˜^1÷kžJÊ8úÖóÓµ­Úì­™Â–#ykÇ-
¯‘XéH,¹-vYZ„®ßÀàxU¼:rg?üR(kÿ!XÛßÊw_{rðô³'/JßV»Hv£çh×D¾i3³2Ócä³*©lR<ŒfVÖ˜1	­ª-ÕÎlÌƒ5ÎsÊÁ³•òÉœç&ë2Þ¬¥Õ>fm«
ˆl©¿Û Y•¶}.ËrD-{úÛéµ;ß¿*Þ“'d°—Œ¸ö&3ßIVŠšºÊ…ôA@4o4tTŽ"ÂZ^œf)Ín"i“U¬éÎÐ;‹bf-f©Œ i)¢Ñ¾/7R£”ÖœJéSC{×v™«T™õZÓXX“{3°–N‡}ÀZïÝÖœ<BÄ¦õU3›*:#«ÒÖòÒŠÉiJpžî)«Y8ëß¨küÃZPK›¬9¼7Ž‰ØÌf›ð»Hl„N?’ÉÑÈ…Í{‹5X-©)É'êiVG£²&]uñqÿ·¼LkÖÍN4ZóÑI»µÝà&ùx¬ ›ñaM çë`l¢	ÿJÚùZ‡Äp#|ÒO³Ðæ¹é á},ÁùHZã;¥>JƒáŽ\úcQã€+êÓú±j8ÓO‹1 ¾¬Ù¹?êh6“”üû¬œtøh¡)š”þ˜œ¥ ø…"9j—U‡HrjÃŒ¦GØ—ÄpË­*U[/úSÏþ•ÖÿÈˆ´ÆF£`I¤n±Jè€5‡q”øÊGŒúÎíå}Öúuû+›bƒj'£§‡»´§Ð†Óö"&šsÔv]t@^dfß ÀHMÍd5bË~M)ZedHpé¬Orù¨Q?D]zö=—-z´î?Y3”¦A^Ö}C¹ ®uÅ¿ˆô4`Ñ-Žò ÍŸí&³wËëú|ÝÎ*M*±ðÆ²Âf¿þä\×|#Oq–5±XYÍ°%
•¤”q² Úr×:%ø!(Ö*8ŠÈnŸÞ1õÛääOækhm%7t©ÊnDsUjÌ(.Š«ÀBí¸N³pÃç[jVÕD³àT‰ûf6ò½¶ÈT…>\ýð~3Y¿A­—“Qä±^™¿^+µG×Ç!Æù&f²&N £2Ñn*[-ÔÎbÿˆ®•’ú¯Ïõ£ˆný~k‘ÌßO2JÂK¦?˜c	Öª~ãggF¡ôWsé!~Ïã—¨–‡±ì§´4Ìòt]?8r4D˜/Î»%¸23IÅ(“Ë‚UWì5VåDéûÎ€üDÂÚûosYC—µ÷?àÍ)·ôdûÞçÏ—À1^X]rÁÚE[’ÒBÍ°&™³9+ocÒ¾Æ²
6'Oöö]Ö´&Ð!ëÂj¬í]ÛÞûà}Õ­{CÛÒõFF°ñS¶=“ÅÖCçRBó=Äq8‹ÛzôÀ¬FD.%œ`m·ow÷å°F¤Qw”µSX;Óx}ÊÚ7À¤ÆëŒMY“‰Šöx†!9ýAtzñæÍ	#º,îÛA'˜$Ëdíü¼kôõÎÞHƒ:ÑgÇØmÍ3ð]_%=Ý¼iÝœÐ;ï#yD5Ú”Ak×…Â\AomnœÝÈs•;9âdòOl™y÷ÿJ¬½CWìß<øpóá³GXˆÌ<1Úû˜v*Ü˜ KÅ*N¾tŸÉäöÖVqk=¡’$‘|Ó]Å$'¥v[ò"w²WÑäM~±ôÞµ·¡µ4Sû·?1¬=X;xþÁOÖV×çïÖùbÈ%Å:Þ]4è‘¨W
Ó‚pªœ”l	*a?.{ñûŠv\`†hF¸úÌ9j„ì“¹§W]~MÍ(g]ÎâY”mmD[-ˆMÎý’äÚoÉOÙ#BP›Üñ¬¶.¼êÔËõËODÊZ`˜²íÏYM]Ü¾k&2í<×t„§w>Ò¨d!\ËCµ˜fæ
³ùØÇÈ”5Æ†³Î4|°*öOã™l±f­ƒÎ¼S°;	kâ4î-Ù¶¯]Ûú‡àÖ¢Y;Áÿ23¶¥µ×¶=-z½žÝÅ±W­g¡á”ìE8pëøÿÅU÷x=—÷µ!?ë"ëÒ%ÁZòíúºíúïnnÞ]dàø/îQ@»k¡¿Ø'O1Š´æ-.¶!MréùG=.*×Îam6ó‹QÖDmŠÌ2Ä»:OË"šö‡dÈ#†³ÑÈ[+:G¬ð¢’µ2sŽ–`qÍ^þÓ1[…Œ­‡z^šì(QÎÇ&¿Îº.!‰¶x|Ôe-eµøÙû:0pŒ¥5‹gÆ”`õsyMÊQh{m1)ëÇv*+½áe=pœ¨,…þ´•ÜS\!.„µ¯EØ,èj¤GBhWË	'tÒÒ›KÖª÷úýƒZûñ”öe‘>2q-«R‹°Ï¥°¦ÇLfqã7ƒ[?®fÍœ÷Ã‹Ö¼Ë«»¦ÍEà™›h@	n\¨S9A;ºUÉ@™mFHÑ°Ô¦ŽÅ~ÂTX#ìí]B¶¬ujVÖ²4È¸ŠôQ­ÓhD½:fk&FK…F6=A¿
»@¤“Ö°AnÔÅ-‰`MÆ#–YIœŸV¯PUŸY[ƒ<œ}ÌV¬&²`·H99	¼¸UŠ°Hµªê°ÚmÒû™]+Ðš |(ZÖªmµ—N”0ÉPïöÄøŠ\úÙ“ÒäOgág+¼ƒ#d«`®ÜßÑ»::Î	 ÅžÄ€­­a%I~ø‹_^¿~»6ÏwÛ&•%¡% zXQ?4°3ñCÉ:¤ZVsµ&üö²á&X£Ùµ_aªF°Ö&AólR’qd"EŽI*t˜98åÜ­ö—øBºfÙÊÚeçà--åV™Ë7‹òã¥~4Ak¬•“Ù«ø6¿q°¦DG¸lÿyåð
³Ûîî.=ýùÞ.¢½;½;èijÛgZ›äÅ”#Ü[MVþ¬	LbÜœ™¾9¤¢Ù·Èw”µ/õ‘½A5‹iÀš…àç˜‹1ÙQ¼Æ¼­qlX‹åÜ!¢Îã¯­q%&VëTÖˆ k#}û†µWk×‹§°v§ñZÓ /piA@kî6:#;#`Mâ€L¦¸òüüVcºqsd„¢ §Ù™jgINôíï_ê Ô,@ÅºÕNeiíYU·\ _UN·Þ¿úh½Ã[AžUH`­A ¬Í
”©!·i¶›œ›Ïk.ì½ô ·õ:Ò‚Éƒ˜I§³Õ¯Ÿl<Z}¸ú’æü|èf3]YŸÏ×ÏL×Ëåé|e¸”'zÊjj¥¹Œ™¤Qè¡œ{šêeçþd#¨C°<TMõha{é¢.£±	¬ÆŽîÉt%9¿£wÔgQÒ­Txæ½J-?˜WÐšr[ó°fL²É_¹ä9H…ÛÁ›?è¦±€±5«1æaÕxÔvèâº6µg8?*ÙR°fÔ	Ê@° š­©[ªlÈÝþT`js8Ã"e[…å|nZ²gl=Î¤µá0
ÑÌmDà6ÌgÜùÈì Ã]ë¶^ê%²ä\ÈZj™§ù½°Ó‹¡ÈgL_>8îieÒŠ|!Ã=ÚŽtvÀöÎ‘)nÖÂ§v|ÂÐÐ{û±µNLtÕÿ´Îí*Z#$¬‘‹²´=`²œRUÚ»—ÇÄgþCÑjŠœÆ–Šx¥[Tó•ÃDëÀ2I¨—¦ËAiùÛ-óÙ¢°ÌqWÆ"‹‹‘ÈîRÃf,{²·.JkOðíÖ0‡dÙ÷Â~]]¸Ç+=(Àšÿc!6nfpZ¸§°f}ŒãÊ¼‰þþYd>þ®´Û!·1€—aM_x¡%X*d ²Òbƒ,¬Ah©¢ò c)›a»a#l¢¹ˆiRé¾Ç­>úŒ{kr‰ç³švv‘ÐÆ>ƒv†µ y~®¯wY;è#éªÝbÛÿ"±ßÏOÏ¾è/#™]ÙxAÃ™ë*íq¹º‘Ã‘Å{ài.œiUt7r9û%¯Å_äoˆÖ¸™Ø²ðŸÁÃŒßRsy›ÖRØâàX$·“ñ7z÷Ÿ;>r)Ú’`Méçä¢ˆrÙŒ]Ó˜¡“PšÕ’XÕlø‹0'MMŒ…&Å2öårî†EŒ	Bø“\Õ¸(Y°&3HîÝ?(Œjfµ9Q&0æL•x:øCš;-Î(¢Ô¦,C0ƒTCF•ŸYSÑ5\ J9£ùCIûU¥ñáƒ?=ÉWèHÝ¯Üo²ev,ZÖÈç¼Õ’j¢
¶¢Õ£ªåF½üV;ÑÒF›:j52“ý£ÿÀYð£RMU©m·ƒ/{b,éÛ©ü¾JÐ½†Yãø^[÷±ˆ¬¶É ×¶®_¯ý²¢¦¦E,•F‡™¡¦ë`a0€Ä3¥^¾Ñ®Òý{°_ÝÎ"¬¹f­òt›¼:B¶d«Í!¿GmŸqªìÉ"±ƒÏuÆ}I¶ºÌt¥#ï[LÞª¯ætñluX¦ÌÌû•ZýÌüõb±™0çoÞª93²kiw÷`×ü‚²&XÛGX3¹Úï‰åÞ`¦Ýƒ\×6RêÊöiÐzÜ$/À-ÈOdJÐ–ÓiÜäå¢¦›@úQÕš©`m¯³d-SÖ½:µ'©é$ö+¦¦BÕÆÙ¦iÒ›ôÓõ}ï`mm­³f- [êÜ?qíÒw`-—	kÜí/"]íTY;Óx°æ¸BØÁbSyþªá†Å`5nc8A"Ül@ŽM}1Õ;àÖ£—o®i»ÌÛœìE2ƒ‘'”5â
†µ¥?ŠØTÌÚÈËÌŸ‹wN4&ñ€l0TE9óÝlÁk–SÀac‘Ô”QÖ}¦µ¯?x‡šµÇÓVW~T“GIžÉ««#¨3³_O¡¶µU«s¾^½ÿá?ãñ[ÜÝªá¢¥ØIÉ-È P+^tSexŸºÿc©ñÅyºû'ð÷öå<Ek6Ö%>*¡Ü%døA"ÊZIn3uiuLh±ÒI>ä
ÅGe_2ÅG™:.¨*­ýV‹PYwžâS²šïÔR«ä0#Ù `û
“DÛ×ä<œ‰ášLóÁ[Ò°«%UqZ[BbL’ÏˆÈj’9pp¬úÃ>Z÷Ç3©óc¤5GŠÐj4cHamTÓ8ö/ô‰®ÕõmÛG"–¬iúà#KgôNOˆ[†cÚÅ*´#ZËÐÍg¹ûT‡ÉöîîI%(·z=a)¨5AçÔû”¬…DÈÝƒmºb?‰$®É‘¹oJ«$BNñçÁf‚þx¸vd¤«BÍÔÓT[Ëá=Ãj/ÿ0²l[Ç³¿ÂŠomã£Åe™ˆ|{ûÞÝ»‹ßÊ^‰MÂY2„eŽçß<6°ñA›5ßa5biãù…®.R¡B¤´æ2µP…ˆi,]“›cÌuìtí×þDNd†j~Š:êVOÐ_±5Ø¾þT€Ç"«1j±dÏÍý®ÃMÒ²ýGìÞÏ‰¨¦òx0ÂkÒ8L"©s"·f°‡£àÌ%&1;‹„†Ï6%ŽøÒu„q=§E+6uÛ}¶*X[qãàäPí*_¼xÁŠ³b£¼RÊxcžþWo2¬Ýè'²ZUùÏOZ‹/0+Ú‹üÐæÊÄšŽhß¯#JhˆÑÄ@«óÕ4ìD5î?ØòUqÌ³?=ra'¾Û¬ªáç›Y˜R‚†Ì /ª2­krê¢˜È}Ö¬¬uçÄjÎ‹TÙXèÂ†5«š²uËžu‚î¥÷Çµã×Ê—®ÉÜ¡—jµÜä5ïb8	’5Rõ|6Ã5‹„jaylöú,†þ ‘D6~ùn,þ9A”¸ÛD·H’‡Õ†%i–É‚œ.–ë³3“<‚'¢`­By[Ùœ”/hâáé³8¹±tðVÔ€«ÇYîjÍÉ,%ñ;þÄ¡‹u‹wwc“5Ò •AQ…zÈP)m•¨&[í\þ¡U¤³sK E(òþøÖú/~9;ûŸoÏÎÏWæóùÆ|±-wæêJbÂ ’<J"AÅF½Éo«Ðª@³m3`8+ç‘~0Ò¬F¿C¸¼3e˜bùíÑùÛ×-Œ£êñ6§‰§|vAnYÜm¥:àõû¥³U5À%¦+6k¿¼=_Gf+çg
µÑâüäL—Zg|ü”’5”´ k„«ÖÜïlb{X]Û{¶ººÛÛµ£ÿÚÀC‡lH-øˆLh86–'Ô¥Ý6‘9K¿‚5Ù8v÷~É?Žj–Ö¸ÅªIGªªmó:ÜÛ[:ZÃ4¬¡¬h.óáÄ®yÇà¥ÖVßY>37ÈÎšµ>‹—|'«TÖ µSeí4NãuÅßã+‡¸†¿þð>âzââ­[*`Â#d"ry ï²%¶|£"/†‡€5b„¡mý¶÷² eû™°–¥A>í³&aµ¤ø€Ø–[·óLQ”¯M2gÍñÝÌm,r\`uæko]D[·n«ïüÿ’gÏžýf3!ýúü4ŸDËÐ¤VŸæƒW¯S«Ö¨ÍêL(ë£óiõ	 QˆQ·Ñ¦Ö•+± ›zZp
|ð÷G°*ÜÙ¾:%Ù%²šÞPíAñàí=/€­=]}ö¹i„l“Rj¹Q‹Ÿ^ôä£Ü‘6žØZ:¦¾Œˆõ4¶‘Ïˆ““ÐÄÜSM¶6†æØÇÖØ<tCWuNÑ¼äÜMMÆl±Žä[RV õƒV7f¸¶ÒJªz²z·¥rÎ”Ìnš­YHÓÝlæ/»Ý''2ÓÖ¬©1âFxëAfýèct¢(-M€¦<s[	ž=Ïb6Ãšg \*¯)t.cµ(¨)"‰Y\ëÌqÌ,C2Q-n}Öƒ8ŽŸrí}(l€6ˆ·¤æ~ØY‚íÖˆŸkAr{€’oòaÆˆ‰)6¡6pf?BUž—9¶ÿ›n-¯SÙ.˜M®«>*X£-ötixëÛÛºª¡ŸÕ–—ÿô§Û”5Ù÷‘"5Á±-[þG«nmS­|ƒE?G!2Mòñ7zìù=];,³ƒk8ÉU­ùÿL#`-2š·™¢–áY'©ùÑø¼ÚìTlB‚£¿a.5ÈùiëMÛƒÈiD'xRxYG‹Y‘èHÜ¥O3¢IYÓÈVÿ~jÊrDÈ’Œ
û#g}áI*¤…sŽŒ(b¯~g::çÏLÂöˆ5Ü.[I’œI ÿH‰Lâ4ýðP
%NeD©<±qè?{øbãÂo\@k+-/â'âu0½‚ÞæJ6â/ÿÃjiyYo‡pÛòò!ôGd šå3þRc£Ý‹e;ƒè9¢ð£‚3[AÆvg‚3K¦²e¸öÿÃ»6	»ìmÈ¸1¬ÑgXc× ‡4´IËi9ÛDò×Æ¤­áôCâi†µ49QYÝ]¾\î[»¸´ç–ØºwÚñeÒšW.š»bÿÿþN;H[@rÚZ`<§"'Aæ¤#œ4«ùÔÜÿcï|~Û:Ï=?ÿÀ`Ö’`I0ä…6dY0$#bI¨ÂAXIQÑ 8¤|evQÐµ¬Ö‘ãøG‘ÖŽ!¯´iRŒÓ:º.ê6"Ìj6†  …Pà¢›
ýÙÌr>ßï{Þ1Šq“›WzDžóžCR¶lŠïù¼ßçù>´©¡åLŽ©	šs*ý J«pkªÐÊÿ(š­ *±iš°.¨eÂ2Ù¼‰ ‹(h52<ŠusÔ˜§×sƒ9¸mÙáI¢Í?5æ´(ºë¡ @·ŽËCå<Ì‚AžÇòÄò['‹e;[[* cžÔ™©Z›ØÙhø;U7®.¹±pµÑØh4±ú¢N­œ£ëè:/U‹z³Ñ·M'sgd6ÒíjÝ¤¬d‰¨¦÷ÆÑ•îË¸f›I£ÌFS92W¨w«…no¶u„ó*-bÜ¬myª’ƒe‰š;µV­~øÞÕ:‚[ƒ²vzQænÌÎ“(1¼OaxÏ`í—nw6;Äƒ|ö¿¸´úð_®®®ÎE¹”îØî¥çu ®gøïfko`œ¥ DËxð:$—Â¢¯fŒ+ûgMÖüÖë5Áàæ%°¦ 7û§0›ÍDkl<×˜ÕÐÜ<}«ñ~«Å<H×¬õ*k`[j029ZèÄ`œ¡Úó`É§ÂÚ)¬Æi¼)XãúÏÊ÷m.}-±ötIm|)@˜d„$SßÓµMØ„H3¬ÍÏé\ ƒ.qþŽ–FÈ…ÔèxÍÚo×`²V+H_Ã^V[lT›ù³"'e­Ï”¥N¨4˜.Ÿùi¤@UÍÀ¦¤µÖ>'Íò«;/þð§Hè'ÓÂTk)×„
ê$§Ó ŽZXXÒä†sÈBù+WTêF…‰`D°Z¥¢äÇÐ9¸ë¢5zÔlîÝžÖTÊäb¹Ó?iï§?õ”Žå—Ïåó—$ºóK[Àó¬vVžàL²c]ç¶“³ÊØ—¥ˆ"M‚t7ZeÞ|“;ÖÂž»›¨…O¡ûšm!à)•»u»BC¦*tò+GFj!©ÑY-Jí ©C€ ²kMaŒYJGÃÕ¼ží,¶Ìþ‘3±·šc"Íô0„¥5Ý2@†	kÃv‚¬¶Zr?d”$Ú•+Ù§œ‹iCã¹«•æP‘V,[ãÎéH^Ç¢§€ÍÏÍÎ
1I»›Û·÷nOÞþ´=ûZs#ØÈj‡»{÷öv‡vqÁDYý°/²aþÕªé$•›Êo™æ×cR-žð€¥cBMØú
ºh,—i)˜ÈV„+,nÓÇ`ƒØäÅMÝÜ¸ùwXí°&Hšýû	ŸRàGFlAZ8¶g¿70 µýuûåj_ß…&dé*X²÷µµW·ÿ£é¯ ±} 3÷ýL_‹N=[D4†q´®jG{òkç­)™Š·­,ùMX~œ@.ÞÆ¶…4Œ™c…m,†“e¿ÐÏ´g‰É¥Žþ†5…£`™%>Sl©‚4;CšÀœr%`ó08bc #Ã¿ƒŸÊÊ?{&läè~’ÔÖ½öÒÈA³Wg_½ºöìhÄÙŽÆM"66)¬éöö«‘#Ž^u‘4À¶R×VÐÔk?$z­!³&ÛQQ3Ò@ÕžQZ#,¨±°öZûñÚÚ™c‘C4ÊpÍ¨‚Õ:ÁYŸ,F¬¬Œdš³Ÿ¦çµèLÊ6`¦‰‰kŒáJÚ®¸¦Ëa$¿»ÿr—ÔuÜ0qØ?©¬YØ@õØ7Ëñ¤ÿÖ"ª±s04­é°GnË“.be Ób”ÏùÔüÂ‹0‹ÖØ¼ ¼PG{*fnû!­KªÌÄ/åÁ6Ìg•jUð•LU•pNva¹³%ö©È“äÜ ¥j2(ÜM&'+TV ÄoZ…Ó£èjéÐ…®’ÖxüúužÀ$ÀÚ }¥ËæÌ‚V¥ÌÕ­w!]a["œP7·Æ…¥)&DºÁé§ÁxÙ@aa‘™Û¶ú@*aŸß/$¶.«•n9ÚfŽäýAfµrÛµIçÊRWåßÖº5} éç!ÚêXs„…Ö­´Â³1}MéRc–gÊ/Ò»ÊŠðbá,·œ0”›µ.‡dðQUGÚmoï×Äý—«»ûj½+«Gÿçº ÒƒÐ\Mú­z®Q»Fp¬Ä#wYc]ÓÎƒ$ErVûÙÇÛ¸ÿãcÖýWVÇwSXÛ}¹ë³ýño’íF<IdÈì?™¶'"¼Ò#'”5"…µ½þ×Û‹@kÜ®*k§qoÖîšÕÞ~&Ã¹Gw½îûè“§çgóy>_&Y,R17±ùôéµ½ü¯·¯=ùŸO6§õ´ÙÊólX;âÒw2Ö¬fU«ŒzÒ º€À°Ö_¨·pÑmfû¥›i~ÝÊáá.bÕÄz‹Z¹äúžÊè/K—K†$¶a¯–(¾Ž~ÿáçÿòðøÃ;ïËÛŠ6š,Ç.µ€§†Òv8×Z$Í¤15Á\Qlå‘:Êä£	Öð×¢( †_=°rävbŒ‘&–nï]^ºö8kb5ëjÄã°þºÿòå>9n%!ÑÂ¹¬ÉÑõÛmfÑ„¦k¢šðpÃ‚›Xs»µ.›±1\¹¸\ý Ûo¢£sÞ‘6é«`[¨“È‚cVøcæ
MrºÎq_kãÙ áŠ5BØm„SL–v&Q{læc¥@¦—åé´*~#<"Lj=°†Ý_D´~ÔÞáq©Ì¥I"{‘¢Ì£u®TLp¸4› KŸå4¤4ï¹gÙ·kÕqìø
ÂÛ_½…j'áÍµm~(=ˆ0÷¥@ßæ¿÷ÊøÞcX›"6hPøM§ÝÛ?=¼·7>ÎÔ“MªI¼zcƒiÓrÿ–°¦Ž„,êç…q²ÿbñ#-kä*RªÖ¨plòÏ£t;HkœºùÏ›‚¶èÖˆ1®ªWSl¿ÜÝ6ÚzïüFpxéåËKo£Ck¹Æáø&Ýu9Mme$Q†±d-cµkñ ‹¨ÅÅG‰ìïsÕœÇèÅ:6s—t4]›qFhÞìyVü<)|"¸ø‡Ç|¿•8"h\úÖÜ›DOþ,"¿xlÇp2B5)hÁÉÞgÄq†!‹àMÃ.Û¸ikšb]eVÖÎr•‰\Á	¤6óñêèèìÑ39BÞì&°™ú`Ãqb5ƒÁîÂý±W O¯Ø¿=öŽûO³ZkÙ™ÈjÞ+ÒQWô	Ÿñq@ÖàCùÌØÆçÆàå?Ðaä{Áx–²ÐJ]~Þ‘—áh²ó˜ðÙÃßíˆùë›EW›Ÿ·wºCX»xíÇ}Ê{Ô%2Sš=Hú_Ú’ä2_‰Ÿ¬Y‹ÊšªÖDk»ß‡ÔØúž…ÜOÂÀ~ý)­	ÖØQT“*?'“_óLŽtHå¶!¸rÓS
”5Å¯Ü-B²4šRÕJE`-G+ñ
¥\|¤@4¹ºÚY²@½Ù@òl¡¥œ%45·o)ÃjÖ¦ªËž_‰»V« 5½;*–5¡,³®ƒoÐ»Sí³‹€×BÒM¯ß%—ûÃ†¬ÕmjJ%u_³±SÝàoC!ºr8k×SXã“¿¬ižß~’ )Àn®~Ë© mÌ¡_\Y(ó™a›E;S:'6“{?"‚5úâX&¯ÔÊÙÖþøÇwßÒ|Uk'ÌÆª@˜ØÙ)áEÒXh&Â`ˆ¾K»‡8‰ˆÍRµZ;P¤¶ ·ð»HSìK‡‡‡˜øŸ×›IÏ²ÀkÄ4ï;aS¤–RïN&OkdåN
è†§F1<®vØ¿8nùñ·JÖ†eîXmwŸ-MÿÆG%®ÍzTO|¸‡³vØÞ½¾ãZ<Z½…µcÊÚÿÈ”µƒ½É×Ú‹Õ‚°vZ³v§ñ&aí}Ók¼8ˆÖHÉyôè“Íç LÞnLˆêucé	rÁåkOž<yútNY&K¯_ÊoxOÙLYS§5>N(k/œç¦ÈÓ¥’š¥ÂZ!Oó)MeôœY$U°…?e>Í„ÌÈ[¹9wûÚãRo<Ž°öÑXð¬öo$³ó*k#bÈÀ 1q£ZÝÙš¨àŠµÑh0ÜÚáä"òÅC8<°ö˜©z®¸‹`Çý-ÉIµvc‰Ÿûéæž³ ?ˆ²;¡¢?ËmØôð7¨ÿdžD±«ÔºÒÖ¸"fÁ“£ÍõOE‰‰6é–Jm¦Z¬ÅŠ5&,{‹É;e9ÇCæ³ié’ùÞ‘?Ö„*Ž·‚5±ŽÜû;LÏˆ+5‰+Jüw9ò²2ÇØ3çù*Þ°æKuÝ­Ëé,áo€X"µÒé4&³Ø_-JM\¨Í•|­Dk¥bYõ$4µZl€öÑ¢d
kÞgÌ•™øëDoIšû¬/T;á4¢”I†qœ-I~ðõO±Ù£)öÞžt5ÍÁ²2ZÛfQòpèâáøšaÖ.ª-©S`$«ÍÎ2•^¼-V»6íw{()¿x#&Jq†Y‚~;¡¼œ©úý:X¯’Šú†’ ï®¬ÈZ$bØÝ jÜƒƒ?Á6vZûÈ;¯ñà…K««—åàª£ÄBt0NË`­&V³!dö‚<‘ñöÔ"«éÐ¥ƒø2 ˜:&.»ð£¢9…³ÿG9Œs~­Ï¥cCžp,vÆö·´Åw–Õbd°)MG"c•lXˆÒ„öéÈœ™Šm~*¯1— 3~ q¢‰Ù:Ã‘W¯žñMIˆ„„‘"Œo„immÍ")k*[SÅš,û»	‘”!	Å…¬fnlþÓ°fe­÷D$±l?2–Ñ›a½Â–ú6X³z–ÁšF>ÿVûQ#Ä R"‚Î½çúäD…ô1=ß/gè°Æ52á
k$3h%m¶ß5`ÙI,ç^k2‚œuŸµ>Ì[%y\B+w›5nD_ÖhÍ’Ú*âÛp?ñÃ‹Öˆ¼¢Ææ²¦NE0î×£uYS2ç|ùž)œ?ÓGšö'Z«P®UVêbða+“ÿV"0’¹.ò#IÕSà˜X­Õ(’iýžÊ/}$è­&…½C¶	±ßm­+­­VÊZ|v»¡6VJÝ`B±ÁUGkƒˆXˆ|eæ6MàW­Ã‚çM™þT‰Æ¤šGV
­ÆÆ‡ï5(à.`‘Ò®7¬…Âh‘!3¡zØð¤LÇ¶`-¸¹"³É¨_Q ÀÉ²Dm/?MÔ´s«µ	›-c eVìd“Yã¯GÏpÒ¡6æ,f½©)fã¶ê×ŠEê×ëI­Dy<‘H¶‡p™ßYüÖgÌjŽo½¤xíðÒþÃ=gMäyCIJ7³RrY!pÍ¤ì"gt!•'+kò ˜þÅþøèÇðØcYTuyûÅw â§,(„G&ÿ|ŽXµÆZ!Âš¦·ÖYd:<	kt)8Y³FÄVK·k'³ %«Ak|YX{û4ò4NãÁ¶+Ï>"¸(ÖÀ5LÊ6Ö–æÑ ê‹tuË5õçßÜt§_)lŸÜ˜ÖTÈÖ…£<¶ÉGÇA¶Zcaí¤²fXëÇ[ÄDV`ÍÔK9%à)‚–†ø¥ÔGH®ž{N$Ø5ÔõýÎ.}ÑbÄÚšîiSì‡¿&ò«;øê÷8-|¹¸XXh,hŽ,šT$7vÞÛ¨kíÆo¶JIU®UJîßQÍ1"ÃŸòÍ©-µ5‘ <°³”ß$W×æ67¾ø3ÿhÂòÁÚ÷6QÛ+t!>‡q3Új›Bï~¦Uh!ÕÍ1­bvÈ«¯(i%\3)8©Ñfý,A[„5?Ú£«ñ¬¹†MåA#]%Xr¹çëp]H;™E,¯¤òSñs¶™ÞJÁ’m¸’âÅX“¤¢5³šàÎÜöÀ°¶<£-ËÖ£‰ÌÒq¬R­×À¿2%çCô£Fÿ@NÕé°Z¸l§!­‰Ì©äÊ&šŒÎˆÈeÙ£Ñ©X§³§EXKŸFŠxê[Y~À±÷ù“¿¦iÞ‚5þ¬™Ö8òù`9ùð×{{“ÌªV›¼ÌheMËœÔ¯ÏrWõ‚Š<åÒÍX+ýyÔéùB_\x/k8‹¨ ‚T¥VÏÒ*roie0»¹—kªIK·›‹„´ÈÌ¶ÿO°Y‰ÜÜkw¬Ý—¥—O¼…j„1MŒ6±ì,È^]ÍÕk'D2ŽË*ÖÂÎ[ä(ÒšKJok:g½ÌÂX3˜p.%;N>NÏ1Žþ#„¿iÆC;û³9Á9¿ÃŽè5³
gL0æŽ[8—–ªÙ•#Î…—:PëøŒÅqz½a-cŸ0âT:NXš;ûêè•Ýúï³½:RGµ`Z•£û7oZ]ã¬´¶•›GïÈòÒ´%Cÿh?.R:ó>"™ŒÑ3VÓÉ¡ƒÓ”fS‘16~”ˆÞýºÇ3)È}‡®öc¥5(-ƒ5z­Ý˜›Wäü´…5~ŸR{DÂ—ÆÝ­1Ô{ž©"ãü|ÿ€ 1´æ†WÖNt Z£ar–wo‘Õ"­õ4Z³¦6Š«ÃÐk”µ|ÏQ|Vß‰pæñTÈù4kr"Y")p0ŸTV^Ÿ4µ9}R¯[\#»‘8cqMûÁÊT©œkiÖØ(Pï¶X/ÂwÞZŒ‰Ú²2¡Ïk˜òªË†µJ}cJ=Úšp“J¨59>ì,,£+©jÜ™dø"ÈdîÀ`<ÎÀ“ø{ðw¡\€'-—¦:]Í¿ù°Ê\Oº¸¿‚ˆx,®=ÚøðÃ2fZÀW«¡™Im²G–õK¿¬„“¤cù ™Ú”É<quº1xcAYÌq<_É]±™Ü›í‡9‘vÆQSòXx±4¸)àtþ~ð.êšŠä®UÑ›«²53±QgÙ6©ð,é´dØö:2í|f^·½ˆß‚&2gÑ¶^¾8Ü=<Ü…üíÁ¡R´Yé»Œä@êlÈP²¦~/f°¦G.ŠæÆ?½­õzAö´YSÄ,ÈñCÜE&÷wÏ_ì7r1ß´[)½Æý¦´tw2k'•µØg o¤÷}=p¬Çœ…µÓšµÓ87kˆjº$ü«¾Ðšý£GnÞ¼?ýô‹/êêM­þŽ®Œ}ò„RYœÉµ§7,þËèHÎæ9µ´9{;JkÆ4hÛ·jÖVgñ‚ÖÄj³Èù‚æ2}Ô1Ù‡H#ÖÊ`[__³¬1kŒRVt@ðÍRqëxWìÏïÝÂªÉ5kÿÖÌ}öû%
‡7®ªÚÜk0µ k_l”Hž¯ŠÏ¶&×vªlp‡B*¶©h†'ÚÐšY-íMÅV(¢g¾»cX³²–Á´fim¶ÜûÏ’KŸšMTûÝíž‘år»Loï3K•1æÜäD\\1ã¦}@£¬Ö	V×=A	-f.éž²š±ÍÁ+œ¥²Îü×Ñ|Çq—°D&ÍÍ)%8Œ§¸†¾6!+ ‘­Êµ™½fjÝÒžj °ˆSÁ·:K‘M^ÈÞÖ´×´ÆÝ‘Q[6.5‹ìk9Ú…Ë	¨b@÷L«ÙWPÎk
k½°vlìA4a™ŒÃ,µQÂÐáÓ1R®‹.%—ÿ¬QŽ†Nz ÈÖü?M¤¦ÎÚeÖä
ö9´Æ+iAxù<óæE®MÊñkx˜Ú4/¦*í1¯ynÎ9ª3Ùúò®O½è´&XK(ÜKÊ\¾µ++’Õnf8æ­óuà£:|¨j­ÆÁ8M‚¼ºðì~Ioá³íô­<!^çÁ=Ø|r¦7ÚÌIX#za-R‡º{LX-K3e©¤EI´(ÒJ4IeÀšCüY1’_HTÞd¦µ(¬ñ©jÜxŒ`«ð7 c¼þýë¢"¬õ$@šKØg&‘a}êƒ[¿±D;Cz÷ˆFÆ#M:$²ŒÈ´6EêhíhäÕ…Kö9ÂT—v“j6#™9M`f…½S!Ó¡µ6¼FÜ4ÜÔçÔNÆì~$ª¹&`F‘ŽigpË0.£*·™Í2ï~¶ñ„~úFk Þ÷ƒµ;ÈYfæù*¨hMY‘>Á1ùØ>DN°MÍ<OMó*'éË‚ÙËv?LSnÄF—óC¾lv+³Zæ0bQ£·ÑÚ®ú>­Žž¤µ“Í×f_k„OGG‘žÙÖØë1$5gHr>wF°VÁü1©8¥ŸY„bh}h;²M²Æ`¥6ÕÆ¡©´\B½Ê“áŸË“+Úª“Á°P¯‚ir)±H˜L°'8ÊºåVR›åºå<³“:œÀ¨Ãï°f¢Ž}n–g´³¾¬¶kë3bµF½=F&€™d¿Z&Ùðÿþq§r†EÖÒúO4%”š¹…/6˜fßCa«'•nójƒåD)qÍ3•Îòõ™ŠSNJµ	æE¿Û‰ÛÙ#±ñnY
Ù£ŒpÖm²‹ê€}Æò­Xt*)U*cmpvŠ×àqÙ@ìãï"`%F“Uåœæ<P–<HN¹ ¯DÜBŽ9š>}‚5ûöÇ0¿XÛ{¸ëÓÕ]¨ièÂ4O~»Ö°UÁ¤JÒ„à³po9Íœrb…Œ!¥î¸5glÕ><:4;L§µ ¬õ(k
ŸÎ`í3Šæ>¥-ö8ßÚp†‡ÿä$‰øÊÔ±zÈ‰McŒt¯	²C^[³æøò[úc0Ž°fTË„µÓ4ÈÓ87kÐšä¼„¿¹-Z[¹¿4·¹vU-ª[ÓZ(fC\³`ðtóÉÓMémÓsLŠê²´¶„ÚöÉ“ÃƒcÊš¿"«Àñphày!ÿC‘ýúSû)2ä
yþ©1v3§lBëkufªb~ÔM°›Ö¢¸eX³²Æ·¸¬ÝùýïÿÜ|¾ûåöR«Žr¦EÈf]VÈ÷Þû¢Eo—Å\•„35„¡ã
³ÕŒ.˜Kår{Œ9ƒ…ÆsmáÓC×fXºÈ%[M ²sù^TÖ"*šÖ> Öö®ýùƒÏoí®5¬õÊ­šòíI¡ÔŽ	¢81{Õ”i×|4ßDÏ~9?r—¬æ&kî¬Æí˜‹[,Tc¯ò0ôå,@%0cYRåpn‹mPS!·:e¼¡¬a™Œÿ#ü
I¥%<?hhQn1¬…žØ 7 LºÚ»–Ö|$Väö®¼E|›ê¥6øÛrŠ0¬µªD3'¦mòNl®Þ ËÝ±ÁsN¾Ï&þ1‰1Ì8¹i>doÌb+1-nÙ#"¬iïÈ8Ž¯ÐnäÉ½}ä³ƒ|ý7pí·ÑbÄ°¦JóŸÑgí×­ª9*ÚÚÞáäK¼)RÀ~‡ýðÅéY_q¡ÖÜk­|õåsMR“Py×S›)oL­ñ¯ÓìK$4­^ºt¥T¼û>Wïj°f³~£þ¨47÷_[bÛÚ÷?½DfÃÎ]í£÷ïŸ\Y)i¦ç¶ùÔ7µ»‘ƒ#¨5Ö°½úõÅí¤¶æˆgµ	£ëï\÷¹Ö~BM‹z²»ðÌgØ›É”ã×±à‡áôÓÙõø$aZØ	ÐctÊfä'°ç”@oäÐ`-Òš±ËwÅg€‘ØÛnñYb
+H)r€(àXDÁÅ6¶‡èØÜã¤IŽùž˜@’‰¬Fþ#W/Ïœõˆtf)MTä¶,Ô~Í°‚WƒoHkú9”¤éÆ ŽCk‘N5ŠiÍÛ‘”H}ÈqYÑ­ŸTHÆ3›ÿ°d§ý`ií$¨ñe4ÐØ[D&þ¶ð‡r¸ë&{±NüóÀškÙ¦-¢å¨$¬ù‚zÛtSÝlÞ6$,=ÒÕxvüü®ÌC2ií¤²:­÷ÃvCWV¿OÑšÜå¿‹Õ0ñŸŒÅ"6dÂy‚Ãn¦µþså‚Ž› (“”óg*(k$ˆJ]+ñuFEkZÖ(Ä¢ñ˜ÚX.ð"}'tû†´8ªQ|V!°û¨ËÞÉ­hˆZ»Ph×hz¹¼^kS6ÜØR:´M¬˜£’v‡üŸ°n3C%ÅjüÂ¹.•s¬ô Ë)ù2C=€ñÚíšÊÜP6QKrÍj•T®‹E–K5æÙz«^ê,—°ï×Ò¢}ûG:
«°2Ak—Ûz?Btïtýæ3—©'¬&Ÿ&N~îã
"Ó3¬ñùþI³4¡)MÖ—[¥æ¸rkçÝ­\sÊFÃk²¤Øû2×˜*µ‹;ÕÒ@Õ… Aëîb­ÝâŽb¬LHó%éA56J„< (4ÄÝÃ;ŸÝZ}6¿½º;ÿ™®´j­îÓì©	Ïæ‚uÿ´ì‚9©¤]­pG“H%Í+ÒÚk•5Ûös×æÖ!ÓÌœ'@XÍÕka&tÌ}Ó»§µ‡ÞöÒš¤µ×+kW^g/ÂÍ¤«*k§qoØºRãwŽ¼»+÷··¹Ú[{¦4ì§rO¼‰Â¤>b(‹¬]Û¼ñ”ÈØ‡vˆ¬læŸµÅ%åF~y/SÖ´`cmÍãÖ”Y(ôçá0œCHˆê+‹Ör¹ç…Âsr£¶«j£ RS®{³Õ¢½f«ÿŠºœ}Àgitaó”µ_êô­‡‡{wèŠ}ç÷ÿ«9˜ß~±¶P–Ÿ1
´”Ã£ã½/rgš|Ç&Ð )Ú gM²C–D±]Â”IÊçÎ:›âl·}v0±C$PW?äçŠ¸FÍšX¯ÇÀÚã½íkÂÅÃ¥f›ún&D´;Öû„gL¹‰¬ÿ4GÂnL6†5&$=™	*B	B6tµënˆb[%Ÿ¤ekœôŒÊŽ§¹ü;Öôtº|ÍÔ¸¢ò„ÜuÚÂÇ2V58m@0Tv›9[›v#w;iïkf9Rný×Ô`¿LkdC:Äe>ã<ÈˆjÄVÔÂ6ÂZ³€Cg³ù¼Õd¸5P ÑÀñ‘-±óVØâäQÆYñŒ -ŒÕÜº'cR'­Þã|Œ¬¼-ÒB»Iº^¹}å—ÿö5ñÁc8-Âš‚÷Êš`íáþ>ÖýêŸŠºÆü(N»ÈfÒ–©Ä5mäÉ3y™í€3cær…Eÿ”9dÄf}ã½ªþêIðLƒåIÙYùèýÏWVhE§K|™),JkÒÖ$§Ñ¸³aË†'üéÓíð¤—Ÿ~ºÿòÓÕ·?ÚÆæ™–ØâÄ²lµÛ#5¹ÌL¨LMÚ+ˆt±wÖ{U³ëqL°ýv©Ú‰¸ÎûPçµ<à‡•#µL"Ózô…„Þ 3Ëg¦«`Ï¡Ó`šŸ$Zã}Lß,¬i/Vs˜ïbÿw·ïu8 -‚ILv–ôÑ‘#ð*>ÅC‹Xê‘¨œÂÈ¹Á‘`cpÎü û~¿Øhç`¯{Ô×,P=ÃœÇ³Hki½¥i¦5±Xð}Y‘ÖÖ‚ªÆ†±}Fj7a5^ô
WÓåúXlŒ­øñ°šbs1vÖ\ÒÇè¡,l*;£3³øa¨F|Ÿ>k¾+`3ˆ­0?-þÀXÝZ¢tJ®ê…-6›÷úK<Èiýœ!ûky7:Ö®!¨q6¯Kei PÚîî*#BµÖRY-«YSEíû¿ê¥ÕÚ÷¼Ñq\bÃ¾?íà!ž2½EVãG
aÍP…zb·V¢¨´ó¹öÂB«|](¤ÂúobãOgkŒA4ÁI„œ(øægŠ$F6›°°–´Úµ¥¶±S­Ã¯*ÏÏåÕ9¦ZC.ƒ™ê¬_òû]cUE¾28Y†ƒÝ< /Ô/Ö;ùtŒÉjW=ÔÜÆ«‰ï–§Dk|êWñÅÇÅƒÒez7®^­0å”äz
Aj	Ï°ëv•ƒÛ.‹ÖÂ/š¬yØÅ´ŸHý´ÔÈ1¯B’bµF¹ÉÏÆÓ™–)õ•Ãå–¾˜¿‹;4–«õBÓÇ„6>S˜2×˜{aµdBk´ðËDÙZ¼ºP,%ª|¾/Rã"ƒÜGBW.°šaíÞÞ*ú‡Û{w>ûôå§û‡só¨·Ïc5b¨XëŸÖò ±ƒ#$!*£ùzˆ‹ÊDòžk²-¹ŽŽÿE´“ uó&k³¦w(Z¹î3ÏŒ3ÿN"«K}ŒK—1"ªùmOÄ>¬öÚšµƒƒß]ù®Š58-k²†ªfaíÂ9Ó87ÿíîJjÜïôœÛÛóïoÎ=Ÿ&Öˆ4wíŸ%ÕK°—Ý˜Ÿ%íËÞFOÖ
…Å…Ož>]{ª,ÈLZ#zYÍnÛ\Žçg‡È‚Tb˜T2™Ö8x©¡»Õ(arÒX®M~i­­@¤`é±?Ú~«Ö~F yˆxïs±ÚWw¶}Ó/¾|„]<æQj2…Ùq8 ŸòLÒr(uSÁG¤TX¬ïlU›	ó€€cJ¥ØˆP•ö˜÷5¹?€¿JÉüî5:~GeHdër&Ò ¸|‡Õ>{xø<a¹Ž9ejy¢¨„HÑZ©"VC©c¬uDëeÌOÖîÄ[oq_6’u‚¢F1‚5nj§¦±×ôƒ–f¸3§Áu–äÜÕáÊ¹;æ,È®;Dé¢³G)+v&ñêâYÏ®ü´¡9*I/µË”†µ ‘ìÙ×ŒpÖÖ8”²uIYÓÃ·ÈhlcXXÝKhjðy_A¢™E¡usu2xÒ®.ÚäC[lã˜†qFb½°6¬{|0ž€Åz#KŽì…µì{îþRî"_ÿMo[ÓÚ7ÁkÖˆ‡‡‡x÷³U$¶rwÈ’;¼†Ä†%*X`.Ðá¯¾t£À’D³X¤r„‹ÞU-7•å»òÏ›+Õ›Ÿª®¦±÷·w?"éQ&;~ÙŠÑbX_»Kl±ÁˆP·nìEV/$ËþBY›ZVX\qÙH·¬õ×±š„+£M¿÷á8;Ï˜¯xÀÛOo˜ÎA[GÄzüu©jl!,Ëb±Ki~ÊŠ´-d`5¡˜ Î°æ
5‚çºcÏã~59–‚µè©“'a>ÑÆD5q•Ÿ"× ¬¹<ËÈ!„Ã’àÜ9NDauûˆØ&«ƒëq™Ôy©ktZ;*‘µxö•Lû	q˜HŒÀT„=»ÖžéFˆàì>R«`'É©$är²á×Q úãÃ©™ÇHjÛoPe˜¡'u7gáT¡æ(kX÷¿6^#¬ýÀ6kÄqM-h¦š5ð…DHC–Ùü4\#“~ÁšÓð]‘FÆ#:Ûô´||Äoƒ²‡œæµJÒçŽìa‰ƒWh»Hr~Õ¬f\ë56Ž`Ý?:¬NkÃWöG¿Ÿu?¹"ÑRÄgñÐ„f3déƒÈpÂl=B.—z dT9££µÝµ _Md)R*©ä	D«P×¥uŸ³m$)d­ÛñSj¶šÌE#ŒA·&”2Ål¨¼èjµ´TºÁRÌ°ÚÎ–üõk\CÆZ†É,¾¯+½CªÏÕdB&+—Ý©j‰…>®fxrG3÷ë*—Nh©Oü’>ó·vØ2Ë"oUº|ø°^HBŒ—„Æe!Ù7+’Ö,“Ú;™¡ã¬ÐÒ´Õ­h>­6Ðè´Îˆ½íƒ²9eÕ4¡Õ×"mNë	o6qY¡@ÕFS._f…ŸKtX*ñïÛÑŠN/kÞX[lðOIUü¨ÚîÁj¨k!	T#¥Â63‡2cÜß^=ÜÝÞ¦^muvvõå*PÎ7M^Ð¸ß_³ÚôÇVj¼ë¤³q›îGHÖ™Õœ9ú±Z„µ¨¬}Ü›©?˜;ÆýŸ­Žª‡À0)çÇñìg?žMb|÷^/HB£Œ²}ø5k™Üãƒ½“°¥5Xí‚uµ§n§qoÖîÕLkÄ&Ú9#ÏY'Z[dEoþ|Ö˜§ü?}ãÉæÒw°‘äù'O¯EÄ¶ù]'}gÞýÙ6£µø,æÉh5ñ3$GC5YOqEÃ8ŒP-—Îu²ø¯_-‰—½øT‹k|Î {ð¡&ÊÖ¾:l³æúçGÚ‚µJ[­5‹…Ü`CºtVë¹ÔR¿0ïÕLVC>’osÜëñá¨s©@—"ýåöö®]Þ,Fw“kðbHÄ¼uë´Öf.h" %ž-Eg5'2f*‰¤($cz’ÊE™»DKë. ¤ýä--G”4æq*kÞ¤§ÙÔnýÀš´·®8ªÃÌË%Î]L²¦)PpfÙùÞ¾Óèªås{¡)WÝd–ØR!X3¯Ù’ù;šB*¶2ÿÐe-:=gaDË`­ÊŠ&mnëO,E’z£e-­h-¦Ç³‰•kÑ§ßsNd-6>ãà3n™É(qÅN³’6kk·¯Œÿå@Úé×_?¦+ƒXígéš@ìågZÛãùäP±(*`t“5¶Ðî”$amHy:/ÛT8x a ï“…%VZ¥(’ùØœ˜(Ò4]w.(Ì¬¯ü½ZÅÉÿï\D¬üså~ ±÷ƒÃ{änŸ¬ý=ùs‚Ç%­½ÜÞ¶·Ò_«o_¢#ó¥>ÚŸ×lVšR£5¿©éç-§~ÕÇËÑŒ_ÜÂ¦WIÓ¾÷Œ0/Ïð}g¯C)i­+õ–w’pÊ	ìÓ¾ibœ	Z °™:ù3öç]·åW˜Õ¤ÌÅ¬GrÖÄtDR®âËÑÃ-Ü¢“E£ '´#Áv@ƒRü8C‹D€¹LÖ‘c÷zÎú;º¤&k‘#ÜERÅjB3õÂfƒk?g1Íáz6OaDkìW÷oÖ®ªbÛéþüÿSdMBMZ
f.R%ÂYmÓ´Ç”ÓÜ‹Îÿ
>u<~DWì³ß¿hÍYÃ¾Á´HÈß%²>d1‚fqWì`@Â!ùŽsyéXÖ6låW†5.’¢¶»?9'X{}$Ê†cÿ/ÈpãCôÏÿžv’ÕØ×ÕØÇ Ä¸ó÷ÌúŒfƒyá¨6†5›÷ËQ¥P¶Œ`Muz"X²CåTjËŠŸX®Œ”8žªö-ÖËBV=‹¸FJW*ä*Ë%–„øØmZxIoèR=—£†ZóBEÔúœV‹4ŠÂ:,Íi]Q èNËÎ¤/U £öÔ[¡@™ŠïVì˜°  Ž¥û¢rYù›ØÙZNê­bs0"ZÞòL©-¾R©]i
Žlý5Êzkµc²~,—¬ù«UÑZX?©t’%y‹0 ªQk]™z0SJ ®-ý¨KkTAÔ¾¤)Xk µµ•¼ÙÏ‹Riˆép†,þZ³¹ƒéHki‘rÀ…«ÖrÓT1ÒXí ä%Š×,±¹dM©oJÛsÓZ,Øžã^#Î‚¿í#eOÈY'="ŸÍºŽÃŽõÆœ©š™ÛÐœg/ž=ž±šE5£š"ÖnP»u‹ûèî-ûAR®ÆfxŽìýè¤9-Ž¢ ¦ÁwÄw÷Yc«päëz¬!ªÍ†$‚N­ûOã4Þ(¬¹#ö_Ñ´½|÷î¿CksóšöÖÖ®t=:Ie€æ=ÂÝ°7Ÿn²DùäÉ7z~ziaaqimmzÏ°¶‡ æ8^³ó ïŽòi§ùˆ´G>f¦e7Ò_èCS³¬Ò'¡¥AÎ½¬Mž£¹Q0É
ßR¡õÄÒšš>þï&Úc?Ž™
ÐÚáÃ¯¾z‘ËïÎå“†‹ísÍ¤ÕÀg„€$ÉåªUcoì4råÚŒûK*Ùnç
ô_aÒÄ2—Èä÷,OXN•T¡½vùáÁÞí½ƒ¢½‰Âô‚5XMâÞÃ{d´2ÅVÊƒ‰ÈÍg¦“kUE)™eÎtñÊç’LYµuÎÌ8ñ‘FÑZHâê8'Òþ®aãÎ%20¦°Æ]¯ós‹(—õÊåCI_ÀšÜ—‘/¬±£H[MÖ¢yŠ²;	·§Aká„ž1¶,5MfÎ¶Êlœw…š¨Mˆ–Ý­¤™Ì¼õ½›„ˆ°æôGø±´^7¬õ·ˆBÖâ–Ð6ÖœéX#ÉfÞõ8_qî8Åƒì‰:<ôw|<[NÕ¨Yc€ÿZM¬Eeíph`wooÔ°ÇÌ«™ˆ‡T‰pqX›³Kª·I8N¦ý³ê³¶´´tƒEU“–¶ŠÍ"™H°å`¸Bªo‘4ek÷UœiM’šëÒÀ´X©³ uÈþîö§!^"ªiéÕG—.<§å²ò[y§i-¾£6kRÖ*gäûÙY6&¯ —yç°ª–…üzX-ˆôUü¦—Çz3õbâ=¨c„w©ótÍl±…µá‹â­Ø›“F5#Ÿõ2)mÚó@èÓ–âÁ·ô«„s¿Šð$$sˆØ¾ÝyŒ“¦’,•Q!y[°¬ç—ÃÖ‰¹Ášõ%›6!¢¢ÇŽ¬éôÏŒ^GQ:s­š˜°êfPãNÅšžéä†#	îSØÆ-º@þèpö£÷lMd‚4öAÿŠ×ºéÏoÉqÍh5öÃ„5â‡ÛAžáv2"¬ÝÈc„5Nô‰h ™Y·Yãwæé;—×Ä¤ÌBlù´T2/åjà¼u7'…'>9öqZeŸ¿¸KVJE/­õ*kœ—¬²ú‹ýýÑïÅjD:ðÖ€–±‘wÌh8wLY›åŒst%òBTãkÐ¨Æ.pšMìÛ˜ÑÞ&J­>lÁ”6m×”(HmµetUF€«RNÔ”…ß!ã¯úvI EˆxjSnkc³XÛJ)+žÏ#5LµÊM–þÈ=aYŽ’Jeëó
¢–* ‘ç¦ðYì½36Å6AÊšxëÌ–ù[tÖ)ÓnÓ÷_)-¦*²TäžÏ<˜´É* 'Z§”´ôÕFtSZkCŠ±Kf­²ú­ÓSJªãTJ>Ë„µ„ÚpV¦„‡I“¦=çÔP©R·ö¹ém%·l1S9_³–•^/Ö}±1ÕÚÞÅš1°šCS{„5àÌ¸6ëÖjÓÐû!™±}Œå@ª&~lØ©çz4äÆêö¥)œÉSpÃ³ÓÃÃ)¬qûØNÂ÷ÏDk»C£»û»*Vw¨NÚsY¦õÖ¬q²Ú¿sRYƒÕâÒ:Îý¯Öb“µ¬¬§°v§ñ†â¿‚jòû~Æþ°FúÕ./äÉ¿öèÑÂs\¬Å™þšç±&XŸž~ÂÖ¦Mk{{ÑR ½`	|È‚ž¬ñ þ$R[X¦¶ìß¬R\o-æŸ?Gx¨/äóe¾Âüèå†øXâ´–ªíO°öâðÅ¿|Ùš=Ü,°²Æä–+côåsM4fßÆÕja•R!µZ“Å¡üsó-XCôVª 0%Ë	3¦@6¹í½4C`-ó®©$—v($bòã}~oïp®,« ª5íB=((ƒèü¦2g!Ž1?XëØü‘ ¾´“žÆÍµjl‚ÓˆYM°—	ÖÜŸÔÐÒ™çHD¯ºÖâ^T(iu‘Ê!‘–›!ó$=.ÜIÒ!ÿöÊsß¯&R9™Öûà3e>*\¹¹©bÍm±ÝÓ€°¤-:÷3Ð>`ZÜrÇò0’_EÓ„–o(êI#ge-ÂZFk©pvœÕ¾5F1<3±RZ¯Y¿w±B-Þó¹n¦$ÁN¤„µ˜n«%p<¤Aîîª^ °š–Mù“—É¦6ÊUäÎ‡Du–Sflg§o,åûÕ—¢Yœ*"å6 55ù£‘„ÿ½óùmëJÓtcf9‹Þ5 	²A^h#A¶	A2Š,‡è‚Y¤$‚(Ë 9¤<²²˜XV&‘'ñB¹
òJè’Â$»C€\DJh-g#. !ôf€†f3»üó¼ï¹'WŒâF¥+“•>‘÷ž{Iý²)žûœ÷ûÞ³ùÞ¼~}Õú-Ù{¨²™ó a4CšÙ-q„ìIN{§QãöÀ¶öøãkC×u@2_œºÜÉ¨:Ñ:1—WLfÍ^›ƒýÕÌ_é©xìGî~JTäÄ)2öScgÐÚîZsF_Ì‚c†lìéæk6âWaM°åÒ¼G`ó	øÌ=°ùä¤êÍÌ§äáÈd	AXBŠu[ã&!#Hg“kÞÖMÁR#šÛs óÓL«ð{||JwC>ç€C&·B¸«nÆ5™õëa}Ü=å Âš…µŸÖ"¤¥´&=Í<&Ãc‡gµ“ÀLVù,þþ8aíÇ³ÊšqÍ#ÐL^Âš>†#$M¹)¶Ú¬-ÎÃ7b°yÎáÍÊ£®‘-îÎ{æ*²	Öùœ™òÇ	‰m½+W\¹6kƒnŽþÛ·¦†D€Š¶tOTµdä£  ò¡´‘¤3ðÉYZ°ñ×½±É©\î„qšaƒŽÄª	T·²<…G™o “™
ÁºÛaŠÔVèPÇ{ïíîh…ªoœ» #yc+¬­Ô5E½ÃÕ±É,(˜µz£4²
U}ZC3NÕª0šAVg?Ô.DÇÜIÂdf«¹¯óÓ£Íý:^<áœ˜åù³›·%¾>\DFË,.^ü•–2ŒSÔÄgR³“vüf¨gÔˆÄ¡T•Ì¢úÔv§{;Sñß-Zqà_„¬Šmi‘ÂYÖ`sÖCäl¹šY(µsVú:µLmˆa¹Úf¡™T›`­^ÀIß^úàÖ7¯ç÷·>ú`møàúÿ£k/zW|µ‚¿pÕÈ÷z;ˆ`ÌOú»î#†µù‘+W˜Õ"(Gæõ"dÒÉÖÎ‚š³ YÍˆxòÐZ/i<ƒ¦æDÔµ0yeÇ‚ÑÈÙ^Ø©s?ƒÁãü1QÖssÚÙ6k½áñ™PÖ,¬isMÊÚEäE\ÄÏk ÊÁB¯=çž??ÖÿåSJš7¬qã^ÌÞtgìb^+(k3Å{Wî>»¹±´r³Øæ·?¤¬}kSÙê ³Yµà×Zbx³°¦%HvmRåZ­vž³CÊ^ÌS{@ÌÜê¿zdX³ä§_Õã·$+Ö²k^~ôÁõ½?îµ*7Ÿ¶k-æ9¦)LHzÌ«2 €í ùv…¥­zµJíó>ÝW @*—/”ž|¸ÐXøÃl§š‰ÝV:È‚ù¦#™c%\´öO¢µ˜ÉÑ§_¿„—£=ŠŽµúÇµ¸
†Tg Ú´ªZ€5-j«Ëš{Ï6 .òcH/¹I&6Ãdì‚Á\v†ã„ž¥=³'à0J¨·Ö‘¸lHl¬”CZÐš¤4Œ’×o kUsZÜ¨ä¡QíÂgãB	ƒ»©yO2¡¹M¶ÿY¢¹¡Ï'«»³æ”ÖØÔê‘Õ`?VgÕw<k:j,SZ`X;»˜—ÚZƒ~ì’DG‡OéhÔ<ŒÏTÙÂ-x÷;ØO=z0³Öõ*Ö´vhøÄ×AuXí}ôaŒ ÇGžŒiK*m.›ýÛÄß¢Bß…ÕÔiž„<‡ ëpÐáŠ1¿¸R’	¿yF«Õg5ê;¸’yýº¾ÿúõ–\û’%Ö$£Ù’-§>ãÈÁž'r²«~æþØ²„\#ý®}|ýúÁåÑS’n¥¬é ‚Wó!.Hõ5~±M#e1cèy>k>c)Ç|Ç0îll¥%kÖ½ /£˜ð*¼‚Å\œŽÖ&;‹h"4W¬…´k.~3Ä¤Åk²Î¡àŽ#ÆDê¨qê½´„M#‹JQYŠ“ÂE!ç½Øøëhø†ÐY ÇD|©•ù‹ÕsNå°?¿ÍE®)8“ªl„IMvÝßtžc.rzZåkœ»Ÿ›€ô/5í[îÞ:¦#¬	F}Èö;a»Åh"WÑªHo>¥HîGºAÂ~®$7ß‰œóqÜ0©¨W4@ƒ¥àÀ°ÆÕ±ü m)#ãŒ”ý:A¢SŽž3R´Âd¿W,®õÏ)k1"¬õyÎKFFGlÚw§Fþ*•(
Ì¤O•™Sw÷Æ'Dg„qÍ'øx¨€¡îý=Z¡%°–ãsüËjv¹Rc±)$ÎÉ5,¹ªeÞÀk’RR!°$ ›¤×6ÎF”|M#Y52¼ÙæÀ¸rCeÚ˜mS»êtì¨ùK¦­ÈÉî¾!R.å-\iS)Vßç$ø/?£:µ¿ÿÎÊ»¿“¹>%õV…^;ÕM`í‰-!6«P%UºX}”3OèŠÈ—ä0$'†fìÖCk“˜BºuÑj­Ö7×±K©ð«â‰Æ¦šo–@¥ª¡ÕMWK-:¹åø	Ä4Ù÷œ@CB”‡)[g*¥¥Ía]ª\f¦n--“Y]YÂ72Ó~+$@F^[¿
®·³*ûàpíððºõ´¢ Ü°fQùXS))‡x<­X›Ÿ§j’˜ÅYm»:52‚—ãðTj©8ãIôSÛ~}ï0–­Ù(BÁš“.[‹:ÒLÈs´6ÖKÜ •5³ZÚfíÑ§ãG'?ly
kÜ¸v¼€µ‹¸ˆŸ	Öà4Çµ£®=|þ\åÔ ,?}úåÆÓåŽÞo\ÆM<ÃGäï<¸ë	’‹R:d?{ÆéÂÁŒ<ÍòZ,ZKÓ ó¹6‹º
Ïæ §i ùLnþ<Ð.Õm’§S$1n(kuâÖ[o½“ÀÙäz{ñÅt’¯r´xsûåûnŸ°YZÂí»~–™^êÍ¥{”>l›^_Q7|‡ñ^ZÚÇÈPÈQe¨>ùß$és·ýmuÄ–Ý9ªH·PZº»MEÜïñv'â…|L†äBvSŠÜs¨Ü	ºµŠº·_½Äaµ¬ÔŒÚ%.õÝ%t…´žHcïrálÏ;§8Z3ÙþÑÚš¼ûºhh›>ËøÖ½áOßÔD««(­-¸AíIòUwåÝ¦çÁ*cG—Àü˜¹“!¨'á…*÷ÓNi#©j¹¶üv$5…ìûEpâ2±šòPÂŽHÌEjµÌ™(ÕkM|@¡5¼¥å…¶\AÛ–SVsØ#†ùd„µ”ÖR’²Z8“ÜSX³Æ6sô
µìíWß~rä¶Ø¶iðš3¬%ÒÚ-QgF×)Œ“Š2£¤ÇñyÖ.œ›µe¹ý·gþË¹K}yŽK¦<ÞÄij­&¯‰jå[j®"ª±r½µ…¶¦®ØÅ¢õ£t´Ã¯pßp>ž‡vïW€mb…ëk×G+«÷Ëäðê²H©¸Tx7i½!ÌbƒUjéÀ?kÐÇ!Âš68Ø¸bŽ"DWÒ|gÖÉÞu½KØèÑ°FüÒÖ8P$MÖ‚Ç¿¦µ¤`Í'ý-Lg’–å‘¢:/ÎöŽÉZšp‰ð°)%e24£ùQžéONX›çB€ôûÈ¸o;¤=žƒ§£›¦)óQ›¨Ì}×8^=uò#A¥ƒ`:»­¯¯?‡ÖÞûÍù¸•ÖþòkÉ>|„0”††ØQQKŽKî	`uxfn‹Ì3£àfêý³i/úfX¶S“ZªµØ^ÊWPÖXv“ Ö,¢a‹j‚ßüÈ¥!u]c²°Â‘w"ys>ˆy*;\¬]“#$YoRÖÞÑc}ÒÝFÈ—¼5ó}ZËŸç5eÂ9ü´±-‹Œ>+Z?~'­IT³o?cølÑâß<v*þEIâW$ÅQô¢Ë—*ÒÔ:vÞ¨¨]‹yŽ*1å,Bi¼»ÀlˆH¤ð#­åš0Ô„€èR®Vj«	[Õ¶õ(Š>3› Þôt&)A¬- ½3\àQu™õú:T³5YÚÏbIM+@~ø„Û®ì»2Èiµvik¿ÜPIóìþ,Ó§4¹ÖJ­þ»ßexÛh ]L¸­ÿéH}Q­M¾¦º+²Šô±:Þðµ0%ic¢Ì}Îi´ƒŽÇtÄ7Êà¶È*gfVœÉ¯+ÎôrcCdÊðCil¼¦˜tª²o©­ÜÙÚ(`V¯ß[l/~úë_s;W»ÈË`±½gKF’!‡Ý=þw&ý ²ÎÂÖ²æ8e#é•ÖìiSwÃV¥ÿ-ægô~®#6·@ˆ¿î«·£/bœ‘ùˆÉqd5-2’¿¡f11ñßSfÜ¤1ÀlY9þÁjJ‚"§)Æ<ÈÞƒ©Ö²×ÐÕôÆ…µ‹4È‹¸ˆŸ+þý7ôÕÕ¢<Êš
á¹=ÆÐ {ðøéÆÆ—Oo2û?ÛÈÓæWsŸaí®"çæw¾ø;Ê×åLÎ÷Þ^K×k¾ßg Ö–—@2UåæöÈœÆ¼åÈY_)¬ÄÑj6sÂ·\^íiŠ3…ù[ý[o½2«½²ñƒq)¼Ñ	•¶¸”þèý—ªPŸ¬µ˜°*L1+ËOy?nÖQr¶¶öYá#ãŒÁöÖaš¡@YoêU’ N}Q-·= ÖˆFykçHñHI˜ƒ°Æ^hztôÉ·zCL¢.M˜V:žx×&H\)«%i‹yÕù·® «ÛØ”c¾\C –s k‚6ÅÁo¢4?ÀÆ…@.Ò.~]¬=Ý!~ ¬ñÀBPÖT 7`mÈïÄóºŠçn¥¹0‹®ýBóqty’˜@z@ã~W®A´Pš@Wé/„kÖÊ•–Ò}¬³€Õx ¶+C¥&Ø¼"XËdjVYI#)ŸyB
>þƒ°æs)«±³IcÀÝ?(l::B»õÉ·ŸÈÄfÀ	R´æ°öÑÉ8ÊsLxÙ1ÖIÇ‘Ö 60mnläŠÃ´¦Ž„lï>{ÆäÝ¿SBdNëmÖ! µ
7X(Iu$“©yÿu½œaiuíñjh¡fR{ý:l?>Üû—é%M×Øêö_ô´'HƒüÊ¬¶wíq­Ú‚2ò õÿXwXSºSU]²µ<Ía ;¯¬…g0HŸ¦s†5ï°½ÂZ€*E$0Q—d5†z¹Z9ákÜ9}øég‡¢5›ô;Ë1&zd5ˆ¿‡.áL*hiÑQ[‡²€l¦¯è¸!.1Áð"hqòü™‰;bÚÃm>ýòóÓÝû÷×¡5ÃZ¨VÓPžacÃ™Ç&:ŒýuÌ®|ÿþýãkÇ|ÇiÞyµý”Î"Þ”¬Y<3•YRÔ@Ìæà …5óì×­	mßìÝÿf‡‘7Çè…”$;nL0Q«²ESz«|Âä‰ÑÚÆ"Jv±hH³w˜9…%DÌs\þªsš]FRXûõ÷…5©kÃ¦¸ø®I;Û[6©-d|$»h>s’£rÓ”gÉÐtÆFO` ‘~ËEÁež_T8¥–£bH Á9xÖŒ‚±…‡X~$ÁœtBuMcÄ
Pr)! ÕÈn¨]ý
¼ÑÝÈ‰,Ëy¤ÙQªtÃ*—R
)J&ÜL#"jÖ2*³emíåæ$6#¢8nÌ,®C£ÁÚ“'UJÀ”UQ­”øú-Jà”Ù­BÎcyë¿ªÃ#˜Å[®g‘ä•Ô}¯Kœ{MMT&­¬ikiMIú£­V‡¡’EÈ 5$ºLxO ±Ö¤	6?âm½âøfÅ’¦=t5Mö­ÑN%¿¸Ñ,eª,bÉÂ‰râ›Íö­~ï–^ƒÐ™= ×¿è­­}ð/®ÖXpeb,‡tž­Ã¯9ö†5§xœÙQÑí²gÆ•øù×c_»b-…µAÓš} U495š«…˜ºÊxî
*s3sã±\ÍÛp„Ð-Âš#zA~§¬a02~>òWú¨YYó—ŽßüÕE\ÄEüñïk$UÙh„=Tî kKO¿|VÄckg#WP‹YßmlÜqÂIñùõoÐÛ™’sW·ßßž	.#©ª–*ë¦µíñìÆ²za©µÖ½±GT4îŽTÎëÆ¤¬ŽèâtNä5áµ‹øqMõ]²¦÷·Ð[ÁnŒ~ÏuôŸþøòýíÉ… dx™q,EÞËß£»7®"õ2°Ââ_©„~¼¶UÚý7râ2‰ò5fÂB#Z`G;NèÅŽÀ,>i”Ú‹ó½#€Œ0¬¥ójŸ©³	¬MŽ†ì\ò•¾ÂÊ¨š¾ÔÈ5ÄkY)‘@—®]:“p£‰é÷ $ˆœ|³Z 3xËYÁÒ#B;£›í!¸vÑŽPuéVËÖI“vÛA~b0_cb"öG.ÃŒ°±Î¶Û0­!ÆaJbeM$v[ÐiVšˆ5Ö¬Lú!hÍîÉ»Ô¼ÕÌMŠŠ|E2šº5²T[5éwž¨j­ ÿýšMâTa-UÂÆaG9u†ÁØ?ÒOÏgÂs½ÖÈq|P¼
¬ßþ›XÓ‰—†5?§Æç¦ŠsWg˜†³ósW‹ž1L·¬v—3&µÒsü¡pî™é9­ŸçZu¤(ÍÖkú÷àC¯w®©^ßoqâõëU0ÍN¦µ×	°‰Ý>~Ñû-e5÷ú/ö´®î}¬$<1Byºýx,wm:£réª‰ªW¿‹s¬6 ¬«q›Â·ð¹4Éeç$HÙŒ$…ib*^—œu™Î$Õ—f1žbaŒF™øŒ$ž#ýÒàDÀ„!)Ø\’©yà}ÒmzB@b2ÑyM‚5ðÍñŒð•ÌiœÔ½$R7“ÇÏQÐVÓL‘¯u|Ì¡ÃÚšßFƒe“c³cÑ3tÛiw³q¿nXãž^£¯v
k?³yè,BjìfÅ¯Î¿–°æ{Éðû!±Q›ÿO°v9|$°ÆZÖÜœŒ2ó$-¨ïu~({Eºµî^Jd(ébdhÑ'9;’u¬l´„ÌÎYëPþcodxhS¦ã®Ò]7„U:Ÿ·Æîí¯9ü•yFésZ„5¯C‚jÍ­:5¨-4Ãž‡Õdk M5•å9»åÁ5áœÄ4F—rû‹GÍ<Qiö£ÕIAÚµ:o°æÌïµÍöPAÉ$e%¶Ô¤M¥Z\ƒ{*i¼FT'xtqrbÔ´ærÓ²LÔ¿še>µjÉdðû‡¯:·Ã›?–Á¼‡Ôk¶Åçð‚?½©”k%:¨é?–"Í¥üèh»¬5Juµï¬rV>!¯+&„Öå™|“s¯¥‰A­–A
k]eH››`¹Ë?ÖWôÿ‡TKÌ<äõW«~ÍµëOþð¤<	®i®"ÝÜÅlí:?-º—û+Ë…ÜHÿÓù«ß¦Edg`íÚÚ;Pýáøõ¤BÒÅâçplÉàW›Úü9	‰zµˆq!O^>š'Äj3WÆ³Ò·f>ÿüí·?O¿›hmÐÝf­«Ù’¼ûñ«ý“+qÞ›3¸ÍÍŒ£­ÍÈ¯D3^
ka‚šOÆÐyÒ cT,XKÓ å0rÎrDÂåjÙÏÄkÊ€äÆ2ÿßüÕE\ÄEü,°öÕtí¢}v-V[dž/ÝYzúË—#xm-ïÌß»§Yn±°\`îc	sdÈåå/¿ÜQo`fÉÞ£í)Õv½Š¨¦Û ´v4¬x¯Zn®èDaô>—Ê˜‡Ô~­MÛêZaÍ°ÆVí©Š¤"äßqÕ~MÀš8)&*ÐåWÒ{ÿeï?÷óOQÓ
7Ÿþãr¾@ºÉ;‹äÑoÕ­g°’¦%B»¿«ï¦:OdåÙŒÊIöëº¤L)ýhjÛL™Å““yÌû_Å’¹Ôaä·€c^ú½µ‘	›ËU™¼H·¸\a^e”ÛD—d“Š4¥9ƒUxN^#®9³¹ÇaXâõ¨¼ÇÈj1Öù¹ñÎ!Ò (¸’#‰ìD”×ÈKõ7NýÒâk:+¿H~+åŒè)˜¡n-[¢«MgrìwÈn¤Á¡MJ\æK{C›äÃÈ!}Ma–Œc?hieù‡oAh’kÊùãZK@=çÃìÈ…5*ŒaÉAÔÓLa©®æ=1åHE¶t4Ö<ˆùÿ·è•7sõŸ?‘y¿Ûb§A‘â·I¤^ÃÛ½8Ö;êqqÈ4ÌÌë\”ÉŠNö;Þ@k¬°Îé¥HdUŠRÈ©îÜMà‡ÈÊ”ö¹¿E"äÃ‡­Õû*C#èMï ÖNr,2CGû8†±MçöØ|Å¢ËW‡{ÀZ§õ9çájµfVs$HÎe™ÿ—«ÖîŠ°v>2=7˜É#ÕâFhÆk•kÓÐe03¢¦2gñÚæ${ž’¬5Äj4Y‡vógËh =ü¬sgd…êr²ÁNÐÚÇiÄ"“³~#
‘HPÒ„uÛ8&b[”£tŠA‚áp²[[­5jö<¾qªTFÕ¦Å25¤5€ÍÜ¦–k¶í‡îØê¬F{üSF§§“7Nµ»¿¾þSÒšÓ }‹aSLGóþÈqúåÍg±+6'¿ÑRŸþ3È¿ ÏZ
lgâÐ<Ý]Í–èj]T+lZÉ¸)v`3¶Þe//2`Dm5ëˆ6øÉºpL’ÇœÔ|õúôºF· ÏÚyXã€ÇõûVÔFà4Þˆ`Íöi„ù‰8Ìj~ÖYþÞêÒmÕ, 'uk8Ù‘!,„‘T§¤®)×“%L¨Uqi8>ƒŽ{bg2Ø€ddA³u|kµaµo0ÊÜZµƒV˜èê$æÈ9)í—•fX+oâµ_­¨±H€µ_ j²ŒuÞ„D«FuZ\õD8Ç»<©’‚µZ«S'ãQ¶ÄJ£çŽ»V«Yã]ÇÙPP!_ Í6PI×¶F§&³#ÑgøšÓjÀ#]§Ü~¯e_Ä²2&Ö]¦´R‡“¸ü—3îÃRb¹üÍÙnƒÍk+ßÜ}¢JôFUiük4ªPn¥\Ú}R-ÏÒˆmùÎ•NkP#¢dêê—ªÆúòÚ%’M¿¿—å¿ED„»‘7y]Æf1¬¡Ž‚ÈmNhæWGw¹P/Ž¨ØìëÿøùÌ”¿‹ã¼¿ÈŒÐÕ¨ZCXãG zR}ÖðsÍÚˆæ¸9C'æØ+!ãôÉ>‡(kƒf¿÷=zw¿º52rNXãúaG]V»vkq?Wü	X"Ñíšjàe	¬µ—6nî(Á‘Âœ/ïwî’z’?p•@vçËXí‹{¾6•çÂƒ·µ^“¶ZÓÝ‘(kkcùBv|,»¼Rà-#ß^jçy›á«‘äÑ&+Ž]®MdÎ°&ƒÈa&³Vm£×_\|õêuZS¬˜‰è¢5ò É‚Ü>‚Õ>úã½¼U­ÍÓòrañ°VÎök—Ú5.È„lUVV¶Ô4£Y¿c<#U§ŒÌÑÀ8Ã6ûžøØy_:‘«„Ì.Mkü¦E‡lÞÉÃº¿AÅvq"øYuq,¦|nˆo¦µ‰îzµª–/Àžº†fÁ_fûÀÚ¦Ìú§å)B€hÐàŒg°•sˆ÷Œ‚²¬ðYW¥i<U1[2ŠM³oð%b?5Ôì…Y$•o]÷cãÙ
xÍ€£öJäÆˆ¬ÈPÖÄãœrÝš‚mô€DNÓC<ÇH;­éj¡lã~‚}¦ÜÎ·d/]ÖÎ8ŠÀ‘ÐÚêŠeÔ1E?…5§¦>“Ž8Î¤Ïô€=¢¼™£—<à"W$´–²Çêñèåûïô·¬õqîïõXÏ,fÇ˜ Åfòa&}±N„¼*Á9Ëõ¢hM««…ü|^Þ±)¥>>/·•ÕûÍæªl f°cÀ¸‡ˆí¯µ¤bCÈCÃZTÖ<ü¬‡¦ÆEÄW‡/¾Ú{^«6>|üøã‡÷YUG0F´uÑFWª*#wÇfX­­Â‡N#g(ˆˆÆÓÒ^m!gÑ}¶]c&«ÇØëZHeÜ&—w·NHx‚”6žh‡Hf*S2Ó)íÙDuÍ^ÐÎÀZJe>Ž–ýb¯èÁGUÃf)ñM˜Âsô0_M{SÁ`ã}øÒÀA€Îñó	NM³ÌE2¤`MÄ&P‹áj6vCìp¦Ö¸sóô‡¶çÇ§e~¿Èÿñ½±Âb¡6‘Þ¢w¿N0vD¬SùÚ`XqüW¬ûß&«EeˆþýjPX#‹GKO²±•®ÈUj·ÆXÈVÊ2œÓÜ•eÃìBÆ$d•W;,Çœxí`øúÊLaí¼°Ö¬õI™<NùHäº kƒŽ`¥Mˆ9¤ã`8â¾5œã!€-Ò(šÂ¿ã=ÎÎë”\Tx×ƒ`6$œ
ªAjê³FaYFI]xL^Êu¼€É.i6…puYÀK^©‘è¦õêÄ(¦N+p^µªDÉWXk·YNýZÖ¡4æ%7xa¹’ŒH”0Š“Ýa„)qã~¢F¦û‚Õuwã\—H¦L@j¼³-mîíäéA ‰gt}ã[Ov:J³Å]ß¯%Í]Ýi7a|ÖÕ1Ú	¬qÄªª9üenBk]~Ž.¦:ÜYM/z„[L\ÎÉø²3ZÕd®ÃýFÇk§%¯ƒS&#KmÒHçùßæƒHj+>OkÖ0î—{¸Ö—)£œwiŠ=>ŸOe,¯æí	™U'ì­äy‰ùx®(š.Ç#ãØgÏó`ò3Tµ©ñkì² ýÒ»Õ;‘­	q86Þ'fzœH©—‡\ü8M‚óƒ.þ)«%ñ=X#~XYc½}ìûÂÚ"·Ðfí3YA¦Y°vñ³ÁÚ7¶’s¸nMqðü9	Ê-yöÅNqþH­¨7¢ÂÒrÆJÐ¾KäòMd5–7Ÿ±Šy%;urÔÛ>³`ÃíûEkGÉ›uŒ(SÚÆÇ•žoÓ*¦íÔHüªVZ¹!lóT~Ph¹^*ß‡ùÀòŒ£çÕW¤±õŽÔû¤°Ô\–ÁsãÇ¥ü½{÷vnRTíÆzSXçR—‘'»>©ÕÈË¤÷òFüÈ†fÊ]x‚ÌéIp±÷§íí#ÃaXCPK²!u†K|Xm¼<s0)X«uéëyé?¸ª¸OL7.ùž6¬UA©÷ðyÏte"3ˆ¡‡qD¨†`Ä™Ý8…%yªZèÞ 3gÐp–dc3ÿ…w™hU—Ý°rÆVÓ.Í×6ñø7Á…+wÌ'k˜ô¯O6|.Q-ðBs°§a$4ÎùÁElÖÑ¶R×Œ˜ÊÏ²ZØdŒhlKqPnäZ••Ü™2µdôÝ4Ã>ÂÚ¹ª´kz¦ÏJcëBh‡ƒ´æ/áM‚t¾ýö%ÊYøß­íÎÀ™W¬ ­m²°¹v´Ý'è“£ôÝâÕ»W)Xsƒý-¨ƒ¼øMFþºZ,bÝìR†y§Hñê®ð›«mCHk««KùÕ-ÒWWÁ¬Ðû;á,´TsË5ØŸqï?üÌÙ{{_þªVBUÜ×¥œ—j®>$‚‡¿‡ÃñMéì¬—ÖÞõV”·ÎîÌóA-û~¼ÜJÍÉŒ¿°ÄÆ=ú÷Ú2˜…»å5à-|ž!Î‚œkÒx(|n„>QÇÂ+6ÑÑÄ°f³4¦Â§b˜±ü¨y#ôÙ5lÂ=˜ÁÀâÇ`Ë(f“ Gø8œ‹CÎukèäÇ×¯¿÷^íXL&	í¾¸Ìš5´cIk†5‚m 3]àðøúóÓãk×¯=ÇG ŸÖl/’àë`Ê’Q¼(fŸ§}³sÂšŸÈC?š×þƒ‘7JkvªÇpÃ’<c“‘|‰Ê–ŠLHN‚,.
‡à©E+mÌNE´n¹:0qyC¨í![5.–úq02~¸ÖÒÚù,HGßªJ¿?>üCA)œ)­8ÈiÃ¶~„ÕLi„wvð7½eƒ§¥Ôµ|h‚½è\MÂI‘…Ðy3¢5IŠ,dÖœ/`írEBPÄÒ¢=ÃcØ”±*Ò7JZ¤%YMÖJMuÁÊÕƒùScRN%å
bóXf"¨ Z5KèÅOdöx»ª4‰*­g5u½ï2¡`&²»ë|xÊü…ð²à2êÂXcšS›jÎ7›É9Ë9RZü¢‘µfTuKÃ­TF«iéWUç,¬uãëR;/ø…Þ!+¤!Û$~‰Ò‚ëˆ.ˆÖ¢ ¢¡(ÑM@…xíå~*B<Ò5U½WŸ¥F½CÏ5þÅH¥ŠïÎœXJ™‚œ •³óé¥+¾née€¦fX£rÍ~þ;‘Ø4s…W:.›"Þüª$ó²ÀØ°m!Y æ•¢/LY¼2çn}úkKi18TÖ¬ëžØ„\›:™éõ	²ðç¢†ö1Û,­”µèßÏ-ÆXh³®ýóïSeXëý`Kl0Í¸Ü Ek°vñ³ÁÚÇß„øÌ]›$«­®JY{œ»¹³óì
5i_Ìß|ú¥Ò¹x‡R£²Â°JÐÓæó‹LŒº›;úSiVS¤ÊÚPÖ>Ú†ÐÂ*ÓX–=—®7ÁÑ¿%_@ŽtA‹ó‚üÍW”7Vháð¾Æ»T¡G"þ"¬¥aiíªÖ^žôÑjíéÖvÿ %ÛÒ›@à)—wð‰on5ÛËw–F;ÈvÔ°Í~ø¤Ê’„!™¡\•yã·%b&Ç
#3’.çª³»¼¶>>B¸Óå<•;ß•†Ü„xÏêÙú×Ç×ú'WGÈù(Cu*páR¢¥ÒÑŠéÑªfY//&Ýi•ðHpáœäA>KN{L¬3Š^{ÚØI¤Û%]Åõ=·í&²yCOáZZÙ„8mÓŽÀÚ4fëÓë¸¸,u¢µ¥\»Ë½¿õ1åj#£wÙ’‚rëj–ÖT­FËí£¼¶«ô¡mu¢Œ	¤MÁNuí+Ã4>'’(˜ÑÒˆ“‰t¶´ËgÄµð
™’± Í€…H<àîà)ñ³Â‘‹çNÁjŸ\}ð-Ð†¬æVkÌaDhúÎ« ­õÝHwûèa­HÇ@¾ÿk¤E&_¥?R"#y\à†äÿ ÙSJ£¶-[T…‹¦÷åý}ÿc±´‹q)ƒÝý×«{kÏW_SnQøpõþÃ€`hÄ5§@>TÛÇƒÁãÊƒ¤MFÄ7k×Ú÷K%À VÓ¢ ÙQ‚uõNZ7—ÖœÉûŒ¾;Øìz@Q‹#mõýü±Á	nþim¯È‡öÕÁ'„Wå‚pJœÅ	û$v!:äÏˆÛª½«Mâš}EüIInd4ïù‹ð3¬Eç1ê(FŠjBÖ"À™‹²¦}zZÝçŽkÑJÒ$gÈ“Ìæ³N,\7p6V×Ä6Ç°Öi‘EëþØXzcóÝCì9r«µã÷~3)ÉÉÇòAâ8üÍO¬¬åì<°ù¼7!yÑÛˆkl´¡;ö`$~¼ÁÈ¿’ùEkI\•(…qQju[ß•uåÕM&óRÎd/YáÊ•™]ä>Lºõˆ6#¡6Å’>ÜñúÚøÈÁXÿ‡­û¿óé­9’7¢ÁH@¾A¿þøÕÊYó¡&ÃÑâ° Ìáö¨¾k€À¦SB1…ÎüÉ/*-Nâœ:¿ÐEA¯*ÑŠû‰ÉöXæÃªŽ.g$i‘ X­«+uœ#½Lv›ÈÔi#}[°Ö¡îò(‚òhî&Îˆ˜/N’J	ÄM6ëÖÍðÞ¯BOxciÛbZeüáNxßÝÅ_ë›ÎEÙßÝ¤ÂeZ¤)–!Ä•eÁP¥]jê~¥Ý¹A´
ý°•É÷6»Uªç€5ûS4 –ïL2ˆ°æ’Rî‘þû¨"j6 aº»_ªîr5~jM©­Ë9¾£³pa]êÉ~=­ÉfE%Ô`-‚fhÅS½ÜªMÀjMVpÉ¤l÷úâª©‰£ÈMÀABâÚüÞ!$C¤C¯<:þ6só#ÔæÈ§˜³ÑÔvr¶‘÷TI#µ_Ëê’‡¦núIç[bÛ^]~ØWgú‚6f	kYC˜K×d2’”s'‘JjÖÎIkãd@i³FÖ¬a>OÓ,È‘_ejrI„µX»ˆ‹øaí¡Ií3`z·Ycqøààñýæ!wž}ùt)›]ºCuÙ<ùc‹KíÜr>ÀZ÷„+w¿ØX"Ýp/í‹¯€iLl©²†ic’$â+ñ‚,®¹äå7±ÒÎã81Üª98A~K>WÉ³ º¶¸ÖDM‘JÔXMvŒ””÷_îlm=­á.²Q`…²}çæ<#ËM¦V‰m¨°µUª®HØGèÙÍŒN–Ø”êHn¤*Öf¹Ž­ò¶ßé˜Ö:\Ãe˜Œvÿ~wï(Ââ‹¿oL…¬}úàèè¤w}l˜ì”rFý_º£üš—'»àüû«šM˜Z%©É	²Ñpy5¤¥B´˜ñh/rîëJdôÎâZ`5=É#‡Ÿ‡†F @pUkyìv×˜‡>§‡˜íÿ¸)Ü7ªÒ„€LÚšçC/à ½™Ñ´q–›Ya{‚^bHS%zrû¤Jm!“ä;ªŽ]„5D «Ù`„Ht5®%šíƒ!„5|FÚM'BšÞÆîj1Ï>N:)q¥“a-‰Èp‘êimæˆøåSG¯hv=ö·ßº)¶ó Åá†5§A2ukL–SS‡½þû/®¨ª[ÝweX€¸
Öîê¸ˆàVTú‹Zd³î
Å1aCmjÆÃk{w¿Œ¬–!²­´ /¾Ç{{Ÿ=~ýš.¼ú_ÑˆXªfVãÎˆ$5C557Åæó_»ÎŸ.¤V.Û[FÊš*-©ujÚims3šL‘BÙ€ïˆ}Ú‡ÀZb	é"^•ÙÈÞ®Qy•ßèfÖºÀ4—©ÅF×Úû,wcë	æ¹˜JéÏ0¬ñ‰N¬43Ù	õ¬°–0„ŽaÍ¸åÓ¡ŸXp¼aNê´ƒÏ5¿ˆÍÜeÍŸ6± ?†Ï'ÑÖ«Ï'ùjÎEèžF"“ª¦±•4önª–rÇ"9Ò±¹¬ýæÆñs2)g;ÝüKXí¦öñ/]œŠ¥g¶ô×Î‡yÖ¤v>’ÏÔèÇ­kÿ6iFŸ÷²Â‘
ÂEl *ÛbÑ*™mãÅqÏ’ãD%d[ðàqñZ1F–R
óú8ó
@ö7Hç¢M³NˆàÉ[©º&Ó’Ö,¤…Óát¾¢¨Æ_ý«wnî‚mµ˜'¼	n—~‡£Q¤v®Ú¾ä£uÐÀÚ%`õ?¢ƒú(÷ÌVÛaþÞUÜ¨–J[8ïrJ¦ýZ ïÉ:Ç·ÈUX8¬*Ã²¨„f­U'
….³rÛUS­¼CÍ:øVaÓOË²ÙÝÞSBI²›œÕÚíÚ®rRÈ\©-/‘SRoçnÞláqRiñ`¦[ªh®ëÖj“­R­C>6ÏÎècsC%8÷wkÓP[TÖªf5'Úx 5ä:ÐÒ3¦)2F.Qƒ Wª”‡ã·”²ŒX_Y³V3³òa¡3Ÿ§%õò«v†òËtX[i–kÙ[oÝŠ>ú1>M3{½ k/®_gôXs¸}[E‘4
gY·µõ#ô–eÄL!.‚o¡’lêí¯´o'\Kå<³ZÔ¼¬^íÑÛEj3¶í7ÍÉºß#‘Õb¤6#D8N£·}æB-©XK•5Çø °F$¬¦H)k	«]ãÊñ¯ÿê".â"~–økÔ4`xŽc8+û¾ÌØ˜gÛl.=½IµÅìÝ/–¤zé‰¥ª§÷È}ÔÛ•Å,ã/—¨>Ûþ(¾	<J”µ4LkŽÔ½$V©Q6×&rjÍÙ|{…hç3RÅÊ"žÖ0²Ùµù›{ï¼óê“WïÂšôÅjúSGôÝþŸ”Ó=åé=Ü=Ú¬â1B™Ð%Ìï,¸BÆ9˜þØ”®i±m´Uw°Yå6öÈ˜Ör%‹”,-2ep²Ÿ, ¾$>qð}ƒ%%›O È££úoÛ|b)ÓQŠÇåƒ!’•9z¹ÖX«!¸ÕœµÒU©Zà0]ƒÒBk5×¡	Õ¢/d*¬qèP9·u5e¬#®ñY´S#dJÂ³‘ÚÀ:U¡¹jÛõ
ÖM§UÆÆynC^è qá3ZÙqŒõ9‚5ªøPe 3ÎÚ´Ÿ«ùÈ æÞá{gj£7¦u©i%v%6ðZk8×\ÉµÌjÃm,!Õ?ÈMÖR`‹“îDºK\AÎ€\´Ñf *í¼_Œh)™²šFz'ÛÆk/?×>©9R±	ÑÚË—ý5Á¦ÖúÛÀ<¦•ŠâUŒDX«¿êZò»š±GÉ9ÜS¶7º¦+ÜÌÛ0‡_]F\èì¯ä*åÝÙréµ Œ<H´É×4ŽØìÿ>Üûx#"«gn‹ÃØö¾ÚÛ£3öWü¯V+×¥Üt;`ºB×BõåŠöì°&]máŒ|?8ŠH–ÂZˆÀg~ˆpñ$7ÉiQZÑ€,B#(KšÀÆ:™pM'­¬ñg`:¤4SÎA‹Ó±y–àœIhÝA˜Æ~p×Á÷² {y#<¢f0‡i,ñ©çÁ)ÝkìÍ.Â¶hZBÏý8úö§ÀW“²e"¥1a4{4±#¼å0èl‚·à=Â˜¢¶I49l!Á=Àm—ÈêæO*¬q†{ø5¹GAÍ»3jšs=Úš–Ðs[Ýxc¼Éòßà02Èh)«qwˆi†ÕL7J Ì3ÅE§=.†>†Z/Q=›.¢‹üA†cõÌ†ãt’ÖæmÜZ`79þëþ7(kœ¬Ù	ræäžËìý§½¡Íá£bh 0sjœ‚O‘ˆYŸÑ0ÆoàÜN"QÖÄgœ&’í°kØ°©"aR¸ºšËØkr©*:âŽ‰Ü¥ZMÒ…†7Ùn§Åª$ò“r'”ð0jhÁ&˜>a`Ÿ“iI“§æR®°œ©u”H˜Ù-vÛL;¼ëÛ˜Jm^dwUî¼ç…’÷ ÄõŒê0MMJÉ¦\ 2|cz_Ë[d%¯r8|!G[ùýY†À]¶ZõýêtwVýÎZÍª=û«úð°iíÐ/+ÎŠÔ ¸ªÓchÌs”ý9Ê÷¥AN‰ç¶aE)éuÍ:‚[®-}”ýn¦ŠKLß5X_TÝºZ‹WçonÝ™Ï¶òoýú­«oíy«¥#S;{†5êÖ^|€º–ú@fóìîŽ=¢¤XölŠØ¼½ÂÝ»ñ"D!ÞþúëÏùÚ|£óÊš¿§C¤¦øàX;éÎhúc83sEÙÔ¬q€5ñ”5¥F,%`§ÛÃÚoƒ´æýÙ¢•ísþ"°EknJ"+Èo¸ñqkq?SüÌTµ–”­}¼z•xº³ñXkþãÓ{šLŠÙ;+KšåžÚ4Ë~ºsW3¤‹tŠ÷8û¿¾\ÚØÛþèÿ±w~¡méºÎ\ûnƒm‡à\äÆÆI„‘K¤‘ðhDJTÉ²cYG²'u/µµ½w›N“&¥%>Å¹Ê9eÚa’6è	tQohˆ9W›`20c
ÃÜfÜss®
ûúüžç[_—'ó¡W~#­õ­¥ÿIdë÷=ïû¼´"S¤Êš¶øfZ»±‡g?¶Š¾÷ÆRDbXä-:Š9"é¿µÈV¼Ájùüý…y-‚¾÷Îr£ûC”¶lúñd¨òu£?ÇGi­ŠµZžô5Mtü¦.Îa8ò€$ú‚¶.ÓiEMiì¬
’©»¼C
<SIUÉî:Ê}îå[~¸üÅÎ§¿½ó 	`g 6ÒÝw²9Ôµó
tÆTpâØöPw‚!«–£=ài	JcbeºÐ”Ú… j¾…æx5ä­†Â4;ïGHŽ´]±Ù(f˜º–À4“Ý–‚»rmÂù#XSì÷ˆX§1>ªÍpKŸ¶Û
5j~ðd‹¨æÇ)­ýRi:˜RØøWôÈ¨F>L™­ÐÓ‚d™ÉœîyÔ=òºhãûÙjµ)t‡¨£ÑšoˆžJ½÷Ö\a6ŽmÓb)¥a«È§Ù-ºöGk’o>»ñŽöÍï>x7m¶öÊY%äÎÝ±ãÔ|vãŒ5¾ü½ŽeÑÕ²ÃYÊÇÑ×†‡O»^-7œMÚ®ù–._\(±k·Y—¦€Å¶Îjz)S¢6ÒÚò—x+’‰•£)ÌÍÕk	­…,eAœvÎíîßs`
yíÚö—Î>^^o’èG‡Ýeš|FKkÞ ëiGlñ–pËÇÁW¬_K}ÌØÀæD	(Ì6#éXSkl°Œp?ëÄÌŸC®ñÉ@gœŒ	“Ênd cá3Ÿ/Ž("ëô;¢9FD*“JrÌCÎûPaÎ¬±éŽD/n[e|Ñ‡ò_öžApð×	ôzëR6p”óBmùÚÙk;šÂÒFÈmÖ”hs´[Óž"«¡Ê=žxmÿ1±¼ÜÜøçºA*èaxK\ššRC#¬é˜ˆFáïëÊC¸öÌø»u5iP—Y- )ŽÁ
#[¡àŒAm³Þê®Xí¤³îû9›ET£íµŠ¥×gO3&°i•£ÿ´55~ Y÷ºêŸž}¨‚5·Y{JYãˆÇaðªOµÐvêàOýlÀ»Ÿ;tÃ‚ÊÈˆYÍ§A$7 M_uð4pšÓà3»]jçàdÚ´að†,2(«sÊ„­Œ&´Ëó˜=Gä=Ü-S²v¬€m?mÎjUò•ÅPjuï_È*QããµKLƒj[ÿüÒVùj¦ÂU$eô˜§ì¼1Ã“)}R¶æ…	4¶¥ÆeÚ«)×‚äµ²f…fÙ3)ës½v}­N2$Ô¤¶nô5-à'‡­ŒZ|Ò€[`™Ì_ðí„9M¤æ[:«iç·’dAé[(Àš°Ô{§Z.ñÉ{¦HÎDP\Tªß±zÖ2XK«²¥²æ*Í¾ÄIÌFÊ”@ :ªkÖ^Ÿ¼86òùK?ºø£´ãÙ ‰þ¥Bdµ³4Z¬EUÍï†¥ˆbu£ü¡E„Y6‘Ö¼'N×7ýŠYíé0ƒôç¼§<HÞ€ò£<å‰ì¶6ÍLF‘š×™bFâœ7ÈjÚÞxì`eòÆ“ÂZ4IQ¯¶á‘X#2ggYÐéPíHY;Š£øîâú‘³Å­˜`s Üª+‚µÒåGk¬AÊ\ñˆUÀr¸¨*¶_1=Âh7³³çoÞ¾½µõÎ}ñÅÛÿF*´#5ƒdë6‹!ro8¿¨|Ç¼‹°7ŽkùEÍ.8EâpÞÒy
Ëê¼šçw#œ XH5kbµ÷X:kïí¹Ö^QuÕäxékEÚH›<¡J»^(äK ÄP,,^~ÔÖèúò€²ÑšdYY~NP”ˆ‰êTæòÕ/o]ÙëÓ ÀwïÖÔø>Ööý÷_zòþ$cÿüN–££yuÄ¡d­Zª•™#Æ™ƒø€ªªf”ÈwAB8sV¢ê]ð-­ùh³ë7Áb5ÃšÎð”]ˆFºŠ>×¡Ÿ57µRËpN-ÜSn šÈ£‹ÉíÂxS—X“ß#Un\KtG¥¬Q{¸AšÒÞû¤57Ìœ}úº"Œl*ÂÀÏ×¯gj	¬ÉØBq$Tdkí‚ìá,ƒís°‘)Pl¢dX§ÃF ‹O>‹òY8H«¨í)#<v,JÓÐa¢sV‹îÏS¯FÐeëÇ÷>øø}k.üÀÊekEjÂ”ÆŠñ)/K©ê£3ý2ó')d<ž¡37MÁÚÿ|ydhL¬æý0kr‚ÌL)U‰[›Ft£Pm}ù£K})›µwñW1„ŒÙ$¡Éj¶1ªéT`82p”&RYÌÁ™æèI%@ÉäÓëépÑ#7ÈÈ[©±HLL;b‹Î´·Ç«á8¢ç½ãE5 #ò@ëWW%–­[æ0Kl±+vRÛr!]ðfÊsâ£ŽÁ4žÚ94ˆa‹y~×4$J‹/Z›0mXNKÊÑ¨˜Ó.XrCÖ÷eÎ„W30ÀqÊâ”ù¥Z›˜€¯î.ï?®5ù./×öï†Ò4{ö›ÖÞŒmn‡í"¶kãµ»EmÊ <»ÿ“Þc¥(ÿäŸPÍ”fbL‚Œb›5±p( xJX›àÌ¡ÞØÏÏüÇ½ûJ3x­-Ï‘K¹g’µLñ¢3ÝgÑÜDK9¥%Õdò£Fk³Š§,Ê^X&’dŽõû§Ï¸égÄsš!ÖH¤`i3àÝ¾åÿ4ž>ÊÅ¤È‚}ú}GŸÅšr0
ÀšÙLãÀÍjZÄPN¢ªõ7Ý¯‰¹¬a-!5?ø÷Èóïs"	˜§{ŒÀ‘Kø;Î_,5ÉVj-–FÊïhFG§Ê5Ù‘àsô`¥ÃÊ™N¾¦¼ÁZW,,ª¹yîzø¡ëËM[Cò_O¢?,DN$‰Ï`Wæ–šÜÐxíÍ7ÿ]~À,Ö×æå,Ù­	´•$G2–Ë˜4"âQkQA]7q|´¨¤9‚®kÈühâØŸìFý&ÕôÜ¬pÎýÀ+µ¥¦²ýµÌ
–”Ú5—J³ÊwÞ £*d	»ÖÜqŽy‰DÈÎJ
÷…Ü©‹Ç‡Æ&DVâKQV36¥ÊÚÃÝŽxè…{÷H8A…©¡L
ðà;{þû%Ü*?WÌæ tfœM“4OÉä+|º?O)-ü9 k1RxØ¿×ã×}›iMº6Ûiš|ž™Vä·®ýšübD¯®hâï#‡‹^Q·¿ˆbPY»19"¢Ú¶•5÷ÄŽIÆµ|ï(Žâ(¾“øþ×±fMÒÚàÚ•+[8ÌÝ¾r­5_˜´¹v{Ùqóöä?²ltóå_ýá¦Dµ­;wPÖ¶îÜ¾¹uóW¿YëË:?öïˆ†ß¶YL¼û‡‹õÅš»!ËýXc¸­Þ&½²=4RXX˜£=@^Slüóì˜sj,—Íb)£"ÀÌ]ÖÄI‘Ö±ï7­Ý/×òÊ)™ËÓQ¥ÖZiu¤¯©3@	ü[YDYkÐûÍo1ÁÜšjtNVäÛ„ «É×á¨
Ì¥[6¯¬·æ>úô‹4’,¹—ŒGeií­óÙ|§Þ(åQÕXâäy…­V¦jMxÖ›ÐìR«œHJù¹äï .ON Ù«Áè<X‹°C…p'l·]®ÊØñèMp—%¡Ì7¿Kòáâ{%NÎø¶_	€Ny-”Æ±n­™êà6æ>R_4ÒkÄ’^†Ít•ËuŒB¹š#ªkl‰X¸ì 3.SSÄûr´QtFŠèª‘üP^³]±©"•Å½ãÛS"0Œò§Ø×ü4¨ñ`‡ò"ã\æ±Ã/«sM„5ž¤µŠÂ­­ia@Ðå0réÒ7¨^ÕúôYËj	}Œ%{5øÌË(k9rƒßâÍ 2Úê(õE°ƒr½)LRt3­¶`-Óº6·ÝaúÁ­)ÝÓK@s‡µ«QË’%Àf)Mû?%ÊšYN!C*k¬Œ_S`ÿ¨»™“]÷Økò?aZ_ÀR ¦òÅ%ÃšCFë>ÛŽØÞÙÒÑC.‹:[BjÚë±Ú°FànCr¯Ý!ƒv¦w¨•1Ih'ÛBÆdtäz+išO¤UjÞ9î9	¦dhn!|Ó6ÁCdÆCácö„Ó é›x¶^ð5®KóKV|Ð1jKë{2 O<¾ûâþ¾@2œ÷÷Û·:“»#–)1’=/¸hÍìD¶Þä¦‹m	?öz¯ýS)Mv©¢2£°F¤õkþ¦Ó’5Y¥ëàÄ ›VÖžÉk!3ÚóÓ …“i „q¡˜Þ°#I¶cYe8Â_(U ‘©LË##°šiM÷ÉsØ@dOg“’1ËkÓý~V]Ö0…:\³ûm-áÀê—¤³á¿úVˆýµ†QÂ&24µE»EpÉÖDjÆ4qh„5HmÖÂÚVt-Q<VIòCp\qÉ¡,¿.jæ²Ðše6Õ¶uò¬5ÕQQÐFWê.ÁjŠUwò ©B¹$­zöjpf ©ö4OT»eÒ4Ê²jÚi±Ñª·íS´Ñ£§tÓ-ÀŽ+7$ÀQ¬ŒƒäZÖƒ¬æñ×©ÇÙíµð*©È¶ "œHMÙ«3™ŒìÇ“·LÕ‘ÖüþÓiÍ›DO/+|ŒòÆ"T7¯S]ýTÉ‚4¬©%77
%efvÔ8S%ý³¯*¡=Ùí¢Ýòõ4YK,ÑÖg¡õ Q¬äs³…ÎÂE¤®ž²úØèt¯X¼t¯ÿÒqÿ—F5—‹£¡¤ÇšÞƒ9Õ©‰Û°ˆTäÈ˜g>xYWh‰ïÔÇL2Ñ¹ÿc=ža/‚ä®2!/¡¬í…yêÌiDµI!Û,›ãÃÇO³PH/€¸Byx¥S§c'V«Ä$Ho#ªÙ`dÀ_$¢Þ"v©YYû×#X;Š£øÎºbÔxÜçÖ°¼võÎµkõµìÜ&±–Ã.¹Þé0œ/àŠüÖÿúÃílnëöÚææíó(kÄÖíÛó¿}VÖˆ´-öÁå:
çrèd‚µaV9çæƒÃÓ#E\½hPÞÖ^X€D^S[«Þ)öwžÖ %s „ÊÒûþBž`…ÉjIËŠíÊü|›ßâ:ü|3Of"'3oþòúÒ8Û_^/ãWÕîf®;–´HG¦ß”³èG©Î¾úéoë÷û…P-Jktäæ³;Òà(Íïbã©LíØÉ¢42zð‘UÓk¨›f-‘ýp?I6"Æí(³¦â‚„jðØBXãÉ†‹c6¤7Î¤t"åw·Êx¬Î°¿ÐÐzKº©ñõ6`ÄžÚ^½t_MéšûØL$	ÍèæNOp¨p[bõŽd'0;gH<<bO˜Üb¤¬æ½5¶ÖJÿÝÒba{[Ñ¼|ež®hŒî"qÅÐc–^HÓ9ÐËñlðˆH‡ƒ°æMrõäŽYM#X8ÛìZ¬)3’÷SöØ)jÖhÉvcï_<LqOVoµóv<Ï¼ì*óÓo½<ò°¦í}ÓD®'Q‘¦Ò ý¯Õf%¢±.oÌ©[_Âo%ôà+¨	ÖŒd.e‹r¯Ä0ª÷Ölê¬-/—éýJ‘ìnB%+°$-QÌ?Ú4YÂÚ«lxsÖ¢ýcâ’ù¯’‡«¡ÝF^{Í¢	¬‘Peë~–²:—0â©K¾r¦dd6‚C†ÖÔŠÖø±‚Óò,/"Mû‹ÁP›æ¢\…¤ ù/é¤#UŠOà²Ø!Û°c+IN¦®ýœáòÇ_£9Ê5ºÆOªw/`êh#‘»ÖË 5vŒ9·¯³~)Êm"µåõuN(pþ—u	›r„mÇµMi-t	¡¡%ÅèÙd5N<?LO¤þ†5ïŸÕ«Å(àiU Y˜!ˆ!ö„³³P¾Æð¾·REÎ!²ïwÛ5- œW¶>ìï¢!cíÌü5öðKc»ÄÓ5k`›‚Ó¼æ×ñÿûka¯	6é}ûiKz@ªúl8š pDßŒä¿ÈgÊ~ô8I4Ë9”©I­\BkŽll½’gt‚±Ø#SCº°J{”ìH]‚åñ±J—E!‚ù—Fh­Zr3ŒFd6U%ÇÂé´°ŠTã|R±¾gÖQê4Þ±UZ¨‰Ü2\¹^çXäéUŠó—oÙ½#ƒªŒÖ¶Aªüõ7gŠ)y\aKB)z¾•Áp8#[«ªÚt`Ís=¦;à¯W†ÖB½$Ñ­a`£àˆë£¸¬™Ýø¾=¬ÚÿŸoL°6ãºJ·Ü¬Q²fü¬v™pæ±ï`Ëù¹Åru±Q&³\›¹ÕZ{}“~×·f;g¢°fn'<¬]¢fmëþƒÊPî-¶ß€ò"Ö[Ó°¬1`Yo,«%>Ä°Wø4ŸOFZsòåaX¬¶{ªÿÆî$SàqåqÌNË`DÕpg8¬ñÒØáà\ò8‡”5xmðNmäqÿYÎøÈIÆµ#X;Š£øîâk£?}Ÿ|rŸ=÷‡Z¾²¶yZƒÇ ´-•ÝæÅm³Z¯ÐÖîÜ¹³yçÎ¯ß¹­ÌÈ­úí·
¬Å5›ø«à`ÍÚŽ–;b5ö¹€Æíîööð±Î“àŠŽcwUÎD´²#K‹õµ½½~PÖˆ"(Ù•?H±¯Akª[Û.æ¤¬*ÐYÉ	û‹++­2¬^~½S+]VÚ›Af–H‘˜Ê4È‰%kÍ #SÌ‚U:WWkW~û›ËWé´öN`57[ãÓ'ö"Ñ2ðÉK³dœ”«d Ó)§¾ëÙ³Ò…Þ4(Y­¢³MôŒj´ÂJ™`í÷KjJ%‡ hÖØÜ€§Ük¦5¬Ç‘¹nCX¥r4>Âê…^¨/ÛpÓÖÊåÂ%ï~ß›ódˆÀ¢´%ÅpÐ\õidIr<Á<M h2¿fX#T¾¶¤íucÛ”Ï°Wd¾e5žìcÖªrW"¤eŠ#ùí‘Q„5"µÑó0¬Å
6mÒB4éo´Æ&=ˆÃ¨«ÅÎlç÷&÷¬¬ñDXsk†w…kö†Å}­=ìcâ½ó™J#¥ôÉKX;¯8C™Ú&PÍÜ¤¦0YkmŸ†;ØÒ…ÌçËåUARãÁC8#/²õå—ÜÍÜBá¥Ì]°ÿã`ëëè;"ÉÍC»ûGûþOHÏùZ¬½p·]Íd¸™‘°œY:U²zËUNV)¬…hñ,<£Õ£÷>•ÂZúwåãO™Ö5‰ü6³ú*²ã`Ó¶9«Ñ®ÖÉÄi
ÃD‘Íù‘Œb¾d5Až¸O¦ù‡aMðqÐ¨?ZÐ3ð•š·|$Fã>û/Yiâ(Ò‡E8_Lð’?Š·ÈG„¶ÿâãîø>f’û'ö/ìWW{wMbëöð_ÞßQî!€Û5·É¶#äÝpB±ì°†>§¯ëÂ?Ö¬BFBu$
Û`«5W¦±‰öûH²ÆVŸ|nü=¬ú Úßâ	sÈ^Ä&þ„µ0>#¢/r„øˆ°#kVêíÕÓ>p6ó00õ¹†Öhù†Å³g+kzÉKÕ†ÂnÎÆ#ôµùˆ¨kZ©pî›,†ÆÔ1[HúcëÛ	ÊÖ@–UpÙWqExYó$ó d¹“†5ž
Ÿ`;:‰“£‹T‰•ŠR9ÖåT­
Ra
Y–c£½!óHù‹¸Û“˜ˆ[°f»ýÆÔ†‹².@Ž™ƒ™Gv¯KWðË\žÿÍ`¤¸Tm×2¤PWXêTªS"²¦Üm/+ƒ‚õÂæh¯K©œFUR k­ÌƒLU?oÕ™UrþÕa´	@võVã,:™Õ»æÁ·Q²íÊHA0´â¦|¦T+m'a(¢Ú5žôEå°âîsåYš$àŽRg?×Y¤Ð¹¾Q¼ÝÂý„o¹¯|ýV«>ß©±J[[¤3vá8f‘Õx§]ç$Þ£Š ¬–zæCõ´‰Ä^^ §<Ì*óVžýÂ·1ÜýÇ°#9~JŸàs6ŽCþ"f5=‰{“”¬õ§/õ´‘SÐ™&8&FÖØø¨ÏŒ˜¡r(ÆvV‹ÊÚ`ÉVp‡`íì¶½ ƒªækŽýþ÷Žâ(Žâ;òîgñþ#­}úé}umÂœ• Ö–—ë››wê›w˜é¶kŒ7_—÷²Úk¨9>Ýëß¬²9@k{¹b‡Fmyû`¹UH¡°¯åó® ( {µæåIÕs;_âØh7»÷„Ô3ÿŠ!=Ååb†5Óš>¨Z3®Ýøôf±þz¶xl¨*Á|¥”@PÒ¬9¦¾Ð)5È’ þyÎæ£2¹,oß&yîüÚ'’A·\†|Æ«™Æ£å+Ÿ~ñ)žQY#QNŸ=Æ»ØQ|ðñäÖÖB«TÅ•¸ÝÀ¡˜,QfOÿ¼ªzy"y)¯~ É.!60°m?7ÆÏÜ4XÂ›±LšÕtà“ÏôºoÃ7ÍÐ›KƒV¥‰ÁXÜáö\Çgó_žy•k¬‡ °Ø’à±Q°çöÒãœÂ¼šé¢ëá‚DK‹Þý: G¶uš©ÁHQHóHp-S"!U¢Ek`Õ_àw1½^óû¤(-¢˜Æà™IÌg'–b™†‘Ó<ô3„ÍiŽð7ÞzçÉÁÚgŸ}CÆ#S3wkl€µÏ¾AP{cëþÉ½üEfíÆZY#äÔÛˆfgÛ…g•*œe¨ïÇ–LæU©•Úl<hÕ°_ÃÕ­ñå—Z<À^Ml— ™T´(§‰Ì:8™ÂUlŒdÜÿÉGöîçgù…mÞx™¦
ô]iBÊAsuƒÍ4éðµAìPåÚ‡á÷ÁŽ°¦Hh¢ÿˆaÈ7¬AZÜìqÝW	qÑWB’š8ÍàöCe::2 š21æop`-Í¨Ð‚¦¦`ËPìÁ0%5CFÐR÷~óˆQ>óEPÚ„ÏXZòK>¸yà»Ä°›ù„?ªÖ]Æ÷£•íócDñ£@^÷µõ»â³Ç±rM`fXc„ÒÆé´A¶hö÷Õ†›¼ÊŠ–Öë±ÑPC]°á£ô%mØOXô·‹æA4;äßÿ×Y•Jk‡dµOsZ”ÖÈ$w ¬ñ0ÖjŠØ>:[Pu@YC9‘Icb²
eÊ‡’¦lÎ„œ†â¤¦¹3ý´[žïŠ‡è¢fZ3*kÉ+ldaÌ¥§ž“ÖšPíh®æ6n<†
œ¢×ZNI˜œ×RòŸ
îh—•¤ž>Ù™Üx³.WËeÕ%Ž‹9;ù“ZoXÓÓ¼¦ÞTð³¢ÕûÊ1fRêµÛ.¦Æµ&é$%²þÙ‘¡G…R¶"²SIbU]Õt­61eï!(J@6#Xëmè‡[çÙg¤ƒ-›ªbFuŽÂä*6”2ø]œ+Ö¦”ÈtÖª·X¥ss­Ét3m“ýØ[…	§ÇÔ&†Ï“éQ­]­u*6ç'¨]«Öz«QZÃ^5¾¢ƒž ­Ý(Wí×Zmw˜Pˆi·2´cÕ·Ýïñ¹Òf’‡&™Øe U©/Î×[°š`­U\¨ó*ÿ&TÌ©Ûg}±rla¾†çõb«H	ÀôüŒÄ]=vïÁO¤A¾0¶¤¾~Kê^ ôŽdØlÖûœõT<9’¥;§ä°ÜðØñ‘É×þa-…µ¤÷¤z¬Mî¾±7ÍÜuzÒsÞ©I"ÉŠ”äsa-­(`ƒ1J1ûÉ¨femÀ·{ÕHÌÙ	2ä@ºÅ#X;Š£øN»b»H†›¿?üæþöZ&¸™X\Üqg+[ 6ÊÕi·ofG6Wêk¨k·oÂj< ·-JyvT–v#Jk6ƒ µÜ|§^Ÿß¦6mnÎ¯ÅN‘ß%a©j¨8\ì´Zrìß¦¶©3DÐ»Õ.ôÉDØÛy¬=!GM°ö’ÊÅ¢+ã/}>ùä½Àj÷Y1[[ÈÒ;TŠZçÑeÀ©L~‡l¢JÖÖVJ%uêü9´ö`ŠÄö*EÏ²¥êRÂ£U­­-ÕZ ÆõëãeRñ§}ú)%k‚5Ó÷òá“ÿQ›÷I™ûÝ»¯O¿ÿÖV‡U¿v¾Æçë*­R1¬q‚”¥žØ¡Fe¶è—QÈ„=üÅjvó—Cƒ3PLp†Öæ‹"©ã4cÍ7ÇK²"YâH´¦›è%Õ²mp?êèk¯ÊµnbB´¦‰™€Üˆ “hUPp &8<9ÖŽÄ’2r{CBh[Õ*˜Õ$HŠ{	êºgRXkíçPé¥p3%€sûOÄÔ¼º+@o®];Ø[#£ûhØÏPŒExHD8ÔÓúmc{lžÚøŒcòÉ7I¼çx7*k¡E¶xÛwh¸ƒùcÿ³ÁZVÖÈB‘d¬9?`íÌ¬øLS·raDkóEyäŽÁiöP¾ô ¬M¹-vcyÈ©õå/•w9°˜+ÕÑ„eœá0•ØˆÄz$°Zÿá'Èj÷>¹ïÙg··‡*jèGÓík¼ãüŸ¬lFç"5|¬X3¥y‘D
hÕ’Õ‰&9J–äíˆ—ˆå3KdÚ}ëèÈ{WÚ[¡\ 4ò3Ô	·^sÄÊµ$2T¬‰øV%ü D˜Š–ÚAFL@aÍ¦³²Qø ‘éüj ß&òÔÅe„Ä– NæöEaûµõkû¼Hîñk>^^¬¹t-šB')’Ù‘1V`,òxßzü.úÚ?½êúúúŸ‡åž5DÿE4sñÙ ¬´fV³Ì8é ¬ù1îÛølXc÷7Ãšy-¬‘ù˜„ì ¥§	tŒ=¤ŠÈ‚%?Ò•påŒ39qÛ°ºÊ¨’4‰Ö¸Ê7ÔðT¡ÂÒšJÖ‚®6(­ù†Y!’~`5Dõg³x¨$K¤éq˜s[5}Æô3_Sðü&V£8-4ÅæÉ&Ç.6TæËw.$‡rÈbŠ$9Ò¡kR×Ô¸Þy»£Amã4À6Ê–€’ÊÝ.SEòÂR¿¾µ•i])BrÔƒ¯Ôë­š–ë2´#k´%µŸköûÕ¸mƒ4ŠÕq~˜“\éâ!Ây5þÐ‰§¨,hÓ+ ÖÄ:D+{4kkSÎÞâ"h¬\b_‚šäù[ªö@°r«¢ÌiÝ7€×9Ù­´íú¨$H¿Ozß:Œè}#8÷W	uIkëšÕº…nWYË£#.6š¸ý7ÁS˜´Dÿ82ó•E@ƒü.UÌÌÔÈÏÁQuì¡½ÓæŸ¤{r®Èm°ÖyåÇMX³¶;]êß»—¼r¶eÌÆÍ!¼Äc¼Ñ¼Ô˜	°¢š9e1Œ+´vˆ¹H*å>3ò×ŽÝþ4í=ï=ìã"µ§ê4¯=z
›d;}Æ-Öž©	¤Þí¤ÉO&5?SXã.îÒS^¹(¬‰ÖjGÊÚQÅwÿâ•ûPÿâkßå;½\_ÞÜ\YYÒng;+ Úæõi7_Î¾¾Ù"31·µuúôù²!åþíþÞÛ©²¦pûŽƒÍ;úókóÅ¹‘|§0ß)Ø¾ßf‚µî€bšcÉªØÖòê¦÷qä>q}»RGXs§µ÷/ê©¸s­D©ÓaáXl›t.«1E(qåÑÏ×
ó+À­S,É	’ä}~¥cq,&B¨â~kÍ

ÈÔ/±ŒÔªáå«¿ù-ÒZ„µØ<@·óX¼«˜¾øÁoÍ‘€Ò®´I€Ô}
*_>Ë*/ðm23“æ%—¬¢IÓ½OnÆ"HRÍP)PÎÂC×ñt„vT¼î„µ;¨‘aÛI±““úµ¿î%Ëá²óšYKß’ófXQ•SäŒ0lDì©ñŒÜ¿Ø6ut]'òèlGï9´°¬‰Í”ÿHÉ‚jk¶‰°Vª5pƒLÆšG[ÒŽ ¶¼Ë·òmldT¼QPê£#°çšÀbcQNÓù¨EXó0NZ€5.‰‡º‚HÿJ
wýÏà´ï}óek°Yâ5*aXãÚš¬ûwv&çúïìœ–ôÇô;Âú½æ_C™aä^9ù£>«š!‡Æ–õ:D'¯…sn›ˆÊ›°ÜÎ¨™D©¡Û‰Ëëä7&6ýVÎ`5Î$XÆ6ü˜ú‚hÛÿýûÑ¸þ²™g_xa»
 >>;T©–WÅhàyÐQ{õ|0XHY£4ÝÑçô8 ªùÚˆòZ!èy|•³f5ÐC€eÞ2s%„¥w¶»¤¹‰ûÍj\Á	YBJ€¶ñŠ‚Ìx¡”36_Sn°N"GGÿÇhkÈ6]i¨`\” Ý‰ ¥ÉŸÞ/EØ©âa[ì¿+¤—æC"Âšò íK['òµ}á.FÅŒêÕbƒ5RSÏjt×g­±áé …r?AKvÿ˜šV]_¾úç¯ŸŽ?ÿùêŸ 6‘ª4m°f0c7H£G¼JJþžkÏo³vâ©äÇ¿¿'¶«²‚i½mD4‚\Ä€9q°Íæ‚¬¦TÇÓlfM=2€É2?‚×FÜl˜%8žž×.‘Ï†Pòp÷R¬Y;¬¬9ðö×mëÈ)	k‡%5ç;
 á2ù2ÜcKŸ•£Yv\f[¤u6³9~%ÖbõIŒ(ä¸ù·“¿ÍþÑÎòÅ«É`Äú›ÍE`Ø¢=D@Z!¯­Òµ9ä8“O¥ÊúÆÃ'¡#ÖÇð}ê´±¾*·ó¶íZ¬/»š†šJ»Jê%ÒÜÀz‘>°Ö”Æ/s-Æ ›KRã·¿ç‘Î2P_G©UÁ¦Eþb‰^8+µ&]-2µQ²)ª•6üVÿˆ*3oe”wŒô³~ÈÕP§ÕÀæ‚s “Ä“˜ý¤o›	®Ò³ŠjÖõEá­ÔV3‚R¤ßTºÊ)¯Ê6Dýäè"WÕÚ"S‰_Úb„m\^+ðµhnRaD‡ìÈZcÅ‘f?ó¯üøùà”Â¬ÖÏ^zØ?»vGÏÍjòÊáâöÙ˜N1{FÊ–ÏªÁš–u
áY¶*Y{Ê
òš®é±»Ç‚Á=Ê×úrqŽˆª¸''o¬S‡-Ô·Å~Ÿ»¥˜û6YÂþô ¬½È#Ö¢äÙ`0ò/ÿí{GqGñÁZpîÿ›¸\Æ¸¥X[¨‹­úÊæVnñÑ&ÐF¯²µÛ/ß¼ƒ‘?åkêŒmXÛzùôñÜÜŸþT#†µ¤z5†N8r~!ËU, ©äÆÆ@´íPx­zµEG'¯Y°ˆMmÖò‚µüÐ¥7nù3‡ó y(<xÏöêOhƒ%XÓ¼žóÀ¶ÍGp(©d0Û"¼ùz±]šš*-®DSä~`0¼È/ûî‰*„ú¬ôejÁ²ƒåº5¬WþÏ/èL`Zs$ŸRÂš,ÙËÃÿÔÈ™ÿþ»·è½ÍgS‘¦Á]$òpF¶ì5Â¦õÀ‹4Ùˆø†i&“_È¹nŒ1Éj„M6XKº­!›éÆX-†B,.iúVx•iöÕ%™”ƒ}KºíÒÄ»`M¢À’XMý·Blýè¢4&åæj‰gˆ¤Qö9Ãš­E¢­ˆ2xìZ5ékoFimÆÔ–fANÕ*%Èðšz­ují¡ÀjJÐIç4Ž°¦SX¬yÌ3œLìAƒêC_é“¾æ`[»Ôä_±óÍ{;?úÑÎû;ïýZóÛKŠZØ¦°vC=ovÐÄ‹9m³î¢C!BÒ;‹¥2úÜ
A§Yô'òJy|Di½}ëÁv%SB¸%¦Tè÷å:¬ÆÃ0†ÁãC÷Xv#Ú'ç×Á6ïî?|«9À49’°yñ1¥ËWî¿0t¬R^jBj*NŒŸ™4Ò­=ÐH
ï£®6PÒa}6
k†5áÌ†ÍúÙn 4m¼æ|FÃšÍ M]öY5zÉWD)’¦0]ê"·hé·½a-¸Bú‡Àù¾Þ°v!ªj~šÚHdÌ;;zÒë»aûœ¨Œc¥‚q~Ñ! Ó±Iå5aGävÖPúü9CQ[MFƒìý±ñ» 0·½¾ŠŸ§Fw“,HÎÃhlNwqÒØd'9þ¸gýG£·~õë¯Ÿ"Zü“_]¯òX+ŒhÆS#Žã#Z 5ö&-Ìþ:«‡…5"ÿ†Fkƒ-±%¥\íÀa}‰sJ$T²#`#XÃCD›¬mñÀ…^¶x†ý#Òà”£(¬šž¶ßChˆ½{ü”g”g+kÊ›Ö´ˆ4ò«Å&Èv•‰§D…±XétN«v6ÉIO£VIU¬|‰q¿`Ì4gÖæLx…¹âß,”R?õ3>f×þa|ük¡+Ý	$Cˆ}º4MyP×QŒµÂ¼t8\6¦Ê”³kõz¡XïzSS~¾RoU{¤Y”›•‹k^mÓü§Ök(ò¸³Ú×„ÒšJ löHWéªn,!5Ï}õÕ¹žz•>h,ÔkãzF^x|´À&rÞ™Ê1ÊŸ)çóLDå†`­=Z¯øÇÊ¸Ç—Ùå‹6–¥ï"½'¬ÅªZ­-í­§Ÿ°Îæ“˜ˆ ©ÿ°6^#oC¤–Á_íDUÆYUÕØeçÉq¤Žò‹b»ÙíN1S‘×IÇªðÚ²0«Õ¸ÉYÎõÜöÔ§{ ¬&£˜˜ûˆ”
œóÏÓ§³N…ÍÚ˜C”µœ`ã`¦ž€Û »É‹|Ž<¯¥ŸÓk	$^ZÎûß¿žÄkd’ú4 äG:bÇ	OëyºZ€´gÂÚNºžnRÖÐÕöÂjDtîßMÖ’š50ÍÒÚ¬ÅQ|—ñƒÿÕlWc,_Õ­ÆÜÖýûkÈ\­ÖJ½“Í®­ÕIŠ¬Ó«úÎé›w6ëkZ¦DAØR)ÛmÝÌ¯}ñöSÕÚ@ÑZZ¶fX«/ÌÎ&>Ã¤¿AkjŠí_}ˆ-¤Ùú™ßòÒÙnîÇúüòÚñ"(Öœ™L(wõwÞÂ[¿_#Ã	3íriež/Üä\±Ýh\^™ÛZXÉ¨y>W¬‘¬5IÈ(ã„•	Žy.V›Bo«ÂÍë.AWÅû{7Þ~ûÏ´j-$AþøÝß%ÄøùäñÉ÷ß}¹ÜÚZ+Ádãá.X+W”¯"X«2VÙz@ÖÄ^6€3 Ìw¦6Ë3«idT#ØÛ}$ˆlT¢^;i’%½¼ºÄ•Í‰qrg>œéÙ±¼'ßþ	†º)sŸ-žP™d5c™£×d³¤HÂî×EoÐÙ9ëi(h‡laÍ!†{“Î9®y¤¡> 5Ò4©Æ `I‚¬µÚCòÞPÄÚïk!¢²–V %› ŸñdÏÃOïüº#…5_ÃFf‹Ø7¹#ã?1ÀZ¢ªNÖˆþÎg;»}lì©8žeFž¶µÁ4wÐZnVl¦µh€œGB\x=G©ÙH²ÁýºT"	I}b¡5Q°æ	¾úØö;­°FjdklCx`‹kè·ÍÌòr£T96¡¦IjŠí´Vz2NÓV¤E÷þkI¢£Ã§Âµ34Œ¨ÆIyoMgçx®Bk½Wc¤®E3¸id§H¥[>ûJaDÓ‹\|EIù'‚¬š±YàfD‡*î3×‰ªíÁkV|lYo*Ëü×y‚+|¡%Xû›þxÙZlG$tºV³u^îÂ\n?d7ÎTÖ=È »	àÖï"{¾ðøÂ‹Ý>ÆÛ——Ð?êÙ[þú÷¿7ªÒZ…Xîé{‰°f¶eä#ƒ¨Å
v1[R -þëŽúåƒ¡£¿…ÖJüe\K!-Ù±©Ä"¿U  µœt¨,g@›ˆØ ñJ¦÷,—ä”P(‹aATp‰$„v#¢+~zgk»}$‹3»)¬¥Âšâ °FyÛ©1¶i„æÇàë4Ô‹x|2}~3%Õt9^àŒ Ófœç*¡Z6lE•s†5¾ZöÃæ3o€vÜ1™‹èxHiŒÙxn½dá¡}­©é‡Ê„»y]S©1îPÑÆ¤Z,ÚZ½Õ)¦ÄùîÓG•DÂ5uËÙ(ª
¶¦ðm,-ñvï5¦ð¥êMÍË_[$‘d£v­9óáWç”_}ëçkä±Œ÷”¿ÒmfZ+$TÈÆ¤]kÂL¥ÎIÍ<6›*Áy¾´vs)µ‰§ƒ·D„5¿=ÆkM`üINU* (	
Ü, kd=¢•Ñ¥YÊÐeÉçòÒõ%Ên5Z‹óåÙ³©É…¥;Ã"#ZÏ#©uøÝ=v²RÄÄ¡ë8ù°›ØöX»7œ©÷uŒ,‡òƒ´Àêœ\£;È¦÷¤¹M©±Ì	>3Íæ¸sç/N¾’–Èéñy|ó}|q×°¶×¸+iM¡6kÓ˜­f­¥‘ 9-s‘iK*»y²ZÜ+âÞõà±%¶µX¶6¹3ò”dPÖaÍVŽÁÚQÅwßÿÿA$›ÂnóêæòÜÙY`lÇ•ÖÊâ¢z…ÌÕ7ëô°&Iñ6
ÕlXÓ\XX[[»sóåÓk…Ÿ¾½3è‰qÿ ´vã~}mn6W¤Š€yCa3¬yJk“Ü ¬Íñ+G¾y5‰m”°Q[àðRç?{¦!"4@Íí½óÎn¡S¨°¹pg¥²¶°@*d«…HÇšÚ¿?z}¥Žï°²÷‹yÈ°F¦„!ÁíjÇß™©ëÕê”Ý4HÁø£½_üBº”Õ\/÷Ç?†ÑÇ/~üù©ÊÌÔb=³Du3œÆD3„Åƒü(=é–Q%´lÉì³
cÔ&ØÏpOµ4«‚±WåŽ'ÓG‹nÀcÄfçh®f÷t •ÀI¿¤ê‰	õLµV½¬ŽgŠÌïV'´ 	&Úç‹‡¸Œ'7ØVÓ(LÀ–B'“ó¶‘+¤žî°f‘¤h-q¤=*G4ÆS25”¢µµF0Ñ/-òTdJã¼ÂÂhEŠÔÙt•³¾˜Rá“æµxî ¬¥—ÒO¤üÌvOÞ:uê­ìÔoXc£!ÇJ”	ä™‘9A*ååL_“ãH–æ¤2e>ÚyØBr³ò?CKû¾=œ[È×ÖŠÃÜ1Ô$¬Õ¸kiU ›¶/q/ƒØdö	)÷¬14šâ4_`K é>žZ_Ò­•ÌÛÊ£'Ç›ŒøcËj¬O¤°¶¡QÔÎ"«EçGó˜ÇDÚ$r¹»Ççª`óœôYÇW‹ª4¼vâwÿk´™Ú8¥Ë¿ÄE7ÁZ´‘Œ°“îkIÙšNÛC#ÀÚkì«ËúÓÿýó3ƒu'9nXÓÆ}¯h>ˆùÂÃš³$õJôq†¤!ÆÝµds
fm½¼®e-ü¯\šþë¿xÂNÚq á×W®ÚÌÿZ’)X³â&Z£7›lJV_mîËå9‘rÜáž5¡ÚïSaÍ„6(­×.D%-ðj4óO]Ò=Ð°•×u>±„L²4Ò»gGõ@ðñìoc5Çá.kÇŒm!€2°M–s(¬Š½ÄBC;@rœ›ýÿì]hœgš¦aO÷|@²„‘|"!;Â”BWMJMáê*ý FÊµUVdå (‘ìÄ)'þ‰×n;Án&¨Y¢¤Gq[Ý¢‰Q[ø`Iè1B³3­i=™ñø gÃ,{¸×}¿ßëOe9ÍìIæDª¾WYVYïw½÷óÜÏ™¬s±I‡NèerBnÓÌÊymsCç‰ííg•5¶¢Á§1àÓsw·?58M+È+‘òœ×#,³ã‰¶,ÿåu ‹¶zÐ%¬p¡ó q›.×Ÿåˆ¼ßC°ã}hŒ€ÌÄj=Àš6‘êXq¦|$àšÚC¹s92ð§F  >µ½²°/qX5€e5?ëÊ‘\ÙP*do«†¢ViLÞœ(£œ¹œúpVcèS) òVs¶^WØ‰ô#íö°r1Jšéƒ„0xÄ?ÙÞ]aÚ3Sívå•X‹Èöƒ"¯H–bqJn‘¥ZN½ÐŠÕ
`Õ¢Ëfò¬µpâôÌH¬=­uôÀiÛ]<ÍïG`1­H4Hplh«Éåj
=’XÜafù^»]ÏM¶Û“‹Kí©j™Öˆ«âL¾«FZþ$Zæ‘r.34vÂ°fpr<X·Ek1Öæ\¨ö²«DQˆž šAƒÉˆýû ¤çò<&šc4Êâ2òºßÄÁÆž÷Œ°fDŒ,Î1£¦'´8
©©ö{:ÒýpíZßX;Þ×s!N¿ªøÎµ$)«½¿u£§£Ë¨¶×R¨ö2ÏƒžØq?ªÃÿç.é¦Vk†¶Óâ5&é3Ù+¨jØÞOd<$ŽM6äBráÍÕ[·VÏ ­-.AD«}fu)·øþkÄÛïÿ‰¢µÝæÒxÿøD­YsÔk®u•uÿÎ/Ý¦¢QŸÈg‘Û”ºÐTMw¹¨qÙ£›Û›/¬Ÿ?ïYÐNX£)õGí\ã¹³½½¹qáBŽ<ÿ›í÷Úò@áo\ƒšå"qï&)ÀQ‡P€mäƒ !À
…ÙÃ£‡Q;ª­S|~ï]\iNµ/>ü$5ãšÜú!´O¯~'“²æˆëCHh`þ±!N/#‚5'©ª°š”Vš¿_°kŒEì*"(¼2aÏù¯ m¢:ûm£ù¤xlcÅÑK 'sI}zû%}Ì©ko-p{EÞ4b1pØÅKáW¼ur/¾à?Iøœå5NüûhGc9a/H…ËÔ¨`ƒÜFß~X›Š#h›Ó §ÝÍj¹‹àŸ³–š³ññ³°f9­3<%Äh-ñIe¶”ÉRÛk0’rŸ#ÙEntY£)Ã«G·Èx”¦v-¦@²)Ùï~Z7ìöÖ”{Òg.òQûz\º&SHkÍÛÇiŠÀvFö"c™%î4«°FNoy-­Ì‡¾VÆž¾R‡Õî¡›ý1ôÕÖ×…jÞqÞcÔÙ`8–tÚœùéø’}ºaŸ=_  6âÕà ´´iöjÜ?Ñ”ˆO U6[=zP->´çH7£ªF Kê~–ž›ëM`l4a5)dÄ9+iÞc<øÙšYxqÀKze©-ÀÁÕÆ2–¿˜Ž°¡@&ÇBéŸ#˜=á‘|…@à¼\:KuLâ]BXÒòÚJ:Õ÷²´)¤èÆudÞ³Ã$_	Ù=zR(çÏ^9[½òòŠ <Óê_ýÅ–Íü¶rQéÎƒ¶#Ö®<VêdõìôÀÝ»ÿ¬%ˆH<sâ¢ÞÓ¸Æ›¦Êš{dXA
›¶D!}-æAz›µÂ§¢²ÆåÏ—ÕJSüðß;âÃ{SnŠï»Ÿ7‚¤½5·kòä`_\œ1úôp7œãY Œ8á¶ f¹O5@¼uNYj®%’²¶)Ÿ‘$³^±¯ÍÚý­ 6F•¹Ý7vãï*UŸ²-åN¦"b2çCÚÙ€§»Dgv5q)š;©qi„µ¼Šêvé2€Xë‰´Ix‘Ïº‡Ak„u5-à´ÖadñVGŒüë½¢-ä´Z•ßèå^°Ÿô¸tä!¦*© .RÒVb|o¨`mA°6Pñowè­"¨Ü`¹Ìû”ªÖ ¼uŠQ`ØÍ®—‘®*Ê²Ö¤N±Y¿w1í•AZµ’­ãÒÚ{õjI™,-i¬eêèäÙˆÑI/ ‘éA<P¨?à3µ SIG‡‰({D%¬ÈõÔyuÐ¦ÜW•ÑàSº*†næ”3L?lu.h¡²:–0}n×!¶›õ©ZžÊ>æl9J¦MQYú<M~r3™×_·Îq­3#qÓv4¿…—6Ç²÷{ôÓëNB¤fm,cXƒá¥ášÑì)—*5>“Ž
ÆF‰´Ã_û³ SVûUkdBná9·¶ù´2›ÏÕ¯+r‹¬öCÑiÛ4dAv(kz†#AXëÖI$#Êƒä+fAø‹ÄAü§ÀÓõ7€_ª¯îiÑ÷Š/d³K³K3“K³KÇ4‰9VPz÷âÕk4Í6¬ë?FÛ-ŽŽ›Ö,­YY‹‘ÚAnÍ¨kŒ9|8…Óñ|®«A4ñ.7óýù‚Òsªô‘ò’ŸœÑÄc–rp^‚±S°¦<kž!,à½áÑõøåk—OÒB{¢ýÞƒ›³7gx)Þ©Ýn—‰{üýÛÈÌÁ5oáöÐ¬•F¤*ÉÒ—ŒüYU‡]‰ÅˆÀ}ñJ³Þ>½BÏïÈj¡Õ®‡lÈ4»½Ú•}éÕ¬íÐÆ›ÁV¯B°¡iª“×•°Æ°ä[ ^n€$Ž	ÉÞt¢—C-†%>(§(C»P¥Œµµ…àú®â=WÛØE’“œåXhs-ÑM/.wGB7ì,ùK<¥´˜óhõL82êÐN¨IRÖ#–®W3×Jrdƒ‡Ó uÒ[×ø„±CT»åà‘¤/¶<FªšÝ®Ckù˜"HtÀšU5žûGËi‰ˆfXëp~ä #Âš#Ò\'­u\®Ú²qÿÖ§;ÿ™a0¢jDvÙùé×®©‰ßÛ¿~ûÝtÇNGOs_R›ôu÷KüÏ ­iìcyÒ‘}|Gã‹M05Êôd¯=âƒr™æ­¦+%t5â¬+ž‚´ÌDÐ¤¤Ö€4‡+K××î\L‚‘ss“ñsóåGMf´Ï^*Nãó\E4i^¡U,ÀÆÏ†#¦u%8>/2<ÒîØVÏ_—’Û^C!ó 
xÆ
›÷öÞô5NïÕ‰hé~×¶ë—®æZ6Nê|ÔÜ\ê–T­ùÅÃŽ/ÑóBõ’©,¥5?ÒˆØr©‰¥Þ!
)FÂ	V¡X+Msdá5Dã•‚Sìè1pä¿ï Î)¸»^ æÇ¿jEfó§i¦Q-ÂZðŒDY;}wàŒû ÒÕyÏ
kl™Õ©é«#:p³\ýELkZ eB²gM÷µŠ^SXSìséÔ¦¾'žRÚ?yéøþ=ùâî3ƒÜ³ýƒ#¦5ÅÕY‡€6©i‚´È7œîq Úñ¹v(/Hêr kYÃ~¬lÒwÕŒ¬¡­%°¦¯´Ëšc[¼†ÇÕ†ç’¢´ævÈ±…›»`gÃWÊiª`Á¶2¦:M×_~®äŒo*L³
¡oZ½åº¹àµB¦žÏÑØÌaÓÁ–¦IdŽP,\)açÆýÊ@UkìÃ L¹Ö —¤µåzã*óªHöª	~÷ÌOS­VÇ³ñÔ?9EƒmuU¦WÙ½RE?Ûª­ð‘¥Ê½­i¼­>A0ƒÌ>)7§†•Ê|nº"Ãå~¿%•3Œ3xMµ«Œ7 £³y÷ÃªU:’œ?†C:²V9š#‚Ú¾@7,{­B‚*ELxkäwkPê#R‹ïiMôš¨„Ë#Œúˆ~í	yŠ·Z®¨›^lØsl"Ï4ÀäâŸe¾ìb/8­æ8mÜïÉ¾¸¶I’êýi-Ã'ÎàíÁ‹ÔÊL<ƒÕ<‹çÉ;^*PÖR6Üÿž‘Ô`µßP­¶-SÈã‚µ9ÜJŽžH
¸Uû&eøVóA—­ùéàú‚µ¨¬Õ:Œû‘ÖRX³ä})k+/Ç†ØF5ÃÚAäAÄ
kV³ù7™CêÖô‘™Yr»µÃ–'ra"8ößœQ©Û·]/›»­žØ/<…5"Ö¬é+¥µ¦ô²:‚YŸ~[·ß¤¬YWk¨`-?¡k€µ®œ²ý¡ÅÝ/¾È]ò.îéo0°rû¬A5íu=]Øyã§Ûoôç¶zëWà¥Ó€3 °Ÿ˜h¶5àÔgï=­-ƒhïiükLeËò¹‚e¨\“ñ•V­ê0½Y„qä½_¹sgüôƒÓKÿþ¯_‹~ô®_¿þ\Fãw¿øî¿]}©Gw‡Ý"‡.`M¬vêœ¦:5Z"D„åz+tºF_S-šEr³hê#ŸYY3Žy-Íöó~¥øNV%69ñ±¿|ú„e`šcXÖ&êtjxÃð«Bl¶EkQj#¼ræ#˜¦•—ZKO‹ÄFØ_DŽ#Ñr9ÂÚT„µC1a5­Õº5h½Ña-eµd–FîŠãŒöˆTóâ®xØ¢[§=k‰Ð>äÍ²íßÙ~ã"-]óþâ)¬aã¬ñ±úõÛê¸>ÇÕ|ìmT ¿¯ž~¶2™Ö¨˜Ñágd±Ï•Ìþg
““9îÏb`ß/^+ÖH¥6‹.á€ÖB›5BK&Md6}LŽÚÇÿÎ¦`Í•jëkÜNÞY¹3wäÑ‹+…âÝ^# ø´ð›¹è#eÃš½·“±á+è+¢"©­“Õ¼çBIœB}H:—Ê¢Äåi
ù8ªß„½e×oSGèm†‹×zÉuÆ°”ý‘±âésVÂ‹ˆÕ ’NT‹úšQM(.Uc³ÝX~vØÝÄ¼ÈÙ½?úù+mÑçÞ„ºñöG¾X ‹¡þ·Æ*ã‘@ZJjþzÈ¹+®V3¨9ÐÚìÛÿÂË$CòÎ8÷ëÍ‹û`-Jké1-Wüê!ž±Qì§µh©Hú°Ô	çÐÅ2!ÛÐ›½kßç)2DP«=78Ñ®º|íŒûyÄèÐÕÎò°©ÙØg’0ü˜Õºó>`-4ÉæA¨2LÅ^ü”¾vŒk„lº~qmnî)¬Å<Èa8ÏCºZß‹G{òCýÏŒtÔ°åÙ‹ì†g¥øÍYNËÌö¸ºN•l’åø>ìÞ¯ÛøÛ4Áæ´7Éföî7—1«ƒL'RiŸùB·»«±ã_¦JÖÊ-ì†I„¤N•Žj-¢Á´l©ê0ö¨% ýlA ·˜Wëhw{tÚGe¡:;Ë%åÃÓŒ(-¼&f‘£Þ£±9 b¹½ó,0;Ñ"½žQçƒ‘fs¢VÒ P/”%ŠÉè±ÜÀ\rX¼V™™`ŸZ·y;ù;ÛqP¬vh`«MµT{“ÉyY—LÃi¡£šgÐß~¸¯º…q3)Ão/%ïZÂW„¼HÞ™‚:ˆPn+ò5™Õ¸Îø¾|oöæ$ccã¹ ¯1Q¬µëåÞC“3¤$¾>ôÅ^™‹U '¡üÝì¦ Ïoöd×H…ÛØØÓ%=+“”šš«>]’[I€?ªÑ ã¼sZ¿‹œ‡Ž)ñiÅš#•Ö’OÞ^Z;\µkÛsGOŒÍmð*ð^Ëpµò´£±ŽRµ}°Æ3;¯ºËÚÎ7È½ÂñÚ¾=^ÀšT5p-ñ!rå Öâ ~|ï~ìE4wÿ%ÊZ€µÓÜ#¾ðBö…ìÒDsâóÕUŠÜþë™æ$íÕÜûÏŒ3Ùî2Ûy‘‹Ðšì Ó¢58-[Â6µƒhè¦¥¢J"!AÈÖpç­Z¤&v+0IYh®ŸÿÆùüçye~“íø•ù½–fBê{çÕíí£¯^Û:6A¿ú¥v´Á
²L1¼†Ö¡üR]Ž)î’¹<Ë÷VÔâÐ»xÿ‚ Ì¼É®Q³ŽòÅzðP¬/×¯\úzåÒ¯\‘¬]VZœ0¿#®Òòíúë×ƒsõõXz=®°ÀVD8Ïd¹†À#ÎõR·ÃÚ›Iclj×GìÖÀY±3v 9µe›W.$wÈì9³Ç.¼ÿåùïWR¯m¬Bd2Ï«ŠÒ´7-ß—©ñŒÈQ* S…Íµ©§ñ-Ú@JZ#¨kÓÒG´%V#MØ•Ãˆa-*k%{ÑC#ÀíÕÖ8B&MS%á=÷é´ÆToù¾]úE:ÅµÔÅ?Éud9+bÁÁ)óÇbì5I·S2ãÒ4o2°šL¶N^ãçº³½uM5k|¸”yÕ™ýOHŽŸ<¬Ö7×¿±{rkë¸am,K¿5y÷÷ƒogÔ}MkcYWÑ³)$³ÿšR½µÈç;ç»G¢Ìt5Ó å²20JA!;M$
z]ÛmdsíŽ+ÕÈˆt3ì;Jƒ4¬­cyXÛ¸dnmã"X|ïCªà–?àAðƒp°Ï°~‡ƒ¬´tÄM/XùH<“ÒZ„5M$XŽ¯×Ãœ˜KÁ,Â9§	ÊR’1 ÄaÏ˜Â9!Ý§Å¶Ðþš—†ñ$©ñÐÇ›%i>ÉƒÔÅ®[»ô­á¤#®ÅàläpmÀÂR’›:DdK|ÿáµ Clû;î‰‚ã	¶búlµ:½ A›¾øð)g<¢²&PóFüâü7ÿç›?\|T£±šÄ4Vöô'ùñÑ‹ì<ZøËA¶ã{ï“ÖŸ=¤}Þúý¶Ròœ	Xmª9.ú±•¥­U­±t‰š7	šŽ$…j‘ëtícƒž÷µ/@ÔŸ<	¬Æc_p4àšm÷‡>#«å0ÄÈQ¥ FdÿØ}$_°F$ýÒòYL­‚£=U‰¤@*?r<ÔYÄ
.Î~”ÈÕ-UlCmÖd[%$#b§µ{‘Ô·7$¨õðØØ•rÂ3•T´ŠXõˆØÜMÑ~!ÒM:ýñáÆ=é©DÉ<GÐCcìÇ™ðAdsÚ‡lQâ=*hgAñÄV`áTÉ.&9iBYÍû´ 2PÌ	†ò·×
uå–C.½jO]¯Ñ6š±XÃŒ‘ýbEu^µ±58Ð\Â%¹ìœ‹RU}f†ÄAºŽŽVZµÙÙÚ#Ý •f¼CFmòf­Âàò‡³¹Þªªc+“35ùGµ*¤KòöüW"çßª¨Uc0lHXƒÑIÒ¬´Ô2~¥bMí
ÒøËK¿;üÜæê:ÚrE6|Y#éª¡zºTT@…J«ÓÀjË²°,N)-dyöÁDƒ.«6À‚îª4 ÅíD†$˜Až0+íÖk‚õ¹¹MÁ²ÖúÆÆi‘›=¹ð“
RêXÄv MÁa‰jAPëïgÚ:ƒÕ'Žk²ï‹gÞPObOGlžkkRÖd[:´ö7.Z£í•Ñb¡Ë?U°¶Õˆë;µ«Ö´NKÖ¢²¶aX‹A¤½ e£¤Èeí â?!þë¿¬HZ³A-Ìî*	òEåëŒßtÆ#±$Hk6o¢µ[·WW—è_mß»E5`›Y]š9¶Ö’¸ü9BÑy
Ùq¹ów	2SÆÉíÇ£*§1dc³0ÞÖÜp-›!‘q}íüÛ76èsù2#+¯*}Ä¨Úayá‚2Ô6n5ðA 9°°Î.ƒš²ñ*äXÎÌŒ×¦>|÷Ýw€µf³>2š(F€cÕp¥eR+UJ#òÊ°Ãáig§ø·Á»?Èý°výêÕ—úÆ~`íÕ,ÚE&¿wÉè§VgÄ©aÆ”ANâÛ+„õ0KyŒö4½EH·Â6­i	ËIK³Ä†’6jÜæuËE­ÚÂ`°ö×â3—!N¿ÂØ©Ÿ`ƒÎJ€,IC´¡¿sâ\¸aÍ¬FDXûlÒÇ°F½šöüoæÐA¥°ÆV0¤WU P¢ˆjõFw‹åfOw­­Õ)W$¢¯p·#å¶Öb¶cÈ_4l9R{Ÿâ@çñga-²š_…­xm²?tï~2 ÕÛY¶öñô±/ÛòòöîöÚîÖÆÆ'Cù·l8õÏt‡›A•+ kŒÓ¾=äÐ­™înõ#¼}{L´æ.kj³FšÎr±\iÔÚ_µ/¾‡ÅˆQìŠ(ÍÁÿ·„È¾ÔE¥„LGî¬­yÿGßÞ\Ù]¹ôàI¸cþ;Ç?ýÅ¿Ç?ý`ñwÛRáç(¡Ed9%L&™bÞ¨z¡£Q§æ–iÁ§Ÿµ•5vKþO?Ü…µÃy“A’K²!ýÇº®rñkXä[¾Ð’žÈ¢øº-ë•hj9Ì’•ðèíŒ|,H`U«1S¶Ù02ÀÚYˆ©²òÍ7€˜”³ˆfDd6ï£»ñÅEß|ù2ˆfX£Z-IƒÄÄÿÅ—‰Ã¡ˆl?¬=Wl3»>þï•5óÚsÂ)’<LkÖÐŒ¥¢1á˜ÁÌá3 ÛAÖJ†kõ,©Ebóƒã:àÊê??!"®íËƒäØ/¿ÿþãïŸ´[‡÷‡Ÿ…µ®œä#@M¡DH€¥ÛR”Y-¤<Šw !î–	<–4¡Ï;/¹ŠH	ôv`+tDrÈ.:Iþè¶îƒŸ­YK•µ—¨VÒ­º~;õ±tôt®³f9ÈWH P´–åHÞçózºÇu,4ƒSÒ¿ðïÂVþb8‘g×8W"Ïˆq›].ç¦ØP#¤/–Õï„žÖtò”3dwW«ÔlkVˆDŽÑp’U"×€5L¶J¥z£5(XCh›•—#“g½Ø‘T` úÒR³2¯q¡Ò¬b¸qk¶Xº·¬Ñ 8¹ÔQ"=Õ‡üÁÕC¿5]ŸmO‘ôÈ4P{©P&¦&ó5¸©Ñ £±U%gƒÏNµKi–ÓöªPØ4n%½9f0©?ãý(µ^ nM°fiÊ6õÙDH·Á‰Ð¦L‡wX›Ö¤#ýãZ0¸ˆåkRBGí±?Êºxdú¬“R#Ó‘z¡QÂ“ìIÝ)dƒ×G‡°–’!}t®µ‹“Ùõõ±¹¹¹~RÚò†éæîÊ5z¤5è[6Y²Dfc‰×”e¸Ž!Í†}‚5¿[Šk°æ¾n.Yû-«ãCç×`µ!_˜õG)MÎ’c¬½¿?¤¨ékoèøVâé’5BË§ÂÚå÷ß~íý¯ú÷ÀZVf{½ ¥«8÷ÄAüèÞý&¿9´5Á0“õw)²¸;a:[®±11±Ä:4Áf91;3væ$_«r„\ZýûîöEknµC#Ì)ögq)‘pÖ°ÖÝ`­©=¹NP®6e©U%fç=9úkæ—Ö¿Ú^s•AP÷Ó±-6ÃÚw/)QrëÂ…Q3L2ªQ5[oiŠ–ÛcáÄìbf‰;c~‘¿ûÉ–Œ|ÃÓˆD%y¨¼J ÃÖ²q¤
e\¹25uúôÅ5¾»§UkÿaMÖ"Ä‰ìøÅP÷!hËþê†˜^Iur'æ¥@Ò)LbŽ0²«ªÑÕÚòš¼BT©¦;BÓ"ÜËBRWèæX¸ãôé„çôdFqÐIMž¾º™ÀK1ãˆËFÉÈd'&Æ)´ÉÍN(e#cì:ñ1µáÖôÐùÏ"¬±xmÙËj9ø‹Ô
yjXç{î×êUî
µû|Éw8Âšó5¼åè„5Ëa©´ÖQØÖ!¹9¼Žˆ¦ˆk3Z„µþøÒNƒÔSŸ%¥‡Dÿþ«p;oìÖ¸·[»±Û?´{áÕãšºç¸!Ëß…ÌH9eÿíI[DfÜUg|qœ	ô‹º=ËCiÅbd+rŸ¬‘‡Ôhžnÿ±}ºM¿ÒuN_BØ¾bK”µ‹,œ)wÈK›kkìèÜúÆúE@ŽðÛÍõÏŸ|ÿË_þ2 Zd­ý<Æ">âúù_{7ï¾±¡š™£üYà©Ý ¹ñt1Gæõé•c©.³ |ÎF#f.Ûô£«ùØ$._>þìzÓÐÆ:5ïj+IV¬~û‡¯ÅjNûëÖbøLD5ªX‡ü¾¿4¶`5—ô¼¢RZ&ÆÚ©‘lªˆN*'ÂÜ‰½íKP/Yš		§u¤AVãñ%p&·þ»êÆ¦`]¤CŽÉŽaµÎöí‹ÕàÀ€k‚²çED5Ç£@f1µÓj…6c kþ¥ac¥µm1ÓÚµhÿ¤9Ëj‘Õ:híYVûøÉ“Õÿ`Kl"4ÂV¸3vÆ"†²ÖÇ“.ÒÚÍÈN„ŒAXÍÁP${b2 »zà"BZ–H*éu•õV¶ËµÁP²¡å!ök)¬mp^î"ôÃ¶¸–¦k§šYcÃ/Do‘gò‘ Œ»#BžîÙãTN7·ò²Dñ.õkg~E„ØPø¯œo žq ër5"¿Q•F³6ô½J=‚F4?“iÁv….Ñü+5‹x{´1n.ƒXäA8Pµd%¢>M¶Œíz	Jö$Õ
¯¨tFF©ˆ7~« ÎÚçÞ]¾Wo•–G*%* »z°ª”%Tð;ìÃöDýSËËµB³6UKÃàš:œÉö_–êcÃ'ˆ‘oPÈƒj³fÒ'ßD°æÔdº®BìPž›™¬{Ùñµ¹à¢\žÕ\‹ÁÌ%çÓS­ ×ê­ŽP\$¦ÈXEC¹eÑ«›‚.©¼×n¼jp(?d‘Ëx–’“#²8ýv}iimíÅl&¯D ý˜ÁzV©ÚêNeXeìÕ¯Èö‹â•1ïäù×¿èï7­9ö—¬¥¬†°¶¶ËrûøÆÐQœú52Gç(Á7Þƒ¢S^ó^Ìd§Ö<wna°¼¶7’~¹}|ÚÓ–ØÌ'e÷4Y{¿?€µƒ8ˆ1þËŸ]ºD"¤‹aäóc©{ò ¯œ¾ùùDÐÖÜ_zæÖ- aíØíU[D38sŒÅ™ÕÕ[Çn¼–ÂÚ>?HIk[Gû2ÙIF‘\ßlà3½3ùqÿ®éîBTc¼¨)&ùýw·ÈÂd}õ«íÍµ½°…²5»ÎÚ²ï¥¹ü±¶NÖ¦fUWÎÍ¨õ@­¬ÿ%Ï.ã™YýÒf¬yg²Y%«}yzøÝÏ–i­F¦ŽÛaã3Å<%ýÕÜ´ÄÈX9\ºøõ×wðƒ$¢´&4Ã\»þé§×¯ë:z¿Ì…¡å\ƒÁ‘AE“žeRJîŸ>·@7S.ÃÚ›„cÎ¿E›k—­™ÇlÐo7Ãš×¾é7[†50ñ ÅæGA­(À.$Iþx¬£­Q¿¶‹¸5ÊaÍ¨f”CG“8bp³»ˆ6dû¨Ã&6c\´‰ºÚ¨ZbeÍ1’D£\ô¶Ê±Âû=9êŠ ø¬aCGt~N¹Òr5ÓZWú‰N…í)›qÔñ¼¦jD'ä^9žÂZ< ±!¬)®eý›Ý=-ª¹rÈk|ê@µç7û7ÞÞíëËÛØ8ÁXMAÂhÍÍw{ðk¦Š ¼q€®¨Jw¡|a1Ç÷““{w÷!¾ó*`ŸQÁZµÜ¼rºÝ¾¸þ”vvŠlÈöé‹„‰LuÆ–wÐ¿ïlo¯ë”±)Ò°­jÏ1´xMœEtÈdÞL#=ßyÙó!ÎñÎ;ï„5†µ7ùàÆp=%ÜöZýÃÎ¹©šö¬¥¹Ç5j›½GØÔAÎx?zC‚³Iê)u.lBO$DV¿F)K¥5¾öEÊj<Äj‘Ö¨V“™ˆo)Í"Û]Ó‰9Ð=¢y¤œSXR¶±l„ìù•o~÷¥¸fJK…6Ž~XkW”ÉSºÚYˆ-pš»­R@ÚóýùŸwä•»á’y·~–ÔLkñ{ÿòÐ@'šIA3·ééHGÎ¬§9| ÊlR7¢!d8´–jkiˆÔO>~òWO4þcM±‰´bÍ­±Á4wÅFvBgS³è¬›¬"¶¬¨‰Õœièº±1÷ƒl¡™PYî­‡¶‘Öú4 DVÛ§¬Û¡fXCZÛØ`Õ(*vìïËòžê€Ld½K¤aÆ+d?‹wb »¸šcùC˜vqiÖc38FÚ:’E^½Á»…ú£úé6¬Up®o¡§©°Mÿ~Ê	¬¸ñWé‰:Ù “¦Úõæds@íZÊyR±õmË=XSÆ`½çqÖaDÀŠHYûàÒ\õ3˜§F1§3~‰·ke¼¸¦ðûŸ/¡©½uê³Ï”bÍ›¨ø‹¦QÈ1n÷V–GŠþ¿§änÏ©Òo	ò†°Ó…4éæ“£‘ÉbXEƒ’vd32è^qœ{6"¬•93jõ##˜ôO·4ó(Z#£C=w†[9œk*‚¯ÒtmZã½~ß2);BE:Õ|“íu:¬ro09–Àšà‰¯NpògàokçïÌ,Žm®ÍõP¶Aµý¢'	òJ±¨ÛcZs:5ÌP™Ë–O¨×Z?†‘=D–sÇ/œ<ùê§ñÅë_9mOt¶ÄÞN¼ 7æ6Xnè?º±áv¢'d0§±­6Ùq`t‚dÔ:»b+öÀÚQ’ ÑR«NXÛý*aµž—Çï“I„$HÁÚJ„µçþƒ8ˆ3PÖì1bVÓ>!ZÃWZ°fZ»IÌb2r[Ûê1qæØí3·gWW¸™Õ[_ýìgÏ:Œ<S´¶5ÖŸ¡ï™JÓÆÇ—Ôê”ùNç°d¬æS VÃ¾¿‰»;°¶”Õ¯Âr¶§0»´òâæùmýÖÜÙÙ¹|ÍîùN\`uõ*]²Á§ëcÕâêÉ­3ulPn©àV³Z«7Dju¬°Þƒjª§^~çÃÍâ(ö¿¥âò»Ë¤j0Š¨f©JoeDöÄlð»¸Rn\úÕWŸ|ò3)k¯Öb«µïWkåÌ«ÐÚ/N)“R-—[²­N&ˆÉÛO†&¥Ö/0©º3ÃÚ9Ä2nCGÏ‰¾ÞD“ Å1Á8Oâ‡\Èp­wÙÑÜÔê>ØÞÿ¼ÄgíÓ0òÒ$9™!’Öp–˜L‚žn\=ÙeD’[(YãiFÓš1}O—¬æ2=g#ZXYÃ¤%°šÌDä)Za»0ÀQlÞovÑ!­Çí°=E]˜, u‡èUbl¶½vøTÜô3eµ´­î:k×Ìs^zÇ»øÒü’éåŸî¨v„5hÍM±á8
Ö”³±{c£¯'KŸÆc½N˜:uê‡³ýÇNiòÑ‰L>À“èšnÏÉµ,X-*?´Ô¨Ž©]Bµ]Ÿ›[Y¿rzä–fÒÑÈ4¯Á’ ÖÖVØSÈXCacçæ“	±šPMâZ ­Èaÿ×Þìøâ„×¯ö«lI˜ÜC¼é¼È$Ä\„U1Õ²¹´ŒÃâ³ØI-`»è Cl64ïÅªMZâØï×‹Y•¯kÐ¼F8áq©uä@ŠX~ó«–À$6Æ8Œ(2ì°¾¦à¼Mé¬<ùÐ4â5ïìª¶–þ;rK|¥2Q¬fã+UÖÒ/-8ÃÃ¬­ég¬±´d(lÊÝ?ˆo¿qøBüIYX{øð.üéÌö—‚5vIìXÚ»_Î+Ú',Œ„«¼6¬±cV­9öiklëñ1_áŠ›ÏÒš Ìp–nxÇŠŒ¸hRshÔ"ñ‰®Å<‚!›-Âg:¤[fKrøs1™½#q\Ï³†«t’¢5„3bŸ²¦ˆ°¶û†}ûûyÉÝ­Ý}°™YV9—'€BÝ¦g²heÙDZÓ¼…>W¤q»Ÿ±•×¥ò5mëxfGÁqCšö÷—ûc–ƒhp‡Ê­²­E¨×¢6íH.ø‹Ä°#_*4~ž[lTJpLIÎ‰
ù‚àÓ†9`Mê‚R³©ÜÄúäbAªËT{"±¢ÛGå”† ™@R«Ö‚‹õ¥Éaª½êÍ’éçé`õªb›ááÆË4Ä^`PáWÜÄƒ6Hç¬H~ÌH{ù*©.›é³‚/Z°n!Ý…þì(€io¾Ni¿.ß#çèÌ-%Ý¾t™©EåÞÖ
…‰šzW§+Uýcˆå>øì]ªÀ¶*3 ÕöƒIþr¥V×ÌÒë0ÀF<œ„N›k(k++Ôclb	IääÌŒh->¡î>Ÿå³LûU°fªž>•0öœàâCÂÉN¾”ôVûe-
kŽžþßüæ7JÙØêSÙœûÇÙLBB›÷:£#%IWÙŠóèŠï´NKÖÌj7^»‘fAÔ¢°&NãiT;pî?ˆƒø‘FÜ›Éz›ŒÖT'ã"xØXs¥ÚÌÌ­1µ›$AÂjÿ}uõÛoOâO¾zS$3$B®¾/X‹Ek±ëb”Ö[˜;Ök„„•Baf	iEC§Æ¦>"ßä\n\Õí·3=÷Ý¹¬®°ùÛÝÝ‚µË;®ƒÕôûí:OâW¯íüôÂm5Ïœ™¤¶nf<{ëöb³Xl×èóÎ{Md÷ÞÃ/K×¦Jró­AdµËÄ
"£Õˆ]Áî¤ƒÑ9ÐòÁYªŠ¹Ïûägÿð³O>I¤5Â“Mkê·võÂí3¯~ŠÈw¡P,å®Ö´²:TzA>¢zaÊ¬W·µy™ñ'ª™pKý§DkøõÍlbi-Ð« ¯ºàMß‹îl‡eÉ¡ïTr>Ii¡·›{ØH;“ªæ˜“ÖmŠP²&Í[lž¢‘¶ L°&'‰h)â4He=ŽVcÅŸ@\s‰Ú”üÅ¨QsLy‘Àù0Mœ‘"ÐZ¡+èh¸É˜¸<	JkTŒTÓ"¡ù¨Ÿì‡ózÖ:
ÖX¦±Ïâ?âÝÐ…“~}ãÂÎe,FvÈ…}ÖXJac3µË7nhÝó_#{BÃ±kxè™ÑDºûb“ÉÍ1ž¿u;3Þc_‚\³K½ý(oçs§–H 
[ý´¼&.j–mmD.#I®oHRKaµþwÊöÑ²ðÆ.~@¯Ak7ÿê¯žÀj¢5kkF¶ÎDGoìC0–ÞÖÊôÚŽc¯ï,Õ~ -ñ’4r%èEDH`ã:¡+ºîs€-§?"8¡˜.õ–´8C[´1¬™±ˆ‹HJhkðZÔÖ:qmŠS‚+ÎJ°ÉˆµkÁÎ_€Kà¢p8°
oXmIJ÷˜Þ"ÃYÍÑÎ>ü°ö;ÓÚC™œ:Íœ¦+üü_¿—y½ÕDjW?ÓÐÕ>zñ°h&û›`ë±HÍ¯š4tS¸g@§¬–²±âÞÖI"dp‰ÅiÁ«1Èe¾Â «³6í&°¦Cl
Öß~û/?—õ¦#ñÑáuª«ñõóŸßìM³Íj¸‘­™Ëdòè-å>ŽËp„\§6'ŠÑ\¤Â0»ˆÀe¡bÇ™¿•²6¦\HS™ÉVÞr†6u?Lì—ÖŒjÖpŒ|c³¯OUkG·¶;Ü £õ£Ûyyá
+:wˆÎ"®ñ÷Td¸JKÎsáx>íPØ‘”æížÄëÒÔ§r»Cy©óôÔo!™åóªv…jÀØPÕ§Ü2òºl1B#²†("[Ýª[¹%Š²ÕGºÑ,s ´ ¼A•²5¨Tk..Î4ÁŸr¡6¥±®T]˜Æÿ~žîdi¼IE üCšbµ^U_zA2f6Oqp>LÛý„ºÛ<GÔ)»9.“Ã8@Ö›TÕ©£öÂ4ó¤ü@Ëä¸”ôèQ4ó´€³6¹ˆ·šF>¦`Í¾¡‰ËÈžîØnuª6J·ØˆÇT£JSË.)fS¦b¹‰¢+ŠµâèèÈògŸ-Ó(ey¸žëê­´ñT©––§&–Ú‹]ýCÁñùõcÛw6QÖÖ×7Ï¯½è$Wþ™—f,¢Úa¤'½´Îòƒ$ŸB>}Ù>†1>|NúûŽfz’/Õ?kIÁÚZ?]ÙXe˜[ÛìCK£ßLæIB©måÙÚíNtÂšc+Xu§N)¬½`mw}q?_‰°và/rñŸ
k¿ÿ’XY‰°­…»Á+w³´P£]Ïoõã2œdAf2«ŸÖ.9?¹´4Q[ýÖ°¦4Hb¯²æ_¬eÞ¿s|¦FzKºEŸœ§K£;ÿgÇùUBÎçÜ$»¶”¡¤­ÙÕu¿o“‘¿ÙÍ¯§y†5"¤/üôªZcÿÅÎÖÖ­RUŠ«K…nª…›2!l4gïMÕê%\ò–Á†åFp¸˜¥‹g½ŽïE›ÙÁQøŒ*7 %ÄT‘A@þÀš“[ùä“O¾zxçÎ'ÿð_=Œ´öQ€5ÓþßÉÉ}í»ïN6‹2¨j”+Ô¾Ui&ˆCkêÖ‰íÛ•ùh2?
|ÜbM·¯&4ÃšÒm|@p`^‡¹Îk¨£rK×µó²€š˜ìµxž—2.W(JSZÓ[°‰Õ6}´­ ©¥KDÂj?‰ØÙù˜PdÓae?ÚÄŸÜH®JšPÍâ¡A³««T¬EMÚ„ÜJ%r÷É|t†CMô
ZóP<µÙk	ZEøÒe;¦<ÆH/óvÇ½TšiOE`·!ìi®ýúÕ¡-~® °ÆC°&_H>¾Bs~è˜÷Ÿ?ÿþÖÐÑ¬‹¶¡±¤AÛñŽÛmÎ°æ!\Í.2Í}›Gô|­XÎayMe¾¬°åœ]×çlø^ûô•¥+§eÃJäYÓ2ZÄ4ì‡•< Ej~j^¯¯­þsÝqíßÁ5Ô5ëhêËF$q/E³ÎeŠpip?þáò2¨†ÇM’iVã©°ƒOßàõ˜”¤Q­E3`}AO*ä©CÛþ<…5>è–a©	zü
TãZ‹¥ki6$ë”Z¸ˆ0«AkwußgiÉwŒÁÑÞî¨–HkN¼L„-ƒsü	‚?yä1»ÕêãÊ[ó+¿ûäw¿ëÔÖRUÍåF¦Iÿ“«Wæ†µ—ï>~Œ;ä£Géµýø…—õ^
Õð:O8ÍÒ"Î&3¢"Òš^°Ój|÷wÊdÍ—ž¢0WíIÆ ì	Ò·ËCO–o6LÍ1RÛçßBkàZL„t$”æ…u5Xø9×};™°”Á’Õ!½í³°&{çüuË°Þ5[\h{Îengò‚Œ l±#Ç)× +E3¢6w¿¢˜T°æc=ly+\¤A¦¨–ÂZøJ•µ€­§{ŽgßîîÑž}5kÐ™«®ÅjØX³¾§§!C^¼–ÉÛ R5k'xÐ8çI£Ù¸6’~9Ž‚zRçóMfvj“²ˆ<¢5	vnF'¬Jre“ÊÿX‹…FQ“‚4ªÁ ±ÄaV+”©²å&#-/p¡v<—hÔ¦4³†w«}otxaAÓ0ç*S÷@=<dÌð4)A:SSjž©XóÜÌŸO—‡á?hm„T™rµ6QfhËÑ+ X+“ítÍ9TarR°FÒ"hfXpQ/ÇHYpf.ˆ¦]E
k€œ˜ŽWt¾Á
{-™>–d×\*V{kØßs·î¢¬øw!	Sm·‹3³ÿ½ó{mëL÷ý†syþÛ86Á¹ÈMŒã˜à†±FÂÕ˜–j$YÆ Y#ÅÇI/n­v¦U’¶i&mÓâ”œÎìçWaoƒÒB²zqp83Ít›@ÈÍ’3{ÿçóý¾ëÍ²’2—Ý7~$­õ®–œÄñ»>ëû<ßge¬>ƒÅ­z®µp×lëµv¥Fºfg¾SyãW>ŠuÿO×)nŠ®­+	²—€‰Ûí%[~ñ,•[•©ŸvLNÈi_õk¬'úd‰æH£á‹YÛá#…jÄW;ˆqÛ7oÊraA‰špÊ§„÷I0½-Ìgñ^§ì!º`-¦F~œ4ÄV<IÓ ?L`Zì™–¬¥ÂZZ°¬ýÓ^ìÅ^ü¬#ß80,`Éàuêb®~páƒ÷oŒ¯/_˜§»t}þÂòa'?ªzïÇ63õÚÚÅË°[ÓÓk[W¿?óÉ™OŸ/Z;´5Â´öq¹)ß¦D”Áêô|%ËZA¤%ú\­Áõ{–ivNÐ0›;›íò:¡´Ã¤tÞ÷„Œk6AÞúõçç?ÖÕÊ=`M6Èåò¼4ŒLµ2³²1¦ûjùºÒ ç+óvÔOo@p§ëE²ó™ûgJ…DýY)õOÈøìúµ[·¾ájúÛ‡w®ßù—¿YYˆˆ/ÀÚ¥'?üðäãÛ·¶SÕRI¶ÉZk-Š«¡5xÚ˜ÅÖ>ì‘‹®Ø7¨9ÞZD0ÕkV*¨AƒÑ°±ƒÔå Ó$±ñe2s€Æ‚gh Å‹žÆ]¯pž£Ì³€C³šï\ÒXmqî—¿˜ÓñÈk|–ŽcÎ-ºÈUÅ/B”†£;«h(X“<3RÖ¤Hòdƒ`=•´Å–Ø3õL3ßP#[^ö»¦íyVÏ/i‚c:ì¢5ïK§ Èºq-¦˜—¨…÷L8µ•5™‰<…ª¦ñrÆuŽkÓÚ‡ÀÚööýÍAn“öHku1‡5kÒ˜µ'µð.Üõg'c,F.`O
­5køŒª×O‰¿ÒrÖß°¿ÏñG:ÁÒfXã ‡ìFx2ˆœÎ­=þâ‹/þpZûeB×b:dB`0ÙOD÷ÎÒôŠc/ºÏÂÉï^…ô‘ÐDa„ÌÐõŽ}öÁó1ÚEr\°¦ÓMuô»6©qr8G„ÆÒa•Í+ž!m	>®_Ãœ	«ñŒÀæ/Sy’)ª)wð>¬vã¶ñCØ¼KTò,ÙÇ´ÿƒÞz‹ú6øbÌ{Š1GéÛ‡WÉmäinÚý`Od5µúo«¯)òˆ:aßPòã1º¬ñ‰Øâ%¾˜í¸Û½ß°&Û|ï¹–”Ëñ4¯íöñÒ‘ÕTÛö€GVWÄÎƒ$Ìj†5«\ºøç˜†%ÊÝ°–hlÍÇŽ®LÈ×þ—Q†#ÕÖ¾x|µÀš)ÃL¶G
kí±÷¡ºBeø9°!›DélPsíyâ°‹½N˜ÖTÙ¯‰Ýz”˜(ó+r¥HJL%sHÅd„µèéˆÂZTÖ|ÂÂà]]¢îl¦#ZXF±¸âÀ  q’W’*"­Ïùp<Ù§<LÃšödmø(ãG}ûÚG
k%=r¶QÀ[8Ç¦©¾.«Yv3Yû’äQˆ‹P$­Õ€5Þ @9‚‡èUŠ‡&þp°–¬œ#‡×¥÷Ñç-–¸kÄ’Þ¤H¾¥&žsÈQ°NÛEB0÷¯OÉù^•m­Fgcä&"np6K‹î3VËäšà¶Ô»:[™§wN­ßõÊÂäSZÀÚÐì)ÅBa_!ñ•5e‹s€¶Hj<-¨iƒqBqy`­U˜šj§Üúz Ì3Ñ¶hû®YYÏJ%¬ªëôâ)ŽuÚÔ®©´¹ÑiP"KyZ­Õò\§3_kä""º3v³7vºµ<~÷¦;ªeÜ®ŽÛü“{"š÷»(Õú©`^Uj6×ä<
iØ^äEe-~fª¬Ñdmxtgó(_upá¨¨l”ô{5`m˜…ƒ6¬GžwƒŒÕÞž5½N­Ö¢°¦Õî,HBI}‚5ž¸‹ØÉ¬†°öjê/òO{±{ñ3ÆK`Í7úÚãë×u5­}Ðn?^ÇR¿ûè#E7íÔh°VÁò1ÒÚ•5Z¬Ñ÷…ÍêÚ™Õ3ŸBk©¤Ý Á5^Iìö)·2)jÕ\¶—®ÂZVªÚÒøDuºI_ìÞ\»]!23Áé¹¾…»ÙõõÞÍ3¤"Z‹°¤¢"i-kig
ÀY9föL®za†©èÞ…é™P¨éÊtž™•Ž¸‘m…äŽ†šµÈ†j
aæ¡š¨…}V«dƒŒÙ‘÷o]»|ãí©ã×VWaQÛÒ¨$­‚µS£o¼~éÉ¥‹”€“\©+qÞa‘i31¡ÞÏ”Ù(JW£Q17{rŽ•Å®“êr¬F€5´
•ªY°€æLj6T€eœ):³$|ÆNXOv|oÚ4	•wÕ;ÚH„×Ðk°Z’ê$n[…À•bƒÑìÄ.jã‘ôSº}„©/Kj¼PÕ 3F#ìýè]cH‘ÚŠÙ‘Ö×\˜Àf]¥ƒùR‘dä°úÌôeÓè®dÖÂ©T"óvšØ!îz®¥Z÷(F„¾TNó¦Õ9ïÊÎ×ïŸzrþ¼Yí|k’OÏ'ÂÙUç²@¹À`øþ¤«)­e²/¤?Êe\Í,‚Q¸œÇ}9·ÔžfŽŸ®g2cT»S‘_àï‡«Š·Må_ÞÄ ò,õjÁU„^Ó46³‹P©æm[†µ-ÃÚßc&¤pMÚšFüðÓËiñáãéáÈþaè½QÖ¬œ|¦ºNƒ¾rEG~ô² ÙÄÔc{€poj4ÆŽ^–àeÑ rwm†ÞÃ>Êš¢ùýï­\ƒÈÀ5ç=F]-F¬V3­)îÜHjµ†Ì(2ƒ”Ææ{ýý¦v„ò­CAlÒèRSI²ú¤nÑ7V>D[ÛMvëj’Ù¢¬Füñðáƒ÷ÕŽ{õ»§òá‰¶®E.ëf5ñcjÀšÖÀš÷}»ú „ìß•™Êkñ™Z‹€©†µ(i‰´¦à"¬…ëcÔXOm)D6‘:“wâçT#’G—ÉHášHÍ¬f°k‡²-Ù{*Më±²ÆP»cÄb_{‹XP²$
›Ö²WeÙÛ[Ëk'$^ËeD}°'N°BDs›CÁZÖX¥,H±›Y;H¼ƒí/h<SDX‹M±k7Q4ôƒZ:¬›kËV“X@ÚfR{UÄV†×&Ø¥}œg!Í=·(\Þ 9†eÖìgeSKilÒêùÂ¬kð`9Eù@¾é2Õe­ÊRYù¡ _¶’)¸ :C=˜É4d–fÊåŒÊÀ<nW¦›…–{’¨¢žkºk~‘ä>-ðªRÏÓolm9SÄºDH7[Ìw˜4gfO:§£ØœÆŸ‹i`N~Ž¸BrÒâÈLƒ²°uhòdÄÖ6_4UeÊÓ9+šp4í²Kå
%k‡°þ`²™²=¿³<$º1/2âãÞúr:9îvœV¡Ö@ÁSêc‘ŽÞì™ãžëKLS#LòØ:Ë-³XŸ‘£Èö( ”–qˆÙÌÌF>OÉ_‰6>Õ¦Ü"Éììy#&éÝ-±£Ê…þµõññktÄ¾»ð5	íÙ\ònXÓ oñÒ¤°"£IX¨	ÖYOr¦²#¡-Y÷¿ÈjÝŸI—yAÞ=ºó¯ïîìlŽâ.BQš¨LÞ"uéLj_ŒxàYEÁOÂš…µ'<_È‚üäÜq·Ó¤Å¨«]N½Exüç¬íÅ^üÌv©¿³ ¯o=FZ»úÁÕÎÂjõm{íËù”îbN"[Ag°ÚãW¯­•+nœ½¼üíõ‰O?‘yW§5PÊêZPÖ^æ×E.§Ü7å_ëêökú”à UÚ„XÊµi€°Òl–©jb^=Ö“]¿»Í-.E`µs¿6-™×¿ú3&#O®.¿R­MÏ×rÔ ««h®:]ïtNŸî”ÐÕNÓZk’Ùù¬£lÌ¨ce¦Y(Mµ
Ì{%~áÏ*0ÿÅ±RcÃÄøÛ;—Ï~sílóuk­Ö÷žØ½ÿ°öäÒ¥KT>Ake×"±PY’`­\;î]ïk‘Wbë}>Äž#š91yº5Ânx,Ø8ÄVxö!aã$44B°öŽV Å0ñœ†Ê¦ôDÌŠ¹”OYTŽ
ÏC&>Eë|ÐlQ1Š×"¬¡O6/E¬™×„f#á˜FÞã†&9&ca*›OPb¤ò!£°VoÀküµˆÕÂÂ´—É±6™…HYÍ[,Ö0UjÙ=-âòèù£ÏÂ°¶k·ÏçiRcò»~s`øþË£§î«dl~‹øEÖ„kŸ"¬¡¬<õ‰u§t£þÐ{TE-ö~ã
ÌÞJ‹d’"—ªüp—økÐ= fÒÉ Ñ8~<_?K‰Ú£ãÇ½ý¶­kZXY‹ýåýa[-×¾fþ"àÚ½ˆkÖÖx:cÿ¾üJ¿âŸ§!œø®‰Ö¸†#Óñ¸<ü ³Êª©Ë`¬Ô´XÎra½Ì„–”¬Î­<³×¡Ÿn6¯]¾cXs*$¸«¡¬ùÃ´Ä¥9àŠhmuu]­®eÝï|¼ýZëÿ~3š4\±Õµ4¢•½J¾8ÀÁõ‡Äƒ‡¢µÿý Jk©¸ÆHÛ:ÀqHaZûFÎ"7ª]¢×S¾¡Ÿ„5ˆÈ£Øš[ßíy°ŠR01­—3©uÛõÃb9‘\W¶¼.sgk+Á{êÂÚœÆN¬¶ñWoŸ¾úÝ!k‰IMó™¶öE—¶ˆíF59‹(	ò±pm­?­X+Ài‚µ~…”µÝ©
×«É´>#›‘^¤4çEjÝcG{üBÊL“‚5Ö k½¤K!iIõ¦
lÂI×Êœä«ºÀÖ5ôæ öÂiÍZ7¬±‹à8q×æÊµjªæ½±®Ï*–€Yö$B‹…</raÑ#J¤zmÒÉþ%áEŸ¾bÓI2¼´æ&…Möã Ñs Ë®\k6`c®hM`[()‹n©­™Ò#—–²HZ…¢J°F‰A^mdZåäKC[C$C2?eåÞ9XM?Þ-¦¯Î½Ž¥5¦©R½“Ï#‹¡Ë½3¡dGêÕzøißÿ±±z~V…ßL%L"ëÁ±C20¹GÅ×Èæ”rƒôà%¢ QÑ¹ C18äß£3$ÃÎEwÀN¹w’¢RâÑ¨)Û~j×Ô+udù›KþœÔ£© Z´†Ð6B¯5*á³´Çýª†[KVíEÄ™ƒÕ´øipúÊV——'××¯-lÞ¼«þX£õIGrm€µ	9?&?hrmƒü¬VäAŠãðA%ÃÎñaŒÛ©²æt,k_ÝZX°Æ¯aÛ/óþƒLZG'‡‡yKÏˆ*„ãž!Y‘]²Z7¬¥á§Z82ÂZÖ>ùt“Ó/HP-Ö"«Å,ÈÿÜ3ƒÜ‹½øyXÓEaBkß\ßúàq¨‹¬Ÿ®VÉ}TûND„+kËå¥%úü®k¿g¦Y[B2hkkíé;;wÎØ2…µs×v;Œ8Ô52DoFxöuB«´é@]ðDv¬R©L·'(¹^øôÎNï1~e†©3¼7³«)-il®­]úÍ©ååJ;»ÃI•^——+÷¦ï>-+ÈN‡EMszd6ç;(kÄFÏ~J˜åÂé{S˜7bÚ×¹¼53óí'wÖkÐ"‹)u)ÿV3¬9N½ñÊ©©UciÈ!'BìâO{5’R¨Á«É„ ª¨:;™8ó»&MâB¢'$>þl©È-é M¤Of +åÙ“$MÂs°S^PÚ†føÈ'âA‚™O=S-¯w~ÎV¤°í¤V›Ü(Þó0B¸®œ;1¸y	»±ç=Â»‘ØHŠô16ˆR¡dXCW£]>ˆb5GoVË•=§x8"ª¥aØ2µ#Ç”Í¼ŒÝ°&&Kc«í®Yó; ŠŽþõÃÿú9‰ŸSaM#
ŒØbäÃû›ÊB5òr*$U¤½hÂTé‚o©ËDüh¸¡Î±ž3ú‘ã¦0i; ?Åèlfjæ¸Í ßTÿñíúY³ÙqQš^–×@·ÚºÌòÚ:ç¬Ó?È››—·›Öþ.Z£B¨+2}tŸ?”®xo×	ñ G<be’âÑ
]ýPvh*7#'È“
Ðäü[¥ùX²ï—'ƒ+°ówli>¾KÂPÇ~ÔhïZ¿sçÎ·ß‹ÕLkÑRV#©¤H-IŒ¨vV[½ÖRlKfôÕ bL´bþ`(¥ñõ"GìÜqLˆ¤¶k0”Û=½E$yF&gB¦¼¦AD5?!:°¸säÙcG¾ƒÖ’°¶öT=Ð^„5³šaÍÖŽ k«Dª­I9L£[V#Œj
»«í,ñ±¢æ
>`Í{Xj›ãÎ”ŒÎ"\Â¬…¿3\{‹ˆÚZÈ„üc¤5£šs %«™ÕBT÷'!yÅùÏü û{ºr!íŸ±¯œ	‘Pš¶s×4ô%4,ùÜMÎƒœ8<I pkƒòµ,è¦,Bv¨`!9“²ö ñl³¬Ý<vðïþ_wÁÚ»vîŒ6¸½=R¶CÞ#+oóþh7Ò'ð:*‡	oïëå7@âÄïŽØ ¤d4±ÌGœõx‚ÖØ_óepZp…Ô]¶^®VÑùEÙëÔþ]C›*ÊÊ„¿.¦9Êõ(þjÉÃ¿_ÉÖ Ý2_Uàö\K°¦"®z³_ôãÔx+îß58£U›nWÚKÕ‚i­(£¨™Î½yî¯å•gHq­¬û™'Ìn,H@¬esÀ›€_‰ér¦kÔ©‘jÁR+•ä+:;UgZmÐ, ÙÚ¿8ë6¦|^â4*VóT¸Èf7­™Ï ¿Le1È25V-’VT­Gõ°öªfVFtÝ±ø’Ý¯@Wrc8Š4XªÕ@(YB…}²Íô—Šü&¦+¶A-Å§ç»¬Ýºõî-Z\Þ½yëæÝõ¾¯õµíjtÅ‚Çõ“ÆÚ¹J‡×œ|!D“^:ÉËÖþ}9NŠ¹ø.T{Öv67·ÿL»yóæ¦Kæ6t[ì¾!×QXéP²•³ÈjŠôF¨1}åãs!žxÓ ŸU¬qÇiíë€ÚD*¬éú0ÒÚž¿È^ìÅÏî0Â<UÆ˜Õô
þ"íÚøÔ-UÕ »Ý^ö­Ê+WI®˜V¾6€vå•åµv{Èj[ÊZeýÌÎj—y¿…5ikâ57÷øëè@ï„«xÀh=’2Y2ëÍò’¦¥ÜDnš¨¨†wb`r|`ss}™&kÛHkÜäúí‡hk…Õ~íüG©[VÖkÕ'çÏ}LõvO¡ÖtÆÌÒòRû^qm&ß©×:äø„Z½Þ!VV`‘zSuÍ“1Òr?ì¤ÔŠ×
9kÜ²Þ~ð·‡—ßÿV°ö7	kR÷b[lW­}ü2k£½½G'öÁf=„»l…-X+µä~Ö_š*ÂE|ËE›a½fpúå[¯™¿`µàÒ I¬HÚbû€•V1¨]›3¬!¥‘)îRv¥ÜE¸ž†k?²šÒ`t¦Oœ!wŠ›{ç¥hÉ[87f‘›ÝfY9T–4¢^¢þIË kp›T5Qš#!6MxªñôßžØòud-åkµ¼ºA3¬™ÇÔÿÜåjIDhKP¾‹Ö°yŒ]²a»É‹Ð]¼æC/ÂZ×Vº{ôÃóò±oÿyÃšKV#kŠqç@ÚìDŽÝôYP™Ž‰,I‘_ž˜dK7Ð——3fr<êª½¸Ø 8¬™žB‚={C:l­}¹MßuŒFdÃ*YM+×€5»õk[‡¿¹µ}óîÝ›wwv0î‡ß¶®<þýã«¿¸@ÝšrÎ¬­YöJô5"…/Ä[F/ •,>xÂXÅÓ,ÓùqÌñø5!>›%!÷ÿÖ µ¹¨kÈù1vXã¸YMß¤h¡a„óRoZ`³¥¡•9ar€ýO¿¿CCœ
i:1®¥±¥'{w#±Jò M*»ú
É†5^fqBÞrØR}÷à¡iM©°˜˜,²~ú»ÍÊ›NâÜ‡oQ°vÃ°&ã~ß²~
½úê~Þ¼ÖDˆKjÑ<ßÅk‡VÁDp-Ÿ©öØ/»£ª¦ÐËNl4­…Á![¾3JY…ã:À0‰Ðpý®yM.ÙZ¾¾e\#À5´µÈk&5Â&ìJYmkk¹?Ö¼
‘I¡š˜ž‘›,EP²9ÁZoÖ‚ZŸ`Í£}2¡MY–lÌÔëSýÊLA“¶‘'#ç÷ˆ&Ž
‡¬aY\Ë*-mx˜…wŸwé–ÖT±¶¹é_E(kcU’Û§­²g„ 	¹¶÷qÀ#ÂÊIûÁF»¢Ä›Ò"­1ïé±»$ßêEþ”Ëœç¾k×2Ôr?ëo‚n5d° ­IàZ%úÁè¯ªÁ­_‘QgœÑZœjkè`YC[ô
„µþ\5S ÿ¤V§£LM·G«d[âŒ5GiZ¾Óid.Ü«£’ÍL¡TÕÐòhÌéiR&ü(n-fí‚:ˆŽ1_v¦èwÖ¨•6Æ€©v½ƒ§sžÙò±Z³8UŸŸŸV&yŒˆuf±ìBWôT¸+@¹–ÖnÁV\k1PÉÛlác‰ÑdK°¦YÇžMÌ/º-83féo„i]Í×HŽÙpÉÃÔ÷liÇŸM!(žk”¨qoVEkÕnGVûÕvø	Ø—®ÝúŠÀÀÿf9k5u©½äsá{šñ:ÉHsƒ:E°&ïVwï˜ÄöƒüËÓ	íÛ·G_OYí§”5>l›ÜÇwñƒÜ¼IUõ]2ð‡ôÅ–¾æ8µVj$Y—ÃÏy%ÇM…©ÍøJhM&Ý©²ö<¬Áš©ä=€µÝÖôØóÙ‹½ø™ã¿ÿ?|E¢¶vY¡âh¢µåõÉq9ó_½¨ùX» H-3Ò}íâ‰µ6°¶vq¹}uùÄ‰òä'ŠçFLjÊ6¬½œkf'œÎÆ3+a<?š¹&É‹K6UÊVËüû¡51¡~V+ÓëïÞ]P—µ¯!±é'€5ÓšWÒÙ.¸x	óüìÒp^ÿ€Zµ‚PW9ýÙi45àŒ:jL –ÊÍ<YÞ\yïOé®wàèÇBöcIjJ®TaA0Úhêùã×~{¶ómHƒü-åK´OŽ5k?\ºý2ö"/_z½¯¿¿°`oe­àŒæî<ÉÄ¸Tbnbþ(†Õ¡kõI*ÅÞY„È®S²Ð£z,´¸Fy=²ç|
OBv\s'!+jÞ‚5Nñy‹pÚ°&§f¦7U*œ¤“Û"›Å9ŽWÐÒæ" ÍpÁ’]³Ö%AÚGD±ÝÙ€K€mL²šAÍ¦#ìaz„Ôø¹ˆwY3‡æi¸£šµ¦—òñä¢÷ˆÕBÑ~œOF‚‹p}
ã•”±Ý!ËRó±îð±mt›•ÃoßÓÄdRL©UsÑš–d»ŠÖŒk÷·k÷*•kf±k{øÓÄ"4[Ó…ÿQ.r9Ö—«^ä:l9k·‘rŽRÒqe_–o(Ë¶Ä¥LC³™ã$è²>~PKb;ùÑ­—¹—Âik<oÑlmuíÚµuŽ^¿råŠ¤5‹k.\sˆ¸`¬x¥dýƒÁ‚—°Ž…ØMÌf¾‹fv‘˜!Å1V¢I÷uwKf6ö5hÊ†$'5M[f568…ó>Á],¬Å¥ð‚è,Q™QTKi}mÍ´æÇãÕþÝ¨†öÖ¥«k¯šDvYáœÛ'ÉÍP44ž:ÍËQsRÉZÔÖà±ˆkzÔ¼Áî¨ªqºâÁúlEnÜªñR<åƒžb©
µÑô1nùé"¶ öñÁþdˆH.dìŽíðøTUS¬Æ ½$£’Øÿ¬Èä-K‡F¶Äªß«$Wò¬¶®_°†¸FÄöØ<´P8òjÂj[W¶®,Ç®`¨l—š‡‘.nãVˆ’³‹?Ô¦Yxõ–³dAJµûX–’ÜTÍ<6á#ü÷ä=øŸ8ÁIrÑAi“öl gyáîà6°ö”µw7nno.P¶f8#´ôZˆæÖZ2‚tLÈÔ8bÛ¸®é|Œ)˜$g¢¬qûÖTÛªoÎ¼lQ`8Ilô5³dJ:#zÞ˜ 21[±ˆ7½J¿UñÕ¯Ý=-áÉT‰)³WõkÐˆÖšÅÿƒ5¿mIÇgÍ¤[j@mÀ[Mf¾ùéF¥]% 9ò™¡PŸZõN“º.ƒ‡Eææ.`ˆùrn‘ŸˆfÓ’×ðûïäyNÍMÕ4ÁÒ¤å_Å]\„N­üÆÌ|­VÐwZš…£¤\'±í:­XÓ¬éQÑ~YÑRržšß(¦™©èO¦o½wb]5¢žo%+ŽõúØH‘hj#òd¬!½Í*d1Zë´$’¾Y¶»Ñk/¿¼`í.ºÚ»öÑ¿yë2;È¶KíJôÌ¢µIåÃZrµrKl09æb‡”\®xŒVãšÓÞø³zb§˜²aíÝm>úÖW7‡w¸ö<¸½3zxX‚•kVÖé´&uVs[ôIaÍ[Ý¦]Þyîa¨ÝOú¬ueAâé½Ã·*Ö,­YU;ò&¢#{°¶{ñ_é0"ß~KkZ»:Fþý7nhÅÂ´¤¤z•>kÄ­°Ûí5üEÚ¨nhníù«‰UÁZÌƒŒ¬¦‡yÍ°vj¾V¡öAÜ‘öõô4›L& ¶*¬öµ~ù•ÛÓMÁó‘­qËÕf³}y}ç]®¢ÅH˜\¬},h3¯]:µ4ú›.Ušåñ&MÚ–*øS¨Ìo|öÙž¾¸!ÌLO×jüü¥ÏFf¨c[¼‡L4;¥V3­˜¬©=6‰‘÷þy…¢"fœ³üÅl=iÄyx1|ªR _~ù6î"—†'Ê•Fæâx!øõgò«‘j_”aW:ªç­kºíü.NÁ2ýìMðØò‘§.zæÌ$÷Xâ¨F`œÎ{qÕE$$¦~7Êš\Ä«Ñlñ5)hÖÖx_´wLhÎ:Ñ·Å†µ¹9r"ÖŒl¥°¦°ºæª5µYcšEeÍ¸ÆPãÁ0˜A’wÖS’×JyK¬—™¦ÉÌaVsHc›Gˆ.°JwÏ¤£Zsx‡"ŒÐöÓ¸cðõS÷Ÿ¼òÊ‡¥Xí<=Ö€µÏƒq¤5Ô¶T´¦®Øé‰ý[ÊÖ 4”§£ãƒ”¨	×Æ¹Z<ª„(;„]\Æ7<—[ZÖ=ÿpûµZQ­É°Æ_Í3I±åÊë›G+6fä9 a³húÈÿÁ»Ø³VÓ½!ÙV#ûËhkÀÚÖ•ß‹Ö®R¸vÏ…kR×³–i‹Ÿé‚W:þ,lA_ÿ˜žàG<öâ×¦6¬«9{Qµg.EãiêzÓ‚™aÍ¦[ìæ‘Û›B<cgëo² ƒëg¿4ÁÜ¸ó)Ek!’€ÇˆÈkÝªZš	¬!«)^‡t‘/ûÍ' áL¿¤l­Kðò‰*Å9aMêšYí™¸¦E| ùPºœamõ™Š¨ÏZ‚jpÛÓ¡¡ïn¸×[ªåYØ‹aÐkŽÛòéª>—ØkÌh~F=Q,«wV¬þÃ?»\~V d-Ë^|AXŒ–ýÓÊ[ÝS;O-{ØRi­K\ãÁª;Òç.hÑÔ„±F 4¡÷µ`Mõ=ÄÄ8°Â¨Ü§.Ñ“eÃZï¾¤¶mM=Ä$yƒÙ}&(ªÕ’4áÐQŽea8ÎdŸÊÌ °»©¤@-µƒŒ#w7i‹½³<Û­©%d†#»6éÝlq+]…‚zb>9iš„ ê,Óåa—µ.»KÜ¸`M¾ýª¯Ü–cÎ†,ËC…ñ×ÆT`mºù|¥ªP«ê"M”ÑF‹B3t¦¢Ò6hÅF…š°¬ 4+Ža¢‚ þ{[@k,ð )5œ.³TÅ¦³fÞ*?ÍMå¡S6PÊÃgLT&ƒ</|k
cE7wã(5m¤n`·8Mÿìv­˜Ÿ'fÆ ;&?W,OÑu­ ¸²Õ#ðiÍ	‘i ¢%·Ü›ôÙAS]3ƒ¬FšŠ&Åj¼+ß)•Ð`™šºÚ*ÍŒŒØ²8Å¯Zj¤sô©ã&,© šÂ¨¸Î#V0¯äÊ£ÄoÝA‘Ò‹^ÛÛi{jé×Ê9MŠûšØ½˜ÞjN~‘³Òºº°E ¨’£«9Æ±íàuûvjZ‡qtî^âÃÝÞ¼ykáàðöö(úˆhb¶£2†Ä’8:HxŽLîƒwuEjs k‰kÿ%ÚñÚó°¶›¬•íy9ZA¦)<÷Ì ÷b/þFDj¼€5–º•ƒ&½G^=¶®8\nsïðè¸:_Ó·þ+'Öä0rñ°VL1et¶Ç××®ŸIa-ÒšE¯ÈjÀZ;W&µ{`œDje2x$·%¾îíi¢ˆµkJƒd~±»;{ÊÕÊ5.Î>Õ/0ò ±÷øŸ¶c<G|Ìï¹s	¬½R~åü“W˜Å2¥öòd9ÓBÌªo€d/qGíw_`ò0wÿÐ?¿7b·~±12W,¹C¬ŒñFY[yôh¦Î$3ö>™O!Ò´FûäèyéÔíÛ¯ŸºtêÔ_^©–*Ëå~
tíS*9ó£˜ÀZ«¨ëMAºêf$IjÁ´ô¢ŒÇÎ!ÞãJ6Ã¨F £½©}¿àæfÚ$B.Ê ä­99?’žÎåÞ!¿Ò”¦¦¨$ž˜Öä·ìR51â¢Ò#gMbN†îý—ÊÆ*á5·Ä6±ée?H^ŒG¢$|Æ¶’ ÝnÍ¡%]±ÌÖ4“a£RIº’ç±nX#¼‡eÂk¦©Ô³_+CËî:5HÍ«d‡Ù-
l/ŠkÝemÃ÷ïcÙ¬ýËý×e/"8s¸#öoHùb0B&
ï»¹³##eõÁ&Ò¥ã¡4M¾êq«Û¨ìà"­Ú^Z[æÊÐ®åª\o2ú	[Ñ³D#`
ñÝÕÆf¸1ýèG§:×¸Qši´	—aÑÏní°¡?CQÛ7ë×O\×~ïºµ®\ãÁ¥r"{IcÓóùG÷fŒîSÃ3ÚˆÎâ£+’Ö”Ä{Ò–¦BÃl		Ê¢“?#Ð-­ÎôË>#P+sšó(%\·aø>®×diÏz–]ªšÃ¨fV;sfõÈ3RÓÚ
–Óþx%6‰ê¹{ ˜°ñ¸¸)yE¶ðè¸ñ0„¤5‹k©¶WB8@í¤æ¬	Ðä2r– é»FoìèÜoáÌò]7­ÅEÂ™OM‰|,™×ÒLHVxõ³'bªQMÞ*O1¼LjÕ9¬°EZë‰°Æ‡§Þþ)¬±qãÕ§Cì/_w¤.#ÕþxµžÔ]-wÐâ.fö5M=ëfZÄÐ»B? ¸},?¸‰`òu/:“Û¦Mdí™%|¯º6ãôB,mìÑ'8R=)®.#Ü‰œŽáóˆÃ^j	ªu+kV ºƒ;	¬©dÎ£õÆ æAöãñXØÏ‡™Îü‘Z°åÐ¯BN”9Ãelæ4œ¡|ã¤®e¥§ñ†=¼õà%R#è| €È½±ÀlÃ_+(Tè¬©—g1“¨j’ýp;®U—ñ’´rÚjpž+Ø2ýs±™mWš–ØêóÓÓBsm¬8ÕŠW¥úéÏÆòEé²Eä²ÓÚ˜ƒud«Ö¬`ß)µœ4°Ñ™æ³hËá!­ñ­ q ÕÉ|^Ž[!éÕþ=º_èz>â•	ø¾IðfåÃÕ1Îî­&¿JÈf¦dÂ{ó!ì‚c[$=~4j¶D3ü9Ð ójÁóÑ{Ld+3ïéÞì
%Ô5r?kS#ù7ž·Ñï6îO<ô)ZÃ›‘ cëmþúªüà›Q¬Møß×&¡.^C¼è<: X#TÜ,¢:Š4öú ÒÚ®ˆà¶»dí«ø©žs6eÖ>¢%hä3Âcb85‰ë˜§â…”Æ8u5pMÀFÚS—$AKìØcZCYëf59A"¬íù‹ìÅ^üìEk‰xè‰Í{7Þ½!X›\Ÿ\–/ãär›œÇ
J}ÖÖhŽ}øâã54„ÉÞJ{mëúãå;ÏçAR±æ‹^Ö>—R9Sž¤$vwÑ‰qÛú×rY	kXšèš£ªæ‘kwI§àD°æ÷v_l5¢N*ƒÏ	qdüáÉxÞù¥R…"º,ž"#+4Œj¹*XÛØ¾±ò»÷dþHº€B~ ó¡LŠa÷¨Ìh„$÷ãyNûfõ!	ŸDi!šÕ^FVce/HòGö—ZÕÎ«‹Lkd¬X"Š°‘’SÂ|j,;Ë`€‘š«)ÿË¶ü„D6AÚI]Â’W¬ûá7`í-m-¾µ¸¶qÞîã~“ÙEôµÐ?[¬¬Í‰àZ\tŠ!7ÐËÂ×J‹ Z©_#ŠØÛCÙùë4¨qLzO¶X[Y³ƒHl†=²œE$°±}`LŸöW«×é°¦¦ä°š{A×k™Àh}­_ ¶Àq‰³ˆÆ!º½DâšUºÓ°ÆvJo‘èRß–)­¼þÔ}ð{ÛÒÚççÎVcòÔO­ÌüQÖèˆMúáÁ¾QÙ¨¹è:1Nöã$E	Ü×EZã*Œ£\vi÷$éÃHk¤Cêâ±ª5=™ÍL¬cøëq¿ƒÎÜ8®ôG, š%5†öï_g„Ÿ?–#—·8˜Ø¨àûú+_~	­©nM¼+×îýñÿñìE6;®5ì0ú{8…•_?ÆóyvÓ›Å·”é’µ”<òßÞSašÉËÁ:¦6ZUK, gn m!.:ü+SR«ÛØ¬1äHjfoyùÆ§
óš!y%&þ]ë±Z-•ÕkgŽC»IÈpÆ[;AÐ‹Î
´9dr(Â±¸¨JS`í“3Ï<ìN†´ÑHêÖ¯z5û@êŒíîQ›5ÑZR³öôé#ÇžÆwÖü|+	´fé·©#6¬é½›B¦²åÓ¯„H­SPSˆÕV7÷¹)61„É„¡,P™mC€µèÂèŒ¯ /:0yõé!(Yû¾K[× ¶4¬ªéAl™Õ®ŸÈÈö	…fûw÷WsZöx,5)‘Öè÷„§"J‘èTä¾‡¹#"ÖÑÈ’¿$¢õÇEÙ¦#}f5Æ\:onÄÎv÷ÄÞ-­Q$­Øè•¯¯>s˜‘€Ñ¿©Bk¿tÝî(¬¹±@’	)‹¨&@ëgežãf4Îˆ=ú-"HY‘”©7Ø‡‹lÕCÎg9WžÕ­õ›¬yhœÁ’Ô£¦ éN­Ö#9ÁZOO®Lñ™ÍêR¹ÝìGXÃñRù”…ÅÙRFožÉªb PÒd˜Ÿ‡nÜ/š_ÚR½Äì%XÛà¦#F%ÍÂ¡¹—øµN‚;³&¿á‹Ô|Ms´PÈ3!PVmS'žãÎ84Ã,WâéRƒÔV/µlÕo/Hõ4¶_¤6Ép„Zç§õã)BH[Ëk‚‘ÖX6EŸD‘
+è^P¡t½3ßlq7väOï1•:¿cJgÂÚøl¦6]‡ô2·u¡ÐäQ·¤X;¶€ÛÇ6×§3½¹¬a½ÏÂZÈ€•±ŒKÖ&CLNZYSa™–ÃàÛèë˜ó9QW3ª¥°Öý™<É½d†ZÞÜ„ÇHƒ´h†…2`1lXKm×È³f\§µá£çÆ´K¼ˆç`íÌ¤bÍÂšX­×PÕXìù‹ìÅ^üü°ö€´èFˆ³7Žà:7Î,™%‘)âÙÖ¦×NÖ¸][S_àÃpÜÅ[[×W»`-mŠÒÚËî·kÜgeª'"“»²ï….Ájµf_oƒdÅ¬‹¸³‚µÜú~wùJë«3gxóg]©Ï™Õ>öû‡¤Äµürµ>Õ˜Fþ«f{2õ1RÙù•Ah§/ŒWðÙøwØTgÜ™ÒHz´´67¦þjhMh!#M5˜%KüRÏc>E+—Ù·ÐÖöÚIkÝ°¦`ý—/ÿri´¢†ØEÄ+]qPÐOgnü±žÞe'CÐÒZ84ë‹PÄ4ríÐÀ“nk¬Ãfè¶¹YeÓX…j®`s:%o#Ç}è?’·m‚µW¬¹>[©%³æ2üMZ@šêÔZEÄÖ`¹E(MX—­Ñ¿GÁ[î‹®=c5îƒíÐc¶äÉÑš“µò°–é)Õkµ¯™8z2=ÖBášÇ¬Òˆ©Œ¦¤•r«Ô†ŸEšÃ{¹­Ö’-ï?8|ŠŠ4êeÜžr¬!ø™‚ÕØçFkºpãšmóþýá ôÑ *›×Œìë2Ú¬‰Ù¸Ò¢…<M	ÇeÖç‹ÎBIÆ"8‹”š™Bžb÷·;Gþ»;~üÇG ,0škÖØ`ô£›dÿ(lCNcÃ,çÐëÖ¿üåË/U·–ØŒ¸ríž…ò!õàÙÑ ,´çž÷Ç£!ñ‰"Ç‹Eú ÅRËˆ”Òâ‹3|Ùé•9¹;FX3|Ù5Äný„6|ŒÞ‘Z:ß‘s•ñ«ÃÀ_Âigð#Ùe¹!Í¹lV»/X‹©Æ5ž»#•Õî$¬öéêÃšÓƒYˆ»¦aÉ/<	aD)¾ ¼…¶Ù á†PÄÜÉ×^ýäÓ—IMdQ\3«…õCí2ªÅøäáÍcÇŽœ5¬)Ò}ÖèŽ-XK:U[?ówÍû.Vc©Ý¤A†O–¨·¥5±š$5ã›<¸ÕˆMh,˜A¾æ?fØ°¬f£
+‰l36XfcOÚlÍFÿÆ¿7¬¥…k€´¦²ÉÄòj*«m]íK`m¿qLŸ²u·VÏ¼fª)öE£&œ<DBRšÆ©à¶èLoÃÇqu8”QÇ¤6å‚,•UÅØ¤+Á±	/¶´³ÙãÂÂöO*k)¬†BÚÁaÙBúÚ<v?Vïc–¬ôaŠä îÎ(øÀ@k†5Óš€üêìÊ¬Ëer7éÞÍ^ßñ™@Bì“øFÏ¸ýÜñkÒÊyâÄ²Z‚Ëãqz¾’Í!-góX9Nå3dG*Üh­ ¹æ@®°_>‘Y.,@òJVÉðÏÙ¬Öz@›‰æðr.ƒ}&×˜¥œ™fØ•ê…{y•­Í×DX%Ô©ÎiuŸ.BD…‚zeóýô÷õ(HVS jÝrµü˜¼;ËÊ^‚ø¢k,õn|Æ,ÓWBg±j2ôùcwW[9Ô
ÔÆ=ÏfXSd*ºÕ¥¬ºÚwÿöÎïµ­3Ý÷ÎõáÜm°cì‹Ü88Ž1ny$<ÚÆ¥I–1Û*²â¤0Å­Õ´©Óüh{š_=Î0·49‡&nRèL˜$3W-sLHº7&Pr³¡“!°÷Õüçóý¾ëÍ²’r.woüHZë]kÉ’ãØz×g}ŸçûZÜ1©9Ÿö¿±Ø]Æùû²ú×a]KÍ7xéÿ¾§«‹ [)?8Q/åþj\íÊZ´‚¤bX[½'7È5{¹¬Iú©[_óo½ÕìdÌhÜ™ñvÓŒ¨šHkt?¿¬;u5£š£yG67¹˜x“<Ht¹ýC1)d„×ŠýCGˆÑˆh)­…ARêliÙ÷ºYí¤Æ-­YK…µ»ÛÑ_TKXPksùËnÉÚnìÆ~ü·ø‹ÿÍiŠ3VÖø3Å©ÿN†dV‹¦$`Út±¬]¾Þº†a?ºšŠ®k“_þðgÎ…Úò %°‡Fù,Ínû%eŒNÕ*™ñå’ü¸æÁÜX§,Æg+RÖøð£Š=Š\µÊ}mõ6¬†KÑ‰¯#¬¥´ö®˜%¨1::}j‚)‰F¡QÃþizB—Ðpî'¦ïÓ³vie˜
èJ…²éAl×A×e×û÷Ëm„h*u¿Vç¼º>6V\¨¯~÷·ïn¯Ý=oZ‹vOB@kÿúìóÏŸ}öeGÉ	eös^.êRQ!;H×ÖðÚJHT¬@3œ·eˆ³]³&xÒÙ*’›©Î°ÆŽco‹ÈT~&79±»Í¨›²7z§IXS ‰k|+ØBÒöfnÐr˜’]¹æ®×¿Ô\­FhùÊŒ9Í¢šä4ÅûÚf«‰ÑÂ™Tv»¶6€5šÛØr%ßiÆØ‘Õpp¦²»V-uv¹±Bgk¦µHnÑ»? ™—;•5+miAšØRð
´Æv„5Ò-?xB<ä£Ä¤›©	ÖìùÉÇÌüÒÚi$éŠ}V'ndŸlbß¿/ŠTyÍ¨Ã•ãÌÞ½Êa: ®‘ŒÎÉÜc‰Kì–êJêèÌÕIØ) 0N?~¼´dÊ]Ÿª¾3ýN´aùX+™ü@jˆnl$£}? ¦©sõ«“'OBkG9­ÅÒµßQ¹­ý/î÷6ƒzÛ¿ÆÈqÍXÄ›6ãZC£ž!Ž@8cœRZ¼±ãþBb}¦‘&V³ŽVÎ„tAQô½)l),³éHp“4¢f—*,0q˜5êÞ‘W/„ˆ>#IÏµU5émÑY$ÕÕkbñ†QŒµÏýLGBG^“¤¢'¼f¾{-5Ü|ž'¾G[36dƒÕ‚º¦;¨fgn<!…5ZbÖ`4âÆÖEŸE5é†³ÐW8msïgV†µ+ñm]¸–vÈ¶ý#†;U5î)¬Éˆ@+ç;JDDà
½ˆÙ0‹1&¶¶ö†®r-}‚MŒ?"k©¸æöØ6îý­D5£ºšQí«GG³{c„^&ým¸Æ.+lÙ8j]bã£ôŽÐª:8¦æcj%mKôQ›ŒXcUj¬8ƒî%×Þõ_°á=”Ãô„°– Ø>Áš¢­fía’‰þvïPò¥¥‡Ž,äær4ÞYÒ9ðùQvÃg~,q"OÅœ 8Xº^¼´÷»fK‰ã¨ÜQ 5ußCzþõÜòezh—Õyíòl#K“ºÜ,æÀR³XÏaÐÔø9‹À$˜¡¼«^™ÍVæ^ù¼ò@%˜©ÙMèË˜&T8Œõ—Gsc³4¾fB)1Íß_fâ@»¬ÁBù¥éá«<d6;«tÉiêÔøzœNÄ‘…ÆÔ¼:±–*-ì——ÄP8“ÐSÛs¦Žf¶‘¿aÍ}ç	ÿ¡¹–;i¾–ßkÓ–&<°Íý N*,­Í3¡0¿®ØJ¾«&nÎbWØ”µ] ¹4[¨O7y0Gkù©¥KÎêÇp„^lù\#·ï…$Èvý›Ø‹Há‚Ùîºw{C­Ê³I­K™•Vki£]„%R»Óäe|HùòrnÔö8ë?D]Í·ö,H"°šFÛ>±ä¹ydÇž²ÂLÇÈá
µaÖSXc#,_úL°ö™ÄµMÄö"w¯Üå«e-s0´ÄvÇNZÛ-YÛÝø9F¸P|YÏ(X;¸¦ªM†f+õ:|¬Uç§*ËÌ2—¯]¾v}Z»¶<yô‡ë×.=ÊÔ½|·]Z³²¦a3È}úÐÈ5•Ül«ºè"!¦I½££³å\µ¬±ÏîÈjMUi­]­–j³àÚùS_'°v–Š1`Í´fXãá
£[_> >»VV
õ¥ÖQÖV¦í-9?Ï|UY¢„íþþ[…Ë†Ã0š¯»)·¯ÔßßœÒE¢"=‹uÕ®ÑQ(–²7òÃ‡Ï|÷Ý™ïÎ_¡×Ú7
á¢aJû×gÀÚ³'ÏXÝZÎb
,Ç+ª
”€H*f·&Uj8©!5.`º/ö1aÐ¤4HwXSæØ[’ÛKÈãª?3¬™çìö¨/‡ç€¬ãá2ùq^H 6 §ôMNütssCÑ9™1dDâÉåÛÏHCËóZY®Z'‰MÁæÜGV„hM\'º5ŸQ ÀØCGÈˆœXyxO}p[l‘šû„×j‰MQ¼³[;Ò†kaØ‹DX‹`ö¹B°k¬yO{c5HQL/ÇqàH_S&'!2+k$>º`MìÏàÓ‡¿~“gÏÒûÂ‰í}=Û6õdø"÷Í9@/ìŒ²°ÜKÇ¹©kn{;bum‘²_m¯«»Zº~…1ZÇ>^:<<¨LRÌ†—Î;|†%a™XKâŒmüQØ,­9[™Óˆí“„Äµ/c.äoƒº²!wÂX²’I¶?â0.ÙÁÀÆ–¹Í@ò¶i‡YÍbÊôqc‰»IsëD5Kœ ƒÍ)ÆýÖØ´í#{0d‹rZ¯ß–J¬+Ö•øM?xá”YM´f\KCejáöœÕôŒ¨«9Ö\sràPßÝ­]ÆAì=Ø¢o>Ïv2ÿ¹X{U¬–ˆk	99#Q÷x# )vèVEhÒÕ¶HdxãCXmK$Š]°’i_²C¨%· k;X{îà/…ÍœÖÎj„Ó ÷F+Èmo›Ñ’…²á9+^=ÖôÜŒuàiÿÓ§Àš¢Ýfy-½±#ÕÕ¾úT›|4)X‹a'‘±°F„¥¼ ‰ÎŒì÷5hZ ‘\‡r
ýèœD·uå6ì2ùP@fJ<dÆêÊðdžæ„É{ÎÏö[Y#^®YãøÍmõ'Ö‡QÀ°¶ÇAª¶´?FÙä„â‹Õ„üŒg–öeÖÙŒlê{-ò•jeðB½ÀšV`!¬÷s³×–3å9,£—ËÎ%-äª€T]<ƒû>ÅZÐúR6z#@7õ©Êââü4°Æ0ÚSwwÇ¥žÊëã3S	…¯_™Ÿ8¶0Ð˜ºoGà¬ä93_ªª'$*™Œ}›c‹‹¹úô:ÐÓh©cXÇñÇG%eV——yÇa½!_Á%É™"UÓâ.Á¾Zj¹íë!EÛ!óˆÁÆ
µåCjGw„5åjJc+Pöq”wÈ—H%GÎ“ÉÇ¹î:£F¢jÓÍjBÓÎ0A²Á:êÚŒÍŠ—ùÄ]$cpÍ¾Ñ›Ý-Å`Øž	«9#÷þßß>²vdÿb+i†´ìx ðÎØ;T-ŽªfÍ¾S½¸ÆŒÐ#bh¿ÚEXbÛùnN‚ŒošÂwèð&5•Û_Ÿ@NÛøZ¾ýÀZj‚LìÛÏ*jhã×â´ÆÀ«ijÊ¹s	¬éö$4ÇNaí<°†$_`T#šÕtrxð9©IXÛm‰½»ñ³äAòxÚv†5{BÂjªY;úh’iƒ,Húf’Ù EXãtteíùA^þòõY[¾ûè‡kW^2ï £?{ýõ^ ¬‘Â*•®»=Vä+œS×µY(ŽÜóFN¹ß*«fvZ^Û¸™­—0ÀºJÑqŠ×Æ`Ä¬änØÿ›×—ËÈëo€kp!­×nU¸¨Ø÷0—Õ{j63ë‰gžæjï]º?EZäóUµdQàóëò«|ws0ØiL
ÃÃ®±êhNLl½Z}çßýùôÕ+ÿržPÕZ
kŸIX{}òÙ³g¬'¡ØÑ,Åñ…=ÝJzÔyG7]p\Qß„Õ8í”&×.y7Î¨Ý§·Îð"Žq%Zó‰­û`ûD•nŽˆ&EM`RÁxœÃ²¶-¤:‡âƒ.‘¾c²º[ÍoŽ°/?wV1h`u}º;'’‡†5B˜F‚¨,F,¬hùÜûƒdÒ{¸äS8?ÇRžÉ* Ài˜€Öi±Ö‘ëH £šæµ#ÌLª1†1ŽÁ¡(Žé‘ÆË^"ŽôiÅ^mÖàù!÷œ$ÙQ‰ŒD;H‹µš¶¥¬	Ö˜¼71NÆƒ‹<ú›Rü¢t—LïˆÔ5ù2£:/K†`ˆåe5›wTjux­£>-)¸6¼R{çp~Z°öÎáÇƒƒK‡-i¿sXT†$¤–{5/b
¤¶U};D×¾’¸ö?„kdCâ—.¯¥D^„º.^¿»Èã>;aÞéãŒÇ“8àc<EZpÓ&Kkæµ­¥¹V-!5¨ÎrÊú1,ö)YÌx&0s	fR¹æßiŽ
Ì8ž8D·<6¥BZƒS~$À82¬]€œSqMñÈòšÃ’ÚNc‘ïÚPíŸO‘šfIý®÷ÚRI˜Â%à"zCÃæÙ	·rrU3°æ¶fT‹-×t#XAQ/Èj<ý2Á]DF”2›S!í5Cæ$·å¶îÇˆç°Ë°æ÷õð{:jÎ€LQ­Öxçy²Ökê'aÿGjpd|uËJ#¤öôéÓ>ƒ]×¶mÝèÚ”µ¶TH‡9í¯¨j€[ 5W«)ÝzÔkýÑ¬¿=¬¸‚5ç/f¡3âN—Ì0dÓ§Æ#òYÌv&žò7ælò÷°/ã¸«H•I*?9èbEŒiƒ}ûl´+k‘Õt5zu<¸§Üç ia>?zš¿9×Ò9ø>´É4J†´ÇÊœ<qº÷Guà¨c4ð[í©f<“®Øå\v1×?ViáóUi]œÊQÿÊ¨³QÕÕSR?úKàI+°‡°²æhŒå§äs<¨TÉ
µoµáb'`!Rœq*¼ú´Ù„¾­Õ–°‚²i/Î\ŸÍ#­Õæ¨ìFN£½Ê]meå•á*W$ë5}ô;Õ‘B¶á‰&R—[y'S,¨ƒ˜F>O|ÄBôë/zLÏ4ÑÍ”]ÔÁHkš>	ƒ§a(MO$‹E©…5ÞwJd;µÇžøèp­'Kv4›V"GÜ{>iÇøI_[Y¯÷—à´	f§‰Zµýý)=½œI"¢YíÞ¡C·Yêÿ3›¥ÒÔ/ò»Û«iM‡zì	ÉTÅS(2q(—Ñx–Ö«/uYK°"ð‚¼ybã€º`›ÐVf5ÃZ^:Îa_œ?Ó¦IüêãÈj¾=‰%k©½È©#|AH‚ä¼ Û{¬)þá¿þ—ÝØÝøO‡5þU$£•` Ô66x}$`Ü)÷Ë-úÖt¶®9÷>¬áÉ¥>46bjêê]ÎG^4ï—âÅ]~±Ú8·$3–Ëôæ°{Ì¸R	a­QAO#ÆŽ*¾ûÙÐÂ¤Òºº8»zsõF•Ý­Õè¡{âMhí“ kçÎQ³öÀÚämÖ¬¯=¹8V¨”sN·Çbïƒ¥‹³³Sóø‹Ö/½7\•ÃH¾ÁëÁRsö(ÒÿZÐ®±(Õ‡•<2V~eŽüÓW¾ÿvýôyÃšXíÝ‡7Xûìäë¯¿ñÆä­[ÏžM¾±ot™<‘nÚaë¤‚¬Çnš¹Ô]K¹1«©šÐY(†Œn´ö	d!9’óC°ì—vÊãtêX¢§	ØÓè~-‚ç¹ÝŽÑ¦íØ[ š®VG+[ÀýPƒ !¶9w[P»7‚1êóŒišLYZ#àµ@hÞ²Êæ´ÇHk^h,åÒ`Jc„Àu5BKT“ö‡¥‹éZ¾ªÿÔEë¡_FŸÀZŠkI=4ãvXKSÓlËeÜ_Œ4÷±}3}FÜ¸fo­‡ŸlîßáïßÜ„Àé³–5kÿúá¯?%Ryè±Ñ%Ôˆ1ss–ÈhHYPøŽŒhž¶Q€YM‡ÆG5z>QÅ‚Q¶~õ¼~2&YŠÖp€äGCÅÚàú‚5ñZH†$¬§)’±¶ÒÝkLŸ7Oœxi\C]ãÄØ¼F*äu€Mîœ={™Ü.2ö ì¿˜Ž¯'OÖÊ_ÈÈÄµ97î‰Ä&TKiM·‹2”ø€ßÄh)b<“¿jÖžÛ$º#9Às„–‚«pÚÇˆÁ †
°¦-ÆÚY"ÑÖŸ©kðZ{Üu¨6YÍ°£AbãE÷Ú7À…3B$BÇE*H	¬é[àü²Yï#9ÀšÅ2"‚“rÍkâ¶j)ª	Ö¤ª‰Òìé Öœ¾¡ k!¶¤fM‡„rB+bÀ°æ°Z¹fqh'µ4¶÷ [ÀšÎƒÑ
ñÙÝÔiƒ­îŽ;[}‚¹×¶ ¶ç~#e)QíÕC÷ì5¬Ý¸Öî3¢lH-w°Ú—bµÏ=:¹ñû9º’íy™Õ"¬u£ IjêèÊð÷Ã]<„Å°v'#Î‘#+Xdw~äì,rcÒQ<îðüjÂ U°ÙÂìç>ˆ(ûï=ðD«½¤¬1½Ö6NÐU#¡#½	ƒµÓšÄ¾Œ»p[ø³)h–ÍFYåôIÁ¦“™ˆ`ÍþeÈBº K©láI~ëñË£e5Ó†ß:
Èd•Êt†yI™dÐÎÙ)RE¦Z­Ž1Q	2Q‰â®B£Ê•O“M_iª ­åJžêìÎ•³<)ƒÀÚTµ´À‡Êâ¶\Eë¯WçkÃsPVQÞ"…F®RËÏÃ]¼p‘yfxZÃò?Çä‰45\j?ÊŠwÙÀ+…ç9¨v%¹’Ú˜äH“ê
v¸6¬qE±aMÖDgÝ‚µ&[Í1Ã[š
éjJz¯N‡”™Š$¼¢Êàœj¹>Ý,ØXo~*»›ÊØä	y2 );¯ò­,­/åúÁ<] £ÛÊ{+5ðV5xcû]6–ã6n20ýéë{½‡à§ÑÌÚš¼FÝÿZîÏ3_eÉÄ:®…ÜHÃZöS½=¾¨^í{#ÕÕÚìEÒ29U¬J¿üZ[ŒPmwˆÉýZ%„6r€Ã¾°émEj¥ÌbGò‰X-¥5ŸµeAžÿâJ—¼ Mk±¶¤µÈj¾í–¬íÆnü<EkÿñÇÓDâ.’²ÚÕ«k“ÛÀšm…éô«¶Q™g§¶#Ô®¹Öòååñ
²Ûµ+_œ?OmÙXÒt}òA«¡ñ.f5ÚJæì+ÑSFJ«àÞŸËubt5Æ4Roé‚)gó¤/¶˜¢n^)ß¸wój+±IºpA—Dk–íDk‚´É©Ù“¬0ó2Ï\6Uã£úþý‹•)T¶uÕN­\¢ŠmF#_X#	­ÞÄÙªç“|‚n¶Î˜P~$óÁ×á@–wVÏuø´¬û­}óá¹O¥¼P"Gµ[“·&¶¡7öå¦®Oå»÷èT„z®W×KùºN=˜spÑ/
Ö(Szˆ`–¼.Ò9–¡“1­1j€g´ì²!§ÁP´RÖÈxäµDepÜ+:“£’m†¹ÐÝÓŽ¬gæpÑ¬73`m˜YÚþ¢:³Ov¯7Æ²ièdP¶b$º+&f³ša-2šWìd„ø1ÈIM¬ÕóLôœÑ9GhY/7¡wÆˆ°Ö¥h÷Ø÷Emþÿ"*f;Sv{)üT-1Ó(V›Ôâ	k1¸Æ@¼ùæYÚ¬á0rí½›ÛªðæJ¦Úêd0@k#¿…Kû£™ÐpJ#ðWVyœÐ/sŽÈ×§Cï9’E¹å?œª>|æÃü;?^=¬ìÆ«±Ñšã4¤øMñøßkl;òÁ‰‡Ûq-&C:®Ø¸SÇöWðM g¾3ŒÂ~m§c)r¿=óÃoÏ ‹ˆë¸³Û®'R÷ù“,bù›…5cà²Ç™ÅÞiÒÓ‚Óˆígÿ7«g&6Ö&3v„/ö‡’ ¹>ADûCgß5­9ŒkŽpªV3ª]€ÕŒj‚µ5XMxàÈ¦‹ðDd—ƒ *"•˜óÄfè%fòE}OîSÍZäµS‘×9Ajd&~ÿr
$·S‚µµƒ‡½út+Àš+Ãˆ…iMª—šu±bÍkm[¼%f”y[©¸öS¤vŠÛöž€£pR· D>ú„x1üØ~zãÎ °vƒ,}ÐŠÈ¦ùž;¯êçç·†œ™Ä‹âšï?!«=â·4Óïžfµ´v«ÉQ$ØŠ°ÊêÏÉèÅ„p'£/3ÆõJÜ“ÉdËrABƒÖ(ƒyØÎfÜç,3"‹K%dEŠÓxÖØÏ‘í„Qíee-¦Ané•ûúƒ	«E÷¿0™Â¯a-“ñ~ŽÀp_6;Étjé.˜ŠèÙÁo„£ÀšžVÇ½€»ìïÜÓEÛÆ2=œ™)¢}Áù6ÍÒ|k‘i3×‘ãR$­Ñ€¨l—ÎO1‹YœDT²Œ8%CÿÚt­P@6›ÊS/=XênVgÑÃækrN¤¶[~ò)â0	Rï–Gªâw,HÆäcÂ>+l|šéÓÿØsÍ­¼÷ÞºÝFHÚ,AJó%¥ëÏ L¥"¥g¼¥%/þº€µ¢`Í-ÖŒdáºIhx¦°M+›,´_Q—–ýøCB{”ªÕkëÓõnYöSƒ7ÌwÕÜ[Bû,KZ5—åŸP»¿4²V¨ò¡P­X\o¸@.úz©Ÿ³„Ó’#å¦v}2×2­e¥AfF×V×ôoªƒÈoAÍÄ„ÀïƒQV”±±š<@¾ûz³7öï¨VcùÓ%kö9²qÛÝ±7ôëJ¥f«!ûSkã´bm¿,!)ü7ñ`¹CaK¯rž{=jjæµ'í%kçwC“5dµhI7ìvw‘Ý’µÝØŸ«hZÍå`míýÖ˜96ÂE?——g±æõ&Žþ×ñá‘¥/ðµÙVÃýÓÐZ€µ6iÍÄÆÍ`E¶Xoq¶Ñ!¾7CÏœEÔŸ“’½]³j²6+È:£F¥Å÷r°ã°–1ªRä	”5ÓÚÇT«ýêœ>rØ-&€û¬FÖd®#ÛÂ¸·Š´¦n+Kß‡ÕÖ‡IŠärÜ{t]›–c•bªˆ[ÿL©:1ÑhTEDîQÃªUž˜RV¦ÿòýê‡µÕ/þç¿8PÖhÌm—Ë'¿¢ÅÚgAVÛ?tk²w‘œ…=D³æÎÈ›˜øãX@³Ò½bµ¢¸×å2„ÍŒæš5ç>o¡µ½E~#‡9æ'é°h-ôÄÆ,DUq3X@)ã”K¹•ss<~ñ‘U3”5fRþu65&C¤¾~ Ij¤¥5½˜Å´$óQ¸ö‘Ó$í#Â¤XíÿD+InI›5°Ü C‚‘qÄ¡É…¥é¼¬;sªF,˜rÅjøOÇš5‡ Í°MûÙJ+ªwÚ9zÚÑ:Øz-5ƒ»"ë¥ðæ`ÓÏFWSs5Ç'›Ÿ
Õ`55œEú®«-öÃ³ß|®=¸·	lnî×ÅÒq²^¤£õjjæÞkÏm{%­neîî»£×i–Žíu][§Õd€c¹¾[+ÑnýðáÚ’`mmmûÁÍU7Ã>£À[„…‘•ƒ#¹Œ‚ëöÃOÆ5'CbãÐlÎŠÐÒ±WÜ_Úrø¹@{Äu^ˆÂ,¾éyE--·q\Ýz®e_"æ>’Ùi_c;FÚ¢?ØFú
…”+÷ÄfGä¶¤fÌv:ÇçDkÞ¬Ù¿¨×¢Ä¦°¢¦E 5£šaxWÖýÆ¢ˆj’Î$£±â”±Ž»j²X@Í
¥?IÃ"‡Ÿ:ÿ›„Õ¢¸Á	yRc¸#Î§ÊšjÔ”WD£}[Ù¶Ž YJk¡	vÚ¶;õ9w‚ä–_õ”n1ãZôy¹TÍ¬¦§­&\Ö' er‰©‡6]Å öëz:ÃŸ"ù%°6p¤Tòä óÐÁ~l"ÇÝè.²Z›¸Ã{¾BVûœr5Pí¿¥†2FV×mòpÔ¾Ø¥­²Û¬Y®êÌÇtgòç¦FlâŸ•‚IŽÂ¸_•bñƒ¥wjŠ`%5ÄçŽoÕˆ7Û•µ(­IrCG×§Ó‘ºb3ìôóÊüû…†¡lI{H´Ç¿i‡ßQ0Ó%Ï¾S¶¬¥…ÐšòVo
ë\ÅÖµxYWFe„ÉL³¤‘ò22BËâYÜé‘°*££Y"‡¼ÖÛK#42—³Ð	*cµ©5fcÅý6«E¶ó¥	æÃÚÄÌÜenJ9+-l~Š˜‡å*‹×Z”x•t-sâ˜¯ýÉ°
‡äc3\d›w+œõêžIã&Å‘õz¾S`"¼§òsÇì©ô”FaO¡@'8g56CÏQ¿lß!M2\ÂjÞå`Ñ_W«ÀšúÑ8²1V[¯ó›4A9Ö˜³‹B7ÒBK l6[]bŽç§PèßƒÈFz>ÍájëƒÕ\¡¶4E;’zÞ´¤åË^±ÉÚ¡rùÈÆÚxf¶eFB?ˆXrMdÂrÜÄ„$Åd#òƒTQ>Ù4ëˆj/âïý®÷ö=Päþøló~&-:Ùrˆe0Amsï5ö$RšYÍÃ0ˆC6^—°F˜×0‰%k©°öÅßß!ç8(k¯ÆvØºÇ$HÚ¬í–¬íÆnü<m±ÿ»þ¥­9®2X»ºfS›2½4á,eS­Ë|bÐä·u‘­VëââL…5ÍV.Þ=ÿEÈƒ„¨¢¤­ûCÐ·zß>	°Z¶¬t‘Lo¦¬ñÅ"Ç‡_¹2Çe³ÀjÀÚÆêÚÆ!&ÅŽƒ$‰Ö	:òã_Ÿ“{¿*Çp;yò(üt”™‹OêòE<«¦ïOÕˆ|íúåVµ@’ûRM©ëKÓäD¬sµ}Ò ‡a
&‘WhëLLç¡D†Š‚µ•Ï.UÿÌ'ÒEkï~óî›C«·?œ”yÿ-b’Ç³[—gsÕ1].ôS)#)©LÖfJ²Ü ä`"':;­!­)6ÃOc¬(^³z(YÓN•ó n!¦!¤I8Æ.wSë[ ¾ú¨NczØæ>¬Ár„=!™êx™/tæ/1RvÍ¦ˆ"cXM¹‰ª–6Å&\­ÆWØ¦_!XÓNij¾¢µÖ(©QÿcôWSÆ¿²]ëÂZ[§5¦µ”¯vÂX7­A»µÈ>Ã—\5Ja-·°:ùð¬@mèSñšúqá¥ñ«û‰â,Òqâà`{_×Æ…Mþ ö1_ÒÌi¯þ¡¡Ñ.ú¬Ù•nD¹Yœ4Ž(OÒE5£TÝ—1€¬)'t½QÉ<üLÔr­TÖð)ËN_¥Šæ&r®Y³q¿LcŸg÷Rãþí«§üJ¥›ÐÚÇ›)¯E`³A$Ulº	Þ®ýàw|«ûeÎ§Ã–ÑNÃ—ÃðfeÎúHF¾#ÍwSœŽI’{¬K	ÒÎ„kvvôï-èÆH²"”CGS±K]Þ #c§t$5Ï¹üÍì¬gO	×b¤´æ¥QMªÚ…´Zí]XM±ö¶MÇE×aq×ÃõY²|dá³DÃC_ &¥"'þOï¬¥âZT×‚?+ßY¤²ZxêªÊÔ\¯¶uçÕ¾>gA’éz5`ÍÐ–v•#¼e¸$Ìjln™ÿRqMwGªñHU5ÝW¥_ðúwõ”ÙD¿<jƒH~
@·§¯½vç°Fš"»ØÃxÏž­ƒI¼ºÆ/Üsqí§pM€š‚g€j'7k>óëpŠøsXKœE"«qX˜ÃšQNÒ•öS2w»9}°«lmkÜ	„†dÉ 3Óì:¢4B\ˆŸä±?†°íW½š#*ki$á¤çž.þÜPµ¶OYD6³×22p÷ÛÜX[X“k»;u'Fþ£Gdåƒ’QÑ._#Vs9]pó×†D9	œ4CvªPÜe¾²£€´VÉur ›¡98¾UÕÿþ²`-§ØÍ"âU!7Õ€xªµf±ÖRùE]k./(§0?í^Ñ²’¤™(×ªÈã^nÏ¸pµs­üð‚úpÿ`æÄ°_~´RlbL‰;Ê X“k€ë¢5ÑÙÒz^6€ï"­ªEl9”*=`²mñ/¨kžŽ;`­˜¬]¿Æ:Ý¿³Ê1×Xš.al‚X×­Ñ‘@¿û)T«Òy`PùÐï€J#Kp­ÖÄýü¦M]zŸylpz‰Ù¿Ö_[º?›éÈM÷>§§—…5;Œ¸ÉÚèê½žLfqm´bµTÒš<qIä5F1¬¬á0³)‚ ­é¼hSÖ" Æ$È'¬ýž­‘^J,G¶·1€„É`*Ts52*ÑØ€5·p3µ%n#‘Ë~
ÖzO†Hëö,Èó†µS=‚µLÌ‚lÖvKÖvc7~Ö¬]=ý7 í/ÖˆCW—^]ÆâÃyÔß\Ã°ñ€Å\¾>55Î5¸ÙÅk¤CVèkÆgü.Ë˜ÖN¥ÊZl—âÜ=Vô±FgÉ®žÞÁ‹×fîˆ‡‰®–™s†5íY–Š·oß½#Ù{úèâ^\¬ô1}‹¹@©9Fë°e„Ö4òSdè/_œŸ¾tùâRlõK÷ç[åÆ1¯]¼¸äVaÃÝuÒÑ¤q9¥¯8QW™
S•²@^Á’~E…B«œAkôÅV"ä'„¬'Ï&‡DjÏ¸?;Zîhèt¤P/’j(«~$;]H&]ÿ!~*ußNØÀšú¨!žq¦*{UýÚHeYŒ:eµº€¼ Ž£LmŽ')òä1—¯¿kà4µO“U Y&Ð—!mnPRwœšôŽ‘Uæþj:J/p=u€E4‘x§¼Ç5ÃvhkP}j´6¬9÷ÑîÀZÈtØ rÚÛê%¦Tù8çøøoÔ´=Wg†j…Ž®¢3¯Ch¸3“Ñ[º§žÒ.ª)¬à¼¿ÝtäÅw<¹_#„ü ¡´X±F˜Ö¾yX»ð`s“œ”žžÍo€5P™˜HµVïÁÄßvèŸQUÌH4+k¬É“Z	Vªâ›®Ö1QËß8“-½óÎãçn<¸yúÃP²¦Ðà±ÇI¯lÔ4â[,oß¾úãÕ‡þ{˜òZHˆ$ŽºýÚW¾yáÁ·qîL‡Ð!Ï¥oÜDpíúœó'EeÖØRTãkI¤[7q	Õ¢…ˆƒM-MdÁÇÅÍ\¬Ás†5Wb‚eìðãm‡äçcúðÓ×8¯­kÏµ5maRãÐnF5éñÖ@@£ˆ`ˆÖ„{ƒ1½Í6,:Aqì~:°`‹SK±“amëÈùóí¸FD>³ÙHªª¥¬Æ•¬{j‰ýa©tƒØ;°uH¬vhËæO)k±åš«ÄÌnáŽzàÛÀaDävJ¤ÆÃ¾ÉmGÔ¬úkfÑ¤§œi|mýÝŸ€÷Ð3öÒ¦ûàÓ×ÞÞkŒíÞº³èrëÆÓ§wü›¢µÍHki.d&5g@ž´¬an(atŒeÕ'ÌÜÚ^ãÄ—²3";º<º˜1¬qã¬ËÎ%,‹ÞÆæŒÒFØ›QFí‰u–,×Ùô¹ÜŒmIáRÖÞ|0«ªý¤²œý;±½@¡ês[~˜‡îÞRišLY¬©»?€^¦Šß‰'k¡Ä	¸twR–M5ò&Ð¥¶ùŸã¬6ËÚ¨x­´…f¹2”Êª»©¾j¹=YB æ|GÄ²™ŽÍ"13=?%XÉ£;r
U„åfÍ’(§î¶4Ý}2z•Ät³¦àšÄÉÜâT±ü‡n’&ßn6êylø•‹1plfú~«€Uù\We2ÛÊûƒäG¶¨	C«›™R¯–<Šší«Õ³)ò4öVcR¾€®K®&Ä
Øb„ök
¯qG…1æïF_œo*“,5²9H¬Î¬nSbŒe0218ÃgË¤rò‘KlÒk[­Ú4=UWÖ/]ÎwdgùaÒÇµ+ Z8¥°vûÞ‘›¿ÿýŸV¯®þ	{ÆµV+ãŽŽØ]buîü†¥Ñ#Xemm­«KŽTÁy’EÖ´"Ú…5`M„xï¶4¶yYíƒÈz{Ø°ð§<Í°æ%­k†Ôÿ}qb¦Å16=ööIÎVNjñÙf`µš¬qwûN•ÉÍÂZd5ÇwKÖvc7~®¢5þ ÿ­ýÑA=Ìê°vhíàÙå5¦†b$¯aÒ?ša}ñbkQ“Í5e·®óh´¾ÿâÊ÷i_ìP´æ>k+~åóh}ÔeA2ŠrËôå¼¬¶*Õj²çÜ.Úpwä¢µÅq¢+{äÄM2¸o‡DHHéa¶H‚ä#ï\k·&O>	¦µuµVy±5¿ÔÈÑ‘…	L qÿ vm¾Z£™@ÁTCZDµ43¬q.\ìîgÚsAÖ°8kš+v¤L~øçï9ºÍ¿mï€Ð9}h‹MÍÚdk<:;³{PÖšˆiâU±Ÿ*Nña»XäîÂ}v©OŽw”å€H3¬¥+ˆÖ°Á1’³ë5ltÁf¨§ü‚þk†¸¨L®ý®?³(@)š5%AÎ,öìe@«Å‚Ýù…r3næ	Õô¾¦˜›qyšÉne6;ˆ@h ,@«Â5·Vsøêš¬)XÎWe–í”¢–cè¢tK­YÇezØ®ŸÑkÑrß9Üch‘l e©¬æˆI9"£½ ¬¥ü7´¹9ÔKÉÚæÐ&°&Z‹°fi+'¤­mn<¸@¯›ßœ=9Ò«Þû'©üž$ÂIÖˆíç˜º)S¯¹1ª;¤fdÝ¯“ÿ¨˜_š.+gZW×Ê‡ñëÖ–J%Ä´3ÎäñWÃÚ¿ÿhZ3¬)ÈHÁZä[Ùóí…³„yMNˆCÜR•ÐçŸO~õù$Z·¯âƒ¯=˜ôƒÅQ?–‘á 7ÅNÑZ£ž-ÑÑvHj8WÀAk+RÔ¢ÇHÕX^þw¯Y‹®"ÇÕžÍ §úÍk¿äw<ôs 2†5³ši-M†lÏˆdpe'©½ûÕ~óÏG\ÆKa‹V2‹ïöù¡Åä´ïDŽb‰¾à6oòŠ4:íí8ò›/~­ý$¯ñxÕ¢²¦&kÜoÐ{ ÁŠâ5XÍhfz²¼EXFóþèihµ›TÖüh¯]#ÜT-{‘Õ<à¶ú4¼:ÐÛÅkjS-DS©Ph€½uè°fóÇ­þ¾=Á…%Î#72«Ü¸ª6ÛÕµ4T›Œºšb{ZÐ²Tì	*á4H€¼qÜáš]BkåÌb¹Ü)Zë0ûÜéÂ	eäáD×i7ÄÎŒŽŒc“¯–ÒF8Qv®aÒ…|e²¹‚ìÈƒ#Jn|T¬%ÂÚ‹Êša­çÁæ¶Ú*j¾r$9 (\é¦z[^ÜíÕxW0)oÚb?sZHvÍfä8¡¤iB\Ææý„•5‹„‚4]åMDr.b+Õ[×rYÚäÊþ<) ·2rì«à®,WZ¾&Å)¢¨ªh"»DÀRwæ9=ò–ä‰ôÁq£!5®Ú’/26ÌepäA˜þÙE|#sùiò'+\áœ˜;®fžƒë÷+\HE^[çC^éÓ+ï¯”xmY@NÌÍÕò!dT2Ccj|õC›yÒ/›²çÇT2ƒ·&Š;Ú`3ígmæ"XI:SH´Ã©Ù1~OgÔµ^+
C¥¬!­­s!‘i¸HÞ¸¦k…ùF¶Œ¥ÊôàÄz[ÇìµJ.WÓ•ÆõÆT…¡Ùqåšž¢ÐÕNÄÆøÚmÙèß&HIÜÈ˜ÕmEÆI²Óx¤ákL2£òíÏŒ‘?2³.Chý¢¤Ëä‚Áˆ¶›=C¸1ì— i†5,•)§¬8•y"ÛaM¸ê9Í°Fha-Ö(d¨Eãþ˜¹CYûeAî–¬íÆnü|ÖtíPs³Ýí¯®hk§[ÞXÞwâÉåË—¯__vbýrë"´¦2A^;}åöí˜iõ+*kO|³)ä¹ðéáö4]XLôö”ËØþ£ÎaPUËõdz™«Êl-‹sWoÞUþ6'B^À¯KÖh^ÌçÝ¯>~òDâ¾¸É±LiÚ$¥Ò¢³ŠŠiíÕ®_[\Ì.]Bç©Öæ—”2ñÁÒ¼:O+zlâµ½MõÆ^‘ÇFž¬¾¹aå@Ö¾ýþ‡Ý¾’xŒÖÀÄ!ì 'Ñ4 µÏ³³9„5êÔú0/–ócsÏž&ÎW…f¨ZhÒ¸Xs‘L·.×Û@âäZãäM
!=M°fˆ³ù£òÂB¢¤ú¬YÃø`×}å‹.Ù¾H>#Ùì•·æÖòð¡dí&lÁñQl6hXÙ‘„öØ¢·HpÑò9¬d°Úû8öKRd©Z qÙŠmÂRv#	F¹5®úrÞ£eI…ëÔiC.ä>šÃixW˜kz	Ö1’y¨7æy¤½°µŠÁ(Ùng´èAâ#;ÙoèÉ'ŸœìÙ÷éß7O~ò ]±ö±aÍœ}w{_ïÆ…í®ýÔ­M2Iª$F˜F
°v”4\êËÇ3ú[a—VËø’~i­Ñªt4Ø´b6Ä²ÓåòáÇëÀÚïÔ>Œæüp7–|Ì“ÿ–3­}eX3°µÌ©Íëöxôò&Kî·NrãäzYÎeID¶×x ¡ÉKÒ Æ"úMÊ[‚£½%ÅWðÅï¦1°˜æ`(Xóµ‰P¿Ô!íŸŽÏkÐž‚êK’ÛaàãÂ»§ÔvÍa>ƒØ¼ò#·ˆjÜÖD)¼/¡‘ì´Ñ-×yzõ‰½Ü»Ÿ’¦ž¶%±´¶P,lœÿâ7"5‘Õä4Ò)§E]íÜ MkôYs«5ëŸÒ.o}±_õkp“7ü–„à2é6•5Þ2âšxÌÞ;AMœ{°^µ ÆCaX#*u;bS+/ÏÕ£§ˆ}bº¾=[¯ö÷	)¡3–8‹l=WÖ b¤5î/ãZJjŸGR‹1Z€ÕÝ–ôdÃD ï(dùHØœ_¨cXCcƒÍÊYÉ(p{þ{g××™®éÑüÑb„>ð‰`„ÊQS©©.9Ju}€ª¢r…‚[=-:T¾ÛIœìØM8i'q»·Œi“QL¡¶¥8öî£îËÊÎÞƒ¢iEfof¦¥>Ê˜ë¾ßz³¨h¾rÂ³j­õ®Ue
¨w]ë~žûÁk„`%’*=‚ùˆ´4û‡dRdžÙßRöèðP ÑšL#‡Fy‘û¢‘ÔÈ=;÷ï£5@MÁþÉ>im¤;æ&ÈÝûo&Yn´õ­6ÙˆŒ©k‡˜‘°%D&á­keÎ°ðÐäfžc«Ç¸Ûk³g•R§úWXÌ®¬”Ë kÆi‘Å‰,‡(nM÷È>5HGåFì’§_4°¦shQ%¹Þç©Y«¦ûOödÔ·å¨æR2e=G^$FÿXT–[êQÚ'»ÆÂÊâ•¶…tëá’úNé\,,m‘LiZÝbMWr|ì×— ¢ÉÉb`µ%½&\u­‡ Ks§PYM€ÒGm“~ÁY'¬Áfö†T´ážy„sH»œ®‘™ÀA!$“3‡ë‰’ó¯æÖª¾1gáta{†!Ê³{³«µ<[«LjÂ*¥+Ë—µÑóçÇÎGt:˜IÏÆ»$Bîl`ÞÒµ1Þ-ßþÅÔ8›ÅØ	=üFhÕ&	Zqr“@vÁ*–ÁçcdÄN/H³ïêB¹Ýí|F€²3ÃÄ É­@í’šK×Âlçu,0š«Ù’/é•Íé’¿Hb/+ÖX-­QU;©±ìC5HÍËaÉÚaÆV´Æ¢oœØ¼€2ƒõ¸‹lÞ¸Msìò
£½JÒ Vo­…kÐÔêjkeœ“êÄò-
Ùæ6‰ß‚5ëi1 ·g¸„f–ógY†¢5ùÝ’	¹È­.Ø`œ–ùoc:‹mIj|{cns}ýÓ«_ÜùâÎÎæÇ—üq¬ÑK¬¦p¯³+Ï\¹‚ÆõÁ•¯ž)×·¶0\[]YiÍ2…“Ë–yFihõIeïÕN0ù¥›y÷Åþè­Zºáb²|³éŒ¾)%k0Á½¾~ÿrîËÿôÅŸqÛé9BºÕš:(S­ë7?s~øÌÝùáï~Ï®UJ*©N-‹ºÒl¶ëB0M.Ú˜«ÇYÏñ¬ô59Š™Ú¬q¡á6âžØÐ˜7ç<²©„N¯–îÀyœÿŸvaÁÙxr:'R¡”Ë¢†ƒf1wQ[pÕœ+Ó|N=Ø+8MˆÔ0ùb#ÛÃÚ¾’5Î#;¢¶Ù Ÿ³p-”¦1[¦µ¼`­VÃM¦ïÝ#»©‘SáZw4¶tû¢Ç[Ëj…]G+Ï}°Ïëœ#ˆµÙ+º‹ðÐñlèâÿƒ}þEkÇÎ¼÷Õ?Gƒ°†‹ë~Z±?"ew{÷Ñ£md5ggŽdÃèfRÐ¨Q»Í‹ÎÆWoÞ\MéòP¹O¾lKW&0ƒ„W»
%êòE²dú¦_}æÆS—ë[_:ßñ2F|cÓï<HÂ§c7l[÷[k»¿{ÉÌ’ ›ƒœHA›–ïÎ$t·}Í:[l¡ŠMtfFóÆf’ZxrY&(<sYšÓ=2­¡¨ièœHÉÄâ´_xÕ? pñ @S…n
ŽÏªýÙ‚n1¬I·WD}íR'°±¢«YX#¥ðx¿`ÄtHP°ÖgíÎ=©Ûçµ",ð³œ+
ÝÌk4[knª_¼Æ£C]ë@5?"ªuÂÚÞÞíÛr…dÕ{:ü¹hÍì¦·—
Ææ›öÜ¡}¶•5ŠˆkNuLÂãK<™$h¢¬=F0K€Mä‡•¿¯“-xõõÖú€5\V ¹ÛÏöIÿ;Ê7*J{Ü·÷ø±!ç€5âÑu-†Å[ŸKPÍÊï©çQ3{|tœ`­‚5˜Zóð¢š¥&0K¨št©±¬ á1+WÂ<‰\uty¯ÃG®ëî•5_†Wˆë(Jy€Ã#Ï'þ"F5kÖ`çö(¨EOH(ŠyÊC¶!‚Ã¬(Wþ¡nk0á¡"ø=ºõMŠMðê²8ˆ˜Ze ¬ëxaM_L‡|‰òêêÊÚ"j©¡åB)7‘ZYOekÊe”ì”¥m	³ý¾~² yRk¥fCejàÛÙ©¦îNòŸºœ),LMkÊIg²åîh.[^~Xê—ßb©	Ùñå™‰[³ù)‘HVkMGÔÈ PWê¥“d­>ˆÁÈìR^}IDj/×kÔÅí)u;€ ­¦ô—L€gqb5ÿ¡Ae	§%M±ù‰ µNe¨‡ø»ë6¥qš,€jhvKI€¹¦ÌHXÃŒq:†Îº›j¾«úðâd}I6¼ÁZ+50:>p~à<ÔÔá¢opzÒÎHÜY_¿¿¾³1ÇEÈ½Þ;Ûã–ÖèüÆf¡´hé.Ù„°¼3Æø-ô¯£š®ñn‰’÷½°¶¬i³;´'n kÖÒ²öU­fjSF¤Kbw²%…cÝÖˆkœ
‡g§]ø^a¸º)/H)k§,¬Å~ØIäßþvX²v‡ñƒuZ#ì2ò†imw|+_¶V6çç‘Öîuk¬!„á%¼Êpµ[Q^Á%|\FÒ¿vw1„ìÌƒTDip»¢—#ŠøAÂvl…¨Ž©é'2Ó8	sp»‘òøŸ[$!ìî~|õÎNzýÒwZS£µ÷4Á^qµ,¬ÆGàùÔêÐ~ûÕ…á•‹[äœµVRc‹­JN7 s­¥¥‰êr¥‡yã—ÿÑék“³K+L(Í&üF‹µz¶ÀœDÆ{ž9A¬†x4ÕÈ¦UGôÒÈÌ¹àñ‡´¬IZ{ïÇ¿½ò¶ó óówï®®q^Ë“‚ËH¡ÀU‰Ê_”fÕGau?=bÔ\Æ÷™N)±–Nfòrœãˆ4G_­r«¡M£ççâk5^HÂ"i“pÙ9ì$OciMÙŠ=ªJÖxhq4·9+Ó&/ˆÌÚakhŸúš7ÀS  X#S¸&Ró‘‚ÝˆBžý¤ÂL\L4ˆve™î#ˆ¦GÄêÖ"³Ehó®CKK-µH^Q<K ­ãDG¯5Ío:öÈ1@Ãë7?ysøÄ{Î|‹Ö|WA0È	°¦xåÑƒím™‹ŒKócÃD¬Tå¨pCœ¡Xm	úæb™{øÉÅ\=—¬2‚<ÔPq§[µR{jó™É—ff¤—ÍX6ŸÅˆíÖ"¬ýÉ^#Þl®Ê+b9ˆlI|~pÑÆ£d àñ ãôèÄ6®¸ÍlâµØfÿªìGa›A\kÇ’«ÑÜRS¨ø2¦?ŠÓlê¿pòZò9^¬_dÓšJ4ÕÑ½mÝï?ƒs\Ô9Ù7`Ë¦À«Ø^1—\c»oÔx!¯ºlµ	®èzÑŒý¸‰˜2òÔÚ°fñÐÛ…«oï¤È©PÂÀ¼Ç<ƒ6½	©±™àÚ^£÷c§¬öû«×y\'’˜a-©;¶è¶Q,„ß2ª~fÅ	iÝÍØæJ³Ûf¯×béšx­½ã¸Õ´®Ë7Ä?²1ÐÌæê8WÙù‘àÙ=z¬íÔ €ÝÃÁk'lö÷ÑgàñSÐ°†ˆ©º5/6þŠj\¿zF,¬	ÖºØÚázãdæ`Ï±«ÔJIËd .ˆ…±R$ËLWÐ RNCƒâÔAË×”`‰€‰†¥AIð€…Æ%ŽeìáJFÙ\ï8ìçÀÚ“ý°ÖY³ö„x%:÷óuüQeVÓA‡â&§JGtµjFh¦oE´Œa…i)ÓØø‘²™ÒÒ#ýµ[ãµ<œ"Ç€T¾#¾ÝÕV‡€5ÞšvßC™Fe¹º²Â«é¼vTºšiäRŸf~MEk V}¢ÐãZí¼ø­¬a	Yù¨m«L7jX‹´²µ|‘‹ˆ¶òpvùbžiŒ©ªa{®ZEæ‘Ræ®å*³¥" 4¹°€´WÂ®“~·Â¹¶•?‡ž‡¿ù—K<KÐêôfÍ"¦“4¥¦Ev!Ð6"¦”4þÎ‚²‹Õ¼‹Êš¥5©¾'Röƒ†ê¦‘ÓxšsÀÚ´Ê¢g*¡ã^lZ#èL®cL	¬åG¦'’»‰ã÷—–¸q«NÕ¶gLÂådf¬ŸaÝ?÷àÁ©{sÛ²’á*¥J£¢k¬Çì.ã;ˆc)ïž«H²…£~K{G‡£¹H{ÃÁþÌË'Á
R¬†³	ÒW>L0°&#HvÞ2ÝQÃ6Þ¶Åù0ÞÄÔŽ£¤”Àç|æƒ$Akº ëÖú¬¹`M…ªma-:Aèj‡Æý‡q?dÑÚ¿qÃ°vßÙVZ¿/?HìÁo¿¾JÆæüP÷½crÜZ][¬ªöÄÚ©emsòæMeá§€µíOäAØ½2!¯ÈbÖSž3Ý˜Œ0ã¬	u›°–å“&;Q™ÈdªkC©ju;ÊwNum®ï|¼¹s)´Åþü>Þ¦vhLýÕ}ö×ýËóÛ
ÙŽ¥úÒò"¦•³ßÅ´¿ÔÕzw©úÈkùéBøPîOÕùè/ðqONÇÒÄtIeÑÜõSÿL2*ðª/ÅÜUV7þÌ'Ùû×¯Þ¡76…s_SµöÎO~{Å¬F©šŒXo~x÷fkºR]DLRš¾á¤©j5â9O?ÊT$Q#OË>Of#s.Wá1™¹L“µˆe7Â/—·?×`:ØjŠ#´¸ÓhY0€äib‰ÐµÜƒ†5gA‚if³}°¦cïÒ 2ó°FI&#±-öGõi‚±AZhˆÍž…3A^±!©rÃ…9Ùö7ðž5¿AkéîfáAh÷ÎÚHÄ´(¤Å}”ÛÌ^Žä`?¬Åè8òÇ~XûÜ°váÑ;Öx¼í~p¬F›iM‰¯=y°½Kõ€¾ÅQ¶c£HjÃ÷÷™¸çk½Gºùƒ¹¹ºVÆ®ùˆ¯!i7odéünXË¡²5èeûåŒ´²™Ëµ7 0'8ÏHgûÒÕÄiì¹Õ«W2Ú~°+‡CG.Z:â½dÑQ²:’§öã]GB¥" 
Û~-q÷°…!&¥¶þkÐÓHˆÔ@è&Zsõw¨ÈDI;‰ ^éwß~åôrë±ŠÕ‚Ü|V]™¬:m^J~äŽŸ:›·F5T·ÕkN%TÊŸAÈ>Ô«ÙŽð¤0É]ÖlÉö¤‹E6}®85¬™ÖB.$…´ƒé<Xˆ/Üž¹ý,ÒÚÞ‹Àš<üoïõGR“–•˜÷[Hsˆ5§9Iäu£š]!#°‰Ó¼^bcT³·HŒS{v¹díéÔŒk’2”ÈŽt¦Øã[»Í‘ÆêÉ=¿a$‰6÷˜œÈ¹u\ÌÆ¢¶Ø¼5«u¢Z€µÓ{3›öŒgœŽ°Æ‘ÉêD†5Píš"Êµ±¸d6c
éVŽcï˜½:ý“:8r1˜ÇÜ[­W|PÁpÃÛO¶çææN<€ÖÚÊÚªEXs<Ùx û3'ÚEiz'í@ÙLç¼Ê}°6Š,¦“¦27'4)¸c	â$¢Í·ÍE‚ÎÆFß{™«²Å9Wr¼,qK$µ•î{)”´(«¬NÛ$´`ßX-3gb‹¨EZ›æ¿i)¯(~X«eÓˆù°ŸÁSy©gøãóeÒÌ•¥:8Ó¢ÑšXLTFÆ#yƒdƒ ›1?g+qË¯kgóêi‚ŒÎrÛ ›ižìoNýè-XX»F¢}¾ØhON‡Ö²å,Ù$H{Ôk«
Ò´&>kö$‚„ˆi=ä9FcHÓZ“{#1	’;&jxÍ±g¨öH™.éÆ œÆ¤É.š`)?È·HHf'ó|çK4ï©o][JO“òî0ÉÍ´áMÚôùØA&âúæxïSÝÇæl;ë±+]n)k4ä)ÏAjˆ­kØ\{Ê–S£)n`ã?,XKÞï€$°¦7ä-©”#T)·‰U`µÙ‰Ö´ëµ$™É7a}2óí¯ð6¦í/Y{!Öº­~¡#¶‚‰'ªjQX;4î?ŒÃø!‹ÖøKT´›b«nmS°vùÆ¦aÃ2åÇÕ[tZ£F­Eî#Éí«žiHzA`«ó»W¯º}é»‹Öx(>0¬I‰H•™Û2DK5odUêv\ùØèøÊ
‡Õ5JÎZ$E–?ýøÁÜSäIÞþÍoø 3­}î/þÛ¿­¢1>~®ü åÙÝÕÕÔÝ¯2µ­k#ÊÅ¨L,3kPÎT/ÖZïnQJÆq½L`õê«#Í¾¦ÜÔGpíÇ~˜l<ÊÛí3§xù|9”8E.ß¾ñÇëï×ïÜ¹jX#Þ¡Ï›aXÕÚÐvsubmµ|´€A5)ÌK=‚µBÑ°VTï&`¨Rl¬CZ‡Y*TÓŽPŽ$cBÛ6¬}Ä?Ð1@G²$©hiçÐ#$¿q|öêÚ946¼(CÉÂ'a4QœYaÂkSæ4¨F´ýúy’­Ã'Yá8¨„s5a]èµ6’„Ó®ÏFL…#ÈŠuÃÚ$¡MÃø#7†„G=À²Hjf´(°yèˆ¦œÞhrµO’5¡Ew“žØ´–à]<ùÍ“üšÞïåxP#´ÃfñˆVÖdeÁlz¢{TîÉÝìÆåó§]VqLêXÀ7ÎçÏ ®®¦d-ÀÝxÍÒÚÈd®ÑÀ2§”S÷V¸Ð@~¬á0¢–ØÁ^$²š
ÔdâÏÐ¨vß6ë¯íŠÕx–ä`qËU–ˆlz|‹aÉ‰¸zã½G^’ÐæØlâµ€km`ƒÒx°iC[´m¿•Wë	€ë£s¿«ýœ?³yC`ù#P¨8MU`ÏE§øîep…NðqŠ­þHNbÆè6ÄæO;	µóÇm;?FRÓQ-*k}GÝJ­ÂnÑ¹Žn}œLH³Ú‚£ŸWÁk=x%šëŠ}ºÚ{Õ°f^#^¨ŒˆjVÖnÏ\¾°F$Ê¸öø9X5Ð™áP³ÛYš0œN9"¬Áj„¨0×¼Õ´„S±[w€µÇ"5 §þ)jåH¨„Ô(ÝL´ØOi©{–×}{NÁ<Š6·÷ø6°R+×$®iQÌ~4©ùÕcnÃ-XCG³¼`<Û.w‘>
¤‰ÊtÚÞ"2ŒÈ˜Ô‚ë¢’±õÇ;¿2clCÙÇê§á^f¼¬;Å%ùÜY§,…?ƒoÿÀ3O¶l1b]í”5µa{0×kI·yó Àš½úÛJ]Ì &Eƒ(k¡·@°ƒÕ§€bJãœ	áæO,ý%ê•¨h€ÀªE4>H:W¢Xª­ª–ýZU=iRäáµHWœ­-â3Û“kªƒšˆÍ$†ÕÈHänäKÅÉ	NÖè.J`´‘Æ9’›“Õrµ6¹ôæjÌm”›ÏN"DÕk³—.n©u4Æ‹ÍâY²6pô¯àé®lÊ&$)x!_Çnq¡¯@w¦¸é¹¥ÒµÓ/¿Ì»òþMºbõip*›™–Ù	œÈlÓ‹]Wr›9Ã0FHuìó0À7Ixa-C±Ó'ÀÖcXKÃK¸5Ak¥AŠèÐs[d—CnEReÐÓŠ¥z©';Qo'ùY.Í.mMNOçßzëÝkÜ7«TSçjÚßòÌà]ô!&’!¡ðÍÍ9É nàÐ­âÁ¿ÎÔÎ{Kk6Ì¤1GQ°ÆqŒãaùÖ:µ¼ä-#¬™ÖX‰ÏüöÃ£gž«1wµ•5ï<-kÒë¬ÂŽ
[gÅ·§P8Gˆ¤dÍ°–ksÇÆ’kOík±fYío‡Æý‡q?l§5ËÛÒÖœc%X»¡ØÖ µ¡Åé,ãúÁtâ6œó5`5`Z­Öê§téø4ÂÚ+	¬	Ò¬­±þ<—º.…¥ÝšêzÒYT4ÁÚZ•¤‹Z650<DËí
o”éžX¿ºCuïý×+7€5@I°®ýüçÔ¬;Fâ™çŸyMZktw5t³ì‡\¶2KWÌ*½È2ŸßD¬[ïŠÖ ÓyH§s|§ß.Ý—Ë7I|G ¡…¶r=ê¯ß¿ñG² ¡µ«wÀ5*×kï½ào@°6©)ðMZ,µV'hc
¬ÑT«HHiV¥fSFÜbÔ}l”5™Ä3u£Ö 1”U¥9’ß£(.‡œ Ðl‰x†¸Æõîi·Vë·¯¤Np$º¨cò¦¼a3ˆÍ°Æˆz´üI(M±à­a-ÒÓ™Ï|ä=[gF²â/Â—°IW‘Ã§%k¤>ÖsÀjµ£GT}Òh@½TmXc-°‹ÕX´ÿNX‹¬ÕÍ‰MÇ³š+¬‰ªÚ·Ìúý’°váÑ'_¿ùèO.Ð[º@mÍ±92«‚µ×†w 5¹ÍqéÇT<Œuÿ0Ž6Lž÷ÒÉ¶µwä ŸQÎýÍdk¥jÖ.—3X® m3¤A~¹¦±€f`˜øìüËÀØ“u¡Ï¡ª1cþi}cWiY7‚;äýuþÔbsÂŸÂÀÛ€ßþ¯Ãd©'a¶N`‹¼F$·½vöC^>-}Ø•5TµÁòitaô^ég’Ø¨TCFã@Ö˜9 YPÚD	¡ËÖ› WÂ¦-F©iq\]çÒOº’aö!@ÎQ¸&|SCDÂ:ÞÉöNkE0nÊQ¼qýúÏX‚¼vÕÑ!¯uŠj¿ÿFYÛxöòK3ÒÔžº½G¢ÑÞÞc[š„´G†6çÇŒX¤RÖ’ÙÀšµµý!	í’Íy©	§9ÖC“k’~ª ¿*
—ÝEö$Ÿíí¤hX;…¼ö¸ÏÂ^ßqvfµ{èmàÚ=ÁšÜ\yÍa^»À¢QBjZ¬é®•xÍÍÖŽ‹«‰Üœ-N0f­qxO† ˜ïw›Ö¼q?3N³
Ö†RjBÍIˆÉÉA£C[ÿ[íàJyÈÝ=-aÁMC¤>>ß†Æ†“žØmTÛkN„œÓ7>¢Æy'GàE&1»ã	–i0º¬É¸­v>9$ö*‡"4™~ŠÐiM„–¡muœ1—áþáø§ íLWürýZ+-~£ÏeWõ\©ºRmfˆqFþJtÂ`¡$…­gº6Ñ¨U3…lµŽ¬¿4	¬á™Î¶è¸SQeÙl6Ý¨!:ÕjòÓÊ×èhãLöœ’%›ÌTƒùÆÄDºG-!§øØ,Úß8?E¿ÈiàÉ¦<S¹ÒÒó)…r%¥«Ed¹Ùë^6UÖ=B°FDVÓa€3my9!Zsƒl¸/Pðœ:”î€µ¬Ú~#2«TSkudEîædlÖ‘K3UËWCk´VErãÕtoï§&o"8f5ÁÚÆöúÎzjìÔúf¹µ8ŽE©cŒ`›´Âî°í7¤¥zÙ¾µGÖ¾a76©ýžUâÚƒ£L/ÁúQ•iìŒgÒÖT¨ÖËSæ²è"’ÐZ¬pÖ[,Y;Àj_lö>°°6¬Ájî±–´X¸öïþí¿9ŒÃ8ŒÎ¼ß¬fZãÊÐ°†}ÿææ[¯´2å´&É+‹Á/i¹Þnsk™çþôgúí³yO!eÍ´âŠ½ NtKA¬é«­,V¥®Uä+Á©ˆ†›˜­d»3ëoÙüìÎNvçSœó¡5Áš&Y¦V¡’ªÆÕkÖ”<Ôi¼²•Ç.ŠyŠ[|Ëß]brÉæêäxÔ[Ì£ÞÙRkgˆã4rmh¶®Ñÿzõë8ÆýÊ÷ L”¦ÿÖß_kê3—o¼¾¹óç/ 5¬NkŸoRÒhñÞ=aû¸]µ[·rS\cU2XÄpXk¹\wÕËNþ@Ölb7$Y,„:5 .<	ÀkÖBÁ…±Ñ—b"Ö0±~¦5$úË%™WJ~Ã]dÐ9Êç_@ÛÛ_´†åÈiÖ6­±m£ˆÆ	‡|û½ÊºŸ¤H†(”Bµ(¬	ÚFfj(Bµ:®"n›>ÚUhÔ(‹èB\S#i-FG¤b?¬14mÎ‹¹Ú#2‹a„ÓÆgö¿dàÑ'ïô¾ùõ£GŸ¼G›5ÃÚOX	<lx|nX£:´ödûÑ¯vÆÇ‚¼74oZ#†äÛ?dçnüE¸|äÎª}Ý¸ÌZ\L)w?Ý|)çr¾äGK\d\FYûò%1šQí_å´u:_Û_D¸F
ä“'»<¬qôÚUãB@†°þ_–Àû5«Hl	°‰ÖÄk	®Œ›ÈnÄ™½Èi²t4˜ÛOk¶‚äy£ŠÚ9©ÆgÝCÛ'l©ÑsÁ+ŽÑAð#Ø»2fŒƒ¨¶ŸÔøO´.1™H¾²YŒÊ´ãÒÏBÊŸÚbÇ.ÙÁ’‘aÚ‚š:€5B¸æÒµ6«ñèTÔj¼%Kˆßo<{{f†LH0ˆÂ0üû÷ôžÎ´ƒˆ4öql‰fzÛ–š5ƒš·¶¡dÏ"£	×Áií¹×á1Ëw{Ç§}¡rE‘Cˆ	tDOÃg;H•Ó=ÅvÏWÒÇOíy FÞïÝëê±²f\ÓŒ}i\;˜þÈâ>%Y6ãc	áŒ`Ðfµ`ÞoVc`¦#ºP£0Ô'•C^ù=Òîñä»ív‹5_'C30|¦dŽÎjrÁÁJ‘l¡I°{VÖ¶Ÿ kQYKÌ ;¬û‰]Áš?’ä)k×€-¾dã#*£”"Hj„¾!E*T7¡üÛìâØ¼Öf°š`MØ¦DHƒšM–^”ð)²hmâhj~«ÐÀk‘±rÄÄ£GmÛ­ÕFJdõ7äbÓ‘V-“j«“ˆ]Hký…‰êb`SG•‹«J‘¬Ïm~\ÏÀd#øDNO™²P™Š}1i÷*YIÕ•—ØÇýGê“åÆ8Hd¶Ð Þ59f Šçš¢Iª‡‡MkýýRÊÌjì=úo°	øõÈ
™Õü·I°G'ì±h×Dzsïuí2À¤OnPYüð*7/±æê…L¦ž¹˜ëÁÊ2‹™Jc¢¬2ã®®Í.µ:+Ö:a­­qQ°ö µ¶¾ŽÚææòrùØÜ\&ï7*¬uZ‹¤Äj£Hk£ì*;NåŠç¼±ðû² Ýdíµ'†5“Ú“íâ³£ÕÚ³Ü	”67ÃÐï<õl>¯ù3ÂZRåcH»ëáŽØ`íÓ˜ékD§µË¡qÿaÆlÞÏ_!«ÛbÖvw×7ÛÛÊƒZi-®©Pmmm‘¹j±µ¶RNáå¯ùÛzž€Ö–o­n_ââ%ÂZb1âÆùN‡¼B~MfÌZ
*ÊYYq“l-ã=5©V9ÏÍFæ™ÙJ3ÊÖI
xöTHâkïƒµ·eØ§‰Õl4²’›æ¿ºØš&²4R/S —^¾xm«’Éd—.NÔ''25È‚\´W_5@&§§³ÜwÖT}öÈ—TUÄ)X+Ü¾ÌÔP!siýò ¯_¿£Ÿ0Àš4îTÝ%Ôdév”©·U­‘°ÁÄ1rþÖ`öº½èÍ‚n×ŸÌ¤«¶CÌ«[XùcÈo;<Û=j ”;§†l0c¤5ž{Î]¶¥X6×a#¬úñä652êDgë?{Ni˜!çQ°F·µ¤fMh&çþàÒO©šF¬Ù¤¡EÇ+k°š›aÊm$èjl \ûö
£åê&1t¥J*:oLwÓÇ6’Àè¦-Í3Ö	+j"3G$6³›·	¬yÐ	k(.4üäëw~uæÄÒZ)ƒüšpö#&#Õp±ùœ<ÉWÔ›žØ»¿b·}Âs!Ö(Fèe¦äšQ×`r‘Û6ç™¢ÃÚèêJ«Z]ÔÕX:xîˆds9eïà1‚ÛDkfæË—” i&»¬½$ã~ðÐXÀ¦Š¶ûêÌ¾ËYsÜú“¤Þ?óúÿV‰ŒÈ-êk®_Síï6XMOÜz"“'¿îD°€=•5V´dï@2Â5—n²fFÕØ+i ËË¿ÐÞô´2¨±z9ˆj:ëHPõg(k'Ednqè¯,ÑeŒÂ4Îu‡†|ïß0ãÞcúûÕcANªÅ™™—òSRÖ~æÿb^}7®±ððje¦Ø2ƒ¤Ç4°öÔ³{V$œyµ”ÃpjA+9çôHÒ ÿóeÒ´h#YÍ+K`M¨F l¨"ÁmÛÃš(íÔqd´{ÏžâìS[wÆ>zôÙÇ²CÙÔö`8zyïZYãÎœ!,ðXô†t$5âÓ§Ž+¬õÀºaV3¤1òk´ÂàáØº†°•½aé¡SÐ`†êÒºº)@‡ ¬¨¥Fi±PƒÙ‚eŸŽ3ìG©YãÚX°­}²†°femƒ$ÊPê¯Ð!¸k*dótÚ»‰‰”B*žÅ5õ¥0»;åYOH&§~b\°Æa¦«\¶°FP jsr¤a­ÚZ›ÿp~55D¡ÁJ¶'3$X[öMÓÅTºÉ-0Úac‡Uä#e¢V¢ïÍdM°¦¤ÂZ	3Œz®Òª£-UÒX)fW¨ãž¦t½NÑZiªQàW›"e}	²]W]ª®ÍæŠúÌFŠƒõfÕ„%¿ÐlÒo{î?=QÎ¢›ÏÒ‰zi	Ê¥³‹Ë|òO!½É•T¹Yi¬z³9±ð¬ªôM—'Õƒ$”‚2tkÖ$þ&Ñ<é,“}šœl³TÝ°¦¶©ƒ#MOîË%Ioüèluø²ÔDS«(rZ7h	&.YFÒ•¥ÙÑ(ªÅè0î' &Ì åov£õ:7Î*™SÛÛ‹™¶'¨7úE³—a-vÃv…$ûqµ´nçAêX‹ñýUr&5õuÛ˜ÛÙèÇÈå°¤ô4Ølø›ê5}eÌ@áVd’ýh£G˜0µ=¨¹)ö…6­µ}û+È÷cXƒÖ¢°–dA:RÒÚ¿?,Y;ŒÃø!ó º²®VkÿøÀšYm“c“ÆØ6‚\»uSþÂ’˜j&fÇço®¹0¬QÆVi‰Õk‰´öB€4ËîÄÛ+ËI9˜gyL·Z‹âÁ
†¿]il®ô!¨¶Ø Ö
Ê«RÖ
]§¸:åk_2­1Éº€µçùBÜúêîÊÚÝL¡P.·j‚µÜl–{o…ìÃwß]^Ìd*«™
^¾¤å—øÔ&ÓžT{¼''4gùžâà”ü3ò-¶ÅãjÙFÒ›¯ó}M_ž.Üþì}‚ïjüékorÿ‚~¼+Ï| Qm+²ÞqæW*Á'èÓDC‘“0¦Œ]ÀÚó•ûßÒ|éêœ»Z^§¡6•	“qÎ	Ž’ÚÔ›#åA:¯lA¯Ó‘KØúã§`K-Ýä…®›˜SÁ<ŽLÈžæÅm¡•Ú9}B5Nä›ÖÌkÖ8Ë
¢l¼Ji ›ô5’Ec|ãÜÏÓâ´ÓƒrìgeÏ1þ6ïç6lNv˜d§¹Çõ½î„(¹:qžSDFs†Stº÷Ç~i¬~=ƒÄs„Å/àe1bÒcgÍZ{w ¨VSOì_c4Ÿ¢´¸ðž”µ0›	ÌçŽÑ›ýîö¶Þ>åqŒ+yA§·Q¥gÙ³[EN~Z©roWWvé0;	¥Jä×6¸>±5`ëõRÃ_¤Ýû:8ø3P$Ö7ÖÅqœ¥¡†Ò”µ1¬½ØKüÕÛ$þÁëÿi\×Bxã¿àˆl‘×:õµà6"*S¿ì÷'-7ka2d˜÷U)]¬[cG hÒ“$;X¿Ù6’T$!†Yhö«ž›HýÂÖ:µ5/ßFµDWóbT».XƒPl)<ÃhCEb'{ú­©Zë"ß/ö³êò1çÕ»ý\ÈÒÌLI°ùØzf5õè5N›Ö¬ªYYSÁÚmêÕTûþ<Vâ¥›¡_uLw”žÈiö¬ûƒ®Õ¡VMÛX´¶	ù>(.Iƒì÷{Ð¦À-õÆ$b†b!à¨‚êCG{¼G>×ü‡Kæã>6ûúCK¸¾{§liX¸Û‘TëÀµ6Ãñ´zñ)¼DœþhOH3Z_'¬ñl]™{b3e9@†ê5nî©_£<3ãn¤–"9RR¢\7:d«|þæ¬´¹Û¸ú"¢¯ÑØSVz'äÍÎòóÏGXÓ¾CY›ëÞžÃ9²]òÃ#æA2w%ùp ­u‡ôG3šÔ7Åâ‘guvL¡²9igpÛ<­^ì¯¬(wq:Ð™U9£ší¼¼zóC•²­BlÈŒGøzåI.T¨UK…®r++cý’ñ§ÓË—FJN&,4€šúl’­å
“\:-ƒ’Vé­2;»TwF”H-&‚°Vkè–ÄB3›•+pGåqnbà[šÌa/9¨É#´×¬ËZ¿Ai÷H~R~“Ü}R_·Y“òHP£•äÁƒ›Š
&=Ãà:¨$}Ó1W_°‚Œ´Æo
 ÇÙr«^l"$Òô­„Y–ÎÔÛMÒ¤DR Þcm­T'rDÆùI²<ëÌM[×¶F˜š˜»4Yåõ¶&Æ;°é 8Nêvö™6;|â¾^›>R–†ê	LÈ–µ”jHKå–;ucÈi€¤²Ù48 ÖÿÖ^Ûx-¤@noüûš©=Ø€Õ¤©™Öz•ñHŒ
Þ†íŽ™å„‚'<½uLtIÝuDaí@¤aí˜Àó”+Ö´t6Ãfáq˜y‡ñƒúA‚iŽuikÜ¸Ç¾ŸLÈÝíÍµ•M&Åáù5µX“9$Ûµµ¡j¥:4tëÖü7Z»õÇ‹ê´æK½X³²fuQŠ.ØÀZow(2
÷	™šª$B¦LÓ™³šJe¦ÐZ6Ë¥îæZ‹[Ó§¸:ý§«öI
Òš,Öƒ²öÌ‰áðÄö|Ww¦Q”'5K)}éÒZ9;½\Í´fiÜ	V\ûåµZ¸p­Ú¿³T§‘'?uZ'rõ-”£üñ*ùé±{]åÍS8B\Þ¹høø5œ)_^@-¼ð•3 Se*(Z»yóÃ›-æ
Ïwý%Ý¢<Ú¬T¦+—á¨0±Œš4N3—9÷‘(—ž=mÏG€LñbÀ3±T,rƒl]»RÅ‚GÝËO?}zA‚õßRÙlú1ÎÖrEÉm$D¾ÌC#
Í»7^k3h."3H%<²u’£ž¨Ãž&R„æ$l-Â4.XãL51—›Îp›®«îò?*ÓÝŠÐ©3ã1vÄvø|´Id±¨µÖösXtòwè„O:¼ÿ¦ªM£ÎØýüÑv/­lÀ0”5e=º#öO~üö{ÿª½û/m÷>úé¥Ÿ¾²;º»mÛ~.¬b5Â1±Ú°ÚÜÊ©ŒÄ5Æc’ŒÓ…¶ÅˆÀ†MO*“ÌIDµ¥Ë—ë#[A9³A?iÔGÝö±ÚÛÛð›$BÞ×€u]Y¹Õ~ýþû¿þë¯ÿá×ÉƒÐþ¿±jÑÆß÷x_‹BÀ– [Âk–×\û0âëß¡°±Êy„ÐÉßýeòG?ÂFÄ×è¶Ò•i`ó¦Ý!›Òµ kçbÕH…£5 ôÆ‰>ÁØ%^ƒÃöÓ>ØÏjI kÊ~|1]Pš 6¶rÅ·ÒÓ×ÏaRGcs›_|qo™™ÕØv¢š7ŽX®¦±I”5`Í=ÖÁšå4q™U®è%­©[Agð}R³ö×}ÒZ³@j,> Ó¼°O`Íy8¬DGH}±ÇÂQìú»Øú€tâÈ“÷`5¥QV·ñ¡5öYŒî‰½·gX3­Y[ÊxcÈGY‡ÛßkÐ8fXÓÎ®°–CïBŽ*KH+w9òèQnÜa12:Ö²!¡¯…Ël«HØ¥?’‡çÄ?JTtgjþíÀ“íÑÑ¹¤%ö>ií'Ê+®ýÙÌ±'òîš?ÝeBâ£8,ÀšœEœ‰9æ–Š odXéŒîÕÍ?(ƒG¤*Áy‰c\/aªðÚ ÇVf—«k«Ì(ócÚÂlåŒ”ÕµJ£QÈŽ-N2CÈm
"(“.L<œ­ç˜uô‹Üì—WÿD5;=ûZ»UMOO¤Ñ¿äSÂ¹Ù:¦ýçk¹†Ü9r¤¥ôð7Wœ.4iÙào¡™Ãð¿ïQ¼”ƒÒ˜M %æ9g©éfýy{/–zNŽä‘ºªYlLøÚœâ/›Hæ¡žt5ç=6•[¹Ô¬§õóœME
3ÎÊ[ÄÑäÙ„ÜŽg«`­ÀÏ·N7ÓOu²¶Ä­WÜGhŠÒÌcV"ê|«yp/Q¥jNý˜¬Õ·$­©gv®÷<-Öf: NpÓŽ5®L¨?ÛÙ¹Ÿ%^üj]e,n²ÙîïŠÞ^PM¿nš°\×<:z&4µþ~e-ks;w»ÃŸÞùxÛSßÀ¸Æ@x¦rÖ#;#ÑKUÛy7å0™ÛÊI2ÊèÝ,°Þµ²öUÌ‚Œ¬v•éä‹Íînºaw
k¦5…iíÐò0ã‡Íƒ”wô„$\Ó=|Äµ¿¬¬þîwóJÂR‚=£µÖ­5örFpûË*gpY^Ã‘ƒyk"­]H•åN,]B·!ÙûseÌNÇÕåV&[™PŽÇXqªV«ÜhM”[ËDëÆÎÆë²÷°FûAž?ÿ*Ç> =õù1*ê0¡0mréâÅ­
9Ž[¯¾ZjÔñ…Ì,fÍžR­6ùË_nè£]®ýoMÖ‰­‘föS²Š„âòÐV“<HL´ú+§…¤AÿtýªˆñÌû©nºB7î¯­¯BjÐÛE¬E“°¥.hJ+Âj†¯PK±_P4”5âÅ¦§dH`Mr	‰knƒ­àÉ([sõJhŒ¢^SŒ%À\°Hvv<ë+žÅtïäs"²AhÍÁØ¬f*'plcÅO$FD”ÖÒÑ¸KÉ>„Ò$A7BêƒÔC0ltò0ejØ´ˆÖ€5hÍ\f‹Äkìƒ¬a-êfû:ªV3£EørDÓø²háÿíú´õlI<zóÌ±ÞG_Ce°]ÈBcl`íàN¿)X{2·K*$Iš†mhàl—ÑÔ¸:=ILSVŒîª¢ðÃ¤FGç±: d­UKëòFSeðDƒk‹ÿ™¾œ¬MþË›@´¶¹K™Z$7›ŽGÈ×ÖBµ×^ÛÔ,¯ù·1¢YŒÿZñÜ…‡x×F¶Èk²-!"¯E\Ã2æBR¥ffCRÓ8nXƒÏþ{ç÷ÛÖyæù¿anÙ‚ ]äF‚,”	•„á	¨€fIkc³…²‰mY±ë´i,ÏJ7£™&š ’jgÑÈ‘!h Ï&Q°½hf»ª›f#;ýq1;]¥MÞôfoØÏ÷ûòÅj²·=ä9ç=çÐ’¢P|Ïç|Ÿçû¨s bOÄ!éŽb·@l$îªrÓ®:DèS›‰™¸Í^ÝÛ­ÇúÞÖŒ`_V·fV‹ÊZ§®ö:°&™°R(ß]±ïoÃÇô*jù<Jê xWÿæ…BÕ#<yÉBÍ ŸÑläc¿q¸ÇsC„©<îct 0•Å™ÊZ=±cø¨1òOh-ŒÄU´ƒ4©™×ôð±Nemçñý`Òr+Ö”ºÈ÷Â x†$m
Äh$;»§”Ùµ‹ö¶ïk7ÑZß`mÿQD5kk×©Å5û:è3f5^üÞfÎ=Ýºy*ÏQ[E¿†ŽTZ=¯»Ýd-sªº)rD4G>d—û­Ñ^¿+}|$Œj-X:‘M’}Ñ°Å*kêd†…?/Û~öô‰hì«ê³Æò¥Êqw~æÙ‡·“¦51šÝM]cAc3 ùÓ+œK»2Íð&ÜÒ	‰i¢;Ýž4FrFanc<ÆF?¥ËÙÆâI¯HkÚ&IŽÔ€¯ ¬pÍ*¿­Ã%þ}ŠXn¤ä‰Õ¾ºŽåqŒ>–4ã¥j¥=xm–I±bëÈ
…jÀZ©¦·;³Ñü^¦62U¯WkÐýÐd‡Äí6eé’Â˜ï­W('ŸŸçSgáiz’bdÅÜ8=-–©~+p.¢çG¦€5ýJf­NdE2¥òmLck„e´hÐß¬åúŒrs
2ãPŽ…5¥‹·i-G+ ®	J•Âø¹sõnÜ¿¸ÇÊ}Ã™š*ŒOoÌÚ¹™ù©òâŽ"óÎÄ_¥"÷‘­W®â/R¨%F¿Äê#Âš|>,­5¯ï|ðöÎã™Z¦v³Y£KÓÍ4´¾S5ò‘ˆ	ücÌW´Vs&$%”°•P­3þ´#¶¿¥¿íöÄ‡ïíÜ¥qIŽƒžæÓ`Í5jÃ<Ùk%jÓ‘?¢ÙÒ#í·…5‘Z¨Y‹ö"°öúŽryu+ÉVG*Ö`µã,Èã8Ž?s$‘Ÿ}ö™›Ê_XÃcD¼F!ÊòòÄ5¦
ú×¸{ÕeÀm¬Ïp,xŒ,/Áoø%·`M¦â‡‹Öä”µkcê•ãKçD¨YÓ'I`µ±r‰[¥f¹	úá:)Š;×±žÖVù“§­¥5çA~’Ýhí™ç®ÉA¢xæ¹ç†)tž‡ÏnÏ³¾=ß,–T¡¶r›ý½f1•;UÅ-kþêeI@Ù™ZÅˆšj²#‡êýuHNi’y2HÆ¹_8¾22Ä–ëJÓ94§¢µåRVÌø²LF¸”Ö¤í©bHC^[¶´¶œ)ä AåýtÖHÜ—¾½ŠçØ‘ƒ1é'¤_QK5•¬½(/ÿ'Tâ“=aXø&Xã°´	x4ÉK¡¸f@â›«µ%;ˆÚ¬ÀAlB²9}'Ý;=Ï‘i‚±¾¯Ä´¬µÊØ¢w41­±l:±¹¶ìEVà33[VãÞa¤pñzDâŸÀ<KØÖN8,6utÀÖî!X;Ü¾ºE^>3#cœîpáIÛÚŠ[ŽwšF1(xlðÃ?Š¼Õ%Z½Õ0‚D¶}õÛO?mXû–„µÇ¾dã»Acc(G!frSŸ]ß\÷t6Û;3Jp[½±ÖœÉI„ì’{åÂ…Š~…®T6Ëû+[ºya‹ß~"RÕ®o<|´ÁÈ–,<‚ldáHNãàÆ•+ôZ“ìö X_EØjƒÙeù=;ÃÞe£ÕÑø—ÿ‰­%²µ*Ù‚¼v×b³l(-Ú/´ñÓ‡?µ˜&üBYcÄX]®[‚c•©ahÚª‘ßë7¸îU€ls°&·VÈ™Ð°xíË3!Û¨Æ3¬Ee­¥ÛõÉ2ön‹È T1iyý`\ŸéÜ0ºÏÝÅ³’2Ñ¹ü7b¾hÐÕX³:,¬±ƒÔm c|bX;ë°Åˆ¬F¤¯ÖÐÕˆ df7þ®ã!‹k”µ×ƒ¶F¼…µ7"§™ØZZÓ°kw ?‹’Ýƒ`_ÂÎn/+Ú`S¢Ý¡”n?XŒøæÏþãwú€5PM¢ÚY46`mW°æxÏŠ™yÍÒÚÑzµpV/Öº”ø¨Pk5Ôr!Íh™þÀlÃšY-ÍiYyœrÞd×‰búÔ	&D6nƒHÖ
Õ_à™o@;¶{¤Vv:ÉŽ¨G&#2ø F™¼NÂt£$§q1M"¤"Ö¬UÖBWì»‹µž_º5ÜÊÛFWñÖ<vBì¨ ›‚¡#‘à°? xhàÆ×4†/²Ça†³Dâ¢ú°¿47¢…t¼Ôž#@k:ê†à´e®öös«´Ñàe÷gå²˜ÚÐ§‹‘…lúVªc
m~€¶À8±‰âÀ·òï‚sã•ÅLjfÆþ4ªŠ °|!;MÜøÐÎ‹B;Pg$ßW«¬0¹p‡‘Yln® zÊºÿY%mË~á vŸ]J¤äGÈæ9éŒb¥7ÖeÅ$£^·gd÷œÚ©ùV‰7úA„žuÀ«¿­­åëê(WÂ¾²‰Ö»«³"È¡ñRºU1Ï¾5©Ö}_›f4X ¸¦ã$~¨2}Kë¥Ñ£äÔ‘‘¸#bÒ²º	«m41t)=¹98œGÇ°ÂÌØY†_BkÌZºw§þ.<‰öw|ŽG¬=´˜'JãâÊÄöŽÜ ©NãKµam/Ê#´ª³“‡ºˆ†Š5è(5«ñä!V‹%k‡“ %À'Oóédaíl´‚üñaZ;Î‚<Žãø3çA
ÖøƒüŒ‹@§AÊ<`•øè£µ¥ëk›RÝ}ÃÏ°¶¾|qm±Ô5¦=Êº—Ö–uFþöQZ»õq„µ j¡%ã ­®ôªÂ2¹´”LÚn«X./I4”öXƒÍj×¨–®:²Ù¬kìðÙy÷× µk¯â.ù7ö‚”!#1ÜCGÔÁrn†òé…½Åy¦«
7ân_^Ùºü?.oÍ–Mî/^])U†œArD-d¡¡-2'((bºÂ€dZ®R2Ù¢0qíÎêoÆ÷W“-‹‘×‚{?´Fš'¸øóßýJ¬fyVSä2îÔT&éVr	””á’š:PJå‡°žr6#ÕcÐ°vîÒÜÁƒÝØ^òþóÖÕ¼µ/ä¥¯|ïù§‚D7-Z ]ÉtÆ‹‚`´¹ÛÁ”laMç™V»:«tÔ
ÅbOlÁ™˜-Ö«±òù µVÙFB™Â†*fcNLQ›§¹ˆ-ËN1ÛLW†Î8»»¶ƒì:klñˆ"*hÑ˜?8¤«Å³1‘ñ$ØxxxÆêl¸ÖáyíU8äUâã_¥^Í®1®^MZYW;ýá¼õèÑ­G=§‘ƒ£„û¬ÆÙÒÙKráÉh:½”H¸Y|™XZžÌœp¤ÈÎÖnÖðÜVƒ©q°g.|º³e/\GÈ†Ë’ïï<Z°vÃÖýmlàá¯Œ;<ä"r¸#AåƒÏ£šYû‡w	VÞt>YÅMûÁ³ß"°)¢¼v×œ9ñ}²!ßB`Ê?9ÄÁu°L†çxÇb	É{*Ô®ih^ƒáž¸ô"‡­¨A!XøÃjò#Áq'°Äy±Z»Œ‹7ùF[Yãy¸½‹ÃävÔ¶ÿ/m²X-´Y°HZS™Ú©þ®—\Ho¡EPà¥dÉ~|ým×8‡ÿ…-Sgý;bËÚÏCÊÚ=– ­}þÉÝ³Ö¼`Úa‡|d+ÐId>Æ¦k³Âš‡œ-y3jj^;Œk±j-k‘ÔÇ¦Øû¡¹Úß#!"»½½NÀ8ØŠ(Úëülo¯amà`à@–wzÉ’„Ñ0ô×.?ù“;AYãÑ!­Ýêà4ŽùŒžz¡`­«%‘)G¶;$˜PèWÜi LÕjŸ»îÃIó5lÜéÊœ:áb0ñN¸ÙÃŒ•]´vzŒ`?9fTÓ`M’:N>ûpûÖý1RVUÿ¦²¶y²vy+³ý­omÓÌ¿v2½ÐñåÔo+mƒÚØø(«¨º%Óî’íÓ!%‘ô˜~@‹g
c˜Z¯ùP"mV“È6¡íò˜"Êq†ýeO¶Ëü*R¥ZªÔHÇ–ÊhoLôU™V)TãæŸŸÎbX_*7 ‹ê¼„5ÈfNE~œDueÏÔûÆÕÂHa†×¤‘° }¾nZ@æÆÉ7ÉTF
µ™ì,íà8’™Ö˜—æ†Fpß©©[5/1n„É…ä•
øÕe~šÏ9h-›ŸÎ£•Xë.Ì)Úö"Óêa]ÅŒd eÉP#´ª©@}Ùøœâ29[™©Ôya¡™'’_.¦uOt„=ùRr/¶DÛëâä<ºq[´Æ-Xt¶ÙÒÐíùYê,z¿Ô23:ò.ÈöÁj©43[*Ž)¬ÙênA0~<kIP‰‚fZa»^M‹RäGkFµ£Y”P~ËErŠ{2!·å9¨Kg‹ÕØ†Û‘j¼Æbm­Ã6Ëë˜›Òž8Ç.Õ,­9W¬™Õ”¹³qXs¬Ôb‹µHjÇYÇqvXÃRq=ÂZèýºb/Ý¡cu˜EVKT-Ót-5ö
Ñbµ‰íüo×ßûÓ<È¯Çšµ°ºv¦ÑàhZ7Ef2'ËMòÁË|ÉTM]dÊÅUÍÀÚLI°ÆÍ´Å¥÷ßßøàƒÍ±ùA¾mXû«Wiµöw_UGì	e@ƒ£ÏOŒM6×š³{nE3S›Ù›¿½0»p{a¯Ù(ÓwmåÍ•™-Ç±25?€¼yÕ]ÖDk…l=•=‡1½èM6ð•ÕÙnT3gWkÄÿT´ÝûnVSSl€XûÉÐZ¿Ü%RyÍdD^°F0§â	‚ÿÀ%¥=JS \Ç°d!8ˆ÷ˆÉ¼h%¼£]“òyáÅó/¾€r&e­ÏiŽø‰€hxô›ïè£Æ9ê€5Ù}ñSb½š‚±v¼AH¦¡«9DkèjtÀ¬¦À2ÊhC'|êº¬Us¤>ò–Å)jŠƒ- f#8Œ8iùÖâÁZó¼Ó	k‡îzaJò~ôè·
ÇÈ^¨g'³yºkÏr¸÷V{úcyÆü<Â¡š5œ"_j¹öc.‚ªF%·„²P.“š¢¹YÚòÉtcùŒ2µNr)Åû8QK·ÄÄw§/Ìß(Ö0Æ\âò†â‰ÚÌ7ç§€µìõ» šŒF¨X»¡Pƒ5ki;o_ÙàŒÇlî¢½sú°fUÌšÙ»ñC/Äâ@+oŽÆ?x‰ÌÖÒØŽâZ¬]³¸Öî»Í!j<qMÙb„7#÷rC¢%«‰âp¹ô½~ž»çÈr|>¸=B(çÝ[¬æ4@ZQ„Ž€šŠ«¢²f`‹¨v4RQX×PÖ˜}`5…à«
„‚.ýÂ  [§A:+RrS·Ó"-ÁŠËÖÌiŽ×¼ü§ÃÒšÆfµƒ”58­½ðT*äîãûþQ¢K¿¡ð‹¤ÇÈoÂÊðKP¤•5Kk±`-*kíªµˆjÖîðHãˆŒ&LýÆCáž
öp¨ì&óéìÉ}Á‰ÌFœ¥¬­÷,úO‘	éÓQYÁ`Ì`vXW;R°¦×=Þ•ŠN!ÕÑ-²Y¥ÊÔ¸âV¢#°V,HãXå¬Xì2ÛÙaYËnÂ¶îp=˜?Ô?ãf'Ü[¯tÞÚXM®äé/Ð’¬FŸµ(¬Ee­ÓÒk{Wo—š¥ô'föÖ“So–¬”)ßÒ^°}d”&1…sÚ•ŠF$9ÎÂ )|³Öždµæ7ñ·¢Kû‰x›plÖÚõ×aÄXÈ©NÚ]˜ûßg¦mÔˆT­¼¬ÞØ¥Z&¼õ¦f…FãµT…I,79	âdU±]Y\\Z¢ÚzJšjZ]©‡¤:XõšÊç©î"»ÿ¬Lz²šÃD27»µ’åjœBçJëÚ¹ìÞÔxeJ¢ÔH5“&y[®À—¦ÏWÇqM¶±m5ÇwbŠ£.yœÙ-Ÿ)R!Î˜¢¹*•ûû•SkÕŒ,{ø‡ Öææ˜#½Órs@Í‘«UÉÜ‚FQçŸ“Ù(!òåç§sµù„?5úó#+[Ùî}&33%~„É¤nnÙIL«)0³j0×l‘Ö:ËÇ(WFâwäÃ…×-!üV"´Ÿ`å7–V!lÚOÖðQCëk¬Y<6¬E>|ùå(¬j÷´ÚÙÞ~4ÜcÛGžÁÒy !mDë¶¶Öž,#ª¦5°Z¤µÐf­SX³SY=»°Z"º‹¬vkÊ$ò¸#öqÇŸ7ò?èOemÕ¬ÆÊ´¦fkKkõ³**·ÄÓÓÆúl©Tk¬­/Ÿ!à7’ ™mÞ{cs££j-­Ai¶g	ÏqDæn^1áÚìœ%kd?rÃ9ºÜ,k,×ªÌT°¹™Ö\*¾ÿö&}Oî¾L–åË/½­ñ¥ŸþZ°Þ%ùQ¨ö«áûßúÛ5)÷öÊÕ*·™¥¸£F¯µÉf2Åç÷åjh?[—¯¾253ƒí#b´¡óùLXKå±&&Å}üÜ2Bjþxvê›7WÏ‹;6u8kË¾ÿçjÇ}?èj°!XËõ+í£[“®YJKÌwk/mÂ4SÔœamîÒ9rÁ\§v¥8Ö^€Ð µØwM°Áé˜´6\BäÒ'gñó/b×±Q¸`ðrmv’|G
Ö¤àÌUWÕ¹pM Ö†µs‡lFDgñá4HœEÕLeZ«µZ¤5ŽÖ\Ñ¬9Ý$ë2µì8£šP,ÞuIšs5ðŒâ•÷#ÁµF"¤¾Úiv‰º«N #âT¦è¼ëE5ÂëvÕšÚbÿðþÆÇ?ÿ£”5Â>#T¯™Õþøƒ·¯€k=ué§^:¬ 4š9é:‹½ÄmÉ¢eHkâjŠí]-aÊÑÚõ;3¹®ìÊP5•]¯Þ$ªÙ7.\ß‚ñ×f[ÁÚ©g7vvØÈÂš3ÎÉ}D½5þX3[}a¿|÷—lþû~Ä3Ä¯ø£ñô€Õ/y¼Ë8žøå¯øî$ û!‹™-êk¸ð)]£ëšœFxFó£MkkvyQÞ/ò¾:¯7´­ûÙ™“ç#'¹Oqn:¤:ŠVæžš¦2L»Ê×6ÉIe– "¬½HM«6©y9Úc§CºÚ_*20×€¥*¡ŠI(ôÅ†ÏzE„lÝ­·_Æõ]½	h#™üæFôÍŒn<j®Usèh×,¬ýýëŸ<QPäÒ5`í,ã<>PíÌj,þ.îº"nÅi¼@aƒ‘£ÊZ,YSù+§Aæµ¾_xàÎÙð	—î÷=uàß-Á)Ÿãîöý¡'¶ÙŠdD†Ù}O>Ë.'¤¬A…Q]3“™Îb°ËÒ™	¬‘eàèœ9‚]?WÛ]©Å„`2£H–ƒ×ÐhÔ`K³“tÖ1dƒa?Ã“¡§4ÐFž>*š²"OžÙÐœ¯&†Õiká`š#ÉŸ-•hÃÛ±fM¬vTY{¸xyžF£cÉTíDj~½œÞºzHãß;ÑÑyŽú†ì{|ýPTÖrø÷	3À™R†ùSÁ¿+ò]Pïxß¯Ü&[wÒÆ$¥ÈÌ$†ÉÅôò[‹Z@•~5c¢š\nê™âòRª¯5@ÛÛ[Ë€RiS JI)’“åY¥©ë^ZVW­q3—Áºc†Âƒ™©•l¦$þ¾jaè•é¹ñ)™ú‹ÕFøVµ™ùOçÇy“ÉPVˆÕ$évd6KÚH€Öãp‚^'µ¬:Gpë’µn FiMy‘½-’Ë)žUþ›t{3†Sf%Îäëëãõ:~Õ‚Û©þ:•ÓC–Öhê)Õ&‹e,)	âÚT–Š¶Ùf¦:‚t#9øååcÕîÞ}[¬vw“¶A3Ž¨‰ðØhÈ\è®àDä5º¸Íšoá©zLG†¥…güžßòÇ=˜Më÷4ÌH‡C0a	ÖÔ;6²±ÿXœY³°âiÓd"°a­]³›¬ÅŠ5ëjÖ6O·³ ;
Ö¤ªiuœyÇñï /v 5áwíkŽÍï´zvi©ÌD*OäV>ý©Š¥&zšïÒ°óÌU´Û²);
kAZû0ðÚŠÁu{¦¬O:f½`Ô‰H³¬É82ë¦3øè¥ÉDqÛÜ~|çÕ;´[{VÓ—´†j÷µ¿û;üAjƒÀšXí>ýßš{‹Í½õD:Ul’À!ßyhmr[˜‡ÒVP|¦pï¯Êþ—ú+ëF—·¦J™\½^Èåm+’gBãA‹ìJv.·Éñ€5…i-ôZ³Í	ÍK@5ÃÚòò[ßùyåõÔžU¸÷.!nÈªˆA»ç^„´@1ôƒUÛê8e9­k.åáuâ7ÉoÑ^Dr°ý£ziC\—$B ™ñõÎÁjŒùG6™ƒ•t™—RPç%‡aÍ›éxP>Ü®a³Z`­W[ë>`á9¥aC¸FÍW#rnIî|ÝÚÆ.0Öb„
ó
â°œæ=sVà<v[/9k¬áœ_#jpŽˆo¿õÝaFTŸfD“´¥™ÖBüàe•°žNÊ\•ãrìéñ{>qbTyÀ\“]¼FbÖhÒe)ÔÕ‘åw"%V«b—¬5ÏÖÈ&*ÐbV7¥K¤EV•ÀÙ¼EäêÃRûíonðg·ý–YJ3¦	ØtZÅmÔì|n®2«ýÒ¼õë_ŠÈÌf [ñd¥ÐbøŒ×¼Ô'9'Ü3°Ey­S\;Z¹f§‘‹Ò×¼xc€ûÙ÷?uç´óî!ˆ)ŽÂÅk¨Â¨iß{žJ59Ûéð*‚ÑûüÜçÎ=¯{@Ä€`G‚ØœIn1:‹Ö:!±h-þÁškÕÌ®Vë@˜h¹¬ÁM¶¼ X­ÕLD4/½ P}|'¦AîŠ-eUF÷´†Ò:kÖ”ýˆk¿PåÎ¾™(ÌZ^4ÑÓ6î½Â0Gè5±f­j!ëÑÊƒ¸Ïêpìì¸8îàN¯ê]v÷{!GHQ Lè—²ï+5!ÙY¨lwßÒÚ)˜í'{ï k:­ûõˆ~,„V´+ÖŒsAY‹fì©°æHvºØI¥»ˆŒ­ËftEM©„§äµX$³òê‚’Ð§è®–î:!5›tG¬ðµ¤¦u¤Ò´_ÃÕcx³VùæKw0‡m?|ÿ™‡Ï|ãá3Ï<ýeÊ°v»yeóÙííë—+µÙÌ	,&ÞlNMMZJs¢sëJ=“òmEiºfmÙúÛ†H®±IDÒ4Žý ÉÏ•.²)j>½D6—°ÚN„¼¸<†—è”dÈ¥F"t^›\ÃÍ)¬e®ªþ}æªÕz=[¾Øèíž\[^.c	ŸÍã©Eé:nÀ|"ïM¦fP²&—J’—²õü8ÊS¥\êFd9B%[…©.‹ˆ¶!dåÏ½r~d|nn<_ Ì¨Ý.ÔÊMU‰Ñ´åÒøÔ¸24^¡Mw¬©+á<:êäøø§Ûh
¶9ŽBntÍõ÷Í¹nº6	Åjâ4HÍkh,OtÒZ®–Jõ§ìKCÁBÞºà¼XÏ2ÿ ¢U¨S£PYÂeŒK'Gª•]J]§F®^ª–3Éçþ¾Œ€“:©ÇÚæõÿäÁMˆ¶V­ÐöÕ!Zs,¡Å0®;TÙ®…CÑ»%­¦µkã°½È=å^bÜïîéÁí»o¿=88Ñ‚µ1lŠ/îZÒ8FžýÁ€U‡ƒ¿Wl.šÔ´Šþ"G­ w¨}ƒÕ’Z¬Xë°‚<Î‚<Žãø÷k š"€šV×!iK¢ÇßÜj¿<¶4³Ð¬“Xbjá‚US²{$-=ÒZ´	¬ÖŽ‹šÜ¤R$ŒÆNÉKXejëëÍrqŒcž¸˜á2Ê&)—®_/ob »±ºóÎ½p×ÞFY{ø‹Áˆ6qŸO2Ûðïî¿Eîíñõ–)Å.Í31-PÁ†-ÔBeê6Ag>Õ¹…¸Àì•WÛ	GLÊ².œ.8„‘¾ÞÏ|A€
SWáìæîîƒL‚#¤úskê›üµï~ux"ÀÚîÿî­åµïüá­5î'ÖJù¼‰éˆ•ÒHú¹$Œ>Ž½—l¤ð"Ua0¶´ÿ™/oÑ&È‡Ô•¬sÁÀ8¡©©¬ÍånîQÅØ]µÉ8£	@°wÄb²¥¡‘s¢]ÍyØ‘D‹[+t}x|™ÇdÛo4sÈ`$4Ãf55­hg¥e.ÂØ»ãa¤ƒÀ„L›!8W‰~µÝ6«-IZc­MÕZøFxkØêi“™ç6¬…«mõèYÌá-&LjÃg:µµk~ã!#nŠ’fXûö×Y1àˆPí|‰ÙôÖvPú´Ö{4‘ìáJXKLÇŒúºLº—n¶„u€X-”TÓt¤S•›U²"ofÇg.€g+YY@
ÌBÎ`5ðL™‘àÚƒ»«ÚY«=xxåáÝÿô×ÔÀ¬w#€éñÓ_ÿô§¿þ5ƒÿ¥!O°òY/¬y²j£œCÜGDyí0®M…„Öh’-:»8-Ž9xÿá-Lú£$[Ry‹ØÈå¥yˆ†¸†HL+¶¯H¾4GÕœüv 8ÝŸxJù€¼óç$	§P¸6_3§u²ˆvÔR¯‹ &aíu`sKìàƒßÛ|'m©°‰¼8BÒúG‡š1¢ïÔAÞ°fPsÔx˜ÕbÕÚ!3H#›žŸÓgíIâ`?Ht5ÁÚ~0ášTŠ°F„”PÎ´…µ¡›q-ºAÊšhÖØí¦Ø^JƒDëCÉ;%ïýþgŸÝ=pyžeóƒ¨éu`5­Ÿ}vcìNØ®\;ë'Ê_]a;b0bL3ª…Å¯£ÏìKœÊº×ÕÖDåh§X!4Î°t`D(³ø‘Š…f-ú¢øK‚”p	nÓ\¥é0x´™ 3´¯¤¨ˆWêkp]›ð.#ÃÏ<üÆ6ºÚ3~5
k1¥An—J½ÿþ•G·¯.dNÎl¥{no½ùæåEý(F2-Œ´ÅH2¤CjhÓH'IbóoxäÓ€¼.ütÎ‡¤x³:3*¾bÀèÛR!—™T“rOf¿ì‰í ´2¬¶¼¼”X[œ¯¦Ê¡Q:ƒ,5»v±‘«—××&g+”¥M¦rÍæœ€¥Æ½ËÂ\=™œQ¦z½2OaÛZbþ6zDCæÿÉ‹¹ÉR5Õh`?’òèp-H†)®­51õëï8,vÎwí(JþÕš†’ìz7yÝ”~wç³Yè«?·|yòB¹ºn[ÚºÆÏ
î†NØÝÓ2±`V#ýDÑ@Íål…¬Î…žêÊç¤R‚Ÿ¥€ö§Yï7µ52Uëâ\i’äEbjak
ÖBl–2]Õ~âÂl©9úe°†¯Œ`Í]ÖlÛ¿±óãë³“é®Úüâ¤§/þ×%Ü]Ï‘”ÄÖºhHõõ³·ˆh-Éð4¾ýFµ#°Þl5©y÷ÄjgÞ»÷ö³ÊbdØ°FËµ3!RµØ˜õ»býÑÓÜ³ZìíùM#6°fR³k¿…µÎŠµ7ðÙxüt2º‹|Ñ›ˆÊqœyÇñç÷ƒTég×?sª².Cc'õÅV\”»ð®L™Õ”¹F)›Ý ‡å-ÒàÔ{ºèÖÚEk_ÄD²u­D2ÜWn®Óq{2•)ŽºâÚ©à=iÁZsqu5¹‰®Ö,íÜ»G™†,F®8/-Hkß}î1Pi‚¬n*&ž»ÿ»ûkëßYß›Ì”ÑK5µÇžÑ¦*ª4~eK°ö
‰ùÕÌ,dpâ-†V€¥¼Ow÷M3Á!S…|îTAs2\wGÈÜÍU¤5hí_íß/‹%Ï1Õ?3qíšÓ í/²DÍÍoª“ë´	èïÍX«c*!S,_ö‘x4m:ƒ¿žy=/<£Ìƒ‘G¹ÊåˆN+‰@t¿‘E"cïyžû»ÒÔ(¼™cÒ:Gá³çó—‚À†‡…¿MEX¸<ÖÀº¥CºÍÿV%jlíÜoiD3’y­¶†5žš­uOsŠ•ŽNººhIÃ¯ÔÂu»_¤©x-Õf3Ö„O˜ÛLp^òv¤y¢-‰Åc[È•5Äµ—pþKÂNZ ÙÇÏ\”½J8÷ñÛ_ûöÏ¿Ž-$»œU¿ì[oßzIæ"X2;Ÿ*©»¦¨fìžÆiN)À²ÁaÈØ˜YõR	 ZªdUà‘Ê¬ÀjŸÎ_ +òæõäŒÞ¼~ã›CóÂ0 ø?¿ù­¶èjÖÒ67A¸GXÑÛºš\#WW?øXM¢šìúi 2«ß{Àâ§G†û|…V|!¯µiÍÂÑZ×ì	¤]˜&×VHn[†5 T#Ø´rà%ªÉç¼²|ÏËÅ”·1Î¥êì~nè¼ÔdH\‘AŽmÞ¹žã_= …Dj^"¨™ÏŽæA:¬¬ñ¤`MÊš‹Õ ¾CÝ z½X¼#cã®#•œ×ÛÏg`M5sRÄžÜíË?y·SX3ª92¼†±ˆ.Vca«>kHjÏ*ÏXS@k„~ˆÉ^0š£ke„µpB¬Ó ùªª¬Å’5ž†4¯clì«U
ðä'ÃóàÔÙý³ïcÆS¿a­o@’Ô°dÃ€–ppšöÐàöÙÜqbäÎá>k<d Z[WÓ *ká!XëV~£ÝC’iüLÒ]6L±_D6+²	×‚½™bm’F1É@´–î²¿Uñ…yê¶ý^:r
Óuþ!‡õ·*wÆaî?>«žØ'N?ì„µ§Û°&)}ýúÑöËo^]Pî|²|ùM†¥Fs¾ÄEº.ÓY”sé-&tÚ8âB4á#ó—›°É¤x‹–Ú†³aWç”ZR\¬ñKR²–>•´Ø¶Ôujéâ[‚µ%Ì²˜Å°3"-e­‘ÊL.Òî´Z˜]\Çt„Ž1€W³A	A#SÏnM^Ã½¡2|'ßåT-?XV¬Bi+(cÌ€‹Eêá®ÒKå¥€|=;½(Á›Ÿ{¥qU‡ÑäÆùSYÙ×StÁ–Gï½EçhÒ=Wg^¥€®š—;Àé¹>,DúˆkŽºŒ}Ë 5-ä?šÇð‚,T½Gö¬0?«gø pÈ‘Ëãp’£HNÛLÙTIãÛ„ ÈGl½:I|­`2R¡ÝR¢˜9‘Ên-lñÊ=Ãšñéˆ½Èr?@çú€ØùÉê"Þ2“³Ôé§uÃ´Ñ(7Æ»ú®;<5IS‹©!äB²|¨l£ß3|Ç÷ž½«bµáÑwbÛ¶É³·	dì³¬ñ`ÌŽ!Î°Æ·ŠaF#â<ÙÒÖÎLÕ¢qÿ¯k.X{ã“ÿüú_ï„&+k‘Õô ŒjÇYÇqÿnò Èr•§#²šyíLµÝntym}}ùbLîÂIRé™<Æ¨á~vûÑ_tÔí(Z;¤¬MÄì5&0Ï¢å"¬†11¥ÓÔ¯­Q!§t{.¥ëkÅ¤ZS>˜©ýø{¯ÂP«ÕÚ‡ÿ}±qÎ?sXãÓ{ûµûk‹ßYç“œ-6öæ++Dvêò–°‚¹weak‹‰§SÐ?›d¡ÕZ±œ«çiíi©s;´sÆw>Ç}öÂ2"6Z½ÖÐÖ.ä_å¿?ŠÖ"¬Ëåö(këµ\¿£»û ¿jž«2;Örç1ç'H~Ïâ7”‡–ï#Š„]!ŸrØÂ÷:³§¨÷QÖänÄ6Gpg3?Àq$5&×ó}s š	LÉd}Ó‘ÐØ6#2ä82öQAšaD“ï£ÍDÜ[Î"xØñÑa!™œ3é±FziþÏú}éwèÒ*GBÐçœÌÿ¸c%M+/ÀÚ!»‘(‡èq˜à‡!¿ðìUkŽ°õq…O-ªÓƒøÐ8&Xûð»n²fX£sâk/Ýzxå%Ú¬=RrËèðö mú™Fá³$õJÆBJsK%"$B:ðÑ…fªàÔPµËýÀÚÐÈ§ŸVp˜¾yýúÍl…{#¦~=ûËšËo-­q\„æ»'¬^y¸±Êán]-¢šÐDû=OEXÇ¡Ÿ¬X:ŸzðØFDè×ìâo"jÓÚ5*×î+ò¾Í˜ö·ÚùÙýïßÿÙšr¿¢J5³Á[ýR.$"õX"›;"¦¹« ëY`¶s²œž"¹+¨Fô	´œÉ„}ISlÛ ¢’ä&Lb}*vÞ¶à¬;( ‘ýê8Ï¥%æ„ì ¹:©˜s’¿úêÕ›Í;Üré4Õ¼t4Åö~4	ñùkwé‰½/
¬¦5Ö“×”é`_ÝE´vh`ñmÿP½Úkí¾Ø–Ô¼°
¶¸¶qGôEâå.òXÆwGXsúc·²>¥ÙAc†µÞ~­ñò®Þvy)›;ò¯Üí€5k<ÍjïuºA†g´!^6¬	xMT¬á´UCÒñdÑG	:¬`M¤%§íž,&•ÏP‚¶ÓÑØºNYà#1RXVl5›ž ­P°•Oˆ%mÎžø¼”¤±ô‰Híôémù‹œî‰°q­ÖnÝÚ`Þ»qûê›Ž•tå*±°°0?»0KÛpo$“Ca˜CÙ—Ic™uvá%4qøA2F9lÆþ˜6œ®#®åN&é±Æ[t×8~7JŠ\^.v¥@ÜÚZ#Q¦¶Pc¶L*³Íty}}}oq†ÙKb#Ó]kÌÌ7×ÉJLÕ+S L%WTÖ×2™F#“)¦êY|SÝY¹oŒLŸeam)GôÕËK[®/¯ö5…¼s4È±`2ÌM6Ë)àw’ñ­æŠ-Ìú™D*‹=V»á0É_çÏçó WÍ4Ý@²^g2Ðä©¸­áÜaìG·^Õ†ÚÔ8Ú¨ó• g•àÀ§²–Nñ‰!
}áJ…¬òeFòU¬½²³ØJ—‹²™ES¬–ÊKÅ®Liak~‹©j~©ÅLnŽÝi/bXswê¬¡¬5SÕB¨©k Tæ¤všIAºkØb†-·¡YË'´Ý+”²5R~PÂª)"²	ÊÚktdè¯6<ñÈ^ _«)6c›gyè•q¬Öb´•µÁûŠ¶dÛ
2$Aºaç¾ý›»fµv‹µ¶gˆcaí8ŽãÏkÁßâƒÏøóô]/Àšcûâf‚¢DO’™O‰ŠËkKËÊðà™L•5M2Hþ§q‡¦SZ‹y”¬9®ñ¹eðóMG°5Dh8éõ :d˜^(^³ñÒR:“,6Ëdró\egJ?á£ìõ{±/6vëÀÚ×%9÷?7xQŽŒ¶d|k6Ý”8c&¹¶¼´8{’àQ™’¨ö¯kX_3Uhœ	¬á[¥øs`È4ŸüÔ±US]]|B®ŽÙ%Ì»7o<x°jó'±´LF_dßÿ7±híÐù+eÜµÖ¿Ó¬Ö‘ÕZÆrõé9ôÕyÊê#˜† ¤Áa’¬C ¶©rÍwÉµ>RÐðZÀÞÑ6#|NHiÜ8áª69B¢¡ÅDHzëÒØbÖ# Gå‚†/úa]­IÍùµÀjçüþ%Í¦üq½ÂÂy~‘ÎT¬(#’âJŒ™ZÖ(,Œ¸ÉZŒ,ž¢üß%'e_æî±ifá™ƒ#ÞkÓZD­ÖN›×¼ÓyL¬æ°y?Ñ‘ù¨Ý£¡3ÃšçÎ\ÉŽ¯þñW!­kºÙþmP`ûqëáÃµy´Í½ükNð§ Gæ	å7Ij;#7nî-$döæé!F\p–8›¶Êøè6G?
Vû”·ÕÍ›Ø…×LÛèÚ]t‰ƒ`Ûõœ›ü‘›eß½òhƒÝÕŠ¨fI­MgÿûOã÷ÿÖÃ«Hs^µ€­­®×:iM¸&m9Zµ	XÍ®}ÿ•ï=wµaí	ÃÚôÀ²>°¦wÝó$ýäxSÓžDHåö¶î¿×C
$OáL«fÍv´+öiM¯ùÂ’xíXæNòO~xjg :n¸!”ûõ£9I'(d[ŠÁÀ©Z7˜
ã«ò1°‰Ç¢²Æ¢8ji]íïQÖv ž}‹TÕ€Ÿ>£¥>c!Y‡¦Æé„©1q Tû'­Úá”Gƒ[ÂÂ*Æ†“µ'÷‘×öƒˆ|!!SX_ÁGÞåŒ^Ò{€_åAHŠ¼sÐ{ à°ö‰FÑŸ¿ÃaD;nVÖºåîˆ{¡5K² O¥RÎ„„Ö@µD‘ƒªXãÊ^ú”H#YÁr‚µ1ÏöÌ'HœL:!2å@A®?‰¢”5þ"+iÝjôŒø
§<]Ÿùªxì™Áí§*k„am{ý£[?ûÙ/æ//Ü¾j\Ûª «áÌº4›Hp=žeøžª¼D–$¤ ì«+\Äµ3êVÊ6i¶ä hÆiåvÚŸßØ†€˜¹QjÆ]bÆmp }*SÖ–“F‰ô|ÃZ=Ÿ)/¯1uî5Ù”S©r9•^Ã¹J­l½7‹Ã[RÙî•S9Qé‘F¢d¸ª1AŽÔ©îZ_.ç «|^í±Ifœ›^nM‘	¬ŸË4R4«F®"K…8óUì³øò87"¥ê Waè<ÄDáXÑmÎ%iuÞc!¦5Y±²¦Íˆv6õÀn14_öÒ¢;$E2V¸JäFr8»ñ~TÌÐ:‡Êg²Ì<å.zöl‘YÇ³¦P™™©ñÎiÎNNÎÓ·`q™ÿä=rl¤"ÎŽ*%QÕ	k¬¶Ó’Õ~²³z}ë~5‘ 5’X›“©Z&i&KDV# xÃÑQœ?È„”ÃMÏ˜A­j<|KXŒ!±š‹ÖFG¹é 5´³ÑA1_Òk	ã†öC6¤uTtæþ]k/³ÚÛ~}¼þùÎ';ÉÇÍj<ôÃñÿ½óûmë>ÓüÅþ‹½”Ë‚!aà’"t1"‚P–¿!d@³d[¦#Nb[VÝØuK­T,FiSM`IqR´Ê(Ø@"s•"«jccV(úãbh¶Æ"›½ØËý<Ï—Ç«X,¦@.ô’<ç{Î¡EIù=Ÿó¼ïókÇqß€<HÞŒÿ¦^kË¼Gí	iXs\Z&¶ °r§²3ì_{iŒ¹jB%“G6·J\Úò #Rã®óY'è³ôŠn1‹”ÂõŸî¨VKsi‘ÚÝÀ-77¢–6Åz|¯RÊoX­ê¥<HZRÛqìcœÁ5ÅOWWŠ•¤ì‹W‹;ó‚Š+åJiéÿÜê»¶T&Æ4…FÏá`
ëjúT%‹WµÔ¶8T—4×íj5tÒàïñë¸×ÙùÌößµº&‹yŒPÞ$éP}±yaKkrÏ¬&
·WÉ£”ÉHfŸÕ7H_>	åj%_šû§¹­šŒÌÕXYmNrÔn±‰’¬us©_òÙeã_‡}šJÔÜLM°væ°›´–š°šY‹xÝ7¡CÚº%¢ËÀd2ÂU|× 4Qkö@h¡‚Í¦9E“5óˆ¬¥*é€rKƒ¢“dµ’MwÄ™}O¨ò<!"¬µµÄ&DamÅk®Y‹¶ÌaÚn÷*ö¡H;#¼6Á9Úó#CD’°6öp mÈ?ŽýÑkÖAZ3­a.rîáo<|¸?¬óA­”Ù?;Ý¼h¯ä]NØèòG‹FjÅŒáÀÓB~®„>›”«ˆ*Ö²\Xúío¹Nçôÿû°vBƒÖLfx‹¬“ïh`³ý£ôµý}šJó¦¬mmïƒ7ˆí_˜ÕŒj¦ýGÄmÆ5Û?þ¿Ñ¦¨kK\ƒÒx€jl³sõgþƒ3©ùnwÈÉ‰¶U_52 µ‚çØCäùŸ=÷š…â‰)#'r€š•'yƒ‘f«µV›5ß¾FYóÃÂš êÉ(0Qh²¦Ø¡hMávØ2qâà6¡˜ê­eQ*¢µ$°Ö’Ö"ÛGûAqí#Ö,´WÉšã	¼õXÛÝõ3È—{Y¼æ°¤‘¬»U¬Ù@Ú¼Òëƒ#F¾‹ÒŒkÜ[}ÖZÚÚç‚µ{¸ðßßeqp WïÔOØÍì6wï7aâ¶žƒûRÓ°ùÇÒ´¦ÎkÍr¶§ÊZÄšY„‡»a~ß°&;P-šªŽ¨R³H"i ³°†ñ£FŽìçì8ÇAf;ÚË`Ä‚‘¢4ImÌ?APsb}5CL+.'
ð¤ˆéœî’T1üJèˆ½éžØ‡º¬5QmÏGç®íÜùä÷¯]»‘¿£96®yt¥>Œ«˜À'|~d5¡¡mEÑ/Æ"XãcC{Äc1•¶cW«…g¤]µË1ìŒÎ»+jý?ýøÒH:QT§œØ­Nñ	.¹4………Õ¹úÌ6WÆÍHY%3õF]½°3ØÜ§’eÊÕê˜6— «¿‚_c}g&•Aëƒ0åt¹2W›2XAf²PÞûƒS™$Ù…©¥ÁñÔd&‘HSÌÆç½æ†AêÀÇÓ5t-]üì%y#—`ŠCw£û6Î&)ª¥!«šêZ½ÕdyåþŸîº†ï•t_iEºY¿Öì±fXKÑ´Šñ k5ÌDpƒìˆ§{:+åqL +¥²œˆ)ƒëì,•°pŠÃ{Jë—°³æ¸p»!Ã±Xd÷¡hS¹ŒjšÕ>§fm¹tsm½˜/Bh¶Ô_ek	ZÀ*ÍÕÝ \`ï`‹ûi©a1`‰ö<_´‘Z{d$¬½Mü|K#ÒÖ.v;gZ“±È„´~Mepšv°RD¤òIŽtõ½ÿã&¨}«‘ùä]¬…¯»§Hè±Ö^°vl/rÇñ²á:
Þ¤kÁÀ_±â™\#L= ÖJcÚõµRÔðØ_Y!¡Ø"€5
Uþö‹‘Ã#Jõ¦˜^i0ñ±CMDÖ˜››v‰ÂÊ\=ªÃ÷¸zód‰­m>Cù8{¬¢µï¹“ñ·%ÃZT2v	Zc±²zw5K'«¥yz¬qáëÇ|žé§~2ôg˜xfJZ°Å‹s´“Õ(BVò|jé°6ÈóÍ!IG’ÊaånÞøüó;k|²kÔ­Eþýú.€5h¶²vw¥X\¹=]ZËÊïŠ|P2Ý3bâXóI`¦—Ú3`ÍåjÄó¶èçáVk¨hœŸ‘FÉš¬Eô,•W`6	†±-îÄ†¤Ù’©V°Ö7ÁÔ§]fµ×!±()Òá¬Ç°O§44²M„Îi‡í£5û}Æ6‚tHÓœ:«3•,Ó¬4)ÍR6“~±qŠ¾]¯†mÌS6Ó2„·£„H´ÁšÃØEÇ#öŠ,ŠÖÐÙ=¶	kGç1‡@íá¯Hç{kì!ìÿÏoý€^œ»µ`í+µY»H%Âþ‡cÃ¡‹¯«¦Ø§cÁ Ëa˜ùâþPlÔ5£ªÒV«ô¤ÀpZé´•qª8TÿÛj	ÇQXM2¬¦kŸ±ÒP+³,¥í†«ÔkìérçÚ?­-k˜å¶žˆÕ¬ª™ÔþÂ¼¥C¶‰k­	×Zž„\F¸CgÜ¸ëæ=ï÷!“ËkaMÁIŽÁò<dòz³hí_þå9§êòçî·Áïˆe
Š¬dÜlÍM±Áb-e­-Ønç5kHk†5áx$=M_’Fk2clÊß8Ž¨_6G](‡:Í·‡Ð—JMööì¢«Ý|ubÊM±Ûú¬	ÕZÊZ[WlEÀ5ÃZÐÔkZñR†µ ¡é;ƒÝ¢5[ÖÞý´vØà¡&«q;ÒhmËÊÚ™ÞNµ[÷thzàÖÔËS¬¸¶Ev©°•ëˆb{±ÖÁX«1vŒà7ï=¤¬)™Í¢5	%ÒÍr¤B2¶Ù]„]†6¢	v8²#Ú[É¼ã¾q(fs¡¶¯_×d¤gÃnqf%Î´æFX>¥ ”ÎzeÏ¦ýZk{‡F¾õƒo}ñ­ k+3¿ôÙg›³3ô[›”†ƒð¼Ö³±á’[òÚ{óñ“‰Ä°_×jvà•ýZcÈØõtºéQý·Iˆ7£¹\MëÀl†ÓÅþ`
é’ uUc’Ö‰‘FqQö4¹Ao#ª5i­Ö“õDAå±å¹¹™äL¡P.Ad™SÉL¹ž/&ëu._®”ß—ŠÜÆS©Æù%pågpJÆÂ%y‚Y$ÉEJò0¡:­Œp53Î©
³D¢ÆìÕ'à¥Ár¹›â2FKI@M+ÏÐo-™òŽMo*8&ŒW®Rëå«û%¦p‘Ì’·/a-#Xc–XÆÝë´JÎNµ„5Õ´å¦ã5uèö+{©šÿP:i%§¤j6[Vwðj8-§á»žjÝÄZ.ógÕ˜™LU§cC7iÙ®rÑ×rÍ9[7loÝ,5Ö/Nçëa¸Ãÿ×#4»±ŠÎµ“¡g-[‹zaHkÎA¼špí¨½HË~RŸ¹
Í	Î‡Ÿ›°Zä’5Zc5$w‘í­a82Ê!›ŽDxö4¬i5öÑB5³ša-ÒÕž(þþñööšQíYh­Ý·V;¶9Žãø¦ÄøOzc"¬ýïÐÐ{sX£bmÿÒz®1ÒOØ–«1W€Ö$1È¶³‘•EÆ£¤l`1"X{—8’iaMvDcö9¶ýmnšDG„´Ølnc#URâçæ˜‚ùrÑvz#*uºñàæ3[ëë¢5åß{Xƒ“Z°fM »ŸþRfPI| Ï*'£ÜÈïÌnÀÚºÅÉA3s«…ìD†ò!yWjÔN§R\0DL:‡¨wµè5”–ÜëŒ/o¿ûã'Vä1ò¬FðMÖº µ»ÄÊôÊí»Ål™t‘ŒZÐÊp²/#±‹’3i²Æê’ÐX„ruSƒÆdr™J5Ô´IZTM¾DñšèM™c²
òÄ`Ï“‰4á¤±‰n’‘,&z_BO³ñ–N>3°˜‚¥GÁ]Dv›æXÓRMÎýšjGA6B•jÜÎŒô"Ø‹°fÁÃZ
X#@5*Z)ÉN€­ utp'âMW‘(†£Á¡¢5-ÂÊøÕ¤µ&wá>¨`ä»G<½uÈè¦ÍöYÌÇ[qç+hûáÀÃ‡¿üêGoýˆû¾…Z‹^ËßlÐÕ¨h»zõ¡ºaŸSQææÙý°]˜0äs1™÷‹ÓN«ÕÙ¾Ä/_ ¦oòhkù8]ª¨Ècµ˜Ë¯éæ³ÏV³”¬Ad¯¢¥½*{sí†3 ÿÇòþšEµõÒÒœy1_È}]B¬­	äö>úG±Ú¿ª9œeC¶Óš®uðW<2¯¡ª±0¸iÑ¸ XƒÔš´Ö\:åwR2’ÔbBÙ¿çeù¼úe#¿¹9µðÄ½Ïš"SKY;’éÅÑ,HÝš#k‚5ÞT-#Vâ#;þ¸°’“çÁ¶Ôðn¥(KÀFÛ>Ó¹‹°–ÍÖÚÛ¬ÌŽ€ÚGÓ:ðš”µg¾v½{°û"ucgŒ¡Q7lÂë§Rš·xd÷J0óà¨¤3›²šS![·(DŠpÖ®º¢4’!w,¬Á¥¬ñÀä9
¾»È¾ÿ^÷™{Z:°+\k¹AšÂ«µd5+kf7‚µ¤5E€µŽ kJ7£!—U’8C)i-±¥º©Gv¸&3ŸÜ	7¸R)—‹Âl“2é•?Ø%ï~NvØ®È5£Â#éo#¤A²ŸHW†/€j/\ÙZmÖZÊÚ_„šµ‡?yôhff~vgÞ°vJãÎŠE~öÊ{Wª¥+ˆm#åY	~OûÏ¢lpZÛxŠª\ƒlÆ7Fµs6ü¨CŽ˜~¶ùÅ4;°éë)ÓÅÄB°‰\X-6ª4±æãÂ]´†^IÞ³T•«‹haõ9¥?–Ó´…TÊ…d÷‘9ˆ‹î!«Óü¾3“™ÒÎ-Ô*X1wƒrll -õ'S T<_N2çq!3¥üHI.Y¡Å»ÂŽÉL¯åLï™J6¹Ál:‘qæb\S¦š¾ÑêM6ËUžÙøS°æ&£D†µ4EÝµZ†MyZ`4Í\aä?”–m?_"§òÆDg\_:Ål„ár0)¨…ÖRIŒI*õò¸ÚqS'Nƒ”¹™q¢Tä/J5mÉ\‹œŽtÄ8©öööG¿¹ù}Î†¾Ï)	§"Õ*@Z´v"!FoÂÁ0*ÁV]shuÆÝ1¤×ãEô’í°Fp^#‡‘.n~øá>9Í\§YH³ö9ŠØdÙº±Á!öµ“šÃ¬¦#ç®ÿ9ªµwXCSCUÛÚzæ×þˆ‚Õ–ä@Û‹Çq|³ü ykâ1²¬rµ÷kë°Ø|´¿¹|ëGM5Äô\½ µõ+4ý,¬ÜEX[ÔT¸ùó+Zîýíy×¯ÃkcÊ&—;G0m¦LË†º<ê„à˜ëÅéB9,ÿ+|)*ÕÊ '•üÓ-®Qø«ïÖ¨ZÖ\´ö1Æ"ýýðºÚôôÂÊOv²©¥+KóKôU»2X&ÿa'`íTÁ5¹+ïÝ_zïÊL¡>8‘åÊ¡,³2á¬Ý"[£BËNd6 NÖØA$:8Xß°†/eÖd"(m×æÚç"¬öåÝ»·é¶–§ÝèR–9êTm¢$CüTUÖËm24¥‘,6EÏÏþ…"Ÿ¥^í²mEä?‚|Åó8·$KñŒ?Å.R&9®S\R*iŠóº¬E&^šò>]­‘d†–Á‘Naâ
è&¦cÕLƒ4Æ=5êgEhlKÈÂ4ÃÚ{²è· ÆVT»­õ!€HÓ-%Cº^M¬`†u ¬…>Ù¯µBÇaA›ƒUd@ìa3òí¶-óð¼6Xc#¬‚ÂÖÃ_}u}ìúÐõ¦ä[º² Æy2ï§=¶VÛÃk`Ÿ¢ïÍý½«Ïžâ«Ù±º5\ig;ŠéÚ¸ÃÔ‹©­å#üìÕÁdéfãFãf‰“ nyóbŒžóÏæÊCâò­Ó–e	À©§šamÍ½Õ0y ¿©R÷çnkk{W?|bVªý»F×"[ÈˆÖŽvÇŽr!õœæ¥6/ñ—¦H?B¨ó:î½“/¿<þŠ/ó2q'zñF…Ö.¸%¶«´à
Áš†¦,`í¨°ÆíÏÂ¨Á_DÁšç¥ÐÇLœÖTÙÎ(¤µ	ÜNÈ_3;ö"ró]ª,ô5Žd)ÁémWÖ¢>k²€ÔÒñ‘Îƒ|ofB>aÕ„5BÝ¨A67ÅnÁšî(ÿ³¥®µPMñ2°ö¤]Y9ÕoqoµÝû»=¼rèYwouílW´†¤~n #dß-¤ôÈë/’(ùâ}”µ¶’µ–²ö4>1±yçae-­kQj›¬!s¹ˆÖÔ[€fÿþ`dkaK(;™ËçôÑi7)sç2óWì´&#“Ð
Õú-³áËjç!ê¾Pæðé°z5°ÿÝ«ä@ŽR·¦ho³†°fXÛûâÍ;œE7®\¹2?ÍaV#À6–õr5IÛ|i¸~m~¦Øº åœÂ‚Ûp›øM«§FÇÁW‹¾1öÑEŸ-ºùcÅy‘‹ì_äù¤?.Ê|·~æØ»øˆÒ5ç&¦5î0nµúTq¤x,«Ñ=­r*›”¬ÄVaá'?™K¦6é‘Xùk¦NwišL×zñÔÏÓÛF‘J’üXY˜Þáp…´v®dîäç6–€5°íLš •±»FçP]ª»0U£É›>ï©Yƒ®è¯ò1a?•Ug½FÂšu»Þ©šaŒÈa‚?†[¨hO©Œ¥CIÜŠ‘fÒÈMçXÒ»3ÒEDÓš;øOÂ‡ÙòL©„H*gšÍJ!_gÎŸ§V­¯o°z6’¸|k©\{§àÛ¿­Ú1>|?ßz°¾œ‹W15vlÓsSGÕˆðÿµìfyc±4¦õ{9ê¶B-e­Ý^Ä/inúÈ‰C4YëÚßÃ]ÄÆ"ÜC§5s™š0€ÏØ`Â³Â8—²YÁk•g·²N"aM fVk7íç\F°¶öÌÚ³[kÏú=ÿçý°íEŽã8¾iyDè´F¬ïsnø>§©ûû›—n,k>¡,úìé‘bq!&ÿ©iš+iŠ`ÍEkÀL»´±ºµe"¾ÐBT'ìj'CyZÌ=r¸ Š“ÿÊBa,‡AAù€dïmÓbÿñ»¿zV°ö+kkw®r²øeM°66D
$ë»ùM©ç*x•Ìn$“$®\ÙHîÐf#•Ý¸veª hèÚ{l-•*Êàc;«~›©iïÌI”®1È½˜ŒÂ]±’"ÀÚÚÖÖÚÖcy'kúMk.uâ{)R6÷¥X»½šÇkCsMæ‚¨&ƒ"ˆ½Ä…E••e2f©)n2è×yek!%ò2Ï±Ï_†¢´ù;ÄUÂ¶)òÅÌyb5r*»‘&ÏÃ^ø3Ä2Ý„ˆm
§Œú_7«!¥á‚˜'Js¶$Õµ‘ƒYK“9°ëg§6‚M!c÷/~’7dI JöUîW¹@[çYÙŽûOÃgZ	d¶8ôXV)[Ñòñò)R5ËËLgzxƒ[„_ÑºIkm¾Å·¢…o‡w>üã®‡wHvtÂã¾`2£%¶«×Úo¾yõ»Wï¼ùæÃý‡ôà9‡û#Åã1î±ÓNdŠuÅ†tÆH§§“¡~xÁõ5ÀZ¡šo4”™ì/Ýh|óGÀŸ¢P¬k}óâú½›¿ý-iŽX<â²ÿ myÍ°Æ.µXÃd„š6oÝãˆÛ¬ËäJrj±ý¯V#d9Ò¤5"ÀÚ×ÒÚun¦4?¨yç~FZ.”ŒaÉkÏ#ÃAö×Ö ´5®L (ëŸó9)@X%
`Â"tŽ~íkjÖ¸­²ášû¬E5kþš¤â¯a/"ê(‘>Ã:“JM`P9‰såä$@U“dQ>pÅZ‹Ó´Ôà¨5ï~ÊGAZÃºÿ‡<;v»$WÛˆ óÏ$ Þ~JkìðáCÊÚÛ-/HðÉÚšÜjkkHyØ›œéæ%{ïÝ£M#/JÃäÃC€xÀ¶	M!Ãþö „M»±óoÕ¬ù9÷Ò&­y‡\³femÏÓ´ªˆÂiù©[öw8R¹lQÛH'c -vR;B«ëkkþ¹?lG| ,Èb<†Æ¸:àý¡·4ÓÕ¥-ùû#Ï9{:·¹wUk{í°f^kŒØ»æŠã÷ˆØK`;yr\›ÉáØŒüüåWÙÕÅ"pîX+ýá”žWv­	kî¢ßácgóð"rlè[]dÈ.gF.Œ¢M«xmU¥Ö;!wb‹.Š¤ãiˆ§'^šÌê ]=u¦”$K‘™¹•9`-ƒßY„ñ…Åúà8Ê[>^m2¯M \…¹™YyBöÖH¬¯,¬Ö²|ž¦ø kÌÈ†+K*?…d5Ò7zu½qc‰‰¤/R‘KÑ\†ÜCÂJ©”¯qÊú¸’Ek“ ¦ºµnv‚µî)]‘t¬ÉE(£HE³Òj_Hmð‚Õ^¥Z°PßÙ“.m¸·'íP+•T-ÝÊ)ê”Î2N»5ù^¥;{²ìŸ‡¹gç
i:\2ÅÇÚD.À©k'â#Çör~¯düÐ`í>#†µ¶µÑa3¹Œ¢à&¶QRâOêb¢a­íEÿ¼	·ÈÉ¯‰¤÷«‹g^Ùßÿ`S¥i@Z°~<­ÌGO€gúp¤™tÌIŠÓÃÍ†ÙŽ–Qòõ§ Æ…ÈñÕÐÖž½ÿxë›Áâ.ÒÎjÇö"Çqß¸<H½#õ&å±ö9°¶,·pPíýÍÍ÷××™GFÕ˜ôÄÓÚéEcH&Gg¬´Z;"­EEk×Í3®«â#O
×JÕ˜
ÏGOdÃ§ûG‹så»äòùf{O×–oVë:ïÀRm›ÓŸà1r•9—yö”‚H›3*Æ.Ùò§+‹\äf.~ù“B|œyviƒnØ3ãÛÒ•ÖK”ŠÏÄS·®fS°‡D¡²N"Òi<²Àµ¾[È{¯‘¿ˆ^XtpéL—K/þúñc²»Ì™ë“p²&VãDÿ¬ýôO€q[Ñ¨djrÎÈ?ËJ²™BŒ4Aª>§_d†Àhçå‰–&TÞxn}MUOÆÅÿîäwn–›¼Ì~ç9©¤×¯Õ<íõ©	D/ŒØ‹œ)’Ãz1ëjSÝ´h¬‰ÕˆHdk®´`É ]`K§ÑKÂ4Ãîõ-ÍÆþ”U»SÒÕ¨ùKŒHôKÍ‚fÖÔ´`Y-U«†5b$>bB{ú°¶ÆCvÞjå=j#l&º³!BÚä_¬Mó^ã\Ødc8!Iîa×£Å‘G5Ç?ñ-üE5Ç·¿0­©ÍlòÆ÷îÜÙ»ÈëÓ P×ëcxË)³i”wÃ®æ«Žæi*A\	kJÖªIFRôôêŒrCGâN€~v=òy°¿¿Æ.T4¼D”úÈ¾õC2­]Ýw9[Ë’×ì	‰…ÿöþkÄjEq­­níoÛLF 5óZ¤¬™Ú`·‡×ÙW|ï~Ä4,ü1Øk2˜¢dí²CÌæ6ü5£$k`ÍNèZ†µ`6Òý´)¶Yì­µE{›5àŽ}ÖkÁ®CA¨ò‹¨vPÖÀ¶n|[Ïð®”80I½ß²Ú$Bw3wX‹P­Åk‡š¬…!»}{ÜªZûÀÄâÌ®`Í¹Ïðþ¾X0kAFTÂkjÖÖX´gBº^Íx­½¶cK†Ž½<â0rÐÓ#$d8òcüvm ©ïÉaps0ðBº›Üûkj^ËškÑCí%kß¬Å;mËnZ“hÒiÿi'ð»l@"u­³GÇNr1‹RòU=!‹Èû÷ýæ_H3¶T•;y{XëÐNØw$¸þxž‰Iév=˜Çº†¬Bkí°FÕBäþþÕ½ºNòy­V#²|´ŒzaM°VÇÚCYÐaÆðo—ùÛÍ>jA`óC°f-Ð³K"&*sO8mnöÝL„D=Ëå¦©å›Ö|Û((3Eý«ˆ…ÿÂ4S0»…ÁôÿŠ×
ÓÅÆÜxcÇz=?gÕg@5\üSe,A4fÆgA¸\œ'NœŸ¨%
ù|y	ˆ|m<¾fgëºlIÜ&‘ÕüÌ¸fš
ýnÒþCÄÊƒ~ž¸fgÀÙT¦<˜ªõdÔ›,È4VISÚ•å²§dÓZF`6•
NÄ¡{MïtžÚî¹¦p‚,hO]7¥MVâ(²\òcovÜWû2Y}›ˆËÝNsÕC¦–-©PzüV·ñ_æç
¥t:©2ºÄÐ×—ÁM‡hí7Ö×Ö‡c…rž¿¶D¡1íüÖ§ÁP„ÆÒ‚jÈØ×žPm}z —“Ã0–â!Í‚Ô+òš6î'r`lëÃ«û¨fX÷ãàò´&|!§õ÷Ÿ•'¤Ð5Ð™í¹ç^yÁ¤öG"µ¨\Í¦ý«kÛèjá=¯þ0«Fµc{‘ã8ŽoTüGKk!`5ÜÁuF¹þhŸrš÷Ç.­/0›s£²½kv„Qqó
:[Ä˜hmß°Ö.­}»)­a «TAÔ5&ÑXó$¼ ¯ÐbF-ªW‹ÓJöŸž›Ó×½x©ŸdÌåÄ‰Ü2'(Ûœû(Q ´ZƒÖ(1ø‡|û~ç;’Ì Y:°Ï]øòv!N/l`Ç^>Ä“¸WÍÕ72$KÕ>:Š?,%«—S$ŠÅ:…m)CôtÖ$põ®B{¬d)¾õøñö“¨÷”!ùiÅ¥Ú9wÐ«[T3­}y»xŠèìÉôa¼XëHOøÄô9Ýå:9á6i¥×'3øŽ¸ßš¬!ñ<ŸÕ´}¼F6êÕ€5Nv!»ÐŸÎ%'P×äÙËäù:_†Ç`ßDw†£hœ€õNòDh¹] êjƒ”¤	Ðú"HãÆ’€ÑPÇÀ:x–i-l@m}Š%šËÕkøö‹Ét§!6õ¬Ç+Uš0ã—ÕuðåðŽ8Ü†8Y­Ämpad5ïŠÒ [Š[«cMØÍ’ME5)¬­ª::E8ÖV„˜Ï3˜~ÿOŸ->„·VÖÐÕ+koVÖÞ¼óæ;o¼¹¯¯Œ½ˆNÁ¤§ºEÒ°œJZ;|á‚ ¢L²uª*[+ƒ²Érò·ãJÞ@PS®ã=Kï1lFš¶ýlK9Ãil³”ÆÄ©Êµ­O¬áiŽ
ç$­­­ýîfµ¿®Z‹êÖZaŽ”­‰Î|‡›GRÖŽñÇlAe×þ"èkA`S:ï×#@¡É—eœ3Ñ‹7©‘¡m…0ŠëêÝr vw{¬q'ZIG•5ß 5ßî²æš5ëSÒí”ÉýL¯H¦5Y1žÖ^VmMŠ‹¯)¹jÂ±Ð©úp$œæ¥Ý[]Ö|'Ò4g^ÃmMÊZ ¡][ïÁ=ÌûegÒlÿfõ,j±Ö´‡T4÷èÈÑš5»ô;’ÕkÞÇÂ‡š°&ã—Ìb¡VíEûQÊgD‚"ÄÔ­ïçþ½ÝƒÝ;0šÖÚð&Á?þ‹Êši­w¢°u¿!ò“g-žk6ï‡Î@3
Xwö°¥è´-$'ZS?k|ü@f>J†‡}ÝÇÛ£ËÔ‰Œ‘þ \7r"ÈkbG—ŸÌRÁé m¯ÿd×SXS
äa?HÅfqs¹mgggÖ¸f-ÀšÂËBbÆb›n>‘C_Ë7b’Ç$´ë„Ý¸æéÃ ~Øš¦Jv˜Ö²fDøXsc1ìŽ‘ZœÆu%Çš³HÎ…j¹S‰Å…F)²XXY¼»BcÑ"T7="+âF•ôÂZ­Däø`¹¸:§˜ÇyddÖfgwæfê	’*gÈ"IW9¢šq°'™,ªIÜø³Ø’TÊ³s‹	
m±{Ä¤P8¥ì`ÚÛ<÷\ß†ÚØ÷2«¦¦HÖGð„Ë<å0RÌÉ ÈÊ`+ÝAÞ"ÔVS¦‡­0 ¦ð²ÑˆÞ°Æ€„Æ´:eg@|Z=$Ì›¡5)heDÂ‘‘|)ŽóHÅ°¶‘Œw’Óï)Ì0#%±ô—°&XK–òÓCíník¡ÃšŒû…N£Å|#WÀ÷lšûFƒOö¬!ñ¶Fò!õ(š—¸ÖHÚb? Æ-¢µ£YDKÌÛ$á‘¦ØlíKYs¾#á¤ÈÀj]ýl°ÓÙgÝ(;àZ”êM…Œ~…8-Bµ«ÁiŽ_l[P'–#a- šâXX;ŽãøæµZ#ž²Ú¬a|°¯¾ØûÆWbdwL©vZh¶P¤Aš² =ïŒyÚÙ7ô!#Ú¤5+k¦5‚än¾8ÄÚ¼ø(óšˆ§GF
s¢ÀM9bÝ¸1rb$¿õø£íZ°&ZûâÍ·”ùÃ^ùÎØÇÒÇòcdIÐˆfáË/wJÔXÏXV£zš2é|~fc‰Ø@<6ðÖ€ð‰^Š“|oäUê¬“5Yw¤ÇSJ¬$â%ª·—·ý ZóG\hýöÛ¿$ÞüÑ·¥­é‡(Þ^¹M"äíÆêíÛÅDšÊê3¼JjÕ
"ZÀµ©©$]lœ¿ïD¼³ª» kªã¡#P†ŠæSÝó(o:ÛÅAë¼Á>’Á¬ÉIÙ{OM0GšÂR<·˜7eÓ /í$ý5£–Ie“º© Òöã·m$ùŽƒ¢ÓçìÕÏs8(˜ELcZTÅšÍ¿<a›0ÒÕkG)îÁ†tTÔ ß‘“÷Ò´Æ±ûDG–_¡Ú×ÏkŽ@hÑ&ûóšDÅkŒ{GdÙª^ÓªÎÚaÍáëùòHWþ½ùÓ§óóŸa#pGHvGÍ±ÝXMk×B$Çè³vç—o¼qgóôÙ‹çÎñ×i{‘þÞÆ4kî9xB§–.gv·µØ‰ÎÒr(K*ÊÔ€ðÛ{uyýâ3zk5 3xmÝý,ÜcMºŽ«+6·æ*5ú`‡÷c8¾Î’ÌÉ­~ó¿V5q-ÒÖZekí´ÖÒÖÞy$Dã¡Û#ïw[wýAOHo²¶¡Èdà2-”æ‰n0#ÙWTbV1¬/²/ÜuÊ •µ·ƒ´öõ5kìiÖoÖôuk½Â.ûlØÓC˜æKü,O)Ò¢ujòuÁº'aI}#Ý=kG*Ö¸µG 5–-i4H{‹¬‰]Ä­{÷x}É†Žyé±~ð¨ÃšÖÚÍ Xkwƒtl!7[B¶XÍÁšU3t1âY^û XÛí…R¥XòàFÇmÛ>‚sˆhÃa`sÖüBŠO¸73kj!)’È6eÍyŽñ8ˆ†= B‰qXÍºZ$¬	ÖÀ(ÆJ…i$`pŽŒ°„’Ö_M³C±üâ7Ý	IJtä-É[:Ó¿ä8*m‹+)¶µ’[	ŠšŒ GÏ½²÷Ê^»²Æ:‚5ž°°¯xnvž¸rØ(V±1~E2Õ¯ÍÎæsóÅX¡ž‹uÉÁðU©ÖÂi}€5«g‚1ŽiGh¹è!±¨ƒ¬€„•"¿”Ø"®E‹áß1SÖzRþî¥ixŠ+ªev±^ÇRÂ\„fØ¦iúeƒm$?î`ø±°"/û:¦¨¹¹:Å„¥YÜ ¹¬9[®Õ’©J‚/ZÊkõR}vöK¥fòiªºÇ“ø/,X-O(§p|éüfYK|¸õÕºÕ;|Â2)Zƒ°ù×jš˜±h‰XƒÈ,·ª‚-B5ï‹FÐ=,%Ó¶gÍÔ&Fò;eÚÆeú–›þ_õD£^®öX)gÌæ‰ü-Ky!*GK3ÿs§!X¯7bmæŒNœYØA{ís!—sëtQ©bUÄ~³Ñ˜v×¡“uÓlÁšK+qí•¢Ú¬X;KGì.ÖCVÖtó+áC^Ô°¦—ýúúôÃ-¬¬iZãß¢«éÑô–ÔçGJm#4µ5·­ñ˜ÅÀ9=b:k¡ZKV¬Ù]ä_ñ‹ß!«ÅäõÃþœ›ýæŽ…µã8Žoh«µ&¯IW£¯N	›°¶¹~o”äB'hØŠxq¥8MÆbÐìc%Xûùã'íÒZkD“Õ4qö0+aØ?ÔìƒÂæpÕB¡°ºBAÄ¶èë‡ùÆoœÕíËíU"¸÷¿óÃë/4)°kH¤ö'X-W\¹{[†ÃùüN£ˆ}?ÚZ²Ñ(Q»T$iŸé
¬Ÿ½w-°[–bää¼‚k±ªŠÊÙ8Ö¿Õ´fŸ¾,-àJ‰Êßqš,XÛzÌg\dßÿË7î|÷¤˜o¿óÂ˜YMö"°ÚíÆ×-LDÝS™T_*¬äU“ôC«ÑÑX£[J\”ÂÐ kûø?j²Ûóç/ oNb”úejfxÆfF:g'xZÆ%½n§Ë×–1È…Tú”FÌ©U^ƒC[øÛpÙýMìsôaÍcée8=zÎ¼¦Ë”Dß^#üºn™ÖÆÞkRÏ×¤9ÄjJ:Qß5fHªÑ“Æ—käd¢Š$"Sše¼ÖXy#ŠEÒªcÓ¦iL›¬ZZ+ÅY‚ç0µð¬½H!aXKêó×fGróå®.¬~ÿÙê£_¾uçÑêûo9ôÿ¨ÙÍn#ÚM±¯¾ñ&§¢´¿1˜uö	×Àé¸`Ñ¥7€¬F NÕŸûGÑiæ´œEhH•(åé¬{coŒß\¶ŽöêM³î¯¾*ikîHoƒ‘Ð[‰PÚ§ë7–!7©n(m°±,"ÿûþZ¸öu´µ'B¾cZk)lÚT¬:«W©dC*‚¤Ó"öÜåç/OõÑ&'2F%†‚«]î÷N…¦iŠÆ`dÊ`Ä‡}=ªéæðÓ¨¡¬©)¶‘8âECêˆ‹ØÍI%Ø¢3E}+S“H “—¥\OÊ–ë,ªqÃ„c­ÔX±<éî}Pw€MK`-pZ³r;FJÀzCÂc$œyí0¨ªgcjŠ}DZsÚ£yÍ‹ÇGÛbÿÚY³í"ÔÎÜñ½ä0ÎŒÐÝø†x¼ášÕ5µ\cà E[»²!Mg‘¸&Zsp°e0ò¬4´Žž8¦"!»¿xR	·(2Lüá@2À‹~cð–##äDöct¦vv|<q‚ÄH«R§=‹È'°ƒÖpÄÕû18+žÉñGSÕ>§È{ý{{¯œÛkSÖ|ÒnX3­­¯ïííÝ¹ô7³³àZÄkGs"YnlhÌGff¹+ï•NûÊR"|Vñ„´“›„ÂÑPShl¸Ðô¥NÂ×;ÃÐ|ç“ë¡þ1†)šâÒ¥@'qŠæØ Z®Z;U•Þ– +¤P'ûÿÒJ½Ì­1]]Í«au„+‚-åTßÆl2¿ÚXYÐÊùâÜŽ#Hl•3i
ºõcnÌäãñR‰¶B{’d„[Ú˜™ÃÞ1U9Uã+rEðÖ{Ê©@Ë2õ-mÜznâÂåópS_’7Ž¦µd¥:¬Ñ¥”²&¶všÍöÓ7P<“î1ÉTý] ±£ËÁ¡‰¸Úµ©6ÚO$J3hw=Ô eR–ÖÊUlDà·NÍ6Òó…xa#hìUòysg–Ÿ¿³#Ql,‚?ðÚ×ÀÚ¯(KGáÚZÇÀ­‘ÛÜÚZ'{¿€ötcnA61Nšpó…ÖB²+ŽÀL1€ºþÛÕÌÚ¬Æ€Ñw†¤­µÃZKX¬¦Þn[‡hÿyñƒM®X3•1»4#R*›S‡"§­(²‹O3KX¼ðJSkGµˆÕËZäÉöò&Öîß×ûüp;lÇ±°vÇñ¶iÙŒ¬Ùiä}bsd{fýõi„hŒ"U–ŠÅ¤2è!¦yæç!I°MZ‹`MÑôÇô‘3 ¬ÉÉkà,u2¦N"­’x Ë~Å±°Ø¨W‡×”¶›5¸ø÷Sû=KkvïG[{'°Ú`íîŸ€µD•Æ3ñÁ¥ñ23ÒôôÜì•¥|Xƒº*ñì ÆQ 	øAéªeð0œO1sT“¸ù÷¤ƒµU*½ñÏÿnùwOþ~{ù7Oø!#Z{ÃßÒÚuk˜AŠÕVVo¯Å¸%´ OÛµ`b£JšÙ¨c¨]Ðè$ÁVhiÜ•á8‰øõ<°6yž¬H /söŠQ«q‰0¥6l”—¹jM9”Ô«òÅRÕ´¬CÐë\W½À…!1[q×ã‚
Ô¬©Ö´×™”©©±ÁÆ`Ÿ¡-4:0¦i`'MêþÃA^"ô¨¶žöB$üF	÷½IzDg¹ø3«R¹O´XÍÁFkmD‹¨ìNÆ˜a”i sDžý‡æ,ÇYE+ó‘‰4ÇÆ8'Wóuœõs]õùÿ<·3ûÙW_ÝùýêC£™½K¿E¤/FJY£fsNÜ?öU²v.(iCVÖÜÓI§zPˆ45µwr$œeh/s™J4næn¾ÚÈ_\6(È‚¸æ;[ÎsäîÖ¸pÂqKmÒÝœ©'ýÁmMÛÛÿë½TÈ£´öö_”Ö"ZÓBºšcì–…4”bÑ#—­IæÅw†›D-3”(	Rµ,fB¬ªñopë”Å®O£šµ¨`íkxí/(kàÚÛk‚"QšaÍ¯†$$j¹÷¢4ÏÀ2S›êÕGÀäå×_¯î	ÖÚ"ÐxÖ®¬µn
»AšÔšN‹þyL F1C™¡±ÞoŒôH{kÔÍ¶¬Öº¸3H-Z¨æåVTy&‹ÏÞ?è=Ósp C»öã¯ræ>º[èGÜ3ª9„yY\´¯¿a&4­µÕ¬µªÖtk™A6Ó ×k¼	„b=‘ÕB™ÈªÓ§ó‰ð¡žÚ?r‚c’ªÕ±iÆ*9Ç&˜á\d¼zVƒaB™½ƒ}Í„dI%Bj7!£‘˜u•®m¾²¬mÚº?‚µ-X“aäÂÂÞÕ½KsS¯Ãk"G×ZŽ#¢µùòKÑÚ|âÊì{×6ª¹Ñ®‘ò|u¸Ëú‹…µQ>³Nt¸;§á6Ž»ŠMâKEXÚeÌêˆ¶8Äª‘Í“$Ù£ Í´mxºJÚ¼@œª”ó+Èkù:MÓb#ÓÕÌÿeïüÛ®ï}ÿ´Jˆ¢D(¿tJŠU¹Umbcµª‰¿ÉÂFŽ±ëÓfºCa6%1…$›[µlëÚ&Y»	Â1Š‰Ô6èž	qN[r
»
¬»G•Îe·»{u˜¦ý°I÷ñ|½ý©c2¶sã‡¼b>ïÏÛ&ŽCã÷çñy¾^ÏWd³~8®Ÿ…µª¹CŠÒr¹Äª¯zF	‘9òMÝjgj4Æ®‡
	¼“«¨IÙ<ßhZç|i%ÖG,‡"½›wzb RZÍíˆøFùÈUY7‹Û8l‹ðç2€!¤‘ò*Ž«ÿ†*·•)ŸW…ig;Fäoã`­'Úô	õš`›‡¤FC*cä8¦nÁ ‡¬Ö±(hOv$/IQLÕ†"üRv6ÊQìPãÝf©Ç+QUHí@·J, /r8k+’Ö–--AÊ‡ºV&è÷Ó;nU‰ºÃý­”H®Þ1Co5s™q‰ú,Ð”ÖDk-eÍãCï%é°ªý|	V»„1¿4@óƒ5¢ßÁXMßÎVºvM{ém:²4÷Ò/½Ô†j-YÍŒàîÊ³X»;ÿÀþ…	k-w‘vs|ûÿËVlÅV|£,F<XÓ¬bñý÷ßÇ^ÄbÐ­~lU¬vu„Ï>‘–KÛ‰ÁÕaz­aÀñ×¤µg<eíµÃ»†û)’ÝE›¶îîá~Î|		—Cý‚A*šå¢G$*õAjªýÿüßKWÉ#ûÍ«\}“$£_=¬‘Â¦Ók3ïß9øõãÃNY»Ì&3É‚° 	’VÛÕë3$¤e§¸rt¥0÷•&W3Ó)¹.'«¨‰™ð'¤CW4¡Ïš.ÞÅÛb±ô¨ïøwïÞ‚Õôÿ¢øÕ¯þáé×¿4X3û~k´FÝ¹Š¹ÒÀnƒ½h”×gq3‡ýt,ŠŽ04oi…df(’GÃâ‘ñî±tïø^
ÔFÇ(d;Bá'A*jx:ó#vª‰’Q¸FÞ‰k"IÉR?E¹u:-£l,<ž»(fS²%"d6zÍ×ØŸ`ÆÆB:Nž¬‘)X“»²ãÄÄ	…›U¨5jüæ”;Êrdç™÷«ZÀ±ZµšcqLæ‡1pî ?´T&ôÉQL‹Õl€5Y­hÜuÐòágìfœôÆhŠ°%ÌëO£›º/YÍjÙP(Å…ðéTm:Þé¬~¸Z«½ÿú—Ï¯½‹Fk°Æ©¾ýÈkž$5kr†[\Ä“ {ý™a¹¼ªèb;]gµ^¸MiæQÖ*!£ÈÒ?Yú=~Q°vµ÷ ‘šúb;›‘&«1ÉýlÞVæåKwÌ)mö„1Ú1=sáÊ¼èmaåƒ[øÃ?ýË¯ýù¯ÿÓ6îæZÛ¿´YûŠ-¤Gkmek›¤5B¹¯jÃH7‹Ôƒ{¥¤’ßµ™qoúAM“‰ÅŽŸ‚rÅq½¯É5”Þ$XSR$ÃÞ®åwÈ…ô”5§™µjÖÚÂf¾¢¬YÑ°&ŸEcÃ&ÙNõqP"¯¦qOzc`9Ò+7‘X±«³W†	üuŽ÷ö]gVÚ•5ÛA„­hU¬¡«q×ÀBYsa4D‡êGåoâJÓ,œÂG8vdï5 <‚¬}E\¢ACî¦¡j´Ò Ek¯en}8÷+²Ïå¤©ˆïŽ‡’T¥yujÞúÀ•K{únì9tè¦€5×ŒÅ.{¬ÖÖ[·¶¦Ø{DhAˆ·‰RJG_O§±Zœ¡zôõáx¸ŒëT‡BH'É‚B/:¨™T&Ö" ™ÀMÉXl šíÖJZöWŸÁgöñ÷'Xý˜þæW¦5uJ‚Ü·‹Ë…ät¹Õg­½hmú·Ck‡*‰R%Sºÿ~x˜æ¶±‚M;Â5aÓ="+²69QòûKŒ¦†Õ7ßihûVënB¯F-Î!RóXM!×~AÜæ…ŸßS¹ïê‹KE+PyVçIõ“þP²@á_°ê”ÔÎfBè¤ZÍdâ…\5\Èd2ÉdýùŽpZenuu¯È”œøS3gj«Õ3«L @åxÉ ‰0jÚäÌêÜl(Z™‚Öf±”WŸ&1¦KSëMÒ™†2&}é™™\l„ôÊD/W[”±Ÿ”ìHj©ZÃu6”°j
Ít<e\‡¦ªÉn¤[Ÿ›5Á&Œé©H@Vå8A÷pV+ð’Å®Æ–}ÅÈˆZX†p–¶nž©°Vâí$2«±%XÝyÇt %B!XÛNNXƒ˜T­öÁü¡0¥ØB¿?‘Éã’Ô/2 »ÌJÝrØÎ {×0ŠšS¾Û+Âj®TnS•œgÛùçop†s…B´+WIUÛéIkìØ(ú™ÓjÓ}Òš}I›l¸^Ýö·ÞåãÙš‡j«yÎ"¿øôÓOïÞZºº ¿ô6V#ÜÉàVCì­ØŠod¤ëXß´š·ÐU|Hm‘öØ2l4sðO^q7*›¸HÅ
j™š­m–Ö<‡Õ”Akƒ$^ãnë²Ê =¾XÇ‚¡á W9“ÁÎ?Ÿ…Ö(LX¨g¦ÎN%*|”¼ñö›²Mú1°ö2½Ö°Tâ`xëÛß2ÍÃ×^«‡”¤I&Ä4ÉÙdbúz5ÚYTûÎlnòtV0ã(˜¢A²}¡’@ÿÁ*ª1I1Ÿ£‚¼µ"tÅWÊÃ™8†uqúàñc×®Ýú!!WÈÀk2¡sò=GÈ×NúË'É„´øó‹sÕ™‘qNÖé¬¥©É¦Cöˆ2:ÌÁ_º˜O9aÔÆ qGhŠÍì•cO>¹c°†·£šfAeôw±~,ªHè!W‹j5ÂÑå/­ò12Vv¤5ÚP†-X3‡ÐLŠfp×^Á.”
M7|æÚ¬©6­1@‰ßäÎAk“p˜9ø‹c’	ÍôDZú›c7ÂÁšH1›¥Re¹Š¸èÀ	ÏTD{oc	Š–Y«hÍÆÞÌ†š4í\°Ø´Ášcµ@(®Ç“Ó©!î‰	DµP2™å-Läx°4qúôtígÀÚkïBf†k?ü´öÂÃÈk‚5híõ§ÖX+;×÷îìçgI—›5ÞQ+'«W#<XCCˆ×3jU9VƒÞ0ë?{1t‘vk`×q˜¬°|\Ùñ¿…b6”†vÌin—ó6ù¿à5=ëHs„\¹t‰½bqíÊÊµnß~ï½[·ß»M°ÑV·?Þ~ï—:`c»?êëöíÿ£ÛÆà‰üýí_þßÿøÃÿø—ÏÛ3!ÿ®´ö‰Øì®#³xÔ ¥ŽbÊ/V£¿š	Æ?"tˆ†lfããLË"¼x§ïÆrñˆÈE9G¤h	'zóí5kÎ’ØDk÷ÂSÖœu?Šš@È»?jˆÔcM ÈBŽš—üÇÆ{¤zÈÐëG)HËºAZ[ÙT²f›¶àÐ™Arg£p°v±k¸{ˆÏ‰xžxæ½Žky~‘™¸!7ÈvaMaŒÖf0ÂH»°F€b]7è¶fv”=û÷[;pá©<õCr!ñ| ‡Ô¹íg+¿«Y#…	ÉìîIj¶±¹–$_4ÅvK‡„’ 
›™ö»–jVÅÆ0ßØø2N‚5Éøöe¦Itþ÷F0˜@?­obB"š§ç!Ý4d0ýpÅ}jð¸–-µÇ×ñ¦"ÖÞYó”µö¢5±ÚÎ›kÃZ‡22ìP×îqÏÑ¿6-E›ÑšºecI	[-žÐV3 snüÝÝj@À”¸ßsòG<É`CÕGšÕ$G\×$´©Q¶6èïê†fë!~}ÔŠƒõrÿÇ,%ÉÿgI?L$¦æ‰z!G2I9X(ÍÁujsõÀ×Ô2[†Géèj€Z)UÌDC™ÕÕ’ZH“*?}f.#+’D!øÐL›Kˆ'ÄhVv;£Œp0#×|66ÆˆEfýüªîÎæcT§dKXÍÅx;H7,Žp@ý–Å9X#)²¡ƒõ.:	uâFPÃá#‘âq`-ŸÇ&”¤¸±ã	œ)¨÷Z%/«òô0˜Ô-Ä©#?¿ì )¤ëÈ‹yvýMXû@9‰­-€g2ˆ‰ƒ}©‚lnÊ‰!“h	¿Ì 	µpaçE •ˆo[R}Õtç…½×lK¼ü•5ÄÖ‹êÕ»ûiÊ½nlÖ¤5¶Œ­¥“\g~Wÿ®Vókö&½yá`nçMX­Ej-T3VSü‚øôêB@5küÍÓWwO{;ì-am+¶âk1bâ÷=Tûp}Kqg4²oßÂ}Ãe-{¶Êµ–‘VîÐÚÃå».rsÕšdµ}² áÙý®yd?=†]ÉÚ æV…Ê €+£ñD!ÏºÎºµðþ\‚Ì†:°]å#ím]ˆz“‘gŸeÑ}ä&irï7XÃXãv2^Öª¬§\Ì†’µ‰j¬XLMþû¹™ŒEª¥”m¤r)z^GC	°"ë“¾³¯ËÁEª¢IÒ‡[ø/%­5fžºvëZ:rí‡¿øá-±š{“´[ƒÖ¾Öš´æÁš‚þ5ff¦¾íN]f8âæÃ¼Ô’²×¤¥ŠÉÓLÝœÆ¨ò¡ö8'ºjŸ¦Ô±ñ±Ô ¢«¸i–Üô’²%×1>FB:•‚ÍFz"r1Û­"ƒ¦š6³[BÚX/…Ù¸=Òµ­éj*Ms>ýFeVÕæÌù‰‚5æf˜Q¨/PGR6¥nØaQÏAWÓï²nµJ-tp”À<Ì‚k?a+e&Û-e„±…“ÕZÞ"ÄµÍ6g¼×ì=XsÛdf#¬±)MÖºï…¦ÏMîKNLNs~¥óŽF#› $}bòúù3…$°¶æ”´Ç_€ÕÑyUkMiX[CW[\çª&êñ·/•å2ˆ¥µÕ±òµÚQ––ý¼]¬E(þçMc)Zen(@Ýø¡…ÀE5Ç>øÜYŠÐâ‚µOZñJÒÈX„º5'¶­ÓM³ÏÁrl”	©ÄHIjëkØŽÈ‹¤rlñ\s:}œï|ð wÝ\ØñÛß>uð)…í>áþ[îl9`ãB/úû_þá_?ÿÿ 5ã²WùúJÜ|wßŒQÙÞQç›ƒ0<®L›”W’±w;Sƒ5®EàûHŠ HN°&r²Xh)kì ¹]Ñõu†wk6.Ö6äÚØzb÷"TóÕIèw!S¯ª©¸þpm­ßÆÒÇoÜØ¬¬›jÖÔ4ßyAÊÁÖ`eN¼R¨8ì¢šb{ÁëmÈ}$4F	ôxNõukD›¶fäôÑ=ë~†¦µ)k¸à0»qÃœá5`Û¢QIÇû¾C]ÚV3Am°vÃ‰mÀZ+@1Ã5#4/ëÖ®¬kŠN9¯Ú£2€TÄCMOc»MŠt—µÄÖÊpÒÖF-kÈŽÃ-<ñŽ.?…¢~$4’ED¤u¶uË ?Žœ½]°fµaú”P{0ŽûÅjûž­Y´+k-X{ì±5ˆjÚY¯9`óx­l|¤lDµsFmÕ¸YúW­±šµƒÓ0ÊæG…éÖvÍžd‹ª¥Ñèz¨kˆ#5:Uî£þ$ÈhF5ëÖ2‡— &#³!pPf#±pZ+%ëS‰2´Vš
§s«sbµ¹S/^8<¨U§æVSxó§OL§ØWeªX¡ .ZÙðŸoõôé)r…Ls³Ô¸å3$/kmóo­¦+tÅB2¶èq“ÇÅ+Œp†¦!C(òVGîd°ÿK(dÖãº[cøï´5¦<XãÐ4´©Râ#»…üåsC¡lJ“Àêˆ‚‹è³æ7™Ëe¡µRJ™øÕl.Ö -’		ÀkAFãÃ0“bsù˜`í	<ÓódÛ"g&Y2ªYåà–©4}WáD5°›eÌk±i«“êÞ.+[ÛÌ‡ž²¦óš·ÙÈadý£—×œ9_~H‘Ž?ä ó‚t	“¼%æ™hƒ5Öž¿Ù"5¡Ñ†jx‹ü#IËNJçŠ|{‡µßo	k[±ßÐ<Hg1bÚÚÒ¼z­­KYÃ{XÃra°ÐºB3áÜö›Ë ÍHZ[ü‰²Û¥µÇ=XsÊšŒºúïå°‘ñ­ÈúÜ\%9ËgÛp 0§†ý_êƒÃ™‰Š‰ÒÔÉÅ«o¿}WêÚ†^k/<üÓ—þíÕ‡¨4Ó~³î¯ÇËÄTµÊ5¿Tv¨>[[ÍÆŠ3çþDº=ž"©)FìµFOú<WÐóádž„Œ¤¹háÙP¤F¢œ;q^ºûA*}ì‡¿øhþ#sðov[ûÒZc?Î;ôÊÖj§XOª¦càkÔ°†F}Ž2!µ^×êiL«à^NZ‘žt&xG8Üû zØ¨žùàÞ½XA¢›¥GT›&ßñ
Éj`d0nDÐï ._­šÒÒôáœS­ÕpóO±Ì:XOkœ'8öâ5jÕ†ÓÊ`5)d„XíÜì]?Œ¦.Ù¾Of’¹´@¼ÉmÁ”ÏžF¼„ÙªÔ< ­E•THäÃÑzŽ+Ç¦ž«nŽ@oó®K²cÚ¢…o­"¶æž`½Úl$º½öØšŠÇ«ç¦I+-É% ¶ÉÒPèþšôµDrrb¶4}þüg¯|¬}ïæM<bdù}5î{m±¬-®­õ/¾²¶¸‹
Íîí
zNØÙ–ÜúÍÅ90HÑšœèd	©¡øB¢ÍÇì÷Ðºˆ<V= `¹ÈSÒ>ùä‘„6¿À#Ä1	Ö˜–á*ò›f"äÂ•¥@‚uóÔÞ\²G;{hÏ¡ENª/^<î ]k­‰Õ>ÅVœf¨vð· 7…·sêyÇ~ùOŸ·•­µyŒl„µï;iMÑ&«1Å5œ¯ÈèØ“²8M«‰Ô(_cÚÚH ¯í—à6õbµC¤°z¡hM›Óž@§¬µ§AZ|¤C5ÂÒ WŒ„,ô-½J1³6±æOM«"|¦^R½]]Ìö úô4amÿÅ¯(k_qƒ|£U´æ@M;sY¢©YË6ÂŸÑÍ´çí®õµsF¬|1`RSÀÚÝvw×œm¿·aë…¬]´j´pkéêÚïlø¥{È²ëÐ¡e¢‹c•óyÒZ“Õ8àÉŽà˜XÒ‹¹,HÝ$_í~ÜÕt#[°&gþPœ^Y!†£«ÁmÀGŸk$FâeÁÚPÜ¥	ÚI³f˜¡3Q4ÿ¸¼W:~dÒióàv$,d,QÝ3,48> F—ÌÈ;¼~fkÁZÕ<X³<Èµ5*È÷(;-ÙØÚ"[fþøBÓHlñûke)2µ’ÓEhFfì†üÂ6?cë½fìÆ€Cô4Óv]ÔhžØ]êÊ€+¢à^/ãÞÕ/3Ä5Ç‘T)£†¡j6H¥Ú©°F—µÒê©Ss³‡/L©K6õk [vfºZ=C3lVˆÚÔ‹sô.“ü¦¤Hô¶ÿ³HÖOÌ½8;›ÌåÒ£À1@öFuº!Kþ\56–Æ¸3X¤â-‡p–-á+•œâà¢‘²˜öÅdPd.½1ZDÁ†¯\[ÓÓ 6øŒ‘›àL®ý»Pƒ>Ð¾u`ÒG*m,ÒId¤(¬â‘,´V ~!¥*‡B>:4ì%VK‰¬7Š¾Vˆ×ËÃ–Éíë„5B°vu…Šà•ãdPøI&†¬VM#î¢œ©µÝV­ægáâîÚe;{ý]ýž´f¢š…ôÚøä ëà®çÜ½KOlÌûw^¾¼)Éî	×JÔc3Imð_…µítõ4µ¯A5ZûÇOç«JX3Vs´¶%¬mÅV|ó-FŒÖ––Ô»ÔÇ¬/îJ `UtfV4ÖÈZhÇÊL‘²æhM'1mÒš­Yäkû(¤ÜçÖg[¥¬ÜÙ¹Yn,avbÇ\¼R'Þ¯Ž]c¹™ª_ÔÞnÁš£5y½ó°ÆúÖì²VVÌ~ñâT©2›)¥r•Õj2“cbH*Ë(Ø!ÜH±<$rd‹Ä¢!\å‹´ñ¤2‘-A.ÂÑªabQXÎVQÜ¨‚þ•çâykeÉ:”üEâšëý:°v¯×šÊÖ^T kTg³°õPn¥Á¨±$‚¤ñÑâ~€°£˜0b‰	–Ô«ª;°êÌÔƒÝ;¾{„…Úâ‰fÖ/I.ÍÃ½±|(‘JÉº„§§j©ù’é”O9‘jŽÍ©0XXÝÝð9$¶Æî÷:×«[ó5jµÎ!Ö{fXÛ­•Þ£=—Rµã«a·9XÓ£FkáX•ôMÅrÖ²Ë¡l6[PV¾ý¢•L‚²µÀ}{…\¤å´Z®5©Ì=7r(Ö‚<‚ÍöBè^ë´@ur:Ûh”âÖØ23)¯¶†%*M$ïŸ`wà¾0ûÉéÒý×ÿüáéŸ}qæ³/ßýì{_>ÿ<N"_þw
Öøwú0ñ‚5Z»ù}üE,žçäîÐâ+¯,’,C sÕÑ¿zt`s·Þk¼€Ÿˆ³Lœ\/•éAk± Ak8w¢Ú¾í!k"´cJ{ü„QÚÙõElL`Ûú<¤æš«1¡¶³*d#æ×××Ž.©¢ÜIö<pŒ‚¸@dÄÓ<\ßt¤0XÌøò¨Hc‘Í…=âï\&ÿs#R×Ú¥5f¸'€2ÁÎŠT^²£×šÉjÌÊjÄ]™ØKìÑ#Àš¬¡"%$ª³ÇcäÊñƒC`m“²öu5kíÊ5kÿõ;Ö¬lÑ¬§	kcEiÖê­V‹Ž k½®ýX2¿è%(½ñÀòüWAm“$ÇÎR·&®ÝÖŽÖÈ¦ÔVíÕ<‡éiÃéi-ŸH'µýõ>k-e§«¹}KY»³c?Ð¡µË}w–ù1º.¢(¢³ñû 5k~ÇËÓl™A^Ù³ŸÁògÉfÉSÕìî4ÇjmÒZ»d3:"ÿ1¨O¥Aö…†,\F$&ÝµiÌJÖ0iwÕ[ª\ÛŽ¸Ø´iÕÑÂ©¼ÍJ“Þö)6ï‹<`òÆ ûAƒ5þfjG×=XÛ\´öÄÍ'ž¸ùn½´öÄCï¼ôÒc:×ØÚ6×îµÌ6dó°­ÙzMí²ãÃ³çju½6?JS?º`Í>3\‡lÁï„÷ç@Âóó~Í!R¿š_#­)á¯RçXæ™å:…Þ˜õËÅG$•¢ÊŽé¡d|¸®k9•p%rY?–d.BV	“¾HvÕÞ†L G}U(­RNž¢ªº5ÊÛÂ‘‘žÎJv<77WB£Ë„óÅ—<áã“^Ó3Z(FGX;ÃÕR.…ÕÂùPe*Ù×QÉ0ö ™}`5œÿ£˜Ì dØÙ½d BÖ,4i|&¢S75i{^åõ+¥H'åùbžÎØr˜´" µl¶D5z5ÁkóþÌÔj6›™œVQ^vjµ,r’°fñUaÍõ;ã.hºvŒTôD	j:!_?†J«åag0âlET¶lMõ ¶@«ÛŒJ9b×†ð”µ>ûÏ¢¬½Œ®öãð)ñƒŸ\¹tõ'ëë]>$íŒ0 c¤ 1]6°fÜÆÀœBOã!¯€ ÿ™ç­Eh‹ÔÕZ¬†¨öÜî.8±ÏÂžÅ¦fØ·Ö¶|û·b+¾#ÖŽ×V¸™U8"ù¾E-7Zeêõa- XÉÚ>æ8ÜE$~¸ÛÿàoHk
JÖtªí÷óÑ’MÊ¤$P™›Ö†‰î&¬±v©év=ã¯+Ó¾îGX#”/Ð’ÖXlßQìk~ëÏÞºà7]í$ÌtªQJÔÈö˜näJÕÕZ!b›pýœ}YYKåcòåà3¾D­v=$é >5rå²[®È¹7Ïñ±>ƒ]=~öêÖtêúKHÞåëjÓ­ko¬¹’µ?Ÿ:uúô* ×I€<­ÔÐÓpÁrlÔ$35rÂ#\‰œÊŽí%Õ$226JojòŸüÑƒ'Ò‘Q2"!,K`•ÞÕŒØíË‡#0Z>Ì¦Èß òÒ‘FCßX¾]»Ó‘T¬w|÷‘ã3r‰$LY“#¿œü)83^Ó÷…Lkk>eD²çHv#Fioì1®XLþ"
›vÎ"lT±VÈß&
‰Êd0Úá[ÄP"«%¸’„aš•jn¯¶Â+OƒÕmÔt¼b`áM{fÅjþûR).Xkp~4I²c¢–³gTr\äþøãÏÍ¤Ö*%Cb’Æ9ÔÇ×'¦¯_?ê‹3çÏ|ïËOö½/|OqóáG¾r?¬=îuÅ~ÝÅ+G×®¬É¡|'ÿ0Ywa5®Ö›M€;5”$¬°Ê< U@’½%8ùpPŽ!¬_‚ËË$„ÂiÇ«ÕƒRÓ ­ƒŸ|rÐuY;¶8ïüE\*$ºösGçå(² ?îìúY#¶y´£RÖX\ü7Çö,g³Çsa¡wÛêæÁš¢jÌf¨iìn<¡Êsé‘çnþŸËƒ$Ö¸Ákº3Ö‘îäŒ`íÁÝOèhGÐÕhB±—ÆkÌÊI‡yD7ó×ÁmäÉ#hkb—žNÁÔ“ K/=±uØƒ¤¡µt5}qû»ÊmÖ€µG¤ä*±‚gèKÎl¤W!):€4µˆ­w{9÷“•6aíM6ßyss"d«`íM¾î20XsÒ2í¨I‚¤¹`ØÆjßUÚc;«±“²†´ÖŽjHkž¬fwÍy¾<XS&&tJ[^¾Ñ…¥çü€x¬1YM}kJj„mÙìûÝñ’ó3iÙAn`µ›ìÜ—M›¸ö¬ë³ö@ÐòêÈyìèJ²*5öñf¶›¤5Ä4”6Ë‚´è(û‡]Ol.…tmÃ+2¿é! ¿³î\n¤ ®[à†Ëˆ›Ñ´^K•‚š5«?ÝùÄÆ4È¨ÖrYÏ”©hûéO×^zçÛlÃN`K:m³¾ÖæÉÆ3£‰½BR•aW(`°Væ€7%EÍ"ÀÓJÔ¬às›ßž·!´Ù	~D´úŸ¥dW‡Hd)#Hfè„æ³Ù<ÿLœ¹Õj¶ò“¾çŒ—Å`%KÚ}0”óE°ÁwcnvŽÂ´*Ø¦7PUÑZ5U+•æHw¤†¾j™ä‚Tu<8[Ù‘_­z2™`¾Ø™7&'kdIžØMewÎ·÷„­¾l!Ÿ¨Š‘|0‡|•(PIƒE¼Íù„,ÇX6TckH½Ó:§ñO-ÈŽ0X“¯HHÊa°¦A<d¦¡m´ÖÅlÂ/ä;CeÄ†à¶5Ñ”€c)/ÈjNÄ%µT-Ñ½ Œ*ÃäYþÉÄjfØi\žÈÕ§VGl3œþ X{.wOÖR¹.s¿b(Q1ÇçÚ ÖÜ. H…»tH9—d0"û©Vl†µg_ùù?&Q­_¾¼³ûÐåËK½|Y2š±Z¿T´o‹Û¸é¨Ÿ9›·' áµ‡[!µ~.JT{¥%ªµ£Ú§ÜøLÇráêÂžäf]í¶	k[¾ý[±ß°P¤CµîÀš±ÚY‹…Å}‹Ö	ÍªŸ¬qWô³ÚH`Û§¸üãn–Ö<X­íCZì'ä©×=èÇ««^ÎT”_×ºìÚ™p-r8Y(Ó±l°LÙZ}8péMcµvií§’Ö’¨õ–`í³u8­œ©ËCÿT*W³naNÔéŽ=11Ó`]Q4ÂÑÎ®‚ªÖ@3L!KÉd<ž”‡a$í£r+%b\9)#á¢‹¢kKŸ{¿[}äýå/V¸öòÏŸÖ8¹œâ9Ik_ù°†²¦˜*áh%7,T3ês¸²8¶wt¼,y™¯#úÉ‘'FÓ¾Þš¡ýhrÀ²}±È‰ÑªZSóê1D8!V[ú–üX»#ùèH3}`,LCŸúùR7@Rd.Šˆw ¾á€…oTÿ½ƒ6UªAZ£»õ2Àž:x°¦±@Ì‚…”
×Ð#Åkæ'Òi¥
˜3ZÃ««:ã‹ùä×ŸÊo#×É²eÊÐ4l
ÖîõÄöZÄ¨Àå{hG0t;ÂµÐL­1Ô-Jc,Ò8w.QjL4ª“¹û™IX˜ˆçÜ>GÉù‰ë×up½6}Z;þúù3§OŸ9}êÅgn‚ÚÖYH“äãÆj-X[»tôè»¯¼þîâ l¾°Àé–]ÿÎ}kÊlBS“e¿tÒŠ·ÎåbÎ,×o/oŒ1ó¶ÅÂŸ|REL«“Ç#,²)DgHmìuçÆõR	égdåÀiìÕ›ã%{`Å|þeì<?’_^&Ç25XkËƒtñÔ@D8ö”m\x©­’5C:q¾ßý‡k›!_þŠ!$7 M	&y`½aí°]I&ÿÔ2…<ð(›ñï>ébTíÌä°q„Y Ež"ãNrÖÚ(¤R3ë+MeíåÊÚæÀýÕš5`­W!Jò€Í(MÉ€à#F¸@Ž¡fóÓ¸¦P¼<a”YŽ´Õ¬9YM_íY"5mõ(Á°&\RàŽG¯düÙ,>½Çhíuì=M½&ï´—¬ž[?Èf¨Ö–
Ù²î'ö÷"®Q}ÖÓÓwT#+­‹³fî7ö,÷ÂÖKGlžÒì‚mµjÙ8ÚïX¤¡·ÍÒš¶š Z#jŠ­ü¶>+Pk*j{)(DŸiiÂ1‚Çà0ë÷ë Ž˜–q¨b/ÀEùÆFkqxíð[‡ýò¶’AÓlK"ŽLaCç@ÕjkWñƒÄò¯­=ò‚Ášb¸²`Yï<ôˆåmˆ×Z[{[[Ëì«M¦ftÀ½ÄŠ¦:´Ììáú*#h—éä4ÕCºöiálr0¯Óç4>T>™Á1Ž°ÊGƒ™ÌÜ\’‹Œ†9]<çÔj,X?™AeS¶—OÎ±œó¤Þçª¥hpîÂk@:élUD5º¨1”!ÔÔ´Mª¥ä¹Ÿœ›«Têål­–ëíZÅ+š¦,ïôTu¦á¥R#´5r3fry
só”|S—©ÀdüÎ—J\®B¯åOe­ì¢aZy¨“*·¸Õ[lVÐ`ßÈÁn®bÍþ]xÀ¦aW²oÚ¶Ygªï’ücª”R1ù÷‡c1h-Âê£¶–Õ†< “åÙB4˜S·™¹Ù©Ä*Â¿o×£z³‰>ªY|°²"ÇÞøüµ•ã°°–ñ›­H;ôì)k.ÒïHÍs¿bÊ:»prCæÚ¼¸p¯úÐ«/ñš-ß~}VüDõchméR?¢Ú¡EËldñ3ß†ìt7ùÌæ™²Æ±½Ö$µ­?¶øŠ45Gjí¨§™¦Æ]m™Š5XÛ,¬9\ÛÖ¶b+¾¡ÒÚï$­ýÎhÍ`M´†¶&CH­ÍLHF–ÕA†	JØðI†fÝ¿²ášGk›¥µ}‡%­õ›¾ïÜ¯tTKk„ÁÚl@m³VÁíõÊ”ZoÏWÊÛ—öl_‚Õì3U¨f½Öž×’ê`Íévx|@i'3s³¾8UóÁ°„VTVÏ›™ZH
ùluf’¿Fu-¢<:¦ØªH¦Ÿ1G2Ä¥Áðì“ŽD¹üÀÕ¥•³wù¼»kÄöµ[{ã—I„Äý]V'ŸÑæí5`ZûÂ´5Ôµ-Û
±¢Uì<‰æñ3(vR£»qav ‚ß\¤Ù«H€m†ö5äBRÃ60‚˜ÆIOÅb#Æ-‚âŸh¾ÈÂVÄþ$O³ÚßŒBX#  ¶‘oè»–†T!PÝÒfù8 ÓeÊÔ80ãÙ‹(½yÍ&5Ó´1àôC°–¢‚ÖÔI­¡žùµE”ÉT
žæ×
¹®h8‘¤òËñŒò”¬\m{ œ(„hr›Áa,$9Írü½×V$(Æ|sÑé7fkóaTã§KMO`æ™ˆÇsÓ5Õ	43jþïÏAn“çŒÖ&™$Î}|NÇ°šÅùÚÄõó¿931}æ7§Îüìg÷ñº¸ŒÎæÄ—Hk¤A:XSäóO¿¾Þß}èè+Äúú>sî×?ø€Úº»&L ôïÒ)$rE3Ñ(z"¤¦·Ö½ç¾`8âS‚­ZÓ}BD_ƒÕ¤‰ªÁh‹Ç~Ëì±¦»ÈÊÑõKóóf0bK©sž³¾Øó+k—WôÜãÇÁ»D¾€ˆvì,+¯ƒ5¶íÀf€æöÚ8@ÓÞç³G˜`ã´5'ºù>÷ËÏµ¿“iÚZÕ´¿i_šN¸vØJë%r¯:¿ËæqL‰Ü£",+—~ÆŠ#Kì@)a.AñÆôµKRÖ¼>kD»²öü×*kFk¦¬éÛõzÕj½ŒPÒ,ß¯k.Ï4²·ÔãÕOr$œ¦°Îö£ô7ìYùš’µï4Aí#î6eµ*×.‰€YB^ìE6ëÁRF´`Mª¢À¬=œ{¿ƒµ»›’ ¹®¹$H»·×Ýƒµž>.KR#­Ô•«á¶Buñ;`R8f@¦;°vQMG¶E—ëñ`hÖZ}ÖZ7&7øAn„5ÌDÐ€\±šîÖh˜-¯H8mHùmly*žñXm8·m³®Ø²éØÄÑ„e]J+€f}ep$²©FÌ¹^±á©ÛÑ¯¤¬YÓ×¬µ+kdëßlz÷¯&Öñ¯z(S~ŒkM^“ÀÖâµÍ›p»bƒÍ´¬F’ÒÏ2µ‰‰û,~L—é`Œƒ¸“z Sß†-×SG^{lÀT°64ÄV)´S+ kô¥ÿs%*ÇC¡ò0Å™¡\&,Ãq¥Dæäl‰Kãiç2˜8“ùQ%sá*×Ø€µÓ§¦N©L×þ\oÿZx¤ÍLÑ	»”œ‚ïJ##µéj¤Ì¦¦ys«'O6fª«¹‘=…™ÉÆ ×íôyŸª‘×AGÍz¼·g¨’+âüÁêÓ—ÑD1Ïÿ}%2F±ùì´RIkÖH÷À[±Â´ ºÆ)4Òq4ŠfG—ÁZ4œJcÕ_ä¡P…|Nõ}’[¦·kQXKåaµ.œU ¬8æCIß‰Úì°2"W3œ»Xñ˜kí¬vµ	kW¯?øÔÙkó{øÈ-dñë¯LUà3Å ÝUPï…+UÛ`\Ì®[Ö º¨Ö&¯õÛ«¾óê¿½ÚÞd×~ ¥(]»Ò¯‰È¬:M#…øMó6ê¶`4¸Ëuccº»;_y¾¥©mRÕÖ\Üš¿uË®ÆlÒÕ<R»½%¬mÅV|3Ýû¯ýîw¿oBºXqÊš¤µç)ìÊ£Ùk1äÊ&³ïßGglï´î+Uk^"äa.É²_Žýhgs¤˜Ìªfí$ß¬^ÉÔ ¦ì§ð)î¯$ø¨œ¿º8¼ØyõZ#µbûùž{ÿÃNZ³ï-ç~Ij³•9¬!O‘àGÍU•«ˆ\N­W&0ña,"Šó’9[\7U¬!Dx°Ð72a&—Ð¹DÑ'¾Áe„ØÿÏWUä-2!ÙÉdÄ`íé§_¿ùùs¬¡­}áò ‰Þb´@{ÎñeæòÁ8Ü MÍèÞãã$ikJ‰k !ÀtdôÄ¹íf3);ÈëzÇ}3»y®Š° Fišæg¥Û¨ï²{ï ¹*Á\)Ã¯!’K–ËÑt$œ¢~MÍÓx=Õi–þhT7£Ì4f@.)p.£qÔ'X›¬ºUåAJ‰«©ËáSêc¾MÁ¹–©§ç2\<yk…]ÍÑâ§¬)œâÁBˆUEuÞêÖÌzd×¯"6ÏnÆï=zºOÊå\bdB8	*'ÏÍõwWªõ×&r†eÓµóµÒõ§§'ÎLVû·?›d„ f›éó¤BžŸž~ñÃŸ½øÙ—T­¡‹ÞÖ@5(Mk)}Ö¤¬©ÉÚÓG!±þµgŸçdtçdðÌÒ_üƒäAÊ0nsÃ™NÈÌTc…v²Z4_à Dr¾„ˆÛ¬%Dk‚5¶Í&k®.4C*³lÇµ³tÅæZJuŸîØ<Ó0Úg›(k+v¸"`;®Àj}ÏEöhw´k#¶‹ÇEeZ%j°#&«žÚæ.¥ƒçÞûWÖ¾¶×ÚMGh
üF4&ØøiMìUš,!wCA{Çi8&ƒüCGG 84µGu0&Ž ÙŒÔz/@U|qé¯ºAÛ’ he4G¯¶}S!“5Vk6ØaªÞø˜3–£M.’££x, ¸­lÌÉûq³¤åAz v—/Ü±]ìW Þ¹(Fk³–™Š7Í@wf{é
¾©)¶Q™ÓÒL]ÓÖŠØ6[÷ã²_Û;$wÞéEòpn"fñ`%°*X3 ¬±•´&tc¬cöë‘–ÁˆU£µt5/8 lÞ¡š~*`—9õ˜XM§åÀšI(¨1"4M³ï
ñ†ê]Ïß’p†ýö¡€¥ÞÛ^Æý¹PìåWyšµ—Öü 2!]OÕì>¾Ÿ‰þëkÍ8ºYYãï¾kÕZeØ©jåÛ*l¯½ÓâµÌ×:Dz¬f†#›€­TªÕ’*Ô&ôªN×ªuæìœù÷Ûz¯–¼"Gÿ8L`¶*üþ{gûÛæy¥ùöØÏ²!Y0,þbÃRƒB–„–CØ‡¯BC™µì²Éq1Œ{Ü2¥»·QSŠÜÂ#Byb3ó% •]Çh#Á w½ˆ¦›/nÌØßun>¡'3û1èˆ|^n>IIæýüžëœëÌë1uÁNPÃí#s`DÍ

Ö
©æ<$]°ƒ4(aë˜/7KƒÑR(DB#ZÚó“ã-ÒkI¦¯\ærÏìoUëÏ7²¡Õh¾Ð¹@%Ý9ÃE”·îPÐÂþ
%¥OÌR†w~©˜ÆÇ*>¸3T£ÔYÆ}¨éRTl(‘)ð’ŠY®sà¨E‘Õè+3ký¥¼š¸lµê§åR‚z4Ù÷Cñ¥ªÖ,HÈ0cHÁšZnk!¾Q–TÎ”þH˜”ó´BeÞŽå+…B‰m YÍÚ\’eì·:~iµ
³áÄc}Ö¾$¬q>³ñÁ­w$ƒ§>\^=s&Ë)AÁ_²’5®ÔÐ&¯Çû5‹yAåÉJ…A9Û¦9ãái_Öìíî«ÖŒ¤ÞzuDÈ«í£Ã{Ú¯oˆÖœœX²¡ŠÆ°ˆÍá›ž‡Fb;×}¿¯R­g+bª7Åÿnóþæƒ·\šób—Õ¶*Ö¶b+þÿ±AZ#ÖÖä	é¢+¬Áj¦¦Ùý€q`Øt	ÕµZ›^»Þ/­õ'B­1IQù­˜`Õh–3¥25kÚ`Êa°QÆ2ð1ép‰u5¡$ÿå[÷I„¤Z#^	2áÚµÏçn(’&kÖ–º‰®Ö\ªŒ×–²j®6‹ô
T4¯¶Z*Hƒ(ÎâÿJv:‡)++ä„pøÎ2óäã°Ztª˜Bï:;98¤øÖ»uŠ¢¼MPíÏ?ÁfdSßhûö
°ö]X­›I@k]X+ª)6×/#¯"9fŸgNÄ(¸W-Të ÓÓ’öÆÉ…\ÇžÞŽ?¿0¬)ÑdN°v|&F“gÆ¸?&¿z ŽG"º¦(çG:­1Åa]Ì7e1-’NùJq(-Y[Œ)åQ
ÙYœ½Ìk„ÒµýÚ=(CføõéŸž%ša™‰Û·Œ»°ß¹òÎRßÕ	”ä•²b#]6kh®à*¯&L«RÁw´%?áÌ/ïèD˜«£”˜ÈR„0d‹µÏúZï°AÄºTgd’
k	_’#áYŠÅlmÇ`ÿ{Öd³úîJ².,ã
,ª6hGØÖKË€”÷FÓÊÏÞüþ£Ï–>}„’ö¬F¼ óxíû¯ZåùÕ;ô½yÿý±±÷ÛÃ|55“ÿâ·+¬®¯í°ÈÑƒ­þœ`%CÈl>_ˆ¢®I•ÌøBúŒªÔÎÀjeÂÚaánVþÝkÖ[Ej°Æ rš!Û»
F±‚T:×²v9L[9u^K+=X;sø©V½<H)nŽÈ*^ö#ú™C4ûò¢«Âq‡Ö¬}b°öµÒÚûV¶f Æ¢ûE´#ÇJœ¤…xí¸`oH|O)Ö´Ô>+Õä1ô4bF"›"¾ëÙ]¤Z ¤ Ò õÕÖ¸}®uƒcíŸ°DY“ç£±Á7ž‚/K	Ü%qÉð	”<9É.†dé8fE¦ÇM.~E›µ'Ü Õz–]eÍ3ÉæáSëzºþ–9^³=½V-Ö¤3~•Áˆ}9Æ^éÚãÍÖn9Xƒ¼Ù‹¼óS‘!ÞškP¼KoQ´Öu@A€[qwY‘´¹k½pÊšÇkîæµZëK„¤)¶bpH6ŽÄdÊnåk4t6jÎkxöûµÅ!¾ Ÿý0ÜæÐÅ¹Àl^>£Û†‚2ýqÚÍBÓF?ãR>4?™ñ¢ì: 0ä5Ý<VSô)kfÞŸ¡~«ÑnvÈ,·#yƒà<_ÀöEBd?¯õçCzÔ&l«Ö/×J6v#¬±ª74e–«5¥B6L´Þf–—–pâÇ’(ùÅn<‚ÇúÁ ,•ÑüˆÌf£ÀšÜF%ôJ~^‰hœ«tÌ<G…2øƒ4¹Éñjõ¬ïÍk‚l6±cÏÄ1¶ÏUjÍR2œË§j)Ž¦æ-‡½VZ†ÐÖÿ\a¤kY³£2‚…³Hkœû[a*p³ÑŠ¦„V==^çC¿Èœ™,a“©¢m”î;dÿÇ)  K6þ¸~êÐ	RUHu”}¥QZR†F¤´ñ~àt¶8@¼Ä9¿MZk¾AëúM×›(,gºUý¥¾¢ùñV8‹S™+æöç1°)“sá#½!%{ÈN)‘¤›Â£ÏÁZŸ/£'rYä-âö"’Ù3§Êôà¦Ø:ä'ÌÒÑšÚ+(5„ôÕ.¯í ÉvXóåÖ ÛhÄ¹ObsªCS¡‚µC°ÚxÊ»w_½&/H¡”N“®ßÓêÞMe7n¼Þ†ºtÛgÁ¥<ºqenD…ÃÚRØJwíWžÈ$ÓÔP±ö«÷àI
äSOu…µ/ëj|m	k[±ßÔÆØ(k ­™{ÿGò¤{óÍö*a³¤»¹dÈ,µ/RsÊÚô†œíûi­ßò†hÍ:a½…Õô³¬LÈ²Ko k£óM&ÃZ¶°™:•\\nOlÜZÃò-û|SY?ß›.Y&­½¸çEU­¬]ú¼ZºòùUÕÍÏ—(ÄZ˜M:¡@‹	õõÈ²´¨Æ§1H)­ˆ&Ò`Íš¯EÁ6<iô6ÈX#ã_¦SL1ù|äÈ©wïýò_ùà»l“Ð÷ã?ÖpüÇ µ7¦çÅj‚5£µdžË µó*‘ñÖþp:Î†'§xŽâ$Fúg™EN'Oà72aöËGé|ò²û ={™²Ÿc{Ç¹„y¶å<ò³…,•jaU×‡Ñj—ŒâÃivÐø•ÌF€µJ,¢‹¡À€†¿…¥DÎ-½\Ì¶ns*N#òCcÌØ+Áþibæ©ˆŽjqô¸á[X›u&#UMñåÎ0kŽç‚JLlß-$†Kå læòF|;«ù]-4‰ý¬üØÖ¤¬¹ŒáDŽBñj1˜°ë–9dÐÊœ´2ü”Øx™`ß!™6ëEK|dCë¹â†j³ÅŽÊÔ´©ÐÕäÙ:°ö£k×>?ÿÙ£+»ÑÖþÑ
ÖúhÔHƒ5
ÁÛ;ÆÆä 9†Á—êÉ·Û«öé]øuŽ(WÊÝ}*Q€YúJ)z¬ÉW…lHüEI%	2W.±Ò°ÓVl&ÃWß¹÷jÎrõº#R×lü”:iÈ
R™\ËŒ/o˜‡(wúÌâ·d¹B©Ñ¢ËÄÚeÕÆT˜¢VéÒZz¿yŒhœ•mÛ#þDk§>øMOYûe_ÑÚwúò ùòp;#/§¥š}¡\C\£¶¶3Íâã £ì£¬!wQÁIùš·õ‡€ÁB2™‘Cï ¬=a)6ûVÓ‘_ø‹üW×Ûâ„‡FªS“¹ˆInJ.Z9¦BS;Å½¨jêYÅ-þ{¾ý÷<^ëâZ/RØã‰k+»pÈ_ÙyâI\ó`’¤:|³À–dåÞ½û_"µ.¨¹•[¥²&ì²…ñ†”l ðÈÄÆ.GÕšÒ»¬vX„†¢võêM«dÓ¾×ÛÙ<Âi^Kì~+HÔÜaÀšJ$ÐÖÂ4RÛäÝ"6-í…,I„5`NHÂ@phÀO£µ!ò%ŒÛ&œ†fm×ü’Ú¬´ÍÖN“’E+¸65¯xÚcþ—ˆ›{îô”5kjˆoUk¹v™3d& ¬¶ßÿ_¹ô¶Û‹¯=éÙl³½ŽÙ—sPÏj«2Q%?r¶º»	¥uvOûÊÍŠk°(/ÚŒê=èËezJZk0Ö \C(“<9ÊÓ‚S´PÈp4}±3¡ÄD‰O<ìiq‚s’dHf+5ÿÔ$n"ä—dæ§É^9‡ÿÂY|W ÓÉ‡;ròÜš\2-vðSlq,ÿ@ín’å™I<†k2P~MÍ7i´ý¦Î~¶¦pôPäÂê<]$%ÇÏ¬(?Jòïƒx’ \±’®¦×¡Á¡Ö_ò]FZ³|Hg)`ßi|6Ñ3$µ¨–R´n#”ËUÓ8î#jÆ7–ë£Î	È-L#î)º»ñZ¨_K&‚`›ŸçÛâé\’Ë´³­$¤æÂƒµ>aÍYAÞ¾}ëöíåoùSGÎ$‹TÒiÂRiZ0‘)g2	û}ø|æ(¢¿(£5í¢mGM›`Å×Ø!ªÖÖ.YÜp°öé§?ÐsÞ%¿þ{¿ø>Ò|œS×ü³[÷67ÿöêÑáá£m—õh1æ±™¶íN8OÈ}£¤Ÿô¢¿fí½W<Rëwq¤¦ó?þ
`ƒØ>pk]aMÑÇj[ÂÚVlÅ7Ý½û~ÁÚ¸öÑ²¢ýÑG«D{šèúZY´®±íblLÒÚÆ=$§¯I„„Öœoc·Æ ¯†Æ¾"¥r*™J…’,‡›óŒÌ/ÁoÉd6Ä™q"˜êœZ[õkko›‚µ®	é,J_Ù·ý¹¿ùZ›Ÿ¿B4ñ+ùüó%d¥Ú¹Ï/´(Y[¨T
ÀZkÒiI
OFâ1Ê’éÙ‘RÔBÌriX-Çž*GÛÏ ~†L‚:Š˜óä[Äâì£fAi¤ÜÿðÖO 5`íÏL&ä«:ßw°vÉÁšç0’ËÆ‹Xl¡EÉ4*¬2îBX[€t°}$+q|òÄ‰p%ÆN<±÷-²c…°yæŒås¬’é^Í™2Owçh†ï²ªˆ€ÃÉëÄ\9‹!¥<¼ÄPw&IþbšÃ´–9H‹´I^[s´ž«ƒaŒ^–—/J{ì.ÐZ\ß‹“‘ª)hz8æ‰–œ¦°K´ÒjãS.ç˜ó©Z“¤–À}#ŸMSÀæjÒü^š¿Ûc¿xmü³øñ‡‚;J»«¹,&ÌH\:&‹õ_×“Éd*KÝÜ\9¤Fb–Â4£6·o &¡mw±®}U¯1t¹^·ëÅúe'¬ÍÁjâ´³|ñ£G×Î]xÿÑ§Ÿ=úôâÊâ5ó¸Kä]ÁLw‡—©bñÑ=Û½8`ýÛ¹ÈºÃ.âÉîÄ¤N¦áF)±1Wî€b[4ÎR>]ZaírÚ"•aÖN{Ž‹«ž²FMÚ?­.ÿþ·6`ò›ü 5¥ò¨Ì ×Ö®®2Å^½ÊðêÍ«mÉqg×VÈƒ<|µp#€BÐPÂ£“×Î@clZpŽÕxE«1È /€#¡µû=eíñVk®ã=á`Í“ÓlÁÞkïßýôîÝ×Þ/—©f­»"ëQ&>9s¡M6;Ç!6µÌ>yŒ‘IÁš¹/ºÑº³|ø­µ/Õ¬¹”GEÕšpÁÑÖ¸™²†R×ý¦	Y›5Š‰ÕT¿æÎSBÅiá^‘Ãr¤[ÆÉ}IY3\{ÒB³»ìöYs” ‰•v)«qeýË°fl=½ž	Í¬®ßû:iÍ€­¿ÛšÝl±vÔÓÉ$“ñ,ÞÙ‰cÊ'Åë˜^JcDaÔ,]²Gw’Ûn
Öl×SÖÄ…ŽØœ¬fbš³ƒì—Ö8@é™ï­F9c7?Ha=³¤±8IMî"’TLqãyDºš5´˜Oj­üz”Sóÿ¨O ¦ÙÃÊ¼ðãS›5Ô³C
—	£I±sg³òÏ9uÄJÖö•~†ããK/õ;÷ÖôP^1öªŸ&×øêFm¶2vç/ÞöeJûDl¾’ÏKˆüZMâš‹z¸®&lª›®wÏöÜ.Çæt­Z›(uèß…æ%97iy‘zzç‰ÆDÂ•åY{º«ùÍ…"¨õâVâbg7Èsgˆ3rÒ‡|Ô/ù­‚Åq¼Ø©¦;Ky5Z«³ˆ0Wa‚¬u’ùXñÜ¥ÑD£YIÖ:U¦Ë‹Ð÷\$Ù,bL’®•¦âèHÁ©ù
ÙøÈQÂáÚR“²…`¦TJ”!
Çþhâ²S’¿h"èk”(àÖ©lžu¿œûáOHM&À› /XNñ×Àh¾6‘Ð@>ƒÖ: e2™q•’6¦9<ûÅš9õò+yc\ˆ3?eƒe¦¥L©ß—ÑeA>fÛ¬ÝRÜ¾9‘X\^n·«sŸe=òVH<Ý‡Ùg<RÚö=`ûR!w¨£ßgŽ…#¿>Ö,Ÿˆç|eÍžSí;¿óÊ?¥ˆÍë×ßk“2´&Í…ÜC¸+é‘»¶ùbÇùù«96kVý±¯ýÞû¼ú=Qí—¢3ÚE|òàÁ'¿rÂÚ“k š»ýÓVµ­ØŠof`1BÀi¬¡«}°µq:hKXc¾hO·MRó`mLW9G•¸†2b°öç
?!6¿2’yõAjÀô>d`-“™ö•(Œö²™Ñy²:š$Ckµb“Þ¹ÅÎ"µkË|”¾…¶Æç›N–ˆW\gì~0æ’,ç}ê‰Ê
‰d·«ÏÏ³uúv²J!TŽ s 'Í~j„|
åìáñ›Èi@QSOµøx$ slØÄf¦òyjp$Ë® káè·ÖîÖn DH^ÎŸ¡5N¯I—áeàüÅÕË¦Á#µÎî"¼–ìà,VG²ý%F’Ï?Ãy`S.´1<gN<CN†ÃˆW±½ù0“%¥r¹ê‚BÂ©LqÛÈ§åâR˜ŸÑj&gÆáK¦^%ÝqÁ2ÜbªGÒi LÆ#°)0—KVª²|ä¹©‡[pÊ™ü8À9i>˜™§È°fâš`í²uÊž­ikuKy´TIbm×Ì\µ¼É’ÈÕ–\àL’ì9@ß$åŒ
	M[;,É^RÚŽmhhšêÈæÛƒ”&ÎÙ“låBÙ9NiÈîÈ$³¹"°¾¸*V]Û"ä²9Ö 0,øR×”ôXÿ5GÌVŠå¢°Í²ÙØÓ¯5+È­®Hƒµ7¯]ûŒ®ØXA~zXëÅ÷_øk±´ö]Xí{×~tTÅãûÚÌ”Ý©™7a1¼‰	u[CþMˆÖ;}	Ž`(E'#y°•lœpbKga3œDàª²Á±º|êÈéÕ¶1Ù`.B›§d 	®É5/Æ—A5%>Âjl’IñÚ†Î$ï\eÎøl1±røh_¤Ëh÷r{kðV€[ZóŒ!%É§ÚþÇïLY{¼h¡êËyhi’Ô´%PsÁMŒL¿­æjº!²¡­aÝ/:;~\ö¦ÇÔ½íiÐmï32¡³ ë…ˆsAD{¶ìZëWÖ¾÷ÿP³fñCt5¹Až°¢4‡k,Ù±Æ ÏRwâÙ½®Œls×û)Aä“µÿ^(mR¯i×ú™3½>kÞW/zºšzšw“²æ¤)³Ðß%3HÉz_í$Òï	Éq"LEäæ“Êš}°qÓ¶÷€»¬yµg‹]‡~¼FF”–øp/ßü¡%D>\ö½€,uGf»)Xs±f¨æšKƒìSÖøò”µž¤`md *o‘|uÔXp‚Žä2 É9Ó—éÁZ<“o½Õ|æI|´JØð·7(c‰íÈ—ù',¯ƒFe× 76¦5 É³clÃXmß¶6ó†zc;Xëã5±Újåðªpeq™^ŽµöwVgw—ÞFb+¥|l¾¯sˆœõ¢—É½¨^žÛQ¿¬¨ÖÊòGjµF¢Tí”|óÍyÞ‰+|ÕŒj°	´4d5ŒX¯5ß¼/èÃè1«)FB¬!¥F!ºe2´4‹åŠµB KÉè"’L-U†¡JMQZç<Ô˜ Š`Zëlºv¾ÖÅ+TxÓN­Xìtêë/^Ä#—ðXwZûçð*¬á]œ–êXKÖ–’üûfI–’d+†sÒ	I§ägRbƒŠ¹Ð8•‹OI%³Æi¦
R]­@øbÁLRgtÍ5yà)¬.?„ç^˜ŠÓ{çT€M¦læ[¦ñíSd¾ æréšcºÅLTŽFóáqDµ‰¥2†ÓÒÖzi_jˆ}Ýâ-¥B®MøÞ^;ºÝB}ÔI¬Z
äõƒhýÎ}ÃÛÊåÆðã>„¬‚™ÒÔ[—¢ç}Ä<Õ—d~6¶ïE
ë•é`í‡ÖœÐ¬µÛœØ\UšÅŽ=]·~-ØfÉcÎyÄÕt3`¨¦`À…­Û’Õ^1]í±®jŠ_n>¥mn²d¸vXƒÖ¨}~Ò\„Vÿñ?lÅVlÅ7XZ“½Èš4ßåþæ»Ëo¶WŸZØ¦	ùk™¯•6Ùy¹Kk’ÖÜdùž“Öž¤5iàÈÕH…KÔ=OŒíÃªÉ—)7§‰f“9™‹–I5¤¬‘Ÿ³X\»í¤5ÉY„jÅ~¡Jñ×^x.g/K³›Æ›¸T’¿´V«$çÎ]2HÀ¯$Cò4]	ßÈe<25BÂc:
ÊÐ& ²Ñ×s/Cš€(cf/:„ëpš‹Rá|æt<Ÿ¼³|ÿ°vŸÚµ?ÿä­ëÀÚŸy)×È¦“ÿß:°Ã7¬yUkvï¾°;œïì¿Æ­i@6ÅŒÄ™bŒK¬÷¹šùôóöNNÎDÀ, êX¼XÌÆ&cÑT17y‚>×ÉL&9~ðàq0 by’B
¨|{wMîo!h¥HýˆðÐ ÂðYšQÊÐT&'‡ÇX¾ƒ:Æ¶ú_Sþíƒ ÜU	šÌÁ_Ö¬Ã8×ª³`Ã=PÖfá3‚“þ5ÿaXK·æbéŠ¸äRÍfXøFýfÚO•w>„ÚD‰óå'áÑéQõhçSà»üòñpt×£Éz­‹ÎªU„0;ÍË$¢‘Ú¨ÀÑsÎ	jv
$VûoÕV©:n2!©—ühöIA¬]$.œûÑ£G¯¾OÑÚg%BöÂPÍ`üÖ6#G÷Œn´÷ñòT&ÔŒ:mÙG6d µ“-Œ·Y3ð|™^WÒq¬©/Œ‡ÙZ9EýçÑÕÅ\ ,A5¡«f*b:š$4rÜ2ê›ýKTä¢¬Yß#’Òµ5Ò“uÔêÕ«wî¬â3rDÒš¹‰¨vÕPÑ¯6Í³~´`<f_‡1ÆÂ…³¥ä»°þðýÊšÓËA¦>iÍ“Ô´xM¼Æ(·é³?…ÏŽ}[>#ê…MµšÜD”‰?¤LÙb}ü¸,G48	®±-DÛÉÿ#ÈÃë°Û—Ý ËþÍ>k¸ü{‰(kÎ_à£›Ì=ÔÛ:šÁmƒæN·×:«±”¾MÇc1)Á+Hrk=Zc¡e_"ä=çÝß3á¾)XsŒ´Î[9ñìÎ•Ã0"6CöŠ”çù$¬lö`mÍÙV„^÷ŸTÖºM±û›­qëKƒôr0ØØÅßqç:î|j°¾¾><±½Þ•ÔŒ,W°á\sc½4HÂ³îï¹Aš´«õ»AêÅÉ`dˆR#³ùbÈ.!oö)ElÖxÄ”5výL1Ê~”«^«~8ÍZ7¸¦dºeo›°6j8ø'Ør°¶nõ>–rlÝ~€‡ºÒ~É‚&÷ž¤ù‹ôÓÚK¿¸ÚÎ”š.tý^Î?Ú<½|Š«<•ò¾ŸÿÅÔÄÛû|J‡üz‡È¾6[Ýº<ë“2e¸–ðeBÛÉl“|2ÍR§÷È…6‰ºžÙ†U$0Ö~qk$Ô N)¤üÜœs(ZHFùëekåT…K€ñl¶€R™Aðò«-›™öÈ±É4[xÜ×.\8×H²æ|c©ÈLÒb>¹ÀÞR1‡Gd£fŸ^¸x¾L•@õOUÍ{£WÞ¸Ø‡ÊçÎ520 Se G.@-Aõ\¡ÆwË$“…è`¦Y†×”»0ƒÁRŠÑHljç=Ï£ –Z³ 2"
›¬pçEþ¼ãPV˜oÒñurLÙqöeÉ…¤;8ÁD”%‡"€r1œ+MeËÆRfb"“˜è*kpÓ×ÀÚj³öáêÄêÚÚQ÷a/oþ2ÈwN†¶'25aŸ{(Tnp@0èe‰¸ž Ã\€´œ‹ù+J™tYÔÓÙsº*9úa‹¨LøRýýÚÆëk·6vÕ«GƒÌk‡X?ÖÇtÖßº¬ö¬½þžyLzªš—ýø€òßüêÁ’%>ùÍÜEÖ>ÔÿkOWÕ¸÷êÕXm%AnÅV|S«Öœ´¦ÿ·À±öÑ†!Em«.Tpè’åÑ;ë­ClÜ°O˜—ÇF§ñƒìO„ôüû]míÐ„\Ž 5@6¬GèŽù&Ÿ«˜ø—Ð%ÊÁB–yékº[¢m}øÁ‡©EÓÖúÖ‚5–¡5ÁÚ˜<F®pš1ÁÚùÚÒ’þÜ…¹¹?Õ+tEÝÊ"l1YZ[lä ü…“9¼~[­$³Hù)—ÅÄI•gîÃ
}(*Ðã.Ïé6-c¦V>Ü|€‘Ò÷ÿNŸ„ÿÖÏLZûáÇ:åw#Ã¾„^ƒ3ï¬uvïNW©%Ã˜øA
M)õh0B·m¾÷~üøéaMçàHX’WkòéH!^ˆe‹tÑ‰Lª’.­…9³Åö<Ænž¶9‘ª_,BúaX—ó¥Rˆfk Ii’ÉìgJ9L(²GªÀšt3VulÖjíŸ»ÊrDù’’B2§¥flÕ«i–*Yƒy[œTÇÇÙ¢q]”ÉFËü¾ùZ’RÃÑ1ê¸¤­Ñ;ƒúd§X{|‚5%Z–R&ÅéM’Æä¼·rj¸‡ñÍ[©âœIiFdæëh°æ™…hÇ6ª¢1Á‹zÐŸ©¸Æ´ÄÜ¯©K{Ã#5‹Àjõ‹ˆóÖ®AØŸ:XÃbÄ!{´f°ö‹k?jïØƒ$³ð„JHŒ7GåAÇ[RÁšZ’±Å[%”Ð©¡|!”ªkk<—=uê¯Æ‰45ø¤(®¶WA³ß‚J×O–¹”HhMÛÿ}Qí®½=±Ú»kÆf@IË²ògsq¤»yÇÁšš¶iqDwÚ0&³µ°Œ›Â#7ïaÞ`¯hMkVÿôÉ5kÄW­½&i;ÕjÆkÔ^½ûêk//üóqøã8°¨q·88I…&,äúa³gOžTªß1±ÚÌ‘)Ú«Ah\<
¤­SÃ¶÷K5k_“Ù“ÖŒÒì.ië~£¸ÇÌømì’Z®íÁÃŸ…|EFñ“¶3¼T•
ºV–ûzb{#ýqýqçþëZ8XS<|–>kÀÑCò á¶½^ž£ã2×®FpîažÝ$¿õ¯vé¯TÓ—v{Þþk.ƒÑ8Í8LKÞÌ®‡ßá'0Dbæú:õdƒ{!RÑ¯¯ð€5r å1jÑ³îEš™g0âùŠp³íÇú¬}¡¬…¨XëÚü…C:{š¼"J„9Ô™PÊZH:µ%‘c)[^r›O¢›Ï
¤		Û~õËPÞ£I£Ó¸ÛcènÇ™ƒŸ¨‡åÄØôsÔ{¨j}Îý}™¿¸ÝÈµ‹P—¼0ù©c¯ñûúÂéSUÁWù¹Ÿ¿ýâÛ/–J/(•Ð×J¥'"ëÃ³NGÈ¢±Ú÷z¦LkH>¿R‰b‘‚±ï“h”ü>y]ZŽ'yHn­ó‚5Üõ#˜v	ýH!Ÿelt„äžL!ˆ…÷OÆèi(üå¥rH0WZª•%•å(Ø—Ç#¸Õ¹xq)·ªKóç–Èu,æ˜:ŸÇ=’ÌH,ý‹õ³³XÊpq1R×;«JWæ…²•"òàü¥ù2:ÛäÌÎÁ|NþÉþùF(_L–æIùèS;l\i¨›w"H²&Ì˜ÍôzÉ|Ù¥LHìû¦¬”èB Ê/2PbˆÝþB„qÀZad„<"ÇEÉT¹˜Ó¤¦+¬RÚÄS…B4›,ÉÆ_8¬áy%²ÔL‰í“°æXmXëZAÞ¦ËNí«7»Wæc•ç‘ÃÞ¸dò‚ÖÊ5„Mi¾äGu˜tÀ:lv8Xã7§g¼Â™Ò¥Ÿ]:ÔóîÞ}é¥ïHúr¸výõÍß{ýúõÍ{mÁ&)MÊÚscI­Y5»‹äöŒZš$»ž¹_$™M¯«möPÍ´4c4‚Õ'|@ïïe»³úX‡5)k­qÛÖ¶b+¾áÒÿe=XƒÖ×Þ$òÍUÅSO™™È´×Æ?
{YÚw’«YÝ ¨KNZëÑ¸fá`mtl7:|€‰ŠzkRä‚ªœk\ªä”ŸLåB2&Ií;’Í.žJ–|Ë\üêÒÚ=ü¡5«Z{áo^~î³|,ú¶k®15·Fó|³õÙJ¦CeU¹€'§Ú‡ãíQÕg|>«9*•,er@PE)’Ì:AÂ§sð¡<½ÌÀ!,F²¹xhÛÐÐâíÍûÿëö·7ÿŸ!7ùÌ®Akœæƒ7¨Ãºò…!dm7×â{g&[bD)x1JcvÅñÔb¢)¦[S¸Ë?&:;yòùHœ¬Íý9åN‚xûÃµÓq*ÌÉã.R1™¤è;Šßr4U`vEYƒ-SåLía&« ”Ù‚`9žc7~´f°†_ÿþ9UªfšU%›C´:g*på[:¼œiq–à›Ó•ý*5xu=^‘v‰Ë²ìâ¶Nžhl› ­%&œ±xŽÈ,i®+Ó€¼Žá]Ã|n.‡ýþ,W+¹9˜Í)jÌ¼![~–©fÒõºg2bhg“»;©9sé× |&HcehÍHQM¨öùûçÎô½G®}ÿ³Où½IYëIkÚ%0XFZ{uãèÆ6ö9á—š6ìS÷kyÑé*¿Š˜°a5NZÃS$_(8q°öûñôþ³û!·ZÖ‘öÆ"…j¦«™ˆF£„5çÚOÈ9Mù”«QÎÆÕrO{
›3ó_¾ºº²ÊÉ4­£È¬$Pë\›5-# —Ewm8ÆÂ“Õ~«íë”­½žÃˆâôï¤¬õÙAöûAÞU|êIk0!\ƒãÞÿí?Ÿ|öjš8MÄ¦tHÄ¶™'N89ÝH<Â¦:RÏÄÎ¬hp.ÎJK|H2Þ;j¶¾ö•ÊÚ¿åé,Ft³4HGe<©Rþ  n4ê:å“ð­+‡ÐÖðžO‚“¦ý©Ì¬ÁdùI/HàLá’îy¼vuízWY»¬«±Ø}kå!PˆaÈ3¦œõì­B¯?Rì -×%«=iÜoá­ú•µ[¦¬y]”éY…°|~Ñ	&¤¬í|¸þŽh’[GY3+È«7vÓ µ÷E¤±š…à¬?’c„Î)kB5ç&aÅKÎ¿Ÿó†ÄßO¶þækÖ"Ü„k	ÿ¨`û #c ŽÉ™_>QDuúO9ª¥ýJ÷Ø>°]ÖÆ8Nú÷XÍ`mlãåÑ‰}–ùÜ—`íç¥AÞ½c°v—‘J½³©I[\\@c»L´Ê«ÿùÎ_¾è;ðö¾LéÅ½–Ùý¼Ö—ÉR‘ôUµ6Ò"uŠ»JÕÙâ¼°²\r­—¼{u€ÏÔþ{‚·Ð xw,Åjyr?ÌŸ%@® z¢Vt*@›ó|³L‚âT,›âO7kE%)2™…RKó‰(Õ(Ä¦Ö¹sA°Fižò0d#U£ù$¥z
™ýun°P;we©¦wÒld¦fvæ“Èrµò<Ñ°îØ©öyÚ³åÊù‡¥Ý¿³ÉTÉÏE¸xlÙLÂæ€~ád2š_&(™RhDéÆð˜Êîæqç‡äƒÁŒË–Ô0×H¥Œ`y™=ÕbãbŠÄÉÆRM…Ø‘0)÷d?båŽ¶ŠIJñrÔÝ©/v.IÑ|;°šý\'¼šµ>{nÛ5î¿½LçJ>|—©	†ÅX÷“ÉYÉI!}ß×Ì¹=¤‡‚b5¹S‰¼E¦?Ô6ŒÊ61«3Ÿbzb˜4Èi=g¿Ãµ]ÄwŠŠ®l¿¾oÍ`Í lXþ$:5Â¥rƒ-Åq×„†<FÛÃ;zÜadßÆêð¬öúÚfª¬	Õþå7üÝ'¿¹’>E¬®>Y°ªÙ×–°¶[ñ—ÖÖúÛ­Q½&]­ëß›²Ðì(xÓ 1¦8À'ÆãÙõhÍ\Fj 6i­1¼g”–3Hk{¶“Z06¬e2_¦L.-1˜õHªXáD¶\.¶1„¼uŸÂ5`ízÖ¾K2Ëýó·ÕûÒ„¿4¥)VZ:ÿù¹f¹sñ<\Éfyª˜äBÛ,ÊÒ‘h0iÉ®úhµŠ…X˜W¯³V‘F@Tw±—¦“Y˜ÔE®²q2¾{kóö‘3ïÞ~ ¬ñ.¡5.}­=B¨­!.Žš¿Ikœ² w_¸PŒ=3Ù
ŸœDãŸ„Î˜iŠùh²ÆEÂ<Îü3'qå§ÅÙY%ÎÄ(pk…+u9éGž”)Thf8°@I‹~&²P©NÞÀY‘Ù®³%Ý¼¨ær<–F\Ï‘â‚²ÆÁrzûQÐžŸl)€5Œ“
–8K·$£™šF‚&å]ÆjiÁZ]‡`ûX	g¡4gåo]ÖìI³Á2©§>³Ž¡%v4\P‰`-‘(Q–=QÎfw¿ñF5ÛšÝ¬´³Lø‚Ï8i™­wvÐ³—Ôxª93Hc×³}äÐY™Ãñ¶«Ù°†XÕµè1š­	Ùõ÷Xíÿ wR°vå£Wi±öò´¬û­¶ž®F\û>×@)Z{¿½Aó›ö^Þ7LßkÞ•24v‚Ia5›Oö–r¬™tÈ4^À¹:[ÎèŠo|ªàÅ/€oã0ÒÚéßÂge°ªrF¹Ž„üYJWc0“å+,üQÓx%–‰¯ˆÜ"ÿa•†Ùwn’?I´¯®kå3,z°¦`í9Œ8Í©fŽØzY‘Þ˜jÖlK7BãPÛÿÄ;¬/ò¿ôÃXf¸fkZ1`¬†¸Vûéñgeÿh%ki¼O›÷#°NàKÏ£~&6sbç;‡"1^Azçá‰‡RyÞY§ÉX·fÍcµþ$ÈW¿²hÑSÖºlêfw†ÖfÌQœ FXMEÆŸ?.ëJúyÄEâÛáÃWû¼ ûÝE^ñêÖì‘{vÃ5kº9mªµwVº°Žlð:<7HîQV@­{hYOÖ¬¹Hm}±°GgÝïhÍ€ËA¡×#FJ$/“¬H`=ìÂ¾ß‚Š5sƒ´Ñ£7UìXÍ¾z=±¹¹ðü ½4H§¬íüÖˆŠ¨HoHÊÒ¬þŠ<7ˆŒº`ƒa3ÙÐ¬Ä¨Ÿ‡@37^ÆMµ	í¬9$éÌ©éÂ	5££~-¦	!òœÚÖ[;6	‘còî—²vçqXÓi´Gkî¯Y¸Ö(îFzêz…œ~—Òß^¶
´Êò›í6|vàmæYúwx­gç¿àRfù<Õº’ñ—Ñìš|jÖêIÞ±™ÄEœ‹xÇlÖemÞ`mb~ºl”ø	jR!KŠFH¿Jò5Jd ÆvBØ|Œ6j‚µZ)Œ‚ZK¡lìÑØdXTV1ÇËªúc¿ñ'{¹U&:õ¹q`méÜ¹Nõâ`Öf*Š4‡w±ÓŸ¾RËekrNªk5\îeT¯NGbž¬EBP×¥Ù´Ã¶_â¦=¸¤BðY©Q®5x±ús±M_JdâT£5™ÞØßDžùQö!t·
–Ë„µ8CáH,Ïqe0S°–…Òi|w‹Ùxt Yå©“¢¸J­Œ6˜McR‰A%?‘’ÏÓÖ/Y3ß~XÍë²F»¢•d²Fbz"c´JáJ]¤"¤ê5×Ð<SÒCA^8¨ÆFS‹Ð	­'ØÚ>‰¸â¼û'&€5'¬ý€?4žÒÁZHuýo7òãÍ×÷í»õÖÏ6È 4>sÖ®PÍÉmZ{°Æ¸ÂÁZ_Kì{ííÃ¯ÿøgí÷@5`ÍqÚ'Pš¡Ú¿ k$Bþnù)bñ	VóPM±eÛ¿[ñŽÿÔUÖÖÕÈº¬}Ô^µ˜°‰ºnyo1ýu56V²ïGzØáßø	gv
¯l­Gkàš‡¬hmØ_¢VYÈ‡³ÇŸÖÊ¨|¼6çå
™%pq?õîíµÕ‰ÆÆõ¿‡ÖÞ­Yoì.­ýå?¬}&XcÖÖÄJÄR§3‹jTÉbkOO˜°=ÒB 9JEcI¤ñOŒ€jéI®Ý©9Y ÄX&Q‡	Bn95	ÊWPJ.ÞðÁéSÜÇ\	PSáš,!aWaÚÚô¥ÏÜ+@YËu.ˆÖXÄfZÏKÌšœ™Äê$ŒÑ°è«HHôsß[ €ûéƒ{c±p<Íy}UYˆä1f¹.ÚÀ9^©aÌœÖtU1«LM¦_vS¬%pueµ4³n2Û’ –VÉ½¦bÔ¹:ŠÀç©%¦‰ÕÀX•§wè{For¤äÃd9çFæfeÒß’…I˜§©•0ÏŒF(YÎ€0T²6pÚDBÿè>_²’šØ>‘A9Ã¢ñxk¶RÇ÷C4•uóá/£7írD²S¯‚c¯kÐ¨ìYSJqVž¬õáÙœƒ317íº Píÿ²wþ?mß÷¾¿ÿÂý‘D¢þBBN\[ÔC‰JÁ_„fW5ñ€êh¢±×2\7ßÚ´µ{jÊ²6K²ª#Ç¢+:Î~É=W)É¢l—[q2]MKÄÖ´Ý/§½šÖUºçëíO‹ÛŸ+ñ²ýþ|3ØðÛÏóõz¾Š„e@ª¥ÂyDµk¿'òìBi„aÚSOY*$[ŠLZ{ýZG{óÞõŽõÃª„!q—.ª#Á»À2¬tZ1n+[ÛYÂàÃ0\æ
œ8ÃŒŒ¦j±™˜ÇÁÅlŽ®ØPÙâÉû°A6dUQ3Ÿ~·I ·k—õDÈƒdr]TßCR'oá3‚$wÚ`í*æý'j°æ0ÑE=®qõ² ¹hùð€Ý…`¬)l'6€µ­ÊZÅˆ¹Š\ÓÂ…@M¦è…-óG45qÚ¡£ÇÖ”XHî£P„ña`›
·5€^Cøù°åø&à€ôÓBd]Ÿ5e¦AžÚÚgÍSÖd0²è(è8bÚx‹ìK,!2ˆ{~¬€§4¬‰¼
î7¨dMÑÍ×¨«Û\¸¼UYãê÷×lû½¢5¯fmùˆbÿCXk[;²¡ÍýÔ
PLƒÛ’Æh›l{–‚µ-áÁ™§wÙF}£5ÖªâØÂ–¡"à5®û~¸ÙHÝ:ŸP:A,Fö/˜ç°Æý€›—éµYsXæPí6»xÆ#Èj\ÔgmÑ^S4³ýëóÓÛ™?Ø`ë™Ígvg4Ò¤Ô8NŸhŸÄìn«aÎìlhðIf{qTûÛÅ8]B6ÍN%ò‰£:¸6*!œå-Ö,²Ö¼¿‘Go=±TØ“ý—)TI«|¢ø‰¸M€u~þ$füùö§1‡ìzV®þÏ*{à¿0™¬†c5ÎPÅ#•F£¯[¦ï)¥'.æKª°Ëf1w”¯, ª:¶v}o^£©R lulË”Â*ôJ1WqÍ”P ZíuPé<ŒpSñHSåªÛx(ÇÜ‘ReqŠ,Ä
Ëzv:EV<Sfå]ne½µ‡pµ²7õLiŽž3ùsç>ÏUæxŒh¥B”¯rYR3§Hˆa[òßý	>ððÈÀ1hlÄ\d(ÞS¿º¡ùó‡e#"XÓùØí¯%¬©×w¡0Ø(’gÂìæKS™@ª¿(Å×vË$3[ Ö°ýH${c`Y Éž³vžÑ|1‰¸– #T¦£¦„¡V"IJ…c1%AÂj­Õ«\ šeAÊZäÊ¿¸¹|Mî{é(²Z<Ý µTF«6Åæf Ð
4@Ÿ5xÍE3óC;¦kSÕ‡¤UQ‡2/Ÿxùeñáûïÿ\N<êÛ*YÓéÞ;#Í«o¿3ò˜ò’ /gÛïy?ž¤Ù~‚+_ã W-j±kéµ;‹»[¾syþŠ'«jÂ4EuÞVù«qÝÚaM—mÛþíØŽïDÕšXymžqE°¶Ž´&KÈÃK‹j«ö¢ -Ú‰j«5\¹Ø|¬yñ£{^‰K}&$©Æk/:Xc
.ùxÓ'±Àª2¼õøÀ³ sq0Ê¤4*XKÑ^3Kgç—{2…ÙeaÚÕ¬a±Î¤ËÙÑŸ ­Ñ•¦Øæ0Âq:7£É‰H:ANà™‹èC°	jÈhýx~(bDˆkÿ¸’ó?6ñ25†Cys>$]hˆùáþ¡…›7OûâÞ{˜Œi`°ö·ßŠÖÞ?Eý&#ÏÒŸÀIkX÷Ãiš¹÷$CäÂ¥L«‘³:{qêpò.Y>ÃD™ËálB34úqµ`êÍ•
5²ÁtÙ$¦WÊ8Œ—âC‰ñÁÎþþ¶ÆT4Ú×Ù‹N—’1ä¹‹ŠÓÊÉÂa¹SPVîÔën j±œÈõÅ¨AHF"y%?Í:•Ab¶Õ2XD~£Ï"›L4uŸö‹çtJVÜ!ŽÑú¨ÆÈF	«£­Oók0™ôïã4DÍä?Îgs…¼ÜX¦Ê!Ø_µ‹Ú´G
ÔBê ÆJ>B¹EšËG#ygìÈP¤M”†³£óèW823V›ÐŠÓÎc FäÕpèü;¯¿öì5üE(Zû=ˆM Š>õ½gjEk§Nñë<ÅGÏ¥ö®õ×w5“#Vóu1ç«¶UÆ;vvõ4ð7K5ºœº|>õ`ósºy(‹/${:rúD¬“^»FO'cTª¡œ™_>G:$¥i(i®­×Åõù*«ýYY‘±ñ€43ÈÅ[·./òõä>ÎƒlÖÖOz¾"€Z=£y[ù×B€æ9EÚf®– iáÝO‰š7î«Õþ¡Í²>Ò…3±AÂÚ§ïCS;T5ÒÓ@¶çžW’#éX.G·òŒwš°Q’‚ZËÚÂÚ¾õO¶Ñ›ƒÕ”µìi¨VÅ53áj©<ì¸„<ëÀ XÛM§H0œ£ÅÁý;1;×¸ËøààsÏub0âéj®Õ)kw¸pe·üûÍµßAÛ¼Ö²­á˜"5eÍ‰guþýSCÝv-+rs+¨Õ
ÖjÊZuÅ`MêÙño¶hK’ÚÁµÝûGF>Dój1¿I«ü(Œ{„Õ:3H!Û‘ý#ºA2<¢¬ÙÍÃµ-Êš_3»)k}­~Y›-À€€gÙÚ$R#ð”Ø!­IõmpZƒL¤ÖÃS8ºÑÛìü`'JÌ’¢4tîHqÝLIB:Y÷³j~@=¾æŽuþFFdKåµY3eí‘<HÖžnÏpy¬…f1sÿtÿû'rÒÄø7ôí‰>KÓì½=Ö‚­ç[:°Õã°6aÀ–É2=qÏÊT{ŽwÇ‰,€–½8	›”#‹HõÍæêkšíÊT»å!’ÙHa˜ŸÚÙ Š¼dë„€´îF}?€bÊ~"ô•Z‡)Lã-škg_˜ª³Â^žF§é”/oiùHpx0ÄÞÜŸ‹9*Èóùsòc*–C©ÖÝTÃ½Ë;sËÒ^Hd•ØÑ}ê¬=”„ÓäåÍ¿‡Kñ>*˜IÞïkmÚ=Ì¿uÚ_ßn -NNe*^
ýø Žê§1Ã~.­™°ôÂÑžÌÔTXFFÌÐ¬€F§ý½L0ôHÅŒ}¹<“8°–È+èjd.'á´h6B¤•°™ÃaKâ[:îó¢šYË‚”®Fð‘XÛ¸reyþDºÂÙ31nÔà·¨o†±¯/)”Dk¥ì,ãNüõJV³À1˜é¡c´‡ŸG_¡lBy¸ÁjO¿ú“—Ÿy™Ç|áý˜²vEÚšÎõ¾…_ksÕ°i¯ktÍ*iG]À{]8€ó’—¬ûZ]Sloí`­yéUõ&«	Ö«ýñ3F…–_ÞÔ›Áb]ÁÚ¶°¶Ûñ“ÖnÞ¸iÒšˆm~¾*¯a4¯-‹=FgfÌ‰M9::WÈ_šï8w`5Þ+ÞRÔÓšáš—ù“ÃðX†5ÁÚ¨‰LTlÅ­H‡gIá ¾wÇŽTº@AÍS"'6Ö(½ò¶áßùöSÊƒ|•"…®fºœ]ò„5âï99a¤yÇ¬•55˜G‘cßã	‰œéŒ¥Ó9öžƒk†ä²…× èVÎttÍN ½õ&;OžøÓÍúøÊûáƒúëIkügåvò4	™EkÓéÊ›rÙ#…­’Ñ‡Ë=œ±†CXN¦xj<©|>44ÔyT=¬Ó‘P_|.'’<09yà@ç ]àà,ªÄ8/e#)´µþ–aZ $­Y5¬Ó™C6¹?‚?ªnMÈ¦‘g‘à®eÀä
…¼Ñà$!±l_+Ý‹
yMi¢50Îœ!õêš!×E’úNÖÚÃÃ€	¾5mD3ÑâD.˜ŸäE2{ÃThV™À×ñ¯Ð¬¦DGGiATû8]ž”âv‘0;Ç¸O87‘-¼—E&$¡±Wê™¶êðìo ·wÿvNkøŒqÎ‹7« ª‰ÕhŽ©ò§¿G%~wû¶ƒ5¢V³&XÃrýõŽ½ëë]{åb	Q¶É¼_BMŸô§Jsµ`O›jˆC¹·RCÀÚé“Ç’ú¸t:Õ™hhøðàþáÄiƒ³ÓÆc‹#÷Éƒ¸<T#¯Î¯)o¥<ÒvMKàleÞœû/£ÐdT[Pí¥‘ m?·GÜE´eKÇ^Ú6ýÌ…km
ÛÃz6v¹eN_â„5âÄƒzXû§GŠÖˆZd­\M—S*ZK:k‘Ô„hcª ƒÒ­ÆÔâkü9Á›%$ŠÄjmô C[kC`cü>^Öœ°ö-ÒÚ–¢5îêú¬ý—Òˆp¼P#å±ÅŠÅÔÛd«ÝM¨?tUlÙ=,S‘q¤µ^Å km268úÜàë~‚ÁPmK«5.,lkÔì¶©ÀiÄ=W±Vƒµ¶z„c/wú6eÍÁY²æ]¼4Hieô»&,7¹5Ñ@*´‘5ë&'Ln³®Ø¸Œˆêœ'TcñêåöV•5×”=Z²VOjV³fÖýk~+V“s„´ ÂÁš–ŠðÎ@ƒ±™,éÔˆ|&‰ÒŸ¦&üVYë	³Ûf Q©Nj-2c6R¨XVIÉìâ_3@Zr³%~pt§`¯½CM±Ÿ¸Uƒ5HM7OY#Ön=±·$Zs¬å‘–®ÈkOž,^œ,ž\_Ÿ­ö>õTW:ý¬ôµ½®ev`ÛÊkõ‘¬¨b-^Ø*éâäÜœÞs+³³ôËæ[ƒZ–PŽ°¦à
ÅjúÁå2ÂëÅ8¥äË¦ýà[0€qÕ°º‘ùý$™6ÑU::LsÐD4œ‰òyÉ`!šy¶53L¦ÖŸàcµÙìŒ@n¹Ât®Èù6RIT¶†)¿/)NT>'+_‘¹pß¾•?×Ë§­`¶Rfn*LM©¾|®Lr—?þ0ì(ÓÊxè‚Ñ†5ÊêúÔc \¢0-«µÅõã”‚%Ò#›PÓ‚’Ú°ñÑ÷>Œ.›‚¬ø2QÔ‡¢$’$1ëoíŠÊeeA6¤¹J‚V1æ™Hl^xõá™éåeôÌK™ùvaM¬æ>R ­­ÎŸŒDx;Vƒh÷®p±°’õu7÷”¢ÑR;QÊÆÕì/W=Ö<w‘vÍ L-ž°Ö#ó~:b«ÇÚï«ñ¯¿ «½ý6‰´ö€®±´Ã^‚¶Èt|z	X3­	ÎÃY g6Böýl)¦Õ<FFÖ[ÿhdWóÈ×[)w¿¼«$È?þñ³»¿Ø\&äÍEþ­QÕ·&Aê²í.²Ûñ‘Ö 6£5X‹…|!¥®-ŽöÈŠK³!§‘F¬õHl#€5Nu"¬=xçÁ{äBÖhMþ®‰ÖtÅnVóÚì¬Î¯ÑÂdgœæ•ÐÚ,ýd‚‘@ÏÔlXK&°	‹TH¹ÿ>¹ÞxðâÊÍUÞñDk/½pÊìû_uµÀšGjY÷Ó‰ 3I…Æ$ßk¦ïàú‰ˆiÓä^¯Îc”#“=‚ßý`/ð6ƒÁâŽÖ–ñ}1&¸Þ£g:‡iÚÂg7ó{Ý|pýÆuÚ”	ùµŒFÞªñs¾†'ï©³Fk¿¬Jk–Y1Sç=Â…d"ëEø*31ÏàÛÕŸÉh„a§àrÜÊáØ5¨»P§:ºA¸-—l%q2"3ÙB"Eoíá¡œ`-'e0ÌæbÚÈÁR¸ ClhŒ­:ñš’ÏôR}¦ê„"H¦ÇB|c¯¥Aª[LH»¯\tÉ:“Èh*ZŠ0a5òó’Ñ8‰ò¬¥åølàW&qR½ÌŠ¹8ÂZdkÎÿ#—wHF¦¢¹ðÓõ	œEöäÙ–ª¦Ï<ÄŠÑØ'Aû¢¥ArUM¢ZšÆ@€hž’fñ7Ò¸º¨¼	¦MKlÅ|æS3T†ÓŒÖÎþðöY×aíwg_~™¥XÍÑŸD×;:Ö—8É-Z³¢Vvðy‘èriæÛf"3©ŒH8Ž,J&HQ‘'”<–åÃò®æÅì±Ób3e@"žÑ›Ñ©U‰í‚zª!¥Í»ò4`L±¢`±üãùùË—•Íµ¾h‡ÐÙèÝv[€ÌN3:X[Èº•jbãÂþ#Öèº†kb5[ËiðìGÄlòî£ªµ{u5k(kõEk&§YT×Äo†k·£ÆiºZ£µç¿;S«P{ž
¶1!Âqµ\38Q¤¸as7ðÖ‚u¿T ØfA5TÿPY;e7…Ô5ZójÖ«‰ÏZ„ƒÐƒr U æÚ«a(?<x‡“ÍÝ Úø0;ÕÍõ£cý½¼X¶¬Õtµ+Üˆz\S7lÃ4ŽV«Ö€µý®kd4n>¹ÙâäDAY½†æÂö×InV³¶•Ó¼xÉÛöâa$œÖÒ²€®ö!$†ûcËnØþ#ÀšJ÷vsEõà	¢fÊÅ÷ÑÔûà‘‘«ÐÝ²×Ñ­^Ys˜æéjìsa¬æšb‹Õ4µ0Jš…M®ï±<üÑÔ 4¶eÓ/Xc_ƒ`Á†“ÔF‘°V-›&R¶?£ vt)çJëé8Ì«!í"e_ÒÚNŸÚ`Q²FˆÇ<X«írÚZÇâÊ¬•ŸÕZ®	³4Øxÿd±xâþŒ9¸®ßZ¬L»`¾žHFúZ×?6!jIÞ–\‰¾VÄj2=™ïé™,KRÖ°JÓ\D#˜ Ùªe¨_C–„Õ ®±€ôgâ~ÙÛcUeÅ`¾pSkC8mìN¤IªTÊâPºRà½šYƒJü÷c9¸‹G>30+–ÕV-Æô˜KTxã¤Jm4“¤Ei$teBN_šËõç¦õö.ÿôl‰ê³(Ý[ÆzL”÷Eúpq$‚Yœ¥faJÅÒ{wC÷ƒA3uÈ ÖZçÏN¡¤õQ;	Ö…ýc t~´î¤Akaio|ÏTß°þJ°¶l ¿Î@&›Ç½¿’èë‹~5À¦O‚†£)Ngæ ¹rž‰6óŒ¬uù¼žØž°æ5Ä¬­Î_ mgõ-ŽišÎE¨¶ããGºé‘¶	+›Äiúšöïâ™v=úó›bæ?ÿOXcžÁ·ÿ°Xí™—ñÈ}ýç°><$)èÄ}óÊêUÁVWÇ’å=bÖiÍ…¸ÍÂk•í%GÖ| 7F·Ê©¾ÅâêƒÕ{‚5ŠÕîÍoÀg ÚÝÏ>ûòË?Bmb5ÖVˆ« šX­^VÛvÙŽíø.Hk
PÍ­©ÛÚ¼në×T·¶ß
mM[#éÑÁš¥Ar=Ü¬¾óÞ¤­y´VW¸Vå5!ÛáÃÌhJg&Šóq˜7ì€ãr„¤vÒŸ™ÍÊÕ)íŽ³(ÜPo3Ú¬ýZ´Æ{Ý?;CHš­¡ŒÈbÄQF¡¤KsñÙWd‰Î½¢Ö2xI,Ä€#‡ï=ÉÉ²ì¬ ¢P§„5¤3µ€Aœ
õÂoÎ”SAzÀôãš…©Õ¾ý}©¡`mØŸ<y}ã‹•÷®ÿéO×ÿvko}ýõ×ß|ýÍ7üâ¯ýöýS´Y6Z“¶¦­!ªjÄž¡äV©ì±â¹ãmÃÉÐøó‡~z@‚Þ`™V©½šÓË3<…Þ^H‘š°3ð×Q˜+F­tæêH¢AÕ•˜`x&¥kXµùÎ1)käRZ›µc”&À¥j±væñC“grÈal^œjÓíËKGS†#Þ	Ø&\A˜v[ödÌøÏìG”IÔïp/§²tÒó9€+QT?³|Ü·§Éæ'‘Ñþ*úu±B¸23)fyùVç/²%-2ÉQ­íñ¬&º¯s©ÁšÉhµ0N#Ý±¨ ýº´7©µžñÂO#©ÉTÄàYI²—>%˜>'RSÍÚí¾áÙö¿üÔÏœ=Ë>@Žÿ/Ák×–ÔE§y}i×ÃF©œEõQ­i5çÊ…­Qã“®Ü¼Ão²†žŠÔ&Æ:þ,Ô¦–íX9¦ÈOîÌ¸¸ X«ª®‚m…Âše„4‚­‡ÙÈdÝzb_æ'¬†{¿íY õm?²K¢ ¼i‡k1°àÂHèŽ¶âéh\YhIx+Ú‡ÿ`­Fkõæý™.5Ts²WQ\·º«ŒÏYµÇQªÌäcìÐOŸGß'Çþ±qVÆŽ›Úµ&çªäÂ‰ƒ»ÉÌóú¬ýCaM{<ë~]²fnÂ"n° eý‘áŒXezÛ-,ûñ]åiôö«	ö“<Ÿ¶ÆÍ~Œó°fíçÅ€Õª°våeíJ•Ð¼DHÛà7.v½l¥j¬mªyÏÄÌKwÔºGkâ5¶ê|]¸³5œÃHMXÓà.nxköJÊ¤¿™=¶AU;²¦„HÇ¯V‰k´@‡³¯hY¸zDéX ­]%ÒgÌ¯¨ë³ÆªÅGNVãæ)k}Â3?c+¡¥‹hƒvªÖÖl¢©w¨T"à,“ igÝ‚5|]Õ4{ºF•	¡±ôõ¸dG×ü“ L\]±9®ó*LY{—nFku#\<eV0Äúüò|ÉÙñ;Ôª%2êj[÷oœ`YëbŽ÷Ôö'žúYt2ßU5ùö¶z^+Fs ›qÄ§÷P_{)ŸÍû(Ü&ý3Q;ðn@Tnða»•1šñ1ôd(bcÚÝÒôÇƒ}jMÑfÆ¤!Y\vTÙ(fÑœ²³sé!öF™§1ƒÈÎUŠ–'OäR¡bž”ÂJXC+ƒì0ŒŒñ³;÷gŒ!ó!lý+øFbÜ«LkbM„ŠEÄº|ºÌÞ$¥j£—ÐÃ|¥ g³	šçDƒ¨|™ì¿4zþ’Ÿÿº`f*#ÇÇVäû2£¿<?°úµ`€ü”à4,0QõKõÓ o”ðÑv51æ§S9k:@fgº‚¹–Â’)”µ!Œµl¼!g‘¹ˆÜ+ªu;Zë©Âš'¬=
kW–/„ç¬AØ‰Up™{~V§f®/lµ÷0¨x”M M ¹…¯Ù7u‰¬šî¬á/ò¢ÁÚÙ7NBWCXû-o£VËñÎÒòò*‹uÈ«KÔ%aMÊ™ÓÐ¸²¦pj›F×Û² íªGöhmÉ–‹##«÷îÝUuÚ½ùùßÀjXÞøì+@Û—wï-Ë]D²ÚüÖ$HÛvävlÇwBZã¿õæÍ
Ë„¼QÖ–T³ÆIü#>ikb5†æŽQÂ¤5µË&Ð×Öï¼uçÁG$n¡5×Ö^íÉÌÆÉyD¡›ŠÇyÄý‘®“äÃsúŒ&›CáL„Šb4±îp:;ysccõÞ[¦¬®©@ZÃâ”`íU«óîÂ8÷Ò,Íeæ”„Xˆ¦§+” “‡ß™
gC¡™}|Ï±ËéJ.A_–XïÌL’úä&RCÊŸ@=Âœƒ61)N°õ“)c+h­`x8tìÂŸN®llœˆ…V®?xÀ	¬¯ßûú›÷¾Á ò52!5«[ûTÚ›¨é¶'¶¥Áµ“o¡·uÿÇÏ«Øßöd:O-+µ;Ÿ‚ÒÐþBŽIÓ¤n:™õòŠDü~|Y2
á`HîÈu /‰p\[0W¹“áÀ`¯Y@‚ghq…|—ŸÙ×›Ä „ZîŽ?=3ƒ½	±øD"ÅY»h§%«éeR2£m+]ƒ×"H*H¾$Ž@ðUŒbw[
““{`5P\¬‰Ã+S«ÂÇ¡5>!«±•Dfd•=MxFØ*2·j–#·ZXy|Þˆ80fF«LñÂò)TC=s´&¼x
iÍç<X#ò…—N½þþë2ýZ¿¬É§™“õ:ƒ¿Kÿâ3× »”i0/ÈŽ¥]ZkHùi2wâB‚røÐÌ =e³aýS1þþbŸä>É¡X»Ÿ#ò„Ù>£¹†ØZ­¯ ¬yÙ×Ø öúâü-Å<w®-¤‚ö¥Æe†Ñ[}ÚVe%·jhûjÚbA…f}ÍÚ#°æ L¡ÑÃ5¶BN{\°†ªö<¼&Xƒ<àJÕž4yK}±©];>²A)»1‚„Ù`µ45UPû«}ÖÆu¬VoÝïá f¨Vkrðà†–gÆùV$§q|î4é&/sìèxbÓð  9pzíô[©ŒpÇ¶€ø¦5ašc6³îŸ_ÛÄÞ’R0p‰ÄÎMS&£iÁOªµ®mm¸ÆKVk5­&¬1><àÝËÒ ½žÖÖ–[9‘ã‡j_·{óÃý»EŒ\]è¸óöçÎÀÚe8ÈËèpµ>k&«™°VUÖªƒ·ZSÖ$¬¬5ŠÕH,'Ù´ÚpÍÀ¬Q˜ZE#²ZØ3…ì†PdâoýÓØƒ¤$4ñ™ùˆÈuD0Æ½ØéërÎÄ/ÊéŠFp£]Ü™ÔeŸÌ —~|u¯kŠoQÖžØ»´HÏ3°ÆC-³j¨õÉ‰E°}2sÿdy¢r¡0{ë‡Ù‰¢êi;m¸÷¿ä5—Ydt¸V`•ôpô¯R{1‹‡
Œ‘Í
Ö¬_6[Xh‡p,ªdwXÖP´Âþl°ÑŸûe¬/¤éSª²À _KŠa:Æ™K)§4ŽJœ”.2GìJ gÅô\ª7Ïy¯¹WÒ3ïV*oN_-˜¢FêFºr.WÁz¤Â¤‚á0r]¬¿“S‰‰¾¦Ìè¥¢¹2í;[‡#Lä~šèñ:úS—¦üp¤?(¦7%—…qß@ “s¿Î=Êþ,á®RjjÌlãol¢ÆmŠ	½€QJ°Óg"½½‰ùˆ•¥Ój†CY^Št.É¸/MQe–£!'eÕì"e­ÇeAÖkÀšÅòÊüMÆ`­äÕ5>—Xøœ“ Oj|Í]ª'¨*k’ìšÍ
’_T­Š5‹®Ñó°Ú¯€µ—ŸÑ¼ÂûÓkÀš:¬ñXëËKëÀÆýëpÚÈGËÒÏÖªÊž¤Ê×8À`°fÁ><1£5¯€<HxmõÞÿ¸{ïÞ4ø%°¶±úå—ËÝ«€ÚõÏä¹xpÅB¶õ¨Fl'AnÇv|z­ý'­Ý ’‹+Y“®6¯>kKKLûû5	öXëŠm#:„®&Z{ç_ßY_º÷^=­9\«ñÚ«/+mR1…E6Î»5¸&Ë6ãþD"¸“†”‰4æçÝÝ	øäÄÍUu¤þ`ÃÁÚ±š¤µ—Þ?uí³Ï|ÏŠè·ÃIDç”„¿2­žC‰XŸûØ@gg¿°ãâ_'1ÙùƒÙlbhh Ñ9ÈD(¦€£BÑ´¬¦øŠä0D%6"É~ €ŒþÞX(qáÆ+§ûOþß_ÿë×¦:|ó–üï£*˜¶vÞ“Ö`XÍ`-Ç”Í™È4óœ2í£xhY&°6ÜGíuÚš¡QÑv‘NÕ1ËgL&xÐ•Î)dA0-$ÿbŒò£º…SD=ËÅ$uåCþxX­ä`7ÐÖ`²<ÁP>¬b•ï“7¤5´ž`®Ã"D•l”ÐËÛZcÍºÑ¹&kæåO(?AŽƒm¹dçÊCŸF%8ÒA(š
‘×XÙÃž‹Õ.â¸òÇÿû]ŠÐ¼à»LÊ®¿°ð’ØFýé‘Àš68£y°öÐ.DF—éøæ£åhyõÒD4U¦áÂYàuçåŸCaµø”8?zÏPPMÉŽÏœ5eí6%èi†j˜Œ8X£ŒÍhíÚúëï¿¾»¯¥õÇv*•ÊìúåH·ƒ´èÌr¬Ø+% /rßc»vªYkØõ‘ Ã”l¡÷j~•CÇr9H}ÑÖègm°fÙŒž$g= V@845Ëƒd±2/b›WŽ¤ÔËfã/ZCUca-±	¯LÍ[ñpÍ¡™–Ä'›4Vr¶ez[Þï<Æy—úšµz‡®©±´mA±´ïqZ•Öž9žÃÒ`DŽ”%­ãf2ÒFÿ@N»QÒ7àÍ¸fUVxËcÝ¯Ku½äV;Èšw?i&_Ù·u­°Y¥nÚ;<NVr'ŽZ‡µAX§788Ø?°FŒ?ßÛ¡®bÍÃ5E²¦IÕ¸k--üGZ ³#GÖƒ±ÀM1ñQ9M+Þ†»£ç¹ñ(°mI†d©[±9X{ØíZ…k¢¶Ý­›²ê_[k;N"0¶íæ>¶¯9¬Akì‘!¤W³æ¥A:\#jfµ6k\í.„ƒ53Õ~g	ª¹hm’´GÖ€7
® ]¯§\9Æ¿R›ÁÚhÿx.óÑ#·°Ïeã‚µÛÒ¦ÜH`­Cª¸ŠJqQE]3X«ó©V­YèàÓ{÷>}í°±V$bÅk¯=Îš¸â>#kŸÜ§†m"O:d¶°× P‘ßn8²Õ!Òz¹¥­‰ nnŽ¢µnÊ¿²•¸¯[.+è‹(:­ucÜ°á,‰à!X'ž XbŒ˜N¤Õ`,lÈ"Ú¾pê¿J‰ÞÛc•$eÆ+|Ë
âžÜØ0g8¥¦E*¥K³‰NÎ…Ufçb½åsçbéi”µˆe¼+ãÜŸ+•9,›>ÏÍ@uíMD™uIcäyªÇ@ÃîþÈl)ÜªßvÏp6ØÒâ~÷jÝÐ3Š=O]	 6‚b6?Õt$tª	ŸÕ†ÆÖz Zø¨x}ŠW žàôd¤4ÅÓ!5FIû±¤ß‚îSjŽJM:WÎI‚iºÖ„5±QcµÕUt5†Õ•¬]îÉ˜k™ -ƒR‰i=
Èòbuï´5Òá%Þ¢jñv¸}Œ°	¦øª|ØŽ²ÖñØ¯~Re5Îþñ.a¬öàçW‡­ó¨ÿüek‚5×{oG´$ªV"ÍNAc¬iKû¼àHÝÆâå‘æå{¿YŸ_Üµ¬:µßP°ö›ë÷înì¿y÷ú"Þ"Î\dÞK‚¬µW3w‘ÿ¶Û±ß‰ªµ›Ä&¬qƒÓp7¬] E”êÕm"Ä¹ÇŠÕ4=VaÕhíï¬ßy¯Î– Þ”€s¯ÞØÈ›ä­]RZÃÉÆn¸ŽD#tO&‰‚ò(ùr‹þ¯c'¯?øõõ›Â5:œU=!ðþhko|ÏÎhv5Ck%¾Þ/CÈBzîïsÓÓy„9:]ÉÖ!ô!Ê·€2Tg¢”QEìB¦*[¶a_Š¬ª¥ú|‡G‚³l¬b©ŸûQgãAT¾/NßØøÂÚ=Qé×Â5ç2Âg´Ö1Z­[‘|AâÆ +PK“OA£”¬ÜÛŸ¤ö ZÈáB)æÓŸÊ2†‘2:£Ù ™NEÑ­-¶Œ“‘ÞÚ`k$¬‘W™
ñâ¾Ar'gª°VfQD¬;ÄA¶ÊfäµI*€© ­
k“<;Ñ;CLpÄ¬!å4R¡òÀcÓõ§.V¢¥ÊÃG41°ŒS½ÙúÁ4.Ð‡8€<ÇäÏ~B_¤‹Õ–Õ“Ú)‡Ç*žÕô´jYšŠÐÞ8W#4’óŽÏ¨IÛSÑì:m^ Ù,#A‡O½ ßO0ë«ý§nŠSvŠýeÚ¬Õ”µ7Þøáok$A®ß:õúc»FHLiÞÙŒ¢¦z…\Ddcà3+qßî0°Æ‡¤®ÛZóŽ”†›Lëúè±:v:Ë©^¬ÌB©0^9ÁšuW“°¦äGš¨-²úPG[\ä(õkëK.ü‡	k+Æjë·Ö¹ýX5k+J…äò£ÓÒçN/ Amâ-­³VO.«)i £ø¬¶ÃÝ‡¤Ô:øîºRšëkÖê½û=[BÛNXCZ{1vhL‚jß?>†®6fÜ!E«Í)KccÆOãm›§Qzv¯¡ì¬±‡}¢šZ;çå×„^u5]¸Ö“Z}ÍÚk–ÉÅõYó:™gö€=²¤6–<%JG{ÇÔñ’ 1Ž¤ tàØ­Þp‘Öj¸V«XÏ^âR×´tÚZUY“·¥\Rä-²°¦.à¤az(Æ®MÈÑ Î‹º¶½¾Í’`¹Å_„Ðø?=örÚšnŒm­››X.¶¶ª)0ƒÜ¿¹	P<HÊ¤ÝÓÁÚÃ/Ö¼4^S|äÍÂsîßª¬¡öÑO<X¨pM/ 4&ŽÕœ–¤/2Â·“½RÒLeW%66ì¦´4­ÈåJç9¢éI°Æˆwí5$¬·FFjM±ëÂ‘šÚ¬ÝúÕ¯®½Ö%ÖÊf£ÿßÊ3­8iñÉÉOTt+çŸ‹ö¶ PB¤Çk–Rù"Mc»ÈÕÎn]LÓÑL~²¸'Àd%Ø0·‘0!÷~V2™0T#:aêjÄÃŸ×¸d–#ÑTÅÏ G–Âf¬åxëŽô5uËD2ÚËÉAÎ¼Q¥¶o(ÐêÇSÑÙ¬Ö9¥ü ›û*ßŸŸ#å«¯>Ï“(tVdFù¼’±fç¢éØLñóÏså$SØt$0õ
³w4Ú;8#Y8­'&å4L_´À‚Ï‰ß"›Rö0…hÊ„ôóLA;¸±­’¼Œš„G§
ÑÆF”6D°‰’´(°†Yâõ$°xLbg’†7© Q$í#¯3‡Þòø¶TÀJ–t|¬9Z{DX¬‰Õ®ÅÚWVNÜüàÊ|sÔã•CBÃªDß!¬¿@š]ËW*Èo1´ILëAKë¸=FÿêÃA>Æ^uÒ/Z3÷ÉóŸR²¬=óÌoœåä¦GT¬üâêÈÒ’ú_Ó¾úÎÒ^á×ÈÞ]5‘G*ÔÄkk¶&e+ƒb+¹GW7î}9¿‹X†ÕînÜ¥nëÝÕƒó7ç	OW«Ö\ü÷í$ÈíØŽï‚´ªUükž+óÄâŠJÖ8-£Y²ÙšD’Âèü;[z5ôÅT¹þé²#ª×<\S¼øfq·™Te°ÁKª¤âÝÒ,1¹zwž+D²;w³án|4OýûŸNÞ¸~ý×_do|ðkåCÊÆÿŽ2,ßGÎzê{ÕÙqêñÊì¬@‰– Óê“Î“ú‘
*©ŸÉ.c©ébÄÁ„ìö¬¿É?RV:b‚J%)c‹0í[‡‡±×jêìí;êß¼pƒ/6 5]i?IÝš~Jç	‰-¼,!Ÿ…Ö.­qr:ð8ÔK†Òþ$”V¾8ÙÙŸDÍcéŒY1™:Tï#Ê¹Pÿ£m}™,	t$<&Ù(Ù9ˆš–¬ÅÚ†YU{cIÐO´Óa03È}0Ö…¹À¤üì Áî—&ÿ–•#3g^"Öˆ"SòŒ47¾²X!yÓökd•/ä­-šm²WëÄDñ]VÐŸÀVã8dVáþ
«=“‚FØP×ÁZRÚÄ$ÆŽÈgi†j„U£1¸ø»e–òágºúêR¥£ÍegMK»45õá™¥=º Óð˜ù‰«ñ—£m˜ŠhŸ,!MYãóšXí>|žºF%À®]˜@2ÛËWn‡¯£™qÙAv3R>ãÈTd#Ñ<ò!dÖ‡wÿâÈÎ(40 îÔÉ5»¼@3lük„xaš¬FVf\Í.R‘—/ì×¸Èá­õ‹œ:1pXÓ.ê‡ÏöïwÂšnV¶&óre¿'¬“q©G´ÎÓ×nXJs]ÍZí_¹Ö›‘UªYÓåZâñCxŠHR—bu+Èñ15¦–´ÀÅq¤¥­—º°ÓþnQÒ|$D®évÐ”µz7Èze‹E}Wl/rQY†‡`™±àÐæÖyFB6•«µµõ-­ÃÔ®=/z“²60¾¹yX«ë‰MÔ·Å®Ú÷?l³V]Y^°¢µãÇŒ=×6yÈµ‘Í‡4†„È†áY-´QÁZMWóH¬¦«mñï'k5k^.$ƒð“’øÀcýüxºlš$Š›½ì›UGÈ'¬©3›íð¬û…jžÁHÍ»ŸQ{ìˆP«)k~ë7.XÓŠ©+}†K¢VÁ#!ËHD¥ >} Ì¥³$ØCR&jl&‰	+H_¨Ì”·vy@ŠÖt;,•ÍÄµ.`MF@ò„¹jþ"K4ÈÞZ³æ5Å&NéèÏž¸ýê³jvíÉkž¾¶´ØðóWÊ“ó'sódYÞêéÑw4^«3ÙÊk[$¶	Úš(”mžŸ`%’eóå´˜Á¤µR	;#u©S•_ãÝ€Ü6†û 8<ñy(<<äE¿—ázÔPÝ•He‘®¢‰ÙÔ?'rå3G‡[!Ÿ¡x¶RÜw4V˜ËBwŸ—Ç+ù¯¾*~þîW”1Çòïêi~üU%Û—Â2$Ç‹Ìb•ÙŒ*ˆ¾þP""M*Ë“óÑ;€y<€L–ÍÐP€ ƒšU¡t!¢¡§õí†5åàYÁC£ç3@Na6…ýHS	,Âk*¯‹—ˆYR"å¯ŽT0ØeÂNçPÕÞ&–ä9ÐÙ†Ì’èP¨-ÁnÓÓ¸jRò©qqÂÚ+ÈU¡Ú†Ü çwÎ_aèW­J5êäUÔž
" ÁIüwq0‘Lv	ÖŒÕºPÜÖÚá*:pBjNÊã>í”¬a|mö"ÀÚ€5k°¦’µÕ_übÕläí·×Í÷Ñ¤3-iÞM´fÞ",…r¬
ßÂ[aÍÅÒòÍ/ÿ{çûÛf™îùû¬öe‰ÚFU*Ô7’4ŠÒ¨6±<ž(ˆÇ¶¢±‘ãqj’¢ÝQ ¦McÒ´M‡q4´40M2TÒ	²DKc:/ÊAÛÓ‘©:HG0åôœíŽÄŠƒf‡EÚÏ÷ºýÔ5žî¼FÊåÇ÷óÃŽí¤Mîçó|¯ë{­/#³gßüù³åÕÏ>ÿæÏ¾¹ªu˜®VÖ*ºšãµÍk›±?iM°vGHƒ5ÂxÍET+*ïP³æ6lwsgPƒ}l¸--gnþÎê¹jÅ5;Ç¢ÕûÇt‚÷TólA¥Ï3-íÚÌp{4’×â$XÄ}uåÞÃÁ™…Òñ+ß¾øáÜ•·/^¼-yí<ÕþŸˆÖ©ÙÚ+Ï`0é1rÂŽI»l|_˜~1'=-”HôÆV$÷ÌŽKõÁ‘¾›ãH„ôG’,¨ HLàKODª+,XLE²TôØ	Æ–žÅkýý\][—Ö¾úöÆmTµß}À€+¤hÍ´µO¬96'ýÏüä‘;Åc5iýM ¥cƒ]­ý½1¼“ÉkD´Ò(Š*e&˜ [yHt<±;Ã_ŸdÉÞ\F¥ÔøÖµæ’ùì“½…Ï¤Ã!Êñ]Í†º ¾˜5Y›…ÕÌv_®Ž‚5ä9ú~ËŒŸTI3a°ÇógÅj0%ã(>šní‚šÒ «±œåÕ¨Â3´¦íêà	ø7:TÓsØQÛØ1:¬éÌÓÑ…Öæò×¿²é’ÿ
£‘(é ÑŠÐÊÅVŠ–Ï ¢I=ÓÏxÞÚÙÑQÎN‘ñ(L#à5MñsC1(íá‡ÑÑøWr°öìá_<|¥Í¬fqìš¬û9ÿ<täê…!¦Q®‘39³øêÚºÍ¾¿Ø¿1›s€”gx;ÌVlïCY'&Ö¶ô$“ä¾Üßª¡!
ÌÊž"×%«¬\ÙÚòÚœ9†,
Ö„pË‹ÊÏ­©ÃšckàÉJ‡Åp<¸´¿«?„kÈPGZ{²Kx¶´äCØ2î¿cÛ]ðæÁ”¦ Ñ4
ÖˆÞo±~ÿk•¤‡jn¨±E¬]‹œ–ˆ*×kÈVÀÚæœ/sFð¨ŸÞ0Ÿã8 ð.Õj€ÔeBEÖ*ÒZÔjjÖ<VS"¤`mQTæYuÀšsïWéšðJ£nm„‡t\ÂZ¹)öƒ—á¶~RçÊ¨V“	§9eMU²æÙ÷KX»ýñªa'c=—À£/\.žJók†{„ˆªVY+Ã™V.j“ ×¥¬I&c)‡Á¯Ä½†ËÛÈ„´~ÛKÞ‚ÕnÝR’¤ŠÕ¨PÒWXKl‡x|]u¤—©›mè€gXË~ÐPãÎ°“b5JØožº¦$I9ö›¼†iÀçÃ?#™àÉ©¾M>¼ø™¬-¨\Àá·ºƒío»5wÜx€`{»† ›9Ð;Ø`§Ñbï"²*²VYãA©/¯TRÅk-+ð2Ðª –IlRÃdì”¹ryb"_´îŸïÔðš¨OQÅ}ãºß	^Hw½èJO¢!KÁ†[;²ßT»ÛN?Ø‡„â~ýd“	< QÊ¨
‹wÒ!¢‰SÖ°{G*‡#m)»ðé›¤«E(ýší%ùbßÞÙ©&¬‘iX+å£‘©îô|áO86Tšb³|
ú“–òÜ0*NÀA0ÌDn¶©72?3ŠÏ21ÎdÖæ5¿Î•ÎÇÓêä
©•Í™´	ˆ™á· 4”A”¾ÖöPÛè(	š@œ¶(WH·vZ¶ µwy^¸`NØ[R×.ƒè~–´|´¸6Iä€µy:²æÉ)¥if°€•Ôðñb5Ÿ³ƒ¬­X«kœJ\ºàÛóáâ$L™!âAÜE2¥L:yIÀ'ïjnÃh*Æ·…õv+PãÁ¸zP
–“ßo¥h·wôIZãlˆé‡y‡Ôp	ÿtÃ¶ŠµrÝý8ëBÑùð³´AfÚºc,âºa»•™@:zãÎÍƒµZTÃvxñÂšT¶úíëÿø¿Öë?_\ýæóµ=«ß\ÚÓáÕ«'HqÚfäflÆLZÖT·F2äªÅï¿¨TÈâÆÆ²X­[ÝÖ\½€šÂþš8£YÄýæÕ›·W¡™*¹*\#®)øòöh”2â–]}Ù¨ZNŽf¥«ÍçÉB(ø\)oÐ¦kM^zûÆú%þÌ1ÞVì²yÉ¹k¿¸†g	9nœ¦—-xíÿ‚^Ê£­î
[E E³nnMú9AÈF¸>Â$È¤d¢YRBRT§%)<¬f‚[¶QÏ©E*ÕKk¶Ö<[ÃœýêÃi@Úíõß}÷;6¾ãût…k@Às?}†.Ý­¬Ýï”µd&¶‚³â§û¿þ.8RÔ5Fãµ³si\¥ÓJ—\iÍ©þl`¤Ÿ*¶±ÜàCá\,AåÓÈÀ~ªÙ¥œ:©u1ñ£Ù š&±5!Á¡ ©—šHMG¦¬½õõh`Í4€pLÕres&=wÊ`×u-wq¾ã'åpKr™¥è°fÑQ ‹m-+wuÜžj{˜CÚóz&Ul	Gi®GkLˆFhS?¬éiV2u´tG…£4éhÑlÅ8„8õ?Oá2ÌÒ-M”FXÞ£×C,ãdì˜8Í¥A¾~M}úŒÖ<š#øÏyŽÐ	hñj±®n×F¤FPjÞXÜµÿŽÝ-Á:ÙƒË¨Î*ÕÚ—ƒ$	¥Ò©pj®X¬ç¨?±?Ù;º|œÿƒ¡Pš431k99ø–ÿ8É
Ûk€™`M§R5ÓßDsîî´6Q[úxÇÒ$]ÛÀ¶Ìgž\êXÞÓ™Ö’w¥?²( 3ZYä$º±{½	XóB°Ær”Ð¡õ“ÕÊÚ£UÊZ•°f7ý†g¿x _~`P“²¦Ø‰®‚Œj5e<ööòÆÀuT ]Ö8
>ˆÕäËa°¦€ÁÇj•µ
­UpM€ç¬û—y]']1ŽðžàZCÙ!ÿ!€eD†&tÑàƒ‰ã€5Œü¬ŒôÒ»áÏ`Ícµ»³ mä¦A´æF¬9eMew‚ r·µÝTë=H±XÙüñžjÚU›µ5kžvOTÓ¸j??¯5·w-F»|KNJ>½Åpk÷’©of(¥¹kCHke­ÊbÄóî¯,a‡YÊÖýæÛ¿ÃÅV?n€†jjˆÍÀR°F}–ê@4BFr×vµëFÇ}m£+µûîë~ë­áöîan,Ü¥¦)‚Fmš™¤Ã1GqA¾!¬f­¾îj$‹g/‚¤`M!¯AZâµ*Ò:ZÊÝZ³eÌ›eÐšßUµÌ.ñ.-ùì;2©1ˆ¼·ãÁ˜Á}Éxn(x_EÙícå"¥ª³§{ê»ä(ôreQé¥$ƒ@KˆÉ´æå‡ˆ%RúòÊzÇÒ1Û<Sà*ÝØøì@ÓøT(´wŠ¼ªØ2˜ˆ´2³”&Æ˜†¸@8ÛÕ:>¾²B/²Ø_¨¾ð<•m%ZÌD‘ü|O˜Ž¥aª(Çi¹æ‡®ã˜—ÄÉ Ä‚’Teƒ»ÑHÜÚ`³X+lBÿ†…™·fÊƒœáÛðh6ƒ½*[3ì&qŒbr*©kçë©ÌË”ÐÎ”…1Õ
”9*67XÃÞ2ISR±ð§çŸ?¬Và)¬Ö 5C5;Ÿ¸Ðà[šÏNâÖŸ‰+Ç=‰v&ë°Æ—“ù¨ÿ’uÀO©EõmÍ»Ú&NŽ:XÓ C{ËÇe/âU¬=J;ì7-RÁùËúêk»7V7ŠCâ0\ö®‚5‚]îõÄj„ÓÖØ!ªYÍ™CÖ-ß¼±Ì–v‡0¹²Ø¾¸ºÆ¯ðç—:ææ:ŒÕ*´æ©j›î"›±?ºÎØ*\ÖdáÿûU–EÅo7)kËÍ^´˜½ˆ`­¥YW{ÔÅ¡eu}UÊš'®Uášãµg‡ŸzÿØ±îùlœëoøGùú²ùrƒìB6KMq:2ôTÎ6£vVí.ªq¦zé"æý7.¡¬9X³DÈc¿P‡³/aÃX&$	/Fº{ÂI2í˜e™ÔšfÇA“\ŽI(å'D.&9 &G“!sžzéÔ`*•N'ü\QSu7ùI,${Ã$1Îdcä°=›»D+›ß}óíšƒµ70…´|Oƒ5>}>Š5çö`íþ‰Xh"†ãØ}äb{û[bØƒLïíJGWÈ8l
‘BV#Ã#†¹=Åf­+ã8Ž„¨ž£ˆš¢‰\.ÏHQk5Í”µœXM`­d°º9MÞŽÖ¦Çt÷Gž=«Œh÷ã±¿H@3}qÌ`ÍŽÛ¹M{Ü-rY«Ž÷ìFì1ƒ2“Òh–†,WÖÎ>²…]NNÄi.ÓQ	–¾!Œ<ßÓÓJ÷‹Ñœc‘Ug,Ç0áWªã)³x|ËjÒ<@ÃD„»ŠÐp¡šNM;|H+·`%zM¶"•,Èç*°¶Q|£ïÇº¡«Å]mäT©%v}K=åkòéo1AÍçc0XSå¿¯¹Xj'(uœ/Ö06=¾?;¾ÿzSÓl(ìïXÚïXF‹]¿~]$†EÁÜ~üF\»5!›T5–ÉµIhz2›±¬1,íA<KP¨Öß»?ÖDïëÀ»ÛÂ"5[˜t…¹…›'£)GRR[ëõ*›HÂµpk—i¿Á·+ÂZÖ<e…»£µ;°V r6ýHk{E>?#µð	%?>á4.h‰¤CIZ¨;—tH.#ïŠ¤ÈŠ$ŒÖkUÂZ•´f·ºAþ
Vó”5jÖîÀÚbÄ|êÄj…Žxœ 0kT¥¢ý FÖ‚—¤A 

Ö.Ï•Q­Ú¸Ÿ8ÂÍ3áîAšD8„µ2¬I^s]±zBßìCe¡umÔp\•²æñ˜ø¬Ê²¿¦líŒÁZ¹êŒ¦u—Yó9tléÖÒ‚?>Ô¶ƒZº=uÇ~óà‘	yÖ¬ÏšÇj²Zç~;¦ðFÞÛMˆ)ÊaéÆjwLFà‹-€š”4‚mœ!;}ˆIêŠmåZîzÚ`»¶WÛ€µîær™1–Ù®¥&Öžj¦¢ÔØZãìZÛ\xi¯+:X«QÖNèÿ±’_¤¡¤UËk"¶
h±(¼26H‹5åg_bÚ:ùêxPÔWý*•„È¿é8¢%g°&|ËEÆV+ãc™l&à¥¡ØdjçÎžDÏÎm[{âÑê)VC»ìñl‘I êw6?€î(lëÁä8‡ŸÕ , Ùè¡6
Yà¬Ü	æ€~f‡œDø,½ý{ÐØJš2é&åið9(´nûãožŸç&±&4Ì#rEC³ºK,`6¹@ùÚÙ™@ Ël®º¯ùÎ”VùyæUhŠy<;S Y!>C{5p-.C”˜F£“ž?ÈêlVŠ+%’GF|ŸÑ¸Ò-K±T’¼Ì< Tà³ä™íø$”p`Ó¹‘áp*B§Èî…ç±%±$HgÜ_-¬ýÕÖ‰Õeä:°° ÄÎ8_@k„º )—(”A‚¬G¢Ý·½¾åªl3i/æz)XÍmA¡¯ü†¾™SÄp#|ø“—\ºÓÉ¯€µ_q"tòíóo¾}òãÕ+x›áuuHXæU’Tú«ÙhFýN_3«Hƒ52µ°FÜ^µÏ…1J=n#Ÿwø—÷kŠÔ*Í°Y®ÜÑÕ6“ 7c3~d†.’Åéj«Îr£ÈýÅ?€kÅ"3ýuÎÊ|h-ÖºEkÖ»yW[ã®EƒµêÊµÊeyºdoPôì~«l…Âð0§¹¸ögãº$:³ÖÑ¾ žÃ¡LßhPÖË3sW®ÌeJr„\¿â.MÝV3ê7yÁ#®Ù'êX+çÃIy%k(»ÃT:WRBÈØDžj þ°ªj8ËDû,/#›ËGü”ÃÒ\Qk÷‘˜C{ãÈ•ƒêaJR{$÷…ÐþÉ¹¯Ü¸yiòÓ›b5»¿áhM¸Fe4ÑÚYƒ5²GÊ#D&³|µ‚°ÒÞþT	k<°žÚöç“#?kž†¿¦‘ ¿À_Ÿã”®üá´&æÁ‡’ÍOÀbøs)µÑ iXC£³FjI¤8œ×­é”€ÖøAüñ³Ø¬`„ ¦$6V0É”Û¾ášâ/=V•æh{tëööœTdÆXIDÓAs	ñB²™çë­±ïÅ˜ðƒi.ŒÏ\º#Ãó8h–ð‘š–‰Pfa2&f§ÎÎœrxÆÂý%Á™'”òèÿ×(îþ%i„ÁÚ¹×ÏY—·£µ‹×L€{#ÂžO¶®5ª¯ÕrWývðÁŒBYd>zá#ÿš\¼{ß}=ñåb+ÿT2»ö¯@Æ¨ž©úã×¡}³˜Öà2F\ü«lFœ§ÿâUkÛò‘ãÈkk.–‡Š“ûC!rs›RKO¶v©0.ñdYVÄ,2æÑY¥Ñš½À5oÏžCˆÕŽÖ4zqÃÖª”5Ï¼_˜¦pùZ<ZûmÓÁÓ_<€äé}<@éšk´v`¯¨Ù-ë~p	|Â§ŸZ.ô./=ˆîóîå«`íW–ÙXcÝ_“
é	kÜª	Ö€¢*XÛcˆZró9úû9 lÈ^±ZWïÖ##ùÖ K>æ½·––kkÖ¼ðÒ ×¼^kž¶¶¬yf)‚5	k·œÁˆÅ½hí¨UÃÚ™
¯Õ*k,ÿ Ï~O^[õD5Þr÷­=ž¶Æ[ô±Û¡¤OH¡q›l8—Ô?=ÍhmÈ5Æ†ÞÐÛª•50¬¢¬qs‹î:æå@QWlÁÚ]¬†¤¦œHÓÕLXƒÝLÖiD§ª±7:¬™O¤¯™î]L8œB3ËÁ|udÓ)\‹Oæ çi	·î·ke©ë¬ÓŠºzµ8tõo÷Y;ÁcË‚„ÕÊ!Òªå5p­´ÄVG×¾4ÚÂÎrñõÕÒøDQoä"‘×,!òï
l¼‚‘.º`ÛXŽKk÷OOÇ3pS6¥¶ùC+êWg®-þ ·`}ìÒD*ÐCÁl$IóãEcK‡ÂôÃ4HûÊ%Ã[EA'ÌCDš\T-sµ+xM¦˜F”XÊ/p™ooëÔG|6fªþíOgôX££šýÉF¨Ãµ_)˜çgá¢Âåâ3=dG¶g#4Y‹Ga„0¥Fö£.ÌÏð¤ÎijçâS¿ôµ€ŽŽvÂjVù†•Uê¨‰ƒá</'™‹ä)o]P¨/ª:¡&³ÙN²'sÔð~ˆ­àÚ‚eAZˆÖî%¬½ÍýÊÚâêú›«‹Aü¡¶×9‰Žªt>H'C¾3’">ŸØLueÁøü¨M´5
l"’7õBÊÚ)f¦Ç{ê¥—ÊVçÔ›7%s´ýÆ™]ëX¤­v“¢Q4k´n×ŽÅ½¹]Oi3?ÈJ­Úßb5‚±GH­Ýîç7×\ñïÜžŽ5Öo‘M'ÈÍØŒ¥´öO”¬AlÆjïÁjfß¯û†µ\#’ü¹ ‚[1ì|F·SÐCÀo--Û‡nSÑU+®UpíóûðÙù¬ý'RAgaÄ:«uŽ’¼0ƒÐ•ðõ™…nûÚÛ×¹Oo¢ð³y[þý·_6ÿ#¯_ý…º­½ôgðžk>Êñ¼3c,½0!Qí/S[·EJùdWÓJ‰+xñ6²:2ð(v‘§ÄõamWóÑ@$B^ÅÎ¨káP×EÉ¢µµµ¯.}8yé³ß¡°ko k·ÁGƒ5À£5q†}MÌ–˜¸·»Å¦½$#v6!ú5…RIØioŒêÞÞÀ
cªÛÖ§SLÈ)ad4=¸{@UkÌ¼±éXWSkfë7«™Š0«©—5]LÕD¹U´Æñéñ}ÒÑ€5IŒ&™ñ˜Ã1ædÉie #¥ñnXc×öx2Qa50µò7:^¦¢Ú•1 ¥±UN¨™#\“4SÐ¸»0ÛÅ<=‚ta§}+¡š©hºÃjÈb.N˜õ!¿GìÜáÃÇ;tèÜ¹OX¿:¢áœPíž¨:¶W~Ê×ªhcŸùÊ#‡ðƒÜèFN«§  Vc¶–˜fvâºªZïk“¿‹º:ÜDÈ‡Ü¾«¾/t¢ZªK=yÔØ,Ôd°Ö…dåÆ°ï?zÁ<ûç–©`©I_“¤%BnÖÖÖÀ-_=l-Öì“Ë©íO&»ú›zo‘¹_	—â­w"¯ZSx¤ÆÚ³‚×ª=üuÜpP®&+Å——îüú²ü·jX#œ ¦á˜«ZƒÔ,6f÷= X#r°Fì}VFþˆZ\OÀCT²5 î ³íxÐÚ2ã(ÿòg‰ã¼VQÖ¤q«ÖjF¤¬UÜ keò¬á?‰”&—’"UH'NìjíÝAFæ 5lýaÒGHüYƒy‚ì¨(kv«xA~ìV&·	ÐÎÛhfÀšÂ0‰X¦íöXMÃ½iÍ=àh{#ŠuÇXjp­&Ò¯º¬a•"Pã“0ìØMäŽm|óò]Ù‰ä÷“ùàY‹\à‹äÚÏ¦K‰¼«fí=3©©Y«¤A¯éÉÖÌPÄXÍ| ùëªòÊ¿Å±~ý’†kÚÆh¤½™í  G~$ñÇ¸N–j‹yõ»‡]˜fF˜å1Ü]F8Ò1lzjs®’»‚Áb«Nƒ¬Ä‰dD{°Æ •{ŽñZMéY­C$&þãc×~9þåÚõë.~9=¹¸üÚÕùBñáwÚÞ‘¡¿%Dþ}R#’9¨MùúðÚ
Æ#pÛ«9~>éXÓ`j<¼µsÔ's{~ú‰ú‰T,–òg"=ƒ»{éÝ9H1˜¤ö/ü…Ù‘Æ´¡ˆ¦4™ŒRèWfsŸŸZÁqXƒ	g»b2™Ž=ye8îíÖ¸œÇ5¿ž>•%%ƒVÿö>j”®ÔùÒü‘ZêÖd$ _Z|ø­³>ÆS3}’·æó	&©<všvÚró=/I3lÙV*äØoNgOwBï…ÀŽžRßãy‰jªÍëÃ²½àïá“'BLr¸''q	ÄgÈ­Èçðç’e#ŸS)~¡Ü¿–ž'}rf>Š~HT±šÁš'¬½.VS""WÁÒ“‹ëlÕŠä^Fâ™”’‰t"CÎe=iœ–ÒÙçC¨BDÛœá?#ÔF´´·×7v·µÀMjñ
dë’Ä¬‘åq‚iéj"¬ñ¦ož?yòã—ù{ú2º÷…Õ¢ÊFœr&$c±´G6,Ø×ÃvØz°¹áØ=b{íFÇu~ƒ}bµ¹µ*Tó¼E6“ 7c3~ŒñŸþ‹úb_1Xû‡÷Þ{oU±a#Ðš)kHkVukÁ–’ù«UOÎ˜)m×úêí µÏîk:Ý{öý?f¹&KHÕ®ÙE5ØœÈ|+£óùR"šî¬+ sµÏMæŽÎ]¿±¸¼Ž$&'Ož'Ôm3r|=”{èÑŒª1¼ÀÂTwLø¹—·‚.™dB$“Û'Ê³e:Ûè4“NG£	mWöe<áƒ1#&Ãá0JUWÿ““ÿ2y|÷Ò•W8þ§o>ûF­±­áÚÅ·¡5uÇÖjiM¸¦öÍ2ÍŸ"`[%{[ñõ˜êçV°
›†»B1D°ØÔiY6NÜK…yj:(rû²iO€–‹a)ÙŠEÚÑÊ^Ð*r…²jáÄa\"%šöžÙfÑ¹Æxë±²¦dÇ2€	Òì*›ÐÊ­]THÍ÷ 1®†Õ
F#3™ïKHc¿"¤MÑÐ\xJq¿BÿP.ä"L«¤Íø‚§N5×ÑZ{J…hÄÏYÎàñ—.ÔÎY c¯:røõ#3%„æ`óæ‘s œX¬U
¹´.^ƒÕ8àâðÕÃ‡Î½ß"LÛ®ùž•ÏG'µ6K næâ„ŠbîHkpœþTŠŠ%¤¯¡trö8lF5‹Pa¬Yàµåe„¬âksì®™p)¹5cÙR¹‘sEŠØ.,+%R‡6†ö,=šèØ;ÐeÌÅ)+/Ž»ª´²jfDÖce­é[ìgìïåA¬YñÚ•Ûüîžtþ"ÕÞý¦­‰ÓÜÍ¢R´öþõÓ@jHj?ýøã(l§Íc‘]À@im`d·ê¦¨SƒÌ>¾¡ËÂ5Â” `MQKk÷.Y3÷~c5`m÷Ý}¦±Q¹šõZC69­íÞº××ê5r`` kO@ú£`í Ÿ’lX«(k Zµ¤—Y©\s7³î7VÓBÈ@¥Z;ÉîYyÂ­êkZÊpFT¨­ŠÖ¬)¶‹=Š¥†[0£Û6,fäG@´á¡|‹ØBªéÛ:«AiC”¯]¸À‚È&³Í…“Õ*5kÜÝMƒ<‰A5kªúÅËI´†¬±ï‡ÏÒ·†Ç¶ÖlŸŽk}Á<Ð‰ R•luí*Aó!ºõY·k©hAË{*}ZÌÒBJZ3rkk.v·ùš[ðÞ;Lü Ö<3Èk'¨^µÇxOcR)?ÑñZiUñZ´X}ùÕ¿Ð,{jã—^›ŸÅÐ¿ØþØ+Á¨'Óý}ÀÒüF¸l
€7(èÕñDb6Ú7‘íô§Òít6j×¢™\*IïÄ‰j`àÀ` ‡¾fiæ”\‚«)v^)&ØçqTÄ„?©*¶ñqå_”hý¢&.96bøúg”e8cðH“•ã­äÀ7¤¬¦&f/>e®DVãèü/ ¾/±È(úUg€RaÕL´54—_`6ÅÐ¿ŸÇU$Mïµ,¦(D3cÜF0€\žéƒÕh½–5X[8ÅÑQ0	3¸÷çó½º:bÉ¶óÃÍO?Ÿ#Ÿ$™GtÃì2:ÊID¦56Á§œ)d‘QÕ¼h¿—°†®¶:_Êa•9wm¨¾.à_œSBå¨/É„°~¤ŸP=s!}Û¢«€•¬Õ±-"rrÿ¹‚3gÿë‰6[a\©kk'dé.ò¦/ß¾}æÌ¯OrB„÷€&ÃRQïˆÐJ¸|HIhr¯ÝáJèkkøLÛºkì¨ï ÒÓÕLX[4X«ÐÚfäflÆ¶36¬æÒ Ö~¿(X¯k€ÔÐÖT°fW5…gfŠÔ"©SX|!!˜X 6‹ª\H×66†}£”ªkQ)Í¸¶°Ðt°ÖÎƒrtì¼/Z(`Íx|òÓ+‘5ºò_¼¨ÞOÀiÖûðë‡‘Îö
–*[;k°¶Ö@ )6/ÎÊ+ãÅKI®(¦Ð¬ÆIx§v2„s?<Öç›¡Áh&âDüÐY4‘ŽÓW€ÎÏÉŽ‘¤FHø‰zS“®]Þ:wãwŸ¯M^úæ¿þà»r¼AÓ5}‡rð?WÑÖÎÊð¬y—PñšÈµ
ÖPÀ’]{{Ã³¯N5u…±ïuß¾©ÖP«0mïjÍú÷RëÍ¹dï
Ód"”êéá¤¿=-Ç$ 	ÖxÝ±ZrelL¥i.0l4XƒÎšpþ²n>Ö“šÈe,¦#.<ÇÊn¥PMPF°¡Ÿc9´Ã.í±"¢iÔ ™’&<«`Ú€æ¢$J“iˆŒ`˜uŒf^žgç¹sÉ•°vI--iýDˆöÒ+èh'<Ëã3–cB4Ò›}”“è7-^&?õ{kHÊð=«óož#ÕQ¨ÆëùSÂ^X®Ñ1ïÈá«WŸ}¶¨ZŒèÈz4ÃþözåWµl[ïó=¢ƒÕ¨f«Ehk¨l‰ý‰Äñã‰p2IÆ*•ü1Xèøþdh¿kýåä2¦ü6hsMî¡r!=XcÃùD²¯=-/ÃuE!ÜŠC.A~½X‡îß³wym°ªUÔ4b­k<˜y+»žÐæ`Mœf~#ŸÞ®dAÖ*k×¼›óì¿f¤fqm?¨FÁÚÏÔmí¸ilHvö9Xƒ–ú[ûGÄHVBÖ°tœ/ˆ¯úË.]ÏF^“DfFTéj,÷VÖ\¤Áš×ƒ¬A†pšÉjà˜¼ü·šC¤ü%½‰ÛF`LŒQzq‘÷Éš‘Zµ°VÑÔlt9,•â–(ð*ÖœXV¶ÿ¬Úr°V-­ÝË_ÄåA:íÍ
æÜOÑË€¤bMü‹oÿNú¿!¤‘©FoüˆÔn©5ùåòó-\Ãd¤kÿÐa@«–ÖŒßÎ0Vú¬iÎÒÊ«€6˜p˜ÆÍB¦‘DH¿w`­ÿþû¶l#:5Ët`}–Þ(ŸFuXSŠ¤IkmÃäâs˜”H}‰¾ŽÑ×¼qµ~»!±JÍšPÍÅÃÏ9XÍ]“ö¢K€U¼f¤UmRá,Ã,V×ÿùŸÙ¤†d»Ž(Æ2·¸|u9—oŒ?¦|HL&k¶*^óo3”ƒQÀmÂ¦1š„NOL¿:èÄ¹‹e“ê§Ú“NQm½e+ú0S	„ÌÿêÁpŽ	LË Ð‹9T3¦ÛžÔJ¨gKÖ« ÙÄ°kúÅ‰&+y´,þ>¿˜ëd¦3¢µ‰\?Ù Éyfj”1^€êçéd|ëRc0wl—fÌ~Œvm%°%tRÒ†gâéT&Ï…X¥HXäßOÑz°W(tš‘H"³@ó……Â0–§ ½oKO©ÄÜ‹
KDœožAXÃÔ8œ'H}QDrAÎf‰X8]5_Ö\ÅZµ°FÍØ"m-ÉÐüðü›‹TZäK‘d’OÉçˆ$KQ(	Õ±eI”¶Î¶¶ím»8¬w‘uð‹ïÊv`MFW\_¬CWSt›mÿÏ¯	Öì*!Z;Õko¼üÎÓZ6†ê½Æi--ŽÓ@2ÂInÈm¬”öè¢±ŠÕxoáZÏªÁm3 qh¤«yæ"UÍ°7 7c3~¬Ò æjÖ®¬Âj²ïßP ­ÁjÄo»+gõQßQÕóàM„FßÈ¦ºý?uVûìÑÚŸUh­J];ÂØbs!žU[ìt"ÍR­tó ÇÊ‡éH)Oø|d#–"ÑÉ?}úûÈÑ+7n_„ÖN¾qó–NZ[}í0ç†ªx¤Û“ÖžÎã."\»Ã÷5“~!ä’­+ÉV9nž
­ÌÆ2ÐZv4ÞÇõÝhnXå<!-A-BÝ2óEÆÙÀ¶€?%ýÔÖ­œ½m	ÌÝ¸yãÛß}ýõgŸ}ýõÿAYC[»©oò{â'®©;v™Ÿ~žúîr¤&óäý¹œô±Ù•.*Žz{B+TO‡qÕ˜B8=ËLÄ›NÍÆzöQs6ØÐp`vl‚óñðŽå:öc#‚‹e¢ê¤Þà£1àŒ4—i’Và<–Ö•iŽãð¡YŸaZÐG_ãcÖÉšZ3OKû‹nwW¨¹gglúrNE³•^Úì-\²#w…y…L˜µ£ya:D³Â@üirÕX•
tqÚYý´(Ik§½íÔ[ÝÊ%é~é©ŸHJ#ýßÓÑ~	 ˆAx ]ÇÊ5iŸÐÌ¦,Ÿ9é‘«™çEiü»0*¾çqj5Ëhš5¤5ikf4ÂQ^ñ0/ùlqãÈ³Ýõu‚µ`!UÉ¿å©« kõEÐÉr#ë¶kÔL‡²–`vOwÔß·ÜA§5ÜûÃ‘ý­Mªä%ŸT–Mf³sf‚ÁÕEÓÎ€5 m‘=élìºýn O¸ðÚ"\Q;Ü—ö¼{\è—êíj=k)Q(t—½ˆŠâŒÖZ=‘X“’%«jÔª@ž´æÁ{“{¬&e­kUÂšgÚ¯»kÉjôÂÕÖ$³MíÛ÷øãf9r ©Ã|™õËFÿ¡Ëj}ùÝ—TH¥š5Xc‰ì½ò
ñPMo]¥¬Óð·Üûù"«Yëp±”À4xM¤–o#V™¬©šjÇnaœ@Nž»Õ î`ÿ0¬¶çÝTØë³æn,U¼vWÅš›Õ4ª)öƒ:*°öC§Gøð¸¦O\µjß~+¨Vƒl"5Xk¸%-ÍÝ;øÖPÙÐ.)¦kxâ–¡ÛCK—IFíØ¡dTž«§’)Z’ëˆ§¬ñJÖLW«Hk,v«Ï!€5 mç¶Â	xÂù÷“µgâšƒ´ ¾ýú*ÕÁ©õ5©pÛîƒÕ¶@bŽÍ46S±Ê	
†p!LXS¤=dÙ¯ÖÙÍuíÃ-mÜðû‡ñÕ‹Ö~˜y‚-[äA:R{S¼¦p	‘µV!5¼6-`»Î8NLCl„¨^c¹å|©¹”å§ïÜõ2ÕÜW[ÀFxêšFµ±Ì‘âÒrü¸¢ÉT¨«5Ü£â?¢'Þim×z¶ ªQ*˜JFýéh:¢µ%]¢mUÌòý#þ=êm­„“+z[Šä’àW.ðG1ç"W2›VBJB°†ìe¦—ˆ~y¹Bjv¤“¹úˆ|t~^ÊZ4³` F6Ahi0Y¡'°‡ÀØ‚óDo<9@\ž“~¼fð) ¶EHB„Õhßs–S*$d8–§q*À‚‘	…Q$ÝºáÐL"•^`zÏ±Îl[zÈêLc4rw¤eAzÂZÖDN7n\YÎ.¬]Yå3ELà55-Ä]Cˆù,&•	:™	w¡mÛ4ìÂfªž¬H†ùÓh"§¹Z£…Ì©rž¾³‚ÔäÄ”£z5Þñí“$B’þxæÖ€µ"L¦°–jžY¿Æn=lÁžüu„¡âÙ¯·¿W$wÇj.£|®£Œj‹µžýŽÕ6ÛaoÆfüØìûé³vE²vå«	µEÅFqY´¶1lµjš@ùË%Z£3$a¸DíZKãúú™õõXTÄµ*uíÈ£GŽlpáŠ”EA–ù>eã\1\ ë¼/-•Ø'£ÅŸdºXøÓ‡kù£—>¿øß/^úêÅkê¶†H²­½~XýO<óÎ;xžóg³’}xI´6]ÊýF´D7Íto“²óû9{ÆO=™!ÿžÓß©9lBmhF©YcjJ&H5Œ ŠDø(þžm©Ù	d-ÕY¤ü}~ûíç0ÚÍKŸ~{ó»¯¿û@ß¡<!-T·vLgþ¢µSºRhÓqYZSŽK’õK"ëâN¤SÉµd§Æ¡µ)Œ¸ÈÉíC}C6!Õ$´£a¤il"¦ÏÚÁÞ^| 'ððšŽ5­ peâ³\$GÞ£›ä§b±Ìì´F³Æ[›LDƒÇÌÇñô”ÙC;ÁLÇmVÓš%§¡5kFh%832cŸ-Ò<cÇr²£PÍu¯ž0DƒÐÐ7Kà3 „¢¥£NM3›e®J*Tv8¼«F£:›–¢Ï<sB©$jÌ|Ï	Ó¬ê—ÎÑyôÜ'2’êH¨Áhožÿu9ÞÖò=qÒ‹ï?!òüùG¡ÇÁjÏ=,M”¬ÆA¡†k‹}èÐûÝAÁZPvtœ*ÚZ ´bã–í»ŠŠf8­~ƒ±–v)	iäÍ:˜J·€áI‚ÿqÉD¨+DP(Põ-•Íø/Ö–ç $'¬¦0Í5ÌÖ×Cr‹‹²á×ï‚`Í„¶ãþÁþ'ñ‚D·{òèþV8šJ‡jnôÚ¬µ:6£¬­u p£b=;æžã	l‚;mÜÑÕ¸‹ÜÖÝE–_›°VkU5kes‚ˆqú hÔor¨&yM9§Á ½»`D,’ï„I·°v€Ü
Á ±´di«ÕzAÚàÂžA”“ 	ôµÏÌƒµÈmAk‚5>Ø(–ªÉ5 mÀÚÈÁƒ<ppà@xIrß“½s?°9ïØP#×¼ÅIk&Ã¬íyíÂ’çYf»w k¹–k5æýž#$ëËß¨U[µ$Ë:²uj¦¬yI¥¬„bò~„‰1ñÇ›r©ƒ6ÙÈ™JA–y‚Ó4;­•"èÜ_Fµ÷¸»Ðžç1¢gq5kjÊÒJ8yÍ±šœ1¸LØîªÇšöè¶À)$—Ikã6uæ¬w;O
—ûèÙDƒh¬¥é<¬ñ¸OElò‚l–Åˆ”µŸ4­1ö]°Æ5šgNœxåNŸ5®þ ÿ”A¿©ìzÝ•µá}É{]csh‰Œ5œe®Ž6ëKtð£9àæ¯>ü0/ÐØÖÈXmé_]ÀVÓ.{L”Ä_ëLÚ±Ú
'Ir&x‡¦­[i).q­WÆ9ü¤·m“ßæNçÓÛR	õAÞ9X?*Â“ùyO*6ýb>#íã)µnaÚQ}d~”Ç\G™‰ãXWL%ŠÜlÎ˜XÈòhi¢«eóªÿ ù0ËŸÀ²QÒcH‘yz>Ò‘AdAZàµu+Súð0UêÐ¨Fª£|"Gñó˜/ô!¤ú·ÎŸ%W’Ùt^wËµÈrÑ®™/XàUÏ²ÒÅÛD¤³Sým”ô˜HEççÉ‰$I&À‡$ÛžÍe èlMÉÚkWé±æ±A.äu…‹ÛÛªæ¥í$„þnÖBÊÚh:>_<Þþ›ÛÀ´áÐV‹ÚlÖ…ÒÐ	u¡ñßÝ,¦Pª¾`M¬ö¨Ò;ˆ_ß¾MäÇæ+"³G‰f¶ã9Av?Z¤g;"V#ô\·W[°V,Üøm. ±èXínTÛ,XÛŒÍø±vÆþÏ.’xoX[-wÈ^ƒÖ–	µÆö<û›Yê‡ýå=ilVj@½ÕÂ~üA9jJ×;ÑÙhÖ˜=¢þûêFu1ƒÆ,±ýìíO[gºîtþ‚ù˜ $(JTåB‘ëƒR…Á6Úvd\
Uœâ¦—×ibZSµ¥IËIì´Õ”„
‘éÛ„fg”ÌL›¤Ýél&e2êIK”jÓftÚÝŽfŸ9[:¿ë~¼ºpI÷ù\‰Ûk=ëÅÆ6ðø·®û¾î½Zk“Õ¡&`-—ÿí•;û†.‚i7¯\¹y~q™ŒX"¤¥¯<ðÀ\³ÜB ! 5õRTå—Pz¸D7·Â?TyQ\æsu. ^®>‘næUpñOÄ>rñH:Ig¬T’¦h{ä–æ$Æ[Ùàšts:xjßçK_¹øæ¾éÜØ9uÆfY|•lÈ"®)’D=2!{£6©»¹xØbzðíÓN­ª£=Ü\Õ
ºU!l5<Èü{¼¡£I3—n¸ãÇŽpŠ
´HgoÃÀt&9]ÕÞ°{ÇŽÚ*AÊ~¿S![z™2:ì W#¸MŽZO4Ùòc*2@X>¡¸œ­üC@4ßw_Ñ7á™d3ƒ4á™ 2t°6,:ë/vFã-0âwÉª¸ÇLç\5šc4uÏ›D4UÛR-¡k‘b´‘¶!@š]ü×??Ï™ûî{BRÚ!8ÊsÔÿÃ/DWNDƒ¶”æø `æD4þA?S¼pš\PüsÄ«EFÃþ…àŸÌsÚê	ŽAãù`µŸ9ÉŽE°Æ*X£äíè^9ŒÔÔÍÏÖd0Â‡C•53ó50\weyÍ|³dw·ƒ5T`X>BËR!Lu—¯]“	«È?Ru°*€4)),<C~ñïž1œŸò¼=¦¦¸[²1ñ?i`G÷6ˆmÈ"Ý™•é‰T¯F†%f9ET; c”t[c×îz„Îq;2\3_ZãÐ°š¡šc5ŠÖžòœûKÓ Ë<qÍ¶ÜŠQøôÓŸšÏ"H$F#à4@mÏž{ïeÀ8¿6RÏ/$MÄÃƒI=oHÜ¹l¾[·yM±Y–{÷ï÷—v~ÍÚFJô*w¤¢µÞ^× Î:et‚­°Ú!&­ÑÏ·DY¨•–¬™ºæ¡‹Ýl8y
s`MzÿÃEÊ6]>E¬„5ŸÖŠ;˜(²Ä]Äí.qŽDHÁb#^$n.î‰!EŠáá­ÝÛnCi ã¦ÖûÆ‘æÜ¿<Þ1ôpÍÖ¸ù ¦3­¬YŽ©B®–		ÖXƒ7¯‡ÐŠÓë×³ÙLZ©t4Ä.2ÆJzdÖ‹!š…DsÖÖÅµýŒ6ZF¾³ôGKÓÅZu²_¶VÂ\ÍÎ«4Ä^®¬¢YÁªƒ5þõ’ý¼÷Ñ×öîÇ
¢¾ÂV"°ZÕ¥ µ³ú¯c9rGÿ¡Ù7É‰<1<7öØC3¨6ƒƒY=ËÝ[°­à>/†§E~&Ø¤¢±®hÊil­à/?7ÆÎfÄõÀzb] ð—gsº5œëŠ¥×!…¹à™HªWLŽ épmÿ·ss4Œ9~B-Hß¬UB`ùlºVÝ^˜;†ósµûsÖ\]6¿>ˆþF y°æØËÍMŒŒä§»TŠç€‚©üÓ‡”ÉeI–4¡-™ŸhË&F0íÇ||³~ØƒkhglIš(MK¯O`ò«K¤T9—	ª.QVþÛÑ·¡Oewá0Zá Ø9I¦eL(£Pç	¨pòéIý,ýšµ•kÀ!Vc=}îÜÅsï%¦^žýõ†²¿‚dS£r1“´­e!%ü`TÍÞ8Í…î°z²º-}6q¹T3\ûWyAÒ[Y®„Z©§¹ÚÅ¤´ôÜµ¥§®-½ˆ™¤®m[‰a6"uÆf5.vÚyŽ´2š–ÆBpÆ¾ÎÇ4nÚØÍ‡k¬îÿ>Ú¦hà)ZÖ µR\ûëjÁÚj¬Æ²3ö'®Í²'a5`àÚþÖ©)l=²€,6ÇÖ®uÄ®aö±F‘e[*ßY¸¶°øÁwÅ5k»öÎÞ£S}¸ä&ú@¥zÜ%G¸‚VŸ f¬OÉ1M_–Y]rù¡÷Þ£3öÛçÎŸ¿Éº¸´`¹¯Ù|JË!Ê(,è1ÿ~BÎ‚ÊƒÌ£ï¼tâÀÅ3s9ù„TÕ¢«)J"7-˜œ(dšÛ›SÀ\6F™3“Tm KurI’:î€PsÁ²­­iM¤6œNÇoýuñæX*üÈÐ‰Ç°f×ÄjÎoð.RSR6+Zóë¦§5ªZG;o…
4µ8NÆ#×9•.vSä½Ÿ€5ë–6ÝÚÛp0>XU»§¡ªÊ\û\ç³~e<‚WÃtþuÙ>Š‘?<€PÙƒ#5î§›ŽXôÐåµjp™0Î :+5à÷M÷	3u´ð
ÑÒl{E˜ÕR)ô|÷',‚}#ÌØã¬jvÌ²û‰?ûñ„¹³É×Ñ¼´~!{MGhp¶÷5†X¼ 2´NƒhÙSêÃÃg
ýV^å&˜&OU‰ªlåÜoMÖb*ÂïIñ3Ï©Ä	kóóGgÊÊ+gŽ¾»…Ÿp²Zµ$äØ¢†Ê”üX7Ctw[6$5õeL:L)ä®T,;65]»!ÒÒ—¡6->ËfÂ°Ù‹â$á—óò0-QfÞÙ©«óŒäJ²;¥3:‚ßŠû»2†ö¬Ñ¼M^¥©tJø§ÑìÖnuñBžÈõÚÚëìy¦%vþ¶Ç„g|K0}ŠÖÞ[*þ…ÕVX÷;IÍFOYcµ˜úô}º‡TÇŠÝRÔö4ÜûSÄµ{÷ÀHJ‡üÖ!Û
Ô6Ê`¤‚äD5–îÓ½ü\1¨]3X³4È•æ"nñÂï³æšbGþû‘)ÓÕdÔ_„56ìô¶¶â	2êu1†$•Só³©·C]±6ÞcD,üˆ`íHi¤¯¥9^³H¯`ÅÜ 1Ä'µNm‚Ðnoz4ÚaF\®ðÉì‡¢âò©•Âš[ü¸Vróû¬yœö½À¸ÿöÆA5ÃâÛjqGn¤\ 89‹ ¶,<7H¡šŸé‘š,E7È—»Aú®ýú
²Y4Ù¸FšºÛz¶(kM†f5Â"iŠµµ’ÙmªVJè5³q gÝ¯ùŒ¡™
ÞHûâzŒZƒ‚5³õŸÙR>äÕïŒ²à@°ö!¬¦¼ú½¾rºP›Olî+ïVÀæëk%¶Ž”Jï»Õâú¾ëü½>;;tò±©a!W=mÜÜÓT†êý¶ÿ”×´ñ,’MMƒ£©@­š¬ôwFhg	G0¡¥Ut8J¯km4­„#-›×µÖ†Œ˜Ùræ¤¯ÒÙÑ|"‘Éáüí ÔÇEk4Ã¤Ë'ùµèoƒVŒÜÏõ·¹A¼ýÕ{Í¦²í«F‡¿Íå¿µ‘\vbŽÄÇÆD/¨LÚW"ëÏ‘81‘˜ õZŸykZmKŒKh9¬,I¬E´_ÿØÖ×ÃÈ¤’}âlÎêû(|è¢€<jè’˜:’@ôêšV±v*>< æèºExkŠ*KVëäÓšl‰Ò,HÁZ)««Ñ®õÜË³ç®%NÎž|«eìQ¢¡B>nBš ¾k|*áŠqšªYb$'ë8_WÃ©Êròµ¬Ææ˜…ÚÊ<ÿ8I!ž°FXÅ4ÓÓk­I\§Y_5 Ká`Í(¬ÆÛ×=>¬IQcªy°V
lnÜf7]u	k¬vTS¨«I«±?î@Z3mM‹‰j¨k„”5ÑšZH±«y°öxuAð$ú-/ÞXœÖˆ»ãÚ‘÷Î²	
™LiÝÏ¥,@ëÜ@0”«8**Ž5%rÃñUÎ|&Ýwÿ“›o#’|rgéÕ¥…%ƒµ"­=¤N¦;WÙšŸÉä÷Ìý•ŸÅðp XƒÒ˜ÙâhS±¬œ±RR×ºæ&ë“$$êUp„Œ±™Í™–`c œæ7[çæ–@”O-Íäœ…ãûþåslÆ.þõóÏ©^n
øþ¨ŽzÁüŸ<$Z#¯/Š\hÓ¹7™CWn
>(£Æªæ°¦ÐƒVÔ3:Ê´Èü‰I2M[Ò{yÐUÕÛÑ™>q‚Æ¥b-fM¶Ž±T¦fÐV‹‰ßþl€Å÷qh&"“nÆ¡0°ÏÈ9%5²òSÏ|N³xV+·³g\xÛ§5U¤©XÌuÛiË’çø&3…m$4J««ë¤9û}…]…d!LH{RZÚ~:‰šøI¤;"4³sÔäçÅsÿñ*+?÷Wå³¥’F˜Œ_†…vXXmWÿùÝØs¢ÖQøF‹5OZÑ¯Ë«*ë®¤•îÑw«ë–ëj5;ñEÝ‰ýi½ ­¼fFáJº+ƒ-ò‚ÌÈrL>ýÑ² ø–ŒVÅÉYÌ‚Waä*	k´Äö°Œ„G©j¬'µX1ôV”ßX5ðX}‹”{&EŠj5þMÊYdëý»N]®Hƒ)šù
;¬6z«6ÆjµžÂ!š¤r1¯=eiV²æÃšIk5¯6«¯¬qï˜’­vÖF÷b1B‰Xo/ž(˜Œ4´·Vì Ö Px!EQ°Ì(yï²ÜYœ²f´¶Âa„µ4Ò/Zs5k|á$$FCD3E©g°Y{»bs¨†o:&_“Ø­;Ú;t™„îÝ¸tîŠô¶k.|Z»f²šnŽÛVJk¦¬!ª	˜Ð×ø¾äæ!×Ëû7yt¿)Œ!lV-Â}ƒ‘s~ÑÚÝâš'­ù}Ö<?ÈåÌöÆíÍ$Aò£ç½ˆ‡ÿmµY³†p2€ôIèžõjÖ 0P­Ô»ŸQç\¼èÖÊ‚ô
Ö,lGÆóDÀ5ÄÆµß‘‡M’Öè•m§$²EË¢| W.²œFB‚0Fƒµz€N>#úâ25®œ°ÜK]uõL÷‰c×À@s¶&qMAäk|ˆßKî£K’óˆÍÂ·YÙÍãµ\Îë—íék£ýF:·ÎºõæÉ[JbœÂ#¾P©Bªº|¶²²~™Cä
^+Ø¬Q¾Œ¬n>¡8èÎ¦2™ðÁæH-ÿ¿š[™Hçú––×"#qJ¼à¨h0Ó\5ÚQK7¶Z¬AFÉÇø6Õ»›žfŽIåèqCµ3¦üý\¸{éÙA]Q…Þ†q¦‰ ûjÝi)Ö·QMÝ«û(%#†	5‹ÈÕF‘ÅgòQ7¸ NÿÈu	±Y¢À$@ô¨h­ï9¦ãñžB´-–?Œâ¦ßæÈHuAíÕ0Âñ$ê‡þúødž¶ÉéQ<Qb™®ÉÁÚô`2OM
B!ýþG&Õ3»O´Æ"a­P_R±¦äV§¬!ª=» 7oe3…–Ôã=u\HäÔ ‹òµ2€)¿#
ÊBZcæÒl y«Î>ðlÁ’˜ÀGiM·cÖT³3™kO}d°öšÌ ŸzÇšªY«#ƒ/òC•hº‡Eaç·hGrY‘ÚˆÜØ—Ù £meepÊÚÜ²…ÿñSÜÆÈ€”¬VR°æk?YeµÕXc"äODkŸ€EŠßÑv\;)Zã¿;¬ö3lÕå2æ"`5þ’ñ‡ÅïÂºýÚ¢XÍE)®yâÚ;xô–ëb¨Ò
HeAÅJv5¹°£Ámyx-S¤$0äµ8x´ðöù›¯žYÈýuéüY…GkÔ­1‹Ê²kØ÷ç»@5 âÿŠ*þxâ¥g…E±L$N&ÈØ°GH)dôz…®|6‡XÏ43™`0@V[2M:I\–áN–Æ#š$Ò)ÓCwnþï‹__úê«3_/,ŠøþôÝ©;ö£û­W7ïg„ËÌXËhM­£ 2XKÇiÜõ	¦N*Êr´ªvªãí¯>]'ÐÅþFûêþ†…()‘”ç‚R'$³0ÍÂŒC|X¯Ùèíª-‹#4^8Dó	­¸5Ë§YptÌ+Õ1ßEþ‹stœL(š
J¡lï»D~;Òm'ž!^<à…zž)R¬²ù–VÄ3ÿñÌ ;ÇÎ’RâÅ«Äây©fÚÔÞ–ÆYŒKÄW_ÙƒBÒÚG¼€¯e« ž|Rm´a®%^-/«yw¾~æêÕy»~ÂÒÄµí°ÚLm8*Û°¥Ymþê|ù†bKÙX³»µ™ìÔTö°Ãþ`†0¨^Y°þ¡¥:Î .ïqÈÁš˜ŒUç¾Ôî>OYã1j^Yœ:ô¡­%³zº$KÜU§Õ"‹BhK·›‹¿§—	Í–õÃö˜[n¹¤Û^w&#~ãnai…>¬y9ÒÖ4©ù1ßa»3d*%?ÞûÓ=–hˆÙ"ÊU/k*"CVSTlTŸ5ç‰AŽçéƒÚV³ÆR´Ö$­kS;dÖá¤5FsõØ$`”ªgþý< B‡’û: 5–æÚv¬ûÕ¨Ììh?µÜ^Äwê¯±¥ÝÕò¤uÄ¦ì‹\Ã¸Ý½íò¦ê%'2õÈÌŸ0ü •¿×û7ÇjÚÜÕ’mÑº_ˆf+ÁÆ#6,7UH¹Ð£L0¹U@nØöóS¿Ìc^ö£[‘+”5p­TYókÖ|7HÁšGk6l& µÍ(jÚ_ï`m³AšhÍBw¬‰Òa3Èùµàšò ÍR°FÝšÕáô¨t|sï§ó•ð ÅÑ‘­¾,èõª7¿È\H1]mf¦Hk¾ÅÂš`Í­}íìi9P k
›`ŠÀÆÊ=%Ž#¿Ú‰+ìëk°Ù€ÈöæØððÐ-sÉq]l¸«ægÿ­òž{*ë²uÄÝyÍ&ŸÖl!Ø·ùÁV\"#­í'F›Iel8X!{Ýæt„æéùý“ML&BGdýF²H°ë§ƒÛûXûóÔÛÛGFaM¤³áÁg¿ý[ÿÜ°.ÕÉ°JóÓ€Z»Ðum[ÈQ2ãù‚,h}-¼ÀÂrôkÀ±IæÕ¶¶>Ã¸5Ô$h€ª‡$$Çið«m­§zÆÇ1ñ ‰ª#±Õ7¬^ßEpÕ<W¾´‡2ç|^®'¤@N4Öó$¤AÒ¥F`¥+ƒ	µuPç€U¯ùö"¾¤g.rúÊ•ÓçÏ.\¼òæÊ×T¥u{%3ÛÓeÜd¢¾±IvÕ¼±Bµt4ÉWú=a*©•Õ|ð¶dã&­9Vczó“ 	f-Gkd}÷ñÏ“=^„5ÑglkJ›«S³€ËØ›iqi“?ØbÁ¡[£¶[” YÎ z5Cµ»Ö«ýfµ`m5VãÇkß/Jû„Q°6;{ÇhM¬æÔµ™–©)ÓjT½F(AÌ•Â
ÖØ¥yö‚Z)®3¾ÓÈÉú)“Ê…ºV1dó2¤Ž˜¬ªZ[´-Óu®”5‹Ä‡.^üäæ™3‹Ÿÿf#çKhMÒÚdz´æU­k
*¬†‘Õr”Yë5ÈxŒe“)Õb‰¶°ÃÁp˜Úe:eg€µT<%<Ë$cÉpj.ÕÂßµTÃxT:ÒÜÜ¹~ìâ¯nPGwãÒÂ{W 5÷í	'>:òà£¿¤¡ ´Æï¿ŒgcOç=ZS.¡›Åqæ?AXçQµË«5Œjæ­¿´Æ]í¦‰)¸â)>‹ÏVY'ñ„5Çn…7³—öJÓvYÂ£uE“Á£ïí(Ló‚æÕFh¦ŽhhÖ½BcÃDz˜˜”§£ùc=¯«<G¶ÖÃú>ðÿáÏ‡ž‡Ó³@D³øe1ÝÑ`MÞû{d$dÖ H³ùÎªÐT¦Í¢8cëâÛEáì­p™«NÅ†ÿÎ®Bf0ÀÚ×x½XûÅ!ñ¢*ãûåQXíèÞîÝWçkªÕk­LQ/aM6tâ¶šn mÃÔµºktYK&3kÊË9ìÆ1DdMøI§™]’Ä¨M;p`lJZšéÍh¡¥5FÎcé?SÜ3SÈ©1K†´…8à¾pWÊªÔÂIF'á,Im`à†¡È2+2Û­"y¦ýìÞÒÍïrwº²5ÞËÞ°ækÒ¸–÷YS8\ó{¬¨/ãâÑ‹;þñãŒàØO‡lÙCÂjÐÒn dÓºM;ÕÐšÕ¶úQ<š¥üL´Vª¬9Bs¬v·š5wcÖ<WÐÔPÁ¹hÍ|üeH)XCü£”®8ƒÖLyk'Y²W¢àýB5¢Ôò¤ªiðÄµe#À"•dªîÛÿððÖ—Á$ÊÃ6b}y»¨©¡gU|ÏZdåþ²¦Ø¾3ÿ‹¿+¥µs¬œ²Û9¬Ywíè6?hÚb‹Í¯õj;äâo?o0ŽwRÔXmƒ÷¬‡«yÊšÏj^8 ó•5?6ã(h1@Ó´y°†C&¤D5…ø,ªöklÖk£\ÑÌX]#låtôpŒÅw*;Ã¯!¨…pÑö;ƒVKQæ#îÕ‡®–W:Zó”5¹‹ kŽÕÖ^9þô+1ÿ‰ó
¶
Oa+åµ«/Ï®Ô×L`ó¼¤|bca½ÎßwïÏñÜÌCWÏ¾”èp$êTÀöƒúZ©Àæž‚IÂ…%H6·¶Û•>®ê‰æj#‘ôæÍ-‘ÖN\±°kdRåRhº¢kOw¶FÖ­K"®Q­o›¦‚»—Ë;¼Z³ÉþTþ¥?öcçP*«Ãž^S‘f©6ÜÁ5Þ”³ñÏRìÝ2{NÓ€ô¦&@'B

BèH"Ø]ò]sùÃ#øBjì“"Gà5rXÆ		o’ACÑ¦F˜m„ÜilÎäC¥Î$XBk©9Kçä·}gÈÁøt®‚|–<Ët,kÐG0°c¾ýž°ö3Ö|X;w]2±.žŒœ°ÆAr£®+èƒAWr‚‹ YÊâ(h'7S½Š*qŒ
…Ê‚õÕ¢5jó‘•9RàUåÝOÈÒ±aõÑGlþZÒõÅÅ¥×f—®áÚ)?°fHfÆÂîmXÐ×lQN‚Ó9ö|]ÕÅÖâ¨–l<D˜’®æXi­¨«]±,H-Æj,«k«±?ÖDHqšYøó?ÜJ×,f$­Ñ{*ä
dC®—lF8æc?¾\³ß|pƒ(ÅµEÄ.0ñQ†3¿–)¤Ñ¹jñ	ÜE˜º´Rü“j[ÛDéZÂdº®ßš“³^núÖ›‹¯R¹öÉÅ³¥´¦DÈCöhzPÍX!Æø?ÜððŸs	÷Éd ˜UóÏxCœôè„ÇÈó¢‹£]Ìü™úê)|OÆ"áTŸ¸cÕr7ÅR˜„›Óëß¸òõ‹cC Ûâ•+‹ˆ7¤f>÷ªPTâÐ“< Z;ö—DÛ$´&DÈrW[Hf´P¾cÕt?£æá¿ÙåRwïÁlGF©Rsö Œƒf&2@±›!øeÏñ¾§Ÿ¹CÖ,Di¬^¼dòq!Vû.ÒX¼åÁgøà „R±/˜F•<ÆxNc3AŒËÁxÄ¥ì3aU3Kn]†!ÏóyÂf¯CD1ãðIÁ¡
1C4QÚƒ!4øë[®¿
Ò\²#¡\Gég*"´o]ú»Ú¥¯>¸tÃÍ±Ú¾ø‚­ÄfÀöÔ+¯p½X“ÅÈ“¬b5¡ã/÷?úË™óûi³V9«ÉM Ì²«êë€5|Cì£cÍ}ó¦¦éZþ–îmSÝ‚5¬D“Á²n¦ ±löV.Hî:°¶	ºRpÒ1YŠ§ìœùˆŒ«¹~ÔÚ¨8ÍvŒì†¦fÈdqÊšË‡t‘IØ•LÉ`b“5¿ÂŒF«jãUqÖÈpt!BƒÈ|µ#Â‡5íY×·ë"J:ºÍ~§¬ù°FˆÕ¸ª¾¤‹GÞOzaV"ªUÕØ kÀ™µ4‡T°0¨èÅO`P70ÇjŽ4¶	Ö¬ÏšW³æãšj¥YGÔÛò e0âY+²1R³€^«ín¥–J>(`c{‡k`Z]Øð×kEyò•5â…kËýE\ø^§KÒ É,$@žË;¾ŸŒÂSÆ¾‹ˆ!¥²-;Ur°Âºß@ŒEki8Û~‘œ:/Ò!¯Ë†¤Xm+ F‘Úe¶”ŠÖ6¢³‘y[§pæ"¼YoÄv¤¨¬í]îÜï»‹¬pƒô•µÒ0‡yÆhÞV´‘1× ª‰×‚QXHiÜE£@š-hFþÕØŽ0ê£|ãš`È²!-B˜G¢§!²y!R«,[»efmÍCW7t´¬ùÚaŸæ‘ÖÐÖ^[‚ÔÞ¶¯yÛJ^»:óÊÝò!ós÷z	‘^\ T¾¦ÀÛñËá}/ÿzrî¥÷«P±î©Ão¤„×~ÈÐfr–þ˜RyiÍµý£U%¸…A5EUXíÖZôãnÙL±uº3ÝI˜ýÇ#É–u©þáÞŽÑij¦”kSI&½L×tU*ÿÌKâ1:u‚s¼ž&#¶Öb­>˜~‰mIZ›‹®‰&ÓM}}™œê½Ó’Ã­½ëÖ „Ž©&„š"ù§a1e@	-}rôÕð¹Ÿ Âã4yX
d!¸Ý¬çØö×¡ïåî Õ)Ñ¾BB-9y&=`œFÝ´ô.dçÔ'ˆv%€5j¥ö"ß·í/Aþö·\{Î?M#=U¦u ™–¤øLf3©X´šè£ÃvAëj ³å¡WYî>ôl‡ÕkhkÙöË·¿TX;ÂK¾@,©_%/;SyíZ·«:›ßî˜ÌVvÍM[œ¦Cíê|Ö*5²á”6ø¡üGo‡e›K”ÕÌZ„pÞ"wÕÕ€µß¬vX[Õø1'B‚iÅµ˜9k}±¦f”iþˆ2]@[#zLj³qŽMõüÒ"­¨n|Ax¸«¡…,Í†¶L]»ö»±L›]fª.wäJ|oË+b”“ÑÞ,“Æ¦‰ž0“CûH‚Èuån}þÉÅÅ3Ÿ_\¼(X;O·ü5‰:Ç.hÍ2!Ç±þm3ñ‡0`{†^e«¡ÔµD]9"*tÅÃ±¯—›¿–5e»ò1]‹Ìå¹Òk©T Ø–J¥[6Sl±>ÍEÊ–`ðäÍ¯ï¼ù×¯ÿ~iéâÒK²YÂ{ZÓ':×›7TSwLå¨æ*¦¥5»pYŒ­Þ![5
¿ê¤*ÛÈ‰‹ÕŠâÙô°vª\ÅÙèðûöõ~†#‡M&ÇºsY¸<GFÌùÙ•4C4ÅåB´gY=Ó.‹|þ0Q·%˜¢‰Y0×s‰´¾ç·j.ˆª¾šb´_í|ÞÏs<„ç" „iåh=‰|eec¾oöÆrÝ'ârGÎ.¹+’°B á3„Ò.‰Õ.Ai.ë™]øÀëïÿñŸ}öÙúÇ÷Ù¿l#úš1ÜGû#Á²è1M³8XóøQïê±Êº™w÷¿[ƒ˜&¦Ø!Vó/À@‡üªêjÙŒÌtk?T^ÙÍœH_¤µÀØÐ–©±î©¢ô•K¥d‡NeÈ"ƒvIµºž»Å8$úb%¬ùá±›ä­gNÄ)=|jJw0PÀgµÍëšPÖ&¬UuT9 +Jiœ”9¿c3u—'©±Qx°æˆR#/ö×U$¬yY„HÉWÖöÛb¨æ—ž8F…Úî†|:Žcâ/›|ò!!¤ºOÃPjhvZ0ÚÈ„ÀƒÁˆƒ5Gk¼¨_²æ¡škWöYó´µ)ŸzHkfb5iz¨x÷wâYÙËyNÊ×‡Mg+ö#í› ŒŠ‡}7H†•ö"Úº›ŸÖ|XÃº£Ýv
ô¢Xþ3l”#ä¦Û$AÞ= ;¿)ö9F—iui+l ÑÕLYãÞ’š5\DÀ5×ðØ|ƒA•žâ)„pd§ò[;Ä4‡iNTcw[÷;¾w¿SÖV8÷sj¹¸¶RY#|PÓH0²×XMX±±§ ¼¨\s»8Žà‰f®üÁµõ¡²s6$õÖÛ!ÝU©vkÝWgêjÊ·Ìl@ZCY˜yºšOkéãüQþ4œÑ–à´·ÞzË6Çl¾ÀöŠW$}UOäñJL±[Ìôµ’DF¬!¬1ý_ñkéÏN¾O&
…ºŸ¯l¼½2!’XÖ.[+»Uœ=¡Ýuv‚S×tJ·¨yvks<½¾…º´x'Ì–hZ×–O!¨UkáÚª†ªdSm©+<ïš#e£80¹‹739Nö$ªh>óe~¤ ¬*óec°ÐGª÷t.¬5É«b}ÐÚäÔùº/ÓBš"“º*ÜPÉR™ìúGÈWÄ’¤/Û†áLSà Ìà,,LÓT2®~ÓV5†¤–*AVƒã¸ƒ&Ú¹\K¬Ð‡‘?mL³Ðb”–°(²Z½gùý~ØâÚì?ývû±‘ñÂôH»‘‰|v‚·0þ'Ña,AZfõ†(H$äÁU¬u•Õ<º‘Ý:Uê÷Œ÷lÕXãEß~%‘òX×þ#ÖêXƒÕÏÎüúôs³V|Ö=k¶<“–æµÂ¶+¢š™êæNˆÓ¬q@”­t±Ø°	ÕŒÔ¶u{Þ"~/lT5ŸÖ~ò_Vc5VãGœI±«ù÷›Ö`5uP$}Gzwnþ5iÕ5ÜUóÎ7ßÜ<ùÍ­K''—–Î% °Ly•Ìï-8-a7* ©‘’¨nÔT©…3¸è‡Ã±`l8kJI	Ëíºssá“Å3Ÿ,P¨d–… 3¨%Bbàï´µ×ÊÚ‹ÖXá4[ ¥Ñ”Z©te¢}$9R
Mµ‚%0ÝdâU£2ZLf€·PeÜå
n"ƒÈ—LÒ‡%°&–ÃJ²™K–a¼üÃMÑ÷¿úzá¯®œDXó+£d2B&¤
¯ÀyBÖóvÐÖæŠ´¶lÎ=áÇqŸÛUÔ064ôl›ITd´ÆgàZÿ(G*W{¿xÖòµh¾V›´’dG_A“œæ{;â3Éh¶Z£åME£*–/Dbâ°Ih8/SùMºSéŽÜj¶ß÷8½Ñh‡ß†¨µlC0_|èCI€¬}dyŽ!œaVÑÏi%–X‹éŽo/þý¡2rí¥l.˜jëL„¦íg_| ¦}­ÁgŸ±§#°öñÇ_|uéÕç^{åÁ{TÝ´íM¡ó­±8T3¥È»ÞÝ^ò`-T¬Af5ó•¨iÕ5óóHkÝèl\äçC-°fž#k†²Qé_õC4¾Þ…W#°–Íe“¹ë¦®ÁW°Z-¬và€ilÀ˜oYC¶ÿ§¡?YÇlc;ÛJYÓÀž5ÈÞj°¦ÌîKµÖ¶ó‘«£™£HxWV»·¡yY…šmtìó¥5ÏÜßÛgà]ïs!‚ÖS|eÍ—ÖVk¢¨©ë{vw4`Öß€•ÇÕ­‰š¨Û¬íY.§{I¤Á—Ãê¦ÌLÞêÕX­A˜`Í·í_‰j+kÖŒÕ\“55Åv½Ê–ò{w8@ÂˆÀÚæ–ÖÝCm­Ø"BkHk­ÖAk½j‘½C°æ“šïÞ¿W7¼¶Ø‹¨æ§AÞï4ªM¼6¢âåÛc2rY„zûšÖ?º2V*k¾u?ËÝÂ8Mg›—Éà£ï)Þ·ãøÈ[´¶Ñvw@Í›øMðn·¾ìn#Ý›¸X»[$q·Nk/ÞUY[ç†u~@fÞß~‚SÙ¼X
!±ªQ~F²#aýÎ`·í¯;esº‘‰J³ÎkJÕ€êêË(vÃ$âêÎÐe¥[È€¼º³kFY,ÎdÄeAÒ›T¹½gß~>{kYø"±B_ó°U.ç¬ÒŽÙ¬Šá~ý!VJä—\¯¯Þ¿5‡•ÇpÿôàKsÀ!î»ëó¬ä5þð¶6;8m ³e:à'Ü‰¼ÖÒ!Í?².Šçbë31u·F[Z[[ÛkÓäiO×Ö¦ÈMdfä©Üðh{•.Œ¢­ßªË[\½"‡‡ç&b££ƒÏæû¢ÙAyÇ2Éôº ÉáªéTËÆôf‰Ôá,¿µú(…ˆQ©S]0–brR@D6@U­oH@Œ–ÝÁÂHÕ¡!W1£›ÚbPÓöcúí6­Q®–‰NäÛè]¨~ýØD>›84±9Z®õµlsJTøÂšï.â¹ö"µs§þqòð8o"­«ž¨®ãz*2Zõ8“À=É}ÔåÚàC×èq÷y§èC6äðùcq fõjãV˜}¬†K•OüÏCÖ0.–®ª¡Ö._äÚ2Uk³Só@$¶S"^7lB¢š½ÐdçÃZ±C¶±Z™Oj[=#H¶ˆj!éjˆjÝ'Õ_M±’Õ~³Z°¶«ñ£ŽŸÀj„w”
)\sÒ!T›Ÿß¯h,4#}œySF#"¸Jþ9›™]*ÂÚž¸vãÌâ¹…E>†e3c/þS–4ƒÆ2ý±il
´%
Yø-ÚfnLáÈ­E`ªáÜÔ—ÈMï»sñâço^_8sæíï`iØ{ô(¡5%ŽôM ­Aj,„R!µäjÃmÙ¼È#E_8Ýf°6‡àç ·}°3m]©³d*ÜÄlÊÆÒä¶%9Ñ”Ž7×64tT…“áVè.ßwêÊ×üémÜúÞ•‹‚µ>­D`oèç=dfN¶áo)q6Ò|[Jk*P³À[ÿSn'Lw“¼vüÄ¨¦_÷(õ»)î€bœuuhì±Qøt•1¤y«‹g‹„†”F°Ã8hñL1Ì{_œ–§†p’”RK0!ÆÍ.¤º\Ñ¶“èøúÏþóruT²#&i>` Mf‹~øjÃöïÇ.äè£GÛû ŒöŠWŒvÄe;J¸aµ8Kº£ë‘fŒv^Jš3t|Ë¥:ŠÊ”æ(	íZší‹Ïˆ¯¾ ÏÐÏØ…Ò>þýÇ³áèÂ[PÛn~óÙgœùêÒG¯¾ýÖÒõD‘?ÃòÉbn&·eÊÚU&Ånpm¾š&ïòƒ! i”ÄTÛGF`mÆIk˜B²ížªŸênDg3°"R°645„u~vßPw4>}ý@R*ZVªÕ.Î“lhúÙ2†ÐÌÉlÅ…Õ`N;33®þzÊªÙ¦\Û5ƒ55l"bµ8ÏúH{{-ÑÑPåó™¹>úKé~HQÛå¶C%#ü~¤¬ÝÖ¼¢µÒ’5ÇQ'GïÝ³[‹íÇ?=þÓ=Hk€‡c5ÁZ€p ÷zÔ¥
óC$'\ Šæ"f4"Xã…6‹RVs7vW˜÷[ÕÚ¶ÁËaMGP¡ù†P¡¶GÌÖz[ÞÚw·WÈTëè¥¬h“¤Ô¶1¿d­˜éÑÙÞâ¾óÝûá%Œù†~mÄCy˜ ­ëb…™_rêÿ·MWóÂóégqñ»’ºµ¢òÆà`Í+UÓ(Ù\ãµåòÂØ±‘$ÌHo;°áDùãíÊe«§­yukË•5`Ì‰”¸AróÍ ý>k%¢šF_Ws;ò1X[XïPÍ6ÅÀäÑ!ƒ!>šQµ°8cO°Æ~½€­š+nTµqõ„G˜Þ»Ñu++AlV®f°æk­j²7Ö^;Ks˜·.\øýŽ×<`óôµCÿÒ†Ù>hy›o9`a›ä5šþ%w½ÿ~¾fr®Žæ3¯ñ,þó¬(aókáÞì°|\×yâÃ-áÑÚÓ-ëÓ±UÅiEÓšn
’¡;"2 !;25=]ÛÑÞU!­%‰ÓF-Gç—ø´^nT¯GË˜a’y¹ÁßBV´¥9>È¤A‰.¹“4RËyt=O†w·§úú›QE™²ÑÜæÂ¾	üð']¸”QˆzÆIÓÀX,:sð^õV«V B¡Ð£ÖÙ…X6421‘W;ì&I§#ÀÝÄáÉ<4•Çg%•v¬9êÙÄsÔ¾ù°æ*ÖJ“ …jNX[€ÕÎŸ½òÏ#Ön{¢¯®§ µÉ‘Ž!Oç“Y$<,N(ÉÇÜ²«XSè’4µ‘!ü/u„À×X03HÇlLñ¯÷Ôh*Tç—É$§ÆŸ§Ï>§ÜZ–¥¥Å¥w\–ûèÃ«²RXó¬Fœ%¤Ë€´A°æŠØÖº‹¡Z÷›ÝT«™°æhí
7QÚ@ÍXmµ`m5VãÇÿÕK„dÐí=ÂÑëŒYBþ³üÕÞÄ¼¹'ŒÕØ«©ÑÞãf:23{ã3ÂÃ5Ñùl$^+ 7Ø5³lc#îEtXÃ|i­­>Œ) þÆ­å'&°øoì›¼õù;û®ówáü¢z®?»(õÅ:·Q•Ø‡ŽÖ^¯ÓU6,!~$ÞÏÞ3hL–ÌÔ’Ó˜h#ÝžþkµÍºþGcÌt`ƒÎâ°[´^)±H†	Ži&¥„¢9a*Ëe£Ë[Ç25o.¹ñÍ7g|Š¬æ´5Gk€ËóVG7¡‰·¨­}gîV1»úA¿jÓŽÊI§–©ûµ¯¿¸fhÚå4c´ÒG·UØhû§•Ä´hžFUšëÎRF<ÚÛ01÷IG“ˆ††F0%‘êÈLø«ûžxÞ©h‡ìc3tdØÏlÅ§ê¿ˆ±á³s—1ñÂGà™ü‰¥óç½iÎq_ ÌŠŽÆç'C5Œ&¢IA#Ø¦)Ø~LèX»ÀÉ¾¹Á¹èk‰¾ýñÅ#æ/òo0eÍô?lð%WØ}ô±Ç®V6n¨~w¾åw­úrhö:æ_Pbm,‡Ôˆn\¥`‚:®¥E6d••g#ØÖ=tË<ú»§vå®Ó¯Z|%<ƒçÌ…K4†ë$_>63?%LCXû“=î('}L¥|y+¶Zc”®†>·sRÕª=«©Õºš÷5ÄãË9,G®£ÛakÈæ­dM~Öö-*æ~çb{Æý%M±½>kÔX,¬ý?öÎþ'®óÌûÏ¿a#„ˆ"ÿb¡1
”Ñ„EŽÌÂ¼u°0Ï`
Î•Ó™8v&ø¸µÇíŒ‡$»1¸N¢	"‰Mi½¢;»nKlâ*š]ZÖ²›HéÒ•v·‘žÏ÷ºçp<!ñóüúD\sÎ}^f†sŸÏù^×÷ê ¹q@ô(í±©ZÃ;ß©\.0öX>JÐh RÔh³VáXMc!Ò`öúFeíkY<é„5=<óþz3€ô`mŸ>ƒra480£FM2Ú¥?iPã>hm:%üÒÝÑÒÒá+kŒ©½yÜ5Ä†×¼THžfdãhM°sÂ?E<8B~ßá(°FÛÕsŸóšd;ŽÕþÚXuƒ”`fŒŽ¥wÃæôª¶6½šé›y=2ž+‡Ö**äÄIT ðUì8·„¤¿ÚÖ­ØkEá+k'®¹Fk~°Ï9·x#él¦0]Í¢Ñ×Õd1h »È «Œ‰ÎØë'‹CÓéŽMi„‰nuæm´½š(°ƒØ9/ûâêÇü6k~"¤Ù÷_ÇÎÿÈõG®ÏÏ¿þætßäñŸ‹Ð.]¾|Ù6Å}ÍkSÜ0ûÁÂ£7Ô,ÜŸo6Š³B¡h¦ÒBÐaïã*Øü7Z#±¡¬Ï"M®á°“ä]´UÐ{S;w'›=åm±ÞhD–ýUí­ÝUÛ:Z£é!Š¢[Z½éÎî¶Zf¶t¬µ!‹È ³7šoî¢w3?@&Þµ4SJžiÄÀ9Â#}êvmiíÄ°«5˜Œ?´14J²<žaT„“@VWsoXk¬õg£J‘<ƒÑb8œŒdÊž‘Ö€µös/¡¬íì…âú¥šEÂ¤Ù÷¬|ˆi‘¿Q¾G&ÈÓ[k…ð„5?	ÒÙöû°¶9MŸMÆ¹D8ã²/ë%ñ{¹QîG³¢¶Q*×¸ i*U¾]ÒXT7›*µ“¨G¾83OJZ3#Èík¦«iÖsÖ`5<±ÔfèîÝÉiþu.Ô!¬Áš‚£U:“xÆ'8é±”æÁZeÖü¨gñV¬f´f¬VŒjsÆjëæ"ë±ß9‘É€6þk^@k¿ùÍáUv­ÉeÄ¶Ì¢¦¬éxba2Ï5µŸ
i.#c¿˜Èf™‡RJO†JKãx|$JJY91§P¿¸§FÒÚZ,63‚ùˆ£RE6<›ÿŒº5LFVòø0Îþ;v%*36’ã­õö²@ÀþgNy°¦ÕHéäP“_ª‰«uS"…ÜÔ e&ŒbÓßÎÓÝ=]ãXêcG	ÀÑ¼•ŒŽEt]-µ
”5ìHÒÑ¦Dïá+ÃæVþgeqnvŠê)ñÚÝ·­ñ‰>ªnM´æ`Í7
Ó¬íÃ˜å<ÒrÍ;£Þªnÿ{V!lYÞ¯o5.ü½Ó<ïõFó44,Ofž—afW¯KxÄ|tN‹¤óÇ“¹—Ñ@–J(í‰'žýƒÏ™#2yžN‘ú¡õ*2¿t+.¡™­^×Í˜ŠÆB Òø:ššX›mJšéGoXK4¯Qš'¦±èÒ‰_¢Ë· 0ÜCà4#4ÎØðàc‘[´{·n“ yïšt·[—nÝúê·oÏÍ]øåÝŸ™!¤ŸûûUX3{Ú»!þÓìø«jÊB ZC¨ë@—[Å`¿Ž"¢¯´¤lsßD71CÐV ËÈ1îP¦¬‘F˜¶²´Ôn<E¬¾Ì·Hƒ„ÆÀ1ŽÍê‘Ñ<#-ô$1¼pÖÓ ´±ùyÛ¥‚Ÿÿ?ÿµøÈ„Èöæ*z¾«‘àS>­)ãÑ1ßtôõØ½ª¬ùV(7ÿsÑÚqÖŠ”µ#ªùNžÜµpõj…øèQ„5ÌE^–o¿üòžÀ	¤@.kì.Ó|Lç<e^c_ôp¶&~ÍÚ¤5_Yã‹ø2ë³¦T# ¢FkOŠ#ÉÏÜ×¡±µw@n?­uìÝÇµ<…%XÛ3|¿u¿—éW¬ôÖ 4¡Z1¬Ak"žú
:\s¤¸Š%ä9FôD™|ìø¶6k~Íš_±6í¹Œ¬i_w[UÖ¼;„XXÖý-‹Ö„Î-¯ºÿä}d>Ò»(ÔgÍ¿'¶=ü<H;ä<¡×xÊÚZ+6(ÅD5ƒ56¬mdÀc¤	xlDh¸e"Ômlb
Q[¯#ä „ÖÂµt pÓK¥€W‡t¶f~¢¡f~çN_Y+Šç~zÝ9÷Ÿ80??¹8?ñÚ[?¿ûÖôâ¥[—>²y¼fÀæ×¯}[6VêP¦¸òÌHË¥EB¾OT±þôÓ‘ÔÀÇ'G«³Þ Ë(óùä*øE¾ØŠÚ°yeÏ-ôTcê0§©ýmÝ´‡yf¨uSO{OÊ:‘Éð³â5Û¶ÅÒC*ŸÆ±·Èò‡š×cÕ¶!â™Á4I±L.ÕÜ¶mˆ¶X<Õ‰ŒSäÖNý[ª±7šÍÎp»“²r±ÓDB×ÙP.Üçç²‘H"™éêhëÖÚÛƒÙþ—²	Jär#f™%‘†Žª)lä¥3#\ðögOW©d5Æ3ñ~â7wuWOtv‡ÃaìÈ")¼Ñ¶”S™,fµ5Â°&Ò6imzúµ†0°uFê,†Å5ý2ïç#1frº|Ñosü6m†Õ,’kÕ¯ÑºR².ãA.1âMôÄÆ[ähm»Íš5ÿ9VƒÖÞe†#ò­î~41qãî²b3ZÛì	k;­y«³‡dPpF;ev’E«ŸýHÔéj<$¬)¨W»(V;+R»2W 5ß[äŸ×»a¯Çz|'<FÉ½_ÉjŽ}`ûÍÙ‰óc¿ùÍ‚•®)Rpö¬–j M´æÁv#Œe³×¤qHZ[Y¹}Z[<Én2Ð…„øë	‚ú³áocfqÝ]«Ná²ß<ž–öRò;Xu~qñPúð"F%òäæóo¿q÷îÊ:ü§§eÆþRÖKÕšå¢XBúyÖÄU+­½ST=ww·&"ÁÆ¶êËÌH´ÀK9šh¦h,ŒDh¹Ò½¡µX£€®…@q£œšê¶t$~è?ï^9´ûWKKs‡ŽžÏ_¾t[¬!Vƒ!õ‘<\S!]Œ˜Íˆ>„ƒ5/ö{Ýs©; eŠ‚Ì¦=»«µ@kPÙš8mÃÚàûúiŽ@šœ÷]W¢–	ø“ñ˜ÄÕŠÙ®ûŒ4­ÜŽ½Õ{;­íþAí«ç<CÐù'šŠf]Š”]œf×Ëoº6¤Ö Í‘õ]n5MÖŽ.¦¦Þ&ÙÑœWÍ÷£~†{.ÓñÞmc5…g°š`íšikŽåò·y¹žÃñ…·.]~û×¿¾¶¸È‡AZSüø§\a	7=KHNqÝuØ<1?QYW]À,PZŸ)!›Ûo??°V
µ‘Êl
g›KP¿ˆ±­çv§Æú†ÍŸ?…&HÕ«Õ‘éZ]»nkì³±­PEG¬jŽ-Û~Õ°r½6vøÎŸ‰¿~=8wrQM‹sŒ9R³A ¦­oÕÏàmÐå<ªs´¦ðZuÖd/²VY¤‰Õ¼.kE¸¶pô0bþ"/ÿ+ñ½}ß§÷´× ZÉˆËç®‚k;~„#á¹­WUÄ¥’5‡k¬&õ½ŽDæ‘¯ëjÅÊaÊš>®ë³Æ·r¬æÁšÂ4?`íû`ÚÞäµ–¶ò¶]`ÚäÀŽ=OîÙ¢NÙËËm"¹aPÍÑš˜L¼æèì ;´ïáhE°FJ!Z–ÑØ&ëG˜H?ä2Ÿzd½qúÁi^ÔÖrš“Ø¦ýª5ž$‹kúÍ±qççÜ¹‡`iS80›ŠIÐ¬G\÷§Aº¦Ø¬ÅÊ Îžp@ç”µM’ÖLGcØÄbö"[F;hjh`ˆ0 ÅÔw{,!uÑŽe 7¨¤MÊg%#ÃñR‚ìènb^ºÚ|AXc)¢µ¿w¬&õEý¢þ‰½µôîädþòåSºEä›—YÄk*—&‚¾áˆ—	hù[zØî÷â·Ââ?ß¹s‡I6nåÍda­{"¯øùJÝƒÍfŒO 4Ô2?qž*eöj7µ×¶´0¯õvÁg´ó¬méhzæäà 9UÄZ¶lâ–äøQk›q%/FÒ½ÉÞÁGäD:EëÓdlˆ¯ÇìŸ0^"	…é³vµÜñì…“ø+¢t1£d«ã‘îpn$¤»éo
ÖrÑT2Ø9JµøÒëêTˆr%“ô²Î…xïÀq8Çì	Ñº2’Ô’BÀæfD2]ÝMY¾Ï¨šk«°æ³šÁšTµ_üjîl$ËtS#RïÓ¯„J»‚É&J+åÐØP­«™Ü2·×ißÚ®á@nHºv9ÌýÍ\äïýÄî^j"T¤¥X¯™_.1ëÝ¸»PóÊ¯˜‘v™<DêŒÍ„l2ÓöÂ1šÂReéo[ƒ5ÅÚ>k«ÂÚfgÉ@½ÚÅ³«µ9¿\Ç:«­Çzüÿï1b´ö™«[3iMíÖ<Z;ëÁÚ„²¸½¨ñ
q7ú…VÒ°§¯ý›ÁÚÒÊÊä"°¶4Fn]*I~J0˜"7<Éßô`ãHŠä ý‡ÃÖTe4”•ÚÓÀZS˜™‚çÞ×´‘ô¿çW––¦¦ µüçyüòß(hk7<pàŒX0ÒŒš9ÎZÁj RAWc.0lùï¿ËF£t¡	Ó%´66ÓÛ;0“¶¶µ4w’{‘Äìª£+JOî6\q?îRÄZÈËäS53—1Ee}4¹õèá+ÓW7·Ÿÿ³ùÊ_–Và5ëþíÑšÔ>>Ðv (É˜ËÈ@ñ„mJÙ3ƒû½JqÐÅ/Ç‘/tá#Ú7ð?nq`¼¯è%LFséFp	fÏdÃrQdÀOÂc¿ËÓÌÄ4ñÌ]h+ISº Âê»X$¡ª;IŽ.~nñ–ÂJ³øÊšWcóÆ’MpË`€F®ãÌý¸÷%rì=ÀŒ0Hs[Aš@“ÒfxvK–"×V®±ÏÂz{q	¸sºïrëÖå©×òüOñ`V#ÐÖHVûÝu~,ÜGðž§&­²¡¬’«=2ë¬»„C5%:™ÌÖ°Y´¬55vwÃcdESaIkˆdGU²&CMÛzCk±›`[ì° L­ÌÌF„­yC:w‹“Ü³gÌOÛkÆ^;;<¼0–ªy¬öñ_ÿú	6¢µW9?0«=åÂÜûÅalÇh~f$b[Úë¸æ?áØÍƒ5†ß#¬ùþ"ÅÖýž¨¶VY{zÍ-J6|ôÑ'aµ—Ÿ¤>L#Î7ÃðP•?'Â
0¥rñB€aË™…ønkŠÖŽøÊšÑqœ‡uYs}ÖÄ"¬íáÛ‰=ìïBCcWž",m›¶ÈÈÇþ]{·ìÛGžàž]=Ë˜B>¹Ï¥Aš®¦ÁWÖüš5¼¡\HŒ nÉ:ßb+ô8æø Ñ9ý”Ð™45Žçþo°6{_OlKyôM£C5¤V0‹t5k^¬y{bG;z¿œ¾b™QÈvÕuY{ü"/½¸ÖŠipæûö)kE5k„5ƒ3?’A{êm°&+È0Y
Ñšs|…¡µ²š¤³ç)XÓÕnM°ÆY	&¤.óÀÚ¬E(Y³X#­qh°6ÿú[àÚk×Ì¿¾8=±xér~n.LC’÷¶bÃßoÄÛ*¯œ}aŒÀÓßâtqû4eªóO÷ÕÕJcþ–|:÷ÄÈL<›™‰WJ¨ûv`#x×üKOc3×)`mK{Õ'Ÿµp‹o3e­­ª­/ÉŽòö!ðnÿ`G{sm­æ6²)]‹õvÖRÞœî8Éü„3d,hNEkÙ7sHØ,¶×Æ"€iÄUØ6“&m&šÆã*CïÞÔ&ƒX “‰lª•9’kJÄûsŒ)jÐ*»íän¡ìó«X“à©8–¥Šj#zÛò@‰d¡‘Ì@º3A–d{	/•(–õaÍw)N‚t¤öK`í£éÙ+YÕ?NX
Y$äQ¦FÎ¼ólNW!#ýÏÔav\¶Y¹#£œËÑ›}	oÔ±cÉ€µ
àî&á`í½÷^tNO“õœvØîÎ$W¸/NN0Q¹0¹@a¿àLZ½µM4óHm§ÇjŽÑ<jSÚ¤FGj,ìß¯®é	kžeÿù1W¯¶Êjjžk ¦uÝ\d=Öã;”éuÆ¬YéšÊÖˆ	B½¥ÐÖÌXÄå?²Ïª?gÛkÌ×ˆÝÊÊÉ%»Z^™œ^š˜\ùõ¯ï&³8<Åƒaî…3#Õ#(:L¹qe£sw+Pº±‘ä–@(Jù2ùêÑD”–kÀZšFkÃŸ_þim6ÏmÎÏÿ¸94²«(&Íë?-€#Ë)/°Ú)§«Ù¨b3"¦Ñ‘µk¤Ø<Ü^[›Vs²)ˆ®ÆçË…"±Ú¶–.¼FTƒÝìNtY4·wRñ†çÉøIÚ¼ÄRc:G±`4qþ/+ÀÚÛ+‹³wí¿ÕNX+äf¾³ÔŽxŠb<MÚÅÍsmåÞ¯®‘OÛjl&Bó¢¹(l3VUh¶Sùéy0jaâ;5ŠŽ&­`e%å3ý@ZLòÒ;4H{ÿÜ$üÉO3L“˜&@câ;‚“£Yp¯ÿ Fãñ[? !f(/@´w	OD#ÞÐlåzgE2‹â¾&ÖÿÅVýÑdüâÀ`>š±ÏÊžq›×!]Oñ[†Ü¦à·§®Úñ¸´¸‚°Æ…×¥ÙÉ¹i5Ýþ—©†Kü„f‹"ZCX#ðCáŠXÛ¬.€PcB‚šëÄ[g6áÀZŸÖ¾@0u€£­AËƒì›¦¶Ô2çæÍÝ‡îfÿ%fä7Ö¢­í·6³H¬úuì‘’ó¨WSé›R ‡Gï«½ºVX{U¬vúÏ¾óÇñZQ»M{lI¬ò[cj¬«I¶Õàv	äÀB(#òüq)kÅ¬f°æç@*8"|Zûà0ï¬û}ô{Û€:—	Õx8=g‡¬—U@U¾¼ŒW.(@vœ'†ŒøÊšßÛ–µÊšg0B€kôYs«©`eo/ŸBœ¦„G}¿kåk<Ý±üPO[yùrùòûWk…4HášC3Ï¶_«ì }eMƒ©j6NšL¨šµ>áKÒz|«š›-oÕ„jô§~0¬kŽÕØ)öZ­á0âÁšÞ¿Ö 2¾ÿðÁšô=3])×ð«å[ÁËú¯ÃÚëk² Y<QÍÕ<eí[jÖˆbiMk+«°N‚Î¸¿ac(„9X#÷±KF–n&eMÍ2ä4RŸê`7Ñ\€S€›^ZÇ ³óPÔc;«ùEknô`íµi.éÏ–L¾õúkÏNæ/M]Ù:veöÂ­K²®Ý‚Õ ¶â¶·>°°Y›ÏYÅ^!¾,fÚššoÚÎ'¨kÏ¿zz4óêÇ ±ÅsI1°Ãáu_¦áÍâ53¤ÚØ6È¾F¸L°6ÔÒÞA§Ïýû‡š{ÚâÈr¬jÁË_šiŽ	P,]Ë×||²kˆ7B¯Wµ´l“‡°¡/)ÕmÑrlûÓt?ëÞSUË—ŒäB6„ƒLßéqà+›Lµ–Wl
PJ£‰ÃL3á¦œf&uTKµ÷ŽâåOƒÜÄ<"9ØHeã™QìXNé™™^êÔÜnT—Ïƒ‰²ÙäuÝlŒ	kÅI¾®¦p˜½x%*Å{F½ÖsîÒc$¢åÌ	%·ýÅ)èà‰xI]?F#ˆ|Y~ÕLXÃ.¬¦ß­\ÎÁšU¬9aíYõª1s‘ƒ¯XÍZ¬--é"eáÆ+dj j*óŒD 5Û­Y—ùV#:¨ùxVkÞÈêÕ«iQ¹ÚE/R¨æ‹jBµuV[õø%Br+FŽ‚5F×qMqž|è>gá_#X“Çˆ1[]h33‹uÌvÒ´¶¸òo\…ß½»81qeí£Éš‰T¢‘ÙÒ’p¨a¿%:˜ðSàÖLD":%K6&©]îŠÐå,%¥Æ–Ÿ|¾¸”¾’¿0õÙçÈkoÿ²@k ÂÁL—¸Œ(ñð¥ê†¬pÄÁÚ*«YŠ`º—ÛqrìjBàkmOã §&aŠŒŠê$¶Zü‹ÓÍ===Ý¸÷óýÓ]Ô­uSÁÎÞt	£¶9ní^ú¯•_ÅãMççþ3¿ríËÿYš],Éø¤à		ðž¥f:Éd›9­¹Û¢vG”…`øæØï‡0í¤ÍGhT¡ù9Žê²OÆjÇ,˜‘ÔÂÚMhYn2¿8Ó÷wRÛŽóð‹ Ó¬šƒ6ã²Ý`öQf‡rÿÖ`´ƒ\œ8?GFÊóŠCè^m¶ŽJÿ@D[¤I?óêÑdrá#IŽ~8H“¶rÉ,ø	jÏ„cXc×)k,òç¿vïÖeƒ5@–]sV#pÛ¥[\XM­\¾ÅW‘[ù©Ë—¦êk>\øP?£µßýôïþNƒÖŒÕ€µë×ÈÏøô‘ó}•›KK¸”y€«:<è”ÜªSþ
ù½øENà&b+•3Üü/Ý¼yã†Ž¥­G:ÊÕäú¸ûè¡áAoŒ!Ê¦cÍãœ]•ÖXeâoûÆpv@ª¤Õ«I—»8?ñ/§È–‚È,¾žI$´vçô;i“Éb@ZŒ=˜pz›_¦æ^c§|X;ô¸ç0âBâÝ¯,Èo5âº–#ÅÒñÁnÚ»í2XƒŽX±ƒ¥íÝ']M–Œ[0ƒ$#PM²É…$ðªá™Ù%r¤öÌ8Ézù5kÅ#…G‘²v\‹¥A²[Ê¥`PÜ³¿GIeÚÁþ‘ØµƒO-Âi{÷â0‚cÿÞž«ï¿µ‚nÑï?~ôè^ˆîT5V`˜‹7-ûÑ'5?ò>7HW±ÖçÕ~a2B¡Z…‰‹;ÔÿÛBI‘†5³ƒd!<&#|q-«Ÿ)f[UÖ,írÕdDn	ÖÞ¯Pk5`V„›yÈ{ÄÌ!ëû ¬} ó«ÖVÃNxÁ+LY{ ©Ý·ë…¤µ ’Z8ø![‘l.€¿iâµ°QXCØìE$¢ÑZÅªÓ 8Y´ÖÁj%ú«Kšt²µºÛÖ…yeAjX[´Æ±ªmO,„N|p±ôJ~¶¯ôÊb>Ÿ?[R6vvñÂ…ül^âÚ¥Ë.\&Šôµ¢†Ù¾áˆ/°Ýg¹ÖsÄC6IkìÝDVƒ±^=õéiªI_$2÷áƒß7)l®ùŠ~L'ŠA¯˜Ui£œ1˜lh?¸ÖÜÚN7F m0Ö\Å«áµÁŽØøIžÚ6Iã i7OvÕâÞ?ÞÜllMÌŒoŸa#i-ÝVï­ífZ¡º3=£Y4ÐD¯ ªÀ©êf*MFÕ]w@Õ/­³5,Y-ØÈXeèvÉ§\kŠwv§²”Uè(Õ5ÙQÁ\Œ—Õ(ŒP'O× `æÎ)]. Üõ[>NJ!!ÏÁÚ·9Aš°æþ‡-Î^ã—%¤ý¼WŠ¹Qµ÷/º.ýïÖhÄ¥í[6Äÿ<t7.qÕ\ $}ï?ÎgÙœÙ‹8‘ÇVÛa“câ
Ö^ –Ì7~þí^ŒÖTˆæšV5Zt`[v¢qÄöþåùû^.¤þ•›¤t5Píü'¬	Õx8TÓƒeÝr=Öã»ÓlVócrÒhÍÁ´6a¬¦†kÒÒXÌ›ð]Vd¥¥f‡6‡&—®Ý[ùõ½éÍÓKw§§&â‰¦R`­tsY	õjÜàÊ¡¬)¿?M £IVSP¿–J“ð@S´`ã†(©üü³?ÝØ†{3sùÅEr!—¦ jÄ(»qã·$Bž8R0õ Qóg)ŽY¬áÊÓß¤CÅº»#‚µH8 |ŽlùTSwm,WM3èÕÚM©õÐ@º½Ç+t“Î`gWo4šnn,	7SÑ®tW3)‘	úZýçÝÅ+‘ÔÙéß:Ÿ}¼½¢îßÊT÷h.à=öDM¨ZýÛßiþš³±šF&[v´–ÉÎh¿Ð³z¼ÐExöÈ fûŠ¥ÛðƒLv£üìd¾8¦Z42EDhL!Ö2kÆÝ@nîÜùØ‹xñ±_|Œ´%;þäïíç}È—ëC›§_—[W.d¢jz~úíÑäòÆû_}åÉhÄÒ’(M]¬‘ÑÐÐ~ý%”æÚ¢ù!9L„fâY1Ö42YyF‡Èvïškwm¯æêéÞíü%9rÖN‹Ý8¤D++.«ò“Ónå§ç¦/¬ÌR2[¿@5hM?t†¶fœfÊšx&EY“t8¿¹”ßP
aÊPÑêJÅlefcPBµÚÂDM™|-´ÙÜ+ÛXª&§}[õY©Dêp†®k»o¦á/e9’Å(«ýÃé465±˜`Íä4Fk¬&VsçH­<+]Nul}"§á…‰OïX€d¾¶ö±§«ñà<¬öü;33j¶V`µ§ª¬­šùßô6m”)ÉbÃð°m¤Ë›‡_¨8¡ÊÏ‚Tí~Ró¥®nîzò{Oî{òQbŸŠÄÄM»ØªÏéç”X®æf’xd×_à´',ýÕRZ°&öòkÖŠs µñ¥5¯fÍË‚ü¹Áš)k|SüM¶Tìå{wì•wý^åeîÅÅ“6r¸žÜ'H^SN*Þ2yõ}šV_Å|äÐªÁˆB<¦­“Ö4°2ø¼fñ’3ƒ$(_ÛŠ#ä²ºÊY}”$\c-GlüRÖ>*x‹ˆÎÖ†)n¼€ç‹Ò ‘Ê±šØÕo]†–Áµré{Ë[Èår4¿rtµ)kj®ÏÚ~É£§¬­é³æÛ÷?Ö64”µ&'­ÂXÍ»iMØd	Ý°ê›U—fŽþFlMæ5(Ñ«ÊÖJx=¤q­oÞƒ5Âó‘ÈV€µ#NÌc;Ñ79YZÊÜ2;5[¿uîÊ\žÝYîôÜº0¥¤Hil¾¼F¬m˜]ì	hMLHó½×šD¾j°vXS2õkŸ(>~õù‰#Oð6•ÙP¥lÖ|Û€ÍB´VlÉªÁË«*À:ÙþAlªöÇ0Ýï®j"¤§>S…ŸÈPšŽØãCƒU¨dl•âAåZíËÏaèvv·¦Æ¼qZf#«ñšªžp„DÇ†Ê]½©T/½©#xøSÕ]Õœ #F¢Ý-mQKTL4â>BîckPšÌE"NpP†Á"éjq¬†çX ”ƒºTî”F4ú<¬Rö~*y'7"Q,á{É¬	kßP°æ«jÓªÃ?›—”„äYÚ=Lø3Êc£QæOd42"í‚JëÍ€Œ Ý±B%~] .w]M=m˜Q±©í¦²{µöqW©m&Ç\ HY£dí…|Ö<,cqÈÆ9–…Ã9?rÌxpÊ;¤‰ç(—.uÚ¹ë¯F
Ö&-Ò }Z[7‚\õøî$BÁÚ$²ÑÖÄkž#¤ýQ€ÕªÉztv"Ïö“¤ÂQ¡ãµ»yT*›X¼;9¹8YvR«žÀe/-)%øKƒ°Õ´I.™%g"«%0xrî{IôµÔÌLg;
W¢)Ú‹ãÍ?ýiüäçŸ'z#cç?Ï3®ä§¸oõ.™áwß¼ñ[“$›üÎ2!A«Ê²$@B¸ÆãôÐÉÓ±t/Nýñj¦Š†Æ(¹ÁÆæX*;Â4‘è~ø¡Dz€4D#-:ƒMÁ]]¸DFhº¶{²@ˆþ+ ÀFAvúÐð¹È¡ÅÛ‹çÑ%û.þ+K‹y`Mi´&Ö¡”Žt–ê\’üÃS½]š¬}\ó™íëŸñ">ŠUÛ1‚f¦Ÿáµ?ÓÕŸ)Ì-D=hD¼)]˜ñþ±L†”&Ä Âf‹Ëd4Ú£©9šÿÀ-ÈçLGƒÑ0Ýàæ‡…Ò-Ëv|Ú íÌyÇ½\Gß2„”|~T§¢™aˆ(Í<1í¡)þçK†‚[ÈíkŠ{«ˆf:#[­,2rtéŒzí_¸|ïÂ„6Î^“Ð†r6Ey	hæd8Î¬pš«©|5­¾t6–_µ1ææé+seÛOüÇ|Xó!ÆýôYS"¤sÚl ŽÌ£¬ñ“Ï×”êú>Ø4ÅF&–d a£¢´’&kÈj_2"…cjw*|ôhêèn`,HlûU³¦Fi"2±T³7‡D¤«a.b ‡œÆ­eHâ-‚¯?®’ì}úé©;§`±Óàš…ŸY(XƒÕ€¹çÅì˜÷oÛæèË7pi¦ˆÅ<}-mIœ¶*5ç+âvÕž2DY{Å	kk•58Í‹b{Å‰›ª½¬ôGŒìù>ÂŒ²·ü}Š½êÄL,ÃGà‹	;ïƒ6E\Ví^L^žu?Ëjø-±‹ÍûÕ´:º^5í—¾¶WzZÍ®+v ÷u´µíz’†ØkÜØØm«¨èAXÃö®Y¦G¶”5{8Fsq…ñ5iÍ±š†×/öÙO¬Éjd¹þµ­8BV,£­Ñÿ›Ÿb£VOÆŒ†µi0˜K‚dýÈSÕüª5OYÓcZ°&*³ÑÅVk³¶L#òú«V©ª-£ B¦;,¶Ð®{y«i€
vÖ(kfÝo?Rá¡š×iø ~y$QLk–	é„­…‰ì£¨áÃ*Ï¶’Pu£3fEQßsôçöIµ¥à‡6ò²4¦ojPÈd#´f¬6?¿YUkÅ°†kÿs^¤ú¬aùô‡'æKKÎÎÍÍæëÇò¸üÎ‚kWæ¦.°Ég~ùÚýá5Øæç}a¬(#ÒØ,³].¾']ß\"µ‡éHö±šºÑGf²TaUªuo¤ä?_ªSÞûÚÛ¾y•R!­y‘N œüD*ÚPí`<ÙûüIš‰ò;_¥Sƒ/3!w´T½üòÐÉ¿Ò;jlÜ‹7ÔÒ™é%'²ª–z³`¢§g€gƒ)![Œ@í=‘æÖÆHº;hŸ´µ5ˆÓ"úÖ‰Õ¹lS¤‚ÏÂÙd&•ÍI©ÝÂ#pWj‹:q%.B~cA®9sìL653
©áèÏë>=ö/ÇŽe­IL#y¥¼Êjž°F¤×»¸`MsÿG¿›œž‰êjú­SÚÁ¬ˆ°‰Ðä5C§´Û\@Ý„¦M•Ùõ›HueeV¤õÀ#TÅ;]Ín|š¤±šM’Óâ4Â¶:íw_y3´Wj +gâB{3Ï ROyG¸ò5Ö|z»Ï]¤Á‰kÀ¤F˜´†i¿¡Á)k÷“Fÿk=Öc=¾#‰Ð1m…k“Ä×´5`­¾mMukÀVH3(°V&kÈÄ5!ÝEª£%HhbG.ÔˆÉÉ:3S‰—8Vk$Ã¥ŒSY3ÎM%øÓßTFSµd 'A>’‘-pZm©#¢­‡_9Žþ|ÊnnrßŠÉ’[Xæàü–á¬ýX3ZûB´&Rs´FÒ  §«+Éd0’êîR²e°»;N
Fo7&Æu3ùÅhÑš‰ê¦nWs•jºïKîf6Žý_”7HcÙÞÝ½û÷ùòög‡O¿ýåíü?Ï2Á/)5óÝwöÅt¿5çÁÿýÜcÏ¾SÈÒÖÓæêâT˜µ2š‚º …ég6-›CÈLA,”“c&êâØjæ¾ªÐrØYär¦Ÿ¨ëßþÄÛ·¿ø,CÈt|LÎŽR”ž#T¼Ž¦š4]³(8a‰÷Ä›Jwüê·Ìx«žûZ]àrEª£§£)ÉÑKuÔ`Îû@Côº…ˆ­Ð Èº&(óªÑ 24vuJ'Y¯MÝº–_Q5Ij0)"»K“}³S‹ùÛÀq)?·È7¢Ðd*?uavllvÇF‚‘­’8Ôl¾.,“°öS•üÎ9Œü˜CÁšXíÄü‚lÂúÒi½Õ“hY	¿­euj
oÖ.îäñž'°) œ¾	õ@KIË€¥Cm»·n®?G±vèOuu‰ˆî­±*„F.ÆuÊ~› Ödi¬ö'Ò §­nÍ§5 ·‘	Ëñkñ§OGcUô=Ã\$¬¶M.‘b5ç
é–´pÍÑ‹U©Ù‘>‡H–|{‘µ5kÞ¢#/¬íþWQÚ£ÀÌ¶·Ð{Ï.BNm Ë–ÏA;ö|¿byG…ÊÔd–\_ë{\!X®Y¬ñíW°Y[³¦éq\}Ö\ìÁTDI˜ê‚½§CÊÚŽ}O’õØ¶—O£OÅ‘'M¤i|Á.ßºŸEá9õ±ie×[01\sÖý&kÑ^šÎØËW_“ÉjÝ²ýä$napcßõ3`,NùÊšL²šGj
Ø<Jãi½ÔWÖÄ¿X»Šhyµ\ÿ­+Ä®ì,ï`DS©j–µ	ªõ],ê‹}?©­M‚Ôîýekž²öÊØò·:÷?¬ÅÛåá°&aMÁn ‰m˜þÊ<0â‡Ú,Ò9ýh€]*Ð˜|Ôv­	T¬Ah¯“Û‰kÀÚÖ
ºý°}X#h„?}¢“Éz®tKÏçó³³‹Shlgõ7}vŽà`UáóšË¯óG”i¼fÀ¶6“ÑyŽLGÆØ^e y°}òû3Ù™G€¸Ó™ì{O$G“z£ Ým<©NBg˜O,¾AaSne!|Xëþø“gÔ³ÓüF¤Ÿ±èË›ÛÛ{vmSmÛ¶m/¿ŒÉHEÇ¶Áª*¤µ¡L<ØÝ1ˆ6K6þìQÁ Ž ç-Œ”Õ±4ÝÜ\Þ¸EÑÔÚ{‚ÁD*}71’D8«ÞjYl9h/Ê2øÜ&=–ä(;5ƒ’vLÝ¯Í¼Ÿl›‘3/õ§2§@µ)‰ÉìÈ§<Í61™"«¥€µQÖÖ$Aú¬&X3{‘~126¹€@KPÆ\	òY#µ@B¨§j½,”MŽ¦üÈ‡Ü^¾qá¢ÛÐÖÎÈSÊÊ
%Aªù¨ÖžöXÍkß¸ñÂ2­¾ñZj|¸³Ò±UÉjì•™¿Î°W6³Wzþöõ~”8ˆ£ÁZŸÕ¬jÈj*\¡^¸Ï°ŸaÕÖc=¾[­±‘ÓÔX‹ò Ü"ZSÔ—U?ÛïZ®¹^kRÖt«XsíöBÓ×™\KuWIW½t›—è
º1‘”fÁš!±J›¢ñ@¼OÆ.J1;»º„E	næ¥OþõÏ'ÓÃg§Î'>ç^'—äXCâWñKK<üêg?ûêøŒ¤­½H’ß™/üº5ÇkÏÿ·ì‘Yk „ÕfÒ]­ÔKÈÕÀšª±•s±hœnØ©l	}šXf'q¦¬Ú‰`œ/¯mooîú}~å/ÿ~³öðâ—_Þ^¼2û—ˆåÁŒ`Í<!úSÒÑ¤%7Ç«¸tAñõj4/x¡(Í	hjYMû8%82Ÿ)#nv†£ë^…rÔ;¿Ó¯ìxd41Ž!ï½G²ãà4ñ¥ÐWŒdGÂ®V®P(ÛñujÒ¢§SA¶#ÌùÖ›oÁj^c4Ï2dÕÓ‘U€Æª4ÇûÊÐ4ºðúU[({ÑhL…jž´&*³“^8?G^Ê°rëöÝÛ·§\ÿ-²’@¶Ë·o/-ÎN.^Éß¾}“—æÊÊæò*1¡^k«úÙW”oËb´öcÊÕÈwúðÇPlœ¹&k9 Ž®VS'½XÍ°eS¨4X«QgAÊ+¡5î7,ì,äA^d5^ëÓª~hÈk©Ã‡HàÝI`ihí(5ktÃ¼¿½Y]Ýo?¶!¶éÙ‰‰Crš’æ‰‰O§PÖx¨pÍÙŒèa[Åi{RÏKc1‡fOm{T¬æ‚:¶ØªÿM¨Œ(r€´Ù®ƒ5£µ_­É‚ôaÍ…oÜï³Ó‘£ÿúò÷è±¶o}ûï¬í{¿|s…ìhÛ"d¡´¥@^Ó(ç:ÇèX­ k}œTæXm´æëj>®×Wx´VÏÛ[Ú¡0½}{~Ä·ïèÁìñGûög| `M=×vÑ™»¨Ü…¶ÖÁk©o£/…n-ç}ë~¤3§­yåjÝüÇ¯fíl}=ÉœOßVÄ¬å=^/ƒ|¼T„l*ÙVe‚I?>"ÈúÍ°æ„5mÅfÅ ¢ù '`3X¦B"dŠ¯ÖÃˆ‚4¹¼h‡œH5é®ï{œDÓ¢`»ÆRÊš×»¨hÍÓÕ|emlÓƒ`Máö‹B‚jš‹&Yl°z´0h
l|¸©_>¨2!|üíœõYC\ël”¤VÞ0–#L†›Ç”¿lóZ;ÈUeí:¬ÆºPVùáB_)†Bjv_RR?çò Eic“³l×÷ÍòÈZf›­QýÚš¶¢
¶b`3ÎÒ<ÐËŸöG¨:¯k±¹Íþ“SŒbÎ½7òHœ·Ák2™yo”JYâ»WÂVlÖÀŽ°Ÿ‹“û!5U±¡O>$÷1k¡š­¥§goíÐÀàËÿ8¬í-oÝÔ68—äL6jÖþ˜’ôŽD´ÌL7Ž[‰`c{[OË®Ú4³a¬»§­UõÝ‰Ö`ë–žÖîMpë'Ç1Íj’"‘†ûœñH¡Í–\ˆ¡éá‡ã#T¼¡^½ÓŸÍ¤»ÐÎFS–H¶‹Å±þ8öÎ™xcw=ÙØÇD²Zª»óÿ°wþ?QÞi¿ÿž‘T&¦á !H:ÈdÊ›Z`˜…fdQ
69]¦Ö:KQ[Û<`ôh¿ð´âèî“î´B¿€‚}ÜÐ®ÖñKÏ.¥È“†ç¥ËÚ]Ûãšíº›œ×ûúÌÍí<´=ççÞ3sß÷Ì °nÏýºß×õ¾"ÔHúÆÚò"Hc5ÖF’Ý´Ç!õo(÷Q#qÅ£•”å•«’L‘NºË¥x}Ç¾ŽLØµà‰Ê”cûþA’²Â”ÍWËt¬k^ä/­‡Û·U_¬-Âi¯Yäš°+`K‡ˆ• ˆcßxCŽá¸›øCÙÒUocµT~&²Ý+‚D6aÛŠ¯¶¢ýxÛÖÒ¿Cl,ò«´uM[SÈÈr´ÖÁ@`- €r ¥GòÉÂ®óZUn¤>Y)fÌÓ‡UeG¹å†¨LïTb]kjŽ´…r«Zê«  é‹š~&’jknÕêXbŠé™üâ‹Ñ¯º'Ç€µQÖÀ†> $þ)6R™¾‘híå?ÿÑhÍtZƒÕ,3±‡|É	Æ[kJŠƒÍ•!š$B•­-uu›zzôs[[iþjmj
ÆÛªµR¾<Be$ëÓêûZ"‰X]Ñ‘R¦¯íþêÎõéÒšÝ“ Êâçs³tjiÞšRF o:6)#…ù\±kR·µÁ,bó‹èBsjsŠ0ýM""‹Aœ!6ýUý¬Çú¸’È½ãeÔQ–_ÆbR¸ñÔ/N%ÏŠÓƒ‡2íg/¼ô•ýè…HˆÌ	Š(Me4¤=÷>zî7÷V;¾…\í=kCüJGÕ:"‹±Ç×ß)ùgìˆYRˆe7¨¹RF#¸ÙLÙ£?äz)«ß`kTÚØÜâÌøœÙgc”9rº4ÆyÔ—ÇÒŸ§qÜ®çFðÔ¨X:¦©ù$ÉÖ$\Û#gÿ½küÞéƒµ3´¦©Þ¿°Œþ@°¬D—4µrúÇÚªdÈ’²ÜvJ…h	Ø¬25€#VÞ> µ½‰‰¸Khqr ÷¢— ‡(uô¥÷MÊ|D7§oÎëÛ@}ÚL“ÙéÒÔG]C×¡5tÈ+„¦‰ÖÌVsïÈW“ŽÁ4Ûj ‹2îÚÓ>«içR!ýÑjŠÔìW²½¼¾€Š“ïoí19LCÚ£,ZÛËl5\µÄä¿‚,ò©°Úv")ˆ$ÝB“Ø`@€• ˆ´•DžyVñ"¾³–e¬}¿³F¾ˆS
7"1Xs”h©ýp¥‡êV“™%Ó­¶®öÆ{ïÝ E‘›Õâæønû:`íUÔ$ÏDãh)ÒOî÷ª ?ù•¢×kï_¼ÿá3cd!’;	°áqqtQ‚Ûø5
N^,ø!gMŽÙ’}æHÍ—zÕxˆåÜcüw™HO?ÌØq~ÈÏå i¸&­¹jH˜±€/9­UüÀœ5‘Øi`Í9kÙÖÚéL×r]k‚µÎî7WM°–1R…›æ”#X£R“Ö‚8h8i9Dš«&óxËãËM#8’pM¬·ÐHðNGÅˆ¸`Ó%j!ÊJ«=êÃú=§…¹ˆnU)˜J	¹0ynlf’süt²ðE× Ù(ŒFûš9l<Câµ¬€H?!ùÀ¶,$²ç W$ÍRW²ä±Ú—_r@=$§Ž³Ã–¿[Ösœ%´bó{ØÐR›_²±lßì“<Vû›¹oE›wíìŠ5>O2Éæíë×áŠ¿‚Ö×ÔmÙ^è•ù–˜ˆdÙ‘¢jü²ªÐëß––æÊ65äl©MLT3»°vKeÛD¬*[ußšM›¶Ê¢!‘ŸØÚz`S'l°Ÿç}Ž Ô–Èq–ú®2¾Ü¹)ãg“æ_CK}4ºÉ&=Ö£A?-Í1%7Ç©ðß¬5¬l‹4‚–`-»Ò°&}ðÖxúÝ}üx¬×ÜðÆ£ÀZGISœìï ÷„
Ì0è¯ÐipF9*"i‘TIP~jûÑš“®ŒÂj^$W9HÄš	§q	™UòL•LÃ\Èã/Dh¶“A™W ‰ô>[nž³fÀæÉäádÌWªq3k šóÕ<RC«ýËÊ€µ­èGVù»qpÍk^S~?Ä–D2ÖDk)BRªµ4kM¡™8èMÇÀk¦Š½óuºÌg’‘Y!{ÁU•Í‘Ö*Þ—ú˜3Ix&Vk^U$"V’ŠMµ5ÇˆÊç4wº+1½@GÁçXY‚µ1ÊSfGç ¶ã“XNVf5ÞÚKG¡µ?BkÒ’±ö¿¯=ô÷Ã?tœY kcÐšaŒE "¼Ÿ0Ê¶—ïúú¨_o®ãUŒ3jÛ¨ÆŒF««£Õu-±X+ç•±h¢……‹óïÒÒéiŠÿ·ÞùæöÜäÌíË¾}û›3omñ·¬éW™+¡h_kº¨zð +«¯ÃkùVZl­c4J<âjB[R'¹ÇÔ‰R¬U‚AZÐÐFðì±wbƒ…F¦#ãÑ^bÅâ¥¥ñ¯,^xhWæJ]ÿÿ|üq£4¤„rÑ™ LG~õj“ö;Ñ˜/-Mºœe qlŒö¿¾6ì’qæyfªe<oÙmª M³çÒ>#Í1ËU3¬;ÏqÖfÙœO'Ó©qÙgˆ©iŸýin$527{y&93“l§	ax|t.™?B|[2EžÈxæ-wdç_ÌDSm§£µqÖ\£šÂ ÈA›0ZÛ¯Ž5T8ÌµVµ©	ÖÔƒY¦bÈ2J{q‹­µÔ¥?J©”QI©	œ´8Ä†Ã¦‘ØÓ`4°EéUK8>ë1ŒÛÚMºÿMÅB²ÇU3sî6ƒ5ËˆÄ»;ñ‘hÍáÚ!‡k‡—€Íäûj×d¬}t­km½©ÛE.õ­Í›«¶7SÿÈ‡ÕÏïhiÔÚŸÕ™–¥A.Ÿˆ-à¦íØðŸ@!¶›)„ÖvlGDøc\iºÚ#7ØÂè1 ¢Â
ñÄš"-v#`DÎÚ2Zãîn>­=žÞÏÍ`MÐ%ôÚÖh°&#M#6Ÿ;ãeqPwã)Û^‰ô'ÀJ¬5òþ\¤¶n ö’µÆœ5Ï[s=knãæ¬)	X«¸x£¢ýbÁu–rI|ÿš†m©ŒÄ`°ÑÁ³-—`mRø«qËŽ‚<Í.s÷!}gÍKì÷¶ß¿†¿è5kŠJð_G¤D^”É‡¡YA‡Ý÷ÃšË‚<íÑšäí<Tó³û0òÃ°&ÝÈ®\mÓ°s¨€”‚ªˆÄP,¶ZàV,N+×ÃAË;ŠW!ëWãß¬•Hêa£×Šõ5‚5‰€Ö˜æÃšcµ³dõôiò**0ØèZ½0™L‚d£siþLÒ¸Æºs~tn”O¢1Æ jÙ³ßYf°ùÛòÈ¦ã,=^¥òx]O§¯µñfC$„D:×~úñÄÄkÃO>á‘ßòô]Îk;ï»¿ZÓ÷ÊjeÛµžzË^bH^yðùç\ÿ¼J˜Ù¼²«¨º±¦®5Þû)å’4°•Q›Ïšk†Z»z”òfgUeksmmu,Q]»½&£&V¥|ÜJBû¨‹I0ò¦²ª³¾³|·lKm‹¿î‹Ç«B”‚—7uN$zãmñ®>ÖkþjCK¨!Î—UVVö+$²'fÃÖb	h­©³‰‚I‚ü#MànœkbµïIíŸ1X{ç-.ì%	ná»0¾O!ýüGÇŸ‹0Ò»_|Ö.¦Ô‘£}ƒ<(xTŒIgU!WŸËûñ–I¹]ÎX;•e¬küÌWÁ4ÎÅñE–ËÅa±åàYÀÃ²=V²n>Â!¸šášŽ¼6ÉùpYóÖÄjÜª¥ÎXähÍµ9Z§±]aµ­èÇW	«1@R°f´Æã‚Š!ÍZ»J-¤zYÖ€4T\ìÍ[³$—	i…(%6L\S›Ê µ¤@2šÔ‚úey1î²ž„‘ææP.]*PŒJÎú‰X-¢Õ1‚©»fn£ÙÑÑt|f–å~ÈXkÊðœSòh:6Þ¼&Xsr¶Úßþ‡ñÓøŽm;ÆjJkbM0[‹­µK~ƒÌÄÖZ¶ÔU·)æŸÅ(ÊWW’NY·eÍ}-CCÕQˆòg™=Ã
V´û›o¿YøÃío¿½<Æ/Ç¯¤Œ‘·^ý§ðQ^\pôè©S/—³´RÇØ|ð ÍN ZuÆJs”†`4K	ì”Ê4éZ(Ëg¡¦ý)$„ ödîsŸ±@ø .DºÂ1ÎU8!EžyÍ¤ùh®ÜÑL4¯+Í!š«º·ì}e:Ÿy½hþh´%‰Ç¾ÎÆ3¬4L15 Ù3ÁÚ·6—x
¬!^6ËoÆ…êË¼ÇŸAÎ\#pä²ÛfR)ÎštMûViücÉÜÉsT%*F*’ãã#„¸%óSãéŠ¼òH…v‰×Øê,¬$oŠ„iÏ‹*•u°ö‚æ¬±Ð"½%ž›
¬ÊŸš
kRS8—PÐ­,@ÕUn¾ÂçJž˜[A3[¡Kê×0t§Ø	²—65Xmw|7 Æ¡,6&a“á¿w~÷{Ñy=˜G.°@9"~Ud*‰C‡ 6mNx´FßÚu+„<ìáâÈÜ!ÏWû•®¨q!M¬V*JËèä^ç®‰Ï<gm«d‡nëÂ)ß÷« —%÷»ûŸÕ|£+9­p‘ÿ|Š:Cu­=¸aƒæcI|>,ÄÞÅ)æ½÷ÈÏ!	
]"‡kô¬ùiÜ=ùÖû%y¤f¬æÅ¬a‘ÁjèçÛï' _‚_À'"2F¶ Ž›×¯ßyB'Ûö‚G~º£q Üo¨æpÍkXÃZsj¯y5ÜÕ³¦ÿÀÚ:’.ùé7"[i—lœð•‰Ù¦yü@d†Ä^ó5îÞN²×]ºˆÁ‚Ð´å.‰…-tää‹ ÛõÊI¢7XXæ=ñå÷§AªgÍáÚ=œ¦›0b¾÷ÿ'XË°ÚjNÊ}æ<@n¿¢úë«@´UUd†ã‚Ð0ŸxÛLÚx´xõª f±!æl`Â	àd¨Ùjˆ6÷BÊ e­ùe/ jH[ƒ5³Ö.µO=³gJyyT@^¸°.7ø~*pa$NÎ;‡Y?><26:32	¬ñXS_,.¿—ç²f°©`ûî’H°“<ÁAc~!# …h_sÎâ’Œ˜Í¢BÈÒ§Íl¶¦ðï¢ï 6·ØBw8Ë`¬ÕÔ±sýpK°†4=ÛöÏï°=øà+ˆ¯ä¤fÓ¦Ê½mGl@o°a£E-™¤:Û¢úÇj·o!dj«nÉA•!DKwM¬²*tß}¡>è§­¦zB	üý‰æHSgyq?pÖ“ÀjëìÃ?k«ìƒ“"Íåƒƒ*A¡¿òH0Ž¯ÏzŒs«oè©ÇãYœ·!@w9Ó¥‹,oXSf?Ý‡òÕÞáßkC¼g"1ÑVê9~Ê.0wF`¾¸iÇ:úTª²ï ùjÇ5®I.[¼¼¸$Ü$HtÎÉ‘ƒDAR™Åj,ö\ïTôk'+¨ù,¾vz¸Œó¡×†]Fˆ9hÚä<V,øvZÀƒížú™ˆÛp×Q…¦a;e†a£7Û£5¡ÚÊ€µ­èG™ßoÎÚç~,äºàh-)Áj(Ãj%a`Í¹>ˆX?=ÿ_õÕ¢·ÎzõWªZQ¨ªœ&cµèŠi¨¥¹…Ïur<ÈÕ§ÌÐª{z*%Áq+}8[æc±
ßæ~KdwÛÈö¶Í6ƒ*h[sÞÚ³œE’Ë­!Ï[;x­ýZC‘!u¢aš±kä¢`$6Ä´Ï(ÝhviŠÐ.GêUNk]X„ÉñkÙ„íV×B;ué–­C1ÀJ‡¥µ›wßºû—…[ß~ûö-z¨æÆ(”·ö–ûÜfÀê§ÊÊë;÷Y×¸FXH>ZL3E»N8Øç >!½ë‰5ßššU7Êâ4„sç¥4j×fóÑ~-#ÍåT©!@“~óëß˜–Á´EÍä&Xëfš¥Í)ãœa§9‘BlH†Ë´SpàåX­Ž	i\zîïÝüÈ}ºØÈÂæTù'€ÌÑa!3é™ó<M§ÇÎÒó?2w~.=w~l&™žÇ^ÅÈÿÕ‰G^Ðªøet9_Mœ†ìÕp`
h69g€¬‰ÙxðŽÓLìáÂ³Ïìfáç©ÔŠ}P],nmÝˆ©,M‘k0DK!ñno•„øeqŒ´ùj‚¶½¼´51¿µ.6¸á©Éº²ö´$µŽ)«„ä…kÝÙúXC®oÁe¢5tØ=@5ßW¬;q¢§¨¨hýæ¨c³RóÕ¦í™ñ™/?	rÞÁšÔ­»ë¡[ø¥S6¬ùS±³‚û}zJ–nÛ¶á•;ùùŽœú¯=¸­ ÉÒ’×² .$×ÃiÉ·¦)¾ŸtÑ~Pó« ³5Äæ^gmIFj(%6´­5Ò¦Æ/À”{(™®æ`í)‚"åöfün®ZÒ¼62ñø%ÉŒð‡¬ùzÎÝm.¶ØÍ+‚dƒŒØF:I¯tå‡&O'IÍ·~:8‰gšŽý}ivS…#·ì¼þ¬œßXw°f7;29r£3M±ôíkúÿCÞ¦Ê2íýlX[Ö³æ•Aú´&ñÜÛ½=këþï¨†´ÍŠ­0ÈHÍ‚û	É©ºB¸pþ4yk,,\U^N$ejWãí2sÖ„låFn¨ðÌ³¬Ý“ÝÏG¥t€¦]~§M1²#/7˜ßž§v5>9ÞO•«';|PÙäÜØÌ8”6>	¢é)×•pÙø rqþRV ?2^“¾ØÀ,Â3˜EAd¼–0W¬ëžšH´Ö»{÷€•MaSQdŸ*þ–Ûñƒˆ¥Nì7”ÅkÜ¥`¬fößÍ—†´­çNp?`ÆÈµX]mT#×hcc™“¬œ„Yû
‘Œ6©w®5J@Ií–ºVõT7×…r*+«0½*·ÄP™Éñ*rHêš{Ô #Ø‘©iÇ)Mé¡±©ybBC¯mê5ëí ˆDùc±ÈŽúF}}\E‹ÇïÅ†$@Æ«ø"d•¤Z0›|cí»Ö>˜ÖÆ8kxíôéIÂjhü#¤_ÖZ¿&»}§F™tvŸ…µÖQÌ´ ;d l'€ÖßOÏšA6a»¹Ž5Õ¬y¬¦”;¡ý‹¯ë„¨Ð«~~ÐKK’ç¦	ÏLù&^^ªŽI:ò”5fMPW`	R¼S•ÎXdÒ²»39ióÕtÿ|eÀÚŠVôcÌïÿ||XCK1#§¡µd’».ßK‡;®^íèpÎ£ñ°Ã3ÜÊlâcÖÂtÇ¥Îúl4ZÔð/\$qS<ÒÜš³ª!Öœ[>ÑÖÔÔ“Ñ©ªÒ…°!>Ú»÷F£Ýwæ#m=èÞýùW¿ýíû­óÊ„œýgV£òò=Päq åÀ•ßÿš«#C¬&uõkÒá7×™1Ö¬TG*ãÕ†ŽE‚qæ~RÏÑÜÆ2P•bÅ¡þ‘÷*ƒ¯V™Ã$íÒ¡®-Félë:B3[Ñö‚…[ßÜùrá/w¾úæë»ssw‘¼5ãG¿oíèÆ2j?,M
±@Cl^É#r«
öwÐ…†Ò|BsòÚ.a€FÄáÎF|@cjbÁâa²^4óÑ~É€4îo±’’ªv”'éQš[c\[šŒ4Ar;¿?+Zƒ·œ¾•„eÚó¢èÌYf–ûhÔ¥÷rÚ;[-“û³b™ÎÙm¾9–Û9Þülî¶¶óéTz÷”xGµ£ŽPç8>™lŸœKò8jo'h”¥L+›¡	ª¸<Ž¨qè¶ÃgM{Õ\z?ò`í ÎšzÚÀÚý{ ¶)†¬åYx1ƒÕòõ]V•¡sijØZÕ.Mµç{¾Ú0Î%‘N<9¹u+üƒ@'×¨ÒQPœ¬ÅDtÞÊ#ÙX¤j S—.	Ö¼ÙkJƒô”:<Z»î‡B~™A5Ž„o¼Áû†jÐÝ‰þ"´4“Šd¬YÛ=¤6¯7y­Ù¡ç©ñ±é÷øå=Îš˜(CJÂ4Ý³iÍJnÆR£r;¼óÔSv¡þÁOmÄØ	ÉÑ1`¹5p"ƒ¨üu0š›Ý,j¬™³¶,¹Ïw:k‚¹{5&x=kfžm'rXVS£f´‚5÷ë— —Î¢û·¯)`úÛvâý¶ýt‡*$Õ¹Æ[ëŸêöYÍ¯wt™à~Qší³œµ_[9§ºïØœTžˆ|5»;Áj¢BºõTy£ë5³Í¼4w;í³K uó5¯Rvžã¶ð49¾aö¢U_bmžY­Up‰ÃHÍrgMÆ[³Ï²'bëîŒ5møÂçx,‡µåñ"FkÖ©æ6ÜsÐj+‡¬
jV†ž€oõœOw”éq«uW¯béè0Xób.a­²ÒÂ7gE‘ùí¿ÂYó›Ö¬!ÑšL¶'5>8÷ì.ÙéR{nÞ0°¶.i1²Á@8UÁwM%)|ûœ|zÔ8  ÛõLLã±GÆjl²ýýŠHC6¿…Í6³ŒQ"Êˆ<„ ,`ÙŽÔØ~ÌíË‘ä—ïÂtÅ)Ûÿð¡~¾QY¹Ö¿nP‹W·‘)9gÍ2G0ØvEëŠ>ÍYG˜„˜H±¶”’?"Zcðh´TÀV´¾±®†|ÙçÖ°:ã1 ®q“¢!ÉRuÖWÖÅâqZêZ›¬¬]]Í›*+kcŠÈ"¹cPŒUÀZ¢çXGg+ØD$	Ð°Åˆ}ƒ0QqxP(åÂí`±¬4ü·ž‰xe¬ÊE|X3cmYä;hÍÁj_½Ÿ¼z«¬_gxkj~{ùhGÿ1¥Pò-4t[éhx}¯†Ã˜hÅÐš"•©pÉ¯Wm$®qÔLì²üÿ’Úo×=5»‡U”hûÇ¬©/$ßðŠƒóÉò¸iN.¹ßzÕLvìf²±El³9ÍT¡G&^Äœ5`Mçf9‚5§´ŒµV[ÑŠ~´mkÐZ:í±.Ûˆï­ÑÄ:…½0|bx¸G¡CE ZÆQã)W¬¬òžl#jÉøDlÃâtEƒj(¤Þ –ñã=Í±Ðª`u KgS[ŸŽ¹¹qÂììšØúôÐ‘‰n}¶sÍ÷î¯>oéþ|lŒ6ƒ5]Æ²JH|£_ÿú™=W¼ø3Ñ-ÁFkÆk]CÀšn,€ÑÞÒ–Ö‰	XMU—:bzLySCb¨®²a"êŒ×WRÌQ¢Õ­9ÔDV7×ÓùÞ
ÙyýHØã‚åPuMÍÖ;³ß\ßõ×/oþõÎÝ¯ïÞºsëmk‹X{fÏüÿãè…¤¬ô+§òø–Rì»iÆiVîhaŽLËðÓ£’×uÐ„v‰áÕÏÐ„æÉŠ¥Z¿‘„hL6à/g©ÜñiBóƒCŒÑ$kJ30sÅŽ‚µÙ)t£ýivlö²á—‹ÑÖÁšsÌÏï\1(,Öøb¶<ÁV=?s?³¾ŒÎµsªiLÃe”©{ÿòídòGHHñÈÈp2=£“3#%
öHÂãã)Ö»dŠq¨M
z¼bÊ+ÌÝø¿ß,au;k°v Ó´ö3¹’.¸_E’Ï^Ú½v¶$ˆr.k¸½°]ß\s›¦kæ®9Ts°¦»hÍUWY˜ ½êóÂq +	Ð‘_µU0ÄÓøÖ§÷r(6>“Z
ïçÖRSW¯fpíš
ÙIÞp5±òj Oãë	í‡ÍP”ûzå‹L+¾ë=3±Û¶u¬ÆO–Ìí“¦µO¾»e]qMkË“ûQR-j¯<¸í‘m?þt›%øS
	&yõä R©¬â.°v ‰ j¨bcüJÙŽNäæùjÙ=kË½5ç«¹4H‡@PÛD2?¸FÌ	£Þ 9^ÛÖXDš?p¶M¯A²¹€?À!þ[éf`MÒ8l÷Èš´&bóHÍí^Õf‘ÝˆÃq§¢;4ù¨Fí#a”ü-¨aÏýžßï¬Yq£ñšÒD<=9TcÇ†79þŽ2Hå
I{Z­4Èâ]H¦¼Ø®±÷ó:Øöý=kòÍ–æ¬¯e[k~"äs?ä¬h¾¬ñ°0­€Í ­ÊVIî+rÕê*E†ØØçæ;6ê¹ÂE62bÕlÇ½<¨§Á¼ŠöaPí˜t);ÒˆÍE÷ëíö\†±çÎ+ÒùòüŠuúì2¬‘h-ÀŒ–Øñdñð$ÿ8Õ‘ÌŒ)mÄ5ÓúÛòŠHg°ùÀöh°õCžÃ&[ÌÏTâŠ"!5ôåµkt©Îßd˜Ö³70Ø&Šë?t¸g0ü®ß×§éaÇí;¹o…–*"-)›NúTÔÖ¶eHN™jl·“xÈ÷RfÒÚ¬,Hü6j¥Än+%w¤”ÀÙç{‡ª:ûð4›¹2ÔÒ@iÞRÙÔJ«›æáD›É
“º†k×Ô6VS>)ÄêëÇ¸Êä”?Ök|i[åêµ45Q?I¾?Õ1µ·MÐ¡«(¡$E’™kM‘°¶vë“æ_âôŠ ³'¬!æÑ¯6ÙjªZ_S|0ØWòcßËe›õqQ—ëN	•q!A#|-§1§^&RXkêÜÇ/.TCF2ÖÊ
‰íw¬†¼Ô~du)Ÿœ>=uzœ2Èv¥²”ÜHmÆc^ŸZÖxîâDô2âX
ØÞHMòh­0×ò 5XÍå‹d‚ “™ Hä®µ;omr…ÕV´¢m~¿¢ kÜM#þll>~2ç¬™ùØk<tIÓ6ûL² â(I	“5Ï½‰Zõ`¨µÙê óhf”…U‰À°i:éšAÈ,î§)!ÂHì#»Žð‘¾sçüDb÷üÐÎù–UÅº8G&ä‡³ÌÆÖT&.+‹¼gö<ùäÏlà—ñŽykêYÃYc§–¬EUTÁ«ø‘93m]¬A¥mM¡P"º%Ä€iÍfe=àâZ!•2ÑÖÖ©Ì‰“…ÅåÆh]]ôu´Ó`íÖü®›¹µpáíoïÞ¾þå_€5~Ÿ;ã:×Öö?ù$“½Ž>¦èå²ŽS8~Õ¢mò8r57í'-‹Ðž4YŽ#zvÿ3o>ƒÈs|	Ðÿæ íU	Ç;Ê¨‚Ñ,5„?ÉÍ°ÆJ“üÜÙ%ÇaÎ^†·A!£ç .ÉFsv™#7µŸÍ7Lãwô:¸|û²´ÙÛcçµKÏY	‘F0hÖµúõqÑéñTEzŒz£™ñp€WÎ‰eä2c¡ºÄòGæÆ­ºO….šoÙÅ^Š1@¥c6wìÁÚp`ãž³ÜÂ’³8hÀœÕù‚•DÑºö(´fa‘{¦Îì““ÏBP-¯<¨K	Z>ÿ©—…U­+X“£V’§×¬e¨­œ(xtupOý{A#¯½[Štÿ„›„½7¯Åª5Õ¬[ÖšMW.yæ2ŠÖ²hÍ…Bâ&NÓ!ðF·š‡j"5þH<3VÙ¦Iƒ,**&uÄ÷Õ<	Ö¦3ÆòÜ5ý$út/ƒ5àÈëYó6ÙYRŠ¤¬´ŸnÛ ü~[Û`°¶Mä$Ñªu±À&3ß¿£òÇvK›oWt<Ø[ÑN›ï¬¡lgÍÄ>ÛXC–Iâp­BLXàj±ˆ“mkÆm«/âòépófÒüQO›{‡¨Ê‚íÂ¹5{ŸnÜáœ5»[±£n–É'"5ÏWCkmÎqMkh8W’ÔÅB
Téd['jóã¿ÏY÷ºÖ|gÍkÈÛz5Þœµ¥ŠL3â7áÁØ5ô–!´v¥½¨kïáåyrÖü„³Ðÿˆ²›Ö¼)kºYÏÚòèþe-k<ÌP¤ik¬ÆÎTi@¶R!±ÉÈ„ÄFƒÏŒÓÌPc©ÀbŸ…s³òÜ`™ìµ\^¶JHíõO8PBˆääÒE–`íŠ¢q¥Kj…Ã—³æKŸ$«@7T‘T¿ZšÚÿpXIþ%iRŒÒ3“$ûÓÔ°ùØ²Í¯ˆÌ.‰|y™#r
_3™#¶˜UíK†Yo˜TóüÆÍ>º	«ÝÄa“d±M¾{O3œÕV†øNúV2Ø\+œl¬}lù%½B¶ÀÚ6Ÿr­ÑßöüëÊ¡ìjnVþ#£°uµÁk„ˆÔ±P&&Hnì®
ÅÖond”¶VÉhé–\£â“£1š´‹Âr÷mª­­I´M´©;lâplu=pÖÖÔÇÖÒšæPÎêûêjbÄò÷UYÎ9#m‘8P–ˆjÒj^ZC?xÔÇXñ	Ü¹Áã}qXÅ³‹ ³Ö-¢‰æLìNLÀ‚šŠu‚ÀY‡–ãÊêbä¶¢OÌR»Æ|µŽ¾Îgh4'àXÔŽ”±&X“°ÜÊ6úk>«9_MËÿ'%§?´F>yõtaž(â¨Ì=s1þN™g&-s€|XÓ>«éná"YIÖÒÛo´¦ûŠ¯¶¢ýˆÛÖþÅ±Ú¸—â¬¥k.e$©PÈkX%Åá<k®Ÿ ds°VÈFçÖº`T¬¸ŒA…A–Ck‚µÊ*–ßªÉ]ƒñžV¢}CåáªVz5³š~Þ~¥üFbEG £f&­Íï^øÃ|ï®…oæ¢[wk™”f?œÕ‡#Ò(0J!Ñ3,Á/¼ðÒê‘á­î=üwÑÚážøÄZÑZXÃ±‹5+Ï¿9j‹m$øý:©RìÝI`dÉÇ,k‰¶»¢­]‰æÞ]¯ÓJ·óõ¿±¸mi¹¹p}×ó»¿¹½0ëî·wïÜ¼~ëßà¿°À©›hmþUwG‰l<U¢°ý?ë¬‡"û—Dà4¯3-›Ò¬	-Sß¡)iŸGãÈ†«üà²"GD/ˆ†„j‹ Úâ¢_üEfBÚ˜ÉFXÓ•Fþ¾Õ;fW:ÚÁŸ29ú6ºZ¯žQwkéÁ“ÙÛpÚ¬¦»¹Ñ¦¡Ö—5ÿD£IíB$c\Œ6JØÚÌ¹Ïˆö<7:H^HUPåXØ.OMžûl.raÎ²Ñ2–±š‘²p ÀÚ\&GÍšk®à±5lÓ†u’³½¼ü³W.½(Xã,B(5úP1é£?¹"òI²"‡§Þ”O0ÐHl~J±ÔþØcSZ£yhdÑÍò†e²9Vc¯(Höåô¢Af	ü³î8V²~@ö™l¶æfã/’ÛÛÝ½uzºy/‡*„„ÊÌZà1m/!QÎÚ/ŒÖüRHg®!c66×Õ­æ×@¾|âê©«ƒEë‹¢O'žŽ*`D°6=í†b'|T›.Óœ8ØjâÀ%DÎ#‚,_Ëî—–’ûõð5ù\ž’@ÑzèHÃÖˆ…„Õh`Û¬	Ó*V@"$%>°„µ¨Yd»ÑšSÒæ¬-ëY«±Éž‹­MO®p3k¤ô+}² b×°Ö)Ì„Èäæ1ÛÑ|¶MÐV@Õæ6Í€{ºqIh&Îšh-»eÍ-Cl°šk÷d÷¿…³f	#ëTÓyåq’wÓE
UÈ! ä±ÙrX3cÍC5yhÙcÖlk»ñìž5ÈdËÝ±šc·“kn k6dMCî°Æ+Ð[r+5{ä»œ5örÖ\Âˆm¯ñ–pí{œ5´Õ¸‰Ò*sr´Ó–65O¢4`m%‘8¤Aká¤)ØAŽ°‡­‘­œyØ˜oÈ¨M ¦0ÿ²rÂ‚ÊJ¨…\æ¬ñpà…+ViîZ‰£æçIŸÕ‚ö´‚“àôûú4Ñ7N¥
ÓcsÉuô³]hOðŸÍdùû‰#Ë€Í#¶å-l/½ôÐcŸ°:FF=£ã*óÃ“ÔÁæáÚaüt,¶ë_BYn.%’7ÿõÝâ’%^#%ôó‚‡ÛÖÆ„~žÃÆ nÉF¹¹’H›À=ÔË·â@%’YúäÇ½=1±Úü±+q´šÚÿêF`Í²¿zrVoª]¿y3Wƒj¢ô²©¾ªk)EÁ#Û9RMzWÑP,´zKm)8§öïDWo¢5XYIJdßq`Mo¨*ç--ê+l`žœ&ëëØ¾k=ÄA×5GŽ<Z½¼ïxD-g}369X‹Ç¨aMÁ"ÌÍ}0Ã•çnhMSðÖpÖâƒrÒøûfNÀËk^ä¾kû:$`Z;¥DÈAšÕþ¡J˜@kš±Æ‹a~äcG-µ_)ÃjXó¦aÓDÏ%Q¼µ’©Óí\MlÿdŠÿºžië(Ì{ðšÕô`ãÞ5žC^ ˆ¶ÚÛ‘ÛJ÷Æö'´&Xsr°¶Âj+ZÑ=d$MT>)þÜ8«¹BÈ‘«WÅkf­uè„µÓZ#5ë((aÏÃM´õÔ&>Zp}?+)IËªµ2,#9·‰"ÈxðÖ)7«¨‚¨l¨/wöP¹@yuÑó»ž/Å†þ:}a`¾wçÂìí…­_ÍÑ% Ç¹Y	ƒ
Qû•ÑÚs,‡W^ø	´F%¤Ëq°F¤kß~CëèjŠ”õvEB!"ùkjIÀŠP¢¹–èÉò¾ž¶..1F{]Èßz›‹ÄmÍ¡–ÔöÙªÝü²æ¾–×Ñú§ŽìºÝ¾s}aF…w8›³BÈýO^!*ž”Êß Ëò_æjp?;ë(“
e¨ù˜æi8h{TÝ(¹ÓQ•6fI\f£ÑØŠÎà3í|Í-–'zýFgg5!ÍàGK°6:zÙ m–›¥†xÝf¶1|ÓûÜ¨½½ÅþëÛscd<ÎÞž5¦Ã1Æk@¦Úø…É‘Š£Ÿ»ü§ÉŠÔEED;žÇT›ISa”LŽ2×zd.W‘
H©ÔÌXº"È©PÐ¨êÝÚ.Ê8 k˜¹¯ÃQ¶¤-ÕCr·éIÃS%gd/ÒÑxEe|„¾¼`3±_ ëzRÁÚ~ª 9jo/T¶H.ä'—`¦—é:{a™®ß¼µÌÎåö§H‚œß;ÐÍ,ì­Ž¶èX;¹PS“Úîu'õbJ,¶•a{ãªœÆLôøÊ`ô;×v+rêìUpÍ§5¯sí#µ	¿[Íb O á]q‘Æ`;E‹¨ƒœÞê•Aª]M¤6­ûµÚxE_ã™kÝ¯ý·ïuÖ0’Üo7ijËöÍ$+‚hÜ±bÃVSÎ¢hDÁT£kŒ(È5šuVàJ¡
1’ ÿÔý9kÙ¬æsšÛæ\Óšn’ƒ5êÖðÊ¤F´F5 ¾·îâýKúBj$k“¬mßÖøte'/Þ¨ÙqR3gMD–å¬i“±Ö|VC^ÏZÅ:UARuØ®)LEÊL GÄ1B­z&[ë‡Ê ×<[‡ç¬qóg®éMŸ× 2‰¿XC5Ý‘h9°x®¬¬Ÿ½=ÌxM¿ø0®f…•B.‡5÷å ‘0âKÇ§ý4Hg­ùÎÚ‡A"ƒ5d;îkÖ¸V$f$ñ¢Ášî±zh…Qæc0Øq
CÁœUä ™‚e”æV-Æ˜¨Õò =k~ÀˆÃµGù,~ôÊ¥AÚe°³eù—¦Ì¡ûT)·Ë<A«Šä3‰¹3b7¸@r†æµÜ“ï’““É÷Éªµòm ÍxÍ6áÚr`óxXTÜÉREdq‡ª!`M…ûNØb.nDæóÚõ›°Ï>ÕöPßà!µ°ý„ïî9tœ¿ìHØ/3ÏòÃ`;„Ãæ›'³Ùä®í !XÍ‰5¯«Sëõ\Ò¬Ù¤êÆêè(CTBâƒEb›V¯á_UQQmu]u)ªEp]Ë¦ºº-›*C•‰Ð¦MÕ¥‰žòý©ŽÄtk,UßA¤ª’|ÿÎ~Œ2bÜÔJdëì·~´P‰ùXW
…l ¸²XëcÚ5~dW×DœxÞß]éX›K§ÉOÄI2éÇ–íŒÐ§`Ï¬©Ÿ+È¼è`K¶ø&_3È—–”¨R‰ýfSkf¬ÃVëgzbã/kX9ŒÕ<XC‹‹Ú~2URhjÎ¿Ö6j‹•ÈFó¢ù9¸7¨?ÖØ:yÌVa7Ö’’’ qÕtSeÔ
«­hEÿ?„Œ@h¤÷§mâš=¬±ýws×N\¾:l};øÖ±Vì¢û-Ä_=ÌZ”Ãjn|ö)QYõù‚5ì«@¸©µ‰x‘Á¸ºØ"áþ¾pƒOsBÔ¾ÄÛh)#86´“õ"ÑÐÓÛ;¿›"÷Þës_Í®p‘ß.|>7zù2¬F\þÛj]»ûO¤˜‘çŠ ÀžRHâu5:ö!#5æ­­µ¥¥.N›ZoïZ>ü¹jX{ß–Zb‘µ\dŒû&¸z©Vl§¿íŒU«ûº²2í=Bº¬¶óúÂêÕE¯Ë`«©Á\øæÖ­»oß¹³x÷î‹‹“ÿýÕO”¿øæãÏ’OL<‰äŒ0í”%ˆäi–õÈ&Cj>§=kÂ?sû8bqþèåí;Ù0áž}°ø ÍŒ4êCÇ2ÅJ“ƒ¦‡Ù‘÷ ZÈbm¡úà”FœŠ·Õ·g~"?R¬þg¶%DN›K¹<3sžíeþÜ¬M¯~Ýœ¢íÍÛÖ¥çÒ¹ÂžKåNžÇM›™;©6Â”ëÑôä¹ÉT`xäýÜ¼°U7V¬K$+Üš¸+XdêÍ.çDÊ`-¹D‘€/^`ƒkˆ½T¸ÿÍ¬µ=˜œÔ@j´Úï±Ô¼Ak‚µ+o"¥‹àŸMÆ.+ƒóÊŠeœõQYž«4LtÖ–z×à²>lµ	zÑâ{çóxgMÝñø E‘ ›è‹p‘“)±Z’ÍîéÒ˜Ë_L0[Íùk6mÍÚÖÜº¬ýöÎþ7ªûló+í_°?‚•xd9Bü‚…_dM¬²å¸–Ô¯²b#Cý;•Zˆap oHË¸µQ‡Mx
xê¤bGu5rÛÁ&5qN2AB^vJC·5=ji?×ýãÃÄyÔþ¼ñ5gÎ9sfü sæs®û¾nh­ùkâ5ê!Ya«ÝyÕNòâ~¹Ùê S}kzp}óSà[Çg¶ÕÝK…ô»TÈSkk?ò5ßYÓenu$¯Þ‡™÷¼ôÔsûe¯ÁjêCB„¬={Z4‹9›LBD
'É¹PÊ…)ÄúíouÖªéžj[KŸ‹M¤k2«¬‰Ù ²0™æag1W-ÿôhÙ#å••»ëUÿÈL¶ú]Ýƒ
«¬ÚWyÊÙj˜ã6hÍäùjf­£¥%ŒØPìaÅ¥À>—E@ÐÚV'¢ìMƒÚ_„RÚÝö_Á æºÕØ‘öæ*gÍKY1ÖÞL9kæU²ËZœ†ðÔö\æH–FÜ©2‹_fOÖ BGè¬Ëçf'Ö†ƒt#Ü¤µÕáýpškæ¬ýë:H@ÍV¾Ö—ÎÖW¯ U#nZÐB¨ˆ)æv°Ñ¥¦ÌG	Ú*pÕ<XSÖÙ@nÎÙýó™ÖÒ5|5|õ—!5fOòÔ|`~îJ^©ü4Ã5Ä^Ho6J˜„2™ã‘_¤ÕˆŠK†…kE`"É¶™m”7g-!Ò€mu¨?J‰D)‡-Åk
PJl<ƒÍ´BXGfîˆÕî|þå%Æ8})úôpjo¸tiCÎJzIŸÒ‘*"-½Ä€Í¾™ûv‚5Dé#—%û¦]JÑZg=m=6ô”8äN]·40aTYÈ»¶·ÛSPnfš`móPÝ.þfaµæíMb¶æªÊ2.k[]}}ù˜G?x¸7H4=v{5 r+vm†QÔPÂT õõõþÑøØºZL¯`oí ðåäy¢5¿’’”U¬–Ôt5`íÚç¿Ÿ>B¡BBŽ¹ôÍ‡ú€þÒ½ c/ŸJ**z£ük}¥µ<
Øè²üÑ1$VÃfSlÿ™•†µŸÍQé’òÕ~n¬ÆG‘»ŒXã ‘ã ŒµÐËDßZ…—,âñ›g¯±öXÍ¹}î>¥ù*2ZKkí#±8é"N±†njYcµ5­éÿÿ‘ÿÁ%©ñ)—4b,3Ãh>e­}ÄÛbÒT^¢"O f}kŒÂîÈ¥z-ƒ|Œ£€¤å3¯r•a±êp­æO76ghQ&¨^Yù4­16š
—p˜g‚Äc‘ß_@º‡’#á^*&j•	rûÞ‘#“£S7ožbVöÒ¨¦HH	WVó2Î$¡LÈ´ykÿÐ™Ï¦­m8}úýÓ¨­¡ºÖº¸7´ÍßÜÜVÖX»áÓO;«jÏN¨çÚ;}d¤‰l>x©±±‡#krÖî45¤Ðÿàæº:²´þ~çZRñ"šŒ¼{—_x|óÙsè¾Ñc«·ƒjÈŠ<ZÞ/íQœö»ßùœfVšß‚æšåí#e]±x²OïÝŸ)Ó íÖ¯Goá¡­hòÍ°¾Š™69	«}6m°fÍ<SWš&Oÿþš½¡ç¯µÙÕ’½˜C£Óšƒ¶<ýÙòÅÏ`µ……Ií†^ÇÓä[-ÌŒ¬ÏXàSËÂÉ›Zølr<flQ<SEŽ™¡™ÑÙÑ©bù“c“³5^þ^a#àUˆS†Ôª€œÜi+ÓÕï›Ée°æ^H•BÚ†;bë,·CÔ8fl¼`°öIj,ö÷¾÷3U± ÑÆIóybÂùùC\è6X+äŸqˆ¡¨|<d´S®bF9ŽÕ¼¾M7»:míì& ŸÁØ(:qøTk¤5¢´LÔAaáS#‚0o¶î×¿„Ö,„Q&ŠÏ+ð?^d°†°Ê¾i®Akn¥‡^»â•‡.pƒÏø×ˆ™VP@Âˆé)±€p™§VL5ã3ö8|íó2!kiÆZº³æpM<_ÍÓüõ~¦êj¸ÚÎ=f¬í®|_€¦°x¹:–ió 1ÚÄ ¾*¬Àš÷“ÓQÍý¶óí=k¦¯¶X³‰	©Ü«e=%u?÷|}å6¯*¯*kÉ®¯g[%8W_ÕÊ/s¹»»{1ßzÖœµ†ŒÊÌOã¶‚kº}ÃYVd?wÁšäTëÅlã¨­`ªé´ºR¦³Îl­’¯&Ù&=¼gÍ‡­²Eõ©Q¹‰Jkä»€Ï[ùÛÏ]æÖ¼éd¤æÊ éXK—›“íÒ í&Xû—´æ‚û¹û"RåpëôÁ]wòû­‡MLÆû#×2Š×epúÀ1C¹¥
ÁoËÐ$6Ò€ 5§bÙ_Jò|•A:yÎZjØÚuWÖ¼£ÇózûIÝ]¤,–>k>ÔÀJ™vÑÆ„µ¯ÅÛÇÇÍŸ“ dZƒÑF“ÉÑÉä°&y¼†VxMïÒé©þ/þï·]E¤üµG#GT{—Îk'Ø$ÖõÛÀöå/N»Þ3Æd”ò¸ÙAaeŽ
îÏ cRÛ†è	šáD~,+¼FFßÂíteÿ¥O¹MD8Ýi×:?½ÔÖÜÔµ¡³SmýÄ‰0Å¦ª¥¼®¼lWsSye}»ˆ‚Ç¨¼eûãOlonnÚUNqä®-OdU–‹çšˆêbÎÚãK)‘dÔôãÕ¹ %Á½lzsû$`m¢fK3qþ{K¸ŒÛq²/Ú¼¥º¯/XÚ&w,ÒÓÅ€luÊiE>«	ÖÞs¢­}ê‹_ÎÆ#ÑÄ»ãÃ9ö‘ÿßPZÑA®ûØw{sÏ¤rqÕ:*à9`-sc…^Ô«Ôæøk–.2pkj“+k¼9VCÀšNÂj2øã»w_nÏ¡ãÚŸœ†ò$Öl‡Å+{´L6Ùô•Ú]Üï±šÕA¶ËWkÅÎCkÎY³l¸5_mMkúÎ„ŒÀiS´Q¬­)dä÷ÃÃï~­Amf-ÖjNp[^!¡âÞ\äxÌ­pU‘…Õµ5ˆu‡É‡ÜÛÐLŽ~quxo(´72QVVSK–q#±À”ÉÌ¤µ	ŠË'ÚJˆò¿~½ÿaî‡4É—82»0úàoûJi†^bþ?·k?æ3¹Ok~)¤híUá´ÆÙ®«zïNMïS¦iÞ ‘è–&ÎY]§£%§ñÓà´þ‚è;óÒÁO©‹´±4ýL¤±†ìƒ=Uû®÷o´ýâå†¸jpãk”®›Ó÷ÇŸÕ€5MÇ¦Káubü_BÛÁÆ5sÔž.-½"Ns æ#Ú£Â<ÃD¨½‡À3+qÔjŒ…kzF­£¾nÜ˜œdA£ÎI#.dzšèiŠmœµ«ed`µ+häÓ°Æ5êiXËØ#±1!TÅ¬©œ‘8´©©QWï(X›žN= ÎfC³ÉÙXŒÔë±É£=NO…fo-ÄJãxj³ë3âÉP,šåÓüSqE0†B[^Y£KqSgì€Ë1X¸„~°Ñs’=ëÃš}	{9ÇïŸ»°1cÇ9!<&WéŒµ—yæçGNÛ$`­ÊƒÖ6ÊY£çrc"Gì3\a¤ÒuÈîg5¿#å­ãxiÝ5­Ý5·¯G0ØW“?VÓz=Â§~ØKMjŒW+À„ª±Ã†-ÓÙØSéã)<ëSº¸k­I­á¦®±ñm5+äv©ôq3kuðšP­`³xÑ¼fj›¼4~|w÷õ~þâ7oíÃ´‘ØéÎÚœÏkéÎÚ³ï^ïï§S"È'Ÿ{ŽäþçŸÉäOá2®šæ{]Æá¡ôcõ"ðV~;D£±dÖëåVo{sÖ^øFÀ‹“Ûÿ&­qÓ2âXMA2Ï,g„©j›ÖT Xµsge¥Xn‘î´*œµm_¬/¯ß]Õqó’wó-£ür¨&½˜æ¬Ahºû=kJƒÖˆì7æ”ò/£IÚzâ(žÚ XÍzë<aö¥§Aú©üP“­\tÿ
¸é¹GÚÖ†}XC¶ïrF²·1;O/+-f¹ÖÁvª15)AUzå[^%jz$æÏY{7-ºŸ›‹áEÿÞœ5Pm1Õ¶öˆTýÈ µü³u.[„BÈâb™iA¶ëÈ†Ánª|Y1DÄm|AFCŒcC¡« žNäÈŸ	¬9Z›{$ºŸ¹”s~	ƒ¦z+”ñM©ŽJH,´L`-sdFîÿ”æî·'f“T×%‡cÀ›²ü§†§F'ÇÞ³xÈé²MZ®¿“_‰¾9…»î%9l®ñ¬âdG¨×Q-T–ö*dKQ–µõtÂi@»ÄìlÚØˆô—Ìi;»cï«ÑZ®hÚîèëÓ·¢šÌ<Ìªcqòì5Áš¾!›ÏZ#r„½®š[gÿÎú²]ÙYålšé¨¯W0—®ªœ‰!õ•Œ\{â‰-[x®`ˆ˜‘íÛkÑlœÈÙš²²È…”ÜšjûªßÛEûh°c²5íéµmÑÞ†Z®Ú¶ìŠžÀE‹r¬aÙÑ03Ñ¥½·¸º¡­+¢6¼6äk~j¿5¬ùÓ°%÷MôŽô’ÌÏUæŽ¾t®AfÆü…·2*ÁýÞ3\‹;©Dˆ?³
ÒÎ(rbÃ	—-âÅ‹œÔ<lŒµ—8y¤¦a¬¹Te;%ÿÚf¬Ó‚„c)cL€æ$³-k–Lœß¬fÉý¶ÖMÓhÍZÖDkN6RI¨63;ã%A®e‹¬iMß•¶5œ5¼µYÓ°³Ö4pí£y½3Ì+®nÞ…,ä9Xûˆ7:k¤BKJB¹P›*øž››™i-lÕ¼Ï*²X®HI-IýTC2†º¹¹¦fKII%@MD¸vV×ê(”ï'°±6Ø@ù{¤««¿?236E¯qôÚÃ¥ÃùSÓ°‹{£LÞU(¤J!_8êÑ1#bµ¿8k `M².ë®âW8Í™N7jÏfÛèaO—m 3²D~1ÔÈi¦X»4Ôi‡‡êðÖ¤ƒeYÝG˜HC4dAÿÃ¯$ïâo%“¯YâÉªR´vŽËpÊ d@6ú‰¨íõŸ|Ïd9"WÚW¼í“Y!â3Ú}ÿLºeë1¤«xh”»>Pª@GMýa1M_Eš:=úÞóÑ°×&É qQú©Ãrr×­ 5WÛ¨ÇŠwÔÎc8‹/‡Ö–,/c¯MÖ@1^M®£Ê#?£ž·ÏFãE¡à,47‹Íò²é±™‘…Ñq²÷>KòÉª(ÐUìØl¼4´u$žo âîDTh©¤f‡2XtÊÒ]Úž{Ò‡5·+¹¨€Cçˆ{œß˜xùþÑ9±šgÓËÒQhí¸¬ºÇ+è‰Ã<ËSËFpq´¨å…ÖËÇ+DyòÓ€µvcµç-²]jÝ­­MÀÚíVõ£iPûÙk=5ßn¢5+Ôö¶èˆ#ÚåÉÄ•Ä6Þhm~î‚”ŠñÍµpmÀwÕR¶ÚoTiÚ–	Ñê\ÏšÕD:{-e«¥ÏÆ¶ß¯uë o­I­‡‡±ÆâÄNq¬–î¬½{ý!ÁYûûû÷S÷7ØÝÚ”h Ø¶­„ÅoÍßôÌ¦ìM4Qa=µÃkr¡·z èÐ]Ý±æã{:bòPM7­Å¶¥F¬íÆPS·œì<Ì<Á"¯€J~§î}­»*ýØc-åûêwwCo»e;kßƒÔ8lnÚêˆï­¯9gÍ˜3ß°gk6±’Ö¾À&ýXudš·ö(¬‰Öœ³ÆâŒ5Êš-ÞJO:`öü46Vüèöõsä®-æC‡Ô‚9ÛË všY£b{Ö<cÍnÎYsˆæKø¦'<g:È'R¨öM¹dl¸Œ[uiˆÞ5BXQP>EÈVÓ5jqÛr+~S‘±^†·^Fé#O¬qD‡ƒ‰+Râ-ÑÉ´&`KÕ›s}lŽMWÚ72¾MÁÂ•ºê¢"
°1ÒcjaxÖrãSc2Æ.k[’jÞŒ…j.v„V¶´ŠÈo+‰$;
ÍÍ­dúïøaN®ÙbùÃŒØ>O«ˆì”¬"RêùÂª!ÓÜ¡Wú^ùôRÃ!]¬È1‡MãjÃ¾W§Ì‘¯õ¤}?äÑZ'+{ k–N».uÖW©¤±iË–¶ºÊJsÕêÊ¶·°©,¯ÛvoÙNÃ‚¦—RªÂ«uŒÔ–4Fšp×8
­õö†á±-áh-cjÛ&@¨f®¶Û®ªªi"ŠÎR‰ïEßÚÞPï TÇ«kÈ·4\«©ñÒE¾Õ]Åd³0uo¤6VFMœ½á‰p3/¤„ÑLßnG‚\•Ë+¬÷¤5ó	&GëÂœ¾cL˜8„jÒk¯Ó¯ðÏùá"°"ëÌÚÃ•ä•$×Ø<3}:Ê	ØY$3<Cúè="ÜFé(²W³eµ0Âj%
ÒPÍùj¨ÝëXs¬6»ÆjkZÓwm6öÔÔ¸õ®)c„Õ°‹±Œ0›¸ºùx/³­jrÕï>y|€®®-)¦ì¯$‡ÚÇbšÂ3C¥…y9¡Úp0³¸¹!¨wrü·„µÍÐw©‰|`š™ué,Â5?`­@‘TáP°VÑð·Â#qm™eHòÔèô]þàƒnŒÚ‰óéŸ­ùfçÀ5úÖtñO+Þš`Íé´áÚ«m¯~êIÖÃÊ¯ÝGeeB²¡&~µ¦ƒ»:SÇ9ª¶5–²ª&Wyýáƒ¯~|˜¼õðË/&ïBkø¡Š¦ÞV•1#kñÒ°Ø~ò½ŸPüâ5©ÍÄŸ²Ô|;ÍZÑÞÓÝ„yæÏly.šqw"B\"­g^I#Hee6è¢¬Ñ,4ƒ5Œ3wôê4¯ÆŸñ„Ñ>™V:z•?`xltyÚM´^¦UÏ)ÖÐÚ¨f¥!•Cþy!>þ 7o¼44;S#”ÌñfzafœüX03Ô>6`­MYÏ~fiîý™äL :s´æP3èòÊþ=¿-`â«½AkB31›IÇvV±òñùÄ…û/•Å	«½lýj?økTA^PÚq^…¡•ÈÖróPn§ÔÂqŸõ®Ì¿ªiG×+Ì;®¡ð‘Å´	<5í”á±º§¸03ZSsØÊh5@/:|e~„¢I>bÊƒ»0—¢µU¸&wMòmµŠT›[µ}.RÁ×å­±—®ë«	Ö¶âþ	!M0$°ö¤S®¥ùj~Ö‡ÁÚÿaö“;™µöä“Ï/Âjhñ9Œœ_ÜsmÊ*œÎðõƒöè€sÖV·¬éæiåg®àš§Wû¸[aüÛ³…%à	É0Y¦[ýÎÌZlm-ßUUŽë–õXeUw«ê »w	ó¶j”@z¬†ÄeÏRüh7[ÊZóÃ uÛ`Gü)d[\ôY-ßmHÙôŒeBª&’ÊÄg¾ÖäªiñÇ^{‰"ÎYÓÂQ¥›kƒ.rÖÈ1>´ä~I¨¶¸HÆˆ’]Î·ÛX¸XKAìZ$·´"Hp-­iý;iÜXV³°rÙ˜µuÜ•Ü,.W>[IêÅ‡2Ö‰Èd¬©I¶²j—©ƒo¹ÁõZelôfbûusÐš)mÊqf+r¥,áÓä§ß. jh¤w—¸½ÿ0Óƒ^cÞpâ¹¹±ñÙx,99)o¸[L¶áŽ[rtZ³ü'Ía±­JõO¡"Òþçš{tÛ!\±\›F¼œø§Ã,?Óßª,Gh
q…‘´²þ¡ï•KœÌ^9ö›CO?½ãi3ØN{{&QÕ‡6l˜ðûákž8ïQÉ}¨ÓñÔÙÒÄc5(TmÉhh¦k¶µº‚Í•Y-ìTÑ~¸nKãçj1¢´$
¸±©4–l¯*S’d5ã¨ññíÛ'jë'Z²·šøåZPUYS4Ê¡^Æh×„!ªRœ±†0¾ZtB°V›2ÖÒÂEÒ‚ “kRréÞÍÃ‘šR`s4Ü“^VL¡,§€Z˜ûÞÒ@faG¢Ìí=#X³¦Ž\ÑZoŸëYsñ"dAŠÕÜ4ìŸÑêü‚…öû¬f-Š§æ‚mò·wçÈ*f¬e°ÆuÀKôc"y¹o¬IÞn MFr0[{Üh%æMYƒÖhYsó°Ñ«­iMßÙØSˆÎ5hÍiXÂlÿ(†N|`åsví2´u+R=j™Åb5{÷¡Y-XXÊÛc0W°V[È¨ÒÍgêêææâŒŒ’
 HÎonÂbÛÕéjjlÃ;ëéÖÄjý=¡Ò½5]euÄç·EÂu3É[w“ËJ„\º³ôðÁßnè<xË\SÎˆZÅøLÎåEKA^~ÿ?¹á®©R2<c¸ŒEW~ÿ}ÛQžñÊ›†òôÿŒ´uõs¬3ž]âø%cµþ9jM•ýQçÒ­[×¦–¯ÝYúòàŽk.¶>Á½ùî·Ÿ;7¬)÷äóuˆVŸ»«ÄyñÜÇÏz†ÚŠ“†A÷^ yb—L¯)Bk%†(nXs×tm´™ƒ5$0ÓÚVŒG3ÉR»ê^àØLOˆñeHŸ4–Xñhùâƒ?O.Oó 	þ>»zõÁÅe¦¥qŒ5i&É6Y]4562Gb¡ÐÌllDAt|ÄÆ¦’ñ Ÿ‚bíÃã¡¢ää” È™`EÉq±š‡ü³“àÌËÑ.ûþÓP˜Áš=’çf@gZ³ë4X£Ö‰¿ÜÖû¾±Æ–9ÙÒQ>ÕOÌ=záøÑyþ¡¨V¨“¨ª£Je+Ï? C´ªÑÖ–ãí©0HQÓ4k3×ZáÜ4–Síñ°RüÖ4j-Žé†µ&~ËŸJ±Z¸[ÆÛÛíø•+1¾›¸ÁšhÍáÆYz-dz¤xŽv5Ä×l~
ÉY£ÃÄì4.~kvr»îG@ÂŒŽÖZ÷ÉQòâNø}k?úQz¤GjBµ¹o³&X{
a­=¹sÛ&Ì+¦?;XÛš\ÞóL6ÕŽðÉžË6š©ÌÆjEP[~‘ÁhXCiœˆVZz¾ñ‘Œ i‹ÀZö&…šð[,Ve_&¦>;‹¡"»Ëöí«ÄgÃY«ÏjÙ]O¢ÿâ.hn_9-‡Ýåš’-gÍáš–”±Æ
JcÑÖOaánù"Šíê qØŠ¬UíQPs°†Ç¥™Ø¬¹ÍØr5¬yÆšXÌÏÕìî=ä6žòÕîMµ«¹ˆMíJìqÅ­¾h_»¬ßü~UK
›¿½gF{ÓC5_.`ÄnV©{ÑjRcY%kZ[m­…$¡îÙýêaÙ2ÌZË…:”-Â!’ U)­x=QOañ¬Fc'Hb5FÔ¡æ`…•´2¶òÂ•+ç¯Ì;X30Û¨«3\ZÄeHÇ•5›	nt°&Ó/FwrŒ9ÙÃS“cÃÃc3ë‹Èô‡†3I®c™½Ææ¿tØ¯™‡ýÂ‹i-lOïØñC²ºlÒË±†c`ó3"M×YÖ·¦ZÈžÛìîÿyìs!×§r;zŽ9	«;F¤U°Øù¿8`óØû­dŽ¬Œb“RœvšÚH«‹ÜPÆ	ý¢#­„ºU`­žž49Ö›HU-¨zLƒ¶Ôõ«<² ¿Ÿ:™ÁÚö’â’’ê’-Ûwkà	úe-O4GÚ8ãCkáâê³½á¶Æš-$I66…{£Ñ`éÙhãöbþúzÏF›"ÀZ›`­†Å+‚,ý– HwiÓáÚ°6r*?ÔTå#Wˆýïï-Ìí¥I:\#àë-Ü˜›GÁe[„@êcj×]éZÝÙ}ö§Õ¸lasŸXíu×°67wàÇjwa5Wù+]>%·øîoco'œ{fW°sDd‚2‰µsÏ¤•¡´lPŽÒVXm¯yñ"hä¼Ÿ9LäZfÿšÖô¤5j!=\æ¦Œ+„T¤<ÚÖò€µÌÒ]ÖèSsþ}f¨0‡=¬ÿ`0 œ‹óÆcé-²g­4ÓÎŒÕRI£ê›yŸnlÄÂ"âWÓÏ"T@r^àÎ°ìê†šº¡NÐˆážÎ#Ó7®Ü[¸º¼Ô³ôàopÖ<•TÂ×_»Ì|+=üD¡ÈpM°¦»9k&mÞ'³Ø’DÞ?]×ušâüOß?Ý´‹kåÔ‚0éÆŠ!#]p,‚¤9ÍÒ ‘£´¡N­{––¾èüâáRºs÷ë»”dòyTïRêòæ°±	ÖØC.9ZyRVùnŽš54¶’æè§„˜ØÑåZyh,ì"¥G+-ÿÆU@MÃ¨¹ñÁ|3#0^›‰ÖXq×+Ä]Æh$;
ætPmjl€¾¿^\½xqzùâÅåå{]Æ²kË¢ñšQÖxÈw›Š=6²~dáŒS<;16š].DÓ¤V‘­6;•_˜š5œ

Àkœ‘†JmRšA—Jõµf,ævO²•ŒÕô¤v9Š™+ ôY-çè}¸}~ãñû÷•Ê©?—Í‰à6¡ƒÖ€µùGçÇ/êƒÿzå«åò»•’äJ¹æäÍ_IdæÐÅŒ'Lñ8wCµÃ@	óÓÄgzÔÎqØ'Úz;¥ué.ò¬+x¬ºU5ìñE©±kPša‰%,€—£50Lk.hD2Ró+ +„jNsÖ„fb"6Yý
a×ð­@–jª±u°æÉ+ÚÖÄ>1ùù",H+×xjÅYÛ÷€Hcé“û	õ€)‚„³™D-1}ù­¢l<­üÅË
ì_)|´»O&NPIãª€»ùs±WZ#`ÄñZÑ¶Å&‰‹›0v»èþòÝ‹DöS
YYO:]«„Ù´˜½{7c±Ä¶»µ»jwì¿ñ»O9g•PÍ²f7äÍÅÖâçA*º_rÿEùé¤ÆZdÑÔ•Ëð+Wº­æÁ‹uíÊ%¯_ÍVZÜ“ÎY39Tó"SC±±Ò²«¶IóÕÈí×xlÐÜùvï÷^5gE¤ÆýÑ±Øìƒjlüx^Wô¯òEÌYcƒVÁšÑš‹í·»êƒ˜gf­…”Ü¯X‘õTI•áoÖ<¯²Ø‘BÒf¹)ë?”«&ÁjÀÚ+`ÍxÍ‡5{…×ædH¥…æ¢¹8!Þ†®Òüy¥­‡ä(„äÜà'Ægfâ±ñ)&@&’cä‹0LrF°6º0œ“[à-R›½Cëªš“o°!Ï`û)r©þ6Z$ÕÁöô!’ƒå‹õõBY«""™½d!WÙÉIˆFgÇ¾ÐÑHïç‘žK„Ež OëØ÷¶œü¼:}+Õõùð×åç—xßGýp&aš]ÎìêêŒ<žj`ã¬Ø_PUpgg—÷“§Z••UÙ’ÝR^Ùò	#uCM`\ÎÞTÃD"ÛŸØ¢ èu[šxÄ½¦¸!ÚTYUaþYb:»GéHDÏ6W«¬¦­9L£Ýe';Îô…x5¦ÚPmƒ5.b¬vå‘ ÈT—€­øso6¶7ZC¨d˜™ÛµÕ!òEÔ‘’?§Îú¾3}š LÈ>¬Ô\P-íÍë ²¿—&ácáÖÐ«yA?>ðâ³bµ7ø‘ª{´~ñ~ýÛä¯²v^¤eíÕyÈ÷ÒxÌ»óÈƒ5×Æ»&¥NuZ­bµ"žðF¸ÉZ›‰½•ªƒ4WM¬ößÿÛšÖ´¦ïLÈ ö¡2ü­¡ßsŸ‡ÖlÔ÷ŽD¢4ÀœÁk¹9ÐZ	9ª#S	&‹eD¬:-Vrm5Þ[µòüBk5¹iµ<©ë·ñ.]Ö¯6ÄÃsFj&úñŸÿù‹þšš‰è¥ƒý÷&F"]KËWÿöðöÃ«W?¸±pqêî¯¾Ö^ûã_¬“‰"ZûÄÑšÎO°šF¨€d­]:Tõø>°Æ§¥ª®ÈŠùŸ(êº¤g´¢§;%ÈÌ‘š/cµÎÎ/1Qznwuv~qgéî×¯qýÚï5U—ºÏITNÿ²ósˆ»PíÆ+~úñÇ`jÒ£ŒfU†œäÇ`4Ä®­1ÓØˆ“m&õE“B9Ñ”DÍ£ÉŒ´Ç-50i­¢Gd »ñ•ÚPÓø——ÉY^:|›¾ÙZpø¢¾¯úæÇ¸j¼¼ÌîgÉüAkH›â³	JÎ0!mÝ;#ðRm’3²[œ±Q…Dª1âx<ž‘?’o¦Z( ZcãðÌ¾ (Xs‡ìò¢á¿¹Fkd.›ÛÕ—xýî*¸§S q”:ÈœãG…ÊxòE¾o°Æ#é(Q!ÞGñy/À?[k96`M~1
)ãM˜Ú7æ¸ô~N”,ÕAhm0ÜÍø4…9ÒÄv„½S	Rð%ü«îpøðmÈv£Ô 4/y±U¯€âd©!¾‘ñÚÈ…£sÈz„ÒƒF<qèÐŠ­F¼Ýf!+Ä`VÇúz¢\I*Hí³ÉpÓ¯¹ÏPÍ<¿Æšß²†(£!m|lbAPÓñÁçvò3[»³`Æê*XßªjwQ7=Zçó·1ì++û2òŠí°èÎ®Ïl+Ñý/°8­F5OÞ˜5kW3ÚÓÒ½Ø²X¹?ãž÷ìGÏKÊ $T£~g}+ZÜD¶(¤”ƒÖž«,¯Çýk/ê.Ø¹“Î3Ö„h¾±æ5¬y7 Í_pmÜpÇ‘§\«œ5=´€‘Åg6->CEd¶/’kºðþT©£»‰œ¸§õ¬y¼æÁš÷œ5­àb=Àl Nª0©JÝ-]Æ_ÌÚ†Ç¦:Tçt¦Á¹j«Š }\³›YkRü_ÏY3d[ôµ-LÚâfƒÖªCxhëØQªˆÖë‹×S©ÒÈõ…°K‰¦^kü5õŠÏ …DK!Ç‚ .
æ\Ix°“I ×·6çå‹Xl{»4]7ò¦é¯Ï´Ë3¸h®[–ç8d§4‹ó*
¥ƒE#ñ@||!É	06<K $7ð`art<73>>I;/6Àf‘¬$×$¿ƒ¹6þÁë¢ˆUD¾ôÒëOï8túNR™ò×X,q„»Ëu¤)×±óïœ 43õàDWîìöÊÀ†Ó'þô:´¯‰ÕÔüýsC—Ÿ9âW²xr=l¿èÙ¾½ÇÁÚ®!ë—ë©âÅå-UuCUä@b´kÛ·ïj¬i~bs²Q-‘íO<&0k×rM¶¬
B£p¦ª’Ðÿ	‰ÉÌlDluˆ@ý`Sß¤1ÚÛ¡ÈÆ¾`8ZÓ™ù&[­f¥Ò‚<à³ZxÏz¹’SIÐ%Ž ‰p”U”\Iþ)/”èi]5Îë8;pæ,GÙå@iN 8ÄµÀ’š(š˜8q¶÷Ø	ýL5¬Ù¬9V{‰w¿]ä]ýÌ[¤{Ñ8ÿÞ­Æßº¬qjÊ•¦l5Ö‘˜v½cn[Ž×¢æÃòÇ_{{~$VœµQ+SÖf,Néýk¬¶¦5}‡BF~8>Î"c=Õµö¡
!cFkè—ÔAb±å@5„áïbŽØ"ÞUýïw!±_CfWÆHñªVò®½¢¤™7DJÔ›y'²¸~Íâ$HŠ·×ˆÖaõ‡û­öãzvéÁÂá;ÿJ=ÞÒÃWéØS‚¿²ó‰ö>¾h[ñÖ¸4™*…|µXã*¢»,ù~j¹ôþû=ŸÒsÝÓÅéª©®+¼‰ÖÑé&¡™/.Dr“°Ö®ÝÁUê‰|qçî¯^¿öáï¯ý‘¸Ó}ˆAäøkŠòGçÎ½JèWžÔ*PKe„hå]š…ŽLÓ¦ö»[¹ð1{¹Á¥Œ¢36t§Y¥£Zü£rgozašµ‹é7£M]häò_äªð²¾ÿôÍ;÷TíxïÔÍ{÷øøq‘Ÿ´<3sóâÂ‰"c±âu#XktØë‘ŒQ4ÂÇ'¤áDÁ päì£LØÇ”É»,@}²`G¡ízàg†¸3\¡XÙc/"’­^âŽ9V3YZÉÊƒüyMdäqm]¥¨Ö°öýï;VûDÑý6dï3o}. –±>ËÉµÀ…Á€íåU(Ï?@sj¦ÁjèÅb,±šrüS…‘­§N©ÒQ´Öˆé–ì!ëVƒ5;˜¸òÖ<_Žôçôå¸¹k®y¼öË3@ú‡|[/) ÑGk
í/(°6¼5ùl€™/W)ÏOôØ*Xcßèšµ¬¥'÷K©k¾­Æâ§~1Fœ79%ù ˆ´¿µ»µ|?p´4Ù3øÖyõpÔéµ«“ÊK³ÐÆÛ5XKÿÑ«µôø~¤¯0VûÑ”AîÁ4Ò³m=îß¹ÓXm?¡°»`gXŠÁ¶o_=áþõ»+÷Õ?ÿüÎzv²_Ä$2ûrÌœ5µf¤–n¬y­k>ªy“ÖTi%–à,y¤&‚ò“!Õ±©áíiJ¶«ƒÜF¥—AŠÀ<ZC¬ÒÓ m½â¬iÎŒ¦›VRQJ™ðŒ&r]Ö5á$Êì¢A"!5›¿Œó~ß2 ”Ž{3±/¸›'í™×æG÷ÿÛ=kÚ®MÎšVfªU¯c‡k:àE‘ÄeXŽ¿h­KKmlˆuHÞZi
Ö0ØDr¦;š¼Ö„ë[KYhjZCb54—‚µ¸Ls áz\”ê³çr
½ûkü ÞžÚ…ÐÅÏÇ†’1½1Í&1×T™$y$3D;Ûhrv
^³Ð§QÞ–WrýW‡D¯iXË³4±UE$×D~ð½ÿø	…ü‡€Ô“HÀ&	±|‡ít§WÃˆ+ÖiîÚßOÿýÒÁžÛ­b+óÅ.ÑŒýÊÉ“TEVäwôV70ÒÌ¾—›Ãæ};Gúý¶t`ëië²sagW—©UYMÏ¥®íü-feæ_6ÔSV¶ý±uÍUCý›KÖ5–T¶´Ôpïmdxj‰#MŒQ%Ö¿j":ÑÔ=«!kmÐY9ýÕÁÞ³8kÊèï#tooÔh•@Fü(ÈtVó}5¯¿[<<5sïæÒÒÒÄDŸøQ [4¼7W°VHI”Í%\gÆ¤=#vEÁPIq¦Zî_yeC[íÄ+'::ÖÔ°Æˆ5Ê Ÿ¦ÛœD°£çžý)¾š`í=K!ÝëWÉä­ßNÝ¬9èªŸi‡•BºÀ~Öi	þÆ±ñiÍg4?RkÛ«	×ZÖÒœµ{k¬¶¦5}÷hmvZ³x¡a›=Œ€5¤“!RÌHÂ`Í¼53÷ó*kš«pƒFõöc>‰ ÃØgÔBV3‡
rû¤®ùjtûÖ4‘ÚOx”&qvqk,jª‰ð°§‹çk›j‡"zØ
ðÛ†îÝ¸zñáÒ‡KÝm5[_™¾fâštÿcášÕ¬¡c©ñØÿP„¿×YýÕn]]§_ía‡&€ÆÔÉŠ•Ïj œOiiê¹ó0¹ÔÕÅÞ‰èRòµŸ«]íÍ7>þX5™çî³JxZÚ^à÷úøþÇÏÚ5—ÊÏ{>Ja):Á¯i+ÝÚqÛI^Éžå{hk¥žÔQsÉH~dÍ+\=$¯`Ç›˜Æ!–éåf½­Ô?b˜Ëqmy8Ên.Ó®vsdaòfëÍÉÛÝÙ7´tÑ2 ò×mY7“$çåæV¦!å¿³­Ë*© ‘ÉG¸eFì®¬Ñ_ë	¤³-µÖ.T_(é9W©y3B2+”t¬Æg ¹™ýÖ\7œç­²q£•Cf¿ÕšyzPI?Ûñã ]iîüÑ ¦:Ku§°W^1Ò¹67 ôGÉ0Ýx¼7µã¬	ÖÂ<æÀ‘H„þ/ÁQ	•7b¤å«9Í ÍðÎóÕ¾¼ý%´–8Ÿx+ÅjGŽ khN¼vÁ¡ÒlŽÔ|Tƒ¤
˜Oëé)'ãµ‚”§V L¡´`H|58Mrv¬ÍY3ù¸äXMšKÃ5škY‹‡Õƒ7Xµ{÷“›÷?·op±ª{CSv¹¼µ½}ë`¾õ@„æÒÓG|­šˆ¼kÞÊoY{1•/ÂbÊ·,H
¡39>·ÿyÀñ¹,l5(¯ç¿»žƒ;ñÒ¶É÷ë.§S€Ï”•enU•ôÎÉYCâ4ÏYc1gMÝ8êãš„—n#íB5ÈGgùFkNÚf!GörjÖwÌ.3ØÖ„j¬Ü„55¦ùÎš·òQ•ÝØè'²cÌ_³h0;{ðr”¶I¾fÖ6)¿}JÃz£e×)Äß#æGÒ ßåîåö¯jYó{Ö¼2Èé­¥%ŒàŸ‰ÓØ iÚ«×SY*;­:¸^Õ_cí`­BDì`]Xjî=¹HG´„P.ÌÖL?ú¨iÍê¿ŸVy%‡áÙçSã°sì‚¢§ tVjïZî­G°FÓ×oxW*­eÄiÝŽåS9‹ëÝ€lÿñÛ’³SãÃq2kÓ¼]O{oÕÞµ·Q”^ÉÉ@ÿêV2"_ÆbÃÆy]9YÈ•1ó+"M=º~$ØñÓÓ·¿ø;íl*°]ê8yâÕC¯wœüáó…AÆNë{ýÅoaë®õô÷_âË?ýqÑ’‡¬ÕÓ&ZóÔ	Öá¬Õµü?öÎ7&Î:í÷Ožóúdó¼l‰-iºiúRþ„Ì’g83A–Ô´¤ÊAÖÄ“n™n¤ Õú .mZY£•VÔ¸(†Ð-¥B+mk«în$ˆÝ4“S
žq•­Íîº'9Ÿïõ›wGÜÇœ×ò{îûž{†?muîùÜßëú^›JrñÚ†rwmºoÃºµU5?ÆkkJ¶íÊ­hª(/‹2¥§—­¢µ»¢Õkõ§Ž#ž‚eˆAÕŒD§AÝ°ŒnµFjR ¬-¨fCÀšŒµÂ¼” H?`m‰ÕnLMk®åÄ|+¥—õ˜j§dâ5“ñšGræD
ù¸"Xã±òðÆÆ§“Âþ~BXN©Rv^,öÔ—/[ºÈöä¤_)[Äe4s˜DjÞ æ ÅñÌdä#'<jçÁ5“÷Ô„rþ¤'<£¥†Œhá.}‡Ú”Úï{ÖFG}ÏÚÒsÕÖXmMkúñÑš%Œ8XsABj*6ÄöÊðŒò 3j.Rµ¶Cß®Š?Óe•ñ&ÈN[MK%ÙþT?–sK3GiN Õ·TW–·Õë*½k¼ËÆb-MÝå-CÕM°R-|ÓüÔ¯n}Ó|dvôÊôòu/&?úö½TZ“¡%sÍd´F‰“ÕB6q§6¢!¹l¨¢þ¥®×`Ý’<SYIˆöÝÕKqZªºMwŸ}ö“Ö‰KsŸ¼ÿÉ»ã·éY{þÝw_°ö¹‡Ûoò¢&ïÐcÀšÓ¨ð¦tæöÅ›HuöÎR»øæÅÉ‹gÆd‘9T<4MóÑãäXíhk}föBI &—Œµ2HS×Ú2V›¸×;7íÏËæµéˆu¾-<ÍË\$ÿ§“Km‰ËSËútqíÚ¹å¶ºÅÞÞ#EUCCÔ N^NÜ¸rv]ÁèR_ÎµÄ(Í#N6Bm½q˜óÏ,¦-M^â€I<%OÍ±šAF\vDÏë˜Ã¼Â”ØG+¡+Ò½Ž#H/Ð—»£ºKö­²7¦_ >ô§9¹ž5uª’æ„Asj¾0£0³ëÂ…Ô=îVý#—Ñ·ª¨—Ð~jÝXìÛˆÎ¸º	|ÅbŒÀæaœ²Gc3Ýã‚µÁ‡9 ¹ñ*Œ+GknâÒ†£B<}÷\_çIZ®9=nöZ€j’G5Éð	X3NK•lÆe’ñÙì¼7Ö´i÷°æh2Èï¶¬sÖ\ÏZJó˜‡µü¾>K)Ùµkf8\›;èÎ‚Ia‘£b;Âûm¶eŠ¸Ò;=”ØA‚µGÿ‰³æuh•±Æ=j#’2 3ˆ„üå/|P&	”šÉ½\vÃ¿Üu°äÀŽ}û3*Ýõ+FDÕ•”–<´IÖZÑ®ÒÁ¥öcª=o Æ¢­«„D¬îŠô¬#šÇ^CÐ¬¦mWùÝÜ‘¯6:Œ5~à{`M –:hÍ›j—t¿—Öhh·|`ÍŠmCgœöÑš¯vU¨94¨©aÑØ6 <*0[	jC¾Ï„LíYëtÎËwyÇ,>’›ƒµûþÿâ 78gHÛ fS$d>­AieeXeŽÀ€5Âú¬?m»¨)+œ­Æ+xä’þy¡¬5ê®Ó}Æˆƒô°dð~«)µ¿akÚÊi,³0Í‹÷ê«ylŽìÃ2|¦iŒfç¥‘ Èˆš†9lyYÔ¢e©ÉíôFÛVl¶ifL^ƒäææ.Mƒj“c	À,¡Rö$­%­¥ðÚ]$p‘¯½Ö	±ýW	 ®ÝOEä^×wæ:ØþÁÆ¢ŠÑñ×^úÂCÖÄCr«¡¦‰ã/}pü7 A“Ùd'Íºcâ5lE+¡þðšûvÉ“^ŠÃöâ‹T@²ƒì‘¾÷ÎÜmM%›‹ÕdÎ„ì‡6Ý‡GZPZ\T*ok¨hgAœ¹Ø?Ýy_5•3ÝTÈ¨²žä~È±_Ø§²¿¿¬ŒO±xmLWãÇÂÑz~«-t·‰Ö\¼ÈjVúÕø›Æã\º167¨‹¼±xkE•2'ãÕµáB¾êÇ+ãÄAÛË'–½2Ö4u-„ïÆx4þVNa«k¤míxWŒ–77bííûïÚå™Ã°í‡r©ÍŸãßqÖ2Vs×ªiAîYo©Ùò»Î+w¶3Hs²gÔ­fÀvºaÔMYcYb­-ýdÕÖ´¦™~¢ôþ*ô°öîµ+„÷Ck‚5hí÷Û©„©=ž-Ncå M×=³x¿rÕl[Cýá²ðV†bs5+R^YXIBTm4m£Þ9ý¸l…C•—ÕñæŠ³ÖÝ4¤kb]-êZ‹)vDIù½ÍC½àZSó‹·¾ù ©wqùÎXbùú××'™¸­¸fÕ‡­¡H©'»}	¾šßRÙRaSBY¸{uób;0ÚPE÷Š8›´,^ºôYk×¥?|òþ»Ÿ|vIŸß^‰¿òÂÑc¬½AÉÍ‡Þ`‡ôGÁ'å7UôÎ¼›7•&5vQÕ°ÚoÏL~
¬}šÃ{DO:ÕŸ;sÑ×H&Ïûú
aÖÿ
hÍe?ÊQS?Gì\8¢Bîà¶¹qil³S×yÞu´i¬%ÓCËŸ&êÚð`biêò¶\­<"X«ªXÄ`»Ñ={výè¹±¾hZþYX3Ï,t³”­‘Xr’™á“wÖj´§ñ\ÀUÁpÚ"_è(i­Çòx½ž6’ãaðXËœ‘¥©é×êDG±¦H	€~"/ï7†u)×™|æ³Ÿ›Güãî™ìpˆ|8Öøp–I¢Nƒï‡×k.k$\P§²¡Oîñfm–3âÍÂF¿‰ÖúØ¥Íòû[@#àŽ§¤$¬ñµÖ»"\:×Ì^{››¶÷æŠ 1¹"5ïª%÷8:k¬Váî¹´–yÍ³ðK `}3ß×ö¾µ¬ý3gÍjcæ÷¯ë ˆ³NÖ: MXÃCê4 É0S*¬I­2Ö‚ÈÕã’´Æ-9;ÇH-CIõZ¬Ñ¶öà¦³WK÷Sú§Ñk%‚5yi%ûÉÙxh¬¦úÇ¢ŒM?](U…dßˆ«* “¤æÖ¸jÞ\ÓroÏškÃ#]ÄtæÍ+cA-k²Ñ`&Ðlµ€5h9c-hX3\;ÏÝ?t+½(pÖ¬QÍ¸Ð= è‘ýxöê€!…±l32 6N&§«B×¾Ó³ÆZÖ§±‚Ò¸Ý3g-ÝßÕ³ß¡µœ²fÂv°oÁh8kHƒ Â2ã.óŒ{8¬Ma!«<½³fñÿx„ƒ‘4)ù/®³ì™Ç’2X×ž|&ÈùØ<ñGÀ=Ó[Uæ…»·†ƒ2jÄaö]åÙÆBÖÜó²Bv*³–J»eñego¬óÜàµéi¦¯\»2øÎµ‘,¦gÏŒŒ}:97žã.Žð£³ƒ‚HîA¨?ù’SØ„k¯²KLÏhä³9Ÿ~ü7ÿÛA–L± "ÒºÎ<¯±¯ùo:SCöÉWŽþé©“­ò—žûf6–ŸzÊ»u®…ÍMènµo„úûïÔltf‘MFnH(x_ó‹G˜’Ý›[\L[è¦ME£ô²å2‚-R©eL)	’¥5ÑXQéO7ìäªlu«F®Éëšè*'ó“žôjÍÀ¦c-nÿúáhA-Ïõ+$˜¤~Kk«íœ‚"HÂE¾—Õ\^†×¦û»bÑ(1}IeymUtãÆ²HÈj I‰Ç{zzHþÝ«ñ£¿½—JÛžc/;×R“ºô—ô¥K‚üEª»<üŽÕ”-âêaÞ{ïöLösã´í+5¢²í†iöÈ¡=šqDëÔJHmÏì®°ÌY`M’¯¶2ÛXí_ÿeMkZÓnÜšÁÈæˆM]kïb®IÃÐÚvÝQ6bí5®qêmH':Í7íï¯Œ†·†¢µñÊÐÆÊÊ¬oÆœ³PaOV¸¶¼ž·îêX-%í¨b¨»©µº¨Eíkº×24Ä8³Þ–
ÈM9S4·Î~ÎÝ¸|}lî“»wHÜ¸~çºÑ)#‚µçŸ°´ÆyŽd…T,$µ5âôw»›¨ûwº÷TÕ=¤M,RÐt÷¢Lcb‚‰§Þ'U*ëå•w_xá÷¿'=DâBœÍR¬ýVû¿ÔÈ]X9Ï¾þÖÍ1`í¦@Œr™É3¯k®¤±¾xæ¢,´1`íâ[áUë(M»©Â1ÈŠÙÆœ5-<kÑûËwÎ©ÓHëÄÔ|ï9"ú:û&XiKFk“üü©Å¥Å¢º¥©©©öÜö¥¶ª¾Ä§çfç15I~ÉÊ-ªªí8}:m”<þ´ÈzkVÓÈŠ‚È4 ÌŠ±ÇÓ~^«X³‘v9ˆlãK¬™ô2½‚éØnV¶#:»æ8¬]mØa„÷¿a¢9Í±šª móŒ‡µ7:óò˜°†¶¦e~8Ã‘|wb ³9²»ál˜«é[I=ÍžmÜØ0Ìšð~m!66¿¢,žjohuÌÏwDbŒÄÆ-‹³Vbü…X›Õ3ßbƒÃæG™úÜ½Bñæšt!	lÈ±R]µgXó"™q›6à›bFÄhò×*†Þ§Õ9ÃMÛ:°^û¦}´ï´ŒµÕÑý¾g;»P“îÈ;k£4¾á/¶+*_=RXUW7ŒŠÂòÁ4Û“y:£/eÆ°¶ªeÍó{ßeÄ`*6z¾Ž{HÅß~‹!Bg‰‰ojRÛ¿ïÊ ÷PÙ±°‰àÈ>Fvtw”0{ÿŽýŒ2¸ò|0[+[yW-ÅY3c-pÖò}Ü¼oc5¯«öˆ’D¤Ñs+¦šß…5Ý^ e„·€×ÖN³IùjÜÖò%—	‰¬aŽ4èðl~þ?Ç)Cóæ5Ç¿ ’±¦_ÜkDßY$ÖšÝ\€Í—Aê&Xƒ	`(¶ùj©Rk
GèVãsº¹kJÕ€Ì°ÉQ[·NÖi[¡Vb6ð‹DzÃÁ|³÷œ.v
·ÏxZsÎš`M³-=¬YWqf˜"£,¤Ý?¾Õ1kÉHì&}ŽtßºâÍBcGO§‡
3gfC!û‚ÌBªN†¯%¦GùN9$eiÃ§	ö!‘¿6—`pöàÖÉW¹¯TDROÇìŸ8"‡`£Ã²,®È6 `xÍZØ¼N"z®_
d¾Xó0œ’ÿþK˜Mç¯‰§¾|îí½õÝ­O	þ¾dš²®nÃ?ç¯õ®¤úûE!+\„rÈÞ^XÍD„ò6ºÉ·ír¹ÊòßY^]A¦QñÎ(ÅEÕ-bµÚu5µÕÆâåUŠ}®M(õ¹º&
™ÔTLZÝEÊˆìÔHÁÏý=Qú×Z¸ªÒH0Oé"©¬&Xr õW¹´HÔUâZOc¬º¶†f¹cYáHYc4ZKïE—ì³žrâC€µž¬Êr"¤Bq5¬eeØøÛìß~ÊÁšô§ºÊû=«.ä»)Vs™ý|
¬Ïž™?77ã1gš=BØš•iåúØ<t¾wÉ"!í¡5ß ‚±ØÖ³æamTÆšœ5×²¶ÆjkZÓ•Ö`µio¬]BITã=bÎ5ÂËa5E0$ÃEpÙöjj¿b¹ì-(‘Æ²þS•e¼ÉÐ7^Öj¦—ÅjÖ§E”¼Ü—ÍVk‰kØZUŒwò¢!P¨ººEœ	šþÚ\_Y­Ð‘¡Š–¦oïÞêmo›žäêea_âë¯ÿÏõ©Äõ­½õú[ßBkŒÇVçšäaoÙõHìµ“’;Y˜?û’’›Ps k¼†œ9ƒ™†H“ªëbå¨’^<©ç`Ñ¤Ž5M	þÀ 5ª(žó×¿&åu¤ÓÌ5ôéä™ßþöÌ¹$‰²¹(z±.ÛÉÈ1™«|T¼èf{øl [Ïjþ%xg|¹¸mù«){ÅäòòÔü¶\ØŒï%Vs×y§¦ð×&ùº³½³íóEu·f{kZ=ß¾”Xš_*¥ë š³pEÁúœékƒ9ƒ†D7™V	"éaí†Í\3O-Y÷è*!µáé¤u–®|÷À!=/9ðrJ†e‰Éü!©!Fc{°v7SiGÝï
!“Æ´¦Ã<;“—9ó!ÊÞˆy¦æRæ¸„–ž¢È
Ëm÷nhMõ˜ÃÑ…,¶Ÿ™Ö½VlÈ×1_­­n¾£2ÞŽâƒ}®&2P;°†êlcGòãíï¼ã
 ëœµÖ ’’F‚bH¨¥’š×¡U°–»Mk´M]kŒÉÞvñ"Ûóš¬!\@~A•A°˜[Æg«‚ûKÎÚÁ:~yâúaÙG¥W5ÒO']¦|ãy8Ö€·œ Ö»?à¬}?ªÁjIgmT±ôWÁ“«» %÷ÌXØ´á,°¶#cW.#;²«Vã—Ütõ§¥ú%ûhW+9°?#c3O\1VSx¿§4:ÖwÖü-ÅV£ižµ|ÕŠÓòIQY­[‘˜¿)‡‰kIT[`¶Áªè~¡šóÌ7iƒËÅi_wósÖ<«±8éÒE¨‰ä¢ MR°lL–¾¹W5ý^©#ÕL>_d5¨yX3^=ûŸ&÷ƒjZÝ›ÙïÖ˜kÑH(,ƒ-R†ðÙ0ÚÂŠvt¢þ,ÃN+i´G,m†ÌòÂÔC*xd=²Ô"ZÜ¶Ïøž5ÁZ²iÍWA>cÿãè2Íöy¶8l7y÷*Ýó!M¤áÃ·{O¡Iñ"Àš¨Í®uE+ñª,ÞÆç¦¯lÍ¹’?zmz„ZÈÄíÛcÇGÆ9‘ŽŸá"oê¯éš›Ï±I¡7©‡”Œ× ¶ÿ8üšNÌ@«ˆ4`{; ¶”H78MŒ¥[ />»%gì‹Ï>Ót ¢;ùòË[šŸ­YlÇO€kÁ€€	NjœÜ†‚úJI§DÀÏKH‰Ööl“ÛÖ”[TTRR[]T¼íHoim_-ÖÕRS (™²Ê’" ­¢´–Ó„Ð‰êŠ¢‚H¸œˆÈxÿ©x(§ò±…#QJ$'¶ÔWU¬œiíë'¬­°æÃ¹æÚg¯`¬õÅ¸ L4eå±½Çºê£a>†„"[N2Ã­8cR@%Ñ“•Ñ²P:Õ°[Z½k'O’Ûß3AŸ¡/¯<ö²` HMÃv^ž`TCï]?wý½·nÏ]¢êuüÌŒÆqª	Í[hy.Dd;
XÍ`ù*HOw©›+<¶ »_¬æa]A²Ö–ÐÚxµ5­éGLkÞXÃY³¦µ™Ó3à°fŸW‡‡-ü1Oo+°à¦á’ÒV)ëáSñSñdÌ_¸1q5Šˆíç„Ü‡ÎªªjËª+yƒ®/–×ƒi
î7µG½xjT@â¾•Ç&ZhWîž½;ÝÞÒ™á÷ôò×ûÛõ¥©ÄW4®‘£kµâ[Ð°ý‰k’’£5k\;áq¸7)›ÅJÿ)´4>{Irˆ–Bi'¶8%!Í(-î ­©}†Hp½ÆkÁY#ÈBÁ"ç™çß|þYXíÛ×©|áÒàÅ7A4Õ${*„ôNë1Ã1W èø}ï­›ò•5‚;£®O½|³Ò·â©¥Å	kI›šZš¿‘X¶ƒòï–///%>]nï]šj¿›øjCmþîbnïâüPEíºª[‹½³TAÒ^CëxQnE4üýüig×ŸÍ¯ OsO3®G#W©ˆk’óÑÒù€ Ia&Â1=#ÇŒ-ô†8æžr´†üG(;œ¬‰Õüñ4Àš³Öü±D÷?þñ@ÍòflÌË3OŠÖ¬uf¬Ídç1F¦}úÑ”8É §<Bü76Ìì–—FßÝÖa€.¬4š‘Û¡•‘ßß×ÑRŸÅÛ»Ú’£±Û:¬Ú±=^ÇÝÃšh6ý8¨í’ ñØ8ˆ³’R^Ä!¹ö_Xlk¶b­ñ(wVfÚ¶mXhkVY¨å
ÕP;âWu}t£
ìøg#¬‚äþg­}Oûè(¨	Ÿ+­aXu°—#?m€ÈÀYs6k“ÛãÀÚ½¬Æ¢Û?É‚¦b?Š]=š0ôJ4–ûAÀlWÉþÍ2ÎÔ-0ü»˜ÜÇ= lÚ«tvE{°Ì`÷ÿ²t€AÞViÎÒZ‚ž5g­y\ªÙ}Ä@Í`-Ieþæ)Í¯A(.B‚?¢fsµ³4¬ù€„³ÆÖ¨ÆJiÞWãÎÊ=pl–Ü¿ YV™ŒñéœÀ£Ú
Wˆù¥AsÖVw¬Izì2FVpí<ìûþscm!¥em² †ÿ°Yv?§…~†·&ƒMVšÕDF6Pûˆô@à¶>¬Ájš7«ÅŽh7oï‡¯ygÍ[kÔ@² AÚUþ3>öqƒ³U°†Š¨è·ƒòø5]Lç'sÅ¨0ÛâMô¦Ãgmrûðé+×N«2'‡ú´íÛG¦åš];[y~fæ…?Ìqu-x÷´†ÆS#G4ÑÍGS€has›UDî=ÖØØïzØ8¡ù*ÆVÑšÓJAä­ÅÏÕÈöùçà”Xmbâ¥æão'Lëäñ—Á¾ÝM'å®UVž‚×d+a¯mq5‘î;5If°ÙÊÙl&¿=r~3á»ýl[ñ.jašjvR*ßÒ]_å_¹±¥XñÎE¥µµ1ãéŠ×VTDËÊé_ë)¬Œ3­«'R[“­[Çè…¨æj-j±³-gYcµUAÞVC‰Ñ
`íÌ•8—}I3+Ìê?Õ5+Ãe5n‰³©ìŠM keédŒ”kèk¯Œ¦ö×'‚8YR]­A­Ñ¾Æ)ýåç²¶ËWÓÕ=±51ÎWCß¾ÇIùæpúÜõsç^…ÊháÏ~ä‘ÌG²-Ûf¿$£E$Ûw„fÇY¹Ò·
`-ÝßL3_-ßÒ ƒ2HX-Ikkk£°×´¦5­û®µK.¼ßÉÆ+/[…‚5«ÖV“.§7öØÀj{)–7ž²RÁZÝã±ª‚õÑòhNÃå5*ë»êa3¢"+)NWÝ#ÚÄDëP“QÂ½l±––ÚF½h¨©÷‰{³m£êFžødù£¿ýí£;‰Äô°ÝÕX 5UBJšÜµ?ùXH]Štk ›éïº	×<½Ñ ÇŽ¼4ÓJ½#'0ibÂ[i’‡4²äè¼í3ÙÃº¯
H±šŒµÃqÆu°&ŠÃX;¬ñ«^ä|,X{“:GÇfÔ=Tö@bÇä¸Š­[­ œíX>ÈºÒôœ‘ôÅn¬ó­gso kI$èSãI¤DþDb~êòÔü‘æ^:ÓŽ´O-a©å²w¤¹¢tgQ¯WuiiiMMEõÙ‘ÚèY8ìlþ•œuW–
¢‘°œ5ÁÖ:ã3¼¯@ªUZéB³u	ÙŽÈ|ª?Ž+òè0˜pM˜Æž;Ú™8êŽ¤Ê³ÚŒŒµÇÓ¶EÎdåÓ¸ö¤®±3÷Z#¹ÿ±3ó†	úÆUËC™¢ÍBöl6œR!¡µlU>¦3ˆmKYûÆj‚¬Ð`ûåØ¾uíŠ„¤'mÂ «®¥4cvKG;`–„µYhJHVr×¸Úñáª.Ï_Ö›ÎOÉ[Z)¼æÇªñ„—{}cµ={X³·"œ5Ävµ”D²ç¤AÙÈOìNNZ{?0Ö¾“Ü¯EU—,)Øô°ÁšXÍÔQW²¿Ps¢ÒNó—Ù Qß£æ[¥‚î5Sà¬­6ÖB´»^ä[Ö@5Ü0œµ
Ï(é(Ý·rÇB’¹ÿÁ”En¨­íc’Z	¬¦®®†³ÊÏ­5À5Lå·ÕXwÖhSó±ý¬„m±H°æEd*Ÿq7{´ó[I?>{N0g£þÑ;kn¥`F3ÖîAµqVã®g-ˆAa9A.)Öd“~dÆ¦…¶Ò‚ŸÓ¬kà4`aFEÜ½³Æ’â¬ysÍ¡P‡gJËÚZÖ‚p‘$­±Y2KM#×˜°Æ(lr!	ÉrCŒU÷¸¥‘‰¡ÔÑ¨«­ZNc8„\!$-ÐÀZ6°f¾š‡5D%áÏ¹Dã:Ö¨|œÑŠ˜©<ìé³
”î/á¦eZa´;©l¼#…Òòóe)OB}w9xm|d4çl¡Õpà›<ÿÓãs·ÿ0rmü…óãglj¦ˆÍ·›®'iÃóš7Ø\âÈÃ”e:Šž¡œóiÛã¿y›dÃcÏ)ªÐbý1‚¸%+"}›÷Ö¾ °¾héVçÙ‹Í-ï¿²ùä—Oµ*Ý_¶àêÞ¢Tÿc_>¥/å;MwìÇâÊ"ƒo‡ 5[wî‘Ídû™`Íé¯ a.5“G†Š
‹×S'S_».Z É<CÕD~Äâ\tQ›X€©ZVÀTêc•UUå¤ŠÔ•VÅ£ÖÕ¶6ÑÑ2Ë·Åk>\dõ€5Ïj‰¹ñÑÑ¥¥¹ñÁrˆ,Vk]ñÊ²P#àFÝ*G4‚»L#d„F¹°ò¨yŽŸ”NôdöOœèŠ;VC/+´ûnk\Ù;Ä„…_«Ik‚µsÈN9ƒ:£ö´Çg¶¬ù\öà0‡kî!‹í
É\jÐˆ÷ÓüÆïUÞZ[ÉY‹\Óš~¼ú×Ÿ\ä&­]™™«I6mjX´¶×Þ…´gÕÙÉí%&8ZiMkí—™Mì2Õä(VIÅ'Ê¢tBqñ¬¼¥›7r’Fb¡–^Ùi±ª
6ÍÍ½µ”Uh¶e,ZÞÒ[Ï½·—É¥±Äh<Æpì»¾óõ×M~ôÅâ÷  ›¯kÏ‚kX[Š÷ðµžÖ€5é„’F€4ñÚ	ÑÚK:+ù')îR«.2¦Xi±ÀJ QLvßÿ»û;2tèWIä¡Ã‡fá«¹l‘×õ»ºj{" ­™LÍe<žô`WSÁ£z—LfÌå8n’ýÅƒK“Éf6àwùÿSÉÜ©¥#¹KKóKØohGîÜò”¼¶ËìÍßÀ™lõ¢º©O¿š/.æ©\³Éšý"ÍÑ)Š2Ö¼¶€N5d‘ý|ÂR…XFÚ{.fd…¼ŒÄ\º£;¦âHéª ­Dâ¡½b¥ñÌ5yh¬=­±]µ$«Ùë¼ü—>aœ§Ãl0;·£OþâI›µö$°¦áG)†Ó²?Ö²kÉ_Pý<­àŸ¾>œ½µ¡ïoëV/­õi!{¡H4Ž“¦ý®ÙY¢ûëx’pHÇ¡0ƒ5–YŸ)VSj?ùXjöœ7`íTñÂcëô7‘š?êËXc°³j~ÅÆ´Ù ìÑ³Ú¿ï™íèPëš‚NæEŠZF•±„A¦8kˆ½ïi3Xk»šß^·ïÁ… Ñ2	‰‰OJDkÿÀÃšaX`¬y0ô÷UÎ æœ5†bÖöïß¼cÿž}f\Ý!XÛçÒ‚ÕŠ‹Köí)>(cMŒvV¤ÒÑÁ^C¬¶Ð€9DÈ‰Œ5fÆjA¿šËíO®¬]Í¯ž×M=k^ð©÷Ô´r;ªa7r°1k›•4²ã^XÓü µ`(¶l5pÍbF«!·ÃkŠŠjH„œŸ“±cÀ*#g\R Š³¶y‡ôÀ;š—Æ>À?Ãjgi­¥ˆÇÕXÄkç‡óÎþð˜µÔ†5_	¹N©"„‹„×mˆPI$Ý¯%²ï¬,dÕÛC4!;/M±a±Y(/¼)0RDÆŒãq(-Ü è~Ý© |B°&WXûmGGRÉ;¤F"äðê}ÃEÐ"o$…`NZÖÂ\#ÊË¤¸-”—ü¹¬á³l²IŒÍ²<”Ó##ƒRc±ìžžS|òÈ8ïÞcs$¼0riœÚÖ|œàÀ¤ñrg+y\c	€Í,^®ü)Qø(lø„O?ý¶í¸’Hú±“›Ï	A'pÄXZ×¤æ[¯|Æm®F6ã‚Áu°—ü¶ScCÌ!Åfã»øXhIßÌ7ø±n„ø›º‡”éO}eà¬©²¸˜ïÉ.rÑÝŒì,ýY/eÊƒ¬o!!:‹D¢=ÀyŒ]õÕ55¥¥°ÚÎhe}u)SßpÖîo©¯Xí?÷Õ¦ÛÚ®%ÆãÃ=ƒP„S›¶1#¸¿4+qE9¬6r"£qÅ?62Þµ¶¬°¿¼6†mÇŸh¬$mÅê Å±®am÷ýO‚jG™’d5zÍ‘b ïðcG°^Oƒäü7Ð€¹†²ý#Ìµ­Î 3±[$îÒQŸ)(Èê×ZÄ°Ft²²áôàiÑšÓ¿­µ«­iM?fZû· Ö.QÝf8û0"oAùåÜŸ-á§åÙµ$HÊê¯ÖÓ1c\Tˆf_R¢”Ž—Gk	÷j­·twëÍ™¨xw7ÈÀ\4 bˆveÒ»âqj$›ªÃñú–o>è;Î]Ö>ÿ¼»yöÏûèÜG———¯¿‡·vû&Öá¿¦V2°†þ±¢¿ÿã fÔ¶r>âº¤l7NQˆ“ÖDõoÜõ´!;H+¬´pYÈMö;Óÿ4ý¢“Oœ€ÚáCPz˜¹Ë‡(ƒD*ƒ´÷{z9w“3)Î
yüˆæ²IÂDìÜã2F<ªá¸M%ì"¡‘­=m¬¦§a/Jo¶Ù 4ßÃÎ’ìn#Ïqö«ÄÔË¼tŠQjwö6Ï.-/'&ç‡à¼Ä¼\µf ­¢ýî|ï6C·¡!`)Þ‹ð—Ò‡jjÖ¥¦øÜfYnMm„]Á¤§$`G6âƒÇ1q™^¦;k—ñ¿Ñ=kðåÄð›·f…Žº{·ÍÑšÿÄ¡$òÍtvfR©ÌG¬IÿýçO²à«Éò|Bí„¸ ¶0ÿ”Ãy[ÓÖ‡4JÉ}j¬1eäRw±ÔPr-Xkk+k„Äm¡U×ÉP3ªm'}F?kžð°†¾à^›$ƒÍ=…t´ï°ç$ok=DùKì²×8„Íàµý{X3©ì‘…²­cµŸjpÔŽ­Ò÷hò‘0â‡¬±xl
`nVh-?ÇB_Û_- Ð»–oex›3pÖ®9Ró«@<8k?Ü„Aê&	ÖHxThÿþÍ»öíÛ¿ÀxîìSñß8k@ZÉ>ÂEæÚ\¦…â/m«ÑGG™æˆkY“@±ÔØÜ}¤[­hXó&—¹ÚOsÂåZ°˜Hv€´ ÖDkxf°Zà ™³f·•ÉØÉ'Í[ó°–ãV9,Ú±qØ¬ò•ÝÏl\<hm‡´9çÕW5TW¼XCüÝ©u®êYóEµvþ4åYg¿Ãj,ßï¬yá®™QdØ@M}Knú5kðGeæ¬Ú¤lùß¡°žæ¦Yž¾‹	CXöV"RKÂÚ3Ðš¯„Tñó3˜mšÙÁõÎúT·&YÿëÍªç¾bë+7‰Nz£-3ksÌÉÏÃ©A!	 k…" {ú`ˆòLfd…Oæ©8@;Ç»úíK~<?Gk!¤E^š³sÒ§,]N&úû©ÙÊˆüõí7ß´Ñ¿µÿ3˜š(PÛý»©ï°½üÜ—È
F]‹zV1–æÏ?ûÜÙbà@­&v[Ÿ{îx«ª!Oœ€Õl+s³‹|„‰¯Š´ºH¾4	n8­Ì^«f··„Ü‘¿*7òƒŠ!øVQœ[¡æ†	|/Õµ`pU†zpQ£±	Êi8·ˆÕ(µ”ñ@¿6[bõ[Ð=¬ö»U¬¦HÓô+=£Ó‰¹‘Áü4â&«ø§¡ä¡Dã’ê±Pzè†£VÞ—á¦’X¬?+«ªŠuéÏ%¨TÄˆ±¶¥†aï~úéŸ?c¾šJ ƒ~5t]½	c33ŽŒŒ¼Óðê`ºë7‰ÆlÃµ«ƒôfýj¶ÈRKXÍÖ(5]ÄN{<—tÖðÕ]$¾ÚOþeMkZÓYÿÅÓÚ÷+È…÷Ÿ”ò¡5Ëîw”Ÿq^u›šxÌ‰­Vëá¤F}#½å•±Úhd=ë‚HyLÑªªŠ¨yŒ”j¡8¢ž†ä!5qBEuÏˆâˆ™¨ŒWcñ´ôÇ4ª¥uöÖ¹éÁ®–»wî6¿øÍWÄ÷_¾±üÑõåÄ[ËÓo)’jC™k©¸æCü=°0ÁlpœØ;¾¥hËqõnsÓ¬Uô—§Ô;zH(MrÃ|;|¸óãC\=¬±jÜþ«iG2VC¯ÚOÍû{Fjbªë¬Ñ˜|%M4ñ—îdsLÎ-ÎNÉNNÕ\¤#/šRÚò$$vÙQÝ”`Nß]¡"K½‹·¬T2qcjñÅ[ó½³½Gš¡µ©[í½‹³³S“‹½: ¡åÞ¬ñhˆð@™k,Õb¡U‚,†‚±€65Ž¤…ÉpK³AµÈskÑ™Õ<jíòõ—æÅ‹pZ*¬ÝCkúB½ÀKžË¼±Æ6iÊ™VHoF¯-àå¨g5Á¬EÉl[g:‡u!]aÜ[ÓøÔ†äà¹`ÙÙ4`r$S”f‹iPFÈW=ä ðVW7´Ì£	•F¶[,>ý³6hÍ±ÛAg­ÎÍ {2³æl#Xëô¼’R„híknå§vqËÕL5´gŸ@ÍÊ}ÖÈ
¡Ýc±mËµÈ:kü¦ÖºÖöðê1kÕ¾¿gÍAÓá×FNö ¶ö¾Íb5'ykVu¨ÔAÖ¯êæeû^s?–%%	2Pj¥¦šÝ€5àVÛ·+ƒèGþp¿ÚG±aiG	øvµ@ëè¨Ùµ<ãŸi §¦´æûöíß‘‘ÉdÁˆ}#°ZŠ±¦[ÒSó-kI^KIƒ|ÍÃ~!ÎZPéwý#"%°é{âûkµ iÍŠœGV	™Ú´¦¾5ÁZNPÿhª]e½°ð€c5uÁ&ÎmÚdUT@âíÈN”³H4D÷‹Çˆ¶ÚWÒ ¬å§ÀÚ*J3Nc/×¤õëYEH£Š²)”?%öZ!v±[M… Ée6ñEO¤…ÔæqÚzw–IÕbarÐZ§ËSuÖšÂû]n?âÊÇ!!g¦{7Ù¨Ü«Ëöo%^÷ÔF*èHmk¼ TãMsgÔâ
›eg‡íMŒ”½·wp˜±6À&¿P9E§çÆä¬%W>~<q›æµñóœ8gÆ!]_C*­ð[2Óÿ&ÅvÏÞ†×d°QX/MžÊô's„Pÿ§SBGî¶ø&6ëb3ñÀÆ°°kJŠl¬|êD“ÖÔA>õòÉ_:®úJ¥ú“Ä(¯é¤h­Õ—ž|— %ç°½ØÔblÖ|¤X{±9Ëvdg)´61Ô¬ø®Ú~¯îúÆ.0¬,>AÚH½h­š¾èÒªjŠ\ò²úÕd¬)\ä{}5-¢ûôéžøÈ4Mƒƒ=W›h­bÆ6å9tWt•—ø µ¼ª¢kMØ¬UVQÉ/QËê_¹TÛµeKÒW³l“ãÉbÆ>¬~µÛÆj7¬]'
’™;3ÙêlœG'%°Ì+ÓÉÐm%N$€5ŸýÈí½°¦ýd3[ Ø*?}wÍñš¼5ÁÚZ´ÈšÖô£×u´62Â2ÈFÐŒâEòÖ@3Uå™ñŸeW‹ìÔÊãÌLb˜úûûyš9kåtõâNÕ¢‚h9ìVË­‰*D”7rªUV2›è~b±rjª22ÔJÞo¾€œ=tÉ#½T’5vM|rç£?/ÎÏ'ýÕe†¬LûÖò·ª„DÉ¾5o«pX“Ra±onBµãõõbµ§$j8û_~ùX i«­´Ÿ;H3q*9|XIý|˜úGD¬«q‘Z»ýºtó­÷¾þÚº”vn_íœÓ$'n‡i—µp Ñ¶mI¶tpŠ¤åÉáOSké`·öÅsêZ[ú÷EØÿìF®hmrjiê¬·<5»«Mž›jç<*(Ó¥ÕÙÅƒ€1ñ7Î-rg-·¨ŽÙjÅæ¬a«cªË\ZPÅ…ë™åødjMK‹D#„ŒD"ëdªiåâEÂœ«tTlHØvCd‹¨“‘$Ðš¹on@vjÇ’‰†,éßü2+R”Äi"?}O?-5Ò´±óìþâ©úƒÕX`5`M´ Ú™5wµžð >îILnÊÎÄSÓI–iÙ¡,]5WM+md¬QÃX×Ö#XµÕAi´®ÁbmÎW
à²Ù–ù–ö>Äœ·:ç¶õÍÎÓç¼7‡kb5•A®ÊØpÍ£Ú*Vã+r¡²
MWs¦rYÿ7£5óÖ¸ÿl›¶ÚË5Hca[SªkmP“âúöJÅEÝPÀ‰)Øtø±W¡ÑŽŽFÛÚÙ® „;\Ù1òmk~í7º¿¶êÎí{5½&ÕX£g-ø!ð‘þŒý%KÿŠºÈ……â}{ö' ¿WG±˜­nûC›kêví'Ä¾Û¡æ5~·A`ÍFXù|‘@óÎæ“áÚˆ§Oª}í£VÁžõG¬rÓ{Lµ$¬¡$§¥ÞÎk8kþð8+ƒµœ Ò~Ì@ÎÀŽr2,ä\Ý«¡Œ…«›v`·B(iUãø€À2•Öó=kÜ´XšH*ªA9²Ûgžµœ«°Úu¬­ÎîÇU[Ç<.zØÔy´@!ã±²HxïöBœ³l³ío+i˜X‘Â½ìÊ¨:I"$ÓÖ+¿U 9et$4†òkâ®)ŸG¬!÷ÖÐîáŸè¼`Yw^¬Ýƒe)&½7î¹„cGvÙÈPT¤½•fÿ?öÎÿ'Ê;í÷'çx~ÛDÍ©¤qCü¥‘B]c£0S0ÔÃ‚›lc‡JGFè7™­6µÓÚòØZB»±ìb]¿‚‰=kUÔî†R–'fz¤°m—]e©éf÷œœ×ûúÌ‡›YxÚ?àðæžû¾çfdFiçž×ý¾®÷UhojºâC•¼™GWä¶ªTÙ78qåÆÛª|üšÌ˜¡‰sƒços–Ä\;›:gUï®¼]bL›É_ÿZ×ô^¿¤¡Ùœ6Ìa#Óß*"y»E• ÛéXKâ7½ÀåÅtJ¤ebEŒ[cxkïüñèµãÑX"ú™±Ûñ¨ éÕW[Ç ´wÑïQNòe‘ü!J",6»ÅÙþ2ËX µhbÓ5…N¦Çf»©Ü­ZCëlc@¶Æ†w%?»ÖÏ¶mS]cI¤‹Lµ:úÙêwÅH!¡ï!!Å¨‚¬ûaVsJ>10F
š¬5ºÕj÷–‡Âô»k0Päègü¸¶²Ræ¹i]kÌncîõÑ£Ãøw]'^{G¬†º‡uêÿ³Xí+…ö?Ïœ ÚÞ²l›·sÖXmþ’.®N˜qÕšÿ6
µ›6ÓT4k\¦}-â·`W l™ÊZXgbšî“1"N­5áX£òG+5+ZÑÿ÷J{k³LÄ¶€k¢5Mg$/¿ÙÒûóròw²RÖHŽÀ­¹Yþ¡½ÀÚáüË‚Ì
Õ«…±Õ¨(¬*…ÖêÌ©Ae]1f­UEhkK¶öoÚ„³¦ì‘aè¬3-ÜSmC¢?!§íÛŠÔüqæÁüßî}Íš»9óþ™Ùù¹9?\“ÏÇþï­¼F;š®BÚ¾]D]Â4¹izØ»òÒä¹dBÚK¥yF“FG•%òÔêZ#ÞBr°&R£õ@ïø}”N“úØ`Q	¨ùÖ¼¬I:«é,%.)hI=OMÍâ¤Qð(”³GÍÍ¶ðXR;ãw¦ÆGæZ6ŽÏœý|¦3ùåÈ,ïœIÅ™Ã¦È9þÅ_OÂañÙdtêËqu¬	ÐÆgf§

:¥$®ZV'ýj¥këëHî¯/ËÊ*×Ÿ>]V‚Iº
#­ô4+6î‹O„LOR³ÄŽ¬Bþý…kkzxºÒöm=jyX[ðØtÌèÏÎ[úYéßï¶¨×Í5­ñ¡’HkÈ`M—ˆÝpªž>xèÐÀÀEÜ5a$¿fº	¨{”4%€§ÈßI¡”.à“Êœ£0È Ö”æˆƒ!u¿©ÝH|
èÏôè 3Ü5î³€CS
ÈÿÓN–À,25®’HëYëVE¤•A.Kkˆ’.n™¨˜[-Õ8hÖ|ùcÁÂ.9|žSR?€Ví[Ø@KÅ/O¯ãŒ‰½4Ò¦¬eXk³6ÈËWÈâ†np´½·×ÚãÖ¼Æ¦AkÄY,Bfn½³¶|	¤ö—†A*Ò¾ «¬*bEÈàwÙ";v(od;û‚¶Ç;®b::„m×YíZÇìë§O÷NïæªŒlêéî¾ Ž5Çiî‹Å¡ZúÆ ’…•wÖÐ(¨×àÌiùzH…{ÐF¶Öl v`¬i¡R7_xj‹µtñãbom«ž3HsÖ¶0JE1Ùd¹õ>¼®Há•Éý‹{Ö`1nËŽÅæ˜#5?»èaÐë{ª …i~ëAM7YSžˆx«²g*H?
Òˆè_SŠY†£Ö|êÔ”Ù×ÐXìCª±ò!#¥÷—kd6´F[4Ž×ÀèèÞŠo)ùÑ³šº½´û´ÓsüExÏà\¶Ÿ®4WM½¼t})KA}œòÜÛOmY‘…z?*ÖB!.`éD¡ÜP¥&yÓÖR–Cnœ5)WÓ&ÞëJM\™øô<Ûr>uõÜÐÐY+fçàg³Ü¤&Ró–-ƒÍê!Á„·Lv9)¢\"8…šHl¾‰­¦æ…t£2±|êˆ6µ²]“½fl‰øk×h[CJ‰c›ê‘8úÂáò½Ù‰˜À…ÂÈw^{ÕYl¢6@]:ÉOÆ±µ4°	Óì'²1rÛ–0Ë-V‹&KúihÓØ¶êju°‡!µÆêä¦ðá<}?(ÈKˆîe³qÂË±ÚG‹Xšl.„ë{ú*ë#*‰ƒ¬¡L‡rÍÓæo]™çË+kÀCæºEè?'¸ŒAßü-@¶5Ö¨®O ]®_íM|µçŸ·ùjœÐ]ä]{N5¬Ý˜Ÿdþé…]—ÎÒ
ûU˜†‚ikVéåCý=’¡Ä&¸ãam‰Š2­5É[Ó¤5–­„‹¬hE+J{k³ÎZë‘è[»=6Ð‡pÓš}ÃšÞgXx‹Ò„¹lYYÌ5©Öò³ì3ueÖL¸¾J]]UÅÐAýõYÇÖÖ›rd¸MÅÕäHqcÛ¦z£mìâ{ý/¦€”QÐ–<sïæäƒï¾‹ŒÜ¼yÿfû,ã±ïÝ3Rcq¢MÌÃš/„ä†Dg’Û¦qíNM"µ?ŸØK!¥%å>:Ä;i”œú¤ô.ºÁ6kÖ¸ÆVeœe_ù?¾ìýî¹É¿ß'NJÂCÓÚ*•î,qa½¬Fü²Š,µ”úÎfgg
¦F <ëx ;M5“3±sâ333¹§æ>ÿòØ±©;Sñ‘ÔHç³sxmw’ÑÎÙËŸÏD¬åæN%£ÈŒ4îån„Ù«hT,G$¿‡MœJKÂÕ›7íÚUqcˆ–”Ô×—­*Ó 3XÜlv+kð™V1œtt3Ôœ'Ù£VCÂ{oš¹¾7DLâŽ™Á«±F:¹e&I²¹¨qJ˜Q6fÍfiÊE-LÉU²á‹Öº’ŸÕÄXl~4°FÈ[VŽ`-??ý9MÖ¬è3Ç(mlÀé‚¥÷;ƒÃM Ž!²_ðÕ‰t¤{ÖŽLAj}*œ´c< M~XŽûòÜÆô]ÁÚÏ—¥5IK]5¾$›q™fb£Qk½Ë¦YØ¹ürqÔM‰Ò 6Gk6¯X[ÖXãù%Ö°˜0ÒÓÞÐÑÝÝ+JëŽ÷vw™àé€¶ë¦bM½EÏ´¤WK5ÿÔ™¼æ¾ôˆ gÍ…A²*¢kÝžÝÐÈôžg~òÌ³›+ªíØ®-^šX	JCkU±}G…`’vÃëÌÃÞÀo±£:³€‘` ¶ÀL˜æ8Í}™×‚¡ØêÊ#ËãzÀepÒŽ/#ì^;^ßxkigííe5…‹€k™´ÆÍ›sÖ2…ÃWt}ZAýëß@¸”Æ
ñ´nº—¶¢Ç×QœºáŸœµÁÀXCP™Ý‚)B5»=k
é{øÆ¬¡€Ó¦¹~5‰1–âÏWBo!¤è~¾–[UÉþp­-²2I7›AØÖ6V®ÜH[¶Œ’4¦·d\4Uï¦« 	ÑnúýzôÖAÁš5YšÈVó÷õ>“U(_­Ð'ùëÝ'Où¡B•^ÊÓÓëa¯œWE,‰&yÖŒ#Â¼¡¡Á¾ÛçÏßnîãDJýãÄ§€ùùÛCTGþV‘þb“2ï‹Ö.ßäüà2ý­$òj"e°½¢+œdöñÞf%‘æ°¹XÕh©#:‘½Ú4±õ_µ*&D†ØÑ?üMq .¦e<\“­a£‰HsW4š d„h¯ž¨"$Æ£^CÙƒ¸‘¯‰ÿ9]C¢µVj+ƒàIßhÝEä5êcºµºpÉ¶M»Jjö6~v-q¸±Þ³t‘º~ÁZöbVûi«£°S)šÿH!!sMY¨²¾¶*Ò…kÃÐ`mÍ^EB&µ¿­Ñ†›—V@™WXæ¹ëúï†Ë»¬!`_­ùg;ß°YØœÕ_~+ÙÏï‚ç4XK}<ysòÒ˜Úô©sÜÂj­|2ŸÕï“—*“ÏÐâ;KSû×gàZ¸fÎš¼5XM…+e+ZÑŠ‚¾5
­ùBHfbo±)8kJð·Ú-Æj\†¤ˆLâ5ÚEVÊV©•ÑäÛ…³VVOåC]XmÅ•¥µáÃ¡ÆþêþÎVÈ iùýÉèðð°®‘J†p—-9ªïŒö«¿­k8þàÁÌŸ¸€×õ`~rî
Ù†ós÷þ2ŸvÖ–zkHå"6d³ D½i¾C;¢ÇÃïa¤Ë›§¶à¦íÜ	¥yDË„4ä	ÍôáƒœH>|ùäÉ§(ÓxY”†Xí­I¼ž…1-ó“Oêr*È2D¼,„¸Ín„„Áv™û$>5ãêãã³wZâì9ªæîÍÞ‘û6.çlvd.¥¸þñÎcã³ñÜøTKg”Ã#©;IðmnŽ¤þcÇ0Ór“*‹´ÊÈj«·oÚÈnÔÓš`^Áþ$ª/Ó¤µZF)áOƒA½uüËDkXe>rÄñG}*¶Ã3'·ëó ÙÕZ›µRf!££0³Ì|¤´ùÖ53Û$—Aüvòá¯ý‡€µ‹·€5«ƒ$ÓËÅ÷Û/Ã/òk¹¸~ÍØÁ±¬®Ú[¡fVž”“ãa¯-‡ëø”@JÐ™xÍËáZ;ñª”WF$E|	Ìt·£
»0Ú—vÛpÞxEƒ––o‚•ø¶"þüüç?_†Ö‚bÄå’6PT«`M+/ö}ó‹5°™Ì4M!^êfÎZ2ñåŸxqdð¬éèhï†Gº§§‰…<CÄ†aŠl_©BÈôèh–Œž5vkÆš{òq?Q}n¿sÖ×”iŒ5ÀìúŽGŸáÞîgŸØú,˜F@þ4•ìt íPÙ²c÷í[Í À¶á‚~A=|*ƒÖT;àœ5nÈÅÖoªe8kE×¯["_hYgM/†*H¬-ôˆG5“`M¬æ¿2hM_o³mkÜ¬g±Ä@r&bã©=‚Õ×+N]‘À‹\ãÙI	`Öô#ç}ÇÊ˜ŠðZæPìó¢ý@×Z€kæ©Y~¿P{¡râ ItT$ä*áþ0($ÃkSµF¹Ùm E¥«”É‚ŠKA#Ê9ŒÃ1Jä¨ŒxXªY"¤û?ßŠ ž3sù¯`V–"k—Mj*ô_¯`‘Ÿö‹õæ¦·B› °ÑW'ƒhTãšÊ8#i°Æ`}½ôR"óÄ™vv,ï­1xmâ·=äûO0€¥®\I©_™éšß|Cm…Ä™arRÀFÙ¼,¶×IÎ²‚Hñš€lööö<sØÛ)6R"#œå8¿¯±#pÄ† ´¶øŸÀ+&±1q‚ŠØJØ!ûÝ€-Ÿ}ooMMUv‚ÇÑðeŠ¥iÍ<6R:E“‚52H>cãÀÙln¸o¸Š“	×	7'ëJ+‹‡?»Öv¸š&ZKÄ6%lv&«‰›2Ga°6˜w8„©¹&Œ[WÕE?Z[Š5’IÑÇHv,n«Ú»vM}8bC×ˆ9«k½c˜SÈˆ0tøÕ ¹–-òØÊ¼ÅéËAék¬ö¤T?~|ÿÒÄÇ“ÐÚ§ù|:?˜¯>,T˜,4ÄvØ˜<ÅýLûùFeËˆ£Î„kÚºÝ@åªƒäæë ûÎ`­}²’/²¢­ÈÓÚ,°¥qC¦æ-}ViÓÖ 5K0ÊÑ‰‹ŽDå®	ÞËùt}å^Š[Š5À¦´ªž–bN®5{«°fê†Ãa
!Ë‹«ˆn
‡kÀ¢wï,ÖJû»4—•ÔöWàOñE[‚Û”Œ&yKÖÇÿ”hEñ‰¹ùSn’á???ç`íu2FÀ5KùëbsZKWCfH;Úã Ær„÷iÙivz7í§V<·ÄJ(Íë† sè¯Ø#â«Áj‚5C5kD‹˜>vÝä#wTÍHà~z¶nnJZw;Í7›ÝþpÒ’F¤hm®ß,¥ÒÇˆFÀÈLûd73>{ùò©‘Ë#¹¹FE“ªÃ3SÅ#´üâØÔÈ—¹Ù“¢²ã’ -¹¹ ¿â¡‡\	¤¼6Uoî‡›×V¿¦¬d×¦ºúê‚ŠmêÜfØ*‡¢™Äm¬‹ÍBsÕŒÐ<ˆqq?ËŒ8=ÀÃZ0`Íg‡8	Õ,Àßv}4ÿâÇé2aÌÈ¹È'sÖ¸ü›Ajÿª>»Â¬ñ›9xhlàÐskµb{•œQùÆOäbŸ´¨{ÊC0Y°ˆ¿&ýæÂoœ«&Nkï¬Å¹˜nù\~Œ5P2kc+Ã}sÞZ;°Æ¯ªÃGEòmÄ·Xkµ¶¤mlùH“F^?)0d ¦ú	_ÇÔÆ•.‚ôÔŽÐh 7²ú¶ÝkKÃ 3µÌžµÁ÷Ï4Œ÷k½ëŠøø@ ¢š£OØkðL‘ã´LÑÍæÊ Q"Ë²Æ
œ5cµ·èYû´÷	«‚Ü
ž\ÿÏ>=ûäîX‡˜Yj6V#edó“»[;b@©–µžööÞö´³æÃ •Ò¡ùE7m^<&#òq*E‹ÙÌ±šG7m42œ(H:¢`–¬-%5çžÁj ›?PÂY[*—íBˆˆFo_‡ÓÕBBkðâºé‡-³³È8:è ÖôS×¤CËUÚ"kô¬-ñÕ–É‚Ì(MyRƒl–¢ÏÚB8LzîrÃ®R$qyfŸ±¥¡4ÄÍÚÛBL€Qí!B;Ð(Z3Vª …jHw(†å‡?Ú¬Qà(g·pmÍò´Vž—£¬ØP¡UDf1ÐvSâ°¦VæµâJ¯€—ÄšYÖ¬qOj¾}[¤kâ¹õMÜ;?q‰ðÂçÎBkhbh(u¥hj»
­Ñ¸Œ(áA›
ðä¯¡W$€MÄæN/V×ý¯/9‹-Hy÷È‘wå°lÞa¢BZÓJ‚XnlvÅÆ†£–j¬a²e¿z"œ­¬‘£<ðã5ÿÓ@*xÍv¦¨YvQý8‡e¬¢ýû9&]cŸÇb²çñ±6AS}e?!­?ÓkU‘ïe5nÀ›ºÑw¸²h oM,¦xG5¸×Ö2]®µ¿:vôR¦#áZ`3QZ&]’Ô³½U•Åµpf¶eO¾f¬6œÝˆ­v"-‚¯¦Hç«¹k¬®f"5yybhþî¥»wÏçp<o°fEŒFfR mîJ¶öl•ãVÊ²•¿±ÒíŸXm­3Ö¸çG­á­kDk?ú/+ZÑŠV­‘Û?K¤pmLUÒ2´li«å8XKwÓÚÓ<¤â=³Ê#‘Ò²*RD²*Y—„kB$•%˜4XfÀZÉš &¬Fã]áêÖh‚æ´V3ÖÈ©*-©c"ó®êD›E¶&×ïb€^[2Ê)¥­ûæ7sßþqîo»?Éµ®ûÿ äBF¨óg†5áš;­I¬Öl_‚ÓÖçEÅÍc=ö› <„ª¹ïƒ4ô+ôáA—û?úè-0ÍÃš	d$¸_¯‰kN÷1ÅÐH|Î†^[¬ãœµ›;C-U±ÃbE¸‘ºßn(v–¾³Ë³ìÌŽcžé‘sw(ˆœ™U™Ûø—s)eŠ\fÆõx\ñ€à †úÉäìEGÙvvnì„ÒŽÁWg.Õ‘ÙôÐªŠ\u¯E]Óš¦c'7U³‹ÇV†µ¶MõÛ*©mk,³äGU+‚]>VDÍi‚5¡˜÷ËVKil[ÜU¦úÁF™5ŒÈå<ú~4?k&}ØûÛÊkîHàÎQ9vq_úÊ3¨¡:Èt1ÔïÿâÓÀÚAÁÚÉ}£ü×¬”,‹;)´ñ8zÞòõë‹•TÉ_&‡jHÌ¶bÅ÷‡²šÒ¥;m2|W[%Ž‘Hœ0HƒŸ†x$Žkæƒù(ž«õõ9,3Ls®ì–¡·qÖ–Å5ô=Æ°­™y±o%ÚüÄ€-×øo¤‰MjÐK¤kq\/%ÀZ&®yg-€µÌž5*»zwWÀ"ÝgœSC}áðrÆrEŠßÐ”î[[.RGù§uTÆf©‚‘ØA¤nøaÃ<[)ƒ„Ö¦×ÙXì-Ó[§åž]g¶Û–Í@šºÖZXÓÌ¶ÙRü_ß+fëÀíìQ´È¯DjþË[kN¶äŒd”AB¨Ì(ð±iùh‘€ÖØ¡[MÆn[32F¦Åjº¥sù‡|Óšûò˜Æì²tkn~_¬–ˆ}ÝºÖ¤­Û:ã¦ïáïo0‘º¿4Ò¾kMUÌXÓâµ†5sÕl=­Å÷¬•-R*›Ö²°~P—…~†·ÒæSZžŒ5\6(BB"³Þ¨4LcËÉ¡’@þœQXÝ²äþô{8íGÜ!¹_í"å’*ÎÙ™ã«³|o¬)ØÁwãFã Ýõ§=S–¢ü]¥›Çí^9–«ì¥„è Â)´!p³×n7—÷jhã½£¹ùü×ç†S—/}:dš8{nâÊ~ÑCŒÊ”»†h`ÓU<Ê0 6ôË4°›oa;H‹ž6›ôÕ§`Ž7&’ÙÅDZèÈ? ¬´ÃÖºH2Æ¤X_wâxëÑ£àîšHbKtecxÅN¼‹ûví8ß¶t?‹-[cI]Q¤óÅ,ÀÄêEû­]›l6~ÚwÌÍfWb‹,æ_C êê“­ÕuiXs¾Ú÷±šsÕø7“î|r¸²¸Ž5f^ÓFBI-z†(A•
ð¯~G¯£­1#u:ûhNncôZv„	Ü¢MËPéª¥]ýˆc5ùj÷Qþ,TsÆš¥õÓ÷µ&å}=Hâš&[s/ßd…æ¢qs« wÍg¶Z
k©iAZ-ÞèÆÿ¯Ðš7×¨ƒ\µ­hEÞ¨fYcÜÑãc[šÖ»4Hµ¸ÁÐûå:½eåçiRU¨¼¦Š¦²’RœµÒ5¥Êv*Õ¬µÆFÁZ¸¤¬j£Ý˜‘ÆÚÚêÖd[£Â ’	Ùnd?Y ¬UÖtãÒÃ…kµµÕ·ÏÍ§úïÍOÞÿËƒÉÉûŸ¿­Y~ÿ/	‰þïB€ÿÿ¾ÿÁš“ MuÖŸ–>¶eç~jÿØëk5®g_ iÒbFc…l†é«§N¾¬Ø®§«L¯€5CµX›SˆüuçÞÓ«]ŸÚì')€Ôw.ßÙ<KXØœ=×t9NNwfgâ©«”ÓÅg0ÛFfFæ¦Ý85Ž{¶19Ÿ™mŸMÍRå(W%·“bÇ\±Ù¦3· óø±c@ZÒ`íx§N©Ñ¤Ôy<Ù¿iÛ®ÍTDl¹j˜£¹Ûv%¥þÚÚ]ô¨Õ×k:­f0@Þ%ÀkNŸ6ð:}Ú1˜}Þbãç­!î$–f5k‹×,èÖüiK“Z@Ç±4¬!û>_D`X½xP•P¢5ã¢ç)†„ÞhfÓ#€µ¦±‹[áçP¹i½(îéó‹aÈSó$åk˜ËÔW²f5ªúXÉ)k£]+D†ÿ0d¡¸uÄÉ†4É-cå(Í%úÇÓkmS°W¶??ËÁÚ²]k@R&'yTbÁ^ÖPî"Xó»[8Zà`mAn °fD)ˆ“¾ý¶ýåŒ€‘ QF¼È‚Åeâ*Î…Þ†ÞgºiÈRì£˜ÁlÝQýc“)ˆÔZ¼>Ø(ÓS[ÆR< Vœ5`­ÞÙC$½Y >Ïb)µLï©Ð?ÌôuÌ47jmûží‚µðª±›ZÙzYq4ÓY³Á™VþËo­e”A^À5Ö:ÓÚïxrs{½Ó8 qì‘Ìè~ZÖ–k,²Õ2€-p×Ê 3`'qûlõ$Üïu´Æ¿Ìô:…A®Ã_{¿Éÿ¹àw8kçMAËšïZ3v×¼¯8k?œ¹Ä\cvi¨”½Ò#å_”ª’X~k”´+¹_ˆÆFÈv*oµŽá‚¯Rd¾ì6NXÂÕßa©r¨i`Ô`ÍXÍ]£qª·Tÿ¬ÿù/ŒÞj¿ÖïTj:¢(Çüe¥ìž™Åš`ÊñŒœê¬77‘$oÂ9†ð:9¨¬m)/êÛŸÏx– òöÄÐ€‚ý‡ÆÆhg;OLäù:Úieûüó›“:	Ùl—!?Flž×ÞúŽ ¶Ê•D>õÜÓäúKØÞ T‹x¯òw}™¿ûgSÄè¶˜øÊ+Ê‘Åã1®„ÆXœ/¦ßb?V[{­X›“ØO)VÉÂ,nä`Ü»f¬i«±¬}Ç_º‡—nlM&X-ö=¾Ú9¤“¤J Z7ØÓ®Z“uâ½’Ì¸¾Ë(n}^€,õócÃÙ{gC‡ÑVuÏ%Ú†ß¹–¨,ŒTóc˜›«¡á®ð{„ö“)_âÞixsùèC5ƒ5ùœó““—/7ÓLôåyŒµ•I»j"3K~ÐZPï˜ÉjÒ´Í ³Œˆ‘xkÀZ9 ¦Z³:È•8È­hE¦ÿú/³êXãfíj=}¬íf-kÖ¨–gÞ>{:)ºíº~Ô‹PFÁA™²˜t²++‹Ü_B·ZY½
Ò±ØHˆ¤9Mqô·ö·Iý8iVŸ ß ´êþD²-Fqyu?°¦õ·õó}N!í÷æ'jh_›ùöË«ó7çø<H}y¥qÍfÓ|µXo9¢ŒÞ4¬Ù	î¿K®¿AbbÏ¾žKC7ƒ4šAÚ¯†n|$)³‹Û×|p¼ôõË¨±êI_±a¬a­	×îzX»Òžrýf—ïá…]E4,ÌÞÈè_ƒÊÄŸ‚¼ 2‚C`´–´™™¹g±Ò¬êMFgGâ¸'¹ÜÝ8ž¤ØMõŽS0˜}H?¬Ál¹ºå&7vBh°:§åkQpM©ý¶ÐêWíJ‚wàñ¦Mk«êÙU¸r}ÉªÓõ›6W”¬‚¯wÕ+eD5>3±ÁZ[Ç¢ùØ±˜«‡äžÿ3²2AÎð,£kÄ‰]ÙŒcX¾»Nùgß?vX³ËëÏÛh"-°šª"]ÀÈA!È [D1V¿k?(f5o™Î™Ö¸V!‘Þ/¨«kèjï¦è±!Ò!eD´†¹6%ŒÄ´ô¸™òD³´„tq=DãÛÚ‘ëY3\Še¢‹çµXËpÖlØZ k¬µá&ý$Mkr`6æŽËD¼Z0f<éÈQ¨¶\ä­t!dð2zÖº¹¾ÛÞýþ²;Î\0$D’ÍÖÈŽf­›F2³•žþÆ‚A_þÉ²¤2pÖ,^DÎÚ‡½°šòD,Gp{dÝºŠ–Ý{¶oÞ±cúq¡lÖ[´W¸»B6Ûö¤6Çi»=6Û,5¿Zê«q@œÈG÷¥.¦4Û.ƒÜ@øÇôR¤UfF÷©)“1¯yRc/s2ÎŒ¸·Ëüž½¼<M—˜Mã3Á›Ššx%Xó½ÔY»ÈÂW€kÈrGôÍEiÓý`Ë‹Ç4·.5­RÎH%êVÞ /Ø&zä”kxWfPa³‘Öjæ o/!}‡,Y¨o
Ùh[Ul?i¢5ÏjªÐÛù/¤§õÿý­‹£<Š`¡,ˆk=9yÞàÏ4ùÝ:¸ÐÄ[l3b* 8ËÏã‡â4[‡R,@ã5®Z£bMöË5ºÑ%£Pâ”·zuóþý·B}7RÀÚùOßÞ¿Ÿ_ñyüµ+ƒÍcCPÌ3MÉÀ £\Tyó&¸1Ü½{Î6ÍF¿{…³ÛNS*ŠôÀfÄ¶óg[NYM¤«ó§(²ËbwÈÆnîJ“³æ˜«5ÁîŽrÎ8šM×QW
É¦ë5¦c+zÄ•D&¨¬LË*+¡#Åûó$`Â\3B;ŽØc-ˆ‹ò§Åv¾Rá"Ë²šƒ5ó¸œ³6ª>J_ÝÞá¶pÍ^~Ã<ýïÔ\~¡ŸO—^¢†|oé%†«Ú®µf†cu	uÛyX#[¤ªÆj ¹Z+V;)ïžç¼ôú]›®&X»IýÎüå³Á<‰yöZk©;wæ –—ÏL\óéý2ÛXüÁåý´`­¹k2}¾msm%adE+ZQ@k šÓ Rz?S=µf5ÌÚ‰8ÃWÛ/«ÍÏ„TŸ—LkêK³ØÕþšµÎX«	ÕÖ©Š¦K¤ƒ4"	ì­Öuô»´ë“¤W„(eñÒCEL$é
Ç8žŒ_™Ÿ¼ŠL}Î\Ÿ¿÷åƒ	*!%Š _7gRrR¾„kÂ¦ÍÁZáZ8íÔ–¯T$ùš›Œ4ÅF'û´™vàå›i,ÆiNWi’®òûú­ßÝ½ûnO‚j-SÈWA¦Kßyqó©;÷>w=jg9'_M7ÓnÆµ«#í#g…oãS©‘–™ÔÈìlË“OæÂÇï–Ù³ããSjQ²eJî‰‰Æ¤Gá±c
¾6â¡C|Nï$ã1™‹ÍÕ¿+mŽã»E%5QŽ%„VòPu2—âG^ ¯å&7—¬.©'úqW]EÉéÕeu›**¶­ZU_«yf<1mgM²;Ò¢owÁ:>D$¸Z½ÚËv}šm4"ÛkaÏ%Àþ’ˆÌäí6SŒ®ŠÇþz2ÀòÒ(bÖ,RöªåøËWƒÔøðòÐÅfêrhNÈ÷Ú‘ÚŸ¯Ì9µÆèélrWÃ×÷&ª?Íl}!À¬K³°âmÌU÷Ä»‰}ì˜Šôr8.:›b%Ls’›eŠ‹Õ:Òß j|”1_‚5´<0ýçQPKKµk-Á°5Ïjlõ­	ÓÆõ@ÑZK‹9|ŽcÒís~ÎZðÌµænK5ÁÅÑèý¢éidÃºÞ"`­	X+Rb•†Ü¡|Çx†•ï[c/È9”1`mù"ÈÀXs¬ªÉYCowìØ½ûI"û DÂkë¶·´ìÑœìŽ^ýÅfÌˆ&á÷´É6V3œéhpYErÖ4f[¸XðÖsÕt Ð[ÎY»€ÀŸÀDs+Ÿ™	lxj[v¬fhéÓ ™ŠekA¾ˆÝ2pMÀæzÖÌMcÅ¿G k€÷™ª&T#RÁý
ì‡Q–zDQÀÐ™Îšd¬æ8kZ€9‘šKƒ¼þ½sÖ¦m½h¾šsÖ„jlÊ”YªÙØ”jhšJ5Bò¤Ö°±Öä5‡Jó¶4ãØ[°Èj*q6Qí²s¸œ³æôô¨ƒµ§ÖšÖ¼³vðâØÀ(;F˜;_ˆEDù­6^þ d™'xhæÃÑxÁÔQ‡ˆóWe&·rÐ¬ÐF±“o#•2ÂíTžåY¾¹å<Ú¼ÿ~a_ß'©cäùmÙ
KM!ôyy¿ käÜààÄüe^s­Ìì €AÒÐl2GÌa3)räÃ—É!× 6Ol/ýûè«SÈÅDšþ±ÀkÙ1´@l¬Þ‘±ÖlEâ5‡O	5Ì.Kdgm½– ’ï½–PçYl˜¼}´è§i¦›òE>SV$r´&X3L³•¤£ÀàgÑÅ¬–øjT¸øñjªÉã¢]nµ¼2ºÔAaºZ,ÑVE…lUœÕk­×ô\Ó¥@Gýr–R)Þ›Ýz<±—HëÁã	ÅjÊ©Úûî›n¼Ú/ŠÕ~÷–ž¼K¤ºïßO]¹4yvbÌQZVÎN®W{Ð²µÅ†Z€rlÃšïLó»¶
Èly¥i­o½Ñ:#­$Œ¬hE+ò´ö‰XÍÆzÕDk¤ ¹Rm-¿Ù†b—iÞO¾'¦ôÛ•L}áš‹\¯,«a¸r)Å‘bu!ÎŸ;”@†‡É¢¢úQÎZcSÖÚÚÂ?”F¨U­:‰ŸÖOùcW¸qSÿp×{ÃÉ¨”Œ§&ï·ïÏÜ{Ð?uvrnîAÁ¦_;k­¯™ÏðwÖÚ‹¿Gàš»&`ËÏ9õ­lv\Ùî/RøÏ%µC\£õ\nG¿òf‹t)­s,¦KÀÚ]å*¿õ2 ¥ý^ÏhEÀ¸Æ¬^Î/ç'¡µ_Ÿ;û¹Å=¦FØR‰yÆÜ4¬3æ¡]N5ŒÏY†?íi#ãwîÄãŸ|r|äj*ž‹}23¾q$5µ1÷˜†u¶IŽÏd¬å’‰¢Z©èXãžÔ’Q‰bG­;Ù©vÖ–ZÅ®M¹ÕÔ=ÚÍÛvUËGÛVrº¤¤¶¶¢¾ôt}AE‡VÕ×ÕÓÐi
 4_’ÖFk¸©¬¹ezh«ñX?QmIlvPé¯-Jþ»é³]ÆŸ\˜©e]Ü_¾ÿ Pô6Xû½ôÆlµCÏíÛwQÕE‹%x¦<i5Ÿ¯H{Ë¢ÈjmyÖÚ&õ§¶¾¾âr+4ƒÒê˜j §m¸AØð(É¿a\ó¯ñØ,ÿ‘¤}wÀ	Vˆóh5³AjïƒkÔBzgmÙ@È}¿XZéaÍœµqMQËŒaMd¿v`MÞÚ£
ò/g­Y ä°¶”Ödn-?ÛÃš½7ðW Ö6l˜¾¸TxÁšÐáz/7ÛnMA«Ú‚?ðO@¢=ùÒIà>Ò;kÄAkOîØ³C½j"ŸÝ{Ö­ÛZ±ywÃúØZ:ÌkŒ]ñoOìÁL´c½¼:ÔÑ`Ò?£4Èô”5-XhÆk³eDŒ8RÿØÁ@™”–é¬yf»NèÇº'œ©e:kCæ®6¶šÏî÷2nXËtÓlÏa±ý×Ù¦ÖX4{CÓ†éu×íÕ!~WMk‹5-‡|$–š[L‡Ù‚|ÁÚûñC?Pùc–  ÒÑZ‰\5ÚÖ*Ùâª±—§òGAèvV¸×Gà4MÅñÍæf±ÚªâæòÕ¢]þ"¼)¹ž5ºÕ.2úØhP)™¹®6¶U }hý–}cÆ.V´£d×|P&¬W˜<¬‡gHi¶¡7ü?CªqWèbPx¡zœ
ÿaËBá‹f{kb\³€TÞr{ðÆ¡¡ž* {š÷ßJ˜ñõoûz®y•ú¾!¶—)‹ª¡›jaS*ÕeEkXE$Ìöºä[Ø^þðÃ§èb³`I£%)'yã7;Oñôð›r"±ØÞ{UbÄ&u˜u4°ÖŒÖÜªëÝHê1±µÊH¡ûfø¥ÚÅì˜i¯ùÜ†¹Qþˆ @ƒµ¨Í}E®É{c-ý0«ãÕÎbo	ÖÎVÿúG"×>KDÀgæ?”ÕÑ\‘ˆu¥Ø’W¥Yâ‰½Æªâš¼c ÖÔm§6>ÕuÖì=òæ)àöy²EöÁj-r)¨»”³öÍ•©ÉÉÔ`Îc¯÷ÇÒ¡ýY¬\‚ˆ¶ùÒNÇjŒ`KOÇFîÎRäa£¶ÍD4´aQÓ¨æÛÖøêYµ­hEúFb›úl(6ÊgáÄc°V^è,µ#ÍÈj"	êpþZñ{ï©,­©Ä›¨×T’6ÂŒ®ª55]UÀZ«0©µá:ÊIzŒq§ª»ÚÚÆ÷˜ôR«©SM­j±6fg3P»­í½ÃïÛy"™l™¹ò—?ŽLüí^|ê/÷'?žkèøúk£µO7|úú§ŽÖ¼·ö¢ÿÄN¹#æÛ¿Ùù»NÄ¼Ø4zøàÀï¥½bz®4Î¤ÓÊé¬Ó¹K@™àLXˆøÀ‚µN©’¬öKë?—Ö®¦À°ñ«:¦ØŸ‰\Ý±QcÐîìh!uŠ››M]ž)¸Ãplæ2×‡ðñ©‘³ññ;³D¹˜n$?þcÍ`­“UçÆ'7ÂiÆk4©kj`ëÖ,Lå*›?­ )ÉLÛ¾ySuÅCÛªí5‘ÛvÓ¿¹ä4¿0¦`—–nJæVWWlÛöã]µe ZÖ\-¤3Óì²ÌgI!C5÷8¤‡¹»N„¦]¿^¸œíÙLJgŽ wï/øiNêlËƒ¯ÆþÕÁÚO‰L£šÖkùP·ïÐû‚5h­xMeMëmF@±>‘ôVLêH1°¦&µõå‡÷–®.Xï"Fú0ØX({º¦`2ûUúˆWiˆã’™‡FN?rþšj #ƒµ?
áz;â}MÝ"9qmÖ|v?‹SP¸ïìdXkp÷rÜh-þ*XÍ¡U;X{æQÈLR¹¤
!MÉñ`-îr){žòZÎY»µ$’’Ç	Öœ¯tæLwïô™Žiì«ëÌ¾6hpU6Vì‚ç³@xm,Äà‰qÐ‹§¬e8k½Û[¶ï~æ™gŸxä‘Ý»!’éÍ›Ÿ!óñß¶+ÒñZíZ-ë'§Eo½BIH¥½á"þéº{?jÞVcc~Z°ÒßÌ,ƒ,Z·µ÷ñu€ª³ÏQÚw×Ý¼ÈÙz•§5OlrÖ0Ö2{Öl%NsæZfÏD¬YÍ©ß5‹æ8Œ5k[m,öV‹È\§!xz¤|5‚:Œ|Ÿ³v[÷ì sÖ|ÀÈžý§e]kš®–6ØÖ*5ñ·"ÈJVÀZ¹’ª°¦8’áäæŸ·É€€HÅ¢$¡6–6jw Rºxk¬±"b„¡Yü¯o¦:#
‚=y±PÃÚæí¬f»­-ç1ÅkCYšòh5ÒkY™ÕÇËX­JL!cÈ¢üW­±*N›ÁVY®éà§X•M!(WC^ÏàpÍ`m¬yË ±„eœJÝøŸŸÜÀtë“Ì}ã¼µoþ7[h•÷uöÜ/!6ëbc›ÄÕÅD~ðœû[Läóæ°ýûK½¿¦`ÿwÑ'üèl”ÔÆ&dC-î«i‰µa´é’W•PóÚ«]­º£›6´,|w\~[S-:)SÍ¾i°f¡"¾wü&ú¬öÜ?ûj¬¯’ò‘J]ù„˜ÝÈp×ÿ<SU–ø,¶÷pd¯†vV–…‡™Îªtç¨%ú›m‰p~”ZÕbžÕN†Õö¿Dp(9O¥YXÓSNNÚ³Ò’@	Í×ƒë›†ÌIjJg+“ßÃšÝÉGZé¾;”•1^-ƒØ£i‡­»±@j^kýdl£5ñšwÖVFV´¢ã±„­†4iŠ›}VÍ—µ&Wó)Ôt¹·&)goÞ–*ë	Ì%b¤Œ'dB†ÃeÅ•‘p]8ÌÀkF¢h<¦ÁZ+ÝÍD²_ûÿØ;ßŸ(ó4ÝŸœ}}ÞžDÍ1N&¼‘ð+¤$bC8„ŒÑ”•	°,8/:¸¢cS"åãŠLë$³Ìv[Ó=Û,ÝÆ­4ÂŽh‹öHèmÔvvlºS-4t´=9´;ÆÌæ|®û[_žîÝ?€«žßUR`ÛT}êºïënÄ[#9¾‡Î)
h¨¢2c §GE’kï\ï¡€G(dOûõù§±èïŸÑ†ý|<ÞåhíÂã?%/Ykÿá­5ç®¥÷ûË¿ýå)¨J7éÒÆ"Ò@4Áš¢U<k¼þóc~g'Ô®.é
+…."Jx>6Ï¨1þk|Î	¨± œµ÷éZS»ûãñšØÍÏR7kS©§A*!2–2kma*öp6§ëf*VÏí§1AšŸŸš×)†[Íîzu¤Yw’Áun­ç‰ÌÞ`U4¤`í,6D•#þ~ãê´¢ šQkl+·Ï_ †µêºGzOkµ¢«íµÂæº]»vm‡Ò¼„e@®ƒÜx{ïžq¢­?Eî²‰½¹biVÁšÑ÷ú6´®q·[²œÌmiðhæ†¼KÏÉý÷x§†ì?5®?xõ4l÷ºÉ‚¼18(¯àR÷ƒˆæ	Ú‹la¤,SÀ!-ŽªËô4ìs¥%²0ÎX.‚cí4®a“9ÍZrŒbÈxÚSÀØ.Á'M‘+"~è*êrm&ÌYãjZ×®LîG±jÕAº«±²ç¢‡5X­Ú]*¨ÏÁXS§;f®é{ÖV7Y1g-œ/r,kÖ7Üë>Ñ´¿iØêM‚5QC¿¯µkéŠöÝËCûCòÏŠBÎ¨æâEèYéŸ;1×vø0ÖææÚþf‰‡õ‡jêëë·&jNst«£	ß\$ßYüDÛ\‘2¤|ê ¹9gÍ™ -4hÍ®†æ¬1·€ŸQÞYØM³ã`ÓïÒEæÈÔßžyPÀÔœX[ŽkÞYÓF×Yk>`ÄqWPÉÖv”?Â§ˆ\ ûçˆ_ÑÁÜæMBê9Ç¤rUBzXã«#p`3P[ùwÖ‚2È|âY¾%`DœvÖì@"
r=¾!þªƒDëKréG³¤*1O1ˆÓªÎ0à¦P¶Ê-sŠXJ>Œ&Š³ÀÿìwÐàãËaíC;T)Z;nºq§ûÒƒ¼7ò2-Ë#™c2ÿQ‘ôç¦ýzR,2këM\äÉe¡±+ÎT
õ‘%‚5“yl%óÚpæõS!mÌ†K81r­5·oHI1–m8ñÛßžKŒ¤F#W“Ÿ´~¼¸xõ
¤f35-wDÈv÷Ù4ñò}ÓEº¡}M$MlÿÄ+©#Òi+çïAlHÅÿXlç¥&69lB¶³¼¨º²H–NæäX¸c $e{BÊgS¥$;î5üR—Ûm•B²sqþGn‹À\_š<6Ã´ÏÓk o«yVƒÖ¾ÉWóÃÕ\¾ÈX_WsX‹^ÿ?ã]{K›o¿}ö{=ÍŠyÎ6Ÿí¼þóO}ì¤bEàK4ÐázèÞ–~îaV#òWøj¼P 1ŽÕfxNqñM=5±^½z+Õ'Ãk(SIý×®U.ãQrh¦;¸–ë/HÀ[h¶·ÓÜŽ›dg:õÒi "ÎÙ$,¿¿ÈÜµá¢5X[ÓšÖ´œÖžúyØƒÿ(X$¸_æÉScÉÖ«Ú…ÊAÊV,’rÐËöËÍ¦RÓ°«23JðÑJK€µ½Df»ÝËlµ=dìV“`Q^ÛÜÉ ”(º~½3ºw;•Z´¶|@©„7¬·(Æ[¢PïëÙö½uååÑòIø"uã/Ç^>›™qu,_¨yk-@)¯?ÐÅ†ë¢’E§ß%ÞUr#%‹Vù(;íCZ¹ÃŒvÅtÓ•Íßôº2ó:ÎšxÍ¹t®àN#KsÖh¢{93¬-*2µ ¢Í>%Žßõ¬ÂišlÍìµQ¸†Ôã±rbc5õOG§ücKdŸŠÍÇ,çñ¯7Õ[!$r°ª!³ÙDcH›Î`µÏ?ß
~h»+r¶¹;X‰“S]ƒ¿VÑ¸n{°V®(—Þ†]½9».—6Ð ¶«Ç­šñØ®'ÍÍÀf£é½—8ò°&S-ÜšHw+ðŸ
XÕÉZùm‚†¶ô+›¿{)è8äª!Î˜vuïHFáño0ºLU'ËÊ8mÁýƒ…y7<8¬j^“…*çRÏ«â*Å`³
ÖäEª1"IgZ•p­=VÕ¥‘jÑ¨˜-*XS"~º;-'µXcÖfŒ×âøj´¸ñ5úcÈãšwÖVŽ¦ö¤¶º³FA,ð½|ÊZ(eéßŒú•5Ck›rFÄn¬‚5¾oÍ[=ux7·ÕhíXVH·äí¯¤¶0‘Ø1Ñï‡¬)·_¾šï‹
\È÷?i-âoˆM¸c-èY{Sš#¢~óÕ€5˜dóÄÜ_®Ö*vožÐ÷!sÍ©íÐdðû,¥2Ñ5—ß6÷¹Hï¬ÉWÕ@ú"H­agŸÒH,iþ(Øö»‘úX®e-˜´æœ5!Ã!ýÒX}Æˆ·ÕdÁq"X[b5/ç±MìÜÙ_4Ç_™›xJ²!9Ø´™”9| Öò'òÃÑý‹ÔÂÎÚ'Zµu¤ÖínA$qü¿ÕÂ¼†‹¶ÝBr¨¶®ªHY‰u°n²FŠ]¤ºFù?1×Ø¦Ì%â·þšJû<EýúÀ~kˆ(ÌÌcÇ¨Ì`íž8P;¥õü:æ×£òyH÷ñÁ2êÔÊP!¸·¼aÍù«ÂÂKÓ³>‚ÊÖ`EåŒd¨·NÑ'©ÚWFKƒ¶ò’)çÐð²Xzð	…Ÿƒƒz`’ákô²= kä“OF’ÐÛÈŸ|òÁääÂÝ»‹|4¨<aºk5‘Ïž¹”È 'òO¯óÒõ¦u±l—g¿Š·¸lÛ÷ÕÅFîÈ¯â²ýßÿMê×Ù³?“˜6ý^¨•- 6;¹q ²yq-í¯õ")t$X“€£ÐõoF5ÔÓüm¬vS©ÈšH79ï¼ÝY×^ÕN@Y¬©¼so§Ê4gTí{ûvç‹œô9#ÞÊ»Àší?Û.d=/_í„ÑÜ“•—fµ‹3<åG‘ïòa’¿üéÅ‘‘±>øÁëEK–ü5:>
ÅgÞW3‡mi4vˆÖÖÙ²ÎtáÏ³ûóÔü†@H(Í±Z¼hxx-rMkZS ¿øŸòÕal.¢8©‚®q|î¼½òYl›Ìl®žË-;˜™¹XÛNpt­íeÃËÔYÀ­±N˜U.omï¾æžÛ×z{ 5RtËŽÛß-/èU’ó;;¶æf^0à¶·NVÏÿ¾Ò«(¿~¶V1þÑª¾ädßâ‹g/¥÷gþX#aÄ{Zÿñ'Ì5l’¯‹;EUÜiGjN2ÉO3+M•&ïÒÝM­eìÙ}xé’½/ékú/Ž±cò_]äûz9“¢MmaHþ­½£*xdMu=¼IäèÓñá§£õ£Ü;»­`jkÁ•ŽóóSî}·G6½ó£Uà¬!sQÞ0¹)[:ûtã†8£V{ƒ·õ
!»âG:Ö,Ã%GC(slØXY ­á¡ÑXY^]·}{CEy%~ZþçÀ@éÙh@™ê™.—øêÆuˆNC°–¿-Ñš;½-¸yùrÈt¶±Ïeã§ÁÛªPôö`vqV·Z-Rà´Ø™ÕoO#¦Ék¹PØà±K7ò@4Å¸ñ/–#<5úÖØ‚oæ«YdfYÜæÒEÊâçâqýhÆX“’:¢
ä—Ÿ–´ÆF…Ž³MŽÅ8MëK]£Ö·zI9m(]øgí[‡bOQÕê1^»`ûŠöB´)ñ;²™ØÀš@N¹t›‹ýõT2ù'ö=kà­d'ºzþcÃñ‰9ç&vÍ©k+!Rq¶š@Œ¿²"á˜Kü&|µÕ¥»œB¨†±&XÐþÚ’ð™#vb<ö××i\¨­Mß¢òìÉòÏÏ×hxW<FþÈ¶ZÚZc•¹
;kº'œ©é°éòÐ~Û©ök‘Ø•v:L“¯fç¬9[m$èMÊ 9œµ%{mÈÓ™ðL²grÔæôd@“ä¯mšƒÓ„Š ¬S‹/‚œ5jT:ú–5t4ðÕ¯!_9¸ñ;ùùßùÏŒ5VäºÕ¶k‹J˜³¶Nµ°L•š×8‰”T©bÐ’E`‚3Ó¸«Œz{W );FRÐ/æªïdgÞ|pÏæ¬1Nñƒ;Ti›{Ö¬zúÒqáÜüÑìl…Of–Ñ¬
ð9§?pù—³÷ÞZ„'[>—„ï‚¬ì=ÙkŽ-‹)Šl-Ìu³mr[Q„Kwh\ÖºV%ÚäâÐ~09ò€ó¡‘û)B,†’ÄC¦’˜Ñ6œLŽŒç§h\[X¸õâè°&QhÄvÑ¤W.bý­‹Mú¡#Š¾]©ØåŽà²i|öÁ}ûö9LÄfUE°ÈæÕƒqæë!Ý´ÅýŽÑH&½Â°æV²š®xÞë2û	‚$Õ1òM¬–Z Ö(‚|ÚÕ^Ûñé§GzèpCÞöµßž)Ý»‡ñj'è6ßìI=ª!¡úY{»Ëì§]íTú)Ï8Vô‘&¸.&¯Þ}òÙHK¶ï/ËÖTµ×§Æ)»ûúF¤k…\ãáºDöë4,÷4ª¤¶ú¤µ"×¶Væ"!ÁµÄðZäšÖ´¦ cÄÂEú4bcåa£IÙ­ â…• ÙVÈ­—(÷«07Ò^œU¥œþ’>Cmoß9(X+®*mßG.d9	µuuµÛëz¾Ž6ƒˆàŸÕ•“×h¨®îøãiO«†ë¸í!ãHGui¢/¾GÎZç@å€p®¶)6L¸È³—É±÷µ—ˆ Æû"$j~>¶-’ë.;n@õ£ Õ$‹Ûš¹8³¨ßÖ!F»¢ih,‰Æç3ùræÍ+WfÞ<mc_]›´e'ÇÍY»˜œá›{úTvZêáü¶mO©öðÊ­TWMü
Ô6_PSMÅ¶Í.ŒÎOÉ&£%Í6z§={¨^\†¸‚·tÎÊõ€Ökð·“ºŠ‹»!®Ù°5¥‹è
Ö\fì8Í©PdøÔÕ5”À•7^..)mŽ
Öäª}w×Æu¿<¬ep—.}}3¬!ƒ5'£6U!Ÿ¼¶RÞL³{ƒÔ~“¯„v±¾¡ cž‡ÿ‹Pœ
«ÝÈ»Ñýàû8kGÕn’E£Z^v!·\MMŠ(t.“œ¾š^PaB&­­YÛH¼]Ø…u&T›ŠZÄˆ¸Ì6ÎZk	q&K£8	ñTæaÇ!kag-Lk:â|…µƒºà1þ»+hÄäý5Éoðy#2ÓèP¬/hj*È9¬Ájš%Ð%
rÏîYn÷„F†Á!¾}ðòû]¡ Må†ŠéGkÖöÕü‘ÁZ¸]M7·óòOÉ"	Õ|ËÚ™¡ÍÄ>îÿË¿ÄZÛ2A¹ãNe÷.Ò$Xc¶õ+º¿­r‚ï’ïOušïâî8w¾ë5¿ŸYžén,!™9È®­7Òl	g@NØ[7ƒi’µ‘qHN£+‚tœfòÆ\äÓûYƒ†5Ëù-(èsû9«õÛ=,N(rËê!û'T	­ñ“rY,Ý’ÏºÌîÒ×¶x‘@¾Òo¹¸kÖú&¾{y"hYãhUk-,%øh%ð™^:Öcª	YÕZVB!!XcÎPc,#¶Á¼Ò©AM®ÆÕ3ÒLãÐØÓQÊ´j¢¡º»ñÕ®ÉY3ñ¾ÿ´«Q!yç¦gg‘!THÚ«FàƒÆ_qäiiÝàEÊˆáZ†ïÄ¥,²X;î!“Ì¦«Á›¬­e° ~žHI±.3gM?Œ)á'¥qr-ÞpH»i™þWyIöåæVÑ/^–ˆï˜\|òdq2y÷Ñ¤>ª'°Ú]¢ý]°¿ÓE‘ñ%‘8lTô^±…sý%Gl­­ç#UUÏ«•íwøDµ¹™Q: [ˆØ|`¤×²ÂH¶u°Ø2ÖÂ„ÐÛ2PÏW³Ú{K³°¯ ÑÑ………+c]ŒÒf 6òæYogX‚Ìh”Ë’9iþ[Q¼‰žë¶'µÎ4«ýì½–-¢h‘S¯Þû‰áá›b5eöCj¥’Ó7éXûìÃÁlGUAÍ¢‹Æl®1Í¶†½Än—¦Sÿ§ÃwqÍ]]•ÓP†3×""5[]1äZÂÈšÖ´¦ÀXSÏšóÕÌXKäfg•e!W¬­•µˆ›É	¯<\åÞâƒç
³2J÷¨i­,÷ü?´ï£XäÖØ­•Öà©Õ66SYZK³òv;°Ök„‹`‰å¸Ø[7ÐP×ÛKÇZcôì½¾¯¬õ\{-H×1UÝË+ÝY•ù/^>~üþXòåã‘äKÓýñKÓÖÂÈ¦mi*³´FŠFÈk4©†’)U­Ž(4ñœ Å5zÓf¤Y¤²ÁZrdláÖ•Jï3É ðÖš{2—Ü/k“O“33É§O!³§9õ¯¼BRHÓüÃ§'vîø#Öf××tÍCX±CÖ‰F~ˆ±—b!èT+à«v9'§¾­ gyB»AÚ™(oMYHEFl:Ò‹%˜&R{‹ÕÐŒÚ…W‰Í¬Ë‚µÝßÝx™¤Ä’ÚÆ×OL¤ú60Ù.³çÀXM\J2½JäÒ‡ÖAr?'ŽÒXÜêdÉÿ¶OŸ¦« =¼¥ït×8ITËtã'ª@µ@HåŠü+²jHý·¿tZŸ5gv_:~¨»ÁËÊ–­¦O›vëÆÝóÏœo’çmiÙZ¥²*M±¶ÃDû	ÞéÃjíMÀÚ”sÑÚ¬!ma15²dÚ«%`6È“"Ù1÷\pÆZÈY“—¶j€½ï¬Uj2+hr´Fo£×+î_Žoa›BXµ[êõ`þ°3ZdWÈY[m,6
;kÒÉýØjÀZlxG¢¥¨ÏbìÍe*R<?k?Ñk†éc W´«ÝÒ ¬2˜ˆmÎZßN’ ÁµÃûqÖðÕ`6v›€0ƒµ&ks•Dü×`¢‰Ö@‘MK¥Æ¥¡3¡à~ÁšV3Ù±Gµ°†ì‡Ì·¾¼–¥Ñ×'Ûúó¹9¬.ü7¡~5ƒ5Ÿ/2â‹ÝjYsW¼x°9ká!kùfñ	Ó°F¾ˆhªH=›J õaZ‹ 3 gsÖ\Â Y	#f¬yT¬åOˆÑXM«šÝVÐ%ÅK„Œ{ÍXƒÜ6FHí\ä«q©jÖ@Â!1Ö  ¡M¡á€¤¨Š"38 Íµ¸åÉýÄ<þðN(Ò×`5téø«Dû£e™pT¡ý
10”8	dW´caf~ bäîQÂˆymŽÚÀ83ØÈªT¡cw|Ëk5¦´¼`ÍšÖœ™Ë–þisu]éKÐ¬–ùøƒÇÓ¼Î¤úÊ~ûñÐäøPr¬/‘œ~ru8>óbz‘_U=ATF>“üàl
AÞÇ`[–©’Hb"]M¤ÉžtÄöCe¸þý¯e²;·o­åä5KÙÂ…‘l$íÍ_Ó.Pä´ê(¬ðÏjA´Èê9žÕnÞ\MQ	9ïùôöÔW_Cg–/)l«£ðÑá Y&&ƒZK5¶XƒÞVëüž±ÚÙŸ½óóÙ2¿/Vã×¿Ö,FŸúkD‹0’<5võÏ:ÖBxZ"a%ãÌv¢/mµKó˜ë\Ë0ŒãŽpÛš;ðqìOd¯Ißkù¾m-K€M®"È­imMkZSÐ²6Þ7LŸ°6Øš`IèãMQšdþ>ëÈ~ki(wó’VZLÈ^ÕÞ³J©:/X‹äÜÓØ¸§®–Msç@Ô	{kÑ^
Növ6[Z/ G”ÿžè ª«;RéVôE;þH¶Hg´ýë{™}r¦ÓÇz9»Fž½|<6öræyìÄðHò¢9k÷•î¡¾µ@†i •Ó¥ŸÈS§ÞT¸¾#5§éÅô¹å]VÃ46lSWÕ¨æ`…+ŽŒÇGo^}üxæýOˆ.ÁY[V	
­9½¼˜?}8ö<öðÊÓ)2ßØv¨­f¶©­­)öp”·í½êå£½òÆ+õ[É
!×‘s‘9³±‚4ŒÕ»$ÈÝ5œKŸâUS¿UŒÆŠÈ!R¬öïŸ³Öt+ˆÆ½ÖÉÖ¡cÎÊìzN°µá´UTTR÷¨~´F`÷L´Vê`-m—¢]Ö¹¦³ðû{`ÀjNž½tÕÉ÷­eIˆCƒ5Ÿ™þÖÂUKÝôÆã‚µÓÖŠ-Rcƒ¸hïýiW£T’|‘A¾ŠâúñÔ2´Mó‰eƒó©sÖà²¬õl±Œ²6”–F¨6%ºbí1¥@Æ¦dN‰Û°Ìf£òÑ±5Ù1l¥®DÂJ›¤4«yí$À
;k+Xm•:H‡h­ÐGKÞÚÒÖ§÷sÒ+X+ Ð¿¾žÔþ%Í °°~bžmµ1k\öò°FÓVkp8F}ÎgÂd‚vìx÷5Yjœ}3¬]¬-g4nŽÔV˜3Šµ2H$Z“Îômi«©¨h«¨Ù¿Y‚‘Ñf°f'ÀéþÊCÀš$¢éß2±‰|{Ë!-ÈÂBíjËã Ã¼öž#R6³&yXc/ñô;7§ï1X3VÛ"XcoÎÚ}_‰.¤AÍwsòÕ‘<ù9k¬	Ó¼ô\<ÛNM¤MDlÒµ"†ÂAÐA"ç5k<'¬6Ö¸…µô µtdâòŽM!­d5VÄ&kÔZ`/¬§yã*Œ5F•!ðÅj
3£œàPËcÇ9;Ëfb[ßš±Î ÝF"±.ƒ5DÆcµÓ¯Þáƒ„üßPG™×Q¦ÉcZ ;öÙ„¤_|9{Ö"ˆÝú¨¬Ð‚ü™§¡ …Êê7ö¬9TSÿ [ÇjÜ+ºãñS÷L~œDTqŒ%úR‹ÓWÆF®\:?™JŽ'"“ÓÓÉÇ¦UÚñäÖÂô£GÏÒÂ`›Vr¡/‰®y`Spÿ{§cGÈ‰<ýÓSÃØ ¶£ß·¨Ht®êàÁ},Õi_ŽlÑ°Í¦uIŽ¹–ð‹÷j5rä®‡1Í£ZˆÕÂ³°a5Ÿ¯<.`í‹ŽO|1ÿå×žÇ(z8ò©?–n
ùºGk¸kGz_™Þõ>ëœ¼¬þ‚ H’§ŽýèÌò1z­r÷ÊUžôêH/@“ÉÉD¬\±r§ÝLé5yé<Íf¢¶ð4lƒ5–ð¼µ,¼´@Í“šr_-Ë…BÆ¡µ5X[ÓšÖ´TÉ5 ­[M›Vƒ5õª™¯f]kúuôc«È²‚¼²ªÒÒ½ÅüºŠì{çø½¿½ýÎµï+Ë:HüžÚÚÚ=pX]cƒ¡¢×÷ì©¨kæ•` ³3ŠH¸ <2ZMžHï@yC’wOöÔ]¯ÀÒ‡{Ñhg]%n\ïÃ³UyâùË—_>žÿ·çSå¿ÿøãÇJô©ýîÂï¼·Æx$w…­ôÞ±ßýîØÀÎªÔA5¦š¡Ú‹ÏÌR»):³±CÌE[`{åæãÃ]“o¾ù£÷ïÿø@´Kk¾
Çæëx÷>:zr«µµíWBM[ dñ0¼ràðVl15– ÌªÙ|e[½ìµúåˆæœwÂÂ5Ç_<¾ûÜôi\ŸS‰Èì5<+¯(À¾ÌéÍF[›ý)H¥£ZÛE‡<Í&»vm‡ËT )^CrÖ¬[Í¥Bê‚‡5ç’éƒ ÈŸ“õ¸îäf{RóÖâØ·b{Xcqâl‰ófv¼ã`M>'†šôW?Õ1œ~\Ï	 dÚï?3ù¸j,|\J)$‚[‰Æ0µdS	«ñÅùç¯§,&¡%K;\¤ hq`-mRØH¬Ý¬Éylæ›)k1î+!ñÕ$ðÁÇGÆßM$®%”©¸6+B=²¬ž1Ò¡Ù%C6þ2VW–Œ¶^`mjJÌÖ£xrªw‘³°šïYC+5­+žIÇÖ†éXk‰w)2V&ÎÞ”fá"&À!?{E6äkŽÃý÷ü6l)ºÜ~_É¬ÍmšczZeEÍæË;æ(1Ü‚SµyŽøÃþü~c5©ß*"‰Õ Ûô÷·µm’×$X{[Í8-pÖ<¥±—Ajœ5$ZÓvy´ˆ`i96õÏ;‰8b,öæk›©‚TÄÈÎÚÇ,‚4l ´àÆ‚ƒM°æãú]$7Ó2N´HþF&ìp®ŸQkØm-j(¼°šÁšñË<¨Œ5¡š±ƒµ-ßJk(LjÄökSrB«ŠˆÒÖfAÚäë2û.¶Ö“Ž-©W
w#ªä°LÖ·)Õ0FkÙšŠ}§eRCakMyì§³ÐÏv§üÎÍXÌNÏ	! 6De!ZÙû~ÊÿzÇjp—`5Ä1
X*SÛÈ)¿B‹¸Ÿ	û®XKCc±u ËÀšýtvÝ¦eÃn‰ü—ç“}pZj¨lèê“G3#cLûxl2‘˜Þ7v7ù/ÏIÙX|òèæøÓé¤Ž×øhñ¦9l*‘üìl›…ŽØ$62É_ºÇßÑ© ‘Má#…Y…ü•öý£:ÙÌeSa¤)pÙÜ05É[lÜBàV‡_BŒF5±Úž½ûÒ¬öËÕXí
£HÿM©ýÏ¿øú­Ž©Ù¯Üð mT¹¬Ø6CÝ!bR·i•‚5¦ÌeÐ«X-›§ä-[äŒ·òä«©ÕazQ[úå„id¾ôy:Ë
³•9l(ÍfÈÌ5§àUöÚ’Å¶b8¶ße[6Eº-•BÆóó×`mMkZÓR$€†HÂKˆÕòôÒ)N+ÌÊÅSãÔbä¯ù™"…D‹””¶·ë·OÙ¹wöí#³¿–èþöÒtc3»±qïÞæè®–Û(llàz”L‘€m 'ºçls/×Ëoøeâ§TsGo´v€ˆ!tT+àÿäçÿþÇŽ“uÃÌÄž]|–·ž'Æ.>&Ê #ëþ ÖË%=²úÇcz{”‚Õ¨SÔÐjHB£sûñâ³éÅ»/^à &b…l\=äÃöXj45sÿÂÝ§ò^w÷ýî=¥n²pœÜPlÁ‹³í’Ï¿à]ò|jþõ²Í(Þj«ÙZ_qh+¬¶X³’®ÛÌW“ÄflMìý lÛÉxs—O²ªkc§7¶n©çk€]
çgåŒÆä5`×3²‚r5­Ñ¨ÖPÙ1ÐPn×¬"Ò<5!^ÅîòjÁšòDvUT”ïZwnÊÕ¶î˜75ì¬qdok,$€5vaVs
óY`•“¹W0ß§¦Cè<Ô¯æYÍâ ?xpçžþò]ÍˆÍÁ3Ç¤ù¿ÊLì;ÝÇŽó~íA®ýÜ´BJô™§²ÜäGÜ{4}|Ïg¨”ôfeë‘Y-e´ÎÅã-öÿC\Uíí]í³Ñ˜6Ñ(X í	\¶˜ÏTx?\&lcµÔH3Ö¢'ï/c*>ø ~ì?uÖÂS±X#â©kÍå‰,ÃwçÁBiºSÊ© ÔðiÉplþóCj'sf§†ƒÂ1”A¿Ë
j2÷½û®ê clâ`‹ÁšcCÇE\¬´¢•°æYÍ?å=­Ü8žÖþ^<ªió¦ixnóæ¹†ŠÝ55;çT¹s®mËîÝ••û÷3A­©ò„híPÛœ¢F ¶-8ª„ßævˆrÀ¶¾×ä¬±r[VÉêtÁeŒ¬0b?ö„ÀÔ»iÈqZêUë×(6»>:k.^DRt¿L5*!CÎ7o®¹%ÈîçÆ’žÍŽ…[—ÛïX±Hn(öGœ©·†æ^Öì)WÔA†œ5¡PçÒ ‹&Zò¿ûí#±É‹Dáô~¢ú‰€$¬¿,B$õÄ†@^U˜dˆ‘kUŠë°šd]É+l¬‰pDtfi­+†‡”	â…çÊ6[Õ(©3kí8êÜ9ˆèXµ_ðVDc±Ü>|ndóò¸lÓGÛŠKl¼·¾7›˜­ü’…àX)§Ð;h\‘¸Æh~Ûß·‚p¿æ ûÕ¿ÄKJöõåö¤R\˜!Yc1Õ×—ZHuÅ’WFŸz2_xôè	Ÿ*¾¸{÷ÑL¶'DE>S´&y`ó›ô#’ýÂ'V¯Þãm×È†ÇvJÈö›£ì¡O~­ààA‡l{Ñ’Ë‚6˜ÍË¨-¤•zV\PM¬¶º¯ö¡›““šÿêÈüÂ­…ç_ÎNùž75«qÜ¬HÊer“Ô:õl0¶È¡šô½ŸÏžÒ³ÚÊ§\T¶ˆ‚''û’ÓŸÝZLM¶df&@
Yåc`‰!öAÕ£³Ö8ËhÍ{jþ¡¨±YUÁ¡0-¢M>ŠÇ×â ×´¦59ýakR"K±yâ3FR	Ô8µø~ÛøÈÚÜâ}’~-·ëã¹*b ÷4ÖÖ–ª2.£qoÉÞÒ½µÍ¥Å{ª©¯Ø³§‡†)(:c°šŒ³æÞ·NÖðÉw :£ÕÜ±·¸yàl;Õo}Ý3P‹×!X¨kˆ?çMç—Ïgx3<þRÑýúx
{ó¾K±d‰?g5PŠHÿ, ŠœhíæØäâ£ÔpŠ¶ M võaJfÚøÃÔÍƒ©GÇO?üøÆ±3ÿïô?½÷j÷™K@Â€[/ÂÓK/Y'Ç’ÏgcóÛÀ²¶¶­¸‡w¶ÕKÌ4–±¶Ÿ7pm‡¹{©¶Ñj±õ°¦ëÖxC®\‘úz›ŠÍÝ6g­fs_ä$ò›øÈ‘·>GÖ¤¦PIykdù÷n_WÁ1 ¤œjîâ¾œÊ††rÚÖvWn¿¼®¡º ¼a{IÆeèLîZÕ¼ÒC¯¹hñ"ióž™WÖ‚RH_e|ˆíƒE¬Ù±ÁŸb:Ä=ÜØ¿„@nŒšÂûœå­qêÞ³½F-T÷ñcÝ¤d _™ZÄˆ=q–Ýfdåf¥›ë2)€Ôóá½e·@hU]ñS¢=‹E›-íd?v™¿fÖZ&›•CJpšd°Æ}B6 "ªGéEK*²ä˜zÖgÛjuË!YPìÆZAÓ<«°Æ½Œ7sàê­yMù&½_×êkf‡Ý¯x^q
Œµ0®ÅûúlA|Gœ÷ý,Z/b¤â£äC¹ý,«ÁÚOÓ«C5;öJw¬éI}$¶šéLþÔ¦žµ¶m|ÖÑVYSyHã¾+Ú6O4Ai„¹Tî>Ä+–¢lXh!k$ÿÚpÌÒ RÓ#5·|{ÀÈ»ksÎYc‘ 9VK/Œ R]d[æ(Št±Š}±BkŽÔÜÎM· Õ´zùè~oã­+FEÈ¦ôËMkdu*fdn¢¨hbŽÇ’y-˜¡àF‚è~“a7o­éÆ"ù€‘|è÷òwþËÑýRIIz$öÆÒHqUÕû×ÑÓÌnƒ$:\ãÈ<3TˆO%ºa±\ «X-­Ô/ê°f3×
[î¼vçµU`í§~Šd­ñï7oCæAMÀÏÀ³h#e½~‹2xàÊd{©Ä0xJvÄ»Tþb~$×ÿÁ3Ä4£”S Ê(ïÖ£G­;Í ÔÆ®9b“ñÆ©t¾5÷\äà¹óºL´×¯“‹©äÌbrhì&qTñ±Å»On>¥Rãýc©…i‚ý“¤û?¹û‡—+êA¦?bó‹Mš!+\cr¶ÉÛ1Â;ŽYYäq¥ûó·%“í´ù›ßýÅ/àF~':bó.Èf¶z¾YG‚#n§yTó%ßÄj´Š?¥ðñ‹ç£Ï¿êøê‹¯—•Vj£•P&)FXsU—!6|›r ¾š9yíßÈjW«ÝMöµdÑbžÊÖL®pQ°\ðC‹|+ZÔt¸º2íNÇ{ÁV*²ÕÕ‘øK,vÍ~©–åÇuû‹ÿ¶¦5­iMè¿ËX3L³ž5ØMnZ¶ÂˆhÀÚQÑ›Žå¬1Ã&²ï jy\¡G-#³ªd;°FÓE5ÖR§•”–0r­³£skMÈ&D;‚ÖA÷0`¡feÁZçÙªâƒÏ¿ÓI¹½Õ=º¯ƒ?Ëg%ÝqXP1;ß5«Ýï{}¨èŽÙÁ’%è/µ?ùcÕ0àœ«†.¾?“ÂO›~ñâîÓxê	°Ÿ9X{ôdì;]œ¥NŒ§nÝžz¸ÐuâáXë7g(èþ©z4pû¯þk’G5ž2ÈÇÏŸ%çÕ¯¶­~ËÎ²»×+¢|~˜këþ¶-;oÝvà—»n[g¤	ÇØ:KÍÃç:ËêÛö[¤O©Ù¼¹F‡Àš…ŒpÇH´öÇ“üÅÙŒµ“Øl¸k»
(ŠDl{yK_^Y^PPÙ¸}W]Ã_sT[º½¶¼ ²¡¶´˜ˆØÌ×@š8¶©Ø6M+› Aß„°eõ<‡Ìo¢ µñ2JCÚd	Ö<´…Þ<xg-rG/ugç¦
R•>h”BÚ †{æ­¿§z)âýÝÈã]ˆÆd5}8Ïl‰B bu›dçfGÖ#µ­‰Ö²³Z8ê¢È1a*ŠTd–³Èl¿¢Sf¬ÍN±wuÚŠÈ8â2R7›5¹Ç±¢A`M¸¶b6õJk- 5k³Ü¦r¬MÍƒšVÂ¿6ƒµ‚#‰­K½½Øk³$ |-km*g6î½² ü2<fÅ¡Z¸²««/¿ŸŸŽ¡?×Ò°öÚ»×…mî–Eä{.XUÝi(”ÓX¸Ù.TzéŒ5Ykvs°vÇNæ=ÿÍaÔ¶eÿõèP“Ùi;çN`ßßtÂ©ß²EÀ57}NîÏŸDB’©ž5j¬Ë@íB0jEkØY“úçŠ4TÎkyçšwÖ0µú7÷kÚŽ|šê­í”¼³ææa‡µ€ÖXƒ¶µ`Îš£4~6ÛK\ãÔQá•–Kÿ	Ò ‹Z¹ÆÂ£Z(X½8k(Hƒ¼±l"öQß¹æ5J!¹Áu”AN´@kßýÎ7k+¬µ%U%Ñw×­+D0¢”l_U\Lzÿz!šëT“":U^b1»\V70»,G+ÄT¢ÒqQ6ýh¯¦uúðÒ4MhMÿ¢îÝh!Â;iÞi9“…ûÀx[ŸÄ	éÇœÓGMg•Ñ[Dx£µ‰µrRFêHk2Ðg.pd©9ÏV•Pr÷ùDâ|zÊ\ë'Édß¬}©«£©éTjúÉg)>3ßxbôÉ"=mÏ“7ëO¢ÿ‹g‹‹ÏX5áÚôG/ß¿rõêÌUÒ}èâCU‘?z¯›”L›vÀß’%hþÒÙþ×o°Ù²³Ù`6Él6_)<Û ·U4€õM²‹GxTsà´Äj¯†}µ+Ô>Î?ýâ«/¿üò«Ž#_üþKß&':ÓÞNo¿¡™Þ>òvÏÛa=úyÌÿ¾^gN^˜ÕÞ³l‘täGÓ&G††Z†ÆR©IúÕDk„ZþÐ°Ë÷¤ù“ \„mˆÑü“‚I¿c¸iù×¶VaEf­­e÷¯iMkZV©5‘›H8Nce«W%ÖrI´†Ò3!ˆß¦ßëÄ‹2„Í¢½°Úö6Ö6–nÈ É 6Úl=kUUÍÍÕüÖì¤ò±º×íH°u56wv²ß¬—S~ï3„í’Æ½d‹pÇ§_wÖUó+º·.SŽ·›ScãqÀ£#‡Ptú×þnäþë¯¼þúý>á’jõ…h&ŽídÊitÿî¢ªFpäRcÓÏRc/^,öŸHÝzòäî-™i”A>z”Úµ;FE$TŒA;T{šºuõþý™+É÷ºOÿë%¦¬k¬€
œ5«Ak„ž$ç{™š]AU[öÓ¡ö¹ëÀþÃ\îýü•úzÞpòîºÞÁ»l¦Ú68Í»$Û–¶Žá\¿ÖsâL°†o§¸ÇjJï—‡"XSK>š…‹pÞ¡#F“+Å~#Ò¿ º®a{C5ñ/µuë6Vöž¬nl¬«æbÝvŸùhJ³ZÆzƒ5ä«#¡¯°ÂS²í‚ã3í8÷¶˜Â°æ§fgúKnvm`«!]°àEÏÚ„÷k÷~zïÕÓ.rÊª}îq[íÕ×ºkdg–eZÄˆT˜m_#¯0c}±BG~˜½^ÊÑÛA”ˆÍvµ$À“Ô†sŒ[[‹ÆÑŒÆe+wŒ¦-3×Øê4Ê&æÈM’Î_»¶ª³vÜCÓ*éýi ‹j¦)h¬ÀÓ;·Õþ ´¦Ô=ªÎ!F†ïÕ˜5Ñä”	XƒVî7­ûð°6ÿÅøŽ¹áá®8ï÷×ú„hC‹È‹îW†Xþ|ÜíDdAý#7í6á€‘eÆ¨æt¿Ë¬i[_¡Œ^µC5û¡k#Ðw°æë¡]:Á_;î`Ã¾èÝ3Õ‚9kÞZóZ=’–=)Ç—VÍaÉq°K’Ú/2Ü &7ÒÜÂ%ëYsµ"µUZÖÜ=kÑ‚‘ØK9#ý4ïi(¶£5ö„AªcmŽçœx·hÓf«Õœ8`ú¿Ô³æ'­tf­	Ö¾#ZÃ\û¶–µð¤µu¥ëÖ¨~¬2ï¬xãúª’õ¹­U%Žº/æ8Â2H'8g*.Ô1m¥d,ú€ÿõJñ/ËÎã,o°ðŽ#58kèrÙuÑý7þ?{gÿSå®ûÉ9?Ÿœßv¢dëJãd‡_$€„ „ !‰4ÈP<à$gâËòu© ¶SÁšvè‹L§À¦XZ¡#Z…VÃì–­âžn9vm&†ñz´DË0œ1ÍœœÏu×—‡§Ð9ûàZÏûZ°|e­Ïºîûºz\ˆl$ÌhÈÍ½ºÂ¡¥ó”“™cFŸA«1HÒ©upC`‡Å‰ëL#,2K°æ¢ü]©§å`òP=¢ €DýæfáÒ11§—qÙg¯üKëØ¥¡º™iš©Æ&'§f´^›šž¢42>6
¬="cjflxzxÔ2"‡Ga6ÅŽˆ×¬$2¨‰<6„Ï†ÁMZ¦s%Õæ²a²!lúãvÄæ}6Q›ç6¨­Ü¸­r³U[Ý
YY–¡¶Zœ~‘ §Ù¤hmòîÓ‡gÎü·ìÁÌÝ‡‡×MÜ9ü}y>SˆÐÐ¼5 Í‰{FP­ñÕ]±|øé}±š‚ /AjÇ:ª;ª³»¨€ì½RDU‡CE¼Â¯ÃÂ°f)ý¶øÛ»•mHÞ]C¸éªª!³øŸÞº˜Ý¿¨E-Êôß©‚4tÙçœ®ìÙË©|5'iÖUd>[ZVÓKÒ’e¡É§[¶VJy9[²"ÑþXy9¹üù……äïÕëW8¤ŠÉ×ELV#	ÒU1ØÔÍÒ~Ž¡µX¬¤„10±Ãgú+·k.[EQ|WZXwÿFìÔ_¾Á*}0£*È_ýíó³¯ðÎë³Ó_"¨	Fû¿
ð7lÓh5c5_ùÙ°ÚT|ú1/qÀZëóõƒW]êã5°ì«Ç÷¦‡*êÔ²¦‹“…0ºúã+¤C~:¢ÈsÿþKvl®îÎùj¾'\SÀÈƒ5““§Þ’e¶zåÁµ{×*¤Q°¶†ihZ\m“±â–F‰5–€Ðt´{'ŽÛîàÆšt*Ák”HòRá< ÎÃš…BZ²HžšÎ[Rù7o­bÉ²Š {
ñ*7U‘/RZXQQÊêöe•ÛöŠeæœåæ¨f…²Ò¼¸B5 ’®»;t¿NÍ3CÑZàÑqÅ¶z°W@k„ð'%œÉÖ¨ƒ$°ûeAª%ãg2Ø~ñÞÈÑ³¦òŸžÌ”‘††>ÖT¡“h-Ýþ«Ž7¢÷^éëvD¬Ê)…Œ‘d6mZ±Öª«a,BûÉ©-k­vU«ÍREh‘b%ŸjÇNµ_Ð5ÒafZ+ &jÖºª!;ÁZ¸gmag-LkHtÎ¢°‘bH?ÛÿA‚5]p•.Ìÿ€ íÀÉÁZ_ø‰=%Êñ
œ5ž9ÌM'†jë&Z7Ž÷µö,}<ëèÈFÑº“-»0®yX²úYìÆâ!ýS±µxZ»r]´Ã˜µ½Ü~ºOéü‰T‘ÍVì[±AñõYq±¬5.±Õ¨ÖlÈÚªN±rïé Õ´	FbÿgåFÞ¯Ò“˜­šC¯YkÍ/&`ðÇëÙìVŒsˆö­EÉYãf–šmBœæÛÖÂÙ#š³–È1­
äN®C†ã×W¬t°Æ¢©ØøŠ"Æç.W¯X¹!Ài
¬íû‡zÖ¬eÍPÍC›G5HÍÃZÏõëx•«–%Hm«a«9mŽ½¦HŒ5õ¬©„1vÃ[ãÈ‰1Íy-›íñ‚h°¹³„r°æG¸˜ÃÿQ|ðu=Ð\A²ƒ5\´[„ŠhÐZ k4«êŸL2Ð°ñ=DkAÄlˆÔ¹{¶Õt¬>:kÀš=ÇŽâp×“–† 6M[ó„fØ¦CyiÍÍæ°åˆFu½‹kf&¦1y­W“ÖzHð¿{·«±qpjlrhìêÔÃºÁÑkCƒÓÓÓñÛšÁöøé:·>›z2¬‚È{ß>y
«i×>ºïjGLÉ²9—>65²	—‘ÎE¶ÀfóÐ†Ôå`2lcAžÞl#•{c½±€qî.¡šlµ0«…Œ5å2Ò³wí¢Aê~}{l›˜|p&ÜwÆËEˆH:ñâÂVëïgºZ{O¹ «k.[„ùuÓq¬Ì^xJêˆÇ/'Gz®ôÎå3í«Æí„ô#;ÈÖêñL+ò$g€–…S&¤÷Öø_În1adQ‹Z”¯‚DæªÁjéé=5éHU®Z§iðYgn¿Åô¥OH5¶ª‰0È6^a‰ï_ž”_²5§ ¹©¤<Ö]+ß°U–÷k²šVÑÚ;; Åõ©XŒãîã±ò3¤õvÇºÿõ3;ÛšÛÏðø~f°µÄ2ZðÜ2
k=Š>z'þhæáÄçŸÇ+<ê¨ÿçÏÏâª!ÑÙœ"ÈÀñr°¦©`»Ý1ýÕÕ/ž={6V_\‘wãâW¸k÷†ÇÆ„ššbÌ‹å‹\üêRßÐÅ1’•ãw¿`¦uÓ±_6üñßÀ´ÀYƒÖ‚2HImCUÛªî¨ÜÑ<4q•cµƒ˜hiÜ5`&íu#œ¥:XcÌTC¶Ý½rÏNwä®&`í‡ÆgG•.òÖÑSZ–¿rû	~lÉH5ZK„i‘ÕŸš»¤Xl©Šä–·d iÅ˜0-¤q–«@•¹å¹ùÛ+5â0ÍV6H©#.!ÒÓvìC —Î“wÒ$÷`}Ü´ ¹ë¡þ4Á·¶…iM¬çîeœÒ±åÉ·þL“Š	X{á'H›Ê}Žœ„ÕJÏh8ÔÐ“R­ïM€)â½ˆë¹LRU“Ê¥ì3s½ÚV÷,Ï!µßf¢Ñb–%KpðŒ"@à­6ê¢­¤Î\3–zMVcÁ=ãVga:»Üèqz‡÷p­µ§µV°vÚ
!•ëÂ¸&	Ö<®±»Ã45µ®Ív¯¹ºÖlŠø';XSL%Ÿv-ªÌìø&þ³æŸz¶òÁPïªN€ŒÉ] [«ðW£KlXƒHÛ…@7oå¡‹×<ZÕ˜±&õŽod"¶`h´o÷ÎÝ{ýX5Þ¹bßs*	ÄG3QœiùúJ‚Ä}Ó_1‘­­‚µOpÖÞN°£%6žØ<°±„5ÁŸŸwíêOÅ‡øÛùøø¸(Çe©	ÖØ£•ãØj2ÖBYa^sgÎ=k!VÓS¹3^*¯?€5¬5‰yÙ—W­XÅ_C´™'kMßý¬/Ÿ/Ââê 9eÑ=†jÜk6ý»ÖÆ}rÿüª!·hbE‘R^ŽPFáˆÀÖ\ä£¢û…7€ÙN
’–jg5†7>YIŽd¥¥[¼ˆÕ>³¼ü³<"Áštë¤´,–ñŠ)=ØðÒÜfYö[lR0z„ÕsK.
×]ã—Æý:ØÂ¯ÓO¿†`+ôÑBú£qR£CàãæI0ÇusÖÔ,VÖÄ¡ŽÞ>+å>
vk·4µ×ÕöõM]Ìï»x·ufjzz°½+>5uot†4äúÖé©‡O?Ö¦&žø`ÿá/Fïßÿ=M™Cloûì‘Óïc±!Ïl²yfKO÷>[–´ßT–PmT¢¥Í%8ÏoZt©D¨¦ÈYh‘Á1Gkïö¿öúñØäÌÃ×¾þúø™B,vÜ6Ý¬ÇYÕ^ãáÝÇ½À4¹jý¯j¯¾ØÞöbs–¦o/ô”ÀÚô¥‹„ö_ŠZícuGv5Ñœ—#=ñ+!/Í}Ø£;QÚì™³Ð¥qäÎ‚/…{ÖÀ3š_ÙØ.Ë-;{Öµ¨E¹*H:Õz©·³†f6ò:3“~µLóØxrÆZJ
w­¬5ïÏÏ‹è/¯»íí”¹Û'¨øn9•y‘È–²­%ÛËKqmJ©‡djZI?ÚE&$´¦Ÿ´ °V†µÆ!%’MÑã0…5±ÙÕ}¦½©X;ó—ã%<´4·„`ÈÒ	†˜uŸºóè·µŸV^uECÖº6ÕÂjØg"5ñšÆæˆCg«ùä_=¢
²6®¡Ú}ƒ£Ï¾%XëþPgn^ÇEPM)[£_\ºt•ß¯®^ûââ5:»‹‡.^½6v5^Ó÷E¼kYzCÃŽuo8Xóq6`–Õ°v£¯ö@Qg]êÚ––½¼[ÛN­ÒÈ¤Mmïê=²ÉNÚš½nüµÎmµ£5añ|7Þšw«ò¨ëUK`_§±_¶!¡RÚ£†e¿óý¢´ŒB" ’QšZÎÖ¿fûbîéf4Þ²e…úP|Ž¥¥ùYk.\œ5»¨Ã•$yV“ì<€5»¤5Ô¸æïöÖÃæä!.ÂÂ!cqGF’#Ç~ñK›ˆ­­}Ä®¿–—ùtj | 2ÈžåÉ:™©Ü‰Ø@Š‚$ú'<A{þ‹ÈfRZU­L6qÞLÔXLU‘Ö×±ÖGëcŠ±ÉŽ.îì’)ªÿ«x„Ï„xÌh£’ûá˜®ÖêY›ßµÆ†µÒ	UQ`‹oæYÍÄ`Í‰F5p_PDõ4#®EÃ:|¤“Q¡ùiZÝ–kakÍ¢ûûzß?‚5#cÖZëªj‹[“!p@Ä6Ó ƒ0¬ª9¬Æ¢ËÎ­tQÖ„zª<¸oØ¶bÅÊªâ•ûp’jV(_†LÍõª„µÖ©HÎÎUÕ½ÞR³}‚Ô¼ÎÎ	9+”ÁÂáš£Î¹Õ¡î¢]La#5‹í·BH¢û ¦HÈ9¤f¦Úg‰ƒ€ÓÂ#ªééøîvÑN‡<"½“3Âó«Bµ³“=J´U¬¹çšÖþV3TkÜ|Âˆx­ƒ¯ÍÆÅûñ2¨lÁ2H_?F€5ªã!6zÕ¶ÜŸÇÇ{4{	 6qI‘IxMçy\K2J³bCB=xÇI¸á’>]¡aí&¨¦bgÁšPéYˆ„Ê ¹zRyh@%ÐÉA`¿|µ ÖÇ¸°Â	#UR—ÉýyAjyzå£Òs‰úb•þ¡¥×ßd:4«Ét¬3VÎxÙÔï´©©©­‰ôÌvñE+wm­,io›dàç>†v¶öMOå6ÆïNM=üæÉTkëôÓª‰iœµÑ M´öìÛg¿š¦ÕmØÍÎþÎ€m¾Ç¦tÿ>€×Dl‡XÄvëeoˆÙ~î6Ïm`[ ²@Ñ²­Ã‰ÞJûŒÛêPM¬æÁ)œôÁïóFüÒXœ4È!A‘N¯!Œ¹×þ	¯l!©êR	"z”©P‹NQ£¡Z[[ÿÌ~îð…'>8ý¶Jæèåþ*{xu Þ±+–(I¾ÜØjÚzV*…ã ³ƒ;•éŠÿ¢€Ô8'@€0Û*núoŸµk‹ZÔ¢Uë-[d½.pç‘4«ˆdAz“›…¿fRC[s¯WzÿÛÜÔÜÔ®4HŽ“—çäñÓ™^òüÊ’Ê­»ðËÊqØˆ43­T-SÎJc{æ0\ŽAlÑ‚¬r…‘©LÈÆ3±¶¶˜†f—”ïÊ%âŸ„º‡u¥§Ž>¨«Ì­­ÊÈ¨çq/‰"%­à™CµsGÎqlèæõYèqkm-ªœº]GËš‚ûŸ‘Ú#'/~ïÞè(q[Ô@Ž>þBc“×ûê*žïüêZ}m×ù7ÿåÍ7ÞXÿÉ¹õ/ýÑÁÚ·&NàAà¬¡Gxä‰›¶qãnç…½%×ã ×V®`æš/{ÜëÃü°Ú¸i	`MU’‚5•JÚ¹{0pæóû˜‘LÜ"ßQ—ÞIl 3
 ñÖ8²¼HØŒk…-œ³Ú®´"7·´¥´’1k…K$Žr£vÁ!›ã/³ËVCI?„j¯´5%Œ5wûø0,	™¤#v~F¶yÀó‘þ¿<—ÂT4šÏÖÓµF"¤égz³AM$#'õ×r²g ’¬¥ôðH½¨&`-“ï¤FL¾o¶ØÇ¼µädÚbªÝœÕÊtµž.°¤º§5Z‹º(‰Œºi^€¼Vë!e£¹ô>‹|´QÙä&rÄKUwJ«8èb`ÖNÏÇ5ÇfÈït`·ï;kw´‘ùÊâiLwgk÷:gM°¾¥y@1'EÆZW‡Ö5íC&‹éˆÁšÜ% ¥£¯SÁÜ6T[+«f­IÆýÞn†(Á´lý©W`¬ýO9kŠ‚ôêX¡á§a¨Áj¦½ÊÄ/:°âùën,6”f°S<‡½&@QDdU}—ªÓp£7Ñ³Æê§¬Œµ ’›)<gMÔlTHÍ°M¦–ìµëãj"Ûçœ5ŽÜœ5WÛèDÑÌUC¡„îÁ7´!Áj³•Ž;±ÖZ#gä:>¨8Õ¾lü:_­ÊY³'7­y^h­Á‡÷«Þ#]äBöª«.ü8k!{mAVSdÌT£L>G,#Ç~KÏ³/X
Ðœ?/ï	\S™ ÈÀ6Ã«ÊRýrÿIåÉ¬ûÅM¦oºŽ5ŒµŸjN/+»ßþŸ£’sÒªù•åfƒÑyÏúw57Ó6Íå6¾Z8imh6ß»€Ið˜Y†iÈ®»$Èóç™øm4f@Š©Öü¦Ëõ«µµ·ÕØk/HÇcÊ*˜Bº+Ú8¿;¿ÒÕY_X;õxêv4«mfônßÃ£™šÆt›‰Õa·M_›x0ñhÓ+ÚÔS.Àjja#ØßbC³Èö7ãµ?üàu‘'Þ›?\ €-ÄlP›¤ ›©@ÊÒB8naï-
©9TK	Xm®Ë…‡nð1›¬Ý…1ÇúA1ÄnVå~ËÒÿª3xiöåT@¾ØÖÖ,@öOyä$Ã°ù‘2ËjñAXo`sÎZÇŽõLJÓÉ\Â
ÃšÆ5¾ 8fñ´6_ÞLó[NµwQ#9rÖVµþhQ‹ZÔ¢¨‚´(H€Œ2kë‰hxLŠB]X¿¶²Ú88†§¦3î-`N•ÒT––ÖÖ-kJKQ~WeyI%!#9ùå[šûi‚*o)>Ú°Qn«W"¤FJe©¡3ÇûËc¥ÝÔIâ½qoËñþ²‚èñîîãÛ·6’þO ‰Eÿ· åVUn¯(.î³L~#5Çg¦C¬:ŸmXÕÐo‡ãÅSÏ&
ãÏL²ÓÆº¶dMÜžžÔ`¶¯®~uõnkëÝÉ¾<Æ:mêì«£»«¤?ÈþcÇ ¥|‘^ðù"š‰pð^Æë2:kïìÜFäŸÖîÞËÛgÍÁÞ{p­ùk
óßFÿÙjpí5c-¨¶móõr†‰zå-Ó)k.Ò¤žB€u`[J!W«
’õT"’;‚}ª¥8ãTwF‚ÕPawKîÒÂîÒü¼Ü%›\«Ú¦
kKmëÂEä¬-÷Æn”‡5íÑ<^›#î4cÍúF|­òxÆ"6ó²ž5.„’ |ºÿŸo-ï01fd†ÔÜ!A‡]`&lÏÈ¡†††“#ÉÉÔ>¦é­FŠsÖø¥xV”¹@¢jå‡$“àŸœåM°V¬Y“Z´µh«‹(b¦ÚeªÄ°QI£¤&ùÛ[J$6É’×¦¸ò¬œµÓó›ÖÂÎZ×<¬ÝqÀV
ˆÍ•‚N)4ž+½Ó’Ê4ïúøj-€â{ÖP(_ÄßXæMzCrÖ¨™º¼¡OôE&¡•Â?:eÍVÏ˜+}äš§ÁvÀPÍ©'â5ï‡Aú"HàZÌsp÷OUü¸íà^DçšÐ¾=:a‘zKÕ´[ù>›Aw >[P%œ¬ÖÀ4OjþÆ‚(€ô¼v–«¶ÌuÖàÔ&ï¯…Š V“ÆÍIƒž<¬Y äÊz¥‹øl·øLÛ°º£°zÝxï€á@?fM{±ó¸Ë›D®àZS~¶Saö«ÄþìuOq6Œj,Ç„jÞYãj0jÍÁÚí:	›€µÿœ±¶Lëõ¬å¨r)™ø¬¦†mÎ’<Í¿Ò¤4PM¦wž¯ÉZª€ÿ,q€Œ*ŠØ2“–.Ï,à'öÕŽi¤÷d¥­»¹î%q…rè=¬Ánª€&]Z£MU?"Ò—/ç;EfãeçÂþÏÀš;šsš`5úC“ð'T‰eÈOÅXLtVY#e^£	ÖØÈc+P¤¿¨³<Õcßm35×4G!¶wŒ¦²¢ÂÒþÆöþÚ¾ÖŽÏ>«Ù¿µþîØàÌÖ¦²‰§Cõ‡ßiy2<5x»®ûë©§3“êfž9:úøéÄ“áaf†
Ö.³Ø¼Çðšôñ‡¾ò
Àöö—$F¾6ÑË¦ªñ“s›Ù‚âÈ ÛÜ¥Hžß<¹…±Íö\Ðß¤gµP÷Öâ7®ŒÅ;Z!¶¡(x×ZÛþê«P»]&Î$ºÙ¹´}Wø®F6þQ|V,¶½ûnsVfÍùõAä	±Ú+³¸/õöâä]‰_½ÏŽ,¤Pñ¢øãÿŸ²Cá"ÔXç©¬Ñ›d{kI×ô¿·v1»Q‹Z”ª »Vñ±j.£+T#žŸ…_-³€´j¸{kû›Ú(ƒÜ_Àµ‚Å÷Ãkù[+óÊKb¥å…Ýå¥J9£$~‹o"õBÁ!1åˆPrÛÕß‡¡ÂRN:Œ×–Ö¨˜ÿXwŒ¡kgäîîÖ¶òÊJRKJ¢ùùÑÏ;>WÃšV4·ÁXÃbãZàx}§AØ´­Å¿{64ÉtÑi`-¬-Ù´¹¨Jé[÷â“£ÇîöÕo.ªëÌË-JÍ(¯¨Ü¤àÄíÍÍí/¾ñÆŽ´óo¼„·†\$Tào­=zåoñ+ëë2Ö®±F5¶Ô0²=Èì½Ö±¶wl÷Áµkt2X³UlÛVnÞi„æ¤Ëìä®É–"ÂY k\ð'Êð'ÄävüyQ	ÁdTÅ©5ûP†zÙŠ‹·«ÒÁZweyFîÒM•°Æ;,¸lie¥MÉöÝk°š5”I³ÎÚüw4Rpn_0Ëj.^ÄUBŠËBæZ”ìNYìB¸mÍ5a÷¤$'üùÓÕ°Õþì`J£oM‰œkêZI!c çÜÉ”œ”’ÀÓ5Dù€®Î‹Qky¼ëŠ(R³±«³êÔmI’³¦°˜?/“*&:‹’É¯Å,V¹´þŽ›=­~œšdW¹nAU¢5:àà¾†jÜæ'}pó
ý=ÞYÓ µÕ¬aZ³óµvlb”žü5|iÆ…-ŒÅ¬ßóóBÙýÒÉã ßï}ïHoï‘÷ˆ9òž¹96dÚqÙ.qžèYÍŽ½h/7ˆÔÂ¼ÆƒôÉý"5¯F"?µaò¢µµŠ1Ú\e”V\ÅXÓn\$-’á:‡ªŽßpXËþ¾³ÆØjlŽÞ´;kÕÀÏcÎ™ƒ´ÎñNw¨…ÍÂÛŠñq¢Eö­X³¬­Sÿ®9^óšñÌÆîû°«¡ Ws!›Úò<:>·ÑØ0¡¸z´f­f*SåKªÅÓ½~²›c5Š ÿÍzÖÜE«!œÏ±ÛexïÖÚªë¤ˆÌc5®±ÎÓ’¼üeHÖš’F˜LfN˜‚{—a>©ð‘•H6rÂú1ÒXu”…/–cÑûbÌu7wÜDëvÜ\—ü;Å^´ö‚ƒµ[Xk‡F’’Ò1×øò/fîó!mC
j!Ã
F‘„†­yåéS*—5¤)Ü1ÇÛmK j©ÃÁšx×L/®šÅfæÞQkÿÑVÖöï®_ßLóg€[´°Vkïolæ3Ðö¶þ’ª‰‰‰6ß`þŸ«•N<%c¤¶{bêÚÄ°ödzXšúæ›©g£ÀÚ³{÷†¯S9,ls5‘Îeûˆ\íÓO©·bCoËeûÒº°Ù|/ÛBcÇÒïæj–Ý®˜äï>jÆjA÷˜ÁÚÇñ?ŽÇãW:º:ãñ]|AkSÛ‹/¾¨Fxm/ò¡_l—I×ÞÆ%9Ò=í\äžFïâ5F½“×üæ»™™ë½ñRPv)V{å‘c5ª ã7Æ.Å;®\»b–ZõåMÑûs[×‚iÙóä).0äÜÖÝ3?RÆYÿ?åD÷{s­‡¶ Ý µ‹Ùý‹ZÔ¢l"ví:dðÓ÷mE6A¤À~È ki™ÎZKæVã±O‰¤pUù"Müx¤N=ßÞ‡ç©²¼×®rxÏÁb-Ý¹ù±ÒRMdé†ÁbÚÖd5 ­=Å\;¾uKÉÑÃFi-ý«Òý©lªI«<…§qÙ±r¾â[ë¦®²°´»´¸ñö¿äüáog{Ïº HGjìÝÆJ OûQÕºIÏîid3¥fê
3HoåÀjEî>~6ÖY9t£oC^~nqeëd}Qj7ÕK*ÀO­È¯ÜÊ ýéë^zCÞšÛ1Ö žÍ@M¾U&·<¿yój˜lï6 Ô¾»×¬Ù«".ÎÐšm+ýJ@—m‰'Â5ß‘tÐXÃ…›k‚8'°ÍÆ«Ù!(hMlY£/P}k`²¶4¹nà.Gäös=µ0ƒvB@­…pÈÜMÅ›ø \ýiËf ·óÕt’tA{yjÈÌøí{~šíÃ°òÕf­1#°äˆ)ÍåÀ%Ô¸5'J=#‘¤cÇÎûEÏÀŸh¡á­9XS/‹U§òŽmàÈÈ€âûY ¨e.`²«Í8É[’›Ÿ…¥–\­§Šl‰–—çå	ÙÅh5õ¯áýB ›P­^Y4¬«Õ–Õ¾7ÒUëaK<´ŽiÔ‚µ‘IÌ[£gX3ãÎ´ö²m¼¬9Ñ®–aãÓM§X½€5•>úâX. kkv“=±ó´Ær‡ºà9‘¾y€j½¦«¡¹Ü¼ƒë}wIhF–ÓÕ\jÿÍ›\P3ü ªòg8R—Uµ–à5vÜþ¨­ï—0Ö<­ñv²æÙ'mß¾ÝÛŠŠð¦@´°íáïEªB¢5¶¬:§w¦‚HR!÷\¯VJ¢g-(‚t«0M«¤Ëóç¬Ùˆ‚l˜ÇI¨j‚Äþ«¹Ãëj£ò9kN Ô¸aÚžæí5C4W	ùÙ9k>	ÒGøëÔ=„\AÏš±š-håŠ•+ø+TÄæ—C[6/ñ^b2pÍ›kÙ<¬™œ³¦!ã×Ÿ[¶RCâš/}œM¡üqbŸ¥BHûàâ
Uò(Ù lã®éÈ>1ÌÓXs"Y¤,¨¯4'½Fü³n£ñšqÄO<«Q­ž5î³žµžä”žt^Ö"€o¦ R{çaü`(d8_$,¸Œ5'o)û$«Ô¤%Yzˆ<D…Š(„KX†ô;¬ÑïŸ«$‹ð%Íï¾yþ]²ûIš 7ûSQé^[{c´½ýÕ×úKÚ_í·>î;w&fïömÍ-¦Á¸„dÿ©É×nÏLÍt?|:<|oôéôÓ‰™á{ÓÓïAkÃÃì³
×†ý0¶ï~ñ’ÍÏþô·ÉeûôãG~®¹ìšÙ> 4Òt$¡ Ú<·…5Þ´V‚¼…jßg5Áš£µ?œ=ÿ4Þ›œÒ;x£··ÃJ,›¯û·4aí7qÄ¥wšt®ËÖ•IFiÞÉ+¨y³&}Ç:Œ×9e—oÃj~PÀènÞ¥‘ä+—®Þ0XÏX¦¢…qMsúÔªY}ªˆNýuÏiú"m½B•9Ôm¾ÀšÉcš-QÙ¹˜Ý¿¨E-êG?ú‡®‚/kª~LC|™’f·dŽ€5:}°ÔÒ3A8 c$j‹=’¢’íæö¨æ«åñ]òò™¦’[YÒØ£V-kïgÔZRRya‰Rú»àß­€þDo¬$ÚØVÛºe«Œ3èB#Áp… ´FjIrSßy‡G¾óŽ–RÊ'¨”¡`åÝgbÅ±‡_çwu|òåé³'¾<Ýàp›“*Qß'ŠÔýVûîÑí¸†aSà?³iðÙ·}¼‡ØZXTT5uïÚLÝ¶mÅ••¹•Ë–T\»z·¨)þÇM•Íêç“2yÞmNS%$°­Ñµ†‡çÃ yÉÓ3]yp îÁNjñÒx?íÞ¸¶Ò|(ðmÍÁÕ«÷¬Ü³Zw¨aÍ#—/„d·ÆÄ†Ý|äZkHä¶Ó£›REøjÎÙÉÌû¬öŽÃ6÷ÇÉ/þ”[ã
¸++-Cc3#;ð-íJ+Ê7WP­´4c››Ÿ—w!Áj–;!º±×æõsû>¬%¾Ì[k³ÝÔþ.k\}¨”*Ú–Ý´H_?²c‡‡5gs
Ö`5zåk‡ˆƒ<Ñpòí+‡nRå¾¡f5ñ‹s¯¢ž×òòòó·T'óËÓ¯±‹*ê«5mÔ‡&0c¶\2HDjxfnªÉ‘0ÉÁZ¹¹jlZoöÐ¼Ö©«=7/û€k¡’D/Ž=­yUyX½õ±v:p™ýöOÁz$wÞiykMuµÀ7zÖj;B•—Á“‚j¡¦µ0­8‘	Özßï=}ÙÀi×¦v³WwUWSýˆqƒf3F‚ƒìññË7`5ÝXÙ¸ÅM\ZÖN¸–5?;³æª	ŸÝ±V´×JáêÆ«èZC
ˆD\á¸31FzCÕf¬5~qïi¤A· aÍ—@Ú–}×zÝ`”è[»ÞÉ.”$EjÛJæ¬á}Y¢¾§µŸk
îg	9kAßÚgÄŒÌ¤h¦…S!ûqµ+Ù 6¦çVkjÔêêS5DÝ¼0ÒŒÑŽ®!7h-Ñµfó³5î¿09Õ‚†µ Öˆì×¨5 F¸¦Ø~3Õ²€›¿¨±Ë`ÍM%ãjP#œËI¢ÎÊ‰À?™ëÓé–Ng«¢›Æj?ßáÙÁPÍô37gí–ƒµ‘”å9IÔ@òãB¬Æb
òF¼…†µ°~ :	*Ë[žãŽ—ˆÚ”5Bkœ¸P­yøjö
)kÇh[KKA&®ÁjFÑ¦šcçßtlŠóÇW{ýë’Ü¶þ3gøHuãÍ÷Ý½6D•ú)hvýôÞNyýÌÔÄ©™i’9âC33·Ÿ?žžšÕ µÑ©)â"-ÖßõªÆ@S 8ý‘é·¢íf²=z$×	“ydCs™-nìæÜ\h|6”©ªyVŒ5Óg?¾ôáÍßý|¤·'½'ÝÓ^MùeioÖèXo¾	aI²oÎ† ò²zz“šh orV¨¶î×¿~á…[þ5ûWkŸ~üéèýAÜ¼ÞêŽAìµÁÞìäjnWC¢ "$”*2_Áå 2Ê¡7:º%â´ÿõýýýû£eþ…Ur/ŽîÂÖ‹°¶¨E-êGÿµ5%'¢Tä”L›CS7Rèc$âÈŒ—TQýiRKŠª#U:©ŸC)¼æ0`X‘å[¶*ü)?·QsÕJK¢MÍ±îü¤$jKŽ·Ïß¨@ÿÃj[ƒÙŽÇºûáŸ‚’Rf_ã¨5ÿ¬»ûÔÑò²ý[–Ó¢ö¿þõ¯}§;C×ãÐÅJ5ˆ­²bËÏËþäô'= Û'Œ¿FçO‡ØX$Å‰Õk¸òÑï¿}ö]IÉí™™QÕ@ní}„µöyOÓÖŠŠªÉ'JK©,,/Ð6m¸øÅXëæÔÔ¢ÿXAÎ}Æ–ß‘Šy¾­äüX3áåªIã™DkŸµ<|(l’×a.°€íÙ¸›F›Õ;i»Ù¸‡‰kzÄÚ¬ù0È@:5›Í‚þ8ò>›'73Ô¾çÔóQý°YäQ^ÕS]ƒ›ž€ÉŒM[£8’Ã×ø}ææn/‡ÖH)Ê(ªXr!)ï‚Þ¢äã¤Y²ˆºÔ(úYâµÔXÍª-A‘3'¼€»pËš8Í‰CŸ-âŽXCîšwßØÙj÷Û]Ösl ’Ô£(H`McÖ°Ñ¸öËŸ¬Y~÷¹††sÿc ½§áÈÈHzVŽF´ño73‡ª"x÷–VËÍ/Ð	¯]ÕYyŒ
ì!©?ÊMI"UµUwbµ²()#whV­)jD±ø¢µÚÖ‘žÖ¹uvX«î²³:Yk7{|t¿.ƒüûªR¤“ŸŠMŠÈÙÏ²zc5Ñ¾šÊf[õ7~½X¾ª3Öê:æ¸js¦¬…n¦0®¬I½¶ÌfŠp_¯ÍÄ^åâû}Š?[dÐÆË·´4p¯ÙªÅYk/‡sûÅjA¿Ÿ‚Ü¨BdNi»ù€D[–œµÍõàYB6Í™k.ÆÙõ&N;1IÍYóÞšOñ‰ýN5¨7L­	ÖÂkZœ¬™Œ_!•h…~Ý^”ArC®ÙâÍÏ>ck›aÍ<5äŽ'º¢ÈçÔ·B‰V‰Öä¼9|vÑ³† ° Õüœ5±šwÖtCÂ50ÒEä²¼p}AXó2^”G¤Õ?æ(½ß2F²
pò~¼¤ÀL$¤—A›$†ÉËâD2cd® k¼Ê¨™zýºé\t°¶#sq‚sÖØIVyË’`‰€åMñHzðsƒ•ƒdm¥½…5çÒÂí¸°šÛ$®åmá@¡—y6FÎ­5`™¥öÁÉQÓ8¾	ÖÖ#îo*k{·¦y?U¡àª¬FiÐV¥2?¯­1vœb’ãßüFŸj¶ML¶æææíjIÝ–Ú=óít]Éö’¾™;GŸŒ1òë	òEF§ïvÜx25œM?}ÊÔl‚"³ºéÙ£jc3d“ÍöÑw÷mŠ¶˜íS‡MJ [Ú<¶yrÓ-¤0¶…‘ÍÄ¡¡šX- 'd¨Æ;ÆTð‹^ºyó×ëôØ;~÷óÇŽíÐ×2FÀïR0›Îž‘ ÆP«3ÐèvsR¨Hsw¼Äs¾ðò­Y+ïíÝ‡Õàµø•+ƒñK÷{“­6ÖÛ{ã=<±ÈßQr
›ù©"ÕáL²ÕÜªÅãží²ÊrÛ–G¶ôG_ïï½Ñ>†œ?Êñ2œ“³a1rQ‹ZÔþ[k$‡—A:€U}bæš6Xj9˜Lã¥[v-P|ÐÉN!ÿ5)úá“ÂkRŒFö—±Z´²¤ÄbúËË£MÑX÷öíù¹%1’‰ÙEz?y"1•DRÔØr<ÚÝ	ÖN!‘Z¬¼Ð<´ÊÜeå¸A,‡K5¾8ã©Ó-+/åçvýòì…ÊO¨¶ÿä„¦ÏT•y[MÎRm¢hÍúÕ€µxãv°äöÔèèí’²-]c_u5•UVòc `aañó›6UäONU	—Vü¸¢xsqtý5[Òþø¿£ç!5ÉáÚË/ólÖ\%ä¯^éÝüÖ_î˜Ãµ³–µ}DBîÜ¸ñ bvnÛªí=(Šó~HÐ´ÆÆŸûK\äú^öh[µ	¤¼~sØŒO9XÕDd…«mèÚ[äŽ`­¥e0­¨¸0U™þââÂeKr5·²¸¨hsáöÜ<ÁZ"¯?—±Ø°š;²ùŠH?.vÞ@¢¹íjp{°¯¥dñd¦+ÞLó’¾"Ò¿uúÞ€”“'{Òô÷¯	Ö^ÆçŸµ[&MZ"Ü¿áCÖ"#7yïfHhq.F‡˜ôß…’—›—YšÁ$â3ÛhE®†c+´?
iÅê©„$LQíkÑ:rUY'E5Û …ru‚5»Î™µ/¬’ÕFIgmkOWb(6ËÂáýasÏê|ä;©t®¥¦Þ±šÈ _mï6;±¥:¨g<_€ÞPóÖÛèžN«ç©iá$0×fyí}EAvø‚:ÐŒ¢@Þü#ñ–›oYÓÊuöÒœƒÉ›Ý_MÙý¦ ÒYknÆš•hõïô¬mÜ½í@1:!¢½ŽíA%ŸØ™]Åã’l,Zk_öª¾ÞÓdÇ«Ù-œÝV7C7ç¬…`Íý^D=&b’Ü™P‘"¹çhYc®Àø†+èYÃš™kìÂ=k,ÎX¬µ…aq¬çêŒ9ùjŒv[	Z¿š²!WR¥©Ç§±q´Öëž/l­¹Û>ºß\"a$1»:[¹"æƒ·èUËÖ(ªfÙÄ µ%kç-)°êÀ,Wà,]La v–·Ï‚i8OÃK²­Ÿm]z¤ V“Ö­stÀ[ñŸ	Öœøc]´vŒì«HsÖ‚X"›³˜©} ÿÓg®±â7W)8fq2O-¸p[jþZÞ®É\ËbÃÂJz¿ºÚjDklåùçÖðÖð‰üPp‰¡¥Q}ô™›_ÖÞ^¹½4ÖøÍo¾é66¾ØÞ_¹$oVIÆÎÔXë“™h[{{cìÔ7@ÎÌ<lyç›'£SOŸÎÔ¶Þ~83=·MMá³?VI$`mzôÛÑ±ûlœ ß~4
¶á°á4¡ûpÌ£¹ÐöÁ‡´±ÌÕ‘¼…{Üæ!›¡ZˆÕæÂÚ‡ï9ñ¡ÎÞçïâæ/•a/ýú%ÚÃHçëtOK_
¾/0§?J°-!«²©éI­_€ç™ ÑK‘ŸN½ÇëÌå^Ú•&4·óæOÐ<W-[k„dÇZüÍäà$:ú¢Ñœå9[r^ÿÃâ¢R‰%÷Jêÿm®ŠðYé†xmÖµ¨Eý—ÈYn¯.Ë):( ´±†cú²kØG’U)¥39T3ÓÃý<ÔõšôdÄQ:mkyË#e[5fe×öü¶Æ’ÊòX´Ÿùh§èZã@†º»‰%¦s)â‘ÄR8é°¦"=Î`&ÜF´eVÆˆ!Û•Âjg˜¿v”€y‹ú•—,­øìËgÿù³ÿÇÞÙÆÄyŸé~µûqu´ßVÂ(E¶V|±YdÈ 2B‰ÊšZÆÂdŒŽŽ"§Œ›1›4	…*[òrh7€iV.»DÈÛ96>qäm^ü·v	qTÑ›ÊöÊ	µÑÉ‡VçwÝÿùóðÄ$=ßÃ5ÏûÀŒñÛÌo®û¾nÅ1=§)²ùÐsÖÐŸffH¹©mÌð¸5óóÀ`ºŸ5*6c1Ò¥¦v2c †¯Fd¬‘ƒÊwí^[±cC9U-‘¶ÖW>{µÈ² ?{ì¡–Ž…Aš`5`íJçvJkd?ZÊ³Õvý`öš"Fh²Ù½—wÖÜÁ”5‡]Z­üq{=;©Ð2"œ|šÞÈÎ
‘Fi;_íµŸ¿&:£ÊQ¬z„ªRX­s~wÙVÕ45ÅJhTÓïoÍÚ¬Vq¼X‹Åb%Šn‰ZÆHŽåAVÛäk§œ@ktÍÓšÐ—Ãü\rý!ÜåÑK2m©ò1¨RZJ±“à‹X³IJl.rîæožÖž|‰J(ˆÃ†bc«\ëéé9ØsˆÇî!6[$áFl›³á@Z¾=°ÆËv$žr°æ†¬547§ÓÍ]¼&V›ƒÕðÕŒËÈA`§t„yKmZ“±]äÐø˜#7K	zÖXþ¢³fädËå%g­Hóš.ô°æIyX£²álÛõgÆSÉ#-/€d19R»ÌêH£<Ä{33ÌNQñˆ†,Òv`œè¡4„gÈsš‡µ@=Ú<®…‡øk²Õ<«ÝzýD½¯¶{ƒp¤¾¾X# Q~ìñžÚ˜vlÜ:Ø å±¡SF9Ccx'N[Ê1gÅ÷¬ùŽ5±Ú·;kªƒ,4/N¼=RÊÌ?¦UÃ˜Û›òÔNkƒÂcÖÞývcXsõŽlY=¬é)Ç\8$»Ax£!æÎ­Ùì(ÿó”(­el“vY//ÂWÍ– `Ä«ÇF²]+-=~~-öÿo¬ÑªÆÀhæbËP+Òà´œœ"!™/Œ =‘Ü¸›ŒÍ„ARª!á¸Ql®êûJC¥¢"7r£•½kYÓ\lkËË •ùukg&™uíè™ì”µ ÖŠòQPjž†5h~Ñ’ZA4ª£ÌÆ49èLå)ÑÜãeúá°“ßÌWku Z©ŸZ—¬ˆïUn€{[z´Ò‰¦/™ÃÃS½™;?é'i¤ *×H³’×º3™?Ì%‡OÌÏvßxïîâÝ/ïßŸ¿÷ÔF’ÿ"­l_-|yý:¼v÷K îÞ%Lµ¯>¿týÒ××gf/ÝÝo_|1ûÎ‘?Be$M\˜lÿæ*#‰ü@žÙ<µ±:nó7øç›è Û‰$:Wùd`¬éqe¬éìÍËoþò >ºyÉMxŽ¡™®1$]×Åo&lµy™XyÀûþP[Ë1ÊOi££ ÔJZžé´Bòã·^Ø´¬æ`2K3úû_¦âe½iÁÚTY^ÛHÛ²ÑÞ
6mÖ:ÿjU«ZÕ÷]3”Ÿ©DšïÉ¸`{=åMUÈïß¬Ùj¹ˆ‹®)²)²²ÍâýQeCƒê01&¤%½ñxº!ZA„n« K·¥«FBÿ9ý‰4ÎœÖNÒÈýÁ‰ø¬£ï·¿ýyû„2ýÕÚ6Õ7Ø1±¯{0“èà›ú“…¸kÔ‚Lôi¾vÔ+i¢~ÿÓƒ¿>xyBóÒ|lhÍäË ß?që§·"Ñ²FRuuU4ëMç¬/OˆÒä«±Ò¸õPNEŠÂÇªªªÂnl­k*kkÊŠ7Ç+Òo¼Ê ðòÔ^ùÙcì 55­9kíE9k?ýÓ•.@Mˆæ
Ù<jŒ¶—d¶»»†Á¶„„…2üõ×5¯îÀacîMBº¤`‘BÝì:u‚5Pí÷–
‰KØh"66G¸n%ÕM±ššNÉAä]¦R¹k9¨))¬#FÆ¦ZÎÚ&ÂûËy7Âéª­ltæ¢¬=K…k…|“™Ä5}™óÍtÀšï¥v{Û¯{ÝÒ™gÂð›ªž£¦CB
ÕÖ”1"X»l°&”;(XS&œ½_«,£)jNÄÖZé~†(ðÉSÙIžüsËS¸(È.¾nîâ¬³K°¦á]ã'Éy$Ÿ@þNÒD††æü 5ÁÚä8_ˆæ¸›‹°Z k?´ÕXí;œµË~Ï8kÚqC:þZ¸ZHÿ·É¥Ð”(<2›-Ã¯­„j,v»lÐæ®…õæ~(mT´bµt:°]ö@–;<áa-ø2Óµ3Ðšk\sS±ÃkÄ‹è†±æD B§°ŒkøkXF;žy†¹Zoíi’/‡ÔlÅå$dhh´fÓôËÅYó#±u3(MÅ:Ö 5¶¬eeÑ*^þ0»ÆM‰‘~r5Úà‡¬Éü2Ró3ÖØ8a©	×tã½û`$
·«pbÃÓ¤›<<ºŽ5ŽnzûËÓÁ¥«ìµ¼Ô@#îæPÍõ¬¡ãk‰a5Z[9aä&·€ÖrhXc…Ú*5Ù:-Šº*µ/sõ>Ç‰sNe:±áä€ÊŒÒ$í1sÖ$`eË â?€ÉÊ¼IBFÊ<«ð9¯î‡Ð†øl%Xó æéÌ+Änøj¹bÏ¨»4Õw‘AÂ¯X]zÇUÿiö jµ#º¯P¥L·Ž+ÛÚŒd	‰l-ëW$$Û~*ú2|R95Bê‘Ëé„r"›
_ë®©œ«k¾º8W8xcñjçóóÿýÞÂÝùÅ/ïÜY\X¸÷Õ¥téúÝù«ó–è]mkŸ_²5·Ån·!·ç®ƒmý›®«í˜fƒÚà6n,azûF‹[Ø¼Â¬&t2V3Xã‘øÎƒôÆjÔ›Ö§YpÄ(×XƒÇ^q¶@ØÊ{ZhÏhFžK <]yl”ˆÿœ9E$À&árå«<}¡ï µðµ|·ÕÀ‡e##é)ì´ý×)PÝËñtoæZ }²y<[{¬ýõ_­jU«úžëŒG\02®<¼Æë™ÕˆDxM¡ê±¨ ¢8-P-³J!å¤)¶«HeÜq+ß¶<Èh”èG^cÒ½µ)2 û£‰(MâTARí˜L@i6N-Ó;Åkr°v¿£ƒêº‰}}„Ž|D2?§}¿ýùD"C[›À-“NÓdM£[a;(WÝ™™¢¶2™!²imNuòc<µ£GéX3RÓšÜ®?{V“þú“hœ¥­-QÛÙK[@N´!‘`t÷D†<”;›jvTô'QŠbýîÝ%5Ñ§+jhc–\ã`GÿãO¿e”öÂÏžÓN¬ö,Îš¯·d½
B¡½Ûq¸Üd5V’Æ)‚Ôà»9Ö 6ß‹æì1n&Nœ
uÝšáÆ±æ¹ãp=$¼VßÍ]Ï+V³·èô¬±Up‹j [A ¸F^Œ²Ï¦òd*¯¼	ƒ-Õ„I¤K)¯._[]]aQÆf®4Ò[lKPe·îºWöb¶MÍîr‹¯‚dë3EìtYQ¤jëBÛ–¿½šì¡ ’›þÜÃ£ÉV{’›tHï	ž=ÚÓræ ÎZ±=„úT»+û˜«„t%Q=¶¶¶&Z_Ê‘u1ÛzÎZÖÈƒä\Y#ã“-$t6ã¡<Â¤µIbFœÍf¸ÆÑ4Ð<¬‰ðÂi«=Ài¶,‘îé2gM§Ì´N,Èß£·Gu€¼Ç¦,’’‰é‰’iÓÜt—oV“T©±ÖZØ^ÖFO”fùë"[v~ƒ×¡q¢]@j:b	Ãšk^3g-0Ö­!U@úà~k·ðÖšUAŒ·æbé7ìE:¦ÿ³¾&kvf]jc¥„ÕÒäûeÝÀ¥4HW‰»ª€t¨Æb¼vÖü=ÀjAëò›aÛ:o‚R,Ù4H$Œ˜©Æ†Õ¬5wÒâûïê)Y%kh,;ûŽ‡9ài¤uc˜ncü:Œ¥§ü¯¼´ÅÍYCÚ|ÌzÆpD3\s£ÖtQ«c5»]#ºÿ¡‡ÈÌ)Ý´~ETc…Óµ¶&žc3Ö"Êƒ ®ÇàLK°¹9XcÂ4‡–<²Yù´«)R……œ©¨¾µÛ¶]ÌÂ€oZc+éü28@ôÓ÷_,àå‰%‹j
'4qÌ¹ÿof%>¬ä¨•±†ÑÍjrQ$"pãg-;.dƒÑò-T©vÅ
"±ˆ™¦Ö=6ˆéjdb´VÆû[	áwáÕ7úû‹Þà®a†Ûìdí­^ŸîM65%2½µƒ}±åBuuî©š›¿ÚùPÝoïü÷—ïÍOO/^_¸Ó¾xïîÝë__úòËòü{ëæî^ú€’ÈKèúÂ=×>9«‚HÆgÏ|xáÞí¯¾úàƒ³NÂµÿú|6Í]NXQ!n+ ·0±…ƒÿu¬‹Ü®‚´#{ö{ñ8¡6¹om•cë¡-dåÙ$‡gº'ä—~ú4O:sz(ñ»ßh96s!¿åùÈì®PdXž¼Ðw‘š¯—ô®»0©±ôjÐ7´f¼†¯&M562œ·L¾UVCc«Ùý«ZÕ÷]TA–Ù›ˆêÂT¤â*QØ·Bhô±Eò‹7VVÂhÈÆ«Ù´5m©{cÑpC47Jq±Ã)×’‘x21€‰‘VÖ`#mhÖ¨–¶¦z{A¶Ž}íðA#}ƒÜgC³5Š­¯cX6Õ×¾OßÖ—aÞÌT/¨»}"Q‘JQXÙdŒQSS½6õ®Šöïh#JÂAÚŸY­X{ñà7pí‹ÑÜœTTó¦3;µ‘H´"±3±3VØ½o_c*Q±¶ºdb'S¬jk}ÉîÝ…±œ¼¢¶ôÎ¶§Þn««xì…·{Á¬5Ê å«yX{ñÊŸœ^Ÿ¯Ó ²Ga&ZÍÄkh‹FCi0nýkÞñ{Çjf£¹3d[3îÚä®"Ìº€Üº¡3ôH;`ÕŽ’A’CÚ]"¤d’!+$CS¨Æ†sÕDjþaý|-ç…0‘,?~œ)æÔþ5Åšš’)½F@hˆx `…cÅ†°e.¶†´æ4Ÿâ5Ìew—!šC.ç¬éˆÓ JRgA¦¿W~ö$Û3~WÅ¶G•Ïký#¬Ù„5†­eaMoÿ{µ;3éÊweó¼ØÐš3‹‹"ŽÕPž«ìÔÜî–²òŠx"Y&XKÓ›–™ë,íœž><4d#Ó”9Þ¢Pÿ.Eˆt"PîÔ5+Òª	Ð„j|u§¤ïiN—¶ k^Öts
HUK·ËÙÁd£Æ6£Îê²1þZúÙ¡¥)}…%u¸¥±Øôô–ûƒ+´ÄeûÕ,Fßp-ÌkÒ±OuZÏš—Òµr%[)&`AÚ…fboakM¸ô¬ñ"?ÖþÙå‹\1XÛ¾ëGLšFš½aÝº‡™®¶û¦EDk2Ôth'PºvêÔ(›Ò*]ƒÏÔ‚¹ØË‘-@µÒ a>kÁŒjŸõ‘Ý íüþ<EïÖ€ìlÏÚnZkÞW{W¨¦mH£„,ÖØ#vº¨ýˆd‘uÐšJ!‰‘6@‰óÓ‹7<áS_ÎÃ¬¾ÊÒÛjºÖ4;k±)Òâ ZÓœµãi&ö&k,!)2Ü¶¶±‰FÍ_+ªD¢Qíl6´pÅŽ@sÑä2å¬‰<îÝÚ k*ÎÇ	'w¸usÑÅ§/òo¸xy{‹‰æµ'u'V£PòÚÅ3Ìcœ´\=‹BŸþÉ_¡¼úÜ~j+ÀZp•¯ˆ:Zs}¼
/âY"˜iToêÇå\V"GÖ¦çâ»(}¤Ø1.R%Ã¿øÓ‘á~{úãyiˆvÃ“\ŸîíÈ4îØÑDÝ>ì6ÜoŸ{Öñ’˜¬mÚ1õ‡¹ØŽ:ª!ç§ï}yãÎ]ÖEúÕÞ;š}±8wcáö½ß»þùu8íÞÞÚIL·™RH˜Vó;Ú>øà“O¾ºmÄFÉÙ“'Y 6Ïl,Ès‹nÐ[à´¡Ã&­Äj|oÀ{N/¾È4´ƒ¡î8Îè( 7™gLlyn™Í ¢Xí â±Åj££ÿþþóô±Ñ'f†Ò‘È…Ó†ißR V¨i­ô~5–ð%Ûå³z`ó8üòËÿ2Õûÿò¯S½FkÆk#eé†pôdñ^$Œ¬ÂÚªVµª¿þû\ªí#‚3ëp¶zíT”²XÃŒ°ÿh*¹X¬LH¹‘Ë>§–·½mÅ‡û™“ªh æ>O%x1b—!û>3•A[ü7`+–5·	ºÑä¯‘9ÁÚÁ™ÚtÇ¾ÁŠqä”_œ$pàK$Ë3ÑU×4Õ luã=<:ž³6úq€jAtÿ‹_4Rû3œfºÕO¸"»"iòOêhL&¦2±ªÁö}Õ©hJ ¸u+aÀÌöÁÂÆŠhy¬°ªbóÛÅÃtR¼­™ØO>ù™â,ž¬zö×k¿¦c<È%{æ§iV#šßFbëÝ¹i{)ãÚžuÆ^w Yäz0å8˜€½Dq¬F}’îÓ©`N4×þšB!e¯±C[xrvÈºÔ€2b³µÑÃ¦È*wµŽ?œY©ãå©œT¬&Ù˜r –UX,$œ…Œ½8²ù³Q!ÖZã.±Î4¤CÖ ÀÑs™ßÛ~v¶´ü‹ò‹TÙC­£5*RC±µù#¬faÍ Ð™––k“ðò¸VU–»ysb—[få¾¡òÍ¼–~ºãQ$“µ-ðXz¨NëœŒ4cœ¥3ÓÌÂˆá«—vrk‡3|Å¨Pqo’½¶§Q9Î|68¯´ÔÊ ÝXìpÂÈ75Í@-»ôe³ûçl™.©su…ËÚYmÿš•Jš»J¶îàpíÎÜPÔ‚ ÈÀXÓâïÖNwûðÃ¡ÑS-,Ä?•-¼mÂ¸ñžš¿®Cv›â|à@˜×¼µ&4UAÂj((d½uzÂy0ÓÄ=‚5žb¬ù&¡Œ‡U•*;i·|6ƒ(Î¨Ü½éDgç Æ8o3¦ù›¥A:HÓânW´Õ<°yX#îÒ~FkY3Vcgk0b;//½¬ýˆ¡gÚ+ºy¸ˆOƒt¨fœ¶bä1÷<ŽÑÛ[Á%•rÔíG”?Êcsî#ñ&v—âû¬ýâüù`Î«É³š-8
ÏY3V¬¹geCzÿŠe°Z8^¤V# ’ˆÑZ<ª„Gè‹5Û¿eØ¦éØœo&[d½*m$ÿL¹Uâ§)ÂœbÒ[Iµ*‹l{úâã\Á[¬5¯'¬YG›`JHûxZcWiŠä~wúcXAÕÀŠr—k†í"ýù[Î¡EXø	Yî‘pÏ€2] %d˜²Ç~‰Ybzåv}|•XnÃÃ‚µ©XÍÎÆäÈðƒ¢S|ÄÆL"QÓ4<ÜØÈÇ—û~{çN_ßÜÕ»DŒÜU-äü‚rG¿¼·°8¿pif~ñÞml5XmáÜ¹ÙsužÃv»þùì{'?Ö>ÿúóÛ¢µKØlÚ'×Ï²5¶±fkÞÂnðZHº˜­Iô¼'†ZÒ‹|?Ë’Þôít[®%l»Œ¬ÙÍw¶©·ÍPMÅ	=þðEk†Žéi¯DÒfN¤iÝˆ¯„jËÓD–ÏÆœµìµ!l3ùoa)µã¥yhÿžòÎÔ´(ß¿:kí‰¿ý«U­jUßoýÍ¹¢—Jƒ3§"Ž"\)~¼’·¸ì[ËËª¯f‰ÔCÒ´ÆªüóJÆŽl,à†G°×Ø±­m+âªÌ°>¸k
7±Øörÿ‡ûÈƒ¤þ°n_»Š '¦:&Ûë:öí›jàkÑÞŽövÀmp›JÂt¸BuM‘)ÐI¬µDcMªXû8gmÑóGTfbû„ŒµÕþcæÃõòg\¬–¬(ªlëM48BÙãàD’)Þqp0Y…v<\ßm¤'¢y)IâO1ÑeÛ[¯<ö¶Y{a°™³öC`·”¼¯¼²x£¾¾ëêÜ#nÙõÌ£"«ÀXC[öîÞ.Æ¿‘=*eÜ"ù­.Ø®¯ýÕXs'B5S;YˆÖ56õ…6fºµËAƒÎbŽ°µ“>Ó@lÜ5®R
)%srSÕåIŒµX0VM¿¨æZÔ*X•áŸ“+¹‰ØfµI¢1“†”ùÖužÕ€+‰=Â#¾Ò–qÁåA¬fWÝvRvÆµ¬õ jÏ{XãOä¹çdw>ùiÔCd~nÁ$#&óe¬!;)(ÊÓ»ÁH¸ ©`²P‹æ®)gj`2gMéøPd¼33—Î”öH)¡E@1ÛM\s°FÕ£•@r7¦u¬PXÍŠ ÇlúÚáÎƒš	^[9½ßPÍl5¡·3=ãÀZ³8Í©¤Dk kÞE¬q‚wº½\¬«Z_µåµnŒµ;s£žÔ‚HÝÕlâ™ü=vÄM°vâÄ¨a
h…Ãcê/ AF5º|Õµ‘ÍòÊâZÈY{)¨‚rûÖ”-¢‰½nu°&TC”Cªw­yOÕM°Ö<–ñã©íxˆ?¡!ÆS:Ázªt¬ôû-2Klô¬=PÉêamlÅž
Wq”æ=4àšÝãnŠh<_š-ƒ$M?k˜j>`ÄËùi†k¬ÂµwírÖ²¸Vê5v š/À¼™eµó šd ÇfìáÜt&Hóñk¶8NÃB3ZC4›ìÍ¡[o­7L[{~ý·EA²].èFsÊÉaÔŸ9E\¥EÌpÊÎY³†éVZÓ*[¼r Èý?’¿YRejì*ËÖD¶]¼HDHƒµp•óð±vù…b`mrÿÅ‹t«¬m"ñÔúD=CÐ¼SÏº²²ý¸Z‘9ïÛMÓ±£š“§WMyöe9e¬é´UrÅúa	›'jÄb–‡µ¼6›Æ†Ù¤5¹j¼vÆ‡G†‡#ÑÚŠÍ”©™âu”Ïw–§ë
«ê"ÔEªDr$ÚÔýóÿÛ~šîÚy%Š,,ÌÏÝ¸»°ðåütçÌ½zØ®Þ˜¿;;;ûÅìì½Åá_Í.Œ6¿GÛéÙ¯®/vR	yö¶2#?¹ýIÿŸœ|çä÷Nª4’£³l¥³×v½éfZFl¯¡å¨æaÍ|µì·-§6Ö@®7ŽÒ–Å+„nû¼ü ÖCµýû{¢ìcŒÇ/èEÎ]O'*j£ß-ÂnÉNyk+ÊßQšÝú
H|^#ÆjNÎX{ZkÈ/‹ä¡e8:Ö
¬ýÝjÓÚªVõ=7ÖþŽ-©ÏXNkEV0æ_N	¡S­x3wkf­Q)RCìâÑ¶¢âEj(é¬4¤Ó™4\TQÞˆ%k™ºX†2GªdÀa³æÏ¦qyíƒ™:H)Šä"W‡#¹‰vÇî›JOìËìL¤)ß«kLÇã¼ÀU«N4&h’VkÎÚÇTc+)»_¤&ÃXûé-ê ON6VTðƒ*23Uçp¸wgcMÍÖ­%ÉL]*ÕX[=RXU]½£¤½½„"2úÕ
»ãÞG ·ƒÖÀh. ~xðEœµ×MäûsÝ[víéšÞòèvÁWb5ƒµgvÑ²Æ[h¢BÔË¦‘ÖZö
Ö«¼WæÅ©QÚîzöˆÇÒF²œ?o³cuK€X&É@ã>c·vÆ®±/ÁR«ªÑ<å’*~*²Y("vÆjvK­9NdŠÿ¦jâEjj€5ån¯AÇ»,£3Ÿ'"Xƒ¬lªš“N7/GqÎ`Ë6ž¼˜¹]€kR¨)Ïç%kgWµ±©ÖÛ
¸ÿÚÑl$¬F=ªf”c¬‘ ö€ñ4ÆZÏµ\ûE"Ášcµ"}\o$™¯:3Ôò–Œµ‚2ÙjåkršRÉò5-ãÂû3™4‘T>ÎMã«5JÝk‚°6©ül@4Vö Îð×ìˆ¦7}I³Ð®óàÿ[k¾2 5Ô#\³›–3ºYî¬Í•<2­µ¬ÕîšÈÿµìß¸-@nÇWSÊX¬›¹{÷ïßé:â8l9ªé"þ½_Üæò±ÑÑÑcàX€h:Ò¹Å#–îS´fÝÆVß+%V;`·ÀYëÑbÆZ(2œ	¦iÒ<a»wí2‹jJ…ü§íÝUß¼ç™=Ê”Æ–àÉZSE¤8™{JOlCDm kžÔ|ÇË’¯Æ÷±y½ùÄÍ%NZ6ÿZbç/Û™ÉbŸweŠä@ãïË Ã¨fàä:Öà5±ÚNƒDÁóeË!Ù{?23@SÒˆ´á¦Ïóô¯s-®oÏõ¬ÙÓy\«9N3ëÓ7­±ñÎš`íáó›°Ô€2ŸùÝÙý„ŠT(´ßÜù¨øÅÂC´øÀG-eî@YN:•óÑ+Ìfš§løinÞñ¯E•¸à-/n,ØžöïÌŸª k—Ý;ôkÛ.N¶ä\;ó8¬æšaÅMfSÑ³ÊÅb ¿Û[Þ†k"ÅsÖ¨FŠ%öq @§È~<èŒƒ~Í–ClXßàsÍVeBöà²Œ¤ÛÚZ%¯(è¡ò4u$é%î±©Þ‘LÝ„Ê“ÑC1cª…ŒõÒ>å5–WJîžëº1¶0?™¿¬õMÏ/ÊHëéýÃü…sÎÝ»{cøW_^?×ùÞí¯•6²p514óõ¥>xgöä·?ÿšìŒ´{‚5]{‡­Ê"µËr›m ·åÄæ5Iœ†Ü	¬fó©Ý7i»tžÜ‚*KÎ^_ãB£àõø,J¯§XË>å‡é¡Ó§ù×I$>/h`.ËPÙwW{la"³Å©E——§ô‡Ò íæTÙq°Öûr@j‚54’R0È}“`íïWamU«úžk²Ð]kl†Šµå¤©ûc‚”~Kð¬¹ˆNLº>0Ü¦jüüÈÀãÅ#¤U*2][«‚ÇÊJ…@N$;kjIë­ìa@LÇ`µ²ÜîùóvêÎ2}hŽ¬aÞï“·ÕX[¾¯½®#“¨ë„ ¶x¼XkjjL|üÇçZÏDúñÕ3±-Nÿôëúé‰+rÖnuÖT7íLÇËjcUô¾ÑC\6Æ4W-Ö1UžìH$kÛÊ‰PŒ3uÄpÔWQ&¹9¯®»°¶hÛc‡ýØÛ?ûZ«!½Ëü!°†èWÚ“m©—±¶å÷¿7®2KTÛûŒB"Á´íœ+ßÑˆ‹(L6aV³âGT¿n[¾Äßo”Æ™=²ÏýƒÆŒÙÚ!4“¶cªÁdÝäBf¯tã¯TU)ä²û~¸òœ&~JUCÊY«iLFssªk*¢ÉòT^US]]©-u§knv.U¬ºGÃÖ7¬c´ ÖLÁôk—éûÕò—ÒY}x¿ä“—åo-«ä×+¦}{ÏÑC“¯Ñ´f¾Úo…²ñÖíå§I…SËZOq_k@Éû3šEôæ¯¨åÀgö;÷
#‘`×Ý¼5åŠ¿×ÖäÕx(27ÝêŒLŽ>sÍ‹ŒêF£0Š4sêCEt ÷3k\cµ-°†º€µ³ÆÚ·9k
Ý R ©ÙCªÙ(c4\5TXXÇÉ’3ËTÓXþ6 kAvv‘]É¨5H~ð…œß½”.¢*"‚;–öÜ7zâØ1áš!šF<ŽIä™¹úHìåÜŽX±v^cYî­ÆZhÈZ8·ŸHëÃ»Õ÷jüÙChÿž½{€²›6QmÉ}r›Žßt¥Žè0äBþBÎZp»âY-˜´Æ¢sÝŽîo1ÔáI€$=ÃÒó±¬5”=*}â&ÃÖÎo¥ab­9Xó±ýáŽ56à“<6[ŒîHÕÃš?6>%¸ßÛj³0sX;ó‰›-öGa½ujÚÓ“ygÍ»kv[æ¬yRzÖ€µÒó­?Ž»¶²µfÛ@ks`5`-/RéJ ‘oˆ6ZÓ¡KGÔ–CMÉvÕ‘î¤5Rs”E¾<ÿâÅÉ§±Õ¼"Zœ5j ]rÿ¡Ë‰ÜXL”ˆSžóäÙç·mFkNÞdûNÁ~vd¸2Ø–ÅÕöM@—Ë-ÂL”•‡Ø;±ç‹W kÙqú¹ßøt¸a µH‰®"r¤·¡aàÕ·Þ*ŠGÉWŽ–¯__Þ–é ø!óòOvN¨ü‘¦&eÖ4õ‘Ìë©^Byåü¨Þï}}™¾û„÷ßè›˜»JŒßàôÅ[Æyìá£ã§¯µ8wõêÕ»‹¿»téÖ…w>¬Ÿ¹}û“³çfggî}u"I€}ðÉÀ˜˜mvöì%sÑîp+_¤5ä´-[×BzÓÃœj	¿§>Û°˜ÂMrH‡¼Íömu—Æ†rÖ¤c‰ñ_’Ö_F¦Xœ¿mñÊñÍ¶ }#rÅh®É¢œßú ÛÙµówÂ—Aâü'?.[Ö6•_…µU­jU3¤—Ä<
M|#A‘%pùy8À)Èøì€`MÓªŠUÔáhM9ÃµµÊ%##4@+¯¸*‘Ú);-M˜ÕT¦7A@$ù"æ™µôf:îßÇSÖÈ!ø‘t‘d*1Ñ1ØGÌb˜š)D~ôÑ¾A¢å3ƒÂ·¬×G—I¤£ÕäÏ×dz?îi­é/jUÄÂaY†jösÖ®\ùçï[ÀÈ­±õÉ“ÄÒMÀZoÅÚxeCummõúõÕMP …•;Ê£JF®jÄm*!0š©+_“J¶mÔˆÍÏ^yeÛÛ}FX´ƒ5ò-¨‡7RûõëºÒ¹£Uí³7Ù%¤r!}D@rlu‘±]èÃ®@aXÒDk[×k’ÝŸÍdß½ÝÌ¾½D³^5®¸Ö´GXtDM$C×ºANT[»¾ºJ…UMÕ"2k1TSžË›+U#gä¸­¦f=§ 5Â5·«Ù[KÖ–CÚÆîâÜuï“i>ÙÑzÒtêä?¼´—(ÄÎ½Ôy[öHŽiY›Ì›dö5ìVù<f§ µ¼FïöePg&ùb}I*bd#7þöæÓ“[Y\É ììXÇt$@æ­‘§†ÊsâÍøhñNµÃ õÓÍˆ­ @3×w–ÒËÖ,“MrÛiö¶:5>$Pó#š³ö¢ÑZ`®…XMÉ"VüšÔµÌY“Ÿfšž.ÉbZw0ŒO{ªbù“ÓMò…ƒüÝ?…xÖ Ç<®qQþ‹Aœv ¨°9X“—™6·èþýÖžÐ¥°µväÈ‘ßªÖZÞÿcÍeAú†5`Zû÷æíäöïþÚû7<¶›{öîÕ°5L´Ý[e¬yegSs€¯ÖÌžá††(äô=k¡l›²Ü®°¹"…zÖ)m¡—Ö´Æ3p¦e¯Øž])ÉðÒ?Ibµ$€ kèJ€j~Æš¡«ÑÖnNœ•†8Í‹·%ñ‘ÔÇuJ^ñ°fZ÷„ Ñµ¬IÁœ5³Öüœ5¬5÷Ã6Ý¼·6yþ8t¸©b«­h­-×Z¤ZÈ¸õ«é£<Fb›ÁÆÆ@RA"4¨°ÙØ
á8p @rŸã”Q Iü"»¢ˆR`Õ& »œM‡ê Iƒ}IŸŸI=Ìè8.ËFÏrXDæ•Õd‡³ ÿ­±zX«¨<µ%d·ü’\9j¹ªüä T‹½Y›x-BgÞ€ÈµÕ¦€‚ùÆÈì‡ÛHðÃ9ké†þ7ëÇýð­¡ü¡õ©á‘Df¢°cj¤š—ÀŽ	êóa´U}êØ×‘éû¨oªr›èã¬±Žökþ©“ãucþFßà¾¾©_Íœ>20’8qîÂð¹Ï¯Ïgï.¢Ù“³ïúé¯NŸ˜™yç™Yæ¯]ŸY<·pîø„±€j&8Ž-€¦s\6Ä†S.Y±dÈfûV\ƒœÂÎš=ÿVÝXlcEtÉy÷íV¨èr¥²ËË¾ìÒJŽûåèátdòØ±e©Úx¼¢â[¢úýL4¯àŽïÊé·¯Ðe™jþá|j¥h­ÿ'/K!T¬ûÃ€×6q+;ŽVamU«úžëoËxAA‘l‰J+»2<'ƒ5×/NÓÚÊjÎZ±—pAS«×OZ¢bHÊ
Gðæ†)üÁ"µý;3ÀZçlbVkm˜ê`¾š,4HM/<*†l¤ÄcB™"ÌÔîïø¨Ýÿ(S‘ªíè#êŸ¨
õk’Tí'Ê««™ié=ÒšJÕýQµp¶aë„×fv—éÈÿ2V›_eøsum"YÃ•DAÆ£¼ªÆËµØ$“±ØÖuï¨ß¾½J¹«
q¢bÉ(µwÙÜF´È+=µíD¹xpù²Ê 5GkWÞÝ³åÑßc©íR
¤¾Vz¿:Îvýˆ6d¨ÅãZD¬k&7cM¼¦7ªÌÏÞ½KaìÛEy…[µ`¯•“&Vã¼[YX)6›çP»ZŒ«®.Qha,V…›V]£¯©ã(¿æÖÖÕ”eŽ¿Ê›šÖ®µÓ,¬¹pÈãy¹YXóéÚ{4ó¥E>g$è–uycŽ½‘ÆÿHÓbÜ‚‚IƒÇgwH°v(ÈCŒ(¼_“Ö^¢©ü¹—pÖ”yôÐ™C=ÏöT®!§hc¿ÄÅÇ#‹W@/‹#K=¿öˆ‚–Ü5ÉXÊf”7ÐÚ×”V¬cóP<NæcsõŒ4®)vphœ¾µ²
l·9Áš‰ÌEÇi¬hhr¼YE^ÂÁZ€k&_©›ëXc³ÄjÈÞ:5›³fª«[šŠ]èá^âcŠÔ5e­N´V2ÝÍ/X#”ºLyY€˜C6‘'¶¸=;»‡Õ.jÏ€±75?F¹Ú:X`³™u·`Æ5ZhÛä	ZsÅKÀfù"òó\Ëš‚DÙØþ[B5Yã{±V¿U‰Š{IUÝMèáîú½{«š›÷œ;¼µ9Û¯Æ6h[Úº:e¯a©•>ÑE1$
Ò µñÑý˜iakÍOÆfñ°Æ k¸\RÀfÚ"E²KÐ¿`–uçIû@Ì?³!ka9<ƒ×ŒÖ8ÞpÖ,r2„kí˜4HÊAYß­–ÕÍ'ZÜ ¼ýâF<®}ì­¨™ïi°ÆUtÆ‘šŒ í¸Á·ïŠMõzh-‰ç¬'dÄFD¯ÏÑ.nNYeÖŠkZ\ÚÈ·Þ:ðxdMÙã´­Ñ²ôX}a$?jã¬‹
À£°oÇ—·%oíy“ý+:zÿ/(Ò×\5³âÝ0ˆ)rü@üã_ ¶¼,²Áj¢Ãš]–¬Akf¬åp®×QK»¤à“Ëú´¢Ì‚–…p•z}¥r p™ƒ7^}cd„Ü+rFz‡ßxÃ†«Å£‘/…™ÔúwÀ2`-Ó›ªâÓÆÝ¶ïËt|ôÑDŒ4e^@ùì³½›Ò”á©¹¹>Í2Í¼ûþ‘HºëêÂ¹Î«D`µÍÌÌÞûàß}:rõêè‘O1ûáèÿ~ÿú×_ß›ï|ï½™³'én£oíäìIÜ5Rþß™•ÍÑ±{ç³Â·³Ÿ|"d39'î/ãšwÖ$œµ³g¡5ÄÆmró¥uå¹p®ÉJ¸¶ŸÈËû{8‡Õk§Oµåüâô)šÃÆãµ©Šï˜¨æŽBí¾×ZXW¸_&œ¾U[I°ÖŸ­Ñ§È±ZÈYãæÀÍœµÎUX[ÕªÐ÷:¸?Ræ²ûíõƒ­º½9ÓÍ^G7kìõÒkêFkVã‹DnºÐ?Ü®­¨MÔ¦‡+¹£Ÿ:3Òˆ™ò˜Ð¦H
Á	KÖ%zwjœ'm#ðÛ”âUÄ1Õ”Ýáµg§ˆ­ï­lÃöêø¹+òHÇÓqÜ7ŽzÓÉšiµøbr½jRÉÄãg
ÊSƒMÄ¶£ç_Zf­Ñ³–¥µ´Š ÿôþ kÔ`1ƒNURÆ‹j4‰ÐúFfcã¬­{ø¡;ªªê4…¬ŠXÈ’ºDäí·Ÿzê)µß|öÊ^ydàŸýã“/]¦=âYF¸|U\^é²~¡½?Ø»—ÚÇgÌWÛ+
#A6›»-i]$gYHû0¶×ØíÞÀ<àz»Ú-Ü«·NÍkËÚ*Y73Í4å±p­ViÜà	³É,äD=l–î?Q«køo…M*ê1;-ÕØ´
“¡æ!í@¬†tÙ\H—§ªÜÃ1
\±ìP5)xódÊNÁ–¸$bs°æïC¬9²Ë- Ö¶œ9*b6H«±>‡ã‰±¦÷rÄÐÔÖ³1#FÓÛ¿b¤Œ¹|26æŸ›“âø™ôÓçè÷!~¸	Z“•FdgzˆL‚uFC”†dæ,“±6µ;jÀ›ƒ6öôNIiuQ	Ö^7RÓÍ)œÙ£›g5gqè-´kZó¥(Ã!=ˆÓn¤š¤pwØ­6ÈBËõT$ˆnƒÀt¤EÈæV1™Çµ«f	k&ë<Û¿ÿÔè1²Dš à	+ua8á=<WŠËæÈÀÓÚ(¤ö*eàZ¨mÍF-sÖ²ó°Ñ²HpíÖ‡õ»~°{«é Î¸~llÝÿcï|câºÏ=¿Ò¾\]í»•°•€¬äo‚ #kl<#B‘­²fduˆÆdl„]UŽ™8‹m»Ü!jCþ,q=8´Ò½¬ˆ±ojGÈ	êx‹k“DÖDÉuºÙXêºIn¤UWûù>¿ùq<±“ö¾Ïœó;çüf˜ÿáœÏù>Ï÷9´{÷Sûˆ[$A.kfà¿Sc6í‰ÞŸ•¹ÈÎq'ö¹¦Ø÷¸ö{UÍÕ¬9mÍv¦iRFJgË|°[¢yi¦8 uYGì‡zhç6ðIæý,•µ ¼U¿ÖŠekÙ&PÖÖ¤5÷‘äJé¦åeâz8XSµ¤(X+¶—iÚvr^ ¬±ªyŽ´Ýíé`í,¬˜Óû[ŠÖ¾éY&ãþhhƒŒ„C ð"g'bÌÑØ¡àˆƒ7ÐÖj6–…úújËÍRb–k½¿…03×Š©e]Œ/ÏR»ä×ÖžeÔ¦kr‚}þX*Zß5îÎ<6·ƒws‚=Æ¸ÁZ|“Î¾ËiÄéjîEa`-H€$Â‘áòŠz¨R¬ãÎoOÖ‡¢Ê€2ûa7žs?xØŽ)€vZÆý,9RI 7áÚË ZŽ× °½0†Æ–{n,Ž¶õ÷ÖuªãM¿îoæñïªÒÞýãéÞ­[9“ù˜,—Û‡ÈY!O¥-•Ir]¥l½ùáÝOútþöÑOþôåçŸ~zù"ÆþwîV2+…/>þïï}váæìÅ·?¦9687$:Ûì—€µK¾(|ü£©ÕéU&ÌØÿöíó7imO2xÜ
p­„Ö`s°&amuöÂ{ƒî-|%7­Á†·õ0”È}{‘½[®¸}ÖØÌNÏd+±¢ 6œ }ÔÖþ®nØ¬¥df£Ÿ­Ðn©>çœnB¹± 5Ãµ@W#r¡ ’ÛW«É]„Ø|nçüë±ëñ½Î‚ÙAg0"£‰l„å«€cLŠÎÜ)•¤ƒ5ùwi®FµpYñ±\tWÕ¸…¹ž¶ÆxGÂZªQ6™hOõ´aBb$¥l8@æhñŸ¥‡ŒÉòùÉþ®LšdžHt g½¢5¬#)Nõ’é‘‰'°ÄšœlmÁŠ\f±ðŽ¾ÇNöí˜;A‹-3ÀS\µÿ¿»üE`(bBYWÏQòÞÒ” D«‰µD	ss4L¾ŽÉ–ÎX
S’‰&y'6µ<°iW5êS²êÍ'*Ÿä³'?d ‹ÙÖž.Âš}°öƒ­jTØü`ûáÛ?bïÐ=‡à‹ »m7ÜFp¶c áõ®ÝkXV-%GGßg`ŽîÜ8V(Ù‘ÿlQHáKy®×¬FNoÊXûè4ÚZL!Ød·^Õ¶×9?°­©Ï Åµ¾îìÀ_$i(Sh&¨^3FchÓ¬ËVÒþýÛËúÓOÇhÆ¨í–[öŒ†µ‚7FÍ­½é”`íXñ}j¯f .{N+%<eYî3T¶ÕÖ×ÖRª†meXÓRÉ;5¢µÙ7°æ'Â«ZÛvîkh­¹.ZKCZ£GS££êomh)¤5 Ížb¤YØÖ÷Æ–&§Ú©ã„ö€5/­´T­	/¬Æ
«¹öñÞÑ"©±±Õâ:k‘íµl÷Ü¦CûwÒÓÿ|²!1–ùX³p¬&uÍxÍ?l×¡Áà‚þÓ¿ž~æ·;;}Ö¹À[5ƒBåS&§é"ìWÛÆwnsURžÙ^¿üz×vH\óÒÚó&­ù’µRaÍÂ™‹ðxuüÀA±È)V­xh|üV+¤F½Ú®ƒÇÇÁ2±šYKRtØ&¹EH¬õí",ù,Hã4¿6aš&à5tµ’š5èÈT5[­)Ö8ÎÍßZ´TÈO2X;´Øö´æÖ¼Åˆ_´5kDInsð÷ŠÛ"o.VÓ@©}°»ÖÔ]ÍwYc%köp¨¦qÎÒ¬¦åfZ¦ôYHk‹"µo÷îgðYŒeAZlàŒâLFˆ¶fb/nQlOkìQ´¶±C«ÿ
¹Ø0cgÝ",Ç6Ä`mVSÒ€5Ö\¤YÁÒ›—O©Òzî
°ª L¥0]ßeEÞkßi5âxkËh¿+‚oYxÃF]ÿG£8Xò?½%¨°Ô ¬ñ¾7ö0ÜŠ)2Åj2Û"¢Àìp}›H|!¥¾es?ÿ<ïÎåóÉ†ì”V}°5ýK*¹“ý™p4žà×ø‘w¿æ7¹<“GÒò'{R‰„•¯Mv$yYº_qºâ¹É‘=šá¦QzäÝ_"®_\-¬|Uøó¿fnð®î_*|ðÅÇ«Ó³Ÿ}QX¹\xçÒg«–
HiïÜ¸s“–lÿûÆ¥óà”ªÚ˜’áÈ¨Íí]’¼f«KžüZ+-]sÒUkhuÆ|…övRíœTg ÈÃ…¤;lZ}Ø‡°Þ×PÖxøOã÷×?ÿóÙ™³g·ÕWV¡¶v—4Áþn—~¯ÒªJq- 9w6s²š;äÒhxø¹çDf?÷¸Æê`í9² ×-o.R!]­~ó¹ñuX[õø^Ç?PÇ#X“£ˆRì•éœjÚ™$4&w°è¨VaÊšír³“ÙÆÝ”ËpOv¿T‹-¡T[cÕek±H$1‚5|(žNÃmé®D{¥LýÖà¦®¡bó5™§¥éÒÜ1ù%ùøJšËöäóC§‡À¼HbSÓ$9~Œ“ÕuñöUÍÂ²]×è&¬²²µ"®ONY[½
¬ýõê4×]íD:ÑI"d'ð$Arë7"SdœSnYÃƒèlí“ønìÚË5Hóààžê2~ÑÊWä%š¬=­ý0Û1x€ËK¬ ~u„ÇÃÆh‡·>pø•íÊáà#{¤¥ÉÀŸ•0»LÖµM»vðIf+¢ñÚó°9Ü#Óödõn{™ç¹jVc5`\È^‰gFmÖà´æÁNW·òD3’¤ÈMN¨.2lŠ &uvrµõ ˜Lfˆø«hi€Ð|Q»Þ’ßæÊ:çßÏœãžàvµí”$à6Á}K›¬Ú‚³ ¹šû:"€µŠò¹cUÍèë;a¤.Û~B°D“yŒ<ÈcOãÞÿtmhªo‡õS«GbST°+—S—×t7¬Áh°Z}ªµS°6p4ÙNK‡Äñã”®¥¶M¤&ÌdÝO±2rd ek¦¤i¬ÙÄçkG}Å_tÕ)k?õÒZ)ªNWó¨&YM×ÏÄe/­)\NdÚvñƒ,V4n_øAß¹”Ö®bùå€Ó³X<ŒAfVÄæ&Ø2á Î‚—óm@fÏ b×v#9‘F
Ñ½©ñm‚é_?Ó=^„5ˆÁùúŸ½|Z³xïeÇ^Y+­Xúa+þñg&¬/þf—CÙ÷c
©Š5Üê÷â"rkï®]Ça5ô6Á9X‹PßPcßŽ«Y3TÓÃ¬Æ`#šš-,~%JrŠ™…ësÆâ;TÛÖÍ°š¬¬=Â÷ºH$…¸vH5k¥´æ3 Œ×V+UÖÔRÍÂ®b¸oÂµÆÞ$<ä´µ[‹Ûó´'NíöêûkFjÞRÀ&H3/HF=˜bðª¡¬)¡XÛÉïR Y¾©«1¥ò9æRØ7HN"Ý~¿îò)ãÞUDà°Ö§	Ê¶¦P×66ªPM)a×Åk\ÃÏ)ë¡¦(²š÷yœ0X;Fú=Öææj+§¦jûh @U(«©{[É}%†àè[`-pÃu)v“;±€’÷DX‹r»pÓ3 œËú411Äí-HŽËõÚ0HW¬‰ÆÇˆ\O4GAËžÁgD"å™\×äŽdd˜ÆÙ™Dsó$÷2ut,›M¥å/òÇ?MÂfxþ¶gx“P<ÙÑÈPILReÐÞ^}°#šJÐe±¹9Ñ•žÌ­|µ2qqöí•LfáÏŸÆ:ç?~;›ýì³îœ=;»´tqžÇ‹K_|€Ç¿’¿øtþÎßß Ôæï€ko	Öˆ7.Ìä)‡BY’€T ®•ÒZ ­±ãqí7ðhí<&‚¶²ž™ØÛºÚ8L ŒŽMc+èC~³ú›ïLº´¢µcš£Pnzfbf4
2ÇÃßh»Œ-ˆmFkÝ–ïXÊqÞRË¼mÙæÌ™çDk^ZcôÂšy”ûXKC«é—ËzWìõXïw$u¢5WB@›©,0sH=U¡óÖ!¬Àš…îƒÖJaÓ¶²QM=9éÄ#qúWÖ„R°¥º\$i‘uÅ³$BÂdB¥´lEòìF¢#ä>æ©HCCË¨÷Y:ÑÑ>Ô®”È<ü$C¡®tWš¶Ù4—i¢šÑG§ëÔf;~ôÔ©¾¾Çu‘ÎÕ:ššúlÎýFk¯
¢^|ÑjÖ®gñT"ÍwÓÑJ~cèhÌÆÃpZC8žli£«ˆVHŠ$š›[x¸³®n÷î½o¨|íäK°ÚÉ—Ô[—FV²¬5¼•A`AíA=°ÑØ~tpÛM$—ÒäDÞ®îØkÎ_DÊÚÁ‡uAíaMðeÀÆ60ÔnÖöìÆz„×Û±ó"áYÝ	|ùiç­=Ž±ƒ<}Zs´Wû¨—Åz«™µ“Àc{Ç~^e€Rk€5t&Åj”ïµ¶¬q‘Á	Ã`¥
:EÍ¦ÜQšT¸æóDQJóêY€iŒÅçªŠSþ«|‰Ì0QÕ]QûXEymßÜ•¾SÐš ÝÃÚ}öÊO¤×PÚ²üÌóO»VYuíu*¸øhÊã¥‘¢šÉ.ãg'ÊÊë“ÀzÑãûšê&a1™˜šê M8æ\ø…`:öÁžwí'®û^i´ÆS‚5£µûáÚ1žÖhí_Š^ï)^?êQ‘­¡š/]XmÐ÷K‡é±9¼‡|»÷T_çoïþ‰"%!B303Fs›€Ôô –ÉÄaäW¾%´sïWlc28pC|[äùnænyXƒÕÎ\~ý¨¶ãuC5/­5Š‰R+ÈŸz]ZûÝÏ>»ºK¨vèà'oÝ‘`{¸8N®ÔêAM"„f°fö"–#9>¾hde %„$2¨XÓƒÐà•5ß»TY3Xã'•}‰7	LúMárá'X1ý Öø¶2+HóÔ÷Öý%#,k¬fÆ"Õƒš5×ˆ›ÅBs¬žÉ{<dñ#Åâ86Êˆ„¯øÆ0¶¤Ð³ÞÔÄpÍ—¬)’ÕÓšáK ¬Ý›-!+@µ€Ölý&­Q¸¦ t-¬[ž\D)Hk9\Û¡5If«©bO¯2ˆ3“%AÖ×Ô66>öhMã6©y\¬+ÖN=»V³†_;7;®Õ.ÏM•ËbDÙ#®€–ß õzkNm÷ôÆþvË©|ÁkDj5¦¡5~w0Q´ÔíÎç62ê¨o“£žã«Óê°DCM[x8%V“k[º™xP¤b)Ysqû3“Î'[²¸\¾nO5ÕjøŒ(ÈBIcüØoù)ÀÚH?}µ‡ñqIqÚŒe¸Ñié†H<Á+¨UnîÊ$Z£’ê._¼8Ì‡Ž~5ëXxïõ³üï\Åòl6÷ößß™žXÅ+œÿýŸç«ˆmó3£ów
óo¿t§ ÈK³——
çW/¼ÃÎï–nœFžb)­Ý£¬¹fk¤BÊ¥D«ƒ¶ÂBš¸‚t5Ék œË¯$˜álÖ!Ÿ
±ý®ðm”?±‡–@^mk‹ök«ø÷Ei·5–€ËØÚ„ßøD5‡ynTá"ÒZ ­¬Æì™áÆR“RÎ½­ñ_ÿ?­­­Çz|¯³ 9_Xt4ªÐ@Ág•õ–]O?a$¶T
ÔXa»ZB§XW¼VS%XëÁd$ƒÏHÜ:Úä2œg¸ØÖ•@LƒXbñT¦_ºgFöú‡Ú#‘~êŸS©<yöb3Ú|‘Æqú4YiNGŠÞÿ-GÞM·Qj&Ò¡ßÚoÑjËž|¶¦öYË€Ù¬néDP²f®Ö®¾hÒZ8ÔoKò%[Z1²ï,#AZëljoM¦'“ I8ò`²£S2[‡\9váÙÒÐÒùàÆ'N>{òä£=zò$Ú‰7r<QdµŸz#“ ©ØÛòq°û˜öƒ=j† mGl3{ÒœûÈ‚Ö@-å6ªUkpù%¦#~×”5ó‚´9;Ôž½—ˆÏ:ÄU÷ÊÒxH¡.u$õÉR°æbD6-°i‚R¾ºæÎé|mÚZ^›M­NY#ÎqÆ`#X+^¸¸yhÚúð»åZN+þ6%»š
ôµ»JºÖlš`JsþÝðÑÛðXíÄ•ŠG¹>CXõ¬F¿5…Üâ–«¦–‰)îhê_6_[©îºµ5\Gqýç‚F‡kÒ	i…†Và&­5’¤Ix{¢3F›5Zbwwcîˆ¢–ÆÿÑú©±2¬æa*5q™›á9“ÚxÑ¨ùüóz`ZÊÖî•ÖÔ	›µè,"\{¯ïûVkÚëê<´)ê<¬Þë`ïÖêëŽä·î®Þj|þùÑ©@Õ2Râ¡ðÞý¨šbÙòi{½Ó`a§
Àdýˆ¦¶™Ä¶iœÚÓ˜âÓm¬6ñþe"PÖ”iáú¬•øö—Øö“ )YqIÖ"°ÊÚžëÍÞ:¾k8‚W½ Í:)ÀPã@š¹?:ŸfoÝÂéHã3¢I5ßf­ÔÒ¶â4ÍzYUã4ÊO·8î	öÐ¸XSŒß¢b÷~5R ,Z3eíê½Âš§5¾dMÏ¬½Èš¶¸VìŒMð£/JTóek8‹ ë‘‰Il;;¢îF_;ëF<¨±:éaÍ×2èjNYã]€µsç ¿n™Œ<øàwÛA*’•(Ó­¿ÑC5‡))lCQí«ÕÔWÔš¸¦gÊ¥|Õ †7*ÈV«©Ú‚Þ¸üè–ÆkÏLÕïÀšß±šƒ5'­¡¨›¤êT¯-“=G[ù¹*ýÑÇT8ßì3§
¸oSÑˆÒ	[]ïVC3"6oË¥S¸HÍ÷ÀÛ6 ï–ÁBÎã0“,É”`m®-•åÏ'‹'äX†r|<íÉõ÷çÛrÏ)yn,]=‚²ÖÿóŸç_Èå©ˆuµrç³}’{˜ù3Ãhk>ãksiZ–ŽP
žéiŒc½­µwer‘læóÏÿô§ü¾Lnxóh*ÓÕ”ÚÿöêÅ3g.’ú8‘»¸úÙêìåìÙÂïWg–¾ølaé‹wîn/.,4DfVn_8?¿0/‚šÝqvéÎùÕ¥Õó—
Ó«Êc¼p{¥pg~þ¼ìG‚LÈ‚*	•­]º\v~½ÎúnÎ_¸T8{	b{,(Ñ Ôç‰Ö^Fèè‚€Á>ÉÔ=…k®1;A¡C6„=õ¬E#ÑŠ7·Ý›éu5¯°±@£Ö5Øó´v«¡ºÕ{XÛà‘MÂëæÍë]±×c=¾×Y!w¾TŽJ#¡ó©Z•2†tžA€à‡ÁE®Qš+	g¬LY§5² e	®PÂÊ˜´²|*ë ÖÚG&ÓéI
Öò–¸1¬õS¨ÆÞ	é?þq,O¿+ÓªôHâÙÐ‘¯ÿík3¹´.ÏMrFÊ¤¨xkO´#‘Åýewì«yiX°ö,«`Zcð½±]÷3‹«o_ÅÁÿ¯osO-Ù™ŒuD ±Î]­{[Â¡lª+ˆVwdV!u§¡©.Ñ©º¥öj¸fïÞ½*"aü/_ÖÞ¬|ó‡¯äN.W	Wk¢µÿÉ¦!áÏ®®~D¼â‚¬G]:”‚¶‡ÌÇÃì<ié<ƒ‚æb7%kÒÄ¼šÆC;l-%Ò“áÄ¸W>Ún»wu[s;ƒúJ¾åº]{«_9=(ìýè£Þêæ	¼!•õÈþH kM$=žëL$êê(ZSlwÍ­éjkp…iÐÁ¾ËÈ&h°Æ1#ƒKQÍ{‹Ø!ƒ¿éøM;n–C{Ns:pÓEX#Š¢•(L•ÝSUS"ó¹Š“üMÖ·8¬À©Óh­onª3¾0Ds]¾VNàU5®¿šß0’²‡5t5¦*Á²¨~nhµ¥#!3‘‰èÀ@w÷ ÷¢ãûÌ8„H»ê4•ìèr ¡76ìË†­²MˆêxÍ>ÁÚ«ÿøê·Kk²Fü‹pÍ³¬sô.:¿´A¦Ak^Y#¶‹ýi›]§žØ"Ç‘ëu»¶¬M8Tó´ä>zr»Õ<«‘ §~×ÛÀ3M€ÎžÅz¬ñ¤ó‚×Äl ÝN A/«×¨ZƒÖpð76ðú²špíî,Htµ `Í3C?­mÝÓüTó¾æ=‡[ÇozsbššIaô"Ë~T>žÖÇtZ£ñ€`Í-j^\+1¯©.¦­,oó-€pÇüNŸÈk‘ÕmE\3ˆRŠ¢ú¬•¬Ùê0Å¢´RTCYó„Vü¤ è¤6.‘qó-j–9Î·!áÑ^ïþÂT[(i±¨åY"¤w1ƒFVgßoÇbaÊÚ9`MŸ¯·Ú¨k#RùZ£äÖÓZ	N*û]À,á²¨‡5ö+j·ÈÝŸÿ“œ`CôÈæ˜†ø¹6–kh¬]^®ìÖ–×`D…~+[±*­ç®Íû§¹sÇŽ]¢é¬†Y‰¨­‚UGly[¨êÞ>kš)™sûAÉXã¹àØ=+Xc¬hô½
œu¿î†4#`E_Ë2I„ãRÖ²Ã)’EªÙzfò˜*7ÆÂÙíHÇä5Â¥<Ôe•¿ Â°I'2T4qªÝÕšLîÍ½ü\>“êjm@”‹å5t7½O[ëå¡IÀ-éLÆ3¿øGÉëù±l¤3ÅÆ.¿½º”ËMÌ–jÎ
÷¿žžýà÷«KÓ³óÃÊŠ\HÍfZ¢°ÝÊ×íÛo ´ùU ª033¿ºzQí&“7ÅV¦Wd¨»¤µµ4HOJƒ,ÜARSþ$°VP°waöÒüÂ*Óoà1>A}„mªkz½\‹7Vâ~ÚÚOÜã.iíW£UÙTÆÃZ”¾ªõƒÌ‚­ÏfD÷}=FÜêD5'°iôáa¸›Õk¡âùÕw³Ú™w'°¶îÝ¿ëñ½6îç<Jmš9@†œ?UÈ¹ø‡ØV köK¦0ãŒZë0EÑÇl-S²€ì!²'–Œ \HXãŒ‚_UÅ´9‰¤	²!i§vBáN ÁÙ„g†^àKÛT$Mgì‘ÎvvN}úô×_÷‘Ë‘ÏÄ2ýCè?]‰þ#–CiýÏÚ»Òéì‡Å²Ãþáñ—^BW¦i”5¬¹À	råbtü³·vªÿs8ÜCÞ:>"­‘ž±®ÖŽ®öºÉ¦V’¹Ü‚ù‰Éd»d§ÎÖMðí¯èè<ùÚ›O¼yò‡f/òì‰SW`5yA*oëê«ò‚üô“AHM´æ ê ¨F	›ü!	‘•{j;äfæÄ0kz]jiÊƒ<#lF±ÝÑ{ŒÚ:X´™^0Lî$uÍ­u½H“rdg¤yZ¤\ G˜;=ÂFÓ\dGe­®X‹D:tÂŽ(50ÙRÖ¢fl
_­VÌ„t¹ôÖ|5‡·’(± ö×;Åj[Â»ó9‘¬î);ôlg¡UåµH‚µ?ô4{	k&±kPï†¸‹<}a­›wÒ
¬5Z­ÚÝ°b*„ÍL8¬´Á®¿¨t™ªÐN=Õ{Ç÷™GªÚ(\&êÂoÄ$³tÓ>¶š¤ÓÚTf‰ŽÔØhË+¤w¯³ÞÙÀáFß4ïªæ"Ò7<ª—I„tñÉu„56$@:ýÃG‡õ²AV£Í¥lÀšÑÚ—#íÍÕ#¤A~2zW›3_¼æËÕl°}‡j.^R1W:°æºæ?þj1_þÍÖÛ­¿–+7[)m.fÞWœ‘¶f¸æ”5§­ñá>	òXÀjET#>CWÓã7{|X£æ‹:ÐÃj¿›[´>uL‘„¶kŒ¢5‚éÍÝ´>Ë·¼ytV›¡ï€`Í„5t5Ïi²Æ‹·í—ËH ¬ðì\<´Á.V®•8~$wëÐ-Ìû©;D<òÚ¬™²VÂkE6sœ&`³£R^ûÊÜ ½˜FØ¸kT¨úÑâÎM5VâÖ&YQn´,)Å³Ôº_IÅŠ5ß°œ‘ƒ{”5^|IMi‹‹\7–=pŸ¸‡Õä^£S±"hœaŒÔ¹?X†;PWæªÒxI.ŠLrL>K9%kRÈp„lÜR;·|Û0MdÞ/DÃ–Ä&üç×2ÿ¦æž¿VS{mjKvÒÕè‰¯6jˆ]£cÞÎöŒAØD)­»úU±ßÞ’ð°ÆF¹‘ag¹¤’3‰z¿.
Ú¤²Ñ-.d%Y;Å2ŸÍæ²€Sk?´²ä²ä8æÇ†÷§â=cºïùÂy”¶±\[¢£¥3ÿ‹ÏÙŸèlk£ch¬+&zKìÚ[öðÞT.ÓžÎ¤ÛÓ1Ï®ÉþþÏÓù±çr±¡nZÝC;òHq“×Ó/œÉ%šRYR'sï¯¬Äc¹ËŸæj.®®^†"÷ÏâùñÕ‰…ÛÙËw~_{}i 6º´zûòèÒÇçoÎ,"¹
¬½UxëòØ¶#7gnß<þæÍ*Üøj–<H¢TZsZ+áñi~i	?HÚÀbàßùHm,gÞÛŒâ–nš™	˜¦—¡àÉ;R/'!óBÐ-à~I—|Fî·ÓµªÆž6‡hõmmÒVÿ&¬•:ŒøØæ·¥SA©c`éS)U·æ!µ^X«Ù¸ñ®~íÅ^€¦¬íÜ¹Þ{=Öã{ù_¬Ð™‹Øšg,bÒš6Lèæ`¥K8ƒÈk°š«S+ªš5Ü Åh\’Í
Õ`ìyÙ‡´#¥Ñh­DÃµŠ˜l,š´õåS±IŽ&{¿>ÝN]tï×‚µÞ'¢xŠôI\IH›dúÚÜd×d¬¡g8Û–O¿£¸ê¿|Ø÷¡ªÕŒÖ¼°fnk¸v±¥%qôÓ£»Z]á0­ê{¢Í­±|¢5Aù\]k}ZöR¬•ØU­¾ Íí­­-„ŸxíÍÎÁ¦rüú-NžÄíæÊ‰¿˜²öSxíêìÕ«¯®Œ¼2]}DÁÚ“ŽÃh"±\cZ.È†äIJ×dåoæ Ö³ö¼M„`ÍæäÊn+o¶Çu×^Ø8$Q'amÄhÆ"½ƒÀ u@jšXÃ:'M2Œ4uvvÔ1B¥­ÉsuM”®aYÖl ÖÓÐšöÎ‰É*6j¢xÅRN°!üýgE©¾ÆÖ½"P×Jz§ùlHÖJOŽ@›Ÿæê‹ù¹Êò+Ç0~ëë»ò³•×Ê‰åˆž{À†‘UUs×ª*Ê»—»ÍTDv9\"¯ÕBhs$(q	¦Ë¬†SˆvºeZ±f+oi:>°O°F$™Œ)ˆM†"JnÜw½5i°ö‰5]ƒÍØLˆæI…àŽ…·Ö^e)5)¥5E±\í.Z»L"¤wîÓÚ9Â
Ò¸ƒÕ-ºB5þQh{}dëS•_~Éÿ6^ø%Ìˆ„rwSj§Šššçµ@V3O÷eœC~ûk„5e>.n²j4]»ïdíFZƒÜž™.ÊkÓfYtíß"È„´<HxÀBŸyo?´f!VSÁÚ‹Ÿ]5O•dØzØÜyi;¿gÏ#ô1»%ÙŒÕD-v½…ÿSÍ©ý›é33ããÛ«Ü]±Æ¢G©´4Æ†Ó,R1­·)’ƒÜC¼ç‡·±Ê€Äð¼µøÐ¡ÅnZÂ©-6¬•ºA:6éa‹†µ¾Ø„ÛN‹Ê\å6Ok¨w4q»µI#21!6AjØ÷cy+â\¯5W±æPÍ't:ë~F£5÷ïŽ1PÖÄªú«ß„„voÜ·b&–a8ká°þç±*	ÐˆÄ,FBeØîPx{aB’Û†Fía'R*¯ç‹jt+e
 ›sºÚ²j-ÉF7?H‰ér‚Öþ]ƒíªj‹F&"§XÍ¬ŠA69ü÷ÁZI&)kÝ`NWcŸÑÿ2¬kÖ>Œck½USpÜh™%iecˆJ=ÏÚŸ
v!±DkCŒ5XË@f;Øâì"»jýC“M¼¤!’ÿò’@gK´2¨² ‰!VºÿÈ¤úšÆr™/¹õ	“¡«©ÖmH÷åäâõyº¹ˆS“Ñ3ûsù®,µpÙì(©aûS®fteåý3=;Þ›]šÿøjÍÌílneþöÀØûgr+,"s¹ù7ÇÇgn/Ü¾¹2°zçöØû_­nßwóüê§Goß](\ÂIòÂìÒêý`ÍÓ“VÅêBý<‹-Ý<??¯’4¬F¨€+O‰ïY—tt3"›_½£‘ayãüwØ¹)‹‘KÎmä^ZsŸeQÊkÏLm©„Ò¬EÚÚDk÷´RVûÖ¨b-5o©¥ÂÆ Û´VÒXó´FIûCé”kóÐfÖÖc=¾÷ñ£dš„dm®”hÔIkkf;R[×º2}€ÈÌ^¤Òž\ƒ57VUÈŸ„·Ê*…XcHå²™~W‰Ö”èÈ‡cbµ¡4©Œ	ˆ8ƒÜä'žÀÉKÒzë’ÉIeA’æØkO·¥GÒõáH §N ù.¾|$V?üÆñx*ÖÙÒÒùÆ«éjý/6ÃõXc5eíÿ¾Þ‰q1®w%ºÐK"ÙÆ(×˜hÄR‰.*¶~ i T«¹µ)ªSÑšK zâÍH½ÖÔÄk¤Ý<nÎ“¾dnØ³o_ýW·R.¸óÏ•³ÓÓ¶‚j‡Ÿ4am;­±5qX°¶Ý±Ö“Þ=ÄÆÒ®kLêÀU$™;ºÂÝµ˜1y®Z±{·Œùé´f. ›\™bÀ`DøVGP²všNÙH-œñùQÛiÝpnCgS²-IÏ×¨¥SLñYŽÝ¤¨­iiÆlÎËß¶ÖŠä&Š»ÇSñ.­¬8Ï„ßµ¨¼ÖÞ	ÖøÚ¾ŠrpìØcõ'!Œ?œ‚Ÿ‹#'Ö 5uZÓö©Júâv//wóÁîBm‹
W*dR3'jWd,Â5¥ŒR¼‹@ewy÷ÔÔ¹Î–Hj_M,‡Âk)jÏ 2¹;>Õnehì¦öñä„c5bÔ¶N];¾O%lhpúÁšX°Á`ÍÓšOƒT8/HOj…jÄûŽÓLT«®~
Z«k¿þƒjmÚ·neDkƒ.3¶ôÇ:ƒ5vFè—­æØ¼¸VZ¹vÊÓÚ= &UMz<“ýÖp¤{óC‹0¡â4€jÙ°‚d¦aeŠ…ÈŒÕž3U­I[›»Ë^Dá“ K;¬jÈj/¾øÙ’éjÊ„ÄbÕ³š…(cHÅ-@ÍlE<­µþøÇŒëµºa§,Mûš5¬yiÍíùÿ¦E Æ„6$wb¦õãxñNî‹ÖçLäfÚ°8Ó[¸ Ö¨%+¢&Ã=}ÖŒË<¦yeÍ/,J2 7û°ÉqõÀFE³>k¦­m·ÜÈ‡~´i³²T½ç|_kA¤PÍ†¢®æ‹Öì6Á7û¬¹bµ‡­ÏÚßkhjÑ0 Æ
é. -ÆÃôóöˆÂ–°¦"¬O*VÍ†µÇè_à|Å­B46sø¨ì{~ùùcÏ,/?ö¨þµ¢ª­9^;áFð€¥¿b]ÖˆP%C9ê\£b‹fŠÙ¾ÖÆÒ”€oKŠäWcC2YÆl©=/µ…U³fpxsáYH÷@•I›¶úùp˜¬ÔëiµËáÏ‰“Y²,Œ£?3JƒLåpÉD¢=d@æ†óÀÚHJZ¸'—~—›–ñ²²¶D‚SèHSúˆrRd!Ò;(¯È4µiŸÓ}­äƒô†k2CG8ÓVamoG:ÛÛš¡b×–lCK8;ÏBtGÍÀeÃôXY::·3še7ËíßŸ[YýàüêÄåÂù…ÅqØn`fåý•;…™±±÷?½=Ð|ôfá«™£Ÿ(\º §M/îkAèè×
óT¥kó¹Âêê;€[aižc7Imý.,-,-ÍÎ#­­â+R˜Ú8P_nÝ}’.–|±|Mw €5Ìû+ù«i‹ÅRõ÷ªi÷5´¿dAÞkYºçÍFÐZéyZó¡#&_~y¿Ö´zG®Í<¬­{÷¯Çz|aMÅÖ[j]OR%@ŠÖXœ§rEcµj˜p­?H+Tã«¾vÈNßŽŸçBþ½Î©¶X†œøšP†¦ÖªçttEð¤Á0|lH4Yä»ïÊ:`éWïl%ï!ºÅºFHƒLÇ…|ùôdïH[8ó¥{{å÷ßŸ™líxùL6É½ñÆ™øð‡¤¾}ø¡ˆÍgAú€Ö‚¸zñêÕËG)Íêˆ7Ò®¾>k‹$M»Hˆì ñZsëÃ-áp2ÑL >M­ìmmT¾ùD8‘ˆT½I¸È“Ô³'™A
ÖHƒäúrö(ð$mW¹Ú´0âI² n¬A6YÅ¤È'XÃlÄØL¦jÖ’ØÃÃøÌÐÌLû}8~tåmƒÕ²&i®Vö#6ÿö|‹k¿DÌÁ­ukèiRß”‰9X'?>ÌÚe4¡Ãg[ºbÃÆs¼Vk”ÉãÁ ›ÙAÚænCÒ,œÂv—%¤›ðàFøTHc5ßÿSÓ¥Í@9r8§MP3hp•áÞ+Ÿè«;õèkÊ}DRó~*]!ò„šb?=75UU1uìØi.kceHo´E×E„\!#Ôªq›;Ü þjÅÂ¼nEZî»ž6+þ}ûÒlE)õMÃNä,8Å¥>ùdbj†çDo
Io„í¹iÀ…ÎjÖà5j,¥EkŠ+ÞÒk¯{XƒÖ| ¨ITCQ«{ª!ÍýsØ.¬ÇËfëõ}O]Óì“Gzí?š`-P¶_Èç=¤Á3žÕôSæýŽŒ&$Ú¶xK¯ÉŒ4Z~FËÉÜ_uQ®˜íYz¿Bk´F¤ïäEð1ßÖxxw4µŸÁj(kãÐN=‚µ=[a5¶†lòñ?|p±h”?¢á0B€°T‹-b/"ŒúíÌ¶QT)üQÌ¹Þ÷Ä.±î' 5Í?l%Þý®¸ï³ÆŸ‚Á™ƒ§ ˆM{ÅcÖqZb£®™.húÚýú¬]tEknqÐdBºeÍCZqc
žÿpë²vÈ@MAö£¬MÐÛÆy–®Aæ¤,F¦ˆ¾¹›'5IkÂ5¡šyÆ=iñ6«tT¼ Ïs°¶é»QM°¥llì„~¸«B¥1ärMØ„kZÖ`Í€B—UnQÎ2!‡Sõ;žŸ›ZÆçõÑåŸ\!Ì\„¼teBžP›5w“3ÈµÊ„ä£¦ÒùÝ­m1ôS‚¢¢žhötð]í°ƒ›J.ù1Á;˜Y„xKŒüËŠC˜7µSiØœ!ùñy°SleJÍ °m\óXi$4šMÅÃ‘0ô·É1Üùã=Ñ(ä–cÍ“Æ˜ˆµEScyÚØ´q7zpfG0á·nƒö*Ž eù~ð¬?»,ÅÄ3CÔTKKËå©¹íÊ§"‘X¬žª¹ÜðË(kñ¶Üþáèð™œ«–Ãæ„®n±ÔÀìnÌfRÌ…Ñ/ÏqgõâÛ«³¡xZ\22±zgi “É½>Ão™O¿úêæí•£]ó°Ôê<ÂšŒõE~*¥'‹©éÂ;°j­ æçe4ra)ÔXQ	¾“ó7ÏS«vc5Û–œ™_Xš¿€=äÍùw
«dH,\¸q$(·tW…q4d!–§*,"ÝÀZ›"½î#Â–(iL”
jŒÁa…Oyôz¸O¬7 5ÓÖ\³}±ÚËoì Ö\xK.	½*ZÛ9°kë±ßßøÏ•Ü„¾Dh¬QA—váþ!U²‚4Xc¾Va÷BÑú¼¾
7:CÜûãÀZ<Ne²ÜmëW)t¦¾›½tZW¤l´NÒð…´z<ª&uŽÊ§òªTSZd:Æþ‘|*«!½%Ryn
Žõò%“ý(nÑš¾—Ç¸×÷Æ‡/ÿ/.Ð?|éCBÊšO‚äñWï.‚q?×}òùëÛûši„¥¡M8ÕÁq°Ö¹…­½)ÝÞÜò0€êdâ‡[›w5 kÑ¦êðk?<ùØ–7¨ ÖÈ·ÑE¦¼ ÑpùäúV±”öƒWPÐtÝ|øà¡­j‘}Ø`M+¯ Ödß_Ìb$žù®¼CH¦ü“¹ØJ‹ÓäPšåÿà ‡ì[¥4¦á4¼&æ9Ê_¹™g?Ë`SË†D¤M¢=)•WjÂx=/$BªãšŸ¬¥B*´]+PÓqq	î3·ªî†5›3ã¥Ð˜õIÌiåHÞ?Ò&üW¬=:Õw
V»2G*þœæêÂšb;§Î¿ü·ØÁžªåSsµU5[B[ª0‚±'R£xÍI†\µ‘›0ö„Ô*±êÇ!5êî®§ìÌº_?•fP¶Ïxmð³üÿÙ;»ß(ÏsÝoíó­}VÉ Ø‚Ÿ`ÙÆ²&(žŒå8¨.žuŽa6†ƒ-’(aâ˜˜$Ôc2FÍ2$uÆ®Ó¥v–Œ,Û!‚‚HVã°Œ¢ˆª„|ˆìƒV,õdWûwÝÏ<¼ž@öúâ{ÞÏg>ýù¾¿÷ºïë~ còšd·›9m° yXcØŠ×(kÕÞ*s„DZÚb—)keÂšÑZ
ÙHÁZ”ÖÕø„:`»ºF6ÙªÛ#X­	Ö¬DQìvÔ·¥^EkCRÕ¼s?»«ŒEŒì ¬÷ßýÍû&V&¬Å´ym(k“[ÉTþ#¶þÜ?q‹ó/Dk|n,F$­¹·÷oýò£•5_±©ÿ¶óÝ°÷	Göñ‡óäsÏ/ÞÝ	¨`ïÐÎƒJ€40cˆÙ³½±}ðî"œb,3†çä,¶•hkTÕ©±ðv
o9Äì’ Ù7^#´œ+ÁZ©&ÍX,ÈDû'må$74¯Í@ÖŒÂ4×mñ!R[méIM“_»yk™‰‡5Ñ—}Wçû¬¤F²àn)Ÿö4k„½,Æ\ªY3]ÍÝ×¸3)kbµÇ*ÏoÙ
­YŸµÿÒ’ê®´ºcËº
•o¬aÜÏ¦	n‚31šëí£¾©J	ÑMMV_ªlFd(¨*Ô´|½jÚŸ†ÿÄÁš±šLzO8ao!lûð‚¬oj˜~¦ARºlöìÏ½úA£5Ú²jþÞÖjÁ8VÞD)¢<HV¢¶Š
{„‡µ
w¢™ae¥Ycˆp#šŒáiX®MÝh³F-]?ÚŠÖ“Še2=™q¤µB¾¹U½K)\Ë¢®Åbq¼ChEÚ¾;œAJt!4‹nvXÐk£`Ý<×yòsÍ‘ŒÒ\ú»æç§Åb¹l&#±tk=Ùˆi#ù«P¤¯ ÖÆcøEâ@]¢X‹çÇc\íí@üødei‚_Ìb±¯ Áp¤þÊ•bœž¹zõÛ£G/_\ZúòhNY‘—ææV>l?Ve&–ÇÞÐÊ…9YIÎÍÉOäßNÜþp…oË¥O®ŽÍÞ~ïöÒì
ÊÙÜ¸zéÂ{›ýöo(jWqÁÚ$õííKð8)ÎIZû LZ{²KŠE³(]ÂZ5ßëx&AäCX72ÙþÃÊ£°s9·ùGxÄ€¥`íìÙÓ^[#Dj«ÝVã/Yç¨UUo‘²¶Ö{-Öâ‡\²VÍAÌMêÍ»JÇYA¬m“Ùcs­Ù3ØµOçÚïqMÑP_M¨KÎHýˆÁ×ÚBU‰L¡>Ô¡Í³ßÚå: L\
È~¥ËÄdwp€á²`66¬Jµº©c£Só…DVùö’(“ü8EÞ~ž”Ê¬yJbÇ×ÜÔ÷õ×_Ó¢úÔ×ãyÏ^amæý«ó =«ÙjâèÎMLö´ÐôOöXŠÜL>ZrGgGE˜ŒJ×è˜ÝÞ½D4µŽMíh?°£âÜÛçÞ®I¶ÇN­w‰vbðš{èß¼ôs ÐXí&%qB1$3°ŒàÄ™ªµ' 5†\Ð„íÖ<¬ÉhÄ+kŠ:Mbµ ÉÊ®nuŒîBJ#ì™oZî£ªÕŽÈ÷‘aÈkH‘Úhc`+BŒkì¬è™²]–ÝäAVÒb¸­­×Ô2#³®…]¹š·ð‡é«=cÛÖî±AÉ}Ð­H7GuF]«üÓ FµUãÃð[Fg®¦¨©•´&Ö^|æ8Þ"ú±ûÐIN8Œüýï?ÃgàgC{y±—Œùuoâ\°Öd%š2ß^gÑÂ×KÍZ5{ÉƒŒNÒ	}mÏäœ¤Í½)l­kƒEÜ ÍÆclZ°&h+Ž™{¿øLn#l2Û/U³f&#AxX+O„ôÖaM¬­­×êU¶ö„"ª®XÃZDåk0¥Å>Ê(Ž#´ÄV?xI†dÐZy|¶ÊRÔ›O¼ûîöo/š¨$+Ü%4½ïc›Ñ º•jl+-‘-cã_ü
\,Fg…ß#¬IW’ Ejß0Í=/X;ôü%Emãö-ww ÍÚÁ;Z‹5µã³):ŸàîN‚'Ê~dð¨`mëììØäØûÀš±ZySl‹¡ªÙBÓCÊ_ïjÛ~-¶°æÊ‡ÚPJvWàJÉ¸_5e2¹Tféx,È‚Ôì@Í-K}ÖV#‚B9Y>jkÑ½<°]ÖŒé|ÿì½z°æÄ<Ÿ©›ÉjåÊ¸AÊ`dšçŸ_\¬¬Ü²P{ª=¢'6Ä†²Fªqˆ%N>vœ1Xãh#`¨Ù…£Sƒ;®h¬jâ7O±lüšZÄ±d°Ú½Ó×§¯ßxÙ±šÂÿKVÑš‡µ!Dš+-44m{FkÖBÆjŽ¿Ìû¸ùûýúƒqoð¸H¸¢k½`›‡5kÕÍÀyÕÒÊ¤,ºëBl«UŒÊøÌÅeQI’¡|”5#°¥ñ<ÆX¾·³;VP›µD&‘Hr¤ž™UjIL“wwÄ2iD3è+GZ›ºíÚýk‡å©|øÚµáqéq…“ý¹PE:7rü­tØ·¶moPü–ÏŒ ;s¦P wÅÈxÆ0yá–ÞWGÓ¡‘BÐ£f.§ÝvìÖå‘Â¯'
$·ñXG8ÝWŒF0ÃŸž¸:¶'ÞÚ÷ë±DâòÅO>¡e9g&zÄvÁúú».\©ŸXù ¯~éÃÿ¸paiýÒŸ€µ¼¬¥+”®-}n6“—04A‚ËŒ/}~é6ž$ÔÄ¡Ä}xa¢ª¬MÔkBCÿ~e¼v½˜iÐÄjqð7²ŠÕ¾Ãm«ëaVcœ¹l$x¬ü™Xû`¥°„¤€ÖTs¬öâ6ŸYj‡­Esõ–íØAn_ƒµµX‹pÉZs3¸fGÑRVXH†\¢5ÈGÁ²VÒmpœ¤µ\ÛFL»ë²’L¢d4.ò?–Ð‘!Í:ŸHvkXöóÊ‚$­!¥MÉ’"çlŽ‹…÷Áýc™Ãø?¢‘¦Å²£Ã©L¦ÿÚa†ÌÃ#õõi²ôã¹ùX"D"ÁÙÏþüµæÓ‚5ZU;Xû»WÖ@5ë‰ýO9ê£¢µ+ºsGøcwz^sÔËÝím••-:B†++°ìïlß]éZ=¶ã¹ð¹·÷×œ«M¶UaÜŽ,HY÷#­9Vû§¨ko}üåÍÇÎ~9
-‰Ö`2Ñ”vàI„6píƒ„’IolZüb"5„“lKu,%="¬±Þ¹+à³'µ x¼{”^>ÓÞ4w£)ª<FÈÂd›™¥Š×Ž¦•l!wŒŽJU•šîÖÖêÖÚ%¬íèl»öt@_rëg«RI
;_ñl¦“ÑÀ© ÒËÖ-¤î6\^‰ã4Í®rÍû?ºûW=¬Ü©¥ƒµR»¶Z¨†‹ÈÂ‹ÛN£?hktU RÊ±‡†®/×p©¡ºkºšÎb­±,³Eôe„¡u]ÿ'G¦•î“ƒ½XüØød€8ìûof™ï¢žjƒÜPÏÆÞÔ7F)hcEºhÃKÆj¶ ÖÌaZƒ×ÕÊ!	ºC•)k}ä—·¾¼õÅ_|%aÍnª[;¸§±ú®©×š+M«ã·‡€ßM	ÖŽñ;äQÁšS·VIkC×$¯i
ûMk¡‘õiÁÚ¹“Pd46ë:,+‰ÔÌë]ÎŒä,2c¸FLýŠ@Y+%B¬•+kCå°VÖbÍT5áÚ_¿¹Jä!ØwˆÈçQÑînÜ°¨\¿Þ¶ßB"Û]Àî =Îù,KpË~T·1`1¯¬ªyRóˆ¯±2Ncá{¬±bšPå›M³« ó$äFK¬Æ†+eÃŒ\Â“q3³ë²Æ'/×Õ\Íš'µ˜c¡a+ÛÛ°¡b¬mÜH#5kÞ¹è6­Ñ+” I? A¢WÖì÷‹™ðºšóƒd4¡ÝÏ7U­â|å£KÖ˜,*ý
PcAKìf2É±ví°ÅjëªÍ¶«SSÏ&ÆY8c•%$Òa¢Y·X«	ÙŸ)WŸ…;\sÂš‡5ôZ)(ÓÓèéf`lÇ3«QãPç8vU“˜ø}=±ËÆÝjÕÃÖµ”.N‘€°Z„Õúæÿy0o„±×ì¾PŸ¯âˆM´¦q(jùLÊš±…ã¹˜‚¶)=±ØÄn©î¬`-“Î$qCÎR¶Ý¶»3™	E³ÃoÌçÒñ,–!Ãïô_;|ÿÚQ­¯0ÎK½1_H€5¼D(H#	’üÅ½ál2Ÿ…BÒÜd4U’c4ÍXI÷IbÀZ‚&oÉo,t‚Ÿ@»ôˆÜOhU66KuoâgGáÎËãñD4“KTD&æ.ÞºTºLìú^XƒÕ®ÿî÷¬ÌM|4w1z~åOº0³¾¸2×ÊOÌ\(\¡Dbµ9•¨Ía8r{evüÖ··éÌ}+=ûÞŸnÏ\ZÚZU¼ÑÍ¬\X™{ØÏÄ¿ßõŸ”ñÚt,ÑÚ'÷‘dÐî˜šùhþ®ÈöP­šwñÃA·k£±`Ï?NÚÀš§5Ïj„XíÔ)j±}HT£Á)QåÔú5X[‹µøá÷×Tû+œfÙovUµºî©!7NtEo,·¹¨­.m.#­9e­)û~H±ã™L!¡$wµ2ÉÄk±‰P:—JNõ[:ýð”„³áálXæØB™ô|î0){ŸZ³µad·QK½gsJ¾"däÉðBT¼D„<óý§¿?¦vöÔgÏ~vêíãdB:\ãæûKA
$1±!Ìu´`­³“Ê,xñÌ|‹Ê$<’(ä™–Êp[çîÐšx­§ê}ûÜúuûß®	í›PqêÆýî¬@îR/™ÁÈÕ££Ô	„¢T’†´ö68»ÜµÌŠ×Ø`Kó¾Öž ¡k—³äG±lG™XMÃÀËò€÷<¿©•¬gF“NYcÁGVc~¼ŽT50Nñ+®áÚO»-åÄ!¬AnHˆ Ý¨¢1ÜÑŽ°ÖÙS¹.’„QÄ[çåéXÍ_z6Xsý±KVÚ÷&j®îÆ¦×ÉJÁž†ý¶Ï9±¤i,½µ6+…Oñfm/¿¶°À¹áŠ!hó‰§oÜ ­VdA.//,WcýÝ¤ßqý~óáBºÖŽªÆ7oªØüçæR9¹[‰hqouËD³p¬w?ØŒ÷’i2Vü
x°¶l°&-Í‰ÅØû´ä“¼æ•5ÁÚë°šnàšª´ˆ²ÖØ„wƒü.­‰z¾€×î8uE—Ö{Äl] Z]þT#kú9?ñä±Q‘"=(ø½pÍá¼%#·€Ö>3CÈ!-Yî"j‹ÆãÏ\–0Á>ÈTfØo k	·HxrEaR öÎÜùê«_p3Z#È‚$’8[ÞeÍš¬¬öó 	ÒÌEþú/ÿ²rpÊÔsÕj?=´­jðàç©ÌBNÛØ©o¾Á’h*[¼©lßˆˆ
êøÀ|ìÁE`mvûØ„SÖ¼Á7˜¬<’pìfþv3^“Á†ù«¸`Ë×¬ùmÍL¬m˜oÆŒf ¿ß~óGù©`m®ŒÖ„kÆk„[9VcµJYÛâ’=vùº8ÞÃI÷VbAÇj›Ñ)äÛÀÛëñöT=×uÅžÑkúŠ5SÐRóÚ’šæÕ5k(¥ê‰¦VùhXsÕléaÓÝ
ö"ÑõÍÑÊÊõ.qÃlfúÃ“g‹¾zuó4‚«ßv–›†û˜Á´jÐ©jk›ªJ°­Ý€Æüiÿ+˜9Xû	®°ŠCÜMì­¹¾¬üµ¿Jd¬pöD«zÄp$*SÑü>âJÕìÿ#@¨/Ö×©)LRd˜p#f½R?ÒÍÄÔò¦9] Û%+Ž––	wTvôìî†8n&kó¤ÿ÷vöp@mKfãÝÙX$.-Û„¨Ds.û•¨rx~DÍsæIcÉòRã…WûêäËä3Yå’¼3¬6 §û0TNvµµá4¦•†™ïë‹Æ²óÀZa$“O¤Ö’1æ¯æ3”®°ÆY^i0ËñqÓ}Í•<uª+çãáuÅ™‹Ÿ¬\ø`eeŽTHX- 'ƒ§ Õ0ò|û:½> ­‘Ë·g+ŠsØ—„BÅb}qúöí•«·÷–>š™Y™[šYZY[yïÒ­üÛç¹oÿt»¨ŸgX{oeîöï§‹ôá~È²œÅmLùÖq5IÐÔÐÚCÍÕÊå²ÿolÕì7=Öé9~¶W¬åò¬Ñš¢„j«5¬‚µó¥X_J®þÿm-Öb-~¨%kô )]ù«­áÀ¢­jŠÓ ³¦¾>TW7)Òä´z¤h›ÈFÉšM–)Zk¢Ådoo´¾5“StÇH5ìîN	Ör¸l×Ôp6eèkøV©¯'vÃªL#yãÓk×ŽàÎŸ¥0­kJma8ôôs?O˜î¯ÏG#Éþþû‡»:ÂùÓÙÃ…Ó}§þL§·©V;õÌq_´¦²µ òŸuÿ•M›¸HòØÓ™Œ%“‰D*¥#!^Ì±\‚üõž.†hçTƒŽcíuÖõž«¡Ï”†¬&×þ§é½jÂš\¢_‚Õ~÷»Ÿ¿õñ•‹ŸÜ9a‚¼”ßVµáÐÇƒ®ÉÓß†Ÿÿñ>„5¶p!±(ÁR+6i>ä%5Â`ÏmèN7ÆƒÅž8ö8nü;whÇê”)p£\Mš1*¯‘FÒ;Gm¯Ž²¼¶¶¶Ý4•cZc¤§³½Ž%ç±¥»·T—fM¢Ö^c
·t[Lü•Ñèïò§BZV»`DŒæíEÁµIB.|6Ÿúèvµí_”h¸ñbuí××ôcå”ÎØ\éÚ	”5ÎÚ`žeÜ åÝÏ™™úé¶*û±Ymê¬¦«|Êb¨`óNn½áˆÎ¡öÖH/mìîÖ"U‘.Ë”>†7äQ´5Ë0Ì€iÚ$Ò[‰¨4lÌô´"gŒx"*ò¬½þºÒ 5——­#ÞÒwYûu ¬9Vû
q­¹°¦kÊ}¼É¶2b]"î“Û‡¤xm”ß™Æ£úp¼”¸|&¤/[ò9Œ8aÍt5„5RÇ`´ÉÙ½Eml‚$MnÞ(@RS/	YÖDmcƒwîÝó°«ÊÚé@Xª=RX{aM ö¬ÆjAH«AmÏïÛGváÁ]‡«6Ü½{×5Ys¢hæ¼!ïª¬N@)\«Ín› ÖÏj,eMÂš¶}Ï5³ƒÜ •÷15jN¬)’Ö¬zÃÆÍ›7²`¹±„RÀZyx2ó…k×˜¹#°ùäÊ„ïàaÉ”k¹¸]z"o ‰`À
Úî‚‰z‚Ã´I{¶ÁšO»4XŠÖÎ©&®éž fíÊ–ÀÚwêÕ6ùµJ£5f$yƒµ
¹pTF[fU¯ÜF¥ ¬…šDfµ€ŒË‘¤jG)’Ü……¿kó¡ÞÕMµM®×ô^³ø­YkÏž ¾hM°æþð‡€5¸éé†é…Þ€²šzÄu×#R²—‹ï7Y½­g<€5o§äÃ•í2£Û)»1R¶Dqû´%Ts+só×–užs1RŸr€µhs:“ëƒ%š¥sñ"áÎ¶ýŽ’¹nø*™êÞ±!œÞ¨ÿîÍ“©‚v¤¶ùŒUÈÄú³)\!U&žÔ8®¦2©Ô|bœ²´ÊÚx
en¾Ÿ ¶±›K6&³±pDTM{òsD:]È“‰(—éíç±‰LGã±™3#iX÷jIÄS|´îx(ßá«É+G3FQŠÓs·/|ð1¿XÓsÎN?º‚ÔUBÆ0?ùÉôÒí¹Baér¾µ~éâ­|(T]]œ ÇÚÊXtâ½÷&¦'Z·Tg––Š³Þûv¤~¹põó±ù£—þvubzz¢&žùüÃWà¹âÌí‡ò Ëõ×Òê©¼P­[ÊZ$Ž$…4Û(ò@VŽmwÇö¥jzŠßõ	#ûOžÖ|X¤Ö¼Ó–Ö¶GÏoQä¬­ÅZüKÖjk9x@c@Yk“yã©¤€°ôhqCGìZË'±A²=h²Öà6úÈ¡¬‘aPËñe-£ðk9AY6	˜)±“á‡¡álm
Yíð‘k×‘gÿhWãÈ{¤kH~K‘:Ù%kÉL:’ÄuÅãýÃ™Š<µÿ‹ü‡{Q²š×Õ<«¹6kŽ×¾¹øË‹›&.fR4èÂU‹Kj½ï’˜BV$‡³-ñžsID èØÔ	·4ÖIŒ)’Ú«Ó,ÌyÌZúüì¥ÿõï:ÉäðÊÇ°¿¬Md¡)pºˆ7kLj¿öü>{”„µ[3JcÅÒ‡Ù‰ðdÿ0QšoÏ²ç¡²Àš•©‘'«Sµº¤ù÷»DÈžÊFÏjòQÙ²&óþ¶¶ö6iŽÊûëN*ûjÖ*ÖD_¥ ‚=°ŒÐô?áëò½¥Žå¼Ðfi‘Ú°¥=Ägö{”Ó}%ÅN÷W¼k,òÆkµëŸzÍÑÚkOÖBåÏ'OMë›–—Uä¦ËôºªoÖ"!ùø7™ÊVßÄŽÖáuÕ¡h3²žíWG'{cÀYo$’Ü#çý>üÂŸ›J„d•µGîX˜xeÉjŸMo¶÷‹Åw¯Dq3‘+¯´Ô­•%BÒEkåyb5ƒ5Boç}!µ¬©C6™®^Ã­Ó§U ²½9ªÏuTÐDœµóòªµNXc@açî š½ó190¶à\¼+éëŠíä#*öÊfÄ+kïNÌ€j÷Þøê¯æaµ¯\ä«¼ˆ”µmeÂÚ‰‡YÍ„5y@‚jš¾¹J*±`íÐÍB‘‚µ=í‡ µ}›©$'5Y÷ó™d
)XSö Ç÷¾û›KÊš«X”µÀÒM¦«ÚÚŒ¥A:yË½kcµ‡R YiëÄÊÅd$nþ±hÍqT™¤£1uVûèÊGž×4{TÓÂÕ¬9VsœæÂvÕðRÆÀãóx˜Xl`WpgÖ¶£0ê‡u×ÖòîŸqx¸Ê¹ß‚·pM$ÍŽœîöÊ°¦ ÖˆrX#kJƒTTZ"äºˆ¥2,Jå¢ô÷´T{µît!WH]OÑ(õe¥K:—jÑÕB‚5(lˆ_™>£îíúÛG`³Xxáúÿ¾>4„¤Z~ÑŒûCêM®U½Ù|É¿.·îi‚î#«ÂRtI«G¼àe,ËHIt9Bµ•DE§¬Y"$ÀÆbdÜ. R–NÐ<½-\ëHº"ÍÀG˜ˆR¹T*ëìšjÜF)Ëõlx¬7ƒË8víîÊT^HÇ¹¸9»©/N–Cg×®¶ù~õgã¬žÚ¹îÞwß»Î›hÇpç†Jý˜Â\üÏ¼J}%‰ü™Óg^åú+=ØFúN³8C5[‚¡D®½ÎÇ
% LŽË‘è8TzlK–W.ÜžûÐ½mz.ðü`M¨ÄÛûgfêéË}é7O´Ö[W¨S›H,½w)“OGÖ7×OóÅKï-øUÉ¨nxàÛâ
É‘ÅÄÀçtb»zÕBòf´V.¬yum<FX›µæD”…¶ÊÃƒUùƒÓY-ó÷Gyú¤¢ö™†gJ´F|—Õˆ§VÑ¤±[ªì?Ëÿ\k´¶kñC-YÀ"OYDMs«…ì!ÍM¹AN]T¹
¯Fh\uvýµD©l¤a÷åó!*×âjË¤³¥‘Ò°«jMDCX÷ØÉRÀZ¬[‡”4³ëW^$â™t¶ì$4FòrÃ×>ŽÉ¯8ÕÒ=5Ì1$Oèñ:ìœ)t.œå?Û3çŽo×@5‹rV”µÀMcWŠôzkoK¦âaØ„lH.±íîÀ2u¸+ÜÛÑCB¡Üë$2íh¬Á5í=‘špxÿÛO{Pc«ažG7
Ö8ËD¸BöÛNRÑ4T·¡X¦³½Éì®¹Shwî{NujN6ÓXà$Â¨_2+`À]Ö<Ê•<FÌ-òÀN¶”ýˆ}»rà-œ…?^#£ò„|SÓhgG£¡Z[_|°®‹
ÛwìnëÁ	³“š­p²»ÃlET’Q*Y#éÑhÍ7Pcÿ¼ßdö	A«¤5Âq–@Ë‡ys-Ã3·´æ´Œ{Q°aG|D k,Y¬U/È\„Îjú™<ý4´†3¥+7Hy×H„¬¯Ö¨¹ÔGo®oh]W¥55©}-§‹&³5Ûçõ¾uŒ.É…aFÃ±›7“Ý™x§`-¶çNV$6˜ÅõuíŽv!1&‹{Fif3hiÓïYŽ¡J‘yå-ÑšU­)”ù]û~ï	ª•÷yÙ+k¥¸WÂµÇë´¬ÛU×5zr{ü9])`>†}ÿÁ#Ù‘úXÖÌf¤¼ly¨¼bHå@’ÀxkvJDD›Ý½™üCSk#™'¾X%kâý‰±£÷„jL|À R¬æ•µòŠ5ï.èjÊôñ×•=ûÔw7oH`Ù1Ø.­½}Ïžbµ»'-‘Øst3X»»¨r4·ó¹Æ¤­ÁšÎ`IÉáZ¹²&Pc“B³‰ÐjÆò<½£‚•ç6Òäb•ì†>¤†¾†Ì…1ääCÊh¦…«Y#¼q™{¿Ü …‚®îŒP!šv­…€½ý†ÍÈYÍÚFŒ0‹›%­ñ ==™ÛÌƒ>Üqƒ”5Ñ;“B¸ÆhyÍšÞù<:šg5Â2ÛXk5&»¡UU[LnËù@6i%3HÂ`-­º~[<Ç–}5Q"#Ê”Œ _ Ö^ò)u%YRS8ï~þ1“¹°°|}oU¨VB!s”¤fÍçR—3™ù£–×ŒÕZZZØ X–ÃZK‹ÛZŸˆ'"Ñx¯Ub]Y±I±YÔˆzÙÄªÌ&­¥CQª!¬Å¨ Ý ½H&¹›ôÑ¼¾ÀZ4/dÒ S&XÑ]†,8‡Ó¶ÞY¹ìèµþl"AlÃ9×Ì¿s¿Ÿ
ƒ)U~N¥ºêhŒÍ±v¸19ß¯Ãmj|„Š‚7î±sò¤œ!OžœïÜiíUðåqÔ?ƒ VÈ$Ò¼ñ«¯Ò…I£¨1,‹FbtãHîÈñ qr-%ÙQJÀ•½Ö|ÞÔµžteéâGœ!˜²æÝô}d9«½Mœ›FE=3r¦¾£½U_}:O}Úçccß~2[(ð’K~zn¥Xú7quöê¥«Ù\ëÌí¥«ÅÖâ·üãçß~û9kå~AÚåõ’–WJ½e"V›Æ÷;gã‘°ÿ«¦Ø[dcF™™¼ÇÊßüd°ö¢YB*ªyVSzu'.Üq¯b#ø_ƒµµX‹pÉ9ê:C&5‰Ž¤Ù­(Õv…óÁá´qB3Dãj(›–üh.‘4yÄ¹?Oâ{@+ŒçÍÑ«//XëMäóœ¹,¥jxXd»p‰gA³k‡Gé¸§	áÒ™ì0€6š¦Pí>±»z2ñþ#G¦RýÃr+Î¾6\È$Ñ2ØçàpòLnª‹#W|Û©mÛŽ?õÌ‹Èj>V+¹‹Øò›·vÐ7,1HKA+àXGe¸¥£§cSEs!›ìAÜIF!fí»Éìg´¶cGOÍþêý&«÷´Fêzb¿l¬ö1ç™´º]8xLgÉk°˜úU­¦1áš7ÁäÀsj¯¦xÎ Ì£šçXc\Pš=ÕõÇü 	v€Læ:DAf£¢Žqƒ5LûU¹Ëiæ¨ßÖ7šÓH;þô•ëÜTy~]¢a
·¼$‘•Öv¡26 Œ¸æÁMáÍŠØüžc.6‚Ð¾•D|Sf6Ç‘ài¶òBÞ¬vuíå†ªf`Ÿõkü<ä)NsñŠ—Ö†8¤ÏZmµ~Ñ›Ø¡lD°ÆGlÖ.¤Æ¦…ÿØ¬t¥œeÈš¼y³«'–L&÷ì‰ugïÀj0×`FÄæÜ…ekí±­-çÕ?ÀŠÇ³0VÃoä—Àš¢d3¢DÈŸ?$­yiðÒšJÖ,ÒKk¢5‹›£S7ï@išnNyä7X;88à>Z ,)ñ×&|sjŸÈíÄ‚t5-aí#Ë4ÊY£µÉó[ßÛ¼YM—·¾[Ó€…ÉíEIj ÐìÀQ>ÑýûÕî•¥Aª)¶d:ß“;ð‚|„°¦zµPÕt»´kYÃ2TÝÙ¾yÃÖ6,vîâokÅzÀl²ñ§Ñ,¨ ô”6I‰¡Œ"gÍ	e–Ø»õ}SÖ¤«1ù¢5Öì&}M¨¦écM5[bž¢Ø+0
Ú`óð°ÆÒ±^`$ÈÅMwM]ÓæwPÍ&ße-È„ôEk~‚”,ôZ[Ü¼¥ÖwK¦„hˆiô	gH€QKæ#-ÔH®s(Á Ùö5kš˜íæ¤5»ª1Ñgíüù­ç++7”÷;8ó›AˆÔ"ëY°R»5A
¡¥6ƒ‚fW kÜHÞhpë¦j³Ø—Åsðó¿þ‚„µˆÊÚqhvºH#Vªk×§—§§‡®×Tñäúfõlã5œba+·E8ó~oQD¤9 5Y8ÂÓü3W§Ak~£%méííUUl3—¯x,VçBÖ?ÈƒŒ$PÚ(YÃ3ËØì~l”¦Ç4·ÄcÔ¯¡®	Ú$hu·$dëŸ5îšÏR§6šMDÒéxJi+Étš–7÷³)êîsxí–‡ä0Âš®vñ`Ì—³¹Wé±ýUV°vk<–;ùêx®»;¿­o¼7Â»Bf#­ùBDµç¹“80úN÷§ºcXû£èe2êÑ}2×ÙI	B’£¯Àì8®Äñ(X‘Œ`&Ù2™ç‡·<3Q,ƒµra£®RìçRï™3}­õ—#\ø-.õ^½š¿|$ê75,ÿÚµšYº4wk~¾µ©Xj­™¸üÅçn+Dk€5C4:DœÛï ,Þ13ÈjÅ÷wZÓú{ò·>b¸¼Ûš[iÃßj9…8õLÍ6OkD«zŠª5OjUÚlæàëþÇ¬ÁÚZ¬Å·d-kµrÌ
¹ãW]*ñ6`#…C#4+4p›ŠÖš–y¤9Ž/ã`…VàFTp‹æÖa'Ã±‚žžý8ïgBqXíÓÃÔ¥õcÜ¿eÓÍÝ\\Î"ÃÙÃÿøÇµ.j¦³TNgÑÕâ±~Ò#‡c©FîäEÀµ,×ëb}#±>.Q=EµšÁÚ×«•µBkžÔŸtï¸8»é1:‰bÕß¹»TkkS¢‘JÁZ4#¿?žjC™joÇy£]å[mÜ:qÚÛÑKÍÚSO	ÖŒ(Ž€N¨éò¿ý÷ß¾ôKgþrì“±›"(’ñAHû‹U­9ALàF9›™5šVÆÙ&'Ô®5¶]çkÎIÉˆÍD q6ïóÙ¶eY°Æ£ëÄiD;Ÿ^£OÜ¨Y÷¤c6¯HîÐ:©[›jÃm¬±äíÑy•lGxÝ:)jëÂ-ç…jòÝ&‚´F´´õÌZ8ÿ€ÖV)lU¬‚;<›­ÌJK7hø¤@ja/àn3ÃîA6à/„ßx¹v«Q¤†¤Á7Çj–£ªXnš&	’‹ô8”.î«+E”5·Tà	QµT¹HXm=í]ô“Ý3k#’ò(°ñú,€²Ù ÷*ºGµ¥kì+ë1h‘MŒ1a8ò‡·DjÜÞ
,üÑÛŠÖVKk—&¬üÂ£šn«âæ}PiôA`Û£6Ø÷îñáîé³Ý9zëèh\¾zÌ·[ƒÏœ#$3f#
W°¦°Æ“\'‹=jîåËdä~Þ¾ïãÞ;RÖÞ€Ô¾š«4V³7ÝkÄ#…5gù©jLßÌŠÕp$vQ¼¦Õú­1²sßABÍ¯!á‰ƒ5Z®ù”HAjTfa)€/ j¾h­¬%¶ô4”5šâc“Öìfë™’æF3t
|ûµŒümÇjÊTCvþ.°­•Õ¬yÕÌÒ ¬ö ÕÊ2!ÿóÊÕ’²w¹Pv#1¹ùÇ‹«npãÆEZ–ß-ùA.b¹ÁÛ÷‹Ñöª>3¬!«é·+À5¯­-ÒZ™²F§5´µ ÕBs[LA È£ñOÄJ@ÍÒÃ[ ¦ŒfŸÙ×@Xþ=³¢‰¿Z.ýØsù®Q#Æý¿}ÉÎÃØU(ÓÁ{AžxY¿X×e¹0Íƒ›ªkêuòÛÔ¤ ˆusáû‰”¹ø¯¢5lúWÃZ­E´càGÃliC©2­£ÜŠÊ¾_¾–„¾zEˆˆ&‰PTµj±+Ò ±XGçîpK¥ðV’[*ƒ¨–ˆ„[h¯3EÀ1’§8
Zïºdîn	…€µD:‹ôâÝÅp?‡×#£Éx‚¢4õÑäîycþU”±“9ìHÆÁ´Üøf”™3§ÇÉ_Ì[£;zì´´(-æ'óéxnät/ÜórwNB##9äOŸ\G"#ªrK„ôÃ+PœžïKP¶ÐAçó³Ûf–f&æ~=ý[¬yVâÜþý(kVöŽÙF‰5-ÜÝËä[·FffŠ2ƒîÛ6’qáMH©ÖÝ;-)®¬üzéÃI„Ö<¬ýÎ­ñ~ß•òž®¥O­ÁšŠ!°«þ¾(qÖ#M!-´ùð€¶º#viÞÿÊ+O!­‘I¨æXMq\°Ä–j`Û~Õ¬ýhÖÖb-~˜ñßTË¿-JdÄ×àÜÌÝµ¿ê9:ž6°ªÕóÉl»½zž¨.…Žò–Æ€¡ÑW¬ÅÒy|G¸,™Ê*ú1€lnÍ˜l6u[Èþ,@–‰tãàÒ?Ú¯{~u¿¿ÿÈ¯°ö×A"Ksèië$ïð}Ž8Ÿ^ËfO9õÙ×#}tXs²ÚgLŸ=k¬öçŠÖ`5ßgí­×ÿïXgr°—öj¸ wšd;´–ŠqA°²§‡º¬H,ÛŽ¦’ý£ðN{c;"Ë|™;ëÚ{ªÎÛÖwüiÜE8¶ÀdÛ(’Êˆ¡ßþöç/½dE0Gen¾ü:·¤¯Ú_ˆ74±™âq	f¬'¼Ájèj„ë­Fé™9Aj%›‘ºÕ´†·ëGpíÉ2RcÆGä	kð±í³›Æ&£Ç:c5Ýý8{FkŒ¶aÐ¯Vkà(	¢ÊŠlkìVÎÃaàZGGG¥2˜Œ^ŒÌƒ5á›3ëwóÃžj
)oî¦dø;ŠÂl×6] gþXè^¯L†#üvðnÓ°ÚŸ1é—	¤,Í™Å	XíÆkdA"Q-c94âòC7ƒµzÜáÌÀ»Š…Œ ŒÓ<¬õvw’
Ú¡Nh«à:ëéš¾g0sôNV>"Ô©íÉ nY*¦À àÅIl¯\wµb½±™‹ËïO|üºB´F2¤Ý®Z{´²f#NZp­÷Q´4È¤›÷è	‰t§Fã
jÖ 5švúÎ¡,=‹þÖ¼…h¼Ú;Áû\óS@jÜ<\”5çiÞ-¬¹HgéQí_ÿu¥Ý\ïåéü ùÛ’•]×zîàŽÎŸß nc%3ÈA‹I·{wÐtÍ1í¨‹7ñ‚dµÀºŸ ËJÊš_ºæIÍ-T6æ·ÁJz'fAÞ£nnÄ>ˆí0ã”É>¦›7
¢¾kiYÞº_³ uyäD`ÖOÛ’ð7Bd2¹»·êM¬·›² ‰ÍFx%Š²íñ=±Iƒ×<ª­¦5CµÕÒ³Ü0Õ{Ó†M‹›6”%AzXÂ¬áF¿N°¶^°pÖãÚõ8¬‚]¢`e©ÌŒ4Ó5%œÊ¯¦&ñ+•¬-ül(PÖˆ šò _«Ù(Ø^Xž¦©Ìòr}H°ªêUÉ¶ªê»ÀæËjµíöí¾ Öˆp¸”®…ê×\ûö·àZD°V­ñO0BQš¶f9CZPFð-°LHÊÜBâ5©j†C½»;±èMÆ¸;“Kv£¸å±0í/»SÉxD×³Ý]X$‹½æçù÷´3
õ&1ÖO§mGH^vöý‡»0Öðó¿65:üÎpÿÍþì÷æ9B#ÒÝëÏq¬Î¤Ò×–„¹d6Ç¦]šMol›/ä±úßVÏœ™ŸÏ3€²–t¶B,FmÙÀTôB{}|þV~^§IÔÌ)+Ò
ÂúÎžžä¿ý^Qkå¬fÖ]ûG(Õ.S(—Î`ÈîŽ§IÆDg3»P‚ZÆ|kŸBï’) º¶k33#·.}x[1wéƒ44	R.`µšýOŸs=Õâ‚µßþïÇµ ì, ¶Zz>ÛËôPWlVÕNU+Ý‚¼ÊÚWN¯}
8«ª)4ðŠŒMkƒcËÌEWÓ-º}ûÖ¼û×b-~¨]ÖHc´n3ªZk*]û½B5¬ûà¶’óˆ<!DgÕÚwx6­<Iv`¤kUƒën:Âª“éo,•Í¥«Z’ÙšjSétnt¸RS}[Ã V…]½ý¿’ïÇ™kÀÚ?¸BˆKVNŠíc¦Ú:»¹÷ÚýìýOt7þ?Ÿ}‘:µÏ¶ÙÒÚbkñì)X-¨Y3Vs¸6Ð5•·DÂÔ¨!¬õ´É¤­„Ž˜‘ÿÇÞÙý6y¦ë~ÿûtK!"9ÁJB4Nm¹iDE&þˆ¢:È¤†l>*Z»-Å¤@(Ð$ŒS­=)mS‡]QºE”°fJÒî¥JU‡¢l¦e*¤ìÑê03hÍ:uO–öïº?<1¥{þ€æöûñ¼í8@ë÷ý½×}_÷†-~Ïž-‰½©N Ž'{¶Ñå¬CS3‚©u‘ë×wóûî»¬umX;ùÜ+/¿ü*×™vþócb5ÑÕAb—44`c5•¬1yø ³¬=hÕaÌá™ƒ5E›Û+Ë‚ÔŽ7¬)ÅÍæ,É]ÄõÀî”Açôö¶þ^`­SÞüGÛ¨ÃÛsô¦á3bº§Ðíô4(ÿGŒEH‰Ìƒj¤9’øØÆb\3„16[dk›&v[‘u¶+
°Fx‹‘àË\ 7z?íV¾6¥E½Ë€­Öˆ3+­­çþö·s+çÂÚSª+t´†°F–ê•ññ+ã­'_^N®kÞyÌìû¹9A-L²=Vã<”
÷ÄÖM³µ&p† fÅ·µÚ@*ŸWK5í„ ë-±K¨mR–Öˆ}u6S_lŸ©±]X˜¹¬y\ƒÔ¬ÝZ×‚²Úbÿ&HkäAJZSd µRÖl¯A`5½ŒxãÏ¢&¯¬Y•’§5«WÓêQí˜Ùöû^Ü¥g°¬&X{Hj¿ÿî»ßÿž­<Åó&¬ñrF½ …Õ,«Õ…µFj<ÞƒÕþí‹g°¼Çö^
ôó²Ñ9¤ãä¶ùÖ®Ã/V2 WÓÔKA°&¤¢)Üñ7>ÒsÖ¼ûÆÅkwLY3aíuH- Ú8[[·xwmÞÖê¾!ÖXM{…í¨XSx ¢tN¿°Fü0’‡O}Ôê‡¡jÍ6ýOãSÃ´;d5~>¨¶‰²5ÓÖd¹TÛD"$¯qi¢-¢¬y\s Æ6˜A­-{\Óâ•µýèj¬ÛšPÖ`xœ²Æ·‡² ¥+ÉXC¬fÛ3ì„fŽÙ|Ã5ÑšjÖ¢º¿¢VeÍ1UNƒ[l[ï¾âjãR|…@P³ºµ3‚5”5`¦Ùw±Ü©®|.ïm‘—V¬ù°o˜pŒ‘‚þæ¿ËšµO$$¶Å7†;S,1»	ÖbÌÇ°%ÉQ#EåZÜÍdF…RÕb¹î#éRa«Bþ³±h‰¶ØÒ~ÒøFÇ
R­´+s™ü¤ß¨Ø»J·ÌÚR1Ý=œêåù¢œMÖjøw‘‚¢„*0ëš¥êÜÉêê’hm`¤Bše>­ìÓÙ7x"Sát )Xã´01Ë™|v¶˜žâIàånÎûÏÏÏV´ë0øgÌ½A![¥½rš3þ<Þ’ÙR›C‡K^½zãÓ?Ö 5–÷¬=ª«‰Õ’ $‰‘=™ÈøÃð¥œ®Y•Áë÷Hª}:©šüi¹`QqFK´Xýê_ÿõÞçjo™¼öxXõquSgw
Š%2Ø´c‰ØãD5‹Ç5¼ÞïGÆmáÉ j‹ÑÜ8¨nöS	ÈÞô´æãM…éjÜ®´F<½HÀj|¥¬ÁÚZ¬ÅO¶dm[¤¥Ùê¶›•ÇˆŒÆF¼¥‹ÙdTµ=ÜáŒt‘o`uj–óØÑ°CXf…kAkX@Vy«‚†œJP)´|ª°ó"¬æ¬Ì}·2ö*Fá9‚§Yå-ÿý…#Ó¾Ÿ&ËC|6%ñcT†Wßý¶œ×[&ù	ßýv´Ð9=ùçù³Çæá´;eÜÏ M™pÏzV“²âOû¾:‘‰sÓs(ŸRrcžàgêü¬íí!¥do]ƒýýªßê©m‡•Úö¢®ôöö5·rFi=tU ¬dX[¬Q´öþ·?yqß¥NS¾ÐÖ`³]OHWƒ×°‘‘:rÀáƒ»^¨«mW¤a–K€dåÀµ6·X#Ø`ÈÎEk
ÞkG˜,¬bpª­wpûöÞÞ6æ:¥¥µ1Fh3AàïœÇ ²uiòÜšîÖ:­ÓZO_¡ÛhLç@išÆ‹B4Âm%F<
ö-oôÀ%X!äoL,ÑÎ•®±0ò´Æ¢DHÛo4X#¶y”Û¹|ædKÇòÜEÎÈ`D©PVUhÞÔ’¯œ +¯´,Œ¿|²cÝ:yË¼?fu*²€¬ù!°V@VÆ•­¯w`x¸µËc™áB	m"³–kûØC¼AkclN#ªi3mAJÚ	ŽNncÂk! 5{i-ÐZƒ´ö«O~õ•Ëƒîý?×ÜòÔÃ£ÂÚ8­rïoðƒ<'j[Êš•¬ÍêCç‚²fÚš6 Í“[@5‚’5Éj–tµ`j¢{LÁš•««	ÕXÌ ¤IIÎž7ùo¾uY'Þ²·¸­j Û-â’ô-Òe
ÉRq°ªÉ¶?Ô¬jA[3`s^
¿¿í1™_‡G§:¡]"Ñq›­R€5(ŠË,ƒ5löI­¾õÂš´5Ÿió×®…š5[C(á’á›¶¾`Î"`¹ºÆ¶ßCžúÎí§)¶UÃêãjÖæÙ‚°Ì =¬Akë×ßBJóa¾6`ÔHkŠ-é4°ŽÉ±ß§mèÌbIõôGMº†ØÖt^±³g™î[{Ž½ê.ekÖÄj\¬=õ[×›+tl`ïŽßíº»Ü áNâPÑñZ²Å¾¡ŒÆbì­5ÀE˜vGn*ŠØ 5[y>$‚µf €L„XL²UŽÆ"(KŠÊ*éh<Î,E´–8	Éô±Íå0…ÏÊ|¹ò=ÐZFÊmµÑ‘Ó€hW:z¤<bö™¥Ú©ÚH¦XÌÐãZ$ÙÞ)’¿Åc¤\“$åm“*WáÚhyÜªÊy¢RaXBÊÂZ²ˆä¢µ,…r•XûX!?”ÊWÅFçg‹Eù3fµ
µ«ñÄùù)þˆSçç‘ˆÃš¸†5l‡8’©Ð4û4?çê¶ã_Ü»wïÃÉIÖ §Õìä°ÉGD™4‚Ã°Dt–«¹îD"Wé\Pl'*®L”»#e-Æ
_çü“eÇ¾øõÿú—{7rÉŽ»‘>üucc·`hØPpHÙÇ¡ë‰®ý1ú-Fk´†zZ€5?j(S‹øQ@7‡f6xD]Û­©nÍL¬ª‰Õ(®8»±¥ÖÓ‹¦ªm‹mÛ¶kk±?Õ’µÖV®"¨I×T¶:M&fÏœ`M'J˜ìc"To‰X’i9Œœ„jòaž›w”ŒËˆ¸Y&XCËb—7÷Ç#Ðò)ÐÚè4]À¦i²&µr5kŽLÈ²Ì:‘™œ¤¢z®´4ºTÐÏ¬ª˜ù/ßH¯ë8ö¦Ò I‚üæ5OkÿYï‰íµµãýÇï|ub¸;žÈí*çSC#å<vÈ%R-
ÃC…¾ÂÐðp<¬©IÙ@¥jƒƒ{·l)8û6_êl”Í»OáÞ/mš5®
œ,ðÎßq™ùÙ‹?kS¢c)ªÖP¿ŒÖ\ÆãÏÖHed}/H.;µÙ~ê-Ij^=cüP\°vJ;X¬Þ{VzºñÃô­p˜V—Ùf›6M­õ¤Ú ±^ášâ(ÂZ!•D;;û6j}ô—ëDscƒºæÍE¬I’ÜDd.R×ÓlÞ÷U³W®Ó´úCÂ;Gš(VŸ|¤bÛãÿlø)õ½ÞÿüÝÓÎœYÞ¬ÑX‰Æj@´ŠVd4ò$}—H†¦W0„;yå6/W¯‰….éjÉz[l«S‹Ùoè[¬=¤5xM°¶®ecŒ†s©}výŸOu—N¨^-3ÙG]>1	ÄÆÊ‚5g)V»}û#¦×ˆ6ŒÇä1‚ºvS@âP…¶öv­yV“¶&yƒ|5Ÿ)m¸êÖ~<¬AkAä8_]²¤ùXÕeÍ î¡²fÒZÕ k&At>	@ôkèjóCdC¤ÓÕ>­j¢µO_ ÏaM¥}âH/lCoC±Ü7xÐwZCJÃuD…ktÆö
;w\¼QWÖô0J³M`µqašg5VGj¶¿xkÇå—¶¡NÙÞÎ¿ãþÃ#ƒ5C8k%G·výÿ•µÿm3Fj~ÄÐ¥A²Û~êrÇ–Ø ífŸÉ‡Ùˆ>x–ºé~-´EÁšñŸÁaÕêÞ"~ãµµ)XÛ¡eGÓ–Å½ûµu°fF×¬#6ÒZÒeØwE/g‡èkÔl‚u¨ÚeÖó|—îþ¹r6Žaµ˜²'¥¤èÕpšÁÚsÖÛ’ Ï‰Ö\ÿKœ…dëšnKHïrhôUˆñ-BG/ò ý½%mCø,´ ç‡p³°ZBo&dª¤¯ik‰B¶»MCkE£kÕÒHl¹"‹: bŽâðíPÉ µ_éX%ZÌrzË¥‹¹ìÀ@Y­JË*9c.›¥Œk Sƒl‹é¶¡,ÉtÉ.ÉÞcd@Ò±Ä)n¨§m`¨<M>
ï%xÈ«Hi”¹d¾tž»ª::ýn’ÿ4Ñ7Uê&Ÿ1šèFoÁ`b±
E…]¶ÕX[mðâÝÕóì”¬:¥WÌÂjóS²ô'2ÏMTÓÉj)}õÆ”¬5(kÕª‘Y*Fµ·Ç³ü^ÀZ©
®•²XRF“ê”‰'ãø4åpJ$ÿ1*ï³®hfè‹_ßûëWsÑöŽ……kÖ>Ð}¢ØðÐ»ÐÚ¡ë1Ò UÕ`çFXcëV¢ÖBìˆ<¦‚­%èköâàXòäŠš¸‹Ö:¸tyf4-X[Ûx8eÍ}½_ƒµµX‹Ÿfü·ˆëv…£qW‡Y‰¸ÐÝÇ${Ðã	e;XãUFp’ÔTx $Hy9Uª9}Jrãy;	ðE[§5cODK(jkCù`M­Ö¦å
©ZèiË„DòØ&É”Ìàð÷È…Z¡°TÉ5Ï©hr”¾.ê3¥™ÏÍÎŸŸ=ÿs•©Wµ†À&X;c°æX-ÀÚÌ0WÙÔ¦;SèÊŒŒd‹*ˆ•F†F
ˆ¾¶S½Ó§öÀ9 Moÿ`ª¿Óæ¾‡Z»{
­ºÿw] V×€5âek8B¾}ç“¯CÏ4ìEÞúÙá—ŒÖ 3Õ«=¬vV3µm;övkÖgÍœ Í;ÒHM+õeô ¨›ú6‰±ÀeÀÞC´z?7ƒ<c5áZ'!]­·“#>ÃùŒL§ºSÌ(pîÏ#07mh;Åf¸­kŒ¢TÍ‡OuT—µ ·-ŠÞœÑYÖX®stúg3©P¦Õ‹kõK,qò™Ž=²yßHƒµÒ ÿv.ÒÊ?Â–k\µ‘)që5ÁôÊíñ“w÷/ ]Ér¡t©g«ƒ2¥C679bÑäåµî¦ýû£2D‡ÆÆè‹]èÉhž•€µ<v%1›c5R"	/¢a#² <H‚Ÿ‰9ÝÅl3ŸI<úÅÇuZsuk>Ò`-àZðáÒl
Ú´5–FuÕ‡Ñœ‚×¿Ñ kŠåP´fy,«Ý çåß8[§5hO ‹Ak,èhAT¤¦çªý“	k«*Ö~Ì]¤¡ÃªIX¯}Ž°Fkµƒ¤<†LÝ„Õˆç|q¬p¬n)¢HyD¾¸ïðf®o.©x¶"Äj/ÒfÌXMf¬ÕBäø8;Æ¾fM«WÖÜó¹ðÄÈM±:_ñâ0·yë¦M˜Œ<ª¬9ZãÅˆ#6ÆAWóÊ?×S—Û;§<ùMÀÖŒjíá3ÿý—?±.ÑsÎ`ðÊšÜ ÙxTc×ÃPMK£¤WÖ$¬5-ny!¼šü 9pú<¸bŒ%Å:fJèÌiÙæ@Ç$šU’óHW¬9­-P(Aµ–”W/,|´_%k·=«Éa\S¥ª»‡¬¼K+m"·“¦ÊEÈéò_ ÊXä$ìú×´¸–‘þ‰¸ÓÏ´‚e(kØS°Z‚if‰8pf±£J‚dË­zmCœ¬Ç"N"Îs%ÞdŠ–ø‰,çÇ’NÇÙRL¯Â+ŸÏ¤GŽL«ufš#aŸŽf–¦R«õlÎ× ´<|Å)’ûž5™peãÙl¼Ü6˜Ï×8ÏÂo…B7W.Åó‚µ¹‰kõt•$G<&!·%¡ÝÔ)~«æ$ðQE
\yN„D¡˜ÍUgÑÙêì¼ä4åÏs§g§x]»9àæf]3«3_Ý{ðáû<xð¶à©Ö<¨im¯D:I«ÙO•+b½$âv‚Í
æ\J`7œªâ?‡µ[º¸p1ÌfW?¿Wl_Xˆ\û@¬ö(¬a-|.':â¡òããqTÆ&Ì6Æþ‡›~Fv¸µÅ›Ï®œ=tVh&e°Ík\¼ˆÕÎ­ìõÙDslQÁ×K”ÿËgÖ`m-Öâ§Ù[°Öª“!"ÚN×U%Æa,©“'?›.ÒU4¬µw°*'R’šn]î$"|5WJ‚5%¯(§A~¾œgK‚5N)ùl”[d2FÑª)'§:²3p;òÝw¤jðÌ4%kåAäÙkœz¦3T­e³¤lLü;Ù÷•9ÎX•4Yµ¶Ò›Ï~ó—¿üG¦"HûÆ”µ³rpÿ²QYû…±Úg¥ážL4—ê!R…D:‘Ét7Ñ©€Æ8™¥‘¥L¢‰òŠXóÖ©ÁÃ‡¢6ÙAnÞ:˜j}÷z3Ê™î„KtÄ•+/s¥ù»z§µ?‰¼\`$"FÃ¶Zzé…Ã‡_àz“0|#î:ˆû¾ï»Æ†ÜIL$ëÒZ`m‡5fŸxÂ‘˜BïÛ~XYá„˜Èt²€lSúc'uj÷Ÿš†Õ¨V;Õ…‚c®Í5ì ]V‡©Oê¡ROÚ[Mþý\eù,Èæ‹.Õ‘ƒ/„6œ*Ø6æAjÇ´BCÂ¥„x`“šfÏiL±m®Ã³¯jhÎÆÞÂÜnšaÙŒÿ&—ÙŸ;+Û—iåkgžÖðá|tÜ¿»î«ßÅÆ<Åº8R›µÀh‚´úžhNãØ%(´VZlÀMD}Ö¾…ÌðanLn#
$5¢l©3W/.Ü¾}ÕÛ@>„µ«Wkpñí_Bk×À5"$B>šiUkb5—ù'_·f´öÔ5¦ë¯µþJÖ9yeMåjçœ¾¦â˜+•›õEk(kÞbTSºeÀ5™Ó<OógÛ¯I@«Ir1]Í•«i½·ïº¬5°	‘ƒ˜@îyþ¥=Ôf¦^¼o]±EjØ‹0†Ö8¦»šÁà	|A²µ^pÀš
ÖÀµ ¬9]ÍXmÍÀ%¸A²Ü¼¶ßhÍc#Æ¬>‚]?;ß‚ÍÚQÃL›^xaó–õnŸxb#œ×‡ë~Ûëþ ¨…†Ü;ìîk“M»B°mÅ)’ÔGö—éˆMçhÕä:cÂ «ó^V³à©P´¦¸(]Më¶Å&¤´GÃ!štµzÐ-,­Å›(Ú’"Á{H êaùšÏƒ”õnÊÍJp¥äûds§¼8¨á‘Nðk|,ÜÖƒ¨k„S¶Fò³`s!ªUï¶6ÖT¡¦Ã¸_">áS ]ïF[mÛÌê¿dì8T¯y~SŠãÃÄºil°3Ä›‰j$3T¶Y®*6«DÓØBvÇa¡´È­(XS£5†ÀZ©€¶f}²]$kÎ–RÙ
m|7Œ–)ÏeKÙÎ«8)ç9¯•y®g}"G~$§ÐÑ‘<z\¶kŸ¨õ-QŽi×haC<109j¹-b³¼°8~NªÊƒ\äæHéî¾x.×~ (•ËU½pJŒo n¥=z*§giÈ¦.k2A™€âð !Ù€¿leÊ|œ.~qó³k7oÞyð‹·ƒ;ã#°¤±¶""®e³Uº»©=¸ðPÿú$½bK´TMn,ò9à:Œµ±ªm'hÔÜEô››»ñéµèÅÖn~ðãRžÿ\N4qÕëÁaäñÛ~<"ºš)j
W2à^äÉ³‘Ö³çŒÖB¼¦8§X6I·Ù7m7TK»ož™5X[‹µø©ú‹èk&’Tù6èÕa©'§K'±‚¬‹lÆeíÖ®NckíhŸrí,w2(JŒçYK„¬_¥b¥}¢œ¡Nl	Nã^“øôOsOžÝ×“å‰‰Éï/=Â‚ÛÑGFyÝÑSeªÖ8”óK˜cØÿ]™ìÊîÖ€´óç¿ü¦T|X37Hö\ª¯öyÕŒ ‰úú
ñXn¨w §¿§À²Uí;ÞÊ|FÊ|Ë¶ìN5z·*²³€Ù¼yûöÌÀ7ñ!c5 & "ÊŒûe`Áµ&¬vçý×ß~ý+\ÍRÄW®!–Q¸†;äaPMxft¾=ñüAz¯‰º|€uÖ[­P!Z³)¿¬i 	ò,“°™X­M	˜ƒ˜²©³Am4YSß¸í’Ö„i
Áš‹äé±ÖY ‡Z7Uz8’b»Òg‹>ÅÑíPÁ:à<ÂžÐŒÏ#[(ÂgZá¦¼œfÃÆ6Ùþ„¦STÈø×ë~Ö"Ç˜\¾råÌÉåˆ íK`HRcQE!÷ØÛ/·¨¥ÎpIË¼J-&?í®¤c· i‰:«†‡3ûÆ†øC…±œä4ò’d i¼FJûÌ¡_Æõ„Ñ®Þ¾LK5F<%Ž#@¸…îâÉèÄ; ‰ñZ(\ukÖ®Ù5µIkÂ5_µpÍx- [£¨æCoÂš`-ÐšAÚIl‡ºb›u¿ByX([ØXEl¬õ#B¨†µÈŸ'‚m¿r ­vp‚lpí÷²š3ñ¨öÏï½÷×ƒ»t›cCõÅ6TãxTÞËôjÕ$«±p¤THåÂ47.Þ Mðòe0K¤¬ ¬YWìÕÎýÏÈ|$’%˜÷_“ %‰L”Fx—Ž|¼;fBƒ£xió¦õ»žÖ¶lÚ¬ý0’…‡BJKƒ´”5Eò<¬a„ÉÞ2!£aÍR3ÍÃÑ\åXs(È™`ŠÖæÝƒárPÖXäVé`÷#®-*ñ±Ø¶AÍä4mãqv|Ep9Œ‚ä½ûÙ%5²±¶â5ÙíÑ–ˆuøLÆº:\¯ü-v?%&3HîçDîŽÓDmÿmJR«™9¯™Á­1¬|eùî‚ÜLÔ†FaL }Æt ÍŽa-f#p¬‰*a¸æíûÙè ô™lê#­¸ŒÍñ&¾N¬Eà0j¦É»OÄa2Œ£š"rdüAjD‘¿)ü#Yx:‡‘ÿÈÐ@­6š!£±ïmt¶¬³ðÇÁ¿†;íät¹·'ßC>Ïp®:1©“º—æ©:ËNÍÉÒ‹3+^Ô·%yqyvd	hë­•A«¹ù¹gå‰92!ó¦fUKÜÇŒ§'ª4Ãž¬•²s§5Ä²Ó³sK#%²N©È,—ˆæ2|üjØðÇû×–òÙJ4y5_÷ÅƒŸ]½v‡›0 jÖêä§…àß_(X¥–¢]× `®8…™4°qýUò&)‰!zÂ²¹\¥=Yš(qñR,kÇo^»zóC£µk«qMŸXr<–ÎªvíÑø!¬5Ši-m­†Z}k5·µàŠ*òä“»MY{Èkø|ãYíä²¯ðV¢5Ûÿõ¿¬ÅZ¬ÅO±d-jßN[WÞm™à>’¢5µ½æY´Ì 3ÞÀßSVú‹]d´*Ç}`­½ûm.û‘™öj.ÊgÊÓk“™’!kJ§— w„	Æ*acv’´ÈéòD~ 6	Ø)M£DíÎÃKÓmêˆ½óËùx»ü”ž¬{÷k_JXi¿{ÇgA~6ÖÅÍ‹KoÔ¤D6Û­Âø¦4üV.tyŽMä´ìûû÷¶‘F¸wïú>üô{×7jiZwP³b5ÂŒ˜ÛàË‚µO>ÿí;Ÿ†ý ÉŒ¿¾ô³ç5™‰ šIU³yf¤¤½UWÆ°]picc
[pÔ±«Í!	ÎÎ~ÿŒû-W
Ú`3¤6tBRKÕe§W¾¶©6­3…Ž604 ÔÇn®.d©’jÛ‹]ªwØ™Šé¸¥J3ãG+_«g@²²Õê…µu
]®ø+·:3G¡œ‡5Â`-´ºvº›¡™SÝVmº•Wý )Rëò
Ëg——ww<i^Oý\æ2Œí,Jl·O^Y^HÆH‚ŒD,R—}ÖpÓ®Oc¿®Z¬Yë‚îáÔ@~_ž-`‹?Ž`mº©j0Á·äÕ²¾èªæ“ -°%ƒßd4âÂéj($Fêõ3ÀšÑK£¶!ƒ}?ÂšhMUk¾lv­Ájz\
›iÊVÕŽñhÖBN" ¬=ÌƒäÙií9%B*@5Œæ}'ÅnÌËYDH§È åù$HïÉ'…‚µ]M6pš‚ÝÿÙ‡‰ÂÕ^­HP_ŒÃ÷ïïbþÒÓc÷ïgŽÕØ3¬1d91¡\¾¼íÎ O³rCtiÂ´€jÆj†jnô(­±ÜÄRÆ!/ìbçå5Û{|ªwZsc‚!¶ú›pÓ7XÛ%¦ÙÜ¨¬5i-Pš¦ƒ°&X#<¯ùO‡úÕna(b˜fÕj¶¿ZÁrî—qmæØHY3>48YÞ·?„`×.Òy_²_Üf¼Bˆ¶Ê´Ÿ¨›AjmŽ¥•ýX¯Sƒ»Hdš–t&vÐ¡!+ùœgà6Îô|IÒ½ž³PÒÕ¿r²â{!¶ Š52œ¡µ«I:÷,AÅÚS0E¶ññW–—iÛÑÑÒœä„&l`µnÚ+k4:CpKÐ¼f³z½š‡5¢InZ	R©ºå“X4Ò«åJ%TµøºX<‘£pM±%²ò5Ò Q"i•¿IY#C¿§¢õ”k*7®ñÑÚP)97J2–\µÎTØ•)CZKåSoYbJ|ËfŠ9aÚäDtit”³ðp7^‘®Ø­FÑ[¾6Ê;æ¦¦ŠÔÆe%±¢í4ü%¸XSÀYŸ°ª`˜U…šy3&iÓ}ºUŠ™BIùŠ´Ñæ9jßHƒF§®^]¼zïãw>»ùÁ/ïÜª…&ÕÖBDt­®ª–‚¶\]Ðcb®">42«ðŸ`[B^Ìdæ´óBrÙ±6Ã‡ä‹O?½÷é§~ì{X{Œ°'æ2Ñ(#ÌÄÜµÿµVÛÏ(ÎVïéC§¯³(khkß€iî!T³àÛ×Š½}äb]YÛ¶¸-ºkk±?Ù’53! ³ÖVÁšAZ½„ ‹ókÄb›šñVþ:ýÉ¼ßVÞ'?]`M‰“É¢XM%kÑ*V ÕdI©$³O‘s¦3¦ŽÓ£ N"5aÙôPiÄòïQ¸Ô=Ym’É£ßî)€Žê† Ûè¿/•²å£²-ä<“NÀ¸~gÖ$°IY%k«¬û£¦5miÕþyýú¾î7@‡S…Â€:C§¸ÄÀE.÷èTtÍ&’W!ªôîÙ3Xˆ´¤RØ‹ð¥/T3XÃyuàÊ«ã¸A~râÆûoö-²šä¥-55Ð˜åÞ£ˆƒ2ŽMqÃ2ÒLü™wŠ¯òþ†gýƒŽÊÚ¿‘Fk§l„¸&ZÃZd;Ÿ°ÆÙ¼	Í™ ¬]€å˜Mzh°Fàv!¿®¯—bêî³w¸¯óT®¯¥¦õw[±šÂm4E=yHWç1c)Ž\„« ‰a,Œ}øú3£0÷fA™Á¡m°Òr)‘¼²Ñ‘-²»ƒC2–:ZZ–2F^{ÍD5g¸ÁNñâpmœ„¨…äÂøøB‡»Vc¼ˆŒ&•iz/æâŒÔaMk¡f|â´Ô€!óyµR›î,dÙ¸z\°¾9ÙLÎ"Ú3 ¢1f«Y¶Û·/ÄsÌÌÜt°VO†$\áZ#­“—ÙP¶ö'ÑšË…\ÍkžÐØZ#xÉ¯äÂšE½öIìÖ,ÔÛ­iÍøó9Hs›“ð¦	ìÐÕBäyeÙù¤ËsNÖ`-èjÄ?ÿÛ{ÿ‚²öWë¬öÂá­»dþˆ´FP¨†µª¥CŽÝºç£‘Ë-)lØ‹°³ÍÜP™–å.²ŠÕ.k5ƒ¶xA²A]sÀvÇÓš7„¼¶ßri¸-1-Ø|46[ó~&6d½¥fØ›Öoå×ÝŠáý&ÁÚÿ}„×N’¹Ü#ˆk<çÁíb£©ˆcB6!ßAj,¬÷iîêÕnáÿˆõ	O;EŒ?=ËµzŸ û@óZv²Î{¨¬Õ¥5´?ï)i-ÃF‹‘PªF8iM;ùö#*¥×é»£Þe-IÑQ’-†ª[‹F5Â;C’oo^Ì2×ÂA,&Ú‚ÛšÉ[æÓ‹`/B`ñúýNX3\#ò9`Že|qÍ/‘@k?kÚhŠ÷\\)XõÇ¯ÅÖ˜SIJ/²pDïDø¬0,)Î¦cEÞ
«É2ÛÐ(BkDTl¹ìÈ‚YÉ2%ÙÌCÀ®DšjÕò#µŽQTÀj¨d±‰ÚôvÝ}ãL8Mo52M0å*œ’üÆPú®Ññy¤<ùÛÉ¥¬I²#©½¼ˆ~j…×ÚF)IÀ"›š‚+•t<Aª&žøU`m®]Ô]œœe¨ÙÙó*í³øêW!·JTÿ~o¨b=b ×Ž1¤™-	=‘þÙ½ïQ³öÁƒÏ.ÞJ×ãaMÿú‘Ê\‰ÖæØ±N‘k©ME¾“üÔjE@Ÿ“y™ú	.+Õ¢‘ÜÅã3÷>þøÞ§÷ 5ƒµkÿó±°vHE$ÉyAOÎÇÁšm|hqŒöŽ…wº‡'µúVÑ±|n4{ö5"°Ú³Fk'ùöÝ/ò÷ê®C5V÷²kk±?Í–Ø¦_ XúAy ¢Ê´ÅØ‘ˆZeG´‹0èÂUKY¼+iÜ&;óí2X£d×bö;¡(UKl3¹®äÄR6‘á¦b#Å–°&/á:¬!³ä¨QƒÏjKµÉi¹B¢·ý“HÌükCþpAS“Ž€tT¯ñÖÚ@u'=¬xR}sþÀü7Fk°âŠ/YûO„µ kwÆ(ÊVOlìMz{ö®ßÔ—H¬Ï—ÉoKõZ¤úÖ§òKÃ§.€;ýý8#¢5õžš¬¥Ò×[{Úº¯ë;ÿ,If/­­üü•+¯þæÿþêÅ×^ûocŽÕl$HØÌM"6`Ç•ævA­±9¢1¶ë¼&dìw–ým‡÷ÔÙŒ…p2[€5yAšÅ3dB¶9;ÈAU¨	ÖÀ2"ß£á×oÖŽ2RÙšD¬DøÓË=ÝT¬Ér]j/mÅœÃÈ:)j}©¾u‹!ÿÑÜû…W‹u`Ó‡ÎtXOòÅhÚX¸cÛèi³ÑºÐç›Ô*Bó'G=êÆ°µ@kÇvsâ;Ç%ÞýÖlóZÖÆ)[{XkoÇÃ[­š’Êz”Å~`Òè_(¬åJ$µB·-}4[ë±È¡ž¦n:ªça5Ùh"­]9ñíØq9ùeûØ;PÓ&ì4$°v÷öÌñ2#å0ò0v\#ÒÓZ£}ÿrÝ¿ß—­yÁšs…µkØlÒ/¬AO¾fÍeBŽû¢5Zx©§µ7œÇˆK…„Ë<°Ùª#ÇjÎZD¨6Œ ]dp‚|œ®ö‹ «)òŸÙxžžp¬FÐ^í	m {46z˜¡§=äµKFi–I[ìd=jVaYV´”5·ŽÖ‚²æ7ðÚÃ,È›–YÇ1¶…5ïì¯¡#»§a¥û[7oÞ¥^qì·Þ Ö(­9q-„Mƒó4	ºÚªåÏá}ij¬æÚëŸIþ¥{ë*ÜŒWwì0eÍ*ÖôqL¤öa…@^ãoÓXR#¶5k¾LÍ‡;/H	JF+&£™O;JEë:[s»QškÖÙA0²ÐÍÖºÒé¥Æñ„5³ƒ<‰ÅÈJÝ’8óì™s8X{åîî“ã·–—ùA:Ÿ™Pa›á*:øÕÖ}…µ€&dÓè¤f°&p‹KY+$Äm.$À2…„ô¶æ%nYhé44Äý "Åw$Ñ—ˆkhP.’ŒGçÍs"bXŒ¥™*gä®•ÉåÊKƒƒù’`íj÷^õjá¸ßF'lšˆ–&šòäJ’ú°•²ôÇQo\•‡òÔ„€pTª11Zî¡üm²Œ³²©™En¬iCbK~¢‘é˜; #8ì&y¹V›ª¡Ìc_t¦œE0Í,¿&¦vÎóÐ’À1ä£I÷Âµ›Ü|ðKœûoÞ}Ç`íÕÕðÔ(¬©…Ú!`M™˜ü>‚µbÅ.Çgu¨À­ÕºÛÞOÎ	yQ’ËŽöš]í×®Î¸NpÓ`íòµ8ô¬¦ˆDêJ'J­ÅDºåDcäþ@d«F‘E6––úž;ÖÈÙÂ`äÇeÖÕIˆÅ3qizJÄ6nÃÒxmÖÖb-~¢þ"þÄ÷'V±èÖª³*sÖÿ3ÿ!Ó~Bâ™dæì¤ÚÑ¾söôœ¾¡‹¥jÌËMÉr‚ÈLÈO¹­’£$¹‰–FGKé<¾‚µ¯=¬a‰uùj¨k‚µÚä…ï´#G¿ÿûÑ¡ž‡ÕÙð$Y¢6&o¾Y¥fKb¨·35õÍ—Çv?Ìƒ<ûÔCeíw«•µw
}'¾:žO­ïKõô§ö®ßÛŸÈeS)Jzz{ûe†ˆãçÈÊÚtoO?^PËúì3Ø9Üòî»‡ù°¦²5±šFèºLOl­½O¼þ»;Ð\ÑšaÆ"Ó8òÀÆúvý¨l}€^*WsD×ß?ˆg£qÿjGH­nË²g;°†²Æ"ƒî(RÓ/œñ‰Â5 >Û~ô	‘½Ãýˆk,l:Û„¢Öíië.$0ªO÷N·7Éÿ‘…ò‚˜º÷Fbq‘±Nv¬4H\R¤ƒ5ÞlŸÕFâ1·ò¹MÖä í£%ÒªWØ¼|!u‡ÀXÍwÊfõÑºr¬¹y7æý»Ïáùåå@X;¬<ù·+tY£Þ8WlÉ(×õ}#×‰0›Áš.Sê™MdÆkDºë0Þý)µž±R¡KHÊ£¾þšÿ^†Œäá_:®­eØÏÖ‰kÓØy\›Ñúy Ú	†_=¬¦U°F<Ödä7ãNZ«ãšhíOØŒÔÅ5ig?4X¬öˆ°æ­ YLY³®)\ÕÚ¯f}_ì9¤5s„Ôj¸Æj‹Õ´,ñœï¯F(Tû‚Íã\û_¯k„ë®Fª)¾Øó„R=$AZ/lÚ?n/l¾/±JêBÖø¾¼èŽa+?Ë8­k¯ÛÃ·YÉ‚q]YcYi¸v¹Î*!p²™ hzÂ½ÈÕ·=óÂ¦û‹·6oÝºÊÙv=³÷‘š5géÑ©ÑÒkkÖˆ:¯yVÁ¬Æ©6!Ëþû’b¡ÇKÈi0£$÷Û_ÀÓ—¬f­nì õ²†¶æÛb{eM¨†¶ö‘ðtqÑÑÚ`7…nkÐnÊ×Òi×i~gkõ{šï‡­ÐÙÄ`í Ãy:ºÓ†¥Y^@öÿíþW^}åösºo(Y;Ãã3Ì®ˆæÆ¯,·n\8¶Ó½=€XÀ6V/ø;§YÁÉ5¬Åâ‚µuî9×;Þm¨°ñ¿­#ôvh­^çz9æÜâ9U_¥™l Íh%Í˜R6Â!eOL±™“Ã4ÃÎ£k#%r$¸ìÐ@[ÛH¥«Ê²Ÿt‰QèKý1O©µMOD3X?â5M%87Íc «7,@ 4+Xâx`h¤T’²6Êµ
„%£>nK¢oFJÝòÃÅJ©ÇŠ	D¬’ÐI\Fþ%öù\û1uV´U‘ê&Þ8-#ÿj&¯ê‡ê,F$ÕÊ@wñ‹ï=¸yíƒÞyçýÇÃZs•F'«H¦KVøDU4Va7ãÂlI*šµÆfS­ÃšŒþ5&·”¤3½gkÚAZÍZ¨‘‹Ø&Hs~ÉÅLYû‡° ­¡(­ñ xAbó¹!"+çÎî>˜Õ‹Öà5Å³Ö–[›ýY³Þªo#¬©Í<=³kk±?Í–Ø3-–Ìäu†µb)Òº1¬‘ñØ!?vÜ?¢¸M.þ-Œº 8;¡¢ªþsj´–ƒÕ\)w¥ªp¥‘Z™dn‰Ñ0…„\™³Eùéš¨ÌUS)ÇñèäÈ$<va’º5™Ìs@ƒì£þþ÷ïË¼à(+ðV†ê–ðþËüüìRñúÙ®ž¶	ÙŠ¼)Xs¬&Xóö"AVûìÅþž¯ÞþU¾‡VÐ{÷÷íŽåò0Yg/KO>ÁÝÌáB¶“GòˆÔö"¶mélëNG®k­­×QÕœ0¨FSŸ•Ÿ?·Â'°öªhíÎWÓb/º Q´Æ
.‘©Z´º¤¦ Ô˜Ø‰êxÊQ˜·ºñ£fyU¿´‡=!…^¥#×b­w;çp™Šà/¬îáÏ¬’ÊF9Ú0'rÔ4h­SyyYöO· ((iÀZjï°Ì5$‘	»Ä3£7ö
gØO@k‹ÁNÄñ[Ýl?äBjäÉ8Ï=å Îm•5÷÷œíCõÑ²²Òºñ¦ýÇŽÑ[IwÖ½´†¬v†<HÙ‹\ùÛ¥B¾¬žKfgTFoî’HLVUÔ9AÆëÎ"}öÇSâL–
	ºîÛWÀx‹‘!¹A"¬Qêœ•÷•fŽØ÷­ô5ÂŠÔ´*À3ë¯&HóÛU¤5v:ÃÈ{×|åš×Ö~P¶&iÍw[®ùTHÂ·\{<®i’gé‘fd9)„jÞrU«ãµ€jæyÞKkÒÖ¤Ò9mG­q¬Ç’Éj*óÖÌÒXíñFÞ²_§©±°"¬«¡¢½äBÝ°7ÿ?öÎî·­óZóg.ƒ¹;€,ØéB7&$Yhc¨`A…ñBHƒf(+’sQ8!ëú˜þŠíØ±ìJFr·qSSŠZ I+CpŽ2“˜j.N4Š¡&9j67E3>ƒàÌÕA:¹™Áüžõòõ+:NûD‹{¿ûÝ››¢ü!nýö³Ö³ŽÁ:c}]¦Ÿ?pdXôÜD²¦wÿáuvBpL³hÖ¬9H{xaM˜¯i¨VS°yñÝ©ï‘èÚ]kõY­•kìX–øVìÁã~·šž=q€=&âÜïDµ°´vÅÊZSÉ°¦9ÚÝnÁÙ³î×ìÞÁßÌ6õî”{Á”áêÏ§¦|Íš/YiBÝZÈ‚T¼·9%HS0î]ßÙ¶jµ¥×Z 4Û*¼Íˆ¯½Ok¬Šûb4·;<¦Ù!náÆaT=eäÚÏÏ*ôcww¦.?·†$¿‰ß…Õø@vÒ9Ñ&#¦¯ÜÝ\[Û|¤oSÈg°æÃÐ2†°© Ùj>Ëk;4Š%tfšœ Ú`©¬ÄHsñ7Vk·3ÌÛâœÈŽUøÊfÄyö“!
£±Ç‘3YŒ$€6ä6È,“'9RÉù¼|ìËCýË”¦Õg+“€ÛMMÊÀ)/Ê-ççgÒååãóý‡Îs'Ô.«ÐÚ‰e`Õm¾˜ãEóWxYòX€@:ÀZCõ	ðZQII,¬$ÑÊj9hNêY>;˜Éú]-Ã÷¥)@Lds?4¥tDÒ$o&“Yõ„KôNß¼†òuMòÛkŸýÓG¤@¾…º;½ð‹xj-Ys¦	uyÕoÑä4TVÏóÝ!¦IÕ#DˆÖ(S˜©
Öp2Cç™Ã™3§…šµV:ôÂÚ€ºßŒlû×¢ÛÖ@hÌœºáÑ"®µ†‘·	6ƒµHGÖ>çaÃÕ¦°FlÞ¿¹7­‰Öÿùï¶c;¶ã;è/s—.ÊÖ|§bKoÖbìÙ4"i4³£VÖ–LÊ·Ë±&’\ruö“1¹lµ×™D*+7*Ò«y]žøõƒãËÖ¤S°vï~·Ë……B5ðìxµq0£fíø«_ý*ÊÚ×ó\`$»qâ©†þ4àü|döùF-ùôËOæsÓ8öÃjŒÖ.ˆÕX…k>>>Ó¿ïüü¿½—çðXšÚ´Éb©T©R†=†rBË1zÚ¤ÆSåj%6˜ã:çÊÖ&&Æ†'vïz¤›F0|ÐClØ@BƒÎ¼%‡Jö×	ù‹¼ðÊo¼ÿ…wÌXä+rô˜ã-·
¶c2G``•O¤ÑçícqMÖXqî7ÍžÛxÆÁšÉkG;ÇÙ‘I$`Æ7M€f¯þ¸glílb|Ÿ¢õ’Ó×ßTÖØä¨Æ’œØVê§êÈ•Û`8LFdÁ¢BùAsIL´áAb8b‡|F„eôbSÍ›\Æ£0ó]aã¦p'û\~	§uGšG›ÆþÖîW»¹´IûrkÏ­=¶q‘À
òªYw³¸z5ZàkÏ¯kÊƒ\[‰Ðä,Ö•[ì‘¤ƒ5CËö¸ûþå`½ÕÌz»\"#’`¿\f]¤PÕ°íïÏõày–Â5Z®-Ñ[qøÜYï©j5‡mªWã°š«™×ø›gxÆŠÖè#Æâq-ˆkÐZp„„×œ´æ-üÍÃßpÍ×®±è‚=©j!X{XÅZPÖ 6Í¯IpñÒZ×€µ†SÒ¤±p¨¡ƒŽÕZpûfØ¦«]ª=ÈjMÃ~Zûï¿úË‡¨gÒÕŽ=®ÆÏ&þ Ï¶{K‘=OX§µÃÖT«¦&kK4…wþ€TX|Ÿ54Å6i‡8@qkqƒ\œR£²¦Ùã}XÓJØtp¿õ=V>†	$d{ )µÅ°€ÍÀ)°ZPÖÞºß»NÚûX[ÖžÝ³¾›25ÑÚnijJ]§fÍ@n}Êð®ÙcM6þ‹!ëÒÐ»ÓÕx¸pUk†kÎÒ²WÍ`»ƒ®«û÷¶®µÀZ›Â­i+ÃX—÷ˆ¾­0@så[®5¥4†ööiPË—£%­êˆ±êC!JKÐ“›½Ýº{_Zã3Y¬ÆzÕõTQ?ü©îÍÍ~î#ü¸³´ä?ê2f´ÆN 5¸‚´šX3FÓq&RÑLX#`µ‚úŠ¢²…nlJ–t-ÙHˆ$LZS·“´Ëâ ØfWl3‰”d‚5­˜=$kjÕ2yø„#‰á\AFúrA!Ë	Ö˜W«X9æp÷í_®•kºûy¨Gî¿Ç¹ˆ’¶Â…¶HOÑÚ<Ð–ÃßŸ–ž¡© ]Bpq[evñª:6LúeB¾ŽPÔF?µr¦ZÅ|äy ZV¡PÖ’Ò¶NÞ¢Ïš«p[pmKÏÎfw ÈQyöüÛ¦ï|´¹ò‘ïŠ?<¬µü'½NÏ=c$6õÀ†Õ*4›g_i™JÛÁ}j«sœÈ¦»+ÕÉ3‹·?¼sçömXí¯ÂZ„A[€­»ÛwÂþöhqù¾ýAfEk¬}ôm\=Øm°Öìm£‡5Ì ›îÉ¢5giÊŸ;ÿõïÿn;¶c;¾{þ"vµj«qÃÇò©Éï¢Ùg$fä¥ôGékœÃÇìžhÄ®®8>Îõ-4~öÒ\_Ÿ”9ìtûøÌ•ŸWZú°ZsÝ|•tê:>§Ùp‚¬-•8Þ¨/œU
[íø×ø‹¼ú¾¾¢;€º¸P´Fõ$È×ëZ9?}ð±—¯ÏÉ\äsVhíÉÏI÷fÿßÿG?l«W3Óúò®]‰J:Q&w„Nk“§j;w¤I4ÉPéÁ´¾-ž ]d»2“ 9>Ñïæ£Ïß§Ÿ¬½­±àí`íu9÷ß^<<²àWä±G|ìÀc2¿¡¨¡ÍúbQÑÍ‘g]ËµÐóúxÎµÄÖxt\¢YyöCyÚˆÕŽvu/8täÈ¡C{Øá,½F`6>1Öqµ6.S™›
5ÊòJ)Y]öS–GþéPªDe:ekXý©UëiÖ8	TäÊ"3ƒL”Gwm®õ™.|¾£o•ms·óˆû¡YZÓ‚D©œæžó¬¦4øÐŽ¥;‡ÕB3ï²ÝMEš¼EØp3”'é~wÁÉkÈžºî9ZS¿¥µË‚µ¾h_´Ý{ÒÄš‚dÔMbÑv±šãÓêkÍÕ/2ÝÎžMÇ«Ö‹3¤A"ãÔkµ/HˆÍ„hÍ¼HMîûößÀÎóÝÍ»4Å>W<|ö·_‚$Ö‚+dÈ„&#>RÚšáÑ,\óê‹ˆZvQÕ8ÊÃ“S(Xkm²fÊ‹=„kÕ¬3ökÂ5/­]s´æxí%GlÌljùBµÊÕ‚®vÝ³Ú·ëjÁYäÏÂ4>çúªÝ‡Í?7ªÊ:ö(x¬Éüq½óÙ#¨Ô‡†i‚½-Ý¬4a[2”2HFB¨`-øö›½ˆqšW¯Æêx-XŒÜYSør$W.¤y)A2ýLî"ëû×wïîÄb¤k§6LYûË7…µw¥\g ¬ùH{[	]ïäo£³	kØÞ³oìÞ`m‰ov¢‡µ)ö½¤Y÷‡ŠµëFj#ÎÒÂ'AšÅÈ
¬¦<Hçà¿ÉM7ÄwhM¨f+æ"iÙOž¦ŽÖ¶FŸ¢9Þt1‘ÎØðÉ¸:’àÂÆŠ”µÀj÷µ5ƒ5ûÉ_›Z¹¼†–}‚ðfÆeL¹ë¬ù°FÄ¡µHkÌ	7aÝïêØ@4>*Djhl[µcnÄ„VÕ…R¡X$ß‘fkrˆLÎÊ’Yí°RÌ&¦…jÓD¬B;ë<2þIKAMŠÎ’™ÉWÕ½ƒ}.…µ"ÏVÉ]¬fpž,Ž"Y¥X¤‚@÷ºzM‰µB±M)—åÐ>¤µS<MÉ[£öÒ•åT©F4¬n*³2åÛ¸îã/2”ÂT„rº<¾`DdHV§Å@E½ÏÖNŠÖfgõqíÏßœŽ¦1×…Õ€8Ÿ¿¶p³÷ÍÅÅ•ßýäË·°2X{á©oÉƒŒ¸DHý«'“}}í4¸4+È¹^$=÷æõ*=»QÑôÍä*ÀZž„-gÖ0òû_~}g¶r›¼K¤<Ë»| ÖÂÛùp•¦ƒøÃ;­…©ÂÏ¬Ñ×°ivýÉû}ä}ZcaxL¯†¢5¤†xX»+ä'°í®¦Ôl½±kÛ±ßMXóõjk&ÍË&yT«Xašƒµië‹MXm{‘n{ÅÜ‹/Î-¼D$÷AUòfä–ÑR¡÷¦­ªyR<0Þf¯˜¦–[–gUSbãfà	¸ìø	s!ÿüŸ¾f‚–Æ1ä5ú­5h¯={ê+`¼{Lˆó#·³™Úôç×«ÓŸ»p=Ö¬–iët¦žùž	RÛŠÅl‚<þÒPWÛdûŒ4W»¬š¸ä):ŒÑgamŸPiÏ‘1Ö¶î§;:žîî²&Ç&'¬YšÝE²ìˆ_åô¿=‡†Y¿¯F]cïQ$4œ@øU“ÔGüûuÃ®Ñš)kÔö=ÃŒ¬ãã=Á¬ßBXvtwç¸Û³m[Å¶6›Ø9.ï~œÙ'-v£o13††á¨ÈëGÅìQ›5ýaÅo9üI”¤¯AjT¿i•†	ÑÙªÙóŽ
`¼ ¦‰›ú]{Ò¾Gv3ÕÑ‚ƒ5Âæ¦È‰Ð¶ ™ö}˜ª¦§ü	¶L&ueJ{¤ï¢”µÇeüb¸f]ðT³FÍÞ˜Av·¯­$1ƒ›V¤‹$pé%5ÛÆÓ€©„5q­PuÏ—
°k	€í!u4“Ž-á¢hi­zæ,y‚5àX»qNc‡`0aMSÖÞþ9æ"++(kHkçÎ|&.qpM¦[[“¸­YåšW×”äè‰Í=þ×Dk,×óS+¬IX³0aHs¸¦•XÛÒk-$BzqMáŒD¤¥5Ü¶a!R.f-ÂÛm­W3ŒþF½a)Íjµ?²þïñ'¨òÖ¤«"à3ÓØîÉ¨@9rŒOfWxæ:¯9X[Ú+³zNÖV|ÍÚiŸ
	š¹Á7ZóÊš·ðâÚm‘ÞÔ” Í"Hk£¬1ÚAÕ“‘
y¯sO§ámÖžxPXÛêÝï‡w¼°æŸGYó¨¦·ïf°FŸ ÍªÖ;Ek‚H¹B‚‹®¦nÊ±ª`M_÷AeTóÒÚÉ‡FhuÑeA:}mµM‰mmÒ¬‚5
60ˆ”5“”T<–dËÂ<àUjîºÃ”Ñ¶|$D½JÙPóú$„•ìˆ‘iÏÕê.¿…¬Y\¶ª9V“I$©ÏdAÒ°Ã	^ÈA®*V&ròGlcêƒÃ­ÎÌ‚Ñˆ(·‘™‹æ±8-ÔÊÀZÂHÉÍÎFE‹Y½Z¶\(CkNi:ù“ä˜ŒV¸ª¶ÕªÅòÙòhW›lX8Ä*6#MÃ‘"õbµ™l61„dµRUúÖ Üµ„Â°+)(0›Bh;ULÍs³ç9"E>¢Äa8Ð¡:Q¾È2×@*¤¯ÕT#ŽÏç4Š¸#Ëi™ÀmI£‘IÌMc')ám!Ïâ"<Y§ë¹¹XLnXŠÜ\¨’$i5m¸92-É­­¢²2ìÆf…X¯­¬ôN¿óÑ—_ê£í#XíôS¿x¬E¶ªk’íøœV«Öj…'}-©i&­eÙ@f“Õ¹Yy÷WùFnÚ/ù3_ÌTÞÆ}òvôçdA~öÖ k!ï’’5W¯­iàZã‚KÀÇùt+§ù1	á¬Š[“ #ìwØTƒMúEÖž3.s°&^k-Y»¼bŠ˜”5´5hÍ”5\F¶am;¶ã»é/¢îW¢¨u÷F’P[Ö 3`¹*Ó€6åAÚàmE8‹Shª¶pí%¢î*f+ÊdÌŒÔ3´F®²€«ÑÌ¤´¡ZÎŠŸk`Û©SˆlpÙ×'–Ÿ >¸rjhBûà«ÄkV­vEiõêñå¼†4·<?xëó[µåI,¨äÖïyÏ»Ç©Vr´æ½ Y?:Ó ,rçp¨DkÐñáÉÉÑÁBq‚Úo® ¾½x4ºƒ[Â££C8uô£Qí˜H•bÿÌçûŽbL]Ö¬AkõNJƒ|eñöéWÎ:§!‚`ÁdÏ/¿F@ìè‘cÏîÑ!í¨´£¹gœ•¿N0Ï~\#¼S¿ÁZ·qÇÇ:šM	¯z”×p||Ÿ€ïèx*ZÏø„,!û…^šŒS‡Þ54Ï3cX§ô¤zNœOQ˜vÞ¥>s\¿å:’ëÇÈß9n·QÜ6‘4(,Ç¥¤%Lmrp&iM“fh×ä5—©‰û=†ýÐV­=xŽ°ßN„ríÐtÂôÁ™[JÕšg¹ß¥VÖ6:6.þ‡òž6¸ÌÙ¿ö/jŒ«Øx#HµcºüÃËÝ›+ÑÈ
Ær‚µù‡'wDÛƒÓÖ@O…S™•‹¹þR6þú»,~JªPû¢öÌx™ŽFÈ8DIŽLÐxx²ñvoã2Bœcå´¬I^âš"hk­þk®ßšU®yqMµk<T“æ,>ñÑÖ&ÊyVkm‡M\¶kNUcáÁ®hÍb«´v¿nM48•fèj,^S3RCTsaªš¼EF¼äÆ7=û‰û¨F «iù£píÏKd=Ê™c1ú	¨¦žÝ[W@(GpnlÉñsçŒ,b[ÒÞúÞw‰Å%í,y‡‘VeÑ“!Zs˜¦ÅY‹°µ`m
e­µf~ò[¿¼ÄæŸ3ó{»ÑÕv«ÍÚžõÖH– Nßè¶ö—÷Þÿ×÷ƒÙdp±ïÁ¤5!¡BÃ545÷PÚ8‘IP¤*v5XsÎýÕ <HkÆò
ã4oÝ©¼÷*ù,{÷·É¶¿	k¾1¶H[«ÉX6Ž¾†rŽöZàçcþ".ý±E[cÅcAIý¨“ö¤–Öº×Òn9ø‘©ÈÔ
}±¿¯p°&QÍ`M«)é==Ò·Fô5?M¢ŽÅ,\h€5žð[%¡ùJZ/®Q- ÜÆû¬ÏÆÙcïin°ýN¬f‘-g°•ÍL–GQ§ÅEk–)V3ÿ8)ÐZ<Æ6w°–MˆZ”¬eòÌ²PK¼¨šµ¼H.O®	Uh…‰°`¶Ñ@së‡Å(N;½2w'»hœ9ËÌä0ÉV9H-§km)ÓŒa	é>økEä´šXŸÈÚè0ÜN©Æ1æ'ãR×^Ä¾Ùº¨­~}¬Ž’×Šâ%ˆ9f$z]{B¬Ò‰…:¥HÞš>sæµß­$kúçý…7Þx*Hk!-‘ z,Ò´ðÖ`Áj€Š™þjFÓ†kÕÍ×x&“%9–ü…s³ù*ñoÿsöÍÛPÚgÿ«Ý©þòÁ<ÈŸ6aÍ³šh=ž‡²Ò4¯ƒ×bžËœ=Õ»›c4¼¶æamƒ+–SÖˆP²¦XóY{ˆ˜ò ‰ô¶²¶Ûñÿr£› À,å1šÔÞ€k²!à4*Ø´qŸ<k¢7T4X,Û%g µŸýìgIÄ6èìÅš¢pEèUƒìÙL¾£ê’ÍÕñ“k¬•IÔŽŸ—¾V,Ô€µyˆmFìF†äÇñžWd£öÁï?8nù‘Ö'{¡FsÏ+_Akä†øðùËZå¯?yXûÇ~ M°fÝ¶>q^T’½`IwÞ?Ü_D<R“ãQ~¯˜ÖŠµå¡‰êL>žÈLÖÙj6±K‘â†£òwïfŽmäXOõiªÖbC™K€	œ~c°FÉ/{/¼ðþYÃ4@
˜ÚwäÐ3ª±#;ª®c¦µ‰Õ¤¨Y›;XƒÖY<chÆSÒÔzœ%ä}XSßkJÙì-,t*A>äQÜDÆPãz8+KÐÉŒÞ×ûÆwB<'XË!¬–´ß?4ÜÝJ	p#Ð9‡'ºv¦kåÑÑ£†fe6ø?—¹®j«ÕtœƒL¼•¿ÂÃšÓÔ„¶T†˜ïšþCEXÙî",¶§5Op{^mcá™ŠÖX?¹ø	¡äµO>!%Ê`MÿhÚÚZÇÀæÊÀæZR%kvWÜÇ¦¢Æ¡¤¸-„“ì¦Aµ\cåv.ƒ|YJ¥cj´Pûô0FVmºAÖ„dJ{ôÍ±Ù]1›‘³Î]„U¬5ãmò ŽkßÐÖ‚ƒ¿‰k¡r­…×,|ó5ÿ`	¤X­EXãá9íªï´Ö"­ýîzKÝ8†^°göÐ§iYhªjö~¼(ôÂ¬öÃ‡°¨F@j€švŠ= ‘ÇÁlê¯†›j3ŽLÜë<:†ûaêÜ¹õõÎ#ÃMXÛë@=XSØt¿–¼$‹#µW\¤WÖ´xIÍ-n Öô¥ô%ÈD·
]Îˆ&<gÿð;S{wí†¤:wÓhm©UWã!>³Õ#[ˆ m‹Ô4º‰§5&0ÍÜî!àhÆî%ç‚¹îaÍ1³îµœ²¦0òkˆj¯±yqÍyÚ€kNYSèë¨VÍ muÕèÌ¡šM»ÚªÑÚe¡ÓÓœdTÔ¬mmZ‹[åßÏõÃuùlçUÖq€f1$-FF8¼²‚Ãc„ßx·²ÚEk¸Bßÿ>7jÀ´îƒkX‘t c%xSõð¨F'šßwˆdß>ubíì4+ÙÖšy¡W~e’ÛÚšY2**³fdòXÉëõ–ç˜ƒ&HÛÚÒJ;)wkY MÁÅQÝZži…#œ­d¸bÕ²y:®AZ¸õ•RÜlC<+†Ç€59‰,0ôïéÇÆ¿„ö_¬V‹´b™œ™¬å†eãOvä²EPÒ¸ë)£)åúÕªUoÝÜO!sCŽŽ‰‰™êLã%­šHWpc¬#¡Ý¼.Ñk°mßYOHõêIp{a-9‡°6Jï3ó×Þ|S°öæ;_
ÖˆŸðÿñëß–YIjdIb,22W-ça5*‹µ“¾ïšªß+Õ§yrCã|˜KÄcš­Î,,Þþå¯ïÜþUí­Ûù;µ)Pã½Ôòü7ˆaŒÆ¿Y§ÖºaùVX›Ò"$@†È ¬‘Â°aÊÚU‡jAXSÐ;ŒÄØ4•µº/ôÛ°¶ÛñôÙÛM¸Äm(ÄG™y(;c®¥2âŠ8XÃÏ‘©ÊØÏúioõÖØ>_é¥_¼F³5o¡:7¢îm*7ž©–'eÜ˜,./OÒÔZ×‰åB–L•¯eªÙå+SXC¢œ©‚íÄ©™ÆW.r~èÊ‰¯€:”·S5®FçŠ£¯ßªÎŽœ¤2W—×Õ´¬]4X«ýD%kü:x¦§XËõLturxB™ù“ÓW­1™bhRêÉ.’wFÇðT±ÚØw'Ç€µùb¼<øô¥ÙÌÍKÎ¹ßB¬¦Ð›½ræ¼3í‡žþôè!²³`20SªÖ¾cÄ3ÇŽÂj*k{F½Õ©Oö3‚5ï	™9Û¨Éy¬ìœ·Î°¬™mÿQ’0ñqD_Ãq„WÒ[	ŽìŽê7•-Õâåj€Æ0Ø†´Æe|ˆò4´5ð®8J›p
Öì×¬Á]ldE6¬98Ó¡š·{˜"l#d³\F­q[EÜ`"K3¯±¥rÛ½Ò†w¤ó|æàµ‹¯_Üè‹¬ÉR†xH“ËÈ'—~jÍ–0îÿáeº1©i¥ïîåÍ¾‘d{Ì„5Y@ú Š-ì:‰mNKÈk„"¶Òè`¢£cép5}öÓ\*‡jù)[…Ôjä?~!;H`tËÄÖþÝêÕ”ûÈ>3±ÚÊÊFV!2àZ×ŒÖ¼ƒ¿¹B¶ˆk×þÕãšÒ!yx`ÓB¤æQ-ä@Z €ÁZÄÝq­UZ3q´Æ&®]3}MlÖd´vPÔ‚­ˆd5•«É²…Õ|¹Z`µ «Ô~ó*ÖîYW5xìYÒ‡¬…8‚ŠtÉú^jÏõï­ãÖ˜j5Å{ß¾!C-¦,í_Úï”µÓMiÍMÖ—Éâµ5jÖg§³è˜²ÜÃõ`Ë>¹-Áfi]c“Þ–Ö»V÷¯îÚ}À5ÅîZr5kÔ4ë~6-œæµµßªÑvh
ã4!ÏsÏá ÓÕö8SÈ%§¬5Ïb•¼ÆX#BîfÐ\aÄ•­…,H­^Z{oLÔ4ò2Û~8c´¹‡5©iMZcÒž$à34'Æ«_s!C+ß›<G—¶Ap¾#UQ};zq,fÁŒXT5u÷î
ÿIïÃš¬`/¨jè«Öè†¿‰ÈÚs'ù8á-ÄìK˜¬&!§hkÂu˜¹\GÆ´5Æ¸³‰s$aG¼&Ïƒf‰ Õ'J«!¬ ¯‰v	eZ«¯š"– Ö*Ñh¥ªØµk5ë²fù/"²:Oägên…Zm2_™¤ZŽOp£Š9¡åjýãc©Üòp		/§¾,äD
ÞÊ£…ÑT?…jµIré°–Az»"ÉbXã
Œ‰ÁŽ¯ZÅj±’¬É-œQ”&²u¹\[¨ÆÓ|hÆó8z4 ±ëÓméühß, k²¯¬PÄ¬Qý;Jeó”39rkeqñö—ÿd	ÞÀñôÔêøáëDºl²Z¥°Ïµ»ž¶8üF(ÙË÷vÇ²ÜøÅçd®2 $I"*cÈêlßÊ·Þ¸óÖ¯	¨-F¾ÅaÄ½—t¼†<rZ:ž•°–h-ZsŒö[SïÃÛÔCš®…sØ8ÄèaM›W$LxT»Ú¢¬mú¦†kð°¦0ïþøO·Û±ß¹’5¯Ï;CÈ^ó„Ô}Mƒ55e©ˆ¸ç
ÉJð)Ìf12Ò;óÒÏ^²…•®ñ¡Ñ_MEm½#sõt¶XÄú6"×¢–ã:!XË/ µ!¥q'û
Ë~Ú¯‰Õ€µ…Ú²jÙþDEìF­Û•Û´=UÅªêÖË'…j/¿ª±º9…ÞÚ¬þÅ°šâGï©sèùáü*1JjãÐpx“i—ºá‰±±b-j‚L·®ÀÂI£Ãx)R±6–R™[ÏpäñKÓ×³Äwä5âq£5ó…‡k·?5»~%)2‘C?S‚ùÈŒÚ5a-bŽ!Z&ã¸íXB£ï¬†å¾=ÕÓ¬¡£lFkÇÄjÀ›NhÂ¯ct´fÖý=ý’Ò¨QãO…´¦ú5jÙú¥¥z(Tƒ5†só.ÔN5—ã>ìpi~m]])|4ºÄj£P«Õ Ž:ls5h«Hlòð´Ö¶Êª',Õ‘³¦¶õE¬[í€\·k›ù‹!GtÌ_×|­µ¶Öì«÷\ã`#Ò½Ñ„µvkýÀv	Ts°öºµ[ÚœŠÜ=ýúš·7ˆY¹š¶3s¡Ä$ß™€R=rBK [œÊÆÚ¹3g“õJn[=¤}Z“ˆv¶š‰»†ØŸÿþ…Åƒ5Û››o
ÐÀ77›¨Bë¸†?´¦ýÖ×Þs¸šd{¿!/Ò »yV¨Æ#Ðm°]dS]Õœ¸æ´53Ÿ »¬e@(]ƒÌxŠâ®1À…H{3R [eµ‡•«Ý·ñ ö«ß°üñW¿Å¯ÿ	BÖ©óø4H§­aÞC¥O§žíÄªþp3LRbõØvv‰ÐÈ0Yl¿WÖ 5·™™¶Æ*Z#­ÊšZ•!M¹jÀá±Iáü××{?¡»Va˜Ï>q X{@Ykñ‚ÔÐÚ;Œ‹¾·5ÄïÉÄX´qíYÕ®™Äf¾“”Ë¡±éINsÅf/Í`$ØA† aÕ-¼ÆÒTÖô®‰Ö¼¢¡ñÇsIAXã¦N¼}KkL(–Œ­¶­ŠÒ<¬õ5‡¨¬DlnÖØOi·ÏŒ€b°Vó#J—5Z¬Ñû>¬Ù½ó!Z°¦ÿÊ?×6a³>yIª'¶‹>‚/Î¡ùÈÚk>Ò#š7y´!]ëNŽuÃŽ+œ‰šÌ‰Ì@×TµR
é£Èl^¥h(õú[H§µ8´‡Ñ*$Â$yu`KW$ï¤	°ÌB³&ÀqV¾ÂU²Q«Ö9†¿©]òTrú8ïCößY˜ÌÉQ)É_¤˜O'Š©q®Çkª`«Ñ=»6Ù˜,d+Sýãã9´8Š×®ÌPVŽmˆ82ôÌV3“™rv)Çt’BßJ¢º@—íF&j“ÔfŠØ'ƒPÑJ´Â÷—æVÙ5JW hmN–úTÞº5÷öââGÕ^9m´vú4Ÿh­y!PÊì?Ö“|iYòW¢³Î›¿n†”sÆ%²*g³ÿ-Óê"Ð›'á²w`êÝ;ø@š¿ÈÊÖôŸŒhAYÓ-è<òeRKÇˆVVcý­MÙê#ò­ÁRá}û5u#kFjXŠ\0m-kÖª­ry5emõ†>¶am;¶ã»k[ëe%¤’ETåÍÀ…2*ZhÂš+`È1c¬_«[æ#¤Ö ÕcµkHkÉYY4UxAGŒ”óè$©ó™rfë)Š£é£‹
Þ#§N5ØÏry¨¹5sòŸŸ¬/LÖäÞÙÈqªÙÄh4ðD`È5ju?¾|òe•¬=	¬i÷Ò%£µ¦m?°öÆÞº±žÀî‘L¿¡±¡âòYŠÖb‰Ú•SE.ª“¹ža¶~²Ü
™¸nŸ8o=ØúGw•Hƒ;øøã—N>æ³ Á5>c7¨•r²šÖÀ2`mÔ4£3å3’óH3l£7ÉkGTfÆµ_;4.ÙÌ)dÌ=ä8"®É"~SÒ##Á>‹/¥Ia³xÌÏKzëã[îÁÇÊÜ@5dNÐûÇ˜÷c5¢ÜG“Ùæ‹EÊÖ´—c,öí"FaX#©ÖJk¢5SÙl
Y+µUg,b£qš3Yµ	bKC5GjÌ¼ŸV€5›	àü tÖÂmnAÀëX9¹¬ÑõštÔOOŒ ÛU’ 7ìæ:ÚÚ?Þ]ydGlåòs#Ikô4íÝu›ß{ZúI4Hn¥!@­T‚Øð¯>÷ií¬€1djú³½eëŠ]«bj²V=­™¶¦=¹‹4ÌWÄÃÚæ»ÌXÀ7^¸a6ò%˜æŠ‡¥B>\!¿)®‰ØÀµ)&Íô`aÕt<šk°FRóî"<ˆ«Î2$Bš%¤´†VÆzÞh- k«Œ§“^ó&‘ÕžÙÌ}§ýFÊÚg°´f2Ú³[kÖ4FÖ×19$§ú{ÖRøñ…„ÚÄh{5±x{kŸ5ïÉbq™…p­Ö|OlÆÐemÿÒ½ý.©ÒÞEáxÉ…g7pŠ£îðjgg×®mÔwí¥ð„\zÀY¤¥ÍÚƒÀæOû‹FB½Z«®¶®?3|¡-}o7°²Ù^'ó%Îça˜‰ÕÊú*¯Xl5î§ÒƒÕÖXª¡¬ñR3±q—d5Gk
m`ÒiZü*[DÚ­3¶`¥±h}¤#BŽîÒÃ¨yÒ>b$¬Û§)†+f±±F+'¬]´’5ËùÉÁ^^1ù¬Û$<}ä07Xsn”ì»ž!ÁoVÓàÙ;n[¼C:œÿ`yŽk+hñ)ìì(ÙƒÕ
) 1@ ]°–äóðr°ÉmÃb,1-œA.Ÿ™`-3YÈð³Z\»Ê¢ºìd£Z¡çŒŒû‡vv±ï/æÈMé§‡æx©XÄÆŸf9žï¢…[¹Nþœ„•­ëŠM~Ëd¡˜­¹ÞÅpäDrAÍÎRŠ–¤ ­^§I*5k‰¬*Ûfªõ9C'YB*£“ù3.\ã]¬/ÀjU,O
©Rý+ß·W=òeîHŽ\W3íßñôÎÊ;?ù‘²]žâŸ…ÏR ½Ôµ%ÄjªvŸæei3Ùx]à‡¶È3õ)i0e…wV6-†¡¯¡ŒU’É¹$%h·ýËÅÎ¹_°ÖÚÛÞÏ``AºMg[ ½á#ƒÂb|0‚¬öjÛò5ó…4Hkb5âª–ISÐ•G,ö³šs¿Óìol+kÛ±ßÑø{`Íëû‘n	gl­ö´]9#äŠhc' kÖk•gY#/¾X™CRƒÒf4JU{éÅ…JžZ`>ï³™hw7÷êf©š©k‰J]æÜçS}ó•å÷îÔ™3W­6êE0í÷Ç¯°Ò ¦Nqó²±°vå÷_Wr>V‘§è·ÖÀ½¸qÓÁÚ“`Ú'Obù9°fwX/zë~Òã?Æ^ä'ªZ[ê¡(‹_³±æÇúO¥rEŠŠ©Õ†!‹Ü›¤ ¿'7J[RÝ)NÍ÷Ãjèk£Ü¾ôøOzé’eÙù4Hxàês¢5ªã^?ýÊâ¼±Ú›­®	¼õqï§š(Ž=`M ¦SXåð/³ÔIž>êÒ I€Ä€äQ‘âšðÍ÷Ìv°æ¾ óó:$6ñœ@Î¶qQÆI‚´VßØËóÝÓ¨ûÕó¯žGfCesÿf¹-Gqy
:ëÙR4Ì†YqÜ±ZC[ÜÕü‹'0ˆ!YcµÖnk®VÃf`ß…§5‘˜¨Ù®‡÷ÝDtžÛ7\‹8Zó=kýËlÇ•‹02Xt4_þ‹Šÿp¼&XÃoÄõZÒ½uÎÝ»±ö©ŽØÊ¦Ê_”aÓî•’¯qˆ Æ„­EÜmÚÐÓFéÀWRÐI	Ãî±z˜¿Ó¡„Á–ŸÃƒÿÀš©–…?<‡ÞöKƒ´â5³i¡!ÛÛ ›Pm•íêÚŸõ÷ ¯ZûfåáÅµw<®Ý6	_žÚZ‚g8ãaºÚ†¥AzVs7vµ{5xŒ˜¶vR¿Ê»÷¹i?|KØ“@]PÕª=´\-ÈjB5D5@Mñ?n€Óà3iiRØl}ÔÜEXŸ@7Z_º·G¾àŠuWÓzÎ@*xŒ,l¬:jEkÎÒ[Œ|Œ }Éš[h‰­ÕÑ°¶tï½ |¶#Ûõu6žÔ´ú.hÚjºt1¹®‘gcgPÖB&dÀµ‡î"Œ‹­½?%%siµÙ{f`š9Bî–Èf¤¶Î™PäêªSÖˆw<°ù¸ÎâÜ  »Š5k´¶(/HkûÅjÖ,2ÀZ«w,#1Y„DéEIškiŠkI²¹ÖˆÕ´ô²$›°†ÓH³(,j•c±Ø#wùõm-rðîAÑš2/xV»àŠÖžs¼vù.†$’è\Ø"‚5êÖœ¶Æ–î l|m¬&
íùÛO$Ë=Ë¢¢aÊO¨Fm°XBMÃW‰> V,á¤[.rßOŸÒlÚ²D©¬¿˜G#•
Ï kÌ…kB5µkæAÆU–…~v¦
¬ÍÔ£&ºáI†	†û£]%¡Æ¸‰ÝãÃE.‹5JÎ²P\1MLìûoHk2“Ê-“öÈ«Hláú[¦M%?Y+™*¬6T 0Öèë–Ä!™Ë4WY0i¶w6^m0«ÎÈm¤®ÇÙúÔ=ªQ5Åt\7“ùd}¶šˆQïÆÙjŸÍ'Òu‹éÍw6§{7?âþÓ¿N¨ÎøBÈƒìfµpæeòï¯çÅj‚µÙ…ú\²b°†¤‡µITE‡sdmV+}üG’¿H…|Y±÷Àæ/ßÈçï ®9\3XkõŸtÊ%kØ¢2z	,¥õŒ¥!ó·V^ã<%mµ¡oCâIC5˜M¬òÖ\ÈŽ™ˆñÉbEkÛÊÚvlÇwÔ_Ä9ë~HŒY¤ÃÙ1Ez‘×$·ñOZ¹€jÓdDÖ_|q¡wX#×\
¤jÖ*un­Ñ &£OÁj1C_Ï¹J™,Ký 	¿šWcÏùeP	G©kµLŽ´Çßu…˜!ªj´ö5)‘ØŽüþÄ2ØñWç©hë)`"Ì%çúç/œ¼ ³~`P¹Â7ÒÖžú˜ ÏÚPÖÎqg17VÌKQeö„r‹LZkÔË$¦&€¼ÙK”OwMmÆÑ¦R‰©ƒ#k^°wQ°áãV~ƒ§‘ÖNŸ~ç¬¡šŒC4Á™€RGl!›²#é¬Æ/™pÏY¥™44ÑO€›a—¼IŽ9oHƒ5ß„~³	á`mÍÔ6½Ê£#|ãGá‰ŽlöÐû¼1É‡”À½Ñ\Mk¹Ñ¡y]ÃÒ‰ÒØØðŠÕ‹àZbu3Hì EkÂÙùSuâËÖV™Z3ˆó}±½Óá‘ê¾lÖá%2;Â!ïd¼5õ(HkNisÂšÏÙê˜íbó2ÒaÅƒ²çÔ¥«œü9D=›Z-­ÝííX¹¼Ùaö}âv`>#2Zch‰ÔPy0…þZ-à¾Üz®¶üéáåywtuÿÒÒrm­æMúe/"hÌl#	JÓªÐÆGDi›?Ó¶‹_
Ô¯…\Hïáï`-ÐÚ·âšOˆT¯l–¿Jj[u5AVs£§5B6‘¡ÝÚïÈ„d®Æk­ÄvÓŽz	Uío¢ZÕœ]¿Ã4pMåÓïÅ46–©HfŠÎ¥%¥Ô±' ”ï­ó½±—´ƒ)ä’ô/Ú¢9-êm¼û-~q_Y#BŸ5ßÛ±[è´¦A#Kß“j6åD–àEm[ò EO[aížl8ºH€Ä]¤³ƒ‘ÖH-­r“ö¼ñšG@ká= R	k¢5K}THnÜM[l‡”{îé\M¶½-Ê‹Åk,·œ´6¢Ö4H§¬53 ÷£:gç Âê’ ­qŒÁÑZ{X“ùþ®’" TŸàÌlû=¯™Â2­ŒÈ¨~l»{»ÛÛ£Q†öØ YàÚÁ¾»kwÐ½¤SÿóÿÜ†²%ûtÉ±ÞSíÚ€µÝje5MšZšÍÃZ,Í>‘fKýþ"é¤F`+R*—U«·ña1XâŽWBÞ"£ƒ2ô´|ÓQ7'ç.j³Ë¡`­Â–3Æ4@T¥Ì¬8ª°MV÷œ9k©)8ï/Ôóå.Ô/	cåž}©	ê°Y2‡2ùìýÕéR÷þúqªKú)es¦ýÅB±
¢à¦ˆoÿÐÎÑÊLmh˜â:µHÆÂ¶, ÷ÿÙ;ßÞ¶Î3Í/°¯÷È‚dÁ±ð’,²ª$(Ž  ´øÂÍÒV$»Ñ®bZþ#Å±-g©¢€œ6ŠaÚq
$*nÔY72òb:ƒÖUÜ¤£Ó&ÀxÑ)æÍîÎnßØßu?|üˆŽ“/Ý<ç9Ï9¤DY¶Ïáï\÷}ÝÅ‰LD2…ŒI(K(‰ö‡{ˆýX.O{þ8•àYbñ6TYàÚ]à|)èÊš[V™‹+÷î­Mm½yv:ÿÂ‚µÃ^YžÖèúCçŸ©Þéet8“ÅÛ§üÛ(Ü^4ÑŸšv÷Ö³Åê@½‘ÏõìKgë¾Ñ{÷Ë?öÂÚS}¸Ãû9ã~6MEi,nt´°óu¶"üx¨5²Ë-á»Û>£®<8rÅ`Íik¡bÍÎ‘×&w+ 5…SÖ2;5k;±ß`‘åmç­9XãV$7¸Ljsw!íL£=íªÌ»ç^)kœN¿/F³ÈÿlSÑZãÖåË*uÀqRW(Œ.p¾íŠgs\y&ÈÓç’Gú;T6©©KöÜ¦¢è™³¿¬ei£vÆÍÃ›"ÐÆÕj«a<2Ã×ä<Ho#ÛxcaäG!uÆc¬ÉôÃÑÚ§”¬™¿È_ß¼XNÁ°T<¬q±*¥‹é±ä)%•üj­:t[ÙÐJCÇÆÇ÷Œõ¨;‡ã'‡ôõ½%;)U°ó&„°à5ß{UTøŸ‰È ªçþ`<fŠM®Ÿ£ö	”3Ò!ŸC@k³”GÜ
ÐN•¬faý®ªöQ×çmÜ”5aßÏH/­i"dÃnÄ„7÷Ì¼³óuÖRí t4jÜæoÞäÄk¤vv–{0wÁâ9™î™Ï—óyp$5FÒŒ‚<šØ®ryoêØX:5t,µËüDÊeŸÉ¨„¤õiÐ'² k»µ6'™Yø›Öš‹À¬9šs‹‡5¹Ô#{©'5&n{d­O°&V3X³•8CòqMÁsß•ÃH¢wíÚçLâ«õ$É±½in`)V|dòÆ-9¨1v"¬ixDS:‹|º”_==§8^ª1ˆË¶ÃZ3ÿÑŒýYÏ13Ï‘•;f
¹üS¤µš¸Öª®¢5Ïk×˜ÍŒGlPÍ«j×ZŒ }¤ìSÅFZƒ×Î¡¹ aZny`kyhàY=ZUµ/g@VûcÕ¤ª9Rcügj¼kà™Ô4)k¶gÑýtaC>züø.yb5š`íñœÖh³vË}Åve-Ô¬ªVs Fhãò ƒ²f°&÷{)t¾1µ+&„ñš°P½D!¬¡ÕY‡’ »»A5b÷ã/[÷DÓ¶µ)¶ÓÖpƒŠ‹þˆ€lÏ~YAŠÖö˜´v×®›P ¹¿ÛÜû‰IXó¼ MY}û}sƒäâ£P³f_îF’øèõ4Qs–í´f}±ÛÛ›[¦WÅ¢1ôì'á¦}ZSîè¨Eénš+…žÓD|µ‹O—`mØšaonê>Íë/¢¬Q°¦0ƒ!w³†g.ñŠÍ-²E|Še“U¬ÄùE:›ÂN/‰Ám°ÆD:~&j§MM~Ñ€/êÓ2Ìb®û¿|DÈ}4µ>¬Ánm®­~
-r<ÙQÖ¥“¨µWó!’‹íÊhãy-&×þÒDid¤ˆçbÍ…%Öðd«Q;¶Q«!yM –%1”"¹¿–'3•ÎÞžŽsb¯Ä³I®	4máÙtyduDêõ5Ô´L¢žÃsdb¢²·£Bùv>›!bm™½{•)Ç#Ó²TÚ¸]ŸZŒUjú*UœseŽãè?ÕO@5!é+C¾Jööerºr/ ˜C™+dÒK³t¸5Ú{ç“¿¹uÿüÕ÷~tÕåAò—ŠÈTRá‰í°vîý©„ªçøîx4+”Š4L€â ÙŽ½lv÷..Lº¢§ †Ó²ŽÌD·ÖÕÆ
#?áñá{Ï¶ÓDk.Ì–8D +ÆAVûúà%Øœ)dÐììê7|%Ö¾C"¤ªÖ‚²æÎ‘¸AreYwÑ®Û,àÚNÍÚNìÄ7µdm%Ü)’Ú±sTÄR"µ‚gÈk:£±ê€ó"™ºÜè¸Myšc5qš±/ßº|«a†ýít¤¡xM¦VÑx´€Sÿ¥h®¦&k×gQ×fp}4|Ðpóló¼š\ÎR¿&VûílNI×gnž½þï×k³ÛÄÒLm1^Ü¸M‹5’!­¼œÁB~úŽÖ,Rî"8ü®Œ{ÈD<Õ–©ô÷³ÐÚ·sxr¥{ÆóÅ¡Ô1L³TÅ•ÇÇ¸Rzd¨ØƒQdtxóÈdä-õYcµ€ÄjRÖˆ7ƒOPÀ†<f°v’Â	áÌà¬I6Hubÿ‰ƒ`¨¥‘#ÖhíÖí*×L/ëÖlG¯‘°&2ã;šIF3õMtÌ	r°Ú!Òš˜í œvóænžÖnª+öM<[@¸¥d?Ò]xò•¶^›$JxÔÓj.¦”+e9AŠÀ†Rúìå"±	…k<oðäöZ…5†àÊß/­…+¡•÷ñfM6GŒÜ\4'¸²m]"ø`&XãR×ükØ¬}XûÑf×šÑÍVDyOêq$ƒ>´™7¸Õ®ÉrD±ØpqK“ZáOUAŽMæU÷ˆd™Tcñüg²ÁX„…U¬æ`áa®ÆBØFššÚ±iû/­µªkÁg¤Õò¸ÆâË×‚Äö¥àØ6­ä±Ú}Vš-!	ÒHÍÑš=«±—uâB~qßóá«-ÚWL5©0”ªµúõ·Êj„÷ù¹þñïI‚´*5Ì OˆÎp…„ÓØ«™Oä	\"»qd&Vó°f^#U:ä¼EÕ‚²æ›¬…–Ø¾Ïš=ªyZÖdPb)Ï˜¶Âš7×?äÑoë¯f6ûÕ;èj¾h-à™Ÿ\óy‡B‚¥5#0·o=çôÎRþ˜,$Š>¯vàÝ¨zù¤ý&ƒ²f·=¯©ZmÔ+k!Ò±šY÷û8Ð¶þ¼E¾ÖìŒ!ÿ¡¨ÝÈéÜšùfØò÷ C¹:ÓóÖPÙ²ÑXFÅx°*X”ëP„±½W67É„|´yä‘T`”5µÄ÷°Æ%À‚‹‚µ-š+¤Y©ˆÖ¬±•%ìîAáÚ>’!•ýÄ`Ä6Öà‘pFþö„!\4®ìGŽó5X+kE%A±J‘â5×§±´qºd%W27„ÌÆ>ø*¿þ˜ˆ-¡›DÖ,f
•
$“ÅÝ¬kÕDŸ‘7#¢ M¤4;[Äe?‹éHid	+RûMÛµrº–-T’ÀZ9pžræùþ¶dqL8W†6$Cƒ^^ÊqŸòXRmtHZäW wGÒÀZ.¯ÔFÒë™œÁ¾TY8l:‹§²j0Q)æÖT.«,Ü¾¼PÊÔu™é×ã»âé~Jª2ò_ûä¿ýøGož¿úÉ{W?½Š´&á>À.ÿ£M‘zïGú¦`5ì á>|CÚã¤jòÓ*	²Nòc’9qýâmr1ª*Òã'«è÷ÙõÎj®qç˜öŒ!}ÑÚÓÒšˆÂÍMXC¥s»Ïî®!ƒ›H+©Ÿ1†þj!ú½>üÀjÖôP0ÒÚy³îo7aä_Î(ëÍ’µXÛ‰ø&ÂZd;¬E»ØpEl*lÆfêp3ñ²š
Úº¾ÝºÜK•1h¡…0VÖ._¾u›˜ Ö¢”s§0K†û@BæKTPgkT ­
×ÜC$ª±HûQ5¥EÒ<G¸qX•iä¿c9{}bõæÌÆÄÙÙ©F¶q{êU«V»®1ÁhDWê ¬ÁjÀ=±ÿé^,wìÍNX~þ©R­R¥. O¥ºÇÆÒ9®‰=j7†º†O$nöó eEŽ÷§ã™Èð&-•ß²6kÖ”nùšµ]>/X;¿ÒÿlEU šXíŒ%+Š²Nœâø˜ai‡/$>#â0v”9IÚäÁ£cÇÆ[*AÃÂQÙìhDo³¹‘O»”GâÜ©‘ñqìúYey”ÌEhG iö#¯ÁeÂ5~·‚5þ˜€›•3$mwÒ#åJ²GÒšˆD\FT’ÔÆ—÷:$ëÜ¿é°÷á(£Ç3ŸÉq‡R¡ ?x­5C»Ž¿¼¼Ö¾Ë#ÇTÜy’õ(ÎïµÒ·Ã¯­íS"Ô#3€ÓJ±ÿè8*C8tµóØ‹¼rþþíÞUÖ`1 [õžÕbQ\t<¬áØÿ„ÖJ%º¨ËÃ­Œ¾š„m‰üiýÖ¬¥{¶*X«Q§fòÎ"‚µ•5™+V3;6ìBq*W»Øôó×Òvxi|€Í"ˆkÏR×Zy-(lÚ€3–ÜÃé&D«	¤×B½šNWÓ(\Úš…‰kÒ×à5ó†Ôjˆæf:hÙÁ«¿Õ¼¬ö_ÕB#l 5 ÚÇüs–ÿóog^þ6@F@vB9~2î—ÀÆÐ„µS§pô—°‰lò]ÁšJ×(E‡o¿ÓÕX}Slc5oš°æL¼d0„´‡WÖ5›ª1ØH°°ÝŽkØŠ`«¯.ÐÇ^V³¡Õ—ÑMÞ~VÙÚQ™­¤a-æý6ÞÝcÚšä;+YCËsí»‰eÍròë~ïieímï‰"ê[c^óÒZÖÌ^äáúzGÿwÛL[3:Shª··K>–XggL½2¬R¨YF4ñDWceWÿÔhï †ª[êS$|å:}‚lŽ¤×®lFðº4‘¶ö:´¦sr³¦‡µKJƒ$h³¸¥÷k^½öé»i+pƒØšíEÈˆÖ­Éž?X1(ØŽUË$¿UŠ1k¹V4§;ùI[+ãNX#gI»ê_q,IÊT­±ÂtF€\€mv$ŠŒŒå¦-’(TÊÙt6$‡Ç\VÞìUQ˜f©<Û@ÁšÒfkô )qFªiŠƒDV”{q^­ÖòÉ`Zå%b~~„4ÍzÆÓÙ\‘Š€êÞ%ÓÙäˆÒÿqG^¬fÉ±cÅ'?„·ª•˜î0,¡ÂœjäI¦išÍ×VŠ¦­U«$ÙDSE’aÊ±Lõ{ß«Ó$Mà]Ïbk²Ì6…aã}bóŽÁ`í]þÚšJ×ððèû7€5ék'S'O&(šàoL˜ÍA‡YÁUi·x3#1ôç.r7¯¾`"_µkw­­%2Ër™;d@jŠ¯’Öˆˆc46–Nxª5ö}}L>KQÎýaæiP×Û®WRÖô`/ø‹l=É‚DG^'#Dç‘Œ«”ÝµØ‰o¤¤Wè#²rè²M—	kÍÔQÛ Ñ›5^ë5uB­±9_6h±Ô
kìyV«W9ÙNTdÜ´POŠÕÁ*¥Ó•è¾˜®+”ªIXSz£®%K33Â·™_žYÅöT›A}#-Û‘³3³ ^mõlm:{}ã\uêóÏo_ùÎo>¿âd5µ©FSi–¬ÁjõÉ?ù]>MmEŽL’X¼:‘ÜÓ‘ÎWbºðÅ­$#åj~	Œ9Øß¯Œ‘‘ ø‘O‡ì:úûcoŽ%&­¹ÆxZ¨*êþýw?}áê§ç/€\/“Õˆž&«q€Œ–*bCJ;£Ò4u†’yÈ™— 82"ÃÈî:È«¬öX7Õà™lY™tUk¬§Ý`5W¸&ÄSäèø©q]Ï8Á¦‡qœB’c Fz„ß+˜?€vH—¸J66òÃ\š§åi©4×lU°É¡³Í
Õ°lÂZª¼×ÁûëÞØ^ƒ5[›ÝØ˜yM-d8ºÐL8¦I(KsEiþn¶{Æíšûî´¡‰[˜£­±n^’‡7ŸØLYã/™×¿ÂÉvì•WÀµkºÔéO fE7¨¶Ol®\-:8`Í`TÑV.å¾ÍG.üûÙ<¿ËþãÇ?cüL¡©ÛÚ¿ÌI?›;~ú¸`ms…ŒG-2Y¬ìi›[ìê°'6ªÖ„j´{
×BéÚ	-²Íj¤•×‚—(aÌ¢ET“¬vÍéjÄµíªZ3¿™´h¯5Vs+,ØÄµQ!#ŸñG½¤Öšÿ ÕZ«Õ¼ªö{‘á†¿Ç Ò`8eõX®l`c`åfÇøÈýŸÚÊLôY	ì4æÔqÍ¡MÎ`…fªX›<äa­ÕÒà=Í+k,¾ÍÚ6eí3¤5áÏà‡™mCÝw'¤÷‚ÔÏ…âµŸ$E
ùù4H¯ªy¯¯×üë…h…5¿µbµ—-Ý’‰™¢ü0í^Z8·¶ñ¡ÈÞëj€ö(Íú;\Óë×ÔÖÛ4t®Sµv`rr—O†t¸ÍÄwÁš\5b I‚ŒšË‡kŸ‘ðºš­ÌSÚÔ@¯™L$hŒ8¨iT®YéAv±}÷ƒK×¨X³DÈ×¿eÙŽÕ^×)ktÅÖhŠ¬ðE\.?{	opäÏR€ŠÍB­û	"‹úþ!äC6O@$Cj«jÕyqÄIk0=ÖJœ8Lb‹‹»rYs¦å—'É„¡‘¶–Q½_j(š!ß¯-U)€d®äV­F3mÙ,¨†–¥®lc_Ÿ§·Z^“¢Ö3»¡†¡’ÌòXuAhÒ“óóâ¶dÉ®««r áæŸJ–	.•J)Še†&êÕ‰E¾¶0M··e‡†:ÒÔ¡ÕjT¿Ñ$GVyõ­¶!#ý\Q°FŽ©Žâ¥¿N¾“xfWîûu5FC»Íkè¹FÖ"rûÚýûØ‹Ð÷VsEkæÏxåÊÃ7nÜøÓ`môÆs£r¡†Ä.ßÒç:¿MÃ³U½W®P‡ÕxÇ*Ÿ,h¸ªU¥1¢,òcQ?7ÝÕµ²R¯T—ëÓ˜AþZ³ÊµVe­UZ§Eñ6¡ 1êÛª1~­E<”}íÁ.— ©‰{ÖX#ÞºŸ
ë¦d‹¿È5ó1f°¡‚µem'vâj¹ìÎ!Šfûa70³ŠµÝ&µ)¯|€×YCQ=ÁÉô{õÆvm#HÂ±Ú”ÁZ¶¯7¬qK¥Èùv‚4Y0­@Š5™JÖhÿBôh3£#¿ýåjr•,ÈßÞ¼>»¡Ë‘z­å¯_—!I±´ÀIúÜ¹WoÜj4"o!®™Ëød%k>w‘7¹™÷×O.ö $ñl2o~‚ŽŽt{ã!.åÒ¿kkB.Ù/ÅDî÷cKºÙ£TBÚ•ÑRº˜¡b­«ý¡šZùæ­¬¹Fk.òÝ Ô©S’ÐÀ´£ré?£œGVØK›—N‘yZköÇV ™é)9’˜8öœ%7š*çÍú™Ât§ÆÆý¡ò8[Æ•ÿh°ÆŒ-ß§‹¨3="-MžýªÆ³®kKÒØØ!åLSÙÚÐPº,:3X£m¸jOÈZR‡5ÁKç±´IkÌ‰ kŒ,.<«¹þØŽÈ¼Û>+asÍèÌa˜Ã5†`©Õ»úkÇMÛƒ{?¼§ÐAâ\ß¾ö®—œ÷ë´ÃV¼FÙšT¡wç_y@ä·]'{×Ö`²¨`M4¢ÅÄjí¬»¾xˆÑ¸Q­tÐ¡~g=ùüñã«óÈkŸåO#¨Í]Ì/	ÛÄ]øøçOß­^¤ í¢y÷{£~™BºÌÈ•wV.^Xã(¼f1·ò	˜§éañÌÒ5pÍÛ3õµû ›ÙžŽûj¼â×z‹±šÉj`™-ŽÕÜÀe‡£5VÂ›U¯¹¤H[F›µ ©QíiTSˆÕZªýü]´ž„.×ÑPØO2 ÑÓºQ®	!À8='V3ËGèXc ž´XcÀQá•5ï)\ó]Ö®iq¼¦C,Á`DâÖÓªðy~Òy{¸}˜Eº]U¬±Á_D­Öh±ÆE¯¬±<­¬yaÁ‡žý'­Q0¢•YùAh€-´}Üùø±¤5Ý2Aágõ]±©ÞSÍZxSï.¢‡5öF[…5ÁšWÖ¬˜\;ÐdÐ%ÿ@›|F¬×¼ ¤ÕqŠˆ™a?ÂÚ`¦]—f–ñ¨p¼¾¹<È)#7%BBU:8 D©L-Ñî
É¨6¥lzßZ×Öpßþ©ŠÍšÙôXcÀùéð‹®œøh×È„KÌúQßq b)­©Ùƒl]D"ÁdDa{Q¡›6‘CÀšáÛÐPœFbWŒ™ÎÆlŠ8fùÈP¥2Òú›ig»â9u_›VV¡Îµq¤42Ð‡2ÍtÈú¢³™ÁÌ`­ªÖÙ¤@f*ù%á—³ÛÏ“³¿€Ÿ²:•êÏQ®®ÓƒñüÌÌj9Œ•!Ri*ÆmÖ‘ã_Nô{Éxœ¨æŠ#’Üà°\†Õ€ÙV.æêÓäaê»é&ÐÞ’òÃ¤ZÏÄãYüš³DU©ŠÄ`ÍUÉâ&1ýJZ«ç0ŒDŠ›"¶Èe]y“6kÖÎÃjÀšØ‰‹÷Úï|þ§?½òäûPÐÖ»Ø{²÷Ö­ÅÅºÊúô&êÀÝhT-êu®qH}|¬¯ÃƒƒzÁOuçÎÍºÿðÚWåAF´(€µ}Ñh°ÿØFi­¬æçÙŠ°G»üžcµp¡3ëþGMZ¬¹%ÀšÕ¬YXÿÒ¨„µu3ƒt÷¢v`m'vâÿÑÃš}¢N0´«nM"ÔQ¢©V€#L`5WÍ«±%·á2½V€5-°Ú÷Xí¶M:“Og
U‹l,åEÐ]-/VË×HÝ ¯QÊÚêÌÙØ-¿DõT€ŽU÷ßüíÙëd¤×–æu,™'Ir•a×s—I¼ÑØ¸5|E¤¦`ÜkŸ²4ãþ9Ú`§)W«ä
¹Ù<fV¯cv…ÛUE¬6ãâÄÕ´ÄÉ¯¦‘Ï=qp¾üèEk‡7þ›+z#ê#<¬!¬YWlóüè4
šöÜ¨‰¨kNý/ ßpÑ3š¾ôÏZÇ5‚DH2•XšŠÓÄ5_jfÇ›¬v”¶Ú6ýÁü¸Þ…­åÍ M52iR8Ócý"3(t„ªo’^kª<ÒÉô—~¹Ó·­§Ž©T¡Ì'/±Ú.Â[º¥Ò)ö™xs·]–N/ß€ E9zâ™øèl÷ÝÚ.­×<GjúŠæ1÷Ht:ê¾Ä“›`Í‰j}£Úž{›4C¸Ã¤BZáo¾ƒÇÀÆ¿ë³4™H³õ`+²ö`‹|kŽ kxAªø? Z`Qå1ét‘| 2aòóæž9w¼á†ÄÔvúóÿ2·¼‘Õ¤²-2n“²vÑÛ‰PÃæYÍõXÓqfzáÊ;ÿê’ Ý#èkÖ¼º²![õ5€ÍKl`˜~”˜f¤æC¯t¤Æâ;aRcµÑ!=®=&þ&°m(eî\à´ ©—ZKÕªyYð¤¦øÂmþî"1’†]Ù[Bdæimÿcv]€s2if@>V«5ö¨Z3—C:*z’¬¦ÂµVeÍ[÷kl:A²e²µíM±Õ©Lô%Ï'hµJk:òÖÈËdgý!SìaµnŸÅj­-ÖB@jÛ•µàÚÿt¨8¯[@h|ÝžÔötSÈANþÌ:bë÷ ¸yX³ŒY²š¬ YL]óaÚ›71eí€Øï!,Zõvtzûþ¶Ö&k„Ë”î$¬pÿU…7ö	F
e(Ölá¸YŒô1ðB£5ðÉZdèëëÚ=¹Öµ{_û>î0¼FGFØ•@÷ÓÌÌ_nç¶¶Ž¼øâÚ¾s ¾˜Š5¶dõ›¥ˆÎ<úî!áz`ÐÆ°	kœ€‚²­)|‘i¨Xlâ\ÚâÎsŒFšö"Ö;•jª`‰X.%Ó±3K”2>`-'ßÚ­¥À¼L&Î/*æÚ®Å‘ÖÙ„Ê.€'4ÆS?SÁ
…«FšŠQÚBcA©ì×©( ®vµT¡N=Ë¥u6©^Ù¸e¥(Í®ä%­)8û‘õžëè@ZËQiG
<°–Äi¤m°w:W*§*V"V(Ð©¢Äm?ú_nÉžüÙ²(n•2Ï«F-j­²C™é"
]©l÷fÐ»ê‹â¶)öw>Õ>¬ýH´Æ6¡õç Ú0¦"(kç¤°Ý8Ò[¬!«±4
í¤=$
V¼Ö \¯Zà¡÷4‰ ¹‰Y%rÐÙ
¤G&úzëÔ¸;+½÷`µŸ|X¸÷câÙ°æ#¢5êk¨C|=¬=+õ1„g3G~M^ïÀäœn„)Ì]$(k—,8‘¯éß˜+Y“ª«± ª!­XþOÿa'vb'¾iÎýÁ ˆìGö,›lúˆ÷‚${¤OÁG]ß,!²÷òe‘Ù÷[£Éj·Þxcªa¿nº)uÖ1Øøçjº×WªÑèZ½.ë¨‰K³æã¿1«¼ÇÕù¿üe‰Wœ•oÿÌêÒÍ¥¼øí¦T·™ùÕüÒÙ|fñÆ•W_û|êÏ_ý›+Tª6ãû¨î•5Çi?ü(ÕO‘d{¢d)=BR>È˜,NÔ0.®èõÉGòª¶³ù2žþIÕ¯A>\áòéñþøð‹‡7‡¯èMà#Év¼“Ö^´öŸõçÁ(º_Ÿ:Ÿ!™dÔ£ÑüÚñ–9÷ƒoÖnQüª…8ˆx¦öi¼¹ŠÞ¬Jíþ&§õ«1° elB6¾^_BÖdö­uwt¦:öŽ(‹3ÙCê#ÆÍiTCý¡FÊKÔ¢áVûóÉ±žyâæ?O >º[ÀŸ±[ØfW9¥­si#¬ö™Ug®ÈbVD¨Òç€ÈÚ¥ãrá Í=å#d÷Û-ƒ–”$Ox¡!6îpÌ@›k¸»Î¸®/6=¿aîî­ovµ'F³Ñ­­}‰­-ó7HDÛ5’Ù4î×&ÄP€5ú€j¸Ì”“ÖD¼4WB]#”c‡ÅQV&—/BjµãŸ_6ç¬±¦1,ËH[^ÙZ^^£ÉÚÚ
áhmeóÃ?ŠÕÂã+ÔµVyí+‰ ÃÑ™Fo~
¥éá- ù:qš‰j,B6ÚºTÈfÃ5­Ûãœ÷hGÔˆmš¤ÖŠjŽÕœ¥ˆ‘šV¿ÿ·3ˆg/Ÿ‚Ò 36“Ñ„jMV{éÔþ—íÿ…Îüí~5Åþöc•¬ÉRÆ"N]»°ü3z¢YÈ„°¹AzZcõ¨Æ ´æ•5Ol÷ÄIôpPæKÖ­q$}~LIv4 ¸½üòþnçy·Õ’¸ÿ%N{ûi`CYƒÔ|ø·a„x×FH|¤BŽèÆ^„LŽ¨Ê\3[Ñš¯Yó-±í¡A¬6JƒvZMF`5¥A:o`í€Üû÷Ò’ £œì‡µN6î<Ò¬]‹Z{5­LÛZX#Ø2ŽÂVÀ+°6:Š‘Ôoµ³àäÀå	R›œÜÝ~äÂšÂšÆÃtVÑ?@—¹µ™œŒ­7ÕÉ†ÿ÷Ðšfø?ÚMÈÄ“SMD‘ CZ3ÛÇ.ÞÂ?ÊA¶6ÆÙ Å)RËVb1kƒ]A\+–žø!£qÉQâc…(¢YzƒLP7Åj¹!%Ffbànl:Cä
±\•4¿R 	ð$ƒÍb®š™.”V—k¥ÜíY¬ibSáŽ"×ÔÙ¥<i ÅÌ"ŽúdCæÇGòÊ(Å‡JY²Iz8ùk¥¬`¼Ö2C{ãtô#¬‘FÐ«OÃoé1¡¬ÎxPŸ€R
1“¸˜×?ViÐ…§ÈwNã•›«fµd[Ø˜hkï­W…vÙEþ­L¢1åßþªlM]±¬q‡íUkGN>½/VûüÒ_*VÀâ1Ù€ª|­©H‚_V6«¢µE¦·ú²8KCj<¯žÜuL!õÈÚ½ú‹åê½Ö¾Øàa µ‘H4ãEµhô©öØO5]›gG¤5Ò½Þ6þ¬d­¥fMK0ƒÖÎ?°pÎ	²·eTµu8MÀ¶k;±ß@çþ•¦ðánühî])Ó‘ž†˜fsÕc÷F4Àl,‹¤;zZ3UÍëj—a5¼¼ê	zOW­¹Z…mZ4„>èJÛp9ðÕ\uaf†³nmVÛÌÙ¥üü_n¢ Ñ!Û¬ûoÒ;¹„yáêÍ›³\¡À½ÂÉá©êÔû¯Œö“×˜>yVû«‹«?½ðÑG¥‘$XÜ}¸Œï¡~º?_JŽ”)ÖRÒÿRm:1Åx+Õ9ÖoW6ÌFÔ¯ãø¡Í7|ðÁ[vjå­µ½FÈ¸Ÿ<Èó/|zõŽ_xû¸J ¥¢´çœ{ˆ±D' ^·a)OD5FmœüÖ£ŒFM~pð '¯‘§Æ]î£sñ—ñˆ0Í´7½Ó<ŽýÈqRÖÁÜ<p–âsÓ1þÜZ•_?¾Îl•‡*úµË¼±”D?ÖÆRmÎ-À¬¶e+âúakælßÄj®m[24¬K6+;" p·¦µ°eáipm^C*RËÕÐKi6²«™{‘}+»ûÖ®½{Iõjòñ6Z3VÓßÌŽ´Æs¯à÷@~p][[àb{Â¥a‘n5`½°í6·X3ûÊdJ•Š©Hè4Ko:êÿøí©rî”ÏÍ‘÷˜LG/,¯­É6„r5F«Pcdæa#<E'laKWÛÚ$Ö8.¬[ÛÜügÓ•¾øyàµ§Ôµ ¯ñÀæy- ›-„Q™§³°\¤Æ¦‰jÏÂˆÅˆw	¸†Àö•Á“!‡šÚUGj_­ª}a?kú÷§¡2U©±(_Xn=šµÆ¾‘û±QÔvFrõæ°ÐC2j˜iXÝÚœÁÚ$²–¬5@4Çk“$:eÍÒ 	/­51Í"5'¬ÙbÃ'ï8.ófb‡fžÞÞjdÝW“Ù±‡°vÖZ¬ C<SZs/ù¿[îí,ùÒWjn<ôÐ1oc†@¬D6¤¶ Ç1ò;hIƒÊ®aó†ŠåüEô‘š)k¾ÀzÛú¡‡Ö:…i~lJkî¬±i	Î¼¬æÌ [üû,V³ùTß”v–*9z®w71€üÆmÂAËþè‹¨~-BÅšÓÕÂYÙ}ìÅrÈåAJ¢˜Ü<×Ç·bÖå<Eì£”H™ú_Ëÿpø}7¾M¶[›ŽØî\³+N¶£åŒ“
9´­äU†²C°\[Œ|P‹XÆøW+å
°–‰Ô?MEjúUk®ÉÚÄAv_Œ\IhA	JÁ„”Çt‘Š5éj5ÊÖ&úóªCŸ•²9”0šTçó*?.—¹Ä•âmåÚD%y”:g;ÙáÂ;BÒöIª–S/›‘<®")ÎzÙL<Íù<“‹ÁØ•T·x&­7ÐÓ’©ø´ä¾4Yóz]¶R]ÏHŽ¢ºÁ)®ö4eC{C\\¤¼Œ¿C³ILýúþ›W¡5â½÷^p´öè;„£5pmaM2Û}Sb5€M5jÓx@ÖU¡V×¿Òtø!sU©{ÓúyxS>b44|í%ñ’dI\-){»³Â=âå¯ÎƒÜ˜¨EN:5LÝÉ¿Òa$ñTä¤6ZÝÐÅêKÔØg×ÓZdÂIÝEk²ïgœûÏXS˜¶†™eA:/Èem'vâ›è/r¨+øíyV#Øg$Ôž´—QÛ“S•q\?ÈÅÆSâÚV{ƒ”„zd ·åt7,ƒåî—Z‰»x5îBmV$M½ðìÌ,Q“ù#©‘ù³Äè¶´:3óÿýETÇ±|uææ*—¨R¶1|r¸·ºX?§ôGn8@r*´}Ýi]†kÿ[¬öétù?y;Y®Í.Íô'¹Lq)VÔÆ†Xë·Âì¥5ÓV>fIãcccýäó'£|.6q¹bE¾O€©7—”jwZ;ÿ»þÓû>wâè·¾­A`°Ô	R)µ9qJÝ±kpÛÑƒ4Ê–Æf®_:ø-êÕ´Ej3]M¸{©jë~õd3XSËìInÍ½™F’8	¼Íë«½‚¦:?øÃü1ô1Á–)=gÙéjÕøÉ	Rn*ý©ÎñyBÅkT?Ð{¨m½3¥OZ•xl×úÖŠT›ê×,ÚÖÛ¡2çÜ/ÓÎ«'«y,óÞÞp_OûÃ»üJÃ0›´\eš(¼o¤^Xc Ž\Š¬)¯=:2‰½Á•OÃ‹ÕÜˆW®Q®ýàÁVïÚæÖ$bZBw÷¾ãZ‚ƒ­¬ÖLbªÈZD™tvhKAi=$”R¼²6‹Í/Ÿ*Ç«&k¸ø“vG(²i×ÏÆfèªYÛ;››ï¬-ë8;ÀÚ½©y^ûâYêZ×Dk×ž&6ÏlP›!¹Å†i<Í`º«¹mØeq/pÔ&¸Û¢³0]¨º FÔŒÔ<ªùÎjÄHj<¤®ý¹§ 1‹—,t«ÃüEk'n8õÀs'€µ‘ÓÇ>¿ÿoÕXÌ$Ï»ûé»v˜FæüéÏ «W3GsÞ?ðŽWÖ¼¤+Z»¦ÕÂ9Œ„Š5·È`Dßìyo›ÏâÈÏ	æžÖüSÚvªIõó»÷ïÙs·¥f­…Óžé)Rc½ã¾Ûd‹qÿö¸‹¢fÎýÝÆYÕ	›HŽûyÿÙ´òÛø’u¿¯Y{eí}vFíH0ï‡Ô|Íß‡Ab}¯Â`­S˜öt4am=£}‹š6˜ôðÖ´îg2Tc4mÝÑQêÍzhDe!ýC÷û† bl‚d¯³ÖYÙŒŸ\¨`UÖýÁæ¤N1½öü]3ó“”Æ¶o Ò5 Ÿä‰„aï®@FdX{âfCV#ý‘Áy@k»b<v‡Š€ŽyÉºêÒ÷™U(Ó±»~Òñˆœ¦L `#ÛÑùBBGk%ø(›¥â;—Ë˜_?W&¤«¬:¬md‡²‚5óLfRãòˆÃˆì÷g7ªÅÕYÙB’éKà<F
±IÜiÌƒI[!#~‡ÿ¥ƒã##ùžä5d¶JºTÖ’Ùø±J<Í-?(’ëŒW K¢£æ.^.D³\¤³ ®­3­&m4Øæ3šdSèFWµd‰j2–:”¦œVŠ×Q½F·ÖîsP"äU®–Î¼_‚(6aW†¹zPÜ09wäÈTïb}Úº]‡ÕøîÆåÅDWï""^!—…Ö¬¡¨Õ!9¶$E6ê*é Öi}îøÕ‡õÛÁÚ{_†µVZkí´–É|¬ÙÐŒÀi_™©åk(…ó°”5IÂ-þ"jŠ­iN]ãžJÖ®Ak;°¶;ñM4ƒô¦{¡¥H`5+Ucc:¯m¾LûSÔ /.n‡5fžÕk˜×K*CÎÒó¹åj…‰	ŠÐ¸	¨¢kY[ÍV5âº\Ïþ…®×µYR¯³ÇyíæõÜÜÒÙë·7¸•ˆ1H}êÊÉ#¹2µxîÕWßú`ô†Uq_Õ¥A¢¬	Ö¤¬}*V[I•—?z;]œE­“\6’î(S=]Ò%)¦¬vžÄ‰Ûœ¹9oê]†%“,à§¼©=z¬±4S!ÝÙ•wBÚq°vù³ƒ¦ª™y¿y@Ê±ßòOX£5Áš8K4Çal@N!ð´¦WË˜Á`ºª—˜4çD4§¬ñsin°ÆŒí©þ1hÎ!žŽ™ÚutãO62Öc¶"úc/aßäÆñ$Âá1R–Î[)–ÉF¤íà3Âç«J‰Ëûz[ŠZ
5[sœÖ¦AXæúÅemB7ï/H¹™Ï+ÚíùÌóš¯ÿ°PÆÆ<”
ìÒ¡ŽÆ"‘ÈÖÚƒ×.m9lÒ´f¨FáºÁÂÚ+¯\z÷Ú€«­µÞ„å`yH…ìfÂ}Ðªà‡Yâ7ïRþR™7úç¬•æªæ¨¾?žªTæŽ_8tábmÎº_[¹Ú2[69È!HÎ¡ÜEÁÚæ2{Šå­W6ïüê5ÿ±±ðxšÖÄkØ±lÙ´}MDÑª¬ùÕ?ÜB•…KŒ$œæ¦¡ç-xóVPªR¶"¾±ÚMíÏþXcýø¿_8!X3ÿG›¸Æ!jS>¤T5™¼ôÒÑ‘Ó§w+ùÏÁÚé¹îo?¾+È‡–a´O€,<¬1˜ÁÈy[ƒ²9eÍãšSÖž²îu€5Â¾m@3ÂíøÐ½Ã¿ä>õÇÞß½§ãîvß~‚QÜÔ,cdúŒDÈ;þm‚¸P²Æ·¨ÎØŽ×Ø*R‡@6¯ñl1M±yÃTCY“Ä&ó˜`éF¼²và€}7_o¬)\sµ2ŽíT¸~ù™ä´P§–À2Ðšt5ª›x‰`é9nZ¯µQ÷jöËžšµÉ}íƒ}Ãä:¬m¾È¿>kØåÊ–Ä†®nÙ‘œ˜7·€5ÂôôÝ^FÑ˜²õq»Éf`vÌ~—Y#™åHW&XÍ›÷Çâr\´|ï˜ë­æNoDÓ²ŒÐ³UäYÆ RaÆºÜ"Ÿ×Æ2f™ƒQM,¢1TçµÜ„"•ÄukÐ-+µívƒ*·*) IYy6n¶á³Q^¹½©P¤dª#=Ò=¦<ø!å¢vŒaLÆû—…RÑl2ôŒíÁ38JcîH5ùD¥m||Dg*ºÉ,ˆ«¨-“iK<«qa±+¥ž ‹Ä7Qà¬² 5~î"ÓbqAQçoË`ív®Ðûëû÷·Þ´þŠWÏk(kß½ôÈe¯ÞxkøUk¢4£5&œì#rJ[ìí3H|Jz÷ñÝê°ÚD–>R!ˆjb6QëíÞúÂl"6€»oêÃ÷>¼³|çÃ÷žk­ÒÚ>–ˆ&v¡ñy!¼Zƒƒ_— ’ ƒ­ˆWÙ4°l=z¢¬5{b‹Û‚mî5r¶††+X;@,3î¤AîÄN|cÙ¥{øÖV6²zXcÆ 5‚Íˆžé°—@nÀZ/Ú‰.„jÕhr9Ê­Dod± ¬t†OtÅjÑÜD’kY÷Ü—‹Wfg®Oä8ãsKmm†¬GyCNð¬Ò"Y–f§ëÅ<³Y®K¼´º¸øÆQÓÅÆ¹W®¨¿‹‰]-9Vûî»èj‚µ7ï¼]M–HZ+R"—ï—Òtp¬#*ê-(_£Íê†ŠÕjxE¶¥þ?{ç÷×}þù¿[üÜFhluÈŒ&SDd2?…ÂXãÉ`DU„ÍØq<Æ‰ílC
{±¤©n€:Y9TDÈ
Ö&oWªÚM\6M*bm›JÛï®¸h¿WÛfÕ›Jûz?ŸùøÃIœ®ö:<sÎç|Î™a†äœy÷ó¼Ÿd’$H’õµ]mDÉ…¥µ]XmãÙ'Ÿäcåi¹6,Fk Ú;WVÏË)X£¶ÜBPÍ¦ŽÒJGO¬™©ˆO’„×ŽOEtÃGÄvNõÇ„]RØDkLOã°`ÍŒh‡	¡}øÎÕ´Iscé23íä@fÇ*ÃÜ]ŽuóO3ÜMJéRfŒl¥
Wi5£‹§IíëëK7påjHS
Sr E[³ðX­¦}mCl¦«‚‰w|hËoO±£04Shôum!×‘U‡}´ôó5#lÚ6:[¯n>¼}çÓíçž«ðúU¶â-±Üxá*W¶oìì(RŠ«ÉjMVi§“º¨Ç`–®È$J;”-Vš*¸AVÌ”NãR#ñëOóE¨\«I {éÚ‹µk 2P Ð«iO°¦Ðë˜ÞúPÂ
›zbßÛØÖîýÒRÀM†ÀæyMÀˆ-¨lÙþÿØ-@š5|ãAø-C4<£E9-€šÕ]«f¤ö·»g)Ãæ©®jàš¤4³ëgÂs/ŒŒL)Kr*“9þüº¡4Ht¶û·¯ÝW—5«'@“(ÍGÄ`„á¦PmÍµHäGŸÝ=Awm/cÙ»úÁ‡Ç5ƒ´ Ýßƒ™67÷Ú‰#÷CÁZÖŸYk<M¤yaMÊšÏ¸Ô6êÛÿ„?hèFÖÄj{÷@±÷¿ŽƒG`å#=®­YÑÖö{÷ó0óþF¤‡5…‡5h-ª¬Ù)Cá¦‡bûu5€LîýAWÓÀáI›;VSèHŒÚ5yí‹óú­Wu[ï¾!(çj‰íú«Y¯MÂhÍ v¸tY5vï†.`¦¯uzV¬Ä9ÝÞeH¢¶uúÎk<Ñš'-uR¨’×ZubÓ¢p[ƒ4³Ä®©$eÍ÷¥$	`$3,ÃY$™ƒÑà3¡ZŽE+Qy$NÅ¸Ãi‰¹…Xmäá ‰Lòì*”Šƒ}?‚.ëÜÇDÇ*¬[×n„kÝ#Jà¦øz¤r¬`œ!ç‚ÌÿÁ±lq‰¤nÎo*]kO—ÇÆÈ]Ä]«”8„ÍÔ ŠY!Ï~ZéÞäÁà˜"Ë‘ñ¹ü:!Ê™¿Ö@:=NAƒ8m‹8‡ëtÀÚJ¾2¾5^^yë=ƒµTj1y¨gh÷æW~òÙ7-òsKƒ¼
¬ÀÚ+pŒvÊ`íK&Ïr38%É,_ òX“HÍ£­!1Î-×ò`þ,B¶ÑIj[Ë½CÈ{õZ,µ€ÕÈÝwþó»«wßu¬ŠÖ­…è$žíj{TDz¥=:ÚB»µ‘AºZ€¶`IlXsy:L-ÂÚ†kÄNÄYÈ…4¤†°v kqßEç~çÕµ=t…$üÉEÄ¦ð{&°nÔ~ã `-Êj‚µ×/“Æ°¼Ð³@;ö"8Ä…òV¬ ¨a/¢¦ÂõB¢¼tqòçõÙ9ºÐLZûâ“%L‚«µN‘Ä·Îju®p]}œŠflK†^þþ©ÞSO¿¾2$5ÍYö³!˜™ÜuÇù‹`Ñø‹ÜÌãR—eŸ)S¸W*˜?ê’’Õåh‹÷ç·‰Å›:Šb%ƒµnÁZæh†LÈµO?]KlÖ¾¯ÐýÀ×œ¡…ê"$¬Ý¹y»k‘`iØ÷3Lkx62›::uaMÊ±¶T–ÆÁÇä¾²Yâ$bœc0Ã/mˆL»€Í8`;uZÂšâGâ<Fx¡`M`6Öœ™nçþé¤6ºõñDf°ox‰?­œ.[w_êVé9 •æ1”4ªÕ:Z²}Ýåj%®š#¿qæ"ŒrpLÖ0Ø4Xóáð†#Ú˜}ÿCXcð´ÆQrñÐ¢ŸÁ÷Îft€œûí:ÙÅÀ“>¬j­k»»w®ntR·&7Hw1øYÜ®üT»µþ<´öüíÎÝž^eA¶Âe1Ý_×/I°eÒ?™jŠ
kÔš¼ªaÔ¶U*jlP„áUéwh8­mš£ó’ÓdµºìúYÿMÊšf‚57j}‰°4ÈÝ·×œª¶ª½@MÝ½{ÿÝ8Í­Fl,ŽØ¢òZà5€Íˆ…ÁñZÀ¶(¹1²Déåë¤æ'ÏkØì[âù ¢EMþ*¿Æ«,?Ø/©E]EþPí/
.þËÇÓÎ	X›brÖ3XMOÖNLMŸQ	ÛÉéóÄ4¬æic$6ÁÚ!îÝª ¬X£bÍ£á›¬}×¢ÊÚ	Ã¤ˆ­‡¼ÎeÑÈ‚ôá=±éŒ}é«ù~H‚TìÇ5ÉX2®}¬·Bš…6®·ÛývÂ(S¥\mSÎ•ï0Ã4VM±ÅaŽÕ<¬©e^ÐÚŒÕ‚²¶;ñ0HÇÜÚZO´65dµ(¬µøm¨`ËAkÞZÄ¯!äI}š,öÓ.k£ÀY#xgPÔöìÎs§Z»‚ºë…Â¡k½†bø’`ƒÓÛÕ¯´²!k0ÁMD"äZÛ½!š5$¶(¾vèËŸ¬×Ê¡‚Vuk	GkÀZ)ÁVˆCª`¥äO§œibIÈIUk‡‘ÐFñ&žq°&ZcÍÒ×FóÉ×’”	àœB.§5²ý8V¨k¦ByX.¬­SO°ÅÍPîGS;—åú•®Vú 6r"3™D‚ÛwÃit·r9;†oeÓ@v¬£Â³Õ|9[¦²m˜lò½qå¯V /ÜúR¹ép2+ûÉšªhŽZ¯Éž‘è,­¼Ì|=¿õo³T~+_†ßP% ÖûÖ a2žˆõl ¬ýè¦R!_ýœàŒ¤rcP…Î;¯¿£¨]V‘Ù‹"·LÌ$ä@’9[Û©»X®ÕUMa6FË£¹º½ÕÈƒ„·Fsæ±¹@“µwµÐ;"­hZ=¬Åc˜ŒÄÿ	¬i	Oeá©hx=i4ËŸ —;`æý %¿¼?òÊNïÍ…®Ö«m¬Ý:09ˆƒø®:÷·yÍŸWìâ”rs=Î4@a#`Ûäß"þÇµÀj&¬Ñ0eatë^`V«-,ÆfÆëãùX®Ä€t
§•’%’7òstVÛÖÐÑ.	Ö.^¼4?>JÑ0Nþä5pëŽWÕ¡jËÊ£Üi›|ùÍž…É§¿|}ËSšmÔûwúŽŽë‡·ùü×ÍÃ•<ÄÆÅeÙ,-·éá–J†«žËù¢²ÿ¹Tqæ¯6Wd™âPÝµ$¶;26}:;±³‘ˆï¬=‰¤}Ô“äÚ	kbÃ›/½ñ'3Ô‡¦DkM4#â}}§Îáj\Mab$6}’-O³#—~^¦œIÕ¢QÑF/Ñë¦§4­Öœ¯ÑMË4n$#×­¡¶:¬!£õu4OOSŠæú°ÅØ¹gH®½!‡‘4í¯QÕøgSþ¦  ÉàÈ JÖ*äÈ k›ÆÎÌ\Ä±š3âæ¡4È®Éf„Ðt§5æ¬>‹Èá—íØ*
ãI_ìïøÎ±š‡5öM|cµà¶*:S‡;·Iýße¥lÍ§AkªXã¿Åpâ…+Ø÷otmìu(Nõ´ÃW¤?¥ˆ3KõÄ£Âš™º¶á¼¢^¶YëÂÃ´®¤»UX<sþ_ÌCD vþüd4hóÎæXMÒÚ‹kÕkä@"³­Þ»·úg'«ÿ-ñ(y-$D ÛC‘Í˜íÕÀl,öð-
nž»Äi¯=£Eñmxö5>ÓÃB%5Íaˆ8Í4µ€j^Uó¢šµµñÃbÒÏä×ÏÌ8ÍÃšµ]›Ò|ê©£×Î?{vdoêüùì™ìžˆìÚµ'®¦Yéš‡5™DÞ>ñá±‰·ƒ²É‚tfŒûQMj[£+¶Â§A>¨u¦Sy\StòÞÖ8²gE¹š„µŽÛpš-ÖõˆJk¶Y•\4fZÃ/‚´f°ÖÐ×”Š¼¨Z9‡tÎf»ððgŒ†jt8Wµ!)kïijG-ÔhMÚÚî‰}´¶¹yŒ¡õÄ¦XÍ*Öö5ÆörÚ!Ol‰CôHQÒaÊ5üY–°ÁhòI1§M645k$&‚¸.nùð*§¬wžÚÙè:µƒ¤þ)·ÍÐÒ¥«ñ@¥P8ZÛV©õ?Ø…m¬ØÌîAaöžö©1t6»ð…òÙÐÈß•¬yKÚ¸³jmQ©Êé-áNv¨m2†4Hƒs’&—Z°VÊ:kYå,$s¤.èï’0*SF!Rš(-æÉ!>“lÊ)Êƒ,@IùšžMõê³¡w¹¹H'€Äâr¡¤””­Å…-`­^¿D¥@©ÜÝ7ÖÑD+tfs™S[1›L$áéŠ`çÇÆª-¼f8ÙR© ÂoÀ™XX#Ëd@°VgŽX!–Ë–1ÌO¸á©2xXsR›Êë¶ê‚µ|¢Š¸5‡š‡âVÃ % ªÿyŠÄVÚ¬}öÁ•ÏÕ›¾ØW®È¼ÿSlk¾^mˆ‡g»†^¿ŒººB #Â¨2~t™ÒÑ
ü µZ*6“[ mv­Ÿå¡ÆQÚgçrêÄVýè7¨…¢5X-ôÅö¬Æ†Ig¬sÀkû§á“Y5î÷±Œkóã×ý³Œ(×”5Ë‚d¶Öž¹òÁ„yiiÝôÂq ¬ÄA|gûíLCDò±¹0ùóÓ¾'x˜²Öéü '¡5`-ÐšfÕPÖ¬é	È– ÖæV€¯:) m¹¼JÖÊëë¥r!Q ß}|ÈúÜÖ<iÀÚ'_É_¤N7Í˜lE¸*|5ñ§ŸÌsp«ž/äz–gÿýË=Ë|ÂÓd¼}	§¹Rk… ŒÕ^}×`íæ1Lá(çî(®fúÒ…Äp&3Ü1–%‘d”»—\ìŠädfâÙ4w¡›Á>÷7ÃÇ67&p{’’5PÍ}ErHkú8J¢ø4Áš²­þì4:¯)¸áØcT¯ñÕ	Q€ækÓÀ/¢bíÜ±œ^x3$¹ÐÏ¨VÊê~"?Ò4Û¹Ø‹Pp¯sð–Á>e—X+îëÔYéÀÆÿ:ÊåkÙaAh:Ý½Ä#×c/°îJ+³-™l%ÛtØ0­É
,DsÃÀš‰È#ROHFa„¦àhÄ’Qá-Ô¼Y‹ö#… {~fìÅ±ú úhüàîv xõÎö;_Íh„ûÅŒ”5Gk<ÃÅ¦Ø;;ÀÚ!Jáâ–öˆœfâÄ7ýEhX 7HoßÏß&]ÊªÄó~þ>Le³ùàXìÇÒe:2Ø€4ÓØ´ÚABÚšë­¦×±«1®¾½zëÞê="?þŸaÄæ×þSC_3`‹ÛdëµyMÔ(¶E¡íªç5žÖžañ¸-D@4÷Î&¥iôöür®äó H-¨j–"Nk„r ½–&imŠ­ ÝÆ»ìµß¾6xölæ~æŒÔßÉÖ@µóÖ:cß›¨í³¤5ß[CTY³á×ŸÝ ýÚ/ŠÈÇI¡´ª³šŽZmJQk· Ø:€5¿ˆšAJâb±#k@µÿÃë>ÂbßŽOÃ4Z;jÍÕí°i3À+éŠí^O—8AYs©GcAXC\ÓÔ“š±œPðn¬z¿Ù`Þß 4€-°šÂ©íZàL5b^Qƒ¹M×&¥œX#hC>&'ûûÉ¤ëo8\n‹ñ¶³W¹§ì»÷s¨hê,L˜µ +3C5œ"?ÝÙÁKg·shûêe`MmÕìäÓKX${ê"ÊÚfáS®]4¶î,‡Ä­	D«jžG’9¯·Jµ$Ý°9ç5tyN‡$oÙë‹ÎB0²QÐ›?ˆîbÎÄ‘Õq‚Q¶©XB4´	C’ùm§AÜÅžÅ|ŸÈz‘Ïúôz)YËc•'Í­Põ½^_¿¸4[,ÁréaÈ¬‡ÁøŠõ
»õb©PÍŽc¯Å»”0ŸL²àF&"\2#²,PšHŒm‘TD=—ãZBÛÃÆ_æ‹ˆl³Åbqv}}~VUj\ÙÒ³dCbú<>·2“Ìóš›©r	iÔSø‹ì~ðªÒHƒ¤ÑÚ;W®pC•ªbš–¾I¼¯ÈÇ§ÛÕß{YíÖF•ôYƒÆV´¥Žóµ*àa1µÃíÇÉI‘*‹x[B˜V›éŒó]€Üîñ#£É»€š‘Ú]W´`À¦¼%>šÑü–pLò­¶….4ýà”¥0ƒgˆj<`¶ÀjœŠžÙu°æíû¬&aí Öâ ¾ƒÎý·ÚÁZ´á#C€µk]ºvrU÷´fÄe5ÑšŠg 5¼‡-ê…xggŠ+NYQ*%cºL×f—–æ·òj 3{éï_\Üšÿj^wWb£jîYŸÿââÒ¥/þãüÅz~<w8™Z®Ï½÷ÖŠîÄ}ùå—Nnu5kÆOW…OÏ¼CÂÊÚgŸ}~“Ž£ÃÜ¦LtdFðö“Í©‚-%LN0Òâd^Jc\[U¢}\õ×âT¦esâ¹ÎV¾<þþãºf‰’¬©>Ž2ö;Œ¿xéúpåj!„Å¦Î,ùs²OóÕ³5Z‹)sqj
÷&ÄYQ6rtÚmêä4vVSf°ÃHûQ­½1‘G	Â° ŽdpdËªÞMÁÛ2eÞ‡¥Ý²Ç/-õ]úiwZ¥WøÈvdö»ÍµŸ«8—mJÒp‡€Î°ƒä0ƒU£mrÌêÖ4‹Âšuî4‘FøöØÌziæŽ~OO¡œ#Ü”ÕÛ”2:]ÍG›šbßØnm}Áýñˆ/¡§5¥¦"°©œðŽ`€C‚µw>ì”ÅbÜëíW§Up-²Z4šküa ´¢´5xu–mv}é«ÒógLOsí¯Ùk
mEj¶#Öˆµ5ÊÖˆÕÕ[ÿáßãµhõZàµ(°yo=n¸-@Û#ˆÍXPÓ*JsKÈtŒ°Z 4ø,<~²Ó¢’š³¢ZÕÒ´ðøÛ­³‚1ÂåA*’Eh}:a·ß¾Åˆä¾,;zŽ’¸æt5Gjr°­Y‹µ­½ «9\#lpnûÜE´ã¥µi¢Z0± @3²9›ôÐ´…õG”“HÖî›°æÕ¼¸¦²µ ª™µˆÛ¬îç³0gJ½š•­ÝV"äQ<_°vLÓ/·Çké‹-Vs°jÖdjâqM¶ýï1cøñþVk×~»êkÖ`´û÷›ZH„$²¥õ°ÇµŽ}-ÖX‰M'¸ÇsrTúaƒÖeÌoÐÔ'Y¦"V±Æý@úÅÄñƒD
3ÈXJòVÏPO[¼•DÈƒ5Ÿýø¥ˆÍk˜÷C;Ï]½su·s÷2½ºúYø uÃîuÑ¥ó
åØªlsÁ6zzÒæpÜO8b«`­Š–– Uš	åEÔ£¶UKéê!ú)ÔÎÆ_Fþ\ch’M$²Ýz˜™kÀÚž÷Ê‡Ô¤£Â(NþàQOl¡¶¼Hùµ\¹äæAË3Œi’VßDoó2MFéâÔDãÒ´$ã°/Úh® pØDBX™æÎéåZ‚[œÛ;
y;>8ˆ¬Fd€5aZ¶Z.êšLP°VX¨é
^¦9@¡:º‚-³T¶¾%ªäH|$ƒ²T§½‰R7gR3 ÔhÃOœ(“±¬Æ(YûíMÎ
”­Ý¸>a1B\UÅ–hÍÌ Ç¾nêí5r{¶,C[[a¤(Öjý©™šdFÅ>"=”Å/
ÉVÐÖøR“Y£ˆmbK}¨}ô‘`íkQ?H£5·yŸï9Bš½Hø&e¬@jl›…ˆ¶ÊíÕ4ïÃÆ`M¸æd5[‚°†{ñmhj.rHØXƒÖ”µƒ8ˆï¢$°vB°f‚F§ðYa×&½#ëÐ{ïymMñ]maqrQ±°¬Ak–£PC“«Õñ÷­s¡_gm9E:çýz_þR^M±ë1U,[3<C+ìK¬ó_ÍRC«pîÇfdykåõËËoÁjv©ö™|IGT!ùƒ<§®¨líæÍ|þbópÍèzÕ&1Ô•4×!Ra˜M¨2\)3ö¡=5EÛþ\!,(Š«yiíSkwà…ŸAGK¿ÿ=¶ùB32qª™F‘#þýP™;„Ìæ
ÕdåÈ¡³SíG@1¼þI ›:‡>öÖ.Àe,¨g#Œ™vÅÔÑvRU·f ×žÉti¿yXiÏTZø'n¦Á¥KK¸a¦ûŽw/Ñ}mP½ž‹riVvk4Ü!#f¬¥	‹G.ôéL–à9ÈKÑä­F¢!*CHcâ=Ñ¬¦ŒCL¤­E¾ü™…ý kÞw‹¶®6‡¨ð@Èl‚z4ýñ/·]V*¤­‰×_v– k4Ín½¬umL¤RüF)åBöS‹¢¶Ø²Ü~¨«ÅIl”î´Eƒµt±Ø]¯–û–˜fåÓòàÁÒV›gkgdÆ†tÇ¢±T¶¶æÌE8TÓG¬±ýÕ­_­®~+­EåµÀk¶o%6Ý¾mFl?€ªþ©‰¨Œ…ˆÒšŽ>²*Í%;ÚÀûó!
É{û0íÏPó¢š"š±š÷øß/“9»Gù‹°5p“)¤ƒµFRä¢ÑÉsGÉóÛc ÏïÜS{Ç˜Y¤¡’KtÊÚ1ƒ5œ$ç‡Wƒ°ær ¼æ-êÝÿë*)„ö­I &,‹˜ŠìŸÚÇ3‚H´"CY;ùM±Ù6w4ï‘h¤U1‹&Bzl»g–>Â\iŽfyrß­Ájk.\·5ú»éwÒ¼ùpƒ”°æ…4mà5_µHÇ>7È6(ûqS›¦Ž–'šÌ-6Hj!qý?dK™†F08f‹ÂšYö[ô¨m¨i­qU•ñ£"·”N²ò'M_ÝTPÖÔOÍ7ìÐêYíS0›XˆíÎv—ü±Äjú(	öö4Ÿ‘ÖÆÔÚeûˆÜLò½ý5aôAÖ#*½®åÝŸ(i›„ÌLYC‡¯”A4mÃœ.Êå*’=V‘öWa=”T¤!ƒVÅaÅkôÀÖU³–ÃÞ?¶‹×ÊdûÒÕj¡¶%·-èlÛb)[/õí³óå}•$4F=ò‘«¬¯§ÓT”Õ×±×É™€Ù µX-]/WtLóT}ƒÕ¢ÁZÑœF’xš`§Dÿµ’âÂ¨êÌa:Î„t~«W%"n•+-(‚ü{ÅÇ}Ñw"¿•—–èÙýí®hM#7ßy÷ÝW?¿CønæÆi—O½…ï³§^W S“ªU›ƒÖk´QSö,˜¸µºÉÔŸ™eM¡¸‘-ÏŒ.óR|¡æ<F”)V‹­Eíû™ê;N.Ù0îvÁþf&dˆ`-0-l~—iPéW¤…h•E°Ì ¯ˆÕZ7q,~L‹CµX;ˆƒøNÂÚ±Ð’ŸÅ“™g´^³IrrZƒÖˆžF6ÑZT[cîYíå×U¼84©4ÈeÎŸºìÔdÔ´<—'Æ¹¾¥uO®†øV/šGÿÅ|nöï_Ì«Fmne‹˜«m­_ÿé%ýç±ø'k«E¥J%œ®P_Í=ýú[¯ÿÐ_¦	YBZç³«"¨gn¯øìÌK?{	¬æ±J¥£%Q¨Ï—itÓ’ß¢ë1˜©.R)©íÚ8]Ø¸r$ëã×AT' µ}3 ’û>ýZÖðü«!Úbÿþ:pô`	=K‰Ž@vá{”ªéØ÷Li¨áüÈô2›²õ
j×txª½}ä8VäG´OÉjä‚‡µÓSÝfþèì÷L»éÑv Í`Íº±uËÅ_„ÆÊ;[Z÷qªÓ2M"Û}<È46—j¸v]°Å¥»+ÜíE-kÓ1ñÏv ž‘ðÈÞ ´7eîxVÆB6?3rr~Õ¶Í·Å&¼®ÖjáaÍmy‰ÁZÃe„%¸?ú7à'´ð¦fX²³óüµÔ»º{
<ûôÍ÷ßÖøO€‘ªµ¿Z¤2 ·7úSø¤ôS°šjÖæ‘ð»Ü.·ÿçÎ±Â5¶Ôi\Ë]ëî«T¬ïQ<_†ÕˆºŒù×h vF¨Æ[k«»– 	 )4Wçµ«±%”¹º{ËÑÚ_þøÇÕƒÉ·ÉkQ`ûvfÓê±MÌ†È&¸Š[T]#žG_ƒÓxøb¶ÔBœfJšÓøUþÅƒš’µ©9U-*ª9PSˆÕ.8Í5Ì§`4BŒfO<¬b;Ššv»ý©“hj·O¶#œdþÐc$x‹ (qAÉX-Œ¸H"(k>Ò^Xn7WŸ˜x{Â¾7…„Çý°f£ÏL4”£¬«iëô#GÏl'ÙŽîEš¬…ðõcllGŒ¦E+êÚ=Þ?Dð2ñ!AXkß“²æCVþj?æŒû}3íUÿyÁ	Ò+kèj Ûo‡ì¨d7‚Áhmc"Ä±ŽfuDhÝÔ[nÚ™Á÷Ôœ"¸¢rµ8a€¦Åkk­EYqî7AuH:Z?“¶6¦-fOõÆËSrj{–ï»ÏIXCLçtìÌû™¸@X3X³¶ùÛCü4¬¦’¹.ë`ÝhX»ô[4Î"Zµ¦ña9­Sô­áì˜ +vP!kå’K	Š–Œ8q¥s™<e,E9Ô…‚F§5Ög:—%d\¤5"KfÒsµ¦±¾z)›_ÑK®™××)›•²UW_l¦–° é“ÑT%A·ë’ÒDæ×‹™L‰äþLzo}„µR†ëá@2›¬CgéR2	º1áÆÐg›¥t)_$êeªãòHx¨ƒÀZApye\R©Ÿ“§2<—ÇÖd½”¨ò¯PZÇz–ßêI$·êÙAÇÐÖøŸiíÕ›7åéa­ÑjíM5Å¶¸lÛ›b©E~YØœqç7Õ¶ ¬©WÀJƒÖb8cæGSü	õÍD/¢÷¤8³jÂÚ]†¨y¿·á¡°¡ŽØ£è›ª¼*ÕØDØ	†®@eAh‹¤!ñâšfžÖiQ¹ý©¡ZÃ»¿žÕ¶w½°FÄãÇßeí‰[°vñ]ì‰Ýéu5Ÿ©A\Î£mØ*ldÞßÉá.®§ïý˜0—ÛÀjÀšœwU Œ»nmTQÈåèŽ²ÊÕ‹Ü/lMä)U&j5üøg—®ÿ”’´/þ~‘T‹ly·¸_ÇmµRñÒÅòúÖò
ÒÚhß|a™Ó57×FW^{º‘©¾ZNYCR!LmùüéjŸ}ðÏ5Ø½´^Æqp˜»ÀUªÓ¸öäÇggÓãB¤ó}	•‰+Ù šŒ‚ä:§LÈò	¾—œ@]cy'¬á%çýXûþk‚µßÝ¸1üìûÿ„N6-³À¨V›šÂ\„~×æ%Â®aÛcHl*,Óv
4» ™›9Ï]æÈ‘‰ŽXD2˜ŸÿÑ±nçÓ—]9­2ºÁÓÓ'§x&3ˆË×ñïYf¤*ÚÌ×ß&y­ªÖÒƒ×ûÆ²MÙL–¼Ná§Ú:Ó&žÌ¤§ea´¬LÊdÔó!%Ã4ÈÚâüÜ|ð2Ÿýè'¦¤‘îd¬"íû&l‚´f,¦Ö2-.R7â«Þxº¡¬¹·âZÛîá¶;…Íïl¾ÌÍô÷ßGZû!%k|s!äb#Õ³ÑEqLìI2ÿY$©YóiÃp[)›-’ö˜(–¯åÏ”(è U6_„d3‚ó’hMui/®±bIÌÿ¯ckðYH}4X³Ú5ÅÚ¸†²†°¶³ÊÓ¿ÖÀ4Âˆí[åµPÀˆ- ›="Ð&dóÙ‘¦†­…\ÈÀj,ûô5MÝSûIxdÎ£(íGÿPUjQM-ä?Rñ?ÎƒhÆilÇ)Á[öÏ:ŒÖLX;)«þ½©çöîï1?j¨vB2iíZCL“ä	ò#­ÙšHmõØ	ƒµw µ`Ý’ñ0B#4hÎBmMÃ*ô7qìöÉû{|˜&,ÔˆPÌ·íi>Ò~aM°Fšâý ¬1xN³‡¨ÉíFU5­G“ £¡Cú(Gh6ºiÇ}ò"ïŸ<­…†AY3J³Á§¬¹œÈ ¬éwÒ`Í´µ–æMT:r!q„ôíŒíÒ¦]ÆÒZOü0¬E0úÖ&ÙøæØÊ†¯9`öúxT q=qTq¢mâ9uXãœl-ÕkÄ›ÖvÄ×ÝœížËÛækeèÕOkýúL'ïuE,FˆÎ®~7‰Å°ã­Iç(Ò¨`CN¬UXåæˆ­eË¤?:‡¢&­U°ˆWˆÐÌ_Äê¹C˜ðõj]Å¤c±]’
¹™œÆ³9XŠËS>‘ËsÙtÍ±û®¯om©©MuK-XÈgG	K?ÞW¯6UÇK’Æð[ÖuŽ‹‘î¥ò@óH7|Æ^¶#K|¶©cl°<œHÅ[šÇÒi~¸HºE• 5›Ì«û@µ¹¹R^Gš“V¶¦©s³(yìdåôŸ^šË—a·|>‰/"­¥Á©Ø¡&s´,T«¹»ŸÝüà³Ÿ û‹ÔÀµ;^Z#^~zz…²Âú¬N-ð“ùšÒ ‰ù>¦&¹üó†Yœà/Ô@GZÔÄˆ|zï$O,öt¥îÞZ×~þî]ñZ$2"­³y\Ëy*‹Àšfß^œÍõŽýmÁj$´YÓöÔã¯lGû¬í‡µm^ÂuŠr5‹'×`5tµ[#qßÍ¸¥“H×„û²lÜÆÂ`¶Å65aíW8Çl–©çÕÝiÍh-{V{úõ……ÎÔÂ
vº0fVd²ÔF9q/×r‰ò:6ù­XHÍ¢—%“[øò#­]œýä“:¢µÁ+Ølé¼<WŸ'‚ýY2÷Wf¿Úš[^©¯,Ô&µ÷$­=)ãæßO“˜ˆ®¢~¿Ÿ›ä«N[»y¦˜OT¸”á ©Âë$Òž’IäMœÎT’3sŽ”è(Sf–`5y%’å&i­~‹ÖD^\ãýºOZÆ”5•MÝÖòŸ†ÒXÄYÚW7ìRÏ,Cò‚™í1œG.ñ”AmÇOÂjê=}äÈˆå>2ðCq ½Ñ\MGÔ¦Ûq™nçƒ0iæ¦=›ãÄÈqhù4V$j™­<Nìý3|’¶$B£`Ízb_zãzZ·UjÃèDˆEJ5LE\à–Í@t†hØoÙf¢4k¶aµôG€‹y01ò2JcÇE#ÕÄfQ¦³7fÊx<k`]KB½³½-4s~
v4OÁù7ø–GZÎÿd;:8c±DL©‘DÔ_„h
sœk›DµUJ¢ÊÅîâð0bæ-ëç¯)Î×ÏXdéš´úƒu”6°ÍJÖ\äÚÎû/IYóº±ºƒ)äêš´5AkÐ×¯}-(lÙÜ¸Ú`ª[™eä7Åµ«þ¡`íoí[§‰ÕiÔþ,FÓ| ¦R3M- š'µ ©ìýrï)ŸñŠtÖl×6ö²¶GÖÞ…³Ö9;³wò©=8Í#¾`>;q}ÍÁÚÛ÷¼uÿ«<,ÒÇÁ¹_*›1K¨ZÖ§hpí>(Úš:*w9ñU^{MÍ÷ÛÏµß·6kd%F¬ COÂ6¯¬ñxèM‚¡qr^K{ 4á´'ÚÛ÷Ž‘!iáÍ*Wõ¾î#\¹šÚ{¬6y3ÿ`1UÖˆÍfikz»Öýžýaî;b;Z£	¶L ¬Å³9“YVá×ÞÀ¨¡ËªK#áÑü ¹Ú´²‚7fÊglíâd|jûÓNø.•Ì`M6½Ì]¤±ÚÎÕí®Ôå«ÛÑð}äù Ìf½],nîNA®‡ÁŸf‡ÍB$×6)KM,’ X¥¤ÙDI§
eBVœ*¼F˜áJi ].a§Ëxî0v{È¬åØxó~nmâq(V+'s:ÜÔ2–Î—«9œºäOO½ØVµN©7¾\KÀV`Z£e<~+#ƒÙ2äT*qp}~‰8>2˜i)òÛvg;2—.aà/£àÁjÇ>Àq~7ä¿ôz_šìŠáaÀ
 µ$F¸Ù–Ò,o²ûé>k¾@ùZì£ùv%[’!$Bß:\RÄYãÂ­—¬Ô’üóVÕ‰?ÍÆÍîÞ4Xãª ­qsM!;HùŒ	MaPV(¨í5oGŒB±)ÊÔÖÔ.ÛeÍÆÆ·È³ÄzŒ—ÕbØ‰Nö¤øæ‡/«'öÏá4¯¬E¥5£4m´ƒÀªå›°Ö“iìŠB[Ø†)iŒ6ÑyY˜¾
U¬iª9X»²Û:áÝá5n1
Õ–y ¬ÄA|Û¬MLpZ›hÜS$º,|Jdo¯£p ts Æ¬¿GÍ±9vù=Gk`µ—‡ñÝ"GA°¶RKÄâ­ý±Â@‰¬†\¼P¬ÆGçgËj6[¬æ×ççÊ/­×·ÎÆ”/×ç¹Y*¤j‹çfgUÇFúÇ¥Kó+=ÐÚÊå×^ãÌŽÆõŠzŸOFkª`xî¹ðÒ—·ëçÜ~ñÞKéj¢Jß4šÀ” µBZ%ÛÂé^«Ô¨&¿”žY;ìnHÍbýÅ°šü+^Ó§qr«´ÅÙ^$¹ÑBz¤%)>SÐ
íì¹i+T„Éq¤!«ÑøWwúô:{rZÉŽ¨tÍ^Æ«YO·Ó±,ó­×NO`Ù«q[Ñš8]=;2Ýí¢Ëæ‘n´±a™ABkß;=–9=B²´†«?€V‘‰UïY®»ˆiä<rzk‚SÌŒèh	ß¼´^sRÂ´!4³DFƒ6Ÿ©5Ž(É1ö3X•š;z³1{¬é`ç6ekW½¤…Cµ¿jÀ_ä†hšíÖmîë« Æy­a:€¯´Þ(Jk°šŸ›™Ýpµ‰¨ Ãr×¹LýBÛ B¬¹±ëôYSÝZ¹¬Ö×g˜j[w#ìg»‚5Wµæ‘{«j¶¶&tûøo¦ªÙêàZ”×¾†k,Ä·Ël,Qÿ +‚kÏ³øp¬ü¿nýh¢Z 50ÍHí_ŒÓDjÓ¾ÁihjfÔÿÕX#ñ_y¬ÝXM,fukj‹­b5gÚ/ls$GLïá*ríÌˆQÜôù3¬™$”jÖðëûÃÛšJ3t‹4Å6aÍéjAY#‹E`µ_kÓÛk¶›kGÌ67Ài÷Íþ£I”ÔöKk¾f-xA†THÜM¢°(çQç3„´Mµ}GnGIÖÜGÚ'j lr‘[h¿ö°)ö‡X{¢yGÈ¦â¶¨k¿WÕœ®¶IŽµµÆ¿áPCRS4¤)°Æ`Òƒ
ÖÐÐ¸¸L
à.cÒ…ç~üPlHEK–4ùlkëÎ§§.»ÿá¬ö¦kmæý €XmbãÆó»m©Ëwn¹Ø½ƒZ­ñY®øZ¸Æ¶á²ÞïaÍZgkãÏb²žÈQé•L°c‹e<"«!DéªR-W¡´©À·ZV+3Š¢!±É_ûU—w@—5¶ü€íXlZÐÅP¡2©P Õƒ+R!™È¹ˆ¥r-ÃÀÚx-nÖˆs Ñ|<š¥hmé>#äDr--Ëd°¯¤6iã[yºÒ(	Òü3ÙŽŽ,	Ž%ªæ¸'Ù½¤e‰œ¤Ç—óˆ€û*cƒEòà+c™,Fú§%d<•Q>%Aâw=¹y(W p-Í~÷R_…ßò¤TÓb‰fÞ‡Ur3ÇÓró¯""Ê”²¾U¨&ÖîÞ]ÝýìG?‚Õ>Øýí•Ï½´¬)2ÄãNWë\ÍÅT†q3µ0c¸¾¼bÁÍÚIv'WÆçF©á+–AÄÚè"}ùègëïïzûí…°×0ƒüzdðñ›-û*ª¦Ù40ÚD 5Ûe±gYì˜Ë€´™›Ú{ØœÀ¹Ÿäƒ5«Vc!‚änÛn«8´¦“É&œf[OôY;ˆƒøîµY;1aršg5Í]´ÅfEâÎD6¸œ]ç,º'µÜhÍÂ‘šg5¢/îŒ¦Fí¾Xmk«ž×D²\hMŽç“¹Q®+´O›%C‘êh“Ý!QMYéóë–Ý¬-«h¾þ‰ŒÌ.Írpe™úêúhÏå/_þÒ.Ôk®!6§@Á½µDkZ~<”VO±±¾îâÖÖ8ËÕl¹8’=£rN˜žÎ
õ¥¾±ø¨¹ŽI}RhïÚÚÚÚ‡JƒüpcÝŽàË ŸôäËÞ{R¬vcmpäLÔCgÆïD5kpÙÙï¡µ‘I\¬5bª}zjŠ'§§ø¹sGá¨ÓHiÓGá0^mà§ìGoÁÂÛŽ‘oÐ)›”©™+øG›úd÷µ7ÁŒð8Wè–föuOµ›.uKÝ—®gŽŽT—Ôß™Èâ*2l¥%Ãi|ü1:læ[Á`¿i+´@Q2ë~_±Hà[	C€Ñ“Ž8Û‘ýºáF¢hþÎ£³dKž‘Žî[zXÿk‹DëöÅïî¬™ÇˆåAéßÇ¹©ÞÙµsãêÝíÝ^Ýší¥¬RE©l4ã½!¶ h÷û×"‰}éj$B’	Ì+ºûŠd”¦’/«¡£=˜@œ¹f°«Ý"Ò@\«»DH9øÙ‹¬ðåj«k««®Yj$þinxTùñÇˆÀÍŠü•³Ep-’y5ô\óÌt5/«Ajrá:]kqÁÇúà7rÎ(jÔ\ú£Ç´hüçß£Mát4%?Š;`´Fþ#3vEl'3{{gÎNý_öÎï'®3Íó+íÿ0’Aán\‚2BØê"U*3%G¡ë§P¨¨\S˜¢QË	ÇvÛ±­Ø/\ŒèIìŽÖ&8RÂŠ²ïÚeW«Ìv#wâô’ìdÒ­žÕŠ½èî›é‰Ô7-íçû¼õú¥bÒ½÷á©sÞóžS…±}N}Î÷y¾ºbg^{m$»k¦HðLÐ¶‚?|vüö‘ F{4k¤A
Õ$¬…NkAYcäÌ ý*eNce ­ZÚÚEe¨[+ Þv§X­ó7ÈÐñŒ‡àÉÃ›Eè³FL„·hèvl5YÙ…Ï lX™Ø¼¨}¾Ù‘ð¨”5B æj±ö®=@5ö}Ñš=Ü CGl‘£íäB¶»–‘ÐCßÃš;?¨fé&NC”5U¦…H‹Ø¤LûmæìEØÌÌ8ZTq‡0ÞÒëu®1NÆ×hœ†°vâû2ï¿Êy>{^ãÄ«/Q„»HÇÌû÷«L.¦hÜ´w‹úòlÕýz’p¸»Õ|ËHF™öCf‚3’†¦üG
×’ˆlÔ¬iIµXËZ5è­*T;D/,$`—eR
Ó´A5k‘ä–Sš~‰ƒ…Që+¶ã˜„5yßç’x(sl`qQì2¬Íó³ºVRÀ6·IoR»£I~âÜÝ|%‹?W"7ˆl@ˆRåp%½¦l‰…ÄðH:ÝcíGF°QÅ]‚¿#.cÄð`ä0¯M“¯ûRÀÞ#eK¨DXƒ!qFÖÊTì²á•ÏÆA2ZuÏå[•²"OçRîz%hò=º¹YC!ËÝX}øö@Ó¾þð!°öcµFcll¬×k±ÅR ¬76”ƒ‰	«žÖjdÅöw¤,)rK2’F§ñíˆ¦Fóã4Ìîï~ïƒØÎ®ßS"ä{¡-v“{@5ùAŠÕ‚§ˆMBDÝz<p-D@6ÇâíoV²¬‰Õ,Ì¸¿Ùrça»‹£íG¡5ÂKkG¬ûâ ¾“mÖ¸l{…Þ£šæ\°\©‡\Ä4×uÓ÷É²I´æq-°š`íæ''¢†÷öçFï`ùKò:Éìò·j/äsIÒF’…ñR]Ïú­-­‘ËP€Þè¬Rž¦ìÇYú®ýnóNï¾W°ZÛìü;Kó³›J‰„Õz¿zóæÌÌÕ¬) ©›Øƒk¯Ãj·:uí•×Ø7T¬Q]¦>­ÇÁ»åzÏ÷Ò‘*YéHë!L8\'i¼ï¿×£izeùöåãÏÃj[[iÖ…ÖØWa6l,,ÞýòG¥Û7Þ¡ÂLˆ²©+¶ÓÚ µc5µY“±/@13÷þ3#SSÈp/œÂƒÿœI^|î¹³ÒÉxÝsN¥ãA6Ë¸ÔÈS°©ŽG$­Áqû 8B$¥l™"[Æiœ4UC„K§)>Ô ãÑu0«-ÄV¦D­B5P¤$4K§išÊ’Ž0Psî\ÞaØhþ46@1—9I°%­…yÈnÔ¼a½ïŒEØ=Cõ:;ÆÄ[Cò%¯ÊšÂ˜ {g}ËUª‹Ôi~ç+Ö,CßîxkGlg}}ëÆ­˜<dÏŒ¤&çpÃÖ÷ÊiÒÖ´Ü*ü^*©èÈfeÙ×øíIaS1ÊÊ`qÉ·Ã¦~­^ÇÒì’XA£Ñ˜°­>Úc0²ºü@ã£e;öà7¿¥=ûhØàµ¿LlÍÌš²y\F#Â1EèŽ­µÕ¼dhum¤œù›)AM©AS3IÍ‹jÏêjÿëŸ~¶ryìÕC¼Jê°‡5ˆljJ°õ Ü$$¿–f‡ãü·ÈœvÝÕ¬l`Ë@Îâƒe
ÖLUÓ¸·)öuÓÕÓ‚²æÃH-øA>5Ù>ê`%ˆg:ävCÝš=ã§rjTÝÉÆ6æ‚5ÏjÍÊZCZsã³wY½°öoÐZ£FÎ¢õxÖvw»© !ïCÀjHŽ]Gë,Ü6Œ¸GCWû{x•ÝŸ~Ó’hVÖô´«+¶÷íGTcð´ÆÉÂªn0kÖ9nŽ"žÖÐÒ\ ®Ù£„Û”ùc`ÍÔsrTC´_ÆM@`í“7¶NÌ¼ñ	žOršªž®^5`cï¯ßt|?Þ™Á¡¤Ý”µ¨@/Fðæb´^{w.z½Ý›¥_ŠÞd¼}¿Þ”÷ÛMI³ŠµdÉ¢št§!éi Z	ZUÕŸZÄ ƒjµj‘¢5¤µly0ÑçKxQÂ§% jNl“)d‹i‘ÉZµ@FJ*žhdA*áo‹.nSæR“ø’x"0›Ÿçb¨^gõ»‹õy®—+ª3i¹8?_Æ!„R3v,*¤WpC²íp<ÕK÷ÉyjHUÉ%d2!o˜Á
f¥²‰‰TÍÎ²B;Î´úÜÐsŽÀI¤$™4Q@µë¡¨{©¤.¥2ˆÜB-Ïå©RãªŠX%1ˆã?É¯2™¾;—,,,+òúEò!¯FQ¹’"ÔÎœ°¦á%Ä5µ=#•j4\0G)[pö“ˆiú@‘â¹øô…wå@REMK¢J’ýIÙE4º³³óÞú`u“Ö> Öš¥5ÝÆjñ(¼-ÌBLì³i†¹Ð›•Yø{¼ £3Üj¸æ`MœŒû¬q¥r¨¦«¤k‰Ír›Å¤µeí â;×fm•Ë6fç/õ³g»>…k,‚µþFÊdôå™gh©ŽjÄÖ$¬f}¬â­Ó‹“|2žÎ‘d§Íçt‚K["Q-”k?Ÿ/–—æ9ÝÂgó›5®Hf:2OÍô<WŸ:úÚüçL8BÇ5U¶£Ò-[à]fb×T³F(#­	Ö(Y»xËò ñí/šRìé«—ÇKòåÂ ñp®–ÏË±‰^j²Äª'ã-m¨&ÒÖTßuŠ9ÆWÖWo?z|ouç1÷Ã %Þ(u*xÓ5_Å}òÓ/újßÿøÍÓc„`M^" ´ÅaÌE\Ð)›Õ«eÔ¬`4P#åKgb2¶gFÔ›oeý¯1±¢5up9&¥­‡É)l£|MöäC¶‰ÖÀµ¾Œù0#’è’&¥s¤sä­+üÉ.€lŽ±‹eIEÃCtQSÏkÃ‘tM°2§á5¬Uì†y€5…ç5^$Ì¬±§Á9*:}ÍmÖ`MóP­ÆÄn	4úmRÔÖ\‘[&ìó´g1±CGìÖ×ÿðþMþjæ.òK‚9­ÖÞ8¿µ³ÎO²nÝx}«·5Åí}Ðl@”¦Pä~Éƒ~+HËA}\Òä©>uŽÖ _vuüt±õìµÅf³dÕ.‰ÆV/¬qÀÂµ^»½êPíKsîÕXçˆâ×ÿ¼­í›ˆ­Úx4Å7€M´å­Fö1…½ÕšM ¯ªÛGjpZ 5ÂjžÓBöã¯@´ýã?ÿþòîXfÊa+^<¬‘)ó~ç7b¨Æž‚gqîÁ6õµ¾W•¸¼f²¯ˆó×7HFçÇ‚d0ƒÔ”5ß›‡ñZè³vOl$(ó’š6Ún´
ð4¤çXƒ×0µ!œÛEü"RŒû›lô÷–¬Ù€¤)k
C¤P*§ï¬=M··´&V3b;ÄîvR³t?fAYÒšÇ5÷`ÂžÓÖø©œwPÖ¼?^—Ø÷û3ÂaÞŠHg¯»'Èæãwb¶3…$4epÓ~3î—ÓSÖX8¢N)<­bÀTt}ë­öØ'd;ðÑû'ÑpÆ"XcòfãÌŒdl‹˜Q"¿«N3§,¶DŒ™ä5&g¸À5`Íëk(C9wFkgš•ˆƒµDk»o†ÍaŽkñÕ*Ù‘R¥†¨]Ós’å³e.{q£5.Rk.ÒùA&$SE8©|@•l¹™€À±ˆ¢4‡¶Æn«“`²¸9¿y§6W,Bk…Q2#µq8­ÊQ¬†±cQ÷Aqq¤SZ13\…Õwf«¹Ö–¶LÏ’®sØªÓz49Ü	9¬jEÀßYÙ•¬y•ô`)R¢†™R#¯èúR¬&rÕb½¦j¼4NÖgðñB‰´Ïüæf5§~ÞÓÕ*é5«÷Ÿpæ¸~?¾j°öº2øl4Ékà´v2&X#+±—;¼XI¦R	Zo/@ôùEý!5XÛ¤"x¥nmº7:0Ê«ù%æ¬ôVû`yÕ›A²8‹ƒ5"ÀZÔ	k/»¶ØMJ˜ï•ÝtÈ[ŠLø§žÑÖö
kn¬]û]8(k7¿é‰uÿÓF5b5„5ÖÛÎò fí â;W²¬qíæüÒ¾'G;jM‰Ú	"¾åšŒŽÉè'4Çh×â§!fŒÕ\­ìVï |6š³ëžîX.âÕÔÝ=SZ_+®‚%Ðãž]}VSæc¾>»9J}×h®†ÿü†Ùsšƒn€_²¹X*ßÝâ.Ü°vÕn®ê‚­k´Xí„5“Õløètè*	Ù” ¡{o\0ó¥j¾”É€AÔvÁ„s¹\d8™µÁ+xç[ñÚŸÿÖ­îP­Ýäd¯›ÒA·›ÜßýçRÏÊ»_ö£EµËBv¦´a	)·yúO9yíeJzîì+ÇŽ!u‰ŒHë™Û!´¡•©í{ÇÎdFÌ
’×"Ïáë?Ò“éá‚5u]¬uÑn­«s¬³‹¤Ç3g¨1¬¥­S\±Ôƒ0‡·È•w¨\ë+f#´yæCD±O2j“ Û`	)¬©ÍZk’JŒ
kÞ¼£ßJYÛpHf{ê›mŠZ;`­Wš„â5Âß­vZ#ûÎÜØáœÁZè”mO‹ÑŒÕØ#º×Ñ{kë~ô["àu²Tµ?ˆÖøkAfÝº±ƒÛrû@lfk§µU5jê©Æ&÷ÙƒDÃ°Ÿ™'·Álw þáô‘+ol«TëcÜUY¨­xúµ2ÊùŽtÈË¤;š9äúmdjÁAÂíˆÐ>^©=ÐlùÐŠËŽ<ýûÛ‡Ö¾)¯…”HOlûA[ˆfyMâZÐÖš=FÛîƒj–éÓƒHÐÓþ9T¨EÍŠì—ÿdµÛSŠ³ŽÕ°Æ Ç¦€3a´&°Z­áÕ©1;¢”È×ÎdkJ„lh\ZEgpœei×õYóYZnÙã›Êš=<ªyiíá½GÂ2…ñ‘M01á ›ÛÐkÏm ­Nô†Ö¼u?±Ç’°¹[|8°úYS;7ÿ3¸=Ë†\9¾kÆ"ôUC¿Öv#‘ÎÝ]9A†®l0l¨Yãaƒw‚ÔêüûY½°önPÖ€Å=Áß'ØˆSÖ¤­±6Â%AºI@jÑØØV3+ARÈyÅÙC‚o¸YE;R“æ6ÂGv®>±Ž—Äj‚µ@T¬f¾ýS`ÑšîÑHÉ3'cy?úN¡XctÏ˜ÌÕíHÖ’•±€E¤Hü*´·'“œÀ’\J’¦«™À†ÃÎ½ª:DàzÏ’E}3w"F`­%¡
>»Ã%‡,s9maµ8'ŸH$¯Õ8$ÌÉQ¶µ¨–eò¤ÇY.¡¤ lÞ‘}\T$Õuf›ß,qÏ³ù%î(eªô…¦Ø-û*¨k‡;Ç2c‘dimi)«‘8Ÿ%’,ï6»OçÎõü¬ww¥¯OÔ7ˆ'î`©N%É}ì&GÏkò‡\ËÊ\D¼–ç‡†êã…jIEf…ñ¹B’?Ej!7XÀÁqqñ]ì µéõ[ŸÊƒTîzs$ËÌKÎºçËFãÈkX“Ig%)²0>zÇtÇ5r”Þ»bBÖ£]×îÞŽÅ(P|/Èi¶fÒš‡µg¤µ—á4U¬±³ûKkŠ¨3–¦˜ðÏT«yiA––IKl_³¦áo¼²æN¹ÀÚÆ†þÑ¹,H³Ñ
ª(kqßAX»­+8'÷9ºkÌ½ž¦•^ëfýÖ†Ì~J®‘YîhÍä5FæžÕ¸HÒeZí*»y¹.†©QvIÂG"ãnöù	YLÍ*»¢ˆþüR½~n©<>N®S‹ãfë_ƒh4ÆÖÃ¹òÒ¹¯7cß?Ñ[Ï§8©óf¾!*£i*tßÁðÃÑÚõÏ®¿ýÙgÓŠ¥|Ùl‹¥ZfmqÜ„óŽeg=•üæ}mFÑýJå5ƒ5eCêšGåÊ½óÇw8ÑÃk¢vÞ’Q÷ >ýÑÊ¥t¯)rÖþå{8ö`GpÁø‘ íqJ¥kŒJpäez!ŽHigà¸WØ Ã¹Öjg$­Ác#™±±Œ”¶S¤…‚êðõÏ°¢±h<„,ÈN¦ºðZe_¦«‡,Ö"ÇÔtíÂhm(Ík±„|‡ãKiœÈp©ÒëYÔ­•1(•¹hæ0šÚÆ šacXf°„5™Ó€5ã3®+¦ª	¤8d£`Š1U‹9‰(ÚÃQ6;&_‘½ÿ:â_é.yjÖX™vL bëüöo(åÉhM0,Ðš´G?ÿÃÇ[Xyv·¦NÎll—Úk)šbµ–¸†g`mÏ[DC ¤OêÿJÖÒ®çšzdò§Ùáp¹L¯µ9k­pS¹pvº«Õ=«pÖfÍç@®®‚llX¬¬èàe¾òöo~˜íÿøm3°…”ÈðØÙšyÍ¨KÂÚ³ÚÚ·éj<ÞV˜¬ÖœûØ$§=j¿²ÇÿþÖøíùõØêÔÀ1H­²‚<k¤—ÙwáŽ(œ¬6†`uù4¤F¥šïªX0€gûZïÔ¬Tk®Y³Å€š‹ ¬ÝýeÎ“Ÿ0´-L]x6ò°¶MµZ$²½BQ’"5kû%B¾ëé©1Õêí ƒ²æ%5ƒC·ÇŒwÙÝ¦Íš3YyX;¼½½éìŒ<¿»íñQ›ÝÎça,¯¬ùÌKV7xeí¤vƒ²¦‡”µ kÇýØÞ>qÜÎš˜Íìæ45–œ#¹AšÅðq´fƒ‡µIDg„v€5;ÄüÆWDUÎFäã—^Švc1ò’>yÓûòûœþaµ§îýj¾æ`M}ÏoE• é M	†j.º;xÊÑZ9‘QYhC²ì‡ÕÖÖrì[äCkæ0RvMÖÔ%f£z‹=ò
-æ¦HXÆ’2!‡UØwâ¨f	va4SÖ@3íç 6H©Ð.àÎ5=ºê]˜^Ôoj1Eÿ0­\†Õæ0ãšœ¤k)¤R×Z,R"0^\ªK\¼HÓ_ãÔI¹D34:P”Öy82Œ HÃ]X4f]A.çú¶Fuò¢¥²×Ìe23F¦f¾È+]¬IÒÌ¯‘^I!8ÕÐ ýÆÖ‰ÚŠCõ<úcTÉ¹Z®5Þ»¸h!’NiË(kO®®Þÿ T3X³L]Á½²öcâM×^æÞðôô@mntš®?xø‚¬*H[«£Ñ-ôNÑí¼#nLÊkF³0b]25°º¬4Hëþåýü ƒ´† &ZkÌ=du°ýÖ˜höîM-@š¥A2Ñ+¯Ù‹·¨YÖù@aÍÃÚÃv»Ñéiíù¯¬q¢9¨Y;ˆƒøÎÁÚ_éú=áøžúò™Šf‡ÙÄb>Rµ®;%XÃm—Å\Ó†b5âÁZœ»Ž9,ª¨<µ Câd¡FÒÂ8ÚZ4ôÑ”†´VÊÏ~þÎ¹ÙùÀZýÂ…%tµsÖ=ækR!é–}î”AÐñq7„µ—N¬¯¿tâÇ_qg
·kìñ!’eXÍ`íáògoöäÝK¥2fõ”ge”¤ŸMÆI]I`Û¿q‰ËVK$úç1ÏJ
Ó£¸ø•	­³ŽÒHR—õÉïžîäZ{«[³DÈ7…j|$ØútëáÇ§ûÄjRÓž3}ìÌ>š9†iÏøÌÂ2!íu:øÊ1LE 4ò$ó$ÈM©=-ÔzÐÃzx÷Lg[jgøVS¤8e1€ÌWyjŠuD‡*7bÑ#æÃmÃU.ÅcV€÷°VÌ¦qy¯È­šÓg‰!]¨‡‹}åäìÊ†`ãÉ–¾‡ðY°ßf‡Øh˜ó›Ç[ëÄÜA'—Ù(¢j‚5×ûšÚhXæ^PÎ…¾“¿r¶*©&³õÞØiñyRƒ£Á3©j31[#ªµõÞã‰x/wØÍ`$e¢_\¦ý¢O"ã­Þ¥_Nk¤4ù i+E>ý«¥·Bø¤?òO‹=¤6”ÛËõúªY#‡e<¢³±¹D«Í±…Õ˜­=x †Øðš´µFÛlÅé_ÿë/ÐÒ¾íÑÐZs›ŸílžÖ|»lï	Ù¬­y\k¼NÂšÏÉjÍ ÖŒi>ó‘Å$µ?ƒjÿõŸd¦à4…`mŠå¬ßñNý«©áš³„hN}qñÇL{~>ÆHVSØŽª¸ë`ÍF„mÇ›Ü ®5»A*lªH[-ð‚DY»O_m§l5¬ù	ïžï¦ßôaû|×6Íª;±„Ôé ^ÛÞ/	Òëj‘'µàÚFŒº¬ñ@¯#LÛÅº¿aØ¿‹R¿"š<Ü¹»"°Et»G¶ùÕ,ÛwôÊÚžÈ“n¤Íš7ô÷¨¦XÞØ¢ƒ±š¬ûÂ»ÉiN\kdOÛ™#	¬±—±Æ0A5b'Dÿ¤´­IAš¼E 2%½9½™Œ’Ö::NðŸPÃ¼ßNÈoò—‚µ«.^Ê§eÁ:ñûoÜÐ½s•Œ*zSÝrð×¬CoÛÑÏ[t+-RWÁ~µ`«àe·vÀ)êdãÉ*ÐÆ»ÖŒÖ°èÀN¥ÍU¯1+¹Ðn2é¬s:ýärÖDelI~MÂYjÕ|]™ÊšÖîÐ'bKÁ±Èj*á.–çæþ+‘¹…š‘Ú¦ñJ¹<û»Y.ºÅ¹ÆETÝZzFúh‰SÌPrV¬µsâ§aÍIóÀlúÑ³ØˆŒÙ_çô„,Tô×9|ÉL²¯ÒÒQ£½$BòZ}n\°VV6ô6çUõ„YÅwÅ|5›Å®	p4A{”éDnéwoq¹Õ‹°öDiÀÚëP‹«ZóY4ÅÖ~râ¥—_ŽŽÎMò(•óŒ…©:ù²9Dë4GX£®6ž'ëXÃ†„KÑÕ­~¸[ÿXûp9‡…¿§µ}`ˆFÃüeîNï#¬Ï‘h@6´†$I‡fÝŒAcGPëÖOœø3HŸéqTó°vqGÿÚÖÀš/YÔ,þý¿;ˆƒ8ˆï¬‰Õ µig5wŒæœ ™¨Î‡²gšEî‰B¨ÆêYÍ
Öp:ÚZ'Ýî¥Laš|®2±ER’\H+·z±B¼ 11V3³‘2×™Ù5Jo˜?¥ÕÏ¡lçtúãçõ¹…XïONœ\˜¼º‡ÖÈ„|S¢
7TeØ~V[¹¬ÝJŠ J¹PÍ+ÈD‰Z¾Lƒ±H–žP§öÂ¦Jãò•±Òø`¢6>>´ÄuŽ0÷{ä©žK¸L<n°ï!{hU¯ÝTÖåoâ¹¾õðË"îj„¦>Ö`Sð•§µc:x–mM©ÖHf›B=cŽe¿Õ§™°ö
£,Ed ¢×#Fj ÙÚfT£†Ç³iªqÓÎlð~ì‹´uŽaâ˜ÉÎ3?KuÃIgúÀ¶wÌ;eÉr`ÒHBfË?H%:å0I%¹9\Á2#É…Ÿc5TºF[lo×ÏèbÃ”5kÌÀ¯f³£–zæŸö×˜øCÊtÊÜòXýwóºZGwkÇVG|ÝXÍ’ ñyAXSh4T3né>¾Î?G¹AvÇ©BÛgÈl!¥°õ¦DmüG¯°Ñº`+7<¬õ k`™¢Xÿ‹u¼/—)äPšm¥&RÍÐ×ˆ×.[Ö#û:¦á6áZ­¡¦ÚÿXãe½Bqù4ö$ÿ-äBî¯°íl¨mM2Ûþ¼æ}!CÝ´xmaV²Z3ª=#§jžÓøaÿ\üß<XÙ=ëéLz`æ›bSÍÙˆ)s¢’‘S.rjûù•]á™| Ýæ´Û:#¡
µU’ØÀ5kM¨æuµP³pÍšÖZÒâÍ›Cj°=ï‚ÜÕõüÑÝÈÑCúOŒnø­ÊZCÜb¦Å6Þ^„å)¬ù$K·â¢¹r|¥ëHgäøF'°æcÛÁZgçJã•n|~£ÙÒå@>ËkÆj¡ÕZCY;úÖl v&Û;6,çÑ—<kžÕÌ2Öå?›}È@X‹Nm.&Ý8©Š2XÌúwb3ÒÛO.$G(3UF$;ÈaŒýí-/ÿk‘œ–ñ¨›u¬Önò°&Vs°†”!Zƒ÷tú HM¯5Hw³”káZ€µ^^ÄEþ¤C$ó…„\µK~dµÄC(æ›‰HVÅ‡È#—¸&Y¾Z-×‰Ðð$!ï¦ÎÉß,=Äj®¥7GÑÙ
ø_wR	àmz``ryuiP’–Öè®vŽz-å–ÊõYj°á9 ‹ë–R!‹KçT]»†QH¦Bsë±¥jÅtãG`­³ÐI-%†QE‘ÓÚ .¼”"¦¬5´µ¬ú“–ÑûØ«ªd=R‘WÆ ‹L®(KóE¨U'Å"´6_–	&EŠw`,³A!«MßþèÖ“·ß¾µšú””—‹×9±4`í¦+Yc%HÑ¹ú“Ÿ\»Æ:©¶?’5ÈuzàNÞ±é¢qvG¼@³TÅšÇªé—5=ÊìGÓÑ‰GHY[¦-6±od°ƒ±Ç¿?DÓ¡}U·h˜C‘o¾VE$\•\—5k>žÂÚº«µ:;HHMf®dí Öâ ¾‹°¦$È	‹Ž:PÓ¢p'¶¹î"Ö0Ô²ì~†îèµ›R³×|0«œ‹È”ìNåjIÌt9‡ÒÏRþÌCŽÒ4‡Si½\¯“áªqS,Ÿ'’ª4±«´vnéŠÒÏ™ñ…?^¨o*%òÜhm	fûù¹:)û'¯ÍÜYœá\çi[«ú„N¼.÷Û?¸þpõ‰:b¯¤UpDÿÐBµ’ÈÉ¾«˜nÎŒ¥G†xïÁÄôB­n¹$äŒ¬e;«ãe³„\‚Ó¶k«˜Aòï1¬&aÐ»Þ„ÉƒtÕ7¾¼rAVjw}9›~ƒ5%8*Xs‘¿!_•a?>!JiØøb1+ÈÆžY‹èéï{HCIƒ´)Z±M³ÎjWT75r¤³ó»¢K`[¦Ök=Ô¥¸/m}±)¾‚Ô†l¢¶bEÉ.º*9)[¡êa’íc5KîÔ—Eb³p)MÖlðmÕÀµ[øvhMK€´P³ötâSíÒP.<K kDÀ<Ej+ºe¬¦Hqš#5´]HZ5º(ž}¼3Ñ/çî“[[½Æjü@¤d¥šaMÚ–C`kUÅ'ƒp«óEÃgÄ±ZQIrhÉ“¶È(m}éêåÿSW¤ë{}é³ò«¼iBòè4¦Ë÷8s;èõ6„9Pïôƒß˜ÑÈŸ„Èæ† ¶\k¦µ¿5ZS4KkMYÞÒëjM¨@-xó–õ¨øVLÅjÿú{Š¸v_=3þŸhëxÌ¼‘ÔlûœªÓì9
<OqàTzdwe›Å	jÙ]± 61¤d5ò"ƒu¿zbeÍº`³bÅ‡OƒDbw‚š0Pás5õÖŒ!I‘mcÓ¸MclL»¨$#¹swÿ6k¹ôƒ'ª±9ú#ö¶·¶wÞîÚ]‰l~·SÜ°¦ŸP~þMnÿR­f-A
}ÍÚ»“lÜò)‹² Yž*k¡ZÍ6HípdæxŒmh¶Ö¸ý±‘p²–{l¬HÙòxôéŽÕ¼O?›ŸÊ¶À:bm¼LÚš²:@+ÝÁé&2³{g'®éÿzãðKÄ5ÁZ(YCWÛzÌÅ±N.#Oo#u“õ(ÑŸR¶~õu9L¥:âý<µÇ‚6YUžÆØÇÕX§NŒï[’ˆjèk ÚU±|¨¥Rf±©`­^VÏl³[‘¢¦Pýšál‹oMcìi)k\ˆHÌï¨mpÚbj¯‘»kK8öÏÍf\¥(P›µzyhmž ¥f™|uˆFš™ŠrüÑÖìŽÈØôg¸¯4ÔW©¤!µ±Nœú)o–öWÊŽò÷ÖÖÆ¡d.’6«ÚšÄ4½€…BƒnÕª(Žb7ìù+Ù´¤53‹ì‘1×Pq­^Ò5¤…¿ëœ²X”ÆP®}üÑòý'o?¹¿s©þâE)k¾Ñá
Ö\\{	X»úÕOcrUáÏS¨É\X³½Ú]S]¹ÌÁ9Ã7Xm GÂ$BäÅXt@Ø–[Æ³ß!——Õžé‹®5‡ë•-¾rñ«…Ý&ƒÈ¨›úÝãB¸Æ¨¹íÅÈ;ºÖ€µæ’5Â•¬í´›xKÄ°¦pvÄ_ÀÚAÄwPYÖ—€ÝLkÑ~“Ø,\l®h®­èÉh÷µ›¢µÀkl=«q4ñ­`zTÍOÈ!_Är‹~)£µÞØÝz!žW
"ÝW
˜Uá´;'TSÿÎb}mB¬ÍÂO8Š˜ÀFÎ­aßÏ‘»õÍÉk[T_m ÈvÕc¿ÿË?HX{ïâ.r÷îúŸþô§ëËÙ4 ¬Õq$[˜¦:]-T2 ®<¨¶6ÓÓÓ5h»Âò±jXc6–&±O°ö°vobâñù7\/K¹Äû9ò.?ÝRWæ— &˜§~†çÚÈZäV·xÛAU“< º´³RÚ¬¸BµS2Í\&#Æ	|ƒq¥ÉjœxìŒ4¶¾.6¼èLgçÊÃÍzDÙUøöCw}äy¶¥ä”â’¡ó€€m©ÇlåÙ¡>¦é4NþÃ-Õìpi²³l_–RøCÃ]|¾(V"4È*»D0äVzøÜ¡š5kxÖ *ÔÀ-¦M¡çõ:­¾hÒŽÏÈÐ‘­Ua_ãíEz[[ÑÕP5Û;ýPfªSÓð*M®â
zó¹Ípo}Ûôëý©“[7fz!³VLJa7eÒ¸â5ß[„æ@”l“5*›9oÓA|8m^Èh¢]
þð5nÓ±ºjÕ.ËNäf—4ŠÜÌU„Õ`­æŒ WW%¬Ý;N®¬9¹e	Ö†?×þ"¯F,Äþà¦Øl
OkÞÁ_ÒZ3®}SXÕ¼®ÖÄjT©5×§éµ¿ˆjÿößoã,ÿâ‹»Û¯Bf¬Hj¤3…ÈLYÓÖËk‚5W»æ¹n„‘ìéÓ»žÕV`5ÅÓ>hÎRSik<µîwF€jÆk.|[ì‹¾Õšo¶vÿÑ„©h”¡9<cqä¤™¦l<«é©	 W&ŽÒ·×Æèh_]»™d ¶ q=< íñî_¾"6	V&”¨‰·;;·w»°ÖÅÛóù»Ç=8zV“²ÆÃóZˆ¿÷O­jM–P³ÖÌjxA‚ ˆ3J$4¸0:sS6vîpwF,#>Ñ: Mp‘ˆ±š"&×þÖ½±g$±õÚGIùýè$3âÇ.Ñ¡á+D¯*ß÷>SêÚ¡‚ÕÇ[ëQkJã•˜Q\~?xæhs>P«x­·q3ˆKŸ…ýxÌÝ©K#ERÜ|¤hŒ “ÎÇŸ“ Ü9$¬AhÜâAd# 4óõßãÏ„÷}i°Áj¦­1ÒŒÕ
xä$ÿ•¨ª¦ˆ:Kbd’óÔÂâ®ywëð˜z‘.Q/¦K"IØ@.i:¿Ö'y­6«Hå‚­”B¤‡‡Ó”?SU7ÆfLBÚ˜dµt†9Á
§þLåÐaü„³cÃ˜¢ŒUÔ¶Di2ùWÆ< —É˜Á7«Äf}Y6õ)õ¤?Bd¢ˆ¼²ó¹Ä2…¬Ï¤ÔÃ\M¦)µüí[o¿Í]Zs°¦kÞòiáZlòÄ56“XªÜÝ¤ë5
[SH¼U–›š6WLœ1éˆ=ÐMMSÚ7í_¸“,,xç¼XíƒûXÒZÈ„ôN#Â·—=UíGkßZÀÆjCeB²°aa´¹èÖµhlä7…5âaÃ”K×&sî¿½áFŽÀÚAÄwÖh³6p<u<…°¦˜°‚µ&Ó~Ëti‘1›aJúŸ±uÁÓlxzÎ™Ñ«HÚX ÁZ.Mô«›'EÆ½s³uzPSƒ<N
bwÌëôˆQ¾F±0œ‘Ïñù±ÁèéïæR£ôÃ&’øzmv¶–ŸÝüÝ—¼·ü7>”Ó0lÖ.\äùQ.’UQ¹J8%…2v~rð/a›…)d½Ü6HžFA…j#YžÎŽô h¥q5NG({ëÊ¥å{çÏ?š¸÷ø†rÍÑ,ý’-xðÕüôM`íÓµ·dýh$¬IÃb9mM6m8ú…j‚3½X´Fã´³°£	Öä/rLß‚ë,‡§”XÉŽr"õ
âŒ¹ŽL	îÄp]ØAf²ÃŽ9[¡©åk™±Îl_Ï©y¥È2… Fa9„ ö{2$AÂ¦=•CÉC]Á«Æe‡‡#jÄàááÃÔX>R¡Ú53ì·§ ùÒ²Ö ®aµÑÌ·çVo?Òø
ÿÊð¤ÿNöŠõ$B¾OD[×Q<ß°U
 ,~)ßò ø‰pk°-¶¢[['ucß\ÂûÍ®…L\k}x£‘A<Ýð­JÓ2|•WQ¿E˜ÍZc§åPºþ¢îaíkÜû_CU³r5F7E5ƒÃVk;«?¢öùóë«ÆiV¯¦™ M¯|ŠkÏ>DpÏ «_ø«ƒ)¨êYZû[híYGHkAXSH†kJÜ#ª9Pó¡ŸŒøÿC5F×«/¬`Ñï`Z{Ð0i|;Ö<­	ëÜ|d÷tVfø–	µÞËj¢’GŠã¤2qoâ¸9ŒÖœw?Ë-=×B˜¨Æâ‰­Ý‡{¬™ç{«LžØøhü@S“Ÿ¾¡«mÛHMCˆ€MÌY=±1uÊ5kNµÓêB[ÿNè“ÛÛœ„l×˜¬q(âÁNø¨€Ø–ƒšçãSÏiN\{Šj`k³²\FÚIáksIÆd^×Ú`5ž1e­—ý¡5…T6£5y~¸ÖkÝ\Šš*
ªšÁ“ÒÍö
RYÜ©ãó¾öoºl‡ów¢zyã‰u]ËÔ'€M‡jàDeÎ›²½Ý™Döë„cGS7c5=H.Hkæ"ÒJ°ƒdÒùS°ÆAª}¡áP„î†ÐæJa«´w¸`µìð ~i`YDcÖr,*ècŸ4¼JßÈd¾Jå×(àrwaáîÜxÙÜ,)‡‚5t¶só55Å†Ó†²ã[~a!ß'›}Ì±Ô`“-‡ÆÒôvL$†3l³CÜ„ƒ¾ÆF@7K`×kJ¡”ÊsÅ-’5@Ùt_±^Ö•¡¢“¡TÊÒÊVâ	^§ŽÙ:¨èÃ›Ê”B5×“Ÿ“ú²h•Ã/kùÉÛ×oÉ¸ŸË³—Ö¸”:i\Óvfó0`­V#ƒÒòk²×dÍ±êŸÌ45ï›³êNlÅ4‰?T[Ü]`ŒuÞùpyõ!¬†%äúy¬ûŸÍƒlV×\» aÚ~yÌC5-Ì£<|x<Ó¾ü©b‹¸jÖ¤­}#òáºsíÔ8y8ez5Î$·”µƒ8ˆï&¬RÕ¢Ý¢Öòš­Â{A2a†ªfO‹Ö”BÍš;×"¶­¯®îmÃ¿‹’±@öcja@ÂÕèô¢6ÚÈ[ ¿Y9IJ";³hkÅµs2™¯'tŸ0?þõç_ÿüóy”µM}‹¹Yf2ù\¾#¨mwiˆ}sfrñ«¿ÙoZÈšñõ|vñ=nÝAkO’‘á¾µµÙ Ëin…–eŽU†ÖòùD£“Ù¡Î¶AêÖîÞ+Õ‹f)2‚säHºÉãnáéenÈÝ{´º²°…€Ã;«jMD@@k¼'7rß]2;~ëªÆ€õ#f%û—Hâ”K’|EêÚ+$5ª;ö¿¼eùì‰Ä®À^ÒæTÎ†v`ûS§ž{‹]
ØÈ€Tó5˜MÍ°<uY;rj„¬H`NëÓe8’íQµL¦ëÚÛhí-.­‚µ>.ÄØö÷X@ä³lÌ,¥EŠ+øTqØ@Ë2ƒ5¶aoåÚ†yö»ý@Z†hÇTÏñ´ÍV7S„Q¶!P]À:½k¼Ü{BÑX‡X£µýBÜTOlIžrï¸“¥jÙP3½;;Ý­±“©¸±ZJÚšX­…MªÁjÚì¢äÜ2®ù=èw3¨, ÚÓº}êŸTFaƒç‹Õ£%a0=™É`tŠÚÒ’O€dÃxMàÊ]º-"ÛÙ¡kßÂšv¼´f¬ö€[U®áUòÁµýyÍ–¿(´‰×Lb¸Ö¬­™'dsÕZH‚ä’ }5±Z@5¾_3©ýªINû‹	¿¾½`lÓ°¹ëÅ.™ôŸm8‡ kÄ‹SXA*¸Ã¡ã¢5k¾íšñÿpwt!ÎITÛûšaÍ™A±¡®¡ªùxÏ‘«VµfÀöÐ+kÁº_`ÍÁÑöŠÏ„Þ:Ðì¬ï`¾ÛØ•ÂuÄzŸÛ¾ÍÃ~¼f[-j¡fÍ}?ÇhþM|í#ÇŸ‡Ì6”¹»«·ÛÞ Z/‚-$O§±¸˜xd#AÌË‚¶æËÖ>Äæ«ÖÖ'šCek‡"4R;Ú[\¢´v¬Ù4ü8XK@h.âˆñý1gSÕˆþÞ™“©”RîÙqÍÑÌ!6
U­ŸˆE×­}âÚ+~ÿ¯¯­]e`M´àÚÎNª=¶þÔRßN\¨Û@’ÖLjãIß`Í9‘´sjp÷u\Áš†v¼7À²«í“I^}p«$[xB'8-™p}…A‘à€yºZ¡8ÉáœµÅ”1Û´k¸¶Ø+û8.Õ›Ôó£ªÄZ0ÑXÄÿq|SÞýsPSŸô´sW–fÇëçØêœÍ+Å¥ù¹…ûÊKWÒEÝ¡Ãç7Ù6ÖFgF˜e8·F¥³âlÝ™`I%Ësz+Ï9<X¦ Ÿ- ¬”Yu3õm HFOmÕ³UC¤Ö—ë(}Ö¥4+Gaþ¶ø³	ÉŸq4‘Ä
„îùÛÿxýÉÃ‡O¸‘J¼¯0e”ªù ÓN~Å¡IYÿ«]ëhm€-7Ö
yc5–Z;°2‰8ù¼ÑZ¡¶ÐCMlA&þü›¹sgùƒØ{æ¹úp½ûü?HOkÆgŒî¡ÑÿÇÞÙÅ¶yy~±{½˜»,Á¶ Hº1!É‚A!K‚Ö6,‹_B4K™±,;¤œ8´Üø‰%g©+­=E$×Q¡`Œ=›XÄP´M]ÕAP×í6;ÈE¡ÝA·7Ó˜ËýýŸÃãcÆÎtrm=â{Þó¾¤¾üñþÞÿóüŸ¾˜#ªg`íYT;Ð¥­PŸâ= lg£í÷|kóë}'Õ½‡Í¹?ë¬û·am;¶ãEŒÿrƒå{uuUîý'OF¼ØïE5wÀ>bá3k£¹7¤¥ÑP­¡YÈÅvªEe²ÕRÃC¨yy4kô8ëqo’ú(«~,«Þüþ›ÙÞÆÂòÆ\£¾1wíßþíÏÍk?ÛÀ k…¥é&#oýŠÚ5îƒv[™î_è;ÛíÐÉŠôíé¶ù
Y×/àÛß•Ö(ïžH§'ùxº@J¿UJ:…s¹|ez ’+©Ž~i˜&lãc$— kØ{ŒevM#nayîÜææ'·Ò—6õæÀn…|Gà®¥×GŸ ¨Üã[rîÿ¶ýˆ^æjGärFS£lWµ‰å 0P{±#Šã3Ê©„â3à\2,XÓçX±Út¿aÃiøøh‰­`ç•I£œÉ[d™P•kýd^íL›[Ê&þãˆf¬¤i“ÇT½°F²Ìô$5	®xEå&Â‚û\¹‰ñ8ƒ)l|X“¬f#r8êëwëcv²Ëé±—­»tP²$P®ÆÃsœË†ôÑ×n3à!ÐØÌŽ¬Â®è‚ÁÚE™PØ¦Ê4¼EF(?Ù×i®´©–.jšD¬1ÀjUÚUà4#×*5ãcÂ2q[)AËXåC
Kæ††y?„•ÃRÑ4ãÇït@MÌF\:ñœ{´¹¾þèö£Û›7]ÛúúMÑšB°Æg1:m\ûÑŸ~KqÚ×ÓÚ_ÈŽü…‡5ÅWi¹ÌikÖBXSøþj_•Õ|»kµo?ý×?Ü¸E<@Â¹@CDëfNZ;ˆuLF8Ç3 /0HÐÛ”…ª
™öÛRä-ß&Q¡šéj¦¬é(Œ8\sÒÚ¼sƒTØ.´Ån<Hƒì(k‡ùÙM«22bô²—ßyï~X­"íßÖv’²(T{Ôlx:ÒÞRÊšÿº]²š§5ò,ÍU„ÄKu Ý²Ÿ£Ãƒ[[‡ýg‰™óç¢4H÷ƒ°æUµSšÂ5} j>Ö½ æc}m$H5ò8`]°C6dàÝùDÇR;ßfíTL^?£V¹f!Z;¤8ÿþ!æ²Ô—íÈ¨¹«¬Œ£ƒx÷G«—Q¥Ê{sa§S¨fÆý›çXFÍêÑçYjtþœ5-°é¼ŽÊjžµkÆˆÕ¬…HÈK$žéÀ)kœÑD»ž¤`lCµÄU£R®Èó_çèmÀ½TsÀþŒL–€Ñ )l0Ú¢ò å£ÈlQ&¹Z3O= €‹8@*æ6eòMÔéFz5dxùgÐú±a…k¢r•×ÞZSÂÈÚøRaNŠÆ¦Ö&X/(Q›Æ3dPWwuÖœä„5')%ð¹Ü±ÉÌÁõÝ\¹ÃY‘ð~ÁZ¡Rm.-UÑÍ°_j–r5¾'«9HÑ^’Œ˜zJY\K7äÊ’åªø,FøÏ¬É¼¿Öò!Þ?µx¯‘z>O§’Õ"àgÑÉEýc©·êyù>6(«•ªELœó$JªÑA‰Mð¿­==y?È;÷xîäíçJk„WÕ£5‹î®Ø7êƒóÌ‚ý#ˆM§ƒ¶¦‡›mÍ¸ï]jÕ$­e­½ûäÇ}wC¨'¶HMÛ°¶ÛñBÂ Æò­[Ab³TPûh#ö^sÿÌYÎÚï	ÖšŽo¼Æîé+N»ED³ÉzKÔ¦†1êå©¨•Ë‚µj"†S>ÂZ³<°±äÇ±°;Y+Ž,7ñ$n^ûÕ¯~v=íÏË²?èŽ°vm¡ùfsùü{íó~½ÿßú]ºb[XcP¥2-®§9>Mn#Í(šN«'öädm!7T.ŠÍd¶:9Yj¤êyF^Vº—Èú¤üÁ4~ŠK°ÚI «{o]Ú»iÍ,ië£æ0Ò×0„D[“áÅ½Srr<=«)ÎîAQ›ÁdæÈi5E3HÄ7Bú Ghd¼€^l@—y9š¸æ´¹ãÁcSI,û£OñUÕSô¢AÍ÷ k$¹°†rÙ98‘›DÊôOgvö§ÓNSpgf"_H4“§µÂXÁÙø©Ã9¨¯mîËè*%»:HÇH“÷]Ái=g¤ÆÜNuô3N1†ÖA>c­ÒæŸÔÍ´‰Ê„c^gãkèÅÞúßÍB­ÇT´«q]°æi¦å¦­u\p›™ïëÁWN'R±'­Ö€5"ŠãˆELñJYxF’(ÿ$ÊÕ¢¹º¿´±Ðm|¶y¢©òúµÇ³¦­ådØ/“3é¹±q¤cD6°Mº+îúMÎ«ë71ðw´ÆN';°F×µ_þáËßþâßÅ5?ë~^‡òš"Ð‚Y¨Zû:V3aí¹¬¦JµoNj¿ÿÓ—?¿R	§Ø‘»çøÍ¨_ÒÿÄ™úâ4›1rHÌìg=èIX»tâÖaù÷—kX¸
Ö¤yüD'¬…šµëNXÓ‡>¤ª±uÙ‹Ü¿~GÔc}®ìÙb"ZcP8Y-8xTGñKî!Õs@I‰­u`­Û»ßSá yeXë”ª…G ¢P?(é<!ä1rwçÀ'Ã?ÁÚºißà«EkÂ4lÒÖÁùªµg”5V‡mw;æC»;P¦#±„¯re Ö+ÃÜG{§jÇì´Ô>429$VÃá<û×…¾D/=¹ùÚÁ!“Ö,ùÙÜ„®xX;JU1§¨W;wñ£7Î°Ú¾”‰hj|Ý‘ô")l9éz`‘A¢‰=«DK'§õ™ÊÅO§¹Kð°&iCµUK&Äb¨NÕx"^*%{Åiq”zU0áÅb4ùŽÔTËçÓ\»Â­0å>±¨(Ù‰„™ùëPé‘ºÏ™J9Xc¡lVž5“ø¿4Ý¨)ÍdMˆ…òÒZy|jljMÉ'™~ðX~c©4=¯³=°µ·SSé~Ö¬Qh·Yâþœ‚žÓ;…kƒ™q¥{»ŽÐŸ<•T‰&ƒ®R)W­’3lÒÚx©°´VMÆ¢˜2åKò¼3Â‹™
…èÅ2µs‚µD©‹yÊüTž÷W¹î|~•ðm±½_^WƒÙþnqñü‡Š²“–;£Õâ_Ž*šSüý¨”­A“ÔZ4ZCYKfÜZdB²ÏSTÈaþÔØÖ×ï ¬Ý¿ÿáíO,’zo1â«Ö:›ªÕ4²3œúú5žíÑ@46æ™#Oø"Ò‚+^Y°ö(ò4¬9VÓ†¶¶kÛ±/\üWƒ5pÍŠÕˆ½ÖkÌ\07}ƒcRTÞ»è+d•zÂ‡’¯ƒ¥Ñ…G-‚§ÅŠÌ,ÅÝ°-2¡³f“D„¬x>OwMŽkòÆò­¹µüîìB½E¹ôro+Ö¡&æÖÄùH'X[ÕÎ·ßkóí¾Ë mÍ|9ƒé‚Gí2Îý£«d…XªåŠ|7ifcé©tS®Ã“cér³Pâú>^hr‹®:)‘´ÊÆÖ
Ó£œ‡/ÍÎÎž¸q[ñrqD ¬ñAKƒüãÅÕ©ï®å2{fD[d2ÎöH·B5¶ýÀ™¥Iž9«æØÇ÷óösÿÔž#§É £S6DyÐÐGœA–ãAÌC9¥šµ)–bº=“cSÓuÇ	lûy¥M’ÝÈœkéýÐ&6]XŒìÇ³¹2VófÎMLŒ´øbÝœI‹×#Ê†LØ–,Mr\<$5€…›âñ	k]Mf»»Ú÷rN;ÇZœ¶8bï!ÅZ2ñ°æÓ$‰×ÏtÄg3¾’~Æf£píÑüP Cñìx@^‘¶ÆÞî®Ëe`ó¶"½}óG{G7×e)«)t#XÃÁß‚/gššs	ˆÚhN“ðq¥ûh#ÇE”¡xZÙA'š'xOäR— µæã·O”/]2XƒÕ,®©`­ÁW½ÄY›5bUä&>#Âh°ýÉyäÞ§?ú×¯=la¦­ûöpúš—×‚¶ÖU¶Ö•ÙkWMX“¹H`µŽs	ñMIí×¿ýŸ?úôžïÆˆ6`uh6£Y¡&NZcG˜'¤o¾æƒ®ñžàpÖ:Â	«)\Éš@†9ß±+2ø‹„6kAVsC`5¯¬u4~n”5!Ð-¾Y‘>Ï0(kz6àÛ–l†@5eC«Ïš÷ƒ|–ÖÂ‡-ðš`˜æ˜¸3[{õ›ÒWm€ï¬!­AnýäArž\ÌÃÎ\ÄY÷ëë<´ð¨ÆÎ‘šßÌ_ÄŒ„¸{àäŽÌûû#a}°4%Ô•ÑÁ›yX;±·däº¥H:t1ª~ØFkïÃh‚´}œ•ÞÛ§»9ªiÛ<8´{Èò åë*¬/¶âèQÖ±b:·IRèŒY¹ÛH&DŠ‰-lŒz
­.Š¢‹)éñ°žÉkFY	ŒŒÖ$³•„h½lÔ˜	@œ8R’Ë¤—?ˆ×ý²dE’EIØŸ„45õ|$’y".3&Nnk5°«O%544h­0×$1Eýš¸h^[^#ÊÃ” 1<AxíÏÔ¯Z}Ò0ëZËìœ ké4ÁN®ò¥
ÚcÆ¸únï.•RÇ¶KžÐš8s\òÝâ¤­5K`]
²Åj%mR^³ ¬•«Y¡e¢¼´ÄÏ´Æê^.°ä6k…µ.°æ›RlZÎe«tZƒÖ®*\dÖ”*ã|FØ_‘ƒ?#Ë©TÔCRÔ?œÝ‰ì"##°Õkµ\_#Ìb_–:§ŒÖrŒdð,¨ôb„k?”´¶½Ñk^Z¸F³µWÝÁ«]]ÕB<££ñ¢ð”ÓÝ±uJß‚¤m:!·ï˜Ö”¸Ëäiemh½o·¥@za\s¤æ>¶am;¶ãEƒ5·rŸ„Öðƒì¾8gaFp¤tóòGX£×pÛ±Ÿ®8í‘¨Ik-rÕtË4ew½j²x\Xi¥òxæc\kíŽá\.’µ|Œ¢6ºbãLÌ‹píEú*å€5FlüßüÙµkhs‡Îvþü»‰`JËòýÜšb¶úùç?yÄt)×rü{pŒ®ÑÀ¦XÓcäz(¯£\¸6‡ÕHN°6Y)¬Íñf¼¿º6|z`'ëŸóxvìo§¹Îë^.í—ÑÕø};í¼uW¬ýãòþáåöÈ€Á
ÚÙ™=•I@ƒ¹ØÀ®¶ãkdCBhÜoç4`v…ÍÐk†\IAÚÎq´†¶&Xcž›9÷¯ƒçHŸœ¢lm€˜žÆ’J¶Ó§Ó$R‡9Ç&‘‚¦&UfÊÁ­Ü6ÕmReòUÆ9+X&ÏOÁÊÍß5¦M"éÖÊLÆ™2·<H¶ ký]QáXJn/Xsçk=×GŸé£Ïé9FœÇ'“^ª™B¿Þ¡y\]1¡u\¬]!?Õ­m¢¼µ£©öÅùÑžõÍ¡Ç˜
ë‹­AßÕ«–ÒUQ;¡Ê˜`-³DÑ”–1~ÓMçáyJ8"4>Æ»¿yéD™ŒGõM«™…ÿÚï:m±AµMoðPˆÙ|™šÖì´Oƒì<õŒ× ¯çØÌŸaB›EhÊæh´öïIkÞ]äê‡éBÁŸïdµoŽj¿ýÓoþðéÞ€j
1£4ÙˆØäå×OXc÷´°Æ³”·‘÷(T›šâäþMÎÎv`M°«ÙŒpœFÁ‡bµ ¬]pi6øFk!2ôYãÃóÛ–÷èvÕ®™ç"™†Á¬ßs”í}la0âYmàÁsZbËO°ye­›Õ:Ga¶udËyŸÜÕ%Âb¨\N=³	ï…B„>kÞºßÅpš£µÀk¾ÏšÅ:«EˆÝxA:åLoôÙ¹žØÖ¤µÎ-žDFsTÆ¨0kŸDJ¾ô|&¬10Ê’}dß!öT­¥v÷¥"ûT\vls3²»ïäkŠÑˆ`ÍÕ«‰Õ\4rÛG_#ÿB{}sSFÆæu
Ò†ŒÖørÞ^D	#>†,ERkä?R$»q·1†'©­7[ÏRõÚ—ŠVãÎc¤T®â\%÷þªÖ7ÀJŽ#¥<™“ñ,¯\-âÔ¬UÊ„8NO&âÉ¤sá ÍX(³â6h­G°VÌÓ›³ôKd«ÀQ«Ž—Y3Õ4áµ¦XÖ×Ã*%ÆMY½ÕÄUs””­1Y"e…þ¥KS“…l69¡ty-Îà¶BN<±ËKŸzÖÆÓÃ–à¥!»)«"=FÖ	
aû”à°î§¼©Œ‚B&a:`	n)ãP[AÍ²›ÍBž_ÈxTª†˜ñØ«V*©9mÍ`ÍÓšÁ›>ôŽÂ	l­2ÚÆbÙâH,ÙX®×Gô¦"–†éJ²ˆ|—Èå³Å^C4peÓr&L"¬w’Iƒ5² ?°æQM¤Æöª¦Œ’Ö†fiÞd:¥#Ûèöñá³™{Lóé­ñ;+˜eM—¡Õaš«[Ë¾õ¤ËÚÞm7ÈíØŽÐ_D°Ý+imÝLwÅñ–"ì½Ïˆ…îF:X‹Ö™33R°{"¬Íöi9f[d×já©K²äà×_Î-,žÉcœO50zTä’9µOk°ÑûÍ¥¹åÅÖ
àÆ…V«‘Æ¸¡r59ùo|ðÅùN½›Zýëg`ÍÒ ±{ƒ5àÂuuY;1¼6œI²pæÖXÈÈ
!’ûpÉj¼V 7¤àîS"öÕjÜ?ÌP€ãöd<_žìÏPC6vYëßì=PpEíG]Á›B*ÎÅ‡š—_:¾ÜþÁ´:`Ë"D±!-	f3èjÐØ~yù3}	¡ÍŒ4IB.#2Üï”²™³|ö™30Ò;‹ãSÎ,r˜ŸJ^²öÿÖ~`o`ÏŒ´µ=Ðšš¬¥'9˜œ’4wY´6|ù»û‡ÕaZË¨¨5ý-k¯”]æ,mNaµô¸ë¥6‘)Ç3ªh›ŒãñåÞâ0“ÁšŽ•©õÛ§AêÈ;)2õ°æ$7aÇŒDðrT®#cC´Î>$ö;ÀÂuÃv'¸Ñ¾Î8nBò¯3HÕ¬=×;…+æ
·o’¹JTûâ#Þ"Ö…€ÕFHÇ2t€Z’Ñ5Çf§nMvýÃiÁí˜nC+uÀU‡ì2wMµ² TÇ‰¦*Ô6~¸©ýÙT7×+Û.•­’é\F–u,!	ÖÜY}Ò/ÿðÏ_þéRÊ<©}-ðÚW ÎH]ÚÚó¤µÀjÏ
kÝ¬ö”¬öM45HíçˆjF9ÖlØrˆ&£þ6l†=áaí¬6^àdÂ#VËv|öDšÃ­[°ršàÉÂPÍ8ÍMð!È„Ö˜¬Y›5@ÍkóÞ^Äâãî6kf/"7ÈŸÜs®"<ì›Ñ2@Ø$Bâ(`“Ÿ0*pƒÔÚþ~FJÉvÞzâ/âÃsSwÅZÖÜÐÕeÍû…D)RÃçûAÿ€ó2Á’ƒ­>ÀVÙYzXót‚š5C5"Hkz•£µÏÖCÅš&Hkwa4‹°³÷þnÐ%!æüeìã‹ÖRQ&*h2zƒÄžÀ£ö‡T¹Q«5f0›å0ÓjmÈA<9vQæýï’ïòè([s!aí5þç¿6-0µÆ,i}'5/– ­u’]Nð¥ÝÕEg¬¨M/¬xdôŠðxA4Eè§Ž&ã&í'ràXœ†khñ]ÀIX­\Ë'z1ùWetŠWË™xO« %¸Èˆp@6Ò µÏò™õl"†¯H²‘ìÀUÞäÿ-FÕ. ÈÊ®711äjj%ìˆkÍ%ÁÚð~ƒ´¥·¾o£BmTZzkŒíMjH„L­R†ÖÓé±Œ´>¹HMÂ•ÓŽ³é‡ÝÃH"ä+ 9À&XÇ³¸"cS’ìÁ_%Ç‚ ³UÉÂRAõÏU`»ÇÂšzqCxccüÖrC…‹	Ö²ÉË53ûˆ,H]O>¿ú=Vç«}`ø‚ÍhÍÁñþbCIäÖð(Fwgcøõ·øB½y­>²¸Lñ£ÞÈ“5üWx)AK6óú§X~õ>v÷ï¾/v0ï†5BÄ64ôj¤[Qóo¨H,„¥A†É§í 9`ìú2£´YÑ|ZR×}îWëk½±P±æ•5hmÖ¶c;^0Xû+`Hí]=Q5¬Wú9Ðš¨¡šNDÌØ˜à$¦ÆÇ(@Q2\CÄ·‡kí‘¾è¹+>Xë%‰X9¨K}+eïÔ Ú–‹Ë+Í¹B¹†ÃG.+‹þ9VhmNæÄ\üYl6Vj…k¸ø³B][Þ >xØFY«o¬|ÈE>s+ZƒÔ@µqa9x{íñ®ŽÉDœ2®2yþ¥j~E5ß¨çÈöce{m¯TSŒ62d¾MÇ+Sªy†!š±ý—O kTA<$`53î7qML “‘wÚàVa!GlùeÈO ‹>²‰í¬Ð
7þ33´¿¶¤È3Êv$Çä;¼¡¥ñ¤Ü eivýÎÃÿ8Ð'imf"ê¨¦g)Xë8‘¤´µi9ÒÇjßØö›¤–Þ$Ïú-°‰¬ð"’c\ÉU£/$4~eîœVœÁv…¾H:ã:#é$h¦Ž@ƒñxGUÃûñIÍš7!‚ÜÆ¦Ñ¤´€CÈrÔ^;vüæQ-tÇ–tÆÈõD÷œd‡¢ÖÞ½»M'%@ZBe§JZ;*XÓ_‰Î>Ü|`kÏ¿qq¨ÍÛóëÓA5Ý7ïµã˜¶¬Éˆ*X«&eãFõ=Çqt5rG•CËœŽÕcr5)wkKãüùÀŽý¿£+öìÛ'~×Ôçq‡¼$“ºÆ¾Öm,`óÍÖü“oŸ˜õ/%ÞÖá§ðÚoñ{ã´.H³!ÌÃ£»¶9ù´F|½°Ftéjbµo”ýø›ŸßNóO&À¾ °™±ØY1šXíˆ³í7ÇYŽ°ÓDnÖ<ÇX›:óò‘[”¤ì¥5/y93HÒþÌ^Ä(Íí€6ƒ5HÍ„5…#¶@jŠn\óÊÚÃÎ¤$ráó)ÁóÐäÂ&þð.œ¶çHÿ æ"è]»î‚iFklÏ*kln.bƒÙ ª©ïý\$$ðÙ2‚¤{Ý–¾Q¿¾°æÁN†+'ƒ²fDø 0 Úƒ!›>‚dÇ»= ³½ê‰=ˆšæ"àZè£ß‹º¢š¨¨aÚ>tZK0ÄzSÎµ_/ìæãÔ!pF;E½Ú(ú3<F´¢°ánuHv°ïÿ·;Iö^EM‰\X™^»è`mž$HåDÖG¹Å¨wÛ^Gcg°fù‘Îó1Å9;#S'þ“(9¤>úvï‘êê»1ÅØÉªDùDÞ*»”IÍ½«É’„ØÇbIH­Â%¢’ÜÑS*ŒO$ ]W/½ecI$'ç("ŸÅ‰$°9Æ"™bµ:¹…¬“øfÒ×¨)ù.NLäDgã%ÖBÝâ\È”I¬i(€f$ñãÙ,6„q¦÷s“ó-Ù÷o,(«qgÇR2±Ãh-^*PªÆ|zZfm²ñOÓ˜¬o„²i²%ñøŸž,åËpSâ`"Ák2öOkûãekŒ]N’îÙ$ee#—è±œÎ"-òŠJ5;BCìÿÃˆ¡šh-Hk×H„ÔÄIk‡Í\q¹U4XËkù(n4Wø‚-d%m¡˜Mµ–QÕ„F:PjÁŸRãTke5nõi÷OF³7 µn‡ÂP-ä@j:„²Ö`,ˆa^;3.Ó±ˆŽÁ4>ºC_Æ®ãZÐÕÕÚï^ñÂZhyäam~õnµY3wïÜï¿ýçÿ´Û±/¬ÑgÕÞò í’ã»î»"5c5ÍtË1¢ íŒÝ†<–Áäà=ûíàÛ/K‡áÝVcÚ SKž¾j*fRvù\“«ëÈ"¾üî#ÒCG9‘älüêûoIÛ¨•U!MæcyéÏ*cc}j‘ê°²Ø†ÖFòµÆ»–öpí=%ÀÈ`„;vXA?i’@/s\‰Ó…Z£•L’0±RÖ²	%5ª©ñSa«5Wš˜–É4ÞÆäDÊ’€×xk>{oZ›çw{H&$WYÞxX{ÇÆÏªS–±ˆæ%”B%“)ñq€¹¨»Èxó)xÅ”í¨‘³2ý×À³Ö¤Mû/ë4ÌyaÔß1™Lhúä©iÞý…;IzÊïÇx„ß	X;=ÅÆ–IËã»ßç—ÊN¨ú`_5{f>…ÿc¥Â²]È¸…z…'H¸n0ÞÉp’Àä¸q3g-â¦½6cçÂÁš•®…ÌH›yHñ—°Ð[ƒ_=¬õ=9ö§¼RÛýˆÞë¼­–‰È;-·EËŸî­óW¬½ÇªLåÊüfû#cÃxÑÑˆû)R1Ì ‰ k1™L'M´*=NVcãüòÔÛ£¬ÒXÍdâ²Ë¸qSYQ¦Æ^§I"SXC´™i?¿PØ8ñõuuY±*>c ò£ë¶æ‘©‰ÙNèúµŸÿHÀ$¶®¾kÏ¯dsçÐZÖžA5k¯a-°)ß Õ~ñÓúòGš£œ®8°5ð€R«Ó Z0Ac“!¤ˆÌ´4xR¿&ñÙinÀÚ/ØÊÌS³',ùñ–—ÕØÝŸ)‚4fjB8eÍ„5/­¹–ØØ˜t³œf#÷œä—°LH“ðv25$ÒÔiãø®3ÿÀCWÿž=Œ·\“5Õ:;ÂkÁ½ßŒü2Àš&^d°vëÈÖY˜ˆØÉŒÙj`í¤†vÜ4þ{FYûÀ¥AZxRã5 Ú3Öýëví]?pw¯Ô³ÞÝƒ„® nh­ÇÜu}˜ñØÇ•:ÅXÓÚÀ]=Äªè>·P§¢Óóñ—9£µ«FnÃgŸ´H!Gw{ã£‡P›ÕªÀÚ[ï ´s©6/Hˆ.y4jŽ2“tW£6blÆS„ô=s…äe}&´YÐxB/0Ç‘z´U/J&2X«1Âz“b4M%§%é–V,×˜rû/‰ÓHOH aäGÊe‹tøÌó*þ$,™<¡b0”FHPµÞQ¢Õ(rEÊÕŠÔ``¿XßU)7éxOÔW6dÞ¿ÌÊIV$¡{œo®•re™|,¡¯ÍÕë*sÃIÃ)5²l°F›Í¥4w£îîÃâ6[WMƒ5ûëãGÂ¤uãœœD€›žœÎ”²ùñI.†|•Þ)œµ„Ò5ÖÎ•Ê,Ö$xV£¼¦,rhÌf{‘"8±”&øk^ýø{×oÜ¸niW_	Ek>$ª«i÷w+ÍB9_$ð•ÎçcüuäkE ¿ÕÈ®â± Úv¼2õve-ŸƒçFGZzRzÚï=yO¤fñ¬²¦-qs[Xƒ©}}L‹t÷Äv¤fc <F«W»"XÓ¯ªºµgzb÷xPÛ›8|+vXát5þjÖ¶c;^@eÍ9:y¡Ÿ‰o}m»Ð] Ö\2J©gÒšÑÚ3møç×£Z™Z´¢*X©•’jù)3±+‰\[‹#­X=Dc8ôS³Ö Wr£‰×kL3W ÛF+Eæºú®µVÎ?ü`ñèÑcåcø4sÁ#”¬a*A¼Bh5¸Áâ21(D°Ö5êq`­QÇ:¹˜¤à›ålN•5–¥kÍJ…lÈæ0PÔ¿gØ:“Ñæd›½Äý,IkV²¦nËOÃ¬öÅgÿòÎ;íœia°îÐ”¬9qV]ÖÀ3«í—‚vf«³¦ªI2 Ò, 6àM,§„HùüKU9-V›23‘=‚šßáìKÇé¤f¾;O[öãÔ$1Ž¸¦×L¥©o8ÕfÍ\JCƒªŒ¢Z*¬¥ñ„œˆóÆª"<ÛE–A°2˜™ÄR„ ¾kÙôP¶žÕœÀæ*Ô8ò˜Fp€–¦¹`-ð›…g6vÞD„ÍÃšÎ8Xs£ƒµÐ¶o¨w÷ú|{~óÑEÁšn§ÿjÕ¸¹®Šm3‰ãÍ·Öq™o?j?ê®¦ÌSd_ŒÁ•Ï8­ÍÞ;f®IA9¹ëLµ‰Ì3Éƒdã·Êð¯LHkE7·ñ¦eÍašõÀvgÂµÿ'3ƒµxóûú4öš¹`o˜&~Ó€Êv‰/ÁÄ2'mà!ªØ~C	›÷ˆdt5¢;1Òï¾F[y_Å5PMš›ÚaXó¬ö¿ÿc öëúÒ’}aÍRöÞ‹­¢õX3SÌ(²Ói)s'¬±“Î¦°Zfëtzv× Y«TÃ2Ðš,êo›|ÂT‘ªæ`ÍW¬™ä<›2!C\UkOñÚýO`5g ò90ºÑÍŒ"…tfÅØ)º¤5U’©ÙÂc¡XJÊZÖ€µ€fÚ{äõñ`àðJã×,Ý7Âk„3[OSÝÉÛ·÷îì_}’iâZ(Yc`sÂÚgØDk„‡µ6<<°~wð qs!ä5fØûz5ü§—r¤ã˜Ijj­–•¡ˆØIö¬²ó—ÄFÂ#Ár°‘ÿ¨ùÐn`‰'°häZ5oÈ¾Go¼Á}3.È%§{X3Í÷Û|£½N—Œs›}æ7Íõ„HkzÝ)Qã‡
QZJO‰æv[ ªí½I”ÁuÖ)¹Æ¬es€-ÓdÛÏ@“/UŸ*IüëµP“)—ó;2š¤*Ò*^‹Kf½±c¢¢N×ø%ª£OÅèj”¯-¶²Iü Y¦ÝÅ\"AZ_6ºœÅL¿†ù—J	ˆ’øÇ–”YÓZÚÈÓ’ûH|4‹Ñ|n¹¶ÄuŸª5õ¢‘óGìŠÇ§‡÷§3¤½[î#î°Ù ¢lXn×.ºfïâ¸‚½?¼ÆONI¢š—ôfËxN|Ã¦ã!³	Öæ@7RÂ¹Êa$SÉfIP¬æ6j,"å&bc6nšÂV’ÀiôãïÝé©þ#NÍ<­½cáH¸¢	 ~åÛï“ISV2NQåu”µÙ¥¤7Ò\©¡+ØBâ`Ö¨aDÀ6Z#ËÀa±à¬5Š7qíÒZÕäMvç>|¶Óšd5Oi6÷þgXÍ{>(cÚå†>ã5mE©G¶c:{6‘Ñk¸£yX‹Å:ÊÚ§üEîmÃÚvlÇ‹k¬³7RøXµ‹HÊX-\…Ñ¨¶u‰YçDpœŠ}‘‡Fk.Bþ‹.æ×Í‹Ù‚õ‡•p±ÁÁ–î Ö£’ÖŠ(ekô³lÎÕ¸;µ–Q×¸?FÑ²HÏ-`™c	â¾Ù5Zf7-u½‰ÎV_ùàüòòúÑ£££¯þÍÑo¿ü ßƒÝ\£5®É`5¬ûKù\%žÌWðëJRMó¬d£˜ˆç9?^.Ï-­e’f¾Ê·*Âjkk¹†ie@Ni8}éæí—k››º)÷š[X$ßÒÕ>[ùm±Ì'‚j4N;KêãvüÒÇ°!—›#JØŒžÕ™ùÊ,íË(MøvYÕlê{­¾l@¡§˜L^¾LSl°o Š¬©5iœQœ¶ZµÉ~6…š¨¥ÇyÂÃ"E±i¸˜¤EöelEJ×@,co¬2$³àñ•!§	´…ÂvÈf$S1X«˜bÆË|˜É[èÛ£c†»B3â3g6÷;…Ffþþ†d®>­ƒië4óŸ#a­{DµˆZbó·Îêwô¨¿•+f)µ%t}ó\{\‹¤È…²L,†(aå3û0,3X‹&bH qÕ¬9XÛaªZf\Q(¤EkRh3cf[MP–£ä9³ÍÇŽ×–Sp?û;ÚYÃj<äÖ¬5U½vk&š}rãíëŸ·~HL36Â‰mÞÒž±A{7±|Ê{Fl±^d³¡3íÝài­Öž–Ö^ù‹ÂšXï?¤«ýþ÷?ý5C³Ñ¸MG”yaÿ Gû—}HGÓ&5Í\ú•ùº`ÍNëáâôÖç™IS»6{æìÀ–kpÂÓa^ý'BÈéÓ×´1†>k.BÍšïŠíQ-(kT­‘Êé`ÍÜéÈ€I›Ž™„_ÑN9¬ÚRÃC¢Ïë¯oVëî²FtyBv—¬Ý`æ¾%;M|ðGJµ-,[·¤§=P/8l()eãUOlITk¶µúK}ÅéqHñZ·²Æ‡¤5W³
ÖÈ‚ÜË¶~R×DÇÒíè1Û!‰ÄH'Ô"#ê—ÇjÄ>õÆ’›1Âü›õEv8dM²UN9Q•ªŽÖÞóÊÁÜZvàÛ°Öæ6M$Ò&×cT­BA½¡!—öèÌ„´ˆF÷¥¸i½×d/BÄÔiM|—ÂÂŸcüõ÷¥¤uÑ{fw,&LƒÛxŒÈÒ¿’LÆáµ´–GV+W¥·!<—’pY’¼H
†Iïàs+ñ¬³¶d³	øNYQÌ1‹ñ<yƒ¤Tæ³pI”ú«":/®6(#VS²•aTŠ™¦Ôœ£¶›¥ •¬PãêÙbyÉpm˜mMW²É”×Sà6™¦'A¾	`["æ Ùƒ¤Á§ûŸXÄp¯ªº#>±³ÂZQª’NXKlµ¾¶²Ý¦JóÔ†–lài)›,0îÇÿcG¤Ãy…XÜ3¹Uš·þz×¿w}µq‡ÅY+t€µoû¸b°vª5råÊùÒ?kÀš~Œ¾v*îÐkQÕ+üÎËûRõbÏhb¹U‡k“Ê­cA’/Þ¼³zó‡ûáÍïÜ¼sÿÃïxX{¦Ó6Ù¾cp­KFN"Þ?„³ÚGž›ÉÆd5ÆÑöÁWÕgÍ
óôáXÍ÷ÄþøBÖz»û÷š°¶­¬mÇv¼x°fÆýQ·~ëJ’
°Ö™y]M«	ÖFLc;ÆZÙMk.ÕÖG,Á…m(Õ—­·˜p­•…ª¤ZÀ‰æå²`»€}$C.4bµ7Õ*¦PØ€Îæp‚\(6¥¤1ÃýŠÄÉÖ
ÇÒô¿N-/Òõè±ÈßHF±†¨Š+½XÃÏ>ºpáóëo«Î¹\­×Ö
Õ,Ð‡ÍÆt¼ÑØ5‘Ü™Ì“EBžÇ8_»ÀrÆÝ¹Z®ymn‰R®éŒªÕÓpQúÒ'wn¥W/ÌûË¼”5 Qƒiküâ_¾@Y[Ö@¯ý3/É¸ÿ´™?R«v\ÊÚ˜¦:5¥?¢±½Á¡,\3PS/l•¯Ai`×YuÌ†Õ\Û5âøäÔw/›ûÈ‘þD5\)JC4Ó7X¬M«¸ {´P+=É«x™Œ¼Äo“Ø”à™!ïQžé‚»ÃJÍ•ò!Çé¾fý"•IYEJ\“ÐäÞÙ„,Ó$°›N0×¼å¢Yƒ0uê™Ž=«é5Ôìs&îÐœºŸŽ Ê9ÏÁÚGÚ)ÖÔÛñ³úà¡²^á.Îó–m=2?›ÿkŒ}Êìç¢ä]9­×Ù@iÉ$¿¬ÙŒpO<Sq´Æ&Ëþ
p6¦÷*‚7k%><ü˜ e²ôø1úZSÝ¯5*Öœ°k—Vo¯«óÚwÖmÞ{[Žýâ2 ÎšªAp÷@0|:Ï:c´ð%NšSíOÿðÏ¿ùds†]v~óçÓZ€5¢»d]­KXãÓþ2«‰Ó~ýd>~ú©XEa)L
m:ºµçôƒ¯¿¼g6SÊ\™šN€lÚ#£ÙYfjŽ­ùÀƒ=îõS³SÇÇf¿< ’f)Ts!9Íx‰SEè³v54ZCYËž-YëF5Æ›ú•¬Ùw
À¤#¦ž×8p¯–ú60 imàÈË[bµ_‚j_oI¸®Ø6gÇvS_Ð³š'Ä@kìEf[öZ;·~-)d#ú÷~¥Üao0âkÖBÑ²ªšåCv€–AY¼vÀíz¼ Æ^Ø&<³pwt\“µ¤50I¨Qó´–ÒC9<ÖH€d;/é‹3B4Öio‘Ñóí6÷_¨[s=;Xw€µ^ápß~äµõÔ&Ÿçùt}0o„€¿Ö<2v6õÀ¶V^î%ÖœÍÕ³ÑoÍ®?ÙzÊ2í¬åJ9"ŸTöcÒ®{IeWÇãÔè%“ªêq]g©©%bà­ö‘¤J%¹#Æw8XËÚÍ°,¢“u\‹ê$²|<·]n-ª)vkq¹Ž·ýžAîQ& ž±é±°!,Áš¨­ B³\e×õkP•ú½e¦É1Ù%V#·~XÉü­Àa&øÚ7%<·¸Ae&ÀºöS\—OÜW2J|„ËÊJ&àš‡í—B-Íl•DÌ1¥G¢ÞU“Yî‰ª¯)*Ê£,£ &ùíz&à8ùÊ¤Ö?þøÑÍëWÕl	¤~ã#3ôôáþß?ÿ>öý’V[åF‘?œV±KäÕ¼ ÷Æ:hÄ µÚ‚b…UùM/‹‚9ÚdßXÝ$ÿñþMékàÚß>/òïý¬Elj|å`KŠù#]íÓ<À=£­õiçíúÜyuhôÝƒçŸØ‹(ºüE¸	Ö|doAkºš¸’µÃ÷nlÃÚvlÇkÐÚêÞU‰kâ´Tª“9¤©FBÂš)k#£ÇÚíöeíÛ!ÒhÛQ—ç¢àÆ²ËFnŠH±5‚¸V\^Éæóta±[¨ÕYöòM`mi«‰ÕU#%´[\!––¾ÿÖ\¾NêCC	s‹íCÝ<øêßUYù_Cl¼EM—¼s¬Ò¯|Ž{ÿÇ•q¥ä±*)”jsôì¤p:™ÏMOWÅL¹†´FF[©Q'›SÈ|#‡¶7F¥Fù—/§§'_:=Y¸tó“KéÕWÞ­=Ô…^˜ï?H3lÿöÎ/&Î3Kó#ÍõÞŽ„‘Bpá„ÀJUªDªK‰Lê¯PQ¹º0‰V6eÇ¦À‰78*_¬ðtÇ‰´•MD¡13Ža´RO¦Ö¥QÔÓV+ÑdiÍjVMO¯örÏyëõë
ÑjïÃ©ïÏû}UÛß[¿ï9ç9Ë8w$åñøÒ×/Ñ,ê¥¯¿–©È…IeAcf"¢Nk¼Dñ"í±QÉe"7ùðwÊÃ_z™‹©Só2Š¼Ð>"eÌÊÎ1Lû©5Ã½_Ý²ÛŽb$€º¦–ÚSS©1‚Ù6M9xŠ•Àg¤[uk¨vƒò_ægÖRi`n,¬i^¦JX+Gm*­0q3‰GUnà†5¤…ó~4/ÈFXcaÍ»+:%3­±®µGh~ÒäÐæ’Ç)KQÉÚÂÁÚÝ1¨{¾`3 Nåï>á©½Ö>Ùõlìl˜7íz´§¶±%Zï…ÔÂ²,¶}4Å•IRhšâ>YfbÙ/XƒzeÉaŸXgŠ°ŸU@2ú°á4Bš­mÜ¾zš´HkýŽ0ìÓÝ»d6*ï‘X3Xãðî¥U¡¯wûú!a>RÄfÈö¿ÿK˜Í{hãí@)QO„ô°yZkÖ€µïÖ¤åý¿œDÀ48mËç¬mQ+åó½ê¬ÑÅzÿ\çÕ”àŒpâšÅT§)gáÄh¢57˜jGY³'ðï'²¯ý±k²m› ¬‰ÕØˆjØàÝÔæû¬kÏ­}ËÒëj!	’õÑû«ê"xŒAqàF¬€jC+\Ûï®‰£ÖXjÖ<¨Õ÷î”±˜{xXk0ð®Äc5XÛßï„ÕöQÖÚ(	|Ì™ö;<×v«¿Ö µƒ5k±2
 æÝ öYCW#ÌdÄ>î¬‚5Ô6p$ÖAa!Ñ«k$#×YÍÊÖ†š$	ÖÎ00Ãþ[·ø¸ÎõK¯³€ØˆÙºÇp5˜IT·RUËƒ|R‡5]¯1›Úëëv6ŽÛÔ%“»
¸»D*Të?ƒPçŽ¤GeIÖµ7kîr,µh]Ch­’AÜ‘‘È$V‰KY‹ÆkQ´6ìü5Ž
Ö¸ÊDaêv!‰Åš0†ÄÂ‹Bú#Áj‘{Q…¦§q€p¹ç&îó‚µZ%ö1K.®,æ“¨\Fh7ÖÇñÝpÃ¹m+1ÄC?f*yù3R<”—ø®ñán+ÅI&Kî¯R#(ñ±D&¼îÑé(=7ÃGQC¦Yµ<wÉ
'±@…Ï\×«•ì:÷®RXL"óá(–Üt“ËÌ0¥®r'ìˆ”C~¤‡Ÿ?|ø9`k—jþÎTîâúõk¦¯±ÞºõroÏtašê‰Š°´–ÉV‰ü¶jØ(Oã¬­ÏmË-3ÏÊU
|R ¦+ËðïÝûŸÜß\5w–ƒ°æ•5ÑÚÀšv­.:?N„a°öç¬c¹†ðyö <¶õ¾ÜÛõºîn[Åš5Zk4ƒ¼¼×Òè.âÖô8TÖã0¾°ö'€µúLÏugÍ}6öˆöìZÕÂžbÛ³·€h¡ðÊÈ”µÞî:ßþÛ¨]fºLº#*{˜‹jgz[#ñæÂøxŽëoaˆBjµÀ¦~šØ¦^¸ „µÚö¿.‚hÕHmÛÓÓpÕeo¬ì\y÷µ×vwÕUç.R+äö9ÃæKrÖ(;*V	Þ[³X_ßHBnU‰¾Ñ¦ééÑDšs8—KÕÄÕ\œr¶"þøÝ3(Y¦IÍSÿEŸã¾ó«RÖ°«¸âì ‰:¬AmÄ¿ÿçë?/Ž/cŠÉ©1u_	Ö&/Ð	]jy-îãI1CA×Ú˜=*éíH{7xÖ6³õñDÛÈà)µT³H¾â”LûSŠt*=ÖvÛ/`ØLõ!ù1A;Ç0Ì2 ”J¨0WxB\e­\J &1N0»ë^«¼XÊu/n‡5M`Í†c%­ÕûÖ<ª…\F¯©ù­v!M2˜Cú]ý$+¯ØØkVÚÂ%küãë© Z“·<á€µ?¢¹qï`ga¯‹LÈ‰Y-¢Šµ| P[$öLL£Ð_p-V7õÄ0é	%%Áú>>¦HiË³¨­ÒùÓ•õyó}´,Hkš¶6ÁôŠÉÈÚN#£óÓ§·QÖ|§5B°¶Z·è–"¼‹ƒ5ã¾@pæçÿGmz8INÌöÙg¿üåo¿úêŸÿãwÆm<¾åÙ(­yeí@clB¬&eíÿKXûï¿ûë¿ùê·Pi'žbêä Cá¼õI×Ûï$Qw2uúäOvd;š´š2N³[ƒ4ßwv‚2ˆäprÿ4ö"ƒ#)¬û±dô¨¦²1aË~H‘ÞØZPÖ\ÁšSÖˆyŒ,Y#B£5b“wt#,ììÛ8 õ;ßgMCN¹ÚzQÛÉ:¬iß]³f{ašmÜÓ¿Á`$¼uc‡5Ok–óØ°µíïó†Ç: ¶ÇûükØNh;a°&\5kV¯f/¬)¼²Æ"e5(k-¬Ž6µÐÔƒèPèZáÃ’!ZZ³	{êÚç4tVùÛV¬±0dAZ“ä<«µ´ÂqzêÊZv¸‹üç¿¾›p…å„y_Q‚ÅBoÏFïžh­µGHÑS‹
×Ì6«G°)Rr°¦ó°!OÈ.Žô}õþ\•"ŠÖúˆ¹š	QDŽ(‹Ë$­ÅÊŠù¸åV—1N<’‹2H§1<†Ö8SÒà¨Üîu3]M—Sü)_‹Å8‹V2
¬Õb¥
ÝžkC`HŽË-ã‰±Ô:ÞýúÓ¹le]¤§`ÁuQÍú@5HªÙ9|þËÑô˜Ä3Ý‹gbÃcT6§iòÒG"¤]ê-’¬iVp°6l°†qJš,®{X}pÓS}L–&‘"·.B$1Rm³Ç‹¤Œ®Ë2™.Ž*‡2%†™e2üð¹	ûùÏ’¾öþO~òcÒ °”µkuX»¦õú+Ë(—Ó™Ü6åë+ÔA0£ú°ÖVÀT"[$;G²bîkÙ<HW“þ¬ñÑa ezm“H¤5"ÀZC§µ°íò°$µÌDa
^ñÝ]Ö‚»ˆí<§ÙÚuýõÖã×‘Ô|ÅšSÖ®çþ½º‰r×2îZ
ªIX{aëöú³Ã8ŒÃø¾Á1„!$íÖ|r5{6!¼ÔfÑ¯×ô­²Ð5ÆgA>×ÚñÉl×ì,ºq	³èËô…j¹†Qó@}­+‚á1&#ùj¾º]‹d¹ÏUeI\©°&^, ¬-ÿéÿ¨6c»s¸¼rfeŽ2æf_~}÷å×]p-)Ñ§A2K¿‹Òòñ=kTtkE]ÎIbC )Æ©
Oöåb‘›±’:fqwŽG>¯Ì¶¦øb!ÖØ)23?cž÷ƒHQçßyg‹nš2„$ëF5Ö´¨NN•kRÖºûæeÞ¨öjkØŒÐ÷º³kœ@W#/ÒŠodûÈñ…“Sô^³à¤š\«{6O¨T­­c@mRÖým#bÀöI#4L“ç£lüÛÛ\²#JÙÔ”,FÐÌ°ö¦úÌ`­ûè±1lFÚÛº©_ÈÃÜ¬¹¥á&"5‚sZÆ"X¬·Ü-r1,zqc£5BXµšÅÿ”ô4k€—ÂÃÑ´µ9Mÿ®ô’ éû’²²!ìK½ÿÞ½=½/éN»j³fÚ½|xƒÛ=­íÝ[8é¥jmï•óè‡ØølÄ‡G÷)’ã:™•Ëü¢eë\kþlÒ¥¼ä3)j¥TË¿°­Ô—­õ1*OŸÎ²Œ^=ýåÒü—§•Y=}úöÆ%òª~Ã¾â{¬mÜ•)äš8‹ÅÃ˜¢ÇÀ]uŒv>Á‘ ¬	íl¿zwË•XjäÖ?@mŸ?úì÷¿ÿ=èöoÿöÕ¿ÿû@oÇòw¿ƒº¬!­5*klCÉÚöÊ/×¹7úo¼á_õÕßþ-„öËGŸ}ö¿þ-Í“ƒm¦ø,AEŸîFV''O§§ø'ÝaÐšóç7.sœÆ:éMüCÉÚ…ÔÔÙ—xV3ãþ³gSW¯âW§ž˜øÌûÃe>²Š–›b£¬yiM vYxfkÀµ`ÉCË£M*Þ^xlúYPÖêH¦Q€5W­VÍþcËQDZkk'öë¬ö›aÇš5WXf;`mÍ‹…Û=¾ã¿c]YcÑ÷x ¬ÇÒ¤Q×¬ù˜ €5ûF!	ÒóÒš-€šWù|ÍZqÚ±/ðaõ\éŽÖž‰FÊöCE’»DsK]YSôûôC–þg°æ²{’	Ö`#l>Üh‹ÍÀž!JÖÐÖÞt° ¡O¼ÆæšŒkªY#.ïô»{]â3M]Lc¦™Qž&T$Åñ¸ë†­àEö`M—›ºe†d}JÖðèo5ÿþ\Ö.k8Å+)²,SÈQu¤,‰QÚ¬Qß::ZØ¢¸AÉïP{6€+ÎM±ñi®q±L3¿”Œ^3eÍ®E£ñ˜¹Œ¨¹â‚œ+Àj=’Ød:²‚²–-¥ú€µ¹ÿŠ§Æt£ü,ó#ni.MÎ¬#¥†UôVFëÊgKÉ*ÑÒ²ËÊçbQÌ„²¦%CiR«_ëË%Ü¦:Ò„ùDº<É¬ ‹.Ùà°6§¤ô:ŽxpdºT£ÜÎRSÏ*
¾åósê¿–%A®&j_ õ	Ù íó‡{™šú úFkD£²F¤5[›%§Z(Èï§~»íZWþã"õ{‚6#eAÖ
•b¶ÖÛ³Ì_	Ý²ÉÊÁfZŽöÁi‚µƒ#^YStÑfVûNTë
ÎEká¬;
CÞ„»PÇa×/_¿æB¸æ”µàÜÿpb¢>-º.kwÐÕŒÔ$¯)aí0ã{kdAjYc*§>6\T<®1ìâÚâ.S„Û±éÝyëÊ[AX#RkÄÎ“¬Õ­™ÂæzF"à›fê®Ä‘2m5ÇÉLÌ™sÈ.¢«qíÊl3Z¬àÿ8÷ë¹mJ©¹PKuÃüij“uÿF×ë¯=¹~ýµ×>øàúP¸,¬Ï–”µ{ÀË7pÆ*«BlP­{°¯X®pk29/,ŽÒˆŒ9¬ó7n,Í¤Kº‹W:Õ¥	ÖØ l|Jçîæ%]ä?¾‚™Å³#LX»öƒ}ñ/¿xúÅÓ_­l¯“±HîãÔä$ê˜±™™ùs<¨¬Bäâs åæÿÓ§:kœ¤†M$yÁy²òùà0ÌñÖPÜÚÛôºÉÃdÛý€ ÖýJwdÜÄ’|ÈvÄÑ<­ƒI˜YX›O;Ú7Ÿì8Vêë†G“KƒÝy˜cìè1„$ Œé:É\,íŒ¼ÇbÉ¹tŒuŒY
ädÚèæ«C˜x&XcO°³³Æd¾d-4Äva®ýÁRm"3L«Û<oé¿À½Îö]{êÜÖ»³‡ë‹ÙtBêVDÈøšbÁ7ý}©*b§9Ò3ûŠ²°0A]ã[Ø§E>>jñ°V*•› ü2?8˜–Ç¡úÈpž‚5w35@™ó•	¬É¤%Aol„5¥ARÊÿÍ7ù<±¿„»œ4öÜETÈFXäžo©fæ¢žõÈË\ÑZþ<‡ç9íjjõ“ÒÔ¶Vo;­ívˆ­ÍMÎÎýá¿ùÍg Õ£G÷?ÿä“ÏÙ?úü“ÿÙàÞúbóhì²&kÿg°ö_ËÛŸAƒîo^½³ºe &*ó`,¬é0ÀšOW<Ñ69u:5µò3yNœ§Ì°]Ìà³Þ¸ÿ%	hZá·³õ¨weãeS÷GÎ÷ñŸçüÕ}ªßžu?{6ÀÿÑr!uîYKìài¨æÝûV­]f­9X£>®®ÚæylÖÜ¾3l·¯RŠ×QU“IY;ÐÛAZ£²æs!µÖ‚dç9é…3e@v…ú^üÄèjô
à@¼S%ß*ýÛXQí#÷†>äé•µ†Ø Ô0©hÂ?„–’ÖŒÐXf,¢º,¥üQ(úÀ:f˜Ív^Y#<«©­Úì-þ«‚ir"i’Vkg$¶aBÓµHëìBïÆ½'oNX{Ï©3tÀtq{8j´¶³Ñß»Ñ¥Î3rÐ2Ëãþºm?ÜæÔÜŸÃl°Æ±ÀÐú`KYsôÉ	Œq¦¿•ÙË®B…
‘“ÇFM-&XËŽRÀU£l`…Ô%p…,Iµ ÏDã*k‹éAK(¨Ovsû•ŒBOf2CâC
°ðÃkJÝ&û2š™^AX+Ž¥U( ·ü—íEêâ0Bäpq%›àBþá‡s•r²»˜)Œ“åŸ`ZMv'™ç(ÄþðÃ¢k™†	äXj8Ê…Þ9ŒHåBo7åÔ¹…”F»u§\ƒå‡Û½¤|‚ru]½·¹wEÃæÎ(IÅ|6“ƒÑÐó`C¨®œÖ•²˜ïîÎ×MsË »…¬ûòþÃ÷ßè¡Þ³p}Íë°ö°f9·d3ýz&‡ìhÕê‚5uJÎ„gðšIh+:Êk´€¨Ðä †Åt<VY!sñ5:­ÝGX3Xkp!êŠZØÇcäPhÖ€j,ŒÜ&„Ž©uÙ.°œ½ÃˆŒÓ•µàÜÿ°Õ@­å…ˆ*ÖÔÛhíUxMÂÚíCeí0ãûk`´æ!'ÂgãÆ{IoôºþØ†j„Uj¿²À…Å»÷7Ú÷KYã¶§Ý4UH]s“"É#C=Ì;P[f:7ZnŽ+Gq4»(¬±’ÍQ)¬ÓýìÆ¸²)#Ÿ¨*/ÿbp#ãaö
o¿±û¦´”×~€ÇÈ5ï/"3@>Ÿ{MZ»¼¡Œ•ÂøöxBº“G¹ ´wìªH–àd’l’y¾ÿ:Ï§Ò2N“þh°öá‡@þj‰­k¼ÖLâá %m˜{¿Öùè/Ÿ¾ûÑÜúöî!Öû¤E¾þúk€æ’ï#ÉŒhym¹Žìða{vòìOŠ39i"8güHšã¼@M‘ƒ’Ï&uþTí&åÞoêY÷F§¦k)©šš‘G¦ˆ”·±`mŒ)š'˜d“)¦Ëáá¼*[
ÐHQeBVò_<?XÒt]Oðicª†AJšÂ-»Qöì\¤åC¼Ùª…¶QËf;­¾­á’ C½šm¼N¦0jÂ|‘{…§4—B¢¬ÃµYÃZìøq!Öii×Ö¤¬	Öœä“{–y|hoCþàüãc›YJ–·î€lœ!d½-lqÜEèŽŽ½¿•€Æ/N|°kÖ'¤Ê&ûÌ{dVcùÒ`mÝ,üOç—¾¬¼}•Ækä@.-}ãXMÌæ»­q•¹‘meÕ¯`Ï˜=°†Ÿ$Gsâ1¨ì·Ù¼˜µ·WW·4ä°v÷ÓÕÕO·âiòÎÖêææ&ÿ€7úwü³ ¬É²kÔ*k``í3õAvøC yó¼ÆáKÝQÄ³š)k´KïM¥á¶Ç““ÀÚ”¹?Bek&4kçL"µwO±*=ÒMŽOLì4¿ºN™ŒNsLh^ý¡„­Ö|¤«Xcññ°Á_$8÷Ö0ï‡ÖêÒ™‡µÆ4Hÿ“ò° ïè{‰*Õoý1Ã4Û”Ö‚í‡r ½¶æÒ ¦ù„H;e°làÖÖI'l•­‘ù˜?(ðv¬­mß5Zóo’ÄöxCùöÛCñ+ÁšñÚVƒ²æ`Í—«µlL<hz ±yaÐ¡ÉÈõ¨IÌ¦ÿx‘o[Œœ±íöb5‹_¼B—ìúÉn­Í­=:8ÃÚ«•‹;­ºI£ú´'Èô‰ð¨F	«Ì{÷v.1[íì`^lšS9ºÄm­­kÛZeëïaHoäÏk•øXÃ‰H‰“ý0Z!-Il»¢Å²Yº0kå¼v¤>£ý×8£˜²Êd<Bk,¦Õgj™\QÙH„Ï
L ³eî€¡¨ñ;à0.Î@2--#¥_MÖl•qô'Ã/A—49õ+«ôY¯r¸ éå™¹ªåá¾¥Qf7éjä$’·Ý§’ìÁy*ŠªÆ}ºX²™d5Õ¬)8Ð SÖ¬³$›¼A•òÔÀáV5V*—«j´ÔŽFKy+ö.Çs’#Ñ´êÖ «fôBÃÊ¢%Šó"zQ~Ö¥@âÚÚû?{(‘ŸÐ›•;«¬öÅ¬Q®xæú{ïÞz¥¶˜‹ ˜­ßØË`3økÀòÙdÇ‰EŠõéßJë:‰£Â©ŽPÂÍÝWÁÚ'æ/âó ¿ÖÂžµ«Ö
l^PÖ#ó ƒc¿Vlº”©T$â©†?j€µË7Z\¼š‘²FXdÝrëÕCX;ŒÃø¦Aò ÙX[õxÁÖãAE{£7HjFj¨m{ÀZƒ´Æ#8Œ<‘‹—PÍ*†z4ï‘äq­‡þkÊ*Á[¤ËG«‹CÔS+=§æØ7h©V¿ñëÌú—IÖªQG¼ÈªLÈÅ•ê"ÈöOÿxåÍÝž›OÞ¥«–BÐä ¬½uymøXã›‘¢6Yˆx9rSx¦Ä›µBu½›|Ú‰ÒSti„ÖY©wU§†Û½>,»ó[o>$UÊúbƒ Ö´½…°öÅ/V¶éÐö’”²³q]®Ù‚eBµS€‚šÃ5mµÒ›ÀçŒåx’WKC“i¿yùŠèr¼é<Î")€XKkíL¯’"¦ÚÇRŠ1pM¬F6°œ„5fÝ$ ¹Ä„‰ùzÂä!P®$+˜,IéÚ0¬Ó%†™¬‡UcN3T17V­ßm3[£1—,£EÏBkZBhz–ÖŽ¿‚Â9¥Ð6î\ 5BcyWv†onÔ2te£y§µÙÁEŒÖ›°ÆØd«rV°F×¿Öþ½½½Ù^œ 	4w¹½¸Ã4¶”ÑÄJú RâÇ¬Éq;-xãgÙ£Ê€LÖo'4èKê`´‚®Výç~*FòÖŠ6_]_:¦†s¿u_ûF.#¦œ	¦Œ®„_^&ó´ò=¯¤mzž¯òþ¶u#)i†oÚ[:$°æ†€j»»œ°/ÜZ½¥©tcT#>q#Fk®fíÇ¡fí ²f°F<‚v µKwÁÔ"º+{T¹…ÕÜY4wÈÐÆùi÷Y¡µ)?S¥{H«kh`Ù9N3‚Î¬1†zöÛÕ¹ðøiwžGµº€'¬ôÈ¨¢µ k^X#±¡¥a±{P±Æò¹WÖ>ÅUÃÄ2/6¤UÑ±”N›§j2ËòT'—ÙX±¦¥QX“¤ø¦Ø^³cÞÝ\ñÜƒ}”;9õÃ†íûÇ^åÄcˆ­‡k¬ ÷¬æ•5vÁ_D ¦‹àOy Ö=júÌ	ò!L¼ÐäkÖšXÕÌÃù¿7kGm(×âºlÅ=’Œ°ybÉŒÂØ°0CièìE4áô÷*Dl¬³½­ÍÇ7^~“0ç~nÙñ‰W¥ªuë~¦ ºáL¥êDk×.îÄÈq½¾·EÙCêjpv¼ßðÍ)|œä{¢‹#»/3PB‘ob‰•qÅÐùf‹\V²ÚhôŠsJÖÆ·³™fëÒ%:€ˆÕÀŸ,ŽZjÍ–±|HºÕÐðsTWÞ#ˆGÖn»0=m¦7oöÜÊäÐÖ\w2\!uz¨†~†Ü–Ý^$²å,dŽ\Û0R…	mdi9¬/wSæ"7ªÐš&Ê–»ñ…ÌÇcÑŽað:Zïµ€Ææ`m˜3vIGs“?U‰É Mih+U[‰i$Izc4ŽVÈ5®H` \.G2kÇbããjŒŠWD§ãå\eÍ4±òd©ÜþùÛoËï~.2÷ˆ†<HïöôÖ™Ùkï¾÷ÊÍBµXØ6ß±EXm…Ä˜Å ¦öÅ,ÈãHŒÐ&fÔÉ×d4Ug¾ƒÖrBnÞÿ\ƒÒ	×B§5Ok\s|åÃ»‚™ac­~ .ø‹°hï0Íoß€ÓXLXs`ÍúÃ.L´¡dMÒÂPeíÏÿì0ã0¾o°Æ"ií„]c¼®T4¶gþP özo)‚´vGpÕ,T§­©±«_ªÅb±e±œ‘ÅnŽ™Š«*wÄ–%©\mqºP™ž 3»W¨«s%[ä2½­du! »_ãë¿secX{—ªrvlLÔÂ5¹€ÁjÌ»‘\¼9Ãg$a²ÒSâÇ²xhEË¹.¿LnëKÄ¥¬ØóäÜ¯/]œ—·´4±½88338Ò}šFk[‚5BD§„Y›€„§³7³#2àïÄDfý§DjÊ}4cåÓµeˆ“'jlä>òâs</„“™?¯®«i šŽ&'1tä-a@ë‹­˜Â ŸVoÇàÂö´“×ð›cK®U›Ý>³B«dšùÕÜ»Jæ×¦Æ¼Û¡ªs¾ˆÚ«Anš’V™fòfiÂ™Y‘¶*m:Ž‰ÀŽ:$BíšHÍvkß¢5ËntÄ¦Ôì´á—ËyÕk´†uöjoôï`-ÒÛÜ¼³·á•5â=k|@£5eFkoQÂ¸»Ñ?´³@Ì*©Ém@¶JˆÑL›•¬E9ˆ²ÇnE¾+	ã²$~hrAëc‘¦–´^v©?èaUd5s«Y§-}²9QUNã7®U¶`r«­èÌ¯J€³ƒ;^uëü9[Ý¼k_æü].¤g5;É¯[ÝÚÒS$½ñ¬ÁÚæ*[SÖB$ñm7H˜í`›5â¾CK'ÚÏÁjF-@€5£-v¨‡ƒ5¨Œà@°&´°XDk˜“üÇ1*cÃ¶žîˆ+ä¹‘Su7‘g1™âÛ£VÙ¹SÉg÷y“ÀhAYk<v:[0±óºZc4
kÞ`¤žÃÍ‡†a¬°3’ùMíjjX-ZÖ¼sÿA7È ¯)B“5§¬¾¹ZÃ^Dº¿ßql¿­]æý/< 8¤´_÷c/=?ðšŒ8Zc1YÍkþ¡ã€j•5ÞE°ö ãØ‘&ø,kj9¡Ñ1Vk2àˆhÓÒ
Ž48Vs3´2X“¾f Fô˜S?v"®)6{¼úi+Sé%6[zwÝµøMz¸¨1¶hMÀfÁ}¼ ¸CCSì½^¾V°Öâ¼ga2¸Œ²=¶A¿+)rc^uuœRÏb 5g¦ÝÕÌY>–sq|û):k‰è¸Ä‰iF,Gœo¸VŒjŸ€Ó²Øß—Î¬ë5j¢Ë§º<f`5ªº{(ð«Ýì!˜£J$fcy/—‘]¼¦‹ùD*ŸF5ÂÖD
–Ég7ÔzûâRr,!·þâtmq=^Ë‰|Zwóº©f›_/O#­µñðJš`Íò í*J^E	u-AB$…kG“š7u;®$XëæMŽGG‹ªZMpÿ0‹E8„Þ¨ÐËj.ç‡ÄÄ¿¬ù&ŸJg?ðPŒPà¶R{ûïrÿýMô5:@¬]ñÊsªî½ÚhöÖ{ï>=³Œ—K¶Ê÷©f5¹<’ó©’tCY{%;>š-ÎÍáYãƒ	ˆ}¦¶¢6xÓ=+ÒÞb…
}ÖÄjÄ£ïÎƒôÑ(°oß¾ˆG@³ «5bZã1¹Ï›ARç
Gˆ§5~ØP²&Vó°ÖÐeÍP…küÖ!¬Æa|Ï`mmMõju\[ãÚ‚°&e­l]ÚôVS2¤¶²ÕÚ@YUkÞa„Ç¬æ]…Ul˜³#]*³&FÁÚò4óP&‚¼¶¨¨ªYŒ²9¥%b³Oê£¤´Zef«r=Æ§wX#{}åŸ€µÊ†¿ÒÓ„jŠkõ™šyXSÉÚåO³‰2î1\„ù^´Æ¦CÀ¨4¶îÒp™™¬ˆäààÒR¢j,HÎýº‰i Úü`_7C`«ûôíÕÛÉ$´öqÕ˜WB85çé­Ù3iëí¯_”ä œúáµ¯!6XÍ¬DÔVíì…A9?gYÀ3^Ï^_0jÄÁÚ¼!GS©ÎÉÉNô+8I¦€5çV ¬¥LNKNur2%/È6HXR	å<ŽA3.%Ò™/‰Ú:äË‘(™Ns¯tL½vJæäÌ­VžIÒ‚mØå=:gHvÖ8G8LkrÒšC5çßo¤ÆÚÀj¾¶‚­O„TÉ™ÏvôÉŽ<çE5mþÔ´ø*¸®æ…'—<¬IY“ÙËkõWïÉ†<H¬"w€÷=œûoðÀVDu'[,tp#YŒÀjÎ]Äp-æóÒ$Iåß‰"¹´$è«YŸµ¼`M’šbžý—§IÍä9r£
¸qH)HÂ1Ú¾A`CV#LNãàªu˜Zc¾îªJ-ÈkLà8ÿo:YíöNÀÙm Ž4HÆwï®Æj[[ì ¶g°F7H"ÀanÁeÍ}]ú´ÿ°ÚpÀçý0ò æµ5ÛknÀ:{ƒ5ŽÆð
é$øòéd;žD…b9ÅYïßï@näü>Ñ‰Ô|öÂùý^@MzÎÒ7æaûoÁš6AXû–u?Ë·3!Iƒä¡úŸÌ#Á§‹àß¯‡{¥mçÎµA¥íç ÐºÁÈïþ`éT/‚cµ ¬$B‰H¦Â?$µÇàðÄc5Z3'NL79e¾"!‹rVc	ªÚ¯x8NûKÖXªÙúÊŠ5kV©F
¤ˆMGuÙ†´hÜê®ý·knj6~ßšÞ`ÍµÃvö!½
—þéÇ]DœÖ¯#w18Žxb°†sÿî›.€µ'A—×r¹D»OŠÖ.íöjöê|ùúW;p&þšÞ8ö°FèÀ^,`Ã€¢HÍQ¥¾š¬¸»{±‚f=™x!7=4w'âÍŠˆ´5‹RZk²Î‘Ý‹²Û°kÓ…¿ l!­ø—i*^)¨_MX“¸ØS+Àyé4&Žœ{(ÇÊU«œ%õ’Ô´6'kd}fi};3°xcf¾;_½8óáÅÅémAÛz5>\,R¡œZBZÃï8Œôõ¥Lþ<Åþ‘8Úaùº¼³—äUæâ8–b¢$Ûñ¯àT‚»Q¤Y—«y+áÓdIÆ#±tß:-F™S«Å,6¸m_J k¸ŒñJ˜–ËøxyU÷ŒV¹0m^þñÇ—).4VU«š¡^Ø`ŠÓìM’ö¦9z`!âÜDÔ¼RcÀ3rƒ„â†tg¸gyQ¦ýpÝr¡’©U¶î­±9èyÖ`5ÎÈcDáà*'‚ù£­]¬áŸ9=Õ=üâßðº¯Xó¼ÖèÜ¿ðÐnG‘@k<œ²¶uk‡qß³øs`}?«ÊÖºB£}‡j–÷H0Ö&ØŽ k?~ëò• ­=×iÍÒ 1±*Õu÷Ä­aÍÖ8“Âb!ÃeuÛ®¹Û…¨LÆN\j«Uõø¼X-8«§êöýÛVÓæ`mñW;˜6¿¼¶CùØ»º“;s3ŸÔMZs=±MZ[-^]ÅƒªRL&èÀ.é.d¢”Ÿ™OM­WK£×¨dk†•j‘_´8¥ä@)e2à?}ûíüàÈÛ—¬5ÐšÁåí·Êä/NÑRí%¾^È‰¬Y†#Þ!JoÄJGÈIR»ÐÒÎb)ý6«£«d9¤7tµyd5Iimb2Î2æXC>“x§sÑKáåOd²½C—B3ƒÔÄƒ3KÊ‹L÷‰ºIJQ$ 2•ßÂ‚M³ÍØæ»…dÇ_YdÝþ‘àùa†ÖØ×“œ€2±šö°æÝû=¬µXhÜ k¤qDØÖ?åÎø¨³Ù¯­ù-Í{÷øç¶»ËÔëiíGªcäŸ‚}f{reohog÷ÒÂNk×[÷ö¬ýµU¬IVãÏw'BpÏX°æR˜ä-ç»Åf%º‘Ô%`êzÕl Yò«ålñü—uJsñ%°v6ÓžOWå?¢¸ú¶øÌÓšeû¸jªšíDf7Û8ÝMÁöö'©±Ñ‚±šéjð2÷ŒÄ4ÙDþwV/]Ú×6Ù!µ±%>ñmÖ*kl¼²F€jb5kÿühâÄšÞøÓÇ*ƒré€ZB‡è g¶—Äçe® IÝ±j¿Wiµ¦ú³sç&k“¬MM©†mR'Í
Qš¤GGpI&e)cžÉtû‰“B(×¶>%ÜÐ².k!2d@:aíýM±	—é¥µ»îÍ¨Ys=êÜôX¿¡Z½¦Ï~SÚNš¹²³í€²æiÐN‹qšK€dÌÀÁZè¤56zã}8­q}_•jw(U{Àuÿ1°ÖÞf	Ä3‹`Í¡m´æä´3 ÃYÚ|ÖxO¼ 6=€Ì&Žka_¿ÃÓô@êR<ð¢ÂPÁZ‹Ùg€> ›4+Ÿ©ÌygÉúÊ€`M‰® LÙ‹­-LCÖ#Èh®—
»êûì;x‚¬NÍÚÎ•½=f-ÊÖzû‰V9]â0&4igLRÞ¬ßxMOÂrtVéšÌ]ºè8E^Örå8Ÿ£UuI*šŠ´j E±Ì%Nõjñ#rykåÌ4I$PZÔÚÉ6XËúˆŠÆo	aÈd CªºÉ$I›:ZNü2¾¯­,ã@™†UÐçJ4Å^_ÏŽ¢¨Å›Šs33ë8fibis1ÃëžÅ¸T&SÔ%/%¹8­£š‘™§ Ž{‚|ŒFH‚T$ÈFÕ_ æ‚˜ø	§U5ClŠb"ÜG‡ÓëÒÌ¦Uø­J¡o4!X#Ë³
TåªãÜãZ²ÈSJR5¾5H‰ƒ«Ÿ~¼¹VËeu÷îC!i° ¬ÉÃÓÏ¦\Å­‘)ÖžHk³³gZ­‘uÜFšDb¤m/×–+ø­ŒWH’\¾¹8·|SÉ­ËHj…þ•
h‰tÕoo>R§µMÏjÖ$­¤5‘wÿWìïl»Ö¥å„yŠTÔZ}§µÐÛN¶¼ yP³|ÈÆ’µ…‡õÒîZ^pMÖ\v‚™AÂjqk‡qß;eí„£µ5—)Xc£å¬¹pÇ!ºö.ko-¬eÍKkO^gÂõ¥ø%	ÖnÖÈäþ™!¤ZÉdi_	Ÿr‹Ëo€”§Ý ÑñÆqº`/sÎ+7——±§¶9³¸üó'Žíö^ç›7]ãÁVY®ÅÎÂÂÚmÊ»¿xõáZ¦RÅ¢:o:FB´R.ÎÏ,¥¸í—(Žo£š ;‰¹‹7ï.Îœ:åi­Òµ`k>q:9Ø÷6šDHƒt’Zè¶öôG_¼;[TÚ",¦¼§NÉ\Ä¨CðMc*sêÂÚÔÉº)ä)ÊÒØÓ–9Xë”}¤ú«ñÉu¤CÈ‘Î“²ø—k?Ý xç6,ûµÕj…kI¼;ê1Ì™©‘¾îŸÎt'iž¶áæ%©P™z©á±4®Êu©Õ3:[”ªHàÕÛëX†ÆE4Ø‹xežÕd3âiM§vL€hD€µÀ`Í.	ÒÛhß¬#NkkçB‘ÏY0â–,²{åÞ“Ý¿Úµ$H€n'd5ã>´mt‘(ùéîN× FÂ4 -bµî–¡ÄŒ1-h6çÆM2Y¡¬Uªå±D£cdÆ¯µOÆ-B·n a>o´¦§¬Hëþz±´U¤^M‰’ßX>$(åC]±o{³z5ëÐæÉŒƒî¾óçóf
©UÜÆžðy o~oM ¨S[¿}óÍ*ÿnê~¶®±n>zNXM±Ÿo‹í•µP´ÆWlr©@À{U-¼Dj0HðÑÞ†®4{õ¶Ö\H›SåÚ)Ë|~™{G
îTœ;éû}¹šY¨éÚ©SgI(<75u>Õ¾ŽÙf¨Ñ˜õxÂXÍi_[Œ0ïo´î×Ãášo²FBÙš¿‡Öîú1ôÀVØÐ‡Á“‡(…é^”“ÝÑëšøoû8´Yk@5Ïknuuk^Y#VCûë¾é¶²Û”Íu¡A’]ªVm÷y„]±7Xs5k„6ÁaDÛ¸qÖ*k'ê+Ö"Gôîüo<Ñb×	'Ò°H7âÐ´wsn‡Ïb60.fÎ
&­P˜B¤F¼Â)a™Œ@|5[—Êö·víÐñš¸‡„¦ë±±šÝ¯{h9ÃªUþ[W6Zxƒ‰‰ã{˜[…œ LW“MKÐ'•ƒÍÀ… Õ[»Îš¾æn'‰Ö†Ì¾?Ï‘æxNNý¹°fEhHn1ÜCÈŒkœ°+	¹…Ê8ÞŒeÝ²îk19d’b)€îpñw°«©™’QôžñÜøö(—ßÈMIm±è@M†õ•œ`-_©P«V9—yò879/ÎÔ.^$§““R7xvm‹yÌ ÝòH’T¬‘‰¿TB}­­g¶ÔOg	©@°†ÂÆ| ¶D\Ãnª”J'iw`M2kÑÎäiÒ­Îjù"°–ÇðcÜÎq`­ÉÁJÉ,Ö|;›ÃÀ«T¼:±ÉÜ^[Ëdö€5º¢ªý‚ƒ5—ÿh[8mvÎÔrErM£¬å<ß#K5š~µžZ6»8ž­,ÎÍ-’€ÁMó{à(­¨¬ô2QD¤°UÖîßßÌUÝdžyèáA,H“Öºœ,ÀÚÁ'Ø(Íc›3ïïØÚuM÷¶½°Æ¾AXãâ³‡¤±ZD–Œ»ºº.kâµCX;ŒÃø>*kàšeíø„ƒ5ÂÓšß`D4œ¬]~ë­£5jÁcd‡ë¬ær[¸òÝ¤^ZþµÌ€ÕtQP‡ÓèsÉe#¯ArV½AÐh4}ÐŒ*êÊÊòÍñ9ò é´vse±¶ûD¥
ïí<±k¼æh‚cµ{XŒp«üW¾,Ž¢£’Óæ€µX”„Ž"÷“K3dŒTU~­GNIŠær´}›œ›k¤¨`Ã“ãTâ¶t5…JÚ±´Šµ/O¯á/rëï>­u+ßÌ2X›:)›‘I44‡h(jzJÊä6ÉñäÉ)žƒÓæ€µyñœvôZCA3eŽ?	bÝ‹“„ìCRzK8PRŸÇ¬Ñð]-%IÍÙ{§ä52ÈŸ½/Í®;•R+ÓAM(Í¾.Ÿ.3Í vÛâ	i}àijX0æƒQ‡8F4Âc·:r{Öoë<ýmÈ¹ô‡à)Ïaþ´p…kÞz$ôbsáÎþ_öÎî'Î3Mó£=Í1 „à€`„
”ª®©.92M}	u•+…Y ZY´)»Ã”í„¸7pT>háÉv: ÁR‡«’L@{Ô«^¦DVh¤UNFÛ‹4­œÎïïºŸzü¸Bþƒp×ûñ¼oŸ6ïS¿÷ºïë>çÃº:g}Ãoý;¼ y£f•‹lÙñžmõ“Õ•z½±6Á@ý\	T‘7®°YÐXãûJ$ NÔû’&«‘e”Ø¬ûu’ž°1~Išší@5ºÅš †j©Á$ ¨›	Öˆ§vôQå &…MDæZãi¨æéi`tdäþàmƒ5…=HOný¶w‡~ ³límþßï¾ûb…ÄGT3GÓß‚lß@^Þ¸ÿû5kÚ2öÊÚÒÚÿùÓüž|A”Þé?=5ó
Ó˜€½	-‚5OqÁ¿ß"¼HŸfçÂr‚a5sžE‘™N,ªœÓ¹‹8f³'Ö4š¶s‘Æ@ã´ÿŸÈ“ZÓqX«É½r|wgyCeíÓf$WµÖbÝHíñ›vçA:óv"ŒXì(ˆ^~dÛë|&7ýîî0í‡­û-¦±°q²ZÓ2A¶öà6ií€³ˆh
PM‘‚µ‹ë§Ýö‹Q­ZøÖ¤¬ÙÃ%@T´Öª¬9µoûÍ†Ø~0ÞÞÛ©Ýø³i^+Ú<¥±ç
Áþ “¿?q‘X¬Hï‰oi‘ÑÈÂ°1Ù°KÂ9ÒªÕÅ™WÚZ'’­ÖNHo>YãR/mMÎR¿úŒ¿|ƒ5ÅÝOd,„³PßÉ9]¼±Q©s}£^Æ6]CÈ¦×¬÷îï$¬364©W4	-ÂFjü({R#sË$)k•l™ªëå	]¿À/kŠ]ŠµÇË•hd9·^œÑ¡À)sÐZÍÁ[Rc{¼ƒ#Â*ØÄk‰8Ód„d¿Ì¦Q<¾\Á3RÊÚ3•ÜrÍ0¥æìêÑ”Žxv<Â€2ÏîkrTþû&6Ê‘?ø€Ëè†GäþÆ ’+fÅ‘}®ÿØ‚ô–Ò“×•¯”H-¬˜‚˜£L9½³ƒt³aÊlå÷Á:óÎãYÌòÉùÙ&¹ªÎ“ÖŠ»X•á;4Dº»•cùìüÕ™'VÆb„çæâ‘Ê9‹ÞØ{‰º¶w¾¬	¸}"«Ò	Õ:X“§ïÃZu?›#&ë|NýŠ´öÙœˆ k ™ì ³êŸPÍ¢M§Èÿ>]²Ok5`í›®xyd{ùÂ­ýpä×L;¶}€QˆÀjÜ.äAÃþæ6¼2|T0y×5#5‹÷ZamÏe@
Õ¢Íèo
kWÊÚU\ÅTY#4}³ícfD°^~«ÓP›3R$‚½,FZ!žÏòpt”W™ÃˆLµ¢µ×°–©ÕðmêŠR.Mpes³Âµk'kë¹.jÛ¤tì‘’
JMGcÇuyS²ÕS»6Q—§DãX3m­y‰gÊnŒ¬b È7øâÅ«­ªôùb=ª&³¹ëÔ¯E¸3ZýŸXò›{ÖþÇóƒäIç
•\UoÅ1I‘?hJÔLs{ðã—µ¿\];#íNév¾Zí½çß²ÅºêÛÍÁ·Ö -!
˜…c8ó`¤:²Cy#’©/ãµ€=)·õ*Â: ôÓoM°–šêY’)ä4xõÜZâó*À4`ëÅÖVKs Jq)m*o#“¦I[7¢YlƒÕ„ ú!Éâ# µÉ8Ž¨mœÐ,íLŒËlX¾íª†v¬¦/cÓ¢ðØÆj]¯	Ûë8¸@"c£`ë-ìµN}Ê}ç}·ûžÝ•®ö¿~æ*M\SSìUÞ²­21Ïw©%Ô9oúôîËÚbûo+2jß!ï”¬9¶ÁZ³f|Ÿbšª5pym$Éým¹QËcD7©e
IhÌï“âµ1ô¶|ûAF«Þ¯b(«±ŸË9„õþý;Èg‹®Žö–Tœ¦lÀ
°¦'<¬itgäþÁAsð±d¤xíÛ5¶,Zuäöžò#¿ûîCƒµC³1u-ÀZÖZÜ µqÊšpW¼†µñ;¤Ømã_ÆºPa”g5‘ Ã`i›P36®mó)ŸÙÓOîFóJ
V5Ä²%ý‰É`5vÎ¢_[;igknÐc_ÏÅÎÎééŽÿBâÁ¬Æ`ç;†àLÏN‹²æªÖ,Öìñ}iMˆ¦G5SÖG¦žA½ä¥îßÖK©ÿd+ãî íÿýP$Ë›ek­m±ƒ²¦§]:xd»#m­ŸµO}P–/ÆÎÚ¿…ÐGlÓ~·5b¥\»ìùûVXÓwL ­cü@;½¬vp{ÛQÚØFa2c5ò•9A4½û;Õ‚Í:[Z6ÿÃRØ˜tm.Er@ºW:˜v>¼¶ÊÎÁ÷iÕ›&WöæÿÄÚðÀÚZ£ÄF%tŒúŠ5€‹ÞØœÄ]ãÁœdwZ¸vÝ’ÖšºÚ(;6Ãk(j”E¡¬a#Ÿ+3‹Éú£#
~
Ö”ö—ˆK£¡g±o/eI(ý1ŠÒ8YÎâ™±Ë©² åÿH¯Ç6bùje|NVB³éÞ¦’$‡Ýb¥@›e¡Ð•´’ˆ-S+CÃœáRô´útc*=QQö÷OØc©k”R+€µr‘15W¢Y*šÍ¡-Þ¤jÓÐÔhíBÑs*½IçA‰Ò´t:E`*\ÆðA._ÍÅ’ùâ ŠyÓÐZ•éâ~5ÍefPÜÒy€n??—M´OÎ”ˆt‚\P´ÈX¹òêÕÞ»/‘êf*M?LÑ4‰ëúMpd¤ö­”5ÞÐ]Ä­ „	fŠx®øˆŸ¾Ö—Éá4âjÝeÊY•ýcvNÚ[AMõâTÉLð9êªlÃi\[‹ÖNUcáñþÀ×®56îýoÂY‹Ô6pi0†¡hÍ-¶	¬ÆŸÉÂjk5Rõ]Ž”àÑwï/røÎUäU\ÅTY›wºqðÊ ¬Å«Öu†ÞkÃRÖ€5£5ð,dAŸ€hb5MydC2ù0°›ƒ™ÚæVo>a¤+d¨.T6ëU«¦ŠzáÙf¬úè˜—’×ÀY!†$Ïjë[*¹ž¨7(k´<;Ñ—3ÿ(ïÜo³4°FíòîÞsU•e‘ˆcI•;›¦’Mª|ð$_™c”¾†ðy:¡¹p?HgZ‘œ-W“SÓŒÝùøåîÞÍ‚jtwósŠ”5Û<¯m>žªñP&%¸kÝê¿-øÍ,!R[Õ©‰Õcb5«Y[5	ozÉížžiåBN÷ô¤Rý$6AkS´Àî–«ˆ’XhkªÆüªB¶Ù’XXƒÒÀ2á™ÚèL^/ŽQŽ/?žU\Ñ›ÍéÐ§ï¥É©ké”¼Âìv«ªÛ¤¬ZÓ–`Ø
k°šwÀ×–3vð}bcø†Óˆ_ŽÉ‚t¦A+Ä±ó¯ñ†ÿz<<9;ë ïV~p– iÆÏÖkGó£¾‰¡fˆM$ô&«Im"5iÅ˜íË–&„#$TÖÖ–,µaá¯öØ¥ôkXK¥8&hïÚF‰¼4·<˜æb_y¨juÈ®Þ·º´ì44#+ a}^$çXŒcµ;wlã2!ïÜa½?ˆÄ&Zso#‰¾æYMNþüåÃÃCn¤A¾<Ü¦žÿ%Ì¦‘L"¿¹T²ÖêÜ¤µÿä;­ýÓ³ÝŸßmì¾Óm~Œ§AXóvÆìBºž$¹àyÚ1"NNW#©Q~"‚5a™+]³ C¶‚¦ØÞLZ3mn'}Ç›MŠ_ŒáÆæùj§ïŠœU¥™‡µÿlEkA[¨vâv¢µP´f¼ö?pƒ-­ùÙ6vØÅŸm²?ìR¤I_(k­î"Á’URi¶}ílE´z³Ó;Ý§l¤ªY\§Xí—þ_7‚Êš3ÑÖ#ÚePsk!Æ{:Ûo´wÎS^Ã§möÄfmS+"B‡qoÿ¨Öi¦«Ù1§%N1\P"¤`mtÂ°¡ˆÞìÏþÈ@£10¼ú‡“®‡ÜŠq°f¡÷ú¸[êœŸÎ‡W×†»F‘Ô¨Ps×Cœ”=R+u ŸsìÖƒMáµ6²é&,×F£ÀâM´#¬a|aí®¹Õ#X‹•(®BvCì)Ò”¬w+\ ‰X³@¶õ>É¸òvÇHl¤<Æ9LXmd‹wDÈˆ„âˆŸ.h¥’+’Ž’X¦Š›	ÓzcCIÇÇÅXeòz‚¯T=~út¦T¤«È>¢š< 7d9Bx4È¤RµÑÝh¼9E…úäù:CvT£\Jâ,>ƒÖâä¦ ˆq/7´·¶4‰âX¦Äe.v©ôd¬”ÙÏóržd²Ù8@˜n#bq´À¨Êgø˜Ž	”\X{×&6·w)$®ŸØí^ÝtuË&ŽJYûÌÎpKöá :·¿¼EÁ^Ž„ÌKæàåh´¶El`_p±*»h1q–.uu-«]y¼«°Ç¥ïè­Ai/.;Œø…;² eÙèé+´IkéŽ=ÞâÝÉ^Ä—«i%<«iþUkø’5kMä«Y3PãÑd5“Öþî?üÍU\ÅUü¸”5¢^¬{}{óAµo®&«ÙâO¸¨¿zL¾yèµ&TóîýÄ‰
Ã-³ä™`¼9ŒÅ±¬V×Ë>1t"º|ra-l™¯“¼±Ûš!ÄÉuZ )!’ [9n¡ÑD%²Œ·ª)V?;k¼ýSsƒ´Ô7ê”\üò¯þ¼ö¹"o'‰©|žb´TŠdjœs$góêÅ].èîä#|ðD°6UŠ.W÷‹OaµÏ7Fnß¤Ato{x45=6røøåKÕéij¹+'c5ïÝüôµÜxJC„ýDÅk‹N({°d­Õùœ#(\Cxã˜#a§€6%KŽéCd6B¤ºéž)õO»µ´d¦³õ÷¢¦ÉðQ¬ÆÐvV·FN¤9„ˆùÌ‹D)ƒrÄ©ŸÓ$µ ‘š’$c•'Šm±¢fÜIuk›LN§f{Ô˜—uŸu\¹MM…q”5ìEøNk-N‹&ªq[EØ†pG!²U_³@Uà Xè<qÆ2’ÔÜŸå?ƒ{Ç&míÜ¾‘‰ÐŽ7úÖT=ã¾í¨ÏŒ¤­­—ÖÒòî¬ñÚ$†,bµ<*šn$«LmeÃuÁ~Bl¤cEú­íiòƒDZs¨¶GF$2hi
êÕd(‚e°ftì8H¶Æepšƒµîß×IéjMÛþ#Gi‡:t˜Æ˜…@kŒðƒÜ^‘œ†“ÿŠÙA2<<ÜþÆXÍuYmÖBWì`ù©+Zs´öÍ‘áŸ••£K¬½Ô,DIÞ_$°Z«d¦ýÖûÖ½ÍœbFÖ£îIÈ4äÛ%QY 3;ÂqD{×+Ô;Ý¹XJŸòI.k^È&AFvdìæ#(k š{üÖñš%=†<H†z°iM¼¤°Ïé‰ÌNhëÏxí-ô°Ö9ªüªk—’ ±„§µz÷o{-|Ú@ƒ®,ð½ÝyÄö¼3~qýºŒüyÚ^çðª5RÂ f¤Y0°McGŸ9ÎÃ®·Ý˜ç»­}^#’h^(ÇjÍÄ½¦\ä>íå‰oèÖ!ŠZ€Ö 5Âr!ÅgvØ<E€\õ“Æ|=î™{d4`xôç3%W¬éoÿ¼W·Ü}g:ë|‘ˆÌÞ]EQçÄ(;ö
À2žä\&jP1kÌGâ`-éTÆ°&ûG|û-âå™RÙüiÍ<Ãµ£/¡¯QMzµEL*°æ®B‰\®Ð‘1sÈLP’‰DY¡‰‚
½3qr"Ôz©d H™­ËÀžjnY&[¢#:YžÎØå8 •åÞf¦º?#ŽÚxšOÒGDØ¶168=òd¬ë…¹¸UYÍ¦•8¯èõdm;äd9=KÉš¢„”VVÂ¤îWa"IùD–:ÊåD,9’/Å 7a]©­-[%×1;§Ëã~©-ãÎ¨~. Ò
Ëy»6þêÓµúz6²ûâñš™A¶Â7Ba5Cß³‚<ÈÊzU°¶Ya&¬|¡œ;.òû öf*V;šTø§¢‘›š+lm¢{Æ†IV¬Y¹îp-­É‰ÊMX{ÿw?èûúMZ³ÇÙü!oFWðÆm$Xþê×¿vÊš{ø4Hï/²Vo—¤¦%ª¿éÌÇkÍ¢5®îW°vWñã…µ½½¾ñ½ú|Ó –+P«%¤­A[#…„®ØöæîM?HŸ)ƒ³‚”°ÆMÂˆºŽ.paŒ:´hXCWÓ©HT&‘‘ÂúÂÐæ1±‰I×ÂVµ
ž=«ÖHˆDg;Ö]3h.ãö˜Iƒ<?ù;HÂT.¥› MÓ++¯Ö¸&ïî¨­q²JþóY–…ëñ‰g›{ç²É©¬ ƒLxO§§¨Ê¦ÇÛ>æý´ÝÆ}#ÉD–šîs7>Ú~ù[~ÞÇkggÖ€4óÑþ¿ÝdôoÅ1QÊšh‹,ÆÅ%µ·þ×Ÿ<XZÖäÉˆóŸÿbìhMòÁ[ÒÒP×l3FSíÅÏ?ðàóÏ§I~DX[tIÖ„_ý8ø»ÜG\»{hl%¨ÉõQNÌµ¢µi<Fž£¹{©°mÚ9Î?IôWEÖbïRºW
™°OâR¤xÐÛlïõkéRÈ„Œ5{¬©¶-Ô¬96skìtV£0`§pÝ¯…y<³Ñ
kû—9Z«ó'“·öÏîæzMÀY	Î1ŠÕQ“yÍ~Ž·By‡è»­ÅG¶ÅÚÌÅ­”vÉŽ¥t[IÂS¤=ö²îGZÃMÁˆ“yK½1š)ËP›ìÇª$5Ê»p´øËýªNÖ*&‹ÁW:p=Õ¤«±¹cÌÁX×¬ns¸æ`Í‡²5­Á`ÄûøÃ€Æjò„üèCXDc¬Œ¬™®f°jÖXÏj&­y‹â«#xà^ø+»€âÕkoç^ªÒl`£VW8G¹Ÿr*¼÷óþ§?_| ør°f½ÈØÞbH¤³î×îÞ½Ûyý½ž{ ­ÖîRE7µ4%eÍÂçAž§—J*ØZkÖ|¤„µK#-æ"×¾Ù¾¡ðHäCäFß
ûõÓ!Œ¨$ì
¤®uŸPkõ‚¤æ@Mç_³Úß¶ýÚØ‘ßR³†®¦óÂIïöÝ\ÈiäÔ¾£VXk*kÆk^[3:¬>ü7ó}e¯`í°;»ÚÛ­d­—°;:¾œõZC7‚I žˆˆÄ.æJÇ€µ®!¡Ú‚š¬9H3Z{nÎœlž˜à•ø‹ˆÄNÎ"­q5fñÉÎ•Ë
æ%Ikz«Œ$®vIq_Q£‰7dl‚[xÆØÍ©k¸„Dµeä-æ/ûþ—3O
qyYˆ&øþ}Ä˜²ªÍåâ3(k1fuŸpÆÚ«E5IPYk‹Íq<Wˆ·ƒ4ŠÁ/&ê.SË…M!yM&aú]£¬äL‡«É‚^6ž2uéú³‘—»GµÍgÊåõZv¿+*×±˜(nG±_-r¿hKÇz¯Më
–RþEŠIoV°Ö’<Ñ¬1)ÐqÓ"I‚=ŽÁÌrém‹%§°‰ÌR6 ÷IKD:K'õ±™Bv®’ÅjÄ<—yA¬ƒ2“ÃÉßY­¯ì½Z{üª¾»Òh¬‘#X3Zs°ÍÅÛ4˜Þtòû‡¤âdiÝs¬Ì—l!ËEy&GNd1U¶jêÃ–(^«QrQÉte 6"·¶–ã99úwÕI„¬S&WñÕJ‹Ã!^ ¦MS\Xm€]ó¹yj	 œ hëõµf.%1àHí¡mOX›#¡Ë¿WµfÆý&¬½š¬^)kWq?BX#ê°š=ækôÜ÷Ñé‡Ãï{‹wÈ~tXóÒšwƒäÑŒ³_sÏ²9ÿÕ–é‡=!§ä	Èùà¶ ËžÈäÈ¿¯Q¶0d‰5\Ijˆgää?Û\„¬F¤î!þ†j6n(&ŽŸ“GYç~jýí»\ÎÏ\µ ¨ø¬™ùKò$WtMÞS–¿…ÍJ:Y¤ö-’¡ßËõÕYsó//¯ÿ;âsÞÈ(£TÿÁ1z«I$É'g»ÇÆžŒÍöòfüþá¤Dó1Xûi“Ö¾ý7ijÎÃê“gƒŸ¿E¨õõØ"h£Ák˜÷/ößZÏDh2ìSÁ¤F#`v?!>w´v[v"XZäí[Kj²f¬ÆŒbÒ¬Íkèh¢4€¬çZÿ4gøö©gKM‰ä\?6&cÒ2•éÂT:qNM«Xó“ù‘J¥	ÜžJÓEˆ®ýº&æ‘´yþ§QÓ°›ÖzQ×LQc4Ó´QÚ#[Ö kÍcBnK0Òâ#ø‰#HX=­¹½Z«yFó/’FØÑÃŽ·ÏV‚58×Ì”<Å®«™~y²ú·ZQùÐÑžµ]ÁY®…h+Ü†Ò’FkŒ’#Öë@%2­¦æ/•tî"²Fã4±±'1ã½û¥«³À&#ŠjEæ!ëP™±EiþÀŒú=­)ÒlHÀ3BG÷Aïß!80]-¢4Iiìm¦Ad´@VÃW6áA“Ö@·oœ°F«eÍ‡ÖLZó#ý'j¿Nû/Ì´£çúPˆÄ"Ö©iõÀBpd°¦vØ°ÕzXšdÆ{ÎˆÛFkýrÈ %óÖš´¶¨Áƒéž‹‹”Í¡¯¡®¥9“Þ	Â_«9BŽ»½Z¬µ*k„w­y]-dAPM±ímSl|0ùZž£<T|¬À´¦G@5ÿ \$ÆêQÍ[÷[Œ‡ð>'pY7&&Ýü²O{¼À¿_Ò Õ#Ûé|óØA²µ¢)öÕhÍ45¿	%k¶ådPÕ´\ê³¦Ï©JµN¬ ¯_¿î®ÑYÙ±šweì4v
³jÊÄ`c‚œ5§×D@å¨ô¤¡‚Ó£b58mhØélÎàßlû¬€ìá/QdÀ5–O 5KhÓÍ:=kã¯tø95ê].¸ËhÓuo "SáT¶!BSõí4;éðµeŒ*ôë¹ÈèÄf%#¿‘.ýå\EÛ²ôB˜E­aZ”PÃ1ÌGâñœ´41ÙÐ]m¹I(õ<%"õb1~[;Œ
àØ¤­júœË‰¶œåõE„'å ’ÕÝÇceïëæ"½©óO‘yøÃþd‰ºìxtÛI©áY?ÈI²ùSûy¢›œÓ¬<9KIÕ\™²SÖ€µ4sì•4ƒR‰‘ù”)m“’ÜÊYE®€~\®À“3YŒI8[CC4XË§Ö2i,•h&[LøÞ•èm{ç¯3•î5¸CòK—«rW¼&UM;Æ¦ŽZ¶ß×‡¶h„ZËÊ¹H$7³ž‹ÙÎ¬~ÍÔïå‹Ë¼oØTÞhD&•uýúË”Yœÿ×¯v‡‰s•¬µ:ŒøLHû¯ßw´ö~ÐÇZõ´Ö£y–KOûZ7Ÿù&ð3=yi-´Y°öêÕ+¦PkŠí»¬‰Õ|“5{kWq?>X;dmZŒÔç÷Æ}n5›¤M´ÀšíÏ*‹‘ÇAZ{¯53 {6±ÏDG‡]w&ÁmB|œèµ¶@f$5d•Ârdb«¶`Iø[µÚ³-T5
×è¨V}úïß!·ýu§ŒükÇ¿Y¯ ‡ý™7èC3ƒ5B9îD³µæ*°v~¾BvúÊÑA,ŸÊÏ$p5¡R­\Y/ÄÛzcqnÈaÍµÿdj¶œÅ±]È3¸Wì<´RÉÞn•})_ð£i'l~Æ‰hML@Ï_}K(¾›¨=XºM75£5j×f +í×À2Y'èÜÒì…É¢Àí­f€½-éÙ1Ìpd9nI¦K.•¸ø/¤@ÊP„÷´Ó¼¢çšÀm–^k¨l©)Â÷Î¦ÚnŒžØªÇižî¦Iy9Ó” íSy›y™™©§&åä?uŠHÛüÝKoÔ×Ej®áNWc®…,ÈÐo¹FO8Xk5…|oZŠØ‘+^³5˜õ·7÷<Ø®™^ÙÕÇáI3*Õ™Ek’=?q°¦ûïègÕ"É¾;ª|HæôD¬-
¥é] ï‘ÀµïÁï k´‚Õ\yÚˆd)¢&Ù"¥ìú]Jä†Xq5“IJyËÏàÝ±•iñÔlüA2MXÌœÃ#;ó Ñî£/¶Æw>æÏ›˜v‡&°š#7Æ5°Ì$5›>÷!m×vÀ‰Ø6Ù–Æ&+4ÑÚŸà6ƒ5ïy¹dM£ï+kÀÝ__nQw¦,¸££ù‹¹l«¡l+hYoØ#2
CÁ$%=ñþ4·,n	ÊDkKK*]ÕÄcœ$ŒÔX4Ö+zx±Žù_þ±`íç`ü#1!vlc¬†ýÅ<Œ†·N#@›XM›`0b ÖjÝâÖW.²UYûF°æÂÿ¨þ(èk–k¡)8
áë´ÙµúrŸµÀiao†×œuÿëš¸VWHÀìÖŽ¾Àéü;Ñ}Ñ}ýôT"Ûõñ Æò¬…&kÁÒ/?X¶ÆËƒ²büF{g=ÀšgÜj°¦ÐÖŒê]ÀZÒt0î³£˜)
Õn.¨Ðìùó›Šag
á	É-Â›ld\5ÐXmÐñÚXíÌÁÚÏ4ØßýÏî~foôty¦±úÑ¼Ë¬…ÏŒÖFÖ†D…Œ»œuáÒÈ„k­©Õ¢:¶gû8¡ý5†•rŒ<@hVÈ9ÓÑ(Š‹H–˜ËuDs9k7—Àþ#[JÐO.S.I¹Ï ™-/Çð›ñ¬Eu=BxƒÚd=Â³…J!ž™¨Ó§ì:æõ´7{¤4“¼Úí`3D¥òþF5/§¨(+ÇIÜøòóüÜœ{.þy”7FyŒ¸J¥b“ªrœUGìv2/l«ôw†×J%Îà-VŽá6’Žµ•Ó3Ø„¨ú­TÖO—AÈ+&¸cIÏÄ&cê»†²WÜWâÁˆLûs€Ú\…ï¿£	kEè/Qç/Ž’òññ†„5ÇM\ÆÍÇ×ØåL©¬èmk^ß\Ø”Y¥¶Œíc®0©lF»ø¥±ÉÓ³àÙVõ¸6<¬ÆêËüÚ‘¾®8…kn5²F¦ëî?¿Ø}y~^ïÛýê¬…DH†ndûV—~SÐtè+Ö‚›?çÃ45'©ùA€5î0Eª¡«=w}ÖZ`í¼£ó€ Õk¾d­Y³vHüíß\ÅU\ÅÖÑÓPÖIkºSÚ5ÁÚš£™¹Fk…S¯>¬=þž´Ôµ3g§5•Õ"˜(8¦ígANüÃ7™™º*2üXŽ<ÃsË§ª–cô¯Zß¦ÁZõ;ô´õ-Îèž+–’èkë4É>9y·~~÷L_¸™ÿf35·V-xƒÞàr¼Û£Âù÷Ää·Æ¬2"ñqß0Ÿ­áÒŸ,dá´'øÓ`MþëO,6FðößÇÔ~Š´F*ØxáGrÓ#€µzýD×y¹*,’ñ@føa¤g‰:3e@ª í–RoßrMÓ—ÐÕL=@O{€w¿¸í­_ °‘ý(X»Â™Û?¨Ç±ÂQÞìµ¥±¥éþ)Ù—ˆÖTD“ñÒ%<ü9jÆ,©‘Ð˜6"§×ÜKÙ©Sôš™ˆ(E‡KáÚŸÑH,1HcI ªÁjpÛ¤&jõkK«~c¶É›6ñ—X0BsXf{`Í"P6á$«‘šÂíY[û]³ê˜‘íúš]ÕBèPŸE†n]ïžÉhFÁ? f!aí“f¤h­Ñx¼ºvr~sØ¬ £V2Cý{¥6ñþŠˆ‡oY7€5Š%KÖl2×Ø¤´Ë+(/B3+Hä•Ú6Ó–Ôaª¨ôÇ;Ä‡wþ¥ZEW»o‡2~\wœÅpýã¬'EkÆkª;ÛçØMìõ74Ô8 šmtF X³ÞØ‡}¸½K4V»»j‡½+rûÂ)kÄËm¾Öš´Œ¡ŸµÂšwqÊš—Ö€µC<GªV£±—qƒÈlcçÍ“›³3V!šr°öqúÁƒîþ~K¦þ‹Â/ƒ5B§ÙxX#ØªåÚ¢¬55‹éÅùAZè»aÏ©ØŒï´¼ÁPÜæap¸æ¥5––ø­@s¡f-Ôè½Ù»¹“ºhã ­y–½è?%CQkü¸Ög­Õlý!·|çÉ”µVÅî”cÛïQÖ„jr„¼®²@šp_ÌëÅZDÙ×œ²¦‡¡šªi«%$BÚ·ÁFM±Ç[›¬):Æ»ÚnôŠÕ¼ilHƒô¾qÉS,B ¹ÀZ¢µ/å,4d¬FøR5â$5dcé hMþ8Ó’CÚ««w}¤f gÝï&y5çæ².hëSƒmŸühs’LÅj£œÑéQ‚cïy¤o7"‰Í‘'£ÔBE:e9éjzÑ2`À]É–	Ô{ŒŒ¡Ä°¹¹2VEvÇ*–†q0ð/DîD¼-#¿ÇŽLÔ"5`-ç¦ÈrœžnCÊ†Öª Žµ3Ë«Ûe\Õõêõ×E»™|5;“K f#yÒ&7¾ü×'²í§O5ðÄµ­k.+hÌ##iRÉ™õ˜v½½¡Ím]Ù!uË	¥Erƒ“ìN
šA¿dà*ªY\ÛLRýÁu¡L¨Î@×À|™ÙéA»â’‰&ff*wyµ„ÐâLæˆ¿8j:»/?6l2rra°¦Öy«»Lñ‚µ­…õjebBÒÕêz0VórOÙýjvŽÚŠgp=?Q `"›ˆvÉ´¿B,
›CC{_}úÕîŠnU­8X[ù¾²¦Õ1Ú×¿ûzà}_‹³_ÂC;G^¡NÍŸvÏ°¶fCêa;m]{UÍíZKÖÈ‚\Ûkkèj,7^—¬IX»‚µ«¸Š#¬ù‡Ú4Û‹yT3Í\ûÝ(\¨êçkŸ6ó CÑZHƒ<yW7@'º¬LhØ…Þ+Çéý¹‰5$³ðS®”5LFjÐÔÎVfn…ˆÚ$ŽñïßüÏ[ëÏ†xþÙÂ}A‘×¶²•óµÆP‹-Þýb5¥¿X8VS¹“4Žímå\mèÏÿûxmï©o±X&s’Ø]Z˜çöç–+ù`íé\õ(†Ú# ‰$‘G2ÐJö8§`L·/p”ze—ù)kHˆ š]m­×Ú·Ïo>ïÛŠõEÃŒF†Di‚5öò±k‚1¶yBg¨sËpUxð< ûùœáË"¬v{êZ?€vmêö[OÈëoâ#pÍZb/‰Ôš±§–(lÓp„ÌÇÛƒ '"§§ÑÙ6,Ròúçy¹Aª@æ¨)œÁFR’ë˜Á• 4‚;¬³³$Bz[7OjÖŒn|kl_²F°a	À¼EšÅjfëáÑÍöáxG3÷Jä_£íîSýJ½qâ]I4.\J¬ëâàÌû×ÖÎI©ºQc#õåå›‰GäPjCßAMÛ·“µ)—dIä- °T>Å6É:ÐóÈhÀQOXÅ~¹}R-ì€:LAD`ëãbUV¡×ž·ÞßA9cÑÐ%@š¸¦cÂd4Îï˜uüIL2ËzõkX3¼#_â°Œ¡¤r°»¼¼}tøá(kB¹—r®ÖØ.kFk—”5Â:­ýIký§møï4ØAžÁvp‡Ä:ÐK¼ ,„25klšá$/iø1qgúAƒ5ÝÈÐ­ŒEï'¢qÒ¥H²q
G˜‹êÎkXSùZwß€Â}‚Îk&§+	’X³M«²f¤¦‡EÐÕX¾¯¬kžJ=™ÚI…÷üÐ6µ¹6kÎ_¤Û+k—»¬±†>kþ!UM¬±0æý::í&÷q~Þz …·n‰ÞºÙ\èõA[sùÞ`ä¶.R¨¶ÊÖ8ëCßäe7HÖ:YJVïtfmÎSÄØ-®=g¢r£—Ë£$(›dCšÕÁV°ÖÄµ!}{½Ô²kL.û«®Ÿ	Ö”é@™ZÉ“9÷£¬k+Y=öÍƒlÎ’*“Î¦ý¨×Ô\÷kbÂPMÊšÂXR´fÑ'X‹g „F"´X«I©Ç›,³ŒÇ«vª0DO¢d*.{Y5¿Ž—i16‡"õÆ¡¨øÕ56%Bj#[.¨‚ÛL!6™ÐÀŽ2J©u²X%ÃëG9 ª–›#x¥6±.hCì*ä’ƒ_Bh•êÆç_Òum£BU\þÉàlRvÇñD¯]÷É…¬]“ü“gk“³%R(<¬™10Ê ©)Ô¦åóð™Êr¡6³ IÎâ7W«úÆt$w¨ãæ•¹veã°j!ÒÌ\ˆc
R,uðp…+ÑÑQƒØ´¢ô'šMØgÚV1¹Û¸»ºúçõ*÷m+C*$­¦ j’Ek¹D®(SÈÍM(ßîÔx%¥{J„¬j8Jó~¡6iÿöî™A²\†5gé™V“ÔÖRªf¸oë¥øÁ³A[gäØLZšÞ9<¿ÜXûôU}ïÀBÖZXíðÊ¹ÿ*®âÇk‡ã‡óŽÕášƒ5w)ÀÚûÃ-°Æ˜<ðWŸ†Vk­Ê;XM“¢ûdjvªÐ[cæ¥gÃ:Ã$H:I®°\¨,/S¡V­*RÖÖ·*[Ïžmi(:Û*,#¯‘	°AlõÆ
2	Þýg«®Ù§A2°«ÖŽÆ;b‰ÚÐÐfe«@ÎD-[ÌW¹9˜Î'¬WŠûƒÇ…B1•Ç»¿8WÝ#-DåjÊŠ|ZLàØïœ:”
yûã—¤¹ë<óÈY¿}ï[X{þüù{²ƒ¤?šš«aÈoŽý‚34k•m°&ÿ‘¿ É‘Ó*ËyK	“Ý“Ž
t¾&Ò¤5>ê¶xlZ°±%˜¾ÍqO?Ckœ–ÏÈµn|¡,ƒ²iz²!ªÁXÀZŠóÝ½³j=0Âk˜£Õ»4ÛsM22Ûˆ¤Ä47NK“i¡Hj:‹'@°fòçm*÷þnÓxð"V¿iqñ°ÖJkŽÎ,L6óf‘Ó‚ÄæOùØœek„¯Zëè:×–éPM«ë«ê Îî®ŸÓìÈ‡'7;$Ò—7jþØµ	³:–)™GŠZÙÁZ)K ¯Ñ¡O™±ÉR1-1ß¡ÊF¶<cR$°Zž=ÿR-·Í"¬á0²_•…#@•Xvãú´WƒÌ^`Y³B°¡¯IcadHwc»ó!ˆf`æ;«ñ¼OŸäYË6­Ûèiò~4¢;„Ò(Vã ßþ¿üÞÛVµÚÊ
°h#­Êš„5úbë¡Wÿõ%ð3¯Ê«‹ñÝùž[ÝïÌ[AØŽ);¼¶æ†Î†ÐÎ1Ú1ÉŽrÙ{ ±óñâðkX#7m‘;Îù‘½6=+îÎÇ§9Ê².¨Ôºp_?Ä)€¦Úå„µV7ÈO›v,âµÖ¦ØžÖ{P#Hƒ•jÚ³‘æž'9Ô)Â×³½ƒ¤vpÐ}«ß:o\¸’5AE»,­¹8im;ä’^jÀmf"ªŠã+(dÕ¢lHR#Ý«øŽCKgôÊZ«´öG¹÷kýGí®YË7¢Ö¼²&Ë¡y“Ü®;3H– k–Í†«ƒþò²Xõ—§uÈJÑ¬¡ÙÍ…!±šæ³‚Ôº «Ñ¾lÀ)l¨)Ô™Sö3ü.×÷»kr
tæ¼‚5—^¬îo•Ç•ºidN%Qo5ƒ4ëûÁfÀÆKFÙFkv^Ì¦½ù>¸[KdÚÉé£fÏD*Š¹™õ
>Ö¢ËQ¬ü©lÖÐÊt}ðä;ÂIÑXT2?d&eŸC ÏÐ-ò¬F¶>ÁsñD"‘Qãž 2KåØ£Gs±¶L×Gª¸˜©öe7™ÍÔ<­Ê§Ž~þåFµ²™yòå—¸ö“hO+•p*'â4$a& ¥Xƒªb¤ÁûÆxMÔžä	8®7ÔÎ–b´è8HÐh2•'Ý ž¬¥cÌÉ|%“Èï+ø^ µ<™˜xUkOøòsñ¶ÒŒT.ãÓDö˜"³‰°Ðš*
›T°®)îÒråŒÙ@ÞmÔÏÏk¼+˜«®SÚnFéD`Z¨Ì•e,²\Ã8šI>—ó¡9ru`µµôe Ö6i*¾½Ø«	Õ.ÃšÇ4“Ô¾Ö#,ârÁÚ¼ßo¶—­…vØ¬ýÞ~û×>	’Eñ^+¬¡ä×¬&\³€Ôx°èfÝ¬]ÅUüè`íïšÊµj¢5K„„ÂägÌÎ_j@pK^ów‰ô²5k!’Ë‹ÑÚ¯ß¦‰ÕÜ‡[KSí49:p÷k…	î†1½má*²‰µBÚ&–"Çl9qL@qä” k›‚µ!Xmåœö,ºéö‰GN&ìY¥R»+»{ê5Z‹dÈùgž‰g™:2åÉþYrê×·Šcƒûggç¤¤‘hIdDn$g—à4`mZ1±}´.áa¯âÛ¬ÁitÅ¶Ê5Àí¶ŠÓ‹ý=Àš‚Ù¸†È®•Mþ ›ÓÞ~ñ™Ü‚Öt
~“ùÝ"ìÃYÿl‚WL™d?äÒô LE¬õw3JÍvÃgÖÃ[ß¯¸N­³ùY¦mRîí•þ38ËO2˜*MB_SÓ³ª?Ks¬)55Kú$¯Bè,‹#1	ã0¢–©!¤©ùEkFhìŒ„f¡­š†þ@GzpóguÓâ1LÈæUµ>=ÕÇy[iMÑ×¨wv¾}væ½¨zø’ Y|Ë=R¥ê
ÏÏoÊÆ€â6·*F¨[×þ8
\Ú£µ&¬%!µ9*S£16gòc@™Âòó)ÓÚÌrX#¨,+N–8v*Û}²]-1'é«8XÛÖìöMXs9;œ‹ÿŸ½³ûióL×ýÁ>Þ§[+!rÀ	B][®e%
Á_Bc#‡ÚA„jï¨œ4Ä¤išª-$2K{Dç#ª
4Tš"1²ª!R²àp––šž J£}²¤kÿ	ëpÿ®ûñ“'.iŸ—ÛïÇó¾6!ð>þ½×}_7R‘ÌûÇ$¢Žê(?Û…Ô|±›Î¸Žk¬;ÆjŒÛŠ›2µ—¼úÒßX¾W1çeMñ¿|d`µ`©øÁ‹‰m×^[ü…ê¡®:;H‘J0ê'Üƒ5P¦©±!œÈ¦‚¼ÚéÍ™•¡)­·…ë«ÆNŒ¦ÌàE—y¯ÖP×n|‚ùÿ=Ê°(¢$ñÙCèË¬½¤ É7klËÀZH‚„Ôg!‚y?áFxüÛ¶D´NÑMpéŒÐuîÈ.€²ßPÊŒ\C8´Æ¦CX¦±7HÂí;S"ùì´q3ìC\#ðÔì;RÇ€6¬±ÚX”¬ûiìlýÚ"(kAXãá›úa;0Z€¶ý®ž–`mR²Œƒ5c5¯²ëö1êÓ<¬©ˆLmÖ¬2g¸R5vÆjQÅN°áÃ™LzÓíMþêò!@ff‚öNßÞøºwü®Zu¥uøX{Sï
©2Ášùˆ¤|;ìB §óá™Óé	ò!{€/p-‘dÛS ’M}÷Qsß8gåUÀš2(¹ÒHQKBœŒº¥­áô/E)_IuâOð’X—yeÊdd+•x†®Ù)ò"ÍˆRŸ*W­æ’ÜjÎU8±PÅu–ZkLìëdBnˆÌæQ½¸LÁe%ä4Ýw,Šßd4õdÏr)VÃW$KaZ–Ê9Ùƒh.¦.\˜ºpI­7Y0Ù$u‹Žù©x•ïVÓå¯Xá¡6×jÇ6¼1#ÌTÓ`5&ÕôX¶ZÍfÖhÂ¯Ò9»‚ä=Qæ°?™Ý×Îÿë˜½°ÉšbÃhÒI¯sÉFnk5[­ÂZ]0_oÆR4×Fšù¼`í`«ÔYß,©vª¤ÿú‘Ë¸¥å7k‰»½%€«Ú¬)|ùlÍš³€´…ÅˆŒ¼O&¤"˜>²Ó€˜dï-˜CršµÃ´ß6„ç¶ÙOå.â­û½´² 1ƒüèÕ¤ÁZN^¹ç¡fÍHíåyOìó8_$¬½¤X-¤B.LÒ†FZX€µmÕˆ·ÙpùB‰Ö„ktxdáŠ$¾cu2œ˜º¦Ï%L5™©°æê¬Y©Zi}½©&l·¶k›PÛ,"ŸJl“ÁOÝúúÖÈîîÉñÎîÉêêíåÇÄg|Uƒ5­ÏˆëFk'ÇË?|ÕŒ0×ÕÉz)I&G•;‹Íü†âéý‡ålz~ë€™íéÃ¦6º¸Ìgð³ÇÒþ†Uõ¨…4ùˆÃ7á|îaÍœ†ÖÞÑ€5³A\c÷õžÊÓ 0kï¨}Y÷5 !°Uû_×Âs¸˜W¹D7‡tê¨-{ ‚Ê4¸MÅhÖúúÔ!Ç¤5Î±¥xT#ý‘'­“Sf†@(Ì˜3sVêäµéKLÎ5F5:g+‰/£t¾llË wLâéø”*.d°–ä©Ã4Â›ºuÐšAší½ÉˆÐ­ËkkìlÂÛB²/`vÆj!tÚ~eÍ+:a­w¶µ0Û»0{û:“­~ñ€µé*Öøm8ÚíåFwQ-‚õ#Ý‹jgÔ…´–ì2X‹³rŒ×²l‘WÍU„þØ´á¹9eq0¬Ÿi¥’6³5…T$rlŸ<€ö78ùc»l­Áæ þÊœ¯s–±@kð“8Îü …mZ//<rÿ$Q¾˜|.*+‚cÂ²7°fÊÃ`á’!w–¡5µp.#Ï½|ô±všë7ÝÒÆRìõÖþð3=±CŸ5ò y¥^ÿ=Yð
üë«ƒý§ÐÐ à4‹@kÆì|Yèm‘¤@Þ¹f¿ÛwŒÃ•(ìº`ûz5=Çö.2Àëbÿ‹S	l`ßÉ)íŸ­IÉòðˆ¬F¼8ÒP¬æã{8ï~oÉ#ðÚáOkÖBÈ`$ð’ÇBŽü¨³JÏøÍ–¾Au@Dõ²$EjÖ:F‚dMÐrV¡Ïš‚ø”HµB8ºt­ÿ´Ovšê†Mô½P{·ý ¿Ù@‡AY3JÓÖÕ¬IXÓÂÞ´µðÝ87È kmÜšŒ°×QoDþ,îªÁkH_âjwIzzä¼Ú¥Td3xÄ‹•$HÆýNà²Žjº¡‡-¤K‚$yœ¡bôÚˆÈ0hÙâX®®	6)tâ5·û›ýíÓqèdÞbi˜XÆc€‘zBCë0‘±áIÈL‹QgØÀvñÁeI$&*Öâ	üüò¸(•šKÀU)_S)V.—Q‘h¾Æ)–œ‹È™Î˜Á°Vàãt˜+!úðÓ º¬á~™	ÖÄvŒ¢ðšcµXgŽ.z+e•u,³âärÛ±V+3xª¬Cî:VŠ„ºˆVä•õÕðÜ¥‹sck{<O>@w)Ê’´©KV˜lµ’Z­Fçr
¦Db¦ˆ‚hôR£3¶Œù«´uáSÈ<)—c<b¥»{pTEÖ"ºƒ•Þ«Ð’`Rá…*nƒ$+eˆ­ZešÏ«jo©eéÀZKW,Íä°swˆÛÀ·[jï>ÿaMÿ$Xµ\ ²T(ñ3nÖðª¬V¶ˆ’.è›kjRMÑ(š“ƒÍˆzºòSŽm²óí·¯www¾?k†k~ã÷4[s°\Y:+Ø<«…“AVsiÚŽ-°öîè—†i_òP<SxaM´ÖÚ·¸ª’5ZÈƒüçfçq¿DXã!\“¸–Ò¶íh7«q@ø3îÍ« kAZã!}\u¡Wº;muH_Üfjd]×Ñ¥&z&Ok”¥)PÏÈÇWµÚÖú•&°ÆÕXòÚ/ûúÖ•‘ænëäÑÇ¯™¨—?üÓc‰*+œ©„z´˜²fMvºsKKÌ‡8j1×”J…Âæ9{$kÉäŸ}C°ÆÕÿa±<Wi3Ó¸BN kxÞ÷)¦•ùû_}ò\•>^Yk{PZªš)lï}	µ}yk‹|J¹:Bx`šðŒ-Ë"ÌåZ©I\³ŠµEÙ?ê,d'€¾j‹(ôa›@\›øÀXc<a2-ÖkÐ½ßx„ÓIá:à÷ªŠ¹AT
ÐªD“öÃ§À§™Ù¹&ÉmØ®QwNÏìÚØ¨.ÿf€7­gÛnÎÆbÕ8ÔØ3¡‘p®aŒÝj¯ðGDà·P´âÍ{í½•y@v¼ÈŽfŸÍöµ5ç~ÞöõºŽÇˆKƒ|FÙƒìÄ”kÃº`‚Þ"QÝßð[·dÉEÝSsUU¨9ZCK« £Qº6ç,û)ÖÏÂcUöiÐlªkŽŸŽ™Î	’-¯‘¤ÆX¨Pýî¼o!û~[7T½–±\qšBn7Ÿ·aÖb`ñh÷9O"¯‰Öž3V±Z0ùÏGN‡sa°æR u~[kÀš'·m‚œÈ<‡ÏéÐÊÖ¬ýOSÖ<ª«…Ð	¯¬9\¬ÉZD^2Ëè§ÑšC’ /¬ŒlˆÅÐÌëNvìêÊn~p‡ìFî2x2m°9ƒ³ÈYìøSé€5³õïï¿óëÅ4\ÜNÁ4OiÁuÍ`RÓÂÊXk
oÜïq-Ô¬i#eÍ/¯þD7³5‹o0Uá¿ZP=vjýëûiJà•µÖÛ7@óúš±ÚOšbaÕµ¹[PKl§©	×DlG—^í•á•5—ýèxÌEÜÚ6±çý7Ä·wÆºßÜÑÃB»<tJë ¨&çÇ”—É¹_ö"à’ÐÈ2
a²$5Áš2!uF…lVÂ6N­Ûx+•ãCƒ5hM\¬YÐu9Á
ÖœËÔ¬|þY¸Ý³²2ä›íhc@xÓ~…‡5‚¡Î‡¼|£šV+TÝ÷‹ô¦ìJ„K<—KKå*u]É‚Ikõ<."ÒÕ´Ñ¥0YOÀ¨&ÞËðÞªÓ°8Jr^Ò›»¦&4æ).ård*D%8F9öèo\¦8{ñâœä;ªš¥®ù
ÅòSµü<÷3‹$B’	¡°U*…êÆƒ‰'ÿ±§¼‰nA* žNg/ÔTá<u¡É@²š‹‹Ü¢C)›â×{ì¹ì[r&ßòœ³ìŸ«Æå©&ÕD¥ÌwR©ðI­[6SD[³+`e,]á":•fWåzzpÀÓY*ÙÊå‡P\;hZäò1v{§0/­)Q‚•hEé©JQrâÃRnü#˜b"£ÕõÎ`¾Znç·0ƒD?[RÊã–*—(no6­(‘ËüÒfss—™›O4ÝYFU?«¬±tÂš6oõZc4­CN\cä×þý¡Z!ëûŸþþ˜ÆÂÃ+k]Ö.û’5Ñš™‹8Rc!Îaí<Îãš”5Â÷r‘1 lÈâw½¤C¾¯‘”µ¼ÅˆïŠmªšmgÛ°fFFË{;Wvd*±´ÄD”jn–ÔU--ZÚZw]vnÁi°™ò"Õ{M5lÜ1«sL1ÖNÇ'Ê÷Ú9YþÓŸ>ÃšÖÛ‚™x“C°¶z˜Rv"fÝj0†lÌÓcí`ë€ömÃéKSÕüÁ–&*Ñ~øtoº¬¥çŠO`™1Á‘ik°ÚÄ“_ÝÈÜüø%°¦X}$›òÎÀwÆfA[»RJO²AS³R5 çdüh#7 §Å{Xg-Ö~óžPs60oæÚÌÌ ÞÚ‰Ã'î9È{‹3µ>im2•#khhFo²ë¬1èfnŒM£¾1œ™F"!…~qƒµÞ"8Ž0æV+–`²ŠœÊL k³!ÂÙäíŠÕ(DŸöÖ"ÎW$„ŽÕÛV³3ìY}×ëÿXc„µÎð‰Ö4
ž#n=ìíå}eúÐÄ«íuW³¦ÂB¨«ÙW7/î˜6€{Rížøö¸‹\%â
Ù•ÑzNix@R•1ÇjëÎJ€ËªrÞ45¶´y–&X#žXF$¯ÆÛ`í¼ú¹é-eMLÆ˜ÌG.Ñ¬û= =ºic{
ŒÓ^GÞòQDfÈ&¼ãX]ˆÕÜy³ÑF»7œ ¿7Zûø/Eh/Ö–­ÙÚ-«QÅhÎòl¤Ç5{VÊš\Fvà4´*&_à3(Zs²š…%)7ŒMö	Ö"ÐYè8f¡z5bfÆ:VX]ÚœâZ³jÙ¬¹p¬Ön½ÖO[mL!gÆøf(_ô—.ãÏ˜ò¬&÷~;ŠË“ÖüÃHMV,!<­yTóÊZª¹ð<jæ1UÑÆÉ«×Ô¾ûÔTq`mÐšb³hãY-XŒøp´ÆYBºšÁš‡®P²Ö ¢.êâ0HiÜ©îÛœ¶áÑJèüüd¤¬µ™0˜A¢9R³%$B:_J)kÑB´ö÷ñ=]m#Á‹Úw#"ÆûÝfkß»KÄR(ƒhÆxñ2Kqdö!ªN¥iÚP¯µ[š<ÆÖ8y	ÝV—‰““UË…÷-ñÕdñ³OÛÊpÒ;z8jÙÔ£&­©vÍ
Õ,Ç1%¹ŒO¦\L³:á«±	¬fv‘|—=2þÀOÇ%i¤Pß"òÝ(È$^b›z¬%qoÌÕ9“A$à KL_‘d‚Q$Ç3Kòž-ÅÔ&<K˜-¤¿Æ¬å"8ïæ€=WªÖ”ˆ‡³q47õ`¡ÏŒ™?ØŒa3UkÉ%5ç†›ôPÙ˜Ïd¹ñàÉ“¯62¤H3T]m&-³`ZqÖæ2œw×{mÜÿT6å<ã¢¶.¾(g#¹$G›]“‰rq.¸•¹Ã•/Ë›2­Pû—1kn’V]4OfaÆz¢Ži%*˜ucC´V^­í>ß}m°¦"p¤5ƒ5î±}Æ]¶ÃC]»wµÃÕÛ-Ë¨TÓ%Œ6Õòšr=Øà‡Ð `$«ƒlu½ŸhÞjÖë1Ñš”5–&ÉáÍÔÐèÂÂnnwùçÜ Cxh»îi-j!‚qgÏµÉ@imq­Â'B’©,ç/ÒY²fºZ·÷‚ÌISs·€ 6gÜÿü¼'öyœÇ/ÖDk¬®-6Á„ë›‹8V³‘…Ûs(X³ÑG¤WwæAZÃµgŸ·YÍí4Ïb)é² 5!§’‰¥§¸‰(-*¤cÌ>·x@¶Å•—ÜHBùd9`2RÏS¹Ö¼%amG®üËÇÀšŠË‰v‹j)z×•¡ø™N¯>þá‡ÕVîä°—Š &3<É¬'½Þ„ºæYŒiD31Á<çLý*õù=Yý“VHÎ?Ä6ñäÆ0ºlõ‰²Þ	º±ªJVÕ\Èd„”È/×Ì¢‰yÈ{RÔl·LDã8F5]®ÑÏ@6õ]{Gœ6¡ÄI”5¶À²Y?µiŠ~>ŸÀÚcCèiVø¢g8Cê"xv¡o¶äÄ`öÂ%5¹wŠ…$XÆÇ+¿sfØ#f`µà÷\kSÓˆˆ°·K§jB5ÍÚ2íg6ŸÓØikAò£Â±w–&Xõ³v¶¾Íjé¼šñ<æ\¬±÷kˆ•ÞÞw?óaBç{Ì´Þ¹ÿ¶…ÝÀ]–9Ó~™„+ÿõ¬ÝûG¤–¬Vª‚´j¹l¾Ôé,‚š
×ÒÖT­«Ê‘Ô´4}Ã‹²€d,ÃéoÀt¦¤zG4,XÓI`ËþÄ¦.i’Ø,ÓQü&³Aon!©Ìì!Ùx¿Gi¦«éƒ\wl{©ÁšÂ%9¶‰Ž!:°%‰Öø Úò6'Þ}²©A`g½ ­iÍÓ°&cEtÒîÌ¼ŸèLt«o¹pÍgîña<ÅH†Š4`ëÆâà¢ˆlQ]ã½¸ö468xcQ*OqžÖñœ«Ù€Í Á?QÙö¿èÿõ©‡5¾-+X»¬-b3dãÒ ½m?3n5kž×0éd5Ghá”—¼´÷¶ýÖü¿Ì‹’ÕínÊ~PÖÎ Z 5GkÚ¶K×¶«ÖHV*Îc„OoyÀ±/Î#Â`MÜø&¤¬±oÛÔØØNÊZ[róßJÖ.ÿÕX{.]¼ÜÃ_¿ÑšVçk®C 2«ÜŠ€#„*½À¦¨š,F¨×RÍFs?¬¬oâ8«[Ó“š”`°?ZÅh
‘6¬½g™°Ú3n×xëþÕÖÊŸOZ\@à‡zÌåVS¸‚90sd–âYOhã¶³½J˜—£a§z4R5Uˆ’)‰)MðLFb2CâJ“¨¹Xi>OÊb¬Ý»€[$NüùJA÷K…Â•—Ôlß‘%¤Ì ×›±ý®8ýÛÔ³m)‰V”ëVn6µWsd¬N•úZ±!·Ã:dVÉæÖ7·bu¸©+‚5Å=e'ârüÕW´×œÛ£wö9þE¥ÒãIaZffªsÌ—âZFs-×¸[¯|wªªäªœ›+Ç#Ýs•|•,IµŠã‹†å¢ ^nxD*a¬RŽóEú¾•h\MÌ—ùÐ.koÚ€°„^Ÿôê99ŽÄmê
ä0ÒÖœ™ôÉ7‡‚5þ‹¸º[(Ïà"7~fïúR½Zyø´fWÎã$2ßÈó††Ù%8w’®o²¬õð³lR´Vj²o¶vZ¹RÖnwöYãâ:êÖ<Ž9ýÌ\Ø)·9“o|ûýÖ7°}÷ÓOW>‡Õ>5\;S²¦,H&Ä˜åAædÜo¾ý„ó‚<‡µó8_¬ýwþòÕgM«CµÝÔäd0@ê%£-¼`­£U¯-ðnÇ!ßVÖ”i¸ö®w•ô°æÛ°6M––”Óä*Ë…U3eÙëÔšË¢Ÿuä ÿƒ‡f-ÒÙ‚Ùð†DWÛÚ$1bgÇ|›ž@e×-d)¡vÈj”­;s Õ7ÍÃ[­W£Ìså§Rb^I¶B=ÜR²œÝ{ðtm³ž?(§e1V|z™¬ØÀùá£Ç¢Í k¬Ê¼»m°¶ü-ŒÚb›¨öé—–ùgF27„kÂÁLîÐ¿!’±ÇvÿÞïÖ¬TMº°†¾F“6KI»E®¸ ž©‘6Õ;ä8Íàûhç]¾#…kV•æ±=\GÛgQÑ ¸ÚŒõÕ1iFrS—jÓý3O†Í?™íâÅ1ÈÊ¼a•œkþn[8Oeè°Æ”ÝÎ¡±ÍÆ
¹ŠDÎ("zI(MsÈËv
ÿª ®uøô‡h{ú3×uœÜ6t8ÛÛ»âAa575ûyöÖÀµã!«ï¨“’ù­¥º»–ÞôÁVd$A’OLË–çð~$ƒ'K²Of³¦j¸efdÁÂOP{õ?´É\3í| á{+¾§¤?½ª÷•)mmãGÍikÕº¬ÕM[kÃšVFþÉ6¬Â/0Íyˆð®FÁÛ]^hí‘¶Ö$ ¹Jzn)r~ÏLO"¤ì"Öþ VÁÞö‚<‹kÞR‰ÄÎäÑUt*R‰ÐJ}‡¶æ÷ÖÞÖ~Â6™Begî!ß¼™Y¼vG®üwÄj²Á¾_Ã!>SÁv'ÀšÒ#Í‘'ÙÿÉMµXûäê:Š¹¬?GP,¬ÎcD°æÖP³„5Â×¬ýlŸµ€kÖÄ›Ä‹N_>ÆÎ÷XMíg°ß'U‡híEgÍÑ‘É äBiÐšÀš…ZŽh(G]žš¹õØŠ\ì×P>¯ò“9ÅRßÖÛd@º²µ@k¦¬lYª±1RcÓr9ì:‚¿G)ò®»²»Åã-FPbJ“ÞOt'€5ž7}œ4€50Jµk¬©îîq¦†[`š‚ÁÚŸá³ï»õ2¦³á«µÿéÃÃÒ'Vÿ”5BÓ‚µgm;È“ÑÃUô5\Ý-éÑÛ†¸>Ø<ìÐ÷Q³…íxLê»dåD$Ú,årI`-_¦å2÷y
’z–(fK‘cÝË*X+‘,I©]¡¡ÔB¡Dít#¿M–+yØKäBÜR!»YHTDSVïké“‰.
­kKâÀ\Œâî‚\?â™auÂL£P5ø–ÊC¬¢ëkKk%¡5‘ZqãÁƒhíÁÞT²^Ñ¦³ÓÓ$UÐµ%[«eÔbSý¯¹È;ÿþ)¥ƒOY_JKSœJÆ•éu3kIšÅ‘æØE›ªîtÁž'í²\ÀÇƒOëû‰w©Ò}a¡‘ôÑ$
cZ@É‹“Ïw_­.ïx3H…¦T…åCâ¹ùs; ·zøjõ‡zX[›/ä±"ãKV1Å< 6°\@¤,%y>ÏW©ã
¹ej_³W¡š‹f±r¤uÒz½¼Ó²]'¬…LHÔXßuhÚ*³Ó,Zƒ·HgÍtÒ-l†$«½û¹Ë‚<<S²&‘7ñAkNYƒÕ ¶—æimÖÎaí<Îã‚µíÝáaM®)'á‡ØAY3‚k›ùS‹@MñŒuåÝÙ!¦Aª|ØG£“ÈÐ€JÆFÖeßT§28–ƒÅÐ¢4JigCâßom±áµfó€K3´£MþIƒlî.;Xûá¶…k‰Ê=UÍÓì]­Clþ`n ³=Ÿ«S†ðA/·ƒu&™û÷ŸÒ§šÍNáœ?xXÌ eÃÅáLãéýá™b£xV£öp“£ÿÄØ#)kËúš„lµ¢¬±P²†Æ6¿8³xF£Í’o˜û#%k×`5 *#£LƒÜPÆ¨/a¡‚Và!¸Ib»Á3¼í¢f®;HWH\ýgÌö¤¿˜I`c~Öbš¼F?m™¨SÛp†©˜S8¨í•xÐEWhmT0PÐ–q¬v1;<6­w ¸?ÖdèÌ,ƒµ,‘QÙZ7g¡±sÇžÖlàÔ5"DH|$ÜÎÃšöáIïñ`MÁ¾#k~Ø	lWgG»»5¹
¬}f¬&XC[3X»Î[ X8ê«EÖbÈ†Ñ·4>YBf+Õ²6PV#2Ü£–¹ZöÃhÅŒÒ3YÚxÞœGà`žBo3–MqØFî~­5 5!•hÕê£FÃL-äýèý ìmõÜFÜÉì9a˜¨ÌÁÚåk–CÉƒ8÷<[¨!düøjÙöÊ‚l7Æ­}‡¹ˆ"Z`µN‹×œƒ?°†ª²ÃfR©Æd>õÏ‹gÆJ
ï9„§PÄfý°¯ž~ ÿG`íæƒküU˜äŽ#Ð‰ÃœàØ`Í¤4k÷X8Íž"’CüZŽHúór—ß_¦\M¬¶`¹êŽ`-€ZH‚âÚÏºAþñß^¿aRØ‡'0’ÀÆÈæs¬Ñ¥¾þ;¨‡ƒú«î¬YyiíŒ²¦'Í]„Í¶C.B[Êrì;Å¡³ÏX“Ó>ØMÉÒ¤‡‚r!‚²fºšV@ÍðÌí=m$§pŸ§´Ö›=ö#*WS„–Êv`$C±›¨-Ÿ$€‘ž}
Úbn¨%•Gï¹·©²i+k£ÈjPóh<©tÆÖGJrWa23c5ŸÏôÃ;~réÈ¯Àý4º“ànV²š€Lˆ¦ƒ5w àI/¨Ùž„yB*d
I"u”’d®7ªU­ÙÚfIR},ãy®4È_¢Ûun1ã¯½ÂØøÃ \‰M‚ÄHVWÉdÖ’ãù˜²úÈµ³‰ æ²’õ‹ÜPÄC¤«kB³d®¾é°ÅÕ'²ƒÜc#qm¯œÄgŸ‘Ê–g†%¬MÕ6ö¦¹Ô;X›"è¨éÛã	Õ¨jËfU¿‹¼v±k?Aêé®&é6ŒShWM“ >UIOÅQ¹rY¦•L ³Š ¬‘© œƒ½jòÈ)…A(×8˜¯Nûš5¶Ô3ï¢¸aedódçöòñájëÑ7ß¬U$«Yvl{“«Ô‰dNÿeÑyŸ¼d‹÷õyY¸`™ÓÄ1Dp{ùÊèì·ß¶r;ú¢­
Þ¬mÍç@
Õè}MÀ3fÀ—×Ó~>A2$Bjë!}¤o‰ÝVÕXBÉšÖZ»=Äå˜X-'Û~â²t5–óžØçq¿HXÛ&Z»Ûmÿ¡……ÝÑ‘Îfc….7¹Ã“/:`0UM!;È^E€5}÷ñ¤“Ð]mDµãKuFMzŠªLÿõ¦|·¶R4NYO•Dkxö®±]£-v¬Ž¶»úê¯ßXoêÕUeAZ_ZóÕ
°šlFG~¸õõ.ãÕ8°¦¼µ‡¿}Ø(­7·~{c‘ƒr­Fã›­Á¾k­Â„¶A«˜bXË ˜LØüv™Šwâ¿š¸ûò;bÙÜô|î¥Ú§¾ÑÚìÈïþü»üm€\-ËTÞ£ðlp‘4&X#M^»ÇYZ¤y6#RÖ¤¿½Ã:ë£
#ì	H¬F¶£D³AŒE²$2*¨RÖã
‰'¤5‡«Ù\\ÃŠ$;Æ©Q8€²«3e£ÀáFÝ¢ô¾¬I²º_*XSmDFæ$Szë’šXíØ`Í-¡?¶%=Ã\{S–æÛa{D‹øg9CGHÖŽ°¹NÛiCÝ5}wàÊè
Jê¡õÚƒÕÜ¤{ÝjÖ4õÓ×ÅP4ÚË­|Â:E4˜3¤y>•lµ;¢V¨¹¨VÒUU]¤µ(Á‘UtæÌû78æP»ÂÁ±Áo•kÊÊ¿ru­’‡ÏÄdmÃG¦—Q³Ñº\—¶æKÕØ¹íMpG:ãhÌžven’ã¬Ûš`:{©8XÛ¶PÁš²"7Îl«S úN¤æTµ/à±Î4ÈÇÒZhŽý…8Í¸Ç<û]’/{kÁÉ?´Ãö,ƒ®vŠÍ>„¥Ö€‹µKS§5ýÜ°DH”µw\ÉGFfœ±Ð±ÒA@ÒÚ‘¡¢·¡tcàl’xÍ²£`çâ[‰j_h£Xeýç5k!¼²Æ×¨äŒ<E¹;wpµÏl-ÑÖ€'C5·A3SxÛþg² -²3ÿÑÔ;—X
¨í+ûXC¶¤TNêýAíšûV|0ôÖý¨Æj¨FhäI—eMqÆf„µw¿ývÿ¢¿b°ˆÖà6Õ¬Y—gø,’í§PEV[[g Û')üFÈƒÕˆ‘èÈÊÊ-&l¥Ø¢¨EzÆIŸd"9TûÄÑ^’ä„k á`M—åÑ©ŠzU¬¦ÜEÅ©i
†
§¬yß%;êüˆ"T¬éC`6…HŽ
7"E©jú6übµ\ªY¢…€F]°Få+QÏòÐV¹œ“­#tV(”Ë‘„0,#iS®tJ@‹W¿ŒFb©fŽŸ²Qø¨‚<e)Ò¥_VõW£]h²T°VÔåKÉR]£/­¨œ¶XÜ¸ß08ªT‹–IF$—}n2aü¿·!X#€3h-Žýo¼ËÂÜ!Õ¥“ê5uÙät<inžñrNÉ™ñd¤JrË^šŽ¹|¹Z(k†ÍoFs]D"QO&çe9BÎ—±‚¬Êá«¤æØ…Êðž!ã1ÊvŽwèŠ}›À±K°æq@R[inª¢íäd³ÈÛùR•œJìÌ—6K›Q¤:~ìÜè5-´Ir)°V(Q¡†+g¨@:þ#%áD½üÝòPïîk²ÀéýósÊšG5±œÆzýú_<‰ 9•,­±hàu6ÏôÅö1 'H+Xë4ƒ°vb³[Œ_7`-ç•5ik.ò¼'öyœÇ/0þ›X­ÕB\ãñ×vÎ&ßhÿl¬É_ÄB¹¯íEkÊ×!…Ü·L†kEk¡«vj³9b}±›¥zb©´I`É²©Z5yA¦J›·FJà’'M½n¥kGùoV_}ójY5k„ƒ5ðÌ²0-á]GLà)=oíþ}Ò£Ëwó¸@¿¥mqló<¥vq/“ÆcD}d7õ” aÍk€µÌŒy(ºžØcÛ0ÊÚ_è½®§5QjŽ5Æ–dtzf¾Y@MÂn€_ò|ÄXD°vÏEäú(7Hå4^×pY4yíÞïÿã÷¿úÍ(Z»Ë©6ØÇëø\mXƒÉX¤¢ÕÌí­&UmzšoË”YþÝ@9«é43¯ˆ­–*&Æ˜éf–	¬e/ÈID7ÂT–ÃeXû×*sL×2!³–ÏL¸ÐZ0ðgëÂ!šß¨Ášo¶æò$ƒ³ˆ—ÏÜØ€+”¬ùÿXsÓÜYe6ÒûùÐg8”–JOl~ûÌÄËì õË þ=‡W°îoµXZC®*fÜÁÚzs=¥ê™h€µ*{\ ÓÐZ5[Æ’;È²7S-Ú°ReÙ2ìÍ h³áÚ°X°¶ÇoÙžŽ8Þ+þø£Õ˜IN£±t4—÷¸kòÄe¨qRáqÌÛ=zËwÞíÛÉ“»Ùçþ—ÇÔa½4Hºac	¾AgXŸ9X“¦†Ææ
Ök¦ª]MOj=ª±x“=Øíˆ?/&áo¬4ÞŽ ;øôûfØzêÅ¯ï}ÀbÍL½­I„»ú>—aß¯$9ZšŽ¯¹SÑBàÜqª×~cÃ k.àJÇŒ®ÃšN7HË‚ YíU§¤¤5ký×øÑÂ^a?#£ö[¢Ï¾aÁÚ5×[”æ@-<ˆ@G–©ö¦¬…¯áW…ÓõÐÖŽ&LZ<²oàHcÐ|H÷*o/b°¦$Hƒ4Ûº¥ÍjÚ{ëþNemÛÚþ¤SÕØt÷¶"û“îÓoá!¥²iÔƒIr¨k]äú«ÁnúËÖ“´¢161Í©(æ­´F¸ÝÒÝ>ñVwO„t“Çôä8^àÍ<ïóÛÞýº]çyw‘ÛÖ}Q#=C³C*Y3Ù^+Âó™G3v‚6úb5—-éûc»â6Žbºr07Õ—bIa'zh‚]Í'sêN`9ƒó% ¬ÂæÑÒ–kàX!Æº¿$
«‚v9s‰)r’ŸìÂšCj‹$¨®Áxœä>ãü|!ÞE’6Ö•¬Ó{ïážŠ×
T|7@¥¹ê<·1ÅJ¾Á¢éáJeãÁÓB²¼ñN{ ¬ÈÿúJ·ëÊqzvSdf“†eV\š¢D„wíØ—p¹t»t&“²bPŽ;†'ðQV*¸lúËùz.Ï«½K9X£¨­§0­BäËÜ»ª’	ieyù|qŒyV¹£ó»‰¿=ÇšÀ½°&Vò°vûd³¹û¼u|²Þ`FnÔ«ó|!ÜúëT¤åêóù’|cú_m6É
%½´¹ŽÉ¬FÎ%–›%5tè‰ñ8:zÂuð„_¡–)zg”5Â4@í/™íPÖ<xy4ÓÈ8Í{Bv‚š°n²lZ-F?ÿ\ºšå@º’µ÷:³ Ov{Ý\è•55Ys%k—%¬çYçq¿8XûwÁš¯Y“ÅWÏ‘ÝIçOËê{9²1ÒúyX3Zs#Ï„j®‹È¬]Ÿ†„iÁlÄ},u±¹2{åVSU×Ö]mb’	ä&{ÊÓÔê®P'–ðÕÚ<ø¿[[ÿòô~ãà¯?üõï¯ &k
fj›§qg”§T»2å
Ë'?l6yw­Û{H'xp©;·‰çñ}óô+ŠÑöòÅ§èëù°±ñDT­ííSw&£“Ö>ù÷ïþðÅ·D€5§­YKl`­4“Ùü]H2ãcç# Á±k2ô'¿‹¸Fµ	Œ!IýÂOO˜	‰+P»†Ff¦æ’Øùö!V«F YcìªÒÜ¼+XËfMdÃÒU²ªñ¨]»`ÓªN›‘ß£ì¥8_¸óM2dF1ÎuÑ!»Æá[°¦hó/v}“lÛÝ^‰ §jmFóÔæ"Hko¡Áç1ÄOÎiï‡úØÃwW®¬˜˜ú,˜0»Fkj¸³¯Pµ¸ÊýYºbuG\Yó‰nn’{…yx»¯:WÕ>^¦0dNÍcKZKÏU§@4aÌKH8s_ÙH°ÊŠl¥$ý¨µÜ¹à¤+W“‘ˆàKhö±˜y5LâÙ¯çÖpÂ„×ÜÜ³¬/&_|,	^×œzŽ°¶}Œëã£×;Ûx‹ìóç¼ýòåk$·ï²Æþl 6£µï<ª	Ó:Œûk™.|.äŽo«|õh°ÏEŒÄÃûÖŸþplgtÎS°Óÿ¢vïî'/jw@±Ìéé5%:Þéÿ@¨Fð‡€¦&okŒiÚæx§¿ÿ-X»
­}Ð­]>v”Í1"ÒäiÑÙgÍ·Y“qÿGgzbk¨f±íÀì¨/°áØ0…òµ n¸Ø7<Hp`­3\ºcgpÂ-5k	;aMkúaØ¥¥oÿòÑþÕ¾k©XCt¯Ó|˜¤SÕÞXAº‡:Ë¢ÕõdóÊ!ä³Ð	øirG7”íÊUg‡-;»V°ØCq¸ÃFÂRþpX4:BIæÝo87.˜¢Y6{@ith\¢Åk'J‚D!±÷úo­ÙDÀZ“sÅc^vÒâ®]Oëp¥×ƒZÈ|d7à+ÔØÊCD¶Î12¥m€5¸ÍùUÚ§á;æ>#ÿ‚$R‰\]jN2âü ÈmXpð…Ê¹ê;J1‹WdÄ‘Œ‚nÜr­+1E"Wª'»ùl@M.Æ9¦Àx¾ È]ŒO™­G2-­Ñ}Æ ¬Xˆ”îUé¹üæ:“ÚÚÚSjÕÆäµA½Ú|ñ	•kê’×È}µhU1 )ëÖÜß`mnîR×ÕÃI í²¯r¡¬µÁ»[N‘vÉ®–ðÈÅ97¯yªwÓ8‘Ú<4FÊÄºâüsâ™"´–ÕÑR­RÌ"–º‰XLHxù\|²5ë]èµŽ5¹ ¹Ò”­k‡Ç'ßãøùwÕBðé¸a«Â…JÏ~°¦(ŒÞRÇLD F¼7Õ»‹¨>gÿ©¹\OTÝ±[Çvƒaíø-X#:P5ÄlgŠ£öJdÓqÇtµIÛ¨9fcÕÈ?ÑXìñ:KÖœ½ˆuY‹ÄÞ¸Ar{n¯¬ýç9¬ÇyüâF<¬~]˜46S¿µ ù›¿ó‡dLØ¹–jÖ:¥5¯¬ïë;iMŽ_$#8X³ªßè¸LšKù:ÛÈ:¹$#rÏps]ÛÖÖÚ&sy³T Ü6SM
Û0ùûÚv½k8ùS.wxbsµŸ¬ß#®£t¬=“®vÈŒ~R?€Æö`²ùzŽ.5¹%jc‰¥BúéCI$¢ñpc‘ä>ElJ©O[úã„ÁÚ©#70ï'†Çî>ÿ×/œdðýu†B5ðôëÍß}	±¡—aÆoN"r™¼½Óî”-S«ë;²‡\D£³ï„’ðÂ;ƒ
ze»¬IpÆÉ•[© ÍmÀ.jÅû 8¦`;KB£º›ö)@µélÀ¹+ÖT›7Í‹(€ Ô|Ju&5KyÌfjpÏ j¢5"+˜k[ ³½Oƒôý±ýS!’ø)¬E:u5VFÖ–ìx†Ø:aÍªßbWfg‡"+ÎÎÏºŸACî€;Ì~xÈ/çêñ!ÊZ/•iø‚¥ÆÕ;ÖÄr4¡†Nµq3…l»Ä»T	¯#öØŒ	”utf¨¦9fó`CÞ¡r„4¯þ½½)Xû±¡ŒÛÅ@®sýã.¤FÜ­}’‡×¢¼ã}nœfOimKn:ãY-„7!ÉÙ^ðqÀÚëÿ­1Ø}þ|g‡~j¯©UÃJdÛ¦u6k‹Û±*¾õ²Ú™È€j°7¡×î, A@§}§¡f-Ø‰hÓYµ¦edzêH»#QÜ¥ÎŒßíÅþAL¥¤¡5×P¦¯ièaMO!½ùH´)¶'©Y»Jgl”¹£ËGƒŒœË¾9¶FAY!e­3:kÖ‚äUâˆ´fz¡Â†m 7 mÐ¾yº Þ‘²†´Ö)¬±„éŒÓÔ´#‚ÁˆQ` 5÷ÕŽä$‚H©¢µ«“§üñÕ¸µ#ÏN
°:`Í'AÆk®ÅÚ:;3ñ÷÷Ö·´Ýé)bcíéêÑgîÑa‰íªY³Õ1o?]±«#6Ä±”ñK„À¿Ÿã¨R”1&†‘Ô•?_é…ˆÈeÓÕÍ™Ô8cáÝ×ÐÉZ*\Vëd«Z“°“Õk,<ƒÿó Ó€ì#Wœ¸`Í!Ù€öSG|~ô3ö)¾ èL¯dHèÐ„5[% “\H AÉwykñrUL„bÆ”•Ç£QÈ%á®œø¥ŒuQ•òËù„qkÎ„µd›ÕÂ5V¹‘1$’Sq5Ÿ~‡„šf£$íé"T‰ÿ?öÎïµÍ3íó/ìñ2g¶©m‚Ã‹OjlGÙT	Gˆ”ëæ•‚¢Ê1²{PòÆJZWI[Ç³mãyØâ™i“îØ~“âÅÅ”q ™÷¨0ë5™¡k
ÃœfÞ³aÙ=ÜÏ÷ºuçŽêô/¨/=?îç‡'Ï£Ïó½®ï•çþÖLea%Y'ÓŠƒ"‰²ë/u•BZcIäzµX‰—‹eœøg•ë°Éö7s6#C`M9ñYXmÚ”5ý–ÜÎ_P	•,pj*u•? /}z¯5+el/!±Œ\#QÝŠüWq¬(àË\Nüh#_ÉVÜ¾òÃíI>²<ô°ÆœìCßpEšé’UÿÛ*ÀK’it£Ýh•€Å"{æ½16<2¿¦,Ze—+shKz0¼¸ÈÎó´X[\äÑðï1ŽŽôØÊ’ Cd—´Hí-½Þz0Œ${Â«ßs[=LFo,¤…0ë~‹‘Ë&¬9^“ÁÈß+Yûìckk{’Õ¼°æ.é§mÖNã4~¤°F8Zã²iÐ&Zój¿wñ·–Öoú’5ÛgÇ>ÿ~ÑšPM
?2iö±|(óyÐkXc,aÍnŒºçn®¶Fx¶ÙhlÀÚêÆØÚf»Õ¢|MGjÇíÛÐY‘ÿö'"Ã‘vsû½'ÛÖ<«1IY3Ÿ‘gìÚ_æ}úQt®]$'ü|ú“‹ÜóJ­(	ôÅQ*¯+´Û&Y£ÝÆ}CIkï¾ƒgNí£WØÄ3Ë<"(ÉÆ\­WG©Zs°,F<­uûþµYèðºrà“¤f#®I6¤4hNæ	æ9± _ø#ø÷ó!ä42…nrSÙcÞÂÎ zÂ60Í5lª? +R-×¦Ÿï¡RmzÆ|#A³È+³‘È'Ìê˜Rö"³iŽa:]íWû5§ÏfÙâNm &Ž“°–qöÜ_ÄMDHƒ´µ“Ô|ï5Â!CÙš"¡u{B:ZÓ0›ìë½©[ƒöG÷Í_€
B•¬‘eâ`M¬¶Œ÷2¾qHkâÎÅè­ëÖŒ½SM°­§YÐN-Ë˜¾k5ê×øÙ‹Êutºšæ k0|Ñï xcD4¯î¬Ø¶ÙD¦Ò7R²ƒµé‘M¡Q…æPÍ³avü!døoBk_Õ&H³éÐÖ£÷oÖ\—µ¥G ­m)R%j,ÈƒôÖ"škkÅÞi¼–»lFB|¨B°§‡£±aÈ´½t>cÌD8NSÜ¡7ÅeØªLß¼™}xîu í_$9Ý”ˆÜQ×ô_¢cüÈ‚ 9¶Ì"9&«Ì3¨Ç:¾Î¼Jõžö=ª˜‰ ²u¼EœÓ±$eÍ¹Ašq?âZwSl6™<©7H}6¨È	Š¾rÌ³)ØT¯PÄf¤5sQQ¹é1 ö=±Cøzµ.eÍwÁÒš°88sP?°¦ØøcÊRcV–¹‡7ä÷`ÍH,ØAvIk6Øœ°F:9çôÑÔúÎ¹±Áá@…×âMX× mu£TMEkj¼†!$Ë¾’ÚØ8œfý°§`%èiœnØSÃ"$îBráþQ_º»DÏ{¶þ³NÉšíPÝÚ—HkGGÜŠp!uiöåCÒÔlì[ª!šŒ9«È tÚŸ©MgpRÖ„m…Ft aÉ«‚µD‘¬Tâ6lúÛm™Z¯k
®òD%¼$µd^WS­ -é’ k4²¶t¹>6pùH–èu>A\½²¡¿|*«þ˜©9ü:"ä6›Ü)Ý\¡6Œ[šªÔÖß]ß‰¬³L•É‹Íà°E‰YªœQƒ5‹üØU_9[%â=@¨Ö¯;@Ö+óµ]Ê»¾™*¨•Mö!ÎUx<U,ëgÅK²“VdÚŸ(‹zâÙÈ%“½±\Måvê®k¢á~~ÛØÓÝXüôíÜÔaçFÊäy	XÛÝÝ_^f-XÛÄ“…Z9Ál\£`¯© Ö¢ƒSókÆ.ÒÑRA­Öb‰wë1BÊ$g´Qºa‹ÕÆëKD­yRÓËâÐã…‘‘oM­›Û‚ Æºû¤ÉÐfíÅžØ–yiÍhíÏNYëÎ‚Ö¾Þ#ú^È‚<×y=~ýñýÓžØ§q?NXû/j™Û©W›4\ã<^÷06â»a+ÜX;9è¸Xû,ÐZPÖÜƒ#T´ kƒªHð®ƒçç…lø}Ío¬ÍLæLM²mÐ	{ƒqkl¾ÅX·JÖÆZmJÖ.Ñä@ì.m-™•ÕiV§fXø“im5Ù¿¼ŸkâP"Ëþ&¥GíÍ’êŸÉÊHš…0”…ÊEkî¶TTúB|£ÖØÚýÚÌ•/~3k£÷å	®™´F¾†œþìhMŽ_ýòâÚbÅ`M&"@!Sþb³»viÕO^å8dF\RÖ#NþŠ×x›J6g!9cUkJ€¼òSvÌ,\Ããìr¨¦†kÓÄ«3’ÊÒi¨K*Ú,KŠÐ¤ÀaÖ¬å$48ŽMOHXËÌb#™Æqe%]åTƒ5>2²½‚¹ˆ:›’@©©Ý‚™7…ë«æÛ¬Ù²Ï“œÛàdsµ.Xë²òw´æÁŒ­“Æa—±Ýpß³/÷þW™OÔÛ|û?RgleA:÷î·¿\Þ?¼{„ª&ãïñh‚þ~h«Ï²IVê³®ØIµ‚ª)ÇÇp-®_@¹Š¬'R=`5ÙAºp~’Î üQÀƒ5–Š«W;èfÛEÎÿ¹ÍZ­9X[½óA^ÕœßÈs)m^øGÚ"œ Æ°c	é¬F>@ŠÚûðDkHkf®‘É „¤Ÿ­-ÙCþ~ëß·€7ÖÆmïyP;i¹¬É‡Ñqw5k¤ÔáÝ<t þˆ‹|GhmžÖPv\×³`™ˆ$ø@˜M€š¾y¬ÓA…¹=Âa;óGÁš©iÝA2¤õYƒñŽ!Àƒ!sí€D‚~‡n§‘G¨F˜’×ˆÊ¸jÖ µîšµÀjÏaíUÿÙ]0r‹ kFkLÏ@Ã”—xÎÒí	­u‡WÖôb:	kA¼Sð…6Î )<¬»cÇgöàª.Xcbr!ƒ$/mš¬&T³™©[Y)‘¶8·wnÒäûVkEžw( fÍ\YMYcÒÚ<;PDÔN•kdÊúaÅúÈ~äFÁý†$¨yÜåyñ_›I¸ÖI„~ð³Ž}ÿGlZÝ¶ý#——ïŽ»§@îââdŽÉÂB°f0f§Ú®)Æ "ÞD*RcÛ—´AŽSÀZcµÔGŸ/y÷×j4Z³HÄÖ@°\Ã`-§Ÿ0™oÓZQ&Pµ^½}¥<Ì…ÍTçKÚ¯(§=}	´G¹ú³Ÿ¥j¬†õ¿¢`Ø£œÊdÕŒ!#)`°Ù!xÔxïýÔ*5¹Dîpmúâ‹wE¹Z%Bål¹'I¼kw*‰÷Â÷,÷‹Yîl­ÉR¤:ä6›åN¡Öæ°[“Êå’{½I.5•Úí%
K¤ã€ÜIÔ¦2_æ’çoKÑÎ4—Ó·¯Öð)À±qx•ßA!ŸJk:òVÈÃXn—;é…„á’§µÃúØá²Ì¡8q7~ˆw mRf¾I©Ñ&	3‰%L‹|vþp<„-4xGú(þÒc®ú²VWW²k·cq4<Ò©Z{ëD¤—Õ É*ß¾Üyâ^A\³Éí«ŸÐÞ,r2´XS8/H\û}¤ˆ­;’ø:ö\YË™½È9HÍk§mÖNã4~´°ö˜PclääodæamÜFf¼¯¹³óM<µÏ>yfÈå”5ëÏKá2 ùŒ¶5Cµ^›ŸgÉ-–_EE[…Ö (šª­µ5âvcŠ\‡µµMk·¶ZXÝPþ¹ëÒ"×/°‰/íªÖT¶Æ{÷ñýeÅ.YüðÁ[íÛ› EÓù<EÚ÷þ;­Z¥¹9¾ämpPš†'rŠÚµÈÌ
®¹-±¡8`í»‘«‡´æac“7ˆÐcN3ßþ5:Ó”£+&¹ÎØäA­IOc{AžwÀˆÌID»fY¯¡»a2‚§3Tï¦vSx;­Í¼öÚÊµ!XiÍ>@&R“Ï­²¯- “‰Ï¦©8#ßqh(+X›F‚›¦\Î(óA<í& 58VÃRmÌ$EH [xÚjÅ&>|ã$2šXj®ý(B2$kfƒµ ¡½ÖÜÒN|A:ëÆ4·ì¬ì8K’›ö<øèzì)tÏÖ,Ìw]myw÷î>°÷÷ùW7%ƒƒh/°–(Q¥–‹RŠ‘­&0ÝÎP¨Æ©lU,ùÅb¶ª²µjî’z³)ÒÅQuP_7åU,ÖÉ‹¤)›ÁZó;mt8ù‹ÎŠÅïDkÖ[$ª¬~ ÿ~FNh{ÎjûµÑšgµ;õûïo¹Vj“÷-ÿ‘ƒ„:bëfÎ†˜›þ-þw #±xÌA”µÿ¢	ÕþmkK©‘ï‰Õ˜-ŒÉªi©µ;îÎy
uPv@<œôº“qW¶Y	áÓå2â‚—iáøõÍÑÖuYôNBsCÄ	XûW§Â©vM¦ýÔ²MÎòÕ˜ôÅ»Bœ6YW;ï§ÀZpƒ„Ô~¨f0iÍ£Úï€5ÅíÂÏüÐA©" ”G±i¿•æQ³væì¨¦é„ÃH@5[8qMÞ"k5u-}!»qÇä÷â‰³q¬²Sôñ¡f-¨jßWÖ´Ö>P-|O¡f­;r`°¾·79 ˜1ƒŸ>²ûö€˜Á),êMISÏgÑ³Áï¬u? i@#æ§@%íCjëÔ=Cá,Ù‡ë÷+žu`mÝuÃ·B 2 ?\6‘Ýå»¼çvUgL/Ä°™÷3Ÿ·ßgM„f®vØöMµ¬y7c­ØŽæ9„ÇH'ÁZ¡ÀféÂµb¹Š°Z9ÎîdžG†ÐQSóµ¹†ZkÖ›SXªo™+`Sq­²EÝþd&/òI @``Rm×Ê‘©‹Xã—¦3é²Ö»–ëøÎz3_.$jÅw`µw¿XÁ<¿:­eú“êþX)®ïeéa4gÉÌ’8Î…ÐÖÿŠõÃÎ°Ë¼û3tÍÖðÆ®?SËƒcÐ\&±—àZ+72ñÞ¤úªÅ%ÇU²`\‚î¾ç\ž"ºZaî¶<˜+Õdom®–ä4`MµmeH±V§ûå¡œ ·£‚µËÔ­P¶¤¬áy¨ØÝø¦UZŒ$ò¤BÊÇE%l
¯%s‹%ymN‘*‘+¬nN!¢’9SjY<Ó˜­rÛÎjé‹"ÀšÂ¾®WÕ˜ 5}o‡O‘ºÃ1-=¤1°ñ¤?ÔíÙÉÒ#›eAš°æjÖº½ ‰ÏŸ<ÙÞëÄëÄ}¯¬^ûÉ?ÆiœÆÖ¶yIVãåXm|{x¤î/?o2ty•MÁ´öäch­Öì*äxõÌ§¬ykºã!®1–Ñ—.dFK°¶
YltÈv¯ýFksc~žüHvÒssíÉ{Œ½Øò[%%€3’¤²?ÿgÙ÷ßÝ­Ém®¥Š´¹‰å€µ2æýÑOÛ¥fa±PËQ$GZ‡ìü®os¿»=Ç}Bµ_½†°v\²<H¤‘÷¿þükæÞ¿Le„=È¥Y¼ñíWŠ¾WW‹”Ÿ¡‡‰Õlâ3Ú¥MŒ¯[ä–’Ô 6f•ìÐH›/'µí&€•?N”lóJ® “¡Žk€šÊ× 5s„$Èz¿¤¦)Í‘|Èôµkie‚µ	ošçùŠi`¬Ÿ-f&€5ÁÇ4ÈI+SRúÜ2dœ3€Ã*kZ~c$t£±°=¬9öbÄ0p™^*¬ùõ‹°Ö”µ´æG# Z¬÷Â³>ùV§Ñš¡Úü{0§ë··{xw——£UÅXÃ5úþ,’PƒA@’º´Eþ‰jgì”t4ª:À¶"/ÛÁŠÔ~SVªo®4Ú™60c¬ýÅÈ
o–hŸÍYœc3xVl^½“ÖF¿S4a®6¶j¹y™>:*kH\tI{"CPá0´sç¼ïbòÑã§Î¿~ŽÝRÔŒäž>EZSÈáhëéÓ-)jìÅ‚ä±3¡×šžÍPÏ¬½ ©uËjþÕî¼e`²4Ãƒë¸>ÏsdZyƒH¿[ÛnáZ’ÀÈqZIŽ2±Ú4Ä L 	6ÁÚÉ@Z“£?tý'óKýÕLa;ÀoÄƒýÉC¥oO(kŸóò¬´µ./Hk½eŠ'A»G ;Íñ!%[}5ZÖþ]f>^®¬±‡¥{±%X“,}H7³š4§¸!¡	Ö 8<0X{n²`-(kfÝß­¬i?¼æ{bóBêÛˆ¦Ïèb¸W—‹=ë¬Ìü‚­HgÈºs‰0>cÈ**µjŒE4ÆnmŽÍ;X`%XãÞ€¹Îì„Ÿ””Áðây1#ÿ·ß~Fišw’¦nÕªŸtžÔðywPÝÖÌI²Ë_DõÔŽÆ`5·m`F°Í2¸BkÑ(rÍð €¦}­F!#»…í`4g]±sr|Œéç~ÆÔ	:ž•Ëè…6¬&]©’ŒC,ù˜–[$²”‹J=³ª¹HÈdãÓ ø“ÿXÀÂÄ2B’PV­æ`m6•ÂÉ¾56•¬
ÛÖ	=C*BDÕ4O5åe—ãg‰L¼¶³¢öÌ8 h¹©¦±¸X­ÇhÍökD²Œ=?(iãV+Ãt<©£(ç‘ÂRW©œ)ë	U1Ï•ûÀó0µÞ,7eA‰3el´ÒÎ u½qTÅß[¥L—5Ì¬Evë¬<1Y–€5N ,Cþ"­ÖÑQk1VªPí7 :Îîç,‰Òb9-ÚØ„˜Í0ºÅ:À•Tnq~¥£$~µÃJƒ¤·‡µ%kÞY„‰à«jôœÌ~åiŠÉY÷{Â<¨Çj×ÆõÛ·Ä>Ñeí³'ƒÛÖrJ‚d¡&k/ØöŸ¶Y;ÓøQÂÚOœ²¶õ\ZƒÔ˜ëk!éÑ[AÚL¼©-y‡ÔßûÌçArÁ1Xs´FX?Sâ¹5É°r1q-:ehRjG£²–W.dû6VRÔp†\k5J«Ÿ¶Üì6çç7ÚŸnnp¼¹qôdI¥ÂKÄ2ñL°§¹T8ÁÀgÄ­R›\ÙK6+æ¤EëÒ³=«”Á-–Ú«­x:Uà±!&T0GVVŠÙâ½{£ëÍ¹¦KŒ|m…äCy÷c‰†‚²ö¿þˆÅÞz&éñepîV“®F0úûFz¢ýëUuÃ6X³¦kòq®ŽÝ¼™Ý’ím*ÐvE½¤Ôd!i¬†‡{?ÂŸ†æ"–ò(8„A_N•R5vAZìÓ*=ã›¢­ÚÆòÑ®Íde(ÂH!Yg/@Múšk¿£w]rqï²œ’Ö|FÜ€pƒ‰?÷oûˆ®´G6CÕZXVócÖÞZ$(k'\ü½°6~k¸oäÙ>{>Á¤_%‹ö^í#ž®‹ÚU`¦ ÄÝúî]JWqÃæ¾ëƒÕâ½	\Ùâzê+_€2Õ$Y-+S‘8T¶*¢ƒ¢˜Væû%¼¥­Ó8CåB®;em‡tH„jj !<+—UÍ!íÆwWÛ@XÇJX±r4ÆÁ¹ÿêÃ‡HfÖDj¼nDnøäGÉfµÂþñþU—ýÈGÃnèmlÞáØÖ¡Õªif×_l--±Í#@€Û~#N³Sˆå—òZ8üHšš£¢ƒë×‡¾Ž¾fØ ¿y8ÒLh¨cóØ¢…ù™å„q5;¬]š!®220\Ð¦ËnLcÒ1õÇÖZÛÈsöD1Ö,œŠ«Z³¬}ì A5×ºQÍMâµ.7Hïhéf¿å‘ÐímÍèZÀ	Œ‡„M¯\º>„PB²óK•µÔx±z–XcSX!AC7zb+òxOvþg¤…Nú\E?¨;XóÂÑ]²¦—¡š{eí¤°¶çÛaÍ4dÔyÄ£ð){1EŸ¸&Tª%ttÍÖ$0MÍÏÏ[;µó$>¤É2Y—KjÖÐ. <}yûKø?}Ë—¬™¦Ž´Æ-ÀÃÏëÆéÅvh•hÆjLnãü°K}tÁ&‡f¶Ô$ÙÍ…Ü®Zk†‰|Ë@Z%-™„£Ï/®‹VÄ£$šÝq¥þ:i9 Ïy„µd²
º`1’ƒß ¹B²P`Í¹$Q›EÎÐåbøŠ¨h-¶˜\õ ®ÅÕ½¬Æ‘L
§‰¥IËUž,ÝVìHö•rÅÌ¿XYù‚‚5ÊÇâä³g*DµQáZ±X¦-AÄ3jÓB°V«:ÈfŠg”YÁ±®Šdˆ'D‡¥šä8þª<âÂÎ’åäiqLSPõšÉjðtŸ@9lî4+‚ÇHyÍ}8‹îneÁŸ!©b5)gk°šG&#&^¦nÁJO·óW¡µÝ©]Õ¶ñ+,–Ir íý€C¶Õïèƒ½Êï›o¨ª *y1gÂ°¼õ%¤½5buëº®ý°²¦$È‚µËo¾õæÈ›A[ã¥Ã0bà)O4YÆ‚©cù‘”Dø,H_±ÆÏ±ÚÞž×Õ$«¶Y;ÓøqÃš5ÅÞ–Åˆt5‚‘ÁÚHÝçdŸ¨¡uÂšRFŽ¬f­KZëbµ_ÜêˆjfV"¼£*Àå’GõìRÙ¬Zì´ViTûGkµ‰|&ºâiåØØÆÆ¢¥>þ’ÚØFlÝ¾÷>Þ"òî´µM*µ	‚5÷hîgŸ¨jÍõÙáVý‡Ív­gõç?«õÇó\Û‹³ÉŸ±\­g_I¥f´OoWÊsômççVW+£Mî¬Th›)¤i[XùËƒôÎï¬¹¾ØÏLZûÖ»A~™¯üú—sœL$ö"¢)5QÛÉŽ¨kpÀÄ	Ö4Ä¶€Z ¸y7QÞ 6”ƒg)o’+CÀ°Æ{=3Ìû‡€5Z3öµˆ+ŠÑ—ë˜ÕnR8QÜdãŸIÏžíWdúÁº´`m:›…ØÒèkrÔ™
ÎÈroöÀ¤±fÅZrcbÏaÚónk^Q;Q¤xrZØ" ÚË‘­kT ]øðVßà­ËØ<S¢h	©Î’ Ö¹‚~¬Ùûµ£ýå·÷ëÃX¨%¶¢T¨’ð¢§\ÖÌ†:•­ñ£ôÇL\KÄ5o ©€Ñ´YL§Ö|u1ª½‘QuÆær!4Áºƒ®öÝw"³¼ô2HÅŠÕ´\…Ë\º£jØ¡ÇÚ_ya3rC¬¬±z­±!H±ÚÓmvž;·ý–ìqÆö62ÛöqÿÚ_ÙOÃ5¶Q¢qø«ñ8XwµZÓlÕ…m6x$|	i$Û1ÂÂþ¡i5Pä¦=FkÞºÞ6ˆáXÓ!!Åõ™3²qBšò‚/I.^ Â¼¼Ök5HÍ-tÌŒF¤«ñ-y[úC{•ŽN²í?G¡(‰m§¬…Šµn‘@k¡l\ãåa-Ø[úDÐ ¬yi-ªUì±Œê:–ÇžÔ~XYó^ùÑÐ¥Azó…Oo…üùíà±ìEÔ›m`íxR¥d„”5…‘[½[YÓäøŒiÍkk>C2Hk/­Y“%U}R€Ö	´^½p[Fh1Yõû,iõ„­!…xÛeÇO©±ôüÅq%?ê¡{OøT®6´îœÃ°^üPMïÖ<²áÚ/iÍnÖöé¬%ü¾`-„lûÏwùÐ•Éö «i^›­EedI?¯Øb#YZ¤‹÷">1×(.ZZ”?$#SÖLL*ð¹
ÄÂïD–Šq8µ ¬HÕb™²h&,9c5JÓ8,P“¶C\ã5¨N–’ñ¬¢šL „ñL‰Ø4kUÒë£ Ú(°VíO$«³™xjXƒÖÖó¹jd6Snb|¼¡Î¶X³Ú\:Ÿ%a4`\‹l†ï‰¿Ÿ³…©•Uªg#¶gÆ"%êÅø2TôöS}'cFÒût*åg‰jde}®”Tý?EEjbj§H/œ¦ºPŸPP?,¿TMPžˆGë±AéjõDL¬Öíó¡0’zúþÕ† ŠíêLÿk}µ"kÖ˜æÔ
üžkP[¾A µ‹c8ŒH§•É¾Þ~Ä’V"~´$XC[›:ÊZ0„dél ­`íòðá[#—Û]¢d4fQZà5­ºÂç?"®i<HSÖ 5½ºº¬É·ÿãÏwféíEÌ
2¤@ž¶Y;ÓøqÆO~­^ZÛ%êu¸í¹ æ…-¯¬©‡Ú“ÏˆnX´F,`íÍ?Ó`4„ÏdÏ4BÛSÙzAd…–úócAªÝšd5EÛ*Õb‹_Ö6[kjÞnßûŸ·wÅjK_?ú`ópi.{þ|ìg
ÓTžÁjÜÅo5¢¹ÍŸ·›©¹Z¦Úþ[;•&K×É¹ÙìÊzy®ÙÄñ-ñÐ’adaqm5’b÷\DŒFò!§M8WÇ÷?ÿØ­	×”)Rc¨ýÝ í«ù_þ}-‚_?½¬M_ÓZpvEÍ¢ŒÛ~Šj†×£ÈZ»yí
©‘T¬É)Mø¦fSv6É‘B¶!d3`LF(XêÀFærdwš)m]Þ(C#_R»9tãæ‹ýW–›5."ÕþW ±eä¸AN¬#­ñè•Û}*%i­Êû+U-€o³ýd9úÞiìöÝ±g¿c5f5b·™>¯­±>a)Ò…=ÞÏŸ9 Ã^­DxÝ!'òÖ‡û˜Ü©–ëC•‹o|ËŸæÿøðÙžq&—ô%0R3XëI:Xè¯deŒ¨!«aæ_CSK±0X#`.W‡&>“aF1SÚ£"»Y°¹MñjZq][,ÔÚ ÐvNÕj®tÍ{Cš¸2ÝH©]}Ö 5ÌD 1í$>xŸ·Þ,Ejní±Åd°Êš™E~½ôÈeBJq»°ö2X[îN„ìVÙ–m¬=4ô¸~ÉŠOÌ#+òÒ™cé¹|&eÉÆÝ.aóÕƒ‡Ç3ÀÚ¿\ºd¥hú7ÍÄâkf3‰Õ4öÑÑÛ”iÝ^œF Gµ\s&ö ×˜³™°Æ‚eè³æ}û»ó }ÕZGWñØ!#>ñS¤Dí´‘çvï9 ¥ÈL„ÕˆW5’ ­iíåÊ,çFüç5ÝÎ„^6vü8y ½òhØÏwåÔFÖ8…u·²¦0ç~¦5Ûš ýì%8Ôqé¸ANv)kn›,Èv•p^ýèüW„Bø§cpHß@/FQiÝ98(•‰fç¡µq…D56;»ˆóx|ÈÂQl#»—÷Ço-ãóÊeØ‚‹ Fo(ìiyÁÞÁcdxdp|—Æ€j!ÒŒÕLP#à4
è|æµ¶Ù½Æ[~ƒµ(†ƒØÃ—$á5€µÖÁ6Õá1“½…%JX^„BÞ>y$™öKO4NÅ)R¬6‡Œ¬i//6Ô-<×«P5Ÿv%âJ)”³)PÖ²fã™j¾‰y>-iª’Ì°òW‚D%_HªYZäÝ/¬µZµM§ªeõ§^Çi4RåâN*¢YVöô›÷¯>«	£kå9‹;54¦¿™5Xa+—ìq°VÃÿŸÿj¥YiÄ1ëjVæÊ|P”L­‘<^¦í	º[$¥o·P(¬¥Rµ„ªôT¶—za%k‚&GkÛ­Æû».2JµßNe­Øì¬inÏ•ÐÔ…Æ&ßÔ&	8­ÍÆÆÄ6EæŽAæJ˜B&£öž!HkAY³°¯{(ZS@‡&®ý
ó¨V2š7hàXÿÁÐ›ß3„vKÀÆ¤GoteAbñfíC¸”µà‰ä?ÆiœÆ.þóãÇžÕêà¨Æ,_Èq´ºih„[§ZOq‚µnZ¬Fpƒµ<kQn;¸#OYV).–¹¡æ–¹ÜüEU¥8~|Únƒe8B*ß¿­ÍU2 ¹ÿÓ\mÞkïþÆ`m»¬-=ãí:¡—©{µ€m™Õ­ÅXëkyòEò©
Ÿ	§~ØK‘Jêwwnß»U7lhÿÃ¹B‚®š"›p‹‰&€‘XMnþ,n`éíûŸé«iŒ&bÓ Dýêkÿ<J‰"¬¥k.Ø^ 	¶r"'n’×ˆA¤QÜPÔÀ8`í&oTa3#9’'u&KìGà4ªÔ˜%£¥•­8$Y`3}æ¬ÊÖ«s£íÊµ!`V#8!Enã™4ÍR­›Üåú•E4LkXûSq™á¾nYL³–™ñŽÛÒÕ2™ŒåÆØIi’ØÏj¶‡yÃ~Ö¢¶ïáš‡µîý/O{‘ƒ'`íò'Ï.Sµ¦Hò]•«ø3¯o¿U«µo‰|‰ù³š1ÑûîˆùÎMEûÄjjµc‡ÊgXÀg¹\²’"²µxÛ4`-k¤Æ¨Hß´”²E-ñÑˆ,²Žo¶£µukbs”µÎÙùŽÕŠbÇ`­Í‹h2ìèg¶Ð‰ðo-âÌb0—YômmëpË[ù?<Wßf@Ö¤öà5òÔŠÖÀ5ŽÂkÛh©ZZ§Ak$Eþ°²æ55[Ns«g4ÅvURÇ’mÎycˆÕá%èë ÓwÍ×©¹†Ø/ÂšÛƒ°Æ¹wn\¿.á»!O&žV¨S…a˜qYpƒô{LTcÃ°öpèú÷9A]2i¯c&ÌuæG!‚²öZÊšwï÷ÊÚï¼²ö°£Üy"sÑé`#ÏR¬épv®ˆ,ÈK®¥÷ÊZ·¿ÈI]‰9¸A²07ÈðÕº¿2\†°x€™)ªg½t½ÑB«PF¾Ö™· µîš5Ds“i·sîgÒë¥#Â·½ÉhíaM–h+±çÄ¢¢4=>ÁìŸ5(…ÅÈˆ!Ú8	ËRÐ ´±‹„åAŽ˜øuþâˆ¶÷ïî\¼ûö—wÕeÍÂÙ=¹žØþ@.ü]¼ ­`U:YWtmZuZ€5Vî¢“í£íÆ>&W‘˜üá¡²½òÜ¢À³¼è%7E°Uª SÖ ²2µÒù†$¨PIµù­k;XëŒéŠÄ‚£Âµ>µî— ÅÌÕI{dÓXƒVªå”r	gû{c½ª`ËCIÍÚV$¢$H.Jdd±xJ5´ÀÚÿ“ëÑ,¢W9ŸÌŽ®ëÚ¤nØY,@Ø“è±|x¥}“çî*@®|®^KŠÄÙ²Œ¡°YÄóIÙ>æ5%÷z@Àr2QŸòåb:ŽÚWÊrÍbªëqK*¯èG­Sµ„kýÎÃCËÀj„Ù«X"ýq×BšEX³6àmõ'X-ÑæU-VBr£÷¸œ¤WùÅ›‡t«Åb1Àšüü»fÉL«µÊKÂ¼EŒÕX2ÂR’=¯Õƒ”¦íº[?ÝÂÃÚå[—o¹ÇØ^Xþ"Î¸ÿóÞÝm|û%¬™²vN¼«¹ž™§°v§ñcÿä•5ç1"]m[!{ƒÖNDý]°æF\iëÌ$™Ç¢Ú_[ã)åØü¼<F.‚lÜúH2ŸÇZSÐ{£Me™º]6šŸ~Ú¬ýúâXû^s•á7Ÿÿfwãè<Úú·C¥#òu¹Ür§†Ö4pwk¼ûŸÍ7¸>ÛoÛß¸}XƒÕZ07”&UEïÜ›kÂj·ïÝk¯VH¬’CBÆmkkÞØÀ«È´¶•¿
Ö>v~KüÀÎb„ôsikHkÀ¥_ýrsTl&ÒÂÛ}ô.	mŒ¡5rÚxcŠÞÆú:*ÚµõË¾òª|ýuÒLGü«ŠæÐáô1Àš\EäR°0sÛ~¤5Å´vCWƒÃfx¼Ê Då¨J£æÎbú,@611M‘ø(&™MG¦Óòõ'3S°QÀe.Õƒ¢ÈC±k^XSÇÙª'53aì@Mµjn_gíý _&­§iî>ÐbÕt$4¥Õ–#ð‹¢µ u+ôª‘	¬!­ñ Vãîüö—°šÍx‰¾~`­Tàyxo/ïŠt€Hð¦)žÕ»M’ÔXš-±#—¥¸&K(]b2fõÃ6D+ëLÎÐ¡HhžÍŽ«²!Hz¼
«YûkV«b5âÙ‰pµj
Áš‹Žó£pí)õg–IS31Nš µ¿’ù23V##¬Ýwþl--	ØØû5í±ŸxåŒé$­1ùŸÇÝ§†aÐdè°æ½C`]®"ÌôT#|> +D¦;Äô;x©ˆÖH–%?/=¶ #=ÍÐŒªN,„á›WÔB\§«_çÌñCï	9Jù:0V#0î'$©X}Ö\ÉZÐÕ4‡-»kÖºl&»=mè&ûéµßŽöœÑh‹m&'Yù¥ÄÜûQÖº½&»¶>Åì2A€~};*[“y¿A•ÉÈ` f“PíOk(kIkÓQoàïÓ 'OàºZÏ^K„ôú;#f5²@¨ñCZ­×ÃhmPu­ŒÑpÔ|m¬o
FƒÔÆÁÁIÀ"Ó˜ÙßzûKÁ%k\†¿4VC]'X|Ø‘ÖÔ»E~‘Gƒ·/Ïg?Fk„ŠÙ´ê8Hzz‹F×$¶é¢íhfID¥À^àY²Oí«j¼§µJÊ6ë&W«°Mú 1kNÇš•8C¹?Ê\D#‰j,m$ÿÇ>Ï%QÑ¨­EÇª¡jewvP¨zµ¿,_ÄJ¹¸³S!áPžGï¼óÎ½|4¿£~ý8÷ñ«¿¼‹X(NGÒ¯ð”®'=‘LH5ZKM«›æYýñ*(ÖH˜v×“À½_I“zj·‡$ÙúÆY&{àÇr3ÈJ“¬š¢&œÚ¶<÷Îfý/îJÚT\©¬QuÆ™|8ë;uE—e/Â”5EädùìVÛa‘üÇX´AÊ¼ûÛ3¬Q›–h4æÊ…†b³Å[Áý<­°µ(@½FQb®±Qâ0hµX]ÿu+k=OÚ{,2_2Z ±à¸M£p‚k„Íš¯A›9|>§yaídÉÚvßçG¦ª1y3Hs‚¼/\;5ƒ<ÓøñvÅî­m» ÖÈ‚dôWÂ®DÝ‘ ›Û´æaÍW¬-ç9aÄ;ÿkSjD
žDÉ%¡Ã1¿Fé¶rÍÇÎæ/ª—šÌû×~‘Hk|­5ÖRlÒÓe7Ò–Öþæî“µ?ml¼ßIgX¶{µù€ýÌRà°X²¦¨û·ss•ÍŸ-F×yÈ¥šE¬Jþk»Á©j”6ØÍ&ÊÚÎ(X™ŽÌd©·~…"¶uÐ¤vR\Ñ¬•}xuâÊßãÝÿ?>ö´fUìàÁšªÖüb¾QX[ÛøçQë°&d¬©bMü¦M0I4VÀÚM7eÝ/ÇõÒVGmélÈr`½×T¹Æùæ )ïÈ…k Û¬¼ I$Ìì;IdØhˆmÁ7´¬Yÿ5Xm¤›V>d6Í™¶Õµ?1y(•Â$™‰×²ý¾eš`-ãéËÜû”ÆÄlI2Ú˜ûì,&?{TóK‹G/QÖìLXf]ÊšwàÖöàøåkÎ–“ÀR±Õ\ÃÕÛ`ßœ¾^ÜÛèÅKÚRT^¥R‡²jØäOçhMù²„T2d…ÊHuÍÐL4V¤Æ`ÜÉvÈU©nTp¸˜ÂÒÈM§kÚZ¡R¤	µa.–€šWÔœ¤½8ÎŽûÛ“Œh(.3¿H“Ã4o÷¸µ%G~‚S@´«wÎqHè†ïÈ±E ¶mm!¬Ýwð¶udïPžlyX{Ï˜Ló‹¯0ðzZ 5^ÏvBä‚@eÒ)k!<—Ù¹-lK)@æ±•¼þ,Oþ!+¯‘ Ã€µë¬¯/\Ás‡èªX®u6^=>ã;eã*iM·ƒÿãÁ6¬7›P”ƒµç¸ö›“ÊZ@5Ojnù’šµ× ×4ôé‰æÛ”¯e1¡†ÖºýE4w‡A“+Xói/ðÙ÷úXB*ÀÆ_¦~î,úû«üz\ßò®ê‹Íy¡d­îû¬1)‚uÿZ°ñ¨æzgóúX{iœë9»7Ùš…ð’¼]cl“Û.%’ÿvìˆÉ_Äí d.¬LÍkˆhfèÏ`­Oç›ô¦Èå£Ýý/QÖ¬!°wš¬½ÁWì‡J5×fí‡£ãéM!«kÈnà®×È”©,¸Õ—@w;ÅÏá†”EP¢PHÖ

#¶9¤'9`¡Õ„,Ò¬ˆ¾ÄÜ\‹#FQ;Šã‡C45Ga3†Sª(—%¼ó3jã&“Ú|9“%å‘«t¨UEmÂ‘ôt&KÖDdçÝ/Ö“¹J$=´ö«••¿üß¿LØ%+ÅÝŽ6|FÒÜÒÙhÅ$9ï™ŒžÞ‘ Ö€­'N;3ŠâpûW··Ì,³ýÉÄjVh§Nq=À I.$¢×\2!a-žËÍí¬—qÔ•CIAzyÊ.§ðZ£dÍQ`&XÛv¬VÇÍãDÉ¡ƒõ§\¹HGÔõ[%ÀZ‰ß6´¦¾©mÜ£×xüÛPq;í°yüV’¦¬•JÀZ.FY¦0QÔO’m‡G µChQêÞ2XÊšÃß¾yAûYï†Dp	‚[Ý/Xv7Æf6`³àÜËnY[#7Ý]Ö>ÛMÔ·;kV³vß›A>>«ÂÚiœÆØ»¿£¬ín9^3T«oO“^ÄïÖøÙ ŒäŽŽvß;™épí«_|5®+TÇ$Ù`šR_µh©Ò˜Yà=Lê#—Ù±µÍšê¬á¤O*äÏÿÖlntZ«a¥µªy¼ûÿ£ÙþÓ7­o>ÿÃöW'üÌ`@è¹FpÜo”¹Êó¢kùÊŽ½›N5~ýs²!ÂõÝ¿R•fq`ÛPpÌd¯ìä+3äf×‰	³™™š½su}ôþï~­ñãºVkËTÆÁjÐš45yŒ|5_J¥+Ù™•+×¬!¶ØLˆfÕäÿx“Ï¶ ¥±dÏ«¿"OrAç‚c*S[@lã%AÓuÔ½]£™6¬Ág¬†d9{Æ"‹Å£üFL_#^µåìŒkòqÒ•"³žßZk*nS#ílSHkÿŸ½³{më\Óþ_ðòž8&±	ÎOllGÅTª„"LJ¼£/B%£jËö¶“ƒâ‰•Ý6ŠÓ&é´äa6&ÙIKlï$ÐíâbÂv ®Íuè¸&SxM ì“B1oaæhŸÌáû»îGŸ(n÷¼çõ­õñ¬¥eÉÉZú­ë¾¯VÔ,²Ma¬å?})Øª	el:X3emÍío~¡-˜¼¬æ–-ám ‰WŒúy¢ÃþÙŽýÑId÷oþò3éÿÐ
Õ›Yÿtoýmƒ5.Î)ú©! ™Y8¦‡¸iMBûØ A¯}K¤ÿ k™Š ËiV…4êZ¤©’‰Õæ¬Ùž>ÙA±õi';ÞV	ì83CkÆV÷ÍÓ°íÏÍ
×®¿ÏUØU«iv•jè"ƒÉ‰Ä˜À©l®j…híé“G°˜‚'€µ‡ºõªç—­rÀ%k8ö›EäÓG ¤öh‡ÞkOT²FN$°¦¸ÆÃÓY«w¿[µ’ì²ªFeƒ0H™H%ì“šÂÀ*lw3ccg±€ìB»~IÿþIi¼h	Žˆf°Ú™),GXKakêhYúkŠ‹èh»(r.|‰Zè®¦’ ¥ù©dË@ÍÇ±Z(Z»p­Ø`5–Ùª¬1ù÷ò êÊÃšžñÂþ+4Äèâÿ¯ÝpÙmUÖ~¡hÍ@l.²)ëí±š{uÂmm©UùîQ*ÅªeË„´µÅq0…MZØŽG5ßeÍÛA~Ïìs!›#ÁÒÃÚò«°vä ¨j…§5Âýi¢}ïÃŒ¨Ó©LP	K&ôË°Ÿk8˜œE¶E¿µ|9ÝÛÞQÎÊÆ‰‘Ó«;ü•ä/²íaZ“ªÆÂ+k ÚÛ«´gëüÿ‹«\°¦ª5FNfSû.eDvjq¤šžÍuÆJéZéZ¬u&r9Ì™ã Mc:¯6ÏxL2/G“Š»³(Í&Ì®_D&iQ´•5žÎ¤(hÔÀkù8¯@.$ÐÒá•Läó´ì/Oåz¤ Oe*ñÑHX+nœDá¿{ù2°öÝÖX÷éF“X­Ž9m$s6“OkhvúÃÄ±¤ºÌ9 ³™Ä¤œ¶\‰¸Î‡úªáõ_ÉãÌO¨5MØr(‰¶V«j²ÆäÊ*TÃg_ç}u›+#­•3¥¤ÚY§s‚µôõUc¥åâD³15 ¬È­¯>’#ä„•¬ÉUs¦>ŽõfªHzL	Z‹¡›óÓµòkÕ<š´’ 9I|am¡Èoxa¡_UŽ–9±#îÛf¡¨pé¾ð¶…Ë…ñ™Ža<!£ùGi>#É·Ä¸Öky×^-Y»ºk¿w¯éÜïQÍt5¡ÚsÿAÄ¯9þá)«15amB¾)P­³©‰D#OOô:‘Xk
k_~yºß^¬™b’Šv¸zÑda£µ»¤s²Y®a5’%r–$È¢R!¥°MÍø‰lÿŒîFñ°v~ÿ_ÿø*Í¢(G’ˆ)kžÖÌiB—ovî4êôà¤¨«’Z®–}q¡¼Ø¨•U¶¶rÇ¬ùñüFýek+<Eœ‰ƒ>£}Ÿ½ËmŒ o Ou£:	aXƒÕ¨Z“²¦šˆ„j¤fˆ:WŒXFdðšæóf
)»;!‘Ï 3õºÂ~¸ûi_k(X»ø½ÖÜ¸’iN]4Äs½ÕXc©1”åJØ¦XFÏô³®cZ*ÕÎ¹‰W›ê:÷¢ÝÒ:¥E€3ƒ5uÒVî2Jƒf)TËŸù4H2ßrLÍ;å¦«9wF¬\ìk‚­Á+;m­ùU¬™†¶/½õvtâÊéÚ¡3«Ñš±Úmâ¹Á—çhû*IT*é'¢zë ZL† Í4H5@bYÑo‚4’Ì˜øp¢*FB„fÒš°œq›2Ù£ éÔ[ÎuÁ7$ fÙ5P¬ÌQs.ýÆj šbY¬¦@Y³°ÝÍ±Ë9õ»§¯‹Ç®?DFÃ–×—–ïgKOø_Íÿç&²-ÈmðýÖ°y2¹v•éÓ;-&7kåI­	1ÖTzp}ÂT,SÙ‚‘=/{BLg#¿Ò®Ýë—ø¯€!ÉÖ.ÃsçÑË¼s´†¤v±ç"bû<¥ù¤A›òø6tZÛÓÖšI€¡BÀjµB_ªXsYÔZHmÓPíYSZºšIkÿ¶.sï ÔE((s{†µVU¶–´v¸‹ÆôûjÖ~Î\„É/Ô»Ù[ÞÑ‡-»Îtí"¯ÁÐ[‡)Z³ï`ípO\ìaÍ¾;ÆKÔ§ùžØŽ×ÔBÑZPÖ5ùXÕÌbíØáaû!£µP°öÊÙ í£ˆRÖ	½ÑjM‰l)k½Ö­ŒCÚ ¶îööþØ¡(ìub{§7ÅUh›>k7o:XÓÀr Î_äù©UÊŽVw¶{WW»ÿ¾ªlFº›Ò@öü!MI‹J”gÐÑÉ"E«5.DÑN]Òp.âÎ’1`U5{ŽêxN*‡0÷ç§‹Å!–ú¤£ìk+[‹f8ƒ¨‡]ö,L!yÖ¬G`¤JåZBï*IWJçâÕ\1–PÎâx)£›kô2“EäügŸÍ[‡lÂ`í2éø@bý‹K-dU˜?ÉŒ–’(kÉ|ýÌš¬Å“ ¡ë¹ 8Ä+Ÿ­ò×¡e,r÷¯&Ú“q‰Q77©×:8Ó'Ù*'Û×ªUÉ„Å"½«3–-™OŠW§£µZ’_F©J”
ÒØ¨Ô«jÛ°Ðv¶Ýk­5kÜ]"€GN+ƒQ/ŸíLs%î»®Ô“Ý‰zŽ¬5²qªµtÌÙ…¹¹IÕUd§)Z+&²'ÀÔD/ºa×ƒWûy(ÌaäÂ…S#‚Å‘ím&3¯¨¹>ØÏXµÔ¬yTNÌ!Ò®]¸‚k?˜¦yÓjÖZ½ ï}·údé¸oˆ®5}û_n³öÍsÿAÄ¯Ö<®=°†¤_˜¬ÙæžÝˆl'ÿ÷Zó ÷„5`M¶]D4å¨¯3JôrñMe³Å…ËÝÑT¯îƒjß3Ï¤xÁþÚÆÌl…Z[˜œkäfVTNÌÓjº£4É¹?ýinzù‰¹|€ˆ¾ËN“ÖÌ¼™ ÖÞ9•¢ý—|¼KæyüØù=³˜ZØ Ó}¦9y÷2ÕqâBpk™š×`$Bé—D(5e«o%¢Â/ˆmè>ºÚŸÿøG•­‰=«á.â¤5â§üP.wÖì=¬ÉÓQ¬¦Msá'·©d#p1fãã¨õ[CY“Ä65Å³Œt$Y=S‚6Ë‚lJkä¦4…5ÑZsCŽÕ¤žõ°@mkŠ!IkrJQã8kê‡lØ|:#ËÈ-©šÁ’ Ý Ù7W›¹]>ÒS™Æ~“µ“ÖìÐ}`f±§)kûhÍcYX…áÀ•+\¸paäíÛÖ¸UM¨Æü!ýïžÖ¬ôáæÍü”nÕ.a5S¤î‘S:¯òñ¤DæcU™Ei8ÜÍ&‚ŸXXº¶Ø
ÃÒÃíÐAžä4ÝxQ‡Èˆ=Ø^(òÒ˜/Y»¤r8øŒšµûÙ¦KÿÃ¦´†Fö±ÌöyéÌ`ÍÅ}c5[‡=ÚÅ¾¥GKø@*¶‘ÒÖ—%™?¢¸ms‘û*dcÃ¹ö[ày»Ê®ý¼_ÿK¨ÆôÜÃáJÖÀ®‡ÁôP°éM,óä¦¡¾Dcm\ŸB
ë"yqk—æpZaÛù‹0˜45z¨1âyk®±šÍç/a(B6d6””­¡Ùõt9CÆê„®©×Ú JÖˆ—”5æyo_WlŸyÕãš)kK	­}¿³ýec;h?HsR)kFk¡dÍ?Zp-0›Mkþ-]•m5íÌÖÄº¼éÂøäË58‘Øeàv+«Y3k®^"¶9sƒdáÝû}Íšx-¤ABì¶ò†BÀ6çQÄ‚¯5³-¬™Xæñž¬¤x	T)¼"•ŸY7D#—Ô€ZcË¿ß˜Iš—nâá¿‰²†´¶	¬)dØo²Yð¤AJW?u
_ÿç$AonsýùŸa-XùŸ :X)ú5¥bQV
`ÍYùS%¥M0³˜çÜe)ŒˆeI@¥”O`à ÅËHi±jI|VM§IÌábå`-Ó@„†ŽÆ?|ä~ZL3¯Ñf­MÖŽj¢ÂŠd™IÊ@,•’ÙX2S@´â´’LZVÀüÆ	H±¹it—²5hÐÜIÔþ\¼Ì¹Š´Çd¶íð¨ÜGÑpú2úñòg¤^Ç‡Û˜A,H÷Ãf$ÉÏ’$Ù±žUh}“‹ñWR›ìRU
\ÒÌš¢±éx	Ë‚ÄMÕŠç¹ÚëzŸæÍZU0[ÍbÆŸ«E{WO5yIñi€5;sÓe­˜¢>w¹˜§^/?[Ãá%šD«£š¡œO&QÛ¦´h¥,mzZw|é©ž¢d­1G*d¶t‹%£ÖÙ‹¼í#Ë¹ 7bÚ¶b5t˜%X¸¥ç5_©Öª­…Âš-,zA5û»¬;ÏvŽª™²†´v¼	koP²và/rñ+ŽÿýÔ…3„„ÖLXdeçóSâT5í·›:Y=Ûk&¬]ù’˜äêÇ%O_Ôßß›ÂŸY¯˜2i-Û	¬q=Ñ€ÀL\ëïíN!´ÍÖ@Üâìbcrt£P-G‘›no*U’s©bm	eíêÕw>·k5oì¥5–ŽÖ®Ì¦Tx ÁM·Øä$WÁl¾N3šÈ­:Y–ÉüJ™Ö¡—‹&<@°ûÃŒ©h Úˆœ60Á†Q=Ë
1¼ùàÛ/¾úö[óƒüóï?–ªGe”Éj¿ýI°¸=X¸ó |N	OoYš%AŠÈ·à0fìE°ÎäØ¯lHŒFX«/¶šfó®ê¼&›µ]öIa³’5lú§ØÁà,ýÌcDj¡nÖÖx~Šâ4«WÖ<®‰× 3^Z;7¤¡õ‘ãgÃ¾^;<š&Êðš`;ÿÃÃÇ†ãÁÜÍE[¹nk><Æ¹ê5VšÚÃñNBÌÖ~ÖØõÁ…°÷ÊsgÜÿ)³»Ö{^Ö>¢ýÞ3×ÞÛÞÜÙ„MvLZÏbÍ7ŒNOŸ˜œn6’QšõlM§¤–.³ÒkB4Ñ4Ç O{
Î!RÑgjÙ
¥1U§ÕØ³qNp¦¬)øÜ«eßÇã1«]9‰k
ðPî£ƒ5F³Ò:Àš­hô”çØŠ±$|¸Aa{
¼-É©ž¤Ç÷ï?yÌŠÿçê5DOwnZ‹\e2ó¸´µ@jjaž-®»0XÙºØƒuˆÂ²-	×›Ï:X;nöŒ,Ek]oî¾Ñ%ßSi„3È3ˆlŒünÂ-Ø8‡EIÏÅÌõ±Ì.ÑEŸ7×û-HkrH|ƒ¢µ‡ƒÂ4ÇjOY¯ôYâZ 5oÉhmÉ±šó¿Ü
2W+ª5×ê^íù”–t
Šø™>kÚ/9÷»ª5Ô5ï¹ŸíM¶PÐ¤§Ô´ÃÓ¯bm÷Xñ8I¬q€ÿ¶ +§¬ùkÞ_Ä=þÉkl>Œ×šý±W[üEÖƒ¼ÆK‚ˆ{ÊŒ`¡…¬%š­±›¬ÖIGX"Fk³Q5æâÏ?ügíœ$À#8Ÿ&$wÉ¨{gósÎýï¼-X³€Õ>âÁä`u†nÞÜîFûÓK§¿¼¶oå§%f³Ð.Å&lHcÚAJ-—Ô©J¹‘ÉvÐ,7^Sg5åî¥Ñë‹(Oœé\-uÄjžî—áÐá,1Íé
ÊZ‚Ð±‰¼¼;î„
Ñÿ±2T-¥Ü Àxµ,ZÉWLnØ¦«õ­èÌuƒJ5uè§ÿãIí+c×H—!ZµI†+å*‡›žàcâH[2Éß
ävÄ‡ÓJøðËb$Ú™åY©0p$JæóÅ¨áf¤ìÈ&4´TÎ,yŽukùMV(òaqšÁ­ ß%ˆ{”l6žÝ^-¬D·O8\b²ði
I`;$l¯CÁôqCXëÈ6RªZ+óÈU³´õ©øISÐ>IùûBqaNIø‹¨*9¦Úl®x¢WAzL	AX°¦kÐZïÈ…^I²Ð^m©¦¥O‡lqt‹`0ÂúaÓdÍbÓÒ ÿÚdµ k«ËßÝ;îüEÜéËgAræ>0ƒ<ˆƒ ~ÕÖ¼ãDkæ)X“)¤±$¬–ôèWÁ’­‰Ö<Hï0ò¥~»îqdª_*šž
 ŠÙ(/âŠ æ0ˆ±‘² v¨sX?žG$ü&{‘Lü‹\®•/ÙXœ›[ü~®ùkÁÚï~­µÂš…®Û·Õ+Ï)®å66ŠvMÆ³¤‰Ìüçÿ]ŒÆfgÆU˜=¾ðàÎƒÅiZoßš¿+÷ÇB}æejC¥²²üûú§"xK¨yÿÛoï½ÿíÂ5•üX
¦3ï7ií§ŸÖî<˜¼Õ1	ÖÌ-Dö"ª;ÃÖñ¢Üû¯Š4!\3Îc$"í¼ò$Et*ssæþpJ}ÄR¤ËbJEhG	<E¬ñšÖú Ø„µ³RÖx–ußÉs˜‘0Ü”ë8¥}XEŽvC;ä‡œÊŒ$sT	t`Ë8óC"=z ý®BC¶`½mË5GlX÷[¾£©m^Hcfj·ýŠvÛÚ'«‰Á£ù~žÊÜ’Ãc6d¡»Ott#žÞáÚÞ¼ä
Ò 5Ò!ù‹¥$H˜c³ÿæ;I;QiiÜ1wyíÙZ±?U·'Õ‰ö­ÀZ™Úx*çKÖ;]1uM–ü!æ›^#}*Ñ¶vAgéû°¼¥Ekú¸$¦+§ªäD¢Ÿ‘yéR!}iìúÇkjìñgZ›Ò!	§¦±fAÉš«MsBšXÅÃûOiˆ-Îe–À4Ò†žj{	vÛ^Ÿx¤	ÖX/5íG¬1v‘®ÒÙ ,kQÕÜä@.¤nnzX›p°v¦Ë9‰h¼ÅªUn24ó´f‚È>¶XÜ}ó¨„5’€&,‹È^¥ñkU®ŠsŽ<÷:Ç½uîì™7/^B«<æ7.¾¹;ˆÐv1š„-ÞM#Ç'Ölö°¦š5lj­vÁº_ÓUo¹äØK¤$X3%/ØÔk[î÷Àa€äá#‡ÕÿL*[°S`5¦ý¨æW"5RÖ­…œKƒ5û~ÔÏ4{c}bëXÅ:Cì*“}ƒ.öXK°Ö|„°,Hh-Ø÷ÔÜ$d¬:>ãá"lvjiŒíðLÖÔO,øµ%PglK¥_ŒÑÖ\áVvùÈ$Ê‹DUë<ªÉ´
7ÝnéÝÜIÝÖ®á/â® fÖoÒW³¶ºÊICyÞhd¯µ0lµ†«ÁlÖ’	Nª]3q/QMt:­vkXœdTGU‰–Ì#òD‹fšXf’¯HðR¡ÕøxMVü@—?ÆM´žÚP°Æ%#
Ú“R—RÁi‘³Ã•tI>‹œ¦âí‰JaJÃgä¹üp¼Ö)cËU:RAÇª–ñ‚âÎ#'®2¸•“wç“GŽTFGËùÄaè-cUîý’ñ]“M´éü—®ÄcÑbµ"?HËòäŸ5ã”5ñf*¦6s‰6weÈ×¡µq~%(jÅ(ÓUó±í"°+ß]]-®··GÂÉ[á»mf¹óVË&§c‰d‚¨ÕÅY²Õå»:=·@ÍD1År_:áE*¦@ÈÃÞe:«¿-ŸÝ$ÞFUëÔ?…U'­…žù”µ…Aâ)L*Y{XãÑô4i-†L6ïóavE¯<û_VÖ~Ûê¹ºzïW²†®3+H{<ÕãÀ_ä â×ÿ;È§Ä2ÉjÌL°ÚD÷ c3§£)2",ÝjâÙ'­Òšƒ5'¬Ý¹sÇ`M/”’©—}/™ —§à/57i—<
É%¯E»{Iz™£¯Z6Ö(Ö¡6JÖT¦V#'6µÙ¯W—/}ÀÐ«ïxX{®»sÖ`µÛ§Þ~þÑ&mÚÈ¢lL‡3·êu| ÿ@
ÅÂìT6³23»øÏÿRÏ%k·`gÍ ™Ð>´„ö„œv#GÕiøZäé·ï¿¸tÿ«?ŠÖxs²ÃÈ„”!ñ´öåhíÎìøxAË±KõÓV$Í°h¿GUc–¦6¥ž"0ŸU§Î›Þ&Tã#«8`KÊ™xÜcl°&LƒÓ×X˜Ä6„ã#&#„YŠ=<ªDÎ>=Ë~>EìÈèQm‘Öy—L5Ý9&Óÿ#L5*}ò ‡Ð£ø`fé­!(¬¡­±p
šöyXs¬ÖD4¶í`-jnín?§•bÛ«`ë~¾Ù·Ö©‘vµYÃ\àC—­	Ö`5wá½FUÒÚöæÍm»#nÖØØ(²ÅnKS¥O[ ªZ`óÉŠ|H"£þ´R"©1YM#H×9óÒX¿Ìox×ˆÕ´[G±]VÚãtýÒØÄõráEýúõ2'c…±fˆÞB7ìXÖB™K/Ùó.ëdóÁ^!ÿqïÉIGC]£fmû)­°;Ý“^GG{òHÑK’"¹ð³# š)kzxDs¸ŠÕž;T{¶ùìÙòq—MHÊ²UÏ.ˆ žý-°fy>Øx(:½nš´Šdåš˜>Zïk%?J<ÛÓÙpù=ûDq/Ã#uøD’#yîÒØ¥7ßÜB?Ú•ñá®)wn– æ mpÐÖžÕ‚²ªÖ˜ö…Õ‚²öÕ’Oû$|ÿïVtj®nG0>†Ã7UÀË‹µ–0UEÛEkÞ`ÄÙ>¶VÈ)´2—~,EŽª1ù‘£GwöœÙ=Ö³;ˆÞEâåË´FÈÒ‡÷î7{+X[h•Öd)\cZZ÷|Æ†ÚêXkk÷"{ðƒ$l­l™h×zÍtv®P½‚kEvË`æÓÄ¤Ô¬ÀÆØÌGN˜ÚWoÞDZ£%Ç{º X©n‹Õä0rs•Sf°MõŽŸ…5_©¶Õx©K°¦[‹"4Ü=8ˆÕòpÁl>Þžb\D\‹‰òdë5äDŽ+òíE!ÖÓ‚5³éw°ÖÌ{ÌÊ5’ðÏk
[[ïdÂe'¶g8?'“jØ/ó#r«JdA ú­y‰jHý4Ï¤«Y–ÛyZ”Ùúîâ7BUv±¯ïî|.>Lï–tŽÔÉÑc:Áóqþd‰6LüyÞÖ¡¬ñ}Jê‹;XK&:DjôzÓ-6Êïh•
m¶¯	ñ TúšòkQ×8‚ÍÛ²PZÚùøS9^ÙÎ–‹§°ƒÜ¯¬ŸAX,/ƒl«µR>¬e•aZ+ª–½6N»‚qªÕ€µY5J b‚û½Øtƒ°\D”´¿x¬1eh·˜•Û¸Š`F=Z€5ÞXsïk¦#>Þsî"¡„­±[\EüZ{¯ñEî¡«SÔ~6òŸ|×>øXS4õ{‡j/U¬ÀÚAÄ¯´ÑÚY?&=šM±›V_æw$Nc5`ÁÈ&foekëï‚´ò Õ¾¼súN?G*é_—D:÷¡j,LS°¤©!µ°ØßÀÏ)%l3óþ\šÚ ê Ö46½É¹ßÏÎò$]/——?­/=&§ë&©[ÖÔ`-ÄmN„êÀ5©mã¼X­X¿eÍ¯lpffå–ÅÌl>WÝæOÊÌ¿ðÖÈJßPÇõQàÆªÕ”vH[ì>`íƒo¾â–Å9˜XŒ¼mÕR5qí¯ÀñàÎ—ôIdAªhÍ”5â-uW#¹ñ-†j/u^Ù–üÉý#¢Úù)Ë—¬aèÆY?Âjæ>2uV¬6ž€šžÅ";Ï+OQÎF¶¦`-Óu”C"¢ád‰è¦ã4³ì7~|Þ½qÎXm83š‰°?ÓFÍ‚ø¢b©0¸õ§+†mö!Á‹gká˜ü×´0uMÁo¬}ò£–É|xx{™Õ<¬©Ñ›^?—ý²ÒÖyedà”·?Ú¬Q¶fÊjSaskÔ“¿sõ½mîTsWµW…/ÖuÖ™…S)ÏÇ)Ê1°©¶Y)H¹Ê~ËX²â=rÓžYqÚ¼‡5­,†¸±äƒ‹}TFòUÎ1l·ÖŽ]zñâòZ¹2l°fþØöçèfíú¯7a!ã¦·ˆqš£2‚]Ì%®áÙÿ£Ìú—¼Ü&g‘§Fk°ì½	OžQ¤F5`Í¼EH‡dýô›'÷ža¢qÏpM°Bs¤Æ‚™G0qºÚ³ÿX~ˆOÂÈvü(Œ¨G>0ÐšÂèŒ0YÉÂµb».LCôÝ°ÁŸV­aÿhÍ±åÙo"›·Ñ>‰kìñ½²Yr ÐÓuæÍóüÛG¬ºøÌ?½¯×ÔÞPã±u_«æAF¡fí»O¤¬çþ`Ý¯¹52®-ù2¼ ¡Ú
ä¤‘§4Ã4'ÃaÔx”\Mœ.ež¢>kÿC"dh‹í½ûQÖ ­Ö7·š¸½·…žiWÞÃûˆÔˆ‡†oV.wä¸qš-{M±Cd“×ˆeGðÙY_æWšŽw´)\ÉZpïÙVÄÃ‡Í¢¥vA©ÃNò ²FØšk„6&5Öð“Ô®+ïüÛÙÞ”ÁÈ5Wµ,GHB°Æ|móš¤µ‘Î‰ç›\¾¸òü²¯H÷>VKi!PT˜W¤å?âÛ/DK&ñ†”äÖ ðŠÈ'¥"û@šä7ª‚mÇl5èf­ÅÆ§£yë]Ë$¡éÇ×ˆˆiÙŽ!‰YCÚ)VBšŒ°¤¥™~±•4š¶ÿå`ð©–Õ?m¥”/ÑH]ž/%òõz	{“œù?Êþ×"ë0l‡Ü&›¢rL¡7‰óê²mþ¥â™³ÃtãF¾ƒíQ"d+™˜¨¶³ÊWI%´^KØ‰“Ækp/ñz1*ø$Û<äñ”ÅB©Â*RšXMdWß>51ñi«½ˆ‡5ÚÄêr­¶*XË³ù2Òd®X›U_íú
xf¹åÊvc9Ö0ÔÔ;ÚÙLR×h÷	¶¶ÑÌóF¶»G^É‚y§NíÁÚöËÝfC-³×ÕBN¤"ˆkASô_¨ã®Ó6-ÒÑZkä½?vòV<Ž¿$¬Z;0ƒ<ˆƒø•:Œ8V3}m•®f)-Ë‚´ÞæLòÉHó´¤ð›Í;÷>^ˆé•5„5’X°‘¤.‰'¸^òE³ç20 kÓ„µÞ}°u·l1Ï[`mFÓ"&O¹ÿ¸€´Ö˜ÝøúñÒÆ÷èÂµkfÊ(IÅûA¬¡·<¿M£µÜ¢ÿiS›ÕÕý¦¾2”Þ HYy÷ßÿ Îåê¼i‹Ù»3å¡HyådV[IÆ._4+ë¶Ö÷Á¿}ûíWß‰Öþìh|
í?V&$ñ“Å—§ïüSÚøÿQ´ikÈf'ÕEmŠ0-¤çIodM¼v— 6{ÞNZKì×¡3>rÁdZ¯ÒÕ#aÍ`­çè1Ô5Yší£8oÊ)krŸ:‰'?ß¶ŒGŽZày²ohÏ~+^¬ŽÒ˜-CKì³tE=ÌÇ«LDâ›óáÖ*3aÖÜ¨Í`~Üí„ë‰íXM ¦áËú›…³@k6ôùZ»OjÝxÄ9NcÉôj´‡uçy½¤CÞ¾rèÔÇÔLXS˜›¿hÍU”ãU°ss[ÒnŠX¨±ú9Mej7èþ]è¦ïÞw¯´’°v9+óçš×*B8TËñG«‰ÖnD*…>r}^Ì¯ º±–VI^«¿(”ÇÊåœÔ´šµZ«KVË‰ÆdëÈ‚Eè²Æ0XA¾ÏHOxƒ‘±ÈlÜ_fƒ-›¸M×õõõû?þÈúÑúû÷——h´öÄXÍýA7¿yòŒY¢3oÉ kNV“®¬a†o†ˆØ+» RpÜ`´&k!âvÖ×þûäÅ¿p
ëéâ¾Å™‹ÐÙT 5øŒ=nƒ…«Wc©æý[ cs/¤¶×{!5¬=Ô›yÂÜûYe-T­ù4È€k®Í“¡šï³öÈÙ…ðsµ†€Í‡57p…k„Ä®-h­‡œæ® ¬×þý=±C[lóîgh°æàð¥\K†L©¨Àç½IÓekkƒƒk»G·ùïÎ›sƒ”5&-Òšh¬3e«CK©å`[ 4¿dòõ®LÞs§~r£^h!y$e2O3Ñ3FœØSTªuöŸÂq)IñÐUc‡ÛtÛü¿VínBœˆ¥®KX·´xÜç×°èÝÜ|~mó—QÍâ%PkJmÖR¾Ïãž¿d¥ÚÈfXSWµÚXj+B[I3ìBk¥qõÆv°VŒNSÈÅ˜Z.iN&¬™)	c²œëÐÖFæúÇ¬Ñ„5\gðô(áˆ8O
Äh¥TP“Ç•ñ|¦ï²jÔVôT¦Zw&ŸH8´4«ÆN÷aÉÝ3*#ýW ±Êï	£Àþ?¬­Ép	lÒXtÕxVH‰lÇ“Ÿ*ºê¡5nz¡ø%d™çÇ*¬•õ%õƒËñ;Éf•¾À³ÕÂ<uvÐZ:]ÊË.3ÑK&{sª÷B«°F„¦ØÑbj:´¶^¬¢cvTWð€,fù‹ãp[X[àãA~Z«ÁpÒPÓ<;¶‰Òz{O÷ªð0¥AŒEz'¶”¤ù–-È»öÂq¼½%aø a#÷ðC'²±ûC¨^-tZÓK¼â/òÛVaíÞ½Îv»œ¾0ÖìEpî÷ÂÚ?˜AÄAü:ƒFkæG¬ê±L€lƒÝËÆi,˜,<¡YxXÃ–ëÙ=)M¯æA~ÙdµTÿþÆ"ÌÝÌNZcŠ6s84ŠÖ&±xä†XÿÜäi+^¬ÿ'°–¬éž)3¢Óâ40Þ×_?yütvYnÀD¾#´Ö¬ZûÐV·ñ¸}{ªô8/µ‘Wê3ÀZ±QÜø—™³mÑ…âì™#ï^žQ²e9ÁíAüû¡Cµ];	«•Ç«Ç°]L÷ƒÕ,²oìÛ¯þüÕ7O¿úÂªÖHÃEkZ£5LF„k_N6fË”‰ÉÊb¡X §ŸB3“X&9ò«»5ÝÔ`¶)ÊÙ€µóâ-,H~¯…¹Bs|•Åk–	Ç¬ßšùöw¬Ø­„Iéj ¦ ÚØ!aÍ¡Ú±£…À¸¦Öq}‚µ³™Ñ¡7Ø5
«©8-=†ŒrñaÃ•áÚÄÅ¤M°fšáa­IgîÞ°vùFjn­¡Z¹ý>RÖß4l"[èÀfÖÞÁwäÊ•ÎSW:?þè£ÎŽMîª{\3¡ó%ãþ›4Wíì<Ô¹º“â&oQ=jSýQÑXiE5WJgàµ¶xZ‰‹åø¡d›ƒµ¶dÛË°fÁIÍ‡åŒ:ƒH[9cµó«äVì`«î'÷V{y•rcÄÃAÈ+7ö£¨ìzÈŒÕÜT6…¶®ã+Ž36ct}Œk÷—Ý´@PSÒÌº¤5ùû¿oÛKÐZS?7‹þ×Ö¨k!²)®Ýt¢ÚãÀj´éXXkÖ,±Úc#,,ÃfµlÞ¥jí¡‡µ±‹JyTÍª°*¹.ŠÑkÙyÎŒG(ò„ß 2éiFeÚÐ€cz?oòFòÛ–3£ôö,xA
']uëí`í=_³üE˜^/ª…xr«7»PláÊcšÜ<!˜ÂÔ/ý­cäAŠÔŽâé”µà¹?Dlþa5kÅZ“!Z5Ö»ð kÆ¨Nát\{cpmíðÔ4eÍ¤5H,„Ã5‚¥µÄf}Öþ‹Õ=XóëÁCZv´™·È^Ÿµ oFkŠ5«iÂRC]ÄÄj>4‚S”Ø©î“xõOÂj)Dp¤´X¿jÖN+°~0gH*Ø6ß±;1ÛÒÏd%ôü¶]t§Æ’"Ÿ¬mî|~o‰kÏ¯àÞÿw¤5k"5&QÁ ©òÛRÓD˜Cd™­fÕfR‰jq…^ÕI42"‘ÏÑ”¬&B§5X26-¨Aˆãù(f¦¬Ô@X8]l(1Ôç*(DQ¦{íÁÚ‘#¥Â
Qæ~Z¥d>½¨åEäŠê×æÉˆül&™¨s)‚Yd(“[¹Ñwùrº¬¯SqrføpzX‹'‹É6ÇìÆU6‘.$Û«ÜÊÊÐ_åŽ¼Ç,ß&ßl{*·¹0€L:YIóE~Îr.Ëk Vñ#Qã~ÎlÌø-_"ê}ó%^§lý×xáÄ6ÒÕêÄö§^Ûj-Z³4E´µþÕ¡¬O§:¥Ô´HLÑ(Hâ]±ù„g©7‹þÞÈx”µqëW5ºÏÌ’Æå°ÚÜ²þµŒØwºÆ×æMÕòÆ²¨i¦Ü½	e!ÒèLs¨YcÑ"µY2ÙW¸’H=4:`‘VXÓo]×tmSGl_²Ætà/rq¦¬ñPì@iL
®æËÎN¤Ék¼–GST³xògšÙ
k’Ö¬b\÷+i©Æ5a€£ ˜¥LœÙÆäi$«‘ßÐÀpM«ÝÚ¨Më™ÙE&Õ®}¿´¼°°ìXík\ªu}ÓšEK¶ù‚Û¼2™Ê”Æ7Š\ÚÄºÙÆäÂÆ­¡¶ljÿú¿_¾|K°Ö7”‘'9³¸0^às7²Ó<€Gñæè[RäIÖ¾øêé7_xX{üÎçSÎou¿¡S>2ž¬œ›ê9àduM©<M¨öšLñëÖ 8Õ±IO›:£6kwxÍ#ÙÀ½n°†§j9‚ÚuÅ>§€ÌÌMÄÕ¬	ÅzÎöœÓÏæ8Ä‰DÂš+fíŽÑûdŠÄM¤¯ŒÊ¼4.*DŸÌ 9âÈp†ç‡x‡ ‚*†xå-|ì28sF"hiÌlg0ÐÁšÛ[š_……qkOhÏ¤¯5¯sÎZÄ’#Ù”	APÙ6;å1²¹iI°Ÿ~¤5Õ,‚ÑÏ›fÍß£Ä"ÚàÎkƒ‚µD•›¿³¤/Åsx dJmíù´RKqJÕø®ÓªY+ ë¼¹†8dÓ°™üH°§Êýe¿ÆÓ®‚­RæÐwùÍ
Êž|ñ‚½Æ6$*1$C¡™/Tc·ÆÞ¯ß­Ø&¿5ûÐ˜A²%ÛxJ|Àæ0‡--=äh½Ž¤µ%zh©Ù|ZS›c5ÞDsÚšC6V/ëjB5bÙ{2Oì‚,AÆjÍ„t}ØƒžÙ$Iyj÷ÒÃã=Ï`ÏO&¤Rxa„aXÏ;$¯™°6ÕÅ§1»¢5Ôµ;uqZ<ƒ¹ˆPÍÇñ–‘%AÂk×Éj„­}ÖÕ˜ª…Fk-Y¦¬-éçÝrÄàÌ‡cUŸé!Ê i£ÄÝž­-kÀÑ¶/òZûºµÏ æú¬Öì;i¾aÈÃäð!0ì×ß	v:|äè®AÏMƒ-ƒ¤1š[´:B
ê´ø×å‰W£cÐXmmÐ4&Æ¡tMüa¡D?;Â™ÁÆÑ–CÊÂQaJë–ŠÖy¨C²ŒÕFþòKÅ@QÛ¼vÓ±[²#„†œF­êokŒ)>’õÈæÎµk;Ý«››WFLZû%`k‘ÖNhË›aZ¬;ÅŽ=Xcì-Êº6­å8·$cA°<õEkI˜¦(…‰ìG2«hú€\¾hUjRŽPÙÈÆ¬"®?±µAk	Ÿm.ØÑÈ:¡	}ñÿoKæÓ5¦#+\ÎrÃÃ‰ž³ª8Ž íKb»Œo–þùÏÞ­ÇË—àJÂ	~(]ŸÿLêZ+pz‹dŽfÔ	;QÌãÁÃHôCFËçÉ2hãÛWŽøðê ø’oH)™•r%g†þ¨lªÇ+%“µZ¬XãšÍÕÍL¸0ž‹·G³ÕáC‰Z.Ãae&l$Ûâ¬ôšØ~û7”ZŒ˜‘ok8aMÁw }ý½GµúlªƒŸ“ QþùD©^/ê093µÅ`­87 Ç²ÓD¶Ùkh ÅžÌÐ]]½.KÔ3ó	o¾×ûÔˆ5VmÛjH‚ÔÒe=zB>Á¼?”¬9Fók®ü]ãþï¾ûn$q¼Ã[ÎjRÕ‚°öÍ¬ÄAüjí —LZsÂ¬&YXcv·”|Íšá™f†Šn½«÷Z,F|Ñš‡µÎèƒ¹hÌ¹!ùŠ7&®…‚´Ô‰^˜­17£œ\}F1±*”óœc£ÒÃf5×eY³ÍéÅÙ¹aÜ"ekŸüÎ)kx2ª´œøàÔkÃÉt%¬JÙ……h±œÎ66æ(“«­Ô	GÔûÖ»óôÛ¤Cv¡6]¦[4[V‚¿²Ù¬µ4°VAW{—{Â¼ûÿü…ÑÝ±?ÿüoûÜ<ÈÈ‚¤_´¦xPœ»ó ¤›Û’Ñ€2BÙ¯¿tYï5Õ M‰Û@2ö±ëõ~¸‹Qùù»¯Éä¤`íõßà /ÀO°Æ†`­gTôÅ«]„¤ñn<KÁB6ÌŠúâã˜ÆÕœÔEÍ0`Ÿö¬>‰œ‹Œ#Ôª	k8GŸÍVS¸ÞjÀ»¬dÍ‡3îßÛfÔâÖo6xØ¤ðîNOÊšßŠÅ:ZÓŒ²&{7]%üE.ôzVûtÖø<GÈUl5•jÌ¹~Ø2œKäg«ÐîÎUU¼W|DÍÌZ«RÕ¨p¸f´Ötq°¦Ï:}O4Å³
G2`Ûüµu™5GÖV^¬¼PŒý˜ƒÍfÇT©æ‚5HæPÍÃlæ`ÍËjþ)Å}á™æÕ¿nåjëK÷Ö$¯¡§qW–ÿ”xòÞºÐ™ÍgXkÕÖLHc²Â5¶ea¬¶i¬ö')k¾ülÝB #ßsíZv#Úé†hl[hL=(ir@UÑÚyç	I%*´ÖÚÁ~¶ÛÔt¸Öd`º w’fmÖ7 kZzl›¨B;0Í%Az7H	kûiíùþšµ ­9XcyiÍ-=§™Æ,F´ÓÒ–l>@)¶µW­ûÿä¦Ÿí³¦,H›5‹ðîäxN` ùÿØ;¿ß¦Îtßoí?âH!‚D(ÑQn°’Eª½m™L"Ä¿„ŽŒë	pQ±±i¥üh;„Žs1JÛ) šVj3Ê(b¤¡As±Õ#”"f4'ª„zS©;9šéÝ‘öåù|Ÿ×o^VÓŽfæ¶y²~¼kyÅvXËŸõ}žï³(ÀØË¹AwrÈ”¶Ná{vkcïfÁoÇ)kVµFD‹Ö$­iñÌöx/HŸ	M‚ä	÷k„gDf¦«…Šµ káöM'0Â üçwKgçß…pF÷iåARkDâ£Zm°R=zT²šúœ!y­¿âaíÝ®sÆ"×T¿jV°kü3Æah™Åz÷ßÃ}„‰j
ÁPÐ­aÆ$5Ë$†Ù#‡þB©•i4â¹z†›@jŠ·FÊ5ky¢‘¯£ºcÃf>>õSÒZFôÆ U­#—Ø¼·•b&Lèï`°ÕÒé|³’LÃgª\+gÇÓµ"B9G#¹q/ž¿=·$/‘¡¹ÿ>ŸOq62'ÿ‰Ñæ’º¯-‘‹Xìï¬íÆ°ëÏ)8mù.hÅ3fùÑÚŒÈB"­å«ù¼z¾ñ-YÀk†ìñl–$r4ÃÕJZ¥i9ëÚ]Öä{Ò,$S¹|-Ù±œ
¥i—I`Se|•Z÷Q	[§rdArºÞ¢¬u¼DOìZîÃsO‘Êê*_XU±ÂEÄÉÎÎÅJÛ²y>`MVÇÁß
3ó-L!ÛŸ\ºcÎY†Œ£b5Â0í”V¾!¶OT³†¶vjÙ[îS¡s$µ‘i&«Ú“Zè·HÍwÅf¥H$ñ(”¬9V{oš4ÈÎNcµ•W²f´æº¬m›AnÇvüËÝÒ+këÆk„!u¶Ó€3ƒ<å`MCŸ¹9/¿÷«_­…<È kï¿“x6‘­¹ãy&B#’­¾8ÌVâZ…¶vgU&ä7 ¹Q»-‹Çjw¶èª2ÿ§ÕKó­ÆMœóÕó_âš`3ï[Ï	+×`µÞ¼6˜*åçG©‚NÀcº»Øš½s§•«Uòñw=›?»±Úì?¢
¶_RÍÖüÙixƒp…£SPsÀùÙÒµKƒ~ÆŽüùãÏmaxêl£Õ›Šµ¿ñEk'Þùó;¥ÒÍÎÑˆÊIkPŸ@©]“u?¸&‘œ/Ú®	ÎF”ù®Úh³MŒ`EÂÑ48élFøÎ“§éxíøŒ'æé³óÉ“5¨ˆÖØ©wÎn}~c¥ôU#&adFjçýÖ 59DÊ·lbÜ¹;rv2
kfÇm\fŒ´"¼Ï[ÓXZ8ÇÇ`
©°¦µšn_û#=b´©m±·¬ý\»õ&…¯Ý:|Í)k°Â_yå:¬öá:®p–?Õi¹GuD5µ8÷Ã«š>oP¢F(=(™¥~­Ø/^Ë˜a0Gi¶
&>íqHýƒ|¤Ñšµ]³mîrrÌàš–†d«L¬…mPØŒóï÷EkNJ{M°Ò Æg,4‰Ãn.ÒSmZ»`µ…+_¬z5q8hs÷dª}¦Áã»&#¿ý]D[3“ÿE°rÊš+W{ôûßCk¿ûà¦øG²Ð³¶÷át”ÕBpHÖB¸£œç=AG°µœPá0	Ç¬ÒŽÆ~ƒ`ÓÉlì&ä)9W6ŒÕ`´……FÄ™µ…+Y‹t{Û÷@à$!¦p¨jr†d`M¨æ+Ö¢IÔ˜¼²æû¬‘Íìµ¶/(.‹ªjöö®-0à¡•µÝT îÙƒ…€µ ¬1ý@
äï”iÊš¨ÏÑ¿úA IÐv0HkªP³X[Ùe­Özt¦ØXáÈ¦¬m-ZƒÐj³ðšo¼æÝ"!5¶(kû<¸‘„Iv´ƒµçüC:_Ö:9D»…Í$µ×[OˆP9¬©]ë¬IZ“µÿúÇJ„|òTHF¼™Š¸KÀa”vþókò YF…‹-kÒÉþžèSZ$“ñY(ŸÕ†ÄK Ä¨}é|2‘iQ	æœ‚œ­ffêªÉK¤«
B5R°°Æ›©ÍýÄ™ŒÎác°8tµßXÚ{4‘ÁÆ9ŸÄJ@)_™£~¶Š¡‡\‘€5#éÂFuéöù¹ÊÒÏæ¤®ÍééîòýÍšÍê?õj´¢ÉŽekÕìÊÒZ.¬eªdGm*?C·išd×gšE…¬Bò52"q?!s”ŸÆ4[M7XÍÌLÑõÚ:©¥ 3µ0Éf‹µT!•+$uPæ#Öô…«±™D_C]ÞÿÒá[·ú
©S·/emzºÝ{±|ó!È´Ø „ëu–ó8Žq¶Žç1É§»´âk)å¦U'im˜„ÇÙEj®ÃPK2hŒ91Õ )ìiXk#¶ä	®õõ-¿ÄÑ±e{*|Øñ–ÞÒ¯¦Ã£ÒÖ¢]±m<>Ÿ¹UX#h„Ð¥HØÙä&¬FÁZ;óõ×m‘íØŽ¯äã5‹eË„d6\s:¹¬méÂND>bÓäAšd°	°¦àêŸ1™Ä¾Éìû½0§^j'‘Ð¨	Î”î´€5TFA •lSM·ù—&¥l’ n¬ÊÍŸ¶ 5¦Wú*´fÎNO¬/^»pàÚ[oï¿p¡QÉ§Òõ +ŽË-L'u—ÎÜüÓãå©B¹BÎÛ*çûR¡9·”OåG—ô™û××1$µwoŸ?ß?¢.5#àÍqJ‚ú)Úšû‰yùË°‚`­ùGXí7R×Æ÷œ>"-ìÍ"+X cXÕ,åQä´`Ã’ðíívŽ#:\;x ÜÝÈ§ì1~‹=.ùÑºàÖ a+ÁZæ‘®56Ç#›ñÓ˜¤šÇõS®6fÍÂŽ› M‚oO'Ø²ÈnÜ¦MskããÐ©h¶ÇjÖ‚Æf¶"AYÛÌzÚÌ„°æ7¢M±™¼°¶Ê¢ÑÝÞÍíneAZ8]õZ\³²5î­óqÍ}^£Ã°Ö½£sýÑ£AK>²¶XAVI¾êÜQ£#ÁzGr¨hþhf€6Zd‹«¢§5­«Éßëj¤:‰ìØˆÎ6|µ›ž"š†[`‹›{µÃ™G?ÁÀ•°)ŽÍPŠZ›Õx”Á“'.
Üo^ÁpeWHl_PÓv3$@Þ×þ]õIƒ%|·nÍÙ@R³I¿CY3‡C¨çáAË-ô‚ÚÖ¥[…p­‰ôz6Îž={rÏî=2~Å°He…cˆ¬í	Áˆµ Í–æé¯Ã² 7n v¶±q¦gaÁ‹kRÖŒšŠÒ¦Û†jÌ
_³Æ)$kÑ>ke-8÷k’ª¼ZÉH´ˆÂšsíî¨$£ÀŽ’5þÏÒ±wE¬Æl¨fó÷¡š-œƒ¿›î‚JáÙ£±y…VÖvîÄ\D ¹‚µ‰=fÇNð¹4H7eí™¯YÓ*š-ù’²†!e4€@VlÍd>du®
ü]›ÂZXØÒn˜±Èpj6çEåÉËá*n¥«±Á£§Náï×®¬éøfŸ5‚¦ØªVVh[·Þ¥+×ú£õX÷?J‚ìÒšðÔ–a¬È@kZeò­'ù±ŒÔà²zZ-ßà‚–ä”áØ(Å°š*bóå|Iõz¨øõÄŽi†eÆ¬qºlKYKIäBJf” F0Ô‘J¢K%ÓilKÊº­Ä÷W0©ÉfÏN’mI9ØÒùÛW¹½„¶¶T!Ô”Ÿ-xùc321IkHåÀKh›ÜUåV]VJh*¬uLf'†*¥B>	%ÕŠ›W¡|›ÛUMÞ*	“P6ÊZ…dŠ¯|ãËF¡QSÁ½DNûjÜçšãNW6™K¥¥Êe¼V£½r,™ÄfDQßO½X,ÆÓëj·˜‚²¶,®b1½ 
ÜÅK`jj:o5Ò€ì0—qÎà…tÐ”6œÖH)¬AHÙ …ªB<Á-e©d¦«ô^[}(Í¹È˜P“‘e–l^sÓa;”²…-×Û£š›Û°R!·”¬áÜß¹j‰.Î&	áÚÞh“µÇ”¬mÃÚvlÇ¹hXwÞýðšFpïw°¦¦Y¶í­³¼‹?ÊÚ{¡1vÛ2(kÄ nÞr+ŽÇˆÐåTrZÅè±¡Š4Îûó²m\½33Ï™y`öŽy<­¹Ø„ç*x7Bjwp€š™]ÿä£Ÿ¿wî#hÍX“¬Ò/Öné¬íÍŸ\ß>pbªQ˜¢ÁkÊh™WiÀ€ùÕ™ÂÌÜ®^®$ù)Óîî”'&ËÜµKVûuS²IÁÝiÈNT³lÇ¸Î½¦sæ§Ÿ*iÍX‹v_lóƒ«ýù„üç'Uç¦b5­-ò¾!Çœ>F pj¹†tv 3.£0m„ái¶‘ÚÙX©v‘îXì4èhMÉM.’]X÷ƒiªþQ–äÎ p$2Ü$óžžI¤µcWÙcøf™*Ha?¦\¹³:~Á5®Íì	]“z™;|½c6”é…Â­¨’V´»¯±Úr‰\Ö"²ƒªÆ:,û2üƒzdÓèÓðGwS½í0ƒ/œî­s_ý:e+}×±Œ[ïÚÁÝõL=™Lk¾ýUgkà\Øôf+U­i*T‚ÔŠj‹•š¨+P˜ŒQÑú9P{>ÓQæ çóœ®öZ[B³…„µ6¼]šž¬)ýQâˆ¦oçB2±üÇÏhø?ÒIíC¨Œ#ï^:{-$[X¸i¬¦¬È›5&k ­)ò·bµ6­GHášŸ‚°©	ÕÈ‚üà&ùa5ÑÚÆAæÜÿ–iÀ"*º¡©ü¸© >i'ùß þ:iæ" XÏ#4ƒ5–ZÃjnI'lË‚´èY[ÖöØñ´[£½;|.¤#C{{z³œË‚oTYM±ùúa^{ÕKkÿûA S_“æÅ5ídìÃi^.Ræù` µçoZÊZˆï3ƒüŒ9X÷krÖýö¤îé½´`R:¹™ì][YÛ¬­­¸¿†Œˆv;X#,eÑ×¬mQÖôõú35ZsyAYcÉ¼ñíß·9îê`ÁrŸÎ	Á¶?ªÆ·×„ã3©FAx'â–_H™3ctÄ>pXStº?CÓB/¹þñ+3‘7Ú°æÚ¬½Èš·°1V;G2Ûrw—ýþ±Ðñ]ZÛ­9VÁµêúêµZ‰·×¨jŠ4s­ÁMEk%ØLüU­ŒjŽÔä%RÂÌž‹Q9îV±› Î˜à›í2ÐIºú·DÎ~s¹t-½#U*å
P½×’Ù¹«CÀçò¡2OŸœšCÊ×|õö\¾Æ‹6QùÏŸçdDÑ\ïä¦&PØúÇ&Çñ}œß5¾so
è©UG›yZH¼“eyªÌÙPJÙZÎÐ’¢æÑìÔj½P+S3D®–OƒvÖEŽKõÑnRI5Ø¶7Mâ[ªV,ÓÉýŽJ¸rX;›¿‡æ[@[¤fíÉ²ñ÷WÐÕ2‹7›3Ã~Ï qB-Z-ÙˆØY7PÊåâªYËqÛ7#Ô45Âfeu÷ðÔQ`Mö÷íg	˜EaMÁ~ä´˜«o33‘h»lu´P²ñ¯ö©%¶MÄ£ ¬yVûÕ~¾xwŸüE®Â—€ÕB“53ƒü×ÙŽíØŽ+¬Ybá
×œÇÈ>)k±“KÂX€5¿ÍæúoQ×¼´,F‚²6pâ}nmYpI²sè W\”5™öKëÂXD™ÿ³ÀÚŸh|‰µªVkÐ™‘$F¶òKÜ!p€š}ò	~äŠW²N¼·k.®¡¯½=[ç:Rä£_.}˜W5Í`^«“ËWÈæÓãGhÁFzd­ƒ‘‘æ5k&¾«í¤µÇp×»÷é§ú+`íËÃ|i7H/HÅ;³‚µo§FÀ™*Òh§&imD×^~‡~'åæ®½ðo#æ""—	lJ„-à9QŸËy„Ö\Ñ°æYå°&CH÷$74"XÑ&aµõZ;­ú;ÔÁÝ=2M(¹ÒUûÈCÕ±’WƒúÖßO&äØ$:Åæ£²r¦»…§5ƒ· k¡¥šÚc[„dG{ÔFaeë.‘Vkæ"ò}°Ö§4Ë.ÒW®éÈG2³éFÛ|Pc"T¶¨¯`iízw×ò«×Ï]WÌzŒ2âµ<wÃkövdÁ&3¶:d
©O¦ª1d¥¶ØÐZ¶asžÔl{Ö(MSf¤Wß–ØÒd!¨sß-X“¯HÙ³cüFœÌ¶oŸ$˜‰Ò(¬˜“µNÕ`µ—n~£Ë8ðqîæƒK—` ãgÖ8Lœ7¤·üGlýU¾&gHõ» Ö,œ²ö|"d{ŠA’©$HƒµiIUÌB{£šdsàä;e¯9}p±³ÊtDRÆ$UXæzX€a‡¤¬XãË°&­Í"ÜnR)73!÷¬\@k#mÌÄ¾6¬íc¨Y{¸ kæ©~žÓ˜Di¡`-Ä_—§õfMš"bàÏ*8t×î‚µ];i´F­ÞªÓßÀµ€jš(X5káÉÖü½'ì1×œñˆnælô®ìÝµwÅr"í°kQRk+k¯·KÖÚ^/¬ÙñÖB,kv
›µkÇ–4HžÚˆÍ•Òþð†´Ôu:†`Õ6ß ðvcÛjÖ‡©ëÃÜ
jêÂ¿o™¢ç.¸pùcÎÀ„îÙ8eí©Éjo|ŒNŒô¬ýsa'ç×?³)2È_À‚Þc½žhä±A–’žF`|h°†ÜÄ6 “Wv?ªX¹ky“Ö`œr¾€7b–ª³WHl!CT‘N¢£¥ 5=’Ð/ˆ¦ÕI¥H–±ÔžšÓR±¬š5NæRIé·&#Ü Â„‹ÛK€Ûx2Ÿ&?çßNgª·¤¿f5‹w%V´VHç§ÒÉ²Þ}6«Ècô@YQÕjp-ÅÛàïYe3Ÿ@Œ§-ãM­\Î•¦šEhmt¨BêæT“oã$Ñ;XüJüÌ£µZ•¨¥;jµÄ­[·Nå€5Ñ¾ÿ9jÚ(¡«Yµ1Ëåéå›ÍÕú¼˜_±š‘—fˆÆ|I°&}”ÓTû²îxœlz½Ž¾Ktgc%Bö.ÍÀÌì1k‡#ýÝ×ÎÙ«¿ä^ÛcZL	Ž†jn;âáµ¨'É>-yñ·…iÌÎ`3Èˆ°Fü¼kßbb…Ø»W™ŽÕªýõÁ¶¿ÈvlÇÜa„É»Œ`2b1­phæÉ¬»Íj~;m{ùÞr÷t¤j-ÀÚû°šhFP œ3IÅ°y©×ëXòÓ:¥ Ík† Öê.ÿ±9…êe¬VèòÅÂIk´¶Y¼÷¤î‰ÖäòD8X‹+£¬]{ëB	V+^,’?ÙÚ‘ŽÇK¸J]„û¦VÙH(Q?)ªàjtÀ^Br›mJ”6Rë•8Æ•OÀtõê1²³ô‰zŒä•ÇÀÚ¯59B^v·tEkÎºö}ÁÚÌ±a¬±³XˆÐþíÝ¡›èÉì$á8¢ù´öŒ ºI~“ªæaíå“|»}k%™­fŠ	¾”Ï!º‘)IÆ##¹„OîfgZò¸{€;"X;ÖOŒM 
Ág#ò£ÏŽO²…]$#ãYPH™ËJTgêíð¶ý„·—¶µV®?¶ƒ±­1ŠÀOcv¬Ö„`­[ÁVÖ†»ýˆuB7Ç.¨—ÒÓç«U,Ò³°¦xÄó._?·Ž/Aly:‘¡õl+Á'U¿ìH'aµl¥@¥†¯[³P&$CðóGfV‹6Gx.;ïvóÅcÚ	éÏã Û·½IEjÃZ¾‡s¬xÜ»AZÍšV¨MmXsÑ.]#®xlcf	­AjB6AÇ]í~ ‰í]”™¿ìEXHu#WáMÿ­¹Þp÷îâMAÜ“s÷>²Vk	¡pMq9ÐZÈƒäaXMÂšŸ›¸S8aÍ(!ÈiP’–nË–›k=¦`x%{zC˜zöÌ±šB<¦ÿ¸?*ÿÑU«9{‘FØX±†æ,´–[ÿÏ¹fÒ˜ÇpÍ›Àm<@ð^Ý;„Ø”²X-Úg-(k[£í	Ïµû¬ñ”þÇZs¿hÑnk›;µŽÝ½ä@Ò™šª5bÏ¨5}…ˆ&Bš¶æ¬ûƒQ?_ßMˆ\Û½†iK/I—p«Ë„ä5ye½§ÛjŸÏ£Ö¶8Œ8F›m“ÚëŸ…¬IƒÜÒl­c‡/^Û Í©k[a°¥×ÚÒº`Íñ3	V#8÷S³6<¬>ŸÐÚá®ØýSœ¸ô¬¯÷u-¯¯Ÿ»|aP' Ïj„ÖnÇÇú'MÅÓtß?¨¨Em#13qÁçFˆLºÁ©‡“QªÀ ¹«³³Æ®Fœ,Ç¼¢dM²Ëf0R¡çp–€nšSD0
U{ºg¤qGðÏMÂj©T
ck£Í#©Îdv|ÇŠžƒ“V¾œ­*¿Ä2ÝG“…R©<gRþm² ›ÊþÐØÜùþjÑ¬·w’“šaWŠý&OŒUSÉÑ±f“Mò5K…ÔT³Ö(TÑðAL+ç³¤A"°•“éLÜútCaÕJC–	ÞWlóOIÅÍEuoKvtÒ
¼Èt­ÃÓZu´ÈJ²KÛ®d9}ôðáû¹Êš¿Ã”5ïÜ¿	k.ÆÇåë…ZºPÉãë«„›Æ¥FôÓ\—<ÉzD@C—çrÀÚ [ñáõõÜ0S­ŠñÌ.'â/XÍŽ«±r°¼mÌDb~áx-Ä¾ài39|¤Ö[»¬ïi+„;‘/Èƒ›ÊÚãm‘íØŽ5¬¹p.#ËmV‹MûS’“Ð†ƒ°`Í\üùÜ½ü‹ˆ´æó ®™´&L‹ãÿHÑÁlfÓ¦”rÞç[ñR.Ñ¨åÁ´yë¦F«Qaš¢xƒÎgˆb0Z+^(ñx£•(\Â"a1¿zé£O>:gEkAY»¦pÐF>&Ó`º):kò½9^îjºˆÍÁo7èÀÉÔR¥À:>Tß¸Ølbã?U”â4ZHËrX#À7€kÏî#ý—>ýõãã—œÇˆ`íÜuÑ  Â5'­ýæ[Aå`Mý€˜óÿ“\ì§:‡ÀæŽÆk‚:ˆ;ëÆÆCÒ^øê]yhãú­¹ï€Ó`.×¬™‰¿÷…4ç‰hmƒf4[Ó¦ŠÑ²kGä7Â€mìˆm,«<HÀäH?°VÅŽ¥Š·3²RLï%%ÇU§¹ô&FÒÈ‹d“¹‘"êßo#¿dM´µ³`iËvº­=-½íìGéoæ7Ò6‚¼üÒKê@—5Ã51³Áw×/Ø‹\_ïêxõú >ÆÈ ItÖK9Z'-A“ÞA28Sî·ºEhßµSóÖ"E¥9bðhˆÆø<aHsc[ã9PÙ¨¦%)Jsgqî'Š+WÔoQ6d[Yc-ñL#Á©à
´¦Q{ã8KW·öÍMKnD>c÷LDl—xŠ¯¿vÌv‰Ç?¼ëŽþæÒ³gRNžéS7ERw=)„DHÃ£4_^fBX“®¦Ú)`Í‚§Ò;²yádä-§¨A{b¡õÃáó¶qæôq`íìÄIù?ŠÕnD€0gd âJÔLiSãxg>"Û=Š=nƒ§o‡çFbU·_š×H´fÍJÖþàYMËv<Ýââòœ#Tàh!ÒõL-Zón k˜}ð¿TòÚâÐ†Xío	kŸ1³,Fl}×‹hŠ{©6×Â»…ÿùüjt~èÝÙÓ»wÅ½i[šÖ·%ò™MpÒ“Ü gƒ¶æÜE˜”‰¹ø]RƒÕVvíªf}×89Dš„…Ð¶ß·yL°ðG3‘¯H¢")lÙdpb/¸6ÐMdŸhiy7ƒ×iy}Ü†5êÔ6YÏÁo\æ!¤µåéAc¯¿+ä+t´v`‰Ežúdçäô‘WdZëÌÕÉ©%5¬ÞµC+¢€×™—s?P…MdŽ0ÃHrkÕ¤·Â´•¢Ãá«Ãjõdh_dÖ:R”^“¹C7Å’©”šª(ÉJ³ÊPÿD/y#•¡9NLç¿:?U+º$ì:aÃgùTŠŠ³¡¹%6ŠÍ¥¡ÞÕIj¸%Mb#R§±€êÔr¤Z4FÖëPúc‘˜¢ïw	<µ~kÜé¢Y\™Ž+…™üÌTe”ï*aRY¯ò3¥ò…\£K¤Tf§E‡Š€ieIUˆ‡ªxŠšµS§ÂíU2oê[PÚ‡O˜å/Bþcóâ°×˜’s“h´fá0ò#JõD·EÌL¦±„ì¢w,Þ“)nÍÏg¬cì~èKxËÁµî'Ø-÷tòõ}°¶òÝÕ´ÝÕ‚%¤Zè¶æéŸwc Æ—·îfA‹°Fdð‚Õ‚¿È6¬mÇvü¨í C¸®Ø2„œfíÌû9/ÑhMÝ%½1ˆ[¹Ñ)Û˜~ïß#­…¢µYêÖô=¾·öp†‚`Ò¤§5ênÝ‰‚ÜDæé¡Æõ:vbæF³8­BU7š3ë¿FÚ	î‘­V"3óY]ùbóÁ«?uÚÚ¦²æ‹–¬líÅ^|ñBºJIÚÅ¥ÕÖlœ
må<ª@¥:vã¦]'ÞŸÏ/›«KsÊnÃÆuu©Lj?)åÔøÄdD­I_½¤Mÿü?>?±ÉcÄhíÁ/jÒšë´özqdt¦éÒ ¥¨1 ÖH‚dkUË¦ÑË/¼|H¾!P¶‰ïHvì5É>»0bŸŽ¶Øl}}Z0¶§mù0ÿíž0fãÛ@<ë	2[Ô`bâ*qMEj0[VwSwÊdD†U(m;g­&'wlò†t>"‘òc4Ûb€·H 5wXÔOÄó<æ†ÖÚ´¦¹SÂ[u<Šùlú6f.Ï”étù‰ºé==|Ëþîm‹kOÕgºÆX÷õŸ^ÈÈ^®KN"©”Þ9«Î„ÞVr%—j	°Œ@©j–…ÛPˆÑŒÎŠÞ¼ß¨LN[Ã3Û¶û7Œ Õ|Hkc‹Qþ|Å•Úñbóø×gÏ^!„f,´b‚fLZˆFÙP,87H!eiÊÔú,“€vsAnWØ/Zûì³ÿ
ñÍ}ÓŽÏ$ÔÈ×â÷Q‹gI‡5\Âá„5â›gÏìéþäãë?}mg
Û‚º¦†WˆhJDG¢Þ?æ‘—I{TZ£’ U¿é`íß-PÖÈŠTœA@C;ÛHoT¸‚{6Üö†«ÙºˆÒxa¹Õ<(F{¨IqO É‚ŒFè³ª½ú¬	ÖŒ”LY‡9y-Ðš6ÙB°W‚´5FDW;shÍÛ‹(þ¶Áˆféj^Yó(5Í‡H³ÜØ 
yçÚß¹mì>BíEpó®	Ö¾ñ­IWƒÕ„lV´ÑÖLZûP³XéÚÇ¢Ã–î<Á‚ÙÂ¨m…µ„;t'¢µŒbXÎýq5W³ŽfÚAt£¬ÅúØ>€+dÌF>&\ÅÚSÝ±1Xcã~Õ¬‘Ïû°Ï•]ÿS°&±?c/Oà’ƒØÃ(]snÉ|-eõluåvub'’®'Ò‚5c
Š›…ðŒõ)ç:‰LiMí³u»(šˆúR*6bµ]éT	z*S§åÛ\v¹ò:ÒIvËÃ$<%³UÎÞÙþ«Kù<×Îó?›»ý•ÝGê¯4réŽ|ëH3>¢úl‰mj	­­Ü\šŠÇ!Ap²Þ¹#É4xwÜŽKçkÙQµÒD5è4ê™ægC6S?eje•â•Z	{_Ùb9_¬¤DÊýRÌV¬í â ¨S!lxô'GïKPÓìH-kNWƒ•NãvËÔ*ð+lÞhŠWkù‹ÜSÝä=L.fª¯Ïÿ©¬4±Õ¯›;ÂJÞÑçŽè>ñžÑ`-(kAZ5kG5<Fœ}¤d1‡j6
dÆÂ±›MÛñ		‘LƒNYcáhmkätÙë\!®pîŠfA¬mû‹lÇvüˆã_ÿÇÝ{|µ]F6aª5‚óœëŠ²6linb2",ÿJ•Ö¬Íö!¤eô\où…¬úÉL×8ë„VBH+4h‘Â)˜+v£YÌ7äÂ§y§ÞÖVI¸ÀUŠ4õÖÕ×^#™ñ.·Æ)Z“óSk‡ù°þå‹_^{“ Gò_^°l¶bÕ®ÕHŽ›cÉ/Wï¤Æ³7nL¥â'Þ™­¯.5g.^•Ù1mhšMJ¹HDmªUú'zÐ¢ú•ñ†$AaYññ>øâµOa5 Õ`Íj&^¼ö%¯lÂÚûß¾ÎíÆÕ‹ö=Ô™aéÑæ5”4D…bÓŽiyìÐÉˆ“ÐG&Qò+, Iã Ô5äPÍû‰LÀ_š{´9qÚœ¿;€˜ âäÝ/+H†»µsìô$>‘ÆWôh„kŠhM16QÝ…óö„ÊÎ)SÃpdR%\€Üø8-Â-Ÿ‰X¦hÃZØ0\‹ÂZG€5a–â{Ó mµ	dQZ³;¦Þ|Äa^.Öˆ7ûbä;>Uo%pÍˆípÖž^~J0×3ñŸ¾ú(3+ãþxÂÞ˜EµûZ×H%"²¬Š•Z–=‚5…:`KJÁÏ˜	k„ú¬-ié<þ!;¨åvi‰íË&«ZµXé/¿‚°TaI¸…jÒX¹-gò€ô"›Øî!íA€5fãV7%ºÁkÂ©€iLþTûFélúô¤5q‰pÅ§@>ße­éÔkÏ`µ€kùÓ_|¸æÒÚà‰Í¶¶A&6­žŒãg_þ÷#'ÿ×Ë1û·}C×mT;Íê˜d7üDDqQyÀ0¦ÌÍ[B¶Ñ³šw„t•]ÔØ‰ÑBÍšSÖ‚¿ˆ-¢áhN‹*kzñ˜Ídë¡x¾j¥Ui[;{zÄk;k[Pí‡xÍÉjmem:š½Œ¸ØµnÜÅý~—p› qe÷®5~åJ ííY1JÓÂ»Aš´t5-æ?{öºÄµÏLZcºb;b[ô¶"£Ek½»ºk&¼5Ñó°FlµTÛìPÊ‰¸DµÎ„ÊÔ^ òÀá„+^£õ©£Ü9ŒŸzSª/©Þ`D¬ökß‚¨¦Ã‚µëÀZìïUÕ¢Ý±)³U.N¬er9«©%B¬¥×TEÅ™îŒÄ±^—À"
Ñ’âqZ‰ÖF+£µ\W§+9kä”ø<«©„/Å†dÎ‘2÷Ìtšóåt’§e¬ÌbWv¬Z•U£n7‘ÇMu^¶ÙI<ùññÈW¸ùxþömäµbÿyð­†»?Pg­5‡Æ{é²Y,–1ßêMV–°áJîçÉ
‰NÔ³rej¹ä¸ž¶†¢ÆXçú[G*lÏYÀî‘wP«yÕŒ• XtÅþ%DÄfžS«üüã\YHÖøyræ3Â]ÑÑô}ÑÖî· Ã
X»¥:ÃÌ2’Ê±\Ÿáþ*xÚ|qŠ+¿µô¹ãú'ä9(Ÿ‰vp¹˜àŒD³?P:]=ôg•°vNÚÚ©XTYVLB9f$5!Ý²¾3Râ=F"ö"yt‹öÄf¶±¼`-šé…µŸßÕ¥mÅ7Y±ƒ°¶í/²Ûñ£·ƒü]ÐÖ–Elf
ÉçÛvv³`M“c6”iËå÷îaùƒÒÚìû³³³:0W°>ñ/æ„ž’°vÌS­V¨—î˜C	ó6Ê˜ìwfZÖL‘w1¢Õ¼Ø˜¿ûÉ'°ÚGdºñÉ’®Zœq¾­}ùö—¬ß>Ð<Up kd¹·r)5jYýå/gèCBH2ÁÜ†%ÖûâE>q«ÍÜhez-.©C™`­ƒ¹:?ýÇ_;;òÅ_5Â­¬ÑèëK+Y{çÛ÷¿ýó·¯7ûEgÇ(ÆayL-ÖPÉ@29à¸ qmvÛsRÍ±ÑÏpñÿjäUm ›\ÿuœõ
ö°&½Ì«ižÝNN ¸‰ÐØT0¢ö$IQ¼ÝwGÄpªk€ö£§a 9¢H%CŽXÍ?«HnR°–íÝ‰„&X›Ø¹K#CclÃkãÁd*c"6iÍƒ™‚µWÔ¬^@3
s›æ'Ò9|ó¬æBCŸÞ2#»5â²œî8 ®]èê~rX“ý#Î"‡¯ye„Ã]Àâazßúúúâìú2ÿœ	sÈNäƒ]“ÇHJ7~e à¥Ò!¹IÔà/q—SÔ\]ƒÍ¦Øø>²DS#8ŒïÖÔ Bî$JŽU³cC_¨ù6U€z¥ÑâqEE¨FÜ|¸(Psaej,ÅgÓ´4#ŒÚØó×:Rôöö"xE‚f?ÀÚ3GkjÜµ¥fÍ·YóÊ¸¦$HÂ+kŠgö[@ÍÇÿóÌÖ®SØ*”z-lœ;{’¾'©SÃQ…—‡Î/“ÉŠö§ØÌ’f:¡5…F!	Ö %¯è1ê&B	Þý2‰Ö¬‰×"M±®EJÖ¨YÖÞbþ´q€5ÿÚ°¦NhY¬íTÇ3¥B’”µ¾OX‹˜Aº¶ØÎ2âÖoHÈÛ°ç_ÃDäà.žÜX'H8mçn	üömô€‹õ#¡fÍ'A²ÑÕÚñ|/HF]{5Ú»k×^F¼˜ælc™ƒ‘­˜|8k©/¶–‘†NÐ`–HÈ¶ÿÄš#&ÌÄ0»ô7^§%Ç£ëëžz7Èý?Q¯MYŒ@koFY{ãúà ÷­/OÇþ	{·JXà=+MHfÔ
ÖÒ<O%P¢Jˆk‚5¤µ|=a°&e-ŸÂˆ¤15Åæ(n‘9uÀNÙhn‘8«Ý¢°Ã!ù[u˜2 Xlbnºª9—Yèš#TU,»4Z¼ª³S[Nd:Ç`UÖ¸at^îK•¥Ûÿ}›’2tµÑ	y×r’R?¡Ñ$¯)*SZA®:E4y‡$ª¸Ã™vjt7©qÖÔOe–)óô¤×)ƒ5ºßp\¹™çÛr4¿iÒ{
ƒÉT¾¬™ù%G93'½÷…¼åd4;|?v?Øöß
fd".çrÓFjÑI²¾ziß'¿s,'É!5£è™™YµÜ+º0ÈlÔëXEBiÚUçÖ0âUÊØúÈ§`tÊš§É˜Ÿ&o›°æqðšžñZß4ÚÇvGë> ³H#l&m„Ä¾@knhi2‚ü×ÕÞþ®°Füâž\”kAµ«yZÛöÙŽíøqÃÚcIk®+öëà˜&X[¬Ù‰ÈÁš>¼‡¿Ä–ûb¾3öViÍb–üq.UgS¾GwÞˆtc˜âq®È¥üTAí¯fˆùÙbvþÎ|©VheZøûCn(keµá#[«­{¬¡«½ÊRµðT¯i ¦/‘Ú5Æ±ý5ræ›Ä|6k•/^¼±T/+¥¿'ï’¤Ä6f%W\$Íd2_š©ps’L’#ý““c#/\…oŽXÁòêÙÏÿã?þï¯0„ä= ë]Ö~rkÿÛrî‡¬%¥w#ÆjŒ•©]ˆjtÅnÁ`£½«dGùŠ|Î!§‰é€5)o…5j¾Û6^-(3z;b°ÆAÀ¯ÃÉjD@æbblÃþcÇÄj”®i©¾Øj†{¤Zê€gÙÉòi¦ÿ›l{Xs¬5.Ã>_¢âi-ÀšÖ,žÑkAs-Ôì4·ïsû}Ý˜}uwêæõÿÌ'J¥ØÓ7žÆ.<zòæK®¥é5ƒ‘ kOÁµ'\ì‘W¦—[ËOÖkÜ¤W¥¢zËÂM;’|Œ¨JZÓ–ÁšIl–Å¨ðvý~Ã6ûá4ƒ6mJs[2d#ÆÚÇ©­êÙì žq¬ùÅ×WŽŽ’cjdx|T³˜Ïq‚ª&‡Gf>n2ãFLä=:NcI×ý £Eó ?c’¼×Õˆ÷‚$®E”58aÂÒÚ3ÑZ”×<ªñåC™‘ ›!ŒÍ–%I*äÂé—¿6±1!£<M÷N“ïxèeË‚ƒv# 5'ºäaÖÎo„A4»(ÚJÒšÒ!¶‡Bµ k?nÁ`d‹¬­YƒÖ,2
 DÖDŒk§·1XÛ»²†Ïˆ´5~àïÖ¬1ýžåV^ó“ï³ B²Pr©ÛGµy=úíá“¹²f·hz×äX —×!JƒÜRµöL¸†¬&Z‹
k„¯Y ‹Õ4êX±$CzåÌíÛ;öÀX#Rj5¦ `âñÎø‰LW¼³›Á°Ë}à¶†'û¸IãŠ öhp°s]°Öôé_zv ÛS`íòKëëÜÇ³–]Ë±ÊeDÁE««+R¹–H§Ó.ˆ´ÿRÚfk¦‘ãä”³$A©J¥<j@Lº3^«sÏB9 `‘_ˆÖ	žˆPá‹þ$X#R„©Ž–q¨±Õ/¤<:sÞEZƒÒ°ž•dÿÄ¨ÎA@§÷l2	ªQŒvuDÂqî6½²¥£Çtæê+j/€ÖÑË%•›Hj6JN%zZo€žÝ§jed»äÊJ²–ƒß’ÉÎøüEêøMÑ¿®ñGY­J—šx¦tãFñ"•rMˆ¯ÑTdªÔÇ¬SZ“Ö»ZK ©ÝB\=Ö">û>yBÇWü Ë%<Àp}L$
üšgèÃ½ZRíùŒ¤5~µ)µø¹Ó*1Ì³+Ÿ¥r]m˜{±Lq´Îá¾X‚n ûŸì?ºÿ¨QÙ–’5¢&‰ wªÏ›AÅ,¸‰hi›AkÓF¢.#ÝÝ²‚ü“Ik¢Y°šSÖT¯&XK@kEkÄƒí’µíØŽíxÞ\s±LÈbDó²*»Åc¤žlÞ`²mÝF
nþìûþªµ kàV_7—(Œšà5žkçò®¾Aâ ‘É¯RÇ,³~ÈÍé„:©J‰Ì¬Ám±—Êd`ÜYä~k«uPº÷ÑOy½W>~ÅuDuA»3ÀÚµÞä¬8ˆŠ&Ë¬f}Gnv¾U(.¡´±ãÿ³wv¯qYºè?àpnd¡ŒDÐ…J¦lºª«(«…MdÕbJ¢\)Y-ÙÁ¸Ê‰ã’’8N,wKáwìÁRpÒ
Â±v$ú¢9ƒ‘…ãÎ3MnL»‡@r38sq~ÏzëÕëÅá„s­ÚûÝïÞU*I‘³wýö³Ö³Vf‹$R Þ­¹¬ŠÚn¿»\žhK—òk\õê¥1<Ó‡ø$Xq¦ø,þï÷¿ùÄâüÐšSÖhŠMèwþîÚÜd·Øgî!Ì\${²ñ‡¿€4½N£œIYS_lÔ´çž£ñ5jÐã4šcÞDð¨IM;¡‘}°Í5[cOi•@b9rlŸ‡5ÆP¡©”Ímh¶†SIvtçC,½Ú7±ÚpåjÞ„[á“Y4»ŽÓüê¢9wC9›?£yÏ~&l-‚¤wÏv~‘ÌzbµµýÏ,?3KÉ{ÿúÌúúïÖß¾zTªª>©…4HÑÚË\_Þ„¦i®:•H&¶¶¦38«Åù|µ¤;³àZ95VNîI‚gf ŒYÃ63ƒ´ZýEB‚™‡0Ûó;ì‚d@›¢¨ÏyûÑO4(Rk”+ºo ÷/Ÿ)¡µAØÌüEê*Xs1'Û~ÊÐD`NV#<¶Áj›7¯4S Ù<Ž… §¢¨æ¾d­ÉjÎ»¿™i¨Æ*T¹]ÊÚ”µ?9iT³h¢K@5­zhpû2§4FV<F\ýZöñëÇG^Ïš½M-…)`Œa®sJ°F-á<üi¯dI•y²…Ü0Šäžm®f°æJÆ4ja1éØÌi‹mÊš-Š‚²¦x6(-4Zû·ÝkQÃæZýÆµ±ÅzU£x7•µ€j?jOHkNYs9DPÉàBÔ3ãÃî½×›°väöc±Z{»¾åmÃ4ÅS•5”4'­½õ–-ªY¿óþ¨²¶¶šòþHØÌyl!V‹¦@Fa…©u›XÀ²þ±4ëÏ$`¡éÃkÌ¸LŒ÷£oõÒk–Øë8HÀjš°fŸ¼­ÕâuYÃ`„'·V×/’ÑÆæPÏO*\{âÕ67XË˜µŽð9‰c÷Ã“™xbêJ`©4ŒIL9cI*Ûrì‚h8Ýµ:¸æ~Us¡ªù]k67›~ö­ªÖÑZR•j””UÇòI9…t›?ÒÑ9ØÖNdepåÜâg.9×¢å/Ê²ÜgéýÈû/¡wè¢Ä6²JVfå<o;lÿ¨qÙát<’Éø$i÷7Ë…]’©4~"i™ù§¹:¿bÈÂd!‘éQáyA’?Æd.Q›EX;{îÜ$É›%lUpTAŒ+Aƒö—OfË•$‘:É	újp€Œ
kFK@F¼ —Jœ­ókõL,ž+âqÿ|‰äÒ¹%îèâÊYPMûR­ÆE·‚÷÷ÄãZèãcY=óµ¤Ö»“Š´qd³CG£Âa¨æÃZˆñ½uˆ˜,ðCÈ‚ŒR]ø°tP#[óíß™é…5nuˆªæt5ï)T{Ö£owKÖvc7~Î#ßÂj,NZs¸f¤FÕš`Í€Vzšƒ5ÌWW=¬EiM°æqS¦J9¡çr€_˜ÉAk9îÖú“Êt°ksó™Xÿür‰ºµ8aóÂ¶°&·Æå…iÉn«k²y‰Jrso×¥Zë×;üÏ‡ªJl$Oƒ:hnÀq1*®ÉÀ2__ZV
dciaazzIØòÙÑ‰ªùE6ê©Š²	µ“†j^»òÚ£GŸ¨}ñÇO\cì k°°¦à×]X{fvnVU$…kæI àÂfB0³êß‡ï#Ç~õ+õ\ƒÖÚðëÿµë¿Æ—ËÄóÄf›SžLD 6Rí¨Ä4±á¨d6ŠÙØžég–ÖXGT¯Ö7ÒG.$Çú 5Ô6ŽŽŒÊQ¤Å`­M°ÆÖUDaÍÓçÙÉmì~³3Lsüæ$5¦oÌ=µa©§|èJ˜Hã¯V///?“'[¶¿sõÂÌ85k´Á¥/¶±Ú“W^
Ö$¾^\½‘ÉpÏ¸Æg@1a†Ì×9ÌA),äÓìÕ†Ek¬MXcJdùbšå;º,HkìÙ®égB¶¬ñ¼qœžó6’åêñÆ™Fyx¸XË6mKÎœ<#<k¼tqf‚5"Àš»þ@k2ë×3ðšµ§sš¡ZÈä!]D B$ÑÔÕ^z…!(kÖÛ”µ ­ý-hkÀh&¤[xx‰Mö)GXkÇ­KÁ©!²µFNHÕÌÇŸ¶€ô·™Ã=•kº£!'ÿÓrØ¡HÃÀ_Çf³w­Ù°-ÑGÄ;Óš€5µ‰výÖÔ¼Û¼EB$EkOQÖÖ#¬öJÖÖŽ<EXÛÆ2Â˜Ñs›O[ìîÂ±€ú~ÍÚN÷þ jÞ
ÒÜ ÃûGB©oþø99˜È_+H‚ÊµÛêïfº‹b*¢¬}OZƒÖàµ¿¾Å`;þ)ÿº ¬­î˜H`pæAÍð>²,>ü­hÄŠ´|$d&r˜ÿUcÔªí§bM°¶§³?&3öqÑZ?øÈl×c[ëÞòèoÔ´ëMçÝÔ¡¬o%zÖIƒìè°ùS”5k¬uðïáv°éxAoµj!E1²M	X«‘Ir`œmã¢µTkÕE”ñÏê¼¬„XæÏ€FlkÁ:«È”öRÖr¹=)ºS(\%ÝA†µòqì¯P_¬¨âeÔ7 ”~t2U§éVä"%iY íŸÞÀ‰'U¹öO /h4eÙ+2T³0 UoÔÔ´µÔ0E&èÛ&s\D¬T¤Ê¤~á”Êá²ciBÒ!1qF]£e‘(¤÷Tõc”ëH_´à§¨(i³L—Î\ŽR³*ˆ¶GQP*&	¤©[:EïTÖ8`\S¬rÂ‹×qjŽi’Ú¨w¢Q¦0«ë&nÈØt†›®ègó1rtšéÔ¬é…ÓTUdj©žÕØê›ýý°Z´dÍKkþ[+Ä‰4}ˆ¸ö‡Ñ¶!ñQ3÷`9èÅµN†°~ú¾{Ì„,È¨°öP),‰#	t5¡š¥A¡díÿ°»±»#ŸßøÜT5PU3U›è¡Ë%O0èøÖ:cã·ñû'<FžHk°Úµy^›’ITÃæ¤—Ð{¿Œšræ&'õ<¦÷tZ›¦Xa¾^ç#u\d«Ï6J¥ÆFþäH¢ÁV4‹zÙ¼ ùpifÍà™‡µþ÷™0³e^^Y•dN•Ý“KÓ‰–á
™ÀœÊúòÚ¥s³‡¯ñ®k+³ƒ•öìH±1‹;d6Ì6}ÅjÛÞQò¥­1œ¹wÿÞ•×®|ûÅ'_<ºDH¾;ß–,HÅwß½µV\{ë»ï¾{—ÜÇ}|ñ)™‰¸8öÊY0•7y$NýJýr…ds j£÷‹>w’³|á‹²îgu˜ö"Pgy²èÑD´†¬&Xc†Ç!­4Øvê7yí ±Ù/„q?‡€PŒFå²\¿a4£µávkáf¹èËii~¦ð[ê×|5
Ÿæó´@23åLS«\cP4%5ºæ%&g'aöÙÉgæ¾\?<=³þ»Þ·eù€:‡êGŸ¼Mªëý?¿ôÛ-*.øp¦kÆØñô_¯Í×ò2h£"½'é
Ö„iL¬šcp¸ÂFØeÜÕ§¡=ëªVÔç2â¤µ•¢BO-ªlPsÞñ¶Í¤Ç±*ÉHÇSä F#^YÃJÑÃ«õ¿¾!Z³…pej¨Æ!‹¿ñp$öcFpÍt5ç/r'’ù
„¦±²°vV³öÒZÄc$Z˜ëáHƒ(^aKŒ`p38ŠD¥Éù‘ú5õ^;Õ%#N‹ÏÖNÿ#
qš‚×ÝíÃµŸƒûº 5ó‚üÄ`fˆGîÞ¥t‹4XÎqZTYcõ´¦%èj¡d-­9e,r…wþ»	”¢]°=¹Ñðxc’nw~no»þºý§=±(<©ùš5ÿÜFhïô˜Sc5N
‚545Ò!?ÑþÍçOÞEAN# 5ˆ­y8àšÍ¢Òš‹önOkvÂpS¿ññ®œ•›;ÂT´™ÃÓôEtyÓkûûc\)¸vd:-V/®ÓûüYG¯þæyÁA'Y÷ÓÕãÁù/k½?^_]ÝúI±M‰ÂZ‡ëïÈš(ÕA3t²tŽìÈž{µ¹’´Ó…Rœ¨Z"Y®¢¯½â¥tk•–Ñ\ßªcâ`¡-;I«T#TRšYäxéŽU*”¡:0…ÄYŽe‡«Ã¸„d‡²i Ž#³_	YÓTÇV$¥õõeÇV¤ñk"D5¨³×`:•§²Œ÷ÃªŸTG¹C7¶rIàz›JÑ¤²ß7Ï Êx_ÍÎ
ÉT-_OAi´,-‘è™_Kï¦›<#s)¾5õ¹ÀÇ¸è"Í‘
«éï-¿ªl™à»Þº¥,ÈÊš;oo*¬^íàÝÍƒùWo\©—ˆ8*f-?{i­Ð™èP]}>&‚ŽOóÏB7t©mÏ˜A;ì…X'EêÐ[¢NÅ{yÓñÞqÞ~|[X‹(k›,¼DÒÛêIñâªÏr‹à,˜a³ç‘Íæ¶†è<èr«díSKƒ^Q{‘¹	¬	Õ$­9õž>Àj»þ"»±?ïøå½í£Ü]V`m›Õb7èÿo˜Æ .9Cžä«„p\
ï<|­ý°´f°FðNê¥éü•¸Ãd½vý%ßÜj†¹ ,“Ò›Æl^ÙË‰éóîÐÉËSHÌFP×–>ÕkXŒ¼$÷fÑš.ÖA~ÝÏ`iq3µ™ç?-VHñ×ø“óunøÍ+ñqmŽ–-ù±µÙÅÙå…eÞum¥H…VÛæÂÀÙ©,ƒ1$¡Ñœ ² ºÎÜûóý+¯}~ÿþŸ?ùŒ_ØU­W§µ75”¬j‚µ•¾Ñ®QèÍq—À•í2š46G_äDþšûÈ¶˜F:Çþnb‚Ü‹§÷AyúÖÔ×áÖNk
“Û8lýÄÈ¨I@Îxý1ìú…k}@Ú1,üI˜Qz¤Ëó$†Øáª™p´ÖnûbÞ´_soÚï ­•Ž´Q>s–ý‘p»¾vàˆXÍ¢#„‰m`%­höì¥K,““KôPZ'Õi”'å=1:]Õ³šIkØ‹l^|åÚ¯bb™Vª?rª3)Qï/©N-Í‡ÕêCiæà_t«¹×È 2Ïj,„º¨é~¶Ó×L[óMÙ˜«íeÑšÉn}¼uãxƒ*5à¬ÌjM´ûŠp‹Ù÷3¥±c˜Ö>úèŠSÕ<¬Y¼®©)jhmÔ´ùqT¨ÖLY³ˆdA^4Qí%Vc¶ÐjÍpíO;¥µ ¬Ù°S]#"
ÛkGŽ5Xé:uÌú`;ôbµžzî´kƒÍ3Šä@ºê4Ë‘db°v‚](øyLœþÇ.9N†6ÜÄuú¾©díàÆ>SÏ^?ˆ¬âåRÖ¶ÅÄ(­yP3eÍõq»N¢¡D33‰†ƒDÛŽú$)Zˆ¹ÚÛÛÖ«Y…§˜AŠÔ®kÁ²Glˆ¯K^wtVØ'>þ<ã=û5ÞÞ¸²Æ#â1B•š™AÊbD5kìF«Ö¼²v—U£G5è6$êa=…v£b»MÂð„pF­­ñ-Ö”iÑ™Á{].¢¨e­³çä­“=­Xq2èÙšÙäO†ÏëðL­ß4aZS³\bQH—r½[«[ëòõûé–!Ü	(ÁÐ™à:"x¨§ÙCHKç•¬¯¤kñŽ¦qŒLµ¦Ó¥RkkºU)I²
Çd4¢²->R¡Ò®sÛØº@Wã Aµád…›>j¨’åvPK÷ŠZµÂîpX[,ç t0êÏ ¦2•cJ"‘©µÉ^ä8[8¹·äJ8vLrQ­åÒÃ¤@–¸‹3ÉYo€¯mäi„MckR=+©L¢TËäÒƒD-½Š²:¡µ<UmZ ðq¾¬òkçø^œT“{ÒÕJE7½ÆÄ´$MâÔä{ÌÒÍ«94¸To 5?9êaí#`ËêË7Vo~xå£›ÀZºPËÈü1¥:AÇtnåjqûkž–¸V›_°Ök=ÔÅh¹sþ¥ÒµšÚ¡“«¼;°æY-ª¬Y‡·ñ“ãã«À—´5ß_­Égn¨æå´p0Ô¬…©þ9þÔE3rGä;éJw[ñlN¬&aÕëj×vKÖvc7þág_´vásSÖkmÊše2ËèÊ¥³”Ù÷kIŽØS­JZûQ‘³ìÛ—¸÷Ó5™‘K.€y%:’_/ÔKûûÅjË2ì¯!yaÓ[à½±aµø°vmz	ií2ù-³@Kú–ÄÛäÂƒjŒÂµéÒáO—ÊÃ2B¦Gy$òÈ*ç€³ùjž\ÁÑ¡FãÒÚòÑèëÃbo%Å½ˆÔY‹ 6) 7`ÇñÏïßû÷Eœ÷îòÙþð‰ƒ5`QÅr_¨±lÇ•÷u ­Ùpp“b‚®M6O ¤]¦·Ú‹‚54¶ËM+ÿÙˆÉäD	«‘fZš‚\Jƒ5 ²óé—'$V”¯í³Ê´	XmäØ1¦àÛüúùñ€Ÿ0¨´4ö$	‘m#.G'‘ìhÖÁÚD·Zù´+†×üÇ,oófjšÞÒß¦´Ìžk­nôá¦ºM|¿)v"‚Ôòc“³gÏ^:{vö™|iš[êügç_°FÅŠþúXlÃÚXíâKW[Wñ‚ì]Ý\?Ì¥¾cOZ©JñB~®¤O(k¨jYîüŽ¹~ØÙdÙ@˜W*ÞòFnÆnÎÚ_šš?Æ‚#<-ìf½š5ÉÖ¤¢ñî8Q4sIXM–Žfá¢± n„“Ón|tãUm	Ïj~*Çþÿ€Áüò#¤i°öW>ÿ=T¬aÍ{A*’ÅM}¿1W´æF¼´&V‹ºŒð-ØFOŒ©ŒÈñ‘ŒGÕ¥YÀgVkyú¨ökÁ[o"‚žf°vBì&ªã˜õf£Hk£kÊÚ‘Çà“Õªi"ø†³ˆ‚Èeäº¤µÀkAYÛ‘ù€%¢«±x^CY3ZCÅ2ó6"~
 €‘ï¼¶Tš9zcÓg-ŠkO©Y³Õ?H]uZTZsûZM«$x¶{•‰¹¡iïwµ›uÕ4˜§ˆ2 ¯±ñÊZs#ùð•5â ¬æ’¦£‰;a`dÐÆgAm 
Î"ê¶6}˜|G:bÇ6<¨bðZ¼“r5¤vûà'Sþ'~êVÈÒ‡Œ\x Fkð÷—óñÎÞ­õÞÎÿ?X#Ü#Î2² ×j9Ž±¤òsD6¬;RéTODž.!”¥ÆÈ ÖR
EÒ°–t¹ŠDg‡wÉlê‹ê!	®1yâ,Ù‚©¾ŠÖÆ`³,9¤¬Wºå‰"V†ŠÆT„V¥¦z°öŠŠ×ŠX<;Ûe¤5ÏýŸ7VØVÇûtOæ
À	ÇÇ‰A®U†¸‘ÇÛg9\¾â%¸(Ë#Æo•ªëòLb…24äÅx¢Ëq#Ú¬åøó•g™Â•JÛäpÙDËªZMý±Ë•±ôÉ“4ë¼Tµˆ°fæy	üæG/ÿój)Ío&Xë¡mKESÉ¥BÚÝÛS‚,>"* ‹Ç¬ª^°±Å¸3Ì¦?ÃÜß/amSÂÚ¡£ßk²ü Õh­G…5dQ@³®cÑÔï7Ãd5:
§ÍØÃXm§½ÈS7WÍ¶oçÛï„5ß¢«ÝÛõÙÝø¹­Ýsa´ækÖ¦XW}_lE¯b¿?g…ÐÓSwnöP´Ö„µwvØ÷{XÛ¸
e?Æ-¯ea™ë[N´VÊÄJu®Ã­õe<!UÐ\®Ö¨+[^À%ÒºAîæË"¥W(ÛºK.µ
vîw°öÛo8;~ý)RZXKçæÊƒ>UJš(T‡Hô'Ê5â¬G‹\¨HÒ9ð«¾µ5×]kTâˆn´œÐ‹—_»rï“O>“Ã?Ä+Ö—õ«¯ßÇbï~ˆQí]S×–©l½(”2ƒÈcŽÕÈydOyÇHx­ILSíÚåÿu™Â5Áš¹ý_>†Sˆ9!ŸøÌpí9hG!ZÑs®_6GFRÇ4û}Œ £)™SqÊú{0iK>þý}#$=º²¶¶v¦¦¬µÓ¯gØÕ°Ê¾?ÙbåjíÖ$¨ñ ¼_ «v4Ôf±Öœ	$Cð±XK”©A.ûùÉÙ•KgWÊT±?Sà‚ˆ}üñƒ^Ë‚<JÔÈƒbÐŽÚ¬ér¸IÉã;8‹]„Ö¸O]«“²T¢­«ªÓç«Ù*îd|€«¡«³Õ,ÈeÕkÔ¬9~·Ù&7e=‰ä›Yl;F²ôi+ó½°Öàý_¯ŸY\|­QÍÛ£ã2íŸºòº² ñêWrã•©WÙäÅÃ³ÙkŠ&®±5Xƒý]‹&aÙ‰jîUÿ
­…&kØ‹D”5óÑbÈÖ”ÖxvÝFBÕâÚß ¶wEkzø[×X¼¼Ö=uæ„lEöÁ[ÈfÀšÔ5Z¬éß. fÂšùþÓŽÎt_HöLYC¨‚€ä"Ùõxßãà)²AÛu º­1¨jM› kˆj2„Œ¦@þ€²öJÄò*õmLW3¹,”‘~
°æ¶ë{»»›®Õ¾¤3K4<©…šµð˜%/ìf®; Aì½$@¢çÑ1-üpìñ5kŒÞ`„Ui×T²&X5kAY[’Zàµƒ·ÞÞÒ´ñºšAOÛYÇê÷€5"ƒMXë§Tm?Ã´ÑZÌ&ô¦î¹u’Ó…`ª_µhýhëX^8ª,h‚µÈ~pA=±…k*ªîÿiÊZ”ØØGUZÀZAQ"9ÐNOiÚÏè,VÅU?™/^]SžÊÊcVVà´8¬•MYkáÞ“º™¼C8Ä´ÕçFf¬ÇÉv0·“ ZŸáûDr¡*Öº»³ØÊq¼ZUŸÉhø|)*££ÿ"°¦3†#CCÝåÅ7VÈ‰\)â÷Qš\¨È]Â+7ðñ‡æ*ÝY~¶|OÛAàÎ`…,&o3_@DÌ¥Jun•Æ«ƒåB-¡½¹	eÈ,‹#%)
	%mâßUËª¼mOzp@­JkE~jûÍÓUÆÄ­«©òXÊ !ÊK¾`XÛ¼yóæË7É ùhê`)£cÔ‚¸I àN	E)çkcrôVpû‰8i@@Z/Y’Ö»6¯:ùþñÞ“²	ÂZTZÛlºA®¬É¹¿wgÍšO}ä¬ù,ÈÖÜç¥O?=,\SÑZ(YÂÚïÞt°f]Ö¶;b{\ûÖ%Bîú‹ìÆnü¼ãÿý& æ”5sAZ¬á
ÉF	ŽÏtÚ>#aÂóÜšúæ›‡ÒÖv$BZËôì_0XKèTgA6®Mœbçá¯\ªVh¬$°Í÷ö. «™M#êšÜ ³å¹%lü¸kèbW€5¹÷+.nn¬ªï¿ùõ›Ä¡“'½Ïv~°ˆup®°¶¼Ì…[‘4j™œÃº«0Xë|aáìì`VÖÀõ\°)ÎÍ•‡(Å¤0Mú”ØæÌ™ãgÞ8÷Úý/îÿ¬­½óÎ_>¦jî«¯¾úúÐ¸~Ý…Y÷OÎ½­½µL^g=;Š¬¶Û;Øë ¡Üö¥šaò¢Y$Æ—/Ÿ­ÁtÀÇµ¦Ä‰îdþhÚÚè¶]?&s#²@a95"‘M1Ò¦„hîÀˆ°Žà(¯íƒAQ€†,Ís¢{bH’Ê€tÁÇ¬
°ÖÌxÖ,ZB³ÛvßfÍ*ÕöxZkµ¹ƒ5W‡Æ1"BjÔXÜ¼ûc€5v[Sºa›GP+&gó9ªÜŸ™ÌqW{ýüÌxë&+G	T5Öç›°öÂï(Y:Ö2«wî¼r‘æØ[½Ø¸•–êD~’›Ä‰xOk%IïÙ*lF¨JMa’Ù€…¯Y#ÑB'lƒ3™`Û<HVÜW9¡í½³5sOÁ|ªàò¯—Tãfˆ$È"Œ† v½RfråU§§Ý¸+{íu†›Öýz°Xx¥#©E@½ð¢¬…Õ¬`Í`í_š±½m?„Æƒ`‡LÈàÝOÀjp…¯Zû{×¢¥kzüxP¾ö×}ÊhÄñÑå;ªlM'”
)VCÆ^ÄŒ·+ž
‡.÷\»Š´TÏ ©í¶•{àÈFÙŠÌ¡+„µ)ÑÚ‘'`íe`í!ëvDÌ ×£M±}£5¾Ì&Öšbš›XS›3dê6µÄn—õÇ†	k! µö"~a•¬Æú¬m3›\Ul
@Ê[å:. ,¬Æ€½ŒÀšZ‘[’$á¿Ö§…0M¬&ãþ%¹Œh_À„5=ÏîjTøÙ³êûÕ|<EZSØ,$B?²ç€‚”ôH"d<FØ\ÊÚþXÿ¸„µÖž^z­Íð‡Z_WNüœþÕ48iM„/·Ö×iÈ¶Õƒ¨²ú´µ„÷„|²†M½f¤¤!­éT­¹€t•žki&©j>™®æ¡¸¸x._ÝÒ‰V"¡¥€5¥Aòkc±Ñê’äóH·GÂ^jÖ˜NZóÁ49–'© šNIcCI&8Wë¬UÇ”ó¸âŠnÂ";ùÉEKÀZé;wŽZ L­ªéÐ7å1ýÈ“”ÈÍ¸	nÁe!*œú1ö§`vVÿÔ­!ç	4uA,¤ª)æëÅÊñrRæêÊM(CfY•¶å¬A.Õ¨—’•b£”H£ºñÎÊƒ,²ä×´è8yõª¤µ.Õ^YVS«›Öl¼yãC6oR¦Y¦øÔèÄ›GGKØßf?¦”T±›¼ÖkV0µ”©kVµÁáL\Ïnö[ÍL
ÖBëþÌR]Ù‚Ë#?x1ÍOõp÷ýH_²æ² gŒÖBdÖk«®!¶XPS<i/‚´¶ë/²»ñs_Z£56Œ¦Xu°fÊ?!®~Û†DÈ0™êY}ï½
Ö­E!=®Å,©Rë×Ï¨€ˆ}ä³ZŽje5¿¤…
fKâ'¢1‡Icm~Ž– µŒ’ ÿJïìW?ÿã¿øÀ`4<ß„µ7Cöã×o¾}rüí7QØfJd‹Pš4¹¼Ü(ËÜª@=6Î“ñ%*¦i±úaß¿¢¬ÿ•"m–jÜ¿œœk j}‹}#mFi—ßh­ª›ô£o?ûìßÖøË_þòŠÜû¿zií0·÷j×Ö–—ñ™[~K‘o&.JS; Mi\Ç¨f#¬$íEmeã€ÆØ—©^c_ÄÆ!©hÖ[ª#’U­[—É(í”Ú«YÅ
›Ž	Ë0Ð¬ºÍ5æE–=ˆCG÷N kC}øöïmó°&kÖØîO
ŒL5ÖŒ1'©‰Õ¬µDiM;Á9Ä±œƒ5F÷OÄËjùr®§'½röÒX*1I¹Ú3µžýñIò cëÖ;qïÇ]DI-–é‹ÖøÇ÷ÀÁÚùõÕõu>‰o®s	ŽÅsµ%³íŸÌë¾pª¥Œäšäæ´ŒEªUÆf¬ ÉDDvÀ–Ý§ö°ÆƒFó±Â4Á]‘Ð+û8@È„D6#®Ÿ6Ü_Ä{0»øˆ=+Xs±‹gŽK+Ø¤§±²e"V³¹6öAU›'54FÛú(¬ÙPªIX‹øöû4HÖxHVcU¸g‚´f½ÖëµÆCÒk3B#ËÓãÑ"éŽ2´Èq<¦4ácÈj„=’¼wß±] ™v=­!ÃýšrÇºŽl€jâ8bÃúœyV›rP¹ sX-¤A¾õ±þ`ÉšášyC|¬ùcQy’‘e[w{’ùrƒŒx÷ÃjO³ïß©¬…Ð®ÃSfLÈ6ô8†<q}ß^8L»½wïmÔ4¯«1™
5k0™-²T&ä‚eBjf¨#ö8¨È@e?ÂjO³ˆM%QJBž­1€íðáNvÔ{¿`m?mðÇÇoì¥Ãð¡CãýøZI:{@FÃ'«5UÁ|áãõZ†r5`­³Wwjž"¡=%ù?zV3XK¬Å3=q|5Ò	w’ªÒ˜3âD¥$Ä”(.tÖô
q—Ô3`¥ÏÁ+¸ÏkXE&SË•Y-äEZX_0eÒk*ÉôÜ\’÷K%Û[`#b¨œE`=/§¹šLaµ1ùŒ`|\*:'$’!a5Ìü+ÝÃˆs0V¾200™o’íÞ¨u+)2«¢5ÜËlu%\‘™ï•¼Îs=†Õæ,’¡ž	+©„l¹J‰šN÷ülÔèÕ]nÏpy,Äì¿JSµtê~÷rrÖ8EŸÌ‘i&#Ñº1Yæ©¡©©(XKÈwÿF)±?S‡±|œ¯¯Qr<ÏG†„r ÕÖ‡D2g‰ýJ—•Ë´J©³ áÔ‚Fê›RÕ¼¬Híê“vFk«rak,Ö¶ÍEÜž&Q­-Ò›èªùšµö"Üã~85åjÖÞ]äûV»Y»±»ñßîÝ»);Hçßïqmª9r²‹ùS•_¼1	ÕkS¿¹ù‡÷¢ekÏmíZS\ËX»MÉP¨ÌÝ/YC.-—rªPù0—…ÕixëËÁ¡<×øßx|îÒ¥Æ,JÛÂO-ã½^¸òÎ;w>xåMZ{@•¹`íÍ&«½ÉbçÅ™Ã_¿?Þ¯–çæÃ2·ªU‡tåŠá(…WÉ‚D¼•7úªõÙÅIÈm.YåÚ5 ÏÛ¬m} y'"N©xmñÕ?©}Æ ¬Ak¿Å½ß´µ¯?=Ù3}íÒñÖ»k‚µå·–+p•ŠÌæÝÊùŠ`¾O[©Æj”ä g|€¬ÁjæG¢××‘Iiœw¢åÝ]
¶ìYY¹.)’Ùèvð•ìQØ¦è’¦†¾†þÖÆ/¤—£m#ÊœÈŽ±7Ñ†Ðý$±1øv™MD3³I~Ãi~5lÓ“ÞÒ7Á¶Í‚ª¦‘•±ÙngƒÅ©ŽåK³¥DáÒÙÙtgg~…rµR†2¥g–§g.ž_ßºpa}üÁ£5se¶ñiM¥&]ÜŠ©hmµ‡J‡ÞlMZã¯Ÿ)”ùìD†R2)[È$¹–Û_ùÐf`Æ kl¶.Di*Q¬Ù+TõóZìEöx®é©ÄI+é\ë`iÍ¢\6›ºa6äCz0sœ¦õÆ]œ!«ª"ó[lÿ‰¼Ç(ªIñÂZÐÕ>¸#&ñ±õ°`‡G(Z#ŒÕ±Úÿô&#×¢ÀfË«lVú(NÃý«~nKÈøQÎ8lLØßÇ‡"9^%ZsÁ«Àí;r}ŸÝ¨ÒjÂÚ“>ŒÒØ"­X3e-êyÞ—¬ùÈP³ÆÃFx[ä«(š1èÛî 8q«ü<ZÚwã-²oãYD¶öÔãþ§­EüEÖ¢á[ÔDµ“ÛÀøXSÉÚcT¶¶½×¥3rdßmzÍ5iíÈmýd®fÍ§A:7c5ë‰½ÀÔ„5ÚÚß#M±#àv°µÅŸ˜ü?Àš‚ÛFFì"CDÜà÷$:[÷Ä(9ÂËOœ¦4ÈDB°võê-âí·oqõXÖ.ž7{!Â‰j®Ñš’ÒµžÕÍxiéâtgçÖÖTçO„5øk7Í)k:#Y¿´’¦NYËçdè%RdV§k²ù35<EÒðg‡à+‰û!TãY.@	dDƒ2ç	¯¥¶IMU“ßØð<ùç|Þ/‡‘qµŠ>¡f‹d0H8.rÍX6·ÅáöTn’Nquñ,vG‹#ø’¬”SPÚ¾QN†¿ÐídVÝÖ
{h„6'Û‘b#½§5	pÝN–'ñx,L‚lu©lt2vêôOiH'Ä?$›/¥«é\.Õ’âÄš+àÂß5­sª’ÌI]à¥.ªÍßª£5­§:‰%ä÷•5Â`]M¤v—ü™cùgW3ñŠQ¢‚0ˆ­NÂ©R 	U5,h¢ä’"5ûÛŠò‰˜Ü!Il×ŽºuÕ±š–¨¹ÉæUkhj–Ž¹ÙÂ¹¢.‹dA²^² ÑÖLXóÊšKƒÜ‘ù‡›MaSÖŒÕXë°¶k»±»¡¢µ›„éj_‚j[[`š®Â|À' @kÊ7¬FL}°õÍ{ºK´³lZ³ níÀÖâL(GBaëçmbKŠå:ZðïŸ—»Èœ`ôŒµÆì\gœ½Yú–Í.Çbª[[®×_}È§'cµ—‰Î«-*A?ì¯YÞ×ž-Î|Êff¾<40ÐÄ2E–ÊžáÁJ5_Š'ª“\ÕçI¸D)ç‹}£e¹qIEZ‘šÖwàò¤5çzÌÁã™{_Ü¿ÿhÍ”5â¥—_¸ðŸ_}õ<´6­_ô;ƒ5êÖ¾{wn’nƒÇÄbð— ìI~YÜ©¤M½² r œ8™÷ÿÚ`Í>ºÊƒd.1Ž=_ýb~ý€ ?ÊÚ8"XëbÏR!6}Ý¾®‘.8Mƒ^7º·‹È½mMHp4‹·˜8®¯hSÍZ›yAR¶–v°æ=ÞÜ”‡5c5B“æÖ½ÚËiÒlëëÔÖØíHtŠã:4*t8ãh¯þ³ç.M>ÃPH¤—Î"­åÓñx}r~zzÓúá®Ç”õô;ú¬}e½ìRÈqÁÚE|B{QWëÖ©ÞN<Á™õgÄj8‚fæóäæh©VX¹-n#.l0¬bâô´>8+kÇÌÊŠÁ3„`­O[½‰ƒ96ì)F²ƒHj2ƒ4oúƒ]–kŒ
ÛhLûð£nÃ1‡j;=¢Jšãµ€jÊÜ!¬½q?!]M¡ÁÚK¦«9CHWµ´5eB:^ûˆ¿Ã4ÏjÛ›~çÑŠ,÷ÊçÄ?ò¿ °F1¥„dù‰Ð*ì”µÉ>öb 5uÄ¶‰1›æû66žÓ”ÿ0	C ¨Y5—D¶)¬E¦Ü±ˆäS­…ðÂ‹7QÅÚÆÏ=>’ñB¤ö²éØÆ»-ÝíÝ{5ªëº¯£«ñˆàÚŽ¢µù§ ¬™¨÷CÌÆQÕ§y_X`í è¶A‹uZÛ0¯Æ#>s“W£¬E­ûÕÐÔLY#Òr BîV£¨v—:ölÚSÍ Ðv(lØÃ§\cì^ýìk4ÈÎ°Ét2´¶öÏêG‹¹zèÐ¡[·Ægf@k’ i§öÂþ÷>Hk®fíüy>o¯Ö7æÓ¹îŒ¹Ž!!~ì©…<û;<¬•jq¦Ú“7b¾êh-ä¹ µj5øp¶n’_Îƒ-iÈ©),2]%ÒÍª^Ž§p†ÄZWIŽ+‚h¼&EËj™‹Œ•åZ+X«[-v%;$ZÜ!G8ò$ÉipñäÜTÔ-Oz­ŽLË-¥É"Å¿V=Ýü#µ¤k‰–Vx¬ÚÒRm¬å Üd
D*l®Ös‰ÒTˆ!cž²³dWÎÕ3é</#»1ŸO¶&pÃÌår¦	–&i·&Ö¬ùY¨³c’šgÊI–¿0í3q‚¼•¨¦1÷ô&#/Hœ 	>{—¡>výÆT<3OõÚKii®¾Ö¨Çkó‚µù…ýÊƒ$b;ÆÛB5›² U¼ÖÏdS›‡ÆOÞ
kWŸTÖ®ž<´i? °Ö«ÃÌF‚Büû¦¥¹¹‡·ˆd§G¶˜XÍñšÏ‚ö"bµv&¬yeMYam·dm7vãg¿ø¥”5eB:\ÛZõ°¦[Ã’ÐBx#Gç`M%mß{ï›ß‡²µ´vuzz¿Oƒ¤fË%x7z¶psŒ(Í5h«YÈ`ëìÕXÁV‚Š2î]Ö—ÐÆ&!6êÖÜ=4,F>xç¡sï'Î_p°†¶ÒÌ‚­¡®)¦óåA`­¸200Ìµ#¥Æ5\c±©#ªUÒr‚làœ514Ð€¬ÒéêàŠ}ê»|ÀœE»&šÂÚHöõÏ?¿~æ8±kœlÿòÎoq„üÏ¯ˆ÷ûc¢µïL[“ÇÈ½;®QkfÉ^ÄWÖ
û„2ö§\MÖ²Zp	‘¼x ó~ÂÁZ—›œÿOAd.˜œò!Xc—Ï¿¤vÊU«‰ßšÖþÀæÄ„ä4ô4ýB{Õ›t^61t Ìr¿Ì¶µeû ¸J#¨h§lmÖP	mæé1Í6gžÕXÜ†µ9t€e^CÚìõqví …óa›Î+õq¶qöÜ¹sggyXÛþ•Æ¤¢>¿uþcŒ]úuÙûÊî¬c3B”eA:eÈ­‹«Wû;èÞë%kf©žã2ÈfNeVëQÏQaÏ„`ß£ÁÇfM&ÓD±m4bã -dæ5øR}-T§zl3Vr|G$¯d»‡³ªZc‘	$¦`›E0€ÖDkŸCŸs`›¾<—ùÅÛ jU-Ô«5…5£‘ŠpÍËj¬VÂÆÁˆ!$_'nprÌ_½ºö®–`5ÂëkáÑ¿÷¨˜í’})T†Ñ#°6ÑµOÓÓ¿ž“ŽÆ
¬a)Bë53€<½k¼g‘.)k îÕÄ(ÈiSZ 4‹#
¥CnŒ<ä‘ÖvÔ¬é 5„Ü íhÅƒ’ITX°ÆÀèÛ›¡o™—>ÕcÔ¬EB#AZ‹âZÖ¤¬ùð¸æ§š¨[Á†c5‚²½!,…rŒzYê
˜~Z7DÜ<,‚ä_­fí-˜íûÎý†v;û¬}Ö:8CørÖ k{vÐšß„Ê¬Vs®ß¿mOü°Xmq-–Q›lí÷ÏÌ kãä@žì}_þC”¬ÎXåjÖ(cu
ÉÖZ´\Z«uVÊO‡³Ç5»Ö™Ž¦ÅlëãêåÍ^çGD¯ŽÄ°¬exEÂšÀ¬5=™Ï5÷énMC5õµÔºý_öÎî·­óJ÷ƒùŠs)CFà’"´a2$h…p`Eü‚0¤A³”UÉ¾rB&MÂ¨%MœP©dÌDIZ»ˆ¤|‰3®e ‰Ü^CqŒA‚ÜM¦5Ðs}.2Àù=ëåëW;Šp:çöhq¼{o’ú°¼7ûYëY€˜óq{ºfM–š±­$®úòR,Âmˆj£ãdSR³&7¸¬OŽþœ‘tvÊŽóÈrÆ†´Æéz]um²i‚]âx-‡äV¯VåáH¦$)•
’,gò) zKRgFRe½7ö¤âèTõZ2UHaÅ”RŠ'ÝÖš2‡œ!s¼X€Pá×D¾Œ!fžàM7Mòmà™T6(¿¾\­š«$µƒ½®\(ãyDHB¥æ^X»C8Qí:óÕ«×?þðf:Ùœ½Öh#ª1qÞnµ—š|PXÃü2¦’=U^šËÀj#rüÍ,//eìCŠÁšÔ5­èŸ†®vòâã'/\ÙU±Æ¦hÍµá¾ÆlI“³äAU‡³è˜Ù%"nzÀmÃÕ«í¶‘»ˆKƒ±Õ‚²ö—ý’µýØýø¹ K„tÊÚq=¨\£¿¡™§3fM„­‚êÿéýû÷ß|óÍï¥5/®Í©ü·{Ì78×æ›yÆd@6ÆÓø­,ŒªµÂ2saŒ×šéekK1îþÑflu‡çøž?¶p½Ö>ZxÂÎÀ\¬Åhß¸àÂ}ñäÜj»0n¦ó‹£”$Ò}=Å5’GdB¹ÚøÄD¨Ì‰©¡yÀª\N[jŒìÓ6ÃLv ¬­ôí÷_Ê:{ó~ÄµŸÿì|ò¬]8õÏ~ûmX ÝÚ·ß~{is¦]=/Ð’P¦<F¡Õ3"7q™ó…Ä	’ÑYŸ wH6Tç«X#[X}± ØGp.s°æÀb“%çqz.;tÈ@srû~ 23’QûGeç/¢lãåNsáŸÎÊR•$pE-·µö°f‰¡\Íd´ k^[óa£˜Bcv”|¡þÐV!w_qQ+Ah­Åµ&°¦Ug$¬uøGœŸhfÙ¼(d²þÖÈä X³[´rƒ|ý}Ö~|/AÅZlw€a]Ð•Ñƒ¢ê`DSù{QNmÆjìØi0"eŒÃ#[^RKÉmdù4H²Ç[ör$¸RÇûú“0ÙA¬]êØ{×z&²£X‹8ÓÊzc{Në®5Ž²þôæå=‚	Í¦°3ASÕ˜	jAWûÅ{&Ö<¯9Z#Ä.¿QÙšÏ„4m·v¸¦‡p-$DFqÍŽÏ´ÙhY_5s
ÙlàðAàÍì4É†ËÎ
Öh•Ñ¿‡‰§¬I7:zš–Ø ÞmuU ™¨¶­6Ð0°¦ Ð™¯¿ÀÍÃ]#öãF…5ikë~/ H|Íh'lÛ0ÔCš ;Ý49ÜÓs{û©í ¬‰ÔœÃóži¿Ó"ÀZ”ÖXºí>êQo?¿œíƒPÚÆm`m›Èƒ¤IBkæÉ®ZÅZÕÞeÉãk¯¬Q•½}·-öƒ4ÈO#¤Æêxlö8ç„X¬Ç§>z¢ kÑðþý½	¡šË…Äù[ŸÁÕÌ`S£µ~`çÄØ¾p…÷gFÎ\ÜÂówaá£W»åÊ¯
Ò˜\uœFÃ§ó%nîpÚ¨æÏv ¤]9ÿ%|³³T>•gú¤ªÏ™ Hk~ÈŠê/"žÖxiöÉ‰t‘îùOEk©iŽÖb²ƒ$çP·¦j¾ãI
¥J¿KSH``O-k¹”iµœ.™wG`«Tð†4XS-›*uö¬¬¨ÅZAÄ¶²Øéd³“ü‹T¨G›¨·ó©
>Ž€¢¡ò¥L¼7™›îIáeÒQ3y²¤s’‰B†c!A¾{,nY ú$Ê…qÒÊÔ¶5ÙJÀhiJÓ’År½ûýrù”³úz³<P“)¤h-6xƒlÖÁþA8¤¶Öf?«áÛ¿þáÇ×u¿þbR¿Õv« P"«ölÄ½Ý¼`MV#åå9<hä%ÒÈ«{«k	Ô?hÆ¢#‚6kºEkAWóÊ²›µYãi
•¬‘9a5Og³~(Í·Å¸z¬ÙêÔw•µ`/bk¿¸{÷¸P-¬é¼õÖöû÷c?öÃ`MÊÚuëµæ`mý*e2„Üû«TWêÚXS„Š5†:x÷Úàõï§µ€kG†ç\­¸©j<‘€ÛP9dý°ÚLçóó…~Z¦”[<EøPM5°ÖZ;ÒŸå
3y„-¯]½þÖkÄO¬ÙGu«VÔXrùÆr0^.ÏÈ\ø+¦p¬JM$›«Åz®µöÊ¥v»´R’ÏÈòÚêR:—E™§IÀj›Bë.ñF1ïËNbËÿL¹ÎÝ¼\â3æ¿}ñÉ¯	~^û&øiùzo½€q?°Öo¿e¾ôÕiðì˜ªÐXY‹l4ÔN<‚¨p‚¤Gf¬qDþçùÔuì„X-„k}-cá\c)d3a‚Cæ"‚n¦c“¬s“ÙI0¯89“«kCb7õ&P³µ!ÑEk<óÐa5G²ÙZk
ó‰„Ûv°ÆÊÍùB²EˆÚ4…æ×m:bZ‚±÷ñ¬fÏé·HUŸÿå³ªÕZ‹‹J€lUYÐbmžxh™›êÖnm-ÈaàUc5)k’VeI£µÁÚsÏA ·2§îÍö^»3’Éà)7–X^¦±ŸôµÜ¸5Þ×§ŒTÅ¸m¼Ëj%·’Ïˆêê®ôÈfcóÍfÓ^aôæ^®§šÆ–å®6pžÂ$¸j²‡TÓê¹ñqéhJ†$kNP[ï"›…öÜªZÎö5¹ô¨‰Õ˜¬XG@µ	¬ÆR3FóaEk¾ÙšXÍÓš´5ÞÎ—®EqÍ?¢²"™™ü˜Ý,ŠÖDajq}ðIåøªû®:®LMy*è´¾júãç0!9æÔˆpÛÛGO«:‹p×c§o?¬Ê2‘x¦yVÇj6ª¬±©¹Çî€Ó¼s¿¯Ys¥hF`|…h[li‡ÛÍjƒ…œþ9Ôgõ¤²c=½ýa-€Ú.\¨&eM¼h-‚…Ö³@NG	ý¦Ô"€}ˆm}”Í=dÂš^-lSÍZ´Óš”4kˆýµÌû5ð-*­i^ŸÝ#Žws£©³ò¹¡ÏÚ^ÑmüìûŠ%@5õSÉ(0>6§cc µk#”­=ªR'XmkK°öªÅ‘Ö$ª»¬m=¡ª£{kÅDaq~ó!Î#3”eÅþß`-³¥Bà ìG©T+Pc­6dk$BªQöþ6yŽT+¨PEŒñÍqJné4W2™K¢Î™“7ò÷°æ:¯qäp†ýIÖiÔ5Gn¤Y x¸^)Ô‹­¡l­¦ßô8ˆ«	Úð³96Ú­ufŠå™Ö
7»V¸U”îëÃ;«Þ×OÍŒVšä7–æEkÔ‘Y›¬å›©Z‡sÕf#ž/TÒ\Ÿ­l gzO¢7–o"¤‰3óôÒÉ™²Ìù`o–îlÐ_µo"[ÂKaŠ5“L=uÁšvÈJ-XûÀüE>¸¶.iMÄv9•OÕ7;¥B£±
«m¶ÊÕòjfxI°f&þ8 òŠåøÒ*Í€(R³ê
u¹õ£¯Qsµ‰;X,LÞºÿŽ˜ŽïàŽ`mP.þÁR$ÚNaÍ¯X{_‘°†%¬½u$2j/r÷îÀZ"†¤PMSDWã±kû±ûAÑšJÖkë×x\õ°Æ©ÈÝ£b	ÜvÚºÀ>B9žx÷M‰kžÖ~ìhÍ‹k„×ú½ÅH¾\V:F#*Ìn®kåX³Ô*&¸þ5ñ®VÛ­&~Ã$=(&Y©k\Ó—ù«™«+@µIØâ\¬Ëµ0MÀÆZ-²/¹qc„rh¢Ôjæljë™/rõæ.þ¥•N®ž^ž#†óÉÉ)Œþ'Èºl¶†Ðœ¸9%É){è  MA<Ù—^=;ulÅÃ­±Õ@`kT 1¶¢«¬}ûÊ·ÿK¸FÍÚ‰óHgB4Â±Úys…T}ÚyÇjôÄ¦ï5^xx.HYã,'yl³ðîðY€µ‰¾Æ~;ÀRš›åANªM#Ñ:s°–¹vÙ‚5¬ûY
Üp…äG¦ZmšÀŠÄº¬jÄwa­N‹Ü&m“´í5¿Çkús×p“¡Z7)2])&0ž‰õ,ù±´Hd³.Qm¾ÂUM¬öP»8wëÖ-”5R¡€5	kú··ùq`ÍXmëõšðñ‘ûÚà©S	ºcÏÉ<Ã×¥ê­­ªw¹Î@kDí@“ÔÄkÕBt½úÅh,	×ñ:øúóÖn?P6ä`M›Ñ‹íh‰¨o¨Mo<œ>÷ô¹®á#‹skÅÍd6Âä}û¯þÇ!ºŒæW„@-šTHÍëjLÆjRÖ¾+­‚ù/[ó6#¦®}mxÍ!›Ëˆdþ“qÛî*›„pm”Ä_‡aV!’Ôh‹}Þ€ì”5Å“¢9¶Þ¬ËÚéí÷%¢ýÝémcŸ>êœ	Ý›6¡	Ì`-dAbâ/VsÖý»¤µhSl/¬	×¼²æFëÙöéí°Æ?6“FmƒE<{ûÐcç&‡okAY³øRÊÌö½ÂZÄ2ªÞ±`å°8½M¯n~vØU¿EÅ!5GÎ{øanÞ€h0•”5þ:Œ¸y¯¡«AjpÚ*´æ¤5íe¸v5ŠhŸXs`æ£[×jƒ½£Ëh	F,8@ÒQòÚX&FÏµX|ØpM#™Žc#WˆgLˆY ¶¤«o!¬½àŒ`×Þxœ0a™t8¾üù{¯¾8?3.
×Ì@$€ã½#–0sÖÌ1¶ó¹‰€MIÌúå¼‘çäEÓ~ ŽAoª¡
¼$Ü‚?G<^.T
Å<Éiõš¶[TJ›LÈ…D[±î™ñµÆª˜—c,ñ ¡t­^§D˜œDZ¯nê¶] yŸTH‚¢ã\mœ›F¹Q|"ÇÒV~ùËç;j$ªÁÊŠJ°ñ€œ&Orb"Ÿn‘”˜®Ôê­ße«Y(ë&f.ùÕ:ÅN«sas»”Â|¥Ò.–Fóq~†‚5vÈ€²€ÄUƒÖ¸jNžò?QoùœÜpºLQo•¨zó°ö¨ˆÛÍL„¯Xs°¶¾þÁõ×ãJú¹š ŽK¥bYª^{‰mu‰¿Šx£‘Š/3X^ZÊÇÐN½0·ŠÊÖH˜a¾ûÜÍ	¬”)»Ð&Àša"“BûLScá`ùÎlÄ
’ð"[Ä2Èj¶ˆöYSUÄÛÂ5EÖ¼°­ýÆnÀjžÕˆ›ïÖöKÖöc?öÃ:­yTcr¼f°6kþÎ¢Öh-M+×ß¬}—Ö~Ä5¶Œ+ZË+q»ÃI_£µFG}ªŸi{\¤»æf¡@Y³ÊÉ ­UJ‡{S…J±	¬ÍeÊ«ñÄßf´ö#D<œ$dùCZ»(eM-ª/Òtû§·V«…6]®É¢,÷Ô7[ÙV³'U&g¿ØÞÌUKxKZ[~{n©XÉµdœ$«%P¥6iyZ¢˜ipíèÏé¼³òÅïMêçÏÈƒüÃkÐšþüLHƒ5g1r©µù­­;'„iNRc¤Õy)kÇNÅ¬O6”v‚§œ·]tÑ~æÙ’¸°&JSLN58³%€¦°¡öÃr¶èÚŽL£–i‚1ÓÏ|‚—'N“ÞyI°6”ežNqýgçôÄôhÎç3)’Ä5ÌQX³ËnË5üBž9V³»Æ„¶}¡®¦æ=ûQÔØ_Ÿ¯æõJ*©Ñ™‘äŒjÕž_\d¹h¬†Y!v‹tzìÉ.8t]˜MXû‰.»÷21]É©gXjð	0)&ÀZ½2Î¿v»]1A­Rc¡ÓèPÉëkØº°F`ço•1²°þ×!?²ÛW°ìZJºÃìÊ&{{'r•—r%ï&b^"O´9G!œvv#!°¿ÒPÔléånT#«Á)Ô"A	‡‚%¤p­k¨kT™¯½¼æG 5íOLØ"Æ#~ö›ÿF¯kuÉ>tVÓù÷ÏøÈÿFÖyÍyôXÝ›ÈF°ÚSÈk"/¬…pyŽÖ>0·DC·M±ïîH‚¨	%AZÜuUk7•ÏÈÒ´A¥œàÐÃš}u6dÀ¨Zm¨^­Oõ€jìnƒR¡ÏšHÍŒDôµ©ýÎ×¬Ør_Há/vû4¿¡ªóˆÝf¾½qØ+nÛwd´ÆZ±nÒ¨ihê‰Í¿&k!›ìÖÃÇeíxØŒÕ>|¼8ë=>»ÁŠØÕ‚Íˆ¯ee	³õÊû1¡YG—±xo/v×fmŒTÈþØà™+kƒƒW¶¶}‚,è‹wžÐÿ~©êJ£«©xÍ¥Anm=g»kó‹_¿·i°Vì¡kXØ`¸g g„¬¬ó…ªP­XÃÊ©‘$RWš­”Îe™2b=ÂÚL¶i QÉúQ©ŒU 4±ËYäöúÂÝœJõ(x™=¸B2 +ø|Ð:ÔüJ@¯>¬óe¿¡‡|•!çªØ{£qÕš„lh-›«+ib¼21‘F°sþËY.¯é&yúj}õž\‡³l@’	$?eØ,Û­©‡Ö¾›n•Îgã•
 ZÁì¤UOö Þ7† O uõ	„´Äc©|OHXÛ©­^
^ˆj7/_ÿðúµ¥Ëëë—óÂÚz×æééSØ,«fœV\c–É—åÞm¢Ð¹ô/-!­é#‰³‚´Â`8i+}±`Ü¯¥Ö,ŒÔDAWókŸô±ñÓ®FkÖ¡V°6g¸ö‚ó‚YŽÖ®'ä©e±	×ûfH‚4TÛï²¶û±Ä‚°©Y"ä¬ÂZc“•º«ù°mÔvîúTÛ	iâZàµ¹8UØ‹¨Ù±^/72äAÓ2ùV©À…«E©4?¿Y T;¿©k”}­Ò/%–ï­·V1
Ë¬­K+çŒÖøÜ­}Ä—²Òdµ+’Õøš/œáäøÖ‹8ŒTf¸%‡õù@}“ Wu>=q¸Þ®Lçè³Ùžo•—Þ}wu“Ô’N¡ÙLN@iÙ™êÐÐ1Ö’È‚R¤ ˆm¼8VþøÅW¿…Ö~þ³ÿüOÜûù^5û~ÁZ×òRiþ’%BÎH˜6žæÅ´f¾à›º­ÉC„î×`˜LFÄj ÚiÄ„GHŒäUÂ7}üâÉ^drš‡5WÊ&|S*$ÁšïW‘ªí°çÏN(‚k­Íâš’å ¥xY™€mÙI ¥«æ1ÆžèZ‹>Ì0—|àà²›”þn{5·ò~hÚì'\Ù9¶ÕBÇä$si½tQåSÏLµH¡Zµºˆ®¦WéÎbIcs™7V›éËssåÁ­…-òVF.¾Á½tHVó¶b²ƒ{¾¦÷îŒÌeÀûî\ËäñÓMú3àcVÍåfÚyŒ¸ìD5…C4>ü`â¶!ûd­f]ú£¶9DÊ)º©ð…jY^¸Æ{pÔÃ_=ãèzV³Æ«6ÔŠ`¡) ‹=)M˜¦¥Ñˆrš·ì×X	P³I´µ‰Báü-à@}‚gæ°…ÍlG4_ÚÛw$âÚ?Oyô4Þr:s~º…=I“lžaýOêÙÖ³ŒŽbÛö	g‹‘®¢åBYŠ,åé…5Æ¡)¶ó‚ÜÁkLQ`3ëTµˆ²FtëÕ`!ƒ£PGÆV$31dEöÑ¾ê±§Éé2ôY#{8Œ03EkÖDgþ­ý—”²&O‘÷å‰‚¬Ñ›_ÐaU²mwÉn'¬}m´ÍƒTµšÏƒ”°ÆlG=­©fm·¬vmcc¶çpO,¥ÅØ¬ƒ‘½C'Î(Q¦¯%XÄûÒ€µ¹1e&ÆÌ!âl`ëÆ\ßû±ˆxÂäó'X÷ë´ï…uÕ¬rláÕÕÖ{áïÿùCóŸ=ß¡§þbÄÒÁÚ‘à"²§¹?°–`bÐJÖ”‚©äD›Æ–z¬Õ‰$¹é4²NLWª¨OñD“u=/XãöÓB–ëzå†t8‰€j,øÇÁ³mŸT,õµ.þIInµqt2Ës`ä
×Ô’ÔÄÜ¤ôýNTû%§OjÖ(¿ÅX$	­•æ9óaÉO×µ:‰œœ‰ÒPPÂn¶å'dMRÌÇå¹;SnâÐOàê¡ç®æõ/%ë¯ô7TUÊDÚÍNðÍ&k•‰î?,?]ÈqÑpé„êÚæz­dyGã~'«}àF>ÆbDõieþ#.Â´%P¾ÑLHñL,‹åÉ—MˆÇdU¶´¼<Ç`dpŒ#ö¥k4rRy£=Öô0tóbìs<°¬=wÇîS+ÂÒ“c\Õš7M!Ž3™²¦ðÊš² £ö"?»N¹%kÝk^W²ñƒ¿ý›ýØýøÿ=€5hÍ÷Å6‹µ:µœ«QZ‹²š6gïÿ*hkQZ,°DÊÌëÚÈÕÙ^ž k`-´%ª­r™@‡À]$ÈC2ßšiíL¦ÜÛ_.ˆÚš…æ©ef1ò‹_èë|ôÑ–oúÓ+„TµÎ|óÍ™rsn._åMx#`-I…Ú%ò“=ÓµñB£gw+[]¦¸i¯Ð^^jNLNñ‘½Õš:Ky—ü §0ðGcYC=wnåÒÚ¯{?H~Ú?@kuaí›?sí]hM”vé[›7;Cê™¦ÖjJ€Öd)Â.i	fùŒ;Hfäiù˜³ÿ¬=Ã 5©plÃ|Ê46òÚÔ”¹>J
|Òí«™}%7×åÄH”É<:Ä#)BÃó	lCJËNÁi“YüD¦Çk‡ÙãEP¦s¹IƒµOk!"ÈfIMì	Dfþz	°fyýƒGb®!6U*ÅÖ³ÏvfèM„ÖAX[Ül=T.2"rþYÂPÍ±Z9óÂ):çèþ9n[˜w“k™PÖ.¹×N¹sïŸýNÝ¹72Oëx¹‰º´ÖÆr¼Ýžq°–sø€ÈgÍèªVs¾c,_ºV³mf»¦nØ
gñ¿2¤ãº×Å‚ÄÊü9Ö-‡cÎfŸ~úig	¨á6ò´`Í3k—=†í)§i(íó”!‚¤±Z@5?
¸¦LHO0ˆk&­1ÌAaØLbÐæyÍ+lÑˆòZK¢ó“HkúÏ€ñãS2¡¡‚NØ4ÁÆ’ª6Wº¦xr@[,¨Y£ë°ú?ƒ.XÆ‚x_#§¦}Ê€’5F„˜í:°v÷;¨fÕÖÄg¡f#žÆhCí
å<±îµ=~»x.ýå¹“Â}ý©¨ö¥ikAS{;€šŸ˜²&•ðþî½õÃjx[ÚÙmN@¬Ä4~äEð{Ù R…vþ{t°æÛsš&C5fW¶Æ€îh¨YSäî°fr‡cJ{<~áXÛKTóó5)áˆM>Ì‰8J†§ä5bƒ]±Ukt#ˆnW®ÇÕ^¥bí¢éjœ<¬µçï}´ðÑÂÚü×_~m·yŠýÅê¼€Í.]ƒc¤Bl…Kd>¬É`‹)ÒEé­)5­®¡1š!±J‰Ç*Ò*ÕÑñ$lÃád/QWßjeGâ¢8ƒ³‡ì#“;z¬ða¥jX1öÚïZSãéºÊk­ûY'Èqž11=^Å`$u€á¸2:£Ñ•‹;Ð	Ž	k²=ÊM®”¸
Ö¦kY.®Ux,_äeª0”ìH¸eRr¸Øl&â
ì9S•õî*·L·›)y8cÓ,X[©ç[‹-¾†Þž_E¥–ë@ƒ²¡L¯FP¶và@±ˆf2É{ôo“°¶WÉ°FÐ]M®aÖ–ðiÈ´Ž™Æ\cƒ}#ü#
ÉˆaòMN;«‘E;HŸrY¼´fâY`µH8V3Û~hP#€µ¦±b½+Ò‡;x­ßMÖÐÕT³¶;ògkÐš5YKÀj&¬)<®Q´¬ígAîÇ~ì‡ŠÖ¾€Ö8øÿn]«‘i)/Æe:ñEüî–¤Ö¶çÞý_ý
XÛMk×ˆS™¸^w¯šå2(kùŒ¬FŠ-aUg±UàäÌE%ÜMeB¢¥¨®¹ÐjÇã…vªÜúã&¬}ø›_INL€5¬F÷ÔoÞ$QãÝ·ÉŠ¼%«íÆT³MØ-AÜD*}·™M‚®hËäAÒå-Ï½L¬ü³ã“|dlðâPÚà;Ô‘L½óÎËSïqyåås/ÞüËïÿÕ'”­ý'öý4[ÛZP«5×« VS¼"XcžÖ¤£©™£Ä3è^°¿œä‘GÎ¢&È†ŸçžxçYaB;vBm¢8_¼öx’—ˆÕÓü1X¯‚2¨>×‚5²â5JÕÎ±_‡²üXäC“ˆjÓH©­V8'·‰ÃÂ·ÜôD([ã9>É‰};%6Œ»Òš;D•ÃŽT§ø˜§5#4hMÉN
ò)ÛÇ¿T¯˜ˆÖØp˜µ=ÏðYæ®®V„Õè³‚5ú,¹øøÖ–$5Õ,þôF.j«>.Ì÷¸EÊç=Ým5šíµÕááµÍJ­2¾Ùv~¹œ Š¡SÖÖ&’£Þ7Ä÷Y¹€9®Á¸Î$’ÉˆWØP}°K„µW×XÖØ“¸…z8fhMñôÓU–¨h¶õ’±šÂd5Ì¼‚ M¿FKœæCìaµjzˆÕ®ý(’i´¦g…Ê5/¯u!Ã#›Ï”‹B›/csÈå´hP¹¦n‡Žêo_ÆOonãk³†ÎL¨^ƒÄ #JØ¬ËÚöc‡žºœô¾Ã(§5½?@›ìÛžÍšÝ>ããïLƒÜÕhÍÛA]ªÆì­ûCÖ£š8<ÛYª±„DÈ²F#õ¡ölôœFì‚ÕvúAºš5»•5ßfM› ¨©j¡h-°"­úR qB2ƒ!Ñ«R!Y£þyXó±îÜ =¯1Ai2î—²¶lÐ&¥ÍÒóÜì•µÝÛñ1+l§?¶‹ïAµÝU®>RÒ× 4ÝÞÁx¤µ¾ccJaÕú(Ÿ¼‚=±f½ªæ¼…¨WcIü”ÐÍšWîÍÞúˆ¸õùÚÕµyNù"V²º::X‹¦B1öþßB°–ïªkàv#1ªíX%Ù*
Öa‚µ
»SAãôçÛ™#Q­j®s0…—òòÚÎŠ`5:Kå­†M¥qI<Õ«Žu/«·8U©Ë.ÕR§D9›KƒC‚HU¢U" =íùÿM$}CÉÌ–ž?ÎÓZ¥àVLèxKVV:äS^ ã¤Ý~š/ðS–Ëãá
‚Ñ?M°[‰J<ŽßãJ‡(á¬Ü(c|2ú,Û`Z¥VE¼«?I¡,@‘9úb×ä|™’ÖF+·4-ýFj{+k×yˆÕÌ»£G¸P®˜!i³Ùh”—TÆˆw4¾"ÃƒýGF¨ÌyLgLuËÄe9ÆÂß`f@þ£Å™“Ö®DJÖ€´3G¥ª=gq-°X°Ucr»²±zÛwFÆÞî†Ö~êíE¢°Æd)‘,È ¬ý·}XÛýØ¿ùÛ8X[«}éLF®Z¸ú>æZ¹®Ç3ŸÙ¯pkwÒZ‡ÖÞ|óß×<­y\¼†&¢yX£sMe­h›K›;oâY$k¢˜.â¡_-ªýZ{i.^©RÐ†-Tyéj¼¼ÙzñúÝ×$­}h°†äV€5V£pm©R™{k¹ÐWgZe\‡WaµÍY–Ê÷h“i*×f*››ÿø—–S‡'è•N,7
 âh¥µ(e$k™rhœš<Kêÿèû—ÿøòËOÿýå/ÿ+¬v_?«´µ×·^ý¸Q¾õgÁ=ÖœÇÈš`í¡y$sÀÚ1Êâ¬ùöÃdp˜fÃ3óyÆò#‘Ô´¥79ýëIhlî‰¦±™¨¦``V"´Qc%ÅÍœƒ5!BÙÀä“g949d¬v‚|Hk†X84yHÊÚèÐ$	†Õ¨@GMÓg¯Ã=É^þÄ‘p×¼K^=>ÔuCÏ`r5kjrë{¬É2Àš;''(ÊP/Î‡4(íySÑhL a¬æt5f.ßgnm)ÙQÎ2¾dÜ«kÎrË
îœºwmXÆÎ$Q%ø8…Au«¼Q¥6¾¹I¥¼`b#é±d´ÆÀ¥Ez[H£0EÉ–Ë6bÐÍmäÁN8PS•ÈŠg5EÇ™ûWÍZ’i(x—ðé°V8÷ôè9KdÁD0t°&cöš[Gå´=•4h H˜&ÿGB ú`Cj<|^×®ExMÄæ™­mŸ¿ç¡ÍÙúûZ¶½jØB°¿Åß¼L†¦ö·¯.g­|·ïšBCs:dÄÐ­ŽþÝS·á’Û¡]´¸çFBÚÃ¢*åDÎ÷°H-kQaÍñœ¯yZû4BfÞû1b©ÝÙo›=´Ä>Ý·Ñ¬¼ÝUÖ‚¸@m—ÅpM±~U¥g©‘ YÍpR‰<÷Ð î‡h·+Þóæ`2ÓB¶
­9eû"¼v5BiŸFå51äÞß³WÍÚ‹=pM§²ÜÌûž.ŠLd3‹Hb^»xåâÚŸ¼rçSn'>¡tÒô¿Þ›A:™äÕWÉ‘Äƒˆø²y¹©³ÇCFlÝkz“ŒŒÿÊÐx¤©5‹%zEk©<#iÚäéP$U¨g ÁpIc´zªÛµMW%*u"]Gr³8 Ù¿:k°Iœ}“èvî¶’ì;8Pº6a|V’­íh¯Åqòrïê3ðiÛ+CÏÿr%;^í³4n9)kÏ®˜áVQnÔ¤Íà²L•€1ÞÐè$f0V³Iºãx•æfy¬Lß€]ÜHRé`³ÅV½—7ªÇ­Öæq×í0š)(Ù1ßHqUìñFÃ“üÐl¥ú)~ëâ5ÝM*kÆj®fí³ç>{ŽšµLFÆüHkÐš4¶&ä&Á•â4aCfƒ#Âxðýö–¹ŒâÈØC9KOk'ýþ&kwè¶~ç€vò9Ÿ=-,¼Kwíµ4;ê†Q‹‘Á9”5“ÖvgAš»5k½–éìEÌ	ÒÛöáÍ ÷³ ÷c?öãA¤ñÍ±}tYmç0;ã1{.Shla+vúìþý»¿Ù©­9›‘€kÙx7žì"Q.S)\,#°Ñ?rµ],7DJå<y‘‰2éÜ±l,­¶›ñ´rY¸+X-¬roo¶×_ûùk¿öÚ‡ÿè'8çËaÄhíb÷Jpò-`m¸<øÍ7s\ñ
8?6)¢N/7f(_kêâV&„âZkm.u°gy®‘Zž[jføÏ44ÄåÍÒñð?²+£ ÛË£Û/]þ=~”­}òÉk¯Q¶¶@¤NDk¯¬½b¬ö
¬&y­]œF;öÌY2 ÏÊy¤Rí´µ_c6£v÷Ç@A›<]a\w–-^­Ò7‚ðœ
›öa )±Ì*V±|Ò*äD™SlêÅSÒÛÎBœÇÔTMþ`Sj!7-—F‚µÉ®ýæ×p¢çpnœÍ,;g°˜/HÑVDY{ a„ÛˆePÓœxÖ³Hv$ðéçp¼œ¤ns~‘€Î<œ‰Ïlk±IRƒ'á4Z¡¿°…½Èj÷Ó»°ÆÈ¤µ'Tz0¢{r.ˆ%è}”oVê¹ÉÄ¤±D¹ZX«UJªY#í¶j¥zÅˆJÑ±ViÂ4ß›0¹M»fíï¡Îš©	„õj9hÿÁhr*ËØûW3©qkÌÞÃZ[¬¦)@š=t`N¢ùðZZÀ4…'jLžÓ˜"± ®)É„¶k.<±1Í—A	Ù¼Äfelß_ÄvéOìý‡ÿù§ÖÔSx‡ –Q®IœŸÊkìƒÏ”õè`ÝÖH„dÁÃ¬G°ò‡Šb$"¡­m³	T¨5¶ÓÀœ=dÖ¢¸!·‚´ÆÄÃ“ó¡>Í-‰n#n7?8èFÚçˆê¶YAb³*Õ7È€kÎÒæ½‹Ö\ÍÚìÆ¶ég(%´v|zPÊ¡3U|8‹l@mL«X¬‡,HÍ
§¬¤i	©Áñ²¶—¶ëÅ`„ç7í¶È(œä;Çã<­á/‘D¾Cqú3Üné¿ðøÅGOJ ¹ðÄÖÉX?ÂºÁšT5Ö˜Ý½Žýå—?†Õ¸ÿ×ž_´x(ÝŸN¸K˜Ë‰†Ûû>L³<û‹(aÑ°òwcŒQZ§†kQ]¹dD¦ÙBfs÷«_I‘©5=­îÏ˜€K…¼ûyRÊYú'ÓP*šÌyW<‘äêÜ5ªr~ž€:ÕJõ^ÉÜN0=¼-R¾õyì´ÆW(¤¸M™Ü/ãY©êÕê,® –åõ»&e§Æ®ÕJVïT O“ìÞ¼T/VD–{0°NIçJì0©^È§GÕÅDï7Ãý(ÝÎâûìæ¿«v®®†µŠ¼w“¢]P2Ã.Ñ»…5QÍâº`­qõƒõ|QrZ‘­I¬kcâ5|—†ûÇæŒÖÆ¨ªTê—Y÷¬G,¬äþÆÉ“ªX³”ve'­ÝqvƒÖÌ2ä@:Tcéñ,Ë`Ýo0']ÍÇðÛAYYAXsÊš"ACl—iˆý¬¶ßem?öc?‚y¿XÍ®CHç2"X»6Âl°Rú½²f×¿úäþÝG^sÚZT\¼öÂÉ3Gú­d;¬%kd´Ö–šÅÆð‘ÞBi†®5å|s³¥\.àôdK¶¸Ür¡(qÒ^m4Ëëwþ	°f}±ŸÛ²î¨f©qeí›“¬.ŽåËÉt¹—õô¥«š©IVSíöjb©PêÌs­),'Ò™¹¹åÄòÜ2½pjÜUjõœyBâˆ~ YýmoO^þê·Ÿ|öÕý_òñÇ?ÿƒ*ç 5xÍ,FVWEkÀÚ+t[ƒ×ÚÓ€’lEDgÄy¨t“¼f%;®ëõ#'yDé‘lhiþ§%Àiµi­}†kì°hGÑÎŽk²™4ƒ³±%Ð‡¨&¡µŽŸ';=44y0'XSª'ˆ6‰ÆAkÓ‡CjDUÍG·sZ÷¾¹†Ü´=
¶ºÛÖ0pšÏ$bñX,çÆ±n™&ÔR¶0/m±JÞ£bE‹ynBµˆ¬6xáÂEë´öÂ-þ¶äé0Z#¬9ækò™ËÈ2ÞHô&†3IUÊ¤6Òéþ~%öðï^·bKL*æ2R«zù‹*¶Qß
B3sÊš™ÍYØN1¡14ÜöÒSì¬?›P0HkPá‘XËò!1„t°öÒû,‰¯Él
b+[G@)`š
Ó 9HóÕBˆÐ‚˜æšvÏØ˜Œ×²ÝÙB^dÛ„bó¸vI¼©y‘Í“š‚ìl×Ž>Åß;ÊšiÍ§á/šÀc	”É±_Õjr„”žÌ6£míf'}±·oo8w§¡hxŽhÇzmŒ‚Áˆ‘Z”Ö¼¶Öœª¦…SÖ°æ¢›6A}ë6¬ÆTîýQØnGjÖ4#¬ÙÂe?F¤µ÷`ÑnKn!iH‚týÀqñ};åAÞ–_åöÀcîÖ¼²I‚|…‡Ï‚\efl=±™Yê©öˆŒÄvºBnô\›íés]±]ªí	ÑÕd\OÌ9¹Hé¿éX<ÎÆ–ª×2XR%€5ÈíÌé\sî-¼±õÄs®#¾SÕü)À}ôæÈÂë·Àî{Ë-Î‹Õ4Ïô§ç6™‹8Y-a5öîŽðœÒŒÑÛ[¨¤ÜŸG¾óbQOÃKiQÂhÕwRÁõQÇ$
Kú¤$¸ƒÞWÑ
}{ÐZüv&kj‚NÕ;xôOÈ$t”3—º¬qÚ²[IÙš%n>ÿ|©„Î¥Š2ü}[ìÊ°Û‘8ÙâsS‹š±Z¢8S"ZÐomŠ#u
Di+6`Xu"	À%S4=U¦@½ÅãKåJ¶[ÆÛJæ:úºiŸV¡©(¸–v°¦¤ÈZ•_VŠ<äÆY“Xo‘]_¿þA¾xY‹2‰8õ­Q³nô—èfD?<È_.œqÖ\è³Â|d®¦±|TS@µP²ö¸sí·î*Ûµ ­1ÒÜÏ20¹í€jL!’/¬½‹$¬æa-R±FÜ]ßÂÚåÇ–¬Æä{¬	×¾øË¾qÿ~ìÇ~tÍû	ÙA^Ç]D¬ÆD&¤ÊÖŽ³™»¦4ÈhíM-ÀÚgw¿ú§úÕý»QqÍ«k
n*.Ž$0ÞÕ½Ì<ŒÇ˜Ü4½u¼Ì¤ê- I™k ýUxjƒÛ‹›ØúëÓî|«¹tõÚõ»Ÿ(ÒÑÚ‚Lœ­+¶O±°<È·h—H/É}ò@Oº^« «ÍÏóÎf{óÒjClÔ­cW\n®®.SjÝhLpÕ:˜lëbXË‘8hiƒÔ«ML"ªœ8–}éæÍ/ÿþþWùì×¸Œù´¦­Î½ÿÝÆª”5™Œ8Z»T•9#Õ£€H³ØÇh²æáŒ¼óÎ1Ã0oˆo2òW·µÓ8œÕGY^'j³ð°†t1ñJ@Íz«¹¤fŒxÔ„åÄuØ¤œÀ–=8)Ÿ+YCêÚ²ÀÛ°Z.'`Ëe'sµÃ}>ô¢Ç£™‡5¢ÛûAo5ãµn5=‡xA‚Ž7ÃFk7|¸ûñÐï7VëM—„dØ?ÎÓU9”f™Ôœ³ˆ¯Vkd`5r\>zýÞ­“­½¡ÏkoÉÒ•­¼a°æim6!S¹9¹:çÄ»ßœò½=ÔhP=B”ÔÍu|\‰$pÊò‡”R`Í±˜¡×
Ž(VÜx
"«gCªg³nµJ;5oÔ¿}v´v`b´D{ì—^Rú£ƒµËÿ‡½óû‰ë<÷ý_p.ö% <,nŒ€ 4¶:ÓMFˆÈÏ/!1ÖòtÈÇÚÒ0±w‚iL’&1N ªêžfÇGÇv•:!BÔDŠmÚ‹fW‘m9©Ž/|ZmiËÚì-K½ê¹=Òù|Ÿw^¿¬7ùxfýx×ša0^k}Ö÷y¾Y¯ž	<Æ(0šæ¡(Í"Èh
ˆDÛi¸¨ú‡›ºUˆo8¢ðÐÇ6¦ m^e‹	‘ÒÖÚåkb6C5ÖLðÏ<ÃŸ*	¿Í0
šÎÛ2bc¬‘üé´¶mþ§6¥¶cD`ÿ|ßlMè¦§½¿ˆSÖpîßjš|$“…P‡Ãµ¶²æ+Æ‚—‰×Ð.…­˜Á¾á”zŸõÒl¾ k1ï~ïÞ¿+b5kõN!¬¹æÛ·PÏö ø…È~ˆ»-·ºû7e;²©–Ü››úR±™”3‚5Ü ÿ+µ=¤«a/¢TH2}CYûðªÏyl/×=·±‘Øœy¢ƒ7ßÜ	kLáË#XãNŽÝÐqí±Ek=,ñqU¿ãü±u¥ní¨ kp{iÁ<€)X3U-8)?ú µ¯î5[.
Õ”µÊ~ˆê§Y]Á±Ö2}3d…eFñ™S€µT‚"êZ¥K¨Ö*#)1gfÙ¦âÈÒÅ&Ý±9¸¤´,‚™ÁZÛ}qkæ‘ÛhæCÛ›ufÀ5h­¶f)E*“‰ÖFÛÍòãuÞ\¤&Å+?*á_Ð¦œìµê|9*×¨ÈW9jñ”’´E”«aã…pv3«©Ç=ô<¸¢2"Ÿ¢ÄðgKZ’Ê“Ër£“ã|&ÏàÚOAÛÔl%çÓtÐÌ×ªç«ÜìÂ_„‡¸’¨×kŽÖÆÒ‰t”äì² C—5××¯ß¹bgôn¿ßZl½ÿ~«VÉ£¬--Éªµ4%Ç‘¤5X[A\#ô»oÍòÂIF1ÌÊÈÉÁ£kÞ]D‹xØNo.bœf¾ý
!XÜS-T¨1±KaÛæ¤î‚j‚5hí[íE¾~o#açÏ”Ï‚t´wùÛžqÿ^ìÅ^¸<H©j_ÀÚ†`‡¯[[ŸqÒZ€5Å@è’”µÁ{7|òà!°FÝZ\\¸†¾¦Å½‘Í²Go•"ý]#ÅðlS­Yj˜”ð–èb…Y$©õåæü"Ud²$>·öÊÅõ\nãã÷kôÅþÙKgit*½.X#ÿüÍ_½iUkNÒO{xyej*Ó‘–†¢¦kœ~âÙ¿º*KÿÖÊêb¾±¼D7¶Å••F·4µêøt¾:‡ÍÊšìEœuŽñQºJ÷mùÇÛŸÝ¾›ÞØÐ?jÛòGÎ¾ß,FLV{‹Å/öÏ©ŒÌ¹‡PŸ†Ðfðì°ó¡s6['Ù°`‡´¬™ä1öÐd›B5Eû6:B¶çÌ¨¦…2õŠIõ	0mMßv/ÒÛ4*!©‘(Lg¾ýXõ"*Ýs´8=-XÃ’À²Xß×_Oûì&®"e\iyw‘M»ìr!½•ˆ_w1ç’:wQI *™5$NoôW£æƒómR×.˜óKB›o4šÕsç(±pzZ°ñ&V­vBÞ1\R/5×ï
ÑùgÿÕéâ5EÈ©±¤#)z-qªç²'cßì`Ž’6Òù"wçTBœëšG-U"ÖaJýG¬¦§G¬­i!ŽS–äù6¤¹š54¶ñ¼¾iíå—GóCz–Ù#Iô°v¤°¯)$­«i¬yV3=ÍÏ6ùYÓ|À»àìÇ±04óÛÐ-ÿa,0)v§GnÙ`8¯YøtH›{¼ëGÚû=­N<³–jd@/ kìfä&l#äÝšäÛ?û¼DÈàX
BÃ^mn«eüêhí›!NcjÿFA5ÁÚæ!Ã@…Î˜NÒvæ¿èIû~‚¾n`MF®ÀÚN\SÉÚcHÍ?ä¬¹Ïxgl[ÐhŽ^öæÂÂîÍK·øÐM^²ÉD·5`N Ö»©ÁE¯¬µYÌüDÀ4Zb[$Cgæ¯‡{©,IŸItÌ `
Ö|tüã­ˆÅeABir”_ÊmL§',pógc,1xáè¥HœŠFè†Oèœ¢†®Ã¦
–uå­R6ûëüj¹µ¸¼¾
§ÍÏÍ[ÙË(bDò½Àl /Š kÙf<J¥\5€¬§Mj	Ø-‘%!Q/‹
IÖæ9Ò€Ö¢<32[†-V5%rˆKYŽzU­Ëdžð ‹æ¢~kX§£ƒnk‘J²\¶Ã`£3
ï+EuuZÃ‰ÔGšbCo‘RTÊ@™Ÿ§q™‹2rî‚éæ¦R™Ù¦¬—a®:ç;L¢šÞgHÖ•ha©d‹_]µLZ£+3LWG×"Øpžw/GÜËœceE¿PbÖŸ6ZKkëÝÝ6Lqße#uíDªÔ3 VS‹ k¢µ{À5kW6À5°l¥µØ$mr,Hk 6 &©­P¶6f°–%afyŒ±	ó€ÌÙnÁšbàÄ ´ÆGX„šµ¸°¦~ØÞràÎK3×ïxXô5kÉ¼¶Í6ØF†? PÖ1aíÔ#aíó¯/k^X‹£šÂÚ^ÉÚ^ìÅ^´¥5îß ­i±!eí+áš‡5‚#ÞLpîÙÛ!’km<@WØH…âZÀ5›G¶£îk’± 'ÿLŠ-}Êl“»vƒÃ™,^Sm•Ÿã©*²ZZ«b32÷þÆR*¹ñÛ¿6XsêjÖˆ°T[lç1’CÄ«¬,/Fõ†lòÐ„Öh-VêÕ¹Å›ðYkjuq±ØX^eCV‘õ"Yùù¾ÂèlÍ€01Mü_³d.A<ÀšŽ£g^¬½g†HkÎ¿_Uk ´f…kÖlxwí ÀéY‡aížý€C6S6‰mÕcåªÆë|$|§äIž1}iÍÁ#Â‰k^Q3}¯ñ%ì?f´väˆXŽ§Xd?1=Îž—²Ä8r¤Ø/aM­ÖXNJY£ËZÆ_iv®"û 5&sÛÞdàn–· Òâ2z=·BQÑRDŽZy_·’K•¹&Ž×QÓGqYÔ¤ÇÞ#
e.1·YÍdVà]¨Æ¹]í«©|@t¹ˆÔ¼»ˆBNqœ_Z¿§\È‘®®¥%p½ÜX^’Ò–#õ2jfëyê(*‹‹Ø³©æƒÐÂFJ€b!@c¼Xy[~
Ò´›ÚcOs5diòïµaLSeo­0úÚù¢LÖœÚfËªÂÖÝýu™A2[«5XMaåj>âzZ<ù1 ZÀ´vˆÎ¾Wœ
Sà5{|w,Äõ6l¶@lÞtT#‚CdÀ6Önº9:ÉßúäIÉg.Õñ€¯Èdf›0Œó´v€Wôn¸$R2Z³µ¶ÄR¦¬YÕü†c?ákÖ¾f¨æÝ ƒ´Æ/¬1™²v},D®ò’VH/4¥Íöù¡¥^
9Q'”rù‰1R“¨ö•Íqë~qb»èÞ0„6ÜµÇ
RMÃ™Éµ´~ÝjÜ´ù”ÙŽ¬ÍhrœékÖ<K{Z×ÐÖLYû9»o0bqhWáßP‚ƒ«ï`5hÍ9ÖãÉÎÊÕ©Ai°wvh¯†s?^J„T?­áÄÀÑ£'8ïL°÷4W½úß/3HŠU…j„†¯s< îÞÖ>X¹º¾8¯0`ÛïŠ_µ¨HE«ÅéŒ}»d5À¬'‘©d,o?Ã¶‚“

Z¢1ÇX«dU\¦œEåCbÒ€uòUT5uÊ®D5À'ÒHÖ*ªTÓë­a£d'´Çu=1Ù%Ó	–ÕÓébAyEÀ/ÝÙ(`•×^±`½8ŽßcQ7…tˆ¢ÕZw¡“QóÝ< qÔ², œ+¸,ÃºU[¹®ŽlK­r¢9Ä´<E'ÚoWÍRé—ÉÏŸ[«¥;7õo†ÁJBS9œIÔ“$]ä YøHu¬Û?n&·¯b·®N45–tØ>q #ö5k(k!ÒUíò†ä5Ì q‘f™íÂê1)gHÒàIx„ÅÆ¨Z[]ÒŸŒ–š-å––‡¹‘5$W8ùCnÆjÐ¸ÝWVÃ '­}«o?á3 ¯ÜY¿óó•;|éÎKiß4ÑŠ)|â2¤­kk»ìE”yã*j¥‡5XíÐgOð°ðî"{Æý{±{ò ÅiLV³æ›­‰ÖÔZs6¸!!ÀýNa«{`Úƒ‡H†ŒU®kÆkØî¾ýæà#+IRpäT˜@uI–›å,í‹“ì¨¨WÌZ‘ü1µ¦ˆÂÈ­¯L]¼š»¾{¿%MpqúÑîýÖUmÖîd=yÑéáÙF´úéjTlâ3)7>ü%k•äòÒìML!W§Z¤B.–‹ÍUÈm.³97>ÍöusTcìå.Rý„V$	n_Â¹ÿö™c¯ÜÖ:*•+¥`íGôZ¬Â47GÅGÇ€*ô4°MàÆê‡h¯vÒ•¯®~53øÔ¤¯)”ÒˆÉ$”v€‰•â€¹ý³šÎ>åˆŒ!y”5>e~{º5•Ýñ3ti
HmœÐXb ³™d;¦AµéÆ#@û•¹ã³!íR¢ƒ¿Úð>o®Hž¤¯«)4”Ž
¤Qx<78ÖEaF4O>Ò<•i.mÊíÄÇyr÷³ðž"^UƒÔ|±šeÏàõ¸µ¥ª5.Öl
¬öz€µS§Î®çü{vk€“;´ÖšZÊ­,'K­2ýj™óÕ(ÍFMÞú.×œ7¤,ÔªŽÇ.vŒÕDiðU`=ª¦¹Þ´Và_gX(äG%»)À<kj¹],jùñ¶ñÉª|F­…vi·æ ç´$ö÷P°bòÝÄ*Öv›†ö¼[¶ãÛxn'³mØ‚x&ðM³WÿÓsK†jzæfU·-°9ŒÎ,kñ‡™QØ<«IeÓâÒ-½äÒ!ÊÓ«m·aÍh‰¡Ã5KƒÄ2Ä†Öâ=±cHeM°öYßKkFL\‹‡±ÂSÜ¦t¾¾¬ìÎÃÚNVÓâ;”5ÄÅÐ@#M>nî»ÄòÀa¡ÑªÁmnR·&-Ð+kO˜¿ˆÁFÜÃ”5ÿ`¿f›qeíPlpÝol&¾SXN‚5"ÙÃ Eo$5¬[¥ª±6Q­¿XÝƒƒG¯Ùí½‰‘|…Ê^×øsoKY3m<h£µ³÷¾úhki?Ñ†5ÂW¯Í%ÇìÄãZq=×ä "`“÷cIíûy0e¹ßg5Kƒ,¡³É³b‹Ö¥2 jŠŒÌ!³äCº<È”ò%áº.‰*Án©}Ìdí: ¶³Ì%MÔK­‘®sx’ÊÖ(ê£Cu"^r¸•hÍqKîýyÝzR«š¦ÁÔÜËÿë_ÖØ?¤#Óæû¥Ùd¦îQsÍÙ$œó<[¨e[µš ‹u(fõþŽTn6’W¥Ëj‘["Eº{GFjÊr)gøöê ^]]Ð¼jš­ÔÄ§c	·á‡é2 A5­}ÄZb—g®^þ-±±.+þ¥©)uHè1û~2nÆ¬ˆÐŽçKKÎÈ¿'‡”F‡µk»ÆÅ!Xófü“rÞ81pIm7«)Õø|W®F6¦³:Y°ëZ ù‡¿šÙåÚŸûÀ”5&b—°æÝEXkLÂµæ"NWÛË‚Ü‹½Ø‹`Þ§ýA&#,qðGWcZ§fé´6( 
7—Ð4Þ)òÆ'nlÜ ¬yZ‹áš¿¦»ûæÛo¿9@xo®uÎ­òT"ÙZm‘S‚ì2F)[¦É)cÞ ­RŽ”wOô«­ÖRjŠïïÊ¿ýX°†ƒÔ©S/©E²zm]xóõ¿zZ3…íx¹¹zœÓŒûe×•L¶êiú"¯¬4«5|†KK««å¨¹(ÿâñèfs¼­qŸrRºÓø\ÔMž £5àFÞ¼zf{û³ûï9úÌíß;Xs´&GHÓÖÖ\³57çÏÃg²”<‰:&ø´©­³è2sÝÔ0 ÑÑLS3•¹±>ižŽÖÚ!²Ó†PÍ¹¡ ­õºôHŒØ^Û|„mcµ!Éiü8ã£‚ÜF,ÒÁZAL×ì*ú÷eRm…-™t÷1ìÔå6%·éÍR[Ê.;ÚRØyaÇ¨J¥@•sçÊS7u‹»Ô5¶4OÁfÄV.›ªæEµæ.TÓvkbBÝ>r7×	Áš?ýX»7||D°6Lž&Ð¥¤HBVŸÅF¦$‡2î|W"Ö¢'fášÒ‰C –°LŠ£C5bkHÒÙò°§`°¦½b;¥M*’t"ÁÚ¸•³±%Xc¨OÑ>úe«ÍÚxõízÑeA²ø7YL[‹±šG5y‰ìµŒöÝg6Gcáã³Ýüç¾`Kˆm‡Âã5BXœ­š¶f&‘ÿç¿Ù¡½‹ã”têæèÍ,dáo;ÌÅßÁÚö6Ú›dµÃ·\éV°æ{Ÿ™¼æ<FÔ¹4H›•©Êšæ¸°´5Ã5ÖkÛf'Âb»÷ð`ˆãšñ[Lqct©wÛZ¬™O#°Ë‚TOl)kqƒäyò áµ8¬‰Hƒ¾¦Â4˜L°¶ÍûÍ™Í[O kJ»„ÖpáUê÷P…¦Ø“Ï~îm^[q–zjg¤”µÇÄ!›‰ÍÍ+ßÚã»t5–í‘X%—"eÚ(mX#€ZŽ™ŽØl§Æät|Pés]]ƒONôœ~V–©Líé—Þ¥ù0ˆ[XØZùð£…åfsqµéÅ5‹fS‹”¬CÚEM;ƒ}caC`•’²–Úi™€ÛsèñèQï5’b „¿ò”©(6c?,%i)›îô¦’6±]——Óô`¤q’'„œ^Zcˆ}?«£FgXCO3¯Wµ2éäèYª®ªÖkkÕzCi‰ª#[“ v^¶"êÊAk|¼œ›UwšFì‹Ê³ø‹´0Å%…2jlÊX+utÔIÿoLáB©o¬Â­ÑfSð2©),ÿ’Ì"ÞÛ*xYÔ³l‚ŒŠQ-ÜŸ¡2ù<HÖ]=©lvÀik®l-ži|Ä¹üz"q3H¨í*´–›m‘åˆm0‘lUJ¹œý+$—´XÆDRÞB5”5_Po,.ÿ~FO?}mwÓÕ˜vÃaYóší‘ÓÉì°=¤¹ÇNEÍùBúæØ¶+›„5GkÖâÂšÁÚÅC(k)„5§«É	’)–¹gÜ¿{±AZ»íÜû]ä—meÍêÇM]igl³6V‹‰kn<¸y}ãáo>A\Ûk®è¶¶˜5ÔNá0R&ZYüž°†lÔ ªæ\¤[ze5ñœC}ib8ly‹³sëÿº±á”µ®Äs–’ÎáÿMkn91µòéH™ûƒæÙ¿X¢ªº‘Z]]™â˜-e–~¾Ø4oH”5îHË75ŒDà˜|³YìíÆÞžH¹@
Õk¯\zõËÿãßÞ'Uá÷êµFüù½·~ŒÂg´æXíƒ5@mqÑÕ®Í©fÍ5Ocat†™?ªúÙ1zbËk¤íã¯.lÏþàYilöjÍ’Ú -õ bŒû…dÏ;l#äØO˜7;9øEx°Œ÷yí5pMôA·5ŠÔh$w¢«"Lj°æE50Ú>†£ã2„¤×Zgª“«0
ØJ©G~,77-Ÿ©C©2zr	ÒÜpŠ‹¯${ÖptKtá&’žÊàFìµróÜ\‹Ë…ÌÔ"˜¶ß`e­Ù$%2ˆj˜õ·¼­ˆGµ§ïŒÜ;û-ÖÞ¥%*¯¿¬y“¯íû´œÏž^éÔÙ­«\•f9ós%¦
“Åf„¡YÃºÿÌ5Ë*Ñw¶ýŠb¡(ÙXS8»G-µrR[6³È¦/]³!¦#ô{Õ¿B üZÕ½Q^Î>Ä†ä|ÍºbÓjí„µ¶}¿‘ZÀµïEj»1íŸòÏñÐö†´çµÝ”f²Üw¡6ãµÇã˜v†Ùt6Û¡DÉÅñÃ`ØóòÐœeB3øÍëj½}òÑ_½³y9m[°F	Û¥GðÒ!¥©!®=ÑnˆÍø[•5!‚¿ˆ#5oßD¢Å¶}Úö>Ø‰x»aÍSÔ¥[‡f`;bs»OÕdàÓNe­Ý©Îý‚XÄT5¯­µ§‹ßDC7TÈ·Ä¯×•Þ}‡úeÙ'Vãã7ûzA)¾å[3;šbkrÑ6©Q´&NSB¤M<û›b¯#¥9UMËÎŽN#ß§fM¨¦ÙTc¦"Hï¤Lwuæ&Žç†OŸVÕÚ0ví,G&/\D¶:±µuôôÖ]uX{[f.aÍ,†PÙ‰îL|¸õÑÂñJóÃ¯V9¸\›š’¼–r`FäRº‡¡	Ét>rLF£®„`Mm°©iHÁ+ÔU&«žsJ£íÝÌ€a,j”¥ÉÊŸ5Æ©„éJk¬Yv„ÈFIZ£ŠèfŒ×éJÔŽÖbM²Û,§ú4
ÔhÔVkÐZ£Nîc5R’`º ÛKu[ãõ²²9…åå=q0²$ÈHmvtª‘WX*!üÕ
EüÕ›oªÜ‘-«µ)5aÍri³SÙîr¥Ð‘Ê¤ÓTëµø9³µ,~˜øéPs°6jì)¥ÈµàïÙàÊ÷˜í‘à<ß™0Z³¸ð-°F\æŠãÞúehMÚÚÒ¬‘[~,
k|ãß “™e0–œ½ 
¬‰ÖLLÒØe—¶}âÂÓOŽŒ¨!ö·³š C\ÔÄlf4âa‰ÙÖ¡	¶×ÔDp6q-¬Y´KÖ¼°¶„µ‡_ßøåÆà0@AXó),ö¼ ÷b/öb§¤­yWÈ{zˆÕØH‡¤—‰ÏÖ‚V€µ™û_üæ>F#Ä7q-ðÚÖÑ»‚5Ù!ÏæÈ9‡Ô(Jª5Ye¦€6î–RàQ‹ðÎGhmÈk4•Ü*­W*9áÀÅSÖn\q~Ðš®Ö_'òWŠOkŒ9R®”!¿
ÈxláhÈÅÅÕrº£Ð\å„€°Ææ»‹‹ùêÍq`°Y¥z«º–Ÿ¤Š+ŸŸ¬Yo2U}YŒŸyõÅW_­ŸÁòw
÷#þì
zU­y“o		±™¶6$ð‚Í,k·¡·“&£=oZëclSÍF*¤úb¼xµ}»aÏ³”ú‡Ã[½ø>c2+@3f¡Ú¤ÁštÃóCãÓ²€ô°F™Ú4 Æ½a«\Ë:,û1Ó©e*Ã¹œa‡nšÒ
É®-2òs‘ƒ2½l“)kfDÍ3cÉ¥B–-Ÿ;¿†¥ÈT™sÞ§@²ÒÀ¶ö·Eµ–WÕ<©Š­¯ãË½ðœR ]´àôƒ5bAhÉõ;øw+q)ÉŸÙ3¹TºÆXmq9g>ÛÀ9b.ùq4ï˜Í³ÁÂ¹‹¸&jzÛ3³É¶‹ßˆM[ka7F Ï›c¤½ÈLÆ=«U]Jd52XqteMñŠ0™é¡ÚnRóæã·´ÓÎØIYáµÇƒš½Ã{á± [à5€-žéfkrÊš'5Ûu¦OýJvFòáoþ¤×Õú¬”vÔj‘\¸M®)‰²Ùð½©¡¼ð%T“ÈŒ—Ö®o˜®ÆcWä]›ƒu¿0M§¬]VÑ—…ãA}šv„úh?°LÌG ý½‡_€4™¶MWó¼fiWÖdÜï•µ¬˜Í3&àYlwCjû\¿5åæ­}")9£(	2(k„/L3ŠöÊK¼ûƒ²æ‰Í+k‡«¯ñè¤XíûÑZ8	‡\
°	Vë–Ê6<,DÖF†GŽ£#®qÕ=¨óÍàÖÖ“#wß~‡~þçƒj„nÉ>baë,Ié§¾jUZ•Å¦hÍÃZ«unbI92Keg)x29Í‡NsÂ2¹X$Ø[!‹:[ÆíCíÕ,2é(ª ¯¥ÒÊøÞ]ªPK04XSþ ‰M3zlÔ3Ö0Y‘•´R8¡ÉjŸs×%²@Ÿm3B*
’ÖÄmîëûêôG+*,£›½4Ê†©ê£UH-ŠX‡^b*c-RI—ç¸%ÔlâöXÆðL£J©L«¹Xê„÷êlÉl´^ªDs7Évaª‘7Ž†‡v'Qq‹µhÖ¾ùtC§~¢ÜHøö°±£#m?Ø ¨Í‚š5…o´¶³#6²ÆEÈúÕ‹WT¶6ÕšM"F–rÖ\6<ÇzÈ¹¡‚¹¤ÌÈRÉ¢t[“˜&qM®;Án·(8ÊÚÈ0æ.rÂº«¹ï`CK`m†|"€mÀÇŒ¯TsâZ0ù8Í¬ÆÔVÖvûö¿#X»xã!°fVOyeí‰X?llû¿ü§½,È½Ø‹½ðyÿccã¶C5Ek^Y#ÖkÃ^BsZ„‡5­õ\~ðÅƒõõ‡kñÒ5pÍx{Øwh”sêM‘^R‰™ŠôrÜ›Í(‹¯°Ò7hðBe	kJ£oDHaÕ5îFçÏÝ”m0îÙ¥uk.ògÝ}ÎÑÚ›XŒNY³<È‰¿~úÁê\¥´Úª`/Õ*q^ª4o.6ú÷5iˆöÁJyquy›‘ñÉH‘+8@¹A‰ÎÆ9¯«‰n(sÀ#ïŒ9¸‚Öþø·?þîãß=løÿY°f´ö©—Ö€5ÂÁZueËðL>!	U¦ù&×˜œFnÓVÖBÛÛùâì©>ÎZD6þ”¬i[­Õ²ÇR!)JÓ>y÷ó#9fá1;!OêÒ»'_£X­8]è¦8ÍÙ‹ðH¾£î®H¬‰Ò®TÍÍÕ«•ìö«‚Ê–IÊ“¿+g>"xŒX?êž.ÎßfÉ3ƒÉ2—KRÏ4)hål—`m~µeÂ¡|H/ªyÈÿlÃ†·€µ-yx+	’ˆUŒû¢µëÜÝÒ_/²^‰ü¥©ŠšÔŠÍ[eVQ•I15r	‘2Ù‡`‡ŒÓ\'lK}Ô“çóÙ†ã1kX‰èÑŽózM»c6<Æ—;ä½u¥ãÂ`Mn7 Ù–pó±ÑMWû7¼CÃ5¯±ÙƒªÚ7H-Îiïøà?^,n-Ån^‹KjÚ'5¾ÐW¼•{¼§íð–Ø¯}¥Ø…k<lñ®¨Íá»Ï8ðÂ'i±)Dk'¬™¤f¥lÞ\Ûf'¼ÖF3V..!´ÍÌe 5’ á&ÓÖŒØÞRÄ•5Ii×«ÙdºÚ×öØ¯¤L‹`ÿ(fóÔS¾üß¦ÜPô“ôv˜ŽÕ¬Éa$¨jÿ3®­iòÖ.ºÏ‡Á¡ƒF©}½Š[Oõƒ­ýbµ[²¢ìëGt¯õì¬…¶ØAY³‡“ÖØb
=³ym¨Y{,¬èjßWY3kYK™¬!¿ç	ÝÞÉqàà‚ä5¬)0‡Ãò(¾~ƒ×Ž2¾»u÷ÉÔªÉaÄ¬ _ÿ«Â5W³ÖÖw'¦¦*•å	ik¾tms¥ÔœÇRS³èg%\(-¡.^º6&‰­„ˆ¶SY³)¥Û<U² #X	æR¤#¢"m¦/ÊRŠ'Xsj€šÍK&èÆk­HMÂšÆ.¼e¿‰Myt€O~gòð¯qB’ÎV¨óÙ…:Ö%Uim<ÆÇÁ¸LÇúÞß5uy2s²:ŠÎÛÑªœÁ›ŸÃN£v~­ÙTùw™ÜÍ©RFUq¥R–]‹H˜«ê‰(¢owª+ó¾QuhMFÎÔ5¶­íI­­5Õ§^ŽêöÏ™­iÀ®!¨6f:É=¬õœ¸6Àl`-tÄæ?§ÌEd2¢Õ:åKôK˜õ°&£G:dOU0€\FJv•þð ƒ1`MPïË6X+.(çæ(%ä]ì†5oÉÇ»•­•à¸ŽÇHˆÿÈÂs[(^Ó0„‘šNY¬„µï=ÜØ¸šÚT¤Z‹õÃÖƒÕ^ä^ìÅ^Äò ¿´	TÖ,À4ik2„„«mX	Þ v|
°Æž‡÷7îòÅ'ù­ée×H÷ïœéY?{Ï3_’$HÁtÔœk6è§¬Õš2„ÜtNà¦y'¤\ÐÎežÌÈVŽúl*wõÊÇFk8Œ\Áb‡“Ö`Mª3ÓpîÓ¿~úéêRri™s÷\ƒëˆÒ
9(k­ÕŸÿœƒj¹¼ºò°VŒ8­àó®¹¦X‘[šÝÝÖ&{Q¡ˆ¡c¬À ÑÚg·Ï¼/qM°öÎÿƒÖN}ôw`ÏV"¤ÊÖØœ²Ö•Èe2ÚÉƒ
êÕ•!±YÆ#›!ž}Dhá	·öØ©jš'Í·_°vÀoó%Œ{±Ö&Q×d©¡ïˆªïÄm‚ÉƒC½½£é¸Ö]/J[;ÒÛO@³\mqMÁI»Öß]Ïz,“{?—š2(l®ò$—£(­kŒ“jÂn‹CH–3¤‚µ.y÷ëÔ:5oÕ*ås/;9Ë5F7—šlNS¢Z2ä?zRó¦üâ±Á‰·•)ƒßeÉÁššæœ]8µÕs}}]Fœç]v—;ÒeG1*#±6¬El(]‚5œYò#a¦!l™Q?ËlmÍu^ó>ÿ¯	ÍOp¼Ô¾ÔT4MÄ_XwÒ­Æ%¬Yd$jšä…žÕà2ÑY 5Ïk"µ ªÅI-Îi`Úò¼r"ã9Œñú5Ûåh- £´À‚~rÁ“žØ¯‰{\:d×þÓóZXâ¸Å¾Ã'zRÍÖ<¬¡¬ýÔ*ÊÂÊŸA"j>jÖ—|`¶+ëÏ­]'aãïamcwÍÚ‚¹A‚j±ˆwÅ¬Qýæt,/¬±åå<Í1Œr+@m__ÿS—.=%®DírÈ+Yó¸PÍ/!5—yQí¯Ÿˆ½¹Û
Ð¸íìE67ÉíÆ]è–Ñì>ë­&m”×¬µaÍÚJ°i«nž×v§A^Ãõ ¸mÛØï©¬V°E5’î÷ä '.Ëeù—D[#È…$RnG#ƒì»ûÆÝ£ƒÜœS+˜×™]“E×hñ®ƒ5ºfa2’ÄðýøÖr3øŒàl4Åª'ÙjVæ÷'uÎBp'ÃqÀÎr¶cHÄÅ65+MËèì ³£’«Yk`æše3¦¡50±Ê4mc¥@‘Ô°:	’¾`Í¯yV³ðCÀ§ ®u¤‹uüû¡28Ê¼Fê5!UßI0ge†•‡-;2•É2›­TòdZ#¬™[-OGœTA¯|½Ô¢x»|SmKø’2€fçš„¾GP<¯Â8>^¬Viäi[byßCùt]²ÚdÿEô
¸™Ta]-*t˜o¿ÙTÖ«‘~Ð7¨ŠÈùòàµ'póÄº?ÀZ¬ËÚeYA¢¨Y²ÍÌbÏŸÊÐYMiüY@l=‰Ð†eVããÃvÂ³í›Æk#|FN—)îE¦81Àú1^/9{[`Éwr‡‹žõëí´Ç`×ïw¸µÇ6ãµ`â/VÃXU±KX{Ë	kßáöÏ«O¨fíÛ|ûÛ±—¹{±1iíŸÚI¬áÚÕY÷‹ÖF8üX5¼¾r-À¬õ™ËŸ|!Tûbw.$¼vo‹£ÏyÝÌÈ@2É+OZQFXã¼0·†?Y‹[MÉp[¶¡<IdoD­Ü,`€kD[Z»¢«Ö¸6ô°ö¦5ÂZ¥¼òÁÊl‹Ã;ê§85µ¦j•)Ýû:¾¼RFZ[]Åb„ƒÖæn®¬¬VG£ÕÅEáénšEãÞ?¤–d¦¬”…bw7WFÅ3Ÿ½xæþï©[£pí½w¬ÙÚßÖÈ„$‚²f´6:4¿6)ôÏäÂ¯¤HÕmí‡4ÃfÃ±™–j»ö¬ø+<vHpr[;<ó°vLúK‡ôlˆ€,Ôu Ï†°îÿÌæKØš¤fšÇûrºŸ&ØRÖÚ·ÆKÜ åvqG=cxÆ>0×^Ûû:;÷¥Žçd5’“wžòI*“‰ÀÊÚœßÆ$›°DÖœ×š+Ùö¶9R#b¢šC5û•Øqôì]D3üE¼²æ!CÅø©…-¬Âñ,8>œÌdH¦éÉHW³ë¦2°Ö¬	Î¸}Ìe”1[1z‰±¹€2q5lµ:l¶ÖÄfL/›ãˆ+¾Ÿsup!Wr´è`mº»8DŒçkìz{¼ Ï\zå•?ŽÌ‚²æ}ú½ª¶KT f˜ö¸ÄU)â¥k?9õù?Æ”5_ÿæD5Oj»?#›¶` ëpm+Žk±tHnìczæùgúSpíp»!¶²"‘Ö¬!õlmöÝº±Ø¦0ËHIh"†blZVÛd„'¤®µaMË@jAY£+vPÖØtª¸fñµ&kîm­¶g5"¤?~SøÚ†%··qfÄ„TÈîí¶²öypƒ¨HcÒš·îgwœd“Gñ©U©vßzÊ„<`Í\Fnõn{Û~¾Ò­.Š¿þ‹…wƒÔä)MÄflÚéAÍ»”µë~b®ywâû²ZˆÔpÊz)(©¤mAM”6ACý–#O*›M1|úLªž»ëÚf9TCZSÈiVã¿ÿ;g¶&¨’=þÕR³Mkyfz?k³æ™M8›‘1K¥£
	^ªšå÷'¦•2ÒåS2Î”¬ZCJš)kˆPàK)Á.LËPŽƒzÒ!³€Y/P£5H-Bh2˜óî"<¬i;O@iE±ZNSYHÉ0bU¡³ÎqŠ—aRí	h,.PÅÖÔî9ÜE(ÀíO×,³Šýuæ¥†^]Ì–h\R«4šMÐµ9§<RHø²f”G3«­•>Ò!%ÒQš ÃÐW+¤+ÑvþÑZ¤;S5-Ô¼[*`'¸Z€WëVõ3çñ<‰dì5@ë	Í'¾UX»¼.UM²ÙàÆå¤î×•JªyÆEöÃp;V:™;X#qìGnt#W°–¤rM`H<k	xPê]°'ikŽÓ´@T»Ãp]ÊÚu{ƒ8¨i’"ƒ¨fÜæ…5î»øvaøøÆÅC‰„Ö,r—¤b/r/öb/by_ÞÞ¸¤ÑZ;<¬ÍÌÈ±1îÜ¯ðƒ˜?âÚý¿üåÁƒ/þòÅ·àÚ[Ÿÿ+WJg?_ïéÉ‘™êQclÑî"óq7.R;µ2£æ'‡¿À-ù0ÕÔs:[ l”®þ×á)XÍIk?{Ë`í®ËƒÖ~E[lT5®ÏæóÍr£³”M%ÑÓ"XMÃHkuUíø²ü'¡5kò™Ÿ_ü`±z$¿¸¸º4›Ù×{dˆ
¯ƒÇ¦»‘ªÆ'Õ¹·¯·xë’ºòž¹}ÿwÀ? ?ÞŸßú1°öFÌ2 Û»kóïþb}:¥É±ÿ$IðÍÔð/ù¡µ¿›i&R¹<×VÒ\ö£Õ´QŸæ3)MŒ&›Gû:Bû­Ç°	/±&ùñˆ˜MÝ¯a…ƒ/3šœî&¦'‡{òÓÜ¡õ#‚5\]Y~ýv}e9¥.ÁšñZ&—ÚÇ*õéDW062$—\4¶ëè´VØ‚µ1,'Õ}u)‡´FlÁYsÿ¿¼<ŸéÌFÎ§?†jAT‹§?¨ù@I½sVSxë~Ãµ ÀqwýŽ¼›Gð”£¾”ToÕ–|ûuŸZs°ÆF-“WQ¤/°BêR¬9T3X“fh¦k\¡PâJÏì5ÖÖò<#TÛÑ[[¨‹Ä;sì…ŠE¤Ò ‰g,^=óÊþô¿ÿ™ù‰‡[»PíÛHÍÅovGÀµ ¯…j3c³§ØÐvÕø¢8¨ñ9î“Xûð,¸‹×¶ˆxñšéhÕøàÅc‚5º©²í?)Y]Í¹ø;bc7Ï©VÍÀ	éŠuÖ´ƒ*-èJV˜%BZm‡‘cµXÉÅBÀ5ñš/Zó#—nùüGª‘#lÃ…6ã­«Ùä»‚–`'Œ·_ n-®¬kšÉÝa¼Æ$e-°Y@C·Ct†‚§¬gføÌú¬õ"=k´Z³@XcvßØ‡B¯P´æÐ™‘š
Ö¨[S°;ÞgíÐc+Öø -a5ßÍj²îÏxX¶ŽõÖ>Y-•ž±;rJ€K&’Ü&¼óôÓOYŸ˜xòîÛtX¼¬)Ö4+^·J¶² ·(WÝ:=˜›=~ö«J\#Úâšî#Êm×ÀAWæ"çßi&“Ø	k,µ-š“Ð »bkÖ»R#@·ŒX¬*½>ÂQ_º•Ô5T¿ÕknÈ/R-±m"XzpÛ”	ÖÒˆjJ¢”´æšaç‹“äU£&×~ÀÍ`R× Ö»¶ö2G5É¬"ŒÕÎ¡œ‘YÊæu›¨þÖ³•¹ˆôÝçèTDy#—¢YÁ\’·Æü1Ó_Hs÷´
¬U×ˆÑ5^EŽcX«ª2Nba¾Š©nA*õ†+]/;êv”u}ÙeS¥lip um7¬á+’œ¹|åŠ(þA—7èËsåz ²¥	kxø/Í.1HŽló®ÔpÌû­¥Ú+Wš1H¸šk`šÚþU]Ž†AYªŽÕÌr]¬vYh¶¾îó-f\—5Ïl1zó¯:äX@[ó°¶[XÃ^äbO¢k šcµ'âVÐÚ^ä^ìÅ^Äûb“	ªY€iAZ3CHÑÚ°Ž}bµqXkïß¸qýÆƒÿ÷…Çµ_†&ÙÄç÷>ŸÔùOaf™©l	…­B‹5`­fíÕdˆ~Ž®›-ækJ"#eX“_påêŸÞÏ6ÞGW3\³Z8y¹{X»ðä“×N›äé‘áYo¤dÓ¥e`­‘!J¹••°±áNHVIcey¥‰‚½È
Ý±W—ZÅîBmqe¹”MOON*ƒðØøt÷'aÞ¾â«O½ÿþöó_¼ýð!ºÚïùË‡®0ïÏÇR±Ö~1¿ŸR#R°F>¤B&#ôÆVýÚ~¨gá3W¨&N¼ˆkW×›xÞ:¬±ðš
Ö~ðëcÁI M´æPMhÉ’÷„Ø´xX;6)ã2÷@·#ÝÓ=kÔ6¨3jÁ0­0ÝÛÍ:•ÌHˆÔVÉi¤>¦ý…ÙKb¶NLp#\°ÆÖp®„Ú–bœJržM‘]³|<©»Ù•ÙY\ú•	Ù¤RmŽûÐMç×OxRkîªT{:˜…édnpþÛŸa (	R°faŽ»Ò%eß|<™"¥H7í—øW‡ÖÈ„¤²ÉöCW]Á[f±ïmùcsA¢" æðKÛà˜¯V³àW)`Ó¬®k¸x‚æÆÿ?{çúÛÖy­ùùƒ~”K‚!ÃÐ—’"´²$Ž  Šx„!J¥­J1‚LÅ\Z±7M"RÔpÓµäKR;452KI?¤9ðøV·c89'ŽâÂóåóeNù=ëå«WÛr&ù´¸/ïÞ¤HJqöÞ¿ý¬õ¬a±™áZ?sF›`ñP?BÎÇd¿áÞçŽ¼×¸†ÿ?ŽÐ˜Bókf Žjå´˜x„ˆðTC]‹®hkZF|%í…V[Ç´‡ÅCy\æ›qÍ“CÍnìï5V{2SéšÈÌ9`>b·1¬±æI¶³”¨µÜÇŸYnbƒ§&€µËØöïaÁkSÖ 4=¢z°jôÄæ@ÖÒ˜Qõ0qkÀšöÚF ¨bÆ«– ¹ƒß¢Ý+kÕ6sšÍ¶0ÕÁÚ„Ç5‚÷ñWÓ·'v„Ê}Æò*Ï²|ÂÒ^5¡–oÂ)"ôYsö",%k^[¹éÉÐk-Òg¸ì¡‰ïÛÊ¨¬­{ö{Xkžì&RÇÜDøŸ‘Ýb¡ß¦J_¡¶¶NªÔ µÅOùÞnÓù¬æ0í5–R×ÖèÁø¡`í‹)$º£ŸR¹æÅ5…JcMX‹
iÁáº«Ð±>3¨Àµ?·Ö‚y¿YŠ¸¿žÉ¥I‰#Š«BK µžÐ™Ë°¦‚L4Æ¬>Ú"Ñøƒ‘H4lg >$?& 30#¥j ÆÙ²îÿhŸuÉD¦×ýŸ¬6üÛ£~Ë¨×‘tÍ—Ë'›2¤º”AÙ?Ö”G5#a²Š(XëÍŒS\W-–(ØÍ¤r¹©$	…Z]¥uÃY`­É:­å+
h?€Iyl¨ï[REv‰áaöÑ váRå|Ç8°v ¡Ë{ŒD`m‘J8@âðŒgÿâ¹sðÚéX+3L6céµ^Ñ”NçDï¦«õ ½*_Õ\ Y f–í£ÙõÐk”¬}|€Ïy/'5pÂÚÆvÜ{uv¬Ái›N2Æbnæ}´ÐØüsAL³MMi‡jÕ6»‹Üºµ´t¹µY¬Öp‚”o(Xs¨¶•¹[±¶Z»víÊ¤µ+ y<±³€mÝW¤Óg‚»ÜGÍÖÜ°óÜRçÄÊW\[CZ#‚¸Ô5’Ó§tþë°6U-à!Ì(—*&±«BA©IES½Z1WÝhÓI~>Yì,UŠ§/å_Yºð[µZ`m£²ÖˆCÜÆë á#o·'³EN-äèÅb§ªUÄ´Z9‘lÚ7TÎÏNÎ¯BˆXSÕ…âTjûÎ–ÁüT¬ig"ŸÁñ¾‹Q¤ÊÕöµãrÿÊÙWúG{¯Ü[[ûÝßÝ[oþç?¿üuk×­½ýöÛ»ê½Cý]ÏÃf‚5U¯1d°hFcl8Î9øÓ‰MZ›«qs€ŸÕ6OX—lÑ–ÎÒlEF4–î7b†#†iFhÄhWÜ„Ê€$© Å[>»/;F•ÂH?Õ½ÒÕTXô¶¤ÒiþÉT§_ó
ÛŒÎ,	’°ïîFR£L¿™]}ÀÚ6ô´8O¤ÓìL—gçV_”¤v|¸î<SµéR	~Ão$¨jã¨æú£¤Ö 5k\ŽÉ¸_žpo"¬9eÍÁš/Zsms;ñoŽokÕS:¢S	+qç—OËp±SV»èmÀšF¬=¬õ¬t¹]¨lD­î®©)hÐåÅ8ó-1XÓÂ±k´†¬IÅ~¿k´F ¬ý¯ý½ý%t5‡j›Ú`ípmÕ"•jARóöÑñPœÚX¸æè,[6aTªZÀA{(4á+Ø¾×<­(Ó¾ð¨æðáÈne=‚hüÓ¬É¼Ÿ\` µ ‡•¯‘&);H×	d¹z–¡¶¬TíÑ«,,&Ø«¹8uƒ<ªEÐÕnzZcr=±	×Ûù)¢ ü(ÍíQ!yËí·S…˜ w>²c¹…W´B¹A2‘I˜¨æíäÃ2!m’²&ær°Ü'ƒoÿ²9Nšì#|û¶_]fµûûIO‘¾fMá@­±<®ùº5oé­ ½²æâ| µE¦=â‰?°dM<âCWà“1U­MNÄâr€ÕO”R-u¥ûÀã¢µÅÛoüb=~.a‡›5]Öˆk/²:=Søt€Ê5‰k^ZSi¬ˆö!ÓEÁZZWä}î4o¨+X<ÀZ®5Ô­ñT)qÍ°q,¢ÕÌ°L!1°¥î´úT‚r»³HŸlU¦%“HNüÌzw5–0œM­Ó‚¿bpP©…	ñYÖšïgUFÎ:‡¨l†ªÊöt¿ô0;ÂÈ¸Ÿ±¨†!Ç:eeX7&ê÷V{‰c•êøŽÉ`¹š/d¬ —]T"äqê¯ƒs¢¸
&%ì-—«ÕÚt]æ"jè–‘Ó#™ê©8þ'cÒIŒ¡È¼ÈË…7•ø{`(YÌÅ]Îr	e-)/È›aÍU¬]?‡²¦,ås‹ç>8×3q>—â5Åù³s*™M“‰“ÎIZëëQÿdg§œÏk}¢56¬rM:›
	nh|˜[ù`ø@©˜€Ú×•ŽI±³Ñ¬yZÞAwó{½®FlÖ^Ø`Û«ÝZjUCl„µ(«E:boyAnÅVlE$þó5ÙÄnÖ.]>T[T`5â;a‹ÕúúBWlŒ™üöåµµ¥¥¿ÝXW×Ö¯­ríåÛ˜—ußR„&X+$õ“Eœs´|!ç‚SŒ‚lz\–UP¢ñDaœ³¢<"ö)k·k¾›c­…Fk‡öªg¢4{2×4H*2ÚTn[z2#ù±È	œ¾k³SM;‹hhÕÕÚð4ÕÔcÛÉüO%Æ©|*µs§*«FHìb´QæE a=òÏ»iŠ}çÞgÐ¹`Æ¢¦nÙçÍŸüå_þòYBZ«ÉÂW½¶ZýqÖ¤£`*Y{D3cH|#lÍ4BN®éùÇ°‘äiv?z¬Ù‚ŸÑÒ<úU¾Ö¾Á(ô§@|¤};é-#2©÷;v¼Î^2gF†³Øm$öqKöÄÈ ŽM¹bíDo9E³ðì ‘Ób4JEŒìÎQÂPlŽ%i§¦S°³iiÉQ¨¹\ž´®­¶¥µ@{ClC.M$v‰ÕŽŸ0b›žÀéŠ=ÜH¨V Š+Õ6“ÚEŠdAÚ½u`pùOþ³?CX¯œžžE¢§/×EQÂÚL©LQS‚ßÚrx$­e†™§¬Ieô…g†a2od$jÓN­Ý«E¾¨nLu’a5g3¢¨S—±7Ókû=«#¬†±µ&ùñ•òsRÖ²‰ÓÞÔ]ˆæ#ÔªEX- Z”Ô¾+6ÒÐå2!…S›q­±< yaÈ€H¸96|†¯_‹âZÔÒB¤&TÓÀpMqäi#´Ÿ‰Ö$ž1Óg*Ys´Ñeí.b°¥IN³B2†k—µ5!V3 «¹ðÖý„Çµˆd 5ßhÍ9Bž¿Êy&seqnÛ­Ü0`”öz³ÈåMôZÛ¾Z‹*k†k›ú¬É¯ßOAYó°ýï1Òr—6nê XS$°†Øˆ=¤~0âRyÚkš|¤Öæ½ÀF<Øûô¦ÈEÞ×ËO‘kÔš’ë•ZZÀj“Ýˆm–à—àÅÑ£ûÐ ÐÖÜjl8Œ¼öÚÞÎžOIüôµ›J~Ó`í)±š`Çº¯Ý„ÕŽ~øÆ'Ÿ|²ðö™/ª8GU´|Fj&­‰Ø¦”OgWõÆb,:;Ó®íšém53‰9ò )£Î5³Ð k5zže:W•µ—=%ÁšµÞW’`‚%’›Áš·aÁ¦õ[ó–"¶²-	T•AëZV"ÔÐ+£¯‘ö($cD‘šþòƒ*Ëö“ ¤ÌXVw‚œâ_«	ÖŽq@*†OÔóùD£9A6ñh4	üéˆ•_å l°æBÕjÖÜ¤’+Ì¬ÖyI—HªküºÖŽ …JX«¦|„Á‡6
ó0ÚTúlX¡¿ˆP´nÇ©¹™|û»oË
r)ÝÖ9£‚LVÔæ Ï´úªmp;× “ÀÅŒHkJœåòÁYŠŒBh×Íó™$´EÒ Q­ÖyNÕkkÁ<„Y#ßUeØfÒÚÅ,œ”µÍÂšI¹t9}¾Y°æX-ÀÚRÛÊ‚ÜŠ­ØŠÍ#÷=¬IY»â‘m‘0X×¼®Ö×Ùç-¬Ú\È‚„³÷ÒÒÄµ¯þøÕW_yZk¨k÷œÍÈ¯oÓYkT’Ákt½á­cdÏR\Ü×¤Z˜ˆV+qw.obV#,(3*ëLHåÚ+§ûî®ÞÖ~K“³ƒÖ~î`àÄp #6w²8Hç,úÊ ªåbTGÌU‘pø¤Ú[óS-ÉÉSoÍ¨´V¯eqÞªp.*U§òÙ}Û©™iú‡†˜Ñ¥ºàë^6’½tÿÈè‘¯?¿rm`³_ïïÿ;&#RùàˆŸHZÚšÃµ·ÿã?(›ëWÖãócÏ?ö<|öã_9=ÍÊÒœß#š˜ÑZ˜¬Æ~œñØË‹´³<#\‡µÐH³ÐzhÙÌ2é‰½[î•‰©Â°u‹«g8çò‹À$½#½™±|ž²5~­Ý#”8æ¨8Zªs3x­” µ”z`'¡¨Ø¶D–âçJËº"	×â“º9+/ƒg–ï³-ÖN&ñø×ÕXazº€¯Q¯ìRät³Í¤Fl*UÃLÛ¡Zh¿#Pcrœæa;ç$;½vS°öþÇ\¬…¢q.ÖÖ¾®/ÆÛ(HÐ…nséôT¡:ž¡Ò‚ûÕ©Á¤ò—ð±&©g,åêô™•¾˜)kè`M"´F¸‚´r]»@5äk„=‹'B³;ÝÌÕÜv—Öâ´Œƒµ'$­½’Í¾çY	9Í?Õ¢üô¯‘ÇÃpMé¹íÍ(ôÖvÂšGµ …á³˜ˆ °yí¾×ÎlÄµhO/‹æý’Ö\
$#­Ìq„›ílâñß~öìÝ»w1Z¼ú$U[Õ·t½Ðk‚l¢¶¬½Ü máò ƒ®ök-ŒÖXxem3˜­Õü€i3¬ š˜ny'ètugËö'Ÿô}Ö"m±=ªŒ ›/Yãa}ÖkáSÌ¶¿ñQËWUç² µ»W‘ÙZ–Ÿ°Ø‰‰«ËNYÓìiM“(ÍOˆl<´×ƒš^ÇÉƒVýËË­|+Æ-âÁV’º¯}/¬YX­¥mD¬­Oö­ÍøAêR\™‰­­¨%?ÞÓyˆäç½&^Vþ³ÚSï¿f°†ÄÆS5hŠMÆ3_žYøò“—¿Äzv|jJ&þ¡pMÒš§µBL2¬Öj#Þ2¶ŒÉ
G¨U#²9^¨ ±%òªÝª°|Áª£¢Ð‰ªlÉ!3ø÷³ÅÏX3l1Kù“„ØËx€µmèj"¸’½_I´–¡¶6‘•bŸM$ZšÊˆA:ŸY	r[y‘ýYŽñ
ëÚÃÕ…Xø•:Í•HçäWøÊ¥¬r³i ‰<FU[<Už¶RuHs\5må±
÷Qóã$¶èæU©RC”Äï~yˆ$kc¥ññœ¨’o¬éKZ¿óœ’9Ík¤\àOWÁ¸ßãÚº°F€K–	¬c€§}Ûâ¹Ë­º]R°Ö×'X“sº›q·ÒeÑØP×zÐ×*5l­Ë”Fd§³D¢aMAX#|9´ò0)ZëœX¼l±CQþqM‹ÈÈüFzö!ÂÚO¢Â×A·V…ÕâqÁš«XÛ\°ve+r+¶b+Œÿ¬]#eÍ·Z3V;= a­ûüy»µÄÍ5¡á¸„5V×J„ì\¹÷Õ¿)òÆ¹ï~òk™BÆ©Y‹u´%“vìPkdâ•r˜L>œ\8¡T’2"‡o×ê®gŠ|HHÞ[y÷Ý++ÐšyH	Ö­YÅÚ·‡úÚº80Eþ	—Ìå|5—q•š_­É{¤ßçB¼)M¶U’L¦k8AŽW÷ågVÍ„’¬Ç,™þe³ClÈÅcH´Ö=wøÊþÑý÷¿¾öùÚÚ7÷ì—s´öúë˜Œ|ø&y?1VûÖÒ ±ïwóÛãåìè¯0ë­A`ê·¦¢µÇžv}Õ<¬!©‰ßdá5ž*ÛX>ù,ZœýY’£‚5ï	¢11Öˆ,Wò}!Ã’ÎpX@çŠÃŒ ÎgíÎèeNèø]¤fJÛ÷QJÕ;DQ^¦Âé¼$³°€_æj>…s?ýQÇ
yjþbIX-žÖ5UŽe÷Àd$‹Ën±mMçRƒ‹îdÏLÅ8¦_zé8¶"Hj5LÄ°<¾«Æ%’H-Šj¾ýõ'ª]¿îI-Hj¿ó°öÛ7Žk7{nþÂ`m£3ÊÚÍ5kÍkø€Ïuã5@¤µî¯ØÅQe¼§U¸¼jÖÖ•¿Hœèª[?5%1²rÍÔL`³WÚ0qÍvxVS%«„ÁšÏ‚Ô˜Ån'¶k,3Ôˆ‰¾öŠ Ì	i6ùG´±š±ÔCUµ‡ƒš­6	_ÁdÛäÞ¯1»‚°Æk	ÿIgÂð1Q\ÉÁ2Šk„‡‡ýÿýyã´'é¬æŒ Åink¦ª=y$!DjgÏ>yWÕc"'­a•¿‡z5ªÖˆ	aZ€µ‚s¿Ç5@-$B;H3q}±¡µÓú€¬í‰÷»¡m„nhlÖÚïî¹
Qî@mºÛ²ÏãŽÕ¼$STZƒÐBÉÊZÃ?²-žÀ ç]Ë€¬µó`è´þe‚¸†ãHTYÈÈyä¦­×­ ™BSìb´ep­Íœ%ør­{Z›~¬EÂÔ¤Í²Ò1ø9Þ†]p‘»õÇî‰wX‡ã	k¯}<qY°ö¦ªêx¬)ÐÚ¸ 'EúO¿À'ªºúå‡gT-›ŽMEÅµãš1>…g-$à)âQ>kõc¸A÷´REúZ¾’Êµæ*>J¥dk
µ)!WJ"•H±³«yXÃÌV3™¨Y!X­EÍú[IõWó·œª$¨¹Þ–$Q½_ü
FýòÐw¢š–øæãýaùÜf•±:6€¤ê—„ÜWÇ¬ö%KPÓÆ9Á1—\†¥ÉtœrËã…X,—'çQ}F8ÇÂdØóåi}ZT#4½±Ê82"®\"TbY¥e%^Ö*IUÚe¥ùÑ$;YMÉrDn#cHôo;à"
kº)wúüeø¸‹Ð^°¦ RÖ€5hMÅÇ,€li¢HƒÎ\ß…ÆÕˆóƒd¯ìE!	R};-¬hM)×™<céÇ¬Bsì	Çq¶¥K`m>(kuù%qëôå=ß#¬ñØÊ‚ÜŠ­ØŠM#?Õ(\ÔœÿmÑÚmpÍ‚µ+Ú™ë 5¶Î­LLÜ»qãÆÚ½¿ÝPDŒFÞ]l[ºõúm÷b*Y#Û¤‘DYÖ†9áµæòæÙO¢g«RKQC@v£\¼ÀU?Ãýï­\X¹tøôÍ`mƒ´†¤™A^„(.~{1Ý<w
áŒóT‚öa±ù¹I`­  ãÒŸÎÍ4XžYxkn~*Õ²¯¶:Ãù,“í7Ç­|‰Ó#Œæûa33|îÈþÞ‘‘Þ#÷?¿óù×Ÿ¶¶¶æ®P¡5âßÿýè–€š…áZ/À¥„ÇQW–YV¤ƒ55ÊVÊ£o´ö,/f§öj7¯^	’ ˜|úÝOI]kVµk¢µ¡}”‰[ïÝÖ^m(»o_"eF‘CTÍÖÐ”†½´{hÇ¹ŸY•R‘I®'¾$Â«üª©–íChOR%[’Ø…PWBö#ÃÉI¹´5ÅÐÔ¬ýM\ÍÔÒj0K‹„ê8M®wÙ¨š¨féåÚ4{}T3«þªJÕªYnÊÄ:§1)´'\eŠFÔðt=¸…:çè-®O,^¿ýxw¼yX‹§ffÊ¥Žäîò¹X¾VLUømÕ;ëÄ5WkÆHSÝÕªyJc¶mŸ%iûük„møF>¤Ûè²è%Êš—Ú˜ögûñïÇ	òŒX)<¾_VûnTcò³Ûk±Y[þý^[Ó¬¡Å»|R`µÍõGâ_yhð+úuyÍ×¨n,]
ù\H…'µhœùbaôygÜßŽž¬iõ3‚%[Â¸»WÏ¢¥‰ÖùÙUº™9×~–>`39~˜Áñ`dU­\Á^×dÉÜ À“9j‹*i?ÿ°mKjRvðkÐ¿ÛÕÛ[–¥›2xZÛléÝû½²6ô:÷á£Ï’ëx·ï~>F.#í|ÜÕG—ï.?¥5ëþˆÃˆC¶†ÅH£fí”h-$Aòx¬=j=Ö‚GärëÄrÓ4ƒlð‰ÙŒàÕo¥H1ÓŒû$ªõá&Û–ž¤
XSªb'sÏ¡7o¾öøõ‰‰7”­nø:^øVk‚µgHƒ$òËÚjípíËÿ´:>ÕÙÉ '®Yåš…o2>>½«È¾haÏZà3j#š„H¾OÃœ áŒ‘x¢@&`RºÚÊ &f´QÒMÅ»T¦f´F¸Æ²Ü Käž…:µÖÀjJÔP?ëxV…€5Ü˜!ÀOÖ*kÇšd@2ÖÒ4˜P®‰ÚDÖÄ]Ê‡ìÙ†úé¿¬ejuá[¥¬ÕÉ€4XSKïÚ¼#0)é’Å$Î1{•“_"5|B/Æ“™ŽÞÜÀSwbN]¹5ˆU?^Í@V¤4`¤¬¾ž2ÍÕÀ€?VÒÒ8µD%ÕÖ)#}º­uF`Ígºã-21qŽÊYBNôIë$â9ë™ j%Böuë:D¨æþI4`M*,£õž¯¶¿{ïã¢4…_²ÊÚõF?îÛ‹þ|£¯$5±˜[8@cf"mZ_HB¬æ"k°Ú›!	Ò¥+mbµå ¬QaÍ² ÿÓVlÅVlE4°A[3PcB`s°v{Q1y~Ïž¬Y)v£:­Ó£öý‹w0„DY»aáÅµµ•{÷îÝZl»}ëY wñbAçC"Nµ³úz¥R¹"µiºÏ^åq‡äú:…3[]·òðÊ•j¥W®\»r8øÒ
—òiS·k³ö-©€5‹pßLµPLÍÏÏÏkµÕ*wk31
Ø.NbY›=yêääl¬)ÛŸ'pdH¹$]ûRù±2Öº˜vw9fiß?Ìª«÷ð•ÃGýÍgŸ­ùTGk2	‰¯BkÖˆ:¤F˜_ˆú¡µ»žd‹pv"š²¦¤G6µs¬=+'H­x FP²2J veËýÈhv³pí#B·gûGUÆFªLÓ÷Ð¾‘^uJÅ¿{ÿðX‰:Á.vÈŽÕ|æ<©›©ø6-›Ä:â É ?—fÅµMqÎ–}²¨NË¢z×xq¶:ÍÈy>ž¨ïšŽ¢šïªVõªšÀ×‹~ëPÍªÁÚÁgžú¯?¤«ZSlj¤Aýü©àyfÎêª„I+‹s¦<–/ÎÆŠù|•’wh^$:ã"ÇÍÆë– ÏºdÏoYf®„M¬¦±§8ÛëŠÖÄjlv©`¤ëZóCAû¸‹Vs ÆäQÍ³ÚæÈ€OÐ’><®1[Z¬f¦¡jm³¤µWóõjá³þHxLc²…"UkÖ6åB‚k›ƒû5Ã4Ék„©j,<¬=röê]
Õ®ê¹»®LMÁÈÇ:akÏ&X;èýE‚°æFB°»ÁiAY³\Gñš×Ë-@”…w_lY83.ï€¢í(_Mî?oƒÔ|¤‘<ÈH“µ?˜²fÉ—µ¶ YŸ #6ÜÚHŠV¸O”úØ×Î3X3Vó¢™¸Ì)jó^\cŸåA:d}Ö¢š¶!ôÛ6‘òù}¬FHN[“â:„Äì1’Õa¥O	n±æ>ƒµf‰k–ðÆ±gv² ?=´ÿ¯ñ?ÿ/d*âÜE,#ò'ì»	«)ÞX¨-üéË/^>S›ž‰õÑgm-Z¹Ö€µ<6þ»r®¶Ô;I2œå”¡§¢`Ä¤¼ä1!•Q&"Íb	öS,J•‚ü0ØNJ>cC(h¡W¶Š¸Tºf”æÓAf&k¡¶)kMÍË48©ˆòRl%š˜øAr”R$(–¥@·HjÖp»†OdÐÝ”Í-{ÈÁ–l¿¼Ž-k²R:ñÒ‰š,C¨9£N2³x¬’-™‡iŒdšhÒ<_Í¯ŽÇ“yÕŒòV-^ÙVA9+åSqTÃdó¼ÇWâoY€P±è“§
ò^žÊ´ÐdÆh.¹-Éw¿~N=Ö˜ˆÎMÊšÒÒ{—OŸ^«]F?KKI‹åŠ³é>¢›è3e­›1]=µ§ÇE‡©¢Ra¹:1”MƒµXŸ5YóºZÄ^$"¬éæ ‚‰Ë‹›`Y[ÁÒãZØí0.$Auù¥âÞÿ –ã:TÛ³Ö|½ËmeAnÅVlÅ&‹‘ûK°ÆŒ®¶¨Y2¤£5‰;toSÁy¤¿šøMyœ_Z:wúÚÚ_ÿúU×Öð@º÷Ë_·u,.æ8	ê š«VmÔAÆœ¿R…‚r/j2D&/XËsTˆ8Ù4òâ*INå+×Þ;rI#ÖäÞ¯s¶«Y®]tqr¶Ê¿yà#_ Þ|f&_“ÙåÔ$YtŸ8õêÂB*vêÕ9ú®%IT¿µÌöJÝCû\à´Ý»»D:„ÛþÃû»F±ó;|¤·÷Òçw¾Öþï?®}vO¦®9ö_\ÖN½
­XÓ|ÂLù¡&C0±ÛJ‚Ä÷Ž`ô˜SÚÌMD»ÜÓ¬Å_¼~DÂÚÈc£ÒÛ¬åÚŽíƒ(€r„åúË½J˜dhxÉõŽŒöÖÅ]CÀœ²!ëÓÓõÝl€µrj¨k¨¿¦Ópf´·¶JÕ*¦™ùd"¿°/¦cÚ@7n#qyCš„KÒÿzR´MÅ€iN–1µZËGO›^ aÝø®ãY½NÞ#ÖX=Xªæû_{SŸþh¤¦`½´tá3ÚkO=CÍÞŸ7ÖnþüMgÙoWmBõ k—oß¾>ÑÑ½ØÝÜ6ñIsO‘Â<‚`Q·—i?Dud>¥Kž ª5`Ê¶×­ ¥­ÕØ*êžÒáô?Ÿñ×5³Hñ×Ó™Ö$>zZ£†Mš-Žkzªßú¬˜yqÍ/¾GVR—@ÍÑS 'MŽÚ¢9ŠQOÈMek6òFAX[¯‹Ûˆj!nlà5â;Åµ
	¨<ÀkÿS3¬Æ¾þ†ŒF8Vó¡¾k{qÃo—Áˆ pSh(žR kl¨l-ä@²vÊÚÆFkG55\»ÉìÂ.¤AJYópÖq™ß„Ì"ÁvØóÄ2Ñâ\€„Pf0Ü }d”Ô ´ l¼ÊŒ¸Ð:Ò}›m¨t¤ÁÚ]€Ð+kôä/¯y‹gB›57ó~ñÚ+&íôO›²…µËÙÜŠ’µ=xøOL8ÿïµîÏY«5ƒ5ij,ûÐLÔÛ„4ìýÚšûŒÝØRsìž4µõtìÝ»÷è3O]qƒ‘÷±r!d£8ˆ½ÚÁ^Xœ!{õ­w~ó›ã3}}»ÞÙ5^x­5–ãÈdÞJ°Ã
žÒf×UŒÆ0Î1Xcâö"P&ÊÉœRÖ,¯E!›q­Á6öãŠ²4W(&cÄ©k›Qš-”!XJ°´p;Y+’p™BzS¢IÁž„nûdÇ2åÕ¬»Ê›IkpµƒƒYdµì0‡vCb‰&ØIª[½.óã’¬CòÉd^Þ»ñjM÷H-+Á-ŸkNÍ¬Ö¦Ç‹ùéãØ|Íä*¥D<VHP²uB¥+7+éQÞý¼7ŸH(‹r¬¢š9®œ•´ñÍ+úoì!KqT54µF¬EXX;Ž~k4YcÉŸ8­¿_\g‡@k­iš¬)…ÕµÆhˆkÝ„lG:>v¬æ–öˆdAúH
“G3…×Ôlv˜¦•Öšý–&çÚÿW¹Žp°öwŒ£/ÜºÐ€5×rÏ¥=žÕ"ö"?Ú²ÙŠ­ØŠÍ#×`µkÖo‹õZëQè µ‰2›mp*g¹ô·¿ÞøJ¸ÆÜÖ¤¬sÉ
Z¬ÅmÔÁHÓù  ª€:§]O§Z“5¹Oq~¤VE®2É—ÞãË® »xZÃ#P—ðoêœ-XûPÍÁÚ·§*ÕbÃ*eXºP_ÍË¬¤0•Kó)Ê#N¾:kJ@'s'1=ÜYR"d¶¥ 7ÿÞ¡!.Äwhkn¥¬¶#S?7téÎ¯?¿÷ÑÚgÀ´fÍ±ºQZãÈû÷Ãi«o³xçÄcpšÁšÕ£9ÃGilìÓöÓÏóÙ
ž°h7¾€£8zÛñ,-¯ÑÍÚw¤¦Cª\ÓœAY{ì˜Þ
UíÝÃå‘c€Ò‹/ýj÷H—ŒRêÓ:í÷gG_z±Þ’™!uFÔ†+&°:ž©ñGX˜‹55ÍÓã`®;¹³)FJRS‹@-Î9›‹ªdKÉ*MóZ­&¹7Ö¦¦EdãÕêê.<×v¡pÊùQÚØo°féª©mB5Ë~$ø«jÈÚâÂÁƒ^?z”ë±ë7­l…ð·J¬?wûzGsz±Ï›N¾aŽ{Æó$Ï¤§òºÚ¨IE«p)‘)KTs]äÚ²eÜ¦œGV¨®–ËèÜ!ëz³âŸe‰°æaÍÞÏËh‚´¬©¦„¼#Æ¶¬×ÚžÔ®iõ	Õjg5.¯tEt®hØŽ†êFDËÖBÕšµÍÊšž~7ªá…ñÝ¸*×"´píÌƒ¸f[š¾Ð\}š)iŽÓüÀm4¢ý¬ I´æ­Eli­×Ì•Cþ"QX{™‰ø)3UÖXÛ6ÒOÀj„WÖÔm›Ð‡AIž£Y†~DR,cÈHþã]ÐéÕ’EÝ •ŠÖ¢5k–©eÖÁÀÄ®âSÉ»Ó¦›ê5/¬±ï*bžâ®ãG¯­]2eM“o³Ö 5…¿Ùì^ªE´ÏZˆG—µlnÒ[okšXlý~;Hw	ïe$éÞÀZ,Æu8òKUÁöÐ$ÝµqkíÁ’84ÐýøÞCGŸùxïM’ËPÖ„h!@5ƒµƒ×ßxáàyÕÆþV;þÎÌÌ;ÿãÅw!®=ØrmºÌ«Ôx­€?1yÜS`€¥Ø9èhµ6klðÙûg*`c"’TYÛ XSZ¤6»B+Ë`L%+jEÉÆ3#Žp"2Y¥É%ƒúú5[ÁhnÏ²².ËT§¨K£<MxWËteÐ®¨KË mPà ¤·’€LÅa \‰cXMbTA0žÏ%³xS
Ûp!iiÊ¢ê—y+²i„V„Ñø)î]&9<Rg¬¬ªÜêÇë™áÕÙxÓr¼jõm:>V@Tòàù5”îR*'j%>‘¤zÍ•TáOß¥T‚0+.›³©T }”¿ªE¨Yóüyîrlv‰8¿xy‚„G„1ds¬fek¦!û6+Xëì³DÞV 6@¸ìŸÅuî}ŸFÂ3‡j«h¤øLÖ¸àñ¬ÝÌÒ†‘æj„Æ~{R#æµ¨°&V{ý–±°F[±ZÜ„5ý_I‚©meAnÅVlÅwJk°¨æâbµKz,.Þ–$==‹<üÑIV#‡5:Y_¹soåòß¾ºsížhí«µµ>Z¹³¦<Hÿ39ša³aS±-™*Alœ:„gJS+X[áB›Ñ\¥£dÎ¤dœ§ÆneåÒ%®ê­ýÔ:%sù.X³¢5%@Nžüöâ©™Rq.V˜Y˜—¢VÒÀBuI'¹“Swqràâ©ùj!Û¼:—jÉÍÍÏ qÉâŒZÎì®Ak–i6#2òUôî¿tÿþ‘Þý_óù}šcßK k^[ã›ààOÝÚÅ¹ùÿ½Ö-¡Ì±_N#¬ÇgŸ—ö´bX“ŒÆôŒU¦=É¨ª3lÑ¤§¶j½35HÑƒö};öeÌ¸Ÿ$>V£#ýõít°h9~ìWÇÀÎ^x}GEè#¤íÕk¤=f‡F©âÃe%“Õ)<_-ÎM&w&§æ‹3s±–MÝXŠìÌá±M5õ«K65§ûÒ
 .7‹Ö6Åµ]j{*MO/Ì-?^ìž›ÑU“	kÇ7ç?z«~=±––LUó¤FØò÷nñû?¸ðÁÁ›kŸq×f®ÃR8ÛÛ0]Ÿ¸Md<.qxBéq°san²§{ªD”ÅhcIÁšk‡]_	«,2îžc5B8§åDv9³kÔ4^aæ#îu¼ÔÂ~ÆŽ 4gI™„	€Ðaí\¦|â;S ==}?>^SMÙ&iÍõÆöÂš¦…µwC·è‡	Íˆ¿jú7&û´p-ÐÚO£=×g¥Âd5›_ùoê¶†W¿:¬yoFÕ´¡Å#†gÊ”¡~ðƒôIðTHƒÜ¬¬áÜÏ­Yc—Ñš>ò´o`æ“Ž–ØœñpÖ€Å†÷ÇçŸ¿Œê8ý!eíŸþI„Üì1â6”5¹A:KMîõÜ9±ÜNaŸ²ì³ ÙxôêÝe©kp¢ËÍÔDxƒÏj< 3«WÓÒ?‚²Æ#(kQdcZnÙ£Ô‹fÞ¼U±í‡åAjöO;hk¯©ÖµîæÖîžIK€L«ññã‡ìZüÐ¡¶OŸù¸í«Ys´¦Ùt5cµ_Ü”®~ý¼<g¡µwÞÖñ‡ÈÇhCqà†~µÐÚôxº{v*ø@ÓÍ
U­MÍ¾‘›VLÚH¡œ¡°NHÓˆ‹J
ô2ÏÇ”ùp(©ºœJ™°× U ™&—ÿÈR»YÉärcOÊ¼KRôJ¡Ÿšþª	Ä­*Õ²½"6xGv®nÍ@³R6#‚¬õõCÎS;œ1ÇŠyjÂiZBPéF´\¹fY,è`¬¡:ää:„1;øÕkU²ß«²öb—”ds\vü¥zW=SŒ'AFNÄêa*é¬œ©lkVµ]r÷+e`;=U!¨úÃáS¤Æ´ÑÒk[®™NÑ§—tß•þØ—¡wþ=Bc"Ý0|¶Q³Ò{_Ã3ÁšJ5kSKÁÚxÍ£¦h$|æS ¹ÆYú`1æ{ýÌÅ„ßiû4‡'ÓóoIY#6	kèj¯ßz×I/LÀúÍq`M¸¶‡V¶FkÕ˜xleAnÅVlÅwXŒ k®	Ô¼'$°vþ´ìEˆÎ‰n5uø;Ñ´nÌ,-:—î¬¬Ü»³v§såòÚaµµ[Ø&Þêl¼>£€e«/lDÐ½ìÌ¢®›TtK !„È¶\^]×šKÃ˜kã±‰%ê˜®½wéÂ:¬‰ÖœÖ"Vcúvà@Ï¤² çæOÉE„¢59JRn0µðÖ[3•d,ÁÖÙ‹'ONÎÏÔú‡Ê«<—HÀ(ss³(qù^®Ë‡Jð]VõjL‚µ.ùvŒªÓtÿ+—Þ{®ëÈ×÷/Ýÿæ³;Ž,þQ‰¢µŽÞü…×Nž$²Ak"5ÁËi`
Ë~è<£3öÓ^.#FG!8< }ÿÓz‚eûD'7U¿´£È˜eGx±˜Nþríß—HìàkunÀöïÎddï8M°vŒdÎÞ/ïÒ¯0<>,èøôêt›JJ µñZF©6øŒåâ-Û“i8—R>T´h-ž3ËþÄ4y X¡±És»¸:3UÜ”©ZfpøÅgº§vMç¾TÍ“Z@5‰j}¢ùß;¼r ÔÏ~o‹”ðê-Ò¥@?Èp¦^K6–äBvôaß?U\˜/ÎÏÎÎVÅjå²%ï¤¶%doÝ 6Ÿ©±›b3Ïj„ˆŒkOcÇuý$Òš=/¢«›B×°˜
6Çjê\­Ùš˜ùÜþ3ÏLQcmªÚ÷°Ú†œÄÿ8 ®E!ª×þõÛüq´s‚•ã5ží7ÓÚëÚZ×€QŒ˜Ûž}^YèkO‹È<ŸÙ(Àÿ7¸Â,zŠ©'öU°™æÅ’0X{‚S¤)¶X-„8Í² ™,äÝï)ÍÀš“îøño¸¢['ÄrW[–m¡M5@I6d»¬ûTÖ ³‡ºAêñßgM`µ'&lCó2‰;äy•fÝVk‡)dƒ,Em‘oy&b0âœ•ùxÊzbeÍOj€ÇòáiÄòž		˜LDsKÓ÷ÃZÕˆxs²aX¸–ú`´éIùê“~ÝÖ¬18t¨§µã©÷[;I~Óg?F•µ£ü·<¸xþvÕò®ßùâÌü´5)ÌìzçÕj4’8^å¥¯ÍôL§â€Y#bÝ1sñ{&qÔÐ*î”µ2®"Ð™…ƒ0¶šS@š­°y	ÅkêæHOj¶RÁ_$UªðÇ°-¡™¯ZÖ8o‘DŠ%T«&ïGe*YÝh«Q’ÆS-dt÷¾e¬e²[tƒˆse2En"/WÒ¢œúKyìñ‘äNhí¹Ž$P"‰åñÉÅÒÅ9–dW"¬5Ì—Sã,†|Gª©,»Û2ß3Ý$Éð¶eÌOøÆÖÆ;Q±®(x²RKå$€‘@Á}9=¢ÂšÖuPZY2‘%ƒ5¤LÝ
ìÐŸÝ‡¬_Öi(k¬-Ò.MÖXwl€µ½¸Aèèyüý|n4Ò—«ñÀ,ö 8vîƒËâ²`ßÏ*ô\³‰WEÁalX³ÂÚ†$H±šlûïÝâ¶F³ÓÕxœ?’ ½°¶Õdm+¶b+¾ÓbD°vÿKáš`íÊ%pVÖÄk{¬ƒ‰%õÎX²
¡m‹Ÿ}ucmâÎ•+[£ïÚ;Ý[Z/ßmÕLQsïÃ°-‡|–L! QÉSr$§d6î	8LÇ“¨bœ3Æs±êL®õÒÊï.¬\¹FI“£µ×ÖÜõ;¤öø!ì ;:8d9O.¬Ò5† /€:>“Yœ*&•²0 ­•0ÒèÇ6+?³pJ)}é¢ÚšÒ;šÎh]jZæš‚5sòWÉÚ(ÆGîóÍ70…|F°ïÿ—?8J&¤·„<¥DH“ÖÞ²’5Åÿcï|›:Ó>ÿw„(?„‚o@	"=öÚJ­ˆªiü#ŠÖF®ÇÔ˜š¸…ÖÍPJ·Óš®S•ag:T%‰ ?êQhI •:O[Ã2ê0}4ê*³<zXu_Ì¢•vvGÚÏ÷º}÷Îiàiç}.ŸsŸû;q’RŸó9ßëú^Ó‡ÿé©GÿžýègÀ™¯QSÍÚ^ø…•‹Lýe²olð©½ñÄÆÑ®¾	
ÜvS¢0Á‹Qû ¹ÝªYÁ˜/8¼F€ƒt.U©S€—)PCF–ÙŽ”«ËËæìŸY>ràð±¶…õ2`7V®ÍV[ê-VIvwmâ²+EÇ£æŒ< ¬o­`6SÑO°ÄãHlÉŽSË˜@Íb¼EÙZ¾À5@»R-êÿ‹¯Í4ûæ¥‹ógÚšÚ·œvÉvìü™çñ$^%ÜÝu¯¬=µB¶þípX( ¦æIþ)*eú!µ]ÐÅq""…±Õh«3ñ Æb¤Örf i¯eÂâC½³Ågx³‰×Æ¬¼ëÓÄ³üÈèŒÅáš›xT{¸®æYM4öx-è]!òíà0¢‡ß<á…µ‡°|}@l."ý:|ÎåÃ
×<®9D²ÒÁ½ŽÒÌaDlÌ¼¸Æœ	Ï¨¡©Y"¤‚©Ûš¤6¬Jƒä² }ÉZÔRÂ©k·Àµ‹]Uœ†ÇdÀ5‰pØ’’¨äÌ.|õº[(î«Ö$®	WµD‹Ög‰°f#ÒØøäÇÕUkJƒDZiÜÑa¹¼NBÌj‘¦Ø°YH…´Í,«G5½TÃüƒ…5b¡Ò5ékB5ÖÕÖÂ|†ªC}5Á»_ª	ˆÖ—$É8m1éäæ«Û¶ß|ì™'w=¦ÿ÷•óB]²¬]9t XhQ±ìòÁƒkZGHŠÜì×ˆoam –Ÿ–‡ÿÌìð¶í1?Š’…áf4³àˆfÀK
dàô$Ó‘
ô#ÝŒHäLÉvÄ|ý1…m©ÐZ¾#Eµ¢1‹DoÏ—að/6Æ"~ÆÄüAµkGû/*uZ­¥%¬¡¹‘Y±œê"	Ö#VHf	 2>JvÃ‰­Ãýéj‘Ò¶’¼ws UÀ+µÇFJ5<»ê…8™Ü¢*ËÅ«Zm›&M²Ä	˜„ n°ØÙÉïž(§Í·I&ãê“ña
¹IaebªËàh±\"LcõYÁòröäŽI$5B¬¶4Øô–.œq$¬ù†ä<ðæç{±!-Rù=Æh ÁŒÐMåv—5Ò cö“Õ¤¦!Àš!nKU“¬¶x™,AÙÂ¤xÌÁXH†ôK¯­¼Æ÷Da-(kAX3Væ"·n-‰úµ˜þ×Å¶ß§A¶­ ×Ö›¬­Çz¬ÇCó ¯b5C5'­™°¦ØŽ¶f´r¸¥­…5ÆÉ{+÷çWþÇï?]j›ŒÜ»¾tkiñ¶ÿZç,BxÞ‹£s‘92°çPO¾T¬·ªÙÙœ“2½"C²—–Y…äÁëçÎ-]?wÞÓÚk0Zó°öÛ]ÿåß~#a?ÈƒÕNÌQEEßíÆ2âMâÐXÐb1’ãN€s{šsË¥Ah-M6dsÏžáX¢ŒúqìQªÖÿ·G'P¤úñ¼¥‘‰†+þàÓ/bÿôÁ‹ßÜ1 XáúT°ö÷?¼öíÖþWð	±Yÿ¯¥LíƒÑà3¼ûµmU(r¯ 4ˆÍHnDÖËd„”µDbÈ±
Ûèh	š»¡"]MåÇöNŒ×[#)ZP7æª¥d³ør
?pø)òf
µi¨m0]Ÿ>&XƒDŽ´à†tyS"Yî?Üª/sJG\Cêœ¸fc”Ú[ì ³áì†8ðF?l%ÆÇ“Íå€ëtµØ:p€…Ü¢\N”æI-êÿèò#É0:W›íc›Ò(üðÒ%·UÃ{¯ª'¶kÁ¼?
kÖæ”óhŒ3úÀ ¶"˜ö—KTÓÉLZr¡	1¨þµb5[EY€˜¦,®sšg5…Éjrk1cÿ~µqÿ<`ag
Éz¬%5Í}Onzƒ{ìŒ­Ñ[MÞýÏ¢°<ûñG ™8Í/¿ö)¿þ>]ÍÃÓZ„ZKk‘Ö®±D…µ5hè4µð&nñ«××‚¸´µ(­m&	ÅÚ¡ÜÀ1˜Ì+j¬ÞqäîÝ­S ‘¸hUílY,<«i€ÓˆÀj?ŠöY;Ä6s¤vs©9iÍ-·ø/q™oíœL  æÁKD å4c¤“RÓ™œ|¼oÓ¨­£kSøäj]¸žØÂµh¤93HÇj›uÖú®­>`’ÚµmX“°Ö®Vs_UÖ|/òÐ[vNX3ïþ ­i«Ö; 	¾/ÓžnßŸ©!¤¦žØ ÊÃ°îÉNBŠunÙ)ZëÝÐ³Yam×M,íš5ãµ±ñU‹›7é‰}zÿë¯#­ñÑ³ü§¹úÿÑ´y¹[[¸¶9ÏñÙ”›‡·Íò©±&Æ±)M½¬Ëâˆc¬•z‡âŠÔ2IhFi­¢AZáW
X+¶ÄhIyk¼¤zÚ(†™½¶IÍ	,„Õ®éxèÙ`ŒVÎð—«TdØQ¶Æˆh££éô¨¤­4Yö)sÌŒm!5ó@BÔÏ kyìû%ò‘Îˆ©utÝh_xL)½q0“ïþ÷ãHpì'u’[¦äHJXËé Z=WÖ.tB«ä$è¶T¿ü0;{Õõšú4ò8G©öd›*báÏ$‘Räb±Æ^äÆä#g'/¿çY/ÈfA°›HÆ†@x q÷GFÖ8Œf&«)LOstÆÔv\è„÷Ùµmãêø®äÂgÂr1Oyc
ÛXcà»ýÀkL†gÑÕ¢ÂÚê$Hë†M¬p´¸´ V‹“¹ãx(XÓâÍEÖ›¬­Çz¬ÇÃ-F,?[T¸DÈÛ²‘I³ÆÉ-gýç˜¶šBùn¢<ÈùÉÞ¥¯ïc¹ò;“Ö>˜ß²°tk1Ö~-ÑÎ†d‹Íà–8}],½"Ç9‘IÎjùœJ™!µ:·(SEÙ)e§p
©eñ‚\\:ç‚NÛ¯aëá¤5ÁÚc¿Ýõ›f/ˆIX›iÎÎ6J¹Âl¡¯ù)º­)fš3³µ¦ä7´µå:×æ˜ÆTs ™ @TìÄãWb	­aî¡×ØüÁ‘§÷?ýÒK¿ùúÑ—´ÿ÷ý{÷¸8}í5º­k¿ñÝÖ,ŒÖÞï?z´ÔŽÉ4Vó°‹±ŠÑ$¯qÌ¸h ‘†ncceîf’øTLvu™ž†ø6VÞ72¢ViäÛ™}TžOìÎ—ŽM#ªÑék‘ž×¿~O©Ô 8ÑÂóë˜t¯q`måm¹ÖMƒl\6–ˆotÇiPÃVàôÞÑ‘Ü ?HÖ¬¶)OKu€l¢Zv‡c³æ×L+*êbää41ÛjQ-ø?êœò	R`¨ª	ÑHzüð¶Ÿ|òÉ¥ÅiçÎ]½Ê¨âDPMaIÁŽYßŽ$Iƒ5òeÞŒwLæ²)®Ò*xU7Å"uC5ÁšB®ý>ZV•æó!¬™™¦“Õ,Éñ˜ÁZ¿óô·7&`šxÂXMaýjþ-FJèkégâ"â²5Úàe5Háb5ƒ¥°ºý@kÄÃ¤µGz·µÂš{·ß¯BBjv[#®=ÖÑš…ø$¬,æe|oÔJDàö„’ý®9H”$õÄöt¦Å‰k®\Ìöv@g;&Áµ‹ÕXB¼°…¦ØŠ_‹×«¡¬ÚÑÖÕ¼Mÿ*q-Ô„…]½„¾Ô©­§-vw×FkŠ„5×ô¤mµú¬EpM¶"AXsÒÚÆ»}m{`mS÷F(‘?Ãw¥µ³¾	y 5KƒÂ{ìûçÚvg×ˆj>è†Ýq¡»‡ÙqÚ©X‹F|˜ÀUdH†‹bºæ–²¶}f€:^Tþc¬w`ç•·õô\±Û4o lÈhü¿ÿJPÖXˆgž?Ä¿^?}¥&«Ç?}ô'*×Xl®Ö¦†bæáÑÖH· h­žß"çþ¡æ°fEQ±-q'²jiš~TTUÍ½ÄÎxQéúãã²ÓaQ½˜ìÖJXŠä 8>&¢ÒÒXF&ÇÍÄ_z“aˆ`-‘ìqšöBØ1%:Ö&:iuM#@û£eúNCUåQþÔtZÖÒýÊÕIÄéJÝCœR†Êb‰Ú²Ñ¢ŠÁé,°a”/ä›@xãÜÁ,wsJ,Äé ©ºt™V”T§¥êýór¢6–“fÉBÅ>2yJš~T¡cd‘ùøq3Å²~ì
Išú“Y>…jZBD³ ¹¢,ÄsdA2ØÅG2e‘ÅšIä;uò$Ô*ï£é2Úö^…:¦Cníb5óº¹¦°hj*ZÛeÆ»k”5)\½šÍ =˜š[xß~‹ÐÛCÛ0¨«±>	r-«½kaiéú­y`À´5­ÁjëYë±ëñ½ÒÚÿþŒ<Hh\ƒÕæµ®«%Òiþ«ï:y-Å;|v…½ùË‹—ï¬|…%äï~wgñÔ¶Å{·ÎÚ¸/tÉYð©¢Õh	¯GÎ†y!Z*Õò)vr-*×ð^§nm¼ª¶ž©%/..,4¡§·¡£3¯½f#oÈrâç|4c/bñK‹3ÍÑÆ±÷›™™&ç¦›E\ÛÃ‹fçË¦¢Ô—«yèärBÛtÒœíî{ô0B^þVü¥z³AT’/¾¦"THüÖû¬7öi/­Akf2híèôÑ£›ÇTm&{~XXAyÚSÏ=‡|·o¬ßÌLFÔP3te÷õí.–-)r‚×ñ]÷mÍ¤ñm®‚%£}[»r%ô¶zKåj‚1ZËcÙ•ÂnDæG¡©i¹4·¸d¡j£Ù±)ýÂ‘z±„+$MÈª8dÖÓœÚí,‰´Æu^ÖÙ,¶#Ø‹¨¨d
þ­6jËJ„ÉZŽÀº5Lû]Ài«LE¼ÿãÐÿGº0Õ<©±@hçÏÔX™ÊÒÙB¾¶Ÿ6pÍX¶Ðk³á0€ÁÈíÉÞÞNÝyíUçÝ
n3¥+‹\£QÒmá"Eù”U¤…Ni!Ò–ÞèÍFlGÝÕà/ÓÕ8zìQ]õ;ï~1ÒXôÐü˜G5dOÁV
[åe™ö³~,*ªIMc`eü~]-Šj Tà5-Üd­¶¤µ ¬RóY<}?"¨wk´µpÄÓZT[ûn&ä—
é# šer¤ìû`d=¸‰Öä¬øD‹Àš9Š„nØÌk2€|Ä™pl5¬=«i	¤Ööí'Ü„#†jzª™)äâåÐˆšð™ÁSÄ?š t?ÜµŸ¢suuoBìÚt-Ô¬ÕÖf@ª¡­ùšµÀZÃŽÑÔBtm$º/\¸{'.@u!rÒjÖ"ÊšQ™)kœ²Æ±ð BSlƒ4æ\ëäÃo}¡»ã‚2!y<<?:1ö	ªq7‘Xg|ˆ¼GBŽÃ\˜“fw.C/^ÙÙÛÖ¤¨sCF9x‹ø Íš‚þ-‡Nï¿õk`mJ0öæ?/8rôè»iÄÇPA6#ÿOÔ«
ÀÚ–^hNiV.û‘Çx²’oNqÛ°H+u]3Ñ¬Xb×9Ø+y¿’qŒàIt1ò Ó ‡©½šÎ`ñ_áXÅú±©XMË…6¬±aå€­¼À†‡F)OÃPV9—‚¡îÑ4º–#	«eUï> ,ë1­\ws´ÕŸá£¤[¦KY4:áe5Á§y7Ö’ÂY.P%9ç9ç	ÂÒÙò7lÈÉ~D÷¥äIŸìRÂM‘™y€SØU*³C°¦>rÎLp01ýZCd#746äÃ{AG)XJbYÓ–ðí_8u6)Zã43U˜B¢„qK»hÍÂ\Fk¾¶´µ-=r…4\câ<üµ@i»Øi-ø‹¼gë?E€5£³¬iî.˜ø}–f›Õ‚°&Vû‘K‚ÖÞÿuüKgçÏš°t5¡Z´bmÝ^d=Öc=þiíÁšÅ<ËüüåygU¸¦´ÿèŠÀÚ–H°«ãšùgî|µ"CH¬FV–n½XórVÈj˜²IÊ Šãœ•BB]™ÎL)Ô4ò3ð/é¤Ï2V[_¾”Ë}±4êÌ9`íü½ÿü¶ò'$­í¿i°öÎ;=ö¢3îÇ>äÄ/›)RSºJÈvdí<@s°De
dBfææÞ\®gh(º<ËýÃÄ¨Y¹gÆFJå™‘Ý¨¡¨	Ö”ÿ8¬)¿8>øìÅOWVV¾þôÓ¯¿þ X{èxûï‡Öd	©º5ÁšùB5«[;úÖæ1 rI‡„·VÃšQ™0m
¶þ~vÏœ´†ø6šžeTb¶"{'@¹­]e9¨Èìrtcßîô TÙBœ^^V+T+Ø+Õ3›òÓV©vt™K”åœ`»˜Ýƒ¯ý‘éF%MŠÏX×hÝšlBˆKtdUBÀETŒ[¥‰Æl3›T¡	X6-³þ:x®mÞÌ¼1`5ýÒÖ"MÕ‚ÿcÕÎ(¼©H[T;FûÁÃÚ™¶‹¿”‘ýû_¿é•5Xá[míW5sƒ¼™ÛÐ6äÓa²‰’²CÍ‹êïÚ¨épT”vˆ6nŸ.2;‚*¢Åj!X²‰Õ,È4¨iÎ|¼ð+výAHÓµ“«Ydƒ«È#'É…d9(Ró”ÆÃ¦^Wûá¬¤4¶aWK µ5ÒòYÄb$Œ«E„µ5¬æVÛ‹*mßeÃö{E\F¢6#ðJx°XœÝ­–j&§kAe»«Ò¬>ÇjOž<éüDüƒ)°æ:aïÐŽuÈFaãá•µHÍÚ![­ÍC¤d-ðÊÄÓŽU‚VCØÏã’%­Z¿ÄÝnå%BP¨jféìE§,²F«ÖÕ 5ïIDß)ìï¶Ûa÷i¹Ö­†ÝøÅQàºñÖ2 ƒµv„<H-B5éˆíÂ§A28XƒõDiÑ¥m¼Ö­·Ú±áûó wBÐiMŸ#Âµ8™Õjc«ój7ZëÝî`Å„4¸Ý}š›O>cIÐÕ¸4&Dq§OïÿiWšÕÆòæéåÆtëH;ÐØŽ.ÓRdMÇµÍÕÍªZƒ©KË×­çZÜJÕ¶ÄÕ\-5Ä8!åÆëXÔƒ[±SQxÆ	J$¦¨›š¬ïSÅñ¢Ò!ñ~,Ö¡Ô¶¢¬Á ²!»±Ý;iyŠ@jŠÉ”7õOÈþÑËEàKŽ"Ôª	Ó2m2iµÀN—Ó¢4ê«[¸@–Òòh+G©ªd¿TwG¿ÈJÙô8Èª
‹q´šŠâ<ª9ú¡‘¹Í«by|°Ü‘Õ,‰`\}ØJ•`M¿±NÌJrÉ¥HþTÿ€2ïËUÊtÔá'âi2aÚ“T¢˜Bs² ƒo?Þ"@žyoT;{va2Æ_™P`hÍ‰'°æœ Ú&:ci—ìBP¬ºü0Xó¼"Àšwí?µ°…¿rYXåÆOØà·«·ÐoÍ<û}ÖZ°Æé=XÍœ ÛÊÚ#wDûa¯kë±ëñ½Uk–)w@-M±a5HM1©Ðç”Š×|B@„ÕDiá@˜ºsïâÚýÅÞÅ••[·}€<F
Y½ ËJ`+ç²¨h:/©ãf×âž8~#vÖ(«øì÷ÆeIåZýàâÒuHí:ek„·ïßùÄ+O¾óÎÏi‹M
$¨v‚õ—M€„ÎTqÎ—ˆOÍáX<+“UcÍÌ½‰ˆ”¡©Zc._lTô–¤lPÄ6ÁîÁhjs##ƒ/}óé§w®ÞùæÏ_¸òþ
ŸÈWñ‹¿Ð¸†'ä¬nM”µ¿á1²Y‚#fÙ/?G&ô¾féÃê‘°lÈ~í9›k»6±÷¹½Î’=8MUÊ»÷)rc"q5jÊ6L$2ýÊÌ£ýöHä"´N‡9ôÃéF"}ø@D;ªÊñj½e°qËlÌÄ†kGêèVå¯Añ7bË™Ý©™‚Ê5œ U»×e‡‡S%o*RÎæ ­¹üGŽ2e‰ä?àÿø|hªæT56—”«}þ9›Ilì_Õqž}íÕã¹tê¨\—kˆj¯øº5Í• ¬ñŸ¹±“K¿Xsf`8ÙM%Lo|`¶‘«Õø+¹‚Hä0ÿ,‘NËÖBˆÒœ}Œå¡ÍêÖ`6Bp­yH{ó‚dcžñyq®k®º Ã§Ÿ~ùäËOØöKW3`s«vV³ñÃXÍâÿø]¿jkk¥5/¬EXßþ5¬æß*ª¬¹™-að&þuðÒaÔÂ¢=É}{ÕXÛ\ k× 7hMÂšËƒºš$€BµjˆavÄÑÚe(k†jûYA4-Á¹ßÑZ»#6uÅ¾ìR=¥ù-•iÇ›ø¢S°½FÉÝÆ¦vu¸,Hï¬ûY6j>	Ò¤5SÖ¨g(x’«©SÀ5héñqtµ.çîÀù¶²&ó}Ö¬fm6tZ#ì)÷RÖ kA_cP,ˆÖhM ñ½sGyŒü#iÜ)Ë@¶aÄïaPEÍ:¯í‘d¯ÁÚv›:gõlÛ	­I;òüEžDXÞfWà‡=ÿ°v£Yhb«´<W*?#àZ#?¥5K…dm"00U£#\¡L:…š€¦b[z“µlOJ¾‰¥¥¼èb)’"‹ [2‹™ÙˆÁLZ†þ@»’Û*¤8v6ŒÕ±¬mƒHH‚ÔÓÊdÕØ³ ¬–€5„5EQÔj»¦ÁF ·4°¡°4ek#²-JÀ‰eK¿Ô}·z5•ìî®Ôõã”3&Wr¾GçÔl¶PÈÆój—S×	OÙ”™T<ožT>×Á¿RSJe¶ÔÕ[;UÅ<v+c Ì@qšeg¢°	Ö¬ß7¯Çg^-:=¬E² }CìEkKóÔË_Ä~š³²„Gþˆ „N±ä”ÑZÖ\[°ÌY@úæjn×Á´*^€µ¨²æYÍt5^¾ø<fHkÖB„6k†g¬š·‡X µéXÍ%AúÏQ:Í.ö8V‹Éw‘ãÁ[¤Íjëö"ë±ëñ½Òš¹Aó´Çþ¯‹‹Ðš‚Û]Šmg·€j
"y{0¬I=k½ª!þ/.nÛ²´D‘EÈ‚ÔkT¶/è<Hö#·û0€äŒ‡ÆF9v‚Ó\I§N0]O6¯tŽbîø_?çâË_pï,FÖ~vèÐ3\³ÿ\îýÈj<,’ó6y±g4Ì’ã‹Q°V«ìMdcä1À1¥ôÄ8>‘´†nÐ5{¤?ÜÕ'FÆÆ˜°JaSÑšU¯MxVûóÅƒßÜùóþð
Ûû¼uÅhížÖÔmí[\{óMßpíoo%ÆÕ2M0ÆE)vüFicûØ3rëÎR±é'¬¨mL[Ô5s¡áõh
ák÷ÄSéâh¢Ö¨Õ
l”+s¹?dµDaBÿôt=‡1ä4>ý¹‘Ã¦ÀéOëÇžÊÔ—ëssµf,•ˆï™;RÊÕ—çÅ#õF®»{´˜ËäföÄ’q»ož•7¤
þRé/J¥,'JvïÚhM‹"ø?>@TóªZ´Tíü™sÐ™Dµ]©ÚÕO>—¶fÐF½ÚþÓçÎ-òÏëÆ“ˆhB5ÁšÑÚ;O¾Â±7ž¬«Ý¸a@6Õä¾=ªàPOçÀLM·j—iv”¬P}Âa‚ž±ÚX}£83 ka“©x_Ñ/ãfLd9c>ý/›qÄ|GœäjXaefõ#Ýiœû}˜°F 9Zó{kX°Š3V¨öðˆV­Z‹´Z­=Ì¶ÿwŠß‡w›Û†!®=„Öö‡ÖÚF#VÁÕ^Ü‘Ìsm¿þ½{}5£´“wûd: ›IYŒnÕ u``zY™kÄGÖø¤i¶ªÝd`M„„Ô~vËšbˆ¹7Ð,ØŠ8Ts:îò`iqR[]´ÆâYm¤‘šÔ5ƒµÀÑ¹HÌR>±êÔHEQÛxarõ¡°] “—è+µk„FjeM…=oXçÒ =¯E“ ±ÎÃ‹|kŠŽÕˆ$Õj*|ÅµMÍ@z‡¥x¯]‘S+6´G‡†uY>Ð»ëÊ‹»½*({òI*T}¤¶Üº	rÉÏNï¿r¶Y«BcÒ®!¿hí­fa¹Vð6#×xF-×:5ø²'£ƒ¾ÅjÊ–Å¯©^Áò*‡óä†o"ºÂ}gJ	!Eò‹uA›t0 Nº”	]E¢’„ÄÄc)Ä§vµ„YBú°Z5D%F58P®"ó)kîvRšûJÌ9 L¨”N[ÅZz”#Ò«3Šr%×Ê‡¶ÐÿUv6Jæ#wÌ8Ž±H†3‚_ã…çòXäÆâU»{¥ãiõƒËN5Zú°ãUE6ã˜’Às¹¢ø­T­S4ž€Íì·äg0ÛÞ3S†êpÆ ²¢_¡\ª¦âqêš{£ÊZ¸YG[5g-²ˆ¶výÔ$e‚âXVjËí¬A…4¬9XS¸+¤4@+ôVcJØô'»~Ëó–ubMÉšÒ ¡5@’
©eÁsXh§æƒ©ßcæŸžõ°ö¦O‚kQ]m±·Ó:ª?òmÍš±‹¯X[·YõXïuïÿæúgÖ|*ä¼§µ³ÎdÄ!'¬Z“›-ÁV› ­µÇù;÷èmÏ,ž
NÿòkÎjY‡uˆjŠ·ó²|ÌåÔl­˜ãôVa;>ž«p¸žÔ‹³9Î.mþ›óçïÌ.w´öy|úê4þ
°†´æ+Öfb	ÁZ~´a4›-bÜÂ™Í#uŸ˜kÌ5J*€[­XzôÑr‰‘b¶›¸üQú#—èÀšVeAÂjß¼Ôÿôñã_|ºrÿþ}®NW®^µ43§­k¤BzX“¤—Öþ™;ÚÚ—ÞÜ¢èÕLm°B7ë”ö˜¸uë£ÒÖ ³ØÉA–‰®­c¼õSfâÏ‹JÈ„‰Ô(#™DsfJÌKÆã2©1UªÖú&úëéNç ²›.\–«ƒ‡ g³%yÒS=Þµ©Ð:Ò˜É–+34±^ææ2WHt‰ÅÈ%ISU¢¬uv$íJ,	¬e›³5ä:ÓÕ¦ILMW§—ÕgÍ€Çš¦jkû_¿PÍ§?²^=ÿ¡2?Ï>ù#ãUÆÏÙê(°öã[çhÙ°}ûÂe<:Xsîý\º½òä+7é¿&Z{F¦ý’“œæ‡·p>;‹%h³)ëj.ˆb9K~,ÉÇß ¥Õ¢)\&#Ck¼_lvÌýãnk©‘-ÿbðL-Õ÷GÉj×ÒÝcsî¯³r3^ÂZÀ5[-@…ÀjOÓÕB`âsåÃ••ûzÜÿð¯÷ï¯°ý+[bÅâê½• k¾hÍ“ÚwKÖVÃƒ{ëK|õÁWŒúouÿÒ¥¯=õ–´R¾ym­
£–9måAQ8Ï=·÷¹6­=`„%ã5:°r×˜;B,e¬fLã²!%¶)72Ú;÷óˆ*kf0âýE$¬IYŒ¼q¿‚!›¹kÌlÎô®uFDW¬e-Z³¦Õ…ÙczGHÑ¸f°&ŒFàDFÞXã­Ö6>îìLgàéð•*8srYð{„ÕÖÔ¬ñO¹Ç*eí¡öýˆk|‡µïqîwqÕ§‘ŠNb[\¡·VlhçÎ!Ý^0§d5Ÿ"š wýüÐ•Þ]7Ž{?­9iÍ1›%GR¯ú:‚Æë‡N¿¾`F"¢1êƒ×Q\Û<w”rá¼Ñš{ÚyÓMa"±m([æ™aÕ@õl"KœVÑS©<$ÅÔÔ¡ÁVP”¦Â­6Ef MZ)Ö‘›8EùÏU²–…€`fÎašZb«±$õÙdOtàÈÏÜh>Ã­V‚?3"“.ãàŸéÏä@Bj(kØó±ÏNG²BGRBvýT°!½Uˆd²›bl8 L ™ÔÊ•Â`!–ÍÕÅ›UX1ÑYÈ5rul•P+*‡ËTä¢Â 0u^±œn×è©Û[IH›R)jÉ2›J†äžkÞRxXkÖ|næ"_¸â‹Ë“Fj==rÃ¬x¾11ÜÐ€×Ö¸þ ™„ðŽÓ4±ìGkj‰ÍÞM‹‚5Ëd0yÍ®ZUè¦ÌµG¬7$A>°`-°Z°Ô½svG/a=Övð¸è]û×…µõXõøcöÙâgÀÚ0ÛÇZð×n/¸ ÙDkÂ5ÆÕÞš„Y ¶Å¥ÉÅvˆf‡5#û‚Ð¾û¢x®šRQó8–Ï‰Õ8wäSuÕtöTìî^VžPÖ<»¤‹wîÝ»xvé÷Öœû.÷\¹áj°&eR#k‰Âl­ÂI¬C7oIu) íi"'U2cåìžÿi®1•-ô;Z#›0oÆT{Eå@ŽuÉvqlBÆ"„õ”&kß–Ù³4[ûëý¯>Àòªr!¥­kTBk?¢nÍ—­… ’«ˆ4ãáR«l -r÷Ø^ËœØºQ[
Õ6v¥ðÜ¸V¬­”*ÀZ"±‘-5C|e„ëØ‘Á‰1
½¹Ûž.ÓEDË*¿uÄ8c¹1;3ULsG9—Ø½©ÂÍÍì™å×žCr›åÏ#X›mSI,×ss³³q.¶²dBfIT¡ƒšìùeÿ¸¹Q«a^mÖ´QTùœ§£·TÏDQÍ,ú!2òÓ(Xûã?¿tésÁš•¯©’íüâÒyäÓ›Ï¼qå•6¬½cƒ6FÞ ÖøWpãy`mÏíÛ“ÉºÔ2ûµ‚r9ùÍòº%¼Ö&­9T3oH£-ÀªßóW¿Œ]im.$¯ŽÛlÐZ«©¬£kÎt”'[¸jº}ûfL±j)‚þØ@.KV+¾PÁÖ`-e5"˜èGu5Ðè÷ýó¿¤ïßK/¿tÐÅKO_T£Äã„®	l=xðø§k‹Öx‡	i¡ÃÑ’µ·Ýÿ]¬‹\â\>{ÊnJŸ"æ/^<µtçêWâ5#¶H&dDZ‹jk¢µãŠÛÙ­mD{N¬æ`í.zšeýA?,× ¶¾»â'Ž§&A4vÌ\„Ú-A2!Í`$4ZÊZàµ¨²f©àÊÚãŠ“†lž×’¬i°†­>.úÔ×!zë~ï	ª}ÜÎþ\fékÖx·5¸v2Z&wW)Cü2/t«yóÊÕmà€5c5-®`ÍFOj!Rá­ûkAi[`Óá]ûmù!âZ2iPB35Á¬67ß~:rÁm=;¡5ë²6@V$¸6,|ê}ñæ•›7¯l»!Z#œ°fâº²¢i•ÿü¡ÓÄ•+û__ˆOÍÖrRÏŽf¦4;÷î#o}÷]ºªá]R!7W®1™Píœ€Ñ`mxFÐ…ùÐT-—›ªäâÙ­dêùJþx’’6‘Î€$y‰©ŽjdCJRZ?“RRÿ’Ô\˜ªÃsšüùùŽnða¦9(†l¥¬ìq•­™Ô&]mp¼Ý{DùP.ýìãU’³î'¤©”2ƒŒ Y7œìÜI”ÐHšf†¤’dªVÞÕdŠ©¯¨æRrü¢6!™n©'[k°­›©Ô÷¦a@¼ù¶ãÀZEUzNÐûV/EgƒNªx†¬A]ÖBÅŸ%Kv" ®Ïž_ZZzïT/ fvýRÖ
Mö…i¬„þ™ÀïAGs¦ý"8±›¸.k»h²¤±*­ùÌk§ž?£P¤zco7"ca°xÍÏYˆ¦×ÕÖ¬EYmEi·æ{{Ds(Xk³Úº°¶ë±?DZ»Ž!$K[\Ãrñ61/P³ðÒš%<nÑªÙjV³ãÑX¼Þ»pÇ¿FÁÃ¾ cAÿõHkä
ÖŠÉZ©^É¹ÌG2Jò*Ði‚ËÉÃ—Ûzì•R;®_=öò­{÷ 5âµ3?ûñiÑçî ¬˜™9Aj|ÃJ²ÆNd*Ñ1<3C&åË¥ñÚ/wž@tKƒdñ7ÞZVMv­–Ï6s#cé´Ü7¢¬ÁjŠ‰|AÆF (`í ¬¦Ù—?½óõW_Ý·ž`îòÔeBî§;6ÚÚ¿üæ—ÿÓ‰k^Zc8ºyZêÚÑ~g/âaœÈ‰	fÐ{"3vÆv—Š°ÚÖ¾Ì`¿+cÛÝÕ×WÎ¥3SS‰®Êrz,ÇÈæTÅÁZª­¡-Sj=5˜Æ\¤˜ç·Â÷LÞ‡ux|j*ß?2­²µÌ:P£¬5€µ9dÇJf4ËŸ	XËYJhµ173€žÖÝ„v†›³U°ŒhlÓ…ÙœÌÓÐÿZ™,¡ÿõšR5Hí¼cµO°Ì
Öà´KÀš±È§¤FbÞþüLÞ{þEŸIð5ûî8ðÖûöö={nÜØ‘Þ¦~@)Ò<›ÍÂŽs5¸Œô!çÜÏƒEÁa)lÌäÑª9xÓ–‘ø‹'!;v-v9®h¹Â5ßKÛØMÁ÷LwŒrt„™R •u9†´5”KÐDÈJ\“’‘Ô¾þ×¿|yìØ—O¿ü’P#þòÒA±š¸íøE`Š…éÅ%§tE•µÐû!ÊÚûk>ŒÚž¿¼ã2°©ùz0ÖÅs—|%ÛšDÈ ­Eüõ08ó¥kÝRNZó°†4EŸ5ö³}ÔûîÉ¾»«¬Ú ©=â'“î¹ËÁ2(k‡´z/È›6zZ#LXÃ_„eþäI³+1ø	[“­ù?‡ã6°¤Äòq±°tM±ƒ°ÆâÒ Ãú±{0ñ­Ö<¬ù÷Ñf¼»*Ó\ûû6]¸¶‘Õ´naÕ:À7Ñ¶é¤Õ¬ùFk„F¯¬±z^ó Æ"°ÖýE-ÄÂB µï‹Ð»“`ƒ¯ˆb±I)o1Ä5g÷7ÐU8Ãð0YÌð\OçÂó7kü¿/\ÃRÖ"l±1Z»i¬FäªÖ¶51ù¥ýÈ[Â5}*ÑÀäÝ£Ü!{—O­w¦¢6#zKu3¶{„†ÛÍ4~ˆ1ÞIâ?°VÈ¥z‡bxBæ@š¼5T+*2±	Ö(©VïkWBö"ºÇ¨”Èq"%8ã3<)c5Ä3Ë‚ô}²udC*¥gÍ²ÃžÑQÅh‰(c]‚ÿc[]ÃRœf}×2£¸Y@Fæ#ÌZi¶<" \™ƒµÊôÏÖøzmëÜœL
Ë(z¦ã ôVŸFqÃ…ªÐ¬qvÎ&Uu‡oJ½Å‰‘‰"Ð6^2¿Éj³’Áci¡eEú¡ÌO*Ž1¥âˆ$h¹í
¬)kÆjþ< ×üÅ¶½”õmY:^XRBädO/ÿ
È@¼K^ãËáfw`‡éˆÔ¯b5—éÔ6“Û¦ý–q;+[–¨¿ˆ~ «YSO’Ø‚zf)]cXC6}½Új×~o.ša¯¼O,Î/Áj½î>NÔ	ÒXmÝ^d=Öc=~˜´¶x=t[û‚PÕÚíËó·²Æ9Ù>©&·x­ˆ0µ
·(Ç9p£L}æq=É~µN
gµÞlÕ’I 'Ö\6ž"å¤äÎ{¼žÒîj‹iâäõ«K“‹çîo[¯µ?œÞ¯<H`M´æKÖèI}‚ò´§¡Ú,°ÑŒ¦¦è‰=ÂXãÄ”58EQÏÕæÞz«1–FN*MLé=AR[ÿî®#–	: icôÉÒîÿâ¥AÀèÙ/ŸýâÎ_ïýõ‡ +RÔpíÒÖÔnmuáÚ*emzü¨ôµÖ„æ=FT¡&‡	wÌžxªÿ9ÁÚÈÈSãÕÊÆ­}c¢7€mmw%¿{ßVÜ¹úHuvFæ_9”Aìø1’,åÒcã-Bæô%þ„Uû3Ò öWŽ¥¦r 0lUé—·a‚¾s’Öjéþþ‘J‹Ìå\NcSd@Æñè¦íÁ€™=¶f/Q±GÝãZÕ0€t¥jATªšD5cµ¥ó¦«	Õ>g°,È?jà/i°«¹ „íÞkg†o¿zèÌâö7Öªiù‘ƒ5áÚ·ýs¶Ïl¿q#¾Aµê…Úú^s
¡MÊš„4…U‚ØÈÒ¶¼vz˜Ñä&>ó¹àx!»šèIŽT:ú_@L©µZ¼DÙ¦qÌ`|ÙvÏí‹þqõXsp‚½‡kâ¦eAÞÿæ¿ÿ6û’xöå—Û¬öå_˜˜®vQmž¤fæÀZ´f.[+­qXÒZTYû±Ik,<ynƒj!¨ÓæúßG¥µµ´æaÍ¥Bš¶&>Ó`áæ’Öú 3	kwÉó»«~Ù?íÃTã?ây-°š`ÍéI$=z¨9±8X[£¬e,l‚y¿/YÕÌ`D¨æ³`	©ƒá ã¤c#Ž0„ÞOô©˜ë¢ºš*ÖxHWkËjk«Ö|[lëŠ²æß-„ûMýßZIwO^èÚˆ’gÀ¶é‚`-ÐÚ7™‡¼„j,z„>k³ßJkÁÒž¶—ŸÝ¥3c6müqéiÿ.¬mð«×‡(â¢3zªÅöÅ:c(Z;Ûhµ†È†ž¶“àyYŒôöÞxææé›WH1#çñIeB› n)Ð7±‚<ôª¡š´µßþäÆmR¡§äó»y™Ú#XøO³*Þ–ÞÖ…k
±QÌ×är?6…;¨ÐÄ °S7	e6’íeÄ[C½°­ýu‰v2i²!a7C0ž£ÔZ¸BÖcËRÓ¼:¡'ÍB²XQÒ¤ó¡¸ŒÑmPœÐÍÍmêB/$yBŠšJÄ$«1—»HZ¥I	ItÉ'“4üDÇT$›êÞ´Tˆ$™OŽòÅ¼¼^Ü4š)•G+y`-ËI8K4Ú£åÔ'G~{½8çÇÅùÿÏÞùþ¶u^y~ÿÅb_Ú‚,Áp`èMÉZ(	
K¤!þ‚P²`4”¹}Ý8aÛI=©©V
œ¸©Çƒ±¤±$nTôÈq-%› AkØ®ÛÝ2^ñ*€1)0³Þ¾Hg€ý|ÏÃÇn£™}­Ã{Ÿû\’–(Ù¾÷~î÷œï1WÈJ}‘ã›µÖNãª‚Á?ýt“ØŽÐ‡•°ìÍª>f…¢µDLm–ƒ²¬Eì¥ÚP’‡5âj|`©ÍÎù>°=^†ãü!úíõ‰Ø:î"\*[$á’Àæ“ 6ÍÖ»¿g›P¹¶>òÊ'ú–ŠÉjq~iWˆ«yz“Nƒµã^V{«½I|þyûÂç÷€µ=C}dÛ?ÔÖ<«m
k›±›ñ-FLZûÒÃZ[°æ!Ö.°N¹c•ï”æPLƒMý 0Þ	%Eæ‹)`MÕcJöZqÕ ˆÕÌh½Z‹S…¯5vTºìdi:[eÿ‘òrWû"‚fßúíŸp¦>¦DHXMÒÚë,òìÏ6€µU”ž²¼úóÙì²0u>šEa{œ>k«ÄÉWfÔ&û•Vs4SRåZ9YkZ©ZnûH?[p­Ôbß/¾¬u¯Ä'rÿW\ýìK¹Ý¿¬q…úÚ½`
	­Q·fáYMÊšÊÖ^ýê+õ\[´~×OˆÖ„m ÛQÖö}Ÿ:µRi~ãùÁfe»Þð£k¥q•°Ç•Ù].æ*ó³³“ÙíÝã£ý9L«ê3…Ò>®¦¦€µÌ(Ò\A¿QÃ Þ–ÕÒôßMÕ«¼ezº¬Pç!­­Nï;Õ_‡dkÜ{Fa›«ÔËÃ¸B&Ô»\©ì<üÜb5œÁzS;årTsa¤\E¬¹Îƒþ×„Õ:¨€aüh	npâÔöþûb5í›^)Íí'Onò~oK½Ö„kf	©o<Ã=nu`×\”)ÎM–áÑ.\ü“–‰I›qšÂ·ÆÖ `¡†g,¸e3ÓÝØ•¡È ¹C¦ímÎ^„p°¦w	ÊúÕèÁ46‚¾åLôä“ƒ‡þ4ãpÍ&†YX×ÛÇý/îÞ½ûéÑ#G?=…¶vdÏ9¦w?å³Ôl=óÅ—)Xó¬öš)k§¿²F\|›ð×4šZƒ$¤AÒÒÒl¡}ÑãÒÚFÿþhÙš/\ûµg4¿yï÷nIÉgÀ!VÃèðÚ9ˆí»?\#ò;ç”‘ˆèeÄÄÈ '@3sîgG”ÃÎDÖÚb5C5ÖP³ÖY4ÀiZÁ´Pµ&X{ n¹1X?F½!‰¡s;¾3´¶Ý:bïàCSmJ“ê5\FÆ×—¬!«éá%5†ÐeM¼æ¥5”µ¾ú ­ía¶ãÜµG¹vz50Í‚ozÍ$!\µ?¡S†Ò ×÷Yº‹@Mo*kÂ´ˆßˆ”µ­=[ž)FóÛA'l´+"…F{cp‚,"åÙ3Üi¼&ZCYÛ}åÌ8M¸†¬†¨NõE¤ÁÚ3vøÛï‘	É?
Ö¦Di6"®MO16ä
Y¸æz±8+µ¦fö¢/èªÜx*/VÂhS*‰À&(IŠÊ‚¬&º*ä| ¶!´%@'³6®È7¤hY’µZzL•m.Ù‘%°cÖláÁ@Ûúµ&$_¡ýKM«‘‰Kddãp–FåÚ’Ìål:HNdUéŽªmË[$Y’©œLÿ…:'Zt¹Dª!Š+Á%E'ë-”ó¦±±î½1’Q‘ÌÔÚ›hRàË†IbË2gèªhÕ$œ—Ê—ÑÙ¬9«‘­©±
%k:¬'‰ ¬aM¹ˆÚa3+ùóíöÛí!~Ãå¢êûÐ5÷*„Ê»}ú× ²­©«w1È>Âš'5[¿&¬Ý¸²tÃÝ€zûYYÅ²aO™C—Ö|0goæ¸c5‹³ CrÂ½•7oµï-Ä{öXoúˆ°¶éÛ¿›±ÿÁªµë
g)e­Ý¬IZ³Ø'¤+Z‹ä>†OhëgAƒƒÏ˜ê	Ì$®Åõz¼LÝššÐ$u^,º^£éªÎŠ¤ÅãÝg'‘JÅ¤8wË’·pÊkCE÷|Ù½ÖÞºIéùË?¦-¶`-6CràÙ³3ùF±8ß*àKrY‘Ÿ¤˜jæ 7ðfÔëy¶±ºÊM²YN*3øBöfð<Î©È(Cki®ºj\vŸRµš!_úÅ/^‚¯F¶#kW?ºuëËýƒ‡Ž~yÿãÛ·¹>ýó›ò„üÙi´µÿ£°~kŠÐû+gáo%ÐF;h°ÆìG#;ð†4‘bµÉùy$cÍ±u–‘e©DßëD­˜ÓÅ`…­PVÁZ1Õ#\j®Åyµ>;W‚-Éþ©gÔÝ{D°†x8d5ÇF¶çF3‹”Ó§¦Wçæšét!-¯~ÌýUnÕšÉoÉÖ[…blïÃTNUóÛ¥Ã‡ç¦3‹‡­6´–®h àû_{Tó¥jœž=ªS‘uMÕ: ™+\³˜¦:5,!‰‹í‹¢µ[ïãà¿Èù÷°¸ys×c÷;Rã¬4H†›Ön<¶k¯º7Å°vãÔ#²ÜhR\6‘V”æ2†ž¶ÖÔ§1q,¥ÝS®‡aulƒc¦ éºë„3ƒ,!¬iË>:›·q¸¦ë«´vdß/ØÛ¬½øk´ðŒ%N›¢ÂÚíŽ|ª¸ë`B{ÑD6 î(a°«vYÀÎukAYÛØ;ØA=ï4|ö” ÍT5Ï¶ü˜¨¶piH°ÆìÒ%Æ•÷åùðÞØOE-!…kž×4¼Çh6‘T­O(Ò”5`mû!µµ?üîdC®9AZ;'†bŸ¬vM´6á´0(Ë>Ø„SÖ¼¶f¨úb¯ã~_´Æ¢šµ+ì1$‚÷£Âö' •r×ž¸f/ R¢µmÝ;h¸¶ã7DDY#¤1+Ho2¢QÊš‡4¾Gg¶çiŽ^4#tèÜš9c.ÃjbZYtó	"þ"ÖL+óÐgm\óá]jÖ‚w?¢ëQcì‡ª=˜t‹$Ž¦†c+äB›5
”â]„Ì ‘ÙTÄ½)ù¢‡¢¥¥÷N¼uì™coý5¬ÖI„ÄÁÿ¯ ¶Ž¨~L¬&aíØÍoÿíÓØíÞkÅi­íÕN:ùÌ°MïäxÛèá±59„µ†'§vÆ¬
j˜ò)sÑY¯'Ï¤')?Ü?`6ªÖ
Å|’”H×H­+.s¬R	³‘xRØNVÓð¤x%]ë°ŒPÍÁ™ç4„6~Aì¸<¬U³8C&äÝÂÀ±Ÿû=JÔ!I£1NRÔePÖr¥S%ég¼TÂn$O ­©¿]6—ÍÁdtV+×«°l†'ËZ2ŸÈ±`Êcä…y¤,üõñü˜´Oã¹ÅOEiU•àé‹'ºéÁEŽlc	úðVýø€ £µZMÅwÖ»êX-ÀZ4Þ±-x«M.µÛKç—zˆX¹˜g­ü,KSsÂÚ^. \«µ>ÁšÆjë^9÷Û¹‡ÕãZ¤d»à‰¾+7žåX&XÛµteiéŠjp£°ÆAµÎèÜû5E”Õ~¾ÕÈ#çó{ïÜ£ÅíX´†²¶^XÕ6boÆflÆ7®ZS"äÕëPšHM°f¬¶à=F&ú&v°y¡,[žuÓ¬‰ÐÎØÊBÓ˜C¶|Ñ`Mg“x¹¨srçG¥œÖšÊ¹€Öª%™J‘?/H`¨©„—áÄÐPX«EaíÛ›U²6Ë·œœ9;;ÃY¹1w|¾PhLvé.cXkÌÄxuo÷¹ùùÖÙ×çfbô\›iÕ15¦¶[‘LÿHæÔ Öýýûä32288>½í£êë¥}(k;F÷}‹mæè—·îxt´ÿîŸkk¶ëÓÓª\s´öWdBþ­ù­½JŽ$ÕÑô3b^•ÈÖ¿˜¯5êœ<‰t†×¹ËB±°ª›³m9U=ˆ²–¥F¼<“Ø>N››îlwvr~*ÎÎM©%|VJ¯®ÆsæÙœJNOUGøktz-œš*˜o•Ô¨ ¤×Ó% «Ü²í‘1œVŠ¸³lËÏ´vŠÎÇj‹Ï	ÒÒê¥ÆVNýSÁT$Xõ7Ö[õG+Õˆà*b FxXÃZ}W%¦½¯×ß_ØÕ¾ŒºvçÝnÝÂò/èJíæ‰ŸR°ÒÖ‚Ç—‡µ¥¾ÝWúH¬êR¥:êrê$UˆUŠàkµ®x5-ûì1WªfÀ&}96bR!£u
Ó³Ë”é›®-V³Ek¹Æ3ÀïìHh¼À“¢–Ñ>×UlfÓg ÈL¸ÆÌ£š×Õ_°ö°$È;ÿóÈ!kŸáS8íèÑýì[!Dj_(ÿ‘ø~»þæ×JÖN¯cµ ¬þš´öK_Ðañ¬Vc5þRa `šxhaáü•ö/o‡<Èˆÿ¤cÃ k°šhÍ=¼°&U…!ûCY÷XÃVq+Hv­$Ká’m¸vNlÂF#LõÑÖ*ê‚²f¯¬	Õ¼ÁÈÍ ¬«uüEÐÖkNBs´æç¡ÜÄí¸=>’m—×ÔqÛ6$qzÄAjzÆj&¬ÙãuÓ×X@5§«!ª™q?ÛZ4 T?RÑÐÎ-lËË@!pH†(„­íYŽúV:XÓêÄ3b½ä|TYãáÓ £YšØüvë¶/f)ñ³$$âb‰Å ¶Œ†Kÿãb5Î{­3¶.Õ‡AEïÞ®÷ŽÑ]á@&Û&åAZ&$Þ"Öð‚5X­¡¶=ûôc?Øµ"×$®Ad×@5m'IïŽÖÄjžÖ¼%d1UŸž&±|`—Ä
†±€TÍTY^ºñƒÓµjµŒ’¹T,g0Y*åÉšlJY«ò$ê[CzÊÀ ˜•i[£¹Ž®†ÍXMñ Ö–©(C:SsµšœÉoô®": JòÏ ®aÚŸ%SzKç° Éd³l:üdEpX#²€¾þIÄµUðùÉr|¸\Ið]ùÁ4DËcp	š¥Óôd£ÀŽœH9¦è²î9J#`®ïTeªB¹D
Õ'O¤0¬L”W¶-Ê…,rCt²Ckb5_¹X°Sk{O~˜~kPÑ‹S4&.²G¸Ö·W°&Vë#Ò¥BúÌ9‹‚)ÇiY48^‹*kKKh¯oã•¬-õãüÄ&û4-n&AFcWÕØªml°š­(nõÄã:*\ †¢F›k›±›ñ­Zc!:¨f^º^[ãŒÍâš­‘!¾ÖØxX/
Ò˜°“‘a;ö¶8¹!dgÖŠjX“â\Vâ¬ÖWÿšaËÒNM5­©Bv•J/‘¬Zä‘v{¨kÏÂÊ½{:Ú;‹‘gp¬ýíc?'{fxöì¬–ì9¤Î×Óõb^‰úÃ3°Úì Oç†ã[óóÇI€<€¿ÿ†¹&È¢¤¸±í0á¹îqšcŒoïÎw;§‘_ÈÃ3äû¯Þ¹óåÑ/>ûðÎåwÖÞ!KýÍ'd3b°öã
þTó´V¢HM½ ZË5Ô5FÁZ)Øààè DÆæà(jÙTcµ4Ú?8¶½;Qž$ÿñàŽ±JqÇøŽlqì ¢íæj Ø­ÏÏMÖ§š´^SíÙêÉùÔÜÀåÊÙK‡ÅMZŽæggš«±-ýÀãY¸pª¬Ñ”M6Ï	m-°m[auçôs†i‡µIgkÀš«R³Ø˜ÿª)éeƒ©ÈEEðô°æ í·*Qsšš"?ºŽ¦F“µ[·n-L¬¼Oi¢Á+´&»~´µ—ÑÕ|Íš‚“ð]$ëXPC¡"¼^ã2¢VA=­Œ¥â)u¨ö¬¦0jÖWÍ°kÐ…óàg%Ü«cƒhi%‚™žs^ý®à­þ´¾€á¶±›b|dpÿïXlF‹Àj¡b-šùñ­ÿ}÷næpí#FŒ§k$AZ ¬YPÄ&Z³ÉõYQÖ¢ÖN/Hƒ51ôsƒªYA^2‡‘1žd\ù\ÂšËƒ|ˆ´æ3!ƒÍƒV¯ææ18ÍjÖ,˜Áo¤A:T¸Õäã¿ÌÞ9{RÕX'X5é„WÖžâáâ˜7ƒ†zB¬Æ"NsM±½ˆwœ¬±ñ~«&š3v>ÜšFQªfÍuYãáXMáhx=*­	×¢i>ÍÒ¥`>h´¶¼¼¶mé¡áò2†„F¹÷-oç#¬·ƒü{È+T­±œÕÆ÷Y‹kÚB$L"kÚ€i=C[ÿ¬1²F¢+6Œg?81€/d\ÙJvØã·õªÅxöÄ3ü9VƒÖŽIYã0@ÐaMAµ*´FØ½€§ožxúåÇþÇÃµ¥k¨k'µµkóÃ“\§^}@k‹®n­ÞÅQljgZ#×ŽËô½½ØÄŠE
ª{g5ü:êÅÞ|U¦W)+Gë²6ƒ5ÕS'O’/VÕ(§J›jÞ&ßHÔ&füØžÕ"•jÚ6u¶•¥Áu•_/ÆÜ©ô†Ù¢ÆG!`©«dãU;î€hÌtì’VKhr¢µt–Ï“g¾+Þ(Çb*.'|¬Á3qÎÄp%XVÈ§¶Ô8CÔU‰«‰ÛÄ†Ì«	@®ÄWNË´¿‚pØ%U°B¾§k®–Ö=1õZ+—ÖâÐÚ°ƒµ ¬9‰~eÅÎ	Èkm¦¹H²Ç"_Î»	¬Æ(AMÑ'``Û+vÃÔ¦
ÖÆUÂ³]Ô|DKÖd/rÈöÒ•+jí·ß0@Ó8íëv!fg»˜õ¨&È‡³Ú½!§þãŠÖ.­o±&TÛôíßŒÍØŒoÿ;Èß@k¦¯¹nkÖú&<¬yJŽÛÂk>zº8 dlÎÞ_üÆCQ®6S½IÌ£$¥ÑÅE	åb	 Ó½S²Æü{­t)ÅAœ4z^jýæâJûÊ™«‚5…<F^xãŠÏMZûÞH•À_äIÕþ(Z«–c
Î¼1:e—‹…†vçÿ×ëÇÏ g cŠ·ä91>ÎÅv‰l¹îîD%ƒÐFˆÛ2¤AîƒÝ¶àõA(òÐ—_¹zç_?üìÃËï~|ûÝwîãÕ`M´F8X‹šBš´ÖOÙØâôôàÁÑ~”²ññ1e3Òª‰G©]Ëðyø=d>:^(Ì¯’É-ô‘t±œÏÕQÍžØ16žCž;5UÈfj“=RoµŠõREbZ«ŒïÈ|yÅÈ<@ ®S ?f–Íjy¶Åœ6:À]•û¨ÓÍ&Ö¶=R©¶ˆÉ-[R“s-þ”°Tã„É$s…oªæQÍLE¬T-zfÕ‚¦fa5jà˜K}Tí¨&»~ÿ²^ü EM0¬}Ò^¹zýâéŸ˜²Æ*X“Ü_¶Šµ kÏšÑMNÏOpÈÍ{Æ™9À¶FNOjK¢<ÓWãj¥*F3H¶ƒ¶ k>\Ñ«Vs±( cß0LxdV‘ÀÚ¢YI.*qÒ Ï±_0£Ë%çáOùGÆ±:ÛøHÿ‘_w¤Å	jAXœ‚°¶¡6)Jx<´_°±ñ}ÿŒÈæ`Mi—Î=zæÏ kPæ`-’é;b¯o´v:|c)k®^ÍÇU§@°“3&ª‰ÙÎ[r¶öû”AZã{F«Ö‚¶&X³E¼ö{Müc‰„GâûlL€5m™(7‹z«<i5iÁ!”>Šo…íW¢-Tc	ákÖ¾'¶áš‚–ØäA¬?~Ë·±Ã‹†Sn¸¶ü5ÊÊÖä0B³èn¹ê‹Õ‚u¿_­ÆÊjÖ|§5¤µ k×\h"D}Ä:¬-ó™dÉ÷ƒd¬=²}Ç#NáóŸÓ¹A2Ð<-(kRƒÏlè< »ˆä’¤4­6øyµj=Ë5„ŒT¬y^‹+ã1Û;Ü…ƒ¿Ä5¹äË¹_ujbPg«æêÝ-gÆ¥÷ì¯I<vLŒvÓ,F0íÿ±c5¬û]›5û×e¾Àß~ùåçß«;5Å†òOe¯Bl.V9Ò7Ê­¯î¬{Zs°Ö¤¬+ßhÑ‡Sí°ûÄi|Lnðq#1•‡ð8Êµ
±|‰(pB²èB[CD³LÂJ"½ˆU¿õ%c/™DO+&¹5|ÑpuÑÇs…hm9ÉëRÚpÉ’](‰j¬¦Š5á…i´XÓJi)iUÏBo9^±ƒw‡ÆúOù# GðlvšcƒWòEÎÓ,³Qf­pû¯Ð(78í&9ƒœ Z#ŸJT¦Éˆ¤.Ï~†ª¼þ]:Aº†4XÃ«9-Z#åÅú}Ã•|Ýf-±9Sc	­…š5_±vãFçŒ°«É¹Ÿ|‰öwµq¦ûIòmø%˜³K@5 ­³5VS¤&ëÚ«=î6pÕˆˆDÄ_D¬f‰o¿q¥YMÔÆŸ:Á›@knSÏjg]ò# æQ-Êjì™tØ¾««É	26D kë]ûÔ«}¶)¬mÆflÆ7òù¯×…k\µvkj-V[°Fk&¬1¸p@Â§FÚ`ë<å_ì‘®¦ˆ…ª¶|Þ­Ö¬ãñ"Q h%õêTNóEk…žb“,Œ³)X+Ô+¯]|û
]·o]TœÆ}‘ÎØ/pãZ#’Ž¡ÆFgËåãóµÉá*Ø‰<'Š…·O±xFy;{ [H„5ìžëš³Ý#ƒÜ¨¬V3#c…æ –k4µÖk##`špMÞý§:ôÅ‡·¾üâ³;wîß~÷_ï|®\È?­\¯ýq]*äÉ“'¿’yÿß©âÕ¯^=xp:½=7–šìÆÝm\5âÙG¿ÿ£'3M3áÌøX³9ß$_Ò:bW²‰4V¯gªiõÃÜ‘šˆ”’!UI65E1ºd«!:)PA1ePÈs‡›š7Wi}Z*®M¥[ÖRu~Ç¼ÂØxºi¤·%Ñ˜›Ÿ'iE¬-æ*SÎ¥Ÿˆú?º®j!ÿÑ÷¿&:¢Úû faùŽÀš¡Ùeö]Ø†îÆÄLGîì^aøåSJ²P;\õÄ&¬=M«Y`‡M®³H„-&ø%¬6ºR\Š4”]kåj^U#ÜfQ«3è¾æà¡ A$^bÇÉizÒ©pÖìëŠ¢Dh%–0± #Dé‚H4ðÀÆhçÚO|]X‹ÐÚí?Ýµ€Õˆ_dÐ··HÒ"• 	¡Úd5"P3›‘aÓç~"b0¾ïÏ¬qÍº«qÇ`M3g-B,¨³™Ðb{ÿwÑ¢5Âz­E=F‚¶f¼æÒ!52I—ÿxð‡Æh;¬	Ýk?ÄÒ0d±-ÃƒfØÖ[Ís1¤P•ÇSAYëXAÚÆeAº¦Øþu²¬±Eb"Àšñ;´€ÚE±tÓùÌ)k>Ò;Œ("kØ 5—	¬go8iOS¨ÊV„dË-×´U‹5¼MÔuMM×˜‡¸`}ÖÌ4$<¼²6¿QYƒÔ‚²¶Ôa´ÁhdÙ0í/¹÷Ge5@-N€hNb¯õèÐ¼[nˆi„º¯õì•ƒ?iï½uì=r×T’†¶¦ÒU»iã„µ§zÌnÔð¯ó…·žzõZû6´öØ÷v8;S.7(]“¸&VcéD9ÖØYW¬·ðWjAVk k»ÈÉ˜‰)o¦œŒ÷ê× m‡ûdLÁ"ðD¤\Œu¨–‘H²+&c¬-×x-åH(å9m«‡4l¢#	Áš3”ÿ=”ËÚ¯Nô†	$º–«H“Yˆ\ŒÀ4žÎHY£çµù er¼<–Ö)ÃéÒ}ØÆƒ—ÊÇÉTÏ£8ð/Ô,H\sœ…©wÁÏRà––5öÖ¡lQÝÕR|¶&_I£­!OU%ù‘bžÎÕè¹ÃÙÀKk&¬EÜEt0q)ø?ÒdmáJ{å:7~Šü*ãI3=¡-ÇMWƒÑÄk>¬×šõI÷Y:MÍÃÓ>`Í»…%kÝ],G€<È¾‰66í7è‡Ý~#¸AF)Í¶ÖÎº¨¶Õ‚'ÔmËìÝ#V3s‘=&¬w‘Mam36c3þƒÒÚŸÕB·µ<FÔÛõZ«	Õ"ÚÚzd[7×ŒGx†­JÖÌd„pÚZ¾ïáR D1OVd\«T
:7‚ÆVÎÁ)’"kôbf¿šl4Õ4»¸pï^;6‡
¸b°¦kA.Â8—ÿ”Ü8Ú¬ì> X;Ëã3yhíßŽÿÛ+Ù|ynfÆÚ…•:Iµè,6©HT#an«@ÑÈ¶lFî5­WG3#ÐšjÖ€³‘£löÉFßÁ[rÐ¾øò³>ûìÎíûwn}.Vû³ÄµŸmÔÖ¼Ë¬ÆC–cÿèÔÎÄøX-•ÝNšc¡4:JÉK†z)°+-ÿýZºÚ˜oŽ>±ã Øú+ãY®Vs©êhf4M“¬?
	ÎØ¹Z9Áy»4—}ë[´¼.V°ˆ,¥ë¸i5ÆV“4ÅT‰?sª¹JÖVt¼Æ:Óò"y}‡°1iéëdê«ó­éç7SÅ©²ZÔª¿áQ-’ÿH\¿þöƒôG«IN…INÇx†<ÇËHhb5&ÐÛ@íÎÊG—Á¶woM|ôÁoïüA	PB5ÙvChFkòƒ‹À¬†ÜÄ’ágù˜`­†°Öj•ã)¸µÌÅHhˆ­A<eáY‘­ã&‚ˆM°¦‘ç9Èøœ=½8hÒšNr›ÞÐ¯¾Ú¾€5s¨ºÿ(Âšý&’¹QXó5k·¯ßuºöÏŸÞ:#dã15XëØ‹HUCSã"ÈÂÃÚÏ<«EÝ =°Ùó?ßú5×ržÅX­mw¤Û‚5Q£3ëÀ`{ÛDkÖˆH·€à1¤5Ò<³±½à`í‰ÞýkŽØÖÖž`03È¡àÛo& ‚58|¤§5`Í¡‹‹gÀ2oé;­y‚öÖ"ÊšwÑ×bÓ(¬Š²7:CHÑÚöGef	«ë~Vã4÷x¡S³ÆêI	Êš¯ŒÓ×ºOÂdÝk×d+b˜Æ j[£R¶ïX›˜'dKƒ$„hëÍE:˜65ñÚšÁZˆÌ¦’5ÔC‹oØe0ÉÛÒã¶×KÁZddÑÛ³w@Œ&Xãâ[m©N¼õÖ‰¥¥coñ×¥£€…R¡¥¬™u¿IkH&Ï<…ú{ƒ=žÿ6	ñ¿zÝr!­zýÁš5Êž2bkM–[²¼=­-î”OÖ˜®W[ôÑïÃ2ÖÛCíÌFz’2_JJY±‘tÝe*;ÁXyÝâÄ%áJ}±Sy|EôÁ.YòìOapT5Bh_¿!Ášv á<­av%M{å$í“Ÿ Úp‘³y‘Û€²,Em¸¥¥§å8dõeeüßA|`ƒœ,V1É—›‹…2õÐUD»äd‹ó`3/ª_bLÀY2å4Ò\”.Èý?^£Å¶Ý¸Â§¿Q(•h€Ž­IHlSO‡Iz°Z«š{S¡L­IX‹œ¼d'V®_¿Dwˆ6ÉC’ÕHuq‰kÀšÂsâÃ×ŒÐöÒLeï.ùC:»~Â¶nìƒÖú|"äXsÄÈAmiB]±ÛK¤cBó±1‹Ðu Pí¯"žýB5oÞ[¹®B¬†kGW[ð%k^Wcù/ÿi36c36ãIk.ÒÌû#™¬díÂî%'¬1x¿~f½>Â,ÒtÍíÆÝ­ÔöŒÙb½ñX93·*œ	ÎeÒÖŠæÔ_Ò!ŸS_ºZªöÒ\ÓžIjÉ¾r½ ¬Yhÿa!6‰ŠpUªJbhµößŸ9qóæÓ–É!T´F£µãùääqÅ+j®SÄÃ=ž§¹3°Fg±ryî8bZy–˜i´ÝÝ †ÓXA';µg¬Üàèˆhm|ddT„¦žk£b5˜ÍE?–‘Gïüîþ­ï|pÿ¾£	hMýÖ"¸Úcæßï5e-&²ÛYn‹ã­OÂ#.ŽMDMñÊE~«¯¬6I£ÃÖ„KŠZ6[ ²’-Õ«‹4>›j•Ç2™fq²8øähº9,ì“Ýc¡ŽÑH³1_|éðôà¢ñÚáÿ{ø0[àÃ)kˆnÍTrx·°’4#t´éznzçü‚Zµ5¶¬í,«W‘Pª6éJÕ¾Þÿz…’„ Ic5Uª™¤h~D53aqùw.;I|û¨«kå]âÖÂ­î,´ÿæ½çŸç†ºpM|f°šÛt}ä+WbÀÚÒWXÜ´çoÖ`­1ÙP[ˆz•p´–Î™®h,bzR£÷!”ÞØoÛçX…hŒ<˜ð¤åD–„eì˜j§/d¤–ô°6öâþýØ‹hkZ#¨†®õí-ê/BÜþÓ!újw`6»päS8mßK"7óî×rTÁ‘ß~l+‰ë²†Œ¶Á»ß+zÖ~â<ÓÚçÙp™Õ¤µa6ÓÕ¤_]p°F°ëÐðÊ•;ú¨NYEk§¬GH£5ðÌ&Z´žød»£4­LcÄbD™~~÷»;Îaþ¸¾ËšÊ	k{m¦r	Ø:½»ÛÞÒ—­0uÍ¬ÙÈS×ÕXPÖ>‰ÂšÚ¬÷ì·§¬15f[ÛÑýˆìEè·ªý^sñ{ßjÇúšµékÖ:ß–øú‡à§_^[CCS"d'$¨-_ÛÖ-XÛc!TÕy7Hášç5ÂFæ"îýÁfDã…¨E·C¬=ËË=C]QYD¢ÊYÊÃªI?‹¡°éjüÀ0ó½&¨QÄÖÃœ£'òãÏ¿@Mî¿<¯Ñ_‡SÖ¬hcöÿâV¸fêÚó?Ø;®‘HñÊ+'é’-¯‘ÕÖ«Š“óúÎ)ƒ5Ã5ƒ5”¥Ó;ëÓSÖj[{°B«530;ÙÓS$i°@"HŒÓG1U°LAò÷KrÚH©ÆZF‘œ¨d‹…æ†ãq%ev‰‰.ô" ÌS?aÍOÖrÀÜg©|Í¦r9 É4.gF½!WÊ0IXQšêœåâÏØFÿµD&Ã¶-[E‹ÓýÐ.#U%§4›u¾Ë¼Zà…|¼ÇÏ@,6[«ÚTº–1:5ªfãõä¸ú—ÆÔ¸»¦[`èkŒ°ÇÏˆp§¾l9¯‡µˆ»ˆnù¬xXS½Ú‘sd†^¸¾rX£”=È¦R(˜†j6à@C’lŸÜE|‹5h.¬Ùýã½îbÄWÉbDÚšQX{Ö>„Úû/í:/²÷7–úˆ(¬±	áQM7CüÊPÍÉj°ZÈô·×>¿×îió‘ùoxaÏäí(«­£µÏ6…µÍØŒÍø¦Ò×b¿‘w›õ¿}ò{kØ,-)éÅFï_+
cÂÌè,Z£0Í¦ŽÖò× ‚ÜžIª§¨sAÎ'NVÓ\ÕY°b.Éù]Áä‰¬í8'ä‘K×1@‰Í\ZYÁƒâ"=¨i¶Æ¥gé›OÛÕŸ¬Öæ8ò+	r^¸ÆI$OÆuL3s(j33³gÏ"­¥3ùáx¡U&g¤ÕX%¦Õ$Qpt4—(TÆ1Áj‹\Hœ!¥¨bæOøš5V*É¾¼üÁå;àÆíßýËÇï|~ëÎ›ï	­)ÒyBŠÖ¼…¿÷ïÿŠÕÔ5­´–HŒã/"s“'ûÙÐõ2«—ËX­…YH¹Pz²?]­ÏÍàf9ßªÕëUR7a'|øË	œª¹«I^diuq´ÿ[ý´\›‘©$.þ³óƒ/Á] Ù"üÀÚ´
¶´Ò4¬˜š+'jMlH2¼õ¹©ê©ç¯®NO§+ós³ÒQÙSõúÔôÆR5ÎŠÑR5E 5MN†Y)*Ûe„µN±š$7æâ¿eà-ÿø—?j·?ºÃ…m¡×¬ºÞû)·ÑIuua[TY#ÇeWÏÒÞÝŸÜ¸ÑÛ5¬,«^²^‹–J^5—z«ZÖìGÏ¨$Í…lE¬ÉõƒB5v\F£´5ÖÎÆÅsLÖlÏ1^§»ö"Á&3²-§j5ÁZíÚþý/„R¡b-°ÚF{‘ÿôé§ûïú@;»pDÐ†$´¦g¼Åˆ46©gÏ“IÍZ`µ‡:÷‡¶Ø¼UñKýE>Õ±”®÷°¬]Ð¡Í™KÆhHjfÜdú¼ÿqPÖ&­èDÇÀß-6Gq;Ñ‘Ö\î£&&´!V}g†ý›úª9ƒµi(Ó¡¼Åˆ`-’ùŒ‘šo±æ6Î_„‘ð&#s~}¤Û7Yknt“mž(”‚¡‚²¥ƒl,¬NYc²ÆbM±=«>ts¹õ­¡¥¡ÃwwpmíZ÷öåeU­Q±¶ììN‚ïÿ‚ë±¦Šµõ-±×Ik„½¶QY»b“ÒÚ–-CKKC[ÿ¬mýzÍÑ5`4$MMÕ(Ó³fåÏÉaØÌ 1küù¾OzoœxïÆ¾®ÝÇTµ†÷#º›ƒ5»7Rëx—
×è˜ýòËØMx£hmçÔâÔÉVË5È>¹ª æmFdìß¨s€£yd}frx!^žžiµ’½e•UWR¤E–qxŒ5”'H‹JŽ' ¦þêº¦»ŠYc?¯s^­–OÊ,ÒYp±}?ÕÚ5E
ÙŠÈU¬Ù4ºU®*ÕÿlÉkµ§*¶Œx-WCWËñT½+3˜Éªl,“I'ÆÒ™tZ«ñ©JY²W>>þd±¨C8Yàã«¶ŠÖªqÍ:Uãœ9ãS$gÖ ´"V!x|‘ÑRÎ¤Šò¬M*æ…	‹“Â‰4—«mM‰ kÃ¦¬yaÍxZÅjFj×ùïyæÅs{zzø*VC»,¦„lIµLðÊ¸ÌÒ ù‚j˜> ÿGÑØ¦=‹Ý?`G˜¦Øk>9_kçÛôXs±Ex>-2œŒršHÍËj°¨†°R 9 R°Æ'	R´«­]èj×%¬}¹)¬mÆflÆ7¶ïw]±£ÁâüUç1báÜ¿¼uÔ°ŸUcTY³™2y<€µ¸PÍ\GÄ^7ãì9º^“…QÄÊúr,"¡ªU¹Ú&£ÅU(p!Þ»°òþÅ.zX{ÛŠÖÞR.Ž &­Ájœ£ÀP+7 ¶³Ù™áÙ9üP¸6'§Èv“ØuÌ9™¨4æfÈü«Ö%6‘þX­Œ÷ƒfq#¬IW{rŸµZóy<¬}ñáÏÎ\úð>ù_þ—ûwî½c™¯	Ö"Ú\F´ªrí+[vH&L¥²Žî{²d„hvXQ’YN+€-áŽ·2ûKµâÌYN†­Z¡Q«5%sq­%æ¤¡¥rô„«®V3¢ƒ<XZmòú|k-ˆ3qŽ”RÆ)YX‰ÝÕ´iâô?>ÌÁp]ª$O‘i˜¬Vž¤€7€œÖ¢¥j“Ü=¢šoªìk(i¿¼¨gïòòehís´:µvû²ØÍ”5pm¢ïo¾³0ÔËIø±çi´öòc4Æýe­#¬ñ¯t‰àR/.ÿ‚ÉòL™Î­…¹P¦©U	ƒ5_¸Fí…•¦Ÿ®=šBÏY;l	kNYÓHð›2ZÛÇ.‹»é-PcãfÀþÚlt³ûÐþªÙ‹PØ&T¬mh²hí–§1×RíÌÐÄž±ÖÅkö<0']Í^7ïþöuf
þ"Á`äë´vÚs"´f°æ£k¥0ÉXñóÐÚÄ²Ú‚yAš¢æ66ß9sýó¬?ÈÒñkoã¯P³å— éâ»ÒbXƒNh‰}ÎÙö{z‚Ÿ˜Úê4-=á0*øA>+T©‘c<Ö›Aâ5ÿó=¾kAÛŠf%JNc?À°†ÌuîÜšÊÖ¤¬9Z{àÞ/Pcõ¡™O„4OH¶ÀZ`5LkÛŸ 3øÚZ7°öÈ¶m–
ù‰åG¶á”É²¶Í‹~~²`nÁ¹¿£«Eí ‰€k_e-øŠË~V,û»z†öÐÛ0öÐ&k?H\)ÌZ„ÔÇ˜Y¶0éßÔÚLDcö"Ìb»Û…/äÄR/vë½OóÏ†¤GSÖØœ=l'½Äê¡¼¾vó¦ËŠ7\›?Î}9‘ÙÉUkí€MÃt 5¦Ó‡ëEŽtÌZø‰ðA&gI‡lj±Yº¢¢QG5ÙHuõÆ‹Ô¡Á6…šÎS$>Òüº@ÉVº‰}±ø"N–™D6šAN‚™Z4‚¶Fê$²š2sÒÌHdÄ3Ÿ¹ê×t(á`Å«cÐÕvieoÌ¦û_’{bLiY(S…üùkURé–Cpÿ1»4ã>irSwít³^¤Î#æâdcµ…º•¬¯¶ê•ºúÐP»’‡¹b	}UZ®‘×‰mJ‰XAkÛº¥œª%’fj©’:;7(‹#œ°æaÍŸ€5cµ«—&¨V#gaÈÿ
ø„bŒzµXß°SÕLríµ¤›÷­ÁNdªÚK!XsJ”æPÍÓZ`5û
ÚÛWúvYjw€2VÑ'wÿêñÝ4p}þW¬,FjÕ¼äÏ‚ìûmH“°kfÜÜELWÛì±¶›±ÿöý.RÈf²võÊáY-´ZóPæLû7vÄöÔ"žÊZœÓtž}Ýè+…©ËhƒŠ6Œü¡¤’[ŠSežs`SIô0\g@<ÎŒnä]ºuñ–FîÝ×NsŽ¬ýõO±	ü§ŸsXí(kåyNÓó©Ø9?2ƒ´‹ð¬5?_ÈeªÉø60œ/K‚;‰WUéMFÓÝ?’×–íîÎö£¬Y£5c©Yóêƒ–ùé‘«û÷Ýýðöï~wûã?[¼C"ä›¯™ÍÈ¿ûöØßnÍKkÓÜó-R1Â×UÛS`íG?úþx÷Ž'²:ó5€µÖ+­ÕÌ“%”¶9T0nz&ºQW§ .*ðRÙÂ¢ü1ÌŒàÜ_ëMLÎÎªmjlªÖM>¿PcšjµÊÿcï|_ã:³<ßìþË¼´…-!‚ÞÄÈ¶0Š˜ª©B©-ì–T%ÄV5uÙ9Ûx[%ÜžŠâiOy"	÷º{³^©3täV2’Ý’ìM£fF#Ù†¡S¸in&lv;!4ì†ý|Ïs?¹Ñd‡Ìkº÷¹Ï½U’Jrro}î÷œï)RžG›PB-xÝå×À´Ì`£>–jô&ºøÿ/U¤æQÍ‹j¬J~4õìæµëÐ°qH/#¤%@2»QoZÓñ-÷ŠF}s‹­Ùf.Â¯¸Šµý¯«Å…~è6XãÚ‹-ÎÃº-‹à×™®N¥ËG‹Ô)BhkZˆˆÖÐ¿´™œ¦lGÎ7¤l\¥š/^ÃwM´­NZ3üu_á"øÞn÷øÈÈh !r›°öV\Y{töÁÈÙãÆd#ÙülyR;«yi-g‰A-	ÖBÉZÜ_D¨¶Í»ß)kÿ9"µ÷´FÈZuˆqj¾pÍÇIg;fí¡OƒŒ)koo³ïÓ$®	Ø¢Ç¯Xxâþc‰j¢2 l¼°¡ÞÒ®6Z#œ¬¦Á)kÞÏ?"9¶ k‘²µY;õ¤ÓZ°y5 š¬ ]*¤`-êä³˜Ad´1X3?J›)6žÚØà}Ó{¯wƒôÚ¨ækÖ‚´ÆÂàº¬1Ö·'AÚ\Kðƒl…×öìÚÕ*Œ…%wíyŠc<qÈCšÛø¦ØB5·ŒÛûçé•µe‘ÙöžØLùöÍÕ”íÒå<¬±~=Ädr!RÝ¸˜rb–êfÑÒÝÜ¬ÝjiâÃòü›”­µ9ƒÁ}ÖìA¬Ý;uÊ	À§Ék{5’×îs7É…Äp”ò…$¨]dÕu-Ða':–§sµ‹®UdDvw¦Æ»[€µR¹™V•RZbZš¬ýJ’CÕ[aŽA6ˆú•¡V¥ÕG›ª•ðQL™±ƒ Å<«In„ì%‹*X+öºnÓÉ^	Àm¹,+»~¼Göò¼|üêv«›šÚúg@·,§&+ab0™${!é|R´—6P–çWÊ¾E†Ôp%¶”¡°îq¥·ÐwM59õ8åŠ”ÀÓQíuÊÀÚh©$Çþâßž(ãÜŸä·´À¼¿ˆ$`T;ìYÍ×Šéâ°¹¾„³ÈÚuªÖê]Oê÷Ôuu¸¥YŸœ°f}Ú8ÀT&¶ŒÎKD°æ+×PÔ`5Øjû=°)bÂš—ÖæqiÃgÖxÖã¶ù+?{å•ŸYØÆ‘šP-¤@¾KDZ{´Ð·3Ä,R ‰ÉãÏ¾³;±;ñm¤5bÁhmöØuÓÖp…œWP¹æ\FšùÑ3Ú×"ChÇ.L(WkI4'}tÅfÄæ˜+›Îð‰¶4§zŒ¶*yfû¸þÏÍ¹d`=Â«:±ÛoIá4œf)®7k&ÞÖÞ²ÎØÖ5õûÀÚ+>Ò÷O±‘²f°¦OÐÚ‰©éêôtu¬VÊ÷ãùóçOœÀòÒh¶W9sD¦Œú¬¡¼¤÷î9F©ZDk¬ä?Êg„A*dû™OwÐríó‡ÐÚgúœzóæß8SHŸ	IlÃ5k¶vI´ÆJŒ>?Ú3×.\³ôÊ“êšDµüøøô*DFOV†I€\ÍÉúhëÑÂðØèÜjajz<Ÿ‘«EwíHŠ|H¨n˜b<ÅêèÜÜ( Ö¢¤AšÄÍAg¹|o‡j×æÈô|ºÂŸ¾bÕÀ42kÑVÆµ«Úv«þÛ’uiæ‚¥OÝt™Ê…áØ[[ðÙÖlÓÒùkéK6[Ö>\[ZjÖµœ{©·þŠ°2/­±ÆaM¡r5%Cö%T’ÞÝ™.#>&÷–‡‡ó|¨±‚5>P‘=¤Šü~&%FA™ü Ÿèj—Íõ1´Ãngð¬ÆÖœ#Ù5Ò…%°Ú$°Z{6Ë| ]¬–í˜…¶ÇöŠµÐì,\þû‡µÊÞ ´™™CËó3ÔÐÓ41QíÁéM»àÓ™³Kë›ÆLÛhM”„µ`1â¥µ7Þ#Bn¤¦THVóìŸ­;RdÄkT‰]9sþø•Æve-ž´5àLƒÕìaK'…j‚³}ªa±aGëã}Ã žpæ"¾šÏˆÔ®ã6&ÂÞ^PÖ¤­aÍ7Åv2[pƒÔb#CžÆbÐd3pÐf!†øé6ptqïâ!¤µ]2Òwi"µÈ»?ÐšašB5l¼,jŠ~¨—óô+k¸=ò×Ù»qÍ„µEQÜâ^þ<´âîrYÖÌ`Ä·Yó¤æíû§«±øˆ+kÖ–CwlV–.ðÂÃZ`µ˜²ö/sšB9îLìF»9¦AkØ‹HekN4³ÓÝÆûÛðyóÍ_œ[ú!UÉ„`5b5Kƒ<wêô{Þ~–pÿÅ¾ÉÂ5,§¸\(Lc§«=)¤Îdm çÝ'¦ŽÖl víÇ?“EQ.?| ó0ÝÓ(ÆÁ¬¤¦ xcQ•VÊ	rjÐTÝ‰š0–¦–>j½Êæ•ˆo‘í•y‰uÆ61
ÖõBÎý,mÕh»qnŸÖ]ƒœŒd6¢ý$~ü»½à_Ã–“¿?‡Ü	ê·j*Pb'’æë©Sã²k¼iÆ$üêîK¦ûhqW¨b}	´å¬3¶ZéíøÕÓe»­¥·Ÿ´²s?‘ÓHRDŠ•%ï2Ã…:ÀZ¨Xó7ò,7ÇþÍ¥uÌEV•õ3i¾ÜãÕŒ"3 àCðmÀÚ“Õ4ÈŸ‰Õ 6PÊÐÁ†­Ã´x¤7î'žä
Ì/YÕÚiJrí6tÓ˜…8h0M ¦Zµ «yV£Ïª+0þä“3´ìjé"­ÕC¤C5­;ÂÚNìÄN|[i7HÂÑ°VÇF hk‘¿¯äåÔé+×¶³švcF#‚µDô2.Ä®W¶ÝëSSN®s9”³°VSÍšÝØë£I6°VÕÊR5ª^“b7ÉÅãÌJC`‰¶fÊ‰&­q‡Ö~÷Ö|ÿÊi°ÙøøÔDw7Åí‰Ïÿ|ªœ›ž†Ç¦Ç¦&¦èŒ}áç'ÔwŒlÀ\_Um¡kÜÍ{²sµá¾§ö´g3xw8QE$%JØNîëy±ýÊ§g;Î®Ÿ=û§/î~ö°±öÅÃ›xøk1ZÛ.®]2QíÒ;ï°×ÞÁû‘s¨jtYcí9ºJ—Û‹UÞÖxñ·’9=¹:VBK¦¹(bDVÇ"UrR˜+eÚ;J™Þb~j:CÇšÀs”Z5P¬”-UJíJãlïçåü©¡n1S&ÿôjµ$23TcÒß‘mÌþñ_-U#LTó¨¬­¬ k.,ññºÁš\!Y-xÆtµnÎÖg›Ö>º±ER$#]³è-Áç™¦ýß»õÊsNZÃ°Û³ÚOî–éem~ÿÐòüû‡›²p×m¤Õ»5ÅG•·¤«éö34Jj‚F…‡ò?m52ëˆÊÔÍ!7A/àhô„0Î^¦Hfr! <^ì(/›Í2HXëÈÜÿfVªmó‚n¿l<€ÓffÎÏœ?æÐÌ¡ù+çµw^9<a˜F™š6×8 CÕ×7™<«ÅýE®q8.­½Pí4‹«[cp‚ŠZ][K†dá'1—¥%BŠÕDk¾VŽð°F„4HÏhr†d®…¸ÿ#ïœ !§‘ÿØÚ
¬©ìn4ŸU\ áöœ5äÌÂZ×PPÖBÍšèÌ+k5k–I¤747“'ÄôÂ¢c2ßÛ‡½“C[ŸZ<´wQ¯{:=µ'RÖ~¥‡Ñ
Ö~G5aš„5ÁÚYöka¦‡ýrÃmÌ@i÷>er#B›e….>­íÙ¢q(ê³ƒÅìE¦X‰éª}³¤a¶ZU®†+|p|tÛ8­Xc‹f
Ö(!¦LÍlF0€ì>ÐÒ}@	u]“]d³ýO|ëÔ-`íÎ{:Áß3Xû®§5mÏEgI7:û×ˆW1ò7§‘çž{^—ƒäB«výãä%k½¦Ò5³ð×¹í¢ÂÁš®y€‹‘tYô‚c>ÉE©€ÞÄ„CÂ.de!ûb”±õ•qI«ÔË`Íä´5^¦.‚µ;Õ¬j¯(#bñŒüÑÏ¢~kƒœGPÍ’þ¯N.¤T4¹¨áç`®W¡[wÙ^`b5Hmw:Í=+.h9h‹+®þìúï…öx—ÀZ"µkw_g¡H2b¢sØü"‹JB(æ›É‘”¦6w¹&4åI§œª\ªLy9Ã`É`-_«yXî"žÕ®£¨éò½¶­WË0oÙ§B&”9É@Zé8”†°¬’ qî? Y6¤âyë»fÆ"Î¶?Ä6aÍÑÚÂãée{Cf72ÊÓ°…xN„F08L“¦æQM¬¬E<¬5fë‚58Ç•P°¶MXÛ©XÛ‰Ø‰o'­«ùDHÚ­á!h‹óA—
lûÕÂ~œÖdžÖ˜*Üa¶„Ò˜.¤òr€@ã¢â¹Tãþ´––—bp(âI3Î|J¾#v±(]Y_?S­ž_W"¤Ý¹¿&iíŸèk¾jÍ:X~É:=–›üò¬¦>ÜÉ=ñîT¹<EjŒ.ÞÐÕ&¦'§&&'WKGk£c©œÉX…tªP¢t-WNîiÍdÀ Ñ¬Ó.JÛ×ÚãêÖö=30rv¤c [ÈŽ?Ýýì×g?ý%	VóÚa´¶Ýò’3…¼Ø~ñŸˆwúG]ŠÎÜ‹ÙòÉ—ùÇø vòÅöú©ekw{æåþ©©±Éiºdc3’.÷ÒBX¯R»öÓ‹ E‘ÒIÌ$UÕ¹!›eq”=a¿,¡K5d´;V±üø¨ˆ7ÿþjuµ†–FxX«E©6lëªC5.ƒÞÿ1êªæz¨mÝ¾yýýk·o_wµi×¯aÕOð”5Ä&¤¸¡«­}H^d}¶±Öµ´EµÚVãÃ¶Ökõ–&¸¾)ªvïÕ)øõ[üÄ÷YS[\Ât5kº³ŸNÝª€12oêLð‰G]fóÃ9„µ’­ÀZSY›«\£0Òü©Åe.o$ÂØo°æu3ö×9Ä1ë¨F
$OymNu#ììÄe³ü÷üù7ÿUem[³3G°öhéøÈùóÇÏÏ˜R²8ƒ·ÈqÀè,q| sVvýl µP·F‡lÅJÌ^$æ/XM´&e-Hko8XÓxÕœÜì³Žgµe9öû¹Æ%±ÈF4âÊšIkÛ!½´æ×üAdëI¡™r!¥¦‘ÜˆÔŽ¹qHáQ‡}ŒÕ66º®.:´ìÞT€5'®ñ—&’-íTh³†ÌÆBø®w¤AkËÞÙcøó?‘5‚5ŽYøº6ém"´ÖÅ.{=¼1N_´>kñ®ØžÖ„jnñYÑC°æ`Ðh-ˆk|Wšnïm¥~O²Ýck‹¢IQå¾}{Å…5…”µÉnUk¡ËšÝnÖXã°"mË°{×"tÑÕÔÂLÓ¸väWà?µZ#€”Î¦Ã[¢…nk’Ä`!AÁR“"Ñ</–>MãkõÅ¶.k÷þãwù¿ßÝ½ñ#§I0Àkoèƒ¸Câ4ò3]è 6-X#8—AjsÔ5uÎ&œ¶fúšóRÂÆI¦VÃ'ª¹²øIný9Ë–¡¸&_*ã_Ù’Py5¶b9Î%ý‚6p‹®µ4­0ñ‚	¡9EMs) ¨·äF€¡A©WØ:ªíÚ^3ïÏ²ÁšNGÙ£G³:ñtô“¾þZ†¹þ–ö†Ê( LçÔ¹¿c\Ó}…HYÛ;XJ
ä”éÂ·ƒÏÊ8¼T!®\Úõ#(Ã9.$¹‘…ü`z1)RK¥øW34—J±Lz§`5`-ÞÌÅëjfL4®5Öl×ÏÃ¯ÖšÀX6ÀZ"5ÌŸÔj'âž¢Ñš×”…ØßæŠè¨Ù¸=2ºD\Õª³1½ü‡®yQÍoýh“ƒ¯¿þº§4Ã4Gj_EµXÊú#í.tuñ~MT‹×«)"VÛÖvb'vâÛÛ÷‡ª5hÍpmMÀ¶Tâ0ÄµÉ˜ûh‰E¬›g3“Ød™`_éŒ(kiü3r’Ôr	2M`	Ò-€·>©n5™‹ÀfðR~´„KT^;PŸK«9
ËÎÈbÄ>rÞ}ã¥WO‹Ö~b´™÷+&§•óåääô0Es*À¿?W8¡Ë÷…ÉÉwI€|»’ k¥c=£ ÌÅŸ®V±{O¤{²½•JuÛ5L¶ÚN˜ä -×Ž8Žµã$qRElg?ÿlíãµßÜ}øð—ÆjãPX´·áó´FklÆìè;Ûséâ‹ÿåÙ—é«Û‹¤Ö?ÐŸ9ùr{eðäÉ“Þèêj¾€#d!©·Ð“ÖV¡‰¿†m…¶\ÏÉ,+Øò•æÚ)K{V}ÂÒ2j¯½Z4¦!¶v)v£?Í­^t˜”5¯©±:Rûæ®j‘T5+D£$íÆµÓ\oËÞñÚ545âÏÖx‘Dµ­$B¢µ5H#]«ïÞë6»6ùÊ·†š›Û”¬»Ç`Úšï„-T³NkôZº² ©?àS^3^Ïæ77ÞÇç¿Dz°¤zø
÷Á£²5º
éyo/êšÁšÅDF8LcÔ¡ÂØˆÈ2”µYðJ´ŒkÃÖá¢ÝÍúÕ£M»Ö"Qè™YaÂKÛIÍ+kÁ^$î/B¬ÇLëÇæ—1¼œypyäüp†¬60pöŠsëg¹r\­é€ò »´ô·1…,È(ÒÓš"^´æÓ ß'Ì¯ÁlkwN/Í^9CÕZ(šEb#Žf-!rý¶±Z(Zs?u›´vï«¼Æ6ðÚ,-±ÿ“Œï•‰Ï!©°›Z¯Q¼fèÄÌû…k²‚dúxCø¨…­CÉÓÕ‚¿ˆµÅ½ÖB£5#6gÝ¯>ká'8lc)Ì5ñŽýö–^˜áÅlÚµ±8³îµw/°†¬F$aÊš'5lûˆ`élû)Xc¬óƒ©c¨ž›qÍ¯÷¾°!$ç%KƒÜ»hï‘ÔKìEáùð°æ@Í/ÍRYÔ‚ÅˆzhÏFbšù kî8 f&þ‹_E´ÔÝ"ÑÂàÂ&‰nÕBk¶g¯›u |tH`íDwsÂ+P÷O½ùæé÷Ný‚ÀVÂÂú÷Ù¹yX»vÝœØ•kíåµ÷<®ýZ;!£‘éIB„Æ}1–Kc—VÑÖ`pÍeBš‹¿3)tvVjØZ¥§ª«ýÊ‚TÆGµ»›Xå5ÈYÛNZ€A4ýµ¼H«¤“F«ºyX³ì,<@X2ÍAGÁÄß¬Em‰6i±YQNørÞ×YÊ „Í|ù©LîµCªB#Õ<dÃ–ìîÞöô^rôôù"þv‰£x×´´†µòUÜEx"™Pÿ„™Iõqã6)Â[ž»£©ÝJ‚”$ØÒI“pªöÊ9'À9ÊÌyÛ)È”“ºf°Þq!WÄ`-–¹Â²\×kÈk+Kù´O$U&©`7‘Î¾°FÕq(Wøú4J·äÕÑ\°ÓÖ¬×ZÜ·Ÿ¬Ú!5Xóqz™~DÒØHS0ûžXí¯cqN¤æP-Þ]Í©j+Ÿ<jÔ[+WëÚî-Â§Ù²Ócm'vb'¾­}ÿæßª7ö§Ö6×Ek|óÒWnV'®=A5kq:sÛØn3¨Æ£¯Â%D°Æ˜'²P ß8ÍWT•¦Õ‹¢Äõ°KCndcÖúúT#H)«„§¯l®_!cÒ`í¿RÖø0ÆÙXÒ—æô†V®V–‚váË/'ñrT2^ÍÐÓNüü)œŸz÷ÄD.¬e³%»³ºš¯¬NL¤žj=6X©õ÷ôîÙ“ h¹6 ¢¯}Jƒô19v¬Cf#ÿúŸÿæ³»w…j†kˆkÎòŸ®ýV3\›œt´F{ìK¨iØè˜öŽÑQ&_É¼<0pò™£ér®)zO¾ÈEº§§œ. ­•0iäQìhÏ;–Ç­à5ƒ5ÌFÆú1ø/–ÈtäÊ˜,„˜EdÛW–ã¡nØt×Äi–	–±q®sŒ6ùæüG]‡½¨P0ƒGg&rSy&·QÎ‚S¿`»‘ÍÆ‡®m®k½¹Ö¸Aäæ¡¥Fc“öÂVc«±ÜânÀitXr¬fÕ¢>k¾dZ–7O{^;¼ùþþîû˜Op}ïN©Ï,´¦Ë…z÷©²#“l«i¬D8óÌÕá!a¿ûŠËžï8ü¬í8 ÓQƒ5÷•2Ü,•î©iØ®«yhòÂZœÖÁŸ„Â´ãWêWÎží€Õ.?8~þ,1ÂOúÃË‚T\Û€:Á;K« Ì§AÆ•µ ®iëó ½%ƒµ—DktFXãaÊš:—Õ—ºÌb„3ÔVP§ê³¦åaÆ¥5kqiÍÂ«…ÀRMÖ~¬!Éo:Â.VþtÄÞ‡rõ$\î£AQÕÆŒPíªe(.RÖ^âvŽ§@5ELYó¤ößÝ"Z£)vÀA­ÛÚ®yŠ@N!b/Q×6À(º­í¡)6¨ù,H[½´5Èv¨(kàY<"ñPÓÅ=HxrÁ©ßpV#O.nÙXCßn"¸Aòð!5Í=.Ä­û?ªé¥B2i°YÔ4jm‰”EzríŽëi‹Â0Ûõâ™¶z’û'º)VëîÄD¢)
eDvŠÔ°î7iCòð'ÒôÜ9)k®‚_ Ø_ýÕwÿ‡ÓÛÕhíÎ
×‚÷éL|)ßZs¸ÆËIa{åyl!éäâiM1JºûÔ4’ŒÖž†ÔŒÕ¬üKÕœN•¤èÿa®ªµ-§«ùJŽD=áwÅjy4´bŠÅËD?×&Æd:©îŽÀš(d7.þ)ilÖTšçhÍÁ†×pL#ëÿÁ’Ì<À6¹ŠØ¡+[“µ»Šl‡nepLîíÍµ÷Úé
÷~b7ÆEPM)™%˜-]À9D~#åÅ&©”ÁnÂ1* J×\ÓnT5Ž¥š[ÈQ×¿V®B%äÖêîD“È¬ŒúÇ;-£þ•QÖ8Rñ°&VÓU"8AúŠµ…¡úŠòá×@—ÍÍ+)Uò¥¢ßd¤~­›.¬-üqÍj¤û°sƒdã&®ášTïw´`m¿C56ß˜ÉÍ<<E$¬±^“¼vY-PZ¼¶;ðc 4VÇižÔb¨æû‰_~ñhaya¨­s%A²,u}½ö¦pTûýŸýûïìÄNìÄN|ií?„¢µ_kÐÍî‹Ö–´ÆÒæLF|AZ€µ@k~×ÃšŸB_-‘¤v™Wé&È4gþZXKäÄb²ï§Ì¹ ±›K+÷1_Urº©ˆ7dž¬úÍz"7:Z:Ó0eí“·¸2¿ýx6#­ý5ŽÍ²ï°–ß•ÌONCF¦.¸¸÷åÆOÀLö8v¨j-UÖðàê¿5ÕH¾D;ÖºXËög÷ô¼ˆ˜FM÷À‹ø)"©fš kÙí#|Œ>¾v÷ÿ>¼ñð7àÚožÐÚ[f
i´ö;/®]øÒ©kê¶F`àÿÎ(÷z¡5$42•‹=åB¹¦èÈddÎuôhºPªŽŽZÿÑÚh±V9Úz,—ÆsìXÏk~ÙÊtµj›/Á ðY©6Jªcö™žgÿòÙžÁ±ÞÐ«Æj£üšXøÏé£‰HmÔ' )Ø2üËþ‡·YõÇ\E 5¬DÀ5ÁÙ‡×¹L_G=ƒÜØË€ÜÖRãÃ¿Û¬¯Ýø;JÖ>ºÑÐ‹™®ZZ¢÷N}¥>[jsWQêÕÈ~"ùI¨&éÔXÍHÍÃÚ=}ôFîØO£5jÓ»ŒOt6µèÄ³Œž@ ŸºÈ‚Ò\åZ¦CºËœ¬EŒÚQ®c»3áwÝ®9¨ã
ïþ(>›óþþÀ1µú·g9¬¬ù8~æM§¢ù`ê—xCìíÊÚÚqõÃ&À0T³9Xpc~~„{T¨=`%)<;ã­ý¥«$K.„Šµ¯•¬)4#AZ{ËÕ¬i1'ÈÖ;‚5GkË„%?JLc¦XŽ¢¾ô‰Cµ`Cé`-äAžòšÖöÐ·È€$RÖŽ´Ê’žÐÈjÏ(!±kŸ­¨…>Õfu¥~’ši“ÖâÊP³æš¬e‡‡5¾£1 LK†‚ÀÅ&*k—ÜS†i¦€5‡j¬Þ_Älûmñás µeQ¯µz°–´Q;ÂøIôhuß_‰¢{-’Nk¼ú)ÆX87ÈÂB¤ÕóFó˜´f#žÌæ±ùW‚èÉ±2š‡5›Â¨mŽÕl—ˆ`-E3lt´nìx(dŒ­ˆ|ûI„Är¤»I›¹Ì÷« ìšÚ›·ÎÁlºicŸ›òÝŸX›5…ý¯.ÐoùÕ—Þæ,ä"àš‰k¯¿þ½ìïîT³hM®†ãÈ´5^ƒÚžÅâ	`»hÁÝ+ÆR¹Æ8ZÃ·¸ZEWãÌY¨R;\ šÊ‰A.u¯)o†")Ø'cý\±„4qæÑ¤l$–G Ÿ kì­…®kDô—RŠa/'§ÈþrrõiYLûÙfŽÕ<Û~Y¨¦×•<–Å¶Ÿ0X+	Öv[ó¶"É\ð×Ç}?OŠ%¯Jsß”
¶2yáI ­:Ü=\±Ód±¯©(ëJÔC º³À?T‚_Fìi­ÕÒpf¿bZ×";T©«UãÂš»H,,v¨Ø\ «o76UÁUŸmFp4”mÊ3$sè•¸Bö9;Èà_v`¿C´Ûm¦jþ0µk¬ÅjQ¥–.<®mÏ‚œ¿ã\°€´÷®kjø?wêAÂ~Ï©Ý{kŒ5#5‡j_•Õk›_<Ú¿‚²fÿç…nØ¡¶‘š+XÛÖvb'vâßfß¯ ßšIkõõ…ûÐîþ^ê¬å8Ïþ@kq:#‚²æ_):+p]`MìE…*^üèg©"¹ýµ™‘ùZkÌ‹Ì‰"³RII•­‘Ísßµ­»{?YøµÚ™FC~×Åjo½ÍÇ±SçÔûõŸ)í…DÈÿ­ªµé<×\ù	úaW«hR¹±‰`µ>õK®åÈ‡œ˜ÈUÆò©\¦ŸÒ¯,?F5ê”Õ[â’x¬'›ÁÂ?y4Û.ZûsLF³…´Vk¬#Ÿnýñãÿøð‹Ï·~ýë‡‚5Å?Ç|F@5EÜÄÿ’Yø;fSdÇèè T–ƒ¹T/@3ÒÞô×ªXöWæJ…a:h“wyyô˜°îä`:Ÿèí'I³§45U©ŽbÆ¬Íb\íqÕ¨dô®Ÿ=9|aºpìXo¦¦Žjà«%>ZF6C£äDFáA-–ÿØÉ%ØÜ˜C©ëª†lFOµÛÝæö%¦">äÍoÅj[ènÒÕ¶­#Áéµê…_ÿV½¹^oknj‘²¦á•[tÅU²ã=åA¢¬)	ÒùA2×…øœâô`Mïw†šˆNëµÛ¬[Õ}}ÖáµXYEZƒÒÙ¨+¶9ŽÖÛ‡KttôÆÚÎÏtLlvý‘µ?¬FG^!ŸÑæ¬ÆkµãÇgš…Á¨5k–­®}rf¤XÃõÑ@]Îvþx–ÿÿœ¹ž8ƒµå+ªX»"­Xû&ZÓ#¤AÆqMU?
m¬\`C^Ãº¿ò2%œŸÿ²Ò~VÌ_$f¹MZû—qíž¼µh%kèkGd IÅš`íˆŒ4@ÚcÛäVÕ¬9XÃ®ÿ«b¨Ë$5kJ‚ÔjôS¶¼êÝ 5ú,ÈÐÿÎ`­î9[Í‰ÐËÍ“”bÆÃo7´µ}
]{‘àÝoºšåA~à,üƒÉÈo×¤¬¹ï‚_rÃMøCV×*Xa¡EÞæS¸›t‹ý—Ú7Èy±ùFj×Ü2G5Ik¾f-µåhtøæõ4SíZœr¶Ö<¥1Ú.3j	Ã´ÃÍÑº›¬|­h†Ú`Žy7ÎÒ[ "`Íý·rïœäõ¨x5b5twóô§éOÞ¾îœ!Râšl!px‚Bæé±
¦˜®’	iþÎ2xøÑ	ðÇÄh'­8åò4*asa®³­E¤–t Æ”{‰ÉfµT+Ë•aihª>O%ÈéL°çhÌOÖontá-YÊ˜õvôCib3?cL2ä3ÖÄj´ZëèuŽ‘4³£VÞ6Âí†ÇúHy¤l)-•Ì¥Õ0›w­r5e¯€^yŒG:S²J®jBZŽû¢Øé2Ò].oð±‘ŸY®Ð&Ç§üúNW_²å“ìžÏŠuX»vM×l”µš­u‘*µQ’$ÝéôWäV,ÑlÑâã°ó€4ÛG&ÌÚÀyGh°šûŒáº¬†ØXb°„µ;œÌ,ÛÐ”µm1ôÞ¾wïuGi÷4žr æI-Žj´V{ôðî£•…ÆJ×ÐÂl‹	k.–,<­'Èam'vb'þ-‰¿âi!µºÂIkV¹\EÚ‚´¦!®¬iôÑ¬‹B!¡¶ØfY-tö•Ó$CûúÊµ\³ªµUÕ¯åZÚRµ~›–úúJJAQP*—héæbÏÝ5ÑÚ•….Ê\“­7ö?üÃ¿8uœ’^|ÕšÁÚ4Ëäðø…IhãÄ—„*þ'ž?1Ñ—“Ê”ÃÇêÝéêp_÷t¥6‡³G2Ÿ/ÃhY¼×	„­ArZö€l˜‹X·5aÁð,‹Múû_ÿþó»_àáÿéúÖgŸÉeÁÄµ@kÁÒpÍkkö€×Þ!þé§2h,LTKJWÄwlj*ÏO®±Íó•¿O%_ÍdŸ}q®·¸Úþ6\Í¼Lá9ÓSÒªÃØ¶d 6<@xDµk½ãïŽå2dsf 9(-XŠÌÍj‚µÉÕH\¨LE¸»*€í]ÕˆÕÌ>ä6‡˜öˆ¤ #J­ê‚½%„ -5mÉ3R%l›ë[l×ºT­«uÌÆ…yÿ5XÂõ‘(>¦!¬…,HBÚÂÚÁa'&ºÛšqŸ;‹w"æ&åpÆ‡ÄÔ ¤5qŒFôfESˆ©Œ„ïƒ-S¸‚5E;Å%˜ÙZ	þp’ßœ§?ár&óõÑ˜´Ž“yêÕS€‚"NjŠx—µ ¬=kçGF:FÈ„l¿üàìEi¯	ÐH„é ¡ÄŸÿ7vœû#x†ÇˆÀíJ}éŒÌ p›ñ$ÈÕ<©ÅXm»²¦Õf+|ê­Sÿ kuÁÚtdþüÄº<Ff>ùš²&|#kß¨¬é™yŒD´5QÑŽž¬=‰†ÓqmcÆ°Éµ]c+>ë:Ä;Qh'X÷û¶Ø¾ÓÚ9=ÎùDH¬æƒr5«Y«G&~dq”f\F0øÎÓšGÏmÁ¯ÿxM°†²ö+£5oÝü ¿®¬yaM°êÕ<’ßèöÜO•é/ÃƒltÉVãˆ¸¶|ÙQ˜ÐŒ5ê´¦©BOl=Öâ¼öÕ]»š0&gÃ'õ––Å¨\-T¦ù]Æ8­5ubµ6(4´àˆ:kv•l¤=­é4pŸ†k·ÐÖæçuÅþ¾¥CÿÄ›÷GI×o_{	Mÿ¦…W××"ÿƒ*ƒ]ùœÙBJY‹úc¿#bãLçmFÜûG£¶%µñãtÀÆýª’§4ŒVHÈŠ_7a,‰Oý®!ê¯¨éR¤2•aíAféÝÚõjIÜž6†xÒŒÅ‰k ›«™Â–‘)?´&›È¤h8ìÅÆÿrÖ
Ï:²¸ýÓDÍîk\rñqv’<‘Ì' HlûËÀX¥(ÊTð;¥:Ãúµ¸QX­b¢ŸÏÉÆŸÛ[eòSæ|É{ä·×ñ&³8mqù'°óŸŠXÍÊ	‰5YöËaä:ÚZŸ‘8_¯?¡µsC¨LH:sÁÖ}†°kx@*Èƒ–Ùñ›jËªéa÷øA€µ¸½ˆuNÇ_dùªúbK Ž›?¶Å«ÖÚÞ:çâÍHP¤Pío|±ÚÃG¿¹û¨ñèÑÊ¬ÞýŸêY­þUTÛ4N³uÇ]d'vb'þm‰Ô¬-˜ÍÈ:‹šc[ÐiØn³
ÕÈN‹ô5"kžÏ‚gÿ“©XfƒÕ8²±MäQÕ0ñïKçJsÅ¾´®tµJ_KX£²¨¤«÷ú€59pbçßw¾Ríër°v]^woCk/ýBÍuœÅÈ‰nÝFªV§/LŽÁiS““X>NLt§aµjáÄèÌ“ M+Æû†§¦§Çúz÷r¹ªæ*ùrO­B¡XOûÜ`j¸LklYö[£2ÁšÖ@tŒœù?nýñ‹ÆæÖÝ/¾àôR!¡µH\‹›ø{^Ãg÷~ikUM191ÍÇhÀ÷±PÌöS<Ñ_[-¦/­NW+”©Ép¥§g0™/eçæz÷íI¦WG©ÄOç‹½uX«dõ)Û*ñ¦Ç&‘Î^kÏpÁÿ
¬ýýß_Tš•Õ+H¤¶ÝTÄ‰jñ¾9Þªß³+ÜE+µÛ<w]>!:µZsOÚÊlsí#ìEà¸µæ­­Íol®56»šêëu$]»¡î¢éÖ|sÛ­s÷¸uÎuþ(kÄwÖ¢šµsÑ­Óçžïî< }ÚÃ„4OF–¨S!ŸT‹|A+GSL4(ä¾ïu3žöýzÁwÇf¢5Ik„G5£³(Òƒ›í#¬ÿ˜¨Ä´5†m%kAYóÂÚú!þÛ@X{öò"X£@î¥F¶Ë ôÁƒ³J‚'ÉVƒ ØÝè¶¶³”}­9?È·XºýikZX9pP;Íà»¬ñÐ2¤6Ù°ZK&­)BÍZ,Òã´4?9çó QÕž‘ý#®	ÞÏEd¦ÑzäñÌã#™ARP›F	kd.Š-<«…4H/g­hF‹^X3mÍËjQ¤EG.2à[Q•?Èæ1Uv]CûÐÖÈRlµ>kZœ²¦‡WÓX¼´jÖ 5_³6XmèÉÎ!t4ØPaù–°ÚÆ¢\(_àGîYìZlm}!†j®)v$®ÅŠÖ<­!¯Åƒ×;ëþy-aÑZónÓÖðlµ`-b°¦‘}"kÈg¨LÐPÆÿ£*†â)AeHÊŽŒ¤§n±ÚaLËüýƒ·hµÁÝù!z®I[»gU¬?¤híŽNH×VÞ;õþu‰®ÅÄµç~öÁ‰‰á5[–ù´’!C¬æ­)rùQW½Æav­á§ÐKV¤çÃj£ÜXj%ÝøŽÈ½˜!•Â3ÑQ™.öæ²ý|pk
¬fÙÛ#‰QG‘^üF|ôf°åoïu¬V&UzÓ>‡3ðØ Z…PÍÆ³ê%™Ãõ±¢BüÂ«Ÿc8ôãÔˆUÂÍ«â.«üF¬ƒò·L¡ŒîJ¦ÐØÔöˆžªÕpVžæ+2:“Ê÷¿Ê<vÉM|sÁZNZcÅÃZÖ¾êÚM±v­±Y'rE‰;ÜÒ©/\µzÅAé|^#c5OlQ½šûdáŒúhã:Ù!ÿÃ`ÍBÀ&\ûz¤Zû¿g°6?ÿþ{Ëû‡®F”mÏ‚y¿íZhÝ(xUœöªã´@jqT»K`-¶r÷nc–7;ä¬9×þºKƒ„Ô<­YÅÚ¿ûÎNìÄNìÄ·O„TÕÚï%¬­É¿?2ð×](Vâ hÍÃšÏe¡xÍæqÅ-‘J‘àÀ$Ö˜·i¯’WÛ—|€4æÀéÜAÆ_ŸZ®åòöl"¡KA1Çµž\Û•$³´~¶¿œ X™€ÔmM´†´†¶¦ÎØ?@Í›˜¸0•¬Z™‚ó»0>5•â^§jÄ§ßýàyj§§Çj«b5[nšÀ#ÝWUŒ‘ùQ(ÝÓ
¬õì)–°ƒlh=Flï,bšZÇmFŽkgäO_|þëÏ!µ/‡ŸAjDÀµ˜‡ÿ×iPc‘¸&j›ªZa™¬)r?V25vµ–’¹ÕŸ®ÈÊx1ËÑcÙ¬j°h¡v®µaYÎWŠX¦\¤tž/ª¬—¨¹ý_ïüåålû³—kX–]†ÕÞùûxKµí¦"¡iN¼vèªÖ’vóý÷ÑË¨V£XÜv*ÛMjÊ4ßIl[[a0ró£³7¶šoÜìjæâÖ´[”V¯w5ë¢M ¬li»CŠik­yã~ƒµ{4_’Ç AÅÚæ¦ùîÈº›Ì©<w»ÿ\5/V«È -ÉkÒ:ð½öÈfl%óÚÚÄFÖdÝÏ1y=ªDM°Æ`¬&ÿ~œ²#UCk^e;NÉšS•<§±F¸¶Í^Ä+k‘wã…Ž_~Ð²¦lG–ã¯ýÅk‚µ™+ò‘Ôg9Ð«,F|ý…kxúoÆ…5OMN¶nwñ°&Tó¼ö+6§~`55—!ÛP!oF°xÞmýQ\Y{+ÀškŒ±ZÀ´’h“ÇJ<b”·ÙÇ¼ufÿ,»fð¡t-òÿð!0ñižÕT`ç
Ö¼°&V‹Õ¬9\óyQÍÚÕ¡¨ó5B8¨Mà ~¶g5†Hn70÷áñãVÅ3‚5Ì õð¾ýžÖ‚äÿdâœELZ«"Æƒd¶Ò›í„5bã…UõíÙõTkë^”ÇÇ¼Õ x‘ÁH°ƒ¤6­‡¶1ã~oÝ¿½)ö2ƒAÚQ¾¹A6ïþh±ƒ5±Z€5úihm ÖÈVæ¨dcñG_H“d†|Ò,Žùûûšoÿ-ù¾’m°ö}êÖ„6ç«{	C$·­ÔWn›-±M\ãº°_F#¤Z|9¹z‰pùn„Ö¼…¿âéÂÓÀ‹c¶\kB (ZË“7i€’W¢5×
õ-öËþEx¤®xº«ˆ…†0-í\…fÐ“ê×úô´¦,ß@k” àØ;x´LÒcY¨Ö+:ëP¯5ò A6v}ìAÓÎt^;Š+¿À­7[FSÃ¹‘‘ àMÿä¡ªÑ5‘sd9( ÅÔ/H;W&“ò©DúÃŽk¼ºÊ¯Tç_-íž,¥a7_QíŒþAS]' ZØ/kû£ŒÀjk+k×+dB^íZ:“ëZX¹¶2‹íJ3ìÈCmèh
0XS˜¸FÁS³ƒ¾¹š”5)_$AoÖ`Í½‹(iÍe
pÓ‰/HÃ<…g66³8ø½ÿÇÞùþÄuž}þOx´/Ù Ë–Å#ÀÈ"¨ƒfDG£X¡À²v¦šÒ±'ø‰VQT&r\jÇÙ$5¤%qÓÄÏ&@¡QŒ‹„&'€ó¤BêƒÁ±º*JWJ"wë®û#ë”'Ýv?ßë>·o&¸o¶}É5çÜç>gÆ€I|Îùœïu}¯¹9Úümœ ‘Z%ªÝ¼ùÅÝÍ»[7?(·YÁZ½s©V3Ts¬¶+¬íÆnìÆÿo"d”‰¾f[3„ÔcôÅ9ç2"?È6ÉkkQÇ_·æ#ù÷Äá.mâ=z[Î¼Öp—Ê¦32‡ìuÎý,Å’EèjC·µöx]
—ã=iYº£3K+gzO¬êg¯˜´Æà“~ë»ÿõÙ·i8ùò5j‰Ì„š­	Öè‰
µ%2	®A8@vÄN>8^L%i.dá5ˆÍå#'‘¥oíÙ»§»QùpñÄòæýÇ÷GPãÝuÅ6I-eäöaãwÎüæìÏï~~÷¬·¶"Xûë¶\È¿lsñ­ýV´æ+×€5XMñ‚ðjë‹'FrÙ±lÎX¡—4—üÐ`º¸œãH'ŽwÄ¨
Z¶´—‹ é$þ*ùäì^)Ùá|W^úáð`‹º\ISµjZcjXãØýI-í›ªITVý§+úYÔUEíË—Þ’r¦¬Ç÷˜£©ÉlÄX5	jz[ù,m]½b¿)þ;NêÚ<¹j™Û–ÖÛ"X«ßš›¯?zƒ[5êÖÌ¬LƒÕäÝï•µüPÞ’[ÔÖÒeDlGÖªÄjÔšèñ¯z½æ’.2µKk¤¼#€•jN¢ŒG×¾~kìµ¸À.´Y)XsØæÿ¼`Í˜Ï í±?8#*“²&Pcð¬ÆKQižÜ ‰;PÚã*YCS#ø±È|$Ï¶¡58}8CsCV³žkÌà5`­l¸Tá¹³)vhµæqM°V ùÊ5ƒ5g+â²™Ú»Ó‹^W;ç¶›NXy´ZÊšZc	Èf·Ïñy+X3Ñ#H¨D¢Õá£èkS´É^3˜	¼¦¹ã*ÑD›‰~¶V*kžÖ<¬9e-ø‹ëþ²Á«[<¬1õð4%nòÍôŽ¾œ(6<‰¥@5pT°Q±¦…ð¨VQ²¦W¤¬IÈ«¬[sÜ8š±a—TK‚$Èyþöó{8°×¿ƒ´G7H)k"ÂZ„jÛCVQd[e›5…Û"Tó¬V«ù¨„5¶Õ˜ó´Ím1l–˜ÖÔQ£[n¶]ê£õIDQÙÔéè¸þ$ÂÚ)hMV"ÏÈj^£q‡‚¹y÷_/ýýåÓXž,]±¸¯¸ööÛd¿Œ;£‘ƒˆkê¶¶ì¤5ikÅÈeä5eˆÕmF±ñ	*ë	Rçéb†††µnNzYvx8=Ìƒ0KäÏÕ´“¢÷s‰X¶‚`M~"lqf5Õ”{{ö+‚¬EÛÂWØx¼z»I\ìÖ0ñO)#rƒÓZ˜a©êµ¾*;Hä³½·NY’Ä«Úeþ¡¯­ÉP’_nkõp\2kùnþx{u!Ç÷a7C?8U©Õr	ÉÐ¾¦µ$3â4x“'À§äÏ¾Bg{Æö°¦(kÁ]$°š],BÆRÿLy}òpÛdy}úp® X+ÐÇ'®Kñí=X³;Ê{ðMõÐZ$¬Yæ#;ÖakQXÂš5â2¯r™'DÔ¢)/æöeç®oP@{}cãüRÛæÖÿƒµßýnknóƒÍ›3µbµþàÚ?)Vc)ÕX«íÚöïÆnìÆßÓlÍÇª:c¯NO"¯ÉfD¨ÆJÌhÖ"õ6Ýî,t6ªQ‹™ÀÆ#´(/RÇœÞóy¤5¢ –ØD/ë ëQ'¶„–!K’Ï#°¥Q;ÔÏfrõÌ‰Ü‰©™òdqM!‹¹¢?zã»ßÅb„ÎØôÅÏ¢¡éÂ,]%c´6:ÚÚtrl|üäÉ¦Ö¦ŸNwå'žîÛ; u¤qV>“-á]ÙÑ³÷x£¹ž4â!Bdc×ž=ÇŽ1a€ÔˆÆRÔØ-_üâÎŸßÔ©ûæ]âOú
^‹"j]Q¹ÄµÿpâñšŠ×þã5Ma¨O\{­˜›0TëíeIÑ&¬3MN$Nþ©t:•ÊMËŠ4Âaº˜WþÝÊ8:4;BWìô@)•*Öò³*Æ¸víŽø?ÎÎ6^x‚Po7Œ!k»©Ú¿îÕtíµ;¢+‚0²/³Š½/LCS‹¬ú%«Y_µÕ†+3ëÿþÑ;(l53î½²e“¶••™Ú¨j[¶~R ¯¾‰é›%@¬™´æ®ó´ýô=Xë§)v¬a®V“¶6PJ“,TíHa}ÝM™¿)k‘ô•2ßLQ•K¬¦24m96ÛÒ‹ßšXŽ™¿Þ³ÌGgÿ±š™‹˜Ë¿ƒ5>I=›Á»½“[ kÔ´ù¨è²æ{b»N«o¢!¡}vV°†é7¾á5[Nœ½ØvîœyC²!`µÕBÛÙsI¬ñ]<ªùe§²¦Ïã)X³±¼(SHí€?×'kÞrÒØŒ&ÙQœ¬MY¬20+•µÀi~Â!MµÌ=$XsÅjÐšœ ç×°!’ÐÆ1S0×·$H&Nacô°”5ÃµP³Æ+²ƒñj¤¬ i­€µ€PG‚Š˜kqôFcýÎ6²ÿè={öÀRÎÒ‡÷Ò\dh´¦E¬æÝ £FkÈ,"d<¬`'Ñà-~Lì=°§j>"Iëe …•P$Á¸MYÒZ0ƒ¼oSì¹íÄ&TÓJ­Z#Á?ÓþZg,âÃðŒý€j;q„ÃÜlcÀ®ÖjµM'¡µ#ÍM„°íˆ¢acq]M«²Üaµo©Ã¢c5×ûIÕ#]º<=W_?ÇU§ÌyGñõ\H².×¸4€kYáÚ²t4¯¯Y×µŒÓÖF^±0Tc˜œ-ö/ÅHÙ/äÓÃ2ÜM i¹öª­‡Õ)tdp9ïá/šÈI`ãyY‹Åd’Lþ˜ÍŒéVÁ¦ƒ|V°d5_¸¦ÆØÖ€3<ô;stIU}ì÷Éº	­›Hö
äÚe+ÒÉ¬àû¯ÉÜŸUÙ’êìí«¾ÇÎ/õÄ‚µ"|òRsj‚S~AQŠ¡ÆeÒœÿÕÏT"¡k0Ð¢ëU$ŸTÅW=«¥3þŠñHH‚4>Z¢Q¹ŒETË¬-,m–gâSÏÄj¤¬ñLP¨ÆÚ5Û¼EØØ,”À9ž‘¦#¥¨q€ÿoªqÅ
°fÂZ`5…hmŽÃÏ”9çam[D;ýW>¿Qÿîù¹†¤«9P»y“‹þæÜäŒ™‹´ñ¯Ž)Q¤Å]w‘ÝØÝøû<F>æ%Í
L+rÕ|kì™6×mMaŒÆf§d¥´æ¨Ž~42±w[u8Fª0«Ç*íŒÔÂY&Ô;Vã¬b-aNS&`°FJ¥šiÊ9bfãN¤ÿÐõœÖÉQgì×¹$O¨j-=ÐÃSÓá?S¾6¥lk:IWlJ£c˜‹”tñ~a˜Ès«=T ²¡'[-tÓ]:÷òê-A­‹lÈmõj]]~G#¿øÅ;„ÔH„¼ùÁŸ¾Tüõ+^ÿ÷¯J…ü¸hm¯qË`êšB
Ø5Ö'®áÓHn&¡òÞT_b7Ë¡Á¾ÜÄÀ@&—JÉ…èîÜð™(;~ 31^Á††G'‹Ù	ryØãˆŒúLŸx
Xó¢Qi*¢„– ªíðÄ¬žÿ}ÂjÕ®pðòC1g*,"	ˆéì=U«]ÁY„C½ÃÊ$Ö`«[+<Loë¯+{e­ƒâòþë¤0)
N³ëÊt™ØxócÕ€µ;õýõGš,ÅÊp­ÐŽ›®¢²£Î©ÏšHMa¬Æ´0#¥³±ÐDjp¬µ˜îf¬æ
Ö"·þ|mM°æ¤7À¯‘Ð» `-µá±ì6hÑ¼ ƒs¸#P,áûø¡­"±x‘êg¶Öˆ_ÿÅ¶ÇaµYðDÇ‹àÓÀI‘ÀZÖøÛ”5¢BZ{E†±ÑgMÒ°F´YÕšf4W£ Ž<HXMµ˜‹ØfaÆv§Î-Ü® µWÖ¬)‚´¶=õ1¼ˆ«À°é&vkm¿¦la5pd
0CL²–cŽÔ|ÅšÑ;Ø…-·yƒÑšø8äAZô5kZ^uV¿’Ág;?ÞÒˆ)„ÈÉD&ä>ÞúÞ¡)¡ò_Õž½öíÖïkÖ|"¤6Ê‚ôºš¡Ú¯CSìàßþrZ÷òÕ×öî£.n´Ë{ k‡‰*Æ6‡iZµù©jÐ<ª±>½CYãˆÖ(šb‹‘Ð[km4i«ž¯XÓŽÑ™fÎ?c'¬	Uh›ER¢ý+?ÙÜ“ÒFéÉ_¶$¢»zþñ¦…¥<
Ò€µç¬hS€9ÁÎ]çÜ„®^_ß¿¸ÄiÅÑš¢B\{û©ÿñãy 3ðôÓÃEÕðBj«ËòEsð·ˆp'¬CãÙLöüd˜sNQóÏ,9ô…šX6ƒsÑ 1\ÌvÔª­ÐK?Um²º'@¶Þ¿HÙ*a­&DÜ0·XÃ¯ý¬‘2cìBPÑHkgí«b&×‘½™U§áØ/û‘‚X-¿ 	žCwKIu¶5=1Ú Ëñ³å„8HµÛX«DŠžýñDfy¹”åšÂ÷ŒW›µgŸ’.UI.ö¬Â»	µÜÑ¢î…DŒÀj!	cg‘µÃ[¢Äb©<s¸MŽ“H“5*e§\½Ö8à`Íèn|¦.k€˜ájš]p ŒÓÃ¹Àk÷ÖN;R#.•ù
ÓìPÃÍ+jn%æÞ}—>ÚïžõÕWøJ¨%¨§	ÕŸ.ÑëH7:b5kK»]XãÙ÷º‘š½vÝEvc7vãïN„\Zÿøco9Á´¦×œN@ý^Y3Bc¨¬’Ö<¿Ùž¦HU892Ñ>Æ"XA"a‘ÙŠŠ–õ˜øA±r¡‡jãB}½*Á¹r oJ™d’'ý¤Ð‹Sˆž©™éïh»Ì¥xýÒ[·_1GHžžŸ¿¬Q¶†´öÛ±Q!3£Ïg3\šÔ°½~’«uÇI’#ÇÇG; 6&c/óÑ$Ã³-\ÜZG³=ø—°[DYšÍõj-)ÓÔ¸MNßz#íÞ¬ŠÝ³ßùììÇŸþùÍÏÿp÷O"µ/¿úêË…k	&þ„`ÍáÚ´ÈVË5«Z{M¼X½ø<?'ÞÑÃã¥¾L¢ÛŒÒlKq·”DWwÍly0Y¤óÀÓÃËüf’díuíëlOÓa­qvh|­”(Œ\“í#úJŽ"##×®=¥#–y_Q­u‡¨FìôÃj5jÐœ”½o çYMŸÂ´}…4É•…•++[ï„)$[YÀYŽäÖÉ6®Üýe.vv¡fàyûõÓçOc/`}±UµÆ!X{ZãS8X›#Òê_Ô¿Oá\Þ›šzð=ËvÄ¹1 ÝÇzb÷åA4ÇjÁ1!Õ…(Z¸Ì„²È_»zß­±¨PXã€‚Y¯…iÃoq‘%¤ƒµça^„C´@l;üE*”µ—VÍ³_¸Š ÅŒ“?»xæp¯œ!6³¹$Hfb5B°vv½¢`- šµû{÷ÿGgZÓšM/Ra1ÍtQ~ý„õPL.v•kS+¾dí%cÅW¼²¶½Õ/KšÙÆÂï79mø3uë{‚µCT¡!kFg…NØ"X©Ø&²ñ¬…šµ‡½¬Æâ¿¯•¬éPHƒt#G§Á=_­VjýaGßÎ³Õckß{hí°Áy{÷ì3eí]­aM+œû½²æ^^Y«41	?€Õ«á3É×¦ÿœ´µyD¼}èxUüFöîåm8E«†I×gÍÁXPÖ&Ü‹ù{Êš‰k“žÎxù`î-ü}½Ú<Éwæ¹Öª™ÞÖ(wâß(ïè9xíˆûë0“ 0	XSÔ¸h8sÿõëö¸yý[."#XÁõ¬’ÔNhkÓK[‘»ìŽ\HhíÆ“ó?þ&•kccã×¼²Æ9C‚â5Ol,Î’gd³GF©\QJ£­¥åbmHY"ë¡XJ—š µºììlA-È”RÈÉ`„6³Àšó84 ‹ù¿c`5öšØ!,óÖ\Å¿{ÇnèmM †˜–ìƒ³ä3Bt#¼1"§5&-È^Nm%íµ®ÎL	C·Ëc	ù‘ePäœˆ?J6¯nÏóWêèø(¨P’¿Á@«k›¯N$8¦ØÝVK.ƒÉÉŠƒDÖx¾ç;¬	‘B
ä:yV`µ¥¥õõë¤ÙVÍÆ3ëz–ÁÁÉÛÕ,»nØÂ´öê#>¢X«—,+Vc!x+k¬]÷ºškøfýÕÊôZ£Òñk–ýõl}4ëcï"«Áj;E55±Ã'ŸlÖM.õswÃ?£µÈ’ºš0M±ë.²»±g"¤N¥ÀšŒ!Ë„+\Û Ò´5cµf“Ö„`Š
	ÍVF­6ÑÔ…lFZµ%ä
IË5ªÑâkqÒ,2 5š±mqùCå(Üæ3uµqilDŽÉÄÙ³ù8‰á8KQNÎ…xé-{|O¯µK?ã>L9¤µ¬Ñ|úÏ~ÞbyØxí$êZÝ°‰q:b¿¶`9®Zúétí©&RÙ-J}Áö«³«w(Ù-‘žší=¾/ÔLi›mùŽ«`kùìñ–¿¾óñÖÝ_œýõÝ/-¾ú¹Õ­½r!Áµ¯%C†–k¦®ÉÒ`MÖC~¥âÁa´>ú¬áÒÎ¤˜LP‘76Ðy¼Tƒréåøë¡¦‡(EKuu%‡fk%þž™îÎ÷ñ°&ÉnáŽÜ\”y¹ÃTäþù—*ºªÎ…_rY$üõ¸ö>·HÊ{T•+Á9§þ¶•w¶ÖkªgV·ØøÓ›««‚4oŒ6¹^ïú+õW±å§ZÅhMÍÖDk¬Q»â?/­QdÐ_]ÓÀ-“•ÅX*dLwV­­Õ}9Jé%¬‘PDÏX¶„
×ŒÈL,‡YZÈenrZ£Ðô\ë¯Æ¡½Ù¨ãZ£c5A-áÈ]ÂY„ÃìŸ1,´¦a'«	”BÍšÁÚí‹'kD`jŒìûP°ö@ÄgçŽvÌµƒ»Ç$Öî¡šIkK^Y3`úšu?«&•¼¦ Ö\”	§«­NæÉfñºš¬¡³	Ñ 4+c[87«ýócw›^Xã{ó
#ŽÖ\*¢Öüœ£9¨GM±Õeª5f‡À’ù£S˜ixB«H„¬-j‡‰¡Š*ÇŒÖ‚²Vá0å\š°æ^ÒÕo02uË¶9t¡½0g±‰Âÿ(S·ˆ*æókÀ©ýÎ`äß"‹§¬amªEõj¶²L
Íüõ3H°æÂ¬û‰{ìŸGb›ß#V³p[†Iswô#,Ê‹¶!Õëþªš½4(Ú@5ã36Ó¸ü!«ÅÙ²/#HŒè¼ˆ·éºÆ4Z“={«ñŒ‡OÉòM‚3€C5:´*Y»¬=z½NúûõòÒââ%™¬GÈ=yí=âGo]¶²ËóORíFéZCÃIëì’.ªtMç]Î„­ƒ¸fñ„B»q.%™â2ùôêØY ŸÐNÁ³Ë¥ÒÀX³Î[ýÙÂq"¼)k”eñ×­ã´ÐÓÀ"ÞN£mjÈÚÍp£¯LK20v 3¸Ly‹(k‚5à­³“$)Nj‚8ùúw:›>íHK² °©5ŸpupdK¦ùóñšª*ž‘&Àél:Ûƒ°–èh­‹ãBkÅŸ±PU@+£¯D½y%MCé=Y~D¾Nb8*V‹Xí^Ú|Ôa-°Ú[½ÕPÔ67IÙÑvi²ma¦®_Úa«ÓAL*[¤«1(¢§½à;÷6G;,ÑPßÚŠ‹Å(á…5ýáÚExXSÃ7ÊÖÊH°’ÖÊs!ï1D}´!€5Ä‡3òÏÕŒÕ>ùäæï>¹[®›)ÖÚ,õx»®6i¨ÆB¹Úú®»ÈnìÆnüC!Á5…Pm]ukÓJ…D[»g¯«=â“!YmÃÀ6LÑØ3Óþl–K"!“H,F„hõ¤:æ3l²iõÁFx³6Ù9åDd`6ºu²é‰ç>ü°ãr~±|ûö4‰´[»e[]ºô°.éÏIZûñË/µ¾þ{égO?ÿg‡kÃkcMÀw¨ÞÆ³¿njúr‰ž×IŽÉ§³YK<Îf”xI\x@ý¸PÖ 3Ø¬›Ÿühv#ìà	i²ÏÞÁfä‹3=þCµ/ÿ´yû«/ßØ|ÃÄµ¿˜ËÈ_þ÷_È§ïÑ.þÕ,òÅçK$4rq°XèÌŽRÉt†Â	Ù'ŽìßOÝ…au¢3áwZz‡†€Œ‘aJÈóÃ/@nàš+‰×ØZ<12xpèoæ?¾íó+\EˆàÔoöŽºÂ)ä
—M^{sïKxãµµ¾õïìm-^aÀJda°ã+|´åÛ!­1m£†=wµ¦zóÆÜuÝËßPK\Ft¿Ù÷?çÓ ïÁZ=Ùcss´p²'ø£2ÆÌÚc:ªµÅjey6š_q˜`Ð¾Éh‚5‹Yêü,4ç¸óˆŒ|þ#Vß‘.ËŸ×›Èm),{íÎxRÃ»?Xïç/Bl7Y:qƒâq‹skGO#>úðT†	©~&g¹Í_DNÞF?¬Uø‹¡)vø<2’i¼ö.Åø§Ú@2Ášüû-SÖ@B…ƒ5µw{ü±î…Û5kÁ»_QaÞÏ6L-Dký°š|Eö¹šµCl­ž:´_éGïÑššÁš±šÁZÿÑèþé k³«Ak¼kAÑ]Öäé–WgŽ.hdÛ55Izìí”ØÑ™¿ÿ^Ò5çoE]±çé­jÎ`Ä§Aš²üEláSŒÀšáŸWÒÂœ°:¾<jškŠ½ÌyuížŸW‚¨3‚´pÔúS§¬Ý¿fM/;Tié¬û®1†‰§¶¶:±Ú^ÑZµ-š8XcÑŒAkÖâì@g‰Afx¶“èXÏnSs¬Dhm&xÄ¢7\4_½º±b~Z°fÊšò ÝÃšgß~Ž4H÷ëµs°ÚÜôéÅòå•Í+ïlnnm	Ö,*s!×hÑöì7¿­¦k£ÎÅ_>#bµ‘ñÄ¶|p(Ê†ôý±#ÿÒ°. †5UáPNÍÖ”¡>;´œÍg H.­DB×,»˜ƒÒ\Þ#Û°V|N^ú‰¸'ä°ªöÞ–>*ÒLkW&£•£UÉêQM)¨iœl’Ö; K=u¡ ¬õ¤ÌrªqSz¶zi£¬%
J†t}¬ã5¤’Úš ñ …Y’Åé¦Ó×nbÌ—[.s}ì 	Z6‘€Ðæ!küI¬ »±Z~»°V‘i™.éZ/ÈÍÍÉ™ÕÕ…Õ¥¥…©sç0Î¤üÍ)Œµ”úÉte{ø¦Ø¸?š¦Æ(ZÛõu>®/¬yV8FYë¦§¡µE/¦õ×kÕ”¬¦£¯Bk:#RsŽ"D¤ª)	²Ÿ&Üç ª9Zë÷ºÚ¤’ $¬Å?í
k»±»ñ÷'B²XŒ°N–7ˆEbnÒ=QmæeÂšØ<¥E·ú²[ÌíÇä™Md„³8´Æó3h­ÈÓ=®œ\5ØUBd:!{a9ŽdðõÏäå‡LåY¶§ƒn¤#ƒê?zféSZ¶,•k—ÞûÔÝ’® “‘g¢ªµ—›bc¿=;A=¬“‰ñVräFK<|,ñî@<žÅd$™,ÄÇèÊ&?HJÄ€µL!?22‹²Â½±ì !5Ú7¶ §žl…hÝ˜5žýÍÙÔÙ;ÇSß¤l\H!¿üùíŸW	i
×îÉk¢5=ßÅfªbR\ÒvdˆšöRW#øz¼»»«s|Í,u,…ÁÿàP†ÔÇ'ŠIëŸÓ;ÛËß xLz,ÿ‚Ù=:X #¬Þ’ŠŒYSÕvšŠìì­©‰¼6õÃGî†äÈš&ßaZ„s*KÛÚÂ'r=V}t+ëÕ«[Ä•Mlû·V®0[w÷,5µ”«™»l,šç0èoh¾Š¹ÀxV3ï~x-ÀZPÖšŽp_×Ü¼Ñ³¯ë!“¶/—A³ÿ»;kJÕw ˜u‹½“–bäÂH‹U¸p~¦¸)Ø:4SÈ tVoQ°öíAzÖˆÍrR…<£(ÎÑßFÖ¦¶íPÖBÍš%B®¬ki×65µFEÝ7~ò"Š3~4ájþ/Ánþ¿¬†rÒ Ô*¥5½V±˜²vÊítYå>J$Ç1Ê\\œ¡É’1ÅJHi;ºpôÄ¹sg.GÂšï³†¶öµNk?@@;…’lE˜Jo“êv}Ÿä4hT#’Œ?`mmêÖ¡Ck·Z«„5B°ÖïvMSq(4Åön"5‹HU3Vóêš­½J%´wtMß%°ZôC"§5}ëÖdÛ¿çÀÔZ€µwµ k,Öxó~†èåAÍzbo‡µ£†g¡Ëš“ÖÔqû ´¶ß±š{ŸíáyæjÑ+RÖ´Vš÷W¾XBðQ×g- Ú¢í±Õ&:^SUSƒ°FÂ£ç4k„Áš‡´‚µV÷¯S}±uK®‡3ÍM¨m1ù@ªr­#æçÎŸÚ¨«m¸zý<]±Ÿ|óHí†`í¹g¾K«µo>CÜ@Yû6}ó§ñ0]ÙÚ,÷OnZv¶õt¼â[d‹Ö„k¢Ë=ûío?xÿ¹E`M1ô¢+:d;XÈ¢­s.Á˜—Ón¦®.]ÄÃ_‘/–˜gÒæá?Hòþ@‡Z>ÇÉó‹º‡ù†Ø!±zEÁ›¸õ«C[¶‹ðV!×›TæaÿN÷[nïTYZ5›NxŠÓqáBª¯›sšÒ%[žJ"·)Î3¨K¶$»­87—¨Nôå¡‰8l‹ÁG*Wm]­5^ˆ`?Ê\ï2×Br"c¥|.Á¨³¾I½òÔ^í K`µ¬±Ze7l¿~»h¼·I2äÔÅ;«åõ…Iu HxÌšt:¡ió‚´NkõŒQÉ…Q[ˆ&¯­¡«xZ3X«ì4sº|ú’`Mð¨eZ®ýåiÄµí¢š¦a·ßÓZýÜ¯~t{ªª}¦}pS›ÍþºzÉj2‚lp¬öõ$H½ä,²›¹»±ÿ€øOÞcD£!Y¡µiÝŸMÎEy0lxˆäÎh¢±ûG}­ùçd1D´„ž?êlOß5}þÊõô(>¡?K o±´³ßDH¢ëp¦l¶žÖ#=ÒÛf‘ÞJåÛKÄLÍÒŸÞV˜#äq£2ÁhíHëèØx‡hm|"àÚ0ÍAG›Æ1ço¢v6^•à²ÄE7]šp1>,£übç`
%Zš¥Ž‰ÕRº#o”+¤p¸gÉAXIêÄ¹ßðíÜã_|þÅw%®±zŒF×XT¹R!Ö^ÐÍ‚£5Œüí¶a¶JïNµÚ˜O%sÉÌØØDQÈ‘F1Ì?vÓþ×÷âð¦ÿ¸’Œ§‹xúËÈrÐ
ÖÌ¥_¡/Æý–#ŽÖLSÃ_²ÕìRLEBS5£0SÌÞº|4#Ã…k’É@5³‘¯Hô±õ¶•…¶ÕÍõÃ+ëírê_«ñId¶­…‹Ó%µÍ=a®õa¬æŒûçx¬>7×PÛq7FŸ´U"ðÀa„hm›°6×,Ÿ
:j««èå—ÅµúÓf‹”É·×Äâ*Ã§Í6œFØR9X‹ú¨iiÙ€sÁD¨¦•!rêžñŽU‘µ@lT¯‰ÌX»ªªº5%‰$-±®j6þ-ePäY0™uÀvÓs'>´Ÿ5u‚Jª¤>
ÖDm,¦±!¯]4XópÍÍï
qÍ3#ÊZ(UÓÀoxñâ‚ô´iB>#.RõjÞ_dq¡l:R]rÀúq{A/äAéuŠÕæ#xëÔ}°ÚCÐÖ"¤>NíÿÞC·Ö˜Q¦µ¶Xó®úÖ°úp%l.û‘¹ïµ†¤…™pj #7H¯­J‹üE4N›SGGÌ‚ˆm=¬ÁHl¢gž?°¶wí(ñÚ¾yßgÍb›²fœ&aÍtµà©õ¾Êšm¼®7?E&$5qê¼žæ:hc
9opé} ´IYC-óºcEÑZ¨yY-(k37qÀæÕ×Ìï­š¯­ŸÇ’¢m¯Y‹’ ­1w†¾¶ègŠZyÂ“ÆÖêä69!¬ù8ÿƒúú™Œ¼yiÝòža5{XÃüK–, ö(+þ˜WÌÔÕO.m"®kVW{¯rí‡VºöäsÏ}÷Ùg¿Ù|¤£uT™ïœAM[¬¦³.Q™
9rð Î˜8A¥«µ'(µ+¥¡¶¡¡b!Ó.3,…Îjê?³œ.ez(N+%jd®¥p°ææ~¿Ú¯.¹ ]Vý ^ÔÖæ”ÞHþcÒ
Ö³äæo¬µÁaUÝú@4pÚ²,m'½q»`G©o¼“ÄGDZŸÙuV'bDO‚M)=\DÊ“s?¥k2îR+ÜLÐyjÊÙs˜ÚrQÿÄCµ5Xá)’%¦èa-°ÚÛžÕüUã2Vö6k«ù3ëë3u3OäÑƒ§HM"ÚÆ¾&¬UºAeµ…ÈzæøÒ é9Zóö"Ï	SÔÖ°¦œ¦È±|éÒtÀ4¢ßM*ÙMÃÜ¯œU¿âö§©­ýîîÍOªÕÖ_mÆ•ö/’Õe~Þ!ªí&AîÆnìÆ?¢5¶U­kæ	écV#ì¡*kC«;•Xó3¿ë†4Gñh&V³†k=¢±t,&Wä˜}ÊÙ8¡Yä6že&(<ŽéÀ¡±‡OÃUÏ”f–.sâ©™¼¬qQø‘s„Ö0Áõëmu@@]‘¶6.MUc1C³µ¦±R¯êÖ²=%õ~¬£ˆmAß:÷%{/<1Döÿq,¹Ž¥Zzó½VµÖ¸Ï±RÇ}2$£t·ÇŒÙŽ½C‚úT÷Å?|qç_’¹þ9úÀæC´Vk¿½'¯m«\S‡lÑ\\ÍÚO
æì ‘ÌRÏ^d6Œ9Aäí+àÞ•ïkÏŒ¿¾<iŽfiF ¢q!£’$Î"B@Ù‰¯CRÕä^Í/…¬Óþb þ„«CƒÒH}¼Ä!1Ú[o½ÏF Æ§6WWŒè6×?>\}tesS‘Ãom®¶­l­¬oJ•[YH$ŽŽù›˜Š:ŽX­9§]}óÔ\mw7sfÜMÖì–í¹çÔbÁí´Ö¨Y›îšÈ¤ŠáQÝ¬uª}­†ÌÓ¬&2Ä6Z³HvRbÄfÊ™ ¨Q3£5­Ìfåo‚ÑŸÈÌ&2Ê˜Dy•¸ö@KßÞ½Ö4¦Î¢ðÒ&XB²	ÂZpÎ‡Ö¼¶¶yV„§ÒÖ>ûðÂã›ùã…c-?ùÉO¼äÿÁ
rFjš”5Áì¦=€>kÕBÜc5–°ZPÖ,Ê>ðî?mî"`Û4¾f]×fÐÖ¼d›òà –2?þý•µÐj>ÓªQôdë©èuV;ô–tW#ï}FØ@Ê­©PÇªyµ‹ÕýP‹ŒQœŽPMÊšO‚Ô÷stÈê45_Àöê¤õnÓú5H«dµÃ„ÈÞV$Åc.WrMM½5E¤¬mk³æ_nn®pmRÄU2ÀœT6:ÍAjªYÃXdíÞ¶&•íž$ý3¦¬‰×,Ç±ÒÒü 'vx÷owƒ\UkL"qB›Èæu¸¶Ú!a3ÞÑÜÃš—×ÜœŠ(i3VµÖ!0«åX¶ýÑi ZëàHmkWñƒ<u7H\Fk ¬ÆsœBÜ	€×'eËº1W_^šŒõ,¬óˆ6Ì÷Š×¢THeÊK2~’'=êÆùÈ‘±±×­§Ç5Öˆ×”hmxHœÆ€)So.^ôh=kÏY®~†¢ê8é‹ôæ,ÖÓiìÛ)[Ï¶ÓÙ‘5=ŒAjsƒ5ëƒÍ#·vµ4ƒet–2a¬·PE[°&ùj##2•ÂDD‰Ý2ë×¬!¹!­ñç¬ŽMø†ãu0–/¨O6Ý½©EËôâp—jT.¨9Š {¥ªùDFÎUÅBÜ‘6Ñš-¨9x0$A~½`-*q¶Ë†c5OÎ¬N’åš€Õ D9K:2ëé©“"ºq Ðhã ¨œ¹Y­ÓvÂšXMÐ®a5õY›ãk«3_Äd¡36‹Ÿ†Ø¸m²Úˆj?ß¼­Hqš‹ßaÙÿ”5¡Z}[uÂök«‘¤’ õôÛb·ÅÚnìÆnü£!a5g1ÂK½Ö&ÞÂ_w¾ 7ø>Ù´ÙÙqM{¤§Å=î`<ÃU#ÈªbÍ•¾1$TœM6	
Ú…YEÅä•¥ˆ{ @eÖò™ÉÉ™ú%®KÓÓ3Hk/¹KqÔÓ@eºàú­IZóºšXˆäŽlll|¸8‘Ÿ•Æ'èŠ=þ`S“ü‰ÖžxšT}”¶R¢»‹ÎÒÃ8QvîéÒ]÷l²÷–ßøÎ¾=]Çº$¯ù\È^`mß¡ct]k9q†ÓôÅ}ÇÏ~ñG0íîêÔ»f‰´Æ¦±
ÖB‡lpm'­ùÙ¯]ûþV½6ôØ?7Ž<ñâÐrñxŸZˆ÷~gpybl K>d®kÿñ|zx"›)dFOº‚»qàmhäûÿMmäÅ×è«†µˆ`íšL!­‘Ûë¬f¦+ÞvÙ*³ï›ÿøŽº5jd=^QÓ„Ÿ~‹¢Tªöž¡YqÂÖÒäŠÄ7™ŒLV£¨WVÞù˜ËýÂêÂÂæG­.´q?ðfq¾H-êëÔ“ø4W[S__»áXíÆ3Ü¯Ü®Áj
¤6Ýà;X£oS¿Ì
:šäÖÔ‘ âj„yÑÎLÑÇ}ŒijÀu‹¤™æ¹Œ‰Æ¨ŠpÆŠ¦&óvôqþ¸r%S¢µÙkðàE9ˆ¯»=k½'.†–j×,v´Ä®PÖ|ä	‹¨)ö¬©g;æ`ÍÊ
òâŒä4ÇjY]·5`-¨jZv*kÌ<ª‰ÖY]
¨f›i´5êÖ‰i‹nœÖd@^<¼8=sæˆ³xÛ³š7£¼Ÿ²ÆËc“¦ä¨½Ûf=Ö09tè{ûE2úÏû§nÍ^CXƒ[‚¤í°6ƒE)®e÷eÍâ”}Ë`FY™ÉËÁÚaÏFN¡µ›G5·çü/âÌxk/–ómð%¤¹¶Í24Åþ©-Œ¬Á	Òù‹ ¬Ý§\Ÿ`*: ¼Z½v™{öñK±S É2÷îý.fBÍZð	5kÁº_}$(k•MÖ4¸±êRªääã:ïaÍ‹kÕl=‡ØŒC2Ð1¨ŒÔ5¤-IkuMD+ºŸ¢;v‡ô'wJ˜kÐ›óoWç®ê1!YMòºµÄŽüè7‘×®oP³ÊÕd¦\žYXá1õQå-Ñá+×^zér!ø0ÏóÔWû_ß~¤™/r1ZòÚÁ×¶ãZqH¬ÆÀf°˜¢%ÊèXsCS]¢]0Ó¥’„´x¶µ®/æå‹•çáM^%k‘HäÂŸð‚…Š;OT³Tò$gÃjvÎ*°g§¨d#Í¯#­Ý~±‚9Ž'[R©ðv#2õ1‹µ_K­õ’”´©åZ_
›¬dà_TK`©¤y.ÉqšÄ¥	ÕÄ± CïjçÓ¤h”¸Š¶Æzâ1—k˜Éë÷rÐ"
Ö:Ì2tÃ¾¼T¦¦Übkeie½­¦vueuF}Á‚5†‚®ì
ûnñ ©Y[ AÖÓ¿%T«q(šßþV¾5Ñªpþ";LŒ/ñ*ëB­•Ëå9ê•§¥1²õxöˆ'5Õ¯¹ñÕ—^º}ûW°ÚíÍO?ýô¦LE>ñµÝüôî›–bÄ¿
HM¸¶Ð?‰¬EY¬¶ë¹»±ÿØø'‰j.~Y&Äl“Ó‹¾ãZ¿ùBÖ÷ßÖØú¹ß²øéf=ñ8Æ"!Ø+p}#:¬ü.'q9ŽäÒ®é•ÅÅ-^ óB³¸:Ä¸(÷s-Xj(¿µ´ùÆŸk·o_†Ö”yš²<šÿåÓÖ^ú÷J„ô¼¶üüó£´ÆÅ×C|@¢ñlÇÉØèøpÂº¸¨Î9©ôøx.YÈâ±ßÿ@ê•0qõDLkéÛ³ï8ù«µK¥hýØþÇZò¹ä±®Â™;œü¿øüƒÏï¬¯lÝt¾„hÅ‡§5Eè¹ÆmƒŒFÌÃ_°¨9Z›µù2iyŒ¢‹¹â0|–ËöuçrÜ1ŒÒ¨uŒž¤¯,/§‹ÆjßR%výCOÀhªƒ‹XmÈ«ÅjÃ¥‰¿ÿü­
msK™c¿£2ë«†¤fÇ,ãˆ–:|FÚ›ùù¯W¯ÉMÅ$ëºe›_g«IQÔæåö•¹qu®¦öúÕúHYS"”Z+é>MfpÖiéIÂuY{°©)¦§¿ê·­é?}Œ‚xÝøä’Dg•¦í×Û Ù¶Ww3SD´Öh#Ej¬Ò×=¯±º²5ÐW\ï°c@7«/&4“s¿ûƒöUåæßòø¹ŸNcñ³øùßTÖdÜï µ©±\ ùõ‰ÇiÖ¬=ÕÒØ«Ã.MòÜ™3°šä´…³ŸýÏÖ&½VFìÖvÚAúæØXãMŒÖ¦ÙH¹2H#íqrfk£µ)+\ÖÎ’ÙÖv9¤AkÎRß)Ð6i@>aäPrsû€µCbµýˆkkXá?ô(mmŠÑÂÙy°8Xób°¦¬ÈiÂ”¿²¯YEk‘®æ_^X#±Q³fí¥CØ·cª’ÞŒßþ{gû×y®û-?à|dƒ-‹/A5FöŒèÙ
fFVfª1Á&dG:QÆòÛ±ë&Æ)Diœ—Cµ]Å$Dˆìâ¦‡}ŽÛìº	ÇQ„ê#G¥rµÛcUªvuz~×ý¬ÇÒó)ýÆ½ÖzÖ³Ö¿ÍZ¿uÝ÷uo­Þº¶\²„Mò8ïFºmÖ@-k‘²ÆÆâýE4ã%&&|!ùÉ¶¬Ý-Ã´iFtÆnßF,™hüXÚgM´æC†ý±yTáF‚›È5Mµ²MyZkbÒ$NcÓH˜ æÊ")-ÎÌÃšþW·à6ÈÚµ1 U!§Q…S{E|§ú¬¹p‘§Þ3V;yæ=þ³›$ªÚ÷3÷~ÎðÿŸopUºQÃW@kããËW>¤v¡wbyns#ÂwÈ^SRÞëü{8sR¸öÃ~›~œ%´2!‰c;Djl>+w|ÇöäýÅÔf@dÒHOE9SÅ`N„*,‡_f>©;Ðš—ÿÍ“Ýú“CXë«)Êd·O"$MÕPÉš›|š
2!E‘s@Y*e¶FÙÆmÊ˜$ 9lE:º“emØøSàæú©É·¤Û~¾®î.²£½€À-ŸÄí%¹©*o!†r	JÓ8Ÿçj£¿©–n¨h¨¥öjýÙHXóæ"AW3VSµÚ»zx·@</ þòõ¹‰¦‘´R á@†(÷±
ÅÑ°)9–¡Ên/Ø¹Ú5tLOkµÔ,vöYÄ¥­µXÉZè±y‹¸K™“ú¦k/â	yyŠ˜°’ ŸÜ ­M¯½ü«¹[µkk+µÓwÕ”ÿH¡š…&¿_ õV°f·EFk$@²Ï~ÂkbµÍ$ÈÍØŒÍøfüû®öƒ5ÑZ”õºcÛ}‘ÿŒ[GbAB³°ÓAk³ˆwÕ*ã2éO“ð¨tŒN„·fœ‰×tbÝ¾–…ã¨YS¿N®*ÞÎ?9>^?%ýäÖ˜«SÈe—»²CäÆ¨líÛ»wSy|·EUMWäóƒ%Z 6Ü½r£cj° õÁ‚¯×`zkk]{ftÙ-×‘Ió–½çNZûÑÖêZ¹¢nßß¸KEju¬ý©”i3O?Ý‘L¶=½¯ñàñÿ5Ø¸÷¡{þ2óóûFjÚþ°6+]û?ŸX.d©/äi'®á4â¬F\ü Ëí7okä. çè¾ádn¬ØÜ=˜knÃš‚÷¾QèíüðØ‹óšd£«}«}ôƒgñ³¤<’	¬E¬&‘ñÅ¿’":êQmÝóÈ¥jW,±ÑM¸bÍÔV¹ã7÷úêªï‚m~ý‹køAâùáêxÃLY÷À>"<ov…øºZûòûšª[g½wËn×ÌèSvzÀNÁšÖk±Tûðn®ßqÝVQÇ€[fÒ×*ì&H»Ÿl³ka6$BKsâ•ùlGJþ¬¢ÍÎøš5Ášöl:°idR"Xãë²)ÃöÍk¾%v`¶–ªZ[1Xcõ°­¬¡·ûÖkXNîÛ7iþ"ÏI€CXƒÕd¤o¨†ÕÈÈô:a-”¬Ù¾{iÑÚë!ÒÃš4µ‹Àš³‚œZ¬ÍªÃÚìE7‡Õˆñ‹šæ¾¿Õ)†4È ¬Ù IMKÄk7ªÅiÕ(Hb62!î>´.Q¿&>coô4¶^™÷ƒì•éÅ?¯¬ªùVk„o@è°TY3ƒˆÈ§XŠÑì0(mëÃŸ`œ¹¬aÌ¬=ôq×XÅ”5Cµ`ÜEØBWì’š5c.ï7é¿§ÊªÕd@£ýÜVì'ÛÔk­z»:oÞjÖl¼æ•5&Z|˜¨¬ûÏ¢Iè²Ææ£B*ÏÖ2…·€ÔŒ•¨0Ls°FØPYk©Ú3û~ë¶Æ¡úa+vÖÇÙ°ý1uæMñ›=ª‘ÉÐcj¾~“Ïà¼yèF/¤f®•UUËˆÿ«s”F5UM,¼ÅQd4ràñºdcþ™Éò•W^‰p-J…i¦­it¸fE¾ìØ$²eš39ëÿ…eE]iróy\–P¢þ$ÊG¸À$#-P™&ñ¸Mn'eìŽ«™u— ŠÈB–“]øñwÉH„rX&èe4iä“‘­s‘º”Œü»ä/"·‘¾Œæ’<d„”–€Ö¸žvå•k	¶1gTdYg¬¾¥¯Øã1:ßÃiÁ]åø·ð÷™èäAg},	 ¥w(BÁZ©d¸vàÚ?=¾¸<Þ­5-¯LOŒ//HS«£®Ë|4Vóð
Ã•VV ¼¶Æ„¨©±F;‡ý¼¶ÖòuÂÚå(•ŸmN9u‹Ûé¹K×J“Ír½ˆ‡µ_ÍMßª©¥öµµÛ¿'@´ûkhl·ïß_çÀš
ù]+l`Í£’«@m3	r36c3¾é²5ikÆh¢5M°ïŸŽhíšo±3¡LHVK‡ôR Kƒ¾fcôÐÔŽ;“˜òã„aiþùú÷P¥–“õH7§Ù~½€Å•Ç§þìYl­ôH+/>›y”Ù¹°<þ+Õ¬Î¿ÿÙÇß<ÂCWüûe2æZŒ°Æ††ôâ *†FÙp„¨põ9}~hPÕÔý„ƒédÇ¹lßÐ0P“(XÍ}[Ûwë/@‘H%uí\GÛ:€5¬FÔl­@Ùp©ýûÛ€µ‡ö¶80?ŸmDk<8»ü'8íO^ùã_Tº†¸	l„pÍhm]Û5çâOéšã5¶ß|ôÆáŸå‡¤½Ý×ŠÅôþmûó™žÔ¶fÒ8¡µdËí¹±àkÆxÒådê?É†ÉjÇ\þã`RDûú†C©ZhªVêÔO8@ƒÌ¬¶5B=ÕxopmÕð|4š#¬Í.¯’'ye¹ae•JëÙXíBùâ,7o>áQ¡C¾ôÑ3*ÙÔÉ7}p[†Éˆx¨tß¦,(‚¾Ùxö×~ûÆ­[µ´é­@XÛYQÆm…
dZ:¹[É“ò“tkÕ„in§šKy¬s²™WÑ\5Þ&-:}”Åén‚µ×ôþ£ìœ$>‘ÎÔÛ~ƒ5jJÀÂ?ó:Ö¡0JWÛ ¬6ÀÍËÖ~uü a¼v°VsÈø)Át×.*åpµÕ\<¨ôG”5N±_Üà.®Ð;Ðš– kæ,â÷ÓGØ.ŠÑ 5F,€5˜Ëþ=V»6qmWnªÊÆ¿ïÒ k¯¯Sô"$s˜Æ¦•3a=tf+ÊZ5m¦-©a	d“”&d›ö(VS0Õ„AœF77H'­±:>«Ù¤µÀk(k^ºk
JžXÍ¨¬ÔP?´­ž©®¦ÜVlQôc?¢4HV:­‡‘`ÞÿªWÖÖ¡ƒÕ¬ZH¸.(âÃr+N[Êè¿½¥mÝÖ–¢¯p™™¶sÊšÏ‚Ôpz}Ÿµ ­mTÖŒÐ,®i1a5 ÜŒ³»ð#QB¤JÖÙYxXs£ Œ{jþ»cGˆ^SoŽ«È]Þ\§5.A[Ãö½÷@5c5{Zƒ}Ô¿£«+h“Ï‡Â›'§j§zo|jÊ‰k×–é¸Ï=4}±E$6žEª¿ñš¹øóß©žnmŸ¿ò¯»Ÿ8?Lñï Oó6ˆk
`­T\›,ôdHiÚIùTU'l°²Çh›m–ýÐ9Ä±b¢PˆW&+šåÝÉuej¦6–û`ÒZ·¥PÏ¬×ZrQ[ssª±UÍúC¦ 79‡°e5©lœok«Ë’çEeC7k3î+³hƒÉº`B“ªäÕ_’úá˜Ò¦×ºÒ¹–IœÅ˜ÁZZìXàÕfŽõ·Ãß`¼&jéë9VÈî0aÍ’ «•š‹D´67¾¼úÅìòÜlÏr*'fµT>™øjë¹pGÃ‹;Z7UÍùŠìt´ÜKUcÏq½H-Ç¦(…5w%‹ÈÑÇe8MµjSj²Ö4iÞìï 
š]:Xùø6IÔ¨ÁkZ?&'rÎ•¼ÉR›Ë«ŽÖÖÖ'AþÓflÆflÆ7Õm Õæ–#eM¸f´6eáQ/Â›“Öˆ*?88+QÚüY›SJá‚‚ì´ÚÕLfÉÉT™)d¶'#Gÿ,<„eÁZ¶/d¹$Ò¸†â5Þ•Vú|_¦{qa¤aDH²\¸7¤*iíÈÉ¨7ö“A÷kŽÕ|tæpðÏqïì~b¨86:6?˜ê·˜‚æG‡qUD|Ë•mm+v4w›÷žš,æ»÷·S¬Ö•Ëìo'²µÑÚa7ªÓåk[Ú¶`¬¼eÛþ'Ž(ô·Öe1å[¾óñïßÿxõÂâm'°E¨ö7Äµ¸|üÕ¢î?”®9ZÔŒ»´¹–ÙÙ”WtWo£4¡"–ê<Ödó¹nˆm°çØ¹ÉÁ«b÷K—;<	«IVS¨ä@	Å±óçÏÇK­ú½yVi©šxÍçI83¹O’!-KÒ47Hnõ}`Ü‡n\¿ªFkM³Ô­“Ã-È…eÁ+7*ëž/‡½…Ç¡ª‡Èƒºq’ìLïù]&2ƒ<‰¶vFæý7@[o…ÚèµPn‘¤Ùk9F#};·¹*š²nsíÏ6²´ºYè
2J‹hD]ö´&X3FcÂSÙ&³Àû]â=Õ±9XË*Y³o5ð3Ã¢C,%ªÚ×ù‹”¤AÎÀiªV;x0['Ÿ~…Ô5v¯ýó¾,?ÇÖdJCŸ±Tû4ÀšC±’žØ¬š|´ößHƒT8g‹‹ŽÖÖ´IV°¦“:îmÖÀµ‘5ÏjV§ïüüW”5A«[lõ/.kÔ­-5Ì@k¯--=ôHµKEdð¼Æ2KÔ"dãR#®­s‘3†j¬Ô¢X#‚Y?cKœ‘ˆ"Ý‘F¿Skê%PŠÿHƒK_«¬jÎ¶ßéjQ¯5‚Á¤µñ^O…ÖJøpIÖªÉÜºT6³uûö­èkxÄ#lâ¬ûXæ½ ÍT­¦qƒ¿ˆWÖ<¨ù¬ùÉaÍ7ÄfÊæ%¶
“Îƒ¤–ì§qÇˆä6n¼ë¹ñ–³H¼)Ý‰×xX³‹Ç­“àñ=Yð¼ÆzâëÁÚ}LU)€4º‚ŒWUQØ<¾¼ÀÇ•o’ÑšpíyëµçŒFv¿ÚÒÙ7jWˆ€k/™Ó&°)ŒÔ,x^H'µØÐÐÎÚªŠd‘O öôæ(÷â‡ÖúíÊ5?Ô’ÉÇÉékÎSûå
ñJiÍg‡VèHš—üEš“†Xô6ëÂ„è’ƒ£|úé¥Vðfl–¢[Vúê#øv®•ô­©Fê×xŽÃE	©à]î‘DYy5“I5ÇFiÂ51[O1FððRU¿õô¶­!½IY#Zâ|œöQAÐ—Öåãï²ZèÉÉŸôª. sÇ/,,Ž/ÏòO/ÉxÒ¤<Ú`¯5þ|¤³\Ö¼®f÷Â³(ÒLAbÀ©)Ö+k¥Â›ý8®‹Àå‹ŽÄ.^º<íkÖØBôjFþ^t»ÅÉ©;wÞ½ÿÛûwœeÿmÊÕnß^®!ìËB/ìqGjÕˆÍ$ÈÍØŒÍøæËÖ µ(\Ñù¿Éiäš¬ûM\£ášJp¦ù¸^‹›$TÉÒ®Æ™<Ï&ñË°DH>Ç‰L®P	«Mê’Gùv²3‡Ÿâšå!™á«3ÇLnãÊSL&°ó /Mx×¬HF‰—ŽzÓhí9ÊÖZbHk=ÔœäKc}Ev}Å±'vï.žíÉççe29?è0ðÜ”]ª½#Ù¼½9QLÕQêInÙ²¿}!hÛÇý>ÖýÙcXmõ×ím¯nÛ¢´êýO/ò;:øå—'FéýÙÇ¾¼ÉˆIk†kD¨]´öyèºf&þÁRpf!bÓŽøèìYîA[#+ª}[;b;ŠécºÍ€#T¡F­ÚaÞ~ø0ŠÜ9§ªñ«ZWµÁÓ§‹¹áW_}õw¾óàQä™KÏ>o×¶ÒJµ……U:ª­`"B¨@MÛ•ë«kŽè¤¬i0B36t7LE`:ømu¤¼¡<Ñ¼g&i÷÷fí¾-<Z)‘QPÁ‚«ã­Co>ª½yæV-¬U­™%œÁÚM)k½•×h8ÕƒÕ\¹Û1ûÇX}<ÏÝôÈÌZ~"©”pÊËj¨`"-!ƒÔ3)g‚5Y‰¸0e-’Öl£¹yGf!¦]N†«sek
×aMßD§ŽŸ£Àj!ÒÖÀk_é³æymÑXA’ÖÎ…Ù¥^íŸwí;¸k×kÀLæ‚W8²pé’L~”µ¯¯Y³¥TWóÊƒ#b5`.ËŒÖÀYyÐ“ìÂ€•­‘g´6'VóÂZPÖ®yãÇõ¬b°FÍ—Òï>BÓ5\!!7%¬­£5ƒ50žb$Î*UÖ¬jÍÔL¡¯9b3/JkÁ’_ÎÂ™K½,	½\rÈ*DBÜºšâwp×”5šbAY‹Ä5ÇkL}½a3Ò ª«<tZ³¹‘ãöjB°VÍ÷BSC„DXs›3Î	Ò8Ï÷YƒÀl)Mƒ´‘yiƒ‘kÁ^Dó&óÖB4Uâ2âÐ¬Ì…‘ÛŒ¤5kNO+óÆ1Ik‘!d<®DBYB ¦U¶P}Ä{*w²7Q­Š‘‰ÐS|Ü2XS
¤HxóþÈºÿÌ™S7N²ME7ö½ãËÓì¨ ™åCÊ%f;ÿ;FkR×G]{Šâ7ŒFž|B¹Â5_ºfÃ„`Í:œ†ÉL‹DÀx>ul^9™"&#j
v¤‹Ùs“jµV__Åo§Š¿VG-5ëhMº’Ç5Žá5	ki ]&G6{X+ë2DS‹lK*à&Xkn¬ëhëê@E+ ¶µÒp­­‚CX£µGª®Q&þ`¢|þ‘Ùò(tqôÌr© ¦{’™–/$D–¡mZ±3Óo‹¾6\YÓœ%;’äÑk‰tn(C±šÅzVk)i°šrÚ5dùÂâêÕ¸yy|¢¡"Jø´z¾Àjú1ðhñ¨VatCÔz--
+f{¸¥/¾s=­mÖûÍóè© f×®‰øJT4‡gOzh/k¦˜[»69AÞ^»ýÛW—e,Ik5…§5W¯6ª-Þ3g‘õV¿ØL‚ÜŒÍØŒo¬lí¿>ðƒda”%¤ŠU¸ØtÁ¶¥VòZ“g²ñàšÆãÀZ&C"†%¼ˆ%»¶F?ç\†Ë8–Œ'q«‘‰ÑYUS™ÖùXÏø(OôP@Ïó\›G–W®c2b}x‘ÖžÿäùKÀšhí¹ŸBkÃ¯þñy.QÈ¬y8V$ßq”;ûLÏ`O>3:ŸM¥3´–ž—›âX_®G­ÖÒÔÓ.—¥P†ìÞ²½»Ð^-\«¦?5wû{³ýƒiÚ–ÂiÍÍ˜Fî{lÚÛx°1Õ_€	ŽN,ÜÿÞ¬Ù÷‹Õî¼-uío,ÿ÷?‘ÕLZÓB£`Í9Àj†]×$«9X#ß86˜F®Â¦ò0ÏaÞÏyÍÔùNc%Ì³ßP ±Ú‹cVþÄ;ï¼óÊ+ÏÙƒH]hŸÅ‰A—6…G5Ê>VÞÿìÊ[7._AO3;:]_'ù‘)—ãà=«Ák¼‡;#\F–ù‚+W>üÿ|5ëñ3SÎT·"ŽÔJÊ9J¥5îÜâ•ÀÚ¡3GÐÕjè|+X‹lnš!¤øíˆ‹©ò8¾"SroaÍQO¯{C
aÈ *$ÊãéÑam±S­¾fMâ— Íë ,1™o¹nEæa47šÂfh*SûÜ¶Ë8õ öëDväYÑ†8ôõÎý&­9mmQ®ý'4“Ê¾S»êvÑ›íŸñùÔ¡™½®Õ±šŽ­rí×žÔJjÖØô7ä@:eA^×
¯¯9·~@èÈô¬8Më¸øKÚ¢¨kvb;0 PÑZpñ ýÎ¬±·Í¯>zU«F6!Þ"Kwzô™ê%º·í1ZcÈ0WDå\ÀšÑµ}ÕºßÙAŠÖXôJF8Þ¨¬ÁFÓJˆÌ¢7¼PÒ1[³=ÕÕ˜}¨äî‘ý¦¬Ák¥}ÖÂbùl
ßûÇÀÚÌö=RÀXKbµ-|f‚µ­´Ð×lÙjŒç1O°üEl‰ÕØ§±j7Qâi›ß²yÏ~Á„‘«=a´0Zca†ƒ£NÙCj©­UGcLE¬[–ÊÖä‰.ŽIP•¦°S·j¿C´£5¹ÁlPê:Ÿ ÄÍ÷j«¦nôÖ’]³Œç5RCG¯‘týUÁZÈ…4\ã©Þã—Ž¨oÛŸSåš+]´æS!àÄ2"½ºVÀë*W_“ì?{LåjóÅ—±BXÃ>+;YhN‡ž ;aOgr¯
Êš®a®DË·XcÚœOÕP€*B ®€­ê"%²-¥V#Q£µî ”Ù­É&R[kªµ´ã3Ï·|+	‘m¼…Ù©®ds³Œqª!5€\YUhÅ¢:é@›éœX­¥þ‰QÌ-¹k™#¬®§ÂÐPÆ‘šÖd.²‘Õ‚5³í_]¾·pU°¶<;{ov 	·ƒ¥ ›Ò8ÎX7"‘ì¬*	ÀŒ°gÂ'ïÞmóÚúß<
Ÿ¹±bÍëjµ¤=Î]ž›¾87’’iJÈdDS–ÑÁôTMï
Æý˜õ3þöãëÓÑ¡«M©1Ž_CVºœ¶éÚ¿›±ÿ DH×;¨k„y ¬…º5V9Bú^k‰ÍçFÜÔä/¢y¼S‡ÖtÍ‰ö°/Àdœ,äí”Š´3Éª\eU7g2}<FkÁ¢„ŽÚDfdqpa@½a–i´öö;¨k¢5gàÿ¦ÑÚwøwjwê:üúéüÕ:­YÙÚèpßàK/Ž?QŸK÷Ð´8–ê )‰„ù\œÌH]¬ðøÇ"’üùþlW2M/îº½mø2ïß‚sÿÓ{StÒéÚ_˜/ÂuZ¡¶mÇ¬b_»n °ˆÔ•²;|ùç¬þÇâ
þBKûËïÿgiÓ5`´¶®K¶žòš¾F@Z¾øÌÃ«ÁÚÚKcç‡ºS*H;ú£Yïë³çŽ"¼ñuÄad5}¹™õ›Z·£çEž"“ ÙR³›ûÏ¿»ÎªÿW¯¿îŸŠzT3±LŒvý:ò°µ+–ÿH}·>¾¢îjhjb5Íš_ÏÎ,.üMnõžÜÍò<'n˜ÅÒìô¾Œ¥2¤¹1tÇÆ|à©j‡.‘èø”Ö<¬‘EÅŠB9ŽÖjZêoMU4Ë» Ù¦nNˆ¯	´¼47=óFkæ.’%	¹_ûxÐoM$ÆfÇ“Î_„QÉ‘¸fâ™z!úzúèï·ã	‡jˆ-èj_¯¬­Íž8¡24ÏjlFkÛ j§ölÊ‚<q€<GèMŠª];NW£¿¯¬±Œ”ÒZpƒ´,¢KªWe½¨ý8úš¯V›uÔ&;H¼ ' ¥Mã#$AklËÖ,¢n AÓs¬æü=³•vJ„T¡ÚÒÒÝGŸQ³µ¥hjÐÛÝ»žÕØMb
M|¬e]Í{Œ(‚²Æ.ê³âyÕ¬]TÅ°Têÿ¸aÎêƒŸÌ©~wI´<Å-^YSÙš-.2kÜœ¤…7	ßŒÉž@…žÖæ3bÎ"{pí±òº¥íè{,Dg\Ÿ51X©²¦Å*Ö 6¡h­ÄºßÜÛ$ÌgÀÃXÕØÔÛÎ:±¯©Œ NŽ­Æl;k*kê[0g—TâLFâñgÞ_[­=<Ewü“7/¨Ã¢9A~X“Ä®®øz†ss
óX¤5ìûqŽ»Úèñé‰Øâ_ ¬¹,nïâO2¿ö}ÙB^ÒçŠJ×„kÃ}fDõÒ‹.£Áûø{ZcžÚcU™l›À5hm¨/ßŸ«ªˆuS_–;¥ÖÔv&+J¢Rm¥£Š­H~´ò5«ë¢2­<ÒÓp±[m¦*·•Ù>kDkSj#ùr~¤s$îý0Y#bÚÖ”l#9îÊâÙ‘ïè.ëêh®PÆØ•ÏT”©ŽpCôÍé‹åÒƒÅbwBÔú†žƒÖÐ‹=¨_éŒHÍ6Õäv;+V³pæ"R´JëÕLÇ²K1×4»°
¬M44$hÔ [?Irý=kY	kÉ$Ù£¬U>d."B#4cZ¿AE¸²`­¶´M(?LÔ{ŽRµ‹Óü`xŒL‡þj%4æëÏX´c^‚tkú:¨?¾cM±Wz§Wçä)o-Dï¬FV©­s‚ü/ÿ´›±›ñ–­IQ¨&aÿ[„5[»ÆUÛ'Cª¸Ö÷Tsû kø!ØŒþb®j-®²5ž)ÊL‹1ßOÑŸMgú-’£<öCpƒÎ(%ÎtâðœÀN8IÕÈàò…D2=¾výú—a5Â2!Öœ¶öÜ+¯<Yk°æËÖØ,@µÁ1`m(ø©5v*¥Ä2 ‡Ô½LÚÚ±~Þ1ÚOÉnd~Rùnu8h3Jy@õþÖB[{«zOãZÙØØ^Ý‘­û—Ööâ.‘MÜ[ûñŸÿtw‘…‘Öîÿå«½ýkèk¡tM¸Æú€Öd`)}MåŸð
Ô¤¹ÁøÆK?àþÁ`@S›$AÒÁÚG×|$¡®àc ù?ùW>ì±›þÊ¦ËÆCÿkÏjŸ™[Ó·è‚mÔ¬ñî}<ªáõ¸°ú™½•7¯6Ì.`–H,^ýŒ4ÈrJ0ºe°+Êõ Úí«°¦¾ª*Uxïñ3”£E´`Ñ±Z½3½ß˜ŠµÈÕ,OŽÊe\•}O'QP-e­‹l:pYç‚9ÿdpitu]óíÖqÖÌg¡‹‰fG-™’`Ä9;›=xP³ñw¨²µá8)Hk/GYoÍ—½#±ÚO½ö­FHù—ˆ²¶‹Ý9ÈÌÁœ¹B°TH'(˜ÊÚ†>kNYûúšµ`0rÄìEkÄË…&"aM5¬ãFmŒeÜ?kkÔÚ,¾îHM¬FØ7#AXó£VHo7î>T¤†KÇÒyÖîJRÛ†…ÿ…°Æ¨ˆ„5PzX»á­û½¿‹PíAÕ¼öµÊZ“$¼@e_m²ÆÜ¡¢æáUN-m{fÛ–jdAÌõï:eª5BÊš×ÖÞ	öýnu °yƒ‘ k½kenÊï“ÉÒ6IjN[#–Äj3ü¼2ñ'Òe0ê³æF‚²æ»¬1ýššµ}Ö‚‰¿‚²fCh¯¦¶kàšNGý°×ÿßöÅk*NC^Çv¶ ©9i@fc”E=˜K…$rê½7-ßñ&^ßÕ¬nÄSß¾a°V3EÑZ¯Ü…a5co¬sL Ñ 53@ÒÔr!ï¼¬¦k–1
|ÌÜ¨êÍ‹jL‡f–k¶ó;ÞPøÂ56û¬%H ÄA˜ç{D&Gñ‰„N6Ë'[høÍoMW¹L·ÎÂ'qo+©…"]°Ú7Ë)¿Ü‡R8Ó¥i>…dV°^üUŸAlP[ŠÚYŒHòu§ÔJMem2~´>’]ˆj¼„£¤¼Iší—OÄá´<ÔÇµ4Éûx½ŒóÍÝ¹Xgq°˜Fòââ[,¶óƒƒ}ÍcÚÈÔ@-7˜îëLf
°š	kÿV»l¬fm^VfG¾X]™¯¢(O\£?/£å±ÌÄô$`Í(´Šem7K­ÑšB¢l_†(ƒ²¶®b-´Ã¾d?ÐµÞËÓêû¶•6Ã¶ÓpÊm]ÔÎÝ’‘ÿÊÊïoß‘¶6]3u­W.6ÀÏ4TóŽýË
o,²¼Y°¶›±ÿ€DÈæ¾ˆÚcOG±¨X‹lFÜç“ÃµÞ€eÚ‚'d`4 ÍÎ"­ÅbšpÌ¥5‘Î$Ò“ùÎt?ŸþxUe’ilE2³âÃ§>Ýƒ”†mm×
ÝäHª,€€ÖÒÍüJsw^¬‰×€5â“OžG[“Åsßþé“õ¢µóŽÖdù%R#_|	XC;ƒÕ‹]©ùzƒ&r¸ú÷Åâé¬Ò[º3$Avûëtk¼7;Oô·òÆæöÆÔ~6;Lá™¼am¯ƒµ]ûöb=Ò:°ø?þùÊÊÂÊý•‘‘Uô5³„$~B6äß\ß5¡ñÉ'ÐšÁÚçŸ°)wS]×(p…k?pÆáÇO@k!ÜOž;|”¬ÆJÄša[X¤'5â4æ„j¿CUã²v“ð¨f•j² Åã1D3€íúåË×?|_îW}–$ÁB[]¸ªH¤7T¶™ò¦…ÕånWØs¯ðŠš/XÓXá»­Jss[ãO<tÃGÑZ€5×÷æ:Z»Ñ[Ñ[.¹¦üÀÍ­œ®|]¤©-6O­•/äR!É" 7óÜwr››k"óJ;ç7`í°&sÍa´I}57S­±¦¦(7ÖnE ÆºÁ^$Ð’gµàÞ?7¬)0ê·G°ìÔk‘dÝ·^{mß^ó1’3H8ñéQ±š‰k†y_zX0…p¨Æ¸±d-ÀUj`%tYƒÔÕ†hÆC2ïñúÖÛeAÖ­AXãû•xŒT+Ç,)ÁO=±‰GŸ¹{ai	‡Ä«êgî:”Qˆ]A‰&8Cr’Á±šÆ#ÞºŸÅñš`¶n>ÒeAžÙP³f¿²[€µ l±ó]¹×qXµí| Ÿyæ‘êGdÝïpÍµZû%Òštµ_¾#Ts¬fÊš‘Ú¯µŽüóÁï0œÔ°„rg‰ªŽ£íÌÚ_½ªuÎ¸?2ùÒÜûÊÚFï~PÍ+kN?Í´+éŒÍ¨©¢R´fekŒnêæìüó‡jåŒÑœ‡kµ¸ŽÐÒjI€¬á˜Ò$À­žÓLj…©Š›O½€$Î"kd(žRÜÐ6…²ÆWôöFŸ	Ik³#‹$g[¬..\±†„Ò0^&R6þàšÝc&®q¡Í~q~ÇŽà42hMá]!™Pç5™=v¶°p^ÝSºQ„h,><Ö‹št&ÁŽxº?ŸäºÇo3}1>þ¸úéãÎ¸,[¯'aµ¼X9X3)¿ VkV
$°†¤­A^^álæÍ©f#èî.g0R>Ãg¯¦mÊ?lÆ‹_³#_.¿IxuŠ+`º×“ÌàèOÞP¼"7¯R¶ù¢ÉjÅcg{b±Ïj©VƒÖ³Ú»tXãò@TDÌ«Ë+³@YþøÈ…æfkjÍˆX­€Ób[7}VªmˆJªÕ¤¨IP#j¬År‚5Gk!ò‡%¦Æ¾ {n
‘iÍå1R"šõjŒ ý¥ªš#»)æSª[ûíêôý’*ÝWµ­\MªIX[^´,ÈõI›í°7c36ãî¶6g™à#.R¬FÕÊ¸eBŽÛÕzB¨ÆªÓX9
°ÆÞ—«IHc#õ½ÊÀ³< Œæj¹ªLKªíZA‚¨”ÏÎeÍÖ?ëLæI•´&šÉ$ùí°Û‰åeêÈ®OOƒ+ï^×%xÍhmA:rQ>þÓÚ'^UÙš»zJ×,Õ…õô0®WÖÆ†;ÛènZ W§hß÷Îdÿ¹:*ÏÚ¶¤Z÷çÆú%º´h=Tµµ¶’–™¢Þéi±Z6k7þ­míxù·ookßõËnTV~þ?~ÿöâÈê_¬™¸vß„5«]×"Z3ƒêÇšZ°öNTò¾ƒëŒ&u-$C¢§EºšB:‡ó›£çÞŽ~t,qOÚÃÚà6j°š©j”ª}Ž¨Æý®"Ï>ð\3MÍ¡ZdÍéˆ†Â†ºvý­·®êœÞâB0GMÆ# Þ‡^•÷ã•«³«hm0ZM{Üˆ`ÉÀ&^sQ
k%×mS‡9Â`íOkÕ¸…¬¨ºÆw‹uV1<ëSS×.ÕäçÛÊ•
ÔVHTÜÁ)W´–Eþ"‡èœÏnTLÚŒA*ç}ýæü¦óf³ÖÄqØöknMÖXUÇÜ¢ñ !XËþLDät5[þ¾°ü µ,Ÿ8!eM!3*_{íSNO6"²íSï :¬éUöÛœøô”`¹AeÍ8lƒ²Æ¨ƒ¼Ã½›œFØ÷ j¥¬f°æcÖNõ6Égd€mü­HYÕ(úr=Ok—à´ ¯ùàgf”ù°çÑGÖÐÕ0ïW–á…»3^Ec4V¥[É’Á­ÉjÄÃÚã^Zó!9-ôÄÞ(­={-(wžÃB‹êk60Õ›<I-É½’¬™u¿Öd¹¾Ëš-ZÝà¥5[Çýw
Á‡„{f4%X»»•4HÖ¥™={ÐÕÌ[Äáo"<¬±±h5k^YÓ™€šˆm¢„ÑØBø3Må>¼Ó{†`ÄÞ&ÞúÕ8Dùj;aµx\˜1nÙYSQÂY›cÝ°#Ji'áìÈMýÇÕdÜ¦YÃcmþ#À|`Å>ëöÒgÌ³ËË+|˜ñé‹‘{$o¯š/äý·ßÆ?X9ß¢F÷’’!Á55]{ç|_îôéÁÂ|è‘=8ïF 5V¢ÿ˜%CÂiŽñ™ŸLW’jÍ7'²et~°O(¢Uåjä‚ ­Õî¬PÄcCê]€ªØIRK…ˆØVSa€r›Uº©©âVŸi©º¬¼’ÎÑo­ÀOs¹ã4@Ž´G–r=¥jc«µ‘”iôÖ–ýÈt°Ö…ç“Z®)iE°–¨ª˜Š	êæ2}¹áq^M'‹=Å¡Á]s’™~~·¥ºZ¬öUo‘·–çd¹2·LçÉk«³ñ‘<
¼šaëC_f*	W¯¬	Ò’ì!«6òš·1¨2kHÖšxî´¶AX+a5‚ñ2É7­;”RÇþ…wëgçWNò¢Diª}ºæ¢C5#5¯<Otéj†i‘²¶Éj›±›ñì¶6·¾jMƒÅºîØ®ÞµÖÖ×¨…°ãJ*Ô ›½ºa¼›ðÖý…dU¶½0­EÖÒýY(ŸˆÇyµ_
[&†ð¦6£åjpÝS•r÷ñ••‰ØøÊ»sÓ+oßQkì;</…Ö¬níù7ÝŒÌ¾Þ-mÍ9B¦ÅjÎ½ƒÙhgŽ„}b¸>^¼¸¦vç€5êÔIÄD>iÝÞÖÚš¥Svã©³…öööT÷/”-nð]cÝdkkª3‰¶Œü{r™Æ}u ùjÿ2°r{n(3²òöÚøìªëµö7°mí¾¼Flü×>!ŒÖ^xyÍóò#«v*3»GðÍ>raéGÏS‚ä¹³®«d·c‡\!×ÛŠ¾x:BµßýTƒÕ¾÷‚®jÿ–ç_—¯Å;V©võŽ(Ìù:^¿tùÝËO¹.{G€X{÷jkªÕˆ/î]Á&fûâ‹+^QÚåe½››¹Ò(“âÅ³b{àì ½šò¥BªLÕ{ª:yÓX-ÀZÈƒ¼Áõò*ÄµØÃS½•¢µÎÑ¡DYÙV
)wËR®[B÷3Y3Õ'R…T¶Î+fÚE°#Ã‡q6r Œ¼¥Dú¾Øä<Nž:ÅÈ«j}„§Š5%AfëêÖ´~}KlV/¬emöË	àb/ö²j4!O5~ªê[pâkÄ)£5†ãÀZ”©÷<A,þeM±¡ËZHƒT$p¬]'€µkŒ°™„™õåkŽ_hºFÌk¶†ËÆj¬NY‹Hññ;HÅFUÍ–=R§ðìßö°¶íÂÒÝ»Û}È¬E–H‰ôù¦ŒØ€5…h¥÷"!Z+UÖPÕ‚y?‹íKP­TY»@!ZC¨\B*ÓèöÕ@LÑš~rú¬Æk2„ü¥p-ÐÚ«!ÒPÍ7Åþñ¯¬9û” ©ñËß5l#Ò<F¶=T­ýÒYüÈ®Tmi¼H,š&LYce¼ûK–Ò4HP-(kAWÓÁ”M›øø7A 
Oi>t&˜õä¢)d(£¬	ÖÈ‰¶Ù´ñR«å•ªò«Y-E¯ùÉ€tÿñ	•¬I[[/­AX#²F½±=«Oh6±°²Œ!­¯.ßûÅUËÀéßþíö}k¹¶öúëFk7O¾ 4Œý=²Q×Š/n´±°<HhÅºc“ÂÐÏZ;{v¬¾¢¦¾¯§?ƒÀ*ãcƒÅÆþò‘}])m'ˆjÝÿ[ZäaßRÓ'²—=Áò‘ènv:[7–
„9XkÿÖ²“ê®FAG)¶Ž2:ac™:‡q¿QšùE¶uqúÐSù*ZuÃ’¢Òyò(;œë“<û•EØYÑ™ì.ôù™;[ˆ$Gö÷d(jëk©Êª0ª	k)ƒµÀj™ó¢Ó±°üZ]aY]1\¹7Q‘8>'gøLHXÃÜ™¼	E‚LˆÚšmÇãÛ¸þöCpii¢žï‹d.ãaÍ¼ KYÍç@¢§½k´&Pí/X#LO³Ø ©é%¼Hèvç¢½KPW#T›ˆÊ8MT3ZCSS¬·\Ø,XÛŒÍØŒ­} ¬¦¹1J‰bG˜¸æ² µñ˜i#¦ùˆÅ£„GØ”!N·•»NUŒuOÒÈ$a—–#p¦S^"i¹BBké´ImjeïLgâªKîŒ-N×ïœ˜ž[YYûÉÚ·ï¨nX{yí-híùO¿ô”£µïùPÆ3ÓÁÚ_‘Õ¢ÀŒ¸(·þÑáQ„5šº%r:„áŠ=óó´ºÞÞ£¸þt*;6œoïèêÑ5Ó¢5«õƒf{[©ZH)r_ãü`>ëª–²“uûÚïýi!×5ûÁòøÐâý?~,Xc3_ÈÕ…5çér!ðD¢\Èç~
aŸÿás!¡tRÓJˆ×~tÔNq+Á=Æ¥˜õåÎÿáÕWwïªÉL8|öÒôeþ´T$…£¦e	Q×qÛ•xÈy)í*y®íŠåIz÷Ú\[žäû«¿àèCJCfg?üì
·F«³_(#²Á?$&HÔ‰&ØI+2ÈkŠ07\sGÊ‚|ïî}ô½V[ì k¥Òwt½qÌà*êë§Ž%ÊpìîKräŒM0b7°&c¶.\°²&“}¬ûÅjæü¨À´_éFžÒØ98Ü1;ž”²Fü?öÎï7ªóÜ÷ÂÖ¾´-°…@È7±0¶ÐÄÚ3šÑÔBAuðü:ãhäNpŒzQUõ B]‡@iHjWMHBÝ­o;Q08²†m›ieÄö±	'QQjEVÙòQÉ¡9Ü$íÑ9Ÿïó®—×ƒ‰tnÒ+?³Ö»~ÌØ^Xk}Ö÷y¾ÛüUëË€µ¢’wÁ>í£9šâÄ©ˆQ‚©G5­mTÖ­¿ü²³í´™é£XÒ~ª¢µÏtdl›´vø °¦	ÖNè‹Ú†->©fÍ“šæf‚+”5µÀ–	õËƒô°6
¯áß	k•HeFL*ayp¬¥MÎs‘²&]­úeíI´¦wùHF>!ÈCäö%RýH/\rf.ÖlËÁK”5&öèX¬eÍxÍÓšOƒ|’äh·	ú¡³š:M³`Í ÎíóH·öý§GkÛÖª9ZSäG!2Êtö"MVs#O2 ÔB,¸mnYBPS$ƒ¼û×Ö¤`·xXcIø¦Ø„q˜ÆÐg—ÆÖýÿ“Ù)kL^HV#,!ë·Bfu*^«Š¨(u:¨nlqH¥ž¶¤Yì¡ÿ%;béFÙ@¦cƒCÍê®¦<H€ŒF­ôþèfcãÑðœF’š¦“´Hã4pÓ”éò3›«k£ºÖŒ®\^%V¬=äå•ÕY–m×ï8_H]1.œçÿ_çûRãü—‡âƒ¿]×Ây7ôÈ†Õk„wŽÄ¸ŽL¾øÚétcC„È)£Ÿ~ùl¬±©Ð“åG=]ÜÕ$¿ÕªvÍ"…¿«£ßV2¡SeRÅf2Õ¬Q«fÍ¯;Kj°†©ˆvèŒÄ	­ÔÎv‰*¶3Ý$í»$IÎuÔ¶‘?ß5‰ÚÖ‰Ï¶«d¬¦TJeD–žUÆä’æJ§¹üžÆŸ©¹B¡-ÜTöåzv‚jDdÚ_|«UÈ3]»°8çtkÃcccÓèf„É	úÈIb4HËf®ÔÍ¹‹0J\ˆ«‰ÓX­=÷œÁZ®'¶»ON”Ö‚°ÆÁXã€Î_™ÂXÄÒÚùÊÔz$Ã‘Ä”5[å‚a`$®L1„Îj®\m‚I.
CµÊ}Ñš…'µMs‘ÍØŒÍøn{cƒi742["¤F£5¹Œ¸’53¬åêh§´–p™v 5Ït-e‘”ƒ?	…d9ÇeLUÙ¥dVçr -›•¬£QµFåZVul¥Nú±†¸2'ë“¥ÑJz†[••{÷*s”¬AkÄûï_º$qMàc´Fm–hÍ`í×]§U¶æhCH†ÁÁr–<HôêªIÎsIê.õ•ç{rû;w´[C­®îòÐ¡Ü^e¥`Ëuút°¶«u F;p U¶#Åý­yVùD; ‡Ø60y`ÿ‰ácÙb©cKjèÆÃ;_]ÿúë¯îAk
´@´5Ã5E µ#Ç¡µœ|å¹:ôö_åäÿkŠ(Â}Ã7ß|ãqò5-µfæº“pÊA‘›PÍkˆr€ì²¶j¯|®úüãŸ~úÉÜSÕÞw¬vçôuçcRg-ñqöšD5l g™/›ûc„jÌ+Ë—­©k¸®‘%¹Lª‘¸ÕéE¾|t:hj©®’_Ó…:D5¬….Ùn«ñ(é¬ç)ÚßrÇö{Àh-Ô¬M	ØÔ;M¯Þô¡æØ `MË£.£³ØNˆî_4ƒm­¾ÍfÂšBøÅkÒ'@¶d²–­‚ð¨g6_¨…`M~%ú´
JÚI•T;4Bt÷{é‘²vDã·k¾hÉ±°f´†œöŽ*BS²ãá]ÿB$rÚ™§Á2-žf7—„`Î>sAŽxyx¸âaMQ]³¦Á½6ÒÚKê¬æJU¡4óÁóT“ÖaØï[®3ÇNœFri‘¤ª¸@¨¹³ ¯HX£h­Úa$Du$³¢÷'d?nÕžú>Ðü<µLH£³`.ÒâcšUÑ”'ªÁšâèc%kÄ‘#>Ò&­WÇ«(kã€°¶¶m©ŠÍÂ:CÀ5á¢ïÆ†ã‡ÊÈ~"›‘%PÉKk¡fMŒö¡Ö>ÒB'Tc¬í½·£pH¸¶,U.h°·9X£Ù}±5*’¿jÖ¼®Æ/$ê³f¼Æ…G5M¶² ½²øË¨&ÏoÓ†km*K«a½î1X#œ#dDjÖbœæÓ`A< ©*Žtãî=1yÆ#­Õ64Ó [ÿûÓèl1ªØhØñ\Cï­~iy‚5+XÃ`Dg0|÷#aZãÿÿnnŸ½·U›SÖ–æ–G{—û9Ái«+³++œ›ªlü_®ç¬ròä[Ÿ¿õ§].×~S…k¯‰Õ~*B³ðÔvºÜÿZ~•-Ö$+üÌú¸†ôgé¦AÜðñÍJ©a	—AŸíÕ#2GÌ•@™èôX›ªó#Pç/ù„0 ²åQÕ°ÈcíLy+b+u©=6pÖÚZÌç­vQ9’yðŽÖøB.­‰G–-¶Ëó?ÛÓÅ7¡¸øÒñd¨ŒÞæJ
ùùŒ”O÷ô÷døÛÜ‰¬†œ	kÎ´£®V™»àz¾\Z`P ­Í¨f¡.¥.Øò»Ô@Å7c—!["•ëZç,BB4ÝZ#ãV“ËˆÁ\.S³L€µ ¬×~‚ìÇ©¦ˆÖ*½½÷O›~f‹Ç²"ýN~TLyXÓ'Äk´š5Ú¼E‹—ÉìiáL›æ"›±›ñÑÚ8M°fáMF¤¬y—;O9ÏZ;ómpño}²I…T›5½…t•iÌÀlp[†Í¸¤·$­fxb‡ÄÆ;)»²ôäA·|)—?SLf¬¶òÜs€Üò…æ4=UÓ£œ€Ós÷î½‘Ëƒœ!¯Yáš<!ŠÖ~ðùç</EZ“'äi`Í§¸œcÖbpðÜHY¸Fæ>ŽÅý¤™t&rýý=]t"=ðôÓ»òä‡ôÅ]y¤¶îbÿi»I7cp==¤PÒ;O`=Ò“Ça$?ÐŸ?ðTGŽNÛÏo_+|ôÉÊÝ¿=\ÀÇßÔ5oáÏ@¸Òµ_°½pê”µxo”·#_HŽZ‡,T³	£‘ˆÒn]´F"¤ý‹Ó<ªñõå‘¿¾Kä‡Ï<÷½W”ÿxK¬Ò˜îÂ=H"ŽÙYPíc…< g	`×GW«†¢¦ÆjÁXD¥ «÷ÕÅHt6³¢DH×kíòìêLÉG–Ùr{<«%tƒ²1B{ì k7O}àÂŠÖB"ä-k˜£8mM¼VÇMà`­.-hã!~­¢ÔÉîVX˜c¾”Ð ËÊÍÔÑÚ"3­Xã]¤iFOÛ%ûGéhÒÓ\e^Á»|@ïÉª…½3lmÍU7ÇÞØgÍ£šhíÂ0YÐ­Ö ´‚5–¸ŒPµÆO?<ùÎ;Ð°Ö
²T6·¡›eORïvìXe£²fQ…Š>‚²«i‹k„­4®<M9¬Š„¬)Ž86!ì;±«9ïÊYßfM±žƒ²¶15Ÿú¾`Mƒ$6ƒµ1Gg¢(Š´BÑ˜c7GiF9¬&ƒuUÉÚp-ôY3RÓPí9N6¥ÑÚvþ<UþýaµÖÜ±©˜Ì4¯ï?µE°FÖ`5&Y@µuNLÆj
kÕ¡~rê (m[‚Á¶nÙº¶*äG±­Ñ{ºeß–iVÍ»_á›b¢0f×d-’Öl¨rí'LYJZÈ†ÔË¢&ä ¦ë©ZÛZÛPÿxdBj=Ú$ŒÖê-÷‘S_«LC	kŽ‰`ÒÖ^­™ ãê÷àÄ-ä3W%˜]Öø?õóíÔ˜Ôf?Hß»ÃÅTQ]ðÄŸ£²ŒÃÅêêð?¢ÿãÂ2Ö„öˆ‰¸,cÈ{Ð¸Æ¿;*×ì>ÿü/<Û³"gOkLëµ5ðì¿3ŠÒ4Mj†fæûUk]N§sYÉN©•Îý#Íx¦Œ
I"Ô$
WÐ&uÍÎ‰¹’kªfû2®b­K’š¢$M
'}Ñ›¼û1.n5­µ»–õvKèîîÁu!ÂqªÓYˆs\¾‹öØP§j±T.Ë{|,Ëò£¡µžl™€ØPA-qØíüF
óå,)' QÉž¾vÄj1cµ½°§}qAi§V™ìY‘(*lO–Zµ kÉºõ%@5¢¡±?H‹¦¾U
=ÀZ_X³,HÖ<«¬ŽèüxEÇ…ÉÈ•q`Í›†T;÷W“[ð‚CØ#RN©^VÕà4&µW±°Ù{36c3¾«ø§åssËsŽÔ˜®Éd„˜±™¸¦†k„gµà-B0šªfËL²1SÈÄ´N7Nµ¦ÊB86kºÆÕ‚kG¡J+e±ôÍ¤²¹Tª˜ÕU¤Ø_ªËäÊ±=œÎk3Ý‘OÝž[žHÞ£ÙÚÝ»b5ô5ïàÿ‚JÇ÷Ñ°¶Îò7¨kr…´xãÜÈ`á´‚l}™Ò|=ÞÚK¹ùyô<„–É~¹û—Šýý<LsÚXí¯Î Í@±kðÜéž½­y.ØEòJŠû˜hÿñ·'H¬?W¦h®<xãâß–‡—Âj»ó·Fk¡ïúÚ›o:yí¥—Ð’nD\ûÞ‡¬ÑÆÛçäDÀfÒÚ‹˜%±ù°Ø¾RÍÐô\.Q@TCUû×“Üú?u„ÖSv?}é’XíâÅ;j0ÝÈ¤¥]¸ žÖ—Ø0êç²'ls°ÆIO“ öûÕ™ÁÚâ2}³—p‚ßîw'ÆŽ•j7F¢D÷SÓÑ˜ªF‚¯HˆÆ«ü.ˆSÇå/böÝŠÕÖn2aÍ¢ž›¾t<Yk°†´–v^kpZ{Ñ÷CkLµ	µÆne‡+N³p>!šY!ÜÌ‰ßWªÉÏC ÆªC4°n’É $»oÅóþÏò£^Xó¦YŒ„ggaµ`ßÿ‰`í¿ŸØ‡ÂfføÅê	kkô[R"°­RÖ”ûÈ'!7÷éÿe5kÖ6*knñ„šµ÷n•„nÖý€Ûð±QÐL°6ªÖØ½ã.ff&&«É’ÔCÙ‹xóQSÖÎš²Æw>ûmiÇ«QM/Åím¤?þDî",ŸÚŽ_þô‚˜Ð€š9¢$POkB«+ÄøcÊš¤53ï×”56]*dà5ë³&>á{Ó•Û}K£%Ïj’¬¬ùƒ"ùSMádÓ(`c	¬EÚ ¦É‘šæ0iøÈgA‚jÞº#šµGD–ç¾-;øI°†’V³uëŽ%>¶uËŽš-[`4;B©WÖBÉšÂÑÚF3H>”5"èkj>J«ÝZgn&€ÚôôãÂšKô›>j’±¸Mvˆl
Ìí÷P¸¥½<u‹Y·5zÛÇêØð³º^=£¹E¼ò
(%X#"X3Tãe²z#©²|'B ±-¯"ñ,ÏÜ×‚æÌÞÒÔ5™RYìOéºÆÏùÑI®àÚÛN]SÆºdHÂN¼<sø2 _È_Ìg9éöÏÖú…9óåL2×CËlì9vïVŸBÚš%ùY4p!SÓI{#u–Úšä ¨d‰_“qÚZÛºTvÏu—Šy’A9¸¬¤íjGuën=Ã¨X£ÄÉöbÊR&óV¿ÆÃCkTÂÐÕMÖ©(o"¬E2Ñþv’Ažr®¿)®v9 nLRÔ<«tµøFV³ª°(G~føþÂ
ö"Ëñd]’?LJÆLà™d5n£äa-8÷Ë`Æ»Åì±çÀ”3ª¶ó$Ó´Ü¬åˆ*aíß9šèpÞç(TcV\ÖÎã.¢TÆõI¢2_‡æÝE‚¸¦’š–ŽÕ˜§¬XM²ÚŒ£µŠO€\Ž(‰×6ÍE6c36ã;‹^žÕ0ñ÷´6Îd‰QWnÃk°š¿ˆsæR*äVc¶E^@#LZ+£¡••Y ¨™ÊbùArÏ%s)V‰°–Ìt@¼—#!#ƒ°F~	Ï@ßDóž4]*Wæ*é)Ò W˜/]{?À´†îòÜëŽÖ¥¡5wýuèÃLj~=XFUã";r(¶•§‰Å|?—#JèÞ˜œ|-HÖÅ¾”$=>¿£ƒƒ$’~¨=¥ýúù|nhä\vo+TdK[¶ïEƒãžMOX™EÌ‹Ë…Ñ».
ÎîQ}ýkÿ÷AÔ"Û“óÁñ×yòYžòÊrhÄukµø†—hÍwÊ®†5·_¾ýöaµjãkGpX>ôá_~ö½ïqm¥±¬ôPÍJÕ¬C¨vgÖ`íË;¯]ºpmV&ï]Ãì–pÓE˜5XÍìGg±Ä6'Hî„–‡¿ÐÀo%î/29ÓÄêç•Ó¬YãŸ°FÔW‘Ûí—ÄjGhíhMŽý¦¬‰×lÏqD7ò n+ª)Þ8Õ¤ì«X3?2HaŒn`JÜµ€Ø¦«1·«ƒì.àŠ,¡¬|ìÒK€fÂš°0Z“Œ&«~C6bÒ9?*ò§g©i{1šd'Û
í¬e­:*yJ©E1kÇ&"Xs.þ4R3„üñ~îÏXÕŒØÚ)S;ü_p’ÙNÐ${ƒuUŸ5¦ÊšÞÊk2+²›¬«Ú(£¹‹€ã7Ç-Ôj\¬Q.F³ƒ'^n!Æf¼²Æ«šÕ¾]Zó¬FÜ\BQ³¨†ÓÈÚÒÚ>ï£/)-"V™ùÙ„#)ŽÊ±šæŠg5ÓÖY÷{TóšZÖ^e’²Ö¦8Ã4Âø°ZSs´æÞaÔ¬¶Ý¸ŠÐÈ{i›©^;j"]Í5Å¸FŸ5ù‹xRcˆŒ }SìÞ¨H®ÚdD;Ía…=XŠlµ¦Ø–¨ÙB/jµZ[Ú²4½åM¡ZÍš7ƒÔ’ =®mdµ ¬=Á ÒKvHj5mS’ü|ªYÍÚc‡,Èx<é½F`4kˆüíÌƒÔW‘Í¼!5nÈÙÁ®i±ú¦«§®>wó(	Ð7ošÉÈ-g.âhMm~tKÊ:þB7¯ÈŒÎáZÐf4Lp![X^XÖ&&,i@âšâ"µÎòÀhäüRïírçõhp¬æ€]`sôÂŒÉ3ÔÖŸíµù2IY®ªCëŸDoË6ƒB4ìúâ$ÚF<-ÿþY¹D©®!Ý ¬uåp·g¯¤5jÑ”ÐU*rÊ*YÓ´"øÛKÊRpù:Ç´–²5"éšK;íÍî"¥líEã4å¸<¢î‘®>mÊa)¥€D–É¸X-Íßmì•9d.Uf$æaÑÀjëû«=bµ£žÕp[\¹ti•ç{³8öS/H¬.×KX£…~–Fk¥’Q¬–Ýk–bR Í¯ß:­™ÒÖPè©†5„5±Z•$œFÌÍAlb5Í• a†€?×X21„³1ìŒ–Œ~Aþ£C5óÄöº!Vc¨&Rûâÿ¼Éj›±›ñø/“	é¤µÐZ£ã<\'8?M)z	+·mk¨N‚d-,ÜN.Á”YãÃozZ!KFœ·RýÅB}J°FÑZ—Ú`³•Ï³ìÉe'û3åRÜgÒå¬Òî‹å>¾#myd/27¬Ý½‹)$þ\{ÁhM°fMOÉžùWßgš¹ú:iÍõ[;'^SÿÓù¾¡Á‘Ó=e\ Óµ;Jýó¹ò¹sÔaÏ¼ñZk¿"¯ìÿ~RÎò{Ÿïàª3Iä©OÈeÛÛ{NÏw&úú’ä íóýôÆy~T®‹\;:¶$o¬¬ü±Yþ
‹âî‰á>°u®_ÿ›:üu‰{Imâ×ô”÷ÃCC¸»gÞºdÿý“×ü½ƒU°·Ù^@ŽËª·êÿ»%ßíã¹µ\E^ÁbùÙ[¸Šœz	&T²Ýû"5‚Š{Ê/ïþöü½\ê.];ÿÞ5\BˆËÑ³ÉË\Á8µ™5V›•ÒÆ:ZÞý+µµ÷Ù@mk“¯GÉyõ'uÏu¾WÙjÔêÇ„5îHÖj7 Z¨Xk ÖN]Ø®Þ¬9míQÝšÛÆÖ_ÞÝMÍS7ÓéÛ7§¸OTRUñäÕ’CD…~;ÎhÝ¾d­3ßY³•ÏÖqáQq™BIb5&C5fÁ!­-ÀrZÄxÐ’jÖùÂ§É™¥^Ñ` Ö*üë1eÍÓšoyƒ$H*Õ˜¹£ªÖX5X{ú …’ò}ü9.#„Ú™ƒY"¯xùð‰NàŽ/
°”µ ­mì³¦ù4HyAVŽ:X›èm³4Hh	ñ²©È1b_kc'bkb0%ï~ÐÓÁ_•ÃÈ·²ÚL>ŽNoGV#dM/ZÛ·$03uq,*³@JSˆOXpH[¨Y³«éåÏoÞ¯•Ç…µ—~;*ÇE`Í—¢)|¦ãc=×¢÷ÈÜ¶}ziÆéÂÜ>ý(’€ÖBˆÒÞfÔäxÍPA°f€­‡5§"jci¬eÇ¾éš­[kOmã‡OØMoAÓ£Ì®ÅxJ»BŸ5ÓÖBD’š[B¤WÖÚ¨i
[vÚŸÞZ?ÅGcµà+â`­>-/‘:t5ºŒ!|[¶#çn+YkÛ\ºr<m÷ÆÍ„Ì-HoWÕòíã§nÞúßÔ‹Õˆg­é‘jt5¢±aêæ—
"\Ž&âåûÊ¸¼ÅgÄêr‰;ö(**];/äóã•?êÚ_]³ËõN#øø“Ñ@<B§­Mjîï‡ÕHº˜gÎ*ãPôúãÍ»… ÉD23Äªªò’u@pæ,WÔš:•aa§ÇîEí¹–`»Gs´r¶¶Ý¤zp.Kàn+&ãÌ„ÝQgm§ÊÓÄd‰TwWg­5-IÀryv±»“¯,©\Æ%XEB~Ù¢Ôº«©B!Õ7«•T'ÈrË5´á±Syëu5ÏjÐµg5ß¤“	T[«,o¡	“ƒœ%“ l.²é*Å×qšÂ­Þ–#¤|FdT¶§)-XÓqp£à…5M5«EG4Ç©ÌÌEÐÕDX•ñ)ñVÀ²@gNPëá£ù•^énzÙ1¥™rµ`Ù¯z5ïÉŒ¤¦HÆMVÛŒÍØŒïÖXs!TÓ¼È<î<F4;ÿ	^¸„MTÃšVü2ÐZ’;hUš›ÌÏ•e’•ÄR±ªšuåÈFÇë)uqÁšå‹™x1Û`‘¦v^Kb|C.ìƒ¸AVš›o\¼WùäâEÊªH…Tsì{4ÑùÕÙWIâ:ÂEêùÙ‡ºúºDHik€š‹ùîÄ¹_Œœî,¸nmélÏ;—År~Àcg;÷ïï,âô·‹¤“ÎÎ-‰Xbrý©À.«¥v_&±m¬›ïïßÛëÞ²­£ê”å–ŽDGfîáWË…òðÂW`¹²pcqåëw•	²1Þ¹xï®5Ë~ó}Äµ³çA©#Goá	­ýì*×Dk¹.t2¯¯¹ª÷o˜a´ÈnÜV0üÏþ‚ÀÿqHW²·p9ùì-Úª)#ì“O!5R»{÷âõëîˆ¹V*î<|ïèÙGž§Lüü%@M®"¾aun-`Ñu-ZX]X¦ßìêLíô}R!ÚœGÉki’¶Øir¦æ•,¥ªœû«íûµÒÐÛpûÔÕÆ&¤µ›W¸{T#0ˆ`M³Ço·Ÿ¹Ý°MñÐZv<+ÆRÖ¬vw"‚5V™º,9h¯‘šfã2_±&h´˜	)myt4¹?zX“¤$-#¹Iašv²áB¢›BEŸU<<¸´-Oj¼\,Bg°v˜DK<FZ[‘Ë¤œa0r`ïaa›\ =«a
	ÔQàv°åØÁ}<ÌûªUIk/øÉGÀ5}Ò{AVÆgÆß{otâ
3Çk²…tÀæY,Hò Ç ¦±«P3ŸˆÕLXó?ùÕ‚ÃÈƒ7ü/æÔ6ÒÕ–¦·mÇrTó,µ¡Í*Xã(MWSN¤–ÖÈdz‰É@95™BV)kŸ8”µ^¨¨ªé5›öÃ!´¡bT_jpëKÈ§¬ÏÚ#a! šŸ´áÝE,Ö§Aö®§Âèh¦Iƒ\{j¤Æ$e/HÜExC.#²ñ_Ö«˜ØàYU´¦f"àš^ÖÌÁŸ‘A[~Í`M{ê7
kÕX$Ó­ #qÙ†ˆÐâÜ~³à©JœÙ•«¢¢à0²]ÿ¿MõÄÕnöªl,»åÌ Éƒ<i´fiÇ<ª¦õbßß„²æ#î}üm#“;¶`×./ŽÎAk´ä5{÷!´æF¬tƒ§ãz¼GRƒ]0„kÁÇŸÙæŽÔXö «á™ïãô€lÔ®e 5åZ”›w§ëãªÂÎèN N6Øk¥›šÒú½Ôïi†f“œ“z¾•*ò,‹\F!uöêB8›Ä=„THºÅ@hÝ¬RÆÖ~ºñÄFmà2%p½QIL²z5	¶[»í“­5Ö0£EPÚY@Î÷tu+:jh~MEvZ+”™æÝ s![æ±©Tµ×ªXmgÄjc5k…ýˆÕ¢\Ã•k——[Ú”xº°8³¼:7• 'ºg]IöÅ	iYŽ%Y%ªU-¬5’.«Ø¦–ë)Ä
…œÁšÖdé Õ|R¦ž9Î_©ÀiôH#’DµÅ…Ê´`	i¨fûÃBæƒÝ2ðw¨Æ8¨¨¹I¨‘¬¶i¹›±ßµÉíÖô”ˆªyŸ¦ÅQ‹)uÇÖ…Ýf'­1„$È kîdŠWäáç-5¸ÎQÏh}­È±;•…zŒ×H‡$ ¹l&•Kº³6‰¹~kgc°–ŽU(Yk¾ýÉíô
àqYAËÓ÷)ÇÀ_ÏJÑ¨ä×ñŠzèøvkz­½¡©à2\ XŠªëâÞÎLóˆÊ¸ìr ý¹29}ÈnlîïNñ~Gª'Ÿ§<gcô4%o}É¾ÁTG1¿·}¾Ø®Kv©#Q@8,öô¸*%ÆÇ:²Çf?ZYÁhäáÂèª¶«?þÚ`íÎòw%¯]T*ä¯~E2äGN‰J¬rÍòbSì0S‡ýwf¦ª`ûxgçN>¬¡ª½;4tèÿþ»“æ yœT°W?ýô¬7€DT»·òðãÞE››£îïÂ{Hk®]»ÀïòìµàÕÏãR— )¬[ÅèzSÚêt-ÝOg¦Ûj“3+_´XÎZZwÒÛ?–¸ó`²ÝÊŒ¼½7šBV¹÷ÛÌ©SM·•yóè-Ý±÷þ`ÝZkcx9-Þ{›¤#ÚÍ¦›¥•sÙ‘ x¿e­ÓìEˆÎk®AQÞ&¼­ÅdÞ¥ŸuGZ­ÖZM79ÙšÇåÑPY£³"±EPÖÄy†jº‹âk?ûGn¬N‡ÔFà¤³ë!k¢µcRÖkÎ>DÇØº§~hÍûà4­P²v˜wN`JêÄÍÿ£ ¬ñ
añínçÖˆ±/}oÃŽ–™Q«YÃ$dƒÏFUªá`V;16¬;A¤J·˜ÛÎ¬3ÈðsÅdß–éã¥1¡š\û[¦×¾ÿßÈ‚4Ä¨$. š¨zæÚÏþÞq¥Czbë7Xó©|ßÇ»bÛz•¤ˆí“ŠÈÏh-¨gðšß
0¥-¦ }©+ö¶¥é%hm{°î‡×pƒÔËãÚÏeA:7Hl¦¬Yô†äGé|mKüR	\OÖÖ(U[Û­	×4/õ¶ìØ!h£vÍup´5!Xƒ¾\Íš"ÐóãibµéÐ,lØäæZ`ûþéu¬&B‹¤5m™€®å:·Wú¬á3²'}š,HVêbÍjº†àÔˆv‚¿Hãžú4o˜àÕÛõMS˜AšµÐë¯<«¢µ_ÊÒZdóäX£¯Go£B¢Z…;}RîCÐîyxy•Pv —¾ q?g¼…eÜoEkªtV.¤\©”Õ ­®Yéš2çñ>wÎÓZT2ìt5^;wä²`M‘gŒýg^Àb˜óO*‡—1AÚ«¥rŽõÅe`œŽe€5eªSxZ–Y:U!©ÕÅ“ˆj‰¢rSµV‚¦ÓÐ$™­ùn8¸âLÊ'º;ùwZq-ïÔÖvÈD©U°¦¶’†tz(ÅBÞ$QŸòÔ4_l­±³\£²¥D‡'³¦•ažjŽ¥•©
î")#V­&Xc%”««…VØG¹¦.+J‡o©[\]ýb˜¢5Éj£•‰úX<!Vk· ®>_¿zcW³ K€iÁ£ÌuÄnR&¤…;sq€5'¬ýÐ(°š?,†&=ºémŸ;·5ßþ°|¬ùš·×&ÿ‚ÕüÿybÛcëÅÑŠo¯æ…µË€\«mAnÆflÆwOkœuœ¶¦!Ò×–+£J†tþÌá$ëaM«aWiª5Û²œouiêêÏ#Vå³™Ò[áªh°F€5yD¦kõS\\(Ò¼F°§‡’£•Q¥Ò4«zÍj›/ïüÈ¡­üÝ+Ÿ«Á'¶À<>Þ˜Ïýæ|"ÓœNÁ«âþžÅ=˜e± k…,68ô‹s\àzÚ‹][ûFèû–£‚X›Ïöõú††úú²ý{÷Âj A]CrÅ"ïmÛ’*¤2ƒ©Daxx°opâßn|õÕÁå__ü·ÄØ‚3†|ðñÊò
°eR»ö+Gk/¢à]>#hkùàÈHÄ™à‡-.s¼I¸mTBýÙæ{Î‘ü¨½ûîÐžÆ¦ç>ÿü$©?ò¶"Ê	j!ðàÎÊ½;š{î½;×ïR«vŸëYRþÉõ_ßW-*UÓÈ%™ë2³<¤¦`ff¹Mwiu-¤<yX[×
›ÁËl\ž·}+§Õ‡tÈ†SWÓé©S8Œ5‹î[J€dò#
ë²ÖK.ds<ÎÇ3Ï˜¤LçjÔƒ[?¾³½¦ÆuYS€mDb3m‰ÍÉjªW½Â©³µY=É>„MÇjfÙÿÎ;6>#ó~U®O[¤ zÛ$dÕúôáÿ¨N<d#d´JxT«N‚tÎýÖÀ´ƒ¬`ŸùYˆ¼|pï¤õ0€3ˆÛuØÖ˜ä¹pðÿc¨Yó´Jè6”¬ù,Hƒµq9¿Îœ˜ÁWÍÄ+`^Ø‚µaÁ1¡ v»°.kûÆ0ðï=ï+ÖˆàAùí¨¦) ìKû@51rÕ¾m´Xã4Ai´É‡œ7zÁ+â
Á6”ÅÑµÍPãå-F|ÑÚ©ÖýRÖ€5ƒ0V¶/Pš®:øèØ>ÇT &Hµ•¥WÖH‚Œ<F+ZÍÖ„k`Zˆ ¬ytãÖ× `mûÚ¬E2–“K[ÖðY[Òg´é}ŒUÊš^Á]$­=.«¯ƒ‘€l>ýQK¢J«okhÀ¾¿ZV›ö¤f|`ë,}ÔÃ-ñ„ùAÆõì~³DÀ:Ð»q¶-E²	‘­¡®¡¼aÊœûÖ^‘u¿ÌE°ïg»©g;E"$Häz<‹Wm”³¥ÂDåþðDe]«Â•U²./,Üù=¸Ýuê¥Îüs1\{]¥koycHÉ­EM,ê;^š¸6ù"1 ümõÉº0éšèÁG8VŸ*'SòäØc*<ÜËÄê]Õ.RcM
o{gìŸIu¤jÔdD%¿%å)ê4…=?
y‹œÐô‹M´ï*v×¤jEr<jï@ië´<ÈDG>_[—hßÛ).±NíL¦¦u*ÔnÁZ6Ëád”-™û¨'NL‡–n&ÈƒDÌSŒW,û«X-Ø@^[Y1oÁÚý™ÅåÑ:bùÒ22'®`EÌO’%3IÖ	Øê¨™cáD3X«ºi`6HWAÆß¤‚‰c°FêHuÁšy‹¬»~Í5^asè¯˜, Û#HV´Ö[%­¹ÞjÌSúï¥[µšg5M¢5—¹Éj›±›ñ¢µ…H[³ÑŒF€µŠ9øëTå¨ê©S'Ù6OfLò!ëãõ²¡ÉšEÚL¤4HµÎdzrñ¢\µŠ
3!…_°–Ñw°ïëK¥¸Þg¹fp¾OM‘N›š«ŒÎ™®ò@kV5n._\z<™ß’¶%BZáZkoìì(&ßBN+‚cíý]¥žùþ½Z%÷K™¾>º¶‚áz8¨DjðÐP™Ë•Ô'P°–àÍAh›ÿü^:¯ua*\.ÓA¦€²–*ðÖ fÝéí3Ã÷WÞ›»/#ÿ/…k_}uçÁuÈ	X{óžhíUî˜qÔà)ò[Ï=ó—¿7Ë¨ˆ‚%£3¸Óøc‘0Yþ«`-}èm8zQT{áS/ª9UM9×¯üàúÝ{|9{áè¥_ÿùú…wdÃ¯„Â‰jrê©)¸¹ùÿ(T­Æçp™ŽÌL$$?Ö<	Ö(Épí_ëþ¢áöÕÛ»§n[£5âæ³·(T‘»Á.c¸+SkS¸Ì‘ÂC«µØžC{¸;	?ž›€ÍJ
Õ€Híc	Áƒ5ÓkÝË ƒËN4sk˜‚º=b50íýWkJD²¯çv¬‰ý¸¹êÇB¿õàoÖ¾MYs”µc2ƒ´@6;xŒ
¶‰cŸ}F3ì32}Çï?ì@ò°5`¬Ù¢Un¤#Rìæ`íl@µu¸¶QXãå±N°&Z«,R¸FËë}-£&¬™gÇŒ¤46À3îÙšafEY#øðØÁƒc½çÏ:eMºZÈ¿~ßÎjvhm?1X[So1Ê×Ö@4ü 	V^\Ó¬5’ÙLyëÖý„™A2EÞýNX;°‰Õ4aM´vôŠ©hšXÓc¨i?¥:`µµ}®eö6KÙ¤35<µtã·ë­ûÑÕˆmÀjØþ8ñ8	ZðCm¨íkqî" Û€[‹­Kv¬f.b#¯nöò5jç„kOÈ‚ÊZDe¡×£©	Œ-õ²íŸ†ÌsíŸæDà5µ'ÁZLtÆnVÒ±ˆ-­ÜÇCHkòí—rB4S¬©I°vûøÍ†úÞ[W«'Ÿ}öõZÊfHæ#GÑÝ9®+ôX»2ÕðÄPÇÎT=È–Ê¤+«³‰EzD®®~åXí²ïºö¦hí¼J†?xýV0†t¹óžÖ°o2'™:©wŠY:1k1 q²˜‚ÊøÃdF
ÉL]ZZ,™"å÷KÁíc2­öJ$²¥òÝDIùáê–ª©é’‡ I²þdÈ©UÞÈYôÁÒêkÛ;º• ‰	ªÕ™]ÐEº‘ïK-¯„üJR¹ŒvpdªÖËa‹Ü
çæ‹êÙ–}—R£µlñÅ×Š=¦ªi®²I7=néé­*ùÂ`me4ŽûLK[<>wmü¦ÕZ1_L&¯H)‘“¢¯OvåÓB[Öº$½ÒlF°f°ÁíÖˆEÖª’ }ƒ5õç›mï•¹sSS½V|¢±ªv/“`ˆXÍkAYÃ\D¨ÆDz¸CµQ„µå*Z³<H½6¬mÆflÆ?ÂdäŸ¾˜3i-„!—y:›g4â3!ÛÖ£YXKØO•3NY‹“Ügñà1.!…É|®ÐÏ°®PgòYB¾ZE$/áZÉåçœåâóƒ{¸´£¸ñ<pf„ÕîÜx„!–ÖrOíÖ¸ô¹õ#y|©hü/ïšBåªÖHÔå÷5%ãËpù7óóªC+ö'Íò{÷ïÏÏÏ÷·nÛ‘==)“U’+½{h(³eG	t+* kïž+$;žßÀnÖ{
‚Y¹ ïH€hRÞ‰LßP_"31œêXZ^]øhîÞÊpbùáÇÿùåŸ¡µÎþþã; É×8p*×Þ“ÓÙh‘ýù[däø$Î¿ÿU¸¦`ñší"©aþØ×÷.Òwÿð­W~÷;žAÜ}HTûTƒÕ"W‘‡+sw`×÷ÞÝÿüåï¯]»óç?ÿùú¥Kw¹w±‹œ±šb–ð´ö§ÙÙ•–åšÌþ'¬öÅb&À‘Gê+Õj ìÎý‚6n@Sµ¡ö"^ïW¯*YžpÇ	¹A·,*(kˆj‚µÞz™wŒ25å3I2~º}$Ën“ÙôÄZË½W¢–}à4¢mJÙðEkïÀšRUÎ&IÎíüéÓÞ©„~þeƒµ'‘ëÕ¼¤ªÖÌ’pN°›D´Ÿ›1$óä®ÖN›‡Y*ÜŽÃ$Pš1ÉËÇBÍÚ“”5ßÖg_(¬­¡£{™
z&àŒ€ÉÑ›û–ÚŒâ˜:ÇjPÓÁÃ¿=ë•µêþnÂ³ok±ÆqyXÃ·û¾1Œû%­aù(\F¢ã¶1qTd²/AT³+Þs¤¦—k‹©i¤™²æýE‚¤ë³IYM°µíé)ìW¸·¥jIý{ê'OmÛÁÁÊº?(k¾líøøÐ»ö³/€Ú£4ÈðX?ÄJ?oÛÅ|ð+¾"’Ùjv°g-ªUs£7©Ö@5o/òdiÍ×¬MÙ‹)ôZcËö£¦ÕËµß—¦yXóYrï÷Äf›]ÖÐÒâkqX!¦lGe,Ã/ìÝÃù!R%8©SÚÕœæì~SV$G:Xc†ÒNÚ„©­þÿë/‘0_>`MnÐÖ¥DfI·kh£Su.3º<WÉÅ‹•?œ¶‚ã-Ù0†%C¾I±3ù¯~ª'|‘1¤y×7É†ÕŒÍ¼²Æl´æc²½+	în‚3äÙV;ž÷Y+pêç2™Ažíqé’áÊ`ÁZ–É¹_®¹¸ù—ËçRú­Y3ìî<™”“g€3˜"±ëç»8y¡ö·£ûïjÏ»1!¬C®É¨¶?EªB¬æŠƒùþêÈÖQÃùðtÂ‘dœÊá8ý¥A7þ6ôËC6ãÓÅIí4X‹ÂdµÖ"AW#à]eš®ÌÔµÌ]^hão|qa&^™­w°ÖŽ¦Ç$Xó‚Z<WÒ¢©™ôP‰­I”¾Áf0)Ø’‰§¤¹ÚýB,g¬¶3dAw‘iÇDÍE%—1L!çðíošºÒ´!¼©Hï#iMönþÌžÔÄjLšñŠs¬xÓ~†ÈµÓ´36c3þa´¶ì”µJð±ZsO–&5\#„kÞÁ?€›Ô¤åÌ±ß6’¹œ\rA‚ÆÐÎr“gXªIÊ˜üìïOœç™ïÿ‚ó`„A–-‹7¶‚±ÐÔÒŒæu#G¥ñÌ jg*–LÂÁªN£Uf¢®K°koš¤VÍ&mB÷,P’*Æ&B¸ü(ƒ]W ˜¶•dÓ‡•…Bå£’ãNÜVTé|¾×ýÜÜãì¾Û¼áz~?fì„çžÏý½®ïÕÕ“Ås$™éœàV!Å0—í,3¦4
Û²•6B>ÙkØÇó`eîî=NÙL2¢åšüU·FÖã¼^ªJ)Ÿ÷úÔ‚F4uøj?fü”}Al=a9SÆ\äÉ†'í’¥cßÂ ¤ÇtC*]>q"Ý‘í*”KˆjY#={°'é‚ózrÁ_³aOªtbPv[¥Ž½%ò%;¢J)Õ0V]_\Ägä½å¡™›s÷î}zïÓëëë³×ï|¹d>#››T®ñÆñG¹¬}dS¼¿­‘“c€Äj¶è@üDáÒñ.Ú^ý·/>OÒÐG_|ñÅ;|VÝRÕD³¬KKÕ*ŠÚõµÙ%Š{pìú]Ij
_©æU5Þà,Û'¬-S¥†ªv[‘³Ù(Á»ºœUé»¯MSG×X­¾Q'Ï)s½u_­­á¶å72©æÝ8B¾Lf3é¢5gIÜp°FL6_#’íã•]„hÍÿÔ(SÊe5ëŒŒ¦UÖGUî#®1¬¹æjZcNˆqðäfj7	Éjlv‹nú~ÝrÊš}Ç7ô-‚µÓ§<^#Ö¼¬åqí ¬Ag(eê°FdÿObÚa½c9÷š‡5²$-€µß×¸Aj
îÃEvDì©&kNY›Ì@5³áÒB­Õ„C”‡Ñ.›.l£ó­xAcÐü44T•µ7‚´„5âaÖ|Uß8°	!÷àÔûL‰ÓØÅ.þÖœqbk½úX-ÀZPÖNY¤`íe[N±éN 5„5­ÍÇ\ô¹¡OvÖöLY{'Hù‹`‚uÿ›NY³’5[‚°vÌŽmÞºŸá`Ý6ùÎ7šCmÜýþû*^›nÅÐDÍ[(¥±yXÂZð1Pa­õ‚t»9©%\j£±Û} &Í‡µÃfeGlY ‘VÁgò66r§©¼”àˆÇH3°ÖRÁx£Yø6˜Oâ0Ô+\;„²öŽË„ü(6„Ìö$Úš~óçYçÕì38S$}Ñ‘¡‘éÊ‚&ŒQÉ„¬/€µÙu¼‘€µ™™›ëfãOã—‹¾I¶ýHï4â»®ý#öM×[Sˆ ®)2Âòœ†Z˜Ä[$ÏÅ¨1(r“µRº4HdRiå…¶UÊ•í	þ=Ìk)Ý%*rõWæ"Ì&míæ-e”Ä•uW§}gB‹÷HÊz;’‰–"©î	åq½'KzšBñLš.&ôf£n:S.µ›°VJªy’ž§%®¹CûÓáR9QêAKËé“ ºHW®Vk-âêÂæXè@¾¾º23½<7‹greu9}dÜ„5“ÔdáÙH*­HšŠšfKZãkÈ–<Ðˆ7gÒÚVåZÜ’áµŸÕ²š8·Ö	Ò¡šË
á“ÊäVYSfá®:‰äýˆö`•K­[?¬”5óë÷}°'G	ûüC–‘\Eˆ ¨	ÓŒÖvXm'vb'þÛhÍ„ý©šª5Gµ¸èŸTéšX­Y´öpXãh°††e’v‘‰òIî˜~$‡È.!ZO×àš²!5¦Þ²DWTîÉöLd3y‚K•'í	"SÎ3;º¹ywujT›ÛÉˆsð·‰R¤ÆÝçÕn-QÊä;¾ní~°Öß²-Œô÷ãè˜Ë”FŠûvï¦íM]wèrjuiÑ“EÌ™,{´K¹i lx`¡ûÙ‰”èÒFþc•â3’©Ö*¥¨!ây”¯þú÷+èjÿgsiqhyõîÚÚO×Ö××ÔèìËäqnàà¯7þ¶yøÿT%¯?wìØ»Ž×\€“å'ÿè!à5¾B¤öúërüÖójï|ñá‡|^õ	s‚Ùü°µÍ;Ÿ~z¸sgéúgä>ž¿8»¶aC]@µ¸-ÑÜâú'W±a<ž]Üµ2{Z[ŸÁX±ØÊˆ¿reööY,¡‹*”0×GÆå4'€Y<÷žê.re‚[DØ¯¢5fÝ™[÷Ø¬9óÎËÇkgÌYä†Í°°XÛÕ‹$ë÷Úõb5}úó„¨ŽyV¥æ«ÖDhÐ’×qá@Ë›óóiH9vË^¶üG6©jú½ª[òäBñHügðŠ*Ùží<¬Õx÷kÝªZ³-Ž¬ûÏŸþ|æÃ`M ¥ý%¶ÁUäoUÀö'£5^ŠGðîÊŒ"‘ãf<¬=h/ÂÒ ƒ²`*S[ÅebèÇôçŠ­gô€fõkÜ²ÊUÐB;KŒ·>64s¤•¯ª¢©±ú’µÿ²j­`ÿç<¼#È±é[2¹µG0¤Yºa§è{¼ÿ2÷LiÖf•¬IYs‚š—Ö‚k£ö<•ÕÂZ¯®ˆÚFhºÖ[†˜XAØÛ`ÖýÆj>²&œÅˆ“Ö¶+kÇ{Ý±ÕÎÅ?pZ›ž~lz_ƒD<<!w74x€ô¦ÿJƒ„ÕB¯µÐ;Bnó‚¤fm»²&iÍ&å,ZëvƒÖjÚb›¤6íÍhA¡Ó¤ã²ƒ éøŒpaf@ìôëÚ$XK ¯Ñ}ˆÒ_&á±Kòò™kÒ×°î:â³½E¯µfçùîmÖrŠä‘¡Óšì]ŠF×ñ™›]\,ªj¹|r[[²ŒÃ5¾Ê…|× 5ec¼
ÀÀl1«®ýHõ]žÖ¢ö–á<¡å“ÅþžL{E!Š”¯H:SÁ÷)	ÉšZåRK	•'W’á,Åt p–¯‚¥RòAX#uÿF¬š0)v>b‚¿Ôµ£ušÕTE`êÍ×0ºê:^tÏ?#ç"i‡lÌŸeI°„“úç/Êi.êx•TýL¦ýP{^n–=å>ÚÇíØÌb$èj5åjAV³ükÃ¹¸¼¼ªÖãGÆVG±[¾9ãt½´õUÃc$—„Ï¸·HÔhÂÓR÷d÷hý’ŒÏ`6—ä<²ê¬FñC¾’ïÙŸ+÷ˆÖˆ\¾œË;a-¬kžÕXÍ	amjòüÅIÆýóÍµ’š6AYPÑB7µð,¬ñï„B˜æe5t5â3—ýÈ²Ãj;±;ñßJktÆ¥i³‹ó„t¬¶lþ½‚5‹æ#Æi:Ûþ8¸fa-áÂÛ*§skÙ¤®²Fh¹bN³pªZÖ29=²ÍF9öñô¥µ'›IÙ ÈoZÅÌpcisjuii–Ê5Ü:œ…¿êÖ”ÕkkßongýI9ÛãªÖú	!ôç›º
G›°2±4óÉ.oø¶0\&y$Wx¼k:6Ìàs™ÁáãGG °TTJÀ]9’5SrÌOâÔÌ+:^DÀzÑX.2X#f|y¦xzõÞÝêâzuyõÎ½ëkx2bíÿåÝÍÅÕß|ùO«+Èå%0“Ï%ßzñõo>÷=(ìÄ¿˜´ÒrŒÙ´¦±Åœöç?ÿÇ|óEê:>úè…¾¬ñ!QTÛt	sbÙ¥;X@.}º´qZCÙ“yÿ•‹çV¯ºáKÕ2çŸeýäêâÔçsLE3äòŠ²"×—©k§-ªÛ5³¸8S´Î=&©¹2vW¼VŒêÌC¿hØÅŸâÒ¾"Â·N'éþ2B­ÖnxE°ž¸Öäé?©È6º¦chå3O‘4fì1ZQò¨ÂÁš3¹ït+âJµ šÙÑLD†¦öKíDkFnÚÿ³PŽ£PÍR"ú¾	®†iJÅ¦¬Åy¾híƒ¬‰ÃØ#–Q§‚`À†tGIÜ7~éÅ6]¬!¨9jûÓi0Ÿ¹Ø‚²öšµ7Þ$Ù5m™úJ°ëìSÏ>5#VwÅj@\/‘j}}KØhQYk¾uŒoìEi{Û’:ßÐb?9ð*á´4œë²¦YøüÉSf9ÆF$dâXŒ•Í…	`·öÊW¤×J/éÍ¡)6kl2",ƒÖDjë³ö¨®½)XSx@|ÐU$&3Eë3¯Á½oŠ ¬BM£¬‡–àù×TsÊÚý1êÂý©—¬îÒóX+¬ÖJ#ìÝüC™²¶{ß´^´¦MÊšxM¨fëObTCZ#2¾ª«Y:Z°„œœduÇ#¢€àû„µ`é“ 3iƒ5Œ•ø¦!'Dù®§˜KŽÛ$¯!¾©þjª[ãW9YoñÍ“'Ï\ºvæßÊ}VÖž¿a°æim‹‘ƒÖ¡K»à0¢+Y1¦qïÏ)Ÿ£we9±LsÎõ«³ËCCŽÎ/^a¦ìîÚ•µ¥¥¥¿™»'C’ŠðÎ–1$´æp-N…4X¸†´¦à`ÑŸ¯w%á³ü@>ÛŸMB¤„´"°”H´è(­‘<È|:—²§¢ò"ÓÔ¯T&IÊD":^H×I5¡Ô·Uÿ5=d’ú'ŽR«´Æˆš5ê«°Z˜"ßœ3¯ºþÓ°–¨nÓdü¤l—ÇD2*‚l‰|4}ðX¨žõ8NëïÙ«}U¹±ª¹½Yƒµ› ¯ê˜§[in7Ž,_0ZƒÈ\[µE‹"´véDgEÕÐÅ°[€¤6ó‰ŽEšä÷ÅÅjYíÅjµIµ¬æ¼EÄÝdA^¬<X=?‰ÃÈ–û€ÙƒÁÐ_ÍG`5ÖfCµïOŒ…fÍZø>…´#ï+Âº“¹;±_­Ý´çÑ{lŠ©Øh„
2¥,(ðöâÚ¸hÅkjl>ì<IÉš¥Žæ2 N>om²QÖ&­E6‡Á°U†Gé\7³(kT²©8YÃ¾ïÊç¨”Ë3“äPÝXÖææî^ L[SáÂ’ÑÚÔ­ýöûm‰D‰ê³Êþ‰®jèÛ¿ß*¹ÿ¾‘r[ YÎðÈ¥ }#•™ùËQd¡¯ó(×R‰‘B¡5ì#µ!îø£ê³–M«0ñ.c¨NçqÙÛ‘jèÀ}koªD‡ì|>µ'¬ä£åER!ñT\Ûü}õK¥B^ÿumicuyeãÂÆêÊ
¬F™ÙqBä#
)/bNvè„W×„hÃî„[5ŠæßúÉ“_(>üâÃS¿«ž‡Ô@µ+ç[Z»{wIbÚæwïl¾}áÞÒÆ|NÖ”ãnqíºo«FKµÛ« «`Ÿ™rW¦Ùa+2»z>#78+ §MÁD¶¢,¦Õè'í*,¸¡ ž+ÂÁËƒAÁ½Ô¶naÞ­ÈÂj‡nÜ7½þ<ÛÓ7bƒ‘“ó×ˆI>S£µúºL»`MŸ;pŸÄîº®Û`íx'!Sæží$˜AŠÆôˆSÃ5PË\û	¥H²IFûç_”ýƒìEœª&M—ÿá—*`#¼ñ¿‰rü3/e-À
ÊKmŸµÚVkkÞa s¶ýj¯½ö—ío¥¤=õˆÁšIyfßoèæ¶Óóó§ÿÍ!` µÚ>kœnwƒä˜…1}h{êÑg¨ZM¥j§u[N¦^	Ø¦TÞÖ*»~œóÇ‡È€4­X³°?øáÊš?s‘ ö}|aVØü±­c¸Öß¢>Ë`Í«kn§#ØrdÞÁ“ƒ5NíÝÍÏŸŒ•5–SZEjV¶FÑš[XkCf§FõsØ<¨‰œx#Ö«²7ÑAu¿`FÞö„¦Øà”vÑš7	Ò;¯¬Åä‡SIm37w¦¥¬½?½»Á»±ß·¥ýñÛ»/’5ŽÐam„]­$ºgÁºß‡ï¯fÀÆU}]}½'´í=±9uÊ›c6V¨¤Gú¨5Êø‘V›ð›ì6äë[¯¬å¤\ãÁµ&µÍnc×Lš-;Þ¬7ÜcÐ`ÍÂ³šjVÙæqðozhdrpZcVÓ°4Ž(rÓ¥ë-ß^Y\\'®__c]C\Û˜ÛPJÆ¦™Suíõ-u»]æø&@5Ñ6#Â¨¦àHôUd?Vµ,ôDyÆ*üR ÓÆ¦6WË#=COjk”úV.–yêa™È ùXr—&ú
ÅÒ;ŠøðŠ…ÎbõiÔ¯es4Š9Z µ¤Kqï‘NŒŒ­?‰ÚOó¼56Rw5¾sþDåDâbB@hmíõ3Í–ÚQD"b’–Á‘~ëF÷WƒÑŒÕ„G¾öokËÕœ5þâjµº®ª?	•«ËÔ'¶Óu“­l*­GyÁ’ 3@¡`ÍØ-[âÄ5Hó(]Ë 4g-b!ã~Ü ¿¨%ëÑÛ‹”ËµIµÖÎUÏI!e«V/_¤V­Z=HÙ²šKoô|za”­Ã~óÑN_:®k7qáPc…Ô,n¯¸r5XYÍ”µVÛ‰Ø‰ÿ~Z[4X«zT¬¡ÿ“Åä;ƒë¤2!-š¡µP¦FÜOjÎU$ël	 -ÍÁnÍ \.*ö¬”®>kbµ$°FŸŽÂ¯¢b®^¶ýÖ’M¥òÈÐ
ãÅxKM›ètº´ô%“¤ŠËV¸¶EkÏÿê·ßo91ˆWHN©ûþ\aek¯æ²O%ÂB¾\Œ2éÒHé‰Á21;~2<20022°0 †kÇôñ'Så‘ÀëÉei#}ß}”Oÿ}Ù<ÙÙ…œ˜‡©"'Rd)í}þÜ›Jwtp?Õ‚èÆVïÝÛüõ‰÷>¿óåêÊç_Þûô³»‹‹Ÿ_¹{wŽ\C
ïÿÎŸÿÙ‡/Égüi×að˜ˆì5Á§ˆ¿8vèÝ×Ÿû¦Hí	â;7^xÇPMñæ¿UßPþã¦Z`«TmU)—¿{{óÜÛK÷®o^\ûôÞ’uV[]¿LøÈ¡?Ä}Õd¹.MÝ,°†±È‘]Ëë+Q‘	\[1¥ž9)uÀ¥œŸÌF0á[àk€µúû`6«U×&¶5µ75·û!j/Q¸¢xB´ÆG6…Ÿ[?tH‰PíM““m“×%3`T*V¯_¤>²»Í`-¶á@€kÖ@V>âb5ù€å€2D5él?BZ#”s×–PÉµ¸Ïþ`mô!B+ê¯®YóÀVÕN³)Õ®¶*£ƒÛSÏêÜ`ÕúcKV‹Íü¡µ#^YûÁ¶^kK‚ôê°6ãH×GmlFÖøóS­f7äÔÏ‰›š[íÚ˜`p®‘oü¯Ÿ9]-tY³E°æÂŸ‡°75uKµ_·Ì?ä12!I‰Œù,ÐZp…ÖÌnÒ-®\cl_³&i-ôY£fMššípï7~óÊEkó¾$ÍªÄ¸0w+ðR¸på<Oh´öí½ÚáéŠÖœ²æx-ŽwÁ´@lÕ‚²æTÂÚº¸p°·sk÷ôûuûöíÚ-|È:0ÍÃšNƒ²æó Y	ÇiðZ¼ÔðZPÖæ«±ŸQMœf‹ýáÎþÁ–Øõ¡'¶ÁwÒlÓ˜ìDh†Æ‘“¦ä.€“^lœáà/	ª=n´Ø|i²¾~òä™wn\»äûà¬yV»aS5Ê‚>xíä|³`m{gO‚*é¢ì„“q5Û‘ññÅE$ã•êP¹¬<ÅåÕÏ>›½þÙÕ¹¹5•<Ç9A]Ó4_H†´£ÿÕÐ#[°ö£¿ÿ‘‡5	Seò+^ÙßÒ²°¿·(¤1^átYÈèŽÙûçGò¹Tº½­>Éí(7œÉä«_Jr‘Í.ôa’ËÐ‡¶éî;¬ìòÃZ†ÜEÀ'‘áöD¥¢n&)™fÊåh‚­ÄH«.U˜˜€ë¢¤Í^Õ³CfDãLà+"e­½‰ÄsR6©°¦@ F8gKNÙÝß	;pQ(WS0µH)Ó{ /é¥£­õG&'Wª­©b&’j˜NŽðZ”/˜·H„LˆI3†õ|£ÁLú¶	Ô$¨©UAºw¥\¤VÎ÷e­–ÕLëókçªUIk²øDc›j>X½Ø;IdHró+¡ƒÏ‰dõØì· ä@Nn‰jÚj.bS‘›;¬¶;±_K@k0ZŸ9eážVqÏ5Ë„dcirþÖÈ‘·CÆFRJÌ 0‰k²xÌÈŸ?ŸÌd‹EÌ}ZºÊ¹,©íÅl:+˜Åo=7¨ïÐðÕ¥yRFûù2¹÷åòøJµ:¬µŒ¯âCg´¸†k›[´öCë·ö«ßz›‘¼<!ö/¸¬ÅÏ{ŽS¼†‘6ªc¤$÷±L^Šä±îìðÈp>GgìŸœ ûññÎ¾Ã·w_é'•ŽÇ»råÁÁ\#¿K<ZÈ•ÈwÔXRè(çå	ÐaÛV,4ì‰¢¯X‘û¸1^Y½ûùæÊÐèêÚÕõ•ñ™›Ÿ[•ØÜoüüææ?ûëK§ÈÝÂÃ_´wþÁè<c¯íÏÄ»ÇŽQ¤†õã·ž€eÐÔÎÜxY…j|Ôøëç«ï}`Vý’ÕÖfù—ÁMäîÆÝµ{Kç¾sòÜen\ØXR¯·¹j<ø
Ô˜ µvj³WAµOd="s‘õ™º™Õõ+Øv‘ú¸¼+êæ3$v¼˜R|]Q:[Á¦Qna‰‘æSV´1;Z™r‘æ¥mAÏ¥ƒºtæä%&×æù¼ï´fdò ÀÐ~ðÚÇ“ÍØ®Ñ“µ„x0Ïl±Í`MœÓYœégX³°¼H¹¯Éš_«¾Îå@rGœöš¾Áe=ÆŒ°Y›dºÑm•bÕœ¸æ˜òv,ož­få¬y—!¬ñ§s­qwlà#HíHœtÍÖf¦žÉúÕþ"‚5ô4‚ÜG€•¼G±Ïø(ÀfN‚5™Œ'çÑD¬·NŽ=Ö;ÊKàÄ¼2·ÿlÿW¥Ù¯?¿{_´3¦,HÃŸgŒ9:ukîè.íž´Wz9j7Ü Uµ­Ái–éIm{5	k¸A‚JÂ• dü_–„5;çv )T¾}xêïÛs€$NïÉ©ÝÇjÇ¼¸†®æ‹ ¬µn³œgö×Ý-Èéº†ÝÈkœ¿dºîý†VsaµMß3j9!4³ÕÙ‹Àl,Û«ÖBSìí±ÝþûFU¨56ŠÖB$÷´yõîˆJÞr“¬¦lˆƒm¨iz|W°	Î|ƒ&Ñ‰ÖšÎ¼ÜÛØ{wþÉk4T{Z6°.R{õððYP%]ÖhŠMºš:5Ý>‘Ô˜²)Ø¬_:éîÃi¹±••¡bv|N•¸7×¯^]»þÉ¬šýÏ®­	×|½pÍçÐk¢Ì²Ï×ü¸xí_­vlÛ8ðüè•R³‚å‘Jú«µ %6ZS¹Júl94X¦zW5¶¥\9“)3fäFÊó®Iª§šºh¼2ÓÊ
(Ê;ùµG
$“óm˜@FhÔvü‘‰	,² 2ÁZ{‚g_QEl=ùtªÀséh76“Ÿ£b1ÓÄ\YžŸÕ'’õ(˜-É23Œx@ŽÕµ)m5)ç‚äìzU­\5nßVWì™#ã““Ïë¯#Ë‚,²I]+ÊX¤œ…Öpíg®¶hyšÙ4Ÿø7ò³»h`\+µý{ÇZJHií¥ìþ\>k¨<n/X>Ö¶Ç
é.c2RíU¤xŒíÌ«hÓ8möœ\!¶¦×¼]¿V#5¥@:V[Ž c¿l©j;ºÚNìÄN|´¦§‘Z®U·Ú­-kÓJŸïàßKh ž„Î¬fX¦ÅìY3é´š­qÑ&;§Èg¢BÊ²™2"]1[Ô“â69é¨È3ºH[¶¾t²\Î·çÛå
™llgpGåƒÕ€µê6#Wî.áÔ±v×<ü•¬×é©·ˆYÇ·~õ«çð„¬È?vño¿œFŠûÿ÷«#ED²¾þ¾®Ý»3ê2‘T4*šGFø„“=ÞÕ‡Yäß5Tþe8K}&#Èn~—ìÈ½x‰äŠ=]tÆ.æ¬u(OiO¦¥ò“” ¶t~l¨º±15D„¡L>º¹8““7äuªÁ.0½KéØ¦Þ·yB:×z43h•tÈwÉË¡çÈi¬Ø§$÷•©<õaÜSí‹‘ÔÔ{Žøòîì,n&××6×îÜ¹pžØ—Ïo‰°w%ä?ê˜ƒäÐ"ÖÖ¸ô£­qru±•Ê¡±›W?YfæÜ
T8¦ê€²›5‹tkÆcˆj@,ÇK|Ômöi¤ÒÂšÚWÇ.uÏ=öò¥K—®]‹]è´ÄJ«ð@kÀZó¤ú¬õ^›œ¬W¡ˆ*BdÞ_ŸT»;}°¡Íåu®¹šç5;µ ^ßˆ‹mÂZ­M<Â-ç*â’"ut|Æ+"5­º	Éá	Ñ &`-n¾ö]Áš¹Ñ-@
zV»öQÓh­zZ¬¦WÖ„fñÆÞ'¸úq€5hí)¶Ãÿþ'Ì"	š­M}EÍZm—µð¬Ákd8²ŽÎXSEËy4XS£5Ô³±1³ðGÐâEÙ ‚áâ0sÄ\kNX{PÏ38û*Û~O‘o¿@¬FÀj¾ÌÆ…!“G5Û´IY#$:m4É®qƒôUkÊdƒÒ\—5-\©ymí¥NMÅ
•pÞÑ#°’­žÛbZ)cÁkì–kV½çÀ·÷HWc5‹‘m#¿ÐÎ+kÆk¿öÊšO©|¸®¦¶ f)RG
äô4i ˆ~­ûn±÷ºá•5%AªÙÚ]±G|.d©7ÈÁgd^ëä¤¿‹;F¯üxwÁiD~Ýâßa§µ¹Ü?Î’mÉ=±k0m¢ÜfÚšìËCgüçÎœÁ¸¿qòÒkÀšz+*ÚeA’: ­yXë%®jM¼¹­ìz">&s‘T*íÉ¶· ê2`-›_¿¢¤¡õÏxÂÍÒ2[O¿5MóÉÈ_½_ µ×ž‘¡ãÏê’íœ!=¯yb3X­ÅÉ?ê¯TÊåR¾Å £§þ¢ˆ€J>¾Zš¥v‰á¸g•3¥õçÌæ[ŽµDj…–/’™åaV^X˜@dÖz:w¥œ‡ÓÑÃHfÈ¬û‘‰þ~\”_9L%X1]âVªíêÈ¦39d+ž~)ûoÀC‘‰Â£)Õ¼Y¦@ëzMÉJÖ£6a-ÐÚƒ)Û»«Yè_ŒÝëÍÓC‹t±çÿÌ%™‘ESSw€L±@éZJ“v‰¯%êÖÁtÓ=‹DHÅPF×®±©¹ÌæT‘Èª·N[	s…cµr`µíF*W3V«"¦M¾5Åÿ®>ÕQ’Y 1nøkl¼Ìæ^ç5ÎÝ«j£ÁãpTM¼­ˆÑZue‘P±Ú«íÄNìÄ×FkU±ÚV³5‚«\•æšÆI„ÔÖËÞhÍœj-“t…ßv	©Eö ¶êo"«ƒq©'â5?È¦A³,°Ö,XCwËZ~_gQ†#Qc)/ï(Òí“˜®®W,·¤~tóÎìúêÝ¥/a5“Ö 5gáŠ1WnbÏS.Þ–¨„Þ9Ä«Z0†ìßßóêþááž‰N+NëÞ—¡”jdp€×²ÐÚp¹PPC¶îìÀH>ÛÓaÞ?ÒÓ³€ïHÇ>ù²äi*¡ëpaé¥ö¤*•(ÊË´¹ÂYž¿®®®Œ=y`oŸ"ŽŸÅv*6YH“‹³¸¸ñ›M>x‰÷}ò­kOêûCéšr…h!žøEí£¬ñÐË¦©:'Tsþô0¸ X"È~ÖÖªo.­Û¸soéâ¹‹çÞfX£^ƒ‘mÕ®t8%Cˆ:5Î¸âž*ÕfWHo<û‡«X6Ë7”ªŽÊ>ÐR)ÝLÅåk]G»ÑbVK×!-bÉéÉ„ò¥¹AMš>ªAkÔã}ëW¿©X3;8ÐÉ~eUæ.XS#û©²¶îî8n¶"®^M¤ö¨/Ys¢˜
Ò8·ðUlvû5…^w¨Æf®ý²ŒÔ6Í9²{DßûìûÕ!{ª¦RÌ(‰M%kË‚~ï™²ÆÊò”×Õl¯°sÛÁqÏræ®ÖäE¢›‘Âvöì¿ÙŸ@Í[èÛZKj,5°6$FƒÖhùŠ\†Àf@6§ŽëUxhlŒé…q	=s3cØÅ¹ˆ£<‰5¤Z«ªùüøö˜„5Œ¨xØ[‹fìâC€µ^(Í+a›7	Òš$=ï/¢UK­¿ˆF> ÖboIào»®la¯VÕ¼ÖJ»5 É¤µgžyRÖýÞÒ¤µéí ‰Ði-(kÞöQK¸do~*(QÃ±_Ûôc‹X–æ­½»ãkì<­ý:(kZ<­Õ,ºöÓeM„pmÞ„{õx‚OoÑZØö+O$u`Ûò„¬—Ïˆ9ÿ!5!·QÏÖ¦®Ç<Ê!8MÑ¬Ýxç8,Ù¬ß}`Íýþ›°¦p°&T³˜ç5#®tCLˆ&"íÒèeÏ%õº¶d~h¦œÍ%F©^[NŸ^üô*]×(d›»B,ÉryM#Ç^]ƒÖT»FÑ°äµ@k Ú–¼FøÊ5a[BFF»%ó)Žnhk"Òd=¤»ÕA;YOgNl!ÛÓ¹r.•iI´'K4ø§m5RTÉme­[9Må$‰Ý<ÅºaD]çÄBŸØŒ))ù÷gÜ.öõ (Š´Ê<žåáÏó4½;Gç¦EÍ¡u¤9ÁÇ\ŸO|ìGÜ¯wÂ¶„Ãö‡¦@†É=¼§ÐÔfÊ”Î´ºÂ¼&¹˜D…"ˆÜÈA·p¢ÔÍD>ŸI´5l/	¥i­ÆPQËF ´*\sâ+•žýöFØ|ÅZm‡5cµ˜ §Þ‚!cV[­®^|X«^¬n·ë÷ðfk³¥;žé'¶:\S®¦+¤ª‚k,„Š@œï¨ q¬am‡Õvb'vâk£5¤5åeo±'¦¬YÝš‹qf7ªÖšŒÕÖtm\–.Ójä×ß…rÖ™3ÏÈˆ‘FM4s|‰ü0ZÚ
£²<õ#¦I3ò’ÖdDœ˜*Q1¹Zm_½<…oðÊœªÅ‰¹ËÎÂmMÖŠg¨{)dÓ ÕX·2/­½B(2Ó^ÆHäçÐZ>N´¶$2Êd”sÄÖÝ³0À±ï•*ë
é'Ê=b»r	ë¼‰á,#Ã•¨¡IöË|Œ"@5å!¸©AÜR{Ÿ=ûdG÷ã§×?ÿ–dë<öWUùNé´Vý@ïûwãŸ:sãÌOoüô#híÅçhìŒÓq¢'Ï(ËëC’_:§9§~hUöJÄTäúgô½¾³ñöææÉÍ;Ÿ^_úÍExç`µxà]Tþ#¹@ã:Ç?Ü\nmY¼z…˜åÆÍ:ædÇn¯ÏÎ»;RÖ¤ž!¬ÉKD¥ñÝîßÕ™igulgáÞWERÓ¾—ÎœÁó›äA"Âj>jiXK:ldO80L´c­ òZÓTtÆjì\˜ÙcÈôz›Á!
‹“MlŸ	ÖÔÛ½ÿ5¤«MÔÀZ¨ZsáÐ-à˜äimÊ¬ÁjÏºÆØ^^Ãa„°ŒÈ_ÆôÆ©6'¥²=û§™mÊZx+n¹ß^$ÀlFŒ’ÿøØ<Gii3¨Lcó˜ŒXñÚ8SËü–æ·ßÊÔt<kY‹c3fÌ8óÁ–dø¹,ÛÌû­J)kƒOÇ3PÕ,Üjuù±a¿9š|SÕ[­n^YûÃ5ÂF/«±9ãþ^ÃrJÄ¹=Ñ~t¸_ûòc{Ðû1õ¬¦ˆ¬a¯`íMóƒdñÖý¬^Oƒ×Õ8þ"ŠÑí®“úÉž§ÇT¯¦ÇÊ\ûoÝâgáYGR¤² ·@E°¢ù’µ`©eÄ¶¸ÍZ@5Û×öY›×®µÚÒÔh?¨ÑOÛ¸ÝV„_o6‚Ý'u9÷«l-ÙÄ‘~ÑÉ$É€µúft'*¨Ð™è¾ÅÕ™—•àøô3„2 Ù”É¦Öø7ÂL1ÙûVoóµIAžÓb¿aÖ°&2[7™ÇÉÒ&]mn_ý„§ÞÜÝÙ9«Ï½®‰-œF4t¼ªnP3§lÈP»öóxM„†¼ÆA´öÇ?þë 9‘ýeè”THƒ5ñZ“3¼Ý…Ýc„™H;.+i˜ª\aŽ	Ç‘Äà0Ý+O;ÑB“pØÒ,ôtv¤º¿ÖI§Ê\w±”ë:<ÑÕqXSdûh3‘MeÅÃê~!·õõdÒêèi¦’àd¾.EvH9ë¢§PäÅR¢´@Î&aÀæ˜-T«õ<TVóòÕêeKÛ¿,X[\¼}vèöòÌÊhÂäQx³½’£&ÍLÌîüÓxª¨7xÔ^.g±—)aS>¨ï‚u\¬	Û µc‡šsýûYžÕ²¾`m«Qwíô¾‹Õ‹SpÚ$6‰Ç‰ŽÍ´dÃO¤Ý‚ƒ,©r•½÷×ª9g‘ ¬IKCZ“¬ÆÊaGWÛ‰Ø‰¯5²J k>ØôÔò¬6»÷Û î-¥5XóýJæ	™¦ú›¦j<Ñ¯h‚MÐ¼JÂJ²r…œ`ª‘Ìö¾‰®œZ—eØäõ1Ú'"¦'5*TÊÃjòÙ2YÝÜÜXm%‡~‰øòB<änMžAŸÂRMËâùÑx†T´fƒî«#•LV¬öê@%]—ÎSAdjsZ+gi±–íAWÃk„Ì*ºŸì<Aãå¼5bKu2Ï(JK¥t£ƒ”¨ˆ‹xHê©"Á[wK{nÑMzèøãÿÝÙÛ7å¤µ¸¬O¾Ë‹›¼kÉÎkç_zsôãSxlœÖ^ çÚ¶>Ïj¤fñŽ‹±T¼·rñgýë_Cƒí¹9yŠ«-Ýùì³µ»b6ò,7/|òÙ§$DžW\«9£þßž»J\™#	’õöÊÍåºéEtµõåEy2Ý¶††ÎŽwXc–Vh†“‘›þn¤¾jî†‡²tT€Á#Ÿ#õ_Fâ’þ›Ýhâ“ÚvV3X£#îÓ×&[@õ{w%™Ã>1˜HÆ¼H¦e™äSƒµN­:"²‘)V{"“fñÞ3DÕg*EƒÖâôÈ	Á™^6–›˜àëLYû†¾FðÆ+îžÂšc#¯ñÒT •mUkµ¨¦y‚µÓÚ /Â*Ð8õŽqûk`ÍŒ^n{–/ä»TÃö·“šOƒüO•µÑ™©· µeÒ9ˆÕÈ~äû[3§©I;2.e µŒEfX‡ §©ÛÚ‡ »ÖÇFÏ…¿RíÏ5TºšÛ±Õ¼©Scãbïž[{¿mþŠ{ïsìg%8Ž8€ ¥÷Ë‡%dÎËlDg5Êš(L5k^[Õ¼o¿®ƒ°fnSR§œaÈƒ\F¸CmN¤`Mî•¹¾xÇ[ÊÚ›äAÖvZ{7”¬ª¹e¬#~ÃÄP²†9&™{ÕÜ€§»ë0ƒŒ‘®×G­u¿¯«mµ6á‚äüýej^ZãèîLOs$Ö„gÒ{vªmC3k'p‘ÕÈÁf¶ƒmðørXkçWx0¡þ(ådAö2õÎïÅIÐß!âiš ¬±ÉN¢éƒÉt¦‹;zêØä¤5‘h:eS8Í'~r&œÚ6º:GçHžŽ<úð¿¥ÊÚÚÜ¬Õ®Ý?v<}ã‰`5âòèƒ¼ÓšåBbA„=äÿøGlHi©âPMõy°H=žŒ‰4¥»Ô_SÑ–(BQ•¶DÿáÊàp1U¯ösÇN”²&Àúò¹BÑ…K[Y-ÀÐ)WÈ”)™K‚ìÁ¨¿.søðqÿI,Èöä¢T®’ .E Y}¤Zš[Wy@é"x÷	Õl³ Ô<«Õ6Âö¬f†`N»ÌßúÍ›·ÇŠ´pÁƒýŒÔ	¾±%¯™¹´²_øGÖkMþÎQ;î˜ÆxõÄî*äÕ×X3Z¯™¹ˆ*Ø ¶$•¼)kGã$Èüv#ÈÐHÀYöOáo2upž<È·ªç!5º¬mÖš¬ñ
WÜ¢Q€)jæÔ/“ëI'«Å¬¦n%Ë,žÕVÄjöÉÈ)kìÿÇ«íÄNìÄ××Xcþ¨ºÈÓÉãš6_¸V#­õªlM«8C„óD:CÈ–¿ËÜº›Ò=…ž	róóÌ%¢¡	Ö
¯ÑŽË’©Ñ³ßœäµ\é`["[´´
†xöZ¦V7–æ¦Zˆ*VÌXB:ŸŸÏòÒVÃ5Ê½ŒÖ†=­)¬‘’.¾új_?µkÉº~È0RÇ›ŒoY~ôÀ€hm¡Ÿ<“R¾ûÀ¾ÁÃe5X;q¢ÒñdW©¬åKé”Ê×"aY‘°[)Ê«¢©p„µ†¼HîÖÌí¡[OüÀãgeê046–ÎÌ¬^^e‚róŸ.šñÔ{ož|5àå6¿ü„5#8ñ¤&NƒÔ$«IQû`æöE
Õ`u}íK5BÖÔ—÷âùÏîÝ»§ËO?[Û¸¼q1¸ŠXþãòm<EX)ådÝ
_ëTu¬¯ÏÜž[l­›ž™®ë@â<.0‹'Ó19îpÇûƒÒ´¨ŽeAyXã+#›hgqöŸÄ®C—ž»tL}C¸8	R'\PÖôqmòÐÇÇ°ïoJ¶1!}¢½¾Î§f¥3Q‘nÜÝ@qÜõ":^×Á5™ô–5&ó=±Á.Ý­#—ÄaC1U±)ïq‚*13„ÝLIÃ²ß&yû~Ýä¶U«ñEB¾ß=àëaËW­7ÈßŸ~
âR½P¦s6ŸéÕ4Ikó'^`S6Ýr°xµöÝlç5ë³¦üÇÂt3ƒ5B}°‡àGç9*®Qöé³gO}êìØ…k–#i°š¬…<P…!š‚}k¿í¬=öíg@µ$Žíåø¹º«ic%n=ó¾¡Ó<R’”à„µÖ~óš´VãÝï»bÁÒ`•ÎÛö×†c5žÞÃ¿ò}»¸õíÿÏÞùÆÄ™žç¾R?WU>bdƒ-‹/F,4²:£M(²µÄÌZuˆ¦›`­ÔÊÊŒ¯1…¥Í/ÞBÔd›nI²GklV×c°-|bŒµGujDe¡¥‡Hv©ŽWþ%G:¿ë~ÞÇïŽñök÷÷ûÿƒ½û>ó{®û¾îšš7¬©jM!TqÅóš¯YcÒ q7ñ(Xž}éÏ—k¥AkËËê‰½vkËzÉ9ŒÞºÿ× šSÖÜ’ÚØkÝ µ¢¬íˆ9mkÄWxÄÏr®žÐî:Õìî#\Ðn ÍÄjäAbh’ð	¹>YŸ%Õ»:2œäSûùÚºšˆyU´c5Ášº¬¬yek3tÏÆÒª¢EyUf:,X«VðƒÈ²•éÚ÷¦j³éÌèR)YšŸ]¤ãËúê³Çèk÷ïÐÞDÙ6vlê9ìpí%cú6ÙtPñ¼æK×¬níœÅ¯ˆOuîWçF*™(¬VŠZ#4ÁŸ_%Ñõ§ŽÖW’-X`2OøTH’~ÁÈ–/~t*ÚÕAl¦doëh§>ÍõúlO®,q€	&f¡ ZBù(ú›dr‰= 0¥$…,>Ôf†GÒ
}Ë|q¬[jÔlïPMx´£Z­,ò¦ÅÆ´²­mo/6.mlÌ3 "Œ¦\EKažr˜oR«5«¨®×+ë†5Ê'R•iI6¡k‚š h#8E…LRmF^óN‚µ¯d5—ymeví6­°¯Í÷ôÌÎöHdóÊYYçkîÀhÚ”i°F ¨Õ±±ÎHUSÌ¹Öj“«¾^Í`\ãpW¬ö{»±»±ÿ´6¯Â5Óûõˆâ9e¡Y&PMQš›"0Ñ§ù($%¨ÜÌ‚8$©X5Z—žÕ‰îî\w
çü.ºdFÓív’ŠJšŠDR|u‘Æ_„/¬ªLE’Õ¬Õ‚5~öìæ²ÖpÍÀõÐ²Y\Ã5píÊeoáÿ²Ïi1óƒßýîw?üÛúéQ\¼Ù®~þó2[÷¦‡#‰ŠmC@à¹îBñC¤möN·td™=~¢ƒ‘ŽXDn"-mÀgñAù©‘{[]%Û^BÞ‚µD+Õl[ƒ[‡Ž·Ø¿wtiiw²ît*‘ZÚ¸½B¹ÎÒÚ5ÑÚüÒø%ÅÛï½C8@¯é„A&¨}ö??ƒÔ°%™_Z¹æE~Ké°ö›çT«›—ÞþpS°vï*Ïn_fxmEîllcÎß?ð„ñÅÇ÷U±¶";HJÖ–*W˜>]<æs„k&­á!myøŒØ‹1ÝkÙ•±æÎ„—Ñ8ð'qwª´Ž_ê*Ïßºõ1°ö­äû$!™½ !eÑÄ5ßiíA]Õù[˜AÎð_ÓÑ‘xÈ‹•ÑŠï‚7ØfÊš, ›cbµf`Íb°2ÅLb¬eøöMSÝÖ¼ç£ªÔúcÎÒ¥>êÆþÿ÷b5»Aœ9Ökå´æ YwºAB7B5¶%ïÚïc±Yž£r}‘ZP°Æ™¼EŒÛì%}ÑxX}ûË±ÉÎBRã’ MRW’ãÀIT>Û›ÁšÐÍÀ¨qt£‘Ñ~™L3o‘‰Òå×ÿ`ƒ4¿×eºj÷—‚µCËÈH[û9¹mùæjÚY8ÿ‘e;—)s°öYC[s‹Ñ•¬yTƒÞX!5ŸyXä¬ ’ØüžÚ•c”ó=¹¾,Ñ¡ãCßûÞ¡-±št5ïÜÏº3¼®¦Í+kVy˜°òž+ˆjR×ø;YÖìC¥/k³æâ¥ªFiìÊuµ²,H^öÀÀÚœíXÒ¼ÓˆögDuE¥„µrVÓóò²7ÈH&E‘5¾'RW'ïþ¨ÊšÌV#9­NY‘Ã€[¼sW	g¸<¾Ç#ÛE kï¿Ï£À±1‡aôøöŒk…]Ž3žÕ”ˆŸÀl‘3ÿ¢q]ªGVÄKO2ýOÖzfçgç_$~_œv]W6×g9Oy°ò„ý.’l0|¸Ù>_¼¦°aCâšÁÚÏXõ«Ÿýìg¨][è%S$Â¯ÛÀ†¢È¾¾©J®+ØBRÐíJ†FŽæ3$Ø“~qŠ¦þ1Š¢ó{…Dkfˆ,û\_ß4OÜLïE±ÚX*†(ï ¹›¿ôœP'°f§º:YæÌÀâ¸:ªäH¯ŒšIW¤	›ÜâH1CÑÚ€ØëÀÒ ]h, ZþUÃEDøwlà)²†&¹±F½ÚÒÔìâÚžÆQžîBFôL3zd—†Í’Ù®œBþ¼š‰Ôå™úÌ‘
6ªÊ¸ŠàFiGäŸÉÊÈ^èëËÔe,2÷zsÞ—·§Æ³Ûó3só×&gæñí%¼¡QF¬&qUí­†2k(Í£šÉjãpš‡5:Ðj[d²«}c—Õvc7vã¿•Öþà šƒ5'ÿêš`Z³˜
ÄµÚ#I¼û%­í€5_ÁVÖ˜ýÄµöAnáµtw.ê ±'irQkì4W½™êTG.Érƒ™Ãc¯é	'qIéqOIóÔÚ›4Ç~~u}óÅs‚@½¶¦ñöc?ÜÊ÷þ£¢&G‡ÂºµÎþÜÁãn…héüÈGd¤ÜBîx[6‹	ŠÕ«µÓ®¹£8’ï<~¼™¤Hº°'ºÚ[NH$È„”°&w‘,ûl–³ÖVYz'$¬Õ´‚n5{Ùµ¶¶?}zÿþÖü¸z³.–Ó…Áþ¥µ'+KKÀÚš­Ñ3æÒåKo[×jšÙÊ8>¦òPûîâ³^øå/)Sû›§×Ö–ú·Ÿ‚j7nÜƒÖžÿvóéêç/ž¾xüxuýÇW³zõùó_l^Á³Ó—xYíæ]ÐìÉÉ®íÒ±/ßüøzÅ6ýïl¬`óvléÉ“Ò—²b„Î»:”èÈi¹ÎŠÖ:éÃÖœ’…i1k¼Î+ák,aT‘UE³¥èwø…o_NŒÍ¶˜ÀsªA_\´µ™žG5Ì01Keú¼ïTM¡ÎæŠÖÖŠ˜¥@
·Ú;r´X£pêbUâš]	·Çì€SˆìÄ4¸>úVlkš	iRà€µ—åm–ÉXÛ)e‰XB‡‘#òî/Aj¥Ñ@U¦µ¦á âmüÿõßÏ´{{‘“Fk\h³27¾`ÔØ/$¶2•«LÕ³Í§A^šUÁš¶É(­¥e0€µ©©’)i–	#©MLZ÷5îPÉ¦ò¶Ò\ãà(°ö:mm§²¶³#¶ÁÚ¡7þäOÞÁÈÒÕ´›ðÍÕ<­¹ã°&˜Ö‚Vk\õ„°†¶ª¼Œ¸p+÷a'eÍA‘ƒCCTr”XRêŠíN­ýYÅ¾®Ïš×ÕXªiñæýÿøI(­½’¹³(®¼„N†{k¨UÛ{¨†·§k×1Y¦TÏ[Œp*k,e}ÖB]í;t5¯¬ª½Ú›½?Å)ŸŸÄsÁÐl'¬yëWN*Ü"ŒjÕdL%k œW-•I™J“£„M Ã%O‰Êx5;Þûþƒêê†[¬Áh°šÑššâû‚Už“8Œ`©q&/¬ÙøC¡p6Â¦U3¸Ê¤KO¶Ó…•>s/¾x¶JnøêÊ…¼¿Ê„ßúAj†Ç5Ð±×?†~xÐ—=ÿÜGi…"6BI‘}€I¶®þhÃ©SHSÃ)j×¢ô3 Oa¸£Ãb§‘ˆ­8R_?òÑ©<MP†
]1jÎ:;zÁ§^j¤Ó8Üõõr™ë’”B»HZ¦¨5I{,4»2ô+‰¥èËÃ—W™+]šcÜLÖ“$Ž%©•9ùNdÜ½(P(­ŒÕ†°òå²ZX®FÀjRÖnãÕ?Ž,¹§×¦Æ•D…¼¥bê`ã5¿DXKSæàx-MZC¾;›2ýF’‘j-Fêü¿XRŽ¡"*`mø ïG†„±Zæ«Mû·ˆ@r²vîÚÍks³ê…=ã¥4m‚5’{Mó,!ªi7÷ˆO8ë•ÿÈÆ1M¸f´FÂ‘ÖvYm7vc7þÛã¾a“IPš´5o©miòeÙ…kèjlÖhMkÒÔ|Éš¦;õcª›ö+í½ø«&Z©ù½¹éi®q‰³MçRñ\/²S’’UW,ª.kJ`§#[T°FÏ˜$¤õk7VçÇç×AµÕÕ«kò×ºæŒ˜/¼§áö}«=øäÕeÅÐo3¬=`°r´vöç?Ÿ¾x±;=4RìfD\Xènkk=þÍv’ YÛÛQüÆH|Lœx³%]0XÉ¦¸ÎÖ½xŒ8X“¤šªqhÉÂ?–E`ã4³QÊ²8qbMvxjéÉÝÅmÔŒÑž_[ÃÚþòg—/£«iQÐ_H„ær¿ÿÝ/8TÃùñÃÏè)Ç$ðÚÓ•þÒÆú:fÊëò¡Ñëêç÷ž>…¾Ø®®®k¸½¬®¡
ï¾|Ç,1è¿±=Zš(Ñ[íÆÝ ùS7VŽULLÈ™{OL¦"å“µHG]4øÍ^ëàJs©>­‘ü˜æ\ÂJÖdê¸ý—M±âÈ]ûÎÃ†[Þ¸_yªÕÓ™Á +ZÕêšêg¢Lâ'™—öïGøMtt¶µ©3¶K~„ÖtFs¥0%_RÖ|$™÷cÐR3@£œMÁ™îÿìïÝñ›ÓÀ'2„ä%ð4`+Oƒ$<–ø(sÎg#ÄW£ÐÙè™ý0š*ÖØÒÏP¹”â(t;3€}¿ç³“5m¦­É’_á_G__³æ¬×+kÀŸKJÄì¥90màÊš×Òd6bÖýãSs=\ kÖ}WÕ*Žãpdî²HÍk!­ºðM±uæƒ×ÂÖoŽ¨îë`L{rCY3MÒšY9¸©¹›ªêì¦.„Ž^YÓ*]ë~V–@[KÖ¾ëyÍŒô84
p6—dÈÞƒSºö`¹+H,QÈP4eÍXMÚZÈjç_/­yXÛùýË«äk5û–Øw`ÿ¡å­ëj®÷\GfãµPX+·î÷¤æµµ± ØÊ½ûù
áÚŽ4È¹×8²±Öî©š9Rq]$æFS8EûºÕ©²™™F…z‹¡%í¬ÉÓ=‘u?¤Æƒ»™MÕJSôU•6kÓóè½·ßyo÷[Õ,þšõ!Ö·^Zë©ªîyð š=À&0sÔ¬¥¢
ÌïÅMnca£‚Md¢Ùl:>¾¸Æ8¶ñbcñ‹ÕÕg2XR	Û³çÏ×ï0åU†kÞÈ_¹ô–ùƒ,ÑºÝ ‚5ó}Æ<æ5‚¬¦³õf˜ˆ,äQþIzŒ‡Š§êÖÐÕ¢qnÃ»?že)*7àÔ©l®M™%ÔsÃ7ÐÙÐl­Òð*âZ†ÎÖ)jÓùh‚“–‘š¶Ôp†´–K±æ\'½nbÜïÄøä”L)³¹öfnŽzÅegáÈöiÇi¬¾·ÚWÊj¾\V#ùÑŽ•¥5|‚§Æ7n¬Í¦âæ•¥^€|
~žñü^…áºBÇ¿„Z­i”Ï$Réî®Ô°¥ÂVU5MÆ“u–Ášäfõj‘t².•	ìEBa-»ó…IX7ìùGó7oÜž›¼vmrr~ÖÁY@ka5jÚ³ô°ZS5³<µ¨‰Õœ½ì¸Gµ ¯{¡ý°YßøýßÛÝØÝø:ÐÚ<‹šõsÊF€j<Ä‚L_ë)‘É*Z³ÖØ;`Í»ó'âÖ,;BJz/8’}0ÝK!XÇv Œ‘ª7‡`…¿U\¾"ñT”HÊÖÒyÁZ<×`>_ˆÇ«Ô½‡TŠ$íÖpƒ„±a~úâùêæÚ&º‘†ÛÛpËÇ1'®Akçßjùèc™4©,¡¶vÑª½¦½r½Œ0½DwWWÍ¾ÎÃÓØöÿíÓ§[hÎ]<í%ZŽ'Ìx¤8œM/ÇIF £IŠò´X«*¼G²	QÙ´5Ô4\6Û_£ÝäÃIiKM“h±½¶XZZ)õ—VÖ˜,µ½yréòXMñv°šZGñáá ö™ÌŸ>Uïk,V6)ö&AEñÅú*«@Úæµ›÷?GS»rmóÇk—ÃØŠ*=PÊ#‚ÚÝÒÉ¶ÁÒöãwµûlw–(R¬°–…ÒšÑY3ÊY«ut±·Ë¤fZ¨ÊÓö°33È„¸Lw8ç„ðnq¯Æ­ÏßzxëÝ‡uïZü™ÁÚ·i`ŒÖTµF[Ÿ™GGå-—¤nÍÓZT­…*Z©Y£ÏZ.ðéÔL´¤5¯“9eÍ€Ì˜Œ·k,ÜbÇÞ¡êÓÎ!¤ñ"gNos&#ÁWª%€Äµ(÷õðKŸ„¼¦A–PÒœu¿‡5ùñaRÙOJ6;Ó?08`še’±“\Ô‰Ûø‚Ò—Tµ/ÛNQÏ-Þ`Ä¨‹eîì5xràdË æÝ/Tè/™¯Èx	6l,õÖÍÜÃ)o"·Ð`¤ü÷"Õv°«ÁÚÔ!:aï?6±Œ½ÈÄ÷¤¯Án×ï1‚°æP†Ÿ¶Æ=«Y#¬ý¹3aSÉš”5¯­é²LYsio;XóÚYPz¯çJYnÿ¡hÔ™8²fÿ¾}²D9(kÿP&­ùøÄ£š6¿XŒJ+á¹Ë·q³£€VCÁ“À¶|rµ
Z®é]ö°®9ë~XÍVs„³yeM»×­ÿÇÃÚœ_ƒ·‚´“ÊŠ*vUG`3ú«¹àHcÏ†¦¦¸^•¬6›Ð¬–
Š`ŽK 2"Ó"‘Úz9K¨½ö@q^åäû°§ª¶éw˜£ú6ZúOù¿¬É"QöLÎÔVUÑL+4‚$ÑQûé—qŸÔR™”³"N‰²æ>ÂIªv|ejj|qñ_Jó‹ëzæ1KE¬o¨Ùóú=ÑšÇµ–iNþ÷o¢µá"õY®óZ_ßœ¼F^†CjƒÕDk¹î³g.Gª³}xDFù;QÊ<µj?ù¨˜WŠ‚ºbGõüÉÒ­@Ð|”X -Ù•ÒTßªË'Ü–¨¤Któaša$óÌav4“Uµ®kAMs³ë4ºäw´¶&¢	²‹*è)d”ºxq¡ïÜÙ‹½}gySÝ½k¡_¿3ñð²Z¹³ˆ	W/×1yQ­-nÉìââ£Sù˜L?›FP÷G«ò”Ç%óCó²ÀÚ#y]ÒªMk‚ÑªÐÐ*©Y”$Ô®äØÚºhwCÞƒš·‚4V+{g—ŠÔü£RR.ëmÎöÌ"±]™«ÔX=©ù ÑÜw¬‰×XsZ©ZÍPXÑ¦PãÙyö.ŒÖþp—Õvc7vãk¿/Z[”òoÚ«ï‘m°F””hk¡ªVnÖ2$§²)7¹ÉP×›ÑïS®Ã™x6§$C×Y-¥4-¬É)‚ÙPØ.•¥Ö:á»‘)×ÕÕÂZ•òæêë«ä76[?U¿¨6+÷žßÛTÇ,!=­a…Ïg¶ •å[u§>ùÏÿü¨8F*K÷AOk(k2qq8õ2vÐat¸“GÿÂXÇñNUÒ5Öv´ÅpðïÊ&Úx×m'Zcqì ‡±IÄä?Ð”üHú£HÆÒì!€HÇ`šZÞÚÚª9QÂ¶q-×YZ\ûì—'ß|³¥4«ýƒÑ6#ï±}ß@°Æ×–‘OMTÛT÷ëÍëJk”·#mƒî?{þìsªÔ®^¹¶ŽûãúµË›”¬]	QM¯ÊÕž0IjP6&ZšÛž<¾ÿßä‹/66¾ØE¬pá}ºÁ²œÁZ'°æ¥5nvt"¤qp7ø"ÁZÌ`Í² ©%b?‡¯ŽÄ›Ç~ÿ[ïÛ§£ÐRã´Í®#4¾=3C"d}äúÌÑzÜM^;XSFN[§ÚvÐ¨[S+" ¹­ýp‹XÍÓ§d>rb
šñ[@m/]CŒÆkò¤Ù}3l—…ä4—Zµ}³ÅŒHBXý Ëc§²ey£°€æÝ Ï¸H5½VåÈcÏ]ÝÐ¨oâÀ6ÐN¾ÿgþµòHiGÍšvþ}èà£Üºßìùq»9“-ž<¬áÖ¯/	ÖÆç¬÷Ñ?1*µmjô˜h)ÞÖ¼´ÆjáxŒ1­\YcñqaniíÐ–œ]ÖŒœ&Ø+·MÖLü2@¤6	kei®fÍJÖÊ­ù’5%e-Hƒldu¨jZÆcþN9Jy‚“äÖ¾ýø‹ì_öÖý
¯¬ÝzIj?)“Öˆ02Ì½qP™°†£H´V±#î5î«Ù‡¦Õ(d$üX{­²fª+ºZ™s?_óZeÍt5VŽ¶9»ß#fß„Ò³#•.<¬]÷=ð]>óBM5­tfÓ¥=²Éˆ´Bµ$¬F$×ªõˆÛŸkxO3ßùÎC²Ùþøú×äD °	ÖðëOÎ<¨EVsuH¡k¿"BY´µ‰Iro°–3üDrŠJ˜-¤inSS©L–ÿœI†,=ùâþ/xâ5²ñë»7­…¸†‘Ó%žÁîä’!G†‹ª]r#ˆ6#gÏAl
ƒµ_qÍ8®¯P?|ñÜÅnä‡óÙ|zÃÌª³SþýÐÏ¯áÄ>õñ,Ò±VûÑé¡Ã½}Cª×fÂ`ñ*ƒÙÈ}èm#R;$³uçyÐZ¡XBÓ‚¬éÎÎæÂ)¹ytÓØ-[äg`ÖßK$hf^ý¯­V‹„½ÕÂj5Ïjæ I>¿Á¼âÚû•Ù’,¡c41~Çø¥{ª“yõ%(¹5¤Çò)è,’IÇ5Ò¶ Õ‚ntØúòXªÛ‹j^XSÁÚë“3/_~9 Ýž|kÖ\!MRkxÄŽ)ÍÃZpÎfá…5…wëwŽý¢µY‹¥°\M&Ðš0MÛ®eÿnìÆn|
×¾!›‰j_öð'ÖLY!Õk-È„»u¥Ajñ,iqƒ5F´¬•{ñígà¬ežù@h¨£=‡{Žñ©ÀP7?/ÚÜ´`-™”0mlJ8É7Õ^*£³75Œ¨ê€D@Úµµ«¿…ÖÌfäÃË—Ìf„aÆZ
×ä`¼à†ZYœ²FÐB3®éöæ–½û2…úS#Cj´ÖÑÛÛ•ÍšqW±8œîh=ÞFã®Þî§›31JIbÃ#©D~d8• ÙÚ©‘<Lf¬kj‹Ý³ÌÈý­YHÈŽÜªÁ‰ûtgÿÄòÄèDÛé­Òü•µ¥ã-%F	!	>S^zÛ¡ššü
Õ.|våÃÏ~	©¡ªmnÜ¾Šý#°†Sÿêº:½Ø\ÇNÄþþæòS¬ÎVïÝ¾võ7Ïï…£®BöËO0¹A…šò Ï´÷ßåŒ‚„¥ÒÒèÄ“¥Š—á4ëxm8Öÿ &º´Gþ­ÓË˜DÊ±Œ”ßhGG"e[´Vé9N'¯ÂÚyR>ßÕÇ¢‡®!vf3àjÖÞ{ÄàQS”Ù{Úh+«ê)FÞ`¤‚ÛVjêbm"n6©l¢¶+`k1XCWSJ$c2#4­f&b¢™	kº¡à PcšæˆŽƒHK«Ö^ãéÃÓÎªµ~jAWlÇhp'³AÙõÿÑ˜9÷~ÁšPÍnŒ—úÿýƒsgðÝç{}UÉšva›µrëþžÉq+C›˜3X´$ÈIÅîýºæ\ªä('“%ÖþcSã"¤’IoJƒô?öõÊš–õj¬XÛï¬¹Í¹÷ðÔ0Lsûeþyiæ/œ±#¬æaÍPMKP³fAÚ
¨½Úeí3kNBóß×°fñj$Ô¸¼ÅÛ¹¾Ÿ·I(‡sËÁº z÷‡™ ÚÎšµðÛ7†°æ•>—‰Y¿XÍÌE ´½äE"²©ÓZkl(k,!°´ÁhÚ½*«ywï	•ío4bkªY;µ¹ÎØ´Æ‰¯XóUkÜ!Ô³:‹DM[ÆÀ<i(uµU{¢Mu²…¬æõÊx<í„æâÎ«Éâ_<`FF­;”-Xã$„5ùAö<˜«ëyP+o‘ ÖÂ<Ž‚¦É2)kÙG[«Õ%8ƒþ¦–ž8ZMM¦3ÑÑíµí¥Å'Û‹¤AnŒdŽ+«‘×lÂÏµÉFæœüGh”Í(‚¼æ½FˆO¿k–‰ÌÆá\÷©áƒ˜“]?”I¬å ”•®åk13 aŒI§ÆÈŒŒF0)I÷2)Èu!V‘F`ëí›V¦G1™ÕÇbTºª®\g¦ørTê’&&Œéá,ôÔÞžI´å2ùQ¢Ú9ñ™¯Xó¨¶3rGlë­¦vœwn“¿²235E:Èìø”j†ù{æß5’îP•\FMÞPQq¹,æ“MÍÝ¥3ÃI‘»ú`;?òa«Ø"QîYÔEêÖÕæŽõ],ÖBVÛñÖ®Àj„“ý®<š\»=¿2Ù#V›	`Ì«j\zXmûk­dÍ™@º4HŸ)T›T¹¤¦
}V65W©f­°u¾[®¶»±_·†kÊÕ†ØØ\l;mÍIkÐZéj¸ŒØÈ©º•Ë*1ž¢-©¼Fà¶¤&Ÿß‚š&@Ó9¡°oí¨mèkµŒô²÷ç$wñ"}Ù"Mâ7*Â2i¬õI’dÚ0ZÉR©L-¢ÝÄ£JŽ«lÀcí¦híCgÚX+ZûG‹Ó‘ä•úá§qvúâ"¯%¯cL›nÝ—/¢£áß_,f°ÊNÄ±BGG¦Hÿë'ZZÞüÓ7÷ï¥£@â@ëÉ‘¸hHFC`Á¸wE²	D‰gáSšK«\­5“áþ©99-·½KKÇOŸ¿re¥¿¹¥åd	ƒ‚^k× 5âÂå(ÀÃ€äéÓÏDj›¿Ø¼}sýÅUL§±èGJ[GTûB6+W/\º¶þ›Ï•y©qÓkÂ46¦‘ïÜÝÞ~²qwC³¥ÛÄÆcz`oãúXq}{»¢Ö¸K6ŽÌ c†gâ3.ÐR×š»èù#Tê’–HyšsáÛÀ:u`#²Rˆ×å[2…Á9ðuX{‘º÷eÜ]kï¾ëëVÌ¨h%‚ºZ½‡zµ&•/F­3€‚÷hÅ÷]â³ÖN08Ì©ŠØT¾F‡5ƒ5/´ÙªàìæaMçn!ÌaÄŒú}®¤ÑšóóÖv8Œ¼R²ÆZni|eª‹…*Õ&Sœ™tÞýº8©ö×%cHC5m£Tµqœ(-yTó‰Ž¯õñœ¦AN©ôLŠÙÄà`ñÈ…h†j„¬ a1¥A66‚tØ‰ØKÇŽèÂ”5£¹K^X{­ÁˆwƒÔÉNaXGXS/l´µ­eA¾Q3!<›¨Y²Ø&?}p.ÑËëj¾ÏákÖDk¡¤HÍBâ«jÖ‡~O…ž•lOìl˜Ý¸¼õÆ÷¶¶úÿ³âÍS³æKÖ,|[ì×úAjaÍUÇ•÷Ðm{K–y½ñú>ÙŠðàØ:Pƒ¼vŒŸ{,TÖ´¬ù6keÖLU³«rV{UY›Óê¶w¦¦fœW5Z‹5:¨	«ª‚:pTx|3©k|„‡ÎšäÞoŽ"’Ùê‰&žäòÕH~¤d)ÊC2ÙÄGøº™[Ð¬f¸ïò€Ö§¬yi-Yû §|ä„Á÷Òe&$y`­ÃŒ1§– >â”/ÑðÓ¿TìÎ¤¶76¶O¦£¥R¤z‰çå™hiãÙ*´¶ZŽkæTåÔ5çUÕdm;ÍÒãšï’­ðµk¶ÿ´/›¹ø³sâ¤¾\"™gdIÅ2Þ\]¬ÁÌ¿ˆÕBwVãdl„üE|!5PvY>d®­½¯—,¾‹½ÝÝ…|¢Ë3öE†ŠÉHwŽªjÊt?@vK3°- g¥vOŸíck/,œíC[S„¤P‘º`¿.ãàÐJqç&±¶¶±8NŸóDq˜Œšê(9®©8]õ’üýÊ³úLTªoÃX¡Ð•jÊ«d-€Ó5vSW•œæz- ªÖGñ%pä™+ƒ$HVï.šö—³‰ÖùmþÊÍ›¯9¡·>šUµZkDHkZf9ƒªÖ ]˜i)d9é5v,–iíÕt`§‹]VÛÝØ¯­-.†¨æýû-2¨ZóyaJJ$l±/€Fñ8Ä’jÐ¤v·òS™^X-›ÈT5ÀZ¦÷q;*Ö4¤v1Y—©ªÎö
Ö
Ù¦Údµ`-‘ˆ$äHæåá¡t)U]ÙÀž*9¾¿†ÁÚ=l½0a6\#½]3£ß÷eâGë#‘|¶è[æ00,˜…?¥Ùh{vº9Áu[ƒµbþÀ>P3	„µ5§cÅÄÞ½Çq«8±7–Ê§âÊbB25¾nMð­ÍÃ]Í.ÏW·¶‚u]­cTÝh±‚TÉÓož>=¸²Xj;¶¶´2¿4ØüÁÅ¤fÂekÐŸ8e yXûleþ²Ú/ˆMò=××Õ*\[U+µ?w¬Æùæ¥KOïÉ²ÿZh © Õ48²ZZ¶oñdãÆã;Ûg¶oÜ|r½¢s_ÅžcÇ^‚«¹ó9Ä32wÀ3NÛHu*Ù`/i¡¸z$<~%¨¡¾ºKõªN yjš`>•.ñ:e­	‘uYºõ­ÈCgÇf¡Âµ÷š}÷&Þ'Õc­aæzOU’H2aÅiÑˆ{G”Ù7óOÒIš>•­€•™‹ð·ßÙ¢\E³}DTX­]´&²Ãa'˜qæ`¯²æl¢4Ûk‡§õm<Õéë8ó°ö_âZHL¡´&Xóf†—›±°ÖyÆih
¬DOžÓ©Þ${©lT·FSì²³ ýZA²†Êšá–&^úÿôðÉ“Ssˆg“æ/ƒÉF‰Æcƒ''V›ë™U˜ØÆ
¬¹oö%k~•µòšµ#J{Ü¿5!VZ¬IV™ì¥°æ½FlÎA9¼x-€5”:éjlÎºß„µï³¼ÃÁkÕH¼@ÍÚ¤4Ág
;×MqË(ê †ÊÖ!z	­Õ(RM±×$«¹Å!?a}×|<êñ„æ~¬;÷°v ±§ñÀ>ij5,*HäçRµæ(Ï—­É2ôî×Þó™HÍùŒ”;ŒÀk¯WÖæB7sÛŽT56
Ï 1¡ÑºãÏ|æ´šaVï©¬¯Ö×%«“Š&×Gë­#tƒ$5(­Jb¹pµ•±0'ÅåÑÇ?ü‹Àe$ÈreíÁ\²X£ƒ±›2`«ªf60«¥e˜jÕ•ÁÒ²;¸LÊ°FMf–¬ûþÅÅñ®LõÔÊxõÔÆú‹»8ë¬­>»/ZÓ "ZqÍ©k®oçw>ù„FÙ}ä:¯9Z3ÿ³´É–—ÿ§&ªög?pF‘ô‰Y`È9Z_Å82ÝÃÀ7¬QË¦¶žé|*“æ¤øéö…&ÎbHn˜a¨wº½­y£¸,CÑ7eÕ…(=-[ë‹äKÒJÖ¦’Ãá*ÓÝG3À£ò"Œ·ÐgŒ¶ÕÊq¨Ìkñ¶7£
rì)Rc˜]œ²iµúñùùñÊªiUÔÒ[š
	yPºLŠüP±;Ñ%VËX{…H4MíZ¶RŠš1”&u«šÔ;3Æwgª"èjVDç¿ò7÷ŠA%¬vó6Ç•ÙÛ7¯¬É å6•j³“o5 kAì`5v†i:QÀhaÌ­Y¹šêÕ&CV³0J[	ší¦@îÆnìÆ×ÑfÄ=§VÍdD»í_µ&em<HƒLjüô5ßÁ™R‰DZ£f\uhÑN	òë§§»éÎ­M¬u@i>b“N–‹'ÒnüUoª:ÖFdŠ®1t¡‡­Ö””˜·îØˆ*©Trø­Œ'ë‰!¤B³Ön2Ð¨iÎµkÁÌ¨/\{‹þÚyu8}™ÄÒw±ö,ý±Ó­cètóô§ŸžþôÜÙ…chç¾ÔÈ'?©OÅ»@øöÂ_ ì ¹}jÕjÝºWkJè&á¬•"¶Vç×¿wÿ‰®®ûEu‰®¶Ó'¶0…ä› ­½Ù‚¦V<ýæñ¶¶“ý¥Ùqº#—ù‹\ò°öáßü¿§Tû)÷Ö_ð¿XûbU„öù³g«  vùÒ•_½wo3Dµçäµ}÷>q‡íÆ6YwïnoÜÕžÜy2Ð¼ÜÁÖŠ b±×°ÜG@Ö(:#ÏÑ"üˆÆKf)€«t´NIpt§¶«\§Ø‰Wí…­Ë`m§½ÈÇç+gÞy÷Aí_Ô}çÛßÆ` H_·F§%Z¯yûnÜ Î$Éª‘±Ù°°Ó÷îÝ Œttk€f3d…º&cýÈÌú©ÁdÚ¡yMnŸæª˜s´†¶&yMçlîŽs’dˆk`œ}GøX+×³´ûr”+k„WÖifëWáÚÑ˜6
S¤¡÷ONH]YM°†«¿¾ªŸoÅê•µ2‰«LÕó?ÞÃ1>×’úÑÑÖŽôpÛ5Ä.©K6ål''¬Tè‘¦ÖÈ9 TÖŒÔÂ¿ d_Ik¬>>¼0j¬¶l­Ë–¡±91Ð	;wÎÞÅnÇxˆKÎÆ_°æu5„5Öï
ÎLXÓ¢]™$´&\“²&.‰‰my¹œÎ´/ååÏU¨;öþÌQj€5âŸÿ™5ˆWtµôœV®¬Y.ÜO’FnW‰²¶8ã©q??©­†#!L³¬¡ÁÁÞŒ°…˜¦‚µ`›*'4a ;¨VYmïÂM‡T)ƒ5ò Ý‰ù‹TÍ0ª6S‘&,!¹Ñ„Ê&X£bQP£´Z2äâT¿w«AÊÚÇM±µ÷5h­¬fMo©¶½‹Ðf$Š¬¦«ê(ÃDJùÖ›kJŒìÒ}t¶Ô`îäèÒx!]"—Ï‘Ñ“ÿò/ýÛ/°ògY}Žºö[Ôµ×ãÚ¿É2×Dkû¦/¥Ï0›Ñ¬V°úÚt®žgV~áGcÃ	Xf¬8Lw$1TŒDi›E*ÑÙórYPm¡WÑÖÕÕ†[q.S]2mØÚ»ªÙP¬7›ê†ÏÅ²$×¤pð¬~àÙ>»{YÈ	å4T.]ù>ØpšB°6K©ÚüìT2"K‘Y8WÕãp¸Zæ1çÓiÒÝk‘b6«ª"“ŠW'É‚ÈfÔé;Ý…úI­"Œf±éÝ àŽ&xãÌÞ‚jÄÉjÞ´^EjkWn2¸ÑtíÚÚ•k(k“s,
k=!¬éÊŠÕfÞBSs¢Zh.‚	¤d5Ïj!¬95Í!›Î¿ñ‡¿·»±»ñ5¤µ'zR…íÖ–<­–i‹Ï‚t5;‹Æ3„ò ¹N1Ñ¾¥{±ÉÑ]­›—ª¸Ü’!-2Mò=N‘”®	ßH“lOTgø`ÜN÷h÷H•!!1YW¢–¦‘xmd{´¹V?þôÅææúóUÜéºF{l™ø{Ÿ7ÒªHü§ÿôOoÕŽüÄõ7%|‰8öý½ñ^ëšs±åð9°1úÉ¶¿¥µ""#Hì)#ÈÄ÷º TÐy*e¾Ôsäž8œû[…k5':Òd9’ˆ8ÑÙy–‹ÅNœVªél{³eðØà™ÑÙùK³|lFUûKhÍ„5B¨ö¿A5ÅSÁ¿ FOµ«/ø]WQÖk9]½÷ìÙúæú½§—I—óX˜Ý ÊˆÅå%„µ;lTŠ÷Ÿ9üë»wß,µ¸±ÝBóhm_Ì“Z(®qªÔ*@0N¡¶0$½1‰
UøJµ.`ÍðL9°*€ 9{-¬ÕžxëVöý=Õ¿õÓo£¬ý™¤P^S:nÞˆkxAj{p”O}‘äÑó§ðþŽª­®tÇ–¿H‡yAÂheÌR[@µfêÛA*6Z˜§ª™ŒÆjÖŽð]¨™EFi
øsJyÔ÷Ñ5›ÁšB5keQ¦«¹¦Ø¬;!ÖžÙÀ°ÿ±á	iÌ&˜4u­TV#\ËÎÿ¯ÔsÍ°æÃS“b‡°¶CY•ÈÞÖ§Æk”¡ ©Ýš•®¶µ¬9299¥`°¦pÊZùOeÂ'@²…V,ÕLYû¨¬Mì¯ÙÚ¿Ÿc5OkDHiÁ…vêŠ-^£ˆŒ£)k¶ªiu#¬ŽÕ¼¶æ½ Ùƒk“‚$§cy^Öz^zô‡iž¦tDÙ›PIÙ–•Ø’²æ½ûY¼Ãˆxí|(¬¯•[÷ëç¸ïíwvÃ­éöZ¹-/ËQäúÖ6½+Ì ¯ïåè`M¸æF¼¶¦Å÷Y»¬iã×ÚB7È2ó~¾-×¨Uc·Ï›ù”cw¥khÍ¿h×J„Œ6UïÙSMA“\€êpÐÔ7qjÝÕfKuLIÔ4qyAò|~ï-±o}ç¡Y÷‹ÑÔ-†Y¨êVê³Áz
í£ò±b˜±á'´%àÀ,.aGB¢›`-“UšIÌ–,ôlS)þpþß¶·þï‹õ<!ïãã¿ª„ò¸æ'ý”i¸†¿ðÐráô5Gkâ5 í%§iwV—³§F¢Ã?](æ>PÊÈÎÂ•Qì©öDF"Ãéî?HjÓÆpþ/àã`“Ó#%kÙêÚô4Ï¨Þtš‡š¼#³Édzú¬ÑZ®;KÆÉP¯`í\ßÐtÐ[[¹¨Vž ùšÖj¾ÄY{æ-rT§VXÛSÝ3;;U_Ä£ŸùRñY}1;6–¥bMÿàÑüÿgï|câ<Ï5ÿa?¯Vç£l²eñÅˆÁMÐšÑ„ [!0Š:TMA•NUe°j;Ø$ijÈâè4îž„´Á,8J&&B¸l×–³µþsZ­uŒXYÈT®„ëÕšuYGÚßu?ïã—ñ8é×Fâ~ÿ=ï;3¶“yæ÷^÷}ÝÑA£µlœ+÷öâæO@ÌÃÕÕê'P]iß8–)E2¦jöÞ¾-’·ªAg/~6ý9oðÌf·Ï'*º«ŸAaÀZHkatÃg~$Í„5£µÐR!Rc²9ó¦¬ù¸»Q®¶±§6#ÿå
aX&¬9\ƒÖiÍ7ÆÎÛ¬Yh0Âc*LÄÍ[9FV
û4SŒÌûÛðÉ–Ð!µ™ï;Œ–.‹1ò(sS¼¾7‡¶úD’;pØcQV—UZö¦­1_Ì?^ÌO‘˜Á iiizzI­op*Z×¬pí¥—Þùå÷´›YÖrXà5¥B´V˜[£hjÍ'à~d.(5{·lÍ‘™‚r_G5Íè,!XK•ÔÜ²—ó²\†1d*cöüM¸?
æTÄÅ9õjàˆ&]Ž'l1V³Ù--Íc×f0‚œ?5Ñ?2ÀÁA«9X{ÂŸEºšÉj§ŸÜ\ûíâ£¯ïÑ*aíÎƒG7Àjg>Ól¶òÕi²DìÞ(“,S.+quù:ÆËï¬Ý]»sùÈþ‡ªTë¬Ùwm?år4Ù×|˜º&b«g¡1Df‹sTx†³ôÈ£³å<ÊÅ¹½¡=ŒÆÅD–MŽoA@r¤CÇTlêÅÚ’êßÿ‘Z,‘ š`pÓW6|ûMY#ÕFhÔtˆ,ÈH„†»°Ä¦ÆÛ-MítRÉZC'°¡±Ö4ÂoJi¬jpªšY‚ø’5Ça_W¥îz£G{ÌÔ³É*³‚Œû'í>ýBƒ‘‘¾AY+´ø0JÒH4d3edH˜±±s†#jÈælF€5Ùø#«éÝÿ)„µ"e¥PY[kÉF°Ú‘ÆÖ›m®{ÄÂÁÚ¾W÷O²É—äf./òTQ7Gd!­³ZÈ­?ÏÓUš$Hpm…k”€…°æKÉ875+
Ï$©‰×t…lÁ9sƒô#Èg°š­Î	’‘Ã5ñ]Ö¬ÏÚœi®B$ùÍ÷IÂ—”¹Ç`í5º ”µ°hÍ¼û‰E%kÒÕÖ×¬ªvlá[0€<KyšÁÚ¦ª×¤¬qmûY¶º³{
\*Ç$¬iü Î´ŽŠÖœ¸VHj…Êšï€m'gÏrt°fQ·yë&¢äì¦­Å©6p±ÝƒT.%Ñß,CŽ¾õedFVª`-![%ˆVÁ °BfäÓ•¦.ÀiªY»QzÈ³š|…À5e@ûŽøüÏ?wãFe0½¸Ijîª
ØR‰V¹[`aEdÒ˜AÅ©<(Æ1+Cÿ¦¶|EjäÚÌ©//¯-ÑÁäÁ½JÑ ŸÞxÍ[¯…Åk_×Ž+Kc°K¸ö£5ÙU9XƒÍX›†^ÿÍìdh°+=x`èäpßëðÔÉÃ\©F¨í–Lvø¼´´†lW/3ÛpTþˆà}ÙÚú¨Xë=Éx’#r³ÙšlXkVGÒ“BÁ¡–ÉÃéèð ½JjÕBHÇB¿y>ª5Îš5 5AÛòXéØüõ:5V³îÞI¹RÒ:•´6rò$zàpÌÚ®¥[Ñ µhYíI $•adz¸V¤ÀZ¥Ž¢µÜŽõoŽèð¬–,`µƒS¾–îÌô´s6>ÇxÁ,”Ôl_HkÕBÏ~„µjgz‹XŒ«yXóº«RÙ6R 7b#6âï›ÖøÌò¬ÆN‰Š1E^Ñ-m-0€ôÓ¨o³5•bËàUŒ×î÷Ì•}ÜDY³ªï¸Áš}ÀÇÊÒÌ²íÖJízfI™q.ôÉ¯#GáÙp’€×†#4[›cHäÁ´ùè¼ò!™fŸœ~ÛÚÚÏ™f­ê£ïA‹¥°X·œ¾D¼û¢ŠI¤5rJv(}îUeùííLDÁµáÁ¾½t<Íâ¹¸za§r™òÍ‰„®mÌRòðcŒÊ[ šL¤fej@Ì®•75íÝIü¤¹`Û¹0³k`HšOØÄƒ²yãÓŠÕ>ó°FÕ–W$ª­ ¨­ü–ÉjjçŠÿ½{°¬^q‚5ã4Õ«Ý¹ze|ùòÈ2ßFT·F+ØËGöÕï—aFc#[ÙãSs¶0$°	Ìê×)jî,ŽIC!GþãV·¶Y°&`‚Á×ÑYÂ“[Q\8záÖÏÞ)©¸ñŠâ]‘Äf°fºš`M¬V9¥EÈZ©”dO’¯†±Í[ÌÞT}¶¥Tëhh1h‹MÔ vJE“”¦3mÞUDàåñLÉ’“mu½Õlñ
´fvþb8oóïp­¸ÏšC¤oµQââýëŠÖ0îWR#ŒF°w›à¬æ'÷5Ïã i Ç³ì`GSÖøežÕŠT‡¨¦•%TÖf ¯þq¶ýfI™Ç³z¢»Û±Z^ý×Dpýp’›‹•¬©bÌ˜îC~‘Ö‚õ„úÓ`ñç[`mçÎ—Ë÷ìºO$#”ª…ûëªÖ|ä#[ˆñ]za¥ÏÙL@jÎR¨fñF¨¬	×¼o?«G5ö¦¬u[ƒ5¯"Ý¬¸Mµ…—ÁÆq«¬&k‚5yŒ|éÃkÏ“ÖÂÕ4‡!µê»(/VSvµÆ[ÎÖAjª]Ûå{	lÝ²‹c^¨ÆF8Zóy¬ðš#¶¢®Ø‚5Ïj~$aÍÂ«¥|&lÝÜ]&Xó6±›™ÂgT‘Q&aqYR°=‘RlJbJˆáÖk4Ñ<öéíÔmþ¡ 3-¯˜ÃåjÞaÄg@wWLÝ˜’ãBÝÕBZóùŠTfy²·hÍrtWé²„cíÂòÊ°výÊÃ?õµ÷_»<+“ÜW/= UXS6¤W×>xŠk¨Ø¿xè‹Šf%ÕwÌ#a#o6â¥5- 'è¤5wþ wøWýë®œî;k4À¦±çyZ«Î'ãé¡0àùQŒ­úµŽö¦ÛÞ<q :¶vÊ€UMp2o—ýÈÉNžOe—Œú9×»àÅ@B†¾Õ<«¨…)4…Y¾tçÒâíüØôíyç|èêNiX‹Ö*Õµ:2zR^ÉN[‹÷r†¶F¹C4F3¹^D7y@g8ù£RÕŽÕR]};ºz»ô+‚ÍÞ"V}OÎ±jcæâì™	ûeE…jb4h¶èe34	ÎÃšWÖd.¨¹¸Äü¼íæN3YmƒÕ6b#6âï”Öþ³(Mò1ýTZ3i­{Ì`Í%?zb+Ä³8¥Äj<È”i.Ã@Y0‡Æi¯žõk)àNâ¥Ì©qRçdðUÆ.Á‡=ivÜÐÃÊw)f¸a”5"YÕ>¹øèÑõäªJ×¾z|ÚL!Wß'¬¿é~zðVØ/'ÀµAßqÍrXœ©WM›•f76ÖT5f3­íÍÈgMñ\ª·¯™Ži[êãkDœjÛË›³ÃÃõP_Ÿ(]‹Ó‹­‰4ÇLNXVŽ›yº Á)RåVÈfÑÔ„À†÷ýñéßë{ž5ó‚üô§o|úÿ>}Ãz€~ ¬AkŸüq?z²Š1×*\
«™­Èê©ÏÎ]ºyïÎ¹Ïƒ÷"áç\ÓÔ´»suùî¥Ë#õƒkàÀ6Ó´éÚòC”§+ô(˜M%iO‰MAb¤D5E{'c»Æï©*5tÇvx/«\HU°ÚõôlUëµ¿8wÅôñÆ‹¯X ©¢5ÁÞï=ên®ß&—†™–¯jº;œŒk©’xe·ÝÒµX­XÛÚÐæèJþ ˜lÙ\0­ })È1"ŒÖx¶ Ø¤¬94“î†FçÙNÁï}¡ª¦mÿ‡Ž‚žïÜÏ°˜Õ.ÖL[#`µýû÷)òÏÿöç?ŠÜ|¿µm?QÇì‘.¥™±›ÜHÔe-Œ¢îÜ¬E%kÖˆ#tW£^nDï¡Luh#P¬–7VëwÞ32ôŸ6Z£›{w¼Dt‡ÊÚ3ˆH·X+ÀÇkÚ}`íå ¾ü°­`ßo£0Ì^D¾"Z½¶¦4H—é;­ùšµ£ìÙtØ‹ª±ÊrÂµ—Ö¦‰ï£—
Äµ…ò³à]¼_a@XûÐFÖ³ZQ$»"Xó|¦Qa&$n&ÀÚ‚YÈîä3c¡N°†I-ƒ ¶–Ÿu5kòÆýìT{Z³&­Ð^„…5_Àjs¬î¤`/x+=ë?´Ï°Z±Z%'—ð‰-i-+«U¸<ÈZs¨ b°\i%SÇþ5Qß}ìwdÀ2Ý¬†ÀµWÞ
­¡«ke2§ë9M›O¾·ŽVEÂîâåÁ‡“®f4ó¤1ŽL®uuôŽõÇÊzG®_^¼–[^£éZ’Ô5ä5yL$ÜýZ}šùS|kiÚÿÑ;/þÈÚÁX4Ì#&«y«‘0Œ×ÚZÏ[n¤vØk´îèÊevdïQ±&ØÂ-$Ózà@J[&y|ôü/Î+0ZL÷d™N4p¯lRÙúØú·>ŸÁüKH9ü´hašO1\×i:é ‹}E¼$³†âÜò•éÅÙ«ç~Oî
‰çÇ™{Éž•©«Ã'y_ò ¹-'wÐlP±Ñÿ†cF~þüuëñêj¡š¢²¶¬Tùˆ€ëÞá7²ZØNÀââôÔ4§³³‹s•Å¬fY‘DpÕAl·;¬AjcÎ2d5¯©Í³º&k"5±ÚF#ìØˆø{.\­l!®IW:cûVk6SzZ+…pÕ ´)‘Q=L^dGó$êZ{JO¬Há©6Ù}Ù´\»âbµŽlª´¤=+­ooMe9‰jf.Èf©£¶fª¥Ñá¨hmì6Yy9Ž¬=^FtbŽ¥ÿ+$ñ>6#”~:å]!UqàëÃ‰ÿa&Y¸x€`Nuõ’¿AÕÓ~BÃ´\o{K¢^%jˆkÛ‘ÏâõB¯x¦~{S}.ef•¹ã9žA{5c6ŠÖš¶¡¤mÏdêÔ¶°ƒÞØÂšý¿Ã›àCË¤»œ&X“6À$õsXíýÿøä?ž<¡`måÊâã¥+×®,¯>yôõƒ_=²ØšÊV–®ž;S˜ÈØ?Yý3 ¹wfïŽ9ryvöîø¦`Í¢±S ÖØØÙÔâ¾|mË\`M&!H­eºÔž•›‡)hòè‡¡æ'Ò K\“ŠÖÙßœ0o‘¿»/\À[€òú_Ãj(k„“Ö8£híèQßkiŠÞº7æÊxåq@õKE’)}äÕw6(Zp6	a² ½¨Æá„NÍXD;o)ÂVåSßÈ®JÉCR
[›/x¶ý Ž$UU/ˆÖŠû¬i}nd¶5¢Fk„ÑVóê>®c³í#y­f¿µ¬)t™7c™’Ðž`­XY+¶î÷¯ìamFy?xu " ß¶ä2aÚžq(-¯1'òóÑnfâàÁÙ˜eK*N…/]¨¬…îý¬EYa¤ÚJÓlí{;·½Ì vóÊ¬r?Öˆ@Z›ë<éÕEZÀš€Ô<«¹’µ ÑšB²zë~`€ƒ‘9óÀ÷þùg~‘²V`Òœƒ—pš¶×Ê¥¬±¬Kƒ´¶ØEÖX‹”µ"ÇÉð5Ù,ûQ¬f°¶ ªQº¶‡CÐEÐdìú¬®±†¸ÆbÄ¦(¶‚4È9?*Ä6³ƒ”Ë^'æ(²‰(‚5k‹ÍJ(¬†od-7RâI¥­ÕÈ+S{­X”1AW—ÀPQšŸD}zÌÜûe(¤ÏiYÂ*,ò†)kùØ”ô5³ë/€5m.kT$S}5kkf+­p—ŽÓ/Ûilr&îåI½½ùëË‹ÓrÑPÞw¸€5Ñš<«ži¼&¿*â¨>¦Þù%^#ÜøssÉàŽÃÖ¼SÎ‹Ê¨·lHpÍ×®§±GR£®Ì¹€Âzcòõ¡ÁÃ¯Ÿìë“x68$3’“£½èiƒéÀZt#È÷Ø»Ø8Þñ+œ°ºù-º¯È´€_×wØ(E.L~|FTyU-DµÂb5Ã4uy¹:»H[ÕùåsËó‹‹ó·wï&Ã¤wðä0}HGü®zÍÃñÖ^¿É½?^†¼ÖÀjoÙBþüJ…4v¦–ÁµXËð§óïðYœLyöó…“.½F›š_œ_TÝÚôSX«xÖ
!	;’1©vØ¸÷?5ƒTÈr,ÖæÝ"mMí°7R 7b#6â;ÿ	¥Az\»&X³˜™óYI/©éXC×IcI¥Ð×âÊ‘ùc[_–µ,dÇ$»¸î~¢È(”ÃÑ˜ú‡ªþ •4ó¨T:‘.M¤ãflÊÚôïÆ’ùi² §#cknjš¹j¸vZñÉ™ÏW? >{ã®â€Ê5×>~ûÿP¸æ*×†ˆ_¹[¢¬l'ª˜CÎ÷utõ5V½ðjýp&Ë;Ù´ ‹AfÎ÷Q¶ŽY<‘aËÕÃk²ëOðœLP±¶u­i;½šxªøÌ¢™º5ÖW›³ƒƒ¿}ãËƒÇŽ¬p»þáçb5`’5‚rµÅßÎ_ùm~~eéôê
Ej_}ýè	ÅŸh;w&Ìc	j–®­›]{ØØ¨öðHÿåÙ»›šZT!µ¿iüÈ>à„hÙŠw"Ó«A@›}$$¬ÁfÊ‘ìDCSk•ÅáÎß)Ïæ¬vpÐæ"ÞÙÑ¹™+‡¿¥eSä!B"”’ ½¿÷×ùöæÜ *¦Ê¦¦¸½^›¤b‚&Nµ±M›šÒþEÐóâØ¤5ˆÍ×(Tcèša7rdD•c46üG«N¸©±´µ*`­Fà6ÉðWöö {ÂXM–þÿ¶¯íÍæ‚¯Y+ÀÖo¦µÀaD°&P³Š59>îã ƒÂÙÄjiOØQ¢šÓÖxÌnDÖýa«5âFxé0N](k¯6ŠÈZöìØS‡5$è ¡µ©3öÈÂx?žþ@]~bF›P yÐÚ˜ø¨?J±²¦ð¨öìxžÖÂ÷ó°övRÔ^^X)äÙñqö /°f6çõa¨Xg§lÀšÅY}§5SÖ 5V’!mñi,®+6°Fxú²}xRµu²Ûžò—á'ÑÚ^`M¬Fü.4ƒd+’Ö
›b;<4:,ìçfÆö,Ð›²áØ¿kþÛZúFk6ò5k Ú³þ"£pšÖ‚H*Ö¬f­È^Ä¨-<!°„Ü¼‰TLyBzÙý9Êš÷)-sïÑýM¢úØ®­ŒTbþGEST¹ëÂµ2ë“\Y‰ÀR¢Öl™ÞøÔ1Zwè~„5ät×À#Lƒd½Aç!cXýkv)à5ñl+K,Å¼7aR5c´˜%GBjnÅ2RUµJßàVâùÝÓóW •ÙµµÙÙ›÷ Û~ÎÉ?,VšÆ§ÈkTÖ!þ¿ÃTâp”êø'ÂÍ%V»&+âu#4_¾FÞÁ!0ôÌdÙÄgHk¨f;@/žññ(ì28Ü;4”«b¿u’Ý1¤kt½F|›l\ü,ÔÆkJMëB{ó¬RPÿXû£U­Pµªéï "¹X«›†Y´Ýîé‰k½±ÊžI¸L3y·“Ž™µß¸ÄÒã˜A¢¦)r¹^þF¬A¤Ví×2%1ÌeJ)#íÕŽCj>&ƒ‚µŽV{©€Õ‚<HãIœE>g¯óÅ	ÁZ1­ùH·jëv9¬ö4Ô	{L9¤xYmÞô4ö®jmÃYd#6b#þþ××<­yCÈ9Gk3æ	²UzZöÖ 4+\³ž7qYðS––IONBB”©õ¥â;TÃV
ªe÷H"ÆI<VçÖ*Ú²$×(ý%Æt--É©1r	S&ScùáÈTdjqež~k7g—•e/fM±OHaùiMâZP þF#vGôcK…´ÒµÉÃ¿pwDÃŠ&»9p˜ZéŽšW›·Ô·Õ´éW„”ÖH‹¬/oRl³~&0îÅmÒäƒØ´=AˆêØ8õE'ÛØÔ»¨jþÉÎû5UÍ'†þÇ‡ˆ£µŸê X“kÿŸ[µ÷?¯­Žå§¦çWnÞYùý'_ß»ª’µl§e)âóXÓÎY
ÎËËWfï,_^[ÞWóÔÇ»m—ïŽ75 ¦¡£ub-Ò ŽiÚÔRà4vz÷þ@XcïKÔÚå°ˆ½£!ÙðyÔƒ\Â] MM”¶9h°à–Ù}{ì.Ãb]í]sÌ”®Š$¬x÷SÇr#`µ‘²Ê²hwµÜEPÖj±¾¦'QºÓI¨1‘5V³pG±W#;NŒÛÌÄŠÍ‚×ªØ‰À¬Ñš®©‰„Óä°Ó¿âA1›•°=M‚ìÛ¬‰Ö€5-Åi€>tµXÞ²š5SÕ¤¯íc¬¡sêÇeÄeANÖü`?WEiÄŸ…gl†œ<ngÀÚs•µâžØM±NOÔ‘ÒØ¼OÉ‚5ÚìªËïÛ¯Ï‰¼¿gäÈ8j•b#2 !f¬-¶Én#zð,ÝZ˜F°óQ¬¬}Ïâ5ô4¥=ª!¶Vá°Ô¯1të :=$ftsœÌYÍšwQÑ;4ßk-Ú|¤ç5KêìöUqab‘9£Ñ™+hc£JŒWßv«‡53ƒd5Ts›Gµ/Š2!CeðI…°F8 Ûµµœà® ¦fØut]ãÕZã™::eÍVk,!¯«ió!PónaL±†'!ÆÕ•@j›ž×PÌÐ€µÜp.ÁY	*[Em²ŒU³ªæ)5Ã	)k4Z»ML]¸pHv"·ô9 r´æF@µÀ£ Î@Ì»Œ¬Ë¹o%ÚS6ë¸¼Ž„®$RVÉÆOq=ýE\þòLHœçó×®¥´¿2{õñ…ZË¤‹[mï’€M–Nëqºvë­·>zç—‡vËkäãLúä K†®¹tÈ_Àš…U¯6#`f¡‰J!c@¡WYÙÂcïçå"IæK3õÒÏŽF2ôÙƒéÔý^‚}CnÞ"x#‡ç‹jÆA!ª…Åj
Õ8_œŸ^¼t•ñòt2ŸŸÊ3ÓOù¯Ç#%Ã£PW,²ií$®!ä¿÷ÒpóþxŒáhòx$9ª’5’éOÊÌÍ=¬ñ/³Šµx6‘£À­g*]Ï“Åx¡ðç¦7”´ù‰yÞ&%kZ—ÏÌÏM­7Ë
üúžqìl!1æ?éPZ­Mhª™®f®!­Á©2ìßHÜˆØˆïD*¤§µ‡Ö{bÌÔµ|û~6aÆŒÐR\èi)hâÌ`Í•Š«_i+JšQ°RŽ3ÁbÛßEd¼«]3@+ÃR±™å>*m2®¯å¥Dß~k¶ªÒñ–Qg
™_\\z¼¸róñòò¹ù]Wn^ºªñ¥Ó§i ¹Þu´öÑ/ÃÊ5Áš™/¾àÀç°µføþ_ÓRÞüæë5-ÙD}KvS€Žâ$Ò!l'Ý1‘£V-…íˆsÜbÇúídG&2™„6DsI@¹Nöî=|·wÏH¶¹†ê„‘¹ƒ.Ža¥A¼ñ)®vÊ‚´*´OÞ_\üäÉãÕyŒ/Wž<º´´òþi2 OCkî©öE=kåÜÓšƒËJèaº½|wöîÝK—Öf/ÿé!—p¼öpfd¡EÊ4"©5Qž×ˆ¢Fæ`gÒštµlS}@iîˆm?±y³˜ˆ+q	l£Ù3ôýË|JÓzÔõ[ël“¿'hÞÖ;­ÅM•VÜ¸pA&C[’ÔÞùè#yAZ„­–n0¿&Iªî13Ð[
°ìÅŒ3‹úÇv¬±s5rŸ^l–ÚhÒ—x’³Ù€ò´6‹IoI"ÍÍêÖÌ®_Í±ùAÆVô¦_P…´öÊZ¡¬æÅ5o‚X¨¬y`ÂÒ'Aú=;ƒ2³q¦/(MXSˆÎþâ`MOØÏˆ(¬Y+2¦,(Ycñ1!OÅ^v`üH?¬FÉç9
ÖPûÌS¤FØ£ÎØu3ãêËVW‡²¦&k#ká‹úäË× 5Ö§…%tðN°î·Ø	ƒ©DKâš	K
`íþzXƒ(p#ÖNìù>kŽÖÞ`«)¤«±ºZÁ²f~–ÎÝƒN×EvëÃXQq¶|`M.ÿ;_s°F(™¹À_äB¡¤ß`µ/¬þXÆ ˆõìÏÖ\û»îó¢›¶ŸÕuÇhè5kD‘sÿ(›-ZCRcÇR ksÚXÃnØlªå£¸Ö
dµõVDbÏj¡<û__?+qöNZ«FIºÊ%9‘LÝžŠ\8z;¹û‚`PCXsÿû‡ÊšzjÊ`­RSJÌX-e}°‚û}èh8w£–É„¢£)l¥Ö|ä|ç7’ÎE+ò#<’ŽŽâå¿üøñã;Ö°‘×©Wï,Ýüjey­ÈÊGºŒ¼$jäÞ&Þ;O´Í%žÕÌËb@,€6Nƒ8Ð¥ÎhºÚÖàÅ(ÒFÎ“U˜#ƒ4—¦­“,7xþuirŽê‚PÒ£žPàÿè	h0mæ?zÉªÕ\úãU¼ú•.¿¸xiv>Ù]EF¿½»gôxF&ùüå¯ŽÜÞ^5i¥µLÏqþQ#‘œŒû;°´¬ÎvÔÖÆ3ul°nè‘a’!3£ƒ;za5Eˆ”ßÈj^ùSÖcõÔõE¤5Ä¾iŒ!§TÀP™ÖºaM;­`iÝª½°«!«ùŠµ°³šíº‘š†²ÚFlÄF|‡R!½´«Ak×LWË›²Æjdfî\4(õi*ºÕIÿLnër#oÞ4RZ_òíAq…BÂ ×‘›]<Ã&W~Jêš¼$[{seÑdÔ
JS™¨•Aðu •&\‡ì©ù±éU|7€µ›KcÓ_?8wŽ¦k³2ÙPå¸æd×pSåšM±ðÚ{ê•Òái+ÿÃ]õÔ;)îD[G"Û´}»ÜEr	XßþíÛ­Zµ¸R›è®fˆ&lúRá[|î#ÒZ“#·¦¦f^¦3?oªb¶í Ö”ëC²½ÂöÆg~2]ÖN?Y™ŸªœÒV>§—Ú'§?ùàó3+K˜÷;¯þ‹KfmÆ•“×Ã‡*TƒÕîÞ™}Èmâå»k\˜]¾üðáß¹šZ-’(Qã¤¥ÉuXëlè,PÖ$ŒÈÚ‰,°æªÖäÓ)‹Ãr	¥B¶w4Öä4â`­½ÍX­P:dÏw‚¬˜*{ñFÙ”±Ú»J‚rµjl.ÂïkS›jé*»ûöíì@Í° 'KÔ§3qµØT_k¬¦¨¡ùÎjŒá+“ÐˆI]šäLºš\ž4^¤ñ$ž©žÞ0ÉH´V·¹~Ù'¬î…Æ¼DÊZ#*k¬!4y1êˆt5$e¢2së?²‘sQÂ£®¸`dçŽ™d(­}«²Æt,V§Wh<ûfÆöÀq„33ûðÝÈÏÕÁgã»”úX7"Œ­yX+Öü¬±Ó žÖ<¬	ÊêÎn#r|Á¬ñ}$#}Œó˜Bì¤7äD¶i«YhÕ™AÚàƒ¢DHÕ¬Í9Xc=¢»™
`mÏ6{"9‘÷Ÿ¦A²×
»b‹×±æA*BX#êüBØYˆ‡BHœc·-P™vÖÖ-å[Ï.¬ÆÆ^ÃPY¨…¸Æê–¢.k¬V³V¦y3H1›?×±ôl‰¹A*¼’¶ÖX¢…vÈñÙq.É¹”]<.ó©jµ•É9yÃÕµtÈÖã·/t—V^8–¼€Õ¢YŠá+!¬™ÃHŸ„¼ûãñ`n¨xÖÔºS–á¡ ˜ŽÒ(kêú©£ÝGÌà1¢`¾éÊD£ýGúú0É˜›y¸üxéÁÍµåå«wf×îÜûZ¥kL$‹8:ã¼WªOöî/äãoFþƒïAk>Ò·Éfg^ÉqD#£¯!kmà8Ç[<QPÈt‘4˜j=¬ú4r$CwI×î)¬I[3Hc+*T+Õžé2&@úR56âÜüüÅs‹ÓS»w'ó·)XëùøíBk‘²ŠH½òä`‚)XÞŸ¥µÕüu“zÊíÓH”Ù§ÖãÕ‘L:šio–ëî+ —MkVT¬íßª±ZèS¹'m’;Ãxû°6Q=½8–F¦É\eh÷X,®yjë¶#QÜtµÛcl†k×Ÿ¦Ak×4Ë‡d÷Õj±ñ×î®K‚T˜wÿ\è0ZŠh-cåO(!%êJuµJ\SÉ7°×è^Ö7ÙšhŸä;³º¬%H‚Ì*q¥‹þØê–Ý‘à·$£„æT•T Œ¨d)‚ÃHŒk$?ÍaljzuiiuåÑã•G7¯ÏuÓ\ë—˜aÃ)V3ì¥ÞüoÃ5£5’ìw€k„£5v¬iÔ<ù¦¦Æ XsóÞr2ÒØØI[Kåêëa°-°š®Ö[ð,d=Ò´®^–ØÀÚÞŽ¦f~yßÈÄíþ¡¡óýù/¹iì¾•Ü
`/œO§ÓÕU*ÖV¾üÑoNþjõ”n9®à'B"ÿ™s_}uÑMfK7gmÊe½
¬Aiï^~HäÚ¥å‘‡2¼Œ^’Ýª@O«ªii­=hÖÄŽ`¬Ah›56H#l¤$Ã¬9?v˜öI=¹1\‡Ry”'ŠÓD	aÜÖ‰×n<÷)«}ƒoYÙ…WT¢¬ÝâÖú»$AŠÖ¼°æÒ em.B_ÕCöä¨X‹EÍ
½6W²)ÛÞ´vìì°ìGÏkmÊöÄçÒijªOÓÈä´*Ž“\À†´Ê;ÁÚ	«eš^ë¢ƒµÉ9œÛ÷S¦Ó½`°fQè±ñ|ë~Ã)Ÿ	«Ág"5"?¬-±=˜á"¢àÄ‡´5V®Ù“þÌ“¯5Åþ&ëþ‚.oÓF;Ô«YOìªX5M%tÀ7Žl5–¡–m\d4»ÃÙÈÒFfBeMK¡°¨«i§³ Õ
:ÎYŸµ×k€¼D‡lÌïClÈlåÒÓ<¬ifC°É’Œ@`íà:7HV+Zs5kfIp°…Òš+Z›žëÖ‚g¢Ä…£BXƒì:6Î€<H’š%­mó5kúšµÐ`¤P\³åË°f-TÕ´_p°†|W¬Ý?»p+MÖ€µ-›6nÖ5k¾d>¥5ƒð$Ï(k–°Õ9x+y*¥‰ÖŠFÂVÙ%ŒäÝOš"°–¨ç](•¦F”Ä’v£m¸—Š²_Þ¬mž:zìvõÔ¡Ê8ÂŠÎ  PM±¾f­»¢›^Ø,2°
¬û­;LHj¦ÐÒ–ëhœ‡Ë,¸,É-UÅé*Ö«²ð»Ú;Ò4ÿ<|~°7wrlz¤ÿÚ•ÇKkËWÏ]ºúøòÿ} ¬=¸¹ôH¥kÌk„(Ä5k¼öÖ‹¿ùÑÿÂxž¤úŸ”«1$Ï*`ÉDòš?«x`ã0y~ÈL;Æ];€·æ8Í$ºh¸cxÐÿ ©sÚ¼í#+Û³RÔj¤¦JµoF5Wã´¿¾8kÞÁr\ü=´²xe¬'BÞ£¢§gxX°–äoys"=xòäqÚ1TGPGSÉTw‘lštÍ\<«¦©™$òÛh‘-U]©¬Ô?X%"a"ÞËßoÖšÕ«yV3§Êõ=
Þäçgô>ÑÖæ/k”ÑIEãd~
 3aM(Vk¬D7G7xêÛ_9øö_7Vs´Æ¨±ÞÝÕ6b#6â»&®yGH‡k¾/6=±i´¶'e*ÓRñL*E};ŠÜ#é®ÖT&‘Îª4ÞØFm“m¸ÀË¼?-­£¯=ÑÚÖ¦º¢I©d©è¡4L—™é£)nª"¬)"Ñ²ÊZ+@ â<Z2ÿxiuõæ½{_=¾~Eðòx£«7Åµ½…O<¸fù+ÿøíÞ·»º<­qgÒuËQu¸¦CÍÁ×ó–¦æªªf9ò{T#`3å9"šqÅVÙl'2aEmM¹œL\sÍ±Ñ×šÔœóò@~¬„jŒ£Ç Ô¬)’š5Ô3Þøêêû˜HòáGúà³ƒö&[—È¿r1ôñ’¬vU{w/ÓHmïþËT«‘Î£ØwÖ.?<"ËúÎ­[·w¶ k–!ˆ”æ£©³3Ø6[0$”ÈÈØ ‘ÕãŒÚ©Rƒá¸O¸zµ„8.(_KÈ22 4`ŽÑóãÖÑ•»oýìÅ’w~Fà/¬±=…µwo¹L(¬ûwº}ðF2'ûèX­rªø¯ *^Ì–Dã›³Yy‹€k!¬ñÇl4h«zSJ˜Å‰*‚ÖØNa³FØÖªÖjtÂb+.ÛQ³®qU‘ù^x=€µbFbýé7”j…°æB¾"ä22X³ÖØì,Ë‘!‚¡C51Ü_`4/­yëþ›X‹X­¸)6ÚxÝ®î±]ã4Ånû¯ÖºÇÖFœi?³!µé„N€°rgØ™¸6†q*|Ýuržo³VlÝ¿î½ÖÆvîDúÞ6¥AÞÛ¶s4“‘û/›¤ù°‘k&/LFLY;eÊš7Y_³†ªÆB˜ªÊj†k"ªÑ)îi2"%raµšpTx„RÕš?xñl9Æ(aÍZ¡²ÆbÂ«#5.°
Õ´ýÎjÖükùÅÑ`ÈjÒÎ¶hx´Ç>‹øÈ˜2xkª¡¬‰ÕÂ¦Øa"ä7Ikš)kaÔ…Œ,ÇÒ)kd7zZÀjvî‡
Okþæ¹ÐY|Sð®”­qw-K'¢ki”¶¤ƒµÄÔÑO?Å¾?‘¼pôÆGÂ3œ;^*€5\ý­\M¹êÐE iœ„°flVÊ.ceh
©lZB±mÖ2LD:ã’x-íHßùL$YoíhíÇ?ëß×f×.-Ý=r§›KËkîÝC_ƒ×\ã¹ ×Þzå£ß¨úø0y‚²­²Ìú°ñÚ¯ÿÅgk°†-ÐÈÀ‡±†$Â<IªÑLX<Þ{ ü±IÇgÚûLAø1¥êQ­ÕÎ¬wëg·<ÿåü9AÛ"œ¶Hª¡`[¢=ŠÝ=†_ñ˜š™G3éÞÑã= œ>‰):ªr	ËL2ÕÞÞeŽ>~&îèJÁçJ„,«ÀÄ™ÃëªÕX%¬yV‹®g5Ÿ¦é-û/êmÎWO-^\œ›šžù¾`íóÛžÐBNó´ÖÔ«1ð¬Öú@²Rz/\sí°	öæ/¢•íÊªmÄFlÄw¯åÚ?ªÁjŠÀÒ9ŒÔ%ëžšõ+0nd¦ŒClÂ6ŠØ1‚ÖÒÜË²¶w©N¢µcZKcßßž6.–h4tD.âºœãVžýd,IDAA¨'SÓÝ1U­E#ùHþ:eÑ+KK—îayéÜ¹%ÖK_)p½_YYwC”®^ô]}ç—ˆkr¸}»·µËåB†3,	,šOLpsgÕv@q¦±©«£yo˜¶—<H”ŸÁjœÀQ¯M„–ÈQ«‡!$Cœü›Ú³MåÍ'ø¥UÍ†ÚjêørðÆ…£Ä­Xã
ÖVé²¶ŠÅ®Ÿ½ôÒO9l9Å4F\œ]	P ÿQÅ˜?*ÿñÊµæ’Yf¯â¹ÿO—/­Íô÷«`«±¥³¥U­±‰C–"T£hDgMCg½ÏsbK€mØw¨½Zè5’0Ó~d³MT‰1Ð5ŽXD¶ƒeÊ€Ì†ejÂ¸Ä·'A**o}z«²äÐ­êïÿaí]`í¹ÊqCQÝ3©¤b­,Æ·?nÕ“r¥7¬¯…ê2`îý-2î×ØAkÎŸ ®4ÐŒÉÌjÄNk¼iˆºªqjºšÛ±— 79é\ûÁ5=•Kü:QçU5‚µç9÷‡õZº^Hj.YM‡–	³Y¾#´ff™‰\×%;¬X3pû‹VioÀKÈkßZ³ÄÖúóù9,Ëwåy Ú>`­n`ÿx]7¢|&–T:¤®Ap7æví1È=hÆX÷²Z!¯…ÁyQäÀÚÜNk†ý2¶ cÈãÂ1pˆ‚µq©YŒ9gçqÍXÃÜžnT1Ÿé´5ï0b¬fŒæ:bk1TƒÓ¨IXûpÏBÝ°æ=2ö›5ªTƒ °Ñ?ë»b{7ÈPXu5ÏjÆi,Ï5aaÕbáaU,Ð»ü¾ÑŒ†+cùÂÂú²5öNYû_¾'v@koÿÏBmÍæ{­kEámûëÎ:X­y>ó€æ
iÁ †÷“öÑ$W¸*X«5Hv©¦ÎDçþt½>’*Y‹•%†{.|z´ï¦ï¾ø\ 	¾¯‡¸¬Ý²ÿû¥¬ñÎl‚)q´¶.Ý1Ê¤C¨.ºÂ]O)åÞXàhTÄt4™-q?Ñ!nëë­¬ŒÚÄb­ý—×f/=¾räî¥7<þ÷ë‘¿¬ü]£ì••BuBhÍ&=eÑœüß{O©¿Pç5ÝýÓd¦×Á©;„Whaíð­æ® kªô"[5vÏZô{•ªËZ©yQ­°,PÕ´._¤Fí6NýBµyt5bq~*‚m·ÄŽc+ÂX+«„»"ÑÑLîä¨îøñd&§2ÄQ[.•Œ&è°3‰`™!VíÏ+ªí¦@bxè0·g­ÂN=Ö&ÕˆÕœeÿ+¾½ÁÛ$\lÞí|u÷uªÕ@/Ê×$³Q¹æ2e1‚'A§5Ý¬ÕdAš½HX²Æ-'¡šƒ5Û‰Ò„k72 7b#6â»(®‰ÖÌ`dÚh©±@YƒÖ
ZÞ0•¦¹dHMƒLÆñ³¢æÏ,)(,ðLœTÈ¾>ˆ­lë´Ö:ÙF’¤*‡ZírŽ²/~Ð>Í“f<bÐÆwu^žI?…¿ekËËó‚5RVîaáµüÿÙ;ÿŸ¸Î{Ïÿ««þh#dÙŠøÅBSKƒfD(rÇ0ƒ¬aÇ¦p£«¨Z†Ö.vŒÝ8Iqî¸ÚíMÈ]cŠ]¥¸D#\ƒvj‹llp¿¡†õ•5Š+[ë¬»k/»Ú([i_ïÏs?ŒÇInÅgÎ9ÏsÎÎžy÷çóþ\dò€‰´µÙ‹Àšh@\{ùà£/ÑÂ‹jƒ÷éür
o«aS×¬íÚ	–ÖPªm²ÚÔnÙ‡0´µaã¸§VC¥B&3¹} žm;ç^VkrÆ"4ÒÎÜ¶á-’í9| aOkƒ2ìöì©:1Ò59W {Ø
üˆAý7nLnð)S°«{ó/‘ä‡·Ïº'£,bgqï—·ÏŸ““±Oc¹xu¡HQ}]y*|kæþõ‰c´À&®á1R¼zµˆä€3Ø@fjÐ°ëoÀR²“1Úî×ÛÉj¦¬¹‚µnð«‰¹»–uÂoT—Ë¾_"Â×8
É:›H~ô„†?#Ó¿—_}÷ò·]>zùkyP¥×
ÖzúÀ×a	G•»>ŠÙÛ“ÁºR¼Ö`Md­1XC5çäoîü‚5#4¸'RÙ¢­Vb›8NaG¾N«‘]-Âá½°d>â`-„Gµ¯n´F<¬ÁEÞ¡Ÿn×6PñØP”ÉÙ~ˆÏ¹¤Ðt&àŸ¾ö­q%º”5×$tfôÈ~Bù;'^Ø;1'û™I«[;Fd¯ƒ5¹å£¥ÁjÄÌœ$X¹,Êzb{?Èºe{è>þA‹µ¸u|Ë`Í9ŒLHÁ"˜iMÙŠp•q‘¦kJ†i>2(kRÕ´3÷¸Í‰ÖtØyçB/´Æwòâšã6ÝßMºéž½£“ÅçBSì­ù0\ãP-$B"¬yXá‘Íí^YÓ°ˆ½ˆ’B%ÝiT®…ÔLÏjÞ`„ÝKkÞÒ‘Ú˜æ
®¯yëþÒ(é¶öTåNÍ
ôX[O•Â´5.%\>ä¦Xs‹á?Q!•ŸÒ"*š²‚5~ySßã:}”«øhÿ³wt2›Ùõêï¼scýÿùÚƒ¿QZïÒÎýV²æ¼û}}ÁoÞœüEõåZÒ9=6Lº)«’q[*O3Â	]ÜË×Äs±*Ø"^˜Y(o-\‘ÉÈgkÿs™tÈØˆ1‡,O†¤ÈNµkÕ¤€d2§m1°EÖ.2Dë`S<ºQÊå§ºcGË‹´K®Åõº…éK8-Hj±F‘Ú—‹j%¾"*ï6ûà‹ÅÕùV¡¢÷?úÞæfšaSo€Š·õÇè“z×ŸÄ÷Q°666vR•ãyÉŠ9Zec'C^üpÏÏa|øy{5ÂÚ®úšº±~ºôÇŸ­.uÖ"å¬vÑ¹3;±8~Í_¹(Z;óÁù¹š±ÁÁh­·\`³£‰l2îï­—´Æ.V[1YÍ£š‚qž0XÛð€ÜˆØˆ¿]P—)kòAYST9V6ÊšFÈ¦5lÈdç`O*g)òèS[@Ñ·º¬uè­×Õq¬Š³)ö#Ò¤:¡;þH.‘êÉ]Lå›qâ©mÏoâqAŽÈ7OŽ¼z1hkkŸW¯±¼bk“øbcy%}å¼òW~Ç§´³$BäÛ|ûÅêFùB¦Y·Ÿ¾¬±Œð@ôñ¡€oÙ#a…OêÀÚžmûö5´5%¬m;®ÛeÑ•Yz¤3†d0”Ûf"Û¾@]ö„-Æµ{¿­{ØLŽ¾´Ô;yY78×þèûß÷w¢µso½IPs‡¿È¹ƒNTS×™s¿üðÃÛÑrë oÖ¨(³þ‹Å[WqQéÚ‘¡û|ò8r÷êPªZ«ÁZ+¨ÕÔf0ÓÊËZa9m»7—œfâZ¸Ð©è&Ìu$Éà’#ñ ^ö¨ œpü¯vY»üî»…ú£|âqa9Ï¿SšåáªWVª7áa@oìÆ¾¾öM›Û•[•äRÁáœF¬ZMàFÅš‰hŠ"pÕ>J~äE¹q]JÛ”Nµòñ—Á€]Ë)‰#*U›’ æÄ8ƒ5¶/í³¦Ó˜Äh ÁL¬fˆ6¬©”M÷”‹¨{\@i£6°¦´Mœ	qÖ5•–•}[_³vd’VjwvŽ«µBf;'öÀeÊš‘/$×°ª—Î>Ál2™“µHïÄ„ŠÆÎœ}²°æµ5hÍA[yƒný1Kƒ4m¶Ø(k@Û„·ƒÔ ²ÜYd|Üa³+³ÍYäºª5_³&w‘—õò¶ýAYsf¿=óMÊò×»ÜI_çîx3¡ï™;;vÜÙæXí9`À¹¿„Ô\^+•Õ>b”qI”IkÄIk†¬ØµøB"ì=
kå5k¼"È`éÃÝVd€µ'1Û…§øòúP»@#¼ÃˆøÌÂHÍCÛÑZ"¡‹"·8‚w³Â¬ûcíQé¦&¼jY&Hjç·x¢2™©ûÍ.ç²í˜ö«Íâ#X€Âÿþb5µÑ¬‘ˆG8aMžÑCÂö$É¹dŽc‚»œçŒ 3LF,ÈáÓRSÏOÖ=)Dz#QãÞX5¹û™ªªÑû·¨÷ÅkdöŠhm'´5e*Z³ž×Þ*±yíW/ò÷î×N?Â5:e»å¯‡Þ˜Î…õ^&a¦ÄCˆÓRë$5§©• TÚ[á, /ÎªRm¶§þöýV‹dD®úÍû…šÆš>|÷É9ïë;ÉóQ•ÐŠ-?|	÷“>êØê ²:â$1ÝÎyB—êÎ4ö«?vF´VS¯ÈÓ\-W•<ìÝ*ÙÖhN^béYÍ;UºTM¥f^,.ÌÏUO“§I¡ZáÜ¹¹×»÷žÝ¢¡—­ÕØ½½ˆÒ Ñå×'A«¯Ýú‡ÈØˆøÛ­\»/ZƒÔ 5BÂš^;kUÖ°YÅšsówÅßIªôÎõ&¥»m@š¢««cª‡6lYµ¿‰ìº¸§wg2ùX&7x"¦Q§Þ‹óâ£ °oÏ‘~ì/®ªßÚÍÛÅkÅñÕŸ-ãlÃÈíeÕÜVöÊ˜qØ®}ß=}çW/’SwêÔXZ&¥C¹aqu¨f´¶¯•ô8¢¶uæ(iV­¶…ÜÆí[á6ú_7‰Ý€³&6fŠ-\2û”µî®²~?0òÝ½?8°gëÖ©ƒµ'Æ^ZZªûÍ,÷B•£¯ee¥Šã;t†ãÙ­¡š¼áK[oýóÆÛªùæ8ÅÙ+ÌXveè¥ãµ‡×nÝ¿ýXÃÐýûw‡ZîßèÆYXƒÖt  ‹ÔGÄ¦¶¦n‚B¯îÐû‘ÉÈ&
Â²š‡<Hƒµ,3ÞX!‘ì–ªVÒZ-‰¡äW³ÚÊÞ}÷r+¸×^yöµW|d‰Ç »–
Õ›+
õÍxD§éƒÍØ·ô+Nœƒed2B¸HÁ¯ÚZfœ·Ø1ÒÔF4F`6b—$¹ñØLuÔÁš±›7ú×Z«ýº\!G|ÍZ	%ù TJ¤µÇF† .A’óHHB3l‚€µI`mt¤¢qÐ}å>ÂrÄŸ¬fm}OlmKýE°ñ~`mÚÝ±8zd€ÿþq@&þÇpñšÇ H‹gð÷·
¶c:‘m?(×;áLFÎ–AâwÜ1b4¶'ëj¼[#™2yîò‘Š×JX¢=!,mXóá„5'­£‘yH„|Ý+kçT÷Fô
•lþqx„g¦\Hñ³³;[w8RÃ_äÎÛ>Òx-dBòò¡ó_Ûî*Öˆñ“èúøüËÞ^Ä´o²íÄrÓÖ;OÑåëÖ\*äø¹ûpÍÕ¬yuÍ+kcÞ`„k¡dƒ‡µAS[?/TH…¸ijŠòtH›ZÄã®ÕzZu#ek*VªT[œ{×bÉÝ|x¯i¤ò¬
KÿÂö#í“…ÂdX{íç•R…XÍ:wX 5¶U®‰Ô"ÇáöÈàÑõñL¢­©TÜÜ	“à%š¹EGÑÞn°–¨Še`„ž.2;Ò¬NñžÕÑÜÌ‘IÉÿ”X(>$ŠW>»F°ƒµ›ËŸ~þ€¶0Èk_<Ñjäh­†Å©ÿÔqiv=ÿQáÃ(•Hdºìe·ý½@hA—‚u‚ž&N HMôãEµRW‘hÉ¬1S–Æêø|quš|Þi ‰zB4d­RNÆªÌÏS/}g—Æ8ËåNÖÕ#ºŒ‘™NVV$Y¯Y“Ûi =ˆAæÕÕu™úÆK¤n>Kö­ˆ'¬eJm KPäub.ÇçVÞæÉ¯†þårí_™Ç	²$€5ïûX¢¬UG´ÆÐ[ ×ªÍáÜXMƒë®¶á+²±ë•k÷ÅjNY›cµÜ £fØÎ”+¸ˆÕÚ£l÷AhY³ëbžêÒkNÚ5ˆÏ†ˆh
`Õ6­<IH.—à½ƒ9oöƒm¬ÇídU²")(`‹ÅÚõ/—N6O×“Áp{mvarr••õóµâÍåé_¯=x°0ÿÅ†k÷ÌhÄ5]SåÚ7^{öW÷Êã&X£SŽª|Ó5¯¬¹ÌÅ‘*×öíÛ·;ÛM%Éå=hIö›)¿M·õ(V‹®[?ì}µ†m{ñzgÜýTê¿þ¬9uég7–ÀµRÖÄkGjmås¥‡5R þË7!P[WoàkÃ®9vWYxg¯|Å•ûÝ‹ÛÁ´û¨gj£ïµ‡5…Ì8(ZƒÙÚdqâÈb$b5~lÅjL}`¼Ht³g³Ö 1èÍtPH/[ŠfÊ‘Dpûê¨WdMA²âµÆ~Þ>bx^[×ii¥¦@ÉÚJM¼¢PÕd…çol3#°ÖdHÙm¢Z›x­9õy»Ñ;æ
›NA\¦µ9ô2øâŠ"ÃY/5¶È²ƒàkú#ºa`7€GµÕ•(k^C¬¸—¯Z+³ƒÆØÑŽÖ¬4M±_ÈÁ1ì_åÆPkel¾RS#Å¡QÞ"íH©²H­Ü~‘­TY›[ÜF·†ö6¼P;°\£z=Íý‘ÖÌÀ\ÂÚkÄÜøÌèÎ k.Ë2|_ªlÆl\y<ÔjÖfäÑñÜ¶ßzLÃWdÑt3ƒ7†àdbBjSt†$à2w¶ÕØŒÏŽ²EÕk
np¬IZûíÁ3­ ³4HKÅ,…5Ž¢pýX¼óœ£5Œõ…jÚKýE,• ›¥@ê XYßQÍ©xëaÍ]†Ò(QWI…T$sðMi›9Ÿ ¬Ag¥=±®¶;x7H÷U©…;“JXí™J&›6_­y8´Â`Í®ÁkÍfýXUA4ÇÌÞi-ÙŠÕ×UUTÕ5ò«_®þHkíéüÊJ]Uá¥Ï¾óü+¯JZukAYÓOEÉ‰Ð¢5<‡£ÔÇ¤ÖMã4µ´ÊhêÖÈ¹ÉLV¡eh¿F¤•ªé
÷“]©xœê5z|vÁ{¹žá:`-—ãv.58xäÿçúõû×g’xí3Éj°ñøïÊ2ñ@¹_üÜB¿Nn=="Þ ÐöW¿z±¾ïäOOñ‡ÚxòB±ý?GøEpüëáÈÆÍS‘òœ¦ÔGjÆ=ëH-àPI_5=ÜÃªzam¾°²Zœ_)àRW¬9`ã¬.ÛU§êCQw?"Íyk}çÌ&=1—Kçý§s<ûL«=v65œ±›/ÈÕ&ÒéÃ'žF`#|æfÊÚÀ•[‹8§cƒµÎ½$v•ÌUK©+€V+õå°¦ð°fG³õ÷'ü¹<r‚ÕÎxV£éµjÅj±ñ·_›žŸ–°F›5ƒ5§¬O®¸M«¬‰Þt“TgšÖjíU12%2z.ïh2é˜êÊö’¿Îy’w'{zXrS¹	ìzRIÖ­ÀÉ
}¡|3‘''žâžò$¯ß™øÏ´0=™M¯}þù§k?{°úñíVç1¿/w^>ª¶¦¯ýäÙ]õu´qMŸ>~º‡THÂpÍÇ#^³Yí>%:¶¶ÊÄßY‹˜#d|ä4Ilâ3¨MŒ¶%Ù¯~ÙªjkS©šŒEöš+ü¾MñvòúÇ~vy^žõ7ìè­ù *ZƒÕþ‚°vïìÙsçQêâåjÕŠ‹\Öf¯]+gjfé½z•NAm¤8îënm‚0þ8àÊµDkšh*Xk¬µìÞ´Æ¡e·5º&’ÉÈ£›ê´Àj\—%d7/¶&ùÈäJ:k²¡<ˆe¹žMü5X{÷2Ú½{”¦
7Ü'5™A¾SkK/\i.ÈbÄ’XNæ²M e"«W˜¯ú¬«uwë°Xkí–y
¥y®±#èa  Ëã†!¦¬ÙåHŠÊ,xƒŒ 9óp÷Ç©?îW¯¶Ú©—ÿ	¿ŒÇ­•:!êâ“Ý µ‹ÙkY`5úCb¸†‰Ñœ[¤³ô— '„›‘RVÞhÍ"›”÷Y£fmiç}0Ú÷^@%|¡aÿ‘cš\!‰ÛÈ»DÕ#UÒ~D³Ô§œ3ãxøC:gÃ÷}R"¤Z 5ƒ®fÊšlE ¶çîL,Þ‘i¿‡5·h'&l5WÊ0S<#!ìl‰°öúËÆk´ «ñriz¹Í¬û1*ØÄIFH~X^#v_ÂÚŽ­Xê×¤ze—yAêå9M¢Ú:ëþÆ{Ë„µÇZbÃj‹OÝ‘qÿöEþÙèo
³ñ&Õ­13YM_%ªY#f!r\ÚZxq¦Ð aÍ»Aš8ç+ÕüÔHmí‚˜°oóa=„êÕ8(*ð‚T©2¬¦h®ËÇë€5¤µ&$++pq¯ädÙDÞtãþCüÞsV«=öÿ¿bn‰Ñ6 ³dR¹Ž¤Ò3(ÜBœ"e2r#íD—ØÍ KõÓúS~Ä=ðÑ¬åˆµ¨§§‹œ‡?©<oÈW/~¨éÙÈ6{ÃòƒåµÛ¿êšr5¾óî÷šÓÈk?yï=l†ûÅÓŽÖ„k¦°¡ŠEÄf£ø+w¾* 7DÑcæL+µ ©yR+¯TÓ:A¨ªYÇÙâôÊêðÏÇ«ó+õÀ4Cšzj×vÕ³ØVÄ¸ko®©ÏŸÎln#NgÈ“Ö`5¶öÆº±áaNãT/§rÃéŠø%ýÍ‡M¤j-žó¬öUÖ"ç+iövþœ~\F€5°ÍS¶®MŸ›®ÇÝñÅR>óó’+Æj„LIÖzÍ
Y_eÖ`5'¬m ÚFlÄFü=ÀÚut5W²æ+ÖdYåp-†dÄjU©wé´=£“Ö\])”ÓÆjí©Ž©AO`­k
emê€\EºR”·‘ŸÒ“ÕêÚÕÁ!Ý£*ðæxVSž+Áã¼&`Iì%sp›LüçW¦Çó“ók·qñÇläÓåÔ®ÝƒØ>„×<­©t_Èƒ:êºöâ‹Ô¿÷÷?JÑÖT¡%Õ¡Z×Øˆ‘}[ºÕÀt|ø·#®mïÏ÷'Û›(^CIk§€æÙ ]RŒÆ@PËÖy¢¡Ö*H·ãKŽìÙ½yÓö-]§/ÝUóšÞ"°ÁˆËZyV{KÒšeAž}ëMKb))8(^¿Ï¢[¼¤Æ‚«¶×ÅYEŠÅû·¨Ž—ŸH«kæ!¸bž†×Ù‚»½}'ˆ‰@å´5F3XÔ…‰¦¬¹‹´ÐnÍe<:ZëlJvšŠ¹Š$’²ˆäOCÈ„?”ÀÚ¡Ë‡
+Õ•»k„•ªˆÖ‡5lE
K+…¥Bï·ûŽÑÆ	XC»Û…ÙâÔª5A’(kŠl	žÝÖJ®hëÖÜçDºôGù>ú²ÎkœwHW‹„5¶è>aƒv6ÞþGµe›êhØÿò—+kå½ ×©[G¼o?›ÑX$®9ds§:ÑÀfÚXÙÊF¬¬Ô_äI’žÑÝû£Ô¦MNìaï€ÌRj;øI0ê‡ÖöËZdHÓýGô™æHä i´6>gÖÆGgÄK¾fM¯Th5¤–ÕíE}Öä+÷ì@~Æµã[‹¡±š?*¢‹s„›NvjzÐ—¬‘¿ˆ7ÑÑ®lM›¯Y{ýå3½ÒL©Rÿ´­w#LÓGwl¿cÅ¨;ÖLYSª?ÈË‘´vYáŒûµëþ’I68ö.n{jQ–²;Ô÷cû¤5v©½Ï,nÿ¦¥@²Enì®­WÖÜ‚›%M±Ëb.À¾›Âµ^ð0T­…ð–þ%a5k±
®Ç1©PÄšóÍõkö ‡¨<~#j—™p¿MñjuŸWÚã7B”Áš¢·J…jÀZ:aeÑžÐlæSï…e¶'8ã­„Ã4;dµÑ®™¾0‰7¹®.þl;vÄÒÕrƒÈåƒÃ¹Équ©i½¾P¼I@kŸ>üV»ùð³O¡5óþÂãÚ[¯[.$¥k8ÈÇŸÖcÉôØñãÿïÇ·<­ækËþ“C´_Zì6‹.¨®ñ‘r”VŠipZ µrRóGh«X¸R¤Jíí÷WVVh`ööÊ.Xí#˜­¾ÎZ[
Öb'û 5
dä_WU…Ín#ñŒø,#Ï¯|V;ëˆŠ×†©VK¤ 1`-ã µ'R§™V{²µˆËóÚÓÓ¯ÀjÔ©k–YS]8S¬›GmÌ˜—E/é‘¥]Öæd	ª­¸fØ8ªHUÛðÙˆØˆ¿ý<È¯™q¿bZ“®&/Hï¡S‰Ú#ÿJ=ít°±XQmMBmI-²Ù©)|{dà¯ÆØúìÛÙÞÞE[œ,‰‘©D
”£”­ËòYÓ	µy‰Ñi[ëëèi´ËÖ‚¬Éf¬yzz’ö0«ã“7‹ãó>ÿt¹¸Fùš¥®<pmr¢¦koYòJÔ×ô5ÒW×2iž‡ö ”Ù¡ýÍHë”X÷ïkjoÚžÌçûÀÍ¬¡!¹mOÈRâZ¦?³»íÀÔ¾m# Àˆá1ÕFÙZÇéË—ëª_S
à7ž7V{Ãº
½ŒD€ÁPÉúó/ÞÔ‚{¾<‹eaôW‡ö#çÇ‡J…¤DmÿÕkWï¯£3°¥Ö4t 3ŒXHFkk#2Êƒôþ:‘¤\‡HB-³­u".rÆßÚ\üÕµ%«ÁÑZ°âv9¬5ºLç»CT¤,ÑRâ´ç_‹ÌûƒÃ ÑÛ»T¨;x¦ª°Ò×ŸÌæú!ÇtW[·ŒÀ• ¹Y°Æß@°¶)J…ì +6CËîî.kF^æÂox¦¹ÎÌ³ßî¹Øôù‹ ›6c þ…‰Óˆø¦Ð¡Ž½x<YY‹x­›,@4ƒ5h-ÀšÏ†4N³¹Ý3Íxò3ºqX+‘Öì;ø#am½äA hhx­áM6´ÖJþ#³gF'Ž¡«ðHf|†|MeCb02#hÓ`Í±4¾ãÍ7Êš¤5eÊõpÒ6sëgg+…5Yí“´h¤Æ¦X§¬™¸æhM˜)k&¬9ZãžÞÈeÍ`—3yj‘)Q‚PD¸ÂÛíO@Pü”Ï¬mU$›•¬•+kÁÒ[Aúš5Ã¿@jþ`À¨ùì©­÷Þ¡pM‡¼öŒ:dçþ'+k0šg5;ø,È`12YÂhåÓBÿ‚Ä5@-
¹„JµrX³ßñÍ‰ø&yóWê$FêœÒ 31V…òáóÀZM]>Mât’CÅ³èjKÏNY'H‡,ƒµÔ{å )"«´UÆÂ®:TË$ 4ùv##FƒÉ¸–ÖXzX|hú	­±:Å3ˆk"¼Áž\I'«©)`-?þñ4*®ÏýƒùVa»ABäç7ÖP×ä	­a3áÿA‘ªa«‰Œ!k Òüñ??~|©îi%Ø£¯éàƒ\FŽÇ ².v{=)ãLÇh°Q 4‡iÓ¨R+Õ 5[3˜«ä™Õ÷w‚[ÞÖêûVÞö°¦@LËc©b1uÄ>ÙWã1éXs	§y•ªåqŠ<=<œÂdË]¢#Áà%(Í¥¸e5’	¥–Y‹<ÖY ‚5µX[å§ÿ€kôÂ>¯­Ô”‡X-Hjš²E)½øöÃj!æVøõa#ŽÔxm¨j±ñ÷kÖdMi^Xs°¢šð†®Q,gY’,¡la\¢kXS­Ú!]ƒUR¤–¢"ªc¤§2E_ìAü+RýHm‡¡µŒV~€0ƒFà:Òdûe,‹áÉé{ôóïÇùãiVÕÏç©™V—áÚš’!ï­¾ùsVWŸ)\SÖp¬šdæôñãÐšï’—A5Çkv`hØ·gd*ÕÝM-ùážöÎ sË–¤%C&·lÛ‚W
Y’ûö%3©ž–‘‘}Û¶kµÒ×"ßæ‘–îÁá“'ÇêoÈWƒŒLƒ5ÈåèÑÈò­¿ð9àõ·Þ$H­`lžÕÔR­hµá·Ž<¼öðj‘Å÷Êu$5<ú†ŠW÷ËYÃµ¶ír!8%l`·IK[¶;¸4kMŽÕ²RÖÊ2–¹H2á\ý›ŒÀ²-ô\k"²rFèdLÊs$ÇENþY`Ncy./½ôî«—Ÿ­üöKÖû÷$Q±òJ9¬aÑ\·Ô[QwyWlsrìd¼"9<Øé~^ãH†lWa^—ðšZbë…À	k,¢ÁuXãL¶ü
Ž¢µ))fQâ£WÒÜ”Kÿ¢Ñ'DÂK`ÍÛªÀzb›±ˆÔˆRRãšb»º5¥7Züwöý@˜˜ÍÁ	ïp¼æ(m€)ïzÌº¿Tâ*Í<änÖ¦U)¥5ì864@¢t¼ð=›?3³m€˜=611äÚ«Í8R³tÈ ¬•I‹†g¾b‰¶ÒŠ5û'0ó-Um#	/È	\=¡±ñ
g3¦¬é"# ÂÑ`ÍuÅVƒÍ7Æöi¶‰Óœ{?i4ª,Lá¹,´¦~t´Ä‰g(›£œ`MýáÈ‡Ü”56#5÷
¡ù¯¹äq=ôYc¬öÖ4ãûÊ:Û†Ë¢@Q?'®Û.xç~¯¬VÖýÂµ1‡jåÖýÎÊ#dH®‡µÇÙlÝ(?ÈÍUqžÐgmS8SJ¤p-fÖ\èÏç3EO\È¥°Ž­lïoî}‰x^¡ÈRXEkj´¦¢µ°ÊpÁöd‰28pt¬–œ‡9ÙM¥hiÕ<çi¶Þ%dÛ«fÒÙÑÑ^Kh—ð¹º”ËhÊÈúËÝýÃÐÝ»Cß\¾V}xå
úÚòÃ‡ŸÈr™À—Ã%k¼‰¸ö»×±­B]{…Ôú×¾]ÿÞOúÓS§þüçÓ2’‘±¡Á¢…]tÆfaÛé'D a#ŒÑ<¥LœV
jÆ=O4ê‡ÓDjì³««ÅÕYhimaam¼ð›÷å-ÂC†I#l5`íd>¤¨ÍNé«–g‚&©Ÿ%Òdú©_k4XKó{¿çÒ0qø€uUó&*ëY­Ò+/W«ùîj³Ô\Çîó…3ÅÙó¸ÌÉ'Ä ŒI 2¦¾±šƒ3ïéÏ‚°6ÇkZ3/«}üµØ@µØˆø;ñƒ¬ù4Èq@ÍKkUUÏ°+*+£šï¦Bùš<¸â¬¦1=èdÍLÇÖ:ÔùšŒGü ;:A69te	JÛN£ª «ñaHeòyƒ´D·þ*òkrÐ€ˆjdAN’9OQÝd"‘ÿøÞ½ÛËŸÞüx2þñM\üíQè`muáöÏoŸ·Ü€è;ÞÉëï°ð‘ÂA2$ñc-®åêš¥BúøAm-îq©+‰Èn‡Ó¬^³Èôá‘=äEîéÒÝ³µÕ0­–£wffÕºÄCÈCÿ^Aæ¡ß?f¬ýó_Þüç_œ=wïž­¹~³Ñ³QíWŠ×fïî¿~uö“‡Wé‚Ý:4T;dÊZm-H†ÇÆîÝmQ&$&"VµÆ&a­­Zµ¦ kÝmmYfÖÔÝº<¸ÓÝ%g+VÃcD6"Ùh©°Ì2›’IÊÕ’\@_Kê³/ó…¬¬©, &.õ.½ô,°úÆ´Z*KƒÒ£u!e^§Å**jÿI°}øRJP	&òƒu2kRÂ£ï´ff#ˆŠÝ2xŒ”5ÇX*P3œëpŠÙˆn¨ Œ3\3KSÜà4¿j²‰¤8BÛP¥k!ùÐóJ 6MŸT´6j’Ú¡EËŒû	ƒ5‹ÙÀ9œ•Ášæ„Ò%GîŠ½Ê­)J	Énƒ‘c²¢¬@OÛ;0D|÷?´"èøžƒµQä«;jÓQ:69*B³„H I>#½;ÖÊ«Ö‚²hƒÂC\IJæëÀš¬¶¨˜Gý‰Çd5?•¤&´aÊLìÂ 7H‘Z¨Z{9tÅ>Ê+dAÜ³$HíÓ*€›ˆ*Ô*š¨-:tr˜¦£7þÐ`5cÀ?%Úš‹­RÖ|Ñ[¨j¾Óòšc7e@ú4HjÖž	¡o²®Ãšÿæb5ö`ˆ²K^¸Àpg+›Ö|ä]{i]±½ÜæÃÉjNY+Âºye¥!›‡µ «•ÓšwQ¥šúa7ÇèU¯ìä
í¢Yö×ù”YÇBkÍ9TWT¯ð´Æ:ß¬¡ªU+i£f©Ö¼Âf	øæ0ÂUM		³¶J’*²†Û•[ºzÚk@R<†÷ÕHÇàÈxæ:FX‡ÑÝRüw÷êu`möÖýO>»ùWÈO®ÌÊÒµñ¼¹ÎÇÿõ_È·ê¨~…½ò“Ÿ	­ýY^#jCü˜†ÐÒ.p!«‘ÈÂ²ý™þ1…\[ˆGiÓˆçË@Íg?–ú›_°$µ¦W$]i©­V
uõ8Š˜¥H¼¢NÑGÐúÚ‰l…nýctÄvé‘íU	Ù1ÇëJiž]U]WÇoå”ŒÃºÐ'3‡§Èƒ|Úw'ð¬V^®¬EÎXSðL’„5]œVWô`Ó_‚d6µjAbCSã‡šz¯+p‚dö"·6Pm#6b#þ~âßkãæ.2£$ÈÉ^P­eMÚZ¨ôö'ªX‹ÆdŠµR´·b‚è–ìèÂV„$Èˆ­#§Z­“´È¬F§µ©¦b´t<Ý¥ækhk©\ÆªÕ*c(kÁÉtæSU(0Âkã<Ì-Ð${ymzruaXSÓµµeˆmíöÏ)ßû7ÏŸk½ñòóßxçÙŸü„Úp0€Zë”p­Ô2ŠÖþÐMþï¿vMéò‰Î¶-ù›çH'à‡{Ûz»¦¦mÒ™¢Þ¬k–s¸çiÁÚ«Ž×ñ„<zô]‚4Hšb“ùÖ¹ó÷Þ¦"¶â¬Í^Qæã5­¹Ÿ<ª¸5{íj÷ý+Å¡¡™¡ÚÖ¡[ðÅj“=¢³ÈU$*XkÕ¶!OpS“xÍ`-Ø‰¬/VK$ìào4)ù‰‘¹)! CÎBAÛìÄ3Z —`Ú”5€ó™_…¥—zÌýþÕ	eÃº,¨ƒÐZ!FzÑ®•¾Càšq{.Õ)WÈæØ&ˆ‘OŽI˜Íz¬	ÖØÁÑŽVª`Í…SÄÜyK‡á"›åávÃ"XÃ<ÄÜü#IÍ‹jL#àã^«`mÈ×¬•	k>’=pS ¦·¬…šzb+LE3ZcóÕjÂ7Ýàö±‰Ñ!g2¢7`ì/‰qk!Ê›ža­ÔrÂ}sl8‚ƒß}¡CÞ"/ìÝ¯8‚r51Ñ;®S\4éºeKV#h|¬<ÊZ U7çø89XSö#¬†¸&²ªZi`QM›#99ÎM¦ñEƒ²fEk¶Õ˜f/9DÖ¦ùÓ‹wé"PÖø’Á²$ÒÂ%dj¿>í°}ÑP­Ä`ÄÁÙe¿Yë~X­¤)vHô_ßU®©Zo"(ÄhT¼ðÔ–m¬ÈÎ@-Ú'°ì ƒ°5ZsW¼$ãcM±çÂ1èP¯aÞ¿NXc+IzLD3•'ó‚Ïìê¥¡˜ÍGÜòÖM_‹é	Nw“$7È¤¹X;ø’r¿×ÃÚkÐÚã5kà‘ÔG2!Cþ†ÌÎ*‘ˆ3µÔÇg°™n]øDª†*A¤’‰„ýÙfÌö3”ªM¥R#?81œoL¬éÝ‰®®Tî4Ÿå‹W¯_½¶¼ö?Ö–—¯]»¹Fû5ùCÞ¼rmùC«„öN#¾tM¹ïíêûé)žþ`V2÷c…#4µ‰A
ÕgŠG\æÈLz$Ñ…‡<¤8Di{“ j¯R#nß¨¦xäÌr²:O¬ÎOc*²kX›¯®v}Óš+ª0«êÙ§Õ×ƒqù“yZaŸáúxcceÒs1c$þå±ƒÌç';žÎÇOàÖ/kb=«•¥@VûÀ+¬tìç‹³ÅêÂ|áÌü™š'„Ò¾ž«¯·£Ú¬qfÚšt5Â•¬}m£öFlÄFü=ÖýãŠ9ç/bºÂš÷‚TƒÁšgµÊD;£­£i¹rÅ«ã9¨Mp((Hv¡¨u°wYwRB(ú Ï"9ÈêTFIñDšÏüéð­'‡ÑbXö[d&ÏJ«ºÖ4¤5ûøü´t¶Øøê½ñæØ*@eáu“ž¦·oÞó×,Ò«k/áÏ
ûoÿí½ºxìÔñLnx®…6Ù0™v:+kN¯l'°8œ¥fMÑ=õƒ–1É*5ØöÃ=0•Î¶ØWiØãW-Wg}XAäW¥¬yX#nßû€àG.úÚp³|ÄN„¤üÿÔp÷áµ«ÇZè§v÷:ŠIë€9‹˜¼¦¡UtyŽ€):gïÞÝŠËHS÷î¨E¬æ#(k›²š7eÝDhMV½ÖÉš)²I¥Gªhs›z:K0çäË¢z	ÿ£j2÷ûß;TÓ¿‹WÂgµyÃAx­Ð\¨«[º¼K°Æ¿ù8ÿò›²(vÍÍíXžtëÝ¼©ë¬™e¿:€mÆfSöC*š
Öt$Ì¯¿…3]’š¦àý‘¸¬Ù -Š‘Z¾ŒŸ‚L%nNCbóþ&¬•}xe]!N8¶?5Î¥›i4Š#I‘Ù¡ÛšO(k²TY{Ìa„(O‚äýÀš}gä2Ù>0¼ð½VUÐ‘éŠÖvÎU®«Y…ØŒ¬ûÕ›]qê|”¢Z(ÚcffÝ¯’5k²fªÚ¡“ jÝ‰¡ÔN	kÂ%®#6§ÀZ„kkÚ€³È»?Ô¬Yäë&­±IY;Ó«ÜÇÐÛ÷7óáfîŽÛü;I„ÄÁÒÃšhÀ_Äk&­ß¼°ö‘x-ÀZ 5ÿ/ð7ìe¿ ¨í ¤¬m•‹?i‘jV­žûê³­q |£µS‚³ãáp-(k’Í¾*T¬VÉw[kl¥~ý	OmúŸ‘±¹y³
ÙâœX“æÆ/èL¦XkÎ§õ[†ìõt]e¼¢²@cIªv¬”¬rÐèAd‰M-¢´JÂ!Z`5"Ž§‘ƒµv¥Ú'Ô›Û
®dd3Ìs¿v'¿¥;­˜Ú>Ò7ê©ß¥Á®N™ëäYM_ƒäû4wò×gfnÝ:rkaaµ¸¶¼öð&¨¶¶ª6Ùk³×–ÉØð¥Ða5±Ôúgõí]Õ}Â5"Û0‘N)4ÇŽc=¤9åÌ“Y£[Ï<£)JºPÞé”(jo_¯©Ý¼iËFäÿèÓ1¸€—0±
¥}ôÑŠ‰¼¿:?iú']Õ*«jv)Àµú>\ŸÎêi­Vwr,ŸÏ“ô(Zk¬Ë`ðE†H¦Ò¥ÕÄ3Ô­õ]²tÿ=='¦k”¶v‚`Åó¬ÆßYíIåjÏÏŸDµ‹À©š$>®Î×ÏÏ—Zô÷F²[ÎÂ›^¬×Aö":Ö›v,TóÊÚ¸pm#ÿq#6b#þ.amNI“ëKÖªè´æŒûm'Üïm0ÍQ	sZA»XÍjÖÒ‰ÙŽê¯fÙŽÊ€Lƒhƒ˜C²¤qa0'C’;•$r¼7•ÑÊ×¬|…M|j.˜&µx"Æ¥ÉñüÃO—gW§èhŠ²FÞ
gY£nß¹69¿û¾žî>*¯ûé©¼V×ž(Òºä<Þ%ÛeBŽhdoq¦#‡ô´mÝ×ÝSÛÚ}ØÝ‰-{~Ç%{»Zµ†e@^æ+?=<–?yè•¬­½
¬Ey®-öm{6z±¸@çk‹kàFý÷[Ž\EX{¨FØ÷ÿ¸wèê•û{Ž¯ACób5ù""¯qÒ ÇˆÛð·ï e(TóŽë*ÕÂLLÆXs÷"é ›#µnN¤§é$ËÈN…„ºê¢©Sµ¹øä¨¡Ïpˆÿõû|^“®†‡wxf­hk*"ª
?ºÌç
àqŽííøw·eÕ®«{Óî³êgW$£%}682ÓÄŒúÍ’pšSE„fp½Ëˆ¨¬öëôÀ6ÿý#ýºélœ68e­ŒT‚ÉÈc#AYƒ›ùõ¾FH‰Dñr°FxÃ×kqÿèŸä­Làî—ºAØK­û'Dh£sßÄõqo+"éßûÇý£gGŽ¡±->3>±ßÞ$açŸ†Fk:Ž¯kŠ]^´xk¥Âš½€µ¨dí[ÏiÆi.R{PØƒµÞ(WHã¶3Ù9íY-´Z®ùÖýÞ_D¾ý§åÚo pMƒvEx‹‘œšº®Ø‚¨àÉë	M±9r¢$H¶7ÈàÝ22¹IlÚRoÝa°¦áÍ±Ÿò¬fÂŸKáÖˆ»%ÚqJŒF0µð¸¦Š5f_éÉP@Z3ÈMÏ¬‡µ/«Y£·Ò®'¨VÛSÈþtzŒÂâX#¾‰8×²ø16K7¨Ó¥Ã¢`ÍÂd5¯¬/I3ÖÎ…ú´hò¨4Z×è¯–3)ÍüÖìT‘I	’¸˜Ô¥L.Žf–V	tDký™Dzpêð”hb0×ÅÄ`-­ÉŒõx¾õð:¶ôk«?ûdíáÚÝ×–o~ö€ø\¾¥…Ð»Þ{¯¯9f¼vœÈ¹à„LÂˆÓDi‘xØ¬”Î¢•‹i`N µ¨JíÄ¬¨n¢ ÊGÄYŠX3ÎÿÏÞÙþÄu¦i~þÕh¾Œd£d%²ü%Ø–UŽºP•*rÇTBSD˜.›†É‡Ñd('vñKÜ'0jÓ›¦»C)Íˆ¨Dš—68k‹ž`™àÙ™Fv--TŠ=DŠeíÆÃ¶6Z­´¿ë~Îã‡r9éùq×9çyÎ9eÀyá©ß¹îûº¯P¬¦mö³Ùß¢—M`„(£ˆ ±L1ÀÏTk¨ÆAŒÆõnhKuÊ±_¯8ÛÙC¥7Æý	|>keçRˆ5ö»•R¥j¶túÆàÕŽý•ÝÕa
Ö0Kó3WfægË];v?žØU¤Öõu­ú’ÁšYAj€Ö‚²&Z[–ä¦¨¶›±ß»øsX-¤AªdÍ)k~Ö¼®é¥;qæq`Mœ¦lHy'2mxô·Ó^M\6ÞÛ‚p–M·qì•˜–Ép?‘æg††ÙùZ"‘oÏi-È&kjÓI%·ÈX²6.m­AÁ¢Ÿ5O7æÆÆR#¥Ò•»+K¥ÔÈÊ×ß€k(l+ªù¢«éíÛ~}ÅÇßjÃ	píÍ_üÙÏÓ=Ã´ùtòÚO7zT$C2Øátµÿ‘qxuÿø«Ûµ6GZ#ÆûúZÆÉƒll?îVþÙ0O?~÷ÍwßýÖF~d5k®-6‰,QO5šÚž««Ç”û(Hd62›Ž®Y)ÚÑ«W6ÁT„¹)kLê›6ëžÍÖÔ^Í±Ú·D²­ÑÁZ/ó„lË+m’D»…IlÈh‰¶vXÍERT`­ªhí…Ëöù†¸áZ­=/ZC\{PˆAÐféósŸ7ì×-¾kïîÖY"Ÿ?Ø!s‘öæöŽ6‰i’ÓZ,hP`µ{B6Fk¯„‰_Ç/zX³>Ù‘¤ŠÔÈtQWÈÔ»ø*¨iMX”ô@·ÿ*Z»¸ï›¦¬R©L„ÊZµÈ5$RcwIŠcÚ•8tÆœÃ46¡œ×Õ	ÞÐ¾Ðâ*•µàö
èªkÖxû{#ÇŽé›_¿N™Zk«uÄnþÛæë—ä!‚ÜvfH­À€5½iJT4D¸¶ØÂ5Û§fÃ7­Â5Œxn}ˆVÙB¤ñÚ-±ÖFŸ[¬j×$»Á%.EÐŒ =­Q³§ù°š5¶WÀ5çÛ•­9wneM)¾â(4f›™-zJá%7î!ü1•å‡µÄ­­	Õ<¯ù¸l´æ€-X÷¿5V«TÖ*IM×­?8´ö„XmíÙm|#5Ç~6z'ä•¬¦¬ñ©i·W•²F¸ëÚMY«¦´J­mëã““ Úä–Y…kÞ¿?'9‹ºéÇ0zw˜–vúºÌÈŽŒKQìJ¾{c(Žñ?¾E…qÿÇ‡k;já‹NN³°ce­óÎÃpYœ¥"WëaÍò¹Ž??};3¹l{gAH÷
Öu9’:”æA²=Ï©Î©ígÈR»°Åy&©ùÅùréËÿyk¢µõû$BÂ5ïâïr!½Ë0´ö‹g^Sí5_±ž÷ßÿÇÃÃïƒlÃ==ƒÁ)$Â´*>«jc 0Lóá0-ä>¾Ÿš Íå>ÞÕˆ™ùÒLù¿M|¶¼<;ŒYr#®ýb2ŠÖ”™LéùgÝ.ÏjDÃ ì@7ón@“È‘³7–¢›žè3m²çŽ½üÓÅÿU‹PžMµá«Õ¾-òÂÓgAÎ”iM31QV¡Ù'Ó³Å]ÀZˆ®P²æ‡.o)<‹ÂD5Î"e­ÈF,cÝ/Z[þ‹ÿòg›±›±ßGX#Æ¦B—µ””5å¤xe?Øb¶ªª6Ü>V'µPªŸ*«•,‡kH6ÛÖÖ‹€†¼–É¶AfíV	žhkÓiK>ÙÊ%êçÈJ±¤|±xJhkjI‡ä;imQãµÅjÝrŠ¤ëÚXÃµyÊÁïÎ¦Fn¬ë¥Û¿C_ûÝÊmŸ¼¢ö-×('z úÚÇ»êßø¾['²·‡“¿…¦€;ó¬F÷üòÕ¾N»s>›¿Ø¼îlQð…æº?Þ¾½ÿc‡%¢5'¯±ðœëþ·~Áš¡‹VÙRø]2Ë•Õ=«·®Þ<uÿ*g\ºz¬þÔÉc ›‘ÉÐÔcOÂjàX€51š/[#Cvi"r\CÚÃ°ÆI˜çf¼ìºsà×€­‘B4øÍØÊµvÁš½!ä=šçã££6VS<Í?ûÓhŠúbgé¼ö ÖŠE®Ÿ+ÊÄ@Ÿ&øWlÝ°s@=^”öP9‡¦f°F0!Ä¦È‰-Àš¥¬¾‰B5%2šŒæi)sm
”5•±½EÍÖ.ßí¬kÐš¥EîÃ½ÿçUÊšÖ^«)ªúA›¢·ƒd”£ÔÄ9¶ùÈ[¬UÚúŸ’'¤C;4±Ñ±S_V¬=ÕtÃ£šÿîGí;óýdÜ˜³Ñg×þî	j¸ 2ä5:ªuÁj£¼çÌÓ##Õ\·µ*X{Ï¾vˆ «T+kÖˆ§@µmp?½Ö<®Zón†M‚5híú³¬9;H>’$H3ï'NûŠµH[ã-„ˆí„	s]4OLÏN>Œiîè45Þg´¦2
/o0RéyÙXM»À-(kfÝÿ0¬ÿg'u¼þø6à´ëYƒµm*ç›œTÕ·`¸ÝÛž Ö|ŒXÍZEäûHí!Ps_eíé‡y-Hk[¶˜ŒWSeYÅjd'¢ÑB×zH{ˆ+(_³H†ibOG3@%—ÜÞ»ôùÓRÏ¼d%®y6ù\”†pÓ¥A›Ÿib5UYt¬Ø,º›–kÎŠ	¡lžòCãSµ³!Œ§hÛÜ;×É‚”h»x|¼Î(5_¹”\õt${ºÊó§NÍÝù#EÂwWþ×ŠHí…kØBþîw¾G¶2ëÉµ5ÄB=‹³6Ù„Ü!XVƒ1Âs ­ŠÎ< FSH§™(õÎ;jAR[±LŒÐúš…‚íJ©85_ÂXcbYî× 1=.#«uÛ¬ÁEdÚ¥Ø…®†„6@P«&zü –"8NÅXuóÙ\¢ÆXPŠµû'š6ú%Oáû¿Å²²5Í']³ÀšbvçDé26ç/ Ú‰qì²9—ÁZ—¨†ä{6ZHê·Ø½MXÛŒÍØŒï'¬MIYsæ"‚5óQÔ
Ñ‚o?'1×¬´Ž!‘iGËöfT¿¦R5igÙöó}…º4\ÏäH.:’j‰”DOÀ)!2Ÿ&«§Aéj9KrÖÈ¼ Ó,¬H­Ð_ˆÃnÃ×Çb=òñHL^›Yø¢”š]ÁeäÄµ¥RIe+¼B­A…3äÛ<}ó…wimÎ²ôÉþ¯¶áS"/ïgOlGu¬?~dÛ¶ýÇ/úu«¯x¸{çÀ»ko*ïÏÁÚ¿ýÐÁÚ‰×ÿUEâjŠMä´•YËœ¿¼:CS-¼ÓWï#©ÑYí>Ó¿sõêÍ›÷NÕ·:Èƒ|®:è\}¤ŽÖÐšš”©yó–FŒîÖ*aÍš¬…³¢MòZž­ñÁea™#²­y€I}²jvÕ¢Ñ9‘“×R©eƒµÓ"U`ÍB ûöY”¶èÊ®â	ÁÉ¯{©ŸWA·ŒÁúÎ@ýÖ€ÅˆÐB"d“÷TpbÂG‰cÄimœ©Â’-’?%0óekÒÚäHÂÛ£öÚkô§þù·)kÁ¼Ÿ­ªfM°†~Æ!hkØ0rÊÆ¬Ež¦¦ñ’½ÿlFÎ8+È£f°ê÷(e¼ˆ*‘«‚*jÖ¬ÃQdßáÃgÆH­»þ^ý$FN„	†@G)|¨lXŠœ<yééQ)k"5ãl'V5Yc÷ó‡¬)£šµ(ìY{vô)LûõŒzJs‡(–ÜìRÖø!NT¥A¾îFœ¿ˆ½œ¿Èël.ò¿ŸÐ‡5`­:óQÐT9Ñb£‚vpòíç‡V­]•²vY›³ƒ¬.Z³×gÊšZèŒÍ¹fOòo‚fOHXÃ©’Háªîéç¼ÎŒðÊš½ˆPµ„5›pîÍ†± ¥=:¶ÖD²·:\±«#‘ð¾é%EÖ$`™@ÅS¨i\HáðNez®Ä-±jCÏ§‹'N+À1¯¬U™ÁžPKübq¬Ægí¶Ô(8ºg‚;ˆ`6âÒ Y=Häˆ$]¢a @—ÀøþØzd(ŒÆ81¨_ò\ë=?×“ëïëM+¿£—0³F¾PWC–—†¡¡9Ö;wþýjùË?®€jÀÚ×„‰kÖþ•ÿÍiä,ñœ!ˆ€m06¨¡;fœ¶+pZ(D«Æ3´ÀhÓ‚ž¦¸ý·jÁúQf(l’ÔfJ3äÎOsve¶{¹<]š-•gµâÄb7ˆ£í*N,«.4³ð×`8XM©‘ew]mÏð0^Ìé\¾€©§’[´ú§XðÛÐÖÎ÷z_‘à,’Í~g#ìOÕfg?¥P­$N›˜-_)¿¸ã£O/£y(sé•±ÙM¬13e÷F°ÆFˆÕLY»öç¶›±›ñ=„µ)5ÄžsáýEØµnV,œq9„9sHì“µx¦·=™È™ÿ…ÙL{"Þ{a.yaÎK÷k™ÞÈL>\V»õ&’òŒd©¥wK¾†zôŒ%a·Ô^Ê(kwåjÚS¹þBO
?ÿ“)5Ü)¯ÏÆ&–î®|M×µ•¯WJëßX“­¯×ÞñV#¯œf…½)PnðÂÖÖžœpMÉ¡óZµ¼ß`0^?øX=ù<Ïã™¶‹¯^lÚÃŸ
EÖ|ÅÎþî?üðì»gß„ÏþVûz’ñŠÖ¯×Yˆ²vÛ\±ˆ+B´²æÀÚ½{Ó\¸zìÔÕòÍ›«å;õ7½ŒFg5`­™SD¥P³&Z‹¬EZ8gÖâtoÂZ 5íîÔ_B¶B<ë 8:uƒ šP{ÞÊCjD#Ù êZÂe?†DÈ‡o‘×ŠË—OtN¨vƒMÙOìÈjoó¯‚^ÖŠ”¬ñ ˜é€µx‰[ø1øš‘ÒÈ¿lö°FèŠæf{	2º4+M3]±3oÚowì`ZšHN#jšÂ•ÀqeÍýy3Ž¼)kï@
¤¶AY«Ä5…SÖ8°{X;fjê¼†ÍÇvÝM6#GG6ÞDÕl74Qi©Ð1Ô¬B¬PÖÄj¢µú=/íÛ·ïå&1ÒèèÚ¨š‘ôxÝÎÀ6exÄfÖlnñM±}pRÙº BYSí×s‚5Ì¯ë'xö9ñZÀ´æ.¢MEk´Ç&-P^Xc÷#RÖ\€kzk\öÊAÍ¬³›¯âÛÙ `ªˆàä® s)ió9`mm-‡P´aƒN9šd…¤IzÁ¯?y®k]»¬™ÿ¤5
X›”¸6¹M]×\$þ˜^Y5kð™«Y«H´pÂ¯ÖvO>ýHëþKQ£5†šÄµïT×ÌuHYq~å²›¨Ÿ©¤ØX§þ½±tnXý0÷Hš0é½6™+Æ–åxÿù3ßkÄ‰Ç ´.LF0Žê¡k-Ò‰š:—…c5©hb,ÖJÔrª¥s®þ`\2Û–¥zºDH`LÅ²‹ÌtöÓX­¿·@nb'…Ñ¬O-˜Y1ð§Ó92'X`è5F†¤Ú†ÝÊÌß¿»°@áÚžÖ‚-$âÚ[Fk*ÁÅÇÿ™ßü†tÈ‰†Ý?ûøã+9ÍZ B#ÞBKó˜ò-¦×W(J³XâP.-Ý½5=?_.—Ê3ì¥å‘™µW+Q©¬5ì+ª*­¨º4“ÑÜ.7~gäÏ”²€aUÛñëvÛY“ü@g¬åýYJÿH‡4‹Íý‰tŸqû«ç{U§Xm;Ä,T²Zµäñ 8KÅâ,?*FÀ‡Â0¶JaÍ7ÕŒä‚îæ•µ®PµÆ¯?ß4ÙŒÍØŒïmäØ”@M/¯¬±ˆêèÂ»øFk±t"™M¤3-‰ô­@µ_Ñ‚,]»ý1G-[m¦M÷Ç±†DaËt²¨&òluYU´å“²i«aN(}¦F~uò…L©E%k…‚Ò2@6±©Rid¢¼^*ß]*\+_+-M——¾Yº²ôÍí©k·EkîyèWR×þé×{ÿã+çð» íÚ/~óÂk7Ä¨—’WkU¼ä57Ó'~ÜGš;.já2³þª'Œ…n•«¬aC	¸k®fíÜë,`Öf"+¯[:L#¯Í i·¦š®âÛ¿po_ýÍ›õ7Ë·îßÙ·Ïy?2:øø“Ô¬ùî×B¶¦Žƒ‡˜\ X-"¶ü~^YÃ^Ä@­±ñ`eµ„ÚMw4am:•D)¡´9^kl—¾•ßÚˆöýkÌ•èä´7óñoL<ŠÕÎ>·\W4LUKìç£4È³o«G8°¼R²Fð¹êvlË° cª/º%ß¡2¹fû¶ŽÖ¼¸¦^k&®šxXSÀg:õ¬&òª×	›¹D*Äj¾ûµyŒ˜kd{=yº--2öhi?FC´–c½NYQÙd-àJ o0‚juT¤¦‰Ä³£¾}œ&Xcæ‚lðÅjæ@boSÅ™Þˆ”2ÏLß¥¬UÖ¬™¬ÇY{ù?xyßK{F¯Óemí9¥Ñ“GÕ€ÍÅ¨LE\˜ÅÈc”
YÝg-T¬Ul¼6F¨YÕÖ®¯‰{([[“=õwÏ]>62Hy‚3oJø†£”5þù¯ª¹¢EVìœûÝKÊÚëB$„±QØJØtN¸ÎØÁ‚„tÈë¨€ÒÖŽü<Hk>*”5ßhM‰>emã7°ÍíÖ¶­a éZ	É*˜íîêº.ÿ~¢Ká”µP´¦Í‘¬f›‘›ï°¦ÁÞâÓ «U€Zíƒ³ùŒ7Èê°¼Ç4tV£ÌdBÕ8áÒš°Æk‰†n\û…Á†½u\ÈÊE6ŸHã›¾<˜_þèôG§o|åATÛ k`ôŠEòãƒ°¦1‘4e-D].C ké,C²–Z³µÍNb‹«\
h#‘>«ñŽ4×•Ä1G§5ú‚e3…Ì `'Ï…9C>eîké?™ëíƒÖæNÇjON•–Èƒ$¹ÞáÚ’­&Ö~Mbý+Vˆ§Ú5úÂxÇ‘NPŠZà´ iÏØÒ‚”öÞ{f÷è8M¯Û8PÓÎNdiÁY?N¯X‰°¶²¾ ­•¦K‹ä>ÎO—i­VZ,ÏÌÎÎO~ÒÝ=±§Á/56Ý%Ù?fµ´ŠÜ nÖYáZ–'§u¬ïheü‹n?žÏ§ß.L‹ÖÊ¾@…¬VjÓ3³%gÙ/#­'T¬½HFä§°QY²æBHHc×¨ƒŽRÖ˜¨+ö‹ÕŠ#®ÓÚ‡›°¶›±ß»øK	kS]#NTsÇºš¶ê ÕË1V D.Ëš—¥f;3GÏÌ¾¹¾Þ<Ö÷+`-Ñ–ÏÆ±[VÉZ/Æ"üR§Kv¢6Î“Óº•eY4QOÒ{55ÍNÈ½?–bƒÙ"Z#ÁÆ”µ~ˆsÝœ(Ý)­Ël¹O•W–îß_¸«…kef~/‡êè§ªÿ'–B–F|â)RþÊ›¿yñÅ½fåU®uz\«–×<°á×Ox«ÈmÛñmàÛFTËbAÿîÙ?°”KX·YÑÚÛø‹|Ä‡Î·Äjÿ,H«40UM³òÔÜvëþ—W§ÖÞØWßÔz×þ;ûÞØ‡äzÕ7A]“¤ÑÙ¡C‚µæ#2‰.ÉUÄõYk:ØØÜáH-ï!5VF£Õ—ä]6(ÍñãøbÞÖÚ¡9GMk‚³¤÷„äÍ–YÊ¼\[‡²fñ¶	kúGA{lXM=˜Nœ£Z<Èåîbñµ×k$ã¤Ô{—¶jÙD£dW—‰éÄ5Žæ×oÀ¦¿)ÐÆÑ)gì„ÊÏL7CàqSW™Ô¨±s¦i thj—Å?;¡”Å3GùúÁ2€JÖ¬r«ZYó#À>Œš ž3;~£5ô3Ô5êš´&´â?¥pÎìûOqG#ñŸ«Y{Gi'-Ž¶Öÿà¥}‡i ”È—ÿúÐskgð®E:VÕ|xiÍBõb•¤öèTP;yHZc“ºí€j£Û„=Ï)aÉê	GjÎ×Ãì²îw×‘ÙÐÅ Æ÷¼´ö#ÑÚ‹‹¨Íš/XÓ+ŠŸjüi!-¼ïãÆþjþ3ªƒkÊ¹ŒùveÍ+kâ´HYûì3Ik•°¦—;z¯“5(ÍJÖz†?¶í	q­„0u]¼Ø¼²2!+³ ÁYDºSÖª)­Úid·‘ZˆGÃÚ`-e-ÖRT–:ó¦)ý_š¦*U“à:UÆ¹L[ò;‚kçþ%—:wî£Ó®hMÖBÕ¦‡ÀË¥À=‘Sqc4ÈM£SØ\‡`ÌR8„WyœDd*’Åž°`~#ÜÈÁmøäÓñ¨Fp|ä¦½½V²ÖÙ?¼sï wææúÉºtAT—¡»³z‰õ~yªo¼÷ä@&9²:_^‚Ö¾à «-¬­9Ÿ=ù{‹Ù¯œ¦{¤~¥Q¼Æó¸×ª|+µ”¶Ïôz ¤±}õÎW_	n¼žFõõŠ7Q£ŠÓf¦mÑPusy}¥to~é	åš‘Î/LÏÎ—FŠ¿ýíòDL&‹Åšb{VÛÉØm”Æf½ÌÍ­?Ä‘e˜IÏ@Ãà@B°–ÕbœÞ>9ß—Hu²0ŽŸg½ëÍeûüãÉÊ>ØBµGÈj¾Ï h†ô¥ZóJtX“Xš¸d¤Æ¶1º¢cÌG„£{¡ÙÀ¬)|dZÃÕö/7Í 7c36ã{k–é"”¬Ålíô=G]/ÓI%šÈÑ?K¹6í3)À4yîÂ…þí¤˜t^ø•`­?¯Uçlk³–Ï¹,I“¶$×CÈ<ž²qJÓZŠkX§ùž&ŸÙQ´6 ?`hS2qbÅ¯Jc©ÙùÙ‰‘Ù•©Daé›õkå»ZËX8¬(}åÿ­±Ä~Åbèp2
ØáßÎ¾ùŒpm¯9/×æ*p­
Ø¬›g5Ij‡ëtÉû¼½i|£ª–|÷Ý×Þ=°ë5'¬Qº&B‘°öñ#,OÞQÖè_z¥¼z¯|kfõêê‘µ²%@ÞŸ¾w«þúÖCGÎ\ûò&ÞòøhXY ±Õ7™¨’5²-·ÖZ ´ƒÍû›MZó…j[’*£Ñœé‚®fÂfRÒþíTŠq4È(@5sI:óþ­ð\ÞÃ×uÊ‚ZÞÅß:ÀšBêÉ:ØÌçs|ˆYÆ`d™»›ú‰xŠÔ`-ÎÀ+5ì ¬5w3´æ›«	ÓÍ”¶hîQ\„ÛÆr¢kõãšºŒQN”¦>Ø]XKlkƒíO
±)X°öPÕZ°ƒ¯U*K¡fMÊ˜í:ˆŒØÖØœ¤d6ü1ô'¸)JÔr2§µ]œªPÖ*´µÊÔÃ@júî×œ¨'X;üƒ—^Ú©‹M{^zé¥—~éð1ÝUìS<žQ{Dk—Ü„?¯êÆ]eÞ_­¬OF5kÀšË(t!‡‘ëJ…t1*D³°!ÑÌö…Y8ømâ=”5ÑÚFeÍSš6'­Ey¸?˜´†²&½Ì`Íç²éË3z$«ÈŠô´fÎù£ÊÝd;òèš5ßÛÓšÞ2RÖBÉZøöþÈµmÒÕÔd†#ÛT¼¶{r·@Ê·YnÔ¤›‹‘Ù«y…XûQÔ–ØÖ8$€µ³èGYÃ¸ŸÀ¥?¶µfïÞxcG2¥6Ë[å	Ë5nAfG[+dc=¹îá<ÏknÐlQ´ö6Ïhª…µÓUÇS·£˜J¤#]pÌFx{ùXQí\ú³DbG:—Ìæ9µ†Ù\)Ä„l<<Œ«å§‰kÀZ<h†¹HÈÖŸÚ™ÊÉº’úh”¶ì\^£˜m|á†æË‹Cc¥òÈÈ"¥WlÐÚ•+ZJL\ó´æË ùU[“ØXTÞªyP³ToE%¦F¢ù°6×By†YQG‚J:¬D8]¿¢‰Š¿J×N.®›äDjddBÅjCd(tM,+]¡81Bä2òšjØ¸Lµà2BlÙv¥±H.ÃhdŒúG;ÞÛï9~<™d¥kiá©ä«}¹BŸ÷~ý®Vó¬Iƒ%%úGN(‹NPZWžýpÂ;‡(¼‚f—\áZh¼Æ9;3Mx¹7XÍšh-Ä%‚²µ¿Ø„µÍØŒÍø^*kcÎ	òi_²¦ÈÝæ/"®ìGnÄY$w¦@7+íîìÿûr<³¼@üªP—ƒÕ€µ>VA©¥QÖzÛÐÔ2IŒý“Àëròâ//æãiÌ¼(4ˆå´Sá–k8­!†‘Wª‡E€<›¸z³r®hì6#äØ‹Ìü×åôµõ/–æËÑjvk~±¼þ;píÁ
ûÕ'_E¸ö#ž‰ÂdCÒ*g‡ÇµLç£p×££þÐøƒÈñ¨Vè9ð.JÚk/¼yH¬ýZ39ÉõYûWµ{ÇÕ¬Q¬¶pujµ|mèê½¡«Wt”ÕÛ”|ÈkOž¡÷õ‘#O>Þ,Y­©•LHƒ³CÍ¨FÆGŽdãÈÀ¦¼GŒü[š:È"lj‚×ÖÒ:ƒÔ@8ÁZ>™D_cˆ|Cò²bÜÊl¿C5ùAÂKí	ÊÔ¸ä-¾°-™øX»LÔåËýÇGÆj|²ññ<qƒ8¡ Õø0‘KtÇ¶Æ¼Ö òY›d¨QÑ7mFX#M±ÙûAknÂ\3M5}á´qõ\ó¼ægâ¶zÞWßRïðŒÐAs?¹
Ö"}‹Ž ã½G½dà¶HX“y¨Y«¤¦)HID¡šÌEÄj
k¾bXàî@‡Î·ÿ#ïäŽ q¤RY³ïQ­¬yDM±ÍRxøåìÛwLA[ì–c­/Ãkû¬Y]ÜÔ®"8ú›À62DX	1åa­Ò³X5r¡WC$j££OHU~F­Ïš2ƒµÀjlÔ©ÉkßBPãømâ=3‚Tøš5¸¬²ÏšˆÙ%Azië~ˆ‡?ï9É£›fžØ*Â¥b*Gsòq:­ÉeäH@5½\ç~±Z”éµ59÷›Áˆç5ÏgzšK»Ã±ßXíñÇŸdxr’[k“l [¥²æYÍ+kïWhkÓlÔðhe­Ú²vfýµ“U¨VÂ4¬EâV­–”-½JÕø…ÜJ`ìî`M2|¹Í²­%¯Çrmù±Ó7.ß«ýÂ`íleÉš¥Ak—Š;Ò‚2ëc°¦pë¹–òð‘WŠd¡ µ<Ô©ÃR[º-OßlÞœËHì¡(ä7öñ<1ƒuÿ ¢ROn`¸¿½~Ëô«†-›¥V­7´44Œ­Þ_ëš_Ÿ¿6;²cq]©k+Ô­…*hô^Y›Ñˆ ”`=¡<™#…lá/XÙÓZá=´¾¤‹ðjÚÒ¤æ;©©‹±°²`Àƒ*5ûûNÎÏ P‘P86±86²8V78 [Çr1{” Æ@Dyµu\BZ«Û«ôÕÔ »ßP—Ã˜|0LÁA>Ó›ì=Ÿ«Iµ·…_‘-½Hkô¦¨V%«ý¢ºZM1mñéŒ~îéÅERÄõáÄ¥.$5OdaÓ©O|äå§\•k»Ämºþ0«×F6½û7c36ã{ª¬MyZÓ.Z9;ü$îƒTHWÂ–hË€[ßßS¸`¬†õ9ÀZ_ç…?ím£< /ùq-“Pqx\‹q:3þFKRko,%X“¬VCö‹ eý•&M1ƒ¨–"ê¸#X‹Å8hŸXA[‹Ì¯—{FÖ—¾^Z_ùâ‹»Ô\c­Xº=;QZ’¸fÅátŸþêS×¬<\âšj×~ñÂ×²Qãµ¾*^«&6¹›Õ‹V6×Óði–”žãÛOÀjr‰`í#ß[¬öÎ?Ü^ºkuÛhùÞQ•¯Ükž"¡åÚµ{Ó«$8îim>r¤YÒ„ê³ÑÜù›$¬1=H¥š09ƒ«uàÉG.œEœþÔÔŒ¦•¬y8kÔYb£²¦[¢´KˆÚRÖ˜¨'¶åAº ÖXnkº[>Jƒ¤œÉÃ!”Çê—w~þ“ÿ ¼²¦`p°æû¬XÞ…gt¶0|`o<Æ'û÷olÌ¶g¶ä¯­Ñ•¯g‘PºÆˆô%mÍ
Ô"HBBÚ8›Y08ÉM#ç&¨IYãLÛE;—9dÇ‘&®DâZÆžzV©6×ÂñmÊšxÈ¶Þ¦Ÿ†Ø2a$€4Á™JÛNžäÀæ.Žx3H¾lÖþ¤²6"P;#XÛƒ’vxOË±&²hIl9ü²X;¼C1f×†ÖF°îwÚšáZ0©,ZÛÈjÌ¥¬¹4È¿ú«çÖè†ýN#‚µ'Õ¼šæŽ¦MÖ8^“ÕHHƒDZóÂ¸ætµÓŽ×Öt‰l¾ÏÚ¥ÑÝ(k¡÷µ‡5^œ{€òáG±¹¾CH¢ZY#.[¤^^Y3`3]M¤fÊZp—	–žÖ¼Ê‡œfk?Ä6É—¥¹¶m·5ÛG~­UhkÊ"eYÍóš$5¼µJYú]ª4ð/š®6ÙeÃ–ïêµF(R°Æ³Æd}Mlò„Lë1¿B“Ö¿N-Ö¶&d¤ñðå_þÙýyâí·=¬eM>°ÐZ]±Kô%VK$2¡šhÍ£šÆèEû/Ä3%<*÷ÿ`‚#rš<ü¹¨ 	²ó%¹Ök±Be­…¥';7—†XH¦ïïëì?ß7W(tzXÃ2†ÑÈÉ©SG3c¥Û‹¥Ù‰òÝ•ÛK_|sw	Ä ÖDk´ð4‹aÜG_¡ïNIê
ãz’<oþIA7ô¬VéîèÂ#Zˆé( 21š0M"Ìf¦I–_-k2=³²0SžÇQ±4¿zíüóçgËe)k¬Úµµ»à/vÌœD88¦œÖÕ¥Lk!5¶Á†]{wÉroâ’±È ™ Ãýs…dÛù,é¶³öf±Óâ¡¤×ÔˆGøõït¡ZÍËj¬Íà{ŒãñüDéÓY  ÒH‚ta§Õí¯=µ1ŠËx9jÓ£² åÜß%;H³ñþŠåk›°¶›±ßCX#¼o?þ"V²“´Fxk‘ZÙ@Ê_$‘àÚA¨íÍ\&û çƒŸŠÕ.ôÄ!5	kÛç.üô§?íäIpŽ§˜ª9ˆ'©ÐÓÏvµ»ÉHXÒRu(4<àëÖ
ÌišCd³Vªf@DWáÎiñöÌH,6ôÇù±žôØÊÒúú×ß|}ÿ«¯—ÔÑôÖ:~Xeœü£G¢$—°rˆ×ÞB×zå•þã'Ï?O’â»/¼¸Sµk¹gHpMñ+›G¶ð"ªIÍ¡š•X7<£
5ö³jB5Š³7¬½%V‹”µkGW§¯N­M­ž:2zouõ^ë>Î›·:‰U¿¤4“ÌZ[›€ L5k\†à€5$4o+‚¤ÆÇ¬fÒ$kMÍ*ær^Þ°ŸtH‚óûƒ°;jÉFóñoÃ+Ä¬Ûó"9¹‡´`Z2ÝöCJ ]‚ŒIŒ§?Rkñâ¹W–ë>ÿÈ‘šï³„µðqf¬áãnõé ¼}ïúØ”–¿[g[žŸ¸YIÈ|Tã5çå.Â94ÖÒÞBÔÅÂ6Ñš¨­E…k^Y3 ‹ŒûÇ}ú£G"”ãÕ“ÍÍÍ‘Ïÿ¾‹ír<zçõ
5«"2$A>¢fíŸ…i’ÓU³ž9ã¸ä¥µoÜ<sìèÐ)‘šhQ ÷åJYÓ‡­û‡¦NÈi‡EkMýòž£G›ZÕZÎgÚß˜ŠëF‡†"amJ…ŽÕ6Ô¬Uáj8|ªŒÏý•hMÍÕDkÄèê‰ä4{ù,È)“¼.)tM~V³ÆW•´f¢™Õ¬IÔkŽÖ¸„5sƒä¯ðt»/³‚¸J±Ë#[%X]ß†ÞõeÖª¤5‡iâ5/¬!«1JXûÌY÷[xL´¨TÖtö,þñÍÔ{Ò›a^ß2ùØ6ékÞc¤RYãe Ò Åi!’w|·²6Yôü&B£ÝZ í;<FéTI^¿x{øÿ1CúVñð^.Ä”NGšotÖDD"Ë/‡ÓÅ,ö"—ÇŠé±Ó¸àòÿ»`­²dø\kººPÖÀ¬Zƒµt”]¡GzÑAt5Þ¢
¶l[†‘«kÉdÁx-§UÈ­Rq[#HÉëÉJZÃ#R(î˜Œ`*œÚ5L>d_¡Å¨§Ÿyç\ßù¾^nf3Ô®Q’5žœ ]óµÅÛ+¥béþ+Šë·f‰êÖ"XûÇ×?:}â†žüI`SaòYr¼q¹¢ÚØØ„‘ZµÃc5¢Ah„5¶»ÒXÌ–Ö¹¹ÀS¼ER	ÉœÆÿqjh¶¼8uïÞïÿÏø]+ÍP4ðôÔX¼RÕÓìÈ¹ï¨FÔípww4¤jãŠ†”îaà©¡©q…§fsçµÉã}Éäñ_ïìlÖ´úqcµZhƒdµèo\ÑÃ›}a¡D¢æ|ùÖÂ<ÊšÅÄ§³0šoÚ¯=Ô©éªç3ØM‚-$J¬¶ËW­]ÒK¼¶éÝ¿›±ßOXÔˆÕœdèSÁZš›ŠdB‹§"ïù ¿§6ÞÓ¬AkÛ·›®¦ ÖæäÙ•É\á ÎIÐ?<>Î*ŠÉxKR= jy©h¼«I‘çëåÈq!¯“,Éx-°¦¦/2†,ôH_ûlv,5p²Ÿyldæ6¾_Ü™ýfi¾kw¯|ñÍRy½¼>­âpƒµÛÂ5n½åÌ—õâ‡2ò®Å‡õ½:ƒºÖwÁëkÕq>ø?>Œj©ÉŒ`íMK‚t¨¦ÎbÊ‚Ä_D´ªk¥k«åÕ«WG›î­N]½r¯µµþ;÷VB<#Zåñh²¶¯‰345x‚Sa×˜¦¯™¤ÖÅl„áš::Z<¬IJÖ˜4*ì|cñZônñYK~ÖäÉE%G‚gÈjIÿQ¬Qà´?_ã#©ÎÚ€6ÓªØyùòòe`í†G5Ü¨r‚'ë¸‹Œw7Ä;(õÏ5È²›ÿ’ðŸ$“©}9šb5a&†)¼ 5Éˆ{\£5³©oby)ÆUÂ{^€[=¡¢5Ò8Âv¹!°s»k.’æ"ÔtÑg­²dWp‚üÓÊÚÑaÑc„)k&§‰ÕkGƒdäÝ/w{ÞÁoÿ}¨Y«VÖBTY÷=ƒ·#?Áž} .¢­K¡IÀÚáÃ­JË<3:¨Mñ.˜-JƒÜh7òaµ²Vm´PõáF°f´Æàhí‰59AZxy-ô[ã`ºWTºF4«:;ñÞ{Ô¬y^«pƒ$¼²fb›	kìNYoj{Bòce£j7s§%'xaÕ¨=Å^Y³Ò ÁµÊ‚5íàÊšFª»à2âÏº.	Öä2­Eoš||òÉÇ¶<Ž'¤"Õ‚¤³ë~ƒ¶åj†sÊšŸzD{r÷amËdíî­úÍñÝ­±õp,¾E~±ôVñ„<{U;LáZƒüóÍ™D÷ìn:lW>vú•büRª‹Ç2kgƒ°¶±fÍü`wÔÒP;j®Fzý†^kqçÚŸÆÐ
åLP–‘†¦IºÎWä^¤}OŽzšçƒ™úùÎ^ô3ô5õZ›nîïEHËeÆ_=Ÿ“²Ö;7×ÇAenýýº+N|Ë-.Ž]›?9e	›‘Ð\{eþS¤æ\c-Ñ¯8üüo@nœêÐr¢86ÖU€Ú'ejžÑB ¥¹Ã4F÷KeXí‹•û_áøh’Úâü•éÕ{óXsÌOÅé±3j:2gž]Ö(ìN?=&å¬;´SÛÉæ8õÌjÖêvÜ3›®ÁZ`0lúÛ@£r 3í…¹ã}Ù>ìD
½¯žOç 5³©D5[ö²ßb,\ Ù®8k;êæg/Õ¡‰AaÀÚ'FeÞº?"°@avÓ5°Ýy¿ŽðÖ…¤7ï_..sÙ´ƒÜŒÍØŒï#¬iq%k(k©Ý¾d-Ný¬–fÜo>]Z"~L$¬¬Õ$¬áÞß®È^FÚ…gÙ$M³1ç{õ—jPÚÖÞB÷µ½{Y|µh\ô4Í©xAOh	eæqÎ-â±Ñ“Š‚ö9,8°”—ÖK##·¿YºoC¿!ð¹²²B‘öÊÌÌz¤®YéÚë2_fIuFþ<–kì	}×¯Ÿwñ(V;œú}u!Z´ž¡¶€fCDk?ù¡JÖˆ×_‡Õ,ò«‰¡ù…«÷VOµÞ›¦¡¬Ê´}o¼Ñz¨ž‘+ñYëžÖ=~lm…Ì¼­°ÖÁÄÕk*VCRÛƒsÂÇ–ý[°ZóA.	èaÂBêYB~ýI÷ÏÚr·2‡Øè°&@k"yÈ©MðE›³ñ÷âZ"kµ×íÄãñ'ªÄ—#œ™‹<_ùh½‹Ï4cÅåˆ;±›*Œb””tök<éîlW¸fÁš)€ûó9¥6„‹üEÔËš“qO_VÂ¦[–É=çÙÏ¦w¸öÙûÅlÕž®	Ó‚³3$Êºß¢šÖ\§µ .UR“7÷„bk¢¯cÎKDÈ¦ûøøcÜ?tFo"FŸ=z“ÙÿF]±Ý¹ö'”µj3Èw´=Ó5vòÔRa5È¾ùŒÖZø¯[e6"X{v÷Ø%Þ2$—€ÍuX³ÝÇ¯ý—¬"5ÂûösVÖ¤¨±ûÀ±cmC5fLƒÈÆa‡Qk\îBY3i0YÍp<ãå•µŠÈÐgMÚ »h"4¡E ¨Š+~¦Ÿ„,È¿¬ÉåQºšG5{	Ó´ù–Ø!²²?@…ää(ÓKt[ã»ØÝê‹ýä“Ü›œÔ;žœô#PíK_´&%M¨bûº5Ýß ¬=ýhS‘­„5¾YÆ¬Æ±
Öb1Anˆmµqë¤5dpêÞj(.®¡acæÿ³w¾?qiš–vÿ€ý¶’P+ò—X@U¶R¤JÕ¬+4T¬)Z˜Æ&xF£h2Už`WˆtÇ=†Ž:íîõ0v€%9th!zÁ`-¢Ž'Ý“˜„µd•‚m,ÇVÜAµFÚë~Þóú¸\Îô÷ˆçœóž÷œ*~qêÔuîç¹Ÿ>uc³wèˆSÜ‡®†dòÁ…—Á"3H=‡a¢LZ¼å="¦¤&wc5öÜÖŒÑx¯•Ùi¨‘‚cÁ[pC1ÂŒ1’Ø¤ôÌL*¥’¶áFÁZƒ<»ºú{z²S¹®†tÿT.—Ifshj]ð”–Ke»à¶©®¡ŠMQšk^¾¿|i¼mášzw¾ÿG“Ö`5•@Ÿ¤y'ÁeZÛÏ•äè›·‚µÃ è®¸ôÇ3tNÑEI*1#ð°ÍÇ6\¼ÇýÏÆ§Õ™{qrrå»`œuþzþÜt/šZ~r BŽÅH† çap|ran¨âx65¸­”ZoÂ‘™ó1á¬’Ñ1œÁZ{W$ÒOwtd*úúöOÆz0éÃöX6Çæ©Õ™lëxúi&ÝÏû7ã¯ÐXäåcÓÔØÔÝŸœËçÉ¤VÍ lSû$Êš¦!¤‡—Û\­šÐÌÓZÐ[Ê›¥A2(ÄjÄ¬­ÅZ¬Å÷ÖÆ‡Ö<ª•mÚ¶-‚d«yÈdC,jN#î†f¢¯ÿ­þþ·~n´æÍ`Ö‡åFUtããO3ì¶dY,g‹'rÊ‚L‘É;~„"ƒh&+dÊf¢ê­ê„ PêADMYKã©ˆôDz?`»vm 2”ÿöËW–óùüÊ¿d¹¦æ4”i¸²òáû6£-pí½É÷þ@›ì3û?ù‚ ×^{í7{­tÍ«kDM£ôµïŒÎ@Sknó¢ZxÑ¢ÆÝH„&HhÍXí(áÌ ÀÚåñ<v®wßõ‹Ô_‡Æ`µ­uu’ŠvÒU­ŽH0‹þÝõZÍ¼á ¹».sôfµlµµ(CT´1¯i©çúlÖÒB#µúZgèkqk§V%ZM[k¦øÄ¢Z‰œpæ•3eAÊq$TÖ`5"öàaá t*h{g^ÕøC¿y”?5ÅøÃâZByP|ZÛ¼eïP,1”ŒÈˆ2§ÀLMµ5óiDUk×¨oDl¥ÄŽ]u¯´Æ2­‘}bµášæ ×„¹*5…
Ô†}ú£RJ{0]}M¹;]^ÕÜLk2×gíoMëY]ÅÚ©¬R˜‘ˆ‹¬‰“tR¦ýÄPïÐO8Ø‹¿™’pÝà úšik¤D¢®ÿeeÍãZHkV³6¨žØ»¶–CkûªöÔ j5ûköXðÊDEƒ‡`¶AsùJÕÄ7!¬ùŸúÊZ0ÑZøpnòS|Fk>žr\V ®…§ÉbÜ!,#ae(ê³æQpÉ¨¯Û
«ùš5`Í¡Î©ix(
,@D‰Ld/r‹žp/¾øÂš‡5ã5mÇ>Hûul¤FHY+‚µÐ¸ß‰|Pþ"Ô!¬°†·È­gž¹ÅƒíZPÇØ+\ÍšßhÍHí´æ8 hMPÇ8$PÓ·xÄXd„•M±þ‰1´µõÏ–®Q-L„,†5©hë™—°³½5Q‰(S:Z&y=•Ô-h®ÄÁZéúX´ý
Â™§5±÷j
Í á´w…kûÛ½¡)A0-óÂZT¬f„‰É
’Ó¦¸©×š=µx k‘4åÎº‹¦ì{ŠÒ†™®©4ïÔ}Xõã…ëašVÈ÷mÈjY¬Œs]==Séƒ£—vœ^¤5ÌÇÇ§¯‘Pÿþ‡Î]XÐ¿¸s’î+k/Ak¼ÆÃ‚4Píðá³¯ž•ÞfØbñÈÅ«L¢òÏçÏ˜¦MÈi³Þ_½tqyiª{‰œÇEÁ»óùååü¹å{×ó÷¼7W1r51¦ºÁ’ŽŒO
ÞŽ÷4ð&-X³‚5íO¿vÎ2<U¹…s:ÊPŽ6ÓÙóöé¾Í‰„¾ðis<îèä<ýjšcìÜ§,Dµ0²Ø¯Ÿ×ë´C÷òìžÝ´iîüèæ2ÓÌ\<¶RÍ–öÈPÉmUÿLæ•Pœû÷m´6Árõ*æýÿsÖÖb-ÖâûÿÍÁÚƒ$H§¬m‹(Òãšïˆ­p:'9Ášî¬!©jŠ·¨ IIi5è†Î’Í'@µèmˆlee™†L$Jy(×àl*†4SÍ=S}Ž(ÊT…éˆ‹ºï;–_™X¸†Óòò½ñcsÌè“ã®ºÔr­]!ÃÔ5Œ“ùHwæŒZ ý¿üÙ^{I'“q­¹}ÍÅp1¦…šZ*Õèú7î¢eKök&­ù4ÈOX{‰+üIçùÛ{—dñ•ïí½~)Ÿ¿Wµ³ngùç ZüDªvþd+‚¬&jÛXo¥T‚²k¯Vgfýk4EO{¢¶¦ŠhY×‚µ!ÕÕ "T=‹ISÕŒ	kq)i¢5üg.*Gó°â3Y¬|Mhã_ªË/ ö£Í%¥°ÚÙ£°«ê:ÖˆÖ¸­|!óî¯¬$s…ÎØÑXu3Î¨«ëZš§Úšš©Sc€·Z×aÙÌë €Ðúz9B6–WÕTg¢3ó|deÎ§ 2‹áÀçÑ÷bÑôˆ¹BÒ¯´/áu¹/ÀÇC“¦#7€µÇ¶ƒBy©¨fíÐc5‹ÀZlCSNÛAPBàÆC{LS˜¨æGÆ¯¿\³fËÃ¸6ÉØä¹­&¬íªÚ·sútŽäNÁšøä?íÈ³;Ž<kE°æI­Ø»ŸA›+úM€µ1ÀæE—É@˜š‡^X£VlRQÁšÉk£ šÜE4Õ´Éþ1tƒ|)Èƒ,Ö^Ç`…N¤ÆúPûë`¦)?ØY’ƒ¸UÎ>…
¬Æ¬=šyÁ– %¶’ ÝÂ*]Í–Ö	º©[naÙÿÌ,ÐæaM­Ý0ïŸeæjÕH‰dÏ,€5†ÕL\³LH¬„7AUÓŠ²ö]±ÃkÀšs	C…5P-	Š$6‹{û]_[Í4ÙÚÌ[€ÁZ©(!ÚÑÖ“#ûùÿÛ`M!N{´ýØDûˆñZû&ášï±Lá5±(•lŽÈkÉàzä¹¹‹¤Ó‘®"›"ÜèAOk”7Cc­¡,3•“ˆÖ•Iâ]œÙ’™ê²$ÊÜpg®²c©¨HgÑßR½“Ó—û»>[ bíã{ÙÉÅkÊ¤w§µî$ 5ÞÁÍØXS?˜³àÚ'Œ‡_Ö¼O¿¹lÜñ¨¦àæá9ãµ€Ñäðˆ–¦Ùòýe@Ý×««_¯,¯Þüæ6Ê7¾Æt¼žÎë‹–¿>ôÙôôåË«—÷ŽNr'Q3­Ä†Þ¹‘‘¡ã=‘X‰u%uÍ­Ëœ¬ÆàÃ0®Òt7lEìL–Çùù§§º»\Y±Xé´5]ì‚f¢A±v··)FµbH½X¨4°KPy¥çk†hXAnòyœä0À²ÐR+ƒk¯ækÖ*íb«©¬9aÍªÖÖ­­ÅZ¬Å÷Ö†kFj	Dµ²Ú6ßñÆWøö¤.õ$¨ýN–JK÷½«Akaü¼ëço½õVW®‘¥å¬nËÉ;2…‚’K™7dÒòUZSqK}TŸeÂD’ñéwQJ£%øE³iÒ0#‘ ×&"ëÇ.O“þxþj+½Gª×Íá8òñ—++¢5JV¸Eùáyk>ò¥³Ç®`çÅ§ˆŸýÌœFBu-H‡¬é|LÔxP3RE5j@žôìÌÒ×¬QÓ´Yã/V[äâuŽ«×¥C;i¨V§a'zšÒë(´RÚv’Û„mR{ 6Ô4Ÿ	i@{5WR×ª² ‰F¯a­¯m­Gt3ÛÇøºÇrZ‰V£®fik!šø<ÆbÌo$¾ž9áz³5=Ò»ìµ£‡+KKJG6•`w–[Î?ªþ0øãxXSSì+/ë¾úPâÊ…ÌÕ{Ñt[S[W[ºÈ¦¶bZ‹YôËr³LNÚ:ÕTÕè!R#„f€šG5—É¨0·¡™V-ä7—2I™Z}kK¹ËÙøêúú#‡þ ü8éùHk×´KÄ8LF@GìØˆìƒÀß\©Ú±C‡zéQ6L3X“¶¦·V³Æw+k¨f}Ö 3*Ö µªÏË_ÙªW»¶ï£TÕ¨`'¢¬é77HÃvÀåCg¾£ÍZll6/–ÖLYƒÑ
âEiH¶øðÊ›“>.ƒ‘ýüé½{¿CDâUçé6la}È`äÝv´«gQ¯vÃ<5Í>9«yõGkÊƒ|êÅ§foñÛ?5‚š“Öœda$ƒKƒüÝ`ía1ï!½R*Õn!®mÄ¾_}±¡µ±YçÝÿ ÖÆôô‚4H6‡k*[{G¬æ+Ö
š¬yeí»mûÙ%O<.o‹’£,ižUÖNQ'Í—0·ÄG˜¡X‹E™r>º%Â„¬½|…ð¬¦(RÖÊ6‘9RZ:2aššX-æq°k^‚¢Y”5•¸ECb‹È’•´I%QœR`X#¸Öæ\»2ÀZg`‹¤Û¦ðI‘ú¨÷ûTc®9KJGª)[QIE[¶¯+=ty<ÛÕ?4´ºòõÁÞ…ÁÚ"°æ»­©Ýš`í$ïå¯Ó¼[Hñš‚’bµ×Ö
 	]V–ÏùÆÐ"´eqj×–ïß_¾¸²rmyéæÍÕÕÕåk@ÛÍùùCÓ@šhmzúÒêÜÁ¹ütïÒêøè(5kø»Ð§95Ø›º:¢aÑ©(+ÝäFÊÊkl®jMPSÑÓ×tXã¤%J¦QÖæçg:ŸîÌeWds‚µ@Y®&ÔlQ­HUóÅçÖ\l!ÛBež{“yþzDcpáÁËS=¢µùfjFi6†´f‹™Aj!‚¢µ‰5X[‹µX‹ï%¬)Ì¹_‘`!?ñÙBaÍe¥Ä›R1Cru$2ÉXíYÖÀ5Ì»’ooô·¥Ô5+E Ý45³qC“OÌ)È(V*gf+Ý1GNkåc@°–¡éiµQ,RÓ±9ªž|ü£ÆjÑ¡…k‹Cë×Í‘³òí·×èj:7NßµüÀ~þËç/ÇÍëÚòÜø5.× 5Ë…ô>þ/QºB¨íÚ~ó+rIœºòšg6­þ¸-5#5D5jÊí£¡Ð±3û¨HÒT¶áÛ¬	Öî\Ô®_?Ÿ¿t£|W9ªZÝ†'wnÇWdçîº:46’!éªVnŠ±Ä³ÝÆ'?¬™d­YAÄ¦žÙ"9„4Á ª©ÕZ‹••AÚº—çÜß¢DÈ>ó±F“ŸH,ÞkÎà®U¶ÝQZùÉÑe%W]­$ÁIi?@Y£¹Ý›òt	•5hm?ñî•‘ôÐ{/V{íµ*Ò)ÚÞÉ©«þ&¤49Ç~-Õ*ÉÓ	TFQX¹^ª^¬œDø+i^%}¬¦Ædµa6!}¤öÌm®UÏÖ™š––açÛ_¾gŸ°ùnÅé+kÚŠ¹é¤Œ;ŒÖ´¬æõ5Áš‹A¹øS¥f¬qÊžr„^kG$À-=ÒûñÊÚ£ÂÚÉ;´gýÀÚs¼’çžî9º­Ñ»êÈàßm—ž¦¶fíÀÚ µbk½
ºc÷ªGöÀ„‡5OjŒÅÊZQ¤/Ÿ;É:Ž>õ€ÖPÙ^|Ê¤´Bƒ‘ðX5küd‘UpNn#û²æqp-táQ­°ÏÚ“O	•Ô;,O¬bÚì_QÒšm®®n–ÎÙÙÇZ÷;]MëU­À`X+ìˆí‚©kÆýä­±YbÎ"³Hkt[£Aö,bÚ˜XMÑ~Í€8µ0’0T{'ð‚dKÖBëþmÿ…ºö¬#³â(†5Zª©Nû~ø,A¨å%Àæ6Os,šÉ””pbK)§-¢¨f#Wk×Bç~¼û#ñ‰ýï¢ªµ_ÖÖ’!¬Eðû Ò*ZkàŠÑÊ¦#IiŠ6(±ÑEn˜ÔÆÆælÙ¦L…imi,úñëÏd²l[
‚KD€5•Që»¦1ßÈä¦‰þt„¶mRÆ¶´ºtoúÎ;×Vÿˆ´æ•5ÑšÓÖèÝ¹ÿÌ«û´öú™W5xùG5ö|OðrÞbÁJÕHg” †œ¶¼¼LÉò2§V®­¬¬p¨qéö½¯oÞ]åÜòêÝÛ·o\ž¾>7·ºÔyðàSÝç–——æo_OÌ&¢IrÅ‡‡[ã}‰‘¡’²'¶”%3‰Š0¼¦&«‘¾Ó3S$I6lËvtvžŸïêï8Õ˜íKT´kÝ]::­OM[§µójd}†žÕÌU$Hö¤Ù@ûä¹/ÎÑRga$„4¿÷ÎCÿJ‡ešéðÁðfSó1im$&,W×`m-Öb-¾gñß5$A&\¹ƒX-„5çŽDµ&¹*¸D“—ØóÆýÉÌ[Ðš"¤5	k<Dí‰(©Æ&Œ söé¹i­cØ¬CJ£qPÍ`ú“û ­E¸dbm$©S‹ªv‚{‰rÿÒ½[_J1pgaAw{ç¦æ>^™Ê<]rùÚ—çæ††æ–¹R|ñõáù¡¹s47ÕÍ>Ñšášhíu2ñÞTìüò—¿ya/F„Âµ¬çµ©)!›fÏiÔDj^T.ZûÕyçðëŸÈ[ÄóÚOU®…c˜µYSÀjÔ©]¼·qðú×É}„Ñ¶ïÞpk_9ZZùîŠí?Ù¾{ãvk6–oßP»{7k€[¹	k-µÀZUN\ƒÎà3¬F ÓÖê4gÚï;­¹Iœ\B6/y÷ã IFSÌN)q¾b-Æj»F,”ÖØ*Vk2Z3¢+”Ö.”EK.œ=ûò•—k‡/à®"\³@kdA5;¶HhíÝ¦oknljM‘õØšÄNtoiŠ5ë]›5m’¥ 	Ö8Æ³ßÇp¹AœX‹íä+,çÂ¥DÚÈmŽéLM¦ _Oó¶Â¦Ø}Öl!tºXYó°vˆÍHÌò™®±²1co®þ¦¨™˜¦'îÁuÄ`M¨†ÇµÂ(rÖöízÓÇ]Ï}¾çÐ¾­Ï?ÿÜ+hlØöïÙýw½«Ê`MÒÚ‘k®jmDC[ÃuM°þìÂŸÚö{d,Ök¨G/:\{‘¿ÁËØÂy0,n“ºæÎ8ë~tµ¿jÖXÞ^Äh¹éj^Yó°†?ÉS·°+ ùZ±Á±°HíQXsªZèïÏo~klð‘4Èc>RÚ›°Í£›IkàšÁZqÓmÿsn=ÉFå#ná1b{Îð³gµÓóÔr5kZ
ûb¿c~ÚX¨`ã¬_–¼²ö]”6÷•n[÷8TÓ†ìDl¤¤*k [„º/D«†¦ÞÄ¹Û¦’µ÷nJ¯¼<R¬}§²F–äH,2²É¨Yæ#e³(ÃÉß—§=¸•ªJ-Ý@kl™§Ô
Ã‘¤{˜ô|Õ:óïÓÍ¹?I•mNdsp[.7Ì†¨ÖCÝófi®†?	§ù&Q¬7WÐd,Úå§²øBvâ<ÒKéÚä°¶ð!Žï[„Ú´öÒK"³ýjû'aMÔâhMV—?|ùÌ{göðžèåüÂùühFä2%h-¯~½|iiéþòêg÷W–W–ï_ºtÿþýÕ¥%Û*BÛÊýÕ¯ï/Ý84…¼¶ÔKwŸ:5èòÒÍùoîf#—§?Ë’Ñ€EÊpWFåž6w›lVÖ9ßïí KP"0óßûöLWÅñãÇ=e‘žŒÁˆþ]33Sm´2@o$ÒòÂ´x.Õ¼d€jagµÂÖjÕ|¨Ÿ÷ùÑööÑ9|,FGŠaÍ+j
fÕÌ–ÿÑÎØ:rùLX¬†­òªMØºÖhm-Öb-¾—°Ö¬9]T+tƒŒê¢JsRBÚY±dä®äñ7ú£}o­AiZˆ€Õú"ÉTsnx¸©4#Ò·¿¢~Yæ"%"#X-Ç½lËe­×ªúø”ð`k%Ö´TAÖ†lÒª×¬%††.G¢1>ŠE8ZÒ{2:¸ðå—Ó‘hú`þã/Î]üêÛ/¿ýã"eâ}^¸˜„ÆºÎ’
I&äOùÚ*÷nr¹ü@û­Þê‚Ù|èS ‘õ fÙFj–Ý`ÄÉZ{DóIŸþV;*!‰,È@Z[Dò»xiðÈ¥‹-•Û•©J´åk7î®ªß°±N–#<i0î®­«—ÁU6ÍLIb.0ã°z©5-5lÈk„+V«µfà¯oç\Ü$µ˜€,oimÖ(Uc#×	ÍªUWÇ]9ZÌšá	Ó0üÀÒßYAê›¦eeìG.œuÎÖg?¹`¬´ºP3"gÝòÊÈëÕlB¸VY™hUQek))kMdÆBkðXMk5D¦WÅ5m{#a/?À5ÍÊ	W´&‘­œg®NŠv€Ñy@JTós6¦¼”zÙBb¹ßh•ka¤”0ÒëKÜT¨¬ÑÎòÃ;DÃçlUkÀ˜`à<O°GÃÎÙƒ¸êóÅ¡u‘‡¾~j‘¤§µCûª(QÅŠUÏ=‡ª¶kûÎWžÿ‡W^ÙúÊV`M`2dPÑ+ ´èõÎý¦A"² +›f…ÊZ¨-`Õqë–×°íŸE;óT¦Õo>t²]fkŽÖNêÏï‹ÖX˜MÖ¬fÍ)kV³æFö¿K"äÈÇËjŒ~çÝEBgýÔw‡ƒ·þþÖŽ¬æ…5¯¬-±móI¾ÏÚcaM§üo€²£‘ý(h#-Rycø%þ¹ð°V¨¬¹„ÇwÖ`5/«±ÚNÏ1XÃÿÿQNó‘JÇ4{¼²ÆVz;€×HŠL¬Wb$€ |ÈDO–DvœžÄkz“‘¸¦&¥ò°YL+ªYCU+3.#…M2’Ö´³Y’®ž¾8Í&fq¤Uf–‚×’Üß£ã¦Ui%zà{Or²Ê¥’©mÑDE&Õ»ÈaÞŸÃ½s$Ó ·uÉ…$GÐfS:Áç~„&D¸\'A[7ÿ«f¦Q½ß'ccáC¬ÐšJq…ÕÎòOÒwÁ®¹—Ž…Õ•þù·˜„ä§·@îû²*Óòó«_Ÿ»¿´º|éæÝ%¨ìù7—XWWV¨Z3^ƒÞVow¸}iyõF	õÞä+vÏÌ3¦^¾‡i*•Œ€›Q-ÙÐÜqú¸ûNÏwgZ‰@A3ÿ©™Ó™žîŽ¾DâxY'€Öÿ4/6Û8“ÊvÏÌtâ—)Rëî`e/F³Ló]_5wå+D5ßYÍ³´†‰åÂyå{ž[˜Àùqtnzrn’u¢ˆÕÂŽÛ4“˜Æ`€æV[ØØ÷ÀmkaPÇ·kk±kñ½ƒµq'ªi5RBVcKÖˆRÙõsó’K(=J…jÄìS]}ý©Ì ™×ÖXŽµHY¬QÙhÍ*¦XCÓhV–[<UýÅc\ãôÅiˆ–‰Õ¶Ð3§4jÖ"të‡Á²ø^EŽÜEŒéÑ¡Úã¤[//¯LlÈu1OÏµ/é”CAÛG_œ¾·pžºf©.cÅ¹•ýŒ¦k®tÍxÓÿF¿á1-µ€Ô
Dµ3‚5Hí¨`Í{AœÀdÃFhËÍgÐ_œß±c|°nÏõü¥=Øˆ<åU»7î®{rãFÛvˆbëöu?ùß X›5‡Â’–Z$µ jè¬µ0Ñ`3âvæÇÑ¢VkAklv±uñjœùsC^·xä¥æ¶ë±`„™ÌÆSš8+ƒ×š€;L"­º-«qXkÂ9B>#•˜AÒ…HÚÚOÝ}u2D9õÀn¤odÿHk¶o¨¯Ïsb-úµ%¬)¨¶‹âPÀ‘Ï)ï‘æ°106ún V¹¥=Ú‘!n&¦¹$HÛˆÐÍ‹;¨o=BÓ?’'÷©ãOûycã¾.¬×*tîg!
Ìû6ÊÀa"ÀÚPïž#C®%¶™ŽX—jfz”¸ËgD—C9ú¨²V˜hQ”	*ê[iÓO?D¤º¬íÛþÏpÛ¾Cƒâ|,à#×d —ð¬†¾å•5‰…¨æÁ•å±ÊÚIÃÕ§n$n¡´¦µPe”<±Ic±4Ô¬97H¡šÂúb‡Â‡n±'¬!ÓùH¶Gô%a¹3aÁšÁa¿
 ¹ãÙPY3aÅ[ŒHXó-ÖUT3^¬jk¾·~¤öž|bÝ†±‚5r!±û pAeó¨(kŸYÍZh0BÉšyŒøÅ¡š7ö7qmÈ@Ë–¢ØæN¿?®XXc-Š˜Ik%I;pµkxxð¶¯VÙñ¬so¯èÑ[Bµ¹ŒPÄVczZ!¾SYC{ÒÀÄ&ÁÚÈ•vÞI˜1³±0“ŽÆ•Æ±ZÌÓšÝ1ŒÅÍ³Ÿãd–Fk„»ù×˜KGb¸%ª)öÉ‘Hk™M™©©,’WÚÉ¤2ÈDSxAò¥e	aÒÚüÒ}bØ`­û®#+wV>^\\œ¥rV3“Ÿ	ùïêÛyìU±Ú±€ÕÈ±7\ÛÏk—ãðÏ~6úÛß.üîß&—óù‹+«ø…|_½¹š_½}úöí›KK7:Ì|sûëeÉk««wçï.-!¬}sà ,—¿to°ãÔÌÌ7óÌÏwt·9t¢;Õtzæé’T[kŒ²ÈêôT­Óú¦žNoéÉ˜ÊvÜüEØ÷EÊ*èyÝ—ÈøÓiº«m>òÍÀ~'œšïŽO:•Kfòé8@l`Íõ­)ÊÍúAµÐXÄt5mííæ¢r~Ÿ~sÛ@2*l,œµ“U:CF·þlÞ5RššD6Ÿì'XÖºb¯ÅZ¬Å÷Ö<®ÒÕ"²æ#µ~7Y×e-â³#7'¨X{§¡­ï7k><«¡¬QÄ-:klŠ"ÍÅš‡;Nä(Y¶^ÙHj\Ž£z¤,ÙÚ ¬G™hÄ`È¦,ºÒ	 –Áµ1VÓv³!Jâ¦Xmt”1C—éƒãù|oª—¦6ÑZô+¯­¬|ñÇÎçu1	ŒF~íÅ5îÿZáš£5p-àµ7ÞH¶(2ŽÓ<¨…¤æ®Y\ª~ý½×µÃèH„©HbrÊqr1?Þ;¸¡NÔ`4’!‰*¶ªò»7äBÛ7ì.ß*&«WÃk'­ÉcZ«¯­ñEkUõx?¶¬cP©Ú-5µLkš 4'¨­{¤TXƒ«t+1ÍY‡´ˆ¾8-¤fŒègØ3r€ª¬!¨Ù#¤B¶VsØÜV¶=Bk›7—–P¶&Ÿ´J„ÆOŽ2îçïáZ)¨Y©L¤ûÿÏ•«=Ù~o‰9Ç£˜÷76ÇãS¹MÉxKsµuŒãÔ[/±Ñm&ª™¾†ExT3…®‰Ð4÷%k(lLl¦gËQ²¾fxøóÜç6mØŽn÷¹SÖX‹”5 A›âq.ú'{¬9Tóâô¤Ah„³ˆXmë	Gô¨ëœ-‘ xêÚÑ×_²)î³6~äÈªUk{Èª¥hmUqU¯ÖžS§5 ì´LÃÞÁ ò]ÛÛ½äãó = ²Yhð°6KKì ðVt€V”Ix³~›è—Ù>an¢5«\óÊšr=®q KÖïºžq…}¯•ypã'ùðÖÚcBâÍ*g‹”µ°ÓšKƒ,t1\û7ká^SkÜŒ›}J´öÌ“Õôì! k·/‘ÁÈ#ÊrÊšTµ>6‡in©ÙâÒ ×¯{¬ic-U$ë_®Z“”–tÙD ²!»«ÍZ‚f¸'âƒ¿eK=>îrª‘²^kODËŽÑÚÃšsí/TÖjŠÿîR§G†€5×[ì¤›%EdÀZê¨9)ò\(b¾PGòµdZ¼ÝQ¤t-Ò¡½5"åšShf	"û*zÒª!´5¶µç8vÝÙœG?4G°FˆòæF'¦ïL*òý…ÖþUíÖþó´vöß%ªg_R©ÚëAJà{×¬Åä…þàjåÈÜätž´ËŸ}öÿV—ï¶JÒãg7ß>MÜ½{X›¹}ŸäÇ›”ª˜¹ûÍ77—îvÌÌß½}wéúø	’ ïÞüæTMÍÆf”ÃÌfæ»éöWƒ•©ÎnØ«­§§¿÷ÐhÛ¬ÖsÚ"¥©µ¥§úÞ2mó3=‰HåiP8u@cçÓÝOwœ:@`Úß‘K6›Š°3Î÷¸XU#<ª™£ˆ¥±LNŸÿ‚5kÎV¤}t`³ÇÃZ»Í€…–ýÚë0d³JÈà[­sü÷qmBû5X[‹µX‹ï¯²Ö©ÁiÛÜÌÂ(únØÜZÞ­%ŽÿêWïô@6ÐZ®9V{çxVuj*T‹Éë«þW*ÿ&2žRxË®ÓÑÞV‡ÀõYàÁDVÞ#ƒ§MGË2Í$•™LG9–©4ƒ"+a20ÀáÐÊÂ`ïÜôåñÞ¡ÞËùk_~ûí—_~»r=Ñzsâ3òþù…Ãµ:ùkÑš»ª ×<¯iÏiÔ
IÍ]´FK_?|ø×ÿx˜<È£òaýè<1Z;Kü£ÑÚ/DŒ—7ÐÑví|r·ðå'¶K:«Õc‰²V_oæ"T£Õ/uu´s¾…åòƒTÔ@qµOÔWÕ’‰Ö„{=a‰‘ô$sÙÚ‡aB[Œ`Â´8ƒ*ÐŒÎÌß‚cM;)lf(bwPÆQ{¢ÖÊ.Tk#ºß|!úšË‚<jÅ{t1xóè§”ð9XëÉ6ô\ùà÷ýìÅ`„#ø±µ-»>.çí\FàCq§½"êï•F¤ê]­ÊEÔ
[O`™¥:rlný®DåËp³:ÖµbG2ü¹`­¶v#µ€ˆtÃÞºVð¸V¤¬Ö¬ù¦Ø. 1ÑX k7|£5ô®^
Ôªª>çaÎÁNVÓÆ¯$eÉ¡¡	`íƒÕŠx-D¤"ƒ‘Þg÷à¹«Ql¸•,H”5î	üÃÖç_yî¹];ÁBô6Î‘„æ~UŒEBX›}Ö`-”Ö´)BT,VÖBÏÃšÏ‚TäSEOì€ƒBZ}J<ôç² ‘ÖkžÕPÔe9«w	­ûùrkˆ]Ô›3nÝò”Nø#$µYI}ƒc³Ï„#ÇiP¥#¬Æ.LƒdƒÔ@µGjÖÂ9ÃÃÊÚ’ÚÆÙ·f7˜+ä­±€Õ )Ï– ãSÖ
Ã!myCch”­ù>k(káT´†sÿwE‘q4˜P¦&zËd 7Rïä,‚Ùb–*0åDbé¬ŠÒ<0Ò‰^={Ø³ššb3xaJÖL[o—:—j!¬i¿‰Bº\ú“\
bÌÖ`µ¨¢¡÷$N·‘!È•*N¥4øqâD[OW_E¢¯gs&›I·åš°šÅš¸mªTK¾‹h­Ç:d#Å©7vJJRïÂâä¦²ž¡ÉÅ•Å;8B~hÒÚŸƒ<HfžT·5´5\!ÓaÚµ³XŒ@/Á@qùé›º¶ ._îm åðàê*)K7]³›Óoß½Û-ií&¢ÚéÓ¼Mº®uçNÏÏÐñìÆ ªØöÍ©áÆ'šRéØð)Ù:;›‘Áº»g¾â±®Ó§ûû2±š?uTTk?G[#ÞžŸ9M½Ze†DÇÓ*Äî‚ì®1 Õ=Ý××í
Õ€A	S(ª®"Å¨f¬æUµÀAƒ5› ÖF7¬ÍjçC¬V¨¬fmÔÜ{Êf•
æáÓõ$z°¹<È¿ÕœÈ¶¦¬­ÅZ¬Å÷WYÛ¦HlÚÆ¢K£¶ÒÖ¸d;H¶ ×Zbïoöî=þÎ;…´ÆV¬½Ó—ã^¥’ãQT´’Ô‰á8h€žFýePª#o¥µƒµÁ®ŽcÝáÆm‚ï1IJøáhfYî¢ÆÈ½QS4‡i>2)ÛhM#™qšÑ,æ‡’s‹‹ÑmsyŠ>þâ«üõóAÕóÊòâ"FîMÿâ?ÿéá J…D]ƒ×¶|'‘ 0Í8-µÔÎºhMþúÕ£g_Ö ³ÀR¬æ`ë8—u•¬ü§k_|”²ni;uªZÕÎÝvï6¿þ:eAZw5º`×íÞ°ñ‰ÚÚêëH¬$0Ð°:5¹õÓ{ÝºZšª1i¬b_c¬æp-^][]-óþ0b1¡š“ÓÄâÕZâ˜ÊšVsÑ<§9x†;r¥o>#Ö:=úVþÿñf0ò¿@×£Ÿýñ§ŸªQ6U|û¯ôõe³#ÇŽý¾oäê…Ž÷OIC[ßw<ç³ Vßlýª›$2Õuõ63Xc„ÖDn,@ì	{‡b˜'¨ñµEØ2ÓÞŽ[êª¶75+;—çÖì.oÙP¿â5”µÇöó²š;.–ÖNš°¶tðÐ‘#Ön¼´^ƒØtF#½C|§µ–9¸®Ù£EÊZ‘¶V„jÄè¶g÷ìC‹•í!	ò¯ÿêïêùMvR²öŠ©lU;QÚˆA$¬^×fíA$#°VLˆ!©…%k“ªm!¬9]æØ˜ößzQíË”fH¯±Ùü.LƒtÓö	+;ã•5k¡´æPÍ±šª…ikPO«±¹YxÎ“šÂ?éÉY~é]k(Ö\¤—Ö¤¬Þ
R´Fd‘ÁÈcaM]Ö€5•«í Öžš\ÉR€Å3ggõ¤1ƒ5oß/N3dµ Íš÷ô Z÷YŒ'D¢¬ýeX“a•`¾5vÉzƒµLü‰’Äq”ðžêÖl?Å[¢ëy¦†õ¼c>ÒNß•´åAâÞo°öæO½¸Â ¶Ÿa‚{V§f¸v[3XãJãÍEjã42Z<KÞ£{ a›FÉzTc¤¸L*‰¤¹H¥é£Ö}¢£#—Tf»”™Î¶7äñòçÿø&ì…#Jºk]SÝ¹6`mª§‡üûhthròjñ»Å?þðÎäûþY¸fÒÚ"´&VcER3*#¬=‹§5x­ ò_þïß¼€çp&‡/ûû!¶ƒSoqóæÛ2ÊŸ¹}»cfj:qciéöŒ«Q£KuÃ0]ªÚquÏÿ	|›™é¨9ð§?Í+Ö:œúÓÌÛ=Ñx.§üÇLE¥2#OëáÓÙD–/îì:`œ6ÃsõE3§OócºÒ)µTã!Q-åMEÅ¨V`é¯°ÖŽà#HMý	ÎÍäóù93Œûµ/"6Æ ½,4 œiÎØ.Vû¬æ´6¬¿§ÚÁàbâ¬uÅ^‹µX‹ï¬mÓ²-"e-‘hîf†°&VBj [&!÷î­xçW!­)<¬ÁjÇûrhŒˆ»bÑV:d·rÐ@yÇ85ÇSPB´µVÃ“™=Ï]²#¾&ÅÕ4
¿‰Ö²–â¢Ö¤úÍd¨£ÓMÝŒžr(½3‰Œ~õÕÀÜôÂÜø\þâ×Vpƒ\Y¾öÑÊòõñé•ÅÅß^ž»ó‹;§«¨“µÇ5.[.„8ÍƒZ¦4Õ™üí«F%ÚÞüqœñè%5kwò÷Æw¤íf÷$Ûv$5XmÇxŠÈüqC]9ç‘Í6
×žØX[WûD$¡Ò,õUCQ«£|Mv"µÔ£ñ_{Ë†T¨36¹Èjt&+„56kŒ.(A³ži6¯«¡ÅYÕ.»º%sPYÌ=ßóœ›ë)%>âdªJX;Läk/5Xûr%òÓO¬}úGùë>våêÕ¾ìÈ«¯_=þÂ…}xö§š(R«Ø»Å2™j,Õ—ÆuëøþL9”¨&f#’ Ù\¤Ê%žIFc#À-‚óØH:ËG	kâ_ætùs¤&Ñ­¥¦ÔC«Ôw¦ÑZ®ª®
Gl¬ûCN	}û1ì·¥XYóÜ4©‚µ}b27ŠØÒ,lCïDoï¶CŸ‡a–þ7Âšµbj*îE*k£ÏbËß¨
9„Æçµ¿FÝvþ•`íy”µíXBŸï§4^óI€šv‚µÂ~Ü…ÞýŒÁ¬¸+¶¯YsIÏ ¨Ýº588«ƒÙÖ<š…{F?—ë¾‡5±aUkÞ‹S¤f¨Æ˜A†%kÄ»íŽÖXC¢@Occam‡ò ™ßzák@-× Ú­–i‹Ë‚4^+VÖ?×Nhƒ’ÿ¸mLÖýÖ‡mÌ=EÜ¶±³š5ÖG…5ˆMKÈk~q­Öþ¬q~ÄÌû7~'¬±9S‘X½,³{t±õQq[ûß¸ý3=‘ÈºZÌy“’Üt¯ŒwzÙ·4èÆ[oñˆgpŠIk$…û‹@rJ„äãõïõ¼Ó@k–*lÑ°Íg8¡ÍZ2ÝêË¦ƒû†´ÂÎ5«;L*²9Ó•*õ#"»a¼¬r]X‡d»¦2›(\Ëµ‘…Â`M®SÜ4ª'›ƒPÚrÝÙŠ	•[6@<2z‡Vk“C“ïÿùÿ³wþ1qg¾_iÿÞW²-Ë²ñO,°‘…­ÌÜQ.²U3 «C5žŽMq«U´Æµ6$qÎÅ•ºN®KÛŠ]Ù¤Tâò#ÍŠªu€°YÅmYGZ"÷®÷&ÚüÐªUûÇý|Ÿ÷¼¼Ì°Ù¿#žsÎ{Þsf`€8sæs¾Ïó}Dk¬¢5«[ûúù®®[ö+émžŸw^»Ë…e]^¸67wáô¡ê~Y
/~»5‹jeîÉWµÿ"ý€8«N$AþŸUkc°•?<—Mð€#´Úëß_gµ«ø?êOÅÚe*²›J5d;¤;Ð:ÕêšÊ4æö]EmÀÏx‹®¼ôÕR‹D5Ÿÿ(R³Ø¥ÕŒÕŒÔ°RY¥ÃÚ=€mE˜‹ÓÓ÷VÆEe>˜–äB†œ1xN³#Fí"imÝZä€ŽÑÓìø ÿÅÚ,þzÖ¶b+¶âjÖÊÍÒ]h%1á‘»<rLù8}V´&Tó¬FôÁj d[šÇ:dï—mæPzY*™íh!72Z£‚§¬í€Þ¨÷WlÕÉ%ø¬°[úY¦ Wæ|”«&+ƒ 	,dÖ$ôÞÑÕº}´¦š_fåÓ‰Å{«SÛ®þŠlÿþ6Í±ß~ûÓOWîÏÿxíµ»‹‹+V·v+¢µ—ÍD7@×Šã§% 4µ`[|÷ÊÙ®n—õ·Œ¦ÆJ\6X»,V“ðÝw®Ü˜™‚ºN*v‚ggx÷ïás~\ÝáÃ¶«¨2Xk¬;\µsWNÖý'‘}8Ë9Á;5‡ËëõËŒärœ¬U;l¦Ùú<ÊZX+Ú\l§ˆ-žsÄ•H€mÖØ; ±(BËlžb·¹€.´Ð–Pº£üv7w¥/ð›CjÄ×ìÞ:æ˜/Ö>é^fé=ktt®÷ŸÆ,]8olåÖvkÆ|Fb`z³ÕßAjÛã WdÝÏ¨dÕ¡¥CÚÆè¬ %ãZ4‹Õö‚2‡k”¯¬1ha…h¯G{%NÖ![VÕ&S]ÞTmÖÎú•#­E=Ï7B¤¼E4„Ê5!›C5…¤¶Sµc<+êÆ&£H½”µRëþÍ”5Öá^Œ`<Œ”vXi Û7¾­=u¸Žò5`Í¢ÇìE¦.©½Z€5Å}·E/ˆkZ‹5¾ «7HÅ¤=û3yôäÂÁc_þÊ^}™ö³ŽŒ„+'›&¨YÒšeAÚÖ%Pv±NjÕˆwn¶I)ÔªÀ–yX‹æn`”DµÀº/µÁ_ÄIkŽÖ 4oÜOxZû¥-Ÿééa-Lô[>rÖý““Ôÿmˆ`-Œx‘k²‚\·ƒ4„3L‹–Qçù¸™qè´¶µ„ÔØ<¬q×l»&)ÝKÄ÷Å¹G²Õ´'¶%RVj¼½>×Ò„],\—Œì¶™¯¦íÉ|ÛyW¶ö´jÄ3­M·--‰Ë­É·|ô=Ë¢p6#ìÊ¤eX˜Ç2I–'4%¨¢.Ïd[5„ CýÀš¼éV_ëõë³¸?¶ã"Õ­ñ+3òOgú˜Ö×ô÷ãk\ÀøB6¼HbéÖLÿµJYDöŒÎP´ö`Íüû}·µ`ßßõõîóÖÀµ[Àòš¯‹¸ÖÛû=bþéÁhûà‡/ÑÌsÖ9rá?	)ÁM
:Q£±if0õÖs Ö"ë´öëïŸÛ~5‚µNª×äÂó®þ€4ÑÝ:¯6Óâ¦’8Õ¾34ËH kß¹_cV¢/Ñk0¸‰ÔªyûÇRQM×½b·þyo~bxbU«Ã‹+ó$$®Îˆ§ŠII ±…Aˆ¦ESzªq-Ö¦mî°MdGxiMÀ6½k[±[ñ„5Þê,	²še7‹»
Õ´Z`ÓX~h¹‘›V›4òd*rºòZ 5"$A¾úêX­¥¥£Cîé<N\h\…ftÔâ¢«ÞØ»-`ËTÇ’
vÅ†Ò”~™ hß/ZÁ`ì•OHá]ŸlSÖbµ|f Ö¸¸¯~<3ujê__šZQÃìýôþýOÿˆ+äG¿XCYûñW_³‹éŒ]Me3/=ŒÚ5âK?u!H¦±á¾0÷„7Ú»fYpGµík/c/â©p2|ðëš™éi8¢-<jØ¬1m 6¦d<66ˆÝ€5ýEeœ‘õãó‡êOÖâ=RÕS¾V¿kW¼®*·¯¾>WG f‚5Ð­¹
ÆåÄ-0ÉåòŸIkÕ¶'…fë°æþ˜	fæëïa- p‡ÐAµ$ì+¬yÏ‘£—»Ô$Ûa5U©}­	…a/Kl“Øx¶»—üÇýƒ–jvlËgûÈêÔ€µšk´,)qLE .ƒ5ðSðeì¦²!	/®é¸V±kjºÆINX<÷¿5ï©Ð¼B­ tPWÇPÑ\·Õõ [ÀZˆ¢.k¶–Ö¬±úšµƒ5Ü%BEYÍXß%*`ã“µR
¤=µ'kÅ¨fK1ª•âšÜ «c0¡*Ökã¸ùð·ÖÎŒ,|›…D>ÁÚ°õÂV0zX¯ì ªÙï]*¬ë~XäÑ³àb”öäW¤°{Œø#?µ•EºšHëæ¬ûÁµð×7#H7®k!r:"OÓ¨þBc°¹½jDkü°ˆ€dpÒÄÛ`í/«y?HW´V¤¬yaÍPÍ»ADGëÓ6ú¼µ\88²ðèÉ=“RÕ¨èÛ k‹Ü ¯j¦­‰ÖX˜QÅ[T³f#¥!Ùa²¬­l×>˜lumÖ 1¡[2ÁÝ²$w|T'Œàf7Æê·%xNæÉ<”çl5]°–Ëåx÷ÎjFÛ–¸³DÂs„jÑªXÖ¦—Î/IÖ¤Re¼‡‰”G5…v>d‰Óc‚©Kî°“6ÐkôêØ\´¶·cð¨‚5`Œû{­¸ówvö)/£PÍØ7‹Á•.J…Ž#í0n¶l»zµ£ éQGI^%´Ö?4õîÀè/gÆ‡WS¸­ýÉkk¾36ÿoß†Ö€5{ŸïÕ…†Ø¾¥g(^ãóÞ{¯Ìý¬Ëå‡/Ò­}ŽÖ:ÇÄHhlÖŒ£XX³Íb6ÓÃT¨fû´‡5Y8
»:³röÖˆ?üáT½U÷¥2³£¦ÕÔ¸çÃ{ÖôÚÊÜôíÁC6'§u¢ðégØ ©¹Jµ ªyT+QÕ"Hd5/©P[\¡«ÚâÄÄüÌÄÄÌêüÄÊ„ù‚„ÄG›„`D5??Ô³ÈÒÀ¬š(MWSH\ÛRÖ¶b+¶â‹
k¢5Œû¯¡›lÁš+º¿yˆ’ƒ5Õ˜U2ïæýT­•·Ó±šÁZ6«®¤chcª*PVZG–f¤ªÿÆúÆ(÷%){.¯ñ´<­Ì\â7]°X’+ œå-M„Ö„l)ËÖ#djØÊ%yñ_ÿøvK®ñƒß­¢¤‘÷ˆäïkkÿãí‡é‘ý6Ü?ýi)¸«ZSçfÒUh»ö=…MQjç‰›Jq¨Ý_¼ËUËâ.âšc5Ÿ
`­wtüÊ•‰‹öh` ¡AÖ"®tMuk°ò™<F µ:Vá[cR<Fê€‹ª*¬*®×åô9eM„¶ËhMÍÕësÂ3â¢"ª©áõ¶U-rIr[<Éˆ» ìŠÖˆ^ÑSÖa-¯•É&RÔdGI™ýk¢¦²»›6×BàgÓ«â³X~ù“O–Ÿéþ¤»wîÁ\ïÜµ¾þ°¡`Mƒ®1–¶²új`f„–C5„Ö×²ñ\sÕ˜º«ùtH”6?7qmŒ9ÃlàW”òhykVÛÆ«ÁÂÍ¹æëcdê«jå'yJ~Œ]R‚²f¼X­X‚²ö{PÕã#ƒÀÍikÓ×˜_m£ÊÌ¤5Gk—ÞÿÍÈÈûê³ö¿X>Ï_$ÏÖ«Ÿ9|‚WÑ«=¨ÑûÄáªª‡I‚ÝªzzŽóð:¬ñ£¦™âÎfù—žÑÂ®ôGÖ(UCL‘þÞg÷‚@G.JH­8ÒU¬M›&£V[÷î÷†‚4Â£š0^u?Á7ˆ éàÆÈf+›o•M0hæÎºŸ`/?ú³Ïn0Ô¼¿ˆ·ƒÔ¨¹xÍPM¬¦°Æê±¸ÛëÂGÒ·äÛ¿`mÖ&õEîìúWüð³•5’!5xµ¸bÍÃmŠmû¶…pß8šïšTÉZÙŽÏ³ÙžŠ%l²‹’µ°F"¤ÙÎ;N.ž¨¬Œ%
-9Ô¬ú¸¤6ëÒBäâùTbü™óË½ã5ÖBÅZx]:¯h‹7Å“ atoh£ÍH´ygHëðéR©@qDJZ.üÚ€µT´7Õlk"mrY{zv¶½²¿£“<ÈsµZcìÊÁÙBâf•F·^%_²:–OWWR”'X«iýùÅLåøøÌãµµ••™´ìûo\¹rëëBBktT
·¡–ÏßââcH&àšÉkº2|\;ú“Ÿ`Ë5˜i×ÈD™í$ %°Fü Dg§ÀM9‹-@-ƒ/‘9“Â´Á~lDHŸ´“„\øIé|ë×L¸ÓùÏøôô«³ýoa ªÖøØ GŸýèÓ7ˆjE^ýÅfý¯ß[%ýñÞÌ½×WæWÛ&VÙ˜˜˜X\öTFlk%ñM Q€æÝ!DoëO  8 æœ®fžLÖþò/¶b+¶b+¾°ÆU…üÇ#4¼>¼E¬Ù(E-–ÀÁß‚ÉéW.=ZyúU£5Q$—¤B>²–sí°ÇèU
¸eI†liÂ¼¿c,Ë…Z#b…V®´y]déÚÓTm˜˜„ò`eÉ&*0£
õ$±©®B~ÍqJ\ÏUßÿøßöäZþñãÅûÃ¹ß}ôð÷ÙKïü¬ööGk?‚Ö+OefÑ.¤7—\lKV1ýÇ-tòŠš’w,f6Šj\·nÜ½ûúëwð¦«šX;‹ÃH×Ä`m'\öh¤çä¥KB´ã¬¡p¦«›Õá4B2¤¤5Û“þ¨~ØuzHiV³–ÙöÕ×VQŸÆX¡H¢±~QŸ³?Hœ1—ßö™²šy ‹sð°ë„²<‘„Ÿ#XË'di²§'8ÊåAbdæ£,FÍÚåËænw/]^~zY†+‘åŠÅ²ÜûÉZšëíí«ìËŒ’>••Ã6a´v(%¬å¬™Œ°q ‰6
Ö²Í¹í9 jL°¦G‚¸Æ|imLSSÙ”8	©Fk~Æ)ûÒF• ’(ÙÌÞÊÖ²µ×CÛê”µ"9©¤Ë«w±¸Ü B2ž]§‰Ç4êÐëjð´ñ6ua£/¶sï—	†#S%V¥Y¬¶`»1|¦¹
-Mq/HZ«>|ø[lOýÝáÃ'š9m¹™„~
4Àa±‘6Ó¥nAYs+‹v%?‹ÇÕ¯(à3¤*LüQ¬íõ|æ#š±…Uú[Û±›7ì•Åk¼’ñšµ.C5ßf­XY»©h[(òa`~þÆi6sÌfËrAf(Ï>»€®ÖUÔhÕpÍ€Uœ”5Ëƒi¡tM;›0>z´ë˜Õ¤Ýl£líÉ;ŽÛ¹@‹9ÓyvAYó!éÌ™Œ8GH—þXT±jÖ&†\È0s¢N¢®mZa»	5j2‡’…ˆêÓX1-ÚÎû®n ¥óñznÙÔ£Þó‚°ÆôöùÞ,OgÆçB¤-¡dÍb	u-&F³6k16žÓŠ`-°ÓÔ² y²×Ü”Cßâ`-±;‘ª®Ö]Dil³;v¦;ÎuTúÛ³$>ö®>w•rµt¶Y%n}ý*·›T‰DÜ¬I5Au×Ä•5Õ••íèyÃ°Ú§gsŸOÊ¬á'Ì?9uZãÍ®’ËÜ›"–Ï÷âüû8êéºÄôž½ÜMö†píáÚµŒëx3ûÄåk„UŽ!yù ^ÓVÁñÖ[ÏCZ†bç¬í	§¢}Ÿ©÷"‘cÈ[ß®•nßîË	©vƒ"BöbB{EE§‚ºo÷EšZHüi‰¨Ìú«½þ«ß¾~mõõ_­Îß[™Ÿ^¤SÎÌÍáÝå7§½H‘µHQ´Ù¦V¯æ‘,Ô­m|ºÁš¦â\_ì¯Zä¬mÅVlÅ·fÍÃZ°¦ð”†«H‡l4ûTœSlÖ~ôpíÕW×imƒ®F¶
Îš²ÖbMRÚ²¬|:çt£´œÀ{¹Éü©|€ì\Â¦¸úK@Kæ3úÔÀ,æÜIÌÀ_¦Ñ\>nÌÇº¤úàÔÔâÇó©üÔý‘¦¦–ÚÆSï's§þc~àwo¿MZýÛóWþô§¿çÖçk÷gtÞ6-mÍWXp=õæe%/|ò#qgjÊ÷%ÞX½÷˜ÏŒ×®¼¬Ð÷ˆhí²E7~öÁògÖÐÔêÔä5Âjþ"LðòÃø‘›4¸:¶Ú†F\ Á5¦¤Au¹Æ*öÈi²~”'ä¶úæªF]¥!µxž}œ\È¤>^%?ƒÕX`1êÓò9¶¤YqzXãƒ—÷Œz±%âškd¤¦©†-ËÜ'>"ÅyV;PÛ1'3Hü»—ÅfH"àð7}Æ`mwÿ9ÌÛ
³ŠVX-NÕM &VkÌJ:3f3jc£éws3¸&/HßlÍH¸NŒ¹)i£fìï¥5¿³€ÑZ’õ9$º:÷$˜{–|€ ´<¬eÍÓ‚m%ÆBÍ¼&X3&ê9E˜xf°æÃ¦<qä”ag´v	mí3•5¢$²XYñé§L-‚5ì [œø†ÆoUD)6¬ûö;qMëg+kZC”¢Zøõ‹aM©mÇB_ìe­×€5ó£¤fâ·ÆjZª±ZÕ$¬¹%Ä„ìEÀ=}¿‹è¡éÿsÕ·Í‚–ÔÐšÁÚ#äÀG”µÞÀjÊƒÔbÓP³†®ÆJ<Ø˜bÍ6·›\@MÛIÒ]Žkhk˜øïôÏU´icjÖ~èý B4ç.âû=¦÷Yc+ kãz…ÉMYÕ‡—Öù=2€nÌ¸³Ugøÿ5Nsœë²­óÚZb*c§bÿòzÍÚg¾›.I)/#v€i©CˆÝ!œícS>ý×R…¦T¹kµF$ª[!–¢ãR¿†ýXj\µ.Ÿ™þ¡B?·ÕõúÜ[ð™êØ¨^ë;T9ÈU^\éÉêŒgWJ¶4UW¬õk¤q$†WÈ_›™á6Ÿ”µµ5ƒµ»¯Ý°¾Øv+J{f¹›4xgkº6xyí
²»@:.†kÿöo?¹ë'’fj–T-kb¨u^`=ç„0ƒ4ùDì% {¢SG(fî˜Qû_Ÿ{"ý„žŠ–Ö9ûùˆ¸2¸PG˜š×éAhýöŸ‡ µ@jAT+Î	Ö[Í¯ë`m~åMDµ{ó‹m37'n¶B ¦m“Àí‘mÌ,ñÑÙD€‹å1›/Ywq mKYÛŠ­ØŠ/´ÁÈ›˜MÊÚPÍ©FhëÊ©G1×äX5é"¯×a‰×«qzL£ÈH´Öª	‡‘ló˜D“d*›UQxÒ]©SÐWµhMùx\š¹b7eg[”#“ªÙ¤>2Ñe	­=eVe;R<e‡Ø-ƒ°¦BºáÕÕÑB¡>ÛÚªÏû§ç?xøÇOåTµ:ÿA6¬á¿¬uML+MeÉ5zfY°õtvÎ0ÍÅ[7£äÇ×†ïÏ‡Û‹÷î¾Æí~úì`ÞO>e¤­­7Z;»¬¶c·ù49,‘F‘™SÕ*˜1=¹oç>, që§56Š´fvu
…´H´¶Æ}û«ä Â>H¬hÖä+RŸcjéÛ7‹ZQÊ 2)k&äÊÛL`ÆÁ@ÄyškÇæ!ùLºbƒt‰¤1ÛþX÷Ï¡&~r[Z¥þœpšwïöUíííê]jÍô]ìË÷´4à5þÛ
'Ö*:j³„£Q\.§fÖ2Âã˜ÈÒGÏ¼²VE¸^k$:ú257ò´üŽx.W¶AjøG"hæ’ùžž¢Øûa­˜Õ‚²æÁ¥HZð°æ€,RÐ¬,Í¤5#on°˜6ÒvìLÔû}eíó¥5¢¸fíLÕaƒµ*Ò…kJ<ÞxÒ²!ÉŠ¬r¬ÆØ3‚!¤ÁÚ0úš%7H– ¬áZ(Xc+* +VÖžÅ›þB]³È"M-ìý¹)·² lÄùzñÈbD¸°\cÕÄ×¬±zeí¼Á'Ã±@HÅ%kv‘œŽò!(Á¾(TØ}÷¢×”µàÜ$[äéã—¬ZBSl¨Ðæî,øúhï.u”£fm/´&ïI’ÛÖAAã0¨æ–¢«)Ò+jnÓŠ•5o3RÂm“Û&õ2êœ½¹²¦-l$(šƒ,˜Fß5½Í¦êãz÷È`±˜Þ¶=ß˜¬©¬&µA~²Ô­%L¯O>˜“ÅÈÓK›*kÓmå»Û¦¡5EBm±-¼d1²Åð¥ô×!B*)R°V]£•Ñ
­I&i!©­æJb<Ftk†j¼«È’Â´ŽöêþÌ`#³}‰HYË+™²µÐ×9{e‰æŽCµÁþJ"«M±aTµµ‰	“Ö~¼¶¶æ!o¬«}B!.Êš² Ïc(uC”¦‹C„k<7Rá<®Ý¿»æÕuÅìÃkÄ›\%\B$‹§*9Žø0“}MÐÛ ³«çäÉ”Ý†x¢ðQ›¶s}}ëJÁš“ðè¤6Öù0-5åµ¼H\SÚf¤F—ª¯»¦¿ýÕoWç¹¾®®”·aI³C¬XOÛ\YóÂZ(Jó\æ”58Mª{ÿŽèfÊÑfÛ¬mÅVlÅÖwuwºZ”yV“˜e"~Õ)9%g
0¼–:ýÂK/QœôŠÑšÂ‘ZÄjDZUò©È#Æå³ÍD6M$c*ScG½Š˜.Íª#GÒi¢PMZZ[IÑÃ€ÓÕºZûb&'²½`¥k$B¦`6×:ïèX¦iàþýÝ¥KêØUûû?þûÃÕ·?úãÃûÇîOõ\\„ÕÈƒ¼{weæ5þšPQÁÚšÂhÌ`VLjw7oÚ­EåPÎÏû¤}`í®g–Ï~Û«Ë‚3W°£0,«˜á|/ÊÚ?cylOCýÅÖ"˜@*d.Bé©;i…$RÅkðÛó‡]&¤|GdÒO­Z}®¾^>#<›s’A5"^OŠ¤ ry†MaÍ»öÃjI"Ž‚ŠY0ÖØÅ½Ò¦pE¡›
ªšÊs’cXåÑy¡X»,]í²ÐW˜æhíiým‰eFÎþl\†F‡††FT˜dIC¬5…­5—SWµææ\¿ ©Î2›oŒ-ïKiiÔ¬¹¨µÑÏÇìžf9Ž@šqšªÕØ0€TO öÂ88èÝ5ÙCŒäkÏôXó~ÖàÜ¯%‹‡52m¾/¶²í#;±›F´µiŒFŒç.BZ{WæŽÕ6c5Öâš5H¬ê[ª™½ˆF`@;~âÄ©žªÃO¨úMÑš4¾‘ahÃÃ&¯}ž²æ%F›—(|ÅÊšy÷[dPÏXJ!§ÂÁÔ´¯[Ãº_ß+²ãYòƒ$µ•(k7¤¬¹ßƒ4‡K^aS„™NÚ‘fãÐ(—ƒ5~ ¬j½ÐšpmÎp-HkQÅš·ƒ”¤À k:°)«‹‘G  ^éØÞ'!­í!&Ç=6zVc.²	Ò¼fUk:
Èæ…µw75?›Ü·m²L
ßdÒÚçjkL%§¥\Fd5®‘Á »n™$Xƒgœæ9ôs4· <æýG—IÖ6WÖà´ñ¥ˆÖvp]Ù¨«±Z0¡•s‚	OR0¦šÌÞ(S–E†…l:V^M~Fª+ú_§q‘Al:=vZšE¹oÅ‹8ÓN­Zß,3\Hj$çg•Õ‚¹Ž«4';]ÓÔÜQiÿ¡þ¡ÁþšþöÝ©Ñááá™•™¶ñw?þÑÆ¢5gÞÁoûË/ó»!­]!m¨áâáOí6àÚ_úé7÷Ÿ~U¸6”¦±ä¬h§$6kÏ®1fqìÃT\€²«f'ÉŒÖOØ9‡h”­jkÁ4¢‰kjÓ ®Ú§ù£zR3Tj‚¨æY¦j„zª½É°¸æMêÕÚvO¬®´9‹2¨jST; 6+á5ú¦ÙN æ Ã£²²ñ˜qèÆÊkH_·¶¥¬mÅVlÅÖŽxiË<þåØ‹ø@X£I´fró8´ÿXY¹Œ?È?¡dí…^¹páËÂ×,«ýÉ+G‡¸·™V#í„.±$Ï5µŒ5KXSÓdTÛ´åa/ŸäÒ”TFcYSžk˜ñÃŽØ¡šjó©1H:«QåANªÙR) Ž€Ü2pP‘‹%ã¬¾›–´viþw‹÷?žÿ`qjrÛ¶•‡k+ÿùîÊÚ+Ž¹¦'Ì¿ß:›F´FýAøL¡G	Ejä>3G¦æMS»ÇÍE&wÏÏu½Ýý´êÈu5&Ò%K÷²¾MS¿{lçÉƒÃù†=ÙÉ:×Û©lUœ¡ÍažýUŒlU’‰¯HUã®ú“œªx¾
­m]VCIÛæ"ÇYÍ¤§F!ÛöÿÖ’;)lfÆïD¶íÌm][Ol”4«T§]Êäú”yÒÎðÝjæ\.ö/Ëe3 ¾`$L¨OøÜµký…ÁÁ¾¡¡#_!-ÈÌ*Gv6›ËñJyvtÅÎã"ÀoiòšË~l®Ã,²‚¿ˆ„µð˜F„2Q¡É»&©ÉJÄ¾š©3y^§o/ôÕ
=ùÆŠ3ÿµ²¦(öîiÅâš	‘‚µ÷¾‘y¦¢™Éü‘ò†/zÊæîÿÍç7ZûleíTÝñÆh'DkdBþ]j°6Òø-Ë9ØÃ‹è…{¦Ä5S¦°Mñ­±¥¬mÒi-ëæ?J€µg‰/“IÍÚÂfö"ìÃdzÚM§ÖX©iä½²æB´V¢¬)øF"$(ld6iOð

lƒ˜’éä^ŒQh¶fºZ×z&¤-Ä\´H\Âšñš)kA«ÂC8„÷îYÐþý8 ö¡«s¨fcpƒü!‹Ãµ/‚l¢6o.£ý˜”µÒ.#eÛ·éÅµI¶Íq-DÊlœvˆÖôöÊ*‘-ÑN»0¥¬ç“™&Ý¤‰!¿%Uk…°9Töd%o£!²DYƒÕÆÇwï†Ö¤yi3¡»%ÒŒŠDÒÍôÁš¥AÊ«ª	÷)uÊ–ÙH
VKµ+]?Ý9ÖÑa™Ô«õÑwmý,SÀ9¤¿¿O-epdDR*^«io/t`ä°–qÕlå‡ðó§†¶º¬|xqxxqb´Œ>Ù3kò§ÖˆuX»-XÃóX£ô™÷¶oÜ½sçÆã{$	:\{ìI°4;./¼òÒO÷«~àÃkƒÖ@´µw§¯Eõk¬ŠsS#™Ëj_áÐ<›ç¸0 …Ð€…µªPûó·•xÞÙ‰´ÿƒÝ_=úÕ@j¥•jÔPÔŒÔvªW[Ÿ_™˜Ø¿{|efbTÿÛ&¦Cûë“£¹ž‰k¾p¹á˜£6eœ	Á45û¢6PµmKYÛŠ­ØŠ/¦²vD1Jä¨éj„]1aµCvÙq£©ÍîòC‡x(·Uõ…£5b#«œï§h­%‹@¬FãÊD-#\ÒÓôZÓ–\Gt:oÌl¹–éVXÍõ÷BÜ+ãÕáE 7ÈêŒî¦B€áÊèø¼ Ç¹å
ª4ÆÛ?XHCkµŠž‹—’“ÇF¶m›Zýtm [wæƒÇUL ~Ý¼ev]ÆjTŠwŸ÷¤æQM†"´¾žÑkefå»÷ã‹ºf‘Z©3$B¾s¶ëµ;KÀÂšÅ‘[5ôç¾U×•®á'¬o8¹kŸjÔÇŽ7îdw¼êx‡‡	K~$ÒªÕ7(²Ñ`/ª¯2_ÿZS`bHGlç'ØÀ.L]2$v|vÚ$WV¥F$¼/$g¡åCÏk÷h’W3>ýB)Îú\êz­±ãÙÉDÍiX­ûBÿéq~yþüy‰ÍékìrÔC¶ûÁøƒQ’“€µOÀlì¿³*'Éfy)3©âdÎÔØxžQ“F‘šÛšs¹ªæé86Î)€´
êØ*ÆÔ\V3|ãÔô6Ò é¨!uds-ÀZnXk¾FüâY­Ø`d£ºtc]Y»Ä?7‡kÎÒñ{;$W±JÐ†	ÎN‘9pÉjÚz(u»tñçAY¬Æº™°Æ“µMÙ‹5ž@Rs¬¬ý7­ëÙóåãrŠ™º¨Wíé1jà"ËT›/Z¬KzEáµµâßœµÖ,PªFè‰M’a+ìô	m®Ùš`-Hk¾hMƒþò¾dMëVLgÊZô;LGÌ´`*V€µÈ±ŸÐ. UäuB›jÁÝÂ#³îÊš¯Ycˆ¤5‹àÉB<ðTÆèöÔ{hmßA›ËrÏž;Á5ðM±ÑadX¨§1'Aš²y‹¸½5­.9BCIøn&°AdÿMVÖ¤§1'’¶â¶T{ah0c]Ah¨ÒžæH—¤”Íò«ã-Éñ¶Û÷?SäÜ¯fÖ{éüxYÙôùq£µâð†VLRNNc’„Ã| kÉ‚•­ÑÕÚhjMëg-@=i%RËÑ¸€²¬¹Nk±Elù#!µ—ï¯<Ô>;†A±z€b!<¤ï ËõöSÅFú£l¸6Ø^½{”ò+6€mxtø	ÖÐÖ|_lµZó°¦,‚ËØ(-Ÿ½BÆF×•5UtY’üz³Ý>Û+qœ”—tÙäš	®å%¯egÕ¨ÔBÅd¦„1(<k]ïÓ‘?¯)›Û_÷’<§ê¤ùø3¯ÑÚBÚ‹ŠAÕ¨Y‘Z¥»`¿÷’²KI-ø?ÞsùÕ,ãþUÌa©‰yþbÐÙîòé•OgE°V%'Eri¶³QÐÜ=îéUgÛL[sM*þú¯þb+¶b+¶âkGXY„l5Gð‚$\xeMíòšðàL*sˆá\s<­…Ð;?q´`#Ñ7Õ¤€UšÂ¢t2Ïµ’‡äËÜÒ‘oÊ§ìò\ÝžI$à8*ÎòòwÄzg	ËƒÖbÖC5¥º2A]3VÃc¤†V:k¹|lx4“náÒÜÒóÁ»ïÎÿ¥¦gàà¶©•O×èÁvéþã¿cÞZ­Ý2³®®®[½½ÆkËr9[„j¢4Å"VV°ºZ]\‰nœÎÿã¯î½vãñãÇo¼vÖ[Ï‚”´fö‡p‰‡µ›ÇrõpšÃ´“{T V±dv‚c®ûê8åEâY%Ãþž#C×ÒŠ_tW¤ª‰QrÛÛj›6¯Yó°gØ  yK‘x”ð˜àØÜD„o	=a#¬¼qÚåB*ÑÕ±ó\¯tµ--©¥o>­†/«+ö×"ip.z{—ÆŒ÷AkCCƒƒCC™d’¤ªŽYÂ¶-gÞƒSÎ8qyyMÂ	oZ	ØÌ…LFÄfNM#8¬â˜cA™öÖ)äÊ×åóuÍ!’nÖ‚dIŸ5"²|¼È‚€Õ€©h­¹
c¥cõ™K—Îè¿äok’Ò0ìÔõ€NÄÏ!¯Ï±îwç­ùšµŠ†½O~Ãzõ™²¦ª5ùŒœ8þ·ßÐ?«ª3S—L`³Ô7‡…•(kÝ õÚ›eB²±lÞò-À¾ŠŒHU¸wŒ¨ÑZPÑÈôsk‹­˜¶vØ½²vCð+RóUk¬A[ërºZIäMó'ñÔ#ßP fŒäþ…uè^@åzôå ¬©ÏšXM««YsF#¬Å%k^YßW¦Ä±I3œÜ»ËÑåkêë¶‡à§ä‘õÀ×?RÖ~X,­Ak°ZlA\c³e4Z˜qM1¹krÛ¾ÿ¬í¨Ñ›.›™ö[ó5&ÉÌ@S€Õh•Ò”i—ËS(†åÝ#…hVÞFÁÚ÷ŠüE¬yë~þ;éƒõM`mw1®qä.?Ì¸î°L6*k$W
)±šÌGäÙ­•'ØQ§ÖQÐÝ¾fV¨æðZ'÷2å©Ž«÷CuiÝn¬)´bIÜ¾¥;,x¸¯ ­õ±Uêþ$)x5üã¿œMÎ¼³²2QÖ6ãaíG —à]TsYÀfuºgoq!¹u÷áÚVöïÑÚS´F*¤ìþå5Âû¢Œü/¸””~Þ ›špòIYhuÂX ×Zël~‚¾l6Üô,C;v<°ÎfŽÕ:œT0MñgµôPT¯ðá‡×`qŠÔè¦ö¥WÞ{÷ieƒ<ÒK*Õ”ÿhœÆfÁNý°WVß|}~xÿ¸v¿`˜ž™°Æèž1„CBxf˜f›v ±¨!¶æž×˜‹ØÒÕl™Ú‚µ­ØŠ­øBÅ_k«ÔØÊÕfÁ «ŒfØ5eeŽÖT²‹Áj®Ã7;«.¿ð¥¯˜¶áÚ?l`µN7á&’Î¦1ìÊË²(#M±ÝI:“6%ÓêbO¢ÉÀp4aË».Ø…4)ù´D5+¬‚ÌÊbe‚E%B‚ˆÉüS0Š<ÄjúÀàT7ÈëìGšZr^Å§>úôÓ·?þÏwOÕêÙvÿw«tÌAûûÇ3SÃ\‰¸|JYãSàm‡hÝÜº§h<$@ÚõjÆ|úY•Õ‚œf7é,ÃuëþÔ¯ÖøÄøÆ›÷n=M³×nÁmâiBøF×TeZ„7‡¦ÜsÒÜ5êÓž?¬DÈ†„$µ*Çk¤HªÜÀ©|½úz,ûë-!r_c€Îg@Æ-í‘HÌr-ñíõ953ØLVc°OU42Ë'½²fù£ñ„`MGyZÒ1Ó„ë:^»±TMg8”™6—°i·³‚<Ý?¾”xzÙUî‰\‹êV¬ÑÒxÿè Ÿû†*á…[ÙÏf³V½&FË+í*¯ÚµÚ|¼ÖËg~¨S¾#›%‹fÝ97Rã'$#(|ƒÑÑ×ù‹Zåšæ|Ÿçx¥†Æ\|’®u-ô^Ëw•TjyVÛ¤fÍ‘
°&ø1P‹âýžƒ#–ßHé;K„lfàÊà™HZc`¬õèkîon/²¹¿ˆú¬5Ÿxê‡Ÿ"9aÍXÍÅ‰Š'þö8#§”9pd`
.žr°f æœóoé›‘Z‰3&“Í°ÑÃÝÊF}d£ŒB­g…25ùCŽw[“Öf°ÖæjÖ,ò†§µÀËÂ5Ïj¨jŽÔ¬fÍ`ÍQ£Ih¬LÝB/4ÿÁNqDŽ{ÖŠ!CÍš+YóñsÑš-RÖJÌ íU½Zæ~[rBÝ‹c¹÷É=ö‘8IfâFXã¹(kb5[Š;­°iÑ*J³õ]FSÖ´meöÍ'ËÊH…Ü4ŠaM¨¶]ù‰„;™H!ÆÂkñúwK¡ ÇYÂÞû“¸‘P‹†röÍ¥ïT+QÖÎOgbãã7o"¬yX+6î/·][9£b¶°Ö“Å8 R™llGŠ5¡×¹æD!…IdSë˜òŸ[;¯w6wdèÓ)XSVG¡šLHyüóUO·b¶A¿ÎY4µkÀÚP5è@ñ–^'6:<ÚžÄòG+ÃÀš°V{¹ÄÆ†Õn_îFFT¹²ÞëÈõ¶[RK¯ýâñwïÏßûÅÃ‡¿‰ddä/\#cÞÈNâÚ¿ý$¸sÁS ›Õ¯ì£Ù˜;zâ;Þ½‘]g³Ä%D£v„†NíIuä»ÁhŽÒ´’‹È‡ƒ™Ák×R×^Uœ†„\‘Ú÷Ìëe~•`|l Vl*âPM¡QŠÚ½¥–˜}×Äþñ‰ñåãåŠ¶ŠµÀjþ¸ÖHjdÓÊÄ@zeí«ùŽÖ8µnã¶!­EÊÚ¬mÅVlÅÖ‚¤e€µƒvW3xö;X³A°VÉÄJ
R™þ/½2!×B
$°v¡oL°Ö’îhÎRûHgÁ3.­×ŸË&ÒÈcÉ´ØŠT•4ä–¦GW
çf:+ÙÆ5ËŽUã0ˆ‰•M¨óZ*Æ±Â(Mì¶]aåð™d‚Êjø–â—í«k?Z]™—OÑS+Üÿ`åñã™™•wêë¡µ;7®ˆÕn[øY9ˆÕèäZE¤vgbæ®âµ(„^2oR¬¬½Îkåwo¾¾vƒŠ™+]Ô?#;È—µ(TÇp»»Vƒ×ºÛ·gH­®¨ ÇÈ&x NîC7k€%¤ªÁnvä"G±ZíÉF m_3 ­—"¾mW|×¶8b+˜Ñ{{ˆMR!ÍD‘eiIê¦¥3úAØ¦]–àItU“ž¦¯!8c†ý¬e4ÔÖÁ…¹¹înÄµ÷æ–ö?M(aí{ÿ“©m:V#–FûGû@5ôµ¾Y¸ûÒ$/ÕÎš¤Ô5À“@9ÔQ³¢‘äH7‹|÷5¸ØóFjÖ¨ÍYÖã:¬ñ`Åkc‚lUvQ }Åë˜UÕŽlPÖJò ÙXt¦Øò†P¥˜ÕäÛ?r¬G¬Æ9Œø¨5‹ßdÖÿ›ërî?ÕCaðv¡Œe3^ˆT”	¬ýÆdÆßzêDE¨æa#™÷7¯Hq¢5“ë9È¨˜šÆeD°Æþ»ÅårE£~-ý1¬¡¨‰LžýÊ³€¶…àÖ_Z¾ÆÕ€JÓŒV³¦Z‹,F¼ËH‹VqŠU¬”µ6Qg›0c„½Šè­ÈïÃ?º¡–í‚àT5ßi­×wZ­e- [HƒüìñOTwÞï“ûGÜBÍ†_$R™šÎìL5šº0iî`¦SÇ5Ï³yZ¦ÛõÅêãU¡Ÿ¶6–&Kg±Òº!(`ZÜ­tõ^Ó›†Ô›eÓMÚn6¹émr_ïÏ÷|9LGÚçþÚðž9ç|ÏÌ(jw9¼ÎûóyFôû•Àš6[xo~õ°¦©Ø4°íò—B°’³æK!¿Ãk”BòàP/ÂX[ÓBw­’ÔÊÑï£µ’2H¾á&m¡ûb‹ö¡Þ4þÜ>Ê¦tK,æ`û=µ±
X-‡¹ÑyÃ'AJôA…°&E“Ã¹êáë×¿c«}ŸªM˜­*ÞšG	3×‚5jéÓ™N„)´*ÛýÒ@éý\~M=do:sù×¯¶'koPtdA®ZkêÅxrô®1yX ,°Ñb× “¾âü»ï.MŒL¼tQD¯-çAjÒšµç°éÿ>øÌ/GÞ~xe~aünÞ|@Š$‘ðÚùWÎswÐÒþ5vMAþ\7-käïŽ×z'¾fò°†8ð‚8Î¿¥³ŸXå¤Î&íû•¼Âæõå¥¥z}Í#fÚß_;Ë×†×þÊW¯n?uÊ5s­:y‘º’·ºKI­$5žŸ8}4þÉG³5Å±¡ñ®MÏÏÏs÷‡á\÷Ÿ
ªbUk(¤³GÉ›fè ï·£^ß¹ÓYj¬¥€Ð-`5—0’ã±kkZÓš~t°–óa.d$gÎZU.œ¬ƒ2HÎ³›ŽQ[DÉwl||êÎ´&\e¨†¸\Rn’á ¯i~i;'mÎoKª„M-l) X³
HÔ‘¬‘?ÒŠí«ª”S©ŸbFœ‰ß 5%d°“ÖG×Øºò‘H^ù$ê´&×ïº5;=v”ÈyBGne³cKoÏOÌŽmÜ»#k“Öº¬uwi°š`ÍÝ¹_¶ÕêFì2{Í_´æd¬}±ƒ´½?¾tšaj=¹9nªù‡ÞYSÇ9W@ë‹ëÂOÛÔÜüØcä<*¹ŸAkˆyk,›÷î¨ß»_íi<3…@ÂcŽÖZö¶°ÞÝÒ¼»³Í†aÃJ°7HS´–›ZÖvóÊÊêÇX¬ÓÛÁ]°šS"HQä:Ì2Ø·¡±Ó§\¼ˆÕJÒÃwÆšË¬¨¡xŒ&-"‡M¾xrŠŸ`¸_+OÝ?×Œp›ŠÀ?ÈÑÚÐÞR)¤|5zýóŒ:RV?k€—Kîo×pï°¢µ³k¡+ÏZ×d–Þ_Ïê2ÿ~F¹_‚9Î.Ëe£Á/ðØ‚è~¨®ž#Öke8$Lª`²cŸo:>äaM˜àH­¼g­ÄXÓ û5+…²wÕw¤$‹Hn_Ð«Çÿ¸ï%h\¸¡—FÄK«õŽ•÷Šy\+ù1m4­Y	¤£µçø—!dä§?%gä}e¾¨1%>ôR±Ø{\›ðÎšäœµ2\ã°zÀÑ"6›È  rÓSœ—„@ú•ç5$L­1…Ìõ¬ië Ž½J¢ y_í¼`m4gáý¹ÉP)¬y4²3ÏS,¥Ñ¸]ÌYó¬Öc¤æ×Ê@M;žeÎšµ™ì‹ÀjË•™3êVãd3ƒèÔÁV·’Ög­´AjÒü„5Ä'qÖ¬é¹*¬R ¹Y@V9ºz×yÝäÒEš‰•0¢éc}VÓPaß§)¦6XS"d{,ºý—¹øúá¹í>	ò‘°v¡:7\]EãZŽïÑrXcÅN/’­¬¤#™£ÄP£:¢Ák6[\kêuÎÁZøf—A5à-ÝÕ8 ©½Ù›Ny•ùkQ`¡
V›ìÄS#á?"œh¬©MsëH‰é„ªK º®t¤ñþü»çg? `WíîÄÝßÖƒ¼#X«¯ñïä³Çzæo~›Zy
;nß¼y“Ì7Nû<î{ÁØ5xÍW¥P•(\{³·ÓdHÆÊ¬²I{“’É^68é$•b¡Cª÷?I˜üO¨‡	 5®+I.ÿÝK­%òQRÏr†Ú	Å‰ ž_ìÕ<©I¥žú$hUÓ¶0>>=rÿþÈüÂÂ­¡"`6<R“›%UÄÃLV®2._CþE¶0ÌŸ…`MÏ@ÃþcZ×ôØ3Œ`¶5X[ÓšÖô#uÖPN"F µH]ÉXs](¢‡pT®Wó;wž(¥µÃ°š3ÖÎíL©1-!XkS£Z
Lã$Sà<¯JPòˆÆY;~Z+#ÓÔÅ+<•öÏÂýù2•2xª”‰ñfóWIc#ü"‡D#€D‡ZùZkÑäQ~»Lfßô?þÉÄãÁXÅèÈÒÃ¥‰ºÁÝ;vŒLLŒŒÐD ¬©úQíj§ûOß­\Rôã×,´`iÌhOM×¬k7Ô`Í˜µÓû_<vljxû®Úl?ÃO:cívTi¥¼µ»Zö6£½ª„¤Ò`<HFê·ê¹ßh€ÕXÕ·lh±äþ¦ÌŸæÝÙfºµ²8giYSŒæšEôg]¤ˆÆa‹fVøjšVFkh÷Sô( ›UÄö‹…us±"±õvè°×ü4lÑ 'RJ«v2ß¬¡Ú©;Ý9uçŽ‚ -Nîš`M ½^$_ gíþŸþ44ÌH¼t_ï$?eô¦óf§ÑxÂî4Ö¸£„ÈVËT(Í?FàH`¢iÄkäûÖvìà­zRùÕò¦àn>híkm*•„ÖXr´ƒ1¿òòÖz¡rÿðÐÆÚ¾£‚5/o¡IÆj¨¬g9X“à5×·æaMÆÒáÏìõ–½¤ùÿùÏ¬i/¨›­ÿ½Ò¡ØÞ¿Z½Ò>Ž³¶Oq¡¨©
ÒŽüÛ|ŒÏ¦îµ_ì:J·Üq¹f ê¬¡G:kl«¤A:˜C!¬QùÔóH3‹ƒ˜jjÏoñH¶"`$$5Nu”µ§ã6•Aš¹¦HHžà˜+z,'5ÞƒÒŒÖ<¬å`>‹ÓXÖ/m+õÕf9wKFw³'£qqqËó{_7kÍ©G›¸Ì‘;|5=í¬±IýÚ«Ž"È:EAêŒ@Hmd{lW€-°æäºÖBo-µØ 5vÆkÅ _dZ£Ür³ÓÆÍ Ù*ÉýR<ºŽ%]À‘(/ÔÖ‰Âië+Ö×¢FB!#ê­³Jòs÷Ú?<—ã'æ=B³•°Æ¶ÖærUU¹u¹ÊDl}¥¤ýrb?íìJãM.wH›Ÿ–LIÅYk:-cM½ÏòÊ(áè,È(kD:ñÖ.kDŽt5æ{'{Iâï}™À‘¼Œ³H/ÕF¶áÇ%õûöæ#¤AÊ6œÄ‰ëåËqåÉG˜p¶vxâáÃ	fk.½ýö7oÏ¬-½òí·ßž§k­›BH£µ3b5tÑ³Â°ž‡·<pûö—_~‰¹†ŒÖ€µÓ@ÞrŽÿ¹yÊÐZG
ìô“ÎÌO2?ê,¥µ¾ÉÇZÙ{ñ0ð?a½4Òi:hIÓî·Õ µÚššßï$ð‘²GºÍ]qªJAÂ!5—J<5$Ró¨f°æÅz|^ Ê ¯o‹¹*×–6;`¯*gôYžÏ¬â‘gÎâÔVÔüÂÿ
VËÎÚ¬­iMkúñÁÚò‚ÔÀ5!·-‡q‘ÿˆ»fËeU»+(c¬EQ5‡ïÀ%ÏŠÖLrÕœx%ÝÚ—§K ­¤PàÊÙYø÷·0eBx9	˜¡DB¹]h@Ó°y"HµC\¾Éýêâ.)1]Â°dª=ÖÁ{¼f¬ÆB67GÓÐw…p*‚{yðkÚ±O^Böø¾T¢n–‰9çG:ššû·‘é[ÖÚÈV³^˜{çO+«É]µØæßG
ë_€Ò¨×|™´±Ý}ñôÒùýÇîÌ¹4®€p	Ñ’.ú	Ð\
G÷6S÷è`­Y°†f°¦@H6MYÃWSÏa{[€6³¶®h²”Hl6¨mG½8-ËÆ~w‹Ô¤6ÚºÈ‡\i¬Å:*Ê`qÝo"n[ü¥8È`ØšÇNX‰#­lzS¶&Z<&c-!+Í¬¶ ²Cq$ÀZÊ~	1ÛNžœ:eÿ¢4tBâ`é˜¿>”‹Ï	Ö€´|_íÙ|¢‹T´x,Ó–éMµ;Ö’½ƒÖšX‰ÐÚÙeÚqÓô»P°˜ðM1…¡±˜Eö×«Fò²ÿ¯  Í	33ÛT_î	ªL÷f³T!hË]‘YÞ³ÆÃT6û¼9kÈ¦¬ÙN±‹FiÈ»kTGŠÕô‚6`òGv°Æè6ö^	/­b¬•ÎYÓ¦9kæ¢=‡ž~ÆBÒ¼¶õ™çžcùÜÓ|½Oc¬IG%(Ýâû‹cÅè-Š!'–«×x¬„µ§žZK(æ`m(¶e‰&¨„ÏJ5ö‚µmZŒˆÓ‚§±ZÐ¸¦˜‘ÔìE8Í=ÑÝuV	¯™“å†žyGEpî	˜Ds¬!&\®-ÎYóÖšœ5h­Ç÷ó,·ÖÊœ5Om&?M˜6C1äÌc£àTÝâÌèÌgÈ¸2Xû¬Æ³¼²$Ò¬jTAk’‘ê#üµ:æooÜìµZ¤Ö%ñÓ8D¶X…%C¿«‹æ(°ÖP[­X§ ÿXEGßªéT3)I¶:žÍýr{”hd˜æUÝŸÃZîÇÅ§î:n¬Âg^>_$¤5nr¥7VG¶hµ`Mè’N¸Àáê47u%áµÆ.Žš´ÖFÅd4’×w™Çû&8Mƒoé|o_$Í½BÔN†Ê<ò¢€¾É‚ióUqJ<4§ 8™§Éyvþá—Ž%¦b£o‘¦]ßû1Vòßéþ:¡Ã³èäþ¥ß¼òþÂíÏa¶Û7¿úîš,QÉ/´‹´†>Å^£w­2ü-Ä•o•R´ñŠÍÌIcÝ(( Cà’mÖglÖ—ÔâµßvEèGº¨x<xHsÝi§ùPRç@Kµê8ß29P+›¨¦Heõ;;'ÜÆ_Ó´­^µ	Ò¡‹Å\‹Ü°öÃ¬æ`-0ÖlååN¼›& [fµƒÃååxØ8l½:L$Ov¹á5X[ÓšÖô£†µjê 1Ö„jÛª]wucUX›ÒPSÕ@ƒ½e—Qíj§T÷çh­D'Ðá®ÖÎ®Vîš;Ò¬FY
}ìÕ©Öš’Zá3­Ô…FºEŠbH±â‹pÂÎií‚ÂxÆih3¤0VÓ\Ô&dh•ãÆ‰Ú+@,b˜ŽÙÚ´CfÔÑÙé/^Â7*Þ]zgâµ„{7ßBÜT¤aÍÃZOÏþÓöãß¥KW^YâêJ³š Ó®éÂõÅØÂ'ãªcb[X¸òÎù+×®]šýÜéYn°
Ö‚{É=DMÊYlÞûØ¦f»­Ájü4!ÛbEž&¶‡Hè†“ŒÃ†ÑZ€µ­M˜&Y}"Y’ü›Z4K'Kö*bì¨ƒüAgT@®œzm×:æ¬53Ð(bÎ›MÍVWZ¬sÓµ®uTZé#çü e ¤	Ùx@tSÇ¦>½85uòÌ©7pf·›m–O¹J\™êî™úÓïèWãÎ÷›××î¬%Ê ½©À˜Z`ÌYkê‰ë`™]§lT¼®Ášm¿d«`mG¶bt4†¯¶•ô~ÒC.û_—­h¨µµa±iÂfxüûøã6¨³~¿}/å®gG	®±ª•÷¬ÉYóáý@R²CØÒæúØ¬2qßñ—@6±š`m¤˜|ÒÇ;k^Ï?¿å…úgž`Z«ÿÅ¯ 5b(ù’-»ú¹çLµ~ÁZqll[ÝØõ2g­ÔÓÛï}ÆR}ÇY[„Ìžzj¦nÑ¢FÉ™)‡àˆ-<×B”¥ã`ÑÃ®þÇk<Ñ~ÏiÈ8Í‹€‘œJqÙ+a¬ÄWs.[ÉÀl}‘…¬Ýõ…è=9kŽÖcÕ£zÖŠurçÜä—g”ÉŽRO%}Ì,n¤òr¼’ô!–ƒµ„kî)\ãùHý…7Á4ï¬£	ÖÊ¨Uæê°Ô¾×«ÉSƒÖ8h§#çñŠ‰¾Zjâqg¬1[Þ}K;%íFk4¬a×'cñSSÉDkX{ãª§5ÎlÌ²ÁZî:ÞÚõ¡xœ<#U¸;…µ:©ý4s¹’(N‡·™¢°›½ÊX4ÑWð©8ß:
àf_&EÔ£h†éÎÆ¤f±Ô6ö2Ò›ïÂfxs ±‘ZÊ*ƒ©f}ø»å½y5ÑžmLª>#ÕEZbíÙæ'Š”dÌöÏ.=|›ŠF`MR×Ú×÷\$æõ,Â²ê~ÿÚ‡ÓtvMOõÕ?¾´RH:Þp×ŒòöSsCž;XÓ AÙÎ {b“ÞÔÂœ4ý=dg“}gÏžÉ¤¸cî™ðìµZc4ÒK?¨»§Ð qpš ÍÅ<9æ0M—¼Ó÷.•€Ziø£EŠèÎ¤dàF5ÉÄüÂüìÂÂ…†ZàŠÞˆû#6UXËYùMCÍ£-\t!†t>Š_ÒËl‚5ï¬c{¯ñ°ðYá5NxwÏpNÎ®Ú¬­iMkúqÃšµ¬)_d@†ªÜÕ’ÛÖü÷Zw£-šîš:†D¤*E5tæp^9º'˜à*ÊØÂ«TÈß¸¬7\vi‰Ê(—_ð,è2ÅI•÷p¸@ÚÒšù“LA°…MW“X°Œ‘"©›Á&BìÅ±˜
*ñŸ™Û5ýpþh"–é)ÎNLmÚÑ²ñ‚±š£µ9`M‹ÝûO«
’+×+\XßæÚ®Ù…ëÙ"êVsÖ°ÆbüÓWÞ©èŸ˜Ö‰Ö@´¢WXÍÃZw·jL.oÆYƒÎ$úÖ`5PlÃæO«’ã^ñZ=°¦ ‹‚ÄIk–¥¦jªßlš³|5 Ôê!A®Eý]ÎH«ø¾!k‚µ²µ7ÆPÂQpN‡ æœyÊYÓš5¶éF¸T‰k´ªXw›ý¢=+øúäÕ~.©6Èò …kÒ‹T›Ê_ïþÓÙßèK)¾ŸfÃHº“ŠGUAâª:Ûm!b$Ë13Rój²áß”~úšÓŒâkBØl;·)[®­°ßÚ×µ(kdw“3Ö²›³íÙúLGê…}í-uëã»+ª±Æ†r‚µrVãEVéY;ß½xÔiHÉýŠîw@VkGsG]d=YûmÁ{k8¶éèõ¬ýpr?O/ï¬9-.>Sÿ1õª…|’Vµ_=Á õ_<÷„æ»õ?>¸M•€OâÇ‚4HÍÇ{ÝÈo•™Ø«Ìð¹ý¬a‘1²IÆšÚ× µò‰ØƒØ8ôo\‡`l}c5Gl’á™b'‘?"-ÓÚ;#×‘¹sG­±Áu<ôi¤Þ*ƒ¼ëãEì±¡ÐZÓÚ“Zø¸ï`°œÕÂ™}n @Nuu7mšÝÀ¼€eåÜXõ‡Ðaó
êíe[é¬™©f²C¸6XÇ­33VãQk¶Qõ%³)à4¶h2BÉãÆ¸âx©4gB
ï®‹'*ŒÕR<Svwg]%fþö=º×“tù"ÆjåqsÃêVC|[IxTóf”¦CT‹°•¯&XK'`¶8×)œ¶Ö<NTÒ­)IvT†	kÜ‚Õ
lævbIõô¦
­]ù4(Ç¯2aÇeHíïË§Èúïí¥V2?9Ù«hÈ>Þ›LËQ*k‡ï.MßšøðÚ5µŸ¬ÝûV´&h'Ùœ>EÏ>Û=2re–+Æþrùãi•Bb®=ôcÚü¿sÍ¢FN¼qõêaÑ•Õ,vu¥ 7DüˆD3E·@ª}í¯Èu‰ÿ.“öœ“ï9÷©ŽÛe¤ñg	F*îÑº\."¹‡Nß{Gº’š$PC>üñ†ŽœÒOIó¯k‹Ó#ÐaÀZCËDVÅ­
kaÛš?²Pd°4; fOv<vî‘‹f÷9ÌÎX«]ƒµ5­iM?RXÓ$‘Z„´F)¤ÙglGkÄjN‘t>¹ìÎá©3ÐšÉ³Ú¹6³å€êÖ:qÅ’í¯¶QØQ X¤µ€¯ÖFœ²Å“­q»}J8D–¢ËL_³f¨LØu\ü1®ÂéH„Ê•”ƒƒïŠ
ÕK®óÚHÓï§H0£Æ.¹N±[Kcœíh=Þ?6Rl*½×m´Ösìâ1ê/^«Ýã2j÷—T´BŸÂ»\ŸÇ±Õ&3=36ÎýÅín¸Êý%#G+†{l„˜*K ICÅ‚ŸN^¬]¸¾X£Òi¯|5¶PZ3uOïÝ¼a‡dÕËmSs›æ®í 9’=!\–¸BÒEÀÐÝ;ˆ2l‰+R™ìÛä®)Éß@ò¹°­ŒÛ*<¬qœ•W"±¼ê@‰õ1ÁZIï`¢ƒ`Nv™L°‹Y¤Û2ë%¼ŠË&ÂãW“yQ·šù‡xãg4°ë'2F+ƒ<ùõ×w°“*6:[»>úfo”¯Hÿ&3I¦®‹±‚³•
I÷a´mÑ!’qZ/¬…ª×{ÚØQ>)Ü­·Ù¼ƒZ 4&;øu¯*’$»®"s™V¸ÂÇ/4µ’¿‹öGBXOJË y Oke¼66&³J[7Ïh
è¯„Õ$^Ý;3ˆéF$°¦éU³qk¸kO2Ršù_vÖ<¬Ñ»†¶’Þ­)òÉ'›_xc*ódpL>b§=´Öß?fsÖVŸà“ûWwÖd­mY9ÛÃZÈk¥\F8 Ê4B™Ö‚ç¿²Gàr¸¿ñÔn…³üE×Lû@¡Å…´³cÈjt›˜7`=kwÃBH‹ÁX›òÖš{”È9kRøº_{ßLýTˆâÀÁj€éò &ýÛ~nµƒµ\1¤íÍ_+}¶¯âè†Gfa%dHn£×ê¶U¬b­Yƒy‘¤up´e$IsšªÍA8Á=kgó­|SáÖ˜Ò¡0Ö²©<ÄYÅŒPÛP}jO‚õAkW“—ÂšwÖ†ã‰o¦òÑµª•ÂšáÀÚËr~1ÖQ LÀ–´ÐÁª<§s÷C«ƒ5Æk¶q¡IW«iíeZ¥Ó„ARL8YÈLÉÛí4FU/¯2¿PÈ#L9¯7=Ÿì,°1L®SÐ×i#@q†f—–æ¾ûpáý‡°´&…´K¨ÆöúD÷™žûã7þÒöÅí/Œyóæ7ýŒlpM´öâ;š’Í¿|eì­E²³g»Òªmè¢ñŒ(MãkPMÍÎßï<xðð9÷ÅN]½êÀìÔ¹S ÓXZÝ9ÿ¬âqY‘&Šr•“NÓ=gÿ_+µÒ>µOBÝÀ_›®)NOÔÌ‚VUÛ†‡˜0 ”lµ	iU(ƒ|t˜ˆ?=èv9sÔœñ¦'Ð˜NpÕX:JC%Ù³64´kkZÓš~|úoæ¬ms°6T¯YÏZup{Ó¤ík|WÖ(ì ê‰‘\ÉÈÔ±;°š£µO¡´àaãfÎu) «#s¹=ÉÅ\J•ÊOBWFà‰¤œœh–ä&)Â´IªúQÙ`	AeÂÁ‰CÀÃ±©vLÆ!‚•A *ûx=“õiYq1¦µìÆs¢âfwËûa±¯¿÷ñÒE^êÙ¯ëå1xªÇÁ¡ûï©¸J·UÉHÓùKT¬Ègkb5+ùH¿RGR@ÕÜ/ç0rÆõ­!hÍtHzknh°ðR¤v2ÌŒÑDkàÚÖf¬3c3"{ÃæÍ-xjÌÂ))²¾hV­ÞFÁ€m4i"6)¸†2Öš€5	:ëØË*P[Š¡²–µuêüà*¼#›'M gCjlÖ¢*„ÔëVéi¹ÒþU*É#œ°Äý©ÊÃ”öhøÐÉ_ªJ=k
A2×4yŽ©Dwîoº®¶ªaçH¼½@Û$¢R_Fã¨G·¬þ‹Æ²@—¤ÅŠ¬þ²óz[ Áü’Ò5ÛPnëVú%<N	Š	ÛÛ×uì+ˆ˜’ü„Û?ÔŸÄX5ašßÐ÷:k@E‘t‹ñ“I
	–®þQoðÔ¨5Yj6löµ—†4¦úƒï€;ö«÷¬½ÂÓ;kÄ÷³«òÊ ·ÖSI®È“?}îùÅ}O<YoÅc˜YušaZÑMÄÖZC¾g­œÔÐ~·_Íá{E°¦8H=%Ìø<=ËUçz1Vû¶óü–j™9JÓ®TKç—€5?/.'Póa<ƒ<H-¼<BÙRZü[f·<å5ž±FÓZ©³†lNYcó#ìÑ2úsöFP3[6™ë7šËmÜ¬åÜ[þ39k šíÊ-¶?x£ý…ûà14³a´„ÏØ‡r ¨UˆÉÖz>óÒÉ:[tˆk`£ØQ¤¶Þu°5Öb¬Ekkûò	ÆiÈê¢ˆPiOxUíÌDÌ¢ŽÊƒ«Ñùu¬a¬±ãQÒ´ÆÝaºÖðë+Ë%Bsõv¤5:€5HZãåx.ƒÕà•Ô'Ü	Õ Yº*¨±ŠGÜœ¡?º3ß:yäˆ":
GÈ‚¬® ’ÈNÍŒií,¤G«‰…vœH­—ïF|Ä `óÓMíacqž"2üç—€µo¾ýÆ³ZkÆjÛá%iê½ûoœêfÐËÂWãŸÝúêó¿©„ðæÍñkï¾ûþû®R¸Ö}èÐª„¶',Êˆ¨Âñ·Ñ.ö ÛYÖg"Rº·®Ü~Ž,Çí'œ…gÿÀ§øþêûYÈ•wÜ9‰¸æuo?‰ÜŽ¼w›"’õÑ… ö@ ’OîK²}Å+ØkÓÕ³ÌT›X˜ÏUåªkf'ø‘€?”`­˜=Ze¬xc9mzzIÁ¹&5W¾§ã0Ï€ŽEŽ‡Xgmm(öšÖ´¦%¬yE˜‰]§JÈ0S„²³†Ú†ÇhÐíÍH3`(9wLr´†<ª}Ê’WìÜ™Æ0Ó%ór{«Eò+
’á<v­imäqùg\Š•Ô_Y•ÇÖ'ÄÖG Z
R#hŒ/¡;Mo[œ|HkR [fqèŽ3²-æ8­O&×eÁ#¹Pc,ŽL\éîøIW£„¨Rä=ÁÚêÈV›]ðàÚüg“¡ŸZ]k®rlðCÊ!Yí¢„™A{†¯ÎÝ!žžÐCÁšOƒ¼sÈÁÚ¡ëÍ›\$;¬³Çà5F6cž¬ñjó¸iÍ›7Ð¯¶w÷Þ¦fUÛ¼/mw³ Í*—à³‘Î6f)…„D6˜-€5æ¯éhŠeÛ;*Êª ¡Z­B…øKP¤±&iIŸZ@i1’!m &šÿ„>3»­JJTOÕ kO"A«*Bk?CÏÒÊ¡žv©§çhSªvxî~míÎ³ô‰ôvöôbÂRÀ(HkBí*BjRf–¯‹sZá©l·£6¡™TÑn|Æ¦ H­õ†ÅõkAð#¯!ÿú ¾²ÁÛõ¤–™Žo«ÜÕÏ}ÙëŒU.íYãQê¬q(ïY²Ð f:®ÈG'ù\<M6×+0Ü´lkÞ¯öþä•kÅ2gç8k6Û`Mz‚Vµ_ýÛâÔBºtÈç~±«RÜ¬áa€¦?pÑ­tŠo•;kz†
5{­ÔY²YQäŒ¼³2<«+Yû3ƒª¯,ë<OŽØØó°ãJñ>{¶·¬i'oÉË|3ýÂ°Æ02tÝ˜XýØ¦§žß2§ÉYó ÝXlÿø»z=Àµb	–&Œð4ñE6m"’Õ†:ˆrqËÆRVC¹ ÖþÉæUlþ¤TEÁa³•rà8ºY}k,™0¢ýúFÁšUá£š€—OÕ±F²=¯tÄiZãžl	ÖÚkÕ{ª¸õSõ³ÀZ5ksÛrÃst­V®&ÞÏJÔVÒ´fë±ýŒ Òl”-¦€1’¦ª(ã òå—/«ä>ßËª­ u¦ ¶ÉÂ¯ð)Eüç1{Q¡ NKGó²Ûh£èí y2™WIG:E˜äÐÄœöî7oOü‘ý7ß|û›WDk
vt°fQ!*¤Iýþlcdèá…Y®ÿøüÿ k·ýÞ½†7÷›+Kæ[>%Üä;Á¯7\sg¯5¸±¥jÐ–Ö pQLÈa>rêrxFò¤ŸéyR:Ã OÑ1#ÓaÚ~ar~šþE•?œ&½ýÐƒštûöí€Ô–³úÆ¦?Ÿ§ýŽ~5Ì3,0]mvv¶Xœ˜`žÏÎût®UUçÂyj¶OY!D:–*G!¤[€_R0Û§C«!Ÿ"	ªñDÎTC:­Å^ÓšÖôc„5ŸÝ¯–µÆ!UAŠÖÂÆ“V
ñ÷ñ\”Ïsñl¼?uªg%­}ÊS;%×ˆ¸§¦!Ï%ÓzÔ2D$«’»™@öZ<Agw[&ÁoM-d40×To‡±’Z…ÎÌÄÌ” –è ­Ü’D@´ˆ©5=„µxÌ'H+dÆ`8v4‹íËÄÖé·%ŸWå¥&úÒOÍaøËØ1+‚ÄXSˆeAêb&V[Öæo~ys~ì‹ñ/ú”)rCžÚµ…1b·¿ÿäZ]¬6|•€CJÿ|fµ‰-a¹²äþÇ`5	PÓ°¬5?mf°Ö\¯2È½ÌË¶n6OÛ¡e5[h#´;-dö‹ÕZXÃ\Ó iã2
"C1Û^n¬éŸ*„3)|e,œcæÒE‚¾4UBÒˆ5)«KŸkeKµ[“ÅÀÍ,ÛÛ ºäÔ±û5S‡·ã­ñCCi)Ñ–4¢F6ð•žµ!¾bôñyŠ!ó}ºµ­ˆkS›ìÖd˜ujÁ
oMÇL‡e@`Fuk½S?%òiyrMzSÌV/l3XcGZ¿FîÞH’dK[¦e‡+¨Ô‹J‹”µv<™ìèèïÖæ.w— Z¨ ’*HË‚Dàš4Ø±Dœª]mkÛ>-\Y¤ƒµãƒzE¿úá×ÿ_ÏšàÎ`më3mrÖHüÕS‹ƒ-ÏÐ²¬AkÏ|üÂâq¾ _ÿoži—‚5–ÁîRydIŸ×ªi%"_dpXû®ÂÙöžÚégÍË#[lþðŠQÚÙö¥WèYË]ç/!dÖÂØŽ É$(wdÓÂm'~Ýõsª·@R¯w;g­PsY8kÂ5ÏkßMƒ|]ÖÚÈw`­dF¶D¸¸Hä¨…_æéYÞŒ8§¢Xíƒþï~€·öHý…gÙy1¨¢ÔÎŽÑ–aM®Ù(°†˜´²q^BjXkæ¬kÖ¥1¬E8i„Öº€™.–pœõ®©rš$ÈuäudñåkÞxã`ÕU?;´Ö<¬åæÔ¶†ò}¨Æ#Höb
'À¦U\yýË5R°´¼‘¤Î¸”à‰]~õåW/Á/+üš.i®6ñÖÂå_Žüº·–kYá×m	e`õJ]i¼´®(VZ+I‘µš$¢s¾j"%ž¤«8ÿpþKß¼;?±ôö7òÕ~ÀZ÷‹b5h§‹°fÚÙÕ:t÷îëï\»6öÙGŸ>N}†£µk@ZÒÿxO_²:|¾)Òº†×ÃkFlÁq'ÔsÄQã‹eb»à™tÇÐŒ2FÐ jE¨í×ÅMr„fûórÓØÌNcã
Ç@k†ïÞ| Pûè“>ñ­j°šr o|x7m~~z¶HªHqä“ñéÏÆoÌO,Lçj†‡««‡'€µêªÆHÅ"„4ý2<b‡•9l§±Ç13~³,íJÙ"Ò0ÞZŽ5¨¦mÖÖ´¦5ý8%g-g¨æF4[Mk•a.²UCMcK­
uu%Á¶ûû»‡†õô8ZÎœ¥6eûgyépo;ŽX›EHçÇãJYPgAN[œ=à)Q+â€˜Ò+@*Ëî¯L@d•(¡¨AzÍI(tPk×¼¢üXÁ‡R)"¥c8køNY–m¬eÆú÷Ý½t ·{÷.v_”ì$ºUAk—X ¬=œŸ~xm~¬øðËùHÿÂŸÝølvü“…Ï>šŸŸ^Xèß03øÙµ±]Ûæh—ÏÍÍ)»?kÑ¸—èRjÆÚèfºÏZš%å÷ó³f„ö4šåô×3Õ¸›X£îqƒì´Ý¼Ê(lÉNü˜Í²ÜÍŽ È1[e¡6%«´Ç8R=äJ»1¨‚ô°¦)uz<Ža¯Å(‚´7¬ïßíZ·š&`kGâïÍ2	ýGqœf‰0
'iÝÙsññõ‡œ¾´wNjöM]E.,í¤Ê )Ê9Ös¿ÀNe¨9jOåSIuª|‘ZHÍ² 3Ö´W±DÎ£I×/»tÿ:íšÚÀ8i«'¦®e«MWÓ¯ÚÛfZ¸M°ƒ} ™ûÖ´¯p<94O‚µÓeÎÚ‹ÿgc,kWS ¿ž±¡6-5½: 6ƒ5e@Zç'èVˆKåÀVNHFv>ò™çžxfký“ÏgÏÿÛÓOkõLÉ¶ykmÍV„y\i”ý„?løx€›ó¢BX+ûº<½JÿÖÚÂ?Å£amÑ`M›W]éÚ¶1wðe¿áñ>»PVi”†®Ø¦ó%:œ€È™YäóÀ„<êœ]˜|Â5ÌÍ<¿if‘È:@MO“UAZÛÚTÉÃK¨&fSÏZ)¬•{kú¸“Q7|tÓâÌŒoj`Â2X3\cÓƒÅ**E¶bÈiüVÞ^ó°¦,HøŒr”Æ±ÖØÙJk«|tÆÕçæÕ'Ó0#6È%l¬m }Š` dßvbqV‰áªõ5©€¼šˆŸ9^+qÖÍ¥«¡5þo¶-úý°fëÐ=‹rÏŽ2H¤¨‘|Tï¬ñšZG)‹Lc±U'ÛÛé7cöË/9R˜<òra²P˜LðÉ¶¯¤AŠDáåË”r’ãß‹5DòyuÀQHÉ¤ÇqÖpÓ"üî‘4eú|nèóóóN©ââ' µý‡º¿¾øµ‡5ÁÚW¨=|îÜÔé¥…þÔ‡¾¶p™Ö¬’«Ì¥·®[ÈpíÔvÇ{å)kÛ÷¸Ü}7åY&²ÐtyÑÕËÊBÑUŽR7"¾-ÍcšäÝ´·jù®iüÁÍ›Ì‚ÃRûÛ—ƒÖ>ÿhDS	œÆnãš7>r¸¡aöÆ'Ó#]+½µ€«Vt¤œ›€ÖŠ#UáŒ5=CH0YH]%°†­f¤Æ'X²Cõ\Iwb:«ƒDÀ	þ;‡·¶6{MkZÓÖ¼ 5ÁšX-Œì×ÊN4u­/Âše’‘Hõð{Ýü3e°æü5éŒÁÚlÆ´`P‘Lª#	%£Xjb61@;°¦Y7™!­ÞÏÇÄlñœ¦É¿|Q BUz¸CÆ!¬éñõ¢O’°ƒL¥X†úÀ¬åŒ kˆñWïÝ}«xáP7°ö¢±šîL†°F¤ÇbÀšfÉÌFŠ³ÅÑÅ[ã7>[üâÆ'4Œß ’Åà­éÁÁ±uâ´ÜhnNž‘«ý;á`-Ì?Csr»[pÏˆz¤w<HàAfYÈšUÙ²•ž5N4QÍòø7oÜÈmÝë`ÍˆCœ&hã/¤>6ë\kkq…¥^ZE¬#Vž©äþ¸§6²Ìä_jLÙ&{ÇÍYCÔè6iW¢”Òœ5ðŽÿÔF’¼IßÿÔÅžÃ°Ú¯¿>S;uæŽÕ€Ô´Q±#XÓÊsá¢:Ô7 `ÚùÀtºS¾ôÆ¡-cß$eZ@7—ýÈfÎš6;À5ö-2Ó5g¬f×bë²$g‚k*~Ä§l‚Ú•ù¿B£Df6`mmƒÛrîBoû•ÎO/GjzH¥¤†¯æaí%Ûï3½äJ”ÕobKŠÓl¬Ñköÿ­9Xû®³ö(k­ÜYSÃšÆ3[AÄõ+rëÇ?óS´•¬L`ÍiÍÂ¶ô~_=(0²ª­Wj­ñz94k¥Ú²HŠ?ãËÍÞò
+#uôë±m¶®Ò<¯Ù.x^‘†ì`§5¿ÇY#QrÛf ÈÚÖ<™y‡ËÁšC5/ÿŠ¦RïZ$`ä1|/µ°gÍ[k2Öl[Yéæ¬½nC±CÇÎËNÜæÉqT9äæº\ÝÌæ˜ózÝóGk˜jÂ4=Yøå¨¨_ëxmDcØ9á©UÈNór„¦§]½Óˆîg/kX“§†ƒVÁ7µõIƒµ>ª!‘f©Xcl¶Cß\j~>¤@F«RƒÕ¾ë¬Esúnx}(Zµªµ†<­•8kQ_ö‰V°–L'õB :Ø"I²E4MFŽd¦õNN*ú>³¥ŽÁ2kL 8æ¯5T7¦Î2Nm 7_ ¿š/’L×$ù`ï@_MCcC4MaG>‘*þñî”Ì(h'€5pHs±XSÓÚ_Ïñøýa2óUùøëóÓGo}ø—/p¨¨"4Z3\£ÒFd#ØjŽ\HÉ3ýBÛÈáxøê8Mâ›(7½NšŽ©D×«Íì&£¢±œNŸŸñ„Ñ-¤ñGü-„ißÜ|ðàÁÿcï|c¢¾ó}“ûøæ>;	‘yÀ	#†ŒÄ™É,Çh¤23¤éÐ ¥åŒÝ¦-Óîv©ø§{Ü‚š¶Þž–Í(nÓjC0ƒV°«¡Ý@ûg‰åÚcˆöÐŒçÞvÍ&f³É}½?ßßŸSäöyÃ{~ÿgDÛ™yÍûóy.ÕœnÞ¼yEÙVÉº¸øÕâôøwea>ÖÇÆ¦ùnuŒÄáaø~öá±ÑP]vXöZ…ü¸–ŠÝ1¶År‘þNøj¬~Úˆ7ïA¾²,Ùj#4Ãµìè:¬­k]ëúiÂÚ¸‹îGõ,YÑšKa"v kUˆ/S««ë\»7íÎá<™ô2ÖZóÝ5Þpä¬MÊÔè¢"íä¯iZƒÉ"JõJQ™Jr@ïQ#Ša¦7ÜâG:Š·ËÊqæZ,.XSf¡vNBÁDä~ZãŠ¶ü´4´·b*	W ™h“eU %	Ò¸62660vêù÷`5ƒ5™_ìTÉÛÝ×~’±JùY‡ã%ÑÔ@Þi»¬L,½“k‹wÎa®•WðœÍ]¤€nÎµFÓšq’ZÖXçvÖðÒ,ed“ˆwía´7m'V[åã5*|ÖhÂ…ƒàT
)<+—ÚÚX4ÚØH¯G\o“s¸Ékd^
Ö|/M‚ÕVÅ6¦ÕFÕŽQ±–-;íýV4³/ãe œþM˜t' ‹Eätz˜VfÆ§úÙtOÌq›*c¼pQ#/¼pUaÖÖ°=¦2HŒ5gebDÎÏ}6Ôžå˜ÆGÚ\,Õ!VsÓÚ½1å‹@`¬Ê)J~dË®­ÑèŒ¥ÁÂÿ¯fmjMxnâDnd«´Ä'›5½îE
ml/6f³ôËÖ—eGµö¬‰Ó$ö«Ó ³ÈÕ8º)kß"¢ª™¥¶½ù°Ä‰NÅj;v€k²½ÆmÈõÚéýÄæ¬Õ<Ùôkèéçž£YM°¤¼á">12€—ö,®ÞÑC6ÛÍÄöâ ‘9kA¾ˆ·¬5[÷üH$Þ¹Dâ³úáÌ´¦ƒ41V½.ÖOèËÿ´ae£j³›¨mY{î·•b.×ÞTdvw=*e³ŽÆPÀJÞêâLü+’Bg¨Qäç†¬±¢?’ÛÅàÆY€kî6ÌpTkVé\¿Â¦JƒVê.Ý#œ8È
Ö 3mÜ­hãú»oµ
åÆù	A¶ˆÖûU(©äÕÁ5­%N+é"Àš]ÔËDÒîRfRìÆ5¾ãiLöEb}™êL d&‰GÓ)ª­½êÑ9^ò$ÏNÓÖXÓÿøVI{hv-ZÓ±A~9¤%BÈ;I[0*‰"UN™Ö©V1ç¬iÖÚÕuX~Ð+Ó*@£ƒ-•Œ$ziaã¸7Q§Ö×™ìÖŽOF"ôFgÈ:VÌ“´CÕUáL2"%3ÃŸ¿ŽèXc:ö»ÔAú#FkæŠ9XûOVXm09<6>¾xç›¿ãmC+°†€5¨ZDÞiDk=¼ù®©B…êñ¯1 M²§ÂG‹o2Aiè%ÚÞŒÏ\«59Æô[[¥°¯×‘Í¨9Hãö1úîãKòÐ¨|¼@µ{7ocrMIÇLˆ›>ãhjú{;?7žƒÓ¨}4·ÓžÍ‡ª=–­J$*ÌDûQ­®dÌ¨€t7”U¤
×X!7UPfÙŒrÒ<3Îœ5“!×am]ëZ×OÖ²@šËëý¾Z¯¿	Å×­°Z]È¥5k-I Ð‡ÝÝ|xõaÍPÍs×NHÏÈS#T„š”ü´æd$…k¬a9iq @=ä|
¹±QR$4 " jîâ6ryÔ³æ
î"¨l•J‘·ÍÐÐÐÎ/v -–P×Ôà>ûk:YSû¡£;O=ÿ<¿zðyŽ©RñªK5¦zDoïÿÑX±:kç'¢ã7.úÕ¹OÏÝ¹£MOAj—4#{ñÆî•…ìÄìƒž/Ì]=âò·x»õu éã‰éÂ´¶i´³U¬krÛš¸²aƒfcÃ“Ø <tgˆ±w/¤FÄ £n„Bª©²8+i"E
åLsjµÀX ìH›<ašH‹qÆj”æA›w/Çší¹mqGÈ‡Ñ²|8Ïêìh)”¦„‘ÎZ¬ºzãEpìâþ‹=ñÂ	›<$Ã•ð~fbûë±‡:qÄ¬5…ÏÍ_˜ÿð^êÈþN%Ë*l4)—­MhÝ¬/öð•ëE­qäË]ÖJ1"ÙÛIƒÄÞ©¶îÞ“5­V5J$F%ÇVfSs›¦ù¢²ŠÀZÐVÿÀž5óÔXV¡Zà­Á>#XU+°Æjò­µo¬YGèÄ‰o¹éøâöÀ~@)â›ÖV9kÍ›7?¼ÝÐì¹§ŸÖ¶#|6	nÛ9SaüÐám;¶0*eÄF aÒ°VLŠŽNÓRì¬¡µ5ÉY Î•ˆÑæ¨kÚ_øƒáY°²‘€3[ì Ù Nd±pž©ÐMØvi>HqYâÒã@¶ìÁl¤²¼0ó}F>®9gÍŒµ÷¬	×œ³æÿ$ˆþr—mÊ,&ŒäxfÓ¦òZEŒl6kí>ù°ÐšÛ7oñÍ­*8Öói­Xõ÷»jlE¬ÆÙ
´•’Óã ªE’Jnâõ#œ,­Œ÷ñÊêïÌ1Ê>¬¾`^5Ú•ÜßU"/¹"ò’7÷ÐÛ5`Z®e7FNñz¸†·æ—Þ²rGûh{×’L]ã[?þ8vVS4ï rÇRÍVÐÁu¥a“©²±CÖZ×É3éŠD>Úq0Ž¹k]“¹^^x†5;Mµ|»p__ß`ìP
¯üÆÞ›P¼ÈçcïÃ=®ÒÁšEAb­=ö5˜ÆMg_ÿçý™|²ýÆåo¾Y<÷ý÷‹—Ekç­ánÃø>2ÐzkjõµªqÉÒWžA–¥­¹W¡n¾7 M2<ÓöìY­8ia&&B(±ÕÐw&/J„Þ4tûæí›èöWçÎ»¡jŒT›˜O,|OD
ov‡:'¶††‡ëÉx2¡Ä“Š|6$­ü+UHÆ²F&¤_ïˆnÆ$»¬…½p<µ]ûClý$ÈàÀ~
7‚ ÅiAäô:¬­k]ëú)–AŽ{Un,¶kul¼qkd»ÞûòŒKÉ¤†¾Ìc¬Q;x_!¤#6m8½º5…§öë“gZ2ÉTëÞ"#-´©é¨+­É8©vû¾”ÆfŽÖh5«ØØ¾b²Ù=íØ61J"å®UÐFÑæ"0"÷ÑšlIŠ*	ôb5—Œ27ŒŒóGŸå4´œš›4üÒ‡5Ú³9îî¦äß†„žE³#³çÏ/Ì&ã`Afw¦îÐ©6›ÏOß¹qùÒ¹ËÓä'¼_öt¼©eÍ25$Ü
!UiŸN€5¬µSs§v7ímÚ¥9XkzÜ9kÛðÖ ·J
á4ð‚ÍÉš½mœïmÄa{¼Q}k„øS)û¨±R™6èL‰åL kkÐÄµ¦¨þºÐ[@k0—öñÕ°f1ýÜÏM@fFW‚‰k‚5.s¿üÐ…HÒ¶	JWõ‹ùwÃSSŠ¿ÜÏ2Ò ¯öµg¾>f¬vL°†·¬Ñ/X£cg½çâÅùüè'ï¬¥:¨Ý,«E2)>Jh¬5óÃ¾m[·Á¬oMxVÒ´ÍŒíN÷X­;í1<õÃB˜iLØkÃi{‘±Ñ6=Í<”ÿL
•–^¨RÇ­t÷õ¬­6ÖÐj\ó|%E÷¬†K†„h¬¦£kˆ˜HŠ-gSÕ<ûþ9#hØã¥5ÃÕ¬f=kO<õ¤…?BhXkûök†jÛ¾ç~bcmäÙíûžU¼ÉÑShDÓà¤úáqÜ6`­¸
rµµ¶vrÿê4Hi‹™iAÍãÌRpJ	«ê-R³§þðúj}ÄWØÕð×^ÆY„ÀNàgfF˜‚I#óàÉ]Ù<CmâžGöl^ZrÉý®ÒpiÎZÀk,¯©kÍ¢ûŠA­(7Äþž˜:Ö6ÀCâûý;9:Cl¼]@lþipæQÛÀ†ZŸÓVÃZ}Á9jn+|†‚v5I³ÕTŽ¢«WZåéÆDo¥å¥0§#Õ.mTø£² 1ÆÛÝkoµ@Mµ€…‡h~Â—‚¢ðSÙ
jÇ/d­7úÁ2&‰P¤è§õ‡Éó×Ôµ4!FS4E[äc*—¬Jü5õÏéøÆ”ÞÉÎ¾Y/¬vüàÉ_w‘kÙ×Û|ðøA+Ìõm½CàYn2«2û.±ukÿPŸæ‡Õ9Z¬ª†.ŒŽ-/ßZžÃYÖ¼ˆÍ•äÕî1éƒhÄ‚ÐhÆ1˜$>=ÞuíÛwî|{XaÂ~%$µR½|ìjõvtõˆ£¬ù*ž)~ä—Ïw+~_9X¢4¶s>ã‡½î´üÑ­[Dñ«-ÍVˆvŽ\~ôñw8iNWDe·Á²K
è¿{åÞí+÷nbÿa£iô5i"cUù©Ë7îL_¾|ùP|v>46VWnoÉÁj!e‰€j¸‚iTekÆ6Rx+ÈœÙN|­Oå¬°ÚÐ î	`©ÉvÓÖMÄE¶_‡µu­k]?9XuÍj^ÎH}Âœ5¨kp™ýl™Ä©‚ ÖÞÏCªçç{ºX£ú®‘ÒŽ^èl9ó«OÂ\‘ˆÖUQA ÛÉ3ñˆµŒ§Ùm¤RÁô©µZÓZŒßŠ6)¥*<öQê"Û•ÚŸQžt'§í‡Þ‹)–5Ú`5S	¦T;çêéj§ê“?²0Åz`M¾Öl«,ù£‹AS´¬ÝˆÇKÊ§>]¼ó—$ÍSÉüì õ‹#‹—ËÙ¡òúSsÏ÷@dÊÎÀZ£²Ö”^‚æ˜cÔhSóâû9¨|œžµ‡-’‹MXiN Å¶¶Æ6%’4>c`µ¡Ærè­’Ž50M ÚH¶HTù)DD6C Q•ArvÓœÓ…ÀP+u{<KÑ™`Í§µR6ª1eÕEz“Ç&_MŠ¬)´³E>›MÌ¶pNa3ðgn[/	µ·÷õ¿pL°fñöÕ0ÏüNÀ´=ÑŸõíšÏÓ±6Ô‹¨MŒ–&;¡ðLW³Ùim¬ [œ¸~èÌ+dE:å\É"íMmØ¤5p˜UD2 Ü{ ECRÙ‹6Ôœ¬QëZÍ¶Ùv-í<K%*Ãõ£ÙúH¡¤°â¬YcAlt\Œj·Œ©±±HH­~§šxÛÈG’rû¡5–g5íÄvíä‹¬“ÝŠä®zrlg=kÛŸ{òéŸÁi?ÓæÉ§žÜµY[Íµ‡ŸÛ·ýÉgŸ©ßíÙ{+±Ç)…*no=¸ “Õ^ŒŒk÷¬k{Ü~©ÈG#"Ÿ¾Ù
ÆXñ"”õ@X{×_L7¼µ1ùV§ÌZóhL8²i†­ß&Y e@jvº«]âOL´¾œ5ášc5m•³Æ¹.½¥R“µæÃš_\Y¤€Æf4YMWèVÓŸkfó¦JÝQ¬i#4ÚÖ<"+çEèöíŠá6¾»Ñê¹Õú6[m©2 %0òüµÕÂV‹mªÖˆB”ÿÎYÒ%ù‡íÂ9æP—i.Hª¥‰Ã°Vj²"È9õ©ÖKñœ5Áé¹|¾ßXEÑýš°[Mk’á%s‘¤büÓ©8÷Ãjšbí‡[2©3üÕÕæJW®³·7™ÁFë:xF]éÛšÈtüêøÁT¦³.d“×rák™0˜Î$à€p®3Tmís)?œÏ}¾üùÄÂÄðð5…~$Mk‚5ôµøìKKyÃÒ	ÝU/‰¿÷ÄáÿøËu:Á®¬ô­ATØ_ŠÌÁ{‰×•çÈ9; X#›ÉÉõ?ûÏ/ATê«ô‘Æj
@Ô¼É—gjŸ½þ:–eñßºuÞ0í4³¸Uòhõ+ v’GÕ:Þ¾}éS:;qåÞõÅ+×§(Yœ›X¸tydval8o/kwoN'¶ÖKÄbét8Ü×ßŸ¨Pü£†óÕé¬Îƒ56«I‰Cñ«'/«ß;O$úz'€™_y5dÎšÍÅ¶çÍéBVUòÓ¶®—A®k]ëúéÂÚðèp^ÊÚÖe?ëE5$&³fµŠ*Gm¾³f›"Â"‰ŠÈ|÷/»w­}íxÍ`­¯õ$Æ{g:£üÉŠôÉf¼³®´÷c‚µ4™y/Û§­2IF­iµ|
H  HÁ°š!E±©¦½	ƒ'FÅJ»Vyˆ¡=ž´DDúâ­ÜÎò`k°ËÞ#ÙZš–5 X)ÉÙ÷'Îž?w~aw,^2EŸu>“I&ócáñÙñ•»ÆG¬U–15Hîï¥Õµ&XSl={ª'¬KÊ6’(â÷›±¶‰#9k558iWSÙ#.Û6Îj´ exk$=ªyM´†{†„¹lQ –™¡™ßmÍ;[¹„µÖØÐR²‚jHû’à9"9Ä£ÚxÌÒøÛÚ‘!èó2Ö¢D‡p@ÚGªUjˆ
•c´­yU‘FÌ­ÍÀ×ùYikdÛúB8žüzÿ~ûøòzâÝ6ŽTåsÄƒµù?ŒòevX´¦$Çxj2	õ§˜«&Xk±üþvÂa<Xóü5]Õ±ÔD^¸èL³pÒðq}V¤9hóí6··@mXnŠöçg	pÛy&ã‡jóõ£s£Iì¯gí¥U¾b·–³v(¯²BQ/ZÜ/ìfÃeŠ A8þl¢5òš¹cÇkÅþ‘ag:/¿âÍñ'¶¹œþ§¬ýÛÏžÚ¸9Õ\s²Ÿz„æ1:älJ€›¬fÓ°ÙµOèG­oò/¶Y³SÎZ@jøjž–vbîšåC¬¦YµjæÚÍŸ®>€µwWÄ¡;»åo¸p‹bk¼¶|ª6ë†b«Öp%¶CÆšÌW“‚®5#»¥=›gf¶ð‡Þ³…2H²ûý–5mz~˜Éb² H¿Ò•0þ`Êšá!ÀÙ×@ÓÊ%…‹ o4¯q¯¬m-µ ù˜öC°–šÖ~ZeNc_(l Õjò(Xh­(2†x xVVR^šŒèkùlÄ>:XKÄ™ÉÄ\{lK‰«évë“²þZC¿{XóQµ¸
’åBÕ…çG7*AV[CÊé¯²º_0e™0[îQT.¬ñ¾«il¶`Me]ÊN5ÿêx®:”ë€ÍðÞ2qMRëR0dGÇdWº¯:ßŽwu†;sbµ¾ÎLg%øÁ™ÄÖœ	WW(vâÎSD<¶üúÄÄòB>?ÁŸÿxùe-_twÛ—~_J š'Ö>x#œNw4·Ärß^þ¿‹Wn_¹«`Èë×5xjZ[Öô	R!»ÕØ¬o>øSÓôNÊóvâ„O¹ÝÊ{ÔŠˆºG¯Ô‘ÿ%l¨µêYà3ofšr1Ò 4V ‘\þ{Ôî±¹iC¯1Ñ¡Èvlùöõ©©Å‰s—¦¦¦²±ñÅé£S³Ó¼Bçñ8”×UGR8—‰\Ž«ðŒ™>¤º„]OŸ‡Rr:k,’·®Îï7õVoüýïÿZÈ<·Á× 6ƒ4'j&eÎY7›ŒµÀYÕÖË ×µ®uý$amÔp­žE¬–à˜<H}ïåU6Ô…°Õ‰H¤Ná"ÕU6ªTÆŽÛ|Ÿ1Xk'¸a§è´;Mé›Bû#±æ“Í)’—“´ [²¥K©Hšë¢€vñ[«LµT`sÆNT)ò1bƒl¹·«±aqŠ‰éRi,ŽIq™ö%H	÷‡Þzï‹Ï0ÖFGü•ùjÇL'ä÷3Xëö`ê‚šOó¶—OÆb³w*ãI&`ÿ„ã3šº³ÁWáÂuŽ, 6EŒ0á”Ÿx‚‹e§+6f­°A˜&5iÃ‰Ò wª’:Hª ÷²ã˜8m~T¸ÆZ[y× ·z­Ö¢ò	¹5˜¸¢2H,5¡Ù}=kðWiæ£ùi±R€Í`×e‹D9æùkÔAzâÜbù¹Ø*ñ0.p]ç>­¡¶XKŒ}ZŸ<"Rýè/ªªýõË*R°ˆe÷[až7ýYhôùy¾:íKô¢Žˆ€þ]ýíÀòòøXØs­ÅÃ4àKFÒã¢Mp\[9æš:WýèÍóàIrÆJ}©f«i,ç;KùÚ¼P†Q\¿±~ôB^czN½TÝÏ"¹ýÜV÷¬qÖ@´@P™é­ÞÂ5HM´†ßÇ?ø5DäµwPI7°VÜ6æˆ‰5Ðª(H9kOì{nß¶í®CQÉ‘SXmûµgŸzd¬ ‚ÍðÀ¡ZŠ7±Ç³*ŠÖLkÿÞÅ˜EÀ¦RÌ•
È-K›Ÿñ½µÍ#Æe>¬×@Ò¤†€+(ki³ª!'Š8/:»¥U[o/Z“ÎŽ¬™¬ÒŸ“œÜY€l~´ÿæ=K…%ý±÷lQ¤—Ù#Rëaµ)knñY-À5£µ·†ë¥€×+þ0à¤°4ÂŽ=!Œ•ÊwÖ²µôšÊÊYûQÁlß²°g§%€5V¤ãÑÂM¿¦7®„(H…÷——e7Âd>­qT$›³¦%Ñ¶¤,œH–p•{¸X£}v£gØÕ,´¤ÚÔ&G_¹»-¥¥Ù9åÐZPi
`mŽ%›%½¿,FbÑZŠXN?K ¾¥“(„´´~î¤ˆÂ
!ÉISü¨Rzk²ÐRÉªLWo¸:Ôß7t°™@+Å@ÇÁIEf&OÖ…™Ý›;~œ²Iu«…CýÜ½+v]8Ciù°NXÁéKôÊ¤úpœn^øœÿôþ±üù›šŒMUbï$'¡ÇÌ#5­¶7ÞØß™&J«%=0>{cáî½+7foN_‡ÕN¿»°ÌÀz»q¡Ý€e¯êÄ§ñ´Émã‰£ã › cŠÇ.ŒY^ñËÕ¤[nª5&š¤™ið àÌ‰HþÛ·)À¦)GäÚw÷nSûHÝÝïî]?w÷ÒWÃ·/M/Œ©rb”á9GâÉÜáÞÞCÓYË«ÀføT˜ã\TëM%UgãOà3CÈ¨ËÁÚj ùâØ=4À4œ27X-<ùêÐà«°Zï` Üß?ØªÞßÏ½Õ`4«‚Ýõ(Æâ(Íl5-ÿ´këZ×º~ZúŸ8k*ª¡D}=È¦oÄ¬ÚQ–¬VÇ6I¨×ÚµYoŒóe+´6:ÏTl}†œ5pië­µ’/ÒOSŠ"XKWÄš›±ÇVÒ˜ÓIˆ­µ+EÓ»¦Å¹®œ‘´ˆÀë¨jFà@x9bµØý´ b†iÚÁZY8©Ñaú8¡ÒÊäÈP¹ùá¡öd f-Âµ/Ä,Ñîîn«ƒT„Öû·–OŸ¾»˜çCBínÊcÐZxzz„
Æ™;|Uøx(cMë‘l¶	dó¾=Ò3ZB§¿rƒh_…¯†vk{÷0BQ¤‚F 4¢!élã‘•MØiÓß°·Iwøè"	Ó8kÒjƒ²Ù8¥H`êLEí£ô¬™¼kLXó×ü Hž\ L…Oq7{#[ÁšášÁé¹ÙÅ8W"ñ®fþ‘x ?Ô‹…7n=põ"°Æß_)¿{è±Ç~û;¡Ú—‚µcXŠà­š»˜ç¡„Fbç2¹®VÅ¯½=ØÎhliˆUCÚpqškM¶ÃU´}[ƒxŒ{…djECœ)þ;E~œcª5/Éž»Z[ðã¶5º>W/fƒÖæçå¬­fµIƒ4g- 5Ûz´9TC–Ö¯k×šUüHSY¢ü÷í;ùo”AQ~äÚuœ¸€ÒÀSOQR¹ïi±š²EØ;nc­1_íÙ£[Ù³„±&Ãod\õÎä;R¯
BßY[û7_Óàã×°¶‡`ÅÍ{öl&@cmY#ª°ø'vUx†ì·ŸÙ¬jHyv8à¼s¶ä€Me_,âµåiý l­‹K©Q¤ ÌÇ(Ûh	ÂýgölÚ½ô¬¶g`Pó­5—0"Xë¦éF	¤¡«Ñš_™-BCÄ)Z}R®1ÜÚ†JfdÏÿŠüÃÚíµÖüIkõXÿµYT[)j«§²´¾¾Tù"¬÷­Ù)<VªC¶DÄ,µˆb!å°…e%euvµT#Q:VJ”Þ‹fç~>çò iRCA8FP‰æª²sÄ‹DãUUkÓ² H_‘t<Bu¤(Í.'ãÐZ’ÞgîŒçRì:(Æ@8k©
Á@H1Xûû&Éæa‘pß^jâ™tÇd®ŠÉƒ““];REæ¨‹ÂzË…3éx®ŠÚ»ÁÁPˆÐcñ‡˜­xÈ³ÞcŸßzwaöÏËüg÷0ËëZ³(GÄöpí<`Ûßÿv_8Ig_dxº=uøowïN/
ŸðÖ”‰,æô}t´8þ6ŒÒ‰üÜªE¸ÚcÕ=ïAk<•SS5A¨.ß‘å´Œ:Š+]+š†[c›YÎ#l¦¬Ç¯L†i×)€¼;‘¿·}z~69Å½wïòøÅirDB¡ñÊ ‡ãêBˆ[*&/³£uU†d‰4O±`-•î´^v#3 Íƒ®5`q1èJó»Ö¼Tþ¬V¯¼‘ŽµßK¯½úŸ:††¶†††ö¿ýJQh¿~€±Ú¨“jÃÙÑúïÿm]ëZ×º~b°6J)¾©^J0¢^V¯’2Õ¤‡ëô*¬F›O	£
%Œ¨—G°XkZÍ[û_ƒé®“Äö«'­%Mýc*Ow) Þgµ´œroºNÉövmZÚSÜÒtªÅ@6ë¨ŠÐ.P8¿‡€‹(FŠ™)‡@”T¥`R×T,Ø@@»:ÕZŽÖòÎ1–ùˆ&VŸð¬5•CÚtQXÍƒ5ÍÄ~km\vZgÉÒH>Ü™œ^\¼säZÚÀZ	eFõ²×ô&ëÂûõcÕ …·†TÝ2yœ‡npÁ"Ú²É‚tˆûƒÈ†ÜÆÕ&ì7èc­¼R°FB¤Œ”€nf­Á+ÛvBkþ¤5ñŒ5«á¤)Ò™k¾<$ãù)ja˜×:×¬0³áÖ—&gÓÐL¾ZJäÆ¹dþq;2“Mß”—½ðóÐ/æ Ÿ8aŸÖ~ëüczJx^æðÁc®*ßsä³O†B»Þ¢u-×Ò5Ù;ô
&[+r¼†y×ÖÌVœÆÖ¬¶ûzÒø+‹Î,÷Q•­/kÖ¸f`ç$œ#4Sç@Þd,Îž@oLh­­P¯§õeµùQb`ºý"H-ESÖV[5[Ñý§æí‘l5ØÈ˜íXÌ´mß5æc£…ëc²múgŒYÃyse«²û ]*vÖ€µ}ü8˜Ì7ÖÂiû€5ŸÁéÖ¤ÃJì§±ÊXS9¤ÁZ1':ZšÖŠqížµ-KK¤uÌ Ð±qKK3”A¨fE@Ö¸ç‡Íp>Qä«v7ä¶îèÜé¢ªHUDž¦ˆúÔ·&Ã®¨±(A?@5Ž,¹¦0#ºÜòÌÒ[ÝrÖ´ø¬f7ã4ç¬iPMÆšsÖj ÓM
àÍ®¨‹Î´©¼ ¶%»g6Ì¸Kz‘è¬ý-kÈ÷ÖÆVÃK«ÍÖƒ‚µÞ<ìRëa+1@s«Q1¬Ù—=j\‹€c1c4³ÔP8¡,¶’R’€\tSK
Pòƒœ€6¼wÕ2‚Ö~k³¦žµ9ÂûyÅøÿÀšÞ¨ÀD‹s¬Â° ¬m„W²d„„Wuu¤9†í@1£µ3P…Þ¯Â9ûÎN**)“Ìôªê1’ëèêàÑfò+Ô*e±ýjZS…G2ÃwŠp^fh-â3¬xO³À3še“›À[[VËš—Þÿ…¤$Çk š¯7´éÍ™·‡4“-ß|Ó|øo‹w®ƒTX§•ß€5ßûTyÕ/ùàS¬v@C¯ÿúÅæ#Xkê©¶¸âHqÿOPëHÁãÝëW 3“ºÑ>µ|G‰3ZÓn~õ©Xí»…Å{×FëòËß]¹~nj|öûóhñûsJ|ž:7Ê3íº.?;œëRS±ž™é©±­£ÎÇÒ½è5»ÓšÕ¸&OŠH=å¬= hD{´k~E#ç8fÖ®%ªû^}­·zðÕ¡þíßê%HºBHÛû¬¶Ë’ ípÖÖµ®uý$µ¢¡Ø,Ð/À¡*oÚ°V‡‚pdoÞ}‘ªÑni•µ®!`­/u†Æª…lÇÉ$ê1M±JGÚ³&ƒTš¸1R!“^OWrtLA[û§bÖÒfADÌZ3ÅTk%ÂYs!ˆ„pÉ´©¿ëÐÑhÉü{ÊD¹ÈT´žcÀƒ­Çœçª‘IÃ·ƒµå‰wO/OåcŒ ïŒ.Ïö%#Ã7nLUšc ÊÚQ6¥àŸEÄj>¬±;Áý¡ÀÑÊÇËåk{µØöŠÕ´ÓE‘4U¹’=u¬=^YŽÆ¦|o“iMà¿³¡1j™"MEkVé`­I\æÌ5ÿÀºI<5£íiÂ.k4 .‹‚Á{qg®ÅÊÒÜí|63=Û¡q·ŽìG”E*~{äH(Ä__¶°¦k”ñß…›³vdWvþâ{Ã}ö|Ö;Ú?ÿÎÐÐ †7õJ“.²…V8eø7xmjŒÆæ°É2Û ³ÕÛîdÏ/…Öükz¤ýªrkü·H'`”ÙÖƒÕ4H[´62RVÈ×"ù,#WzÖÉXŠ5vvÖ¬Ò6‡µ ?c`ó“FÐaõ¬I×°ÖDkÍ¢¬k‡Õ±Æ¯˜~€·Åní4H×³6@hÉŽ7måhû6F­¬=µû‰çž|äágMG‡a
 -¼_à¦äþñqÖŠ;ÖXí!«Ó ÷PÉ£ÕÂgn¶öÕæ¥=ÏÜßÄ¦Ë1rê‚M\{ý>Pc	tÎÛqÕ‡6ŸÙ(ƒ<%.‚øLYØ[Ô$&Ô> %NÁe¶#
ƒ,,mÚLñæ’zÖ‚€Ý+„4^ó}5/b„®5×³&­š‹0›"*•{’E8k›—fx^Êe«ùá´Ö€4»±ØeåV,†b¯¨ L«/)¬ô¯Ù„sé"¥‡m%ÅMkŠ|T!$©`šúÃXI„$²%KK“	hM¡±¾ÎxIi’œû\Œ_ñöGùºjÎÆ¶ojŠa)kŒ8×øŠ…³í¬9kÉ¤u±U9U¨ðZWÂé.`-i÷TdxwQA$°¦ÏõÉŽ3gŽO¦(à@–0ÒÕê=NÑ=?­*Ù99	Ù¥(‹ìbhˆXíd3…ùaQÇ)‘ì‘UCRi¿óèØ…*!'–ÿþî²—1òò Ð~¬1iíƒ_ì¢ü‘Vû¯·ûß~ãíLº=uh Öú—Ÿé¿~wö¨vú4•¢5ƒ5ñ¡_¼Ç‹ŒŸ‰Ìe{Þ`í`-ËÜk÷òYœµ>º¥&µëÌ´ÖÐÝëÄ;^q…ŽŠÞ¿tû´ÆJµã§÷Ø_¿IËÚ]J1¯OW%†ÞšŸXX8wivbañÒ¥ó‹ôªõýiaaxlv*_1{#7>ØOù§æ¤sÓwò¡Ùl…f­ê_"âõZŸaˆÍ* ëÌ\mïÏñ}4;±­c9.zÌ%9LcÑeZsÎš6C‰É×^{m¨ïÕWúBûw	ÔL£»ì8Ë‘8kZ×am]ëZ×OÖÆqÖ<Q€cÆšyk6<ÅÃ5}¡¬i,6®B‡æ»ÿ¥§§Ö¼4H¶,[;4f\#|"ÞJÛw:FÜ»¨‹%5›f‚ö4Fó°  Ö”â/oÇ)ª BÎÅYXæH©ƒ6ßTê$kÙF–}”"ÈV¡Mƒ™Ojd>ûlž	kG¤ÁTì¥#dmñ–(	ÖÐ-ú¿óáX	ýj±ÆM#”Ê„Ã‡–6QÈˆAkå…’åYKq°ö˜M7}tÓ»-ãž?U_RRhkrµR¥ˆMÁj^S1$”¦¬H%BÖl¯iªÜ@#jÜdé¯Ã&X­’tÁÙÉ“;U¨nÈOT±Okíî¬ÌóÕÊÖtì`'N'qŒ˜ìÎ”&°Åißw‘Q³;gŸÖÒ<ÈYròdîJ0›•‡ðWÓ¾DìÍZ{ˆ¯Þ÷gÞùp®vð“O>éU	d?°68Øéëí [[|Å¿|K[D57M­AtˆN°ÙÛ©“Eû‹éà5N9klcµ†Å¦&]'[DÍp5'_|qÖZ¢Ih-Â?pac½ZÖ. k¾V;k3òÀ9k¬j~ ¤hÍ…ŒhË*¸Yj?³Õ¶SÍ×TyXX) ¦uÖHƒÜfk;$m]d¿H­¦F'O-Õìxú9<=~ãgÕŸÀP“¯ªl‘ù#Q”¨i»Æœµg¶ìØ¨€œ‘‹6ž‰Â„mÏ(Ð‡ðbx¥aØÐŒÌµú`-°ÔŠô1·K¹™¿ÆÆ«‰<k¼DÛšgæƒ“\=ã!¹vAü#—=ÇmÚ2bîÚnQ¥•AsÖ>ôn«±¨2ˆƒ­ñ;ô#}¾š²[Zñw8-mÙÂ„µ¿j­4Hh¬ˆÌVÛ¢&¶ñÂn0ÐŒârì:Ñ‚Ôöüq
åÓØØV‹/‹a	#Ø,f)#œÑ®K^>—bI!i÷u¦Úc	÷)¼òÂ‰ŽRJ@ ¤ÁšÓjgMÊÆÚ“§F+~h¦ù¸ÆÎð,€5G8„Wh-cÖš%ö·Æ8×Ö2‘$ ‘ÉÀqS#`D§ÕÀQI½C½Íd]%Søg“šÉŸéËL<ˆ³ßuø‘¤cŠn[&ah$eè–îìÄÄðÂß™’¶ükè½_^=p‚ð~ôÁÖý|€¯öÁ½az›¦µÔYœ:4¾8õmóá;‹×¯||ýÖ-Wéfc¿Œ¾xó¥—ô“E–yE¡¢_­[oLÝä@âªjXõÎ!5ÀYõãw7¯Ÿ¿rû6¸¦	×—.á©É^ãäî­›÷¸û»[×—nÝ¥qnyxöÏó[«G€´ó‹Ë·¿_<n!?ø¿góÃScÃSÓ¹Cé'1$Á‘JõJä‡³UU¹Œë6Ïå”ÆÒ—!•%¬/rëVÜ3“Û;¶ò¯y—< ³½Sß¯y øgæ¬½6ä*!Ñ«¯¼òÊ {¤¡š³äôKðÔ´HYÛzäºÖµ®Ÿ¢þÇøðh~|ÜkY«…×@µ<¬–…4lÍ“±T²6¶6›âÀ|OwÏ}Î|æãšíMiîÂÆhVµIW3öSÌ¼nVZsW)b‹T¦FF`5›¸f}R2rHë:n›Uç!ƒ5@ÄS )jR‹Â/¬MŒ`MÈ£p÷†T{QË=û_8ñ¥`íê?ãƒ9½‡¾@Xk^ïöD>.§œ(ÚµÇùz9Ò™_mZA5ËÄÎÒÇ?§¦5k¿Õ @‰w[žœÄ«Aj*mØèZ_4UVn ©gp05ªæJÃg{\u‘m
î×Œ1PÕAB¥„^zŽZ´4—<ùµ¢kÂZÜI:7M°f*›aÊxK	Ö8÷aEŒŒÆÅj9¦—Âi/ìò0ø7n&¶ƒ5Íyåª	§žlŽ|‘TÁl½©^)‹$2©ÞWk­mÑd4ži	‚E$WÉ¾Eä¥£ -EGÿ0æf«AæeQžžhTOÓ„ig˜±Æ“	­ÕìDmG¥+‹5–”±Ö±ˆ‘bgÍrE<Z{p$°ææ¬ù2£,è[óÜ‰X­V{q»\¶æm×¶9XËŸÖ¸óÒÚsÖLnÎÚöm‚²NÛÝ¡`m_MÍsOÿ‹€Û¾Þ5ûíiZÇ^Sb?¨±qàæ¬­Ž7Ñ²ZºSë*gZ³ÍfñÏìñ½´™gt×fÿLU ‡˜8ž^öûpý;¨&iÇÂ>×¾ö>|fÄÇÈéB“nÖ<xò·ZYFf|sçŽ+ß4#†÷Ò ‹œµ‹~¤z×[P®Yt¿þ:ý¾iWTné<>‘x™å8²Ù`ÍîÀ­†µ)Ÿ×¼ÅmÜ™·Ñ>Àµ‘rüAGg…~j0bM?{/ÛäþÑj¬Á©]‰Áe€™ÌŽh¼ S=MÇW¬<šäÓ{,š	“­ž*	+yä~X++»:GÓÚÜ\¬MYCô«ñÏ /‰ÙHÙÖZ…d;w”4ñGqèÄÖz×tw¥ÂÖ"©Ž×âURGs:E¸Us×ñ3¹d8T—ìèâÞõ{™L.	…rœõ…úr½¸nƒ“Ç»R!ƒ
Ú¤4›“ûf=GÒg’ÙløÏïþýÝ[Ë¯ÿC‘oª|‘÷@åA­íRt?7âE8èO§xe¶ôÔ¡©»im=|ã®2@á,BªkAkÆj>­™¿†®ÚœÎ_r]ÃØÞô`í#±šÁÚ%e=²ÞcsóöbDÌZ»}é…*†¼y…áj·®Øƒæÿ{çÛvçùÑÞãÓ>[É‰šXUó OZÕM™{lyºU+Bã8Bë \‚Ãê„bJú‡(4åœÕÜ:w8i3¨ç¡++3	CÜ0œ
Ý^’vØåÂ"2ÊjƒˆFNº×ûóýýò«I³H÷åíß»ijfl¿üþ|ÞŸÚêÒo–¿ÚØX^­ñ._[ZZZ]­®¯NLT§.—€µ¯ÿ©Z©LÝ¸U,ÞúC1r˜è½;Ì!Ö˜Ô\H§˜€VÌdAb÷é€ÅmX£ˆô®¢ÈÀbí€¤E‚,îƒÕÖ®ÿ—ÿÆÍ‡µ—‡ì>®UÖ¬
ò°VƒµgmG;ÚÑ÷Ö`4ÁškåVášŒ5`-Â‹ïÝ¦)¬—}kGTáˆªƒäs,`Àšô¨ÍV±Û+ÅÑ¾Á‹GzHé'i‘«?BØ{Î¸:GÒ)Ì_K™Ñ\l”„Èd¡%Òk´¯8 Ä¡K–Ïõ×¡GÃ]r‘õÉ8(£ô{«ä˜ÎµîKXûæD«!…²‘9@WÕ®ÂjÖôº
M”„š°²ú»%cÉ¦t1±k÷Qõ’ù°Æ†R:Bæ=cüS&Gühœ5
.-¼?4€•¶ÖpÓÖH€”ŽkJê½Ñ¢æ5$d;vð ´FZ?èfu`ÛÁ¸%r´wÇg-PÂ?°0ÈdC£m$€3îu‘NÖ$
 …Ñ*AM@iq‚Â`Í7×’ò23‡Ï¼Æ”µs'Nxm€¤ýÌ`Í ÞúåÑñ'k“çŸ­¨/T¤)=ÜS¬ÆC _ÝkVk¾šsÖÜa.>à°Þ ptÈ¹mvç ÁZw¿ý~ý!>Ç3&®S=ì¡ÞCûE1í¸‘áN%‹L«QÇ;µi«mMîª ·ö¬	ÖP k&•=´vˆ-[…2Þ¿¿)k‚5¹]Š‰|áRyÊÑÒöÎZ=ªéÑÚ\z¤t?R„„Û=…­öHû§O<ý±þÊÆ|»ÿSåÖf\^?¾õ³v"XCÛb q[~ƒµ@{w?=o“Õ‡äÀL¶½*t'Wöî=©é„ä~iF¨3#X«µ´:q¾üî²_é¼µj›Á©’Ê)Aœ³"·á„2„2jâÀê¡BGX¤ç¬Õõ¬½©iËÊ¹ã5ÉRsj[¬µúÁØNSÉeÓî=Mnh·sÛôP•4QiÁê6vànnñaÌÇyAš9Œ,’Ì4 Mûi8lZ•w÷«	ÈLþ‘’úm0/*äê&mxÓ`Z*Ê”å…î¾Âpi´GMÁ±$5Ó£ßÊ+ ‹1(€5ch.‘M”''Ëê@6ÿ~kIdý›O%ÒÂ7oÈš»ßƒ¨¨o¶ñÎ‘¡\›»˜ÙÈ—„×2Ñå=Y" y{ÁIåHm…¬Šº­RTúX\ˆ”°ÙÒkÑâõBQiµÃÃûÔ·†ÂüxJ&{büð™õwéZÓ˜4ô¦×µvkJH-ò°ÆæHÔj
333ýËŸþ8òû•¯—Ö?újcå=äÁšW
ù¦±š£5ÇjlpÙfµSïÿœw[EökªŒXí=o_mõ¶a²¯T÷H!¤¢CV–Vßû§Ïo3&€;˜pûs9oÕ©¥júÖÆÆË·—&nLTªŒR[Z®FR•ÊÐØxiæÆÊÊå_ß'V–"*©(Í
D€¥"PuÃ4žÇ²IâZZ‰eLñ$&Â’áY˜ÛÝ›å7Œæ`¬:Vcë)B¨ËßÁj‚5¶¬ŽÕÆµÈ=Øþøa÷k¾òÜÊìgw`mG;ÚÑ÷Ö 5Cµ<·N›‹Nñ[*‚À2óÕ:Ø°´²Z>W‹*cÊoÁjJAB5kZcq…Ðaš½/fÒ‚E0Ø¨„ÌªS-Nö`Ù„(®ÏúÔƒXZÎ™›.i¹$oäæ¾ÅtoV<†°Í€£§Ö¸±uòL&Œ9jžr]ÑH­Vì)ÖÎ½¢ÌF£J öÍÕsÏn:kokbµjSË¥S±á¬Âò[‰¦¦U‘]qê"[À4_MGfŸ}Xóœ5>™€€&‹ƒ¼Ëþ\Ö¬æCZ@zô«yÎÚ!ùtÐ›Ê!uzˆØ•B*òFcl9v°‹ÏT2Òä²2šV6šûÂ!óÒî-¥‰ Aì}1j-8Ñô´»aÿ ^°v¬¹ÂÉYþc†•­,5Pcœ?\ Ò^©ÍÍ˜»úÍ¹9ÈLŒæÁšMwõaA¦Ëäqþ¶Pè)ü¯ñl¡4ž)Aò…_E0í!Ç´
 Y´‚[ýôìæØE‰ðdÙ=”¹º¹læ¬å°W»©¾5Z¹*ËM6kû‹/2·.NåWX~Zyz:‘nÓ;>
æ¬Õ·¬áý[{ÖÄ.Fj¬lM•fáý¦CíÙ~VDb;'æ¬Ù êgö?âÝªk«ø¨§Ãúžµýí?~ê)põ~&`kÖ¼Æð5l»µµG~øÃ'Ž>Æ06H„<{å±Ó8k³˜j”B‚j’9kÛ âwkrÖêDÍãš`íÉï·Ã5Í3[s±#kkWp¸xÕT)ýVPíÃzPûßþ`ÍwØ7RÇªb2Àìì•Ý–«a°†ÞšÛ‹Ë‚2E…RkÊAÁTÓ‚ðÔXÙŠÕÎ;Pãf¤ÆjÖÚf¤‡f¶õt¯6ÇÖvÏÏO·ìFkóœ‚ˆÞŸóa­¼à—AÞ`e©—®ø;=ÊÓ—”4ínjQLIÐ¦&C€Çlt«±19PcAŽÕÛ¦c™ý:ª!= jCÖSÅžîîÔÏËM.7Ðï'Œ$Éî¬=ü Ó½« e¬MfûÊ“Ñd4KøÑD[›×î†µV¯R	ÙiºdE’Q>·¥•Kx(sÖ®¡lkaXUsZïÉ“T:²¥átFÌVÍ2H4U3›€„TÈ¨È,U¸~}¼É‘Yâ}Ð¡ ýøäHl+TWX³®5ÞSø~êÑÏ^‡Ö$õ­ý+é" N6€Œºµ{lä_þôõòÒÒòò—+´f°æÓÚã>«‡Õ¤gé£½úøñÙã““ù¼Nª·&T¹þ®õª-W—?_ŽmÜ†Ø°ÐþüÕúú‡ïU§t}iå=Œ5..¯â¯­W–>_^HÜúzeõë/Þ«®Üþzá7—£Ñ¯¿Z:Ð±¯Žf³¥‰‰©KE lj¥z R‡ù¯C‹ZJ_à§RÙLA¨K¤ð*šMz„ŽÈ8ò¨¬ù€æËu¿k¶•ˆv*Ae?ÿ‰Q´æ³ÚOÆ_Öx` kv¤kæªli™¨ÈYû‹ìhG;ÚÑ÷Iÿá¯ffòùPÍ—}Å+PKé+G¥ŒˆÓRì[@Ž×IJ ‹Y*!*µ·ÖêšÖF­qøú‰¡Þ23dˆÖ®ñõe&›PõJ²o0IÏZ?Þ=Àl&«†Ö!:Ú”aÁ×w9UÜ¥›¹˜4hÃ¿‘÷Ó,¹ÁÌ^ìü6öšj!ù,Ñx-k}¥Bªvbn¨üÛs¿ûæwßœ{ðÎƒúÏá‚¾Qé‰XÍ¬µõõV—Úøzi"‰6ë/¤a5AbŠÅD9»ÐîÝ@WçñgÏÐ6oYhjµÏ',t­a¬Qy–ëÚ},Úåtl·Omô«1.#ÀŸ2H¬µc-]2ÚhV;D"F9áÏ1F
¼!ºJÏÿê‘"[%W-‘0ÔT¦ÂGèÈÑÇñd³¤Üì4hM‘œº TÎ¸o¬Å„Îö„Ð˜è‰3‡kø”$£1œ§õÑ—˜ˆý’k<wÈƒäã\eq¸8GíåÒøøåRdlèp‘¼íH®óÏéa§¡Øü“ØºA:q¤Ãöîœñ›¸Ì6ÎÆ§É>Î¬eMì†ùêÎa?âAj06Aêƒã<_MØúPÛ<‹7wòf¯OÍ÷pÖ‚t‘ g[ýth5}}ÌÍcµ³Fj,A¤¶¦^~‘û †Ç§_W“ªŸÙÿqÿÀZ€K‡µÍ,ê gMQOÁk?Öžxè	`M²’Èv~xûøÈÙK§ù{kÐ«±˜œÔ 7ƒ5–ïrÖ6¯£-=k ²yˆìisÙNHñßÓìÕÊ&Z¤dS§xiáMRãŸ±èvûöGZ>
´®)u„ôÕ)Fhä5uÚÜ%eŒø $Ï,(4¹0w·Ý?¿wÖkseÜDkÈE÷s`#ÖX\¨±‘³6ÕYh…ÇÞ|µ1'`~¶m7ÚY1j‹¯^0˜Úö
œ7Ý¤ßOÏOóÃ\¸dÞ4Ýæ¬µPs£‘`¨©¹Ó"!}WÍIÇ>¬5 tº‘­®›¯Æ’ÐXk6¦†³‡ÙÍw%XÖÄý8È†}ÖòoqÖ`Mi•x.|2Ï—A,RhóD IÚ`Í3Ô´÷˜L×ÒÄ*r9!nË²á:1¼©èÁ*/xÈdƒ=½4LdÓ@›:×¿víä…Ï]¸^ÈŽ :4šIwDùÂpäÂÉJõ3ÃÃ…‚ÙhÃølÊëa?s^^²'ƒúÓ­ùrtb‰¦5³Äk°Ú?°†µ&Z3kM+äˆÑo—;m`}ãöÆÌÅjè Òu­‘2”BÚã°ÁöóÉI^l;y·.–¦¦&ÊÕÕÕw‰•\Z¾½°ôáç_-ßþóòÆÆ*Û‰ê_¬WAÂj¥Ê¬ìÛKëKSëÕÚûµ¥Û.ÜZþ7íÃzç¾þÓÇÙK·¿®Vö‘Ì9œÅÜ*s+~S¥ÒP°¦¼™T¤•Ùá‹<E£Äg’+b°;\)ª£iLV¬10caŒ²tPZ°§MMúÛŽñŸH"4¡š`¸—_¶!nõn~ ¤ö:d©íÀÚŽv´£ï'¬Í”­uº[g´­:s5Ík¾8âž¢HŽtUAÖZ+oªoZcac¯G
ôô^ë§¦‘ø~`Mù=nHó6U^‘&’†K&yÏäz¢ÿZ¿÷ €ŒI†´ÅõƒÍÄF	È!Þ·=«y“ 6*Ý8Ö`™±·Ó4?$œûÝœ\ºªh£bÏ¯êÁšo­Îµ°ðÁU5¤•£(¹+>M4%ÆÒ»v%ÓÅbºÅl1tÍ×ÔùãçÑqúÓ¨óSi¥µi8‘îÔÂy8­©‘tìÐ±Í†5²ü™¬f‘-ÝG[Zà5
¥cà…³Öºµiñ>SYÇÚ!…yÐ®2d¦ZÈòï‰k¨®
zN|G-	‹mÂšó0û8³Àþ ‡­1C¤wÌÃõ$g?>q®R™;G=ÐÜœUò< ‰AÐ°ÆS¡Á¹µòØå/×Jc¥Ë¥¡Ã'N”FèbÒF0¾ú¯#ðÅƒ3W
éÔNL$g6[¶Xæ±™Æ ÇßéªŸM¢»÷_Ã u«¸T™ýê¾Ó,ðOW.•Ï7†rü `Ílµo§ArsÚlY«ëYc(6žÚŒ¼5Çjg_@>°Ù<†©«‘¦/\ÓÆÒõá6%ø·sÌYÛ:h­•îå¬Íà Ý÷”™k`ÙO°ó¬ñà²=sé
5˜‚5r Û µ‰K„¡`°¹‚ÈK3Ûô¬Õ‰sçîúæ¶ÀÚ¥‹p€Å¦ôqÛš"=Xkóçbça+ÍÅîÔ}—Vý<_"5n¶eÑ¡/&½óË	fbÏÒˆ¶{?ÎØ/ï'÷Û_ç°ÌN‘ðŒã@JªÜËåò[ŸˆÖN¹ì~»9gk{ÍPÍ‘šÝ 5Ëî÷`ížÃÕÜŽ´ìÝ=;Iø$ÚÕ²{Ï²(4e7¿iZƒÃØþÛw1›³×fÚ¦ñëv5M°Æ±1[K[ˆÅCòµ„c5¯òÛÎZcL°”h2)Åß¦WÆØ“Û‰ñ€1%†3}iç•ß~øGÀÚÃ­•{TAÖõ¬å›³Çg7ñ¬1€µÆÆ´½.};bÄ·ÙboÙ˜î%deZ¸KÆ—áÚpú:—µ¾B½ŸîÚÐváùç/ŽFO^Ïf¸ÌËMa8ÓKÖsúqpb+EÔ9•&
2SˆDˆ®‡ú²éhØcÁB¿-ª¤«ëëëP–™kkàÚÕ3FkàšÁšPU]kEj0{(s6“^X¹ñÂé¥¥â…kú¶è[×´5Ö¼¾5ÖsÜÜLnÇ§ÂùÎ°½·¶òúL§ÙÆW·qç¦ª«_ÉVƒØÖ7¾Z^XùóíjuùöjíÀTõæ'KµJí Çë«ëï-,|±þÍ©_¾ôq){úÆÂ
¿ÎT*šê(ÏŒg#Cêßýöá¡}ú@M,Ý©ì¨ûZ•d‹¨‚5’ÚDéh*°÷t8VcãTÇm<ÆN7³ ]n¤ÁÚuhÍÀ¬öòÛî(¿TÆH^°v hWÛÜÕv`mG;ÚÑ÷LñWPšX-ï‡÷·ê“†E@âªÕ+Œbá¨¦…ò"åM³R	—ß¯ÍòaM¸†>ÓF‘'²d!÷^Ée(lì¿x±Ÿ·,U‘ 4Æ	°¦±j}ÙDÆ&—

´
Ö@;…‰øR<õqQ˜PÿÁ…ß’²§MþW½˜k²Ø¼ŽµŒUõt¦Hï3ÂElçX^úk,Ÿs¿»ê9k¯	¬‘c¾Ð&Ù°´f2’©JkJ¤ã»œ¾?­ÁE`Ém‚5,%>ªX±ØH^6U\‡Zˆ-:&ÈÓÖ£¦»¤]ŒSÛÕÕ…e'Zk×
¬!Ëð?8à>SX‰4àVE¬ô3®I.š¬?+­Nu¸'åÑÈ!å‹¸ØÍ¡vÆM¸sâq¯wÈ‚”ø’>Á¨:tîêÜR6öÒ+.º[6+RŸ\F>²-žŸ*ŽóÆúq©4vøð‰±ëxw×GG-«Tã£”Å6äÊ%û8€Ù¹ê?Ý„lùc,jZs„ã¸rÈý9‡zk×ðÓ4§t€ZÐ&÷áãcùfá|_¢q3Ÿß®g-Hƒ”¶:k¬IÛYkZ¤ù+•‡Úõ>b™Ðu’™_r¿€5Fe{C±·øØjöðK?ÞÿL;ó°ŸÚl\{ŠUâ"Ò•O™ˆÝn¹“xj—H™å×¥uMš¥s4Èmþr6R½»W?dm«³¦Qk{´g6¶`M¬¦ÂÈ6o8¶¾–†b·)c¤VÛså†P-à4Ñ™1šÄYl¬Ò2¸&­V-VOmÏn~Ô£oŸY±å]`¦•,5Ä‰€Ž‰áPS¹ÞYcqMkÀškZÃa©±gk7I°ðÙÖô~6Á…µ=³“y¶»[ ÉárôÌûrš ¿¤%V®·zRœµ/Í´ÛÕr„ŸÂ‚BM»ˆ±JÈ#lYB¡¶iˆlzºÉ—Ê!Ù°F·šJ Ý…4ÿÇ¶V1®ßM¥µT‘xL–\S<×•bhQ8\YÄXkhý÷a4ŸÌ7çYý–×x2H+ÒßhÆ™ÁšŒ›o+ªÿ„~+×¦–Ë$a7c©A‰-±%È*ÓÃ•øÏ?Çw4¼¨\øŸÏ?w²#í:6#L^ƒÕžþ9Ž{2'Ÿ;Y*Çì‹Ž^gŠ“±‹ké0¥$E2W0Çèt¯MLM\ª®£UfSk0¶!Öù;Àš¼µ‡OÀhZþÕÅŒ¤x×¼~r¤ç…zS·WN¹²²ñáT™®5k«‚¾ 2¨„<'dS×bd¾nìÌ‡S@T4¥×^ ªúîÆRµ¶´¾Ž¡¶²zûöòÒÍå/VollT*«·«¥&Öøvaˆ¬¡õÏ?_^%›ÿÆD´|y,R]ý}a8{úO3WWª—§R[)*hˆZàþŽ¨ÆéDKŒ˜ëˆËB:¼šv¦•Â5£h ¦‹ú°v@,¦£VŸÊL>¬²Ç:	Û"TAþ=pVGj>«½=ÀšzÖ\Òˆ´Ï·×¬cm¢ö—;°¶£íè{&`mÆHÍkXc“êLµ…Ûxõ½7¬Å†‹š©B—‚ÀÂ•SµJÞÿ¨\*C5Û¼6tíÚ`ßHŸÐ’¹^<Òøf2&g-ÃI_2#k$Iý#o95¬,™X:Çž’—à× "¬KˆÙäQ‹÷í¹ØÂ†@!x~é°ÐDÈ&$ó)ùúg'>;'°üWŸ'Z£³Ì`íq—ÝS10äÖL(Á‡a¾j¦šZ’ø‰q†¬5Åa.-8dG›Ê|W<¹x|nñ< ¢Ak€Úƒð‰€åµ;\ÁpÖvƒd(€5³æ„eqˆôµ·Ãof­iÜZûÑƒVýhên?¨íiDÐÛ8lf®ÑŠ€t	ÖPˆŸ¯b
%|X“’ìN£,wÉ	Ó64“WiídaêhNö°Õ¥fÌMíí0á
—I”>áºâ¯~s~Î™{	V“x†õ|¼Ä3B¡èâã•óWÏÿv¬T^¬¥ŠCC‡#u$XëÔÝTl¶ìu6Ð…ù	þ´Ç…¬ò‘–~ØÍaúÒü7­áï¶êP ¿5ö‰J!5þ²é|x:9Ð-gV«ÌÎkNua,¦{ÑšF•™«³Ùý.ùÑÛY6¢µv5ª!ï#¸ÿâþû^T($å6ŠmÆÇ¥í5»}ËYÖ>½O°œ	Ók šÉÏ‡Ô_ä¬]Ø&±Ôø•­‰Û<gmo­mõ÷¶wÖöŠÏÐÚüµörìÂE®0íîÙØ³rÔò“Ês¤­­Óê =Vã&N3é€Å}Ät¯­N
ÏÚï±H~AâüWØùÀ;mºnºQ–)ª$µ²mB¶šMZpÍYk±Æ
¯ù·›ºM‘"­m•]ÎYÓ(ðyâ'ç÷ìÙ»{ïž6K;	ºÖná«q«5·Ó¦×ü`È	Ó¦&ÇjÓ/-óŠ›œv½k„‹[Û²æ5 iÏ‘V¯1M4c'ãLÃN("'X-£¥Óô¬m©T´@ÇZ,©:lÁšoÜç¢˜æ0Ø¯îÀZ8¼wäï†µ¤wÚŽJH§ØVX³kélÂRüÃ	¡T±XwMò„Ó¬íšŒ5¾¥ÉFž»ÈûN6;Š‡öü…‘“NžTÜÕõž‚µRCk\Éð¸$û“H?::^ìˆ¤Æö¥¨òNŠ@\2#W	ZëÉDÕ:¶¾ô§*­cDBz´ö¬f£	Ö~ô+F­a­™¹Æ2Öšzãe†K?Ö—®n,ÍÜXZØX¾[ .ßÒûé[S!äÿ×|X®9cÍÁÚ†ƒÎ¦ÊÙ„ÆóŽ°UK¤ª•#KKUbù©u¼ùþû‘õÛËtœUj7+jï¢£ápmè zkýöêTÄ‰Ëª,€µÂiB _*¢Tm):|à@
TÃX,£¼°g“)Œ´2ÚßŸ°JH3Õ¬EÍåŠà†9N¥Î¼À~ÝÍ9–™±Z NëäÚÐ´‰Œ$RÂ]XÍ|5ÁÚÛkg­B—ÛÝ†Zp8±k;ÚÑŽ¾°æ×A"&Mu"¬µÎ°`švlb|á©/Ó\Œ?ûÚ«õáýHÖš«†|½DB?“Ô\`ÌÆÛ'­ß}ÉFßyj¬©ZúòÕ«7W@ÊÈÛ	Äf&.h1×±ft|Û-’ÁT§P¿"!¡cµæpCd¬ï°†6?j¨¦¼’#¦²“Ç_Õ¤‰ùÐÌ/¡˜Êt:äuå_}Œ(Èð¶‹ÌÂ&a×tíÔqZ¿'k•E`kMzÉ·’ü Ä|ˆ‡n²Zw kÇ¬YNÓÕ–vÔ¬…ÕÐ  6 s]Sw·>Uuâ4`Ío:éê‚J»BÖ¦ç
@i\K²d®c’I#,ÿjB¥Ž¬(a3ÖäÅb×Ïóž„ùÑÜèL5ü7×ö–0îÔVøXa°¦Awê3xF„o„c*pE>äßàÆ*:HŸ¿N	uIYò&Í_®qÏløvq®u|˜mÊ!ÕkÝ½ÍLêrsÈ³Ö83ÃMU[¢µ’î2½x½œ5w¶]Ét1F˜÷úÉÚlà¬mmYC[ƒû³¼éÁÚ%Èî÷`M|„Ü–°&µk„A~zÑ`–³ýšžý°öï‡çëlkÓÚ©j[3#Évÿ@!¤›¼ÆÁ3/˜lÜœ6ÃÞ:Öd¬Í
Öîæ5›Æ­åÿ¯gíj ¥5‚¯¬Ù¡‚Fd²í&ef³LÙjÒkk“ëï¤†•æ0=ÇH—lñÝ5Ð®Ú	¡™&ˆmÍowÁšpŒ\Ô±kºÀ)›éµ={ùMŸf9¬y¨ÆF¨Æ*Vc¨AkA¤ëWcãzÖÓ.8öŽœ‘ggkôªÙd¹#k»™FGzeðHÍI›ùC`©±8VCnÇZ'±Ú—îïki2J=ÒÒt¤múNšÆ¿9pm00ƒÞò4âÞ-g­9cÍa'â!H-ÑÐ” ÖÀ×†‹ÔJØ“ˆ‘1BÈHow"EäÓ ­À]¼\Äö­¡¸xk¿zx‹µvwÏ³•gó­‹•Í2HdGÁk½ùj[•Žm¦¨÷Ù !Pô$Óº”±îg dÍ`­ŸÚûððÈEü³Áô¾(o6Ïa­i¬ÚÈÅ“D;âÃiZþ5®**òÂ…q^ˆFå+•
´bJ†Ì–$Ê-!%l0Ç-\þ3ë÷_’|¬1jí?’>ÝÏ>ûÞšHMÌµâØÐÿøv)Ú˜É’±8Sà’_¯ä1LêÇ»«ÐÚO%K–49T;£HÆmÛTìó‹‹esF‘I¾²™÷U‰ ©JmªöÖÒÍŽPlªº4‘_Z]ª¹ŒÅÈX¹rjCµÕjk—RÅ±Ú'Õ©h¶ÈWÆ\¢"©bCC•}QÍ˜ËðoEzÓîËÇèa‹”û‡9Q(d”êûÐa_á†71Ì+„Ô©;òäHí°†hZs°V"SÖZ€j«½!;ÍsÔüÉØêT36T›±¶k;ÚÑŽ¾‡°6£2È2['³× µ¨½)¦|J¸Í¾ÖLÉZÓ®òþ©W_­KÑ@5Vôz±/36¦f‚>MÄÜxkÔtì¾‘kô¼xêºl÷Ò”DÒÛ?(VëS$¶¦)ÅKBŽÑ'dh9¢’M˜Æ¾×[z¶”-!–	!à$>öF{Á@…"’yÍk6Ìæ?“ùf•Ñ§å4Æ‰ýrÖvw1e­ëèCG»ÒÑtœ
ÉDÆŠO×Ž“-ÒÖÖ\ž³î4?»ß-XLPà“³³•é.&b{Ó°
ÖÌaãàh¶5ÛróÕkºÞE£Z7çHØÖÝe¬vñ"9ýM¡@Ð¨Qš¶]ŽêF´Ò·Ùæ¯9Ø–%U?êÉŠe½q!#®Î˜Ó¦ÿDX¡~Î6"	Õ,Ò‡GõRcxÎ|µ9íîð|ŠÕX|ñ¿MÄ†Õhð«ÕæjcLW#FFŽÚØÐXq,…6RÈ´Š%8‹8H®ô„åTãh¥ùu˜ ÇÕn1h­d³à‘ þÑJ#{­JQèöŽç9j˜Ž%ÎŽð,êpz:™ë")¯±“rÖI`íU»y!"†j[F|^<¦	XÍÑÚì•|5Fc	âFÄj6Mkû9ÇZ»_°Ö.XûãŒxi{g­ÞZã¡¾«õØß=„µ¶?YŠ‚ôäø§Œsó¤á¥™8ã2ü'¶Œ¸bÇ­°ÈF·º_Ãœµ{kM°´æf¯™³¶çoö¬]YcX6Ç–˜¨[´d{2§V?r2D³U»`kð&yÞÚ/ÛÚøãxs’¶0_§_èˆ¼ñgW®à£ÕM`3®Z#·òMxàÈ-kJï÷5×²ææ¬±Z!¤Ý‚¦µ›‚5@0À2[PÀjœÏý¡šO.²â$i³bHM\7Vt+pÕDhwyjþa}-$kü)zÖÖæ½Æ5qÚBÜÙÔÐÔjÎ·µÔJ3gÍ%Š4Z…a4ÁÁè¦Îµdv˜ú†ä²ñ¦Â¥ø@K†ºd|ôe ;J"Ó”AJ6{;gm‘ ‹ÙÅÖÖÙ|+ÞZ=¤¡ Öl­WL˜%‡nIGkÙ¬¥\ÖDiéè°Üµ~–žL_6í!’2€W:]¸~ap¸ÀKÎÉÿz­'Õ—ƒ¤E@rø‘×#û†¯Ÿ¼>9 œôð5#?·Dr¤ÂýÙfÒûöEÞË7¡4ê kÐšãhÖš¥Œ¼nMkZ‡†‡ßfÿöh¬9¿±¼tZp[]Y]^YÒÿÎ‰Çùõ¿^ýàõ­IúI^ÂÈ›)cµJ‡<UÉVÊÑVžŸH+ïÉd3ÓjÆ<3©V‡#8n­Pû8õ~ÍXUª75éýŠ]ÎÊÕõO*)u¿•¬1|ÈÅ?·FùµPðÞ3©©l4’aÜøhŠA…TÃ”íbÖÐfýcÀj:0uà¯yçËì·C§¿Åƒ:+«Ù°š`I‡71m+ÿ Çi,µŠn–Ý?¬ý`G;ÚÑŽ¾°VžÉC%@›±¦µ6½ü¦hNsq¬©‰€H^{«NGkkoqÖXùp^¢öDØ—ä½St6’áKL;Þ>é) üÑzÔ¸	Öøè/XËp®Qœf©„$Ž€$Êcá˜«˜9¤ÃmÇ­¹f­`8´è)t»Ñ_"5‡l¯Ér°fÖšâ ù‹òÍáP:•ÒÌ!L4€(‘ìaÞÚ®&>ÑP0È¬5UGNó}²>9XsÙýþÀ9ýÜ;wÎÍ…óO.¶ÞlvŒ?ŠK×}T´FÈ[ûCGÙêç·ëæ2îÙ. ®ûPw“S7WEj¦3ããTa;å„£9s’Xk¹ä·a­^	h-È‡”±ÆsnFZŽ3sÐõµªa0'‚êïÃéô¤‹¹gílÀÚÜù«Wó•«ß\åÙ|Íb1gN¾'‘}`SZC¥HGH±\ê¦­P*ôìW~#ÈÎ÷âÀÚÁxÃ@ŸL6 .g°ÖkÍj¦^kWQ`¨±1ZCzÆÀ"ykŠÉ5N«ÜhãtÙ³gC³*¡¥sr±2;ù]ÎZ½·8kÆj?å+Ä‹œVÃÚÙ³Â3ƒ5‘[EAÞçe‹ Õ%ÚL6+Q´€‘zs‹[=©ÝËY;ûÐCÏ|º¿ýS<¢ ÐþÁÚÖ¼¬þÂO6í5šìƒÄ]«ÚÚâ¬m‰Ù&”r;XÛ¡Ñ†T	%­‰ßPáˆGœÜÀ17û²Ö<4ó5ô7¶ºÈÛ«­Þ:BÔ‘µ¼BNŠÖÖöÊ®ò'­ÉO3`Zs&–o¶qhvÞ^Pæç1üækb5-€ZÝo¶š¹k¬0šWé–›Àšï¬y²ÃàxÆÐm?˜R:²g~–ó½WìTç³Z—iÝr®ßå¬ÍÌóCHÉ´Ó8g`aÞc´6/rWŒÆ‹ù“¡-°†B&È¬1«¹—¼E¦Í¼ÖbÌÄÆpÉ6Æ±\úeI§ŠÜÍkbúâk6¾ägžµ¶ÕY[7Rj\iåm…ŒŒ{+Ì²ZMî€©.JðGf¸åØGJH?E‘Øjt­]Ì$x@aðeGÒôU*£…áÅŽ
'fÐ@2r’—›ÞBá­k£œ3riK¤ÒÓ—.¤[Srž®3BËt‰FEˆ§«?%Åq½
«‰±4²ZˆE}=ï*2b°Æfl¸¤hÈqZ·“—þð?fÈðÏ%fV6–¿úhajÿý¾¬}ðÁêO×?©¾ÉOB§N9X³:H+¤¿c_„§K¼2Yi†ÔlMiºŽUC‚j•}<¥1Ît@òøææMÿ,24‰”/JåšÁ\GxH*©Y/RLµò=¬
M³=£=ƒªq‘Ÿ–*¦Ò}ýœc™Á¬ðL!žwÖ¡]˜•¬q€‡§ƒˆc3ŽšiëIwø¿£{ÔØ8°à¨æûj”“ú¨æÿYk¦šV6Zfgþãv´£íèû¥¿œ™(£	hÍOîªg-Ü«¥4iÍÒû­ƒÍåsñÁ‹qG4[pƒÖ^õê ë³û³F3RJ9ËJ¡"åÅyÓ|Ž¸Gå=ðfI¨,ÓïJñ× µ~Áø¤{ä·	Ûr1Å&Õ=åæ¬é§8ex«±Ô	ËÇ8›}´P=d<övš¥€¼âÒ/è-­züŸ_ýï8kˆ)k§/-%C˜>Éè¬i×±D:;:Ø'¦Akš¸¶K"3|±V‹¶ÕÎ{ÎÚ—ˆ™ÄG’°ìh†{¥µòä“ÆjZ”%)\;ÄÎ®hÞšFcs½K„<Òº†=„«f™´ˆ¸ z¥ÑSÐçï‚ZºÜ¸R­_ -¾O˜(,©;®q÷ë ãœ8Ÿ­Ù€5yhÍNIžI¢;½ H‹‰–ûÍùpí*²ç _ö„à«I<Ks|¾<-Ô~[Èå†#‡_f.6álD„ÐrÆ÷Þ‰ÝÏ¤´Á¾ÌúùëÅlñ¦`³“ØqQ®›ö’v‡ìQ
Ì«±°Œ[ž‡ïÓœ„C]Çä½BÝ³
ñ‘mß³¦û|QmÂK‚”Îº¸þ+W|`ÓÂˆ5¬4¶û÷köEÂõ6EA¶?óÂÄúNgmkÆE˜úÓÄ>ŠÔà5ÁY@k÷C†:ÿø‚±š+ÓÔ0ì	F­	ph]›©nuÖX¶	©‚DuÎÚÓ€«´GsÕÔ²¶gïÓv¸¶—,ÚÙk8khþŠå÷‹­ÚäòÝ€Ö`1§/ÜÖÈÍã5ŽåB®.ˆ‹òGæõD¸lGÖæ*.ýÑVÆ´y° ¢NØËo¦_Ã`ÍhÍnª!q˜Æ.pÖlªYÀHÀeÒÖtHañ)>¬ÑQ6¿ûˆCFW"hbÁŠën÷¹´»¥mzb¢µÌ³•šBþhlygÖ+­¾
2ÒÈ@Í^*S©ã¥SÝjÖÂmH¤a¹Òxa¸!ÙSè±¯Šx(k\sC²‰8¯F³‹?z8¿hÎº·³¶OQ5^‘©&oh;…MßÝê‹cVÁ$ÛDÂmªÁ¯tŒ·};ˆM?˜–óF}uïµ“ƒ…$°¶/–½NÅãÅÞAª™ú9H/³¥QbýGŠC%Z×P)Ò†Ö`+P©MbIAu±VO±èÔú;ïÿÓw>¹UµhÁmk
®’µFÈRd„koò~–Ë¼ðSjx{ìßÇùj!1õîÿùh™ü~híƒ_®óÎãŸBž™3kíO‘ˆÒÑðâÏõ–ÜÁ†lTŠªD=]ûªÕ<OÂÚMžsÔ|&R‹WeÖÆÀ2ŠÎÙÚéT¬uß–ÛX‘¤§bqˆv´ˆ%kb%ò¾Ë:H*&½j¼ÈÃë™¾L”6§ŽhLHñRú…oÁT5ÏiCvVï©¡Ã¸ivÁ;ãµœý$Pà«‰Õ‚Ôþ¼ÝlV@Öä­kù	híÖ¬íhG;úþÁšPÑ
^$
#HÍÑškB¶˜Ÿ¢| ÒAÃVšc8kõMk
Ôæ®8ñÒK‡©˜¡1 £<{ñâHÖZ¦÷ùk#×ÐH–28WmA-d_ÿµÞd8Ë¸lÎs±XÆ¯†Ìåx›óÝµ–ˆç|#žÀä‚9L†%ß‚µtbsðZ"§±ÈØg¾þÒÏÈ*|å¯G ŒŸ3ôq?®7Jæ¬	Öªý£§31ž+
QñÈ¨ÐñÁƒGµb<¡xko$öt¬Æ§¹E±4£XÐŠû”¬½vîFÒâ“ÍP^ pkØlHjLVk¡;¤x~ÐŒ{úÖBÝzL7—ºÖü¦5õlá©91üVmß³æ”0©·.ó›ÿ’b6³ÖrœŠ‡¹¹NÁ~8.—ivÊÉöÄí‰3@[ô×Sºz>ŸŸ³n¿i ¦Ò±±g­Ñ…q¸8wõr65vž»¹h±4>JÍ)Ýú”e°¦úGdùý*p¤€±Ï(ùÉüý:Dl4ÛàLò8ÎYkÜ/Xó4 XãßL<KHÏ
M<ÍáFÊÆCt‚ ²¢û¿³g­ÞY¶8X}œ`5Øà³+8lîØïZ»_p&Œ„Ó~üHï3ûïÿÔî¬mÅ¥m­5Á•Ý&øÓ÷	Ê¼5£4!kr?W(ºüôìéKgŸ9K¾ˆ¬QÉn‚.Û½œ5Ýê ×¶qÖžÞûÀß<°—¾4;s€¶‡>5¼+kk{ÖØï5ÇM’É6ï†£édOçdþÊ`Í5gìlã8¨…„ÕªyëFL ƒµ¶iæ»y¼‚Gv.Çƒ#Ö¸d¸F£ÜšˆsmR¬§é8kòÖX´cokæ¬!6ê[+×ùjvTwÌV›qMéW&wezÞg5öÎ3òœ] 9Ds«w@›„¯¶Ö¦ê›#+ƒœ²Ùii²(ÓmW¨‰U¶rKÄi~”¿E@3å,¦1Ù!¥º‚†.äô%W2£¯„û{ž4ýl‚µžL‚ï‰’k‡÷ÉYCÛ8k¤Z$¤ã´Ø¶°V/lc7
;dá°J:Ê[Ó‘âPþ{çÛäîùÕžëÕÞäD$VD.rCT'(r£cëµ§
"%¶££qIM}œá¢Z°;cC—Æ0ÎÍ”Yþ¬š¤ÐŠ¦ÃQÄ!L	°ÒsF(a€éAˆiUUê+¡›íÜ´Ÿïó{ß¼1I¶sn‘¿öû×ÎÜ¿ùøû<ß§”÷€oÔB&k¥|<[È{ÕÁE5—8’…4€5NL&Ø¿ˆfêµz]3°”?t\æMÖfÓ„ÕgÒ½±X4Ï–J¥\%=SM €µ_®Ü~!wíñ/Î#¬µXÆˆå÷ã­ùuC,ÖNRHq%³’òÑÜÊïÿlåøØý?›7ükhýò/b53×Â2H9kgµ½z„ø–+Œ©kFtÉãO§ûôÑ)/ØÊuµÅžÜf¿ÏWLl4„|$šˆ¬M³š™æL—ËÄcÔ?68=“¯è? ŠVýÙ§Y*K+±†Þ«ââx¸#ŒQ‚ÊkuL6¥9¹C«&9;Í_g@’?¬¸Æ~ÈjGƒÊIÉ÷K½ÆÍÍÄnÁZK-µôªé¿Ü—§6‡ø+Uäžìï‰I„óê: Ë“Í[‰²Ç½W°V¯6øìñÉûÀÚ±°ií$Ôs2àµsçXê£×¨2©	ÖÐ(Œg½œæ”(ªËglÐ(ÍO$?Râ˜ME½Q«~d¸)>šÀmxaI#ÔBZj|ÂÀQ•ÈCNá„ç&\c
q»Ñ8¤G¼¾t€õÅWoaªkäJ´¬q1ÖøPó¼³ÖÎÏ
‰ééXj<Ïh@Z‘±©ãä]`„y^·uŸá«•—€µ©c'xÞ1X;¥	ÐNož>ÍñÃ»O<Hðe§!0]B"GØøÚÿšÅ‹È7³æ5\7ö‘Ì5šù‰‚4Ç<Ú 5Ö
ãašæ¬ÍƒômµõæšðÌ‚¡5“Ç´VT' `kà¦~5gg&e y…1°M³õ¨jWÉø,ÒØ@¯ }õòí,¾Ÿ^=¦ŽÛËK¤êMå¬Õ+4uâêÄÌ£«SÝÍ–J4„ÔïØLlì´;Nä‹X^¿-$ŽˆEÇ×Æ‡€gŽÛ$;5SÁ¾–;¯Ÿ=q4Q-,ÿÃ" ´¸ØnáxƒåE^C¢5ûm¸êà±0¸_· Ö¾ÇYÃW­á
3±A5Œ5I°f¬öoº›µ¦8È·ßÖpløêàëTJZ$_4çÈggÝã ÏÖHƒtRÓZ(ÒEöa¹ApTZb k‚IÑš`ÍO¯ÖBg¥‰Ö¸OäÚžµCŠëØ¶u·0>#Â£ëò²ÚÔ–Ù"Ô’çoºYíÕ€kh[–7öÙ·ðX³³ÆjÓN7"Xû§ë0™ˆÇåŠ°¾R^†¾ý–µE1bmrœc?ÙlôÉ!‚ëÂY3_Í-B5[‚®5ÝCkM¬&TÃY+‡ÎÚºrHöƒGƒÒL5”ÉaÜŠ¥8”AÚ‚,pþOòÖPh«ÙNj!«uõóO_Ö€þeðw1#@Ú¢†Ès#Y„7°þrtæó[;¿ÙŽrùIçïƒ"KÇÒŒ;Õ*•Ô8ÒûN„Èkã9²Þ<ãOq˜,j$v»§÷@i“ž5ˆN¬ÖÞ¹™Öç‹!zÜ^5–é €µD\s2—éÉUHcZ®†/?	\ô(Î¿¦¤þ;Æj×è;SÛZm’DÈÃ‡?Èaæ4ê$‹Ào3š$ÖˆMë™œ™à ²éñCóÕ8 £©=H–ÒÂãOžÝ¼M2ˆZ×>3kíØÇ¼õ	Ö¸¼€k@š¸&ýœ"ò<Õhª‘¹•ùù•o®GS?»Çhjƒ5£5"F$k€;æFb[=¬ÆG~ªKx !1e75<)Q„¦4Â!ËåžØ nÓ9\~m¡ÜµØrÝk”@:ÍˆºÇ8va>Ý×hð@…¤KY‡éx£B²¦*à³uüÄ™F½^IÔkºôXt&ÏµÚ¤BH}÷žf…©(„5_Í'†|
‹Af!­±]ã«Ý»ãèÐ=ÍÍX³™ØB5sÖ°ÕLsK?ø›ÿÔRK-µô
Âw6£µA¿²§W¬†¯fMkN›‹Òùx¾’îIxGÇÞ?öÿNZ3TƒÑX±×&j£Y,å‡\Séã˜âø	£yùšošÊq	‹JùB/X.MáÙXÚH1#N3©WÝv¿‚Ï¢4’)W·²Ú†ê;ÙŽãûJ|ZÏvuk\ÍYûøØ§ŸZ!¤¬µß{ùz>1þÆHµéO‘0RácÛýÏ>ÉÞ³§{ñŠš°ŽÉ_¼*Z{Sƒú€—.èÝÁñ‰£4ÓÎšKTd±%d@Ú²çµ¿îñmepÜÆ	Â 1Ó::6±G’àE˜Ù¶™xØkâ´¦ô~µ…tÃ±ØjWS ˜&‰¢9ã`­½3·:9N¨»ÇËÕª¦„z¹?–Æ2Ob=OîÒañP/ÄY„ŠÓ¾@–yŠRÈ#ïÎLO˜º{ôèÄôlýŽ±šÍÄXM5Èç1Ý5ƒ!œ†lšc1­´áÆYŽEÇèµUZK
ÐÚR;·'Å³‹mŒšWÔ¹æ ´•`5`Í¬5ŸÓBgmsX3pqÑýss`f•ÍÄ6N³kýýï¹ü~îºNL§f@¶ÒFöí{}Ô"õí)9k›Y×9W‹/~*D£!NƒÕ|L“8xXª½½,t²ßÌŒµ›š~etsnéÊ… ›QqTÛÔY“Wô]6Hh+	„‹<'ÅC!JÕVÓû9VÜ¾öÀºÝ—m–Àõg_Âc€Y jÁÙmA)äÿº}Sxc¬†ÊÊX¤kë9ãÖØ* ¥åE¾?TÌY³§ç»ñøø€í:ˆæOZƒÖ¦Â¡Ø +g³¯3Ö\"d94¶M°æ6&÷H&‡Mc±ÁU{ÌžVf×—âöï-"“X‡¼ö«­Ì.jœø¢Ò‹Ì%c£êÇ \2ÁY#¿ß¢"´f&ŽZ7r¼Æ;gß¹=áú:=‚ô}XKÄ½áýãÅqZe½¸;ãÃZ#/X+&UaÞCä‚BF6rÖü~U"|”ïßÓE¾×YsŸ:lóˆaG‡	‘×#V£L#F8ß/žÙ`éL•ÙØpÙ$“Ië/)ÏQELU;s˜ájBéó“gê3Økxº1CéDsõ™Ø4‰ L<Hƒm8JŠQÔïàb(ãs·oþlå­f‚5B©°N@VŠ®¬ª±ˆÕx£«NOÌÜ¡hœ:Í¹{s‰è\âæÍ•o¾YY1kí[9kß2ÛYkïûmk¾±öÅ©wxCUïÚÃ‡SOâ6=%aU¢1~+–(â’ÝäWM°èQ¶«°&LCK`-€†Ÿ˜†ÝØ«æzúyfbç3•<¶Zµó"Ué
}Ú|^«ÑjÔ^Æyas‰¨„ù*`4,ý5ßEã„iSX³S{í˜ÏEk’µµ¬FYéhM°fbS.÷BkN>«é3ç¬µÔRK¯$¬¡›hÞ©lÎÚ œµtZeèiÃ4K	¶˜^VT©³Ÿæ–Ê7n½ÿþ…©caÄˆï¬!×µv´^ÒßÌ€wÄ¥*µ²î@ZÊâ¢sli>Ðf1\…±HgQ$ˆ¸Š™Õx9ÅùÓ˜±x’Jac¬*à­õì8—ÁŠxË%‹p×%Uãà$»(ÖÞÿôSkç¯ÏGŠøhÙÔðÛ3žê ¯^¥6)†kW“^ÅësìÜÚÑÅ>/¾Å˜6Zµ¬©uO%€—ö^:ýoý gqÉ!¡” 2Â™.¼¹P.w6CoìïæƒlsÖt„•†§Æ—9qR^ó?5%Øå%›LI1o»?ÒNR­éj×ZŽÝœÐÍ†Ý¹yÙª…Td£¾*áe?zôäÁ‰©¾½SÄ÷ów… Õò6YÐ)Ž,Gæg{R~òdh†¿ê¨ Î×õù·#7ùg ÊÆÁYÊª -Ò_‡.iÄ×vä6*zä<­o‚:¾–³¾FmþÚˆJfSä±´I8kÃ‹e%1 k$Å¨•¦¬4HÔœ)F“´Ý¸Ò¢ûÑqƒµ`$ö{xi‚µAhÍeø³Æ3<ƒ×d²kØkê_“ù6:[¦fkkc_Wë>ßmŸ¹j`ÙKÎJ!¶ÿò{Ïw?ßÅo¶]±„AZp¿òûµU¤»5£â&mköph­m˜	’¡C>¿qh®L¶›}%÷ËY²Ú@YM."²_!!„%2‡ê÷Ô$vÃzH/òå7÷æÂÙÓ wx§««ÿ2!‹ý~?˜3Ðú1Õ¬Óá“´]ÖÌXÔ¶íæÁëb5éBPH¶š3Ö\¤V~ÂšÓËUM!þÈ®-ËËë”Êº—Wî9$«!CXsúÓ}%ËK¸hÖ¿(zY\?ê7P[äGj›ÑŠ€in'´Ù8%»Œ^\××‰ðÚ 5•GÆóÅ"tÑzœI¨«­=AAd;oÒã¦"®u”¿ž]$Zo¬9gíÈ`¼ôý´Æ:H†zâ—ýè¬y^œÚ|Æ¬]ûàÿ×'#×ŒìI¤	Ùg({ä2##ÿurÖjÕÚä&­Õgi™­Vc}ÚI6¦Ù­hªX5–ÅzóÕh`E½*Ÿ7bµ½}<[;~û¹ ,6Ïú}]¡µ R7“ÖÒ2Gl’ß,×™8~3£(ÿŠ¯Æÿ„ŸýÚhí[…Œð¡Å÷¯Ö«ðÊ%…l]ÓÃènšÔN}‚†ˆtˆ†ãÅÎ:¹‡e­M°‹©6­™q³³Ó1€-všl5EB&s3ÓC}C€#×¢^’
.öiU>Ì k9ÏËgÀ5º#xe 9ãåxc 7 0–ÀTã†à6ÓK¬v`Í”µò~9ÎÄ>üù‡ÓÀšÓ:V;ynHr™ý@9#å¾rÓŒµ%kKOZ°ÖRK-½rú›Üœ[ÀXâEÜz0¬ÍƒjB4¢wÔ¹F‘…I¼ÆÛ,ÀWU”0rëÑX{ËXí7lf¶Xä¨îÌVƒÑ,½Ë£œ2HOŒæÁgœ§-c×hÎåX)~Dõ‘¹ŒÊî¼ÜP,ÈÖqjÇŠ‰dó2¬yÉµÓÆÚ	]ÎÇ¾õÅWç,¶VCo¬Æ0Xm5aä/S^¦Txƒß ›9 §§ã™x‚j¢|ÜË(Óš$µêÙ»–(ÙÀòEXC'ßd!RÌò°Ü½…o‚€±`*¶F›Ó*±Ñ²&@Û¿… ÿý{višFI$"V¤ƒJHÖ†“ \‡ÚÍWS¼HjsX­5M>€Ü:ƒ?o¢aHÎ\8[Û)ÏSÍ$$íé9Ô¦Vf>z¢q×4­	ÊX­±±Úw_8XÃt;Ò˜y²öâÌÅžEuo§V×R§_”F®[€ËÌ4~‘šöuÂIûŽluÆÉæÑ±HÒ²“xÍ¥ct[Œ:®BQ|6/Áßµ‘Ž$5cÀZûà‚•A¾ˆýGœ5äÏY…zopkÍôööQmÔBüéY#R³ÒÅ}ïêkî«¤p“©Ô›ÏY;qû»ûþöàAsÕk¥Ñ²†È3­s÷66n46ˆÆ2­ÉbƒÂèþÍ5ÿÌ_™¹mëóeÀ,Ñý&áÛ¡ ÖÀ4	|yNNä6\6´KÞ¿÷Ío‚Þµ Ôo
íÿóçß¬Ül
Ç/ÖØ.ïægÊ·	ir[@hª»‡a‡<Åo³[üHßÚœï«!`k-ˆƒäÎ9Z»À]ºÅ=€µþÔLaaªÿe†awuÃ“Ñ†*K.Ãÿkx- 3¶,¡¾^™c\A¹c‘H‘ÅŽŽe+ü\”CO($‚ÌÔ¼fÈ†¿¶klc\¶¡+mVcG«È£“,m&°,ÎÌµ>‹<©±±qåûSçÉ<ÂO^†<¬FøP¹Ü™Ì`¬½ì¬5ÍÄÆY[êQnäBg“t±Ù<ÒÚ¦˜;QV>¬eRPïÉ6lÍ¼58Ž"HåôÓc6W't¶¬=­éƒ ”bËÃ*ùJýð“0‡MO¾Fl‰¬z|'Ú×J|`D;W£ÔÝ)•µ¥þÌ°Y{\‘èÄ®¡ã÷¨‚|f„åºÖôyÝCš€5“›¶ö«XìÀÀL¥QÕî\‚XIGIþéóþú›ßÜžÿí¿k2×~ù	s ô¡î…º0½è¡: ¯Þ%3vÓé`§™k¦44Ô³†ÓB7TfæšZÖØLÛûo#6Óe.y`mº11DåL…0®ÇÖ¤\œ€•l‘xLÊ&«¥,äëéJNg»ûÞÆbÍÑ"}kÊöe{Á¯Jæ£³ÖBTY˜¡ðß±àÍrû¥ù¥…ù9áZÖZj©¥WOÿùsÈæb§é—µ¦*H]4ÓîC»¨?òÆ,wÍêäég`ÐMY	#,*/„µU^;:11[Êå4 ´E×jcžg…,	Žè¸¦dÞè¾Ú™!4_p	œÎc‘œâS9Y=Nòxd©¥ƒ±A $ÑMñõI’+çV¶JHs|lGPÁj?ùƒéèñ|&W²ÑÌüôÈ–=qÏª#üÂ¸ŠþˆaÝMä‘¥Eü5DÉŠ]QõáªMÆ&kDŒrvoG·%ý“	ÖÄjXkš„ÍžŒ6qC’—&[NÎv"#6¼µáq¨rœb¾‘IaZ³š`-Ò¾‰<iÈ«„Î °¬úqÚÉMo+Êë,ŠätJ®\ð<Òå0=NL‘ßâÔwß1£Õ„a:…`8åÂú/ÍšêŠû,Ái³uYk%h%šÚÍYCl
ŽÒÂµÈÌ?p!â1ŽÇ
6.{lŒ„}õ¾dÐ¸ÆK7²s_?FmºU¹“?dMì+`¤ÙYC0Z3¬ñ@­Îš|5§°eígxkŠƒ„äñK°ã&®	ÖöAk»Fäˆ`m}!¢–õ´ZZ‚µãÛ5 æ“~´‰ÕX	×`µ§€à»OŸ¾KÓÚö‰.º_–ÚÅ9åöÏQ:kë[æÜj³ZÌ°gm#oH'ÕBÂQËßßG!Ì/´ÕNüpë ®¯Öì!&ü~óùo¾üòKŠÅ@´ßÿ–Ý?þù7÷V¾akkóÖ´.?1®„HÜÅ®=×ßWÓ¶Ú»L:%àˆµ¶»kî
Ã ¹­ÊpÍ
!¹sóEÔ³6ˆ6CµP:#Ó~®³]‹Íœ8VÃs,ß_ùúŸÝ\l-ì…¤†ÀZEöw/#ÁšZ×¶Àmöc:ºË»œ¤æw‘‚ß¶€ÓØ:	Ö\&¤¢CØ°nS3yZTa5”Nå‹äE”ºÔQÑ¤Ç&^ÉŽé£D·kb‡µ¬¡òñýqÆÏ_¿š'<8ì%dë¨Ù•};ÈåY{6¸º¢¢®,XoUUÜªB‹Úh	vÓü´Ù™*WšW“Ð+_½C¼Ï*>8<9Id._M7f«³u¼8Þˆ¦ûfàh­J|ÜÊû BªLÈ0ñ<8MƒLøÿûÙ'Ÿà¬kçÓí,X»zê¡®Fkÿ¨6«¤Œ°Ž¦â±éÒÿ}”_±˜å­4uñÞ½{Ÿù¬ÿ[YkèÄ·¢¤òÓ÷µOLyç¡jê‘½ˆ®’|ÂÃéìmG‰tÒ¯°©7ÚÛkÀ±TPÙˆõÉFƒkÉÈœ™˜ j„3ªƒœ©$Ú+±Þh£ÁØ‚t…Vr¹g™FÃ&@±TBB™)^@"þîU¹Pøå¡Aƒ
aÍ?2hc6èXsí¬¡ ÕšYXÃ~s¸Æf[Ùü´@°š¼5œµÖLì–Zjé•°†˜µä‹¢2¸F)ºeNQ²/ùÍÅéXkÓTÈ0híÖ…p.vØ´vW¬Fdc¦.*ÓÇ—XÌs\ÿÉzÄqãj§ Hyh)\úØ5eR\„a5‹ÂMË©"úGK&ôåÁÖpÅÝkƒ×8kZ4Îu-ÁI¸²~5’-Zã¬ !Di°šév&#Œ–¬%¦c;ÔA #¥—	¨V|~ŽŽù[ßZX²³w°¦V-… š¿vR°¶£SóÐàµ eÍXMÄ¬I2ÎFxhx?¨fUã{ØŽ+²_¦ðm'Á&"7`öd=<Û*bÚ¨ tsW-|Å eÈ*Ê’^3¨!µªñ ©0J÷OÂÇ„q&×@È-™It>aØúñB€jòÖ¤³Ö(kmj‚™ØCkœ­—Æ’E±Z}¦ZCWûÈ§Úbµ‚u­Qje;af¿¿Ë+4ÂŠƒ5{H¯•K%µaáÜð­kzéf¡øXÓ<ìäb¢Ç
Æ „…²$X“Db¡¯ÖÌj›9k_†5	HsróÖ@²QL.éµ}¯ëàõ}£À$MeÔF¾mÎÚË…ˆè{ç¬]ý¶oÿ[¸L¨±­™èY{ÊÏ~Êy÷í}?†åktØ]”¡†.ª
2tÖ¾§eÎÀm]ÂÈfsÖ¹õn
™>-ÓË·ÚðÑ‚<HÇÞ}hyÏx¾´¤”5{ÎÍû+·ï=“îÝ»½B›–ŸÔÑœé¬éhiŽµ.‚!"—I8Ñ÷°é>¨u-"h[ÆQìøe¶mÛ:g-kÂ5kÜÖLÅvÈ¦[Í%÷³Y[8ha5d3…éqÙìðƒ»ºlê[ Ÿ÷Bx^B]ÒÜý?­¬Üûúë¯W¾^YùÓý›zúRYâÕêÞò|Ëóåî-‹|aC±ƒ­ü4ÀM%ýæ¬u›£é_`•Om¬|XƒÖä°Q@àº]y[M¦(3¯(}jkW‡yÃ[bévkZÓ[m¾´s<ÕFÇ'U©ñbY}»MÖûa¾HôÁ‘%™qóW–Êë¼µ@ÌhIÞÖ’Z0
Û]ï˜'é†b?(Ö pÓŒ‘¬ì69	­ña>K"
%ŽwÎœ™<Cå‡µ3gJù\¥oF½l×øªù"Ó³ênSôuÂÁ|5£  %§7©RQùÉ'ŸÝ~a=¾ýXv˜`MÅßÖ´vtïl¤>BN¤ñØÐD	gMèÞes7W^üö×÷3·)„a—N´F/8qçŸ­éUT•WªséèÑ…ƒÖxÄj.ß¶‰”tìûi\¸c«éøàÔ4G²Ñfø/:Û˜€ÜXMp’xç@/O‡Åª*Jñ!¥j…§c®U41Õ£T?´7Æ3tùDZ°·ÀzPHf>”5'÷†OYÂjÀš©9TYÏ<ºg†)#j¬ýŽµ9ÆÅR9÷_[°ÖRK-½‚S±oZÏZˆjó=2×¢iÞvýÑ6*Rw=k6wÝÎvË.,(òå¹ØçÜíh•FoÕ‹pÁTIJX«”$åir©åC¦2òÓ2|
ŠùÅuF9Ï”9ÆÓ³JŒÄÖókA¿T(ç9¹úP.¬?4šlv!ÿÕ?þê+`è~#ˆÀXSy	ÖÐyËƒ¼ž-¼±³~'ÇŸ0^lb7(ž!H#OÊ5}üÂ5Ï`íØÔ­#NÑ©‡ ŠkgÿîÒÉ³´\ºQFÑ0B­£<5¹æf®±ì1XÛÃVf6ÅãûwÂjÔG²8g­c†“IÔF¦6[[dCgÍÈuCaH†¾šEöSXŠ²EÕ6ê¡$/iè¬é±Bm¬âv¢–g-¬Sàš''\c<ÞÚkè”3Öô*¬ÑÔ6EÅä#`íît‰¾Àº4«Þ*]à#8ñó´ÚdŸz…Ø&BÓŽ/,§^Âñ¶¢ã¹Âè^š}!Ã|ƒÐÖÆ‹
­É[‹–çÍîXº²Ðk.a„Å$VkÂ5çº­uÖŽ,Í_t:Ž.Zdà®Ic¢6âú=ÊWÖ¤íÚÍÚÍ º¹
7„5çjiÊÚSGi0Z°•\f?¸¶‡yÖ{[ôîÏÞÅj3[1ÂNkÜÖáÚæÞži½³&>¶ðÚ6U9Ò‘&2:xnœ"\Äôx“é¶<~øçkF`aVÇÆ}aZ”|ÈI¾¨»×j±ì?Gå‡@GáiNœÝ*óp'wo›ZÖÜj­³fY.Ò²ûÃ*H`m~£_lðeEIìâ/në¶íàz…‰$›J.0/Í‚¢ù—5X[$f$€5´ØÝFY¤¹ký®Ô:²ˆÁfòcûXÒÀ¸Œ'ˆK%€5XˆÊÞCI‚¬Ä•J¥Ïà»d+„KQÇà5e9=«`Ú6ÄÏIXäÆUGÖ¨÷ˆ°ßùÞ`¹gcVCžÞZÊLŽÔBnó›žYÅõòÛÄ•8Ÿ/•2ñÞJíNÉ±^¢ ¬ýh‹ŒÆ«¼\³3ÿó§@ZíÎ(ýmg×ªõR6›ŽÕémƒàjÙt#o”eúç¡A”!Ò†ä³>©f‰+¹N¸ÈÊýgàÕãO?SÆˆÆ–œU $:zãÀ^ÚÚt>?=›™ü€Éµ°H<SöøE/zýÅm>s|ñìÙ·¿–|Z;O-¾ÒûÕMïïCÇjª¡°¼/½÷ô^¦Š'x½¸JÛXµX ³²tÜç”æQ§¡À\£Smf¶aƒyzziOsç±ØŒJ¹ÆÏàº!ª6³uÊF¦«l¨‚åf°Ö:£Àš~nÚâÐ¢~.üÖœà Ëzñûp“v› Ö>4T³¥™ÕÎ¢½&Q§Œ59kÈX-ˆ™ãÝâ~ÖZj©¥WqÐšÓ<7¿c{?Žš»>¥ÅúzØ˜zý!Ù,R/ãMš­µ·¬RY}DüW©,+”°×¨…¤G@—PóÊ”yøZQ•ªyêàµœ—P÷ZFSut`]ä©"pš'X6mSHma-äº¤üÑ·¦'¾˜›€Î3g¾:ƒ	³Ö®"9kçÿðÑÚ­ŽoìÙY»Ã”l2§’?WV4Õ2[ºÁ7AV*ÕMÑüÔ%”GÀJƒ9°vV­iýæÃÓ7n\z“Q±{#~ÏË~§Õhê!· É„ì ®_ëª 9Æb3Ê	ªaµPÏ§Èˆ9kD÷¯ƒ
®mka†¦`8¥Ð¢ƒµ[2¥Ý¯«{­9€´é!LŠœYˆ.tÞìœ-¶ß½Š¨v<+BSv¿£5îTškWÉÌäöhþÑÔGtµ?š)Ö²Y%Œ¸ÂFC³Úh$	}…­j:pƒ®9fˆòÆ@#æ«Ù9JHÛ’¾àŸÍ¾ó¸ìM™œã#¬©ór°-/Pø²³÷o0Ò‹$ê!? 6—¸Ðd6›<5•?Rú(T£ºGkŸï)‚|ÉXã¬=åï³F5»±õõ?ø	O¥×-òé{Ûv÷ïzïmODkKä‹`°ñ¯_òË ¥ÍÇ¼…°ÈÒìîmk»	é§Yôþ­[á4¥DÂËÂg»¬RDžÌ™9Æ}ÐböÅ,Šx4Ê
!(¶–ˆÜƒÚê«—	ï `Dâ3ðŒÖ‚/³Ü0ÑÆÌ#¦rëîC@åÖëæ¬]0gWÍœ5¤d«ƒÔpÎbk°6p£~=m7'Í#Tåw¤d1|0ÜÛ ÜÂ€G¾~0ø> Z¹Kê^Œ°µ¿ñ-Â)XMG‘pÀcÄPMr &{Àš©W-Î±Z3xc¨Ñ`bÙÔ1ÙˆNLç‹z"JŽÓË¦’È/UŽv> _^x¶qËÚÒ‘e2Ç
8ùV@šÎ?CQ“v:µq»(‘—ÑåÑ´Æ™4¿Ï@oÜ2²Õžt½šÈN^«T…\W«á¬ß_U‘$Ï˜îk.rf×LñÄüôN,Í#.ßŸËT•šr ¨þ;s¦Æ´5~={ùF…þ¸ÒµšßƒÍ5ŒHÈÏþéöÍ¹ÇÐÚgÀšëïrµvcˆGkÄvä«×jÅQzä4š2W¼wo~aN—°‹/æ3ßþú“ ÖÄjŸ¬YQ¥ÿJêc/5ZŸ>pàÒ¥—öö*ÿ´â•ó9M+×&&z2é(1j5­M³‡?ÖcY‘ª‚¬ðÁY¥3Ê3³kù<ÿþl![œHµžá2œSŸ Ü¼^¸®¢*Žµ¦ÜT÷ØƒüÃUX{)¯àÚkÉ1·‰_}81ý¡ÑZh«ÁjçV»{À}mÙøO¸kÐš€W\{Òš‰ÝRK-½Š°vß|5×´6¨›ïŸÇWs×J£4ÅÙ«¦µÖx‚ÍÅ6ë¡9aD7¼µé*õŽøcQOS°³£¬Æ²\F½h³«¥Dr)3×èVRác–ƒÚØŒðrræµ)™0a±‰„V33Ê,¥f%+§ß‚Òr#2FRçØG$CJÖLå³ÚˆN®=¾Ju¹#ÃTAÆ•UÙà#ÈÔþ-Þðp7rÁ óJîgY`@×Bð§ÊéÓü­r:ÖÞóæƒòÞˆëY³µ?i¹VðÕ¦=ð˜±šÁÚ¶òÔ§“]8¢=k]Wä†rÆ¢#×ÍaÍ+&ÅjI5­%ÇŠkX™(«5¥¸¨šKZ8g–‰ØcsâšÅSr^ôîw6Îo\³–5'ó¼#X3çmêÑ£Gÿ2;óQ5«o)Xã?¹E‚yi„Mò¤N°„5}jÜµ°¯•ËŠ$ëlXÉ":7Üà†50Þ$X[l÷÷n¾ l•%Ý¿yv?Z—ÉM°f•ô¹ÏÏ_<Nvÿ{6ÏÌ:lÐšB¾¦ÌP´°¶.r“èüPAÀˆÂKÒìÎ*<H”	0G$¸¶ïÇÛvõßÜµË"Fˆï—¸$Xû:kÍÑý›ô¬ÑŒÚ\v¿jnD-»Ð¡ÝÛd¿õók¨œ®ºŒ —Ç/iÝ”ãØDJ”4X£ám¹êZVîä.…Lâßõ_6o)‹1€5p¶h¹mÛn`gÍ4¥å¥ž5w“¯Æ=ˆï—³¶†íçlkît×îç‹Ý‹——»Uò¹.3Ò§²&-ˆ¦¹sZ	ÔûJsÅ‹(.§ÌjñÛ˜f¨I«!!¨µi¥<ÏhMOhSÚˆ½‘2Â85ÈnäÆF
õj¿…NµqJ"“Öèë-Žg¼6"ùw<èí5XÛ¨e=XàÑ{ÊF¶Zx`™ÄŽòò¥ Ö<Ž9©hHåÇWâ½	|1U¥—¢Eª …‰¨GˆˆÚÖ®Akñ8fY}:^ƒÁèG£æ£ëðd=ƒƒ6YàÓ¢I+))Î†a¬Ö[¡’s32×J*ž„Õ°×rù¹ë¿#
òw×Ÿ·„®WÂyóÖ¹®M7*|\±°%y3ía}çÊ‹•Dfû‹OÌX­ñ)]µ|a{)ƒ 'Ù»qàçúÒ"4>Fí×ú´V-Œ;Ö
¬74Ö8G%Ï?¯!¥£éiá[…ZÇ:ñŽ1,¶´Òüg«ˆ-â	ÁZwf­ª{È_dã“Öƒµ€Î¤À_C¬qJ¨$°¦‰_ýêC§ÍXÍc8&¬Yª¨ôDÒNÖZj©¥WÖœ¯† 5®¥õ‡C@cÖt}äã/sÙÜõÆÒ\Tl0öKuçVi­ž¥Ä¿DØ#FÚhImj…‚®ˆc™Ì˜®y¥²d‘"u’6;—)@tjp«é¢˜ÒÇ®ô©eÍÏ•ÇÞ±=]ñ7ÑFSæ´².&òç@¶Î¡·Öô¬ÄôqÆúËãÇøË/>ýôvŒ)ÚÈrdPD$Óv*ÙR}6…¥–ÌŽ P.2¤cðÖ1ª£`5—µ,Lá¢jºt£wÇÙSw"í7nÐ.â8»há¯­‰Ã†5R[­ZãŒ*–DkšL‹(äaº°ØçéÉÖ¼ Ö6-ƒÄ$s‘ŽI7lM¯­Ašr ÙqF[6›ÔiMXÓqR°¦½Ü:ZK¥ÚŸŠÉŸw‰ñ[ãOZãkÑÓÀÍWo}ôÑU÷˜…Ð¡ó,±"RÞòa­8^b4 2nc%RcWPÖ,›ÓN÷¸ß¹6Œ&¦“x…ÆÜðµáa¢4ñ×|/Á^§nö:—HGš³öý¤ÆÃÜ›{Ö®¸IkWŽ_ä#Ë~ãvš“íÀSht”EAú´¦nb5tðÙÜÚÚpµsÖ$™gî;
ÖT$;^{÷g¸o¯söà4±û2+~C-®s-Ù¼i½MPû†°†ƒ‡!ÂE¶­{ðòóÒÔµCT2UÀª56ŒtGeex	ÖÖGx°YîM‚qk}kbµå.×À²™µæ–Amüe±”]‡p ·n;´MÎZ0âzÖ¤»Õ¦B`¦M­Oƒü5»7+„1ý¶»±ÿ¶nµ	sAÂ?›Mqm~ÕY[Bî€µÑ‹IÅ,b´-»V¿~qÕÐï‹î7«„ô¥ÇÅm®«­ÍÃ²÷<Ž3h-“¬eÇxkÊæ¨áËçÇGÆ“æèGÊÏ`þÏ+··•è-¯	Ã yåÈ•r»kŠÝT~ï20¦QN^k¦¸‹„L°‚Û2)ZÖâQJìÇ2=•<\¶DtFñV‚=Y+É=“Å6”i
–ëL6ŸÕ¼×¹Ézur²”­+²pûêèg@<àŸ©:ÓàGf¹„I% æâõÇ/”ÝÿØÁš"÷¯¢4­ùÖšüÉî?p`hšIf	¼)û(,Gä³•ËÞü³·Ÿ}{½3ª*È_AÆjÎY{¨‹*¬vRï¤ˆñzMwÆb¸a¬(9FGÙ‚’µ&B²˜eT¾8Ñ7¿6œaœVêKÝ¨œÅ œåHªT=Š',©¿žçwÏU±<]CD)‡$Ñë~&
¢F|g-TÈne-}¡Œ¼ÐdæXMw¨¶ÊjX&‹,ôÚDìÐWcag‰*H`­ÙRK-½šƒÖ®²²¡Øýk4­Eûã®rÀdQ#ª’WW"ÎQßtGlá°6µÆZ“±f5ZMdsJþ­²cz£æjÙi*‰Ìå¸à+¢ð"žU#MÏÉâ±eélKp~´6&0Sˆ¿ƒ5!ƒJHR~¤6¯EûŽž;}ú+&à¨gM›ÕÔUvB¬ætþñãÏ>ûìBZ1•¥ÒØNFžEé.ÒÃ6V$†¿X`bõpj|1ÉèÊþŽÖ®ŠXÕ›e°ÆêÒiâÙííø¨&Âs2pØAeü-±íÖŸSûÇÅj"‘Jîgë+)X½í,Œ¯µBÁ‡5Ïm¾²at?)oÈ³”G…­['§‹¼âüÆTcšœEd¨eyÑ‹NÃïšåµ÷-<yðà!uïœRg¼›c÷f˜2ÀËœ˜—OñhvLÿ±«ùl²­XÈyIhL	Ûà–Ok¥ÚXAJ¥lö¶Ì­GYšå»oÝü²ÈBŠL{¬ ¬EÚ‹öRfÆ|WÍ^Vá-j/Kj]ÖœÂ(H[Ö;kÍ3Gûç’ÕB
ÖVcF\ñ£ds¯mÇÒ m0­jH°†løÚÍÿ¯³ÆÞ:Rr°&Ö˜ýÈÏ9È²:síµ£Síõƒ9ý”=Š .ÚjÎ‡5»7arÛˆ_†Æ5ÒûƒÞ5X-ØŽ‚}2 5aÀ€/hYÛ¿ô«5sYàXíÚ¸/lyÛsß¨2¤á˜m%4u]Ö”5
°¯]$Ýc¹_G»Èù¡K§´ž57­ïYƒÐÕ`F[0b9(!¬­ÊŽÝžÚ²2O%š,—…£~@$¿x®k–.Ò¡EºY™:ÙÕÝ?Ø¶-k²ØúCV“gÍíDB`ƒä2í>«E<ÎYO‡f`³¤â‹=^ÄY#®?pôÉ:BcÞøxÏ^Š ìõa;«æ|¯óÈ‘+²q›’ZB%	-™¼Ÿýè¥ÔQŠ“Z+38MEd»(ša›Ï—j‰žRªr§$&ñâÑœÑ¨V‚Ü€µ3PÚl­tgr’s\fõ;Øl<™¿s&G°HL.NŒ¬ýÃw*=¨RÅ“Ë« 2SÃZc†¿ÞºŽÏ]x¦¡Ø¿8ÿ‚kÆûÀšEŒœàs© Ò¬µ¡½bé¼ÇåT‰”JÍM\ŸÏi
ü×ÿûço ¢gÏÌY
!A??®cMF0MÞÚWŽÕN¾yéïvôxót3uD<1Çj-	ÖdÉUkJ‡Ññ
u4,ªç3ù;Ã	áY#†ª3Uœ²‚ˆÓñ™ÆDZoÔñä¼#e«µ¿`x€0„5‘×Z8;Ðt(À4Ýy†±ÚÄ…¡@5×®°ÚO¦4eÍ¬¦2_ÍéÞ³ÖRK-½š°¦8HŸÕ0Õ¸³ô÷[¹C¿KãŠ¥a5{»°Î5•¤ÄÜ˜!¹wAkè¥:H5Ý'&ÎU¹VŽb¦féõ¦õûðO? W-ç¥(ûçlàòŸò
×™Ê¦RJûÏ¥
6›U*šá9k9ù;ÐƒsÖ\
¡÷×YkíGÏt”ÆµÏå…m’M £û;|5n YüöõÇ·øWz8?µ‘-Ê@+{Åí?2VìèNå²Ì§ÞÏÜêX¼ò±yk¸J„-?$Gƒd][6Ëï¸·÷FÔŒ¸µâ0¤5íYùã~åBÖX¡0µMÖH1tJÂuB”~ª!Uó(ÑºŸ|©m“’Þº2He÷ýjT:æ’ŽÀ£(‹é¦£UIXÍ”’Ã&åê¥”¹›KÔLóŠŒµ)ìD0mI¬´
Ö bƒ5
¡æï>É‹ÕÆªJMä™:äòûÕ¶VSóˆ³Ù°Ê 6þdë™`.6Ì25¥òIð3üýiÚ l’=öùª3úÔºVÔøþ
]üìßoTwšæ/öXÉ¶°K(\ø‹2ÈªX}jO©`"#|ª¬V—­§§Ü\´&ÔI)c Ã6±é.ß4dHm;†qBË"˜P_ô,J+Í&Þ)#1j4s•ÉUk¤ý<ï÷¶£žÛÈëü¬²)WwêøSÏû>oÜ§ã¼HÇjû«€Ö6YkÒÅAJú°cÎXíô<‹I­k1«¡˜ÖñÐŒÖ¾&°_b[kw¶š³¶}º ÁÚüükþþÀ×û ±7~þpæ`-Ñ¾×°ÖÞ}á-RF4_±ºÂÚÚÖgå‡œ5n›PÍ`í¿$J"	¶¬XÄˆ¦aW­:q^«çhÍpÆä ¶„ŒtLXÿSÈ¢âqii‰ ÿÃ‡wÖ¸íÖl°›û9äNYáð*Cïñã†j++ŸÅ¬¦ž5Çjq¤óÔâ*H}¡Ù–·ÊìwÝk‰bÜlEu˜½ÕÃf$.=Ïj<zk-¥«ÙqiEïí{,[dIIþí¬`6ÁZûúG«t„Òt™iËÊ`EëÖVÛÆüÖ¥-±Û–ÉäQ:Œð†CÕƒ¥9ã^‰FkþP%5¼>eíê¦–5sÖRt÷..ÊYÛVžËúõÀ//š‡Í%!ncc1Y¤@.S«¢‡ ¾–
É„,cè3,“Wª!£°³³õuTJxmªf¢ òíwnI±äÅSÅŸ’jß%5}¯Ž,a$`üZÉQI8ˆ”4ùÎ…Ÿý=»{ëÁ#›v9X»$ÖDk]µ Ó«•*u®r^G.´±)þW}òÇÇý»ÿñÉbFžÁjÐZTSyýú	ÁÚÖ®^ÿÐù«çÏ¿zõXg´c}kÎ=K£hjku•q‹ºÕ’•ÍÆf*6AŽXM@Z2³FOžÊ'g¸K…®¾‡ý—!LF°÷Vr„iŽr6—rêá»šÝ´pIùýqJ¿[k“¸jñ:f®x×B¢Õ’HÇjÀš™k]UXm±ËŒ˜«¦Üþ9¶XÛÑŽvôcÔ3X“ô%1[XäSc5’¶Œ-hSÞSÞÚÕ2=Àçá>[›hÊƒ¬%´ÖÝ7Ö‘bê·6øö?^Ä\óý!­l‰þ¥ÂÍQåC.’Ê©²¬(yq˜nšmÓ±Q%ÇeLÈúIª…±ÅßÂkm}<µ/_7DÃVã Y?•¤¸ùÿ®!šÅÝZXãÓ¾<1•‡ŽèIÊõ+–²ÙR*	ªŠœ²öÞ“×'&×lÒÑý8Jvuu+IãÆ®v¶µF‘lÍÈf‰¦]JƒÜ…ÁÆ52û÷Œ¨Ò•DF†Ú¤Át4X;$±Ø4åY)ƒ"±ˆÃ4gÕæ¶µ,¯\œÉ2#­˜3ÛÒ§ü1N†¹Y '·2¨,†ã¾Â½B ÑØº#HÁj5…‹ÜŸ°
Ö,Ná-†k/Sù¯<¯®®-Îà*VDZCûû¨04ª©Øägkl	¹´9TaJípÜXñÈN`SiÍ±¬™ëHYÊÚãõ ²ÒOdôRd›
!‰ÏcÀZGµƒÖ5+k­âÆeÂµ-µ$’[’yç
ÿ%Ñ­æ³Ú»	¬9sÍ66iMlùõ¾x6ÑÖXvgsäÏ8‹@éµÃÀÚdôÿôg@ÚOšaíñEj?°öÚ?¼ñ?à4=ÄYƒÛ69kÛõ¬±eÙ¾gíoQÈckµ›î5ÃæhïN›šŒµfEw&Mkü8WG)ïlåéî#GVV µÝæ®­à †öMz¬úØž®°ß˜f5XÍ`í2¬f¨†&í+òÖÉª¹hÓ†URÊèÔ|L@l•çoCáæWªU@Zk*{ähU“¤‘ý,®úñéSÞWìÿÑXmN´(’óQ¤ÇöHëZckà&E&øê2Fi^{;ÌÆÛG^oú¡>¥¢êQSC*ýeW¬mmh„Yk#$A¾¼NkÛµ¬]¿~’¾B~‹¶mZÖlÀQA.æHƒ.ý1q×JÆQ^ gô¤¸V˜Q"÷+¬>J	d&ÊnÃ+éQ3–ÎÏôµ •)â·‘õÎL]xç‹Þ¾¬âûÕö™'»Ïmê^˜+0¡¿¬)·	Ø£ŽP-kA*¸s÷zü‡”B"k¿úBoyç/¹BH%Œt;†ý5=ýÛé°À—Šü}¼Å\X{üäqñÙ_?yBÆÈÝÏ#Xû”°’_kþ<»Ö×Øž?¬Aki®Ë]Ã.Ô#‚5v`2Ã#\RÙd¯Ah`J0Ê“I$Å43e°†Ýò‘d)žNkf—óó=%ˆ9W$xÓò ù‡>‹ÉØ˜ØI0M@&Ù©„×4Ð@ŠÏÚ4Vãf¤Ö\	ªMLÜÕÆã_CSÖ’†5—
In?¬¶3fmG;ÚÑR1¬õÊX³¶µ8a$Ÿ·”sÖ¢PÈ.]U© Ö2\»k^j¿Tž³Öâ„»_#YMÞJï¿9:TP,¤º¸eT†›ÅQ¢ëqÀ9W7ŠTv§éØƒoÆ¹$Ü‚xÃ‰¡ë¤¦¯J ©FÖÈe‹¬ÃÚ—ß}·¬a®ýç~ðÑü…ôŒÊõeîÜ›c¦h8¯´ç(åüì®!¦¤©2 ÖpÖÞ{}R°¶ª9k´ž¸6ôÍùñs¿z¹;Õæ’û7Ê¦®­‡Bö=:Â9—,ÒT¹ýýtÌÄŸt[°ÞÚˆ¥‹h’˜¹&\k•m±zÔb ¶¥÷¨Yi1Ôºã!AXÅÙ–¾öÝÂ(rýÏÐÆ5Ä)€äÇc38kEEÂó=¾.rö¾ˆõäFðg†k_"`ÃXÃtSÛJ÷ÌYÿcŒ>œµ‘«æÔ¦F`µCÈ0‹5YEå,îråÜÅ&~¿|¿°ÍÂF¢zÿxÒc¢-µQ¬e#KX5ôrÓaà/138‚µ$¸koMjîY3gÍºÖ–e­Akó$ŒœÁíZ×·.
2Š×`Ë¯5´çËŽ`Xkž³¦[s´ˆ}mêY{wþUb&õ£BK¶,ä÷ûâOÀ¸Ií—NÇËiÖW°ç~¸g-fF;’ÁÜÍ=k
|l6Ð$[7—°ÐÖØÙÏ„bc&›”½ªA)Žulãª W„hÂ½ª•A0¢A`š‰Æµ½@öýÜOG47By»óPŒ@iboM¬–È™jÑÞe`-J‰Ë ¥ý[‹óI¤æ£YÊŠx´ñzö¦êÖkwâ¾µ(³?Â9ußí’Ÿ¦jH`öµ”Zã·ýb¹%µ±µ·ÇÞZÂjì"k‚4n µÒ›°#µfò†km[ª)P>,ÊÉG¶¡Þy”­:¢RìŽ°&5E÷7ÃÚõUœµkz`‰˜Ñ@°&pƒÖ”:Xb‰¸·%°æ¡Ï£d¯ÖÓE"$}Vc~s—ö<H‘p4ôjS³¸C1F*~„¼F­œ‘Ñ)‡§ÈñçízA)¬8œ%„¤+ƒ×[’.^t¼y™s¸>ñý¥¢Ú©}/ÿðøîçŸÿëWÕhZ›˜°Á%FkçÉƒ´:È÷ÓÀÚØôûdÌp1¬Ÿ¹ònÅ×‡`_}òäñ¿Ÿ~¸ðVûë'üŠùøcu­Ak7N|¡]}Ú ¡ƒ—.d#Ý¦Ô%"ÖD9Tâ*»]lb¥ùrÐfÁ‘Üå•ÀWª"×˜	•õÅ0W¨.År+N…ÓÓykQSóz®Är¯æ‘ªL˜Í¡Úºµ&,ãØIO*¹Cœ«iÄšÁ[,ïoÐï7²Ú	Xíþ8°†ì§ö‘ÙGÃZw\9·ÙjàÚNrÿŽv´£)¬%éýªƒ4TÚ”ð$XƒÖzòÀ[ÁšäeøTOÖÒ/E¤5­M4ÁšqÚ}lc|L7ªBÒû‰ß¢ômðâÛëUð|Êè99:ž—+D‚o#®ƒÕ@6®Ò¹‚¥Ås»ÑPUôbX³q_I„¿ßÄ%Ãû=†ÎäÇ¿¼TÔ@6d,XÌ˜<¡‹­áÚwoÝ™Ãõ)f
£*Ï
‡Ž¦kí»úù«Çš;ø›çðòõ	hí$í«Öà4ä2¼Îì?wn¸µ=öÔ6d@‚jxkGùQFk˜uý"2þÂ_ƒØè_c0r°–8€·6âÆ­Ñà?—°5ÿÍ9kÙcÀ9hkR2YÍßp§ùcÆj®"RÆZ…•rD|;Ÿ;çŠFløl9f/õ¤ 5¾­\ÌwRD9=ycâäÉÉ“;j†ªKEÂÞ"´&\»Î­u§ûîßï›žûÐ’ÇJÓŒ±›‚ÓÂ ˜™ª‹ÒŒÏX1AvD†ý—Ó9-èm(kõeC³±kbªiÒšUEÚñHüYÉ¯¯aØkÂßªÔ»ÔšEý­ò,W¯M¸0È&g¯D!Ýý\ÏÚÜ-–k×€5¢FÎ¼‹À w“xç­ia6Ï­7«íc­;®lK½E#z¾Q?zÐ&·Ü’!k,¦É‚”¼æfÀ!ëWcC$OøÊGLˆùoË'Ð¢»%Ú¶RÓ°Y³2%]kÀÚÓ#/˜«&;Mø¸P¸BZãr<›¥ÙŠÀ,7ÖÚaÒÒa*¾RÔ³¶û)!JYåŽTFZq"„Fžˆ¬¶MwÛ+Âä‰îÖœ.ÇÖZì¬qã+)…¯I¶n‚56¦äP·$BÄJ5«]JÕ•#{Ÿ.éIõn§;[úk4Þa­i
¶Òùå§Q¹BAdKXÓQ»’ é`Óü5ƒ4«z´uk‘¯Æ»9BkÙÓ´ " ½V\ˆ›BßkLZ“ÊeV¶ÊFUÕáÎá_¬¾üÃÎÚjg•UÕ«VƒLk¨	Öpµ4E…µîN6	¬¹|`-¨Õj¼¤PÆZ­««V‚£`:²2™°>Eê~þÞ©{uÆª]¨s1*¦¼Ñ›ÿxQ­kô¬½óöÍÑR‰XA¶YÆu…Z^‡³3‚5Ê=(b,x5¹LÕëµ’b#ËaX?óðáé¯Ï<øà!Žà|ŸÀÚððíÛkc=ÇŽcrÛôû}.btjcmù|ˆæÍ=ûÇåÂã;Ÿù„BH*!Ÿ}ü©eŒð	(unÈö9ÇgçùÈñ?õ¶nw»-3ü1ö5C-á$6¦Å±È_ƒèÒÈ=kR<Ö€² ÊÎ€_‡ˆÐ)ž¡u—2$Ð_¬fµ5¹â^¢Fa5êlŒ¬ÅP–+Æb³;_-
á<¢6Ôd°Ö·«ñv;1y¼»éÁÙ·ˆ"cO˜—Ù“vfbïhG;úqÆA:X«ŠÕ"\Ûïr!y—µO<ù-·ÖÕ#z“¸DpËs\ i-µ³IÓZ¬ñFºF?Žr}£ò¤®îµ‹ï\ô:=òûs¤0‰—VÖRóà\d1G¼DÁ'Ì§Rôfžš±9ù±´mdÖgeÊ·å¿ùò› çÜ/_!PÿÜXûN´vöä	†b¿­¡[ódeQ"S.NÏŒ‚‰¸jC££•¡£‡è+÷Gäœ°þö\Nä,X'&vFà¡uîIô‚¿¶Ô…ç`«\5»!Û×`l7t­?‚5fecª½j½k#ÄMÝ7ÐÞþê«íÈE ìS	 ÏeÅoXk#Dh÷GÎxÖ$÷BlžFGgZÇùê
¬õMU³àþ¬:Ó|Çxv²hQþb6M -Åi¾Ké/ÞBûóÉÕ“'Îž<k³a¥Ùjöú²üòÜ¿D_P"yâäbW÷Úêýµ™ê‚ÒÓaÈèÕ1Â£	ÏžÍ´åFÍR#^FÁ¡eþ=ÙkŸçh(ÆjhT­º!‹îßw` WÖ	ÜFƒ5±Ð@v„E¯–{$
–ZQG‡h­ÃJÊ˜5t´ÂjˆXq`\KPM°¶™ÕŒ×šºÖæ$@aaLÈå¹ÓBµ+ê3Jãh½’&c{HÓ46û¹XÛ¢rsc¢$’©×’aÚ[Çÿæ4KÑˆlÖ,o½¡ã¯ko:Xc$¾ª u#Å?vÖ¶¶Ö´Ž7M‰¿k®™ÇÜmf5Np#òHkjîR«Zo•TH LÀR¡$²wcu!_Mq Ð~ùS‚5KÔ(3Ö¦½2×Ž¼pØþ!iåøq<-íÏF)§!p{ÍY3Mº|‘‰ÄWÓ-Î¹,\“žwÖXE[6R|Úd¿IõÏ¯:ÿ´÷š¨m)2Õãz·ÕÂV#ÛÐý+Kt­=U«šÊ Û4§%¯ÆPl:×Õ"XCM°Ö‚¬¡V/ãË`ãŒ6m,yÏ“Ã–QôDÐŠ¯¨18s@ÞZg-7‚÷=Ò2¼º:<l#ÖV#Ts›æ2ÈŽ…Az>U‰¼g$€¯­ùÕ÷ää˜Ø6‹'#Ðˆi-pÑ'ÊQ(d1W«å;µ€FµrHÝfÊ«“‚‡¤ö´ßÿ‰iØBRZ¯*HG¦Â:¾ZÐ£qÑ÷T%ª›«'­¥ùŽ©Sk×h©ÓSM%sÖH8f;Èuª¾ýêî¿ÖÏÌÝºë÷_Ÿ`’5—AƒµÛ¦ñK}Ç:»nß>FlþØ˜WPûvÅ¯ØÄÐ öù“'Ÿ‡|òäñÜW3"XûèSeŒ$q%úèïªá¨†µvÛé*¬ã"EÌçêŒµõµ´6Ñ2ÆF°–OëÑQb#	è>¨hÈœJÑS2Öjüòžï—fgèRT®J)¥ÐIÜºî$n%ö<ZsõÝNÎdcÑ¿—‰4§öWãó<(5°ÖÝ—š¡ZÌj“ümÁÂ#-·Ÿul¬U)Tl?ï¿;Éý;ÚÑŽ~ÄƒÖ,bdn!.ƒd_ˆ-Eü¯}ö)+­¥¤|ÚÄE2ÿ}Õ’ÑZsx¿%Tžàªiª`­LÉ~ýfAäÅú`È¥!WàþÁJ ye9*XkHò½>’ê(:«Íaè`"MØJõ~€ÖrZ,¡½ïu«õtë:* ´ZÈ/]dk7kZþPšnð/ŽÞÇ~;U*MOÏ`û¼46r!YÈæÄm-×øõ/6Á'€0¦€™]xkÛÁV="+TzÕÁšfa£~÷‡gà7JÇ-|µôS9ÒßÒš¡U÷õ«U~—		ŸðávKëÖÚÊXcitéPÔ+`’oÉ"ºWk Nj+T<ŸtLÕKRÂƒì¼µºåøqÀÏO*›û¬h0Öb±Ç!:k]k“ãÝÝkk…po­Và‡*4´ÀÎTM ¨G_ãö5böZÀjƒÆ8rñþJqâŒ^iÍUdµ¹(ÖC7„ŸÖ?8P¬i¬ø¡ìÒÓ ü
¯^[+¸Æ_·KWÔ8àÒŸÅæ¶U$ÚjÌ°†¯æÂ µ½‚kÃš§BkÌ\;`¥ƒ˜a®’5ÇIäf_kûìþçaÍ\µ7ŽyË†­)ÆŸŸ¾õó·ØU„¿`FCdöÏ†Õ¬òÎåØVÛÉ­‰¹mrÖ¶„5ñ·mFöºŽ5L67®à6au­ kì¬9ôÑ^dP5w¬%œ¬Ù4hc5FNÚSÖNVã¨9i…sª?tÑ’O!J}Ç÷N ñÚ6…Fj,®RÑý|IË[Õl©º½/!¦8ñQI6”yÎë—äÌÆ“î5¹mCiw¸ÅÇUÝÐŠ†ð–²²´g7ÐÆK´bc÷wGå¼§ÖZ´×â`-Á6cµXqÜˆŸ	|B=‹ƒtSõó™6Vó4ì#–øïŒ‘°Òß¢qØå
åÖ–K¸ˆÑÚª|µÛÄËoÙ³V]ì¬®ž¬ú¹bÖæíÇj[/†ÔèeÝˆÍ‚ŽhëòŽ„gŠ‰`RIjîÕ€æNò/J>¡þJ¡Ú°ÖÙN…$õ‹P‡Œ³Sß_¨óN^,…<À2 §h?,6fA{ÀT-#˜ñ
S*Ð®A7µpT¡$À5‚$ý×ˆ¬/ù|;­kÅ×NÿáÁWWÂ+ÍXS†#“ÖÌ]Táâ°Àjøö1<°cÇXÕrå‹ëEJB¨BWµçÝ'ÌÍ}òÉÝ¶âÃyö×ßýXû”Ð`‰Õ(Q°8Øoø’tÇÎÔ%#ËæZ+²'eè¶Yoc šaVöP-êÅ.¹.µLºÁ‹¦§y/žm¨E1,  Ý§úÈý€~€Y™ÁÂÌ§-ÒEOÚ4­©S-6Ü¸AiM#î.Sìùá®j Z3«Q)V›X³Ç˜g_”Xc¬Eš[–þû¬íhG;úqf÷ß‰´°¸€ªFlézÖŒÕPºS;„OES6¹žf2iÄqÞóÖÞ£ZÿyXs¤v_«éß*¤qÍ2û©þ§?q8Ä*Ó³¦ôÇ¡úÝlçqÑÊõ!N#åW(¼+ù)?Ðcqa*ú7‘`¸­%Ó¡[rÝ²xÆ¼ñ¨‹ê+‡tù"‚µ'¯¿~Ã|µ÷üùÃôXƒ";RÄ¦Çf§J~ŸþŸ´¬áç0$c-ÛNÉ"$…û•kiY8ùÑ{ÄAÒ­ ï	R¸ºJç¯^â‚­JHè°Û¢û]šˆ6-"X‹Ô¿KË&[¿ùk´ƒð/ Cú‡8jW¶ÈK‡À8PMç-l„,z¶ÏÆÎ¹mZ"å¶œŒ…‹øª9µ? ¢V@ûÒÏ+ìä¸	çÊ•ŽL8U
*GÚLm‘]¶ÂC‹9Ÿl‚ôÚ‰ÏÖ&W'¿»ñ®Úwæ©iÎ/=‚ÖèZcÂÁäxü*Pz4SPBÿ@Yyà¼Þ™|@/#ü•SÑkÁ(+­bY‰;ÖæÖØGZ@üÆªžŒ5Þf©%Sd€³ª“¤&km‰éß` Bk$,-ô¦{Û[z×V¯-o3g%qÖ6ÕAr¬AiËw®,\Cw®ÜY ÕbXûÖ¹jÑšÜF`Mlæ†c»RHŽkÛ8kÛ§æ”>Wq%ÁÖ¬	3ªËŸþü§ì¾øâ×okï^‘±¬ÑcÇÖBÞýuÂii1¡³Íq”I"åÖsÖä¢ÁjÛÈ`mÿ<°¤š§V%«±ª2HS„;"7CZ5ÃšC#vÍ|ÓÜ2|5WöhQÒ^åNâÅQý¨oœáãßHqÖ§RU™Ipÿåæ*H‹IZÖ,[$Ñg×šž–X	¬é¼0”ž!#F¤UŒ6­:ÛLk:yg³ÏÆY–••j‹æ¬=U$ÆÚ~¬5ÑÚîè3¡=uô.	ËÔ¥	‰ÑbhÓÙuq ž2‘Yàûö—§	k­-AàËØÏÒÚTÓúï{ÄZ[l¶Â—¯$ÈÕT×Ë&òå·ìY»¶@°ÈÂòo/ñ§=)yþë1#8øKîÏ\³š¶aÎ lkzfOÉÓN‘ë
VP)—æ4J¬P/Ô2=µú=öx'¾¢ £ìÃ†b×Šƒ:¢÷6¬MÕgÒÌ_#Ù&=ð#ß˜YÂ<;Ä“”ë¡%O†5"92^È¸íiö¾f„^¹ûìÁ™3·HÖ¸Nœ«Ù”Í«t­	×Ž™Ø÷¥=Ÿ¹Øt`»ì&¿-øüJ®˜’‡Ÿ?þßŸ %ŒÄ³ÖôÃ¬ Áº­Bk}U2»«uÈ¯3jbÁûj†µd×ÁšN‘q6ìQQ#-Ê!æ#mj%&eÏ kŒ”£/Ý.¹Å¬Ö™)ÒóÇ¯ËÈq%›Èm‹­³®hìµ¡„Ã¢0Èx÷¤–ÜÉÁ¬†ŒÕÆ›XíuÙj÷ïó£5Û.º/´&^3ñö+\Û	ƒÜÑŽvô#Íî¿#Í!«ý^dÝkÌÖ™êå+e]Äúœ³«Ç²9æÊ˜ÜP†ûÖt‘j²Ö^‰FLS@uñåA`M™¡oí¹Bðçy½®¶4.,]˜Éô
è•‚Õ|{D‹®§ù4š
&èÊ.cGÀà6YwÀÙçäÇäÒÒ°åÇñw¦fbK.¬’²ä~Œpa¸ñºÑÚeêUÒ™bX­eJ´¨íñk³\ìG‡úwµd¼ÚìÚûU«x”n3¿eáÚuhgŸAý_Ôe€Îóû«mM¯FÊŒµxÔÚº±ÆŽS¿UÛõj;{JÈî¤YóZ,£µ—ÚAx!ˆìõ÷WhñÏjIzô +ŽÐ†HL²çåçbÌÍºòF½˜çô:ÛÆ<Ký4–¡¬—©……¡Œ^)Ëƒ­ÕW @GGwgGõìŸsÁò/Î
åX©Þ=or„³¦:H4¹FYaVËT uxMj¤UŒT/[!l…xWè¨Ã
ñ)ÚU°w–9ïL4–ˆ×ªãjµ—C¥¢ƒ°ÜìUmáäÒ’Ï$?³*—R-­½Ëö.®ºèþ×›ym«žµ$b$*Ä˜¬éOðk«0aø§%W ©%Ö Ÿ`ÉYÛ÷5°¦6kCÏÚ–Ñýb½}Q¤MÄ6NsUûÌa»øâ/2ŠÍhmþâ¹Íß™s¨†®ÜÕ°mõšBN6Éœµmam‹“Çíô^ÂE¬QÙ0A5œq¦rs±q¢Ø¢„ì.ÛçKŠ N¸d&-†5ê.Ÿ
ÍöþlEtväéüžgŒçÕ¸¦¶ÄWCæ«E¸öYóœ5×œ¹†ÖbÚb·)Ûqcý¦òA$uÖ-ËPs”f§¹51Þ¶l1ª¡ÝÌTÊœöà­-µØ‘ü3»ƒ0H«hñS½I±c4FÄæb¡Iñt5ê
¡5Õ¦«©•4‰4°ÆCúyÓÉéd¢–á¿,Õ »±òxp]«YõX”/²eÏÚõÕ_ïßAµ×oãÍÃª=_iGì¹@Ê1‡Íj"u2G-¢5<ÕAê<¬fÿ`Í§_-Ãóº25ŽBk…!±šp +ÍÌÞ›B™Ü(gBøS%’³éüÔ…·O1g¬^¬u5fTL1“ïîŠÕPŽªÁ²±BðB¬¶Ówýì«3_=¼«ì~k¢5±Ö‘Þïhmx¬ÁiëJù|B©D]«X  95Ï>yöŒÈ'ÀÚ“'ëƒ±'®ó¢q=ùÒflkL×&\ò/é;†:;¬92S{¹kkf¶1PÕTžs Y#L.%Nä–1O%rÃ5ö”UödrÅ
~'{xT,é 1Üö8#/ñÎƒµ&‰Óâ{Ž‰éœŽ%´ªIØ:ªý~«a«-:÷Í¹fËšYkk’pð~iÖv´£ýX³ûcX[X¼“Àùý½®=-ŸêàW‰]‚µ½‡÷x~FåA¹xk{kõMSøïE¥†(óOuÚÔk 4ÅpV<W0vŽ
£x*Å”åEj,¶]Ø=¢,TûXÉ•]R¡`C°–%s[Ò¸âùÙ\¾{ü•//Q‰`)VP„Kî‡ÕÄk¯kÒåüX:‡FéUP{ûzíCM÷ÎñIu ¬Ü^"D³wµ/ÝšPÏÖ50g£þruClup‰¡Øšu”ÄAî’±fGñ	L5ü³þ£‡Ž/rT“Ü©
Ra"vë·&5|46Ÿ\HW«$i„W#ŽRÒH3®m~y8§—O;¾f_»†4ùd<ÖZ×ðË´ÏY7ðÎHWÉtH~1Ûæ‡5‹ÙæÁ(µØÕá­Ý_[\UÏÈªXû»—ÏE‘¢µ³”IÞ_»öþ‡+·I³Vd™Ö}ºÜI1¨MÝ³Ùe’iEY#,Xe{³~¶rÙŠ§öo8s³b/„Q¬`÷’ÂY$û‡´+É¿£º¸ZËxKš[e°¶©5WA6;kÀÚþ^Ü´k‘æ€5ßáXmsM7-oê	+§ÿÀ7_üÉ>CM`ëë7“2È“žKÍß2¹ŸØü&HÍá„†žÑ?pæ5þ­3±pØHBa­á¬¡­AÍ1Zså¦DÊm`mË“Ç÷>.=…“S E‘"‡OÍir°æHûÍ¹ýFj	ÑX]!û­ªµïÕ(€d_ÖÝÅõ¿p|Åüµ§:M ”v¶Ž kM%Î[‹t?b4ËÑt«I.ÏmðÒŒÉt‹1-ia3V3Xë­^S¢J2/›/iATf‹­âõB3µé%Ú³D®JûÊ¨LF÷Äa„d-½òÙvåF¦Yz¿aYvÔÞª¤‰“m‚µŽYý>
<˜­An»´F	DE`-Ó–m±ô¦~òE²²ï[X¥Úºø¯'	ƒÜÒY[]djAG[çµkn}Ðæ`Ízd³Ñ'JäÁ–ÐJk)Gf’ç{ž%û:Ÿñì¾¼r!k%¦6û¥€pHrGr‰P^M—Y©4553#W-îÌì÷ß_¸Gø#…÷Bö¸k6Ý3S¿0EÞ‘}vxïÞLc¶£†ŠR!˜êT¬†7Z×õ©ÈaP¤ØòµÏ={ôÕW"X°bkíêí«ÏŸ?x{øàÁá¾ñtd…uúõB†"ûŠ±qº÷nÒ´ö»&`ä	1#Vùhí£ë'Îš³¦¡}Ýdqüþ/¿«¥º´JE”eèÇÙ"6$ŠqI¨ÖhLA©ÅJ	@#^käÕì5»Àâý±ZtËiž*ÂÅe6]É`5q3²òFÖÈ¡ ÉÝ…6ò™³­ïƒjNãÔ@¢&VãcÐ5{ùjÜÆ×ÖiM+ÇkËËÂµ|‘íhG?Ú8H±Z$`›þ¬Ð¥Xëì —X3×€µGlž—¬É`ëÊg˜‹½n­á™$MkH±Å—fëag0DCv±88Ê˜f$•¿“®L«ó±ºƒs«&pcØS¸t>ÌFa`æ0„ò}ª«TbX'jô|?ëo]™éÎSÙw¾ÏZ”ØŸÀšh%áýŸåÓþ~E¥é4pæåÇèÆ%üövYk-œ:DvãÑW¾ö_ÖEE)+¢˜¾‰×Ò%¯}W{«ÎâkR;=pC¬ÀN#RìÖOß¤f.[ÖF­DÈÖšP	rHYÙF4dí “ÉbûÍWDÌ6¼>ìEç6 Üz ¤/+þ'$•$æ8	 çu§"I(	MwªÇÄ8Y4©f­Mžd˜+ý„÷Ãk¿zùïÎi˜Á/‘höûn¬Ýÿð·ÒôN,b¹Ío¥F¾X…­€´B1ªzŒÂ÷³~YGoe‡iì²ÖÖ=*ÞŽ©Ëx"r®•9i)¤AŽØ@bEé êØ?Ÿ[êíà/hÆõ¬ÅÀ¶}¤Ôd6Ýš#RÎÎÖr¬fù"Â´XJï·úG*fžrÑý?ì¬éö¼³vú'û^´þ4[šc Ý.‘ýßjÐýrIv?0I^å|kqIc“`KºÕ¶ Fœµ¿]då‹â^€Î~všbw“M.Û^Ê Å0Ž RM#’í$vš‰s<–µ&]Ñw„D~3Öb@|ªÉØ÷§R}j+6<@÷+¼~â½‰DB5n¦8òþú~Ó`ìµÄkž€½UÐ[ÑØ¢~5Pq‰ó›£ûG·RU Æ˜Ñ·V+§h·‡KSÔ 6>’²¹,üf †¢:H¤&¶s­‡_£ô-»Ão	È™˜¸VšiWãm¥PjËŽ¸7—ÊÀ¥Ø­n`
¸ÖUíŒµMÎÚIk×ij]ö½k'=Þ[\å£ÇÀiÂÄj0"'½@ž¤˜qÄ–,s¾Ä“cp:F ï ¢ÁÕpŠFëÄZ@ÌH4¢‹fhQ;E–oº¯oöOÿïO(z¼YoA[§Sí^=Ì(ÆÿÞÌU ôLÓ¼f•þ]™T8Z„k¡èL+Z¼¨åg˜4‘‘T‹\yøèãg4¬}ôˆkÀG×¯o„5Ò Ï_:xðÒ8êñŠ¥•{xËòëú˜±^¿óø_îÞ}òÏŸ<»5÷øÉ“O?ýÍïÖ¸ª*b$5µ½1¹ªƒ‚\ÉK‡!$‡f¨±b¨± 6nÞ¿5¬6;Ó ÇÑ9nða…|þéLZ+Õºòü$¥±pÊ®ô>Bkµ|†þûP­F_` IÜzá{ò™(?Ä,4­“,Ê°¶qPv•'ÛIj Ya«mf5>
žpãTéÜ57»O f©ý¢µåXÛÑŽvô#Žƒœ“l&6 &Zãï‰ÌþTjJÃÖÄi=\ÍLÓ¬†bÚµ1 *„k—Ÿ³Ö^Ùà¬ÏÐ¶]Ð¬k«©çJÊP‚*…—S§‡­ÀõÏáZAQ@•½äÈÑ|5‘ ºÜrPšÐÍçÁ9ÑZÜ¤.¤€<ž‡µõkãm­~úÜ¥otÙ3P3såyô˜¬Q…÷¯5ÏßR¾ÇEyf:“!"k,hÏV¦Çò¹]{rEUñä^Ýõª±Fs*€™8©¨2¦5ykÑdìqOµÛÚÚã,HÛ€z&X2"8Óhµ~îKûh–ÑKv¬)þ±?‡`ªõÛPl¾ÁE‹pª<ÒOç™Ž*ÖEâXmdÈQ¡¹æXÈdk™-‚57·q¨ðŸ3º­S¨³¡ r¨¢µåtÂM%t¯-NÞÈ!ò‹—mŽ£±áw^e`TSÀÈý³g?\k »5U#QÄ¬ŸÏ+–±ÖT	é·ÁjykVþH†,[kñ<lÍ^CIâ¬©Bk©âª(•1Îà5Åµ´8õX¿N*1œËæR-.RÑýÔ¶D5ÄÉÄZK¢û%ýÎ"dª!±šÃµ¤Ææ1¹iÐ×¬Õ6—AJÛ×@òÐØY;ý÷0Zâ¨©ú1A6fb³£½I	ä›o0SM+W9Ï6éYÛb&w‚iIÓÜßì¬¡í·À³ø‘Šþ`ÊÚµÞ§GŽ¼€V”2ÃZó˜éÄÅ’hqKèf%‚Ä,cÓšýs¦§JíçŸàa,T@=¾°ûps¤}Å¨™.kq›HÍ´Öd¢IÍìïÇViuäëëwK@lk%#¬“Ç®F?qeW‹ÜµÝ(^[ÓšY#|ÄU“8kÍk.R>q‡Ï6Ð‹ü+}*å‘"Ei!ôƒ˜«6Â»Ù÷•šÖ¬ÄÜÞk‡;;ü¶cW]5cmKgmùšæ¬Íá(ŠÕ:{ŒËü\å¨ot°& ±BHæ”¨u`¥e<±çÁ¥ S&;›2^ÈÔ€*&Šä¼Â(Ík ÚÍÁRá¦5¦‘*r
†DM}ÿýÛNÕÕ¡ÖPHä©´N‡RüO…Xhõ›‚µ™î°Fæ“â7ˆ¹Ïtf(`dí…é£”žyøìÙÇÏ «?zôè°­ýYäm¼5]‡‡#+Œß¨ÖhÓ®¢Bcn–|øÇÏï<|öÉ_ŸÜºòðŸžüÓÚÖ`5¥K6ÃšÕ>¦ßìýßñÜ¸4›¯Õ“îDQ äFZÉºT3êåu8±Æ\µLƒÓ†qØ„=ô©QíI~Hˆ‚žçòÓÓš’]Kõä;x­ù®t£PèWFžÚPÅ`MØ Å{Ü’æ´x#«Å¢²iÒšŒ²ØS3VsE¯ldµ÷ð¹»Ô±a«F5n6[¬fš3gm'rG;ÚÑÖlÒÚÜ‚›õƒÀjÈë@øiöµ)gDl¥àßRC§Ó‹~¨’VnšÎJu"ûY-
9X/y`ÙÍ·ë~t5RŠ§‰œ+£ç‚Ü¸:PÏšck!ŸÏb•@¨F+ßž _ «*°5Ëw¼Ò6<nÕîùqŠòÎŸžœ¹FîâÊ`ÎÚ+ƒ«}Ð3´iw`Ä#BKôBø”)–Z“ì±‡¡Fj0ƒ©^RDÈ«ƒdˆ)0ÃšíÃ5|3ÞšX[6~ ¥Ž°†ÕÚÛéÙ5pô%âçF¨ÄR;ÊJ=kŒµuCØF²8iÄ6˜mµ’$KˆâH¾IÙ˜µÜ»r±ÑX¡&“-§_´æâFœG†¬›"Q.ç†+¹“rHÄé¨Í+âšÖky>(^;Á«h8¥!ÁÚ9þrÔx‘qÖèèãÞÉ³“Ÿ5H‚k„ˆ{´ÖjÕ(VšN§øŒž®Cu³CÒúUie¶ŽÄŽnÆjºG[ŽÙ‘å&/C22#OŽ—‰ˆÑšJI-»Ü©³êºÂJ¥šê­JÍ=k›qÍ†ú@ÎÚœQÚÂê5>ù¸"É­šwÎš6Ü²&áôÂò5¿±ýoÖížoïÿl†¥mœµ”®ÈSÛ§p)Z#·±½}n(7+«ƒŒûYXqKÊ ùÚ*¼Ÿ[’/²1kÿeM"¥#º©{Cmù0'0¾ŽS¸è`hkæ4·Zç3oî¶b!{i2ÖXK®qNuúXidCŠwë_u°­õNlÔdªÅk–Ënu™›t«|NÏmÉ¾q‚ÕPU ÅsovÖî¸õÃŠº#V*…\‚Ì„i©	Åd¶¹7*œÃ³–Ö¤öx*¶ ŠÈ±†	Þ 4¯–ëÖò­¢µÎR©‚cÏ'Fîó¡J™·–¡¬v*6Y_y‡z¹
§lã¬U–WO.WÞ]¾†æ{f¬©î±¢|¢(’Äg£yæœžû,/WÂdÓyY~*ÑRºtXÃT°T(a&,PÃGºˆšÊ¨ÔÀ<+Ê8jÀšŠ ë§Àh²wR»ðö½éFj»÷o„ûG9KdXÖ.\˜56èÄÆ•ç¯ùšÚÁd‹º–•¹LÑ½~þèãŸ}Ì5ðî­[}ôÑÄë'&)¯øâœhM:Ÿ„í0ÒÓÉ¦Ëb~MÎã±!ôÿÙ;¿×¸î4ÍÃîÿ° 	K…±/tc‘²¨sjOQQŒŒëT‰fªB¥¶EÚ°Û©“NÜåqI\î®ºØ‰½¶‘ÛÁ©ŽƒPlÑ¶¥ìE˜ÆmÇiLøbÀÁÃÌMØ«aa?Ïû='GeÉ™™°WÙzTç§Ôe¹Ò®SŸó¼ïó–n}qgõøüŸ<|L|ÿç‚Õ\Ûy%—­qy@-¥n˜Î‰Õ¾?³¦FG¤t2 ;mLcå‰Ê½v[5='c­…G˜ÛÚsÆsù:¯SH^X=ä{¼Ì€U~¡%t+ú ¶Zí°ÁZ)Ÿçú<ì¦¬Íµëõ”Œâyj]©ý&C5‡h,ÝÁ"¬&˜°¦ñH|5g¬Å¾Ú¹Ý÷¯ósÈÛ=a©ýº±&Sm‚Å±ê…AöÔSO¿àì~c5©Éº#d­)«å­JVðB\ÅòkŠÕž¬ƒ<ëS®Ê‘*†9å)+”ŸÒGÂ!s”X kœx¾ÀÇP)Ör…õñžBHTõ˜2˜óT$i¬V”¹¦*ë£`Ç…åÌwKCkÜ<òö9Ò?ò6Èçßž¬§,ŠïVÀj‚µc—ÞÃZ;–Ïöe–ëªÊkŽWjÙÉòt!0»PTÜ[™ÜF”¾ø
Mr{zõ–Ü¥Kxs.R´ö¶¤¦5€Îµ#©>#´.šÂšÃ ›”³¦ÈH“k`x¡>¾@D~€&¬©é}Sl@"ZSp?ÊÊh«¸&’¬^'‹¯>^,{mú#|e‡"¦~ˆFÓ'%Žx]‹à®M±ÀÑÔÆiþ‹PræÕýºt‘œkÍ×óC©õË’æÂÒ¹‡˜‹-Xc²`VãÜëâÙëa«½¸Èç„¦œµ:¥V5Õ*‘ç2€¼~žSÓ*†h‘‹©Y¶ÈW+À‚ëâŒëö–³8öƒ¼’{%åùÓ
˜¥{'Š%÷|u°…oU«{†p9ø°±g•±ÚO;k3gW–VV¾týjd‹8\;ÎKíµ7Çö³‰–^¤QMa{4hm¯…ŒØþK›Ò 7&å›¶HbŒ{ÖþæUxÍÉvbJ‹7ÌÂ~í™×¾ûî;÷›¯–›¶l¶tÖ^Ü²g-FÊ † ²Ø_1¬azauùh(¥*Eà
Á9n“”Ú‚"X‹piÿvvüq¶hpã12äYT]É0·ÛlØ4? ßÍEžt6å‹hé.„´Ål5÷…»¦2HÓí¸]M+¾Bsr°®©?áÄÆÄ™¬ùZe?^b€ëÞIü;ò·a¬MNÆ´æl3d¶[ø‘µfílBâBx|ßÏÀd¼•á”õ!±Z‰ š‹ípLb=;‰¥ÆAŸ—á­£
¬1Æ²†÷­á(#)<µó¸GW¦á*mrÖ:þÞùÜ[Ù ¦âl»¾Ðº””Öì~kO€9¤FÛæ(ŠtDeA@Üc’oAa>äÑ CmŸ¬X¬×UéX!wß~±Ù@kL¼n­m–ÖNá­:ºØ<EÇZ³Q$žßh®ˆUf(Ï?º0'œðèN+=ZíI…º@F8×(%âkÃã·nþñ³›+7o®_½ôñÇXP	­Å°¦¾µ#»GG,oÿÅ8âá÷ TÝOÌ™¥[w¾øâÖÍ‡‚µ›ß~ö9´†þê ÃÚƒOÑÜÜôý÷s£ssihM7OÅ”ð[4á
5ÿšƒvÞ^¾|;Íµ…aAžaškµ8)X+æws`e9oddaRãQÌ©Êœ­Å˜åŽPêƒ~ð¡Œµ…cw•il›ßœ„‘–*UÛˆsŽÂ>ÔÅj1¬£zB©ð‰ÓXcmY¬&õòEzê©§_jä?-9Ù°5KSÂˆkZs°–ÖìíŸ¦nc5ëeÓ°”Ït(ƒ¼×•iœbE¢µ…ö™Å²&jÎTlžÝkÖªæ9jÐÌÇæ1ÎT—E9k™WBå	—ÕÛFÔ¿…¬Y
 n[îìx$6E˜oä'Á"D¡#Œ>øëé#¿'PŒ†\rÿ_£˜Bz©¤K‡5zÖüÉuzM’åES¨˜ñMÑH—ÌVÇËtm„uB"MÜ®­Ü£]á°v¹{×¬5X“±¦…i¦£´æ²³7fŒ<$XÓG«ƒ&´¶Ïé ~™šÖº¾5ZÚØq#8lìÃj3DkŽh¿Z©T	®É«Æsá@&ð¥(MhÎµ¨ñRZ¤¶f¶*OÛB_²9Nk±å¯|>ÍÔ°•qã³Á9>æüCÇ÷–/¿|iýÄq¤#zÕe®‘ã‚ö?qý¹ÇÃ×ÛÍ&ãÐ•n9Ÿ	ŠÐg«rµ"ñ×Še”Æšbeâ‹aÍ\¸ZÍEBÖôm›‘½/®—|fÜOô)Ò^6ñoíÂJhÇ®lAä{ñœ5Cµ“³¦žµ•AºÔ~¶ØjIÓÚñÖ¾S¼G<]Íõ¬i¬EÖÚªÁÒOd÷o={)ÎaEE¤[jÿ3òÕÞ|é\µoØ]¤–Ä_#2qÖºi-áµ-µŸkÔØ£ýþö ÚBmg íÙh<’Æµ$¯Sµ!ÄŠ6.bD¨¥ìÖ.fp[WÏIGÛv{Þí»*"Ïu´ñt’žµ“IÓZb­­'àÆ#öÖbgWO¨ÖÝ¹fënÙY+„Ü£ €ËÅDnD¶xDÛSFc¯º•J(]„¿ÿÚã:ÈY×¾æ†ª©ÒI¤¦%ŽƒT§¬fzÔ`5Š´Ù%í‘Sò®øW’Ïg%ÙQd8o÷7øÙ<—­"ÐŽ·C<üÔÀð@¿
 ÏSé`m$¢¶°vÑ[æŸXPñ•cÞ~|‰IÕs6Rà™«æi4¶q+4daÁŽã2â÷%–,A‚`…[HuJ×êuJëÁz>Ô›ÈLs!ÝÈ ±5¥>¶È¡WX³^µ+GU„]*Ì×8qê}ÔðŠWŽ.à(Ííæ&a 2)TšnÀÄR&˜aþ#˜#¯0¿zó7Wn­2	V£Àâíº®qO¨&síSú	4 ìêù«üþ™z©ÖÐ$Ñ‚§¿/ßR«7~ò/Ÿ<þÇ?=üüÎ&c®‘³ºH “Ëîg 6@£"H4—oÏÒ @ØcLDé˜ÕÜÞ(87—ÎÛ¨j@L§Û°•ç¥ÖZJ†ÄŒTö£ê%­.Ò+†Ã#™î5&ÕÕ¥ŠåëýŠãwxAåäñ(µÚf¥å[ù|;Ïëom1:%¥‘Ék¤S1®%ÆÚŠ µ˜ÕÐ{'#V[63Nœñš£µe×°†.þ§^ËZO=õôKÍîw¨†ÆlØš‹î‡Ö,ÒZÀ3ypj‹Qµ3§ÓÖZ¨©²B™°B&Mk(Â5ŒµÆL®ÄäkkD«½ÁtìébÅ"‹¥€²ùlE®ƒÜB½ÒPÓQÙ˜½–ƒØ4gO'ÿßÃÔq¤À‰¨—jC=HD%ý	¬M¼ýNW¸ˆEBjWí¯°š²û¹Î®\ïëËÇî7[s±ZXß·Ö¯Uüõ¾Jaª^gH/cXS'ÿüÊ{\¨¿Ö]ÕÑÚsŽXe®±œöÔ¯ÖÇ²ÖÊ%ÒE1;¦µ*kDBNVZ¸È”åŒhgbë›ÌbÊŸŒ e­9Fó¡3ÚÖÄåú•ž¹áÕÉe“£l¥÷ÝÛd9çª‹ìk¼â°œ^ñ€œþFXÈ@4}È¢(¨Ñ­‘¬Vö—/[^‘Y!ä]7"èùçy1ÞQÒ·›)‚<ü>é®¯w<ŠqJÔæ4©lõ¸?,Vk†|FH1F©µ6™óhŒÀÌ+‹ª«æ›%ingo´°±ÂN¬8€+WÇ‰ÊO~zß¸À4›uŒ;i]lÙÇ/?0´|ƒ€CµŸîYCö3q$ÎÁ	Ž£5VKª¬Ñ¬†ö\ÐZÀ¶×"¾ø"d%PƒÓ¦Ÿy† &`[2ðyZ¤;Ú¢gmõ×.[DÅl¤Ö´aù†ÁÚ‹/‰Õ´ ·å@e[±¢=ºœ5´0þíÏÒ£c¬£Ñhª ²ÿÆ˜›X‹ˆ¬ž„µÕbÿj¿ƒ5F¨íŸ%`¤[ŽmÇp»}íöŽ]·íÉ°Õld·ÆÚö¥'âEVKê×[Mg¢aT<`@{I?V[ÐÖ.Î^cÈÌf§n¸ßß­¶ÔêÄ6ko(ÍàcµIølÇ6Òû¯ùÈP³¾´Ä[S·­·†ÉiÄþš'F·Ñ­6ÐÏFYk0[PoÁl¾Š¶LðÈeu·H>~MÕ¯Œô÷w¥‹ )ÑNkh–ô/;5ÞGsøJn¶[ÁšgÕ‘"µÀ3NKäñ'¥TjÚZ*“,2.…¾N½:ÃÑ
Mîù‰4ƒV›†4""EæšØkäAgäôSíª4ÍIÃá¬µòJ´ö»ß]iÅF˜_\[#™ì:kÜ[TeàèÏW³•ã´{¯,ÝZYáe¤A&°ö.°MäÓjK]½:0]»hWÂ+®kšš [÷­;òÕþé“?Ýšÿö“>{¬Y $W.'Fk¬µy´uQÎ´á±aDÙ¦	kÐÞ¬kNçò¤´ZòëjFã,éL¸1U<´‘â/6°Æ”9XÍ›Áðh©˜ÁÆs°–«Ûlýo¸q7¥Å‘”k¬“ þä€ïÅb—eBÁ".aät÷„µˆÕ˜_woBÅ¦YÁÚˆá#(Îî_ê…AöÔSO¿dýk]“±ÇXô© ÁšüEg£vÏäGTdòDFeZù•³Ò“ÖšC5Z†çt,™™¥nj-Àšh{˜Í¾ö
W¦ËÅâL%h¾N#§.(Nƒì
LcNÍUcUð= Á†%÷«>©ŠÏ$ú0XÓ§ˆÖv+ß.“º¨EP¬]:Ì'íë_Ÿœ»þÕâB©ÒäÊŸ‚¸¾çÓ\ÛÝ<Eæd Žüæ,Ÿ‚n»DµÛK÷€5†˜r¥~Ý\%«ƒ´kœŽ¤‡û»PÍZ#cdÒMBnJùQ„Ã¶©ÖÆY¦É4Ìi}Š‘±F½³Ójr¢²æ‘¬I|ÂÂ“Û1Úñ5hÍòú³¼l¼¸5½ž²Ò´©˜wi»ÅLÆw|äffT
”’ÈòØo=ÿÃ÷OÞ¿ù‡Ë| ýáÌúFŒ5enÊ[»Ë'6h!k'¿Z_W‡ü­fè¤B¾–É‰ÙT•™Ê”+S3kÍš²ú£IØp;ZÒÆcFãÁwlš¡¸n2K¸È^Téï¬1hÎµryšÙÙ0*Htÿ/Í¤eùÏ_ÓÚ1Âûcgí©a›ã × ´ŽºÖÈ/7wí­ã‘±vÁ0Í=â¹ØÔA>#X³ÅŒˆ5å­½DÏZ·"BÚš×’9k<‘Œ5Ä*iYK¶Ï¬íÕ‹íÍX²Ö¤y2a?v¾Z7-vWBj³ÙÛÛkÿŽÿJ~Ü~{¿¢ ñÙöÐ°¶k¿•6JnªZ7¬%dÉÆiïÑŽ@,vÖˆ‚4Ñ“¦8vìŒdóÄJžÜ BGè<}JÓZÒ³–€[„lÒuŠc%´µ%¬i„¥ùq{Ií‡ÙØU,ÍÖ¶FK4Û½ÃÓ`&R
¬íô'a54È`ì={¸+³3ž·6èg·mçK¶~67hœBZÏ+kUð)‹<¦Û3 è³ægòªÌ–2Þ  fYþÅru
¹t£œõ•ó)Œµ„Õ=¿Ö.]¼ÈýYª‹šÌè9X#’ÝHž,¶Yð™6–éóÖCÛ´ÊõJŠ¹òèeó•cˆ¹¦ÁœP¿u¨¡jÁp{‘"Æf;CðãZwM¼ñÀmï¿_LÕ1šx#
éYÃk£æ£Qh0a&\+–4];äk¦¡jíbœÈ%ý<q‘›X‡¶:ê+®eí:y2Îƒ|;¢µ«¯XËÞtCCCtÔ¦ß/¸òšn/^(H#ºóÉçÿøÉÕÏ>zø´FÄˆÊ*)¿»ÖÎ(½ÑÔ>ƒÒ"¤Ñ¡Tƒ/JClX8Am˜l-Î¸êE˜v!Oˆˆ`md4ŸvÞE3 ò0„Zd„¯z«•RvJ5¤çñŠëÇAhO†ù6ÊžÉùj1†%´¦£Dk5ÍVK’ ŸL9ët]?þÊîe¾$¡š3ÖÐýXKèVÖzê©§_pÂZuÞš=&å;³#)7¹Vfkv {-ÝÒýÈzÐúóŠŒ5)µ8¹^ûôM²9Ú˜™¦«ºAlÿÞ Öxÿ}jD3‡šåV)r˜+¦r$ö³ë2GPÁ÷ŽÕ*Ff”ë™V39Š@Öiev›±°+uäÁih2KXic¬†çóòÉù·V.½w?37G•~…Ëúu
kÍ¶õÝ-¦ªa@ï=Xø½«˜bƒƒQ$°FË1J‰úâT ‰(…|vtâÝ‘>KÌŽÅ|ÆÆLª…mª*>“Á¦­[²“Vi¸†5¬MbÉæzý³YÙiŒTÍ™ŸÆ_ßlÅ˜Ê6É× 5m³FcÀšÚÜäI`3ÎñR+d³ì¬7Rù Wl”qCé ¥FF29áZ1·à÷OÀj—×w¡°”bP¤AZÂˆôûè²šÖÖïïž`õî¹6í‰™<“Ú­¹µ‚F_r™OU…Z*‹f`S8$3VKT.ÃÑb5'ý ©+YVœ*_Ëº°HjWs}µé)Fû¿¨Úw¼çšXmlÞãâ–7ÏY{ýéMkI×_‚5k 	’mçÂ…ã’`­;"#¸<cÅKÍ¦c³¤k[t­%Úº]Œ¡Ø<n]Ç÷à^eƒ^äÏeLÀkJ‚4c-¶Ö´Y¾9¬®ñèRj?•Üÿ¯—AþÝÖ°¶Ÿ~AÒj¦1ÙÄ4>»aæ“+äá-QBA	ÍÆ©úG)µ]¶Kèã#ª/¨j1‰Œœ·+›P‡–sÝ æ¶ç«Y&¤`-î¤Kü³Mq#tlÙ/Š³ •·ÌýTC¢Ù.gÕêæéØ«ZôˆÚ»¶]+0Õ§§ÒÇk×à·ÙÀÖÜÛ0`¨¦ŠH7I£Ö„lN+2CŒýhŒUS[ ¬a¸eê	¦¨Vë²ÔêÃyŒJ™*×xÿ!(WyþùóCç7ŽX;¯‡¤s1«1hmÏ¬F­åæ;ÁP¬À·M‚kf¨±$Ò!§õ/ÐU"¨«Ç{^Ë}¥F
éCâ@*G+pZ~V[SuD½Þ<jšÒPÐëVž\È4âÒHzq±=1Ñ^+„¼5ÊôßŸ	JÃpþ²‹¯4àAUèƒpTMÊOã„.Ô]Fl8~©ÎÒÒoF°öò†ð~«ƒ×Ð»ï¾òJªT¬Ã:<o°¾²,”5Šæx±ðæñwñíãW~ôùg6míx¥:.©*ƒüþ{áZžÿDtûƒ3gþùF?íkÃb Hi·8b— ~7e-ÍA+\DíôB©½™ß6ÊwÉÁÔÅxt´%õ}^Ü¢€ÓMèèÙ**Ù¤G€àzÔø0@eÄjI·Ú–ŠÏ»ÈÖ°Öbm•.r`½n?³Ý2îškXÓr?µ^dO=õô‹‡5g«ñ@Fk™1J!i€ÎØÜÌmåÕŠŒt»5 -¹µ´tï¬=Ik ·?€{0Ñ¸ŸXÂ—Éa¤Q Éq#pós‚œ]³h^bbµ¯ 9ÀÀjá,\„EY®þÑã›+RŽ`mƒ{ä×¬˜O5€ý±¨™xpw’<Íd fi?SxÎèÔ.^ú¸ã¥Û\æŒ:~pç¡ªœ¤²/€	¡ë>Ÿ]êëvpÛÎG;‘Z;KŒ¤^ ÍÅ†ÖÞÙkÚašgšÚr£µ†bX›$’ÿÐøÁCÚn´×çŸ2P›Ù”ÿ¨ÔGv§5wMw¶aõ§å`´>W“xeœ¡è€MK·€¹(e$gU+N›½xÂ6MðDpYÔshH<äÉ—òÐj®¼4ÏWÑiÉËÌí^¬LÏ]>ñÎ	á™º÷À5`$F.¹ÿÄ:õ5ôG¶šüW%;=¬‘
‰ŠúãsY˜¬À‹Nv(ì•c¸ž9fH´‡%²³â1N²Š¦²¹¨¶9ØÎrý³ð,Ÿ.9í^EËêb2¶<0fMe1‡mk‰³– ÎÚá/5	›YkÎ|‡Æœy7ÃŒ)f¢µÖ^Û÷ÚKû@4vUÿèó5§—¶š³öDÀÈÆ2Wë%! ¬µ(2‚5ì6±Ú3/2×mïK ÚÞ½³EPÒ»6Ÿ8kÝ¤Öí¬qh§~†³¶¥×Fâ#ÔÄ4šÖ8Cë˜F¾ZœÉºÕ’‘Íé Sµi~‹AMþ³¶Ý¬5:ãíºÀKŽÖ8ZÛqý˜Yk?1"¥ÙFÖp÷6ÊÑ›”œÓ´ïYµªI7¬1Oùûî(É¹4¹c–DÝGxjûÇféÁc2ö£íB5ò Áµ×ä¶y¸iR<d,|3þ­YM†šÁšykŒÄXS}#á!êRTû˜á\ÿ gûýV‰éÉ¬¤· ùBº©Ø“þUÂEÎ×â"HVO¶¬1dMÿÄn3`Ž–W§Âöc_-¥cÒ Ý1'ùo(>E3¨xš—0‰Û˜ˆâêäø¡,úÉHŽÌäCîö„ôÆ×ÿc5êk§\AãL¸P‡Ü®œjÔEesíÅR‰úHzØŽ^©çU<ÒTñ#¥ú±•ë¶nT ˜t¨*È`8lLÏÃ‹+7©€¼ysí‚ÕX¥Ùú4áýŠ×æâ¡æß¢hÕ¯¨Ï¶’]¯Õî|{çÎüêG7[÷Õ³Áš.+–YeíÏ°š`­Ýö2­L›œ‘>ÓmÏ¥müiBhf¡¥e²™u¥†4åöó¬Å…EvçÚùè§ñØÚ™’®YÌyp›^Ö¢†©#‹Îêd²Ù^XHÛ8nNÈNKò ¨’HHkfë‚5–È ŒL?ÙjGÌX;²¥±ö‡{îéâö6ÝTca…â!k|Ýïå‹ôÔSO¿è¦µ[º%¥ÉØI¤>°Ï«­«¥Û²ÖÒ(Ÿi¶P*uÎQXŽ6[k oÃgê.$ÍÚd†Ô¯MICI_êM@êB(|ëG(
¨èÓÌæòDlÖ®èÑjY¶YkMÓ	?iÄŠÍ5ûfN}©´§HHÚ8¼‘gïrë.5$X3Š@'ïŸ<v‰¨.ä‹þd…9Óãµ™Z±¹FØ	¼¶Ð
@j„êÒëØ&Û¿òžºÁmŠéëÀâ`^5\¸îHŸ>=á?Q
É’Æž:œi·Îiò`•lHP¹t~¸¹rÈÉÁ¾,ä†µÖgîZiñVŸ¤"cÝD|Ù7|c5‘0æ!—&5²ù5V¬+šÃ€þŠ@-ñ.–„ÿ–åœMûÑ©\)î_N{ëäjžX__¿ë¼4^m{ÙG'Pk­N6ƒËÊîo‘Íœ„&SŽï—Ï7^.ªò´¬z*n¥XÓhMü•­$¨¶!&RPVÍ•kã,?Dš„ƒ}ü¸°6lÉéLÆcæÓµYiù°Öe­mfµÍƒÖÎòÀ5ÐlµU-‹¤²Ï§!VÀ4…Ø“\1"ÆÅ‹üÒÖ­Öàìæ9kO:k:ÜÒYÃ4ÛçpEœf‚Õ^…ÕøS¾ÙË@lF\¶HWv?_Ú]µ§ý
Ú$ ÖÅ‹|ýXû;BõñÒvuÙn.ìÑä1kh´I8-†5ÒÄ{H;" =bVKæ¬Øn‡öè©%(ÑýÀš~™sÝ ¦Uw!dr÷­¡¨òöŽíJm‚"¹ ÈÛÀšóÒp5Ãš´äaaÚlÙÀÆßQ†âØ¶×f÷?Õh[›¬më#;çk1¬MfwnËªÈQC¯·O0Ô'Y$Àf•ÀÐ\¦:8o@ ¦C‹áæ°–iµhÖ(…”I33[Dv¿Ôá­¯0’t¬uÃškš^™è\œ§AÙs°xp·ÍÁáØNl5NP1i¬&yìzÊ§2T=š™” €Æ:,3‹„*újGF1Ýšê¯µæ4…>ÂeG¯fŽÂ\¥ÖH~.›[êgkO`4-’<¢il-:±Ga½BcúèŒîÐ5ˆŒ¬*\¿¼0Ã7–á/ÝüVƒÖ–ÈƒD‡Ek¶ŠÒ€5[{eäªUDj\œâœô×ÊÜ´|Ú_š/î-2vç_îå;÷,òÞÙ¿ÿãÖDk6FÖÚ	kcM¬ÖÆ6uWdc´._CX¹¸Ç¶¥8f‚´q›ûaÜb³•
ŒÖTõXwEžábˆê ²Il¦‹>‚i‰ã8ª?†5%sº!×†eÚpÆi¶‹Øì·Ò>¬ë´´ÉX;{ïz4œMp‡–UéˆÍH-f5ÑZ/_¤§žzúÿ!aÄBŽékLëýÃCP³Ë%¹ýÀ®š]Ò£4g”ÞÛ¡8žµv,ŠI¬5Œµ6*¹Òqß³Q°j•Bƒv±Z±lS±=ßg××•—Z7MŸ	`2Êò³é8A—¹~Z4/,šÎ#ÓgCŠ†kg“yD»ÚDžî÷gù3²ùõ»o+±?¾š‹•«½~ìØËL¶¾_ÊæpÖj‡¦ø€ßhÐ²¶Hsº¼ÁæBÆµç3$–v¯¤¢‘æ“›ó×‡×xšÃ°…î5xN?x-ÒƒùÓŽx;Ÿ*Ð,ÚPÛkSÕ¾`š±ÆÝk$Ñc¬&}”>2SÉZë—Êev%…l¬a.Æ#Õ’H{uâp¬±s)sl
Â±,mNÐâ¥ÿ0ubU¬-7À …¬äG‡ùr"Ka.8yù~fÙ­\¾k¬†ø”Ar?â·Mmt­q™]ËÍëMÉmÌã£0©Ý*2µ‰r,}CyýÀ¹r=õË©’†þq³ý"ãÌx¼o‡µ\MG,‘*ÙJ•SLK+Õ¢*RSž—‡”Ýß×?¬%C±»[Öxü´³¦/üµ»ÀÚ//ŽÍ‚mc‹8¬Igc£½Ší·v5¤3nÎÚÓŒ5ö¶ž³¶*N;øÖkß¼h1#®±ydÃÀS·šû3ººÕ4.â¶¥«³Æ‰ÿ7Ñý´¨aní'kZ8'’ÚÕïœµËž€!‹Ù"^³3 Vcc¬æ˜}í„ÁFá¥É…BnïÎIH-Ñug¬Ùš‡‰ÍõŽƒµ¸³;2‘`½_!â3l1š%i[“’4HC¶ŸRÇÖ Þ˜…‹`¯í±‘lÎu­QðK„£@u§±¶@ýA–ªÈ`@´–ä#õYÝë o-x+ñ_‘þTMúÔÜAq£4å²”ÆQüX£@2+cÍf8r›HîšŠ _ ž>µÍ3±Õ´vãð¥%/x«bAÐ¯-¤¦Œ«¹Wä†F5<,#Vó#ÃÍMÂ©H(¬éÈ£ÅŠI`uêígJ%&€¥–Ï·
L¸¶êÇ°ÕjÒ]¬PßH2Fûèû„?6š€‘#67»Ñ ¿ZE¡ÀR8á•õXc¡[¦\†8Ë `ðÆ[T!X]Q»Ú=`-œï†µó‚5œ5¦c?{úÙaÑšöHÇdM+ài
5Þå‚°\o}qóæGŸü9Ÿ¾«}ôxåÜþ ¬­ÅkßŸù€JH®©´¯¡¼Qš,N0Ù…ƒsi^‘å¥êE*IïÖ$q›Ò!ëuc5ä‡MZÖJ.ð"þ(Ùw*z/‰ûfxyÝvq"‰ž µ$rÂ}7†59kq¼Hb¬Yä¹äyT)X“–õeá"•ç½|‘žzêé­ÿ¬%mkQº_2×‡¬ÞoêØÍ[Û¬©ÒMÝlgBœÛ´¯Ü;çºÖ("ê¶ÖŽXÝÆÄó\Â‚À§®Ðãb	óìÊtH#WQC°Õö¤8H‹3Õ’>‡‹ƒ˜º¦seUCl
e¤*HŒ€.\]dßùYDV´â¥hY»ûÂúDfâ¿RQ’Ð‰¿—¢8ÈË/Ck*“!®ÎTµ©3¥öRM/¬ãüø|òQf"]kÕ©CYÑ ÚsqåâÒ1]XI„üÍ‰»Ï¿-gí¹ó§ìÞ­DÈÓÜØéy6Õ÷£¥ìuk0VõÐ¤€ÍöÅmSQºÝjÚîƒÕ¬M1:Lã"i[?[õsâ±ØQ¹8°&5“¨×Ð5ì[37²˜‹Æ«•ÙÑñúz¾1\>CbOz*0B S6f É®Yo4ï¯Ÿ8ÙúêØ‰×ežq3‰Û!w>²	ÖÐåßÔ×/óQ÷þWër{·T›)àëø5¶Ò¨TÈÑûN·¢íwî_Ž9fð~<!ÛÌÁZÅ¹j&Ž¢oÇ#»óÝöé@Jf_ešÝŠoS°¯õI×fuÅ~okgí„Cµ­œµ³ÿmå:Á"7Vçµ¥‹_Þˆ>QïÔÞ|Éñšƒ5zËöNÃMFgßÑg¶WMkf­qX{’•~ÊYKÒ ¿Ùû«ÿü"ÖÚoõ7‚5I¬éW{EkN°Æ"¬Åè6±«ge+g-†·D1àýûa>Ú.Ñ¥æŒ/ü¯.¹=é§é°+YDŒŸ‰XíBÂHÔAº±Ø”@:XcÓkØÅŸîQk`­K‰³&.‹CE’BH{DZÂ¥ÛakXKšØ\µ8“d¿Þ@ÔA²¿!¯ÿi‘«néÖµˆ\¯]Û¹,øh‚µ\n0Nó·î´ív~g?·˜xÛá·þoo¶I“Õ§†–É«º™V56‚µlŽF5‰ªwZØxo¨z~•(¤jbsO¤A«ÒK=i«–5¾:¹©‘òqpübÑ÷yÏf›ó)¸÷s¥LÊÚb‹¹\ ¶EjäxŽÕÜÈMöí¦‹F¬e@³€­G*5*Üà›)çCúÕš0—ÊM‡cn6ÓÜ}{ãwè|†é–®sSŽÁl$EÎ1œ,ÀI‰\$±¾´^¯'™ž™Qùc1 /‹#.cf:Õó÷þ¼‚ºa7]=ÿîÛï‚2çfYÖ†¿ÅœÞgYów~òðu–¾ýèáãþþì½ÇÀÚbXƒÖ1‚`4/#YÒHž.ò¹Öq•&øÃáXžHÍ†û5œn-¶æì›(t”›•x%y•ê©L©É1çëPpkzÚTP„bëæ³µ%nb³øðw¢›ØvGÆ¶r¤¶µ±ÆûÑ9Çu<¬ÙM½j#ÆjR”Éj¥—/ÒSO=ý²ã Õ´vk£»ÆÇLV™×5%÷Ãk¼oÕ¸X2^…–å:ÙQ¼ã¦‡;+gMjÚêÊƒŒy­]Ö¨ù3Åéé•IN¿£)(˜>fHÌ×TŠ‹¾bü‹P
'k6`LÈ2ÒieBª²Rð£XCjók‰üÈXÐvèÈ;ï€ÖßùA´ö a5•èYN$¬°}ýõWáøÔ`çCH¡€ÑÓ,0ÆUi®T!Ç¢J€#½T!}“÷Me}£5dÓ†²ººòÞ×èå“‡kwk*‚A‚5B·úÓ/ôoˆíÿ1l¤JA¥%lÇªVwNVU¯Uá3‹‘3ÄÂ^›†Ü¤*â°-6m¬ÏŒ¥1«EÄUñX‹çÓ™rlk¬²6›Ÿ0.ÈÎÊÂfEXM\m?D«…Wl¦²|“œ}ŸŽr9ÃXŸTþ$¼›ÿPýðÖ h°¥Ñ´¦mw¹+Èeùä‰“ë_µ›¬ÏQ‹Cã#Æ…)ºcdÙ¶ê£|‚È“1Ó¨¸	)ÈÍYEŠŒ³¨7M·Ä’Ó–­î«é|y l‰$ø‘œãä¸{+å>ýß|vÀf÷+
ÒúÖHƒÜ:r³µÖÅP×WH‚¼h•KØ$ûç;‚úÕÄi1­iýš¥ŠüDƒŸ¬9rS!äw6»ÕžÞ³–ô‹Í?óÍ^4Hí·¯gOÂvú5¬&Z#À¿Û^cÛä¬¹ç{zäfV3ý\gí€¼­]"gíº}Œº°	ÖPt"1¬tÊÛ’BH;/ßÌ‚Ñ»XÑ±æœ6þéßƒâ8X³!t¬mvÖXI	ª%ÇI-äÛ¸Ýù$«ÙÝxÄ§ªÅË,Ín$D:[P_]xÌÇÞÌl<œf-¼?òÙ@3˜á‰Ãg“ÙÉLLÉd»MNZ³ZV8Œ8XÛÈ‘ÿèé–´&O[ò2p'`5Fså2žgo2|\÷‰¡UÀQ¶&sÍ¿
YÃZÊ;ßj]U‡W–KüÛH-/gŠÙ0T&N±6 šù¼µ¸"‰šF|y˜ÑÞÅU
qÊIßuò0¿BbçFŸÏP!Y
½á‚†V‡áZCÉEÜÇ$S$%’!±A´Æ)`í7þò†*$-*c›`-ÿA“ÅB³½»–¼…E¥‚„%6.^¸jJ6)ÈV“ÓÆ­GêQ°Ö–V>fØ¦¤ìþ/5½
ïžOD"d¦8Ìºaõ0ç›ž0ä£)qK÷?~øðæÍÇQùÑG?ûL¼Â%…K“`Ê{Aƒ±G…ÎNš ¢‘š-ÃjãšíZÊæà©ŸZ­6žíxÊáuÆZZÝk²Ð 0jÉ£À›q”©—RsmA°¤ñ|#H¯;ím%õ°ó@OîFpÇ¬–™ÔEj¬^±mŒv¯Ù¬9ÞÊXãqï¾ÑZüŒËq	$+´´,X‹Fþ©—/ÒSO=ý¢F`5	cakÎZ“ˆ„d‚g>=¬H™lØjy«‡Ì×‰–HkÜnã??|‹Ê“]kFj®Äan!T‡6qaáh…àûiRû+9nÓqíÄ?SÜ9È•Àóil#R¬V›¾RV;7îZÅ
 ™£
b \Ñ¹/É®x¨ä¢°¬ù¨–ˆ"ŸÞaòõ]HÍ`Íæ¬IcÇPÇeŒµ¯¿>v|¼š¹þáxeMNÁaˆ‡˜)Ñ¦¾ïàÔÁñgÚù¾mÕF”2Xó÷ÜXåRO¿tØ5­Ý,Ps´6Ñï÷§ŸÍnKhm›ì0aþ„Öl÷Ð8çâùØæ¶‰ØÙ)QÛ”MXcÖ¸Ï­[Üª}D}µrÕ –µÕ²¸V4äG	›¶›íÅ‘ç½z¾ï¸.'·Rç•%¨÷ßçÇ
Æqrõñ7}_dÁÑ8qddhDcwNÝÏ¬¹x½-
’¦5sÖä­1Þž;Ad»RnÎ­ØÖ‡Œ°Æ'…|XFÓÔÖˆÕÊ8iŸÿÖ*|([Ècä›%j¬¶è;f¥i#Xc£‘YùZÿ´‰k†ºS¥9ÀxµšœìëÌ‹Õ¶rÖ~Ô‰nT³¯(¸ÿì?¬¡NgUÁý<1]W®[Í­ÞtYSb?à´P£kÍ\5V<\äOµ¬m9“šzÇ¿QMeÔ°K{¯þW¼6¸Múí^³Öqq<Ö¢ýÕsÝe	®m¶ÖXLŽìœ÷³zÖíÐ6LÍx5)aµnX3äé>%¤èpÈ^Äj.¿—¼º]¸k
Dld¬í¹M†	°F®Hô'³ ÛÝÆÚ‰¤gÍk,	©ug÷ßO‚ ÙtÁZw6ˆ¼´=XÇ¬ÆZ”—¸†¶è¡Ôþ]³×â\“Û
êW–ÈNßÊ!³þ@¦ZÛmq¤? Ûoßƒ°… œ_‡|v3è-[‡
 5Þm¶øŒôÖ¢†‰T!·l^óž§_c]½ú\·º`	#2×üR`IP)”rê‹æ†›ðL%ìôÎz%µª¹D­OùŒ8ƒAR3uTa«V£×,CêU&Å•E¥G×°ÐÂÒ"FÑÚ\béý7þò¿OÖÞ8uê¿¨öñý&¸¡HÀ­À{ÊœœØÍSÖCeŠÀ:ºßÈó†˜s¦¢ûièíÌ©‚¤q-b5ÁZTÉbŠ<µ R¼z~„ ª=uSÌ¯ÔÃF§Á½ßÎ‡ßÞyüÉ'XkÔB>æö	…Šï­=wõ•gOã¬¥¶–‘	#åÓ®QÍzÒH ±Jö¢N¶Ì Î…|ì²‰Üd«…‹¥º§`Í:?²á)b+jXxKUQ&°'3^‹0šã<‡I${•äŒ<qjC]£|Bg­uk‘¯výþ½sQÓÝ²[-OˆÖx°Y¬E¬¶²t£—/ÒSO=ý²FnÝ2\[•`4-DõiÓòÖ¸¦‹`j„«˜¢ºÒ­RF#oàVö¾ÄTìdÖZwÄˆxíÌýØÊÕò	–§Ê!1e„ÌºÂR„Æ</œf$¶Jƒ‚Z–DiA16 Ocyr«Ñ3š(ÔŠ®ë*çl¡Í’±†¢Ak@€ö6¨&ŠàœÀX“¹&Zûª’ít
¤>ËQË/6K~&Ý*p±ß·> ø9ÌerÔ5U¨Jêë,½õÖ9ˆyìekZSÙ
óÅ\·Ú³/°ÎøÁ§§w—ªÛ’l³×Xx2ðL¤\ì(aä K™äóÕýjSàEUÎZäˆœ6EpVÙ»VU'‡ÙrX“à,N‰à 3GkîåsŽ›¾›ùOÀYc5½Šèæ'rEßMµ+(âÙª¦ ¸TPVi%¾ëèèÄúÄôÕ?¬ßÇbÓkJ|ÿsZc88\‘ýW‹¡kíÄåë‹3•bû«¿JsW×óëmã®æxÊ€JÈ0/RH2|Ž«M7„iIt<†¦cq6ÞvÉ®Â®«¹ÀZôš…]­AP5^eŠiggç5»ÛY{ºµ¶©iMiTâè#¸›ˆ=ÏGîùýÿ—½óûmë>Óüü{·€$DûB7BÙX¡‡=ë
2,G‡‚¡še¬Š10A2±]ÆqìÍ:1Ý6N6–Pªí"aê€P-¶%ÌÅ¢‹V#ØÎBkÌ`î²0Pc÷*Ø«Á ûyÞï9:¢%uÍ^¥zDž_b$ŠIxø9Ïû>ï‘yÒ £¶5g®?N—ÚKpÐôbK]k¬¬=;æìÏÅŽØêÓyYs´­uÁšxíçG_u¤f£ÖÆ§ßÄûÑ¡8cÄ}9í~T©E¬˜ÑvqÖ>ü‹5a’	sÍŒ6â‘Ëq7'mºkôåŽiÍ"Êáf÷ýp˜ö›Üê¨vŸPvyÝ9kÝƒÖŽÐ³ºé«7^‹µnTsËèX›‹£¹ïî¬©Aíà“#s¬ßoÎÚÖu¥@Æ w§»_m‡½¹9*Ã‹a¥!È-¶±MöøÀZ*Ÿfì¾èÌ»Øà-GK¥Ašæ!âD˜²%èsn}2_a‘"¼©B>ã¥yC&ƒVèÆø}ïzùØ±u˜íÚ1àd+«uÁÚ™Eì†
;}6n¥gv¶‚™[9X“áÂñöo)òCæ¯‰Ç¼Hãþp'[$î[“’`)XSò…Ró„êWðÅfgIw¬hu8-‘X¨ƒ+…¥ŽÜkèÿž®QIëÿdk¥®aÙ­‘&îS‹ŸV4øãñÙ`˜¼Zâ8}­Ô©T	¶ÑÅÆ@*=RpÿRçÆ×AŠÖt·ÕIÏc(œ*Òz·íªÉf°u:‹¿û‡ùÿö/¿y
¬YÌÎÖÚÍKŸ_¤@áößûã?}U.ÂÙ×)ãn	ËQiÂ¨æcÛ¨jì/¶P9‚µ|~¡¥ïª²Ì>¦i¥ŠxxijFõ¼QúÜ2
Êñï…¶L	
’-‘+D[‘Íè‹Å®ý$ƒtÕG²/Åµ!kÝ¹ý[µÎðÆ°ÆÃ©)`$ôÖL÷„k÷È‘öòEö´§=}¯aíÿˆÖBXc`L»­*›v§ÌÆ JfðÔmXØ;ŠdM5¯Z9|³Þxäh-žµ¦ˆc5d´V»5]ãÄ+l+¨äßZÔf™V‰·©’ kJD
.*9Œî×Ll-Ó:³¶ËÍ²ÁÆ¸je°VRÀ±Eš²öK|µ‹«”BªAjk‘±fúg:È»¹R ‘©š•Z¦1 é»1`…Ã6µVo$qÑÈYCSæ¯}ú£Ö¾ø™3¬½¬½û6'Ù¿*,üÝÔ(®,nƒµÈh›ÔT0|5 BE‡˜ê,V´ˆ×XHS€Mø¦©Øi–Å’Å;AX‰KàÈQZCŒ4f›©r¥Xùi ¯ÄÐJV“TbP9µJ’Ïùœe¢> ÔYOÃÖ¨fÔ¤Ü¾vßªÊ¨cíµckòÔ8?°ÌM‚2Éï¾ôùù»¿¯Ï,¬>|Ø’s™-y£Éj=ÐPWW¥NbtÓ "lÀÖ‰p–pÝ]ì(dŠ[ØbÉU+òaÑS{X,Rhs5¤©Ã…›„p!hÏ1m¾Íg€ÐYÛ)ò|ÔµÖ=gÍõ¬ÁZ£ïSÙóR›Is÷îÞOäüüÁë'Â©Ø/g>5ÏDc¬C\ã:l'þÎÚö
DŒH/ÈYûÁÖ2È·~þê[Ð¿êuXí1 H,äë?x7V4m°s«m¼¸«}ø]F"í‚Çv”!k®’¥ÉYgn³ZkvìÙùØÎ¥ÒÏ0üS	äVÞpÚö=ÿÆQÔj â˜0ígÛ[ÖÂþ4·¸»£µ¶¬¹ç:†bns«g#F,+%´ÕŽ<‘Í6{r[C!·WAF„vG«xÆœ¢rÚšâúå–…AhRëTš‚m¥÷+5È‚ûû‘­lJè÷Õ
 QëÈ¬µjº^a3ÙÚ¯Î¼8•özRÕúÌÔï4¥"J¿|- kàÚÐ0„«»eˆYX¿yƒ?½3Š“„uÉk¢7ðEÑ"žÊ­sY„U8j¤yëI“aP¬GÑ£@qÍ€Bxç+ÖHMþh5Ÿ©dg±†@+ê¯SöX/'TÉÄL¼5šÔV"_ítÍÓµj0ƒété¬¡È¿BØd…`Rúiæª¯¤ñ"–B’„Þ$‚1goÕrÉöÍ/–¨­¸‰YÊŸÙkªQÄèJ!‡Óþ !59ê"ñ×gä..¦ÿá7¿ÔœþU´ö~ä/yìý÷>þñÇšV$ˆÖDe›ì	Xð5$n–±ÆŠ”C+­ÉWü(ÉXÏ Ü&G‰©Âú	Iê,¯©GK¡ˆ˜¼Åöæ|¨.• 
GÅP– ÙMkñö–oÌ9x‹ÛªÌ³ãEv4Ö\½ªäÈ(îŸé7oOl¼mÞÚ†X_Ñ–Š‘·öþfO{ÚÓž¾Ç	#¸cÖÚdS±£:HV€Ó,R°få'ž¬ÊúØ,h*±ð÷:Ö¶[k*q Öšg§=Îºµ[èÊ­Y.M
ÊhÏÁì+DD%Xf3œ=Ø0@ØHžZk¥¬6u>wAó9‹ç·¾´÷¹ÙÀš’5ž±Ö†3«ß^|ûå²×ôe¼¦‘kn—f*9kï k—îÞmWMXíWåL²²êÉL0x­0U¨‘5–­píz²š-R¿(£lüð‰S×—´üÁÍw¾†Ö`5p•–pƒµ“ƒCxk_ùÞÄÇåžnV›|i vÿ.št	ããýö‘Iaý6›Ùkàï|µ)¨~ÁŽSd
‹Í’îµRÜï1Â€-SX³¦6¬–V&/°‰^w5±o²Â§;àŒ—S×¼s4ïk5 2¶×ºVÕ§®A.ÈŠÞ:™$ÙýŸ?|«ŠÕÄi¼ÐñEk@,ŸcÖ_^?óp¡õë__âƒ]ù®è³“—Ò~µÕl6¸<ì—\…e¬lž©þ£±¸ìQe›Õ‘,"9oÍšÓ°#v×Ðƒ0sdœ—¯Dµèøá™ÃRñÂ¹äXŠšHƒµ°r{ÏÚîÎšH…Ö€µukü¿¤Ø|µsï±¨7ûð8Ü8YiÊÚqáÚ!a¬Æ7qÖvóµvž³¶u(ö‰Çü4õ­½.s-*}üYjoò;³€ÕS
yB!#'ÂÈ~‡l¡³¯íR¹‹µ;kwþöo_ýaM£Ï(K´âDzÊbÙ¶Ds6ÚvÅöœÆÃ´{‡NiýøjV‰\¤;¦N6X-jU‹ÖG»Ã »íng±Ø‰ÇbÏ…ì8výHw
$ëxåÄ£Ð\kç”2‚A·:k»ÄŒÄã…Üº¶ÜNc«)¹¿Ÿ²GÖ’‘šPÍW$Î_¬°pÜ=Â6úÕ–UÿˆGãÑŽKR¿¬sXïŠÒìPo%ËÿF“yRFüÒÔL‰ü§"âÍÁ/¦ƒkVy²Õ¶ÀšæF;wã†
çuiÇã½ßKß$ 	fòx<’¡íÌ‡…0Õp¶”$­a¬Q‚ˆÒîyü$DãÌÔPÿTÂd°‹È‚jdò–iµÂíìÙ:Q#5VuÞo4ûìi²EVp×$ZØZ‰‰Dµv¶›´ÐÂJ]O¨P»|M°ÖæÔþV¿|š#C¹YQœ 'ËV†–µ¥{ÀÚÒþÎnXÃZ­¹\V¬½>þf/¯²þ’7*WRýg
`í[úæ_¾aÎ‘=ý2F>Y§ÉØ?UQ=°†2´ª1û³ÏšÉ&³Â‘ÕB'nöJ$´Qž0Ì%Ô¬Æ¶PÎST¾NÉæÕ¥ú´*-€ohh†“)tÐ÷ë³z¦-Ÿá7èzí°PYŠ`MLµ•ÐB6ãxwçšD™Ãå	Ê ¥Œµ7®~$X3c5Ú€ÕkŠa	­mêÆö`mO{ÚÓ÷:aÄ9k!­Yýã7ãµˆ*'3ª‚D\Å£p%i£]F5Ö‡ÉG*¯­µÖLŸÕiÇ¸|‡«¦[¯DÑ"\;e©fÖ¥Z!È) ¹ ë«jc#6ÒPM6ZŽÖ56x~‰¤lA…%bð€‚kZóu7çhS^çÁêÛ««åÁ2yiv“«¦íI_kaŽwÛ­J¢¼ Óz¢Tœ%ñ9QnVgC6Ö2ÉþSF6¿ˆãu`­8=ŽŠ‹œapÖÞá‡‡Hf=°fEÀZßÉÿù+/ùÕDp [`¦ZÜ®6ùªá/™kü"ÑšÓ${)ƒ[‘GLÃolBi)l´žž’JH•éß·)zÔf¬ÊÑîi@µb8ì8>°>7W™R'	UåIz>ó<˜òŸêP’nµÐQc*“.á²5¨ª©¾Fõ!“ÖÎ¯^4cíÁ1ôÞÿ0#S!œ2Ö®½œhê²n»œÏñ*sk)>ñòo
_Maƒ¥™Ãz‚¥Ê¥1”æ\Dp×XÄmk]‘Õ‰gÃ£*{<Œ¬"Rè¦½°<¨ÈÞŸÿÞ­R¨¶cÏÚù.Tã±³Æ—†H-ÙÇï¶¥Œ0 ›,…ƒ‚ ºá¬JÎ`ŽÌ@³7_@ÐÕ!{JÐwµí j«¹µ-ºV›&¶_´v<Žá&‚Ê¡[Î€Ž5ÄÒéÛ<ËØYã¶[t¿óÙ¶ƒš=‡¿ÜY{cX{Bâµ“uÃš£5S”Û¯¯8ed³‘Y×GÃ~µµ5zá˜üŸÐÔÅö<#¸Ÿ·¹h&¶píùÈW;¯{DjÜºuµk“¸¬¹Ñú7ŸZ·lßŽÎéÙ«2Š„<p„RÈ¹È]sËh#v×v‡dpÛ¾'ûž@Næ¢Áaª…tÁý¡­ðQœmdùÄˆØ¬}õ%Õ³æY=a’[ŸâQ}kæL¥z0±&ý@»¾Ì0ô‘ÿû]­5|Ç›ÿk¥‡É¿½im{äâ…ùõ~™ŠoC¬Ý˜_;J;ZŽØG/&zöæ?€¹žóiDš˜Üäl KZ°¦2?â‰F­¨NÔù¤¶Â€<<–nTg±Ôš­öøvO±W…ÒP-WcùÇ_`°mMÀbgÏ.4å†+–æM×n¾RSdKC¶ëj®%sª
1æò,ÕÙ¨Þ`X»!SmIâúúzk’³Õ¶Ì389˜N^»msi²ÀÙ€äÓ92sgÍµ‡îÿæ7ß|ó‘2F¾”>ø@vÝƒ‹´ÿŠÖ "™[tš™°@‘¡MrÒ€m2ÛaŽdÛ)‘Ô\o²2ùs¡ÓªõŒç!5nÊå×X
Q²š«ª[ƒ² t#b4ˆÍÖ¬Lm]Ýµ§­9»‡k?süä“ÈY‹bÇ±ýmŒD´†­Ö™0sm#Lí·–5i/_dO{ÚÓ_€µˆÖbkM¬ÖiÏ1Ó„±¦DÈ(†Ë³„‚Â(“@ÄEÉYû0
„ìŽAŸ,ð‘4'ÿLÖMÚ*÷·£§+kOà2ã­éi6ËoMCgy¾ŸÎ"s×¬Š/ÍÌ5ßEùÒðEBc~šolF´f²©ÁÕÏ¿½4Òë=øö"–CµHÎY³ˆéîç_/fë­2xÆeÔ
^Ô
½kXäþ:ŒJ{½>ä¿òçýÃS¯L1c„?2@^aÜÍà_0«JH«ƒDŒÅÖ†`kù«¯½–Ðßm®q‘{X›Ô¦æaóKÖxÖú'iî>-c­ØÛ3«KSØEpÍŠÐüŸâCU­ét¯A,P›â5ÔÇ$ƒÕç¦ÕôBku±Qš:Ž^ËoDpz<àp2%Ò¡Uw#kMŸ–(šxØ¨t.‘)\3Vã%«±ÐˆìzaÎ(¹¿¹Íe6&ø˜¢?äÏdëyp2'ü=®/ã”ú>é•Y>&`2Í ms%;­Æ­é&Ù÷,FDÄ–“üF^5¡™+X“/GÁE>îô’©ÞG-™ÙÊjÝÙýÝ¼CÔ§g¨ƒ\ÂLS+Òü9›ŽÝæ9èvo!Ê …JãÖ¥6µiÊ; ›¤okÂŸÝ-‚§˜•()¸Dk  `-ÒëQ»°¦‰Ø6‹ûÄ»!¯E¾Ú	…C¬mÇ5ãÚŸíYû°¦êÄµ#O`«' ÛV=aêškcº…ŠK %Ž‹ÑÒ-?Ù÷¼XL®7»ã§Y ˆÕFî£R2_í(â[ûï
ÔN9\Ñì«;úq;µqwÎš{ZÄ}ÄCvÏÝ[»Îã©ƒÍ5š%q×â H¾º!ÏˆmgwmNÃ±÷x²<–$[D“±-[„ÍçBxK+3Äm³ç*¬ÖDm=x”‘Æ*H÷ô³õBf=6î±'È4˜°ˆÍFÓÃ2'm¿†°)¸1 ×~@‰»Âp„ûö|D¯ÚR­¦¹ûƒ‹‹y›R¢kËãÜÂ·,òeçPj@n¾—­ÍäXþ Ïd´YÁš—Ïª<£êdÌãjÁŠÃÐÜ®@F~“œ¢$Y‹ÊÊå+µ†jØ›åFUñ!t±‘	Y¥ Õ«5\µÓÿó”A2œE#µ¸·Z\=R`ä¬`íÖåZ^=a ÿDžŸ’…t°û«³ÄMfyE™äç—n.«ÎÝ¸¹´xæX»-½:'oøÀZž^l½û[)­Æàj¶Â»mfnp‰:Èo`5BþîË/Õwæ’Å÷¿÷ñûœONŽ”Ë	Š^\d&SÖ´P›<¦-ÇhÎX³OçñÊÀe@&JŒ4«‚µ*/&w5²T¥ûùf#ŸÕ˜êNë+…¬Ãƒ*ÉQ#âP›¶ù;ÃîÚ³A'GÌ_c¨ÑÚÎU6Ûd´æŒµ·Á4Äc"H´±´×²¶§=íé¯ a¤«²ÝU)NC šõ+Â_¼6à©›»ÕHz™„4ä=úp¬Šë «}òY}º–q•Îh-—-°šVüq!¢¹]=kÖÇ–rtšx—UÄÈ¬µ¬ÁœÎ}O­L"*÷[ñ#><¡­úŒbVS†ß^½¸ŠˆéR5^Äj?u®	‘ä^ˆÖþõÛ«wÖÎS’WN$ÉÇRæÊ¯þsÅ¯® k+˜lÀcñ¹½4n”ô
-g/©o;<þJ[¼Š³ÆeÐwN=xWàÙxk·O* ¸¯•é® %¤gû8ìP6aí9:â¢(HËíW’‚{R†À'h
¥R,
)êÓ¥•ê
ñ”…ÄÓ‚5]VöQZÚ6Á3¤ø‘TZLg²s´”NA.¾’Ër3R^ãö2˜¬q7CçCebuµÜ!^á¬=`ÚœüEÁš¿<O&çùÕ×xÀÃF»™Z_íŒ&*³©kU]§ÎÍ– o`2 Þ§üÁOZãéÉPcát\s³²ãúGÙm"4V¬‘–zè¤&ÒÃIl‘f×Ÿ*ê•Mw`©ååþåÎúÎ®ÎZŒkÛœ5Â ÿî†hM½6ÆbßÖææàµ{ÔBBƒÌÇ¾®ìþ)y[J:9>nùÇ§UùƒiÁ_ÓwžqÆ=ÖNÎš+ƒœ~ò3…eB´×_w°ö#¼5Ž>)XSvÿÿŠ<5'¡[ì¬íl­Å°¶SÏšKƒü.¸Få"«ýq¤-×k
ÉªËYÓ~w¡`øƒµç]$.Zk°š•FFxfÛ[aí	¥Òy»]:ªm3×ŒÍºmµÖ0ÖXÅ §†Dr¬É\ìµ±{ËOÆ\ ¤¢ûYÝc=–Õ¿_sz¥–Žù))y"Úýµ©
Í#c÷k?ƒÕ ¬´æŽøÈó9Hnÿ~l6Æb÷÷=°ZŠÊHÜ«
}ä¶DÔYOÓÉ$¥ÖÖkóø{¹ò3<Ô;x;¤’Ý`íÌ…wçó³@Þ=7S,dû\*”fwZ§A³Ðb°ôe§k¥4´æQ
	Àqžµ8{t°žRDÔÉÆìäP21Ákj«PÆµÒR2³gOŸ%Ý±Q¡S«‰q¶R»|–‚	ˆ„ÿl>“?«¬¯ÔWÌ‚;Ë íìJµµršHâ¤ˆ{ÌæùíÊ˜l{+·~1ÍÉ
¾Â{›…!³^N®ß<³¾OÌžÃO?ÓÝ³†®IZ¬´ÖßÀãüÂ›°Z´]q ðþŠ^Ž‘Ñ6Ã±Ÿ>²*HÅ÷‰)I äÁÚûS¾|Oªœ¤R•D~Ræª©ƒµm‚¤FšÚg»É6°&5(;w×ÊX¡úB…k±='G2Uþ<E´¦ºµUéÂž5>!ª¾ÜkÎP›‹n]Þšk £_^ûJêÊíXí#Š ã!kÒÄÛ2Ö"™©f´®íµ¬íiO{úþ'Œ€kÎX“Ú›¼–<88Æ9€> ÷¡<¡œ©a`-£6d½§W*TbzŸ’[uõjHkqÄ=k­­€b4%^…,…tW®€kÄpq9Õ§w<GQ›.äå
Yµmû9]hEkªÈàpš¸@t6#¨èK[t¡ÃG„bµtd®\2NÈ8{0²«!Êò"Éñ‘çƒ¯½sóÌ;¤_ª/d<r«ˆÙ•_-è6Ëù¼^O‹ž²³pÂ
¶Ú‹Sàó¡§©çÖ¯~¡A;_|ðÎ™›§¥¡³µFœ»XæŒ4$ËúÓv‡­87Û™¾&µ‚*pÕ€
µ®1yM±ýSìo‡å ‹
q±…˜Q~o¤TQL&õBdV÷Èr—‰¦oDpsB¸žZôm%Œ¤²>!þzum>5½æW)È¸.wZúáùÎÿ îÃóŸ—;‰ýíùo/"’ûCX{ÞúÏ?xpéÔêÃv)˜{ùeýŒ|ÝTMªø†IÛw²þfjÀx˜í>¿@Þ¥ŽP4`­ ‚s»[Gb#wHáZ°„i§m#Ô8œÛ¿ìû¼¨ËsVç¸"~X3TÛî¬ïÎî7\¾¬¯ŸAë´­é8ïJUÅb»×ž¿~Z;¨*Ç(¼ÿ¥—d¨ápwU¼Æwæ·™ZÝÖÚöž5ç¬…¶š…A2¬EÓÖXHÇk†…†jZ -#X‹ym§g±sËÚw‘ö¯Q”HÆˆ’ ?ÆV¤x(vä?9 ’"fÓClÜ‰YB@‹j Uéœ4–¶ˆaÍîÀÚÏpÖb\¿¶aÚö`Í~¯{6!HFrˆn#œ5Ê;çÆ®aÂÎÍÝ¸×¿ïˆKðpnKÃÚv¸ÇâP¸Øú+–Åk)PÚGìµÉ[HÃ°mä&¬Ái!¬±èõqØz|%Œôó8¿’&(²Í'ðµW#ØèbÖ†°Q™bF»Ç ‰±N© ä¿œî9
ê³†(‚¼Ñ®2ž¿ Qh1Ð¥FÐ0çJ SüàÀËiä`"`ŠP®…¹¬´ðÔç§ipç¬f¡©h:©¨âêÙµ|CQóˆ]|PçÈ6r"Ëeº¦oÍÖá2U^³®g0•V`®ÚŠËøWPä•Ëg¹ª˜¯ŸÖ¸FXûOW¨þÓ¯¢`¸ZãŒEõ$¬˜eÍVÕºÆ	#xkÓµwo<k×ì&Z»íÝÆV£	¯p+ËŸ•SÞj}UõÛ(K®2VrãêÒàâÓž>}úÑo`59L_œù‚Úú×P[Ïzù6 ¥Ž~‚Êª‡MPÏ8„Ü@²„³·ÜR 5Äº$Èfb¤¬mÜËtUYþ-(—+3ZÉ78gDùh&Ÿg6Oµ*<KŽ&Kä©°Ãyº‹½®8?äÙ€;MÄ¶õI3âÀLTŽµíñ"ÌXsl9k9jV	ª±#Áj‚µ½–µ=íiOßû„;kÜ¬ÒÁšªa ¸é˜™WB™º™ ‡«Ñb@K ·Q(rÿ°ößŸ±Ö>FB5é³Ùý³Y°,çS/ë–µ€ST>­ób­ 3X¢Û–¼@ÿ€çqÄ/ypIÇ`dÇa›ãI¨‰~ ¹á`ik‡ûµ¼ÄÆyHáüÆº2õ%Çi”)ÂìÚ 0ÚTnÒ¶²ð,Vò¡ùõìÊÂgÍ–RuŠÏÆ_:4¾ÂãT(>Wäi¨s­´vd‘9;’ûû_{ð€k…ï¬!wJ*û=Iu­uÁZ×<lpÌÖ“lh²aÿ(Cd²Çf­M¦ 8ÄVw›Æl5 mªÙµn?‚5²¨mMAi#´47°LŒÆ1C\Ð×ÍÑfx‹´	ØlCgyÚóJ¼Ú}~}eXSgžü(Ÿ¬d8ççR¼È§V×ÏŸ_ÇT3X“·ˆ©†…I;/º`­&~½ºÑn´©Ý¨}~V‘uR6[êêgÓZqúÄ–)þÝ²>b¦Ô¹…€dêZCÓ¡Drn…8-,Š´íñéXj\›L_[.¦–A©ŽÁÚ½mÎÚ)nÛ¡Úc9kkK6;k®5HÍ«-b#5nøgã/ÉQ#äã±Úãi,6ÇVÏÚvNús¾Z0ÂOd£±:þ*)lCiìê˜ô£>æw2‹û1^š“
6ÏÍ/2m@°&TÛÓ¢Ã ¿¬½³öDütTIqá£Û‰ÃDžÑ&Iz°=ˆåuÑZä¬!-Ù4XÓ"^[>$‹7Þxâª #Psœæx­ÛN7â=k7ÆŽØlëÐõ;Øk(7aÏTÙýª~¼1÷Üþ#¬2a§û1n¹{ßÚ&.¯õ`­-OîG“{bs3ÒJ­eº©M­?”åö÷
ñÓ®(²ßg·g™ìþž€ÊHAª*’j÷$pÆÎ27r|nÇJö¥&K\*á~Ãj¥€HÈÒ ¹ý›=k×¶;kgÚ'ÚžŸœ;X èxK$+@ñDl¾N}®y‚²@ï²yÎ*’äÆ‡á´V»—Ë'‡¹^ä+=RÅGf£Þ§9W´ª³°Pž×Xø§YŽ¤­Ô¹¯€‹ŠiÕÙ8{ú2¦[¥E,ä•Ó§9-%,K. cUsµYê¾«ÓWÈÆÂOò…+§¯°“Ís* Öfç—xç_:qk>bµØY{?4×n'r-™Nçì}•5Å:ÙÕ¯œ7^-už2híÊ Ÿ*½ŸBH.ÞÔD˜÷øQXk¢NÉ@(5 	Ä9RbÙ%•+b8¶š°°6<Ú¬³ç¬5­5ÉòE|+aã±9Ýf@Y¢Â6t6œ©dxeAÖ<j„MqÛ`-NéµØ[‹w±Ö>	WAvkÀÚ* 6a
+-£Èþ¤•‰êsé{-k{ÚÓžþ:FþZkö0aäàÁ`6$E–Úè0É$KÅöÖ”ß¥‹¯ÍNçn<[ÖZw$ªÏr¹Y]µÿ,Ib5]²K§¹û™Nbô´—²´¸¨
’rxiiŽ»Ù@¸/›±Ç)W9à
ý¨ø³
äÒè¬ž¿´z	cÚúV‰D@r~ [žýoi²Â¢êó¯?ï¤ŒSTþèÄßœHx­…&ç7ÅaÌé×*€œ“/òyÿÅW^döšúžÖÖ8©ß¯„Â».j´ÁZô"”½þ¾›u£ZWöcÑÖ2ØœÏVÇÜ µI¥Œp¤_´¦›Æbå¼ÍLRÝ¤µÄfÀYDjÏ€hÈf…iî…d‰ÐlÀ‚ƒ,-CÓzÙÜàqÀ¨ •¤,Ç 9Š@Wø“+ôµ0[’]¯T(ƒ¤}ëâŸÉ‚UN=XßXíS±y‰™c¬]´(³ÖÖNMp±þ÷««	o0“åß¢BÈx¥UÔÄ¦šèVÍS0•ÖàÜ"_’›­WØêŸY½c,€Î¢ MæWEà¶uC	#ãèÄÁZhö2ÖÌ¶{ÏÆÚö±Ø±ôMÎœ;žwºÓæÓûutá:UP¨&c¾µã4«ar™¡Æó¤8
®ÝÙ	•ºyÛ=kŒm3‰ÎŽÿàÕ£o¼ QIñ£|ÌÀ€>¶Ö6p-‚5åŸœ»sãÞ(`$2ëv!àÖ;EŒ|7X#òÃ"AÞ ê‘¯'ûH±´Ö¸w+v–¢C ÛS—(b˜FÊKÅˆtà¶yoî;k[l5‘ºÚÍi¬bx‹h>´øùp—lÇžT–69X;È-cû˜.ÇaëZCÝ)#»GAÚo:pà E•kkË=f'R‰ ¯}NÆjrØØš9õ`î¿˜Õ¹qëQÜ‡ïûA²—oëBWF§ü`¹“3…©É”zØ¨ä½Â†`”RéÎo“/2t{7g2Èõùv_’¡Øy(+UÉ1²}XkIàE1öƒ}úÝƒ’G$Õ†B2o‹±&_Í÷tÎàåó6cŒ¶–‚èUœOÚc:IäÔ¦VOV 2š±*¡…_W@äåZ³µ©ít#-ÁÚetvåôå·¢+G³† ØÓÈS\9M»uaF«®üâ4àVsbÆóKxkwÎ-žAÝ°&R³¥@övæäOŽ°ÕT+¢*s0Íó®;SÊAÃí‘¥|zÿ¾æb‹Õ”2¢yÛ:©ò37i²SBiû¼š›©‘X`œåø·Ô²–hZŠs¢Å@¹–3Î*ym´ò¼SñÊ²ÒÒƒG“år&5!9Ê÷lºªû±Ü‘ª›
Mlì¦¹“!ÏÉWã®4Èíñ"Z$°†Þæ~Òþ‘9ä­#©ò¡¹j‹7—öZÖö´§=}ï›ÖÁÂ`k#Á÷L;¡@Hî‰Î
ÃCÔBZ$›ƒ£M`Íã¼©SÀÆÈM[Û"Fbgp­³·‚*¨“¬©?MÑÌÕ¬MÆÖykïÊù¾fØx]nˆSLÈý	<9<s³e¬ Nö‘|œ#<5ˆDió,P¯¯xÿ°67È0ëÒÖÀæV ©…€Ÿ›~Ö†ãOÑA•håÓU‘-`­Õ¨.èŒ¿B³X%2á²½øâ8Sã¯€\).®*¹‹©8Œ k.¼+„5›þ9Úó\*™ñ·•@n1ÖÔ©ÆL3µ~-,³Ð5®Mº„˜–ÍVšÖ,@CÖJÂN©1M) Öª–RÓ—ä—¢Q![(¸Ë {-mÞšàHÁ_|Ãu	ŠÙ,†Öœ9s;jï EÄF2’ÚØ›jW»”Éh&¸Å>ö“Ÿþôý÷£rSD¥éùÕK|JøýÃ‘‰f"“ã‰Vë´JÔggä°åó,ø>Ë&t'êa‰bX°Ó:íìHh¬Ám5Ç_¶Ô~Äe”=¢ð;qqä¸AÜTª¨„–IÙ^ÞØÀÀÜ\_?!#qd„kÿ¶³æ¬µ›€_Ö†Ô–¡F	¤zÕHœP´Ë¹ën0ö›Ç½yè8”&n³™Ø¬þtÉ~ÃîÖZÝOÏš\4³Õ~øÖ¯Ûÿê«á!Ñ}jo*g„CÌZ‹Ò %ÁÚ9Öæ¬ñµs%¦»…G¶¹{ßÖàªëô¬iÒÚÚÚÁ5ÈÈ†\‹YÍu­ÅSÖ¸EP³IAŽÖ"X;JÙ#?s+‹ê·ÜþÒÂ‡µÖwµ1¶¥aíÙ¯˜ÎØÚ&Ê"ïÞs¨èÊ0uGlÖ" tRÚŒ«†D6mí<s]ÆW|ÛÙÚ¶µüÜ“ƒcËú½€©PM´–¦2•Žh-e—›ü4 Mm‚l¼›ÈÙW~ˆçðLA#¾Ï¶ž¤†y©-™ÿ¿l6ÞP¬Ðºá¬¥dwdë§ƒákë×N^CÝÆšƒµukèLfx}£äDY¿¢d__’ª»,•~˜e…<-’”V)Õ³QkóX°‘rDú!6ÄZ#¤×æ='ÔbtÔëÀ[k4s1BMá³4¥±°î4ÝVþËåÚBÝòFjl‘Õ½%O­Vûã/¬»­V£¿v6/•ÅªÓªjö–BÿœÁ`5³÷`µùv.Û&?…qëÝ°&¶:ióÕØ$ºŸcÇ€5þ ®yéÌ—ÆRsâÆã*ecäê£GOïwîô‘Œ5×(®Ö8­\|ÓÚI»‚*±7Ê!IÅ+X­	ŸeTíÈdðFÂò›6¡€È¿ÂK6ª¶a»b–Ä˜\'ÙhŽÀ‚CÉìŒšf24@àªñ“I‹hÐü.gªuçAWÛ:ÖL›
­5•AÆU[5LÅ»!¬E£Úæ†75[š–ÿÞVÿñoö´§=íé{kÈP1»=[¦á3é”©r/3:DÒHB½çÉ‘‰2@—HÜí$6ž¡µ.gí³…Za¥–(lA*rÉkî)ýÙ3•-…å/¹Z#T0QZŽÄø|Žà‘™l î5/ÀýÉA\ˆ¥‰-PGÚ@¤>±Ú€ƒµHìÍ”:«¼›öm(ó‘ŠG²ú91\ü¥…¼èÊóÀ[œz§ÓÈ¦R~à•eïA£ç®æg7›“½@
a>9ùÜ)¬µIF™^ÑÇ¡wî?âï¬Ak§4Ä4¤5½Êí-¦?)ûý;xkÑìWÜtl‘šE8ÒšY“š<}Jê­hbîÚ @£W*é^*’º¢,H%Œ€ª*…ìÑKjÆ·h~%ù+¸Ãzü%ßÓxý chNe‡.†zËåK‡ÕLo()ÓÖÆ¡¼•Æa¯e’Ã#oo¬žÿ|ÃŸ{ è~0Ø^k×	É®‰—xõáï³Õ‡›šúÓ¬ò+fëNêN¬ç}ÑZNÅMz#ý9iEkÅçél¢ÉÍ”þÍ0Hký²C¡d°I¤ÝMý}Q$ÇIaaö¯Å…ê…”A,i¬ÖîrÖNmïYëvÖâ@È3À7‡kí1òEÌi1Xc"¶âÿðÕLÀÙKã‡a3qÚq€›ylèÎîCÖœœÓ¶­gMÜg®pö*s±ßzXû9‹°gMÖ¤vè1µ/hóÄ¡Ç›°Æÿó2Øk;Å¶'±»¯Æý;ÂÚÑ'k×¬íþÉõëbO¨I<Åõoˆ›ÝìoXãÖõ°³íÈ~bûUIè#w1™Fiû¬½UEšàÄNéøÌÝÛ¸j_’VwµÇ…›÷hÜ¢g$Å¬³šíÛ7É
ì‘9j‘¯hÄjwtgkGm™
~`¿¤®5K9zn«µæ¢qÓ‰¥›Þø\O€™æõkokÍèMfsÙ2\œs°æãÞcþã¥ÍQ¼‘´‚ o¯¯;6|ÙžÜÁšÅ$rQ¯“ñi)Ã\ç´‘§R—Û*¼ÓóÆ¢+ÑÚ€.Üñ”<_'€ÀJ½¼®Ü	ÖÈ†¬q«à‘ÑK¯«Wik	¸Oaô	U;VÕdF‰D>ÃÛ„Æ1‰ÉÖ5:ÕlSm¥±ÀÎ;·(†äpN“µVc«2äÝrö‹ª¦äkÐZ6Íy+ªòžÁZPíÜ¼yçÝùN»³þŒ³ææaj«2l1#C°šÇ»èÓ
cµ!-è½&Ò˜?jäî?>E÷Ÿ~ôè©ÁÚý
„TÈ0°vL#·Dê[sÒÙ˜m£¨X	SÓf©!ÌµæôÚ[ÛZ`ÁûbùJP©æ ]ÅÓ¯Þ½'éj†ÇõÏÕÊè¦¯6§‰ügm.D·­)—CZû
Åñ"±±võÑ§«â4á $X›é8m˜±&kLs_{-k{ÚÓžþšÖîè¶ˆ¢DÈ°Î†“”Æõ9n£;¥d5¤2ø„N: ²VW?âMv7kí³Ï¦WÌ¢3RF˜²)3ÕÂl:;­ö3NÊ²R<Uð…m@%2’úÇ;¥ ÈÙÐ5ùgÍè%}%Éß
kÉÕK¯¯}	“©v‘»R!-¸_ÖG#\ûšO_MªhT§‚z>VSa6Ï` d³•'O‹Nu¦Œ¥‚âT®ôâxQˆ˜5Ë°Ù;÷¿|ôèƒ/¿øàëZ£Á@¨òžƒ5PíOúê«F±T	Òç*HÌºW 46¸›§v€%#Ý$õ­©îqRuGÖ·&zcÁ&lÙ»)°–Vtº(²)ùI‡F–”ÒùQšÃêî¬y¼Pn>¶Ï¥|(I*eEkøçî‘£UDEHÀ´7D_á¬o#ø¨‹MP(Sõhä_½Ôé¼¦,HëYÒ¨ý	‚Œ×”ãò°Z}xþáÄÈh²º’å	¨°*w Ïæ¼dUôÆ~bH®Š|©éÙp+ÙaÙü5VQM$
]´Xry*õÎX×šÄ¯ß•.œ»@OÿA¥öÏ™é1¿käy·è†µ¸gmÉXÑ÷F$$°6†à4táà…A‚i/áML¶¢MÆv&gŒ³gm·9k.ºß|´ãûßzýGÿ@‹Etÿããš·¸Qiäv(vÖ¤;÷îÄ#ÛžÂ¶ØÿŸ5:ÖÖÔ­†±fìôüÚAíˆ½X³Å]kq‚LFâ–5Gv<T°vÔZÕÌXÓlµý6M-‚5ttmM:hßØ¿a=k—\¤Ãµ¸cmÝì¶y‚¶U0ºçº…ÕÈq@æP”g¹Ý‹=µˆD7w-kdçzHYuí9+ØÑ¸FóZHh¼Ç°å
!'A´TC-’ØÌFÒb4S¯/_­lKzò×H„ƒðÜTS>9ecgfg0ÿ‰í)Ð‹¿Î5B€rl×1kgÖ;˜;ëg:ô©ùÙ*>M%G£ÞBò°|ÆYÅ.TaôSr½Ë šˆq0{V	ÌZÃ¢”1KR¸GÛvÜBk¤ÙlUWê$dä…eÕ@5ê6(.KÕcs¸pë2¨ÕŒájìýoú¯h‹c³ÙJÒSè#œ¦ß–çNõ÷-`í
hY&ÉïäÙd+œCµªæ§Ï­w…A"ÁÚm­‡’×®a³+Ye(PÓZ JJU†e6·€rÆûO	ïÿío?%Re”lD°Æ8”÷d­DåˆÕä°ñ×CkÝ°ÖÈðÕjBfJa!XCœÍEe¼gFÙTÐ¿šÑ+•ÑÑFC°†YYÈV*²ëu–y%ö'«•žh%á¬ç›f¤òïÔ±>$F5`Í´›±öÿØ;¿ß6î3Ý`ÿ‚^J‚%Â°.tS!”1–ì´kÈ(m)´J[•j`ƒº¤“8²c[HÓŠI©sá4À’*;p•¸ ÔµÛö®HU!Q
ÕØƒ½ëÂÀ°WA€½9Àù<ïwFc†JzÒËc>"ç—Ifw9ó™ç}Ÿ·±óÈ¹v1¬kû°†¢pƒµö”µ¶Újë…hZ‹YM°&q¡âëhBUI“!5ªßDkµ¬qcŽuk(ŒÝRù‹„Æ¤µI%÷#v²LÕ^‘Oç«²…“©ºþj%É…”Šb:\•çï,k Ž<±&yò’bXS[ƒH‹Í‘tPaí/¿üå{Š½¬™±ÆÝ“æK549žá
Å÷É´™ª½Înº{;2]çj¦73Y*÷v“éÜÙËês‹ëOd,þÝ}X»¬IkD-ÿæ7ÿÁÓßKó™r>ïÍ×;¾^ÉÊŸ;wnÂí5	Tà$¬¬)Zd”]4&XSšçs"'#«ùØJéàÙYkV+è*‹ðg©ÒQÛ ×ö™×¥‰Ö\Ðf–5w–¹‰M¼¶:+T)d–úèe¤E$—ØDs74gY‚‹–ÐÚ©óN3åÎÁÚÒçss¿MtujÀZAÕ¾¯ö¹ƒTrI¨FÞHR—qÔAJÂF{mº§(Ù\l·° ÇcÆq’&d:ŽëV'"”;Ad^5¥Äh®WW;z'ò=Öá`Í9k†f®5µ¬ýKŒkˆ4H±ÏÇ\‚«ÿ-ÎJƒ¤AF¹ý—H9«èÇã¯¼$ÒØÕ¬ìó—žÊYûvk­˜bgMÖš±ÚÙŸýÜR £DÈÖ¬§­§F†gY8R³’³ÖÚ±;k¶âa;Í¤&Æç¬½ö‹ï.…6š¹æ¦UÿYœ©ô~Ûˆ½¸jií¸#â3±?³ð~Q ~xk'¿ö®Ùþ³Gq¼Hœ-r‹§VÎ[³El«ñØ_ÆÓ¦š´¯M]ÃO<rHYmÕ”Yrñ?/B5=ãÅšÒ(wHµ÷ÈaÅŠ(’l¥¼ÀM|f•Y­øî¡¬¯ùŠÙ¼•CZ°QuŽžâF²qÝù ?^°Ö‘Öºº%?­Ùk¹´§8#…•Ê|É\+w&¶·ûÉ(¼ða´&'©¥gí²ÓÍð¤ÆÁ[KááUá,Uì”ÑŠÌIE`cà%$’ùÔ¬‰bTŸMô€²û)Íè¨óaaÜT‡V ¿*l¢	ÙÅƒlòÿ™À§-±Æˆ›©-iÆu_¢ðþ›4Qp"´ R}÷O@ÚÆRÅúØÀ<¬¼ê¤V6†Ln?šyÿÍ7ß¨öiµ¯
~…Q®­Ø¹;—·ûswš« ùÒ*\žúWp†	q>¡ˆA™ÓŸ`-A6¢.2 R¬áÆ¿òÉ'íýqŒ‘ÿàšÖ µös5£5òûÃ–5°šSÒ‰jçåù:1IjBk±ñæh­Z£MMGS> œúpçêUeC*óvM“è\¬ñ¾ò×úx¹æha8ÕK\ÕªÓE´Ößk-ÆeFTf‰Z5Kƒd©à~ç¬}ïŸþG[mµÕÖ‹PIÓ¨Ãš»Ìp×ˆF¶>s®Õ±–³ÞJ/r”X„ýÊunrþñæ¯wþØ’Þ¿k·——Ôf)#3÷Çh[ÃcËRîÈ!šÔîl\}iYlXj|œ‚¤QÍŠÏ‚ÖX[z¿ÄTUC4/½ï­)1y^4_¬kw·+=·Ùµ{ï†³|€3ôåß‹z©©?¹÷“¹\¦†Àˆ¥é9ÐˆÝ‰x‚Âkßèí g­ÄPì¼Çl¢QåÀÏž<ùð	“æ>V~ÿï~ò“·4û=Â»~)X»0bÅ ÉùÛóuÏ¯ttl­õžÅYk‘‹$Ö‚5§QI¸FŸÿóêÆ—'4†l"+ŸMN¤u­g™>`&zË°²ïÊac­§ÞLEõ+~ÑIÀF­Ž|¸"eê‡÷ &a_z¼'Te£öù|Ïæ€7=ã Ùx„wÞ¶qv÷Gí
rIîÎmî"Æ2PZÉï·y¸*€â¢ÈåªT°¿Ùs$¯+«•»€4ýÍ™®’t<lS›ÙOÁÆ$EtB²:ú|÷Úqa\žwŽWŽÏž_ìþf¢µ°òW ÚÁÎšÇ"g-¶Ö¬c=DIÛÊ"Ò7¦–.¾)‚œ8¬•Î¾2,½ò
ô(VS÷Ú›°Z“³³Ñ7[k"«ÖÎ‚bC/V¢ºG‰5¬æ6^~*½LÂˆI½r×÷åâûã€‘ƒçr³=Q«»©½vñ»Ãÿ•ÁÓah@6µ-‹‚ŒdîÚ`¬Ï8dæS¨­­}XÛú‘UAŠÍx²$Òdæ9g-¢µ-<µÕÐþ
.ceO)NiîY£ Ñe3biÊ¶]Áã³Aì4Çj['Õ­6(¯-bµØU‹Vß*ùrhX;”9$`SÏš3Õ²A&ß{8C"¿v*#² ‹»†Ü‹¯<û4âS—HÒ»øÀêDôïuÚ4MÒ;r~¥@d^­j˜÷‚5Zd;}	óÕèÉ2.‰µŸ/ršalüZ£A‘_åƒn,êü\u3PDZïõ0óš^5A›Hi2›õÙæ^ŽÅt)îè¤5=»B)1ôLû½TÌWÎ‚ÜìÔe'Ef´Ã#óì,Ïó˜^ÞP,âÈH_BYÄ3*vä3žÖµT®¦2Èú@XÃXSÈHóR‘…À’?†¼IèLÈ7'!XŒ5edyýý;+;¤]®moO5¨‚luÖìM9…><s¦/ñá™tÿbF¬Q›Éjï`.¶tEÌ:ðèæ'=Éý;s±ßÚcóÚ@˜ˆÖè@£6Mäôš©ÃÚÀ0?p˜@áZ%U_V¿86i¤Æp5¬UY1X;Ò}®]Âc€Š—â¿L&îšYÂˆ¾¡¹šêI×Õá8Í-£ù PUKåc¸305à}oz „µ¨
òÇ±±&í,Ü¼¹°ëû£¤IóÕx
Öx¢×Ö××ÛSÖÚj«­Ö@5ÂÚCÁšYkš³†è4O™SeZ‚%K°µ2çæ¬íí0»µkí§Ûê÷Æ4WsÞX*âÚÐ5I´4–|Uô—už,0;´ÖT—ÀHËê g–qóW<Ã=¡\í£pÂ±š¦rbmnš	×"…°öq‘òÖê™L@+:~Ï<ÿ$h­FþãÆñ	Q¡ó#Ótásuã§;¼|ï¯ŒÇÆÜjÆ u]QÂÊÇ/|¡@L DÀeW.\øýÈ´›-3ísùãgcX‹´Þ<ÎÚ¹‰ÞVëî ÊŸî¹hÊÍkzVJF¾³IeXLsóÈˆòŽ/ ·Aq†>€Z4)[ŒvÜhM/œÑÛhLŽ‡dÁ-=ìfbÔU¤4hl¬<vœÃ¥ûã~n( W%N­žä„¾yØ~ìK†bÃÂÎ]û1Ôè„â>Û]ÛÝ”®ôøŒÜÓ£€‚\º+;Y«$5(X®UÇÉ2ƒÐT§¤Ž¹¿W&kiÆ`-³6£å¤dTÂSÍé°}“ÇhG†n|¶BR˜ÕfÁ"æ:zí–«ŒãEžÇµÍ#MÎ9Î)y@A[t·cUƒÕ+OË›%üµK'Î_?úôÐ‰KÔDZ«°v–ñØ-ipÑÁÎšÔœÉ9KD?Ã¯ñ×bX³-wàå§CêY“¨ƒŒIÍø_¿¾øð	¨v`dÌáê€)k8kÑkßÝ\‹_öÿK:ŒË7­­ÆN›ñL´ˆb<Üë…ÎÚÏãüGp,ðo‚5}OÙ"û«ª}tÏØY»ŒD¹H¾ZÓƒÖŽ®†¨æ"Ešg«!}SÛ®pQ+Â ñÔ¶NÚ˜ì˜èöÃØYÓf«¢ƒ´E=ùG3MÈ†Ôµ¦-bE`·@°ÆGN¦7Ÿ­T¼lÞ%úwv@užßÅ§K/î÷»4•¾«“ð~@¨ÃË¥ä­ÙítŠŠßöÉÑ-‰Òj¬Õ}%ÑžBÀZkËZä¬	5.¯,U4-•²ŒþŒrùÑ	¼©"PæÑ’\L(ØÞ’¥|-S†h^ãÕ9ÕFV±Ù‚ÀO«™ò6Š€“Œ4hŠn+
ùŠ¨c`ºFÈc­À±‘yJØkµé‘%ê$æåÖôÍ.²òÑ¾z“ÞµtF[HZDär}†@BRô^©ÒÊV*ÂuAUe‘|ZaHâ]En'ò‡ä¯kwï\»†µöjKd´äOF­1î¡UÁZBò´€`Õˆí)µiwç“OöÖþü·¿ýí£……›{œTDk­°Æ¬k«…”«ÈÓEXX8d"Íø¹:
‚q"°'4\R‘UŒ kÊhÑÿ$Lî	ðø_Â¬ìWG:÷Oª’ÆXSc¦¯PN;í³ç–‘—Æž–<¤–*È}Z» «ÝÞÏî?ÈX[¸µûhao×~Æ€Ôa-ÖnØ¯¦$HÔž²ÖV[m½ MkÿeÆšCéR“‹Lœ5XÍ«4›MklËRãSÛêA4â¥¬Ýü5²øþÐZkjZ»½”ÒIIð…«v_sj|öÐ¤5¥a™©oMêó°Ù,jËNÚÔÀ)±?­\gŸƒn06~¬Æ80‚ Ólxž–xkû¬æ9Vë	Ê©íË÷æT£§€‘¹¦/­÷õÅf¥<^œÿ_ÔAÖ¦9Á‰Ú
BŽ«ˆd%=¯ÓËMOûêôÐ=èÞÑÓ§áµÙ‡ëOþüäãä!qñ\Òò/kúû¸ý©7¢ÞÝ1?_é~ÞZ;”êm²ZS	¤ m©JÈ|/hXÓ g@ƒF¶ÈS+Ëdã¸‚7˜º6ë kHÔ /9xU‘ï¨µØGðò~Šï„o3žöQOO±Ä½dÞÙ2}kÅ2ƒc•P™
¸Ùn±0ÁæÈ•9Û˜}vÊ*!jo»ˆ‘ÚW·×ÖÍss»º—\‚Õj¼ÃãUŠüi¹œ ¹¶Ì]@Ž?B,W›TìŒc5¾,¿ˆ£­2®}„ÇØf™)ÛmJê×!Ó(¼Û™UQ$‚jGÁÚÑÙrv
a†-Îkq¤¨,&5¾bTkrÖèYsÁýÛÈúÖd LÉYSä C¸Äjƒ[çf‘rógÛXì	åök„4²jMƒlMq_­iç‡l¶µ†X:]ßÌYÓ/Ó(ˆüÁEg«Åq‹×ŸëYãÑb­…«ƒfb[$Àˆ¯fÆÚwƒ5^DE´vZ{F.$uDÎšžŽbüÃBPÓÊÍžvÈñP´ùLtf¼&X‹®±“š­c³m0Ìq¹"Vò›k³i3Ä¶æZÈGkà¸«Ètùg®$RÇ¥}Èz¬ZÙ¨ò¤ykò¥Á– HžÖ¯¯XkÁm'7Œ{Ë5¬e¨ÌPÿ(tÓêP6ëeXQEˆß–ñ`ž^vQ/ô–ñc½JîïÈdÁŸ.À«ÛKùfm¥;ärú¾%úÓÀK'›ç,·òD†ŒÁÚD¹«¯³óÃSé[zÖ˜½²Tšphøð.«–‚_À Ÿ¹^éžp¦5æv(ðQ¹Àz	›“ÅTÊbú±Ì@Ÿi¬õWhêŠ+.¨fägõ/Q9¬|Z²"¡³%,(e÷/“è»L™ÝmØ5Uöçø6Eýï¯–úŠ	’¼Z#¤¬ÍˆJüj=U©jÂ‡S.ð*÷û|5©/ºkwÖWÖîèSàU).ƒŒ¼E<·/\8sêTƒ2Põº•Nœå4Ž Ë?!'Z¿	¬=ÙcÔMkV¸ð+ÁZ­	Öú‡ú’Xp?ÿ2§dJö
˜(7ÍQ)Ù—V–¿<PËZhsu„³ oàš¤Ðc×,ÛŸtÊdºja`N¢³Óäxiß4 Ùr¤9É?þn„sÓ\pAÐb¬Åk· ±~çMN)rÀbápmZ»³þ½vËZ[mµõÿÓšÅ^ù7¾BZ;ÒZŽKðI°¦ Â|Ù Ó—5°¦ìrõñ¹úúÞMÃµo°Ö€5uˆÛ­Ñ±1•AªÊn+ú¥çiš€µPôLa¡é@+Y|–¥ûû:ÈŸä—Ö¨“ôIê·lç¯Qú(F3&±uÿîüç—6vçäw™‘HDún‹PíË/¹"[$)~£VÚ ýaÚF¬ââ”-’d¢Ü²¦e‹ÖÊy.r,øú°F.äÉõ?îèŸ·ÑÚÛª€¹ò›+äAØõ4ïeçYtG¾ZKƒÚ×`[mT\¦<Ù@€š5¯Mè¨ ÅÑš¸l‚ÕG”ŸH•#•JxgHV™ GØ¦œþç$ä12èüŽ…T‹ŠÁá®Âû“¹>¹šEåUÛOôu÷:‘Š\v‘™ÉnÞ`²¸úq×N!œ4c5ÁšÙjÂµmæ°ÍÝ¸22w…$P³ÍªJ¤ÒˆqKÅåJ—WÅY£Ë$¨0›¼PôÌñ2¢^4KÀ¤¿ìŒ1å¯=2™åE­”‰Fø†……d¨å;Ê|ŸƒÖñ71>v(	Ryû×pÖ”Ù:f­52vÖTDÝ¹„c6›w¬ê¶Yi•‡¶¸®~°j[$çËPÒSsÐ¨K„ÖZç¬}gmHtæF`K,Ýú¢;BºÈ¥ë„Pÿ(j»¾¢ÊÇçhíáÊbktÿA­k­¨;kÎ$cñÝ;^d7Ò¶6¸ú#òA¶ˆy¶ÅAF8Æ
E–d„mka³9\Û¥f{T<F±ýÍ°æÂ ç"VÕ¢ÈÐ\ãØ‰l5ç©a©¹G»T4nAå8´¡…fä‡¡8SP¢ RRp?K˜ÿSá»|m­î&ˆ¿xD¡â´gíäûEB"0L$oÈÞ  Öe|l±<ß–Ü’ï‚høõÚdË÷5Ï`-—ò<í’u‘²JHéá´6ºk€OÝ?šP"RâBOOÿ)Š¡IóLl´Îã\€ód¥9bçPr''áéîœ†gòÿèº;çy²­€7O	âþ‰.ÂûyjSK÷I˜n÷,§J_®?†Ö¦çEhµ€X(bDüX³4BÌ×§ûû5^í¿þu¦žª^}w£0†»Æ+ 8Ê>&'S3cï¿»œf^À$'„5ü¾~cqRÎZ:˜¤DdòþXirNÕÇÛÛÅ¾mcµfgM«cÀÚ6gƒm’3·sšCÃ=F?¼šN(ú˜àU¸S(´³·›Û¹ù‡½n.ìÙ-PnÞ½Ë‡Ðgk.cÄ 6Q¸4-ù\dš²Œ—Ô°'¿MgêT:-<Ó;³ŒªU6ê„ûW<ÞcÊ0‡Õ4ìCuX}T¤Ãý9«’t fûíj1§™„Wá^kãš^¬q1p°±æÀtgoÁ|5ýœÓ@8{*6Öø²èþup­=e­­¶ÚzäFd­j­!‹ƒ<êN'Šœ¢ôQÁrÖútÿOaþœÔsöÁM*óî­½…p4v³µ&T3km™,tEÊˆœ¥ïObÅI6=æ‹fN´s¸ ˜¬Ý/Q Y´€Û±YŽÃ!Fgi¯¬ø‰,+W©€‘&õävï½¾ÖÕ£Iksk0Zl¬q$Ô½/`Ýòi›ãµåéÛKvJËtKYø,•-Ó·PàòÄKÕGOœ>§6}ÂÏ¡z;vœ´øó/T)XVDkLÅ‘»8œJ{•ùÛõlG%¶ÖbXcã`‘."i0˜…í”™à÷aÔC[ŽAeÑA8†½gFQ#Æ²n+ê[+Ýç]Îz¼›ãtµ9XSŠv:Í!`­@^Xª\ªUZ­DòÿûHÐÚJ¥JQÏ¦òY6‰çwW+œ­R¬­}fUXk—·ç^ßüíæ\_Ošß¯›·WU¸IWLNZâs®@,d«“©æÄ¢æ›ìž)t9VåYšÑÚ`Íùj¼y;¢c†pÈvNd:'Â=«¦ô§üÙÕ®Žž)Œd¦£½k1ªñp ÖÝiA°†?v½k¢µ5~Y†kûÈvTZå`mLsù"$¼„µvv(vÖæ4tPv~Tù²ˆYý#‡hg9Àú¥—þùåó×ŸjîÚ+¯\Ï/FÍjÒÃ‡‹aÏšèë@gMx¯¥eÍ`íÍ‚Ô“…$CmpKÙý‹l±jÎaÏt4B4^©ÅÓ³A˜ÃFg„‹¸2H‹¤¼i#vØ¤Ã„AJ ™ÑWmZD…<"H³Oƒ5¹iL·ž
ÿ‚UF …ì…bXÍÜt56¶¦4{Jÿ©ˆý5žÍlï:T
ä³ü³»!5‰•[kùCGzÈèð‘^ÒÃŒŽ 
Úô‰ãqXC×:*‚5ßYgž·yÖªÖÙ™òDkò‡äø®Ü7M¯¬ÑcË¾ícÛf­55¬5ÃÚúÝËw/Ï®©¸ÎKkö}]ÑU)æuÖ±ÕiÜêòz×ø¼¡%‚2ºœ3“ Ràçdá¨ßK->:äM$‡Õ«¦CÙ”…ØÃ.uh¤²Dáã<ƒÔpì­ÆQ¼6?Â)kšß¿LöãŸþôîR®Âº%b³pýjAÀ‘wï_Á«U=ÎFú¯'Þ'±ª~J(ågVvà÷‘1rgÿÖšYíŒÞ ícý}ÇXQ~“¯
òÑÿ=ÜïóÇû>“ÎÙ×h7ÖµÝEª×PuýsÖZDCœ’õø`` Ö’`Žª^×T¹„–Ek:SC[$ŽÆR kL¦&U$Ã±Ëk+TPéR.˜,æª‹éØ9ÑšéyXX±Š5¶£Îµf{c-vÖÖšµ›¤`þzW?ÈašZkÎl¬<&	’‡.ZÖÛUmµÕÖ¡r°f‘Qd2’J'Ô²JÏ\N°*	¡"ºªîûu
ä“ö)½®¦µ–®µ¨-s;µZVRºwò<ÕªhW#íK7ðÒ	5”Ö
%¬7Oá`lèÔæ©[‡Ë{ŽzQðŒ%²¡$,“¨üi¦µDƒ²»{»S›¡³&'Í™j’B!ãô~¾>/h~Y…ì0ü´¥Å3Åãù€Øâ"‘'3“ü&¡Êø4×!åêŸŸÍwouw¬­¯ï¸’•ÈZ{G+¿<Æ;ð¿?œèêðnß®ÐóFÃ—ƒµoÅ4”7X;g°fÍwH6ˆ]xDAR ¶eá"ÙN§lIè¦ipR8;z·$›lë`m¬ ¯¬qØÈP¸‹7ÓgöL&‘ÖŒ<E¯@9¼–Ñxé$0T•ÂÍÍ[÷°Fëß;vµòÞ_Þ{ûÇ0"Qzê3`M—nT£ÎýöóWŒ¬S6Ë§ Ü1JˆRôSýu~[ÀP^z™ç !zÅ<Y¡r¶£do@)0sïI–wXÀXkoTëGJ4”¥ú¦ã×«ùÌ¢ÚÖÖœe[k· Z ëÎfbGöÖÃË®QÉU¸|5¬ê©ÁÙÕ-c5úÕ”.®ÉYƒÖ¤ó‚µ–žµož³¹ZŸ*3äjYq-jTÖÎ^¼ø²æp?=¬IC×Ï_oÖ5¨XCßh¬Ùofy°¯Æ×JÜ|öÓïÎk?"QßmmÜbJ¤ölëÙ÷·†íËˆÌqßpx—?*:RÃÐ6ÁšpLtÆžÍàLèÆ–£DÖ¦­GÎT­Å«[1«ñ°CŽÕBL‹|5˜dúc€µ¨³îä>Q¡8×ÉQ{vø¨’F¨€ØN®ºÆ5£PÇiöoµŠD•Þ­AAé³^&lÎ[“Ú¦iËÜµ,vˆF–Há'§¬¡fôâfÙìÍú¦l·YiY®ÖÓrÖ’]92Hà38eÊæõëêó¨³ïf‘áH3¬Ú‡µ»àÚJ*ywª°²B  =kÕåzÌ€Ó¸0 ¨$€¯è™Ó”­¨¶Ä|kþ°êíx‰j3x†Ä6¼}a•Q1 ”ãh*[­x52¢ˆz På~vÓlQvÿ¤Üµ¥‘áþù:Ä"0ûê]Ê¯:Õ–fÞ|ó~WQn[µÐ)ÆXº?Ïð	8sŸZþBª¨sWa†¨È
ýjLYÛ…ÕjYCtªÙ>Óf›’@õži•¬¤U3x–x9ŸLô)Yy¸‡™sìo~ôÑ‚ÊUþÏM³Ö¾ØOïgÖÚBš³6ðÁ4•‰‰‘â¨Çp<3XKÂ_”„ÎfÆ1Þ€H'`-·D	)ÿ¶D2LáJ¿²IûLB¶„_Ç©ëg3jEcÃ4â6ÍW;#^»ÐÜ¸¦‡Ðm`Íœ5k­ÆÚÍ[;Dj`œÆ†ƒµ+W¨¡óÕ¬òÓ;+ëŸ¶« Ûj«­¥i=Ôš¢e7¤µµÁœF^çJ­ê—»6lN“§–TªŽ44s¾±³·³'X	ãû›­5©J[AJËúUnuŽÔ;Î(Ä’c”&§Îüµ€Ü	úpÔ²â³‚Í²¾Ef•U	&Ð‘._MÙô[-GÌ[ã)u¦7ïÍM5¾üòÆëss
„®Q¢È)ºßÉæ¬éñÖÚøèD¹hýóPÈíÛµIfóYV*qw|˜8MU"PÃe‹¶.Màœ|²³~t}ÁÁÚ[?1X{Os±¯OÏ×çoß®W²"0§î¿'’Eò<å¢I\$±§þ5ñ[ÆÁ>S9ŠaË˜¢dÀA›ã³´ã6½¬`-*ƒ´É¬H-“•ÇNYI æl©BÒ4vÇª«•™±ªr·e…Õ“jçÛ¼!æ¾á`íkf­©‰íÕkŠy¹2==·éõ þ`R)hUDå#Ä–ñíçÞæÔp¢3ku¨@#5
‰pÜ,)’Ø”ýÁØ‚5-Í?ãÒmOL7°ÍpÀ5²Ïr‰¼:>ÊÌ³ÑrGa×ÌYk"5žèF\Éñ–|sÖBPk‹ô!M­Pç¦zÈÐX›Í>”¡1ÇjÇ'¨MT¤éasr~«µvà 5œ5«ƒ<û³WªEÆš’ü™’ýÓ×^zIÈ¦oòŠ¡óÿy©•×¾mÎÚsƒ{ÖbXû‡üR!¬‰¤œÃ¦V5§¸9Í ÇáQ[D)«ÔQZéäƒ-¨E|æ`M¶ÚsEìqiÇñÚê-g¬!gªiÝ”1}O †±fÕâ5í!úùså›@>°˜Æ86Äm‡¬†Ž®®kz9>Ûã­gPž{-x~£èR{ptðp¯û·öæÊÏ–ƒµ,6šÙlù È»ÙØ‡8ª¡#‡qÔzÛ@ì1Œ~ÎÛk6`£š®–VX.ÅãA*%Ç-ë¥Òª€´²lÝ4š°¾µ¼^ÿ™Sö{ý?´®µXMù"¡±;SÙÕÅº*ìjE²@”ØÈ+ŠT<¥±FÁ#;U«’¦xÞW«Úp"ðÕ<%bC–JX‡¬ª"¢3rDà§èFcŸºÀú|²¦¨(Ä¹
	…YJÔæDpï~õî»o@d•ÂURý«Ðk '•ÉOg»¶ñÆû:EÁuW¡¶"Ìöþýâ=×pc8›©6.[Ç]e¨uâoÆ±F¨E6©lÑö§­æ³¨¤¦J%‡ÑZìiü–µ½…›ˆSÊÂH-ÁàÉ¬µc¢µhmàƒßôƒ²®:qdZAŽhZ9#ÈÆë0$T9".¼yžgAU€¦ÿÄÅ‘ŒÆ›]¥ªEGÙi˜ÓRÅGh?VTi°Ö<x­Y¡¯6ÝŸœ†Õ¾ÙX»µóùˆÓ•pÝàÝ¹Ùjk»Qp¿¾ÖÛÁýmµÕÖ4iÍk+<ÐšÓÅaš²cÁ"H‰t_©i©Î"§²xhèÄµ›Øïµt­ÅÎøÃ	q†"·€shdpÑ¾Æ·*Uß’.rÖÁ¦*X­X@å¢Ò›ý,É"Ö¬#YOÏ4G9¦:¹ýHÈÌ¸G`¯ËËT›Äî=p-“â1kÖ¶†íÓðz»ƒ«èO!L/Q	ÃäµU!šØ¼1éwœ†ÔYNÁä	z¡FWÜ?ï<9ùpG°Fv—¬5kÐÆÚï-VóÀ¢Ð¤µ–\åå¯©’bKGi!¸Á!¬a¬±7&Œ 0t¶9Z+‹Ò4Â:$4åx®¥OeafÌ+xÍz 2ûa$¤Vj7Lù6Ô  ,qcù~U=‹9]féfî¸HïÜ#ò”&Ù…°vêíÐZûL—nÛ†:ß;_ìáš,Xè'ÈW,är‚µžþdµPIúür°ËI5'ŠÅ‹6Û‘9+J85{Fî™A›4‘ÙwÖ«©ßbËóF‡Ç˜µVÎ®¦Ó€Zf"ßÛ}´1¸zíÛµP­#QÏš[³¯Ç‹«×ðÕ0QtùŽ@ˆÅÕÙ“Ý‡œ8T	¬bÎš¥ kÍŠ
#…äÔÝé)qú3² c©
rèé€N£M$÷ò¥§ÿüÝbZûÏÐhûcl¬Äkñonišã«Ö\ÒÈOÿß6S,‹Û_í²8Rôˆ%ã)r®LÏä¢=£2pë0Îš Ìø-±YÄ…Æj¬Y²0‘/¢L£3ûbÛ‘YË|l÷mAO6´á ªŠq
3/‡3Zä™ñ’(wD´¼k'Ey2QDwÎ˜‹¿Èi†µÃúwóKîÏîhUŽ6bMñý‡òÊÉr4TžN´n;ÎËÔ¦–Ë9¡qß†-:»à4”‚ÔxÖë^ÆKuYñµÁšœµ¼øÇ^›Èxí¾ŽqÇšñI3¬­PàxôqOyq€€È=äL‚ƒÇm0BqÃÒ*Œä):8•U†Â+Ýkêã–^ÀºžAöñƒTé&J£®IÏêÇ‚LÌRªY>{Ó#’ƒ¥`´¡wÿô×¯¾zãÍ«úXç0tˆG¬dá×”D.ÛÐlÒF
c“ü)Òd•s	Yclû”€|J$ï3ÛÑZsd¤Á´cÇ 5^ çŸJ~£E‘E_ÍDÏÓý~öi<ù›æ¬Ñ·ÆLJ6d­½Ök[uå#À­k¼Ø	pšBÁ½œ¡ˆUyÍÊÌYT$G8Z©"—ck¹ž2h«™ßVá4¼”æý¯RüâÔ‚éÆ­ŸmÍ°†t(Æ4HMÅ¬fJÞžN
Ö×4ÖööŒÓvyj¡U£1©gÍQš–V ‰¹¬µ[ÖÚj«­"¼R‹Gc£ÆZ¤ÁAsÖ@#Á”‚§äª¹*HhÍˆ­nÛ2#{Q"äÁÖÚ/––Ä:…ãJïå§h
XX»?$Èø" Ì`M³x€5S¡¨‘¨8<Y`mRp±q/ÒÁšœ6á†Ì5DÖšyðô@nmÌ½NãÎu?r¼0Ôˆ•gZ‹tcm3Íù.EðYXEÈ<gùiFÑÔÀÁ¥_,sZ]æ¬^Íž(œ¬€¤ÎCk×ž|LNCÝõ¬éa­^ÑÄV†ßXxœõÏítgðÕX*OPSXäq›çìtÜ”ï0VÓ^©Ãk®Z“²Ä›£E0‘,Ò¶³ÑÎ/Œ+‰ÙÅÈô8LÒˆ³+ŽBvægúÃÃiå2ÿj2Ô®I2.é/óû öäÈçxksÛŸÝþ¾÷*Îˆ«qÙò6oÄ«\¸I—~£®[ºA£‘NëÙ.¬‚×smÓ)§k¹dÅºæÒYÇ‘²ùŠEàÒ
:…‘Œ\KkrÏbZ[×Â=·`IÑê„¦Ò‰fõ?Ž1¦š)Û£LçõèÔµÙƒ5#µØYk	AwïÂiî± cmqÅÚ“t¯ž5‚!µì=<*kÍæ`Ü†Äl@³«[ç¬ýË×u@rþÂâ?áìk¯Pi%ÈÀü²Œ7ÄTçŽE´FØ‰-µ8µLˆ6ZqÍœµç/þà¢ó×þQ/G÷ï“YÜ•f2š‰pÍEýSù#xAmGDh"1ñ™UD"ëG¬…b*ÛÚ-§(èÑ¾¢t‘hé¾‘šž±Ö`.þÖ)»–"gE»(â1ª%õcì*Uñ(þšýûx]S&d”}Ù$Çt[8>5ÅãP&V;’×m CJ±AØl[m$vzeHð?«±K-l9²øÓ$Û*RŸG&Œ5¢F˜º&Z#\Ë2í£ÓÈ–åÏ>wÖòÜë˜ÈÒBõÃæx‘ØY³àþ;^—LÄ;—w!	ýT¯+¡À*Ý «VùtIËž
8G¾l™,áDq¦šÖl¥DŽ
\a	ý¾BE„!b”yÍ°rGjù9f5à'M‰†‰}ßVúÓ×Ð)"°Im†~µ¯Haö2•"³™«ìU'ß;Ÿ˜¬Ô(•¬ú“ä]²f6%™XUdÉOTgª‰>¹§‹Û°Z#‚µfgM;§âÉ‹Ž%È»¤V«PÍ¸Å¢º°Ù<_SqÒ~Ž¾ð††bß²¦µß	Ö~õÖ[÷îqúzû‡?d|çºÖ.ˆÖž†ÍýâIÉœÓT¦e»ZHÔÐ#Ò’TµšsåŽär•
O\5ã5‹©ø´(š$G…jXì8ÀÃžÚE,ÏÂÃ,š’!ãHMs±o›¾6;6Öt	±0â$P7€3ˆm-†µÏY~ÊuYëí–µ¶ÚjëEiZ‹p[­Ù¬µ0dD±ý)Ëý²¡a¤N+JÙïd^z¸òDg–½°²ÙZ»múE³$	Z“•"MiŠAÄi•ðÑ|ŒzÌm¾o¢|È¬‹ ÐÌŸ3ÃØœÆE½“§I`°„ðD\­éá•JìÈ@Òuýã¹×á4ÖÆÏ«Ÿkà9kÖ²–îðÉPI3	–
êC8å#F5Ï”&7þç²Îýœì)‡Ñ¸ü?­’ sùCìÍÎ^{ò‡Og?ƒ–µÖk8kf¬•ÛóÙL}¾‚³–Ét«µ§‰Øò™^ÝÒÜc›”FÞhTÓ%SÉÆÿ	yÎy(Xc?Ó%Y¡+{$±NI”Ä]b‘i½ƒ?P KÆméÄKØ›9îcëÂ‚D8ûþ»3•~ŒÖ\¥ØI	O’ù=•‘M.Dî½sOÙýú§K\X0û=\5“²û·\dS›W2^¶+M‰-•™‚µªj¢²])•1%Ù·6µqPœ…Ì@úÇ¬a£’þ©³¥_¬…é"n¤š(keÜf»yª Á^^k‰ÿ€Þùó«Ì©ÊOþ ëZuµÙY®EŠ#FbXsZˆÊ Õ²0‚9mEnwpÖf¯Ï"-¯1níÒy=/½2ÄÒ% kc ×ÃfC«ØØnvÖŒ×k0ÙËÀr¼ÆÊl´‹„‹©¼IIöÝ¥§O1Ú‰ÄÄ¬ÅÉý­´-Nƒl‚µ‹?p°vpRÿß×ÏÕ«¶ÅÙGtÖjnæGz&omuõ0¬æ¬5¾ä²E5Ò´©ï!m<[¨Ù—û´ašÛˆPMßŠšÕ"d[šÂ€GRÆã8ðOŒ¤M¸ÒGVG©Ú\¥|Ò²üÝ‹W·X¸G{<ÇùeÀ¶P;"XÃSƒÕ\Œ¿—…×€8Žæ½JæÈ¡8ÐM°ÖËžÏ·	óïVä!k]Š»M¥:ø êÌåÒÜZªðaèA+XËZÁµ>€kÜ>³ÉÙüï_ŸëÓŠaíÕÖ³wîÞÙæ®Fƒ8€$«õ[1ààõ(Tò‡TØF±L5¼…øS{Qa(3´V ±TÔ Oç‡èdžQ?éŒ9E”T6d!ëDc¼u’ºó Ÿ-2Ú°×8Âvmƒ—Â$¤‹|õÅ‚µeÖt:¢,òêÕÒÌûo²\ÈA~ÅŠæ Üe›	*üN\¶«ïÏ˜•fïüÊe±ÚÚ~¼Hsä‡z+§mŸ¹ÐàIA‘ûˆ“:Áe}”@šcg”HY-$œ¶·óhç×Ü ýø×M°vê?ÖPèg)¡ B¼[•4ÿ½\°	?f?>Rå+Êl± 1vêÕºÝo•7YcËU”U«j”\®ž³Ûk®Ð€Â.{1Y¬H¸mT&[­YŽÕ¬}³±FÃ°fá"<V©Þµ]ž)Ášô˜§:ÖÔg¿¾Ûîo«­¶^:Èï}º.ZÓxJÖÂ‹MY3Fë‘9Ú¨‡L¸6hSr@‰SAà­k{­#±µF]I½b`	¯À©Ê` dåBpZˆ±ajØ;$*ÏXSRØ‚"iòžò(”ñµ¨¥1ÓÒìf4'¬°„HáÉ~±_Ù»óÖ[8k<îñÉXSK‚×ŒÔXÀiˆ
È.î#ËKÌÕÓ)þXóÐšNo“je Z”dV.Ž3õ¬7èÜè¸Ü0Â!OŸ^üøã‡'wÝµð»_}a°†½ô›cÎ\D·ñ ¹€Ò­ÙLw–ç·(§9bëØ—:ú'¬ RS×hÉ`
Iyf†¹ÙjÜæVo‰üÄÎŒJþ\í£›‹ÎÐÖeRê£W¶”lynµ@wü8î™‡zb7H­ ¡vu¼T&­•Ój´¿
¬q?7GÌœOÞæpß.Õ°¢5÷[±Ž$_í/‚·÷®MÕ·©g!ž¤22~å’>¿0©¦5ƒµÍïËuT…ßŒÌDkóRÓY›G¤x<[R‹š{ f³Öxê@¹sN³MñU¤Ýz§8¦ƒ¥ÙÁµë‹\ërñ™Ï¬.> dÄœµ&TcÑ/Â¡Ö¡ØŒPùè‚ûY³½òÝ±+x`Íòúõ¶]w°†N˜±ªá°ñ@_Ÿ³vpd«³†;':ãÉÃ05uC/±Æ—œ%v¨3X#jä©kU‹­ÅYk¡5­Z‹ ÑÍÿËÞùý6u§þbÿ€Õ^†(‰…Ò‹ÜÕ	Š<ÑÚ{,“‰‚š&ÇŽÐž c<É š~}:m'0ÔÒZg.ÊwR‰$ZµA©¬ Á$êÕ·ê¦Ø‘UÍè{¹ÊE¥™›ùöõ~>çppèÐ¼mŸŽ	‰i}Îë¼Ÿçýìk¿EûÎÀþ)©ïN¬9Åž”‰Ì}Š­(÷­õ#£5`Í™kj„³ 6 ³Îakÿ¶n€–(b5¨¡¤2òÕ¸%zB¢£ˆ=¬ÅC­Vc.Sˆˆþ« Ãÿ4„ßFazð-B<^ÿVËdÕ^
Ø^?¼«ø~_”f¹ýpZ.[=ÈIÔAdÌÃžìÇZëí‰Ä‡–üôê'»Øð¹²l¿àÑ¿ÆÿÔd`5ðÁÃvVT¿tO¾ËFoÕÙŠkø´‘…©ÖÞY[¾ýNó6C™Ì-U)|cx%êÛûø+Á–ªÏRòÄF%‚SÄ«OÍ’
%9tø*¼ðCÔ(4ê~PÔì4§aui‹%¬³LºÁ&sF©ýýïš³¶´¢ž«ÂF^*¢æb¹­H´}áúõkèw¿[X¼°©ù×õ¡%²íU¹Ï@5µ¶mÎƒAsaáÚfÍ½(ÉôÌWÛXn:c­£gZ;G»©™DŒ6Å¨¾ªº©É
MYhy\ƒ¼pÆ`¡–j [- &„Ô!Uó;_ï?ÿ3%P4’–ÝåÒ¿R”±R ij@]©k\~´–¶ÕE¥7é0ÇŽùoÀš‚!!8¥j–AaK|6-52é(r0iHûñŒ5à*ÞF'Ù™kC5óÛ¨€LœµcME7[O?yªo‡\r?Û¢6œ5Å÷·LqºÈ–tÜ ègÓ´¶eÞš±æÚŸXÂj¹±‘ê+€f´ô!Žô©q8±!\*’ÌZ#®ÜYk7âBÈkø)¨í qÄåŠ)PÆ‰s€gVÆG+ûâ¸Ÿã4
Õx Ç•÷i \¤Lb5ô¹çËÖ{å9Xóˆðw\â¥Þùâ-®IÒ±&X¡È+ŒºÖis×¾0í´2ÝdŸ©S£HjV‹å°á×ã‚lEC”éX÷Ã¶WÏéŠ˜¦šŸž\¾ó—‹SÀÖ>Ôß²¸BPISÖêùÉ\½¬ÜâLÊ’F^Ü¯ÀÇI×´ãZooŽEdƒR 4Ø£R!œmRÑh•`‘\…YØ€Zž;.<sÈ¬5–r¢’È*£Ê”&‚‰•VUù#H¦ñâùrÄÂêøï“5©.í îÓ'Æ+3©¼Ê ·³P|_ŠèîzÂ$º–©=>gs±á4“² 9"«=:¹ñ¨µ±´Â¿¶ýËéšø`º! ƒ	#a&M íÜë%~<Ý4Û r«™ØWœ¥ñpª’*KÏ•qá2É†¬M;ÞuÜxíŒfbmÈ˜èºçu_¼8:¼L¤c5ÝemÆZû µçQMe·1Ñ\¤JáH–fSM§ÓË6gMé‚ÖN½Š§6¦qk3Ð…‰–ù<©%ŒÔl´vcùÌÑïgd%U§`5d“²_òîÒûšÁý½šåkÍ˜-JƒŒ!,á´6VëÄµO¢žµ$’*ÈßRÉ”ìç í×<XóÜOéµ=ÆRùŸ¯ƒ„ÝìÉÑ$ ß	ÕØkÉ’È&yDzM™g,ÛF¬!ÛpîÚFBhv‹"cPÓ:)„Õ©±ˆõdxÝ`MÖZ2»ÝXÅXã.4Ä‰ÕÂf÷XkgÔ¤–Ö–`ÙË’Fï9,X3Ái Z?#0¹#ª„ìÉ‚µ.ß#±‚S×Zo.Ï4#µß»‡³FI¯§–#¥ƒìÇîB†û!yl½ŽÉ´¸×}('ÃþÞ=>j¨ôºA³
;l#µö*H´…n7qÖZi„ë•¡Þ¹+¤øèö3}Ù:›dŸ2Ç
CJ±ÕÂÏ I¼l¸Ðr¨diL¢AÚÛˆ©Î`Íâè'åd¥¼Fö÷‰>ÐùBPTÄHPâõÊ!ED5™(‹|ûwÿgA%Þ|­®Â‡ôÕQå›Í`¦­*Q¤Ä·$ÇÐ5J8-ìÄ÷¾óÎFè7“àþöx½=b5Ìµfóì€iµdWK~›|"Ž±Ä
²¡Ø¡Öƒ¡òÁƒòÖ\EÓ¹šBò=?8¦ô~du#ÜÓê*úIq©.:†¦£.­,Ù«ÅC.é¡ÎQMèü9&hc©ñë6_)'LNPà²4ÄDñ°®CvDgC±âQkâ4”`ÜIò@:†bk•¾%ÅÎÚþQÍ?´ý¬Y$”6ñlÂÚ»o}KËýj[U:Ð~>Mk Z,M[«¹¹ØÛF!Uà €»æ`-Ó Ö8®ð„]µôLš¦åµ kMmk…‘³ö~ÈxÕì€SŠ;Wu|f&#Á¿¬ía2ÖŠlä5Ÿ\«	ÙxÕ±f°–W°H^ŒHÄó}P…çÅ}-ªG¸G•šÍü^@ÍîdbpÄµ–ÎÒGïAk/X\Z
g§*KJ¦O/…Û‹³Óå±©Êâªò÷A¨OS°§3=§'{‡¿»æòÖ»JÆÈïÉ$ƒ)jZs#±}O•ž·nü)î±l,³ÂÇx¹fÙ]?–.g[êeSà´Œ±œfkgTe×Ó5§I‡Ü`ì¼ÈV¡4€‘¦0Åu ¶Å²KèóÊc%¥<–ò™zIV^¡:{))\„É;Vt!Lá²ª@IAœÙúÊŸˆyüâÒ±¹GÀÚ_í„‚À$BªRmk”B^:ÇéÊÃwv8™
²6$Ó VÎ–J`9B?ƒU:0©Õ™kÎ^SÊL67+ñŸÊ‚¨Š‡ÔtkqÒHp¬Žºg¤qó )â§ ’ÊÛâè(“‚G3D÷-_öG›1-o´;kºIí=koíç¬}f†ÚmÖ¸³·Á9¹ ÐºÖFå°YA¤\5eAž"¸ßêgd~Áq‚µvgÛK’ûyh¹&£N©’µdÐš‰íJa,¯ñR–`òl¢3g\$ìÕ9g{²@¸ÆœµØ2	ÔX$`fèæ`í§iíÈžEA®ÇqaÊò`ÍÈŽ÷xi­ðþÃÀÚm`{ý¯©}Íe?"ƒ4ž`%µÙkG6Ú5mZ¤î1°±B®²ÃYûæf¬©ñlî¬ñÌœ+Td/vË@1aš{žÏí¶ÒÈ˜à¬ý.)ŸŒn¨cäšIÞ®UÔ‡vXÎš@â˜õVMdÿaù [C6Æª½‚É–×dl ­‡hÈ|\Ëd{¤^Ï¿õ’=©lTQôJªµÎ<,{ uñ¬Mz÷ß=$_-1“:Ã kkŸm5Ó­G­Á´ZÇÈdþ}@º ¾<`Íj¬F}^Š©¦b‘³\HÉ×8 ð²yC&#'ˆ°- ú«¶°¨Í1ÅöÛLh<±ÌãÛ+²A^HÆøµ¥U*&JòÖ¨‚¤MfÛ"`¦´ÿº¡H›QZ˜ÿ”Æ÷«ñ¨&¶Ð`-(4mp€`«uk"5îˆÏ¿Aö4?TÇ;¹ß^ä¬yŒ,%±ìÒ`‚æM‚ U‰`µ;7nÜùðÃÏ4áñã÷Þ{ÝZ³®5Õž5‰òÐ£õ,àš!¬Ñ°N1LªNÁ#ÆâÍ Ö¨å×Å65žë¯«“¡RòêgFÍµm›ÇOŠ±–™m XcßÍT5EU‘"«hÝ6OÍ6“glƒ8äçµcí‡O~Øj=pÆZküé¹f¤r¬¶†¶Lÿ8¨‚<Ðôs±Öþ!k-Ž¹/­khC*(ŠÃ©Ì–L
XÃ^à9ûà6Z›¡"Î÷ƒ•ÿøDJ!•1ÒVÔ90ù`™†nÆ©§®¥¬_®yYÊ!9¢<O²DEë}†i³Zûm$ò…«¹ö&`QÕGd¤¾æƒ'ðÕ"\»ò˜ôK,Œ5žz|IqK€ä\woW&ñkåÅ•âÔt‰³Òöv‘yÍ
G+†b5ÒÔ‚â>N÷T¦™ŽW.wÇ†`­q‚òrQÄHkuDZy? )ÿã&5ñ›eõ³fK±+ÚëŠÔ;IäˆEf#ó‰¬",™VI`N•`Í¡
‚sdCåÝH5ÑÍ,¼ž‰Ïl‘çf}Õ™M‹ï¯j§»ùY£`ã5Úh6IÙƒòæ‡så…e<$ïË‹ºúdçñ[—vúNºBÓ÷^7WÍÁšMY#'’’æ£K_ìœŸHshç_0äŒde<«Ï!ÐŸ/ä„+rÜd£J6šÁ&¡?=åù[N¤í—Ë YYzh“Š±ÍV.tdÆ­
c'¸3Åü:Wîòåðâå|¸<×zä`Í ,éXÛÖœ³Æý™Ô±‚¢ø~#56µ¨îøåu6`5éÌø¯O…Õ”¬B…hX[Öö³öSÎÚ}Ë—”ef f„ÆRúßl²*H{NY#ˆ%x–Ð,§€#¿Ï÷™²æH­3¶?îY³¡Ø®ì‘D)5£7Çq?]Ù¯F.p‹LÈã±x†á6Ù®`-ÞÒôçú³ÑˆÁf
îªÝÒÔk»O ³Id¼výÔX(!ROvA~ýàëµ‡°†¢ªÍužFü£˜Í¤”Hx3‚Kµªyí8u²£ÖÑœÄwp ­Ü¦”d–ì"’ûwGÉ±Ì~Ì4-óXkG˜±FdFkRNË×Ý|lŒ4ðMÎ%]ÊòW[táÈ/pÙ*£zv-%—-àƒHƒ×dêç”£*N»›Ëu;gíÓ¶P¤
Ý^^“©–iÎ/añ€LjšÃL…úìÊø\¬S…>}0ö=‚ iaÆÏà ;h83…‚*óG‚‚€"Áƒ5ìy˜lIÖš5þNª#˜š¹41„pªš¼v¼~"¡´²¦µm›§¶©€^ÂÞujÀ7w8+*»#ª•ºnÑ”\`b©Ÿ;­5WŠÁÜ£×÷iYs¸vÎ|µ¹#¯¶”çÃ¡M"ZóùMÔ
n-ÍÝOæqöwˆæ?ÅÏ®ê(©ˆÖNNÀkª1üjbðìüH¦Q¯gD_:2x»aYÞP`-ÛP
§ü•)G’ÙÐ¸_O€v¤~†Rà+—‚O®ÈÒž$Aª¤ª‡(î15a"*d[»‘žå‹œ}méÈZ{aÇQOè[«™k§½¦3ÖZº‹Õ¶(ƒÜ² È¯‚ût ýŒôß’8ÈûkB5tTu¬–y–Y(˜¥6F…¬æds“Ôö,¾ûÍ²ÖP»µÁÚûäA¾ÿþªÕA¦Yj¬³Z¥[•k%º­<âF¼R¹š¥N°¦vµ"y$ÔE\C‘2yyl5Ð,ïçI€2F,_0×k ÕôÂÍÙÖ.Ùµ+Æj–yå1ÁêZÛI{™¹T–g Xy1Ìëâì"åcÓPô6ŒAO³]:£¡~–!kScSGÇ¡+T™r°vÃ~{ÁÚ[_á¸ú¬iK‰ëÚ¯äê+Ä¶’k+´íÉXÎZÁeNjíG[©±?Žò·µÚÔ°Ïr8Lo¸‰Ñ3eï¬¢®:Lkf£ñ¤Å,²À‚¬¢lwyÎ™µ¯ä»ý"+Ÿ`MÞWOb%ÅF¢2½û[¤¢eEïô‰È4¸‚]ßÁJÜ9å_WÎ=–w‰­ë£÷_AüØlò«Ç††ÎïW],
öB8=d>/ÑýÉp…ä2Á|£±šê…@CcpÓª}D’èÊöƒé—/CdíÓla‚ÜØâß*7ÍˆlE“È‚;ƒ1˜«œ¹¸¾Œ³¶ìœ5©×¸ÿØZ3ÝˆzÖìÆ]°æ–sœr_ÜÆº|™StåA¯½yâÄøQ¢ûOýæÈ´&Þ2X{‰³¦ÝÎxzÖœŽÚ,ì„ÕÜ–zÕNé+æ¶½JÏ1#ÎM;Óá¬ÅßíÝ¿x¿Á¢úñh-pÓ²Ës¿æ©Ÿ†µ#»Ãï°MÜã:×öÍ±¯$Oà½áªáM­‰ÂDŽ¸$H–R<Z­MëÄj"°„×€²ÈWÓ=¶ÖÜ×ž/‚ü†›p­5J¬`MÿÜü»Cjs¬â¨~SÜ~g_áùÝ×ú±×œ±g0Çž{Žõ‹+!‡­èqïÞ½{Ç…¨G°Ô,^*Ã;ËùIƒ5Íf¬yòÐrý“,pÖxîN¯A28[ÃÖÜÀ~/ÃØ2)Ëg’çq½ˆØÈq´\*r™"tÈr]¨`‘Ái/€j/2ÖÐÖÆòÖF£Ñl5Š³az^³½J5ù9>pB²ÄÆ*[+…|®Z²”¯n5?3àÛ6ú»B’=ˆe¤~/ËG„‚è•S_àºÏ †<ØŒE¬†I®Y¦o#È®2ûÖêv‘«nôÜ^xûZ-¬)šx±‘^ÎØXd†T‘dMy‹×®m^û‚.%fù†ÅÍkTî_(Ä]©aMù'|Œù·Ï£wðQ«¹€@MéJ~àæš'çRNŒ3´9AXˆ¥m6‡Z[p?Ãl_~yãCºÖ®ŠhX;ylè¬¸wÍC#ºÊ¥v·´S!`òCÈD+4VQ ¡j20¡:ZÖHÚ
\k%µ$S†º(´+RÓÆi(¶Ü3³,ž¹Í¦ƒ5=ØÑ*êWkj%R;ËiÙYÙi¬ñ«ÞÜÚrÈ-¶åb[-ª‚„Ô&¬TAè@ú¹ÖA¢hÒÚ}œ†+ƒÎ¤d£Y$¹Ô@²O¶„ŸIGÎZÚÚ³êåþæ“ŽDÈ¶:È÷¹ºG—88ZŠ˜–-–i/‘ÑW„ÔÛÏÖ2ÍjåRJ´ÆÅÖR¹TT¾c6Ë¡Í2pZt$'ðÂó`
v¥î</äªîþÌY›»º‚ä¢4ÈKÐÚcZÖâ©Ø4±Q»G;“³wÌðººª¤7×f‹«+\§U€Xyj
" Þnv:]…Öz*_#HŒïŠ±×Ö¿ûÛ;7\(WAßz|Žš•Ž1j¹· AåËÊJ>‡»¶o«š6Ùi„‰°{zšUW$šÕ¸¡±q±Z¥|U4T¬ÌËMcÄÊ9ß?£)|CË2œV­Fý^,¨“2wNæú¼œ¢gc4‡Éyã¬Ï²Z4‰6Â^SÒ@ßjvQ­"åÍ‹~w*kÓrG8»È0ï¨~ÞÙù×¿N¾þ ±4gÍdÖZëÉÎÎÄ qÌ)âb$ëKDœ“5VÔ“È”Ÿ4§V´z\H¯êÇ†çd­¥ªJ©´šN7ËD„VK¬±ïk-	Ý¦iÓmvùç«övÝ›­Þ¾xqcùâM±šîmUÎV»Ô™ÉÝäæ¬Y¤óÖØT¤j 7îí/Ó©6Œ½f¬¦<Hþ»91þê©ßœçÇxY™+ƒ|©³Öáo¬QÖ(ÍÄŒ¦Î5o°åø¿ñ+âF^ý^VÞ÷g¢k‰’ž5îuû‘Zò2ç¬!Ñ˜­;1Œç÷!3^Ù)…í“ÁïL6#5Ž”@Pfn‹¥¡MlÀñÌn¿ª ‘£´ÄOÓªÖhY3ZCòÌb`¦Å¨öü¤5½,vÖ¨éöõ=‹t¤M?ŠøÌ2CŽkg|9xcC¬§X³ôöh‚¢¬ÜëP´N@ÍØ­mÔÚÞalÄQÙkÖ`5dj<’¬lPÿÈ-OÛ+ð[Ý›<œÏøÀZùrÖò°ŸŸ‡<m
!e¤éL¿P?ÔûJ6+S?ïwéÚ_B*ÏVÈˆÕ?V¼_ÊV{iËÚíµÅ‹ÕZ«[4\hÊ×W‘ñ°Ò€žVOm1H‘k/Qû®wÀZXª‘öágŒ= _Ió…¥¥ŒJú8ü`—¹”GYF˜I«_"€ÄÊþÄjDDŠ‹ZZ­©\RQo_ëæ¬…×V™"½x»ÄËÐð¶}aáB­°´
Ôñê0 oê$TÒcÓÕ¸zðÃdi¤Ëå²Ock#<Û	kb5ôÍñ³½¹æœ¥€HÔ,º€=1P`…sÅU,g\Ý|úñçŸ|þùÖMÂû)„ts±kÉØ_}…»æˆÍ4‘44¢€Þì”d°¶6æÁS˜VÓ y/³¼>”…Ž‘°`­DØlW«ÅƒÒäŒZ ¿QÔæ .ÚŠ6½àÇZzqÇÇKc5õ«D8ÁC‹ÕZ‰pÕhØØ’¾;¨‚<ÐôsªƒL¬5K„”¿&VC™á¾¾G%z Á)#Ù¾l¶à¹p7XW(”ÿ›ÑZRÙn­!«ä<Ögf©¢ªÂqÌ¥œüß'^¤XRþ Ãöt*¿Vô4Ùp6Z­
ðUËV¬çåÙSëTÖššd"IùîH©ÖFñ?¹ü<N ¨sÀ®šÓ_?¢‹íñãGÀÚ™XYéîÍ•êU¸du‘¿ZÓ‹ÓÓÀçøãS•É½Oy²ûÇÇ¦È«˜uMÏÌL¯÷íòò77k$-«Áà£÷~ùÁ§qä­þó–zÝß_É›±ÖƒƒÖ)C:XSwNÂ3K‚¬°ª¨\Rä–Ó³³ÓÊeËc­Uà6…$*lÄš¸d±•yˆÖXÆsËò9~ŸjwÞ
g‹†oô…¸	X+õñÎRYê“[Il~A±h„a‹yhl
	ÐlÚ	œËŽ]¹òhðäã„Õþ
¬iäo²œÍ«­•ôÎù4Ê–t: üuR´ëâ…t€uÊsAè¥ºAÈPE¯c 8¨îeûòcUŸHÈÑó6!¡fÂjkâ1-”ÉBÂR³5“¢À$Aƒ²ó££Ý£sk¨ÍX{iÓZl­Ý°è~î£=£l™½Yk›£ÄkÇG!5ÝÙQnÿØ›§NMOCjÒ©£3‚µ—:k¬öqì¬¢®QúEÄjoXÖw¤- ŽÌ<^§¿<éWKÔá¬í;g­ƒÔ>×=*ƒt#d‰tª-RIþ¿Iè	õý¡Í=(„&´™kÉ®Qíè®¶¶{Bµ=7ùZbË¾Ëý‡pï=½ÚÖ¸s3XKzÖ’¦5ÑZ„j_G¬ödƒðÏuÌ®=ëT‹büá4šØä±Å–Šú×xìòãõ'2ÂPòGÈ‚}Æ¯ÓƒGlí°¶1¼wø8±ïA„÷ú¥XM’Ã–ÈáAæëPÌ&ËÍ ñ!4ºkµæ¹ *©Í–ßÖu¨0’õˆh”±ær½]4êÆÑ´½ö¤ÐrúOf+Yhä¥°FÌ:WcHóhz˜:\‰av);RPˆ‘Ï¬±b@˜;rs>%NóÌÏà¦·°%‡- ï£àˆ©#«ˆ¨
¿¡D‘pc¡$žŽgæ')Æ0[]â¤),ZØˆë×Ò`l3úpƒ\!TD	ÖßA3¢±˜ÄrÌÁæ±u!Äj[¤§KÍj§j%êô¯oz~1Ìh<h1,XxÈà±}ŒµxÆÚ±A¿Ðl
D÷Ïf&]«´µM1°àKˆ'e¨«<ýäæÓnn=øøc¦bßÖ>ŒçbÇuÀÚÐYhÅ «³ˆ_›@É´d…‹lZ°¦˜fJn.XËY!$n¥Å-Pñ(…“úF¸úÚ¨ÕŠ¼ÿiXÒ2Xc[!“„kÈAÙÓÙxk0V
™æðÿ²Ž5ÁÚÓ&°¦ß<ŠÑ’ØQäykH™ýkÜª t ýÜê ÿÓZŒj÷)ƒ\¶skXfìŠ5ŠIÀZ#Kw²`M´¦•Âºèq¨ýùç×ö·ÖBµ6¹`Y¬e‹³D4ºb©»¾Ú JÐeéðž¥­ÂúÏjcØV;6[žï3¬sçnW³ªš”=ä`­OÈnü¾µ«q¶õÎ¹s¹_ÑÀfÆb[ð…«Ð3X£ïÖJ]ý¹iKîD5)¢žJ¥<Ã¨êÙÓd@NiLµÊ ©Z¼è~wçÛ3ãëJ„äÈ*Z»tZûôY$°vëÖ?ñòT)õæ*§OWà¼}e'$ÖbMÊU«P„¤JH`Ø°°þÅŒ¾fG°f pÓÅ–ƒb0eq°Dâ5÷Èñ¦¹ýâ¬kHcô€Šˆ 4ÒÛ˜õ.ÔBŸûÙ™.3{ oK]íeóœœßÙÙùàØ#fª½þï­u«!Áš|ÌÇCXoxk+ÁP“°Í°¤1œÑ»Qe£äÒ¸ë>u[ŒÉÍ’	—-„
”ÆÜîr‰àÿÌ^˜t¿‚<ÄHÐY,QuT©õXeZ›Èµ±
‹ò´Ñ¥ùâFV½FÍåË7c­ÃZëHƒÔ"’Œµ-s÷æ„mèwÁÚœhB|vdCëTèysüÄ‰é
 ôÄÔÔ	×³¦AÙkPÏËzÖØì$&ÁÚ©£¤J~ÿ*Æ\&Tû­Kò—ØÃgûÅ÷ßÃh.Y„˜Ö.^lwÖ”0"ý4­%¼ÆR°¶žµÁ˜"!_Rý(,6Ö ´½þ#{ýqÛ^3ò<­%ýjf³ñ¶›"¸½¨E¹jÈÐ:amÙÈ+6VÉ°5$PKÜ5{Ò^”´«E´ö§‡·‰79|E~šŒ6>¢9—V™TBe–ûØÏT8&b> á7p¿r[v¦ŒÌEQ$Ä¾7|Ï›dNÁáI–ýXžì¡ÃU°fÝlƒÍó™]÷Uéa¡‘/bfšUDzœ†T©ÁØ|)ëõ"ã³.—áÈ±N>\ ‚2S¹ÊÀóÆš6;Ã W(v¼æœÇ¼3ÛKuŽÚbÍaÇ“÷Ç–Z™.øXñ²|I²,*>%ŠÛªxH”ÏBoõ4°¦H‘ÁŒEì“’…:†F,N0SÂ	‚*+Á©M×–X^ µ?¤þ k,6æŠèÐ­à)ñ·,lêo\ ^’o9˜&‘yk¾_¼výz­\ûwY`MÓeèc£YÍ2DpÐ"XK¬FÙj†ksÙAÎê!õ&Ò·eðFú>ÔáNë‡›­ÛƒMŽ¦ÐŒœ5.ðj°Æ<;`í<–äá²FF†¾âíÔÛ"cÍèIGQ?R™˜‰š
˜§ð.#²¤H½\ièMä×ÖFð;myÑ¯¯®ØTl¬ñf±‡XDö—vŸëZ‹§_K¶N`Íóh7ÖŒÕ¬¡›Î¬Ól5¾¡Ôl2Û¼µ'ÜLªTËÚ·ª‚<î?ÐôóÑªµÓšáÚè¨ÆV‰½Æc5XkuR†iš«¹$f, §Ÿ'ÞZ{ÆHk‹0ºÆTÑP…ERE|¥=RXäkµº 5É§ÓÙ÷Uc#²KÚÊºÃy©
¤y€Y‘+ò0Ä¸B,Èî`MFÛpsî‘­·.	Öh©® z«~§	Õ`‰	Êþ³]œ×T8r#†£€ƒkŽ³c2žŠ¤ B]ŒZÃh›ÕÆ­`±B	äÓ?ÿùÛ7Çî?5gZã4Ÿ¿‚ åØZãÀ[ËE3ÖJÓX{”Õ¯¸‘Ört­¹ÙÎº¶]a›%aý“•C]eÍÃžåQq]\
õ—OÁðM”6›-'&ãeJîH\*Fi¾kæNV™ª–cG¯Q!$5;â]®…õt¦´¸°][¬“6CÚP_kg¾1qîÑoçcMÄ††_×©
›ÀFæùóW¯ÂÄR}$Mý­€U
’ÂL_¾6;[³¦Íhmø4PðS•¸LˆÙH–ø`-¶J-ðjÖ¯Á«„Õ\Ãžœ4Vx bµñ£'rÆ¼H¾/±¦>òÃw/Âjs5ûj/HîïHƒDÎXÛ‚Ðæî?dÅ½¥wuªi¾3¸æŠ /Ã4­MMrªL·cÏiCžš?­¯u:kUˆE[ÏšòøO=úßã°~šˆÍv^}“HúãSÐ›®vñþr§³Öé­%÷Î9kŸ»2È}jÑþ±¹­Å¬¶·ká»Â·×þ­ßRûõ¸Ÿ$À–DŒ˜XóUJyÅ"%ˆÐä«¡—†O®}óXMÉ-ã©Ø	©ÙTC¼ÒýoÔœŽ*„rÏþ~Øâ©k£QÌ£ÌÈ0ÛÅ,d,6ÖtuüöCýZö"¾Û‘bkE¾Z»p÷ßÞåšÎabúñÐýh6ëÉm.Á_{¹¼ï&«úW‡Õ°Ó49ÛÓ“PšÆ­iÞ9ûá(>…tåªˆqÈ|5c5{ÂèËßMyDÞ}‰³&\ÛXóºþ³tk~hiÔRMF!Ès{'´,)ËYôL\ÃñS5
óçá‰8Ø›2¨ŽÑ†£?‡&ÎàÊNÏ˜d^ûz° ÜlèâJÚbGà´¥	Åûk
v i|Ë$YÜæ°¤7®%22€˜ÛúHM´¶]
ë
æo+0R¾ööB¸²ùö¦È±È‹Í¶Yk41ÖðÕ¨yl£VÄsôV9Ð´·ä\³ÖJžóØ²Z¦h.€Ö
v€{úñV_ªõR»#ZÖ~åæwÒ³f°vìäYd	þ¦‘4¿Z&³„û5”æ;ºÄÆ®kâIªÐ\SQ†¤B]Ã‰öq3¹ÌJ™WN=RyeïÁŒ4¥‹C`]{G•èRP©&6-cýœ’ÀþNcíÖ~Æš‹¾| 3WÛwÓC´¬I­H[-Yjz¬TAè@úYé¿üã[ÝLqä(uÀ`­¦i¹Àº bãžuW9ŽP©œ74Ðü!¢µöak	¬é&3Ggjò«JYßŽxyŽye$È*íkì”80?›êñ2ŒœEÚÂaÓÏ»æõåñ\4Ì…ÊBŠ{Ø$²FpÛZïüþWR»D1Þ¥s°°&ÉYcO¬¦Žµ«—šêùš]ÕÐ£àOEÄ—þøÇ‰ùzPä\¿¼ˆD”í*mƒãÓä‹œ¦ËL¡iËß~÷·¿Ý_ÿËŸoÜ¹ÃÈ:øþµùõ'Äj‚µ•|o~%Ï°£\uzjêt¤÷BYìc,ÈMa"zB&“M]l¼F¯eZX†©¤ÀC½B7ª*{¼ ²¶%W*Ê*ÊY}$Þ~`“ßª›™U)——ÉéeU•dÖf_jDF…?4“(û: ©0±3˜y²“^Ú¹tîØGÆÀkŒÄv1#W4&BÈKï<j0k¶9¯ÉF1’.£8ÆÉXÑYD¶Qòh¥àì!›M0tÅ“šà Kž'SMdÄ&µk8¬U­’½g9Ò°èxo ¨wß½<Œµ¶|ñ'œµ¶8Hñš«‚ü_
Öt{çÑCæf™±†®-¬-sš-o	ØŽ¯ŸøõoOž>=55~fê„EXv¿`íãg­]<Õ™ùæŒ`mgMrfKn,MÊõ'Wä{÷…7ßÝ£-ßg!}“ÌY{¡±ögm­ÓW{ƒkû×CZ(d§¢¦²Ã»°Ú˜GèÓÏN„bë{{¤=Ê}vr-`ŽÛs«uÌª~r$!¾Ãb?² )‡Œ´ÿîu¨K·86„µXT#_ÄtÉ­xÂkÚœ5»=ùúëÌ2ÀLms£B4g­c´9¦ˆÅ°¶÷Ú.g`{??àîÜœý‚öÅ½þÝ¤ ò™b`‹ñæñ~½#0ŸHk–/¢ÒEÀ3˜ÍÆb×½žþœo9döç%KîÏù¨,ßcsD<*%{3Yk>ó&}ÂûÈ(^ÐŠ3?°÷QÎì}ÜMU~ùißÝOï:@áÞ1Vk}öÙòt³%`	hjPú'ˆâ€KÆ=fS•¬‘Y²KrZ—ï.Cû¬à T¢å,ˆ¢35Ò“fðQ¬ùìaáµ¥eõ¤ù
ð2OÕ#V‘š´ÆãÖ„Â!—D.¹b/ó'k–Íhl¥'¤ØZÜ†Æ.Ô²Å(ÖGT‡ÉeÄ`^‘ÁkÅòük¬6©4hRyòu©ÔèæÓSØiˆWèá•ªþL`ƒ[ÖåC h“Ó8¼ñ«?øøæ —‘¶>þ˜Vè/•0òÅ¯tP“±­¼;”Àë¯¾©£”6RWj“®¢.%ƒµzÆº‹»zçÂ_Á°t<%ó[CÁ#ŽµtQ{a:Žá·#¼qÉaYk'Ùˆd$Ñ¨¬ík¬Å¾ÚxKm"Ê+‰€M”Ö´BH3Õ¯!K°>¨‚<ÐôóÌƒT×¬öÄUBn˜
£L€A2¥è‚Ž¤ÏìÕíãÕ°¼¨‘•³ßüáÅ…‚µ?¼ÿ‡Â’gjÅèÖÊEÏ¯]ßœ™5‘“c_À3ÉáL¡ÎY¥(=¾L·§ù8i*Ž´Æ*OèÖGR‰UùIí÷¢€OQl·(IüÕÿ½º£ô~Á‘ýÜyÀè_cÖ6š~†dé!Ø/5/(Vl±.ýÑæóÔÆ¦‹««})(=œŸ:­Þ2§ÊØå|wñôñ¿Ü¹CÐò‡H´¦‘cüç¿Ÿ?;Ïï¯ë•°”r¥€ø|Ÿ—Àš]“žkY«h‡ó1¹l<­ñ(S
)l­MWój`#6±Â`ìªYk¤¹U>§2Gyl®<Ò•DÊšb‡=¾*>*	×`hÍ,gÇãýÆ_KQ7T¬æ8Âwsñ™Ì´0_
Ÿ½3?qžAkøj’ÁÚ_ßÖ¢<HÞfr85j­P,nì<¡wDµ«…”Z$êÀÚ¢"ÇRD”éüA”¨{L­,ÖÕçW=e@š¹–wPn”¦_ÀÒ £þXliDøŒ²W\Îˆiœ·bä;c |f7òÌå0\æd`ãb’	¨ñøÉž5’5ªén•o®’­å8‹}X¹"zè>v‚òÙ©qj!ÇÎŒŸzu&*ƒ¼¼Ï÷Xlñìã oÜÿ×u#Q$d´F¶ÈÌ/Ìq{Ã¾DdRéVg¶žsÖ^Ø´Æf¢gIÿŸìko MÇ6±jŸ¹f·?<õï‰Õþ'¥8’»˜’*ä¦<7m%‘,­z°¿_à¼ì’Lb\vä°YkGúÙ§ÂRÛ5±šÃµÕ¸;+­ÝY‹Â ¹ÛŸp ÆÝÄdë¨OMÕ¬¶î&ªµÅ£à¬¢p§Í…{íðú(/0@³Ä!ëÀ[7Lã¾o$%GúÛ°mmR“Ôúµ!?Í¥‹ä?k=^XÃPË‘Ùßcb¤?ÊSy¸§;­—X?¯ÔG’DÔ­æ«¨=«	k>{”<ðaÊçÍdì¬U¦Yçº?½›º{·o8I(¥ÖöpâÁg_~Ö,6T#’äÈá"“HCPÌ8ëN‚FÖ™³ák	d,ßg=ÈÇzˆ—ƒýÆP3¶¶¹ L«û^PU§X"à¶¥V­4FÒÐYú,ÃÖ–ÎÛˆlHL€pšrG ¯y¤„È°FI#cÕVæWðøIë_]]¸p]ù!¥ì’Æ…¨¬.í¯¢Í¬_»v6¶/œaöÚæýk›×/Ô6Ž:æ&¬u¼H­±äý r eI±¥’Õ µƒ5ÙèëPÆÈÍ­&uvL¡\CµõÁjkÖ¶&s-ÖÄWCš€’MÓ©`4»’£ò^‰bG
#p¡å„h®^!Vk[KüDiÄoÄ6PÑ*m“îI[ñ£™¬öÑÖl¡¤oÍzÙájÞB°¦t‘¤c­5!c­íû‘Úß¢iZ[kjÜ/KmH4€í 
ò@:ÐÏ®’»Óš	fÛˆ%R“Tò80âŠ8ì3;5€µVðuýZ³¢{Ykí´Ön­	×³ÙÚææv¸=£©9ÚÂiMCŠœåjEå‹´Ë÷ 5ìãlÞ@¸@Âl‘Hå`šÚ×¼2ÄŸØÃ'·9Æ‘Î/á¬]¬q3d«9X»TÈå”µâãå-ÔêõbhëÅú|Ú×‰U«,ë™CœÝœV˜àTUjõ8=]ùö»û=ë[W¯á­/Ì†¬=kÛúöVßŸ,lôÂ"Hâ×T^©,‘çZÖ”ž±[.â·2ªTèG›¬a¬©›¤2†OæUùj¾"Ž‹Ë Iyt“°ÙÅ¶ºÕfxw«2/#µ†ip‚—' Xå]ÀL¦ÎYM©*Z.Üé
—vÍKXg¤ÆÝôÞ3gí±ìÌKW¿¸ú¨P[W¯>ùSÈ_EÏ¢ìQ­ZlÑLÀE½XãœMÁi)þ¶í*?ˆŸÑ°s>D›xîÈs¹ºN7m)#lffx£l¶Å‹ðˆŒ·\QoÁÞ·éj¸³v1´9kÜ÷qÖ$¶Úò Ÿ…÷;gÍîpU„nÈúÕê/r°6”é1>ub¼<>nd¯"ð)Šî¹³&\k“9k„ñ[ã/b_M‡lQä÷äú¿¡PHhÕ›ïªsÍQÚ»gþß»ü‘³}±Ø¯ò…ÎšAÞZ[+ÛšôkníÁÜ^k{»ˆâG+…tñŽˆ’ÍšAo1²<ÒÞG-»ª~ÔlQš«ƒTÆˆ´?«½¶,Tãán†kFk¿çf –d÷ë†ì%ÏÛj‘Ön­¨ÍiÁ&s¯ïXgq!¤“* ×ÙW
.ÛÃ9ƒ5XmoïÈauàAlTtFÙ"¶ê 6^À+æÄ~‚4|2‹‚Ä½šD=+‚¶¬å±Ûxé•R$Èö
†ý[WOXëõ2Ò£0±Ô£FF£íd7R©ô±)úH°vVNÚÙ»Ù,kèD7§ç« oÏÍµ>ûòËÏ†VÓ`Ÿ©ÖEˆz‚I‹—¡¨3Ÿ=,btÍzÈßë§x%.û€ø&ôTü ézN YÎØ`ÀTZlP_d§ÆÞà`cûÂöJÁÁ¶<HWÑ¾¢‡îó¼¡@:øÿìïow¾ï¯îýÎÃA,DäÉFuŠ"{gd²Ô”Œ¡;AÆ×ÄM–+zz»œð£DÝRBkW½GJMÒÀªMoV¥•€äð`µD¹Û¨êÑ>;«¬©ûäH÷Ñyp_ïÏw†Áu¢Ýû¿=žMpLëñËïÏçý©O[6äüU‘e`m–ÈÓDˆð4²­ÁìÚE`Œj
°Í…+C³§#²þe«•˜7R±éÒ¥èèÃ›“ÆšdZ;‰pÖ ÐºŸI$*Ub¾èÄÚÇ.[¤dÈ+¿~ÿêÀäã+þ®Î(¯]×Xlûk€5éè3°vôèÑƒ—Ûj0ZMýyFk 1†Æ#¿= +þÖ„gEMŒyç¥ÛœgPäªL‰‹JÜ±!^Úþ\£aÕ`ÍÆ)­ƒLç­¥èÖVÙ2Xkmk¬=I:Öôç¸°E«°°F¤é¶¬5X»·xÍ9k?tµ®ºêêù
ï7RcuC°vw¥¬¶ººìPM@6ÔÏžì«ŠÈôÓ¬zÅD‘c…ú7˜µö›ŽBÈ6kíWÍÜœ×ÆˆÔÊÖT7ÔQ)ðë.òÜ¬Æ)ï+‚r¤¸×Jå$¡¢Ie÷›òžR'èUS•¯'kXL3‹|ÒúÔtŽÐô‘š.†l(Wì	8qª“.€fJšÞÓœš
Gülƒ¹h–7¢ÎÈ·Eª"«ÇÕ(®ƒÕT¿ÖFg¾zð°†Þµ¹8ïÐ´¬ü—W
»¶WÛ hU*“64òÖàjñÕ·@'jC«í ãüZ•ÝªƒµÕ¸äÕÔ¦â»ÊÇÔØÇ+…ð¨¦-»Ÿ×M/jø-[C qm¾5Â÷åJ§é.£»$ÊÒÇÞsÉ?KqýÂÑì:6âCç¬½g fEZÈyOc±¬•kÅõõÕå¦ÕÊ¹Œ,<_°j
v™¯Ä3¥ºÚQ"†å”Ù]ÃÕ¸ß&õÓÅñ"ÆŒûðvølÇñòðJ¸N¿aÁZLq`+¿ô„3ãf– \ÌÉ9Â #`¥Y[;k©·&¥Îš}RWöŸ<6]&R˜¹²oÉAž8<qvOöÀ(Ô&X;vŒ"Åitÿöi?vÖ’2H£½7äžÑÿlËš‹ÁJ£Ròiÿ„¿Æ_hh•ì~‡Ë÷¬%†Ý6sÖ:Io-)ƒL<3ýOÓ£°íæöÖÔñŠFÛ³äøp3g*ûPš5©1Ú`í¾«44cÍ¼41b¤ÆªÓXã6«³w!5ášCµ¯©=ë¬9‹« ][›)¶Ö}{÷›Û&ë'bD¼fqþ“°n[Òcgù!/Y¿"+#"7'ƒ8`Mj„ÆÝˆ)%¶Cd°¨’)kà˜HM’«ÆþîÈ¦ü~kY+ølH„ÕÀ8‘h¦¹kyïBFzÔ„‘ûH1$o=oè2ÖzÕ”fã×òE¤ô~î5ÑÌ*X»éÀäf¿ÁšÈU'¬=¼.=œÊb€AxT0ŒÀ¤ùŽŽ:¡	b3ßÓ­¬X’¿¹k€ ïmòâ
õ©…LydÃý@‰ŽõÙ¦Ø`~ðªW°Àg9µ€eYà€‚KjÐš’­8È…~5%* Ö÷È»:æÐvšŸ6?ËVÝÔ¤´šølÀ MÈÖÛ]<¼I@äÊÊ4’Êæ©í¸ÿCýÒüæI5h
k€°vò€"y(Ðw‘îW´+ÊÀ¯Ù,„uÜzÿ×W6WkW€5Âœ$#ËÁšhÍ*!¥'XH9uùòÁ\ŽÈƒ­y>ã‚ZÊ›!¯fšNªjYkRX/ ™!0gðÐÏõÏGˆ™®TÆybEþ­r6[«Tº?Å6ÖlÛ!N7’ÜþWARmÑ6[k®òQÉ®åök¬°ÕX€5±ÖZ\Ù5Öºêª«ç­ò¡šƒµ§zÖ²,ØiY`-g=ÈœÈúÍ €Ø‰œ½»Ý²ï<†Ö:!a•„Öæ?€Ö0rT§–G&Ž rF4p9ðU'’²Z‰wUÊð1½ÌíZ‰^F'=¸ÂÄPì8xPó ÉçæðÌµ[·ÎœyíÌúƒ5X‚:HGiÆlNÜ•í…:CŒ) §ZY+ÀÚüH!œ­P 	¼±¢kLŸg¸ôÀRÆSDWŒŒØ{øþÒÜÙ·ÎÞ{ðùç_|ñ¹‹ZÖßH;øåý§Ndãñƒi¼ØküéÂ¶ÄÆÏwß_¦#Üâ¸©ZUÎHÕáÂùå§.êG3©ùUÑØŽ^£3ÒB(U\¿¾®©)62.}ÔëÇaö=eŒ¢"…0öŽWkà0WEõ™áœÕ|mZÓv×Ï}zîàÑÖ 5ôª×Ì\S±é9…÷®æ¬ž‰?[«å£µRT­ÕFQn…*ÐÑ¤¥<3õôw4ÈóÌÔ}ÇÕü4˜Í]ùýk¤ªÁ”VÈÈÈZ‚?"g?m^fJ3‚=0¥2Æö,0µõ¬µEŒØ”µ­5Œµ¸gí¶®+O‡bëC9¸f¾ÈÒK‡fPufbxô,;ÃGF5[-k‚µÃ£xc?vÖ¶
éŒƒ¼2§äé;ùh\O•É%û«gíE8Îâû¿s•Ú‰a-	ƒŒ­]ÛâF\0bÅí´—±Þ®EMaÿ[	_L‹ÁÔ¦C–@1È%ìç¢7á°x-é3CÍzÕÔ†”É²…¯&Vs¸–6®ÅþjYkëY®Ù¬l9kid¢Oî~»,>‹‡`OÞ¾¿ª!Ã-¶d€÷îMYg‚2x‹g·)Ôäl¾²yHN!»î·å~yj‰jÉEûD?j›€Ù.üMPšhŒ³ÕBŸ5×FèKXk¸h‚5Í^ó5|­Qµá¬åà¶"F(d¿‡È	Ä\ïŽž¥J‚n¹@ 'áÜ{+Áö@’”ÐœÛÓk'oC)'Ù.·Š“f` '‡÷Ô¨¡‚‰^L´ ×2T³ûcãÀZ%½¨è¢Ì¹ c_ÉŒa -©>“¨B%†ÅyÍê¬—šó
ðoV UÈ·†$-2?ÅxµlqQÈ E‡a¶Y€.Ë‚õ$×f”é¶vñ"ø¨THRý¹ƒ#
øÇgSác•Bÿ7)
¹46=Ís‚°Q.ŸÖÄi¹t‘Î ³Õ¨«¡kËüF>°æàÌ6ÖÅÖ/Ú±Úº›W)¼zã1¤&VûŒ—3¡5Áš´ÿþS§öÖˆÖNà«ÔG/lŠˆçÕØp¹ýpžÇXôG‘/Y)_¨Áp­¡"¯M¤óz™Â×Hý-’þƒ¢}ìgÑ6A´”ÖNh@Û‰ôíÐÈIcMÚÊX“«¶œ™Æ‚ý(‚|*Ë¼½ˆî¹Ž5Œµn¼HW]uõœÖAÞ½‡”/ò¬³F¤zPj?2œ¢ m˜‹za€¹ÖR$îíÝÍÅ¸míJg!¤ó”>@ÓœïÕW k–öU¯”Ç.©ÌÑÂ›mA:©I©d‘¥q.°ÆÆS®¼0Âfˆ¡Šh­·°¢,_?­)òSc'“(MË{BÂkŒÆ&Ù°¨v4T«0»'ßlRñ?Ïs[›Æhãt5”		Öô‰…„ksàðAþDøÏœ½wç¨«}nÃÖTùžÚÁož˜²ìþÄV+GD€Z™ÕVJ
ÓIkRa´šÀS°Á4x ³¶5X­§*Dóªã.u“M=j;x”¿ïb³‘òH-ïwš®õQ
³õú¥‚¥‹€i¾¢!}¿¤úÂrX#ªS±ß‘O»ˆ’ž‡Hˆ´HÈ¡¡£Ö/\8µNgšå‹¼šÀ™¯Zvÿ#ykŸR-9é—èT¤f'¯$\+5BRükãl½}Ê1ke¥òE•eË<kþ¸EŸ$íx‚Ó
ŠÙ³’–BV
ÎhKaÍ°¢0£\ 6i ÝD‰ŸKDB
Ö¶(‚„Ò:Y¥=kæ¤¹:ÈÅEÁ©rÒ†bÏÙî/÷!ëY3=;s /Mþ/#X; <}µ…£õ÷8k$÷#gÒ‰ÒX	ÔR½L¤Ó^ôÆŸÄhúëä¯0âœ5ÖœÆÒÙ–H	¬˜=Sëˆ´2Pãx‡b„Û¾síÑùý¯Üß$fÿImk&Ëèßóú&i".î±C‘œ$w'CµÅ&Në€5î„Õ 5‡j¬á¯gÓûÎR¥E< 1Ö+g¬}ûÉ·Ë·jª\Ä›²Ãï‡–DðnÆÀ}ÐlÓ=Y%ƒ,-mò»íva—Iª¥Ýkv›VˆµSj¬ñª|y_|vÿ¥]"5~kade´&X	že¬´Y\?²)µß=ŸƒÌÄö  BßÃ»<òDˆP¢ô˜HHŽ×Ô¿¯Í··%µ±!cµÑñþ›TBz'ÌUc…ØAIËÚu¤õChmqa>³ŠÒïËd±µÈYÊôz´ƒeØ_½£W*uÎN*Œß¬c.#àÒ€'rÐZ®ÄAM?+—I!]ž÷é&ÎZsp>7õq³5ŠScŽdç)X}¸ 9mf°aQC(kOasm‡nìÒ¥’ÂiqÛ.þó¥Ü5è-"Á„î.À'š&^„wÄ0Tñ&ík—&¬2þí;ƒû5™j\µÐÂ·–"lVïÈ–áOSgoã1 £,È+Æj×¯ŸáõL­µ›ÈPM;0ÒOÓ×fc“êŸoù8@V³ºød«5	viä‡M„ó‡Êm!ƒÃ’é4úKCÎÃÀš¶<XÆw²œÎJvÑé‹–Ô@K¼¶gHZ§2VÛÆX»’ÀÚÁqž$SM˜´n5®Z/:X»†¹f¬öàF·
²«®ºzþê ±Ö¸Ü¸'Y¤­–cMe™‚íÄ7®r1pËó6NK@‹×$Ê/«bx¾MÛÖ”ßŸB&ÖÚØTQ0¡µ²% ¯Œ]dºM©¬ïXÓ
HÒÇŠXÍó°[tD3º€5¯$xë“¼’ÈÃ³î¾;$X³éÎÞµ3¯½¦*È[˜?’zÔä®®1®Yy{´Î¬µƒPò8!;òEÊG”ÐL`?ÑÎd¢är^.ðˆ6yˆ¯¢ŒU«îzéÆk°Ú;„-›·váä9!9¯þRÂÈ¼XÍ/”ùÉ…B¹¼¬i©©g'Õ.µŒ8fÄ@Šè¬ó
L¬6\¥îÑì¤ª×»ÃÕby>+Rà<oG¯Çƒ2“l6¿¯2FÂ‹r<pÙ€ÜÒôxYÓêÊÜ?vi¬TÓ]®)£-Ÿ×x5Î­êR¡5´3¼xÖªi/'x*Z#käø½÷>}çÂ9:•Y‚÷†ÔEŸi‚‹ø·«Û'„/¹em—eòù¾9ª¥ºþiÛŸÀkÝ?yë[3>U¢ø††«I"¶lGÕ±i%}Tó¬À,K®NÑÙHÑýÛ÷¬i½•³fi×b^[¬©W	TCsssÉgmHcßÌDBk¤‹¨ÒÄcÄ‹ 9k O;#ýmcM°¶Wi’j[Ûó“c/ÿ“µ6\£ö<ûŽ’cÇŽà¥%’­6Ñž)±mƒµg-EEíHÀšY;­¡í‘Œ±kÛÝGm.½b;Ê ¡ÛI,“Š‚G°¤áýì.qê{S5¤›®¦±éü;–îJ©µ®¥ÑýIn?zóY`KhßÕUúDË'ß~ûí²%@nº´rA‘ª"—,Àß$´†Í‡MèÌŒBy‡Öz³bÈEC"íµÍ[ã±øoÀ?ìËk›kªydc£±i¡b G|ô‚XµÂNÁZ°ÚE×Zž=ÞP,f„¸&ÒEØð.GÝaT†óô~ä9VƒÖÞ|xÛ©Ôò'>:Qó>òn¦¬Ön¬‘,rCJY¡T‰w2£¼\öý/2½FÍf­©¾bÜ+)ã#ì{<Ž3¿Ü?Ài&’«(@¿•ç[œ”"jC„ûƒm–œâ‡+¸ÄØdžrÇÖ<jPþØ¤,BÇäòS™­œ¢qá¨&®dvú4ÎÙtIílôª­üò;•iÍòVêÜ…±ÊCáp‰g›{È÷q©Å¨uj¬I¢4d›ë'³+Òo08#ÓQ±‘n£þ«¿~ÿñû^ûìú»W­J`-±Öö£¸R×þÁAñÒ©¸88Ôlö÷ã!Z›Æa[¦fV“Ä[Øg´‡6&;l0AÄÊGF!¡jƒéªJ3"sk£°g;ÓØ‘Ú[ØÚa8oý
¹2È­cûÑ“ÁD§4
{…yØÉ¢nµoXIö!E°Ö­‚ìª«®ž7ý×¤’«zÖÕ˜‹Í‚¦–aµL¤k–6¡@wßç§ü°IZVk¥·ü»£µŽBÈÖ>øp-
ÊôÐ™ä»3reºL …XÙiLXP6
£«Üó¸²Ÿé+—PM™>Ñ5Ÿîµ
òÜD.ÏÃOÒŒl,¶ZiõúIrû¿9ù«ç”ÉTµw`s×,¼ÿ?Ð©^`n=çõTù„kÓ³!-Zˆ)`¨"si¡óä\{ÀšÐ™OB#ŸûÑÈÒ½Ï?¿wÿ«Ï¿¸óÃÖ&c_óÓ÷1Ãô¼Áj«õ×ùP°†}Uˆ>X(—·­de³¯1ÖR)’ƒÉ­Ÿœ€®žW$>*CmœùØu‘½íòm¶„µÆÍŠ÷<½}ãcc++5åäûrÞx0>šW"Ó…;x“
€	2j4kætn÷ù¤¢*ŸÁµdô/íCJ!]ŸýÛÒá]*§q}ª\ÁrƒEÈt·ÙfCtuÑ[Š*ã?"ÁZÍWQlé»â»kh‡ê2k )ÆZÒv©µ÷ójˆÎØçª]g¯±TÃ{ÇK@Zux//’¶acsˆ¾
€uö¬c®¥¬¦Å¡Ú»QøkV¤3ùÖ–—™{Ar?7–4{F‚ß8ràÈÞ#{ÏLŒ½ˆ¯66ál.`ío:kóÑîj-jØµ4±{Ï1qÓÖ\#”ïÇ¼üÇ¾;@ZÂk2Ö–¾š“³¦EáŽíjOíï¬ƒtÎšl´NX³Ô‘ÿ_ÁUÌZ“µ&[Kô¬Qi³±Ó™jK±Ëf·±qˆ„Žÿ¾‡4É×ŸÉÁ[ÃXëhZ›1P³%i\ƒÃbT»Ú†jçTs¦[â¬ÝJÖ 5ÑÚ¢F«`FS*ƒtëmÖðéøjˆbG=à¥dèÏœ;bìtkÃ½C‡RS­mVµ—ž-Þ>€O’µ6¢ö4»!„>5Œ˜hLÆ†Ö(htÆšü4Íb£M¨7ÍÛ¥‘Ø¾ÖXTò¸ƒ7¡ [.=öXÌWÓû42Î;SQzNÜ¨mkà›³\q@qúÙæÔ`Ã
~ÑA	Y"î, ÖÆê`SAH aqg‘¬ 0d`ˆYŽFšpÖWÆJ¡:6‹­A”Å–iY1„F’HV™El[Ïÿ›‚ù’ëú¥QšþåEÞØy´ƒµY‚ú§çgé]£ö±~zzÈÓ¹‚ÑW‚¡ÇP¸Ø˜ÆY«Gù ¦©—¼±KW‚ý¯~tÔe¬l5mNÆZ¢k¹æòV0ÁvÖšÁ[óÕ€#Î kÀÌçï£wÏØìÎ×ÎP)ZS;°pM¬–ŠbÈÜ€vèJkdmPå}ý…X7#©i»¼i“±É-ö±‰€ä'`Ä\£d°Rš£–NM×Rg­ÖÒ€‘Tv+Û‚ÕÚrû/kí±ýÒ­ÁX«§NÅ;ü—²âÐ~£5Hí)«ÝèVAvÕUWÏeä‹ÃE‹ª„4-K/íÖ\ WV„Kd`5>¤{ÀwùQ6+““@Tº÷}k)­½ÝFkh@äµf³!Òª—PÃ4\'ÀDs™F˜4«Á\™`g¡š]Sž áCqÀæix3	† G<ÈÙSˆ­´DäåþÆ›À<ÁåïÀkèÑ«Þ£’¡Í Ä)B|–Öê@ˆÎbùJ…¦ôÙÊ¸u­å¢)P ÕHJË6n™5ûÐ½;7½tG¬vçÉû°FÛNçÕËÖT.ˆÖ°ÕÊ³õí|5]Ñ®‘¶*Hn3lCL¼)<ý–[×¡‹\# &	ß€Ëà5¯7–›¨æ»}á™_Yð$Æ`—kÓc+—*½}Ö)¦#5úßì¥ç%ÕÃJ†p^Å‹Ñ³|h_Tz?GŒÚ;xAŸÔ˜®ïï½GÖ,RÆšµÂj¦O”åŒ.Þ95¢ú8-!ùÜó|ÔâÓDÆ×3Rö‰x`Ç‹'b{šˆ-2gOü¶´‘6[-‘Å;,Š„´ÄÌxdÿh£Ãüjs´eÎÍÝÿš]¶sÖœbTÓUº¬	Õ,dcmŸRF±"f²±Ý§ß3ˆ$ú‰‰ácø[G µÑû5Ë‚«¥°¶mÏšÝìèSÀs®0kí˜±ÚOiZ!ÛÃl{qï1—ã/¬ãê@M™ÿzë­7fæÎÞˆµ­zÖ¶ÌîO‹€5Ó3	"Ö¬ölªÈßkd".Ý¿Ÿ°Vk0Ü¦…k"—Ü’Jù"Ÿ%¨E……› ÚÓ´~öQ'®Í|{×ôÕ®Æéý)­uê2¢3TÓ%¨Æò{úÖ@*Ášž¦ÑÚ¾}¬ì?‰¥×÷p”ñq,nþšY®?ye‰}2ü±q5I Jü$X„[±lh›d H”æ5Kå/@gV	³	ÐthS®¿íšˆŒ„Ñ4pÍkˆÖèS#À‰Hê#iOky‘›ƒµ<&Z°ã¤Ôžq(Mo>|[R­ezz?²üþbu8kŸ]+.SIÙl“–)…GÐíLl•Õ¹x‚2¼O£` 1i3"u*—‹¢ú˜Êßëœ0¥ÏBpa~°ŠšMÊÓLA¤¦«!=Â­y©©kQk8mÌ~ËïÏê¯h2,{a­R?}ºÔäq–2B	THé#?œ~ºé­jÆj¥:¨F$nC-]øŽXoc°è–cW~ùË±\Û,ì”ØR_-Æ4<x®«™Tý\’ÖµÖq-¤°õ?æúÅã[œG76ÎüÑÚõ“FkÊp¬íßSÚ‰§¼6xþüùSƒÅ¢¹ðÂ5TÁ(V3f£tÁ`ÍúÍi0ˆhlTùS3ÐwNüKƒÉN"]’q—)¥µmŒµxG+û›¡5´ml¿RûŸük-þ#“ZKYk§Hî…§Æ•'pš®?tµ®ºêê9¬ƒäMðÞÖîj‹Œ-ñ9Ù/î‚·‘Ïáß×¸:Ð;l‹N:61G°†:òû¡•Ö>¬© O­bU–P–é÷89rRfèr¥«•òk>{@ZÙï£Oò8Tr“ÖXv÷T
YîeÇ`­æì™×n]XöW/¼yN°F$è@’ÅöÈ`‚¼Âõ‡Ÿ®Ó«¡®<¿:Võ›Ù©i)F«´6 ÖóM}íX¯( r¤'ví¸ÁçþÃ‡«=Ks3Õ—î|oiñ‹/ŒÖT¸­ªšŒý`­¡À½³% ¥°}t'¬iÂZu„+‡Õ¯–j\AU%ùWÇ‡«F4¡Z_Ø‘Ä(ŠbQ¡ v0®Ã—.®ñŠêuƒyj ”Æo¤×]ª)©³V°•…Æ(˜-ipB_Bæ³DgèSéú)ì3ŒJª -²Ÿ•]åaÊXÃW“{0û“Ox1KåJHâS¹läA’ûî³CJ°ö­¥nãp„¾óöÜ Kƒ³ê¸6–Ûo®ÛFc[¾ŠèŒœ‘´.2)‰<0ZRõd—²2AÔH4¹Š&'Ïl…jç´´;kNV2™8k–)‚‘¶º¸¼¨Oæ¢4}XŸDì)_sMWÁÚ‘ã~8¾ó…‡•ÛÏ”5¬u¸j\·Ÿ‰ý~|¹7ö¢ÚÕlÞ5ÐP{ÓšÝ4n;FÊU‘`e‘/²V$$×ÔYcµ%¦m“Ü;k$õ‹ÑPœi¹ý© ¹¿[*yÏÒ4úº^·£±dccR ¿D#Ûë–Øa¤÷§VÝ+)»¹cÆj_ëÂâª a°¯]ÇZŠjoÚâV¸8”KzÖ¾ŽI‹sÖ~ÿç¹4äÜ®ÉkBÂl¢*ùe®åîoG 4~1×¦¹¶øw2iÅ®ÈÍÝN`Æ55½aÃÙœj`(SdH\¿‹…„Üáÿ‡‘ˆ­€×&Tó°©ü´¦>5|5ê YÙ°5¦ü#`Í³%ÙÅß"KÛ¼ý‚M	©öÃ)ªµÁÚuƒµÛÁââê ¯©þ¾¡,ÃÀ(¯kNcr)Å—á÷œ8Tì^Î´«ÚFº ÙQH9O›ÚLÅ Ö©ÀÈED‹ðõà¼Þ’K4«\­AsŽ°ˆÁB©ÕâZÌ58Æ[SˆZÀ)§T©`_þ$Ï
V3X#ü‘jD?–W.²Çê%{¹HÐXòDŒXm”b†Äà¶ñMr ¥mXíš[ß8ymÒì´XÜ4SÂj;ÚÈ¨kí‹+WÑd¿³ÖÎ¬ñË[ëùó—ÏŸwkTPÚúæþóû¡1’ü¹"“hÂ¦Hñü¶ÉÎ7¹OR›ðX9âå¬…¤ù7‚Vµb5xD1­9ò²«í¶o;`­mÇÝÈ©¥ÆZgºÈÚ&¯ÚŸ±U¼\Å\KH@ª™Øt‡¬uÕUWÏc$ÎÚƒ{7îÆyÐZ<×šµ–‘zµr1;ðB¾‚åA°šëŠ.êüŸ»óäûß··­mQÉyQÕsÄeøk%ÒãÇò­¦ÏÏ.ë[Õñz@«¬°ƒWv5å¼@h\›2ø–ˆTjN„&úH–o%¯n2‚È}„Õbý™^–	Kœzø‹Gû5Ô¨OûÍê-fÌøÄwÔ×”Û™´Z~Dç¹`/ŸÔ9J$‰»ªoì=0wçÎW»(…|òë'WK„T×ÛüË_pÖÜïÿŸX·µžd£¹ØXhí¸6¬)¾€§« IÏØDHô¢¼þÚ°Ì(%¬–°(a£àÙXì`|Ä/,¤µ¼ÇÁ•i¸OîV™­Ï\;>£xy`÷qB9î×4mž”ÌŽÙÁO.X¾ï‰Ð 5`l:÷Î¹õõõë­RyŠ5°V*ÃhÒ,¹eÐ)¡è’ŒL4X/ñ´í™ù<M™ƒ5É~“ØZ¯d¤‰Rcw´,ÒVâ6üxè˜@¶Zž …ŒAP±Á€µ§´Ö0’ÖA¢4»?uÖÐCƒ5¾ã¸8kbÃ¾>¦Ï 3è#ÇŽŒîÜ}à°>6~qï‹Þ }íOŠîßÊÏjS§¯&gMEŽ š(M+[Ò"HvµfÑf/ˆ¶÷§/ÓÁFÜ?ÖZkÒ9k¨=–2y*[—A:gÍÀnsÖ~Î+G~¾}¤÷ª…-%Œ°Êî×ÓÛtymb¬ÉMKåÀç)ßØDi MTgeR|ªƒ¤,²ÓWƒ×RoT3	ÖŒÌ¶œ5“ÑZ/ò‰c5Ê^¹Ø`µÄ[½·u‰Õ¤î¡wDC¬õ€û{¸uí¶¦¬¡Ý›»ÚÍ+gl¦5©ÍÆV;Z¾ÜM$“ËyßWN¿|4¶Xl!kö9êC~lf«q qœH®„úëK7EBzžoÄæ7òÍ `ß½@¼¿WxÁÞ‹°õyÇ«)´XKTÈä?j“0%fµÖ–ç›|Øž%ª_¹TSÍ¼Ç@³Ù\Æ`m~þñ2åz¨Þ-¦zño“Ö`5rD„r DÈa ?ÇYáô4a…³-PomÖâF«5%_0k44z7MžÚT³žS×‚åûOýj¾E™d®¬‰ò(zäfKßÃ!~ÔÅÓð™rúËå52!Á@u,GL‡#¾_a'†ÙÊQ$Ä¤„»Ž]¼´RoýÙ«m™)a©á‡ÝP æÅEƒ5qb¯U/=JäbÒÒùôÖ­+°Ú•ÇW9‘Z]}ko#J
¡55«YrÿÐÑýûÛùÄ@–³²¬5(¬Y45ClL±SX+’ü˜·N¿2$\ÌÃžCY¼J^å€—0l°Ï/Ãš6Ä“Ma(ÜÂXK½·”Õ¤ÄXÛ²òñ­ôg&Ù*’·†V¹^[üFcáC
zÐéª«®žË:H%,¡{j]»ëê ñÖ,’Ù\1ƒHiròãý2ÃlK†l$jÓÙ§¸øý“ï¿¾ó$õÖ:ÚÖÌZûðÃÙ Š²Q…Žm¿¿ß£¦êR=Ãi ÚßìVXhÀ€%dõ´’ö,|3Zë-xpš…š1Ãµ´¼áÏ]%uûdknv<¼™)`o¾£È‘ÜÀþÕ¢7Rhð]cµÖÐd¹V+Œ‡…fq‚<­X}¡Çõ–ùãÃ£êY%ÄŸt×·–$BRù.£±AB`íùm–ŽV¹`®ÕkÛ÷³°Õžµ]²ÕÜí›„Õ4pm85¤ÈžjÍÛ¡WÂ'ë¾ÀV€cŽävÆ.­`­)°ƒ#%PXˆTÖ`˜SéæØÉ¸‚¢®Õ£žW‰sõ9¡geñÕNå¾á7enš«ƒD—`aG×Ï}³¾–›Ÿ(·E¡kQ‘–}Ï£é„`-_´J y¥–V§'
xÖä*2†5W—©qõ
æ±é2U’À¬±k7ØS‚ÿ(y’p¹,oÑM6¹Šò°ÝYã’†Av š=ôg\nòSW•02ùTìÂj(öF–fF5û8¡|GŽß¹óð+Ižä¬uä‹tÀZgÈ°6a°–HõŽm°Æò4Äï?¾øÝ1†¬	Ôø;'`µÖÒ9kÐ¨Ug$Š»Ö)yt”–äõ+?D{)Žéð¶¬fbëôlÒ>õŒ÷Ã~r_k¿I¬Æ¹÷Kj*òõgÂÿ¹Æ°fG_Iµ”ÕXR3ÝJ[Ö”ÒŸXkvA±³&X»°eÏ¨Æòg¼µ}·ãtö,³ƒÍö…i·kŽ¸Arè•=‡&™ó°´iDÉóÜ½›=øKd·)X³=››’[l®q‡!¿<´kçˆ™ih$,Ð f©ýÈX­áÐ²¶[*4÷˜­†¿Ñ»=¾ìÚ¹#M÷hTv\óá¶´Rß–àê÷Äòú>‚nu±¬}¦2ÈìÂ¿}v}yæ™ö›¾ö¿hXÓ˜ýùYŠ©ùÿ^øÓÏFùCyALSŸàX	ìàk4Úª¨ÃXÃ‰WÿìôÂ<¶¾X«9¥A|5ü®=¯MëÂ²*È(Ò¹‰6XxHÖÐÊB«}bœ §Ã!BHfÙã%DBn@\3òÍYM\«ƒ‘ÔaVH1®×ÀZÒ´‹¦s›;q3)„lc5ö§ÙƒkïEGh	¦!vb9Ö9aîôvõêà­«×®½{åÌU«8—œ±ìþG¼¡ê­õoŸ'`Ä&c+òè °íä"«v3ž!Ã¯‡rœ¥‹šVgÃQÁå¦‚ºr°cïrn ]Q1ýFoe€1ïÌ^ ­1¨Î5½%él:EbÙ.¯ir‡6­´cm«"È'Æj–ÿhÙ3¢5í¥ýèœ55­%¦šôÿ¥«®ºêêùÓû‡?à­ÝµBÈE“yk‹‚5}:p±"™iýª}§¶Ýf§²oÁ¾YiÈÎ@ËîÜkâ­ý¦-d¤½R¢þ$jðq[u/‚²(1o×'§úžö9KªMMÑ€erMÊ‚i—Ï]¢Š²ò‘R¯.6ú­
ž¿|æÌÆ­[7n¼~æÍÞÄXse'à‰S§NYÓÚú©| ý©/¡Àj¹ÖÇL-ÔÊ…ã‡Ç4rµN_ƒŠiJuÕAª&QƒÖF˜Žk3s~wç-k_üë¿cÜš`Éï­k—;•Ï·>þ«ZÖ`µÿ„Ö¶kZCno¤ÍVMÒEÝ$)¬U5„-.”¹V•Eð#mk½ÌâTŒf*¾sÙÁÍ´`GsêÆ`^;Ykccã
ü±ÈsÁÓšŽxùËYs
Ý&mðTÿ†òE4ÈŽì~ÉªL®Ak‰¯öèáÑõO‰„ü$ÔP?È)vlˆaõ¦Ak8«öé*ô•Léã–ç]HœÁšƒ´šŽ­|B„Õt«½ÒÙhIÂˆíÇØ6ÌnEYãX›9»z›*ÈUÁÚÎZŠkÙýïš³FÔåÜ¶yqËš®Èö“KÕÃLZ#—áøá‡w
Ö.2:¡:Èé‰Å1R§¯¦¥–ä¬{P3<ãb´–¢¢ìñå_fCî;µ«ÙzBœö'¶3_§sÖXþNgí×¶òÓ8~­­/7’¶ÛùjO'®ý\œÕÑÀ†öp”ÝûK›š-¿é>Õöà(kÎ’ZÚüqØ£†µic7RúÓÍQc5®Ðš-?jZKQ-E¶4Ý2gínZ‰³f´ögpmN]ŠHLe9òÏ®Aj÷'±Öð×¸ÃxMã×(ÈnbKRd*pŽÄÇ„Õøqm°²òv5dZHÍV‹³Ev²¥!—/ÒÂ‘§ýk@Ì¬2öâ8âÖ¥æy/ìêµ Ï½ÿø”È…ÜAœÈ.“Æa[Ó¬š×4H[v“K¢Öà
`íúF¦Øl.®2Š“¦1U>såÚêÏ3d-«÷Óéqúän,ÀDÀšR"¯«IÂ´­AºH²¿ÀPs“Ô«F¹žqÙl	¼ÒüOÍScAQ·&K5íàš`-jÎÎOÍOã«e/Ølêy;8UlNÍËBƒÖNq;=ô0­"›bG,x2ŸkðÂ±é(ÇÛV£2=¦¤È?ûÙÍ›mQùZ;i°vXcsí6ÎÚ$×§°¦­I»)‰^V7d0õo¼ÿþ™wùâ/†5ZƒÖ¨ƒtñý—Ï³>yÿQ\9¹Sð˜´90Ä“¥ ‘ó3ë¡P´–“¡F$ÐÜ$“œ‘€I•ÊÍ„‘#Ž*½ø“ƒö#$=Áµ¦%J§žÛ /ßß6ÖžÜ4Lc\ßš\5.ðÚ7\€5tã.}§LÃÆƒn¼HW]uõœZk?üÀ{ ¬¦ËÝ§´¶ê`í¥ÖX2¿Ö4¢®¥8ÔlÙ˜Q®™€G"Ë³­»ÿþ¿­m×¶†>üàCR§*c‘¾É+£00R´‰²Oª0X–¿|ZÙ¼JY±#d†é“´ Œ0;›î5l8Ëx§sÍ\˜B/°æ‹?
ð,ŸQéÈ“·oœ9s’lÆÿ@–Mh0ÁrY•{²Úö÷zÔ4V™$P$WìÝÑü¸EY!
‰í‡+Kã³Š„žŠJu†ñp´Ê˜êDx?b&æ<˜[úêw_|ÿýï~‡»&{í3GkïÈX„Ö¨ƒü«Ñš†Í1Z+¶4Ö´¬i_ÒÉ¥ökmùlÕ6x«Ic55¤Ã5ƒZî]±¤››måBžZÂ¸*y­Éë6æ®]¯æ6lL•)Ñ¯Q’Û™ãÛñÁuDCÀÆïùèÑ£Ø´t¸öFb;}ú‹ÉÉ‡ŠYà»ì³&!+9úÔTÝ
¬ÍBáÊ'+¤}†¾FC4#û'fÎæ ý=~•ÄWSAçð˜~5»"V	ŸÅ€–&ùs#‰Þ{`ZTÞš™é›\Îù’ÁÚ6ÎšVid»µ¦à DÀÈê"¿áCWiÿÓð¹]2x“³V…ÍOU=|{d³~µØZkwÖb4û;œµ70ÖÃµ6¹B ©~¤;7=Ë€dôš†b³pÝØrÎšžGJk[æ‹€k‚µÉ€¯Ÿ¦#×ZãÀ·-%ÄK+ å¡¡´"%ŒJæØc©‰KŠóÓ`5rï•Wölîig5.¯ÛÖn²Ÿjô÷Æjÿ75tKKRÉ"¥Mk©¸Óp-´–ö¬™­&gíÏ¿ŸKêÝ?ý!yjèÐO&µÕ5?` F¶Ö ‰ÿ»¡µŸ°2á'qIx[	¤d%’Ÿ‘`÷ù}_îÞw&Tc\v!qÕ¬*2”åf{¾Œ4L6ûu/Ûõ‘–;5j£øÚ×œ5Ü5ŽôÜä£µ¤»ÀÛí°xp¥JpíÙ–5ƒ5þ¿èÏhÀšÁZ™„GÊC–›~Y°ÖT×qà—õÕÝ³Ö„”RP‚)¬å0´dûä¨Iš_;‡ñE~¸F=½xmž#=¸„‘&a¬a–øA ÆÛïÁ©»›k§×¬ÏMTôµ² ·ÆÏÂX›¦1m¨9+·¯	 â¬ýóJ¥^"Î²Ÿ2ù°>VÊS/–KŒÅdÊ\gäCkU;)SíæWÕANÄÎñO‚jNi\¾¡ß¼ÿø*°Œð.‹Ô³¦„7lM+Xmÿ Rû‹F³EüÊB‘×_¯‰—²!u£ÜÆKã$©¬ñ»ÁêÜÊÖbvv¤±v¦RHwƒïÙ’E7Hµ¿ÍQ“Œ²ÚcûÓû;cûÓk	«Ñ0põÖê âÌ”Cz*«N“ñ8lHm;íôà^7^¤«®ºz^#F~ gÍœµ$rQ¬Foø²}PXî¬™ØÑ<,Êâ‰jJ–,k-µËw¾W!äoÒ‘Ž¶5ý¬iÎ¤„ª|,…á8	_¥0ŸA§h…öût–Ciž\&Z¨±Æüá.E–¡ŽRYÖ4leQx>âŽ³·®_§­{yQ_ÇƒÖ„gÈ€‚+ý=#Q©RõÈCóvôƒ4‰&,ô4ç×ÖÊ!ÖœïP«õÿØ;ÿß¦îûßþ«éþ4Š‚¦üBT'Qä¡Ù;G^Š@b;BŸ“Ê¸nRÒü0­óa…D´Ó9Ó½cÓšJKh *Ù¨¢¬ …%íÕ*n¨ÚÒFWTÕô‘¸£º“º_*}~¾çë}NÆÍÕç÷æéãóÍ¦qœÍöÃÏ×ëù¢žH}âÏóÉGVã3xþùÊôÂìÂÂ½÷Ü‚ØÄjÀÚû÷¬Y!$“±±Ö µW¬g´l£‘Ýª²Ã`-é[ËÚ*ž¸6TQ‡¿MZÛ!UF²Tä™é”ï+éžSœ@°Š3ÖFÕ¯ÆX5eGK¬¹AlU˜¨NVkTAê{xõ¯Uç_-BN:	ÅÄ|ÆØX[ë]Z{gmM?#±Ñ°ö¹¶ªa®ñî»¦ak5JšÔš1XcˆZ˜¢³¤Hb'X-"DŠ*Y¦Rj”¡IeXX{eßsˆ™BûYÌMKpíñ ‘˜Ò¤è´FF*ùaþ‚#uB!¥ü­Ù©éXCí=kºHì·;k¬òf¦j±@kÆf(¡l§_ÑýG`´ü®çŸß“V($´6°?ë¶èþ-ª ÛzÖÆ”20àX-qÔL¶G{ŒÆDl‚EFk:¬i¶ÓòVsÖÚ¦¬µ{oÇã+hLBüuð“—Z¬Õhë›gR¹Ùy¬Á\@šœ5L5ËKÔlµG]Œ]ëvÓÔÌOú{œ±¥…Õ¾@†XqÈˆP-	ƒ’%¨Æ¢UR	™ô¬{¦¤eík2FT	™ƒL3±‰›9¾nñV)ÆÒÖqÞÖy ël„i”DR)‰ÛÖA¹Ä£³m¬ƒô«cªa¯qÐE7iVÆšü5ËQ*ä.2 ÙÏÛûÙZ³–µÐÈ=¢8ÅA*ÓIF›M!Ñ×`i%Ab¶á¥•å¯®YŠ±‡+1¬íàº›ÍŽ§h™õ:PãjjkY»ÎöNZ™pƒh@3¯IÑ‡ØŠáN<U¥ÑZ`<·2g<$]¤ ¬äùôHiò¦Ô5Ê@Ã®éë­…5ð*•gj5.™bDÀOˆÿÄÄäÈ)@˜|3n&€µ¹&>šiÎS%q@Îþ8F›–ì¨†QÙJ™»\¯õB‡s)Ðîä2G€JÅõÕbHUS±‰ƒ!Ú›mÆš5¬Ý¹&X[Z¼³¼|£ÞÔ6× Û°6©MÈ^‚ÔÐÏþð‡³ô¬ÉZãMÌ^`I­Öä­°Q	°m“ƒA`èÚ¨õäjs•æL Ê†654°SÕ1 y¾ŽÒç‡NØŸ…nÉÁ²*)ÍõkéœX­ÖÌKªZY-1Ö¾{ÄÚ?µÇª'Yóß©¡%
 U² b­k)	íÿ¶­mmk[ßÏˆ}cu—ÅDÆ°f…]k‹K)L”M1Yô›žk"›ˆã=”t/ŸÌþí£«µ µ-CF¬…J‹T¾4%”®ñBA-+ä÷ 7 ÌÇÂ‘eçÛ·~ZU‹HmjÌWSf¡ÈLMY‚íB!5Û¸dddúêõå«…Åbô%<5ò
kQ%¤Ž©O~ÚûŠÀ%zš·Öá‘EÙafž†ZÇŽ4ïðE
m&26}zÿµù<Å‡GÔ²FÁQžî¶üúÂÝÎŽM}ø—÷y×x‹­Á„*„´ÁØ.ÒzÖòÙjã7¥-G­™²?²)_1·MUÖ;¢*È¼+‡¤Ê±‚µÂ^Ü ãðŒ¿m²>ù˜H¤3BŠþT–#ßjeU²ÎâG‚4°Z¢$¶§¼n„ìvŠ–CxYIß¹ÅµTféöÚ'ŸœÿägÆj±.>lÎš¥AžúÙÇÀÚ¥¿ 7}:TJ
çç`u°•jM\4ŽÍJS×D«ñá	&¬b jø€ç¤”mSÕÖb³¸m|àJ"£dÈÜ´‹F³Ãû7§²	º½©)`-)‚«µk,I¼ˆ.Æk ÖˆäŽãû¯±Šª gï°fqŠª¶éJe×žaRûù¼0vbÿ1…é=zìØ@{¤.R;LhÉœ5®±Ií#jÇ,ÒUA‚hÇ µcO©Å‹¬5íH÷þ?sÖ¶ 5îìx-qÖD]/ŠÕ ¶_¶2šü6+ulc5­G¬K<–øc]	»Ñ´ÈÙHŠìv÷¶^ÿ…0Ž=ç¢á³íumj:Þ„=NpæÈ¬X-!µØ[³|‘ËíßZP\RÉ¿liYÃYã¢eÖ0Í–ƒ6Ì¡Ÿ]Y»kÇûq	µƒÂÊ.ª:£Ò({|Äƒ—™ŸÆUê%÷wqGx€ÇGÔ@*8D!"rÖ€4b!YºM”>f}Ãå1ª5¨Ž”þ<ç=Ê¼,Ô¶;ËMR¼óHº²šÝ±‘ i#CØC’Ò„G¿Ó \ˆ×í-k|Q&`[âÝaŒjâä„j	› ƒùà©âÅ¥l¾újHÕBY°Ö›ÎXu`P
xL¤o¤õŒ• §Þ\ï 7—Âf®
Ëut¦^²@Ã–Z@¥úA1HF5Íÿœ0¢˜h6¡¸™–‰Ê™ÝÁY?ÛD`›€VšlÅf"ÇÆÿºÌþÜÐ2_¯ß$÷±˜îÍéËÅ23p‘äÊ ±¶%¬’®[¿ÚµÞžE`­­U­'Œ†”¶¬-SIÏûçg¸ÿÆÒŠœ5kV39Z{“H@#ÑZ®	E†äøöäØ†©BU=h¹i°™`¾&‰b(æHn!ÎŸ§ÅXS(lª@Iº¸QÊ‘”®ñŠlËxo²Ö’pÔV‡‹¼ñÙŠ#µ1«¬7-iw 5¬µˆÕî™±¶/²­mmë{ªð}æÚ7\LWQk‹û(‡ì³IkˆûûR\e¬Õ‚fÚŠ gR€NMÝß_|ôá»ª¶µ$d¤Ý[35ŠTÄdôÞÈÒ	:i,«qÛŠØÑŒ§¹ÉºF!#%NhzÓ^Fez
¤/ZÏšïlX+ÓµxýÔ‚¿§Ý·è~Uê™³¦¹Ö5Å_pvíÍwßif2t¬Ak;0Óª`Ò_<yØóq¬µBvTu4«ŒðY,HpŠHõŸ>R™½÷÷{÷0ÖèÖPS%.«DÐhíÝø·'RÖÚèh¾
Ž´PZÒ·¶™àŸxkÊgD5€ÌÊ’âÞ5ÒûqšFù Uªv°âR1 «yä®Hpí3×‰¤0“5I	„kÙŠU¥ø†qöìf°,KPôHIãÑ«ÅBiû”0
k‚æ[—&ÒKš´vž+Ï­Ñâ›T‘°œµµµ¡µÓk—–˜Í–¢.*glÆ¦Ù »_š.?¤(•!Œ¥ªï©ÍNlÎcçV“µ&±kÄÅ5‚/‹¸¬D´f°ÆàZØ@7Æ_O{ŽæÔ€X˜šjOƒLhMz¹ÝZ3­ÈY³åšÁš³ÖhPZT°{îhß­[Õ]»F”Ï±­P‚yJ F±ÖP{t?‡[8k¦S[ßšD”¿“UAbª{:¢µývgEA
ÖŒÛ¸´ÏYkGµvZ³ðHQÞUa˜ÈËˆBC-°Æ–ÀHµÁZÛHìD-½fe
aðõ^kÎ^ë‚ÝäH)»?¾/Ä¦„‘$¬D6©’‡Äj±±Å÷GÑýmÆz!Na‘±;knÒš•QšbgkíkiÖð*É|´x7y­ë‘\VeŽ0ê›yrôÞÁk&•u
Â¬u)KX‹iM£°Ý>œwë ˜kÍêB×»÷>ïÑŒ5h,¼E³±uÌòÛ\°¿Xn—Îá¯e5œcL¶hÍ÷=Â•”Ûï7›é™t¡Ä¢/¢,2zÊçYªCþ¤ÁB¯¡=_Äk,7þº¼”zè£-ªÖÄ$›ŸI§çˆˆg\'mq
”¢§ª(X“JÀZA³²£¦Pt	ÑƒZŽó”o(Þ?\ÅùªÁLä7òï)¢Aa)úà8bÁš1X›à”–‘N+ËŒYlœÃb›áV­é~3ó8Qu¬4Œ<¼·Ôµ–ãä1=L€«SYÍW?S.Ÿ¹N¾ÓZ{dÚïžˆ¥4óæ³¶Ù®¶…zŸ5«Ê€m‰$È7k/ÒºfÆÚ©K‚5eVE¦f„hxl““ìKìRž@%c:ÝÈî'A¤9§7jÊÖyƒßIêùé”÷È)œµ0$»å
»é^”–ÛÚÓ™ÎµLOKšZÂ"Ñãó°S[kI$¬¶Ô»²bö‹ûµî[Ö/I6[«åXw·ãE¶µ­m}ŸG­Áj÷è\ka5&GAj¦TŽOíÖý”¶)Ui¤râš Fš”5­ñ=(] Tóÿí£<ü'}k­‘ÏµÓZƒe^É$PÚÍ“7‹™NZTSÓew²Òª¾ÑZÁ+q%FŽ*’mµðX†a€õhU-J#üôúõÅY|5QÓ·È¢_­™^½ð&ùýøk_½JNä·_‘qXËä¼Ž¥ÿÖ°F®XŽdr¢Ç‹ÒŽ€rì*ûëÅq¥Ð´–W¶5åÓw?|ðþÃ÷ªÄƒ·$Ñšƒµç°ÖôÛÏÍmZkÅ*ÿ…jö;ç¬!ml‚Ò¦µ¦Ñky¬3P¥Ð*”«í¨U¼U &žC6ò´¨X‹dïð”ÎÏÉ›ú¶ƒMOõW-¤*$ÅP6šGíafgA˜
TUûèóÄS±J¿z/íö^0§L>C ü³Ã¯kæøs«ñÔFêëýøü©S…‰KŸò…5‚ô(ÍÜÃ¢Œ:Õ!•€ÆqöçÃQ¦Ýü‘ñL!Ë¾XÍ">«\F¢b…ìj3„fl`5öÙÆ"˜¥ì˜µÎ3Q,•Å°bI­øáÔ,°ëåVkK{¤.’ÚHÄjš©¬i7‘§¢­Œµ…þGggoå«ÓDŠ,,.²ÿÄÈÑcVi×vg­ÍZs§cVŠœµÈ{ú¥_üü˜àLŒÆ
	ÞtB4xŒ±j?"
R±óZ5[ÚÛÖÚA%nYÃY3‹È&“Z{ÖÔÇ†ég§Evœ·í}Z6°¶ Ú:ÄFñp’l{÷ÜÇ¹Cæ¼År°¦¤¦’‰ÙG¦6Qí?[œµ7"%Ab5[„j1®™µ;k+1ªEñ"kº k_ÎÆ°I#ßÍ][èV’ÿñ;¬º0­¢3¢5/°Ü\.$Wàm!.ƒtµÑxl0oi½né"køf0™±Y°ko·‰ƒn+ŠÄeÓJ3XÙüšŸeÏjÅ†Ý‘µn5Ž½òÇŽ´–ËìöÝK¨†"g-[%Y	óÍŽƒ59^s ’dAJ×—o/æ¼Ò<03#k†ÿkS¿(6P=…z«|=W2S½ÁK"­Ë½ €«_©Ø<iè­¦Ék™\ÎÒýõ²Kq@=à‘R]n\(PãêÆ?;rSüãÆ,À‹®4_âŽjjs„ÆƒIÓq-VcÜÿ‚¥±*KõË«¡¥#Î5t²Á»Óåbzµ^¬c³±¾\/_æËÅ7ßœLh–(HXmq‘Î=ƒµæâ2[2Tj¥5ÙhnãBò'­qí áý+|á÷ÿÛc M0BÂÓ`PkÃ âûµËù÷^{­¯GÉÉšdIÍha0…xaA%®-RdÚÄ8K+’…2GægkRBÚ ŒÆ]EeéÈ%‹H,‚µX=ÉndMÆ°6#µkßU¹ÒG…ã'Gƒ¬—œ¸¥Ö>0wë7Ûñ"ÛÚÖ¶¾·u?€Õ–¿‰hmùê2!#ˆYkÒ’£µMcÍbF:Ånƒ½ƒÍZ3‡ÝÊ¥yµÍezU=òe€	­%‘íÞ…%™4~ùäÍÑjQ5‘(lùæ£ù¼·®iÔ—Ï¢³Ùè 2y™e„#•Ê¹Ì@’¿ââÏÞY¾x½ðÎ·\>‘vøæHAñ?o±Ÿ¼þúW°š®ý7'›Lƒ­1‰5àóŠ¯öóœfÊ55mºX	z.Ö±Ö†¬’H`Í”Ÿž:7M¬&´öð!UüîFküò¯
Ö,b¥$¨Úø«ã I{$K¬ÝÙ¼îw´–e%fc€€e@Æ°F7Ä•í Ö*
µGŽ_hPƒmHqÊÂ2#eæ¬k\ÎS‰¤{Ë^b`¤ìÈÍrÁS`d•€’©4.CÓrèíå;wúÀÚÌ¾ÓkÖxfaµO^U²ô…×À4µU~†r×´vþµóï\ÚXûxéÓµ€’%‘‘Bö¸QäIÌ…£¨ÈóÅrÐ—!oš¼u+ÛÜ8NŒÖâtK“@-ZÅnšÊv=jH%¡Õa¡YqL“ÙhU³'Žh’é©B8]äLµX»%¼ædCÖÚÒ œfŸÌ[¬±¶>“ŽËc3i&ÖÎ‰†­MMõwì§øñiæc¬M?Ñ³¦mÁjmÎÚÓJ9¡Á›×œÍæ
#utŒHH`-µ¨2éYsAüßÉjí?ÛåAnö¬‰ÆâìGÉÖ*‚tjkaÓ=¶Ð/ìš[ëëÿ”É2\£’°ýÐ#L&¥Ä)R2Z•éw†ÕœÌWKœ59eÖÚÒE^àÂÖ)¶ÖVÌZã_Ç¸†¾Žµ/ï[‹Ã@-R«ƒÝý×HQÎˆBûUìž!…ø+ø±›G•ŠÖ4– 5VNLbÓ]‚µG»™Î†Á§A(³ÅêÚ%0ã„ÕIæ»bXÛãsƒW³DÈÝ»PV£°½Úî.Ðm7	þ5Ä÷U™¨s-O(‰ÕfëE¦b2gM æVÒ“ÆZ^^g,ŒhJadÕ|•ßMÌÌ×ôŠÀ‰Oi6&°Æj?Ã‘µN•‰Åg£à)QAAæZ!]ÂÜ*—5Âz„AJújmÔUkJÐPÝ£<<rHØiÊO‹@îKõ§Ñ·–šãŠ!µyM"kRá¾ªÙØlÁEhìd½xùWu^ð·O5ë–®Oþêr# L¼9>ÎC«_)Z¨#'-Nk‹×®±^[º¶|íÔÖèÈ{Öà 8Ê3¥Ca++8koœUç7U¥Fk”†­½Ùð2™ž¼pø™÷žõôyÅ³†¼^dE–¹&È«LÈ1ÌÍ@©—Òh5ÜÌ¦«HL‚%ÎqlgZû‹µŽÉf:M¤ÇÒEž‡ýÏ••Ïd¬ÆKs0ˆ­¨ý%—)©gm9æ4twÛXÛÖ¶¶õ½Žù\Õ¾‰ãûÑ[·Ý`l)×2¦'•3h£Ð$…K2Ø—¢Æ$é5¾Úüà­fê³?ÿh·Ç3ãD~•ÕàÓ<"«°sÆ£þ´’ÁµÈ«*O¤h¬–Q
7ÊÇq©æ+E3ÅÔ„UžâÓÕõ³gåoÝÖ‰÷s˜ ÂÃ‚5ÞòþùéZvîÕo¿úÝë§eò„µ^†Ìæt! ‚„.ˆTawG.µ3KšaãsÍñry˜1Ë´«1ƒYÑý{„j•Êí{‚Ýéé{ÆjáW7Z{áúùWEköËÏà¬)¾ß›ûáWÇÕìžÖ~5-±ðÖ8ÔÚD"¤¾Û6oÍ:×à´8È*1vËVÊÈÁZV+W²Õ¡›C1­ùÆ:°ÌÍ›£¾bø‹zºtÍzî–Ï`³›Wè¬è&‹p©’ØæÃn%uOíd€Bmí—/õõ¬ñÌÊZsâÃ„+‰z.‚58AkkŸ~ºäø|À	Ôˆ¦cÓŸª©]M_°ÏÍs²–êôœcZôhC”±æB 2ÂÖR!§In-V‹¹p3ZÕb]mcü+ÖcCjodÚùôìñãàSxnÚïte‰³ÖÙšÙâ¬a¬¦±Öö¸ü”ÍØ~]Ø;˜Ÿ^˜®‚kT·•ŽR«xìÈ.£¦éƒI¤¸ÈV‰^h§µØY»zâGXg#–	¬E¤ÆÆŠ"ã‰Øf²½ôÒþ7:aVž£µ‘–4È6g­ÝVK~~2ûª3ÏbXsÖšu£)ÄŸÝÖØDN[;¬µ•C¶nYºa4Ô˜±†%éðÐB÷¿¬¹{:H#_ÄÔãÙFÿ¾_-5rûIîçÏÄn«”­–lÚ»Öd­%S±ñÕ¸ÄÎÚ?¾þÇìfn#!±„kû„hœÓ|ì~!'õÖb§YÐ<éŽëëüBÊï‡@©ôŒÇ`³#éþàq’l`´.iJÄ¤ôÑAÛDÀZ¶jó9ô]–I	¤¥?b¨±#‘ð_#Š~7{8i»üšR;öxž½YÎH^[…µ½ÈTªùJ©Sx¦N;¬™¡¤ìþÅts~âôßãÀl©œ+É›_-RS)iNK¡Ó‘Å8YN„9ka(c×'êQìä{À¬”8[gžÿjC“ª9X¤ç_k
Èj5†Ìˆ
É¯Ñý¤ÆM”µæÂDðÔÀFqœÕ<sô!h6VK¯­•2é3W.Ÿa,6–«óµ\ZÓÊÂúå“g«—OŽSƒ	Ïé±©§ßcÂZ©k[ÇÚµ«2ÖhVÖlê\\ÿ˜Ë´Øjb£hvçcH´ôÙ½ºqmRCÖøOrØ`Å”tò…êOŸys’:óuä¼Ækƒ9šþÔµàœ°TGbR
$Éb»Í’*²ÄIÿ“;ÑÒŸÐZËMvW-1ÖÚŠ ãp‘ÏàµhsÔ6Zb‘6N[pÿU´ü8­}³/²­mmëû<jZû)¼_ÞšYk‹FkV¹˜K™ric5zÆ±ÖìÛ·(²iµn´gê­Ù¹pî¯o?Ak¯·ÒšñÚ*o»#ã™ÞÎÒ•“å Ô`­Ñ€70_9ñÑ\lÏ'’°ÇmS™’kJãƒ<"’^.²a\æ½ ÞÐÍ·˜vvVaZ°ZÄDFºÀX×ŸþUÓóßýö]/Ól„p«tdÌ,T!Êe !o.…Í°²ð~@›†=°
:2¼_Éù#ûOœ›:14{{lhá¯ï£¿<t´¦ÌeÑÚ…¯ÌZs¿q´&a¯UŸ´Õ¸¢Ä]KFcã³9X«ðØ(!sµeÛc’
®:Á%?Ê$+C´U=EnF6©Šl=Mb£>1'¡ 58óo^)ûš¹VÔ¥¤ÀØ¨Q2Só×±·œ
 ×6ÎÛÄq=¹.ò§öÁÿ’‰ÈþK0ÏâÄ³§/­¥éT½#½jRé­!Íûµ€'nDVC2 \¦M ÚËZçNDå#DiÖšà2ëé83f‹§¬ÅÌVÞœ«–Öx¶¬þQþëP¶ƒÿÖðèØ¹©ÙÈ©©ÙE`­×LŽÕ¶pÖ’è~Y¤c6aZT	¯‰ÝÐîêôôË¾}·ˆæ˜öÉ°µ#8kcW[ù(qÖ†Ñ¡Ýò¤³öÒ æ£Öœ—fvŒÎÄj¶ÿô~üÒ/äÚ× 5¤lHRI¬%sÖVíä¨U{¤Æ'ò›Ù©—t‹‰"HŽ1þºåÉ®5vÚÔ2xAk´¦IÝÌYkd­ý¢û`m]ím(.€ÜŒaRÛ!mtðs±Z»³†H‰Ô^ùrÒ¼–xk1®mFŒ¼%k-qÖàµ©xDš`MEwú‰„t¼¶µšî±°Nž#Uœür¬Á4¹†¢µn~É½ÝÛ&Y¤‘ù—6
{]-k]y\5¶rÑ€4†ck¶•@j…ä¸á§5¦¹JH¯Ýíûnhf°F¤¦bï)ä¼=dý¢ˆ#]çŸßã<6j°ÝWB™NŸJ M=	¬µTA*¾e"—ŸRNOðjjÑúsrÑJ™žÁŒ†B^ÙC¨h)RÐZˆAk8kªtL“»ègj€¨ŠËãõ+¿ºBÃZ¨ÐÆ¾TÈ¿£˜±9¡ØzñXm›IS“OZM!þ¯8Vû²±JWšj#A6©9oA$)«„Th?Ç¸}EŠ¤û×/SÉDì 'Õ€ÞP½H…`@²È8!MDaM¾9`0"¡Ó“Æš›¯vcyd»¶´|ãÆ©ãµtÄgÚÆ¤–Ô?N²‹³¦#‹éÛèí¹Aëó}l5§SFk‚µÃÏ0kí	gíÙT­ç½÷z;ÓòÉ”Î_MX#©YA-@"c€Ï^ºñÔ£6§v½‡–B$`žŸ‰±+:C%°fj™¨+IâE,¸«tXí·oÿiƒar&‡‡–áŸ”A~ú©MY[–’ŽµíÜþmmk[ßç:Èo$F–ÖâÉØûnkRg¦'…œ¿6Øç`-•RdÔLN­Ê3ÑWmÚÌ|ðßX~øç·¾½­%¸6ßPìcO·F¿Pø*Œ1Ró,’1©£å•‘~çf=¤lž’rå³×h¦’ÿbXX4¸FÖìT^¾QŸÂ\.cìþh^ó«Ö:Ÿ}ZKwüþÛw«^-$Ó"_éH«¯)Xû=¬–QNoÑCiõ"S¡©¼&bD‘ýJ9ò<°6¬öá¡Ùÿ>540õ¡hí·ïG¿úuÑÚ'Ï@kÿW¿ú¿"PÕdlãµß³ÙdDvÂjZ·K3°á5ùjÈÀmtTÞVekÎZeTÖ ±>ÈVõÅ°YŒ5$‹Ê× qüG8‡6Õ V)'%¦¸¹R-”¨‚„Œ 5©^÷]˜‹Çý´&”¦Ÿoíwà5é<š¡°X˜jœÃ<Å<ÓÆj,$A®Í…._cL VÅ[«iPPKCøƒ…f*ãËl›ÓÄ>:áÓþœ°ßuRËz£À*rådu‡<BÙhœ5JK’!G 7	`£­¯2ÊoÉì²’"wØÕ¢û`?ªqÖbV3&‹i­ÍZKzÖ.êB<÷Ç±£Æhl6HˆOÃfËhä[DŒ¬SÉBEäØ`m`ˆ2HìY7g­mÐZ¢¶tÖn«Íl5pÈ±Z2cÍÖ`ÚÑÿä¥c#döûñ‰HÐÄ¦m2gÍ.-Ô˜”B¶Ê|µ¨ií¶qÖ‹›>™±°¦Pkb´xc$×î¬É„k§5.7QIqã¡uñ¸F"(ÖM"¤Á™û.ÒµYz¤PVK8M¾š&­Åù"±¯Öj/h­K»·v)ª„Œi%Æ¸f´Öï¤^5Ášá™ö×8zY!¤ ßHyPš‚­ÈÒ"××­[ÏíÕ\õçzwÿ>ì4có|·ä¸1jÙ È*´_–†š"ü-$ÒÈ¡×ß#V#_-ËÕ÷!4‰›ötIA(=ÄâÙËÐNîìu¨h€•_W}9Ù³ƒ['#[MÛxÊZ+¬­ºq)å§	fì;ð{2F›s…&¦hàç•!/\+ðòÆA¥¢_‡„ôF0J•CoN•é%âòéV+•é›'OÖKÅUì­3æÛ9KºPúˆ`- eË¤A2…ódÒ¼u¦5µg_ÂQ	¢„Çn}š	½ZWŠ¨TÊbÝYkg.ÓªÛ0Ðí2»«AOiCÎ87Ç{'ƒzúMóZ+¬IrÖî°â¿¼T"HÃ)l±Ö„g’ÎNöö°qÂ]»ñkøæþýëÃÚaêÌÖZõÚ³°}sš+ÐœPq#y»P,9àÇêÕ–½§u‹ý@
U|•ž‡V6ÙL%°ÆŠÛ­µÃât¤ãn³El[$’­¶Ñ—ü‡Ù@§Ui‚Õ6¤kkˆÔÄj÷¶µmmk[ßïˆGk÷–·ÍZÛ´ÖÒýXk?
Ñ,L«žÉÁZð¶ù"4¿fªñÅÃ~¨¾µ­iÍ*ÛéPZmðR)™¼%ÃÌµ@Ç½N,P–iTû¥NÉÃÓññÖqžpŽ2Hø-£›=,9Á®§ÐÞÆÅ³+Ç&däe±ZkQ`á3¯]P&äDá«¯æTâäbgAHT
]ê)Å‹p´×akéR©c·Heó*„¬ì:²_Û·<¸7uî¶`cýšik7¬|å°ËïŸ±ÉØ¯€j°š`¥ÈSP%#[+k‘Ê©ŒV9`®Ú°zÕvTU)ñ{Wä,2mç*^]‹]Vƒü¬íª´ÐŒH`ÿM{ºÖ1ÕéQ*#;[,Ž¨òg´`m‹à3€PsÌ1U×ä«¡µÔ’=»µ¼
óÝ¯F ^HÊ _^;P\Zûé`M°VbÎÑ;Õ©R-0o6¥ˆ>”¥ÔXQËÙ"Á§j!ÿ“ÐØsu!ZÄHÌšeÀS•®º¥"FÖ´fA•ŠÐÌ­\1Ž«³ÕŸ–:ÿ¼>:‘Ú?µ0u.|Cüåôr«³¦ëÖÎÚu`ÍYkË¬qQnÀxfžbÛßu‹wôhz±7)#<ž£OÝ?6½ÿécèj+«!Ö‰³†¾ÛY;9FœäÓ/
Ö\¤Ü4“#¶£ÆNÐ¯¦Ø#ÄAšþÏ9†üw-™³ÆÒ.û‘m¸öëøê€ñ¥È$sæpìEmÅjn"öæmÜ˜Àš¢þ[©më|H`úGò7À1ÅõóT’ÉÑM¨ÿ°†âzGØ	ùjëšÎ&”Sdb«%YÎYk§5»°D—Ä\K†­!`-Éƒ”³&Zªýãë¯§f÷Å°vYÑ£´0
±¨Ðƒ Úº%@rVJí£Ykáü~Ì¶®®[tå±Þ·oýâYØ»»{ïÞ®.UB²äó8
ÕòXk~4‚Ãfá"0[W“%«RGrEzÕXðÕhSÆˆœµ=lDAâ¾¥1©¼ŽZÆùûÈËx `~O–£S\Á´IÚ„±6ÙcÛ¶*H‰íÚùÑ©yšÔrTA*m73˜#ç7dV#å… Ü£•2I0Äb#¿^Ä8T&¿†¬ÁOa:­ØÿAÚ­0µÂ¹tÇ²
«Õ¹Øš™µ˜¡†˜œ¬Ab‘ä2c¡¨#Ž¼DD*jDd×L)FDFÐrß+¿:IÚ8Õ«ƒ½3é4¬¼éõBkzÐ¥ú™€t¤ÁÔâ4ÌÇ`J[¶xkw®-‚>6[íIuÆ°¦[Qtzrƒnµ¥%¾i¼ôq‹³FÃ5¸–À?Þþ£³ÎÍÔ°›šw‰ýR])ÓÆÓ!‘š»æ¯iÔµÀ1997—næÄLI±£=›T—tÒµîÆwL”¢M÷73Ö¶,‚|ûí‡?ƒÅúb“Ž:}ú@œ."SÍe‹$ÞÚ½åÿ¾Û¿­mmë{1"Vãõðbü¡5
!Õn»üþþþÔ”Ö#?õa|PZ‘ÖûœÔÌá¶™¬I˜·?zÑ¾ø‡ÿÜV	i™	®	[æy¯ Ä¹Ht*,u’¦ózI‰ýUNÐÕà³8gB¼j¦ Óâ³Qn’„ëSÅKrYˆðšÍå*¥—ôle…7:F­½ü²³~^§)¹ÿ¹gžá˜3_}~š©ÌÃ>Ùý$T(©'*äM>P|q&ÍpmµÄ$6O½Çk•ýG†‰O²pïÁƒ?|pïï<ø­~óþÉhíú%â0£ikÿ2Z£\ªÙõ‡ÅlôñHÐf×-”U)dµ’eTØ>Q’¿W2f‹ÚJª¼§;+ ÛNç	XSEdÜ·fÍ_¬eKj0™dÍkÞ‚ËfMj¨<N °¦x×L9œT×l Á—ÖÎ¯a²éÙEÀ°ûŠùS²MðÜ©)
[Ö6zzRMhåSUn°§³ÖXUÉ*”?òˆüMƒ^I?XôP\·š¦18ZÓ¡ÎUí\¶.6Ý\ÝÑáÑ©w¯Eé:1V­ÇÆ8¬Í.ØÂP°FÂˆiÓXKrûŸHîoïYÕŒ×–¬9©ÕYc³¾›€ZÖ=ðøúú˜MWÓPìá­°Å¸–è…-³û‰îWäÈ°†±fŠsE¸â«;èbêbP‹wŽ’Ûßæ¬µ—AºËwæA¾mÎdf8&‹ŒYknåp,¶Ö,Ã¿5‚ÄÔrœ(9Â&[__Êìàt´€hV#9
DK¼5î`sÙÄjÜ]ä6öuK	dÜ±–ô«jm¤vñìÏ^äªc)Æµ–ü~$üSÓ¨æœµˆ×0×ö	Öœ6m¶ãœ9¾9ìÚÆ(ÑÑ`âNs­±·o½› Ñ.~Å[Êî?³­ww­Ãn¬×U iÆ™ŸuaÝ–Ð±Æ.ê_ã$€Vóg´¨1DÍÏîñ=á¶Áë=eie+4ÓÞžÝ…tF¯EJìç|)ÏnôÊ¤Wœ§&{'‘±Z¼(´·¬mœžø’‰'ô“Í¹¾™™t.…¡Å—_®4{;½q^ó©@„‹n–í•?`Øš`­®ÉP˜VÖ$5‘ÝiŒÊ'c$„©VÏÔ´²Íã¥qéLi¶¾K€œP6$iº‚lò”jzcÆ:×8ƒ…UØ‹Êúç¬šéÌ€K«gpïVE"Gúr”BBku •ëåjí]EzårŒ.HœµÖIsk§@«z.N‘âÏ˜5›6‰w&­ÒØG[vV~ýë‹gIEi«³&h’QZuÂN§NüîÂô ‚1<5ÑX@?þZ-WÖÜ™”aW
6-)NSV[*&'KŒ2u®ÅSs˜–¨å8åÞÔŸHI’ «Q	¬-	Ñ©éÊc5ÄÚH«é×mcm[ÛÚÖ÷^ÿM=k÷5w?€Öâ:HŒ®)ã×bFrlSt§Q	ŸÊÑ.xA¡s0ÅpMÒ¤c@¯üÅâÿ‰±†ZSFZKpÌäÎô+AamYv&pa#!…zVYâÈ/@
 ‚ÔH@hè,h˜šêâ41çÅ©ê“)þ¨¦¯\¼q™X®ëg_6kÜÇÏŸ¥Ù˜µD¿Sê»*2£Ucg¦¤øŽ’F…f5P6˜Gaq¨Üîäí(tT¨|¬åÙ+·ŸÐ‘ý»ûï}øùëìíonßýíÛÝon¿:?9¦5ƒ5>ÄüÆÑZý!AŽæªÅÆšö¶æYž•);Z"àÐFZgA¶¬@]À†6•Ò¥&†Å@»§ŒøÜ…	y¨”ä>"55ƒ•¼l¹²1È£^ÃÜô¸O?3I™¡£”ö€,•A*>äÚ«ŸËås`í0ïÏ*†4kMñ"§R‹k@Ý†ŸîëmÒ9ðAŠ·ö€OjXÈŸ³'ò‡ùÕé)òq5èÜ™-
ÕìqŠ3¡¹bVÛ×8¹Qd;‹†ºùÊWQßZ¥22ÂÕÇ$¿ªðöK‹SÓS!µÎYÓÕ¡Z»µÖæ¬ÅiTB:gMž}IòN$Í‰ÏäJƒœž~ô|¾¿÷£¡£G±Õ€5ñè±ïtÖ´ÚÚY•"g_íÇô¬=íÒ-b$a5¼¶£ÃÄˆÐª6`‰Øg¥K’¹U¤V­5˜q¤Fk‚´Ä=k±}dëä$G­XÆñ–‚ÏŒb\dI#ˆ®µG2£Ö¹6µDÝÜº":„jGÎYV£©e(vkÇZk,¹Ài¶\´7Äjm[Co¹DHáÚ—±·­ÍÆuÂ39hæUIu¬à‹êFeô¯c”É$mdÝÝua¯Òü)äŸõw)#ìÓ´Göˆ~kæaïRD‚ :sþ6T-ÏØkÍÆfŒÊ5ÚÓ„jöJæ	Öj8pl :œß!>KwÈ_Ëöìa?ùüúF&}ƒ„1ò ñ^$XÍD	˜WA©ñ%ãŒ¯6x]$àÓ;5‘ê“Û¥€šÜœ€Wq2òmöH™©™€&›}3ÄCÚÃ
áÈÍbP'ðØ‚ô`@ñ55‹]HÎÚÿ¬7[s$ÚŒ°y£5Í»Æ4S+Ì27gì¢ÙØ™í¤¬HÁ‹¥Grw¶,dCRÙÀmš™[åÐýÞš,„v8êà1×4ŽŒ–µDIä)d|E¸ó°y.Ná¯]ëÙZ½‘a¥=Û†`meåìfÏÚÇ?C‡‘3»8¹ŸÏj0<÷ÜkvÖ=#4+©/¸à¥s5%µ…rú“äB`R4	ÛÃšäØ ’&ú´aÛV´¦PÍ&ÔXd{Ã¾š%AšÅ“ÚñãŸžÖœ¯f¼FäGËÒGÛ¹ýÛÚÖ¶þíû1rÏ´||Ykwoß½À5…Q9ÁØkƒ5BF\ÊˆU?‰·6¨}ÎôtÒ	 Þæ°DGÐí´¦RÈ×^›QƒXPËh	ÆÀZQ#jL£•ó^Qíç¾kjõ°ÛÈ}&Pæf™]­éB€  CÕr·žÖîŸ]\¼Ž¬)öB8Aý#’½öÕÄi‚gxÓRwÚŽ¬½*ùþÌLÓÏ—C„à}½:\^ã×ãæt¡2dã°óy`­’'òZÀöüîÝýwõ¼ÍÞ¾}÷ÁCúÖÞŽ"!íGÇÓÖþõÇWæ)L`í‡Æ[3)-‡½5«í`ÑÕ	f¬–QEÊÚHlkØª÷¨Œ•+«ˆÁë
¢Pé+ŽeÔ$†«fåOaeé¸øÐ÷G‹[¹ÌOÏh‘“
„Ü™ñô×é•»Š2˜›Ó¹ÆÓŠ·öñÚyl4XMÎ%y›2QùPÁòóÀP“Kk‹!õG¹¹Ïö? ÒxƒBÇñRZè—ä_¦{è‹£ð±f<å èïQf#K°ä²d²eù¨<z$12×ÊêÒãyèÝ³‘²`Íõ°£U-¸®ì¬…ÀšCµX‹ÃE’ž5]PËœ5ÝOËš íŽÍ\³h·rÊõY›¦«®=·vw•¸Ò­¶ÿØ±ýÃÓÓ›°æˆŒ5Ú22áµYœµ#–ù®,/%uìé¶ðG¢E4›äÉ„Ö¬aeë9k	¥µ;kÈzÖ€5øKŒXû(XKŽœ^LXmA~[¨ÛRû¬2r;xèÐ‚MÇfÄ´XíP÷¡ø¾ôvõÁý|T3EºÕX@5ÓJ+©¨AiòÔ$6nß ŽU‹·&\k±Öœþñ%¨†„kÅgÇ"1qá³©_M§°
Y„•<ÚG4Ùñ‰á
Ö Î®ƒýì[ö¿¾0[éºñÖT"Ù¹kªƒÌJáç(/3mï.zÕ€?UEf÷t‰Ú 4b!ÿ{çÛV®kéÜÍuµ¢V[¹!Â¡Š<hÛÛKn¨‚NhlGH+•	nÜ†jÄ°Ü™÷o¦3Mp¶˜ÝŽh‘š„¶[4Q”Ðd¸(ƒØ¥‡ÆgTQ*uNgSÁÕ0s5çy¿ßZ]uMîÇ¯—×Z^vÇÛÏz¿ïýÚà×Ø¯`ÈVœMÆÎ¤;ðÚ¶ð-Lë¡[7·‘9fˆÿë#¿?!ÒÙÕÉØ×°f°ÖZÑÚ•++—yŸ›Í<˜Hhµ(Š3}^«QLÝ3C¾Hâýž0)’ñË€[™6/—ìNá^e**Ç~«ÌÁG~Š?AQãêÒ´V«8Z¯K4 «ùU>*¤øœUAÖå„#jLê:	Ê1\Ž!è_&x¦f6:Ù¸É!<:ùv™qyµÕUDûÚh•"MÁZ’BMŸ®:fbgá%aÆr¬Âš‰È÷V(­X8Ëƒ »÷;ÑQ¿´—â¿ÁÆr_Ã|:N7ž¼þ,ÖšÕ,Jþpð«¾ä^ÆÔ%NßÖË¯­
†do½b…ŽŠ~ì¦Œ4§[ÉDàg„±PÚ<§HAá‚Ÿ¤ùi€*(Û?g¶%b–{°øQÇ"cM¬fjJ‚ŒYñàÓ3CµhÖvk¨!1_m_F¬ÆÔŽi«­¶þÑõ?Õ>² ÿ.è²iñÑ³k‹“‹Ùä&UA*¥OÌf“°}áú´oEð¼ÓÓÃ¯#«ßMkâ5Gl³çfùc.,+å=Â¯˜"scEnùfé”ªc,ªŠÏF¼¿Ø$¥Ú<YH…aóÄ`Œ©NßæÓÐÚ™…¾i¤Ï²åUI²¼Xõ÷ß:øâÓ“”¦”&’²y@P®N0Z’ðJ…:}Þ®bÈàÞT2‘&X£ácÆÚ.‚>”pÞ¾¶ñòÇœ½zãÊÕ_ßæW¿ÑÚO~.[1ìÙãÌãßh[Cbµ¢p¯”OjßÃX‹I­C°6>6R!PDÓ:Lì_ÚJÆ
…ƒwL^ãà©ÁRqi0]ò8
âÈmƒl!®#bœ¦dó‚/â0¾YªT…‚ØÏs#7|›óÌaÑ½LV#x¼®kË¸KÏ†#‚4x-wìÀ³×“™å×ê©`rmmHåJ|+âlrŠö¨º\Iòn“W	øzÑ…±­)q’§TàjÑ–@æ&(³(y.ÀßÚnÒ8kÅQzgÆî¢^¯H¤âüY9-ÝÃGrÏWÄjS­=k1®IìIëÍY[	“û"g-D¶k¼Í—k%Gh’Õæ'¶o›šP=äöqk¯Üß&ö-=k­¬öÊÙ}ˆ”’§žÒükl5ƒ5Gk–
ùã'´ó¿Ç£^rßÄùØXYí;ç¬­?f-òÕ(ƒÄ“±¹iÂ±{;ÍÖW‹„|†#ßO­Þiýì’2"¼y~³!dö¼"Eþµ¸©¥íÚóÏí;ú'/]šÖ>Œµ¦~µÕâË}Š†dKQ%d<l^‹5å÷;¹¬ þGLðåaÜÅ–ÙiNøjT;ªòS\¿7=8ôQójY	ÖÞÖqÊÉî‡þÈAÑÈkÏÖh]ã6Mlf¯yô„´á×ÜÚ¼!¨sVÆÛ°eXGiEÃkæÁjÔ?æ²Xk™dRA#¹œÊ·tjB´Ð[ÛÈ^§”éÞÛë†ÔB¨4·¬]4X[€~6Ç˜¹¾YY^ÊÌOô’,ÒÅ\æ"1"ÅB€”-EËqùÔ£ëióâŸT.$äFe¤æ{ðóÇÒªÂjÀw®R‰;6ÙpTªD#À?;ËÀ€YèK6ÞÜÜäÐ,?ZÓSP™$°âS¬?ÕÍýŽÅ®'d±ÕqÓfU*0¢Bü°?.2CÏƒ×N-}tòÖ}¨ÃZÓ`pµ®%ôASçùÝ2ðÙ+paÅÒ·Ü˜>ÓÀx:p q@m×'OûD°f…üŽÐNù[ööR¹Ÿå/1F¥‚¡·•ŽYpv` ;ÉC ä _‡è·Óêó‚5~>þ"/ª»ªG¤×„gCMq1Á%æ`µyGkÑ8ìÖÔ~:ÖîF°æd´¶¼'b5Œ5´¬a­®}ÌÒ6ÖÚj«­x™µö¨æFc›µNÆ†Õ¤lj“‡º³
Ðz‰šÒ§ŒXS—–9îpkö7gWço|ð ­EkÂ5é\(¢<’²ìr%X £åË‚Œ\&GŠˆ&40_0Jðd• 8çY Æyìåå´”0”Ìc£èUqqåŒ¾ia°í^¦bO°ˆóó´³Ö,ddçÞÏož~úó_RZèA%„ê+K©”¡Þ%àçlã¥¤NÊŽŒã÷Ôs8}Å"s±‹ž…¥íØÉ6háNç?:{ùÖ;W5œµ(À_³±_|âÄéÓ_þ*5g¬¦ykEžµ¶µ¿‹j(d5þDgÇÈx"#>ŽÃ5`ÛÒOOÉYëW8Ó‰•.‘9’–Å’¦Û‹‚AbªGñÞ""âJD‹—+.áLb±y%L¶*æZ9·)ãFÛ-Â¿Kåì^nõnê^^&fäÀI& ™méJt¬±ÂUFû9/{#¹¼Èt€Dƒ&òºEf»±?suO]q~6H¿Î&1bÎ·Ø1ÄÏ4“´éÖ£Yð	òºP_QÁ"È†Šé´6~“NílÙa6ölŸ-a)TPj%tj*÷@Ïš–æž5›ÖB\»hUf­á˜°‰œ5–ˆ×®u\+q;åí]Ã˜›w<ùÔ“;ž<ÿøÔö}”(6¥A:4ŠMµh gTÓ²5š†W·÷Ãßï»³yÇV`,È}wx°(-ºneõñºsÖÖñÕ¢GlrÖšG^#ˆB3SqËt³= ïnEFø#°†‡¦à4«1(z3Q"¤ŠÄkÐžªýN¸ö`¤Ó»«9í–¦ÖšeÞš6 [œáßàï¼»ˆÔ¸ÜÓÙËg­€¾²HXµJ#%;ŽU&ÿµG‰$Û«=zÞ:Þ. P©¡í¼xíŽÈ¯Ç±ÚÕ;rM÷8›í½1cÍÇic““FI¤ÈŒž5G¦ÓÁl€íÆÐµ-…M®—Ìfp³”´ËŸüý-]Ù.{?"³_Þ¤¦w(;ÒÝ—)y‚µ0²9¸ÿR¨••Ë¸Uç€'&)’”o-dõ,3ÓT7Ÿ­äÁ+ÎÓô‚oe
×åý/œ*V—Ê¸jI}ªTE"ùZöÊ…ŠÑZ!/Î«©ÙÍ=@á u?À«~¥1Ø2ÑÀ¶ÉCAê"´Y×ÊVŸTïµÜ}ŽÇ¡yý„ÍY'õG¶ùÕJ2?ZÄ?cêÚÒÌš9”‚Õ
"“}ÁþSå o`/R¶G8» =Èj¯¬¬hs¡î{d||‡¢±ÕHAø{wõîgŸM^&òúÅÝŸí¶Ø]kÈ¹i²ÖŽ¿ÕûªÚÖøœJdjÞ€8+«h‘$Eç*:”‘òŽq–„ê#ÔÑ Û›5XãI$êrá8šˆšÓ\Ïš8•]Ö&qV³³q°Ö@¢–Ô~óÕî~úÊÝŸ6ä¥…Dˆ¸Õp°ÆU¬öÛwÈYÃZSÕÏÚÆZ[mµõ¯ðvø!Æ¬ÒÚr´¦Ik‹IMr´–Ö¼y'ý”}ÒdyWË2ôÆˆ2m‹¿9ú§+·¿y3Â5ëÞÚ›kà¼krÀR‘«”8æÆ€5Î¨²±üþTÁ%æx”>ŠøúŽ¯†ÃG¸âDd°-Ú°˜Q‚•BK™ËÀùýÓŸ]¼ Xƒ˜¨‚D¯¾z\››,7Õ¿öKZ¾4©RÊd@µ£†yÉÉì–ÚáiiÀN+Ò»P©tn¤C­ÌÑîAõ#.Û FÛŽqÎGoÞrþò×WoÝúõ«woÛon ÊGí‹ŒÇQÛÚä,´6_S|ä­	@¨›¿ö}Œ5 ²£cdXû%ÙGã¥qA²=õ0€’Î n Mg'”cq÷]¼n
±¶>vÉì_*Êœ~D8b!6Upæ@OGÁ&æ"àZòÇ
Rná.úR·¸–HâonZ>yòÀ1Îù
Ö>§Ù×¦c­}"Z[:Ù¨’|¬[ßÈ¬ A­ROüõ¤ÖÏ¹ßÁZ.¨óô¯XTLã‰À»P8%ŽkÉÊ8EkÆhƒäñgØ¢R!©W#ÝY4ÿŒ™à¬mìZTþèå*ÕªåéïÖt1ÅÁý-ƒÖ¸ë9k+5ÑZkÒ{±³ÆÂ ç;Jþ£Œm|j|3ÍIãD®Lœï¸³cŠa-ä¢ØXCßå¬-LØ„kòà3‰·ýá“Ïÿ˜ÉÙ¤Aâ¬í{f+ù‘Æi¶fHvËœµÖ)k­Èf‹zÖìçÄ&.sÜÁ°°ÑÒEœdµïkÏƒfV§ú?tG3×(‚„Þt8†µç¶=âHÍX-–Aê‚šr ws1T›¶¥UÂµ˜×Î˜â¾5³Ö,À?2Öb=r^ÙŽ˜i.’ë½ sMÌvM°&ÉXë‘'V“ö("’9ØoÜImå#×èX“,SdX¨¬IjRó|zÒÈï¬ûÔZêˆéÕgIíÖ6äf‰z 5ÁZNsCJ‚zŠ÷5fbçlÄ¤fÓPkÓ±;y/!–„Gòh"1Äk­°’Ú•K+¿™ÿ'¦,ƒ±ÎpêI”_®Vtr/Ìdb£
ÿ-d(¬æ$Óá"9µ.C¾E2‚º¬•óA²‚8¶”Ïùøu`ZÞr!WÕwæ¯Vk‚5*-l&Y„¬?ûœ"û%‘HÂì#¥øÏWgþ233¯*È PðH­ZY­%û
š|]%j„
ríÎhW#½¶©Èü5?»ÅÎÚù"ÑË°¸|Q%¡‹¾¿˜mI¼Ööòiêü4(*@œþÜÓ»ç %ºófÎÚqç¬éGºÈÔ[¬úú·=¶3 ÁÖÿFxH!×70 €ù!Rh;ë-y|´YàTªS3Á–?¬ˆ:r£‰MÈ’î–-†ïïZcy\¹N$ã|>m|úé»¸_?—AŠØ(‚­a­q±qØÖ¡Ñ6ÖÚj«­¶d­ÁjFk‡°ö¾Ã5dñý¢µ¸d’{ÖOeE*igÝ“â«eù¨dá#bþÈ‘ß½ã‹šh-,…|\s¼[6é«jÊ&Ž±*L øÜö«KòL
©œxQéóÐ[>Æ_ÖJy…PˆÕíg^X^tÇ~:½pizZ³Öv8@w3¿ 5e` 0í¦ÅŒœ¸ùùççð¥äU©Ê§³£+Yg:,nÒp.‘á…º×	¬TtY9-+‡|‘ŒÎ:+d„›4²‹õyF¾&^åÆÇ7€µ{´fgEµ0r>Ÿ7T3X+¿üO«yžÀ0õ”G!®É&ëµ§œÚ*X+â­q-â&eÒ–ÅAÜ†Æ©ÉBó(äeÑËdCË¸ªb©4òŒË®^Jë.Ù¿p¬ˆx5Êá}Álÿµz.¹Öh­kÏ^‡Ê>ÿW´RÈÈ‹|·€ÖŽdÄëÚb!Å"‰JF£ø‰š™Z¶lÖ§uÅZØN¸ƒûµšfËé#èd“f0ÈWCÔk"ùh¬yÒVÔiåP*ÃlpKŠÚ¬”Dkƒ.càôQ¥XO(Ee¢:8Q™¬¡ÖžµPìµö¬MP+k×uq±!¶ÐZ[Œª!™ê€Ù™5555þPÏÛ<ò6e|¥±žËÙ×â¬±ü]gMXµ ©MÑ‡†µæd“°£«ã¶çŸ²kOýpßïÿ…XÈØZ3Åi¶4«•Ô"PŒ{Ö~tÖX¼ØCºÇ>ŠØì€¥DÆráþß—Öî¨VP»ç A7Ô
â(é^»Czî9†ü¿˜Ôt1ÙŒµØXkîWsÆj3§½Âå[Ç¼v¯òÁ¶5ÄkµÖL`¿¼V>F°¶§ÍÉ¬7`­‡-·ˆÛ4|ƒÿk=×ðÔ‡GPù8E&è›ÌOoþ_›7«sX3<S‚¿§tn‘ß¯jÈ>[ÎcüþiÚÏáÅJ¢TªÎ•$ÿ™¤ÑZÚª k;6ÙÉº.êÀµÞÔ^Ãš8%ÎYY¼¼òÚüÏ~yp£ekr½*eü¯!•ÛÑ/Jæ•ƒOˆT
Í¥¼°J°9¯pÿ$'rê¬›ø9N™Uj~>;´Za,Øœ² ¬Ñ§Æ­ÕÚd6©¤Çþ!Éà Ôª)E„jH&²æW÷ÿß¿ª‘+Bš©ê~ °>¬è¯ž™É—GqØÊµC®ê²ìûùÑC
ÁÞŠä¬µ(^$fµ•‹o¬$ß»r…¤‘Åä2q}ßFj}á&Rt¸çPÿšhmúzßòÅÝ»)ºFÏÆ°æ¬5mpÕ”¹b†mõJ™âGu¨ø$ö0Û'"ËGI5„s¤·[ã.ë}‰I±’ŠÀwD¨dVKf-óC÷Ár¡zÚ"²âþ&Xs5sb5–u‹ ÿC°Ö·ò.^bÎ¦±pYXn(¸ÿ]`-ÔÇR{ v[mµÕú„4Z“VB-¢åEâûåkéj¢Åº‘¡¶^ö|LRdÁá„ò"³%(Î]ù X‹J!CZ‹qÍx-Òd½²J”3ÌÅ$¯Q„‹ãÉÄQKÅp”=Z!$ gÞ
 VÃß!ÃË!: ˜®®â)	«íÈÊ¥éÏÞ?rfú"ç%‘õ¬k¦ÓC7m÷ÄéÏ¿,ËœA]€(“ªû%bòSÙ H!a$™!ªCíïyp \ÁIÛ@äv±…h—’!É|øèêG—oÝ¾qV¬Å®â'|Ì*R•|1gíå¿kåÕ—_þÅj‰¿JÕ”T­¯t\éutzÐ‰¢EJrŽŠL/EF¦ZI-^ðªjK£¼^ÉÌ4/×"~¤7zj”E7šNSÖ@9[)Ç¥X |sS—†« 6É£´"|S0[8vòäÚÚå"R)Yt?.ò“'ž=†ö07[ðU=ˆˆ“OÛ—­ÕÈ°üh;—[¯hfÒ@qv’… äº³~Q´¶	e8@T$¿›‚€õ´ðpÒÔ¸Èí’îëêÔº¬qtçBQ‰¹gy1wô¨Z72Q;r–¡ØÓ÷šÖL1®µŽÅ6\3½Û07Mmk\kËXv ¹õ#Z³!rä9Æf)+¢gÇ“;î<IOY<;Ž^œýg…4HkdŒ˜h]“E #µ¯!öÔ¿öð¾ß?µï÷ÿü”Ì´PnçqdK¾—xÓ¤ÈWse÷`Í:×"HƒÃ ±xæµn‡´Æ½Í‘ßO=~Í÷Ë^c!RxQDó×ÈI|î¹çð*5ƒ4“+‚d‰qM¶šSì«ÉXkF5!š[œbbkòÖd­5[ûÍ]kÿ­vë',“ÁF¤+‹ä¦‡ßHµÕØÞ!ó1u-¨£‚–=E ¡]“E·çqöL›	"¡¸v#WD ÖÓ¬a¬¬ƒbÃÐ8†ŸsŸçÕ¼5¶©´†Ë–Ë¤3IŽ÷7óÖ¸²ÍläH6ÛÕÙÁ_¿ÅF†lÁXÛÔŸ‰úØô¬íÜæ`-æƒµ7®,*\ñck®'L©ƒ•ú°&ÿÆO);J¸–3|ñª§€µBYÕK£å¼üõ2,†EG°ZƒÕÚc:c…÷øQ©þú|¿ÓJ)ÂPDš<Y†HÂ8o6Â6ËþêÌíŸ™©ÍÏ&4„;ð«3¤QYÎ6*\$ï±õjs•¥SÕr~,ÏT}¨©gï[2V.Ryeah»°§·ïÂ¥‹ËÄÜâm®ñÜo´íl¬õ÷¯†Ö_¿~ñðaÑš¥A~b]×ÇÅhQ¤a›UžïhÚTäâW”ŠB‹°É¯˜±Ök,Ž±ûfÍÜâ¥rA¢_|6Y“Èˆôí‹åöÅXº>p\¶Ú<´kM©ý1«½‰³ÖÉþÖ¤øëm“k8sM¬vá#W‰>lçö·ÕV[mEƒ±®™±æpíµ±°Æ×Š°
ÒVŠäfríéöÖÞÇ®JL¤9ìÎÒýîößÜ~€ÖÌ\®¯ÅÀvz–"Œ²x‹®öòl¶XÝ˜–Ïp;#¨À,´±Q›ý•"[¬d%siª&Õm¶)cB bqñÎÚÊY}%{]
qÝ5	ÖÄOŸß¬h¦t*Õ™êJâ¬!j¡ \6x>.[=Ùµq8_Ó8¸âöAÁâÈàÈð–‘‡GðÕ˜³dm¬‘`ñÑ‘}}óLÈfÖÜ;·CSñÒ¥ÃXkŸ¼øÏÎæÕ¶&\súÅ¡¼†]ãÕ‡¹Fo[Äj¶«ŒwÐŸõ0ýg€[ÉÅ!ª³ñÒ[›°¶$»I°ÙˆaT.Z\’¹ÆMev@@pÏko$W$£@Rb^>ÊQ‰Z¡,•øjŸ­‡ê×t=t]g|%÷Ú2›üì5Åþ„^6â ¯/ÓURá’ì Ò&Pß#ÍóYÉð‡Ï*ª@RF$sŒjHåNB3þç,¤ä«YbŠ®»º…”ÿ™mƒtâ!Å€ÞÞ8åúEK£¡¶vŽW+gÔ&j<`ÂTdÔÚ·9kÇšµÖAkxkôý¿‡§f‰ìkè=¾n g¦¦-S;ž!úomxóÈ8NÛ„érÌGÍÎ—Ö4HqR4gÍô0œ&VÏÕà4[¹›?bo=Œ¯¦ñØ1®ÅÎu-¸æžŠÛi²ÆFÎhÆ"EØ¥m„b‘{nãÇ5F>ƒ!öÌSO>÷Ýzhb³6SçïË¸ÞÑ´5^Õ}Ø“G=*8r¬Ôdªq]¿2¶ÕBRãŸÕ-ÖB5ÖÓß‚kæ­­Û·ÖÌk¦£LŠ`!0ö¬ò-Ï"ý¬ïœ?kÛ)¦<HSwÎ/r¦Œš§~‡û¦vìØ¥ŠIg¬AsL×³KœæÔc	þxlnèZG½ ÀÂÜ6°›Ñ¶ hê kê
ÎÀj6æpÕTáH¤TçÆÖ©Öö«E´ÆÆiçÁƒÛZ« /ùÆ•Y+©›Öˆ]¯+ÐóŠzyáúA®/×í`­bC³,o?ŒZƒ‰`5í_âÔÛ$aDJ¡©J•_?Ðj~¶u¢¿f¥1óH¦šÖç8Ä}CCl GÑš8à­ÎãyZµC3ÿµZO$Mj<4¯ËÙV›©P>4º4£Ô“òÌþ¥ž‹ª ©Îô­a/¦µ–*È‹WÈÃ\\áµx¯où½å‹!¬…ÞnfxÃŒ©n5¬…)þZs«q¸­Ájk'¿˜|‘cÇ`µg_´Ï¯ãa¤ˆuß[ªe8q‚Ì¦ 	¬	ž c`K“¼Jå8§|å·ø¢7 Ô|[‰~¸TŠ¶†µ>4ÔZ‰Bn‹MZ‰Õ@6A>ÝÜ°&X»}fE–r<Çö[$j ñ0lcµö@ì¶Új«-é1¬¹üþ÷­’DHÁš”¥vƒ256©$ßžˆñçó}Î÷2É„+cï°³n”W$8õéÓØ¼reåãûhí>sG§cegOÏ|r ±¯\x?tÆ/óüBQÄ–)ÀrÜ9–çî†Öˆˆ¤U	àû¼š­<Z›„%˜HgW>æÔ&qÓŸÝ£5g¬¿‰ž¬©gíæ,–Uâæ€g­ÆBlA”J*¥óÒY2"óùñ±rkƒ6\ÍúÕØÅbS1$×#—?ºzõÈÄÕàÚ¯ß¹}Û~oqn4Ž}nÎ§boíonÖšüµ2¨ÆBÁÑºJŸ›Eùý*œ´¬úq`È“ŽÏLNÖÒ¸…†È\²‘Ð´§a>±#÷ÍMÈ.íUà
@‹’íæñzjã¨yš½tó3Ã0kÎÄwñáï+ÝqmÏòÚI`˜~Ò[ˆoQ¤2\`5D%$Àöìu‚××êõ¡zen²Ogx^S¿¶ªó½•F2ùÖ×m	æ}µÇÑ˜¡)^œ˜!³’'˜1¥LÚm½AsYÓÖƒ7¨ß˜9sª5»ÛåöÖ:ŠƒùüÑ£S07œÆRÌWÖ¦Ý”µæ2È×ZçbO³ðµì‚òùR½ðÌ&p‹¬á€¸­Ú”d¯->z~Y4»vl¿CŸÒ†·Uý6Áš¥AÆ®š6­ÙýÍÌôŠ`-öÕk1¢Åâ! "ÖDŒnm
îGÏYsOh½ˆ£<`ÍÄ†î3WžxoÐ#x{ÆY‡ûKƒ
´À›#\YÖÕQ[âDPÄ^«"`‹]µ¸ò—æp±š@MžZLiª™Öâß\	yÛKLkñ%T´óG.ZõÇ¯ØÚÞW_ý7û\¹G[Ä‘pWùã¾ ­'ÌQ-¤|5 µâ ýôC:”v•‘®YÍƒ×‚I#ødtª¥h=ÆjAŽx…Aöl”—–äV&HÁjÜHå” ¥½ÝÉ9"kÔÐÝ
:}ÚÁZd*Ñ!l°véÊk³¯¥þîß 6>(DÄò
°sÔXU4°ƒÙûeƒ5õ©aªé±TUÇ±"EPÍS§ªùd–v1¬5ŠüÀ&š²”P¤ÙiÉ>Vµ¼¯¯üÊË ­U-„ ~ÆšÄ–h‘94üµ!	hãñ$Ü×ª¤>*©Br'ƒþÙêL•È}‡Š¤TV‰­Õ3Ù_M%1ûè¢ó“-°F¢{†}Á õÊåÊkú.\„F °X`q·í`RöÇÆšmúX”*Òèß‰³v²±ÖØ³ÜX;¦:~*tžÓòE´¼ÂZ2ùÖcÛN?Qg¤Z˜+™ð±É´›ô­Õ¯’bÞB¼|ÜSYmüÃè'æØõ9ÝÊÙ3ž–žÂwÃšï²B5‹‚°­Û°†±vûî™ðOÓËöoÔbGžš–…P+Èu¬©™~¥m¬µÕV[mµXk+º¬,D°Ö€ÖXYË}äXËN’öáLïñ	q“lÂ“nª¢¨ûu¥P-d{?þæƒ×"\“½f:mÐvpr²ÞOHÎS'ƒâÅ‚Ü,zPB¡”š€5MTK™Ë§³®T®K“²KD‡a­¥=Š‰Tª|8=M×ÊE%|¸¦5Á™Éõ¬![÷wuu¿
ø‰)±PWª«3Ø×—T’éqØ@Ì+*‘öä!²âÈ ùi¬·K;FvŒà«éØöS‘¬91ñõ­?|tã×ï˜·öïFkÌÊ9fãÖÌ[óüù0Òu®Y¼–Š¡­Ué´]Ñx<»„G*äà)¾KŒudJ’§$ÄRZ 2¸u‰ªÇ­c¤?j@6ôf 'tóTV±”º6eä´)C³ ?®”Ê	¬åJVbZà¥–d«öëK¨B¼ãÉ×ÙÞ©T˜âÂà ÿ™Ì‘?ØÖkkÇŽývV‰ÚCýÖÎN…:öqïä¤UIåÌét<·i,_æß^?Õ§ó¬XRÿýyÜ“&#…ñ&ó±;9bþšõ¯E[ª">‘[ƒY™::UÈOLå
)ÑNtöðw÷¬±ßÂj&Kî'rqQ°Æ.¢¾ÍEA.¿§òš‰HT}ïÑ=»FvíêÙ¼á‘=wpˆáÇS¬¡{6V$~PŒjMƒ©cgör©ýa $;’ö !ŽkÒÄý¾šj"'"gËzCÖZ¢ûm&vì¬Y$?á—¢9YÛ3vA±³Æîˆ×Oý•+2¼úêëxùžj…4[EÂVªE°v	¤‘Úýzé•»ñvciÆµÈ[‹ç­ég¶B®i‰Â— ,¼8±³¾¸Ó1Ý¾]˜}-gÍ*™³¦ÒÆi[ü©È†©m«çh_›M¦{$†ew±º1[‰·hDÐuÕÞÆ-á:Et&‰…T¤†;º°ÚN0­ÛËíÚÛg¬vZ:WA^<¼›²½7 5ºÖÎý?]ÿ7ÏŸ:xð—dY`¨e…däƒb‚•TI‰¯>ÆY¾;¬zaÿ04–Êk`QõÔ~tªTÀ¦šÍ§.æƒD¢Â_¤©ÎöwUtfp.¬©‚I0qŸåBÂeª†d2¾à%˜'&³JSå•šPÈS?Aâ=v[•Ä’ñUp18¥5³?wUx~e"÷67­ÅÆQý”=²®\ÆY»¸Ü{`kb5!¯bì5{@k\†T	û¦Ð|¨¯í'À´¦ž5~ÖcMã°‰yõ±þäÎmõ¼—ê{kçÎ>šÐr…nû	f®^ ãŠ—Ò4ºî¾@þ$¯[Žû}›Ü´¨3-ÔÔÄd½qd3«EÆÚü\d¬­Ó°öæÝ3+WÎ93Î5Æ±²56´æÆaÛébƒµÅj·µ¶Új«­­5®¼U¢Ö^³DÝÉÅ„šÓ€5´‰Æ4/|ký|òlC@—Õ¸ŸÁ³…Üo¾øâömGkÍ¸¯ÅÀ&žœíï–
c~® Xó)ád`Alù\
l»ÆlÜaÊu1¿9·É”!â?›S{h%Ñ¯­]4X‹šÖ &¬jÑ5©‘]ü±
˜2Üa¾õ@“ŒèìÈÑÇ¡Š Ž´¿ùÛqnv U4`m«A+Û
ÞÎ_þ˜¾µ?Ü::qõwÞ	ûÖø
s‰
ÐÖ¾ü%oæœ·ÆÕXÍbü«òÕJ««éÏbé†¾1§w®•ÆU™Þzjë ,&ÉÃqã ¿ü¨ZÒ¶²ëòhí2ËqLø¢%£Ø{ÚÛ<qÂ¶RÌˆG˜>C°3þ›ª#	Ñ¬„Œ@MWèÉ¤Oý\
X;–]>öú±µc‚3uåÙr\¬öôÏaà?ÿùçÇÖ~ÎllEq[£ðhHÁý|§²¯IÌã+lJVVËµŠßGsE)¯Î¿ÂM=§ ¯®DŸšK›Úí™i:¨Zª<å‚ŸknÇùe#:bW#XÓA²ûK›¨²ÌOäSÉ£ˆŠ³¼`íŒëY[ßYkéYssÖNk*]aóéã·1 -2-‹yÈæ±]ÞµAÚÂÈ,õ®	Ö¦A¬c­×³fiÒ(Xf‰"Ö¢›ºÆ.´Æ½´«)	r"Êîwr°&VkÍîÈ1Ä¶õœµ¦QíùglÔÚó¬%8,²Ö,täG±ÂºÇøÐ¾#5.¬áœ¿ÚåOºFkÛai9¸®ÜC@5.b5–fT»âHLµÿÝÄj¼W½tW‹.,÷»k¦–ÿÖ¾µˆØ¾‚ÖXÙÅ›vt1d‹™m}^‹ÈÎpmb—B‘Ée‹üÑ†®t¨ùþ¸´Î¦ÑÌFßšçXfµB‚ÒÓ^Î²ú½B5³mà’A*©ú®Àš"ŒX!`­—Sbý¿â]XûÕitó>X#`~XSÞxå·“C'ëÙùùòê|½ÿàA×…Î—~bö‰êíNªJšŒ³B.?ª÷«CyŠ +¾ÚÕq¢iÿþ¸”“³ÌªÆù²¸‘J²^cà³³yæVWiˆ#ÁÑ¯+lÒÌµzb¯3†„4±I–Þ/Sd¸ÍÞƒ$ê(çÖ´ªå™PK%ç°ÛªÍÕ8~ˆŸYI-í=´ÿ…*Uàù¥C°úV¤8_$Ìí?p¡¯ÿ ¯Á\!¸u%›\^iÄ¬–ìŽ÷­R‹¶Ö"*Zkà«¡×wï^ëmð¤/eì†Œvœ¾5ÛAÂ·{·%(í~ë‰ãÛk	*_ ±l–ç¬X+”å½Ý´¤_ó†éfÑO‘ ¤oµ{fMÇ³$wÖÍZ‹ÓE¾½aíÍÛWúËµØ¼c–?­ý¶aÍjá8l_FÚQmµÕV[ÍÖš›Žý¾Þ,ÑeiaayùµåÅI¬5)KÃ‘Tb—G¡û@ÿd2U×D÷æ›e°(ªXË®~ó°öÁý´ÖŒkN¸k`ÛP7%rnŒ—h}…ˆPòèu[Â½Sl<îá‰¸Y<„µŒù¥±êRÑrÝÇðˆHA4­™ø´;.X»‰XŸ8m»ŸŸÎ¦q³†G=mì”è‰JMê÷¥P¨+•ÍdDJôP¥Æ©WKŽk[·‚k;pÚØÜ>122µoüò[_ÖŽÜ¢iM¿÷8Zã™À4ú‰_þ*¡ £µ¿a¬¹TÈ—ñ‹*‘“í`m<cÓ*;×]J»akÐZ©3MŸÕ B1¢8<À±ñ4ƒÔ´F— gLþ”<)öÈá ûWiS¨LÞÍœVÏWC‹—’P’‚HM›¢óâgØj7Cóƒ×X{ýõÄ2$¶MÿÜÂ6ÙhOÇŽ]§W/'™S[¨­µß2Dóµ /Q+kA–—|ž=;^È(s4È‹ÊHõÌ3K—ÜïEkú'6j3¬9Pa)÷´Ö5UEºJÐbŽ¦ˆ³G'r‹GŒÕ*´-.6§A¶²{ë:kHvÚÂ‚üi][¸¼H|ÅŒÁ>«„Œ¶kDŒ˜Þ¨áklÞÕ³åñó²OíiéY[ÏZãÒì­¬ámÝ4­"éÇfá8T÷€µ&o­¹g­5Ò]ZH-îYû‘?>ãæb³B Û½\þ(Ò•?²oâ¦mž9ú»¿ŠÔÕŒÖ´4áš.1†}N‹÷ŒœBýÕE‹´æ@†³Õ¤ØVƒÒ¼h¹× <s×ZiM¨Ö
i]káå«{ÌæÖî3Z¸ÛªÕäÓ­Ž<„zhMÙ\-äfdû°é"b!ÕÄæÔDnIÑµÆt5œ·-=L¾4/[ÅÞêZƒÏr2×4æ‡M§§Äfo«îZÞZÔG»©—\Œþ!|ÁÚ—bµÓ¯Þï¬Mkôç¾òáû¿ˆÌ$_-Sø¬©“Ì™G½—ÇïSÑè»q(|NPø¬QXÇ4h±HgÅ‡àÚ©r"Q£ç­~ff4ocœçëI+ÙªªÂjª‘x[QïkÀ¢£5á€¦‰¹)k¬¨¼Kð°ºbüë®ÍmÒæ‰€f5°q•T,½)áøšÝ`¶r^‘ssUêÅ_xa©ÌÓ^ªöEI˜¬›§‚_‡Õ.’)"_íÂ{W.½ñŸDBÙåˆÆØ˜©ÃZ¼F¤÷G‰#Ý”Úâ¬]_>ùÙõÞëö®ÁÚqŠÍ¹b±Å¬Ælì'=±mç¶CYñ"FR*†©Ï‘ìdÅ^áiÒX@Ü§ULÒÁ³…êw°¦M¤è¸d vÙ¢ãŒn£ÜU2VkiX‹YíÍ»úýö÷˜.ó×íéÃZk8á¬EÖ`4­>¬µµ¶Új«­PÿÃ¬5ku&Á´&-Bk”BŠŽhBË²©‹ˆ0ü6l– Zƒmø,Îù|æñ)]-RãräÖÿçƒ¾ ²Ù\®¯EÀ¶vœÕ‰î9))ónðsÌVósžÂEà7€„âÇknC0ƒ.<“:ÆT×GáÊ —I£â‘…3Ÿ^ºB%:rwdþDÆšXí&Òj(ý¤G:Ò¢Í€íèÊ&Ð$bggv21™£:±Ø2uï.7¬]ÇšrûÇGXŸ=?|~ßÈå[Wî»zëën½ùÍ;o†´öŸêäàIðû´EBÆÓ±±×^–€µ—Wó¥a(5Ž–sßšDÛ„iÒ8O1=2nUéqnÁlÄiŒChüŒVSZˆª Oýô§jÝSO—PlLêÔþ% êRc[&òÈdôpÁ‹£²@#òÆ<UœæÝ¸»Œ%sk^Îa›)çÕ×N6ú×Ž­´©B~.X“¿†BXã;Ì1zÛvÒÈ˜.øJÑÖ8¾9T”§ÍwŠ
akxi5FÓæÇðÖP*Ïx©¬_ÆS°Iƒ„Ï‘óÔ°BåŽŽ±Ue¤8•zô˜î­dH -¬Åqcâˆâ?r„¡š¨NL©9ËÖ‡×éY‹ÔRÉeš‹‘Z£¡d±š6šJˆ³¶Hž°fÙýß¶¶5`[X3]»³kjj×sÛq÷šŠ%·Þ¯íØƒÎÚÔ„˜‹™×ÈÓtUÚâ†Ëð×ZmöÔl%X[ßY[ßXÕ"g4³±gB2®ÿÂúù7'ˆØ=6z•‹ˆtä¶ãôª‰×X ,¶ªÅ˜»j­N[Ê9Ž¿F×Ç«5—@~kÓ’Lµu†ÚK†fb´é×/ýû].Ž×îÞmr×Z½5‡kòÖbb‹P}Å¢K3°9‹MÛÞX"­Óì‰þ=ÑC®É„4Bë1TÓ“°ÓÁšPàá§y™ájnËe¶ôlÑÿ»[¼ëÊA>©æcoqÚHù·,|½nNóÆh°Æ{,ÿßì"JcÖ~õ¥`íÄ	XA¬&X£nï¥W.í¹´pn~ÎNÙýØ¼õ‘©¡™ ¡%ÐIq"Â‡ba à“¢Pž¹ÑT…á†DJÅêþUdƒe	.¬VU5™8¥ $³“’ûIn¬*€.£‡-¨ÌóQ„§ÆŸÍƒj~`1ËqŽè>¥D2D{U-jÀšÞ‡ðï4({ÿ¡šƒµQ*3Ù+é§[š!òP9»×d°æh­9ò"¬FýãE­/-)ž*Š°¬Uv¯ó®¢ÇQø¸Öè=ùÙt£ïÀa1àO^ç-éÊ ]O0°“?ÛÎÞ½Ü½s@t–†ùF„Z•K‚6¸k¼è¹nî¨$ÝJ
ÕX¤¨<Q{’Ö’ÝàÈJ
®ž%³_j)‚ŒÃEÄjènßÐA÷3 4ÜVÛ'X9R[`‘³æ@Íˆíÿ³w¶½MÝéº?Òù ûuQU4Ê›Z8 È ±å%“AA'/G•VPpiR¤]Ñ±û4&P2´”¤ÛÙêuR‰$„VL¦AVö@[­FªŠRÊt¢ªPUHèt4Œz^LÙ}}~×ý_‹…1ÌžàËËëÉy¦µý[×}_wkÆZK-µÔÒ½ÖÚ53×–?â)2²Ö”ß·¶(ÉiÒÄR"úµ|JäÖ©&or¾ 54=–Hkf©Z°Èº÷_âë}­Ýy72×b\‹xÍˆMj>U(z5Ai¯Ö&ÈS-ãø-<ä‰…„ÖÄë6td1€\)Ÿ'BYRKoãý°öÛk×”£ŒðÖ^¤}
’QíÈÀšÄ{Ž±ÊP?–i³v1O”!4º²ÎI^ìSÌ`kCi¥ŽYÄìÁU#hdÛ†m
ƒÜÔ»vûBÛåâÀÂ¹s3ßüøÐÇïÞx?òÖnÿ—¼µ?S
‰¹v”JÈ3š·öòËa€¤_½>¥Aö#ZÒ µµ\Ùß¬éºw/“ÄÄk%5À5O¾pÈ)`dðø/—zKøNÀš	"SÍ 4vù€³ˆîð{y_ëh u~+/U¾ˆÆ«yª–*€Ëy`­«‚¬xùdßázçêé‹‰§_a`«ƒµWô6‚-ú€‘«‚µ­/ö­~1íèyÙhŒˆ˜¹š¿Ê¼%Òü0¬)QšO½,%:+èâÖ`¸?¬‰ã¬`Íè³„cÈ¯f[ÁšL4¶Â9|56pýk¬ÁHí*dJ„ŒŒM¬ŽknYc‰i­9ºX3<£‘-¢0ÈÅ-£ôªiÛg\ñã¥ým!°}ËÆµ*B£F±·`Ï£ûwÞkMÙ"ÜP“³SÉÕ²Üþ¯ ³ÖT‰"ƒÍÎH=óÜná™á]µ5÷¬Å¬-Ô;îgpÙŽTB‡‰Ç8=å`MgLÚ#Y$JóGÏ€N0”‘Ú=-k,vµv›°­¹02Žëô#ÝjÜûÑµ{R án–¨öÑŒ4AºÍýCÛa1Qy?­¡¸o-Ê„¼Ôä­AWZE%‘÷!›)ö× 6­YVÜœÜW{©h-k6âº×	§Y"$Œ¥Tz$3å2Ûõk×êQcm½j¥3ëûÉìgÇ%?×¤Akk`6œ5ƒµµ*¼fÕÑžYÏqGg†zgrìÌßÖº‰á	”dBêœŸvQ‚5Œ¥úØÉ“
õ€Ö@¥—O$5Ì+Á“(×õRXYjíf¹­bÃ`›D•y`@“Ë”9<øÂRP®äŒz¨Ù!$¸ d²ŒjsÕ•1 ‹²Å£²é9§šf`'1—trì6k>ƒÚ°Ô¦•&9Ç³N’½ñqRF°õWX­T§h”¾YçZ•\‘ò4Ñ#U¤Á”#•ž}Œ/0Z‹µ8“å÷$÷Ød¬Õ`Íd¡—Í
A†@îÝQÒÊ­{•à~¾&_ø˜Œ¼ö4¬ÆKX4kMÂRÛ¡ûÑ]`½c_*¯*ÇDŽ56šÅ®Ô’v˜½¦Ávìç\	&«~©œ8‡_Ñðëø z“ÂâÈÖvÙcú‹Î:XkHi«‰Ö.ðùwK-]¢¤›±fZ5-Ï«eþ3Çj8kË­k-µÔRK÷ZkŸ9‰ÙÔà+ÁjN.2º0GÍ¤ôuƒ5È—âYå3óÊÔP«K©ø¬ÙÎ||‡ÿ?5˜kÂ5g¯¡ÃNW/ÖF¨U4@FN^X ÿNàÆJò
ð‚ÂFîöN­Ãwc„¶Üƒµ!ú´ªJrHH2ü„o¬9YÄükÎX£ÙâL5i×Ño¨×)µe“îjr3	·*ä7DJ2T—|ñ¹²Àšš-Úöì,f€5òE6ÐŠo\µválÿžþµ—·úñÍo{?½sãý›ÞÑ¯}ë×·Á5`ZÃÝ;‚¹­…Þš[Dk+¬áše€±†æ5KXÛ^¬Ée²BHäs›Ú²YËÞ ,²nu>TÉR ‰Ç¶€×¼Ì1…¢;-6±ZâTuQyW_jÃ°Ô¯RÈNÄƒFÐ¯úÙÔê±ç•rà"]kW5ˆNµ#FÃ_:)»ÿŠÒ &yzµìU
µ3šPËÔëÉi`7L~EMjô@*³Ì¯‘!]1K
ØXQŠéÜ5·ÖžÑo¤_A~¡ÎˆÐxÈ¤=±è°`MhË†“zÔ`S…@æÓj!­ò`sÏšáÚÃ5Ó«$8OŒAÜÜHlºÕ8c”vvûv§­lÛ7.ðfZ"v^–Èãûy‹=@Û°Ë¸,‚µØš›ÖèY½ö~µyÃ¦Ÿn&¾ß²DXÜl~*~böîçžÛ¬éÙÐÚW÷ÃšX-$Àf\{Ð8î(`DÎ(qYHe›mØ:ÍV’`ÍÉIf„N)3Ö¢îŠÊ!#b{˜±o´èó´AýjbµØVC†jV)RÃU“ÌSs¨vLc!ÊUkã6£µf\kŠðG‘³ÖÔºf¨v—Ô´j@¶Èm‹Í´™j,¦—ö<&=’Yó˜Ã¶5ýh€ÍS+µ‘xeŽ]ß¶v^Zš[/ã¢ 9×†µ–&ü±ìAf€šð¬=M¸ˆ5¶g;òíbµuÂŠtgÏ˜sÖ=Ù±Cþ9HqðwT@þˆ²JÄßIåy¼L¤¬­²*ÉaTòTY-Îþà´®Z­'·Az†!RAý]–øDy¨`2]®ôD3Î9PH°ŸÏû
ÈHŽbEt,åŒÓ5÷‹ôEñÏY=$ß„ùÎBYjÝcôËv÷(_DI#³“³Äö«î3ŽW-ÂEÆ¡°
+²üaµÿžâÄ8%˜ãæÌÎ’:Éž}TzŸÁºÛ³Ç‹(Ò`mùmí]8µ˜/§Á5§FBs;û´¯VB”J
•Æ’‰Qaå•óWžV¤Ú‚e¬™­«Å°ÆŠAúƒÅ?ú…D¾ìhM¥¡
…„ÏÊºÆæûi}ƒœ P œNòŸ—7tæZ¬hhut 5v­åjâ´¦"È¦p^éX«×-A%ú
šˆˆí_Ö¢V5ãµÏ¾ok-µÔRKÖšåV)^s“±a5nuŒ‰ÎtNµ õ,=*ŒY§)Øz®çV#¥õðšÉ>cKµýúÆŸs»u£×œ½†ÂÑVÇ¨Š©(Ö=ð‡±ÎœºR©ÖÒP‡–
ìÈm[‡áÃ‹<YÏJA:hkc$6Gô‹úàÚ]Z;¬`"
«k&æº¾Q˜üÍ,mP4Š1;£xÉl[Y5\u&’=ö¬u¤Ê\N«‘c-ƒ°™`E¹ÝzM]‹Ó[da†áØŸÞ¼yóÃßïÝ[7¿¾Í/MãýŸñÖžÞA%¤ykÔŒÈ[SßZˆjÀšÊMà_J°VŠa{±?SÔx5†‡­OÍµ¯©i­¸u 6`GÇƒÇ{Û=ÁmkÌT##sˆ}Cº¸&b}k_‡“>ÕŸéòie>0â)¨M±#ÀZ¬,/ýùÔÿ×h”gù4¥$÷;X{‚„‘×¨Úa\¶[S)d	µ't­›1³vÝ›Ùu#áà¤7äÊ~#O°†XÃX‚5þ3ä¢ †Ä¡èq‹É:ÁM»HŒfN›m7i˜Üñœ’7WOí¥
kf±>Ú˜Ù\ùÐ¡Ø¼…:ÅEY“ê[N]9ïÞvœÖ.·mÜ¬ñŸÃDQæÚvædY±ÚþÇÑÎËû¡µ¢`-5-ÍÎ'Ý¿—Éi_mØ<øì¦M›7?·ÙÜ5[QOíßýÓ§~þCÖ¾Ú´{óO™´¶[Ÿ€ ¼×>‹œ5Ôœ/â¶Ímk¿v=kâ0Æ¤¹:HÝudmjšYjQ)¤C5ç­ªÅ´%ŒoÅàÅÍñ‡æ™ÅÒÙ˜Ýxˆ‹qÀçÐ
 ù>š„ýªÅDƒÕTþÈ,‹t‹%¾EöZ5b¬ÓÚ'qãšúÖþIëZ¼p‹y­‰Û¢{§IÑ”íëÿ÷:´fÎÓÖ\lF›GÖ8Ì”2Û°%®Ÿ5Àm†sØlžúÖ2øl„Cjèa.¬µ‘Eµ· µ!Vðœùj=]¼·ïéC	£µ­z=B$y°Ï¤eX{X¨Ñ(vB’*žÇP¥´JtúÃ•@Wä‚ÉTbvjji˜ü_’C›9<H.>ðÈü ü7Ÿ¾µßWâ\.Ñ528RAô$Ê0Œ…—Æhë$¯ºRPY5¤õOwƒå
Ç YŽÊG1KynÚ2ûguzed£iÏ›­MâïT5rÛŸbLöÇ—ÆmÔ>ŸLòÅ¡Çñéþ‰FX‹‚û_amyù‚jÞk„ŒœÇ¹*—Ó]°³[b_ä¥mì#;ævúƒcÇ¬+¶»+qÑ"š¨Tà=löQ¡šF¬¡]ûvis…²Dqå\žvLDÉu¥+4ûÉSožžóT"	7s)´S[¹†Rº<ÊPÎGs¼¦Çg°–$Ë˜ÅÅ‹45¬Å¬&]H$FÕL	$Rë«#±Z}u>f5îZÖþ­e¬µÔRK-5YkßkùôûÏ”ÇäXMöšXm¬¾¸…!ki8l=¤?’‰¹Ö	Îô$s"µ¤5O'h(k>6Ž	ù\ß¹ùõ­;‚5ç®½s/®¡»¸¶øŽÑ
rUÒ­9LÓ:<¢ á	Ï‡hÈÎ4ÑòÕ!o˜9Î(»ÎÒé‰Zæ°J´Ø Û™ßò]	ùä“§m ˜›Š}ä­£GÃ*È£GßÚÔ¾üfŒyeÅ0·£=MóŠŸL•-DeIglñÀ‚£¨â¦ãhVÓt4§6Æ×0v­íÜgŸnv¿~OºõõÇ·ý}kÀÚ«O¾h“MñÖDkTB
×bom$SqpÖ¯¯Ó,ZH¤ŒL¶aº²†JÚÌL:“VRœˆUBö²ÛnN›F`C²jôbo0SõqåIš÷&3"b­N5`­à‘ç›‘?Bqd¬tßj=Ÿ¬¡Ó(ØªpnðÚkZ£þ®±¦\æ¾€Ì67e‰‘¬]Éúž“½‘šõí â—@ÅÒÐ‡âF Š&Àm›¡F³žÜA“ðÁ`áÝZ×ô‹ëî€ÃŠb¶;¸téz0TJZ¬7÷¬5‡A> gMMkzež3Î·úÙódŒ(	òü)‚E0ÔÔ«ÆfÏÎ=8lE»ã±ýûßV\8{vçã8k”A.7@Šií!ÎšØÊ`éi`Ú¹fqªHÈkO}7°GmƒÍU“ûÆ‡!Gk_ÅÎš³Êš{ÖìÖD‰ñÇ‰òæÑHyJÓÓ8àPA#¬p1¬I1«ñ)Ÿ\pøô‘Ã5‘¼f÷ÓŒ½l'NãgO{é@{îÑ†òG$TkèW‹k ­ØV3_ËÌPMï-#@{ç[ÜmãÎÀk®w­Ù\3X‹pÍbü›q-†¶æ[#«IÚÜ›B‚¢uúëuúw¡¬Ánk¼ÀŽ8™2r¬1kú?=gˆÏø€5à›Î¯_ËYØ¨ÌÜÿ5k;r0Šiik¾Z'w°9gm—Œ5±ÂÕÓÏŸ~Ò&bÿ^°véd=AK”¬‰uæ¦-¸¿<ä¡‚J®¿¾ÒéW=	»kã/WnHRøzê2‚®üˆ?¤ýñA­¥©•r*ÐPÊ#—¦ÆGR`NX»¹Ô“
j$;Ö*îC^.LÇ~-aË RŽ…~Ó`Ü´2gçÌƒSH¥.2&çÆ§èTaÖqÃU ’¾5šòqžˆÜ×ªØ„î²Ÿ«¢„ÑÚýSÁßžg6â¯A"ä…S£nªä=°°ÄGPÚ>ÛÄJÑN—ã^Ùuàâêåéjš¥Æ“F°† Å?èï¿ãèÖ}‰­;ÞÚ±‹_£¯|‹Í÷ÍŠ¬ä™ˆÔŸ¬©c¸bÙ,IýZÊx©j ®RK¸yo÷=¢DcZ¿Üè`Í¡ÚÜ64¬5‡‹¼sûTøKwËP¿”†VïÖ@«}Bl¿VŸµŒµ–Zj©¥æ@ÈÐYãFÆˆi^²¾µ“ðZn=kI‰¥ä®©uX#ÿXìÖår"“5å³K=e5x_:thùÂçº#XkÆ5ÉùÇ}79KlÕ0´Ö¨|”Ë3*»‚Ÿä«š-‹³VååÛü•!2áa$MãÉ”zå°ÁjD"¨ìôóÍ°&}ùÍÖ$CƒÆ”­QR#ÈÓæ¥xÓêË9X4ûõ¦Ø;P,ù½ªœ$	r W-°Ö»sgqû÷Ÿ[¸|yáû›ïÝ¸sçÝ[_ßæw¶:*Þá½xø•˜ÖN„)#ÕVü•Ÿ¬üd$ŒijX³BÈÈzcn)ËdÓÏlæZFË›Ùt2[Ò†²Yþf	×Â4"Ù,ÓÄ©¤¤P–džf5Ë¿§ÛAkYYkA‘ë¨H%W$R—ðùØá‹¹ô±Ój¥Tï«¡'½Ÿ /æª¡Ã§/®b>z’yGXh>-DËaÁú%Å‹”»»Ö¾Ð‹ÑrO2¥³o¶%BD°æyVé©_ #•ÁšçŒÍØŠñèÙ³ÿ¢UB¢!¯Ý³ X4³®>êµu‚ÖVã4Hˆ¬©iuCÏZÌO/Òö¿ê`Ñ°ÆrþÊè¶ô¬á¦m§øñìö…=ä‰ oÅÒåõ²Ö¶L,œ]µ=»wáTjÎ[k&5WÙˆKÀ·M›Ÿ¡rÓ³›C9XÓÎsíÙ­¨m­=²šü¸	`ÍÒIþg­ÕÜýÚzÖÈé
@£â>‹Ç©éÀü6œü¥§îñÕ~>ÿ[`MÞš|/‹î×ÊŒµÜl'¦7‡jZ…ÇZ#;eŠqí
 •ÙÜ­©¡rG¨†@µÈO3@ÓŠ»Ç¼¬5ÆBkÍó±e®]
i­Ù]kÊ‡ŒöuÐ87[´fÖHjøj×¯ÿõºá7ÍZË8”±æ™±Æ1;:Í	kN«Õò¬×¯ÖÑXµrªì­‡ÅÒYíTH¶ÙdIl4’û×	i;í¼EÇ\K$¸K¬†k¯þ^zó£k_ô¸x†‰Ó/ÏU¼Ú$éýIPJÍSBl*žÆó]…%+\Ò_Iwaÿt1lmP%3V,e¤ÜE÷š-’"!'ž¿ªãÒÈ‘ÔW†¾`À§-9ø
!¬_Ã°ð§a5Ô­¿YMX«a­¹f5%’L‹ãfuT«­LÑ¸é•|þ
”f	'Cp«,³#¨VÀ.–÷èI4Âš±Úò|mžBH:÷–ñÕà5¬5èNÊ%îóÕâ:H6ÖÆ8’rBH‚E^¼rì45!/<Í_X{"„5VHÙ"GŸÞ±ëÊŽ­(9«êGefÒò+Ã’\5~ˆ.²À¦õh
ßÎÒ"i—#iIþ*5-b5™“‘ú"ºÙpµcµ×ã"ÈûÂEîõÕÞùºî>W+·éÃV½›.ò·Ö(€ü€X­e¬µÔRK-5[k‘”0âäœ5W¹%·H—ƒµÎœëéêé¡m-Á)2|Yu­K)7ÂH#IvÏòò|îÂò7>'2n]‹p-æµƒ«êï„eÀÂàR¡³A–:áAl8-€š°¬@WÕ õ*UHò:J@œ¦&&JŒ“±víM¤ï¥uðÅ¯¦:Ïš³a5úã¬xãÌ¬ŸícZu¡¤ÚC€Í’øjx@~iO¯/æT/•W²Ð=¾:±Ñ_ÜFlqí]]æöôoÿôÜåþËÐÚ÷èZ»sëx,øÁç™!p—Ö^ÖÀµÈZóK+¿z‹ÇjSkÑ®™,Â¿8 ¶¸´þŒÙM8HžfeQÊ‰ 6XÙ™!rï—å¨Ù_fc»AkiÅ÷ƒBà*u‡Bžç‘.¬ÖÙ0…Xc™¯Ú%_ËÃ\õ}Åé	pÉZãŒŠ#ÑÕc¯¾8šêS.›.ƒkpm2G'…&}‘9°Æ/N€À,"Ä_®…‘#ü4yûéJihÜS…$Èæ)y„¥Äâì5°CEjAÕ˜Ç±ÎZ×Ë”íaùmÕBG6µÈ?`¥B>¤ÁËÃ5Ž›ê ñd–m*ö)Þf\A°-kõSu9ku`Í$omà±=—·OL\Þxþü–ïY³‡­XTäþm›ß91ß`gÅr°Æ‚«Ý‹k8k{…k›wSé‰=«„Ü½i±o6VÛýÌnhm›Á™4±}aoSÏzXÏÛ¦2È¨gM%@þ<ïgÏ2!ŸÔLÀšŽàØEœd»WèäÌ5œ5n!«Å|;¶Š5=LÆ'ãêG[€&8P‹Cµ{K #Tã¡2S-F5ôî-nïÜañšÃµˆ×îË‘QhŠòRâTHî“ÑWƒÃÆ:$8)ÜÚ:"=XRûë¥K³`Í’ûa¨°æi0šgå:&|”vµlž8ÈL>5=]^ŸÉrÁ ´Ø­­åá¶¶Ou”?²C;n;kÁš†•¸gn]}}gèÚ…RÚ×±ŠZÖÞ°(È«bµƒ°Ú«6d?èGcÌÁžU·X9	•5­CñÓdQÿ‘ë©ñ|¡ZQwZWj„
DQ™œÈaÁš{,©ì0H›AD÷Úˆ¶)è‰>2æ¢UjÓ²Ç°Ñº{¨k\¡ïµàÑŽÂÚ´"G\j?9”³“Ó}ŒÐˆGÂ#ùLZÝx8©K8rnÄdKYÐ§&[{~.G¼ÈÈHP®¥Ê(—‚ÖLatÿ]VCÀZý§N-ÿîí±ƒ “¿–
»Óî¥5­#‹-B5áP®<[[}ñØéÓy¹8|LÆšhí/zýŠ¤L‘·vmÅ\SÃî)ÇgJ±½ `•æÛ),E¹K™«fJ£¢`-¨(†¤'ËMI|$$+õE°ÖeÄåXíõÕšÃEbV#µ_Ÿè¾–sÖú	EA®~!Tû‚b ©µéÇVlK-µÔR“µgŒ|D-ä=æšX­ÎÌßÅ\Æ^µ$u²×,V+×”Í¬,ª$¹q2DvéÎîŸß¹az8®d®Ì"P©ÊÈHë'ß+(B~W¨dèå}, D£&'M‹»õÊ;881hv‹Yk‹îFuž™?.Ò­Ùüm:{€Ã3Ùöö~ª‹Õ
!#Ø:…ãÔ†6¯¡_>o„Š˜$f=e2²Ù¶!FBõ]‚ãB[ÿÂ§ŸnÜóÒÇ”AÞ¸¡ß8Â5õ­)…ùß˜ÿéÀÑšë[[ÁY#¿¿„¹Ö(¾rHj¬¤Œb+‹ÑAQ^“—ˆd–¼‡e ˜ãÇ	ë÷z]"œYìåƒQ5Cƒ
°éž-!_ÄÖ¡Avy•Oa­EÑ›kB7mQý
ï&Vw©FÇ¡šäÖGH”~í5Þ?HW‰¹ÈóØ´(­³Ó½â;_˜ôÑˆ:âx§´7ï'€d$÷å˜â "UjòÊMÓ¨¸»R`Š~+d°F–?Ù¬5gªq†³ÙÚ+{ÑpïÞ-)‚t‘½Êm<t¬©e–þ¹³Æ@lÊ )…<ïœ5Ûy2G6n©/ÎÌ˜³¶‘ÙØ`ÙcÅÒöÑSçG×®_Øûøã´­mÛ‰±FAbS$+'…,è~Tƒ°BX#º?„´x¾VÛ;ù•ðlÿSÀtˆ¶ TÛëŒµØYÃ){ª…KsÀˆsÖæéL³v5ƒ5véS³HHáÀœ¹œ3Ý¬ Ò%÷3OãBä­!‡kÜb‹Í¨-Úq>š;
m5·í6?jGÕQýcÌj×\´U¯·!5äÂúa0GjÈ²ëÞ{RC7´Õ]¼&Z»­bÈFZCFk(6×Èðgyx1¤óÖ@Ím"-D·øÑØVÿ®_¿„yôÏßO^¿$WMsÑ$h-Ã@•~ì6›¸†“–'¹iM?°¶FêÂ­É–óÕiªØó™õkiØEí¹d;¢öñî…¡ô™3¹dÊ›VŸrgÈj„A}+„5Š`µ?S‰®]»viúÀ—xVÃ½â5ó³h’¢Eù9dz`ÿ¤³Uü´NÑJgAè­å&Ç¸¨æ1¦šqîø¡‘AAQãÚ8Oö&°®%¹MÂc`Ð,ñÃJìObÜãÙ 1åAR¸Àæ„h²›æLr0['[D¬&Xó5°.ÐÃVÃ]ê^qaÕI^æÊ…jUa•üXÐ-pYÈ=¹žXÿÐkPÆü)zÕdª-'Ê‹ìŒ¦^Ôˆ5Æ•ãÓ`­QÝÈÑPß®mxÉ]Çž„Ó,’µæŒ5dãÖØÐ¨¨mÝÊ X{:ÁË¤1P¸ÈÀ£2aÒH•=ºµÎJÇ 8©ŸiÚËD°f„>íq}µ¹ÿ‰ÕHùÓr"véÜ¶.ÚX³%´Õ\¾ˆéßþWK-µÔRKÍÖ1#VÙP	¹xnsÍ`­Î“8Ä¶Î8­G#×xW¯ÖóÚ¬ü’/„wžÞÍãž$Óiö–oßºñ¯ï kŸã¯5áMþ¯.<¸j¡ÂAÁg®õ`5:y:Ó˜¶ÆH0J‚Ú<u§<V4í°ˆ|±‘–xcîì—áãK{g.DEKD1ª`ÏFŽ=òÍ_~óFêŒÛ—¬Ç:rl}ÞŸ¼öbïH@ÜH{§80Hó‚JŠÆ÷8Y$T¾Â{ˆ¬Æ@ì"ËZWÙ_Ü©*·6=«áØ{¿Ö„k·ì7þð¿DkTBê•÷ßÛ*!]!$	þ×^ñò|2:ášœµöÝ¥·¢Å!fÚ†Ô©%nƒÁL¤¯ ^XÎþ$Ðkö¡ˆVxã{žñ™§üG(M5”V)SZîBs¶”7XËéÐa«¯S…ãéWN¿B¾ƒÕŽ,ÛŽpñÕ£Gwïºrø‹dbëÅÄ®'¦ÝUYXXëéÌ§S•! ­Ö“ï’{	¬jlUÿhEŽ‚³uRGa(¬…¬ÆÂÝM]ó 5j>‰¦qØZµsÚ`­Hê
3ŠLèÛ»×ïe6öâ3±	ð§±£RÁh‰{ÖžŒ58íµÆäþçc_;ÑýõÅy¬µS!«Ù†s‹£[hX®ƒß'Š{¶žÇZ»<ñì6X­w ƒm`-Ì?¤e­‘ÕXäœ5hmƒ~šÖˆ=úÓ8ËÎ&ÑÙîg6«rÃ¶…¨q&vÖšó …hÃµðƒEy‚µç¨»­ÁaFnü Oé´¹lÈÑ›A!«=
6á¬]3oíGÝ"sM«ìj<ŠÏÉ]‹vÿÚø˜
 cR‹QR»5«I¯ºÁj¦ÈTÇ\Êø{ŽÓØ²h+b“ã&Ýv´f¼Ö˜
Ùh®ÁkÂµ¦lÈ‡
$‹}6-á&"¹ˆÕ 5|5œµK•=þŸG¼€²GKéÏà©ií)H1g­dˆ!È6ËƒkœÖgUI¸H6»v}>Iõ#á#¡È½íhW^ÿÙvÓÙŽ®¾3¿!d©›§ùÎ®ˆS¼õý©ÊÁX³à~kóVˆxâúË/ÏÑÚ¬u®K’©N!Ìá…1 # ðpÒÇs‚ÒÃJµ’ö—†«ÔXHþlHÍ¯úÄŒð0Çì³sÕ`'¶ã³šl®¨–O6^mV°6mhÑ7†lub:Ù‡ 7Á®ÉßS$-ÉŠþ¯#Ujã“é¬“™”èYú¸VUFVe…Z}OŠ"§–ªŒ¤)äzœbZ;z$®‚|ûÊ©ÅÚ<ÈA·Ú…z°vªÎïŒpäzÉO FX‹#ýõ%ƒ\‚?÷‹yÉ"›ÉXÍµ¿Áš2ü ­]©o…Õ	Z„“¾„µÖ	V—å©¥ƒlT46Wœ
ß%IåtyI»Q8e$Ž,ÒV&úÿ"_=$2òÕVo¿¬¹bJ6Ñ°6Ášl5ƒ5Õ”c­)¶?†µÖ<ì–Zj©¥b­®-ßë¬Ík.6¬VÓû‰c&©ß—DßXª¦+›å¬^˜¸šÍê¹ž›®Å¿Ü1oVkÆ5ur][ô+ód¥ °ÒÈP!‡ÌðÔ”ÝïçieÓ”µ!übÚ—GB$)†+6R•
¿oÛ‡}ÀdH‘zãŽ¹v|ïÆeÂÂ¾5^ø~Ð°BßúÙ7èLîŒÌµ/OŒH2FíÌßªrªÒíŸ!òCèO®NVJýåY¿mÆ£³£T‚'½b¡œ!Ud`ÛÀæaƒiì÷n"r[oñ²ylÏúöß¿tèÛ÷ß_¸öþ»èÖ‡a)$™Ð•˜òÖþ_”2ŽÆþ•Vã?)6ŒÀe,®2Ub5Q V,3\ÍÓtl¼¨, l‰¾ø,Ë±c5rD2Šˆ„y…nÔÊ\óØ»yJ#mÒxþžf5Hš#-M.­[]Mt*«ì‡«OùÃ—¯ÙÈV¢ ‘¦œkÐÚÅ­$B^=Ð½ëâÖä	.mß-¬ÁtÍz&ëûºÄ+GM5I5µ¶0©O|‰*pÔ,oŸî:”1Ps(§ºH<´§K.Ò¹iÃžÆ~›Ø j§äï•W™©L¼äc­Md*¬îqÖÐÿ”[kxj8h3‹[¶ jõEZÕT
yJ¹ý‹‹F6*b¤81°ó²¦®ýŽüüÇ5^­·8!-,Ü?g-NîH¤’zÖt³ØÏ¸Ha“’û1Ö6l²Ù¢µÍ?Ý-XÛÍþÄÄn"!#qvÙ˜K«æ"H-qÖ°ÖŒòÎAaÏð]Ý5ÌKsíj_³HdðdÛ¬xí®I°Õ_è]C1³¹KÃ™FŒ‹¢˜f¤Þß­vMQ°ˆ³ÕâúGôŽI`fºa7–è.`sæÚ=­k×bZ‹q-Î‰qT‹nÿ\—Å­m÷²ÚunŽÔÐ_NÎ|÷Ý£zeX?‹µGX{¨¬epÚÊµ2±"dDæ²ŽÕ4ðùkš@RÎ·ñléFYÖ²Ô=¶!ŽÙfˆÆu:{¶“QØÜö%LQ¢`É_rÖpRä¥X°ÆLPãî¹ë—¨R¬hòÁÝÓ „ÄåŸT2¡*^CªÕJ™˜‹•rä Zš‚ÒHË—xÒ²;T-ú\“Ö8?™ê)«Nr¼JMe@þ¾Nr‚ÀF¸­6{Âfx)Rö½ aŸV'4~EL6;6K$ÌÖ­öÙsÞVèåZ¡PYà·’ §&“ØuÄöû¤õW	ˆüÅTUß·,cMŠ`Í¹‹!¬á­¢Ê›K›éÅz"•[þÝr½+)½OŸÖN<&[àãöuhÄf›]8jŽÕ¨ƒŒXžµx6¨æä`-W©Õw%E
ØRáw¡| Ö’Vª€ÇJ%-XsãÎ„_HUêñOÉ£»!·ëN¡äÜëqÃÚƒƒ £aØ«‰¯—õ™k&‘[±‚Ô¸«™±Êv¾mk-µÔRKÍÂZû6Šïçù2¦5¦c/Ju”«åÆkÝô›Ûhlö{RäW¡2uðB	dWà1MÎ•Tºòãß¿>wós!ÛƒpíÍßÎTf|:˜
ä$§ÒìiE>fóN›½ãù˜£åóëà…JVq#“UMÕRÜD&‡üL;uÖ£ôOÅtf¿ö×¯	Ö¾ýöó¼ìí@?Ö$µ]°)§Þkïè{ƒXøQÖªä;J ™ï3,µÐOÊ|¹ÝÂ 3°hÙ¹iP€VÜIz¿æboèUóÚ6iÕC>»W¥vßß¼ùý§ßÞ|ÿæMÑZÜ¸F%$´ö³#o­˜µyk1®¡©qn? Òð,#\ëbE¤¥×ËAVÖ!Ñ*›zù%(ÓÄ.ƒ`,MÄò3üfrA3Gzò¤Hí@>‡f_QéIiß…áÅn89“Ï³¯Àãõzúb¢³^§yíôÀþÉj
`c´Æ–0ÿW^ÛµëÊÕ«}Àm'l*o¡¸óN‰2#ÁšŠLks“l’5â\’=Öñ#B±Œ°LƒÏµS
CD¬]mX€ŠðKüÅ@êQ5½ Ýãã4äóˆþYø‡Á]ªÌÔGÅMkÍ´)dº¦N-.ž›9thál»&¬iÞÚü"N[}Ëè@í·™QÂû±Ø¬OmãF`í,®^qJÛÆ]Û§Œ5î‘b,4ñxct?ÜüÑüòÖDL"6èX£Ò’F6('f#‡›MlÇ‡Ól9k,éYkMÄç¬=²æÚsB65»³F÷s .¶h›´ÙÁZT
i\ÛkÑÝ£rÈF2»ÑœT¢ÚƒƒE"[-®€Œ{Õ"V“n0ÂÿÏPLó×rCÒùÈ]­5ÕBFA#ÍîZÌk,áêŸ«ÕîêºÙjÜÕ.<yiûÆËÄ>^0òˆÆa["dÿú|
ZëÇZËÖ‚õY2ùk)àl½@­m=]lé4ÏØùL–.®›Mû?«ik°[»›îØŽ·¦{ÇØ™±Dˆj=ûî‡µŸ’Ka„^S²Æ<ƒ¨Ožœ-Ì^Ÿ+ÌÍ]ŸC¸;)åV+Jj¢Á™:Œ\N]U“ª/\é¬ð,+êâˆcê”ç;µÆ­Ð«6¹ává®­R¤º¬;­Bx$ÖXMu³Ð_wrL¤­´v^GìØÑô$'UÙái0öä¸¦jóµ‡Ç—
Œ xá¿W0í”E«AkÕãÇÝ6ÅOUÉk&ƒµÆ*HtáíåÅju&y,Ò¾6Ï5F(,×h«—…ù"¶‹Üi±U÷Ó‘»¬dé&YÊY‹hË}jUc>ÊÖ+4«UÊ[äŠøæÏÁsÊáK¦¬kë›c‚ý˜H¥sxœ6;Av	±á€[xÎÍÎŽ³ M‰/UkÍAòÕXÞ½ÝÝ5ê¾D_È†/ÂK †æmÆ¬­I!­-·Œµ–Zj©¥êËZûÑh»ëZ›ÿVC‹NõÑ-¤÷/š­Ö=VK“¨Oª;$I9kfêñj]VwódrZ¶	/Ó¹É¿Üùlò¥—à5§8ÒpíMUFÍ_ªŽq5Hç*#‚7Ÿ´G^id¯åÃÙÞº|id%è$"£ZÔÔd’¤‡¤B¹Bä )õ¿<NÙßâ©åeß»öæïHï[ýÚêÄ¶i`ÆjZ}ùå^H	„üÍ¦^Åu0º]4P¤+ŸF»PÖt9•U…P[–8C8pÔZ¦VoúeïÚ_Õ¶…cõîÔjÃñ¿þñ/œ»yóÛ?ÞáŽhM¡OBkê[ÛJÌ°†¢¾µ_…ªnãÏ1œÌúïw×Ú2°b©˜«1ç­˜hPÚ¦ÞáŒÇ‰!€sÈf©ñ‡ ¨Ÿc”ÕZ[É‹4<Ô¬ÉNsDDu©bûTBª?%‹£ §=ÈY®i¶ÁÊÙÅc•]©wr	ø0°ŽÁ¦WJª!Poíé‹W“¼<ïÚÚ7=Ýgo	tÍ›ƒî¾d¹"X›­ù©ä,+¼R%l2Q.U*4‘¤ù·Íä]¤_¬y
¶yI®âŸßÐÍa©Éb3—5Ó‘é¥AF~µ½fÇl•	†bÏÔë”Aâ·˜bcíÁa,(—ù>?³xîÚ8z>lYÃ~ÆÆAÛ~h\SäèF¼µ½;UôˆÓv¶íìèùíL_;Û6 *È½[N5æßo­¡°™58k—¶šÇÁÍVóÈJ’µÆI´}vÏS Ñýª…ÅŽÖsÖ~ÍýÖÚƒœ59kNB6›C3H‘ço 'Nc€Kòw#×¿fR-dŒk0–[ŒÏ8,Þ4qZ$½OlÕ<XÍ¡Úµ¸ ÒP-²ÕšILcÒt·ÅvÀ5ÝîXF$jh]£¼òá¸v)ÄµFƒ-Úù×e½jšP/zò$Ë–í—qÔ¼ ô¨]g¬±ö²8iù¼g°†ò¤óã˜å§Ç²Ðš ½vŽ“¹lç¦,¢‚‰TºCéYž_â
lÒ!ÏòÄAýcˆ’^×%ZÛuÀ0û\—3Ö 5éBmnöúìŽÚËòÊ¯ÿçÕé@ãÒ ^%x§_)P0¡^.|jiE¥ˆäÑ6£	ÙTÎ>EÄÈùd{ IÃKÇýIÆTO­Ì•m t¥êO®TÑ`u®\ë;@‘ãd¡Â ™±ŒÛwóÔz41@\&JØÇÖ ÇlVð¦pEJ®ø³Ôd’9‚8~ü…ÆçæªjŽã^»|…¤}nŠ6ºá Ì8ÑZWOwS¾‰C¿µLÀÈ…ó‰dýüb-%JŽŒÇ"EÉ"! é@Ï8&Ú%T;ÐwL¬¬¹á(NT0H¡­¶µ«¡Å|P+U€µ lÍjü£uÒ+ç±ï`­VÑ¬ðTì”‰dí€ˆÖP"|0rÖlÑÁ¬¡Ú¿É…ÛuP‰ç °–­Ö£pÀöÅ²Œµ>ˆa}ÛŠío©¥–Zz`!ä·ŸqÕœ¢ˆh;%_‹hK§¬5…p%»Sy0[z”_•O%È€ÎkÖP&rjn²€*t—ÏüãÊçnþýïŸÎrŸ¹ö&úd²J|²ª_Æ«#Ø.ÁQ g¡àR"eîäeøÀº|˜U@¤È‚c`û¾Þ¤Óá-(Ÿdé—¿èÍn¡u€wkçØhlµ \%RKU.	’hnÓíIÂûýA_–µf0¯8PH¥Û³å°6ÒŸå½Lº­#Õ‘É†7)`º¿ŸÔÛ6,ÁlÛ0Ö6lØ¶dÛ¹Ó€­X\˜ùÿìïoSwžïï0š‡I”EDUž4Â!ŠL5öÚ2Y¤\b;ªÆ©‚ÇàbªÝª½Ç¥tL LÀØÕt º%I™ŽfR%Š˜	Ó’dÚÓ.h†ib™Ehém—Îrï¨ËöÑ}p_ïÏ×'K;ºý>?|l'qœÛ¯óþ|ÞŸíÇ>ýüóëû/ÿæö½>¬ÝqÞšk\;úƒÕñØ«•®ž2Ü?V‚ÖVãúÖD’<W†ªñëf‰:„ØTúgÑM‹à>ª©’šÀU¹v>n Åà»Üš4Œ/)X‹ñÅÌŠÈR‹£$p¤ZÇ4Gi)ŽT	iãÉ½ÃûD<|x~ž3¿8k³"÷³7_U¤ÿJˆþ	«Iêa­œV-¤>5Y»„†®MM‘,M`Û$=ýEp±HÇ{,­¬·p:O}«ƒµQ`­%êJ#%ŽbbMzôì)Fs±¸ø[ÌJŽÃO³™d•œìÇ,èÏŸ'·}/Ô¶}ï8:Épä'ëµ‡Å®Š"H4~jægÀ’³Æ¿ÍZÃMCëw €msv‹"E¶¶ái\ÚŒÁ¶¾­u^›ŒµgkPõk{ÖjÊ }g­›Œ™ìk·aÝ÷œ &Éö[·î¬]ßðì³ÖÀ&À3Lã’ku=kõ¸VOkÚýÔ9k†_Æi~@ÿÿ`“lÔ«QÛ.){ÄYmÛºJQ¢™kBkÆkÁl·Xç™Û±p©›|q…Àf÷óeˆËRóYmÕªE¥ªÕ@"ñ˜Ïg§¹Õ·×î+Öa®ku3×j{×Þü¹¸–@FkÁÂú-"ÿÑ™j,‚ðÕÞ|:ÈN2 ÍX#’Ùš‰Íq4™ŒQ#UÉc<óÊ±8¯ÑrYml±ffqðO¸­É£¢9ö 3.4N²…W±Zhij³£H„¶0~XOA=kúD¯tƒ5NÇPù¤PMSÖlÌŒF«Ú¤šÖ&ÝH3^Á'”„ŸÁY«ôt%GfÕ0•T†°(œ"Þ±îëêòJcùô¨Ì¬%yl¥´+yÞ/Á%…~höY‘¾LW°'–&Š©¢7YÍlH†¿(Mñ½\LÒÀ¦L£I¬f‘”SüV)¸«ÀÖÚTiLü’<Äî’Qà)¼?+f›åá©„LykjÖ.|=¬½í$Z;;/Ó¬/á¬Vº§Íº}X'°Õ,Æ_ÖÚ2Ûò
­Ö~äQ?R¬&ZS$¬vmyßJH\HÎššŠ@öŠ–¶…BP»*"oþK¬&;ê²RpÄfrxæ0—#Û¡*Í¦&Ã¯°öM¬öÅhm> >ƒ5XÍtm€f5Äž`ÇjÊA^nÄö7ÔPC=,cä»·nÝc¹,ùg§ôÖ@¶vcµ.˜XS$ŸÅCˆ¹k4ªg&õfYæ*SJy7e2•0S|òI†³7nÞÿóŸ]ïÚ_›kÓ¥Ùü/Ãô.è}½˜’vN¥]¤?¨–8Äˆ—çF„ñOnªŸQwz)•/&×ä„(³ÔAŽŸ={jæê_û¥é-ê ñŸ¼ïÁ>¬Ýµ‹»s¡ðŸŽz&ùH?è‚;bÑÁQXÄëIÕãE[œ†æö\–ðþMý¥%² 5·º¸”Îööqc¯)Û©ˆÈ¡ç²mLÅÞûÜÿº÷9ñýïüî6°&Zûíoï¸RÈCo½à\»kk­½ºj®e‡fÇ†Äjƒm¾¯&Z H6KFTþñx˜Ò˜ìmÑfåöÓÉç² ãpŒKQÏš\'(†K1N\×å¬ipv
vÐ–åp2]$×’q¥o¢	nV	™¹¶oŸæ¬Íw6XÕJt(ÀÅ®ÑÄö:µ;åO,¯t8éÎùi…jÛHZ`iIÝíú\¡®àQJÆUÉùÑ¸¡L.XSÐ§C5L!¿vœñ«Ûó«ºkQeD
á°@Ù,Ï™/Í+r4•ßN„ÿðH
sÍæ¬±!C²€Õjµš–µC8kAž;wª
k
¹feš‹-X“±FI$ëg[¤m­[í@ÙKm­ÏôoÏa¬Õ9kµ´ÀZÀLâ+`ÍàKÝhÄôChÖ»&:q‰ütÈëü_9Ä‹˜‚¡Ø«°ö­¬f_çÊ ÊrÎwÕv±ÓÃ¬Ù17‘3¢Æµß×ÚUíZÛyî£5‡kòÖ5·Ê3ø·Ù>XükÁ­|-_£å+_5ùz ‡»jõ¨ö{_JBbçäs›³×Ô»vÇd²ƒ©kõ¸†œ¹ðÚ kÀl>µ¡‡¡›¢úYƒH ð½7ßûÃ{˜‰Çk–ß?Hßhå[-‰)ÃmÐ+eM0]¦b#Ö 9¼6yl´§%Â1ÂF:Ûb-a&ÿ7ã«ñÊ–T®ˆÑZs8Ü²(è5˜›ã£ÏÜñ¹'6RA~À¢ 5_¬ÆUþ®W58	gkÏÜibDÙµ†ð©òdðÆÐ•L«§¹+ÑÞ•[*æga¥"T“´±jc2Óèa#U„÷T¸”„f´6Æ*†ÃRBdÉËE€Š™Ø“ ›Þy*§µçQË„WªuH^Z†³,’BÁ•K*ýßp’1ÄfL–á§Ñ·¶¤j~=öØljL£×4‘%¬«koIf/
Øç»wÌï£¨Ü0ÀµàXÁ jWú$%½HŸPí	vpÚáåå=×zöXËšÂ 9Ï«°¦pªÌŸ¦r¥I{ó3E	NåÍ9ÜÞÉx¨®j’2‘Ç”Ÿâ¬iª¦`;Á”^¦°šuÒI~Yd`ÃYýèO~2Qß°VÏj–£J¤û‰Ú¤fÑ"~j¿¶ék°ZM$únÃXk¨¡†zH!ä-tùÖƒÖÚÙ‹Ó5äX­ý±ÇŠ‰°<È0Ü5Þ@·>Çk$DðÊ_HdÔ”PÌPß¦„¿2ç-?ÿËí·oþùËûæ­Õšk¯½[ÈØ<xÆ9×PW2zÞü8
gÀ¯H?õzj÷¦>‰IØG`¼R1Eá
í£³³0
7úát¤…Y7¼…«½ø¤Yk2Ö¬RÖšÛæâ>Šd†è“»¬fG–Š‘ˆRÃŠ(ÖÜ¢`ôÈi4¯B¡Nú÷1ùJë6e!¸~z×z·@s½t¯µ-ŒoŽ:È{·¿”ìÔüÛ«×T˜ù<´fþŽÖ¬mmiÉ·ÖÞxõÕ¼júx$l<S³­hpbÿ±s.¾?Å¨*RÉ‡#t™ èðl?Ä"Sl§Ó«F´“³”gJhÂY.IÑÎo¡0Y:–¤E,bˆ×UúÖDY£ˆ¡rôÚòáçqÖ–÷ý'ƒãVª´v |ý Gºöß
ª,¯,³Vßüuš/à®qL‘T9ÔMLI_Ÿe‰Ñóü‚DÍ0Û.Ï0ÌÚkÐZŽC›²¦F5!¦àÍ TÂ\ÓÈÎV0fsL“
øKeû³Àš£<óÞdÃîÖD^ŽÕXëÆb³«3Ö™³†¯vZ›!V…×È¹ª??3®tsÖÐ¥Žµ[¶¬íØ¶i¨qDÄÃ¶ýûG²û¬=,¼?@µÚ¾1kNÏ]ßõÌÖÊbdO5¤Ä…mŽÝÔ³†­fÚ^S8k°z^c©G5É¾KÎž ¶k§SÃ]S$b¿Ó¼5Dê qàÊ Ÿ9{æHZùui€«E=Ú8žIºÊb<ÇÂWkQM²Ÿ=Yä"µzWÍr;-îŠo¯©ZÃ!÷[×ÄkWkqÍ¯†€-(‰„×fc§M‹Ã1]×>šÀƒÕ/à› 5Wi¨ö‡÷Þ$X2kýla}[T5ƒ4®	ÖDkñŽh†+k½JY¸”U:-Å?¥ý7ÞÙ§S@‹Å ·¶æÞZ¸­-’ÖÂ-Í‘#‘P„±ÙTR÷~b.DêÄÜÜÀ¯÷ðÚÉ?u8…ÚrÕ@R¹ Ûâ›ÿ2YùÑd±\8A	bb®¥8¥Æ?ûÐGauJ½¦`PóN—Ú¬Œ­°²1Ë(zÜat©g,ì-e\Éã{òF2*§Îô¾ÒS¦”Úã	N”R$ð'€5T6WMye’­ÉØ¸jeaššTPÇÚkJ|Tr?[i–Å%•D–TU1É#SK¦j<¼°$kÍZ÷ž8øàDl½Ï,¾U…µªúV«k­k•Úªèö”…@&HÜOô¬jY#¡ÄÀŠ®©ÍV`MºÂ}Wf”Êä%®Ðº&WÍ£5Íf»Ç¹fl26îZ·"MAl%ôd5îÑ+R/ÈY`R0'[!¾fPV^™ø[¬©ýó†_EÀšKacwþÚ´Ä'Ëæ«ù=kc­¡†jè¡úÎ-#5¼5‰ Ý‹&*¼`5iýúõ33	Í4¶ ‘H¤«=,ÇË‹P‰t>SU(du¥5šÁ)†Ô[^&5üéW_Þ¸qÿË¯îÿÛ¿Ak¹vG°v-D“Ú(ï”yÞY<m'˜CÍðb¹j®oJåw`ÃÒÇÐšŒ¡HrDš
g$iÓÐâqÝ7KWéÔôL||ÑNw"±#Î µ*¬ÇZ;}â®`-–9}×Tüã@&dœ‰Ó©"¼Y¶¬ã4'™cjÁËƒkÛäca­YF?•š›Áp#õ;ö[9‘ÛïýîÖ©{¿»ý»{·Þyÿýßÿþ>›°Ö¬qZ{òT
ªÒbF~$\sÞÚ‘#¾·666¤Ù”l6q¤Ÿ*24¥¶«¦Ž€&¢5pM¬\*œ#wj9Çh9QÚ«w¦±|‘ùiž“ÁZL°&Ã”%–Žà·áafbÎÝt±Q$™˜×™ßåöéYPe¬fŸ&‚ÃÝV¸J;¸²|pO2V#Â¿<©áµ!¹®ú\QÎ”äÔT ¡ªùÜ^™‘©%ÍºËY†¿ÁZŒß4=ÌUY„öÜªäÖ?"v3zãXYêÝ‹åúu¿e°¨ì“k:Ö6¦óí¬™aVÛ´VÓ²V?fíµ|íì‚Õæaµkn*6:ÿØúÓçgÖCjne·p©m›ŠècT±šÔ¹ùÌ~ÒM×Ò×ÊÀéAVs°fsÚz·>³•
È];·ZÎˆ?m)ÌŒS‰‹©‘+ƒF¸`WÃjõÒ5C5œµ]
}¤WXsÃÖØ`3öÆkFiº‹¨ÎÙp÷W«WÝµE-Øk;Æ¡6·Ú\¯ØV£Å“&ã4#µCšj‚ýR«ñÔ ¹ Íü5C‚kwPPY_	®Õloú¸†ÅV‰ä²
nµr¾[ÕLCº¨±
ÔDjV{÷½kv´v°^Ú1&¯ŸSäŒ¨2Ê¿×NŽ•ÝÇwªxDˆ„‰‡lÖ¼d4‹£—M­MÉ$€–c¬µ%“¼~D,¶¿	‹M·5µ„ø8^èâlœænPñ&VCGÁ”ç-¸_Xmïa™Ÿž‘ÐHMsÊ*!ÙŠðN‘(“LF˜’L'ÃêâŠ¨tb•ò¸A¬–ÇÇÂTÃÆ:"·­È‘fžkxsl\³LYÎ¡ñ(e LZE2­<*ï!1k
ž%¹Ÿ{+Nð¤œ¨pöM7Y$àWœ*O †z‹ÂY#¯$Ï/p„üÉT~Q2‰±×—ÈçuOšÇpÖšFÐAÙ‹Æj¾­vö­_’Ûù<Æv™S f¨æÈ‡6xÆ¼´„G|ÊSOÉeCO¨_m¥'±qŸ*ÊyßÏXC¯+_d#¶Û¼ÞûŠ33á„Wô<ºÕ 1L4oÊów’A¨ªÈ.ƒµ$wCsSìÂ> AtÎ>có/LÝNîV`þMYj¿éYMïî÷çì¶?RSÖ”.©áªk—Wç¬qØHi¨¡†ú†ŒóÖLmgrð-7ê\+`ª‘Ù'X£ÛÚ+êÍ?V[¢L[À$"°¸<1QéîS7ï…£L°.ãgÝû?8kÀšTõÖtzúäÌeŒ¼9/\`­'3Zâ“uIùý©4)16>½[¸LS±iª3tÊ“ò™Xš\’ŸËóñ¨³Phy85ž=gMÜö½ðôQË?¶púÕ
å9ŽB'îÞÍæ˜h‹ZÝ’(§ 5å£LHS¹&ò5¦&¸VŒRp44šÉ¶ÉòÚÔŸ²DCgdBÁj/½ôÒºÎN&¯k·.’	yk|ÿÅÛïót99ÿÎWùi)#¤BZ%äqÅŒÈ\s•c>¬½ÓräyXWiÈ68:Š¨-;@M9]£Á\1f@+ü±/-¦¬û–˜YMÃ ¬£4¨,F^$X›«ŠJÇ(ÆU„D%GºäÅv*N#q™kÔN,»Qk‘=ËLYÛ÷<ãëk)‚DÖ¹F|ÿÇÀZ¨û‰åeÎÉêýš¸ôõã¨C{Þ$¢P	Î$ÚËS\«L¤TßJÉÎš–5·Ç}XKƒ‘©Q2TŒÕrÑGk9ž"–2‚rYûÞ0=kÎg³l£-1®ÕX@ÜXjtqÜØ¡.¾ßašáZPi±ï,Ò!fbÏP÷xM5ìøÀ¡#Š ç©TgQ¶g[ßÖ¶
ùèÚVéÒ©Ígƒ³§jí¬¿V­Á8kÏkÏÙœ5¤Ù…Œ[ƒß8Ü@Â¹¶¯Œ@\«¸ÆZ§:kQ©ï›¦íû ™ùkFk@™* %ã5îµ9k“m·nJgq®¡“†l5QþlwÖÑâ_šOj( ^P­>¬Ÿ¡j.áATû×U^ó¼™»æCš»†w-ÀµZ`¬d3\Ó^›q›1˜±˜¿ÀgÚGÜè<µ7+b¤†øáè“öèÚ¶õ;ÂQ7[°¶VõÊLYS[2LÍ#°ÖÚIÁ£†°1yÍ‹E;Éˆ¶%©I«xÒ éWƒÛ0æšy¬5ÅÌÏO„$VFQäŸXíå}+Ì¾xñ-f¬ÉYãOû‘ø*|„™*4Tk¸ZSÅp!D|P;Ê¤“pÎO&¬ÑZKsXˆ´¡¼rú™jæ‚!KKÞ’ZÅv/iº³EÃk¼óæ*ó®£ ÇÌ³I¨0“IÜÏ{¬³2_P.pÞÐÚ«Åæâ“’È×Ó«fÉþ5Âåá5MÉÆ–›0°œ€—È5¡tc÷î¥)ÕF–»3\Me<éXûõAÇjÀšhÍ¯)6™™‹«%ºúà1–ú‘Ø«Ø¦SŸ=ò@Ãbµ§T	ùÄŠ¢E®„Ÿxú(/¯+€šI	Y¦j¾È•O$&gÂŒ?Ù1“LgÂ‰"Êxí]‘¢‘ã*ßLFì€5ÝkªrÓœk†ü*HÄïR¥5MDi¨&‡²gàG¯LNj¬ßÊjèÎ¢%	°oG5]d~f´6=íA¢j&ŒµFdC5ÔÐÃõ±š¶jßZ]|?1#‘IÅ#êæ}¢¯ìEÖ„=}ïî'¡5NaN¥a7Îa1VžRË‚RµJ©sÓ{ÿòÕW¾üó—7î¬zk_\ümïåG­cBJv!ÏrÁfÓ]ÀBPS¾…qÝ–K³FÚa¶TZËÈìh<5¶{)?<šN)Ù=•ë/å3É"ÑÛ¯ú´öÖ‹/~áé¹YTkZsøkswï–c1>ãO¤Á¡X¨2
ÖÒR1óàOÍÿÊhz,Î–FaG³ÙM›rñQK!¯ŒƒÙŽ¡^7'ûúÞSû‡²§Ní=wá`Z»yÿ¾•~ŠÖ„kÎQhž
ŸÖþ/°6öê*¬½šgØméWiQsuÎ^Ëa¤e­Øo(‡óæHö[;46Ü›“Á˜¹ åúËvÌ™­áé¦Á&@;®³DH0Ž/ÄZ£è‹-‰Ç4ZÍ&”Sé‹ÿ"óË×®½ð‚fÿÂXÍÂû_?xP´æB!àÝÓupåàF×A^¨š=¥‡ÈYñ‰ÀKOäË}>bMe""u‘÷Æ0ÙFŸsÖ4›ªMöx‚9Ù‚9›g„æRFš	tH†Fš™¸gÕžËê©ëÖaØ¶oÇAL¦Rû÷žd˜±ÖFŒ°hgòQÍ-‡pÖþ‘ŽÃkç5YM:¯VÓ2¬É]Ú¬³àšµ­]Ú¦­}üñgžÙÒ¡0¾ýÛ7o^¿péÒ™ýÓ ’0Â7³Œ+êIjp’kˆ¨GŸÒt‰¶aÃ®]º¥w;&³më¦u|kíÓçDxÕÉØrÖ\¤ö_7m­Õ~ÎÚÂÑ4l¶Sýh\V£û9‚Ç|ZÓ¦«²Øt¿5·9Ö­ÊÇ5·hP6«;ÂžÅíä»Ô‘¾”oƒÐüP3N«5Cµ¨Vïª9PûW¡ÚêÞQš¶¶Cx-¨…ÔÔ5×ÜØµz^Øj‰MÈ&hó·~cdˆÆf÷Ó|OM®šS´ÖñhÇ`Û%˜ÍŒÛÁA…ø$Mi",hµ$¬V.Ç’¢µpY×âdBqM±p¢Â™7µ«Åª§ƒZÂ1XUyT¥‡ú¤.ßXÖ^Vºÿ6~)c¦cv'?÷MªLSº›`T®¨#LÚÆäT2‚(Ê›L8Í¦×øÑ$sž—fÎ¬$#.Oý„šÈÆˆþHg¸6Iu"e‚dp€!aNíH…—pšÞ~TmR…©´bsºñ×€5‘£X¬˜ hhÖ€<9iê‚S?Ú•“rú‰¶Ïóc¥~Ô÷QÉw%ŒVaÍE÷»x‘•}‡Wamqñí_½½˜È$Î¿õV k|±Ã³:XsGÚ”Úy*Dqyjl÷ì3X8ø´
VÕ@l½¶jÆškà3WžžÍ_[á8žÜ&é,jŽçÅ`µ.¡#®+á¥¹.gVóÓ¤5.¹\Cìç$X­’P$ 6õÊßÆjWÔlÓµúJM532Ö$fÁjìÕÞeù°QÙPC5ôÍ2kí´æt¾5õþ:Z›Ÿ·LÈ°ÑZWW(Ô¾¦‹PkT/û¼Y”k“™49.qvU'D²÷/_Ž—þ})”øäËO’þ|óþM—»ñÉÙE>hMcdÑ= …S’šï©æ.m³[ÙbžÊÅÚ×Dâ#
½Àn‰ÓoEd1ïóôŒÌÒŽ„—²w/¨Å(žë—_S×·Òû©ÐR³4¦Íp×æšÛyËMfÚ¨%LWóMÒHçtÓEöÈ¡\,'š0ÔpÑ¢q€Èþ!â©FÍ_ëb,ñºþ6tiûpï·ùÜ­·ó››ÎZ3/±Z
ùÇ?‚:j\Û¸q®ð@ÌÈ!#~ãÚ#¥þÑ±7Þ8Ò?ˆ87nÀ¬ÁnQK¨WÒH6Î­VÉUó™”A+ÊqÄhsq"q9Qæ·9zýÊ¿çUaÍ†ÛÁn`b"dâqC³@V
Éî	`í°æ ùÆ€ö÷¯¿þºƒ5£µ—?~ù@OûÁ—W6Ú§‚öJ™Î	'"´0`ýkaÞÂ#¹|JIm:©;5ÙÇ#0|6H‡-I¢© 1%´‹ÍÕ‰ÅŒÃ@8 Nt¦?6"#%‘*õæøV9lb82!c˜³L— Ö„.½¿>¿ßdçkB5ÕÔá¬Qõx~þÔ©Äsc«IŽÜf#…†8HsÕlvv®Ú3kDv^‚˜6?ÖÖ±X«sµêX­ÎXóam¸W°Æ5±šƒµ]½Ïõò0»¸Et¦ŒHJ®»~}_Œ€µ3ÐÚõë×·Ý/øÂ_cgëÃ¥ûØiÁYóË®†d¬ídÌÚ÷|XÂq/¢}§,Ï§†×” "ü¦e‘Û"‡Úì¶ Ñü¡×jO¤öZ jÚÃ[Õ€3ã1!òÏ¬h2¤ÝV?ò¾Ì5õ®=è®1ÞŸ¥–×|‡b«Õ›šgðæ·ãÂÖ€å¸YœæPsZ~÷ÝG×Ú$ìPµrÐÚa©#±$ûÎŽÖ¶x¸07PÅ¢ÉJ‚JêXÙ‹{å°W¦6šS×Z8‰"Â¥X[gg§ã³…ˆ±[³² =^š
]]}¨}àîÝãV)XÛ¬½ø"”ò6Ù"WüÓ«Å|QÃ¤‰¡¬‘2²A7 ¨<™lÑK:¡©™Þ„ˆ,Lä‡e£•€ˆr9™?vL%‘y"0è´â—„ÁÈè÷RKé…*„ô>!Ú+SKÁÉ#Ft«Pó¨úGÕV3B­Gyþ=Ê}”‰†ß¦l~/dÁ" ˆR#§–TéèR&­‘-4±T&=1UB<VOeŠr)]Î  ÖŒÕ\¼È
¯B53ÕÖæógÀZ]¶ˆ©Öx‡Ëd’ÔBŠŸ$ÜµË++û^Þ·ïèÑ•ÍÃ>à¢ •1r@Ö.§t“+¡LfþiÂ^@»ùb;×W~l’_œ`H^n“]¨žˆG2FáyÈ(Ðj¿ŒX!»¨Æ@êïùÊ„7U3aíúÕÄjg]ï›c5óÕvˆÕ|]›>«¬™µ&OÍNÇ4Š j¨¡†¾%¾ÿ»æ¬ÝóYM…äxkÖ¦çgªê¬ötœ—Û¼×†ôQ;á%½Is¦I¡ËØ ë	kW)ËÒ§Û±Î˜’ýÞxêÜ—Ý¿qAŸ†è ùâê|×Éw“¼ÉÐîO·K@qüÅ¾‹bü†½ÆbFŠqÒ “‚ yÛiY—Ù2Š™F;ýÃ‹S7NKR±H•ê ùej°BFkCk{k•Ê]ˆ-œ<=71ØLÝ“Ý"‰4¨¥r„\œ@©"yf^¼Jbòt®¸”‡€²C½”?ÊßŠåìÏÒ©«m(ûÜvX­éÜ½[n¿ó›û7?º)US0Ekë~R¬sà àø`(ä«4®ª½qä¤ŽÙ!Pe…kÊÕÊŠ­}ÍJ!›¬3m$KÎ#¦*A«ÕQŒÙsâ±1gMó²Ec-Œ! j¢kTõ¨»“ ’µ5p™š»6O ä=×è‚XMýjÇÿôƒãŠñGc$CÜ¨T¶¾>†:ÉMSßZAm§§&×tô„™=.UôŠx/¢º6Å/Žq¬U{íFP¬ÅMW£FñÌˆ€ŒJaRhÓ3ÖóRM(!#9M\CPš®«†2eß]Ü›2XƒAbu)#µã°õuàšHàxáüüy†a3û=œ×|[mfšýL6{jýÂÂfU@2	[Æé3£M‚5<6ÁÕ‘CÛ³¦ÝkURs‹©z%à4VÄÅEXãlk¯`íqæ­Ib¶­$õ÷nY»S1ÐšnÜðø3¾§Ñk[­Yõd/°¶ÈOrMhöKüôá´æPNdÇŽík*oT¶´¨ÉVÊ|ítÇâÎl¶ïŸ	p^«¶ (Ò]Ö0\=Âq§}›v.I¤ª uk=5äH­ÞUSñ#”V5Ó´ÿýûw~µxù,UÛ7î×|Ý´Öµ i	×à5hÍñZ€kÒá€Ø@6íÞû&½YÝAgZ´ó!ÊGÔ¿ûîÉw×FcQjk•ÛßÊf´ÖÏ¶ÄÇfÃjkžœ( g•0µÜñdW-ÞL†ã­møjaƒµ&¸,ÙÌk–Á•‘ˆu«)ÕT#/ÄŒµ>3ÖŽ;cÍåö»Ô~±Ú?Ü{diò\)Ì.bÛÓÉd.E½ Ð¯@´Š# $*»Ú±€˜[YÊhn´W,AkÃTz”ŠÔñ–§Tq¸˜ä.bõó‰î?M‰%e&3*pdŠn3ÀN–’U¬Ä¯ìÁ^OÊ.*ÄŒ q“‹éKT&±œ&`13oŒ×¾xiŒxþ¼îÈñF•¡,§6ô&3 T©8cM¹ýˆ	¦h¶A¢ÅÅ³?ë9¿¸ø³€ƒ”àöQ­ÖÍj^²¬ù¬¦¬Ì§®<½²²L%ˆ2û‰júâl˜Ì5€­ù4ÂO›_‘ö-«ëMµe&!ÉŠ¬4°…x¬°æ°%ug’{bXx•ÀYÓ;M²ÔÇÕ_Îá›xH~åU@M›o¬=ÈjOú¬æWß\ÔÏ­Æÿ›\ÇšŸéœ5û/*Y„ÚGGl‹ Ûwþ[C5ÔPCß¤ïÖ.k“€5!‘›¶6=c¢²+·ÕžÀ¡¬iúŒÁZ_Xoqª0ú¨BÉÀ;SÊ÷Rï Å<=	Ÿ~>îõSïkŸß¸|ãŽ
!§;NDzÿLÅ, ?%0‘âŸW#úHLODq$àÙ´5/©F¦ÞïtHË›&‹©­)ÿü”Ç\­í—¯ªJç—úEz?§Š"pÖT	§l(”š8QŠ6Ûü¶b„½j G†Ò¼ÃG2JŸæ—È§Fú³jUcÖÚRš.Fûõ‚h[†°÷Ž½Ô/ÏmËº¡¶6u¶=·w|ÿ`ÓæË÷Æ/Þxçö…Û7o¾ÿþMäz^îØ|9™kÈÆé³‰kŽÖ~òÈ#?yÄ9k»a5H­l
î±Qö8ÔŸUw†ÒPl#l„‹AaF4£¢–u’B·,7_¯[€u€ÍÎZÔ=\&Ç)ªCIÈÑ.&Zã8áŠMgði-`5>NÐþ~ø© ËÀšIUP§D)¤±š´'™ÿS¥ T}nªœF…=.¢Ñµ=*Lrš,œþ—©Ä®j¤x4³Éx¨Õx
xiA¦A¨‚EÔŸ¦ƒQ6ndCý(Úœö¯dÝ¥}6Eøï§ò¤PM›Ì5_u¨†ô|«u?MCi3À:3>#VCf´ßq&;²y}Ó¶Ï.-t¶.ä¶l#|æq	VÛF?¼t‰*É¡Ç§|±UÔ¨ÞRóƒÝ¿}ë†ç†7¬seŽÕ¸$ùZÛú,·<kvÚº[±ÞìKkÃ××z×¹ž5¬51wUK=©ÙÝ©ÉY»ˆ_¦m—¨c›·†µÆ^Öòï€Ýør¾xs­xèb£(’%Ç¬•«¨£±:šÁXºÀS«C5ä£˜ÆÎˆÝüíeóE7öÙ¥3·Þ‘çDÖDkþÔµ ’Õç5iØ„lNðš¸-Ð{Z!1m÷ˆÒ|j'YùaÑ&Hm°µ³‹M=jƒ­ÀÉ0ÎÚ£òqÃs…‚þáyžì6`­3æE©ŸL”ÛZcádÌK¨4\ÃTsj"^$†£†ZB… bŽ–áQÇ÷üú¸Œ5c5|5ÓâUu~HÀ>` ÚéøÄë™Ìç§ð¹
úç.^È§8§S_pàæÕ„¬B{SriV‘ýyºÃ¨—N@¸a Üw“ô›¢Êâ‡?,yá4ÎÝ$ÝfÞ¤MGN)R‘"…=¡2Ó?-¡Ÿ°ÂDŒÌÔ2§`;_ª¨6sR¿Å”5ÐÂkô¹Máí#ÝÐ‘Ý<®ì¼±¥îb)=ée$¯,3)ÔçkÊÃÄ\|áì¢UAl˜k‹óó Ûyï6ñt2á‡À‡¬031û¦DXÀ” ôŸj{ö,ó‡Æ\£ô;CZã˜KòF®P)XÛ¹&¬;¼
Ó¨@È…•B5ÏJ"9•
•gÖ8&2Ìx‚5¡ì á'BÊóP,ÒAE¬T|˜¯ö­¬&Ýà›D{¦ùê¤m¦«j€ÖÙï`Mºì‡‹HßmA6ÔPC}û°5ÁšHÍ…è:X3q.Ìj!Y8çªO÷Y†ºš0àÖÝc~›"*`­žL’´:Ì•¦N†r(Qæòó¿|é&+òƒ¾üè†—™¹úshíÂE/oo&dþé'¤GòL¹fÚ™˜mt$É‡v¨­˜åµ0Œb|î ÍPŠ·äÔ˜®ð	¼1Ùl)¯\ìß{ö,&e:–èñ‹ç…FŽÖkD{Ì(„,4§†'†‡³Ve';-2‚y6x˜†žG ™:àF  e?æK%r	ÞÖmÂGËfs½Ô¢f×‘î¿I™éã§öFÏ]>7~ïöí[ç˜¸öÑ?${ÍúÖ~ËG¼·µCO>¿Â|l7qí[ãÚÒ#c²ÖÐ`pÈÝGÆ^Û½{÷˜¬5„“7T­wdƒÚ ²f¤¡ÑjYœµ¨]ºHwGÎL6ü©˜ð,ÇußVkA´®á^j,¶8Í©Jh­fâ-XÃV;¼£XSm)°öƒƒÀšéàë«‘|îØƒ³F‘l˜žT ÖN¬u»NöÓ?RbœT91Iu"Ñ•p,—ä'4MÏ„{
°Qú:\2vãiÙðÏœ¯ÆeÜ¢"ÝÍ\`(òÇà"‡tóvÖ“¯á”9\³Þ5ÉEjfaë~mrÕÜXeâù÷ŸšæŸÂ©3P´†¥6O>äú¦ÖýgÎ\Ìî¿Ô¦9Øm­ƒ¹ÁÁÜ™!ÁÚ²û¶­]KäÂÂ™…Ï²Ó¿jªëQÍÝ€&Kb¼(î¿6Øøë Ö°ÓzÑV*røúºgw=.‹m×|a¬9Xa ¯€×Ädu\Kj\òÀšÙgVÉ±‘›/uªùÑ" þšnÿÚÁr‡êô¤±Ž6µMÁýî ˆ®JWj¾~þõQý"5mþŒÝÕÐùŸ­¿tf}Ç¥süÃuò™­ÊkZæ®I¯õš¬3Ùµýÿè°jˆ´V9£MòÉÌÄ©Ôhµh&>¨qQEE–s'±p;­µ³3^s1‘±B¸³5Y!
²NÒ”j°ÖÔ°á§-45µÄš+›€Ô
|$‡Öîº¨¨|jà8ÿ¶«¬FýŸ*ä']]üð‹²{÷‘/fwò˜®Yè‰çT99 µwg‡Ó˜{‰¥1ì7`Ð‹p*¦ffege¬azç1ÚúÊ=8kT>–xÝ›¥È"­Q®˜'€dbRõÿqXõ¥—¬þ1¤ûŠT,[/ìd…Iü{ŒÌè³6`MÌ¦›Bå	„ñª”™ŠM1%¬¦’LÑB(·#»q¼Äï›O»:H`íNãjÇ¤t¥š¹ˆä®ýêWgçÏòùÙ|Àj‘äC5+5Tp¿‘ßÒž¤Ë«åÉE{¨€ô“ !d Í—ºÕX¿Ãü••Ãøjª©l/¦)ë¤)Ž €-ž.¢pW’=O"º'À7ñWz¡)9VccªuP†'^5R›`û6Vc½sçêüjÀäŽSãç$Â†ÕLg«b6Áýk5ÔPCc!¤„| qíâ´6Ï:·¦HHÀŒªDÎÖrÞŽùÖNÐî'¼÷„È¡¤MG…[b-IzŸ-y¡Ð©ñ	âÐ>º9MRÉ‡_üü‹¯n|RÒ;ñX¦=Išå?æJ³jmH§˜FFz„~¥AføtŸ–Súõ”ýkkâ:ÿ:jqPà61“ØîòÛ.îü‡µòôË;XSãÀ‰¹»'
'BÍ¹üÒ£¥ÝTìxÚ£éÃórù¢G_Ï¯¨'»¶´4:OL–ŠFÓ`fñÒ˜]d9þ½/mêdß»eÅ/AqòÀ.-œ9G„ÿ¹¶Sì3ßû~ãšª§T
y„|ù(¿Ëê|ì	¦­©qÍ/…<²¡ÿIAäˆ\#ª^S³šu©á.e…j£*‚ä6¶ 2åô‹ã´F9`Ò¨„ã,:|«ùJ“ØaNVËƒ¬ÆêÐš<N9kË„÷_YÞg°æÒ  ìV¼5—2òñŸº»kNöÁžH¸‡~tú4ïóšs²æóÂ$šBúTš@±p2y3fð%’<Ä“JŒFc#%G`ÜÕæª9õ=¬YTds\œê¸ŽkÙxT´
ìñM©þãI>W×b¶3-®q#÷8Tc…ÕþX“µv H*!kçµÍŸ;·¹­iýø©3Û˜~½¾‰¹ÃLã[ ¿¿­©ÕÇþìÒgk;ÎìÏ©Ÿha5>ß]>ÔØ²{Ån;g©ŽëÐéü¶aç.±ÚÎ][{¯ã¬íÚÙ‹Ùöìº‡­õR#)XC»Æê@ÄÚ/à›€5±ßw\ÆÅßñÔ;ú–›÷¿é&}±ƒµo˜WpÈ-¸¬b3£:²®?íaŽšï©Õ£šjUG­Šm7o jÖ‘Ù±öÌæõÔpZSy“Õµ®Ýz×ø÷l¼ÆbÀ¦¥Ø 63ÚÐI-'m/a¸ÙŠct˜U«}O:ˆækmñÁÁx†ÂÇxœpþdÐê$gÄ‹VN@)a‚CâÑÎVÚ*…°ú|Û¸ljkÂZ²Â íÖ¦¸òDýj8kÅnŠ%
	L± ªk}=Oup‚ëàß¬í{þÅjb½>§_ý|ñÆ‘þÓ?QÆ^Ù3eˆìH´·¨ú÷ Ü­0¯Ö¥üeðKÀXkÏŒÎ‚pŠ*Ì¨
2Ÿš-¥ÃÀšG:"´†µ@yiª”©üM§V±Fé?–¸ÛF°M©`S•#r”<þè´óÕöè%§ C(¤w‘Ümñ'ª ¬s¤JÈ¥©ÌÒî#LX›å!(§Ç^Ãçbº•Ž‘k%ù°öÔÀžŽÕ^@o¯‚jŽÕÞ>»ãüâÛ‹Ó=A$Iú5òG­°fˆô”®T¹òôüÀž£/#`MÎšëT{Ý‡5+ƒ4Zc}aßa^‹çw(2®Q¤ø2e<-`+"8ûÂì¤!Xðÿ±w¶¿mÖi¾ÿöu%DU+”7DuE÷Fc[n&J5¡ñƒªã 'ëÖ$ -»‡NÝÊvêl$šF3éL“n‚°AQ šÐ1¦Te©ØnT©,éhõì›Õ‘Îç{ý|ç&dºÐyéïýàÛm ¾ý¹¿×õ½â†`îŽƒµQXÍÉ}kÚÙ¡Žãe«ü~¾Ú­Û·–Å‚¾QÇ¶ÈÚQ›…-\3X;wQ-ñüoN´´ÆŠêé"uÕUW]ßÃZû›­k«¼2lM)#'è[ûGGk¸hq‘èâøx{ˆó’>Ûw…„mxl)j2+Ó

qzdz5×Cã¡“3™™ÿñáû·®á·¯.Ì¥SÆëTæRiÑ,'oâF¨qä„œÕ€hý=ÔãÇ­¡­@ Å”:Ò–‡Ðß”ZP:0’+kÔ´$Š3i©€‰kWTþo¾šr %x­1vâ«?&ñ§,mqp°ŽR32˜¤ÂÓó°£Fœ’Ì½"b06‘ŠýÃ½=9Ëˆ$	òo·ö·ÐÄFîÚÚ9€ÑF0ÈžƒãÇsýãï½ËÈÌ5‚Öæ‹"EkWÞ9¦tJ¾‘ÏúþÐšášj!&³ÖQ¡ð ±©j9C–áh†½g…±Z£ríuG&+-ÆÆh®Õ‹ßWßECk¼FRÂ -à7‡ØÖÓZ8ÚzíiÂQž|çÚ¢5­¹F@K—þ´¦Ã?<½ýs_[¤¶ýí¢‚µWPä³Ì;ÊPöH'Ä¨€~öYµ¦âÕrYÉ.Æk±LÂ²M¢Ir¾AíƒIåŠØÉè97Ü;mð¦Qáhõ’RL§mÐŠBY‰ˆç"ãÅ\O§`íïYY|\3†ª±3ˆÓKTª(±?éí´`Í¦­™èb›áßÆ¶Èpóg€Phí&b@6¦ëà¥ÈÎžSgvkN±ºÅÝhu’Æb5ˆ3@×hm¬Qûènÿ76›`ÃÍ4™Qˆ?¸ÕwÖô‹[]¡£ÿÀÎ½dà£ƒš³ö˜Eö³ÖŒñ˜aF¶µª±!^çBGf6”Z®3ÚîC¼šeÖýÆ6ZjIMxÆÊfÈ¦È7WÏn³~Ã`mÇ¶—vìØqîú{Ò_åûÅ×|ÍášÑšË&#Ò-Væù-ñwÂ76œvìYkË=ÔÒ‰z#á–æac"¶H„2GÏ+„6mŠTrãa«pÔ¬l`m´¯-à¤QùÈÿž‰P•¶Ô†æ-ÍQ1ÖZ´‰2‰¦3›7=­ËTÄ§¿2ZµXc.¶ŸÜ~ç(ù°vûÂõå1`mÿþ±
‘&ÄäSÉ‡¿£òq°
iS©¨f`:¾*')‰´XÙ$1ýt	Ö,^¤”‰·g‚%L‘"LfcÆË¬äS+&Nò§U¹2¹2·‚(‚œÍ3!€66e‹€„š»Ï!=±É[SN¿4«~J2o÷Äh}ð]Ê³LÚ
žEõ'óüÔÇ¶Ó·+œ´&‹ßZ«Âj}}\Ysó°õK¬!ÂENžƒØ–æãí‹KK3]˜AŸèž‘#– Ùñ¸n}€Šgªï<ñÈvŠ Ñ!`ZCÂ´ Ödìm‡Õ„Œ—°†Mê…ñ‹1~£a®4*f„5¬/Ïf@`S<áù_,v>Z¹'kˆ½_ME’yV»¡ÈþÓ#úá,]Äm…=2‚Å¦Õ`uÉ¤vNÃµåzd]uÕU×÷¶¨±­9]TÊˆ‹!dD"»ßÎ¶^œkr^Ô³Ú÷VN†É¨5pÓÀS…‚âïy€s«ü’±r|ñÚÒÙƒ33×?|ÿö<Ù`Ÿ“+b®t6Om!s½2Äõ‚[¥T,‰¿äQÒF¡d>CŽ´Ú˜ŠÊfLQ*— ù€ÿ@‚8
ñ¾’`-OýL)—+žå’'°öS,,7ÚZ;dÁÑW´­IÕ?ÎV¼FHÒõÁEa>Qpâ+“¥!ß³p…b!ñÇïëo‰òIöV.ÖBmdÿ Ýjý=½H©#ÀšXõ¼sçàž™÷”ùáïo\øìë÷ïÞ¼åÓßÛG*õ‚< ‰k~Ìr¸°ÓÔ"Ió“ÒäŠˆÜhU#c$Ö(tƒãÄ%?&gI¡þâŒ´\z‚±pLTõ€š~Ý$rs¢Di]ÔH‡ëð„Œ|ÖÂÞâ‘'Ÿ<ríÅð50XÓ<ìc‡?Eæ¯iâÚÿî‘ö¾Ã‡µ'âqÍ`Å”óâº²]™f¹ý]³än?ûì\ÖÎ„f5\¯ò\…2[Mñ­e-):#X¦)šÌ4ï;Ê‡ˆäGöXÔõ¬)8¥BíáŽª!5Ö Ä=¦²©Àr&QÌš³&Vó7  €¶GÝäc ÆB	ýT?.²™™‡ÚÐi­ó§™¶Ö½íTdwË¶3ÍÃ»wojèÞvÉgµ]½
Ïß&æc× eb0C1?I^š/1•AÄ$Xsê„ÏFìƒw€Õæ'A:ÄC*–Öyiói-€¶uKÍcç¿æèÑ³|9xLzÌ`ûn¶šF«YR ŸØ;k?U ¥9´ttcéc@j(@5šV5nyèüE@MÚ±£ûÜŽýèÔ—t„·ÈxÍa#jÄÙk2ØÌ_ó‰Íéª_yµ¹Uú9‹öWí0XÜÎ—;¼jÛUVŽ.mjn8Ã¼ª(0¬ÙµDžŠç5ljÞS‰:¥ÍÍÍÄ<FDk‘?R%ÓÐkeDQ ÍÁhš€½¥„È¸ÅOOójþ
Ö¬²\‚µC?AZ*k‚¬¥¤ûöõ?ìßÿ‹ý“c>8§œ x1. Hä4k «Žò¯W8•²	ÒäÅ<Œ6–äì‘H–ÄHÉx+MUŠdÜ·¬”ÇxKvÑÝšYQ5¸®ôexsXÁc³±k$AÆIqT™=å2ë	±zGâû1ÖÄj, /±aÝÐœM~+Ca+‚»6ù”¤Bª’CGjO›š\˜|áØy[*U+ƒ¬ÊXëè;ÆÀ³uó°aµ×—ç+K¯.ÏN.^œ)ÆƒAkúªåøÛÖ¶f½…ø6,zÑµ‡G·_~˜	kzkUšë7aM¤¦xHÙÜÇEÁZ»SAõ'ö^mœaûz^%Þå­Ášá›ÇwF½‹ã³oÀš6žwbzõùkßÍjÈ²EÛ¬InD[¾e º&-][r²èƒ5hí³zd]uÕU×÷.„ÕX]ÈÈE‹qóÖÔ¸&VëŽË[kÃ^ÓM|Ï&{Zf˜’‘­´­ÂÂ:ã¼¨r˜ËA.—*í×––WÇó'ùH³èq†Æ&K‰D–ËšÀZŽµhkT—Z‹‰”`m%]JEù£eÏMeö+f4ûÉ¬’Ý1×,>cu0¯“ovpœv
ý,°Ö˜åJÑ´¦ÂCPÍ)Ñ˜KÅRÓ'ðÕÂ™|Ï Ãˆb©•¼Bæõ1£ ðþjU–š`-_‚˜S=Œ¡<4`­—ÊÇþÞ½¨Çív’¹¥eïÅ›ïÝ¹sç³·Þ|óÝùýÝÏî|ýá×nâ®Õæc»RÈ§Éð?þ—°ýTÈ Ö´H“¹ÜØdO"3,Xùcgg:¶¾µ˜’1»)Ú¨rGpÎÊ%Áç^ŽMVöÈaÌ‡³\(Lj?¥˜“ðíØþP!üÎÓO/†8§_&_ZuöQâðáãŽÕ8ÓÜÂcÇ„üÝ§ñ‰„Œ=ð ©cä`S´4+)ü€0üCmq¨M4,Ê§J‡oÅó™ÁøBÊ˜†Äñ³@ððpÞ¤ÒOÄ>«m€³ŠHv0m7–É„ìˆýì9~7(9>“Hötþü²…^CÜ°8dsÑ¥)µQC©‰ø€ÒFÎ-Žo£°gÄ8m‰íôÈ©îÅyrGpÕ1Öô?Æ õŽ-ÍH°Ö»sp]¢embxç®³€…›Om¾¸‡äpËQdeé]½rÈ†(…d¬škîÖ^£}ì[yš#‚G‚$HPÍ¯êÃ•hH·÷Zx©žöW1ãÙÿ!ø“Qìè¬5_2Ö(ƒäÖ@Ü:»ö³pµ¾AÎ§/¶{*p×Ëý.7‚¤†6šj@"ã5wãúÉmçÎmÛÁŒ¼LÂ»ô£/”1²c…mw¿a¬±ÿf.¤Ÿäo:*bCAM¤C6Çk7­ë%„[;r0fËzñ€¿g»DÏZ3´v†ÈZÃ‹±' 0RD*…(ÕŒXo‘h#­m±1YBy±0GSØ¼†ëOã>ƒ°UéÅ›Ty††5½¶‹|p~µŽÇ9pÌŒ5`íå—?²†5t›_;?ðÇûpÖ~1ùà¾ý“*ªˆ¯äã³e¼ª$…h=™qXbù¼’¤ŠQ2
5O3¦ªÀp²”…”
m…¢×ÅÃû){Ìª² h/OŽMŽ	ÏŠô"¯@jc”BRãX(VB/³ÖBj•®…AglÕS#z¶ÊÙHÅŽJ¹òÇñÙ{š Òî1Œ“•”XÎé/.(…›¬•Ð,‘Àˆ[ª+_{t.D]	XÁj˜j3'——/VN¾òÊiqÔÐ|yV`h‘"Ü<nÌ†FËšOq!%@V´¤]Ñ|µ¸Bå#hø-_”£üa¬q„~Âí¢ãµ…´©™<ŽøHh÷“	õmxž`Í¦cK®dQ·.mß^ÞÎ¯Jç!µïd5f[0?þöR;r»Yt¬†Äkæ«iö¯Þ¶†5ÖØkŸÕ“ ëª«®ºî£RªÅ÷#ð—ÎÖ!5pS9ç}M ­’ÙJÝK+5,:e"®g–Ek0¬cÓEg9ëÑ²69G…âÌ?ž<ªØTR2÷S­‰Ò$çò|9ÔNÑµ–\˜*%c™$Ž\*_Šq‘°\ô
	PÍ#õ£’ZXpe5åT>;HÎ„ŒÜ8£˜çý©©ôÄêmæß`­¬•Ï-`n*
õÖ\ä´ÖLµ?NpMp–"9,žYrÔ·“JñQ#¤¦t£°$Ÿíè†58m íÆPS0dº`ë4á±7’¾£|‘³gß»ùÞÍw}÷æÍºñõÝ÷ÿ3ÈðW*ä“ ÏñãÇ>]ËYkÒ>ŠŒJÀšÅ ¤ÓrA³\:Ý©ÀÃ¥€Z£-AP¤(ÊYI¤u~Yx?‡ÙRNþ±Zx˜WÚ-1#>­Q0•J%‚QØ	eïè‘4}„žµÅ‘ËOyZÃëF¢µã‡]À:tÌ2!á²õÑ¼~ BŒ»î¨¨iôYbEP%D-&¯)¢‡ÕÀüÙ/Õ04þƒ·>MÚ÷MHhm$Ü XÍP3&(cS $'XÓ3µ&6ö=¬:b~/²!M@w.+X{ù¼æäî"ÿaVÃ4Vä`~¦mÝÜrpúòµ“óæÊ"£jYkùbbâa&ˆ\Û9!@rJ°¶ól-ãÃÊÙ¹5 8ŸÐ8’æ?1môÕ9D©­Ëì·úG™»q°6Dº?GzÈ¡«±šÊ"÷¬ªù
@,866­¾pÖ€5™kˆî5ÑP|i=lQ©~µõâÅãî¦…v±ø—¨ökÙ€i-5%Š;YD?bÏ-›#°ó«¸jT?nÓ€¼S}±ƒyyFkŒ1_ºù‘kµCk]“¯ÝRÞÂa» [@m,‚6V#·uËýkùê¦M-[à°\‰%¢ý-µŒ	v¤ÃR#e*!ÕA&¨h‰ bT;ª®›Î5A[È#nX‹%š¢aÐZÃcuÄ›Â7QgîÑšÜeil6Û`V#Ò±š}P¿zýèÕÉ_Hûœ„{Êeò5Ý,É»7l„aZæ|ñ
©åU‘à}’¸‘„f¡é—â2yb É+ÁuË3Lux“üeÈ!¥èÿ²Š+}Uf½€isV[_uTi•sW
+š…-;Í¹økðÅØÊÉðgxXg¯v¯¨ZÇ1¾úJ¡ÀÅ9šÙ¸;µ2/¨äÏéØ'°Õ€µxs;dEÎ[\Vrÿur OkKóKÀZMjƒ‹|µ1X\
g
­íFkìÉŠ$‰ÃèHI#•*‡­…kLY;~P¬iŠ EhOÔ(‚¼ÆŽ•Ý¢± §Ykz¯·k)}\/k5šç$LìÒ´K?RleÒcG¾NAAäwö«‰Õ–—}Ÿôãp‘Cæ`×`œ²5címV7d­^YW]uÕu?…>¬)h¹JH£5Æ­ÁkÝ¬l¡šìÊe"ŠçTðt:pI*E™…v°N€µ"Õ„]!Ž¢­íÊñ'Æk|Ü«X˜×L•çK–Pž‡P‚bØk-Ö©9“äB,gm8©Ð¥Tb¾`V\ÆËyºh‰ûÑœú×1ÀHip;HaÅ«Ë|Äö­5úC JÉ¡sÖÁ½TÅLUí|›äÁ¸"f­†=lµd$Và›Í'É©;u­‘É'h­§s*= Ÿpýk[§¦¦¶²ßºuêàq\‰;„ø¿÷Þ[ïþúÃ?ñAÏŸ¸ö’hÍR!Ÿ¾ò°R!AGg®9wí… ×öíÛÿ""³¨‡,ˆ…ùjÊç'KDó‘Å$¸G"7î¢Æ¨Ü(×ª¦*HdÄf< ¬)qƒ[?¿?Ìý&ÜßªAä<Ùê‹Gk1ðíð‘—	ïçóÁÓ‚µ'T¤Có;~Úa xûñãoà±bš&®ÞÞ§&+“Õ•\Õ'Ñ¸6kXÖQƒ5.)ÏZ|¨ÃjÉAdÛ*÷/)8£/±k.ß’ï“¾<7óZÍjVï™õ)z	Æ*X%…]#9°¢Éý{²êÀâV ,`¶àÈæP.VzÖèM¹|nd¾{-k34±ÑÊfÉ#;†fFZN:ÕÝMÃPs3kÿDnÓæ‰qÁÚî=°ÚðÄIŸ,À  Gÿ9-Ü®¹YzQÀKÏk{m,6Tæ(¹®5Ñš/ü´t§žÚÊ˜Æ’þD„—–%÷	°vt=¤¡õ¸ÜîúëÑ‹b/WÛˆ³¬q¬ŠHÆ®¹éæ1{4$Šæ&ü¶7u?@-;
˜Õ,xàž
í˜†~ûO¿u ¦)MD{[Dkw/œìv°¦ÈK—¾8Õ}îCóDmg/Ü]—2‚¹¦=ÿŽk¢5Ùk ›ï°Ý¶ÌDYäl»ºvs] Ç›Vmn·^×YlÕÂýMgº™›†©Í¸8·QÝ¯zÑþM[Z"™Â¨f%¨‘Lxô£‘ñÈ?`MUK0;¨…B£<ÝÅàÂZØÎPX@¹r(l°æÙªMÚoï’Ÿ"ÅökŠí§€žGÿßÑÿðåí”/¢:ÈË„€”W×2tø–­ê‘ŽSY»2rŽR‰öx[†wÔB«×šÈ§óÙRzj)'ldaŸ`(H²üu™ÌfW«G­œ²¿LjÕjyEdXC!QÃ+¦9‚a¨²‚Ês®ÊCüÈq•þ5uÍAnÉ•ÙŽv1+|f½jùd…»$¡Å±|Ð,IÀ·Œ,ü$Ç¬‡]ºˆÁšòú5›ƒåÕE:Ö–k˜©*ù÷Lr«
)øÔ`ÈÁ#p(Xë _„'¼xì
I?<~XMÖÂ5ö‡ÖXÍ`7Mºì`M‰`±¨‘T£f¸
‡Ë8;S¯à;k®[˜N6Þm©Á”|VC~|?‡/ ÑÚÊwå@
ÕHÏzÿöÜHm-ùDÖxÓ\”ÎSËšÁÚÛ‚5v"5¶zd]uÕU×ýB®Úâp=•¿ZROðYT³Ö¡5:Øe¬ÁNÔá Q¹ÖÖÑg²y¤(¢F°æiªM2QPô_i,[„¾Ê\`‘_Äq¥Ë:}‚j­á”®¾’cÐXRMßÙ$ùù 	]éË0Ö¨w,aÂhd@ÊhO=IÉl^°6õùøÁ™UŒµ¬½òÔ£OkºL	IÖˆø
3ýµ ÚTO„ã£ƒµ¨Gƒ=V•‚DZšè‘+õ¤”?É0‚,³¯;ûõÈêê†Éí_ .r÷ðpïÂBOyûŸÙ*=óÌ'Ÿïí¤BrïÞ–™™÷kúðM6Ì5>Õ­åŒ<ù“+ÿ Zs!þœƒÆ5«ý†øþ_î›ìQ¯šÚÓzÄjJÁH„à0Ž0¡´˜ðT“°’x-tãº¼x%’¹6(Vƒv€3úÛ@º°vl(aík`’MZCm5Z³«µ™D[k;	#­{
XSÂÈ"4gHB­·&RXÃTÖôXÇ¨k^°~ˆuþOŸ°Þ4hJv_G«G†°öìbz*›…ä3ð#Ü–´rG¾))VËí—1Ø”J¦ìgÃUÕûI­þQ?o$M ¦XMæÏ8q'¹§<{[/Çmþ²N¯³×J!âüH7P6âK³°gæ)€œ ÐvŒÌ3|íô¶ÆnUœQ¿5it©íÞ9@R$´Æ˜l”›YZÏgÝhsÙûèF$Rû™âkr|6T‹±ýV`mh×.ÜµO>IïM“éO®ˆFi3€­Ó•An_á;³vÑO~|DƒËÌd£Rw•Gi“Ø‰M¢ÿßîÚeQ${,Ñ$ø¹|Ê²-xØ­¦ú<kùÏÝ[Pš@m=©±åA\¿îº£7/R9B¤¬ÒKý¯/8¤ñÒl6
#éb[=c]-$7<`¸fº+`6'ëcû³ºZc7¶ëlºaaõ7öºõ» Ù¶,Æ™ªÆlð,Â¿ZK¥¥ž1iÞ‚³VÀYKD1ßhµJliilðâHbò6†C`›ÁZœD÷({Ô,l½k„y7‚vq¯)ÞÚEËZ×£_¡š±F¤«ÿûéÏ°¦OêpÚ¿}üå¿M‚j¬cÔØÊä>â;*Eu¬AcTCŠ¯ ±R~K¢<=È™ö"Ë”O¦±ÑJT?N2Š­´j
V#®ŸŒ`BËÌ=#_ÄÒàNYl\X£ùL'Œÿ;Y¦ž±¢s.žàÁø(De
$Y± «9í…mømsrÜÔD] 8s/[€ËpŸª8o\'æ-›¶Pp1U¯
«8vXMdŽÕÖà4kZÓ\ì“?~zyyÑG3Œkß¨DÊs°¦Í†”º7GƒµÑyn‡9M~ØA¢CÜr€¹æXM‚ÏLº=}Z5S_±FxkÒiŠ0¾XB#â]úB!EyíVÐÞçÜÍý°æþjfþK_í§ŽÕ^ZcµÛÜ^æw£IÎÆ«)adžHX-0ÖÍjo×lµú8ìºêª«®ÿF!äêg­¹jÌ­k™±&¬…*H½ìÔ8r¦RÒÙ“M•nEª“)#•“Ì‰V;åàÏ…tÚL¦'Ó FïZšÏèñ8xPA0Z¡62L‘óHÞH¨ËÓ«Æ5XÕ;æø;òc%Rû½6ü—L‚óS.VÌRÀ¢ÙŸ”fÎ^|õõç8™ÒÿÊ+t­­	×>•‰Å
«øê«8õÕhCõ'ø`ö5ØãUb‘áþ–†~
ˆ¼"Q"‰Ä@Ex”6N1gÍ`-…¥×™î•µ†³–¬÷N=Ó9 ¦›zf+&ˆ²Gzú‡ïÜüš«ø_ß¼pýÍ÷ÿôO7oÞZK…ù(©ƒYÝÂµgg¡µ•ôK!÷¡IûÐ‚uiˆd¦zè]ŽÈ16þR†•LOdD‘Í&Æ‰*	Ñ`Í*$e­i<vÔ`MÂ^‹hçl¶¦…-¸ŸëTãP{Û<É®=õ2:bÖ°†èÄ]£kS=’9˜‡ßà’±Áš]qe=`´&Jí »M­#áBõYç«¡°–Or=¼©ØÆW¹¨UhºPÁ&?,ÚÄ}è4&Hsl’Ë¼ÔO®'[žUÝhíU{N¤¢WÁÎ³÷WÝðÌZ«KaCgá²ñ‰™ÅžWu]kš‘=~j&6±c„#çø„?"mk­iÜÚÄÀ.ÁÚ)ÁÚ®]½Ð›œµuö•[œî	%Ï]ÄV­¥/ð,ðÖ†~üÀf°&r»v>æ’Fxx+øöÉ'¸kVBy‘¯üß—ƒ5ÒD€5åŠ(glûŸk°&”Ó}$Sm×ÞÞ!ª1ú€è#Øýë¾!ÕßRseâ>vÛÔš†³FœH7~Ú—à3œ5=zÎáZ÷É×ƒRH¹kºÕë]sþšÒü×X^Ó‚ÍÆzO]Ž´œ¦õjíÁ«mn]Yœ—õGñB?u	È¬£f‹(¨6V)S«À~ÞÚH|l–×Ò²‰+L	0­*)”hn‰†¹×¦EÉ¤k×K4¨y-øÁj*þÓ;¥_yE´«}ô3…7‘ùñçð;Þ›ö#yk“8bcåX›¥Š\“J„üPFžÚâãƒi•¿©÷÷¼RW
á¬\5ÂJô„æl¯ìûï{ðß,è”ÿèT£n,óÊ¿üåVª•r° Wö³R\8 ¯YŒÈ
„Æ±«T 5
=ô&ƒå„C7K|Y“`™ºeø¦¡Ñ³‚Sd‰*%I¦%ýˆ(`TðÂÕiŠ CLA$€†®‹Õ–UÙÞq’2ÀÇ5em½ü±k®:Rˆ½ž2Hs©!°“kÉà2ôj°†µ¯}ÖÔ­FÃ,°öâeuµ^3‚E\„Û˜É“á¬…CJËôÚâÒóÔ» âQþ„ß²†Ø›4(?Í`íû±3—Û¯]Óû|ðÃŽ°áª™µ&Xc6´F¥ŽWû@z› HŽêEuÕUW]÷[yZ®Õ"!å7®]Ó`liq‘$HYkœ'	j~ A}"tÆ•B]Ú¬pRd+„ºâÅ$âÜLïÁq"ìÊ•L‰Sb_U-³˜dt˜åWJêC³ ÿd‚"<
PJÌ>]XHÅÒ“8i:ç¢ä ’ù)zÌe’P_–Á¸Öâ^œ°bûgÀ<ÕA.­.S¡â¬AkOÿXû!¬GÈW3cí«é*'¡J#þÕÙÈpO/ó±ùPÃEàádŠlé¦L~ %ò¸"Ìˆ³\qlª4ëWd.•¢Ö®§³·g@ÊÐ>Ü¿e —@lSÏ<ÓÉ!sØvöÌÜ™>8sçßÿý?>»yó­7ßºqã­ów×R!_yñE¹T¾¹V-dæž/?¿â›kXkÖô±R¥©c°PÁZkPzÿ0œØIÙŸÆˆÅà›HT-ZšKf8#÷ÉšÕdBqsU…MÑÌ•ÓQ.nJåÌÃ
·š¢…ºÑŠ«ÖÞöÎË>úÑGG.¿øä‘Ÿò2Þš­i2Öà³cŸ2Ê"Vn?Fèdd6­Å‚q"×AÑ—£üÒ9Å`ó
•¾i>Í²áÁ¶yŒÇ¦HR±©, /X7’áÈ ²¸Ë˜yjÀ[N?1ÇÐXmæµ¢/¥(÷È†¡9Jà¬fÇk¾ŽÚrþ({nXý¼ŠÚí7ïkpœ6sðàøø©m#–1Â¤leo;5/XÛÖÐ}Îpk­yw³ÔO;#5ÐZÏNí g9^û¾âõ÷¸´!&]ù	@Ùd6$XsîÙþ»†T9d¡ÒÚ`ì¿Ö¬’i×À˜/›‚mIþÁhl	{í!Â/wíÝ3~Û~Ü¿>¤±lÔo7°ÚoýÕ¹j®k`‘‹Ø Z„½ƒ£Â³s4­lÜ=³­›§–o™©ÆÎ6W	iIþ,È¯ˆ´5@¶º­í¾$nÜ7ùkÀZ”@Ú-ýžÇTHEŒD[¶¨~»¹Åc®	Ô–€Î67W¦_«ÆHõWN$i"XiŒºõ
“¤£¸PÀš ´FMÄŽòÎçÊ&=cÊ¿uUWž¸«=E0…š·•-²úñí£;Rces*!²2<DÍ„YiYÌ*@QU¤ÉèÃ|œzzÈ’i¶b*½oÿT)ìñˆÒÇÈŽ‚œˆ™TUÁäÊ,Ž]!Ây-K„«:!BL^øÃJÅ#$²ªÐ~E…$½ºVHÆœj ½Ñ*°V!	RÖðk¼=µ‚@¹Ê·f´…¥|Ñ«¨òÃ^¥rÈ9ÞÌú+tŠèÛ«
Š m¸ öúù×—N_›¯xísý¦ý;D ®£6g=áxµWŠ!Ùk|Ÿši²ý‘ã®±«©i«…ö«]-¨„Ø®]~ñ²Ëþ·Ó Œã³Y&Óê`­@®1Vš‡ß§á¨ˆžs4]”ˆ$bÓª{ñ‚‘šsÖîÅjÏ­gµ[KkõæÚO8"ù1X3ZSbÿ²­«¢¶ú8ìºêª«®û-„\õç­Y"¤k'ÔPh‘‹²:Ýë2-è9§© ÅfÞ(.YyÉ…B¸PÕ
^ˆÓÒÊäÖPÊd8VC¤þ§2‰NÕÉÌkÌ$Z€¾b)Í3+OêL½JŠæ²ÑhÊøI˜à•@\‚zH}/zIR$4ÀÊ—R­ê±&÷yÏÙe&ß,;VCÀÚSG®<¡ 7»Fk<‘91]õ	hm6Ò2œ6kQky%ÉçSœÛ
‘FeP–ó==y+/¤{z]
ä–~ì­–žJÍà´žžá-ýš‘Í“²×`ö¶‹7/NôìýüË;ï½ùëß½yóMÎp´º8\Ãù#g\3×’‰B.Bº†kûLû}Må»î&³[„‚Ó($i Å_t6ÌNZQC7CZ>›ü5ÔT‹Ñè&3XKE	Ñ7Žãµ)Ø2Ö4¬9µ/k¤¿üè‹*‡:ò$ß³ß/cmû§N´®SØHGk;°ÖJ(Œ‹cC4®n}ÇÄoý·®86ý¯”AâµøÜâå¸åR1É‚5|×$ƒÏ…’f–Y’e’g’üèÉ,™üFdü„f0Ú€Gk‚86Íõ†#<KNðaæjÒ`46ÉñØzñ”ÉHÎü5µƒãóêPƒÖŽw/j,¶Ùl‹ódú£œç¤ik»w:ZÛ´{`âÔn¹²0bõ÷J{ÓÆ[A${»¡gÍ`mëÎý@ÏôÂiCC¼¶Ó2û÷úZýKaÍç3`l­$’{8¢ÙpûÑæ‰×6câ|õ^ Åænùwõ‚ûP h¬µEÍjì£¹•Å¤Ç±ÕºÉç Ah 6G ‡f²íÐ]`mDmK”BúrÜf¸&^p‚ÈwñØØ ¶»Äú³ý—ºÍê–¯uïëÛ¬lÁ [PÙ=Ö¿Ø–fˆMÞ¸F$]lo„2¢¹†µiS¡ZIx¬!‡£ÐXuT°Öñø¬NÆ}œwp¯%ßõøKlÔŒNO;RcS$ÐàL¥GÅjþ<»~÷ÁÑëŸïwRßšI=fé’,+hÍ`-ÍÕ9ëÃ›>,Y,´µ¥JàX±_(eI‹õHåxHè”¥üB)
¡šš+‚ƒ•9ZÏBpÇl1T]ùÃ+©4‹‘Â¿o²P\©â ÑkqÄB Ñ*1%„Uûd±Ac YÙf¶ñ"£¶Yêñîh1ë’Çã¼îy4®	Öl ök}o0AG/>ÅùDg–åëÐ°†ŸæÅå¨u‘æá‰Áâ)MûO	«¬©VR}Ø¡Å,ñÕ©4Ø~Å9k‡ü*Hv|åµŽµ'ŒÒ^Ôô&ü“Ó•E‚FBb£.ð`â-k!ûbm
]Õ
³	~
¬Æ/Ï£FÂá™ðÎH­=€µ¾êŠ(-0ÖŒÕN«
X-èWSç­Ÿ_«Áf‡\&ä"­ùAô«Ñ§†VÍV[†ÖkËõ"Èºêª«®ûÓßÈZ»€»&jó½5$TS|¿+‚\dÇh5ò†%²)8{!MµÉÌfªÖ2á„™]EJã1h²%µäÏ9£˜i·fòéÁp"½@›C	ËmÁ['Ã:¿ÓïÀƒcHWey´£f’“©BådŽÊž2÷¹J›Í…ÑåeRù1Ê#iºbÔJrõÕDô¢ÁMkHWt<¬²³Ö 5 O¼–"¾¿‰FL5¢8†ûs©B!IÛB±ÌY¯Jã>°–;™§øþd.¦õëÃõZë—éQ­=S[µ­½Ðš‚ÜÇ/Ü™Ø³§sêà×¿~÷Æïß}ëæ[þçÚ€ì£?³Ì5—ÂÚêëz>º&Zûåo¨0ª}Zè^H»*ÈX"iŒÒ¹%NÓ„1¢Y86_;Êò—ÌW‹§áKk¼0B¶‹‹ƒ\‹ë×
‰“éX»ÖqäEôÔ“ðe0[´¢IT?j†.&›Ë&®­««½vïêªŽÚÄZ[UŸªŠñÇŽýë\Ñ2Ûâ5”L†™ª‘!xœsaRûEœÈ|A WÕžoÖ8¥r<£Ô3ˆÔClå"¨D¨>ì`íü4Ž6JÈ6?¨làvš+ƒ\äòc±5|íœŒ¶mç\d3´ÖÌj!©sí(ßÐ¿[ÎÚK÷Ïj‚5ÑšÒELënx:Û¼y—‚ÜùÅ®=´uomØÚ'¾±öÉêÆ4->­_Y6ÀqÀ™IUþÈ5é1PMÜ6_Ú¬G~<0¬M¼¾îþ•ô[mëwãŽd¾§ šä|5ÙjK§G 3c21ÕÖÎ!î38Ok‚5<Ó®qErè§ÙÞ'pMMl¬·ÙnÝ}‰éÙÚ¾ö7VÿH··YÝÜØ¶MP!L=tËÍ… ¾>£.róææþ¨<¯)á%Ãs‹r/Q®ªÀ1ªqJß`¦Z“0-Úè=#3-¨yÓ'ôÒ–*™÷A~%oí+‹‚Tnÿ¡+« V{î#Ö¾üÝõÛ|éWAj§w¨É}ˆ6•1"ŠÕ–‰‹ºº<¦–%Ry*×óÝRäm{!•I-)RšÂT+•3Eh8. µ±<ƒÎÚ-£LÔ­]a§£oî…V2í]•ŠÀ3Tæ¯+UxŸ91k)WUÛÛ<hQ„NJJ’‹j
÷¶é¬”ß¿ÿ©}¶´¢ã9ô<Ö2¨jàúÈÇÕ°vùôÛOýô§¯®ž]zõUfÛ\¿þúùóËŠbTýcœF¼‚¬ðíiØñL¢öC°Mæ>uy Ö,™)œ"9…V¡öÇ¡5ÈVó[Ö7kÆ^šÁ;íÏ-.]»ùOëu©ÆRÁ"0&¿îP;,.p5µ`ÍkKî7B`ÍW_H¿V4WñSûïÉj6ã}¤ÑËW­Ò´ØgÔ·ˆFEkÜêã›%‹HÆh(—w­^YW]uÕu¿mk.rÕvNï\Ä\£qMZ<ë¼5š×ZIÑ¬µx%L•Z\‡ÊŒ(rîÉ¤ ¨DØ…÷ÏÚ8ëAõlsr®0À'ÎEÌT‰“p,§HçÉÒ\9m°F\|F¬Fµ'^Ê³yâù­]q²šKi,¶¤i‘<™r&š*s³…P’<—Mñ…¢È0™õã³¥ZÀk¯ºÁØ/?­®5F8k&jS³Ó'8wÇÃá(h)ü³Á<ÖtU”‹R%®O@”}–•Dª¿?Ò 	ÖÆJYÃÞM-Ò îšŠ$©…„Ö¦:¨€ãfÆÉ„Ü;õåÝ7¿þý¯ß}óÝÿ¤ü,k.sîq¸6M_—Ü5ŸÖÆöMªÒw×¸Yà–DH¶7^"Ym–ùèij®Ëò§ËYj²Ó`žÅÖª5á¤)SD‘aÑZÞÚL#Gžj»&X{¹&kTBk†Áxj8kr/1ÏJ2Z¸•ÏKp[Ñ'^;Àìt`Ak`Âe›Ö¯vîù¹0©‘Õb˜Lm/‘4
Kä€5àLÔÆ!ÙŸš- –¢¬]‹¦êàR—%’ƒ<e#:˜Ãž³¡k&#Ñ°05wõ[\FÑÚ·ô–O'Z|=w
GpYwÎˆ†d@öéÓ‚µî`mqDqý»5: e°\Úf°¶¯mKóî/èYûîr>[¯£0Àší}M­ýx—îRÙÛùƒ¡]CxqÔMÚºXÛM­`oëa6s°öXPYƒ5 Î9ká¬¡‡`µ={VÿlL#ë÷^0¢Y6 Ùz^nÐ©}¸ŽØXì	
·¡ÜÑÁšn…e·HÌÝMãÚˆø­›’Õ[¾³”BŠÔì@þškl›-¬¦[Â7n‚åkÀnî–…•MË7¡Íïd[Uü~ŒÑü‰æÍÀÚæ~µ¤Uý›7iâšG¹ƒ§XÇŸ"•Q.¥*¸j´³ŽÂj6»^³÷B}¡F½‹Á'x×åõÓH FÇ”BËÅo/¬©cí9CÖÈ”xéú—ŸûŽà¬Q³=V|bÓhX+Û¬M¯é.4Mé
˜Eä	L–H},¥ŠŒ:ã€÷4ì´}”Ë—òb¼2Î<@ÒHÆë¢-ZÐZ‡Õ>’ùü\öñþ?{çûå}¦û•Î°Ú—¶±(ò›XcYO¢ïŒÙ‚cæ‡Ð#ãNìÚáÅ*Í	ÉLÜd‰¶1¨öØF6ÑbêÈ²$ØJ[Aµ›”l-êÒE(TŽbt¡JGê‘Îçº¿óä‰ëÒö${öÕ\óÌócfÀ?Hæ™ÏsÝ÷ukxh…ÃbB®
‘o5f˜V´È´=ß<8&Í?ËéÐˆl]’)ó á‚ &Ï™–ƒPú@sÖ²ÙQXjJ$¬vŒØåyÁ¬vXÁPcx!‘ÎjÄÚºt/M‰	fW«!ßpÀoÖ2¦ð›¾8Þ)Cxl\Ýzåä“;ö
Ö€4“_ùÁÿüÂË4Ó@6,“Ë—cØf3¡t<Í/¸’Üâ³¡üÓ°×@Öˆí k’q‚ÓXc©•ŠÎS{=èWsãÕŒÕ^«}ÇXÍPÍXÝ]YùnÅSó/Ë9Lsâ*¯Åö;X[²t‘%XM°¶T-‚¬ªªªªú2mkW¸!«ˆt#×Ô|æ‡g$kŠ…S-2yõk¡Ò¸`Èà,È•&o‹CªøV²q®“Ž3p&DF>äf^Rý6ø†Hg>U‡¡²8±àèlËÆ<¨¯¿;CUON'íÃÌ=Ô‰xÌvã$˜a?‘Tò|”¿LsµÔÀ63…Ãv0ÕwiéºhÍ5­s³Ö(ÿ×µb‘šâ<>)	ŒÆsÂLµLÂLÅô«|$gÖÆ½˜®]ÃøT‚NNámL/ª«ãcN†`JJí@2B"™¼¶³…lÕ>60ÒËvg{C×&®ßþô`ßí÷ï,=øèÞµk×øÈ'X[*¯(ÃßÑæš£5Í\uC×Ô»vâ0çOc5ÄÞÈ¡ì$yiíÆjm5ÌzzÛºS‚ì2)ªf5#â[NˆÌ{àóH\ÃðpeÜZ:îÊMáus±y|ùkÇŽœ=òõ€ÖNk8kÌZ3íØqÁ`Íå8Ÿêhôˆž«ñÇCô—ŒªÖ¨2¸vT]lrÙêãIÌ5XkŽ5RªÄåwÍÀN<’`–u4žÄ+5c-A–e›a™5|6™gmXëýÜÑöLXkw°&a6j¬ooo¬}‡%Ø² ·d¯‹ Ú ÝiVa­Mþ|Êœ¶Ieð@kŸêêí}ê©LÍbo×Î½O-^œ°®5v7ïî>³ÞgÒ}£6‚R¹%¥x‘ÇŸàì9X{ð €æöx‚ÙÙ-fÆõùÎ[Ã¦/8g]oúƒ5µ¦=[”æ*!ŸöØ¿õ±¦µ.Ùºzpx¢¯ïRÀj¦½i›€¼ü[°¬£5ÄfC¥c°ë»ûj‚úGwpuî²YiH°fkÉ¶Ö¸vX“ùf$t(®¸h‘º%lì5¿(2@6nB5Ûà´ù2x“üÃ æ>cåo¯™³6¡jqó¶šmmXk V<¬(""#1X-†Qe¨Ú¦¶R(Æ‹ù?£F­kÐ]j
}$Ç©.^#ê#›D#±É™Ck%ž/–€µp¸µƒÏè/íøÞk‚µ{ù…#T 2`ÍŠ†oür~íÍµ_ž€ÍÌòtø0!'^ÖTÈ~8aŒà#H¨‘Šé4«jÐïéXšÌß~L.,XR?Ð“V!UÊ†ÌÃ@cœVDn
§"¤‘¹Ø€h©C”³L•s¨ä·&ÃˆLKÀïáÆ¸üZ¤?WâdTäk@xtGŸPEqLEY^õÌ„ÖÂ%Kí7cMM{KçÏ_§Ì[mîÊÊüüróË³ËØ† B]Fb­pY%ÄŸG•)i<v væåˆPÆ\‹qŽCÐ•f­u¼ôÚ©“@ÚoN¹Žµ'¬)áåƒçŸ'Ê
 '¡5DÄÈd9™ð`´pkvúâ&±ÒøÂª|¤Å<ÆÃnr@°ßÈ¡¶ÒX¥þqC¤ß®öüúÈ~WüàÁ­»kï:kÎÖ¬]Ð~k¢ø…ÙjÜU9Ï‚nÏWSû«ªªªª¾d~ÿ‹„„Õ¬-‰Õ\ßšüMúpCö0¢qÍ‹×±KQ¤Nƒ1Î­Ì-ò\IæÚX‰ìH>w/üŽë—õÍ¡ØàxAÒIÛÒ˜9ÌEé˜"Ä"TŸ¶´ç…Eü´zÕ’^N#Wó¹x÷t>¢|yZBi¼—Œ
mâf¶èHc×âõSñh¹Üžš¿²D“Ž`MÖÚ¹³k¨1LI’}(¹Ÿ{•A_€ÃX‚Ée¤u¨ö.7¾0F»X-™åÖîŠaÖÞ³px!Qg[8¾{·¼@­‹€>?ílïÝ©1kìË[³ävà·‰ë—&Ú®¿ó«Û—Þÿèý_]S¯ËïiË¾~iåBöçµàšÍÈ~ÉZó;×€´ŸY@÷ö 6=ÒDM¤àL¡þlÉÑ:S'Õr@/–1Ò†™Æa›8ø#ã50Žƒµ0ì ÉKƒÔ8p°‹Þ¼zÁU0GŽ}:È«!Å–Q]jÙ"[Û±ïÂ…§vhÖEVºñÖìô­O‘ÜJ%Š­ÔPí”ÄjÅú†pÄ£@–ß5¾«ëw‰ÄñÑzº-
´2c-£©kÑh‚[·üÃpã	W÷i«(¬ñ
ûãm8r½Ýkwå§épS`)96yûÍõÛÏ§Ðyõam:»¼<I³ÚÐ•QdûÅ‹Ã¨«wb¢wçÞ½]O­f†e¬-b¬í&òºÿÿXâ%¾³Ö´XkÑµ§ýH_ÿ!Ù#–<¢ÝÇo¦ö»©Øò¶,Rw9kî'ÝXQ¸–Ö£nè:†g&Y¤Ã5,6ÇkûÜ»ŸùjO­ö‘<	´mÕhéáƒC|Ñ?÷µX]ë{øAÀg¬l@²8RskýíÝy LMi>¬±“±qwžåxÀ%Ž°%Ùvþ®Ÿá¯›£4–«ÜmZÓ}½¸›H+[6pZ°a-\ãªéÆb¤f÷•3êWÓ\úÕÂ¸k[·Ô(odw–ÿè³‘šl,¡9)/F·ìÆT*ÄFíC6	‘ïÈÛ5±Å	"‘¢ÛjØ#Â®.vº¤²?Yk¸lõXJ˜ÎüµÖþíÈ×y=Çgu„¯öÓ7Ö>«T/Ú­6&ÜažíŸ>¡ñÖ\ÐK
ITánÇîG=–9’çEØQÙÂB.(Ÿ¢Ä"G¡$ePÔQc.›,¬1ŽSo×9ª%­þ)æ¸èãªáÁYq\ãE.Òè†ß6NY½¥ò[[ZIÙ(JÃ¯éW~)«¨®õ÷)è>~ž:íX“·(VÖ®ÏÏ¡y
N ’æÙóó“3^8™¤D©yYÖ\V­ á´¦kÇß|Å4M}eñdV3X;õ5½—ÂY3ùÆÚÇá%Š§f±Ö&'—ÏLžœ={v9Íü¶lûŽs°&a{À gµ‘”¡ËÀkð<~Wœ£+R2¯‹q°Æ#hRû›Fa¿°ºuƒÈ™Š]çÀo¦Ã½GÎ,Û0ìË2ÖÞuÓÕìG–/¬]ùûjdUUUUÕ—Êï¿R1×®¹˜‘YB!kH‰útóÔ§Ægð´š#š‘>‰†ôÞOïNŠ#
N”VPIdkHUú„#3ÐT'V.†Ò~Vð\î •r±d>—åx9O:’^¬§'œö‘ìÐÚPôZùSØjÝ‰¤ÕïEÚ’xH$!f"í|éÒoËCKóCÓ—Èì²¹Øçð‚èZÓ›×*Öšˆ«gôþx.ýêýÑ¶ÝÝíˆ¨þ$yÐü$œúég£žS*f“=(¯äJ"ýë¨›Ü¼™ j¹jí Ù"Ð™`g­k§†®‘I]$ÎÚ7o…î–ÞþìÓKwn]ûÕ¯ÜùŒ¡k·Þ¾³òëçñK!ý€kjª;íO]s3²]2ö	†dCk/rÿæ4z‘ŠÈ”Û\b¯Œ´^…&"ãV€¨ViY‹}ŸÌ`E™¬0R<v‘š}Í&<ß7ÖnQýû,“¬ÉZ“·Bò-k¶M±»p`ÇŽ—^Ú×Ldã[6hÍ>è³C}kÈŒDšZGr\ä¦)=F²cÄ/òÑŽ¹µ9î°ww—,‰å)%P&ãzÙÔÍ¤é0o,©óåffç¶†é·¨éH=kKOÁk,síÌîÙÔvhÉ_S=p™h‘Ÿ_žºgÇÂG&.^$G„ ‘L™U°F=äpçDo×&2D»z€µ_ø?6ÞÖY[¼|­¼ÿñý©¾›¬žyÌ‡µo8VcË‘äÊf$v‹b#MÃ«{ú´k°æÈkƒÉ¥à!=`;ë¨`Ä-3X³zGÖæ«=mþš°¶4lÙ¿subØ
6A¸­‹«;]ó¿æŸqÅ¤€Ïrc1­/q\j©f+Ó†°~ëV#ÀÕ¶#ÏÏA§k"´E›Œž0dS²?š=o¸ÈŽ®q÷yÍ!ÛF©4RrÜ&\ÃuÓÚ -ÐF~óy›pme*Ù¶uË6’kÚ"ÅÈ–-›èZ‹bª‹Ñl)\ÂŠÅšh6ËäìÄ·ÅhäãûàécÖ µ0‘L¨¶Eâš˜RW[#‡Í³ÈûÂ5*ß:¬þÏÁÿ§Ãjò^Ê[•Â oÜ˜ÿõa½)I>¯¹ÞšöÐ‰Ã˜kTk€fÔ••ã¦¥ò)Kì×@–Ôaª“ž‡á¶#m·?AÒI9Ži\ž† ¹P—mLÆª“/VJìœR"}^„Án0Bdh•e¥Qj…Rç1|§Hàìwv°X²°È‚&µ	ëŠ*î ‘ìËzi1J¡ð:¾K!PÅ%AÊÉ«ÍkêV›»2;;ÏmöÜùù3ÅâÔ?^Ö@,Îšy9”ö²êyæ©VÏe%²ÂsË‘ÿÒl•¡1p)D÷æÙ)¨ßDˆ_©–A`í…ãÏýù#¸jÚìÿ”3g§–Ï½K“Ø’KÂŠÎJC^6Îj”š[‡\l°™•†:$ö‘ŸYz½$Vóqíá1ë}µ{÷î­-7ÿ$ör‡ÁÚ²+ƒDn¶ƒ5i:ýÿíïªªªªªªú²mkf®q«¤Œ\'Â¿b­á%¸yk,¡Sát’¸hhM6Û`¥ž	Ù:ÄÆ¬<¥K.Ðy+Ò·@Xqâáò*8ÆSÐ[n!	·¶†ãY®û¶¦U…«¥û£.K'ò°Ywj:ÇZQ–ó"ÍMÔÇQŽ©#¤„ðyß`-:úËùÔõ+W~{iní;²­¬kM°Æ¹ï{;öu¸–5RûÇÆ»a¢¶È«÷s5™Ý½ãc `&Ns©cañ_&¦S…¹…~Ò§S-8gêù×Ô¶ñÝõ0g2#JDØ¶³i¤©…0¾ÛÙ©ÿ=--¿½ÙÞ[³RÈ‡Ëw®ýêÞ•Kw>ºÇ™î³û®ßÕ§àµu¸fìsJ¸6:ZÁµÃ\VFb5ášD,äô¡ï¿˜â—¬0³Îb3½t±Á*µŽÕ°š XØLþ8ƒ·¦°~hN¨æü48Œp|‹‰ŒG(ƒTd —àIæâÚ=þá‡ï¾{LÂZ«DŒø´öï_ÃZ£ò%"CØéàoi´ñj¬Pkh°ÁƒÇÆG_êà³½%ð}kV`F3	¯nD¶@I¤G¡´þ$ŽÑ}âbk¦šà´›{ÞºôøÑÝü8~> 2ZÉQQC/D	Š(M7*¨ø=?²å‹n:Ä«ŒÕÀ%µ«ÁgúO <D$ËÐÄÄÔÌ ƒÔÚ20Z®Œ%301šÑªvñ©§ŒÖ¶ôö÷vumZŒÒÃ8|I_~=¨m$5­N¬­¤óïoygÍIýA¤Ø-xâ›¡?öØªÛ½yýõœfKpCë¾…?Áµ7†¾•U`]6:dwï3ÄŽÝ¿sXœ¶Ø9¡V¹ý ÝêÖgwì[úÓ65· 6ÁÎÃ îW¹Ùjþäp#¤¹ýà½ùI4 t~“àLêÔ¢]/ÊZÃUs,çäàòÒÊ4?läš6~Þˆ»¹åÏ0ÛÝmñW›{ˆ>c1RóÝµ¥©í5Û¶l…ÕpÔâÑM›8 À·‚üyûTè£çá°EieS¨Ð–ÅU‹QwìÉL‹Bmµµñ"µ5ÔLÒÐ4¨°¥@C¢äÃû§©TMÄ6P1cíëŠíç­Ô5¬ýph~íãÊ›Ò¡õ’¥æŠµOèÞ“pÁukŒÈLåÓˆ‘,(™ås¢7þp2â0c3ßÓ?=¢¿ž{>›UaåB.is±OŒ•ÃŸWc……±ÖƒƒFfÓ†n0™Ä‰iLˆzÚkY‹ qäxýÄg‹Yr9y Ä)÷ÇF5lî-%¬œüïAj¿F«Áj¢µIf¬•gçÎMd³Ødé¤`­5Máfkc-§å8‚¤<•$ÆèV#€„çâôñ1R 5ë”É7Òq
@#ë_ŒÕXûàäÉJjÿq¾[ÎÄÌ:snvùìr2Ä;Ë»‚ä¬Å²é°Ç²((oP­cØÈ­k+3™Ï&ã§ùœ¶.Zä­Ñ" ª½Ïà¿eyw\’3Í k3Ë/ù=kØjÒ,R¤k·¯cVmX«ªªªªúÒ…ÿÀÛh ¿’ÍÆ–ìãª)¦’špœ<HÏ]„ÖZ[-,¹ÄÉ¡ÞÓUP} ÷äÝ$üâ¥Á®ÃÄcäT©Ö¶’5œg‹¹~ŒœÕ9×1ÀIg2á	ëî|ŠôŒl––5Æ{ÆxQ:A·HTÞ—á9ù3Ã¤RG/õ,]™¢|M=aÖž'bäIRæ4¿U)ƒÌÆÇ^½ÿj"SMgGÇwgÆsºkõè±HG	}ìÍçÂªyô<UE&ý)rCˆ]Ã®ÚÈ«SÎµ›ÇÆt#µŸ¦µŽ ÿöƒCäòõ•Ëdãµ÷Ý¾vk¥Ü÷é­{÷Þû›>~@ÎÈÚšÌ5×Œ~¬VÓw×þÈl‡kª‡D‡~&`;4BWÿ´®=ŒXJ¤üa­ÙükdÁ"QvÍTÓ]h-	ÃHQÛÖ…µ˜Â¨AZß¬f¡hùÈñwfŽ;‚SyììY™k/W`Må¥rÖXøÎaÍ:;\q³w…g­ŠhSrÁhqð¥Rn,4H5S°•“]èî.Œ‘q ‚)!¾âDLI =ah–±jH­ ÏÍyv·ÁkíQùˆ(Ífdƒ©~ôe›E•ô¬õÑArc=ªÝ²þT.îîÀˆ- %€zh(7¤1k¹r™ÉØÃCSÚLMQ9eÚ¶wõN0E9Óµó©Z¹i‚µMÄŠ°Ce‘ÀÚš}é ÕR¸ØV¶¤¨§…ÍP eÚ[8¢ÑkN-®
rbõ™]-k-MCküU*V“¼Â0Rnù¸2F(‚t¡ýHÎZ×Ág´óôž	²T¸¯ö¡ƒ{·..®nåõ¿f \hÃëw­ÿší/>ËÞ-Píò$Â'sÓÕ‚=ƒ53Òl= k=êZ‰…ì\\œèìè¼~E¸ædµ§Ù‹Ïlºýeù¬æön¾½vgíÌ·m±ŒÑº˜‡¹¿IõQVñ8ÎZ)‚ÆÿÂ$õ“ÝDadLŽÛ áó¼7×`Â•ãÛÂƒ±ZÆ_«¹Ëdc vXƒ3GOó®hˆBú±ÅjÀ¬Æ¼x×²¶òÃŸ¬¬üú0r¸ Û	Áš¿g#ýq\5€-éD5B’‹u6®EkR<ÍÃù<Ó­iìäi[æaq¸@¾–|I/$à;N,ÙæŽ¢hìÛ…qòEŠÍûJ´¯5f©×
ŽÕ*&a6£µt±pBþ°V´…8=6i\ËÆŠÂ‰¿ÄÙJ§›÷Ñ@,VC‚µ9«Í‘Û?ãõ—g'Éäo…’H½bC¤×j}k^.›ÍÑ³fÀæw«% :<@¸­¹ÚÄÌ·±S”“;+í‹ÆšMÈþ@°vœHMV“Î1_­4{ŽÍLQ°FåBzŒë¥vU,”7´*ý1®ƒix}Y=ÃÝW#/ý<b$ÄïÉ¯´ÙjÎVóÛÕ¾¶.ZÄŸ®†Væ—+¼gÊ
‚Ôñ;6_M‹¡ZÀjÀšI-ªkUUUUU_©míÇÜMŸZ)¤`íóykSÐZy
5Ä¦ø´íQ&	k˜ÚXº¨¦5Þ¹iWÈ²ÍÄ)R¦¡lÁ0À÷ÆòtŸ)B„æ/wR-ÈVÉ¤³IÎ¦(/ˆcžaçt'oŒŸæy²[X[‰4–FòùtŽ:8N†”<ýÍTw»bý“©|w=àåºÙ9hëÁç*éýÿü
1ó;NQ98H9Õ÷ï÷FGã£÷_íîïîNæ"œ5Ã,‘ÙÌ@³‚W	Óþ.Z]ê›„<
	öôãÏw&4k¯Ðš6[—ê!›¨ˆäUŒ^;zpäæÑáÞ^L¶TùÎg×‡ËC¸õŸäî|ü‡«W?ûÃÊ]ÑÀ·ÑZ4‚»vß’F
Â5ds×*ÛÏ*qÙ‡l(-2p›î®­V 6›Ùk6÷:"rqwº×ôˆèXdÄVá³€Õ|é±w-×Ï?&óSF¬½Bu)€I·š¾o~½@²Õ$6§áøpÑRûG‘"/•6’³v“WÇáäñQ^Y¤Â‘+åýá­<ãè#ahÍ•?ò}G\šú£ÚÏ°ÇMûB8¿´.ªÄ_+àKææT#åe½ 5“=¡çZ;_Îå†x­üÄÔö'ÊmÛ‡køl™Ìpæ"Öøˆ_{1ÒÛ…©š¬Am›k{÷òI³úÊson0Õ´hå+`$[ñå—ZÜŸÖÖÓÚºísû÷«ÍÈÁÚê®g©ˆljQabßJ€‰ËæŽìöï£5îÏ©KTcÁ:s°ö,Í™mÙµ‡mU™ý‹‹ÐÎ"Ôv/Ëos½¡öÕuÕ-:pÖ|T;¥M"Ú‰æŸp`ZçåÉ—3BZ¿Š#ýlÛ/n»½-b¶u.n_}lëõ9pÍ¬5'GiÙx[ƒÝ6pÚ†}Ûlg=«¹¼2!Ï,²e¦~t`f`*—½–ÍnÛ´YóË(…Œh–J˜	kéÙ´‡µæÇ@Æ™©‡ðâƒ±šÍ¸mj\óbÃs¦Ý?Ûù¾¬&XÓgõmÄÚù5›IHÔÉóÞ’Ð‰@+mý6–Ã¹Ü£ý@š5ŸÒ·ÖÓ±™%Ó‰|?1¾ˆç¸„‡ðÔ(¢œ¶‘þüpÀ±êW\l!Ïq":ÀFuò±fz¢Í:+Ð=¦¨ÙŽ<6„a‘Ñ†,€Ä‚ú–š:ßÆŠØqøiˆu‘¿k.T*8Tûã_õÒk*½À<lrå,	ÕægÏk¼šÆ¬Ýyo~jv~iŠ,ªì+z,Pìè‹Æµ4îÍxž€-ÛêÃZÎN%³¢§Á¾`•Î½öÊk.­-k*‚$\ä¤`M%?Ÿ‘Á'lœlž™:3{n¹¹QÞ\ãØX6§¡–‹±*5âºh”F¤Ö1¸È~lHÁšóâ(µgaÅZd¬úðhU@>ÀGó“%MlfšA5AÒ l‰„²åYDo¬V±Ö¸WÖªªªªª¾Ò´µ ×üœ‘ Ö5®Ñ¾3¥h`*!ëÜ	”\ÈSz².hr: è-G¦08åaÏ${\ûYž™ÙId«†EWN±³ráh·®59›y5ê¬Hv÷,dcI•A&šèIÁ`æI$ù$Ò‹Óö¬u+Ò¶RÓ/Ž¤9‘$Ï‘\GkkBJ®òå“'e	ƒBõ±³°GïSjÈ•VsØ{öè/ðä÷tk$ˆ¤òcY‚)Õ£V»:Èé_¶,Ë$ù:T>â í¡’Oãí²ÖZ4%»åñ‘¼µ®Ê7?êë%’ÅåKÃG?>úñgýþ÷÷Þð X»rç>ß¥ºÈrF¾®\H×*îZŽÏÂ5ë^;ä`­’˜ÍìïÂ_ëŽöB+A$$´®¼ÖÀbû“%úë8Kõ¦°ÆÁÌ»Ë3ß=vŒÏmÇ4lí‹Mk„÷Ÿ:µïÀS¿ùDßµáš.è‹ÙÞRà#ìÞP—-žîµ–¨ïU''üæYø'(…°Ý4–ÈÍbÎQYúE`ªÜÔT8îz”o;.@W©$FaD³äˆ!AmuGVF¨]é÷‘ãÏ³M.ù¨FüçböV05ùªnZxÅ-ŸÖæË†œ©#†õÐðpy@»ÃCÃ™	L5Düƒ9iüËwí¤
r7¬­í$mdO_ßpy>(D\_Ú‡´öñÉV>­}ÚrþIíGFd»Ö48l‚µýþC¬Rk}íÕQU7-½¹Ô¸
`Ê-¶ñ=,‘Îÿ®.
RÖšÕBþ]]][;W'`µ¾áá­»ÔµÖ×)mçò ƒÜ}Äêÿ«‚ž6Ö&—ÖgHSó™`ÍÀŒ­;°ž4ýëYðc¥6’&°MléØ¾ºk®sâ±gw]¼<?÷ŽrElñí4n’j×¸ûŒvÍmþ’Óæ(ÍVëí¶ŠüjÈyÒ“voc(¢™RWP,ª£Û6G5w8e±Z0¬/zASNhF<Þã©Hm¼6·¨þ’W³9Ö‚Õ°Ôê"*…ŒÑÑVåâª¯a”uÆÚËÇÖ¾õ¾5¬¡µ7Þ\ù	ïH†k±Ðæä¢À/.Ð1†%‘€Z”Ê?ÝÏT–d½Ç®¥óçr=”[ˆ¢r‡±Õôr®èÐ(¶?.äsc±ç˜lrƒEBÖÈßþÝáxÖñš4ÖìÊA5ƒµA6úó…‚N8ÀZÖÂ#yl¼§CÍlÙ‚ó”*¨’½¯QsûHíW$Îâ±óh~ö®ÚùÙ3KWVæ®,Í½wn&L¶BkJ 69‘SÉyOŒÖ «ÍcÇÔÍ27”—æBÍ%Œ¯VÞcü@ŒïÍöí#wòk&ÍWÓÈµ“‚µd¬Öf"T›œ¹üÂä%`ÍÿkÓD¤„lŸßK«¡™l6XŠ›ú®ãñ/–>ŠÖB%­ÍMCã¬ªm(ÜÈjïÏÏ:œ‘HMé""5Çj3~¤´$‘Ú?ÏF«ê„µªªªªª¯2H¬Æ]ïµ\sã-§¤W©Ìþ/¤M¬U÷­"5“]ÐÅ#½+ç57Öëú¢ÎRœ‡)C™NÄ¨¾(,ðÌ9” öiÎÓœ¯ušÎyÙõˆô5$ø€îjgíáJg
ébk½!Y:×¯\Ý6p¬›lÄ¼32úˆßƒ³FÌõìÚÚ·Öl2ö9£5ƒ ×ÖÚ:H3½¦u³Î$øFhçˆçúó=½ _žÂK¥ ¹ô\WÓËò-í™^¬}g¾…žâ™’]³U)±Å[c.6>›j"	YøíÁÝ™ƒ}¼˜£¾£åÛoô¿?¢;û÷ŸÝ¾óö;ï¼ýƒ»wß@¸€€Ãµ“×¬w-Í¯ ðúÂ£ÿú¯ŸWCBt®ñaègøj,Î\“”b[»§Î)â'÷ÛÊu«µ%I	¢ñH½=ÈŽéÏÓšÍëuD°FN@k'Ö.\Ø·oßKvIžu­ƒŸ¼ÕÜñÉiÕØ ¬h¥"ÓÔJ£ƒcêà'õØØ¯	ØVMP‰-|¦óÂFáýÝDÆ"“äg±ÈL¸>r¹¡pÊ‘Ëá’<gLF ‰À¨2Ù¤h-…”QO?!iÿÑëwßôQ-à4-÷‚'•¸ùªx[³å¡>ZX.—U6§pÈ£ŠÕ†i^[ÇÓÖÇžö.@­K‹VØ«]{ÙiïÅwºx¦òå­òò!½WAU¢ÓÝK)hÅ½{÷ïo
|5£6×ËÆ.khíógR~d¿2"›,óãÒ]ŸÕ*ÛÈkëqÅt·ü"–ßñ™`Íæa+ÒÖ« YÖØ…ÛT8¸}ûÄ"»8zÀï©]ý’êê­»s³Â2,5ñ™Ûø[Bú…pÀl0›Áš+ˆ\]¼¸¸JäâÖEMÉ^Ö:ùc³+†k’[¯ÑÎƒíÚ-ä¯‚×Äe¬´w-@6·#Q#+eo*Ò†¢Ä‡Ô>10¶£M›kã‘Í»UI+í¦J³p‘ÌËf\2=·ñP)\á¨kñ.[GG¼¦ŽzÉºÚZ—Éê´XÍÕA~‚~ãkÏ[¤*Ö>Ÿ{ñÓ‚®ù¼ +ÑZ Êø5rDúÓá´…Šàªõ§úã^rúÅy.Ðßß?}èP¾
¥¯?M´ÀÆ k²ü-d<Ÿ1‘L¥‰œ³.6Ca$€d~÷m 3LXVÐn±$:ƒÔP‘GÝPlK&q[êùdÍ±Êec¹GYþˆ³fÁý6ÛÃ†””…yÞ4ÞFaO]:3{eŽøþ3i²‹ýÈ;W0cÍc¦6UÁ·Vÿ	µ—¥5b (‘Ü(gËrÅf„oÊWcáˆ…`Íb»Èþ©Yk³°°vŽýË|EK‰çà0“1_Ðùh.û«(;â^Óàjm€æÄ6@U7ûÏOÂ~_zpw¥2`F]ÉnÚ6rœ¦»tfY³°å©-9Yf¿`­.RUUUUõU§­]qq¶Yr)#L³¼>ë'øÛ¸5¡ÚÔ”Îâ³|,V¯¸~;Kæ(¡ç„©Ê•IþÊÈjÖœ‚.lra4ZÓ	³ ƒ-,ôà† ŽÕ"N9¥È0¼´'g«’áçÈó
i!YwBf…•(ÅŠ‰Bñîžt™ý4¾}öÆtå+¾º¬Ak\²<ea%ÓŠE°Æu_† æhTˆ×1;)Xëm¡‡+ÂÏ“ƒGë6·õBsÝ‰t!/3ž)Ò§›ÌjëåCPÍUÔ(~dÖÚN`'>‚Ývp¨“ú-##7[ZÚ^º}‡îl>”½çÒ§ïüèí[·ªdó¼è¯CÖvÒÉX–²d?ÛÜ5k^Öô‰ÆePé£áøHÓ/¦RìEëE«e*‡Ä±èŸš8î‘õR¤Ïjø¨VÙÎ4|VCÖ´&ù°ÆXl¾Yh©Î´ÞÃZíà»gSã=æý”€µ˜Ú•PäòwhtlT¾&%üwDj HŸ¥²Gƒ5Â†
GêOUä¨_YjÆjü4È¹km‘ÊlÔVíÉð#VºÛRíÝ6ÜéiFÊ+®ÒG5ÑÙ½{,&Í´Ø„*ÆjÀšü4`Mq—Iƒ|b€ž5eóoŸz¢†ùecö®§`wHmÓ&j{7«{­§·ob{Í–Î5}àaqöÝ_€’ qåèAJhS)VMÖt7N³µqÚsìT\7{À`í™7´"ÌÿæÁÔÍ£¢&‡k±=Tëë!¯¬>ý¸`m×®]nøõÓ®kmËÖÇ¶îzö1èÌ`­ou‘-Í^CB7«¬xð®±÷ÿj]e¹úà½yÇfÔ=j‡ÛBgFlb6ÅŒX±£ë[S»Á‹[…m '5‹»v­>qY~þ½ðÚU<´€Ñd¨ÙJç¤MlþcëP-úÔvkcöˆJ!—€Hkm$ŒÔ2Øš­[7E"Ì~d®œ%Ò§ÌSÉ9±H¨+®_EŽXŒ0RMñHô“Ön®óâµä@ÆNz€ZÈS–25*=k”Aúk\ŸÖ(ä
[Ä›ª0±=êtx½Ë´°ùÃ!±ØâaŠ!IîOFóÓ	Þ¥Sô¨1 -Üï!£?x/¨˜Rµ>¢ÙÚœ/lÖ3•Š^qLsÚ(¢§&63¥ÔÌÆHk7›SÎXI›%Œð †tœ/Ø!~(W,rîá!Ñ›|º\:õmWX€ÖHÍÆK§ß"S¾šñŠÚÕ½jÀÚõKålvrî½ùrNqWiÂöd¦cA8?G9ÂŒ«eÙ:…³q:ÔQ×÷çÊæ}Ô;^È^ î1hXóaÍòEDkÇ—Y›*Ïžl¼ŒÅvvÆóüÈ
†	œB¬ BÞj¹7ËÂ‹J1|s\5ˆJÀZE"5Cµ€Õ„j_dµÀV»«ð94ˆÕšDjÜa¸¦F5Ùj¦yÅöÖªÖªªªªªþ“BF®Þï´T¡5¬É^¬¡ÄTlMà5è£},¦Àä"« Mƒf8¯Ckâ:‚þHò
ÛtÔ‚$U4$%Žš„š/R¯3¾`³od£©L†“{7á¹	Õ¸NœÈ¨KPÓÙÛÅórÀZ’‡E$í=ø/ád¹'ræW‚ÕèZƒÖž?­.½C=÷M£¤[ÐQ^,âòp­©åì[Lôî!²²??mn_Úójá±6};ccý--½n°YOÕŽ)èLOö¶7µ·ž)Z„¾µ=Jôß³¤HF­u–Âj)…<zô·Ÿþ¯ß^¹ó´våÎn1tmE¹|·s|·rÛ§ 0{kxmœ(RÊ^7\³ÐìÿIØîšu¯¯šfÍÇ¢ïbËïHæZ k¼4 @ë9Ñž1X«‹[˜øsGÍ6T¬Ös€ÜD…/¨ñÝw–kLÈ%Á?èZƒÕ¾GÃÂXs¸òNSùÉé•ÈfÓEŠthW<ÐÎ2_­„õJ"dÉ²Û8f²-âŸÓkn¶±LÉt#ßA’ÀG*RÇ#õ|Ë™“õ´ívÒç¡i›E-s$ÕP$‰+ŸÈQ2QâzR3}$i±l®*ÒPMx³¢\~ÂùA65­iÜ™ý32Ø¶”‡>Á¶pþ^¬Sòú7íÞCäžÝÛ¶mRA¤6ð?rqÓ–ÝK•/ÿ—}"èÆ­DŠ×iüj‚Ç°×Ø>'³»‘¡i ¶öìaI/îžy¦åæÍ›MM6QžÛÔòñ]å§˜ö×QM‹y‹ågŸ}fÿsÀVšÁ›,µE8fË³[:¥Åá¾½Ï®Nô2B¯ÜÖ‰ÕgwwRŒùéìçý¯ý‡s„ŠPökcM€Fý£ö¹»üÇÎÕŠ³¶x‘ýÕÍ[ ODÊ5”üð[·«˜r`±séÎƒ[AØˆC´ÀUs› ÕXÝ³»t›[œ|Žk•Cík+tEn«E¢ŒÁÞV³™ykP[´ÈŒµt[´tºÙ´¥&Šy›7ÙêÅ¡‘ÁY*KgA¶uñGž-‘ýu'XsadŒ@jèÔŽSŽÕ±Ú·nÌÏ¯½ñkk+?IŽý„êl§G{}t!ðÙwµu¯IÐX’Ñ™ª“èIäO¨-Ù3=Í{z,7=Bð#ÌÕÏŠò
j#Ý 6þÑZA9’ ‹H["§ˆÍÖg§’žÃ<O+’
È¢J)ŒÔ»4Vû]Á±o6Š)†Ó”É­˜ÎO/ôv°¶ ‰ØÔÄ½’ ]h¿xå<2XCïP YÆM›Ãbk<À´oª5]ó[Dw€ùjÖ¶¿qY1ì;nðÆÃi¢ö™t³¯™¡EØé•W.dÓž|ò5hÍœµï¬ùÆbbÊ9Sž=wvyæòäÙeQâÃ‚ƒ†ú8)‘q#~%(Æ,ŸgŒ”„e¯r¤¶ÁV¢EVã~WÀçœ5üm”ÜJg«iºÚ/f—-Uä§×dªÁjÚùû¿«ªªªªªê+ÒÚ¯ ÛB6ª¡ëÈJ!5ê ‘m2¥yô¯52IË„r|Î¯veÓÎ²œ|<XJó¥'ÄWµ’þ¨D‘<*pÒÎg(ñÏ2b[I’¡46ŽŠ{zÁ^g«4£² ‡¢“Ðˆ§9a [ÒzšðZ~„åˆœ(Ï»*H2Ìd­9rüø']Öâ[*/tÎÚhzÁiaÎ^‘èB>Óæq=š)Ù\(%¹Ì1c2ªQØ£ä¬µíÞƒºûÛUîHž´Ö“jIu×ìÞÙÔ„{¶‡oŽ´ìß[SÓ»g¢Ü¹Ø}³©‰b´›G‡&ú†.=zûÁûèGo¿ÍúÁ»úDüÞÜ{|ËAÒ=vOâXí;ÐZ_²dHšßõqÍÕBkÐš«52‹=­{ºG¥ _b·ŒíÄ»OÎ¨eMdæê ×ÃØ´	GÃl1ÛtfùÈwŽÝ8wX
!õÑ‚®5Píßa5§ÁÐi¤-Óø˜úÃ–°jbBñ¨Œäƒ´Æ:“`Èmm£ãˆªYZ-²	ñYºUß¿}êSQ„oÐ¸,ƒ7`‘üŠñw)ÑL'µ ¹s(ãÍ’!ý\È: ŸOKøœÕ* ö­W…×|síw©‚,_Ö\lm†pƒµI¶ô­ÑÅ¶‡j6o¿8¼•‘ IßÚ\5
dŸÚ´‰bX`ÿˆÝ¶å©á5ŸÕXÐ_C¶«k};ÅjM*…lzML¶ßBüÅehï3ÏèÀI­k€ù‘‚5 ÍÁÌÖtÛµý?ÈÙpWoïý³ÔðÒLÝoUÔ<*ô‘jG¼'Yk„Bwn_å©=ÿ/{gûç}îùýVç%¶ Eyò BwP†ÌhB-'ffu†ˆ²ØÀ/*â;˜@h\ûŒ“™ª­9¤å¡8Ucaƒ€ÒXD-Äõ©Ü,ë.Bu–l’“¤Vßl+íç{ýæ>cêí“6=¯æËÌý03fBfîÏý½®ïµ¿o/7öõ<ºô„µ?óù%ß¹0Šù˜¦µ["·a‘ìÙ~ÃÔ°6±¡950Hs	é^ƒÖªö2ÁF²­ì=ŒŸ¸¼Où©È­Mk\¶×BPM›Ûå×E¶m¼¶6MÚÉJIc4LšËPY%*­(çRJž§}-Z.	Âf)Façš!zÙ<&`£…BºG	~T°ˆ´6µàois»"àš²!1×ÆlÎÚ%3Ö~U0Ö\ºì!2ÄâæÂå»?NZb.‚¶Eßf{À^«9=jæ¡LSKÀ^b žõ‚‹T(<;­úÕ€µÁj#UYÉ[.¾šÄfÌuƒñqœ1/§l¢±‰ßþv1Çn’Dºf¡¸ïÐŒUËb¡i9xŽ’•<:õæã ÐMúÅô	óÝÁA
!5{ÂñJ ºY¿:öžS—˜cµç©‚¼víkœ½Yž™¼0;;_íÉO;TPuµ¼¶´wˆæ4ø³NÕIæ‘ä\Û¸iŠÅÆÇÓÿ1ž&ÎÿÐK/U§Ó¼Îûýý#±aµ¬9ZÔHÙzêñ±ùÊF#´€ƒµ¼<o—ŸyYsÜ¸o—e÷»šóãÈçµ‰ã€š4f¨æÛjÛÛÕüájú[^ãÛp9­qq¹%=$Xói-Ÿ,²ju¬×	«ýÓ)ª¨¢Š*êÿ»mÍ¡_2×ü…œeÂ¥×&g¦õ%y‘GvE¼Îâ%™ c'@1×’¬2ldÆ¡0Yiã´v#^R†Y¦4/ºCÁd:Bz2Uÿ¹@}ŠÏmš•ÒÖÑæ$3ÐàÐ`1Ò .æi-f`ä5*2¸³1NôS·tüã±®Ý]»ÌTœ³¯œ½@ÉÈÏ<sã†Ü*Yk:}lÎÚx25n š8žób‰®h{<EHº3=žŒ·v,ÍAkIfé°{ñ¢ lOgIgœ–ª¦Ó§÷tb­…pÖê,ºŸÆ´¦ÖhIY5’êXÖ:KZyU’G†GçGG§: kŸÞÛØ¸öîÏ(¥â¨Nj~1¤ášs×n|Mu›ÇõÒýoi(OøGD~1$ÇCN÷Ghçt»26š,ËÂg²—º\ž—Ê	c!´³ kþ:
É<Ýmko½p—òæyDÀæs‚5gj€TI~ÿoò¢†®@64'ïíµÙ{(pÀpìØ1’8™õå€%¹X£¯m<#Aú	S‰ºðPùIèså¯í\b‰ÉïÝ¥m®îF9kpÃ´1jÓ—^zÓïUs¤ö o~1¤ÁÚÝ†™ièìQšÍˆímœ5n£Ü>W6×3Ó9m%ò€RE*£ª‰U$VÛþDæÂQœ}£on÷Õ~½íëOHÝ™?Òf±ýkuý}}Ö™öõþ~?°_­jv#”†ñfVÛî6ôè£u´¬±‹vË{ûh#_ù·›=HÎÚÆ¥>úÚëV>¬Akð¥-ŒŸaFUî?rdÿþÃ‡W¦<|ôÈÚª¯¦—xKá©=i8cyX«5	ÔÕÂj²ÑØÖ*WæØX©Øl˜«¨*Ÿb»¶Š—›©8¼¹YUµÒ²9¿vçv¡CMk©Ð¶V¸ø+ŸÔ¶›lŽÒ|K-k÷%¬M5ô¬”—{bá³Ö*C!Gkåå©p’œÕHiUyØ‹Q|ŒcíÀWc“ÐG±Ú¥^/ƒÊüÄ¢9£íŒí†TI¬Ò˜kJÕÐ{c>
Ò±&wX“«vƒDmWHgÉÒ	üpÐ†
¼vÿÌlùG§N¥“T7^$2†‡ŸŽ§0Ò»OŸîè&aD¼Fk["CK35ÀF›Š"5 ›{3Yè,ÍMB­¬Š8ØÇ"“"ÕY¬¶C—ÉÓ¤¬':ÓÛœÔ²òÑL2ôU‹/W-g‰%¹oËU3Z3cgMñ5ÇŒV9V³d‘Ùµw®kË£—"£ÓYj×+_äò—Á´”ªÖ~}ŒIé<¥•Hòê—¦þíñ°†øÐSEá™3ÙìëÄŠ@kÔBšµ†ŒÕ>°*H8í…“'ÏÕÌ2û<š¾õÆùà$)f°æ»kŽÕ¨wÅ\c/’òí7.5¦Þ1éøŸhÌGµlµB	$º}ïÃ»æ«åG¶9Vì‘¦ù‚ÕœfþÖýé"†iÀÚúB1\¤¨¢Š*ê«£5]¬ý4kË³?™u‰ÐšdÞZ€xÆG^ëÄjÞè’HŽ«+|BíšøÈÌe'ÈìÏÒ] ¢Å™2U&â& 3Ù,”.Á¿ŽµÇ¥;­º¨E’o“H=&öOÁ~IŠƒƒ©Xš
DÈa—HæßZ(&ÛòÂhémXkÀÚùþå™ß¸áZÁèEgÎÚ˜ØâÇ?›hdxÑx:#>G«z{gW²«•˜ž~"m8I£AF	fÔ7B`•%éx2ÔZ×ZVmO„›¨5¬í½••Uâ­µ¬± Öê98442¿´>¼§íýû½ÛK«kW•§Ù_øa>®YïÚ‹/~ãxyæ„ðòÕ1†êŸ°lHç¯!ü5´×Xk¶æR2;N]Œ·ËgK<ûý6-¬¤D‰Xû¢%LLäWAïKÑòÖM<Ê›7o‚j:ÛLßý¿8¢äƒ:Hœ5¬5ü¬”SÕËXûL“ÒulÐÜÌ–`­fW=¬¦Ø~°å?;£Ð©@íÍÊÍÄsæ¬iÜžb¢<¼%‚ü@	6ÝTlOc+Áp8~ìvåó;s;ý"*ÿdÁ+ßÞa$Ëw|[M¨öçE›hÍpitfºÇÑšÌµ!B MµÊòoµtAÌ—©Ñ
›:˜…]ZÚ)O­4ÚT·¯¼dnn®‘ü™¥ûöÙ*À¨fc;¯!þ(¶FFô7õõGw·ßÿh_ÿž:pYèc~ëh¿j ûûØÑ>ÀÆ¿Ø]·[¾šÄ†õ·Ñ‹ÿ;5¢P÷Ø_µ— ~1›¯*Š5€l¥ÿŸï-WÄÈHÿá*±ÛJUß~eQö¡e­ïè‘ƒKïýç•>^}çÂê¹¼Äg¾zn~%$ ÇJ)ºÂkç,T,3Z[)]¡W­‚—µYµ»Ê÷–«Þš[9\E%$´ÖÓƒ·¼†Ãæ­@m2×ìâß¦-£3‡j¬ØÑZ[N>±¹¤³Ø|VÛ¬¨œ#=¤a:VZ^
ó—0àRƒÖÂÑRzØtv©±<ŠñèÁqÁ›%eAùcD@¦BJ	²Ì5Ù¹#¨	Ùz“•Ì‘›„»œÛ‘c–†¡š³Ö°Çï›±FžŒ5•”ß¥]marra2%%Æm©â>Û6^+à×÷×ºãmƒƒm§5Ð…	š©š]Â>ÒDNÆ-Ë?.ØsQÖ «¡SŠ"Ñ ëTš÷ß8 Å{KWëèbB€µœ«o´l)ÖÊ™X´°«q$B£v2Ëc|[`MzehXãó@ÌÊ„1cµçÄjþpµÕù%–4®-ÍÌ,\˜L§‚J]Ç4/éi³–ÏðÖ´cRþ#õÞ°R@˜›•¡–«¶§$íŸ9sBu:íuâuºåL÷kÏã}WxvÎ"!'g±×nÕ˜¼ˆ`Íõ#0Ý£È…ðGN„ñŒ"8C8ÑšA¿ƒ1_ÇÇ|L3RóQíA[Í÷Õø+^0?Ï•Aú™%rÔzLæªqµp“E‹hAÀ*†‹UTQE}5´FÛšÃ5i!å4›·ÖhZCj\ûáôL¯h¶ˆ€7>î)l$E´HD	W|:©äÃfØX€2[`HëPžtFÎZF!$ÉX"Å‘Fè¤Q˜ÏýA0ª—+"%öP:ÉnMWãÁTÇñ™£,³’ ÿ
jØ4)¹±}t„sŸËm;çk4­a­Ñµ†û<uåP}}Ä“YeÀ6Ní‹ò™ø•
¶w$8‡o6¶·1Ú-ß¬îyÁ,šÔ¼X°µ}€2ÈDw7ÏØ-é"9žIjßd¸ZSšÕ,l„(@–ø+ÀZÔæ°,¯oìÞýñïoc¬}ùî»K÷~ýéÏ>üBîÚ}¸†(\{æ™oÙ`Z’¿>^Ó…#¢S{­Àk~¤?°æÄŽn9­ÂÒðÎŽçŸÁäóü5[‘ýk-†ß=8fÍí¼öÊk=oñ£Ñh3b©Ë(o|ëå'e­¹)k¾^Íq£ÔQêlÈZÓ%@]°6>«MP;Á’WOjµVƒ}ÚcÔÞ.S|ÀÁZ<LÃœ†oÆR¤ÆUý; X0®HsÓ0‰±JHòÕì:gÍåD®:VûË¨æS°v{aTg%F{X`¬‘áŸj˜ÁW³ü~èmj¨¥dNó°§ÚG+Ô©mMÝjû¸™é*Kº:§ºZ[ìã®¦á¥?µÕ
‹í¼Ó½¹Dàÿˆ`Íf=ZÕ§MŒ4£45®±Ùßg£Ö´c«±`>›‚I´¹Û…‘|tÇê/ÿÁjG™y½·joßÓ¨Ïgµ¾Í*–æªýó>˜e
pã&ç½í;(õï×òhßæÈÈÖí¼FÁêå«³ç¤iÍß¥)¥?/ÝÒ²Ânmù&sÖ\YdÃÜ\YY-œV»R¥6½ÍZX­ªbET«a¬54lZ&ÿds³aejUÄæ;k~ûÚ¶dHð:³Í®qýÓÍm½kf¯Ý[¯@¥•!¬îPiUi¸´¢4mGuK[£Äo+-!éQV©ÁH¨¬„Î/5†pXàœØ‰Þfš‹í,!~D3ÿ	OÚ™óÕ]ºÈý±UyR¬ö
¬FbÓÂìÂÚÍ/…‚)‰M'c¶¯mÃ5Xí}{‹Ò(¶6jà“…Mn¿§„D”TüHd¤
!Ó‘$ŸEË¤U/{pÈñ	½;¨rB|¦ÏÑˆ¶ø]yeŒÑ-ºf39˜;{Ç›•q”g:}ÉŽËêì!æ‡ìz'—.Bh/¬&d¹ñâ3/ø¬vç.´¶.Xƒ7.,ÌÔÌ.ÌÔ'2£²<¤%ÝZÚñd½¶"¼³Ñ	áÔ'I‚´Y7xj)±š.hüÏ(Oíõ¼€5é9* §Ó“–ß¿ö|¤¼‹%S(È
*ãIÁ6Yilùµ’ÚjÆd%EÆ4V{FjÕd«’E«¹“Š¿¾ýÓš€¾¡£5óÕz(ÖLZMš¨Á)°šÃ^¬ÃEŠ*ª¨¢¾ÊHHéúº†\ÍK´ö“I¹k3|k.j„I˜Õ‘lN³Ö²§¬ò‰Ç“²Ø²)>Ó¬? ûP¢--o-™Ây³2zÜ¬ºDãˆB8±‘}&8“Ê#.
ÕÚ:Tt¦e½DG_x#Q1ýð‡ï¡‡‚J©WßÒÎÆŽù…¥&áu„ç/k0¶YkªÛ»ñ$“±¯\9T¬å½µT–žµññ`23áÃsŒÈÖ Ú%,Þ’ž†eÓŒh¥m¢£µu` Ã¬+x¶ïkj‡ÞèIÚ£IØÄúGKH†´hH‰#í&¢"ÉììÄmZ_­6í9òÉõ-ð6®Þ»÷!3×°vûvžÖ²²e¯¹BÃ—ÌtQþÇ­Mßïù´Ûy-?,Û_r×i~QMmI°gF\µ ì³ÿ€5ÄïPŽYCÖ´V}ëtöÂ+'ß8y’áC/<÷n%]kOžð»Ö\¿Z¯yõÒ˜7–Sac/°¦>tŽš(‰ä|ìGQŠí—XómOeS`±FØ&B»jjv™6
[tò’üÇ¦1QóL2ÝXX{š¤ È`¨X“¸ßeÎ zyX­5Ž,½÷×YÍô©ÑÚö™’ YMÏPú˜ÂaQ¸·ðUKp?MmÐZ'ýjÌk0V;°‡Àþ&è¬µ´2Jób»þW>2R 5³ÔÜª l,²>íLµ~ZÇ‚k†[F¤ï¯)r„r{ô´g®Q­N¸fÜ­åÓTBþ½‰ïm|tTü³ kiÛ©¿b¯ìµþþ~úÔˆèÇckQ/ÆÚ
‘üÜ\¥¾ý‡¡µyžøg¦ÝyçòùY$+*ëñ÷}N“TùÈÊn±n5ƒµ2M5'ÈŸÇPr¸Y^!HÃ?ÓkÚd·‚PòªÖd)R
¹—×Ú äQIWÛü$³ä˜­7âOYÛ–á/}ê_ï±4PÍòüó;ØjË°ã´FYÏôfEX«ˆF5îÌ¼JCÑòF¢‚<¯WÃ®ƒ1z×JÊØ	¥½xbµ,;*‚TºÈŽ2/¬ïÅY£$½>Èû ®çrXJàZÁX3X»Éÿôä@ž¥cÍ4˜ö >.ºr^Åm‰Ú|^ãÝ	¯ª€k(ö¼Ó©Áî„faÓª–ð,å>Ã‡G†?Ù#^V'ò4¢zª"õ].fœ5–æžQ§™jÍòÓ,Ú‘jPJ#õ lÓY6ÒE2j[3‚£R´ÖÆ‰ÖheãQ¯¦*È‡ý	cLƒÎÕ7;A»˜ 	,âÝîî;wî.0aoƒÂõkÓ¤Ókô¡C©4ŠBÒ€5m¤xºMÖW’s’žq3Õœšùq{Á5³©š{³5à•N8TãZ€5ŸÖÎK³çä©Ë°úù·ZÆ²dL&Íë‹°gR1WóÖlC}fÁlæúêv]BT3[í~V3WmmæÖ½»·üF9d¬Vm¬ææaÏPr£Èþ·a5ä¼5yj–-"V[*†‹UTQE}•‘KùéØÚpÎÚêòêìO”2òspí‡3
ù!Þš.‘»ˆà@Ž2dõkMSÊ 7‘[v¬7îˆ+^1ŠAÈÎ‘*"Ÿœ`MX&8K³Ÿ–É–¤Ga1™TÇZ*ÑÁ’‘úÈÙµa¸ TíÔô±Ñ%%¨IÈí²‡Fõ±py51µzÁÁÚ…óyðùÆ“Tš\¡™€2=ƒ5MüòÆó\f#ï§Rx=/´Åìlçj]Ñ—ád0É•qßíìŒ‘ò/Xˆ·6E£¶¦0ÈF`Mþä@FË@¶º:”F6îùæî¶——çJ£G†——¶¦†®sD÷éíµ5;mé’â¯Š!5ÔìÇù$ÿÂ ì±l8™à4p¦Ð¾&mo‘ 4)o°µµ·¾xŠÜÈÆKs¨G7[Ð¯~T~‡,5v€5Ûœ©fköæÍ“‚µjd„·†x¿ñÜ‹?¶‘À©b5ºÕtßx¹ÏÆ8p` yÎ`B£gg-S¦Èà9(Ove
©Çñ)ñ0ðzÖ`—Ã±¸úw…U)ÙØ5–Z@e	UÀ²&âÒ‡”ÎÂ ~LÖšôgNöÈÒßÄj0Ó§€ÀÚÌ4fš±ÚÁÚtbµQn3a»MMMSL'#²î u²ûÉÑ¨ô(i#Z;Ú;÷ía¿ud$=ºŠÍä0M×‚©V¸8ÝÙ‚ÕÐ~×˜fÐ•'¶þª~ºÐ´)‰Äd­:r”°‘¼ä¨‘?šßë«êšÇÔ}ríï¡méƒÓLGW¤ÓÞŠ}ûÌF«•¨Õ ˆd«Eš:èÔGëÚTKÃòêÆí¯ŽÏ˜X~D»° 	ÓD^‚±mhFb+'vTÁŠæÃœÊ [zÎµ”cœ±e°V;·YQEÊem>Z¤V^Z†‡UZq¸|S/²¼ÂP•úHê"Uj­o²Ýægg¶µwÇ¡qiÎióYMëOùz0¸f»ÇÚö´©/tociÙŠlg¼F~¼9o¦¡¼‚ÄþÊ°ÜñX0Âÿº\JÅj(,°ÿïJ¨†)1Jc6lDCÒÄäa«DÈï×ƒå³	³rzTÇZÎë½„|cÍg5þg7gMk:x¿éyÔ%Ôçåµ3¹²€cÜ[2I=dFqð…“IÒà€`Íå!Qðˆ¿všü¦t*–â½_×Ð ÛÊžÈÖHŸÒð—d|ðôE>ôÞÀäìt5Ÿ	Â9}BÀ:V‰-¯L:–ÙfÅ†ðn¢TðŒ›ô¯¡´ˆ’ý•ÙQ	¤¶¾š¦‹Ôºòº‚Nj¾ÜÝ;wÖVW5´±:ššž]˜1>³p/åÃå‡øl¸Õ|5/œÓDÈFCQï˜¤²Ö’éÀ!^€n>s,wæ‰'Î¨„â„_É5Ü 4_¶iù[*Í=3e©*OÅÌ8Žbþ©VHW¶ŽAô3óÒ}:¨AjÕ
ÝjÒ®vnvæÖ[ª¼´'DÕ>«U÷0Íô¼=ÃJ¾´¶\èW¬¡¥¥ÿZlX+ª¨¢Šú*imýúu×µÆ5ß¶¶eîšJ!‘R!5ÓJ!kòó\Æ³xeôÂY\>*(¯gþ5%ûã)/ÀÎ´õ"$bi>7í,¨ëÏX¤òBðªleXª‡bÖÜ•Jðæ—’3ÖMoC»è£Ã`MýH(”hÙ¤­ÆXíòÒÝå®ðò;—™µ&å'˜ÝP†Ykê£Ò`-Çœ5†¡¦wª/{gI"!¤¤Òr"cÎu™Dúc°¥!!(¾,)˜í­m]uFkQYhQ†®ÑÉ¦¶5°Áo§O“ÙIm$Ñ‘u§?)AÑƒŸl|¹>4´õï[ËW7¾üð‹/Ô¹¦²»«WÖîž5ËEPéô>£¬€Xrœ6;žþaô@ Û6‹íï›N_|þù¦‹·g›º/¶œiÂìN©cÍ()f+Ó.©ÚÊ ùyfgY @’×žÕ~ñ‹ÿ†cùÄ•3jYkV´\.Â/ò‘À˜
tvE*…lÐÃmh<Kâó«¯l¹`LNNüºO&$`_5Cž=iÂ¼³8lßÒ¸XXô¦YèáXÖ*ƒ—Cæe¨} ÉEC¢!¡€©†ì…ÌƒíšZ¸m¬ö7Xk·—&g µ4cÖF5›mhÍ4†F†ñÕ`¸n „é9¤EçJZ¶ýû©T­‹í2Z	œa*[ÃÔüåU`»ÿ,4‡
sÌwÖ|:;Ú×ß¿·ŸÊšîÇVÉ*\òûàOå$R%g÷|¼uïonY[ÿøÑ§¿Þ¸¹¿‚zH›ƒÝÚê6pÍ6ûûú+àJ"eC±Õ"ð£Ë_Pe½ÕNÏ¯.à&¿óW–h¨Aºá»ìéê¤æwYI—ÑÎ»,,pÑÐ¹ír´VXJ´†‹Ä58–ƒÖd¾Õ®ðÃÏ¹	kÜ.h³bGY+«Ü,§±²B«Àa¡‚¥ÇmEÙ›µˆ)\Åžsög%EèR3waí2_hÃ¤ï¤[|}¾výúÚçŸ_ÿœÛ—ÖØ[ZÚZžåöÖ¦Ã<IKyE)
Ç°ÆÕ¤V
e=öCabú©“ô²¯‡+Ë4›èGFe1°FµÈŽ’Ü¥KÄDîðÁ	r^*"VûP®å4kÍÁš3Öžñg¬éÔ‘² Uù½×k„ÕûºÂ@ücÇ:véPµêë˜É¤ÑPÁû·,¤Sj^³a#DŒÉ)¯î4Wµ1Sÿ˜d-¦"ã¼éjËÂ„ãŒ¬&”„.Â¥Ùl5îNbÄ?ÈžqÉ.ÚD¬±ƒ™¦1IÏºÙ¤¬ø]<5"uMyT“±ö™X­ú
Ã©oˆÕ^8Ï;^"zkÊ¼võêÕ¥ùåÉÙ—/Ü:„Rõ¤c‰Ìø”J©ÒI°†R	áë4)ÈÜZ£A&Ê”–VÙAÖ«&Í¤9×\ý”?Qç	@	ÖnÜØf¬½Á>+ÈNy±tÊ!“åˆðâRàZRq#ÜˆåÈ³Z^<Ï§c ›Vö…|Rs¨ö€­F¤ÚÕ>œÕp5GkÆi¶-VÓl5Õ@²ÔÌY[å"-èkmi¡ÈjEUTQ_-­]¬ùþÕ¶¶8ü­-ÿÄ\û¡+ƒÔÈ5J±¦b)Yjœhð®®ko K»Z3,§ÄàŒ†Þ´Ác‹™\ g¶¬g¿;‘ÌY¤"Ñ=¸¨á§OSh3÷sVGð’™Aæ,Æ9FG]êU‹¬íÔL¨£]‡æá‘å¥ù®®yïœ8M ‰/å­µ€:5ä¬9Müá³?‘Œ,iL¤U™ItˆBÄq
‡Bt´ñüã)¨-ÓUV‚@‡ÅöM®3ã¤NƒÙðÔv×Y$$TÖJ¾ÿnÐ­¤l`í›ßÜCxäÜð'¿ßørãúÆç[Ùºö3;qùß?ýÂÎÂ_½ýÞ¼s™»&*òGšÉ^S>Jý.ýì:‰l"Òv`+XlæïëùSÏ²à‚(lJð;K¶u·=ûìÃŠ«‰Ñ‚‰DHÒ®‚€µ›Õ3Æ¯üñ¯ kn&Üï\¡æëWŽÁjš®&Z2°UÅ±`­VÖd´êXŠßbVyý”ääÆŒM²€±ãB¥šzès(àf–ÜŸæ?p8‘äGŠÉdSßšÔá®
ÉRí’tƒ•¦ÇülÍÒ&;4[Þø`|º³0Ù3ó„6’6XÃD#TÄš×Ôb*‘¬­µ"È‡*[÷µt´FKËò°VGŽi©¶®®héV@ÑqKÃüêÆ{>©éúàåöšlµ$\zqÕBRµc_UXfSÖö²¹Kÿfkä`M	#Nàš_-9¼Å³ÿU½wm}øÑÇž~ìé£@šŸÙßÚo]\U››77e3Uð#–.ØiJð¯Ø+ti·´´ZÈ}¼
©vêàÈ¿+ixhtñnÂ;
¿DBRçÙá2é¼1»ÌÝÜÃ¶®lÍúÀ5?	ÁZþþ¶6´ßüµï¬)‰_–š¢í±=Ló–†Z¬NÒMÂfµ§•V–W¡½y_‘µ\D7œÍˆj§Øâûû¬ø¶šÚØÌ#vÃ¹yª%µ|{’ßÑÈæÔ¼îšœ¯åŸNÕÎONr?«*í©]™k™«,¬Ñ0
ïðz¦ç6ËK!Çò06°‰a¡e5)›Î5…ô{'%*ËKCêîÆ€²àÖ¿#Ô{©¼«ð<vwìôH‡ÖòET
YßKn¿Œµ—_þÖ‹Ï½ T³t‘Ë—ô~ôš|/‚E^¤™N<A$Æ¯Î°8µi*J}0gµÚ‰íÍkÙ¬·z8êì&õ—GÆ½`·‚÷izç]_%òpU:Eð½’„é>5HÛb.çLŸæ­M¨)Mƒ°ÙçŸeÙT)¤…Ïò-2YRŒÒ|‹ì„/ñ›Mƒa6“*«I0_í8¬ö¾ÚëO¾|>²ô[Òúí<Á5	ª^žßXÓ¥œµˆ;ziV‚5ÍÅf[ Æ±ÁCL^¬>U§ >•2Ôi¦
’Ÿ—Ÿ|dzê
°¨!Öž4Xû×7@5älµÙééYÅSžŸNÅ¦³rÖ"^5²É×6üš]‰|fGU5È
çFÃv\¦rÒžOjTó“E(ë•xÃüðµ›·|ìËWU"¸™«Ûû—ý~5®,ÅjÅp‘¢Š*ª¨­kÒz^¢µ-½	çÇcs&ÍÁš­|)5ÚÃSÃWãƒˆÏLˆ-@:q<“ÈöÖ<P\±î8ÊRŒÖ““Nñï
 á³™®6ÒÂÈm'SÒR!ãÜ!XëêÖ¤0ßC.‹•8^I‡ˆüc#Rá[íéÕµåÆðäÚ$bÓ°5`ÉØ/kÕ‡^í}(K¯ÆgÇ‰AŒÖvz)/ICÅîž.5$yâÎDn›eéTˆwFC;JÊ¢`ªÞ±µ#Ú	‰)£ßJ ÍMÊê­T9¤Ì´Ý<d·BHZç×¯om­/m|y}øãOÖ7k¿þT‹/Ö¾xóîÑkV‰€"ª!É†äóÔš×Î4‚‡ÄkIÁ–±š£¶SýýlšÅv±sòÙï?ñ”­©ÙTìãi»ƒ÷Ãš[ÎÜ¼9së,?“é,¨†`µßý˜”_üâW'T Ör¤AfÉß¡¬È’2rì’šÑƒ»ø¯©„h¿ÑZ¯¢¬éÝ ,çÕÜB¹t¾ú4P£^^&®þ´î4¶gP°Æ—1šÙnl(Z0S´?{È_ÇqÖPcØÂ+br]½öWqíÓ{_Ó_÷èJ[Õ#q"1v§kôs»nÒ ìšÔ=2ÒÉ˜µ2Cßg²5XcŠ±`mµÔòø‘NÎ%Pø £føvoc}ù 	?ê«¶ÝŽÓ¸"ÖDôï­’‡Æ¶Ýck‘Û‘:ÍÈvY‘4­íß®
(MTGòGwï/Ûíõ­Ÿ~úñ§Ò§ÖwÔé;¼Ÿ©n{Åj›­[V4ýzEs±‰î‡wcî™ZÙ˜ŽÀt#àÛ‚5n8r…ª&U&Ù2?:<œoqkœæE/ó“ç&õ;Ÿ‡wdÙÊ¶&çGu³ëÁjÚmðù ¬¹o‰õÀjRƒÁšÝ#àšÊãK¶VÙÂæfyeYEÅJÙ^ùj‡%áªƒ5 ÍlDWéðŽø`v{xsñ¨P/²Ç`°‚_bÕÊªÂœª(7XDö¤%åå”Ð¤È«ïk¦u(ZjÖü^YˆLÇP,›%½_fš×|)—¢am§`-\ÏÙ³œÞScÁ*‡Œ••Tcœ6³³a5¢!{±Ö¬
R_Øj‚µ3ÎX{ù[Ö¹¬Ñ°ö½—™ˆ}÷G7uð_?×l¬ö:ˆF—Õ×¸
.4ÿØ™K5ðæ„”¤ù÷ÛÝç:’xOR-‘#ï>üƒ÷#…(eðêãØe™E®Ä¤ªÅléEÄ¼h!Æ>ÏÊo³‘.‰_ô5 äÇš§ze²ÙKnœÇ¨$m.^$#g.Gÿõ¸~`Ú©‚±†ÔC;öjï¡+¼	@"3k—ñÕÐ³FGW¯¾3{¨:¤E4I4ãŠ€µd’k=d–7}ns°‘½Æ™>¯ž7DÝÖÜüT@f_=S'Ï€»ðî‰¢µ—
°¦©ÜÏø¨Æ|µ³Y`ÝsÙØôì¹ž]|äÍ"‘ê€†_×?âÒDŽÕX°Ùë`0«©>öÒ6qžíeŸÔ¶¡š³ÕýîPíÞí[¾KÇÒ²EÔ¹×ƒ”–ëh_íçÂ5±­_Áj÷ÿS1\¤¨¢Š*ê«ðÇZÔî§µUÑš6×æ'‘2üÕ¸6j8‰«ê9êTK lš§ÅI?Î—¦êUI†2§IQ†U
R&8‰ª ‘\M$ eà¶¦´(%ÚN·%8¯Ê‰×¶2œ4Ò6³¶ª MÊ	Äp‘¥Æó†Ø
ÇR± †‰µS7´¼°:š\]póL‘âûk7ä¬]¹t)Ì÷¬aé k‰Ì¾MÑã±sô7Õ®ë*Ùá¥Ú£	Îÿv´‚l‹ùðÊd2Jd¬$J;RS]SWsoày†`G£Qu­a¦“©‰LÃm+A§¥Ým45µÎ¯/N²õÉÇŸ\ÿòêÏj4µPG9ä»·¿xïË»…¨‘<Qù¯¤y˜½FF
pƒÓÌ#ýø´°-.6´×|`ƒÌ:N³RëÚ€Ý§ÍÓràcáîxˆÈîŽÁ÷ŸíÓ†ƒÓÚ˜øþ·nÎÌräf¸öÇWnžü7Ù•ÿö;\?+…üúM3 Fhÿ˜GïŸ—£Î4;~<WÝ|¬W‘õTBF8v¢\(ÛlÞÇWI/@Ó:»š½È
Ö¤d0CäŒ9ªq‡iXdl¸°GmÇròXi`s‘ýZp‘)¦e?l°ÇUÛ±“JI1ÛüÂÆ½¿ÀkÐÊÒ2§ F¥ô0H6L%dÃ•Cª‡”¯†Ñ&ŸÈJ$‡È§‘¦¬UFÕ²ÆÀ5kÀ‡×ü­pç\år¬[Û;GWÉ£øRg®ÿ§/ŒÕ;ï,­/ÌK´#Õùžšã²þ>}ÆdNZ;3íÈž~ƒ5ÝGz?)#þý\ó§ë‘¡­õu==eN÷õ‚Ý¾wmcm}ë“Ž>öøÓØj*BÌ$s°ÝßG%[xh#¤!æ!)~TÊ†ëÝje°‰qÄ¾6„S-Æj¢2`ˆG±É½m)qªáíÉÑÑ·eAÃhÖ¶å…ØÞ<šÔü4ÿ°­åð® —„Q2¿ØÕÌ4d\–k†^0ÒÊ\É¦ã¦©rTQ^F$ml&5¬™Ê¹ß^¯èK°&ëÑ¤mMx«5*ëÁ!cß§G@‘'æÊ7UMª­N}q`¡hM 8Çw-+]™c*B%˜$60ÏL¡@å+s•¥avKb Yo*œÊRî˜áxyÀ¦›2 9s…Áßí~æ8}FN$E’Á%;b9Æ!æjÝu¸öšxê‰3¿ò“ •ˆ^ûk¯Ý:ûæÝ[p@}ï™3O\¡–\Xó’F8“Æñ5'à)þÍ¢BâsUéì5$02X{VuƒÏ¾/ý’+'ŠâÝŒgQ.ÿÀ"áz£òA#ª­nŸˆ©&:ƒÂTI$E9<<¶õ²"-2ðT3RY$àI+óŸ;¸GøJéÍM|‡Ÿä»,ª)cD¾ÚgÇ	X9sŒE¶ˆá/þ.œ†°ÔøŸu9-]½¶À/••)âÔtCœrG`-Ok5n£Þ*©1ÀIUœp‡§PHbL_‹<Ayå	‹iBÛ`YØèü°Ú,ÖÚä,Üb†ÞäùóçäØE”$‚èˆ£]ÜÄLlžEX%QÝbÑÄiOÔ4Ÿ8¶]"µÿª©‰Õn/¼õš—]écÕf@5ÔcoËXûù¬¯Ÿ’©HÁšTdµ¢Š*ª¨­ÁkÈ‡5ÑšMÇF”ì¸XH«…l˜æêQ“Á%•ô¬ ²¦×Fá<’â,h„ù\–ÏÊ”ÁUàLä‘´²¹8~§NÝ¹úTÊŠÃñ‹´5$¨u„Õ£ªhÅ‹m1P:ÕKj ¶Ø-âJÇR,–²–¶pÇEpmDÇÐ“³„x™ÖN¾ðÆ3?~‘#>9žP	dÃu¾Í¨®ï|{±£Ý;~<K||S[+‰kÙôÅ&ò+:ZÁ4}‹iŽ}JâÝ©`gi%ÉÙ]Û¬r7Ìf¹{´«Ak¢µh”ôþºor3ÇÜì‘ùÑ6Žm]ßøòËw½ôù—Þ~÷ö‡ù¿ûá¤Ü¹û#p9'\Sø¢MPÀó'žj¦­_=ýùbÎolßYtú3=lìå±C¥_þÒhÍ![Ó ) ‰`7Ë‡Ãª‰Lvv$ÃfË·^9{óìYÖÎòÁŽç'oÍõ­1Û"Ph{F¦Rê	ÌÑ˜{¤šÑ>‘‡Ô¶¨6˜,igÀ9¼¢ö¨·Æ£­¦b;&xË(ƒ“?ˆ Ü>žEÉÆX‡K†4Hc1 ùÎ5MYãÊ–ú‡ÛØ–0Ü¤Æ.þ¹*]Ê 	…Ú¹‹ü’†åõµ/ïé@d» æ;k[CÃÖ¡œ‘Õ/X6Má`mBÓˆlnOO••èþ©©ÎN†G j_KˆÕÚöApÑh—À¥¶h‘Ø©…×‡–·”áC—Ò_˜×³`Ž5{ÆhÉ°¦Áiy8ë¯è¿Òv[æˆ®kmû«ö±oX¦{4QÛí"–þ÷>þønÎüž§×ó³XßÚâôÁGzÄã?þØÑ§Y?ö˜˜­ïëpÚ£ûû÷ïéÖªôRˆÙÜ¬è¯ÚÜ‹6Éîw¦ZÔÃ}üä²ÚF´Ï£kn,`Ö<@¯Sa9 Œkhþ>ÜÂR3bCl€D»ÌÇ¶Û×þÌ®or	±ä³RåÂO±™ÍQ++ß$¼|s°V±·¢L±®ú‘ë¨Mç«åý0·Á-+Æi [Ö6µ™PV„˜Qö#¤Y»ÒÂó•çë0[Ð¹ùµ4ËlRÁVí\iy¥€Á¢°(WŠc‘ €†g†ÏáÍõ‚_n'Õˆ—ÊQ	YV^IŽdYY	î
ÿÏy%ü}RìM¯ÛØ˜ê•-
Òfl1c4È+'
±ý'iÚ"¡é5µ«Ýª¾ùæÙ[2ŠšUõ¨^ðÄ—yè'‘EæVyIÞÿ«6iÄÂ!a"¼,ìµg¡ƒ?xÿïçuª›²÷ 5š-TÓœ5âI»Ì/eU1¿ˆ;vl|ÂÂ§~Ë<A&#ž³´ÿ	¾4»¬9'ªË±9>ÀwšÐà¾Éÿ¦üQ §H_ŽÕþ/{çûõîý;9Áyˆ$bxa€)ÉÌ=“‘C0R˜B2˜Ñ¥ Ým@”¶[Û¡©µ²Q°¬¦ÅÚZ°
vOÃ9-UkÝ;Ô56Y6l–®{o»É&»Éýz_Ÿù:e›ûaÏ£y;óý5ÃÏÒ™ïëû¾®÷¥Ì~~ ê7Ì£†.9¢Ì~ÚÕÐŠæ`;wë>ÈûëgV>¹u4–Q‚15¬Õ²mY˜Ð¾šWY_ë‡ÊÒÉãçxïv˜^û«ý	‰³>oæÝ8ŸrÛG2zËƒ5‹)4¬3B7oe3õ¾)Yl3*e¬‰Ë"PÂL3<óvÜFÛÁWëoÜÙÈi©9T{mª©@^»k3ÕôE¶i7íB —¹	ÕkêWûÊÖ®‰ÖðÔ¿½¥l‘"«UTQEýD´¶(Z›÷‚!ç°†Ö\ˆ¿`Exý&	’YØ9Z&¨†ÌéÝ(’P	[uD=Vý¾qH-.X«õ³ÜÎäúÕpƒMo¿´aÐg@b°ÖÅPêÞä@ooW×•+åÉe†sÇULjlT#ÇåcqZ/m3›ßOÖ–¹#É½{“{—ÌVûT3ZS_öFcs˜r!…ï«ýãõ¤NˆXœx=£vˆD8O.dNŸNÀå
•-Ù¸r	¡cbwÄÚœñµÒ	Ì³TKckWAýàXk]©é´±a¶ín§&NlA!ˆùFÂ?3’»0á†?}ôéÃ?üíÓ‡c“ÃaüíÊ§¾üîóÏ¿ÿþûÿZY\ý¯ÕÕKÎ_ópÑfÇàµ; ç+Ûxƒç,A±–ŠJ1‡P‘èÇ%‘ƒ"k_›´ýµÑ'­—'Á2Öâ'ŸÊ€i’VÓg)‰â½\¢iŽ+„DÀ—ØÿÏÏˆî‡ÖT£ÉŒ§Q~·£ê®£vl‹Ê>UÅã¶Á¶ˆŸ·ú·Ï‹ÕÎóÜ ¾[­+…ä$,§q%‡±çÏEw®n"’N34‹±ŒÅCJÑ¶™h¸epÛ]¤¦lNò"7C57MÎ«
dË5ø{Kõôt5q4™±%jQW	ÞûO÷ïêÇŠw¸5s{Új#,DgÜüËÀVˆ<G—22ÅR	þ0×Ñ‘Í³Í<¬’öt gØª¥d÷3m3ƒÛäÈ,'÷˜)˜²•¡Y‹ÑL	Š“Å±F„2º:d°¦
GWÙ]ã`mC2ÄÚÚ×©‚ìØÓí¡œk¬
dñ¹Ã÷8ÐÈçóÒG iè ëÃ?w°¦Íûè]Û¬TRÉØ5«eÑHì:×Öè]ÃgCÖ¯“ég ÏØi@l–iˆÆá¾¦÷ckú³Ð
óR­[cèÂ ŒC®`‘Ž7`VmÔÜFf6-©¹…œ5VFRÍ%U7›'+å
¸Ä›U7ÙZÃ+¼k5¸_;¨&_ÍA›Õ€b‰‰ù$Ûp¥   +ðK3·!/£4ƒ5[;vìãy‚6ý+×ÌmÔÇ‚h³ú¥•–*Ø¤r­
®*-evÈª%ù—0B©xÎGéb¨T)þÑ`(g°0X—†–åOnUYé¦²ª~—² Kª ·@“OWyüçmÔ¤‹î×<lœ¥m°Z>
ò¸€EÉ"èÍ³\ª9{Øùè#¬L4Ìo»sçµ
ÏzºsÇ<6¼ÿùÉi &Ë«ÒTDá¡÷Š´br°vŽÛ ®Z,‰©†xå:}Ò¦p&(T­l&ûÌÞ°Èø|·$>3£2kà3Ê,‚¡Tmk	ái6ö‚u¶Ámç_¬	A5ÓVÕ@Ú°±?b*¾¤Ì~YLúÑAµ¹k‡o}B¦ôµ´«yJä“û™¹æXÌÍ]“XZ"$i—<@Œ´& ã»Lû	I¶AZfh¥ÃîÚi-€ª‚ü†ºÒ°víÚYëX#³êú{¼•MÎ¨ ’Æµh"ÉC”ÊÇÂY_ô²yâÚÇÖ¾rã•;Ç6è9‘šCµ¶šHM¬FEøúÝå6ÕøäHŸÒÕ>² T„ÇjÒ5lµ\5õªk8kœHY­¨¢Š*ê§óÖT
	«±¬É]ÖLv%»Œµæ)ˆIþ#1¼k©bÅWîÏY˜2'ÕQüµ	°-¨¸%(O/õ2é8êËe3\7µk¥IÂHâvâÝuD[ dR™[<ÐÔD_•ª,1ïä©)Z$¦v%KeQÝÆAê O¿H’ûäÜü}†$wy‰ƒµ÷4XôYHç%oÊôŸ%u¬½žÅÑ	¿Ž®%°ü¸nÝËuÞ+WZäzïéÓ]Êº À?šà¹)Äc]§!0¬›’’pO#jÕ€5ùmuYk#¡ÜëNwqâNêj)+ÙÍsà8-[ö>üÛŽýýéÆö±‡ÿŸçÑÒÃ$w÷ý÷="¿{µPéº×.^$mÄ&Q¿$ƒPÅHœæGœŠ×b…Ì¶5‘º{úúk¼5±pÝlÏ³uŽËÞC[-`$;©Á		¿£5-fÎØ÷b´–/ÐD^ü‰Ü5ÄÖ÷ÃØ´óH¬Fw;±&žÙ?m¨©Ö7j§Hº‹à¸if’.YÇÂ>ê³šÊ«Ó±¸†Á¥©ó)ß’š¹0˜ZXÖrÙŽY h×ö Ôîi±ƒ¡”ùpb9ž¦²x :‘¤ù§XÛ¼E¡üxg ý}'8mIŽÎÔíÛÖ†1•àaiÂˆ)ylˆ}ö 4—
iæ6®¶&‡'ƒeU»÷PýXfÁ ÜëÄb3XÓ¸5h&'Ã®ƒ+µ›ˆ†ãÔÒ
/LN–vz‰" ›Z±Ñ
Q¬1ÓŒÄüÝÔãc"Y†ûÖÕØ]QÑ]WG¡$GTæ±œT×£)-’ÏÜXwï^cã!÷eî:ÔÅ3Egî~pß>­¸±yà°>SBaàÚáŽ‘ÉC †š-´6Cr²POÖhÄN
ÙLðÛÑÉIY—"ch{Â_
Ý0Ü²[Þ *Xf?2Î¼•·¾>éØN”†\$¦þ\d&Ó¬F`†ÇU¹f°&WlÂG%@Bk5Ø[“<TŸjj.²Æ*!ù'K±–&Åp¶«„çP_~öÛhÜ^AÄ#y“ú„•(PdVå–•¥7…p´?Š×”DYUQ5á«U`øùùÛ‹*¼Ÿ8þþ¨|L/B¤‚2>_ˆêHŠ‰CÁ’¨¼7šDCU%áPs×hí÷oŽ–…±c4n-Àì50Í+ƒ´$HZÖ~h¬]–ÖEkw©…œ^>B Ùò Í+Äp<½mú¶šªN¼—ã5üµŸý‡¨ã-ÑašRö	—åÿÆ“IÙCÀšGk‚µX|€Ô_Ú“Õ­Æp¯êi)
ë5XÆ²Ð–Ê3°4§KkÚ\­ñŽÃ6QÄrÕÚ0ÖT¦aæ=V>X—‘vê±šhm!™ÌrµNI˜¸ZŒÂ¦Ò&Bè* ?^Y\Q»ÚåzÎOG½C¼+)J$áÑZ­ƒµ8(ÆÊ¦™xã±¸`-ÇUL‡sãìå|š9à”¡YŽl.¾)cÄ‹ñª Åj3£ãï\­]~ïzí¯ø¯rqzôÂå¹œZ£°EqC¶‚*yÝ¶²H;â­Aµ¥§¡ã©m¨€DÚ—{Ü?ûàZ›XÍ°¯MbZÞð¿’­æ”gµ%`M´¦p‘yëV+²ZQEUÔOì­É]ûX“Á†”ß¯Lê‡yXóhmªÏu×û”42®Èû@Hé‰¼'e¨!n>ÃA]	%šŸ(e"A¾—pMX³y»îŠÓ‘@ÿQ/¤–LÚ`lš–¨2ì¥%@°FÛ@= [¢d‰¤œÉqÇ@1\µÐí–ÊÌ-~8?Ö3|éÒ‡B3®¶¸È´ö³—Þú¦ kÿàF!Ó¸á¼Ìæ”<ï§œnðŽdŠouáÔPkg0Ó¢I ÇO’eö,Ãsku:	§{†4Õ¸uÖ½h¨V×ØŠõfàfy‘<ƒg¶·v±×ÕÊ>ôFØÃâ\ãéßú%xöàÁýÅþ²òåï@nè^»ôñªðHtôÞ]—ÀH¬ö«Ö)b¼¦.‘·½ÈK‹ÄkÿßÔ×áïL6Q›ê !6õ<O;É9p-|¾7¾u(c¬°™>TD	¹k¯]~ï.¬¶!«RŽe?Y:¯&sí<õW\»gC°ÖV/X¬§HV"¹¿_ûšþÓ¦†”¸E÷ÓÇ(Xë		›"œ—Æc€hRíŒ€ä„E·Hùga`Íylú«v
»š`KM+™H$¡€Í[úÆŽ§qÉ(áa95}û¶†\³¹¬™¦¬è‘ƒ ƒËð?ª¢ÈÉaÿ¶šøŒŽŒ4³¹¥d6TÂXìîÖv¡_±ô™=­ƒ–)²µ£b–M5wÍîîè”yÖ5²½¤»{—g;Yÿ{Mâ§üV«¼²F9µu5* áXm—–‡¨‰Æ¬TX«ÜUW×Ñ-X“¬LRk$t# R¡{Oa®!¾Æ¡{uÞ‡Àg|vð0FÆÚ`Íê!@(‚µ5Ycàh&ÆY;Ð3$åÍ5ÓH¾‡M+wÔ±èˆÛo¶‚Ov1&uÜ""ifU²ÂBs¦šäM¨frè†´,(ß”æ=ÃíÉDso_kp´¦X¼3õƒA‘²×4/n«¤Ñjg+Á&Å‰”VJmÞ¬yÍü5F­¹TLõ½¹ŸÅÚÎ¸»º‰ÕxMâÒAˆxsF_œ¶Æt€YZÖ*Dg4Êáæ±-Kmûlå‹UOX­²¬¡/ZZQFÓÚl
PôÃi£9€,døZi8Ý?J~H´¿?DI[b‹.¶0P·©ª,âã
‰fYü2¸û}lmÊ÷Â ÑÿuÆÚq™K—ß»¬«37Î®_Ûy÷8k?Övn{öÎþÛ‚	ô‚Z«ÄkÇB2^³WƒÁýÕªÔiòZ×‘ËÃš[ph€ÛíjÈFGr/u[9 }™b±¡,C=ôú ~‚©þz’7Û¶N·l.”ee¶I,%õª!hM.–üß8wnâe@­à«õöÆ&€5±Ú[ÊÚ8vÂXM°¶¾.cmqnñã•¥©_ÍÌxue)’ #{3Nb÷“0Ò´?À{ZÓdpŸc¨0G´-O1¨K7Õú9Ï”ýýØž·–ãe‘ýÐ6`Øyk¿ôŒ5tq™‹žSbµË”Bj	½]xÏ`-­ö/P
hXß´Ïð’ö)<aˆf…¦ãHmC³š£¤ÞƒiØw¿j«vŸÁCµúi‰8kjVÕ¸9ÝÊ§öÛ$lN!ŠÃ°‹*ª¨¢~JZ“ÜÌ5k’Eø{æš›’¬2ŒiŠüËd”½ŸÉkxQ‰	Ü’hNl$BfÆå¼)ãJÇ¬Ø"N™HN.4«Å°­¸œª7ïX"mótzºHÒ§»-­ÑªMqœÊôB*„Sº;ÖV¬ëJ2Ån…ÉÉàØÒâý¥‘£»´~!tëC	X#R´vûi7búƒ~IÄö£×Ë\”wÔP`sIª'3!PÌŽj’jïîöMþp(žˆä”	¹©,ÈÄ[€µ+š¢ÖC¥d«kSÛ¥©­ï¬uá¢©î‘2I«‡ìd%cºH’HZ†—†“÷þðè»ïã¥Áh+yüÛÿÔì5	VcPöê%­¡iì7þÚ1¨ÓñšzÓßú£b³GÕÈÎù@Ø~48ûÇ}l_  Ùæ×¢·ç‡†’±äIì¶s_%`µD[ŠJÈ»€Ú¥KÿÕ¨„<ÃÐXÏZ{•ó3ž©¼”ß+¦°Öo§‚<
Ú¸šOó„Q[›fÄãÌzè×  kð:æ+7îƒµåp8PîÆ±p š1Z‹QúŠ¢Q¥Ù„0mfÉÐfV=òÕ¼ÉØ-]a¶Dó(×Éf‹rž[QÆ#“¾§r‚´¾e Œ5Œ†Ÿfáü‚5žÃqóÔ`9‰Ö ¼X~³>474oé++#!tÞÚYU†Jà2•Þ¢ÑÝš¼ÖYJûÑ&ºÊö4¶îNµvód(®s²¹yW¬Å9Mžœ¹ÖÒ½«‘õÈZ÷Sœº3g¬Y ¿g°ÙÁ]°tlüÐQÓ¦ÛƒÖ´„Õ$æ°É_{ê`"ñÌ4Ö,öýÜ9k?ß±ï0þO5v‚+5?ß×=r¨ÂÜnR(degÈ¬œÏ¬5²É<Ãm„µëcp¯öùõr\V‡Æ.\o¹YÖº0¦rk¯~š‡d¬6èº¢Å“ÜH·SY‘'%µŠ‰ŒÊš-f„=v¦šŠJ¨­²f–ÿ@¥P1X¢U”	IaªªŠµ²ÒÁw–ÔAòÑ†kBR¯íÌ¡hŸ…‰h‹ƒ[€VC¬ÚÊO·v³´²L_1Š»>«€ùúUa¾‡RÄ<x²¤„á×ÑP)ßóôT ½Bá"ý‘pB³!U!ÙžK€5„F+ù"Àš_Ù6••b´ÙØlÀÇ´lÂF|øk¹œ®¡èVpÍšMÆÚ»ŒQÔ˜±ËgÏ¾v÷ÈÙ³ëëË7Î1”@kƒƒ7nÜ8qí6°†ŽpÊ¯•3þ1Ø^Uo-v®Sù¨þÿ×’[ÑÞ„³sNV
ùµ. ñ*ÅSÔ4{íä9î¯_à÷?±&£ÍGâ›Ò'yÿ¯RU£MRûÓ¾Ç¨ F8ž$DÇ’³°H]o§O½¾0ä¥ö+2ÿ3?=¾šXŠ±È~¢EÖW×?üø¦a.^]Ynšº0ÿÉÇ÷çÈ,ážÍ ÍØ+­¿6B^F ³ÐµŽMJìoòg¤zƒ5IE‰4dã¬Yn}[Dþ£ŠNÞù^ÿv>59|?¨‚$º&—3HcŽ…íâÔ¸j sŒZ+ÀšôÍlU}rÀMÏ^ªyî™#GŒÓL669RÓlI¨f-¼«ëŸµ¢©þÑmÑ§&V®ŠÕ
)×ò ¦HÇjÀšÎŠ¬VTQEõÓÞšÈÅŒx9#°Ú’‘Úšz¢i%kèZb\kæ «± 'AœD?)ã”óeO^IÂ`Øl1îšwb¨¬‡¢’"Eb~À(ƒÕ¥Á©”O*@$
‰XëZ@NŠËmÇ9!ˆ>g;D5d²%[šÛÛ2¼º>˜ºü‰ºÖ<ZÖîp"á`íŽÖ^× 5S"Õ‹a¥H¡9-	'J1X-âßœõY@´/æéáki%25@o|’óÖ–dQä÷w5ršŽ)ÂAf*„ÍÉnét‚äN¿ø¢2Gv§N¿ø‡G¿#ÄÒF}þùÕG¾ÿþ;ÑÚƒï¿Ï``6s×Î(m¸öWµUvô,ïëpzk­eŽø=`‹?¶Eþ¨“¥¸á²¹F×ò¸Ò ˜bçÃ³ÓË}þ©3Æ`S´µ2Ft‚öê§_¢ºt'g|È(˜ËöÒ(cÖØ‰T×6ùu¥×XMý$@Y<I3ÛhÍj–Pfüm\½uÊø!tØhÑæ²ûã °FrˆâDÔ·˜Lõt¬mfu…Tû#B2¸yKy\ÆZ(­QÊ”vU»åµ02VÓ¦ì3Ä&$¸)Rdê64gÉECQ¶1yjìCcÓ[ÆFB³}%¢³ÎVh­£TÓn»Á§ÙUbµdçžŽ=LÍn/å‰í<è!9rW+‘Dã†~ÏJš\«éäÐ,°æÉaYÄŽ“¹§ÃpM™#RŽYB¤í¬¬µÿÍQÈ`¼~Ä”FäA{ÀèäðáÆCDÍ7˜=Üu„‘&×À6éÑk-=cÍJÙÎ³šý<<×pfìè˜j!'çš-üñ:š†ÍÆöŽ’†]PóšÉKÁ±©”q³Ù…Ä³
§¸|ïAÍ¬–úHnÐ¨t´€~»Ý´œþÉš›
g,«ÂC+‘{ªÕT–•­Mòä
xª¤ â¨–
ïwÎ™VúÚ0f3ZC¬<ñ-›ò ÇW•VIE%l¦|“ªJÁšy§Uâ´ ´«‘™SµVJud;™GÁpd¶¯6Ú^JÐÑh¤½<ÀtX$"þ’Ò¦_Sä(DÃuÃDD%üõ8¢’P€ÐÈ’¨,· ñ>‚5kYC¼â¬Œµß˜ÛòÚ‘wO|ðÁ›—Ö—÷ßøFjè©zöÆ;ïÜx÷Ä¿3£øD†¦y–/¼pG“F…ôÑÎ6šQ×bÌáÁ6tÊéœÇkHc Ùúúësz©:I²ÿ F›6ha;ùÅ¹…HšG 2EDèIY7÷Úå=æ4ZM£õeW	Ó8¢§èYYæª9B']d?Ñ"™ðyE«ˆR_ýÅ»Ï¹h˜ëë6Oíè­•«ßOÌy!ñÇ3DžÄi¥?Ê*‹°åOÐiK‘|“’F b5ž«­M¬a¹E”àÌ%tPDÏ~¤‰òïý‡ÑàZ4©Ák qÖnÖ”+rY°Ö7Í¯šõt"M‚µø¤½ÁZó°­Z5¶ëŽpìÄò#µãy)¨f®ÚºçªýÎ´úxeY€†Ö„jm4°M›¾Êûj^·Ú5Ýn©ÒÍÂæ¬ÍûïÅaØEUTQ?}ß·©hFræ9þS&NBXæä €kTÔ›PA"ˆwõˆgHX 'ü}k5¢>-! £ô1C|DÚ—eg ëo¢Ð#­œ~žÍMÅÉ'°¼4 ¹ŽÒÇBh:?éÔÑ¤ÁÇ¬b©áádòèýûs¡©ûdŒ¬¿I
3ïL$BZ¦"íUo©£Þ%Œüƒ¶5Ö(ÁÄýJeÑ£)­­Élöõ‰lO{@Ýû¾¶óøA´C £
\ËÄ4]-Öz ¯–.`1#­ŒÇnÆºêê°QJ‚u6q-ˆû´Élk¤ã-Ee;…ÿBÏÚâck¿ýœHwà{hÈÇ÷çWß¿´º
%­¯+äC©g~uö™‹/Ð{@d
ô‰^áÊ¬eŽ4ùý£9Ø¬‰M¹þCèÇÄ&iT­…h³DyjãI6<û
Sk¯<ÏÕðw®MüÓw±ÖDkÜ5nêÆÛ ;`mÛ6ªKEkþ£ÊEkãJéÇX«†´éÕÈ÷§ûT4ê³rŸ`M‡}‰	‘<˜—<T^]íé] v&o	‰ÕÊÃ=–×{Áì)ÖÐZO<Îß;¡ÍÑÍÐZJo%‘ÌUà—$ÁZGŽ¿ÑhÂhÁ^[¦¬ZÛ)X#êb˜cSV‰ÏvÛHÍÑšÂûG†]ÇÏÊ°³¡†M¡íf8¦8kUÎWël¡²Õf¢3r­»CŽª˜­³q8ÕÒ-5rÈ@†ûF	Ü&÷TîIÚ»VÙ-úr”!ç§±0ÛÌöà°={vi6|f+ÁÜŽ»Ä_öºØÐ½{÷`µ{‚2ç§Ô£ª~t°ÆJîª»{_\¬1d{ÈÁxÚQ³XÛ¡k0ØÞhÒÐÌ«zt°¦¶4sÎn›¶fšt°6¼]Á×Ù‚Í$K9jI.cF\‚5j­Mª6ÒžgÓÌ
ºNèˆã1u†¹G¿Ù`5ùX:Øg†Þí¾µJ@älašQJü¢.ŽÂÆ
Øà¥›Í³À´¤¶5l8®c55<fN!˜ú„’KýÏo;(3Í}bÉV:š_}M9$k7gUûÈì€ÙÒT‰£—¡ª ßŸ†`·‡±vàé×0Xˆ’F¿†©)Wÿ-”‹‚p¹hi8âWEéöùB*~ŒË„n‘ j¥e¡Ð¦ÙM%v3ÖHüÉ¥s²Ö¬iVó•×¶9Vó`ÍNâ™€w°¾íÍ÷/]%T¢‡cöô/Ÿ>ö‹7N¼{í¿¿:KH!‰òŸÙ™ÿo¸!€€R;^šäü¿¤âhôvŽ×£	0”þ…×ðöÍaSÛì©,“Ö¾°Œ5.,œûú\"’Ö®,ˆÕØdg‚v×Ñlw¾V[WÀâ¨R…a5BIh61a‘",±Ö´m2V£<s<-KQ~á|5À“Dð¢t§U’EþðpåêÕûcÃ·VçÆhOã¡üLS¤,5­¬×6G»š_hP®ˆ”«× Iµ²%üÖGÆæô]òöl)XQ´¶sÛ6XÍšÖ5jÍF¬eÍ—6bMÎKnóSÀß8!]OT-9FÓÂƒ®´ï¶4. ~™¶CRª¨ý˜Ô4Wm2ÈÑ¼ú`u¦~Ð†bê“±ÕÚÌVÛ`µ¬]0\ƒ×òÓÕ
¸Vdµ¢Š*ª¨ŸVÿ¦¾µ­¼5ƒµ_Ï`®!sÖ¦%BÍ¹Õ’4­kÈ¯^õ}÷+¶Ø§Ä¿‰ùWN'éfS`–XÅ(lˆå„@fÓjP#L’>s›‹i°X:Ë‚E­cõÂ¡ ûD€t%ñ]ÔÉ¦ð¿`jïØêúR(0OŸø›o®-Îœ9b€óê/€5£5±š±*HV]ðI"½
kIZo:‰–õT÷Ÿ§€s!CcHŽú£ó±5I-šQXYª½}wk#¨ÖØ…kÒØˆå“éÁ%í-­0Ï¨kTeæ´–œÜ>T&É½{{—¾[\¹ÿˆtÂÏ?Ô¾{üèÁßÿ®=úÛâêêúú:´¶¾îµ¯ÍÏëjö3Ï=÷.ó×ÀÏ_p¥ú$‰¬»bË=±Ø²YÏcû1²Qêè¤í/8oRC»'O["	¤¦§r5<ë/Ÿº6Ó7¿.ZË§TR
éF"¼«®5û¥¶qîcÆž*¬M¼üg_mÿ¨Î!š"‚µzTfîu½ÎÎs¹mcÕ&&æ:h ˜“Þñ\Nâ=1x«‡8“Íué2*uGS<‡1jŒGßL:QL¦‚ú@žÂGoŽ¦û˜BTm¨Åà •7nƒÅncŸåÌYËQ§™»†õ£cô²ÙÓ!<UEZÀˆÛÒ 6Šø¤psx„á{8fù2Èvp¼“Ånyl¥¥Êñ¯3VËK˜`‚7äšÖžŽÚ~wl§iÔO=‘!Xw¤e!þÑ=lK«yÔö‹»ÀmóRû™½fÁ#÷±arlæ M°fxPMk*‰•_«Ù·oßAJ%÷®áGÝÜ±o°v˜‰c5`Ë$©(/"LkDkb5£5ÖþYþX»>×ú0R²‹^IØÐ®sÖßæ4WMR•ää˜¦M7ÿk.¿!œC3c6[°âŽ‰eIë¬m/)¡BñælsC-`³ä|4ÃM³òÊÖè#^dÇZ_³x¬²ªDÌDºË²†í?5¿PNÖšºö<$óÖ,
\ö/Ç®ç€i•Uú.úø:¥%¸lfãUUAkÄjƒãÊÂÄÖT%bEˆÊ"Ñ ùý\{`Nv0ãÒä¥Wÿ¨ü4^œü$–U”øhNÓÓ±zËJ6•lnò)rSH”õs5Å`ÍŒµ~¦&Ã,2Öž{F¬Æ™üÝ³Ç_»ôÚàþÚõKë·A	•Aj®Ú/o{÷],š³_ýúìüÌü{ó¿þìŒž¯–[{\•Ú®T›—6¢,þ„u¯xMìd°ÆkŽÉhHÓ¼58×*.á±-ä"™+¼ ãðg±“RÆÈÄyâ• 2¼5±ÍlI*SV“õ–=Å§;uJ•–yy¤vjHýÉJìí—­Ff
£°Oœ¸èEö¯®~¼ºú˜È[syQ^[ZÒ‹Å~yJ¼0™q&_ò×´“VØH„÷³åã¨-©çUØoÖHÆR'ÆtC®ê(­Ù+6wýS-$Ã±-kB5Kî×¯RC3S¼ñ Ö°Ðj=R3Nc­ƒ&m…¨^Çµ€÷©jrÕ¨€¤úñ¡\Ÿ¹ÿàÁ¼FbÚwÊÂ M´¦	kÆjp‚×f$±šç	Ä‹èöïÿö¿Š*ª¨¢Šú‰½µE$bsÁ’^‰*ìIÄvaf9?û‚ÊÅ€µÚ¾>6|ã¼E©’ã•ë§ÄT,»ôIH$‹#’U>ï½¼«MMõ†©+]š›3@Xº< ð˜S.ã‚æ43¸&Wh;-nñTW›©`sÙ’ÀZ°‡•CNr¾·xi}>tá>°&È±s	%B#qú%ÀÂ"!É¾p]kÙÁç=%¡Äèx,¦xJ×HÁ˜ÈR¼21 «· tµŒ÷ç"œ%Èiv&¡T®þMØf­í€X*Ø	 )O„3vn€&KAþ-\èZA‘*ùÚËã f’<s¬…û­<ºº²òàk¿Cß?~ôøñÇß_]—¹†×.3I“ÎÈ‡ä2¶e|Ð8F¢÷a°~¿¯	žtÀæyl˜l?B6@:—ŸXk[¹;k’zÞØŸš¿{¶zfþ’”÷Öø>Žs±Ö¾¾µjZ“‹pþåq·ŒÚU_½Íñz×çììNûØlãÚv®PgãºJéÈù‰L„sƒH4À_ y2þX*PÃcêQ­õÄÃq‹‡„×Âa²azÓBP6‡¥® ýAø] &‚†(¸•§ÆUWO¹šÇåÛËù«¬ô˜˜¥ÙkzÔVv 3%Ä?¯‚´Ì‘n#©‘ÌäÔìÞd»¬µd'áÄBvÂãUír^ne3×(‚llíh!ýXã¹k»Iôª]¤UAjÁö®ºXí¤ÆµvÔ˜kÆž3Ð¬éÖ½O+>Xã¨M`«ìp°vXÓ–¹kuÀ¯åõ#–kÝyXÃebÙžn<6¾Ô¤Ø3›¶ƒ‡m<¶ç¢Yƒš‰M$6c›‡µ›¾¦yvƒ[à0¹m*Q¤Æ­å#F&µ1'Þj`øš¨Í	›mRå’ ÙÆìG Ïç…0‡…{ÐhÍ™lh’P}t½¹l–0þÙëÍ¤,Î’'n94«PóØvvJ€µ¾ÙJ"ú+ø¯Wê`oÍÛZÖèuÓOãZÓ<0Ã¢ÓVÖ${˜¯ÎR|e}˜}ü&š×JØ_£äQt¶&?$lgÉf) Æ=œ×(qGâ48,UT…GMoƒC£| ¬±£éó>Æcçúa$º£¢¡ª*q>
ù6•”l
ð¿''V³‰ØÊ‚¤uŠP~&§>áŒ5ûs:bÿþ×.¹m éó4zXS×ÓWïÌpÕYÍ$åƒfÖà¯™(‡Ô ÿ_XûÚ~Êšy5zyöšÍ^sö¬v.kZñn pËæ† Y`öb¯Ú‡04‘Ëþõ¯pÛÄÛmõúšé¯‡&üÖž­ñ`n<{Nì÷…´ÕÈëßj¶š
@¹Rds¢‘-b¬F¤òú?Y!òêÕ•¹áå"Dß7ù¸<9åS¹£w$Ò¯µî¹&À¦:’œü°&#0¿žCœO‘"£H©"9èÍèg^åeCòÆrÓ°/kÂÚÅ¶kµµú¾'¾æ`­Pé^o Ç'_ý<©é­ÿ^ëBµ©I°š`íóÕ¾\_žžŸ_¶!ÞÖ¦5HÍ±šÁš¢EhXS•|5ª =S…ŒµÏŠ¬VTQEõ?Ak5w·œøûbs1þ¼‰¨élö?U;ÕW?ÍÛ&ÐYs×2H[6Á9æ­ùüê>PSÁÖ™Ì3™t¼«Ë¶¸ñ§’nË2†§—”¿©©:@÷CÌNÕãÀ™UÀu¾Ò“R( ˜T×°tkñC¾Ccµ±ƒ\•å÷?ÇhlÑš!½BÈloöˆëµ½ñÌë‰4_B°–ÉÑžþ2t4ˆd‡NÑßžÎ0zm†<Î}‚6ûºKow;“6©i	W-•Öà8ÅDR
°:ÔÕuÛyº2üÛ;ë€6Æ·>Ô’äÄ¼³ñÅ{sD·Ü¿º¸ô-¿V®<ø-o™ß£/¯R¹úøý÷¯Ri¨D<ï¸2¶íâ6êŽzØ¬ºspçþúý®‰MÄæ‚"iÉ²ý¥SvÆdbåÁšëÆWnÚÊpÚ­[/ÜŸî›¹¾®o`XCÊïg Üs^|¿~©*ƒ$´_3qS™ty9¹ÿLÇ£Y­m[Ûy‰JœfÂx9Iãè|ÿ(§™@17`m”g„Ã$O`–•GÊùQjNÁ5e;r‹yŠÇÃÑ0Ü–
ñ¤ÂúÙÑs¸£àæp|óf¶Sñ¬fù29?¡Øjå‘Ú¾i’â…iÀš€l§e8Lã)Nô®±í9k’U°mMkb5„FÔÝ6™R ÈÞžÝUíU”»ŠÐåhˆÕ µÎŽÝ›C{ w ¾Z¹uä5`-ŸÛãþYlÇ<«±òÝ‰¨’ªlÔ–d«ìY8$2X«ãù»¼xHOOÕ±GÀˆ—-¢û.qž>Â­È+Yƒ¸ºñÕî=up°¶}¤u¨vb£ÙJR€5á™¶g&Ykˆ=ŠŒFõŒ†¾¹£š17¢Tÿá£„÷ÓË‘É1½¤Ð[62µm(xË§øhÎÌX›šÄ2ó"G,bÄzÓ´RZ¾=}0:¬•QÖ¸6/Íb_ÑŠg¬VSeh*¸š­Äò‚Çjdm)Ž©þSMdäŽh0Ûöh;ƒÛL
ƒô†®QÜèì3ÉôVº»Ã³ÔÖ¶U5ômç»¨£)aDëJÖìp/S
éòµE‚U8j€³t.¨Hþû™²ÅÀâÿ,-²Ñ¤ŠÈn#fX+‰ðÕ6hbr$Ç*²ÞÅA"¥‹È6{õØcyVûç›²^¸ÎuíÄk—Þ¼f¦W wãŒµ¯¦>ƒÓÎÜu†?gÿ¶4)ûŸœH\w³ý™Ê¶^‹è>±×xiÉûk¼äH®’%õª‰˜ ’×áÞ­ ›®ñå2,„fÙ“_œbôumv`Â -q$MñƒÞUÎ[`¼Ú©'ÓœÜ«™(q!K °ýàì|å›§ÿãé;ÇÞ=«	ÕèpvÃÕV>¹z•Ôþ¹[„U‘;TeÒüi»æ4¤E´)	È4™ÃÆ‘z`Í5V`/sz÷£Ó.=jóJ|üGò`_Íƒ5±ZÖ­É[[~ï=ØxffºVÞœO–Ç3Û«ÙÚðÊâ@tHyº`#;m7®9#óã™jR¡ý.¯ïVf–1Mú”,Ðò`>)×–ŽÕTûèUAæ£E«	×ŠÃ°‹*ª¨¢þ§hMÎš£µoy	þa­™ 5ùŽùkNfS¨š
ÕçGmø§êW¨<O=d&›ƒÚ8·
Èo_P´†Ÿ–&ò¤òš©Š¼"zã4=Ae†!lJéOø9÷ 4Rgê±þ1P®Ã!ÊÞRKá´D.Ì,.N¦˜Š½8ÿCK¿ÿÐ¦­y†ÑØÐÚ7Ohme³ÎXãé}ã¯Ç{ÍYËŽš”Ýôf¸$ºpŠÝt€Š¹ÞD÷—•ù™ æBù£Ñ`{ªGýhÁT¸¤Š>“ f#ã½Ñ¸ÔHÞ#³e´Y!d°ó4°¦IÙ{G ÝCŠ{Wã¡¹ûëópdéñãÅ%ú$,#òw×•Nu°ÑSpõc›½vi5ÏJüDŠd„×Ô×Ž¹(6:Ô©‰¤Bç
 ‚Øèt`È†z·&·Joh ’ÆÄz¢<zsrë¡+[³Ù7¶fG—¯WW÷UÏfÓ—”3âNËž±ÉØLZSp‹ËóH¿»—'BÀV­ïü(Åo+D„,´„šóùÃðs±=íâûðÿ2x7^n¬ßÎQ™Åýªž,¨èQ1üSƒZÊR éJÃz‹%©T`?Â=¯[¤?ÏÂñ!Z0Æ³q×x Î0œh*ð»ÈêvŠ!ÏM£…MûvÜ¹o×mJ°¦</aÄÆdõ5eÙ7ÛÞ™‰uîa6´¶[5²„‰ÁìµÎ–‘†p8ßÂ_C+.]„@HÉ&«$µ,èîkWã®nHkWc£—‰ˆ©¬Ü¥õ>è
Z3ÿ¹µ~®9~ÛX&yØ–Žãd´	ÓØ4u{OciÏ=°6rHq%MîÛ±FÚ!šç€µšš›…šÇ|¬H!fgŽÔ¼¥ýpÚÖ#“Ãl;vë3£¹Xi“PjnÀ˜›·œ¥±˜ƒs…™js|aÛÖ'Í(*ÓgÍ€jÛ5»A.	ü*1Ž\qãÚvÍŠ£WÞ4 ”‚H8”ö<ƒ¥Ò2{ZMMV£Lq´¦
I6`"J‘bÃQ™<ÛpØ´¥¤'m÷hïG«IÆ¨)âD©"êZs¬Vª)oŽÜ°ÖÂ!l5RD„[Á`€%²ÛÔ•‡"ŠÝ68J"IH€Fý(-@L¿/ZR…×Kúˆ/"É?Àq.˜X¤î—þ–Ù8FÿqÒEþ)«LåÎëf¡dd³eAZÞÅwó°¶üÎÌY`í³[ Ä’g#¯¡•„È#J‹½Ã~óJ~Ê¸&^ËòâS¨‡ôäÖ×Ò¹sÜ‡²€™ê¹D™s¶uë-w˜Ò¥öÿØ;¿˜6ïtÏ¯v¯çâ\E((â&„¬èØÇ–Ã‰ˆŠ‚m„d¢„!¡xzQµÇŽæô„„iÚÆÚQšI¨&@iª	m"äò&'#:i&lZ¢áÌa©"FUw·Èª¶jGÚÏ÷ùùÃV{;½ñûýg›ð§5ïçý>Ï÷Ù67š˜#ÿC¦Ü;£°š›´Á`í-/Òæ`+°ÿÈ¾wõŸ/h8pÊ•½eXN»¬Ýž§
’Öµ‘ñüT„?aÌHÌ¤Á±,}j ZÊÈ,E…ˆm;a¬©ä3Ðb;RS2¹ÏÇPÐŠ0·;Iond;ÎÍk¢5X­kÖ±–Ÿ·n5Å÷ÏŽkõ~ÁZŸÛ¤`©"¬ñG—h%±ª7X«á7äÔooÞœº	¬ñ«©­{¦Zi ¶F`?6LœŸZrŸªDlLRÕ;¥®YV»	­å?Ï#Â.ÒÚ¬Õ@r/³ZYe•UÖß5’ô¨
)QûàMÈ¶ÂõÉßs¶›Œ¨uÅ—ÓtQÀ<å("Ÿ?Ë¶%ÅhàP:¡	Ú£sš˜c3P	ë á˜vJec_šºÇÊ„FVcv
O$l~y#jaªÄMâPw9kNaEDvNŽO>7~ûöìÎã×-4mM—ÈQd4¶ê ™µÆ5æ1»Ôë`í5—gÎC©ùj@äÀþD‚NºLvôÌé1ÜÂÊ@„Ô±T4*¦ùšÙ‰F¤òá{©‹¬…ªíl½Õ" e­µ2ˆíÍx*ÔCv6Cl˜mÄÖ‰½¬±ß	Ô´ñÕÂüLÏÌFá/œ¾Ï¬Âh®uþ'A‘Ylì~òÝwÆkB6Å¦|èY‰ç1%±!pô5/Øÿc#¶äù?~—ÍR }„§}è4škµ³&óÙÎÑ+'MåñmuIÔK‹DSš¿§ÿ¿½]Œï÷`MÆš…õóïðƒGk|É‹ßŸÌf	ÝÌùrZkÖ˜ãÐÐð\‚LºÑœu¯]¼zD9£¬ÛÔû¡	¸™QÎn"Cù²Å}.È,tSýZYI_›ÅBÖŠa7Ãf8J~$®œÃ©e¨Ä`VãÖü"1OýòÖ¤}êa“n‰ÇÒÅçÏhR3’˜,ÖA²#X9Î6`­:<:Ô±—¦Å-ÓÓ2Õ4û Å‘Àv…‚ÕìkäÞ^@ê³! lo÷áC‡[Å3®iNusçáCxk`9û]»;=Z£ÿŒÕöí/ë˜AZÐæ]c³$öKkYl¶m‹R`ÿ¦gºÃÚ}¥ëp3D×¹ûðá.YJ¸a` Æ.6<i×m	]´Bð›9jlimw<ÂÝ4€¬ML€UV	)©LRœh^s9“lÀg2Ö¼àÇ‘‰‰6´iÇ¬‚Ò›B-qXGv*t{mPTCeO`µ©þû€˜E?VÁH²uËŽ
%0ÖÕ=UmEš¬:UÉp{žùÔJÜgD0,zù"æ¬y^š ®ä®!0NÀæ©ßûW=aÊÚtu­ašC(`C~©°“/ev4âçêH1!=â¹Á_ú+lç	8"³ik(®«ÐdìÑÌÍÆ‰KEækŠØ°Æ-…×S6ÞÄ1¼ŒÖ>úèì…SïúâÞ9ÏÑähÆt	é†—¦Þ»»¸øûAu²"+ÔÖÝ¹îö~{ùM!’$xJ×r ¶±žÌÿ'nä×Fk —DQä\1z„ê*2cÖŒÆ1~Vë˜Ý†÷ëÌåoq€CVôh¶Zæ4[Ú=ó”ÕÆx×áÛn;²K.TDDâ…øjJY^Õœ˜‡½¼ºJÏÚäÔ8uýiå<Æ2©bøeß"ÊŠ@fÜ8ÌŽ*!q=)¿vÏVdž},ä¯™­&å°Ü"Oi­Íòûß}ãcµÿîXM¾Ú”’ûå­Q¹0Ëª?Âçpýhnþ™?«2Knª5eµ•`'p4{“_ÖÒ0«¡ë‹‹ë$¨H+ šj©ñ3˜½Ûtó&/aJ¶²¦ôb9œ¦d–KJt¬v—aØ³ú`køîÝ²¯VVYe•õ÷ÓOþÁhÍTÊ‘ò|Ü+âšz×ç–U)#¨Œ‚ËÔœD®D.¸H5E}€“í§ìªg¡r%Ml‡Â»ŽöÅi
cM¢?´ Ö¨4Q$\FšEîíÇ9I!‚Ä¥þ‡â}ûk
!®\wjÛ¦Ý^¬UD‡Çj Êß}ãÜÕäÅó\–N¸F
ë¥8=‡¹6Eã|ôÊõ¥ÀÁ \©h”PH¹l„aÞô³ñUôÌ©Ó.ˆ[dÉDJ·Û<BTÿîæ6Õ/XëÀeƒÕüÖÙÚÓA%än6{°a˜¨=øÕW™™èúê	Öþ²ÊÜµez×ÐÈ¶bõ”Er)ô»OVDlÄu]w#è²ÉfÔªY¤8ˆÍ¶]W›’\ÖNæ¬‘M“jÇÚ(Œ„Ù¾'S»õé¥nQ[Qn#s:–ˆ0;Ð_ªï_¿+¶Ï9kÍ&cÖÌZC
‚L¤Çø7Â©“ä·œÌeO³dûb›/«ÚG]Yn¨±1·œrúŽœ×üì#$$ii‡ñ‘&Ùæ"£1ýþIÇEé^ÃXS¼£æíE4°ŒçtÃò½Cfã5—<ªÁÕ/†WÇ ¹g\QÁšÅ;
È¼µïÖÇ¢´[Úœò –V¢ˆÀ»‰òž:k#:’ÆYÜ±¥bš:»h÷ÁƒÌsn¡7ÈŽ4Chíb÷`°‡$HÍØë¢ Ò€m·©“¡×Î_ó dá:u S)!‡[{†ga¬©:O‡ÜQì4m.ºßC/6Š›7»¹k^°Û›Å¡/e«¹cˆÔÇçkùâ€µ.G:ÌHÛkB´Mþ‚5ëj“&œ·f°†Øãƒ=õ¯J;`ª¢ÃÁa<Áe²ÑØU=$¢oÍÁša¦ÅÈy%ìJ²µ$·KjlM»QrH#$Í?¬ÉÔ¸`÷Ý˜ëç£íÛ«§Ÿ0BmzOEtT¥ÃFNp<g^+Š(÷È{£©W­”/‚Ô¿¦Å„°›îHÅ–ÞÙé×ÒS“Ú
2Y©êÑã´íµíÁºªê
ü?U_Ú­7Ÿ(@ñGBxj)>r
âGQ,77*ì|b5ÚB¼¦'&9Þ…Òü¡ÊˆŸx‘ÜÅ“	ýŸh°¦à~u¬¬½ô*Íhrpò;™©H$¡F‹üßþöo÷:öË/`µ×¥’¼Í¨ÿix*59;ûïïÝµsÿ´Pi]é½Á›î¡ñk¿ì¹‚Ùk£ñ1÷®{æÀæ›¹œH‚™w`¶wÀ1tT×þrgôØ¯ßùÃüŸÿøÃ×ª¬mPbÒ[ÛÎPÔ­*3’Leùž	¡5[íÄÏi¿Ã ¤[mÜ\ÃW3Ñ¸v­Îç§š"”Âh@Y&Ã†Fü-Ô™#Ÿ¨M¡üŠƒlÑ8ì¬’¨}˜_ÀšvDVEêÑ°r»ûÚ²)ÊÔ#Oa­ícô†"\ÌXó|µ%ßøe”ŸšÌÏŽOÎ‚mK›'¨©-®¥>$¨R°VÌDÚöùD‹§Ž-54Ü^º¹8¼´¸¾¸4¼æÍTCPš@íAÁXmvjêý÷Ú>ÿ¼©AMjV‰ä¨¹÷>¯R×h)‚¼)ÝÍ›«§YùãðÝááá2«•UVYeý½iMšwó±7ÑÚ½¯­-©c^›Ö­Ù°Z›s
eøš|œ^?÷\4žða­g—¦SÉ±9Ò Ó•±tºúI`œõ½B?­åØ!	‚J 2õ§…ˆg1’ ’aÛ	ÇGÁ7aLN7ykÝÁJT39¿<OÏIø’·†à`yƒë!€\d«!õ3pÌÒáà~,¾æÎLŠ	ÝÍ„ ¨¢Ö^@§’ýûT+‰fSäÎãÝ¨I³r—$²y[8g½íÄA*°•Ž5ãRê¼ÖL¢?› ù‘Ý‡þüÍWƒôÄÿÝï»÷ßÛ Á~ddaå1Ì¦9ÙôaÜ†ÅVP¼´KûXW›.®9Ù6Ø SÍ<:B,[[‹bË]<1M ¬Oò"OžÆf›;í~ÜžÇ2<Qi‰Éõõ†úþ³:'+ÕA^p…œŒÙ¹²V@›Ú@·Û˜N|¹´h›N&³£ Yr4ËMä&«õü(å
ñg0[ÛEK¥A~º±>P,3Ô @(,tïuéý6Û‘™¹ggð¼¬4w´W3Ö8Àµ’a5®¥G#ˆÀ_¬kLwÞx&P»µÏ+€žõ§#ïøÌÝÜ”5¶XŒdÙÄm#d¤{ÇsÕÕÓ
ÀMëÁMUx¿XmïîÆ5rF1#kxªÆj]l«"²ùÀ^Ø4ëluí>p€lX¤#“±'†šY;ZƒŸ´ÕEo1‘v¬±Ë=±ã Fkhó\4¶¼þ5V%X3&óôN˜hÐ¢v`;ÈÐÑñ„ð,¶íÛ;rfHòÐÜdh‰µ×Å¦ƒ,(i4fã¨„ózØ×ÇãçL}¤ØEy#žQ¡q$h„M9gìŽ‹ßÜöì¸EÚÌ<fÝib´b"äSç
‰î“k	±™˜§6YS4©¾µ‰Úç)‰¤%­JœD#Ñ)$zBG:
¹62îÀš–ZW;Íä°¬”&Â·§Ô«VtÖô<“9lýÐ"Íi¨î>­V2Öjù7È©ãË`3æˆ,¶0|Æàµº(‰ýþóçsQMÁV©c2ÞNFl’š“w`Íª® @x¢QMFÛ–ÊÀ–Š,õÆá¬fQ9§HDT¤óÌÞ´ÉËùg? ¿éƒ³Ã‹ÔC.ž;wâØEXSÁ5å—•SqÓ·4»¼¾<»¼ÆÕ£5è;-œõ/­˜çÏõ#/†È’xyÿ9)y¼fík,J©¬©l^YHÚ¡ñ6L0?[Þ32¢Gõª¹±9ÞºâG×yë¡ßv®+‘‘q?¥á˜PV³d½§®®ß«]C7n//ŒÃdô«µh¸š
1cðAÆEK¬!#Rg-µ–MÈróí#úÑïÛg°Öb£Øšä±5%Åj–ÝŸŠpå2G>	þ<'¨ÃzÛ%X#×÷Ù,È|~ié’&bOå/ÏR¶‚½6ütœš¯Zc/•€Ï1÷©|æhÍ5´)Ø„ÒHßÔÏ'„¶³6ÑÚº* «¶òÀ³Ôò…Ç+f›Á57ƒµCµ#K*Ô”Š;XƒÔ>¿‰òw½l´0?_®,«¬²ÊúQhm¾xƒÕè]›÷pÙ_ÝË£qI²e¬iÐ°èE"SÌ¸™KPÖÐeHMüÑSnþšútßÑ£œX“tM‡Ò”Fbo]Q5d"M!"$–`5enÐP(ˆÂj¡ÃGÃ•pÛþ+œŠ‡âû‹Ã‘{+•ú'K¥…&F¬á6ZÓ´5ÁZ‘ÖþZÛÕÔ’#ÒË(s¸ö½ˆítouþµÖýsŠðJüêÊ\Œ¾ö>%uŒ¥µEqfOO|¥Ã\6a…nÝû[{l*2wñZP'é
4vkmm¤Wh‘fÅŽ°­hÈY1­þóŸFîÿUcçW×Ww¶Ž`²ù‘-…ÇøÏ¾~üå´º°±RX½±RX»Q(|$}p©edÝ›‡lrØ<bsE‘o0•n­ÑJ~M¡ŠS©ÊAþ¢”Ùfœ†Ñh{øšñ€ƒµþú©uÁÚwŽÖ8SZ·’ºEk‚55¦pBh3£˜k|œÎúSc§Íc;™‹Ô·¨Õž¢GÚØljzÌŸa·µ¬Q£BÊZåžˆe,NX“âXjQjÍ7ÀÔÈ&ÙLtyn½Ü]Ú€æ:zµÓhìç*C|—ÙI2÷£QÖŽXuèL´æ!='mp01’>Ïéˆ€Ï€7½ÂJ÷€5ê	ïìm¯À¥Ù1-Tëa0v6ƒÄö”iÊ>ä†ZÁ3òEìBì‚s<§‹lýNóÕìn-ŒÐGZéh…
ëçV”‘Ùö­”C²‰Ÿv°voOÛ[WgI£v2cíÁšm±±	Ó<cmS]ä³Ïàß&øƒégÍ‡%«Ýi¹\/GgZs—Jø­¹5ªW±²×háâ/ÉqvÚqhM/r¹ýÜd³›Ù´¤Y=$tËmOLhÛ&šõÛì†‘Æ1x	ÒRd†€fÓuuTZ.$/„™¶>‘o&)Ô$£}zGé—±Æ6,åõMz²à¯í‘6Íg™ð<µ’ D.…÷oÊQè¿­jkà¼3ã1üÃ,Ìcãê5ƒUÁhPðN…¡®8TG‰ëÏ)?ä$¯&#‘¶«Ñ­á@E]H1µ”É±òE*‚t­ùÀ·ÞŽ0×¶lÙ‚-—;IF/Öw¦ÖGZ’WÛ°Ä1`ÍR¨
H² /üvñ7Û±š`JIvQ,ÉàÊE*ê°ßÖÖ×>*|ôÝ'… ÅRíE®çˆÖ.]2ÿÝÙk*A?oÖÞ³ñG·ýÐ_+
;zT!!À›Ó;Y®ôY¤oˆyj§+"[ˆÈ£äÿÃj‚5ïªST3+Ñ†ÊÉ$ü¹³ÕH²´Hyƒ++ Ú;« (Ì1>¢¾2ˆ…ÜÇDfsC3ÔR;ÈŠ¨8’é×6M-`©#6w$›e±ÑÙÌù›Žp‰JâYc°vî*L%ñ/0=üœhMÇÖhÊ¬]¾™¿üþ‡×ò>¯ ¤)óÔ¬EMkŒ<ûÃŠšÔ›4Û¥ç¥ìÅ6TÍ«€\[ÖL«ùõÙõ©¦µÞPÍƒµ&$`³H$Ns¬f2cmAºkÆÚ‚®è–k Ë*«¬²~$oZ“Y5¤7r1sMær1þï	Ö,
=5gÍçË¦aš"*/'¥Š$G…Í\£Ñ[ï#Ô›òûc±9`ˆ6Ì6¿`sm¦Ææ¨c~¶ŸÓöt<¢1#Àä0mIÝÁçz¯hìš#Âjç z„Óóhv~Ù¢˜¯Ý^¾F!¤Gk/‰ÖÈ¸,Š	eª´áØg¤ïçzCÙtOGwf,å¿¨Ë´ªƒ<=šŠ¥™+”JiÁ^Bu1Ñ-0f¦¯§º"ïf6ªrgÝÛÑƒµÆFq"v'Ö…o­Á ý”AþJAþ=t±µþéO=Ý´±ýùw_®§n~e£°1³g^#²—GæW‹Ö¾.,/Ï?Z½sgcuõú»½FtÙš±“ñèeÏaSÛ©S'N±!‚"5Œíµ/Î!,Ò%•Õ·è'IÃ‹R?Nõ=N¢©„;?•JÆÑÄ¨Èû%Ê EkÏB¢˜Œíâû­Ì‰R+~¯´"x-3Š»:š¤}-G ˆõÂs…ùâÅ¶œœµX<º#Öšš®rB5šV²‹:ìjü¸²ÐZ·‹†ŒŠÚê^#²?ž	Ó¸ts¡˜ -Î¾ŠÖxUœòY«E5þ,éý V6˜’47MüêXsyY£VÊ!¬P—Ü¾QE‚À Š:T£aW¨nd¨£ºnh"Ü«D*`ëz:;­?­î ÞY6&:k¥V¾;V&	gUí=p õÐ!Øƒž·	v Ö„2í<€TÛhA#ÍüÅÝZ×D_]/k/¿Üµ»§ª½¹«Ùê µðœ5èÍe<‚m¬8äùi¥ÍÙ"¶a²üËóðËÏþééœ]Ñ­¦™i
EÂÙ<i³$!™“—Ú¯góÒM°Ö/X“ô™Ô¾68#›ÌRø…iÜî8v‹`~—Ñ!^3”æ16ÅkÓ¬YY¢¢=`Õ4/¬®Ý²cºú	G	$x§O*!Ã%øl;ÕŽkO¬þXcGÎšÇj<OrKÜ5sÈžIzÔöS;-O›vžá7%”h· MŸÚd8è¤Á×ÁÚ
&c+c³M³±£¹¤ŸR¾$îY8„·´ð_Uá÷Éa¼Œæ¯‹j®š?áhƒ±+È‚ÌžYÐïyYŠ ¢ ±&vQ+Ú¥"®Ûèû7Ï®««¹Ž5Áš›¬²±±ŽÖÖ µÝ^kŸðþTì¬åÇ‘iñ’<,áš•C&y£°¹ÊEê« Ò†‰<#c5´êF#3mÎRž±æhM€ÆKçhhµm£ùt6$R &t½j2_+Îÿ¦÷NQö|³ª9yG½Á;ëO¯Ck3i–ÃÏ
ÑO+e~mS{ˆq&K)rhS½?ÞZ¾ßH-Î¢PZ¨QÔÐ²$ÝoÙQtþ·-Ê‘}U»¼|‘—äq‚‘¯Ò¥™º”_º°Ø¿¸8é«M5DêhJ¬‹mkþTb¬ñ×ø#H çÁš!š8Ž²«­[¬*< þ‘…õ«±¿<µLä4(cÍÁš>v½âG¬Äj¬Ýõb -­_ëGó¿+gö—UVYeýÝõßDk%`ãÂ™±ZI÷¬5%CNBi¢5­ÒÙH½O—á²4|C¼xƒ¥–Š0XËZ–ÒþšBú!`,áç	"½9— ÉÿWû£j×G3t[êWºCa’ÑøSª$é?íŽ¨ð~Ü•@"Pd¦P˜ÜwÚ)”!<>3¬-ßþpBH	‰é$|±ÖFÇN#±š€ÕX2Ü«Ñ¥ñôÀ[s'¹KÌ<›c
ª¤4°"È—ye ;ª˜}==½át¬C-J$Õ¶àüôT9`jïQz¤­Áj7l­bë¤M[;Þ¦Û¡oV®ßãl}ôþ{;æ+ó3Ý÷
_~ùõ—Ä+³·ºòåG÷Vï\/¬|‚
Ëº²mìtÛxô-lô;Xø%Y ÖÅ†”ùÈ†(‹T/dmë4¿zÞ—C‘~bW»Q!iÊÐàyùòë†j:s°†kÒíFàZ† qtcô¥·™ÍÁjp;I>zÓT½Ãp×¬´JÓ¢QÃ³×žõBîÙl<¬a½Ž\ŸÆ[Ð,’†i±YûšMyq ŠIQÙQ<Y8_Á/Ö¨À­i˜L$ê5ý$ó
!UºëÙÎ”å/ÛLÿë >ZZpV|ÜM€ÆIØñ¡ãƒý;iX#u¤¿G­®}ïþý­RÒÚ€ëB£“}~ãTFvqGDûmòÄªö66?N<8]EÔ£a£'µÄf›Ûƒ56ÔuqP“+§‡Á¹—kŠþ8`YÍ<Õ¤O ¥ã²gYtódJ{î %ÿôÊ¿üì2$½NñøãºÏ,´_cÓ<¹øúÍÍ!–z¶PM)úk,'oÍ8"›xòäÖû3¬3Á”ÆX×sÖöLLj€µ6òL%œL<Ë>ÊWdmnšÑL7Åëo•ËvßRûÁ+‹„¼ß/–ã˜äèh;*Â¥ê
@j®šKqQú[%l9¶ª´WëÒCì_p¼è…‹ ¹ŒÏÂÚi´iç„àU!³ÕœØq	#µÕ!åA¦ÂÁªªp¸vko-¡2Gâz1
qm
—-ìýIõ	ÊÖ"Ç©¨Ð~µFµo‰ø*C£)Kþ)ö¬«ýÕÅ‹0=M6“¹váØ/ß|ó‹³\ûpñ*ÂÚg¯ÿæ†­æÞU.]8{axñ(ÃjëkLõßøæ›Úki«•¿¦äØÒ%áZ‰×Ü¨KKä=‰°ñ·¹ì£rÃJÓúÿðoÿj–ÙQ–ˆý£™£$D:ŽãÁ ökï5 ÛÜ;Ò•£¬†¥u/VMÏ1ZÍPæ„ÕŠ)ö…ë¸jèÆòêõOµ———(É‚jû(S²5h¶µsË ¥œFß¼ä&¯i9
¬E¨J»éNˆÖ}µ	Ö² # Ä2ÙÒB§ÛU~|]ûÝo°ö¿
†‡—rYßÔûÃM¾©\ÊŸœ½ü>ìF©°ŒÔ#1˜àMóþëù*ëÆAl,µåÔ$Ñµ¶(XS¤yj^^ÿê-ÀkåñÚM!Ó”USª[M°ÆÒ ÈÏYçîš³&Z›†Õ¤…2«•UVYeýx¡ž¨‚ÄZ­±@^ÎÈø½{33œmÑ¼†·&qEœ ô†&Ÿ
Ú8cèÏ—eâg}wJN\¤>WOQJo,ƒÈY¹eû®ti•÷'úH	ÔD5a‹h30Ù¯äÎ²úÃÏUö’ë­Åâ€›\â;ó3;ÇÇ÷ôŽ¬ÞX[»­¬²uÖä­}öSÑÚÕâÙ‚sŠÖš–§é®â|ª ©®;ÌjH';GßšK…zãÌfmíî±*Çx‚«ßaºéHEe¢iÞV(Ô+ZÛœ·Fr¿´·öÈyédIˆ?VŒåÐØDIã!¢E €PhþÁÊ,=k+&zqÖÈW~ÌŸXüµ;Ÿ>~ðèÞ/WÐ'DE®kŸ|òÄÆ·¹ŽÎžå»ü½)9“MÂeƒR?ÙDlŒ_}ƒS¦]ûÎÑFÒ&Æ*ŠKîè$×ßO’¿/ÁÔläüï­Ï.S™Ÿ-ºkÖþö·‡/ØY˜w†³–K%x½«|Ô5m…iZ`µòéZêkZTŸÓ$FSFDCÖÇÈh;V(¦~(ÆZËH‰çj¢á™ñ˜ÂYÆ´”…Æ–‹(X(«¬ä¨Dd¤¦iÇåFpks©IÍYS 7h-;H*Î x† 4I»î€DP"­jIãöhe›Ò(ˆœdEÂEEµøl¯@ÃÚõ¥ÄQ‰"’h|·všÙ¡§L)#Íømuœ¥ã¼qséýÓÕ{¦ë:­´sµ¹ËòBˆcì¨ÙaC0cµFmjâµ²EÐËµ{Á×³Æ‘ùnîÎ‡èËC²Í¬æx‘“ÕG²x…'òIÿñ•Vìh#¼=ä*%‹H(	]LÆh, É½z»mÂ\›ŒÝ?â~²{_¿%XÒðkYg2Öô ‹=ÌT# s¬†'T48’´ƒýà‹Ù)–²ño;=mL5}_Ó°'pÛªÁ!•9Be
é7m+dÕuPSuµ³Ö¶ò¨ê#á¨Úû{¦ïß/7Þ÷Š)«,!£“•aš6ïwË~uÑA’h>±çÚñiÙ{Öªƒ¶ zÕXðÎfá6²C¢”òòÿiµU¡äÕ¿æª·„pÜ"¯¨kI_ š¢-@Ÿmu°¦¼‘@u”Ê”8©tÜïŒµ—^:ñÂòÕÐe¦#ÃñÄ)¬³S¼E¼‹õíTÀ•ƒ—˜ïè.x½ºþÁ…¥›ë³“ÿÎÔþT(|3¸ü@QHŸ¬…¤K:’—æ_Äµ¯]EV)^=À*‰´a"Ü=^ÓÌGml#ÅßÑš\Ñvc$ÿ¦è§g³lá?‰·"ëUÃ+;_{C¹"¿yhhzÍ›íÞKïÜ¹~cõÆëËùü¬¼µùüdRë—E?*øQ.šqX†Æš´é19k£Œ_cSOH5ôÌ¬/Gwngí|NA’¾¶«ç‰IRÞ‚šø!Èß<ò®ç¬ÁjÀÚÃáÅcÃdõ¿y
€ú<2IÝÊ‡—ß¯¯Röè' 	ãfÁÈÏ¶¯8ÛÔ„´,2iéæ²œµµu&_‹ÕžÆ@®ñª©<$ÅqÚìZ¤\5OD@ÎXô³u>PQ“¿IdÖH€©qôÿõ¿”UVYe•õ£ÒÚ<7$P{„\ëA#–ã/Xû=þè¸Æ‹•˜tœ£ê^¡Ù\$¢é8à'Ô†a}¤æ2øS˜Ví‹‡ø{”î‡!(-…£ µö±PvHÎˆ³&ÿ1PÙÛªðþ`w__ZmLa[„ÓÁÞ™e0ÆÂ¥¯•¼5|&híÈU×<áúµÄjca±×c} \†¹ØcÌîéŒqyTÁòÂ–xèÈ#eƒ‘¢<‰`Ç~¦"‡RÀZG{e Ì¹;ˆo“•´Ñ1"fk×Étc'gï2`ˆlþÅ/š;èk£fZkïdZvçáAÆ°.Ìƒ3…o7f¾y°ñ—`pacƒÀ‘ÂïVûíã••oÏÏ,«e£°ºZ l„3£håŽÃ¶®ïÕtYòˆ}F6Ûg¯¿®!ÚœƒQ©©s»Î!ØU:°Ù,?e…JÊdÎAî½³Sý´<,ÎªIÅ¼µÛgÿ«¡­qâq‘¦N$ý`UX	­ù’'O“á†¹ÖTÓÐósÍœ5Šcýd÷Ã‚bútÔ‡Á7J}l¶7–;Ò ÐDœLšèþFÓ€0LW`MŠ±¬Áü¦^Ö/¤ãþz’mBLÉK(²¿_"ýÎ\K‰Äný<™ÌBjÈÑ[¿Óà‚EAî„ãX©kÍVýì†(nDêHÃF«ƒÊ­ÍðŒc–'£g°ãZ×°×š;;Ú9'?j‡Öö0Äo€7»³Óš9X£Ÿí°ØK^éˆã6kMÃX£]Í¶X5ªau™ß&D“ÜòÙ,­l6Ö^‘ûf;›aOí°&	IIÝ£{-gÍÁšC¦Rd1mÃ¼&oT¶Š…·CH°¦IØ¶G1ãÈøŒ
LÀÕ˜·¸ÇÃ4.ÿ°¼e"æ‰©	NÈ5$ñ‰K°Æ­ø m9[‹õý'TN=Q\÷ûÓÕâ!HÆ|3Ð¬2‚Ž*öh$v­Ãi´§$ÉªæsAkjƒ³o÷i•£û¦=9P4•ë«÷d>¤´Gs¹ŸÆö[)¦TkF°æ,·vK~Œ†ƒu\-êg;J)ë±®6$‹&Ä5Ø-‰ k5­åØÅUc ¶HMoB}y’ú€¢™L^½ºËÒE>S,âCÕ@2¿‘´E~óö‰/LXQ?EzŽ`ëØeÇùØK—Þ>{yW~q)¹»¦HÞ¢þ8ð"lW4B&RÁÞ'Ji#6ò^;‡ä¯%uè¤.ßé]X›‰ÒFOaoif¿	Tóô–ÑÜ/ô OãÃd´wZ¨ælDÃÒÉÆÍÆüüØ%U|^`’·7qlÅô Smyùöj¾aßRþýñùå…)r›²	ß‹¸VÙ4Ö<QOˆ–+)÷+fÄB›"~¶l—çŽeš+I]Ò|5äoÖŽ7r>Y¬µýÁÌ@±k\HÄöcêøðCò^fg‰ç\º9|aqi2ší¿µ4U_SC•	8ej0´ª	ˆÐ'`³ÖÜaa—=*¦óÐ|‘›‹+tªqéo­ ¤=x\X¬ÙS—ðþP“ÙsnÒš,5î®cmá®ys°UINÿM•° IÏšTöÕÊ*«¬²~,ZûÉ3ÎšKq¤¦	ÙÜîá®kãL¶ýýïG`6d&Åd[5eI¼’&já"¾¬5Œµ†h×Xë€«žjÇzÔ®\™c¨qùqÒÚ©ñ‰3X¹ž7±Ê”ÖÚ9`s³bé@T™€A5#a·mœ‹(¡$(XCo¡`4íÚøtee^e‚b˜ÛEZƒ[N|†Ãôî®#W“EXûÞÊ ½vÑÁvfþë&¬r4’$µr`Ke{2![=X94U-šŠ)€¿5Ló´ÌYƒ)ãŒìþ•Ô°üŒéÚUüèbûg=í8kÐš•ÌUT´ª‹­3ØÓùçÁ`pËÐ£•Õ{ó3½Á¡™oçVIX^^]¡jËíÛ¯++«DüSÖbiÓ×X_Š ›òÍnâ5tÉôóS¯žú9ÄFµÍ/)D¯Iî¼ìÈ¾6²¼}õ>j#²²Ù 7)•ò××Læ?šu-)ßYÈÓÖ.­¹BH!Ÿ/Àë¤ïÿ§8MÛé1_}ËÉ¹m9æci«oÁ'8iÌæè“·Ôþ¦ˆŠe1`Ùã„¡>#!Òg}Üm|Cª¦>•a¼†±Ú¬MMbEåcÌZÓhf„ã%Æñá­ñ‹ˆ)ó?ÖàQ©ª65×Uù"€6
uÉXcs±9)^ãˆÖÉhK	ØÒî¿i!„OÃ±…pTòN9uTã£öÀil2g­=XÝ‰CsUFi¦ŽÖ.Ê#»ö‚÷÷ƒu].ûqhç’ EfVÙèBúÙêzÙeò#–€–×Ç¦£UÐš‰¾Äjìhrkt³-¸ßL¦ý?u²öäqA“OUôá5EÀ	7Ía™¡Z‘Õ6Á4'–2Š1¢bß$lc»˜¡¢AI‘#ƒ švwhúm8V’§¶sçŒrùÝ¨k´Ç4=­EÜ£¥ãE2Ÿâ7¤:àLÁ";ˆÁ¸×ŠÕˆÇŸ)©X#¿Z"uÄ5²ÁPOl.6zþ	Ÿsm‚n³b¬ŠGŠ&k¥m÷|O{øäÎI“Ju7±#°†ûÌfƒAÜ4ÂF"¡ö­í2ÉB¡ªp…j+²J	¨ìÑ®E		×UûÉyL!¾'Yü•F¯ž4V;‰œ±–liúøãs2Ö`5—.rùÂºbì"òmJ!%™oª”<a–œF$º|éØ¥W/xi5y³óËðYáÛç¡6PÍ‚‘(¹®!Zjå¯æÿ‚6/Í_›{³¹(3^sûO#o|ÈS‘‚d&Ã3¤Mì5oª?æd–2*Õào úå	ÚîH½´`ÏUsy°Ú—ÿùé²E–g'#MK¸kù%g¬¥×°€¡´S<Žmö¢´ÉÚ8¶E~èi‰âl¨måŽ´eÕ°–¢ \-kçQMK=¥™¨­éÈ^$3þæÔ±äðCÜH÷öMäþ…|$¨©÷l4·Ä\Š¿&P¤‰‹çðLèåÍx3ò’XRËH äŠ¹jkë_®
Ë…/©~Ô÷ÙÆíˆpÍõºéÓ¸9ØÒç,rËÁºW®6‹\ÇÚðl™ÕÊ*«¬²~lZ+EøkQ¤5xÍEØ”
‰¹ÆÄ5ÃµÉ÷&9'^ÒoB§å|°QŽñ@8+£	4°+Ò¤”ÿTzî¨`í­£
[$U‘®£hM€¨
Øc|ôŠÏzcˆ2Çp·Z”tzâà~‚­QoS-TlÅ€#od8ŽüÌ½ù€¡È)¦Œ¼K×–×7aþ¥^wK†ìƒ­bÄ‰D"É\æÌX"67e8 XkËªO!\Q‘Ê¨Aª£ƒÞµt˜p‘PPÀx<ªhßÝØª8È`o»"GzéhkïèlîäH;Ù`¶æÝâ<ëtê	¶Öùo=|h„ÌŠã¼72~obdSÜýÝ÷6
_?˜œùj¾ð`cãëo?x¼‚áf3ØîÜùôÎõ;…Ù‘üêšKÏÆ_sÚŒl$¼pŒÚøl'˜WK0ˆ†Ö¾ÎÜZÓkï~¼Ë[Éf»hV[Š<pÎúë—úE¿6žýHHu¤8ZÃ­dôm2yž “hÍýlstÒf8‰¿Uí˜¥K­S„$lÙLù-ôthèë>æñX6!PÃqSmk¢^°‹‰Öâ¢øD¬Ø±†}Vê¬U;¢ÙØ¦¾îpÍs<[ù$x®ziÜ/ËrÚ®µQ×èˆ«Š´HÙfÖ³¦|È)‰§º‰kÑAsÓT	¤Mö+d(=Ø9”ê@==ªxlWÍ+"í’È­HUÜäH~Ù Zã^ŠlfêÚÁPë
XS\¿ÔHP~³Õ:6bÏuY¤yf¶ÉTm6yÉXs•“ì°æ 1#˜¸$z‰ýž<#.Ä*Eõë±Í°Æ¿­9¡àý!8eòh‰T~Lrˆ,Y#C'wŒÇ`:‡X š‰×žQ y‹RR˜mÅñAÙiýž±†”þhû·´¡Ž5þLVKh^šäp©?Qb"ö%R­–µjÙhÂµç™t½½_­N”fyŒÎg«®*U«fSM³Î¶‹ÔTÉ³•×ßyx´½yÆ•6ØêßŒk¬m«´TÄ\ˆ›Êç³Jî¬‘ÑZ];ÌXÁ5 J ñÓBØÉíÕ`W¦ªª"¬0ÒH‡ŒR« ž%þ(Ä‰Ð¼éÇ`Ûb¬¶eK%‘	ø“¿ ó¨·éŸú:3Ö¼t‘ü3“­“ëm"í×Ö^sY‚5$ÿÒá	—_}éÕ³\fò~Ëää=ÁÚ×«™m™ÿ-_í…Õëô¯}Rt×È¬uþ¤ôÿÖCcdÎ›p4yÚTš$«½³I¥ÝâkxãîŠH]­§BTœø™+â5«­)Vä¬©IŸÞ¹=»”§]m2’g5CÎ>-hü™zQŽ¨k¶™M‘yìJ$ÓÂ3º±ÙÎú‹½m¼ÁAg|5šÖÚöA}¼çÑZÚçñÕ’kW_|ñãgòEŽ=|xìØðÃ‡š4]-7•ï÷ûÏÜ;b±ˆ`­±ÉæÀ,Éà¥}ÚðÜ,¸HòDÖgÛÖW…jyM°šÄ6ªïŸj²
.R´Õô!9Z›w¸¦¥È­\YVYe•õcê'¥RÈb%¤>XÍnO3ü‘L½ËØé :„¢Æ%þø(™£7-Ý’”kõÙ;ßŸ6ïtÍÏ?°ÍK@!(
ªxSTC„¼ÑÚ²åÐˆ¨Œ’A”qJ`òb”=vTUiJŠ’IÊiíª'Û(ñH†¤jL'B¤¤DLFn†LzŠ&.Rd•³ä(ÛEªvWÚÏuýÔ­ª•öÝé_ØÏ/›à@bžÏsÝ÷u§Ô©vL)hsðîãÇ»Æu!3 “Dëîu¶@4h-î'2¥E)ÜÛÚO†BmÛOJšr(¹|±˜ÏŠËËÅ|ÁÁšÆc3Û‹„üý'MÃ‚5Ñšl5bû©Ã9n°6>ñþ1\°„˜"“¡lJë§¸ñÖ­”:©ÆÁMYiU5¾±c0@–`¼µ"ûƒGÕÝ‚ö:Ùãx¨ºv 7!ûŒüÇ*S°}€þ5Ò!"¨»F@·Ny¯îÙó·£‰Ñìray
øk+[ß}÷ti.4òpWÍ¦ãØ5R5‰ k7nßÀâ\(¬­)Õßh¿²E“GlgÎŸ¡Œé
Ð†^{í£×0Ú€6$“âHä®§s!^3á¯©ü&¡UbáÃõMpÍÁšA Ÿ{a­	Ö.:gÍÁ«SÃüìß ¦È¡iÿÖ$þ1iMþ5ü3%ÐÔ5pr¡ùQãrÛ¸§éÐÁ‹
ŠTù£-<%Çà6nÀz ØHô²ÁìšÁ¦ilÑ˜`-Rê@2ó U×8äF­•Ü51œ'Êf•«ÅñÖ¢ „À)ÁŒ¶~à£¡*Øû Ššˆ]¦9UÙNÐ¯ÙŒµöN– °V$Ù³cGÚßI–!ãÖDj°f›ì4¯ÔQHÆ#»	y¾ƒõ‘Žç¼™œé¦•ÍR“èãˆd¡"ZPëhG„`€œûÌ²¿VÞâî6<XÃs5Í<²‘†90cÝX‰Éì€3á8 jÓgÂtjZƒö4[’r7-2¹7GÑ#ÍkÎd3
Vƒl,³ß¥–8ñ•½/íúÁÊ†–HÊÃ"Ê'‰ÕÎÍÉª²€~€ì%æª©oh³x~|,Å‡Ôë©.=ßºÙdxýp¬	ðèvÓ”5zÖ¨¨TÌˆçÝÙBb]–ÙŒÿOÍ©e¯ÇPyån¤}œ6cµ ~Z×QRßZ…øw‡3ÃÉ(õPY}U€RÇQeø'Ó´žúˆ	¡ ^[Ä‰Ö*—6àÓ í	µ‘2]Ú¥m¸ÒÀ}ÀÚË÷ÛOÚ¼?;½þá¡·Îxþ-©ÜÒ)øB2[jX›Þ¼òú•}‡["¹å"ïJù‘±‘ío}@¶§Ælä_Õ°ì+ßÛkÈj±ííÆÂ‰É´õ·wdÉËö‰9•:Ú¼½ò#·,'Ê@ÍÔÅ?º¿¾×¨h¹ó\µu7{íömlµëã½Vk[ÅRËM.,°l!RÄ¯fë´¬É™k)“a¬€71ÝadVœkb³ßyLS8«µõ5e(' ˜ EãG#&ß9ÑÐì`ÍMY»|èKÍ÷Š4AgÒˆömÑ™“Ã6m˜"~·á÷ypÖXçu•ª¹±Á¦ô…ª ÑÖlãêÌ…•ÍUžeâ™ž†‡ÐŒ)çE@ª_ÍùjË7-°Z3\{(V«øjUTQEÿñ¡¿”«æ)/=ü!®É[Ct®-a®ÑŠ¬wùÏUÖdUcÃ©óS¬Ó°¥Ó-~¬(HŸ¾uì}IJW<ÎVJçÙÝòÙná v†!!™" ˜Fl™þ°ú×ÂQ…ÿÅbý½Aj$ûºÀÎSµâ!!âb~>¸\˜›/š¹ÆÙÉJ|ómÖøei¬vŠ¬úÖçÐqk Ó¯Ÿ»×L0"3”1¸¿=˜`pw2•è#Æ?Î¬YÚï4.S÷YgÔGè¬µ¿³üÇöª ™ :‰r¢¥RHåû»ƒ¸,8mÉpƒØöãÅMMõïù#ÙÝ#Å•Â\uU"4¿°½µBÚrsuðñÊwkùâÖ7ß;b¡#:Ùà1´Ó••ëk\Ï^»!QéLE‡lº(îÐæ”Iço*†û#¢ÞBFrö$	×\7C6¿Tg°¶Y³æ&®yáÜ‡ìÜë_õ‰Wí%KRé`íTKK%x«:‰p°§§ccMñ#
¢IkÐšï°ÎZ2t¯Icé¦FÒEêbƒêVSÙ?¨Ék1¹g‰X"Ü¥XbjL€`þšÆgG©‘ŒÑ×Æ&
„0fÃra£b²Fç«¡’fìæ0NÛ¬uÌ±^›,^ÊÑ0lRj—mïHn§æDÔÍÉ<ÅJÓÒ Õb VÕÛVgOOç@GG{m«8Š ¢ kë-¿[†Ùß9$Xk•³Æ3Hi5XSwš­GÕ8rGè¹êéál¾§k8gÖ¦†`:yqdÂM‡xB‰ÕÊdö×þfØßÙêÇ°F¤ž¼ Ûc¬V’¨­	Ö\"è+ie.šË¤7V+5©½" MÀ¦ÃFsÐí­a>ûê«'Ø˜Ä@ËÎk“ü‘'r`·AO.;U2õôõÍ²CìÉÇ2£ÊÃ6¢"UóHudýÝæZ [Lmj–¼¹æ0‘K¬4îËl&5HF™$ÕYI"‡T÷’ÂÞxé¥»ÍÌHc)@+Ç?:XûÿT³ÒN„‘úT[Jnâ›¨Ñ‚ ƒÑ0Ì“iBpqË‚`›`-“$´2šIGk¢Œ´h†î³Œß”eõ!Í[‹ú‡5ƒžµ‘«xÔá	‰Ú= _L§k4JkÂÏnÚ$_äì»ožY?Ï[€Ó;†j¿~Ç’/x–$Ø9oåo>ÿ—O7ÎL.<]ËÏg…ñ/ZãÒj¸F Ò:µè¥´>ÿÌ›gÊ¼vò¤xÍ"GšêZÎ™Å6m‰Ù˜/hóâ"e¶±Txˆ'v£IŽÓ`Ô’;NÀÕ'Í°†;rríÅS*ªYõøÚÚ;nß`öúµbq¶F­K“¹ÙÙK«¹´DcŠ°R’ˆÉ%õ§œËf°Æšý¤N{<ÌN¿æ|L*i>uª­ùâ)]ŸÊDûü%ù†yƒmãÓ<Xc"¶Ðù
ïÒŒÃ6Z»2¡›6žô`M:\¦6ÔÒÂ¦ÖV)>ÓÝò Kíklª¬QWd©(
r•·µ­o8XkÓ]š±ëiÙC^ääÌ÷yýÜrÅÜl5!š€ÍôËŠ¯VQEUô3ò«2©Ù‚þµÔB.‰Ö~ã¿:£`HkÑ‘Ì8‰i†Bjˆø[âÊI1ÞXKú3˜kƒ)Ô…µv¬+Þ¶uíê
c­ÅpFXi"r×XÒ_
ËGÃac,¶â iTë/ÃZ°W1#óKeÒO7Ÿ_Z˜HFçÄ´8åµ’·Ö§ßèð˜]È½õ>­=Ç	 ¦NÍ§ÞØLõWUÅŽKÅ9§­.>–ÄÅAI!á`o{oo{m;õŒû®D»&$w·âª•T]Ãùf[÷@­]cÜšÆ®1[¾š`LëÜßÝ¬®R
ªáÈ'òk…ÒIªçšgóù¥¥Â2x‘_ÁaË.9!úŽŠHšÅµíBáúÂü×n¬‘Çv]¢Ìg±,&ÎÙÅmg³Qç„ÎXÊ?²“'ylåëÝŽØŒ×ˆ.‹DbŽffJïÔ>þðÿà­µ¬·C_þÏ€µås°ä°âÒ\ÂcHR\j©ñFÒCÎgÞ;Õ†œ¬AkMmÜ´LcF3&ä£¹“åöÁIáVKcC @+¯óÍmL€ƒÝ4W¿5Ž%°Z5SHa1þå„8âÑ¡‰”¬³C}}3Ù™¡†¡Rf?k‹ÍÚíS8Vèv,X$mÉ„ljÄ w‚M>3gW ‡öâ€ƒ*T3m jãHgÂ¦îµ·Cd;ê;öÆÑžêß^Ûi¡$TFâÑÉi>DÔ-ÄmíÓDRRlFZêèØa¥r¢7·;Ò³ö@uL\#ÁjN`|ˆûtGêC3ÎC¬¸éñ{l\+xå¿¼ð·¿Áj°iÄ€äÍ¸ÄOfe•{·T©\X$Ú¦íHÚÚK¿Ÿþ¾äòOf§¦´E@ÿa\ëA' ¸½îOÛØàSÅyÎ {Uàg<(›‹¥’`ÀšèÉ`OÚU¿—if/›ÕS)L“s%÷&ÒaW~¨äGdÈ¦’G˜ÉŽ9|ÚÍƒðõÜ˜ã¦Û®rüäOX]o!•þPsÖ$/2¸ÃMÞËY#RÞñxÌ~‘Yýi²C2¡à$úñÔ°ÙBiÊéÚ|Q°>ÃI#2Ác#¯¿¶Š-_’fµ˜þ÷X#Õ©t2`Q§ø@È†LDÝÁôæ‡›Óëg?ú´ök÷!½C$°¶yíü—ÀºvþÝiª©ùÜ—²J-—’Fž=áí‰`x¦úom«v[Ã¦ÑõòÈó8RzÏQß¬«ˆ|ã“¶«f±ÙÔOÇ
4b“1ü‘]O–bä0MÁÆiU§ˆtLA¾ ìª	Ö¸’¥ù×ÀÚÊÊƒwn,(—¿^$R$â›™…KVûf¦_Z-0×aÔgP–ŽDâËna&ãÞ¢2HÇnÔo»6…ŒDHû‡Õ"iF“ó#£´ -÷m¼‰dJk‘LK]‹~t|'&§Œ5Ð™×y†7hæa/\š½|y¦q5GK äÅwaç‘	ØJâ€m—G­€i‡¥ÛjñŽ7Íž®ß¿_¸/t»á¯™æ`;­ºÕŒc5´Šf~<WÍiA!Ò²œµ|…Õ*ª¨¢Š~6ó±óº{JkP‘7uMïîRÎ9k¹Ü×Ÿs
ÜfýÎªÿ`óD*N¦ skÌçË€f©d .€<~|ŒXdæb§pÖ µT(É¹†ZÖ59ž‰w"vSš?)ÿš«ÕÝj¤{ýÁPv$8õxyn²X\zhÖš®ìr©R†‘$ØCkç®þGkï™(¸9þ/Jyãgp0–êêgÔW¼FpQU¥:½x´&~XKÑ
H§)ñäWv†¢2b-H¦Ä{TüØßÅ>ùª„kwæšúá7ü7õªlÚScÓ€x­“ct8%°Ýú{ú¡µ£óËKÁNðca†¯áµâ6Ýjù©W?ÝZ!„äñÓïH`¾s}{ûöƒÂÞ¥ë¸nºÆù‘Ê{H9ûxss±Èäl`U²“¥MsÙàV$›ÍtÆÂÚÞTä›+Št[)(²Í®ßFXb®-l.¸®5Z3X;ã`77B)ë:~¬×ÁÚ{·ã©ô{§ÒþñSÃm¦aå?NÐÏFËÍáÆº’-¢ùÆÆôXŒGigó1X(ŠMVÇ¿ûi¨6fë.¡w©;—Õ¢g¢YÔÌ4 -äþyk1f¨' »TnU}h ØLÃÎóÍ² ×¾ñš-ôá,·OJÀ–«¥øˆfIˆ<a¹ýv,+ôã´X‹&(j¥;AfJð¯RÔˆ€]#ô:;”5Øƒµ²ÝAK´F/[§u±VSSs{§D˜Y­e3šs&×HÛªqÓ!Ì5!GO©R÷ýûyÐºÛŽ@{¹Gðf‚¾ì‰—éøQ³©›[ü·Rác™ÕôD}q±êö¶QÝ§ÌÛ²XC:`ÙŒnË³Ö<@Ó–žŠÝøLY8'ü%ý‘‹}ÌOÙøñ©‘yòú›õçoðLsÔÜ,nùrSnŒ›@±,ŽàuhÖÄDˆ^Õ]ÚÒ,t‘Ü¦èáÎš™iµô­©‘ç¶YÍ£ñ›kv·¨F@¨~÷5‚mcó¶=RCnéíiË-¤Ÿ‚Ú[Ü5@°š Í&¿Õka%‹hö„(-§Ø1Üž¤ë÷œæØ+_$ìÏøÓ8ÂÁš_uŠî‚qþj¶ª@„’È*XÛÚ†qŒ+-(c°†¯f¬¬MkÓHù"Ó*–~ë×5Ä
‰wÐù‹ç¿„Ô¨(?»~MõäÖýûÉ_f}³ÅÂøÈòW_m«ríéöÖµígßBkìÞV,þb)EÖÑ(ÂÔW÷¬½ßx%‘WÝ")c‘´Jâ=U–Í‚DÐâjÇ3´¨I.ß^º:Õ¬²úMw¹)TƒÕ®ÜoÓj·õàÁƒëÑÚõ¢æNç&gs¹ÕUæ£kMª”úDb‘T°“"7ØK´iÄs3XkŠØ9Ì;%µ#îS}ã>õe«úÞÖàš‹iõÿkü|u>ž÷‰eAUùú½·ß¤ØA“2ïŸ?W¾±†™û“øjÎJÐA3d{’–¥m˜ÍöJ»¥Û¥VÁl6nÖfÔ½vaÕ ­Ñ'3Mwqš>fr{sC6ÛÓ¬•@z)è$VûT«°ZEUTÑÏª)Òc¶‡¥ ¤àÚ$´öº‘ÑŒhÍ:Øþð‡6ëcóÛ	?®G*]ªrÐ"‘ñ´ŸóëÑÔx²‹ºB|­¤¦²ÅqPŽuÑ¸´Çæ¦¤BqNÛcl‘:¢bÈ®înúÕ0ÙÂ¡¬±§î¥@¸:0ÿøÀäâu®ûBkë:QðÆ­½õÖ=N3ö}`ÞZÜ‹„|€‘R£:_~ì._w÷¥¢ñxu5åxê`óûÆ•5>®r2DãB¤†¹ÝYeJìÇ^Kôòwh‚oxl2]x„[0ÔªS):•O$¬dÎ™kûY¶ó`k7õR!Ùš¥B²`€c¶W
Ù¥"ö­âãGy­=ÌF÷æiÙ^Ù¢§m«8ßœ¿]ÌóÀºr¨W 6ý‹ÅÜøëS©`ÌMëg‘ÀÍMWR¨#×ºU)^3i„öi=íû„pM?»™…ÍMî.y}(Ðš,¹Ó§a;L4Î/S1|R`í=†ŽS`:'¦%¡žÓšÙé\#E„+ÄÃ™¶}*ŒÄa‹5è´„ËÜâ'ÂFÈŒë
ƒkQµ¬qÁâÑ8Œ´ÑÉF$LŽZ$>Z@?8˜ tÄ&°ÅÂð[œö5ÌVøÚºÖ†êh¤ªÛiqg
êwêÓ‡è¬l­°h#GÍ¯Àþ² 543„²£ý
z [jG]ÎÍÅãj§_µƒfüHv²ûBÆeÓç&L'c¤ªynnD½aý¢¢VÕ'*;„¥BE¸Cc&eìsäˆƒµR¡dkëŽB`¢µ]V!Éª…D
w‘@iOÄéÏ/3—aM{î8ÝoŽlà§kTNš·&ÁiŠð@8\Æ^ ˜U#º¬|#4VÈá‚ìœ¦::¦rŒ½R1¥ª ±Ö.a®¡ÉÉ,ÊDgTD
ÖLß'@
ÿd§é>ú½¡Å‚1eÎ›•@: j®jÞKbÿdVJXÔÚ`ÞuÁ"8nì‹Ú\^~-­jJÔ3J ¥-C8BûÅkls„ÙnP€TÆ2­~º[Þ¦²Y/p‡(°”Õo¶^;åŽ¡v6êƒí¤ö×†Ã [˜÷h­=}5SßžÉà£aÕæè×cQ¹6¤‹“)Â¦–~Äxl  VÃîM1ã>¦AõŒ=ÔÔúa2W5 úäË²rTmw[M¶¸Èæ~÷šÌ.xt¬Ýûˆá÷Xk76¡µkÒâµéËšƒò2o£¿ÿËL£ov2VøêQžñL]££vûÑ£gOžŠÝVX‰‡tÑ¼¯·÷6×7ëŠ°yÏj}Ð¦ùq˜20v}ZëÒ,H>Øæ0è‰2-â4lýò oÆ_3É›¨~ÞžT î¡ÚÇø|Ÿ}¦û´o	ÖngW•Ii`ËÌì,ˆfádÊ7³‹GÐZ-‚5lµH´O*â×Û¿¬´¸¿ñ°šÜÌ…ƒ‰úFpš¯©¯í¢ƒ5"G|„l¡4¸–Ñüêð¾Nk'IqÑµ²C—Ñ™+³TûpAÏfÏ¯¶îˆ!Þ!c1;JJCÒìy¶áV’U8úlŸ^¶›7gfHOY-Ü_5>k¨ñÏ3X—
Ä=[Íu«ýõ¯¥X‘›_Ö¸©Ò”WäÃ_þ¢¢Š*ª¨¢ŸI)¤5Y’ÿ²k,-eÄ9kšœü«Ë±“anÃ9¸—"kl ¬-¡qÇªtKY=	¿Ä"À¾H$MòH˜Sã€<¦ @~öŠÈº µÄÎº@W¿ËÄB‹îôÇÁ¶.—ª1…‚‰DX£{-<?¨­­6r®	`íš	yï·/¾x’Ñ`”í%Ö £5×®ŽÇöÜ­VkŸ$Ù+ àúiøÔƒ'Ž9ÒL8‚ßÒ(®¼ØOÏZ×Ds¥ 1@ü„
é”°·ÖÎ*k\ÃŽë”é¢éÉÁj&ÇñÑßÙÍþ¤n¢ÝÚýoÏž³‰K–µ¶ýgì²•µÇ$o.‹—°×þñÍ7Ûó#ùÛ…ÉÂz¾°¶E?ÆmjŠ……"+›÷ŠÑ¦«Êh	´ÖÁ5ëgÛTq“Ê"¡®/=^»GàˆìµÓD|ÿýÚ/|D2ÎRB³ðé‚J!|ËŸÁç¬}éM[ûõß­ˆ‰ï³“”Ü26xë¹çn±óþû§ÈþÌ:ær¢µhjb%ŸMõ¦©x ¢
É‹m~ø)õxŒÁ|Ñµ¬	ÃÔ´6–¤—¾vãM‹q54jÞZ(Ö;hqþ];mTvˆ`½m8·„DíRôŒˆ­ÎÚÓŒËÊñ}ªkTÖ›ç¬eÍW' µI¼¾µ”žM4äQ`Ä†Ì´êìN„ƒÌÝÃ8%c°ÓkG}§…4â Z!$`ÎÌ½Zà.¬Ÿ;p·þî«RëyY.¡¿kZî÷†]®XöÖô ›jOÖXì‡É’ià¥dìeL‡X c">g¡éîÉ5¶éYŽè^­=Ø±q`”×ã•B²â¯©Hc‘šëZ¼¹l}ç¡yöîYt%¦¹{¤gŠ4~=X£ RÎšEŠ$®ÒÊæ‚HN5RjxÓº mˆÇ´'•ùÈSÏïæ`vïj¶ÚsU°ÚžÇ(ƒ×„bõ%fÛ¥H…tr„¥c¿™vX¯š8ahÇS-îŸ2È—øêÏÓ½¶ñÒÆ©È,ƒ;?¶ÏÊ»â:žé§­¹ÏKk†m #ñLäÞQäë«rü¦Dš‡×‡#$õ@0T
ú¢*Ž¼ûI 	glE£,3Ñ Ýšª_ð+²66ÖÕ51–«kà‚â~>8‰afÆš…nlšíôîúâ4Ã°¹LsïPÍ Ç*f}¼uZ[¼ñ®žlùE×Ô¶æ…5Q•Ç)þòòÈàH¡øðáõ§Û€Ð³þ·Gß>ùv[³²‘/Zss/Ïê‹Iàš<}ôÀ&d{ùE«Š<½ï“OÞÀf³ÀÄa@²i1.+Ë,Å:èðUÃ4Þ®^|¾”Œ}¬ú‘×Ì;	4«)TdÍ…õ£o¶ˆÒ½¶°Ú7s‰ðâœñÐ—ú|Ì1XŒ–4ü²$•À´†Ò”Ùh³¯Ó›ŠíÛüñ–b;`•fjïk»xÑ*é-ÛEå6K†ÞÒpøðVz²D‡ÁÎô¬]šå5k3—¦Ï¯zUŽ„|¦J¸Kr\iáÑ2Ú’JË6äå÷³Õ¸º0Ó8{ó´;‚HMCC^7/ˆÆ‡c55K€¼ù²H§RÄÈ¯þÓ/*ª¨¢Š*ú9•B
Óºæ5nRyFv)R÷yÖ²8løúk¯-£€ÊAZÕ&ì÷—25&€¢’ñ[ñqv±~Z,N™~¢¿û$ß/NÄDM¥³'‚|ô‡w*¥0J‘$QiBhÜAÑ°6ºTÈÖ?»1;Y´¾èÑš.
¿øòIÕíK‡Â6A®w ±y°Ÿ—É€îñŒ¸ÒOÙc$Ê™SZKSÏ©}WÛˆ.Œ%}3"-Ðk£²Û‰«„úµ= 
>‡Íä«ÉiÖØÖŽ¹hš±fÅ1XiýÜÁ¼îþšj¢þ{å»½º´íïyüðñã"§Ì][ù®¸¼@áiv4[\yŠŽ,±±Lõi~e«X(^'Ó¿O³±²vC­lO‹ëÉö1Rru¡°nß„´©¼nä,¶r^:½AEºÌ¬©rr[TC¤rO_Sž·›ýÎ¯Õ·ÆwÔhmœ2%9kcøj¬Mœ‚Í[iÀ¦––9¢æV§ØŽ§ø¦ƒóñºF_ac”;R*KûãüÈÉäQ…Ý1Ò«
É/MvÕðŽŠäS¤CF‡¨‘œA~¿–ÖTü¹iNKË1³±ØûT—(«ŠIvÈ«‹<Õe•?ÝëÙÛ0Õ
Pw¬¥;M¬¦ÊÎ^ê\iZÓÜkµ¬uš³VšÝãrFdÅU‹GøA‰¡ZÖZGG·†¬ÆÑeôc‹yÉý8l²Évu¿zŽ¼òŸ;ëÎZ£N¨åZÙjŽÖÊ¥ÒR"9fˆdŸaÁ"ÆHÀ”Všg­åÑž£G½ÌzŒ/zÄ„¼ì~;àH›l7w˜º?>{èS=WÆà5t	QIÙãü«ûùZ®1Í`m¤³)Ú¥–8àH›P›Ã5ƒtŸÚ;õÒKÖÇft`nosUí†âOvk"KèWÛšxÍzÑ„i0+Ž²ºu0OÄdÓtl fqÿ$‹hÖÚ.
"c ×t÷ùÊj?¦6=ò£g–ª ‰;±âK§]Aši[‡Äv:XÃæÁlgà)"mW3_ša’oF™ˆæ_×hÔ>ÖIñí¨ŠV…TÿŠ’)?_X“dèø `ƒÕËÈ+Û|÷Ãõk‹ÞŸyñäkdŒHŽÖN2EßÆ±Ú\ßÔ»àC$TQŽÖ¥q÷}]{ûüñ£GÅm®)}óäß={ößÿ}›NZeûØ½o¨ÎY%6—ˆÜ[ŽrŽàBAÂŠ¯oúÀ°ÍÉÅÔjáÔ×ÇTžÂsO"½Ø{ïxàsH²Ê;ùR‹‹6WíúíÏ” )L£~üÎÖƒÅ…Yªûû|2Õ7­^¢aÍŸŽ4údœÑ¯æKãñ^€ZŸ:×ûÀkIZ|¿_¹ý ¿4qþ[Ö<Q¦t‘Ø,J9U²Q&rñ¢ÿâßÏQ„ÐèeAÞ³×|è¦MËy¼áæLãÐýó«Cð˜¤ð˜n&šdªx‘fÛlx[¶©»kLódªi ÛßEè¤§ñF¬&…!äFLæ`4,‚­&T3Zû‚Ä~d“°ù¸`ÀV‰¬¨¢Š*ú–BæùÐŠ[)Æß´°,}¡lß?M.™lB6Ó×¾Ö¬w-›Ïå°Ùü)%?êj#§åIâŠD(ÚÉø ·…ŽqÂHxVwW»¬·Zë¦´1©Á£¬)&­·8KuÅ(~ë'@B³³Cb¹ y±.`©¦yiyrviaýãÅüµV·wvq³LkÊªÿà«çøò§8•1XÓŒ5Ó±ãïÿï[ƒ¼ÌpUµFäZHàZšXŒ$já†ŸÂÆxFÀ‘NÆUaýîŽø“	 ,‹ÁNéì›ˆ›Õº"HJäÔ­VM˜È ýi­˜grÛZYjÑk´FfJuP5Üñjªý$Ž<	Ï?Ü^yòx{e-Ÿãm^z˜ß../=~œåà?n,MR	ycíöíàÚüãüõ;·×Éfûn­øôöÛílOË“Ë‹ŽÚ>tIm?¸Ú}åÍ2®Q™déÚm-€Z†þ×ÇŸ	Ö”2rvzšï¨ÍÆVi©¼5*!-ÓMv¥ÍÆv |k3™ñS™¶Ì{T1zH¾Zãb3:¡aLÐ©ñT—üÖqîêRL¡qÐlÜG³ðFÛ—jhèÂk÷"Â¿œVÖº@‚‚Hd«5+ƒ·©»M‡Š'É…¢u2Ï’¤ /­_Nš§ù³i–üÃMsØÍÀ–+<422Dù¤œ¶ÀZvhoöÄ¨Â?G»‚Õú™Öã¢u"~XÆÚ¬%µ¥ì¬g.vÇþn M‚Æ 7Å>2-LÝ_/àv—rÃºGïâ,uBc—|³#â31›dKö{v?¯Ñ[ç®ƒÝVðØC&°ùe²àœáÆÒqšØ}È¬ÜœVòÚ´áÁÓ´Õ¢&Dc´Úel¹‰ÖS°™Ö¯ÜõÒ3š]ab9Oã@ÖØÂHÛmE‹ÚEwì>Òy´V# ªƒwHÇ¬–‚Ì¤4¢œ!ÎF§^‡«7ôQ³¼ãµ­ÑL6·[]e¢ ¿»«j‡jî*ÈŸŠ;µ­¡]b3ô«lzf½ùlÏÃplkæšým_¬¦à~¤¯0·Q¯PƒµŒ6/
’»TF2žRF3É–C¶¥‡Òm/åîZV&#/µ=Ü¾{G8hÖ†n4>O”$À?Jc[²ª*2Vm˜öPÌý(o,B¼ýÂµ!¶’ñúZBvjÃ˜Ôü·BêîÊ kÎŠIÄ-ƒÕÖ\+ë¦]ËZÝwò3_ZÓšÃ5b:H¿ áÐ™M<x´¹¸yÖ½–i­oö‹ÉHrþOÙ1º|·iª}òèÉÖöW_=ýÇÖŠø[àˆÃ5¥CJ®0}ºäéºü:z»ttcß› IÑæi!wdt†H{Ô8éÓB4ôò;`¢N &ìùä‡*÷ÆÇŸÉT»#=° ûµ"ï’…ÕáÕÙÕ*W„5&š¯%M*mù["-é´&Tk‚åÔœv³ÍâE„hiŠ%M*ƒ¤ m;DÞ¦}*.ô`È%¾÷ÀïŒMŠû±±	é“³ö²%V~yÈ&ÁÑ|™Åýûï¾{¿¡ñÒ•K—fL(‘6êÄX’£6Ý}Z(JÄ€4p„q¬i[Xfðæ>ÑàÎ˜N)ÍuôßJCH°æXíæM3Ö–ù0cíÂc´Üø¨ŒW«¨¢Š*úyškyŒ5ÏYcá¥øcó˜µf÷%Ä”ì¬»¬ 3×>ÿ<7œIÁ<‚5âµ˜ŽœIÅ`µp’ÃÑˆd†¥'è_ë§üMÆ	ê5PS\¸kYõcØf¬Õ„´3UÛÎÌc¡æÉ‡Å¥êå),ÚÀhç­M{´ÆEÜ“¿ß÷ÆÕa?ÍÞlŸÒ Ÿcý8kïOg8÷ÄDšê"„.¤3ÐÑ ‚@(#&;"HÓn\ß®!d›¿Ouu­
"Ûc)2écÊ‘pÊÄjì#|¶ÞÖÎ J$8JÝcw'R§%‰ÖþV6ƒÕ$†O<Û^Û^š«nÎ?Í/-“æ;š,>Í
ó½£#óë)®m­pyk‹ùkw—¦–o?¸^d¨6£jo³ ˜Mí#¹É‚eFn^[·ÙlÓ÷ÏÊb³núñÊ!¿ó÷ÁjÄBÍn®¯«Ù7”v|‚¬µ·¡µ“/žÖ 5. Ck6míT†¶5SÆOõâ¶9«ñn­™©–¡²±Iiý‚5V°Y²Ki¸­Q#Šö§}°¡.Ex?îk,À%e£ê1ë5*Ó-¢—ç²qc¬³ÔmšÕtñ˜4s?‰ÀÅdª¥En®-Í³•ü5K1åL©Oeå¬¦Rý´ª…«œT)\§	»%Á7gÿô­)RŸ»6zØ`ÑÓƒ“P“ÖQ²ž=Ä„ôSfxà¨‚øUÛx¤~¨Œ=áÜ†à)ÂûpD•wuìqêÑ‚§\z–IdWÂ0ÍpÚØ\»Œ§Þä­Ágí•ßü†=QÚ”˜mcN½iŒ€§<qÓ¯=`œl_‚Õ\© ¼w´KêŸ:ö~*V›?`jYj"/}šmfGi%£î«(¦È>Ÿ•búEˆðœP;%z{þ®k˜Û¨U $°¦ŠB*™Œ|AA/í«È¯}Ygæl)(_îZ-È‰àT1iµ‰”<rGZ¹66zÖxijÍ³¯=µËƒµ2‘Iæîyäæ­<VãÓ]Àˆý´Õ±rr.ÛŽöÝ»Û“a^B•ß¯i^dŒ<Rõ'	„†µ!¶ëw„xW ©î1"·?àòO«'‰ü•øWæÿ%ç§&b)j @¤å$¾ýÚ!ƒµi.ÓPé†QN_–±…ÀP%¾ao¿~…½3›‹äÊãÂQ
ùcZû}ß×þTXáÿé£g…íµµ¯N|»Vü3+OóO„kkVÉâc“ãµM7UÄ…Ó^–¨_D÷~´‰¾˜ ù"òÈÍ^+¼7¶uÁH»Ç_Ç@î*"“¼òGt]ç+KwjXk·ù‹Ü_Y^žÁHóåÀ+XHÈÈáF9"Y`ÛáÆqg­¦’mæ©1[	ÀZŒæÔÈÏ*•¢ioÄüÚÔž+¥#Œ.±Éü*9ˆ¨˜µ­	V£r“ïð[o¿ýæ—gÞ|ûß‡w/\>öþý³gµÕékWfWgÊc°¡µPÒg†{5‚â¸­ÅO“ŒÂŒÏL¶aZ‚Íó½ôÈ: .—‹ä¾£›t%KKÊqS°-VäwGk,¥ü¯~QQEUTÑÏÎ\ûÕÃ‡¸júøÖøXÈ[Ìz¬±\B‚5î«9XM¸öyXû:—#TO¨–!¯O$mS·¢©®ðÎ$	[*‘Ô(ã0Ã²	ôïÓ@±„¢"j„jÝÝ6\‹pþSÍNÎQB¸lNŽNé€sáù‘ÑÇkË5 Máãu+Û¬y´ö±Ñ\ mkÖH~&ú–ÇkƒÝÇ5Åg,M‹®’R–9.Åc/Bd7ë§¾‘0`¿Çøðp›ºü©@Šg|Ñ*$XQÆgT\ThÖlíî ‹Äœ5Äô“©„†k·‚k =8 VÃt#Îš}”/ä—ççªkšá„ðÈ¹ÞY¾ÉùíííÂHÿ‰gO¹vÍ•cÛõ;[[+”ùÜ^Žl=ÍçoÀn8mèFaó¥b4¸µÍ¾1Ÿ}¶¾@nÈ‡›ª:ÿÌ÷ÙÚŠ†äìVãW<‰t³……këÀšhmâ¢uÎ)¬mÍÁ"Ý€µ¿—gcc—jD¬æ;ÅÒ&#MŒû`µ6Xn¾Åmja»˜ŽOŒÛ¶4ýk”íÈà™B¹¸Àmll¼‰S¤ì2²:1Øœ®¤»âQËUw¶€Öø<‰åH<>’­«­E¢¡×€æJ!%hm(‡²*„´Ü9¢•ÝG²‚·¬Eøk2v–Õ‰®~´šÀÐLœfR»£õµU‰ˆÕl­Ö¶æ`mG{g¿Ê;w¼ m‘I¨Lb¿ê…hœ»wôX,¿$Œî´WŽ9¢ê¹þÝìïÿ9Ns}Þoø'q™ÐïðÍçgßèÏñ¬6ÂöôÊ)‡T5"ò¦qÀc1V‚$­K™¦2¢®SÞpì\±Q9•zcP$…9»÷¸K¡P²Ùê 7¡=^jŒ“Õ×,Þq¯€zBâ?°Ô6ˆ ±—D`ÿÆœ
 ï*jQgõJÙ¡MkgB0íèI¢7ž·CO/9\»‘Çj<db=7dd(9óì'I#?•{¨æmòzKÎ/ÇˆR*íêR«¯Oª{ŠNÙtœüGÊµ£¤-…ÂÃÃUaK± ÿh†·Q¿d×S]@Z?
 kU2øÍÔK|k™‹ô½qXS¸ˆbâ]• ÈähíÂ•ó¯‰‰\"‘¹G¿ûèÐ[à¿y™'O#=µDkå˜‘O@œÉ…ålö«‘‰¯Fžm{âø£'Ož|³ÂûÒ“íoŸhZ6Æþ¶eŽ ó×¸‹]¤it?IG ×eÒŽÜ[Š2UÜh‚ÌD¬q×ãoAi®ôQ&ÝyÉ¥?–HMQý
búFoŠ‚5!Ûk7W/|1¹4›ƒÊZüé4iŽ} ßuŒ*•2¶°„Ö¤B"ãiðFyýü²™™´ò[%€Ï™s`-9>Ü§zH¶5Ê$¢9“æ­ñ¾x.ƒ+êkºªàJØS°öÛ¿¼~{l}“×.zå›rÁóŠrü]_š£µ(˜Ñ:|6ví0¤èUA6RëhTfTW§ƒÚµÕ°³¶êsÐªÁd#2gouÃ6{F¡"¤@z¬†\¤åô_P§šS¾-RQEUô3Íqnš—à¯]Þ¼Yx­knòšfd“€±T*¨øœ©J`ÛçŸÏä¾F²ÕFÒþ½>,¤l‰tEícD‹…‚4%oýóñcÇo‘-¸„v¢š0µnÜ‚œŽ9Èô5B²L$‚«…ý½<&g­¦ztéñrþérÍìb±°)Ig¨Lk†kWÏYÎØðž×·vü‹1mJ‡H{|0C½PFbéˆOÝ¾ÌxPHìDƒ©‰Œ¢ØÒìØHžGkí!ÕFÆƒ‰x¢G4‘ `	E‚V©²HžœP°÷@¢·;”¹&VÃ`«ª'4˜ªy~i¾š™mBÕ '»xlÍ¹‡OWŠ#­ÿ—½óýióNÓý_p´¯…"”hÄ› 1…dË–Ã ¢²`ŒLÄá˜PÜ¼XeÇDÕ(iHÐä4M[;J«‰V
Pº£©Ó)Ä™”ÊéáIÂž¢©‡UdÅS²"JÓP©St>×ýµK£i÷õTò…ýü4¦@†y>Ïuß×Ý3šß¢­@d~6· ú‹…ÜøXnñiÿKú3ÈáBe±0ÿù£µÅyjÏÓ¿QÜØX»óaq£«Í®p³{ce…Û»H¸vâ-.¸;Ú.Ç¬¹®¡®ñzæÊ­oð¡¬!°ãâêk»)·FW‰ÍçÉ,¤	0¦¶À³g&<gÎL¤Žº ‘¦	ËÀŽN(â-©ÿ	 —YÙN'É™ Ó‚×†#–J3¡¢oD£±éWãzD
pÚØÇN
kœìËÆÚã¬qÁ	Jq‡éÌ˜iœi¬éÂd{.6‘”ùËÃ;YŸÚñÑafÓñšÞH[#cý]°´‘šüFÕmØ¡‰kDŠˆÜZæª&JÃÿê¤2²ì¬í Ôm°UA cà[Ïá=m;ºxQipÝjõõƒìT•²üÕ Ö9ˆu„j[Þ;ÈB];ø(dëíÜ¹³u“ùg,´2AeÚ§±§%'ÌYSÇškGþS¹wí€ªYJæzi¹Í$#£~žÕÆØß>o‡vá²³Õ25ž¦üq\´¶¯å:f±’Fg"2*%§çôŽt¬!ìá9ªM;z™%>›Õ‚Pë¼óz=‰:BV#=f;ê÷ m®m[¤h¶hmG‰ÅêÙeÓMÌvÃ±‘;ê^áJ'Ë;µ/ÚweO3Ï˜¸=çv¶~~›GYb½RÎˆf
¸¯få—»`w£5œµ ¶yí.Ÿ×GœQ8 ª)d$Jva·yüAÝjH9ý8Í‹ËÆ=ƒ*ÖUµ¼ƒƒµIµ¬áQ«
2å¹¬HêîNœP$à%XS¤þ4ž?veãU%é‹ÖLÿÌ¦¨è„šÖN]É¬mlü(­¥“S¹OGyöðÈk¯ÿìÉÖâÖíÛ››š(òpÛüj`cu¡¸õá–þ&Ûø~7‚mC5‘èÄt½Œ€0¤$“»fô«­QÃ	Ÿñ@|#Ç,Lñi¤%I¼!‘"eRC·=U äç¦Û‹äÎß¼¶zmv&­13…õÒ”%µí?½±‹w–ËBÅ¯S‰d“67'ÔmÝl¬FØâþfG&µG3n@›€ÜP\é")ê›âº…(…$òò¹ƒí.ºò-›0ð«crß6]Y¹°²AÉÂlÂÛ˜¹t!jüN¡p”ßl¸¡‘,b9c·Ç«aR2îàÌ`M÷¹ÊÆR+;¢í2´iá™1Zk‡Ðô7QåhÊÂúÝh5žjS3kÙ
«UTQEýcÓšJ!¥Oœ\B¤ÁšT¶×–Ö–k÷Öþ|uêÞ§¸k«ï}*‹V£áª%d1#”½1Õ:™Ö2}º.ÜIø"Gþãµ#\…3$Ë­õ1ì8Ìôkª~¨zdh¶r!P>›¯®ÎËKØõJ!þã²øZj¶6•V%¤\Û¦5øQ—•ÆúP·”×ÞùÙÏ†NßP=ä;ïœ®ªÔøNž=‹x1E¥)ÒYØ¬´d"PåïŽz=‰`‚‚N`-$Ò?MÅ}rËœÂ‰€¿ÖÏƒ‘G†jÕ°Zl¨K-”1Ž£H‹»Â„ûûªª!±@@ÎXþêéã#þ*ò.ùÇgsù­LMpüþæægúG™Â–Çà,Þ),MeÖ¨ó),ÕÕ„ó´gÜ.äæ|óh¾°0ÏåEˆíÑ– Ûçš`àìÿôÖ‡+Ã«L:¿qéÔÊ)ÌµW_}CÅH
ÎÔ)îõÑ¸ö~‘–µo3³%Z#+àoï^ú@•_[Ý¤fcKÄžaXBk§Iï¿á`tk¿xæÆé“—±Ë¸Â VÓmÿ“‚v: S‚µ£íhJ¡¡)ëŠ÷áÀ	Öô9©ˆÄplÝV®«{!2©óYs¡xAË÷gÊƒÁZ$®Áj#rÞ@±Ó03±Ð´pN"5oïÏ’«·áŸo;p$Œ–6Gúi3´_3xV…0Ocì²SÝ¡4~“TJ2¡“ÜÏŽ¶ÖÁ¤`¯hm¤üî Îz(žôÓÇÖs¸§µcR³ÔÆ^˜‚ÇúA˜Íp¢R×Õ6äi{DÈî©c‡™q½mƒ»vêˆ¡%»Ä{.äÑÁÚ6Â±±=›ÕŸ›öh§p›vóßÆX‰‘¬‡¬„ ‚(ÙeÔ –¬Yè¡Øß6ßô´`ÇÝËJÓâa`í:öp[ç²¬¶uû4­Y
ÿ4ÜÅ;°€-…‰â9$SË ŽOru‘µ»–—ÙÃ¨ª_Ç¬ÚÕB$ fÆ™4÷¬¶4bM™i@›I@gkd„¦0Vk×²Æ	½Ÿ´Ì~®Gm_=ä¨ýJþasìT¤PÍÉ9kÜÚa‹¯º#˜`¶7Ä5}*°£#?—ÀI£;áRôRÿ ÜŸ~µ0Ž>4¿Ëç`ŸÍ?yf’ŒžTÖæa§à<&¬ý×¯-0äÕcªÄÏ2g­X¼råÄ)ÛËÛ°¦˜ÂïÃÚËV©&·âÐZs(‘^×ÐúÓÇo¼öÚ‘ã³Û›Ÿ|µ«=ÚúêÙ6¶€µÍl6k‚ìí’HKëu ¸½,ÞŸv6™D¿à¾4ì7Ñè%?O°Ïú6jE"Ej·ô·NòÄ‹dõëïßí›VWó8‰ô©¥éÇÖ››$ýfÁ"L´‚-Ñ‘¶jJ"›l6v(IF$‚á6	iÄ<ã¡æ6/°¶—?_‚µ¤œµ½qnG¥˜$™â½5³ÖÎ]ô¥aIn¿ï2ðNÆ%ßƒûößÞ¸Ö´úÁÆùÁÐ0sa
,“œ³æMà¬…EhŠí9º0¶yZtHöš§v3"kDq\	Ñ8ŒxâÈj;wžŽåïÙ=Äl§ÙmV3Y´bQ†µûÿ«Ò¯VQEUôâŸ§³ÕŒÖ8À!±®{­Lk³³÷Vg?~ïÓ{ °¦8ôñ?£ñtKK%'Gaµn¥x€B§y0;ÊÅ‰F¨i2°xùƒXÄG°­†'˜-ÖÆHoÝ>!ZŒ£RŒÏ§»+»oªß7Z¸9®¿Ok¯­"J0ÖFÊ)#<ˆïw°vv2\ˆré2¿™Á:LiMÆÃþÈ¤*$£š$Ç|a¥øÇCUA€-ªHm²·í:Þ€±š )$ü‹É?:qÃMQè¹®©.‹ˆÈþ#Fôá´˜_Áê ¶`ïäïî»ªoºÆß7žË?;0²PÈ^eÐQ¦¥%Wxôh­kI·Ì|SÌeï|³†ïV(,>ÑÔa‡µ’«IFÛ"ÜMqm³y~DÂ5×GrêØ±7ÞxãîÝ_¼þl`mœ«=/”ùöÛ[·2³Åo-ÒÆ­q‰¤™kÖâ&V“·&¦©iDv{ü,æÉ£¿9ª¾‹$œ¦.5ìu“×&&OÆÅjDLhXúÄEE–	é}\éîð¼N?[˜HØ²?2Qo£á›o¤á­YËZ0¬É»c–6íf^Ø¯;Ñ¬´ƒdÝFB`Ù¸½v®¬%¶ìáW!&¦Cîi®©ÑÚ\5¬iaÓÎ±ÚªûÔ†HÔç®Z7q H´AVD8ÊYkSäáŸïtÍf–õ¡Ñ„¶‡Ö@.ÙVU_X/R“O×º£nÃXc‚¸9
ÄñZžòæö”aM¬æÄš‡Yj¶¶É=¸hG€5ÚDJ‡…hæ¨±ÄLÎê2‚zÎU3Tá Gœ¹d'4[æ>ÚûŽÖ¦®_½:}€Ápë¼Åàòv¿Ä+ÆE,,ìdZ_ÎÞuŸ›ÞÆžÁÛôØÜ¥ëØi;ê<DÚ:¬¦,GQ°æ\+˜5¥±Åª)¶ßXL°áYt¤@qVb±-Õ—&è)=i0£ÜßX›{ßX-c¨™¶a-€¡²‘Id½_ÍIÞ*þËÃñsÞd˜å¹T  —4xµÇ?…ªà®*%öûj€µjÝ6x}Zu«EüþI`ÍF¬%d^{â—¨ìîU‡¨Ä·ém4ñØ‰˜ŸvìD	ÖðßJ¬ökkç/cÔÚùó8>š–V,ÑÚóþDz­=~äÈÃ‡_<¤ÓöáO°ÔÖl={X¸½vGSü¿zölóÎ¼G€·²°™JÈI
Âm6»ß6©³í˜ÛvOsÓœÜ8ý¸0”ÓÇÚÔÖ6ò7‹[l,ä‹ó+3©ø…›ùkû›ð‘fdœÉ:³ØþÐ'$T“™ÖÈl¾§¤Å<ò:ÎÔËCà›˜m$*gS‰Üt$Ò2JèóÄÛUS©?n©“›ª MéY‹ÇÒ=hi›wï2º[ß’ƒ5
Vk+ÑpúRf\É@k²G#Ž™×ËZ°Æ>*Á‹fòEø€ÕX4;(s#²%±â®oÍ¦d¸¥ÓrÖfJÅS&¡ÚÇ³ˆÚG§"R¼Æ£Ù_QEUô0×ÌS+Ï]ÓR+€ÍHÍÑšu®=Ö®Ýãÿ½{S$C"u««9k”—eÉ	4Â< îO‘À¥äõ˜‘,û‘¡ÇÁ#ÁHø…²j¤ .Ê¥XÔgGÔ¾fëMã"±0½´k2¶þ/¼Lk—¨ó3ZS›•B1T
	­Wœu"ÁŸ ‘3Ö<‰yÛ™^¡kŽ~¼mÅS´+»º‚Šé¢62A·BŠ£ar·™$àïðÛ”ë|‰ !•Ö¼¼Ow‡.¸û_»‘°£&Pú:BudÚÜ8îÄð.à /XÍ»’«˜â'2³ Î-ï‹>æ;dìZ†ì‘`´ÍÂ'$«d§rk€5Â 3^ ø‘Eõo<]Èî(Š„&7ùm„k3*¶¸æ²µuX£ã}ufïïÞ…ÀÌZSÍLæÃW2¥HHºÄâÅ¢µ¯¿vãÖÛâŽÓ»¦ÕÅvêƒ<qj…R	Æ8ðÃšÐ­ÿÉ‰Ä¹£{›XK”åFüHJ?`Oœ€®-<‰ñxJa(6ln"v÷H÷™¤‰ÈYSXdŸ›®ó™á7:‘¦_±+›ÿº!,Mi¯UAóÔëx½è;q–óÀÿh§û˜ÀLÇº$~‘~mnÎX-p¼*S˜uuŸ…0¾¡cPµm`–6€4>³Íª-2DO§6Ës4VcÒšåø—Z×èUëPý`/”'k¡QÉû*ssÍYÓ9Í_+µ«!k½]õ¼á÷’E[,ö¸1Ø=ìîa­15ª±eÆš¸­d”Y…"{ÎsPf=lÙwô%#	¾J·O½hÂdŒ¤µ_®Oó.Ž»œyV·½oýÐÞÛµªñà‰@F!‘Æî4wÃ¯¶z–^Ù+Z#å—/9“LP+V3d«9Ó–SŠ?;lÊ1Ó‹a5Ë‡ÔQûëw“Øµ—šÈî1ºDHdæÏòÛ¶µ-÷#*¿X¯¶Nü3‹ç7Õ[D%çxPÉ
\#×1™û‚~YjÁ þšbŽüqÆãávZX¹•ªúZ¯îÕÒ¸ÆlÁZ8PÅí%0-™<	- Òã©h?¸—lœj OYc‚ÖŠhcƒA+®Ìõ­ÁjH¿Ö6®¬P›wê<ñýï¾ýƒ´öÑA¼µ„hmtôô‡÷ÿ÷Ù‡Ï¾öÅ“Í'TD®mn.ÞÆÝÚ|öä«¯6ï,.¬=½m3 •YöØ¶™MÔrÉaïWì¬%‘¨«–cHçá8Nsy"¼‘þÌ©Ì[s¯µùüÇ ¾ÀßÀLfa>“N–µ™ýMU5íGü÷7{HÚ¬<3k-2X£î±I¬ÆRüd¹@°R•´aÌ	…öòéž¨ýôSžýínŒ·sÖ¼rïÚÎšw«3XSp¿RQ2ç¯5]`Ðš7½réÂ)Äžr[ZyvT²rJg\ø£ú¡5˜¬ý§•k5­Ex@>”æ„§F°æ’E\\®k÷-®_ÀV.…¬DöWTQEýã‡ø«Ò•AêCºÿ|×š‹a™³¿ú«<?þnúÚ(“×Òey§¥qÈg”R7EMƒ A3Ðbø"#að#d$r$ˆ»FX‡ÏÌµ€?€¹†ÆIdHVá#óÕˆáëŸö/¶r% æ±ÆC¯ñ„ÙÜUxAŸÝHV(†E*ÒÐâ{°ÆjB±l§'½>ŸÇ…{ÅCÁ\¡¤¦„y¸§ÚÏ¥x5½"ä´E¢ú{|U‰°WuJU~pMj«I¯¨ù«¡äH)Øý=ý‘ššªŽØ‹’K¯0£µç?€5…ÂS©–µ Wÿœö·ö€5YŠð+œŒ]Í-èë¿_(ÜÏ2Zm
¥_PˆCvþQ‘¶ÅB&»öt-Ÿ+,®-RDIñÑÓìðl>Oš!_¼ýh1ŸÝzðô$GU¤H:&ÈéÆ[ûýÌÌïK?#·Ö8»±2;Û8ûáSü5HZs¡n\I•+!mÜÚ9ÑšXkPc¥+#\:xh ‰Ó¡–TÐŒÓ¸˜¤ »-¥,HirB¶š)îí>í¥â±!•TÉ,÷“1Õxy„+²ÔŽôG‘n†¯	ÖdµÙ0âF |ü7®dÒôx°2^E½nÃš±™ÖIaL'JcS¬ÆËkRS·š…FŽÒ×Õ=«©«Pkšž±=›±V«õ[!d¸]ED©’c˜ÙP
„”™Æ;ŒÚsñûÈ nS_;‚5¶K°¦æ5–­šÂ%"kÓð5|58Ò»§«££•Oï¤¶ÒÞÛÞ‚”ÉïÉÐ¬mç¡r!dyðÝ°Ó¤?YTdEÚä³ÃŽÌœ³yÖ.Oñ28c…¶2cá^¡W^gö5ƒÞ¿~}ypÃ¬«³Kä£ þ¡Ùtc¤šhGŸ¦¾VWé‹ƒs-öë ²`‹j¹³k'ˆªõ¾òÒK‡½Bè£ùõ‹°µ¾æQ²ÐÔÎæj"MJ‘Ê‰Œ¼„ÏÙ¡×—ø¬\i¯[/ÃÚvKšž,žÓóû|Êóg×mØ@ÕT»<·,¯žžµ]>rå°%! Þ›êp\˜k©8óSÐœxó¶Ãgt.Êc„h^ÛÁ7ÀˆS$ÙýÑ3È¹jgÄjÄ‹Úßô©!b5k—k$qÁ‰DÃ»{W¸f†Ê°FžþïÎß¼yi7Žÿ¥ç‹‚µ¡5êE¸}2šýê³güåÈŸiâÚ_~Â<H¬®kÏ>}¶õ”ªÈ'…y|®­5ì¯[ÈR‹²™Þ-éÊÛòÚÌí—ÈÏÂÄ™‰%Ý4µyðo¯ÄƒÂG«|œÏÿ!¿UøÃÇïeÀÚB.õ^fþöBf?xBÐ£h Ó¿Š-[Bp2ÏB€›ÀÌ›Ûša9ôŠç4)²É›JzlÊˆí4dâ¤ÊOÍ‚quðÚ¨5`-u®™TNþ¤j‚÷Ý_½aw¥¼~ÝH|÷ÚÃ+¡ÐÌÌ4‚ÍfÑ²F®N²ÚôÔ¦ÄÊ#<³ ÝFl6×–¦§UD²tÄvÏ%Fzšø›'c­ò¸·kVi¨&XËä²Ûƒ°KíjV«¨¢Š*úÇñÿ§­Ý×j›×²9ÉAÛcYkÄHÍÎb­º…kW¹dUR$.…„KOæ:8ÉÝXDv5_8¬‘ˆæÓ\ã@€bÂH˜¸ünvà`Mv3:†é¤j¢7xˆØ¦ÇÇbÓ<²Ù–ê¥ÂÂ'ã÷‰Óª©¡]—&j‹8åh>+8¸øò"ƒœEk,ÜxlÁÚ_Ïža„‘à_í#1¥6Žÿ‘¾nÖqÚEæ}ºÏ_[ÍýR/Wé‘[¸Ê‡ELd8ìgž–†t3ªÖã£Î±*HH$)nLg«õÇ4;VP6Å6(ætÄèd£] ¾!¨C´æW ‰¿x«Æs£ÓM«Áß9ßôøýìãñûk[³/Le3Sð\dô>°–ËÎÏçgg³›[ù©L±XX|ð´˜ÍŠ¹ôT’»Ã¶¶•M§3w¾aöÐÆÆÖF¾¸µpÓ~Boƒko¬®ž C[´vT³fWVV‹ßÞ’­ÆÒ¬5r$K´V‚5ØQ
IÅ¨®Ï˜aÉS´v²±é¤&d{&Îœ¼‰é*"Îa´ÔÑý	kšÂG¿¾ÀøÏMÀÚˆ·±!41©tš4 ¯ ÆH„ÈÁøkdúG»•æïÌµ(ƒb½f­E"^³ÃÌˆkæ8Ëa
U¾k[#Ë4é\·4‰ÃáÜÌìë®[í8ÿP‡Ùh?~|4ìÆZf†ý. ²#Ö×Ê:˜«"CFhÝßŠã5ÐÏï”_m«ÂbZeƒ¬‰¥ 4BÚbc°[OOÉþrØæÎ*Wõ²ÁBXÕ»s°s ªvÇ.zßŸ±§­§KQ”4ªñþXm*†dê¶ƒ5öôfz˜–i€›Tþ‚=zÁŸ€µž==‚5ÞWo£¹l6H^Ki›Ö­¨HÜçöàÊ°Æ“œã–c„ˆ\O¯ïÞ¹oúp[ç˜Îìº@@l<,<=‡çJ.Úlî’SW»>vàÐò‹µõU-µõ»uvÚ½›2È^8m½“ÅB«$‹å½äcÉNŠ‰ÕhV)q„d{ZcÅ•<8GkÚvªQn—A²þûjH=ÝÞ°ÛC ÖIL±¾µZøWÉ"xm€A5ŠÀ!³]þó±ñË—ÛÏ‰×¼‰ Ñ²ßàÁX«%6—ï.Œ“ãñ­† 8†÷£ÁÈÉášp©ý{Åj$Aºpc5ËäÖ©óE`áPMRužª ‘bßÖ^Þ¸¹‚ýóÁWŠŒüx·ÈçüO´ýì³ã?ã/ègÏˆùâÍ7•‰µÿÍ7›Ÿ=Ûzp·-·¹V`Ì?z
¯‘ØdÝ²?-ŽÙœŠLq³à 3“VÐ¥mßDš¤&mñÉâ4
n³¸]Š™§v@A'ù™TêÀqåÊlüZž„‘Ùý³™Y^›¬á‹™…’qD	Í"³fÕlŒ}ä%ÌcÛ¿w?F-Eˆ¨,^ôE'­ù´†·Iƒ5«ôvÉý©”hnVAªŒ5œxõ?%Õ2œ‡Õ>È\y÷‚ŒµÕÆ†áóšø‰Ö•JCÞ²—ÆÓm?©$ºß`…ƒ5I;7XCqã6+‚Œ3õ”h M¸fr%Ö¾`qý9	O-›e!¹Èª´«UTQEý$:×TYž¶fkvQTC8j¡µÏ@55°•ÿþO™>¿*jOkZÖÔË‚a« rg2?eù53%[IüÞ¾~ßá07›û†@11àæ·‘ YÃÂhÕÙàØX K*HcÜÕ\a>Û?º «±¬¹C•×}âW""ü/Çã_:sM:û¬ýõ¯g’¾DRþ/ÅGÉ¨òC¸xb©™ÝŸˆâ¦°á©©ªõèõw‡›CIWWœCkÜþŽF¸¸÷û¾nZÐä¬uø@/ÕÚÄ¥¤ˆè’?ÖÕß×Úsƒ¼Œ˜YkDA²îƒà8B§ÊÃYk¡tl||lìñfaÊ·”ÏNµ¤§ZÆsÒFrjbó¥³k…µÔI6Le2³¹l.Sxtg¾PØÌ¥½Wd’¬7¶Š7õSÂ-ãGÐþ~õ7þÅzûö¶c­ÅÅ;k\Y=•±æ.ª\6€£5]é½~”ôHh-Iš<µ²èô¤Î²œ)(2•Âšd4¶ûpÞØ82)mr$éi‡u““â³æ0X–”­«k°ZcCtHþüÃè‡à‘`C]„h¨i\6fZØz×Â˜l6Lv$Nïn4óm$šL›©ÆCÕn²š;0l%’†nCÍhwtgsu>Rû“Ã¾°F6ùÇg‰­5·øvTwhÐ`ÖÕ:À¿Oí´RŸØ1ÐÚÉaŽã¬!µ­õîékU&¨ ‰´¾æh)þmd@
¼þ7³Ù(¥|n á‰á»ñu»4Ç­§£‹Ïw³Ýç#öJÛÛy²êØ’ôK©"‡õn2ê 5>•ÚaÖ&#&Ö‡ÙB0-sO‹8¬•ó!÷‘Ã¯³öœSxÈÎõéõ_î^žk¹:½þÒ/×_éå=…j|êÎÞÃÁÇÜk{qZïTßå¾ÚÜÜ4K´X{qGí@ïÎéeÊ ××¡´C½g08ØùË——ÇkÖØÃò¬¯‡×è[+QKÖnŽZy›§´½Å¯x.¸Ÿ´®¾¹å¹ò$ðç-³2º=r’m`Éº¾Ú2?ÑP¸m4v½ø’©o~BùUí»ÃŸ3;u®½ý\Jw‰üÑD8•ä46}8Å~‚ã/¢`5aYkµ~îh¹ HL5ƒ5›°v®é£½õ2VûwXÁZb5=NmOQN Xíÿb¨•a\¬ýîÔÊ±—Ï¿}ìß?à/)VÜÂÿLk#‘²Ö>|í/¿ùæÏž<Ù\#ÁŸq#[äCnâçcô“©OÐÑ‹€Ý³·$UX—ô[7#Ó‰þ:ØÌöôŸašGkT>ÞÒûÜYdtÉmžåŒþÅE6XçWWÛ™ó¬Çê5JùfWkñ¸£µövXf¬cl
Ö˜¹Í5É-KMàšEÍœ¾5''“íœ‰Rß¨èü³ÆæÄâf¢„ÒXùbj„¥ç¢¬µæÐÅ/©w°æXBj6_M“ïVÎ¿»±Êm¥ÌÛóØlÞ™
Ö8T¢µƒl5–­	Zsqý¶ëQ9$;L_«kdmgà7klY.Á"kS"µ{”À˜¬(X3P+ÁZÖ¡Z¥]­¢Š*ªè'e®	×lÒZÖˆôg—%¬&ýaéãYÝ›S¯òRÎykÎ^ãÉ"ý+…ðih¶ m|äÀi
àŽã¬E»oPÐJ„ª‡bøk’q³±ƒ~úµÌcZkR¿Á§z”,Q§ÕèØ‹KKÙB.6º€
úuXmÃhM	õ\fÜ=‰hàü‚5h(HÜKYü7ÎN`¦E¹Ÿ˜©ÎX#éÛ¯†‘k œO,‘ä˜‚	p$v[s²ÖÂ¸jUð#³¾}K¦R$‘ˆtû1fèf"¥_`êõ‰é:•­¡k @W+ôy„$ú>èN$§$þæPï­FUŸã£¾@_¿öcéÙ¥ñ(©*jŸºJ„~ü*Q˜ mnm+“_+Låæç³Su/´ä2³™…­-ª‘nÓ…Ÿ_J§³Î¶•Ïo­ñ3ÚRãštlõüã]^¿þúÑËêIç"af¥È]ð§ºn­kT!müX­½ú–[3X;—Œr¹xÒŠ Ëá-*‹œà²inLk;-éö6ÙHlÉFŽR)‰á¨‹¬éu²“|}Ÿ·ÑÇ°ë ê5a-¢a|ü ûG¼²Ð¢t±Õ1Ãw4·­Q¡"¾ óÌÓòÅèv'Ek3{]¨†t¶i¬8­£ì°§ýñQ
!9æõŽ’* ˆ2K|Á±ãÝ~‹ÁW“Ã[fwðKÅXÓ£+677ÐŠ¨×áÁkjY­9á²õõ·õ´µq¸Tê5Xã)ÛÌ‰ÂI+ìÜ÷Bä ‚J°ãä¼õbÊõ(L„›Â=:XcÛèKÒFyðšVÚ²mä°¬Çý[ÊÈaúé;F¬9P£rzš5*ÃäTží´\_ÚÀUC-×¯Ë`ÏñýÅÁ—^RÖcý:PÇöú¡¥-ŽLH½Ïò ¨ŒOZ·¯ÜÚ¹n·|ˆÝÖÃ
î§>RÚÇærýzç¡zbE`¯u±Ú+‡håR<ÿîœ:ôÒnàH“¯¦˜àM…:$Nsô¥•Q™ƒ7Îºmqš M2fÓy‡nõû,t_¨%=÷Í£ÛÙ†µáÒÏiry®ÖMXÛ5Wk”¨ðJvý0¸CdsU	8€¬à,¬:Èµ‚³D˜:êøåvYû¾P…DkNnj‘NŠÖkLb¾üÑGä;ZÃšKí—WÅ
àºyéØ•âÛÄà;Vã~²€dG•O¸üùZÆøëI‹›zÃÖþŽÖ GkCÐ¸ÆÄLÆ°üÇ›ÿýðÉ“gd<{¶ø`jãcëÎƒ}~gÝQ;-¬­9³ÍMÎi[(K…ÚnwmNsÔˆ‘Cwçó’£öHý:±)«q#sáÚµ~tïÞ£HMe««qÕ0â	ÖLb1­ÍgcÏŽ)ÝÈ£_KÂÈÉ[óL¸–eYi)ª%ùÅùL Ã©‰yð~øñx”UÊzÖR¬hnjúÍo^ÿ¯2«ý§â}^¾*nœ_9¿±2ÓØ8siåÂŒ¡˜c5YlH.šÉø­Î6£5úzMšŽíÒCØá5vÖÑšqË™U`MÙIeCmõ¼voÕ‹äø˜5X³\d¸æ6*íjUTQE?!4—™£f¼¬±#Q™q©<Ý-º¥%öä®I€šŸ~:µŠµFA$¬†ÁQ‚¶ð_nt¹Øf@öP0JÊ#ZŒÖŠÔF¤&Y±£|5YÓ>€FËšmõÃpœ!ñÅ47·tÿjðqv)[º[Ìf¬!‚ž»Ì¸ëð‚Û”B*n~¨ßæ7Ÿ•ºOŸÁaûÙzŒrµ„µ¦Œy2™¹ýJ$A2`Í(,š‘YT-“/„„ráêpÈ[S£ë—„·¦ºÆË6?Wí~W‰p,†«FÕc·jýBÐÚ µhÊ£ \Òoy‚„F‚bý12#Ö€5èTö¢EÔEc`ã}©Ý—[Ø*ä¦–òEÆ àHðjáóÅl&ŸÍÎ/äêê(œJçÖ¾ù†µÂü£;ùñp:»ˆ±–¿>“ÞÖtûš<pX>¸ÿ_è`¡k­]W$MÍ¡ÆÙLñéÓoír
}h&¢5ú ÷õÿ{ë×TMš³–üòK]¨œt¹ý,„lÞ²ÓÎþìtÂêrø‘Z°Lw4•ŠZ©ãd²±Q~›zÔLL‡àñè›œ
Gë¨z`i¬šF$üÇpc] [ãA²!ëg^ç®Uê }pcŸ¦òF 0'orxØ`³h»WmØ
u](	{Ö²Æ¿Õäøh4â˜·e˜ïccþê…T®Z!Ñmêc3uÌ_ÍQmw)ÎN•q­Ç6Û”5Ò©jÄ6¤e¶Œ¶”ÊH—óLkë"ó3®Su’PZ6˜­ËFhãŠAvÛ^ÚÉWÜÁg:H™¤Ëñçá¼5½J»Î;+AšsÖ,ÛC)‚5ˆM:ÌV9²l«Áe¬%#ËÓ¨eVµÜ$ÚÔíìƒÆvÖÖ¾TKrãÜÞ®Ã¯ZÓ{)ñÑPpÀXíPý2°Ð¬óÅ{{§‰ä¨]nßg^QíÞ½\;HçÌÕûÊN7ÙZ•»)Š´Ð¶Í#ƒâ\ˆ²ìEWÙ¸[/æLÙi¾©"‰ËÊ¦}¦­	Tuçrm½óÖö©(òñÌ¹j?œã˜Í¶Œ§Æûê?’É|¢Dmîðóó,F¹í£˜€-èMzSÞ õ‘8kþ0Q#áªö°†ÙÖÎµ{ ©üDF>2/CÎ¤ÆSey)o]üòÞû·mV3X»d°†fÛ7Šç‰ÖN¨’F5—ù–ƒ5,7æñ‚•S§(Ö¤5×ÿðý ­%DkÝàÚÌ5ô&zç‹‡_<[ûê‹‡Ÿà­qŸˆqÙ[¾yðùí­üæ¢ÌÅ[ÀšJYYu$º…¸3$ïŒ';PnMÓ-Ðçw¡rí#ƒJ8³°’)PSq3!CúãÊµk™bEöŠÕVWKS«i¶Š±UÚ1dãTs2©9 ‰‘Î£ýí°™"&ós"ÎŠMO|JçRÌÈž„Õ.r¿Jr#_âqbxñË ÕÖHQ€Ê¸iÖBøîÆìµ×V›€µÙ™U²¦rˆH³7Ô ±X :TÎ|ä©n4PM¬æ&b³ÏnC£mÛÙ”¥æ&a¯"öl´+Ü»¦d”“l¶¤–cY)¬¨¢Š*úIÖB–sFœ¯Æ–û0å¾'»Sç`!.NŸ¾¬IW‰óÖeðñÑtKÚKÌ‘á‘#Gn¹‘Ed 0bMnJ)©ßL5HM|&X#rt‰©22bgžZz®Z¯ºúxiti4–-¸QÐ[y›'f	õ§È§ÿÕ¯È0”¹VŠ™œÐÄj¦HõÈ;ï‰½„|jÓÕ&.^¾`°JNžäæeÁZÈ3áÉMKYµc3äE, Ïgõ˜pJ)	ÓPWWÅüœá ´mN6ß0 WÝ¿§§ÑÇFÓÕ@°ÖœE†¢œ$2Oú8‹0FL›~V|ãn‡U,¼”ÍgÒuéK› Óœ6ŸM·LAb…©:ºÚp×Òß|Sä—Á€¶©hx8W ™mêý™Ù—HÅ<9"ÑÚùkjóz«6IgfúÜ2¿½Å…•Ýø¶ ‘ßþÍhíØË_ýõÝ_üZ!#—›½6k-åQ€ÿd²Ô»ÆX"Ó¡7y/*ÒMFg:¶Â!A³h¸¡Ig 4 nˆ1	lÉŒ4z|Áo˜ Íøˆ5#q×1Ù%2Zçƒju’Ïêg5I»±ZZvGG'’˜}©jl¸”ÖÎbûÖØcw”–5¥—òA¤,8`m¬/VlíéïƒÁÜ½e@ê¡™æ,ªü]ü
½Lœ±ÑÀf Õªñ´*H¢[íûŽÕxÊcÓ 5@cë¬ïl£êQo¡ùÙphÍ¬;§ÞC/Ã©ÿÚt®O'óÍta¦õØ,ìÃöœ"ŽGÉ˜m#KìÇbCÚ÷’/ï¬mväVŠ×G-´—aª½}øý–Ý/-Ë9ë\Þµsç+½õ|™A‚´õvÙÌíVÐZ[ïá]¤.b¿íšÛ§jËÃ­cûÆÇºÆ¬î»lçœ
Å\üXÔö5h°9q´xm»‘ÚÓÍ›æ)2‚Ïkp—.q¢‰äÜa÷9 [Ù}+Í_sIÓëë0è¾]Ë/š­¶k}™Ž³’\fËØÞ–~nw®_°í•a!jŽ%j<ë„‰ ÙŸY8É`®P4¡×“ˆ€l?yØ0y±Ô4š½ZÙ"“§‡NO"Q‚ll_sÃÁ£¯—‹ ÉÁ×hkÁÚ•ü,²üûíZ¼|÷®ƒµ»ÌMãñ‹VÆˆsÖDkšrv
smãt¸}/¬éGhM©ÝÎ\“Dkï<ÜÜ|FÜÈÃ'˜gòñ©‡Ä{6›'¹ÀÊ¯¡­Ev˜am%‘Ÿ³díÐGž‹l˜ÇòÑÛ<]•#OÄ	Ö·V®åçiVÛ¸Öž+2.\¸v©¿¶zôZX;z\Ã\Š«^‘ G‡f%c­´uÐ6÷îÝ/òQ“³£½æbüõsµášjcÁéåí©F é ’“±å!Îö"u'Ë´vQ¬dÿ—X3VCçÝ€âçßþvÅ-c1jÜãl5·@¶Ö‹f	:Èœ¬]fS‡š‰SÚk,ï¡™™¸«úã©á§ñP¯Úöl5HÇv$3ZVJ +ª¨¢Š~¢¹jYcDlÚ+Dfr9r¤XZ-$´æz×l1¥Aa–ìJ"¬×ì¤±¨W³´ŽÜ8}£ßÏÅú‘#ÊˆŒtsn6šƒ3†cËX²11™š½ú"X+ŒZSnþøÕñ›Á«ÙìÒ/[ZZ Ö°×ÔÊNÓƒî
“Š®‹·ff*!'#ÀZ	×Þ9{ú4\Ñ#=HÑ°F§¹…@z}P™'uælÂÃ. ¥Þs6-s„ðìš0”FŽHpóhJ).\‚´ËŸ¬ÂÊñEÉ‘¬q¨&ä©ñ·öàœ‘VùyÓd¤Á1¡P³WÞÚÈénÇdØF&lópÖZ7àÛÿgï|›¾Ïõÿ|ìaˆH¬„ò¤ÑœT‘’-[†EFMÇQ$ƒhfšÆåA…d·]×FI;‘®ˆP'pZ1Óo…ÈL€)¥eq	Ùbí¸LUTÖÐ“®[ËAH§G•ÎëºßvÝžVçù*_±?þü°Ø´Éçåë¾¯;êÛìáýaöRsÐ2å&çWVæóÍ“+™¾æ)Þ_™Œ6{Šï¾[nõOóaøyxr[+LºFÌ¬†·f°65÷ÁÜ§mÀZÄÂ¼ä£•Ö(„DØkÎ[³ªIB[ðßÿèA¥ŒÐDáËBFi‡rÕikÇŽ¦Ó—Ç.y‡Ò²¯3qœÅ\.²£3>A>§ÜÁZ<é˜Ë*'’þ”72NoŽÓœ=•¶ú9/Œ†´%Åˆìá5RcV¶xˆyõá‰ÊÂU6¿SÞIÍjä÷+ ßöZfie[Õs68g³Ý:œ e-À“Ãe–5*÷³»Û`mP#Öz™H¤uT:Xco¯Æ«puÞèFõ"ö°Ö+dÃMS¤Äª°„j>"9r=Š””¸¯žQ·&Ù£š®ÜŸ¥©òd:àúùl9\£R ÇŒik“ÕÈ“ÇÊ	â\4#W(â–*½-¬r/¤»¬2ûß~·-ŸoÙÀ6±ü»à:B7l£ykÏC=O¨sòÙ°Ça<öôã«´¢qÙÀãÏ°)Ò Œ´ ž:sfÞ#ù‘âQ lµa×ž†aB´žª"•9â*Á8dù.Ï¿ÚŒ†´[GmÁ~vê Ýè°3ÚXq{Zè`
8öÚäÕ±ÊC¶­ß°Pƒµï§>¢ÚÞáÚŽŽážÇŸ,í®ühXjëqÓÖ·Rn=fSQ•C†|ÑT6e,¶ÁE&Õv°ÁçõÖ7ð;o-
Å)¤öç@µ£ô‹Ò5¬)_¸³mÇ« ¾Zµ’ˆø5À
Óç.§{ëÈ³g÷ž[Ü¬Ík°«¹€tsí	|µ‹çñ^^|E­µ¶µÚtì
­…¿S
	¯9‘ä?öéƒ»Ÿ>¸SÍkwVÊÿ »ù“W®}ùñÍk|Htf[¹w“êH í3fBrûñgðô™±£iè³ŠTJi¢Üqmmå"ÓÔ
·JKT½ß/à¥­”a´¥ÙÒ4Ä°`Cb¬Ep”"Yâ}å\aw±Ðjå
’m1Xóz¹°hS¤H„eB2_“}Š Iµ™Û&VSÈo–;ÚÔHÐJnqÙÕÊ -èe÷î\ÎƒÆÀ‚5jK™OþÛÂ9ñó+o.•œÆUxöeZCUXã(ê”‡¦m APYU~HU<2-[­kh‰ÖìWša*U¤…[kïM;T«ÁÖÕK ëª«®ºþÙs!ç†¸AÆj:ØÖDk´¯]Öè5ÓÝ»š™­Ýš4MMrlUœãùÂa_èñË—wîÅ	ÛFUñF¼Ÿf¯qjhD¡ ~šŸk¦ ÍÖd,)ò sÉÐ…â$Y#Î„>'RºMÏÃƒ5eh(Â_Þš…B¾ý?MÈ
"»°Ò·{á…`øèXBHùà…$ò2‘X£hOÌÂùSd"Êf}þŒZÿ	î÷Âvä…ùƒ¤ðÛì4XS…“þ . &a'ú¡††h&žÀy+tÂH<ÜOøûN@¯šbÊhˆ È8ïÃ¯‘ÚGî8
»¨ŒuKa‰y‹ÂÖŒ¯”?‹b]ÊÐœ¿´2Ùì™^Y¹ÁXº|ƒÍC‚>_¾_.N{<“÷?+O
Ö(,¯ÝYš]zå×4MÌ1‘nÑ`-Ò®ÔÌSÞÖ¶ÒÒw¡5xí›JÈ5£5ôŸg÷[$$óŠ¼þ›`§÷R“ÜÈñTXå¤§ŽN0rh'~¿¯Gv´e4a-Ê›vÜŒµ´\Ášm„R)â^&Fã¼°6o
“ˆí÷øcØ“úOD
âÄn')2F0žsÚtDCú(‚L“ƒ5V-|4CM¥¸ÖÓ–	ç«°†´¢@H8®*÷ß©ß35åižjŽ8¥2Î 6{ÿ·ŠÖhDÊ¬’Î’V‰l°îõ»zÌTsýl=9b˜™³¶ÕM»Þµ·Í5­i?íÖZ™%‡xã¼~L;‰Ý’bF4äÚ™sU±¿*Ý§¦~ÍÂFn öÃý»À±
 ±´›^¢Alk,„oWmÖžÚBÇðfµti±ð´æÔqfÃU1æ1BˆZPé¢Hl öä“$‹œá«¥eh{z€oÙ»‡o÷HSÇLCCÇ¾Ç!UEvw€Õ =ü½U@jOO×@„Ö;ØRsÁU½=Bµ¦­íqØåÜ5+†¬d‡Ä9XcSTV9ÂÅðÎ`Í‹Ì^ÓruF3Zš\ŠÈÍlðåš?Ñÿìu¨ÆPˆÊÁ<w¹ac4àˆ‘Ð!Åf2v {m}0›´ÊÇh(à­'ÌŸRÈã8ú¡ c¡¶ ½mÑhCSÔ«BH_PÎZØ¥ZëC1þ€r)?¬¶{‹2øaµ½VIa"û¯Lò€¦µñ#t¬Í}°=,Î½læZu(6‚*Ð‘7öžÝû[u®P8wâ<]`X«ÑÚSŽÖ^«Ðš¥BÊ[£Œ|“ý&cñÒŸ|2öé2ÐØùå'>ýô“«åÛã—Ý¶©ÿ°™[ö™Öà3™°L+ønB3K1XsýiÔ9–ÑÊ5Rùß+Ÿ_¡Mmv¼Œ¡–ÌFæFFvŒÌ•HoÌ&Ö¦J#öÉšZ­ÒÌ4‡k¶ÃVàá¬/¬úHƒÈráÝaÆŽè˜ÄV‰ØžMj>v»¾‹ÐIhã‰P‹ÁÚÛ$ÆÐ>HI*oë‘½O¨
r¼4}ní\éß°:qÖ^™×Æª±Ð’-ÝÔÆ`›Z‰a¨	ªÒšÛß¦5GYý¬W³EFn”Ú5ë_’›Æ]u«M
ÕÐ¬±šþX³¨šƒ5ö\ø¨^YW]uÕõÏ;#{ÞÄ¨f+¶G°†Šf­™®.W[×–ï.kÐšØø²Ö5w–œçT&Ï3¾‰l#ø(Þ÷<œzhO,cÖáþjW¬¡¬%€µ…‚	;ÔŸ˜i†Ûn|^d(ÛŠ5œkè
¬‘3ÂYˆÇ>8BEcö”å-uñýf®mzé¥¡¡cc cÆëS­#|¦¿ó™,£Ä€5_†uüž¬Æ3pÐ†ÃðÿëÖù;“j,QT¤ÆÝRÃöùØ”ÏÖ@ûöšÊ8Õ – ÂzÉ¢Òfâ<œEÂúõLÍâç)¿¿Xã¦á/õéÁÀZˆÌ «±°—þ´k¥ìq¾\,_\™díFñB´ùƒžÉòB>¿öåMnüÅÛ·™BôÙÇ_ÒÝOÛ°†µ6=5ûÄÙýDŒ¼zD~UŠžâ³ãÒx¡|G¤†µ«Ù¼µ¯­a®ý‰@¹×Þ¡\ôÔ)hMï§ÉÁ‰âG©Ó#›<:v´3ìµ´éö“Ö8ëÉˆÊrz7OQúHÃ>å‘$Œ¨:v4=4šNåŠíúêSÛÉ_ºÜç÷GqÒúÀX%• V©7C³Dk +ìÊ'Õ0wú¤ ísmÇ7>Z&£šHöZy$·NÃµ¨Håá¤üëš§†=Q¼Ý™r_fVÿØ‚Æ©‚´,ÿ^óÑ€î^ˆJ2Kí´|‘Þ»ˆ™áx¯Ð¬‹ÚF äá~e½nÛ.Ì47ÜZÉ]»víp$fÆ‹*žmÖx¨mòxo‚µoø¬²DÜÔäò¹›‘_„öön­ºYÕ›ž„bp"6è¬2Âºš'¦¸Yk4ªÉë¬	mÌŒ¢’½«<´ºaÏÀ ,µaµeU¾P8ðä3ŸAMÏ`¬Pi¾Ô1³q=<§Q`WÕ¤Ac½ÀâBMk<î—È¶2àÑuÃžžÞž‡!·Š¢Gá—+„4Z³êFíä XMÕA“îm1#µ2JÉÖVô:›VIƒTëÜ*°ÆûQÅµš´õÝ]lªéâ”Þ¼ª5ýÝúæ”@vk×RµÊzdpW0èÞÀ.÷©C-µ~cÐÏ¯¿Ÿe°!êG>¯—ì~¬µÆpjâ(¬Å¤´:«|°Öà®ý°•ŒAÂjKçÊwÎO“
{å­;çpÖž]ÄYC†g®ÒòE½¶Ñ`mÿ^j(×Nœ/_ºtþ\¹PÉ©µ­}ŸÖªæÚåcè¨ñÚKÒ/^úä˜k÷¾øÇƒå»wïþã‹5’ …`×”Bü ö_D:­‰ÕÓX°˜9Mµ“èãµ¼¶²$íþý{@ÚµK++Šµ]š_*Ì–NåOßÖ¸ìHf©%a$ÙÎfÐ«Õ°MÄ@‹D b,¸-ðØn~ûÎííPŸµ6/i`\$‚ë– ¥Ú„w²³”Ìo/g­Qao˜j2²åð£÷S‰W‰­öbij|íÜô8³	T¡?éóR£é|5÷ˆ´%CÍí2ãM>[¢5jk¬æºÕïg)µ}ã¬ÝšªT£ôÑT««¡¢lµªÞ¬ªÍ×K ëª«®ºþ©[×æ+"p¤–åO¹»Û¡ÑkŸÎò½«W§¹1^[^¾pWã7'¯NN³¸€°äglÎsÅZK?~@a!~Vã$KÄðUÔÙ§IC±úˆO‚N!LµÆ {/DÜ“†€	Öœ\ÁMJ k: =ýâ·¬†Gµ{¡ìÅ;Ú¿H%äa²š±Ž,²Ú·6ö-M»"I}<k:®?Î¾`X°–Š¦8@Þ01‘2}H6ý^ø€}Ä9ª	¥Ñ§=>¶XcÂvÔ—IüqE:Mˆãhè2Ž‰NñB;ûÉ¦^69mòä 4¹Iƒo-î‹ËÙ1XWYOk.ˆÅâÍš¿6]P¬?•€'|žoV‰äæ"IþžpáöÝž¦`Àæ#î)QºS8ÿÖñÙ¯üzi||ïÞ¹¹¹Ã[^ý}}²Ö/ø4°ö%îš«ƒ¯}í26å­Yàa›_—ÍñvNÄÉ<àí°Ak.2­=)Ú;¤v•6X› Ì!_ŽA'ñé´·=Ãà5öÙðüb5ºçúúŸbàš?V±ÏBš˜§oÅÄröŽØ!`-œ	[®Ú°«jô…Å`È:×ÂŠ$ÕÕYhûò²Õø²ãÃ¶¤qM½•þu nßöÞíë‹Ô÷Ã2	òO¸×3@8dB±"rÝk]ýøËXC]ƒƒ=Ýü[ËC‚5Äª«ŠT,ÿ.w¬_>[S/K&c+ñRû¿nýˆim†o¬°¤û ±®ËŠñjVûÙlz„5¯jUXXè8À$4­‚µD¤¥¥c†4‹odÁò€f¬qeœØÂ*PäXû<9Ð³aŠ­H’¶gždUéþ àãÈ–N7.ìì ¡ràá­¼"Q]KÇ{ö¬ÎÐ¶¶JÍ@+–ƒ5=kÔHkÚ/ØÒA;ìúÏœ„h:¾ArÇìÞÕh“‹a?Mtz)
LY¿ JOö+¯oF¢?”#âÔá@Ò¸9­ò8`Í}_ƒÈn ­;D)÷zÅ¥„Bf¿VHò§”9Àv2	•5e¬9KÍÇªøGÂge¬1ë1Æÿ À2V#ÕHE»ßyçðÏ_^Ü¬Áj„HçhJ½B	dá
kçŽ@cGXÐµ«-Ò¯öMäS‹Â¸g)ƒ|ã¹"çN¬]¼x(RªYkß§5²íEkÎ\ãG’ÜoSƒµ_üíîƒ<¸{÷Áòƒ{÷¾¸w›<#pí¾¦a’îÅ˜É,£M)µ·Yà¶ÕhíýÊ 5–ê.ž_â$kK^Ñ´íñq^ü†¦¯Ÿ¾ukD¦™ÁZ„•ˆ·]›Òn.Zp­êóÉ",MWù-X³gÈbŸE¶°×åBb³¡vÁZrG„ƒ<Ð`­=G=j:'VÓHl«‚„Õˆ‚<hã°÷ž}‚éäÄ@Ž—–(¤Gxé•¥ñY¯¯sziV|†ÚLløœyÆ†Û«-[ë¬YmìD‰ +àTP¿Ùjú’£9­"Hë@¨ÒÚ´5“3X›­f@V5c5.õAØuÕUW]ÿÔ´¦Ö5«…´V5#5ëH®œ©h›
â?ç«È¶“û4ó‚Ì5›–}]7‚5h…œµÇ‡ˆn'°8LG¾Z|‰3,;¦Žµ)Jï§ä-¤Ê¿@€Û`#_¸18xfß„ü·™]*ÏØG±c–%æúã«×^<Ë„0ÌµÃ¯½Ó9îB!íìb“Á£±Ç¾{ýõÑ°/“=D~¿›–Œ¼ñf£M^J}aíòÚô5ŸÌ3œŸ(ªÙô“àïçcnrwúÏ@¬î 5‘º'0â2¢ÀkÑ˜g¨®§(£!·­Ï÷E!OšŸ†ªÃ¿]ahšŠG™‰QÞƒ?."Ä'†ÓiR8li¤âeóæóÅ<°¶ož ÿF:º&E‚×Vä6v2ñå§Ë÷4izzåÝµÉüÒšœÇ#Gææ°Ö3è?Žgmzø©[…r¡üÖ7°¦«Ë„äÍtÓ±5l\…¥§2½ŽÅù„ÝÆô¦r˜–¹°÷Ð±MªŠšÈLde¬ñ^òé4^$$,Xœk8onb4çg"I—	˜¥á]ZC¼m)53^¦A- ÑÉ¦µ´Ê5Dës}}º¬YÈT›n@´*‚ÙI›ƒMJúÉŒ…ø ¬~W©´åEZš?®Ú>ü=¾O+Hïà×ñ¡o„=ªÿnÚöAC´½4­’ú@+b/f›Òü{ÙËÊ ¬Y0ˆÌæY¬ÙÅ–,7Â±žv¹¬G£µ^æiã$ê"Öx+êx£@Ð•BV9íáZæHÍX«]¡µþ§ÿü/ŒÅ =l`ç2F\çZÿm²»©ò¬¥ i¦EõDëË_«LÅ^]ÝÆÆÂ#«gZY''
1mxÕÓ3¸JÁ$Döä3OöXE%“Ô¶ñô=Ø¯`‘­¼Êõ Ù@ÿãOÓÞ‡ºl[íå>½=-*k¶¬™¾oìÃ|ìJ•£ùc†\Ú0bÓ‚½Öj¡#z¨‰#ºKé*p§ÊI`m¦…ÒL9lª‚äVŒ‰sH4äkØeèÖ.¬ÖtËô¦`Œ-¤Xkiq…Ô7fIÖÈ}Ìf¸ÉPd¬–<sÕ|I5«5i°#ŠnlBkÌÿ¦;6ªLÑQ2yFÕ€5?ÆewÄW“±vÚR·Úx1e…ÍÅ+Œò#Gžãrkˆñj–.¬Q¹87·ÿì³g©‚,Í1ºùÒµK¤Až¿ô½¶µ­}Û\ë¬£Ú­YØÈ§¦O|ñÅƒ/îquùÁ|¹<éýkäùÞ’a–Í—Áµ›·a²‹÷î|ûÒûŸ}Ì—óÕî©ùýie¢£,Ÿ‘‘*œX¯\ž™›_*//—W#¥[‘È–
xEtãí®UÅ!‡kïLi¡:BhM&›‚>BÚÀ[óŠÖ’Ž´ó"!¢6Íe$íàëG½¾JöÉß·0Hcµ
¬ýåÕ×ò>Ìù¡ý'¨Ÿ>ñŠf(,µÍ2Y­”ïe©Tª”A"Vèã6÷ŒUÛ¶ìGj Þ8€Ü·Ñ¥Ó­T5Ö©fÉ"UV3G«,µ÷¤ñB-¯¿kè'uV««®ºêú‘àšsÒ¬ç«Õî,€µyû°“­ˆ40ûú…i¦ºP)Z;­¹Öµ
­uÐEOñcœêŸæfx'5ƒÑÈRô‹ÄdJ:­h[+	ë]"5‡a¬)2aQþ'?¿p#T¾x‰kåæí•Ñº^œ8a™ógU
©ÓŒ@¢CpM©ýà¬öÕ´†ÒëâÇÆ’™£xKHEáx Ÿ/L½£|5Và_8ÕèóÒÛÀÙR†8ÿ¦ Œøk%&ÒïÕDµÆ8 
FCƒÝ:êûkLÇ†?Òœpñª†H®_×­„h—-ñgA¨ Û³A”tÊ¯éövÈkã³tOcãöíä‹htŒDx‚7c©x§\êôør×'óžTœ~¶éIO'^”oªÝŸ>§\²ux’@–¼g¸¼VÈû&gg÷Bk{õ™ûË_Uz¿6fo½ùn!?<½ô–rÚ,f¤š2ÂÉœMÇ¦míO?u„Ì–S*%)Ä>\í#ïšS¸Ä¦Ò¨¬`esœUØ˜¢öv!G9ÇÉk§ð.3Ì^ƒÕsÙt_Z«¥ã<E4·‘ùEkD÷Cj¡ñ48oÍêfi[£­m(á×™Ì0°†4Ûi0¶åwFkÃÐZXE¦¼šØt?œµöJ,$%ŒÄÚ%g’Í}}03¬3ƒ§,¡F¹*…¬ÐÚÎ^‚b	Â%°P™óÞÛ¬¡®.0Neà•òÄÄGß…5-š`/:ÙpÐŒ³0à\”?¶S—¤
Ö¶“bbå’Œüi ç¢úEbÏºzþ·½ö›Ç´S÷›‡+5•#­¿_Y‘Ö†í¨¨ß¥0H—4² €6;ÜÔ0éÌIB†2µÌÂñÈªðh¡ƒÌ{’ËûÐë®úÒ€¸ÁÞ=]ƒÀöi¬s@ØÆË¢öt¤®Èè#ydP‘‘J÷°È¸‹K-‹Ú²-VÅaÛ†_ÈB:ã¬R7©Nö”z¸îiØÆ!€Îj")á$nuãíx6UÀ±¨¢YíZ“Àl›íf!¹û7¬uÛOå~,Ø–P*ˆ»ÌŠÑü{&¤)Â>è0I¦Á¨?	ûÉ-b6¶h=Ñ(ëAXÍb^~Ÿê¿aµ¨ôB±šùjk
‚„)}ž2ÈB¤T8òÜÄ)R…Fk˜?øãÀÚSJïwÓ›çŽP··tå¢Ä²kÿ'­R§€h–˜¹6&½®¯OÉóÿôî2×wK§ïþþâJùEîß$Bä^ñƒ!Wîc¤‘IÆíô•ÏÐû÷Êû–‹+×VÊ—&rš±,×~œ•r¹0R2X#Odmé<jO‹XZ¿:ÖÜè´vÇišºy™¦t„Èþpgûä×´‚ 8€Žuý–Jºãº`ƒ+VÚ¿Xºnc¤ÜÚ>Š±f£É3®
ò/9ø3`í©çöÂÎ¿¬}=[:a=ÔKÓSkã%.'ˆv*µ—\l?e,Rk&GeëZã>ZHŒXÓ§XÕJH.zÈ”¾"‘RDˆ&T«W›ž´AØrÔ°Ô,­_!RÖ>š§²Þ®VW]uÕõcÁµo•CX¶§Ùk9^SÃ‚ÕnL_•³fþÒIÕ¢E·…ó™4ò«zî5VpCÆÌ]Š%‚P›«{ätñöìãý]ø°3„å˜BÆ_þþâÍ{Å•Û×ìLÃ"ümæÚêÌÒyöQZS%¤ÑÚ1ôÖšyk›†6Mxsc †zÓè<ÏÄš“D„kÊ…ôZ–7"¬-‰²þLŠø~´O€×’ÞFàþì£v2œÕ”å&l¤@¯Tê7Hë]œ§†î„ßx¤}¾F7§ÍòûƒÜ°ÛcóÀÈU¥T ‰eiK#…%žñùý	 0èÖ–Jmüp*î£‡‹Ž_(¦Ê&JôFŠ^š¶Â­m“Óy/g;JãK'þøÄ^`M##FÇÌ×[KKI†Ÿ-ßûÒ	Xc86‚}¿þ#"ÁX3oí8°Æ»iãŸ.oÚÔhõ]§›ˆäŽ$I~œÈ2H°–ÄA¬¥s4ªiVËÅé	
GÍX­!Vâ™P´Õ+Æ(H?£ÜrÅT6ûcp.û5Îm¦X°Dy]„cvEÂ5<´Za¤ê ©„äÂ†KïWce+ÿ•ypå¢û°-l0y"e±†€5µ2 ! ˆ0Ö%’¸Á¢·Væ1›8Ãî¦|·þª™ÆUÖÑ®¦AîÊªe‹ kÊ€´@HVx&ÍT£‡m°Xë—³ÛŠ]îñš°VuÖº\²$_Õ¤HŽj:—‰à2É&³õ;L«,	øxŒuÁÍe½"(GkéÚ²Æ5ããÞ kÛDf–¢8³0C$20Ù€[öØÀC«*§TÚc¯øk×žÁm`&bJ AM#åèÓ{œl‘.«ÜE½ òNDP]ØeÀFÆcÆ]JÛgU3²UY‘Ã2kNÃ3Ì³ûs¡uMb?;õj?¦HìÖp»¬®6Í,œ±Ìµä±òýˆþÚ6þº¶—=Ò6Ménh¤ñmù±Hð§2†Ö¢Ù·g2økI`-˜ÒˆGM’!¿÷íãÞ0ÓA¼É(®½—u€Œî¨Àºh¼/ ,]ÄAf”P»ãµƒŸZ<R	‚DFX+bµu…Ré·L09r„6*ÁÚS.”µ†€µGÕ´†žÝ/‡ýÈÞ÷ŽŒ_!ÁÚÿEkþlV¸F“*~zµò…1'Õ*¸Å§Ç>¹{7’ùëÝÏï^_~ïêy†ó“`[œg,æ½*[™>y=9~çæý•ùåë×‹å«dÛÎOËÜëúÄõ#¤ra–|þ‘¥¥Ù†•à$Íâ­Ò/À)	¿kÕ<#.k5'Mñü š$³‡Ûª¤V´ˆ»»+ö{UÉlµ0·íY¤ºÃ,ÚMðAY*°&U:ÖøÈëçâàç€5£ÀßŸñqJ ï¨ÒcJ…¥¥7=]nk7XCahœ¦9©µFk°˜3Õj^Á'˜#h‹aûe†HA“·nÑ¨fÖZÅV›…Õ`4®¦"—J
¤ˆí÷u[­®ºêªëÇ„kÆiî‚kZU†¿ƒµ÷ŠVi’§VäëÎÚò¤‰ÙH¡œ1<™ÓoEaàHùÓ)ÐCRá£Óv£0NoŒÊP"äî¡¤HV×%p/Š!V’Xgæç·5vÌß\¹1íšÑš Ã•Bò1kš¤TÈãäŒ¸ÃË
2u½ñ_¹ÏƒÉÜ?ˆq–¤q´¹Øú¨û;qËØ«±kü5çóqŸZ±¸3±ÝÙ:u‘â$ˆJH¦cûs:R€{0°Î”Ó—¦C£Çó’,Wæ%Î‘È€‡p¡Þ1!XÃ¼ƒÖˆ$ÑÑP*ŒW¦÷¦±3-ÐÄƒtødô_˜žjóh€Oscs4žñ(pÃÇÉÉõSf7ãihz°¿ÿ¥%ù÷>{dZÖä;2êõÖibÁG?ù¢\¾ÿåå›ïj^Ò½›çÎýµ*!­™çócÆ¡Ñ–ã=jïé¡S‡hXË=6Æ’3™–þ£°	Ö€5Œ5¶F@
AœŽ²?Íxë!¨V“¶§=À™¶a»â­ž›±¦66?0§ô¨¿UrÆZ^T–Ïe¦œvÈ`ãÕ–Û0Þ^cÉ*!$LoËG[ÉIÀ†	EÃ(Ç„ÆA– v¢2š}ÝÌºR#fÖ™¸_@wêÌOu!«LP)Ls8%È²«-»{«øö—÷0wQ3Ød›55p7óÖ8Îìí.›–]…5{®ïÕA
ÖLöÜiH&#KÇØBeŸ´ÕjY‡Ð*ô&ÆêØŒã´`fUA—˜©›x‘3*~¤ÝKh³;K$%LêÙódWï†UÐŒbÊ§Ò½ñž,˜W5Ì3²óéŸö®Âj=Öµõ§Ìb£q­WãÔ($ñ¿…xzß}t¶šYiîÖªÍÓü5ö¸\äv»\dŽnrlÝà÷6Þt{Ðê‚Mÿ¦œ­}Õ¾¿ƒ—¾H«íaÙÁÏÓ2Ó$C˜~µ¥Xf|¡¤=:PKE5;¥_*£ÞØÁ¬†agšš”Üïó†eÔ{õk(‘J%¬UÖ²§’â4|yQÓ°k¬¦+£¢“S˜.¥©¶Ò…÷Ãjˆt’
¡4!™Ž½(_ÍôjdäÈ³o¼q$2·F„ÇùKFkWP­mí»´¶»“ŸZ3\s‘°ðšiLúJÞš4–;ö·Oîf7ýò7ÏgFÇŽ]¾|wþÞï—¬PáX¸±rí^ñV±pãúõldi­|ë:Ÿ]¿þády¥xýÃ—çkòÐ
…ry£àovvŽ=sâªë SÖ+J³ G  ’(ÍqšÛrÀ&NªDB¾£êG’Yî¶`Ew ŽçlÏf¼"6êâuw9¢ž!Îš°ÚoPM²!kUV{ùWgßx_át*ñ…h‘;w^ys¼4NùãôÒ¸eS\w‹ËHAÕªH—)"ãÌùkH+’>`³#\u@†šõÛ
ÖªcÕJ·¤Òô$_MÅ³b5©V©ë<×º­VW]uÕõ#R×(ˆt½k…oŒ6™lî;óÖLË7®5…ù3ÂEþ¤Æ)±`m_GæÀ âÎ žW±J¥+aNZ@°Â(µYÙÀØ‚Ö‰êvBp„ø?~òÆ…íý7nlî(^û÷KÅ*U3dV:­Î½ÈŒ°½d×Þv}k‡pƒ4;V…µ×‘à"Óéíl\f0í¡‰í1kýïôc¦ÁaÉ·#&â|;ÙI–íiX3cMÓÒx%
 ‰3û–×N¥èr2÷j‹¦H«EÙÏë¥ÂRnZŸ˜SY+Íë”ÿŸ`SF¢ß¬µ¾”×Õ®¡”¸ß$ÛŸ¾>–‘ÛcÍÁ@þKÄTÉÞÚéñ„!³æÖövŠ3ÛTÅÃh€TÒëá8'	S­Íí³…i+¨Y¢r¯¢½ÕDÄÈqô:uýP.Ãà¤åøüÍù_¾{ÝûZÄæ‹–àÿŸ"ed‹¢(¤gã¨‚ávÚÔ¥±£¹ÌÑ±chÔåÄi4|€jt¥åÖâœ°ÚÔlÕ@f#ÞøDÖF%Ûú3"êÆ¨"WÒé¨RÂ™HG­¤oˆÑ¨þŠ£­NmÃ­m$ôŸÌ·a”…ÍSãR•¶lÛ¦bçÕÔ¦®lò 9lÍÍù}žVÂJèŠÄ¿)µóùƒ	•Þkö&7°âßÛ¦¦nÊ"QÂþa³A¨K#Õh\›!¢ÞBAF)°ŸzÆªÑ}Ià”˜ªg×VíÑAÜ&Bëº¶Ÿ­ëu#¶{8Hz	»ú«´ÆŒlI”¦ª ŸXÍ–Úü3#[~¿<­Ç0ÖT‰h¸fÖš=C9$€­±h0ƒÑT»èê·u8*¡
²[Mkg`%g†#«Hh|Ä¡Óž=O^’‡míyò™ÇÄÜÃ69“»"ÝŸÿžkR€7°žjjêÑ6iäˆÿ‰ÈÜìê=.ØÑñš›œÆÅ%†ÝÇq±Yflñ@Ý™ç’ôpÛÏ^p-¦Mÿ–"ÑbòB0mÔdýi¶»©ƒªÙkŒ¥[èGmðÆŸÂB‘ I XãÍjv‡hW‹ÆC™TˆziÄÈµL ”dTW6Å§—á¢‚Hh-ë‹§iQcµã¢r«Öåuåüg7O–t~ïóx§æH¡Ö‘”þEpËÁzTÉýjdcÐÚÜÈ«‹ûßxngí"öÁZÖjÖÚ·h€¡¤ŸZH­IGk¸f2^ãJAäå_üò—/å6ýalôòßî—ÿu¹\¼pa_¦8_<™œšäÓ½\²4}U—W§ó¹da~y"7ñáÕ«æ ²Ò–Èé«ï•(j,ÍièõŒ–Äî:}zJÁEI9Kž‰}OÚéºÔqë¾N»Ú8º›:ÊÃn›ž*B®d&—IÊe³§oÏU]÷š˜YëÛy™@%Œ(
Ò5¬¬-Ò¨dNþAìŸäÍWÖ^yëÍµµ7×"S¸\SPšÃ3ºá„a\E?"–žNÇjÍosØ8,€óv:Nc7šbu
©üÑ–“µ¹[·ø&%Õµ]»ZÒÆÑXØ²>\­®ºêªëGˆkÿï'Š†t“Ö¸Ø¢ ¥`Í	Xû¼èj!§Ö µIX¯ÄøƒjÖ·F{P.—N“‹MH²¨Äb°Z,ª™eãù>W‰Ø¡ÔŠ"ñÛ02¬6R{l?°ïÂçOÿÿüÝ/¿‰ÙÐÍZ£AâŽ3×ÎÓwÿÇÝçÂ?­)aùïÕÿQªöd«½Îå%•îàyéõ·Iaôòg’R²ÂEkô&SÝX*
˜Æ&gÌ`­Á^†í§ÑÛI›IÑªˆœÊ$dÑ4RÙàg;âŒ;5rB¦>Eö&hMñÀ¡à/	Mòs¢fNdÂáx:­F­½ôÆfD$ËèÎ1¿6foÎ™Ï§¿ì0›GszÔ¼™8%Vm­ØqüÍ‡EÚçS:GŸ-ÍîÝË¬µÃ¯ÄuL6W:ú&†ˆuûäÓLGúò&oæ»ï¾õß¢µ5M¯ûZÞŸÒÿL9Þžìñ¿#Ð—ŽšMØkCÔA%¿Ÿ7rkí¨Üµà‹‘†g6ú†rI¯>ÅNæFÓñØÂ„ýgsŠGÓÊ„T¦ÒU„lQŠ@‰ƒé4dÖ·S‘ýìà°¿Õäñû=~•"H/A!>Â Û`5'_ë”@L›nŸ
ógÅvV¶¸·æO3N|8±u;óñ­ /ÑÐT<ÖÙ› S²ac¬uö*ÀßL^mkt¶¡d±; ¬uÁ^WÍ Š–ô²õÐ~†l‹Æõxfl¡.¦¯î¿k01¨ü~Ë#ú¸'ÕtÇ¬±áhí‡¥ãÀš£2[‡š§¹R £À:3‹K‡ðêÀÂ™ŽZ?Œ¶ÚÒ´Ên[fp’6]É¡êéiQòåžž]pÛ*÷¥(²·…ÿž^öc²µ,ôv­nXí`ºõúõ]
îßóä“	ÒÒ³¾i=á)Ïh›ðƒ1ò%™ Õ=Œ¹r‹nš5­¹Î¶Ü`Æã ±d®a¬Qìh|'ÛÍ¡°Ç6iT[ËÂ0ÎÚzU¶Ít c5‡jNß¦²m3¢5§&[ÖÅÁpÛ€M8³y*êîÅIYßBQ‘YÊÇìÌñ·³Ñ¸(M©þ¡hÊŸõFI€„€äìû²6¿©A=k´qŽZ¿ª°šò#©âc¤×"5Æj Õ9¡ˆ²ÍO¦§ µ0¿v|0õ`T[|kÍ`Ìû•iÿ¯Îj~]ms‡çö¾x~innö¼¼5`Í9uç~ˆÖ¶ð{ôxZ®Ùxüê ËÆŽñ‘û•j¸vìòK¿üÅþð‡×ñÂÄÄ¦&òÌ•¾>‘ÉÑ9š§°ðô2	Â˜ïà¾Z±Pò&§§?¤H:{úôédiG-’”"Øj°bÛ¥ö²*%M%Íb3Uí´öªÇ†az8«: i¥
kÊè·»Ào,í›är§xz9zDŽtNXbýÊ”~2ùXƒÖÖ¾]IZõ'hX;2wþ
¾ÚÚÒÚ›r×JãdB–`µ0¼E7œóÎtqó¯=Â5V:½ÚáÀŒ=ì»±é•Ýç"QøšBÉRÄ`)ûÑHMWu!-rTsS°Ö¾Ekã?©W««®ºêú1Î]û‰PMa#º¸yk&:•!¶÷ŠóÖ¶fzÏÂFÌ[S*¤¤ÿ¼Î~2¹}ûùÒé
äÈX%dÁ
ži”X?9f·±ÛŽá0:pŸT„gÜäì§ÿÚßcåÒGÅ•2é]ºö>¸FÈó[Fk'Ó·Vìúó?kÀš „JÈc®mmÌ"!_€Ö^ÿêõËâE¡$Q‡.{>éóa£…½APŒÇƒD‰Hf¬5 ü4îÁ|êZ“©™A:•!Òþ£ŒÓËe‹ºHÈ-Mm@¤Ì1¥­ÁOI@/2!4¥â‘ùJOÊÖ,Ø¿/ðy<kéÑXŠµfÆwz=Þ\:ÚŽy<Ê}ÎxÛlüX.Ž›Ç^m´yšÛ"³š=T9ÜZšûàÈ¯^~•ôþÈîNÙd*‚|á%ô€!Ú÷Ëw.^ºößï¾…\Yé¯e­)aÓÎÙÚ<‚5%ørôòåÑ\œBÈ‰	b¨	ÚøxúØØ©xzwŒ×1z9çJ{’é¾\R'Oí™œYn£¾VÁZRÁW<¯û})vlÇÉ1xkM1€M½lÆ9¿s£˜1öøy±q¬6ìCÁš›}nËgâÜŠØ¤l©CUkm¸º¡Õáÿaï|›¾Ï~ÿ7œ‡N„cE‰PžÍEn5[¶LîÈ¨™í$ŠäDà&McxP¥µ)½·@GDÚÆ´6"¨plnN«.T(‚…wëÄîµKùµ{ÑJ;!$Ôô,RÏ}ÖM•k¥óz_±Ø&ç«ßØ_Ù$ij¾/¿¯ë}&1¬Ý(³Ò€B
ne²;GX,ñ[ŠCb¨¶Dò³Õ`µ^H®>¬a§ì0‰}c-ô¥±åˆÉFŒÕ´ÚÛïïÝæÔ‡•–¢­^"9®A†B·´äH-Ê	ê(ƒté’Z7*S&$ù#&É¤FÈ;Xzó±¯c5Œ5b>×´Æàêm»~°wÝ±šÒNÁÚV7sÍ:Ö¸ï ycgÊoEƒÜéòò?=©Í-©©gl`5­f îçsàÛ:þ»RD?¦ö¦;::ÏîÝ=¾þâ.NéhW¬¥†³™Æì¹Îñá§~øòK»§žm±x~EJ"VEXrÛê¸~Iì7lÓgô:~Wú(ž“Xš§CL¢}¶pO0XÃOÛÑ¹$ØâÛìV¯fËzìcCÖª¶êÚÒVê'ø˜ óá¸-..‰,£ÌRŽ’ß/´!¹W-ÏþL4šÈS(™)dèH°&0IÄ2òÖ4›BòK’ÇjY…öw.ò/‚5ÇjhùœXMŒuãâõå3Á nL÷¢¦vªò lµ7	teªØc'°vøÂ¹Xmîùçß`˜Ç•»' 4ƒ5nžµö­m§eõDÂ|OÔ=;\Ã];Š».‘)VÓ½´ÿ•ƒj§N½’8õ›ùªâUj×Ê•3'+¼UŽ.¼úYµªÈ¦*s¦?»tf4Hõ&<GúÇ^
Ó¯ÖòÓ++ÛE[yÇj€“Õi¢‘òš›ÆÓvá™³¤uÇN¡aªñè‰}<ÍŽO£Ó£,ì8Ívþ‚P%ÈRÞš!RÞòE*Ê¿Dªüœ=âk«Ü÷þwßø-ï“o¿u`íœª;î.^}gfûÌv5$¾¿n¦í©::XÃR˜¡ ¡ZH_¾8§­‘ü¸(_%-¨ÿß×- Ò`T»sVC6 ›û	PMæ“6`MÍájM5ÕTSÿ¤¸F5¤\5‡k÷Uø¸¼iÑµf¦q—d­]@gê!þ°šôêÌÙ"E‚dl´a‡°BÚ™—# iøñÇ©#D‰°7‹M´6’#c±«W5aC;¿Ò´5÷:sïÃOo}tù
Cz>T2	i¢µ¸Ö ÖDkÌ–ŽÈWãÃ`ðG‡­ÉbP'ó µJM_kžµ ¬Mäå²	Ø"ÀRv?ÓÖ8G¤Æ]mn­Äp'ØdœR‚‘õº%¸—ÉÄx‰ìˆ›Ž=œð-eFÄpµF‘¹"\£®ŠŸÏÖªEíVI¼˜­³äÈµ¡0•3!)#E`FÇJ£"2(BKDjÅø`†,WWàØâ"WdŒtwñÁl×ÚÁ×ðÖ¸ü²ÑnÎõáý‡¿üúÖ_>^Ü Ö4Á¼µ÷TVJ&$ùqÙòóÑ=yž4Ë°¡9ÖÞÌ%oðÒ‘ê‘y¨­œ$s$«âFùf¤õ­°§';ÈÅJŠÔjÅ,<¬ÙÌ½AL·l‘•pOOÑ-3È£yiƒ?™àÛD~™ñ*:¢1FbáH—¨Kœ,—EaÝåB˜Yká0þšW¹PÆICÛ]Î¿Öºk¨/:–KëWRî)†šæbë—r0®=­êœ„Ò°Öø%´‘Øc-€vº·k#¾~ì#Örý½¹Î”#2µŸEkŽÀR©´ž‡Ô–KQÊ8<ÛÏ	HŒÆš'GfJJÛhÜ%¯$rôO-d}?x–sÃÖÀ2¶ˆß+ð¹Ô¹e
N¬wL:ƒÉò6Š— $AÉB=–ž^íloW$ã¿;ÚY¡¼£m
Ça:»w×®-¢–qb­íÞ=üòSÛiøjhË&†ðÕð‹/¾ç	ÈŒË`¿ÝS[Òº¦Ý",=8ó¬5v9sM‹N_ŽÁÚ3ðâcY›Å?rÐ%ù;=#¬Îvp—–DtLYœ²×«Š40ó´Ú!œs‡·Äz#8rë’NØÛ:¹¶ ëØ„ooÇ<£2º\‰Å7u–+ÇÉæ‰—Ë™x”>µJ¸’ˆU*‘L…÷–ó
a¶/–€Ù|ÑÁ8¡¨&yÉŽÕ
aÕ^x²a¶RÃkË“>½áM`QÉö7éKcü°Æn‡øØŠ„h8k7oÞž[™#gäù÷ŸŸ[¹Â«œ;±áò QÃZsmküÿúŽQ7ýÇóxùŒ<±Rh÷¾QÚŒ·&Yˆ¿3Ø^ùñ+¯@kóû÷m¿Ñ+d–¨ü»"1ƒ¼­‚iIKÉT­t–‡ C±üšf¨%…_I¦~ä¡/k’#³ã§ó .9¶ÁQ‰£HkÞÆcX›v”Ö°ÝXuv>	"æ³á¢é¸ÒûYXorÈB"©‡æ÷„ò§m¨$>"÷Úà œ5—i°FÅéw«	ÖÞ£}°±H³ÚÚ‰÷ž»~µ›²‡r˜Ù$øåµ¥9AkìE2³	ØR¨ÛrEØ­	Ù§k–Ø/VcÍ\µuT£’›c5ÁšAšnZ ¦­ÖTSM5õOÝ¼v_jË÷y ]Dò¦e»„H^û†#xl0ÛdkÊ…„Ö$>²?«ŽµÌÅ€‚5fŽ™h&!›k#64ZhÆ3ì–Óus¼kÃðøêÆýK±Kn¼:v‰<³[·>¤R°`<Üp1#ï¾Kã±óî2ã\^ÔJ\Z0ÉÙeBº‹Góƒ›¯•®Í?zt$R¼,{+ˆ%¥<€™?Ÿ.{òd¸a¯p>cÑCp›V¸k¥5â`ÀxJ‘
± 4æ¼D”Kþh‹ƒ#‚éD"}6[ÛÊAì7B­.4@³¿Ê‘H¹8 XÃM«áB…ñQ˜1Ð­dT˜mm‹e‹el7°É]ëêbC³ìŠ £>­Õõtáµ«sk¡ÑÛ¯)½ßæbë¢K—!Guµõßß”.Ü"`äC2Fþò˜ÖÞù-:È‡ì‡ µéóIrI„¾ßþïŠc5§YŒT*b¶"íú³Õ8¬V³RHKûJ0t}Æ§æØdeZÏ
5œjQ®PÌiW5äŒLøÐ9cu`±@–%ãÐØ12ÁjFG¤pW$ ¬EÂŠéž$c$L+šØŒ×`dö“º¦5hMëúã<5	´ñ##ÒÍd—±ÆÄmƒ5ýÚažÁnÄáÀjdâ¨C*ÖèRÃ`£,Æ"hDÿ;m6Þð†çïÌõö±}å|.ØQGrãÖ­IìÀåpîz‡rf¿ÖYô#½kb76tÓ¹ƒ¡«™£f!ÿÛ~²Ím=å-¶ÕK"möÄ—[__Î'í[v?Dõí%`Ä´»­½c‡Ylíb"or™•ŠTD?`´–‡‚ ±©—ØÞpÚü„Bö‘"X¢6rBÇ]Híj)¾c0uÜßI‘â8hsÔlŒšä…nÆa¶¢5™l[Æu†uv@³Pîf·=k[X"ÁÚ&íp¯¯×¥SmÉoþ˜ÆÐ‹ÇÏ–”°Òè]3¹¶½öuq0>'ÙŠ¶†×6¹£½?æ[Z[w
+1Ò°Ö`¶BTã°Ë›¢ºôNÂ`I$|<ÒY>Ÿ'j¤³Ó2FŽ%ÃF«é%œarÆ®E‹xkVû·¿c5ØêÂÚ¹{.^'2€ÃNeðèÍ
 -´Ÿ;Ó)VCÖ^¿9·o¡‘sÄ÷OßÓ–§ï^WÜ?´ÖùBèç{è[Ud“áÑ¥	Ú•€5ùŠ¤’HÕBŠÖ‚ÌöX
ÏjUQVž;¸&k­`¡¤X+qTübÞáYµšÍŸNB]"O*UÂ¯¬5ÉvˆÕaMlh‹G™iì“Øíä…EòhÞÒ¦7J;d°V.3aXÿÐ¬û,ÊŒµokŒÖž0Ö8àXñ~ÉýÄÕ»‹¡îÅ·? ¾¿%¨ÒåÑfêÑÂíq—”<	Èó¬rë¢¹o=)XS¤PPCkH¬ö‹«HQý‚}â¬†¼A;TkÚjM5ÕTSÿìÕFk®R@?&öZäÈ}9¹‰k¿;Ó¨„¬×4æ:"ÖÐè²DßE­iì4NcÁš„—64Dí{(,‹)32÷Œ·¨ë$ÊÍ|u‰#gg–\¾Ì UÚÖ¸}Nñžb“Ekçê]o>Ë¿«V
).)•¾u´öÈKi¤N&¼êEjÜ‚aÃ´ØM°mæÙÛCåc+ˆÆùb5–±×¶­¾ÁÁ‚ÎýQé£¹(¥Qc©+AP¬$@Q¬}0ÉË“iB!$øWeo•áj¸pÆul!Fé¶‘@€ãÙ,ûòÝðø–è‘Ÿ&÷{­‹­-$¨@ã =m
¸wÓUÃÝÉµ¹•iúUTi´ÆXl÷ùþÍ¥Ÿ|ùÅµoHï¿õ9ä{ù²†c¿ÍÄ]×h?ÊCÿöúèž¤š %{olGòd÷Ï†²ÀÚæ`’\µšåj©*÷Œ«1ë ÏÀel kÌ¨„Y…BZId9¨,k7ue™´&G-š¡x$P,‚j£AkâÀ¬Ö¼fŠÙˆì³ÉpµL¾£—Ö†Áf{i³|òd}Ã£®ñ#ÐŠ+×ÖÒ‹2,ãLå·]Š(ù…-¨•¡€‚µ¥\Z‡¹Ðbhu4Æ.šÖØPÓšòI:³†Ø„ÍØ²ùÆ¾þ”yb~/s9¸…k¶‰\gZÎ­õÓ±fL«ÛJ:ÅBçØ¬·¿·/Ò7Þß§µ'¤ìGÇB«ZÒ 4Ä®¡mÚjh€÷—V÷ò•à½QÎg"Í?µ¾äŒ&áÕòÖ(yD>â ýì¬ÏœuÝdP×0T—¦€QmpŒxÆ Ùµk·Šù^†SSäD¦†°e\•“S„ÀIT}Ý·Hâ1A1&jfÓ‹€´×DÆi:àBü]~¿+‘Ô	Â3çËÙ²i.5’ÍUªëÎÚ*‡Y'43Jk˜fÚpÈ(–H’EGhèq¤fDp®ß7¹¸d&d´€6u€h<–Éè/WœÄl…X>¾)|þ|^©‘4ºæYÄ|€ÈFlØõûë¾šU;Vëq¬ö£Õ\e:·Z[Æ[»wny’O{È¸ÈØëÛŒZ{ýæm|5òE„køk|‘÷÷Ý¾¹bþs+t¬­]¤–òÜŠVë´vîïiî_ñ¨Á›F¡}`3‹#> ­‘	»¹5B}9Îo­ÜYˆÖj¤DÒ¤¦Ð!ŒF4×0òèhEADVç˜d™ÄBËÏžNªÖ‘[r{R{@/‡-IÖYO6Œ5Ì´Õ0Ó<ÓG•©¤;ÄÙqžiì¶‡ŒH¤Õ8¨¢öQþ˜=Ê÷¦1àú3[ƒÕ”™?ßhX{ž&±Úw‚µ‡×ßÃZ»{b1Ä@ì·ß[ëÒ˜k}€gÑÎDã]YÞ›Þ\å£Ê ¡Õ$b¯¹jPÚôil5óÔX€ikLUƒÕÌYûµƒµTAªø‘»}žê`ÍÔlª©¦šúTCŠÍ¸×«ßsnšÐæAÑ4®Iê[ÃX“H1gZ˜aœ³ºÒÚTì„³úìxŒ”zÅó€^Œ\²Qk6„£s°&DÓ1V[œ·ïœÜ¹ó9
%ãg¿º÷àŠF 5eB~þ«_}®Zž‡ßz‡ËòSÏPg£54kVÀö¨TÐìöH´¶ùå{•#å0Àñ1[JÔiÌ6pÎˆkK`k9:ã ­$pfOÞµÉ8ª›Œø¯Ë=	,6Bá˜âœ‹bÈñ•[<I&ÏecÆ”¬AZXS/y¸…jR6“õdh¢b‡Xí³|O,Š‰£ø1<b'U#m…Dw 8ÉÖZ «§+Á0&— ¦CÝ†iNÖÙ>Êð‘íÙÞkÓ”F=«úÐ|¡ÌGÅ¿˜=NÕ¾übÿ— ·+—ùI2›j%¶ø¯@*«z};¬¦¦a½÷¥ZÖøúH²¬+6nµB&ÂÅH×µXÈ²Ác¢(£X‹Û…J¹&±ÕcÍ,8'« ¼Å®È +â6¦Æn(R‡µ€ò"³MZÃŒ@^º_“™²mˆÞBrÕt@l¦tÿúZº¶µÉ¶Àd…­ñ±Á˜~·P<‰Z†n¤=ú–´’n‹µôçúwZÏ!JÐpËDmvN[.m°fj>kZöos°æ¬IÄ>*$•²^@ã!mý¹§on`[Úïe÷Ûs´4‡MB<–†nXûa#Ï‰ê”ß¿_M°†~ÈÞaŽRx¹®ÄzKï§4²n%ki*2©‚\_oGþU=Ö &åˆ¬nb•æ4šÖêž Äþ%ŸŸŒuÁá­í²Ô1¤&.vtïêë£²X³6‘Ìe°fPfÝh^æ¾j"yÄs<ÆþùhœªužhŒÇó9*~«c[¼®…“x>w6ëmÜ¹­:XÃ›cšÏõœ=Ù_ßT‰A1w“ªÒyÄeTË5"vö ÅögËäA–3ÄB&à‘p¡ó(£Ãc‹gØyŸQ€M¤ëŒ•³ÅN g¬ñÿ
¬–€ÕTéXÍÁšKìG÷–—/kY[Û$ËÐÊAšÒn¢^ƒÖ”ßµé½©MŽÉZcÌÚûdFòÉc´×® ‹sÇ¦O4œ5Öþ†Ö~N¦a¸F$
þÚé*s²i^¯õtjþ°kž<nÛ¬°ÅÚµšZØäo©àbÇ`°Rb„Ì¤¼Ëù˜Í'ÙN²ÁyP‹§cÓÞˆÕðÒ$Û234óÖXÈlËu°yçCgV.É£ÍcÓk…É†0õÖ&X“f‘óÕ’ç³ÚoÑ[ï¼%WM°ö6‚k£‹wÝÚxomùjBcÕžHy„ÔXhA‘¬"{P©:~šùj(éòõCiwÄj<œ‘.€lÀ¬-kŠ1X³Êî
ìGÍÙjM5ÕTSß\#Òk^3XcC6{ëú¤®Ï0qÍiX{gðð˜ªQÙ_Œ
•BÆbQÀLþ-´äGŒÖ¸áâD0ØÌxS²ƒ³ÖZr;ã-3ÏÍÅ.ýò«®|$}ˆ®\!ÒLzœ@Í°R’Ï¸V©ÇŒÌZãš¥˜]9¬JHÝmqíè<…|§J8]‘X+	#É ýó§ÆÒœµ_,"û*’˜iab#Ã-œeÍmÁx;Çp±œ@=Ä…pÍ_‹ƒq¬„UaÇ\pø¥È­4¢2HƒòÖrÌŠ¦
2Dm‘ž ?UA–‰ˆÀ³Ùnà'’¡²°€­Pi¡úÕØ	Ù\Õr5(*S½#Fô#kM@§“èI\]ëN®ÌÍ®¼öÚŽiÎ5³“ª³¨®QÇ¸ÿ•/þûw_@kŸ~ëOE\x<$ò;!¼»ÐÌ5žf´vzÔžˆOèúÖèÄçG)Tç¥£ÅD!bê6ÈÊdUøkPª¬Âl ™UKá®˜é©
Ô²€˜,’Ùi™˜pqÂGÂ|+1f°Q@™á´V²]°û»ìˆd¯QÙÝí
'ÛÚºX!{dA’£Æ]‰#z ,rÒž¢ÿ$m™¸†ÙÁf1´‡œÎ4A0¹œ'Äsc¸˜c9Ÿ?—Ò”$2­©ž1­qÖ°š²÷¹§Óém†o¹~Æ¯õö¬ùÇÅT
æl!hN˜•Jv¨×çÛÉ.UJúý~¶4góºÛžŽúüÚ ÛÌ03ZcÃKšd“$×€µm{Ý¦°ì‡<iVú°q@{wí¢\R°¶wæ¬(dfoÚCµ­;ÎæÒÄï·cšµ#àc}Ý¥é§gVÉì§mS´–›Yg/2	ˆÚ}[—üýãÃ)­í~ùeqÖ3¤ø–[^&ml©mxŠPœv¾ø…‘ÎS›BL[{ÆIˆ&óì¥Ý/ÃAA:O°&.s³Øœãçæf×§¨ÕáL¬†ý×Iì£
9Ÿád×r§ÌÏ›c¾¢RT”ç¨AàXƒÃ<iÝŽ™¿¦Ð¥1›îî¸.¡'ý[3ÑMöuªI¢Úr¥œ?®Qï¨¤‘­hH+À¢	â§É	'ÏcÝg 4<ØL"Ö.dý#uVsÃ°¬öd¤Kì¿þ	®Ú=HëâP §5Ð³Fh?´ö£À3PN³Åm¶nßæWXÌýëí+±#ÀŸt‘»WÏ9Vû[kÍhíGÏþwÑ×.\Ã]ô„5Æ£B4¤º×J×)éÝT¸¤I›YÇ]ûñ÷O>5oeÑ‘En-ï|tS*‡À2H¸ú<ç´vŸ®%ÒþFŽÃ´VïPcÇ“Æš-t±êíR¤­†=U°¬$ÙÃŠeý'»)”Hò†ê>RgµÒ›ˆÍgTvƒÕÞÇW#ÒX	Ø°úëÛW×ˆîÑ=;™¯¬í™¬IÖal
¸Xÿ KWY'µÅÇº3}GÕ¦Ö¼ñ× ¨q{ì¬-Kw¡	ØØjÎVkª©¦šú>5¯Ñ½¦Ö´â€M#²Ö¸©Ò‚!½ÆµÿT!$ÖÚÉ³'3˜kš¦(HzÖ²¬a©ÀbS|Ú`ÖËƒtŽÉ"¢¶¸ZíÄJ³}:sìäëKßŸùø—7>¼wãÊ§¢5«…¼bzxý"—é¼oîàkÎFb4
iR!$w- 4—eÆÆlgK=d¸`â&…€óRÚT¹£6e¥…á2P&C	OQt
OáÊ6ä6L\÷X±áI¨ìaWÖª™ÖH:‹õTÔ×UÖa²3 oõÜÑ•Ûb°["‰ÜŽƒ!ñ`èdÈ@„ÖÙxL,Öcíè &r“|ºY"Çp­»'‚7·@}ÎôÊÜÕÅ•×V¦]ÄT‹$…-„UÑ¸ÿ‹/ñõ×ÿçë[·þ„³&YYéwÐÚ?{þ}åâyFkÇóV?9ÊóL”œµüþj…Tâ«UêãlíˆLaý°7±TÎ—‹Y:CjºpV+=øTFÆÃ	…C–êá!0Úƒ²ñ`U–³6¨l–l€¦6åøg`ÔI`ÂrÊ¸æªhÏâÌöÛ-áˆë]u®Ú]`'Ç—™í®{’þµÞ^°ÌÆqóß•Sº€wÖ›îï'`$ê#g$M÷¤ØMá"Ä8Bgl¤8ÚPßx§×Ãû%0–Ó†*‡P'ññWŠöF¬m­ý å§†ÒÁšÔ15z×`0o8ÓŠa™hM¬Æ1Ër{À_…Ù¶kHS±AŽ™t?ž‘kW›I÷>×7<žVs™aÍúªE+®Ïh.¶QË]^JTY¡‘SµÔ?>žrp¶l¸gÚ~ù™PtdÒ³ÉÔÎ§^T¸eJµEç«2Ò9f®S§Ø=*j³Ó@¬ÞÖÆ¶¿>Íâûý~Ñšç­Ùxlv"žÅÓµ‰hlC¢;­¬kµ¦¥Õ«i­QæˆÄtÚ©“Tº#­~‹«ŠÜútLkýÙx´SœŠoÞ@5ñY8Vˆú3
"1Û\ô#m°áLÁŸá-Å2 ;}q_„7 _|@Íjº7Rû.b¶šƒµ7î]¸på
öÚtuƒœ+c H!kÄ9k´±‰Öx™ƒsk›;À 5úÐ ¢•ëÀï˜zÙ¬y#ÈhïYÆ'^ëNòÎa"kÍ–(‡dDþã¹kFk6ÊrVÞ~ŒÔÂv÷Bó¬¶çOc=V‹å²«%Ÿ¡Šª"A46IV<>ƒÙ´”¼¾4‹‚i”»$ì˜™hèuiúqn¿ wE=yÛfI¸ˆ’4ÍjS%û»{’Éê„KNb)Í"±šMXã]ÐXM¾š×¯¶qáÄeø°ÚÅµµ»Ë!•>òÊyYkZB]’—¥£!WöˆB“!²CŠAJºÑ×Ók’k4ªñï«7U7P	$"¥ÙkTX–š¶ZSM5ÕÔ÷Ì^S9¤XÍd´faþÎl“±¶l¬†.üâ‚òEd­Ñ¶v½š´©_²â´A¹c‘,¦ŠF¹8‰á‰ÇþØ2'`$§TH|6x}(%¡oëÂ'g–ZZ?~ðÕÈ¥_>øèþ™.;{í2ö#ƒ4ÑY×È~Ÿrç¹Ðø¯?(O}û-}šä¨â‘ñÚ)7òèÔ|%OÙ¡êA/›,<©ÅÌn–4…qâÀ4Æ«iðš‰’'DF§dD–Õ²àÎ^FˆiS$ÏÌ–À—`¹’L²µÒæZ&%Õ¾†ªœß].jõ‘B] .wWkOk. AG.JX—*°	¹= [€¯Qá Q6›_[UþóÄ¥§§§Ÿ5‹LÑŽ$R×k¥Úï_9ü¿¾øÝ-%¶|þ§ÿk¸Fm´Fà„BrùwèY=‘‹5®´à=[u9#Õ M[;ÊÕøÁg¤t—öoÊØ®èI×.T²Õ`¢*Û°"¾Jà¾a™ErLå(yH&Bk›Œ(´?¢<È‘ÁŒð“Éb„•=0Y$›Àc{•*Èò«n&¢)8„k¯‰uow6ÉniR+“´·i}Qé!¶V¼Ä’Ö?$ÀÜ…œFLÑû°  J§û1Ê4_œû¤´ÒF(bìïìÑR>Hg³×Pj´¶©¯žÞoÊùÒôè¬1`Mu½ñG€¨'‹Ï´hïÜç˜ô*Z6äÙãÉnB2O¿gÏEFt{å¶‚Û«þµ]ÛÜ(l\oÿúE;˜¶Ö;<¬Áøàé¾ávã°q5’B µÕzz‡ErÀp_h
êÜ±#ÇÀ8QˆÆã.d°†Ó&ÛÌžšB}Ã8{/¿ü	ß”ª×J6`M´ŒMíf{\B¿ËþvmwöËN“ÅæIÅBI¡ŸÀI?|oÊ¶—©U3;œ¿f|F?Ú°ÖØrËÎac•Ys¾¥­¢9É5±-°µjÜ/dw=TPÌSã‰
	ÑNËÎà_‰ã mÊPûØÉä}ÈM#±ýt¬Eôbíj›'$cµ	S™® Ä@ÞÃ#p’·(¹7+”9Þ6ÂBŒš<ä¦¬±~[Y‚5‚û¹Ï1›þUùVsyïuÕ°V§µC¼±¤øo§ýKï8Lj^;®¹(YeºÊ]«ãÚa7b¤ÓÈ†äªI¸m¥ü(ý`IüªŠKÈg¬€4N§ë"£Ó&k ¥'l/·"æ¬i“°™«„T_š‰“7sÍÜ5ç¬‘¡¯UƒÔ”êË«¡:
ÖB£aBSŽ¢Í×ä­iÄk.’Z7ýjßY´Èo_MnP¹ñÁÃ‹»ïnÜ]ôÕì.u=ÉjÈnvØU@Ú7iÖÚ$ÂM»#c›[Õ¤«ä?â¦qÃN³»ñ¢ú¥¦­ÖTSM5õ=í^#mdÙÍ[Ÿyó×`4Yk.½ßXí“{´vI#'_-'ÂuXËda54%¯#œ‰E2qDš.”]x¿à$®GCõzC²Qu’qfBÁn—^}õ—ÌÅ>»tƒikŸ
×>"=äâ½õÝo´¦Ïdþxkõœ‘yý1HÓŒl–óYÕïƒÕä¤©¼‘ÌþXõJ$ò(‰«&»ÍŽYÙxofztP Õcý+3ÒŠ’‡í0¯«'ô´Æé¼*”Jƒ1Q`0<XªŒ”Jå6þšÓêôR•`9[`¤X¦çÈ©ÊÂjDõó:üÛžˆ‚yÂ#³ÅsâEå—uS™$ßúØ±d°V(WÔ.¬f³eM|­”®¸¹¶B/ÿ³
^Q|¿Ëå:NFû¿¦kí/Ÿß"òWÀš2!¿£sM¡ÏÏ¤úçÙCšº„Oi3µ)²'kgù¡¼¾`­T’ãÆz°R,PòÓU¶Gc¬¤£_µ’ ”†±&Lª'/É­Cm‚ÙqÂlNðXŒˆ‘HÂ>—6ë, ˜)»¿Zäp\%“Rp\Lˆ.­w¯¹%§JXkZ,ÈTkÁ¬å©c(Ö¶aïökž„Mú‹FYò˜Ëñ{a!þÌÀŽ/)œtSl$M§ýþtÎŸ3wÄêc·ÐÌï‹¦£ªmOŸ`M®¯q6³™Øgn3§YAls¢ƒ®Fx¿=4`¬i§—,¢kõ0´Ð6n×Sk²Öè2ƒ@|KK~ÆüžéÕ2ÇúûÇ
cüÙn\«%­|}Ç’Ñ™g}Õ/§hõ@\íggF ¼Ý’Æ©½<Ek3ÁS[ÄbÌOÛÂèï1ÿH¬†±ÆÊðxjcæ¦¦ô”-bÃ)—$9žÆ¦›À¹64Áb!Þb³ŸÔ~‹AÚe°$ÒÓÙ›Ü5#4L{­0²ÎnS‡f\[ÿ?Ð$Ö]ØÊVÛÔ²si=º@ªˆ°¬YÜÈ’±b<–-0ù<iýÇ+æbÊ*‡Ô*ÑþJ>íôU‚¸â‘J÷~¡}ÌÁ¦e-ƒ	ïç×ÍXíÿy-«øqy¶ºòà"È6ÙMÏ¬þOß~÷ì&çÿÈpÍMYãXÃW“D`sû.rlX[»;=}•qùçÎ8wm s¶µ9Ï[ãu 5‰$+†V– È;KÀµÁÚdÅõ$pRãªyÚœÌÏ—FóóL`%ÉòWEd¾Â;X†—föZò<kÛ´¦êyLºÝPU'°b§ k8m£¹3éÈ“W©,o$”òÞiÃªuÐ¦µ¸ÏW4áÑÚæ’±.¢ùæí¾¿ïyc5¡š`íƒwÞ~ï¯w‰í¿{¡»‹NÆ:y-iB5·µ‡ÒFÖX$=ZyîÿäâäzÕÖVhT3ý‚˜~Ášpré2PsÉýˆµf·ZSM5ÕÔ÷wöÚ}`¹Ô÷žBýÖîe´öñ/4ÛYkÒÉ*‹ W)¢µÖ¸R £,å¯>µA…kà˜î´°)o$jùLŸêQ­¤ž&3®%7¢7ŸèíÒý¯î_;yãò‡ Ú§Ÿ~ô)æ°Vï\ÓLg£µ•‹?<ïeøOpMaöšƒ5n4Á‹ÖŠåR5£P2“€ÏdaµF‚P÷LXì¥fµ`‚AkÆWŠ iÅR“%ZZ•­þLPªX+Z+5®» ¼µ0[ANjÇÔÆ–¥&t€á^…PHoå*˜R«	£Ywä ªñª±t£€ê$•­˜œá-…aYU)e–`é|ˆð1|¹P¡œTS(ÖŒ#µÉejß‡ÖÖ.,®Í­í¯¾ù¬BRÉ¬9âÚ/V»ñ—ß}}CÀ÷RIÇ<¥€/1#¿=°ïÏ~íY£µäñ?ÚS	'É]ÛZÉ&ŽkàÚië>IŠÁJ×JÙâ5ëU«•Ù®ÒX—U¶Š3¤>¼<4ë¼5¾S¼E¤1Ø\ p^B3)?q-[Te'
¸X’¶6hK£0ýnš¥¦P2BP$ff,B¥ä7Û±×Ùöhbk!@d¤(ZŒÂjxºökÇQ‹j  •É:Aü’Šî–¢¹±¥¶6Uìª_-æT$ÙI	d*ÍúwªîÑWK9L3~RiäxšÇ>‚B†ñÐ<I}ž©†ÈßOµ³IååNÐ.çÇIXcWÖž‚ÍL<aÈŽhi@çý1²í¹½l25[´öÜÌª¯s|Z‡«v§øÀµ^¬0%„¤ŸKCQXk›|Kª&tô£ªDÆ¡T*l×³ÓãýpÝj8b¨ƒæ¶ô8µ8Ïè“îcOí–±:¦:¦pÐà4(ÑâöSÃz„·xikxfž¡ç1¢N?°ÖáÜ=ŽÀo® R\g£×ÌYS›šžÁ)ÊQ_R¹¤‰ÍÕ%œ3îÿH8nÌÀfà«Þü5²W¬‹ÖÜàÿi_,ÞßOºH4ªô<¶Zå¸üµh¼,Z+‚åÎv×Î–É'#æ¾)]Ö›¥Öa# ÆÍh­1ûÉ ÈŸyýj÷g®Ÿ9³|n³{ŸüÏå4»ÔÿD×ÕÊÛG_‡®Lk@–³Ö^0+¬Ö¬Ajr¸®òÊçN\ýÙõ‡ooð¶YïZCï­y°Æøé˜’üõYO(ÄàÅž°feg«nTvéè5eùÏ;ÖtÇTÓûÑùß.ÖN]«TIaN>°†‚y¥ô3X#£_»­	_Äk-Díb°²#DC²&,cƒ¥ÕxD¬›lÍ†«y³±UDHï£œáFkó†I´Ë@qóþÍÎ[3Xk„ö3Ãî…=pÀ«T¿Ú²F(^ä„’0üœ™ŒiWÕ¸q’ÛÁQ;² þîI![’úÇÉþ`¬MÃjf©±$ò‚¬5Åõ­-Ö~m°æ•AºZ—f^SM5ÕT“×þ‡Qšf¯!VøGã—7Äj’fc_@f­I¦ðÖH¬(Mgx,ä¬¹kYúØ05â¢¸¨òF¤V©…­‘Öà@¶+ˆäÜ™³'?y:š;ù€¦µËÀÚ§÷¾Âd{pÿ‡×Ñ[„ø‹ÖöY)¤—á`ÅŒ»öHpa)þ¬YÖHKéÔ©J´¦¬–X0O²#hfOB¶š¼1n	j$±×4*›Ð Žƒp6Z :Î–¥*dB‚=VÒàÇÕ[¸Ž–.¼6þ†"(0˜ÀlÂ%«Ž¤¯Õø«Ë™‚:ØÕ¿'ÐIÄX`Š|Üò†Ý¢óÅµ©Ž	W=MÑ¤¼ªP6“¤zˆk {áD(Î*ÊW# {¡´6w§4»ÂÄf­™?fã’ïßÿÓ¯ÿô`óg¥{Šð¿|Xû•Æ!xàûÆ?Cko­=Nð¯!ž.=©U 6óÚò§«µŠf†‡õµ•å­Ñ¡‡É¦Ö5Ñk%Ñ…ÈÁZ¹\*â.…i&êAKZ:±{D,«‰ãì¬Ù2ðhÎk‹˜ñÆˆwþk%Â™€fž¹fÃ×C76ñ¾†‚n ³¨2úÝìx”DHK»I§±Õl@;ë¹(¹þK±\o—W1¥½`ÚPÚ%ÊŸv53É°Ý 2sÈÒþÎ^ÏTcRãTjÜ\3vIjiSÓ`¥UÖ8Et—ëóÆ®yÙü†i¶ã	qXGÝxôNwG¼ilìêcÜÌD13½r¼”Ìï[6‰Ö ª”@‡×UhëÀ«rùŠ2²X™¢­-MÈŸ…R ÜÔnóÐRŒZˆx`•ÂAÃÓS´‰Öø@´]N[:¦ ‘ýÏiÃ”=Nm	Ö¦YÆˆg!å‡ Ÿ¿Ýta(ÚOq¤mp†Ý=¾ã˜6áÿÜÛë«¨a­‰É¸yÛT<îXóhû‘Uß<µÅ…­2ÖØ±ç	ZÛAk|N‹1lm,µXEað>è’ùûq`-a{ò_LÃÃüE¨7Óœ½"H±°æ±ZÃX£ðñ“ëË\¸ß»²ü¡àB€ÏðÛÁ€QJ·/Þ|kª!hMke¬Íi@˜zÖ€µ$½«¸»Ó+ç€µ·ÞiXk¤‘ˆÖnëx!³×þ—ë¦cÓ´¯…zª]D
©Ñ¼¦BóF÷°f9þÆklÙÑùyÞgõ¬ät­ªQØåÆCçùš¬R[Œ!‰Mº;çÙ5tþ¼aÝv$XÃ.kÀšÀ9@sÒOˆu%Fz	þü§²FhŽƒrÖˆ¨Ü<Qª|+×pÖ\¿š’ )\D?Ãwß€Õ¬mÜ]¾øð¡²Eè\ëê>ñÎÆ]æa+7ÄX­!g²íÙÃƒƒ·Fp¿³Õ(d+é¼îkb5ç¬Ý¹C®ˆéª¤H'hÍ±Z=¥Y»@µæì¦šjª©ï=¯a°AguZcÍ»,‹Ö¾B®kM´ö¬-e@5¶”ôˆ%q½‹[5Ú–[Ô9µ0ZM°Î%Gré÷åbŸ<øäãKß³x|µ­c÷/tãiBü?µ¶QêL/¸ê÷,gÄC¸†ŽÂk¸k ¬™²óó”0Z?—î…š¨ÌòE”áÁn-‘X†±Ö­q8o%áŒkˆ‡JËea©jØ7¦}*„ò|æRÇacq&¯•“§KÌe¦‹}Ñ‚:¼4FÛüó±H$¬Q:˜@(]Øee58ÚR#—>šæšjÆSpX“¨âŽmÇb(9wàÄg×î¸úÙµÓžµf#ÓÖÐOo|ó%(ß(ÁŸÀ_kè=ú0¾D¶ k·o“2òúö?"÷\	›’›T92o:Z9}ähåÿ±w~±Mßéš_í^¯FsiGI¬(Q”›Fc3ŠÜêØ²ed49‰	BrIãb¸¨ÐÚÓ¦4áˆ
âtlDº `†Øm·EIDI(=´ÓáO[Z¥jh…"!¬ºRw¤½83+íçy¿þa˜©ª{?Ø¿ÿqB†z~?ïû¼êßï$2EùjªŠ´ÈŠâùkåÈ@›)UYšÎ^ä.ÐtFT¨Ñ6£’Dòi<5M\K¥Å–§02R…µÎ¬Ñ‰k®AD¹.œ
R!kŠò
Ï:ž©¦¶ŽÈl$†µÖQ-Oã4¿_èÖ?ä·$?Bl2×´¢È‘yƒÛvõZ}$9ŽÑmpÖ`”’ÈÁ]k¤„È"ƒ½ 6ÀÅybÝÝ@—œ²¶îA×Õæ¿F|™hM!‘¬q–v‘õµ±mð%ÕrFØöŽxâOîz‘ß€w„Ô~5¾õ Ûv&dPtŒ©<ðÝ±ˆ
(·íÞ¿û_zñ¨|—|{$ôá X,Ó’×‡¶‰’ZÁ®ýû[3ÌÇ&êQÕ‘=h·DåãËXkú[ô®‘ 	øaŒ©’¢Ë_ôtgžÚþî\«
.¡8sÖ\Gšµ©qžÄ<)/>ÄØQÄ«Ù°­UÃ&‘ŽêJeœìHŽå¬íp%‘ÎE{¶Ò“Žc¤i~¶¥gÚln«ñÕâÑF²FV?ÑhÉ6Ñ¸­Rô­fK©}¤h–|86K‰7?>üñGù@ÂóÕžQ¤+‚ô²En<ºAoîz 2{w}~.Èÿ]–újµtVÉ'cµ7•Ýï`mRÆÚaXM5ŽÎšZ]Ú:¶º ¬]›¬m.œ9ã`¾pD°æ^Æ5¤^¸y7E{N}wåÀl£Ý™ë+{!N‚5å÷h5QÙ~ûüô‰lÒx†¯1{€KÌÄZ!¼¯UûÕXðLÎ°ë[óD8îÙn^ù#Ç0¨öWé(0CÙÄy&/rL
…œóÆ‹3¤O˜Và-ÑhmØƒ5XmŒpêLÅÎ_ª]í·
‚ÜÔ®_¿LÑøÆüüý?ÞçÈR¨3>×J!Õ<‰Õ‚ì[¦ˆ¾½á"Çƒ¸jsÈf`CjZ¼í‚ú•ÛåÑZ5û‘å-‡jg½YØ¦Ÿ×+ ëª«®ºê"^ØLnµ,hÃWûþau:¶Â «•/èãjFx48á~hÿÌ–ÚWGš³>ÌS¼ŸÙÜGã ÜÐ`ÔåÕ©<m/÷×W][øÑ÷Òlì›ÀÚÃ‡Dù?º{~+«„ÜØÜ<®W”¡ÑšF®ÕÜ5ñ…«ÖA–0bO0'ÍB!¹÷/WÎBÃ
™µ1FË&Ã@›ú×èÐbiýnt»	Ûè…ÈEŠå„zSŠîT7¥" ž[’:bi<8æ[6YÖr ìV&­œg]Î+ÍàðÙ<ì
°ž5Gˆ2(£™`@£p5ÊRËŽe¹¾ÄšO½QPsàänCìÜÿa¥òÅáÉS3c*f­yÀÕNÅiø_Ïýï>£smãã>†{Ekxk€ïqÀ÷ˆüîƒ=®ªã7‰T	É  4´W>1}²RÊ„sÓÔ_^±6¼²–y¤ÿ ~Rb²^UTÎ¥ÍTë70Kò@[š^´€Ñš‚H†î&HDF%[s¡Ž0›aÁhKq¨3Âù§Hq+ÄFeÓ×Lq)1Š,i`­§E‡ÄeÛâ´.ŠÖ†4‹‡Âbb4hKþ ÖÞ(ÿB)|²¦309ÀÚÆ6g§)2ež5Ç{ÙêÅs »hƒ¯¬9<ã	›9¹ÌKq°fØÅ¶–¶öôw°æ­¸Êäv@±×m¶Ú/€µ_dá'<.|±ÅÅ;Ý-ê,ûÍë½=`\OË¢‚ï´ˆqD^n®™—¨¨%H”1ZënÂZƒÅ°Ö”¢ò—sšrwãê!µ¬Pü(ö¢ÂQ-jÀš¬5›¶–aÁA Îp­•þ5};Ç`ûÎà¬Ñ9ZI&»ÁøZ[ÙeÚ€îœµf?¬[¶°R¤&«µºî»ÇšŠm±ùû/nÖ~D\¿è5·©ò~ÓÖì·Ÿ`êH
0lÌÉCKgKm­Ñì•¿b”†Îe¶OgÕÏ–òùrAË'
y› 2Ý—V´MßpU;ã?Ñ°æ²EhÉ½¬ÍuÌÞ½~c¾+Àx|À€BH´UU‹žä©¬‰ÕÖ>7XC°ÃØö€B“KÔB
Ö.--ÞÖ.Õ`íÕ÷^±÷¢Ÿ›UÇX“ŽNœÂdÛ£€È·„H_cV6UÕŽÖTYí:×\±ùJaZÞÚ×ò×T-döZ!H RuÂµƒµ¤êƒ¬ñDœA"23Õ0ÑXé¬]cÆ_fÂYk,Ç´¹áœí	Ñ¼zH¾•ebâx¡dö„‰Æy3XƒŸ$æºÐ~|µ£Uv>Î§Wp­r 7ßÿËe¦|¾¿qys~ý/›sgÏ.Qæ	{a"Ok(ø4¬ÙßXsI¾ä@JÉµä@Ú˜òõübþCXMºKX?½j–ÔïxÍøŒ=¶´-Õ+ ëª«®ºêz¦ RÀæUÊóÀY»‹>×Hï¿ê¼µ9Ã5Ñšg¥!ŠÏX
ÐÌP‹Ñ¥†}†qÆ`hïÎíÕíð—Ð0„¸Æ¯«du`ÀûèúÝ«ÿôîÃ›Ýº¬ÑºÆƒšH9mÜ~lllªãøñ}ûŽŽÁ„ìïÆÜ˜°cÝP8¶þƒPHÏ]Ãk+ä²Ï”ÖXL œ3¥Ž ]6{M°F¨?G0àtŒGW[µHC8¨I¾”ÌFp„Idü.Ñ\8\„R†âa%•”*pL¨ÙŸV(øÂÆ’eðLëjNå+e„å¾¾™$ß HkNaÑËèuå h‡êBÙl]VN“¡	ô)”I¯/ß>°UiORÌÈ½6õÚƒ¥ÉwÞYåŠ$ÄåºÖN¸¬ÑöIyýFHð¿üñ˜kJÙ :JÜkÃ—¸]#Å[	þ3éx_…VDác–ß¦cµJñÄÉJ_¦öWŠåÇ²•i0ZC¬Òi­¥ ‘4Ð©‰Þ¨«Hñd~¯Lµ¾>ŒÈ@GžBÑTóxCÃ
ð7VÌòi†	G¸ƒfáÎÙ|9ã·ÀS%È¢þ›;¼](7†Ÿh×x€µ@@ÿæúEfÑ¨úÖT“µlR£uGA8Ô´·;mÕÞ^`KðeaŽÚ€»¶5ráµu7é¼NË\óéA#‚5ï
0+¼„·³Ý¶XÕ:Õ€µÇh<l£FgµŠG$¦óŠ%mÞÚ.wHÁ"¿‘ØüåÀÁÖ­Hû`:t7æÓþƒ@ÓãLF¨ÕÈð´F­	rÔ—æ5Ûø QÅŠ=da2dí Ö„t*Åo;¨ŸV¸†O(Nª1_M¯ƒ˜œFo;„ÈÓa0^ô{®­MÓÕ,Ò†Y;6kÔÅÈKñ~G0“muMÂ<9 “Ìgc6°¦«Á¶;­øc¢.6ÿ­£F¸ï]`Úã6òúï´¼0·cÙÝÏZ´6—Ì©wÌEc¤?Z°H1×Ø¨2Èl–ZáÓa_\i?êeÚ²±¦XÉ}°“Ro+~8–V²ã4Ö~2\gíî]ÞÞ-/“ƒ»0— Ö:ª°ÖºgVm3ãá:×ä?æœ5±Éý÷„Tóï—nèµ¡4`­–i´†d­IOAàUZ£‹íèïx/Sä0ŠyÈÀt9\Cç5iªPZ±æ5¬Ê%ÍZ+qÖÖžžy­ª@7ZÀöÔ’ˆmâA8#Xckì”óÚl·ZÉq@b·*;Ä‚Ö¾jk››—í^"t ÿ¿tâüykÝ:)™±¶³¢t|µ+Vù¦«I½ôÛ3´òÿ0—6°Ô6þòþòüýµù`í€Þt­¥Ö¥AÖäXÍËAkÂ4Ñšú.ÒùjókK_Ì?‘Æª-±ÀJûc­IMòŒ5* ÿS]uÕUW]u=lŽ×¬Q	i¬6¯ÇÛ­Í¢-á-šdå	$…¡fÁ{
ò5Ð†oÖ?Dþºw7Èpâ˜6Ej\,×Í„ÕÄx¯ÿð…Ø»ç^¿zëjôOÖÁhÊ…¼F‘bàÚÆûoQ
IðüEî:ªÁóš¹æz­ì~B|¡ø~£5m8sMCÀ€«éó
±„Ãº¸›K%s$
€Œò%ëbã€ N!ý‘ˆ:ÕÀ<¬°"Jƒé¾\Âh­Ž”5· ŸÒ¥"•DCC¨”/¨--˜<]v=]A ¯¨ïÍõY*ˆ8¢†šËÒ’"9ŸKP EùSGÈ`SíÊ˜UÔdÝm KnXäÊc”F¥ñ_¬’/ðù©,Ÿ%_©Yk'%Ò)+þqC£±øáãÍ"!k—ß'(nKôÖ \å\Á d( #µ¥Jé˜ý:yVŠÔ7ä·‡¦WÂÁ“çÏŸ¨8J«®ˆ<aÃÜ5]+fƒÕb#®¸7_–Z¢3féýœä«é#6<®3†ËòhgÞ}~è`ˆŸ`-,VcJvçÜH×:™’-XóŽu2úC—ñÙl 9k"6‹…„Ípo‡|ÑAfµë\¿ÀKÌç“÷&šSÐ>Ì¦5´&º2=±Ä¢Ý{Ýl5F[iH†æZ[ª{tš7Dq$kÒ.(°úR\f¬æÁ2ÓâiXû‘6Ëïße¯‡jÉ#ìkÚßÝúûÛ!©LKïo3-Ïah	!-|j{Œ-Eƒ¡ÈhÊ™T’ð
BãZzÈü­ÆjœæøÕPÙ£ÊGä¥@‚j/ôdZ%¹Þ-²¶IºÊ2l[m¢ûõ²2Ò!3f”q¥ÎUÝ3¡À­Éa„Æ†$ON²r”`òe’‹ì¿£Öä=ò¥2Ô¨k|¬(‘gE¤’ù·ˆÚo##ég©êk|VsgÇÿY)L$—MlxÚ)â(‹%kKS¼}1§$’·|'ÐŒiØzÇ ªº­Éb‹"ÀZ;|ÞÁÚÓk5V«…‹H‘]__¸.n»4×•hî
vÐµÙ¡¨Ã{ÿ<a˜Áò‚ûß<ªé4I¤Kî§o$Z¸1¹´ °mÒƒe¬æœ5É®g¤6¥	ö¢n¾6·´†ËvtâW¿ÃžÒ˜ý]¥ùû{\›²
ÈQWÅàXí¤&0ò«*R¢mH–´•ÛÊÚ46ƒ5/ñ˜~Õ¸nf§­2ëÚ‘š@ŠÅ&¸äÙè~;pŠs¬û§&öª9XÛc2PÔtiez¼Ÿ×œµ“V¥±ÕÄjÉ­G_ä÷àe½ð^ÈÿzðI´ˆ˜‹ ‘yA™ç¨¹¡—Z8íœ;­L_ÂN:ª›‰Ô’k€-®©[[¹jš7[e
ìw€Æ£Æjõfµºêª«®º~LLÌ¶ÌkÐ¢¾Þõ­jk®’ §T>·±Vë‘xÈ<ì¸$éXêêB±¸š‡tˆé“gà¦ûh¿oˆ È«1Ö¼DÔç¿ê„·¦ÿk·Öå­©R-6"{ßa>!~ó«¯\ÎˆŠ9B^2´ÆÓÇ6ƒ­½|‚íirCJ’&í4w]].@5wþ„âyà¥¢DÇTØÁ)oiÍVãO$V1¢hr­ ÿ4ÈEÔ£þÖ…92tÔ­åÅq3WŒÇHâè+f³lÒH1ÔW
šUôØeü¦>¸rÂƒ!D Y“‚52G4jÍZ"4Ág¬4Õ*uåGG§VÆGÇ?ùbT¸7ßüîÔž®Ô~f4’îøÉÆåo)$ýŒ”‘M¬5pÍUBªR÷pÎ\û7yèß+Ë•ùrÁ·7š¶Æì5ÆaƒlúµRû„UPÁ_óLµ<‹r8|r§Æß¾*š•„±"‰
‚Y±Ï€5è,A²c^®b˜ Åú÷32Ûu¬	Ö:ÓðoNp6IRñH‡“`.v`ÖN1‡-Ði°‘³Æß¬™ìÎWÉC[|™‘Öëóûd«¥šûáúÕTþŠ°ÜtÚ‘K
#Ÿ$9B]kÐ[l°@Ú$Ú‘WÉ8"ãêÝ¬´=äkê¦öPn­©¨Ò¶8fuf—=/TÉL'œ¸àGpÍ61R#ŒÑ3Ü,Ñ_›»ñ°ØÁëêaÛv£¦Å8™¦&ø†ö.Ì62üøXµ¦œ™e{.s¤‡yrš@—Q|#^—)£(HšØ”^2 Ð6Åjt®qL ÔÊz~÷sF`™ƒûù"ã-íš…fµ‘.Îß@Í@¦³‰ØrÛ¬)D ù´ï§Ð~ÖÞ‹ÙQol¶“%äÒ°vcä g±µ|Õ=ÒÛ¨ÈŽÊS#¯cÍõ%ÂÙpãâ\²”]ãSšT‘Vµ8±ˆÝ±â•Ó®ì1Ë‡J€Är
R™M…7NÄì2ÛÎíÜ	´§ÓÎ\Ûù«ým¸ˆ\5ö/Ì&Þ^Í¯?‚Î&»ºx‚Õk{¶Þ«z_b4kà›œ±—ÜE?ô¬Ränÿ_Z˜\½„³¦6ß‹ï]¬™<X#™6Ó˜6~ 7=VÚd²½ñÕQ%EÒ‹…x )³¾˜.«>2‹jÑÒô´¬µérû¡©ŠÞæàµJ	Ë¢µ6:¶J3Y±VµÆ©PòôL–Òƒ¸	øŒ“•4¢S˜v<3Ííùk.¯ŸJHa2˜Cöc§K+ãŒ‡nŸ’ª¬¶²B“­óÕNšøÕ¯>ÿüÈ…Ã‡/ÖÞ-,¨€cóþ[ëÙµ1R5i_»?b	†i¶D™Ñor0§aÜkIwfÎ“5¬}áÅ@.!sÕ––¼H7	[Ko~Ž…3c«Õ›Õêª«®ºêúi‹ÍI¬†˜µ&­¹:ÈHd±¡*°¢qÙdqV}…t0ƒÆ´ÀßÀfóÃkÒ“Ô…ïr~klc`¶?NÄÃÞmQ:Ø µ¨1êtýÑÍo>¥[íá÷7Ñõ[ëÄBn¸º«à;ÂméÐÚ•B«2r¢¯ ©k†jÎ]³?ÿöêŠÿ·óÓaÀêdÅRûƒÇhsr ‚¯Ö@²Vè¦€~9oÊy„uàÑ#	_<W$5Ry‰ 
Y‚¾UFÂz	¼²t"ˆKF%R7¾X%ºÔr/cÍq–Ée“-bŸÑ&u¶tZá×A¥þUB	O‘}µ±q¶¾L¸¦u×‘mg 6®ÚkŸ|Rxp–[5æ,½ÉÌ´	ëZ³~ÆbCk¸±tvsiy“Ž5%ø³TßšZ Mé•BNðÕ{B]]33òWfk—Ò.ÎÝšñ§Â+²"-DæL5”' 2‘[îK'“•\‘_§ôÁ(«˜òùB_¤\ÈÓ¥&—,œŽt†÷îM§úöb¹åwÆ4^­35œæ\€úP¨6£tÐ¯¶³ñH„;g‹ÜúDâ12Òkªƒ¬–AªHI>Zª£ÁŸ
°%LãI›óqcCQŒ4}ŒÐÜ0$Xó50>[Ùý‹þ!8óÖêÖ±Ê@Ggl³êÍ°ky‚˜¶vùºÌY¥ …Õ2ƒÄú|T?zuRÍ“°§œ_6`_$=å¡iûÇ‹œÿ¶½Ç»Ð‹±ÂD’ü_§ËLU‘¤ñ“üBf,&¢
‘@ÙlÈc4yWÚe¡Î1;“‰vk==†SÑ¯‚—¦iâõvâ/µË·cI‡ügFÛÀ~ñ(¯Åò÷«!Fp®)m?¹”ž%f¯î¤ŸF°VÝªNÆÒ9Xc³&{I»Þ; ·v"Ã¿å1õÎN3dã±ƒÅÕ‹³*x\d°Úâ¬0DâÁµpêÒ˜hô§ÒxÖM¡h®D¿ÚiÀƒw`-+Ê‚ÝNãÈ'’IÕMç"±X‚­)¢]óí¨Ð÷«)\Vƒ´já"Ö–ƒó×¯/ß&ç µå5½t¹2Þ,Hä©†5õ—ñ”¨œ˜¸wÏùjï½7©0ÈÕWß»7f°6yIS±/]\ØÜœ­]¬YkUXƒóŽ¼q©˜òÈçxkUob¶£¼— x·‹Âº"¹\¼j¯Á<O¢!§¼þàÛzŒO}}{êë¯oÊã£Ã¼=òkUp•¶JEuÞ:VsU’3˜“§Æ\°ˆøKÕÁol‚pÆn’³Ø“Ž NOØU¨½ô^ t Ë­éô`Í¦GòwÈ•ŒÕ¾ûêElÎW.Š+Tƒk­PõËÙûùãÒ}ÑÚ[›!ùd†`î­šýŽZ®ˆ–ˆ%vh@×Y¥zcØj–.bÖÚ«_ðTÏÚúB¨¬Ýµ™¦rÕkž¡¦…`í£z³Z]uÕUW]ÿÄ&dóæbH%¤4‹Ö#ºÑmˆ)«#™­ù5JÞ”õºÀ¼Ž8;PZ­ ’]?PÆVœØÊÑ4=›t‡~Ÿ?ªÉsçâÑ-Wï>º¹ÎŒìkŸÞ¼þèÕßÊ^»­-ŽqÑ¢Íñ×Ô?£¾qYB
†DÕZH×@5ÝQ¬ÐC·2]g‘ê
ƒúù•	¬á¥ášr–;’ ê1¬Ø€íl”?år1¿/ŠDgä±kxF~Až9h%b¾³Ð8„ÙT¦Š
~áx~§1ŽJ­ìv&iÍèAÈîJ²X.±ŸålzÃžêòeÚÖø^9fÈbRh`ßIñcZ7KuAœ=>ùÉƒï¬¾ñ•òûùM¸BH/&„oöÁÖ{/]Ü ÖÔÿ°Ñ¸­1ûÿªsí¸náŽð‹ÔW'ùr¾þýõØíùÜß¸;³q‚XUŽaO·ƒmÓü&kàXº3TN¦^Û™/–Š¡d)”µªÎJ%aùþlGTÎèSh¤`Ò{‡ûwâg©@2&pÃ-%-¢„H -Ì 1¸+â¥éL k	&SP\'¾š¹j#,Q'¨&?Mœ&cÍr%›yÈÓµRÛ½ê^S4)ÿPwoïÐ"uºòn“°Ñ†z­ r{ïöm¾(n˜¥ðkþuFHÆä«××ÔËÍ€3ºêm‹RE ¬é°^)ªd«Ö¼ÁØ¶á¹jÞ²vÀé¿x…“Oi ¶²+Î¸û»vAQðS°S™isbªk„¤zZÜ.¬fn—Õ.JvbëiiÂäºV3»32y1¢9®±›ÖÙlª”Tý%ÚÍL;¨c(C¨[^¡%å\À×	¶DnºÌ±šÑ›‹yÔ)ûÑ,-R×ê
6M¬õbÞõÚCnËdÇ©ˆÜš™îÐÓÆÞ[ÚDm##‹-wxó™m£ 21g»Í!³3=•SÅ#ŽZ´¥%TÝcIžššžÁ¢]‘ÅóúbXêlŸVx¬/–PëZ$e°¨µ?Åjaù#kKsëDA>š%—­¿ÀT¬Yãe§Í|Þ
™Õ‚ö¥jÛÄ*‰"¼¬&>¼ºöê«÷Æ­]¼qéþ‚¾ËÙ­^ªyÖšÇk¢5t0XtÁµÅqLç\›ý¯„HdŠð)ŽÇkÒô”¡äŠ"ÛÇoÃj_Þþý(:´2‘L² –•.f+íÕAŽ™’˜nXkìUYÍå‡ˆ·´A1§’ümM8qQ¢É	®•0ÖBrÙ\Š?+@‰&¶PÅ,?~J‰Ô¡šå@ÎteiWS¿Úç¯^€Õ¾<óÛ36{ƒÙjdæ¾??·yùþÙ³k¼9¯-¹8~ç¦Õ\3IçÖ¨Ãƒ8.0,2Ç“`‘Yƒ5¹kbµU3Ö–hU{*±D«Ê`­>Y­®ºêª«® ØþóÏïJzÖkb5óÕDk1ŒðD$Ž™µF"½‚#±ák’suƒ)&”kàX´!>hiQŒC¾½CT¥‰ãÞýèæÕhüÛrõûëÖ·vë‘ú[cÇâ„ s×l®³ºágŽq?ñWÕxN×`?ê…—*}ãíÃy5ž¹x*#ƒ–ÕO#›ÍÇÎ¢®„¶8
·iÜwBàç÷óÓSû˜&N³×J"¾°–ƒAòûK0V6Ô••–ƒÛXT‰u,›ìn Of›àÌõ •ŠlbÌñanI¬ÆŽ|¹`®5¾]ŽÂÁl~	Z™¦À\mïJ®Íkg?íÁê„›•µV£57"­´õÒæ«/ùì³¾UhI#ßò›\Ø€Öä­×=÷hÀžUôõ3`ïLiE_n!#í˜«?	«áÈg;_¨”àU6rÆ§^ëË-³:æ`AÚš/—…å)2aN)’ló~ž°Z*NÅ¤ðZ8Ñgyþ\Hq0HyÈµð„gçfs$Èw ÔÐÜ* A¶€(g,b
…äë˜&ùù­ÚïLCþüúWijCÚÕÅü;ìUÄÍj¾AØªÛšóù{1ØkÛ…ehWÔ¤Þ&œ5ÓnÕz&ÛZëõÒ#=qF§yyÔ«™~Ú~„ËžgKKV,¸l7Æ›&²EZ{yIèá˜°G]kHÃªŸÓ† ¬š²hÐ¦Æ6ÉáZgÛP·9bø[½2w;ažYÚ$mgü˜Ì¨n4XSÔÿs²Ùø:!morË­€/hm`?3¶EwH×É6£%Mýr2Ñ7„MÔæ@Œóâ¶§¥k5Uí)<Ó¡šà2œ¶e{;îPùØ†_ï rÇâÜlŒ7±ÙðÚÜ–-âG©Z‚D¡Ä\+bžejR³$ÑÚ•bª”æ4öƒU´Í‡bŒd¥`ªÉQl;Zr#Ö~‚ÕnH—–ß^^`öwùg×º®.|5¹Ä°šZ»V«íj5«I.[Äâ k“ à#]¸?f]kïm½‡ËVÅµÃÇ÷}yaŸ°LÓÖ 5Áš†µ)]÷Â‚"™ÃÆŽvy?@:Â›‚xí´}ŒSë^óê!½ÿC£Ã¥qeCúý!S¿?Ä/¦PÖ'b2Ê4!{Œ·é1$hsCÕœTÒâÂ›pMlÚ3ÍáâBƒ5ï8‡å»i'Ä†#°¿T)í	–OêÇ*”kòÕÆW«¹HÇjo2_mßqXÌ*c5ªÃÏl\»¾qmyãþ&CÖB’å‹¸q›mJÉ¬1p„-·—¬ÍS;;Ç&V[“½¬Ajæ«­Âj´ªIË5ÝòÖzÖ'«ÕUW]uÕõÐÚÏùøÏáš¶V-‚$ï>3áb(þžjF?ÇòºCa1äwÃ×ßµª57×ü¬‰áuÔµùöÆ‡Ô±¶øðúÝw£(öý§@Ú7ßÈZ³¤‘ëÈÌ5©éÍ\;E©%!jêš+Õqc× ÏZ»íJ!94mPÃI)ÂµªÀ²¬’Eº µP¶tƒá8 ž'Ã›Ö«F‚\"o.Ì5t%r%«I! ø;„Õ¾•cxtPe‘hgAÖZÒ
Ù,a\Ë¹RµlF	"TÒèCÛl®(X#³å+34Ž­Ü2âŒÓ=’­Lò‡"Ÿ¦¬Ý[ºÿñ•wV'ßpE¡Wž´­•Ëº­ªüŽê«—^½ôÙÿüìSô…7Ø¢@«„<Ã}Ü+þüÕ_Ñ(îe´¶ñ^ßpuÂÒÊk‚5<;WXr'TTÍ& úS‘òåûÁ©òÏdQuÁâÎxú¢­-D0!EdÃ{Y(_$Œ™æ­åu2&VSŒ^dK‡Ý€€Ò8ˆKÐF:€5›L¾šjÇ"1D$íEh$sÄŠm-Œ´¯FÝ±‡k{ÑPŒH’8¥¸®cm—“MÃ²›¹6è÷ƒ>2ÄlJ¶±•pÍ£0`Mî‚Àº£îB;£i{ÛløÇÕRÚ…=ìG3»æ.¬2œ£³­y	‘níq'øÌ–‚µíÆf8n4Á±Û£oËyHMÞÝöàC¤?†Æ²·'#Vc5%±jÍdÌî2G‹³<‘‡B‚µçªá¥	Ö°ß¬5íåçw·ö0`Í¥ú“7rP¬ÅîA^ZƒÙ¼~´}¼4`M‘$æ¬ÉwS‰7DMt&Zð8ÂÓhQ¸(äVZhUÃµÇ‹ÓªöDÊï7©XÛÒÖò¸¥uqZ#ÒHc8¾&¬Áh‘¦&Þ€æÖ²$½f‰	RÉœÌ
»NÃj‚µ’™g¥0 G‰@‘ÍTS[ÜÞÿ|M15½Æ ·&_Šx"&VóÂE~*´²»…åu`íþü­«]°¦sà	à)}® ~í	ªý-¬a­6k`È50è»U@ˆBÈÃ«õ6IÇšéâqÞ.k¦W˜Ø–ÉE»÷ù‘Wˆß8ª3ÎÎi_¸¦÷ñÚ[…®§í-Öë­If¯:4Z?´‰Õ~?:uè¶fy­‚Á\ëç‚~Ÿ@˜˜Là6Á¶À4iÛ.o"›ð.ãa]°Øg@8,µƒÁÆJ¬Ú“ÌVÎO—ÊkXM:éùjÊ¼¯±¾«ªk—Ñ[{6?ÞXJ®-//]þË·ËsUXcMQª—-¢å³eÞ´ll>®¶3#kÕH>ãdi°fÖÔØWpÆCOg-ò£Ÿý—:«ÕUW]uÕõÁ¾š9kÕ4H>²>Ç`ì"·+rÓpžhç²v´˜lµt8Ým, O#¯É}ôÂ#oQå<Ø´µ¸¾ÌL7–Ñ(­kÛú£±-·îÆãç^úÿtóúµ[ÀºFßšpMøèúòK›¹¦¦x6],q3Á×½+'®M+adšDHdÓV¹s2#¦òätÚocÕ(|Â_‘‰ÀžÖÉF³ƒ? f6¥~à …-¤”Ségs$Ê–TAiu”4š	Ý4×ßŒåTJ„á¾DÏM9ˆÖç••ÖòV		€ñEàûòµ‚5Å‡déOÓÝƒÖ4`l,/’êÏ—õýao>]n/P9^œ/Ó=ŸRcóÎƒñ×Þ™<RÅV£5»¡:V¬ÈXÛsïþ&­3\üS‰™k7¯!îN6ÞR`¸ÆïñÏ¾ ­½h-€ÐÚL™®=­´O#g®ÚÏ«}-e+•P‰ÚHÑYÞL4y…%íƒ]ú¤ó•|®˜“¥Âh]à˜”Ž³Ðï%ßÑ‘ê3l‹©à1Â¶ª Ys«›JÇÓŒÅs;d6Y*§¸Juh
6°¦XH¢F¬ÞÙ„vVRÊ‚ücQåŽÚA+°í×t?¼µÓ#þÈ3N™®’KñÝ@§nß ‰þþè6Â"û)e´¼}žÀš»FT2²)“Œ˜~7mm©xq:­ªydK› ™™‘^jÉÐ &fK@ ÐeŠTŸžô]z¸ÐCµgóGÑ.&+`©äµ©ÆÀú%ÄÖ«n4¾/ãÒ¬]­Û°©­»;#ÿÊc²í	¸ÀŽ3pM”Ç1I¨çPmàeHlwk¦·å9l´—ÿ‰¸¯RKXË|¶Ý=¼ŒhÐµ¡íþ ÇQ/?‚ÀÍÕAp)>„˜Žé‹«Ìø$­Ò3ÿ¸Ô9j¬<pódÃÕžf5ü:†¨I:Þ´¸ÃN«‹mdÇc¾c"Ó<‡£6‹™žŠÍ®ÍQ”Ìç-ðN–QÆœPþ#•aZW5ÍzWñcÊ¹r%O%JaºÔ|ø‚¾x„%à&)¶X.óÜæaÿh¤WéåYÜX^×µ[Ë/:tï/Xc%èìÜ3)ÕX±Õ<X£MŽ­Ý[3Ð“&ï_:{qA¥JA¼W2_Ÿn½"M¯à,¶É#G^©ÁÚ>^ð0›l#pN©‘G_$ÐB®»hÍ³×lðþ´é¼Õ=Ž—ÚÁlè÷<G§*TðÞ†®€a§d›é’¶5Q…µ	äæª™çºãG"±çdùŒÜ–øv–®à(ƒ,$¬…
Ó¦«ýU¬vú	«a%ÖÎ«‘[u™,‘µµÍ/ŸÝšœ[[¿|ùÆ|ÕNãif»ŠzdË±É½¶–ì°»p.4R»ÆÊk
íŸ¯j	V³,‘ec5Ö®KMÎÖQ­®ºêª«®T?»ûGŠ6°Õ\x¿ëZ;'XK0³lq‘‘0µ„¹bÊ€+M»Z*‘‚áªÐ4Ò¿ÓêÍ<X‹#Ã4¨ÍâùÀ5ŸOõ’Å&÷ã…-‹]õ-Þ½vëîú7ßhàÚMÁÚÍkÎ»u}ã†F®9.\Ã¢R¦Rò€¹k{ÃZ×´†¹fÕSZÖ¬~x¥Ð7}»3m˜kÎïÃlà4El6k¶°æƒË”:‚“&9.æç(mn‚¨\<–ÅÏ±HiRA'ŸÎcÀáÚ¥üa¡V:Íì%@“P ÉôõA3Ù,lÃ}Œ²…nÉ »38u*ÛIö£t*É	H²¤0
Û™ª–ïmÏVÆÛ£S¥ Mg+*…O¸éÖè1©ÆFšm}ìÁÿÙ\?Ë-Ûk6º‡íæ5Ðí[¥ø¿E*$Ô‹þö=Ê+`Îq‡J†~¸àh­}ú$pM+¶¨ä¡ ÔVÑ'Øª„ÄMÍ«GokÒbG˜B Þ¦H	w•Wvöíî£ô‘Èþ`g®Ol–Ž€±y/ ÃDhü~b‘ èXã N÷º)$XCÍ("|KÍŠÓF¼ÌþÀÀæNk ;+×(Ù×GM$ö®aökàÀolhªš¦cëãOlßµ×FdG•w#mÐl1	ükUam»— 	6vÃq›fhWQn;§¼Ùj;»¶uS1é*!£½OÉæ%Ln@vÕÜaáÔ²V“Ž{j!kD‚•Ü‰Ý<x‚Ekò©zŠ=™Œ<¬Áí½Ý™ÞŒÒ3ÕÞŒÃ .aa6\‹×ÙöÜî_ô ƒ°ßó/ÄÓ´íƒ€ÛÀÀ~:ÂbÒ~õô(ü¬a/·o`÷œí*X’—}U3øU‰¿V­Âô¦^×XÍ­9f§jÒ!OêB[ô\6]×m¬ÒÚÈ–ÇœÛÂªµÕG¯Ú"/×¸H*äìâ"ã°-ÿ!›%’T,»ºšÌÎ…‚‘È\²X-J1ÂS,…­…K©0óÕ‚¥&z*‘ÀOóû©6*"á·üp±8œ‹Ù„µŸ‚T9÷µåù–oðùÓ­åùz-Ð·f¢Ms«ƒ5ôŒ³æ|5ƒt¢ùžMöé8M^\TrÆæäêEå‹œ«	Öök/kÎO›dX[Ìöí;|áËÃ2éö}yüða+˜|E!$¤Ð0çµ¯Ù°l{{Y¡€AÂãEÊ¦ÖL2×ïY©”ŒuÅa/Ykü&	1Ã>ÓÊ«fÑ!]Ç“3æŸ!
#ÙáB™IB7ÞmXp±½æ\i|Ê|¾i¢äø=ã«a«kUV{X»H»š±â“«ÐÒ&.¬í9°üñûëÿÃ5§¹®bç Ù+÷t„¦¶uVáOví¬V%5ÒÛók0š{¨ÒËéwMk·x>4X·ýì¿ÖQ­®ºêª«®Ö°ÕxˆÕ˜‹í¦b3?öÝðl0«$_MöXS¦NY$ÀŽIÆFŒc±þmžü°ŠØ\$k1õª@6®XöÇ–»¾?çûÚ§ÿ•LH	Â»ö0¶ã–R!UÂgÅ@kÿüâW_ÚjŸý–Ž!ƒ5×¿æL!Kò·:È¯e°MŸ?ÿõJ"‘K
ñ¾éñ¨*"54	~S(¤ZÙ¬aM)þAq›*#\²¿X­«‹¿wš:'€M°¦ó„ýc6“¡D$]&ÐQ±þA‹÷îcîw¾\RG—Ø¨ª¥%Š kîi4¥‡CA¹tÖÙË	~¨—œ)fS£¯¥‡iU[)dK`Za|tJðá‡Ÿ|ò7]ß2k¬Ú¶fÓ­egNœxðáòYEÄ-hÊø7ÀÚgŸ	Öˆñß¸qã-°W´†·fŸ¢ó
Ù@É
ž€5Gk'ëOaÆ’S¯­tæGÝ>Ya7±ÖWàÆ¬,X+j<ø¡ÃaLÅ á+ñ(†á wvævš"á®#X–À[ƒä¬N‹þ•a¬ñ/)WÙ£$û¬ƒ1kgØpØxX‘¤…‰DRO<6á¬ßxŸÎþmÉå…ÐÖÌò/6õ÷+°ÔçÛµ‹Æ5L4i¤Ý,}6Ý÷‹%r¬öK¯\Š¾ò"ÊÒ.4Î|4;Àr°Mím\¡¡Ú P-Uyk–ÒßÅþqX%d†ŸÇ`m7ûÈp1+¶÷XÃšÆ¯jˆp¨-ÓÝ¤x~µ‡	¿ÄI<«VÈŒ1ÚNì·‚ã–áiLû5ˆeóÖˆ~×Ô¦ÁÚþ ±š‰çèK=l4ËýÚ\6i¤Ï¶šG'àÌXÍ–^z¤.0^ô¨ŽóÏ2ÚS°vÛ¬IÆ›)…ÉîTGaïÀP³µ4n™£
Òml!¼Ÿ­\®úê 62wom-˜
®­®fSÁ±$Ý§YžÜÛóÌ¦Sk”DêÃÖ§³ÀZØ—(©ø1q?Ýçû†ÛË¹v›¯æŒµgÖŒÕjA[mýîúÂ:¬¶êjnfÂ¢«ttp€f-±Ú³òŒµÉUYj<´¸ø*?ù˜›/ÞA«“/1ûøêäÁÚq­9¿ì	«±…‘—¾ ÉMîûò"äÇedÄ7'ÎÅ‘=òù›–¹õƒZ5dÁ>ÊÁ`ûÃ”$\›â=9Z»Å|k¯ˆÖ*S¥1I¿½ññ,ø%þ’¨`·–3Ä!ë`ûì]l“wšööøÕjC”!Å	ÑØŒ"Z[¶E®”&N*$¥™ 4*ôÚz	iœŠâP•¾ h»í2jS„P˜dã0Ì ÓðÕÒi*Bª*"ÚV€zÀNUÑÙYi×ý÷SoºWzgçÐWìçËBSóü|Ý÷uÏQ6‰¬Øñ 6¿?Ýõ°i|¶ö>† ØsLñ°£IG%&¬y¾šXMñ“ ÚþÃüðüx‡\»:‡Vfî
Ö.Ït_X<÷hB}„jvœñáÛÆÑÈc5:·!XC‚µ…9¡šKù—T¨+‹ùƒÙiºW#FL¿ûIÕjª©¦šjúÿ†µ¯ÕÞ¦²Ý¯ìñq?,3‰‡Ö€khAyj¦P3GÄc‘¦z1ØwÂQÃI³Èˆ*"ûR«qÝ,¿£7réÖ¥žpýÕ{W¾~wJ]k÷¦h[“½¶|uñêò9u\­<òZ×(ìÑÐµ?º€¡Š’!þü—£&W
©åé´E—eÊ”ð  7>Û¾ŠùDá—	³P°^ÒŽ@ 
QÙàL~”Hì²L&Z'MzŒö—I+E¤Z(Á“¢©ïËq$_T×‚±¤ùÙÉb!ëòð6Z>ßZàtJ¢†Q Ž'‡ëÌ™²Õ|>:Õ2Ù±R2[È)R*ÿö¿}çú;3{öÌÅéŠêûBH}½3º÷ú‘û³+ü½]üàò“÷µw–îü;:G ×N¼&\#^SeæQòF|¼dåÒ£&`Í©Ä÷+æÕÅ–Å+Ÿ~½PÔ|µ¼‘ÀÖ™LùIKi¥»G?kº+³Ê.Ø­KÞZ"Ä±þ®P²3)#–ç-Q©(Ò"‘ÑDlÎ"PLs]k:wœHI~Û†…ñ(	‘!ÕIÖSlË!A°©$Ž°×¥»Rþ½|.à`®²0¶Z=Õ¸ÉØ5Ë„|¾§£×j%Ièë Þ 7`m[…Ö8Á¡•!¶mbÅ1ÄiZoeÃï…×„;,’„—mÛ¶]<ÇÝá+­½%7-<±SÅ9ÔÞá¶^pËJ–ÿ?Y¤”&`ò×£í;9 âg5X,¤µ6¶Äiø]ê#Û¨ƒd}xx_k!Îd±Ví"(&¹ªH•+¶í4ï¤oÂÆÿæ$ƒµu_Çž Ð©¡$–v—õè±š­¬ñÅÒhÍ&v[¿Z«gTaÍŽUµ~²qÝÍÉ°|¹/¿Ôcu®êmzöKC¶Æpt3=kÏÖ…ÛÖÞØ|sRƒ±ÑîG!< ÊÇ ¬†³–OÍSd§n§7Hóûµ£‘ØJ¢²Q®[ü¸?ëR°±Vž±öWƒ ÕyÌŽØ$.Õ×5é—¼5Ðây9-Tûqgmôö‚`M÷Û·ÏÞ¾ÍZÁn,¶øSyÂˆV“`/g—i.¶ÁÚè^´‡Yc{FG€µ9`í}!J&OØÊ±àÞ_­ÊZÓAº¾æ×ŠI›½Vöe‘£5Ýã/ƒjËBl([<“+žòÅ$‡Ïðö•¯Ž¥ryÅ…ùœ'®6øKÒ_#ãfæ¸iÃ±›Ž9{M°Æº;MŸ]Ÿ9
“‘Ù484¬ÑCW-‚¬¶«1
ûs>bòÁž?ùäýä«UPíÚ¹•G'çÔFxwabvb†3ðfˆ#ÏJå`M‰GUZC7cCk."ÛZSäÇ3×€5„}KÎZ5vs¤VCµšjª©¦šþý¯ŸÜúz^ÆÚÎºä%÷ÇÖêµFñ l†)¥$|IVT+fnf±ásè/pD}C–ûà®ŸÉƒôb#¡5xmGï»ïní	o^žþbþ•ùeÁÚòü2±hùÖ¥‰•)Jø.[óšÂçG¸h!!ƒ–+•êX ¢ä™kü‹«©ÒˆÍpMËß†»¦´iD~Y&š=ÍÄ€5à³+QØˆŸŽ48àdµé6³×ÌËýšP0Ÿ)2'47·6…ò‰Xk"*;ŒÈÊIÅ¹èë´fµ4“Á|‰ìD†N´ YÝþb& Öò@\¬@*d0Ô*xc¿ªWíÌâË˜i¾b±¬’£¾š)[¾þÛëÅwfFGmÚšGkÈFcüâÉwÞ™˜ý·¥o?eºø“ïîØ_âc²!¿{B†ÿ9\JZ6<Z£K…WpÐë¥¿QgéãCt/	»ò7HAd6ÉL5Uõt–ÇÆJxj„÷ËVÓ½”)0¾“@c7v%¹ÒŒ—%UçØže:Óö1u0"„Ýà”oúkÍ‰$fZ°kZÅÆ*°6 ¶‘ãú5K¬ÕË}kŠè ÷f
…\&d˜Þ5~éê43Bu¹
¹Qú¤¶•>I<4ê¡µ6éZƒ©˜û«]¨C9"Â/¶™¯&ÔZ5"[‘ ™dSÙ\¨ˆ•Iò„m¸x°š¤ÉÜÛ8c+c3Ä3á-60ÛŽ"ãLÛÄqSÛš`MVŸf¡¶i›ºA_Ž½pÔm"ËÌWìˆÒü•9Ra³úÒ4»ZçÉš›,®±k´®‰ïÖïÔ6„mƒÖvï&åŸ?†Žh%çÎ…íóàp[{‡ÐÏóËVKušÀ¢÷8Ñä}ÿªDfë…f¯MX÷%©±…óÖ‚MH¿ mýÍIŠ«o}ÑñÉµu‰º›ÐšM,†cþºö8¬¶>â.ç‰üq*!ÓDlt®iåvB4­­ñÇ)­;Ktù²pZ—†b£¿Ú°æÙj4¬M]žˆmh®LSnÑxµJé«0òŒÓ[|q“<XÑ*#±Y-¸Í9JC¶:Ëð°‘‘}/\S|®õ¬!–‚5P%y%Ê ªdnœÐwVƒ<Ž½7Ü½Šö?GûÚo†wñ7"\ãó¦þ_Ù³×¹ëÍAlè74X<38HYdÎ9¹¡Â–¸,¶Ò`6E‹]vh¬8|°Ú›¦®;ã67cMã¹ö=³qÈ›·Æñµ—¥ÔëzKÌN»¦dàqu´•›jW;&«ò%*;Õ®ÆºÕÄj|ð÷ÍÒ7×/ÌüáòEÀŠÿ3òÆNÞ=¹Pñ×ü­pÖ„ÒÖX k’Nà¾Á`MUAª¬Vªä‹Ì Ášc5è¬*¶Š«V‚]SM5ÕTÓßk·æçç±ÖÞþ­%÷¿ù&W@(8.¦™Œ¨·‹ôk¡us¡¦`ñ5\isM $;•JIqšÔ]§PŸ Eov c»íWaÆ°M¾yëÖ›ó¿êûšÄù©ù5¨rqÍšKËK|ªËž7qiqH„ÞûÓ{4*S²?¬àZ5ÊZ×wí´¼µÓªŠ„×NúllhËæÒ±ðÙÙµÆâ ©‚d¿I?V¨•ý cÁdúš0ÞyºÓ°¦e Zkò»ym…ŒW4˜ZÿÀö{~cf`“£Eœ‰ÐY¼H* ¿ÀGÏ>(§ÿLÌr*€ÌŽÉË²Yª Z6ÛŸçzîúI®¡}ï*„t?ý‘ò‘ë3ïÜç·÷¿ºúí§Ÿ’<Gj?³î=~üÝwDø/]Ã\ûµb!íÒR´fÀ®¹æ”’òír–
énºdÙ_ÄUÔn¹,›dÛ<5-3Êˆ„>Ï€ÖºSìø»[:á2`÷­¤­’!*![LÁ¥¡fÕ<²™Œ¨í)RsÓÈãßÅ%’›®¶µ "pÍÍ¬¦PÈˆ<[~¬4cOy]øjÊ.U´HïÔ§\HËÞŠzXvà¨1Â[¡5|¶Fª%V0šÖÖÖ¸Õeîë8+ÔÑkiNÊq#B8°£·¯·ƒ'èC¶êÃ¿*¬A[UR³•dGÝYÞ€˜­_°ÃU³©ÔîE>º È/à­±·mðä²Á¯Ç]¤Œ0D“;©Àë¤8b ¹²È¶ÞõµéÆ™ÆoÛù3Ùg<ô1ZSÇlH¶Iû:èÏ2þ›ªª´øG{ILy”"1ö…Yˆã¶v4ÉÂ˜‡æ0Ín«5L²çéçÐq@aÙÀ4¾°×&£<LÞþ$[±uQ_o«á©E¢ùDã$þ÷‚â ÕWõªÇ¡¯éï%•DH @C~–ÜâšÚÑÈ‡5þ8ýly(M°†³fÆÚ_a5†U#K´¥kmbaMZ€¿~sUÓm°¡¼uÐ¡šÑÚjgí6Ú{{n¯kYÞ"p›³Hˆ¡[£Ç.¼Ïø°»s#'ˆAZ*>weã¦=rØ@¶gÏÄW;4Êé|nãÍ ž©p:ÙxQÿÄC*lD/Çó‘äR—«†töš£5•DzÀ¥•K,Y¿œ£9ppØ™39_)¾sÃ–õˆ‹&3¢s¹ü:ÂW¡0üý`lkZp¾ oŒWÒÐïæ¦£¾þ¬XÍ”³vµ3Æjû÷þè¹½@*é˜'.^¬øjLX[¹<µtåI3‹‹Œ³W"’v¼ÀÞVÁ™±UÀXMu{2Õ\ÂˆXãwÁj’œ5ùjPš`%r×X±ª@ÖTSM5Õô7ë~2æÑÛ&`4H³Ö(ÑsfUAsØ¨‰D¶ä`Hð¥ž°¹^ÍkM7^Mi|N‚¹:Ü´^Ymaç·YDt~óšºè¥WÂ““oöE/17öVý³oËZ£~r~ziizqOH˜á>>d=W/=§ˆ¿ŽWÝµ#¢5‡k‚5˜Í’!Y —³˜kX;õÙgúH6çO'ý±d²>d±£úA € Ã,Çk)¸"Ø
¢ÚHm¾šcê6ó·âÂÉi°42øiòÖb] L2š±ñjþxá€#+%54€‘e‘fþÉ/âM°HÅ’|©âÆ¬ZËƒÀY(i]!Éœ/—¢¾·!õ„ôçîs¥ëc­AZD:zÖš\17níú§·®Î~zY“êTNzçñcfd/-=y¬qµbÖÙÂ™Gk‡Réš>ë[C„?vÊ[S¹S6wQA¤/;x´˜6Lãn#”
Ö ´À–TQ9ÿy°•äýNI‰+[&])}Lð8!‘ðÌÒEX$TøhiL¶‚ùC-AÅ%Ð.¡›Š#0ŠEØFœÅ3œµ¦cîˆ¼µˆøaïÊdƒÉpÔ:±Ôú8›¹‘´õ‰ë¥üþ^5œ¹ö3=¬„G69€5æ"ú{@.SocOrCÓôåFCÙK¶Go‡+„ßxž	Ïý7X3\³c?Ò½Æ±ÊâÿV{Ùd y¥”â2GuàKE‹lß¶kÌšµ›	|÷¸ÈÄ¶ ‘x¬·­‘:q(¾q†ÁšHP¹™¤u­ƒWâåÔ«†ñå&¸í&	’›Õ_¶S\‰›ÆÎv…žð(ÏÑâu­š‘$H7Û;& ó$B³ÃºÙÐlÑåµv’¤Ç›_e“¨PMQ‘"ÿr˜F†Èff­ÏßÖŽ&B›žÝ<ŽAŠ¦£éØf‘ÚøB<$#uY
ýÔ@ÚpùT0ŸòŸ¬åƒ6üÚ¦åÅiþDP8§šiq<ŸƒÔLŽÕ\ÃZ5\du¤ijzqaF»‹~¹è1ý¾¶Æ½º:Ìs°fZå¬í¾½wïÅnÔõÜð3Ôkm?óÁE>Ç=¬ñÍí<ÍY9ëE>…YFÙ6X;4rû6X7wŒÚ@ÑÚ‰‘Cj	vÂu?!_ÎÚÝ,ÍßÞô@l,ç”\8¤ãµ£6×¿f:¥»ÓXñø™ó€Y7¥ãÌ÷( ¯Ü—+Ò­?<n(&KÍòøñÜR09h2ƒÍNæiqÚÕRçãªµ¤äRïè$Pª!á'¦þþ%ñÆjŸ¾?Ñ"ûöŒŒ  'ÁjòÕ¬ÆÇX—/þaöâå•G3ñ“'Ö€6˜K¾™iƒÉ¡Z5f¤	Öš[ôGµµXa«ÓÛÎXÓì	kÐšKí?©ÕUô…bûk¨VSM5ÕTÓßžÝ³æÁšåA^Rt¿n8k¤íE&ëËd=	Û*¸¦0`Í‚ÍêP£ƒ(ÜÓW/ƒÃC5WÉeô‹ã#ìÁXm+WÑó›ÖÔ¿ûæ+ÕVGØÈôÕgëo]Ú´|ˆ‘ÇS·®^¹3}kvei…g=²aaÀšõ\=÷’’!·ìêv9ÓÂµJH›HM·J?a#Ð›ŽÖàµlWW.™9]Ž•¾Z¾“²Y&ÒÀšÑeH¥‰*–é‰š÷P(	ù1–±hÕ‰¦‰®· É4µ|É`Á&Dä<ÅêÓ‚˜ §ã7Iœ'ñ1ÏS)%`Ãå“y»~+°Ë ßà HæËŽ±.ôã²¥2c/³«õÁjvq˜ŸÑÕ”ŠAÍ¬©©èúìâÕ¯¾Z¦õï²f¬=ºóàÞ«„dêµf®©¤ôPµRÈwÞ£µÜëåreæZggÍTæzÿbvhˆvº£/—Šw3™{è 3Ž³VìÊS2¥¹(C¿`Ì1Y2`µ@kÉ5ËYƒÏ Ýà† cØ"I•DFIF±ùƒ
‡ÛÉgÖ(…À¼Ð–«©iMÎšUA†t–eókD;%»¡HßÁZŸ‹†Ö\­cÌ¬™ÑÆ¬µÞÞmW¥ð1Çž7‰‡L[¦æv¶µ5¶õ@b¶§}PC‰ò\ ‰¥‹Ø)žA§£,œ¬¹ýï	ÍÛ²¯Õ Çù:rÚÎcîå?î´ïˆ³¶û|6Â {Á+l.ú«C¤±ØUç¬µ6ÒÐX§IH`q2h–QÚÈ:½Ö®eÍ"FÚ9,=Ê"w£íFkJùß­T¶ÿcv¶^»ÚÖÀ.7òšGMÞ(k–«XMšƒ5ç¶’úïÈŸ¶vý¦Í8l†v¦¶ðäú/¹µ7Ÿ…Ó&o>{3Š¥ÃátêÂÀ¦q»”&Ñ5fit­Í]¨“I(¹•1é8ÓÊ”'Â;H°pJcü}$bEÁPL=j©`TÁ;d¥©]Îeµ­|õx¾ÚjVÛ[e5kŠ²€&—ÍÊ‰óž *`ÐàÈøL¦š‰mÏY{IÖ¨” °Q²EÖ„;l›NòÝ>8¯qßkûF+¾“ÖFÉí×&e'¢QlŠŽ¼{â7ÍÝÕÂ#BwîaŸ‡©…MÙ»ú4Ç¥ïŠÛ»l²«Ä[šõ²ˆ7%/ldÐã5OC|ÒÄ­Èf–‘Œc§Ê.uä@ê âüçæ€5¹l
ö/”SJA)eHÊQSÞo¹r±{˜÷Ð1ãA1ÚëV3ZËf­’`£bQ‰ýbD‡jïá ê¿E¢wO¾qî1K×0Ö`çÙ™•é¥;çNvß½;Œ¬ùLž*}j»­V2gí~?=kf¬ÀjÈâúEj3Þt5é¤‚«}Q+€¬©¦šjªé
kó_kB¬)R¬6®.E÷‡d=I`›·¢"²‚d‘|5¡N•g¯òH¤‹ˆ~¢*„„Û"ZëZmCDÌÏ¿Ûg“œsëízF¯ÕqïÃ{<fLþËß,-Ñºv‘ÆË…ÔÅÄÈ^r¦UùÖ±ÊX ‹Éø‹€XSŸÁšôg±Úï1×X¨rhˆM‚ðû³Ÿe3*ˆT
¤úèšc h:­S<Ü¦¶ÖPùF6jÕ¿ÚbºH°@Ü@²À^0Ú‡…dík±`ZÅPù¢˜E¾YÉOã°ÖRßÔw´–ÉèzB”lI!zÔHIôëú32H¬ÆGÑÄ‹Ð¦–²ùúå©qÓ´Òý\gqü™÷Ö˜—öG›¶ÆÏÎgÞ.¿Ñ°öé‘EM¬£ëovñÎã+Ÿ<xb²g®YŠ?áÞ«ÍµêË)ñ÷WÎzk¾²m”^?=tƒ”–£¹©‘¹×Kúqºð¦0Õßí/Í‰\gÑh-“žaª%»’VýlQNd0âÚ*¡GÉÆ£lŠ¾¸@Ž%…u]¡`:BXÇ.47Al\áµÕ'0%85Ò2%BdFÊXkBZ	ÖøEb“m…?vªô–€’ÃF,mßõÓãÖÁZƒÐX÷B1—í(Ùà´hs³¶ºùcö¤§VvÄXvšm²”´íŽVžfy «`­ºép·U´æ=JªþO=Wp|‡v”*ª$qgc[cÄÄž*Û­eƒÀ¬b#ËŸhÈ†Ýí,tHî›’+·k¸bÛx ƒõÏÅeÖ'þÒ85v~ú•ÄÿKA@ºuóÖHˆTŒ?Oýånì3ÁZ5x¿Êž™¶ŽZåŸQ¼nÔ!GcÕ•;¦ FbÛ1Öxdò&¯zÓò /"BFÃÁÈ%z,ŒÇà4@Í,M¡Ô°ÚÒ
š¹˜ ê¸´WßÚy"Ï´ìh×’ÕŸŠÅð\â´²ÎþùùPÂÏ“0–}ý?â«.ò#¬†Õ´¸2{Q–Ka#^KTœÈš'¶¸ÿ—0HÆ«§I·U°wöì‚ƒ5æi=wV#œÞ«‚Ô¹#Ÿ fÎX#³i›F¶‘KÈæn¿ÿÚ	`íÄ]²7V˜Ãètñ‘ÕEb°˜¿öÑ>ùkÏ¼uÐ>Ð	FÒ¼ÕtÑƒ*\óâF<Álâ)–ÖÀFliPÜV.?5X+ÄËƒ%Ö6%ÎÝ†AºÒP6š)øÑÁ-½þn;ÜS/\¼ñ½,",—|Gé›5_MRÅUÌv,žI§„jŸïf?¬¶wäE~Pëüõ¯Íb¬]û÷'×ˆÆžZ¹øhå·™]VIhˆTáµ¸vÍZc›ÇXêî68h°–bXSdœßµ·-RÖ\$I"ÓX³Td-²¦šjª©¦ÿ1¬ý#ÑýêZ#_äcëY#T“ÈÝðäÅŠ4Wö#|37ŸØ¢!˜wcM_TŠÐ=¤ø‘¾ž>q°¦pŒµ
#ço½Ù«éåx±MóW§i¶º'á«Ý¹3µ´„·6=g¬ðéïÀ#ÊG£wí#2¿ø7]!n×ŽTª!ÿÂ¤l…dX1$_6zMxítN‘¬©†d}:Ë•­¯IÈ™ˆ(5¥™Íæ
?“Ùl4$¦ò·kL`ÊGÃ	?Ê ALˆ5¤“àTx&Îüë$®™¿% Ñµ°TÊ½&fwu¥±Ðò¹¤uª5±Œµªc±uuí¡–Nj©~wCY±šæ¨ÝïJ~|÷cÕ¹€5‘QÐZ±ÄîÌµû·®~{äÓÕ±6={™0È¿ûîÁƒÇOîÜÖœ¹ÆEÙ#ÁšÕ;ñÆ|¼N%g¬™¬ß‰¤mÉf)Ÿ“Õ†åæoM†AO`­ ¬¥“jÞC6pŽd‘XsÐßÂ`aYhéÙ"1kðS—Z¤Ó”!FR…ÜZ](Ju-ÙýI$o	Õë‘ô¬á«IÁ¤‚'Á4ÕNpÐfeënS$êk!~û@µh‰ÀšlÜC5è¬kÏk·—AkmÚïÅb_[±¤z²o×®(ˆ'£j²þŸqêhÓñ¥Þ±k†UÞð5WM‰”‰¶Wü‰¹ÍêÒXlõ1äkÎYS}åvw*»Ip”}Ö`£Ó¨„\ÛØ B¢7Ìhm½ÔÆtµÛÛ×·ï4cÍ8Nýlp^¯å>ªŽÑœ5áÞnVÀ¥?ÿ§6î¦]Maý
Y‡\ÆäZƒ5*/=L=¸ŽíHMXW‘+€ÔÝ6[+ûd­5FÃm¢ºUµì†Ù³Ü~`Í@{Å6ukÛ¢Ñg™§¦ðþÍØð{08 ºGvJ¼0€Hc¤¬Qó¿ˆ¡ÜY5¢±TÁ<o^}¹© á(”vþóóç	?
¾·Ùj^d•ÕžYÍjJì7s{`»z¡ù_&þy"P™»ÜÒÔÌŒ5­7€5ž+BûÑ*HÉ¹j¬s£4®Ál–ÞßØÕ-|£ßŒ¢F-«´6¢™×^~?¬fúäEÇjD‹Ür—*H>¶áí@»—YP+xlã ²J8Qþ„t(©r?Õñ–V}à¯1ßÒñZ×XJTÐš¬ö”šHkd_–l®`ÆW3—-æ|ƒO‹*FLaÈ@µ"c%Ë~‹ê/úx9^Ç—Íùs¼ø¥î¢¾—P­ÌGrGetöôçô‚Žb±Ú/ötxŸºÕhWs9/.ò¨v‡’ðËSOî,Ñ
}wnAð¬ï\‰é¯bY…ÖªzÐnu[…çÐì¸8°†.P ùñœ%AÞšp©ý³ú2¬Õ
 kª©¦šjú{Z«¶¬™µ&ù¹Å&¡µª€3WÉ"",“£a²ýh¦KcÕØ‚\VG˜<£íP1ZoˆÓ íÞ^åCboôEÞœŒ†ß½´y^™ÉWÀÚòò‡ï}Èhì+·6]eZØÒÒ7ËË+^Ö´0twäÐY.Aöí;|Øpí˜Õ2=|HØâ#¾×½ÁkÖ·Ó‡í¢¬X“NÝ0h+—IôÏFD›NÆj/Øå+úƒy’ü©äÊç“‘ÅAåOúå¸!’”,`„¶H8€Pòù‚(¯§0X#²…6˜b)om‘™FïLf5Œ5žße5EA.JP–Ð5Ü5@ÍäSÖS¶Ó'þãYn£/kïí;ìµ­AkÆXüÐ_}{õÛ¯þõÓo—¡5æb?ž~«Ak¤øÛÌµ)ÃµG.¯Åhíðáÿj®Yˆ¿^KBêJ±9iý:+\1–;Z–‡V"‘âd´pX+æKüœ¬ŠÕAæ:{:©]Ý • oÇ¬µäø£fds$ÒÕmˆµ küÞ$ÊTì˜ÈÕ²ø<ç¾±”@9~ñ„q
†DœS‘¢nBÔ@vÙ,vËö—«VÉy¾·nþ"7ÈâUFBi$;Úž'zÑ¬Fõdè­ßPliÄe^ZÕWSÃ[‡L®^¼p¯ÀÌ‘÷ç{•NâzáªÆ+·®bX5qÄÛ?²ç`MƒÖô{!›­±Øšƒj)¶CÇµÆº†J>>l&iT57ˆŽ@LR‰±Ç6nßN’åÆö­6©M°¶{lûÏÉkvìÞ®P{„_ØÎRúH´­Ý?'eäg<õ6ˆO4¶Û<8=ú}®ˆ‡n@škcsû<ä60û´ÖÏP9â±žVBÿúÊSpí5³m–uuÑD¸q``,7¹	0*u&ÁÙ“AÛøÂ•ÈþÙ°¾…áãçá„‡€X>Ê{S¾à`}þ/fÅÙCñóÇùDÆ Í‰Áxñ$¬f5€¾ÿ«½¿ªrñòÔôìâì…¦ñ‰‰JR¿ß`Í|›š1ÖViµ³†ŒÕææÀ´…á¹ÍÅV“—š¿º…4s|pvø,-gª¡8Ë‚í`0Þ9„j¯)rx¬†±vâ×¦ËÀš…%jGÛE…Dêµ4~í%þ0ÔœÛ²+èªŠ #^óUyÍ`Ls°æ
"YzRøÈpqèé)“:6| œ-ÄÆþÓ¡Réü1tfÈl¸ÜÐÓ§OÓ$@²:2ÄŸnKnè”‚ KG%RErýYuØöëS°h:H~S÷°kV£[­:–Ü~´kÐÚ;ðÚÊÊôìÊ'Kî.t;ù¢j4¿Û–ÑÆnõ±ê†íðÈ=·IrÿÇ®²2bM	#³&¶fk#°kª©¦šjú»ÄA~m°61¡|¸Öœ6…+1ç­5¹yk´
%¼—äÎ.‚Éˆ_ë
k­±H‚œZ8_ÔF`a¬E!6|5»„î%XdþMü5^ùR=š¿ôî×ËW~÷Å_/._™Z\œZúp‰ÙW§—ÎMÖùµÓìÙ³ï£Ã¯þqÅ]KÑ¼æ•55ý…´ñš£5®±¨„Hì°È¾Ì¥XÖÇÀæ®l—+ð¬ï¿ñ™HHpÔÆ¯ƒ„Œ$‚iÖì¡µd^Ç‹ÊL÷%óje£»ÍŸîê*2%Z(“Òµ´&ÅZ7VÀoÃ¨+ý-):â¡=ÕiCÀš…AUþ¨æµ,Òµa™¨³…–3¯}2z›|.¾³B€¿(‹BÈŒsÄpÖ>ýÃ§ŸÞýÈWß.3ûÁãéß=xüàÁ=vž`¯aRªÑþòE5 j®ºZ\çZ<.ì;àMÙæµ4è6[ñG7r¶‰©–+ç2ÄŸKÑ¦dÌŸÉPY´ŸS³À‹Ö´–!Z$ƒu·$ØßÒÚ%8ë¤<1ºAÝg]f¬ÚŸ‰4;X‹%œY&É]Ë¼¢ñkî1GkÜQ(¢‰ëM˜j(è”çXEP”´’ˆ”¥«¡~Ž›Öf¶¤ØÇrÙ 5sÒ´¶l›‰Í!Ë
á‘Í¸Ã‚ ¥ôÛ 6Ýt’ÐÏ,¶‘IÛÒaA¯oÔ¾Iû<ÝÉ[{åž·Æ}uÿZußT««¹'x°¦2Èí?e›™Ö²Éô:¾Ÿ\¶s§˜ÌYkì´·÷Ö­ÕvvÈ¿ÆæúuLNô4ÈšgËcÛ¶ng;àEäZö³©4‘_’'‚s¦MK€Ôy -Ð_k³çvZÏš0Î¦´aš¹?M%N4wŒ»9žÕÆ
)ÒÃ4;ÍmGx#Š…ôª$<¦Ãë¢©àääú†ÉÍ¡ÐdÝx¤n|`Õ°Ô8Ø¸¾qÓd8˜­–
¥ùEBÔ6Æéjš›ãªò
1üo2Exøð¸¢£:ÖR1òÙ>ï¥øD…|]rÖzª¡ý«†a¯
í·ñjËÿ<3}åd€þÖ·g	ÄhMö›l‚µîÀšôV»Ý=Ì
OmËÂí…n/·ß›Š½wáý*¬uÔ Ž(·ßƒµ}k/¬""X;øÚ( vâäÈ¼XÙÂ9¤mprHèdè'\Ó[EçÝäaú)ú†×¨+XÍkÈÓÄê{^Ìž*û´“‰‡ÕÅF{î˜ã¸¸òFÎ/=å¼lÙž‘õ3W#ÎÁÚX™$ÉœÊ×Ý;‘
‚ô©Y-§>:Ãl^fÿ/~õ½}#®[íÊÉ¦âvá§Q\pwX[ŸÈÚ÷°¶ËsÍ*¸f·ª»æ=èÖ¶à~Õ?«Ñ²6cr±ý³–1‚£&ý¤æªÕTSM5Õôw‚5g¬é£BIá"¦ `­94©4ûHµÅšu0–N`@q­í`-åÂ9™àä¬l¢5žº1ô*¬p®œÃ
…ÜÁÁ½çÝùÙKõ›ßÆØ¾ùJï¯æçŸ}÷Ì!ÅB5B1ßU‹£çHÓÂ0†Npm2rèEpíUå–‰×~ 7Z9d‰Ï[X˜¿9lV‰ÄkžÃvÊ`&68f³lÆ™‹î¨—2øôF,H½©D@žþ˜P•ùk2ÌŠ×nõçAL²dg&Ä"‘tÚæåý™(“oñs4b•P±Rl“Šùi‡iÍgùu“…r®DÜÉàÐØË¡¢Ê “>.G¸.”\LË+jùäÐÜÁgžÛÇE¡˜øŠä÷+Ð®PQáS®^îß´Ðýûfñ›¦DkßÑHe)¨öÍâÊ¹k²(]¹“^gÁo6sÍÌ5£5/«ÅW*ä<Xc¶ÒŽV¸–Ù—‡²‚ÖbK XÎfÁLIb¿Ò$MgêÒÄ‚]±.AZ0˜1+M! Ô×iqýé$`åÒGÇlSH¦Ü–dH-hî1O-| ó‡,[ÄÙ»R“)a´æR"EkÊð×„¿H§†¬Qo»£2Xß¬× Ç^½.uÄIÁ#J±ÙÚÛ„[8oDóÉØµg€~m†z2ŠyØòFvš‚J•±ÿ<¬§=ï€·Ì(«ZkÀqýnÏVU“ïìùôˆÑH&†#ÊŸ=U®äE0qû†GÐÙúFƒ5€	êèØ‰¥ÖÀ¬ê¶Æ:r"Ùß)<c¹B£”Øƒ¸è>ƒÍ(§lÿév²EÄhº18 v[g\¦)lí ÛF¥ŽH
Š”Úù>í2àìEÜ˜6«„ä8¢SŽ=¶mÜ÷Té!bå69¥²™¿@CZ¢áËuù8ÿ>gd£MÄßYŸœäs¥Më4zífºcÄÒét€^¶h°`ƒÔ4amxnX­kç‘ôñÏk!5¿>’©Øjqv#	ÊtÓÿüýPZ§ÏÔãXûQVS$"³60<sòäÌÄBËæñÞd5!Z“ÂÍYkQ6ÉT…5½ªƒµ·µTÉ_d~XOq¸¶½|_tVE’TÿXdA¨U5åCVœµJ#98zpôÄ‰Ñƒs'Ód¸S*È–l|&¦ÞVt:$\#–"†gžáÛuïjqMº™*¯¡Õ¼æ`UŒµœ¥Û²ájT†ñ&ÚÐ©"ÑÅÒùÜSŠ$í|œµd7ÆÚ©Avyò–¸oÈ—ÌêÍ‡ï¤ÞÁ²­V$ò8ª€üÅáW_%X„C5—iJäÔ‹•»+³3³jT}º5¬I®ƒ ›·ëäâDXË•â-<Ê„5Ëý¿ «;kÍƒ5oÄÚ¬ÁšZÖ~RsÕjª©¦šjú»Z›w´f¬vA´ÆgÕªƒž)õÑ¤ {*ÁR6‹®–-‡/Bš°-Ì%nØÇÆHSÕc_]LŽ>¨Œ/®µ	YçÞûîæK›8ÖGØˆ:Ö^¡híÝÉ5ãó¿ûðÊòò4µ|èÞÔôy#2×`~^£«þƒC‡FF¬ïê#’ü÷<¶å!®AIb5ê!Ø€5Wéu`ÿ<dÁ7€µA9k¿çnâò`ðåžÁ±Ö¦ú­ê“ïOÆ({4cEHƒ²™•ÔðÇÒMùtÌŸìÜÑ×Éô±dW‚‘Ï}(SÊ  ìB­#éú¤lðZ*ÐBk:žZ±PÌ'2ý>yoß`2Ÿ-û€µ\¿bE,TjÆjº0¤¾Ã¢b ösÀÚ!Gk¢R´&Gñ€‹ÃœJ¾ÜâÊ;‹KW¦/_!¿Ÿ¼¯»rezq…O™µ•Ê0’º-÷ÎpíLÞj!+ÞÚ´²3×Ê™²ÏáZ®«¹ƒ¾®4Va¡|zXËçk ™`‘X!jY^Ruc.Èß`-ÉQ³Öº˜±Öãº/ÑÌ:h'Kœí'|)•ŸÃžTC–aêFYbžE#bµ*¬É›ÃlkRK›Ž†Ö¢µkú$@ÄA™—	É¦\5j!YUÙ­ã§f¢±ÉZâœá>ÑKée^º=Û©ëÏœµ^;‹»±•XÍSG‡­ŒÀ«±çÑw·±zÅ½£mç¶ŸTæÏ1skÍ›Æ†ôzmmÆjí;a5GkímÈ£µÆ¶6µ…IëiXëh—x)€
GÐŽgoÿÌg¹Ù1ô€ADÀˆj0¹Cm,e­ñ,9`l	ßðâX·¯ÛÙÐn°¶›içEœL¬ø³ÑŠ†"µÙy°&J[%µ£…1×´É¹Dç§5ƒ nkˆR±IMÂ&Yd| ÔŽÅÂ‰ÈúÉ……Iöš6‡HŒŸ/äƒ7×Gó~ª!ƒ‘BáøÃ½i)ÕBbmã¥ò;O!«{´»Yp¡Æ51¿ã¨kü¿˜Ïø¶Úÿ‘?`µê0l$Vãs¥‹³qÁÚÅé»RˆpÜZ›š¬²[È@0¬Æí¯UAº(H&cÙÌå±Hîs|!¼µŠ¯67Ç‚¼GÂA˜GYÑ`mÔê ÏžÅs:$Z{c„ Æ»¯Ý=ùè×¢´©sˆžVb8®MM#ˆmå2ï²b»Cïó6»ç£}=‡žyë7¿Ùµ‹2p×l¨2~‘Þô5Of­U"qÝÁ/·;¤ÙÙqjŸrÖ ¢ÆÀç+ùóE®–Ëãñ¬Á#°a5`­ìs¥á­v\f(yýb5~L‚E„jáÍs&ªY,^œzLmÁÊ£Ù“Ô@ò6…IqWØèeŒx°ÆWe¬Ú.×Ä&VÓq-¸†k°šibfnFºå±¾šZÕþñj¨VSM5ÕTÓßmÐÚ¼£µŠÆk›ÆQLI1e!b’Uæ­ÀÁjv…œ#è=I¶>ZÝAýWÆ@XDLÖÛÛKŒ:„Æ6ñÚz™žáQ¹má0÷=òÖÆ/½òÊ×oFëÃó·®ÞûÝ¥[ËW £µ+ Æ4Þ‹4|t‘¾
ª!Á*~˜»öÑ/À5åÐ3)º qˆ9rý>˜MYþ­±à‚Â`ÖÐÂJ"o°@Â6]YdOb©©Œ ’~BD.¥ü!]¹1¿)Id`¥ ÏpUT5`…hC¸Òp…‚	;>I —ÏÆÆÍqÕAÅc–o‰|YëT3e+¾škµá÷ïç2îì¡
­½¬YñãÞ¨9Kq˜Ür_]¿¾øÍ7SN/NÝCxkwß»òë\›ž^±,…°jæZŠ×òpMS•Êý¾£èõ\¦|ÔåŒ¤âEþèÿÉÞùþÄyŸk¾ÿÀªê›•°FVò› ‰Ð$ÒŒæÑàƒæH"K"³°ÔS¿8Š’qlè¦Jc3$3UœÚ²sjƒ7'Qb;ÂÁåÇ!Â*I1.ˆÌ!Š‘V
(Gë„­âM#íçº¿Ïã'öºí›æÝ\žy~ÏˆCžÏ\÷}ÝÖ@Ë|‘Ý×k“õû¾0×d±e:¹#NVzEÛÌŒà{AkQÝÅÆhl*Ø“jÆ(ûG¬½_&i	Öô‰=ÀÍâ=^¡:ÏjŸÕ8Ë’>ÉÉ­lTàbß¶%Øj“53ŽÝÆ®!¨öÑV“F^[¸¿‰µ°5Ù6‡õï»oî@Çd<nègï%ÿÌì4®l­iëqâ$·ä²NI¶ƒÜ"ôÙü•]k¡€Á×þ{)’î4%BaYñc+›ÌK³šG8ä`Y¾b¡ž*k/qhOEVo×¢ž7ùs‡(\ÄV3T3c­E †±&lÛ/LsK]‡³eµèµ‘*˜ÄÓWAá$Œµx€hN†mª¿¬ðÀ+;âW=CÔšãrÔÀ2êíâÄ•¸c–}œ×êºæh.]ñ‡fÐÚèV« Ã‘$za²\¬òÇ5Þ¾d®PH`´Z¼¹Ù‹1’*ÊK‹Er}‰ÖZŠÌ×¢iÊ;£„:u6•‚Ì’	>”!ÕŸŒÈŠ.à¡'™ Z+|_­í¯²Ú<r)óëã‘úé™õÕõ	7ª«Áîó1Ö¬`( 7xT!¬IÓ¼õ-:ÖÈìwx­ù‚ÔÈÁž;öîaÚð‰á·Î®E6ßZu`þâ¿üa`m›_««â™«¯_%€ˆZAe,ñå‹ØøN,R¼F¦Óc h_#E¼VðZ¿üµ0rv6ÌÑ#Lô÷×*Ë[úÈ V©úÚÙÑÙ»„%U$ñ›±?Ra—RìÚd^ÆÕLwóë¨Õäª©åÍu«ñ]c«ùÁ"[‚µonŠ@onmÌLiääîÌÌÖîÆ6¡ãÖê‘úÔkÚÏ¶?VwØ—öª9jé"Š¡ÆV3XûÝïˆMÂˆò ¬Íð,gõ—UVYe•õƒ|Öþç¥Ëô¬©2ÇJ¡h`VÓ°%fkO×‚]µ3ìuw§½vËÜ#üQû¨ÛÅía6¶˜ÏëêŠ»iÙ±jêèâ‚/ÞèîúbóÓ±~ñÙæÍ/¹¹XÂZ@Xk7Õt¯kö¹ï«ú ™vzº*^ùé?Q(v‰\“¿6:
Gq“S­ƒíÂ{@‡ë\ãÉ’ Ö¸“ÐmÅ×ŸŒxù>šüúÂGòÕÕx<™6bC`4|¶êvÆ³5Då"2b­E5&X#y>îa¢á©EÓdeÐ»íKËLÊ¥ =l	Ñ5£Šëx¯—ÏŒí^D¬Æ"`5g«¹ÛBf9q[G@8÷^ŒK²qHï e‰Pf0ÜÓ~ýç•/§fÖÎ_™º³@)9#Úàfl¼ð.±o®QWŒÈþUã?+Ô½ÀFþ´ï¬år‚¶38ÂÐì±bQãÀiÖË!Pµ-/hKk9¸Ê&õ÷özm’ÁZ¦©(’,‡a"[OFšJÃXSËQ]4y€}‚uÆjH«}ÈK`»E9dè6âJÓ7î¿—=XÙãH"k9¸l‰=]!#b%Î‚ËZ!6u¥I°OEsUö‘¡k)äµ}.G]^—ÑnŽÖDv¡r"CXÓÕÖôÆžfiÛaÉÑCVCv@«CAçÚÁ&ÙudóX•ñhª¬éá+¬±×Ú#ˆ Á@t§á`ANqh‘Jë_«µNÀnk¬õôp$Ã¦“lhKe‰Ø´l¶(~DDA†°fT!É(mOr =¯¹j’ºÕŒÖl€€ Ña™k5ZÖÄ1Ž]k’LÖ¤3ÍZse³—é‹7ÛIü4^ÙÜìpŽkbñøþªdºòÇU“xgÍ“ãk‘D!‡Õ)xÍq¸.¯àS>*‚Y“k„÷§Î‚_ûÓ¹h:§Ðxˆ,•®ˆFŠ¡Úµ°vMaýU±$Ö¹h…ò"ùÙ±|o¼éí÷ÃEþ®¯¦ÅüDõå™õõ™7PšˆVˆdö:!€Î#>­½¯?sÖìi!sk'5DÛu[uv²PËÚ0Õ8k5žV©£þƒõ"¬vô(oAÕ8qxé
zõÔÐêêêëß\=·úö=`fûê½«†j77¨ap´†;øÖÀî[xjH}-†kóZX ›ýC"Ã™Ù–ìÈò…ÁAƒ³üµÁÜ,îXf°¦?ƒµ£';ÇX‹ö¸Ô®{d¹,ú—0&VÕR@ž<Iä;Gwé£Ú<Y"¥«7ùŽ®*Qd©t}keekº~|}{õüöÕ·'ê5úÀêSHœfó°ÙeÅª" 9_],#Xd;­¡KNkÓhb©ý¾\ÿXVYe•UÖ?Ö&ˆ1Zû£sÖEcŠÑ0E•™hQÛsÉ"	ÝÇ×¶÷²ìOxí™><€“,©?.y
ÇS:&X³²G ®ã ÷°¿y
f«øåovü/¾ø¥’G¾Xúò³Ek‹Ë¥;”ò¬á¯Í_§¯iŒ+ÕT½ˆ½öòÇg>ý],ôeèâ>¢‹’™ oäµÓ–q´¹8­Ø>Ò>2X³f¶÷Èˆl?¬!ê"GhÑª-&÷1†‰R¿öÁßÏ÷ÑÅgîí(ŒÅïíõ€µîî6>.°u˜Ñ›ïèNW×Š°“iQEº=ß?š+äêóº‘áŽ†Å ÆZ­«I!ªYŒAÒní¾ÐšXÎ}«ÿS¤¨cïÓÆzk«Yñ'Mÿñ¿×—ÇëêO¤ÖµõE”¢5zíùQRêD¡?@u®´v†‰J†kÃZHtZ¥yŠ¥Zj#góƒÜ<arà¢‰I¯1*[¸Ö¦äË$wCT¡VGp3æªù°F,&:À]c³]ÉcŒŠH~xiðÊyqn¸Zgg$Mú:Á$mg¬I2ÖxÀÊÀš¡› -7Ç–öŒØ<µMz‹wËÌ¥7kSÖ4òOæóË&á¤ÃVp\¹ü­Ù=¶oÖ˜.ÉVTtø¶›j$±³	Ñ›…‘téÕÙ¬Ö,ç%Ã3Ž³ Ø	%°SÀˆ»(ôÓÂ]Nû›´<Ïº³n)“®²§µy?ï‹ßzTN((j=ÔZYÓzèçÏ÷ˆËd­Ñ fö§«öìÑ¨µl5ºÖÀ¸C"C'QÙó|QÆ[-êŠs°¦¹j ¦YÔˆåÅˆ£œ|>ÈÖoÁRÓ	j+æÃkž&ˆÑ#¦RÇÂ.5MO«Q€H³‡_Ùœa©/:î5;÷`“G%IÿžÛnöþðäÚx´ ˜	XŒ"…¾xåþx,vùrFïQx*w-¯iNðÒ 1Ùi^U"%òå|‹×ã’§¨dŽÍ;i“µXû«¾Úõë.2¿>¿PZÜwé:3˜	m
Ã)ê,-G+‘@ª³î€'ò×AËÚ­[®eíØ­iæ]IÎHç’0ŽÔ«Ê`ïëgß¬Qd@T¬X-¤5ò6Ž³¬qX;‡÷DºÈÐ¹··W©TÇÕ©+Û»óóK÷øgca…q)2˜¹öÖx×½¤<Ž×\ÞHÐÀVDŽˆÜò³f°éi¹Žƒk¿4[K È _É„IaÝø?qmo”Fú¤Oö4/6›¡•®òÄûï3ûömBT‹žsqœ„“¦¤\A(¿ú&&v7V;ëOð[½º½¤>Š|Ñ~íuHk~]¤@W}À6Æµ\7X;¡p4á÷¬M¬‘/RFµ²Ê*«¬²¾‡AkèÒ%ßZw°6>®¦5ËBdÁ2æB}tƒÜ|cí46ËàÔžÎ¬L2áÉÏ@àÆZ\Ä¦qjòÒè@a—‰›_kû!°ï—¿øï¿üàƒ7²Ü÷výâ³o.¯öÁÂ‚¥ÐoN--©Gm0yM7[BoU:–I®!ÃÇ™þôÓU™+ö]¼8ªÏ}Ç”Goq#è´„ÅÆ—¬‚È°‹Í%EK~V¤îDk_«dŠšÍ{‰¾þÁ>¬UtcoG‚qÙinÜ
‘Qn,º „vE¶ÒŸPHÒÑÖ^]ÇOŽD
†;¤Në‹Ô@RTõÂHíˆ+B®K?dµ‡>Á·ÛBXí”¦ß¾úí·ßž;w\{Gñ*_)S› õ?þ½Á&ïþ~ãîÊbq[k´°)ZÛUˆ?ÂpMI-"]‚FŠCwÍ~ff­©WÏ¸QíàI°–ëÌêqó§ÉA1?“8í>9mnI:Ñ2¾›–a¥Ü‘´ª4ŽÃg.³ŸÛ/íd2iÎ¨Ò1ZwXâÉA#VÒLUC1*J$<£ö–Ët†§£5¥ŒèÁ^BÓØé¢ôaMu‘YKu“5QùÈŠã
‚ ŽgVp&4ó›Ô„hÄrX#Yþ:¯M;t°Æ`M;¹ñk:×RÙòtHjrîâ­M./$ðÖ´›Í5‡´ÓÔÊPnw@Õ™\ ·ÍVíß²‹ZÌ¨R¸" i šeAVÕÀj­8VVkX©"H8¯¥•P•x‡V8r þÔžî©&ÁÚ‡žþ‰2ùA1+dÃm¶¨À‘Ð~D.‰KŒ¤g­‡÷¬áëÁg-OTYSCõf(.p¤†á×vs¥ËöÐ¥V	bã†QÉˆµx&ãq…Í:a[%H×ìq2èÌµK™ì+¢>ûwÞWôHø¯˜|&RÀ‘ûƒ&­­åŠê:Œ'-º_5‘¹XUUL!"
qãŠ1ÂþEs)õ®åõŸboo¦–µô7YÉZ›ÇU›)•–÷]š/Áj32ÍÀ1J
8.³ö>ÓwóEÐƒ,Èc,Ø†Ø®†€Éu®)Rº‚Ý.VÃ@Cß±ÖŽ²>ö%øNÐÚÜÉSÃ«ÃÃä4Ú¾zuuõæÕ+ï^/Í¯ÎS ¸½±sï>%‘+üÞEP@'u}qÂµGyMy#Á:lA5÷XÞá–¶-GFgƒä«|T’ˆš…Äåˆ× Zè­f_3OÍÂúÄ©XÂJT~›oRžüR|uÛ^®~£
H ÕîÞß™ù·õ©õé5Øluzõ<k¬ùlf‹Öôtò3")‡·MJ$×RkkAäù3á‚û'ˆí«ýùG?,×?–UVYe•õ×?\ÃZ»$Yv?¤vÙž!¬ñ Öõ°™Ï&rë?}ºV¦‹áÍAòÝÒ^7Á	sÝÌV‹+ü1¾yÝ¬u»CŠ»PHÒ÷²Ý›Ÿ-Þ°ÊlâŸ—oÄ¹¸TÚ,-•n,Š4v 5ùBhj~ŠjÈ+xC×ˆÊâ¶„°ˆƒrHBÞª¡ŽBFMbÂµt™ ÁÚi`…´æxÍkÐšI·bµ¯¼Øì)~¢ÊH»ùà“šG+ÈU]éjûpÛF‹jNi¨OfÚ;:’©úh:™*ÊoŠi:Ûh¤~Ô%È±  ’Eèª…¶š«€PM·…ç^å¶ŒòOÁš¥‘†ùÒ¿¾ß™R¦á•ÕBÚ‚ï÷ßëëŠ´Êäþ¼»µ|dúî5­Ý]‘,gùSpOAkG™[÷òK€{­>ü]$_$À5tSÒÂ ­…%½r¶Wvâp<6ëÉV)ŒþªPÄz”£–ÆJÓñ‹dðª1ÁZ”ÊYN²éˆ¾óËã‡5_Wo¾CìcH;	/ÆÚ´ K¸S.]Þœ¦JUò!½nBö;Ú:lÀZ6®’Ûn¶ºÊÝrhÖåúØx°¯egÄ?¶o5’ØfU5ÍY<c%;­Ã­Ú½‘ñÑfÙžIjSu$ìûƒÖô„ü.™’v‚GoŠŒÔ^Ì…µ„ø¾]¶JÌÓâbGškÌ5œµC´}5ÑÃViñ"Í‰Ð³F©«¬§Yù"ü'WÓÜÚš­$¢‘À}àŠÂÆ%üÓ°vˆ^¶çŸ~šâG1šHg4³É6S;ÛÏnE“OGòD0$Í0­§åÇ• dSßÔ=Wc~ž_i_ae…gýsÍ^E¥ŽˆXÐZ"íq&Sì‹Sõèe2*dª™*µJ<z¤uÜØ/º6¿Ïôaª%¢É¾LºàÑ¸W19™ä]jžTµÚ8¦Ð6>9ó©%>æP2šãsh–µt:’KÑª–L#©ˆúd:}íÚä‘‰í‰ôßä`×ßa5(kõL$²z}¼zíÊúš97¬ñ—3„µz|²ÎÎ¤¦ÇCak"$‰MB!5^ÒYÏ¨5Ó=‡ØÎýégÙYG}_M¬¦äþ£ok§¬JðÜÐI4wòäêëo9_Ú>sþêÖùë%•–—6†ÏoÜ½ŸOÄnªIØx›oi¸†N=Ž×Žø¼†6ˆMOøcƒ#†dB¶G¥ãƒnmŽÚHö+CÿÁ?Jû˜zÕ~úÒ+úQ½Å÷¦˜KÚð¨Ü*•n~Ã÷@Å·þ‡±Ã¤É­õµµÕù­U,±­ííµ ‰Ÿ'‰-Ñ|ÁÒþZW8[T°f{ã~p¿é†¬-ÿ~‚ÕÌòŸËQýe•UVYe}OÙýkæ­}èh9k*Ë°	ÎHá‰
Œ²Øhú¹ð@µ™(“°Û»{k†š%úwïñâp˜úÖk¬*ˆ±“{t>Q¡RHŠÔ8ëðZ‹?¹XÚüðÉ'?Ü|fÏ‡¥ÒúÔÚÙ¹·² ¬m¬¸Ð²ÅKëØC¯*Ê_õ=| <ü/è•mtØûG¸Óm„7j™ñÑcÐYlÿ×Á‡ÿµùej¯ q$ µg+zX¡ãí#0Üo˜ÚúÛßXÏÅ@³ÆjI‹ìø-¼5ÒÖßÍxä:*ø±®Û­¯íÙ÷
äÉ%ÒÉQ`­Ð|6Ãí¤åœY½Ï,üGa¡µÏ‡·%­ròï
Qùê*ƒw±Ö^%dH|
_ýëû'>GA0È_œ”lÊÔó”e®×„;;OáÚ®>5—»vN=ptþA~¯üÓOq&Ý”ñ‹£í¼ãwpÍIó±%Ö”Aj_ä:È|l²þ_»púxW›2úóêËCl÷£L4Ó&õf¤I†4Pã›ä$é!(Êyk1RKÒïí%˜h$3$“Q¡ã ×d­á¸©îÑÏI»±j[ûéžªyÀšGy*³”6¢
ž˜mÏÒƒv™±›Õ_;?’e¶É|·&-€µV¦^wìÙ“uœÆÂ!“m6“LÂqsUÂ«aÍG3ølïq#×Í6Ge¾ñhÝßÒãÇ‹èkôßƒjÍ¬0Ek5*84Wë¹ç++!Ç–f«ƒ„[Äp­=ô¢áMkYŽòàI„>0Ô¤ÈC?îÁ SjHËy´\ƒ5Ó– âGìÛ5Kö7ÖÂ&ëyêjA30 X@âíÅ)Ãä€— ÿ$€5U4*$2]µ?.“k``M'ÝYL7T	Ãy•¬¸dÅbã—›=y±ËWQ£>·/áü3`Ù	UCŽ>ñé5åA2d-ÀÎ¡D"’#«"E‰¡c¯#—*‚c…t!_ûw}µëá,ìõK—'f¦SõÓã²n¸½7'¢êGƒ€ ÖŽt:Nó:kÁ”5?ºgðÖ±[ãB54¬95:Xž³ÔþS‚5y`«‘
r›HHÒ÷ÍYƒåøœlœkl<wõêÐÉámr!§çKÛÛW–8<w…®µû”/¬PÏPÂ€çS’KA|Ddðø(¯ù‘qØ¬‰-œ¶²…4Æ¦{Re
9-¬	›ù +(6 ‰÷¶cÚsb5PÍ"˜ÚPýÀÊîŸMmKµ1Ý	¦­oO³XŸ™	aíŒÁN„©ýu(€6ùoþAWy+Pƒ×Æ]¤‹ù=‹å²©VVYe•UÖ÷ù_'ÐÚ%£µq†b¿­«E€µ¤‰’FgªÅbÑÑ1¬³ÌèXkÉ_Ë kýí½Ç¹3†Ç¸¿eþu¶;k©Ü$',üq¯‡ñ–à´”è>(3Mgm[Ã­Þ¼±>5µ‰¹íÞ\ emDÃTÈ{ÜJ”Ö¯¯_‡7¶É1XÓÝŠnL^tqšDTŸ:‰ÆŠ [­`-L‰t òPÞôG&áÂ}Í6›¶6uòëÚ<b§_hOÊ*$Ó#ï««£öÉ÷Ž´FGŒcC´¹ÕpËaü§ææJgŽ¿ÀmJ-²šOØjá$'Ý¾þ-€j¡Úúêen™N~,X³oñX«OˆALô½ß˜¿´pgisZ[Ú¹æ²5¯ÛRRîî~ÊCZ1dŸÆ®=‚kÜ_n¢5(ÎJ#á4A˜¦­±È·åûÅl3eªÛ{Û}[’&¸‘˜h"CÉ˜™õ§Á6)¡[´½Ü>Gu ãTTmj8¶O´$š˜Ci¶@5I¤¦z[ÈÞÖŒÓ²qVû¼ƒÙ½žo¬D]ˆmqC× -·cÊÆvTLzY{)UÜßÚÄžÀÎØv¼û-Èqœæ2•7BÚC¨æ@-„µá$PL‡ "Þ‰-¸WZ¤	gL à®!³ÓzÀ¥]LUb+rAâ 5aˆÉÅRÕ¡Ÿ)¹d±”bü	iQpI¥ KTfŒ©Ù@7‰yj=œ‘x@Ž?\‹zšx)H¨þ´ Ž_³ÔàG¿`QÂ?kfUÃŒ	¼Ï*¬6{ÞVSº›UY(8kÄŒpÄ«½´§ÚHv¼¾BÀK«ð1ä¾92žôš¡¹4­ØÝÅïQ™.2ƒÐ:Ù
Il3ˆgmîöØÆ¡T²¬åºÓÒ±ˆŽFùhÅJ#‹é(¯•¡¦gm¯ã…¿ÆjÈXM¦ÿæâúæÔæ4xÖp ÎÏ¤ÏL¨&9L ÔŽ¼ÿÂ–µ Ö„E‚5šÓnÝê<‚ðÕDj³ÖÈLmÙkÃ†kÄ‹ð;PKG}gíeXc’c–=2Dà?T7wîVã©×ÏÏ½;ŒÍÖ8Œ·ve…òÇ+ì­^ßØÙà³>V§¨$T¦?…òá)¤ò1¼lrØ`‰ -|XW¡ì‡)KÈyj6½±¿ÝHŸ©¸6`ZãYbS@5*6a5psÊ*æW¦¦øtêêöêúît=°6Íp´éíúßMvÿVÐY‰ÕÖXhÏ?J=·®6;4ÀºË‡/×d®[ÀÈšÁÁý?ú/?(«¬²Ê*«¬ï±iMŸ¬Ý€×°ÕoK-‰Töe-t“… kþ=ü…@§qG¢iM¿6_	jŠî·–5)QY‘¥.2±pó„gxrâ8o{7>øðÃõMF¦žyrùÃÅ…;öÿ]büyNm.¬,-Ý»¹|c¾4µE¾´}ê{îÝ«’Û­11}Š>ç.)GSW l¿fb6}]ÈU÷…´f«w~D˜…b	mAÊ´f–ë³4Î¿×A²Hû±O¹ÿQû!`šA{‡ç®IIÌ?Ž¿p¼½6x/-ßFuP!–ûô¶Z,Ü”¼û ÜjÛ…«(xÿÅÛÜ/}­‘2rÑB†°iH·3¥{¡nbiaæ/I×¼´®âÒÒÊÍ…£5¿%…j!oº®Yëš½§B5C`3ù¬–gcD½%ºã ™£êMcTöq@Jcmyá¥ œ´PÈ¼©=êºøÓVIx¬Z“yl™X£Œdfª¥aá¬†‚¦µ˜ª#Ý.› š¥ŽðYkFÀ€úÖ¬ì¶koWê¦"’¬Òn";ÌYS")å¸Àˆz9l¦X×®•|Û,öUõhSœYtÝ¼c«EBz)	’‡ª¦ôÚÇK—ö†DÙ“Ùôëæ&ÿzXM=eîò,0¨±Ô5=BB²"ñµªˆÑ$êVB?'bÜTY±Ç‡5@M'j®¢~QåMOTÖ4¢²ñy—8BßÅŽO©_Íô„±.Ð>£×ØÑžâHè›ƒÕ‚9Ø°YâK‰³kÄæa–±Ÿ&¶‘ä“DB³Öx
,4¾¢æLÁÓžœ´¸Ç­­rÓyPšg¥¸Æhdn-R$³¿2S,Æªjú8ZPS›X-
wÑ¾ªôFa¯¿8—ðÎ¢ÓÖ­(Rm¶Ñ\.]•VA:zqCØ A“Píï°šeöKªÐÞœŸZ¿q™`ì3»éßw@Et.¢X%ðkõ0NçC¸†nY“˜°ÖI&$¾Z'jLÁh¬ƒDHÜµÆ¹?¸õÖ±9FXë#—¡coÎ¬fÇ†JÔ]×œšƒË†·æÏ76BkçÏ¯nA7SÓì^ÙÙ¹IéàÒ%¾`žÀHòcßödÑcx-0Ø’¡Ã›-¤6¡ÌueçíòÐQÓo‰~âæ©ñƒkä§ôÁ¸ª]¡Ø€æªÝD¥y}áwÉUšZØØÝÝÝXÖˆÑœXO­®bv¢µiì5—­Yï"”ôÈ	ŸÊ¬Á0 9ÛãBIÛ%_ÆZ3X»ÀšhíG?(«¬²Ê*«¬ïÖÔ±ÆÃXÍ$X­E''÷ŠÕb’ºÖªF[õŽeý¤»‡´ö¸q§…ÍÇ4ü‰4PMC²­øy®‰­+ál"´ŠM,¶sâ¹É”–'ñ‹7–7?Ûûä&tv‡þ‰¥¥]ÅÏSyoaãþ=¤(ÿ-ÃÝE0DÈ>[VÖ‹/L9¤ÆF¿OÓˆêúÎ¯I~¾=†Q  –9 &±IPU(š?ŒÎ¶ß<ËI‹›&‹ä7`FC$Jld´áøoÇ’Ñ†ê4s×<eŠ´c4yˆˆËpäõòƒîŸ8ÊAŸÕc«…¨&[mûõ-n	·©í¢AŽ¾üñK|—¡·Ðˆõ+­Þãn .•–Öo0áòemIRóŸ&à»ÁÐ5‹ñGÆ¹×R@n!£ãÌ¬{Ö.ð `D›ˆüÀf;Û…Yl4W‰gž•6á5òÏýð~@T9nÃ
~æZÚNÁq$B’IâE«ÓÚÛI|­õ+À?“à.(†b‰4¨P™’ûa5^!‹Í?,OOt&Hh(;ŠgùÛ‡ÛË"kqþbô²e[šZ)gÄyƒã0CìHZ‰æ”ºZ©×í²k`2«¢ìf<fÛÃ°­Ù:x»P€X°ìê>Ý±FþöAÚä°Ùà?’EDK‡üòH®¢7M½jòÜ 5s¶¨jt¶“Õz²¤û“Y«ñT™bS‹‚AÔ^FÝb *Uäh°ö4vÁ)¢5g|²z‚Ìþ'~ÝÓl{6L»Éx+Îã4-Tú˜ð0¾t•úÒ4< AÚ£3ööW‚oÎŠãÙ·é(tÔ^¼¼ãI›WÃ¸Š(¥VgÂ5Îyøžbn<æ¥ñÔjþËkÉšJÜ7è‹©jŸ_+öEñMæ°Ön¿rÛL…×RgY|z&gþZ4iSïÀ¥î‘ù‡…ÜèlÞÂ!«%eµXÍÁÚõ‰å)´|øðÄæÔüŒÌ4Åá¾?r@N±™6ª‰Tvh­…ÞÚC-khZ°väñ"øj+"Í€/å—BŸÆ{WÁ¸Ç††H€D/kÊÚm~kdŒ8X>eå‚¯Îq~kê]è¬±³qnu{ƒºÁ;WomÝgëÞÅ%²vîÒ%¬qS.ÛBVù(¯=Øˆ-@6)@_–ˆÕˆ=´0æ˜=L½.{“ðÜÑÂÅ"Ýš™jÌ›¼Mdø[ÑjPªé‹Ÿ_XRøíÔÚÚÔÊÆÆÊÔ´YhÛPÚ„•;¦Ö¬‰Å\Ü‹5J¬‰ÏPŸ*a…"XmjsYÉ"¬©Åz¦§øƒ²Ê*«¬²Êú>aÍXm- 5Ëƒ4X{fRùÊ‚L2¹h/éóÚ‹kVu¯°´2ÍzÌ)æJÍ$Ï”ÙÝ­9ØD¢5õe=5°%À:M.îö›‰„k“_3Â‘Ë>³¼\Ôv67éUÛqÕww5\X¸³>³¹qsw
™»Æ¬çl™ñÚ;_}õ1ƒÈ”IµPŠ›6ÛÅ‹ŽØÆôµÃ3¾Ãö ^6‘ßÆö‚æ>ùdaêÈ'zJ7“-(lËô7D>ÝûÂ×™(5Øfïy{cÇûª÷á½hIhƒÉÌ uƒyæ­Õe?a²HØ­öˆ­f¤6Ïý÷M¥©×©…t´ößäÇŸªmïÍ|°ÿüŽ»6;{|vt|b"µ\šèÏ\ÚÝ]_\,	Öî¸q%›[÷:Å né»k)µ®ùîZ^Õ<Ðìi	¶£iÃÂ!Çêó½¢âÞÙþEµ#Â1ü4lòÕ|÷Œz&…FÄFê‚ô~`·O•ýªzÄJKklvÀ…Á¬Y-	ÇZdW-Z¼™,m„&5Ò8Åjé˜"F\!$Ç¼„&L0ÆI%×àìv&"7­c×ÚñlWEÜ$í`qbEWó—™jÔB†A"Ú	½66ƒøÿŠVÕïvø¬ÆÂ	HÓ|m¸
È{œ
ûî°‘[?pÚÂ…xQ²)Ü8nÀšÛ°)ÒJ¯ÚÁƒø×Ö.ÒÓÊ‚îº–¬T™*[³5vÖ,°ý­Dí#ç’¡ŸØœk`Í‚øŸóóù¹Ð2F,¦ÿ¹çz *-rDjâ%ôšÅ›«ý5€¯æ%5ûÈdá¹HHÂ£é*¹nŠqÎ@'pã•CÂlJábö
Xa•qÜ³tse_!S(ÓL­å
‰t{}—/§£4™y“ÑX°ó8xöZ±k­ˆ½šŽ¬¯¥rg 4Ìµ¾D‘:i‘ÚÙ3¹rÉÿ93Ú2µø;ýÅ±Áâ˜ÀÂÀá¯±2V˜™™'²Ä™ºi˜ rf|,P­òG|5­Ñµ±5ÖPEã£°†É9¬‘Þd›ë„ÕP£`­^”æ¤­á¡ÆF0Rl$Ý§ÆjVI•Á;Ò[ÃLËþÙð¬F{c±±ÖÎ_«qxXƒÖ¶Vîá«³ñúÝ»êh¥³ÕJÏïÞ_AKúXG)¼Ö¾ð_‚×|ƒ- 6›L6sÙBhÓ2€7{Ú"§{%÷Á¯/¢ÀxN æÓìí©¢šE@nÀe4¨ñåò…k˜ƒç§ÍðœÐP»µ™iºþÖNË:Œù™ýh°šØMÑymüÅ`Ã‰ÎÃúúÃÎY¬]rÕ–Ë°VVYe•UÖ÷ž0¢Øþ5¿’8ÈKâ4‹INÆ"¬íÑ aM†.^¼xÑ¿‰—ÝÂÛ³ŒkËD‰äƒ¾¸O–³†Ú{+„fØgd@zÄ;XCg°ZV‡)™Ü#í|“äÖ±›¥Íõ>Û\ mä™å••MÂF¨Ð¹e‰úÍÉå…EGÇõ ž*±þÙÐÐ;_½ó•D’©yÙJô—Àµ‹££Ü
ŒYlbPo¼Æ—ƒ„±‡…ml,ó-TØÓŒ{•sF;Z¢‹m¢v¹’¶§S}`J_^­÷²ÖÄˆÚûuGø[m[]ÌEš¢t‘Š$RFlªÒW@)zä_ªj‘±ÔÖ~Ð3}	ú(¦Rç—¦77×·J_.@»¤ø;ZSëoH´æ9ðO âÚÉ3gD¸†·€­äÛk<¨9i=R;–ªÅZÃpË[ác‹-oA#Ðjã{C\¡ZãH_¤¾Asù2ªE««“kÕ™v¬µXZ·i17[KgPH´á1=[Úg'Ülþõ>8Írûqçt­u«9Ò6kLþëˆww¡ƒVú(NkeÉ
|ãp+´­uY"?8cÌ¸L±ïTAJp@åX3uñò‡„M'µºx}Ÿ²B6ó7|07‘öBXÓF €Á’¯\ï«=çM’GÙZ“ýÉ¡¦VÃÕ\‚ÿ˜j-
ÉÊí’é¥Èž0²‡üGy_¸iVâh¦ÙsN”Nj†šRFlõô!òEPKjµ§ºã ²'÷N¤viv\ï*fÃG‹FL>«*IƒŒ³®à…X{q?œ@2ÔjxÃ>^ß,M{<×ic2ÅBšÝDÜ‹æÆsdíGA3¯jro¬H-ƒC}QXíìY®-Ž§<þT4‘¼öéçÅôÙkÑŠŠäçŸ~®Ž5×ÄÆ`ì›¬RÀš~Ôff}¨öoùjjXs9¥õú‰ëku‘ñó×gÆë•ÖßPçÅ®cÏLœN3o:<ÖjYó3ûY±˜;!XÑR¢5PÏÕ@²¦YM£ÔðÆéX{KÆšý7L¤F™Žó+qˆî.XmxŽVµáÆ[·®Ì¿¬<ykzëþ)áÛ•í-h‡ÒÇûw7Hç ’OÆˆà5	ÙÌ^{È_¶ØÌbsÄ ÌmR­žz<"sßÓ¯òµòã	P»ÐêCÃd·c®Õ[ó;&Š0(X?­M¯¯ÕCgÓÛ«ãâ-Éý›;Khdü[¢.Òùk&Ö:§×±d1¬¬)¸Ÿÿ[ÊX›0Z›ž(ÃZYe•UVYß+¬ýè’¯¢5µ&XƒÖb“1c55nƒä•±•Ë9Z£F.h[ãŽÝ=OgbŒ8Îìóâºz«Ñ,Äœ1ã´n…‡ô¸#Žc´©-Û­]úË]K°+¬{rqiéÒ›ÝO^~†ã7¾Ü-ÝÙ½|iŠ4æ‚ï¬lRå¢ÖŠ›7¼6Å-Ä¼²èÍ_£ƒtÈc/’HÿÊ+/ý7—y`S§Š?÷e¼QWiâOãé42àXœ2XÓ…ÿ¦Gª$5›Mkž¼ŽÍåXøéo‡ÏzvÅ„!á=¡úF¦v7JÛ[¥…ÒÛß‚kßÂVFkVy¶X òˆAÒú´6Z,ŽöRçwJ3›_~¹KlËûwg®ß“M¹°KïÚ7Â5~xÛÐšÉ‹!E¸×ÌFíš?”6ÂÃýœä2‚kÅ‹c§©‚„Õ GÔN%¤îØŒÑòàc^™†Q2ûžIÖ	Ê2mÈ«.šI«Ï/Š9UÛ¹±lPœäN€g&š-éyûØ²Èýõ 5O6®]ö1Öd f¬ý€žRG7G|€óHÛiÍv´aëèÖë€ÁšpÆjUÔTf›Åƒ~ÝbXÎ(¬ywmjÝ²›-\á¥E–0ÎÎª‰ÛtoP“ñiúç‚a­j´¡a“qŒHþlf¨E#Þ,¥Ó¬,#B2æ¸Ø{‚W‚p’büÉ‡¨˜àÆqZëÁXÃ	‹{­-SíÙgwµRgé[k5ÌìîiiéI«Â°F3¬å¬± _Óà	U8*‰ßü3½Ž-¯PèKhì5oÂ¨5GÈ’±TH@&äª£}é¸—Ž&	ì‹E=‘Lþ¡"­¶¦/W…¤jxÓ9‰}kª˜ŒÆÎj†Z4’‹¤£ª‡TL¿°¦iŠpº"­vuXéßbµp¾ÚÌú<(3‘ÂP[Ÿ9ÜÐ@ÕÜôœ5>ñ÷ö¡»ÄQßù(¬ýÿÁýÀ’³F­cPúˆ-‡Ø²¬‘aU8"˜Í`m(„µ€×ßrŽ©ÙÐøêë'‡WW‡Õ·¦pHJ!Ïo¯Î­^}{xnõüÜê†¼5[´±­ÜÝº^ZÙÙ)MYÈS	&*14E•!¯YAäc€MÄæ-`6IÎº¯¶ïüA¢IºžÔa^]§šÏÆïþlŽ…¦šsÕPéæ†}…`Ú]ýÿÍOà£­1ÜâÏyâ ­d èÀJãá¢Eü•f+—«ÏEx™Ž-X#ad\5Ðšuy«\+ÃZYe•UVYßoäšo¬kV‰§æ499Ööâ¯%1ÆHðßÃÍNRrŒA&-0¤5¤­Ú|;ŠyÝÜ&«¸ÑÃ`c2{qÊ!	ñ¬2¾‡LšÃáP­$7ÊÙ
 Œ?	³CDk7ntøÅ›ÛòÔæúææÒÎâ“›w7wùÿñâæ…C.(Ðk—[²è-|cõÕsJ³æVç¨R3n¿üñË/4^³dzylEÌÁÂ¯ÀØôx-šØ‚b?„ÃÆ“ŠÇ‡¦E«gý|41ž<FºãýnÐšôp»Ú£%t èËÝ–Ð6²¶A%äÂU¾Q•4q‡öÕ;/kgðÖ"{‹¿ÖÆ¬Òw‹Å_÷£ÈÚ¾ÚâÆÝÍK_,Ý½¿5>¾eA#%
Iï}³½¶}\Sieˆk1®Ÿ˜k3¼s¿3×4= ZóUá³ü,F¡ivÍ^¸Ð[ÃU#ØO	þäÑØ½fÀ´1®Œ‘´fÁ"ì·qØ*†¤Z,†ýF%$ðÐbq
`í@ÌÙiâFt*fVšì¶eol)-~“«¶WC²Õ)ÉÃ´i¤vk@¶ï©)$›åd»rÕW&í‡Y#ºÚ¶A2.	ÐKgþ{çÓææûÕ9×G{·’A£ªå¦¨&QäF²eË°ˆœD‘œˆa`iP.V•l)“…ÓU+ÍØU;J²ÚgNªæ¯ÌÆf^FtV@†Y!áÃ¨²ÂÅêut¦‹ŽTU+Ï÷ù½o^à Ù«î•¿Øï_Û`’¦ïÇßçù>±çT^iôÕJ¹¡¢üUÉJ‘ Ásy`vô¦±[Àwô¬µú¢kPšúâúê¨Äâ¢R•—Ö¦ñÔ}p£Ÿ)½¿(ÑZŸÍ–¦_ímU?>}‡³ªpÛDyp¶šãúˆÑÀ´7ß¦FSoŸƒ‚²>Åþk4ÖeoG/ ²J–oõÅz»
çS1ëHã¥;Ô…fÓÓêã@LG<$`VÇa…EÆ2¯N¼Kåx™oé\L0§È1žÑœµ†TòÈäRÑ\*ËÐµÆˆq\$Ÿ‹%ä¬¤9ËzSE—„Ö"ñ…;a’D2€ÓDgkB5¤FhXu1ZâÜ˜-,<~Œ·ƒë_‚Ø*¥™é3gTz¬Èæ¦7Þ \ò kI½lô_¬]Õ×aXs¬Ð,´6d‚¢µsG-‚5‡Íâ=æä“ˆë:Öøâ“*àæ7píÁI$ŒZ»µ°pïÖ=ÚÖ`µ;Ük#»ÜY_XØÖ¶Ií/Cm_mŒînãUY/ÿZ”‹ü[KšþÚ‘À›Í˜eœÒGÉ;AIÃ4õ¨¡–hàHMâ-gªIÎUCüxÜTÞ½åT-oZÕcûæqý*"ÛÔo#‰ùCï¼x~.ìþ|l%ëMTü$Íaî žÁ`^y¤0È)ÉPM´6³úM-²¦šjª©¦´ií/,9X›R¤éì©SŒ—µüþ0°ÕlìpØæÉz•>­ùÉîh>Í•rJI1K‰O¥²çã	åBBk‚5¸kã˜e÷ëX¯üæ‹Þô=7~LI$+Õû4³­nmmªÅåêjáeµTå¢²DêE‘|è[ÆkÚV‘Ž²èÑî½ŸyE:ÃDŽ^£ÏþÅˆWÜ‡ æ+lŸ[M¤löõ©_épÄ	Úä²ù:mÜœ±ö”¥kÇ²]ã4‡=ÌjG”@¿ª«•!Ñ=»*¬íèm>Ü¸ghuíK
!42¤þ½•I\>1Ù&'>™ÄÌâö|õë©ÒN)¿´¼]Ùlj.¿üN×`E¾•Keû¸\ {×~âp7òy©Ÿ8òB£j^>‹âÍ5)	`cæšZÖIÐ&óíye÷k´¨¥Ó¸l
‹ÌæÂ“ùf¸Ìrþ±ÜR'#O0]-’ÕÄ5Q™\²ô>X³x‘H+íé~y¤ L°†¢éxÔâü™  Œ;¯Y‹$÷ˆµQƒZœ0lpÔ<Àj…,’#pkÕØ< kÜq«Rdøuo¡¼$Å1 
qG‹—2™×Õut$7I[(@´ƒ©þ¼®;¶ÚIõgŸX}ÎÚë3»‹ÌªîÖ¨àìlk`Ñ®Æ@5Œ5åä“áßAæc§‘š²QçûiGëÔt€÷Õ³Æ«ÂjÎÆÅ”DBºœ‡]ìÈéÁ§ßåõa³I˜tËQGÏ™žåòö™ÛQW`•ÕqD‡«{ÅD`|$ã )ã W"“áÙéxo,CNKe,h„L>áñÜxCC¢N´ŸªeÂíy1ÚÀP{2‘ÀñW%d‚—ŠG0Ýâ‰%táx$œÌ?ÃGÛ\ÂSËç!5¦ªá—pv 3MŸ>0
¶KŸ‹G¢±Aœµnýgy^Vÿ«aëb¡\­”¦£'§¯œQ¤`MÎ¯,µ·4Ë†Ñ„"‡5IißD·9øŒIDÑ"€¦bHîžF›\2üžËrÎšé}kŠ!¼ÿúÈåQÁ~Ú-BF†[`5‘š´°vçÎÂ0ü¶QÄc+/ù×“êÉðøÆîÎú}Ã*+¬YÞˆ)à5g°À›Mºê MJ¢Èÿ¯d~ &BFiWƒÊÐý æyj©¶ó„ß¼PRÚ’–Id·DŠÈÌ´Jçæ6æP×îr8[ÅP“m(ÒÀŒ•£·°Ž‡y˜
9‰ßÏÓxö´¾Ü µ)ä¼53ÖjÁý5ÕTSM5ýÐ	#~¤+ƒôFÂô¬"b$1\ãÂ7ÉçpsrÀËëðhÍ7×¤F`Íå‹dVÏÈB×ÆÉ%3°Æ­[µŽ´§€ib7Ù	=„F6%ü÷°RwÑß>¿ÉEö) íU±Z òÕú·Õ½WëËÕJAq#Êó_ÅÐ¯¬üµ]ªúH8D·6×Í%Äuwýâgú£gÍÏ	F±ñ…wxl7<“Íˆmÿ4W}YOÚky9v×ŽÛcÓ_øã~ã5«íjéC¬vÍ
—îy—„ezc€Ò=Ùˆ»$Œl”Ê?·¾5>8§3oDqûÊ„ÕøòdƒnbçÆæçSMÎ4m*²ÂµHiXÃ™dÐ8=*jø(ÒŒîîÇ5äêG…ki‘ ûÂ!-¸ÿ°F²åÇƒ““LEb»±?ÎdóÏ>×¨9†_ÑÇI9¢Î•l²y`b,¶2H—5’IS6©Ì=°Ib[^›#µ”­!:ë6QÉ£vUff¸&“NÐ¹Þ±’yÜd§pz©¸ã/c(·XÈxÌú%{”ûéLÚ{º’S?²ƒNFaÙñ}'Xk½ÔŠì¸öb¤ì#,Þ¨mÑ“Oqˆ­€ÕœÞÒDlËßÔº(WšHu¦¹¢HeBvv½4qNgcõ8wï¾:ÉXë¢ú²ó"êëéêkà-+«_…‰=ÝÂ¸Î>›ˆ-·i×67M£Òˆîz¡µ³ítk‡'ö½¥œ‘s‰>2G AH»Š1Ý6÷³1×ÍSÃd|7%»ƒ‘ôÎÙ|1X-Šj¤v6Ô'Ò9ã/~‚cñ8™­kˆ¥±Í`µ^­áÍ; ´°&àc“ç‹ââ±Ž†H2TË=Â}à.œæQ$™äÛåÂ)qZ¤>&"Î¤ë»à™ÒÖa;}ÒôLñ"´§ñ¬xžx‘dŠM<¸±ÆùÔñ½Tçýôxcµì~V[;Äj"|µ³«ìTI)MYK¥tÆ<`9k^ï“MÉn¿
¬¡«þ×UhmíºQÐ‚,4ðÌ`ÛAX[à£üÇÜ’/Õ|gY"¤4úå{Ã-¢µáµ‘Q`Œ"!Á5l-þöÆîhKËµà-.—·¿ûî»]Â"ÇwIOÙÚrP$« 9^ûÀ±È³9]ujâëA$&¶¿–¸:Ló@- 5d¤æÿæ	€ÜV…¦‘7i±Z*.KÍÍ¥Ý¥‰(§_ü5½Ùb,YÚ£û³±Ü¼ÕIƒ+ËÈÉ‚aÌ\›6mR|â$[8È•™¬ÕTSM5ÕôÃÂÚ[Qõ½ï¬	Ö¸IJAÌXc°vbh(™ä³iß\ói-Ð|â˜Ü¥ô÷ ^ŽÕ®Qï(i‹À:Q•†zUš– Df‹©¹M(GñšN1«§7´ºÈõB¡JÅËwß~S}ùrË¶××ÙZ;–«+•ím%pŸìTfw”p(ýÏ¹ß©ƒÍ›>¤/ Ä¥ú#¹F^°í?6çì7ÙùÝf³²áµqÆŒ¤•Eð0£´ý¶ÚÑíjŒÕ~¶ë.L
ÅYÞï"·åE&S³¸³¸£BÈ÷È£Î¨² Gk` Ü˜ê!?Ø²Yª€®&Éï/.MMüŸ—Ð.%C¬þˆ~[€si^ÛÖÔöðšášëõó¢4ûû»}˜5y}wæqÖæ?”±¦H½±ÉÏŸ}>9ÆÞÈf#MÉ,’™–¦Ò(76™!Æ_ûºYIÔÆ`§“8&&`¯€ÑT	«¥Xjeá#&Ké×9*‹²gÜ–Â»q¡ PU®ÐÏ7 ØÜ5%@*(„I€|¶¢8ÒykAcšÔeÞG!¯^¢L]ãÚ~Ç!mžØ£I³@YL‰tÔi¨Í'6ÇXH¡9› ˜–^_œ,5øRÏsÀtò„Î¡@­úXWW‡¨¬«Bƒtð¬m¿ã\k¦Ø›õˆÄF¹`Üßæ©\W(Îû$Ü’àŒ¹N°ìÝwÈ¹ä…EkˆoÎ½ïðîAÈ.¥ŠÈN{[¹cÌx£íí¾cÄ[$FòE#¬Ö¢rþ”æO9d*ª«‹çrPX?Te‘ÔK¦âJÁ]S‡¬†¥Ée°Ø@7(®>žS~>—É3	[MjÊ†Ì	Ú2€W&ƒq–ŒÇÃ˜gønâ³vFc$5$[Îýk¸9Ñ†hP‹Dyx~’`‘ìX?YçoHG²äàÏÂUÜ(lzÖ*33¥JeæÊêêÔY÷wbÃ­qåví²o@+Ãåï{äÂÆUH9‚5VCCkC._„ˆþËÍ¸kn 6±ï k×£…÷~7
³ù´æé6Ö]k\£B’ÌÈaÑÚèè=hí–(Í©E°¶0¾1ºÁä5öÆ?/,—wø<gwmn÷q©e®ˆcE /ËÂ¢¶^›+ˆ€í(bÙh·©–ZÓFŒÒ¦‰Ó|P;Lj;ÆÈÛäV"Í•@j­•76ÆÇÇ§K»s,• Jd9ZÖX5õ¦9nÓý²yž³0H-]ÉõóÞ¡Ô<Ý<ýhºX£ø„€ÅBÎÍ¬¬ kÿõÏjª©¦šjªé‡Lù`›¬5‹yþ¹ÁØQXZ£[-ns±›‡š“áf®uŽ*…DlgG™ ´ÌCBØg=Ð™–¡D¬‡-L5[käª'ØÖxFÂP&pÝ,¸p<[Y*¾ª®Pü¸ÍÀlk¤ ñ½XÙ³ä¯­âÔTu›¼Ã*°¶«‚H7H1‡0Í¬}yÈbD€›?;ûüù×}l [£.ÙŸÍ—ƒ5­|¦6ÿ KÞ¶ä–’EÔ®–>œØÿÐg5·ëê}Öa-úb 5†ÀÎêòU€?ô©”‘g×°ÔÆÎ}ô™kÀZ&œÎN¨#™_©ìUî1»\Ú%6mýå+Á	pßÿ½ÆÖáIZJ‹yv®Áµ¯qí|÷¼#tôYc£ƒ5øNƒÐ>¶÷Öxƒ_ÎüGŸ?˜˜¸ÜÜ‚¿–IN(qD­k“¹pS˜=…¿°¦H -M¤ø$•¥˜°ÆZ%‚5Î³Šr˜#­ù!#â²×;
¦HD9¢ãÑ¸¤¿RŠÔøŒ ¯‰±jÀšòAb6æ/¦¾¦Ì~nv÷–—.aÇ/°Öj°fÈçêY…Bb5ß‚ëÚg¦¹
`-°ÒìHÛE?2,ÑÈî€èÜã­Nòk$1Ò@(vêTöØªï“Áf3±ûÏÅC]­p[)#õÈ`Í¢†:§ýV]'G:µîîþkX»xá)Mj|½0ûzo|´R'+³ÍjEÛ.%TT	ø½ÏÁŽø1¶•%×óòrÄpËHùïícR7ps¥•‰Û†±'G£Î‘qiqE@ÂwŒH¤Óqµ°i'ÆÓUð˜Ç>“2q^ƒœHÎçòIá§¢A›|6"ø•’cKÏÂ³°ü´H<:€Ó&Xk¦‡©ZR¾Ú@®QÿEêîÏ3ËûèHgïÒ¯£
µåêÌææâ'Ìâm²ª?)âeÂ;X“9¦~_k‡« ý€î,Ö.3óz'Ù 5*ú 5ylÀ¬ÉiˆÚÂÑá…‘ë££Ü¯fRÌˆyk¸ïÃ£kkÃ·~wïÞ0mk?ÿÙxËˆ¯ÑÚÂðîÆÆ‚BG·62Â?:eòüwÇg·
•¹‡j
ã_[øhÌÇ5yŠèh`ƒØ„l³´Ò;æËÖNŒP3Jó1-èÞ;@jjßUMøâ:¢÷J“±F³8’‚Íñ¡¡ñÊ¯6Ç„®ºFI0æ¦Ó“9ƒ“%+ÏW3t³?5N8gV“ØôÈŽ»Qó°¯°R!¤43µ2Sƒµšjª©¦š~è„`mÅ¯„ä©ù´fs±ÉFÿ‡cÇ`5Ô†ÕÂCw®ù´†hbò:™Hü‹@wñPîB½Ý—¬j! y›HóÕ€5îj\ñ`(áÆñe‹Ä/âb5Îžz~|µ²»ùëÊRu¹X\vÍ	ÕÕªƒµêJá{Õêv¹RÝÙ£R‘—ÍT!bî™m=øÎ0r¼o…–/›—ùH"	×ä#éšnHO¹ sÂuÓê µ¤–Žø§%Ð×ƒ‡£EüÈ{»eT”¸Õ^.~½R¨¬V Ñ'_<~øX#J„ÖÀ5µâAk:ÏÉYSY6'ì#™ËIžIfÿ.ZÚZ.…KšLôJ“owØXÿþ{~m”@ù½kûÝµƒÑâ-%hšæçoH¼ù<Õe8?9Af(3‹“Í—‡îFÃÂMuc“É¦æ¼Æ°ùÊ¢dÄ ÓÝý“9êk3ã3Z:hÃ2ó‡¬E]Å'´¢¹}R@ßdœÍã¿Ñµf›ú#åæ*8s!#ÝÉNP£êµdH? R|´­iOþ¾zgMr·zÄL&Ü­®Ž6ô`®ÖÆsTAúl‡uÖlÑÖöcíú_žG‡IÇaÛ·úË‹àÓ5¶«1o V#PDýX‚rÌººÏõÖÕSY§2âFhac‰³VG}d,‘Ëôâ·Õq¦N&¢î ™J#mÈÚ;OqØ¤¶Á§[/QÂÊÉi£xj&Ek}]„hàµ¾‹úõušŠ3¹DßÛTU'ê”2Â3:ˆŒá›¥ØUäIç,/@‹Çn[
Pâ$‰þ2æÉX »ùLþn>žƒÐR›Ö9Œ2\3)O!@î.Öw¸l€ÒG·¬Ñ´¦-ˆÍ¢ûS©T¸ýY8Ê|5kZIGõ«]ßÏjÅÙG³_}UÚY_,.Í¬–JíÍ3«Wìo£è ¬p¸ÌA…ƒ˜…C˜#æÎ‚Ÿ c¦¬­mÎ`¯‘?¯§‹öÚ]ãšk#ø j˜…¡øèš«‚|­Û/H¹¯__%„X¹uk|­ÅiÄ¤:ÈáQ6²¦ƒããårakññÜìrû¦µ‚Ê,Ð©€Åm¦£=0]˜MÔö'DÍæ_ûrÀ€ÚðÇ'Vþ¸Èü¨½´¬~î´ÕU*åÅÙ¡¡¹™éö¡ññ¹?†Ó<µ!lÎEó·›Ù†¤=±ÖÑpX-‡:‹Âz"üŸ|‘i¤å¦é·3n(öŸÿ—?«©¦šjª©¦¼iM¸öèWÏ¥³)¶?<Å£kTò3ØõÎ‡>­kHÈ&Mæ"¹‰œ™¡`ZSŸ7J›ðLþ'ØâLÂyiÔùÒµõóè©ûÀœb×Éôçšúæß«¼ª.Ë«K‹EÀmË’š·^mo¿$eºZÞ¦<f{ï	¥2j`û‚þ®Ÿƒ=®¸OÛ{A©Áþ¶G~ÙbCr-L#ùœÜ‘×´A6»ó\>ó{ÚfûÓò9i_ÕÁvµƒW„ˆ°K«E9‰Û{KKBÓÊî¨Rb8ïÈ§5úð¬ò«ò“I`“ÀÎœbeÜeÓ99÷t°?[Z.NO-/V_}[Y'þ­RÙ[ÖoMÖZQ¡š×<wMóöãÚç¼ Ê,}‚k´74¦öµŸê³}6I²ÈGùv®Y›.?Ö&&|FkÑD~àê™Üd–)m!Þé	 .Bô#|–:761à`;7äÑ²ÃÖ˜f£±ã)e@ÚADbÜ`6ÊÕ€8Žr
oXÇÏËËí±x›¼ÝV3Èb½º+•Dvá”yˆÆÂ›ƒµÖõÃõ‹½¹FPI‡¢a>mèÇ	ˆé :<ýÚÎ¾°Ç$eõÖüqkÖXtvº#}œ…Ý¨C¬«Œqo¨cn Gä¥þó­=Ä36«à3Nò øŠ¬–Ow·]ìk¨‹g:Ún\¸Ø&îãÕ‘ü5°pð©ëRœ‡<ßyÇMaC§ço´õY·Z_3isw…è`C©T,FEc‚ÒE8¬§#•‹D	í·GuÄsÊ$†?+ˆLk`ŠcÇ5dXn†n)Ê¦â‘’E¯èQ.[²}H™"É‘ýÑL„ö3æñqZk…bwÛ5ü³îÏÚ#:–JRI¶•Ü¿¿ÃV2¢>ÜöT¿|áFsÖ|Tû¬VFÅÙRyû«ÕíÅâLòi‚Ó¥™“$Š(©Â—,}Þ gÇ¼œ1í³v8^„›‹¼Ü¼y]Äv™{—1â÷­!í/ŒR/ýåèÂ¡:×>þes-k/np›:H¦¯1Ídtá=
!G‡oY´H€k~2$/öpö!È62òpüál±<×2^(?ÆK+.—gÇ‹D jå²Õ5ÜXK‡K"!¶ÃÈæ¨n;Z×?xá?(ÀUµÀRSùcAånöµL5 Í«m¯¿z¹^&Œe³X,Í]nj¦°sc®]EÍæ¥93MkvÒœ,úQÝ$wLíjìÛâóì5>ÁDÿÍJ ½9³¬ÕÆ¬ÕTSM5ÕôÃÃš¡Ú¯°Õ®€jžµ²%Y…QTÎšÑZ˜É3í"Ãµ 2 54IÑÛ' {=q’F™‹ù R	$í0Ž[B™ý¾âqÛ­IS+¿PêÈ/z9ÔúW7oÞ¼_}µ:µZ]\Y©¬ž]- kU—V¶¼¾,ê+Šú µ"YaÌ|ÿä‹ï¿Pâ‘èž&ùò%“ˆns]ó£¿ü;rêy?˜lÏÚ›Â[P9Aj=²àýý@
m&×Óæ)(lG|Sî€­v4«ÙŠËš+=ÿ¦Zø¶Z]Ù£âºRðeeµ¸ëÞÕFkwÖœàLûÁYë$	ÎžÈæš&þõ¿÷§Ww–¦––±ê*SÛÌ%Ú«ìh˜’ª!·ªéñšý¦®3¯nÿà58Ö vò“ùF+€ÏÚ®¨U+‰øÌO¡µO>Ë7ñ7æó<Ø˜–±–¥—ˆ25rÍ™žk&ä!šÎf’áÜD*uîü‰“©T$=n6Xc6¶ñ™C³VÚôE=dÐ¾fÞZ<ÖØLÖkÐlTC2û8 ©žcM³±]ãZÏ%`­[°ên½ÔewXz '&§žX6½PF Š'»×:-ÃË^G9û~û™‘×Áüþ‹û¶ýqØ\·»Ð~Ê#eâyOwV]_CW—`'S×èk¹ê™AžH,„¯ÖÕÑƒ¨j<_ßÕÐGˆ•ëqŒ‘Ô¡:ò*ëØMdr]Ju¬‹¥R½žBjHv SÔ”erãé;OOËH|jA#üT›í)p¼ÎE~BÚê:a5h0~Á‚ñT
o¬.F¦>J'rô‰‘þHüHC<§¨öh*¦p’D\` ÊåoÆxb^q#(—K²E]kšcùi XX`Z*Ù‰“ê*§?™JÄ#‘\.¬>ËqÚ3Ø®=yÖžÂm§ä´åâÉvì5‹îOb¶%Âf¬kž[•Ðê³Ú/é9Þû§1‹O¶·‡beuª©‰Ø3¿²d‘3a:vwb-LPä VÛá"Ht(·ßQ
¤¤­=`És¸{|ÆŽ¿©Ã¹ ˆýÛ5Ê Ui´¦×~$cø~tMy‚µ[·4^›tù5¯q„­¹Ç[Öp×Ž´<.Ïq„…­Bq™{q7mKU³³II¼e³ÖØ9Ll²Ð&]‡ÜŽÇQ@i§íé÷Â]ý£¥?êûóM·0Øvw·_m+Rdn¶°\™njßÀHsU,Ü¦_É¦I‘þ–Úï L^(ÆyeÅ»–à&vù‘4¬YÇÚ&kAþvá·s¿¥e­k5ÕTSM5ýð"aDõSSW¼*HÝÏš¿æK°æÕAn4ê·ø´öÌ§5áš/jä&Ï˜#AQý1WÌh R+šŽ2ŠMçc°:Æõš­Xov3=Ë«$N=×s{o~Sýõó¥W«Ç/ªKÏ;UáÙ«U`m‹ò¥û/RÓ·Í½P,ï=y‚[D7ÖÎî;³»ð‘.ñÞÛ{ }þü×·™+ö—ŠGZpÙèÐBÆl~\$oR]¶´yï8¸¾ÁeZ" |tïµ«ù¬f×kû?½WkWIÙû…õõ½RiïåÖöÞæÍÕÝ/vW¿^ÝÀ.üwGkÿò/?55ûy1×°¿&­–sìœ¸¨9Ç4´læ7ß.M6ÒŒ-Yý¶R¡ÓƒÆµï´\·¨‘ÂÎ´×†ìOò×°^ÖÆ>AbVó#T;6vÃÞ°&¤ÏO~ÊÄƒá\n2?²có“ù«—ÛÙà"(ª
]MæÂXÉH–fµ&m"éœ2BüS'¥t6¢^¶¨¡Ú>4£ŸkÍv<½Áî	Åû“þˆâ)—:Â	ûF7$Þ›Çîµ‰ð¸AÂaÞM	7˜bkA@¿kÄE°æCvÀ×…úøÇÚz-Â£<V´§í°Õfí!óÐØã‡jc… 4“á`WCC`Ï5­Á“oÕ…RÌ‡NPÙ×váÒ±ú†Pü\woº§§¡ŽJÇeè7„Ž§bl½}‘ö¶†7°¦ú²¯.¯ï„ÉÄjî ’ä­N^ÿéS
€O+rð©êßCÂnóó¼ýrîgè‹QÉ¼2M¬æ[grtÕ§Xç(s„ŽB!.ÏZ‘TœÜGÐ,“'YÐƒ–Lf¡]-•çd"¡'b¤å2Œ½Fq®&³\ŸâÂ~ÐãÌ¾N¦òá»Á‘ü”@ÞÍ‡åÂi‚ßX'’tª1¥;ÒÎ´HMX<Æ#ýýDâHýý¯ÿë<o¬f£¬füàÇ@bó âvÃ)›g®`¯…ß v“Ì8µ@²gè\3V¬µ 
2(‚gúj3…W©|òMÑ"þ–´ö»/G¯	È® Z3yµ…`­k×®qrd„¹hx4;(ÖXˆÏæÌg»¾fGFq×`´âlÑBF
[Dû«w­ ¢ÈÇkeÀV@En°Ä ››E ¸q?(ôø §¡¢¤1“‹Û^˜ˆÁZ¡4´±W)-oï¼Úk.-iÍ—çR>¡‘¾âsY»Ö>·¹ƒ.J„Ø~a›Ÿ ¬¡ügŸ„yŽ7nÓpNAß@šXí5¬«Õ`­¦šjª©¦ÿœ¦5ëY{Žµv@SäÙûgO­j4dÍ`MúàMkÞ6\rFPÀjØj‘\„^7·"k/ÔË<‹Ç{jÜ€5µ©Q8å±šÛò ]Óš2üLqÊÖXõþÕ¯«÷¿Þ^:{¼²U|~vêltUkJaˆ‡¬ÒË†È8Ü^çþðaÉbò,Ñô»»ga	Ê‘¾¤/ëšz:(ú‘Êý`¶¿ÙÔ”gÉ#^À?ÌÆ ¨‰>Ç²š8?é{mðÊ|£éhjsr8®{P iÝûíjvEè]®ù¬†ÔÅ_­VŸ¯,V¥+;ä`VïggÊ••ç3%Òk¼ÑÔÈ)#ÈYkY
5umÊÌ&É÷œÏž¿ù—nž»ù¨¹J×Zî!l¯ÈñçnY#OvžÐ¼†\»µ?ÉÿÎ_Ig$(‰Ö”æ??‘™‡O©&Óˆô±1ÿ|#—‡ÜqÙ2Ù?mTM‘j3Í7Ër4æ’‰ž‰scVþ˜Ë59þJfÏá¬!›Œs±k2žƒÕ„p^ü£ÄŠ]ÍG’Uã%Žðå[¶š Ô4/"¤±ìVaÖé:Õ”?¢}`ê5rü¥}!þ¡’´©Ágmv„ÊJqVO—ë6ó°Î, 5ƒ_†h¶áEkmµ4îú†<Ùku6Ôu*kD»­T;vuö©b9sISÖÚú»ñ×êgø/OMj}o‘ÙØÙIDcœ&½>Ff·ÕÕAm;»ÚZûaøY÷àiÆ\¿ˆéÀ™o÷ÁeøjmÝïŸ¾qƒî5~|î@Ý…ÁyÝw©ðþ›Maëìˆ‡êSªS§êCQÏò"¬h’Ø2F¢0ìWLXKe”Â”ÓŸh _n‹P9É	¢ýãæº¥4¥Mõ‘Œ\6 ængHä†T%	§QõM>{–Œ†…mÿÑ/RkW-d}JÎšJŸù!C‰tÿÇˆ`_óŸ¸)õb5`êp¤£0e»XE•™iþƒ$$^þ™’KeÊ(ÿ]z=yYEy@°ÐÚ!k¬¹»¬5eËCd¾±fkn#lJ²Ö†ù/TÒGO>«Ý~k6 [°¶02:¬™Ò÷n]Y•ÌÆ¦íØ5X±­Q¹€Wµ\~hÓ×€¶âÚƒÂ¢ë¡e ø\y‹Íe9^ò×‹Íi6€6	CZ
ö9í4ëTž@ñ}üá×ˆåâÆæÐî«™JéòVaºR(Ø?C$Š&Inj¶o§ù²í!Ý˜|'yÙ/ì8KR¡=ñéØ€¢;u qZÒã@8—Û«¬-PÉ|RXík°VSM5ÕTÓ])XCøj’ƒµS§N™±æœµãª‚D`íƒ¡æö…·o*…Dp7¾&™t…¿A¤Ò+Ò£Møã¨…˜ˆÍM¡þ—zY"—ÞÏã\~¤ŽDÒz)&\ÓÃz•½žøæëû÷WN?¾ZÄ^{tvªB4äz•46.(Š«+ËHÝÀÚÞ¶…Òÿñ«'{l¡Š½¦P$
ñ@„û{ÃÃ×¨Š$Ÿüþˆ'3ÙÐåC¶æ3'îžaškj#ÏÀŸ¥MfÆGÊÉèw:m¦§ºíW£Ôm¨æ—@Âj~¶ÈïËåj‘+£•ç_gW
Ëë/wJßîU‹[•GÙÜ­üSéáã]½d4i2ñÛºÖ$ZÄÎO²¦_Œ Æ1Fý2Ó—mìæÊjµX-57M-o—––_î­3ÿàåwß½\eÉ"Ü ×<ªEÁà5ö WÂb5°7ùsçûhºAzR°6?Æ’ ‘‰ÆŸjVv–âA’!néÈÉL–ÑF§ë¤3Yü?RþÏPéòBN&³ýÙB2¥D¦RLê{k6ââ"}XCbµ(tÆ>ÛlE]äˆòqþÖ0sÐ…‰Û+në6,cÉ–€Ç;Ð¥yÙ]1eïûˆFm£¿‰×qV`ÇÚD¾­al@Z–8Â	?6’-˜gâ0ÏsÇ?Þ%ÿ©ð˜Z×x5ØLÙ%b6¸ÊxúÄÖîþî®¶Îú­`]j8ã]õ†BD.†næòqÓH‡¤<’!gª‚¥)¶;±ÎùŸ¾0Ø
«bü,Ûtò‚‹é?{³óé´¬]h%k¤ûô;­|WÓ:ß}ÁPM-s­çñªÀ+8(žŠäÎ]JƒdI‹hL‘”¯F¹ra±\*%è‘„þ¼¾YCŒÍBøó1Ûb)u§áª‰ç(Bðd”.¢u”þã!²Ó¬µd(îš¿{Wˆ&³.yö,‰@uaÀM•w~ÿŒPöÚïÜQÐH*ÔÃ±k¿—tì“17¥þpäcßë‘ôùPe¦¤É¥Ùr©ù„.òÔZ³ øfOd::Xê æö;Ÿ‰Ûc- µtù²jŽÙlâšƒµ_^¾<2B³}¸òÎÈ]û #í¶Ê _ø´†h<Å][~oôÁ­áQ^xÔZ kÁ’µiíÁÜHËÜ,dW^ž]k/fBkåëå­ëE&?–IõÔ,ÙšÒ’5*‰l@›¾ŽÇ¹”f*"?
‰ÔXn!6
Ü‰Y¯¨šqvX+ŽÍUŠcéêæîÆ¦Õ>ú)ý°—`¥…jºÐ¯HÕfª	×’cÿYn2¢ˆ™oîOðŒØÛná03±%Už(’–µnt­­ÖÆ¬ÕTSM5Õôƒ7­kÆj&³vÿþýS¬¦¹ÆÖDjŽÕÂÀÚ>·¼~â™kŸ¸&`“ÒiuIvîS¤íƒgRÓÍbêY#êA.‡— N×ÇØàr¹×`­‡”’8××ÿð|åù)y¾´ú\[*×_­À•®‡Ü3[±_DAäÞÎŽ"G\Ðt¹¨qbC,£Þ±È-%èR‡zÂ„–Ý—$ÍèŸ/Ý±+,E;£»’Þt.C/V:ueÚb/öq}«N{¦îÆþ Õ«ùýjûÚbÖf)>âm}³rþyµº³ýj}éÑ£•êÌ£ìoJ•]÷8“Ð§5ý°ä¤ Í‰©kÚü|òÆÓùlZiŒSS¥ÅÊ}k3Ï¿ýö7¥½báÕwxk/_*ÈÆÝç®‰àÚ‡û£!KõZÔ4Š®1—o„Õ>¬5f™3üñßüÍüGÙÁùä™‰±|ÎÈ-“Q]$™ýDCfš¸Ú
Ëg›$2—Í‘bŸuâÕÎ§RJ…<.!VóÅ6Ñ* 5)žÐl;d´æ,5ˆÁZÌz%Õ)¯7ÖÓ*9X»d°Æf++tÄŽ%ˆ9‡©,ùP„Œ¸]{²TÛ–1š_<ÃwÎè&cíXŒsì˜ì¸ž¢¥É‡µ6#9–¦×¤×EwX«¸­'Ä¤k…“Ç‚°”ÁAØúb	{º`,Ž‹FC(R/ëïl(¶:ËbŒ5Æh­/†mÌk¸g¬4Ö¼0ÖÝ­½ûÎùt¬õ©9kƒÝÜÙwñt7°†Ù×=ßÍÖùfgw÷ûmƒçb)MšÎÉ9Ë¤''ÓñcG¤¸~ˆ†cÊ‹M$ˆ‰ò K‘•ŽÕ½•È' 4&ªÅ5zMÏÌCep–$…oR"jH¤â0Y8Kæ£IÐ,Ÿˆê›ðfSajy¢åŒ°IÝ¥âûÃaa3¬ƒ¹jI«Š´ÿx|7Øô’ŽñSgGöË2Ž€B‘T*‹¥éÍ*û³•ÒÌ™7š3bÖ¤°ÁV	¤‰X]n¾è(cÍýðpŽAkÎ[ƒÑà3kQsÎûìH××FÖ†ž¶€§f²HêXCüS¦žµ¥‡Œ¨ÿí:ü§n£›I¶ì‰×0Ö`µò8Ë‡k-kËåÇgUþ‘:òpßÍl³ep´H³¾}bß–§Y}¡£!-à4iY¯-LãÎ’ïÀVÃý2.—677fç†æ6*»8mXÔìÌ«Ôüå?ÿ¹”þÈ§þ¬òÔmM„'&Â9þ²È©7â†ØÐ‰GêV»b´6µ9­ä~pí·µ™Ø5ÕTSM5ý§èÏW¦6EkÈœµéiYk^($jFi',22=zmôŠ.> ×—BÊpålj
‚»d¨±ÇnÌ4[K@kÚ,j„Â25qµ,ÛMWÏ´i«[GN?»ºj´¶ºXÀ[;»´¼øíö
WèÕå‚°¦híW˜kßN-m«{Û¯öªøí+¯©¢¼óý…@"Â5;rÏˆÍ1	æÖVLôÂMÿù	²f6XíÏ "K/Èë’3#¥%ŸÚÎí£6}!¾¡æHM¨v$«¹Z+8L×,;;üÐK++éçU2@^­ÜÌ%7§~óOšð—Jÿîhíß¾äuûA…j¬©R=wùùùì„
"ç³¹Üfeéf²ùêÉ™e~)Kÿkbznïå··i^{‰	­Y©Ñš~Kpí¶õöùƒ×>’<FŸÿÔ2FÁÚ§#?0o)™“cÿt¢y ?ñ1Ãæó9XmRÙýòÖ€µæ&òü³–X9‘KŸKœäúŠÚÊ
aœ6X–Ìd5ŸÒXóã"©á¨¥¸‚÷Ý6"þkJ4Éhc ¶›Ï.W×°{M­šÁ˜±šFLÈN8<ë¦RRgô¦!·q@Oâ´îæ€=H©þAOš“C0km=mþH5ŸáŒÂ(qtòOP€xÑ}ÏFÖx	¾K`MxÖŠa“uu‚øf±c'¢ š`íØñú7{ú»»;»ˆòïê Öâ	Ì6D<XëPC[Ýû[»;/^è&4¥ïÍ¾7ÆrçÚd­‘$
ÅâO¿0ðýÎ~:ç»ûYÈYkH\êxëÜ`WGŠAªD¥NqlŒ¿è=é‰}ä›54ü˜IÒi–5h†Õa§Å­¡-^÷V‚`~†Äë‰Œ8¸JÈh$«ÃG‹6$#)J+ùÎc×‰ #ùH2ø8Á™È³D¦} ‘Ÿ'HL
ÌÚéO¸ó,†ñÔ¾–àX{:qããþ~A`µþ{çûÚæ¦ûÿâ€âš²!äÍ˜‘;=Æ/2±%S×«·9yQ$H;vÒèlMG*“Ò·L$“ÒÚÁÈÓX>R<wÇlçx¶†Á"¢Ãq˜…³vÎçº¿ÏcÅÆ»ÝW}¥Ëz~ê‡ÅMŸ®û¾îû¹£Ñ"ê¾òaÂêþ°ÖVWÖ6WêÕzu ™ÄúÅìyí¬×èd9‚ãÎÏa±1Í¯èp¼ˆ!¡×´ö XShÿ¸4ƒ¢iÇ!›hÍ¿VÌÄ¦XSíPn¿8í¬5ØíÆ?<š=r9ŽÖ8íxZó°mÍ¯.>°;|¹¼<?;{sëKŠ?IòW–Ûª¢ý«Ë‹O*Ëó@¥‰&ëoãØÔÎ‹Ô·ãäî<€´6¦™\é£Vþ—E‹Ô‡–[0ËûòˆÛò#FÅíöírNoµŸÍ-kÏe¬I¬Íùì©ÝÉôö]þˆ´r…â;ª_ÏÆ
A÷oM¯dÃ´·¡µ·Ö¬mMéý1kuÔQG}	#-íŠÖ6¬Ak~À¨i	(o-êÙ]Þ}ûö£¾ÛÔÖøæšÑÚa\+Rº¦:3êÎº¢.ò„Ží"D8Çn2GtÕl³¯1>HxPÄGÑÔÄäWÑ \$5!XÁisÏ+w¤ù¤®íÆê“µFcîd©¢º˜µóUš°žlï¯>YZÛ¬—×ÖŸ=àžQY!sdûys­…iDÛç­Ï!¶=Xíì(*ÒÏ!äúÓD`$„0ÚLô´Ýìw^[/:'	bƒmjË8j‹sCSÜ$·å$Êø¨F´ˆ«ôY­üÀËª®TÄT7(ôÜÌÅä^òvs#™[Ûœ+ýñÜÙûø?öªßî0GŽYr ”W¦è·­Q¦(”©q èJ¢éi’=JŸƒ\©ì2ö`»ñâÛ…í§Ï÷÷·‰†|ùM«ñ\²bHÞ&{‡Ú¸Æ»B‘è®åƒ:w ½fcTÉÎµw¯
CÞùe1™¼ó§Ÿ^+æ&ÍÉZãYÙÚ”XËÙ•S0IqdŽ÷¤­iøu VS¯Z_#îJ[£Z’JdŸx{[äŠ 9À§	ÙC!œÍ­lŒ^—µ6¦yk8µcj¬™Œ=æù9ãAÎþu„6†Ã‹œ¯ö[¨±Z{ëäíºµYd6Û1½éÌŽ¥X·58¬ófÃµaM§}›ŠÈ	@\‹ˆ”%ÈC ¨K“²Ï†‡9sá”°³Kó¯=}²ëT*“›ìî>M£¬©¤ZÆÔ¹f&Ú©¿Q2ãëoþhzâÔðô4?ïðë—&²j*kÓD?þhôX8:ú÷äõŸÂ v#ÁÚÅÓÝ8uÉød49uñ’û“Sñbfl2SÄË
€V‘®` Iÿˆ5"þÓX¿3ÈSËa¦ô6"§YØé ª¥XôË™ i‘M’Kwwåb1AåømÁmi#Ñ4|hÿXå.BN`„{‚¬CŸ<ú$ÐºŒ¯ qM¡¤1Ü¶û¿#ä5“ÀÿöYTûˆÆÊÂýüA»Ú–ß®6ï©¬©IÖX¤Z®V¹Ž÷²ß¯`«mè¬ c§ÑhC"µ~ÁÚt¼±ÖŽ‚”¼k5-Þpµj»i{f¨‚¼}ûfÿ/nûÉýþT6J7n¢Ç–¡o°ÆžÎkmmÁh[¶7¿ò^ÿìâ#ö*+ŒÊ~"“ëË-a[eq¶ÿËõõÅùU¨U¹]³+æ„ùZòTy…ÛŽÑ’¾œÚ†ôº¯H/çN,©ð ¾»²3CLÿ.<ŒàµqÌHí¹œ~²õ¤ºÙƒlË±#9â;³w²±¾¢J·k…Ú¯îä‹ÙôÙ`¡àÍq@§çˆÕÌµ’ÑýRgÌZGuÔQGßCÓÎš´Á‚4[¸F!$¢’4"©mAözb·úv¯^=j®¡Wh­h#ÔNH‰1DY3Ó”+‚Nâk¸“f„¸¨sÓ80{ƒKd,9™ Xk@›9kžæ<X;_oÖ7NÒ…UiÖ78¿¿ä] TÖÖöZå¡ëý¥çÒJuOE~ˆ\œ#§{÷~Ñnc£ÿ–îÏŸÏ\¶vËþMpû€áD2Ûúg 6ã¶c e¤Ä«2!”­æ±Ú}_íÿ”¬á¬}EûØÞ§OVëåòZˆêµO?Mþuuicîá?–Hùüãêv¤þÃ•qºÈF±šW™ú/Ü4;ŸÎ¤ƒI°1™Œ“3ÈäÑwå\y_Ñ"/Z˜‘/IÑ¬Qùò¹Ôhí›	‰T3êãÚíwxà^c81±+î¯=¬‰Ò~~&ûËŸQ©kbµ¢ÚÔÎ@i?¯
µw¯Õ®±-p}QÈÓÁŠÉ;Û„'c½‚-|µÕc½=‘ž^®y{sÉà9­M$‹…´–ìð@!ÇjÆn;xk&¶•­aáŽ±JLØo›9k Žî¨Sa‚KS.xc­]ôÈÒ‡¦Ã;þƒÛ,´Ávdäôø†YÊ‰ÿÚzÄðäà‘(zÃìÕ}XCÓ£‚µAm/NûßÆ¹‹“h€¹Ø†jºf–JDÃ:uš¯HšÂÔ·65«‘Òÿz4™¤ºQ£xQ½úðëáä¬ÆM!&ÀÚôt<1=z‘ö6r'ªBQÀ6úÃ7™áŽ&Õ]FÙ¥‹—FëO05 ˜‰Ç‹Eêó`˜Róó¤ð‡B–î¯W0ÛL‘!QJ³ ÍŒ9À‹—€Ò(hËdÀ¥a-iätÔí¤OEðñ”	™¿Š2 ¦Î¶áýwc…äÂQ`Fã±¡4¡ÚP Ë/]ÌæjCÙŸÇƒS€Ú«M)?(Ç›~	äÑ|V§ÅrÝêý˜²¶[­îÊXëµ(mü
]³tW C?” xCÇkmVSËšù_Ëã}Jtnš¶:`5I<õ–>C¹}óöÕöDlýk¥Ï˜¬&ò±`íqÿMµ­ñ-hZoaÍñüÿ¦fU	É"l›Ÿ¯èO­˜ZÍÉVO”¶Ä¢Ô‘÷p$\>±ù_È‡2¶¾ü»cÚ“WÅ÷`ágëKšÊ½²¼»³ººS]ž™­×5ÛPlwwü
°†86:ÓlvÍKs°¦C‰þáæ·­'x†•îüêVq?—Žåò–	ªI<ZCks%'ZÖÀµR'_¤£Ž:ê¨£ï¥Ò$f[PÀÈ‚*!ßxƒíå9ìþ“=±€&ÐRºŠ-Ç–—¹<pæZ;gÄp­èÓÚØe–î˜˜`þ±vŒÕùm©û
‰LáfD-º?5f—ÌòÒ™ŒZ¢JÎ5©þ‘±Ø'O|}òüFs»R:Y¦¿|óük=¥ýg«4TXÿçÖÖJÀZei{úhì7÷¬ÊZkì.F¾jQéH÷èvw™"¶ë®7]õÇ¹þÄ“’#™ÐµñÑøïM‡ ¥=%ŠsÕ¼ÈW‹ Ë_:V+/VhµÛ+½¿¶ÝØo4KskûÍoŸ>·!Ï¾¼óñç{;{{>d^§ãÎBª¡,˜&ºR°fK,“H¦1ÕâXkñZ6Vêâ¹ô\ù/M¦bÓ«ÖxÑ Ó^J6½G­µæ’FeWx—Úîš;‡ç¾ÓÝs¡‘œ<þÚ)%³Ñsgjw´±ÑúU6Y„ÉŠ?ÿÓŸ~ún­X¼VS„žü ís÷±'sy
msfiÈš®Î—>öéïgÓ;’ÆHrAý‚c¥	ÅÑ‡ÈÕEÚ]œÒ´ ×Á…ÕTZ&»F5‘ªLªbwÒ/xLÑ:éøÃqì˜|sí(¬±§åU¤È…lÃò±CéüNƒLÐølOò´.´«)E¶*œf‡	 ´~1J!å^¢»^œŒOœ¦møþ†Z×	º¸ ³Ócƒš¨–$«ñáõœˆfâSD’ 1¬1<9h-œ™ &rbbXTÆ7»H.?^¾;2‹ïÚôXxtðÝm?¸t)œ˜Èfù-NŽ…/œŽ&1Á„_¹ð¹ci™ÉÙÌXªX„ rù´Œ³ ˆOÎ~0=9¡JÇC®4GÎ:»fÅÓƒ#4,µ\0æ‹j™lAå=vuóu#Ý§a±H”ßCÌ2ìÿ®‘X>Æy9hF¨èmS±d€‹m®Ô/S9ŒÒXÉïèôµ fÉ"&ôa.Ø«1¡ÄÚÕ®û¬f¶ZÃ¦„Ð%U·®µzó7„*òµË„Ø¤Ž»Â6¨õ²9ÞX«	×ÞãÛ½7³Å8lUAnmÁjF|,3
ª¸ÌhsÎš>©¹JHÒÕ’ƒ5ìoÁÚß=þ	£I8ùèÑU†có-¶óH«¨·}·¼Pÿ-oQóÚüì—«KËïY ?Þe,Òº¡šVÅn‡$lcu¼xŽÝXIör‡Q­R'Ïd‰øÉÙñtïÌÎîÌ.ï-íaªÍ@Ë4Þè…]…‰ —ÑÏÆÑ™%Âž'=J§ìüÙ áµ¦Z:ËDÿb-›Ö¼rI¬R{æî`Í=<pÖd­mtZÖ:ê¨£Ž:úž`í¡XMš#däUXb¡¯¹ÞÒu²éØo®ïÒ¼öª¹f‘Þ iû¢<*%g'Ô€{†¸0ª±¨È|3”R½ä¤ê#¹‚¶ËgÃ:îˆº„ˆð°–
³'½AäÒæ†¹Fjÿ›Ûû¥“¯•ö™{ÄõC³¹®‚™ÊúÓ—õÒZc›¯µíú÷îW–¡µZ{{Âµ¶É‘ì	”¨ŠthÂ¥Ó-šÙ¸"Ûä3›Å¬)rbCŸy:m>¶¡ô+âP¤æÛjmVóÒE|g­µ¹¹¹Öhþq§Qe*tlãEýý÷×Jç šäÃêN*ÎzÝ"ïjù°æhÍ`-­qŒÆf)¤“	ò<¦§a5göÅ	öˆÅÉÚ?¾xöô›V«¾±	¦=Û&gDËóÖ‹Fe³®K¨ÆR;Éß¦Š_¿Þ¼FÏŸK§ó‰µf“ç¦jAb¬]cèš®ˆïó?+Þ1XËNƒpÓ…¡Ë…b¾/_¥RÈ^›àÒ ¶©ëÞ%Uo°'ë3Âb ‚ÎH#ðëç`¶á™«{¤ ’Ó.Ã¿ÝÄfçÃ´F˜<[³ÙN„¡$–ò	AJ¿2Õó6Xó¥“:¦cíºùg&S¯Œ¸fåÔ¶Ïìal5=›hù…Õ$öLö|KÊÿ[`qÐ`mX› £ŸW¥š³ç3µéxjltà·áÔ¤:Ö.³ñ«@ñ1eÝÝáxmjX!cñìG5ÔþûœŽNM@|“ó÷?UÔã ïÈ´¾é °FÈÈùö$ûc7^€êþXùæt6Lf3
ÚWµ#W¹Œ¿NÒ‚&ß5ûd&ã¸oŠI+y?™Ä€3±c³#Ì?Sä~ŽùÙ ÜH2üz77¢ç;k­;J¥$•¼‘œì7›ª–ëî
ÂuŠN‰ð ¨
E¢šHÜ¥Å–×¶ÿË*‡Œ)ÐýwC„ŒÌ\ŽN1½{mOMzeL}":B»ÚxÿÍþî±Ëg½ÕöÕ*û…@Vß>×·¼Riþ†þ¥·cs›Õ³Ô†®¬y´æÏÅv~N¯Ž®ýÆšòE4»ãeˆì[m#Í³Ù>²ì<Gÿ:ÝxË>O’‹æYk‡Øø!#7ß¸zûÑÍ«o= wZ{Ï0ì»I‰ÒÚ‚Öªý³ëKË[*f\\Y…Ðç7´:?oî 6Ï)WÀ¨eýñ°WeGzà!@ÓÂ÷Ye£!ÝÕUÆ³¬¨G­U¡Ü±¾ÃÈ¦7CPÆŠv5Çfþ„µ¶Èëè´¸K[6â0VÁs=9²k2Ù;w,1©˜ï9ëžˆ¬emW7±Úœ‡j¢µRÖ:ê¨£Ž:ú¾šÖTéËEB1"f»¬DÈà×Þ¨*põ,\ŸÛ½}ûú[f®)…­9\sû] cœ©e4kZGRqõ­±C+}iD¹dV.‰ùâ4=F4¡Ÿ@ìöF¨TzcnóaŠ\ÈÊú³‡÷Õ7^ÖÖ6šMZ»ÖÖ×ÕþO"}«Tj=…>ZÏšäl¯¯Bjú1…­Q/•[ÛûÔB#ôg9^SUÏž‘‰óÙîYîˆœ«NŽÚhÞB…mA6ôc§6³Am~†¤n,’	DxÌáÜîV[©àh•?­ó#WcÕ¹‘àÙXòÛ}?ó)ˆrn.WÚÙ«ÿ¡úñ^µ¾g?ªW¹é†¡Ùl¸ü}‹kTM—ò<2r8’#i—ƒ‡zƒ‰øÄtºTßß«–=WÞÆ_k6žn¬Õ7÷××ê«–Éé`Ö°Ðæø¸vó“O~ß{®'”Ï'‰d(ªu­¬Qéœ5ÓŸŠ?û%—Bœ¹öîOúSzÙ€µ‚õ0]Îj×¨‹„"3Å'‡Dk¦šÓx\n´fäÅ`ºó’½Ö›ô°ÁqsÒ=VS[ZóâEl'b˜Æ~$º\ú"Ñ.›‹á–Òüv$u{UŽŸÚ÷…5±•Z»Ô}Æ04ÈëÀIó_z(Â!;tZ÷ˆ–¼È~ö!4kP›~êsÍÜžæ¿˜xJ.µµa–Ã)u«QäÈCRQrD.†#T¦ãñDêÂë—†Ã]á1ž<<55a°6=À¬´‹„å')ZóxF^Ö¦AµZmTe|Såæ›Dœ kÑäÄ9…ù6šÉÁ¿é4Cî“VÒXÈcwÙ ´BAì–)äM±èë§NGs€˜)¹‚:Êrp±‘AÂ:ÍY^’3ÑSQ¥óça¹ ®œ¬´|„Øÿt(‰jÄ6°&·-È´ÕBkÚF/Mm$¿gC]ÛîÙ”5*¼qc¸Ä»£G}µdÒb ?ùàƒ?¤vð:¬vïÞž?	{©Ñ*UqÔ6Ïöj¶×œ+·=ÿ¶•Ê9$p-Q°fþêµ.¶s|qþ¬½Ó†µ­­¸û´«)«ß†‰ÌÚi–-â£äå`íº†¸O‘$AŠ×kï k7Ìv{|ó‹/Þz|ûÖ£þ­GC°ÝöxN;>+òæ{+•Å_VfgÁ(þX™ýÒMÉ®l-WØÈB[î_µ 9å€¼¹¯b­ŸÎlW;G%,WëPÇO[—fÙ®ÓÊZ£Úò®kRÓ[44óˆhašr -~Ó‘™¹,ìêïII0Î½|¹¯·‹iÜÈŸÖî Gk¹×ðeyä‚no÷¾½€f µ9•A>4X­uòE:ê¨£Ž:ú¾šÖÐ2V“æœ`5ÁZìë_[ý"ýk0ThnyùúuzÛ)À±RHŸÖáZ1‘Ðe±`Í-¥+bíéZÈ– 
’ûHQ'Þ?,BKM¤ØAxÊ€ ÂKõû8™
ãðéüÜ×zùÍJãá__lžàzü|‰¼ÈÊR½I4din­ÙÜ~V¯6 ÆËg­íçÏ” ¶½ýÿhû)V\y¯µÿ|›Yl
«oµ¾B+èc‡&2ÚïoÂfC®£ä-ýÉ¯{Üv›«$€ë¤ÃÌv”Úü@’Þs¬Û—j>«µµy…XsÒøª¼±ÿÍÒvs®TßÌ¤N– é¬çl¿"WÞûj¯ô ê½=hˆ‘ÿ0Z#RàŸ 5ý]Ødlm¤"…=¼HTÃYKÁL|:ë-5÷¿ÍííÕŸ<k~»¿]ßÉÌµýzãi«²ÊÔºíU£ßx,ës¡kCÞüý•ÞžswsÉ\øï
9S;«	Ö­é²ø]óÙ|ÉçÕ¶6ÂOËPE‡3ÉŠg²E<–\¾§Ã¦µÛÍI‹r)I‡‚î=cIpÅ~ãÏißW#ú?â­µsF"þx«M:^Kù#Ö´w3¯À˜ÀK‡žëE7›ŽÛ÷·0}ÙãôBòÌ.LNvOZ§šiÄ¦{|‘êÏ}È÷ÙXØÓmZ•ˆ6ìÌ•O²ùí¨óéõÚÀ_Ózh29561]CÓÒX×…	²ý‰1ž£°žS/FG0ÕDpÖ& 0æ1”Mb¨eQÍÜÃÁœJÐË•:uáNlJ¿|“ï,G~cO¦“Ä÷ÿH89O0d›Q¹H2kœi
7±ûè¾Ü0‹sÌã{ñ¦“ÐOL£jƒ˜&¯a¢a„ƒ0DXËå¢§Øê)!ÍÉîH> ÙóDBüÉþªªót8¨,þ®îðQüH¨«;ÊÅÒ]Ý¡!ÒCxu`In<5Æô€`ßÌïÐf÷	sO 5ËÃiÇ@f³	c5¥þ|€3Å4é·nÝ²žV«ToUc¿®ñû•ry³Ú\ú?ú}ëå7ÑÈÌhB97ˆ=¿UªÿÊYsÕŒÖ<gíˆ¯Ž¨Öîß¥V±_°¶ÛŽƒ”ÖÏk[ì?üÛš{®y¬ö¤ª)ò11qÖ¾¬=f Û£G7®óÒ‡ðë;`í¨à´­›³«ýý‹«Ò
}l_.Î.«ÑngÉøÏ//ŠÈ*³>Ú_þ~Î|?íˆ­f³;óÍ¦zã*õ•¥ÅÊ“Ö£™:û¼Ë3”˜*N¤ßlµqÝDb2aÇv`Äì¥ˆ©Íø´SBŽQXfµ
A~yçÜCÀÚÝUr?£Ö|k4ÈÿÑµŽ:ê¨£Ž¾:ÈR™,HXÍ$T{È—GkEAÂj(:	±Ñ	Ô{kvö®W
é¬µbZÓ±éÒ§úªeœCgÄ·©ÒY'Â„@ºl•qMj^¶]=sñ¬Ao®aÍÆ­‰ÛèoãÙCG³KJ¥¯?-DÏ?œ;)=´¾µgûs'ÉH©?{ÖÀ3b†X£ÅV[_}F[V£²Þ,m67Kû”DÚ$èç_µd±Uö¡6Wù±/á!l6$\ûóŸïÝÚLôŒ|qý½û¨ÝÕ´Gm`›»± ÏŽ°š‹µVß(Wß´6ëýoöË¥íæû‰ÐY¬0…#Žh\Ú§õ÷Js›øj{,Ö,¡5µ­)R™žHÉåb¨7±0JEyÄ’ÁÞ`°·ùt³Ô¨0üà/ï7Zå–ÚÖ Y¯qÅôÜIæš›ë]“æ®kCÔšQ_WÔ”lR¯ùÅeÜ®¬)c„µ6¹¾¾@VN[XK÷Ý/â½‹`Ûý¡ËÅœš%úk5ê1VÃÕU{¯Úéü1¢»Bí.6ÄÖ`Î•Aj%±&”§0“$•¥–
ˆcšUBNv)rL(æ-FSÇÃ‹¯Ã‘#–ëHËX×°H‹s¶z1æSO^¸°¹‡ÔIÂ ±þÈÏ'qûþ‹O#ðŒ²ÍxbŠG×x¥üþÓÃDŒLc›MÄ3ñ±®×‡/^ÒÌÃpª&0K$/\¤¡íB*uQj…\4™àYµQ&f_JkÓÃ©è$†š¨ÁŒµl2]£’b1EácÞ¶;Ý?6Š¦35b#£(G†=¦¦¸<²ô|ùb92ù1ÌÒt‘ÿÁYaT°»‹Gå¢îÃ\<”Qii¶˜d12IÂœåÙ¦œ|4¼·SŒê¸+$d’! ØÖ”íëS'ààÏwÐ©!eÙ^f6?L(ÒÖøLXSd{¶WS´ýjÂjoÁjüÂóoÀ¢c5–íçÛÍæ“£ø	þY°yjZÉv`L % ®Œ÷s<Î®XMË1ÆÚÉ²û)‚ÜÝzÀ
6Û5Cí¦`Íg5–›@å%ŒÜ¾}Û’Zû°ö!kˆakJ:wÃd\vû­÷ŽÂÚw«íÂAÚV¶4‡­âØ¬ªôuÙ-ªžbcÒðUY®xFZ;ÔQ.ÛQX³™!‡`MooÿN…—ZYÑ+êC¬ÊúÞîÌryaœwcvyÜ«vl#Ú'k~Ý)bƒÕÙë€Ù?jÏþ& 5tŽö´À!VCb5ÁÚýûäÕSò¡%7l5Ê i©ié„AvÔQGuô=6­á«ùÓs²ÖÚRèvˆ8W¼xRñ»÷vfoÝóhíp)$¸æ«)“D™Ž‰H(Âu1/à"Êw@‚5?jn¶¦¦î4EôI]`ÞX”ÔQµ¶ù’Ñúzncã¤§¯7ê›¯™ßVmVð„žáH2±¹ÿt»ÕÚ^¢ú>Îâ«5žrkò©øR«ºÙzŽÉFed£ÁÆÀüûª¢>-ÕþUZ^q¤´gÙÝ¿ðFQCmžxpÚ®;§í(³µ¡íµ±ÓfµvT¹*X«n\Ðúªõë¬·ªå…RåŸ5o,˜L¸Ö-Q[¹^-=üöŸõñžÁš!”õ­ümkŠ„¼{×ç4ûúY!d.&3(ÉÈä#ª¤Z/-PiÔ|ÿþë‹ÍÍ†HíÅsÛS‹‡tzeNöá1Ùÿd®ê•sLœã/ZchÕÀ„²Ð®	ØØpã¨fþÚµ<Q›(­@ž`’2J&­Qˆ¥ûÔÆÇ­S„å Ö‚iWæhgÜ:	ùÛ}&Õ?²j³š0âÉÍÍGåõ²Â\³ß;`-ÅG ,æ.3Vo¥Ìµ£<'Ù¡OoÇßmÖ—N:SGœÙr&XÊ{ªcµáÉáK§}æ¿LfŽæªEÃÝýôÿW+'Ë–¢µxdŒ5¦hÇZC²•2Aãt"™#.Ÿœ‘S“ƒ4çÑ§†2#áa2#ÃÁ†g¥s ö(³Ö.¿ù·uN‡ù¡ù1âS‰äÔt8ËNËWË¤“cƒ¬¢lMÊN3ß-¡Ìšlž—¹’a-¢JK	ÉÓ@–¦á,=QÈ˜×l4õ›ÑIF´þ©×/DbyÞä­ÚØh—X-ÇÂA÷ëá‘H”G‰¤ÒvÖÒv—]D ´‘ ¦´~r.ƒš‡m)ýÊD‚Øe³Q‰¯Æ}'º@¾s kB5Ù_ óÆ&a&VÖ°ÕÄj­–cµ•z…¡Tÿ­·êu:×zÜo"j†lÃ–xv¡rÜ®õ+{ÐxíxcMk²Õ(‚$g£jÜhäyk3ªŠÖ<õ?ºþç?_½yó†XíÑãwnxUÎXÓk?Ý”;‚µ†ç¦³Ý~‹þ¶t²­­ñï6“€Op¶ªik|ÆTÝ"Ý¾ÊÈJLÆfµ²ÂÝYŽ£ÖD„ÈXk«=:'êH/h¬²¨a 0r}e}e—ñi³{õå™þÝß”«»ã$1ö¹jÇOÄfãWzÇ•¾2îæÚq3Ág&gwJ¢iN:÷3¶S·íÓZ›Õ¨Áº=§ÈQ‘šKù¿øjŽÕ˜ˆ]2mtZÖ:ê¨£Ž:ú¾šÖ6$³Õ\ÄÿW’|1›BÈ¯5Uø$ùýÒÂòÎ­{ÈpíøRH¬5²M»1kQL¹¨ÁZWD&¤¦~5åD²Óã¢ºN–É&(£AM|è¸ÉyÓ]ªžä{„¦:ÿÎRe{ÍvzJåæúzss­^âÒX{Ùœ«“ùòÙvƒYbÏ@5©^]}º¾Dû4×x¾(ˆdÔm£Uoâ®®Ñ8æ$b[YDdzXO›¸méÒJÌÊá™mG˜íx£Íd'ÔTr`¬½÷ Z5c­ºR!º\ÿÃ¯«å³gJsé •€™ëP2µ¼]&2úÛÍÏÿís`ÐÚc°™km_—3L3ë7 Óv	ž¥.3FQdºI——ž¬Åÿ²ÝÜÄ/Ø~ú¢Yß§XTzª?d#ôN¬Å5k“ë§¾+˜ÿýÍ“ÉÿKÂF†žÍþüWD€i&0­ö.Ðv&7t÷þå|í]Lža‘Éä¹X P$ä² ¬t©Eü¶i\! t¤aœaÊ$Ïš„kb8:¨~”¹vÈXãœKîwµIÂ4qZ
¤HÅ£Ú£)ÒFI(R9¤šÀÆ.6‡¦Û1eEúë6[ýÐ£ÉÌËé×©ð„M^àÕÃÃŠAÜ™	Æ¬V”ãŽßrÆÔöå 3³ÔRÉL$œPñ£ñ#Œ8¨'¾yñ’8nêZ"‹…/éV•çä…h³ìb<>ÅÀì‘@nòÒ¥á‰8ÍÆ\æÿ0îY\NDÇ)q$¬3;:×45ZcúÃÀhTKMâäT"˜Ö’êûÂáDò$´v:ŒMt™#²Ø€5/¥?=5¢üÇ§O9¢ÀÇÐ-kÝÑè•–×FÇ›Cr!
áMÆª©t2§ÉÚ#]§Ñ)&¶E"Äˆæ ·HHµªyéÙ@Å }n‘'„t!¶†uÁX$ZSÇ²héŒ.Ïq†ówïYdÿ‡ÿp•:ï[–¯ÆûÖ®&h 5žÌ¢ÊZ©ZÅTéuÿmt³£q£¶!ÎŒ_ÉYî‹«ƒ>j¬y©ýèÁ²õ­íâI3Ga›Ž1rû² a¬¡ÇÌ¿v2XƒÕxql5k­%ccí‹híöj­±ûYÿ±ò]µCªº²¸üåŠ‘—¨$Ù“l•Ey¼K2Å¤¶}Æ½lGÌñ,vVæ1Òx¸ÙÍ¯ð|ÂEª»³+UþÌËËËõ•*ZY¿²°0p-ìPÙYj¼a^$ÒÖ…½8€Ö£Ö¼˜@Ñ†BºF–WYn—Ü7tYÔÿU‰T)XÛ5VëÀZGuÔQGßWÓÚ†é!¬Æb	#6lÍ$V‹QIû?:`nÑÎ½{;,Â5¯Ò§5tà¬Äã)ê¯`µ I’a›Ñ€Á\aËqY4Â~$uá”±Z´(‹Ât’]Të¬Ý¥ÜMËnk®õ´îû'¥ÍÍÒÉÒÚ\OX{ö²þÚÛåõõÆöËæQõ««Ûo1º57×z¹ý@ƒàkÛ««6ìv¥e¡#JCÍlÚåöy…¶A›DEŽ“¨7A‰Œ|"îäˆífûñQµYÍ`M#å²5­Õëks½øõ«}\hI±éì%âÉ‘$Ô¶PÝ¡eís~.èÉ(+„|lÓÖàˆÕèTKÿýg²Ö2´ædj™©7Ì–÷ÿºY_ËdÖšÿ¼ñé·g/öËxkÂ5Ykl­®µhé;×Ô»vî>ß±HÍ^ã˜•wAÌ‚Ó´ÊáÿóZæÌ»gÎÉ„òCº*º2Ïbg/ÛE–@M](ãd²'€™ÉÎ:©²éŠ·+XÏ‘z#ùhf>:=ùÚÈHÈc5!4bå)¤0RÕß¦Âš¼6Agšè,Ì¯)Ÿ±¹Ó†elËC¨‰Ô„k»üÐG;<Rý8<è½$¹0|·<Óâf«¹¸~'}òãQ’
1½’ÇÁÉ4C³ ØÀ&X³CÙ,„îµTš²ÉjcÃ—˜„–¹â…t×ë"¸N´MŽ%¨@ÃÐ³qÙÑd1Ê ;<Iñ$¦Yü‡o¸¶6Ê #áMg…nÅBvšã¿}3ÅÐÂ#Muwóú‘øèpŠêÖ…ŠÌµ–¡F¯™`cp5F~¾ðŠÈ“ê>‹vŸŽ†Ô_†Ó)?mDMl¹H–L[-$Á$ÝÝ` î
AbB5¾W$¨x‘ $Gýc€ƒ ¥•QX­‹G‡ôgëÂÄÉ“;‚ËfY‘<æÌ_i°FŸ%Wç\žçùiÇÿÙO>€{®â–ßs¬ö9¨¦	õ6»¾pn®ÔSÚ,‘þ¨úÇöxvç³6`Ø³-w0D¿/rÄXCJ‚ÒÞ3cm—ðäW‡xöÖ¸ë\ƒß]W$"_ KîWÕ£|5Çj7?$´öŸ¼Ã]À˜v•ç?ºzûæwºgÇkëèñòìòòÖÖürßqqe}‰âÈ+‹³ódT„l+ÎYc:ÆV<¶4OdÈÎb;t„Í<cµ+zÈúìÖîü’Œ6²7AAþÕÝ™4?ß?óhgv†ïW­ÓÒ[æ¤—X+‹Éúû­¸±l¯d÷’?KœôvØke«©fµû—*ðFhÏY6²s×PiW²Ñ¤íÀZGuÔQGßS¤‰¾µ‡Ns¾ZÜ8ì˜öÙc;JrÿÅ=ä›k~ãÚÝWh­'Ãì$Ï9é%Q˜S´¡¹éØXk–Â¾]A‡£Öœ–Ï"Ì-Žâ…X½¤2ýÑÀXØ*ØôÈoE*5×CçK›•zÏF“¤ê«rØ ±úæ\©òdAÐ*Š|öŒ;Jß¼\«“@Ò"ÂÞÂëŒcc°u‘ÔFV–¾AäˆS¾YòŒ¶J¥¥¸ÙÈ#Ùsñ‘{óNI$Nÿyi$»>«µ'â–s¹M^¸ü°ÔJ~½ÛËp±d¬×Œµ‘³ç .úÍh6ûÍÎž`¾·}{?’¿¯òò]úÖœdx)Y„hxWÉ¤UBf“ÀšzØ¦¦ÿ÷ûÅ÷?Í$Þøi2ó—ë•æÚþöKyÏT‰)é›kàš€µkÖ*£«ÃÏèÄÀ‡´?5m/{&™Øt=ìûj‚¶ì™w™m…Çv†g
CZj…¡ZØþt–‰CŒÂº¯¶qŒœµÉ•¡dfKçú¨iÕ§}öÚík!Õü×³ÇqâUXcªÐg²Ö¢Ê‘W;Àï{' ·I™&Ç¬¥¢GIÍC´±‰Ãqþz2[ÁUû”Ëàçë ðŸgÚ¹A¿Ò‡<»[§uÙIÝ¨³Öx™x,ÈÖ¦Æ`)âG­ËMOXMM‹â˜L=•¹ @†‡‡ÿæÁ=jOGT,ÌLOâdÓl6†w©›(üpºPäÅ€µÓjé‹¤£§~ðæ`-ûQ6«PÇtœ®iú\|b”Ý	ŒÁ®1Ëþ r3ÔI¦Rt~åÍÔŠDƒªqÔ4€)nuE4õ”UØ˜+ÉâÊY/Z(˜Ï1[•’iø[ç,˜Ç.‹=Ä¸ÓÃ LÑÁ#!‰BrÖ±ÖÍð6ÁE‘"41\„‡ëŸ+«€ÄÓJ‰ß¤y¬ÆÄ‰ZÖ®Îï^¾û»OnšõÞõ·n=Ø!ZD5-ÁÚ*7¶&–wOOïÂÜk½t¬Í¹‚\›ê§ùí¬ú|èµJH,bß&¦y­ïÂZkWA5Ö”Ùwe‹¤r!é³kž&_MŒfk’ò ¿ø³Ëq´vP	«yÎ#‚5u´õ÷¿óÞ#ž$í¿«Ïà³ïÐ†ÛÎÊü2CØ¾ÜZž¿¹Uí½žTæ1Åœ±¶º833[Y¥Å,n¶º²Û¯~6ÈmvggåÉüx•×;«"¹Gý»åYmKKàÛìîì2i"++ã¼Äì"±Z]ð`Zƒbx³±âû4ïÃõ§iëhÍÌ´!7A»M½±<a¥E¬5©-âÀý>ÿ##†¡ÝÂÛçç¼ˆ‘Ã4hkMêä‹tÔQGuô=ÁÚ_!5×·†\v?zƒJC¤ÒÇ ¼1Ä,Ø¡Ëá¿¤µ2©lèâY¢(
–ÌX›¤'¦ü¥Ø×<lŠÆÛI…pŠÈÈ°Eà{HÊëÊElv6ÖÜ!ÍÍé‚Üƒ·ÍÕõÍ×Ö4©AÀÜÆ~óÙÓòyŒ—r“ÉæS›'¶]eÛË¹žÖózu6ií?¥’
ÉòÞK5²mëÙla5l·o\6öË´“UL"¶…ˆ®¯ÍsÚœŽ[Ûc;$;¥{]DÉ«T3#!¦¢éê8šPù_PŒv¶'‘t%C½å=¾Ê;-«ÑÜ«VA%$ãÖœÕõ	´ö;×(L”³¤³<“–²Bà¬F×[š½(–ŒOa• LB$˜ýöÅ“¥ÿú—¿ì?ñ‚<ÿµgOA¶çž¾ñç®íY¿+½¼¡dH%üîÿÝÍ3%[#â‰°v€k¿b¹–=CÐtöÚ»gbÉk?½VÌp„ùÓu—MuLTDæ­»Ä1YˆÄÊ@ TMæú‚–=ƒÅ¬¸)’³ÕXÙš›UI’É®ä•B*èÆÄ6¢ÑˆÊ[swa7º!é›ä³gªMhµ'HŽ³œ‹ŒÖVMLilœ´c–m>ãßüXÖL£V‹3Ûœè=ã¥Ým:Î`„M‰Ý¼ŒædSÑ¾MMŒG2ÓÙl<3=•=ÁÄrÅB.B­b0:ð£‰DO;1¡ÂKÞ„ðÿgïü^Û¾Ó=¿ìþË^Ê&‰(‚oÖy#J²©%
²ñº._ÌIãdæ’ñD)RH‡–Iº'’–6ÔJ[Œ2‘’phr°“™	DhXŒuqX›&1ö\ìëý|¾ß(6éöì^ôÜèéûS–Tv¿/½ŸçýdóqPç{ÿûÞPc>åm’&^š…:š‚µ·F‚F/gxZÌbD’‘b¥ ©~i¼,S)Cš1F)¦Ø,Á½ÈÄ3býÙ‰pZV$%|+Q	iIüñ8g“UKPå¯#¢4r$#œŠ)ƒ£YÝ#Õ‘[€Óò×ŠÔ”+¢zÇ„`mÿ@/.¬øÉ/c½å
©DbpRm”–ÉÍJ Ù
a<Îò{sþüãsD+2`ñ	ÆÚ[^	ä&fÑf½±|³Qz<8TÿÍÌR}Æ^|öj’38ÌÂ%ö³’ÿ…¯fŽ	óÆv¼ÞXÃŽÇW#>ã))O×±êïRúÈÍhÍš†Yk‡£FnwOþøù"¦Ÿûr¬fï
ÿünû¹ŸCkd’¨R÷®ÚúÞ½ÛÒÄ«çîÞYgÉýÉ#ü»eðÖXoØì5Œµ«7	"¹‡sv{¢BÿÌ²……«+wÜ{¶rç.àvëþÅò/6ž¬4Èƒ¼úcÿj}îÎ-F‘+ ÿi£>7›ñ1óWmâT&ZCFlæŸc5_‚5MîOÉ-WŠLÁö´—ÕÈýPÓ(±Z“<OÍÜûù"}õÕW_}}OMkªƒì±ªI×(þèÑÚ ùj‰ &X(tõWWŸ(ÝþWÐ¸özZ+—cñJ_-!™$‚bqu¬aœM!P;-ˆSî8==ÀCœ‡¦ŠGÅŽLÆØ÷+×hYÃ‚ËÃzÜ-ghµÖ~¸Z;P=¼ÙÝ\Þy³µ/ZÁúj­¾Ù¨[ÖÕš©¯m¾è¬5Ö¨²³‰ûÆáÎfk»­^­6—gøk›]¸mc¹¶Ak­µj}å6Û²¯u™ª-~!„Àäˆm²íídC¯¢kë®rx©^o¸¾µÛ„näËR&É{ö¡Œh%4ªø~ü†dnéjãë'O––¾îÜèÀNÿð{Ñ¼kÓÖè[S$äŸ¼qkÜèË+—+{•É0mwÎÎ³“/(%P•’©ùÂ£ÕîêÏ~ö×¿þõÏL<Xûã³g;Ý®; Y—ï›½›§€ÊÌûô"îšÆ®}üá¾=À§­áÄP‰mñˆµ€È¬|öRedn´Ð,3û¬Hše`íz¹Dh·ørJ#H$¦,÷r14<”LgBÔÐq¡Ë6©˜.5€l¿Œ}#<V@æ
ÒX¸žµ=µ‘rÔx-I¶tI#q›ð+ëfÚ‡Ë@³WÉP)“ùZQûÂa—àj9“Hû€¦˜LvT¹"2Ñ|×üB,|XSßšºÞæìAo³'l³‡{'5¡J3;Ù$øqž'l‚hxk¤[ÆòÍ,ßÃ±w£±t¡B½i¦;vlŠÐûœì«\†.³éw§òáè»ïN§š|­Œ)ð+¢-x÷D+¬Ä3" ˜ËçJ‚ªr~Òô>–f;Ó¬ëxB!‰RêÏ•*<DJ³×Ë9œ¶ƒ‘ð@àŽÐF'6œ8ŽÏ–TÂ¿—’T"t Ž!±±æ…ÈƒTZ	€&«Œzì"±æ[ PM$ÇødÚÚŸ?JØ’1=,œ°v5ÂEÈ9IñL²ga5`›ß®V¨ð+òÑìÐÄ¨|Ÿ¢Âóº¶h‘Ì<µ{@R§·là÷Ü#å‚x‹afoyMkæí*_„,W÷èæ|‰*L¸j¾±¶Ö>Eî­°õ‰úââúÈ„R!A2IØÇÍiáCvkb5œµÏ€µs´­™lÄÚÏaµ?ÏR	#Ìî·f6QÚc!Ûë(­7ºí[ü5n{Pm]‹×ØlW¯ÚjÝßÇ\»·Hì~ëþ­;7±Õë ÙrBðÚn²Ä'¼{ñÌÓ›+·îðÝÝ½ÉêÈ«Wïž¹3ÁßB¹ˆŒ3?BòãÝÆSkD›8~çéëàMœ±²G:]F?š0Ã›÷%@ó[ØFÂ…Šš@Yi~+«‘Wr|(dV©õø°öO>¬!`íßõÕW_}õÕ×÷Ò´æê oó¯zÛ—`Íyk
S£kF“Âƒtì?­'
IÔûÏŽÖNî¥5›Çœ¬TôÆ¸œ³ÞZŒákjJëÑöšðlÜdKq<7òGà1 ®Wë¨#óØbSê]‹‚o{äÃZ°¾¹z˜‹ójc­Ú¢S½Ý]kadõ7êõ Mm;ÝV‹eõjƒr¿.ÍmŒÛPñ#LBƒÖV§±M2I·ópd3Xk/¯°ØØè[Òº¿ñ`£½¹ÚZ–ÚŸ7Z7|Þ^A>®Ñoïmñ5Äö“½â°&Õ±37<C«\,–M¹ÈèÐh1Ÿçñ˜r uW™ln©Á73®iÔÚ_6þX“×¬ýåw\­ÉZã¿‚«‚ä>Õ¹V¾@ ‡<4ž…Õ´–‡ÞæS ÇÉ‰Ô—r×Ú«…Õ­nkíöÿÜ\­É‹ÜÙy¨l69°©Üµ[7%@üô§ŸThøù7þðá™¹ÑÙ0ôP%]¸|=¤« C6ñ×Šs‰ü¡UH‡Ø½D=ä¡Cå×iåÉcëL§Ë%” ©?ŸÏ+‚$Áa¤wH-|™|Ò²ÒGq{©MFÌ×"Û°eo+H¤kŽÐPÌc¶A*²F/4Û‡Õ<9ÈÒ
4¢S2&LÓÌ5ä¼´žæuè(]kNK¹ÇÙY\á¦²£„ñ¿íèGFNŽqX¥†kÚä\V)!.Š„nèÙ+ÉýðU3š-4A)}¹kÖÊFhH<uTÛÛoE5
½8ÊDkïŒNgSà=@Ùt2œ;ñNÜ”—mRËw€ƒ.•ðá°R9«ÿ,MvSñ¤2ŸÖx6XË@þ˜d¸©IÕ<òf *‡f‹p?ÅŒœÉrSïì©EMGÂ>¦ÉiE,mßÁZ)ßˆ_ü½I¦„þX„ÓûötØäì«ì±ÈZÅ8kbÇe;ÊJú"9pDP(”'Sïðî +¯æM¬¦dX¿Ysö¿óþã»ç˜®F²ˆPVë~þ ý`c“ž¿3ÃOïÉdž£oâiÎôÕÒ`vÃó
ä©ªwTÚ=ÿã]Q‹XikŸÞºUŸ˜xo‘ð~“ËQ$úP°vÆ±zÌ ë“ÕvTsu‚µóï {Ckn0öcÕ?ŠÕ¾«ÄqÁ/mÜ…`½55Áâ5¤æx²¾ëÃïÝ»z¿ìNc]ÕŒ¤F.Àb·XÑƒ&uÕt¥Ý=ƒpèX\eº5§ 4ÕëO…tÂ4[L°Ã:Xs}i”Dúœ6â¯ÍBƒÒ^)Juw$TÒyþ2õHM¨ÖcµÑ°/ÏX“(‚ä­	Õ¬õóEúê«¯¾úú¾›Öªðš_y»vøðaóÖ¬gí+ç¬j'ªÛ2Xž\ývZ“Ê¹˜ðËE‹DÈ	IqEL£š‹PÈAº…¢b5…Bziþ4¿(l63ùÆ‚î¢“Ö^¯èpí¬«+«µÁêÚêòóN[¨]­‘ <P]­+Î-XmTw¶ºµÂ4vH ñWêµp×íî<ß¨¶µœ=$+’Gï<ðüù2÷µN½!«^xpm­²Ýòymqq—ÅæãÚzÔÌXÓS–ÝOh·Kï‡WÊ¦"~á<,¥€ eHnX63\oÌÌGªÛt®u:­µ›þÈêÏþòÀéFkÖ¶æ*!¥J&œc‘—…NÈ‘Ê¤a5ÁZ6?&0M ÇÃ™òj5í›ÍúÊjäö£µî‰f¶‡Ì7èt¡53ï ..2¼àÜg?ü£óCNÐ˜ïÜµÊetEöÚõŠ¼µCê]£úìP.w?­P(–/Š—.eÕÅV<~†ö|&‘LÐ_æ"Ûy#	¾4¾{Áš¹À€†]ë…Dödàæ¤DÈ˜—0¢Ù}žŒÏäú*›4“š»¹HªY³DìÍãôê¸c7Ÿµ|	¥¾àAYùñú&Z<¬æåDr¾'=6çá«£c­ÆgçÁê9›ÄŠ³Ï€ 7ÚÜœ5lVª+šhí¢E&›“œb=žJÉ 3VKâM%ƒµÿÌçÇÓ˜©y †—Ažˆðk,›mÐø[L^›L•yX¶œ¤êx’ñÛ–úx"S–~ôDêÄo¬E§©rä¯¢óK¬…ÃeÁö¬M¾ÖãÀÚ@HéÂ(_x]œ§TÑfZËþš-i†^”šÊh.LÚ|€¹cÉ8Ôæ¤	l‰$°¦ùjÅÏàñdãŸ~6XŽ§ÂnMÊI“a+nˆ„^|Vi«5/ÿ‹»:ÿ’Èóï`@°è&aowpË­mU3=–]R°.O½534t`”—`PÒñ¬yt`„PLWÙ«‚ìu¬õúU5ÿæb}bñÖ­÷&&Ö××ªIZÉU[  ¨„Ô–€M¡ýè$¤ö[ô§©e—›_Eä&c¬=Ö£“?´ð6“³¶×\ëm;0ûWjÛ]NIäôÅ&_ô}OëO€µ§gîRæ	‘Ýzræ w‘ójÐó¤ïÙí=eàš«Á¿P«7_Ír7ÙG:ÀÏW›ÂÍ	ÖØdGÒdlv¨¬¿N¦¼;^EµóŽŒ†ôŸwV“,S9R»ÝÏé«¯¾úêë{ï÷œ53ÖXjÜšô€@È0Ùý_êšö õL‚µA`MÍKy:{i­—	y¹Œ#!Sdpg_pV¬êúØ%ø;ZS8Ÿ‡8ÊÆ€a1…âP›õŽÆâþÈ6ç˜8U¥V²^iwƒ­ÎæÚa+ˆ£rsf³5s X›©·_t)o$HcC‰"Æj;[Ï¸*k±Õ]m‘õ¯Ã[;_kí<cÖk—r¨n›@ûnkus…Ô2&.=°&t[Y†­òžt“‚F´×kÜw;k~Âˆ‰[_«_+r!ªÈó2Ø’‰ QPUF×"“ÑL>’¨U¹†øºµ}£ƒZ›÷ð÷B?t¹F~ÿ—6n²¶5tk®’ÃCžXËŠ¹çsÖÍ‘ËGFCÃ£™k?Ë§æÿùº÷ê™oìGÃPq"·_<Ðm[4¤Z×Ô·¨oí¿¥YŽ·í¹D\`è÷,/ s×¸øif5¯\¹p™‹ãl“6á?ïGB¥³g›ì_:}ú’&%—›ÍL(c¢¡r1S–ÀÉHp84’à2—+â‰+n[Ñ´éÓ™š­lí8-ã¥‹Äi¼fX"÷Ö€Ì¶`„í˜º×¸OM:X³V5V•Djò¯C0íÓÚZôzØØgÃnM;ÑsÓtsòHæS á¼`ÍZ£ÿío¾àsBŽÔÄ~Â¬"ó'mgr¼YPJØF6#ÈuT'|Ó©Ô8‰"o¥i}LFßü´®Ÿˆæy‚I”¥™tšf/ñúôøØ±·f(}bl>Ëæøxs>µ?šf>ÛÛdK6émËí˜ˆî;;Ðñå¤£ã…ëÄ,2ìš„ý°˜HJ&‹ÀàÍSGY(cÇY³²D=¢ß·?Ém´¬‘ØÏ»n‹‘o‚5Çh‹$Õß½ñ·'fE‘=yÚ‹ìß)…ÁÅæý ¦?y$J‰’âÃÙÊ¡|“®I0í‹/Üà?)6^MF
%£sÐq Ï/~ëMW“W.XÛØXYÝ|x-¸TÅ°¯¯­Þk¶›áåÑÚ07•ABŽÖ„m°Ãœ bB¨æknxoÇšÏjÖÖoÝ\‡ÕÄ*ÈÈÖÖîªi
=k1Ô×€5¥ôSôH›5&J"ßÖ„pš¢}ŽÿV}G×Úÿ»&^7dÛ:/ð*gtv‡GNð@Ná¬]äüU|5;ËIÄ7GmøZ¶¥çI®6T?ß2\CèÅŠ–¬ùf›u¥Tôk»Qm«-(^$¡ŠêÃ´¬Õj33¬U¥ÛàZ?_¤¯¾úê«¯ïKÿ¦5§ÛÜl:ö·št¸6­~5 FÈà7X¨?iÝè(ñ[hí‚©¢Â6e9Àj
ÍT|§G-ÀØá©iÕ@NÉW“<ZÄ•-bÇ8#>†¹Ø~üN(€Ä’äïi ®ç®U[$·U1S××Èƒ|T·æ¥Z=Xïv[›Ã<¨Þ}¾¬Ùß]]ë¼ cQ6‰ë¶ÂÖF½ÚÙRDäÆ–Î€s;6ëõÙÃ•.ôö\ƒqÒ·,bÖV”^Fw+÷¶1× 6X›Éw× 5ÉóÕ\¾ÈúÒ{êZcò+³^É€)QPÉgr Heh2S1Ü:¼Tß¶éÙ$ŒÀ‡Øœ²ÖÄM
ü­4ÉåB]
g*a’EÃVPÎa®¤¬…-_TØHN`RøöµTsþ÷2ëeÏ²z¶¦J°I”àšÁ(å—¿ð‚!i]ûõM°Ï[ÉbØ\q×DGè\còšˆÍ¨-Ÿ¿t¨ IÙ§O7iõ§§íRž€ÈÐpQÞ1îpUi0•¤¼
#Ê`xØ²õØñû…´JÃ£dóùÅiFçº³ŒÈ{j1Vžz™#Ûè=¼6É\4ñÙ~¼ÄÍwÔZð5|xÓKémôØŒ¢ÄùcÜ^ñÑ¾à¬ê9sH¬§î5W5IP£fc/r2KÏÇð4ëKk¢É±w•á?[.ä3%8ã‚HGkÓŒ©NMÇ§˜•–MÅ¦Þ>ÊÔiÑoì„,{ô-x¬9uPñŠØªÉba|l,])TÒÅpŠ'Oi¤v<Økoÿ0›ñ“ÔEÒÞ{›†ºlÁP~Ï©_Ä½ƒÍŽ•$™‰ÅŠ%éküÉÈ)Q?ÌËÓË%ŒØ©øÁd)µ¦´\ü ¦‡%ˆLÿx8UÅcr³SÀg“œätlVÖ›1> ©žÚ¤|ÿØNs°Öˆóç|YùéH9ZÂ4³×`IØYëVû(4lÓÕ~rŽ¢Bl5PHÅ»Á›0LeÆY›©o>
ò–ÏoV1æƒCÀ®×áË1íÃ®SMq„ð€4r@@$ôK÷ÒZÛk¬ù¬ÆZc¹xgý½zÖØ°-,5ÂêYkÅâ¤Xø~ÁÚ9’Ñ›?zÇ 'V#ÀŸHXmaa}Ý‡2Ö»¶o¥·õ^ÅäÇßÁj¯>É™Á	µ®^Õo	Çžê»âvW»ÒÁš6•fñÈÌTClI*‚<bÎš³!‡oÈAê¼“;m'tG¥—¥æôšÈó4¬…B#¡ ÁÚaPyî¸f·*mÞý|‘¾úê«¯¾¾7ùMkZÖnÿh­¦·µ˜­Qmö•±Ík1Áš:Ðªø:^t|/ed÷tìËŠtýh‘íj"3KêGéilÖÆJFš£®%Bj2öä4û
ïi<’ c5/‹M§Øxš½(ûTB®¶êàL®Õ‘œ¡r{ûÀ XWgä±i8ö6é÷WªµÍÑØÎ‹Ž¨®ñL‘õ«kmøäáJ‡BHöŸ+Éþ¾‹¢~(Š»¿¹ÙÞZYÙx²-U;í.$·ÌMñq+·ZL·n1ˆ0kaë¹k¬	Ôk¹mKë`Ü:#ÃO¹>ÈÑ£eÂÉ\:¹¤2ÈQ¢G‹•\|Q?×µO¶[«ô¬uoâ%ø»<ý÷­$ñKÍÆæ¿‚`Í¼µ?©¨ptØ°©K­™Uä|>‘PàdÎ†öBD¹\~~þ¯ínšuùýß|Ã·üð>N¤©ý9æšÕBnó­ñiÉ6y'ÿÍ(Á´WÀÁÂe$V+QvvE£×@ëÅùs+\¯°>{ŠŒK§¹.”/KæÊ¤Œõ]£0×Âƒ56†=¹õ`¥H ’pã±9jÐæÁÚ6ƒ·ˆ|5Ë‰¿¤4Ÿûñx­‚Ð²û'=[KÓ<k'ÎX#b³kl±¶vòhtê‡ST[Z9£qd°æUö¬38Ë}4AŽcQ2uH%Ž“©¬}.5±5mÂ™bµ?3VÄ”«R|AÞg¦¡ŒhÈŸƒÈhë­ƒÉ\&Jg»Œý—1ÿî¾x.§ ˜x®\Ô²r‘¬} ~
oñ­±ÉŒKñûíÿ&6+IRÉ*SoDS|5é®/˜oföO—­ì“p,Þˆ•/(¯?WÔX´ÍPÛÝç5£I8i	L·eŠÐZl_ RÒ~<J™£Æ¤¹ŠÇDÈTþ#áÊ0›n–œ¨é,ca ö„mÀH0]–_›Î¤/1óøŠj–Øo¬–¶vµÙ¹‰Ù\ïüì·‹‹ÐšÚÕˆZÁ3o3^­³Ñi1.¾ÑXY«×‡‚Uþ¶€jˆˆ›Q?aÄ¬^ Á‡96Œ	°â¡'&Õ^k¬ÝtòÞÛY¤ÕïX39XC@Ú„Ñš»Sfˆ£dž#”™“ækÖ¶FÄˆXí•TV.ðGg}ý'>›±øv[#½½	Õþõ…½d8šÐXš[æ¬6ÿ›Â(4±'q
éœwÈ6-Á2ÝÖÜÉ.SÄã«°6§™k½>5'=®WÉYÁÚ…Ë=Të±šl5Þr\å¿¨šÖT\b)î†U¤±Øý–µ¾úê«¯¾þê ¹£ÛžµFÛšiI°Rú>¸Æ´5)!…_“nñ¥5TÉO§”à0`Bˆiô 9X‹(,S]d¯ Ñ¦_9Ù1´ëÚóÔürGÔƒµ¸‹c‰#kƒƒ‡×ƒÞ£`³z°µÕ
kîNwãLÏnUqßZ;í1Œ6[lg»v`hf.{Ñn´hcëâ“mv·”‰³¶s-?SÙ$3‚V€5¶={¸Ñîl™¸c(·¼bÄv‹»Z$Ñ¸·zË*#wgø¸&`sÛî(Ap3Ÿ|št­/ŒD‹@Ÿ&¬_u‹¹¡¡DÏ)£è}”Î\ÃÜlÕ×¶Í\{…ÖŽ}þü›¬]¿^t“Ölèòe¢E<eòz¦T3Ÿ¡ùI…t9ÊGÃî|ê‹ù¿ûó7£KÏ·_kÿ×6Éš­¶Õ€¢Ü 5ç®õÆ®ñÖ¾"i”ÔÇ‘ã¯[çšt¥P­ù£²5n­y|öì©æõÂ!,6`<ÿR³8{|8™/‡k¹2H	HÃÉ!ÁZ0˜°jHÖBa»V¶šÈˆ@bP¬†‚È·×XÚB†…Ë:öêË-p)¤ŒŒN¥bÖ39i [ÒP/*Òeó#Ÿ¹8„léŽëäÅ.›Ó¦Žô9÷4:‚‡¶[8ZGO†96öÃ£©4Öšè¬™Õ	ÇÙçV§^&@d|œLÏ
èe½qüË¥äÔÑyÅŒ>y, ÔKÅd¹*¥Þ8‘/€déL¥¦¦s³p¿Ð>+åS…Ôä¼`­@¦§¬5¦,¤Ò²K‡JÊèŒXæÇþæØûÒåû!U=f’áØ¾t¥B§enzêà>«tL2Ò:†anl!aSúc²Ä‡ö"¢®@ Nÿ¾ƒ°š$c||"Æ!²EPÛ,§n´ð¬u¶Q©”þ*¹ŠÇD$ˆä*š4‚Í6•™ðÔ.k…òÞ%Pä¼i€²©4Ñ+×?b6Ñ‰Ëø‹_€MÛ·øuÒT|~‰¯Ûõúæ
EÏ­µµúðÐc¾€5wÍo¯3ç«™æØP4áÜv¨!¬ ]„Ÿ-–¸©W¹§R Æß	mr`}¢'d”1²à`Í¡´ `ÖÞ³|~qé"/iMèf¬¦H¹þø³Ç?A~ƒšÖë¯âšo»íe¹©­g¤/Y_vÔC0m±ÉÊÑØKVã{p§í<bOxf¬Æ§œ©†Ÿ&áß°{ÖÙðœkYs£íìè°kú;!Tã˜?TA‹¡D8»¥½žÕÎÏ‘{<
Qæ›8|Ø&bÃj»`íiÖúê«¯¾úú~ë ÿ“XÍ‡5£5îþ¨5”P®Hd@±­…Bº7nP
¹›ÖÞñCFœµVÉ§Ñ1}LMN™}’™˜Æh£}MQÞÕó€…Ž0;¦AÚ6yæ6•Fòð½¬ÆžÏkÀ!6;ìä6ƒ››ÕF»DµVg-È±Ã-j CN·ËñFç…ÒDÖjuj%7¶vµÖÎV·V[Yn¬nl,/¶”(²¹
Êµ»+ô¨m.o1‰ì>eD‘Èv[v°f[^i­~’¨­®¨ƒ­—èÿZãŸÇkKCë‹œ©æO ‹0žRRkI@üšØ2–ÊpÂ_[ª·_7:"¦'Û¿¼ñ’ÖN2àÍ¢ô‡ÂáëÿËëZ»ü/¬'ÿŒÿzÃz¢<q9ER”=žMÃis\N¢ÑÔÙùÔ?oæj¤cn¬Uk¹üßýõÅVku§-XsÒÄpÄ§õ¢(5 —©NÖ2‡±š½žË\(7:ŽUÊÙCB^>ä|µSåU|#MìµrùÒé³D6‹%j—qËXË•Gú¡Öápb¯”dØOåæÛH&íRY;C‘L2#ïæ€¡šÝ‘0ÍäÃÌ UTÍkÎ¶ÅÀLõâÖGý rüãÐÒx–‚ÄIÇhÜ…c>µiÅA˜ÉÇ.ŸØ|ci›¾z(7/é€“ØŒâCL"ÙÑc›
ŒR¤9fŸ?­aµmîydðŠ¡“¬³"ämO©æ¿”õ§ñÄC†Jô“Q0©¾±À¾X©<}"¯ùzœŠºˆûDl<•IæhnS H3k“ó8ÜT[òi¬š*fêˆ—;Öghž8H¥òûÃEx	hâh<€iÇ1Y`xhÉý‘ŽfLYŽÀšÖ e-V,Áí£_ž‹zA"Üb¥ÅqÆ£ÉwDôH&Z€Ó.;Œeãé5[t†™ö%£ Ã&q
Áq§Oýý?’ÿ¨ Hî‚µpx¯ÈVcÂ áªs¿>r¬y|Ñ2~ ¦_Þ»«ù }_¿Ü²lZüÞon’«·F\H¿Í4ù/ÁãÚ‡Ò`‰	¨ÍÚ®ØœÀ€KH~¾ÈîØ~¡šëX“×?¥qm7¬yh#º’€(Ó²øµ»pÑˆ-½ÿ&êÑÚc;GÊåãŸl¤xï1ÑRÉìÚ}xÝ-voN|üÿÙÍÖûf$#1­ýQß¶á?¤·ÇbCUF¿ò+EcåˆÑÙœ¸ÌË{Ü 3—ðbgÝ;†^N(gIÙ"Fø‡|V³Hb4!…X;3›àÿªä®Þ€šëXcÙoYë«¯¾úêëß&Rê%Œ(Òò k!‰âÇˆÍÇ†ØŒÔ·oH=Z{MÛÉñ$©ŽÂd¥ÖÆ-¼/LÙýš‘•ùÂKÓ•³Ó	‰±1ãCtHþß¦è§9lqÏNC¶Dõí¥Úf«¦ÔÈUMk>ÐêV)—›é ngeãójp“Ák°Ý³g›ÕÕå‡ Ê3
 »+íû­|të3³­=ÛdêgÏ”@Ò^Ùä5’ðšÆ2lô¹üæÞ²"=½ŽÖÛ^ÿdi}ÿß¨H'4by	D£ªsæ%eÐW™â’ñª­Ö×í S«ñDÿüHHŠ¢ÞGIúC‰ëæ¬éŽ­¬åx6YRÃ	…øó/å@”,ÅuK1Iä¤|†F›ZûÁ7­î£Lnm‡Î5ŒDj"ñÅkíFÁò?ñúéE.mx€^‰ˆ÷*ÀñÉæÏf©…,ÌV> Í’ÔåP¨y©	 :]Îf'ŽÏV*ÄÒ R‘ÌÈÃÁ+|%
Ûæ²Lžb2d®#ßÀÐp¿K#¡¡HXËÇ2q—åoÚkÈMä‹©y-ôh-	¬	ÐhŠLQW(ÿW†Z6Ãd»éldÀ$ÍÃ-†e¶?®ö‘ö`Ì£µcn‚¶PmÑ)ŸŸ•tì¨ã4'·æP“0G7œXÓ¯MŽÐ¡ÐLnJœå™µžÏ¦	Ñ´²d>+è+Ã)=»-Ÿ`<±ÝRpp(?)¦ˆßÒÉ\%À64ò£.&#çCSã<„°‘Ô¤ž5ÙÏ—gËUŽ‘ ™ùqÈ®XºP)ÇßššÊ N2Ø`*šÉŠt·b%À³ƒQæÝƒq¡H.IÊ£¹c@s`ÔMÂøˆÅ]ý#
ìçL2*·-–Œ`˜0Öã‰tÜC± |†îÁ%<’<HÍp—8S8å¨qÓ(ì µC¨üj\d/’ÀþŸšÁ¥÷VVn|þ ñ§#µ3ÊeëþÊæ/$7ÈOHÀÖÈÈ®”ýÆ*²ÂYkªw|ÙtEÇÚKX{±v}º¨¿PÚÓºòEžNørIŽa$ƒ);gí¢Åöû´öþû÷3aÍg5ÁšÎ<^xŒ§vŽå÷Wµ½Z×ÍÓÂ^æz½^ó<¢-Éaš¾üÓ¶éïz“¾ÑœOhsœ3l³î5`Mågkœg³¯‘Aº’Gd©ŽÑ„j¦ÞÊB_SÓ²fCÖ.;íiWc‚º{f8˜ÐG/Ñµm°ŸÝ®.Ý®š§¦{¿e­¯¾úê«¯ƒ<ÈjUÎšW©Ik×jŽÖ²Ñ@4d¶ZXóÖÃµ¯·;xk/iíÇ>­yMKè²h-3/¤]«~TfuŽS¾7ÀQ‰‹áz¹xkÊár<¨4XÓ^twXü•íAOäçólYÒ„&"ÝfØ­­nvÛT5t)Vªvv^üïµDgX[k3>­Q]ÙYYy¸õp³Û:°¶³\¬ÕJøo<Üi×¡Àî3zÜÚ3¼õ^k0öõáÎÎÊª:Û£ûÉPkÙ`ÛKk¯:k×– µ÷–†—t=A±š®6Jå ’æÚº³FCŒJƒÖb`~å’·ê5Ê ?ï<©7~éÓš`ö±ß½ó‡3s#³
ñ`MæZ9BßÑ°4ŠÇÎÃj£Bûe±a×1"#Ç!ARdxŽKÎFëL‰}¸±£\HîLÈ^ënÜ÷Z×øÌ¿²ÏŒl8¯‚!…ks£¡>*]øS%†Ö*ÇKÙ³‡®ÏjRö!›ºFZ—íPù,!#»J+Ÿ>[ªœ:U(:ù–ã³ÎæG&TÚ¹å!7Í³M'Ã,åxÃCáÈ¨ú…‚IB,ˆºÈ†›–Ýƒ5nH¬¬áõø/µÖšXßâ Sé4´–" q^aŠ‰pJVÚäô˜`4òñcÍØÌ3Ûá¨; nY‚È´oÆùaþníûj:à›j¾ AN2Òzl2—²ãÙL$/Ìÿð‘ûX\._Dðd”:ð·G³™|S´V¢¾°œ•A§yXV°V}5˜©-•¯d"ù)ÀˆQÙ¨PV†KÜÆGC:År)ÁñÐ²Ñà;KâÀ1<z<•ÏáÐá˜VRød_¦¯ƒga–ù[cã…˜“Èý4ƒ«’ñ ilÇ8Iã¶é‘pX”ãûÜì€ ÍÏqõ¬Øfƒ[ÌRþc^À f«DÂF©é³)ª_¥®2‚ç&x+]ÁÂ½Rg©­EÎTcA$^J6«é‚9²zÄMø(O’,39V[Yþ\ý¼Æ;­ÍUœø¥‘ÍgË¤ÄV[ÈÌ|Ö.ó‘'½»"‡Í:«p{ÈÀ±Œ#6f"ìÃÚ^cÍÁšÙq“8ØO'vITæhÍmØÂ1œ¶Ö/:TûŒØ~Oïð»Ç1ûŽ5 \c€ºûØHmo»šýómï 5Ã›±öÚk@–·ádç¸é{Øz»Œ5¶)gôª'Möq"1´‰Ö¢YU´¬3dœfòü4Öì¨;Ì‚ŽµbñÛXRÃ‰¼;1Ô4uÑšÄÒ* kŽÔÈéÄî«¯¾úêëû„5ê _ª*Õ^Æ¾V£Ä¬Œ5‘ZÂj@,6f¤LôhÍ‹„ü°GkÖ´”ŒRñ$Z‹k1-Z›Ø¢B5´™+æÓÛ¸nÓ2ÓcØiTD*sÄë5’EâÖq?RÇ,œ\ó	Ï8ªŸÕ”¾]ÓÆáÆòýnµÞÝipp­c§k6w¶Úkõ6µÕzçùf«6îo=k­6˜YÝX«ÕZõµÎþY«ÓªVƒk÷­mm…nµ6Ñÿ	âP%¤j¨Zu`í^×Dk¬-ùþ»:×>
†Úµ6ŒÙQÆßÊdÈYŠG°ÃÂlƒ!²¾(ƒ¼VmñóßnÝ¬!+Hü1ãÖ~÷Îù…_ÿÒ†­«¹RÈJªPæÙœ¦üGM—ÎX=dŠìŠ"çÂ”¦	°…C¹ÜµÚHëE›ZÐî†úõ 6åhª©ò¥»êpí$4\4~¼ðë¹¹Ñ¥ëåLÞp-O’¿òFš²-ÆŸ%ÜVÆE#¾ÿÌGÍK§NŸÊOýw"GÎk•RÛæÒéC¥æ©K¹`¨ÔO„ç£;j(ÈO&Ï>2'ç14r-DAÓ¿ôS3Z³C"v_Æö±L]a›^;pþ8	#tòƒ(ÖÀ6NgÓ$L5›r¡"†\lÚ8¶×È!˜Œ5¹WãFdÊÙ¬5·Çš}Áš<êmdI¡Ë {Kýi:Ê…"Sº	ç›H­¹M–lAL¬*e(¤lkùbˆì*t´‘î“(Sö˜² ÿT&²ÿD
Êr*dr”B:˜oÉ„"ö‹OÏÇŠ•ì1Œµ‚Ê%ËB¸/Ï!Gn:])O«q:S*N¿5–JysÎ"1,µ¯øÙ
Ú"ê8£žNKr',DEP™œ5i˜fìJÑ¸¨Î=^'uÃCKr»ñP¶PffZ’PXÐÒQ›4ÞÔ þD} ÒÇ¿¿D$º$X³Ùj¨y¹`¶šjÞÀ&ßá2T3VCüò2Ó£ÕzÞåw}så7#uÕ57êKOÀ14„ü¦5¤='1„ bN;FjÐ¬æÓ°¶×X³¿BµEÍYÜkÜF	Ô8B·š`Í‘‹Æjß‡Ê°ÕÄjsÍ¯‚|ŸŽ5ª±ÖDk4¯]\Øë¤}«•Ö‹ƒô!'l›­ïŠÆÐns+;‰‘¦í½ð6|;ÒÎÓ©&y-pì¸óÖ´˜¬qs3×«‰ô£üµr€†§©3vÖ.ÓCµ^»š±?©‹g˜¢Ç;fÄÖ`­©@=kI¿Ú?=2õ[Öúê«¯¾úú>õïÿã_†÷Wl8ö5½§ø_À0$»s—c*h]éÂé)-Sþµú®‘^"$ÖZŒ>«¸£µ¨fd+¨ÅÕ­¬ÙSªyô×èë8x¬L`ƒ¦iYó¯±Ö"iê'…o¦—®I”çÔ¾ÁšóÖ´ò¬•ê&ÆÂQ«éGÃT[ÛØôpŽT‘eí:®?h×‚îáÖýv·®«þj§Qï´ÛÛíÏØØi4èp[~ö°½Ñ®U‰”¤»í>ì¶lõ´µÕk«õZËÑÚnX[÷¬5§^1äÒ’J GP$Ÿ/2º8"‰F<«å“£ƒ¯„—È¼ll?y‚·¦X„ô­ù³±¡5¦žM		­yñý&ûŠðR5eŽX‰\b4§68Âì©Ã¹Ñü<ÞTÌ5œ{T}Zý#y+¾ßkÕmŒÄkÞZ6VÛ°ÖµŽ÷øÕ“'*†<ù™ëžùøcpmxö£ëúÂ)µ„"]1Uf›2ÂÝê!Ïie®¸ŠÊñÏ:}¨œ'q¤4[¨„ÂÙKgËÍÓ§òÁ‘áŒ¾ÎL?ˆÑÃÁ\¦XÌe¬ÇÏ"GX‰dÐ"P{Ä1[’µûïo"ÅŸAÙ&3ÖbÜx½1pT›¬A46*¢©1Â-òc²k.¸ßu¤!£6ƒ1ä—€5öÝžmÚÙt†sžÔüv´éÑÚ¤øŸxw’±B“á
¡Ñä˜`-žÈ»*HÔ49TS7Y•,6áÇ³ð}ˆC¨Âx4±BEõ øU)ÿöÎ÷µÍûÞûÃyh›Åæ†ƒñ#sä!
—PÝBZK
ä \ÕÆöDä‡çd…tiåM
IYi×4²v·£s»bÔ&v+58,)Š³öÌár0ñy2…N:3»÷ëýù^W{éMÏ¹a}¢w¬ë§dË®ì^/½?Ÿ÷'#:ua`Y1‰åÅ”°¨î5>ÝOàQð†cÉôm‘`•çÄ'‘2ÏåU9kÉüÉžöù2¼x“ÌOüÁT0¸ŒÑÅÀ³DœÔÆd&?i™š`~™œ56“Ì\ë³´G¶äª!ísP”§Ý4=q¸þ yœ‘Ãïá¸õ§fcý›m‹Ø|·s•á·MÇMLŒÓ²n5¬Óê¥Ê,×æ‚¦—Þ{Õâó»¨V«]%ò^£¶½µS¯µ¶5»ÖØ^kŒ°12g5ÜTjÇJ²Bâ	±štô(Ïun4Õ…5«‚ìFA:[í7ßèoÃ‰[ïÒ´Fä~uëŸ
!MÆkâ_Ò<ìÏn+GÄ`\ºÖäqøqö¥cf®fÞKh·öxj¬ìcŸÞ²Œï¨£úÇŠe(cÎ°	Ïü2ôJÅháDì1[ˆ~u@3oÍ:× 3iNNKŽBp[cÉVà©éN¬Š’ß—QÕº¬F	¤±?ªWgÌ<“±öÄò°¶)V»¬)
ò&êµ¬õÔSO=õô}ÔA²0\»éXí—WÜhìgžˆ=‰Õ.<n¬R+ŸDê;8+.º´Öm[{9£7­%úûÔ¸±³Å9jRe¤`-‘‡cCfÃlS}«Á$Göh0C2‰™m]XëšnRP÷öhãÒ“`Mz‡H`­¾Ó¨ÑÊÖ"+²6ØxÀ&‡·t–Á¶<´}o£Å²I–9ðàúî}òD¨yÄm3gùjCCë»h{!Ùf°Q
¹ý©ÇÿógÚr×,gä}«!cµ½r´vkçÈÒ
<¯˜*—gƒ¹AQ¸@ãC%g´š‰ŒÖ¿lÔ;×?XÛùà¯“£5ôç?kêÙÇDB†¸Æ¨5iÉ/‚g£ðÃC+Êª‹rŒÝLNC{¹¶ô3´—e0õ8ëù§aº±Æýpl«uºÜ¦Wï›õõ]„¸¶ºf¸Öaèšåø{÷oãŸyÖáÚ!äâ	×J%‹òo5"óìøðÒq°6\QäÉ“þ<MmXª4«c¹…RdléxIEg|
_-lenVY-—Ó)µ9n"ÚØÂIK'Xà	ÖDoÎXE`Ü +·ÉX‰bvÀVË&xÑYÎH!3%XÃœÌ”òHù“Ðš6Uóh–XˆeV¤C:³¯Ý@4ÄžñOÅÇuÊ•SªI2åÃqŒ_€iBþ	yìë›Ïgá­L1•JOÊÊ£*Q#üC8JJÁVÐâÈ¿1VË“äÈOœfG±–¬¦óÔ€5³ÝÄh$;N¼0	µk6MQút‡)däá#Ñ÷(êÁmÓ™±ÿ™[ÈO±D6u{‚/ï'âSü“t©%Ì½›þ_/L|@fz%Ò²Î 1S¿'8K§ûi8«˜N2®ÜU@ŠÌtF5’pz’¥–¥9#OÍó¬›s}11%÷áž aZÆ{J¬K!v´‹k‹ÖÕœš>ùTs¿øúk\/i¸š«€«á‰_µÌþNçúîúúúÐzûÓÑÍhl=92:4¬>„5Ö1“-˜¸¬v5–ºÉ ²Êqw{œ±†„/X“±ÆòÖS›xXNûãûÅj’åÐ®™
!_âÏLF§*Œv¦k˜mªƒÄS€u{³EB`±,\œåö8qø Ga¡Â0È`ÁŽà¬{·ðAH«¹9á€¦qKÌq±ÐÌ6YjÖï6çJ Ã$"¶uÖÉ¡‹süQ-dµ ÕŽ{ue0¥#„"oþÊ†kÖµf°ÖkYë©§žzêéžBvµ+b5)å.”ºkB6òŒ#ËÀÚ‹Ž·‘ýmkæ¬‘8/×¢?ÉOŠÖúð×’uJL+.=‘`Í’DœŸÄq.¡25E=Ân6_zG×Ðæùó 8+k#5-Ù|4ebf¦ÛÇ43T[æd½½Í0¥Z£±}÷A{ˆ6Âý‰‹dör}§3ÒÚ½ õ|§HÿF½±Í4l¨gY µ™•¡ZÝ6î2¹­ÍOoûÎ;«õo5Zí«‚µÐZ{W¼æŒµ}’µ–J{¹1òä¸Œ”+³jÖJ‘Pó³šØ‰€rqt„"?iåÓÍZ£ÓùX“Çù7ÑÚß¬ýÌÂ¢iŒ‘s91Ø(âR\e„òÏØÓÀ°"¿Se³óó¹œj#‹jg‹­´ ÎòißÿËÝ{ßÜÝÅƒ$sdcK¸¶EšJ€£\;Å÷G-äÏ×>6w­"\S5ä94¼@ßš×"Y@k4µ	ßJ*|¼xq±Z>Y..DÈ)Eø–³´¹"M'å”1lŠ®5:ÖLºNV$$	‘Ciý¨„jYß¢fN¯ïa¤7ølÀA<™Æ§‘K›³œÅ}’Óª…kòâ4F¥Ae“`“Ó¼É™m9±ºk_Z=LêgÍ$µ	qòýñ#5W)N vø £®Ù/xqS«À± Ð“<ó
“½61>_ðKJqÒ§oŠÝø\óVy$Ÿ«ÄYŸrZ F1U~,ËÅ¥$¬ynŠ:äŒ¨ëpz¥rE–^B¥Î<hà0'—^ú¤ð\^ƒêy9@…¤øÆhà‹7K4ø•ÓPV,Ï”€Áä&üJÊÃKK¨LÑKƒb˜[ïá†ÉN³šÆô>Â‡ 2pÎPM½ih–µÉaëD¬çÍqO¤õ8Œß6{HÏ·_S±û±Ô LL¶Ù¥aþ6-_¬qaH½üíÚ|vhôã³ðsâÔ‹_}õó7ŒÕxÃckkëÚÆ†æ	^ßº¿ÑÙ¬¯Ó·ºBIœ,ÛhtÐÙÈž2È1‰Ó×³9PalŽ™ºUÝŽ5é]BETÂÚ­OnÝ7,¹I‚4é>ûÙí' 5…‡Pñ(Q©2HÆ¶½Ÿ¬½wû, &¬žéÆ2d/¶Wy+\ïÝíB~ç6Q×^öÜ÷íÙ±G—†s&ƒ5 -”eøË»ä8'›l°’‚õ¨yk£ˆ#aP$Ò)`ÍÉ±Úþv5CµOmªiØ>Ï¦‚ e¬­\Y®¹2È Öz-k=õÔSO=ýãë ¬]	*!CVS"¤GÊHÊ»ì¬æ¥ñ²„n+‘HM°¶¬í¥5µ­í)„'V{ý"X£c-ïë—l
›*û1;Vw8ÆóC[@]~\~[Ö>QW›+iÃesØÈmí‡5»	£ÂƒœnÁe:ÐÚ÷·êƒH	$µ]¬£ÆÐr­M›VC¾Z{Hín»îî€füˆ`5#¸ÚòP­Ó°x’ûkë-*"iq[Åx£”¦…ëVk°ÒZ k‘*ÆbsGÝt]l5¥ÄÒ9_À5ŒT — *b­jñÓÖï~	®í(êåêN8níE•">¯ÙØV	ir¥?U¹hQƒ5vRQþåo°†rÀ4À¢©dDÚ{ÖFqÖÈl,ŸþÉ_nÜ»¦a¬™µvocÃæ3FXß#_ßpo‘ú,f€k*ÇüðõJà®•XkZ†é©C•áê°Å@œ>ÏµÓìÑÈ"Ûb¥Äb‘PÿRzõsó´ð¹œ#+8›…g‡ÆP$¨<Ó´0`H¬¥	z‰«©!øXëâZ21M¥s˜æúqŸöXm
>›ä…–I©ô0›‘±•c±Ä3ë–Dj‡ÍýóÖÌóÒŽ‡Ü9XËNNü]p ËŽíñéé‰ñ&õ•M_-~TABEŒÊŸçIÁyóÀÚd™×
glž
™g¯0oñ#ZV"ÞáÃI:Ð”ÍÇ,Y‡Zb(ûùþÚøD<Í$´ç4RípåuÌ¨*Ó×éÿâ'½b]ýs–êGó©¼ÄÄÁ‰$`•Îâ9æTJ×céèkfã™I¾øtBÁ‡'kÅÄá¸ÚÈ’Àš—•Nà£ Ë`Úp½l}P²IhÑ§\Ý³¬~Î!Œ5“îë—=Åã& c¤‡'Äœ…ãbQ<µ!¾çþéâë¥ão/Å†,ò…ÑÚ¤ñjÃk¼¼þóõ?~8vVS
$¼ôÊW?ÿyÇXÍB UÜ{ãÚÆÖõÝíN»±½kc++#QùÛÌ4ÛpûÊççœmkÍR"-²ZP¹¿cí} Òê·ê´®QyëÖ#|³¡¬pBHý“h®ÂW“­¦ê ·fÎ¬†ˆùÑí÷49û5ŸÁX·Yœí~œÝcÆaû¶Î>Æ,{KßA°˜Ä2Ð#Nk‹ñ×ÒVaì¥{ê[Úâ¬5VÈ`-¬~œcƒU8Z-îÖ¨æÎIÀZÕPÍéÒCV{>Dµ_<åÊ)Gx±¶¡i¢`M²2”^ËZO=õÔSOÿè:HCµ®µvÕcV‹Y«j`@"FWŽ…*![íTÙÙ2ÒM„D¹D.†éÊØ"ƒ2H…ˆ -.ÛŒÃ	˜.”•ANc¡ÉsŒe“ñ¼ÄqZjØ·ÚIá˜Eº’ç6ô÷²s!À5˜XÀÍÔëËìš–;<v(ÚÝ¸¯!K|6Ý¿~íZkDãµëlo×gj£8rwf¨}ïÁÆ]ëÚjmf¹Ùuj ¬Ë¥ þ]kmoä³èG\¾™n×F¢A˜™õlpq¨]ö‘ÞXÎ!Ì<¬°¢XíýöRF:°fY/‚µßœ•~¶‡Ö”/¢‹võ.UáŸðê¥”š×p´ðÕXfL¨Mß§mÍ×P·¢f³­4¾ìì>Øjÿé'?ù÷k×¶·Ð ÷ ‘§rC³Â-r\pj·¹kTCžÑÐ7ædG\1d†Z´áÂ0ÁýMXŒÕ¡=ko›.Àõ—fKÇ'	Á`»xÓma,B‰_ÖsÏùÃ¹*Y"ÜGoˆ%°æ.ÒXEq`M½¢µiL­k š5-šÐYÎO§´«ÛÀ¬¡×I"ž‘—5‰HUB¦Â<æƒØ|5ªé#„µÀEc›•S·ÍHÊm‡ÝnÝk àÃÿòÛ|Ò©5'•”¯{6QQe~zJ¹’“Xg°š
.'2¹Ž·æfl“‚§pF(•Ë%M)H^T•Hfô•å~•IüÌeÆ§¼HN˜Ô[0e(Ë/öÄ´Fpcy)“-Ï–üÊ›:ÔŸÞsˆ0“Žù€œ?0=©­Œ,Ig¡ÊPI"w[ÇY?¬Æ‡„{†À„	U;&©PU$$à%FSÝ$wÑIÿ‘”@Îö¨¤„ïdøé©Y"d¿£ar¬¿_ß%† 7ÏV¾x»YÒpµã!ª¡óH¨f¬öáI’ ÕÔíE`?A¦¯u¬]m‹HkÄ¼sãN£¥ˆ¡Õë»;»_nŽqÉ>4ª–£æ¯	¬q„†6t”%›æ«í7ÖöÃšRû-^„ÀþwÎëq"4Ò›H«ÛŽ–iöó¢µ§Ÿ–ÅÆúÉ½‡€µcŸéQ,Bü²[Fl¶œ½µ×Pwê»ykWØ³Æm_ÔˆÔ-‡<
A³3gäfGå™â‡lƒÙ‚×d­±Öž²ÄÚlM×GÂÚ˜ÇÉ¹xk+4T{åÔ'³‚5’j”Ù¹†èY»Rs´¤pýS¯e­§žzê©§ïm.6ÖZk5âûÉƒ|B¬¦¼lïò€ÇÛØ¤¸G¸FÛÚN»ÇÞ3ZëVBRÆèB0.’"4\´<°¦µ NY|Iü®âyñk0.žà‘nXv>Ôt<›ãDgœÌˆåŒÓlß±é¡‘6ÒEµ@ng?Å±$‚¤½Ž—ÖØº[—ûv£aw³<É™õ;NÝY[_ÚV<hë~ŒÜxpw{c·>³MÄÈúÌÌúµkëíF«¡ž˜ÇYk†jNìéú…)Õe.GÌX;ªZ± ³X§Hˆ£Ñû›_vÚm&(€ËXkaÖ‹ƒ5*!ÿíë¯ÿ®…‘ü‡(Y[}¹‚¥dz+€ûrÍL®($oDÿ¥)\Xð‹°U1YÔÈJ}½½~³|úß·[ŸÖ™¿vß`íé—ðÚ9#•¹fƒ*•òÝS/éY<û´%ù8›®¹˜‹Âðpuvia5K\Y;}¡|õ…“'‡ÓéE0mQéÛñÜhîâI_9þMBEF£Ñ‘²Ÿ²ÈQ–C)Áš+<³@õD6çQ¸-B!ÃÿÔ	ÙL‚c{$Î÷32q‰*4þA¸i6:`&öT¡xd?¬¹[(0DÇí$
O„°æ{}?<’ó¸ŸUÉ!zt8FŸO&å«'-7ÍÈ¥l2ž[¬xðHÞÏêiñpÿƒÀš¦dƒkîÉú^v¾4=-/Š2Q~]KÀZªRN‹xŠTK@ã‘HÄ¤Î(nÓŒŠFê	‹ivŠê[ß89q8-J‚Ø4o:«‘|…ì€Ç¯,.éá¦&¦²2à—	Ñ„ø’ÒDé§ðæœÿå]¾|êÚk^$J¼4&,ãÆ€6î%,3¶¬©â‘3igº).²ÙQ‹íï?Ðïé{ÁõcpÃ¡ ¶sÙütrƒL{”ÕDjÒËü¼.VûZ®ÚO_}õ½¯^—x›)(d¶]§îÑ¸ÖXáÂ~s»Q¯¿ùæ¦«s²ÔL.YDžá;â±â ÐB¡«Ž×\ËZ/ÒíXûH%˜‘É„µMXÛOk¬B>c®t†ˆGÙeú³zGKî?C«(ÆšáÚ¨Ö Rµb±0*“µ¦]M{]6ÛÛÇ&¹ûî˜ýÝƒFBT{‡:=²=°M0¦›|5ÚQ>9n£û]WÚC˜£Ù™ðèˆœZ÷ ÚVª¡ÍˆGS$³++¿bU[YéZk7ëµ›½)k=õÔSO=}/uüÕtaô~g¬iÖa”I¥€5/Æ†ú[÷»ŽL• ö¶­]rmkˆà¹œf õË0µ$†š ­oZ^™`-¯!iýÊR7ÑÑô®%â‚6¦sO9j“Zç‰]·û&’‚5bØëÒš¶BÿÌ>œFØÜ#ömJ›µš\®µÚË­]HŒíÆNsNËõímª [«wVÛï k÷–ëÇ¾Á¨ìöý»»´­)Þ¿AŒ\}¤Ñ˜©_E;a dÖžíêÖ³Ïê„ò¼l1¢Ô²rTå}z³X~šØ*†#–söVSXŒmn6æ„Ìm!¨d#Ï€5píÀZ¥ª¦5k[ca¸6
˜- ’Kã9Kò—Šâ2íe
2ØŠÑ9Òü‹©¹õ—åÓÅÔçDc¦ÊXÿf‹ÿ;huãÀ®Iïš
2í)ðRàY(þà¶<>pm,Q1dÖ‚ü‡•Ê0´¶@ÒÈô¶ºŒ5r3m!;ñ¤"þ±×ØJeOrkEžï`:)@k³Râ^Î¯Ìüü˜L<)½¡Qý,Ó~ÅŠ»ˆÑdšdÍ=¯ i ŠaY&‘Þ=p{3AF¾¹^0¯½¼ñ”ÁšdŒe@&t3ÉP£ÒD‚;[à¿qšäˆ‰©d,VÊÐŠfÊÿð‡,éUãˆ°ÒGòÀã¹ù’r×ì	ÈcU*(ØD˜–É³”ˆ±Æ#çIÔ”|~kÕJV, ’,W‹i?Ã¯¥±_š÷:á2šž®”Yx1˜ÆOxü_ø¯ ¶ðEöOAï”¨‰/®JD6É¯,„D?ßx¶¨4ÍŒ<©FÚë†Ñ–æ±«ü²~>3Ép˜¤ÁÚød	HŒC	ã3”ìO}8ëÉ<ëWaä ,–Ð} $XK§t²ÍÒ´¦§5¦YgXòû/ÀhÄiTÕ†!ÃÆjT¿YÁÁ"B5\µS_}õF˜,ò#U¹±¶vïN£¾}­ÖVXr"Æjf©qÊF‚Î5.a„%¨¦|_iÌ~“ÌXK=®
ò]`a¬Ðì§šîähÕ=²b¡5Î“í@k·)†üéK®9íg6ÛXÍHí¶öŽÓÜD¶WEz©‹=…¡åf÷1îÿ+_äh°ÜW¹ŸÐìŽÅ¯DŠíÙØÑ9ÖrÒã~L¤©3Ö„Ê¢éà Ö›|Hœˆ\º¬…¨ÖmWmµW¤SÀšX-Ba	ÞÚ¯0Öj–yV#¹¿Vû¼Þ«‚ì©§žzêéû©ƒä£Û¶v¥¦:HYkOÒ¹ærE<ñZd‹±=“R+¿k5h\ãýïCFºÖZµHHx2ncÕàªLD›T¿šLç5tm^ãONO)ADäeô%õOå±Ðâæªi‹d¶9i0×xšKnEËu3F8`
Ì4ývk÷Qõ']-äÎ°¶¡2Hn™RI§Z»=£ÕúÚµu>åL£=ÔÙÙ½qgmí~§Vchvm¨}cw­]o½³Ò^ƒÚÚWwv®†°vâ1°öô³oÉ"Âré2ªjâš¦ÚÍ
ÖÊÉ±æ2Q›FùY5Ÿlv”ìA×Zû7Û¯	×>zŸ‘©Cü³hí¨œs!#°š“`-C2”Tóªú13_ÒNñÅ˜Ã+øùËoî·¯´µo¾Ù^ßfš\ãîÝ{wV¯ÝØ`êÚu&ÎýÚ¯}ô‘ˆñ+ª!)kDÁ_ÿâÇªÒx-#\&g¤0ë7ÏW—\z^U‹_|Áêx³Zi¼-ç©‚$&ƒIj$·0ÿ[2îK «ÌŒ²F¯Ufm1ŠrŒ+­XšS‘bV™))U®%1†B’ëÏ‹	ŠSÇ1i(Æ§ÓPƒ’_2ç¶T¢ÒÖ«à˜Kd¬Ær°†´B4ËOYØGíMÂæŽáÜë	<©¸z@‹"+áþÂ¹ÉÃ¼ÒÒ|ž âÁñq¶°ÎÔ™¹IKéÏKj‹µ#HMEss±ù]òÙËZÕdSa)izÝ³>y¸/“8^(LL1ÍŒŸ´™b	eEf¢EÒÉŒ¦™8ðÏÓ	~Ý¡ª¼0ž?8¡wI~8Nì¾çóÞÊTžEœÑ	ª£èÝ˜A¯ÿ²J¤=L¯A¼øË”Aº¬@x‹ÉN“Ôv&ÇP³±•Ø@Â†a÷ÓŠÖ¯mòÔDŽœNô§=¼V§7õÌÎŠÈÚßO®”IçiTC²ÖB[Á"•Š±$«I·íjWÑÚêuJ Ñ½kÛë««­úÚÆÐJ}M—ø5¶$Zà qF›œw5y‡ˆÂí4ï"€5f¬ÎZj¼¬&½Öx€é1°Xj†VÚö>ûììSÌÃV»šÁB€Ž3ÏZ¤ö\hÆ&'Xk¢Á‹nrˆíuÝ´Ð;ÓvxÌVR—î,däèw°ÔBZ3‡sÁŒÉB`›sýÊÔ	;Î"|n É‡HÑ–`-ìVÓ‚s(hY‹£©}«zóÍOÆfgGGø[ìÆac­Q	À¬öûz½~óæ?õ`­§žzê©§|äŸÄjû+!©:Èå'ŸyF¬¦¶“'{M¥Gl³¹ÜÖ¨ÅÛ2²'’Æµb.ÙçbúqÐ¬Ò)>¥HØ¬ìI4-›æZZ ÆœËãt«)Æ?MÀ4/á`Ës“õ0×¬ê[;ÖìT7b¬Õ#¦öM"£ÅNµ6jCN­NÝA[½Q±£õ:3°Ûõuz×lÔ‡FÛë-±L}¥ÍÀì«õÖNßÂï};Js":q®‰šã•cbU¹R®ÄŠP[Ä`ÉÓ…ˆ]þ	Ö8¦´‘\¹Îü³wˆ„l]¹Òît”¡ßQ"¤`-¤µ×Ë/ÜÄj‚ «ñ¬%.«<,+°4Hífý(ÝmYzÅ‚µµeüú—cëw×oþeû›öÊ;[«µÓwîÞÓ$ë÷ù+²Ñ{„6p-ìÜ5¼&w{íP4ò‡Ö†…åÂðùCUù!ŠZ×¬ìæ…·¿¿VR<$ÅÃÜ5ŸÀ‘B¹ZÊ.\¤02›™×³JÃ|Ù`[ÑÅ.Ö‡‹ZñS91ÄËK'sðýÎzÝÿøDÆŒAJI*!£˜2Ðš{AŒRèëé‰ƒkÍ]’Êä(L+g†i+ðÓ7©™ÇYS¹£ƒ5ÉeüÛƒ2Mî7O@ä’ü:ø6S‚I›™µ¤Ao¾MŒk§À3¢þ2³D$§`ýtºä -„µ ÆZåÙÂøÁ¼NeÓ<ÂSœµl3“ô$+jNUKE÷$c`OV*5')·ÄËæ*YAÙAxµï…	rH­ÈÆx~|‚óŒìæÙ'“x`pjâàÁç¦< ã·U°Æ	@Û¨q±]æ¯FÔcË¤œGEï“þ>ªwNµ™¯úŠla¸ÉA[Âuî™§¸Ž(hK)\ýÃÙXª©ózZ<)Z3gmÑ¡ZØ­öŸ\˜ÏÎ=õ’E¬[Ër¼ßÎk;W×,°ßXc­Ýâm•;7£+íízcÄè¬þeÝ±ÁÃÔ~át?`T“
 ‚Õò9¶‹ˆÕŠVùøxÉJ!ßÝ<ú-LŽÓ¸u7%jPs°xXl¿c5ÕA*[äÕwùŠ§Ž»ýªykáÐ´½4f‡»g;º×ÙÇƒ?ú]&­iÙå3[î†ÔG˜ 9öÐPëÞQ}lŽ½81J«ª–é?ÈÜ!$D›ÓN`ƒ
Í¸;ÿXrq€õ¬qÚãYÍ¡Ú¯|²¹Iý#Ô±ÀÚæŠåŠÆZýóÏ{SÖzê©§žzú^ê ±Ö 5xÍn¬ýò	hí™'žyæ™µ)]QÅÔÖ2ƒ¡0×<óÛj¬ý:l[{­IçÏ¥U÷˜œ†¨lØZ"¯á±kSxkSÓæ¯9>5ƒµþ8åB´¸V]X›äJ;Èæge¹¿ÚÚ‚.6Î>$².³iŠãî„
±Í öÇ.½¼Þ²xŠåvËN»’È‡š!£ß4ÒjÍ°ÛØéÔ¸˜c†nCkÛk[×””¨[ç¡µ&1I¬ÖÕ[\î=MÄzZ°¦éWE¿Z®F(ôVÖ<P'Å`4X+
«Ë+£›íöÍ›-PÍl-		¬´FãËÎZsÞZ¥¬.BŸêÆ(¥p›’;PL+Ò!Gä_“%G¼QÎÑ·Æäì‰#…&€¸¼A°È_¾ÙhÖ™&÷§Õ»Û«÷î>ÀYS”?°Æì=5òÆo€53ù¨ÕÒeä×Ä‚D]ïšžúRµ`1þ•s._ÀXc‡:¶óç.È[kV†a¶RµtüâÉÅ’ðMMlì_ &Rãñ‹ÇK³£ÑˆjR‚³”RY"E—øéáBâŒèr.´5ë*ŽÚÀ¡‘Tz@‡8UF¤/ÎRÒ§Ù%?Mím kâ0V–”/Íw‹ÃMŽŠ¬à63áô ¡–qœ‹¬ýv|:ž·ü&»yÎÉ<+ùÙ‰Ã‡'†€ã6 ;óø• 'ŸóÀZóÈÁxÜ¤”Š1}…:§ÑØ…l±R-Ø“(qgP§üä8%Ž¥,´45_*zš¿añŠ³U?“Ïd'³ž§É©baü9g¤„ð* Ñä¹ƒùl:ñÜÁÉÉ¬¢@&xœÏLƒlJúùÁñþ¤Ÿ›¬MÒÉÐÄÃ	O¬U±P¯ZÜ›,	x‰Û<lªgLD"ŠîPÓØÏãÒêSS?¹"xuT?ú…`3pþ›pMÌÆoGµBcç%QžOßc~áäAäæ­‡¨ö°Õxí_šýðèÇŸ}–ùÑÌVªýÜ* wŒÕ®Ù;[íÖ&3"êkí•±ÆÖÖkgïlŽ9±m¾MØ f˜¦ð†­-êðÂHŒ¨8Mz4òé=ÆšLµ÷Ön}«uQÍ=âß¿X‚5±	#Ï‡EÐšXŒH`í6t(Ý¦nòGÝ6µ}	ýP™Û×Úîâ¦ýùß]!”I¶Ü¯ ’Õ\¸æzXåÄ]a¤N»6„\bÉ–™hÈÝ;L	\r˜¢ÚžHÇjo|¹µ[F^,ÚÔ$l±úýç5k½–µžzê©§ž¾k-pÖX Z kÂµ'žAOÈY­AhÄArópØúÍm«µ;•Bk72réÊ)«%”üØ×7­DÈÉ)®Ût`ÊYjŠN·!W¶meŽ²áD`Œ8’dÎš%C¦I‰ÓyÕ·)¸$¯¬‘Dv2Ã£œ³¶ÐöW<:ÉYå‘¨8
«–LþnC{·ïµÅrßUÂæ“˜>Ý¾qcæ®öºŒýÚ£Mk/Ý6o-µ·Üíã±2ã¯µŠJü²`ÃÖ¢ò¾F‹P77ÓºX«È^¤®2ÈöGk6lÍ%sR‚ˆ¥¥®5W*ViÍáóÞTªHCš˜W'„ŠÒ£­)å¢ êKFc9î‡Ãæ3º˜;½¾¡,ÈoN§Ö)€üÓúÆÖöêÜßÝ½®«‡ÑÂN”žö®1JÌ]ÛƒkÃhaaéÜùaß‡Õ|AÛ¹æÛoŸ<¾ð²OÏZ©·\dqq~N[àÄÑì–£¨¯¹èóŠèGVÖ¬8~&fÃgñGPŒi$øÇÔP$Côö™YÅd”÷†ò×‹%ŠFF|…¬äxÅeI)ùŒkyXl!Ùf³CM[®ìrxæL7Çwêú:òÛ#‡§îa™þ	5·É¬+$9ë¡µ? –Ÿù8Ñh™#å|¯¤§­n©¤d§\ŽÐ˜J%Çý‚C™‚†³áÇMâÂ1núà|5’â‡•‚‘T^«òþa,ž&¦&&¦
‚Â	½&²¿/1=>1Éx»d_\kS0ìÄÁ<ŽÜ$,7Oy‰øá‰ƒã|!èn*1xY˜¦ŽÔËÖ`8ˆK_‘BHK&â!‚5NZ‚ÈÀì¬Ê"y%’¢O¨ÜÙ3Ô˜ÏÃªK¤Æ 7ªñIA·`zÈ õ”¹óåC—Îo2”àNì_Ô‚n5vG«,ýñÙ·ˆITÍj
«,ªé=p­3ødK|VŸ;ôI»ýeÝ@@öš£sÔl‡¥¶1€€
,$nc‚Ü¡h1T8{ÇZX©)k›ß
kÝ@Û¶¥mX»Úmk*‚DÏ3­ƒåÏhÊ3Z»­Ì~tÂé–ÚÑŒ¸ºouñl_›šÐuÞþGzØv×5ÓþÖÆBžÓ–&a;$³ÀG›µöH¦Ô~KÔÏÖÁ—ÝGÕ¡a}²ÊÝE>;¶ïœµÇ°š+|CzSŠÀZÄó¨þÒÝœ¯†DjŸ×{Áý=õÔSO=}OÖšê ƒ”‘ÿŒÕø·Œµf‚Í„fhÀ¢ûc¿-KuÜ5híË7º‘g µnÛšáZIfÓxjä©iÍ/*‚t„–d´ñ{f6‡t ¸ËÇ8k\¼%9mmÀå6TçXÃ&[w‘-\Žì…µä ‹ÏËÅ¼ö´à*Ÿç–hïÔDqßIËµ!{¸ÓL›˜‘ív¯6Ö?RTâkó ÍXc˜-ám@š>´FG°ˆ*ˆ¯ùòôcÍru˜"÷|¼ ä¦‹Á†[f4výwíÝ>XÖvÔ3æü¿:uì¥Ûg€æ ÀÿeóÖJ*…\³‡ÏÊ1ñ˜fk>ÒeeŽ<yJ!3¾ÚâTÍUÎ4i*6ç9­íþ×7ÿuzÞ_¿»Ûòýõû«×îÝ½G”ž«&»¾ºÆ³á¹˜•øÝk*†TÀø}“Â5ºÍ,•Äk•K%Ø‹l`‡©"’2I&°ùXMÞÚÂðl	Pk.,”J1ÉEÌE°š³åEîR 5³0ñbõh¨[ˆ€jé®•³yž¹3D†Ò ÐûÏ;btžvMŽ^"‹0°+ÊkÉ#_¾šÏzÅŒœ5uŠi–„gØU®­`ya(?»›í"h+°âºõ“ˆâD6å¥t’Ÿ¯7©3ÜJÅ\a~\Lˆå©Ã,÷÷ñ›QÊˆàÔ¾¦9kÂgr™¼î[*çJÍÊc)œ&êKÜ—}8Ž™vY%‡d2:RÍM™,*ÙÑe;–õiŠIÑ¸œóúüêé+PÚ²)wuÓ<5’Dkžg˜wCošø–ò@(&y³Ç¹‰Ã—/Ãc}	¡™5«%‹e¦c'cžÑ]ljFclÓ¾&,DbÚº<h®¾N¨G…cšEL`G,‰BÓìôDèSƒÕøÄ…\ñB±|á‹·	€Œ‘Öï,5Úií°ëV»d?~êÌóÏbeŸ8öÕ^»zõ×;k[hÕl5m+3µ•ºfr0¹¾i…va¼MÒP<¿µU<Aî’AšóÖä¬å¬aÍ`mÇÚ»kºiõw¡ý¶
%g	ˆ
­›/¢w@ 5WyF°FÏÚ DG,\Äu¬™nY¼K«ýCÖØýµnà·}:ûßÈÙ÷íè¶gW|‹´'h&¨#P<æZkvÂ Mb;œ{Íž¨Ìv‚$HŽ0…MçµŠ¡ÚãXM¶¬a­)]Ä»¥Ñ¯€µ_Õ\$1k½àþžzê©§ž¾§ˆäRFˆ'¾hY!#ËÏ<ó¿éD‰EÌ\¸¹€jrØØ§dÄ[nïì	Â´æçDh‚¬~ÓÔ¤ªµÆ
TÓ©¸Ûv‡ØIàrÅiFëÊ³û'çó ŸM5NN‚T(1­F6¦kÓš­÷*„5sÓ$œ4ƒ5Ùmž‹8ÉÞ\fvÔàÈã<´@^¸A.Íkk}ê`m{µÕîì^¿NIUcíêN7òD@kÀ öV(.è"ÓsÉ.?"eàLÜ†¯¦«HŠö¬\ÑbR9±Z,º,X{çz£ÃTßÕ_[5*SÊÿö·¯%PÌÈeÌÕÂ¾5ÜšÊñ¯ÄÖ²¤¯=áZŠ«$Žùh‚ÐE‚ì|ºžÔÄFäüBÆÃ¼ªþé'Íÿ µâJ»uúW˜jpíÚtïÁÝ{ÀÚ]zøkÂ5…ŸˆßUic²ƒ9Ù\ÑW­.e¨Zm. Å…Åáªf,ú Úbv$F˜?½kœª”Iôoz©rN'
Uœ¶Ù¥‹P\j,Ræ~±±¬Æpº…ßf½²Í‹ó(w¤oh wã±õ/Ê+)NAÎZ:›Lä¼h4SÄ8Äa‹äÅ<-‚)jG2¹ÉùyñÒ‘qG]¡‡¢ø¥mÛc›9ÕmJfÉ™±¦-;ƒ9j>ï~4qÍ‚¼~8ÍÖjIË¤¦°µ C5¥ÈBò}+EÌ£3ÚšU/® ÿsÕÈl	0ãdU–šYm1^<i&hs_žufzWT£É %5¬ùr©¸¥‹
ÐC&ùî‰õG%Ñ$Ã‰)5©)RžZ2¡Ô¥±f ¹‰B3§ GynyüK™©¤Š(q´î5>’‰b1WŠ?Gí ƒs—S‘4ˆæÙ_6úømµ®Ø÷%¬Œ±´%ú´LèïL¿wèÃC‘è@“¾¸0[%òÂÛÙfó| kÃàÚ"¨&VõÏ© ’1ØÄõÊüè6¿t§^ùê±šÞÕøë_·VÉ1¥aíÁÖ›?«w:õH£³ÝqÅub ÷+>ªM±šˆŒ-á2Õ1¸Ø~#hM÷ŠÄˆVEÖ´ÂZ×Xƒû5f};¬i2¬»Ô|¾ô³Ûü³¾5«3f¬!¸f²oßâ4©"ÇÞ;uâÔ‹'N¼ª¡Ø´ÊîIíïŽPcníË¹ÕÝîêÖ#³_›Ýzj]…=kF¼Ûl"—Û™`é¤XMÑµÎCc¹´~“™¡A„ÿˆ£¶Yµ=¬væVSí'ŸüžûÎêË¤ /k
îG¿ß¬ÁjÄößìUAöÔSO=õôýZk°Z	iª­=I)äåËž®¹)hQ|)Šš¸ž¢£„üD]šƒ
ÿ­W)¤Ÿv°6 êGÅö£©<$6åhÜÈÈ†ÄlSýª¬’’àØ´%DZ5%ïË[žÍpaÿqXM¼†G€Ã¶7˜}À¶»Ô«I”ArÔ‘["‘Í¦s\á‹Ìö+|˜Çéð¼XY¿±m´6CþH}wc§óÁNý÷Ý¨µ Riaä[ÂÚÇjŸŸUÅÏX¤2«Å€D‰çmzƒµÔœ½õë«`€…ÖÆFëíX†ÿ¯®kÐšêoó–;´ÖÅ58M:‡X–GÍP+Á4Å(ŸÓ²û­†K"¹”oÜÆÅo36³Fùm)ªóÐéVÊÿË®jÈlÜîÚÿËÞùý¶U§ëþHç8×I4mnP”«H£h	iY^r³QF
ÄvoldsÜF½àÆ–Hœ™J…¶Î§jg@0´$¡ZŠ"—ÐBÜn¤©ª6ì2„•¹¨ð>¸:[*;ÚÚÕž‹óyÞïZ]MTæÜôÆOíõ;I›8°>~Þ÷yïÊ]Û¼L’¿e“€Ù±æ5Œ¾cÇ”ã/\{ë(ƒ‰¿›™Ñl‡% ¨òä©…¡åÖwÝ'[Já¹PÎçË*ƒÔæÛé…
“·†NŸžóª®{Óm±uú¿ˆ a8-nþÈèâÐP•v¶ÓY¨«~èôl­8ì¥.æ¹æ‡y«2K?V¾JeçBŸ5)$¹vj&=Ì¦S|âO)`i 	O=Ü—æ–æ¥Å¡&6ã«t…A†gÍOÓõÅ¢üódÎ—!7`Š‚EÎŠÕêA*9„éƒ´¦Õs-åCr‚þ¹Î`ÆJeUR95I'Z¡È 5¨^ÄWo¤	UÔäêb¶¡_Ì¯¢ßÔ(þlW²¾•§=zÅˆ)R_#dÔËÈ·.˜«Öð‚RY°²Y«¬aÊ^KäË…©) R³§Ç‹À`ÖÏ„Ã©iÁZ Ç=¬pì_U¬¿8ªq”Ï6`°&ù4¼ú¸{\N7bç±äs,£LF+sÓŠ}äFól9Áª^æÇtæÆ+õ«gÎ´ZgBªâÁS¨Ö:Q¯kq^ÿ—Â$éPí7ïÒX)Xã]†ÍÍõë7'^~³»yoýöÊŠ,6"*6)ØBKd‘ƒN¬´iƒ$¤±½J$zÖ¶UA:Vk|Ÿÿ4o]ÐÎÝÚŽ5Ò¶9k<Ù‰YÍmòÙ°êÍÄjÒµÅYkÖÛQ&bCkÊí?wpþðÕ£¬Ùã¨|´[1´¹âÏ¸òÿÛZCqäNÝ©ŽÍÜBš°‡Ëî7\¸ÅØ6¢E&"±-EP	QÛB ÍoÆ+èÑ¬&[„ãÍ5?N$k…¢R°®¡/Pó‹ÿõ?zê©§žzêé±ŒZ{­?{žj'yþbõÉ´ÉÖ¸áÒÍ•·{Pøv~­»±v`	f3ïðÖâ¶µ×òí8º©È…ŠpC8miüª~±K™ý{œg£9ˆKkÅñ’5d9,ÇÅ,~›S v£€Ûn®‰£ù„cÚÝf¬`EÒZ›(Ê¹A}Â„†IœsŸ F<?êtÓAŸ¶Û+ÎZ\Yk¿ÃàðkV­Å°†BVû(D5­X{Æs$HsÓ!Vs·ïÔ/-Uq€Fe¹ùrÖ (ö‡ÓÞð;—:kkÝ­:©ÙÔÀ?†¯¾úÿ€Ö˜-Vs°ê„¥t2G«LS½æÊU¶`5Ó¾†ÚÙ<L–*†3½ÆŒ”©ŒÌÊªËÍ]¼øþR­Þ¼O·šÍ˜ûüNûóo¾¹{ï>‘ëŠé|pÅŠc™&ÀkÂØñœÍ+8bÉNÌ¼þz#Ÿ3\°ØÐPí$¡"Š1Õ†T	­± P$[º8³{øiµ!`l¨ÆéÚÜhzËŽ$Tá×ÐÉ!²Yj§Ñ‚7wètn˜°Ç]iY¦:ãŠø¥e}Õ<D–-æ‚?Ù”^tIåŒ&”yO"Fo±˜ÌT]µ£0,Êã×Ú)Â3‰ƒòÚ¶Áš-ÿïÈ‘ÓÊÎÁ_¨íiÎCD,Z­e1 Æ
EG©¢å™Èï
€$*G54-¯¿@î’ï‰²¹2Ÿ³\Q¥rž¨‘d†L»™ô@0…Æ0få—aU?…¦–´]™eÚâ<k`Ù³SAj×¤È®Y:Øž}V­¢+‹,ðmñƒrZ“ßMÚa#AF –Ê5¾•Â¯U©&÷¬Oµ‹Wè!KqÅjzTE°)”fCtg)’cÌupižP‡Í¶ŒáàÓ™ßæjÂ!ëgÎÌMÖa²:"8ôL$ƒ]S°ÈÐxËF«-¾MðžÈ€Ä{Š­ ¬fc°×¥{›öÆD÷^g­³ÞÝètºÍ•ýY¤ƒ5­Ìðá9jð…6”Ö¯%§Ø5ó‡¡JFa¬‘«~µƒÍ÷%híQCÈl5« ÅÆš\8SX{>^½øò*=kÀšÚEßÛ÷Þüñù—æoÝz‘:È‡`‹íáý³ÅOºkÜÉ@Ÿ;Å¡×hLjËäfê 6÷LØ¶PôhOÛ¶ÁjnÛ9mNÛX„j;s cVë6o¿ñ‰}ðÕûŸz’$ÈƒµYk*‚tjöZÖzê©§žzzœu&‡kÑ`lz¬Elþ“O)ñÛ³~5ÍØ8ÂâOíæù5¦c7oþh€¿µ­år­“uät2(Z®"GDmâµ~¡XŠ¥Ñ„uÀ^ŠùÇ’Hºü[!ÈäŠ’Þø°£ên+qçg@²pâPÆKÝY£5¶­¨‰«,“q!ï)Þ6VóIŸ}St0î{s¸¶ÿp¤æÚ
[çòµµ›—œµ%Œ˜Ë$ÉPã‰›ÒÑ&¬$H°ÆÞÄ„Á´V­pš£‹éŠö=[ŒøÎÎÚ§kMZãx¼ÂÚ1ƒµçÿiÜÚ’KqZZ®ŸXVÄˆ‚EèkÊqwé«¡1ãÀ<ôV…âÊÀZÕóØ®µª Ù XkÿíW¿üÏö÷÷ï°}óÍçí•æ:´&í®õ]¿Œ{aÅBx¹k6³€7þ¡8ó¹¯/.6\ïZd¯1z­V+Ï«±ÐRÃÖä³ÕðÒiooHÇy
åæòú×à²êhun‰û­ÖB½vºžÀ`#÷¿ÆjÎ&Ù2=ª­âÅ¡¼G‚¿â«pçx–¨ÑšÇËÇn‚ôà œWmµ–ƒ+fòå0G¤\vìe¯·i­CÐ˜í`¥épµUcI	©äÿYsŠ®,cËkÖ–&ÍbøKl·,+Ä¦ZæcV]l å%?§ Éþ] Ìrk9‹3§amÙLÊçûWÍòNSèYàŸ˜óÆ¼þ îºÑ‚ÀPkzò‰Â\á‰]z¤<åTHîúÙuŽ“}I"_˜œžØ*–Õ¦?ƒ7M&IròPcÏúÐ2Á4d¯)ù1•é[…Ó¼~¶}“©ÆUÆkæûc”kˆƒ­=ìk¯ÿ	²‚ú|¢O(xôU¨‰—æË¥ëë—½6–&{6“ž9Ñð”0ròë¯Ï “g$ÅŠÄ¬MV*ž°È×éÕüëkGÿ	xaö¹sÇ,Òãš±ÚåË›÷$^¼÷67×>ét>Ùèl­ÀjîZ{Íœµ‘ArÙ$³Ö\]ž_ftc!€sÒ®@‡dUÛŒµ0ñƒOn­íhZÛQù(Xƒœ®
Ö°æiWS^,`íE’TÈÑl5g¼tü½}è¥}óüîãÙ"öÒ¤mû!ºE4+.¡Ä|û;
´¿‹k˜–¶
»JG#5õ¬!7 Ál50i¥ã<´ˆ
!ÖÐH˜Û¯H›–/V3\ûAV£x|X›I¸â×ý+t¬)	VcÉ„µ³ÍÈWköZÖzê©§žzz¬u_è‰(þ°,µ¬lÐÚªZLÀ37›ü~Öj{I¤ù4»íµvGé?Dk8kyòÍ&“d‹Éq™j¥{¥ ?(ìÊBQô¨Hƒ9]“²f5`­È¦‚ùu[
à2.C| À*)»„dôTì¦©I2WŒ¥ñ™±˜4ãµmõ‘¤5ÉÊ8Í]ÀN¨T)—òÙµÖä­Å;R³{{exåÒ×Ö(„¼dMkÛaíèQœµÕX£ÅâE(ÇA‹‹£/ïÑ=¡¸¥G‘ê"öÞ½žÊqüâÎµ¶¬µk—˜Åí¨R!ß¸ðfÖÁ/ÿŒ 5Àh›µ¶,km)oÜÈWFÒÞÈfH«U«ŠŸ¬PðX«e«êhË:;‰/ï@<xqÙì/Û7ÏÞ¹/ÝýìÊZs­sçÊ7w©‡¼'m®[1ä»®òf«v3|ò¯øðupmé•W–O„¸ÆãbmÁDä™k®‰­ÞÍTÖ8[K7jËs†jÐË¹t:ˆ­j£¶°´ˆ‹4´<4Ûjdç@:>`ÊÖj%Ç¥Y1_nxÌ¼ä^:OÞ!àÆ«ï
XË¥ù¡ÅIÐäè Yõ¹"¯ZÄBÂ7Cs!¬i3vÑÊÚ¶¶–ñ%î"óÇ"«ÒÒ¡²™r\­ÀIxLc]*2›å
8VËÀ’†©•y?"ÈÖ¥V‹¼=}Â·ÜŠ° 'rÁd²oWÊsäI)­#¥ªÆ4;uŸüŠ©Mc¹1Ý&'wõñO~úÙñ)EóO£ñŸ?ý³]“\²%¡1«S.d‹“|#2¹$@‘ò´2ü§_à«á¬»&I‚L‚n“Ó„Ùà{/¥3„B²½pÓpl¶¤UJ$ÝÒ	œïÔYÿkš‘´«ˆÌ(DÖ½ÇåüÂC¢‹‰týÆ×_ßøš‘HíF8ûä©šMV«×]³¨öWðåËéÝúê˜øèRWÉ"Ðßiyý÷é²ÜÄ&Îö“—ßÜZo¶¯¿yûöÚÚÚ†ìšÃ£Hý‚59l°\æøMõÎMãhˆm[‰J©¡tl¬Å¹ý*Äkã¹&Û¹G#MÿQ”¯žá×Èõ«‘éôª`(}¥ƒü³•txüKXíkª e¬éC™Ùf‘g¦ExÁÃ¹‘zÄ´Æò§Øj1ªýdsMßf“>ÚV"4•C(†ÉD3:‹©¹Cnß~<ÄQsàíWÕ²A>‚ÕÐíÛo®$ì48ø”zÕXllàª!`M±[¦ù—^ËZO=õÔSOÕZƒÔBZ3^;O(äyl´­Ù€#šÖ¼4Þ“±éozcÒÞ“¯Ñ¸Ö]ë2”ÙykûIkÕ“ušsÄWÉ@ä5Mâ£f­tªq,Õq…Ôf6m—&³Ê„ÔÑ¬²ý“Ø[>³²ÉƒtG940àÂFÀçè¤ðŒKØ{Ä 5¹BÈøOË2Œ¥Kœü\Î"#Má¹X†w1ÁIû»æJóv·³ÖìF°&f‰5XíèÑÖFÝÌ×™}bµEðLÅVþXs“¬kU;”G·ÛŒÄÆ¸tåò•ŽÃ£__¸ðÕ±¯Üpì¿¾LÕ!þè•ˆÖxàÒTÆp©–ëXv*áRR?QýME…ÕÅ "ç{-rZŠG”·–oÕZ|ñÜ¯þ’Èÿîûï»­­­N÷úfsålûû­un‚id“Ö¼¦F:òÃþéóVšÅ?ž$ÿ=tÓ½>“~ûßy6òšik,j•eƒ5ŽÍº’Èòíi­Ú!IqþÐmj°VÜ!Ê"µž=T«/¥sú˜9.(ËÝË‡Ïåø˜Yå\úÅÙ¬7HûšgxµT³W–©¹rÎ}y&Sª.R?V3^¾°¿¤â6Xãl¶(˜Cì(¿‘N3“ñ¥äÿÍlÅëé°f‚û¨LxäƒÉ´ÃG³ ø·€5*$AÉ:ÊÖ­f²È‘$u±É~<ÏezÚPáÙ©Ÿõ9¦Ÿ•|{W%8XC©¦
ì0«yÄDÃE+¦žHî3õÂôÀ_²”žäà´$¶VFŒ¥rÈc.¢h-C3¸†{dJÀ¿Z6ÈzRuŽLK„(á*}ahÌK¼Æz÷n
$µUNºŠÈ´¯ˆ)ô$Ñ¯‘k	•þz)>Y#<ñ×@|6®gèß€?Tiœ8«i§x²<e¬ÆEC°£H5«Qf@ƒÕTÙ¹¼IK¥*uïÞÝÄE»w½K­òÊ›.Ó
©èÖzsÃz¤"YáˆkKcØ2ŽN€&EÉó;”°(HTùÁ*ÈöÀä»t¨9wáÂÁG£ZkZØ:ÞEª‚T¤æ`a´ÉQQ¡¦«‰FÞÛwüêü>™kW2ÐÌòXü©wœÅÆZì·ýƒU<~Pú&òÇdëÌf;€ì´y˜œqÑŽ®i"ãÁ‡ÙQ¶€1[M  Mûæ†:çÍí§ÃØqÃZ<ÛXMê®Áj|µýç­ ’åÊÙÁ5õ«9Tû¿½*Èžzê©§žzkŠ„„Ö€5¤:HÁZB	m«˜$GÍ'ªoà|·Ý&Q‚PHõ­¹ ÿ˜Ö.„llAbåì4oÐ¦—d? ×»O#³å£)›ßRüÙS`¤%CJèÇà–x³Àuùp*LÊXã dÆÀpážu™/·-Ò6‡ÍW3X‹½0-$NE~ÚöÔ~Ær™í¦s¾»$–Ë‰ .ÔÍæ§íN³ùn·K9 Úk´¬,{ŒÓœ&FC¥	BFÏ`ÍSdAƒCŠ=Â¾îyx¾¶óÍæÚ•MQ°¦™n’ÆÞi*5°öü¢±'>üwi9¤µ“'ÿÆcÙ#ü‘Â:>ÑØÈØù•\t£+
{M¨Q£K-Š2ò$BÖÖæÊœÍ‘527÷«_R/ÄáîúæŸ6VnþçÍ;šº¶yï>=A6x…þ6]%ù»9Ùï½¤jH†ñ©wmtæCËÉ/¯µZCÈpÍ=kõEíÍšd”qP†Ù!§¡µ¡ºehxö¬8ÌJÙ ÜZ•œ¸¡‡æxM²ÿÞT>:½@g.(ÎæqØ*)¢UF2»ƒêò+ØQ%ÕàæqWÉ¶–5 	]¼¨eBz©Ål@‹2úQ¶ÏfM£Ö¨gCÌé@{Š0°Sâ"œ“œÌUáÀr‰lEèi.Ÿ±Äü<ˆÌ×e€6Í¬TRÿ|\¡µ”eµ—®`¾GŽ—RYUh‚]rÀ39@»jA‹~_èJöMNùj“¨	Tžœ¤uTõŒ²·1½Ìäê1ƒÁÀ½èÅQÉ#úƒJöñ+•èÏŠ­×A^IhŒæ>.Í–Hñ½JÀåÐÙnƒ5ž»w‹ÝPŸom¯ŒåN˜}F¦,†ZB<6à3›ƒÔQúó}a[Z…ié¾¾ì™3K¹þ9……Âj(ŽëŸHÍæZ¤* ÕˆÚ8xnŸf«a`]³`&«­[äçWºŸŒÞ¾×iŽØ¿uSœ¶¶‚ƒöN“_B™2ÑÒÕàY¤ Ímð@‘dK`ôÇÀšÉUAîd5Ëìg})‡½qðÜ'¬wÈ¬)Çe,Mn/Ü7XÃTƒÕœŽ<DkÆj/Þ:xn^”6¿Oƒ<æ¯F.û.ÜSŠOK¬¶ÏÈÖ*Î‰üG[Ööü ®}ôˆƒ.?2Ù4X…GÂ58N›ÁšÃ4°mÒQöB©l|I¤¶¸£r;«un¿Ùt°–Nï_™X	³ ?>¿‚­¶!Ts´Öîï©§žzêé1ÊEŒÜŒ
!ÑÇ˜kO}²‰ÖýO	ò„i*RòéaóA£öõv»ãB!”ÖP=Ÿ
¨ë²Äþ$hmý(e±"Å”rø-X¤`ûZ§ä*R”Øõ}ÚmÇeÉ+ü¶@%[©AK‚$¾ä¬R2à€aZäŸmŸ’=,m_Ãé|Æ.Žjý|Š»}ö,>†5wµïL·ÖÎ®Ð3ÑìtÞÙà;s)lZÛ	kGFµp’ÁZ%1‚½–÷U9BZxšÿâ¶Šƒ5/­wîÅjxmšW6·˜ñ{Å$X³Ÿ‚ÁÚ{Ì£>*ë;Œµåe¡šð7XÃY«Œ¹n,ó*Þ“µ–§;MåŽ¨*.ôÊ­ŠúÛ”9Â\°º†F«³ç»÷» ÛõÍ­­?þî÷Tùí&)þ6&›Î5þù6TàÁê¥Ûgq˜¸”½ç»ïôÁÍ¡š½Æ#´×jü×ÊP%õ±µfEe›ff?¢½ÙrÍ˜M;ËC¬Êc£Kd£ xŠ‘Öì`¿S~¦<{1O3àP&¬5kŸ¸”[•1&…c`MÝgÀZÙ…9vEôåPuÑõžInPöƒÉºi‹#™‘†²˜—~	&ƒº²Õ†—
“}Æe¥¬†¹©$sX«ú~ÕŠ'[B¸½OóÉà6œ55ÆpÄò™T}iI°VÇ™+
ÿöŽ'-°5ƒœ÷=Íšæ—+È¤ú&'™}Ã4›.ÊÎ›JBG°gÁo• 
 P7j0I½kŒ½
hÑa–ã­õ•Òuj3•þ8ÉK– Ã¤†_gªæ°Ñ³ÊµFk~Xüˆ¥Æ+[e‰Ñ1h,Ó¨øJ±lÿôX9ã‘ÑÿÚ‡8ø|ŠÁ™	Ü¶t28¥VµlrÈ‘šykN2]CX©joG¨&V{ïð¹sóÜ’+"Ÿ·0È€¼þÙg¼‰°ÎHkøÝÃÝû›k+£ÍÍû[´8‰ÕF4em”È~–ì9<x
Ùvœù¼é(‡CXÃ›Iç¢,È‡b¿Áš–ŸlÅlÜÚYzRQ
d,íEGž9B	¤J3Ö^D_RòxëàKªƒäÍ‘yF_½züªaÚÑðYxÌ}æÐ´¶§ýÃjþäÚG·à;G.DÄ	x‹“ûÙvQýZ»f^ÒÂøšÃÎˆ³$ŽK¼"-.FÆZ³Z·»q~eñ1¡±öäïÎ³R$¡ýDn™zÁý=õÔSO==NýÏØZc	ªá®ÉY³øþ'ŸüÅ“”ô¨RS±}Ýa©F¥„šl6Øìl5Ï¶wÐÃ±Ÿ­UHß«çôn¾Ü4åPgÅ§1r+Ap¢¶`·ÍÄ6RKkýVðhRäcŽg¨~”¦dþT–S|XÈ`¢·”ÍÕfŽÖ6XCÑ¦„¬b±ã‡ÈÆ¹Là?`5¦ry?ôØr™ãBXCº„M-ÐþÛk#ÃÔ@ÞÞXÃq\ã†] 
ÎÑÚ3¢µ£oíyÕF+«àI4–<"ó6ÀxêEœgVó¹ô+þ˜€mDú´}y“‰g¢µM`Mp„•õþÔb®½öWÁÚÛKüDjÜÚÊ^«§D=2ÄèS%¤ÒÛóÄÙå¥¬ <Óœ56Dgs¤ùçG¸Péô®wî¯ß¬œÝ¥m¶;8kTBžíÜÃ]»~Zs¸æ:Éñ?7œ2-”ýåjyÐ‹ÄZðpƒT¹­"²–[°¼÷t“×¨û³JH•>Ö—oÈLãDÙó³sp›D&	ËõjmnÁñÏ2Ä“°â.Jøm­™%À°Ä¥ÅÑúB–éê*E,eSV„¬~V£´l}g"¡õŒ5Ö<BÉSËUl«è`…ûW3%v„sèç%ÅëçÓ
é!î¶š*þ‰Fqº¿’1Ð˜£†‡¬ˆü,Ã§ƒÂØVÍ0G@s r%¾°ð)42Š1/ÍúÖÊ X‘E.c…¹ÀO‚Ztå%ÃÈ]ìg2©äÔÜø³Ìç‘þÀÒ÷SD³Nzx¶Jý™†îh05œZÈ@>µ—ÄþÂëÖœëä´œoê#ùMå*#2ÞY]Íø\¤F5Ž­šµÖ'l¤Ä7ÓïÛ5bú—–¼ßO"×sÍ'ûñC<¶~®â{qÆ+•Ï|n,à§¡8XäšÛ©1ùT‹]5³Õ¿
­Ì¿¡š`í¿k2Öþ´r»½y¯½¿ye}smttãv§û©½U£­Œò;Æ¦`mÐ¶Ìdcßê!M …½0_zÃShO.Âx‘Æšƒµ÷Ý»6·6M1qäNX9rô­fýGX Ûÿó«ô¬>.X£Qíàñ}û_½úÞWWï›ÿ2fµÈY‹ë+ãN¶È@³•d§~²â|V?ZÉ"†¶xöÁèƒ¼Gíðà tl{QÚc,]­kŠÓµÿNâ’1ëaQ©ýô¬™*‚ÜÆjÍ³Šô3Š|+þ_AÐ°f®šýéUAöÔSO=õô¸­59k!­	Ö	¹Âÿ¸ÎÿîOž‡ÕVSªkÒDÝƒ56¥µ&Òk[7û›k–2²ƒÖÞÞFkUn	«štÍÝ!÷H‘é¢À€‚+hMQÎoöËp³8ÿ”+F*Øsœ«d¤Ùð·ÀŽo’ÂKªœ‹"9gR-¤¶ðU_Ñ¶ŠÅ}:™ñá¸\jq¢k‘ç–1ú]kî'²{{óÝÛ+û/\€×(¬ÍËZÂw$X?‚5H-š±ë
}—2¤44®ÍŒÚq®"8Ó{÷ tÅÑ1ÝN²~gíÎetíÚÖ&·¥J¯ñÅ~ÍÀ5ÚÖ^ýç#–	ùzã$[í¤ÁÚ‰¥Æ¢"þ†´æyàšqÛˆN£¡@†€;Yms¨Vöˆ!©VË¿½h»¿ú~ýË>ÛÓ¨~ü–çæº×fÕæÜ5ôß›N+ÝØˆ§³AÙºÓ×Èò[ôŒ×¢8ÿ×—]SàÈEH-ÒB™àXÍâ"ë£e Œ½‹Ì¨¶ØÇ´äÙHÔç&9kxÖJ3  ¢¹‹‡~[(bÎ5†˜°]ÊæZC‹ùÙZëª€¦áÒ¼âZ¤~,ÔŒÅ´à‰¿»#.rÑì²¸›•0O+}Âz¢AßgµXÔá”^m%A´b.Ç+{ª8¾w• Ÿ)²òÌËâ¬ímek,L]šk-1hÓ…²Ü?>šf¶bN)­,`•ò•ÓS¤/mW¿Ëg$$ƒ÷Uœ.(?ðŒÕ¬Ò8©JEÚÜ€µhH²†¨	Ö|Èkzz²/SÍ%ØRQ¼×N)ÔugL1@* ä(³¾XJõ‘xjp"XÇ/é*°6–Pˆ,ÃúSàäâÌv›þˆír-z+=?åÍœ¨§9æ$æñD%»€•f¸ÆÊ
 #a©•ü¥U¬¿F@>hV{R›W$¹ì¿¡DøÊ•ËÄõþÙgßð2¥4¹³¾Ùýã§ŸÞé4åÅ¬l4÷[2,é¡Á> 9l;@	ÂdHˆMƒ	–Ô»ÌŸÖbc-b5•kÁJ0ôHN‹ZÖ"VŠäŽÙò™p¶ë³BÖ(ýd 6°ž|ñêqrû÷]=z|‚El‡Ø§ùÇo±Ò®¶ú©¬&Nû)Â9‹-6Æ‹¸eä®E%§ZD¤’iÃæÛãgc'†ü'÷c¬=²²{Võübµ™‘‹?VòÇç7É»–qd¯
²§žzê©§Ç1òEø0XCÊï·2È?`­kýÞŠWÂ6îºð×|nÎ¼‘ÄùŸhv®wºx÷ÇhMÓÖªUfLkjbÁBHÒM¶¹ÄþG’Yd»!¹€§î“%ÝìÁcª‹4±v°6hk>SŽí–S×œù!¢í<e,§…ŸW ¤qkh[.¿OÕ£›¥¦L¹n†v:ä®áÓ™mÅ:o7z”A67ºÍáaîÏ¢¦5‘Š•1X3T“Æ$nM˜åŠ³æ2õZ¨63ñ2çí‚°êPSçˆ“ç‰ÖVškkm
!/ouït¨øR“u‡ª„$ÒƒéfòÖ¢ŸC<û¾BB}6‚ü¢•³•†ý4º’ÏŠA¨Ç³”­¶PñdÆ)¿ßì¥ú/)_®ñÇoï}KäÝõÍ­ïÿxs“
³³íÏï¹ÖÝÜT2¤Úýk¤È¥b¾xXßáÚQ}ð%Œ×òÔ$.Û¼ìh Û‚tÁk<%ægjÒl«2ÇJ[š.PƒÒx¸“LÆ69v[H«mŽ@ÿ…Óp³ÅZ­Qæ|¿ÀŒíVvvvn9[,•QRm$òå…¹º,´B¯Y&IÖl6¬E)‘ÿÆ†ƒ5/j=Äw-½\CˆË7ZUfØeØFãêð¢o³oÚb“…»Š—¹6Eà	¬õMïŸ|FsÖ8L·–aµtêÙé)v‹õÜ4WæÊPm	›MåK¤õ?K~É.èŠO\¢¬1XÿT‘ˆÈ ”*iœ.7JbëŠ“}A)I$×­éD†šH0$2À´.åø-ã³é<ŸŠF7ÎS,	Á­&ÆÍp÷¹H”<¬ZÛÍ,l	 Ñ£€Úz×Ò.ÅLåN½üò®žß8UëOU‚¬6»qZktF¸jT@
Ôôj¶È·A5çª1jC™»ñ¯x­¹ÉjP$LýãgŸ¯ßýöþf³»ÕæUyåÎ;kÔñ·2bƒ7 0‡j@Bk.½ßB%6BX3€“t MÝ£¦Ìç¥Gt¬½ï`í’ž—d¬ÙlWL<;£óc`CìZ›šPÙR^•ð½õÒ¾«· Äy
A¯î¹5?¿…Ÿ$Â³Ýl;©…WlÛ°Ÿ:û§›IßÂÐI IÚ5‰Ô"	Ñì©xdø¡I6Ûü•ÛŸ ©iÆ…‹Ä±ý(‚|·«ò	.fÅ@l7®ÆbûÿÕþø/ÎZÓ³WÙSO=õÔÓã”ê #«­¹2È_ ?¬þaµŸÁ´	ùšÀk	á>;Xký}rÖšg?è´œÖP‹n©\¾ßN#Å?·}È
!ûÕŽ–Òn*à G’¹’¬…Î[!‚5Œ´Ö4xžÃ|HÉimÛìøˆñ™my<¥Ö¢à˜`.Î‚nGò^Ø˜‹Û)ÍúôRçf³³¬Á)]R?”²¡®­W­åäµ·ÖŒÔÖ†íV„]ú)â™‘4AÈ)MÊH>M8dTsGÆ<Ï6Ò++æ®mÑ>¸e¬ÆZ;6¯ FÍ[³æ0îj]$Oµ­-ýío‹ °6fÑýl‚^¤|ÕƒÉà³jV¸‘ç‹‘ÙÈ¦=ÈŽC¡Ê2ÞÆFò¡²}óû»ëŸ}¿õýÖýï7$nbcÜë¤o^_¿.{Íü>IöÚ1•ƒ¾‡½†Ô½väèsq»5èy‹oW”ç/‡­Î+æAA$'‹ô_<y#²Ù†Ê!œ¹bI‘™&i³ÙªÍjOnZf/ZHÔà»Ê’ffÃw•±ì¡š^°#¬µjõ­*ƒÈ‡€:,»¹ñ‹\M´d˜*²÷"q˜èŒýÙKè•ÝœÔqw¢Æ!ŽßXPècKÂMË{Ê’,çêsÝË w%,ö÷Ño6>å˜©Vïž~zj2“++x?;ÍÞdUóŠi|Û“˜Òá3Â.•@jàu±zyXm|º?µšâ“3Y“@ý|•ÇR ÙñÓSÓS"1óµ³rádp)–¿@\d‰“\©«˜ô¨‚,M
ê
$ô'§¡¼~ö9ÏE»VuZpËWée5VóÒ,ÖøÄ2§u7 ¼¼êW‰åRé‰ˆKß¨×/'R Ø™3õ¾®Ú×N7ÝˆM5ÖoªÅ	ù]äªV\ÿWFjš‚­K¤oÖ™,¡´þææfs´û-±›Ý7i~qï»`¦!cµ‘h ¨,š¦æ`GMU.ÎPÛZ'*êîŒa-îX#ô#.‚¼ä„­&¢ÙÓÚÁšÉ9iVþh1E Ú5°ñ_•Ã´ê>þâqª¯žC|åƒG÷|ŸÌ‘Ïìî„ä–ìÆ±ýÚxk®ýÄV¶Ÿè«Ù÷‰wGÙ–éYjZÐXš¢ÑjFj`¶A]kj2ä¤vpú¨ÁšôƒEüïêM£µÄ-’çŸÖÈÑŸþ˜­k½*Èžzê©§žÄH\ÉGk„ŒÀjB¢„$Tó<ùjé]ymÜŸ5·Úý¿û5xn÷Ç¼5T©×U1åX¬0­Hªƒ5fc;õÛ¤=]LHj:—	
¨XPØH@ÌˆHL×–ð|úÜ2 ÕŠÎU‹IÍOD°æÈU>²ÒZû(2Ì2A~p0¨f|O6Z\$™É±+$4?ª…|„Þ¹Ù\ë^¾@æ7J°·ˆÃ ŠM‡v°6jÆ:äX3=ùdkô¤»•Ä°¶8Añ#?†Ö<¼6ÄÍáJ»Ù¦a­sçNgëÊ5útDkÀ!}+/þ³æ­ÙÏÁüÅkjó9™%q¤a1v6:JÒßÅ68†ÛÕÈÕ³Vü˜Öea ›"/BÔEÖAª¸F|äï¾¿ß>ß¾ûÍg—×ïßYßìluo¶×ïÝ'ÎOsÍxí’Ôå>šÁk|'4ê½W	óçurô­×^ã»1úáë3PeC›½fvö°9m™,À!ç²ÕX‡°ÆEØ†e¤FŽ–ÅlÙC‡²»k§Ëc¥9ƒ³ÚX€ËVðwgNK¤`ÎÖ1ÖjsÁ˜×RÉä‚­ì,Æa³C`™ÈMöSßØ®ýÖ²N€5€Ûæø¨¯4f`ïE@/L)¦*z½ÜH%³{‹¥dQ±.|±ŠSµBiµß#{#îiðm¼Nf"OjüçÓýÌ)/ÈWÓˆk½ˆó à;l
Ð#ŸRe”ÙÀ'Ó²Ln5uË`/HY(HNž¾—ç÷©¨ Ul¶TñcMeµlÿä$K9b„Tf«™þ>ú''Á72ÌâÊS*YRú#Mn}xÞ8v“üŽ2={U=¬«»ÓZîæëë3¯‘3¸|ÑC™ülP96£;îUÕËgNòªš8É5áY«*M›<]ŸL¢q*B§š¡šsÕ@µ(WÄPÍîÅßEB5@Mº«1	»ÝÞÜüd¢»ÙÝjn k‚2³ÕØ0!˜ŒÏ¢Iá*õ´v
­ 4¯×¼`í‘ÆØÃÖ»(êW#[dÏÎŽØW‹çŒ°p¢…­jÏ«’çóùè¥/^%»ÿ8µ|Qê®…]çÎ½¸½?-5Ûw£”~pÌßÚÞÂÆú§;k?žÝ¯CTs€pÅ’XÍÎLl—ÁZT É9’s´6¨p‘ØXÛ^³Ú»ÝÄŒ^ý×v¿KíÿýÙßŸµ‰Ø­5¿PÍI¯
²§žzê©§ÇŸÞ/T³E\	­¬Ak
‰ÃOãé`M[ì²ÃÿæõöyEBv`µ¿ã­Õ3'OZ®$oÅ÷i Ö4¨Ùb)ûŒG0^À‰KÕ7k¤øI‹ëK¡ÁL)›Òø3MÌæ`VpdØ1rÕ4;•#À?¦µhÓd­f¶ÃšGF@FžZ*OÆˆá¸¸ÍöbùØmk?¤•µæÈ;—.4×nÿF²QkóÇhZÃQ²ôú=;`íu7Ü•wŽ_~Ž[Ãðž„ðÝÐÌ4Ð¢uÐs'ÕFzÚÅ;ß^i^»Ümß!edëÒ%¥ø«æêØ±ùùÃbC%y|÷º`MÆšAžRçÚ+ËPsÝ­¡ñ{òï|Í&šóó.Ä`#ÝŸF.ø¤–­TZŠ[¬ÒF×¾·¤Ý¹ü¥Jùœ¿HçÍoïÝÕ”ìÏ>»Žhjì@‘¿ù5íkp+åÜP>üâa¾.ó£ç^¶Ä‘E/SYÔ6aâoª’È8vä”£¶ÙÐkc;Ž÷ÚÙnÌžj-Ü ­m‘c" ’¢Éreˆ*Hih$sq6Å«c¬,.;½°[Í-€}0`Þ+Ï
ÖÔ2G´
}nËËËÚ¬ê*e®•¦«ñ1Ørf­IÄRêÌW®žÝ»#N¾gŠ|7‹Fk^
ø² /JLõªîjµ\Àk˜¢HšÖŠxbzk"‡#6II2(ã·ézòD3@Ù#ÜÆ·Ž"JÌ5_*QH¬¦èIóû¦Ë…I
•Œdøµ©42k¨ V¸œ¢D’»4MÁ#˜Ý›+SÆmÄjœäê©É §¿%¶Û$žv·ùfü¦üÒ}~=ùÚ´®"·ÂHO°Æçæ*Ë"JY!µg}zK'O2"Áë÷–NÝ8‘îO»$øìL9wêëS§,þ1µÖN:‡Þeõ[®H+b¨¶o‡­æ†þñ2TOåý{íNû6F¬Ö>™pš%jÅÓ$Pˆòû8c¾šˆ¡Ã\ ~{‘ËK¹ÈXÛ‘."X“œ­¶±±ç–…öïì·eœÔ(ÅÛá>´ö´f°ºýõÈ?u°¦ÿ«A2{^¹ýVz‰±¬½Oáp,^ó'Üq¤‹Y¸±ƒv+†ÇÉ~Õxü}™¯†ÍP4´nâÁ	µZG;¥øÇÐ9cÍƒg¸÷PöH8›0Ý¥ÅÖbcmGäono$\º1ïF¬ýÞf¬Ù„µ/"X“³Ö«‚ì©§žzêé±[k±°R$$BR»dåViÔ&`c¯-1ºÒît;×ñOhùû•-rÊKä@Ê +	Òå¶iÂÚ´ùk67M‡Iu¸*àhŠ*®Ç	‘u­¥æ²š¢¨¥¨‚LŠ„G,¦k˜·½uÍ-3ŠÛçrÀ&VÓXß*©çƒÃ°èh>Ÿñý°WÍ]Æ‚}ŽçSš½öhmÜî¶›Ã+ÝkŸ®­Es±ÍY£’^-ƒµ14ÈÓ›¡~Fw(Üðpë˜˜q¸6Ïq³2Aä"·-#+­Ñ•óíæJû2ö©öMÑšÚäˆó`ä?hí;$ZãázÖøIhóÄÿcïü^Ûºó¼¿ÿÂsi6¹y0¾È3ÐAñ.¾Èluä¹@­ÉÅÜè@•h”¥ìt’H»ÄIJÓÆ±óÐ”©ÆéÔM¥É65Ž»žbã²„øâav¡³á¡Ùž×ûó=''6™fçêé…Þ–Î/ÙŽmµç¥÷çóþS#¼=zk¹\x¹™«æ”>â“4Â_#(&|ç´5BT)æ‚ºŸJé™Wÿ÷ÿY'VäÞƒ;ËâÂøñ;ÌèÞ63ƒ
´{\1ßÌk"IPÁk–MB¦ãµ‹(IlÕ¢W
x“o7rØ°‹ø©™AáZˆmÀ–lŒNÖV›SM8hjp°Þl]>If‰p#m>ç×NVeƒäpCe‘õîåËü’ËÿŸOzœ£ºJ–µR‹•}-m„°fLˆŸ}'ª«×Ve­“0èqu[mÂg‹Ù#3Šã¥ À,³“¡b’?`ßW¬ˆ0#]„4Éc okÈ;S©c³9”Ô¯8I_“„G]}
Ùç•BSœ&˜xiø…¾¾|¾À‘r GUç´:Yfèu³ÐTÍ#mg‚'èïfg÷!‚}r)óªøŒÕ „¯ö·žç›±=ÙGÅ²Ï÷kñ!‡Ggy!ôðäGþï‘:”Eg°À[S*Ä–S&Cà‚Õ­Ù…C´»[³TB«Ác°Y¡87»€µöªÍºHsÕƒîÍ†·BRûÍÅÓŸ¡ÚC5‘ZÄjè.•nàúRbyyóÖÏÇ¶×7‚¼56„æ¶]Ü£ôl<³HÍ
CvâÊ;`­ZŒµ‘¸Òk’^þ$‹Xbÿ}“šÄR‚ÕöáÙAkí†iZâ®þ€}I®âÛ_}õKj@Ïž¸«¹WÖF¬ÉX;qßTmÖ1­qIN…Ï¢k,êþ«ßk«½¬gmØF`£OØBVÙgñ»}Y*:5VƒÆXÖX¸­8ÃŸ‡µTEžt¼öÌXûéÁ"ÈÍ[œ54”³i®_m	\Ö0‚â2È^dO=õÔSO?€ôþ8dD…IÄÈûG(åG
ÍµÛnÓ½Qž¦â©Ó¹º­-_Ýýè¥™M![…kK9fÌ3>Øñtdo’ÈÁÜ«A[4¤‰ÜpÐ€œ4+9/KŽ¾%üƒm”se0áž÷Ðh3ËÒóVà¼ØQ¬¹ÉÚùçj!Ë¼ ¬P˜¤&9Vóy¾ö#V“¬Z2 %páþ®%6öö–__>¿w=1ô^§³Ç†ƒ5Ñš5­}`iÎX;œÂX£¯,©«Ž£º*IÐJA{†`Í2©Á¨¤a%"Ai0+6;ËŸ/w}gåög;Àšykü>VßÚÛ¿ü:L­ýÙ¤_…õ®qéŸH2ÉmDMPd–Óié###lð•uW÷ë­=[	Èàûd”|¥«¹jó¿ØY²þhg‰ ‡~xçÞÊ“u…D®¯?~ ž¡õ»ßþ×Ý°¤²Fˆ\Ñ5“…¼F=$™Ækòœå8öÇßà]™QèˆÍ¶mF¹þ±ÇjpºÉ¶ÒG¬»Í<6îssEt6H»¥{·Qi*]DÄÖb[5[Ä[ƒÃAÃN€ÎÚY?mµÑœ'hD'Ë±í¤}ÙÚ'Û š=Ö¨×8ä¨­[³XÿÔXkŒ×H3±ÒH­Üä5öJ%¾êø$±8£ìó-µ&&Zì .üüA{ý“£Çü®º3ÇÛœÿ·ž`ëØ¤X­>1AêI3_ÆO­SHiy$F-Ô'²iì9:Èh0ÃaÎ{}Ùéé,¸EÎ# ¥~:×&ý”5ÐWæ˜O§›ÍÇ|Ï›<F½#EFX¼¼S^9KN0_ôË˜o"?ŸJI_Œ9©If©¥ÒCÕü@*_žÖŠó‡<ëE
‘‰ÕX`£¡4ÆZ
ˆÉÊ“K1Am¶Ñ-þmaunúðÌ–T[…ÑZ•A0{ÕgŠHçäªvµ(¬ÇäÌ¥Ÿ€jèÔ™¨’H&«Ýý6Ò£§÷:»ë{¼/s$1vëÖfgixøÒÆæðæÒëæÌD´&Ø¶‘ˆÝÖ^W?:¹”HÁZ ÑçaCif®a¬1û~4/®|ŒY-F-a™HÍôÍé>øÅ7Ê…ü	{?ùÉWo¾ùÿñÆ‰k"¦aŸ8uæìé£gùò”A¢8Œ?²ÖâÝ8´Ÿµ[Eà¶o2G¸þŠp‘a7Væ¬9ô’úµ=Æ¶ŠÝ!ý–ø½Ø l7TíU#6¹¬VBµ·æßº’›yÞX{AäÆÒ¥[¼áx(—;4„±¶(-j‹üŸO¬öûeg¬õ&b÷ÔSO=õôƒ±ÖÖ"k-œ¶¬™¹vD)YGr2×Di–æMröq¢€5ÛâÒá#;w;Û{ÀÚ>Z;0ûœÔ¸[dY2PyuYÏJa5­…¦šMÌ.‹ÃØày‡4Zí°xÌ/«àãËòì3j Z+X!eLk¬yiiH+Ü´€Î“ ¯|fIÇ8è<6¤¥[§½ Päs lÙƒ´–²K››¼þÆí¡Kç7—¯o¼ÇäºÁš‘	mZÏœµäÔÈðÔ»¢µ©1ZÝÇŽj`ÐÎÚ0ð¦ŠH1+OårCÏ|5‹•ö“W?üpùóoÞÖn‡ó±Ñ¯~ÅW|MI_+òÝkäŒðÛ0X;÷Ÿ>7mþ9pÌ/TqÖXûFœ€í&j£þ1h©i`x;A…ðEÅûSY7OÛ?~¹¶¼±¾>¼þdiä‹;îÝ³©k;w<&àaçæîúú:a+»úÖ®ïGj_;#½víÚÙ³Æk4°ýÇ€’H]vMýæÝ&Ë]ùwh¾û—\QdŒlÜ#5æfÅm’Êæ¸‰á¸êòHZrÕì^¦ýpžv³¦PB^‡Êb´¼Ó,ãÛÉúøIÎ¹àvO–Z[µv‹Ì6@n¼!6ksèäåã%}Ë‘ü1°v¡m_u¼B6	'ó-]ØÚj•ž)%ÕÓì4Ú5$`¼Ü7Pôy‘T¨‚dfv£»Zï~|¡-§ðß‚i:Aƒ4ñ/eÂþËŒ¹Íx)hq @Yi8QøåB«å¥2“þ¤5©Ã¶ìÞä$ÀEZ!s,£<}ø|ã´yþ2l†ZàÃª™$õ„[“œI ±X	æ«´ªyžºÕú+”tö•5C.ã²qª»sÌ¬Ëö¥y—çP¶;Û’a6;ÝœëgÕ£vy+ªv®+—-F5ä2EJH-rÕpa)€Sh$ þc®Ã#VÃUõôzúmgóÉÆ^=œÛ¸”P“Ú&e›·–‡c¹”~¸!ŠQ»Z¬±!Žà¾ÄYdµ`
‚¨cí`ºÈuÄ+‘–5£59PË¬¹±d‘"†ŠävtÐtñ§È‘˜&XÓ´5ô¾ù"ÿñkÖ Þ¹ÿÌhM¹ŸµÏZl¤i7¾ÅœÆVÙÏÎ_1dí¥cÖìg-Êå7Hã±ýa}£èÆŸ{32¬ÕEhµ“¢bÌ`ƒÕ0^_–.B¿Zgci„nÊdÏw˜ÉØÆk°ÚU§ˆÖj³Ö«‚ì©§žzêéÿzÿ¾®µxÚÚk‹ÐZ:-Vãžîgj!Êá`ž.¹l‹½Ý»7(ˆŒ§c¿ÓÚ•Ø[k©…,xJQ“š®ÙPÇK¿XI^†K®bÂ?cÑ•¢DH”Õ€ìZe%‹ó,Ï‹ÁŒž5y"½HéÃZä]¤ô,®?ÐWzˆJH/Ê|ÌzXmÙg§¥ÃbÞ€jl‹¬{h(§FJªéüÞ­÷nv.½ÇÏ$‚5™HœVh=¶X’úGXmä]„—6 Ñ´·SwêÒTˆ¥bÈ™éjuˆMÉ®qžãÖ>\ê¬P‰VlIØù÷Ü¯A©‹ßüü8_âß](ä[ÓçÔ
Ž\ÃC«±Êº~jÄ%Êƒôë~…~ëºâgJtPÅ‘Ý¬+õfÑ0@Õˆ-7Üé$6ž,§>~ôè1³Övžtî;òøéÊ‡ÇëwM¢µ›Ó¯Q­IéÖ×Î¾‰péÊaj87ˆ·#òg¦å±ÉÂXà¨Ù=à²EÀ6Gºëü9°ÁlQöˆHMªWØFœÊñÖNvEVlÇVÚIÛ¯Öø×a2Ï»Po¨¿­ö$wTÃk]¸pù»ï¶.Ck-®à—0ÒÚÊ!áP›À“ºßÆÉ+µØt0Ê¨Ú7ÉÇ'Üt [ìâ
òÏ¨4N¶a:·)Ò¬à¯5+ã:‚%\»Úè?Œ	­âÏªž7J?:¡zÈŒj5‡á ^c¥Õ¹À#þ±PÛjeÒUˆKåÇÐZku®;STüVnÎ¶&/BjÈ®ÛÿÌêµ=K÷g‚*‡ýfÚO‰AêP¶QË`”eÊ•Ê±¾~ÍbT³æhOÔ¶æŠõÇ2Ò`µAºÕ6[LOÏÌ7••Ùš;7·JüãÖl.ÙÝRÕ#ÄZce1ýÊ¬µÈU“Tÿ¸°° TSVÔ«öÕ\…_ƒÕ\¯š@š„i•-rw·ó:±"‰Îî6v~š'ØfÁŽÉRã#xvëð°àŒGâb=îÕ‚o°VD/±®™Hþ¹~ÿÕû× ¶ç¦b‡”ã0é…U±ívñ´ðPÖ¾¹x_1†µ¯~±vöì«Qùxæ½3à©t±ý.îTs«h'‚2ÄF¼ÿ;3Vì¾½DBµ—g‹|Â†08Ž¬ÁZ¬œrˆ±k k< ¥±b!ns1žvç)W¦ÆHí‡ÖÞù¾"ÈÐî²êß“ÒÔÒ®mMoRZ	äïo¨öûµµµž±ÖSO=õÔÓ¬kXûTaßÚŽ,Ò¶–þmÍúNèB8ªQ@¼ Q\Ð\ÝÙ¡òÆ6óÖöv#Z{m?­EæZ—;´æºZ2¢µ2°¦+=Z^LYÏºzð,Réýˆø:«ÕP™Ó†Ù°µÒÄ Ý9Ò@Lf$×ù~f Æ4<¶Í-³ªÈÈ\KÃ~!-‡ÚFWxOC±#XËøt¢µ<ÔF$ÐWÌÉ–+
þžSÂ­–_¿ôèv±ÖBX»&gM8B½×*CI,áZŽ>‹]n¬%…iÌ³K‡UŒ•„XªCÊ©Cº¢a+ÒÒòçKËïÑ,¶Ý¹Ó0DÊˆP~ptŒßƒKykásã3×¸þ>žªÎƒaÄ¾Ó@—bDè†,ACŒ†ä¶ul¹‘°VÄ÷ñ‹ ^ åFªM¦´Ùìò§ÕÎúÓ§;k_~ñÙZî‹'+w¾}zgû6Ík
†D;+».Íß®›"`c¬Á¯%&ûÊbã¢Ô23þÉ«4&ýfä0oèû*¾eZh6-{ä ³µ[’¡Û¬iÎQe‰’býk²Ú,„ÄÔ`òµ Ž”ýZŒf²×¸K­JÝ€ÎÓ³&îÓ>šYk5‘[»Á	ì«kíšŒO}"¸¨Ýg «qœVj×ÆKnàw«Ý&ùql´¿¿P—Õô]­ÒºÜÖ;p_ƒß ŒúJI“¢}þ9Ñ_	CùXmµÁøŠ2àV™ V’²þì„Ê„ekyej$'yS¤Ñ/è•Æ§žHÍ­0²Bg]ƒî±  1lÍÒ+e¸Iù"”D*’?Ó(ÁktäóÕ<©@õ&_Amîô@¶ñã6ý‹p uõrŸ×šÃÌôñÀÖ\Ê§‡1Ö(v®óoitçlrÚüôìYüƒñû\·yÎ¦ªÍòt±7a¶,­üYˆ©Å?:SMœâzÕõ´á`5@>u°¶þøéÓí[ËË{ë;—ö¾ÝYãº\ö¿†e¡9ñjÔ;N‹ãùÑ˜³·ÙE:ÛHµ`´kÓE 5—)Ý¾~ëþÇ¸k‘"'
½Ö¤ÖÓ¯ªâG``cùÖ~´¾ñ?Ö€µ³¼¦N¹§î«z¼¯¥Û²#Ú¼¯íè‹Åžš–"§P‹h8Ží·Ž5pn­T•—F-kÜ»±Æ.¹Æ5VZ­EoßåÊ”ÁšÓþ"ÈˆÕœûº·$T;L3%°&Vû_|,i¼°Fýãï­ rmy,Èž±ÖSO=õÔÓ¢kí_c\3}*™µ¶ø#2!«9Jª‰¢ã„pnk[;œ"Áâá·÷:;ww—÷nì‘2òý´†à `mÀæë"Í[›ä§IÔeYn‡}u‰à8bõŽeßª 9 %À¥4ñ[ióyXfÒäˆÎf¥±’XšØµ#aŸ…Î/‚µ¼§è€¡XøÓ8,KAjöÔ´"H²8ïyAOÄ÷3›’¿InRÂš"Ý¾áç2¬€˜Ô¨øKÍ`¨½j×%Â½Ôˆ]Ç¸Ñ¯¬’3ÌvCŸXrcKÐæ|¶¥—·Wî­ k7ñÖVk»!­½ökE.ê÷@á[H¿ŒµpàZ21½ðÎÂôô|±hYª*cM›†zÕ¹ÃcÜ¡3¡:Rô™Ì«Š¹*‡ ¸ât±Ò¬Zî?Œ™¾´»½Ý™~¸Xúçí‡Ož>z¬±k$<0Ÿ˜Ä‡»t¯Iü™p#Í1QyJÖ#úJ}¤úc'\<úóW­bT“ÓÕzïÄk*Œô+¦Ì†fŒÚ0©¬:2’¦j[	*òáºÝÖ–œ7Á•Ù_X ömÊ"+ÚƒõjÀšÒ fO7›LHWŸiï™#G$Î˜‘ŸÐlüd{”sœ¾Ãö•ãßº\/ÒæÖn—Ê<½FºN]øBÂ¤1ï“d9ÁP  Ê+¶kž”ú“Ú¯”3ã Ð+e%‹ø¼:|½Òy€ª¬˜li¼œ™x%ë•ü|µ@2ÿ±ÁUœµT¾Àk.Ûâ«4°³ê}´MVxùùæ€eƒ(ø1Ã6ïÃÈYm.h~¹î3ÉÁmmÍ¥[.ãù[%`Ò+4J™Âœ¾é	ŒÀ¹V•—knäð€Ïí¢KäÇZCsM;knkµéƒsÀ	Ó‹ØTs¤öŽ‘¨™j1ªAjˆ·ABT‹" AµÇ¾ÝÝ!ífo{ûÖðæ½W°·ÝYs//ó¥¡ —+¢W2ßÌíÖ´dçÙèf”àyv8ä¸$ƒ&kQä‹F¬Å¬fÿ+ µ·"…€vÖ"äRž°FM³ê?¿1QOÁÚÏÎ*î×ÁÚ~,±‰Ýlab#>„"˜‹ó #R»ïŽ¾Tò¿ßYûÄ­ÄºÃÖ±&=³0Ç\ü£‰=Ûú	mËáYDkÜµÖ,Jg«)`äÝð2QÇš+‚<Ø°vžàâåèIý×Ÿ*Hõ«ÉZ»ºdíÚ¼W	«­-¯õâEzê©§žzúZkn6ö§æ­½³F¤`7òA.ÚÒý"7˜'EÄq‚#‡Ò©e,µwoìíÞˆhíÌ_ µf¡ÛÍRQxHmj
é×Ü5r!Í ’R*ägTVEDˆ—Õ²ž^“„p…M9¤¢¥y”¢+Ø‹D’QòÂBZËÓ¸3 uZ¨Á0ãšíŠyöþx6o‡,Æ?(d÷Ášïþâ6)@m)ÒIà«XK×—>þèüæÆyFnß<ÿ+e k§®#VI%“K>|›’R¿ÔÌ»|7Ì¡6ÏÌÞÕgRØ»É$—‚®úváaA{)›“ýáòÚö
ˆö™X&¯Y­!e†Aýö/ì÷03ýþŒø]b5À+œ\¢ŠwGŽíx<kÔ¹¨îú©R¯¨S­X©T«êø|5×á†ÇFz¤)™Ð…WrzíÉ§ÛNg{ûKR!©Š|Ìô£;w¼¦ÑWÿµó!\]SŽtóvT¹q†Ù’€M±™|Óˆ|òÓ–Ç¢‹ã!Š9×aÓET@1³EV›¹†I°f¬åü[]¤c¶UAVèOÃ1³?P0©¤Þ3þGèFšØ!Í!‡5`5o:Å¹\ŽÕj×.Ôê"0×ºàö"×®Q?Ù*ãë­ÖJ£«[®ÖFË%øeœþ2¾™Æxo|ò87Hƒ¦ßâuPiR(©ï²œi<µI”,fk?ö*LS`ÌÅ(a%•Jy‚“F•½Òå“>¯’¾¾c[[ålÞµµx¹U°U¼F+£#ùt±YV8Ha°tìX¹Ð¬ÒqFº%E”TÈû@¼ÕÂ¡«{[>nùL·JYìÖÊô®4³aÐzõ­9|6R^2ÎÂÈÇÎVõó\µM§ÓV?ê/õ ©©þ1F5úA¯ß<ÿ|$Y7O=x°ó/{ãv6;—†¯îbëîì,ÉFÖ´b)ò Ad,\­£íñPkR8X‹K#9È•‚Ó÷³ †Ø¢Òø,¤´ƒ°ÆÝ6Ü®îî¨c5½{!ZS¤l5¥¬}«8ûÆüçåÉ"'îŸ¬… ædìï#·ý,'ÅÇÞší¼Õ"G’š Ã5#ãxTVéhmØ¤a»³dÒ{ÆhÜ9h°†pÕx úOÛs±ýÖœ¯«]M"8¢úñÈ¢Ä„µqÆš¡·µ/×zÆZO=õÔSO?”®µå#’Áš‹9òþ‘#?r£±Ó4©©oM¹ÝiàˆKˆÌb±]M¯=¹ûäþš½Ö~qÖº]?tƒ~%’«ÁÆ›p*	È2ÑXlÕBzyõžq¡²Y¿ Ž#…<ñÿ.A„KP<7nÀš0±Ê%ny·Í+ÄžFq6ÝZb•zÙ¢²Çt6Mí‘SäõÜ´ˆàx’!Ù'à©óñÍÎ/áË´½½›j!£Üï°&Z»¬ý=•Ä3R¾ÈÈŒ0dDc±êâE06ÄåáH.Ç•	õB.EœÃHéz¬F’TLNWå~ð¶ð‡_l?\AA2nèÅè×@‰¡¸çâÏÇFÒÓ­üsƒµn›Öoä?Ï›—}•ºRÅ*.–`!c
iT@úlùUˆíBËÏùv ºTS]m.=Ò.³¦s.µòjg:¹·Þ™Nå¶¹p^²³³ý„ÙÄOkÒ
þÚÊ
ö ß¦Ñý¥œÛEò×£Ný¸?±OŽS‰CÜª0rÚ5³û¡ÐÀs8mÜœZ±(Ö‹¶“ZkÐvkU%‘Õ:K*]›³ÎZƒæÁiã Ïiƒf®6Ab¥Õ-…L
@ÝX u¦iÇ£5¸kC‹¢±’#<ôj''&x>þšÑw4îcw{ÕE˜v‰Ñ íW(…¤‚²i×ÚŠ•tCJý™¶:½F'	‹¬1×Mq'-ü¬‰F_Y#ââ'*mãÊíÏ¬~W/ü¯Jª2W9«á×ù·`ËyéßJFÅÉ­RæXC}d\Sã`±P¯OxUþ0š6Ìòe¦Õ©`øm†/4ØÕÁzeu‹9•¹ PûnkîOOÜ¼°8þÈHcÇÁšašns±f³ÎS³H‘+Vþx þ‘¹j·dO½j±­vwç†ƒµ[—6€Û“Í¥ÎF‡I›ÃÈ|µØN´=ã/=È>7ç¼‰â<ù(2:9··¬kûÇa»È~PÍÄ–©¾ÿŒl´Šµ?úi+TTé`M¸*\»À‰ÕÞþåÏ±ý4­}uöÌµÓ'4cñTD]1¨ÙŽ;ó÷hç¾v™-íèKQUç‹59k¬´…É-`ÒŽ£5GÐQ~?gŒ!mÆ2T¬i+‘0üæœ+ ÚLLkûÆaïoX»±M¤È”Xml*yøGÈúÕ©!k¡ÖÀ5†¬ýMO=õÔSO=ýà¬5>\Äzÿý#ô¬Ùtl‹Í¾M»šF-¥áoCoé+ûô!¡ÀÚn ñ<­¸VðèúêÖêuÆ¬±áPÍT¶¾5ÍÊö(êR[©þN2âÊVú å	Lð©ó´£üßÁZáPˆc
Á'È¥ÙÖÃPUD:X“òž­bÒzá&JÙŸ«
vº%þ“ùŸcë€^ÿX»~þ£¥¡¡Ï;×¯wöþï¯—DÕ‹ÖT…÷ç¦(òøÐñ£GÕkŸ9-¡kíçr‰°ð1'LaüY1àp
ap&^_¼ú…Œ5›³ö(¤2C@Q¿ZÁ4yúøÐÌk\“,œ³ùŽün[?7)¤CV|PÁÆªu:Ÿ€5¹hš´Ö…äª~@M¢_Pâ5…¸!KEÑ¬«×@¿ŽJÑv€µ/×Ö1Ø‡4wÍê!wX~„ØÌ}Œ€ÍRýßD„HX°¿MÆ¼(l„h:Ì†ŠRÈjk¾³P1ûo´ØXk­Ö *ßÕ6ÚhmÂ“@Ž;HGi¤ƒ–kˆm;U÷È5º·Án»å•ºu‘ß¸ÎÁ~ó†Ð.÷—p¸ìH­M•áÄhƒ‡È«lÂ2-¿TƒÒZ“®¾òÂßŸ”ëÆÌo€‰\°QöK±Ü–r+©j,.ôe -/=+2gTZKÍr '…™œŽÜ§Ë`•5šÅQ¸Œ”v¡Áé^¿gïzLÖ„X^Æ×A"õ…lƒ­b.Í~,lK/+ž‹Õ
ˆœ$€„ïe.@q£Ÿ¹±éj¤}œÖª9K­Ñ`l»#5$Rsñ€‡Ôâ¹jçw­ òFÖg{÷[Ë"56Û~ÂŸÚ¶Þáè\º$3†È¢33Ò\˜ˆùj¬XØ‘0´_6#q RHÉbE°&=+‚<Èjk·Éd8õ­¯m¾zëú5k¢µ¡ÚþÈXñ—éUûúk¡ZTù¢ûúµÁó°ÿpö”ª O\;sŠ'ÿîwÏ¼¹(fÒn±]çE›ûÃDöûm/SèF÷ƒ:®» Í–ZpwPæ~Ñ¸&@CQejä«¹eÌkáR`²œšÕæõ˜ïkXª}´»a°«k9½éX¹!kÏrûéXëUAöÔSO=õôƒ	„Œ½µ02l[³ÁØª„LÖDkù,¤¦`n³ÚŒÖ,7{›áØ¢5þwø2Zkf¡§L¦2Û˜ðÖä¥QÎ¥RHÑ%wß3XSÄ£’ØÀ;+éa¤”þ4q<	€Ó!Ï8Ï+(ó.mPF"H6È§”’çñ‚—ÖÂà~0ZgyŠÑ,ÖáBñ¹ciØÏõ®¬ìHÑBF^ Äç”žÿè½×‡–µëb‘ÖÞäÊêm`íè³QkïJ9>´wõiØ QË’Á×+\
º¹¶¤,¥i£””F@½¿˜J,}¾T¯ZËÚÃë·w 6ª)3|Ö+Ç@&†˜MY(ä[´InšQñÍâtŠ®³ä|8îñQÝÉOð¨ŽÙTK9vþH"¨&l$w|˜IRÓ‹%º…Iü'¿øÓã÷îì¬ß[ßá’Ú¨í.°†vÁJ°qM+EÀ¦Ð‘×N%8Á~b_Q‰Ç¦Z0L¶ÓR©K;‡»ÐjU*Îë¯lÁ9mï¸’Oh£@²æ4E¹‘ŽÏ„dÈÐmpnÎÒÿ»U):.ÉÕBl‰>VOÒéF¨I:Ûæ±)‰¤Ô-Ç…J/	ò™ÚåÕ:øÇ~©\` [mR¬—FÛ*Àl—þÉÝjee”€=ãÀ°ÖlŒÂm|rÃúûpØ2ÅÖÖw4¿	#õt=•o•#Ôh¬•‹ùþÁ¹îrsÎxö[¨]mÁj&Vqù"UÇÕ"nœiõ²ŽL@cK [©¬Â†@Æ‡](ÉOÓ›[å[ÛOjÎPC]ÌQ@h¡ðÖ•Ôþˆ­úÁi™joþìõêpŒ.¿oïbªñyç³ÁÚ·{›choýÛ'»ÃŠŸ`µåeÙCÐ,
íwŒÆ]!µDd©Ùý1X3k-Ø_OXÃVs9'dªm¾zôÚõF4¦ƒ¬‹ýˆÑbÁfŒ@kNìŸV”?æ³`+Z±?¾úÄÇŸýÝéßýá¤öKû¹«Ì9kûR"Á³ýÓ×âCl½\ÎU{y$w›±NÄÖÂYk&×ŸÆC®{PZ˜)í˜bXÓÞ•wBXûž†5«–Ýýge@¢äðÔÔâþçF±ÿûïSKò/Â5Xm96ÖþÇßôÔSO=õÔÓÍZsÎš·&gíýEEŒÐ¸–B6nkªPëï£Á,§¶5ÁÕo-®Ù^§3k«ïÖ^8ûœÉÏd,,„|eôsÍØšñ	-îQþ¦¬…:r-Ëk@–h§•ü4hç+ÏÓ‹ÏiÁ#\•l6·€8²ùÒP>-g-/sÄ¶_xhÅ8è1Ì")úqœ{G_ ‘¡Äë{{‰¡å›»–¥!V­µ·ùößÑˆuƒˆKŠ)±Ú)þh*"2]ˆÖPnÛ‚µô4JU©Bu”¸j‰ã.¿TS¯/±rça§sf³JH¡®½ñkEøŸþd,|×ŒhíÏçšðZ`%Î5…jÜd­Yd½TA4?@Åª ®P´YÙÕ KŽb*UrhÕ"ß·gZÚØÜÜxB²ÈŸvHæc@öã;åu:Ø°=îÝ¹wo}ýÎŠ„Çfù•’ÑšÛ{tÛ!1Û©Sf²kúÉÉeÃQø@úD2CÐA[zæ

¶Ú*È÷³ÅÉ‘Ù8êŸ>)SÍ$^ã¨i.z@æ˜‘Yk:qÕ¢÷f¥i¡%7¶ÖJ5‘[¥bYˆ/Ð^+ ßZéüh³F'M†&Úwµñ‰Ñ“[íW(œ‡ØŸÐgƒÇ¨m¿¼u²]ÛªfÊ”`‚W[ñ¸ñRºY«ÀKŒ6~ÖL¯ÔV®S€Yè¯›qÖOâ~Mîa…~Ni?R3P‹Ymu¶1:Ñ¨¨âS{Œ"à<K)ááXƒìµh¸ã³»§Ù]Yiú™éÇsšé\¨
j:º"R³òG|U&ññgpâ„ê•J£—Õí]ÆA„®Æ-^ƒlòÕÆÐ¥'ë\ô[¤ˆæBE4ž¿Ž±¯šG¶"R3\ž·Ò8î!ìä‘ªo°æŒµ5¬áª…°vsùè«÷—Iî¿~ý~è©±Ø¯çˆJ;¥‡¿ùgíëo WnšŠ«i~ÁÚ)k'î_³—Û z®Il¶B±…ßÿûŠZÕ^6cMŽÚ'lZÂHøÆŽKpÙÉ¶ËQrôEŠ°G­ÅÀæF/hcíJl¬íoX‹Yml&­ñD¬Qè¿ø>¢KÛÄû”Ë¢5±Z/^¤§žzê©§h×Š½5½éªQù#k6›qki‹†ÖPÖBºåtnooßÝeâšëDúžñØ¨Ël¯AZÓ"Xƒ¶,á±ŸÌ‘p˜õ ¸Æ…ñŽéC’Û§kù*}œÈx@š,²´¦®	ÖDRŒ¶Ù¥Óê/³CáÑlè‘Çé&`Ûg¬èo›‘è]
±™–÷ƒj^Å‘±Rœd‡ÒÐÐõöÖ”ö!ö8Á[ƒÙÏŽh*•³|4ÅÕ¤"øFÔ¦†ÂÌº°…5â'S°ÚÌ…:b7¡Ñç9`*wµs{w›©kŸÝ	im×hí1#FkG/¾›œ!PqaáÏÎ]³pÎ  ~šþµfàÆ¦êV+S)ª<Gš•:§øf¯u}™o‰ãœDdEóÏÒVœY$h$H:Zæž*o‚kzôäÉã`¥=¸÷Åæ:}kOŸ>¬Ý{p‡Ì„+Bßì®ñÚmüø¦IŽ0¼e›®=™}|öÄ&›í'Òß™°À^ÓqIcÆ¡6ëh{V©ß¢ïˆûW­]‹?sÙb¯ÍÔ®Å°¦M¥ˆ„Ö[´D"ÇnöcÕt†5?Î
'¡¢®˜+ÊÖWµ¬’þ,UŠã¤íŒ;o.#Ðž€†µ7¯.‚1©¿î´ûúSÍÚÖ`KgÈ“KÅ\×¥w”ªƒ­Ø×²p|Ð÷úwEÕ7EÒ7 öC^žá\93¸Z*“ÒØÙZÙŠ±fª7êslðMd#ãLGV•ÍÏRÒ)B³Y°‡ø®ÈKÑWwjü4ðÕ\Hÿ>R³6µf¡¼ðÖ|uf&…ÛŒ§† 5AÉ	tíÌhÿŒ®½•§ãX™~+÷îi²Úã•‡+O6Â,Á%î‚5Ó«n0—Ýå^‹ÝX Ò¸?C3Ö^g;kFjº§ð“s…Ö¤ö;_ÍÑš½ññò«ÄöoÞ¢oíÅýj¦˜Õt·]wØQ×ÅØSûÏí¢ØMf£A’0òšUAâ£Ó¿v–—Íïb2;4r?òÏ´Ž¿j<p{<–Í6?`í$0;¨W_¦ã‘³&TÓÝTãf5§‘wÅÍ„QðcÌj‰DlµÙÓX&]»ÚÁ†µ(\$öÕöv7¨MJzâÔb¨O]dÜ²«õrû{ê©§žzú!Ykk ÚüþOA#‹oM¼Æì¯¤6Žà¯å8”£"2—û,_=r¤ƒ¹¶óîÚ‹#ücZ›eÜš?XQëÚ$CxÃ€‘¬úÕ,ù±l@&ež†¯Q8éÅ¬ÆJ¶ZsSÙYlºFØÿ'a¹Ø~“XM	"ÒØöxG†X VPžGXÉ>Vã!®ñÃÚÇ2i&ØN°f$fQ©´/Ç)?§èÁamd"±±·Éý:ó6.YD=WS–tˆ5tTÍW8BS‡s
„4é"E²‹”£+"dcq”•+‘LN«ypJé¢µP<‘éÖ‹k_lo//k€ÐŠÁšÑ˜(Zû¥h7ïßClØÎÅ­kÉéé\*‘š`WUŠ´¤±ïWä¯Ud¯YVd¢Š‡Vˆr÷`5WåœTÕb>‡éF÷N‚8
®”/n?z«=îtž<xðÅòúÓ"!I¾¿÷îi²úÙÂË®ƒíæžðö÷ñ{ŽÙ\#[˜î1…‘òÙ,ƒä®gnÐfN[.*œŸwCµšòÙšˆB;þÁqmä~	×Èüg)ßG[/‡í 8YÒR„ÉJ)Y&H·
«ˆXØ‚Vja·[³xÁB'3eøltb¢ÝW}b8¡íŸ¨o<É©†„¬æbN.¸ç52}éé_å™cÇÃØ€ÕÑ©Ú®ÙÎ(NäLÑaI<ö-(«Ò×7Ø] :5]­¯¶€+ß«Bâ'·æ~y‹å*‹jª¡¯1ç×ÈZúÇAœÚ	¸sAEgz±Zœôhî£6¤“€kºíwÔà4ý8_œ'QdfŠ72,üQë§ß¼(è=¹j¼¢\ªHw]ZÿcÞ x =zðpíáú6eš£¦e"awc±!7GÙ¦0»ƒî]kQÃT8;’80M¬áXmäxÊÁZüÅ†5sÕn³D×îc­Ý¿F=ä‹IMŠYÍ–Ò¾n6~^¤øô7ì`²!~4‚5éXrFãNkÒÚ©¸
ÒÝ\†H´i
y-Ž |î{Ù·ó_-|©³æš×lÃå‹CÇ,¬Ý1†…Åš¸Í~£d¥£ÎSKrÇ"s¬†½öâ†µˆÕè¨¾ÅéIiq
cMzTsŠ0kÿöo½x‘žzê©§ž~`³ÖþU¸¶¿’÷51wM‰"ápl¬5EŽ¨MùLX<4°ª­ïnïÞÐÈµGøÇóÖ<Ïìz‚³˜æ•Y fe{kNž_–˜•5·Mç´a¼Ù¤jž—Ö¨ƒ„¹(|ùŒºDjÚàî`-«¾5Çnl§óÅ¬è-l©2ð<Ž:\Ó’ƒžïhí°G– ÛAJÆZ1Ÿ@`Wi‹¹Òy>o`fœ¶·×YÚ¼¾{~#qëW¿ÂPvÆ›àÎW¤™EPqåÝd’‚HâÒÃT«è(×”É)öŽ;k¦x~èº¢™Êíƒ5pizñËÎÛM][Ö¤ÝÝÛ7­¨ÒÁÑc÷ÿ›œHÜüŽ!ß™É)môª2¹€9Ø…”>}±Qg@¶î¸Sj]Kq’x(U©hH8.%/-@#	¹Z¹DŠ'£äÕ?1õê³/S©í{vÖ¯ïPùåÚÊƒ;Ÿ­<XùŒ‘X¡Ö9òÙI! ›pÔD‚6.DqùùxÑ›*ÿøZÉOÃóL³áŸ;¯N_1fÃh[ ´‚@6ËlÄjq“`[9Áé.iuPEÃØæœ€†o$$ÖqËœ7Øjœ@‘Ñ—·Æ3mæ±Aeâ2Nýq[ü…·¥ùÚ¡ØïÖpÔ2?suýÒ+“ÕÚDÃ,·Ð¯CøJ'‹#X«53Ûd ßòÿcï|~›¼ÓvtÎðê]–,`eeÉ©Y•Œb™ÎQ6•lÏÆAhÉm”E7¶Ä `^!•Rã Â€€Qóc¨"M¨ÝL^ªà¼iO$,FQ¼ÂÑ,h³áÌé|®ûû<yœ4£s6,žËöóËv~Ø.}>¹îûºKçá§"))*«<_ˆås÷‹ÝdP*ˆ¥TÎÉ/OénnìŽçÏ,æ€5ö©‚4XÓã¸qlÓãßŸ¡’ïmœæ.l¢ú˜6Ž‰ù/gwÍHÍ{my"gÈ+ˆ½üjdÀ'5ÞàÓ§•)b$[íaýJ!S´)Ü¯«MmkR[\Ú˜o,Ô[ÕYÎá§ù»…³i<0³;Ì°íÁ?õwâ3`ÙYiq‘“.ü"È]¬ö YºÈtgmâìk¬‚¹Ø ÚY«}¤aMÝšGXý•XÈµ|²rzE¨Fu(ÉýBÂd'¾}N¾H'ª’q€—N2|n#Ö×9î_Ò›5ýÐMÅÖkÊBØ&è€µÉ›ª°&b&›v{œ›&cÍÌ2`µÝkA¸ˆÏjkíë³xjÃÑ™(Wþ93°MÿyÚBû§ÕÜåïa¼H¨P¡B…zË
!aµ€Ö<Vóæ­ÝðBFHéÔ„Hxi±(»Ð°CBH—œ5]]Æ[kÝÖmËŽß;fÄ`­ÄÈµñn½.ÌBŽxêç8¢ÇÎ5í!ùn W
¾Rç[â cÐr	¥…$zðÌâÎï|5G^<ØŠ ýH°¬¬\c¶œ5yw@,nwJeA´Rf+Q°1¸°¦Ï€å¤ˆ)7‡§¥¬ÍNW§¿ÃZ[­\»|ùÚ]/íƒ—C°vöá£\‡¯
ÖÈƒ<”œPÓZ´—ÆwÎM®(²WÙ"Që°‰¸	Pœ¦`€ÙÉf4b
p-Rž™®<YÐXXÖð¯|Z{à"ü¯¬)çÑÒ	òÔ%É`mJ™IE÷‘	™÷¢Cb£ç¸F4d‡<­9aRqXH—ÅZ|$"XSy«¬å˜›f›¯6Ÿ0‰>ãtb{²ôõLVk³1ÝäL»NÞ+Á%>ÉSËö#iÝ,6~ôv››hÍ’Gl2Ùö­Ú·%aÛÊ…•OðÙHú´‘jnÐÆßûF^òÁ³ðÈ±T^š<sÆJ#3f³ÕrÝAu$7Ó%·‚%Övë÷ºì/Eõ&N¢4ô€	~9_ºqü¾Ù\{F©$ÉH)"ƒÇÎ³r0¤œVÛèy; LbðÀýß1ÑûZ¥—ðòq[jKÓq•%Z“˜Ûäˆ<*6ßÚÎøÁ²ñ÷Ï9PL$ø¡Ì1+æý¶3~\a›20y’è6ÎÛ*èGÓÌHóe›^Í#Ø©˜ËEzá¨‰Ô¼èÇ—WŽ^q1ý.¨Ÿ CÌUÇ@Dœ.ˆÕH¡ïq	P£Iíõëæ:ô_½ÞªAÚZ N®6[·-5Q[.Q¤ÇÍUó“{Üg•evTkßRÛ‘[Hj?ÿNd ýLPÙ.rg'¬ÝUã¨›†m”ö&ù°ÄBŠÔÎººÇ+Bm¶)XûìÂÊ
 {úÄ92°®µ[GÎÂ‹Ï=23:ó]µ ¶2 9mì*yä¡nh?Òü—5]\¿šm÷rÓ«i/tgd¯ÉÂC$cÏ•CFÖ<HëcÔš6|ñâ¼&gÍ3Öö
á#Sm¯P‘€µ¦8È¨F¬1ûÏÓº g&CµÐX*T¨Po›þû¿ÿM¸Ðšà®Ájï½gùÆŠ‰=z‡0È”¶â)¢ 1ØÐ^Ê0«+NÎH}«%d¿ÿKÒ8À–&RkFeC]ü‘Ãª‰4±eèfmiÐ€…—Ñ.ž[¢?Nê¸>êÇƒs°fC¯}ÅÙÑ¦«ƒ„Òú³`·YÍ#s±±]RîáR#ÆÑ›zÚ¨œŒviD[!—ÅYc/Ûã”t°ÆÑT!Žç¦ÝÙk•üêåÕÊÝËmU…º
Öð‚€µ#~õ’ªÄdrLs±	×‹F\U9k:+ÕtH'%Òˆ(-KrÌù æHZi [²Ò€y–š[ssÂ®€OÛÞ†ŽŸ^¹ð!ÉßöFáFÓ°ÍZ3Õ”àßgmgIÍÈfÅjE<µQú»Òª†Ìc+¸V9ÑÚH2}?ËæJyöäÉ%Ë…Œ
CmÀ€~¬™åŸ¶æ*³óóØñZüf}néÅR‘ÅëÓß1¯¸UÇ¡m~âÈ§8lÿøÇ= “s«Ö¼C¶Ö‚í®ÑÍ²qîør‚Jh¤mhå® :j#êŸ“\~á£#$U|…ÍÆÇvìê„×Î–‘Ë6åúÙvÍÖ~_ôÖ­ZÉ –¤Óyc±[0Ç}X³ŒÉÙ%t¿ ó½9jØX`Iˆ£ÃL9Ã’ñ™ƒÆÚŸ€À+Óïƒê‹ž¤ÁbCmGìñ“7j€Áù¡cßßýÅ÷ƒŠÆ‹òÊX ±Ÿ·¥oëpH³ç{øM÷Ð¸Ïi°Y÷¸¯ŽÜ6©9P»ú²†F”(â¿FSõã2šO³ß›Oï=Õˆ›‚5:Õ^×W+­õÊ‘Ç½Ëõ×­ÇG`µWÍëª!F¢2Á™	sM[º¹”þˆtÕŽ^QžÁš [°ãqŽö0ž½äþ ²#\ä®ÏjÌÁ¾ÅÞ-Çjû šÓnMÒŠ°>ÆäÆ†±áˆÚ(ƒãÄ¦~­Ý>uê¹ý|O–AL¿…Ý8ó¯ÚsÚ®~ü“ŸIòfR³ovÖ‚@HÍ›VÇ¦½.ˆ3€55ë Ö´Ãû(Z³%{Am$‰ÑI`ÍšÖöáÿHíÆ½ÇÑØÁCÑ4«ÍÐ³6ûçÙiK‚üË3nî|LÃãEB…
*ÔÛi­éb²¿/ú°FÊˆ)–œ¡
2«a|Å4ÎÑZ½ký„Œ kd{Lomµ4rmïPÈ«­áZÔº2ÝiZÖÖ ¨.‰íÄa6YY¦¿j a6G*…?=è¥BÂj$’°8–¦ðtËå˜¶Æ"1”rÄ%èŠ¥ØÐ$;jž\³:È”hÌ/aŒÇÜ, ?‘ÈÈDóöcêVÓqGk [ž'dØ¢ ¥P\‰pÙX<kÐ·º:“ý®Q©¶¯­2½W°cÜºuû6°F äÑ+/år™é3Æ3™\7àD\?…œ¼` ±ÐXìˆÓˆ›eç7ìqë³ZÆb³ÐÚR}ëÁúøc©ö60pMs+4®ñwz‘Æ5ÑÚ”ÞŠ\vÊ¦•—¦&Ë|$^s«t-M$‰ÀZ-ŸTTdEÙ¡"µûêeKç5]Ma²Õ˜«äåEl±òÿõ¬Rž]¨Þx27@¾x±ÎO…Á¶Õ˜~²Õf8Ÿ¸R°FIÛ‹yc¡§s0Í¹ºH‰’HSÛL6ˆd³v6W	´ÑÖ„>‘\q¤~ÙO9ëWx¤5üXmdÏ0F[,IµÔX>+f¤#Ë!÷µ¹k÷1ÞDmÐ‰—z³K§õ¶csœ…“Áš3ça5W*)Vs°öGQ—kosÒš–3Ï½²=wŒ°u‚÷ gnåî³çß«gv§UðhT(¸ÒAw'?Ç]9PÜboè¼j#‹¿÷¤€Çx¨¢V´¯k@cöÙÏeöÀ5aS·0m[<Gm¢\¦vMºr’Þ¬ÀS“7"‰ÕÚÚ6(ëžfôÕ·æêJ€´¡j˜³OqÑ*íV£·w­õªõøèÑµ[«ß:ó­š·‰¼Ž)c5óÙœÁãÈESè‡ÚV‘(dòç¬öjX«9ÝyÎìêç€Ú¾¬æ€é—°æ²ù‚úŸ}è¡Û‚5"RU$ª×é`íÜ9þˆqâ,ñýŸ³ìhV³Í`Ën‚76¼í ø‘Mnf°±ÚßTó½µ	×¸˜=ôGŒ³IA€‹óÕôæ¸X\ö¡ñP‡imÆjeûËSSS»XíÃ]á"Êì¯´®3›,,Æaë:ƒ°Ö¦UiU.¶¿"V{Æ‹„
*T¨·ÍZû·NZ{fóÖ`5û?ÚL’Ur&š$]ä‘ÚÔ’Äà+bÈˆ²mg°6S™nñggÙ­¶!
´fæÚnZÃY?|øwCý°^?øe¨¦ŠG—5rxPt«kmqì4öŠ…$ã_ÑÿýC°Ú!è-‘;Æe0Í3qÍXô§A7 Ívü2Hg´AlJó×aÄ‡¼§¥4e›sø~¯‡-	’™RÐd0#ŒÅêb“’ÙT,…ØKÑ×•g3yÌµµJ,53[i)X{€5ð9‡Ö=¶Bì¶þX.'á*þÚX<)^Ó2O-b%BN@†'5ç#¿ŸFÂ3pCìÍÌÞ$_d¡ú`qq½±0‡Ô ¦Æ5¬¨'VVHAÿ«hmblR¾Àv)7Å§‰ÝÐIô¤ºÍ$–ôÓ ´|ºx$ÃHÌcœœæØÉJ@\ºTücÑ+Œ§%!4ÚÉÓ¿Æ+4y#V˜¬Ìäo,//WªóK›K•êâf}«©n¼ÞÜªS¸6G}äü{ëëMk`[x ÊägoÊgsúÒ¥û·¬“Mñ#^3âdÞ Í	b;~­XG›Åý3<˜,L?í_/'\ '#¯:2ë«€|t3xË¹m¶¨]¼¶á·—¬pò·Ýâ¶]Ãñ·¶:ºÞn3ùe‘,T"ù[a_9au½Ïy¬öGÏhÃ3íŒŸ4AZ™ï=ûÍŽ±8–ÑW.r”DK—›bÏæ[{kï+ót-»óEíúáv¼È“ ¾íÂN[ê°rc·»À€¶£âq¦ýsÓ¸§MØ,µ±C‡ú¾rÓÔŒ®Ï® j’PíRÿb[#ÕLO›¸÷‹/6\äj5V¯W‚Ý þqµ}ýÈQþfñø1æ´d°æ²Uµ9âòû%gI{8wE¶;ÕvÆõû®Z_¬ÐË¦sÙ<uÎX‹©rVcqçÄ»·Öž?çjD³?¬¡ŽžØ¨]±=de°Fª•Aª£ïöÏ?c=¢S‚5y÷”[žš»hìˆÛrÚÄV“žï3û¨	Žì«^7Û|5]FŒ‰ÍÙô^gçiêæÙhÒˆá˜:9¿Mo«¿ß7¥³@54¬á"AäjïõvoTÿþwÅ(N ×fT¹6óõôÚ‰Ö¸úeËad¨P¡B…z3FþàšÉ‹„„ÖnÌ˜Œ×b]àMk]„÷wÅcdC¦à6ymB5›€ÖõÞvÉÖ=x­µÚÞ32ðÖÆÉéNdJLm£;Ð_††®äñ°|¶!4˜V$|E«Z
.`º¡\V‘Ž]vÉÿOë©0—9h\ìò¤ º‘;¬ßÅ¶t¨Í1v²ŠåÎ"g­E:¢ùiÎrÉc¢yÉ‘œ]¤,è×	pË`@Ye$÷_·"Hwkè6´Bp
&XCClÌìµal4K1"³Õ€¶"&Á™ECÆyØ„ôê‘N<h¶Rm4°×æª•ÔB*R}k^Ç¶Ó6­e§œ=¦JÝãz?J…lÙ	ÉÓÓ5šËÃ\ÐQi,’Åš`-§Ü‘¥M™ï,G­œ%z&ß—,EF
µ‰þ¹BùÆdÉ˜¦QaÖ=[ßÚª4ê¯_-T·pE6ëÕÈÍùKxiuÐ­¬:Ò¢"’ëüú–|6¿j#¥…/m„öeñ§1›/PØé–ß>Åx9¤¸bôŠ[Ú?r!Œzõ‡I!‰Ê(ï+ÛÉng¦½ñç{ºbJƒ%R4‘-jð›–žÞßO,Ã‰×¤q»ùà"/ÍoysØÃôþ;Bßog”€qÅûZ}¡é·ÚÐá"Ío3mC›=¬ø>ü¥Î8}YRlð•æ°'l,ÕØtòQï{'ã³ñšœ6xhãçe¹!÷eÌ6+Âo|ùb·vöÒ¥Jóª©jccÃ|ù¸™gDíª<µ•çêF€[N?â]·‘j€šKm’V§Õ7-]¤Þ~Rm7ÕëkœË{°Vñ mDWÿ
ìñ·¹´©´˜…máB	ŠÉû‹áZ ÖÒÎXÛƒÕà4þ:B$Sê<çÉ·\%äžŒæ6v³š–¾€5éŠ“¥@^¬±¾àXíö¹\dê¹S×ÈO½%X¾JGé£¿ÝÑ½Ö	lÈì5· Û>eB¹¼ÁXšÖì_1½¨¬9sû«¹kA5¤º3j°ÆÕŽ[Óc‡±¶g¤š¨WWï5f£úþŠ“9;k-k_kkj•
7PÍôïÿã¿…
*T¨Po•°Ö­ã±Ýdl7Û)æjS–)?ÐEˆ<‰Æi°Œcå‰Õf»údËâØÛpÊž1#ƒRÈÚx­TPË[æ°‚ù€h¿;<D¸cÿ :œ TŸU?«´™l©D:£¢Iðæ5DcfX*•¬ƒÍ”Æ/¨ËÆía…”¬5äŽ‹<4_2Ø(bÆb[¤’  [ªg§Töhì‹™­èäpJq‰n”L¦êã‘³3ÑÇí6±×ŒZ‘k+¿ùNÀÌZCœ¸²(GÁ3?ÿìˆ+xìŠÍ4wÄºjX°ïN'k¾"³7¿™­¬ÏÍ5*6oM´Þ8\S)$Øbk|»Ikæ¨•ÆM¼6Éo¦˜Êl˜\–¯Å@S ë¬P«©ô±8Êt.f°©F2Ëˆ3µöeK”ÅƒË§55²eÁ<ñu‘ÐÛ“ÊLƒÓkF+V„ÁkBH^Ìá©ýÔd
[“|?î¥¯­ÿmÝHžRUKôŸ•FÞC-ãOtÙÔVm¤ëic¼UC³éµ>ŽÕðÉ‰ÓØ™#ÚÎ~è ŸäEÙô÷9QëëÈ«dõ’ˆ¶*® ÛOò†à7^ÂÜu—jÇq—À8øí·EŸÞ¸	o<K”:Q§hôëºï=0=ºã°xfX^ì³®uëkéæa!ßÀöˆ©¬È±Ù)°,‡ŒjÆu1Z#Ì1øŠEmt×~ÒØ DÄÇ4àÊ5¨M >öœ<¼äMxˆ¥¦Œþ Zxç5ý¡}y;¨Ÿœ~IIý^dÂYÖšpýF½¡ÓþµÕ§­5V½Nòm"=’\³5šÌ±Ñ\lßå±¥oôt’›=¼œÓÙÍ5í³Z,éd5>›¶˜Ÿ'µŸÌþV{ûiB¡`k¦}ëo\¹‚›&Ps¡lŸ%ûZ³®¾ŸoªÉTã'ÀAWÓêd4Ô™Ô¿ÓvÛ>ì÷¬¡ Ø:Ñìÿ!
Ò7Öžéb	#žŸÉÊB1pQl¿äÁ¸C‘þAÃ`{øŒÑÚÎ"ÈÝ¬F!u{¹}¯U‰ªîP°vpÑ¯6k3ÖTîo°¦È0^$T¨P¡B½Å#;K!]|?¬f´öÞ™ØÌ»¤`8X‹Ç™b•L‚jbñ.Kˆ<pðÐ{Ëé®é¶¦c#%°ïn\›èl\“èw‹wÎõÖ†Äg‰~m9%ú¬–ö6(ÊÁ\&3%{’}JoäÀPoO=k½–Ë¤Ë¥qÖÐ¡@Që˜‡'9óŒ°òG0Ê”Ìïóš×¼[ŠoÆ]J–ó•²²¹ÔvˆS}¬¶
ùõÕjµ­Èë³ÃÖ»Ÿ{´vfÀàÂZÃX@ØjB¶á' ÛE>ÖŽ0"ÛjƒÌÌq¦ã¸Ôè	åÆDEÙ­4•JJº'²‘+~tê¶Gk/¯N€ˆ7_Ìô^í¼–®ÊpJA“¤òôžõ•G1ÐŠE`-¦£ùä–+h‚6CÙÎó’$NÃRÔój¥¨ÕQ–%íçáhh$2¹œ×_×HÖ®.o½nV¦×_ÌÍmn<Yß|½AàH‹“ð'óB²¾NàŸAÝSåEÎ-6ç·Í‰Ø`6$n±¡»µý º0EœÒk~¢cBÛ‡NŸjÄ°¨í¡i›x¥>¤É‚ÃcFocà41à›¤ÍÉ3¼€ˆÏIÆwßJ¤–LQ<	œp	Fq«ê—[Ç˜€ Üü5ì&xcáë—[÷‹¶¥Gr5À}<ØÌ3ÞL=ÄaUð­j9l1=ýþyÿil§óà8×@VÙÙ›÷-43Ð¸*@%iüÞfAÊ¹åµ‘Y}F…¦¯”à®—_­…Ÿ–A
=X®OPC²P™¾§H½÷«mX $ ­Í-`¿ÖùØ4×—g×`±ÙVë±Ë~ôa@l¦›0"‚±B¬u³Þ)¿=M›>¿!H-ÍòÛêýÌ¹xíïX-€µâ4k:pëŽ!ß$ß3JÓâSGlWt@sÄf‘xk¿ùôÓþùÇÏ~þZ³"Hâ2Ek×>~âÄ·¬XÆ28d»¯éº½z®•-´÷Ë@[ì®Š|sËšËÛÔ&òÞoí÷êŠÍœó¦-O†Õ§´Ùj*ÆXãÏ%{³°„ö·VùÇ°]9xh€.7þÿð(6#Áj»f¬-ÿXsûC…
*ÔÛš1­ýý?wÖAú•Šïg*°63£DÈâ–þØïb!¡5ÒFbävt½Ó•œùøãéøt£Ñv)#^ÌÈ5ÑÚ^kÂµ¬bóGÓÆj	Íê ©‹ÔÊMÈ†æ†Ò‡©{”2?Â}ª{ÄpÓhæ¤eí§p”å„ÄÓª‰Šw1Ïf7¿ë?Ô!8-ÅÀk=‹G8Å³ð›Å»c×q09ÔŸ‰³>q/¡%élJçjùv‘W‰ß‡âóÌ¶TH„Y•HäcõÝ\óaí4Ä ¬™³f]kWÇºÆ®W‡·O\H´³“Få‹HÚÑžª€p‘^
&Ô|Ù‰¥õ°­U*7+šK¢5—áOŒžü'oâÚgJ…5.¢É¬Þ¬«g°Jk%ÐŽíË³„Ðjðã°ÓÉXº•õ)=2Y(}}y8-©ìÿ,Za´d±'e¼·B¬Ì¤0p_,ÏÇZ['OÖ5;òqu«Ù`ÛÜ»˜#õF…ò¶y"±Ú6–šõ¹¥ÍWÂµ&ƒ´á·§VÙ¤Nù#®¡íK¬Cé²rþ]¿GZS›<‡[wÔÕæh;½=¢í‚W)S‡úH_@//KUÍyA›ˆ è%£ôNñ!ÆqËMÀlp-rîÛ™¬ìJŠ'Düét©dôVºXÚŽ,1‹²1É‚áö—hÉ'=°Ž3nÓQ®ˆCVr¹£_N«Ž·¸ê^£I¦Wä¡™pµ/žïtI7TìûÅâùhÜÔî‡—&7-Kdrixíxx!	és( ôòD µÓ¤)ŠÓ0Õ<WµpSÛ-Þs½ÿ²Ó6ðeY½nU[ä@6ªÕjõzcþA£:;ÒÓ[y¼Æ”––Š[cÅŽ3m¢™ŒÇ€ oÏ•œËÆbÙP²;Ëë]Kw#‹qÖ:}5¢‘ûV»sçÁÂðéùl¶û€‰5”ˆf5ît öRŒàÛO öóm®?¸†5ùÉÌZ#2ã0OÁ·ô=7Ö­¡ÙµÞþ?g¬¨ù-kB3GÇ¼¼Üí²å…‡°åK&›]¹yðíÌ6k“g4qÄôËp‘Îk×ÚÕJWW_ËÆ¸Ä’ï›µ¶Fd k®[-4ÖB…
*ÔÛl­‰Ôl±³k1›ë»B6…Œt=êzôÎZ×úãÑdêÀ;t¯u)pÄê!å_Å¦ÛMEBz¡û7®]¢’©Wã5±á"H9æŸ +2!VSÞˆÚÒÖ]JIP÷8šî×<ì\>	ŽÉÞb)ó‹†+ÒF–Y<Ã 6¿Ò:ËX;qß`¦Ÿ/‘’Fà·`n6½¨HE@Æ³n®š'YNY5qE­s£H‰Õ¬­~y¹òÍêonV«ÀÚ?õ2­Ê¹räd`­©Ó£Vk ±–œ¹˜ÅÆŽÌµddàˆØ{,$˜µf‚Û¼ù`IÖ 6ÑZË÷8}Z»B¿–5®©é£dgÚ—¼“òÉléÒãµ~Yo²t)§jIÐDŠ#‰†½?êb‹dÓdõcšÅÒ£™<3ÚàWÂFòÆØpôÀÁoå,—-2|9§•?«Ô_µ*³7+­:çÝK‹,_+róuc:ÈÍóåõ%
ÝÖëÐ§êK˜l&­±×l,Û?ÔÏÖÒ/ˆÏæ°Ž!„Û&Xã%§:R¯ºÚ¬¾î#QÛ¹ã§‰ šI\'…äS¨-),g©Ìã4yäOg¡7éˆºÜhöˆ„ám‹R
vSÜ˜	 ÄóÁÊoeYo ›&óÉkË¦
éR&˜Ðí©V3vDOT BÅ½4¾mÎ‰º:øŽ{Æ%Ë.!6<¤*t³@ö|Vú.2ÚØß–mzˆ¼/°·ÀÐKˆâN_bÏ‹Û*Ù¢ä¼4CU	û‘JÒƒ Í°€WW1BŽ”’¡Ã·NAÕž§vÙ+`ƒÅ±ÔZx±Ó·aÅ­­vk‹™ó:ÕŽ~·¦ùµV}¡zTÿõˆÏ$3s<Xó7ß,zÄoÆºÓ "­¶»’z¾˜K¬IÇd¬ÉBXX»ƒœ«fœ¦ë]U?ž¸sb/Ì,í™2²«òŠR ™;çl5‘ŸEj kÝ}rÖnŸcÝ?ÁÜÏÏœ¦e°ù¼3±±·³ÆMÈ¦Í=¬µ`Éê×mµ‡A¶W.~¿Z‡µ„@n+â¼6Ö‚HHVþlVªB Ò*lw5¬ý2²Õ¾þød/i»˜q–1õ.³h¬an5«tâÿy¡±*T¨P¡ÞrkÍ3×Ð.\Õ¸@jÌ¦!ü‘ÜÆw0qMyluÑÂ¦ø~é È*>C"dkë)2omßùØ"„ýQ…ƒ©B?kk¿#21”8ÀšG£µÄPXËN¨,RJåF‡É[ÇÖÃ|Û¶Ç¨_Ëâ/o-q£í7s-Æ¨´lâP k©DŠpÉ¸¬!÷˜ž¤­–™™°ì|Ø%/0†ñÆ
x38£OM™ýñˆS[æóí/W¿éùxöãêB{õ²ÑZÐµöçªGBkz5„¯°ÚéýÀYtO€µ,´“¬ùjòÔ 7Nu@v	·Ùy%Ki‡ËÖ[]ÄWÖæiÿræZ«ÓãT†ÿW‘¾±1k\+éPc•¦ÿoL5ÚXd“ãd–jYˆáåÓ£y˜ëóÂýGóÊ¤¤ò~1§ZHµ¦åug]_åX´œ-dá<ž(XË&•R2ÛxýªE½¦(mm(†½¹5ßüÉ‚G—'óÅ¹õŸ^¿n5Ö?5—˜Ã¶¡8ÖêüzÍ&xõ5çøE[Aj$œ’FzYN›ÿßµn6s!yîÖ‰SÞŒ6¥˜>p‚~DP&yšÀuã
»!Á6mœ´²I‘ÇW#_ÙKþ•Ù¤–Zr(zUŠ¥°ßÊcà["kÚ.™L# M®Û6øH¹ŽYorªt-êÆ•×K©åotû¨ÛƒÚÑBpeKv{n_bao».Úä©Úc‡ÒwÔÏqLÏpþ`¡””æ:3…}6ÉBbËª–Ë˜ccc}H©'-#CéüÖ¢¦0Ã•s
‚ÁÿT»3œ¥f§ÙÒÓ§ü­A˜Î‡äÅ‹MÁÚÓ0\õªÚ©®V+ó£µë-UAšzz¼@A;ï7<ÓZ}k=˜nØÒFl~¢¿|4©3Ež‹ÓÃÞH2ÚÛW(÷æyìõØÕ|RC8j`à³Ïðë`×›º‚„gjZœµá*á½ð£XÍ¤?Aœ=¬}~íóomv€~ÜØ‡ÔÜn`¬±¶EÛï“KwEoHð³³·¹p‘‡ÁŒq–ÉÔ]¨Ã‚5“C8Ã3Û¶±Ø›Àš|µ3M{‡‹Ö®¯­^Ç‘K&m¶zRñÕf-
ò¿©ØcÖÂŽµP¡B…
õVKñý¢5-œ\ÈÈ´ÁšpMbÚµx`$@â©$’Íx_TÔWî¢ÀêÑLµºÜª×å}×~­Ò
¬2]©BÉU>r#2î÷`­Ÿ¦5S<ÝÏ”µ(¥yh”ArH³ÓR.–_Æd‘>†3ñƒ¦CIÎl2ßYc…Ÿ–ù–µc=\ÔÂ–r8GKÒf,…–‘–¢{MX6;ƒ]ä`æµlþP$í«Ü­šÏVikzÐv $Øú×‡8¹WikZÃœ!Szxâê€ëç8*<³ü‹‰ä&µ\â6Ýoò:rÄmß4Ö98Í`™ùdïƒ’DkDøoÒY¾gªÔ
%ÂE°Ä ®¾ÒxÖ‚°F({Ìö
¼–£q*‹1^-]fÍŽbÔà¼é»k™ä~’!Ù(ÕJy,6ê'KeÒ2ÝÀíÕ×ÍÕµ$°VoZü:á~€Y¥²N.;®Ú“g\Ÿ}½üzãÕÆúòòâú³Æ&>Û+¸Vs“:(ê¼¶ºjä\Ð¿ŸÙÒ£íÁå/m:›@™êHHÀÒþýØH¤!m
!qúÄ	Š€g¥•••Á}Êbº«Ü  YoH §Äyg½iÛ4À9'æ4½:Œß††ù0Åc¢¶üŽ)Lë¼uè˜À’µ/‘œ.&ÁW°vÂöBî`àxÁX+Û“Ø¨Õr<ª”Ó#uÁWõ¤ÇðPj™NkÚé˜žø¦²v¢Lã¤AÚÄä˜YP<6Æ r~ýáHÄšÓÔžöéYÊÔfý§Ìí”%¤B’bÚ_JŠ …ÂÍSm¾RDÿ&7Ö4;6+³½«õ{ßÝäãÞfüCEÃã×›æœîÞmáûxQs×Žx°fìÀ-(Îs´æC‚2¢Qa·BÍ*‚,¨Ò†ªð3û¬I8¼·@™7VvQÐ³Ðš>[fìÚÌ¥÷ì^À’DÌW³2_-~øÃçgÏž»uN_á¹Ol”é]¥5¦çºi(vpuâØîø~Ó¯EA>Ü1b´ÆÍ» ÙlN>™99ô¨?÷y3Ö„mþ.’­æûj=\„ÿû¬®é©ÃQƒ5Ý.2ƒkÚïúÕžY$·p v¨P¡B…z«ãû]ÛZ'®	Ö¦=Z‹AkÊ€ìz„"–8ðè‘ýxkÊÁÚòF[ÏT·ê(˜½W)äÔ”£5T“©K­N; ¬N˜[×Ÿ¢~ëÇS|µþCúf³¥¸?Ë¥*GfS<È_ñãƒkCÜGŸZÜò <°®' 53×À·ˆ6Åjf~ÄÙSõ£N¨Ù–âý™´ÁZÌýÝ>F2IÁ|5¤ULk‰®1‰½žÈÍÙé›»D÷;ƒ1 5•"*Ð¢û»âkùq•óŠ«ØkÖ¤vÄÇŽŒ°ö¥ºH¿ù¦×ÒF¶O,·a­÷fµÂ´×†HMÛb'­ýX­Töíˆç´¸û£d<*Ÿ®(ÊÉr¶T+”³¦¦.60£–kôd}¢/áY	X³	Ùù¤~€¨Ý\€ílJfÁ’]kådL•’•vcµŸml1h­E ß+…/Gªëó¯ëËËs›Íúr>{c}ãÕëúß§—ÀÚ“0ÚFý»™F“øÈj›’%ª$[Lð"#7L¶y°Í¬DŽœàl¶ÖÈ†þ Y‰¯S§ ¶SÖ¦«Í¤Ð_'>¡ÅÍ	n»`æÛÊgYZ¹¤qÛÃ?±¹iç¯ÒP$Žãµå4ûä5hÑ›8Ð£Èà—)†~9$ ÃÕWš[°Í±¶Jâ&ã§œÖÚgÇn™ŒÛIgJ!+¡7§3B-µØ)MñŸT	†ÎyL™I¶;ÅU+¾QÆ?à¤óÍ4‡«IÎ™Bøe¡“3Ìu¸ÏÄ§“_üÊI|!ü'DÕ£dŒyî4Y"œW. ¿-¬n=h¹êG‘š´¹¸(ßÀY«ãÂ.i§‡Vmµ4[…´Xjà%n=‘ÙµYýi ‘<³ÌÖVÉ•»liÛ( =Ê¶´-š ø7SŽòËE£Ù¨&YÃZÀj¨_Í/4Rã6'Z»‹³¶¢ˆ-$ ÍßRÏšv?ñéíáÈ^E‘ÚË]ŠéèCŠw‰cAÇùè
ÔtãõÄaã#­gŠ×dëÌ„.Žá¼›´}Lµ£nìîk©9:C³æÔË~ +Hu²·ÈOëg%ù}kÞJ6Ÿ3¥ŒzÖöa5Å‹¬	ÕÈ}Ô¸öÎøÚfµ¿<ãúw?¶y9ˆ*T¨P¡ÞÖBÈ¿9íd5`Í$Z“¹ö‘"êZ‹c¤X
Õ4s‚È²¢"ùnïâ¬5·\ßZkw)äÞ©ÝÝ™ÚE|²ùeªa§õ+p„,H›³&M£Ü\êûÀƒ9J¥s9ò€¾XÂ:ßr)NoÅp”@bË©eÁJ‘­â˜mYÏK‹§ÁZ¿îÜ©q-æ•Bšÿ‘–¥bÂ2XpÓžo¥IŠãÈ÷$y‘XSaà°†\È‡Áš£µ‘^ÍOŒÅÆ 5KæÌRÅîÔñ[‚5Ž(´ßÎ$°±½ÃêËaWb“m‰n°µd9vZCÞš°ù¶ÒñãÛ©|_ŸÖ¤qõ1i¦1Áý:ÔjÉ<o¡#I\4JUÓHÎ9#DüçÓYE‰0>¥E<]õ»‰Ô’pmRF›ž”¥{-–×º‘Ùµµjo¾Xk³kf]–I;:R›ƒÜêÕ'õW?=Yn(˜ý§ÿ˜nÖ_Ì5Öù=67gbÓë‹™èuûÕÈ'in4·æ¶;ÚêÒäT]gù§÷æš÷`6çtXx¤÷6ÜÅfcáCgw¼-Ú¸CNÄ)s* 	Á“ºIŸèfútc…µAÚü
Cœ/È‚C^È¤›pœSŒWEºbá½=‘`J Êw*ûFet+ ö	µUÃèÊNNÚ› yÕˆró&ÇÊ“Ò™	X+¯û¸Ù×*`Š¡©ÂTÆÉ†¥;ñõ|¥Äe}yRE¯FÕ°×GÍ'k,âá¯”³îœ´ˆ¹@² #¹´â§&¬ï8tìR¯Mj¼EóÐŽúÔšx§6SÏu‰êGUÊn(óqqlšUþ\±Úl¯¶–{«{˜¯ðÉ—Ç,X#]ÄæW_št¢±f—+w#ƒ5“ùf¾Ç&y°fGòØÅàY‰‹*Fw°Z$`µÎH'6î>öbß¬³R°eÄö­âQ$V{	©ù´ö™îÿ}ðÚPìSß~{áwšdjÜ‚rH_îaZx;{*øØØ×Ì^&¬=ÔÕÛë°.#Þ+Ž\y·k¨×:°/âÝ1vñ¢ÁÚ^¬öQ§¯Öº×^ã™ÃÉƒV¬Ï4lÏV[›™6¹HBû·ë —Cc-T¨P¡B½­#ÿæYk{ÇÖ¾ÞöÖâØj1ildCb¯‰ÒØc?®kÀÚ;f*D³×U
¹ÕjýJ)äÄ.Z#‰ÓDˆ .t9£í0†Û ØvAUCéL¿*µ'd¥R)ÊÁ,c9KS'	ªYÄƒp ³=NM+I%‡²¼7¶ûqËHIÁ<ÀUzeã>«Ø‰1H3å$$c— Ý<QA™¥¢-K1%Ç|X»YÖLjÉ¹vJ°æg2b½H”É)ZPšˆ›9X³sN(3Œ6u®õê¾Þ¾$1ÿÙýÁŸ®×ª•™X~fY’å…ø»ÆµËDn¸œ‘–3â—B2Rššœâ­°È$Œà»Œ~ñÅTi¼¨AØðY©6ZËàÅP$©PÈ$µ\6™Ï«ÈÙkÄ^®¦¹j•] "n‹dG5ËúWue9"¢¤ŠRçjlU·€µ­µJu}i³ùÓÆFµ²UWoUëÏ¾~òêõÒÜâ‹%>¾x23ö„!r«­­Å/^Ô·Ï¬Ía nZRd½¾4·P‰6Ù~ª¤™m’5A°i¤¶Mh“¬úN">R=S|FÝD<M §JIL7ÉÀÿíøq­”RB€áiâbìÝ$eò´–Ÿ)dÒ—ç½YÛÛPÇœ€êó$tK²Ø[y®ºàRæ5Ü-³¸P™"DO±1M ®ÆúÀ,6œ†cNñVX¾\.OH“ÛœÞY&7÷mÍÆ("S’£nÖ&iD5OâþX¡ÞIãŠ?9ÅFãwÿ  ‘p&™wwë †,¡óâ5¿,yƒ¯çù˜‚jK­n•z›››l4¯µ6ª³íVeMC1Ú,"Óv£ŠÑ&WÍùi†b‘ýõ	½8¦-ÖGtCEÁ¾žÇ»QÈÂRÊÂl«|VÛ5_mÁ‡µ¹>5:F×Úþêœ„í¯¡´n¾¼âÇ“W\|¿6cVûùöéã6=\ÎÚ?8uê[žµ=?ñ< 5‰]-é^ëÌ‡ìÀD»]k¶½G	ä.öüuJã*Ëß6­‘±@¶¥ë9#Íë"ÔÖ¶·Æ¾·ÍM´†¯ÕÐ¯±Ú‚¦Ç{Õe¾Zœ1¡3ÃÃ³š‡Mäô×Û´öw`Í´Ì%4ÖB…
*Ô[ž1òŸ~‚0Û9kª…­AeÐYÅbÊ¡’]ÛI)R<Å’Õ£'ë[„@4[÷:K!÷3×#^#c-¬02¤ÑØŠ4I,âØŒ%¸öâ bŠµ4˜†£p»
9kRík]³Ý8dòF`Û(í~l5åŽÖà4p‹Ýlœ{!‹TŠ{Õxz6/8S9_Nx–'1¥HH3ß<Xû¿ìMh›wÚîÎúe8ËIñÎx%°FT$ÜEAÒl”Î˜£&xÑùp•Î@:iì§LKJ’i><“”ÖI‹PšÚ©ÔÄÅ™8ÁUêN|ÞèU)Âž’Tj{b0˜9/œßuÿŸ'í:n—-è’žO}Œ-¹ÃóËuß×æ"8›Î²yÚ·rSÖæOÿéS§¹Ž€”¼:È£Þ`lEÁŸc€‚àÖ(€ô&«Agòœ&DƒãÖ8ÙßïæH	x6Çª—®jd™ÑšCºïÈSú˜|Ç÷ðÒ€Ãæbü†t_…ÝGFpÎžÍ•Ïv[+T~„OQÐ5Â ìr2¡åF 48N²A9ÁZ6âa.hñÓBcÙ¡0F%e¦œÌÆ1à2Ð®à‚Tp%Tª.U‹CÕåJ³67>õ@ðUm¯¢åê™j¡Z³”8ý Õº3Wç7y°X+Õ›ÖÄ´ÉéŽÇr…?7r(®÷Ý®ÍÚŒ6I 
 à´=‰ú÷|6úŠœI£ÿf‘Äým‡m£) qG^ ¦Äôšh|ÜØp€ã/úºÇŸ:ö›?ŽÛè¯É“£6@gèûêçîß¿#õöút‡ŒïúUà…Þdã=¨”þ,1òt¬Í +Ö}†)=*Ê$	…—Á9F-
ê¬\óMrRúMz›>½ú¤D´Š¯cJ¿8Æß¿Ò1¶˜‰ü†Ï;'kg¸Õ«"…l¡4}f¯">Kïn\¦ôQß…wn¥ÓÍå
XÎý’gøâå·.V·‹æ|ha¡ïv¥],.]-PóHá#©ÐÀÐÀBQXÖã2úYÉ™6BãòˆÀýö¶’ÖÚ^CáLf,œ£¶4›²ØL?\ä)ýj>ª	Ö.íÚuIçØnÐf¦ÕÆIØ¯ÆÆû}gMä¶Ë
nÿ€”/B-©pí”VJ‚üøÈç¯®óÔü=ÿeC$‡>›qrý„µ-Ë ·˜°Öç°M¸fáŽìxü )øbÖTãèBê;âŒXâuúÜkç/økO°vñÏ„·$G­Q	é`mA¬†Àµ;¬Q9×éXë¨£Ž:êè'Ÿ1«´†<Z÷RFH=Ÿ	#gÀgÄB
ÖÈÙ
áÏ‘õ˜™~õÜÎjMkW$W
ù4s-ÀµT¦;9¸7?,XÃNS ¿{Çg‰†D;Œ`Û›b5¸½§k;ÞZ” ÈMjŠÛ'Äi™L,Ì%b´–4H@áÉiÁf/¶›%£²ÍÒ‘ œÔƒ³fé›c5ÎX„Ø-mog'][‘Îk×Â4ÎÅãlÓš
¥yd+Ýn¾xºÑ˜?% Xk­¹ÁØß½ÿæ‰¨¾ë
í·éB– É]9V dÐÆ±«âR°Hû^:$§ â:–/iâb±4ÅÅ.f¦'kÞè;j ¹¸óbNŽíÂ0á6(…´Æ5eºk(rwº@³½…ÇðÅÆˆ~,ÓŸ–„ÉFÊ`[ÎòCx„pËÐ½ÆÉ”h-W·š¹r`ÚPˆjÉ,4—Ûå2@"aÐñó††Jt¨Íä"EÙtµÁz»J1¤ü•J½®K÷6—Uìðø*%p‹¹Õœžl®Ö¦ùí*°Z»Òl–æ+«šÍéYÍKnÔ•)Óíßº;`ÃcÔšZ5ZŸDnA‰$Y$ˆö)—!éÄ>.—†!_æ hRì&q¬Ö7ß€C—›<ðÎà4ÛÍdcþxšñõ—µú`k¹®ÅFºƒ¤Lx¸gïÁêÚóu)D¯ý ß#xŸ=ïKz¡Á‹Ì;Ã[îá}L\”Ÿ4ý›Ð‰BÏ£È¹‡
^ñ£4ïÑÙg=~÷øÅ9]Âñ0©äÔ<Ì†+}ãØ—¡PÏóôÔ‰hˆfxî4=	µÕªK¥F‰«öB©Võ•Jf£õqÝí8lýj’WlÄÆÝKí·Ý@:¤]Î!™ÑÑL²;îO{¬–YËj	|µ ÕLXØï^?Í€µ«›8k"£§¢Z l_Ä×Ç‚¾þâkX#œ(ÁÿåRO
­ÑjyD‰§ø×ƒËïÚ«;.3'M†Z@m:
ÍÇ19Hû+ŸÙ¶Öž­k ‘jÍbS¤7»-:˜Í4`
ù´†Ø„ØóaÍÖûiWsS×Åjhókf«-Wæö+Y¤X‹ƒjÜÿJhX“n®‚œëkuÔQGýô!?ÁY[W	yÇ‡5Ädìçž¨‰Ô"ÛÃ>¬mO$kô“© km‡ÙØ¯â•Üª0tmssmc,¤›öTNaé§¢®
&sð7Hè»13Õbjd£¹,:¸ûÙ(g™n$D/A+Y,5¢Æ*Æ«Å2Q«`ÌìNFº¢{ÃÜ5MEÕ¼4~d`-•üÍpºKùý<-
ƒqïRžõæX-œ§‰ÊR¸HòØ„f=	ˆP ñäŠ§"ÌÃ*Rí¤>žH±¬-4NÍ‹Öæý®µÏƒ®5ÏZûú»sTœQ’f°Ö{B—,°G¸¦Å*ºÜ’E\CnÎ"°*!†/IœWÒ‰<¶Òì4ùýHi÷·ì{ "Ñ~ŠwàJõÜ÷ðÝù´Z@ü¾µî2¦šT¦ô±ûõ³wïžÍws™Úëg“ï*Q¤œÆY+'•Ž™bÙÀ7XmXqýÊƒ$¦Ÿ¾·¤ì´41#<A•|â7‚$³îJ¯4­ÔnÏåÂ}îB¥v©tûviX«N”fÅjé335õ1U˜†¼¼ÈŸV³Ýj//Ò—7;IÙmkyqª
³1“ëÁƒÕåJûf}º©^6áÚ•ö­åšaÜJGýQÞ¿¿#‚-5n\½Ü´95Ìz3óÍsÜ´Pçv™Ò^‘¯›äÈF†½`z'ˆ›|Qƒ ·{ÜYù†[ À“hˆ›·ÙT@”mì:+û¬„SzO6’@k!‚pˆËuÇoVpçËÃc¿þþž Éè–Ý£QÏõêÝAQ‰ Ú„¦¢ùnùœ>¹zC‘;K7˜y,ÊÓ5ÊRkVšòKa´iVh±9Õn6«ÅKãòDúª7J…ž¾¡°Vtå–Ï;j,¬9ç£™N"wÈ"¦0vPo¥So<4–ÌŒÔ»îT.ã±JmÁj‚5o}Y$Œlf«mrÎ¯{ôW,¬kJïÚóµþO‚N5/¾ÿ¨•Aþñ÷‡€5PÍ¢MaàK—._úx}åcà®ÙaÀh¶ç ÌNùH[Û<Òl½u³Z_ÀkZà5o]P¨ÍÍ>}·62s]k†Ùf«iE9¬&XsÖ[¨o?¦šÇjhVCíêBuþ3Çjqj÷'$Xûø_ƒŽµ Ö:QuÔQGý
!aµu)#w¸kTŒ g‘vâ¬]ƒÖÈ€Ö®m‹†õO—Û,’5¸¦…ý¹ZséF[²—D	ÍµMf®¡TYkåfÚîÿ%.Ó;b¬ÉdÛY WbP–[*©¨
¡±XjwWOV­fjï·4îšV4ÒÆGÞ+Ç#B„©×á.œ7"çÓœC1Áš¤± l$/32–LpÚl4oè
›Æ	Ñ¥s
”Ô¹žH2“…äPxIÝn”
ÐÚ<‰äù†Ñª…Y¬µÖ€µ¯5;­½B²^oß~W:¬½$+ÍBûuÄ)m½PÁ™Ä%ŽmXëÜ]¬×KÕ“\ök•[r9¹J†Öô=¼óûïa‹|¡TÈ±úü¯ÁŒ5ôz78V>¬½^	»IØÃ£òÞÊ9Óˆ†	Ã±eMaã$0†µ–Îâ¦Ç]PVa‘ñ±,Õ”ebüÇW‚o<j¯ÎdãíSõúÔÌý;w&ªsaÁZs.T ²EÂ3í&¶Ä;V[­0òxåáJ­9KFd{¹YY\œ+ÔçîT5€Î·ÚR»IfI»-Xª¶X+ín]–•såßH9ñÜµò–·uÙ­6ª&.þLo¬é…¨áÓ›,ÑÝ2K>GòÝ 67_4ÿù¸ª%a_ÏoÔ¯ýwÝlë‰½ÍLöV¢ezÈù’„U’÷Æ¬}"â…Ç*Bw&W°É›¸·še¶òê;Ñ=6ž™Téx 4(M^rnš‰4öyúˆ¿‰ù1	«M».5n²Ô,M¤ÉÜ	a¸d€VK•æäT½ÂU»>0DÒl©§xz›¢\p€¦˜~6ö½q‡ß´éÀëRÓ-<zã(›ø¤x2×›;ˆiZ«%ÕèÀ|š¯æˆmòê¥ÒÕ«ï^/]¾´k+`¤ö5ÚbËb°¦1ØZQ‚ªrH…‹àckÿ‚‰üëó#À_Gø€1Øðt#ÅÝuÊm=Tó-ø_&¬kO˜¶õ@ì ²ßÈMÎšÙiÞ°k=`è††|yQ"O2<ì¹ì¨çWz°u‰ÕÊ ZPùT_íJƒ–ÆëÎXí¸†³6AÓš†aO8Vc¶/bbÓ1Ö:ê¨£Ž:ú©ÓÎšPM…¬5hM f°¦ŠÇ°òDz#?‚kQ¹mšQT$h%­U+$öµ„ZmÍÈµuæÚF\ÃX;‹’€ßî½ƒ1¯öÑµ¯q¸ZSe:‹Ð½6KîMF­†‘Öµ®Þ=jb§-h)(ÍF©	ºb8cQj9Œ¥ËÃ	,¶áßìNÚ£	.Ãô$¸-ñd6Gêh#¶?"øÂ_“­¦JIYÄ#Bia6qN!L';¥œH™pãó¥(†œûyXÍXõ²`mµFÕÙwïw.¡:Hbz™2d3±É³ôGÁšµØ¾+…”‹¦“.2ô¤®È6(/¼x±P(V‰ã»¦/ÂFG+gÄQ³÷S01àáäŒ¼f…¢f1sžmgíìH.?:"ºê±÷5pZ.m6YšýìPÎòûQ&¦Ä‘Èþ,EdððHÜ¹}\èÊñã™aü8‰C"HB\ K!š"#Ù3ª”öéiçïÌÅ‹5ªâ–AR)Šl—«½¡ÞñÕZq‰úÈZkåÑÝoV*TJ>®i@óæÄ&n/UZ+-8¯BA‚•E ­Zw£Ù,éŸÝvË[žþ­Õ¶Jci›é¶yÁ$Z1 ]åsDâ6¾ZË+±rwù¯øzÕc·#•zQ·¯ç¿¯uçdÝ9; •–5rOÀçl­F3î¾ðþÜ‹‘qÙä78 ß€ì•¸‡—û¥Žžùº,J“®6 [kTÝéÛž£Y#ßW_Æì4š(Íh­‚­6;YŸªWë“KFµXXªLÖ«Å}}}j7úh©R*Tmv&ÆŒ¹¾(?GÄ`ÍŽÌ†FÇó²¨‰£þø:CÃ´¨eBÙQäƒšcµ¤²E²acµ_¯Í±RNIëÉ©Ò®ëD‹\÷Ò§[@š/c#óÑü	k,Ò=z‰òGõ«é_µØúQb5¥j~þ¹>sk£üÓ©ãÇe²‘-"Uà°96óøÖÚ†ü~ïþÔaØ?~vŸl*|Dì  U-pAuˆX‡GÔ$àFkiHmG†j[³Ú­+ó…Æüg2Ö˜ÿÖ|cVó`MŒ†Ø|iËÿøEGuÔQGýä!?Õk¶Rp–?»gMÿL–ßµí}jÐZ$ºÍ<5e°†'6W«ÕÛ¤øëŠxsm³Ö5îX:$Œ<›Þýl,ª7LkˆÛD¸`TÔG®Hš}Ð
²Šª¯$¡1ÕPÛà –Z.Ý#A—É½)¦€5µ Q
I›[*e°FZ—Áv=ž<Í!eˆD¡°8¶š=‚Ä;!ynì¥x,Û¸ ¬á²ÔSf÷ö…èZ{£Q¸þÆÛ*ÿ’Á ×%€5Ñšœµ¬%Œœ8nÿ€%öïñaMld«éÈÌ6K+·î]f( ï³ù­Drfú&­¹a
†8âåŒðsœ|‰"ÌŒc7›bTIÎ«?_Èß}ýÂÈèÙ‘±ôX9AÎ6›ZÏ@RÁš–¡lÙ`­<Bv$5˜½ô²dÉá4aþâ{7){ÏŽ-çúÁ±p|lLEµb]ç¾wh¿…*'Çæ}C¥[¤´S‡*¥P©²Ú¬’sÓâoª¦z¹Jë«¯Z3›­ÇmòFP»z~ä~}nìæL•9]Ë”IN7[-F+·ÚÕnÕV›˜Œ ‚ò#Û5?ñ¶bY’üV›ÆíñømŠñÌÂ5óÞ–lMÎuÓ	}xÂbÙZ"rƒW<½Ë-@7¦|¸ÿ½¨ÅÝ¸›‚»wèN—Óï÷öŽ°B´Óz¶çðÁbÚˆÈ8ã/~9£[ƒe,JÊØ¡üÎÁÂõùÉK»jºáFª8•¡Æ†ñæn.U(c¥ÌU²Øz}–X ­Z¹Ú³¯°p;t½J¤ÈÒÅPát£Vê)•öJ¥¢çÄ˜sÖã‚DúLìš·f>›Ý¸#Aœ¿¯#i“¿ß—¥;'?(•?h¼Öí¢EäØ[¤Çj‡Öæ@z½j€ç$Å—à4"Ÿ6\u JNGýõó~Ûšá?Ê÷¿>¹ç}WÿH $ëßŠÕþ›üþø`í…ãÇõ¯_8kÇ>~•©IËf8¶×ÜpwcG­žª=©=ÕWÃLó5É¼M¿1ÐŽ‚‘	NÎ!uLí;kVâºŽÖXö¿Ô@ní«©Ö™k¥ÓJî«ÅR»¶X«M,ÈZóÃE­9\ûeÇXë¨£Ž:êè§?k% 5ñÚ‡˜kãÜ¼akñÏ]»6†ÅÎÚ&AlŒBcÇ£µmêb›#6 æBü7é\{Z-$´ÙžÏ3×XCÑØ`Ê¬5„•ÆåW8Búd4™ŒÑ”&¿KFZŠ§d2ôœ…ÂID“ØÖa%èKKïÅJS4HÂ¢FDûk4›,47#›Gx²“—ÞKÛ¹DPóÅ‘+‰Œ„º`¿,‡a+“‡â.2íÆü£
!Êïo¸®5Xm£µ&V#¹ßu­iªD†¬íÒ–`ÍUCf%„ŒÞ<X[ËjŽ}Šš»VšVò½ DæÚ¤"5ŒšùAÜ»ÇÏqŒ¨‰þH–©[¢µî'_ƒ`íìHæ u©ØkøïæiL½{p´ŒOfžø
ÅÕ¯–/§ã#¿e³É‘pœàAPMÑ$Ô;RüØÏªñåFôRM^âð,z5_;ìÇ™–+V¹¶[(Ðö×\Ôäìê\újÏd?\Æ°mWÈ‹ÚÚ0Ø"SýšM®}ÿ¿þ«º8sþ~mµ¶¢ãV«¹¬ç¶Z•å•‡-jíj­I}ÍU^j¨†‘SiWë‚5-ž©Tî¸l”Lrù÷o ±Wñ$oÈÞ¦kÝ`àüÐ4|ÉoãîÉl§ Ã»»¹ûéP€wìÛÍßh¾·–ï¿dÃ) Ë	€{‘G)a´iXé±ôÆ@Š`ö°¡™)à3kç“¿èwúy”Fä#ŸTuné–©²4>_©Mµå£ÉòUƒšÁ'Pý"Nðdu!ÔhV{èN³Š¸…*µ%ê[KûzÐ¾BA”†¼A)$d“¼´Ç 2žÁŽSÁŽâ®…µx÷ÁÑ¼ýcùƒ¢µ<
"ûƒQØ‡\	$r¨¦V»q}I§7#´òäÈì¨ÛhñM5/`„é÷\wÒ!1Õ|gíÌ‹8þâ;|!¸j‚5k¯žz•×ûœA²	æ­­+ÀˆÍí/[@nØ8`Û(Ëë—´uHæ—<ê„“—6‚Ü˜r_!OÞ­|XCLþs°öTV{c«1n‘Á{}½½ûÉŽ÷âª=÷7×³6¾6µ_š»}{N¬öå—c­£Ž:ê¨£Ÿ¼µöŸ|©Iæ­©Z;ƒžÛùÜßþ™+Á?Ö”yíÚ¶_V)Ëÿš:Ö´ê‰D#;ç„l¬m4×žZ‰0uÎ–)rìÎ¡eMãÖ€5³Òl&wLv›RK¦\»“»w“¹;iÐ”NBu©.BÊÓ9%4j2vzxø7Ã±CÕ”
Â«8ÝÃz‡RQUJ2y-éÁ½£62–F¹œžD¬?ä§{˜’Œ"'Åb´©¥Ò.z„ë¹.ú·°Û²9uÎÁ)!RôOïëa3ï7;IB]k¢Õýü>'È‚”<ZÛe+ì3oëË®t8².ÁZŸ^§bC,$ÿÛŒ¤×4g%0ÄQóÛ¹H§òè¯)…ì¥ñü+|ÓI)#¹ü]6wÑAu¯•‡µÿzz(4Bƒšp+ž.—3Ãì&·-C1d˜ÜÈd<fœW:'BÑ 6˜ÈrE¤Ù”í±t†¹‚5WÛóã(,òô­UHl.ÛZ]mÍ}˜þ{ýþ6Íæ&›5Ö„á8Àj{üzuòËú4tÖ~ý«UÜ¶ÇÏòàâòã‡_u¿þçûµÚ£¶›³Xqµ/\„äødˆ¬M? á(¬ÏÀmjns5“ .~›T£ÙaÂMOšj8m7Ó'Í”€7“¨MK Ë¹¹ÛÖ%-Ü ºàîßŒ§,¨ò‡e/p$‡ØÑ–÷zAkÞdÔu¶Î5c«¨]¯±‹¼ð~ÕÆÒ@+Ÿ€2DøpÄ¼·&o7T« ©’ðÛ%ˆ4ù0¶'xrvª ù~6Në_:––ŠÖœV˜[bhcõ£Éƒ2çÇØÖŒ3ÎB&öuÊ°Mà«¹U®;;äËyt´«‰ÓJªiMz2
;.V[ß®&3Õ‡5Xmêêõ]{>}÷ò¡Í2µ^ìØ,PÙÏ}×I5´ž|(4 Xûú·ÿ ÕLÿÖþõÎëŠ´u`ÚÇ¯mÇ7æõ«U»NÙFZ?jÍv‚ì~OzÎÖÆÚæ¾ÚÁ$l;´Nµ!­‚ÜmXCú2mÎ¿«}ô¾8éAP›±Žbõƒ¬†jÕ…ëÅ‰p‘0kk;É3ž«}¨ Èñ›~Ãš_ùå/ÑQGuÔQG?ýBHƒ5–o×˜kBk®ÁjkÏÅ'"×vh0ö5"F4;QÚ>bhövNl#S?ÙÝv§:Q¬˜ŒÖœ©ã×Bnk@B2ßT¤¡"ò×Ì\ÓäµX,Ý2©Xˆh6v„Ç0Ó(ƒDi|·XrwTYnä<MN|ðç¯O’r#ÔÛD(…¤;µX:•N$rn [¢4‹8§-ÌÂ¥öoã2ûC¢5w”¶4¶Žioæª-œ.î+ÌŸ.ô,Ð³Æ•,âªbc ä›ý‘0UØjZ^ùîMj‘_pÄ:èqW¤:dV¶ÛFP3Šn;¬],ë“HŽÖj ÆšÂ#t 1Éù×š¹Ö9ñÝ+Ö›œg»»ó£¾ëpíl™RÇüÝÿCÁŽÐYú¥_í½<º‘â_.'éJËÊ]ÌçÂ¹á¯’ Ç­ÅsÉjÍäCÆÓÞ–~o8Ãa$nVGVË¢0{!ÓB+Åã…ñ¹¹:33ÙlÖïT—W±Ë¨€$[¤]¯¬.4²Òž©Ã`ÕîGµÅÖWV ºéÓ­ölkå+~ŸG^ý«ÇíÉ•?ÆyƒöZõÛÍÝFuò&©Ã£NU’«ES˜VcÕœ¹±#ïÍík4EüõèÍ/ž¤3P®”âT=sÆü%V¦€Ùt3±ý!½ëßtg¥Å¿»}ÕYÚó´ÚZ<Ï¡^°uëËëÞ„?Ú«›‹ö¤ÎÓÖ~ ¿JÑ,Â%ˆ 6Ë”fH;]1M$b‘"‹|WŽÕk3U¬4Ž¦Lg.ö,LÖÚÅžj­¬É‘)„H,T+%|Ö$>ã¿C0Û¸sèàÀq›îlƒ~§¾`Ó?<šõŽâ#Ý¹±Lw8ž?<šîû 7ØjJìÏzíjYY	¤ÁÚÔ»®Žðú¡O?Ý$ ÿ{ôš[ù›n~‚×††\!ä?|V#³Ÿ»‹°ÐŽð_ñÇÇŽ0pŸWºÑ×HhÆ¾ävžüZù7Ž|ŽBF¶ˆ‚£±è¾õ5C6*"usÚì¹^k_!'¡ZŸkZé Bó×Dro¸vµ6°Ú¿ÏjW˜¯V+õ
ý”M„z¯m÷Nú­j7‹ÆiòÕØtŒµŽ:ê¨£Ž~´ö?ÍY³•M\3Ý‘<XÛ¹sçsè² âa–uQérü·q	s¼Mi#!ÁZtç3Û®›Ä (a¹ÔBn‚k(ŸÛËìLÚµX’€Á[*5˜Œq˜LDpÂâ]VÔœqC¬Óñ®ˆÚÑ\ö~.Þß´l†5DÔŽ¦‡±h2Öe°Æ;¥£
‹Œæx(hM{Ù•!mU¼gÒôÃAeˆ·
ëÍ‰2ÁfË$#qP¥s{Saò„¬¥ŽÐ´¶Ðhœ>]d6¶…ŒhÌ™Ok0ÒQKïïß%ù°ÆªoÏ ½kÄV;Z·	Îœ°8çN«·M'|õ­+ƒD¬¨XZª3"›ÓÅT%äfßa(FŽ–¥ç	 t_Ã+èÿñ-øßÃµ¢4éîh~ô,Áý£`®aØyh-‹…FâQå,”•Tãšð5Â2ŒeË§ ¯$ƒ±Ã<Þ«Ö4l
¶EhYÃ‘K–ß#²$‹¡ÖßŸM¥­ŒT¬FçÛù°fhõÞ¬Vå¯Ä³ç/dF{þðÝhã3‹\è?ZiÒ»6sfªIÏ4úp®UY\¥Yr±Ö:ûéV[a:[¥ÙªÖÛ÷= ]a,ÛJþÛÅÅ6u‘ízé³SËÔBòÚ2ášS“‹ËàY›w™nâ×h`¾›8j“÷V£*s–é`ñªÙ9Ü#vÍuƒQL`e½ŽÅ4%Ìxn[ér°eexç¯q¨•w7—ëÞClkÙ³|5—mÅï†²°¶ÙÖHî÷š M€äêpk³%‚›	¬QíHíc…ySüq6§§êsLÝu+‹µz
×©€Tbc_Ïx©X¨N•
à=ÿ½*­ß‡5çÚ ƒ3úÓ°×ˆž‚ùP8œéÎRúØÏãñüh¦ûàÁÂEæ†úÒy`-hWÕ\»Úf¾Ú$2V»|Ýc´O/mkÁ>wÄF)ýG¿ï¬Ùƒ€ÖN~})ò	­½c°fÝj‚µCÇŽÿ˜E\vHÌ¶q4¶[±ö9qC¥šÛqä¶Et?z*ªq÷­µµ¡"HÛàð	CkÌamkn¾šBZä+°´66ö=V;°š‹YºþÙÒ­Û½½}!Kºv­·\Û?Q˜@ãˆy¼ƒn‹wj¶|97×1Ö:ê¨£Ž:ú¹ä÷)w- 5—àkÄŒ<³sç3Ï„
ÉBÈí”C¢H"jÛ¯¶…{ãäøS!ÙÓÙÞµCÁ#ÏÕkž¹ÄBµ¿píÉpfgêdÄym8…±6íUãZL	þÀÛ YÊ¬9e­¶‘T}ÒE²#¹x®¤È1C$/ÒrÄý‡{»5â)’KÄ°Ô4‡M®æ]SMÞY‚‚G˜—.©N¬Î]6™å<x°‘©
Ì,mZ=šAG~¯µÁ½ó§öa­5Þ0LÚÖ`5&ÝîêÛßÛÏ¨3WùŠn}/#Ã€ëóÕÌf³r"]S»šƒ8Ž,aÄ5äHºõ›]¸X¬VK3õI’FŒ)p×¨ÕÓ„l‚FÀµ¿g\)þ_ø&çH¦»ì},gÁmyFò¹î|9YÎ”kCIG²×pvL°62’QEäHyØTNæ’2Ûrá±dXBq®”±×â|:ý¹aØÆZã3æÃÓ„¶tÜ•Gi»0Náä„NŒår?Ò7ü+®—g40û«Gï¯´WÒ%f'ãÛLO®¬Ì´`.Hš•ÇËTF>ºßnµZÿ^mµŒÖÈ$Y^m¶?©OÏ¶ê­™véæéÓm¥\LOÎ1×Í²ÔèkaGVÐ*„19­æªzMól·ZS;³rÞxmÍÒJ”›ÁÁ¤ûœA8£µÉºJål	tãt•Èä¶:¸³;Ú”ò8åž¼„žþ®‚úo¿¹ì=Á—J—„fë~«¶©á!NâgÔ‘KNu„†¡feªË*z ±×&+‹knL]Àe›.Ž—Õ‹ûâ	J‰Ów¦è+üö'á1º!'ænT'^ž+†
…ÂüÅ-UDòþðC¾¬Râ!dîK0Ô¢7›‹ç$þ‹Î¤•n“Ê¤9“íN¦ó‡wg³Ýüqge¬y¾Z.§È ]-`5}b5Oú®®;XÃÞÚÖ|±ëÚ‹cŸ|cIØ_Ð¶F¤›áÇ‹¼#½ð9:räóW¼û§ÿÖ$GkÀš¯ Úl½®"Ó6,v
!½ýM³ YÜzT£ÒÔg®šåŠ°B>÷IÁ”5Ó _‹Ð±«qc×ÐmàµWö›±öÚ…ßcµ6°Ú­Z£±te^ïÙ³£+ÞËXÛ/Tc'\TCsÜUù¥`ÕJÇXë¨£Ž:êèç¡_mkŸ¬§5Ž=a)#¦°ü…%æ¬…ñÒhSS%$ç"¶‹ë¬ÙÈµñJ•¡k~-¤LMj!IÙˆk†	ºj:›Ll6Óµ†¢”DFxÛg¼–JF•ÍÌ5h-iJÉô’âiöÂ©¤m,Ò´lªS`.\Êc=žŸÎE£)”€ôœó–p°á:¸/ÜÃ	ú³"DŽ„¨†Ô$5NBpÁZÂ½?9…#.8’»ùbOaÞ/ƒ4Z# h‡{djÒ1Ê„ö“	«q‡Ö¸Ÿ{éÜw' ©I±®o_ÉwÓ`24 \Ó‚—à3F{ëd—I……"*U'çà}““ø 7úi^ýœ¯Á•ezîÚù2¢5ÿkà‹ÐBÊÈÝÃ£jçqã¯¡1™hýÙálÃi"D†óIÂüË ÆLµÑ¼ÐVóÚâ½˜Œ5Ñ=Î™T™²D’1|4 .›Ê¢tšCˆnLSÆã½cJwÐœïl:sððÁQ–îÜp~x¥sÝÆÓûêá£‡KX6ËK÷>žy\½s¿=óíƒÕET[Y©ß¾]«´ffZDý¯<ú¦ÕR	Ü
˜UÚu:¡jóŸ¯ÌÞ¨Ôþ>³LŸÛÌ\…ì’ÕÚÈ·”¶•;YiÕ§A´Ö'u!¡ŠI+‹Üâ,j`w[LÓ\.!przòûöþLÓìl¬l¾ØÛˆnpFÍºd¤ºª‡ë!Ü;Óº7·Å=ºÍ¿‘ßgóìÇv+ã’3ÍG›šš–&+&³9…fŠz¬Õ'ð‰gªÆÅQã!j	*åÓ›©¶ëÅ>¢;ñÎLµ:ór‘IÞ{ïw÷Ç5ëáDñb|øåBeókæ2¦Ù4ø ~ÎMìCëfNˆÑÂLýK÷õ…³ý<’íîN‘y£D‘,†cñ4õŽÉ‘ÜHþ †j°š—ØZWù®C5}-ö	˜ôÉRhSXóÉi½ÖÚk6á¿ÝÓû,_œü \c"6´Æ¦°š×²vœHj_¯ò ¶µõýjlØŠÀüÌÇuÕþ‘Û­´Ç°¶…úìžÁlÞ· Å÷Ø´F.
Òÿ¾8œi¸?°¦/WAžNBµs^yýÏ¯y™ý[³šR ¯Tjë§?@xkñÞ¾^âcÉ«}6$AŠÖÔæø§ÉŽ±ÖQGuÔÑÏ§mLãæyk( 57ÛÇŸÁ­º­±Šž"]Û-_	ÙEé¡%øÃm;«sÏ k¦[fêµpí•îwD’ÅŽí©üÙÌà³Ï¦2Æg‰HôÙgc›Û»—
!/,R "¥pjw*C ´kWKÂfiµ¶‘L’Ž¦4Q[•2¦D8‘à-à8ö]¦?Ô¦X4òËf³	…@óÆH­k)8%šHkÊä-òÔÓcšãtñÎD£Ô¬5ÁÚ‹ŠÍ?
¬…ÞÔXêsçé[3oí•ý}çNôYÐ£jf¬kˆ“ìqVäæZGØ×Úôý¬‘BŸ­½bÈ)p­V3§Ã`mÉ§æŽ®©R3²Õ:—JZ2$³Öœk,H¾ùk8h Ò(“©²CÙ|žUò½Ñá¤Ø+žÅN³¨‘\<žãixjt­Å¹.¶ôþP$9¢«æþÐ‰Ù¥µ¸-i¡%˜!2JÒTFr”Ö="Pýð[‡³<Èæ?ïc˜ý³;C>å7ß”ÇoßÆ%;s¦Ô&Ûqnåw/Ï®jvWF*U¡³••š&³=ü
Ä[]…š«Hƒ²I©6–+í¥ÒùÆrãvi®ÚÙêÕ‘Lóm¦ÎØ€z«ŸùöáAí
bH~l\áúÎ$[â9vðÖÈV Î´lÆ=†d'8íoœêoqêÇˆö9»³‡<¼²óëßhi-‚ÒÚòÌx±©6Í
$cíØÓd¿šT[žå¬—;ª”GîüÒªÿlB±¸‹M`“Ši>˜*–&gêõ
²$Î¹Èµ¢­
üræáLë›Ã‡=,÷ôçòÙ¾žÔÁÑ\õ¦ò)Š ý²9»Öð¬5Ûø`ÆÒ‰`öµ^ÎÇ‡r™0çÆºóÉ,"o©Ü‘ŽÊTwªŸÎµL÷¨ïª¹v5Kì—­¶ŽÕn  ²ŸÏCñ"§?ÅTûtëáj›=Ú^pð<ÇÐÚ?¸a­Y»ÚIpM¬æÃÚˆp‘ãÇŽŸ¢µðÐ±]jÿqúÖØÌIÛuþH{þyk7óÍÝžj¬¡§Æö`+n’+ƒdÍ×X¯5Öü/Ì¾ËR“ÜÈ$?F°ö’
!yøœ3øMOeµ·Ÿøjí¥Æi^©—²¢²0AÕ¾ÆaOŒ€5Ëñæ`­	Ö:ó°;ê¨£Ž:ú9å÷Ckæ«±°ïÃ´æä†cÓ¼³ˆÖÌbËC‹“éòüÉéeú™`lÛÑµonb®
®ÕŒÖ––ÖÕBþw­Œ¿–ÚžMÆòÑh2ªÈ….rpïîX4ÛŽ)œøÏHcäZ:ÉAk‰7_M®ÊðO%x‹áÝÉ¨òC€²h,—¤%U)éæa÷pcqq³7ˆñ¶æÁq	Ç ÑYRë½ÀZ(áÑ ÜáÃ+eŒ‹òÕ®4Š¥Æü“ü~<ÅC/
N~0Úÿõ›'Nœ;ÿŠ¼5®FNôŸ8ÐÅÙ\"=¹Ýckîþ¥“mAÌ®Z°¢ynh¡T¯×oÔ¯Þ 4* Øü6rÔ|äúwô-xµÉfìõHf¯ò_lkCfFÏ–ãÑv0I¥ógóDŽ02[2ÐÀ.$["Lø?…™iñ°P,‹ÏÌ™ÇAÖˆ?·¯’4Ëà‡úÍNãa;ÑM‰Zþð[o¬IÚýê!6_>Ã–ÏŸ¿pþæË[·KÕzu¥üÏo§+j8›)µ›­61’#+2ÃÚ+g±Ï`·Çm¡R’'ª¯4¶peµtþ¯õÉvFkÍÜi= “Š§ÑeûÔ¿ü¤Üµ±ƒjïµîßŸY­µg±Œð‘ÚµE‘š(P…ßÖgfîŸiA'“Sl¬¨4n›ªóL#Ÿ™™IþhZGl>–iýùàTpnÙVÒF÷õ¯©Iœà¼Ønn*8®Ã2ögù¹íw‘Ø d@ZÅëH5>SM³HÛ©fEó®éóc=;©§ñêRÏÅ©b±ò ZZÒü…Z•ZVypõ¹/óÉÜïV¾9|ðŸÿy8“>x8OŒ¾õÖhº‹?$÷eCº«PÖ°ì:Ÿ|¹„Ôdië‚NåFG³ñd2Î~¶;CÓÚèa¸ŸE°S¹nûsfqka¿Ù7ärÈÚj ]zª¹¶¡r-©=º!lä%ßZûÂïc'}Xû=°¦ÿÿPÇÚñCuâ«¹ìhíãõ5Á”µ`‡mp¼+ 56?>µŸõ&rÆš¶ˆDv¹Ù"lü¯Ç‡ioè\äŒô„ÖXèÜ¥­eµ77g5Q«6×y¥`ÍÖXjAºqØãØjã7oýØ~ª ¹¡ÿøEGuÔQGý|ÚÖ>qæšÕAz	þsÂ5jýÇÖ>œ h„ÿxøo	9Š ²H<J³Z¸+ÂX‹0ÞFÞšYWãÏìØ1ÇU·J…&—­k®mž)L¥ni{÷Ýn -ŸÏ$ñ×¢Ñh"Fšÿ`,FTHl0Úµ#ªjHz"»A2œ1ATWˆ±ÖÄþ§ 0IXt#9„1bøiOÓÄlÈŽ.6Q ˆÌfe'RiÙk&Æ`£5Ÿ<šÀ…ÌtçÍqÖþ?{ç÷ÚÖçý¿á¹œíE|g|%
F´8¨²I{£CËhm|±7¬U•gHž¦ÒVÍÐ’:ÝØžMËgZ„’ÚNä¦6šÔ.Š»áq:9ÑbI‹§ñªÍ!¦lž×ûû='Çvloû ·¥óK?r\9éyùýù¼?iÅDf2¼«ø$ßk¡Ðç™§ü¡3?¿p{ï°5yYêZ;vŒÖ”æœTûn.ž›«„m¹X+M®~^3»ÜEq¶Ïí™‹ êÅú§^»X ÉÐžÉiiMÓš¾Å$äOÂkÆ]«è[.É^¢!‘feÖJ:@,$ó¨(ˆÌç'¿ú"ŸÆBKåñATÅ˜K*)Ò”œåóiEò§mMYŽ‹ODK9…C
	ä²Ðl´Š¾F//eRYÆ8ä¡4™j“¬¶e‚*u¹]ÎdÏÒäØùþ^¸:ó^áloÕqœGnÎ~Þºµuþ¼ÓÙ…§:½uZ÷ÌNï{€„œIva,ÒkÙ‡­œ¹^w©±ñûÊ.vÐêöÚ]^Ûíà»-ƒ`^@³Þ]‹ÌR©¸Ùé€h&»ï×‰gÖVxa§èòÚølq•­ínz8å.{öã–]Ÿ‰´dìÒ-ì’/»,í†ùcìâ€ö¼]«ÅÍ;Íþ0
Îyg§ƒZ­ ãcŠ÷ÅjÝ%ºÏ8`¿[­Õ†–ÜUóŠ.6çºzþvWÝúõ1wÉj¶£!§Å¬ÐG½Gz½oËßäßŸœœÊ¥?zÿ£˜–)è£.kD(9Y`1˜NÒü¸„#^×Z0¥ËviR?N§â¸²ìûp`h­Oæ´™.dBQ(p<;Ê©ôà$
ºÕR‡ÙjªÑM¸lûÆ{·®½WÇVCk‡+ $«`óKËº`Ÿ¾¨MéÍ·ÖðØÄjt¬|Ùúj^äëäõß¦òÕ7!æb[A^Á’?Fklø#°Yš]KzäpKMÝ‚ØqíêAj«‘)[m‚:mÓöËŸµ€|XÓ
±!PÓnxöŒPí	¬vú'¬Vg|ú5^g4‘¥¦v5kUÃ^Tóµ?bÍ‚‹~l_}õÕW_¿,ZºÖöøopSÊˆç­ýû©LÇŽªZ{Åˆï·ûÚ¡] H²×Ð3ÝÝ 	?×¬V’tMQÃXø¢Ì&Tc©v4øìèÈ‘#©äñÄ‘##)Ck‰‘ÌèhŠ H`í•y#G…fìB[*…Ä5Ê¿’PR~4Èe2 [‚üGšÙ¬}¦’Ó¯¦Sö(öðöÓ&23ë´È,+h“”PP†M—ÆjÕ¡Ê¼ÃåÄÃÚüÖ4Ú¶&+‹Þ”ÙÄÈ¬1Öð´rGg/„•Š6î5¨™šÈPäyÝUþ¨ŠGÕG²ô»@ž à×Ø¶síbõŽ£Ën%?x±ÌÇpéÒërû^|áEsJãfJ6É¥Ÿ6¯¡hTðaM·/¾úê«IŠ+Ãƒ5DA¬œØ5W_µœ@<‡*:—d>ÇµÁu›X.M‰d)`„CÃÔ–ÊaÖ¨XK—OX@S)$7¤m-%eTâ¿î@Š‘é¹R¡üM·Nºf¯wjö3Ù£©Bo}oòbjÛg÷µ:Îç·Àjš¸MñâæÃ)‘[9`m{6Tw,­»³‹N÷²&Éy\Z_ÚØ¡`ô‹ncËÝí•J;½Ù%4]í¶ô€û¨Ãï"à¾N»³~wimÛí¬Ò™eAí.Z5¡œr©|çËòëúhÅA;ìÙ»¡%³âfXxB,ý-VvÙ¥}ie¬1s"þ6åñI"E9kÚ×+øøvŸT)ôâ±»ÈYb“¨}µ?ZãñŽæ[›ï¯Ya´-é5Š|ÖÜÚ2°ÆLòe¢ —«Có®ëÄiv«9ÀôFf‡Ñ
;y>ÈoÖò'&W¦Ú3©òû…A}à'|4Ïçò'pÛÊ“ T4Ni%ŒïŠ¥©TFæ§ˆE——d¡B>>a+&¥(ï+‘J&R/Üd9;L¨Èd&I²ØŸJgÊž©¶ÕÚj~$°vY°FkýÖS(M
:Å¤ 2Û¶yíECT¯©UM2kEŒ¼¬½ðâ¿>†5µ½ÞÖr`íô[H°¶Ÿá³CŠ Y¢ ò©ý§†ž.Ä@LC¥iÁ­:!iaâkÍÝ§µ	CÛº±ÖÒCµðìlé¬ôöÊÏ`5Õã>˜wnÿ‡‰“Ô}<¼PU¶ÖK[Æ¿|c­íkÿ«Ÿ.ÒW_}õÕ×/­mM1#º	Ö|ZÛ	¹À¼5ÑUÑ„¡5Sý‹ÆÌö Ã±³±vÄDùÖžmº”BYZC`ÂÏÅµ€×”"?’*O–¿ÔdjÛŽ&X‹™Ž³‘£ÊÎ%5;sœÝh”Ç91 Fž“¤ ‘T&“QFrz4Ÿ6œ¦#½•Å¯×`²ajRS}¥$».—ÒE_šƒQ5µ¥µ¥üHƒj$dÍ7QÊ‘¶k-¶¦qJ‚µh¥rJ°6—NÍÍM_˜½ôÚø»æ)P$­ö¼—éÐP{éñnˆµwä5®MDjµ;5GWíÌ³ÔLÌˆ>‡s—Ï™ÚÌWÿYÁ'J©‡§§mQ*zƒíl¹l>	Ë“Q¹ðo_|uâ„€)ÿÑWRy°”Î’ÐÉ†*ÉüÊ`!¿*†ŸDÎ
®Yl„ä_aÌZÀjQ\jyªì4J‡ãt«‘3‡M\ÁÂZ /¾¨yÒT³x"œÕÜ™V¥ÞÖ™SŸ÷¶îM‡?ë<úþÞà7ßÿý#Øª×"0ä»ÏIq>û¼ÓQâ¾)ÐëRÄØÚ˜m7œí›n­Þ½ë~V)õ~ø‹³…)·ÞÙ^Üê="ªäQ«=ºÕé•ŠM`mkg§Ýëhf[«ýëÑ©GEº.ÝWkÛ;++/!âYn`-í?iPÐà9h`5k]qÜâ‡}`$ÉÇ2p'NòŽkaå!Õ²%6ûjiUV™™ØÀñ:¼ŒG6éÄ‹9ç£üü]ïÏ]ÙV¡¦Þj‰•/­k²6ç	¡)Ad¹Û\jÌ×häµšq8ÚÝ”ùèPŽŠºŽÙvkñ×ÝÎm¬c‹NÇY,ÿéûGÅx|pòëÞ¥óÍöTYY2ï²Ü†ÇÆ‡‰¥8P^Qr:“
Iñáxœ»jqßŸLn2Ž„i‘«R-›fÍ_Uþí ù*Ã)!Çõó3èåõg7«y!O„M$ÅÒºÆÐ«Oaµ½õ‡û	MžÜ7cMkï¼ñÚ·rÔ¨‘‰³F¼ÈÉOî1ÖÎ1ï2°¦”ýúçMÕ@úX&'íqF?{(pÕü¥¿©…€M_O(|ú@lùj‘½Ôf€ÍúiZYE‚µe5;«œk«!?ºß(¶¤¦DÚ'±Ú[ûY­Õ|.>~l\ù’hüØ±*”†¨Ü¯jÄšL5©éùjÍmÔëk}õÕW_}ýâÚÖDk(	xÍBk3Ì\[ g+–P¹cVûÕ¯þ.F2dTS±Õ©¬ÅØà!h\ãè¼ÛbŽ²œð3p-àµ ØR#™L¾l†r‰Lv¶T2­ýýñÑÑWFÒL #E„-bõÑœ_™L
¼j?>JþƒˆËØ j4®)–€=ö¹'ä¥Å¬v”.5žK~ˆg»)e2•%ñ’¾80Î2šåÈP,RÒ?èI"9YKš´±YXCû¬µoù†§iXC§À5ºÖ"NM›Ð~ÓœÆRAêV3Ä&V3íE‘•Òñºjv“î=•œ‘Šðoa­ù/ˆSùúëÉ¢FüÁk¶² ­IŒ^›üÂ¢óûÒW_ÊrÖ¾(È‚)—?*”rù²zÊ+šÅ–Í!ì1>—²È‡Ì³Öˆlï\i[ÓsRY"«¤œŒù0I‘Z2±ñÂ4É¾Ã"N“BÔ‰¯²Äd>­‰â­ÿÜû&Ÿ»pêì¿JgÞåtáwæQë‡îwß9éÞvîï>úæaShbÚœ™i6šsÅ&STÒx×¹Yt*	“ÜÝ.v–Š£2Óº­•^cªØ¡"²»ÕÝìô:åîtÛÇ3ù©ÎýûzFg-9šß)î¸kSm@ÈiÄôL8Sª³Föd­0=ì.ClÂ"WÄæÓ”Wn¸®d˜»®+ÞÒyZƒL%Š¹¬—€pž©Ê<JË€ÚMXÑÕJOk8®y›Æ’Þ…Mw¡ÎŸë:†æ,èqvö}e‰)w-¬é¨¬ÝWß™ýsØ`¥9×»:Ã%ÎYOÝ]åTàG&¶›30æl¶–[\’5ÝZ6»Èò%·åøœ*”¿Þ*f£Éò7[Øk©ÊâŽÚÉþdœSŸÒ´%M–O|”Ë”µw"3 ¬å“2i²ƒy%³òVƒ…I +J•ã	*¦yê Æn<Ã
×Z2i
h1è˜‘ÊÊÏ+=ƒÛ‡jmµ }SòRÝ Üå[Oa5_/t’G|F3K‹mß~ûŽµÖ”/ò­&bkÈÚËøj>¬ÉYã¯ëåËo½õ&¹"–ÕNŸ¶ÑÁ`5í3°‚;ôÔžn¬Ydû9ÎÞ7cøû VõÛÕÌžPH`2ñ9k|ƒZ*ÇÉ?¬_íä!¬†`5g(áÕááÈ¸kãã¨Ê]¬ö~¤7Ûk°Z?]¤¯¾úê«¯_\Èˆe5îV~„¿´(Í@kÏ-HÏRõ§9kÊüÕ¯FbleŠÒ…ãŒ¦°†HŒÜpU0†6[Z­'âšøu¯yMSZB’ŽÆr+ÌN£a-“ÁJ °vôÈH2-4ƒ¹Tüx4ée‹qÇAùkÿøQþhTŠÍàÐPKgb¦Z2EQ£èNöN:­·ÏDkà˜†åBn^oZ<Î*‘ÒP¦¡ÜPŒŒÈG8–ÍÆå¿-2‚nŸû›g­ý°fií[ª¬q§iM#ÀšÍ$¿_ÙýÜm˜š@æÂ‰cv°Íƒ´‘ ÔÆì)¿ÿz5L1dÝU~ã<ÀRR.$Jf–­ÏCêSøò¤,?ùÂ9éc 	Ü±Ää¤otê*ú«¯Ø«­XäË¬ 85AÕÆîÊ(=¿"§Lã²ŒWÃs£TV%ixm2H@e¨–‹i†^ecé‚\”dÞØhr¿±F¤‡i–Ì85ÎÏjÐ,-´J§~dd_i›AsåwÏék7?;³³Ûê]p: Qëd]¼ç¸3[­ÜÅ¹è‚¬14»Õí5ZJ7‹:Ø_[™)Š ;»Z£Q*îòÃ|8+muÚ+ùv;•™šjw9Ò]YÉK£îêbqmµ³¼\¿x't$×k	€àÂµ¶Ë„Ëð¾®£žµí5Ž­m/¯:üAnÇ”Bco{ÛqŽ(Î:r«lÕ\Ü6¹`øY®ì3„3·ê4]˜IXU«»†æ¸;<«D:hðõ…e^jBá:XÖlpj<E|'ò±‰K\ºË–w•†ÉS9«ÃÃÝu¼%SÓé®uÖg»í†Ÿ<Â‰Ôç‚P—'±®TÝ¥f£Å_ýåæÂlªØqµ™t8œÎÈÔú:_†Ê“ƒŒT/óã3)Y×±­¥Gk4-jZÖø«HðP”ŠÅŒ¡y±œü(=XÖä4ûƒÿÙŒØ?b¼?Yl¢2w°N«'£A`ÿTãÛ¼ÃÕ¯]{ïÚ­7nÝz*¬YË“iÐÙ—'¯í$ÇkŒWC,ElÿVCÿû_½t+ü4ý«ÉÞäw,Ÿ¾yî-`MòºÕÄfVrÎ´¦¬=þ2Çr?°?iï‚µÃc 'XJÚT»/\„¥ÄiÂ§µ`hà¨ÙDizzœ-|µ¬váPVóQínGÂã‘!~M‡÷ÆÃÕÿxLCÕª©	aÁ(ìÎš‘ù?Zë§‹ôÕW_}õõKl[“¶ÒšpM¨fóûóFÿ=†ÁÔ>a"6‘@Û'‚µè3ØjÃa@]`íˆ°m¸NÇàÚƒùìŽk/ï±×‚rÈ€×XHe×VRgÏ–VrÙÄ3 E)È5£S->¬ÇôHœÂ.KŽÄ8˜/†‰†RdË'¹d”a¸äQ`-–Iä3â7RmA$hK°Ì(ªøÇ„j	,ñ;Ôf^¶L5-S‚4ylÙl,T]ˆGnÈ·z§úù9ú,`|Xûk­‰Š"Ã¸XÀ·SÂ5T™µ¦+$VºT²a&¾ßÃ6;#Û‡5mér*À5É7ÚÈ­®R\a@6—Ðõê:ùœ*†T& §fqMÝtŒxõKNÌ7ýìç0—ÑÇ Á@j_ópÍÊÀZ9_`« „F ŽÀZãù¯¢¬‚”OWr¥TnE×Ð¹P%†1DÒàZ%›Ëgxr!«eSy\^DnÉã
¸Çò1í±Ÿ†§Æ2{/W8]Îœ8øÌ™ügíûoÞþóÖÃ×ÿóS&f»ÿ ŒœþòÓÙ)­Jef<Ùœéý¥ssÆí9ï
‡îvŠ½Í¢CH»ØsÅDGÅ#Y#[Û;%ÒG3ÅµŽ’"[[ÇG;íÑG?t·w»r²šñÙ&Ó’PYÕŽ,ñ­ØÚžj/©€°X‰Œ–œwiž:ÝòöÒª»¶xäï·DÕehw—çu¿±¬ñ%-5Âuòrª‘;ø¨Ðçš™šHçØx<Fú¤ÓlàÌ5ï4 ©Ð<èUçÄ0Ñ€BN¯ŽMW½—×kB7glY=wËÕÚÒruCœ¸ìrÂkVÁ8·ÿsÊ¼Vw Cga`^?gCµå»ÝcKµ1·Õ%Ä³™›i€íÍb4
¬ññµ·¿.@UÉ‚à)Ð	»«ûèö¾Õd¦Àf™	ÖæIùdÙ°<¿àGf0š£Ì‘ÄqY9Má¡ñ([®aZŸå?KkàšH-ˆñQMÍjA^Àj‚5¯aP­k—®YH»Åú , ™õ¾f1f^$ˆn5Oü	#€šZYe«á­y©ý¿¬ÚNzúo¿ÃW£úñMÞæõsoûÀÇ@myÍr™ÑÞs	ØMâ¡ÿqÈ7ééÆš!¹	Õd¥iuÕ[³wë¨y1ž­†"~€cxÒšž^9kµ—Õ>6¬ö±Ú¹€Õ¤ÖæƒpœÚÉñ0ÿß‰BkÎÚú½’ å¬‰Õ>«ÉUk~Þ´®ZßXë«¯¾úêëNkú:à­-Jÿðx66_döù©ØQÕŸkB;zÑÀfšÖtð¹ÅgÝ–fá¶ü!ÙpÂ ÿ 2°×`óHAkÝWVüÿ§'ˆ›/ÍFgçJ9úÇ¨Ê¬Ð•J0óêh,‘I'â‘,´&^S²l •È°Ô&Dä(öZF”³ÉýR<BdzÈ`Y”[">Áfš#C:¨ãÃi½e:®·ÆP3³¸“‰¸J'ê·«!c?xX›½ç[ƒŠB¾64Î7+k‰Ô¢µ¿ÃYS®ˆü3ËlÌ$ÒJ{{zDÌU{=ñaÇLÖVgM#ëµÈÄðBZ³~LËÏçÔ‰þàCú¸f¢ü§gÓæs(ô9“m+"¥I9n”–åËkÔ@N|D„ã_ÿj¯­Ë|å”éÌÁòÙL!¯d°Ýp-óh°üþ_U›–çE
±é ¨¡²d}4©t†OžÓËâèÊ
'ÃÍŸÙ÷ç·Wh9õÝqåÛßá\ôÈ üöo¹¿ú9Ñ.dA6nÞ¼YY”gÕK^4ZÖÖµòlu67€h[Éb¯ãNµv[Æ¶ëÒ×žMŒNKùíuÑÞÝ*v7‹Àš{ÿîf«Á‹Wkñ™â¶0hÛ]w;À¡`MNÙÆ¢«¢H6ë¥-oð40DÛh/ÝuSk2gc[ÆWs`Ì5åŒî¼Ã®Á3ýnÞx \³;wî`ˆÝ‰]îð80iñ,žŠ·p=:22ïÔœõåZ•ÖR\WGŽš‡zñú¹üœxÈÑ™:5‘#/ª]5"Âº…fwÝmÇšÎ‚S¿èê5u·z3i5Õ1gy‰þ¶ÝF(>ª»c0f½Ž“Ø¤Fz(ÎhµEMÖ¤…lËÝÉ¬Êž&•óvÏ8ªVå‚`,‘]ºc]Hžx2.©Á-žÓ‹ þL<DG[¾Ø²ˆŸ¾AßT;Õ~Ò­m[a«qŒúÇ§Ér’Öµ“AÂZAn?7þÍ3Î°f¬5Dû¨:Ö­ýŸßü‹bû©‚Ô´Xåô§Ÿò«•BkÞlì=É>±i7€4–·€dç°<H¾XI¹öÄ,H’úõe* 6¬IcAb¿¥5ý“j×¬MÏU"ã³soóÏ{€jèñxµ—ÅjûGac«=|¯û 6°æïbápxaœ(Hnš†ý{kh£†š6´¿·-õÓEúê«¯¾úúÅ†ŒXVCûimÿÀ5ú¶Ñ³1x-“K!kšŒMRãP<òF­¡³[ø„!lÏ6[&ò=×òšå‘ÂAq\š#‘’1Øs¤t$4Ý:šgKb¨D(B`³¬©¯Kdã¸f™ÏL0g`$•ÏÄµ–€ÁÒ
ïgÛHÂD@&pÕbfÆÚˆÆbGM(?‚Î¬åkBµapðËŒ¦£b¶¡\Jà§IbJ6Ì«ÑÜÌÃ—ß»S½ý;}¯A ¤A¢×BÇô­kÓé´ç¬]ˆ˜YC\!ÙÈKévd²ùWOš—mY…žÍšGX!{ÜÓðp(bbFªHf›³$»EZúCð)˜pZ§öÃkÐíÑÊDôcÀÍ¢føÌÂ·X ¬Ê
†`“Õ	¶ŒÓ+©Á|®’+ã—%'!¸y°,“ÇéÈf3ô¹ñü`Ù¸ H›V¶ê‘…/qÚcC.+ÍÏç8¿œ”2¢ö²´æ¥YN–í(ˆ3ïÎkÐÿxêÌÛÞüðþÃ¢F&ÌÎöz÷Ò3k.V¼YÜ¹—K•¶º.“Ð (Wáýtûín§~Ýnmn7wÝ©öº»kùüLqË]×(ntº½G»ˆÊÃÅ8«142µ½Äß¡âöÒF{:ê(ÔÑ…Êl¾ŠÙTW+¨«1“K¶—§~k`3Â‹i.|KpQMå’¼Üi.ãÜñÚrÆúÔÔùæÖo¬ß¨ñëÌç#
itëÎ¼kÌ¸ÆH4‚“#ÖÇjõÆ²ë¬Úùgh¹®An«õ±¦ëòÎõž‰áæªäÒÕ¯ó· ¶$Xëå8‡Þ×Ñ…­©âBh¨!X[ ü²ñÆø-Fý®Býï?˜š¯qÆóµZ´þ 6åoge&—Ô)I.‹ÐµTR[9°Û±é6„`i^+dU6Fjž?˜ÎˆÔP™¹õe­÷®’F`SOùTƒuo<fµå+<ðTX³t„´¶ÄGíàPì“¯½óÙ"¾>ŽD>ÜÞ¡
òe±Ú—¿yõuXíô¹Ó."Z9÷æ§V“ùêíË¯‘ýzÐæß,©yìxËî²¶Øö=ÙX»º¿a-kÚS¿Z„»¶|ÉDÓ®`ÍWÄJ¨uöl%4÷o†Õæ¼i…°°æ„¯=ˆ„M§Z8öI,ŒÆM¿šÉì¯Î£AÂj~¶ˆŒµþˆµ¾úê«¯¾~ù´àšÏjíEpmfkÍCÆI…ŒÅ£Ÿ@k¶àQq"Ú`;·¡#C˜ll¹\ÑZ^ûã!¸¶¿ÒçµÀ`²_VgôØÙÙìˆ5Hm g-^)­$¥l$Ìä²ðl¥ËVâ`½v±ÜÈP"“ÿGØŒ–µt,Á¤ÁÞ(åŒ	6³Dù‹ù€²„ZÒÀµaèLÒžrI«aÉgÃ1\Ëkj‡-äP6Dü!n^:Ytn\¿cò Ñ¹Ëû2FÞyéØ1ë¬¥±°üJÈÏ_¸0.Z3é"/™žyƒkñ™¤ãB4Ñšç¨„5¬½­Í…cÚ¾S«×kUTs¹6¿²¼º©ÙÿMÒˆŠ!rj¢!ÍÉñ)¼qþ*“»Ã†%s9ÒF$Ÿ×Ê“Ææœô:Ø&YÈa3…‹¬$sIQŸZaP¹\zÖHI*/C–ˆ®žÃY¹àm°
ZÔ¬‚î")ƒJ²Cçf¹Î>u¡R!¡„ñâi#CogÐÊà ¶Þä·O­”erç'Ýt|voa®¡·U,RéxSƒÁ3¥âÔÔÔVg{ªHîãn×ín%{[S½Íûî\·åN¹ÀÙþ4³Mev\þºt6•Oâ	i)ä·9ª™ÔèÌöN»Ûm.d7Ö°Ñ\î“öÁ£Ž€K˜5ÖDrÍp%§t’âoUƒY_Äèr64ð­Ñl8óCÕå»Í1ÞÂcS7\}Ò«Ý1~†¯óq€Ü]uæ#ŽÃeË.ñ¬x„úDÉuÄˆæ¨7ž­ŽÔZ Ý2ïÜXÇ}sîòÍUÊÕÐÐØõj(Ôyí6·=5Ûî,uŠ‰çÞ¨/+èD5’Ô>ŽUëÐÍjë†s1„©	Õ÷ú|“"Mùñ

µ”ekßµÔvÙr³ì¦ ¡MG½m¹¸É2;P??n&L„Gìk¹üAÊHêT³¨ò{ÕTS°’©f›üdf-òÞ¥K×®Õ¯ÝzZn@N£ ½2Hµ¬iK›Z|¼Ö˜Àø­ê EkJyóÕþé45™œÿ~PM-gM°†µ«YYó’ûoíC5‹fÈškOwÕä¨H‚ÔÞÓk!¯Fü/øƒm‚ŠØV5»Émo $Ûâ;«PöìÙleÅÂÿÊü¼Èþ®S‹T¯…ãúçZ‹klÌ¬öÜsfÂÚ¼Õbb¨¥5P­_ÙW_}õÕ×/>dÄFŒhzû2ü%kÏ=»ðì?D•1‚žÁ7ãÎZšÉ³ÒxlÓ½¶qÕÖml‡»k4¯öÚA^ˆ &1¤,KÓ^¥qÖ‰ÜÑD¶Ä¥vIø4©T*³ÙxìÈ¤óIäóøÇØÀVSöc‚Ö4ö±ÔR(­½¨ˆDéZCìF&Òk$‘äôT™rÀ™‡æÚ]¦wU¨¥Üpšuß(ß¥…5Ò<à!BBCú.gÓ³€7
!õ-Ckæòè,vLmª‰4—=¶—Í¦ù›–5›4‚T$)ËÍÈ&DìÔé°„¬ß¸R£i5—áõ‡
ù#S×¸×Œïg¢F®éSxáüù«/}k2+­ë‡½æ×CÊ«òÛ'Éi”<ÇC;lpY¬”õ2²î‡Å29lÉ$%i\yIzPÛæîkÿõuà¨‰ÓX"Å¢Óãñ8Ý*ï¾;>Í°6U.œ’æxæŠÇø~×ãÛå_ü×ŸE–äZž½yïìýùÌ=¬Y¯–æ¦+[R‰ðÿ9ÌÒÑ›Ü‹S8xÅ-‡ÔŒ{+SS¿Þ¢pqng¦¬ýÐøÌmÌ8é1z­=U´é$›à\w£¸ínývqÕ$2¶ýÛc´;Ûø]Ûf®í_k·y
Z…Ô0o¶Û.NXÝTFBo¢9MÀdJ'çš¹}Í#4 ¹®ˆË†‚ð†B>§ZZhð†`WC&™Ë'ïÚüöLÃµ"v€Á;¢MØvÃ\=ßQT¤ëÈOÃ«[­‡j¼«3æ]_W›µëœ’.q§¾^cµóQcUƒ	pÒ=óMÔn8Õë×kWêòq«È£¸
³ÕyEe­Ò(°D÷²Bn…ÁÇÔ¦»ÄŠí&>*Lú*óˆüµ8çDxÁO‘TüŸ#kªÅŠj~d,âÍIX¾R¯Û	k·®]uþ'\3AìãÞâGéEïÁ ÖlÂ¾Â}¬y§¤“:gXíƒOß|K°ö©Àì@dðçrß7[7éü-ã¯ýù‡{kk­	Õü	k¾Ñ„@ú+€ì€"¾4;íÕ¶#’[Ÿ-bYºœ…j8Lô“µ°ÑÂ‚œ5`ÍkÞ(l¡šn š_Ù7Öúê«¯¾úú%ÓZà«!•Žì¥µ
¹ ©-°ˆÆ¶m*Hyl‚µ˜†e[³•Š ‡¬=ÇæÐÂÂ|­u_žÄ!¸æUCÎk6ÙtóuêŒyP³ÁrÇ#¯–=žÉ OÊƒNdCáx¥}¥R¡WùQ¾‰ ‡Uö(„óâBFGG“i”õ`E4a6˜WÀå%=lFñDŠôB1T˜Å³‰´Eµ‡ˆ‰*À¿r³˜›i:*›"¿ßô†ù´æBNL ÓÓšDmiÍêÂôô1ÏBS*õÁ€&\{I[ûà„dYN7óœ
ÆÐÊY»¹xey¹û€ÀŠzí¡Iñ_]B~ÔˆNÏžŸµ×ÎŸG4°Ðwho]ª¹‚¶E†V_øƒÁà(Û24KdZz7Y$ï
\µ òñé &NÓ5ÿðÐ°7a;B›ÕT¡a·]@³ú0J~·]™JMsª°Îš9Í·K :SIÓE§ZÈ¹™xFœ…5)³bVÅöV±´2š-Ý+ÎÐ#¹Â¼µÎVe¡8õèÚßv¦2SÖº½’ûÃúF	‡n3F„DLÈT{cÆ…¾¶Å\æº†YñK”XÊaóhK&ª‹P	à€ƒz½ÛBéÈ*°`F°¹óGŽ4î.5šæ%w¬YÕBü5›w©»¼]Sæ\£Ø0XFeÃFMn)	°;z·åÕù:OZnŽQ3\S¡e]Ã×œë×/Ž©r•7§q…úÍÌ·Ä,‚µ?ýé›;ùy[‡î.^§9­æ¬y¡«Wo]ML\t—n]õ:(k´­Õ›Ã|jq4<˜MÚCmd„ˆÙ$/å³ü‘~ó^	›{Í2¨,¨–ôÚ%
:÷X³Éý¤v Õ,«	ÔÄj¢ZZÿødœËÎËÀ=·žl¬ÌE¥ƒzñ¤°-?¼#ŸØÞñaÍk:)ŸÕÄ+*X>§Üþ×_·È0›ï¨ù$Ö?-{<Ï§1šnBµC“û¯æ¬™QØæ^|5zÕôåW?î³Ö4[wL±Y/·è'1?‘Õ6<hÕÃñðð@4bÊ Ã‘qXmx‘ªhM¨FÓÚg~f¿ÍD½¾±ÖW_}õÕ×/<dD´¶ÍM+O­cMÖÚ³Ïªq'C°ƒÑÈ„£YLÓR+Ó´© 2ÆRë¡ëCv6I?7Úƒkû«!!ËkØDl³ÍÙ›ÏiH¿{!÷
­gš‰ýÊñÔñ1þI“ÚS “MGSG±QÈ
ìJŒØ‘X”²I¶Pc,Û(piÍQ‹AqÆOºÌØ4ï’2kægGUÅ…“7\I+nh˜ˆ;XMµ)SÉŸºøy­Zpûáƒ+—o¿§~‹ýÃÖˆ883W¬§,l”AVkv ZH9iö**¤_[?ÿZDxÆÍOÈ¶×Uìªˆÿ›lÓ²vÇ j„BÞ~ˆÇ©`HšƒA©sœ pí…^xƒ†š‰Ð»ßšzÈSÈÚk6%_òjÌL²°†wU‚×}ßL+­Ybóí	†Zy¨%}Pã
Û£´«žžçG…KÒ—®^U"ËÇïŽ¿{aZÿMS©9C—ºà7õ¼§,Šý`²yæ³›¥•¹YÊ Ks%”ÖdÌ‚dhÅ»n<«ÙŠ9roGa¤1q›_ouÆÆDlç~w‹—Uì´·züÆ#™Ú tp­#»Ld6Óf&Y»¹Úˆq ò¨‹Ì3Zµn¸H¸>Ï‘8b ÔÀX£ñ\¬a(Ml·ì¸¼xX›o0h­®ÖIm4sÖÖ&¿ÆêðÑôÊ!‹É† ®¶d°I÷k—šÉPs}é"oà®ªž‘'-ÓÙÆ­×‡²3úÕoq·óÍ×;ío&óÛ¼ÓT*>Ð?×¸xëüù%ÊkñóÆ& ŸóÀ%·—/iÓè¢s©~çŽn—†‘¸-*Ü&³MŸ\20Ú<ŸÍ°›/sÐG5O–âT+i}˜ÆÝršOüú9š8Õ®H°šŸÔ/¦½téÊ•úµ÷n,_ºux¤´/¯ßÛÒ&
¨
}ºŸÕÞ«ÛêÝ-«1ríƒÆ¨&V£ðÊ¥s2éO¿ùúé7-šíµÏRÎBûþÎ-Ý½ÃO@µ`ùdg8ó»Öì/‰¬Ÿ¦Ý`Êšn~¤± fåÑÛôÛ¦¡”¯ƒ¬fK ‰ÜD­n·Ci!Ãj¢55«IZ-X_Mj#kmßXë³Z_}õÕW_¿lZCÛÁxìÞ^omÑèÙi‰Öb\n=óI‹y¥ÖRûÄ÷P	¯éˆ:ØÆækL*u[»ÝîæáÕyMº :(Ž¡ñqž0ûJ*©Ij¯=zô¶F3
ç'2ŽfÃÃ±&OI“°?B9£§ˆM¬ÆÜH”%h±¥äöÇ¬±±ˆÆ¸ÀKèuÂ»„œ ÙgÃ´áè‰!”#i2Š=§0HÅnß¾vûÜí?|pihþwÒ[´v54åÉZÓd3pM-Wãae@kòÑl\f¡LK-bQ=saÅ.O>ÌYÛXUk4®2BäÒª>¿ý·>…j¦yrÈ/ÿùÅ_8ùòÉç¯€`²Páµ2b±I^Û¤]yäå³æÀDCZ¢†ö™!A-ýÔB¥·zzÍ7N¢7Ð;Ïƒn¯}|lÀ/ñ&Þ©rvª‡äò?X»÷ù=Ðs°°b8-§(–Nk½WIž`ý¶¹J\”f(Mõ[Sl%KÅR.»Õíi¿HÊÞÙÎ®\·5“œj`£¹íâ†£hüµEåÃWÐ$°Fy$ñ"Å"kE¬4Dícñx²ØPbÿžþ2m±ùØ³THÊm“×6_§¯Ê½S…Æ¼±*þ7À:^ÑùæOÛkí™ÅZ­ÎŸ§·×\ ±>¿¼.Î’%g7^uqõ®[»ŽŸç:ÕªKå¯b°Z#šá;uÛÙÜ×½6^Xt—v
é¡ÄŒÂL6&ø‡ñcóc¡êõ—^½üÁKWÏS.È§c¥>œ½š0ÚÏm{¡-èjûiI&
ª#‘·“I´àg¦Àž/aš5CüO"µ ­Yý².¯P÷È`µúe-òD[MmaZÈæÑÔ¾…~Z^;6áß)ÕC[wícë¬½Œ4›Ó:­–5õ«ýMÖÚ•ËW>^NŸ¾¤”xu>»¼À: il=™×X£ÃqmÂ,ìÊv«ù°Æ-¨Ô¶I‚†‰ø‘ýv…Â%kªíÍ<Ø®v0_­Å˜šÉQ¤¬E¨}$rü÷US¹è¡Z³íÁZ¿²¯¾úê«¯ÿ¿hÍjÛWÛJ´æãšB!£62§ö‡-F,$Õ‚²5ª‘Þ@8q&›44vdá™¿›o¶›ù¤jHpÍòZ`°¡?Ñ¸fôä(@”^I¥	p-Sª„‡9<ÆÃ‹¥)Œ¥4ŽÍC5”fì5#™”T0&@/ ^‹‡üŒ~«xÔ¾†×*(=<‰) øqš÷–ÖnµÆ¥óµ;µ;ïýî¿ÿà,|þ¡Ok­Ù”ü7®R 5>}aº"â6‡NE"š‡Ÿ½ÄMŠXZÜžÃ“Í"¢6ï¢Ê®89iŒ‰Èð°=zç"°V¿¢ÁkË-ôÿØ;¿Ð¶ÎtÝ8×‡Í¹œ™‹è.èJ Ì¢ ŒBÁ½Hê-[cã‹ÜHÐfd;ÉLb·•;'%vO#{&	c¹)BNü'rÜ”Ìt\ä¤žŽ÷TÛC0ñ”P…ÌìÎäÊtàüžï[+Ÿ¥±sæÜ=Òú+Û‘#9Y??ïû¼–Öì«pmgç‚£æ_¾qâøñãoÿìµ3/Ÿ#Ò´ÓÈ_RÊ±úž›Ïk¦•ˆÙF¶¶)iAˆ_pÂí¹pþ}z‹Ú®¯-¨F³:"±¾æw$t»xN¿ß'¯sÂ >MhreXêÊ\ûõè~öÙ¿Ào#oóšŠØ2¥dA|–Ç¸¡\Ntf÷§Ë‚µbQÇ+Å~
"¶w§è’+EËðÇ…	ºÛ~*“náAó/¿Ë]»ó›»k'Ó…©©äxœ¬ÔšFÎ|«‚Äí'Ÿ,mƒ<ÈGüõ“SýOï`P-<ùi:ý€áeM`Íb<Frˆ@®±ÖXHôN5–š{YÚ¸«©hdöóÅÙm2nÍ$ÉÔ±ïÖ¸Œœ¨„jwéFãil+¾»+H³3Ûð!¾j¬ÿzm»™¹[˜Yj*r“˜È™Â¿yôí©\ñ÷¿ÿýEkÿk$±ðàoö†3§‹_þ¥áE©VèNÃþ­V©¶[ùÈË¼LØe…X9µƒ[€mrÐÖÆlÜüì}é:‹Þ0Zñ!Í2¹À“•NÞHo¤€Ôª‰ÔvÁ¾#YN¬Ajó³ëV¶=QEjhtÓ¨¹vÆ5®C,Ñ÷,§™IkQ`¬	ÖFÏ_ÖÎW¤Öü¬õÖ.lXH;ì¯”Þ¯•9d—µ†m÷´’ÖŸÜo—}sEn<ã5k¬Ù›*!uØÎkU­"’6NaÖ’d@JŽÕÚJ ÷Ž¹÷¸¾³õtçÓdT¬f¬õAkU¬UT©"HÉ°Úƒo¹w‹ »êª«®ºz1ô/ŽÖ°Ö¬·fE&ä“5›1¢ß]KVÄjIÏÀ™	…”FX;’-Š¬±„¸/Ä¹Zå £ˆ;q- ÇkÈòÄf‘­SœE}QJ‰ÌOdU y@miÙtÙÀZŒ.ôB.­¨H8ó‹Æ´lÈrW
à¨\œ¸þW‹ýÈæÈŽTHÏãÃ<Ïò˜ÖVJûW¿ZÖÓYGs¶x+mÂûó^$V[®ê13lm§Õ4mk‡ÖþXkd.Šø®µfM«2¹„—Ñ‚fREìo¶ñÌ8Ógl6“ça(¶ía‹Ø÷Ã ´ÃIŽÚ¯a0F|oíJlh³¾ª²·ÕÅ§O·~÷Í=ÑR4$RØˆ¡æ«LÊ>M9ä¨Ym4–×`fž«­Y`‘Ti8t‡9ù¡},NêfWœ¶'¨yIj¥¡ãGŽ£õõã·Ï?~qNÅ›/†ú”Ž2A~åàšñf,¬™BHùC_ÑÄFÝ¦zYh¼t¥4¬vT¼/£…æ
„y6¾’£}íÔ©••~`MZa¶÷É…ë_)”¦…u|NÛï
©'©G§ús'·?æŽæpË¶ï<)dzÝ}-Oÿn‘ÚÈ)zAŸ,..d§Ë……Gý™µ“£_ÿi!Õû`q{¡ñ¥ a‰ØøïÁ¶qÃM>©”Š7«uµºAqúz,V'e¤)¯qkT»Þ­¤êÛ3Dš×gB•
þŒ]£w—¯ÑÖäË!3éz{ <@#q$H½~%ši4ëT«õ,<9™£úñw|õÖ©"«¿zôÇSO½•	å× þz˜·d$›ø0tìý÷kÍ¹Ùu^Šõ÷YY½ow_æÞ®NpsÔ–ì`6mR&à6W*ËÊŠ2h­}¥3.”Æ³ÈÃ‘Z;ª­:T©IÖ–çÑ²‰9±þœÔ~ÃIÚíè$O¹2ÈÛ»ÒFŽEA4¤•æ­óÙg«f¶•¹9¢E [ëêíTA¾C ¤“óîÜŒ5ÿæpmÏÈs{k–ÔØì‡jp™VÁÍ²Zì¡ÉR‹ic)Í)¬E+¼Ô<sëQ-‚ö˜®v¾£’‚€ÖV“$I(Ú7Ìòy_ÅX›ÁZsA†X=ht‹ »êª«®ºzahm—µÆ­Ã[³´faí•©—Dk¬–Œz7 *Sû[ÃeÚÄ•)|2ø94ùWÉ;Û¦.uð¨àˆÍ
F³æ7°’ja¼¤™aèeK\í	Ö’©EŽ€W6€ŠÅ\&/#]DÑ*×ß›¡'©˜Î'±Î4“­H–>îÃZ‰íâù2¦¯&›ë@IæaÛô~)¯t½jRi”“Íwš-ûíý}7­1ÚúUÖX»<¡¸”>|Âr©ïœøË7Î†ûbà›vŒ³¶kü5j-é‘Ãzd/Ezì¶zk-¦ìˆ&ÝHO›Í­-šõ¿¹÷÷*(Ê¿ÅË@ùÕè(å§ï¿°Qµ‰\"Ÿ.ƒÙ
ÔDÚQÔ×²‰Ù\+Q›¢uªÓ¨)"¸¾v f(ÍèÚ'¸~¾ÍŠ½±Ó'tV8<¬ŠÈAú×Ê¦ro-ÙgpM”¦»YF
¤‡Ó¾MN«"2g`M`Ç‹ÀX´Ñ¹~NÂj+Å¢NBs¼sNÊõ¯ÉŠKË„KÅqã¦ùZ+|¥G'G3$„Þ žšÊPn©)Ü¼ôÂƒ5:(“ñ“kS~>RTòÆC‰“SÙ™%,5f¤™ŸA¡¤ªòšF|j¦ºRÛ\ZªÕMÁ#nZ$Öœ¯Ïµ˜Qõäõ\5–Ì—×*õ™ì¥DÎ¬<ztêÑZ²Jå$MhŠ¥ç­P›iÞâ5Ò®Íl×°kÛÍ+äÀÉÆÉ\ñ«oÿë¿|Uô2¼‚_}KÕçG2qo¡Ñ¸5 ã$›Éß8É÷ñ‚\9±^]7­µÄŽÓ‘6u‚[ mÌ¶'´¶é|>ýìˆ—&™UÇiöÔIjm#°‘Ïj,ÆÓœ_^ž­O®^ç†öã4›ãa8Õž5BÀH0[Šò3å³´6|Œ'xÆ±Úo‰™“—6&T»ti~ãöú´Çbý4­#úê,}t¤æö¬öñÕ¯í¥X›³ÆÍ &Tã¾G!6båæa³Ð¿Vª¡¾X£àéãÇŸFz0$µÁëXh«˜ÈþŸSùsª ×€5¶ˆMÍ×ÝqØ]uÕUW]½H´Ö9qí‰¯Ýã± µC/)Òãî¥~pûaBÖš6^^›#5CiÝà¡zã.ÖÚÃŽAÙm¼ :#]4¬•Óh­/DZó»Ò¯Ç$½pVv¼0eW!‘HÈ1‹§Â±ÒJq…Ëç|$YH+’¤x4´Q	Ñá¦dø0õ¤éj°5Q‘Œ©Oï.¦kÆÆZ^”²±
„ÌØìþpiª<SoílÖZ^¨×ùææ¹ð Ö¨1T~ÿÏ@ÖZ¯5aúÅ2ƒš'(-‚ÍüP¶Ãð[4æw‘µŽœ°Ìf·1ûP§œÍÛÜÖjMFcÕš[Ã5ë<Ã{_šöµ_mm¹³Ôñ*Œò¨l‰×`û“dúì¾G‚6Ùäv¨âÐ$F
Ã“µá™Ö&éÏqÚ^ŽÚnKÍç´¾ÖO\§qÉ-Zc…,èâŸúMfgéXé7O0°×$‹k4Û¬¼±O”á-Bâ­	ÖrÂ6c—Uöˆ€3ôÖø)öëƒ„jöðe;ßøJ…Tzaª’¢»²ŸŠÝå}='gTÝ”ê±LÖ¬1éÚKëLp)sª‰Yû)ŸÌÛnjRÆZ¸òÒ
ÌŒÅj3¢õ¥%ÂëøÈáÈær“y×ª­ãÐës$KFrñZcfaíÑZ£VÉB¢kON&½…µd’yÕw·ÕZøÀ­pÉ}«ÍÔd’ÁßšêEªc`=zÄˆ¼xFFé¿úã›×MX6ÉÏÈcIÐºº~˜ß_ˆfÖ«0ˆvfó_*³ct‚ÛôÖFmÎhë(Žlý·7ÌàL ý¨å‘g8­§ã}dIÍ™jÕî ËjKÚ_\›µƒÕ\´È¾¸¦û³4ÈÛÖRÓA ,`0ÂâkXM·üÊÆ–A^<vãðû´ŠÂjÀÚèèùßþgm^}çÂ5,µV›¥ÖÞ§¶î¢Mv'ˆåtw¨ö\l;&±~NÀˆéiãw­™•ãµHÄ®»R`¬ZƒL¿<ø•Eµ¦r‹`ªf£¶±ÓZŽE£JÊµÙ"°ZuXSÃZ…HþªqÕ¤g¬öI·a­«®ºêª«c8v»œ·†­ÁkS¯béKqz¼â©0j-Î­‡áØAa¤"F$9n!KmöÁ¦XMòqmO^sÀ†Çf íâ®›¼6Ì×Æœè¸\×z=Ù¾FI—u©„F\‡‰oŒVŠãN˜ýõ»øÌ§Y3$-á…Q(Ëy]gS ÙËg(²•'—W‚¿ÇWå²6‚4lÍÂ¢7Î–¦*µknVëZ­­óó-c­ñšŒk­9ðaÖL‘~÷ÝÒPD9ýöÒ	V»<Áü×á]-ÿ>¡™Ç©8bóƒü±é £Òn«h(V­7kWX*¤N´¶vV•¥Ö5®L·~õáÒÒ³°Í^3&'iþ>¯Ak1‘!¶ËÙ³ÎdS›×AIØöï#ÈmVìri¡ê»A­½öÑÚUÄª`[»:6Æ÷Uu~ttÌ®ýÏüáa‘À%¸&®»`J7}»°F(¥ò!	…\)JK#»eQ1$å†ºŠý°ø‹Öäµõs.èoCö³èl“¦ù68t©x¢0u2"väþº(.‘Ïdeõ&ý_XÈP©›/`ã&!ŒÞà©2uÊ¼»Ò¢BªœŒ÷öò³Ä<ÑÁúF_uf ÀÄgjøÝ‘’JqË‹…R,šV©kœáÇB-—l{Âsáœ÷À j"ö»8á³Ú ô%XWkUÎ¥¼pfG‚Ø|`M»ZŠB•‘cURQS‘õãëÔý®EØ¬Chk15Ç’Åj'Ÿà:°mOf³Ð8m(»ŸìÃžOiïw¾¨í‰j”@zËüü?óËëˆIØðöÚÞ” ÚºöÎO[·àÆF:t­IlúL5w/ÂohTø3ô°&cíóss³WÕ®öÎyèÍÕ?Ú/t«qÐ‘,‚°iå*!Ÿg®¡ýPíKŒ5[,5ÒWƒ$È{àZÕMX³¸ÆJŠ™#7’í™ÆÃ¦üØÕ@vÚj{–@þŠáÖ`´ºL^?ÍÈ1PM÷ªiY3ÎÚ¦Y«}¥kÜüt‘OhXûo]uÕUW]uõÂÑšFd;Zs¡ˆÿ
:tèP%©ÿ›q/¨±$â¢1@í&KÐº¦ÒH6œÎÝ}J²—•³×¯µÄè5a›nH¶Û0U‚xyá!ïõ×¡|6ÉŒÔlšçt*[Î§
Ö·G&
&õ/¦<ÒÌEKeí‘ö˜èí/‚gñ0b:6ÔÕÕlD"ñ1OF‰÷£Å9²-kW„pYñ˜\5ùjé¼à.ë)Ø¿Ò¼¶SËW6Z­[uêççÑ¦áÓ–Ök_Ö|VOOO—€,S;lÔ7Qž˜(MˆÝŒÝÆ‘±Ë¾ÎÁuçX‹ÕtÀ:Ð™Öæ~Ãáš«ìlF5:ë7OëÌÇzüÝwß=¦î‡B#©'¯Á@6kqZƒM™#"¶‰Ë>j¢ÁsŠÕx×èYS‘–NäîÌ´€Óöµ#í 6‹ØÔ*3õ¹Ù:âÔä²9/ËÐ¥ÿÛ6EÏSöZÖ„ù·ËfaØ€?,îƒXíƒ·Œ_6n`Æ²ew˜ï¬!;‚5ÄXÓY<3CnÈ|”†2z+rÐ›bÂDŠ¾É¢aµ£GéoL$x³†ãÑX6}tåÔIxLÎL^ªyãšTˆw®L‘7Â)x‘š×f£ÖKS¶y»O¿20×°år9I*T'-§³ÉR´tð­ƒÔãF*3…"kk'3)<3`-)œáÁˆ"YP„M)JGÆšæÃ{9Dµa´ëÖ¬3:B¢G:žÊÄ9¼f™j~›X­KÕ[¼hÀÚÕ]šÕÝ	š“:¨Í1['´¡$òÐMw{3Réf i»²C_v–Ú~¤f]5Mž[Õ$‚ÕÅ;«³¦ðq™Ì(gryïH´¾;"ŸmG×Ú‘ÀZ¦ÝgAÃèÜ¹÷4Ãgµ¯ûn\f¬Ù"HÁÚœþ¶V[­ùKf ö†¥²Î)nì»šGÙ­ÉPs{NÏ!5Çk
a…¡&gMé"6³Ÿ»Õ L6äÃš[çÃã+†ÓÜtµŽAØû¥@>~ÌÒ¬ÆbêUC‚µhUÆšhVÛúÕjS‰|[M«OºE]uÕUW]½ ´æÇŒ¸Æ5É‡5Ãj¯Ù’ÞÍ›‰8t«y$f;Øn²c«!…qÁ6"¶Jãi³þô¡iç5k°À&b³µf»?œOÄ†ubˆZ¾Têá?ò²Rû“]ÈÃO½LT#É?/XS#ÎšH-«,’”'¸ÂŽãŒa5L‡b®€ã&"óRIØŒºGQ(¡tÿ¤X,©c‘[JN„¦C¥ù0!`^cÖ`7±GýZ«±P¯oðMÕ)c’·vI¿(§ÌLžhM:‹¦§3ãÓÌ‘»¬¹Ø}}ZÃm4±E'&¸¶3—ÚšŒH!š5ßà7Q™ö‘ÿûn°Í.®Ä>`»×ä_Û^\]mÕë«÷˜ê¬Öµoè
¡àÈ˜œA8$Yþ³WõŒi`;}ü¾ï°	ØäZ“írÙàlzšoèÌ)Â¥]ý:ÕïSZÚõ=Ôüë|_ü-ÖëuÖ\p+X}C¯““ÐYç ägŽœ¯õk€åYÍSs¸†kfè€šØ¦‹|&XÃ7+æLä#¯#Û4/bcWHÔ†Dr¹•¢kñ©ˆ“¯k@ÉKùŒ¡­Dº'åÆÈ¼ûa¥žX4Ï' —x˜ë=ÀÛ™¶Ï”7'Ž¦5ÚÝþ2!‘ˆB‚*V±¾i41vt[ZÁ+æ½^fÁ—@(ü§•7RÌ3p°Ré}ÇÃKÓãEûe^TcËÔX,¨±ËAXÀdæ+¤rªw`µ6fWÈMñ›:Äpu½j‰OÆ’ŸÆ©ªì´uV³’}	 6­¸Yu2[gKâ™öõè¿IpœE7…ÏŸïÐü¤ÖÙªFHæ*¦šÎÌã§-Ï.žœ‡Úöž%íè¨ÝÑê¬¼ï{_Î^û497LÏª~€„jŒÇ¶¬faíkÒù¹Õy¦5ŽÝ}çÚ…ÑÛ·o»ÁmP¢k]ã¤Oiíãœÿ÷Oèy¨††à5Ó6+Lóÿ=±w/"'M·@ìÆ‚‘kãª76¦w£½“E:S ·¶(š¿×üt³^…Ö£±¨¦«²ÈZÖ>«Xk`ª¹Ì~ýÒ±›ÚßUW]uÕÕ£ÿ¾‹Ö\ÈH`®‘	©›TQ)¤5…Bš¨‘¸³u¬Ámª‰¼É"2¤iÏ_lIãnãÐ¡í‡OŸ>n‡lã5l:m Í‰ÿÛïG9‡çOÄC)]ò÷DKJv(åj8KÉ¢HlQÙãzµ¬R@œ)h,°›M±J‘™… pãÌˆ5êSÖcŸÏ0îÁ#Ü½<3à6}Ÿâ¬õ sªpmª^_8¹\æ;º@ÆÈ*S’æçæôí˜ÁÓgÄjX«©R¯0™63ä”9xö²)cÄ/)q!n´aÉv¨Ah†ÓZ³>Ú1·
ØÌu‘pd×›õÍºfkÕëÍ­§K‹«Í{ßü†rÈ/e®}ã^ûÌaYé9Ûf;É²æÕD)¨O+Ÿ56c&m”ë”`Åæô9L³œö|G	Ï$._5ÖµúìÆäò$±Ë-Ï]âÉ"èÃ†·üg”¼I¤ft§XÎdÆÇ}-ò·½kÅ™Ÿ}PT2ˆ¼–6ÓÕ
Ùq0ŒC+¨Ê*ðÕŠ°ÜQÚØŠ0Y–cc­°Ó™ŽAõI!i…K‡B@U2“+ô¦°³¸óñòàñ´0‡Áy½ [2¦TsÌ–)ì4n©,Ç7	–žlCÒb=¡ˆ¶Øh#¯öÊY0íM•žßXð
é<DNr6«™ÓYYPÆU3xFC7Øø}E!íqÎãƒå3ç3úJ.&ùÍ†Yž[N­œ` KeUªW¤jäÖU‡hìÕÙÓëˆôbv¢›¯fë„6°m?¹!|ÈEÒ¸÷‘#5—ÿ(R{6~|‘§¥ÈUÕ>NN®¯ÏÎ© r_Tò=Ÿ…‰,ÖO“£Ö!Þ‘ƒ¦o éë?°vzƒXU££ï¼366º3?icã<°viìÜØù±=r ÍäœpcÏîpg×1$²ë÷÷ËAÏÇµ!uª‰×ì8•«¸Ðœ8gfóO—F>C6²Õ\²Hû l¤ ªÇ[URE¢=˜ÑÂ5<g0-*Xû¹Ê g6ýÈ~c«ùýjè[KkÝÔþ®ºêª«®^HZs¸ömÃ5®Zã?FÁeô®U’"¶dÈ˜g7C!ziž±"Õ_g§W-dfeWjk‡~¸öt{fm{ë)á{ñš¶ Ù`¶Nh»Ý×wûÜpŒÔþè(4¥R)YÊÃOjÖ’†ÂÒAyB5^„?
ä¥ñq^ª—±-
åŠãˆG“š.EUí¨eS+ik }$“ë–ÔN>Oà/•—_¤ƒ“3S¿[¨øáß®XCs ¿3Vi* ‚¶5«ËÆ<»|v"f‡©±	®¥ä§é„"ü¥Ãö¢I×¦fS"µ8[‹òÝS6k?n×êõÍæ½;$ù×;*ƒdª×cõ¯&§¾öÎü%ã°!æeKâµ·w#Ä†{¥K(/Î ï‰<¯@¹œÏ’œ/Úe­–?ÄV®½(À4ÇiÔÐ?‚šÕ¼Ñê|½ÎÕv½R›_ÝøüãK­ùÉ÷–7øûE°½qõÄñû¸¯|A®îcTm–xÙðý¾÷qmÄôÙk,¶Ï>àÜt¾&±ªÔØ´‚E´ ÒÒZ´’üÈlAÎZ¡Ì)D’G,¬ñVÔ/x#Âü©|²$÷_!ÖBY…„Âñ2BÁjÅŒ,àþ£™(§µÅõ¶ôcòÓÂù^’N#=rŠ­x@™M‰rK[yúVà W×9ÉgóKÊ9hÎ“Å2”Æ××FŠ˜?ˆGuàáŠÆ1ãìtR¢þ |Ø¥ÂžZÍ¬“º£ksŒ6^:`í
pÆk1'‰Íê:¬sÐ)¹¥ÏÔÎlÐæÀ­CÁ#n¾ƒã4j{‘ÚÃifYœ›œœ¬óN¬­ÃksW÷µö´~m\¢1Ôö3Ùú¢ï!ã­á¯÷Áj_üá‹/^{íí·ï7OÖü»w	2;Ï?ç7ÆÆÞ¹víÒíscœÚm¨Y³¼f!¥­ÒžÜ_Õž/Ù‹9gM·º#sléT‰Yú2Ó`µ½B e«¹dWéöjËÍåA”Œ'M	$‹ÚÕªÜ+‡€µéóM¸ˆPí‰ê}}{·›ÚßUW]uÕÕ[	ùàÏ$ç®­Z3°F-$¬6õc®E+ÖWCDyôØ$›1‚hXãÎÖÂZ˜3Àí%èn¦1ó£øÚööÖö#A:d'°mÈæ¨lƒÛÆÆNÝ$o/‰Ò:•å¿ó9myÕ=f
I(,P%u	J ?ñ¨@MT–JˆÕ$NÎC1.æ<CeÐ„=ë­m’gPƒt¦'Â` Öx˜Â´Èg®$è[k6[­°­1q­¥‚¦Kï˜üþÓoÿì‹/Ä9ÈÎ›°Ñ·Fäác’üË¤@6à68L¾æPÛ¤¨ŒásÃÊ‚t°†ô8K@ovåŠ!µ©^™!g°F\E}k¾ÖØÞnîØv­‡¿‘jÞq¯OÛ/J°9‹`;|ã˜¦Þ%ÃÑ÷Â=ƒïÃ(lÛ_žz¦PdWoÑËû:jîi#X›¯~¹¾º:9øëÉÕÕæòGŸOò1¯¡«Ö_£’lïû¨/ÄLó	¥CZwMaþ¤Vº¨‘ŸXn+ó¬¢ãŠ98¢¤1¢˜Gc®­pÌƒÖd¡•“©´ùCvEVâ9!ÚxI°V*— þ‚uìx{½Ê‡¦KùG^<¤7çÑ\!Ýÿº\­|o^#Ý«b:ãé×^”c/å%E›¥ˆ¦cÈ³Òh	í“)rpEõŠØi;Å"»¾$¹Ð‘	¬Lˆ),óÉ 	ÙKë¬iMóg6•Q¤´Ö¤œzS¼ãõ‘Ån#ÃWN`¬ÝŠg:£jU¨6'Õk³¼JØWBî@œgñ±­“Ù:[Úœ:ñ,`4GiŽÓÚ@M¤æ†ª©GMÍ¿Ãó`ªÕµb–÷Žt XÁâæbßî ¶uPÍž:L¤5Û`8öµhMÆÚÛ÷AUòO‰"£ç/\[½}{ttã£|¾ûš,^ûìŽùjlµóüˆ{ëÐ ]D¬¦•HM·¡`À«cÖQ°KûìñÂÊgFû‡@:[­s¸šbƒ¶ªÕåÏûldÔJíjZ*¨*R›Ùü¸fœµOoA5Û¬†î6ºE]uÕUW]½È}kw÷œ¸fXÍÐÚ+t¯á­%Ý¤æ‘å‡ñh$·°¦Î5$H3ÉýÜº…ýºÈ€ßÖšOëUC:Tè6ˆÍ!
 íöí7Þ¸½¹9;¥¼<åfyÁšþÄh©\Pícœ¶³˜]©0
ihšŒV(_%Å?†ÎZ†–#%ú›ê?Å#ìâ2ñH k)0.Oò:{‡uRY&8!jsƒéøC§ŒYû°ÕüÛßþöa«¥!f‚5Ú¬öÅkÖÔó%X#	ß$øÖ_'¦'"C‡éLãpP°f'`«c-ÖÒß¸ÆÞ®Híñ!vß¹iÎYÃf«ÏQ«Æ4#ûŠÒß·w–ºõø7«-<Î‡ßkÜ‚ÐË^ZÂfGlK";§ƒ.¼¾¡
:ùè"à¦n"b0¬<ÝY%]„õÓþPÓ*XÏÍ­6g~þõäêüò`erui~™ßÉJM‘ó×®ÂóÔCÚî5°¤g‚öºòô´+†t´ö“7íèµÅ8ÂiÅ•âŒ63¥6S„´u½ˆ–ö{×¢!`M{æƒr*ìU)®T"$N_Ú1^*‹ÛËÛ.Ç—¦=1f0ûx¹'œ,8B4Hœ,.Fño³xïÑWÓ…R4žêÍäy+{¸jXº%ŒbyaÖ_í‹…9àG
œ+ñ‡+úƒZÅÿÍí'0Üæã•qÂÔ`V0)..&aŒÈ£#©ÄÐš9Í!`­Õ,¬‘)ÃôY#¥šIÁÚ­êÀ-Õ@Vùü+€·]’¢1ðL/&¯^}–µÇ†ÛœjóÕDBöÿóÄãVA I¨YRsj¶úqir}nqqiuvõÎêÜêR}ÙÅ‰ì7¹‚CqšYs°KG¢I‚4—Ûo* ÿ¤nOÖ½GMŸiY{¦-rûßøåõƒ&j9?
¸\˜;qîÜ¥K·G1ÖÜì6G‡æÞ>ŒÛÂfóÜÔ~§ç›jþê†ï¬qƒÐ¸s«¶ÍVã¾K¥eŠjcµww‡@¾¶‡­f+ ›[ïÕ«ÑØðð`4&#ZÀ«T¬mX›Aªƒ¬ÕL$2åy·›ÚßUW]uÕÕJkÞ=ûÛ]þV“s­2uè•W^¹‰”ySQmÄè[3: qèçøÚ¬ãf+#_zéÀL³63³óxëžãµ`sÄf ÛùÑ±ÍÍÑ±*õe
Ã¸ˆ÷ˆÇ<ˆEkPÕŠq­e—ñDª:Ó…¦’%Xc AH¦[ñº* Õ—†€°”-}ä¥èÌAI/‡ÔlY3";i¯n;ÁœÉ¨c›/ kXkŸi¾¯MÖæL€?°†þ
¬‰ÖLBÇÙò´5V—'Êe`í,Ö”ÿØ711aRú‡"†Êúl ›2Fd´Ö>2!ÚmŠ¹]‚køu“•æâv£¾½ºsïá—O[­-¢!å®Iâµ­Å¥kŽ™mÏ]P)ÑÆfu†ö0’:ß™Ò‹2ÚÐIßCÿ(=âÚ‹öï-rœ&q½JÚüÒö¼õE(‚\ƒÎ6¾¾üs€sþÓÏ?ŸœäX¦ä_îŸÇƒ­ÝçÉ]äo³ï½AÏVC
×¤ ×dHXC„‹cL­àT‘"XSM$ˆ•³PV¼¬Ù]–r,ŸXÌ#BDï;ÄgŒGc ˜	‰ÓÃyê%a¿BJƒ…ÆqP£%5±•Ôˆ‚õ3`±žPªx=W(eeºeòåéD"›§)þåK)[D«¾˜_Á«pÇ‰òA:Õ 4+qU;ªåZ¤r¤f§P‡Â*§ôÕã;k4bælª'
J+ƒ†µ®r>ƒQÇiø ©g¨eíÖ­+Uíò:k¸iÕ9ŸÄ„Kê8„¯Yä±qÂi?ds!’ÜöÓîØIäÞE–š+4ÀÍõõùÅÕåõÙùåIþhÞNPÎþr ä¢]Y@gNÇá6¦a“Ô¤IÚR	9|ø¢ª éXƒÕ~üÛK¢µH¿ã™åSF	»½î×;²±«0öÜ³ãîhÓíükNCZ¸ÝP$?ÁAá£öl²Ô\¤Ýf•(òŸIÿçƒ=PÍÍVë°Õ>B wêÍV}³JÃÚ0é"¼í­¯6Pá‹æ«ÍH<#cí‰¬I·ÖmXëª«®ºêêÅöÖþ|×Zk’aµÝ)þS’b!®a®á®¥â¾‚üGßZãH‡b6â,\å¥þ¨R	XkÂ¹çÆ¯µ›#¶d›¤,êQ­qˆg{_ïã¯ˆ…ŒÅ
ÙD¦ïI¥!´lÉBˆùSÖºÊÛˆQïÕåoÜ“{–yõz¿õßâ–ÎˆòWüž-ŠDì&S	/©lT`M=¤gÉæñ‹"°Ú¬ê37ëÉä¯wìwQ‹l0ÛZkj[;ÖØÑØ—kfjñg'&Î¾{¶ty:©H`mÿLFŠ-…Œù#×†mD¤&ÄFy9Lsh†ª§f÷"É®¤è\Ûä\µÁ$åÚ-Æco}Ã(£–18¿³È¼EYWµ[î%hÍë/Ÿ»xÍ1ò‘íþ‘3†ÙŽ˜–¢sç.^´Ïn¨#¢ƒÓP§‚ØjU‹Í4—–¬3²Ô¤õnu›RÈÒ{Ÿ®.®n,¹mPoº|
_3P‰þj_»O§	ué	yŒuP5¤6„Sû"fÄÀšÌ `\Ëa”)ïQåÀ½iQ©Y¯m:ƒÙX+—ÒÅt©<nam„Ã°úä”Õ«6ÞŸÖ/©ë²4] Íoº<‘L¨ø‘¼O¦¯çÊ*§ÕgÕóFi"Gá, ã†ÅjÁnÐä´Ræ­ŸüDÆš[n"µNT“©æ\µ°BÕ&øKúÆZ^ßé3XsÒaÚÓ{\q&ùpÀcå' TqÖªWhŒä¥ä…«Þªóz6ëóÁ£™Xu¡w Qì9µS[{É>2D0Zì¯:Pk~©i öâÜz}uÖv©ÍÎÎß¹³¬¹^5g«ÉýmN"´3>ºÛµæá£¯µRãêð±s6^Ëš(HR ¯ž\$jŸ­;Í®­£cÎžs±ýÕÞßÕöŒll¶È7¸uþ–(êO–…3òH¨æ‚E:šÕÚf«µ³ÚcéáÓ™j­Iúç®2`hM¶šÆ«!Yj š/ZÙeµ®ºêª«®^xZ£ŽÄöis{ò­p­-Ãß¤ø¿òh—í&×¤²ÕHa+,³~	þ?øÁ´ÇyÉZèfwÅo•»²×:mb¯á®…=Ð¨$ÓqÂ½ñD†+elŒ¨™‹Â³ˆyJá"\ÙÆs¯f³&Å˜~(.eÒ¬]P ƒ`ÍKdËgøÛXK’ùÏÝóXù"/å;ky;vÍ3©z^<ŸŸ©}\oLe³VƒjcyãBËŸ7ýË¿ž¾Ò\´£±Kù²W†³ö=1ï¾[žœˆ	Ö‰ƒÖ¢ŒÊFv¶á5òäÌ¤µè8G‰¼–!«ªÀ­£uM‹Mf3Aç1Òûa·J­q·Éo®7žÞ£âˆ|ÈÅ/·¶~÷˜´…-;!øÞ7î0=l|(H‘Ñ&Z³Ôvúþi&²Ý?rÿ:ó¶¸íå=u¤=uÖ¬¹5s5?O(ßfµ´ÐT¹Úvó.¹(›óK­fË¸¯Á´Ö×ª‚D;K«­k;öbÿ^ ‚ÖNhòƒxíâ1ª!½þ¥ki^“‚ ÅCêê$Y)Œ@Ë‰Ú@´~ö)ýƒŒÆMä#ÍkàY	ôhm:Z`€v!€µr,r _&æ¦ÆA+ÑÅ«åà¯qHßÌ§(„‹NLc²¿šKÇó%¢M)Ž,R™Œç§5€‚ÉR2£L2ÒS*á"(JNðÍä÷0ÕöE5CË šW×´„B¬ìI/,Lôi­ÕøŠÙ¸G‘°`ÍÓ;þ—³°š2!©òVÖjÀZ]ÆèÒ\½)krz{µÎÁïE´$±Ö‰d{ÖÓ&
Ó²ætóõÌ’u &9NÃR[\ºó›ùIYisuËgëu}â${Ñs‰-(‡”´Ñq§Öw™lÇ	ë·´f`ÍèOÁœµ‹‡Ï½ÿò‘ûþ5Åö3vA—\–HÐ'^4ûfíh-¸éLà®¹Èçêz¾±ä‹ÈW“Ú|g«iD–~
> Õ\ýã^£ÕþÑVƒÕ\·¿@ª)KÄiDó^¨±P‚ïÂ–žø¾ZyVû¤;a­«®ºêª«Sÿò??éÐ£FP	‰”2‚ µ—^1¨?Ö’I`M±ýÂ!¿wM2yÒ¬âÈlñ›Æ‚Kh>eªÎCnlÄkØ:‰ÍÛdus°\àONªœQIý²8¢==d˜ÛL¾RÔS$-@˜^úÕ¦©n+d™k•‡Óý…T¦ø*Y…	l¶ü&£­hÂBŒÕæ…m$$þF"©KvÄ‘ò1ÎÓ6K2d J³a2N~×jÖ:;ø‹ÖÎÿö¯¿üåtzá­kù2ÁÓ´öý÷bˆò ³Öà2hmBØ%3å¬i‹–MëÈ„=ÜÇ·Ö`™Ê"ù8ÖöæZÖt±n¯ôU
¡Eª2S»«íüªU«V7ëK_.Îk\ù—_r¹¤Ñk”Cl;öXmµ#óo­~éë4=E§5•í´o¶=“zÇ$×_„:9­³ô‘E¢)m³:uR°ÆE~s¦Ö˜ÙlÎ×—7û?ÿüÓúd«µ¼¬2È±KK;àÊU£–	àÄ_½:zÝ??
Rzx«œEï~­tƒ×¸»¹½oQ9Rä.µéOXëÞÒâ9ÃniMÊ+©ºV‡´FþhŠÝ£…h”¬þÛò¬é#ÙÎ¦':³ÂqÑÜõb¿bqâzóæ3vZyŽ·¯1ÔX¢¥‰˜á!›ÜïåÇ¡½‘7%Cjæ¶/ªÝ@šœM±š¹´æmÄÚ?²Ãi¼ádÞË(;2í{kí°–ãGÇv¬‰Ú¼ˆ‘?ºÍòŸæùé]wenuŽž5Â\©QlX»R_ZÄFo.-n×›uüQ‹QH;Ážä¨Í5µAmÏÑŽiÿjÂ4vH¼Ãã³ë“ÆÙe|5´>{ÕßY^ß›Ò\´‡3ÔK‹ó°T‡¹vÆ/€fì¦=qšhÅk0Ñ¼"Ð°fb_Ò—RF®½³qÛùh¶+Î¡¡öÚÜ5g²­ï†J6Ï×ÿÔ”ÚobÇ-°íYøg¥Ô3Ä 
²+Ùœ¥†žjn¶šKÙÚºÇÿÜ›Ë“›¸jÜY¢²×”=¬U­µ&Wmfíãg¨¦Ôþ ’[—Õºêª«®ºzaõ?Úhí‹ß¹ö ³sMîÚ+epÅKjî…>‡Ù|‘8œfSEDk»aí REbÄ€oê[2×žþ…A¨Oi1ßò‰mk«Íbs¼¶Q›<?VÊ‡$zÉu M\3‡¡ž$<%n£?(JÀ>XEƒP„½þWñ^®©*†„t<„"MmêcÓur
V“pRrÅ\\uù<›¤Èg-Aä˜PHVúz×ø Xø~k®¼O.´v ¬5ÁÃ±/Í©ïë¯ýëÏ^VîÅG¢5;¸íÿ²w~¡méºßp®‡¹=¹ˆïJ®K#
›•½Á7²æF5Ü¾èÇÉò¯ît©LCBâ¡–ÕIB"§AÈmìD®ã Ù©‹œÄªdCÑ†…Ì´Á¥°Ï÷­•/Ê4Ùå\NõXë¯dÇ–Óõóó¾Ï+X“HŸ/æ 53[Å¤ÆŠlwÐSþy$ÀÚxBkêâä¨± lˆŒI•öµÉ„~$¸±ÞìÖ8}¦sëQ§^M6§†eoiôš–­µ§ÈÜéÄïÀö0ÄÛloœ3±0˜É|ë¶"zób=ß^ä*ânäWÃ°¾ÞÙ[n7È³l\/3}`œ»Ý;ÜóßÜÄVÛ¼úÙ½{›ÊÝ\µ5uB6èØøk$£hâ‰(‡•åO~qÎFCûøJœ6"Z‹²!)Š¾MMø°Ûcˆi^6‘Ø­é13VM"„3Éþó¥™l†ô~aÆWVçó¼:š·ÍEÇ1~Ú@z›"Eô‹zßü©_íy= ˆÒ'ÎtdŒ+“8l3N›Ç¶òô>ÃTte"(³n:ö¬©† ªçQM‚Ô°Öpù¨NŠ¬´²#Öt”ð™‡–ñ—f'z
!-ªñU3Ö²y]÷ØjÂÇÞ@¾ªÖµ…~P[¤põZ¸´z¶Zo‡$‘.“ÂXç=åŠâmyŠ=³a‰õÔgcááäØLOê#Ö2«˜Ó,¨YXc$ü;K‹õÝ»×VÏ\Tê‰‰€ª¹íóš[E¼æÌ.KKÎQc­E¥ÍT›LÅ–æX††rÐ°vL~ó›o;X;ñÞ‰…s›§ÏŸˆG«9(*F®šƒGûaÏôŒÐæ§Ú&Ae1¯YV£ÕõÃºÑj~rz%ÿî×Ó~ò‹¯q¦aµŸèªjš­Ök«mvÝÚî†[î~£¸~Ãj¹›
§IÊY×,ì&‘ý¨‰ µ˜ÕúÓ°ûê«¯¾úúÙÐêñG¶ÒæB*dDq#»–L}ºa­™@H{ð4k„•…5àÌñZÊÔjím M50Æ-~ÇÊchã¤³Øb^'ÔF*ÇVa¬¢‹ll7Ã)¨ãB¨Æ’$Ô_gÊYWPŠ˜‘•=cíi¨M\ä@aŠOÌVHk2Õ'¸‰Í§‘PAk–ÆÌà5nj-Úå³"µ<çò¾µô‘çå³nR¬‘ãxXÛˆÖÔâu/¦µ#Ò¼`í}EnK°Ö,™ÅeJñkÝO'}ÓÆ†o8
½•DkÅQ=+F31$=·U½Ø-ÊeÔ¶U«ƒW»[[ak²~ëÊþñ`‹4ÿG²Ø˜š­ˆÈ?¡ï/Y—œÅ&Æ2|šàgb#ß8“Åì:™î"‡i’µÞ›l³6ÕµºöVëLç[jSµY¿sJ*7Â;¹;›››aWÌvá`7ú
xí„R8¹LÄkÁ5UC‚k»ÉEð’AÀ;…¸pH`Z“ÞÕ1£Êe­¬°°†°Ö”8Â1øµÇDøÇÊš×­ŠØ^bjÊÊScË>)"*í‘s«©{˜²VJ¤	õŸÂ`Ã" *R¿G˜šÈóé€Kf>ëA/G³
åæ54 ¢3Öèe®žÂÞ¤’/ þç² ý¸\âj_>„ÏðÙqÈˆ_TMwQdÂöršÏsò“qÎDµV»†S_ÏNÖBìµzíÚà¤`m©Ý^¢m-Îô·FÍîrØæ·y™êA6=rlæ ¿ó×ôáÆ^kÑW¾»TßM.Fò™ÝWW?_¾º»®ˆÊ‹Ð^^ ©ÕS4B.çÃÙjo‚i‘­¦%JƒôŠsµ¹9`­84>9têáÉ“'ýXÃŽ~Ë°’ÑÔíj}FXfùÌÒ™£6Ël!µ¯E¯Õ^FmÕ^Ò²XÓ®ÆKµ=°>?)†ÐVò_m÷@¶Ø£þT³ÍjT@:[Íu«Ýªw„)È(×¸Þ‡<Ä6?Öÿ‰¶•Ê•+­;Àš²Eà4Ó¬Æ€5É4ìë«¯¾úê«¯yZû›@-ž­•hÍµ®l±¿°I$g„2Hç>ƒM°Æ¦«)»_IÖ8Š¶lX—ëFç|fXM;ÛÄÅÀ*¯»™ÍZ­<¼£\«ìÜ9²o@V }_&³ïõÌÀ°±0
†ÖŠ¾öu“lrûé	"À?Ÿœ¯íy}$5@Yœ‚#³†òv!u§‘ö’c–NGñ"š¬¶+ªSª`žt:IÏw§~Þð[ÒŽ¦ÔŽãÙÙ+îzH•æbw)ÏëüpBX#XSY µÖ¸ySÓš!!5DÊÈ|Ö£Ôœv Å©"¬Ø#w$?;n	R#G“Yh-g7¬5#6î·ßñ¤lvÜ|$Yk†Õš¸TÜQ·`«­V¸½}muÃm
RküåéO
‰¼ô}lÈÞTZ^‹Ò ŽƒmÇåµ9wüx„o‚³F{®ÁÈÝi/EZ³RpŸº™êgCöÚÍ+W0gšmîïÏ<4)èwîœJzw˜ƒp¦»Ô9}ºËý=A#ËK‚5•DÒÊ­ñÂk”CÒ.¸wï±?€k§rÅb6š¼ö>°ÆE°öÿå¯Çï‚_ 
k%CÎƒÃ{¦¦§¢ÉØ˜n¶MÍv®EûE‹=næ"ÄT®Azù4WHV¶Û®$Ý†éÔïÔVF#ØŠÂ’KCDú]îm0"Ð#ÏÜ.HÏ’• ¯@dPš’ú§õ Z>FµxæøÎÆî*ˆVÕõR4ñ5º¦ÙŠ iìŒhMãºcXû˜ôï|Y¾.2;IùgCü	1«qÌ	Ÿ•®,ÑZ•ª"[¦4òl^äPˆ†µÆÒ¶0¤±¬™Ë«æ¬åtN8nsäK{‹uÇhFòŸ5I›åúÂÓ¯76Zkk!Œ¶¼\—“vuaoí”‘\ýa|"^¡Û6[ä°=8Ìö³Ã¹¹¹¿ÎÏ¯hü¤‡[ôð¬æŒ5ýØ¼s\Q>$›b°^8h¿ £³x/þƒÝdn»î3 M´}¬½ÕPì«ñ¯Eÿ¢+üœÌ>üphh†ÐGIˆÆÂÃèGHÍ¡ÚÞÕzm5ýž=¸V˜€=°ƒá™Ô·kkÔnWPN¬öQµ¬2w µë5`5ª¡úýû¶ ¤.ÒW_}õÕ×¿´þ´fÕø›VÑÿÿzg®	Ö­Aj<þøÇdòSI”·ÉY“•fK á26u$^‹ÖâCvù¤ÔÎJ³³^ÞÐÌÿ½ŸÐGõ`k{fÃî±åxÝzLØ¬WvîÈ€_ÀZ¦ ]#û^™Ð}³UÉÇÆ˜‘3–Q+ù%L°]#Ð¥fÃ©4~Ú¾)“(bPm³llŒî#ÅAŠÖ’¶1-§Å‚ÖòlÒ˜#$DÚIÙŠ‰$ùüiÏ†ÝF¨j¼Õp‘ \ÓýÖÚ¹ýÐšrF/ÃÖŽ@Á-ÍûÒL/C™c©4jhÍU*)Z$¡ø~‹f*–Ÿôa5{J°f"FÜô5^¬Ó(¡ó¢5dµD-¤ Mqµîv§^m…ŒÊÛímœµmj#3÷ ŠôØ¸¯úž•µÙ„¡
Gšs¦ÛL•§Òp#B2=cfØ±]ØEŽÑ¡."\&kås»áî½ñUsy™ùÆzS½Níe¾É«¦ ¬xÊ«Ü!§XëPkÊ'¯.¯ƒ%»´té’ÜšüyÇ½FmæïŽªr7 œS5$r£×l8¤ô´íƒi‘™¦a‹¸Ô™WÌZÕºæç9Ÿ5­k…ke8&U£ˆg«ÑÔ@Rä…8 ‘4ÊBé,ñü+DÙdÆ€µ ¨³	ü41‘§.×ÌÀÄI
¦|Æ¾“‰3™›gPà4\f­§þÑ¹jÕâYvonl°¦ég£Êu!–RãšÐ^Ä…Ë6˜Ê›š_}ïhóÖ^áëjÄšù½V2‘B q]ÙÖLÕ3Ö2_’#)aÆEà²—ëUÎá°µë×êbªÕU­ÍÒ¨/¯-µ•:"çnÃ€›–º@7WÉK$rˆÏ«cE˜öÕÌô÷e.9^½°smõêî3,n˜.µsläM¿Õ\žH/ªYÅÑÈÕAZ\3ký^f.—´ä†|/79z2‚5±Ú…/õÃ²ÿ ¼¦ã›¦jº»xÎ˜3Ôdµi»a%7ý-"³{èØíÿcÊZ¢7[$rÖð¤=Öóúñ˜	øÁJV„k&¨ÿ%#°ªõd@ŠÕøgd+Jy€nmzžXmV Ö4eÍæ?ò¸Ã¥û‘`Z»n‹ ]ý#²ÿ·ºÿ‹ë«¯¾úê«¯mZû?±·†,‘ÅöZsæÚƒke­€5Ì5’!_K}*1]’È˜Â¬Éf™-;Z³Š_À6~…öÀµ&¬Ðn†n5Ó!…‘bÀ¡áZ—x9ð 6 ÞÃž¬	–´Q6¤ÆÃ–Bf½À$ g¸Ïåu:=0lÎdSixM^|…Ã½&#
o-SH'S™¼¹Uâ#ž\†§Åp…¬FdRäGÊfCY3uØúpÙ‚Ñ¡fwñl%åõ´¡š÷0ÔBk‡ÿã“ñ‡°Æ£0ÿ¾¬5J!g2ÔVŽ3h­T4´vl”&6” ì1®†´FOF®™Îé9‡jÈFCZ†³çµÃ28dŸ¯Ô°Ö¦k­s³Rë´ëUh,£5™1Ç¸†8¾û~k‰ºHp¨7bfèšâÈ®°SS[O§Z5"ÐšÈPcÁE©–ciíîZã?=n<þæÆr¨y×ïÜ¼y3o^>•ËÍ¥üÜÕ3w€µÏ6O_8zZdwúÂ—'.‰ò‡L>$²ù{W6äQŠ!å`rP©|¶{í••§¼&R“"^{—ñØp`4…LXŸQ¶?Ò,uŒ®Á<ñòÒ¬q)ªÚ±”QÑ`FÖ› ˆÍ6’)Èy¢ÇfÃùìÌTFÍ–šâ^À@Ã“+e+%å%ªãÓ†=q•ÇAaâˆ”œ~¦ ÒE€hvŒj“ª¹üÍ¨ñ!Ö…K"?©Ð‘44Jv*oM§a«‰åùé§%¿ËWdÞNXô¢©Èª×ä8és¤3Z_»&X«×¯ÕÚÐ»Ølg!·å%ð¬Ö¬…êak.Ý][¬Mžm›rÅz«Ö^»ËéWAuòËl‰¤d/–åb@³ˆG>i£kj5\¾û9íi$é,_¬j?n,*^ä)ËŒÿÏ´æH•å¦³EœsçªÅÄ¦Ðþ¿‚,¬OAk9¢\FÉÖbV3¿Ð°U÷/J‚µ8¶Ä¥@FŠÑÑ¨×XÛp¼^^ÉA°ÒLŽQì«™:ê?%ÅÉâïùÁXZ‰ØÌ®_@j?ŽjQ¤1åÖBèÌÿ¿;|*øÈ)?‰ìGÙj¶VÅæ[™IØMéñßí(ì¨òúEßWë«¯¾úêëçáÿm<o-"µçÍµÇÂµÖ¨„”¹&Áj¯îd0”ñ×"[Í(“mv-—i‰Å^kèµæVX(o=j6nmµkµí[$û?YÇ1|êõNýP¥¬Uü)ô¢B‰›Ó@·Ã Ø õ3^IP6•ÁØ¾lV¶›¹ý5‘‘#@òwa^ÀjTHb^Ð‡6ÀqŸlÂÜ‡£L&i(­´Ù"¼|WTì•Íd©k£:2/oM°ÆI”Ô 6_e™Ùj·Ölªrs9¬wa¡ÌiSø&aÝ‡¹W³´V"À¿ÖŒµ&ÆLŽk³Bä4q-g‡c‰øŽŠ›0­9T'‰…µ˜×$Çk|"ŠOiåžÓSUÀGYþÔAÖ+•öZË+‡[ß‘¹Ÿùaþº‡’(Š$z\3ÌF#ÛöòÒÖ÷ ›­ŒÔmìq‚•ƒ Û°ÞXkcNEíFa<àº-kD÷Ý.ZÝ¬ÔÕdœ5ÔøõùWßšYo·ëÔËÕO=¼zçúÍ‡‹‰S§vO]½ª2È{_8­„‘Ó_^8~Â6¼!Ñš¾'ƒæ/Þv¯1\àä'ŸŒS‡Š»ÉO`kF´ÆôgbbqûIÌ¬†”'BU£ê“.ì6BþWòùÂ”ÌÜ‰)$ç³Y’H%® n²+Ó3Y§ @Ûc¦äíBù@Za$åëîCbSb~	ñéQ¦*½õ²éálMàæ1>øcdè>6¦UÄjq¬ˆ)R©YTs	œûÅkã5ùaü\¯ê‡ƒ°Ô~ÆÊJ…Ø[û÷ø1a¿O}}®p±šOa§M‚ä¡E8IYð›¿U©ÊjSRM&®Õ5Þ×¥ÏÃVm=(ó¦ŠÍï.Ÿ¥FRpµXäI€½~V°&¬c¥ËƒkEˆ½TÌÃ4¹=SñâµÙØ}­{(¬µÀ«µ…¥»«5Vgê½ö=ê­'4Tf0Í9kÑÜ¼j7»‡Ú\6°6'V“rü°ñ"·UIÃÞóÁƒ LgóØþUÅ_ò^Ei½,‡Š¸'\ïšíçèå fVöŒ“~½c\Sô¬œùÒûóï‹Á(ƒ±zj§éÀZ/©ÙX@:TsÍjÕf=vÂ«‚5~Ý‡¿æcÍ«V^{íU-¢YØÒ…ök¯7oªÒÆõ›È~h_}õÕW_?Zûß0š“5VFjèvµå§A#¯*Ç?ZšòS‚µÈ.£“Å]‹M6=+imwtÞî¡òk¬¸»k?xÔL&+•ðÁƒv¨nªN­vkûF´S«úpTAqŽAÖ¢Âql®7¸ÊÊ+Ìx­84ÌózQŠ4Ü1hml$9,‹+X ¯ smÏØÀ€bÓ#Ðšþ†€ôÍHµt^‹tòQ(dŠoV³	#Üû¦îÃø¬Cp¡Æœ5ÔiÜ<ñ½µ.ÌÀ¸æ·H'¤}ê¤uÖæ˜´†+£€‘nµÀ Ú±\Q›iQóÇqÒ´¬O²:À®ŽY»»M³µ0è°-fß„GŽW[­ªnÝ[­V¢Zït¸¡önvnm!ã¡m-­q%k©ÙRãP"Ø_àö'Š˜l*<¼ïôÄA(óáp	ÐxHm Mb-L‹dÌcŒp–ÛrÔ®Ušö“Æì<£ÆëeÜEZsòÄr§†U]ýìá=“@ùöÁ`íË[Öw±²y#üÕ/š)]Âµý·™LþŒîVÛ 93ó¶ò•ihí]éì5ºÂt„·†Ef®‰ô`’ÄP†¯q4ÍZ¾˜æ¡e€7’G‹\zšx=Ã¾W˜à
$8ú]Œ	|3~'à5CrâÌ µ¨vt]ÎÈ‘ËóD65$šRâÍ0Æ0ðÅ.E¾pP˜P	¤³Ô\ý#¸'‹—W;SÍ¡šHíìÙM[Us	ãã¥%Ð¤ïsýÂ`’1´öÊSY[Í’\á«±Jº!kØµÂ>Ð“N²çµøArh²z-fµD­Ò»Ö(7ÚM¿IÕBSüÊP[%@àj×Âv}I°¥KûìniÈf† mõV³‰àlîC|žyÝrr5N³¸Ön_]Å¸[0¥gÎ°qzI¤³¯žAµžÆXìÊLûì—Ü¤Û|Œž%¿5˜›SÌmkÞ®ÉÄ“Qä[f 6UÇk«çŽ[]Ägã_ŠÏbHÛ°a&’#7@þLswr‡=ÂR³	zi‹óúqÃNÏƒš+|ÆTëE5Ãj—¬­VcéÔªªØ90(Zór„@ú•Ê¯	°2ù"•²Ñºh­‰n
ÖêÖÄj<úA}õÕW_}ýÌbF^‰ÊrÖ¬»ö”Ö0×^Åa3Ùý“Ý›(×;"³ÖŽ…5ÇmšÊ&d«41Ó¶š©r6·ÃrçfØ)ƒ•|!½‹i(/#*E{Càû"¯Ì¾ÌêÒDO0ÜÃh*(ð*ÏÃ“Ÿ¥)_ƒÕ ³±ÌŸãñÉifµe1ßÈˆT@Íkcy'Ó¾šÕTK™4÷Í š5ßDè-ƒ4a$¾Oc[³[ÅQèˆa®g›&CµM§É¹ãíG™Ôl¬5õ²Q»Ó<‰ÖæY/çË•P;@´‘¬‰¾<EANÚf59gÚ p(vÜ8ëª!ö aêãóÚ³@‡ZµóÖðÙ*~-ì†¾#D»ÍÎòçŒ`µG€Ú!›V’ˆG/oýi«Ê.m’x ­M™m82z¶½ˆó°FrRÎÚR£Ñ¬ë¥»OÖçW~{¥L±°V¯47_š;%=dbÕåÏN>¼wïÏÀï…nç½Ïa#·.]ZBÛ— DbiÔ¼f3O5òKF¯ÉIænRé™æµéÞ›Q|ƒwµÁY×>V§Z>0[Â[¾ÍÈr[É¦¦‰ ñJ2Õô†
Ù°åxEjW¢8¼zJnmë·aŽv +ØiXÀPž•]`bû (|LÒT|ùì*ÈÌÓÁiÒÚjhúÅ¨öÔÎ¡ýµþ„hMmŠÐ€uGh‰4è#]¾ŽÖ„kqçšÙá»$èÄi-)Y;Ùúj~JÀækV¶?¡½¤žšŒE€?„&(S¬ÈrÍ÷Ëí%hÌÀu')w\U;#´Å[.GŒ–¾×îê¥ÎL[‹}4i)‚5ÒI@¼å‹µF›8“¥Eµ;¶Î,àëžÙýeý³xG,r7E‡£bmX+ÍÆx57—+òw$ƒÈXÛ…±v’7‰÷ˆi_X»H¼HW3Ý7÷ï¿¸ ,ÓhÔZo‹ÚÆóÑ†>-´iïeÄ6Þk­ÅÒ¡sÕ\dÿxårEÛÝÇ§
Øz'^°ç,5@-&5Wÿø<ªu\dìÝoÕo¶({äÃ¬å µJêU¿Z‰$S­¼®Ô¼Þ4ºoÔÐ£Ïj}õÕW_}ý×œî÷àÚó±³¯
×DkJa¬Á[{Å¢RGÖ4ŠÍÈ¢›9Í&†µ
#¸Ûd`”+ëA>Ü®•“á6uqOnV¾ÇMh"*¨\Ì×¤4îV‰†|/ xRºÍ1$ÛÓ1wÃÎR,$Åéd:32\°¤†}‘.ÀpTxÑ·ÁáuT<iÝ8æ°É‡+à±"ô¬Å`HŒÇV¤úrßxdÂúæà`÷ûó—¾ï6êíZUÇ?@ko]°´¶÷áÃËÜÒÀÜ¦+¾bÏÄûïÏg5BM¢9	XƒÒ4;Ç«Œ¡[ìÄ÷YŒ‹ü.Úž¡ñJ¦sJãH/P—‘4}èŒgqÎZl´U=¿ÊM}­Ñ%r³Ú*“¾øèÖçk[TEn=yòÝ?`6ÛwìYj³#ñ¶ÚöÖš(l{ïf©­s‰Ém8Žl?!š`m[÷ÝrÐÚmNYsDÇmU°iô½’õ'w—ÏãYZ—–ÍÇßü×<{í«£µróój8{­=¤cM³…ïíýóŸ¿<þ½7ÔøCª°«_Ù¶Dˆ6•³®¡7Þxg?•¨¼‡}"¾ˆG¯Åöš£µßØN­? îñcá_RÌ£!K+Ò]i\¶_­L¯p•ÙèÑ=?°×¦xúã•ÀƒÓ¯4­nÊRàëe.’€3¨ŒÖO3˜%3`?l–À[0-e>™"…F²þÊ4xÆ Š™wÃ8pÐšC5“*âL5a‹T#õ¼uöÚ5Þh;e­(X3Wð8„éEƒÖˆ3EOiÍ’š5Ö²<o`-0é§|
²W]li€-ŸWÐgXkR¼ÇË#g-\f¾Ÿ²bâágCvà·Åå:~§×À¹†*ÃL‡QFÛ@¿ÖBh‹!´f±¬BoÖÚ²ç€º…U.µ°ÞªcæžoÕ/ýxU òÓqÍ†@:pëýpV—àíÇª ß4'Å¹@Ö©äœ…5¦¬)¸Š¹ýæ›çL×ñs‹'NÐÙÙ9üØ±ýüzáô;nÊšÃ?J:É:4W¬ùeÊ _’)T­‚4çŽH=¸ö¼~ÿRª½ÐU“­Ædµæšª{ô}yj ¶šÇ@˜×*UÇjÖ«i×‡iU‹q­?`­¯¾úê«¯Ÿ!­}û\1¤£µ&Ë?¥ø+iZS)$Üf`m§Ö=}kâ1mœ”´ÕYËw‘’åWSµÁä•Y *_;;v6ëÜqV<5š	Žà¤ˆÊ$9¦ÈûŠ½>ÆyCp;wåŠÞN[A®F@=#*Ø™¿À­ec#©$Ñ"é‚éBÛ5OkY#L;ÁŽZžÜÈ<Ÿf`mF/Íó-DnZžç9bÖØMsÏZëÖWOlÖÏÓÙEaò‹)­ÿòÂ3§ùÞš*ñJÆÛ1´¶ò>´¡¹•b¾7»sk&:Ä°¡"jý"y™Š"Ù§6s>OÑ$/%:Ò3}n|!n©CEøùƒQ£›A6k¼¾*k-AÞzÕÎöªP9—Û·ÀínÛíÉ£ ÌNUH>ˆ¬ÁjM¨iˆÇÆs[B[l×Ddq¢ºŠ-›a=nÇj
¼Ñ•¸tãq¢/=i:4{¨Pº²® Cÿ5ó—ëõ›ÍÍùÅÂÊ|ÑÒÚC£»ïýyïŸ^ø’V˜ÎÒÖù®!×Ö Æx`[”6‚»eCžÛÿþa#&ÊßÀröZÔ¾&}A%dDkSï~øî¸E¤4µâa¦ýJ–LØP™ÃJ]Bi0«¤ì~I&j%¡Ž›Wâ
Vœ€ÚKäˆ“äÍ.áq)”Tæ[%Gú´R±S41ýÓ™ìôo>üà÷+TC~ðûWŒff\ ¤PM³»nßvÈQ­’ÏVÎ»V•7+x*r’Ú°ØšD.dÍ5ñšYÆp|çKö©|qŽª_ßk“Öì¥Us¬±ß¬£†zânø/ã¤ÄÅÆš4ÿ³Ív\ÿ|~ðl½ÖjOÖÃÆúÕÚ‚µ+íÏEpÛ‡Â3ñLAúFh1ßÀÚRTøhCKˆ–lúñÜâ*×l£^fš ®ÚîúÂ™¸Ö‘ËKÅü£õ’‹}8Å‘ý*~tÜæåù›£²÷œ’.?<É lj¾½ÿÁƒ‚µÓ˜i
¤tø8Ÿ²yâüéƒîuà7«õ’šƒË—)¶Ô~ÕXlËÚË£‚µS‰ÉÜ\žê€} ‡O9Rë­ìA5XÍÆõ·;TüXfÜ}³¼c'|’ûQ‚G¥â¿V‰U&­“Ø¿¾nÆ`“Ùš2ÔX°Z?´¿¯¾úê«¯ŸYãÚ/\($jèqÿYw­iÜ5WIÎHã/‡EÕqªˆ–§½jlÇÚwâEöåfAB=j‡÷¤óØõäÀ¯“T;92V@¥ ¯Pþ‘Fœ’=L
`m$KcìÚ9Tœ	<V)“Jv<™Îf÷Là~D°ë{ÃÙ¼v’|öÈpø’Òœ ã„xÙ‰_’)""³™<´¦Àùî|£ü~ÜcI¬Õ´ëç7+]`­Ó†ÖNœÿá¼5táíÛ·)ÄƒÖÔ7U27BGL¾ˆ…µùùbÎã?åvGƒÖ 3îðà2náa6Év­EUã¼Ç±5:ÝƒHŒg¾)ÂR^Ìk<cÒ¹[ÜÐ&+ô3%Äm“p[bZ[oo·ÛÛÛÝZ¥íI³Ö¡úk&Gf[OBìtw9\5¨FBÉ“%¬v\tRƒ{¦©}CMIFlž´›ë!Á™÷¿92U­v³Î$û³¥ÿ¼2‹1º²ò—¹>ú¨8WÌæççgS)]¾|àÁÚÞ£o½púüÖ–¦;œÿ\ðv`—$\SŠQÅ™ùÝmEù°3ïŠz¯‰Œ\8ä×_üfzÚ ÛŒfd×(’ÍföLÐ•¦ÃŽlV­ÔÐ!ÝóTÒ¥þó~ÔPâµc¥’`<àI`­„Eê‰ãV¦_/Ìû	àiÜÓåÅ«ó~Qàœc`Àô|"`¨ñM˜HYjSÓÓø€¦FQ½nzo'#TÓœåoC‰,õúÅ˜U©­x£bt®XÅ(®¯Âµ<ŠÍ5ñšû²¥#EÒRY©é³.´¦b9?Èû“~Vi<’ós#å;íÄ‚Ò´y%É0‰j¶8®5Aõfsîj¶‰¡fRE8nBþÕeÞYe„.Ë¤]ÃH³‰‘J|”3w¦•h…ì-¬.´ÄhúÄ¸°´8.ˆqiã?ÉTsû.¹#^R,ñJ[7›ÇaÒçñƒ9R$\D#Ñj‰¯vŒ‹öè…wÂ1
²_¼¸pîø‰ó±£vüÄqmcLÛˆ÷Ù¾mzÓúõüO7Ö^4ûÃl*Ã¦îz4qùr‚ygsèˆÑûV1 ÙµÕGjÎT{Õ:6W=êl3Z­Á?,úŸ­ÎIOÎšmáU|µâ`­%T«ÕDk°Ú}daTc¯Ïj}õÕW_}ýÜ×þf'®E"2ùŸÜµYÛ»6+L±¥krÖè`syvka-ç¢“1ÜÙï`±òS;È¸K©¸r˜zÅ¼IëÇPNp.¥¬îŽI='ý1=œ¡Î*Ãx<t+åÓÃ»LÅYÒ„@¦äL©°‹Ð>1Ú ó±á; O'Sé¼BÌùB¸mÐš0låã¬X®Àç)F/i'³!NRÉ†€:1žÈM…<U	»³_)0‘"@Z·¾?µöÞiÁÚ*ñö&äÞòî.Hþ‚5TRÔâWÜÇìÝ•æ`çT°åFžjälÎ£½¹¢±ÍÏûœ’£Æ'pEò*ò¾‹ò²Á›ˆÓ”ÀF_B^Z•/é7R­ÕIˆL´ªšF›Ÿm407¶;a¹nmS”º^8~÷XÓHœ³í-‚þñÙ™Ô‡µí[IræÉßïocx<zd)mÙ­^µÜh,ÛÎ#›¡åÛíÇÔÇ5¾YYùêÆ¯Š‰ú¶ÉúìãÆ•‰™±©•¿ˆ§ ×lvn®tÄÕA’šyoïÞ½¿»}”T½÷.Än8sóµ©„¯	ãÙè¶{í‚^nGÊyrCøÏ{	‹€"—i“ïTø¨Fµ,µ‰Ž“Ð­À9c LU¶Y´Ê@•3YiœÇÜ-ŽŽ&
½¹ø ØÇù@.è¼çÆ~…³æá°¿5 vðtgd®ñÊé/>(yYåŠ¬¼Â,8±š«TŠä‘9~âP8(T‹a­^óRùd…¬\Bn˜8Jž,ÚAvlG#½k1­9sE:r“×ó†òÁ\qH/±=kÉ¼*va_Z€¿fí3þ”"|ê*!ÕÛù,¬éw
ÕÉ¡A¶²OZf9Äe“Œ•ze½cFEc»ì—©~U–c­M¤ÞHNS2Ë4ípû-dÜ5á’„…jÁF­5^«ClgtXÅF”TRÚ“öø{ÍáYJÎSë]ýsy¢Õm»Žm5/ÇYË0[SÈ«yøwG¾µÿY‚µî¹…wNkâ¿ý¼Ï¾óŽÙÛp–šÝÆtìHÿ<^ :zyhÿk ,²K†ÛNŽ^–Ã6Šûìx’^é5Kj{]ý£sÕ€µ¨ ’_´6:ÍÉÔ
’¦Àã7;ZMk%A–+ÖV[¿^³³°§¡FÓÎVÃXkÜï³Z_}õÕW_?ÓRHWÙhè—˜q1$°æš×\)$þš…5­U¹Ãd³°æ¢û]ý#Š6ÏqÊÁX÷¼¡ú?ùŽCÁm˜_¤}Šè3ß€µálhH¥ =ÂÓùfÐZ>CŠ¸ªè!ì„ÔÈð.PN“©üX~@_ô‚×»FÒ —%¡bË0J+•Ìaš<ÅÉ]ÐÜÔßW>oý58k’’!Ù×l6ÄSÙCü4C¦­-sAA$°Æ}Ù—èmÚ¦lÈ}kGL¤×T9ŠÅ#Å ë)D®§=²-‹<2ª[*CköþKÃØ¬;awdó^œ©C™ƒ2×¢“ŸÈsãù`:WÂVDjœq«Þœ=t…;¥fØ% !ì„ëåæ!`êÉ¶,6È­ÑþöoLÑÞR+Û#ÈìîÝÿxð7aŸßÿæÆ­ÀDkOÚOl—ÑÝ¥ðqCÅl4º­!¶6Õ7îÓ´vÿ›ßþvýÆãCÕ†Ft7uëQù¨©Â%ü²Å`î”UNsÅiYÖ~	¬‘Û¬½…RFÌ5"F¶`B˜^†×ô"Z³åo¾yÛŽ^ã¦ÔÜºîµçc¾ˆ†ÿ*R±"~1½"MP‹˜’Õ@‰¤\vÄ…¬à¡Q	ËÂ–ñ0(†òzáþŒZKra&©³4ô©>R°¦ÁØ~
4Å<w;’-Ëwðû|þ•é™WH;±éRE2üPW7úÉîc¶þq¿¹?¾(- ÍMþk7Æ«×Î–±Ò‚b"*]43àÁt/¹Ká"¦f±Ç[Cr¤%~]¡+t.ÈfkzAàiÍâ#:ê¸ö|å›Ät6”h?r°ÆWLräÆJØ†¼Dk}6ðiã[ÇZÃoøY›½¿´ÖC®‹õ °Öw?«Íe›3¢t»­†5°l|am8#5´\ô¯¬oT=Æ\¨’n<RÂîþ3¬¾€Ö±½Ìfåv´YFz¾˜vSÊæœÍî7ñ"—OÀY3±ýoï?x\°†N„Õî!D³˜¦µ#5e™ÄUŽ=µ˜Î”^@jŽO-«±æñE©ýlŽb>Ks–Øœæ£í\j²ÔbRs¦ZŒj.™Ñjô¼†\µdrG*E¯mY«*’,ÈÙ8°ÿNùºšÕ`µ›ú5¡ñÔª	ÖL!dßWë«¯¾úêëg9qíŽÔÐß¯9ƒ-Š…Œƒü#Y^ƒÖâöµOe‡10;Æ2I›ZsaZ,¬S©Oò‰–Lq RóIy|;Ëº°™i¸a;wh±
SEh¿‹é>óu\Ž ™S_[:?ã%”°‡FR$'‡‡9‹;‹	×ØOkB±ºØÒä“RPxd>™…êøi¯ïJe­§†Øà¶)xEmkùdkºa½~U(Ìv;ø À	þ?hÜ°¦®µ£¿<F!$ú«ëA¬˜„÷>S†˜Žíù	{“eÄ°l(­(ç-ŠÝ`5¤'	nÃZSÒˆM‰Tz†mâCÇ“~ÒÂš›
’“U¤ŠZk²E…š`mö«æÍV­NJd%PÙWX§1íIƒþÁC¿ýæ[úÙÛ&Ñÿ´FU$]lÖÚßn?zÄHs\-!Kûq¸fÜ4"ÛZßøª\W±ârsöJãÉ“ÇW®ÔBÈíÆW‡ÖŸÈÈks¾yŸ;yhg~¶bº}þ
(ŒÀ&&¥ÛÞ„Xíåd·oc¬Qyž»^¦ñ•ÃÕ0$¨bµÝ	oÙømkÉC
×ŽŸ>®ø5¯^ã–4—³¼¦jT—¤@Ü]Lk¿1Èö5Û
°9QäˆG;•Ì*u„•Ì&}F¯eÓ)†ÿ)%…ÓÞ¨äP3_ ÌŠ\;8¼žwN $Þ!-kÆHåß“ý8–Liñ¯Ì|°2ñt¨Ú¯¢©jJ)ýQ¬š?Ã^äö½“êr›Ü­CÞêe ((z\ ÆP“·ÆeN‡eÊÌq#%®I‰íH‰Üù’ø¬8gÍçül0É) ª,ä'ü6›;‚Öwh
qB©ÁlLfóòA­¦Ú¿î˜m´A±VV¦ÙÂ¡
¿¶ªMèQî¸.°S&Zò=çE¹BìŒ1›±Š•xÁÔk¾Â‹œ5Öq‡˜å#LÑ*ŽÓgéu×bÐb}òöác»sÞè±qºRa5ÁÚ©¹"—íè(&¨ñ@éX“±&X;ñžŒµÍ‹Ý?Û8è8°‡õ­Ø…ý^ZÓ7)½ˆÕÆãÍK\5‰OÆ'?QÇZBbÜÉñÝ'OP­°6# F§œ¥ÖCj½­jq$œ&Tcövy‡OUÖÚ§ú7^°æWG+W#«}¤\UA®£´faVû;ã<ÀšÔgµ¾úê«¯¾~¦êm\k<äïfdÇ´fˆMÉ¸j³¢5²×^ÛùéŽO‘†®ÅˆÖ“)FÓ®îgÅ¹‘‘T>àªylàµôN_
L¤`¥v¤A-ÎÙK0¦ä›Àyn0å]$ò3ÀÚÎ±©ŒA®¾4,2K2¶¢¡j¯Ã|:ÎLìI§ùtL4‘–7‘Æ³.Kk~6©mª Il?ÊUCÑ4*žÚüþû›³åðR·<ûßìOlSwúîGºë»˜5²C¬,#Y’G‰N4’7HNfãFH jeÁÆ–¦4S‰òÇ”cDˆ¦v~·­fƒ¢À„06¡(šÊm•–TõMY“V¨©`h±i+ÝÏóýž“oMiÕýœÇöùg'1É™éùøyßçíÎQù‚ÖÔ¸öç¿~Ç¼¯ŸÓÚõÊŽg«¯žU¶£§·“*€4Œ¶š*ô/åù@"¼Æöc§ÕøKûöÒËf<pgaáMSà´£›îvåMÁ3rÖÔWŠ×n/'“ËS““SËÓXkSÓ3
ö÷Ç¼2¿i`mes£9ž,v?ZŸ11$+PŸ”³µ±ù.›sMF`¤>D7É}·4G‹@~…÷§íi9˜™SÐÈl¥ÜîÞ›¥Ëo¡»ú¨{¯ü°ÛYlvÛAùÑêd1éQøLCjUI†Iqññuj û¼B"ùµXX¥œ<sžßì™Ý5ÊM›É6L·{ïá½ÍÐÞ3™'›xœâµ«|Þ2•},ÿc'ø…™r¯šF¯¡žœòËj`cB6´&^»<~ZFÛ„ü/_ÎÃ<ª‡îEì%J$9'™‡n9ž© ÷mï^2H”ðhÜy½yL`ÁZ!Y­“2ég¼9HH/u;‡xÇŽÓjZ‹`›Xàéâ××a5UÕ	Ô|rR¤Æ2©KWÏ#&Ÿ3˜áêÒ²ïéÛ…Ýd†±däy«}°›…5Ï§2Êðwo\	tôJ5ðÓ´‚BYé”º mÚ#@]RÒziiyiÑ8µè±~V	yÔzžmuK¥0íJÞ¦GÆ¼i\7>ê˜jBhÓIŽ6ˆ´Q?Z³==Âæ&_cZ1-â´jMæÈrþÉÛo“¥¢Š~je9hsrA F{ÂiØ°št8{¥–¯Á5H°–º~=ê-T\gÄj˜jBšõuÛ´æ"%-‘EL¦J‡Qö`æ/‘¿ª±pu“ó2ríùW\ˆºÞ­8Yjô©AjÏ5ÕzÓúkÍn³o›êiýŒ•iRöm	ä®]åÿ­MY-"‘Zû‘	ì7ÁÚ=#úÕ~+V¬X±bý—šk÷"=y­9^ëI†Ümš×¸Ey#»å¯‰ÖTýˆÇ6©±Þ‚5´e­…Û¡³¶]a)6ú÷÷§}ßöƒÉ7ãF‹EŒ òXòÔ—±¨yØgE`-³=—¯jÚZëØJqå»s§"ÑÕü–ÑÈá
Éêß»8'×¬´w<—‘&ÃËBÓ@,õ¶•Ô“†«fÒy9—¨ª¡³å2´ÂeŠ4î,PÑdå­_[ï¬s•Ò!Ž5¨ÆˆfUBž<r„y_ü#°!XCÐõ³? s;Îý >sTÆ`ø$³€šDC°Róp#¸ÖÒ^Òv­Hô°š^5£¡›ÑtlrX›ÍŸ¢J.%fKh_U¦Ñ(H%¦éÉÙéå¥µõ™|0Ó\ôq>6Ñ×PMº‡Ö:3dl,lBi@ÜÊÚÂÓBI¾YQÿÚGÒŠü´66@º{pÏ6uÛUÿŸê?Z„p&góÞÌÌý™É£Mþ«Ý^T5féËr9ð0#HÒ«Ñ›õµæ
Ck6 =«"HÁš8å“O°,üñ<Ã½—Î¯¿Å•œÆnwWÕÔf™°O?›ÅµuñÚUe3øîÐA6òæÍs5˜°‘zxí´€‰BÄ­îµË8l§[ÃŸ}ðÙiÀ<h~i¼DˆNl&?>^JúKaËÁUES¼üèÞ!Î=y²¦èQ	úy½³´àÕ8#1ÞðßZ¢³JPKûµsÖZ¤ž„°y¦ue})ãfìÙCþ#ó•ñlù7]…ÔÔuµ¹¤.¨f»932=s{:ðmu ˜†6™ÍÂ6i¹i6l?U¸è	Ö~†kLt†ÕÌá„èùéDj+1$L…L„>n4›v“Ë¥ÚhiNQÊAý(ðÆ0–GÜdM~Ý´­TT ìH’O‚”mêhFË~ýLä)R‡/ÁŒkTµ_HF°fÅZFšg¶ÑoŠ‚ŒÖ[ŽZ¯Ëet‡›£¶Ÿmd³Š½‡ÖòÅÚ–ÿ¤îB3\á•SQ$<£å:ãÕ–,ÂÃÊÐ™¾¥KJºôÇgSF´þEYvýegMHÍfÆ˜?Éà‰}Ç¬"b;|ÝèbtGu–šHÍ™j=õÑl£M² ›™©¾4èïQBÁmû?ÒÔ?rkÖ 5îa¸Èâ]“6¬i¯&NÓã÷±¯+V¬X±þ›K!®9õ]û9¯í®‰Ö$XÁkÜ8Â^3ˆf‘L[v‚¶dŽn‰­åHiô=ú?õˆQ¾8@G:Óÿ‡´…‘¡?P*5]º%|9liXÏóñÃ*¥¾>ˆÀ÷ê9.G=‚K²Cd½U&þ¾whÞCàfš€ú 3¹u¸„Aðr¥âåkšÇ¦ ¼œØMEi__©åKŠ/ç«È1—3Â ×¾}Ackëëk8k\–YSç†Î}ÍÆ†Õ^ÅX3	þ;'Ð½VÐdlò	BÖÕÝäÂo:Ô¶”T˜ÖæšxÓ¡‚ñÜØ´J˜M*ë¼17ËË„aêyÑœ1á(IZæú÷îâôÌóÈ‹……å U^Äg›Zì¬o~4ßYS!dÛXètŸt6Öhe#ý›•ÍoWº¼fe…‚D*m'ùäèÔÂ½²)OœšžZe5vTàî©fû_“µÊÑGíÙzUÕ3Í©ÒP½À¿ù"it…xºÖµ±½¯Ñ(‚µO$…àÍætó|³½¸0ß¹·²Ù}²zt¶ÆS„Ù\ƒ× .*@ÎŒ%ƒß4þ~Þ‡k®R›8ÍÐš•–©ŠlA
ÅÓL™øK§[¾_½à0ºØZ5]ý5»ô§?¥u¦ÀšNT?‘ásJ…1S»%#ŽÁ ­×iOÛQa PM°ÖŠZÕÈíÂúqi.ðà
YIý²i.1¬Dã~­½³ôÖÌÕ3#Æ	®8IF4€]¾1°6fL2svÔS•ŠpÍ)Wµ¾XÇ’µ¾]Úœn†ük!p™‡Kë‡ãR[–šY¸™ìÂ5›M)‰x¨N[dEbœ×Df’_Ð0¹¹V4?àÍWõ’d`æåöy¹c´HUªþFkÍ€Q/ž9bC ÚÑÙ½q$ÒÇ…zuðÊc²Yò¨hgÑg9‚±vìøÁƒ¸Ák¬Ïjæ¯.Ýq&Ý‡n3¢²èmIî->2b–½ùõH—Ùoãa	²+BøëXl ÛÏÅáP3¤æL5×ª¶Bü£™ý3þæ¿;éûM¯/ò½}>ö¹TÌV³‚Ägg§ÂÄ~Ê7Ú3í(òéBÛŽV³Ÿ Æ¬+V¬X±þ»sF­9…&›ËñïÅ5«]¡¿¶K‚Ùà´]ÀZ(šKaÍckøš}N‹L?Æúüâ@ÿ X–’µ–ÏE¹k¢$ê%‡NdCžTG®}_s°k9Ù^iäŸƒ´¸v¦°¬ZóÍ×ö÷À^ùÑqâûe¥I}|kf¢Ý"dd N3ÃÙxNYþ8{rÑTç•1%c>¨(Xãè˜¦a5Q&ß}ç{Rã×ççæšÓËëkë¢5‰Tw
oXûT´öØÒ7`­2zM‰ï^! ±î©Ó?„$c„L¿è
7údl5¤Ø®ËÑçYw!d´„g¯¬[Ÿ–äÆ°Š#-­éâ:„5±›q7šM>ÞÖfÞšö‹ÁäTÃ÷ËP2éª†$y¤ƒÉöpj}e³=ùô	”¶²¾´¾ÐÙ´°¶ðÕ¤ž'Jä#¹lÝGkS+ßlüç^‡éJ«œ-SÅá2gMÐ:úðaù«zåa¯­hú‘æ›Ó)aÞbÁÔAkrÕÈÓ€§ÈÔ³k–Õ¾ûN¬öÉ™KçÑòòÒƒJ~šË»µÎ=úá&gº\nÜ2®^”åoÃFnœ•5rˆlÈ‰…¸pâðõ1 ³3,Muþ¸åùXc«QYÖ4‡ÓixüôÞÊøé‰
†îÄ•¡‰	*mk2Õ€R
xÉïç×=P©Š¡Æé™ÇÃmUªô¯kãØkÐ-q•V¥µcB¨ÆOÖ›ƒÒëvöÎ±ìà›Ô/@×ýÄ?ŠÕÎðoÒ5òùub¯Î¯-5’JH´°&UMk»Ê´¯êŒ€Ö±cUf¯{)âÚO€M¬&qT²¾]‘(HÛÆ‰ºcìhÕ;a-¥UO·äˆ<DxÑ&äf#sm9}±¥¸¬¦$P
€óž8	¦ÓÀ€bM0çéàòÔ´Œ5mzö­!.2¢¡v¿!µß’šÖûôÜl.ÿ±×MÕœÕ6Ô¯¶`­?°¬ÆGˆ‚¤ÁÐ±Úøz^»Š­¡Ö=ÓDkQ{ZObÍÝÝ¯äõ?¿g-9k@wk¼ù‘iéŒ´ï˜Ã6s“8fŸ}ÅZjŽÔœ©¦1ù
€\±¾3°×6g¼Îæ}/IW®lÚ$Y^ÃOïÚåï¨©rVÂTC
´ºO	äªd“EÂ~µ…¸_-V¬X±bý·KæÚÏÜ5Çjmg¯Y`SçZæo³ü¹ÁjðÚ?v9V³¨&Ùu´‰X+òŸ=Ö¹~ð-³#"¶˜È¿ÂCRô$–éë'j4ó’©@9þäÙû¼Î÷Â1Õ4Î‡Iös‹Ùè/å 3<´9Å“÷4ƒÑx¥Éòwò‡&Æ5dmœ"È\Ž^6MÜ–O—FKjã'$$Ö~b¬›¯=ÁZó#h‚j·§I¼`öS§s_WÑëg~„ÖÔ-uœ UBÂ ˜kx9†ÕZ•³Z)ã•òt3é2K¤÷x.jC£[¨f¯_ýbXÄ^bZø[x%&…t—¶‚Àà›E®xíÕ´yÛNI6‚¿ŠeK2F«\.åM&D‘åäÂÆúQ$Ý§•Òýõf£ütc-Í4A¸•îÓ'}³ùäaËm•ôx,¶ÅÙöòrsmsãéÓÅ©É‡fë siqõÑlY-_åÿWzxo•F%<(híöHD§ð«(ò/ª^Ô$“UA¾«Ñxé¤ú¹B¼ti½ÓnŒ½ñÎ;ëW7(µ<ºÈ´8u®EÃ×”åÿÎåW¯ÊèÓFöPybQÙ*/{Âü£æ5—&Dl¯×jÌa;ýÁéÑÖ8 FoÛeeûà³­Ë€—	á¯ã»kzÂó†þ>^÷8XÁHƒô3Ìc?€ÐéV«€kPZ¥Æ2´†Ì»°ó¬ˆúàcƒ_ì;¶ç5[J¯šÕä¨Í¯™Ïæ¡µæo½86²<¢ó³(çY]Ž(¤)fÈÃ×æ[¥Ø¿l!%Ù{Ë˜eÑ<|¯˜G~‚zâ¤b ÀÌ‡·”–åÛ9ÿ%\ù£–¢2ÈJK°Í>ÇŸÚÀÏô´­­ (ÐÄZcøœ¥±dc2Àx+rØìÛ—1ì"PA¤°Î—øa‘¯ä¡¬¶~°!KIâ§ðaîŽ¥z¥ùjÜje«&Îž…mb­^1	¦œ´êìR›%†ª‚ä4Fè¡ï(·äÔXÒÓ³&9^sýuÜzó Ÿ¯g½Æç:k·¹…¥Óƒw(¯e$aÀ3'ÇiÔ 5¨õtª­0TM†š…µ•&µ­)æ^«)S°Æ,øtšòÇÓL¤Aµ)‘ša5ô4‚-VÖâl‘X±bÅŠËÈ~¾V{›×\ÞÈÔT„kÈDùïÞ…çÿ¬QÙ#™éÛö²eúÉéÇ2J«]“Ðä~&5¬/3@¤BiW8Þž!2¨âïûy€Í„í#¬±
ŒV"¯¿è×FŽ‡k¤$PàØŸÑËÄn}ei ›Ö‰Ì0CãC¸qÖ€Ã¬SŽqx|ZÌìt°¦Øˆ›E©þêóšNÎ¬Í3¿ì¾²ã×æ×çÉÁ¸¤èø?ÿõµO¡µÇ‚5ÑWêgkô-á®)L¤„W­pKêé
6tD‡<{žäÚv,š¼V(dÅ^¾Ç°ù–Ö’š¬¡¿F ·FûQ4$Ðåß¨ÉIc?¡iby“þï¥}Š”îßoy_•Œ´E¥Ù)#÷-s±µðàáÓ'Ož<}Ð¾»Ði3ý˜ˆ¿`ªÓåšO:ëÁÑ£åŠ,Ð©ÅISøñ“¦¦ë¥a3ŠK¹¬e5È‰1hÏ°öµMíwÆš…µO4nVûÑôÿœŸ¿1ób{cíÉ“[«G[“«›ïã«mltç`6áÚŠ)‡Ôä55¯i$®K©†dVöÍ1ìµj1 žG,¾6lŽØB^cS[—ñÁˆ?-ÇmœH ­¥yõ:no‹ÈüO´Ò‰Ñ—hq«ößÏï„ñëÀ5AÞ}u‚¨É
)3õªW¹¬–'&¶P‚ÐL
Ò<¶ïÓ×ÒªªSQd»¾¬]›ïÌ_›cyÄÊüùòE´:WD¿¹bUu™cÈKèiY´Y~¯ÙDÊáš!6lZ
Ö‚¼©žzÞ¨ÏÍÂÑéLàëÌ«êïÆ™çŠ!%ö`‘ªÕ»Dý‹ï[Íj3œÉšâ†1ð< Î¼§/žÖjFÁHˆtØj¤iz¬e†%YXé;¶ŒççÈUj>-YCÍ…‹ØDHçª	ÕÚ ¬öøU››X3°’¤RÙÖŽ¿vð™8EÑ´OB7LXàÝ¹sX³ž#BGkÖWs¥šN¿kRoÔÊ3ÎÚÍ°cE³ð(ƒ<12‰9Y8sf9­Ô8	]ùãÊÊ{ÆT[ù·½¬›ß|4£4Ê"äîú´üf2Ø¤añ£qÕþ‡Š|5é©5Ö„iÐŠY-V¬X±bÅÚ¹æpí?½´ÆM¨ÆÍÁÚìO«!wQ‰h\C¹d0Ø¤mÄ±ì±ÕB“Cw¢ÙØ”+þa€9k°š`M½kùaÓ¦æoØ¿¸"‚ÕXÐ„6@°c«ëZQ!þ%ÒGü€ÃŠäR~Þ 5g£ìÀX9“(©"H Ÿí… 5¨-ÍxV,6É6ù"Y•ÍFº¯Ëï5É#ù˜“N‰Õ¶‚ü3)õ¬qHF†Þƒœ+¬†æÊÚúÒÒú÷ß_£YJ•
ð?ù6ŒñÝ§ûöAkòÖŒd©31#\ÞïÐÕyêDSn†‘¤tÎO’3oÉ-hÎrU›Öçàº¸PÍr­«Š±Ö¢Â4¶ð@çg˜ß &‰ÆŠ=ÞZ"Ì‰ Ó?!ÓPâz¢È Ü¦é¬QiS2üI[oS9ÓÙÐxb¾ròheváéWå@Y‰Ð7¿Ñk{¥ÉöÔ[Ó^ÀËŸ.¶ËÔüa—ÐyÆP,X1THúa'ê4â¦ÈR,Õ¯è¹êÅ‹Iyjt¬±´ÆšëXû‘›Œµ3*ƒ\¢°ìjsaN³•=bn[™·¡Íu7Ô@÷9õa5äšB_Ö××ÃIÙþúgš×Ô½&^KìLáàRH[Õ_› Ñúk§ñ»‚D†Ö.³ rDk¢"+íƒfãÜëù|¥ÅëØ§¥­%g-_:Í‹'4[»5žKgJ|§ñ:?ªZUeKj•@¡ý/E¨6±#BµÇÀª\5• å×ÉÕÎ#·ç¯­Í]Ûì.tæ—`µÁlt=îg8U”Äòd=è#Š?+w” ´ö¢Â4É¹âµii'—é/aï1°À4ö¼ÄY!@Ô6æWÚœi‘ø Ã­ñ0±¤¼=_oFo%Œ¥8o‘ Ïâš§¹‰ .@~ ÆTå#Ç±’yºÊÛ*ƒ”‹¦¨Mµ°±éyfÇÁä'¨R³SÝÑgiÇ¡ZOöcÏ\lÚß«e®ÙÃt›ZV{•UM¬¦4˜TÂdâðwÓîk'OÞ¸ú·¥ó'Íw=Ä·8u*l‚siÑÊe¸¯¹_ÓˆU¸éÝ4¸¶«iü¢LO4xgdä4Æ‡ÈŒ•]F:€¨Aj½¦úF
{Õ>êLMu×¦HŒêKøÛ2PšÇM@-Ý°ÚÝ{Õ«‰Öl»šþsÓ\yME1«ÅŠ+V¬X¿j®­†¼†”Ô)ê^ý5x­±{÷îI€;6›áµ]Ûä¯i\¶1ØØË"Q¬õ“,RdË§8²ªGˆìC¦e¬íØF™XmXÚ¿h¸/_R{‹²­€ç°Ô=g‚/möƒe0_K-$Ê”† µ<J(Ã‘\®/g’E†ÍŒ5^¾—þµk£†ÕŠ˜qãEŒµHi%Br/ÙŽž’c/¾Õ\#
òÚ÷ÀÚúšæ­…‘¾‹hízËÈ¶­•±vö\¥R Ö~8w®R«ŸÅtb<hº¦-Ôl®©þDðåó‚5OÙ#,ÂñØ^vÄ–‹	Ö\ö£Ò˜_ìÛF7)å!cÅ¼åÀ×Çÿ&t$­j\ˆs8oþÝ£º¹0[~ðt¶hbé‹˜l‹¢øGóÞT»ÙžÂFYn—ÇtŸ~	–4–ý©¶†§m<¨ÕËåbPTüãÓÕÎByh¢B "F(Ì2®á~òž³õ
•ƒõúª0û;‚5ò ¥ë¿Æˆô²_÷t¬ÙxW :­v¤»/cÒ|ôè«/~Y^]-Ïv)ÜØìÞ»õÍû·Â,ÿ9B:é^SSÉLØÈ¡C#^ƒ_ —4ll-oµÂ¼‘Óèòë¯Gþš]|ö——?3ÚQR°ÿé‰Öi³·tC§ù'Žær€Ö[˜ÿO›[‹<þ—ô4–jIÕ”—Ïñs¨|<WoÙHýÈ²Õ„j&S0{óM¹j¬vàˆ®øÏÐõ$QÿÈeò­9þeæíåe‹iYjò
êÀ‘ü_vÒE°Šër$Se,«¤¿¤­]Õ×ÇéÖMÊlÑš¦d×‡+g«|…ªš¢¹‡±Ö<Ì/
p5cäówÝ²ÖF²I:å´ç‰ë ·š>ŒÈ+Ù$3†ªÞ´q£j¾õÒ|c¼)%ïqÆ4žœÌ5‘œèM5Ñì¼:õ§qK—kÏqÖÜp2k.Òe@~ÈVO½^×‡Õ¤=öÜ±¡ý[©?Ykü>ÉƒÑŒYøóÛG€5’;5aáÆ:>8ÍêÔ¥žè~ýàÁð.õÔiº~µßÆjÖt–¥jCñ±ú³±FŽœ‚ÕX$³­œN]r]j?õÔ,¨ý{KQ¹ÖèkLéC¯¾Tß6ä'eÓ«ÒkÈU›œ´õÌÁ¾;³(™`Å@FÆIŸÆ¬+V¬X±b9sígZýOè®YXk?Û¼¦rHç/\ƒÖÈ†Œxm—úÖX[±ã!‘°cÖúó€ÛNßçóXœ5Žíkž²°VëYmh¿¯õ’v ‰ JòˆÊ‡K²×r*xfË˜h%Ž*ØŽƒ9±Ü–2Ïêu¹LŽ¯d´Ä'À4¾ÿiïpN”aNI½:;Ó!®Ù±rªŠÌ7Ëe`æ­f³³ví=Xí=ê ¯	ÖŒ·¦éØ¢µO÷}12&XCôH™¢»ÖŽÁ(ÉÀZ…G½š%¿žÔ¾d’4ÿB€ûT‰)-¥†ª´ÃkQˆÎLèÊ²­+±¨(Í©"Hæ‡°–tÐ–NQåÆ{å‘6))@Îz.ìëùTÃg”Ñt‰é™»“År¹V¢Ï¬UQHßTû)¥ŒÔ¿AIS©±éæÚQ!òx+h®Í$ƒ£O;&ëuzÞÄÕããåÅ6v×ÃZ6	i–Z°Úë§G™Pò€µñ	3´LÙœT&íTcåÃjÊgÄÚ² /ÀjH‘õBõl]uu(¼l4Û™â—_â^Ív7&ËF(ÊÿÖç÷ºÄC§mîÖŠpíµ¢µKa÷Ú)º×TyìÂÍ›Ù‚¬8x-tØ& µ°"R‹"G^~Fƒ»ØŒ½ô2Æ›ºó%ã4@NÈ„ãAÛåÏ>žÀ‘“ˆ–œ(µ^âÉ×[%ƒiP¡tNjýÁ\÷ók XqðÍ=¦
íÈ‘'ÍT5¢-ÏsVY?cen¾;·²¹tû6¸6 Ö²¦¹U9«:’4qŽ7M§˜`-æk¾ÍrZ\‡èÄk…‚x‡hÍšl¬ñf*C¤Ò]tUj&à‰¬)E¬Áÿì*DÃû|Eâ€n:×U[±È…éa„#zèŠ%©fŠ‹ôjCeA©jB'»¦V¸>5!Z Oí#K¾£ýbŒwöÕ×™„Þzˆå¹~Z¸v=j‘±µµí<6g©9r;hWwÂ…Á5ã©!üµšfÕ,¬ÚUkˆ^­T«áüUhÍšvGîôT?>“Ò“{ò|ñd¯G¸­ÑÖÆ˜Ûà·m;,›^<pàHHepY¸°r”ö3PsžšHÍ¡šbFÖ¦¶©8¥úÇm¨¯Pè‹ 5{‹Õ˜F‹ j7"T‹B Yü>fµX±bÅŠËMÈ~×þeB>oðšnHq#NØkÈ†C"BGþá´Mž9f³ÆÚ¶þ¤ÛF““ñæc³!±[Né~Æ¼j¿ò½´¼°’JŸ]Â¢RÉ)oD°6 €Ä «Hš©‚Ì¨8Ò@]:·V¹ÑµÖgÆfó-sJ!Ñ@`4Ì¬cX.7­Š£H£À#Û„sÄ'N²þç±2Ö¾Ö˜}íü;?3rémVÖŽïûbP-RÙ!«MpkÕM¯T½²TÉñKdÒæ8¨©ÞKW¥$¨ê3È><’ð° 4Á™§‹fåÞ+BÒ&»	Ô¾ˆ2°ôæ”Lƒ|"¡r3f«± è‚\:‘NQ$Y©ŒŽ–ZC	øM šdñ‹åŠºû¦Ùàÿl¶gé»¿Þ)×šÍÉÊP°°ÖKOv:³\|Ë-s9>>^¯M*R.L½V¬ÑªUá%±&Zm©R’Ù_)ë¬UÓªÄh#©ò¬vâØ§Ÿ~jfAùÛ¥“K\2.unÜhv¸dl–óÅò¬¦*óŽK‹Ýîd£ûî­÷UÉp7`mãÞÆûïÏuº ›xm,ˆÚSóÂ+<HþÝ›oŽ¨§°@Ó\”7ÒÚ®!‹kPUDl0šÓgùËË†Ã¢Æ6J'ÁÐ¢9‰n4Ž’ú¨7õ»Õk­zËØt´¹E¬@V°Õ 5
ž8vÌŒT>e&`Ã˜¼s[tmåÚÊ
Úiv6?Zë4?™~QiÀRRãÛ=çÊ–>ªÚS0¬I|p89–½ž59³KíLYù´©ÁC!¬Õaµ<ÖjÀ·¹ÀÁ1‘@µ&ùög€JEÛ™äi›îŸ
ò¯Á'1Â'S«¢Ê ½¼Ä!ñ„¦ð/	l¯Ö.ÏÅýí¼ªñÕBXƒÞª™8Xu°Æúe´áîÊ ust¦%ëhsK½-kðÕ1Ò YrC‡©&^»"U‹¿yV£xU3ñ ¦v5rah²œSMyN2ö—ñp[Ü#O{Nn¯W¿:
[&°_gÛIý=œºÃÇ=ºä-¤´ç€2žZÈjÄ@²\›ùæß+™Ì6•û‚5}T—ñøïBÃˆfW>Ý‹`íî"²í¶c5)Ì$þýÿþ]¬X±bÅŠë9µOtF=´¹kÜ­í¶þZƒîšP-­UÈjp™MqÚžf_Ø6 3>ÑZFØ–f.Uf Gä¼Çðl²3ù’F¦%Ân´’ª¥ä#0?Ú5†*C¹íù\Z,ƒa&­â2zÖ^2™ý9ZÛ;”Ë—r‚32þ)T›æ°Q©ägxykÅÛirû±ŒÄo>3LdFþZÊW¾9îš¹¶¶¾¶²I“Æ•ç•ÿãÆZ;þÚ¾7oBkJ„¬™ôþ®8p®ZUR»,ƒ*´VÀ%¬%QµJÑáAeA2›{HnÄáAv°©‚¬,Œ„†0¦-Y-ŠÖ<LÙþ mb@¦ÚÑt·^îû|•åm¾:-"K[¢ÃÁðÓ|}‘´y2ào­\jCÏ¡p¨r±Nµ§¸¬oÌ,'Ì4nùÉ»/]ž…šì<s9rJ¸ìžê,ÌÉB•+lXFµÀn¨’g*ùÐxN«¦–j[+ +ÀÚÎ±ë_ û`µãß}wàmM>)g­³Îr®[•ý«FÑf¹Ü*Ï>šMÿ³{««îµGJñï>|¸ñùç·VM”?5[½†=EŒ:¸Fú³×d¯í¡òÂ.d“Qµ¦zHá44­>2€Êa³
k"©Š|Ù:hì¼d†LµæîrÚX˜×ÛMŠjvã[mÂ´-TSÚLíñc‘ïå—û<tèÐ®ö©Í“ÿšj+ŠÞÖî67WºmfHOOûPO5kJÍˆÀ@É c	Ñ°Æ}T‹Ä±±1žF@ÊÚ!’±«ÖJ¯êX*éòž‘éˆ€q†ÀjR¶ öm^©>F0Hqâ¥ðÉ¬J¦ÎÑÏƒóµºÞªŠ6MnN §Mf¬ Víl_îœ+â³°¤™#ž~„ñ˜9äF\Øˆv>ZÍA›»Ù˜~Wé0M;N{Àµ£akw¬³†kP64ø2ÖF¾` ÙÁ¬ÙtîØìço ·ï¹${MrÙ?ÙDîM²ú%:‹^|xËXÓ–hõWqB‹æ•KƒËÀÚØò‘#àÙá™ÓivBœ5g©}ÃÝYj›¤Ãn•o6ø?v•-ø¾©XH7Ð.59kËË€¢(_í‘„«ÆÝŠ>5kÜ¥˜ÕbÅŠ+V¬ßRé`í¹¼f5ûS52G&#‹MÀ–ÉXww;c‡ÙPdNÛ>ÎZK-•òü>«mý2Ü@¶e‹}.%6¹þ|I!‘¹”g†yÐ˜:Ôr¹JÞ¨¼0”I$S¹LöH+úQ70 ­0pø…½£C£€š¦fá±å5€Ž³ÊÀié4‹<Â8 ‚"“QN‡ö4%›.¸D*œE%3‹2Éätâö÷×šSÍ¹[s]¬5
"×ä†\:£BHÁÚ¾cð@Ê¯*¶¬àÀ¹³êO+<èløú*,¨Ý×­\Š%\˜&T<ÆøÝµ<mzyðø4SÛ«)™dÐH}Eþa­l¸<uØÌãËÜ(,Ž²fÅÂŠAHá¸,~˜Pµ(
š¤emHœ_åÇ†5·˜Îo§èMóMJ“Ë×Ú£ªÅÏOON©tT÷*½j™·äd«õJMÿ•mŽ¤(^«VÆ'¸åSÅQÅÂˆ¸n¿(kJ%lÃšXoR}[r)”²«qñ¸^ÿê~ó€NäÕ¨ùÒä*a#G[£_®¾ûù»Ý‡GWß}ÿó÷@7åø¿·¢þµy¨gˆ¦{8ðÊ!Ó½F’N‰º
Ì… [C¯Inj¶Ë‰tØ&RãöÒKªŒ$+wÍÙoQ¤y¾®RÛqùõŠ¾ˆæê!5
 ‡‹U¡¬æ_bþ4¾†Pm~Ž“J—ÉÒ{ïm®w;w]ÁZóu(àÊ*£#¡þR>LÎ€5€mp‡ÍhÌ<ÆŒ²äÌÓ (Z¯õyüêùc˜¾ÌáWÁ6´„á…î¨˜b[Î?U5¦ÃL¯­ÊLåÙ\ˆT‘’Ü±š'8ãD0îYÞecP%ôNMÞ#o:ëÕ}š:m4·#9èY€Cá
§™{HoU}à„M7ZM•ÁÏ‡5iÎ[]4÷€Ï~EÇLäQ;¡³öƒ¬µÇW<ÑB‚_.¤ýñ<1¬>‰ ç<â¯xuéä¥¿Ýq„¨7àpÍ:i¬¶5Gm®îÑ„NŽÚ€µg“ûoF¨fz ‘™U.{MûË¬——o£¥K—–lcw1æy«wz8mŠ8u¦ð±¹Öh´»`M“YÒ&+ÆkDÂ[›§-+³V»+W-”P‡MZ€ØbV‹+V¬X±ž¯ž ç®ÙÙ7ÚzÌ54«ûV<änáÕðZC#Øl+éª¡íDXjK“¶Mkk¬õyŠé7¾—1äD$1 	Ÿm·“Û˜ÓèêZ>§X¸”¼ŸíŠðWPtPÏÙ—ÄÅáµ%%í+í7ƒ×†”F²WÕf`öÎ"{£y™nª…„–dOø E×½XQ);';Ã;10W”…ä¨¥‹ffö‹‰Û×¾ï'»·nÙ¦µkkvÄ×%&-1ní8!#_¦8(]Äg¨ÿ`£âÑgkUr÷jj?ËÚàuM§’ÃVÈ’“g¯Mù¢ÆÚÉ|^ÂLJJU^]ÈRG¦rÉ èE`#^'ÌfAòJÃd.¿…bR2B6I¾	û&é/ŠQÓ[:]¬!Ì¼rFF+ªnlUÒ$ûñCý™é±D¾ÜðLëíHJ,™j7`h3¬‹ëé‘0¸²ÞªW1G#ÀšŸ§G­%ñÒúÞµºø N½òõÅj5]õñÖBõ>•î|¡qØ'­væûÀšéÞzÈ{yÐ¹«òÊÓãpw¹V)?ê’áÿ÷ñ¡£÷ÞßxT^ÜüœŒ‘nwV{±®I¦Rå^t¯½¢aÙ Û‰cÐõ¬—Ê¤ÃŠH¶ÊÞ–þRØœ.÷Šf6q2;ÚfÉA6­ô•Êi¥‰èáHí,¤&åªÔºDRßqÕÐy‹››3°öí·ÿö=ªÛn{r¶Ý^l$qK‡‡™¯-¼¢|,°	™qÖ£ÀÙê™€Ð×ì9 ŒÈ‹èqkuXä,¿‚: 5º£¦öHÉ–(ÚspãÃI±Ž‘¹…5&¢£…Ík˜ß¾g3 =Nâå6²_&XYM_ÇCþXÖ‹ M&†Ïxš#ùoö;xžkYKæ{^ø£‹ìp°&‰Ž´ê¥†œÇæ–Ç¶^ ´·§ˆX…Ba˜å÷ýÇc{«½ý7>^°M– kÀÚùóG¢H7€]©·WÍ‘™²æŽõÒ§•Ë¿|ÖHêwóÕô0°†œ¿&1‹céÌÒòmÃhÓô¦¥kVÓ¤õ©=#æ•ÌL7I€ì{ñÅ>›Õ'Vk ¿A¸ˆ|µY#i«VU)K‡­Å*ëßÿ¯ßÅŠ+V¬X±~¡òÉÏym¡'²'Ê=Ó¿¦Ü‘I´{×O6–ZlÙÄj’·~úÑ	½†«Äjáèa Íj¹áýÈùõª)ð1¯©gJ÷Ö˜¥V(¯2lZÔvRýe:w€µ\_O*ÓŸëÖà0PM”6 ¿0
¤i+Î“Œê[§‡û•Deýçw¦Ió×p5ÁšNpÆ¡t*Ã>Ç2¾`lIž¸½öÐíùwçÖ52ûÖ”àOÍ*îþzüµãŸî;1–ðªÊ-®˜<ÈsZUFkYE?ÖÎž­ê"KÉ5“©áØæ‚UGí6¤&¡Ã#Õ:ÀfBF‚ ëA\2²ä že5I¬¾­§ùkN¢,=¤DJL¥ý „m¨Õ¤¦À•ññÑJ:Áw#(5ÉD‰.4£´Ÿ\ž¡‡i¨„¯—Æöã21$UØÆ;Ãô`b\P‚®Zªˆ¬ig´VŒ€µ‹µÚ«‚5F8Ö”iaíøW€5÷›ý—ÎœY—|9D×ÛW_þRÅq%Ð­•.à¬•þŸCVW1r«>+ÆßáÚ“ð”©ÙkˆîµSJ‡üø5ì5 æÑö‚–×¬¨,[“-B­^j{‰G¯ µ—NÛçíRñü,¶HÍ¡ÚcÌ™>ïë¯ª1MÙ°ÆovnNÖ XMË›™åé™¥æ¿hœ$üQg§ˆÙ6ƒ)Q±$ä©û7ßóŒ­&VûXcÓiL‹A±Ú…Ã*¬Ô›BÈ+A./X+U¯È >‹*;ö¦Ð.[¥{RòÆÂAÖAJ#ÔÍÄ4$Zój‚®zr‹wÄX ž
a­9?I½Ê¦ö×$± ‹4aN†šgûÕ¢ŸÂ™nÙ~b¦Yüë1¢qœ+í¡hØ™} Ma‰£C5kAÚg²ÆTe­5c‹&ÃV£ÛðÈÛÀšNØõŠñq“n£~µ£N5g©9_-<ÍÂÖ½çßñ|;ÍI;½R),7¤†56ÇPvãÎÚjú7–.-±X¨=ƒiQå#úÆÊDôGbeme}zg£O¥ë¶Ðk-ãËNã±ÛÌÁŽ¢¨È€\”Tþ(V‹dþÃÃäõÇ‘ý±bÅŠ+Öo¯…ìõ×ìR¬†®YXsÀ6ÅÃÍÌÖC7¬…È–AÛM]dÿ?¶÷¥‘X­o;êSÎ—‹2°†	ï×¼5°JlFR¤ûótîÿ³w~¯qÜéš‡ý–ýFwFWU¦	h‘)è½0´´7µ"Ž]ø¦
b$Ëœ8i'ÕÁ66eãnmF!–#Ú^YsºcÇ(ãh¥UÎ˜IÓX!
Î{Ål&°Ÿçû­ò7íu²ÃœsîêéîúÕ=R«UãÔGÏû>¯AÏóZõ0dLMgŒtJ<OAcû+^ÙÆÇö‡cð–ü4pZb± „dD«q4F˜ÿ¨0m˜Cñ0
«qÆj…bIe~Ö4¦-Š¬¨:IYq”E† M{eeµß[½±Ò»*X#R°v–K4hF‚µk“þù¬ÃÔº.ÔÞ7GÊ¨A*¤×ðO1h­f.rkë2é~¾veY™l±š”Ô4_Ëç¨	…ƒ½ô%R¶Ãr‹T™9il¹f¶”ÜÒ$Ó¦’=–òØ…ú³O…JêÃƒÄ¨\LêÔUb“1:–¢ _„ÆA¯¨²IÚÛêãâÄDO0r+¢oŽÙj°¡Mf
ó¢ë¯¥­j6ÝbÀšWÔe/A¨ž`¨“ÔÀ|5îgPpËÎnçáú,´6ƒ`µ(f³¾Øî<üê«‡—AH2:Ãå>ŒFUjŸÿë<öÔ¼f´Ãð5F—ãÑ] ¥5¼œþ°Í×ßzë‘÷Î  R‰”âµ†f°	uù=¡gmZh‘™á·}õÓ:lÕÝwf_†i5é5tÑ´ª”"hQn§Õ@~Lµ•ÞúÆ#«„Ùû¿ÔéÌ·š†cämª…3ÍPÄÇ’?ËöÄ»ï6× 4XËÒ»N:¹Îkè
?²·æÉÅÁËN^³°vzf_\?Ý* E­˜‰š&Eâ`»†BÀôJÞ:a¿ùþFÁD9!5fâIk“•›-9kRÂWÃôá»™=<ÍôGð8®çÒpC ->Ï<çÛÃˆ#’Ùq´öãªÁrºcK®âQúÄn9¹$mdôf—
€Ä{M7¦Çs^XÒ¦cÍ–°k/«]8F0Ù£—LÇáîåKW//\=«½ùÆ‚ýF™‡fïöáFœÏf7ÑOe‹¸ØÇŸÉÍD²fÈ;,u×CË%…UnmEO»iÊçG½†Ê\ ÈÞ†Yí|óM§óM¯Ý^*‡kö_pÌT¨÷Lª~DóÿËÆŠ ,TNCD‹Xc-…+W®\¹rý¬¹ö¨=[ØkVJ]¶À†°YX{±‘)dK…É†÷µ¥°fÆb{^©¡€pü—ûG~!k-4ñCHà…«UÂQ2°8ŒŽk
o%`M/åÂ.±PV¨Xs¯r\h¦ßW£Øbf­à•bž1Öšú×Æ¦Æ+rÓP¡¨¼{Ö©JÚàôÀ¶áBÉÚnw{ëkýO©³ëí|öˆ®y> ×®ªÞîÒ±WŽÞ|é´våüHr‘BHËjïpO¯ÝËäíÁš3ÉX³°ƒ²¦¾JÏ8DLCj,°ÐR-DýCze×`H—hI[zlf°fÅ¾¶µÈ
!‹uÀ‡WÇõˆ®4â ”XÔÓvY¬bÈn$t=@­0q$ŽuK…ˆhBxðÙŸœ>¾†\}€±®ÓëÊi5cBÔÝ×ÎKÊÍ¯·ZÄB–Š5c¬]™ž>gŒ5ƒ]R\¬ý@TÃ|gçêÜ˜
 §þ­U«3Œ<[ü‡ÅÙãÿrëþò¬òKâ¹åû}•?Bk¶/¿ÜÞcôšôúÌ^“õyCÕi9äÂ+7²¹I>$‰#Ì;wåëššè*”šKs7pB¥«ŽÚ¬Å¦…têŒÓ‡[õt‡m¦¬=á´¿r«·Ì•~:ÿOF¤&Wt¾4)bÚ•½mÂ,·?ßxôÝw¸d~¼ÚÛÛÞ½[äê÷÷sT;6á\}¶Â_ä€¡šlŠp8oÄAÜËçp-¬¡sâÑL–×î©²¬JHykb3äg­Çä¬TÃÖé3U¯Ü0#Ðhbï7Š>ÒT
õÝy²…a†+œR£Ï™"^³¥Œ–·¤ãi /ôÚ¹©«­‰Œ—˜±Þ´­iøµ¶ä¨±£áÙž³$'Yc	O½V³@âèÍ+û1ôd æâûÿá¬‰ï¤ó2D[ã±î‡Õ²!îï¾ðÒ[„‹ k—k¨¶{õÒÑKGï¼©Èc»îÛrÓš+GgÏ 4=ÿSšÐãÙ˜¥wÉfA"F­±áô»Ý³~sùéî´8YJS ˆ]jÝßcúõzgo}h¨w{É/¹; Õ©‹Ôžr¨¶lQ­ÙÑjY°H*ÁÙjÚ®Æ#oWË•+W®\¹þF\ûK¶þùéQÙ¶R°–•Bøk™#ÏÙÉÙÈô²‰ÓJÜY˜úÈçK%…öS;£V‡ašÒT€'ÃýÿYñ£éˆ³á
v—`k%â²ÑOTÉÕªrBŒ«p8	¨n¥(2 ´ñ!Ê €5rEJ™ .6öššÙˆ 	9H¤ ­‚qÆ
a”Ã2Æ‚µaÒþ£‚­kä›D¡òÀ6Øf>™[…Õˆ²ØVídÃk\ªÁ2o6ßzý¥sxkÅRƒš¿oÁ4Û¹¦jq=‹Q`ãÀtlR–¿—(ÀÁ‹Ôwf3÷|-‘(ðX&ËÖsãZØˆOÃ2XAàU°”–-´f^rÁ•DõÊ´v>y˜­ˆÉ"uå”#Ü-îê³ŒX×ÕÓÆçT¯¤H>åzÔšêŽ1öºžè-bÊéí'¥ºl´¢_ÒgDU4Fd«ªhxÈzKåcY
c5„ÉÛ„Â	Xm~’ÍÃÖDlf×ýðÁ»ËÉÍ­Îñ™j<…>þx†%ÎâJ½zœ?Ö¯Íâ÷_»µúð>ÃÖ0ÓúànãóO?çŽÉ¶ºÞ¿N–?~°F‡åª‡<F=ä+äC¾Îü5¤‚ÈsDŽ Ì*5“HQ ²RLY "¶§ ±pJi.E´:ýÎ…èiýœÛªvâÄ[Y¯š
>…jiþ# ¶ª=ÚÞ£]hûqŸaV;·“¹å›7M‡O 5E2š:Áš">ÄpMå7Öä½
Ü®œƒ@‘­‰TÌ&òÜl-ä=É€×ôëÀ+²+J-U&f¬š§9MŸj^ß+pV•-@í¸b’¿iè}èD!Fwmš¼ÿ(Ð˜nÏSy¦BgäyñrÄËŒ¬yåš/Kîk6P¢:HËz<cÿV!FSDdÖ³ÝaI›Ú ­±éX“ÍYk\©£}8dsÛ¬]ËÚ&ÆÚ'©óV6õ«ð»$c-sƒOœ`8ã°¬]ÅV»|é²ºÕîÜIïÂî›.òŽÃGC±ï8€C¬~ŠÓÐ´ƒµ§}6mÈ|5Ö²ÕØaÍ±¶Vûå³—·ì?Õ8úÍi{{O÷§¹øGÒ÷ÖµÛ Ùâ!¤¢@ò†eªé¾h4—•ÆƒjH¬¶Ž²
È¬ZcÕ•Ûçíj¹råÊ•+×ßPé’Fža±Ýwæ´æF¯fDªsmØ=ò<æÚœnÏÙÌöüsÏ£ `›½`häâšVS;¹þpU`ããH‹¸NÕc–ð<7~£Çød'¬%J$))Ž®
HT5/JÆš¤µ™-iD6Íj¢4q[eHÇkòâ#ÕDÀl`²=¡,=ZÕP ®áÍð^¨Úd3œëmoïQ«öÙö#!Åj´G©oZ[X€Ì¼µá!® ¹NO]Ñšú¡º-Ä&:Qc¾'jrGP¢ëaBûGš5eó^J–ƒk•M{ZXÈfƒÅŸ´¬æÅp›ÄË¸cÇ‡ØTÛhì´ÔI/ÒL ?w‰>µB¢˜ŒLJÔDŽ±JI®™éST—ÃÑä˜°o…ÌÓ6[½Ç0S5ÖÅ8”Ý­Ã›~2…š^DQ™æ®óZŒ»¢ßd+NÆdîZR²1h»‡(H&Ô‰_ˆíGŠ¨ÛêìkcõÛ·oÿ‘ÈªâEff>ž2åj—;þÕÃµ9Þâ\ŸéØoAjýOûíB{gcoE­k2Ú0ÜMQ©*mEè/ˆ‡¤^Uó×¢ÒÃv d33º‹‰ Q<2^Ö~GÛ,q3Ÿñ;}ZéëªYLS£“½ÂW§šÆ(ó“¾B‚ ?¨C5Õ6läw°êíìõ{½~g÷öMÆÝ1¹ 
ËŒNZ0T¶p½jØËMX…kœ!"§°œI"P¶DfÀZ&u´IÓ:aj¦þóÛ‹2x·û$&ä%Í™#§Ä¡õf“þÇfëtSp6Rìc=cÁhœ”07x1ËùJy£ü‘/“q‚LWÊe‘dÄ[ep²Êvî5›Èo$VÖA½±a9ŽµE3}3äyz‘Ìo™ø8ìº–B[vKÛÔ¸ewÅõ»HH³Ê¶\°¸Æ¤ºš­`E­°™MÇ+OÃjkXÁ°ZkXkJ´ÑYX¸sòØÛŽf8èOœ?‡gOÇŠè9·á€mz€ÕžB5»áOýZ†gÜ¥CÖU§r—[FÇËRÛÞéí*šPz=ÿØáLÜÛ™âÏVÈôíhØ65ôœ¶2TÃS[³Ò'€5KjzHve7iWËY-W®\¹råú›qÍ][Å[£5îN®‡mÐasÓØL’óœxÍØlÐ›mDª™­£yðÚ<u´TF¡¡‘¸H€0®)^2Â³æy0\R¬ÅûÇÕ@FÑ—ì†xZ#¥‘ ÿXEzô˜Q)‰@-ZEÕ”£ôœí×à¶(4ØXh.T«UF*UXdœrIöà€
°&V°\Š*¶u“ŸµwIöá«1{åÆÊAp À¥70n^‡ÖNpÝHÊˆh2HkÏèê~†"ÂñÀ¯é2›./] 6cšy=í€dÍ?ÿxX°žCY×Ådâyô³%QœF/è
9™”<_dðjv4{²è±ƒ|[©±Î[cIÙcâ Q­1¶mêH—ç%Èt¬«‚G	wŒQu´ôEc#¼8ÅhRäHG›Š×Äµq¨Ø3j2^ºSõ"½lH¶é„Ç/¬»†¶|{žõyD”|Ù/Ã0\ùþ#3ê(ÖðÕHÙÚRäîòÃÝÝÛ·g1é¸ÅURFªÝ©p(ŸúÓŸg•b2{K°vÿÖÃ¯2zm±·±aÆc÷o­€oòØ\Úˆ–MƒH^þð•£úlL¦~áÄK÷Î!JKýš*ÓAdMX&•)gåÚ½™â˜j$›qïÚÃz‘0ÇEy1¦rîž!5WÿèzÕ>0Þ¬éSÖ|÷ÝFgéng]¹¹µuû_4ÃBÓlhå»ÈOâWy:<OÙ·î+4Ÿœ;qÀR™,<2XflÙaÄ(@~Õ²ÖÞáÀô‚$™9rDýwØ¢pØzïô„Š‰ŸüIù*%“=.•å«‰>ˆwÁ7æR`sëÜNd¢ùzv‚RS™fqS§º„1¦·Þâ¤ö=;$;•‡Û,1lFœŽ^*²Ö¾¡6Šaó*Tf•áL™#R–;’Y6[+#·á(mP šÂû/¾s~º©æ¦2l¦é"þäÉs/|K°ö²ñÕðÔvufqzÑ°¢]¾¼pòÒËŸ8Js¦k»ï¼´i‡jÙ^ð·TAf»K×l·Ú5_´†|µµ²rÖZAwfŸüŽNPbl?ÂRÛÞ6Žš0ZK[ÔXHÛ½¾özóóÅõo¶ÉTäî~Z‚EdƒEìâ	ªÁj)¨ITdXVÓcÖ°Õòvµ\¹råÊ•ëoÇµUç­ý\ëšzÅ¹eöš`ÍñrÈ6@mssfˆ¶¬6u£×­jÚe]Q5©»–D4˜‰ôW¢™©[1³€Ç‰!é1†@Šq€çMð‡›Ùñi¤ˆŒTFFe¬Ž‘	I¬$t¦„Iix¨±;RP¾…’¡Œ$Á›Ø-„É(¯1ê«Ðpz‹-LŽjk÷¶m k»}÷ýÞög‘wC%$ÆÍ~(Z»GµYq$º˜Ñš€œûeÖ2°æG4©!‰”œ5®s¬gÀ(ñî€K­ÕxºÜ¨ãZÕT—Ñ%f`-€u	bô!‡0Hˆ	€§Yiþ€ƒ5+|ÂRS31æf—‰Ø¶™-ŒëÜä…¡.½bxl Md‚½óMÙÃ¤†ºt#“¥;>MÖøRXpõf}†ø°‰Ã&Œ› b²QôÁ>¦2¸(R»RÓ[$mƒ’²MÍXÖ4±WÆÚîÙ4b­×»qöæÍY¹i]Þˆhœ&EØ±LéP²­Ýº¥J«¯þüçãÇ/¯Âik¯Ü¿ÿ¸ÿ°†À5´‚lšÿUÅ¬¿ÁïIþè°:ØA6&rbâ
Ò<-áå·VÅ_VUÝ ‰"á!>¢ÙŠ9y02Ô„i&ð›"µùÕ.¤¨–ö=’¶o«]moµ½XÐ½öÍ›7o¯?œKˆLÅ½çŸN‰$®«~3æÁ.V^ìL‹ 4¹j÷´>¤ÁÖN Œ¢5æ²iøz§ü@œ›vv{ÍQjÊé¤uºKƒàÌiþZPS†ÉQc{ÒOšÚ†·TÇ+„à@ÔH=3`­ÕŠÙi	¥O(?¬‹8k6ÔTrÖã˜éyup";‡'®V®‰ÖÄmê_ÖD‰Úgƒ¥×Ì”yù`Ûš[³Ò†«‡t…ÎCs[O“[­yqúdX“ÂÖj>5¥°ý[â;&V“ÞæŠÔÙuéäÑ……“wÞ¼“‘á´Y£§“El¤{r ¯ßI,ŽìöeÝEW)YG]‹	mè^à–Mm ÈµÝSêãö6mi<²¨G³¹ÍÖƒ½ýáö6°Ö^¤þ`u»C¤“/G­`P­¦y¶ô1µù¬2ƒµÈ[º!–N´«å¬–+W®\¹rý]Á«ÿZsyþkÖœ–.?Øž×Í±¶cSyd‚Ýhpy¶™,.-Rï'þ`ÀšFþ9¾ÿ—¿e£Å•R¢~" ìu|ªttB™@õÐóƒD©þƒ¥1*©Ý1CÖÆF+ÒBÐÈ¨Æm—¤‘€bÈPæ¸gZÕP	°a¢U5¬0}MÛF#7»#ÓË•öj§·ñh{ãÑN§‡7Âx,™Ag±mRZ³óÖJ\[Z£IÎ¹îgºI}ó¤ËÓòjª,×’é	_¦„£V£ìO½Z’(›Ï”)@½ ê0LuÏ%Ò+›¢§&"µ‘@/‚•Ä™.¿ß
Ö*%q7C)Ø±hFmÇS š,µ8«:ñ2BFàâ=ºvÎ›,&°kÂ{Àmï6½º@B“ÑÙà}Nª_Œ?!7®Q»ØHêc¥IL«b «¡ò¤`íÿQ°vxóÕWk[fZïVçì…ßuzLµîí,ÿ3Ñmu	—ä­ª'NÔS9Ã>þÕW³oÝŸ›ê~Å¹Ø_Y]^ë÷W{}xP»žâš€-µ×n˜‚È6ÑaáØ±WÞ<úêë¯Bl'ž ª ›sÉ#Ý´q—,³á–ÙN/Qk=ì–Vaxñb	ÓTúhÚÔQ&M§%¾=Ðª¦¸tÊ7h!bcou}u}Ž_Ér¯ó÷ëësä—¹ÈVA ï©ž5ÑÙaj€5f­¥dFÛßX*¼ûî†Êªa¬I'Ä‰JSy±¥£Ê™,­Œ78?Í_ªõêŒM¹$ÞòÔ©#GNµ°»Ä 0"ög,;åç^6L‚o­4ÛÌf¬®r“mÁlå‹.i¶Ôóxs
èÏ,³Æ²j¨™¨MœB>*<zžMabT0ªÍ"©Y›éiÊ±N+—ëaü5³ç$¿M|¶i0í ÆÑZë¢†¬	ÁaOÊ7ôík¢ÆYž«i(þtiáêŠi[Ór\è¦èžÁ£Ó@}¤^›Ûµ8Ì±ÁZwç¬][šHYíš–×\ö£n%d[j35±½»¤moó`,Ë¤JÈ^ïÁ7Û½½½½þo»ô—T,Þ^'Ò©`L5!Ûâs?úÇ›îd;Á­RkÓªf›Õl˜°+dé”—@æÊ•+W®\®ýEîÏ 5-RYwÍéÇ´f=¶ŸqÙ–y°tRaäyÿý9¶
µ¨6šQ`å‰J£3©þØ[ñ¨†g'	q`ÙûžŽ­Œ2ÒCÓ»×U*J†dîÚþÑŠM¡6²2Âf£ò‘¸`†ý7T‰I"Á×Ó„íÈkd³At¥"…‚ZWX®÷©]Û¬©’íƒ]…B¾}XƒÖ>Ôtìse¿h¯ñ³@H
ÍªõÓÝf—ž Úô´®½@1Ú´¹
n¢<¢‹p.¿	49J@›R Ÿ¸\k‰—B°hµ‰å¥¥ò`¥t(v6<°¢¥´"û©
Xjq¢Ÿ'.…]’F 6Žþ4¼2\¬ªB=Ž|¬È©±/®kê]+â;’HRôøøe|ÔÐ]=§hKLWK£YòšS¼8ÆèºSà.	$ÉñÀm’ÊL Hµ;‡.|øÆ±K[†ÖÚK—/ün~þòÝÎm|5:Õê-¾6"¦Ê›ƒ˜ÒÈªº§þô§z<{¿¿~X§Ý_»¿º
®­cÍ&ú*ei#7vvT¶¦6ášý”9BÛáM“ëÏ{Â’:7Q»B+›Tój`¦ì¶Lß¦–ð†Î³V;^£„ù¢W~-CÍ?"Á¨!µ/*’¡šXí{c«	Ö”+Â «½ÝöÚêú××—ç{»ëËk7gãˆQÓ²Ô×‚’q´L"¤œQkïê2]Å°„÷k–ÖNžÌ@:haqD¡#çdoŠÖÔžGh%´F3ÞvÄL“c|Ü‘_Í$­™}:¹jœdÕ:*ß¦–”’¦•çcìm
¿!Ekee>_{çH‚‹fè2ðm{š^„=VJøsEk œ)šDÄ„È\“QÖ¥‰’f‡H»å£²Ãž	ó?t°¦m$çÍ§vØ=áœ5÷Ükï\,—Åj-"¥â”ËW&Þ…z3g‚¾Ã”Õ8›€´bûun-œÐ·v±,HHOfK‡oÓŽÕ¦³ÖÐ`¶ˆœ5­¥Id€mÂBÚ!aZf«µ·¶––v7Tý(qÊQÿh%Ÿ­3¬íµ{½öz{øöîîoõ/¢)E(ý¢«--=éTc¹P@my-›¬ÖV³ÚŒ5«Õ¼2W®\¹råú×âÚÏ‹¦B5Ý¥ÑÚºzè†¬ÁæšÙ\‰ƒ6äpMù‘¬¸AlÙ”H††Ï4g-ýEACz+QEÁŒÔ2BT&Õ?LhÁ¢˜íZq‰»ÂxT¸VÑ¥ý£b50Žµ9TaJ³•±¸á Â_NˆH›ÒFRc¢Iz¢,7Qi„ý¹Ý5‚Fú{¶«Fçšbâ™ÁüöÎ[»R;ÿµµoMN…º‚âðô.‰ßI^»£•ËJòóU©@ÿ¦„Y¨±rMi+†[í@9±Cµ’€«`3¶*àm!]¸s÷&3ù/JÄhA!ŠK&%2 tÑ¦=–€¶LŠ#ù1aC…;í0­n7 E#K½k4Ê1«›À‘)©ÊgPä…*¿ä:¢Å€’.E]ð‰9ØMRÉì”CV¡Ze¿7A8h¿äŽ,óÖ0ÐŠ¬`†ñÂ_¼Aäê)»{w‹qP~{÷l'™:E$_ŸwØ‚„J@Ý Á(`‹Ö* g®ÎÔµ‡ý>Ù=`m}îþõ/µõvÙˆ.[)‰×ÔeˆÁ†‰<vm¾zøð[¯¿åÐÊfÌ)Þã¹Øå+ÀaanHš‘=
Éð*0 äúÔ µ—eª¹V5ƒjÐ>î,RßÐÆÎVOãÕÖÉJ_]›oßü}2×ŒTƒhCþt*4=<)V6iSUÔh¬¦É'Q"¢M88Ã3Kk8BŽÖNÞƒÖ¾æ'PÛší[K‡Êa¨šaßGŽüá§š­?¼Ç·O°Ÿ/i‚,Ð,fÔ
”ã0&!o‡ƒžŠv#£:ÎË<h+Këõ©¯™Ôß,Á=Ú\kkxj`›o‹ ‘0ÍTé¯œ²Ÿ2s¯Ðty`,öSœ¶)HcÅBÒÒ=sQu­*tåÃ~M´•øÉ¯ÛÂÇxøÕW^fð¬¬í
ÖDþŠÙÚÄ´;î+gÆš]»Ü~!kFš™³ö¤ŸM¬¢4ç§²Æš%5Ÿ†µÔ^ÚAµ'ÊþpÃz©}wòPgÛö©iñ`§·¯íô·Õ§ÖéoPyÛ¿»¤˜\ýÓji1u@[:d[ÔxHó?.äÖmZ¿tßJ6 <±?W®\¹råú{ƒü®=Û^ƒÕ˜c*¥µYEäúÿ9’®çlvCØö-*:ÒylfU
ž§R Ã
T=|fãýõ™A]£¢k Ô"ÜðBòCæ¤1f
ö~°WaEc°÷ïÝ^œ'R_4Ó´¶á8Ç‘þ+E°šT2°&^«p€Ã`mg.ì}Ö£a¯¿òý÷»X#uÞÒÚ‡†ÖÎqí®Ìok§å^ }3&ò5Yoz†ÕÌ0µjñ£B1
&	WáòZ£sé¢·ˆ¿à+7c+6Yf¾úS½0Ûª0NÍÂš4Ð·˜}^EêÇ³Ò"n=_?õqWíj|â6âFCz‰§Ž:ÓJÆ‹[3§>6ƒÐŽ´üˆŠ7Œ6°Hc·£Ä+Ðô×P»šÐ ÝøjYi«k_Û¢g‹ÞöovwÏ^öó^³Ë÷$²D° 8 Åhf<4à(¡Ã9¢!õVæ8W¯¬ôW—–zŸk×®÷?ÿ¼ß7‘Û×­R\Û¡Y`“ÐQúØ0Ù«“í 9/‰xÔÍ¦±e2ËÒå×ç¸—'­…Æ¦Ngùø'$š#5ÊMCž3Õäªm<ÚØ{¼ñàÑ74y¸×i·×ûÛª„ì­/7›š¯–x\ŠßxŸ59È2a'Ö+ÜNe„b¬=Ñ'Œ§§ä#EÞTùž¶ô„-•„=‹%•vÊ[CfÁ©±×Ž ?ÀlÝú™º's·ûÞéFÙÆ9
Â6kTƒžâS³ÕôI‡uT§è ðB´Æžü—å†…&àóËÆi«ù<UVÿšKà·‘"æ –¥‹8ùi$d†g©%§=Ò:Gm!4â0M;)Ÿ|²%æqmk­°¶V‹4¿T#ò$¬vðð›ÇÄjœ¬°­ªÀÚÑ“wŽ.\¾œ™¸¥cEmgvÒ®[In~K]5k?9ÛFöëAœ&ì@n¬—£™K+¿³ƒ¥fóDvz¿-t:;KÃ½½ÞPçA¯½·×ÖŠCÖRZ{nè9’|SZ“–!5dIÍ&@š¹j®YM°fERZËmµ\¹råÊ•ëßbîÚˆ‚dçrÕ¬™‘ÙØ2XsZÎ–<¸»–tV‹ö†–Dkêh{ÿýø×ï‡•p?|V¾äxíW³’zÒ´­E³›˜ÒÇPT°èr}TŽ‚µ1d@M(ƒWiÁk{±Z¡’[ 5N.ÅH§U*,F¡2™wÌt³U%b$"S1*Û:kagïQ¯Ô{ôéõÏ>êu>2ÞZFkÿ›JÈ”Ö¢5í:]Öì$.éÌkIšaÿl^ÃŽÀ¹ÀE”Q„Š»M“R«aD…é‘µžÂD0ßH’kqEx’è"ß÷ÃØ$ö›–5F4–ª G‘»Ù  ’ÔÛõdIŽb½®üMB$iIûx
)~¿>Uäì—)–ÔÁÒ21‘Œž¡½©:F½âXÌÐ;üž¨«ÿQ89
)Uˆ)P3=`Z{ÐÉîYÃÁÚÜÖ¸üýÍïà™ÀZç2¦×]‚,¶Ž×«$÷kQ‹vºˆ%Ö$ìH‹üÞªÕ‚À±:ÕÂ³_Iœÿ|¡}<ûüú­Õ•/?ïîÿ©§Ée»Þ¿¡€È,!R3ØR^{Ã›±Qî†íG^$$Å= Üf˜ã¡î6'5†Y8zË(5HMõÕ©a§á©Ñ<¨=z µuæ’»«½Ç«ÂžmF1 TH]5~gž:m™lä‘M“±Šg¨e-5ÖL É=š/XjdfÀÁƒÀš‚Ês»‡¾.Òi&dkgpÖˆ9¢Öµî©3BZõ"Ef:·8 MÍE´õ„qX¦î
U»«3RŽ˜Š_›&ß‘612‘ <Ÿ£:©@oŽZd¦±«ÿaCÓ¥æT¶¶›KVtZjS=[w²¥«€t¸Æ…ŽÕ’z­&~%2&9‰KšŠ1mYí(F¬Š /\E»;bþ…Oî*²e†«¡CHÝÒ»ª ÑOŒV›þQ¤h-õÒÒ•Ó¤n)®qŽH6^D¨fÅF![?Ñ¡N§³AwZgxøÚÃÃ‡î
É:b»7T8t{Ii"ü#Š´Ô85¡š´˜ÊÕJ¬jVí4 RÍji`ÿ€þ’Ûj¹råÊ•+×¿…Lÿ_~*ò~72 @Xs´–= ¶g*«´Ä¦?ÐÎ‹Öæk‹Fïÿú×ï¿ÿþèèh†™e¿ jDT’ g¶F§¦DSY	°PÔÒªWÇGŒ³‚hR5…5µ®)Îsm¬–*`ÛÊ„cZÛT
Yá›ÐŽ1"›#]«ð`@·Úâ*!Q$¾›™¶öxyqu»=¿ýÝÆJÿ³ÝùïEkX'ÐJ½µ{”Ç5¸fT–ÒAµÓÒÿÑbH&~ÛJêY“ÑV+74ñç¬kT‰%jÒT–©ÀóDé—26Ž)ë1¢&.) k>c$Æ#Ì!2$#ÆÈxï‰ÿ¤]ŠÈ¤ XË†°)2¤>¤HJž‰g>Eà¯0/ø²^‰ýu¾W«>5óñ)?(¡,v«ÕºÒú»[Xƒ«¸k¦6j`åœGÅ¢w¾ìS,hhgíMªÝ]|ã‚ºÖn.v0¼:¥°õ•=*1§ÆÉ@l$ä—T«U~°Ò8þØ6‰T 	Gò=Ä-É2AXœï]GXl·®yýáñ?>þ\vk}UMlÛ½Õ«+×?Ö>Àdcb¶î—%Åú[í˜Ê"ÕË¦¼ÈW¡¶Ãih“NàPÔE»0ÈéuîA4´ù*¯jžÚh°QMõ²Õx ¹’ÇAAí›¡Ï¯cn½·:gÇWØ`˜‚&áÔ¦~ñ&cE‰2Å$ío4~›W(žÔ@ÚH½=`B³ˆvÙMLCÃpÊQÙ‹ê\KÍ5ÑÚÇX;Ý<óÞæ¤5NýêÔ¾3§›’<3–fÈìå”ÔŠã‰¸M‰¦Q3µÖÀ:ÛMæ% [-«ä«qó¼†`—ÍVíäIÖrkÌ&ÜfO¢¡-Ã	6Ôs°¦Å ¹ÝOžN´»w¬“fuPˆæÐ­1S?ÐÜ‘Ój`­…–ÕLäAùÀiÃÚ…Ö.\¸qCÝjøkY
¤û¶nÌÈ.f>¥Œî er¬ö´®Mâ©Nø)¿™Ô<¦Ù"sÃ[cõD¸k=Ñ˜îCÃÚ´jUŸç¶8|È¶©![ .wMÿhKk°Z¦vÛýWà¾Ñê}yj2Õ•Ûj¹råÊ•+×¿ºyíŸEj«¯ˆ×~Ö\s!‘6ÓÿZK{Ùže·qŸ—2h[”ä°=÷ë_Ï..V`µX9\<1¤ÈpsEá5%”Á%AJÆä1¦&6`oDÓ4k2!ÿÛØXõÅê‹vdöh%uÞä¤Ù˜ÈRTAá(ôV‰"
ŸðÕ¤‘VS5FÀE#¥á@”Å¿ˆØ¾uæÄ­>úœ™^Ÿ¡ï¡5®Ç*!‰O4c™7SÿëénÜ23×þzÆ [«U|š¯¬~*‹ŠÍ&#…ÄÖC&1Q—¦>14IjQÓÐªÀ¢EdÚð<ka,…D5Â489l¦Á³*ÑvG‘cÉö±B:}t •}º:•ÎZã _¦ª¶1ð¯ %8k‚5>jïrÑJ¤}ÐZÆ,l¥‰T¡<MÄž:Å7ó½ìLñ ÅMÛ®F«àùõ×Ð‚ÜŸƒ8k¯à?-PX¶uá‡¶fïâY\š[|Þ{ž5%Õ´õÅ]5ÐEáÔÇÕ1qã*ßœš1n›7é…¦•QÈ6¿ÚïÑý5;÷ðñ§·Ž/÷(ƒ¬-·û+×¿Üî´{×é`câÔulüÒðØ:"ÍæŽ ÓÉ¶À m®Él“`K´	—Ym|²ýª1ÓˆŸ@/¿ürFj 5‹jhå:”†Ô¬ö X{ÜÛÞ ]èñéŒò
œÍKíåÙÙãöóŽØ|?¿²oê^-u›°ŠÂ°kâËj² õÙ:Z3Å,^ßÔp¹MÎMõ®¼¦	ÙŽÖ¬åkô^¦ÆDóÈ¯h`{ïÈ0[)JÓÿET".OGX˜©ØžÜ4=GkY¹¡î‚
Œ5q]ƒpI¥•4(cìºÆ`m£Ï—a-ú–È¬hõd9 k®ðÑYhÌÔ…Æã}â^éìµ×Õ}ãÖé–_6¬[cíÇ¬¶ «!¦«íìní~°{Y	#f"6ƒ±3Vcƒ5«¬
2Kë£ý”±6ðs¦zÖ²­k²\µâ¡}ÃôYh?ZÊ¬™µÏÒŠõo;ítg™âòBFkÜÙxþùCh	Z³®‰ÕæL ˆ“á4›)i°ZÍ»ÕråÊ•+W®·æ5‘š[*ƒ5sÓ„kìöSÔ¶†Ü¶å´©Í²Ú¼¤khv–ERA£*Q¤ü¬…§Ð¬ùV–P¸º†@9ì'¸Ç@Ãú²¤V'"C–Gµ‹X2†M/ãñüC%J-mdo ÙŠ$a>1œzÚÂ‚ñ°(AOàÞEQg9h3{Z[Á(ùÏ$m\s´öîµé¯…kMÞP«á°†ÈFgYïž~‡/çSG²‘ø*O1
èŽaB¶²DìÀ*ú€°Úà4da-‹…¢¯ú'Oî—Î˜pB(YbWB5ÚøÊ‚5!—<·ÚÇ‘@h'ørÖ`8ýTUµ¥¾
-4¦^¶8–fTŠù%1` ÆÁtÅ8.ðŽ¦º	‰&I­YŠøx`]Õu`Ì”aâJ¨®s,ÆÜ«Ž]ü:£µ‚å^k‡k2f‚Áƒö?ü»—0¹n×»­&—˜KÖ›PA"ôŒõæ”d‚³VU©åØx—¥…·Êo5
ææbº×.id÷×~E¤~I¯öVm«ëüÖðCw¶	ùh»Ë0ÛÙgUm$¦±ŸíØÇŽ#ârûj{àáÝ¾b—b³£ƒF<í(--}D»W]ù#¦Úö¶* YÊ®õ{{;Bs¶Îy~·³6«Þ¯¹ß«Op®ßYê†&l‡êÖã7Æ‡á‰{üBà¢€kª!ÖÌ¤o–¥Mk¼Q•w‚Æ°¦ñr!•­!*!ëû2Z{O7£3™™#¿úïx¯D1ÞJ6c3H(·ÕFR+h˜CÀZ”`Æg-‘€5¸­†ÊGV¤op¯¬QÖ€?ôb2<à·d&ÔŸÉŽƒ§Ñ¤ì9gœY:J)ì0øjŸÚt§Ü~GésçxTk6óÁQ«ùŽç©'ð™¬fj 	€êSW{I¡ýw.ï mè€3ÔÜ{ÔÚ[î1@iNÓÆZX8XËÂy,MøÔ¤kZûÚªIû2TË4l—©lÑ#+ü´C‡ÅjKVÔLŽïÒÝ'¬feC¥ðÕ²ÿH· 5‘š¹­–+W®\¹rý;ÐÚps²%¶¥ÿëï§Û²˜HýGûÙÄª¡õµ,3ÒIV@ÛÒüÖÚìÜbÒœ›# ‘
ErüÁ±Ñ°–çK
×•Ÿ¹¼(`Év+á5QÀ Å‚«¡QmBf°Ø~CiUl6Me•a,ƒOd“…â²¡‘J‰»Æb9.—I_<
Quœ¨‘TþÎnöŠÐA¯ß.´WÈ†WÊ ÙðŸ}®ÐÚ[/œ8yN´Ö›ãcïd1H°ÖÝGiÊµVjRË×Œ#X­ÜP±cC9ø1	­ˆ@‘›ñ4>Ýia¬±Ú@hGäUEqRUª*PƒÚ"ã…I,oR3ã¢ Ôâ‡Èl6ž&³à	ÇŒ·† ~Muqæ0 Ndtþ• 3JC{í×¨Ÿš*ñ ªYöš|îQu,Z„õ*ß 7,"’øÊ¸R+ÞùÖüÂ5|aÿl¦°–2ÎÛo3òÙ;¿×8î4ÝŸ`Xöz.ÖwÆWÕ94Å€%úÆ iojE 7ºðML¼’¬d;.eª=c“ÕLÔ­‡D3	M;XrÔöÊt2–iËöÄ
î(ˆ&ÞƒùØZa3çó|¿U®ôÄ9ìÍìÌE=Ýõ»%wK=“þèyßç½2J¾È¿·Zu^»l<\§Øã‰`M	‘<= R+^U L” ¬)‰f7æ¢ÖÓÓÓ„´i`ë¬]§øqµw½·G»]l«=NÄ^"vdoois	‡íýß._ãƒ·œ½d‰µž7³%Ùú$Dƒä>øýzî<€µ}¿ÿ9±ÔÈ2IÒÿ¨ ~`íÛ§›ÝN{—Ý½^¯»²²áÐn77/®­M‡>D¤Ž5Ãf Qü¸s90=Iq2:¯àÐârã¬éG
ØÑjÒ!	GÍÂ$¬vúƒÓÊ¼4y¥‡¨æ×4’Œ\‹Æ,­I)¬½>ûÎD4û¯7ß‰Z [Q-‹°Š@W`Û×;
§Äû.RçèÛJI.kì¨"+jW×éZƒPLIc±‚ßö<Œß1	‘Xs£é¦ªi‘”îgàöýhÛ‡&^³«”ÚØe±EYdõÌYæúíŸRgéHd`Íw†²°vÈ²Zk×¿Û$B._ã~ð‡—¶ZCÚjÝ‡–,/–½ÜŸÙ/"»Me÷­Æ’Å†Ñ×ŸR[Q‹4­¥ÃÉZÛÓ¾»c0íðOÐá$Iä9¬}*P;Ì² ¬]†Õ%%ïÍÔRëÀi¨’È|v®\¹råÊõWâ5¢üûXíI_ÛZòŸäÌbË2"%!›˜CsK#³íZ?­-$2;‹hNóVc>.ð\²6ÔYvpÈõb`Å515;¦íbàeØc=]C¡a5I;°-ûÔ3îÃYCŠû‡Í4kmŒ¡ òÞ$…Àgè s²”é‹ñ˜í1`M\§dÄ‚z Ú—‚p®Ñ(4ºëh¹Ùè.­«2í[Ã•×ŽßVkÑîö³ðsXc66ësuChgOŒVëøhh  ~…ò+L€?;&H¤Ê9jÇˆÍ¦ûÃr0|®TËN`Æ¤ñs©ËTSb£!°R±ê9U€§èñ¢|NÐä6Pl–²PHj&‡§Za€yêKs#jõaBì«©©1R>æZûacÎ¸"2âØ§ÌÁ0Ÿ8¿ŠIˆ&QG›g¿¿"-ý*qƒ±\:È·Ê(X6¨Œ“/‚µöÅI
ó`‹:oâfÝ}ûç¿iÆðÖªGÎ¸KÙc ŠÀ °¹Ÿ×=!³ï£©±ˆ§ÔšGš¿¯ß$­’7Þ˜î´ŽÝëQ­Ú¥&rk«·Ÿñ~\ÙzÐ5×€µ%Òò1ÛT¹,]“pÙ‹ÜÙ”)½mÅsdÞ„fáÌ6õÒiV¿ÀQÛ–£Æ·ÕôkôÔhD‘o7Û×zë¤Š46Vî6úÞ™–sò?A4É7»uO@Qd`Mq0Šš‘!ÒÌ =¿D®Èùó3_Ÿ„* 5áZÊj)¬]<zìƒ×.e-§o^ñÎk¦}×Ç"½?§>ÊpíÜM–ZD8ä9ý[£bF‚AD¶æÑœs†Ý'áçÖ¬L›Æ³dp§S	Äi%Z#¦‹Æ6#}[©:š²(¢û¾eAæ{ÕƒlÒ#AÚm³>”²:Òÿ%œ«ÌŸ*G¼øý¡ˆ5Vûåˆ_‹]÷E¬¦¹j—ú’jÀµo]ýÐÔAf·,÷Ñ=êPÆß‹pÍ†‰p¬%é"Yåc?­5’ý¢Ý@jHÌf¢ ÓÍáÌSûž±†R~+–Tí˜AÚâ"«íØ8(«ï†?Z¥–2ÉÓŸñ°ås°såÊ•+W®¿&®ýè~Ø[³¼Æª­Žú´“­­©ûÜ®´ènÿ[Ï6÷·¬¶h°kª…ô~rØQa•róÿiŸfLÕƒ—ÿ¦ñå‰³†öýÓ {Šäei¶Zä€_¾Ú°4Fû 9ù²;@ÖÆ mpcØ1fÞ6+}…¯|GL<?d–Û ‰" Ì6¤2@Ý¸œ´­¹¾ž‰¥5q¥¹²²üt§äÁ6åmYãžŒÌµãÇÓPÈ´-)Ã_°v®å”kb6-uc6ðKõfÐŒÏ·J©ª÷‡K&çqß¾‚5GÏ'Ð0¶P`VS\ §Åá( Îdw³¯•qj„q)¤‰+€¨¥Œ–‘ÈdáÃ®€ÅUˆwljªÕúˆ¶0¡QÓÑÕ§µG³  5ìª9ŽÎ"å›ûŒÐOåDÑÄÈüãùzä»Õ*°fõ1W¿þâÕW¿øB´vÔL®²:¦ÉØw‰WiE¼^w¶c<+ÊgÅ!üÈ´ ˆ?Ð+øÔ]%›~âR‰·Ö|¯Ùî4›ï5š½¥¥öôëïÖ€Æ½×Ùy²K+[wárX[†ßl°?Âf{ É»$	ÛŒ×–`ÛóõsÓå”Ò~!¥y"À—‚ú–™jÄ?îííj\·Ùh¬l+³ésêÄÛõéËÓ¡•(y®bLu`ïîx\§éJåàbÇ“_Û9Üf.öL«›ÃÆ½LA*9;rŠrÉ¯Ož7æÚ	æa®µT¦ÛW©}tbÃ.>·wˆ¨xI&/ÄÚ@f€Z¢ª¬9¥/;\¯~wPWdEP³ÓØhm#„’î50UìcË¿cÅß-tPN}¶¬M»·u ‰Ô¤‘Ú¡Œèú4S9{¶:)Tü®÷²lÌ4ÇªõÕNõ±o
˜^Zf»tíÒÅ[·n]¼ôaÒ—q»(‹åÏ‚E2^Ó¡ð,a5íëX²ý­eçìÆÌâK³ Yk…2km,Ó­(oÅÁh*xdA6DDÒÎ¬f
•’šÔáöÕXKÿ[`}µ¬ˆžE¨–Ûj¹råÊ•+×_!ÊŸrÈLñWÞ—ª!3Xc…ú*#Ó¤£Ž6ˆm*1[Ö¾fÃüY~¬Å6Ë¿èx5(P´¼êábŠI|’;€€2³Qi@—D`Q{%$64D’å”äñû¡…_æ¢?Ý™Hš¶(~ä’)xò=wçÀ%JbÆ¹:ÂM2À£üzÉxEÍns…¤ŒÌâ®¾5î˜kÛ—ýæ±Ÿ¿m¼5}Î¼µzÞ†Ï®|*>Ëb`-V§±«šÕÙ)–Jn\•+1Ê5¥òWùW,Ãi€› &±baßBsØ¬©8Ê¨ ÝR Çº±çñüùš€¯ð
	¸E`Zl‹#Mo^ Ñj¡bÍ(5ñ,ka¤°þ‘È”dúÀ0_P’æ:ØqÀ&d+»„{I“Á¢±/;œ¨Ï_@óUEŒ@låm5çÉ‚„ÕnŸ<~ôø¯Q`xåócoÞý·c‚Ÿ+n-ŽÈ_iÉñóÕžèøXj*ÖÄÝ›5ÁžÃScÔgòOºã<a^f0ÆUZî¼BcqÎQÐ-jíéé­^O^Ûîª·=3í†+‹;=ŽwA'PlK¤ßâoßOG²mCm,—ðÛXÉu3cÚ¶HKõ¾”T>f–z¥}ûí7ë›{»Ov××»—çš€IêÝî{8D‘¯˜|ª¹7è¾ó|ìÕxÜ•¡+ùví‡<Ê×À4dø—éo¬BjÞš`Ms±-«%°f+5± SqŠâS¢!O*hû÷B…ßÐ‰:ŽÒw‚FÎ¶Þ±ŠÎÞ´´¶€cpv$Và}ø²ÈXLêG
kÐú*¬žÒ)bFD‹“’„Õ¤ÄP+ü³Ì¦UŒœøj3Á Œ?ÇN…:Lƒ8e£”Ñ’Í!CJ2Ï´Ê2EnëT¦þPH®Ú:;_>‹Z¦kX©Ÿxº†Õfô³Ìj Íû¸¿tÑ¦@Úµ%´da­U¢Þúd¹nÒâîVìdxö]qEDÇ^ƒÀÖÜä²5ÆGiÖlhu¸ØÐBS) w¬ƒf×H»ÒbC|faµ¤îaðÌêSí­Ù;ÚÑÂJ³•¤Q-©»h›¥¿2·ÕråÊ•+W®¿Š°×þñ…Æš`Vk[ƒeÈ–€Û¼¶N²ÓoµÙØ‘{)­qO¬5å¼ä..ÊZS> ¬ò!¶1¡#^!…5b†ÔR 0Â(ÿÅXè³oaµ…Gètúç&	R™þÝm îqÙ¥:2€Êk¥n.ÂâêP0à¨y˜m†Ö¼*)¡±Öl6îîu×Ÿ>x
©=ýíÝ.ÞÚ2eQŠ© þØñ#Œ"Nií±º‚4qÍtµ¢°¥mµR?C–^‰ÄeÒË«¬Õ
9ÈŸÈQÙär[X+3{Jb?Pc[Á¤Œø!2ãÖ<±Z•:Ãb
kì*ôT”ˆ2) ,u:iãÉd«!½š¸ø¥8$„—“æ¥!‚ˆž"ˆJTh‹ý ’ X’n8%öãÉá¾q @Ï¯=þÃcAÞyjó?vÙ|¬åã?œŸ<µÆ °Û$,*`äôFÿû››Ç·èËŠ`5L=½,‡çUŠf§¨ñäP‘"Ô¨ù7oà;ÀÖŒÐP]Š¼Î’+§-z¸s¹5ñðz¯›ÀZ¯™íí­Þ¸¿´²³©²·»¹)ËmY«U1Ö¦ñÙm,ªuC¤\zð‹|V‡Ý$¢ÿh,®½/‰ñðæHA¶ð1±Ô1†˜X‘õívïÉ“';þÂ
ô¸¢ˆ½N§	­I xPƒ˜B¡r¡t{†ÏR©5/ð¡ìQ'8:ÅJîËjB6Fx›©pBµdä8 &RëÓk˜rHŒM…‘0Ô[µ
.­«·2¡5klYnÚbÈ_ÿúË›gá2_“ >¤˜5XYøJŒ5µZ€3É8±CŒHEe“ZŠökà3yfÚw˜’-PcAb5)µÓ*U°­­éHÄÀ•³þ´ŒÚnÙ¾h²½ô,mˆ|ŸS•¨6YÞ¯™õSÀZtF¯Œ!`vQ53PoŸ¯¦T§K×®a¨)]¤Ÿ³P–[Üú­4”Ùmb4‹q“RÎˆ‘6©Dfö±ìÛ:‡„iãÆ'¬’¸fT¢RcµXäê"®šÊû´ ¨-pOaÍ ÚÂB³¹ÆDÓ_Ø¸kg‹õó¬©´ð±Ü3TË+ såÊ•+W®¿¢~$^{±¾×DÞÇj?¤¬³-a6•Õ\³¼†>&¹/½äy‹½b&®ÞS&ä[r
Ž£‘
N‡Ï+=\ŒâËMóë>ó®[©×g@`7àc±ø|¶Å÷Ã#ð³Ölz5_Ê÷. o_!í¸Ç>³õ‰­K{ð]Áˆ¯‚ÅB¡yyó³½uò"6l?øì›¦ói×…æ¦~F­Ù~‡(…ŠÀ‘º©ƒlZ{…jÈˆÔ¹ŠFPi¢–Ò'WÌkÁ-™4°fÿ®^4Ýcæa“7bâå,Æ$ö£
"Œ2”)d —¢ØkZá­Q¹˜v?‘¥ùX÷¬^³&.£‰HèšAj˜WjÃ†À0 ´ÈH9<¬†ãÖóê&‹~Žiûhv"d˜7®tZÔ?®G'kæ]&0W*‚µ?|!´øÂTAâ>*Eñj|çÊ•cÍ»rõØ±Jïµ0Öà–€Îk¨Ae1xÍi%BN„ÔB›Ñ°R.='UIªÿ0ÏžgðÑÔ„+å,ÒÄ†¢{½åvs¥–Éa[^ÂÞºq¹C$ºqãÆýõ½%UJöd¼í2úŒCô™ô[¸--ÄPQü<nm·ÑÔ›–hIùü|Õzâ¨=Ý|°···¹¾»³°²Íüëno}ïÞôtÐ\Y›ë¬Ìñcœî¬4¨xEÓÓš‡0¢]/±=ÃDÃ‘ØÌ³•mÀ´
;ëT™jJ÷`ê®a­Í¼zè§°šÂ©Ý;fóOl[ËÛæ33i^›aÞÝù¯Ñã®É þS–âŸ½“JîÚÍ×o¢Ú©rM¿bå:ÚÎ)ë‚U9ÇÐvÕìâ«™Ðs­\qœ°–‘ÝoÛÜ@üÐ”ü²°+j+ƒci«ö…$²Ë÷(ZZ>ë³«2¥ÎZZ?‡’š×ì¡ÝAÕ2¬„EW†Ô°ÆT‰Ÿî”?ÕÞºª]Ì¢EÄjæWÎûÀfŠÜÊþñI»#‰ÑÒ½>bKvô0‘š`MJa•U?¨Z<ÓZ—Äm£ê,ÓžVf¯OãÖ7ƒÑXØ²^Ô¶iÝ#Æ·Ùh`¥énDy®U‰ÕL‡+s3c[ÒâÇþ¢y[‹‘W@æÊ•+W®\ÿ=åÿ ¯ýWdÌ3“ÍqûbKæ¨
Ö¤&¬Æ]Ùc‹ÒK.ïGq +jb
\§J	ÖbŽãR)®«y§¨äDCú&i7Èì»îü2
!_~yøå}þ+¯ŒÙà~ÿ çÓØjWçT;'ís=ñ›á1€® èäÀ¶ Lã! sØoÍ•u•Ano¯?Ý#riYæšhíMÓ¸vHÎ…¡µZh‡ÛÏÂSX^|öly_Ån±e;Í¶¨TÈq»¶2(S•'¦*,ÖÇ\ ªZ,…¾ÃcÔ©Æ¦R´_‘‰+¼éÚøwÂKd9¹,Â7¡‡¨)Â#ôÕÐÆw3ÙÁ0ë™×S&8l-“ÉØòë-Nk^Éø–‚Ö0§<õú-òX«×Ù^ k¶5z+B7±š¡µÿdŠôÏ@†«W¨…<}ñÍ;¥Æ»a45¥ÌG€Mm[¼Êý}³³c 2g†ùðf)3M²¥¶\ÁšÚïžÑG´Ï•T’Yt¦©Çœîì.­¨­×ìôÐõ‡ÿ‡!lí…îêòò*¨öèÑm©»E\äêr÷:¸¶ªÜÈM~³¸lI}¤ m“iix†=gùL8·­f´©ªØÕU`5¬µT;v÷öÚÓqs{}s¹·÷Ífgq!ˆys÷žµŸMGsË„_²%Ó‹ÇoÍüÂ8gÜ¶’ò[Ìëå‡ÎëÖèWpèXüäT
kÀºý¦È0‰(¶³î÷v‘Óö¦í_;}‹(ÿ™ù¿BêàeêuÏ ,Æÿ9¨Ù¨öåÍseÞvb5Ùf£;I.yÐa-XØd)NãÖj¨‚Éf|5l5!Üh¹V•ÊÊåª•BlÚË¦®iï<sÙ8ŸÂ‹NkQš·Æ-£§t÷¶¬5®¥¥Ù#ReZ®c‘šôÊEÁ›zpl‘·˜Õpì¾Zf«-kYZf—‰Ø™úžLF›b¶TAZHTÓ³™±ö½ifÅEU>6´Úž²ÝÜàÌ†(­×X¿X‹Ü¤Ãð%2Ò$ /Å´ËÕþ}-•5ÖlœˆÖl·¤¿„5¶OòÈ\¹råÊ•ëï’×R*KöÓsZ~Èpët¸wô@ÓzLÚÈ\Ú·faí'Z»1r€5"%§X´ˆåÄJOêÇŠUé•È‰
(ô\¨Ñ°¦4HíåÄpÛw`h€ÌZ;€èÍ’Ì”e¹l®`y”>ºÌHá”í[c×Â­l¶¯‚ÂN{óÛ§Û¿ÛæóúñÖ¬¹ö¶bFd]I×>ž¯Q	yæOú“mBµ3gëP3Õ‚ :w®Ò”ËõíÙ„tjCfª–&YXŸ1È®Ä§æ˜Hõµ1K»˜ý¬¹à†ÖBDÝ£—¤z—ôŠ$61û3Kµ“Þ„`-d¬Y‹Šó¬…2±BNµpŠ—wC®»®¼Ç8Œ…´¸É­Ã¦™§².vãyŠ Ýê…/T=2Th];O$e‚µãèôÕ«ðÄ±ÓW®|îõÕÄÄWŸ…«f‹åÂp .Äåúì/§äš©[Ž§+³@¤±K.œ)DCN7àz*Ó\ä5ü9þÃŸv¯u×Ú°ÚÎÃéÅ•ÞÚ\{éR·'wmó>-lK«XkŠ‹¤*rýþ­¹¶`MZ]¢\&ƒÝà2­R>ç¤u´	¤	ýn°åð›o6÷¶-¬Í-lï--·×Ú{ëVVîMÇÅRÐÙÝÜ½gç©ad¨ g¦Tu êÔ
D­£Å'bSÑuyß™þµâ¿æcü'ÖYS×š¢í0lÁRŠ%”fxíÏÜÌþÛ¦2’4ÿãCBwð¥Õ`žzÝ~wM¸–‚ZÊnÑë­HðeÌ1½A!Ñ2ü&GLÑ#&ëQ$W®Th³Ô3K·­Æf›F6¹pœETG"öñØRE*«IâZÔÊúŸƒ¹.¬%{)®¥X–¢ÙÌù¬Í‚Ý S¯ï¯ó4¢Z%Žd¬Ñ¯ÖÂX“E`óOÁ½b5å€~˜ùjFÚ»F
d
…és Â²èþ4ý‘“œFý™#ýyâ±D:•­u~2¡58Í0Û­”&5Œ>…Ïþÿú´q˜Õáv°Ò¬Ch	£mhI’Dä¥IM-ØðGÚÔDiR[ÌÖW)ÿ¤ÍÑ“¼2W®\¹råúo×…×”:²õâ+võ=ŸZ³yb,IŽÿZR
yYk?!dä¥¡  (Rü¨ÁNâ§`Pj SAç#zÑFpB±Z54çR¬H›+×¬è0ÝiòÎèd3²ý¡ƒ#XnCt:¹<hhÂ¦û»bµ}Šø7r]ORU9 "39#|)ÅÀâúbgK(¦km»q¸k
à6µöþŸ“‰kGÜþÂÒšš‚êuX-ñ-´(Á‹J‘gTàX™,{ü8Bµ¨«0”@UdD‡(â€ÚÙ@¦ª‚ñÌô*%p8±*¬¤rS¸Ÿ‹q©ðÝJH_"þú^ò
®À†CbÇ3ƒÔBì3(M±‹&d„²OB*5ÔŒÙj‚)Õ ,â›3AX}l\91_¿ð˜&£y¬`íBÌ1òJ•ÁVã™‰m¬µ·nß>~µ\9þÜ°Q¯þy½uæØwZu –„^bf›So)ö\6q(ŠI	ËÇÓu=ÛË%ãz0—æj‘óÎ]¾ì-®tWÖöÎZ§9ÞØÚ™n/u›=ÛëíÒÂaõˆ#Y†Õ`³G7H÷¿/úºÿh}··ùT†Öoèœ¼3¶0Y*ÕRjõèwº°ÙÛ]ÿfuïÁv:ÈÞ½…{V+2ï·­ÍSp¼N·}oZAÊîŒ~˜„nŠ{Õ^X4Îš®š2U’?MŒi¨ºˆo(ÔŽ ÃœäOÒ2HÅ÷3Bí-X‘‹T;SýÞÛðÙ•»6Å Ç‚5ü5™ Åm˜¡uMI#ê¯ÌÌ5)s×Î)çw¾|çË/yÓ&ÞnRêX?S3&™AUËeñ›8VÇ´­;Žá-gÒJDWÖP­Êc,yY™î4[Êj™»¦m¦«4IÖÒºm/|Ï«½3;5»ÿõý€š•*”#z_ñ™aµÂ'ƒ¿:4ƒ¯vZ¬ö«¥°¶´tíCJ#uöb6‘»ê›}Ê)—¡¿Œ‚œL@”Ëè¹§Æ5Ç’ötÑl8ßØÀH³VÚ;Z²Û§ºcé=»é L[0+‰µ–lpJÓ[f¦i‹ÄjöÏj¬;"µD+m,Ò¯vŽj¹råÊ•+×ßD´¯õóšÀ«ïˆ{²‹^ˆkÜ3®£EqbFÖ\CV6rÑ{iH™wÀáS›îµ¢a*"?ˆJT0áAŸÒÄe‹1$Ág\¨,¢³Ép9ñ 4§óÿ{„‡k>6G¬‡F&X1LPöd¢H0~Ü¡
!éPc×€4)™PæDÆû®¯¦83Û[œH!qqk¶·ïn6ö(ñÙµk6ÂßÒÚ1¬&_iž•÷äZß‚?â›”ô3­ës¡uÉð 7ˆ‹Àˆã:ŸsUüå8ðØpè© }B£Z†€-< §ò`­¼ŒJ(ã(¢
4‰|tØ19#Â3z àEÆêªR)áô€<`©@.né£«ïÅÊÇÁVÓD6ÊP¶	µ”z…‰×'`Ía—H…v*7ÓD–ÌWÄõc¯](VHW©¹óÔ?Vœ¥ó²Ö«}¬1®ùÎãÅÑ;ï^y·}uçÊ»Q<êªÒ²JCžƒjÂJjõ½¢PpfÂ÷#fhîP9 g
Ö¨nOŽ¨
Ôk®,ÌÜéµËÍ÷Š‹íÞ°öÞøBw¯giì‘sÎ{íÝ¥÷­nèü“gÝM3u·=ºÏ•õu6¤…,-ÝxdõÍ#}Á£K«Öÿï3´Õ½ÝÍ½gÏ6­‹Õv{½½NüìÉ‘4…æÞú6s±··âË—çôkU8Þu¤ÇPuŽ2WéÆ¤¹êÏÓÃ8€ËíVü]
áÀÎ'°¥Y$•{‚5ô{3î®Lµ»Õßj&Ùr[¼&Ù!¯]¼xôÈ‘Û3?ùúÔ¤’mß§û_Àk7Ïñß¹‰X‹¢ý7oF1¶.ªžÅ6^›	Áa±ã°µhžû Ã±‘³æ$	ýìÊ]cq*ÐßÌA£ ÎóQkeÎKÆfJÙHë~NKûÐ’ÂÇt/Ûp2=?‰‹jÎ¾>[®0¾oŠxeÿ´4®Qá"
íÇ¤ä	§/{³¯_ÍÂÚ%%™Ð›º|éèsVc•!dâ¦éð¬–ôi4E9.¢Á~SM¼¦ã”Õ6ØlŒŽn6ƒ Ù %´Ó¸}gïÓO4.[pÓ4‰­¤CÝL$¯!4+víqG·TÕØ¢6·¾‘jy®H®\¹råÊõ·Ï‡üÇÓûm~Ö²‡YT3ow”þßI¥
­É[°)’¨}NÕñd¦UM˜˜xŽSPG›ÐƒœHæW+÷1ÖÕ‘±‘Ö¹s­¡|úu)ŽSŸšÍ… Ö´Ë‚^ydc„öØˆ?ÂÜ¶æo‡‡
Þ "©$ð”\—$ÁÚ°
þ†«QŠÆän§K©[£°A0$úŒ8@”ÒÚ›8'OÚùØ@+Éð'#<Š’ˆt:Áê54¯Q[!^„ŽpQôiWå€.®bÂr¨èÌ'Ÿ€å´ð8¤fÐ<*D@T¥âÂ¸a>ƒÒjÑpiÜ
×	èå†©Ç*d3¹rÞœŽ5kº©Im‚ä|’=Lœå§NÊ×‹fÅAüôä'š 1;öõ‹ˆ6g-žŸw(¨Cª'(ˆ¤”Õ¤AjZ&!k
ïëø‘[Çé:}ìèQV§¿â•—ë-üÂÐ„¼«ÜN&¢ž1Š¤‚@h;1Ûbã–Bºé&>Á„Ä.	†kñò©"¥agÜQØèÂÍköj¯Y\ •áØ€ÙÖõånïÆjOãØi»»&|¤wïÙî›7`3àì>ÒúÑ7÷y‘üb5 õ/½ß{cš Š)×7k›¸h»»[;íÎðÃ'÷Ö:·Ñ}Ðm.6WºŸ”’¼L¦§I./ e¨Fj‹	´fDsy"ZÇ$…Æ!&«¡µQ>ÆOÚYkøjDb$¬fôö›rÔî.Þ5£Ì 9›A6híÍ‹è8¸ÆÛ”o`pÍCFY2¤ò -¬é&½£3_ªm¶åã{:ó<›¢Ø~rMST“x X¦ þr:„L¿VÇ‚›HÒ3£Ó*<bÔ±¶ÎÔh%µmúd/(Û1A±”Îf´ÏÂyÎOOšs¨º?*Ÿ"›²^¯ÔÏ›Õ¬zþ©¶ÁzÆj3šÚ.o2‹§%ÎÚÑ‹ý›f^š”uÓYz³Ç¼Væ€UFkª µºjaM§ûwRdƒÖ«mèÞ¸‡¡[î·DgºÛ-Ë¦]»Zà5Û,çQKBmï­½'X›-4MêcG”¶ÓÑ±“¨ÕE\o½Õ~ô?råÊ•+W®\›¶~^kk11æf•œ{¡Úºóp´ÚQa²Ñ­ià°&ƒÍ±Ö@3§(•Ë­<1ü@µ /ä‡†ü!¼0GÆeq!°v.
‰GÜÑ„Òú÷áÇ¥ Æ±¸ÀõqGÆk”Lò
á*r4Q‘ûÌômºß83¤¡.»ˆ/ò83$Ÿj¨©¦¤n³I1¤¤ ÿ?¦ÞÚÛ8d¤'ó±K8q5híDDóZZo-UDÃÙiô|I¾úËÓ¯zHŽ9¨×l´¢Ë2Øª®KK"Ô­ñì:1‡^f`&
C€òË
¨DšJ-àÕ÷pÊNyþQ2‰ÊÍÎŽ[†Ñœq¾5Ù"¡*5þšZTÆ©ë1%½tøŒT	"bY\FD1i"á<”†NÔñØ¸Ï3ü‚`­\
Dk¯ž7°vûƒÿ×Žž¾zçÝ;ïÒgV‰¦ZÄÉhRA}v*â‡ Ã÷s”ª—â–|cêÇ„È‡ž˜ýå„[Ì†Ç¨ßœò…tšá=ì3…ÓÊP‰eNM/¬ÀjkÝÞ–n·»ÖXY^½ÿ:ãØvÚ½UšÎ–é`ÛÝÚZ’³¶»Õ[2‚ánX*ƒÎ{ß kh•¯FK]¾k³?GîäÍ6˜F¼Hgwµ{™¤Ç‡½Þ½¹ pš+ íÜB#Phˆ˜ZÕŒÅV† [¬”Äâ‰
Û<?’åf&¬ØºŽç¨8ÖÎkÆ^ÓllzÖ€5~ª'Åj¯j¼ï¾­Qqwþ¾ôî”~.½IÎkG`Û·é¤1k$Cž‘„kS³IØÈMî’6_"Ö¬ö˜„œ¢M†4OË©¢ç Cr9h`Ø‘ÂÀk“µVæ X3dVÕÚÀX£;ß7áµu}7O%ÛCIÿŒ½¨4‘ŒÙ8­iÃ‘Tn½>Ûb@õ•°š‚4uµ#!E¼UÃjü o+O3cµ¤Y›)ƒ¼Äù$a$™˜¦ukZ²*HsæÖW¯ÊZ³†Z¢Ìb³jZÛ`d©5Dd) ¡÷¸£…÷ØÑÛOûIÁ#§YfB2Vö¦Ã±š$KÍ†ˆX5­‰Í
·R‰ÒÚ×sTË•+W®\¹þÎ¶vûE6ZÒHÿn;e¶6Ú2Jaí;´¦œœ5ä*£ßsªžçYTs¸j½â.¡¦^£Þ‘Ù/3G8t
&>Ïø |¼ôk4Fd‡fÄšÿÖ –aÿ r9;„•ÆƒñØ‚}š»ÏãBâ¢PÖ=©%ÉJ#GB²"èjƒX‹ÍîæfwïÛ§V
|·¥¶ÐL´f&®•ñÖ^®É[CŒ1KæY¡¼tÆ=0Kp¦µ™WáVÔâªlÅÊ¨	7O‹*?ŽIš×€¯ï8It:
DA ð0Õ@CÕœñRIeuQ  †Húòáh#"‚k8ktÌÅˆ6áÕ:ÇnË-ª,¯ã9Ä!Ï©A®~'þØHÈçÞ‰18°"ôä8ŠOÌÏ×bd²%à4^ÆVrLj"ØÌ«'OUN)¾ÿøÉ«W‰„<}úøUxÔËU<žõŸ[N'û0t‰Dñb5¢z	0˜_‡4Ê	a|¹iã’Ço×ØŠ|Õ<SøŽ/‘5"nmgërÜYû‡;šÑ °–V»¸mÓo\¿¿‰¥¶´³výÙ”õv:`³Q	«-_Û„Ñ„jkíþýUUOR‰ãÒc0€F¹áºíuÛµ…F±ÙÛmÏñ„¦¯÷¦Ç ³…†ãû1U¨zÚ`%\9Ìó+A¢q`XlÃ2#‰¹(šÞBËÛ1\ê
;MË`Œ6Ž>±°vêüÌ)UAÜ¬)õQÝjfj·2`Ç±fe-)†ÄØ<nÞ¦ÌÉVNåÇ&k„Š]jv§þçT_ïš%6Ùj´¯ýúË/ßaŒ9ÿ“;{¢\XcÍqx_±Râ[)òÛ”fà˜øªT1£ŽÅm“D>
RÂ%€Ã™5×9Û_	9CÔc’"2£íwu„Ëö’eµ™ó3üëÌ7¤þ1ÚÿúlXu"&}‹Õð“[
‚¬ÍÏŒbµCªìóÕLäo®--Ãiœ<zôÒ¥‹iÒ	w#ö2{é‚p-;“œM5ie÷û‚EF‘Í}ä¾¬Âiì±ªÉW3hfov¯Ù„Ó 0 #Áâ—¡1[ÓNNCÚÕ¾Ön’œ5c¦5Y¤¶Ú‹W:¶òq¥-YTëS;Gµ\¹råÊ•ëïÆ_Ã`3À¶ÕF™§–AZ6uÍ~_íôq’õÖv¤5Ék¶om‘ˆ‘9XÍ	„ÌÄ-+Êñ÷}AØ&’ƒcBÂùiMs}´…Ò¾Ä@¦bH¶Ö5 @ó±ÓÐÀ±ÑØBk!Ä²ÏB™ÖÈ“¹žà8É‘ar"¡µ!32»Pø´÷Pm}“î¦Í½Ïˆ…4¸&ëB´fÍ5hÍ)'Ÿø“>×MÎˆï³"Å?*0˜Z,aÛÕÂÊd%«‹ðJ$£TsL¾VU-TFGÍTlxÕ¡ází„&T ØºNb¬…¦`‰Ù¬}Ì´2W-G±zßŒƒ§eŸ‘V«n‚ùØ€:D"FˆxÏÅ&2¨›o%Ò)‹š_xu3[Ø POSá\ˆôYRÞß…Ç\ñ µ‚!‹Sç™ÞLÆüä©“_œ|ëêÕ;w¾¾óùÉ[WË£^$Ut˜>¿šå½0p™ôß„kxÆ]“¥èpƒêBãùÅÞ¸OœâX¨
B¹5}1ûáoDÞb<<wù‰‰éµÞÖÂ
X{kíáÖrïòÃÝ­ÅNï^ØÁLÛ|Ô}¸C$mh½Ô=n’î¨êÇMèÄÛÛ#“äÒ&¥”k]õ»­,Óü¶²Ìã{ÀÚ½Åññf»³¨?¼qùá„Ú$É²¤—’‰ä.5œ$@ÊÄÄ=vƒ’iCÓ´q^¥yº1tÆñû÷…ªžà4à…Ìp6xS«Èª4´6n2F@àW:sX³¬¬Ñ¦†¯ö8m[ºwï²ú#ƒ»y¢Ä^£³í"ƒ²…k|½þ®p D³¡m^k™n.‹kçúymvê_µ/“#p­2Z^Ç±ú/ájÍ šµÙDgŠ—4ÞCQKE£<È¢åµf÷Ê“¬¥dfaÍ¦ôk‘„h,ˆÍ÷{Ù8W™<Ÿ¯œ8U9÷úìë¯ÏN¡Y”°Z´?	í¯^(—'½GŽÿ¬ÕÒÈ¥Õå‹§.^ÃTû†5”i²è–adZõÈîwÖúÝ5Û²f¨Íž´Ó´†ÔtÛá4¡¾™Ö)©YTƒÔ2TKvf´¡U
kv—›2‘jFIbïï:07Äÿq¯ü@«Zûú¨–VË•+W®\¹þ^x-6`Mÿñ†¼2XËj"Ó³ýjg›$VlK2k-‰'S×mk±Ë¸57°Ã¯Â†ÂÀ@L =GLæ¨¬í1=ÄõéYC³ê¯™Ø?¡¡]8ÔAºØo®—âW¶Ø‘À#yLŒÑ½6(Ÿäà€™‘ v.{È¸`Ý×‘PIèäBg{XÛmS¹÷à·Ÿ=åÃpR
™ÑÚÌ©OÈñøqLi þgGj„0^-8s¶VÎFJï/ g…~yr¾Ž1I^¿BcG¶EÙñ(Œs¦ô±<Yt½8„æÐëù22æ#òe´yI‚4MÏ:á;£ª£ÙVöq5=ˆ% „À1L4 k‘®ûrÑp'J`bãÊ9”§Q.ZÂ~SÕakMEÅ‡®[ãYk5pÍ&A~üø‚·¯„±V66Ð¯¤Ÿž|õü[_œ<2øõ'ïÔ£«•wÅÖœQ,Óü«SN§v¨Ø´4ÁáÃîZ`|C?à`< ½Ò„øÇ¸ÐW(&È9ÜRæ×]_càb®èRâ\cyú\t/OO é9ß)4ºí¹ÚËz[ÓF./‘³¿ºDsY»··þˆLÈg;»»»÷1àÚ{7V77¯o={¸¶Ò¹§JÊÖæævv÷ºöæ¦p/÷ÚÞÆ±·Øé,¦^Ó{clx¬Å3Ð0w|²Ÿ7›&|&Ä¬SZ(ñK‡Ezò¡ÏE={eCÆxWÌ®£¹,Ž/à‚•Ç¥AŠ ¿˜ùÕ«¯þ?öÎ/4Žû^û/ôº½î…u'|µ0[X†‚Àbt
sÐê½™.¿¼j]ôf"G«Øo•ŽÜ!™Ø‰vÇicâ?	B6±]M\ŸÚÇŽ‘åº®s¢£Œ(‘‰ß*õ[^Ç¼Ÿç÷›ñXœp®ÛÓyvwvþì®FÒÚìGÏ÷û|_(:Ö4_\Ò×·7¶ÅiÐÚÉ;—îœ}Š2b³öšŠ!’¯¾úó ¾Og&&Ž¢¸–„shw’žå?9ùò[o½¬šH	^‹‰ÿ+–?„Å|èLI9¶ïPtVµÎšŒ5§!”1òclãlÕ·»y%Ÿ{«ØüFhzLŽc\µ¢[‘'"x³’ý¦Ý^\l¦3>¨6	£ÎN
ØÄjãá¸¦a*µ}_µ–°ÚWl¿Ú™]5ªˆ%]äÔ™·nQra…±fÏi“Çt
wp—:ši+³•U@ÚUî5ZPS!$UP²Œ†Æ•uIFºËVOˆÐØÒ]f¤írÒ´½–‹}¦g¼–Õ=X>ciBWm·®–¨VªT©R¥JýÝÛw¾«’Èï}&-ÏÙ¥,®¦±ÈW¸è8Ï—³öYa­}”¥Œ˜¶µÓÑéÓŽã:ÊˆcÁ'¾½CCžÊ ñÕjÞè´å0{XÈa†f»êY›^H—ž)U¤‹6ÄM°öã×ë*|0šn<xCõÿ956–ŽVÜÑö‹„ !%ÁïÍæ°QÉ9mºÁ!{yuëÁ“ÕM`mcûÚŽhíäÙ¼qí5Ó¸öÂ›oÎøÄ8¶‚á±$ï’Ü$ûœVö¶šwàª RíöªòÓ@3Mþ6Iç@SÐ—
8õõq8°°65»=¿)¨m8<B
¢J QÑQÌ´UåÅ7üVEE•Í¤.7¯ÅC*­T|äAjê£0O©#†ãÆà¶ÙYˆŒqn*É$@Ÿ¦)†Àm4»aªáÁ¥i„±HÝ.çZÀQ#î@­Ù¬TeÌXÛ¿qÿÝ#/ÜþôÓŸÿü?NL'ƒVGú¡N‡Š¾d3û´ÕÄ6Äš$)¿ÏÔÄŠÔøxn:îzæË‹°Þ@5)ê[‘]&¾k3£ÁƒJñÝ4}üô!fz0Ä†;ýåŸÒC|DçÚGm†f3{ãþª7±|‚–Ä¯.>þêË?þù_ÿºqbû×ÏÖ6¾úëçŸ<x/yðøoVïó¶=xpuµ|ôç«§+ËúüWY¦É‘‚‘Ê4=l2›F
©-Í£²‘t3çÛaÖ.úÖÒTPMºHJ gÍÙ²C!#RËLvè~¡À^ÌüºÖÎƒXkû÷çQêX{ã°F˜Èåí;\¶¶.œÝºtïÎÓk›¨Õ³|=Ç5Ê!©†üY#GöþÑ›#ç}M^‹Àµ<Ê¿È†Ì½µ—¥ÉYÖX‡Ö–’˜ÐÞ²Ô²Î†UÇ‡è­5j`ÍÌ^²°f‘KA7víö¨â·a¼´‚Ø´ÅfÑ±f1&ŽEÁh–ßr\Ó#;¬p°Ã¿‚ÁÁ™™pzPžšŒµ4ªÑ°â«%A ùjØpòÕ~vÀøj(g58Û•øi·NâÕx†’²©ýf3‡¸Ý°&Ó0ÏaExVÀšÔØ—ÞšHKAjºY8c×J¦K+9±q±ºg¡Ì.M˜XM7ýß+rËeý´U–YáÃU„¥f‹%Ìú·ÀÚÿ!²DµR¥J•*UêïØ¾ólÍŒvÏ^Ó¥`5[ýÈ}Án&R²i#_¥"GC×Ì„lÁø¡çÕjq+ª›0Â;¥na™Q¹Ã>Ímq4`µtÚ¦×!ºÖP}Ÿ´}YÏZ}WÍ<»;ˆyÀ ™ªcÐínxkìÅA³FuRâ7žÆfÃ
£Úøiå7«[76ÖŸ<Ù8¡\ÈÂ[“mñŽ×n¿pøÓE‚b>€ZKRû8š3f(°×|*ÈÒ'š>ø‚’~àxÜI0ˆü2Á^b¿#5"›IØÃi4¸‡ÊP+b²	“ÊQ\U¹|¾Ïöji¨Ž<<-“ñïŠtà˜L_òIëQœ’ö1žòZê/r*ªò£
w§ç«p1r Ž@Y´Pdq-vk¨bM OsZÛÿóýGýÅ»wßo‚‘=¾-µ;‘™LÍ†Móýuäü^øµ«Ür¬nºÔ½E!Q³
¡6×…1Ù‡Ç7)éÙ$O¦‰qÊû¼™¹à¿bÜ®šÏ	3/~ðåÚñô¸þ‚@ðÂ²·<Q½·ºBˆÌWüÓŸ?ûàƒµ«÷±Þ¢•/??tœ—”*Ëk|úZ§O¥Ÿÿé Œ¨4å†xQêW\ñ–X2Å½!Ž…#8ÀÊsá×H ðÌ–Aòîã‡J˜J-RÒ¨²Æ“QÛHíyý£ïS «©hÔì‰QC#óµ°öÚ+Ô@¾q†Hõ«m]êtîœ<»¹¹}¯qâÚú&Èqj]‹kömŠÉ(íÛ¯aò6™8$ù÷„k–×¦Õe™ÌS9¹„­ör7b{ØÐBÜ0Y1KEnÍEïÈ˜g†QÖò(~f€z>TÑÂw9Ãéžwl†E‡ó]p˜]Ü¶;µ¾	ÔXCð‹gÓÁÔï$‰Ñ´ÆušÑš†=¨ùšò®hfa¿€¯v ¨,PÍ$ÍœÁ+{ÇÌÃæªs6—ÊŠ‰ÝyWš6±;¹ƒÆùýZ(L±ÈFªá©}È…ë¯ïA`Z~»À´BkÏ¯#\Ù¸®ÍB«ö ˜†ò™×4‰®Ö®~KªH‰j¥J•*UªÔß3°a±	Ùv;iZeû?@æûrdÔY­å°­I?T‚¿ˆ*ŠT	EÞÞ=Ã¢$ŠLÆvl`œµnw v8oá'Ï‡Öx-kCŠïGmwß˜²üõ\Â =h³rÙ¤ÃH¬BmÚ8A’®`m4Ð£u¤=T$9êzÛëVŒ3·²ºvâÄÕ­õë'Nß__¿&\;»•™koœ2¥GŽ(nO¦HŒó4Ç˜*Û”Ä™eÁ_û—–æˆ0WiaËØÿ¹ýHtšõQWßGb»]vÈîj`XôUÊ–a<µñ	ÙL:Ÿá¹— ’Jª^+æ+a…UZJŽl6ªlÑˆæŠ!Ä6`#Ý‚à’fRG} 	Xú<;ÖOÞá…¨½H ¤hÉVãÇCtÅ3ÖI ½Æšµ1ñ€Lw•…5tØ¯¾{wÑ¯ú‹‹½€ÇOŒrŠr*ÈŒøj}uwJ”±SÔ* —PÔÐa˜¶lâ¥N+éiS¯)+¦Ó«1MAy¦)Ñu•Kâð`w<ŒYs*Pßh¨Ç<~<Ò‹‘º'n‚jÆCÿú%1›§ùð[«-¯®|°v"Ê Ê;~üƒã§ÁÔCŸ¿7ª’Î@¤
/‚rÌ8STWÜðå	ˆÓôŠD m
rMd8Î:›XÆ&…óäF ³d28žå4&&|Ìµ˜ª`4!Ä0ÃÆqÖŽÐ°¬Ùt`M±"Ûw~ÑÙ~úxûÒÈÈÊ…u¨ãÆú‚Öx—J™½Æ¨gxíÕWo+kdñüùª²!s\Íûµ¯·ëì$´ÆM|Æ¿´›VKª‡œç½·07²Àí¾¼ÛØÔ±*tÄ·4ƒ0˜cc»=ƒ5“™Õ9š} àŽf»è_ËÒ¹h%§±¬iÍn2ó;©ÙÉØ‹>Ýj©Š4Á6UB’r98?ˆÆõÆ²HÍWÛÍj6²_°v]6˜vêrn«å–YNh»ÓêùõØÏM–Év°È6ïÙ	k4«5(ªl—î­ÜZ)¬´K—¾ÖŠi±iG.­]g©’G­æ¸öq"«\å¬åN³åî(µ‚ØÊVµR¥J•*UêƒØ@6[î²ýþì¶‡¯æË,òKúÖ€µ••‚ÖNã¬‘2ò«vd`mhxxÔ©yA0HÊêßëŽC$ŠÞÈ ÑÚs¢…‰|ÿ±}†Äêð–û+kûT–uqÖ-¨T†÷U¼ mL­n:âoÜñYºÎ“yÏÑþÑŠ÷w—ïýÔsW7×7W[kC~¬ùØ›[6s/o\#ý®eÕŒ=JÈ©Î%AZVÓ§ß…ù.´Fa¤
ý`3È*›ÉbCZ×¬
ÖúÜºÚ´“oždYQd®ôQ$ÂKôÔ€”µ}i½E²:Þ˜ñ­¸Qâ¶®» n¨°´Zuëa’Èƒj3î˜'ò4`Ã'¥Y­öÃ¤Ú°ó´ñÔèU#Ã$ 10öF<O1†:W±#{»„ŒÛ¬¹2Fñí|M#¸°Ñ˜, ‹ÅZegÍibu¨ÕÅäõ€µw°dšœåÂ¶H´#BqVN?> ü)öMq×
ñÚ 2Ê¸ê}¼úî QòÁ‹‹L%ÁþŽmæ,Ÿ8>žBk ýZFøc®*:(Þj±‡âÈŽ¯¬œæçNÕr ‚ú|S8_¢ÄRo¡á@v_ lèQ§Ÿ•7’¬éº¢ÇW¨|ÔË¥ð£PÕh
;«ß#
d±éiü$«ø•Ž;€]¹r[4s±ÅjGLn?¾4Û¾³uòKÛ;Ë‘c[WÖ¯\¼ V“]º¥Ðë®1æùÔ;^y÷%ü9ª!ÍqðšÞs´ué;7=k8Z[’X[¨!¶¸±˜o.p kæ`ëM¤w§…dw:HŒõŒÌüg†šEÖª&Ò YŠ¸E$ËVóJÈÍò´ü3KolF&°¤OÑf(C:´#2
«jÕ½«ýL¬vªðÕ€5HMº¢"HXZ{ç[àš=UÄò·Ù{»b‚ÖÍÓ.éYÁ#Ýå{Ší¼òñV¹¢Ë-pÍÈšk—r6+Tp™]Õ®»u=7× 4ˆlCMD©´V k»“}Ùý½ï•¦Z©R¥J•*õÖÇF]dÁlW¿…ÖL¬–ö‚Ø‰2Â@VÑUFÀÚñ_ýªmƒâ÷ÿ¯Ñš#'xKq‰|/Êß?Úszy{M˜æ­5ÿWÒ ÀnKŠï•bçocüÇFlß1\e@Ò‘áQ(.Ò#±ßN×ÆLm·ôŒìI²A¤µ¯¶W+=Þ!r}}ýÊ…[èòå×·M*¤×l*äêâê…sRLº!g…¯Æ‡àùfÃ	E˜AdŠ ù~bG~šÕ,¬±›–ãw$?Žµ—¸LßÌh±ˆ| [WAOÜDšrŸ4}-Rõ¢R57EÜ‘f¹ycT&ÂÀ®£‚J5®¥ô¤%ð‘ŠQ)X$&Wñ.U¿/á%œ&U‹Éýšê¬=:J¤Uv¿T`ÙŒà/r…/Ý‰Åý~­ú¾lÍ'høTDj@²ïs±²YFŠ„äûPëY¨l°Â/¢>Xi6¶ðÊ”6V8P¯Ç.q¿¹È…“PZ‡‰X³E‰ôÝŠëéiÈ¡Ýì4R€‰hh)iïýû!<Ðahr–«˜Š²¾°ä AZü¦Þ›âl¨_|õ±p*P
´•ék`¹q€¤X:g2Røë@gÔWAiŠ;­jœ¼]>uÞ¢LäBÎÑ÷6kò+ü÷¿¬YcíÙ@lPí›o¾9ùôéë¿?ví)P¶s§ÑX¹Hh)oÏÍõ+›OžìˆÙ67MA$ïÔím2é¡µWþðîK/ñ·¬`eC.b¯ÝÃIbÞ³àÍô{Þ±´–Ì–~g"¸Ù1¸ÕO±bªÑ/ù8§f`Mˆ&	÷ùÁšh«0¨Ä_ùZn¨-áÏ}±ÃŸn²ÓÄú“v’øñBÒñ‰
…€ƒøjôªÁjó©¦,‘Q±Ú®v5PíÜe+‚,¬YVC#àš¹/X­¨ƒ,†«i¥Å#6ç5ã.ŒŠ,¬å2–Úó+,±ÓTÉ-'6{Y‘ìò×¦žQZ‘}kÉ#*PM;DgÒê
afÝV£›™jÖHCZæ°VäýšuV´Sõÿ£T©R¥J•*õè²Éf“²îµÂdÛ1‚žƒµ,‡låY%äiéøApœü¡=ûöa)(­~4R$¢…µ½øô› d¸–„ó»’ë¨M£Í	ÔCm;öš:FI;Û£ñgCÔÔG0c¶[õieQÃçñu4H{ÌU´:7i¯ÄRë,~zb¹²ªÀOv6¯ÜPðûÙM¥}Ÿ³9#š=|¿‚Ö5Õ–µŒÎ¹c¸j|lL9ÑY¼µ>‰øœ{èV<‰9ü
‡²±®`Í³S²UY¦ô(²y›úaT¹“ YsS
lªPèè‰Õk²‹¸F
´ˆ«vg¤é]ÍD¾šP#Lb±R£
„Àeu‘¦¼N:UhTXMÑ‘ÆÖ8ã9Q·Kñ%®IïYÄ-k|»ä~!ªXi€Òb”ð;l¼ÙPÓX»ßãõ}CªÈÔ	Àm=ëÊø‹»!TÓ£v°U3àC!f]´¦è×$÷÷˜¶ÁFã·Õù+©oÍµ€ä©n˜'ö¡AÌ¸U«.W©P¹¸Ù¾Š`¹ ÃôËZKå®N´¥-!ÔqÅ¯€r!°Æ‹†ÓïMµ¼(Ö2¹°èâ4$pWx®ñÉ¼¬t“ÒË6ç"ðS§ZÅ0œè&5ø%9¸Äp"øD˜&?Ó¦WÃræÇú¾uÖî’/h½«Ô~¢ 	îÖ¶O;ùtçìæÎö‡Ç¶À³;wÖŸln^¸¸¾óX°¶¾þ½nr4Îi‚c²	ÅyÉüqáÈáÃÌoãëÆ}fFw¡5éo¦l7›hhtS÷¿Óõw*‡œüxI61ÀÕOyGXA6¨ßÁßµ°¦#¹Ÿ–ÇÜ]À‹aµŽVÓ•Zdº-wMw†íFâÉAQŽš4=™&³7'£™˜è¯¯–55«Q96&_Ís!çó«%¢5“É:¥n5#°Í%Ü¶»ØÑÜå&_5ÁFLæõoÔ¯ÎÍÉ†näýlºI‚4íÈý6UTCš•Š…hÏm•«¥5-eMhß*ûÌUÉ#–šü4;ŒeÍ ™Aµì–³—\Jê/CEJ•*UªT©pf³Ð–GrEy‰¤®ú[.ÒŠ†T€ÿ’µfÍµ‚5™k?øÁÐž¡={ª‚5þÈßÒ‡mÁZVc=6ŸëŸ™kÏhÍ.Òyc¢Y4Ôx«(h›°µ¥¸.Cøm
ì7“×êSJR$F$`ô€W§³…†'êÎj•ç`ÍÊ®üfëÉ“ÀƒÿäÆ•k;×om]¼lK!_SzÃ«??‚¡äÃ/½Þ#; ;ÏÙ3‹Y(ÍÃËZJ‰1cÖð(*|È~ À€¯iÎc(%R¤¿(:HÜÆ˜‚™&Ä:Ixq °ÅêkKhŒjh  Ègæjób¬iþ”#àöaôv…uÂù;\ðÝªÚS¦°H’©vµQ’”ôG=80h’*%ÁW†yYñ•…µQoW kºÙz=–Üq?+‰¡Q­ž¯öñ³˜œ¬K€°”7¥wq_½oòÓT‰}í©zJ_ah†›ó›u%ÊÝÂr#¹?O©;ïÙ`Q;cã<sÙŒ\/µÔô&×«êÀs°™lFWG-\µ°ÅúÀZ ÛQïh(¬UÍÀ×‰Ø¤¡™À+ã¼QÏèP©˜IÈŸŽIU©-—[gÜ8kúØÌÐ4äy|Š[I‰dTÉÑQ€§u8M#ÉkU}±¨¢jÅB0£ÆY Ì/ýDïÞÕDì_¼òôÆ¯Ö4{kõúÉcÛ'OnŸ\ÇFûmóñ“ÍõÇï¯nì<Ø±zzæËg·Ä&â5þ´ Sp\œýht¼rG[6’ÙãMûÞ,R¤Õ<+™lêHÒœ_èkŽIíŒ¨Î1–«f`-£›*ž0P•{gÚW¨ÀTt©í–U™oHÙ‰)ƒìôûæÉ³ƒ~Jpe:ÒdvèËXÖl´ˆ3ê=U3%ÿ)Zäò©sy³fb_¼xæVvJÅ85á+…Æ-[øsÍx¡‘ÆLTä_™
IçãFÜðE¯9«}(jcÛîÈ [­aIýj·”Äo.P²´¦ËnZƒÂ,”bZ_eH
»B»ÊÒ6±‘ÐÏÍ²™¸Mœ&X³[Ú«e§Z©R¥J•*õßÏiƒÚ·åv×B¢µ¼…}­'‰Õ€µLîÏ#£ÂA‘GóZb¶T}EŒôI¤³)ê-h­ãËK•jºÃZ­g°Æ¾ö µ£uYfCc/²U1ã×òEä¶ï xSBä¾ÀåÈPàz5HlV
­jëë\¸åõ­©%H¢µ3jzU9#‡;‹c‡e';©Ù³åDÆ¤‰ŽðÄâXs„=‡ykT8¶ð¸\'Éï‡Â"¿Ñì5›*X	/ªßUø–XOµ’x1Q¥Ñ;ueÇ™>_H–@RŸ¼5>@Û=þˆ‰‹CÓå4°í€‡%ÚÆˆc¤MÌ«VD#t¶ñh§P%˜ü‹¹nR7ñ/q¯º&»Óm
)¨äûî˜¦5ˆ±Ø9Þ%„×w#2Y­ÅËriÊr™‡M“Q‘€pýV ×>¬»øiŠç€À¶X‹êí;iýÂ²jMÁD@M¤2¶S§†c{Ê¬Äl3!÷2à¼VŠ_G…¢
,S>	RM)HLæ¹BeX+åu+žØ±š9h{ŒE®kt"Â{À—µñ@yœ-Ð‹’Ç~µ½a[?ÀHg#µj‘ ÒƒñÝ8°ê•ÜªÜ<…¾ _/­ž)/Õ2-¢ýwï2¸îÀ+?Á#‹Ÿ÷œ…5ºÖÎ>¹~ïÃ;”ånî<]ýíÖ“§ëŸ\Y7ž<xð`çi#g·/ƒqâÀkÛ6É+^{õg/¼ð£Ãû•Y­¹QŸ·­h·-¸¯åöB?1÷2Ö–’yp-Š—nÎÁñÜ|7wÕºýù0®ú«5|ý†AµÎî\Žì6Ý´–-Ô“–s«8‘—äú€S“1Mm6;äó.Âkrr0œ.XM¶šX-/,XÍ&‹pË`ínùÅ‹ç.¿#cÍ˜jEd.“Ù¿[¹Ä—Þ‰š>ÿÐçßàýìëhæ¯³ÕÐs#Ö°ÔFÙ1‰ýD‹|˜ùiÒUÛ;Õ@.ÑÚ*ë¢7­	Ã$øËlØD~ñšvZjÃSË8Qj¬åõ¶Bí~–U–?–*UªT©Rÿ½Ý6¼é*‚Ä©ÿ!k”°¸†³&å´frF~@ÊÂ`íÝ³oxß¾ïÕ*U40ä9êÌª¸ôEí¦µ€XàµM¤A6.\µÉ†’6”TèŠÑ†L`ŸKIeÀ%…Ä­í«“
ÉQYr-Ž˜Ü‘B•¼ry{}sccëÆ'Ÿ\Ù\W™"Î^TŠ¿*!¶÷Ò»j\Wž£µt|ÓÍ4sFÏ]8~£ŸTb=ð'ÔÎUqå 5é£¡Ë V[^xv´Qõ1R§#®JØ]ÅgôãDÉï¸oq«%ÊëŒðTÒþÉèK§ðèôÆ&òGäÇ)Ý¿&6Œ£nì7TG‰b)á…ô¢¥ïM§Êü žÝäD­1(9k(lC†[‹r÷ÔŽŠÕS4ÎS9r^¤ÆêHƒÊÅH (XãœÜº^V´F—\&UÁZÜÃÒãK2¯lz–RCU&FœÅÔ¸ª
ÇSÓºF¤¦H# Ç©éz­ÖâõL=$`‹sDÜCªH¤G¤fä&Ÿ« ’+	°X‚¸¨Ò†ß”Èè-Wy*Ã{çÌ°¿8tð4|¨Xþ!0^ Éx(_¼ë-X’ZÈ	¦³ï©bÜk»X™fp¹ºí€5õÄÕ :<:ØRÉÿœN·Í³Þ_^;”ƒB´¿Ü/¾xÔ;ú(#µ»ü`ñÕÐ_€µ—à¬oÞxRØø[ÁE%ˆìl5/momoï<yúööúÎÆý7¾º¾ü¸‘O®=¾¶³~Î6Üµ­"Êè{÷¥àÚa¥Á,v&øá8š•MšéÜü¿L#ÕC.HsÉÂ×KK“7³ˆÈ[É/va~iêË4»ý%ÞÑ¹ùÞŒÑNS“CœÅPž0’m;s­P–Ùœ$•Ÿ—ïúÚã'ƒÍ$šiÎ¾59˜Ffàt3ŒÅpZ3\sVâóÈ"ZÄ–@æô«q»rƒÅ¹œÅS²À~´Û[c+ß°û;]† ~#I›‰Ætt}Í™ÃM|Fi,m›Z¾lh—ê ;°3±•Ùÿk-ódk«ØtŸ³š0Ìh›þ[å*ÒŒÃf±ŒC*„ÔQvëqZHÙéV+Â¢Ø£ûÒS+UªT©R¥þî{¬]ÍÛÖ>²)#À´¯Y	Ö”3RÛ³çûû†‡÷iúš-‹Ôµêx87®‰Ö
sMWJÒ`´žÉ…¸\Ï [[ÅŽ°ÖÐèP`&Ü·‡d9('Ã”ÃZs‡³ŒIû]•àI|jº·\ùõÆ'Ô¤kë×€µ|@ök§^ÉsF>…^À5±eú/ÀZQº¹0HÙd˜ÌÅ¤ .-õ}>ëv›òØ¨öôõqŽÂ¸†*¥ž*§x	ÖkXQý&Ù#ŽÃ“ø!A}v,v 5äû<®9âK¸÷ƒ§Å>¯ìÙù ˜Ö`‡&ÿØBcmVîdTu¾@Â<<¢P*‡ªÎä„ÈIB1fg¯'XS¬ˆ©ÖƒÕpÖ:‚5Hmñ<šª•Zï(•’½D|æÀH”HaHIgÕÁ*(†àKl!ÔÔ4üq“„ÒžBX\JÁŸjá©-te^	špP1Ó\Q”M©¸5 CÐ…Ž\-°Æ+i$[ˆ_êyd	Œ§—«”_–"¾ºGË!NÁ$¶Py©‰szö¸â?ØéX¹@b=¨­1ÎXkó\®œúæX—õ„2ØØ²Ò¢§oüÙo.‘•üXí'ŽVJC–ÔrZ«	ÖÞ}õ?ùÃ7ßüáµW^ÇV»s}ÐØ’½vµyisóØ±í;6aµµû«'þøo«ëÊ6zød}sZC››ù€@dì5ªwv›fKáÚbÇo:MlÅn’hüÄ‹ƒ0ýwöõ×ZeÚ«þ5M£Hô“AMÁæÚoB2óóYîY'm7—•†\ž'´Ûæ@¶§“òS¢TÙœŸ÷µ§sºïÏD“oÍÎNN§>Sâ™xšØŠì/lµúXn«í.<“ÛjB5E@šrÈ‹,oéÔˆ‘néë[(c7·ŒÛtÓÄ7Løˆ	¦RƒèFš~¡c°;9¬qó¹“ØÅR-k[Ä@"* ¹^‚ÓiS»tý:øÅª%5Ý´ògøµfÖ´”Â>M:h\F+¤CnÜ—žZ©R¥J•*õÏ¨ïZk­ðÖHù­Ü5ÁšbF$‡éØÀÚÀž¡ï šRÔ6("[†xRic¡,­íRblµü1Ùe¦×­.µ‡)¤Ó®½$K²>ª(Ïâ˜«¾§Q¡Ê@PøÚ0‚k¶LŒ<ËÖ_>±vBŸÝOl¯ãX<x¢¸½këëÔBf€1×^3±…¹ÖïÓ¸–š	VVb>îNjàðÒ<Umß¼Vz@Sµ?—Kê9‹ÜJ#«Mìöº,ù (FkUF²ˆEI:ö_ÿÈCó5C[éƒU^¥×S¤2UÕXñèàX+°Ölè…aÌdn¸„!õŽ©q,Ö 'NÙæâ†c;Áxø·®”tÍhƒnÎ¡]í¨µÕ´X”FÎh9|v"ÔŸ_ÚÑn
 Fz­ð:#õÓÕ.‰Z&Æ$p1éçÃZcC—]……xòË0ÝêuÚE{¡&›W`ï1“Ä¨A^ô€¡ªBÄCõ4Í–$‚z.˜ªÒ1ÔÉ¸mòjUeBŠF¡8äÝ§¤}&ð<^Î’Ûâ–r¢.9&*°¥°²ÒyœÝ{×Ô/Ð«*Å<arOB±Ú(ÆÒUY&êC„2	Ù‰`V~%5Å¢RT²	­=*híSk¬k¾ò±Æ±·OnÂB^;>¶³­î¨;×ŸlÞY~ûß@®·76ï_¾gôä‰ýãÂºÅµ‚×ÞxíµSfôšyÏê]ÛðaoŒÎ¾ù;Cˆ)œéëù¯å¬åÊÀM>ÛÜ|HäÈM~ ÀM<'‹mD34Ö[š³î’Ý,VvM˜¶Râcqn+üµFòådÆŸï±®V5ŸÈ¥›/ÏÎjt7Ä61gb’MÓ­¶ ªý¶šJ jg.›
HŒµS3·.8pÆ‚â­[$‹ËîqjÚ¶w±ýohi>ŽÉ\0?–y?žCÝÞÑ›ÎV%m.7²"H£_ƒkŠ¹$™6µK«,ë,2:Ë°mM÷À˜Tg€Y!=(ï¶µ’Å!<´\f•g–Ã¯K•*UªT©ZQ)eéÑ_â­ÉY­)eD#ÒÀi@m`hèû®ç
ZžãE®QÏÇÅ8Ihmw)d¡ù°.]£ÚXV3æšöŠàÁ›¦¬=óÎÜ@9þî€ÝktdEf›í©y^ÀSÚäûWN¬]]áy'îo?¶¬¶³C¢·¹¹¦â2ÑÚm*Ë>%"nQVÆÉ¦óRñøy`÷h!n¦aµO¤³´Ôl$$˜“…pU5Žz×`µ8†åd´…cžÏévLj¸ZD¯%U‘F;‘oç&Œà8m6Uˆ½CÜcŒuz‚•‰}žåeH(@K ¸ÒtÀA(®†D/—ÓäÒ—åK@ks„¦tYˆÖ=iEÔ¦Öš²Õ„j#±©ì°\äS?û'ö:5¢5`5r1§‚8œqÑ0çðœµjÓQ>#H3Tq¢¨d±YzÊÄ¯R4(3ŸCÀÕjm\DzÈÉÂccA¨cÌˆýuˆ	ß/ps]¥I²³B8Iö:ð'_
Š3Ó¶#H/À'c—ª?ÇÃ€¯âoãz˜/Öa2ÚÎ`­©Ô:uœ‚lx4Ïm+(’‡µ{xJÕÓØ9ÉSÒ?LfÁhTZ"€/r²ž5¯âÈWÓÎ~Ÿ÷.Õ¥»¬µ»DAÂjÐÚ/¬Ýùæ—$AžeÊ¹[Û×ûýÚö“íÆïïÛº·½¹uçíë¿¥šõôÕ‹oÜ¸òÉÃ‡7¯<”¼Î›uóš}»"“åoªw­#LóšZý£È”CŽ›8ÿœ×¬5Ì…%è†³¦µ$¹ù–ts>·/}¼4gQ¬9ß³Ýj¬>Ïjy··¢OMŠcÁP±­=9‰:é‚¯ÍN:ÛœéÃ‡/ON
Ön¾ürÒìOÕ4^m30MAµ± UØj»S …jèÌ3Wl¶ÈEÌ´L”Iù©>Ç—Å¦4ýLøÇlÙUÿÅÝùyCkÕˆ&å°&j»gY­sÏ:käõßC²ÓÀµ¬gíˆ–šE´«Hkâ0s/™Ýâ²B¶O˜ºH»%XËºÖ$»Ê^.FìÔJR+UªT©R¥þé!­µ–Ê»Öˆ„Ìå’¹gë9Ô·ˆ+¢6·o«!)ò;¼¨¡PE)¤TÀZ¢±á½CØgDcœ¶%¸k£lè(nZdô©±˜C£-0m4¢íV8¦ñ^Œ8ÖÇrê%O¯m¯þ”î¨µÇë›5ìµõk[a®mcV¨èÕÛ·¿@†=@œk~¶R¨iÃƒØGƒÓª%SäÂRÒ§²lvšØÀ œëRÀ•LÅ^O†¦Tw%/öÌøëÈoð_i"`i’É¯(¥&gNýhŽ@LFYÈ£ýÖ/
áÂ5•û¯$\›~Ä#ø97é‘£S­êb¥í‰_Þ!Ð!â¥º>¹?2ö¯OˆÕœBBl$•>êç2f3¼8Vç£îT÷ñµš„™D#Ï÷½ö‹dz@Š®[E}ZÍL2ˆ§ÌÄª)Ó”É5žŽƒZ•	˜ü¨Š rÒ|ì–
÷ ±ê5]]•†ÅNÐ¦VH18M¨6=M#œ=D]„}ç‘ÖkÁTÝóìfü2¢LqsC¬Éš0bJ„È¯®h~y|œCËØpSìâ¬õP‚ÿ#¾œ©Ë¬Èº4°wxžÉžÌ\Ç ]… +®*‰*3l$Wô¾ŸÞU¼ˆ`x‘o~©Žµo9ûtëúê¹­í{×—«·îÜûýÆêõc{·ßÞx|uÙ;þÑÕ‹÷/<x¸±ÆŸx»>¼üØÀ	ïVÉ†CžyöµwQþ·÷ïÇÅ[ìäÃ²‡ÇÆòFŠ÷ï‚d™íkC'7e²YXûxiz’TVûÝÇqb°gaé¨ü¶fsa°YA>¿ü0'3'«úÓ	®YŸ­ÝŠ›#3é¯@XIúVL{ÜÜÍ·¦ãtöeXm2Œ{©`PS	ä|†²ÕòÀ~¡ÚîHD»Ú9¬53…ãGîœ:±YšÌ‹YdL©){€Ö:½9þ	öTü8Ÿ˜Ÿ¨qíú~^ñ˜GŒ1ÖhÓx59k¿É5¦akºŠÑŽ]_EZÕ%3Ù²zÆì–›jjWS›Ús2ÇŠf46¶tŒgØQjYòci©•*UªT©Rÿäú®h­@5úÖ¾d@¶¤BH0m™›wÚ ¾Èq¬µ"§æi$°ÂáüµÈñœçhíy\›·—„8Ã}ä>¶ëV8dm›9B‡šM
¡ÒâÚ¥nûØéuý	ÞµF{i<
ô`êã†0Ùd¨‘åïŽòìÓ+÷<—‰kt’l>0¥ótôÌ­øe>!û6){o¾9BQYéd3+ëÒäìÂ`z’2®Œ·î²óæÍiÓ‹¶×Sè£q¼ÈUÁR?y>ÄúM°G³Ó@(Œ2æJCkje“âª>Vƒ Z«ò²JŸWÂÊ‚°(›­“%¢'Vá„,ÆÄ„ú‡òºp¼Â”/ÅÏ”Ä<+Qß\ÜÚæ’G’.àÕí¡˜
Hg/çe çqÖŒ„j‹¾Aõ«ålñt4&]ÜÁ«TŠF:¾Ó	û„O9»ªã’ñ‡Lšf@2¸m¼Àam(Ë6«˜&1­€;…*@Q›ð‘ 
ÈH—t©d…¶kÜƒjêrSì[1ÿ²·x¥4ÀY«Y]ãÐx]†œ^žO°Öbi¥ä‰(Q’é <¾5Q›zOó»õ¨Z@¥¥Ì6R)i$Z„Y¬k:wbƒ4+ÔE²Dö¼5¹¹j*ûÂ€¿¸¦IŽŠÕ²x‘ý‡¼û—¿üä'DAJ¯?}*gíä¥ÎÆÖÖ³[·Füë[ÀÀÊÆýëño?<·"CúÄòÊã‡Û«›î¯>Þy|îñ:p²®wëEÂF µí_ž;C5¤‡|é¶ñ×p…GEÚz»yžÿÕ¼Dú?OkÓãÓK^²°–~üñïæ`5&gßä?2³ð1fÉÇýæÍÄ÷²þmÆÏovò¼Å×œôÿ}LNGsÆ_X‚ÖrÇõ¦'CÅ@Æ33ÝîLòÖlÒ™‰o¾ÎÄ³döë¯é´íV§ RQ£"u8Þm«å)ÈÂVÏÚçœºŒ.\¶'”÷¦å‹]F›=.5ºódï¾Úûyã«õl»Z†j\òP‘Â]Ëf¬ˆÔ¸@jÄA>‹9†¯†”ØÏ‚%‹fV¬­åÔFd¿¶2Ë©lMžÒRÒhldñ.;"P+ÛÔJ•*UªT©RBê¹E~¿XM‚ÕŽS	iõÃ0lÍÃÓQò‚ëÐ¿†öcW8ŠŸœEi7­!ËjóaJIšÅ±ñÊP›Í×³xÇ±›~ÍE†Þ²Gµ¡ƒBÄöÿgï|Bã8×59wÂÙNÑNxÕPhŠ=Ø´n 7µfSi	(§ñâlºÁŠÓm0X‘]rª„ä‰±NÜêÊp",Û'ÙsdE%£™kâ#,y#cBÖ*21ˆxaÇ1Ìïù¾*Utã33\.dSºëow«%·¡~zÞ÷y½ò —f÷{ÃM;€D£ù­gë0×Ò¸f`m¯¶Ìä6pÙ{Z;AdC©Ú™k–Öú;#ÝññþþwÆ»¨ß1»¦VQ·M†½J4à¨{…«ù¢ÒB°Øg\ïi„tƒmØgTS‡µ¬“ŒŽˆiR/Ié#{X•Wümß=FH¾YJ;R&õDYBßÈÍ£_„5HÚ—	ç0=@°VätÐÒå:¤%cM°&ZÓ0ì³NÁ²šB ?®Ý…Ö¨È„38˜AQßŒÓ£Ô0çHì78:Ú£y®ª1 žÁEÆ\u°E~æÒÐ;‡
AÈ'–YªUl¹» zµØ³eFLóP[U(œhrS1¤Ò@u@ð$X£'­å«¯,ŽMT¤À	’jòRBj¥ æi±B(aD¹|5MnkóÓŽ|8þ¡èÕ‰zôE{>mñ²òÑèz3	”1†á•ôÇžÖ,gï
›x·MÌ@€.Ð›ªAçç"÷,ž±Îñý ZšùÖŸŽÿøã×ï›;ª‰ÕfÏ<¿yóÌ±éí_íl­Ÿ9Õþ_Ó‹—ú¹~õ`i¾±¹±´±±Ì}·ûìIãÉîMq 5“¹@Œä,ÀvæÌÎá’_c¯½¯YÙÇ1ØÞåŸPÇ‹ÎÎØù†Ì^³Ø2{-ÍË¨EÖ¦"8¿@ÜKE?;SÑø½ÉÑ¸>ÐèÞ[ùŒU¯‰X³ªjá²z/BBá¼ìEZ‚e÷ÎôŠ<râîxŸ?ÚéñêQ¬¬©øeÁ"¾ßÊ* _Ø/H¦iq‹Sè®_ú|zN=kD÷ƒcû5Ñ/X-Uuto;Ú^IYMÆãÂ´Du£vk:D«Z[¼fÓE€5´¹(	Ö§—®)¥__Rë˜n¥‡²+HM-hl¥®Ú~é¬Nç –+W®\¹råÊ
!_5=ìI%$¬†«ýÝÂšÍ„¬üá×u¸:ÇjpÈXë+¿vð½÷þóàâÓËÕjÉùäÄ‰¿6×2Å5bok’öä°‰ÆHƒ<(€ƒÇ¼ƒÆ`ôÑ%Éý&Ø_	rÔAºLÑV›Žr—7HãÇÊrÚ¿ýl}ûÉ#Üµû´ZSÐ^Ö¹Æ«?à¢÷Zá@ÃÄBN×PgQ°ÕÑUîdÔ%™ ^ES•pk¨ûLŠ4t¬X~õ†$·CÂZÜF£€
KD0z›<¨þ4ˆçw¡[FWðê’¦4&ëÁÅŠÃÄm3¯WQ$±µ’±qÖÈPÄÚrêEÚí¨‹Ë…óÓkõON0â-MÄpn#²Z4¬†ö)øÆÂZ›,HÁšSvC¡OàW=ŠÄx3¶/ò[Ž·Ô°7Õ»T?ªÎW"&%ª*„uj—ÛTý¡ºËj%—Ü³ñ”ŠÉ`ÔžÄn­37¥°¦HG·Àq~<^£˜ÑŽF´>{z’p·­6Þ1ÚZ¾rÁúá˜mMÖVPEIõŠ¶–/nÔûòš€A TO*}ß3O¦.Ò3õ"Ù&š´Åi_ry/Vb5/@êGkÂÒÄ‹ôZªt«IŠï7YßX;}G°öõÜ¥_ð{ñâÜìÎŽ¼µÒE6¶vn´ŸZ“¯\i,mí<x²µµ±ü`ýÙ“+Ûê³|ôHƒ×Ôm¹¥?0Ì">³z=þÊ`Âü/?~š¦Ë
Éióox64ñ” úÏH´†Á&V“Pù©»ŠÆº¥¤ö?ù²;«)µ²§îÝ{zþèxOó¥»a jU#>¦0rÏ_ŠV©‚ßMuZï^cMòq½D`Ûù‘ÎÈÑqµ¨ñJþˆX-Áµt´šÍ€Ü,’öïgµc«Ýº~I­{¸{&ðqnm¹£îZîï—ê½Iþ¿YX3‹ÌXãÿ‡:ô{ÍŠ­ÌYSÇš<µ¶û×ø‚Ï²$HÖTA
Öd›¥J#FÌRâ@Ò±ÆB›v•@j½Çj{	ýºÿ^ –GôçÊ•+W®\¹öôÏ¿­!Æ¶þð-°†lÛÊ¬µ‹¦ªñ…úÝ_yÿ÷Þ;änçr¹¸|úôiÑZf®¡k­š4Œ¡‰Ñ›vP¤Ö‡OV“«&z¬tCåÁ$¤l‰Œ~5ä‘		&ºÀ››Âç\•B¨XVû£{`þÁ¿~öÙÒöúÃûÐÚ.Ö$›
y\;Â{>ñæÀÀµÃgEk–-íÈ5Úk’P=¹jÝ8†ÛzÅ€(9®IÁ0„ñMÃÆ_2²hX“CÖ&cƒ-d5 Îö„e¢žŠÒ±çPÝ{8™XxYÔ“‚-nu šÂ¸0†k-h­!GO´»ñ>¨|ŒÅAˆ~<	«MÐFç…½ÖfLy£hÍ\’
Ðkc\âsã2gc_ÑÂš­4f&&Z-UxÒ.×D°È½É1äG!˜"g°œªE½Û¡Ø'S_ƒÊJ
‚„š*ø{CJñä^5}b=\Õ8ú¾¸Krk²¼†ŸÏWIG<f±±¨ñjuSNÿÃ×x`ÅZsD=ºþµ¥D’Và¶TvéQ¹¤¹ÚòÖ4ÍÇ8©›sÏ1Mm5v¸™ÚÇ£òöÃC«²‚³v©0$e„³hÁRnˆ¯À'¾1êÚà~ËkFüJïþx÷Îñ°Ú×'k|Ä¦Ûïllc°ÙtœÅË—×7ê@šF|Ùqgsc{qþÉÃ‡;‹;»ëKSØ¶o>4]¸¿¾µ½nš-UL©í€\CÞ×´@¦»“7ò)Ó²¡ñïõvôÏ¯¾-5µ…k‚5+"GVFŽšJÈ„Ú¦úWGâQXí<—]v±ÐðÖ‚§çûã‘Õ((i¤Xr’î6=(»G%ŒåÔ‘Ù‰{mŸçÓ 5h½$®?Í€L+ ÷w«‘)X3¨¶B*äKÂ4É¿–%  ,ù1QrV‹:|èÃtÞ£V«ÍTëÙ4lÉì²ÙNŒ5¬5&¬%©ý
í¬¥©ý,„kRêª%ù(sÒÌQ[™`'-TûÖž°Y"ÖOÔò€þ\¹råÊ•+×Kòû·ö­ÑÊ„ü»•¥µÏ@53[´æ*ÝA%¥CÂZÛ<uçøñâÀÓè]k®½×”+"ïLãÕyâ´¤YmtKÅc`¶w(Žô†ko³éñ+·ÜÙ“gY‘N‚àÏUI¤îW.
”Y¹åùõG÷k²*®aT\…Ö(*SI—¼#êÝ&²'°§!’ôúUé‘Ó0Nà´A/lûX-LbzÉH#u±gi­ÁZn›&bUU‰F9ÔàW¡ZF¡œ€á¦âH=&dÏóä¹5‚F]É‡- L´¦
K“õ©QˆèhGrâT±ÑÃY‹éÄ–xÓýý½¡áZ@çš-||6¬,¢¼þ¶®^ñ<ß|óÄ[¬Ò®µz‘×/%ÆšDB…tX„‚b¥e¶z‘Ü)FµªyÞ¥‚N4¬ÌŒLkµŒMÅ†ßª`]ª€ÖJZâsyÐ†c
²I”=â½‘ÂO# CCš,Mb«(6$&!Ó‡ Ly$2Ö[ÁÓS¼&$ÕŒ5¡\àbæT®¾«ÇÓàòZ¢?¦¨ÅbòÑuÙºJœ2vEoÔdhJóø9 T
Â"˜WÑf‰=¶LŠRë¨øøqË{l¥2SI¾ºsçÂ×$AÎÍ{AµíÉå±c¬.ƒk‹<qzic±>àô ž—)6§7êâ´ós&¶w.?Û}°¹³»5½±õpýÀ¶²³m«wŸK³ˆjHlÐ=—6’JÞ7Çäš~/ñ–f’üµŸ!""%rý3‹­{oœ’FÖ©Íf[Ú`¶‘óçŸ1ÖâÕ¸Ç ¿büôéùñ{«a¯üüÓNcÌïv">ÆXhO»cU¼Ü‘§÷Î¯ÆXl>¡þQ`M˜†½fä3‚-C5bEþ¯¨vC¦šXMºe²EnÌ]_¹þá±,£_TzGé–NÔCÆ#öÂÑ©L“)«Âj)¬‰Í$í±e\AÆY[–³ÆL[3Ýj6ªŸ¶vÒyØf3	y²±´›ýÈŽ\¶äˆÈŒ¥ÝaLËsåÊ•+W®\ÿP*„DAZX“«%´&VC´æ¾þZ¹¯¤zHhBö¡`“r¡âæ2›Ì5áZFkhR×ŽZ*ÎÀšÒCú`=VóÒºHF©Q)y¨¯ÌC“žµL®ž”Ž^c·9haMôV@Z}9¥Â~y~eå>"jd—^ …›ÏoZZ£°
\»`g®%pùxÿ<ï®M%P<C7fP6ûjþáÕ`.l\èv#µ˜¢­gg
“ñ×ØPž1ÍFñÆE:Qëd’-¥R•3=íI!»aÉ	äeñ¨v½p˜‡èL¯aÃ0à—o0~0‹GµqO›Q›q­×Òo.2°R–Y*Ájß‚N|¨éöî»o½y‚¥Áµöa¢YJn™ébÉ ²OQk˜—ìÄšëÉTC Èw™Ñ «Éž

päªGŒ–±À-©ÝL½fM˜J]`ØWzIT)ªÄ±eaM¨_ Û·šøbM¡\¼âåô¼BsX°æ	«|­R¡‰›rÈµ“ÄÌ”‚<Û÷!96›ŽÍ†2IJ•V—öÅ^¾›šÖ˜Ê6óŠù·e”xowy7DÐ£\·JÑì€¡Ž^X¦žÞÿ¬²9éB„k‡d­õ¼Ñž2SÖ>:~\°vòƒÏ)Y<3ûq{ìäåÙ5¥ý·b[u$ªŒ”8UuHmï.9J”™rn÷Ù³-Æî¬lÜÚÚZçg@5>´ëàš>´¦}×µ	9èÂ
yC(îšÊÖ/ªú'àMD¤¯6î)¬¡n:{muDÌ¦™m€‚Ù¦([dkjf&9zžŠÈÎ‡«O±ÐÆÏÄñQ¨­Ñè¿÷t˜«NÝëŽÄ!›@o„ÄÓjÐé‘"2r>uÔÐ¸?æ¤¨6lzÕzëT{Iä[ yãŽšHT#aEç¦­ŸÆM‹TöÝöÃ‚Yg˜©6õí±ÚÙz5d¡²Ñ"	¬1aJ³ãÕ¬³†Äc,´!¥ÖÒ»dP-»ÉNrÆ²Ó¸±b‚ÊËsåÊ•+W®\ÿ¶5%}‹2Zû¥µ¦"H#×-3ûõ>:Ö*˜+îàÁƒƒ½A|¶ÍãWN·¸¶ß\“ª‰„VfÒø½>%õ¿}(±2fžY­E]¤Rù¿ÓêëkÕMUÐ…¤Î”=›å¿ÿ!–®°ºx›Ë?XM¹è÷M/	nØÖ5 &d}„Š2ón•….fÙkZ ©þáÎ*J/u§‚J/Æa»×õ{M9f^;¦[8N=æH?Ô pÚð—~Ú"åêÓ»Æ	nò®Ð¨ºžY”3!#UåKö"ô…vfþ8¾¨â´õT¼¥˜@ˆ¸ZëG½Pe£kŠü
Õo$ðLzK«o½õî]òßEk×ð«J
î7y$=oÐÚdàsm=Î…-U•ÆUëEÖ³Àj¶õ‹ÚAYlL_S ˜å“Ý?Ü*»Xcf(7|þ ÏL¢&RßrEY‡¨´ç±Ö$ZqóØ’kæ»x``A±ð›WàAî’ šÛÌ3uD*ÉuŒyØyn¡ÄáÖ‡5?æ»ÓÄ@~^ «Ì8îšj,èÆ£Qá¬`3^—ŒW(Ú
 qY²5Ê²'VKŠ ëcßÀj§«’yØ'_¼x1;{nñäóË×—*(ÓŠ|Å†,iÅÒ,îl/‹›klmlî¬ïnm_ÝÚÅƒ[»ºõdgûÖ 5i`#’’Hñ¢sæ1.›ÿpw>ºû®€m¬Žj"*±Umf"²&¼Öí*í”Oq'Vèˆ¡5ö®Qéû«¬‘L›¬;#O®²u´¿_]m*rcy,æQ#ÆH‹Î·zÞŽÁf7QÇit$[ÿaR†¥— ZV©È×Åj+
¹ñÁâÕ«kcŸÚÿÁçI[ZÂfÙ]‡ÓRŒkà›©Ø©¡„Õªg«ÓA4m™#òØêR“dª­‰×Xe„&Fûµnƒ`Y&¶Ó}s6=*VCrÓò`þ\¹råÊ•+×ÿoÛÚ·ÆXCß"ê Ekó6Rº(9äŒ”¡5r _{­Ïqè5¸ÈÝ<µ|êÈ‘#®¥´& J?ùsõíy‡†­ŸÖrZ;D>ˆÇ]¨¥Årþ=]ä™¡Ø©öÃÖœëñÆ§ëË`Mr+YZúÛ·®/<4¬vß¦øo-<‘MqUµd÷iD6v¥d¦2Åµþ©D]Ô4KÑš–ª…Å(›goÇñÔo%¶b«@¯1U‚G†Æ9ˆÌÄ+rÎ¤‘´?©;¬°Dá¨yÀh²¸9m£jäƒhÌ`*!áúa¥ŒÓä	:ÑÛÅ+®b_Uf­ž0RR°½s¶Z5Ñ¤ÊƒkÌãŸ2Õ¦¬©ëìkö_©WœÁ‹	ûa5®ì'~
ŸÀ{?2V`±@U§OGš±¦¼Rj±-L£Ék VàðCâ ‚…5ªC5EîP&¿WVÍ#‡k:-!=¦RƒækÃ¾y*ü¤ÞF›ÊÄ€¨ã£!%;šç–´ÐÚƒî`1`ÍDòó^<µ¯qÖä•)Ç´b Ò—<FcÔs@î Ô+µÃEÁvœï‡&¼ÒoêŸ .ñÏäekw/‚ŽkÒåöãÞ*º{^6V¨aµª¼X4,0½½³È’>6x`c{ýÑÂ¥K[ÛËœ{@sÛòÖ3i“íñ8è9Ã²UiM%SyìÈ¹ÃäÜ=1ö)µßÑ VFÌ¦PÐØˆÍé +?%Ÿhî~8²
Mu­²ƒƒ‘k,øBì¬j92‡Ár|0ÖõW{«zh©uç?îãE2O-Ë±Yý ¼Lµ¢Pm®ˆ2 ¥ëLU[à¶pë>“Â®ÞX¸´ö¦	kkŸÏe|–UcKû¬_R6&’0ZÄ*kX;«eù"ÜYWÙbL¸r…%¸f‹ MÇÚæ_èX¹°oÇ^§|eûÂ3}Ié¾QÂgdîrËKsåÊ•+W®\ÿŽ¶5ªt”1bœ5eBÞNòûEkk	®UÈ¬©}­OÐV¦L¬@Mäâ±÷½®e´–áZÆk‘—òÖàÛo›,HY}ÌÊ®prYX3øÕz‡ô8O—Šã™xNË×öÜ²‡I—¨`t@ýnzÿîú£]"öT¹þd‹`S
	­)â$ñz¸o¾‰Ódß®í]ƒXþ:ž^ÛöX$c×ºÄB2­ª;êô&{!=¥‚ €0þOÚNžp@±ª½,J½wX{lˆÄ8G©¤f°µ„^ È£ØT‹tC"Ùoí¶Ia”íÀ~:êóCc´©>2š7â‚5$ÏÒÎ°*«¢ˆÖNôÑÝ¹tçKé¢ü«Uò)šb”Ìÿž.í£hr|X›ŒØkLòe 2CM¦•Ž²ÄŠ¬Óbò!£JÍ×†HªUã°ì²’,®Z³ì¹%kštfXHšŸye J*›œhÍ7’ž­¡ŒIOñ›-u±ñ8¶’LI@ÌÍf¸qŽÇ[Îsik‹Ùë±Ô‹™|Gl2“âù¶ ^¡Žx~UxºìfwÃWÌ0(x­(¬µÔ°ö3·Ñ¨ÅXìïùJãE°*?º{á‚Híë_ð©š}ñÂÀÚÜæ€D·Ÿã4`«:Z\Ve¥A…ÅíÝõëW··n®O·–V¶ë›;ÏÐÃ'kõmz.××ñØn®X»¯mŸAò×è;&w˜O0l§Éó£ºUÁgzCÌr@´bjeÐ%i01:I¸×À¬Ut¹ ±ÕñÕUñÛˆ¶`µh ß š™²Å1Á-	Ñ3G2£ÔS6i<Mq|1ëUûU®ˆºÕ”)"Tc}åÆÜôÕ•K¦3íƒ´k*ÓÍ®ì»—‰cmd­%°¦Å>Vû¢½Ö´3°¹—¹©2Èµ+`ZšÛoj uõŸ~÷Ê+¯¼úê«¿—¾µŽ·+¶ùJòEØ°bmf[K"´ÜHË•+W®\¹rý;ic[¢Œ2ZÃZKUþïeJ ËÀzÖ¼&[ÅÅMç©ÈâZf®e¸&µ)^&ÏÞj1ôºo¼ÊœØ³àpŠPXÛ³ÓÜì¸5*'
PZ]Ë†þµ„ÖûçÛß]°tÝv®m-ÝX_!\­é‚7‘}‡F.‹k–\&bpÍÈ›ÕjwdÄZl£¡?{S¾C_T¹ÀŸæ	!ëä‚þªm4 ˜Hë.öÛ64²Xƒf$$#g‘Ã¡ÄXóí›È|%1†E^HUså@494(Ô“¢x2
£qô×NÇÒôjµ‰ý`’¥Æµü¼¦{˜”saŸüÈ] u¬Mõ×«Š¨ŒbD3´å©,²ipFoK¾–Ì,//ÆwF°“y¬ª 9SÁ,³jzþ°s5¶u¢)„I%¸ÎÖ9r°À6%‡b—«3M'
¦eÍ)”œ¦Î˜ôY^^€æã¬¡nÃœFúp0+a³ï¦‰‘`2Ü«×+Xpn…bE¹9–Ö¸ó²{Ô0òÓr>chíq44Ô{Œ(ƒl8ðÉ]ôÑi~¿‚5ùjçvf_`ÑhvæÌì91RÐà'.êÒµ"±‡H¹´qyëæÃÍ¯®/ñÅõg»Ï‘=åƒÝWÖŸ­/lÉ_£’Oî¶1Ø”9y’Ï¯þÏ]0±Äÿ:ù©LeÀa{úÏ‡ýj,6-&%Á·¬ÆWB·~fÁKGÇýqã¶	àÆ«p›	øGDjÜL±ãy”6Òé w¤íYjiüãj”³šØ/A5X-Kë7˜¶pé*ä6·véÖÊchŽ¥³Ë>HqÍJHEŒ¥Â{²Ñ!¿b5kéh5vØÒ¦qÔöâEä©i"ö¼`mQ‹Û¯üª~üwÿüŠÕ«0Ü>½ÂMp–ÓY®\¹råÊ•ë?¨m-“¼µŒÖö™kÎÅ²·ö:ƒ±Ë¯•¦çÔ±âæ±“èýÔ]{÷%æRâDŸ4ø6FŽˆ°xó¨vÏ2FÍºmFT±‚ÀŒ 9.õY¦´Ö§Æ&ÎR\Gae¹Fƒ¯nÍ5Ð­ðÙÒgoÿëÒ_¾£eíÑ#îÜ2´výÆ«øç„kÆš ×Ò¤ØÅî¹ÈëŒÛàïT¬!6#Îôû“=ò/ê‚5Õ¸QÙðcIØb(DåÖíFÕXdêIkÀZ£!CÆ”;Âµ¬ík“­&^oô'%ç]yýõ³
l(©Îáá­hj²vðF:ýS!Mk“>—Æ­ÑžJý š*¨–±šò/€5ÖwîÜÁaØÞ×¾—KÖÔáDY›zÖ
aÏLø¦(±ç¸†zÈÒÇ˜ÒvT”ù”Ì»FE%óC˜ÄdxK¬Cj(IjŒ“G°Œi;k–ÙQQ¢°ŽÇg’[&4Sl	¬Æ÷cÕ’ô‚C²å
ÉÓÔ¹W,á‰Ë,âù™fjÛÚJ“ëè©$Òä¡Ý »Œ¨~Þ¾gcI|õÅAp|3l43ß›*jÎÖ€lhÕL&/ª†ÑÌ8,Zû9e5ÁÚáÃæ·,V» V{qò$¬gÑóø·´™¨//Ci¬|U¸f•Ølk;7w¦/m?Ù^'ÈÿþÛxxsqqk{çúwóÖ×Wî?Û]XÞtƒÖ$^øE2~FTVÎ‘lò[oZÿ^Ÿe'ÔŸÀÑ;7ÚÃÄ¢£u7™,8wFLM$wt„56¾ÚÇmãÆž]43FšÙæ¹ˆ/!Ð¦u ´ÔèU§Zè@j/E5þ^ÕÒ¨~Ö÷o]]^»¤´þ¹•…5 lm_Í*+ƒd-¥;|íWcíK¢@3¬FBê'B5kR».¥Àª%«!PMîÚïµ—êw|éÆÂ(=žsZ®\¹råÊ•ë?²m™ ÿl8ö<kŸ©o-£µÊE3kBÈòk•Rßë°º2«±ˆ¬»örsÍçN§U³•2É[˜j°›â1t§£ÍÂš7$·Lt–Â™Ç#€3+Ïk–1Ñ ¼&/Á&–ÕJÍ¡¦sÑ»ø`i	\[ZøèÖ£‡,VÐÍ›ü5ÿ†ÊÉãopíôþ`ÈïT>“¹®M‰mÄ:kØ¸Æí„Õ‰ÈQüØÄd£ÂT£NÃ[’â©ŸÍ	z3í:"uìjˆÕ¢Ñ©ƒ¢³M»ÖgÃ0`ÝS¡]Ï nÏªõ¬5‡"0‹N¼(á>iÐšL¥èñL³ì–ª˜`DâúÕ>`d3Dqü‚†*s,1×lžaBkX/?AkQ<åOB¢ÅÞ¸ï„½8îÂ¢žò>*lÆ1{¸ˆD°g²hM8jÿEÍ¡bò+&yXóei@vdŸ¯µGÄ£íHC®	á×w”ßØ4³jµB…“Mó(USºÓ§'8”H“(šŒåÃÉóÓ	ÞoÁªÄ£¸)0Žì9‡1þx;3ØŠb¸RÅfN6ábCPE±š68–kÅêÌÏ£Â5ŒªÇÒYF¤_Sº¿`ÍX{­û`ƒ–5`‹íå30ÕÎææÎ1ÑZ›»^9-…´Åw¶myñÁ"½k›Å[cÓ»»Ûõµ'ë;‹›_-=É¶u_y¦ë&vd{Íˆ4ÿ3"6>Ââ5ã¯	ÇAqH§XC)8™4rD‹b3þ®ÙÙÆ9æcõG¬UÉ=Ž:À—¼5-PY×l˜Í(/v¬—Æ%˜†ú‘@-uyùÝ&¦šZÕö£JQVÖ”Þzu­]ºJ¯š,5ÄîZÖ¦¶?U$=ž­¥úÌÄ¿™ÊŸ±š¦Ä[XK©YF›]×­·¶Yß´šÏŠ ùz5‡¯\¹råÊ•+×oÙ¶f1Í¶­Ý6mk·çÅjYÈˆpæª]íu×Tºì7‹ÇNn€>	¯ýÊ\ËÜ5®°™ký:·Á}kóìœf¶ß{ SÝcù`í|6þ÷zÔ<ÍÌf7Uß+¦¾øðØh&üvå¢)kýíâ•/ÿxûúÊ“•û¶@¶Gë+·Ö·(´šE;;Äøó~—ë˜kr×Ò7ìeCâ¦¬`5Éèu'Õ¿Ö§º:ß K¿Ò}6Ð˜¼×íµ~DÒ~4y àB ¿æ3FºL3šæeÐšƒ¯#«ÌgQÏ1ñB²¨Éñ´(E¾æ†Ù™gQ…VÜñ1{“°©Ä‹ö,ãDÖX+•¾ø&É½0WïêË#‰‚J½Y2^N«Iû`gí'^Î&©„ìç~2†Íl~¿Ü<&óùR:G…H>¦eŒ*…LdÂK¬1BKrßJž¡¯
°fêu_¬Ôxã•ÕDU•&”Åc-¬¡f &5ûÒ­J —ã+£¿>D&ÂkrÞøµj Ä£kzœ0›¿hžÎ 7Ñä]¨¤RÉƒQúä5‚“|WwëºÝ¸…umMù$i-òj¨‚±IT:¦²ON¿á÷5ë¬¡úQ,µÑ^>7{r³>0½Ø¦´q“È`Í®0Ö¶Olrr¹]¼²ýìùÆ)‚üÇ¦ç¿‚ó¶¶ž)ò!9ël°)%°væùìÕ;6o$‘þ•1O“™ÙŸ^»víp‘4ÿÆ °2Ôûçä&ÔD&SàqÅmhÉZ­Fãöoˆ	C½ Fë£N<l8­cŸ¤>f 6ä¥¤¶ßTËP-Kë· F$Ëû8kcËü§\`¼ÚØôòÚ²aHëÔ2HËzaƒJQJk’™@¨H`g¤°†ˆi›5G 5Åö9 Ô~ãª%°fZÖråÊ•+W®\¹~KZû¶IÞÛ‚µ¿ÛLÈÖ¬·VéS´ˆû:MkÐZÅ‘¸ºÙ8‡d°%­k™¹–á³ÖÞ,ËÃfìu‚l2Ö´ä†C6xˆ“´9Ñ¢–¨Ï5'=Pl?rµtË9•Wrœ[(àÈ™ÁVkVZþ3è¶´¾½týÖýëiõÈdƒß\HFd“>wòØæ±dêÚ7&Ç?lö’¨‘Éþ”×ºjôI._§"X›íNMviè™ÄñŠŸ23E?Ñ‡¹Å6ÕŠšn­´H|Wþ˜¦°PÑÌ4h®!X+&ƒ°e²Ñ.‰Ò"aR<Þéy¦T²»Ãh ŠŠ½k‚5Ü0.G…Z£-SÙ [D‘ýkÕ(L…&~´_r×è]3öÀfòÞ%ÁšDh`Tžüé'è4íÏî+ÏR¨ãº"#¨¼"8„ÁgžhÍ&@¶ü=XSƒ™RG|Q–ñk†”h/Ó#‰û b¤IZ¾m^k™L;ÍÕ¾¢ù5?[ÕÚÕéôaR€á&ðjqÖ×yî°W¯%¹ÐÌÀa)iŒ#á£Å¡áØgä€iëŒu+fæpøÄŠxpr¿¨±ØØ¬:N¡ˆÀégëP!@'äš`ãòÂ‘Ï-¬)_äãŸKÐÚ)3h¹eàµÚÔ~›?ˆÚU­–7¦MydqþIþ;ÀÚæÆ³ËŒc®nîl?yd"ügw®3-ûÉM¶vµÏAJy·‰¹0Ø¬ù5°F¢¿¶dŽ lmU»Ú.¶™™fâòÙ–|K3¶CSÔ&nÀŠÕ~SÙµv›d—¾×ápÿTXLÛS–q“6Nf¤–Õ?þ#TKaÅ±éÎÎMÏ-/Î}°–¡˜p-íVû‡k‹Õv‡á´}¬¦Éƒ'xú/ai]­_Ñ×¾ÚÀ_ðÕÈÙk¯üS®\¹råÊ•+×o¨Wå­ÉSÓÒ˜kDBÞ¶¬†RVûƒû†k`MîÚ!Â!©Šˆm~ú¤b ¶Ä\{ÙÌµˆ‘÷ .XSxÿà![MY!„;rµ-l\}ÝÞÖöE‰ì)"çL*g ×´Å’Tñ´­JHw¨LÆÈßØÜ\ÚÙzò¯óæwkheÝ´®]ÖèªÍÈ¶1aI×®‹‘¼es-›¦èYÙ½hrªN2›î¶’ŠŠbàŒ²ojÒ¸®WQ!™7¥uM²Q(ÚyËša¦mºm"H„G¾ÉMô5I³.ÀpëvÊW|†šµ¢I±ãÔ”êÙl?™òžXëQ±Ú	Y>]¸€ísäØ±c{æËý ¦LU×Úü°3­Mrã%mªÊdcT«^„¨Å¬8ø[lš(E®Ä½NÍ 5CW,hnÈT9šž2Ì2CsGÍ^%i0c])0%:y¢ï¹<¼Öå$1–zË (Ä7HÄ® ÌÓëøÍkæ˜•l4ÙlbÅ
°l¾uÓf¢A`Þ[,+þ¢šR¥U*nš¹ØY—¡­ N«‹¡ RGÙRª¢…5îˆrº#Çd¬ÁjÞÿüä«3çŽmì¨[íù™åÀX£‰Q—,xájbçèäa{Ùª›Ó›Œ\ÛÝY®§§«íÙÙÝ•«OžQü¸³¼qÏë\¶éËä°1‚â¦´ jÞKWg_¤¸vîëDæ(ãôªx™ÐÚ_47ä›òtŸâþ=YðêÄNkÜh
Y*ã–ÑÙTÆ¤íã´Ô µk©e¦ÚKQC=kÜoœ:µ1}ŠÒÑåéå±eûëûµ•–íî?P›iÌLH‰­–±Ú	æWœ°ØÌ=Õyj›i¤´F`?ÈfIMÐöû<l?W®\¹råÊõÛ·­iJqÖ µæoÛËkŸ]”þì¾ñFE¦Úk°Úkÿé ÍknÙH¹²xN=4jËpí%9#ž“ãn¬²C.©‚0úÑ’}ðàAÍ`ëë£‘M°öÎP‚ÂX‚nd’ v0˜Mÿo–ÍU?61bmÐ5[*ˆäÔE»òàÉƒ¥/ÿr`~Á4®!¹Ö\ÓŒìiû®‰ÖN`¯U8ö=9ü/ÿò_:tTvJkˆeÔntïi¬pgüüùØ«ºÀm]ŽÔL2ì©áxýãý©®W)ˆ4n\¦;(mP°Ìl+¬¿Ñ"U#~Nœ Èhj&óî	ƒBÜítÓJBöå¬OŒ÷*V+Vã§¸£TDá±ÏOž¨iÉO)‰Ö>RÛÚ@µT²5rÀšŒ*!Òº~ºQ~àñÕ?BÞ )ç"CíšÃ5¨GFŠE,V’/]PâbËMÇcCžT"O‡šT"/vÕË&SId€#†ŒéæÃqoÐ•Úº$?ÐÌj¿§‡ó$76žgY°P„´”TâqÆÁhC=î^X,™À“X‰§Dÿ^Cè$ˆ‚Øtø0ý2Z0Ñ`t¦h~7À¨&1{š©Œ¢þôM5’ÛrgM¢òÒÎ¶-„XÛØh·@$Qâ3îYÆˆ±Ýî_ÕVûÔ¹éÍEr@—7fŸ=»¾´tóòóÝéÅ'f¤;”¶ÍÒÐÚû ›#}C&Ï\ãf""S›B"ßd:ibýÛB¯žE!Ì†F…£‘‚~%¯{ÌVî ÄpcÁ!?ôÍF<ÜÛù{”æÓÄi¨%–ZJj2Õþ1ªYXc
ö
`OM ÖX%ëµlÈšÙÝOqõä”­‚l0{Ÿ­–±ÚéÓwÒnµ_ OWl?ú’JH+hm^«å-k¹råÊ•+W®ßZ¯Ø‘4cäyki$ä­½ñÆ¨¼ñ:ù"©ä±–_­2½ƒOuîcdš×2sm?­E“ñ{žæÕb×€6økï¼7X.)4²y#TKjß;$§Ûð;0Œg5×sidtIÚ´iÂEúLÈ[)¾•›ŸÍÏùÇ¥L_ûn‹8ôG\ê²×¤øo_½q5yÇ™»6vËýtðÚð0W¥YûZWêùXN”ˆ…a×NŸÒ=ž¬­úþj7¢z.êŽVáªÕ§OÇ59Ü™¡ûk‚{T5Ã»ªÂ·*ïŠåçû5À¹°±9Žœ!¿ƒ{çSSUëšvö‰RWÈ‰Â ”é'™H "ÝÒaã«½{úÎãÇIÕNžœ›3¬f
u)ÝÆªlc´5p‰öòû­MÿW
>Rb`¬u>„ÐH»,rEL3a¯°§?fY!_+Á•­J,%°¦Dý’§!-kÐ²ÄÅSÌìjÍ©&>ŸLFžÂ©Š£'Ñ~çzÖYó}nê1³Ï®Xãéâ;–zŽ¬	Ëä®äÙYÛ^°dMC›29ƒ
…¨ J3 Ô€5f,TÓJ8'l(RQÞ«¦8tÔ.…jÉ<lM¨{W°&9ö¾`ícX‰N2†øá¬	Ÿ60‡ªí1("CŽ”Ñ$q	Ö9–×64jmclãòîµËçvÎm?{´¾5{FÓü5kë÷6²µ²…ê[ƒŠ¦ó¤–Sóú'I.êÝoŽ}zm ­QlÅ%§³ÑI"’ñ9$ks8‘(¬ßŠò^–q«¦x¦A×>ë„ÒL§¥ &Km?©¡ŒÔ²H‰X‘•ë—n°±põÔÚâ2žœ6°6w‰¥á1­øBéþKU· Öf0ÖRXKmµ=VÖ’ »J¬‘)Z£cMË›‹2Ö 50’WAæÊ•+W®\¹~{ZûVÊpm?­kVÁå×Ë.ÒXlÄvÙý?ìßk[÷šîÏp8·“‹ø.äJiÀˆ:ØÈ<ÙW+"‚[“‹}#A’Öq	“Ô±Ó,Û;ÁJëHáLÂv¤‚ÕnÙµ¥q§¦n°´÷I±QŠuU™)¸5C]ŸÂù<ßïZ^Ö4´—'ë‘´~K–ï>}Þ÷y{Ñ|³ÙÌ7ÍÐ^c®Ñ¹öJZÖ†©oŒÄ‡û¡³ó#C˜£ø¾žÔùáÓ4`8ëÇ$C=}Cï×>¬6Â	Ç¬MÚ MMñgÈÁDëqDg@ØA–ÖH·¸ÿ0’Ê<Ù|øÙ
°¶»{HÎÈ¾dj!Ûõº}Ë2ž¬édºZ.âÚÉkÃØÝi#3…i;{mú¾šF#HMî×LÆ™W»šsfæAñù×h&-ºÐ.À›[-`MeƒÑ\4º:õ|Z{0*X+P:É‘$ðÄ{<uÕug¦
<õê´y¥U`ðk0‘Ø‡¾<Nyk¶•*×{1ÍÒ°Ú_àø`¤Ý«-Ìa¹(7PŸ‘…rÐ\z]´Sãš_ôI%¤>¦ú•~þy~f•·ža¨›Kç’@šÅ˜ LBdkiš4¿jI3kS²¯2ÃÖŒ9&0×&bíø‘ýNov’zÍÉxÌQì>/’Ä7“d§%IÙçi@sœÖ0lEòÛž9!›$DÄ¾Œrš\M0ùÖ¢\ë0À.œ{@
˜MA"{Ñ’Å%rRàKôá4Ëj„sø´&‰uM…¾åÍ¹_$áZ»Ó9*wfÊy^$ö\5áò‚CúÁ2ÄkÒr{½Ü|Ù™˜œkæ·Æ¨‹Ì7;DŽ”òíýö:²{ûÙd¯)éX«¶ŽPƒÍü%WJXÅsÆGÅa»rå"#’ë7á§‰»ümCSüôØ wq”ñä8T"[ékFSxŠS#b3'£}Û]J1,æSšõÓÄi€Z`©R{µ©fI»8­º±]_(-i¶ñÒ®/’Öò[ìù¬fµW·¬qqÀkcæÿix ‘Z7«]€ÕpÖ¬t57!³½ör@°–>Žî¯½ÜZôVA†
*T¨P¡þÿ‹ikŸk`š?nM²þÀÚ_Ÿ˜ ÿûÿôqø+R´–HöF£½qŠ‡ó¸k³&!u^)¤M…ì¦5þcýT6u
"îï{ëœBF¬¨†Äeã`Ÿéóæc›¾6¾B*ë?Ë‰&AiPbO‚1kB¶÷²ÆOKñž³DÇ"ã>ò~6›ZÜÙiñE·uÐØULƒÅ5¾^kÐðìmZ×°Ÿô–ÿøæ‡×Áš×l”?ÑúAøL×¤lxÁjïâ{±Ãr¦•½¦ZÁ‚aµéÑÑééh-ôÓ×óNAý?FNÝºš)|Ì“H(¡ÿKmæë¯Ïð¼ØoS«ÏÍpÿÚŠW³?TC·¬³fHB°v/yöâ'w'&ˆù¯É—þü¶ñÓø¢,”Ð¿w¤£r×Ì|9ì“@ÁÀB9l$äñ.=<á²M¹yXæ[:°Å¦ãˆŒŒb13ÛŒ3H¦Y„87XÆ…° °6eO»å€óxd„Onon
ï…ÙlRÜ%Ç™Éë\«ºF…MÆìÏŒ˜yhìàÀù"w$†GÆ„A“tûÙsÍEÈÁeq…ºàâqiõ	úý”uku¬ysÑÆD|^$ºá‡‹<ÜzSìŒo«Ý6¤öW}®ù˜DÈòìrÚ{&Ì¶ï¬q"ßå±?·Öl¯·k“ÄkÔ&Æ±Óšãû‡íR©Õ^n7TþØ&&gww{oÛ OCËu“8Ò^‚…Úõ
’UŒàòGhX¼dB"_üQE‘b6Ë~ð%ž&±˜`±lVYÉrm9VdÍ4ƒi§uƒZ©½ªþq»º°´±Q¯€n•¬ÚÌ<âª¦4´å¯™„Ý­ºsGÒÜµôK<ïpcÙÅjBµk/€h+!b™{	«¥å¬á«)ry‹ÎšUX*T¨P¡B…z}fckþ´5ñšß¶°™ÁØ’¦­õøµ=QvQ~ì™m>„Ø<\×Zö‰&FJí†!µÎŸÓ¾?7böý!k‰ìÐùsý	ÚúRÃ:*ë!»Ÿð~7nÎÈ{Ža5SšÅ	IÌæÞÿêaüþûCC›ƒ–:6ÜÂšØ7â[îÒ¶DG)è01#ŒëôÂF„™6mÄÎ¨¢}mu›CQ	œaFÝšš"FñªqÃ¢0Ø|±à×jfõÌÕù[Å\ôÖOïfÝ[ÏyÊŒ{3ŽÐZÖ¦Vç§‹€’h3g´”ì@n‰Ð~…SþÏ«3òÕ<V»×Ãæ‰7Þ¸þ÷¬véoF·ÿ6W*‰$ôéØœcÅa>ç¸Ì5Æ(O˜ÿ{÷n8Å¢IðŸîêÏ³ú(¥Q	lRoäxQŸˆ,¬E’QÅy`¦Ù¼ˆ'u"#|âOCùžÇÆ7|w8sQJƒ\xbÉAfúG§(Ò&Bšn3³‰Xe¼<è)ÊäíX4Ç‰ˆ;ê'ë|<–Î£‰½—‘±†C'Wm0Vp’ƒ±ù.^KZ,ÚŠIxÃ‘á7Š„à
úõZX+5ÂüÁ÷÷ÄjßÙÑ8±ãæ€µYu¬á¬uš[ù|§=·Œ«†€g½ dë‘×Zåƒ"›ÍqP­£ÁÐãt®u&j³jXÛ«, k­N¾Ó Õ˜¾¶{Pªn“£Ø2‘°UÚ¼×@%ýMk~Ã•+Ô
de+{äúÄGŸMÿPxÐf“ÜL ¶»—€´€ÒN3 Xj>©ù¦Z7ª¡
 9„Á¶`ç«-L\)-<ò«qÓŠe îÖ˜=`YM°f
!oøzÐÅjøŒ±6æi@Û¶’œXKÇ2Æšg­m†U¡B…
*T¨×%dÄ²šç­!¡Z	ùÐ²ãÖâ	rFîV¹‰'‹Íñ
Í‡³è·hXK¤úà´þS	RúD¿áµ‘aG°6Äb±tâ@ 6ôÖÔ¿F ‰I{4Áý©~ÎÃrý)Æ±%pÜt©#Vã¸'Gîµø$îàÔ)Â¿½Û9ßüjgÛÇµFËÆø3f¸3Wš3Õcª†|¡iUàš7)[¸Ê¨šéÂµ™çÐ%X{÷c•BÞ¹1ý|KL^˜ª-!—vçÝÂ|nêë)Z©nýô|5{æÝúékgxú‚ãÅçóS3Ö…“VWOÀÚ¼¯[ò¾ G±šµ¾{:8@>áu’CÄ"23©ùvE¶ù¡BÎ ©ikz4®oð/®ëCjÞŸ¤JÁç¥!-©ÆT*$7¦Ò¹¡‘L4ã¨VÑ´Æ5a¤åˆé.ú‚»,ÐA^ÊÞ×¹dOÔŸª[&¿Í´¸8cÏú:°7$âX¢Éˆ˜ªVBóÙèÅNs3S.}fQu~d\ŽœË;åG
™BÆqÓ9`»M5“‘Œ™§`‚ù“ê$¯S¦ nžuºä³q„2AÁZnj³}¬eÉVÉè7,«¡_þFþ)<û=ctÝÎËù—0KkA—œa×Rpl@+ð¤VcUi”ô“G‡åÉ‰Z¹<Ûî,OÔêÕýýƒv³Ó^Úh—öw—ÔòÕØÛoll B@Ô.?F8ÜŠFSÜæ/ûø#4~Íè…t]i‘8ÈDü«>SÄuÉd$žEJårÚz=EÄh¥YLƒÓº@­›Ô|T[“ÄiÜÑFµ²°Por|i™Ù×[ŒÂ¾RªÀ©]Pæ×?¦·Ò¯Êê×ÒwÖXªa¨ÖÅj¨vÖô°Ñ°šhMZªûj+ad¨P¡B…
ê5	Ñ¤µcm‘TB+õæ­%£ÆXËÙópq…¶Çm^ãZ7­Ý±ÊdûúQ‚èG¬²D¿ç¤ a§/Õ7L}¤7WÙ¬&‘@bÝ¶‡SÃç‡É¢$¬¿'EÓ\"	ÂÑÿFçœ5¹o‰¼6mk¶òûÿ¹óYd±³™PGÔfu÷\Ûk4ë^2d”A&áÞÏ¹Žïdì5±ŒÚ×Ð´/×®^ª©>Ñ4›&ÉfþêUÑÙ<*­9Z˜¬¹Ï™8Íô´Ë”4¾K9ãO ÞOÅXö*Á$wŠ«z)g_fD3˜‡g_]š±á"Ä?Õ˜vü@q—Ä‹7iE3¨f ¡4ÐlVzÌ£ÓaAÁ§õ	T1ÿ6ô^É[ÆcûmZ?ÆÒGŠ3!»@L‡Ê§Vh¨Ä€/CVŽ‡KXe¬EdÂD"¶9Í$ì›ªE9aÉ˜Gs’žôye”ØrYh>…qØp¡Òö#éX4:æðèÀ@®¨ËŠUÞ5™SŽ‹9¨~ùoR$“)D¬å
9ú×ØæT4ÇÒsÕt™LYknqêŽe5~ÏY3ëùž­‚ôaß²`ß¬Š çÓc™†5Sóùë¬#1üœÐš”onéL¾|¸?711Y«)q£ÓXkóçzP.—–ó{‡‡k[5¬µ½ÝÙ6ÖŒªhýH³Äkp¨n[HÐÍqôö¥GW®¼¸ö‚;d%Âº.á³IŸLŒÁ/i¸-t|¬O|}P˜æsZ jÝ¤Ömªm#-e¬-O”&š\§méã?ª¬ÏVÛònž~Ó`KÛ”ý@:‰j÷@5ŸÕø“ï†5k¤¦A5Ö<T£emÑ×Ê—ad¨P¡B…
êu™ý}kVÖX[Üüê?«}õ×‡
91;ñéé¸e5 Kiþ,¶ËåÎ—j]3æZ@k'ç­Ñj¥8ƒD_ßéža5§QãØ—¢Õ¬èüH__>¯˜þ,Û’4ä¤Ø@q"”‰ÇÃ» Ò“1!’YÏ}“ý1:‹÷sÿÿ¸Ú‹'2Oùbûð°±·½Ñ@´®yQ#×Þ¾dp/² o`Ã]sôòw¤ oDcƒO¶°™‡í_“ÍÆJ›ô±MŠÐÚÌÔ­çÂ7ÎÍ_þé§/,;n¦xõ,×­çSóv-}^f­È RãÕ
™ÄèÓ§c°¾ša5åÞÔL˜< ft4[·Ðfó:e·È[û‘lÅÐšåµ™3fÞš¡µŸsî4+]2¥»àÚî±¸¨‘“„!W±Ž†³´g›¡X —+µ±ÕXŠµÞ^ƒqÈ¦¸¹l{Vš•á¢Ù5e˜‘ÚH­b9o›Ã!ƒ].9;&¡8%øGñÉÜH$JTK4†O¦ôž*‹k6ÿ1†eäêŒÒüG'”òašB¨w@5ë¬«³Xã·å±šÁad~ËÒQŽ¥zi`kövs|Òïó[Õ<Xcew¼ãZ°æm™ëjíýVÓn³S>luZörg¿40§ý’$Ó¥µ½½µÖak©¾T…„k­ÖzÙFŽÔ‘ *¡‹q¦9`´MNª0hSæÆ5³YMˆÛ|Y.ãÞ%®ê¦48­Ô^AjÈ€Zµ^e…%¨ûR¥Y"sâÊ•-ÐXkÅý	"Ë@iÝ‘…µŒ5	RómµnV«YR³¬œö¬µgÜ^ŠÕj/¥ÀVÛZ\þ2¬‚*T¨P¡B½.mkŸ[Xû¢ËZóúÖ`µÀ[£gíS|5k	Ó»‡ÕÐÊ³¦\ÖÞ~­Ý)bT$)9k@ÚY’%{L1ãù¡>ü6cµQÙŸêK¥R —k©ž³\Ç‚“N?MoYå“p(žr’'aíHò	(1œ ˜{s1'„äþ·{‡owÖ¶)"kxÉKívÝÂŒªU©P†ë¦r·Ÿ³‘yÔCJÓ’(3=Ø‡5»š¿õÉÓ‚ÇyVpL¸uËÌ!`í²vIécÀwÖ¸Rü§û»d4J3ÈOÄ<È¿ñô)­Go\÷l5tsaN¬6+R›1ñZ<Y×“>+tœi\äŒœ¤5uhù,êyk3w
E6§X¬N?¿åÂ3I?«ßL²æœeâvˆr9V8m%ìC:ÆÓè5Wì&0Sg™V~T‰
 a(IÃÁ¡B· 
ìuÝ˜+YÈbð9ü ðÎOSŒ™ú=åBòc =Ä7qÝí†½pÌà½oPˆÆ	U?’Œh0µQNÞPÙ«ç¬1B:«\œ`í„¯ö‹§ÛÐ°Š —›å¥Î@íñÑ\³99ÐkVi³ïÃbíWB[–ê
Yó˜NlÍ|§Õ$Ý?O¥%ó²Umc»ÕØ­Vê6«Ákõ#¤nLN›¤˜H	\“ÏöÈ¾ºt	d÷\6Ð£lûm½)qu¦¡… Ô¤º$R“Smiy²²Ä»\*U¶×š•µzm9¿Œ«Öe—¥}f³‹néd°Ólƒ°Úh€j'b ¯‰ÕÞ¯xØ¦5" |c-cmyÙ›ˆýŸad¨P¡B…
ê5¢5 ‡VÇùýÜƒ¾5#¦c'0G°=%±÷pg¥ÓÞ1½k“Ö¦W³})'Ó—‘ÑŸ:R*ŠìsÎI¢?þÌ_Süˆ_úˆ´Nq"¡8’~&±%Àµ¡þs>g[©‘©ˆ`­'•ux&n
´öŒ¾5'¾¸Ó9øáaäÙÊÃÄ_wW6«_ÔM0¤Üµu;cX,cr8xçJexñÁ¦TÀk@1“¹ñ È1šñna²ù™#Ø`¾Ï6]}™V4E9²<XÃVc?¿¤YùxÙ¼6`è»j&’ô“(e^ß˜Íà°f+óJÛ†Ô(Íë°@›üÅUæ ,ýè|þÝÒÚwÇ´öõ¹ð7ã¿ÙfÁÖ4 ê2hºèª¦pÈ¸bâ#‘®%ÚÔìé¨ã$¡µ¸ÂA;Ü1'·Læ²•qe—™HI$ŽëµQ%B- ,*Û-nÎá†¹IQ]Ñ%Ï1©1i&“?."³±ûq7¢×æÅ´ˆØ3’gª‰x2ýoq77¨i[éŽOK¥¼#•I$)òKæîÃÊ¤£”›gÍ š¦PÛ ÈåYPÇÜdiarlüq'¿œ·°ægˆsÖºË µF—¡.€“¬çVk·;u’í›‡¨Üimoïí5öw×ÖZ­½ÒBu{|k˜ì<¶ªZØÚu©‚l›’f€6ôÈÆE^Û$ M¹‘7-º Z iÂ´nN@mIªž4ÕXà©•&j•¥¥R~¢T]`«Â…õeÿCªîQûHkä÷wûjinÁ6D÷,¥½ŠÕÀÒÉÉñI¯&ÕxkêYÓ]|XS²ˆ&b/j%‰Øÿ-T¨P¡B…
êµ
ÁYÓÝÂÚæW6òa@kf<v<ù„»Á5œ5šÆ¢±è“Åò:cÛ4ý–·6­MMOO	ÖPªçtjè-áZBõçßÑAÆ§§Br
a³©ç¬Ï›=Œ—ò{Ûf^£U}UX ©ðï¼Jœ]\ùá`óaüî_u¯µ³²óE|åp—bHi½µ¤dÈ“¸Æ×ÐK×ðž®¿ñæ…o>!.þ¬í_³y#Ü=ƒÍ#6XÊÆ5
ÖX#­f]Ü´ÂW³º|™Àæ³ýXƒÒô°ÒPµ r^¯?ýuùÝ XíÂ…7_| €4™¼SÁQ“&@ë<>ú²ªi›‡é±²²¸ÆŒlôÍw4dñÙÔ¹f®1"ûç›1"QÀÉ£P 4¥¨V/G¬æñ‘›´½M½
ldËUV$ì5•eé2oXs³D„D5D)’%ÂŽ3ín’ÂCxe\2á "ååÇ¹fÅ¨4;7[¨Æ$ñ´.ÇŒeôìÆZ¡ {6ªj²Y ‰åMÂdðO¯£tCwÔä1æô†ñÕ¸&Êy,,/æŠÌmg¬yA<¬KL´úeca"c¬ÍX›ÌÏÝž¬ýrÔLT·ËM`Ãö¥y:Þ4kCÁq¿,’û	XCìx{µ<;µñry}¿'4òp}X[ßÝ¨¶öí5½½ö£æ±þŽ S	-Ù˜HO«ÒmƒlÇ26›ªŽDjk»p™]pëF4ŸÒº9í× ªyMjklÌ?¹´¶ Ö<>H½¶Diär`«[Xh¯VZ­´lclXXíBµ®hlµ·'ÇÆT)YFc!h³I*ƒ¬Ak<d¬™Ö5±Z˜*T¨P¡B…zÚÖ,­k›µÀ[»¬ýZK&­µkÚˆ%;;+í2‚zü˜‘WÓš4•èV|?å¢¶ÔÙÓ=CçÎ?s¡,u‘±¦F5Z˜éD×²ådY$útˆ+°½œÑì4X-•M©(Û‡±kè,ú—'_ýÇýxæÙÞáÞ·;‹Ÿí|»ùðàpW_&õå¶JÃÏñ;¿(c„4Âq æžp¿±§&oKË„¹ß‘äÀH3Ø^~>X çv©›/ªÿù]8í]ÁÚI>ãÍÏþ·ùnÍHAä"ü VÃé¹=ÐuôÁŸa5/ðbñ)Ê¦8¯Ã æ£/Ûl¡²]ýâË¸kŒqáïCwMÒ$èi$gZãáX3lnŒìJ7H ¡.2jƒDD]1üLGÕ,‹ªË°Ó÷Òýí³e`Ä%ey°«Q(ë]Ä\c-kE´£¼1ê>s9ÙbÑÞäE.!…?nì¸dAŽ[ÙlŒˆÂu9—F;})¸
£Ú‚9U<
éhxe5hBàcþ;Â”“‹å¦™ž5þ¥¿G¹äS›-¢zÓKšc§–53amv²IÈìQó%ñäï/ûÞÙ+aÍîg- ík–éŽ÷¶šøiùÇå£çkì¶Ö÷Ëm¼fk¯®™ûõzk—°‘­v42ª—ªk–šXJõ%ÙøÙ¬|`3ÌÆÉqS‘¤wÓ¢KÜLC•Ò¯AÍ·Ô€FãªU¡2N¯Uó“ÍÊ$P«¸þz¾¾¶TÒ¬k2YºF§ý®Ò¹fM2Âdîý«Ý|{’Ëìo^hÎRbõR¨Æy¨fœµåeÁÚÿãEB…
*T¨P¯­}î£š—3Òkð¼5W"Åÿé"Ê„Ôýá³•¶ÍWy^Mk~Ë×j6á¿õu§Uå˜³NŸ:G!$F¡c¶'5bB!‰Ã²gUÙ#ûð]Š’G;+;në a4^‡M64W;ãÈlëK*Rz'‘ÍBt‘N£óðÈgßvVöú/þô®56äDèë­·;zë%’8ÔÚ59IQØ‹~<¤xf1ç†±ØÄNÓæ]õ§fckÞ´²nù†Ûe"‰´Œ4v‘a6O¼Š™€íÕ?ZWÍ)<øž÷ñtllâ:NÏ‡/®Ùn5xaQ4ãÑYéíÀgûlŸŒ!©Üs#Å´®Q)‰Ö$¿Òÿ?à,Îÿ·é\š<üÕUë¬‰\%6J
Ã—g&<CÚô¯ÂOóéÎÎÂVqªA4øŠU„Î4•B:B6® S-[¬é‰šîÅ!Œ·BN¥‹…!”\Fâ	v\Î*¸ÞpÑŠ¹t´àr87„!AÀÌF‰Ø È¨+X¬aÓîÜÈ™AèÖÄjß{±s£øj–ÖHq¹IF‹Ò6Í4ì£ÙÙñÉæã£Ns®X óW£yÝøæÁ‰…¶ÀX3'Øc©ÃùÎäD‡y€Ëf°ØJõ ¼^Þ//P5XßÞn”×ëÕµÆ^£S.µ[{Ûõ%‚ñëÀÚÆmpSË&û·M'›)÷mÛlµq÷us! ·ÿæK—”ÖÍiÝ †lR?–ï©Yk’…²´P«yé—¥zsáQMŸòJÞïP³|jw»ÓE|¥½…/Ye,ïiö†žv³°vs¼&F3|†T©íg,Ÿ¥½|n‹Ð‹ÅpÈZ¨P¡B…
êµ¤5BF>çáãZ kå&V£ò™¼µû8˜"‚5@-.X£r§ÜîÈ\£oíwhm*ãÀR°š`MbÉ%ŒœƒÕ©¡‘sçà5xî­á·úÎ"6JAvb2çÜÈyµ·ù	#²×üGÞ[ÂŒÑN¥@‹pK¥"Ÿ­,²ó¬~°òÃ·K- m³mw­ÑXk‰×Úõ¶WÆ9g‡TÑÐ£æ.$^ã{àh2á> M"âÝhÚ—pÍ÷Ù~¶¬sùØÖÍoïG<gn&pÔŒŒÓ#t(¤&®ÿî¬öqzÆß6ýS·gYÈ¤öQZHËÿÚÆy)?ÞéàÀú´fq˜Ê=M-¤Z×¾96×<^3¬&`´ÅÊ²´yþD-f/ß²ÁûÅ(=eÈÄô›V5ä¸Î	V3õ~2ƒÓ&(Ã=³­jNRŽš¨/ÎÓÔÂ–Qkdì3ÙÍ0‚!#âÃ“ÓÆ“œB”•‚B 2‡Ì~òÉš4i#nnNU“É˜¢kŒŒâÌÅFcÈFŒ\£¦’“òÛ.ycp”JHäk†Ôèæ3_þmºˆ"7ùµ‘‹¯_·µ,ÏuDùå9ŸÎº‘›ÝMlAþ#ËîF5ŸáØnNNÌ5ÇñÕTXÝ¨¶Ë³$B–j•jµqxTnm¬µ6Zùv»Ú¢²²½]©mTU)QéeEÚalz«KÝ¥‘¨P›Y²>yãŽº!J8-(}Búmñ£¬5bP(ÌëÚJsryyÂÐ¼i©tëŠo/ú1šÜm¥OPZ(âICÀ—o¬½’Õn¢IÓ£fHOJCil¾Õ^J5Ó©¦…´¹Y*T¨P¡B½fúï¢µ®hÙHÈãLÈûÿ»)×A&ð×€57Õw*ñUgñag½ÜÖ~ÖVùF"·ÿ”kÜ©ZL˜*È”æ®—º†€¸Ô°àK8gàËÁg£l²Ï&DRùÈTl6)vÏ&½)$'ædó¥/ò,²ò$;+_ìÔZ?¬-}Û ±a—¯—‚µõ#xÍKNìÌéý/ð”æ,¯ÝKcõö>¯©ËwbüªÈ«WÿbÌ0¿›íê-hÇšT¿+PíO ^7¨‰`;>*wºWò¦’^5PíÑÍ›Ç¬fúÔ:7¿ì´övZß£rXÎïJÂ5ÙlÐœyŠšóÞæÃýøw`ZÃ8üÞÈÀšâ.Îé«ÖZ;(7ãä
—?ž)ŠÃ¦§¢ÄæÛ,Fü/õ‰Êøó`-ÉScè™+~¢çp}À.ª3®5WWÃ{CNo>Ëe\«²FÕ<b}ÁpÂÀì<˜p
„ò6Ò;8¥’ÝŸÔÉ¨`­`òC¢<99BÊi|vškâÔê’é,áqF{££ƒ¦yÞ˜Î=˜žšâ÷|XƒÕ€ØØ'×±Õä«1aÎÏÛøZsvöèñÜ2 ñû²4bI,ŠÔ	Õ<€Óÿ€ì¨ñ<Ûùv§ÒnìîUj5†´÷Ï•÷ªõµjû€hüƒ
7êµª×”Ä¸§5dµPµ»2’‡¯’nvˆñU¦uùi¯5k©Õ«UÕA’*R«Õ7–]©T?0­[ÑÐXw8äGz'A¦Yœ 5ßÀ„Ô}cí«]XÌÚ€ -Ð@jl²ôf¬a­!ŸÕ6Ãx‘P¡B…
*Ôk		£Ó	#B5ÁštÖîÿá‰{ŸLÈOO}ªH”êÿ‡S§ÞßL<lk¶kJþÔ+imZZ]]%¿_Þ˜)_<M"dœyk†ÖqmYm„Ç‚·~F³éêÛ©¾sç`4ymÃç†SÃ¼’ˆ®OdÆiÁ À ªYE˜›9ûNde1BêÈNãà ³sÐjTw~ØÝ%­A6}åOûZwÚÈ8@ƒ,°½afPQ·7ÊçOr0›‘ˆJg˜Yhæ½kµÍûf›ÞmÚ#8-=²û×JþÓÍ‹š¨~ªñ€ž{÷Ÿ~£TB¹j‚µñGå¡ÙÇ š¸A‹æË•ÖáÓ¹öÛtv TÜŽÊJwo[ZCsT½]ºô£†®ýQ^ùÔŸ‘}GÜéùÃ‘ÇVà­3«Ó_ß*ºÌ¤.±¯22(K™¨ˆØÅ^KmxeÉ¢äQYqsEo2·­lö*zb·öZÖªX åT¥Xp˜¡­ìF—PÉ¸Ë1¡!1Å>Ž¹ñ“—£ÑQ&Q¨­ÀÑ4°«AlQÁšíe#ˆ‚p~^zÉ\”4“$ûÀšíYËå^4‘¥f”ÏjO/~òÑ>¸f}µ93ÇNL¬*ÈÇæžÏß^®å¬ß•G">«qÀ;¦#ÞÊ;Ä±@Øò%VMþ][ù	¢Wqõ&;û»Ûõ­R}c÷ Þi¶U(ªT«Tª”AR'Ù t¤…ÏÖØ@ð¬Æ¢ŠºÛÙ|	ÆPÝ»Ù•½[ézŸÒ¼ÂG/ ?pÔ¸›áõåå<½sÚ¨å—6ÖòäAâÛÕ+[Ád9Ö¶ê1@56SÍ—MùH«ãC¬GmÐcµ`¾Zà«Í+ôÅ·ÔÐË´j _ŠÓÆ|WMZD,Ðæbh¬…
*T¨P¡^?Z³mkŸO[û÷´«lDŒüáþôO JBU(žJQÙ×—X9hµ‚°Ž€Ö®w{khÊä€d{l4?þ	Mº¬'òÜynCv¿¿'{NEì2~ZË05›BG¡›ºØðØ8Ûsvx„u
Xst­
z¼ÁkqhÍIŸýË;dŽ¬ìîµ¾ÝÜdªðâæRõ`g…ïµ¾¡öµ.^ãÛÞßÞöpíCÍ¢ÒÐàôØSF°I9W‰ÊOQðÈÈÈ”ufhû’@·«F°Ù+uëäö_¸Ì—Ü:t)ªÿ^ŽÏ"RÃTƒ­dóüh&«Ñ_GU¬ö‹kûZ(ö<\ürgåàíƒ/;‡uŽÉ><’ðÖÈs·I#|(Zûfì®×º¦ÌKk¯Mƒ˜Ál‚3Ìvy¨7¾z¦˜Œ]$½Ñµ¬—ÙTGV6ÒnpÈÐØE{Þ¾ÎJ®2úá8yi¼J\àÆ•H´Žé…¨Éè8êÂ^E!˜ð-æ
¹QŽCW]hh´à¸ˆã±Q.…%£i‘…µ«ÁQ@-ÊPì$ô¦ý\ŽØ‘\ôÆôt¡ _»t£X ÖÔ˜f8ô›~pí’a5`­Ó‘±fÆa³ ™ŒËcaëwt2Öðd=¤YøŽ‹@:eµLì=Úê`–ŽmåÃÎd­Snl×i`[Û/OÖÚ{{{íüB}k¢V7	ŒkXi‚4øI+ZµÖP5Ð†éfïØóž`4«5ÏOû/–š¶–&KUm²VËOæ×6ä§Uêk% mky¹´D$¤¥3‹£]U¯’o¨«kèÞ âZ_ÉjsÖXó5X§PÉB¹ýæ¶ˆ,«-†ñ"¡B…
*T¨×2Àÿ‹/À5î››+ÿ¬\Ûô¼5	gí‰ô)´Æxl;p-7°Ö÷¿¿ZÙÜÁžRTÇì+i-ðÖ¦0×†Gœx_J£±Éð·hvNÝhýýoYcú¢ö±hDñç†û	‡¿òïãá¤°Õ¸„©l<5$¼s0ÖxYÀŽAÖŠö—N\Ôa±ùŒŒÈÅo[ÖÎW‡wžm.¾³Òá[îî.LÓ0îÃºJ±À‰æDE†×˜EÅ¼ltZÄOÆø*?z¶÷Þwúdß? <
Åa“î/£­âBa¶]EÊ ¹jL7ŸÇ´!-Ns=œd+‹ÃYÙ;2è•‹\ÃS©!åŠHŠb¯Ø¢<©ÜÂ@Cå¶V­—ë­ÖâÎ>¬¶ø¬ÌJÌYÍR;‰x•?_ú³Rü¯ßýÆÒÚ$£PÌø3oÒÀÚÏ6Çæ9°ö§¿œy>ci,)¾Z}ÏI:íg-b½JQ‚HÄUB¿ëÂq>È©-ÆS2ÆYƒ°„iGK<7}q\Ôö|©ª±À£XÈ¨w„Ñ0Ù ¬\ñlÞu9\åºzÖ ¢#“ìò.„kà›¥5ÅŽÙ¼áÚÅ"Íls¶èT¿1rá¬Æ¿ðÝ‰Þ|ã…WyÓªç×-±êÐMæyf5`àWx¬œ‹|"ó¶.JÓy«šÝßjïïÏÖ¶:»ë­æDs·ƒcµß©Õæ»{{ÍÊv5Ï 3ƒPUþÐ[¬Ö ¨
ü¤¢DsfíX¢.#0Œ»•E3oŸS•…z¢Ä´í.™ýµ¥×ó2¤ôOV«•e¼?^kÙ|Šå•G'tL[¾¡ö[Jëî¯Æº`M-k,þKÃšÏj2Ö— ©g`­y“°µ¬Ù‡uÕÂx‘P¡B…
*Ôk	ùÅŸ#˜XC'híá¿â¬á­!Eø£Ä§Ÿ&mäéÓ§Ô‚Ößÿé©‡¡Žæcÿ­YRê[!WÐéïWïZ¿5U@¥N§ä¬)Û-ÁÑ”"úqâ4|MmjÚÌk#CÄˆô)!ò-®–³æ@oVÃ~¤f®ÁhÜ©„L=y'ùÎJkçý¿þÐZÛv6vÛ»‡»»{&i\¡ë½ð"oÄL&qD%‘"¶‹ƒÆ~‘Ç–H¹2…‘¾ø¨CS#F«Ó«¸lúèÂ1ùn¾ØÖ¾¡;Þ05Éqx1^·Ç$õß5SšË,lT‚¼-€¬Ôm¤Ôj­7û¦æµ“˜jë+/w€´Nº©œw‰3\Ê34([²$úãßùTßÜ¥w-—  qXoEÄFÐ¥f½Í£`ÁÇ—çŸÏ$£…(ÎÖÔÔjvè/·ÎdI÷ aÄ‰ #$iBãÜÀ.±flròBI¬±ÆC½m:¤\v 4`¶sy•.¦ÓòÌ
“±Á2ó«.†Vt­9ü4¸LÖvª%a¤Å½ÅŽöÈÍjCßôyÑ(ƒØ8ƒx™…Â4cÖŒô¡m °æHxñÇkæW®)e•ÎìŽš§òr dB‰_é×Ç|ZëjÙ²¨ØlüÓÁn­]g•o®çòë­É	zÂ;åÃÝ½F«^ÝnMNÖ«6e¤]ª)ŸëQÕ§&D›#òØ$Žuq›n¾Ø´a§!mãXÛÝ2­q­6KM,50G°Rª\©€n%á¦Þª‘E5`-Ø¥ôñÕ(@µî*È{5Ý‚"È'X×&'a5IOâ.VK¿ôúÕjÖÈíGË<PX*T¨P¡B…z]iÍv­}k–Õ¼éØHk*…äah-­ÅO>õô­õý¯TòÙÎ:ÚÙiÿºòi@k¦*‹½vf$«±h8eýŠQ`?U•‰·ÎYúÖ µx„&ÓÚ´Ím¹‘Â7ô#‰³£§ê¥ 8”Jf“–ÖâÎý'‘³ÉÄý÷³l¥}R1|§Ö!¬fµ·/\CÝåstxiÕø¥k|ñ…ƒ®¿¡l|›çñÝÝïžöží&T,f2n0¦™ŒŠ²ÚŠ|>ÞÑ”Á1{ciËÜí®‰§á§QÍ—Hª‹ìil*¼{KM¤ÆWMÍS·EZg©PóYÍ$=4›| V{¸Èª™Žå5«9ðre	PØx´Öu½`MâÕÞæuiÊSˆJúlB,wÍü…” "ÅŒ ¶’ÕÔ™™"‡W¯®ÆÝ«·¦1|QÁc SsGÎ„‰d’é´ZÕ×Aj\Åe*…¬X±¦D±—DGÎ» š›3F¹ýƒnÖLT#éŸ«2ÑÁÁ/Q(º½„	9ÇC°‹i#*ÉrÃò‚ÏpÖ±“37Ê´5®H‰yž|ddÍï,¬iDÂ5ÌG±cÇAãÎ™›ŒçWXh6ÒµüÉij¿kÁ(¶ ÿP¢!	OºÙÞ‘&'kœag²ÕÑ%àÛNZ~ym÷ dKøYí5}°[¯.Õ)Œ4¬¶¤åÚZi¡ÊŽ$jÓÑ5®;F2–zø§ýµä=Žû¼F>//_oæL¹T©M,Ô&¶*õæd- OiâW»]VÝaºùì†¬±fõ«†5Ëjãä‹¨kù€—F°šòEN4¬™AØ–Õ6—¿ãEBý?öÎ/´­3]÷öõa3·»ñÉ•@*1 tº)È¹rE!$Æ½‰ ÍlÛ==$uâ4vˆsR¬¶IlˆËØò)Fj+idé˜S7ØÊhf»D¬¡ëjdZÐŒn|ÂÀþ=ß·–—œtf®Xµþ/É–)úÍó¾Ï(P @ýbüýqkÛÛZ«‰ÖþïwÀš´"½‰pÖPVÓãhl…BÅt´µã´ö¡hsÍï[3Q#©õõi9fàÌy“"’¢-‹Á\t¯a®yöÆšhÌÀÚ {€ÝÛCƒg/dt‚'òÈA}Ú‘ô‰ñ:]J©w-e¬œ(ØKÁßl¯,¶˜ŒíTò•¶s`?sRÙÙy: ÛsŸ×
óâµëè"	‘¶…íÝ§˜Qb¶Ï 6¹lˆ‚Å'‚Ä|ägâÛž] ÂplXxø_ö!DãáédÂ
#÷lŸÚÕ«˜jdŠüÕuÕæ=V#ŠZ‚µN‡ÏçJ“è6+Îb8¼MÖe62–ß<<hUø„úhÓƒµzç(D¯bæÊAkÂkJP«mëš¤®»9IuZžxãâÆxÏeÈrŒÏdfd…IaU:ÎX›Œslft†£(~Ö†—¨š a<šHŽÈˆ M$Ê½aºÖè*“s_.ÌŠófgÀ°8U¤‹D¦* ÉˆŒ›™Øàšá‹ºÇÌC„GY"2Ð`5`f¶p2mNOq<z{NEª>­iÆšæ«iJ‚~÷Ä¹ð[ÇÈü¿ó»¢µ»ÙÆ*°6_­RŽ¸“Þ™oˆ"<{¬—Ñ´ãøžš¥µcHbo–z Yûê=Önuiª|Po˜£l¶·U»ûûõR¡f`kÙZçªÕ%Á×Á³ÂN¶&Ì*í”K±Š¹’‡dÅ«#íƒpnxˆ­Í1W<PSªH,\žÚxVbVørm®†µFdî
Li4Êv<k-á‰ãWU@ú+$ð²Ö¬µÖ;Û6¬ÍKüßbµ´«µ$¤¶†³¦tOU¾ÊÀZ5ÿÈÆ‹U
(P _l$äc%øcm©sÍ&øçe®y¬¶¶}3ú&Î¸ÖG†<ÞwŠUxñÛöf«å¨ÒË„œ·´öñ­ùæÚåØ40ƒ‰ÏRÑ>Ä`k±×PŠÈÃ³b™A M’ÓfK"yÆÛ„‹dRXkš‚…å4cMÎ¦RIîB¦{í2’|£Ac²ÅóÍP¾Û¼Dd¾Uç'v½&·áÝk[ y#¤q8–×j5k°	k”è¯ÂAÞ”BGÞ=CÛ[WÏ]ýì³©N[ZÐ
%®ø‰ô zÎþt\×´håËØèK>tRZ™ÄøJExÊéGx_Êa(ó¼Øªf\Õ67ñN¶êüô¼	¬µÎóC§òxq€Èlz·¢jÈ,ÐÎ–WkZH¾ôi!Ïzåß~‚^½:õYZŽÞ'Ä¦x9þô®Y^ƒÖÐ“›ÔBjÿŸåÉÙÐBÿˆÞrX‹š’Ä¨µ8ÆFÈ¦0HNÅ#&b„³0sØKÎ*H?Š©FÉdÚÐZ4ÅŒÆôëôè’^E˜–Öjf@iàÏ TVƒÒfXØâ¨é»°§¸~5¯Qÿˆ£ž™¡Ø´·q0æ\ÉkÉôí9uÞž¶MkÀšÑÀè—f¶aµ‹b5qísA®Þ½Å/~µaø"½Ó˜ŸÜmÜðÜ!ÑN’ïù;½Xg}~Aþºw£l(Ûm'õUhnLL•³“íƒz×Ù¨e«WcÅ\$Û(Àu5¬°ƒƒÂN"œq*[®ÁZB¬Ò#E^XÛBf±6>‡jÚÔ²v««º":ä•6
Kµgt§%rª†\6…;Õ)Õ|(óöà¶^}ÖËiøl=	#z_b¬ùEüOöÆ®ÍI$Í\ìäxbM’µæÚjy»Ê—«nd`¬
(P @~Ù´æ{kÛväš—àÿä¶­ýšµ¬µ(9þŒ­ŠR2äJ¥ÕÆ\s4omÕ¸vñX„ÿqZ[_Ÿ“.f¢ƒ#¦íðê¼j S}gßaàYŒrGt^t†ó&™ Ú;ÃråR²Öút×Æ’Œ\ÄPCdë„m};‹h_“Öš9[Ä‹ä/µˆCß[YÙÞÛa@÷š>Ÿv¤Í¢ƒ¿ö|µDžt)ñ^™þL)C>5mlOUé‰Ëvf3ùþãªŽ„yBÒ7€MöÉ‘~âK¶ëìz„¦µ­¼“vï³?]=ó™|CjªÃ³š©Iü~Q©ælvê¸ƒšÝ­â^—ÏÏ‡¶²Õív¨‚Lç[Ši0¼ÑXÕPGª‹Ï°‹9„F&ßû-ïã­3Ÿ1ùK¤éÉ¾ÃÃ>€žLô³z‚¯ÆÁ÷—§ï¯C`c3ëÀüX— [””°Öð¼@¹øL4n‚aW¥˜‘3á´Èi «L9ý‘HüáÈ ©ü¼Ð!J$
áŽ%ñÕˆóÇ_ƒ¾âcxfà¸&Óy	hU“R$;É„…5î²îZ:4#XãXX•¼=;úÀöPN/(»Óí§_-×0lýò)©Ö$F«!U‚ð­[·²‰Él¹‘MìÜº.‚x™¼+Þ-	äïhñ$€ÑFÛ£ÕÉ›lUû“­a#õÕªw¡šm5Úõ­ÜN#7•XR¯YAVãRnã°¶œH,ãŒÕ–rKYÊ meä3»†¼¬}Æ3zÅë/~ä>«RN@¸¥¹×T+nÔrµlyéJ‚M­–õ-ÀqKk†Ì8–¼Ýˆ-íÚ‰Æš€Í7Ö<k­×XóXíV6½kÝ™ØÖK#9Ž5jÛÖ@µGGu±(P @úeÓš¬5ŸÕ­ÉZ3ZôiÍ¬/¥±Á_ˆGÃ•Ö^·NÔ…™mií¥¡sFëƒCss¤ò‹ÕN½1$,;¯:G7 ‘yáoŸ?«AØfŽ¶æfª0Òfëc¶7MSƒ1SKyÖŽi;+›ÍZwZ(ƒTûZ¾ò¨}ÐÊ?®ýîRÓqšÛ›ß|WÒgÕƒÃú¦ÂFaþ¿Í¾BŽœ‰ëË ›Ü¨‹KWÐ»OqÙa	›MÄuOËxb,)pº±ßXÌ!_œ³«{ˆÛ­ÎIJ!+HB5âIDÇ×PkuŒ¬µZŠäwòckíý:€úÑüZÛt¬)¹¾Á[YÍUtã¦k‡zo˜k&Èÿn«MQ%°fZòž¾¥?¡ÖÇ5`Í£5é&‹\69k÷ŸLGÆÞŸë¿CûÙe˜—Q…òƒMT?‚nQÂÖ5÷–&^ƒM¡h8‚6Cc›á®ÍiQ.Æ#„ìÇÅjˆ³‘° L³­GÙÓ ŸUô¾Ê#äŸk¬ZBÆ¹wXS»°ö`TyÜ˜ßB”@†x1,·™tr½ÿ¡mX»0½îkÖø“Dˆß)›Oþ‘);m‰ŸZk±s7‘m7²ôŽ•«¯„µ/õÞì!œ¾¼.µãî[ÄeÖ¬ª7´ÊfíiÁZ»Å0ËMQ95UØÈeo¨Ê±¨iiòŽÙ\ŽëÅ¥2‰ü —,¶¢. a¸gZ—DuîÚì®wÌ=î–nµB.Û(ÕªeMãæGÉÕ
Ëäö—wŽ×:²e,Óâ£Z¯>Û1g}D;©{Màe~i¹>°:!]Ä²Úäxu^¶rÂŸ‡­æõ«‰ÕÊÚ<zdóEDkÁ@ì@
(Ð/ŸÖ,¬±ˆÕlÆÈÑxl%øKo²ÄÉï'Éÿí-æÛõ.M`$øC8/‰¹­Y\Sˆ?9#©Ìe¥øÇDk61„û,¥„,¶!.è©67«n”Èy?þ‘óÍ¾`iíüÈ¼g_î¨$R#×hOiïñÑì’Ê!?]Ü+îý¥»±î:Û%ü5˜rHTï@5Ç€­Àˆ2t]Z^BPe‘øl~„Í&á³¹‚½¦Da,ZÝƒÞÒ‰q“L2niŠCÓèS…åS Í#5Ëj2ÕHÚÕDÏ©Óì®¶6Û•J~-RˆuKÅf“È”Ý•În$B:y¥Ñ=ìÒ»VÉ®¶«ØnpoJï…<ZpãÚ Px~ø.¸v•¬ôqÍ›»f8„‘ûª‰œ“ÃÆÂ.Ÿ¬ÍÝ¿žY_C¸kñ±8=eê1‹Xã„ÕåË@,§0ÿ\'k6Â³ñ°xLýoô˜±Å4½h€šŠg“ W¤°çQñ¡}”a òÝøfá¸!†D•–^FEw-,,L?œ»6>;wçö‚™›€ÖÝkäyj¾Ú9ë«QióšöN‡`KÃÅ[­UYÇe&‡¹ù†¯ž¯öÒ‰<7ÁšO1ö„%4…ØxêéÈ:Qû…B6W¯r¥"0Wec@d³M ¬ÂÆF¡ä–>n-ï,8ÂDí¢ ­´³S4¥ŽËµ#8+æjÜÉMæ˜-ìgErË¥g¥eñÑªËËLƒ+O•k¹¬L £ðG»X`s}pœöáÙ~P»ö‚±ÖÃjèúäu;]!á³š`M2´V6eP*£ÀX(P @½´†|^S$îÚwVî¼5›
	±y‘1"FbRt±Ò®4J!W{iíÄRÈ;ëÖ`›éŸ>eF®kCçÏ¢á³ÿþÎÛ#±A7ü1–:-)ý‘.µ!¾`ª!Ï§Ämï¤À8–Aî¥tÉÌ[K¥Ø±¬&Åìk„.]
mWÖ¸åW2÷P«õX«WšÍî¡¡µƒƒÎ‘6¢‡kµBA‘9iY¢‘í"œ#½wå]ô¡Ò:\ç>>GÊ¢+ÜU>»R)y0£d’1^SSÔOréN=IMj>§IóCðª¡¤3ˆ#ñ0wÇBHáõfs«²ÖlŽEšõÍJc-4–§gíÛEg³RqckÙrºI6¤£„ÿ}óÞ”)³ˆ\É[¼E¨´Ø<ÃÇÛ±Qß]óèzN°fF¯Í-¬›rH²!I™›Ú"wî/V—BŠé¡ù4c7÷&c‡Doäø°¥qí2¬}8ãÀÏ’²oÚÏ„YašÚÜZÆ06š¡¶Š„ãÄŠ(]2¡IxÅYC ¯ƒÃ6IŒã²y„tÄŠoÀ‹_[x0~Z»cfáõÿ~±fIwùò^š¿‘þ'½is õ«ÂJZm‘Ùz.vkO¥ü°WéØU?üãc7ôæØ}ÏkriÍR<Ö6žm,%¦²†ì³*Wwr¥­"ÿL³0Uu+ÈD^¾’c·V[ºÌm \nCýi@ša»Âr‰CÖ
ÖÈ))Ê9{¥@OZ–¸êR­°ÔhdV“Àky4«Âf†4]ãÈïYë3ÿŒ½ïÎüž”^†- Æ£ÇX{±r~²q÷º±EØ«i¯aX+ƒjŠ±”æ.ÿÄ(P @½´f3ü­µfô£áO1¤í[­Ea5å÷KL\‹qPi¶÷šívTëXÌˆ×¸Ö;{NêŸY_9%á›Qá¨HÿLjÐ§¬ŒP,jj%SCŠ‹J¥ØdT6)b{Ó¤ìA(ªƒßÞ65’)^Œ¯‘ûJ8k®.jˆšÈhêñ^ññw[­=hí ÕÞÞÃUÛg©“7âbRþ]\ÒÛ* pmÞuÙU´ç-QyÃE­,±‰¾X`2ôÖë»)Hqð1“ \ÁxòçŽƒÚ¼-~Ö µÖ-P
ÆÛév$ì±f¥·–o2u åìï=¢NFÚZ„Þ¼HÞq¾m6­ŽS©TÖ"íN»Až
°fŠ!¾ç6È¿UÈµ•4bqÍC~•Tµ¦‹kúƒ©wí&Yþf@ömÅkfÙÖ§ï38È(“ÒCÆN#ˆß;Î„á5Žt„ØBOøkÜŒM&b­Ñb†ÂÊÞæh‰a''©§“_–CtQÅ†DÌe•GïÎóª„O‰JÛ\|ŠÖÂjéXÓ`r±Ú‘±v¨“ÑÑPòÞÔ™3OÉì¿¸ÁŠÕj
tQÿ"y.²ÕHÐY×årÂ~³Ÿ×KÚÔ¼]¿îOG·ÚŸnÿ*Xc§ºœË±Sí:¹Fm#wÃ ÔÎrn)±Ã¶PÊŠ¥)þJÔ¯\dCn˜(ÈH'¯L§f¶8ÂqÍ'I.‘xÍe\ºj£Tº^¹òâh8š¸9"[œcßÈ'OÿèäÞ5m·7Û×$áÚËµññùìx29n¥ç)Z³‚Õ¬¡f³Ä(P @ýâiíW‚5hV“ 5ŸÖ\XûæÓ7?Ö4pm<#ò”QL°¶½ç4ßÌ«q®x¡qí„TH`-vzn=uJ¯K‘äˆ†3ôžÅ†ÎƒaB1¨K¥Ž}ÒÈ0T‹Æ2”C¾=L?š4x::¯¿ÍSé€ƒÚxÞ¡œ`éÙPŠQ()õ‰×òù5Í_Ë?nn5WpÛÝ:Ä³÷x7¡^?4°fÚÀ:N­Î¦„»Bâˆ°IoÎÓ<ZF“×ÿpÑuÚXa)~€bXVƒÚ$ü+¸ˆf­´'=xqò¢b‘}]“'bþ‹”?‚Y`šYüõn³‰_X¶ˆéjA…r?ynÛÎ_òt®µ›•V«Qé:»évÝ©óœŽšÙT
)Zk%^Z\SnŠZïîýý$Ak¦rbÎÕ‹jv-ÝŸxrffš¤~àÀ~‘ØÒ²‘©ðQÉŒ‚´µ¬Á"Ü3ç	ÖÒÖL™U&?FZÒXgñˆ¬¥ô@äY’&”3.Éý ÷ÎÆCñxÒÂõºÆB‚5³Ÿ@5F xÉÞÀì4+ÁÚÛ°6½píÙ'¡±¯î»úñÓ§7&'—5±p×„ÜÜì¬¶”ßŸm|AQj£jxâï•Fl{Nø´æÁÚIáö/ö®ùGÞ™ê<‘Ë9:Çn¸h´\`ue9W¨1Ÿ:[#×?W¦$2Ç48@l¹Šÿ¬rÄ¶Ñ‹…è¶œãr±–Ë1ÚÚ&<.Ã^ËÚ½Ñ¨ŠÄä¤áˆ¹@†8dWÒI{E‹ßÂæÓç‰J§w¼_2»rÔ¼cU¾ŠÔ¬µöV»{½JˆÈxB°¦góÜ]MXó`–5…õ{À–g	Œµ@
(ÐkAk ¬æC
Öô@6ÀßÐÚ§ŸþšLHŠ!ãQ%ŒXZ{#Žˆ"ZÌ*ƒÕOk/3×2|nŒ]Î¤0Ö»%Â‚¸°ÑA.;6-c³û	é‡ã4&[7+RçSÆ;‹Å9C0‰©vL‰Ò.ÀnrÔRœ2;´¼qói´ViæCPÄv¥²·WYëûÎiÕ»m2*¥gu™l²×¶ðêEc1ÔI›ET¢L™þ²nÝ5´–[ž—ä²]g‘×6¹4ùÞÒ$ÔöÞ{W$×8»ò® ]ÄJƒÒ®ó AÅwVG¤†­#KˆÊÎ‘:ø~NËi¯5!µŽÓ\#P¤Ólv ·]Iñø.†`–2l³»º_kVÚ2ä&Ù„Öx)½âaõ-ë®M2Fî]œ?šéˆÛàï¥Y~5¤tŸ,«'Vlç&úiZÌL¬?[Zc¾EH¦˜Œ[@·0d…‰éBZ
{ãª“£ÑJcWEœ¶Ì¥[ÑçÆí©ñ$=jÌ½Ggl)¤…5š©ä³íl‰BK@¶é·µ9dIM$º0Bš	|øÕWSWÿøÇ¿þvéÊÍÜ¼eýêå«­7;›­öü(è‹F£QV™Ý?
klO 7ßNê=ò¨“Rýù’NË– F°BåRa§êR[n9±|mìL%JÏrt­•ªÙ-!RÄ{ã¸XBËKµÒ²j+iNã©µÜÂ©+‹ü¼Æ4ÄÚÅ¯ªO‘:éGAj±›—Vë=LÛ‡Ï¬üýßOÒÚj/kAú¬v—?½”FÞ,ì4åž±¦k
)KyñÚ¯þå¿
(P @ýÒõ/¢5ašÝ0nå-­¡o¬~íB¾ýúëX<jZÎLdtq»ÒÜkÕåD	üRÈÞœ‘ÞXÈþááþûë©!w>Z†TGå…¿QÚH±#g1ÈÀ¹AEB*(Ò œÊÏI¡£ô'–g88+òK™IE“D£Ã’n`ÞÚÊ¥¾¥’+±o¶›•ÌM 3Z‰¯íÔ÷Ú­½­ƒ²àµ¬aIm "Âæ*ÙÆ<	›¥ ÍÏóà³¢m¸3KËD€@“°Žb³%	@³R¥ÄSÕlCæ¤(M²†0%Pƒ°ä‰ÙqihÿpŸìÍÃz>Ò:ì@i+»4©5Æ*‡õŽÓXSïX”¬üÈ®ñ³›N3ÏÌb«dM‡Ù·ÙãY®Fü¤Kïá®yQ#6kD¸vÛÿ“Ýd±Yþ¿AÖÄm™èåPdfº}nA°F# çç 2Ê®N"`|MEgtXÁ°ñ&,³Ìô·ÍP1úíguÅ;
ÀÆ"k¸ïÉð •’†Ìðì\ìãÖÑI¡Èp4sóæ:¹’‰Y8íÂ…~`¬ýtíáÌæ'Ü#[ä£?2_íú|®ÀŸ€‡a5¿hñ· `0ûTKìòþ%ÐqZó!Í?°×^RØ:½3´í­€lÔ²¶1W(4Ø3x·³SPO´VÊq˜+î,ã5î¿Q$Ñ‘Qi9ð¬ Ï)mr§Q*6Ø$––Ê;/À–=ôyQê%/ivÍC_½tæ#©×®æÉ¶ªÙ.ZÙëIkÒKŒ5±Ú­»Ù]ó,÷w™dåÍÂÆqÖ$ÁZ¹
«}+XŒµ@
(ÐëBkÆ­!hÍêGI°æâÚŠU”ZÈS_­ž5JMQdøÔâvsÓÑÈ51@o)ä¹Í5}ðï_ïÏ`­ŽÙR}zÈÂUtƒ¬ˆIl}R"$ˆ6x^æ›Â!ß†Øtßªc¼ˆÐNÓ²™Ò¸5!œ”2ÕÌ`ÖK0?{xP£Ø>è6U¹²·Áè²Ó§ó[î\©ƒƒ¢bÎÙâdÕ·LÏæf]ïN”c¤ºÈš–Ä&£Í•‘6†äºA²É%¶èº{Jš7Ë-ßK³R¨…	 \}®\qZGòPmŸå ^¯8íÝJÇi;û‡í¶Óm¬í¶œJ³u˜G cåvÁÙËÛ{dø;d^v‘øbK)*GÜ§1Ù¬	‡¼¾4ù‡‹D ?ýéËÐ'Ÿü™9ÙHdC1¤­†dZ¶	‡$qYrûü7™øúÜôÄ´úÓTŠ˜ˆ+ÃŸbG±¶ÚW´«Éó#µáŸa¼¸F˜¼t‚Û€4šÖ¸/<Êmª¢³Þ×ÂŽÒºSÆ
%e”ÚÍ!Bè„z‘ÈÂôÍ÷i·‹ŒÁjs·>\ÐÌoÑšùä¯Yw„¾¼e†Ù/‹¦ «)|“ßÓ…Öª¥«÷ÿcxÖ{$½pÙãö^¡´kf§ÇmëÝh«þ2£ZK{äé£e¢G˜³¶œÍ²‰)<²É"ðX/­VÒÊ¬F?ÄÇãF–ß^y
“ÎCA¶<6¼g-3fÈ»ìsÜ½{¾¿vBÞ£­ôOØE'ŽB´èÇ5d5ßX;÷‚±†v#<Ç}öQ]¤
 _5¶šQUÎÚ¶±°Z @
è5¡µÇÐšäÁ¨öƒGkÖ][\ñóÍØ×ˆ<È7bÑprt ¿½’'c¤«Æµ/¼
;híÕæÚúPfdz}dèü`4­1K-–IÑÁfêÏžÇ_‹B\ô¬ÅR.¬ÙÐG0m˜ÞµwÞ1]jÜ”I}QˆMNœ*#í™ËÆˆ£é§Ê¥³ýqnyä?(Ã$TÙ+Õ»ùÓ¡í-œÑÚVi¯x°_Ta$Ž·¶êÆâª³ÐóÅ—‚K²Úà+Óÿ¥EºÕnÃ©J"‘e–»Žg†Ìv{ä{iFùöªT,:PáF:Ôwt4Úš|fpÔ:8ØÈPsÚåëû•Ývg¿½¡²ÝÝµñ‹¬×šùp—m»™/·ZÌUè6’‘Ýè¹¯Ö5—-­¡¿ým^Á×ÉJÑÈï3ç®2è›ÉkŸÌ·×æöš‰†äþ_ØlïOLüæÉÄÍ÷`¢Rù!ª•UM¤¾xXZ±Ó=DC
¯YHž˜È-:Km#½kŒ¿¦7Íà€—Â/Á–4½kIŽ“Üâx	l4å>²˜ ÿ%9½èøìì°vÿvxÁ–@Î,ÜQ+Þ5¢E®ýÄlr¦)œyëêGn¾‹[„J ¬F(Fj»ÕiË¢i´O&±¿sÚšÇ)=òÎ4bL€ô3ò(­'wÄ'§ªµ\(”wÌÈ³ååÑU£V+dÁ²*kïYÕ2(§í•²µé|òâI’šÕôôhüÞ¸{\Œü›‘A±#˜;™Aõ´ñc¨æ÷«y°ÆŠ}‰ÿnœl¬y¬vWjïFÒãîSÓã>¬!xÍ£µò®Mƒf¬
(P @^#ý÷_¹þ¶²¢Ù?ZXó3!MˆÿÚšJ!©„T	dlðë¯å¬­üº/<°èÐ·æ¢x¼ò˜¹v®­ßÏD)…Á#‚ÿ<8%ž‚Ü(‹D °Æ1I"1Ùb˜jpyÿ©!`ý!<´ÓVÜÎÝ
…4Ýn¥šé¬ÉwÉXX„ê†ÿçÿúîÓ¸òü+Ýæ¥Óñµ&®m+—öy7TÖ¡5t€«Å‚ (“ì÷µY,­¢BŽ @Ùl-[‰Ú¹eÙmz´·ÆkçÚºtÄh\r«­ZmU>vŽ-}¤ó`¿N(ßµ‹:{(w­´WÚ[\læÇ"k¡¼Ónvë‡ÝÅH~7’„B¢!B×*c‘Ð(_Ù-¯¶ÓÙÆ.ôR&Ã_ƒåÌËÛ·âWCn1&ðŠxíãsš“=þå—á?!Ùk4¯õã¯ýŸ›7ÿ÷}™¢ž°Ù¨‰¼¹Îúó~šÃfdSóˆA&×ŒÅv®…ÂB7˜Íå W`/ók2ÐäW.2!Ú×¼ô}¹0æ€HÈ(gÝf?|>2ß&=³>£F8kÞ¿µ;F@RùÓÃ¡Y>ô3îŽ„Îwi0œtGaÕÀpG¬V(8õv{³a]°ÐVcñô@½5ªä:¡)ÿ”9ðurŠßÖ+àÊl®ìð è?k +Û ÉÐNV!×tÈmÇÉOtVÎU}8tçÌ½¥:îò[µ¼Ê.D.â¥Ó=5Z´ò]·4š½æÊ‡µŠ ¥Ý$r[`‰L·Ú8fô{­ò’GjìÆZ @
èu¢5·’õ¶XÍÒšŸà/T3´fbü‰kï‹Çÿýë¯SÑx_ìÔ©x|Ñ©w»ÝMdh­7gäeµë}§S€š\¯ABAF	œTƒ§Rƒ©TŒ.6éÂh0¶XM}™öµ¡AÒÿmæcj83„·vü;;Ä°lÁ·ÀhÞSÈ—Ô}qòƒ¶ï}`ýó­ÒßDC@¡æãæ^s¯èìïWšƒnwÂÖ$è†×bUÜÀh#½ãùª„]p›DÿkwN[[ëZÁœ¥ÕbùQ‰=EòèÄI“T}É75e™šÝíÔi>Û¯WÖÖò•n½½1f“Ë&yý­5 (ªÁÓŠç &·‰Û¶Äí&G­f9™¯ÔêÝ–SG­–óÌ£5ƒÖø‚š“ýÃkŒ øM…‡þd?¹öZ¿™P¦Ö5×ØQÛzÿo>ÿüóßôCQ‰Æàk#|±1±[\ØÒ66„dÓDì4â.ïS¹øjÔ¦³!Sâ(˜€"xv³ñ°îa.¨†pÙÆ]T3¯bJ+§ßŸ'gÍ¿±Û·}V3—×xG3©QJ ™~«‘úB»šîbX'U¦VtœV³&Û°‰…,?¯Ä	ö^@{Í?s²¦N¼ì¼R^I$f¶Ù²¶T8V”5²ÒÊ\ö†¤Ç-9jnÀÈR¯w',»Ç‘$pÓ	{Úöß«ã¿©­»Ö’œÕ¨<qšÏj~ºˆÏjm`rWs£PK•f5ô»G¬Ê«y´ömÛ(P @zhÍVB²b]©°"òkyCk
…¬yŠÇ¢ÑÎZŒí)FdGWš­5UB¢^sÍ‹…|±²_9##™‰uãyÙH³»ð•² Ï{ˆea-Ó¡eM%0[*†ÅpßNA^ƒz÷@x}§£œÔ¡`-Æ†ž7ØO×õŒTF›Y>ønûqó›øiTÙØ(ý»T)=E·
ëûÍmHÍ©?cÛÖ–1Ø 5ÄR¦2’f6Š«Ï[vè3Ó;·¢ˆ5¿ÀlÕ’YËÆñ³C%ª•Hé+Éª§iíÔÜx~¾Ý¾¾³Ó©·8ÁIÇqvÇò»JÑ`ìæZ¥¬­5œfÄ¤‹Ä„B ÆÛV[XÁÍz§QX¹Ýn û­r:ïØÎ5å¿ªŸËFC×vdÜ[g®ž»÷ÕøŸÁ562=|áömfI{”-yæ…†O>Gá±‡ÌË^Ÿ‰Âc3
ó¬‘Çhh-‚KÆZÒa:Ìh5˜Š³f
Rq£›I¤[FbxIQ$Ç“då&å¡ LN/¸18uz!¾ËÌÄ“÷ûGÓ³s8i6ÒÂš’E®	Öôâ«1ýî]R:—ˆìW-×4Øâ—²á82Yöx¢ÌÁFúŸSÂ_,°ùˆâç@j™z©ÕË??CÌN¸¤VÈm8ƒdŽOJã›m¼÷!=ÏÞáÝ‰Xõ>Ñ®æ'ô]4O¾íèÎScƒÄjîÿ"LähÄmY{Yä<°ÔlL[«ý^°v$cªÙUÐ±(P @z-iP3_•Ê¶1Ø~”¶¿“@µÞÆµ•ø¯ck´®ýÛ¿ÅÂ‹+‹Mf€)‰cÓÏñ;×^VIÒÈÙÿ˜Y¿Ìì´ÔàÈ VÛPvA&˜ÖÒ…w2QX.ÃÎd<LÝãÐybäCR©k}}CrÝL$æÁý#–ÖFbgÁÆà¨­®-ª×íñ³Ò¤ò¥ÒöÊéÓ‹9Ø¨£½fkK¦šØì™z×ÄFL‡rG ·CN÷êÓÕ‹%=k9
)’FbÑÉ.d†…æ”J Q©ÆÀ·!6½T$u±ÁƒÀÚ>ß4¤[­Þt:ÅR½µJð~s·16¶»Ö>8<lRÓŽ}ël5)÷ZñE¤‡†­™U8²‚Å&«Bæee7Ûjòyu´Õ%Þ²™Í­šo'9Žæ>·o)\3#ßþú×¿>}úÑÏ‘5rïKÂ!	y˜9»p›8Å;’Í†<*…|Âê	Q#™þûßÿäÉBx&D¨ã˜‘I´þ;uEG£a$ÃÎÌÈlÑÒ¦!M¦›Æ6‚Î°Ú'Ix-MKæùÄöÃh²ã8‘ÞmõÃ-$îÌL+‚Ô(l¡ÚƒŸ>ù29FbÿU†—ÿvr‰QØôº5©†·52‚×úF)ŸHÖr?e½‡'œâ«ÇNóhÍG,ÿðç³Nb®ž&3kÇ¸'Ê=öALòÚÏPOr+÷á%B¾ÄGë]ikäï÷znª†Õ-à5ã¬ùé"~ä]ÔbˆfAíkŠ©Z^£Q­ZÖCR·Ë±(P @zÝhN³³ÈÌ|ì`5×,­­©RŠ®¼ùu¬/j¢FYÇöhÖm¡ã¬ €Ö¼ZÈ“qÍ5h&&úSÓsë§§ï÷s,5Bãœ–ž–Ã¦Þ4Åï+ÛŸkjfwhdSø¢®¼³¾[ªoPOè‹Âh(Úçf@Žp˜âbêmùáÇæö¥Ó±ÔJe{8“Ùîî=~œÅ¿ûKu»¶
Ñ©;[üDB¤5_ŒÐ¶m`EždÚÍ6ö
2e0Ì¹µ¨Þ±C“›¤•J]n8Æ¿¾ÌKÔÅˆˆÔ:ÀZ·¥h‘rNÚ{Ýo+\j†Œv›­n«ýE+¿ö»µ|­7U…–Ö§…X©p…`míÛ
¼ÖuJ…FäÛN§ÒÆäÏÓqUWž	|¢9ÙèoÌÉ–Þ{{í£sçˆò—#:û@µzGéh#Ö<ž ÷!µï¿ÿþþÃ¹ESJÑ‰~²NØD<ºâ¬…µ0à¦r75ÜkZRÇSA8Î j(Ik[2ydNi—ƒYîtC!•*8z[?¦ÚlF ÆTëï¿paA¶šR _}væÌÓ§$‹à&æHºo‹ÔaµN;ÛÒ_¯›ËS,xƒaØiôTAjëŸóö´×›ÕK.S/7£N8Ÿ~ÉM½¢ž’(Gñ–Çgî­†¸¼¶5É4ÝÀC{¬±ï=ÁõÓxhé¿fèŽ¿ãq»óâpßg5#Ék·‘ß±æAú¬†`5O_H´fp}pÍ¬¶¤‹
(P @^OZªý{çÚÖ™®{8ûz3ôòL.â;ã+U¢ °‘OÁç¢ ëJ1–ã‰ÉÅÜXPk7»Cr2È3–±çd¨Ý8¶™2u³‹PZÿÉR<îVHlTµžA!m‚¶uud²ÁÙb˜ìsœßó}kyy'»ç¦e=‘ÖŸo-©±Š~<ïû¼_ótªÏ$?Ãÿ˜Ölïš´øfòÍTWªW´¦9ÙèÂªSj(^^1#®˜k6hÄÖBú­k®Iål~iill~ošH¬8ø*…õeìäµX¤à„«Öw‰©j8gªTü{…Œ¨MMÁþi&lãÁ¥³=ý¦¿rƒÞMš¤î[\\-ò^D”¤®^Z¤]MQ#k/­&ù";œ·š¾ZXáYÍ!Âh«<EÐR#¶ØáFG°Öd¨¶ï]íH8hÞ6¸ “CƒgÐÖÀoPr±/ƒ[%—zÇÖãƒF½M”ÜŒÕëªŒc«9ÎB½X,"B˜‘Œ4s¨]<ÅÌ2yl¦ä°¾~8­øþË—¥æÎF»]S±¥þSŒ–k(ÞrÓä£×ÈAÿö§?|dpíñƒ_`°ý«¡l…CÒ½æƒö¸<NË~²­=™Ÿš1ÿñî½¥å™ek
~Dñ Ö ´a© kšÜ›ÒÏ©I¼rj”ašˆÕüô‰aô7c·„õÄmÃÚF
Fæ3˜šóY-#XÕHì‡ÕÔ­Fb¿¢Eîµ+V“J$æ0ÎÚQ«Í,½úÕøÊo!â•âÚif;sEàæpÈH˜±BÎ»ÿ_n›%4v§§!õxrZæ[scPØH³2Çb;CsáIlgwÓ)„$ 56ÞÇúUù»ã=7Þž`-œ.4¬¡…I_uõ­1[´¬Ù,HÕ?²ÙâQ-m=ÂX‹æaGŠ)R¤H‘~˜´öuEÃÖ¬ªVÀš§u±î"ò­µ75k)Bül©RC¬VÓ×]WÓÈDk'j!ß}®-ÑÀ†Á6–]Zú Ó—</"cˆ[.o|²L&ŸŒk,v%Ž£Ó€ö›ŒéJÚ†Ž•V[×CÛPpAiž,C‚¹DW—=—KëC¹Åçne5Ö³êVïÜq_4:îê*XÔ®a°íì`HáŸ¹®É1°f‹#1ÛXxYk½„×¶Knd8Ê=«	ˆ¸Mcµ½rI^¨N·/Ñ)a“Â?"Di@«!Nj‡õ•"CÒ\wÓ‰¹‡3 Ýi4œ¢‚C,—ÕÅkqs#2Ÿ=£8èLÏx„Xm7¶®¸b½ý¾5çž»ÿ{öµý»‡Owü5ŠT”5b¢FþïŸl4¯}ôkpííDqPi»×ôÁ•ËÇ³²§MÒ´ìyj!yLuç‡®d&–øpg®($¿yMu`€‰¾oÝk¼4pÜ5ÊW|¢úSÀšå3N€5nð`$ ð¤+b»•¹ÑÂÊh¼·0/¬èo3>_éÖþQ´v©{dV³ß÷Iyçw¾ýè?ûÐv«m3A­­»Ô²Ñêç[x°¿ÙZø>mièøäv§Ë!¿Ñ. 6ZN7®Ýx¥±Æóõz]d¸…i¼Ì;¼ /¶FA–HxD ´6éó—e5ÿŽ+`øÌüYqúeè(ðíI˜‡…j–ÕÂ°A7¬µ>^øøØXƒø²­³öH?`bëBFE‘"EŠ)R¤jßšÇjl}c­ê³Úîªp­¸j­µ·˜HZcm´7‘$±}Õu;Ê»hÚ·Zí–ÌšP-¤Ÿ4r×¤ù¡©¥¥r®/™c%cc™–Z21–%+C°ÖÕŸ# ÒÂÚyycà¬FõcZ©‘—e<qÒ’]\ÃÃ‚ë¡ÓÕ÷°è8W·[Ã-—å½ûÒÐº|g=ƒÖ×8Ýçy¹Z]]%Dt«m
·MÇq©“¬VÛh²¸¹ñØÂkÖA­Õ.•Ü†5Ü*#>ÙSšÏ6 :ì3…ÿ¿ThˆñÒ¸ÖàuÖ:/xÏVƒ•K,Ò‡çÆ5:N)FXe£Uº«kêÛ&ƒ®á7Ch4«yNšv)m{É†y@sõNc+^rõuÕi‘KBþI£Ó>jl1}­fg¯*è®ï®ÁkègýwÆ~÷ŸqÏÍÿäŸ5òïKóÓ|~‚µå™ù½'èÖÄøD6…×¶TN]éÍw—ŸäaµTo¡œÛn4?§]Gf¤5k&¶_ƒ±oþŽâZ}q€aäGÊÒÑ‹u•Al’Þ
±á•ù¹òüÜJ“îq£©X^ótÚ•å¸f—o3íû&¬öîµwˆùýïqgl²H‹PN²1ÑÑÃNíîþç4¯5¶°¶Pÿ~°öý*$õðþØ]8pDYö!8;¹ÆµÐY@_ìÎ"µ³ÿÃKž»ÊàGæÍ-úó°ÏtÖì±÷d1˜zÍ.pÝ,«úš<þ…h¯3_âsÕ@ž6ÖÎ*‚Üo-< T*›Ø~	N3¨¦^µz‰€‘Ò#þ j”.)R¤H‘"Eúá&øDj<é]«ªqÍTBšÿ]â¿¾&)Ãÿ­¤&¥ «œ$œŽªû¬Ñ¹v2Åÿu¸†¼jºéÊéLr¬<”Õ¬ì,4EÎ!èqŽ²µŽ]V=é4§»¾¬8Íƒ5•BÚk™~Ê(ÙƒsýéìÈˆ5Ò#u‰Ñn]Xm,$Ók÷×sDþ¯­õ ÈPJ%¸¸Ûl5@§†[*®­W:C‚iÎ}gçqS³Ðy(,²|µÚ çÀY³	tq‚)×lÂo:VËûš`M5“55*¥è¦åC
5ÉëKí§ØQ¬ˆÚÔ:ÌVÛv7\§uƒÄVÓÞ2>–.ìÃeäù;ÝF©xo£r¯µuÔv:$¬¦-žxkÌø”ñ¸k
ùÙ‡Økª†×ÄkÈó7ËôÉa]¡÷óFö–®¬ˆÙà5"Ç9’ï_É?A+$RËKÓk“‚54 iÖuÌ°Z\d†nèò›ô©oÈLÈ¦Xrø¸£IÝSøoâš=É•øÌ<#ßò+3ü“š—þ±Lß*wç«éÛ¾R ÿû·b5`í7–Õø‡*VÐˆölÕŽÚíÖþÂÂ70¾¬ù>Ù)OíÌ\ÈàÞ:Ø²{E†ÿë^Gk>L9~Mg*Üb^…bÍqèèwó¯sàß+qìŸp`oö_®Ó4ô­ø‹á‰áñe<­<X;]iG¶‹EÕrÔx~çMYSÇ˜Æ¦.OíXü/íÈX‹)R¤H‘"ý õwo|môÌHI#ÚÇ.	Ö)PÓ€lÍ]%ÍZKž;÷3‹“k»Õj‹ò¾†r!ïú)þgàÚïŒIs®-•Ë¹±½©l²ïƒé©|bej¥'9–ÃXËâŒˆ¯Î‹Ö#åËkYÌÆ?»ø^F}k™¬vÀÖµKCÉžDfˆL’t?—.SN›~Î©ˆ\,­îæ°ÖJ—å³±…ÒVÆ[í´*ÕN­ã–Ö%ž]"îÿñSÚÍTµˆïöô©À‰Â”	›É(S†d5Öyùò)ñ$5ruñ!*€”ëv¨ÇÝêÁK0Í­tŽ€5ÚËœæNÃÁ»ßáýÚN1æ¾lkª,ëŽ[Œ+ý„«ÇOT>r”J…iÍ£¹xÑm;uŽëÙní—®Ðw¯åµJÛ5$…F&ÊRî‚c>–»ö³S¼6:ú;ìµ }­ûØ^³*ï©réÉ„†¯=™ß#Ì?5³¤à‘ùeÖzW–æ¯\‘§b½4bD4,»<7ÊŠ`íÆ "-¼’ÈÑ°&)‘”‘AÝ¢«â„á+3C^¾ ò·XonbªW³žµ6Ñ6Ë÷ý9ÓÈ¸\H\ø‚nµ›ïòÓèû¾ûíp5¦ãQªLÕ?6òëøüNÙë6N9Q	y èr–ô²××iö
›Ö‚•€ðtäð[_,Ÿ‰„e’ožYV»éw´ñ&èäéÐ{¹nb@ÕCÕ“àÊF2+s¬…‹ O³Úoâõ­…ãH=‘`í;" ë*ÔÃ5§ZÒE"EŠ)R¤H?XZû‰a5ÍY³ÙF˜kUå]²}XCÀîZâ+é\‹íÜO«ðˆô¬Á0®½Ú];=&Û*ŸÞÛË%ËäULO-=éN]ú ÚÊ~ðÁc­UÁØ¯èþD¹Š¡\Â€lÍ©3ÊÊˆÉ8Ù¸ —“ûÈœ~Ù¯nà6­äqÖ²)(­ç¾ã\îJgÖ×ÇÒ9¼½¤.µq×Æg77ªk®C]ucgƒÐGæ€ãví4Kîù‘“ZS	$#®i	»ÌT³Ún‹Ð™ü-§Ì=Þa¡ñ¢Ó¨á¯µÖzœÚK(Å.»›­U’[G”S>Š9G­b¬tX‹ÅŠ­FI€ã°®mPøhÓ ÍE¶>®1¬ä9.:­ý"K<^v¶k‡ÛÎæ†»ßP§OkšË}µL·¡x3zýùÏðÚÍ+'fekX¶Ò!íGH¼61 íÍï±éž×!æ2±üt6gµþvÊêŸ[!jdfïI~ðöÊ¨REQ¤±«hDÓŽÝ‰”G^…Ód©É¿ÁM\Y)èŽüT~¹·×„ö÷æ!5Úé¼éjù‹Øj¾ì~A·Ú5~Â.ñ?Wb?¤&?ñ!y"úñ©T½Û¾{ÔÚ
 *Da‹ÎpÛ_Í§’`-¬°Õæ?Ù²9Ë}ÓÓoóX+‡Z§aÍ¿Y(xeþè4o!x¼LÉ§5¢F¸ê­pŽ0‘X¯ a{EáhLm'}ˆ¼½\ðX-ì«];nX“)jP{`°n‚f4ûÁdý»ÉïXÛ²jÒ#ŽA5Qd¤H‘"EŠé‡MkÏü‰k*†ôaí°æÓÞš¯Q˜-•`àZ"ñÕO¿:ß›âdµ©¢>âm5¤híl\SÔÈYÕSÝŒ_ë^Ú›šâ+>èvizz$	¼±%Ôÿƒ ²¾´ì6æa{°–bÔ2)"(Ã±_yé’œ53&[÷KÙ,7Z»$oNeriEúgÓ©bé~ORÓ³³™Åg» ÜeBò^º\ª47wsë«ÀÜÖÜØlº|\‘Câ¶W«ÊQÃ[3Á!Êé>#ÁC%7EÂÉ~ëT› [¥Ò0½kºŽ“¸Pì€M÷>sŒ|K€cnÃµ_:1§Ñ*rÖ‚ÈÇÄ‹Ä|YNóŸˆqkâþÒB‚jhØq÷ÛðVöÍNÇu¶ïÕãÐ†žÂ+­Ô½F1¤ýÌÐŸxXû3é|Iÿ__óZ~¤[
º×|{tobÍž¥4I»ùÞxêƒñ¡¡¹yùi3ùBanþÉÒ\9žß{2?;?;<ysÀäøåô­}éIíÀàr~V#qä6ðf`-®š¹må^¶ƒ3å©åáá}›Ëw3©ÛC5Ê5óäƒŽHT·Ú»¿þ–dXíãÏïý¦½ýé§Ô~b¬=<º{WÄ*XÛgÂò±ÆîxÍbÐ—¬ÙC=‚Å¿MòçXöÒß¤`FZ Gº8¬¼ëvÉ»bãè¢½Ët£Iâ3‹,rÓMcŸ™[,­éJ8Òã¶0¬éu>h?&h&±Àâ”äÏåÙ¹°±æ7¬…'¬}
¬AøhPÏº­ƒ¬{Ú²9Õ8Ö µgQd¤H‘"EŠé‡«ÿô±Ú×š²Él»¨d`MîÚ[oZ]ÃVKÒºvî«sç“	z	[ð’´ö\{½F1Ý¶ùèeËe)¦£D2™›šú`zij$›É—ËCCåò´†³yAbØn=Ræ"S²ñÕŒwvÉF‹Ènã]Êô¤ÍA:Ñ@·‘Ó×b=ý¼~5ÖÕ³z5—{¾žË­7+™Tµt'UtÜRì¾³Z­¬gúûÒéØ´‰œÒZš„ÊâãC7s©n„É›â´½xÑÜQMäŽ¶íÐák]wçððÅzÅNkÃˆk¬&{.·0¹Zõ*ÝO%ŠÀ±“JÔ;±:9#èN‘‹ÅxÖ=gR):ÙÇ½ÿa‘Tß¿Sß2Ç®[BîÆf»4ì}RGÇÅÿûÈÌóVÚAþ|fÐÚ¯þ É\³i#^ÜÈõóÛ-žÍ±Ý‡{Ò<fvOOMOÜ¼M®äËK{Ë½KOô¡ö–óe:Ýf•,ÒK‹YÁHÂ{O
,ßš˜.ØJ;B|>œ4žL<?5MÌdª<UÎ-Ïô‚i†õ»}Vã»>ŽéXâB|Ð°šéVÃ.ü°ÖÞÞVý£ÆßiBžº÷„Òw·†¿ùføo×i„"øõý	8Í»XNè…Ì1¶ºöê´~ÛÞT-ž„5-!!l%mõÎ>Éùu‹Á ëà^„•f¸KòdÞ—tÆaçõ“Kk‹‚:P{°¦Q<OAžùýv@¨&Zg[ÿ®Žîß)•€5dYCþ'¶ð(*‚Œ)R¤H‘"ýÐiÍ¦Œ@kÏN¥øïkØÄjêZ#ò«¯z5ÕAÚÄ‘ÄZŸ©é6©…|®1&;d¯¡°E#Z³Ûiœ6)•žf…ÇP† Â©îù¹‘¡üLWndè½~zÕ²éœ¢#Å]øivNö¬†Ò™ŒàMjétOË¸pš®Mî¿‰…ddv¢˜Jö,þCf±
¬å×³‰ÒDv­ZÂÛÚÝ­<ÏeP–´ÿ
Ó:Íæj&U,ºîf×œÆÓÊº{ØÜ>|‰­Ø©¬7:¥ÎÓÍÊ¦ýiL£[­A·ÚŽ[Ù¡[l÷ªÛØh°ÖÜt]†X»¸r­Ë1£žN£B±R»]·kq·é\öP-k’=ÀW»«™soµnŠ×‡Q}5‹zÄxÔ®×Ûµ…ÕCŠLê>2RØÆ]®ÙjHÏ^û·pÚÈÜÇ÷†ò³!o‰Ö¤ùüÒ\|yÉÎ_#rd|‚§ðlÖØms½½s{óOÊJÞ×Çœ§Qi^^ê
ßúõÕÿzyyc­|kâÖÔè™Â 	+ËËÓ´ÃMõFo–uûòpo÷ÄÄøtv€nµ%pddjy¾ÌÌLŠqm_Þ¼F^ÿÏñ‹ßø«?ñ3µïmoo³±½½Q£]O¬VëÊYÛ_`v½þ½ÒÏ¾ðIñ“a`/ðÉBt6ûàiI†Ç×<MJÿá5»1åŒWiÁ®H8dá.2åñÛkày/ô­5±˜±Ö<`ã’zÈ\ätx²tsÒ÷ÚüŸzÒÊg5¼Ÿœ‡=diôú
¤†øø^.Ò2Ù0Œ,×>Ö¾ûNý’Á4k†×¨@ÑˆµH‘"EŠ)ÒŸÖžy´¦RHTñ&®ù´¶ëåŒÐµ&ƒ\KÙùØ°š2ü™º¦ ‘R³ÓìhFö+píÝSöÚéDx+<—“*çEjZ/ÏëÎ¹r¹œOveÓ8gªmìë$3`šm[Ëö‘Ð/õƒj&12­QØª â˜¸–ÉŒd{PW’Wö'!½«‹c9u¿ua¸e¯Ž­­®¥w›ÍgÙÜÕç•7¯bLmºcëU´v[nu­§ùØÝm>nºÍVÅ}ñ¢ºû¢éÒtö¸Ù|Ühî:m,~!˜iÍ†`ml­ênR’È¯i³è8SÊBÃÁ«ÞÇ]sJE§ØCä3*¶
ÒEüS¤Ö5»î]„Õüˆ{`M'YæŒ"¨½ì8ñº£!Ùøj­Í*1uh€hï—CþIúð}º×<^»988zá|b¦p]"RÞÔÔ”²!%óÍ-ÍÎïAXSÓ€°»I`Z’ù•BžEnY½¤Ù›¿».+gry|ªP(OOuÿub&7>Õ;PXRAå­¿þuz¬¼´<0j»îB\°V.äÇíjü5º…j++æ›þhÏ•/?ùVû¹Xí3…@jºÚö&C66Rþ˜ƒ\L¦/lµ¶öEjßÔÃ5¼ feA‡]'÷s.ùgH'<ãÉ3Æ,Ü¼ÖA³À³:)sŠŠdA´v,X3L¥#wñ´ïíif/êãðdƒÏfA]§N8Œ5óó˜;~»mAû¸
òìp‘OMÃa{¡>7°V·°Æ$léF2òœ5iakV‹Š #EŠ)R¤H?†JHÑZ¥â`®\SÏšÁ5[Ivâ:Z-ÖM~¿Š!×R šf­%Héå ùæ[ÕF­ÕZ×„kádHk¯…y-l2Ï<4ÓÞ—j<æÊù¹Ùå™™aþ™œ59;K¤	IÒ¬f•V($^wÀu`1$êc#Ã?—It¥A¸¾Làã†dæ—«ß¦ÁnkkÙT©Ôµ¶ûue=—Íí6+„F®­ïîR™­n\ÍR³µéVKl_¯Þwš¥u÷±û—Õj“|‘æf§ñb·§È€ŽÓ¬‘© –Êz¢§èt0ßÜjÓ¹ç²±Õî7ÛN‰£Ë±b	¬ÝqÙ"ñGaÃš·õ×´9­¸Âñm+›³¹ïlìÜk½tUyWít{›šÒ!å1IÞì5äw¯}ö¡	‡Dê^»19x¥gôúy#sÝÿZ>;=fçlæ¦ÚÄÿŒýÓÞ?±•–Êsb/ñ›tkzSYn×goÃ7¯/a¡•ÇoÁ_Ë½Ó·¦â£Ë+TU*jrb¦°Lj Þdzz&ž›˜˜Îù¬†º«-›/úƒ_~ùÉÛo[Tû½÷]ŸŸ
8å±±£‘çÊïW[[õ66[Û‡µW“™îÐÑØœ˜„‰µ?f™0°™›ƒrGï<°Õt|ãþ“!³Ìl%³µþVÀWZÖóø.]>•>b›Öü~ä šùéØƒ5sò9l<Ñ†§…€ÏÌ¹½ÍîÌM¤®Ì!ÖÂk§j Ûûû“¤‹`5^m°îKƒÕˆÕhµÅT[ ’‡óèÑO¢t‘H‘"EŠ)ÒŸÖÌÀµŠ¬5ÑZµòÌÂšñ/Q#õUÑÚZQÉ©.P%¿J¥(‡L&ß\¯hð˜`íµ¸fí5Ÿ×`+]P‚µ²ç³IjJ:ÎÈæò+Ë)MÊN'€0e…Ðté¸/™¤èQÞZ›Í—‰îïá
àç
 atö{Ù¾dö—º-K+\Nt:–Þ­®­UŸ/ær™«Oðo²"3éJ­³íÞ¿ìv6›ÕË‰çÍõÔý&3´›/+_¯?o¼lìVÅÖqWwkÍª"´éæs¯>¯cNÈsVWï÷”|´µ¦1Ò­¬!mKDŠô¤b¯T0ÛîÍŠ9Ñ6Lkˆµx}¿Ukº›Ö–Ó~T"ÌŸó»7·kXCÆ[«)ËZ»kÓF‚rH¤aÙ×Þ}÷æð—_˜¸pí_õÑtãs°0¸6>>±‡lðˆ‡g:5Ô–—c6áìíÉÁÛ7–žÜúS;y«<˜ŸøëD.??»ÌX€îi¦.Ï\×ðíñ©xïÈøq°.œP­{$¿¼|ýz¡`L¡Ú;v´šÏjJ|ˆ6v4×î)åº‡ ›;¼Õjð‹96»^Õ“JÇ8=^-È{`Í—_æ8Jþü	32gBoI`t&«…»ØóÏ¥™÷B­§@²Ñ.ðÛ$ðÌ.pX“|_.°ÌDo’qÏƒÉž¡oÈGM‰#o¬ÙýeŒF•Ù?ohíu¬ö)ºÛÞDEI¨°¡ï`5lµï¶Ø(®¿¦¡…Ò#'*‚Œ)R¤H‘"ý(híïß¬9Àš×²æXcÍh7ˆ…üN­k6Å_ÂWKñL`¯;wþÜ¹TÕmvk¯ÆµÀ^;›×Ð|XKÚ¤–Ç?ËiÂµ`ÜzOþYƒØú-›e¸¨V5;›>µ@iuŸñ‰‰j‡dÍ’Lf†ôòtêêPf}µâ,Ò½¶˜[_Ì «WsY™wøq(½ÚìÈh+U6›«=Éõg»	*$;;Ns7½NvdõE%½ûB!ÿÍœûl·RYLCvnu1û—Æ.µŽwJî¦«ÊÍâýË=f'æ«G›âåžTÏëx-k<‘=Š'Vq³!]²³í,8õxq¸ÞjÔë.°F&ÊÝ}\µZ›”J;*›”Dpf³ÕâSó>¶5,[¼öÑ¯ñ×®]£}Mi#…Û·‰‡\Z™•þýäB%‘`{lu eúcª"Ñ|žIqÜÜòü“¹•ù2£²ç–æa1|´iùk?fLXz2Þ=~k/?šŸ^.LO îå2œ&MÃjÒÈH>7³<Sè½§xïmXÍ4«ñUŸfµ6ßô-«ñ#’,ò”áæG”@~¾ål~^¯/8Žûêt‘ÐÎƒ±pcøüTšHÀt¦øçVö,°šÌŽ›NF,AþžÂaýÁbplM;…îûöšs_vE½iºÑ%1sÕì_÷[?åŸ#6–üÌ*ëÞOÂ™ÎO ª5Ú¼5›¥"ù¿{rûºìr)”Ú«é&ûÅø°`mÐ²šâEXÍ—`êGXAFŠ)R¤H‘~úû70ÖkŠ„tÇ¹¦Æ5SykkH­koiâER–Ö~šLœ?¿Ú"lð…k¿òqíÝ0¯Y`!›þšó¤;HœXÎås&ï±+ýÞErEºÒ]I ­Ÿ¤G”É\¢&2“îcÉ£µ‹¦R —Å^ãeP[2ãÁ]:-R»Èk’—É‡L—ªð™|4.ÃVCc¢ÀÌXbÕqtzÙyþËt×ne{Œ~¶Ç½hh±kw-àR"ù—Ürn±ùb=}¹}XáÝÖÝõÕ;d¡ÜÙ|±Æ°kŠ 91|¦ƒDBóOx&b¯S kF½ù:yTßwÚ-‡oÌ)»ß‰ï+a¤Ñn)²ãt”æo`mgCm]úØd¯}¬rH;|í£°×h_Ó'78øÅïFoÆ–Ø”¡’È¿†Ì!X¦ç2uâžiqvvioeei
Òš^RÚÈ`7=ÎEÐN¸6Í’2%óñ™ññ•eÁÚøÔüôq¤E5>Æ±ÂíÂè cÙ®Ù
È÷?¤[íck*Õ µÆfíå£ñ0€÷A‡úgŸ™Ôþ3ÓEÂhæ„`ÍGhòµ®ÚÄ‘ÓÑþÖV
xÆµ=E>Áÿ*œ¦V qgË+tô·¢.sÀ# 9eAXˆ¶>¬éü¦6rè„qÇþœ6~8?Qàí1þì½Î/î–‚Lã«Lª‘`-	Xû‰Ö€µøä¤ZÖêòÖ¼Ôþ;‚µul¬ñÜÚÂWs¢$ÈH‘"EŠ)ÒD÷†P±ØãoXí™ç°y1#Àš‡ko¾ù&k†ÖRÉÔ(›ŸžKž;·æ¼ m±c‡g¸k!{ÍòZØ<íLÍZé¾ÂÌJC¬+„¸ÞË¤»úmëY–¢FéÒ{ýÀZ?™#3,*xDýh]=9Æcl`\?xG
}¦/—åµÐœšÞ²¤¨¹mFÞ]ˆ“x{CUé«Übu7V\5ö\bè¿-®:M·ÈñJÅ}¶¨‚Ì¾5úÞš•×iòÏž­§W;ÀÚââÕlªÅøv÷9Ð»X?Vº,g:yµÂþfÈ[û—ŠÄ™ÔiaƒÕ0Õ˜³í*¹þáþ~Hk´”;ÒÆ\{Ø¾«O­®ùaþAÚÈÏ~ÿ¡m_»öö'7”7B‚eþ5¤ONÀ¦	lRØ5%‘l¥ Ûb{:z2>…Fmc·¨î	În=‘”'9Å¬v«{xe‚9|ã¢4ùv¶WâY3+41‚j_@×®}ûóo­öÙçŸ“×Oˆ ?J§k(Uÿ jÜ[(}30ðÍ½ýºàâl	+4Ó›OUÚx§Úx â?BŽ\«á9hžÎ€5?31… ¯…5o	BòxŠ­=æê³‡\ÀÎ:k~¡¤ ï¡3Öpx MOá™wlýúFÏ7~¾ îs2ø­N²C+ó³ùãêæ3Y-ðÕP{¿TŒ5µ"R
¤ž%+ã«=’ª:fÃŽ)R¤H‘"ýˆ×DkVÏ|VC
À­Ù«µÕâÚ›vìZÂfŒŒ*òÜ¹$§
Ð¨ˆÖÃ¸æÛkê^óº®Èf4çý9–½¡PÀEIÙ ‘dßy¶ð–h-›—1f-i¢ Gçí¼ì~’Ck}ý0Ô¥‹´©XK¦‰Œ,·4”Ëé —èã•xpÆ“DIÉçÏ®fÖŸ=_ëIé4[\%OXCkØëÔQ^^|¶ÞÓÓª•tÇÕÝÅ<FD×\Íe¯¥ý·ªVpÖîðÊ®„]¡´3›Ô^ÏkAsš§ÀF\Ö¤8"_uëû[W®´k”¶†ÖË#<¶V}²Åø5Bìk,4v6¦}íî‰´>8Ó¾öí;o¿síÝ¾ùå—ƒ¦- ¶ZØüLÇ2­‡ì$¿£MˆÖnM ã¡uÏîyÒÂÞ¼j"'`3-`°å—y¡5Ô„€6U¤»œÏQÛš¹=záÊ•›×@µ_d2 ?ƒÕî!¡šlµNƒ©w5éŽ™à­}ÇÝp!†ýýoNÃš=ûR¡H˜ÕPà¹y‘wêV÷|lóAÍ—–Ôú¥ç)M†ŽÎ”ÇbV6:„§YñáËp’ß†&l;ñb½žŸ½oßËÒš_(éûiz<àL¯Ñ¦f.„’B‚=
¦~OÚ•c¾!0CÎGgç‘Ltô±ÏëAÂj<5TG!VS›ÚÂ‚×³±Z¤H‘"EŠéÇFk–ÕÔ½fAÍÒšk¥?l&X#gdMs-ùU²wt4a§®¡sÿy÷Å‹ÆîÚáákìµ 2 6tÝjveÖÓŠ×}qÇ…÷Žöt%SˆÚ?ºÁÅ’'ÖÏ†£4—1=läô_¼4rñâEÖÍ`µ¾ v	ÇM’s"=LºdnH2ÈG9¤à/mòGÈ—ì‘ÄcÏ¯’ð5È±Ö•É$ck»•¦l¶d"K©(ÎZníyÓ]Kô‡%wknn(»Ú|Quõ)ãD6š§X©êVì­Á–Å”K^0W€µï¥ÀRÂmˆ„‘cëEÎ‡õwZ[úö\(8Ûn¿d·]3xÏìñNÍ„ù[ZóxíW&näýoþÎ·ÔCªíæMØôÑ\Ë­¬ðY™¢H_AT¤ŠõÄ³Ú³vhœÙ){ÓãZœíŸ çtÆcù¥•.Ájùyä…Šäó¹ìØ3°GMZÿµw~þíGï“,â£Úö&°¶Ñxˆ¸S;|j¦’×kûÎöÎÎviQA†µ0k…f4|LÓîdE¤Ž¼G8‹d °Öâói‡‡+a½ú‚A)ÿØ‹pq†Øa"vÏÎ—l3´ª ÍëY?ñžö©‹ÌÜ$rÓ’<7ßR3:Î‚dë™Î-Œ†‘¬™i®Ÿ—N6¬Íjw=-õß¯ë*ÞÇXÛòIUkLÂVnÿ‚S‰Ö"EŠ)R¤H?*ýä‹jVÏ<U%ÑúãÍ„ìÿI=äâ¢j!ÿ+ö3²“	f­}Õ—èíÅiKœ{ó«ÝDµq€DkgØk¯¡k>°YbÙ<hã’wa´X+\H%²¹™™t×ù.Ñj¨åŒW­õ¡¾Íh‚5è‚5Ïæ1bì³¤Ê#ÓT.›Íæ0¸ú3€]Ö š¬µ´y;Œ´žìU"#3Ü6ÆÕ.3aŽ]‚ÿìîóç‹ý¼	qÿ	Š%Kj‰[ñì—™äZ¥²F¹c—¯‡ð_Ífµèƒ—³é„¬?Csß§2à³ð	Ï 2Fé#»†·êñúÖ~ã UFŽ¨Ø¯kO:šÁµÇµ£á`§µÍŒ+×,®ýâ#oü¼&bó€y=l ÓÄ†ò+SÖjc3Ž&Æ—<q¼çYoÝÓÍÅóP4özæÊ˜gÚÔÊsÈ†ŠÕŸM¤~…°~" ¿U¯ÚûZWMÚþôî"ðR{Ž6:ÆšÛê4ZmÒE¶ê¤ÁïÉj>;Ô8mè5 4¸…*)%¿òÄûœ‰i`V8ðÓ<B°&ÚòY,x]ô[Í|ÿÌKñü5ÁN½_KöþÉÐL7û´êI‡žyn¢=cË‰ŽÞ5÷ò"0Ö¾«µÛw÷ëƒüµ<€Õ<=ÍÁ¦ÀÕ 5p-jX‹ôÿØ;¿Ð¶®|ßœçË0¯ñCüVòdaSØ	™îCAÑ“j'à“‡y‘àPðÉ¥—œ;‰'µ‡2D)‰ã9Ó2u|#OckT»bâG‰
*ºÁz:
=çº˜3ÜÏw­½¼´‚Sæ9Ù_í?k¯½¥¸U	þôûû}WªT©R¥JõæÅŒxT³["
¹kr!Á5ôpñ¡1ÖîèHûZEQlÂFTÙ|Èõ#Ú~è®y{-äµ°yb“îYhÅ¼Ñïç+£…‰ùÙrkÂ›˜BB<Uau³åR-	Ö ³<^Ù¨ ˆ»&›|8Ð+W‹åÏW¹‹Ôj¦ç1Ï ¸2¬¦OË^Í\ ä(©^ ùLÉÿÚÝdÖ=ùçª«5ÿ¿ÏçX…{ªñÕŠá2§Ý?ßzE$Ÿè¾¢Fþ>]zMêÈñµ²û½Ìx¥ÞY©·Z,.ËÍ´[ýÎ8KCfßïƒjû&ÇgmÈé­Ó¾¶þ¹äq^C¦Mëe#÷Åi6BGîß‡ØÀ5í7†]6ŽÀšÄÐ 5œÐ¿ºuõXZ{V·0Ï¼Ô<Þü×ùÂ;Éê×¿b‡_}5UšÕo÷óó™éKÕˆÕ.xõ‹«4«jèóåmPm»·µ³÷ÝoáËÕ¿¹Ùï÷‡ÍÉöa{üiÇâR(•A†2BKÍ<Š…‘ýÎgsò ¦‡ïyºóhŒ½'YãLNW˜é*táØ\ÐC±—±È¬&î’l–¿ûxó¼¤¡M“dÞÑ#OŠ‰†ºÔ‚²Ïä†6Çj3*eäë·ºq"«]}…Õz„‹´Ûô«AkbµçÏ;:XãÀI•Íf­Æ.rûÙOR¥J•*UªT©Þ¸˜‘?9T³g´›àZâ¯Q
ÉÂcÏkwî k¢µ%ykJ!a5Ž…Ó#…éB´û¢¹Û³¸VC†¼f]A·²¡_Ÿ$æ­*sÓÕÄ)ž¶UÍÛ¤*•nUDvQÖ‘SàÖ(«¬‚Q¤’œÏ±Ø9$I’eeb),3 wGËš“ 5iÔž5+XË+r´Ø™·—vë…òSSØqBÄ;‹gÌóåQˆ¯~ÕÏx•‹¸x2£xˆàŠ1cA[	¼1}r!dp ›5Ô ±¬9gÙÚñÊo‡½f§Ýí\„tˆCTïZ«·½Üï±æZ¯u´OnâÁËŠ·ô­9Ðv¼†LœÿÏŸa°¡Ä`³5‘÷æŠ÷œÉf\6¨í>[ðo±£ôKvï½‰ÌÿO®¤o{»ÿÎÍ_þ’è» ¿ØÏÎÞ¯–àÁù{ÓÓÔ?þ‚°~‹jŸ‘+rYT[‡4é¾3®Ú;°vmffu£]GµÍz½yØ6âûÔB\ó¸6¥qr3¯‘CµP¾.|9²(-ðá†Ì5—Ãg-,“S’8j®M'Ê?\ÍhÞÃÆ´µàx1¡ŸiiN®Ôq˜ÕüØ³çd‰ÕìWÍÿj¿Ú•“Y¿;úW,¢C'ÑsYkÔ±Ö¬)»ÿ/iÃZªT©R¥J•ê¤µŸÚíþLÎˆ“[#[Z4zxçŽBF¤èlai)µ1þÄC.-.‘é¿«h¯y^“Á†®[bóÈ´…šáÅäô„îMLÌUIrŒÎTrÎhÞ(Ú–³"l˜`MRy,‚ã„kZ0-‚£ÊŒ´6–&Y^Ð$&Òâ%ÇerÔÌ›Ïä¹ñp15k¾Å	­¼ø+ŸyRŽ+É;#ZÖ 2aÍ¦/Ä½CöGàRD6¤¨Âg!Ïœøè“]5¶ÖÂ¸HÏg švÈ˜lÈKõÁ`Ðä	+ý[{{Ëb`íˆƒµØvúƒƒƒ¿bj_“ìGžÿû×°Ák [fôž±È³I›ŒD¿²ìöÎ,¶Dnðà·µÅ¬èRãCfù¦T;ºÏŒJ $K`+U„^5±Ú``Pms}%°ÑÞÎÖúÚžÔê«LOlóTK«5ÚÇ_lÓVBlÓ#ªÜŒ2Ÿé‹$°óvÄîŽ>WrøA7ÁîÄ\pDëK–Ýt@ŽÌYÈ“›¯ä(V³o³×ðS.ÒÝ‘\wX3Û1æ9>C“Ö¼_ÈLâLNó%Õ¤¯g5j½åžþæh®Lt¤m‹‹°IæZÝ†ŠÔØl»iÃZªT©R¥J•êÍŒù“‘…5>wÍÓÚ×TB*Åk-‘`­ÅD€oqañÑîbôdW°ö¢oqí^sÀæ‰MU‘Ò-¨í5âÞüEÖ[SHþL.¯Lqû&2Ÿ>}:ˆk³³t®±®Ú™<¦y‘Å¢	É/æóørð•VcS£‘a%±Ú”E<ç¬q]*r·²YXã.&OÚ…œ}”¨ÿqŒ£UÌ3VcLó‡%—E•SVé·:gÍ³aEQÅXiþ${÷ïÌ>dk¹iÏÚXH€íBÈºµÁ Ý´vövÖzƒFcÐÒ µ£ƒ£—{«å´mÒF¨ÜLx`c¹ìÏ>TAäÇÏžÙ6iæÒ¥	çŒRyï˜Úf§¼…,¼ +,p$„?&ÚaÝìÜì;_væ]4©ñ1„?úkL5C«ª]¿þT»l o2©!PMÚÁR[ov·öøÇ[ßÌX~h¯Õ'ý§çåO¡˜vòÎó¨æÞí *ü ÷”ÿ47«!ZôX—Ðccãì¡¯6äƒø‚-áÖ-äˆkƒ•Î\0å1Î9xfÀœ&‘ã¸`¤±ƒ5¿˜šc5·"öŒ3Ù¦oÜµ²hîYòYMú<ÉòìÓ:Ù4¦š^è\ìÔýjØu–ÀvÆki¸HªT©R¥J•ê¥µÿaXM¯Ö\ïÚ÷V»‰·öÝ!ÆÝywn)ZÊ°îqê^‹Z{íù.§Å;÷ý >6âSoÀ±YdóÐæÀ-åù™ùR9E9hÖhC»(X¼ÊÊ©dæ8—PÆ‹‡ò9÷¡ÒÈR1Ê›ô‘ÿL†\ÜÒƒ–Ö A&PäC2(«vr”¬T
e¬q¯WŽõh¹ŒíæÙK,Ç^¦ÒN«ùr™)O‚+xÎ®±ˆKæ»¸À1Híÿ»¡-¤7ÎÚEkYtÜ»Öí·‚µñAk›5¬Ö¡šÍžbüýƒÞáÁ‡Ë›«} MR–?ê_»ýÅU‰pØ®+s]!UðØd›ž¶È6wïÞÆ'&fÕWGÚàÈJ™.4ü6ÐM›yq‰¾úJ6šÅ;ƒiòÓÈ~Œ¦§YSíÖÿÅ
ÂS# òÙGØjWÝÂj}¡±"µµ­=(muukíÅúÚƒÎøa«3)5×š“A –“½åSC…iÎ¢³pÅ ¸™l:ˆmBVã¹o­yËŠá0%y;M²Sn`ÊòœK„×áfÇ¦œ.\c·\ÁéÂúi0²3Þ óvšÝ‘ïLcèËF=¿ŽÓ‰ˆÌ
|a¤ÚÕþéúÇ†Õ\	dõûÛËív¿Ö1°æ«5¬8[VÖš»»l?M‹ S¥J•*UªTopÌ²°¦³_uí{Ûný‰ÑC¬5ié7‰¹ö.{ÄjkQ”³¦;‹Qœû2êÝÅ.)|6òå	¼fÍ›G¶PWôòWÙ‹Óå\2T¤>Q¨6ËAÆÚ(*Úþµ
n›°+¦u3¢æ±\œÑ@‡Uâ?>Ð}€ëb>‡O&X+ã²žÄ…ãÓZ£Õ)€®Äž+Æ†ÃX¬Í´­%†Z¬!v¼%EÕ\9_åOQÏšU±”ØuÌéYÓJô¦Ã9n$CI”õ÷åùé#\ú¶¬vÄ‰ñØJ­;)µ{Ûýv{}k³Ýì´g®õéUër8Z>$òž.6ÑšD<¤¾7lúæ°±¾•øÞläˆ„Å&Íj&û{5²M
óQ±‚Ê˜mÿf­¶ûvU½ûçMqã¬ŽÐb’{ÿ6+ÒæÁ……$a&sîÜ™€ð Ä©¹úGÅŠ(ÿQ¿â¯¯!P­Õ²ÎÚÖêæÞÖƒöúúø8ýj,0×¬O6Wë“O7¯Àç:9Ú1œç=è% âïéàXÍ]K ¾$~ž™dÂíÁ:º³ØËC›Míg·Fœ6×‘±…0±#;­YŽ"6w—ÂIÍèŽU’éd’I[–Ð¨ö åÒ¼avdç«ù/6Ò•@Z/RkÛ/‘Ø¯êÇç¢5©aAÐ~›/ÒÄYÛMWXK•*UªT©R½ÑkÖ\ãâÚCŠÖÀ5ö‡
…DÏ¡5ÂFÞ;«¤‘/É‰ãH[f	“í”ô¤û¢ßïAkÒ«þš6Ol³Amâ6
sŠñžÖòÔåÓq\†´å°ÕDJ
ÍRo¨BÈó‚5ã­©!ïŒ‘øê<Ø†ËV&>ÎƒÕrÊÿ/’Djê€/J\(Á„¥8Ï3Ð™¨ðÂùk-Vö$éÿSøëœAq\¥
³ZV¥bFLM$ÞãÚªú`a^¨1ÉœýÊzZ´<
çÂE×BeKŒ™¦¶Nw»5h¯6ëMfê“ãC2FúþÑQ­{p4hÙðZ"ó»óç¦m0ø¹Ä›G6xMÈv—®Òq&3‘-DÑ½$åÿÞ<gè¿ 1«%–i+•X¬À¥ÿ)oÀc%µ¹ù¹hþ×ˆ	ô”A"Wp]Ÿ=³¤vùµªTÛìþ¹wÕ”-²³µ·czÖ67íæêzs²v¸Ù¬u µ Eß@Q8Ô½¦ýÇýÝ0(ƒ4£ mÍ=«ÝÏú·™±å2oÔ9öIÐ(QRähIŒ¡ÏAI{šÌ³dýêä_ÎhW¸NL3Ëj.Ìÿ–Òxˆ=hMsÆòNŸ ‘cÿé(3÷i?¼Kå£Gµ“—ÂYá­Õf:++B5§çkõ]õ©a«kÚÿì~’*UªT©R¥JõF—BúÆ5^È€šö]`M¯ºI…$²ÓÚ¬½÷žö8BqÌ®å×
Å‘S§>YëêÝÃG]Ø<¯…Àæ‰-d6écÀ-Ð³g4JÑ­49š#”ARù*,T0dð5ªERÆ(£mêB).ÃpIWšºÕ$…ùG1ß.BZ¹<× šxO®[‰a±Ì¼ƒúr€†ïñ@»)¦T‰“‡˜U_·@5Ë‚<i7™u.µ$†Gø¹üÙîÌ&™óñhÖéä‡¡†½5×³¦—ï—`5d«";ƒÞ Ùív›šúms£½½Ï’ÙýƒA»¿Í¬á²IÖz%_ß[¿Ï¯ÔI)+ÀvUE‘¿sÀæ‘^ûÅ§ŸþAÆÍ8½lÒš–¶ùx»gÛæææ*¯j^Xw/ÒBj£ØicT>ÎÒo²Ej¶ú‘üGÓâ4ª) Ò¢Úº`­»¾¿¿Ã`ooíA³v­ötugk³Ûi?¨?	²'!Ô‚|È“ãƒˆGä—TžKPÐ¢UØÁf.üMkþÆY3ìÅ>Ðo8J{Å.Œ_-iŽn!ì†uWÈùoÑ¾1fÄA3ö†s°ç²Ý¥‘O±cvW	©óÂÍoî:ÝD?Þ®Æß
ÕzËÛ½A­1Óq9Ïy5`í8´Z³¤Æ¹ÙüYÚ°–*UªT©R¥zKJ!µ#¥BÚ$ÿ]¯}]gÍ5¬=ÖT	­I_ÞY*,Äj2Ù
ÑHîÔ©¥w¿<â¥õæ‹f×8l-ÏkØ±	ÙBf³Ü¹yt{– ÛõÑ|•||M¡Ž%`­I)ªþÑÂf6‘WœÓ2Ê¦«]¸ÀCš+2«™RT(ƒYèBU­i6ÏŸ·cáÅYê^5Ÿ/—ÌÓ‚5q¼æU2‡8."Ã%±Ÿ&ùéh˜ÃV+X$ó°3£ ÖÃ2B-PìX;	Ü´d­MòB';5~õm®Önnv6ú/Ù×ïõÛƒ—/ö[‡DZXkQ¹f˜Hßš”|k°·¾5
‰€Ïÿù>x%ŸÍ$F‚jh»•¿¦3f1†iø(s:'e¦Íä'ÿúÐ'N{_Õüpí³ËÖT»=°®WmgkkBÛZ]gu5ÖÂîm­b£mÔ&ëíöjVðacÜÃ''74—G¦ànHnžË’¡C«à.4$(t´ÆÈ“ŸlÞrsiFæäÖÉ¶´„Wf™LÔeÚÓÌ-Œ2$Ó4›
Ìla¤Œ_ñš—æ‡Ée“4!ÒsNšýtwÇÎ$?©ïw+ˆO,ÌÎ›fµ×—@Ò®°š³ÕO:«™`NH¬¦MÆZÝÀšREÈÖ¨ý%eµT©R¥J•*Õ›Ok*…tîš”ÄŒ¨#Xãÿe×¿·±ÏYsMkd«ò½;ïÕ@¡bµ8‰ãÜµ_2ÿd÷ÑîÃ‘SO~xù²×{‰B`³Ä"ÌæõáÕcp»l©íÿ³½X6Ý_™b	x*3c¤šœ·UQ¥Êœ†åpÖ·s&›?_Œ»Ï²ÙjLÃlËæ>¸P-
ã¬U*%ÅŒ˜†7ÚÏ,êUeÙX»À-H-_š²8FÏÚ}—ºvØ¦õ ¼’
"‘`-¶Íkº…GFIµ£î/ºKjÈSYÖ‘Û	°v)<[[ƒÛ™àè¬5³Û!j~›í<`¶^«_ï/·µn½ÝÃm­ÕÚËl°ÚûHÔ³¶¨v¤¶UW›˜M(.["!›4>yr›?ü~]òÒ%7¸£ÿâS¤á¨‰Ó$,µË†Ô”)ªõ!5+Âæ²­÷zëMC>—8¶ûq$g)à® ÄBqv
Á,<7å5nÖÝª$‘†‚šá˜~'+ø3™³®CLÿ†ÈÒf0Ì—+òN‹cÜÂY†óÙýºÞ`7·‘ûæŽé‘'2«€Ý-_»iïj¬;Ù…ynLßüæÆÍjß¸l_yr»šcµ¢¡²!_mCÄ&5žÕ¤:z\§e­iE%d­™²ZªT©R¥J•ê­ÈðÿoÃjÈQ›‚!w‹Öþ²ËákÑÚ×õ¯“á¬–ù‹ÕÔ½¦C!9…¿ö0ZüòÔÒââ£—­_b¯l~éåÙ<´mÙvùÃkÿòñÌXf®X 51;7[‚ËÎŒ1…¸ª.ÌSIïY1Ž*¢"®‹pS¹ .RCY^aŽ´°å‹ ›Ü/6åýkHI)hF žmwÃ€‹A¿\b åªš•Ç#Ï_°xW5ñ$º¡î+ý8<^©áü6ÓX†` Œ}°ˆŠ%ŸžÝ¼±v”Y.òÑØƒÞæA-TÖÀZ2DµÞ ®s§Ýj5rÔn÷zÍ±Fëg­E.ÇþQ‹´‘}^/{Ûª‡l±þZ‚l¯:£žØŒ>&-òXÇÐvÅfGZ¿xû4Ñ¸úÜn}úé­+Â4<9YsWþÏõgï[Ns‰"Jê_µj}Gjhog]¾šˆmsugoPÛÜZý­¡&ýc>­±¸÷¾<l…šà¶4 Í½Â5}8/7rÜÜ]íá|5Âî<¿ùž5{ðS`—»£-7ã¦¹(~KnI¤¹rÇfìî³ì7ËÙ[ö0©ƒ›à(Ù'†Cû­²ÙÙ³ów¿ùÆA†¶šMôíj!«‰Ö–¶ò8
²þÜ,ªF$œVßUh¿ÕÄj¨ùÓŸ¤J•*UªT©R½E¥žÖ4nÚhlSùøû'uñkð;­k„ŒQ	§bË€¶SVgßÝí6ò¢û‚\H–ËnI±yd{ÚB¯d»vùòÆÊDöœñšî)³£°P½xë¬\]ÈdÇ +ã+ÀªV
8Ws…2s§5eÄ£q^¾™å1k’(,.~PµQÿÖˆQY¤+z,sy†ÄJÅd2àkºQ„Ä\ ¥.ù"“O‚Ë¦“J%'#Æ¬ÏÊû.„5¶ÕB·-D¹ÖÌÀì’NNÊò÷q#Z"zPg†19é]P¬ÕzÐ¹Ô„Õ0Ó6ë,’Ý´lÏ!°ÆÎ±¿|mC_Ø··“¨HÂG>“šG:p»~pcKÀ$Kô>º¼rý}Yi×$¢ºGzÔj"5ô ‰Õ\ý£Ÿk­M{$‹l5[½Úø«OÇQ§²²ªCk¶%M›à(ÐŠk<;)ÄV8…†°ÊÏÍ»v/ÿvg›¹±e dèæñ‰£g'W»(¨J˜)‰qDÆfÝ»Ó&$³cä`M—Ænóu‘’+n¬éŽ“gHï+NÍÌë°°pÿæw7uó˜Õ^“,âJ ¯ŠÕ¼­ÖPŒ‹Ÿ¶¬9‰Ó 5©Ž©Æ_Còú›Âµ¸–†ö§J•*UªT©Þ6Zã€4”þ,õ®ÕM0¤hM¨&XsÆÑïž«‘62Ëb9{síIs1Ž—F
^öúô£Ð¥ßþ{‡–Ø¤å€Ùd2H ¶Ë	Õ*(Ÿ«ÁœìX¡jZÒâ¹L6“1þf¹lNÅW­œÉFàTõ|± ^åé';­pî#²AÐ,÷a¦ji–v´øb)Žªå¼ñÊò±ÂúPž’Clý£Å6ÅèS.@|¹"ïæšK=¨œT²*ãóÅ¶(Ò´¯‘&©†–4°6¬iI;Ö¼Lžˆq@¼ü„unT	ÃmÔjÔ@òÕ4&'G-Àz³ÝÛ?ÚÔilÒð×à7 zËËxío&vÄ—E^½z34qÚ,µ}üógÞm{öLðö~¢ŸÃq×Á3i³âµ£4jš3Õ†Ê×ÖÅhŒ××^î¬)²YÛ4™ì|Ñ¤ÔsÇA†ñù^à\ ãd „»^A¯Ö?,Xt-`»Ö\à?rìc/’k]ùæ1ÒñµóÀ\EcR¹¡–3ó2Ÿ§©Æ\Œˆ¦y—†¬6´ë:I
ñ,çÖˆó746g&iÞZËÌ~óÅÒë»Õ†K oÕ$P:Á ±"yVKê9€h»&\Ä š9¤¬–*UªT©R¥z›J!ÿäe˜VƒÖš"¶Ç”BBluôD‚Ö¤Å%£³K++K¸k‘5œ£Hík²ÚN‰GrÑÈÒ‹f¼K1ä‹î>¬ö¢{ˆÓ®	Ùf}¶€Ø µB”ÍÚ¨!"Úã
ÙÌœÒ;Êç²ÙL%ÒJÔ2±(B,s*ÍÎÞŸ;W(j}æÊ™3§…h±’$‹&ûŸ&2fõ”…BE[n´x17ÊçT1Èr§IöG#NF‰E§
Ç©œJmVÉùX"¼‘kÍè(éÇbÏ—rXsUóÇAgú“«	 å_#Zˆkì©ˆ';YØdÖlóZÖœœü(kó³z.´¡ö Ý­O¶[Êé­v•sØ˜¹¶|t°Í7u{¦}ØïCmµÎjog‹o‹í¯ËÊôï›ïksuu0ìŠ~;¤ß}±}ôÑåßù2Isøè£Ÿ[}ô±.ØÄhÚÑå/à´ Ô<©	Õ€³Íµ=Ê4jµ½µîÚúƒf·ÉÒÉòƒ ÚÓÆÓWÛÐ|Èˆ¡4Rú±Õ¬l­":µ<–Ì¼rÓü”U8†HúÂÖìÚºð¸ä}–‡sÍrµŸLcÎYkC«¥Yfc¹;Þ­cÓ3¢57ëÿE1öŸeðä4™ÏLNgæeÓf¿úîîtv2ƒ§ ZXémµ0Yd¹·Ý’ðÚŠ•[	[¤ÆÆá1¤Öd«‰Ö°Õ°ýÓÖR¥J•*UªTo¡¹æ¥œv»äÚc-º†žX\{˜hIë®Áj¿Y:ûïï‘4ÂTc‹
#§$ýÅoõ%ò!	Øz=å*$’ÑË~¿õ£6›ã5p­~ætÑ;*F±š/]ÌWðÓÔ”vzt,¦aœQQ¹•yàüìB&“å]eîEÅ¤l1WŒóÄ²ærJ•,W,b7K™dD¥"ªÊXÃHÃd+G$EÚêF&Je°¬,XS±¤£µ¨8J'œÒ$/à©ùbH‘7D~˜ÄAÃ†ËÐPVÜ"ßïä¼3†…Âk]¶×Òš+ƒÔn.Nò×Yk½i,©8r¼Ýc•«~{r²ûbkç‹ñZÿè`§m¿¿Ñè¹ÿ²S[§KŒÎ"ùlðÚvo]ßÖ:$Õ×/ßãûâû›7F“êÈ/>»š,ÏöíåÏX£Í,Ô ”‰ÌdÃ]¾ü»‡Ì´Û¦EÍƒšäIVC›[ÀÚN,[g²A H³ÙŸéŒ×j3Wûh¨hc#´Ì¸ò˜ÆP¾—Á’	Wy‚Ž[Ó^*	ž	ÈF¼ÇßpÏšÇ1†¸¡ËÊg÷-böíp˜-ë”Y™˜~””:úªFÉšpºB&íqÒEú{t4ò–š3ÝƒSKœówïÎÝ¼ûÍìÜ<Ãï¾»{î+j'¡Zh«ÁjŸˆÕ’
È–Ä_]ÌÝ£E2û7k²Õ8<¬)íHÀšœµ”ÕR¥J•*UªToåÙV.’*!ñkú^RëšôPÀ¶H2$a#+¿YYZ"EKK…H¼V ošâ--ö÷÷{‡É‚Ù˜l/[Í®ý]…Ìæ×dk'ÖZãL1†cÔw	z’‹Kù‘Ó˜`„ëW/æòqÁ†â·.–ÊQ&sFQÿUøé¢]CrQÏËÒ“JÑlÒdWj¾¢,µ¬ÅEà-iw³ŒÅºjÕQôRFdÌ)·dŠ	®Ts)X3ñ&å‚bDEú¹qæH.¡ã®R­ÄJL‘øHtÖ8Ÿ+0>Q‚²PaòHiäŽØ\H+kú\êÈ^êöÛ3´_l­]«õö©<Ú>\Ûö·[;;µ¶Ò<öz ›Qk›ØÂýQßEûCöƒŽÙmÜÀ0W,ÉPºÊ(§+g¦Ý¾-L“,§IÔ‰Õ˜ì>¨=X_o®ŒwšëíZ³S«uÄ¾;¬ÑAMúCr´Yr
ˆ,Ph¾M¾Vº¯m(¾ß¿'\2ÛW9GË'¢arB“Ãw<³	åt‘š‡½[ˆçõ,Û%êzÂ(D5ÿÃ8ºÔŒ•æ9Ý¿k]´o¾›½ñ G5o«©[Í³šlöÃþJ¿W?öÕž?—¯&	Ö´KM¯GébØ©R¥J•*Uª·pìŸYNû¾qX3Ë®ýsMr¸†Ù­±ôÚÙ³Kp-Ã–‰
™é(Îd 4æFr´n™å³ø¡+Z“ZØk‡=k°I–Ù¶{CÄ¦ßü++·?iwjõ3ÿ¼„±FZÈH1¯èþ|lj	ãÓ°Úh\²«PÃ@0Î¹±ªm«Ž¯²ÃØÀs•¹_ž«äK Ê0¢ùg…jDûãž•Ëq¥ŠÊ1æ›4Jø#lg/”'áÉM©9Mªš€XXV*cî%Ó´°•Gù9U„imµ(‚\õÉä‘äÊMÄç2ç«qÉ³5¤7ý¬qe`-”o^³ø NYÆ`
—MN­†ÅïÇµÞÖúàZí°Õ§w­ß^ÝÍ–Û›k;[0´øŽ¤ÏûÛ ~ëk|i¦•­ïzÙ†¨mðÉnƒb.>æa3®Ø9H«ÚVyP“©í%Úáz½K1äæÓ§ã“ÕZ§ù ÙìÖˆtõ‡–”¼·e†^B
Ú@6ï½†ÄÆ'ø4>:˜ócŸ5â®¯„4üc@‘'(NÎó1!Cþš»iî¡¹N5F8h~J×’ÀÍfznèž/‡ô¬èë3 ±¾m¡&:szz~~ö»ï@3mš&@¾Õ|	¤oV¬õjí•ÆaÍÚ¢ºÕ:†Óê@[Ý’»æZÊj©R¥J•*Uª·”ÖB=òQ#ÿŸ½ó	m3Ûï~y÷¥ë;^X»!+ƒd0g‘7žâ•b
ÞK‚·Òîº„·­rI.Sª@Fö4¼v(BêŒ¤ûÄŠ_ì[u´ÐÅB0k'3´3ºéç{Îs|ôÐÌÐ}ÏWÏsžóœç<²çþÃŸû=¿ïùÉCl¬„üÑ™kFDô<Q˜ÿÍÕíÞ½{ù<g‰b³l)%²¸tóæA{ÿŠ @mvq9»Âe³;±]°Ê2š¦¼FDÜ¨ÕÍ÷KQcÔ—¯éÄ1‹E9]
ldkµF¶DàNNì³¼NºÇVUp´EÊ#‘‘ÚŽê­aý•‹vÕ!¬wGk9jõ5KcH)%¤*³¯ZY³MÞ~5ŠÊL*ÆlžÍ÷ÊY‹!<`–þH’‰»nC*‹LšÈÖ:sÌï­•×Ö„b&0ÅÂ¸iÔ´¾‚-K_¾lmçÃ—î‘ÍzoœH1þœ˜l››‚µ–†6vÿv4¹šÏfW½AgÔ˜•Ï7ï_YÙŸäÑ=uzÃÙØ¾ég‚µ×³î©eìétªb6IÿÎj[Ž™«¨Íž´Â3u„t¿ÿý|ní÷ßÌ 5g§¥Gw š&½îÿÛØh$‡©ï»G£F¿ïÖë ïÇ\¤5µœ>ÒgŠdŒ0?PYBYn£ñ¸æØÍg…ø×<€éMõ¥É!4™ÍÖt~é†‘Å1}\~ˆÇ-Æh\Éšl7uÝ$?Mçâ³­õvÏ²)JÛØÝ{to;ÿâÅöÆÃÍíB³?Ak(Cj@5»¶]™Ý{h¥ÿh‘™<ƒÕP[p¨bM‰ýf[µ†5Õ’F`µ       ÿµK!ÿ®]çB²Òì’k.jDQþ,†D«OV?=¬¥ÀV‚ÙòøiZ™Š”°±	[¾ûn¦Âµáðlÿí¥ñ×pÚ®’·ÓáÅtvEšÅ˜OæÏŸ“9Ð˜ÏÛ¥Rûÿ±7‹À±5:qE6_zP«×ó°œCÇ‹•òQ…8Æ2Õj·ïÄqÑì‡<EÀžæ!àê6Cµ’a¦2;²‰ÕRëÍnÍ¾é§Yt3ß²žÖ×øLW=&kæŽlÉ2ë4×Ê·hÅx6²X‘5ÇÌËDktSEkÜ¤÷î‚¦^6
Òßd‹Ö~¦ºí:¿¿@‹ÔÙÑ™–«éÝ£†ù”02á¯ñïÅh<?¾›&	#ï{¸Y½Ñnc:ÖØpºÿüBþó{Sw§Ú@ûdcC6í?¡6mœ)¹q"5*q›ûì÷sÝ™giÆKNó †¸t;Ø|§½¤?évÞûø¦sØîŽÃô–›èkêf·«þ lyÉÅ2Êjãe/?'û>§Ï¡q(kiÇµß|ŒdV–©ÜDjj·²‹ý¾Ø¾M'J»qoÑq Ìü$Ó‡ß76ÿîÞ.û\iÝÛ}ô´yï^óqsc¯Ižˆ$^Ë€Z†Ô<ªýâ
ÈKƒjÄö·[cÚÿýø{ÅŠ_F¤v&;­¯qU7°ZPPPPPPP0×XéaÁgIê®Alt¢píkâü¿†×¬}mYMÅk†Õ¾J@ST^Š‹‚µrñW`SûlÿÕÕÛ·7ýÝÏ~l Ûtru1}Õn·[gWÃ9Ñ%góÙdÜJ¾9öž4ú+,2,B;e˜mê´«ËÕˆÒºÅÊ^ía>ï©œx[/ŠµDñ6ZÏá¶	³XAYÛ¶´bRË'Ã·ÙÍS‘mjŒÙ[l3¼8n	,)Bcv6Õk†Ölˆ?#e~‘šµt÷€
ÎÞZ‰Uk+‘ùÑ²Ôªbü‹Âò#kùrÿt¸ 3duAz9#æOO+]êˆ¹q²OÑÆx<:Ú8ÄÔ7Žæ˜ífØŸ½{}+õ:ÑðòÝ»ËÙxwöþ=ÖÚóùaX^jaâ;‰Il6°í?·Úà5‘›G7Ö¸Î3#†‘c4zNK×>êôºÜqmÜéžv„Œ¶Ç ßhç›>åjãþ(«%*:ò%9“¸LYHzôóvý­—óÆh\«'¿KÛ‚GçH™«½[HÌf“p ¨)¢ïƒEL‰šËhLKÕv]Žd¡zs=ËÖ³Ñw7>lÄë«½½‡Û›ž>mn>Ü{ü¯÷üéñ½‡°Ø£½Çî=~úñSÙjÎQËzjÎTû ªelµ×høúÒêbÖnOÆÈD‹ÈY³	|NúÊë?¤j\P#°ZPPPPPPP0×2uk.síô#R’ÿË¶XZÕ¾ß7{¯}jrüHÕ¾ýv	gLHBüé-ÇåO>‰qÛ>*®îw3ÞOX™ì·ÚÊ^MÞ&kùv’ßkíöw/OÆ_Ÿ¼<¨V+%›÷Q~`¶r9Ê¯ˆÝšu5Úl>¨;éêÆJ¹DK0s¦žlýŽvM»sË,wŸ}BYT"Èÿ¶ÒöíX•¹ÇLw Ùû8»Í›¢1™xz¨ÇEEBò²¹jK ®[z-®\«Õª+Q.ÆÉÛ nÅŒã2 ™-î¬æú)«yXã,øµ’<7'ÝeiÍ¶ÞPCvDP†ÒHl
¤&ÓÕ•‹@áˆ»m®óîÛg;ãÉÕ7óÙtL¿¿`$¥(Ïwdû†ï/†ÓwpÃÓcV²žöçÕ€¹×S(+ÍŒ½¬žw§¶T¬uÔ¥×»²÷¯‘fMy×ûiÚNíÉIc‰c2twzÇ½ŽÞ`œ´Rrjtf³Do˜ÑÉÀÚŽ³lÌ>rdåï8}¤†ƒµTnŠ&Ùž›%Ù[ÊÁÅMuèæhÑN´-J‘.+ËZ^_øMÙ|Å™£9×gÜfùsñï»ùÒµ©æb%Õ¨Ýl>ºš°tFöøhæO½X¨QËZjÌÎšjÔªeP-c«d¨Ï&W£qëdŒþ@±Ùi6	’H	Jó‚ÕþüÏ‚‚‚‚‚‚‚‚‚¹&9[ÍâÚµlÿ±×^Z^{™î”Üækò×JÚ*;&R{¯}´ÑYZ/Æ¨Xä\/@kâ²R>™âäœ½šÎ÷ÛÓ«äjöv>:;X²ÿuýåÉ×QµßmåðÒ0ÖÀ.Nâ8J•JµÞ„Õ"Bð+Í=ÁZ©$†©>ØŠ@”¨l¶AƒÊâ%vÉÞ•ÁuZÅ¸œ‹Á¾•ò“Ù_®({Ÿ_I¦\í×¿ù5h¦Í¯Wâh­$X[çåšL¼¶vclè­¬ê3æÕ@4tJÛúKµZâXá¡±}»×{Tô•ñè¬V¢j¼Æ–j)q8¹.„†¬¿¦V×©-DAšéžÊ4‚6æÆÉÂÚ&%kÀš•îùs~ªÃ­Býqkg›Ø~œµù”BB–>Î§§ç&Ð“@ÿo.HˆÔÜïßc¼á¼FçïHÔ*Öéôü¸‹6dÊq*8›îá¶›[’cTí¯ZHSƒ„htl÷¸7½ÙN(§kì6@]§ßït©\KØûÈõfó¾‡ ÏA7®‚5Ë%ŽÇÏÉ³šÿžÔùr~XÚqy\Ý|ÿóí¸{êæ8,rT©Ë":Ú«ÝíÈ ¥ë ¿ô`…4ŽÏäŽ8F×Ô·Œ¦º:XsW=w¿ðæ&^Äx_O­,™¥WÚôöC æHÍ›jŸ9Tûp¤`mž$Ô«íï³rì`³}&aª%È[È	






ò•kÿª-ÊÁšô#È¯lûè»,®Ù–­²±Ñ¨]3Qþ‘±ØbÄ yQq‰gûm`-WÚŸ¼¾m'Òpøv2c	äþ~û ªï''õ¨^ÆýÜrTÓÐ²˜|µRßb˜Š¥Í:IþkÕØ‘oÖn‘ëÿ°)4Šø8™tp©xçöõ¢"Iò¥"{gS×VSJ$¡s«<A²Ò¢Js%Ò*Èõ8‚òT}&ZÛ£ÕÄ_jÓµ­\Ä@ºÄ±œ:xÚ!À$S"Ø/ªÐ¬äã2ÜÉ‚ã[kUHTÀäðÌ]ÒŽsÌh¹pe–@î|Ö8 5I³»ÙFx¶¹mqcamWß³½y¤LÀM môúý|Ü˜/§mòFfÏ)dK’wï/Gýçï§½éÅù)°†ŸF™á|t«½žwS‚GŽ;ãäøÒºcœjLÚ'Ã2IÍÕƒg·ç(}ó¸×ÖºÝÁáhp|<hÀeÝÞ$y³q48ï&þS3Ò:ÈÃFß¯CÜñœ†D[ÞÂ¢±ˆ”¡µìšG7_¢¿â™Êï–í`Í;gþ5Óõ!Ýwøsó¥l\$gŠ`_úÍ×¼æaÍU¨‰ÈRKÍE@f[{¸/ò°–ÒÚWJyüÝïI¥§NŽÑè ,¦jÞRs¤æÖ?fQÍ±ÚÔ²ºP½ê¬=vâ¿ð–Ó8ðÕ¬%‰’EäêKÙ¤²ýBH¯®‰Ø5«YZk¿´µk–Ö‡´i#ÄC~úéê*ÆÚÁ½µk‚6`-«o4‘ðlÿxi™ˆÿVòª}sv›L^%³$pg«åýäûƒ<o,ç ¤FxR¯(X±¤Ú³b­ª|‘\¥^¸¥mÝùd*–£\9—¯×+Y”¯7+,H,¯	ÉG‘®Ç[º½ý—·«¥R!A]8nËsÃÌåe.‘~î
™%`ƒwjÍR‰9š@UÛ:î[ž“†ú~á¸bŒ[«W«9QWéFÌæØ9b%õ„m²t´ÖK>aéGk’ÏyXÓ˜î5Î”Éô\ƒFšª¾n­³¶)cM« ÓÝ¤æÃÊÓFÓéÕÑ®2G^
­ÍÑpvÔ˜]^f§CRF.´ rx:×ælóž™6=ŸŒ“S$Î­1v|~™Šuôµ¾QOðÞ¬†ö£é”¥u¹«i7I ¶Þ„8ÅŽt(­;LÞ$möñ>“Ñ¤sHµÚ›tG3© Ž—ã!g™ùeŒYkí¿/‹ôuf\¬ÒqWr[œãÃüÍ€éBL™=§m‹ü2J7®©N~ÌÇHºl‘#>ê¹ÅºqÆ=‡nt¦òñ‘nˆ¨Ë¯þ†ãw’Ã5l^žÓ² –%µ_@µ×f¯ùjCXmšÌçžÕÚÈùjg'Èùj‚5µÉ«¿¬ÄZHc®Y_íßÕJºÂjHI#6Èßfù#VC*R'Y#Xl«ŸBllÀ“Åxlfß5L5Q[ü‘Œ6Ä ÕlË¦ßŠ—èÞ8¸ùÇödÒÎç’³òÒB¿Ý‚F67W–s€™'c­U£<c¹²VDæ±®ªkkÍfí¢®7¬È§†”öXà‡ÙHHW¶P15÷j•umÂÆ¸^Ñ]	¶<¨U:\±åxÝ˜c©Ø½­‰E|g©b­3]*"ÉÒJT³÷xh‘ì3`Íie~_CaZÊ)ÿM)$¶0ÍÂ˜X.‡•ðŠÖlZÓÅö†ùÇÖüÐÂd£µÒû4!Ò-–ÜÜfÔcÉx4¿šõY‰Õ¹;š])Å´»1gêé;p¬×gÏYÐöþÝåé¤?d{cÅ8êq"ÍV2ÉºCÒ¥A±‹KàÌàÛ´Ë­¤öRÃi—ÓÃ>+»Ç3‚C“qïôtÐ™0ÔzÇo¶G»ýäYa»OØÿBÞßøâ´‚ß»Ùñ;Ñ Ïs©éåoÔ¹Ù~ñc&Ä4Ync‚£ÀwÎ§EªJÉÏÎ÷°'Ù!.R#^¦ï-Ádé²Œw|vˆÓùoH]kGbµøê«{_\×ÄkNOÓGÓà4jYRûìçPíµ«U»är5›&­qªö³gm«“3‚ Ñµ¯f8ÁjÿçÏ‚‚‚‚‚‚‚‚‚ÌZÈ…d°q:XsY#ébHÑÚ™híz§l·"ò@zbÎOÑ·(™El»—ÑÆHCê.p[n­ß,í·[yhí~qiy¹5.äÒµBAÛª­¬1—°Ç‡õz³^Ž—s¬*¬2D•Z³ž/íÕÖ· ±­8R0£¶Ð®‘˜¬w¥õ;Ê¢Ry­Wööj\X¹Ôªà‘èêÁb¡V¬½ÄXÛ (ëíQ8ÇËœ|²*“LÚ£UÌÖxV^|üâÖ­¿ú¸ÊoP,®c²åªt£49DÀN–
Óèˆ(ó÷|Îˆ™¬¹9ºø¹†Õ|ÑZA¬©qCpZjÀ9¼ƒ€u˜>·;;›îo}9AG”®	Ö#R•é?‘æ1;Äg‘Ù¸šÎ¯¦CÖB•»<½è6f§Ü_Â^œªLÂ‚ëNù}ÈÍ¹tA÷ûÌ.y¤u¼=Î7ŽºÝ·ÝédFLhÑuFï˜JµÆöö„Êµv”lŒŽ:Ú[WqšËBêí\“’õ	!æì'Ÿ	b¯,çkÖ¶½Òž¯ïÉÎ¿o´ÈjÙ] PÏìˆ*+¾Â;k®4M³|ŽˆcBGj<¤¡ËÙ/a. n]ž×<²y=Ó>jžÔœ©–E5XÍT+ZT3´6mO†ÉØkÏÚòÖú
ëÇWc—µa¬I2×«eƒF 4>ºè¤AêùÊ5l'×Qþß™lH»$Òà2°öé§ÿ„¹&LƒÚhcÉ@Z\\2GS¯~‹Uæ+³÷õÙ Ü@I†Ø(zƒgôX'6Tq½ÀqÃC^yÈX%^‚»ÖËü ,0@Š‚¶ZM¸ó°z‡e·îàgÕ«òÖî@rølÅ27¸`¼VÃZ+X{æ>FŠw$Ý¿ËËqÒHt ?Íd—(RÞÜz…Zºüeûë[OŸ¾xü¸¶õ›ùÊÈµ•KÖôËEQ=Ê¹ È”Ë¬Ô—v²é";\Óç|$º×Òsµ~lÌh‘ÂI×ÂKíÆkVŒno"‹{vGó†à­Øßnôµ‹^~ñüow‰ÒD®k³Æt˜t	õœ<‡Ê 5[{vIþH£OÌþ”º7Nùgð›XJcŽ=µ;uæ½ÁôtvÅZ¹þ`0iôÇÞi7QAZ{pÚÞFd:|Z`5J(J‹¬eäÍŽz¹ª0{I'èše7wKÇÝ£EÜCn†Ý[‚’|U›+Rs<§¾¿¸¾éÊ!siÀ’[:vmí1èeqÍÁúÔ‘þášç5éÑ‡¥GŽÓ<¨eHÍlmQíï=ªR3Ô¿ëÒ0IæãvÒþƒµÕ¼±&WMÖopñÒf!2(((((((eÍ5Ïj´ÞZ“^ñÿ€“ä½†üNÙ6qDÜÆrHÁÚ“U–Dª€lH,¶Rþ&ŠŒ,²	ÓªU.õzõWe† ­Š\.®WJ¤ìÃcÐX^y%L7]ní“‹l¹–ÆÞ—Xù0Ïìel3™YJð W«5m®¾v‹h`­Ò¬UDkwTkvk½D=Y­å˜_Âv•ÚL´–Ò 5u—rÄðSˆ†Ø-»±?À#&ÜŸ	Êá"vÒ©ð©}ü¯%X‹£åõevÑ`ÆÂM¶v[[ó«:=¬¡4»§K]çˆYZssÕÍ†ŒøkVZæh:Yg 3:©Vlìˆ“èÇÑl–¼+:jôA·é`„åÕØwÎ‡óþDÛšw“ùå¬ºgÃ«)TÖëw(6‚os'SBþ»çÆR£ç$Z«^§k®Çì¶¯³iöôt:=îv’(Û7½ÑXQ(ãÞÛgFÆ~¹£ÄNß¥<(í¤¦š'8=ä³ÉÇ¥05ƒl® Í<ÉÐ™m¹ç"™×ýËï`MZ„ÀôyÁ¨ÖÌõ.œ¥'sKûXóÐÆÉ+º¤I$Gn‚m·ÔÑŠ×lP¤ûÙz_?ØÊòÀæô(ý8e8Íš#5oªjÙÈéÔ.€¤ŽZã¾âúÿ°ªqXñÕNÔàJºˆ…µÙôÁï©™ëÜK?½:{u¦×k×l/aµ—Xlöƒ·†®ã!¥è@‰!òÖ 2Ž8^íÃ_ŒFÕ"Á Â±ø£ŠKœq”[^ŽTÉU¢ +¢È‹7ÊZÿÞ•e×Qêµ–#+²ZÇZ‹ˆ‹ÔîkE *†žDkÍ’¡ŸBíÎºÉq„ÅàµY#ÐZÑäUÖyA%hõ:$Ï®i ¬S®†y'n´= Ì½_.ó¬žÖx’Âšâ!¹+Ö~ýbKÖ¤F„ço€?`M¹#âÐ5FVˆGáê2mÏùbŽÈt¡oœÙGtümz±ÚŸ‘êÓ²p·#8KÃFt
Ö8S«zHµÍ XzôG^oÐï1Gð»&£ÖN2•“6HŽ‡”‘MmÜÈU£ÓM§ÝÞ©Ì¶’žc¶‹ÓæSk¢:d£ßíºÝQ§Kòã$9e+59D´È$é“}rÔh@!;…ÝÆØ‚­[AXp¼¦[‹?><ŸÉŽÖ4ÝQ“U
L‹cwüÏp°EëQNã¶ïaÌ}¡èƒñ¹^'EúÀÿ[ZªM9Þ2N_8æmps‘öbY-q¨iß4$-&úïsÿ2‰ÖÔx^sÀ±í9>Ûãø›tÕ#˜&NË‚Úg‹¤fQí÷ó¹GµÙL™"Òšþx¬!8M¨öÌ°š”Xq=ÑŒ§Æ%Ä@}0Åß‘š¹pC“*Ñ©õ?üøÃ5®k
á”·ö5­"S=Á]ã(Ák& 2^RööÙ2°VŒ‹"m©\çÖ 5¸§XÓX]ÊÃfÕ¢Rüh;,7EB®¯WxŒ±¶¤õŠˆ1¥4ãf³dÀ'ÞªñQ"~_ÐV‰×o)nŸïm6ËÕZU+%›õ,Šøi0£2DX7¹¥ÍÝØ Âr3¡þÚk›…’5qWY#n¯ì
Ï+¥&ÏkFÚ—ê7@%o4‚¡VŠØé»²f4º½±eÔ–Í–2—ƒ5‰aG^<ðr7U_‰VÝô[µfþ7WèÔ`3MåùÔ(2ƒVoIg2ÞH’B{’ÆñÎœ­Ï»£q§»½3¿¼ÀjNÇ…I§Ý˜M³‹i»Ð˜a­÷z@`×ØíwÅg½·]JÒ:Ýü—tä¡µ·Û]ðl<&¯¿ÛŸNÏ»ƒDù€»ýùˆ½À®“ðMÃm
S-®ÿ¢F£‰|~ãŽç2d)6q¸INËRjs…n¾bÍè”!sõ°·ÀM"1gây\ÓH:QÓœ¾t3IiÀ5´È¥Œ¤üi§¸ÇJ P.œ¦y
´ÿ`_~±ËYy`±Ip‡”^Ërš@ÍYjRÕÐÜ¡š|µ$`›Ž&£ñ8IYÍÐšG5Øì,á cX-(((((((ègÌ54ÂáÄ­”œXX3öÚò×\˜¿_É'­_ûîàkÑÚÍÕÕ'«tˆôÿVÐ5‚£š™¨‘|ÌUVW¾d nyY‹ð	ÌBÚüº\Ä8Ó“°»w¯ ¬•Ùe»\m6£åå¥5yO<]üaÝÕ›Õè<’ª†íÊÄC¢be¯V&­¿¾·§&³Á66É.Ö¨]Ë"*U¶nßYZÎá míih¦XU»=ˆrpS­Âû2ì*ZYß{@mÏkèéÇQõE}e¾•_ö$Ë²d=2¤+½Ÿc5c»Vs&œ%ÒB Ö‡–>"Gt ših¥s«%j~ÜzlTw¡|Mz®h={V(´
…q»UØäÏîK•±Iu¯-I†óíñÕ¼0ŸN
Û£óÓÉ„½Ù!!ò|4œö0Ó&£~ÇÂZ2"î¯aþbïz½]m±ÕéQ™Ö~;H¶ûýÉ„ÇfÆdìóñm‚ˆñ½œ¥†xÊ¨ZäaÍË=óLEƒŽìhÖË~Ü8=ßát\¦;Ÿ_’Yå¸€hžµtÒñó2¨æÑL÷ÛlTúP¯9ÃÍDÚÙ:ü7z¹‚6NÖ—_|A‹<°Al)²q8ÑgHâ¹ç4@-KjÈ’¦Ú7¯‘JM°ˆ\µÆXzfIMê«Q¨¬– W´?$¯œBdPPPPPPPÐ/¬…ü¹j™ê55F?qžQÁ&{í§3tröò^û1…5´ou Øœˆõ7R¢¿Ým-¼k°fGrKê¹˜ç¾Ž 8sÉk€0ù¨LÕñØâ2 Ä*ÊeVL2·¤ðÆ|žI,ºÌãÇµZ+7JšLªÉÿ½µWù¶VÛk–î¶š{{>ÖØˆÕ‘Èåôçn¬QOGjd1ªã™í!.P™¬5.%MZfkm8/ëôjÍmVå¶æSYy±'rÊ¯­QæV¬ÅørŽ¾RVÓUwÖ6Ed¾oç9XÃXb1ãÃòÉýê4Y°vy›°š‹îOaM7qÝØDÖÁÒ¸â‰´Ùoô™‡ÁÖ×óÆq§¼M&³é¬ßMºÝé|Ò9î=k‘ yaÔ=l'oó)¡ídˆ$¬x´…þ¸ Å‹cö	ô)OÃ¬;¢Bm’»Æ@Ú›mýƒfcÁZ¦˜ÌMj°Ñçž„dRÙj6ˆ)nö"Í8VËò]oŒwf»îš2•ÿ]x¹ê8w“•g8nyˆó´|ÉsÎ7þ==³?z±ÚÍoLóc»Ë}!P3»¢ýö³ßþÝoÕwÄæ˜Í+ÓcÇiÔ¼§†Djn_5¤DPšá”wväÔ€è"5švÁNãúÏ\™Ãjÿ?Ä@ýbéÚ«4ÒtÒ“\K8ùƒš“t»ì?r° ²m¬µ—ß¿TB¤GÒ<ÿU`M‡:‘EF±uÚ––¾èX‹—b¬¶5úÎR+Å¥¦ÊÒ–ó˜CKc­”ˆ&"¶õu`-ŽêªˆÓ©°ÿÔîÞ]¹y÷îÁA³~Pûüóû÷(L» ¬±3÷ýÏk œf`íó[¬Td¿hÑn}²nâ÷ë{ÍÚ-Tã;É'‰„M1åkê*CÛÚ{Ød˜ÂšóÖp×³2²Ê$CcQ´Vª—Ô—¸Z3ÈW­pË¸ P’O±39‘!9†iÜþØNôh<­ÙVßÌd3/Å@žÑh¢ã4'S½†¸ g­ÑA¼}Ôè3T*pÆ£öN«ÝžP›4Úl³[ÚlÂ~y Òf>›£ãNƒ‘~c4›_7ît@³1h¯q¿ÝO¡þ˜¯ö¦˜x	ët\;_jRV3b¢‡-ÏMzSe*uœ,7„2¬ö/þÖ(»1šñ°æ	Kcj²YŒ~
§{#ë¥y
Õ³Ö\‚?}ÿ»dGºËÔg§áÆ­“¤“a5ÓÝøâ·ÿ&ä{©u&›— ÍžCŸ¥œæ@-»úÑ€š€Î¦¢µá+!µ“úU[œ–ñÕNÈi«JMz%¹®¢E«ýJ×©Ù;g®á­¹­×NN€5$Zk·_¶³þš˜í;é/lKUZ]£UXm9§Ô‘Ôkc×5–F.¯™‘H@U	vÄ”Ñå¬@–•‰#Uœµ1ÆÚz’5L¶:Q9f%Ê·ZwoBjwî@i÷ÿéóû­Öjiô ~ÿþ}`íóûÍÚýŠMÌ>Uq²ìÖµC¶*×ÊµfEi’ë|5'‚5PŽ¢6ÊÝJµ5öË`hÍ›k¼x¡·:h²úrl¾æ•²ÓµÓæâk"5=p2Oq&ù²5]Ü@Có¬¤Ù‡ŽåªIº˜®^v[h§ü¦“Ö²›<6u7- ¶ì=ÚÐ8ÚÛd’´!®©,¥Ô
½Q¯yF¹ñÿ“A§l¤Ý­Ç–8¿â7iû»)µ,)BYÂ2®ü`‡¾n9ô%º›Y²°V0m;­msgž:˜ÒÅWy63âYoüI¯tÊ¢kæ¾Ù'„|‘uÐ\ºãyoÍßøG~<c¢¹{_gó"­-®åÌÂšhíß]GG0[ªÏ³Y§ÍžÖKÓ²œæ@íC¤¨MqÕ¦3(f›$W³q>Öt8Aj'‰>g|<«I!2(((((((è‚k°Ù5¦]£J~Ø~€Ö¤3±š“Ý~‡Ö¬†\›/Éi‹nÞÄj+ä°Ùk"´ÈµkˆVy‘1©äûWK¤-û½În,/kïêx¹\i2£D¡\GJ>!7VWWoòs™Ý½É¼ÿä õ6cŒñqë.í“&¬ÆY»ßlP·•kCVUÚG\Ô¢#Ó«¸~‡ˆHFó‚5ÖC>¨•Iõg*…=]ð¹§5"FlŠÿï‹EU!¥…5²+xò¨&€S†¥F%yn:´åií:–ßõInª¤/2,foØe-}K¸¥C|‡h,;Ò—ÄHòÈŒ‡f¦>ØÔlë˜oÌ7˜Êb9`÷`‚£Q¿Œf“ÛVÿXK’Í™"zƒ×€5°o×ÂšÄwppªc—ºˆJégó3ÍË.Ó‘ßš‡`È…è{§ŒWõÉö)zq ¤¹f33˜…7æ ?Æý5¬	ŒôP¤÷|œc6$…µ£,¯iÔ÷y×Íõ”f¾ß˜?Jáœ£¦IŽÖÌƒEZK#X­ýµ–Ñg÷Ùg4/&ÁiÎPs æIYRCPš8f:›=Ï†U«¹P‘¾%5'žÎ¬ÔUÊÕ‚‚þ‹½ó	ëÊÒø@¯‡&k/¬­W‚*ƒ1¥MõNÓ«B›ÙÄÂ[	¼òdè8tJ4=XZ´þ´ÉBxQ“@¹Zc‚#aPiÈ[T×àEjW^x"ëù}çÜS·&LOw2«ûÕ»ÿÎ½ïUeá ß}çý¥îZœ‘°ÆØ®`5es‹t#\7ášé­eé=6x	Ýö×ØîßÕ`ÙORÓÆÈ%?ÿZÕ7p×V77VIÙRò§5£šËKËdì³ØÚHÖGâ«\å‚õL³ûN‡°Ú‘ÁÚ}úGÀš‚`Ú£½}n?^ïwqÚØÐØ]×Û›Ú¹ññ¦8mSú¸³úXm.¿nXãm\8~éMHÂ`‰ÏÃ[Ë{!)ZŠ7Ôt¶À|éèåÌ%¸ Ùî¶Í²óGâH2{!ñ[8fF[!MZØ‚Â)äÉFÚôm–i=;$g•ÃËƒÖ˜}fqc&ýd™lš“xX…e–øŽIÔÖ»fÜ^Ùçãîr$(q34 ä*d(Óè'‘"1æ¹j²O&Jt@ST÷¬‰ùZ«›éžà.ÆÁj²›Yl¤AýP¶ÀË	-gçOí¼aGŸ^@£Ë»\5â"¼KƒÕ¦£¯5suÙI«Öbg@×~{}èŸmÛ¼çaVf?PË¤–ßST#ùãˆÊ4>>¾á}µº«vf¨††rÖê°†~(¯«ýeúû÷Þ
Ð‚Öê‚×„lüÉu&\¦Ájg¾!o­ŸDòÁYK¬–amï¶½ÇæéWÀœvìŸ¥/t ^™8MeÙ`íî-ÕÂ¸Öbc©µ³³Óíözwoß½í­>úãmg5ƒµûuNOÿ¼'—èŽ*ÿ	ÀÛ¿€k§ëÕÖ:‹wºh}}ÿ «·ã8º$ÿ›8hJ y€ö>iDö768¹Û’øó¢š¸«±³ÙÙÖ®Å‹kY›‹–ÒQg,Ù–Hƒ°†¥1X[ç íQ‘Ë?‹ˆÙlÄ©M1=Åâ±Z‹E:‘3àòDýjÅj´~¾–ˆ¢¾nÍÙLµÁšÏ	·ŒÓÚÂKÍj‚i½áÕ€I­—M†š½¾Rˆ ,¯ôÄ8Â¸A›ÖXÉnAæÌŠiA0ˆH‘3’ƒkæ|1Û%éxÄsNòb5ÿÌŸ4Ã®1ÐPmøm3rb6±]zp<NfÂYS89Õ~mvâ¢rh“ÞÍ+’ß¶KßžaF!}ÊwP«PSÈÉ‡Ún2ù¯ž{´?@Ã“‡Ì>&£·p
¥¦eNPC9OÿC5ÁÚxìÙE®ûÏŸ'X-^S³vvNÃeAj!ËÈ¢¢¢¢¢¢¢¢ÿ®«!Zªz¯õîš^<Õ(ðE:å'f»»F	o-9m~töí½=3Ö~µ‡ù…‚Þz”»\òÙ¾ø‚MLI­o¼1N<¶¾î‹	
Àþ(&;:Ý;=:rXcÙ¬öXÛÛ;”Ív(ZÛ{DäŸ‰W[<¬É]Û?Øßh-¼ßY^þõ?òÙÔqi{7n¬v6ZîN³uøæªÀ«±,þª›kØþÔµ}„K«KaŸ!Á#§%<ÄÆ­E™IB³ùcÓbK$AkgY"qæ|LëH§}5ËôæÖ-°æ(f×Fa©Î±L‘xkLƒkê
Ö4—ˆí}„Wæ|±Œ¡èJ³H7›¯ur«4ÝNàF¡ÅmIÀæ4(„¨úò’H©Q 2H§È ÅX$ŸBí³Ù£
’cyR[cÓ	O-ï3¬3wfÀc*!ã¬Q×ó† zuÔS¬õ®ÎâWøÈ†2ábˆèp\S˜JÁÄŸŒóÓÖ¶a0•¼H€[ML$=©ùiá¨¡ 5¡ÚøB Ç×Õ5È6á8½çÏ+4P^‘íìŸÑÂik9·ˆÊWï[­¨¨¨¨¨¨¨èÿŽk/GoG/ß¾”ÞF–H.$s½Ö~`3¤h-ô
9°Akðš,6`ÍµG¹-FµÝÞÓlB±€5éW„TÜÙÜƒëj¦yŒõÆïòÏzíÞÝãûÂ»Þ~k{§§Ç‡Á‡§§ÐÛž®Þ!°Vk,#ódwÚíU ßä«kûÄÆÑÙÊÇVyna£Ûºwoùær§³ÄÐa²³¼ cÜºë[[$ÏZËæZ¢µÏ>î6QX“$À
XSbÿV·!çÌ`Í¸Ë•òóG’gšuœÊŠÅr…ÒúÈ9âA†ÆDo†fºQŠ|þ¤ÔÑ3’qÆQ…uÇ´APŽY‚²•¦šd<7ÃšÖÀ†fz´ÁŒÖv±Îó‰ðlëSÙÂ¥b9x…šÄ·‘Áœ;f*ºL$ïI4MÕHÙÞŠŽ(°v¶ÃšÏE	ÎËD¤$	ç^Åz3¬é7Xb\q¤v6îòfÍ¤H(B¥ Íè‰AjùŒ6ýîø²Ìpzþãííþ7=qHËvZ6ÔÜR›LÆÉR»ÀN»þ±ÑZu¸]O†ÕÓ§}X>3£þÀš¡tæ¬&(¨d)*******ú+qí%qñ	¯K};‰Ù!×¨Õ{•õ%%g	1àèì»FY¦k·5Ö3çŒÊWÑaR;êUiõc*Øï'u§|_I)÷N¿Üû³Híè¨"òü9·ßçž½GzR{½»^íwÁµÍ÷–;÷–oµ8Îmy¹³y¯Óå0µ÷V;Øl]´ÔùugU.ØVìÚúý»¸ö™ËqZ»³ºšL|ßprœº;¤DÙØé6„hælÑAž‚Ÿ‰¯¤¶)m€D‰7ØÃci¬›m=§/&#× ™ñRš†t‚=Í#t%Òò|³4¦á^W©ZqÂsŸ­Zëõ”ä_¨xž=Ž©øjÅ‘L» 3±™Õ„„i¾Û’O¦ÜûÍ¦c"­ÉnÅeC'5¿‹½¼Òd´¦:¾4œ5g"ub¡ªX ñ<.EsÆC–V”(î¦åÔ”ù´PðWŽÒà–ÅVLDÍ{z±ÛS¬¦õš¥YÏñ¯‚,zb¬Œýç“Ó'º>	L«sšt‘=5ÒŠˆØÆÀuUÇÃ
=­õ3ªá¦YíŸP®«•Ì"EEEEEEEE®á¨™­Æe¦•¤nœeûý ¯ýpîùF2·±#Òý5Á—ã‹€´§à1'i‹º€¦]’uÑ¥	qÙqïKg5òMVÕá—§§GÂ´ËCDà²¢¦@pˆY¢Žp´„íÝï¡îqûtVã%9%š$é$Úé*ÇHwàjqJ@˜ãÞ£[^6jìlÙUNkÈæZðå`À[ ©,¯~Ú©ØZZÄ—Ûà=».Îš`M“"5­££*#ïx<`mËgÒÉm±0CjdA4öl"ám)¬Ëž­Dk4¯ÉöŠôþ„Xß7{Iª5'XÓLÏNeü÷SØk[&žl(Â	Ù½¸FX2PLï«ùJ‡ÖÂxñžXf{”(*F±Ð¨G£úéØÙU›[N,Q™iVA›Ñ‰l
ÆÚt»µ™e`4å¯¬‘c„UÕub1óÊ"Û‰|’àïÿËÀ,ˆÑñÂÔQÎx2zÆ”Û‰Ö‚Ëòg¦ßñ	HË˜–99¨±ûq<¹ø~r-[2©o|Ú7É[G-}§ªáË¿TKóË¿+********ú+OÉŽ3±Õ¸µæ²v¯y­-‘‚µ3ÕAkï*^a£$ià:6}ÍaˆKÁÞ!0'¸KøÆíhÔ¡ÚÇÐå¥¸°:ì_^öûUŸ	öA²BäVÏu±GéAÝãG`ï·D>ŽQãìíõ&	ývÅD«t6ZÍEÎí¾s“×ËZ;ûûë°š)üî^HPÍÊ§Œ[:`-àöÑÕhÜi-±A²Ñ0,“í¥¯øP»å“{pˆ
ÍbZìÎ $ïx:Ép1Ášhi^b´X‹B'§«™‡Åm\†XZ‹à1(Ê ò­4Ó£W,ª*OõHÑ2“öF¶‚Öü_èVÿö€5"5:£‡$3XË0ì¹°Y‡ž‹aˆQ8N3Ó*Oóx<#‘™‰XÐ`,¦˜¦x=#IVXrÑcQvðÎÞõÚ‚eœyœëä„‘º‘!RCQŒÞÈÅ F|üxKîÚ'¾Çqêl
F›@i†iÔÆ5G‚ÞÀj××£É÷œ…ýæb€£«9¢Y¡wF{&LšEæG^"–ƒ°‹ŠŠŠŠŠŠŠþ\ûeÞúh’É6#8Ô¼’Ëi-á´fõ9›+œ¶/ër‚ûí8±›×„é[Af\’–†^œÊYë›…GóJ5j¦Èìª;äïFÙl<…¼¶”‡dç‘Œ<jÃiû]ó¯à–eNrƒÑT«÷6;«˜çptøj¬ïtù´ó¯ó¸–i-ôéÇœ¾½”²ðË!Š‹­¸f æXf.M+š¤r·ÙLÖ09ªÑsh‹ÕÆ®`1ë½¯8»i*©œEM²·´Êq(§ži9²Ž›v°ZU¯ùEYigZ³V,¦Ör~P1A€åˆ‰Œ\q_Ìê.›×Ý9½?²èÀZ‘Ùd$îH¼§’nÎheSÍ³:Ð.`­öEuÅ$K¥Lgy….Ó	O–ãÃ¸©ÖC¼ï#M¨ñS¤vÓÍiödûê“O®VªÝ ´‰•Ï'Ÿ;¢¦}þlüìÙdòõ×Ï&_g?m|mg©]\_|/É_û~2¼Ûýªo¨†úˆêììl`Í0qšŠõ¹õËájEEEEEEEE+®½5V«[k´o½—Â¯]/µ!Ò¶D²'9³lá´Õ³ð¡q¢èXŸKU(Ïç‘ï¯¤Òà {AJ¨ŒÒ¯ú¯•0EyÐùâ=xôþè8tw±	›9
q@š¼µîÛ÷;œ‚Ý0­qKFÙÊ·'Œ°òŸ×jæšÑÚ~k	Ë.mUô¬ŽsZ£1¨1JÉìYeóÙ‹Šå
)ª¥Ãš®µ´"5a)NBŽŒùø5æ„wmyŸeld”–9AÊŠQ‘†.‹ë’b?dÜax GºUÆ´E™´>u’QœÐ¸…8¢ã`»Lr+”¶û~
*®ˆTv²PÛ:ÆyÛÑÒãÒÍ¨–{²žD‹±ô´V+æÒ6zˆ‚‚º²ê9&í"¢`†´Š'¨ÐNÜZ£G×¤©š—YŽ¹<Ç…k¯>ùÝ“ÁÊ•½–L´Ð˜Ï× •ê¦]¼œ]O¨Ç#ðLz3½~C=b°Uý”«ÑÐÁQÖ”¯?Ì´°Õ’†ÅV+*******úipí=Y€
^I!¦’Ávn%\‹T‘¯‚×¸²2µ	ª¬ã u¨¢¤u¡¸=Á„æzáÍÑˆÔÄjß~wtd·QÙÊ^¥<%$…tfSBýf{dÖ:›¤ó'3d«ÛéltÁ%ÈèÎÂ¸¶öÛoÛ[¶—Ú¿EÂµw÷B&q8ö’ÁÚìpjèNÃAL„c~VÓÅËãO'ü6V0ð>r°ŠÄþNsRÂ.nŒÔ!tâv_fìµ°æIFô8?¦š* 1ÇBdcG!‹ÚO¦‰C‘â¨ëX¤®¿lÆ:O+—ÐXsÎ¢hù0¨Ç­¤±’–†ù35¦˜j|„øI‘hD%"ñšÚ<_Årë7ã´xâ¬#:®oid]~®‹­oÒÔ ùJ¢2‹`RQ;³ñQ˜¸?Èf|+dZm}º‰3´åÞü«s»OvwŸ\=1HãJrB“à3Ê<§y5žw±Ô¦ÏŸÊ`›\_\Æ¸k“ÝÝÑPtfeÎXó£©ÃZ3Í¡Z±ÕŠŠŠŠŠŠŠŠ~ýB»!ƒÔÔCj©s,ôÚt.Z³°6lç ›}êrþ¢2Ñ¸mæ5žYN-‰ú¶"Ô·›…ig|ýÃ”ŒNÌfÙyß}Ç<DkÆj‡G€´¦O[GUS8}{Y9 766;¤Yj5‘Hjay©Ûêm|ømcuýÛßþ®¡DkÚJ©éè°l)˜+¼©ÔWÌz‘©?ev„í¸ÍÃÂu	3ëŠ~<^vÜê4c#OÎjRLÓY³Nd"‘ˆºÙÉkÁf9#!­u0bÌ_÷@ËÓíš¦P{nIn5‰9rú~A/’ÔHj´æö—³š:qór†ñß¬õœÖbeÂ1§-õB
Æw#µ¾4³Êæ[ˆðæLn™¥o›ÙuÚò»qô*ˆPYÅç$Æ'Tt=à^ŠŸÊ¯‰çÖÖv×ª)¶ZÆ4	B›P!ÈÌd[ÇCNºVçÍÅõt·šŽ'£§Õˆä"»Ãñx2M§Wn¦E¡:ã#V£P¤y“NWÓÈ’°¿¨¨¨¨¨¨¨è§´×¾ÊÕYM ç©!U¾Jû!ÕXíuÚ©¾ƒz×hëÌhkR@›cBô•û	óf†Úàìl–6Ü[pÍÎ8çòWÙ,	õŽì ]	Ç“ÖÂòfg¡Õêv;¤õï6ìÄ41—Fv÷×N>Ö_Ð?üp×‚Ö2®ñÞšNhsôi/ò€äy9<¥Ý{G4Ží‡Ì¥!¬f~Š-ŠD4bé-¦Â£©q ‘à:ßùHÄT¾l%/	¼"éˆp‚ª@;AŸñ˜Ý¯pöãÔñ'n…_GÇV2l!Û<røÀçšàNØGYááig¥ßè\bøÑX,$&
C+ÀŒé§›m«úâ0”ÍiH›Ï¢®Ù¶Äk#¦.Ÿ‹/¥«ëÇµ‰Ì¨©(2Ò¤DkUj<®’–ðÃŒ#W$ÄÐ÷‹:;æƒ´µ(ø·×üfúù“iJ2íbLÔè‹Ó¼L*B¶éñújt1ÍFýçWãëá`4½¸‘¤ŸPƒH)âÍYÿüÌ!:o¬%•EEEEEEEE?®)ÇHMž’F°öUä‡4ý€Ëf‚ÔÜeÓ´F?k_ê¨›ð™ï©¢>GÌòq‰ÆØ}ÅD_S=·D'ñh®‰ÖŽN.«Þ}Ð«g¨ït»-´ÔÙÜßi5šÕ_w”m„ÔýË­f¯÷ÍöÃ‡µ‡"píW×\¢µƒƒõýõäpºxÆ}2‡4›@aA¥®øNðÃ(…";?O¥ÙLÌ"íiÉ¼ÑÅ}.z"*gWSŠÛýÛƒ!³ÈB¢ˆ‚8§®øÅ(ÁšÓ™Ýî$çËNÍÐÓ`áŠM6¨BD…<âd ³i¿mdq×ì!]Á]óEnyeù4‘zê¡dFÔµ*R=ÿ,Có§p#ûåªó®K¨){p³Ž5¹gªÕ*IC‰ÆÃŽqª´bÍéNuíWEÿ ÄP›…ö+ª««Ý«éçÏd¨]m¿£1™ªðMxÆ„rŠLl@xzuE*‘aÔïO.FÃéèìjX¹•6{OÞêk÷cVXjYedQQQQQQQÑO¯_ü2xÍ·Aþwfµyi84l‰Ô¼›d²eÅûl.a™v,¦n¨ÏCGº>m²Ïà2ÆèLæ°FŸŠ!-‹ô-‰Õ¬zqYU–Ö¿º<:¢_qFö#h-m„DÍgckïoÀhëÍfwC½;ËÖ­…Å^õøƒíAõøñCôã¸öÙ§žfä€þ¾åãÿëVÓ”8FØ–73:×¸h™cÈ=3Ãô«L·ÆÉŸ³+ÇGˆj1ä¹þ×âœó,®nl„ŒL!†€ª¶=Ù
?¨Ízƒ­SöeaÁvkêÄÛoŒý&Vz—"E—)`#†ùìÄ ¦ük=É?šO	¦Ìc‹¬²&u+¬Š…"ªˆG–IXeò³;biÛ×ÒçÇm9‰$ñùƒÏ¸$jo¡'C4cµiÖÐùF]ŠU4&›åSIZ&ñÅ¼æO¡žýÐ€IŠâ4ŽkÜ2Ø½¦á˜‘6ÄxM\Fw§Fã7MÓé”wÔ¦O¯ÇCÞOb©¦};ùZÿàü5Š%¢óì¢wSW•‡¾*; ‹ŠŠŠŠŠŠŠ~F{-'b{ËßaoG5Xãz­ÞëšÎý]¶À4j/!hŠM‹¯¹éòt† 3³Lkû ™«¯ÄsÞ;Ö(ŒiA7ù^—Þ«G}É¬µÄj{·÷Ž×•lÌ²µ¨yçæÍ–¶?’¬yu©)g(ªNzÕööãí?ÞÞþ ^\{÷Õ5pÍËÇp…gîO¸Õ¤¬¸§¦ðH$iÝÀaB!Ïâ÷ u,Lkz`Á€5“ÓÒ³$µŒMKö]\„× ®Ä}q¨)e“ÏÝ0Ú³œQÔã’‚ëTG(àLA»ƒf‹ƒ&}C%ÁY¢C.ä®–§©O·ù+bÎzkˆÚ©„	÷©)É$"¨—M¶¬¶ÆH¼ 6oÓ9¬ù·Gx%r›P|…Jü^…óÀï¶9ÑÔsTÞÒAæÑRYgÑ¬syRQ\ÜÁ¥Q¯T½Doæ´Y!@K…¼ç9P«í3³ŒtŽ3_qÞõx:™îN•Wd<¾±¯‡“‹ëáp$cm³õ“†hgö’ÚÙ¹ùÚC“û¿€Ë¸íµÙïïT+*******úíµ÷ÞR›ã5áòý‘ù6?6[úJUÛDmî¶IQç!EãW1<h'/!O æ
Yº×çÄ~@†5#¼/¨•'²B——Àº©Ù›k°› ;ÝõõÖì~ltÑÒr&RrÇ6û%«íÐö dûàƒÀµuíÓƒf³±¿èéö›¨pÄÄ¹}&Rr°qŠ‹“‘Ä°¬éCEœÒ˜@¬Mme[ŒUÆC¶>¨ò@Lˆü>>k¨éªñ[Â‹Û¬ÁíR›m;õÕöç\†b‘[m¢*…<ã€E4Ø'÷(ÎRx)¯¤à—nÂ.~“+r4¦$Œy`¶ºˆÄX[ùNÞ¦¦ ÄˆØôÖäd”™ÕÇj›"ÕíeTŒ,$ fSM‘±FkÐ3N‹ }'8Õ‰Ùl+%b Æ£5à3SÁuW#†£È»¶×ÓÆÓqz;ÓÓ¦Õî˜ÞtÚ¯¦“~%íN¦š4¼’›–Üì¡ŠN¾æJ™ú_kPgµaÞY^V+*******úY%{­¦kt­EØ¢¯éRÕ‰íœRß'PV³Úˆ˜´áQ¢ƒ^3£’X,³ì6Ÿ-Z<©ó}­Çà86?„-9k‡vìZ‚5´Îk2Ö­7o’Y¤… µ;mKiç±-Õö“¶ww¡¶:®½k®±òOÆÁg‚5§/ä‡¢%µÖDIê˜òyÖñ®™TÀš?.û¼Å£®r‚³HÂ…lèÏŠ¸;uþ\ÝAÓ@È–Œ0•ÔrkòÌ((xlYÅó±Ø[.ÍY,‡!"
·ø2:Y¬ÐL|EPYÛL8.Ý‰ÒqÙì,4wÙÜ³
œÊÝlpÙ2·Ë|~Îæs K@%8¥@k>²Û@5Ç³|os¶ñÑL¾¬yNq™ýWT.7ÊÐ¼óýÁÉ`@õM50»t‡Í†ÒEqÑÓerp#h(ç¬F¥H:¥<{sÁ‹hcÁÚÅtx%‡ÞxÊÆÈ(wÝÊvG-¯,{Ètä|¦A¢5Œk¹kgNk©šC´”—ÕŠŠŠŠŠŠŠŠþŸí5'±™¹FÏ†lÞ‹(˜†ÏF™éØ;Ð8¯5Ã¦ÆµO·¨ÌD0¸5³ÝÖj¶Êàv«€Øêš½kˆe$cã)$K!7…0AL˜›„ƒb¤b
p±êt1N¶Þßó¾çÑñ‡¢½©r“ËyæûÎŸ÷œï›qBÀ¿<ç¼ËËÈf^‹«±4Ú2™$->fdÓÂgáÒÍUg§üñ¥n•o’ÛXª5¬)bMåÕâgmoÿë¯á4`íeºô‡@ÚòÇdñçÜ36°k½^lÝŠå†ýåÿñä	¸¬ý\KoíÞÖó{+‚51
×Xlªü¶žP6*	Uz•dÜêa•ƒ±½mM´¦Š¯c<[)»z4;	"#„Ì†!„i-¿³È(•³â/:RyÎ·çD ÓÀ9'3iH@R1ŸÔ]Õ:Méâ}Z¦8õI*¹qÌªÕpàŽ™*ÙK
«–›Î«š"á²ó¨¤àAøQòag¥M3Q¾Åf¡Èi’K™¿fB¯ÙlAKm
z?@kDQ˜->!âÆ¶Œé®kà g¨©ûdÎË&äÞ_œÿ|ö#K qÚÎþzvªÝig¤ùŸÓ)ÛÓ_|ñE ™îÙéÏ‚µhÎ…M}HSC'†´à3î‰ªl£†jMMMMMMMM¿©þI¼–fÞó¨*Ù`ãr¾Hhª«²­:M4µ#$‰Ò¼-W@ãš«(°vÈß)Ž0ÓæêHÀm‚‚µHE’I&gÇ8k¢5Xí“ý[±rip0èÝËj‰tÓ¶¥å´´¢–åµ8­©H^K\óÖµÎZÈÍç[[÷þýã²gÍ©CbE¯gxâÎÌúHD,c­›•ÊbJÿ– ²5zùjZ4ìœq#¯b$jØ20‰ól°ìIâ[«{Öí˜bªÜEƒlP±r²¦ðÏ9ÝùôïHÏ¬#µ}2L¶šRpSa-}®Ò[e0áîâÙÅ´

[õPXhêŠtéZk–é‰H5ŽÖ¢iŒž2’0íŽå÷t2óÇUKæ+ŒqL-ùF‰kºí©	ÎP”²™±©XMwè“ìR³ÂÚq©3`”£GeM~|}6“Îa5õO'êM¦\¦qq£Y Zè¨ÐZüç7×¦Pþ³šÖŒ"´Òˆv ZË+ÒÔÔÔÔÔÔÔôâš²\ï,ƒ|Ç§kµG§²ZZmLŒ0ŽIî$ºYrÖsçâ+aŸyJ/.{e¸“Ï$æ«C;­9%/É]œý5Ç®ÉYÛßÿDåh<è'§Á0CÖ=7D3¡~?Ð§`ÌNž|öçÙä³'È¸ö‹æÚ–®þæýáÇ»O/R5ñi©áR¯?è ¸¦Û›Û %¦VÒ$ãª©D4PkÜ¿2}PâzÜ½:7ÈŒ–7³šŸ\+Žø„¬ª¦˜.EÂXŸ˜˜ÈOFÎHiX+_h™Ád/ùj¬ÄÊ’®?Ó”HúŠÎYÖˆ Ó‹ŒjÒýÈ¹o:Ó+h©kãÛ˜PÐ)Ý¶à)ó$yiƒâ¹åkvw×Gã§[ýØ5Ç¨¾7J§ô/²'çcÝhòçTd‹‘ä´”Té©åÇ—
0é~HN¢`ª"HÏ…÷†œnj~Ó\v)²þ‚Ïìüõùl&J;?Ÿ-L1ÛÊÈéHyY&­Mcchþ…¼î˜[Egíc¶¿½ÖNVkjjjjjjjú­í5ñZ€Zê´Zk´º¶[mXÐšî„µH/¢od£Åf˜3Ê±­þE1µ²îQo×Xt0Ù&ÌQ1SÏL˜ç&Akh/aMÙF×€¶¤—¥>÷åh0d—Z:HãáÐ‡ˆ}‚©öðÏ‹ÙgO>ûì*\³¹¦×`°=Øz0Iu£˜l:Ûm0ßÉ·Â=â¸P~ŸéÆGM/å®5úR@ŽKÞg$‹ÛoHE÷
¹;2÷ÑÆäÐZð)áü%F=8`î¾å[ltåSEeºUÓ=æû»°Æ“Žk¬ÊÑ¢^	5lÚ3×E˜qÉä”4Ç\·ySe§%ùåÂGµV`wîîŒFw94ïÞÖ½ç£@ÜñXk7ÇƒbÜaD–ïŒ¾ßmc+HW¿·äë7Jn%•ÁgYÿWž8­VRÑ0Yåta®£DvÏ„cêðJj½™1S.†&°ZtxP!4“¨.QZ­cëgÀÚaîR›PO:'©ÍCÑÊ^;»©©©©©©©éïä¯ezHÙj§ï¯{ŒöO]s-{ —»´hR½eöHµŒg÷;¥Õ,"Š¦“–›ä<JM”£ˆè,sŠÇaÚ\q´öÞç{_¿Ò¡k¢µ[òÖF¶”IK½^ZèÙº&ÔxÜ'°ž47?øðÉÉù““ÏPò{×êZÈîÎ5€Mzš‹Qä~LÙÞÖ2¿œ›ÎQl… ÔäÅ wÂÊ/ó‹’bÜ&'Zî–Ç<5¦øµŒâŽ‡kAäÒJG•(1±Í¿ºBfJöSyÂ¿[øäY\ìJ[ëlw‹…‡Ô«ó­—Iòô.POŒäT1ÝÐD‚«#3šÏ@Kö£Ø§H‘¾øÁæhçîæöööæ½Þ"úRèkódsÞ@WT™2¦gç÷u¶×¥§F‰¼2ù‹"ñ@›~*xRGí)Mä?p‰Ÿx¦q‹^L£Œï²E(´°‘r&hó„?&O‰¶áÌ:ši›'·Ú’r@úÿ“¨ÎÅÆÖ¼HÍ$µ†jMMMMMMMMO­¿–XF-‰Û~Ê¦EÏú%¯lCÁjàˆ¤4œ£^l…uFK8FÍDýÑ5=ˆŽhÐ“³–< û­½µW†µýý[ûá®õûÂ)Xm¬5+kË¤Ç	"$‹Ü?yøðáùÉ“sU]\ëšk•ÕX™yõs_Z]üX€)³ûûàk†­Š;æ·u³X*&•ÛÏßñŒÂpZújj/Pt3¯ey^?	6!Zõí%m¹ÖòÉÒ÷c—ÿ@Æ­ß‚SV@æE~q:È/ ®,adŽH­UR,àN¢ÌH>¬—%è¥hªêøjjð“üvêãñúƒííï¿ßÞío=X=¾»#BÜˆßå'+ªG#”¯¨å¼·NI¥€µpºl©M‹‘–Í	í¿P:›¡è¥^ÐòN2J	p".pT\ôÚ<[3ÔèÏÏN¢ÖGŠJSÓøÌõ™ÍgØŒšdc:™KKÍ€æˆP­-€ljjjjjjjú;ëƒ\i™¿ŒdÈqË—”4V'WŽ–×Wa¨¥—dWL6æDãeNc…¤¦D€"—E¢rˆö4µ§²½òÖGûÔäç‡Õ–Öb›¶Û‹ÖúCv¬q Ûí½ÉùÃ“É—è¡€Í¸æµ]s­ÐÚ®ÖR²­¬ž¹>$*òrBé@ã¶Äø„ÜÏ€÷±UÿK¦OT†5s¥%Ðf¼rêºFMÌ&Oå`ºšv¤fÌ"ðD¯ö[Íc5idI/i­®{,m/Ž¬6 ÿœ¢ªˆYkÞÍ¦?V¾µÂZM"£ÌÒ@:í‚e™_Œ)—ÔisŒÙ«zàéö÷h³¿»ÉzÈ;ú'³ñtƒªžòÍ3	h‰šyòœ)±![ñÒV+yõ½
¨J–2¨Áf0‰.¼6Qg6g˜®®)¾[NLº²Õ†Ü¯yA<a¡þÂÃºhžŸÌ.-~<Ìn!5ÒñhõpdçËÊòÇ,Õ-JXCóÓ
koª55555555ýn6°l&±®öSÞîWjëšnî„ÜŸ	ÈŒnõ¸mµ=9W?êBN6¢öQL,«µR¶[œp8EßL¿™-pÖøÈ\»…¹´õ{½ÛÃA?}¥~¿Àš`[Yé/÷nßßØ&§'§g_~y&V+¸[× µ«æZ'‰ÿSm€©Õ¯!(cš×2ªC(GÖ(íÆ¹ôšJJ?ÅU‡lÃESÉBŒ_óôÔQšÛèe<_ã3¢pÛ?Y¨BÌ°æÒv2¬ñ¨)'žu[À”ÞZà“9š	kƒ÷°Ë8(620é&"º*™Aì|UŠ+ýÒŒRþ›³n¹È4•ãõ§Ïa5ô|ck“5‘Æƒ§¢ö»ã;^,Yé“Ãü#í{ŽVËŒØ¾' é¦å™×Îÿ°¦@‹µ†IkÙJv›ªfEúbŸ&udÓMò¨J·Öx­§é@¡Î"O¦zd£'Ÿä2k2©”VOUCjSdýÕšššššššš~_GÞyÃÕ;ZÖËŸÁ®ƒ—NØŽr?”+"‘
Ú4T9ÊíkùÜ<S×_¯ý¯m·Ì5)mŠfÇÇß|«qêœVVBr4v…54á¶ðÜ†ÿz<žÄÙT_>Ã^3®ÅZÈ+Í5ÊÝÑò°ïÔkZÜA?žÞ
¡<ÿ:é¡³8ÒN3B>^ª°…^k.¤iô²YaÍ#íS¥™ ˆ¢"BUñÎ¸V7‘Í*¢[hÓ&2ÉäÄJk|jú’(KX‹IÔz‘YŽ —®®ÒET«´¥´»ñ$÷€DŠ÷’ ÐjþÂ¼om7Õ¶··6¹pGïï>À]ßÝÉ‚õzüµ½4+á1¾æxýøEXkTÁj$å/$†‰Ÿ(Dgó‰E3ÔG…¼µìHŸVXË†y,KU’ñÎcˆ*îCÞ­…ÄhAcÐÚ\ÛhÙy™µ·¦¹êl[k¦ZSSSSSSSÓï1£?ÀöîÝ…±Æe]jÄcØ2­qG-»IcÙGGÜ†9bdobÊœ$s	2Ó‚,ýoþkÏãmoPl]³ý°w¼·çŒZêkXëÝä„lƒámÒ5ö–V†ký•ƒÅáÙùù³gÏÎ¼f\»Ú\C´’²ZVwÔt[ÅÆ ¥r6›!ÇàT7š•pf·."‰É’y¢ç/);Ï¼µÌ¦ãvÜhÓ1Oú»¼2‘×LÌ2†<©¤)›Þ2JD]›`Ah
"Íó«¤·VßXÇ&Ö~”1Äkëq–amÍÞ–:]X#”"h@uÇkÛ¶DjßoomÁkÂíMþuÞÝ¸{w‡i_}ecÌÔÛÖ­þ!™’j¡+Î@CÇ™yß„xÍU…“¥r¦F–©`6]H¬ÆU>8bÅz£ÖP’X©$Úš¢QµæGøi²ÒˆçyyèE±Ô…ôÒí¬œ¡ŸÛiCôª55555555ý¾SŽ\Ø¸ÐO*ÜÉ¶u¹ë¹ÈtJ$^ ©Å‘”Üp^©BÓÄoó7Ç?(?îk*2ÌÛåo­{\ÀÚÞþN\ûü`t<ZÀkˆ[íã7nöúBŸ•^o	^ÀjK|rzv~†&ç_¢Àµ«Í5ÓÚÓûÐÚÆ›×*7éˆëuíRÓÓ*[Ë C˜)a ®fLÑÈuÎR+~—+g€79ã_âm¥0Ld˜™|1RÃ°fŒ¬¤…ü5¸2©–ù­ªÅ13;e0æ)®?£zåkîèk¾#¤‰×XšãBªºbøòTj¿œòjIêQ†¥Ì„9ÞŒÔ"È¬V`í<YfD¹túcÀ‚?]ë[Îyì3°ÓáúÔÜåe†´Ts9 ").=¶&wì5£W.n—ä@2ÚÓCBêò9BxijM'Â3i*Õ$î+tÊ])²èÛëüçÖÔÔÔÔÔÔÔÔô{Îé/`Kç+Êd6—5æNWfµôÖÞÛ—F-HË±º­>!wmþÆë#í¨U]Òr®Žg;äo«3ŠWÚº†±ÆáØ‘ò@Ô´.XÐ0Â†Ã‡xjÃ›½A¿'|ZŸª¿²´´wºXÌÏñ×¾Ä`ûµæÚææîÆ.7öœ›Ö·¸ê1ÕÈPÍ¯Š×äm6æ,ÐeFÒ˜”dT–.&'ålêq³‰*>1Å{ÅÊOÀ¸+o6"öœ£Q…œÁ„,Sr)·Ì];d&>à&Ââ²Î×¬Æò·›B³iÚƒg”žÙýó=9K3¼fÒo@Ò
Šì'¬id‚önaµXí±mÞúÉùÍþ½sl÷Éº] ,5®…ÎI3¬•Ýi‰g.Ü ˆ‰v¢šM6T0ß1¡CcY8fB/*ÙD'ÃO"Ñ£t¤zrñ©Y»¨&íÄw"KÍ¨Æ…JÑvª55555555ý‘,6cÕ%»ÒhsŒÛsÈT@3¬Ár´%qš¥Ð»ë×juíè¨lf;â¤ìÜ¤3=
Z[ˆÖÖöÉT°Q­7ìÑZºyãæ2`­¯÷TÃ¥¥ƒéüäììŸó³g¿Ò\ãÈ.Éf×[î‰KØ¹GÔŒ±1ËË½<’Kª¹÷Ñ%/ÙnË×îLg>…›K2ªpIvGu0“D*©H²Ae*´ã§¥Ud³èç3Ž’UkÈðŠD“êüâ¼á1/Ì™«yP¶¡“¶Ù-†u›ºúêŽ£¶æˆ€mãþFÿÎÆæ½pMÚÚNÊ¶­6=~üÕú B`~•—¬ÚÉã?o±­…’Õ¸¦|’®PµÓªˆä]à­‚›®$¼LGâ7¨ŠV²›¬³É”Y‡"1MÂlSJÝéœÄ]7§e#[î™Ôš©ÖÔÔÔÔÔÔÔôG6›bëê½²‹Èée“­ÂZjB3äªÛô‚,t=>VPëèƒëiøtì·Go!¶Øº¶@üUZ!å­i	dÀÚðöÞJp£q{›m…Þ ·ÄÈ°¿¼ôßg?~÷³ÌµgÚ·¯¥¹ÖMÙÅ5D}ê?½7B	 &dâòªÀ<†-·º}•`SÖ(¤ÏR!©l^sÒÉ­Etå¸i­"T ‡‰Åx“>Y¥×Ù  :d<ƒ<‰F"CTN’{Ù•¡Æ¿²ÃÌÓÐ£.Puç9â-z>îpËùžGÈ ºVfPd¿Zxýûýþî=RŠ˜Õ¼ò®´³³ª±a­°š¿“»&À¤$Š˜´às®Që†Ô¸œ
Ä+ QðQ‡Ô,¬†jú¤·ßæWÀgu0Ì4]ùºi[ÕauÐtéåÑ9¡CU3‰„³æf…5lì›©ÖÔÔÔÔÔÔÔô‡\id³ê
I÷³t„²3X÷¨9")fW­œìdN»R^g¢€M°–¸´†ä¬	ØòÚK}1š‚·Ý¸Ñèƒn7{Ë:4{yøÉÙë×gÓ½ƒÓï~„Ö¼òÊ#²ÑVh›ðÐÚîØ˜ãSªqz°¦¼’ñ80Û6™Í&Ÿ‚9ë¢¡IJöK*-“¡#:Æ2;h¶‰"ôèØxc-0‘7WD2¬á(•´(a-Ñ]ÀycœKÍW;aNóüç–Þƒ/FhØôR d>#X)-Sâ’[-a—º«-pçoðž>¿@©D¸éj¢-±û$}Ä5©uv«Õ)•ˆ_ˆ™¯è,3UOG•ÇaCl‰ƒªš1ö–¿H®¤š(ÃnynµØ2*Ò´¹6/Ã]Ñ4î_Tš“‡œ eê–Up[è²µÕZN‘¦¦¦¦¦¦¦¦?<²Álh»ä¢™ÏÔV4ˆPCfž'eŒ(Ò=¦ñ¿öÿöß?üÖÂÑ›€µ,^‰ÖötàÚçÜ°þÚ­aŸì"`ZªI!?8*»?€åz½Åáùt°²wþúÇŸ=ûîÙ³®¹&\{tÅÙýÝ{Ï‡<<kPrðçÙÕ\}a–§p’™­Œ$ÅÙ>ãÑ¬¥Ãæ·xGY>M€¥4Éüçô†¥å73fn3³_r3ïOëìŽó‹œõßÒ°„˜u‚F?dÜË°`ÓOˆçÒ‘‹ˆ^ÓH‚›çeRM"ªÍ{>, 6´7úƒ§Ê("R»
ÕÐŸ…¥†øVsü'Ö=9k/(pÔÐl°VÒ‹q™©¬P}bŒÊ–Ý·Švj8¦ÛÁŽóæYY^ÖK×ñÔJÐ–u‹–CèÍµÛòÇ¦¦¦¦¦¦¦¦dƒÙÂgSÆÈJiª¬«rA¾©KÞ9M˜ö«Âµ—%ë²÷[¯Þ¾z%T‹Ã±9Kk!?ú—öãá’×%*»ÎÚhœ$ÄÚƒI"÷Ï_¿~ýzv•¹v×T=_ZÞÝÜíî¤ƒµ²”ÀÒŠâ+—/ü(¯d¨P‘,(#t,,¯òš„«¦Ö¢¯JþG˜¡ÆþCËŽåó¼7«|RiÊXÏöù'C7Eiç•ßf$îÄú6õÖ?ÔŠzCQzžª9ËTf&ó1pŽ®òœÜ ˜€SÇÊü²›°öÿ¡ÚŸþ“·c©ÉZ¬TXÖ`®æp„.lµ±W­œ„]²ëÏ"Ñ£LD7­‰ê‰ºÉ^´tÙq“:°†¨Lrn ×j¨°ì¤q!M–1zêyd´}ó¢ëÔššššššššþ1}6t]GßBnÖKË4OZƒ×4ûšŒÖ´_KkÊµ€±–Ê×Þ¾}¬kH¼°öÑ­OÆZþÈg=œ´ 5Ê~À	ÐFs…A†oÞ>ýëk$X³¹æ´WãÚ6pïùÖóþÆÖöÎhtw—ÃÛVjNþõpðÔ2iHF(SP.r4”9Ó¾Ñ6a™•¼pÒö˜a'£ùF+¿v-ßÊˆ¿>¡ß…5æ-³šq+%¤TE<@Çæ›Ê°ªr!&Eò¦M³l¬Æ›åg«1­÷9nÍ€©u^3'‰†v6ú›wîó/è*W-I=âüí<PN‰ÊWE¯{4Â‚ÎÚ¢®†×"y£÷£eiKNË"ÍÊù‚:?ê Ê²¼É×¼£Ê}Ý™ð¦ž=5>jžÒÐ‡Œ"mõcSÓÿ±w>­q\é7kc¼öBÞ­ªB´joú3h3›¤Ð¸›LÀ»g¦«é1v Õ¥!®f0MCšn31Ñ•-/¬…wú ó<ï[g*¶f¸á&î}ê:ÿêtµ[öÂ?ÞsÞAÿ×cm.n7inÎ-þ¸“Y!n¸ 5W;þ[&i3ÊÚ¡¶­1ºæ¾¶— «µî ¦¼³‚lmÊFÖÎŠN[kÑ^Úko.±gíü‹!)lÊâÿÀøZHm]kî]~[eÕhH`N“BÑ/¡1©?Ú
l=³¯t¶™ßÖ¡heéÝBëŸ%Yóª±¬!Uœ¢pÓÓ¾ÕWæJf¢]hMqrä³Òsy?Y­EmrÏSÙ#%k,ýA@YOd›>ƒÇêa¦ê·Þ=ûÓhe¤5¢gÊ¦Ðµ¶ˆGÕÆóAo<€¨ýsUûÍï¿¸÷å×÷òÜ¦Ô'x`ö—þŒ&j( kKæ©OÂž6Òõûba¥³:ÐÅ‚±áÿò€—ÏKË!õV¶uIÞìDOtÅ£ŒùÓt‡]­o´žÐ8SmÝ…¨EîÇ ‚ ‚ÿ‡ú&àd5ÿÛŸpÓdÛÖÀ+µ}{ùZHüLöœl¯Øk¯"»dÍ’l´Q"´–¯¬ldŒ­­d¹qxöääâüÁµó«×,/äuºÆ}QÝ.Îòt>«Êr\Àª"-UÔ&47AYKIýÙ*úÌ/9n3è·Sì<’@{¿ÙŽ*@©ÁœFbþœ(|gEíe(¿†¬i6¦ÔÓž5dóÙ•«éýú# ×~ˆ›Ä¥[mU%,uËž©ÏÓeÍì6·:Æ¦³É·´R~éPÕœ~õ½­îh8—¨RµGµª}Aàß_n=ÎÏÒ
PàZÌGòCåÕîj&k~¸­i·Z²+™ÕŸÒñÓDÒÆ‰œ¯Ð_ÄýË4_òÆÞhT‘3 ÙjyíàÄ{´³öù#Q‹ZAAð³ùà-É6Ãö5—µýC¶æ¶¶<ÆñØ{5Åäã•UN½
ICòþvÑ)Ö kYþÖbÌÍS‚ X¾¹¼º8º<:¿8÷­k_½g-äûö®)éàv1!lƒQYô
…Ã´B–Q+8jr³Søýb1êäÅv;ÛG.kÇHëèbÇ§%YÃK¡3 wQøX[’Åa¬%Óa„Mo&ÞH‘>º&‹Ñ}ÅÇŒ¤fþ6Mâ=JCšŸZ¬ôÇÑ#»‡–ï“ØÉÒW‹¢¶öcüæ«ª7)ªvªýÞøï{[÷îmÕž&=”nêkÚÀ1®å±mX[š«Më„ý3Oßè¢…X2ÚÀE­zÕsÐ+Y›yaö&©#Š¿yœfzÃ„LÁ;…Ùhg~S†F«³K¢v3D-‚ ‚ øYmMéÇ!k5Ô®ýº¶Ç{ÊÖÁÊ \jÆ%yÑâ>¶6J(²å›£Ã)eíüH‰FÒZÈët­ék‹L¡Ì»£jÜgž¶Qå'èeãî¼„+eèïôKª¢q£Q‰Î¸ô;vjkH‚¤€/ßÍÖt U¹¤—Ãn2£äd[›þ0Y™'Ã³ËÂe
ŠIÓ(‚hú tË÷Æio7³T>]É¹kM7x‡Æ§éüp–’6}U§)ŒûÝnWšúR5šš–?’û÷ï¹U/®”ó%…ô§r+\­jÏm$‹Œ«¥ýfàÖìù[nKÀNÆ$[)ÌæÕÖC²ƒBá8 +ycÃ¦RÍ4ˆZ³í9J!¢ {¬0Í3úÜø ‚ ‚ ~þØÏÆ¨j¬ lí˜'®í~¿÷umÒ1Š¼(²ïnól5„ÖÚYÎ§)kyá›²ÐœÎ–³‹+ØÚÕù ­…¼N×š›×ÜÙµáb4«v+/{m ,òVYî”ã’’­Þéé`§ì­óæ`0.«ñxHÑSNŒm„Ø|¥d.9JÁ-¶ÜÕØ“V%'ò®‹âtÉšiÂ3=#e1q…²qŸ‰·u„ï:Ó§»ÅXS³e“6Q2¨£ß CöôçìëÆ¦$Ô×NJüa|zÁätî€>Üv®Ñ²6ñòÏ†úøíu+T-Õªæ¦vßy¾é« ùHõ‘,e—s5;
›söÓÒ‹ ÏMJr ú¤l0s3¼8ÕA›óQ«kC Ý·Š>º^¯ÎìÇ%îÄÄL©úÙ9ñ÷øÅµ ‚ ‚à—áÃ[<KûÕËü a²6Ý5¾‡«ýqÂŸegGÊÛ++\Ù^où;«Pv›ÙÖÚ‡³bvÄL#Jù/t­^K60ÏæóqÑ?Ó»ºU^Oq£êUVvO‡E9Zô¨ŠÕÀ%/mC±<fDcC-éñ².­tÏ²
zŽÓ!
qÙ#’-Yók¶Ó³	ÇÝÆ\bô~ÞV¼Là6Ñc5äÄ¡çõ˜nÈ(79Ãhó›TÐÝÔµ»èzÌŽ'wÓúìÅ¨(úüVÀ¿›UDËï“ÿ¼ÿðáÃÏŸ?hßÐ¾Ï–y­«¡eN&–^ÄUíy-kS;^®v¨Ä dvóÇÿ@©l„“ê¢ŠúÆRêE§CëŒMpâ5ïÑÄY3;ÓºF!EÓÇyþ ÿ"<-‚ ‚ øåmYûgžb‘5?{úÇc›ª}ÿ=Ê	T­˜âky{=»YË6nc5dkåö:Œä«m?${eÅämrrquŽ…—ÊÙØº&]c"ÿ^kúZmló^w±¨*„Øªbg8/G§‹r¼EÚvz:¯ U/#5É`>ZPÓxÑÕª~¿ìeˆäRôÉÛ.<>É H¥´%¬Ô¶ÊŸÇ»zñ4‘µ™(±Ø‚%Ë#­Ü?Ñ“'jÛX-y)m?Ft€·µy±P„oÓˆé°®MIœGM“˜ZgS‘6´X™«åmšvaÉ7³ÃiÆuëT3Q#ŸòÉç)k:å[Ð.SòÉZÍ·ÌÉµ¶Œ«Íš	÷o^³ÌÂl®P)aˆÂg¼´£mëðå7pÕ3½Ô]k°öüh(¦F40 Ô‚ ‚ ‚_ž°5ÿ¯)óAÊ×¦8pÍ ¬É‡®}¼GYË²Õ;µ\·ï´îÜF²ü‡|Y"óNgõöÊÊæäy¾õª]ÓÖµktáµäkMa»;0ûZðÂúÆE1ZpofÕâÔÜãÕ`aŒˆdƒžQ˜4¹ ¡áYJ|Ï–’îW©ºaòSËo¼#÷¢¬­¶äsÐ¹M“^’5Ó?îSZØEOF¨ÏI/¼
ŠÀY¥ð™õ}.KÎçO´Ú4"´¦]szjÎè 'È£|¸q„¿ÅÚpŒwgT­×Õ¯4TMAµdjŸÏÁÃçµOºÕê°j]Ã?šÉk Q,áj~68Ü?d\-éÚìÖµ‘+­¼iÒV¿5­M¹E<Š&	;³ŽdíD/ª5mì±%C#VF‘ ‚ ‚àW¶5Èö¬a1äô%‚l ·fkýë.Á:H¸ÚÞÇí™àœµï¾ÛØ`L¹!ÛôŒv¶ÞfRÈ•;«…·fç¯¡jx]¯kZ™–C¦ ›C}Ôq¶él±ipÄ®CËpÓ(xF§((XJþØ< Û]Búâ(ë‡U¹ìH~cŽf*ÂìËox+I×ž”&‘3×J{ÞpWñ<ë›èLÒÏ>sç’¯ùXÐÐP·¶(…›££ƒUÊ'W;6mMÑ·­¼,Š,ãarÝw£j
ªIÔPµÏ>”>:’µV™WŒeÇ\WAN¿Ö²6›ÂÕèSÊÎ¨k×’Gšµñ¬x½ÛHG¥i7›Æ|žßÅ›Ô?³:I‹di†¦AA¿º­Íù¿TXšŸ‘ý®F[cÿÝå.à¶™g¤°XU¶Yû®]Xš3HÛzÆÌþtØZ‰û—4µ×Èáÿ>]û$éš|­)l´.1w“P>y×Š.Š|Û;&k;´ÊîÓ™”^J„á=¥ZLÙý½é@ýr´±´iLóÜýtÆ @©Ð*Ä\Ï5äYÛU™—ƒn«mwzÃA1†Š–LÚBÒ1rT.)%ûº”E’¤-«yQÖ”œ’UÉ;ýªecýÑ8û/õ½`ã/HA53µâñƒÏk³5”Æ’žh6›×û—“NíjÇËoéj”5¦³y¢$ý\í|!­-åŽ¤¤	öñèFHÝÖ€OK–ö‚ŽFI#ajAAÁ¯ˆÖ–aÏšéö­!ÊFYoß¾D’‘c¸A>È=^£Ì3ºe-Ëq²1¶7Ú²ø¯Z„ˆ¾[›ÍfçWGàòòßºöôâGºÆs²›¾Ö¶¦²˜E„µ3T•PLHaY‹ÚÒó?ûLvE™N±#ÿrçðºö.­Ÿd(%$- ´HT¤RœZû“„Éõðs·ûå¸?°¯ØïÙÂ~¼Ñàn‰åZæñOõu@F¨å•)¶Å:ôô€i%1à#\9Wã²Ø)yJÂ`ðŽª)¨&UK¦ö/€ÈšÇ(ùÀ:¤N0­|‚î±ïV›°8Æ5Ý'WÓêG÷µƒ›?ùôøˆ¸Eˆ²:ò 5áÉX6›o»qÃž’AAü{ÙÚÍW3ØšoÔ™Í<Åalmê)!w÷víÀ5§í‘5DØÚ”5¼h„©!3;}M±TÎŽ°òõåùÕubÈ§ÍèšÂkÉ×’°5Œm0ü—œ¤jà]Í×Aº¾¤µú@òÄÑfE·ºZãä>îj«y3Ó¿e´Ì ¹áÕÈðk+ÂüÊ¹b°,ûýÊ·âÁ ”Õ¶ÖkÏG Ë÷dÝõV;v)¬È7ÁQ”ÐÔtÌ\¢xžß×~2ÀÞ&ªÑTUÃ~Ü›ªÖ\ÿ˜Lí±q²|€¿Âýý—ù–?ÖU-Úœà…>#kŸQÖŒiíj‡Ó—³©òõ[¡ä"?ÅÛÜÜàn	hœ@G`NZAAðoŽÙÚÁ‹ðêà•©Z:pª†¾¶7±ÅÙ¤à:HxZ{}½ÍØU\­ÈÖòN¶V ‘Q1v/Ž^_¾~=;»¼¼<úá
¾öH×^K¾–„­al‰!Öwäiãm²Cð¬N.»©ÃYYcExÇ'¡Ö ºÒ7¹šrÔ·èji±$`a“j›³ù~[¹ô)k.m)
F
|Ù´Uo”N_oýî,*Lì-Fó¬;š—þul¤¾OÇ>Î”°Sè 7ŒØwÞÞFa–ÈÞ¸BUVyÑÅÒÒa™a #SkªZ
ª%SÃßÜ“'¨ kx°´dý€_z«“~Ï¨>í ]?8^‚¿üªFöÁáþË ¨Ù…Ö­¦ ‚ ‚ xlíà’ø›¬·¶rºo®QÔ“5fñßk¯o0¨†(²öÊ‚+öŠv» ¬á6[¿—íÎ®®®ÎÏÞ\‚£s»&]Ká5ùšØ$lNŸÎFý_ªôk¶75úFÊ XÓ8	Í)óMˆÞAßRìL*"{CmŠä0(}SYk´lT–˜lÍUÎŸK=rY#°5"YÞ°µa‘U#ÖC„Ûæ=¬2í¶=ÆçOnQ˜ìó‹ªÈe—´D&ÙÎ×{c-òªË
.í1»Þàú¬"IÕ’©ýÁ8Y>æ_ßƒýý“ýŽå1±/§cÇë/8[‰‹ì~;¥®AÕðz9º¯±€«ÅfAAAð^n¾€§ÁØ^¼@(kSfø›±þ¸„­qßšÑÞkgmÊj·©™¸QÛsÃ¨-ôÛ?œNÏÎ^ÃÕ.-‘Š®)¼–|MÂ&ck([Õïóz—Š7m–Bjä@®'_“«9.9Ò´\ië&}**™ÏªÙZg“f¦™«_Ãò$kô•–>Nóèi¸$k¾ƒîQQ”;?><E×xqâ)™º•%n4èÁVó¢°Sázó±SYÁÄ@1˜¹Œ†½y·Ì³¢,«š¶Ÿ°ÂsµíHw›YEA5šÚWÆã'o¾zsòøñþrIa4Eág$Y#Ëegéì.kUÛG"fDœÜºñAAAïå†åAõ
•‡Ö^½îÛ‚H·5°œìš©}óŠ¢ØËÌÉÖÛíµÜSB6[k­µ×Pe™)	äm÷ì®a3];ÿs#¼–|­)là‘”Î†—¨ì%„OL¢F˜úñdj•YÍg§ùÊÅF†|‹å
\±Á–7S’tr‡)kuŸ“ÊU\|¤‹aÌÃ`âÙ3Ì(”S¾fŒ"`Œ±­w»óa7Ë»ó»‹yžî¸SŽ¡cÕb±“›¼£n·——óù ªºóÑ0+ÃJ™4;ÕÞ¿U­ijo›h?}srr²TD±£5™Ä¿þ²–›®ñòÔ"„k ‘’‡E<IS‡«AAÁ?­¹§¡ðüýÓC–²5ƒ{Ö>úè“5^ë ­­YZÈØ.6FÛP`À%Ž'³MÎ®®Ž.#ÐXùŽ¯IØÀ3òÈØÛúñJ`†<¶áà!|Ò_ÂR~T-•¬–wYCEPk²Ö
HÆ×HîUœLj<&ÇJ±'3º-sŸ–ËöïÖô5	[b¡3åÄéÝ9Cm‹Ï_ü¶{wÞ­FÃ²ú<H¼,¸Eb÷»ªÛkñ†awh%Í‹ÆNµk×?ÊÔž‚‹?]à/i=ß<Iú<Y+}õO?5QûtB¸]íø5Ù\¶æà®AAgï^ÜH²4>tŸÓÇ-*¯:	2Bš‹}ës]|Ù*æèKQ0Ð°ö²^º¨*X¶5r}H6Tk¼ËRÆyµ ƒHhŠÒM…/‹ö¾ß÷^~9jO··çø~R[v_~¼ˆ?ckˆ«5®Æ2‡«¡æ¡kp5·µÕäu)NÊ“®ÆpZ6<9 q£eÀ3úçƒž­…ªÙöþÁµ{®éàµ=_KÂöÄŒMÊ&kK¸	Yš4Â!ž|sÚX“ë‘;[½î`À!vèt´df
£%]Ã‹ÏAqš§ÎØ}Th°IÂã¡qó!¶#*O>û]íc”JEÈ×dm¸AÛÜPmÃ*É?¡…ûöŸÿôOÿú/ßb
zPÅÓ’¨µƒjZÿ(Uó šLí% ©mP–WéoÉ”ðç²§¢«¡€WCn‘×?’wt5ÀJçœ…«AAÁÏÇÖàk€–f÷Ü7fks”²µªçN;ìd0¶ÈzÝÃÎááá€¡6z\/§aA$lmQov5éZ:(»åk.lÉØälÒ¶}NQ8è Fþëø(ß¾ÿæTÉåM¡RþÞ }]†×\Ö
Éšã6ås{Z*)3#¹iOTŒE_ã³ñý®‰¬
{²nž§þ«öO-PöK (YmmóëcÐÔZ’&OS"Í½j¾U­mjN½¹Zo§Q„BJ¼T()û+ÄÕxöÔd‰E. i(Zi¬AAAð‹m\Ï]Ö¦7|!äÍÍk“µ×åek%"kCÈYg<FÕé"¨6Ì,»-.‡ªŒÆ¤óçËz»ÜrßJÒµ}_“°ÉØ@£l~íáýÉÑZ¼?}óþTz¥ŽÒ)nec·ÉVêî)f„ºÙŸÆ9†œ‹_Ö¶;6ŽŽdcr™d1P“ÇY¿é‘í¬SÜpï˜¹tÒÜG´Mü¯	9šÀÇŒvHM¦ÖNÕ¯õÉÔðoµyùv³~»AÌ¬—dËG…u­p!d³Sí‡	ª©˜ã|5^3W‹¤ýAAAðóYFLÖ®ÿÓâj×sÖ¬>xlíæµ×Ê×—¥Q=:—”µ‘µAf²v˜ùž5ÄÜ(lE/ëdyá#WWï¶ÐµÅâîÎÂk ík-a£±IÙÄ“'Ð1¸›Ã_Ñ­	‚&k
 J ÒÈZ&bÊ”A\Eøæ	üMÖð`}ê9KµéíÈúÔ™T5:Ty0
/¿ýƒØO™Ž,iqd7^?{9ìÈÒ’§µMícëej ÞÔ‹m±ÝúMf ’µ”…¥‘µj&v¼AÊÔæ3¸š¸W‚ ‚ ‚_Äg°5¶g›Í®ÑœÈ1ù.…äÆ5[åYFÆ‡ÃŠ_`¤Òù£fv‘ñè`|’“Á‡fWùz³ÞÝ%I¾–l-c£²¹³ÉÚöð¤gÍì“²µßR˜hgMf} 7£aä|WñÑ#ô*²&Ys3±œ‘.,>ÆÌÆT%”Ø´Ó½P#/ïüÃ~Ìö1sÒ¶–¸ýrdiø
‰ZÛÔ”ÿq_ÕÞ‚…S_<º¸r-3ÜÑ­gtW“¬y`²l¤¹Z"\-‚ ‚ ~™­}QÃik¨=Ýˆm\›ƒ‡¡5P11_?A"²Öí!eÇxHWCöÌ¨3ÛÆ¶l<îœY•ïnwu}Oa[,<¾ö2ùš	›ŒMÊisäa	ïiÌÅü³¯ŸÙë³7Ï~MkïßæX=-|”œé	ìÁ	êdÛ‹O£ n}¿“Ü¹«=òI:©‘7ý½6Õ3’áœ¾e&_ûÉ3ö¥MÎÖæÛTR%E“¥%O“¨™©1¨&Uk¯”©z·¬VkÉàC¿DTBk¤b¥Œý®j30W^‘e¬‚ ‚ ‚Oào¾ ¬9:tÍ¢k
¯1´æ[×þX:ý‡åpD9³€Ú€Õ¸2¢;C?&{”‘fÕd2_#ÓH
°iÛ	›ŒMÊFikñ5Ë>Oýbuvv†Ž³³gÏàm«‚ÆæÒD«b¥4¨„·º¾¬Ñf{v¥Ü¬YðjG<‰æøÍðúPAÝŽYc‡£PÖ%SÙ?³@Ò&kûžâöý^Àõ?HÍtÛ|6‰š‡ÔöLíéÞúG5¨7ëÙUÕ+¦ï
ÁŸÆßé¿…¿¬*ìh5ÐÈÚÕjÒÈÚ»)=m®Ä"W‚ ‚ ‚O·5ÉÚµdmþ…²\ÖP•àáCÜ%d)ûGð4fóGÍ@3ùwÐs˜Y"³l8È«I9Ê&ëëõn!a“¯é¼ìdl¦l’6”6”¡Ñ6P6
ÛªxóÌeÍO¼Î‹âÄÔKöÄŠµ«Õ#“ME8Hô0
Õ&é³©2A­ÔÙjû]O&g¯¶Ãíè}kSÞ^è¬‚¤mIÜ¾‡¶ÑÛð þ¢–Wt;"M“§)¤ö„¦ö±õŒ§ÁÕàkÛU…?1îJ¡AÞlÍßO•˜ ª¶ú¯©q…ƒ°Ó
Èk^××ájAAAð©¶æªÆâ¹!Sp²†ë5¡«õKc8._†hÙpgƒ1mm8úòà 3´nËé¹GÊ2ËFøðÍ|]7ÙF6Ò66)/àü·]D<·[WƒÜÙÕJç]§Íjƒ½ä²1›ÀÉ¤KšwZ‰$…¹éß«¦X°j­‚ìùw)üä¢Æ~ÅùÚ¿'"EÙ>.mT-Y›‰î¿ŒøYâž¦šLMAµ¶ªÝsõãv6«§]ü™«Êr²€žã"‹‡Lí¸:>6U«V¶]M®6'3ÇL×Ÿÿ&‚ ‚ ‚O±5_Ù(›“ÝN4"[c`­¬*žÝEK½êŒ†®-²†»s€Žñ"]äÝxÍs´r¶Þ1º†U[ØÈòxÎËÙ²´Ñ HÆö¬ªVZêha5TyÎZ²†.G	èmZ<]$ç˜_5674Ó-í[“	ÚÊç²Xˆ4	ü­³ë=½¯Óv6GÊ–¬ÍH'ƒóú‹p¼}n¸<¢Ö6µý­j÷<ha;C0mVñ·ëWJ8y,©AÕŽ-ª&)a?S‹´VA^‡«AAÁ§óù“µkw6_
i‰FŒ¹Ûše¹¼„®QÖP†¶Üñ«W#¥âul…$@ÿáÚÆÑÍQÇÖEN×··›û­Ùš„-›óBÒ¶ù®Å¶ynüfåÏ-‹éÚó‹‹§çgEõl!“«¡ö+…Ö„dÍâaY6èIè¨Xô¬Ô“ã4Ã{Y¹¬qª} ¥~lÅÕš¨ÝÏ…¢x´µŽ—¹ñ"8"4Q§ÒµEM¦Öª%U«·ËõŠ?ð˜
¬Ò>¼BmÓÒW;žT’5îV›šZ¸ZAAü*>{ I“°éœlÊî¹‘­´—5cØ—9Bk–g„¶F`dcBUË†ÖòáÂÆ#´«iUN6“õÆu¦FaKÆ&g“¶m^¼ØàB!j¼´6ña
Ûrù|9]®®ÎÏ/ŠGÖ3ãä¹‡ÖN‹<WN}Éš5©'9ÝK’â1ùIjb`À‰€ŸòÞ.±ïñyJèÏºq¹7ØQ”A¥­m’¶=kã•8…¼ÊÉÐPýBç†ëÐp‰šLm?¨Æ…‹ÝzºÚ.Ö…ÿÝ9…Þ(r¼ k
¬Ù~µ)¹™c»š»ÚõìGŠš—pµ ‚ ‚ øñ vOó3×`l®k€Æ&[{MJò¸Yöû}h˜mY“­¡ŒÐ‡Â´#6Wãƒ	"¡o‡]ÎW³ñ¨‹½Q»zQßÞCî-éJËÙÞ¾DÜ¢V­¢ü$`{Q]|·<¬–pµÊB@2&*ÅØ¼£ÇlÍ„&ccû0Œ5¨ðsD[¸º†VF
)›Š½:û;äª|úÓÈÚZ¡¶Oê–®†Ô¡Y­Ã%jû¦fª¦°Úí¤Û[íêuEWEZýÜÕz°´ò¸2&Àv«M|	¤åA¡©ñŠ¸ZAAü
 ªFKóÂ×”eE¶\×?î÷¨X84?ó…03«(ky™!;Ãœ÷IN†‡Ù çÜ+"'ëéÃ‡ÓÛõ5Ü`¶¸«ëmÁpc3kÃ£©ÞÖoÕ2jx
ÃpÛE~õâÅò¸{±\å£e\2EÑÌÚRœ¨-ke1LËzÝ¬'KSMÖ¬àƒ6h}>ˆ‡°Oûsuö¬WœA˜öPjË$mµ6ñäÉ*™_há]CÉÒäimQ“©)¨f¦\ßîàjÝîtûÎk†¬Ô
A“®–{b‘râ‹ µ]mŽâ§«jˆ¸ZAAüÚ×DÊ2òãâk!ÝÖp_^^BÖ@¿	¦ñfvÈŒ{Ö†£ƒ¿íGLãœ"C³Ç'9ZxâÑéÜÌ"IVN&ëÙt¾»_ÌËöK-°.Ò•­Þ*Ðö6»ÅÛÍ¦®áp[ÈÚv»ÁýoW°3óešÏ#Ô1i˜·è$n\9,Jggóã6©y—ìytÍ>|d/ì´‰.küRá}ÊcÂSÉ®Î<‘%pøÂª!Y›ñ	I\Þôl©Wà#ò4rÞ6µ¤j$/ÖÕ±	Z5›iá¦¡úUQõŽ=²VV[‰ÿ/”ZD»Õ®}·Z¸ZAAülÍbj¬~tæ3ÊšÙZ+ºf²V^>î?î——}†Ò^qgZY;D0µ/!kp5»ó|À|‘ÌB‚©ŒÁAâúå¸Ó™O‘Ý¿šNç“wÛÙd¶[¬·w”°»E}W¯L?Rïj:[]ß/v4hp›ÍÍ/õv5£·m¦k¸Ç²7Y^0ëã <ÚÓ Û+åìÏ3ô³»r<óœ†•bo„­ôa6Ì¼Ò™lfIp•) ¶¹a]==ëvWK÷&˜Ó–¥ørOÚÚ;Û2¿ØâÐ™áÉÓ\ÔÚ15â‰9wë_jy'tÈÖ¬‘B„ž²ßs‹”5c*Wï<¬ÖrµájAAAð+ø)ü¥ðó?×µ×&kKÐÇZÈ¯LÖQC`íËÑè«¯F#t°â±ky‘œa8Î† [‡ÛÝæóÃr’Ï®ûîj{;)yÛl2¹½ÛÝÞÝAËh5·µÝÖ¸ÝîžV±ƒ£¡~ÔÛ¬;CÇô°\n^n¦0°nçÈÆ½œfÖÍºƒî =ð­V^ÇÁ ë²if5@ïI‘CíÜ´lšbh^WÍÍÎæÉyz~-.~e;0\sÈÕù²×[^,ÏiNô4å·Ü¼@e`d_Û’¸ñJöfwNçÆó–¨[TÚÄÔîÈ–?-|tÑäƒ=Ò¶f!(£ƒyeÓÕ~p[»qW#ÉÕXÂÕ‚ ‚ ‚à¯’Â_®iÛšñ"Û²[eU2ÏH9¤šå'°ÎH0²†s³%kžÀ¿Ã÷,ç®6t«	:Çe9*³¬,3FÙVå œÌÿ§®ïŒ[HÚl¶¨i¸Áb‡¡Íd¶©ï×“u=›ßî63|z^¿\Ng³UÁY60Â†ûÂ–™it³”£ßºðÌuäØ<ÜYU'¦h•¯^lîcÔ|¸èx•Ñœ| —‘Èõ²$kVdõü|U-¯–çËÙŽF{bÆK±áõ“bmZ")qÃýQÎQÄsišDÍ€¨Õ^šš¿Æõq±šJ/ËÞÕt7¶T+•X„ûÕW»Ñ
Hµ=¦†ÚãjŸý&‚àÿØ;{É±,/3v³ŒÙ†®{­ U‚‚Y›^þ‰è?³Þ:3éi:iC=†DÂ¦`†¢š& ¶0„ 	RžŠ‚5ôö}ÏÑÉ Éñ¦ª×9¤««««¨ïáœ{®ã8Žã8ÿr	Õ.®á$_—àÚ?(k€›®5M}_ç÷¶éÚjW®q½Ú×­%¦RmîÆá2Íò¾&FBñ6M6	!IBÕ6Õ§CUfX®O-–´ÁÞŽLŒ”8Û<ŸÏãáP…vÎPŽ¶íšª;!:t¢AAÖJq5[ L#X ìêT$‡ñ‡†–!ò&SÓ˜©¢ÀÓpÔÈö3?Ã²†þVq-sÖ€Ÿ(*zé²r-D#è4§?ÿço¿MþËÏŒm\üi­¸¥¡æö_ÿÌÛt;99Þ!ƒœø‰yPO#ÇãSS÷EÓ×±ÞÆuÛÅÓO]úÇ®J­þ­üW7ZRâj«áTK#»šã8Žã8Žã|%[ûî£!uüMÖ¸níÙl­úGõ¨ÀÒj\×µÛÍj·Ë‹»›»”¬ p3ô’¨¬á	²VäY™”)êù[½ÿP3*‡oð²6u²Z…êp8~š_ænÆJ¶î8õóÔ/Ã¹çêµ®:œ{xB×÷]]ÃÑ`[Ô¤,£cÐÀðãiš• ÌÄ)ñ˜ˆ»á16ºŒn–Q%…Ð}èÑ¸Š õ¼¦Ðð]² ÒL	¸¾G$ê/ÓOÓÏý4uÝß~§‘¿¯Æ6ÁætwpœqÓããÅ	„_ü$¡»…áµF?þûhÁ¤k›@Ö4Ëß3p•Ñ€{zgÃ¢"<k˜ZS˜«n®öIâjJç®æ8Žã8Žã8_«ÌÈóGE7\{^W3[«pV\«•ëëM]Kÿbwµ»ZåÔ³+Ö¾ÿžâ–ç"kp±*Y¾.99 î–éj¶„Æ¶©ê$y]'IHu¨úñpžúa¬*T»®ïu7Ç¾M\—‘+êV–-†„ÎRÃw$¢Ó4°¦Åü5œEÖ8†¡FÐÂôµþ‰úÆ›AgÁ›­xm…½fGäÏŒÆk2$‹Üÿwó3ÂiãÔ®»á—aì§E-ç_º‘ÅR^·'@‚älCÏÒ$!`P·q9Þ2Ú¡“ÿfÈF45‹¨1ôå3scXgÁVÖQ)Sþå3ô=ã ÝÆ-£pÛºÁÉ¨šØšÄÕö¥{†«YHÍs ÇqÇqç+…|å­áö‚ÉÚ½¹Ú5(ò®vUË¶k+ÈmºtÉZ’ÀŸ2­á/Ó8›j‡9yÙÔI}€¬10Vâ,ê**h[¨ºó¹kÂ&ÉB5}›S#ÊdåÐ·#MÊ‘å![§t¶ô­æÏAaO}*cc6øý‡F$ì?]31ƒ¥qøt’GœËžÐ[ØZ½ÞÊ©‘	šG¨²¦cúZ´‘öo?Hl›î˜–xœû¹†a<Ó,ÛÌÍã¬Þ6àP~â‰‹ô™È¾e%Má/ƒì„ ª†ú,C<R	•ˆ*.UZ)Êb±ÆHÖ<í†³€+‹H$UÍâj\¬†Ó ³}÷oŽã8Žã8Žã|Ý2#äÙdÍ «ö†èšl’½Ùl°ïÚ·»b¸Ó‹=r«5áæ|Z­nŠ2Ð¿ò’pÛŠº†¦Gb€É‹Mê*&I&u$á[±d°­Ä§e]ÕA8WÛÕ,-™1b—’¥y’$xÏB¦‹×2­ !$è©`\;0;ÈZ½!W»„Òª­iÛŠŠ&9²f¶¦?Â›`i„DîZÎßÂmëßFhØôÐ´3JŠçKå”»ËÁ×>ýß™°x§a˜&ñ¶A­M[IÃ§…Òdæ Y8ÅÐØpnÇä–v´4,@ÛÆ ÖôÙ˜ŠaF<dAˆYÒegµ…Ji+ÉÜ¬ú#ÐûGw5ÇqÇqÇùšü;‚kÆ3…ƒfCî¿˜¬)\¸v¸Úí?B×v?îŠ|·£~åXxA»* Tlus¥Q7¼Ò6ÏÃŠCWx*€“¼Å,+Š)V“²à‹$äã1ƒÑ·ð»åš±· Ìz	¤c4²’Çð\)KÔ¨%‰àMZM#
e3ÂAšæš¿6¬uˆNr:á™ò}ã,€oÖõVdFCkÒšžú‚ˆÃvý)˜ÝñïÝùóñ<‹OMØž€öÆmäÐÃmìíi[óˆbûÊ4«¹(L"þÆGõ³iŽÖ¡ššplÃ¡?·ëŠuO¶±ŽD¸l¤¦e| A¢»‰uÊÿ­UµËbµ£j’iüÉ]ÍqÇqÇq¾Q*$eMl=åË‚Ø|MÃk´5†Ö lˆ¬aß51²ÕNl­È)j¸ß!ÈVäò&‡Iaël€+úÖŠ*W’‚á7¼(rPH´-ÐöøHÙŠi†=.Ë º*s(£m% I	Yã²Hbð“EžD¢6Û-Å­FÔ*=„'x×hñR[«ù`>h.¡5iì¶ŒØbÄ`á¾nÍéÃ©«â¶ïì%=ÓÒ˜¦8!ô%7øÚÔŒ¼ÍýÉ‘ƒ];Jï8öÓDÃ|´Ìu<v=ÂqÄ<¿¢Ð±KÝØ5MúWâ-,ÄlE¢O¼0”Z ®&°dýTšÚeµ«átWsÇqÇqœoŸ
©‚&-ûo*ìM×î¯qÜÞBØÐð5–äguH‘1TˆÄÒ58ÛÍÍÕJ\¡¶¼hòÀrÿxÄg9_‡‚’Ç©ô7Úfa²V$ªº¬\’¥e’pŒNÆ`^i[
1fKxŽ7T GûÆÖh!“ªhîÌv<5 :™«±w’'¼W¡¬q>A´¹ˆ›í/e&k‘ö²mñ"¾…¶­»iœ¹¶lŠÍør<ºø ±éëûù…c2œÃ|GÎŸû	
‡>|–Méæ	*fä7cß·§4µLÌ¦fkáBe(q]2äˆÓ\PÕöûöKkªÆãÓ[Wó­°ÇqÇqç[í¸f<[#¶vÁ’!—Z#·¸êkp{{å;Ø.¤B¢Ìs!ïPR‹>^!0&™ùê†îVà„Ý ˜×²-²–Ã±ðL³£ŸÁ²¤šHV8šˆW†ç¢œS–ÉJ\LÅ,§«‰#13Rõ„=íGj‹Ç6µ.X“B"§Ê0ZQ·§ÓééT===I=D+C²­U×Ê¸Q_ËLÖø¨¨¬ñ]ô%Q¦ª]·S¡«ºFu>„zÛž~ÕõÃ MÓ˜ÚØNr‘ñ8ç66Ì2"^7wg´ë:ÓÁáæ1‹ÓØbÆ¿“å=êFp&fÀ7˜@‰È–üÕ¤Ñ…eDÕö¶V<˜ ‰xHÇqÇqÇù=R!ßy#k<Èí=¨ï¯o)k·×bk«‘š¸P^ˆ›qùšè%Ï@Õ,çEÉâ¸.<ˆuñ“$‘©Y€q©š|@AÐ¶?KÐgTOgI"¯àR_V‚j#¢LQdÄ2eLmçºäù5ˆŸi@í¡­öû‡ê¡jå '€w2ƒ	‘EÖà{µ¸¿üq2hŸošDÖ€6]'½Cßâëº=ôXXvî›¦ë'˜W?Ný4µó0ÃÐˆèÛÔ¶G‰¿hÎÚ—¹ªÇ†ÝzÖ–”TðRÆÖ¬,E/ãõÁ†8#,S›µN!°Fµ°—ÀÚaáT£¯}tWsÇqÇqœoËßÚÚ3ðná®Gœäž×=M'ùC¤DÖ¾+´²ÏZqƒëŠöFI»+VË=ÒÄRHYË1/‹”5©ûŠa•H:¥A7y.GÅKt$Á×ÍQÜÖ²F?¢¶Y¨+äåkú#¨¹FMÑÐÚ®öa¯u‰vl¨qè¦kü4k]' £N˜-y‘šIô•ˆÛ’	Gâœ_û‡ªïÛ¾kb|èÆÏ}Û¿rn‡`Úp>~>ÏÈì?¿ÌM53Î†øÚývvÛá¹qž¦>v˜>vüGg1ƒ‘øÆÌbÌˆJGN–ümÂ&^L­«m-²½¨Îç×¸ÚG^8ÝÕÇqÇqçÛ/\3žy-¼ÊÚkxM¹×Dò!sÊdmGV;)ÉZ#µ+VÛÂ3Œm…Á„o‹2eÑ7!ƒ©¬ÑÖðfÅ6†¯•'ÐX\\³ücà0½#Í“ŒÅ#Ê*5-ñR°qSbËZ4‹ÔTµGO"câg{­yˆÞ‰O<%Âöpz°õl4¼Zt~‘q5Õ252ô357á´³×†ÈÞ:Å	_v”µØŽ}Õž0Š)Ý@÷šŽmÕ·±š b]q†#M×í8ÌÝ6VQ<0F¾Š*(ƒO[üÌúú„ž±)qnj+‘Y½²'‡ÃÞ2 ¡iÄt×wîjŽã8Žã8Žóùƒ¥Bš«©­Ytí‚éš@]ƒ²À×_+î$ºõÂ%;ª!ò†¦†¨š¨×ÍÝJl$¹Ôù/ËPÚç±ä£È]¾V,q5Œ³V!…’E­ô_p”¥$³¬Ìñ2K’<„¼¤QŽÐÙº¦céžjÕ…–3êÙžM«,õõ¹:=U@šmõºv­Æ/RÑY“È`e­ 	õNË¢Éšv8„8n[~Õ@»Fbp±šGüx†Œ•¡¶ÕÜÕ :Ï]ˆòó}[{éÕšŠÞ¥-3Æ"·)ˆl–¶F*œ
ÿíoV«‰£¡UQûèe ÇqÇqç÷®ý¯Éš!®v`]H«ù¦Œ?|mÃRþ„‹×îW[í ]¶Æ¨š.Y£²•ÅÕìµ¦Î%ÃE láÄ™XÄ’*F{»aL”x‹OìmHbUè@íd·"@Ö2ªOY‰B1Ñ2ˆÐ4šÈ«¬5®×È‘¬N3Ã!7Å$E’!8Uuí±ªò—-Âc¹Z	S‚<‰Ä)™(#^¸y##£­Ùwq»^hjL:T1€m³ŽÍ6d‘Ý­~·1Põ§b(¢nŽ
5áX™ñnd%Ûë ·Úx·Z% ¿ˆ©½Í€ü¨w/é8Žã8Žã8ßž?`ƒì÷X.$Î÷ÑµË¾k×·÷Øz`£l 12\X¬&Õ!¯Ð¬ð(¬€$:¢YIÂdÁ”Ip³¢UŒêº5iµ®H2Ì£ªñóø<d)ÿœ@ã£ó¤Õñs„åÔ˜6 Ö`³ÙZä“‰[•Õµµå	ã|MYÃr6òôÈ×Al­Ü0(V‹§Y(MÐGJd	ãŠ(š*”å/fÀªHêÉ.QãÝüO/6‰xL³(>Æ»ÅÅj‰tMßth­[bsc»ÍFv	¯%ò±fz¨®V3UÏÀL‡/WsÇqÇqœÿ§THãùÂEÖ¨k[clms}Ï]²yÁÖ@¡"¯nv&k1ˆŽ›D Ù
,õ!WfrI,ÃŠþuC[“÷%ÆDÜt4á·i–~JîìœI¾.GÙ I“ë°Œ-÷¸n,¦†SDMÍŒozš¥P×¤ØÀô
Ðež˜K©ë»6\Ã¦òd²¦Ë3G2U0MRd>¤¼—.Ú%²†+(‹¬2,­õ¢èŸ´Af81½gïdíòh?˜’¨QVDMM8ì-h¤ÅÔØþÉ]ÍqÇqÇq~'þø>¸öŒó½®Y6¤qnoqÒÖÄ×®ób§ÜÝ°$CkwÅ÷€!6Ñ­d‘5f:†2ðN0^æLzD““5Ì·Õk‰´ø<Ä²T[cQÃÈ]³‹<ÕØÓõõ,9‹àQ2üÌÕUí…ì=4s¸v²†S…íU ë‹X¾c$rQ³tG–7— ™Ì2Y#êU2CÅÎ¬OÆUÃMÃÁ¾ÙYi²Æˆ;e)7#1tº¾‰i“Â6%ETk@>JPmÏƒÿ9_c¥ªñ YóåjŽã8Žã8Žóì½ŠãX†a6n†·H©£…FP AÙdu}QÎŠ™Èá€tEC'ßÀ$ºÃ^Â¾?z­ÖVï°YÕÀ÷œKU]Žúá;ç;o\s’öfQ5øÚB‡z ô5sê(k¿> Æötz®=ŸéjŸá^–28ñ^58äîzžª¶¬zÔœeM7~/òîp…¡ì§¾—"1í	—÷{p–ó&ptCYõì›ÃH¼ã­‘¨±»ÚW4; LÍá5fêØ“øp—8ÙªqyB@<®Á“~ADê„ƒe¶.ÛœÕó‰¥ì‰ÓkçÙù“Ð.tøÇvHÉÂÐ`kÏ\ 	–ãUª–°
5ÍEµ\­(Š¢(Š¢(Þ>¸6“×'¯eóZètòÚa`ÂÔ_O,§‘Öö N;HC>íx¬=,$ÇÈç%$\Ïr×ÚgÍKH`jÚÞ€ÒIâÜòÚ¦±À4t’aÉoUCOh\25rS³µä…fòòò—«ØÛhÏÅÆ»/6¶a€#‘ÎDF¶J[d-JfEó&´šd:æ¹ËšýN‹<'=ë¼)	·ñ"<áCÖ÷Ó>Ÿ…èûê¨¸C¿?’AÝÙ6{†ªEdoqµ¨ªºÚ®VEQEQo\›}qd-¹!mk¶ÍjH‚ÿùwÀ"¹w­kÆ“x ”5–íðÙêj02ÉZØ5ãî‰Ò&?#”µ@sc+¦}Ž^ÛAÖú=lmXüÃý‘"¢j¿y‰ßº/mžÑ¤gKÊÃ—oè8¢¬°	ªŠò’Õvße›†ÈUhwYÛK•$ks¯hŸ™ŸqŒxuÄmI‰‘^NŽGUÑ‚ÐOWBnÀÛŸ0ÍWèkù‚Xéj1Ù„ÕÐ6a5T–
«EQEQÅ›&ñŸQ :_BlíÎ…0&c,k%éˆö¯;ûÚg‹ýYneY3»¸›ibqŠ¤Yíš1Ö†‰^‹ý`,–µÎyJ†cXFgáµ‹–,îS»(oˆl„ÌQô×¤ÒÐŸ«LÉ‰0ý<V„í OPpmØ£$¨6­²F±Šˆ6¶e–WANšç›ô¹(©üŽ®äjÛhê§ïÇ3õoá±t˜W`-iEÔ)¬¦/ÈHaÑÉ]]âiìÊÕŠ¢(Š¢(Šâ­ppmfa~mkæ|§ƒ±åì5ˆZwÂGàR5å‰Üáº™žDÖBn3ÿ LýÜ—6Z²ÒÃ„²ïK ð7¤ýpjC±ìÄº8O?T-.²ÄÍVQKEæ­„ôÌ5Üa»äàµ3É¾ÇÖ•#XLùÉI?Ø€LÌä^§µP‘^'!³’-•²–|“V=ƒ)t±¼¾åø®ö˜Â4}š€T­€T}>Rµ£jëN¾™ØÔR²²NW+Š¢(Š¢(Š7Ü¹öc[›ÉíÎeëkÎ72H7¹"RæÖAÖHß÷;\FoK‹”ý3iC|Þï‚ÏXkÆ}Ûï`yNÛÑ÷1äØt"¹ÙžijKN¶K`žŠP?£QÐ´Îý@P´’Ÿ`Àny\^ûJùójÈã»Ö†a9[!4 µ‹!v¦‘ÿ”H—¬g~K¾˜‡f’ Ò<î5$w–Ã&;â'<ŸH(bUsHTÕ–(!e–Ü@ÆÖOKùø¡¶«EQEQÅÛñág×^1‹Û6ÕˆØf±¬1Û¢l²54 h¶Ýiì§fq£«9¶6‚ÈZ³óœï”™_º7N2œn<AÖ¼A®G;B³ImÙƒ…
¡SÅÔ,[¶µYv–à.¨ö5ÜFÕ8™ð¸ÅÖ.Dù%ck\	yXñ\“>^ŒÍ+‰­µžßj"t¹ÉMbÇ`[¦ØOëÍ~+kÝ˜¨Ú4LË–¾óE¢sý¯Íj«¦¥ÖÈ¢(Š¢(Š¢x‰Ff”-œ¢¯éº	°!$C[C»s@¡±©PØ¨Ud<™±W4íéIw'oMcÖÈOQs–þafþ±ßñ	*åÀ£›ud â†ª&¾¢x“Úêj×›]D&Â†!ÍPBPÿ°®EÞ@4E®æWÒži!£k€z(dA{t
¯yWÝ*kñ*{†#ÚJKâj›éÇO~7øŽiDåËÈ2˜ù±»Hüt¢Á¢µ«Ñ^âj—Ûºr» «%EQEQEñöü„D#óüÚÖT³{m³Ò¹!ÁÆÖ|[Ç”#9ðìlîc;õ7LHÜvt20j46}P×L-Âj(Ö;¢¼ˆÃiÆéDÎó›’8æìkþ£TIúMoT2·š?ã¡[RCªþ.´³·Ê)¶†WCŠ¶e%–'.ê4NŽ²EÓé3¥ƒÕúÙî~iWk·ö-×8!¢SëúLqµ$ë_£j·ÄcjùVP<¨%EQEQEñ>ÈÞ:›dÍÄÖPa;cœ‘kÎ‘a@£³¨jl c„LÞÖ¡¿Œ]!cÔmêÇ“xÂÛÓÔ…i 668Ægû >Ú9\õc¢~¶yuuq‡Ö–4?ÒÏ^PlrzÌï g†„°þ.ÛQøØ5å†üÒ*›^Š{aB£°Ì“Œ6yG±ñm´‹¦TñSý>Þ†D¡¼á`„©As­jGÛZÂj—…ƒjRµ|?‘4ÔÊYEQEQïòˆìÇÒr	°­Á5]Î06–•Ãû£ j'g£x#ÁˆÍè†WôûÑ´ù=ÀÝ ÷;düÉâY¦–¼Âá/ZÈí*f6"ùò>µ%|4x™?~ÀÎ§m+xüe‘µd…¤ª»<³˜óy“mdy¤Ùu+t7›åËŽ6Þe-½*_äQ×½E]à`ô½›~'ñ¤çx£ÀšÖŸ2­ˆIrUµ‚}Wµá ²@EQEQÅ;®I×^3»x[[9+Æfa3‡¥?,0(Feû…ûÙP¢mš¢Ÿ©aÎý0ø1ú½5ÍÄÖ.[~÷.,TX:°5‘™±³Ù’¦	Ü}”“|øYgcg–žv]l×m„“­EÖ —CŠá¨…šm?´œ+ì™dÒiq‘5«[hˆG¬dÂqÖ}Î™kˆ-xhü®´m
¨5£ÖšöÌÖ¯òJÕø-ñKú.äµ²(Š¢(Š¢(þ^º6¯#ÖˆÛV×.¨àvvÁ’È-Êp†q‰aÙz¦³ÙÐTáf*>1¹xy!ÙD¨H—tEvW§6«ˆÕýšL„ª&~Bp*§Gý”¹o[s(ŠîïI4âØÞ&ºÖ3¨ÅÐ3ŽDÖpúõÓjØZÖ5²¦CèxZÚ~|M"âŸ€ºÒ¢,!6½Û¡ÒÓPáià•×Êfó%ÝUm‘TÕ:\­(Š¢(Š¢(ÞÿÖµøYÆac»¸(Èiû-„©¹°Ñ`–s79ã\Ñmˆv,ÉDÂU¿×‚~M(â°Ú7vQ‘ù›™£jBÁµÙ³±:^ùÊÕ…(nÇžxF]díËZ“öÙñÐêE‘54ØT¢c­—B®6Ž-Gx†sNð)uö7»š'€§ãj¼éÚ–!µÁIXœ …ðŸjøe¤àß«Æ>µÂjEQEQEñÎHiëg¹ñ…åÎ6¾–Áù/…µC‘½Ñ(ÇàÄðÚÐ€M]È/•AÉÔ@H\úÜ\0[M]²úÛÕ8öÃ	Õ¡óîµÛ÷ºöÄú_;ÒÖ_êxfvÜŒ²¦1zC5Ó£å©fañ:ØÞŽdóÚnÜ<ÐvÊwGÐÁij›¨Úê´s€Œ¢XÑˆ‡V+Š¢(Š¢(Šw¯k±µ¸Z¼-Êâl+öÌùãpÿuÍ„â…ázK¢þSžqqd-–&^«ZÖBæ 6ÛZ^ZõÏñ5§21g'ó÷éÜ	•€±#Ü½ƒjGg‘[62ß é›;ëYó‹	[ØVƒÛGÛ’žD‡"ôüÅÃåè¯ÕŠnG×™65àŽ—:»(Š¢(Š¢(þº6«„ Q3’¶œ¾¶ÁÉÎTµ™Ãÿ^Ec	á¶ªÚ•—%Ì0ÊÇæôŽè6Ê^4 U{Í?>JÑüzoÌs¢kìõË”¤ã’lÄÆf|2ºvê2Nû¶•¬-ÈÔB³â›YKÌm}G·-àV?‡ÕŽÊ*¶ä	ímUÛšZø¹V@EQEQÅ;Ïã!ûK^ƒ4¡„Í>¶ØZ:9ªKà(“$ä6äÈ Ë‡LqÑ¨¤A‘h)E[·¬aà¨ÚÑ–½uo›nfVÇÖl•¶ÕÖ`³'G q‚A‰¦kÚOÿB„­ÇØØØŒ?–µìió…´JåïánwÂðÔŒ¼YŽS;R(kÒÌêÞL…ØÃ·ªög…ÕŠ¢ø{gŒÛÈQ€„n°©Sƒ‰@€‘îâC1SêÐ€¬"BÉ ¼€“¹ÁÜÁ¿ª¦ÔÛ —KV ©^÷t÷ER«~÷ÿ!„BøPºÖûš´åÄØZwˆÍPÔ•zÄ­1¯ŽèýsÚ×jÜÍ'[ã·Zj5éWSÚÆÈŠ‘²æëÕí âœ»¿ïžUyð{ËÓA¹¡Ac“®ÍùFêÚÞWÛ—¯=üþ ÷šÝŒ£mùr/Y3÷¿á^
W¶¶EVRc*\%jNÒïc~ÃÌËFÑößtr9ƒ¦k	«…B!„ðqX©Jöm|lÖ†va“aõ¼=rèíÍL'ÎjÆI2êjö$\`€–…¥¤>²@Õd©xi'ØÜèjbb“”
%‘°ÑØvª¾ÆÛCÝãô­ÍÚÖÛZ»k¥Ô8ìåiß“‹lÉ=¶Zø†Ô.OªMhôZ4b¥õ95“°Z!„B‡•ùß”µê¾N45'öÿG„LLãà›©èSˆèÅIŒl³}(¢fNÆHÏž˜cÄQµÍzµ¬|üÌ"wÓ¿’ªVÃ„>íøšêeÑ34©b[ Ô¶…ºé¨YK	äeNÒïg¾Î¤—”¦)ñ#kÅ®Ôº”".>GQôY^æYWÊ`‡B!„ð9uÍP0º†^Ãu7Ýqi'{Q6÷³û¨æ`š–§-êésð?uTm©Ž|+]§Â¡5¥V©QNEùš†Ÿ|íÇlk
wÁ¦˜%²€bÁ±jYï÷àj¿©>6Gèí)ù÷³€66=RööÛâÀ\"«Q
©jÕ»m£€9sBkûÉ×B!„ÂGÂâ²Y°Ò+ëÓtÂEi›^‹‚µiNb<µ$ôÕ.LM’Us]Pµ5Tm1µôéÉ²ë#>–_6sf~“9×È45[{dÂûš…MÙGP‹í;Ü¨Û=·HŽ[ôzq/EÛ®¶SÝ)µ®¤ðþGcQ»$e°C!„Bø¬Ö>¼fÆ›GØjâ6ÝI×0¾‚³šTˆ–¦Ÿ½ÿ}|KÏ!Yw›õ­7jSŒNÔ÷AÚŒ
 ¡Û	8ªDµ±‰–µ¡&¸âÊÙ¾Zuça+;$ìj†?F¡J`Qk®Æ¡…ÕþÁ
ª–°Z!„BŸE×®«›Iñ5“¥FMþfü´!7ƒ¹éÍ¶á¥Ê:?svÀ¨éTuWJÛ ¨ö
RTe6Í˜Ð©‡m;$ðVÍa¢¨ñsNÿû³Á ,þeq«Õ=úÃN
wPÛ¶|Uo¶?%mw©ÿŠätƒ»ì€!„Bá#³ÞÀ×0ÎS¡[+Ú„£°¥ù¦Öí©môùêâÌU3&ƒ{
Ü3Uäõ;üp`Ï²vâ ê‰Cz­áråi‡Ö0T;>öYG¤lÑÒÈŽî†Ûj*¦ñp8ðMÂ3>³¯sÐ›š9¡µÂj=›ä€!„Bá‡×.û`ÛÏÚ@u“»uO~zEÕzôy˜¡g-®&u£©½1j´Ú@×æÏÅÂÂ#U{Ï/M;!a#V6ºš‘lí´Fí2:V)§mŽh`‡Ì€Ö¨¯ìB“ÆšVä°Z!„BŸ§ÝXêkc¿ìœalLM(tkü¼»¹Ä•ÕF-5éÛÝƒFoÖµÙ©i·.ÓˆÚ¹”Íù!ÿÂ~Äè•Œ­ºùCêæ‘‚¶³qRï€¦ñ”šPÚLãÝMŽo¨Zª`‡B!„ðiXÃ×^´Œ8w¤ŠV¹Mà—¿r5füÐ4j[dojo×5'˜ÄesãWa$çêgJ7D6 Ç¢¯áâðƒ¦¶€}¸Ä¢v5£H«…B!„ðuX­ß¨kN?¢»†Ž}y¼dôD=“±ÕÕÅÔþW]spMfˆ‘ ÀfÎ:Ãæä˜‡ópÉÑgÙHãîÖ`Á¶Aï4S52¢¡wÕ¯£j!„B!d;äBÆëO¯ç”<]§½6¢·&S{A¥¬yÿ£EMO½­q?¤Ï°ÕÏNþÁÉ<zxÄà=’5»éa­ˆxÃšÖíMT-„B!„øÚRÆE¯ž4z6¾ÛÊË÷15ë¿G¥žûßEe¹ÇÞÙé:³©“áÒ29šE®Ç’V‹_FÔÚÉ½¨Z!„B_“Õ_{»Çž¯>n:Q+Y½ëöÏr5ŠëPÅlÊZOçiÂ¦%ïZHûÑ‰×jv5ÀUT-„B!„/Êjõmýva=¡/côè‰!µÕŠªö¾º/«ÞûšüMå¹[dóT‹vŒ®e¤bô/®®3é0˜sQ.eÐÅ¯©ZR@†B!„ð%„mA¹ìåîÕ3Þ0;--jß,jï­k*¼&=s\ÍQ¬Za4v¶	sDž/mCwó³½]röLWæz>–1ªB!„Â¿ìÝAnÛ0ÐÂ]ïÃ›9oP G¨F“	ATlÇSä=J2E9NœÝÇHä¶Î¹=¼ÿÔæüñù7æÊn½æYZÄ·hÓü³ß¯K\SEnû•‡M¯crþ¥?-¾Q–TU  Â’×2°=T¿p	%ƒÚRR{ÂWm-òY…ÆÈkõG¥¾æµ±AÉ#fEb«H†:™ôlëÕü!SÚu	·µ£¨  ß7°]ŸØþ\1úÖµÌiÔž#*‰§7çŒfKg,äƒ•ÞznÓ=‘ËV-‘Øò5Y´õ´WñÞaòú•Eµ£iE  à[¶Jl+¤Íí¹9­ªŽ¸Fµ94Õq‘ÙêÊ°¦¶!óZÍ²p–[•ÝâdvªV¿jÿŸVQMQ  ¨Ä¶øàck£~Ô*¦==§Íåµœ³{ú“1þfôöUD{Í“Yí&­)ª  ïyWdF¶½Ð¶¿|ÚÓ_ë+#¯õ)«…sÖxÏÃkyí’ºN·'5÷?  «lou¶S´zl“i™Ò¾ìÌ‡5®&½nì5P#=öì÷¼{8m'¸xk^œò¬'Õ  €;Th-Tpk±Õk/á¸øy[H{òl#ý<Ý¸Î#¬mè£·Ê‘‘Íj¤>ö½{-Ó?  ×;,¹-·üŒ"Úâ«ŽúZŸCØþÊÞ£ÖÖ+¨e·O•·<,Õ   îz|m„µ½ý’ÚFÕ,¢^NãÃnMjŠj   áPy­×“jsÆÚèî”ßú4"©  |<¯{UÖ¦øµ“Öú¸’GI  àÑÏ¯½´Œ`÷—ÊúAMR  Ø-°ål±oMè¿Í$5  €O²ØÆŠÙ³-;Ð5  €›Û–ˆi‚  À³ä-‘­}B\‹õÃ-¦  ð¨ÄÖcí^MNøË¾Û ÃPDNm!ï¿1D©(@êNYâé;  s¯"G²½ï´Lw   Sµì+[=i´­Ê÷4  €ÏEf_ÚnÂ­öó]fK  øW,-‡5»
                                              8Øƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÚƒC    Aÿ_;Ã                                         À.öšCëþÚ›    IEND®B`‚‰PNG

   IHDR  ¸  Ð   eÌâ   PLTELiqÿûßÿüÞÿýáþûÚÿúØûð°ûèªÿüáÿüàÿúÒþúÕýõÁÿûÞûð°ÿú×þ÷ËýõÄþùÐþú×ÿûÝÿúÜûð°þøÎþøÉÿúÖýô¼ýó¶þ÷Äý÷ÈÿúÑûð°ÿüÜþûÝý÷Ãýõ½ýô¹þüàþ÷ÇýöÅûð°ÿüÛþùÍûð°ûï°ýõ¿ûð°þùÓûð°ûð°ýõ¹þùÏûð°ûð°ûï¯ýô¿ûð°ûð°þöÀûð¯ûð°ûð°ûð°ý÷Êûð°ûð°ûð°ûï¯ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ÿûáûð°ûð°ûð°ûð°ûð°û,*ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°ûð°û++ûð°ûð¯û))û/-û31ûð°û((û85ý¨üHBû=9ú2.û)(û-+ûð±üB=ý”~þûãÿýãû)(üñ³û((ú1.üNGÿòÕÿìÏûð°ýè¸ú+*ú/,üTKüZPüoaû((þÕ¼ÿäÉþí¿ú2.üñ·üòºþÂ«þßÁú,*þ¸¢þÌ³ý|kû((ýá±ý‚rýµ’û((ý›ŠýË£ýÁ›û))û((û))þ­šú-+ýøÙÿöÚû)(û))ú+*ûð°ûð°ýôÃýöÊýÕ©üi\ü_TüŸú*)ý÷Ñû))þØ²üŒsýŠ{û)(ú*)û*)û)(ú*)û)(û))ütiüdXú+*ú+*þìÇù*)ú*)üwcüò¸üõÅüòºûK?ú”rûQCûpYùD;û·‰úw^û~bû:4û”qú€cûXHû¿ûÜ¢ûÎ™ûeQóbQûkVû´‡ûlûŸyÞ1.û¿únË(&û«ÖPFûÈ•ð¾šÐ(%âkÌ(%Ï$#û((û))õ''ø''Ö""ñ&&î&&Þ##Í  ã$$Ú""æ$$Ñ!!ÀÉ  Åê%%»¢àd†   îtRNS ¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿	¿¿¿¿¿¿¿¿¿¿¿¿¿¾¿¿¿¿¿¿¿¿"¿(¿—ˆI¿‘7Œ=%@CF…¿L*‚|.yvR\p^djl0Y3”:Ž sOU–ga+þ5šüûnûùÔó÷ážõÚ¿¿é¢øðÂÃ1Ã4îìåØÈÅÂ§¬ÍÆ%ÐËáÏÄßÐïØÊÍ‰ôžÓ,¾Á¨”=VX°µÇçëÖoºÇÜÝ±fwÈDÁ¹äéR_ÂKXâµº»Ñ5ºÁæOM¤Ù‡g£f™ƒ×yy·œô—ç­í§Ì­Þ‹ÈefÑ R5IDATxÚìÁ   €þ¯î                                                          €Ùƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØƒ     ÿ×FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUØ­c  `|óï„%­Š                              ¼  ˆ;  ˆ»¸ @ÍÈý  Ä]Ü wq  =Wz  wq @ÜÅ  Ä]Ü€e·îQ „a Œn½‹÷¿œ8üÁÒjiä½5CH¦Dú-1  J]É €pî  wá  Â]¸  Ô‘ñ  wá  ó´z\½/T<  Â]¸w  „»p @¸/î  ˆõç0Ïî‡±ˆ àÿáž‘p @¸wá @¥ïý½p_:E‹ç[T<  ùÃ½Èî…p @¸wá ÀnªN_¦=D<  3äú©P›Ò¼7Ü×*½áÞ’õç·Hx  „»p @¸wá¾±sÇº©ÃP †7Æ;vÍÊÀ@†°óþ/u¹R[;¶‰’kÒ÷I]*T³üœ: à£Ã=n»·zÜŸ¸Î²C„;  q/OõqÓóy9hŽ}3«† àÓÂýh¦Lyá €pîÂ €‡—Ý}Zl?Ñ³_”ý¼d¦ÊRšÚâ//#¾ZT½ø¶ÆFÄï]ð  Â]¸w  ÞØ[Œ™“,†Í| Ä¿<­"™Ûpêî  jýX¯oØ#­^z=ÑÎÛzÚé¾iÚ¡\T½ôºç#¿Yò†ï  Âý?ÚãÑž,¥p•MùÒŽ;Yß x§pŸË®]¦~¸7#úþõÏ}Œï?Þ\I?Ü§õ>ÌÂ €¡Ážc·Ô[á^Œœ¿3v}&¦;ho§uÐ¥á+(6†OÖW”‡û\îG©ÜË¶ßAÀ ÷•£#öy-~&&ê—A‚%?A3¯íÀw  á.Ü…;  /7<Ö#d/ºµz.KRdpÉ—K#ÙÇ…ûã§ñŽåw‰(.³øæRlÓ¡ˆWð  Â½)<`_’Ðh}È0ýÚ0d,Ä?Áw  Á“*°Óë§v®çeOÏboFû=w(Õ¯}·†kß¡Œß>N“¶æaõØ™vÂŸ:Ÿ>2  Üß.ÜC­þ<ÜC/Ü îÃ=@¸w €÷žÎ¡ö%³êñH/ú9eö-î|>‡]«ß°XW8æ;!ÿ£{äýô„p îÑpÏt]ìS>ŠŽÑo»“ÛNññ|þ…©ê÷ß-î üeïŽqÛ‚0
ß W`KÀ€ÀF‚w:Eî†@#,gw~¬LÊ
ßW8NÄ†“ây0 ×ZjÝ?S9£ÞŠÑ²ýýánÔp÷®ÏtKþÉ·à#<  ÀîÃ]iö1‰×bZc½ß@kÄÇë3c¢Ô;á  @¸`¸÷›#Ü  ð¦`cÝ/v;ó´Ô¾,ön7Ú‡dÅT?T­˜ñCn½ó×¬sWÞÓ×ÚÎxx  €…ûs:—öê”]º£ÄzÜãª©ê ê#JÄGÛïñÁ™Ç[Kx÷ŸŒp  øŠ½iÊþPÎue)FZ†©4zžëYtOä¢Ï~jŸ“GZ¤‰hê	ïlÏ¨Ówú  €p%ÜµÙº™6§Íáá  €Ã}yó±´5ûÉ'æz{¯WýXÃKýn¢z·„/¥{B¸  ünkOÚƒ«1ÊÁ˜!y­ØÃ2_Ñx­ß‡D9=\ÑFï†~   Ü“rµÇ¹^t)Ó¯wóšùO‰)ïý!£Å;á  @¸ï=ÜÏk…û7á  €Ø¶+íÝÂž|fÅ>9jnÎ9ûÁò/È»Þ79ú}˜…§"ÇnáÕ¥wú  àóÂ=xU=çzSª[¢¿ÏuÖ”ñqÂg”V	w  €ÏwË8'ÜSüï5Xœ´ë—û\Ãt½=Ø¿t­ß2…ïsúÍH›½/Æî·7é›®b¸ßÞ'Ü  öî§\Øì¦¶#VúS>q^¯÷SŽp  ØK±·<ˆjO¢ú¯­äE»´Ì^,öB®‰ÇúåË„.—Úo·¦d|Tð…z×½—^¥é˜4­»ó°*  Àï
w¡ÚM¶Ô®4»<ewìQ±ŸÏB§_š	Ùÿ<‚|úýðD¾••÷®Òî„;  À§%{qÐn½^|IT¥]µ–ìÕ\t²±.OïlÃ>¬‘2þªÍÞûœ6}/¾Àª¼6y7Ä;  À[Âý)ÑŠÝþ¨¼ÎTOÇÔ§ìÆ-vu-¦0SWým¦—¼K¿ûýÞ}õÝúÝ¾wWîùÿ
Â  `á®]zÌ›]Ov¡ÔWÒðgÇ²Þµ›‘„;  À.¶Ï¢þ9ÞÌážíÇøÍ~{s‹ÇçfÏÂ½í–íCv%Öÿ±w/«q\A †—zŒÙ
bŒ–Ð,¼C‚WÍ,zDÐÎø9ôÚ¦oÔé:§.=š–=æÿ Š!Ž=Zü)WW¾’—†+Œß%ÝÝxWá.õ¾üÞ…VoÍÌáþ0X>ó®»  ¼YºØÛá>&™îõéêã4j¯VÛý¥öÜF»
öø	Ôt¬oô7ØóéˆgtÀç¶Þ?¹+ïÕ²ûaúÄäÛ`îU¿/ßR„;  ÀuwcîÃöèxŒÿj¼ãÞd·‡ìOµ›hu3Ðw”Êx3á¥ãŸ*Áíww&>8ŠLÞïØœ  ØoI&w‰¸ÝÃ½[ªÝ_Œ‰’=ŸëïŸðQ¾ûË3K»w»‡»|äV¸³0  ð'…û½â.Çt«×£!ûE©~¼’‹2Þ-xg¦¸‹3ÎÖá  pá•{³Û—gQ…×ìñ«•ÌfwÖØñz¾Õï,_ñÎÞ[€·ŽÎX¯iŠë½^w¾åÎ;™   öJö¯F5ß‹j¼5õ>Ô¹Ø%Û»Î«vsÀžÊõ£ï¬|ßè¼rô¥>3¯¶Þ»NÒ}î÷Ô;V¥ÝÆ•ÈA0x×Èw  €ß Üõ7Ûýõ˜8Ü¥Ù‹nŸÊW×º—ìªÓ¯(ÓðÓ^I~“öì=u&zM“Þw'Ü  n4Ø%Ù¥“}°Ýµ·n´[Í>6©¿ãÙ†D§÷K”|~ß­ÇVv—Ù»»5S¯ÌH¾É÷	  ðËÂÝ¼þ¨“=¿Ön»y3ÆÚeßšìf«÷ïÀ¬øL¾g_5ïÎØ³÷ðõªáÆûÃ‚p  øÕá.Ï¢êIûD‚}Ö
öbS³7ƒÝÞdÏOÖûØÊ«Iÿ“},?‰··ß­€Ï×ûGÑøO£êÝL#õ´*á  pûá®£=wì1ºïÌØu­Gþº£(èuÃ5sþÞl÷9Üƒƒ‘:Þ	w  €ivÕëµ!cmµ¯¶cÔF»ÎvÑ%vc‚bŸ²V'»Êö*ÖûþuÐ(öç…üp›ò_!V?[ßWß¿«pû=ÚœÑ×"­¹»îwke¦\šñ6f¨w  €ÝÃ}í«9»¨ÎÇ¸ïV’nW³vç	ÔÏwÌ~Ž7bÌéúóŽÌ1|¼Cs>–¶>¹j\‹”r÷ÞÒdMÞõì}ï„;  €é.oÃëYÔš${ÕíV´wƒxØ®gí^²ëEö:×“¡þ£ðõ"?
Éo%|UïÂªw)÷`ì>²âÝ9òþA³žVÝðbU^Í  ÷ËÂ]U»sBÆ{ÕÛjJ»$»ÊukÈÞGµþ\’²þúNV?«0^HÀ+u¿¿ˆðàLç­ÍØWÞëÉûÉjwÂ  à†Ã=jö…s7æ<1{cfàæ\=¥ÿUÑdþY›Û}üÚ¨wùuŸ[7gæz×í®ëp  øÂ}´5Üï#2ÞZ»„dæ}Jæ½˜ºÙu´ÛÅ¾£ñînÁ›·gÜ‹‘U¸ûïuºíÖpÿ›p  ¸ ÙS—§ÎšŠK½õp’]Ý~|,¤nÈxÏ¢êõ˜Äã§ÖNÌ*Õ7Gú?Wµ¹æWomÐËïåáu-Ò}Z5ugæ± .DŽ_N“Ãbúÿ¿éÛÊ©wA½  Â½÷¹žŠfþšÆ¤™µŸÆj'ªÕµöGá=‹*Å.Œ™`Ÿ½xø´/5ìÆ³¥oNõooÎxãéÖæ¾½ùÞ¾ë~ÿRh?°Ÿš)Û}R™¾gdî~˜þðfüöZ…ûð7Â  ì¥ô;–ôbûi4Ù¥Û×svaÙ£—+½L¼f/ƒ½Œv³ëe˜Ë[ýÛÕmÌxg‘F†ïëx—€7òÝxS“÷¸ª¾ßÜ;3êåLõÚŒ`îà'{g°WDÑOñXH³HvŽdVŒ¶HŽŒd6È‘@ó|ó™~ÝN½¾]õê½™ r"EÄ{q¸¹u  q¿¬¸±¸‡•vÑöxð1ŽÚ½˜½4coM=÷õý;éÆ´“ÊûšîÌø«Eï™ºß,«»”ÞMÞw   €GÜUÚÅÚ+É;K¡´«µ{ó1ÑrŒÞ ª³½˜±“gëËŽ^¾;ûI¶fñoñ{Ð©òþ—oïá«ãÖÌ}’»'/3ÝVÜ'Uw   @Ù¶(û•1µ‰{Q³ªìMÜ'w[ôö\ÜÕØÃç”†ÔuÅ˜u²¾Ï¸ÛÈ~™u¿®<ã®ÊæLàïGqÿ#÷ÆXvoŸü&î¦ïMÜçª^[ô™   @Ü·Šû;’µ›³’[T5vÙŽQk7_×.{¡ùúú6Ì:S¿ûXçñyÆ>é¾w×¡ÈF|­ªC‘^c¦`™{q   œýü^»(»Jûµ¡ËÁ=ªæìñä£3Òn9{_©QrgíQÀž×aŽ’¼RÙ?±¿ÙˆüŠ+ïû¼EÙ{ßœ™~ÍºÖ{!Þz§"5{7sûî×Š¤î¢ïyß{   ÄÝ÷ÛÊÐkGdÜáÇxõÑ±v÷Q¥q5¦ü1\Ÿ.œ¾ª‡Â~yb,ÞÝ},¾O¿D…ë½ûÅÇÝ£H‰ŒvfâgUo+ˆ;    î§‰»œ£š´kÚîGíÚkßD6ÞÚûÝ˜ø=¥¤ì›4ýáL6©üb¯î>ú»÷fÓP›±à=[ŠôXûî¼ë»ª&ïÃ©*â   ˆû9â~íŠ»DíI©}|[)ê´?ŽöB3v§Òî{°§®þòº‡”Tâã>ëÍÈÕêKaÌÞ½Î{üJ“VÞãw÷â   (ûiÎ¾›hÆnâÞ®Qq÷¤}ù]TwõQ´]fíýjñQÇÚý½óõýiÂþzaB¾ýË»ö¾Øœ™þgX|_˜›ÑÖÌFu×­™Æ îóKÕù×Þn‚}H   @Üq¯˜¸kÚ~äqÏÓv-Èxs¹²«±©­¿¦<mà$‘}ÄÞC}ï‚wµw)Íd©ûvq×®»È»LÌ î   €¸Ÿ'îÍØ+órûOAIæ¾`ÊÞÐ¬]ÝÖcÌÚ» ýphg—^›]†b~	z1§
ûÓ…Ù*ð†kïõ?ÚðšïÓ¸ý¡ž­ÊKM²6îDŽ×ªFÓ÷`!Ò;TEÜ   eïØ<Ú~[‘R›±:üX›í}Î^èë1Æ£”c$eÿyFx}ºŸ±:`ß¤è_Îd“Î¯‹àóúLV{·ì]
ïImFÌý^c÷Š¹»ù»lC6²iw†Ý   qß]ÍÙZ1Ö¤«ëVÑèãc¿óÒ=¬TnŒ»:»úz¬¯”ô·9_Wñ6g¥ÌçQ¼|bïZ9ÌÜ‡µ™Çp(R[3õóœªª¹ëÃLÍÜâ   ˆ{,îºÚî‰»n?ª·G¯,YÖž”Ú5n?ÄW¨þ.»“²ÇÎ>Êº*»9ú%5¾}t!¶w'}÷wß=soö.¡{\yoê®™¡î.‘*îºìŽ¸  À)íMm:cÏÅ½†Ÿ2"c©âíMÚ-nÏŠí"íö$ªH{~†»Fí*íE†³x}Rê¯>¿Wì¯ºÄ£~À7ƒ¯ŸïâïQkFK3Îµj¼ïfî>t/¸ª~w™™©¿Í£âþa÷ãw"îôÝ  à îÆd;s[?~3õˆ[§Xwd:qwÞH•ŽŒ{z3H»Z»¿ùØ”ýpB]ØŒñCö8bŸ«ºgèÆç#f/Ì5>+Ákü¾´;£½Ñw)RÜ]ä½ÐÅî÷Qw1÷ŠNÌØ©ªíC~ØM_¦õK¶Ò¾”9T  €ÿ<'×c²	Úµ×./-‰³KCfx5)ÇH¥]
íîj|êèz'ëOóŒjzã³ºúó…Q‹/óJÍLá¿Dïè»ß¬V¾gúô=)ÎÈËª:)ö®ú®}w‰Þ¯*r§º\›AÝ  àwÚÝ^»ÎÈsíqÒ®2¢í]9¦ø¤äì8g÷"v/_:ë~¦þœòç*žSü<~èÄ{¼¿ÇÙ»s²Úä½SwÞƒÚL6ð.#3~ßÝ¢wÄ   ÷wl ²áÜ£~4DÚþ^ûÍÈôsí–µ;—¨EKÒn—¨ËƒwÆR3ÆíÄtÒuabW?“•òîöhÞüw»ßóØ½èûßÓ§¤|fšºÿ*Ï«ö3362#×ª÷6éÈûGÃ¹TíÝq   Ä}»¸›¶s—™ñ‘%Ñöx¬}y:f?#(´{1»…ì&ì®¬Ÿâè¿­â›w%¾[¤Ó÷Áß?¥Ñ»Ú{ÃxWu×Ç™Â™™ÉÝw   @Ù¿±w«qQý‹ùƒƒQ@
bƒµI,YØ‰…y!„ñFÿå|cº_¿¤ºëÞÛýf4©fðÆ{´8.êV[e¯?F¤örO&„·§<uvv¯$“-¾Få†LzÑ³‰Ú!ín©Ý^ öBvVöž®‡Ž¾e;¼1ø~y&ß!ïÅßi-²ÈûÑ™"ïx_ÕÜª¢/“?Ò÷m
3ÅÞóÿílèn"÷xÙ}Rw¼È$}B!Ä÷Æv{í°v<Z¤BÙ§Ëší‡…¼,È«Ÿx§Ýé´{ëìÇdìaÈN˜¡­=ýæÎ,7ù†¿®¿G{‘EÞyçûîù«<,lÒvgy÷s÷×«$î›ªÊÞ…Bñ¸Å}o,î¿qGÚn·yø±à]£²³CÚ9jÇØbÌe¿£«?Åôã÷HÞƒçšx)’:ïÅÞ[ÕC$’"ñªêšâ¾’¸!„BâÞˆû*Zû^#î“²»O-á%¶s=&AÎžÁ€Œ?ÓMÇ¼êì¦ÊÞtb–ÛúMÀå–¹	XîðMƒ†Ëïañ=j½[{‡¼£4Cö~FµŽÝ÷™ÊÜ§VÜ13³JHÜ…BñÔÄ½X{Ádíwà­?ÂØ¡í|‹Êsí3¸EýD+ío~m¤=Úz‹10öÍmý’ùsË\2›;<üÝÎÏ˜ðÝú;g`ïŽ¼p­š¿S+ïût­ÊëîÞq©j‡Ý3Þ'fu‡»KÜ…B!qfk‡··Öž¬¬7ØÎ¥vœ¢BÚÃzÌqÒöä•ÅÙ_5Òþ{«íÈÙ¯
&d•ý®®~»ˆ»Z|GßIÞ¯
Mw&ÜŒ|Uì}úgæ{ÕB÷ÖÝ›¥R÷‚1÷—»£ëžiU%îB!„xêëIÛMµ}ÕÉdF/¤ò=ª¿×ŽéGgøÑ{µñö0j‡¶S99;mÅØŒ}lë;ÿXÀï6 ¸ãô‡ÿ*{§àÝ¿X5[‘våO«:#‘gtªZhU¥'UýU(»O˜²{RwíC
!„âI‹»y#Ö~ê6Û£´½òö¿Š¶*4cíN­=xX©#íÈÙ/€«íBLlì÷H/“'uïËû@öÎò>ãvf
qáÝîÌdwGÙÜ=XwG_¦@}™	‰»B!v’M•;2v¶ý€ÕöD›µ£ÛîŽ?^g‚ÇQíX;6dl­}Æi7•vÌÆøƒ1aÊ>–õŽ¦Þ*•ïFð}÷§gÙ;ë;Ez3‘ÕóLtªJò~ñ"ýUksŸÚ2`¾ShÌôõ]ê.„Bˆ÷ùµ¥×^±=¤b³ÎNÓ™QA†¯Q9i÷nQßõ­½-ÇØ}Me¿Ml®êBî¤ñ±¾ßTxÕsµ
s¹;ïî±*nUG¥™}šˆ, ì^°æŽ®;Dª7™
w!„B<qw2ÈÚm¶×%X{ìí\ÁîcÒžµ»I;ŒÛ1´õxz)»'ë~&0ó{b¡Å›6£ð&}7»‘(ÎÄcï¯fŒ½;;3P÷„-Íø‡ª„îºS¥CÕ¸3#qB!ÄÎ);œ½÷©
|Ðtdâ¬½ÀÖ~šñžGÍì{¯,!kçsT®µóX{èíˆÚ1÷è%íf1&™m²/töÀ²Þ4hZuwwg|sæfâcU[xçSUäîöm¦ý‚÷¨ê©{¨
q÷s÷º0“~¼­¸çé»B!v«ÝŽõÇ™•-ÉØ–Œi¶CÛyGÆœ£ÂÛÑ¡¨¬ý¸Àõ˜¸S¤=:@½©0¶n#ö…¢þþžX(ò½|Ø}·›‘moæ¬ÚÚÌqÜ=îÌTû<ÉæžqÛî4ìfÐ–)¨é.„BˆïvHf8"“©Fd
“µtdìj{¼þx=a«ín³ýkû6*/È´¢RÐŽ§•þéæìÃfLÝÛu}ý}—óY<©ü ƒ÷Ê3¶úîë;ÎPé…÷ª4Ã§ª‰¤¶{ô.Ó5]ªâP•§Ýºc’U3Uð>Áön½!„bÄÍvw¶}Ê9_DÒŽ¬=z ÖŽ½ö£BÐagç¤Ó1PvnÆ°³÷*1Y{×TõócIïümÏßÃÚ{=8ó-ÁÅÊÝ©ñN¥™öÝkwïVfžÇòžÄÝNÌðÈŒÄ]!„CÜ2ÖÇ›í3¡¶Ÿ~9£Ávdíáð£±ö¿µ…vÏÙ!ík+;©zßÖO¶DßáIãÃÜ½ ¡ðÝŸŒüÃgPš	ä=(¼U3Ñ¼ûÙ—Cäîü.Óóˆ»Ùv§Ü=Þ‡<ÈHÜ…BñhÅýYWÜëŽLñöv³½v”dp>±i²vÔc®2a9†¥=cÿÖÍ×OŒ%1|T¢ñÓw’÷¸6s•ñK3ÑMÁH$nU‘ºÓÊ6f&s§ÆL,îÏ$îB!„xÚâþ?’©âöìTuØnïQÍ;KØk_RyWàN;Õcüvuc65ö…®þÛ=qâ26x·gâáØ»=Y…¾·çªöuU#ïæaÕJÞ½7Uë;Õô«NÝQuŸ‘¸!„b×œ}¼&CËí‰è½%H;@Ò=j8ÙN×¨Ø}L¸o,ù­vDí8Dm¬Ým´_ÎxûŽÃZÌ9³®«¿Ýˆ5-þÜø»›¾G»3VÞáîs­jhr_gBg&A}woÜýe‚/U±0ƒqÈBçE&Zu¬Ëh_F!„[`ce‡³7æ™Ô"í¬í˜’A·'©¨ÈØ~õ¨dÞ·ÛzLÚ1£œý6CÆî'ì\Ý3ö·÷ˆçïå³§ñ£MõrÓ8{¿˜±4‘¼×o3ÑÒLÆ¼ÍDëîg|©ênÌ4Ãî/XÝ3»¯24Yì]ú.„BˆwÛ‘ÙcoGØNÚÞ@†ÞŽ™¯õöc“µgü¬’ö„3ÓÞoÇt›1ïbißR®þóÌü}œÁ/ÌÞ+uOh½ÉûUò4Þ«ÆL§ª”º“¹#u‡¸'üawnÌ@Ü$îâ_öÎ`7ª#
¢_‘O°”%@‘$œx‡€JXÄv„ÎÞ"EâÈGxãÀŠïËë×ý¦ºëÞÛ=3ÈXªc˜D!8ÙD:)U×B!îš¸CÚÝ°=1œm·ÖN›í°ö,í°vš~$iŸp¢–R{ö^=¦×gŸ-5ö`äê‘ŽC6ùNú>xJÞ9x·µ™‰uå½¸;ô‡fàî<ï^®ªvSwç(ªîKîN¡{ÂiÌ@Þ%îB!„¸ËâîI;œ=Ì¶ó{Th;FdxûÑX;´W‘³'‚z—clÐNÆNÍ˜PÙ÷êê§…½Šü†úüÞÌU‚z3lïü^¹;’÷x$’"13uOðMU¸»»1È»Ä]!„ÿCgg*cÏÐƒÔ	ó"õÇaEÒîUÛWdí3MC&ÎµûOQ½ÍGç²’YŽéc^€-Œ}`å{åVþÎú>.Ï˜ÅïN7Þ¹4“àÂ;»;uf.fØÝÈG½¶;Ìà*WÝq‘)cåÈÜ…Bq€âNªÈdk·a;ÅíØ‘¡õGšlïÈØ×¨ÁR{J¶ö+g:¦ÕöîZŒ§ì{Uõ×…½j|¤ïäî êî&ï¯þ¸bwO 3Ã¯UQ™IPÝçÝ›qwìCòMUš‡Ü²íþ0#qB!ÄÏ¶ÛñG3%ãÎ¶³¸³¶sÜN§–xG†+2ÍŠïµÛ¹ö›º iGÒe/DÊÞkÆtJì[›úë½²µÇw*ðžÀ‡Ù;¯EÚÎ»s^õšxàòÞ®Ì8•™3r¬î,îÑ)Õz2CúNþ®ÂŒB!¾¿¸SÖîj;í?:R±ÿÈÞ^Ud°þøK![;‡íÈÚß$i´=ìÇø‡•‚Fû 3lÄl«êwb[õÝ*¼WžáÖ»©ÍXyï¼I}wŠÝ3NÛý¬¾ËÄ38ÊÔ4fèžjç™*åîw!„BÜq¿— ¨a{¼#sŸÃöm?¢Øžq¤=ó¼Sl7íÌ=z#í±³‡Eö‘°ßÆÒ÷éò#ëï]{Ï¸s‘¼ónK3ççæ:Vfh##3™ÈÝW+.»êžåÝe‚ºKÜ…BqgR7÷âìóG’v4Û‹¸“¶Û¸½+î“aõ¼Y;¼ÝZû[´ÚÏ'h÷ÑÈÐFû 3z}:Øw±õ?·b‡ß ‚÷Û3}{‡¾;ònÎ«Vîž@òNîN±;¿T…¹ã¡ê
3$îx¦Zh^©&êGªÓG½ê^þcHl îš˜B!ÄAŠû¯FÜQmG·vÛWhÉàÒÒ*28
i·¯Q³´óZ{´ÔÞH{<ãäì;Fìû1ôýøü¶|œ½ÃÝ;ò~õÊ^X…»ÓÂ»ÉÝŸg(v÷^ª¾ã‰™íºs×]â.„Bˆ»#îL¸Ün§Û¹Ükç'©2pöæIjsj©X{8"½F¥³¨ÝV{žigi7Ê¾¹°‡¶¾ƒ¦_º;\ºì ò~,ðünÕ—÷²ôÞk¼gœwÔÝé4U…»'Îø™*ì½vwÔe ï¦êÎ£î|KU£îB!„¸»);Gí˜’Iðr;êíñTZôn¤rE½vÛá¨·Qã‚Lµ_y+íãœ}lìPö]BõEÅo¾Ç.qü8‚‡¿³÷ÎÚrw7x§»ªŽ»;GUé,Ólî´ëŽ—ªfØ½™uç{Lí6äCö×!eîB!„ø~âîŸI- m7ÝvZ„´SEf‚&ÛÖþ¶íµÛ~ŒiïI{¥ì/6ÉÙƒ”}Ce¿Ì?Kžž~î™ümåv;}ÿyËìj3tcÕ›¼7Ç™~+ú>œ™Y*3´YÜ=a§Ýy`&sŽ©JÜ…Bq@âŽ–Ì	OÉØ{K­·SIÆõv,@6óðö"í	«íðvÊÚµ×Q)jeKíþpÌ“Š²CöK0tõoeñ`ìï}RÁ“3±»óÌ;’wïôVu½ï^/D&’¹g¨13Á÷TÑ˜±Ëî4ëîîËdÌÀÌ	ú2w!„B°¸#m§z»mÉÜŸ¡j{aû;;ÙZûD®µÓð#…íT‰ZíQ¥}dì 6vpÙ+Â¼7Ï_=Æo¯LðÆÞþ>Þaï¼óÎêž¨Õ½^‰äÓLî@d"™;Nª.¡;†Ý11ƒÐ=±ˆû3÷ŒÄ]!„‡0ÜO·ÃÚ›’k{\nç'©(ÉoŸÃö¤Î "“ð´=y;Fd‚Z;W2·•‚¹G¿ã)ûF{±eÇÓ?|ÈŸ]>v¿FÌßž]ÿ>ƒž¯Ž^­ús‘öJhª‡fÚ÷ugÆ¹ªŠ›ªve¦¤îˆÝÎÈÔ=¬ºÇ×Táîá¨»fÝ…B36ö¾´?˜A·¤µ×Þ^Yû#çI*…ígg¨ÈoÇƒT¶CÚÔkŠí°v
ÚYÚÙÚgµÎ¾Y‘Š†ë‹“>µü“¾
ŸñGþ±üBáSþªù˜)zu1úÞß=yž¬•÷^Ýúîí¼»»'`îUe±ûjE3ôLµ;é>TE×ýÁË»Aò.„Bˆ}‹ûÉIOÜáíx’úŒ½½û$u™„µcHÆ«ÈÀÛonª¬}Q;ÛmÔþ²[1AûiÅÐØ/®«çÏÅÚY/î¾|þbøš?›øi˜¾Çš¢ô‰ìïUôîjü%è×gN+öÎs3Þ©3CÁ;:3ÅÝon`îT™qª.•œSž©ò°;¶!gÆâ~r"qB!Ä‰{’ö‚_’)Ä7Rí’L²v»#“àŠ/¶#kŸ‰´a;[;‚öq¥=.ÆpÒoQ¯(ù:|½òspýõºpt}tT>,Ë/^¦ßÖR¿vø%‚§*M¦2÷¢ïóÿŠôË3£Ò;×f^ÚÊ{¯îN¹û¿‰fÝÝîCVëp÷æjb›ûOÂÌCpÏ÷ŒÄ]!„ßVÜÑno·Û·ûÝvövnÇ‹Ô‰6lŸˆÓv[lO`±ÞM?ÚÝÇø¸uÚOývk;$â¾ü¥âë(Â ^¯rõµ¨Aÿ{+Ÿ_€ÃCás·]$ñ(¿/‘;dêÞëÍ¬~PyGá}Ð™ñ37ØvgwG_fÆ,»ÃÝ‘ºß¯gÝcsç“LÝË¦;UÝ%îB!„Ø‡¶ÃØeíçM*vdh¶—dlØÎÚŽ©ÑŽŒÿõwoú1Á‡QÉÙ©cfÚ£ =lÆ3M#¦Ôa–`½dëdêÆÓž>…²oGùíùOž.&ÿCÒxy
â'’¼WšQùý1ˆ¢w3ô=W­Ý}¢Èû_ÑÎLðR•Êî¶0óÎ”ÝÇÏTy’·!ÛU÷Eß»×HÝ…BˆÿØ;›Ý8Ž+
gH
.¸2émÔ‹^2"mH  F´±Ñ‘…m²m!B6Ú "ymägÌ=u«çtªêÎèÏ†s¿i6‡C‘LøtsêÜàgwj»ÌÚ[!™lí€Ö>OÛ;»–ÚÖ.³vIÈ´2 é‡ÚcvbCiÜ)ì@NœRÙ¥­ÃÑ?Sc0?Pá9†ÿ§ïŽ–ÐøÿÃÐ“w½oÞ™™ÑÐÌöÜ}ÛÝ™˜a^˜¹ÃÝ™˜i™{»bæwP÷÷ ‚ >em{¿ÿ±w¸¥Þ (µ]Äý¡®I•"™jÚ²´ÛÅY{#Ù^G¥´Kó£äcÄÙë“¨g7ÍÊNhìE<Ãó¦LÄ,Ý}L›s\x¼“=Ú¨¼‡P<ðù +p…/ÌÝ8<íuÎà]ÇÞ›5ïí’wM¼ó¨*ÈGU™™áQU7wÎÝŸ$yçÔ}Ì¸ºKÅ3†‰ûCŠ»qŸ§îé7ðjþ…¡¸7Û!£Ø=‚ ‚$î,€„²ÏéöÇwî[o×”µxÿc»H¦‘¡µs;*2koi»NÚ›³¯$c¤%fŠË¦ãàÊ~”ŽÓà'ÜõáŸö.ûú4?ÛfœvÃp$B##x¸{f5;sÌì“÷ÕÐÌÕ]23³º»¼÷û!ŸPÝsÅLv—uª÷2ìþq—¸Œˆûüûr(‡q‚ ‚àã‰»1‹»a
RX;˜³í‡œŒm™46 ¥¶½(’)¬¸´SÛÝÚV÷#sí ù‹³ÖùØ¯{œÝ7J2FZbtÂ>Ž4õ£„Ý¹Û~@ÜÍÀÁˆkæn“igF~0ƒO0AãòÎôŒ.p²KO­:íÔ{+òÞ¨x×ÐŒôÌÐÜ¡îâîÜË¤î¾¬˜1ÒÔÓ0ãænW»‹»—â~âAÁ'wmnç¡Ô¥–Ãv-’™£ír"U§í_ÑÛeÚÎ`;­½qµ«íjí:jï;;Zv&c<3·Ä¡˜áÝCìSÖý‘sŸ¨;žàKáï[÷i‚«gv×}|áªÐ÷¹~îï¿?ïÚ»Þ{îÞY­Ú9ªZÆÝeê.‰™:ìžÕS÷ß;óÐÈ1Õo¤`¦¹J5Ä=‚ ‚çìÛâ.¡%mm²oÉPoGº=MÛ¥þ‘=2¶9Êa{]"óÈaÔo72@¥=Ñš³Ûí ëe-»=e,Æmw<s4S¾ºyš±ñêäw¾Ù5ßäAv`X2ŽÉÜÓîiç G#ãwŸ¿3;…_t¿¯”½ëà}34£sw»³Þ]Æî®îou»?ŒÌü0ë~Ûm˜¡¹¯«»”C®‰{Ø{Aü&Ä½Ïš¶k™ŒŠ;µ½WYŒÛA¹&•ÙvõvNÛ5Ú¨íÛ™zÇR=j_Û­¤Ú®ì ê‹¡±KëúñIv×nÞô1ò¹>–_+¯É‹*îÊÎñ/â)Vê{rwVÏd{gù{cð¾¾¥©¼··3ý°™¡º¿í‡ÝY)y™²`†µîjîÜ¥JqÏ4Ä]êe
uq‚ ‚öã2ºo	|Ø iBBk/»dÌb\ÚëHm€4–ãv©¤µs×§íì‘©Î£º´¿âiTmk_)9ò$*¬=wÆÉ˜‹™6å|lÃá:Ýi—ÆÃ¨^Üï[¯N€©wÜ3;pìXêÙ<¿YÞ%&dÍÙ™Û;»gRtÆåýÈóª+U3Úð¾h™qyçÔîþ}Qéæ®î^ÖC²Øæ®êî”YwÊ»«{–÷¥¸Ûã2€¿Uœ¼‘÷h‡‚ ‚÷÷÷Ç+—˜‘aD¦¥íeJÆ‡í€Ú^¯HýŽ!™ga{c7j½ci; ã´œ˜®“2³È²Ãö ~îßçV§å°ÝÔ½¼ù{ Ÿ2q'þGÝü<ÅÏÆäîÓÕRÜ?÷îeLÝí“ÉÝ—™øsÌÝ³7»#%9cxÞ]ì]ÝÝ©å}e;3µ»/û!}êþ×fw]É¤yVÌÔY÷Æ*ÕÇ!îAA|$q¿6ØiÈº%fÛEÛë"m’a$ ›ýZÚÎŒZ»v?º³—ÉvJ»XûÚQÔÂØí&Ýì —Æ0C’ÛÚ;»
rþe9pð—ßèë~áÍ'îù&ìËçã:ø&;¼¥ÇdBn˜ù`$q'>{GCäÅÎ˜æŸqOìÏÏOí«¯Þ|ÖHÎpøî÷Âß›‰÷~àîþ­Våj¦fdÆÃîzPÕ†)vï×ºSÝ‚j•êÚ1UË€k'Ä=‚ ‚'î·ÃÚWÄ]¤–ë–dGª¡µíEFTÑvM¶¿2‘Ñ„h4È4¥]³1x í‹pÌ"#X»Ã—íÁaúx7ø§ÿ4w³§ÛûŠ»2%qßmŠ;Ô~<£q÷ýþôÔ~üîòê¬ˆ½¹r†÷ù=»"íJtS3íåL™‘–»?KæÎÄŒNÝë°{Êºwwöºgs7úânWº‡¸AAp¬´+ë‡RK¤òfÆ¤½·wÄ)pÉÐÛ¢·Ý{d¾‚´÷ŠdþÚµv&dœf]û2¬|Ôtçì\£äd7w†ty&†ŸÏNŽ—ê<™ü’Ã¥=öwwû£`Ðýäþýû—æèÉÐÛ[âŽŸ›ÅÝ™“´yc•ïP÷R	úƒ÷~h¦™¡»K?ä³ïËzHŽÝí_6P¸û— ØÈô’ÝÌË´Ä]£î73lu7LÝÉ5Ò2]yu‚ ‚ÿgo¯”H¶U2Õ´ýfNÉ€v“ŒQÉ°IF¼ÖNq—lûò@j/"c3WHí%ÛÁFB¦˜³¿°‡Äc`í.í³“q€±‡_Þ¥>NébØ<'ÌÇºf¬{CeÝüw{¨ÑïÆ9ÞNŒKãÁƒgdðŒ;8Ï¸¶óGâCï¥±ÇVï½yôÈôÝåýß›y!ú¾Vñ¾‘v_–»¿êDfXíþ¶µ“‰âžw2á_KOºÛuØÈtkÈÔ½Z¦ªî~SMÝY0Ã¬ûu3êNÂÜƒ ‚ Äý]Å´´ýa¢j’<’Ê}K²n©Ÿ‘ÙŽÈh÷£J{=l—ÒGÈÈb¥y×ãrÒ>4Ö)dX\˜­œÎ~·³Çˆhèyã‘²"îcAþL‰¼¤ìéß0÷Á0w×JHç¼‚kÈjØÙ»áêÁƒ{srf^Öä±™º»È{ÿ¬*å½ßÉ±;˜§î»KÖÝÐmªÕF¦—‰[m˜áÜê¾º‡¸AAð³Š;´½+îpû-­=Á"9‘*ý¶ÃÚÝÛËý¨ŒÈ˜¸ÁÞàìmgª]N£þ¹‘k—ò˜"Ãtw ÒÚ'ÃW“)¬]»áG@í‰]¦æpug¤ˆûÞx?qcÅæ>'KÒÇç¤+î£÷Ë‹K‹Ý¼)#‹¾Š{¦éîTwÊ;8¨»]˜Éywª;Ýæ8vg=äTÌ0ëqwwÉ†÷D%î Ä=‚ ‚O+îÁM¢ª€´42m7tÚÎ"LÛ“¶)ÞmoDÛ2<"êL•qhíÍ|¨=;n,iO,Ó1U8†â>š·§Ó}2cO7Ÿ¸#"c×þ)îçVÅ}~2¨}Ïx¸¥IÉ™<zÇÜÝc3¾û?t±wuwÝÍŠÍL<©
wg`ä°;ì½nvåAUºƒÜ	å4w=¥º²‘)©;q‚ ‚àƒˆûu¢>–zhíX;XfÛ}Ú®Þ~;gÛ”©²n©÷â@êâDªv¶·-µ«µBF­ý%Ðv]…Ê9;Gí*îÄ>Èêîý‹év·C3Œó‹÷ü‡(îþ¡À+F|¥‹;¸râ~çÿuN.0|gnFc3Níî¢îÚ3Óm™‘ªÿX$fòBÕõbw7wpèuÿÑÕ=ÏÜ9t×©»·ºÿ=‘fÈúˆêu"Ä=‚ ÂØ·¬¾î°NæO€]2Ýp»Š;Ð}KR$Ãi»j;¼½ˆ¶¿M»–0n×Öö§¤½·•Í mírõ9ë§ÚÒîˆ"í}q‡ªï&h:žÁÚ‘nÇ…7|§1ù÷fMŒ¼È D½	M»Ï˜€mçÇ2Î-81Â…«{€Ã«°wÖEBÝ½Ûÿ§UeênÔGUyRõ)à9ÕÃÐò.õTw1w–C²Øýö–êÎÀL-î ^ÇÄÀ`¹Lfv÷h—	‚ ‚÷#îní·ËÆ%NÛn×ÞvÙ‘*ÚþSk×Ró<ª¬Y¢²oîXzžAVƒƒö:£}ëâ¦¼àhÂ³Yá‘”´û}üÕ‰;¨ÄÝ¾ÿœž¾~ýút>ØäýQ›aÙÌ¸;å]Ü]ïrZµ.ˆÔ•ªõV¦†ºsìþ$Ámª,‡äÔ½ê—a\„¸AAÐá}ö-ÙÛ?_d¸+µ¸—ãvŠ;¬}ÓÛŸÔÞÎ©®íld²½mí¥·o÷>ê°ÝÐúµ{<f˜î„qŽ©yÞîÓu.NÊ«“ìõÝðÈ	÷òËVØEÛµkõû”°ŠÏ_éßòÄ\,€UÑ¸¸;»‹KY]IÍÐÜ×Ý]{fÜÜ[îsçØý®î²•‰æÎSªÆÒÜlî æ.Cw¸».RåUR5æ6B3áîAAâžÉÓv8{-îv¬JMâ^Y»ÄdTÛ5Ü®ýL¶ÓÛuØ®Þ^ÛÙÖþu;Ö¤ö1K{
Ç:iïŒùôL¾8€Û.Ü ì“d òxéW#î'¸)…¸›Ü›¸p÷Üù~qq–äÝ'ïù´*÷3='YÝº;`Ã{w§¹êÎÈÍÝÝâ®‰šû?çnHPÝÌ½˜¸§bH¨{-îvÃÜý¿ìAkÙ…©¶Õ˜&uï»Zˆ	Ñl¼d6!0ÞÌ*CÀÌ*‹1öÂ?``~Cò#fãÿ˜{Þ}U§ÞyïU«F÷³Ô²G-¡|¾œ{nˆ{A„¸¹¸ƒU•¸|q©·gmoÿÁPm¯½=[;¼)x´­íVbÖþ½[{ÇÛõ8ª;»k{YúÈ€LžµÏ5ítöž·ÛÝ¡Èz¦=Åaò´=?@Øó¤Ýy&q·û­Å½ÉÁJüs;¦ð‡B3ššáäït÷æYU-ˆL¤‚HdÝ?­¯2ñ&“áÝÕÝheÝm-c‰ºÛ_i˜;`Ô]¦îu©{Ùê>÷Ë„¸AAh{ßÚ5ÜqŸ¥!ÇdªÚvfd˜’é„dÀº¹Ý32p;­½Œ¶³FÆ¨N¤rØÞŒÈÐÙ~@†õ1Þû¸ÊÇ0Õ®Ñvêî3÷,À<ŠŠ(Mzpj	¿ÃÓÉHÔÑEÚ»ìß"NÊLü^p¿Þ­k¿(îc†Ö(îö`˜ff{Ïâ>ÃáæëªÒòNu7ªÐŒV56Âî,™Ñ°;ÈÅîLÌ°b†VC–åïÌºë!UGŠÝ—q_GÝ£a&‚ ^´¸ÓÛ}%•üõ²¸ÿM..qÚ.]2`Õ 	ioÝ[jô?®fí’mÿÔYH¥·oÛ5Õþ¬2¹>F]YE×ÍÇ3kq÷÷åET(<ÜÝîäZqo;<fõÅ;fŸ¾Ì=Ù_fœÙµ¸oWq'é_xØ°®Z„f>M¼÷ãîL»»¹«»cìÞIÌpM•awš»«;Ãî­ÀŒ¶º³²}©w6CrM•æâA!îFÕ%³%î‡R5%£Þ^NÛæJ*ÄÝ¤ÝpmïÉlEÛ/W?BÙ% Ck×|LßÜñèa¼pâÎIûO|E¬ÆýýIâîf<$Ó¥|hŠ;œ¸÷ý`<QÜwó¯_]Üw…¸œ%ß}îþÊ>ëù6‡f°¬úï*3£»ª:uï‡Ý¹§ªSw6»YÝ¹¥Ú*‡d7$Fî½Vw=ÇÄjÈ¾¸ûÏ^ˆ{A„²«´—Ú®u™LÞJeu;­¢í^%“¤Ý^x%HJÆÀ°4o-}JµíõTÇ¬Ý½½œµÓÛ«–1ñÞž´ã÷ËÊ©™ú0ö2k©ZÊU•iß¸=Vª»~Úž¸¸Šÿ¼<é~†Þ]:¸Zùr€iÍúý¯€&cðuJüù|vqŸ#ï¸ÈTÞíŸx?îínnX5cîžVU?6#3L»å¢ê·zRÌSwMÌdsŸÓîsØæ^œdÂß`SÅÌ¥î lug7d×Ü¹¥ªÍT÷,ï˜	‚ ‚—.îofd²¶kFº±²vin—a»6@J¤„dX ‰{KÅ‰TÀh»I»ñÄh;µ]ÚÚ({JÈ¬Gí÷›Î¾ÂGçóqRsõiÊæžc+¼“zAÜ¬šÏñx*¼Ge®wåËÄFNŽIÜù¤–¸s$oo“Å[âÈïÚ4Ã±;àØ=±vÅÔ{ª<ÊÄ¬ûº²Œºk9$ZÝÁ;Qww÷ªÕÝ »WQ÷¬îLÌ¼qBÜƒ ‚ ÄýjqÒ%£!àÚ^zû’n—"z;ÂíÒÛž{d<"ÔÚ¿ýŽÒn\ZG¥·kƒ¥}[ÜY
3RÜÝÚ)îÀ¥=Äý²¸óIûñ'cœN7wKhægV¼›¸wúÝuìu§»ïäbw°˜;³î­ZwƒæÎVwš;O©j`æBÜƒ ‚ PkW*cïŠ;32E$k ûâÎ˜Ì{ÀLÞJ-ÆíKD†½íÈÈäÞöf´fd˜l§µ¯&í‹²ã0“‚íŒµsØ¾EÞ8õ·*î:qwÆ6Ï,î#Ó.d·k7…t;´p â¾>q¿ÞÑðSÍ°h†Ëªìw¯ïtw¦ÝT»úÔ	»cìîQw uËØ½ZRe`ÆûeŒkÄÕëÄLOÜñ&š!ƒ ‚à‰;; Ý×Ï¶‹¸oJL·sÜ®Ú^·ÓÛ)îž‘aäàBFæ»î­%YG•8{Q!gg¬}è:ï)•â~ïÞ~­¸ZÎ§>'cêƒq'IÜÉî*qŸŒÊÞÇL-îë/ô&qJ<ÁÝÏo|É«}Ú_Øð>gf˜v§¹oLÝš{71Cs7°¥šÜâNs—‹L¢îºóÓWå9&žRíŠ;O©ºÁÏÍ!îAAð»¶öZÛ¹”ú4qçÍ%­€ä¡Ti€4rsûRÝ.Ún¬VRË£íÈÈHÿ#‡í‘Ñh»X»d|Ô¾$dê®öñm‰ÚK9ûÛEÉ!´•‹¸
Mì<·dê}<ÒÑÉÍšX\ýP8ý°¯Ð¶u÷|¡¸§GÝM…¸“åk¶‡é|>”óäé…³“£qøeØàýÕøöðp‡¦™å:ãî°wºk?d&™;Óî,vÏ‰	»ó&Suoª;øPÌ°R.©ê9¦?Ow.©‚ÌAAˆ»K•€;Å]Æír(•ÞÎ
H™¶ÿh‘´]Î-1Ù®·–´ýq;ÚÎY;”=“Ž,q1£š»_7ƒÅ8¬AŸHWÜz{wúnÅ/ö+“E=K¼?¿käMzâ(îWdÜ¸÷ÄÝ€÷Å]A¾g÷WÆˆÈŒff^U5$ìÞº©*‹ª†e‚¼³RÂî«¼ ºû–*ûehî~Ž‰§Tuè^5ºÿiQ÷÷ ‚ q¿(î·»´ë¼]ÇíwzûbíïÜÛn—HÉ¶›µóÜ½‰È¸¶3ÛîÒn/ví‘1k‡¹7Ž,if„´†hûlâÃzÕ…><•´r2bí€ð‡úî§5ÓM¦)îûçwúúµâni™Ã\'îÀÅ}ŸÊìOîî<ÎÄeUé˜Á+þ.èÜæ.‘&fhî®î‹»Yw-‡¤¹{Z†ê.Å:t—™;(†îöƒâA!îqgœ”év·kº].±ºðÞ’x;›d.y»NÛÝÛµýQzdI¤+K«„Ì	™kÅ¿(îàYÄÝ¨ÅýîîŽ°g¸¸Š;tWøuÅ}G(îfÝMq¿½}8ŒóqßïsNû»öÉ^çÈÌü6S6÷<x§¼kC$Í½Q)æNqwsg7¤˜»ÞRý0R}Ç¸ÌjKµ‘tWu÷¡;py·r™÷ ‚ x!Ê¤rÎää’\òTZû’aJFb2®í¬ng¸]µ0%ÃsK\Im{;‡í€É4Ï£~LH‡Ì0Ôë¨£³!î`6î*$³#×‰û,´µ—ÛÛ‡Äâ¼ë÷ßYÝÍvŒºÃ³)à£²¾¡ºWq×|Ofšjq?«¯®àœ¿wÎÔâÎÔ=×`ÓïÉ392ƒÌ3zT•g™ ó2 gî`Ý0#åÿjª{³ÔÝÐ%Õ9/Cwç’jë “žczèî†º{l©AÁKwÀi»!ÓvÓNÛßoUÉèJ*Ï-I“Ì?7R™moEÛµþ”ÒžÄ=%d íÜFMÇOÁÕâ>áõÅ
úüâžžøÜâ¾ÿ÷a˜Cýw¯Y3ã™™$îKGduTµv÷bOT{ª?y™¥²¹¦Z¨»ÏÝ˜1 î 4÷ù0oq‚ ‚öVB†=¹Do—”Œ¶ÉxHhJ&\ú°h»{»@²·ý½Ú$Þ®õÐ¯íÚv=ús¶ãÊÒI&íkS—ŒË½3TµÀ¤Ð;ÏgŠ»,£–rÏ¾ÇVTÆ­|á¡Ä¤÷a¦Aî„r<™¸'Ý^õÙ(«n™=E>HËñw`üv9SËÕÝü«ÿQÒú&Ú÷®¹{8ÚgHÛºP÷ÂÝ]Ýuì^%fv7$ëNsgÅŒ‰;Ë!=ë®å0wNÝiî¬—÷<ußÊË¨¹ó“fÝ©ï!ïAAðâÅ}c+•1Jµêv·öb%ÕµK©ªíðv‰¶»·÷WR‘¡´³´½nühpÕ2Ò`}SÜ'ç*q/FðÝTÄªÎß%J{¿­ÅÝ¸FÜÇmq/rñ¿¡¸ï"îÇ,î0wsw‹»sUÕ3ö¢Ýîed¦ÛìÎ5Uª»\d‚¹«º—Q÷<tÿ°^SE^†§Tígfº«¸3éâA!îmq÷êöªÒœ=Çd ¬=ÛÙ%³uqéÀq»‹;´°¸ý3³í ‡dšU2LÉôëií‹¶{‰LŽÈœ&n¡&Æ«Áú,î¼­¦ZÜ×æ)Û—­¦>ï˜˜júE(îX…¸ƒ,î‡<ÁWµˆ;.tð'ˆû=qW}×ŠûÉñ©(éù—V[œ'8»skßµ»Ç?ÂÝ9vg=$û!5/$/S›»«»^dúüù¢¹$.#Q÷ÒÜY/“ä?vbH$fBÜƒ ‚àeÜJ¥·«¸ÃÚMš‡R©í9ÜÎq»vÉ®í\Ieu;wR¹’*ç–|ÚÎÞöVm»FÛ)íœ¶ÓÚGdkç¬ý¢¸ÓP³p—â>®¸ó‚¨È{~’ÞZêŠû²rw“ÿJÜO°G¼ºˆÆô’í-/ßõÞÉ|3î÷ü?Íî™›
/œz—UEÜ×XUõš¸»œeÒ°;Ýa÷~±»^dÊy£j˜ÑRw6ÌH©{2wª»ì¨Ê)Õ¯¿¶—Ü	wq§¹ÇÕ ‚ øÝˆ»zû k§¸w·gkÿŠÍíÀµÙvz»V·—ÍíŸ‹{Kšm/VR%Û¾ÕþHi÷Fd&6?öÄÝ©Å}š®wü×®¸O\Òœë“¸ÿáéâžGØXR-Äýxtq?­Å}÷Eâ^ò?ŠûÑ™–ïÑMÍ¦¸ûÇÍß•_€½=á4#3,™Ñ~H»k=äÚÜuìÎnH)‡ü‹ª;ÍÝÔYwÝMÞ¥ÔÝ†î w¶ºSÜáîº¥âAð_öÎç5®ó
ÃÌx‰AÆšIÑÆ™o¡Å¸ÅÂ¸C(!-¤)EvS»‹ÐE‹½ðÖ‹àUÿmü?ö¼ßùî}ï÷Þ{5ùGù<ØN4š(²d‘G'ïyO„¸?lS2­¸ÿÁù=àÅ¥âír'u¸KÆµ½_%“­ÝÔ¾¶ÓÛaíºj0"ó¶¶ÃÚoŽ¸£¸¸ŸŽ@óÒ¡‚'ì9Ó‹¸¯>qOw‚NÅdµ:FdÆÕÝðÄŒ¡›ªZ©êXÉ†Ì”nH-˜qs—nÈzK•—T‹¹ã{à÷ ‚ q¿®¸k›ŒÛYÞ.‡RA“m7º;©LÉÐÛ¹“ú®ÙIýw“mwkwm§·Kÿ£&Û9k×¶È\X‹Œ(ûnâž>˜¸§ž¸»tÃÛ©æ}c?3èî†ûûÑgò¹uf¶›¸ïÆNâžÒ6q__WÜÓÌ ¸ÛÓ'ÆÊ¯ª––/™Ñ–UwÐm‡s÷†Ã/2lîU7$Ì=Ë;‡î€SwfÝ«{L?U^¦qw^c
q‚ ‚[ÅNK©loÿ²á£¤Û9{ëírÌÚ©ífÙÚéí^‰K‘—vÉe'Õ ^•¬PÛ‡kÛµý‘Ön?P+"™Sxºˆ;ÙWwŸ·^;Y¤AV@Å¯0Êƒd³nµý¸Íµ™|ŸœœsÏ¨9¬qwoá¿>_!å-Õ;†”,ŽÑ>ãÔð*¦ct}	ÖA<^(\2rOëa¦†Eù7iEsŸaâî¤‹³™)‹ª¯²¸»º32sÅb÷gÀÝ™š¨»!QwË¸º«¹Û—‡Üc’-U‡[ª0wÝAvwot§¾ÃÜIR‚ ‚Û&îl„´SÜË°?=%ã K†âÎ¥TƒÕí¹’M2¬Þ^ŸIõl;†í/ÄÚMÛií€õ£·–DÛW¶¿aD&QÚwwð^âž€ˆ»58ú´ý¸#îGÇ‡'‡w5v¥<(þž–PÜ+ îÓÌb±»¸+ãâòŽj'*“ÒÄ°Oæ|9;ñ±;Kf<ê®êdì.õ4wWwº{»£b†3Œº îl˜A3$KÝ¯ îš—¡¸ãgˆ{A|ÞâÎ›Kº—
qçÉ%£ñvÀHxûØ¡Tz»gÛY 	kmgHfÜÛÙÚîÖ®™7Õ¡%xúw·öQq¿·gÎg'îÀ4›mÝü;]dqß÷ÈÒîˆÌ 1#ý€Íî4w»—±;ÖTÝÜ«{ç"Ó;FÝGN©eèêz™Ÿ®¨2-#âBÜƒ ‚àö;0#ÚîöœmÇOzûÐ±Tj;po—›Kÿÿ|Yo¥þE½½Ÿ’á½%émÎ¶É4>ÖÜG}S22°vÜGÝ*î%ÌN˜swkï ÎäpÅziÎf;{9ÞNißÅÜIWÝëï¦ÿÚB{²ÊÐäý!e[TÆY/7ÝoR|Á>•°œ]TcwØ»4»3ë®‰™jæÎ-UÞRíçe—qs7êÕ—&îEÝ‘–­¹K»ŒœQs÷/Y&fss{‚ ‚›níÛ7RÍØ¹’Z_\BYt=l§µë©T)“á¸]ËdÜÛnïTÉ¼`q{7&#Ú>^Û®™vÖîí¾êÒ®¦îr5³x:í½5õ´Pq·T÷¢çš}ºŒÒNA1yÚ7vF<L¡í.î¿¹åi•¼ceõâîU)îÑÜ™‚g‘Hû±K4úÕËÌºCª¾Éoaºk¯¾VŒ_W(w÷EUnªjØýÒbw¸»$Ý¥ÖÝ·T¹¤êê^'ÝNÒ¥îÃîtwð°JºcMµÀSªOœÑN÷¸ÆA·OÜ™’Ñi;h»d4ÞÞ/“¡µ3ÝÎpûPJ†rn)[;¶KDt223^Z¢µ“î1ÑqO—Š»Bq_õÄ}VMwJ©£=àÖNmßÊwp™µ"îüðlwEþ†Š;ÉŸªEJ³œ˜AdF;fÀàØýoõØÝf^SÌËTÕ²¥ªKª@ÍÝÝí22ug¿Ì¸¸?
q‚ ‚[/îƒ1™ÎÍ% )X»{;c2·k¤J­ªd:Ú.Þ>TÛÎT¶¿2<#ƒH==qöSâ…)Ãâž>Œ¸oŒ®µmµã‰×µç—aí=q¿kl5÷³ÌA_Ü™7™~<:’»ˆ;Ø*îúÚð
‰áÃžÄÜ§ùÝY˜ºgwÏawCÌ½_1£ên00Cu¯f^`è>´¤Ê©ûåe8tÉË<­KÝâ2÷/¿	q‚ ‚[,îlÌÔ©ípv§LÛeÜ8mïÆdLÚX»j;Çí°v9¸Dm×•Tƒ×–ŒáŒ.¤"#ãÚ>K§§ç€Ö~=qŸ¼¿¸SÚEÜ7²jHf»¸ß¥¸ƒAqŸe–ŸHÜÉ§÷úâŽòzÔ×Ï‹åÞY7í®ÍîTwÝ©îM7$/2½®§î?´Y÷wïdè.§T˜{uÇ1&Àz™ŒTº³PÝó×.Ô½`ân„¸AÁ¯÷äR]ÝîÚNo/Ô—R×vv@2&CmÿžííÏÝÛMÜa'ZÝÎ˜–RáíLÉpÜþløÞ’j;h¯-QÚëŒÌj’/¤UÆ\_ÜÉÄ/lŠ­æëRø¸ƒ¸Û|Œ;ª0÷Ã¦Êe-Þ*³w(ßÛé]gr_!tX3/j¾6\Êé]Õ…:L?uðŸ,—3sw”ÌpìîòNu§¸ËÐ].2#Cw–º—¨;—T3wûòðvš;¾Š¨î—±©;ä]ó2Tw q/”©;‰sLAAp»Åý¡ˆ»vÉ|Ëp{µ”úR..ek—q»[»¦d~ªÃírn	Em—LÑvÀŒLbBæÆ‹û½n²}«¸óÁ÷D_¿TÜýS‡îÈÒ	s§ºfþÊ=UvCjÔÝÝÝÕÝ,u—SªÍ’ªQÔ½i†Ò/S‰;÷/BÜƒ ‚àX»¡ÍímwŠ·óè’!év3¦dzâÞj»1´”
k×”´Ý`$µ½ïí\Ik—dd:ÚÞTÆÐ&{tòîx“sq{&c2Ù×V‚fq‡a&{™2‚§cÀ¸«ëwøj	Ì¸¹íQÛ)î;±ƒ¸Ÿî+åCV§eÀÔpMWt™·wé¥ÏOš*^ øfìáÜ13ß·âúõìÐ;f¼b¦™¡ºk;$Íêwê†|76ugÔÕMÖ½/îNwû!IwƒÇ˜¼Õ½ÐfªR÷p÷ ‚ ¸âŽµÔíâ^y»ÆÛÝÛys	^2’’qmwo×C©¯‡{ÛÇ³í®íðvà©®í+$Ûo¼¸{Æýà£ˆûYˆ»ˆ{2²¸ïÛrÂÌú!óU&fÝiîZ™qq—^wvCþÈnH7w¨»ÝÍ½;s× ;“îÛÅ1÷÷ ‚ ¸íâNo§¸³’ÚÎx{cíŒÉ@ÛÇºdTÛ}Ü®Ôv¹“Jkg²ÖžéöÈ Úž&mIûùüCˆûùwuöÌØQÜï†¸‹¸ûØ+ˆ;ž8â=Z—=U¨»q7äžªžS¥¹¹Èdh«ûh¿ŒÞcªëeÝ‘bÈ÷ ‚ ø¼Ä]âíÅÛáì™§…áK©ÿ1N.}gTÕíýq;wR·Ë•Tz{U$ó‹dš™³‹4ÏÆ^ÚdædLÜ×$‰¸3¿‹¸¯3÷•ýu³G_/À®ÝÙ¯&îÅËEÜ<x0(î0÷½=ÔÊˆ¸4N‡?¾wîØß¼·¸ãe	¸—x»½¹	|Ì‹¸—ßôHéÌrá8Ó4kÔÝÝý+‡æ.æe4êî[ª²¦Zúe4.cpI•¥îeèÎ¤»œczZøs¦È»‰»4º‡¸AÁe‹²owæÛ¥OFÅ½·ƒj)•ãv¦dFµ]§í?©¶WÞ®µíŒÈ€Ü#Ó,¤BÛgëÉÄ<ñ—ëŠ»<G™OÀâî’	÷ƒ{]¶ï£>à³üU¸ç_ls?9±ƒN›Yì§÷Î}}qç}ÝeS‰{ãöËÕ•Ä}™ÀÒ>)e6¥ÕÅÅEqwÏº¿*â®awFfhîº¥ÊÄftèÎSªº¤ª¥îß²^†•î*î\QeÎ}\Ü•P÷ ‚ ¸yâÞ1vÒîW— µ½¾¹Ät;µ½õöÁ”½½>”jÀÚ›”Ì†dÛ_w³íìäT¶¶#ÝîžHÝŸ{yÌùõÄ}z%qOÎÕÄÀÛUÜÏ@ÖpŠûV÷ž•]ý1¸×rì¤SövX,ÅýÃúéVsWq/‰m•QÒ23"îKË§Â¢'î3÷´Jå· Ü½QwŒÝýO•6»k±;ÜTêžÝ]·TÍÜK7ä¿ô”jkîTwš»FÝ+I÷ÊÜ©î_€VÝ9ø÷ ‚ øÕˆû“«ˆûÃ~¼-	YJ}Î¥TÆÛ›“KÅÚÍÛßu.°ö2nfHF††d`íÙH}Km_Îï üñúâžTÜõ¹»ŠûrV°á÷ˆ·zûîâ~¯†A÷Å=}lqŸ;ƒâ>q¬ÒLƒâÎ—–câ¾åÔòšíâ>9M©U÷·%0{s—=UIÌ”°»›;ð{LPwï†äA&ƒæ^Ä½-uÎ%ÕíæþÐ¸’¸?yâA73Ü>’ÁÀVÛ×0>n‡´ë­TßJå¸]b2÷¶ºâ®—=¸Ä*FÛ©íº’êÚnŽ%Óö)Q˜Ÿ:óa¦ÄýŠ*i?i„²AYÄl(íGGG'¸ÚB	g4ækC2š`±xŒáÞŽ·uÿþýörê!8BÂÝï‹&gÌ¹¯¡¹“™‹{Ê'û Q÷I¬{VX6¤z•4‹²“ÂÂIÎÚ¨œ½}ßÚ ûîN&	æÎ°{þcEu×°;Í½-‡”-U9¥*ý2ÜR-qPfîº7;ª€AwàæÎ~mtç’*Ì½ðˆæ.DÔ=‚ nª¸sÖîÓvî¥Vévz{%îÕVê÷o×­Tzû?Jºý½ÚîÞîÖ®;©°vIÉìmç±%³öãšþæYw÷¡ñ¸¸OAm~Äm]Nq7c?6NÀáµ½çí_·ÜÝ.î€âŽ«Kí›ö÷ÿ±w6»m]We²KPt‘QÄAA‹… €g-àI«À7p]»Z¤qZtâi åúšÉ#v/îsï:g{øÊŠdì°h‹±õÃ>m¬½6SÍŽ	îK/î`»¸“ú›˜‰û¸‡‚]‹{^Æ™ÿT•üŸÆðòO)ùg¸"ãî©ö3,‡4ª©;Å3w¸ûÀ-Õnæs§ºÓÜ›A÷'e©{}Œ‰9wPÝó¹{ˆ{A|,âÎúöZÜ¹•
Š“KR&#7—<$#'—²êvé’á´]ï-9IÛµ¶Öžú×cK<ôNââ¾¯¸#“cêþ£f´bFfxK•æ®;ªÏºÃÝaî¬—‘NwÉË0.ÃÕ÷ ‚ ¸ë-bíÔvÉ J;£Ko×q{]&ó_ž\ê¼K©¬n×iûKM·ë½%÷öªJ&ÍÚáí]ÿãøl~êlQô½Å]9í©%°¦,ßT1öÑv³ö¼]šÛ)áûŠûÃ\ÜÊ{-îÞ—˜q-q?Ë­y¶¥^èA4‰âžhˆ»¼|õºÓWü0p³÷>/³œ\]uüæö>X0Ã%Uº»Ì”SwöËä­î}1$ã2R/#æ.Ç˜ îrŒé·ÄÔýSU÷ÚÝ£2‚ nØÙI³K¦K¶³Rµýw`8%3X&Ã¥Ôäír)µöö?g$«Û“¶ÓÛÙ%ÃHÐEd²&„d–ó)‡ëµ¸Ì5òd˜‘C±/-ßÕ2Ïµ/±21ì-Ï-¥¡xÕÿóN©uŠûm§¹§¿Þ_xûÂ˜àfQ®ÃÓÉtEÅh…B¨ñ•oÕ÷”8ÇG<%´öôObkö³U"÷:ÜŽ×NHâ®ŸØÒØ_Ü…åÕawf´Ø].2ñS1usÿ“î4wÙQuwOæÞ/©ÒÜëkL”wËpIUÕ­î¦î`¸2ZÝƒ ‚à¶‹»ÞJm§ÛõæÒSÀ˜S2}¤V·3$Ãyû_ûqû_ ­]ªd˜’yÔá×–ºTÎ`¯[ÜOj<z¢âNTÜÙ"#â¾^çâîsw?¬´KÜÁÃx—?¸¶«¸Çú&î|çñânlw°SÜ}Å}Iq?ÌÜ™ug`æðÄfê[ª†¨»Á¼Œf¨îæî&î—sÿG—e1deî®îF.îFˆ{A||ânÒîâ.m2_n)|²åæ’‘ÛåPªkOÞþ¦ê€ÔŒ¦dºh»_IÅµ%LÛa†7(îÈc˜cn÷Å÷âÜ’¿ˆ¸ÛÛ\ÜSÐ½vv…Úoôv÷1ú ©íÇŠ;8HÜ§Ãâ~nqWu_¦¬Ó¦bÆO2.îyÖ™ÄÜÜRýÖ ¹»º¿—N÷ö’*ÍâÎ¡;ÅÝHâ\ÜíWˆ{A|äâþG÷œÌädÄÛe+•ñv?¹äÚŽŒT@~xqÉÄ}PÛÕÛ¿cHæ|4…ÀAánLÜY­¸Ÿ¸ÏÖ¹¸Š»¿¥¸ÿêpqq·_w(ñõ‰»±·¸wEÜ<"ì^6Ì¼6$ê^o©JÔyfÒ’*3ÿnîgîbîHË<sß-îŸ‡¸AÁÝ‘vZ»;{±–Ê2™Ïë|;R2´v°ûæR9nïÊdàí)%Cowm÷l;—RAj€Ô
HÞ[ÒÌb<÷©­]}q×‚ð•P]ò“EÆlMhÜU«LJ¹k[LSÜÉf7u]‹;ðÏ‡—*q/¿º†€<ŽwÁyÖv¿êIòÎX‰{¾)þ³~CµÑ>/È_…¹§EÕq—u7w—‹Ljî†žReÔ½ÈËdç˜¾iÝÝÜ÷½Æ¤A÷ºÑýÁU£÷BÝCÞƒ ‚àç÷ß·Å=i;c2wz{§íÒ&Sß\Òq;»Û7;©,“áNj
É€’ÔöªJæuÚH…·§kK«¹«Üôv‹ûì†ÄPÜAÒ÷ÅÜJq'×+î‰Ñ¦h2ÃÔcwÌ uwª;kÝ‹V÷—e^æy_iânPÝ5.ÃkLl—aÒÐÜ1wºŠ;q‚ ‚;/î âîPÜ»¸év­n§¶³º]¥Ê´Ò²l»Ñ²vÀ&™««9¤†¸‡¸ŠûÙQâî©È{ŸugÁL˜¡º»¼kÁLÑêÎjÈoØ/ÓXR…»3éqOS÷$î_„¸AÁÝ¿¹Ä+0Ý.7—¨í¬“©.i	$½=ÛõR*Å=y»Aowmo†dèí¼·ô®×öÑé½ËKZ;Åý¤Ô»Ÿ"îsÀÔ3XeÐ6ý¸’21:gë‚2Œ^š9‹!yWIBîMÖ3a‘16ô(‘Š;+Þ+MïDšOœ‰ú/$qWò(;Wpµª Ø¬•÷b„=ƒù‰ÆõÏù“EIïŸƒ3°Qö¸˜yÇÀŒÖº30£­î,uAsOy™®^ÆCª4w)†lœQ¥¹Ë5&YQý4³÷<ê×˜‚ ‚ànŠ{vtIb2FŸ’¸g)CÆíõÉ%ƒ)†Ûm×½ý5¤=5É $3º¸¸¸wïâvgÄ]Fâ»Åýá6q_ç¸·§HTÜOÜGBÜŸ¹CÝdÃLŠº73FoîŒº³Ô½Swî¨BÜ™tïÌêþ=pugÎêÎ™{ˆ{A|dâþ`èX*[ Ñ&#[©Ù&“ßJm•É”ãöç·×éöTÙöv·v˜RÑ$³ºxûöí©Eb±˜kwç|˜ÜØIoÐU€e‡¹³¡ÞÞ÷uÍ¢M~šô q'çò™ÄÝi‹;X9{‹»$¼F"îöx¸Ÿ¤6wc	PÄ†vCn3÷?7ÌqRuu§¹7êeŒt—;ªtw—÷".Ã>÷÷ ‚ ¸#âž´ñöÞ®åíåèRus‰Þ^¤ÛßkJ&U·¿iŒÛÕÚA
·3$ã½í£‹Kwö>– ÷®|Hq_µÄÝ5Ýø8ŸkÒyzéæ›¹ûAâ>³îÉ>[Ã‘âFnÌÖHÃ“ÍŸwˆ;Þw-âÎ‰;9\ÜùŠÈ`îW‹õÚò2IÝ9ÉÜkwOæ®Ío¸£Ê¡û+š;Ôæ^_câŠ*ó2jî,†R.Ó«{ˆ{AÜ {,¥ª·—ÝíeJ†-]HæKÆÛ‹q»Á[©Ðv£Q&ãÓvŒÛyr‰Ýírq©‘’IÖàìà»LÛËË‹‹¦¸+ª‹Ç‹;Æ±‚ˆ;7R)îpö„ÌÜk2+“Ë;­]™}2IÜ‡Š;è‹ëçùnÌCâ>/Y»2üJLõ›Nq¯9É^qŠ;{ÜeU¢â¾2²Mã¢î˜œºº×êÎCªÌË°Ó}xènì3tÿ˜»,©òŠêít§¹G£{AÜq—&™¶¸ÃÚeÞ.·R©íEJÆ¨Óíš’ñ¥Ô¯5%“ºd+©¯»&™wm_G–‘9½¼ ÇŠûÔø‰â>·DÜg‰û“Œë÷“£Å}
®OÜÁ5Šûr»¸_]»¨ûfî)0£kª2t—¼ÌýÕ½t÷kLÚ.#Å¬…”F÷¶¸³Ó=Ä=‚ >8»¬ä5Z	†¯.}AoÏO¥‚ÿ½·óä’á'—º2ž\z¥§R_îíœ¶×)j;S2>mÿÚ>Ÿž¾…¹Ÿ^Bã´É´Å ®û‚â’xXÂ93ªaû¤&U@*ÉÛ!ñB¥íN–É¼]œ½KÆLòOG3î	oZdccyñÃ'¹øž+gNÙý*T±~»WÆhCúk×ð/¦Ö_Êrœ±˜ÉE&î©ÊÔ]¢îì—a§;©¾‚º§v­—Ñ¼ÌSÉËðŽjV/s¼Å¤Õt÷_¡îAApSâÎþöm×Re2†ÜJ5x+UÒíí­ÔgÕRê›ÂÛ×v ÞîE2)&Ó·ãJj{ŒÞ¤©í{‰{J9“ê,ê¸»›« §‰{£[f Wu¥´gŸCQ%_‹»LÝ÷w˜²Š»#â®ì+îÊ¨!î@Ä)îxlˆ»þ˜¶puÿ¢îœºWæþ§¦¹ë’jgîïÙ¹ÍÜÿÞÇežQÍÌ½ì…äÔ½)îNˆ{AÜ>q×˜ËÛ]ÜÙ&c°M&;–ú¶Éè¼æÑiû3=•êÝí_éR*µ]½ÝS2¬’9™n,ü.‹»â~‡ÄˆºKÁ†î4wP$Ýµ_†×˜¾eÐê.;ª­v™§nî.î4w£hte\&Ä=‚ nƒ·ÆN’µ³»}qgºe2¼ºÄ£K´]¼e2ÞÝÞÅd¨íôv×vC¥r(µŸ¶¯ãùéé[¿”ºƒLäYî>r¶e†£2}Hïæ]Ô**ã¿¿R¢{"^®ù>÷Kc½¡)îDÅê>(îšYWI>Vµ¸×Ñ÷QÆÐÏ]IÜ™_,W`Ž÷ê„ª|Â8ûn<›õ™ª¤û?›ý24w¨»‘†îz‰•îrFU1=)â2û‹;;Ý“»wâ¾yˆ {AÜ€³Käæ»Û]Ùë˜Œ¶@ÚéÞÎc©Ôv–@RIoÁq»¦Ûéíªíîí¬’1mçU¥CÅ.î4>H©êûž‹{5d§¸+.ë÷>ß>y»?º™§¨;‡îkÄ}–‹{÷SÃg«ÌÛ¯ŒÉDÅ]gîÕm©3ç¼œ‘s[3=Ú»ÿ¾J»Ûãü×Æ\M_»Ðwk}dwån¦ÎÀw>‘¯£vß½ÓÜÇøf.²‹LºSÝ›I÷¯2sAs×ÕV»ÌÅÚÉœ;hÄe@*†^‰7QÿgïüZ»®(Ž<Œ0šB¥kÈS¬?¦~H1úÒ‡”L<ÌCš6-Ô)õ4SLæyš¯¢—Ò·|¾ì¥}î]ç,Ý£?#[¶3û—‰-ëZŽDùùdíµƒ îMÜÄÚNoÏÛAkí×eJ&iû{î\rkg›§RóÈ¢ò ·³KF÷¤ÂÚEÛ‡Gìg?¸Óñé®Åý×÷òNˆ{{‘”›QGžï¬wûk4ÝKÜÉ!Å}¼AÜ'·!îO?DÜùlšÉÌÔý'ÌÀÜ¨;7©J5$ã2,†ä¡;ÛeÜÝ5/sã‡î¬—¹^Ù£
hîEÒÝ½ân„¸AÁý‰;½}“¸_\lwx;[ ™’ñ¡T#[•JmgJF: ûNÛS2X”šªdFÏX¹þ¡âŽòw³voŠ{Y#âî",âÞ±YÜõÞÖ×^oï¶KqWe/|¼³üTx*TÅî]÷ÒÑ›%;‹;.¯TGö‹;˜ì%î\Ô$ãO–àÖ7(õËÏëÅ=ßµÕ ­3.xêÎÀŒ›»sÅ¡; ¹‹ºÿCªš—É“î,—Y'î[‰;Ì=Ä=‚ îQÜÏ|¨‹»lK½pº6ÖÉÜô¶·ÿ‰Þ.åíåªT¯n§·³KF¼]; Ñ$Ãp»yŒî6Ä}²Ÿ¸?oXñ&q?^+î}÷Êy:¯»¸¿øÈÄ}0¸qOˆ¸¿1&Uq'÷1ûI3:NQ÷®`¦(uw9tgÒÝKÝµÓ]Íê.í2ºß´å2€æd‹êq??q‚ ‚ûwX»!ÖîâÎK°vm¼¦·gc©y¼]ÓíÿðvÉ¸¶Åq;¼½n×ÓöwÙLjsÊÅj{ªgu<ds©âÎ‰TRˆ{¦½O…ÃV¼³¸'^(Uqo:îíÛŠû)¨Š;¯n-îªïÊöâ>Îf‰çCÒ@ÜÁ&g_+îDÄÝ¡¸3¤sMÜ]Ý_h^†æîê^$Ýáîl†lûeŠEªŒË¸º‹¹ssî™¹_ËU£ØÆTnbJó©Æyˆ{AÜ—¶Ëi{¶+Hº]½Ò´NÆóíÕ]©ß1&#e2<n¯tÉ¸¶©’ùi:¢Aî%îŽ®éÄÇ9i”¡2í!‰;ÁÇ«VÎËuqç£×ˆ{«í3ƒU8ýO³ýN:(ÝTÄ]ØZÜq­&î`žáw§Ï£Ó¿ We2ŸÍ6jûúwÆ:qç“?rzÄ/Ò³2IÝ-êÎ)Õwy5diî/¥ò7©‹T‹bH­—á™;&T¡îœP5VÌ]’î¿“=ªù„j¨{A<q/b2Z'ãÖîÚ.ÞÎÈäí\•šºÛ%ÝmçPª·³KÆS2>“*ë7÷÷ñG!î¼â~§âs.xèþ®u©û˜¼2•ºë"UîQÕzš{­\Æƒî!îAAð8æRÓÿ÷.ÜA®íôvmd}ûQ.Kew;½m2ŒÉh™Û+e2ÿ4oÛ•Éü˜R2£4l\?à/n¢OÜ¡€I8UÜ¥C
ŒÛò+ÛzœSˆûñ
…µã±"î•x{z¦wm£=Ã5âŽÚ1Kœ
~¯|Û)É/õt»Ë¯HL©k`†âø»BúaëjÛõíAò+J.îú”ù;M&îöÇþæeÚ¨ûï·e^¦¯²3÷o¸i]\FgT=.“Ô…îÚIs§º›»k+äg)]AApHq?q?9Y/î Þò6™"$ÃòvÆdxàŽ©TŽ¥ÒÛ%ÞÎp»‹{Ù¹tvûÓV@.&ôþRÄÝ÷¨RÜz;Å÷‡¸?\q‡ºãÐÝÔæ.ywîcòbHž¹'sçˆê•Œ¨~Zsg^ÆøªÈËt[T™sßIÜÏCÜƒ ‚à 9™ÏûÈ±Ô—¥ùÒ% 1™×m¸C©,“1:m÷K†§Û=ÞÎt»!ÇíÕKôv#¥dÃ£ºtQÜw`¬˜ wC°QÜwÂ·§öCqŸ’ì*Ì»EÜ§`+q/&U³PÍfq'*æD¿µÉPqwfw(îü9ûˆ»Q>åq7DÜÁ|ñêsT÷òÐÝè=t÷mL›â2·1¹¹çCª—a£;à€ª›{¦î™¸GZ&‚ îAÜÛ”L÷ß×vˆ{%&s·÷ž·ÓÛWK ÿÚS™´Þ®évV@¦æö”’9~>wÏû‹»¢âNw¯Šû”ì(î…˜ãîOTÜ;gÇ'÷¼óØ_ÜÁ:qO_m÷†|,â~šÄ}@./ÏæÃERe«;«!eÓ—l†|u×bH­tWsÏÖ¨J½Í½/.q§º³[Æø„¸AÁá´ýÜÈ: Ëµ]¼ôÄÛ¡íÿÐÈ$îôöï¤¼]ÊddåRîí°v¥‹f»Sq'ji‰Ü_wÊÈ85q¼£ûþôH2­äß«â(îÃâž^øÌ©Š»±—¸ƒ>qŸì$îü¡*î`“¸‘ö¹ÓÅ}ì»£iÕ½wH•æ^&Ý¢ò?Zéuïí…ôœ;â2›ƒîltwŠÕ/†)gêAwdÛUÜ“‘x»ýÚžÊÛoo¸¶K¾9h{¶+Uc2ßLÉÐÛ]Ûéí’’¶[¸ý)¸mq?LÜÉ–â>\‚K‰÷ƒˆûòËy»JUúe*‹TY/Ã=ª2£ÊCw)—A»+Ýtg¥{kîå*&£WÜýØ=Ä=‚ îXÚŸ‘”‘¡¸ÿ¦2–ú9¼ânäâ~cøÎ%]ºd-,“aL¦(Ô”Œ–É°¹½KÉL›£¶°OTkOqŸ;´½š¾g¡™Nb±Vi;¤’ø…Š;`£$—8OŒ,/âžlþ="îJcàuOì5Uq/ý\Â4uÚcþy?“©÷¬‰;hHú"îI¡ûU}œ±YÜÁ¤ƒïìiûWÝ;þ@³Xý2(u—éMºm§»Äe´^FÝYéõ27†ˆ»Ÿ¹ãÈý•™»åÜŠ»›;ó2Æ3òAw„ÛÆd¤M†k—ü¼ý«n,õ{i“ñ”ÛÛÿÇKŒÉ@Ûo_é€äÎ%(.JÎOo]Ü'@ìq'qß=ë^w^qòßðYÛÛ—Ÿ›RÜñ,	ý¾¥qqwËÜAÜÁý‰;>±“æ.Äˆ·sß«Þ0G0·R÷’—»ÓÜ+ÍoòCwMº³ÒÜ]ÚeäÐý5ã2×º{£û+‰Ë¤Õ÷ ‚ xˆâžåÛçRÊX*ÅÝÓím™s2Ü¹”{ûÝ¹¤ÞqçPê»®rÔ=>qkÅl!îÃ_š¸ƒG%îF3ò¼ŒÌ˜¸§R÷õ˜»¡õ2jîžtÿKVéÎ]L÷o5-ãA÷ë¬ò"Ä=‚ ®¸³Pfí`jVß^hû{X»Ô@þÁÅ;—´M&•ÉÔv£\¹d0Ü–ÿ_V@ÆRÜÁý‹û4ÄýÁ‹;>,R«;êe&Ýó¼“î_Kqç"Õ.èÎbHwÎ¨2èþ­‘Ì½swŠ{2÷Š¸ƒ÷ ‚ Ø—õÊ®{—ŒNÚ¡í)Ý®s© ÚØÉóörY*¶¥ª·{›w.q*e2’’Åq;W.q*õ¿)%ƒüù¾âÎ »:ûŠQÖ”tž«EåÃ>*Ö.¡wnfÖ>ZL§¸—šÜt~^w0Ip«ÒFðM; Û›úÄ]úõWHI¼>š@Üââ*æ›'Ë oN
Š·N÷BÎÙ¼‹º·îE½Í]ÝY/SVº_1èž­QuswuçUŠ;k!iîQÕB÷ÃÔÝ97¨î%¡îAApâÎöö$îôóvx»Î¥9™.%cx¼Ý(âí~Ü~Å©T-ü³ÑWÝn´]2ðv¤dì¸]2£É`üÈÄDÜ½†|DâN%îd{q]ÜÏ.sTCb“GÝíÍÎEªE©û—ºH•Å—¡¹sFqgîíU›P¬…4ò3wŒ¨ÂÝ[q!îAA°µˆŒ¢[—`íàDŽÛ]Ü5Þ®u2]¤{;è¼ùv]ºÔoO%Z&Ó·³L&uÉ,Ð%óÄìçl|â>'›ÄZ)4F'ÀìüßìíJÊÁàæJf¤LõŠßœê7Ÿ _×EùUiÁÉšP&ü•d/fNUÜIjöÙFÜiÜ½õ+r½´ñNÊ—Ÿ?XÜzQqç[Y¥ÖÜÏæs{_^^Îçm¿ÌðÐ½2£ú5Í]{!iîF¿¹û„j:sÌÝÕy™ÏNÝ{¶¨BÜA—a+¤™ ‚ ¸cqg}û«Wºv‰õíyÄu2Úyu%ÚnÞÎH×võvvÉ¸·sãÒðìé“&îIÕAo]Ü‡Ã]Å]éŠÆg.·â>|¬âN®¸mµýlÞº›¸ûa?ü0>³Vw/u§¹Ë"Õ— ™;ëeú*Ýt§¹ËŒê÷åUˆ;ƒî€iš{ˆ{AJÜŸuâ~b¤ L^ß í½5Ôv_–j°ò.Kõ2zûßYÞîÞÎU©ÉÛµº¼¥·£Kfñ3{gÐ"ÇuEaº§&L#Ú^h*ÝÔb"’ {²	ÚhâIHÈ"Är„Á2Á¿@ ãUþŠ6ÿÄÜÓ÷U÷NÕë®Ê´'#ç~`»[Ý]êÅ§«óÎ½~÷î™ûœ^ÜìŽ‰;1&dwŽSw§.î½½.î—Ê8UqÛíÉÅ]ß‘"çK‹ûZ©‹»²\Ü•º¸ãMìv;ÿ^š¸ƒëëÍ&™»©{?t›JÝÙé.S÷—ù"Uš;â2F¹Œ‰Aw£0÷—¹Ÿgê^ÔBÂÜA.îÃÕBÜ?q‚ ‚»Šû'qÏO¥ö]2@ÛÛéíÌÉø±TÌÛ'êÛ‹¥KÈ·³¼Ý€¶ÓÛY&Cq¯ŒÛ¯¯ß…¸ŸFÜÇ9ü@Ü×æíx—ÎƒwÒ6Å}˜¹_cÒŸÄæÞ°ÔCwÆehî‚¹3/£CwË¼’vwîbúÎ¨²ÒÅÝw1±’q™º¥¸“÷ ‚ X\9“½´³RÅÚ®âÎ˜Œk;ÇíRßnÞÎ¥Kl“¡·g»Rçí¸‡Rßø¡Ô|Ü~Rqßö)îÞ»:n]Â]EÜ^BTÅ]QÏž|>tÃÛ†ªNT»éÉ]NžÃ¼}g4†\HVfTé8Dë«â“1FÕ´î+‡/HO¶Ÿ	WóW‹¶ŸehT^9òÍ”2:R0ãø7GyF8}ÄÑIân·»÷OôCªù6&CÌâþr*.c¸¹{^¦ŒËH¹Œáî AwÃgîsÄ]{!¡îÕ¸L¨{A85gWúa{ÙÞþÄaº=+og$¬]ãíîíÒÞ.ñv´·Ë²Ti“)v.ÑÚYÝ.ãöíÅ÷K´‹–U†0ÿì›û‰›+ÛU¤fÐÛü­2Ñðƒ©nÆ$ò#âÎ¹z“Ó—¶s÷j»ƒO‘âÕÅ§ò[—;¾ ‰;á'tÕ/Pµt	<Ÿø)|lv7^»¯„!+'ÙrÇ7‰ûø˜nÒÂþ"gy«w23?Ly¼dsÆ¨ý„¸Ÿ7-ØÙ6Éßì_‡à„ªýkÕ<*ó2¾ŽIö1é6¦¢]FÍq˜».cbÐí2©’Aw0ÄeX/ãîîÞÞÏÝ‡‘{¸{AÜ›¸ÃÚ™owqwoçÀ]ÛÛ5&óM¿uI[ ³òö?OÉÓvõvß”ú~åÞ®â¾é¹‹¸7PÜÉéÅˆ«w|ŽŸ¸ãg=ëÄÝÄÝßÌæbBÜ/qçgÆuqqíX]¾O›TMÜiî@¶1I½“î0w#7÷¿I£»š»lQ…¸ÓÜí7‚÷ ‚ ¸Oqg¸]Ä}zíÒ‹Câ~{ÛŸKe›Ä][ ¹tÉµÝ½ãö4oOãvÃ½Ýíž’1|Üþ¨]™ AÛIæ]  JôÁÅAö|¨ê:E¿	o.Hxû5çˆ»j÷pkD¥)îDÄ½%w¿—îó“×±n–‰;ÑÐzÞŸÝžêÖçº¸ç/ö«wýùO–¦x=—zö
*îüŽìKåyþÍ†üâØgÉW©ºº·Pwäe¼òMÖé.ÅCZêÎ5ª¥¹ãŒêÁ]L¨…ôn™ÛŠ¸ÖQ•VHw‰º‡¸AÁ	Å}¸ÿ6kgÀ½Ry›K­ÄdÔÛeYj·“áÎ%-“Á¦Ô5­]Ä¤	ê"q‡öž^Ü°TÜ¡“Ó‹;^R¡¬k\,îjí*îd™¸oŠûU:"üßŠûúâ~qLÜ	ÿàæÆÍýÝÅÍÖ©î×1õ2ÜÆ$•îÕ¸ŒöBº¹3èÎr7÷¢\FW1qª‹»¯b’˜{ˆ{AÌdQ$ÅÒž`J†Ún¤t{½Mæ+ŽÛ{oç¸ÞþÊO¥ÊÎ%-o¯t·Òíóö¹â¾®‰»Æ´ëâÞNó@Ä½™/îöOMÜñ²^ÜWcq·[\Ü	ÅÝ®qÿ¹wS÷T/Ã~ít×JwÝÙéÅ–Ñ¡û†vQõ ;k!7wÝÓUæeÜÜ]ÞCÜƒ ‚à„u2^(Ã”½ýÙHÜ¹v©*îÞùííœ·{$Ä]ÒíôvcŸ’9âíoßþ°×öŽn$â>C«VÅ=£"«sé2Ž‰;éÅ·EÛëâ®w0Ã/Z]ÒËfˆ;e_©Iü¤¸
¾\Ü§ãæ«-±Ÿƒ1Pw°>ÂLqŸ®/Úæ\â~>•{Â{ÙÈ¶}©ûAs7Ê#ª<£
swuG£»ôBÊU˜û—"î:sWqsg^Õ2Óê½AAˆûqq‡²ÅýÉXÜaí\»äâÎÈÔùƒ1™”“ñt»!ííôöÔÝ®Þn°¼e2éT*»ÛeØ^ww¶kã¸75øØÿNÜqÝ÷iq^Ü7ww°Jæ>´Ë°^¦/†4fšûÐ.óERwÎÜ—ºÝ‹;x!«˜@ˆ{AœÄÚI*o·>h»ˆ;×¥æ‹—>Ë¼=k“A¾Ýc2îíÕS©ðv-o÷KFQ©e2·»·CÛŸ6«ïµ#ç:I\ÜådYŠmÛV<w1íQš
’*ç›àyÔ½%3U_Z²\Z¯¥0è®rMq¯Ó7´€\Ï³KYª”{¸¿VzŽ¸gÇSÓ/p!ÿûŸÕ÷ý¦âÕüxò]Ó.R3Ù{þTWÿ§V÷ì
~émãêŽ™;£î£z˜;+ÝÝÝaîštçUÝuªŸQ•BwŽÜå„*«e˜»ƒ¼ŒÿŽsw‚ ‚%âî³v0Ñ	kÐvö·§6z»‘{;óíå²TÖ@~HÞ^Ädx,5ÅÛóq»®Je™ÌûíÍxÞÎqUÜ“™eÒwÙRÛ…ñðú4â¾œ«#5®yû½ˆ;Y&îdxj
x‘¸oUÜ·¤o_¼™¸¯@ÑK¹o†dÒ]©Û˜Œrèî½ºÓÜµ]†3÷dîŒË°\&™;Ô]ã24wŠ{¶‹)Ä=‚ N+îz0õÐvàÞžÄýÖûdÄÛÇÇR¡íŒÉT–.½4¤’e2~(ÕËdÞ·«›#Ä=Äýg+î@Â@¸äjeCwCþÀz™Š¹3/£qÎÜ¹Fõw†šûW,—‘´Œÿ^ q!îAAp:oiÏ“·»³ƒ_ýíº.•ãvz;âíF¥’99–ê9™Š·ë®T×ö7ÇËd(îŠîÉ/­ïŠâ~œ9Ò~zqowW(Ä½=¢ƒsÅ½Ip{¯[dÜAUÜ•CŸ¢¬ª¬¸uÕž¾qø½®ó÷÷Bâ7 x3Ä}SRü4*î²žžÎÙ®†âœ°î8tOAwƒ•îw1åI÷Å.¦W0÷JZæµQ¬bú¼0w]¢:ŠËôæÜÝŸWÕ=Ì=‚ qŸ%îÃ°ÚNowqçÖ%ÓvÕÉÜöu2ðvŽÛ™o‡µ§x»ÏÛë-îíŒ·CÛÕÛ=Ý¾¦µÿˆ{ÛÞ£¸k$M<ÄÜ£¸ƒä—¸,Š!Ó"Õ·iæÎNwºk/$ƒî0÷|j2w¶Ëå2œ¹ÿ&åÜÙ
‰%ª<¡ªîÃ2¦÷ ‚ X íì“´=…dò”ŒKMÓv#MÛµN†ÇRÉÐÛ%Þo‡¶ÓÛË6î\BH¦(“y¼>Ë¥žÑŠàvÙíq_uö†Ù¤õG‰Çç3T~‘µÏyüíŠl	í­Š{fÓ­Cqïš™>îü%þ%“bœ^Äï.î˜-ç¯>,îÝ³Zgcë¨¸Ý_º®ñ”ô±¸wÀŸ·HÜ©î†ÿ=†Š»ö¥/).¿µI2t‡¼÷ÅFiîŒËt§¹k/¤áAw7wæÜ=èÞOÝY.S/tOêþ|ÀÅ=ä=‚ q¿›¸?ËÅÖ.óö¯ý\*×¥º·£‚"·—ÞþÞž·ÉðTªîJ5òt;ðU©“1o?ËšÅ‰–‹ûîüüSÞþÀÄ½sÅÜ³¸!î?¥¸¡þ«•Þ†ïs2s7uO3wpxèÎ3ª).óm2wí…Ô5ªø?›qÝ“¸ëÌ=Ä=‚ æ±¬Ò¦ríÅ]¼óv©ogŒ1o×y{6ng{ût›½ýŸàM*“I;—šÕE‘’9[;eÁ á£ÅÁÈüPçù§¿2‘û÷¶‚<ÚMˆ;Mø˜¸· *î|¶’ø”¸ƒ¥âÞUR2B&øÅ¨¸ƒâ®×XOŠ;nÜEÜ/EÜGT^Ä=f:/†4sÌË¨¹ëUOº[Ý¹‹ÉHâ^”Ëü›æžò2y-$x
sfPÝ¹D5ÅeBÜƒ ‚÷ùâmWq7kÖ{;k +Þþ¯ÂÛ_Wæíßø¼Ý½âŽ˜O¥j{»Æd íù©ÔNÛdTÜâ¾oÐâÞu?™¸#(tq·ÇCÜïWÜÉªÃÐÝã2F:¤ú{ÙÆTºgTµRÝåˆ*“î£BwÀ°‡îq!îAAhûc©û1&ã˜¶Ë¹Ô_Ë±Tc²¾Ýø²˜·ËÚ%Ý–º¸rÐv··«‰=òNçÌwÚ­edž:wa®¸·d©¸óŽÜ£´‹¸ð€jbºû¨¸9ÉÊ8ý\`‘ã#q/¹rÚIq÷gŒ„zlíN!îÙCÅ«RÀh†´w@Ì\Ä=Ê1sç·*à/a.îMIþí·Ã:wß |Ý5™t/â2š–qu×^H­…4*å28¡Ê ;ã2L¹ç½l—y2¨;Å=S÷˜¹A¡íÒí€5`\'Sx»;û0ng¼ýÖÇíý¼ÝÐq»{»-]ÊÛÛ“á¸ÖÎKôvŽÛ›ÕÈ‡8lïœ¦ÙM— ¹ÛCî;É‘i»ð(£"î‚„Ò—‰;ï(÷µQ÷L‹ûX¡çvÜ´„cñ[£%õ§t%­3=èo@òxr9)îJñx)îk²HÜùàaqOLŠû¶"î5ößoøïnôç´øª™0wQw¸»žQMÅ7’ºq™/&w1}ç…îºCw.c¢¹k¹+Ý™tÿE$ÝÿÃÞùü¶q]Qd¨‚AÐÌ$ð&&^Ð‹Ê…Ýê^Y4V½ˆì…#pjA½ð¶€ýïx“¢+ÿ}½wî›9ï™7$%Å¦ãû! %’æ/+À§ëóÎuÇq\Üß“¸Û¾TeLÛáí¡¾ý»´NF¦íaYêYOºýÏ“¸òír*e2W÷ªê÷£÷jWÅ½tqÿ â.@Üˆ»þ’îM1äÉ…Ýw:£z&X\æU—áœ;mQµ¤{,îßo'î†‹»ã8Žãl-î¼0Þž÷¯IÜáíZ'c19x»i»z{w[ê?j“¡S©IÌËfçÒ£7Ãâ>qW î…2Ž.î.î¸ß«¸ï*1wTº›¸÷ïQ¥^H5÷4.óKŸ¹£µaî©¸ÈÊ$â.¸¸;Žã8Ž±}Ÿòí´0õ÷AÜÛB¬K¥­K:mÇ¹TóvÛºmçÈW¯N¥
Ðö6&Sï\Z>qO¢2ñ¡Ô(s]§œ0oo¼ýàÈ woþPÈ‰;ØìÈ)S‹{-©å<ßpÉ.žÛ†´¹¸çPÉ™ÍÅ=‰;1ÉZ5n•öµÝiSqÇ£<'ÃâÞ]FÇfÛ“{É/-±¸ãg–½]©Ÿh´,Ž­í2¦î0wŽËÐ2&ºŸ×êþ4¨;j!Q.Ó[‰VH> šDeÂÕZÜÛ¤»wË8Žã8.î9qO´]Åý¡¸Ó¹T{—NO[mÇ¸]€·§õí¢ík½»RÏ‚¶ó®Tx{[9[§€Å=Lg‡^rStu/HV@‚ÙùÑ_Ü»Gâ>ÛDÜ¹ûãòânTŒ½ôQŸ°]‹¸OÖ‹»\¬ÐX³sâ>Ä½Òg77â®ÁüCˆû8/îñ‡^Ò?ˆû¾ü'îÓñjVÝÿ£Iw˜{1äêeÌÜyèþT¨Í]€¹›º‡ ;ÇeÚv™SËñÌZ!uh€#ª.îŽã8Ž;»‘‹·7ùö(%c@Û£œÌƒFÜUÛ•oç:ž·ÿÒ“yÆËR¿¡¥KÑÖ¥—8•º€±¸Cs¥†jšÁÙ S¾mÅ}&dÄ}vS1o/RqŸdâÎl.îøvýæ}ób}$âö^ÅnL_JÿûèÜyPÜYœ7¢Lá§“÷¤äÄ‰ÆíÄ=½WÖ~ÜoKqô#›Tâô‰{»ŒèkµRÊrÌ|¦èƒOë3ªaèsWq2½bîm¹Çežn2s7u¯Å½¶‰IisîPwÄe’ZHwwwÇqÇÅ}{q·y{¨„·?~Ü¬K¥;×@š·£²¸?Éx;âíˆÉ¼­ @ˆûl–ÊçÒî q¯%uÏ´}XÜõ¡\Ü]Ümq‡¹_BÜë'’Gn·1iŸ{&ès¯Õk!ƒ¹qG-$úÜ­ò[6÷çÏQèN3wwÇqÇÙ^Üop¾]s2Ø—ŠœŒŠ;ö.±·Û¹T;–ÚÔ@¢¾5/ºóögÐvZ–Ú*;—m§M6eIÚno…àÙlÖzmSy$ˆ¸ß¹s'6÷ƒÙM£»€©S´ÍÏ¨KáŸ 6÷&ê3fTUÜkR7†-§×¦â6þ¤«øæ$	˜ðëÅ}S
+%|aÁ¦šû†»·Þ[_\NÜG£íÄ7_Ÿ¸eÙ|dQ¢}AÔŸˆý {tÓh‰3ªˆË@ÝaîIÐýmQ¥#ª0w^Åôsjî¹#.ºe îŸ+sÒ>wwÇqÇ½ýw9o¿…u©5¶c_*Ä1ÁâíVß.Ú>äí¨oÿgëíhä:”··Óvx;OÛ±T©,Ã¡gF=3/Y\î{ûå(ÁÆî‡{â0;çÝ'W]²7-¢ê Ä=VÔ<Ù1¹4–<Ct½yÕ4…Ï¿±IüÚ—²2jiÇ; î¹uŸ¸Ã¨·_™
pMžý!qgæmiÐ¿dðµ¸/r¯7læ‚î¶FÕÔâ2ºcSÎÜ‘–A\¦§Ð3w1a‡ªÐ¨;™;pswÇq\Ü·wÜó}2ˆÉ`íÅÛÍÛí\ªi;-K…¶›¸ãT*ÚdæÓµâ^àí$îéÔÃÃÙ,#îÀÅÝÅ½Ûâ®¨¸W“YˆË$gT9èN½Ù#ª¦îfî¨…´ª¨…än¥‰¹»¸;Žã8ÎÖÖ~£Aœ]	ÞÞÆdÈÛQyû}x»€s©ìíaé’pŽ­K6oÚÛÏ0nGN†Z ©M†Ä}.,„r…ZGh»Š;¬±{AÜïõŠ»5Êì1OïŠ{µ}²»bLR«y¿¸‡Œûr=£W÷F£ñ
ƒ7Ry‹;¾[ö‹;³Gâ®”8ãnQqîä–¹p9q_’vw¦ªš¿ÆLLiÑ}™ióÍh*ÝuæNæÎå2g‘¹sZFÍý¿2tÿ—@AwœPý66÷ûBcî˜¹±¹³ºÿQQo¸»;Žã8.îýâþóvÔ@Z¾ãvwµöÈÛmí’ÜUÛÙÛÿŽyû9Õ@š·ÿ˜ÆÛj“¹øAµ]òíuL¦¨ØÛYÜÍÛ×‹û¬ v'wÒö÷ÒÄ0]¼_q‡W~Lâ>vZÜËâ.%îŠšû»ÿI\æ¥ròÃµË Ð]è”Ëüs?<¢j›˜ÌÜ»}îJs‡ºCÜ?¸¸;Žã8.îƒâN1™»Ðv:—ZÜEÛÑvädš"Hñvê¤m©TßnÞŽúvw·ŸÄ1™Y5›Ì«6ÑùX½½+î–sA27+(Ú*sïÒâ>²âŽÝ¨¸ÄBÝãô¦jÙ‰NÜ›#¼­öÎ¯CÜaÐÁ!Ûí­eO>Æ®ÄaÌ ©üìcÝöW‹{Ôé^Ö®
qG„f¸Ã çÆ‡wüþµ°µ`Äj+q×5ª“¢]Æt"`èŽªñÕQèŽ¡»¤Üdäžk…Ô‘;·B"æŽnäÜ•XÜ…‡.îŽã8Ž‹ûÅãvÊˆµSL&äÛ¡ít,•[ ¹Næ›¤Ò¦íðvœJï?ŠÅ}\ÓŠ»¶é•UŸ¸‘¸ê¸½öp¡¾88Þqç½©.î×.îxÉ¿ž¸WÕ.‹ûxXÜ—Bueq{ty™dSˆË@ÝŸP\&ºëÕtD5Ë|ß9¡ú ;twqwÇqœmÄýÆeÅçRÃºTÔ·79Ädóöðöoàí“·Çåí±·/oO§Ãâ.ð¬¸«¹CÜ­hæ8ð1‹;|ï=Š;øPâ>ùDÄ}qâ>.ß¿C»ÌÉ™ûßlQ}‚-ªfîÔè®âNGTyS´Cõù–âŽŒ»àâî8ŽãüÖÉK;‹;/=L¦’·uL&““ALùv‹É ¾Ž¥ÒÖ%´·“·Ÿ4Þn%Þp²4ÁíXÜƒ¼|iâ>â~S¯ìrÄt½](ÖFÚ™Ê`qì‚Ì¼#î&q1½¹ì$OÕÃ–Þq7›lßH¸¬"èÞ¥²ê<#÷åËÎ«ÂØãµ„ÅB²q7 îÉÑ€Ú¨÷IÜ¯;³NÜý:ù ;?	©¸/¸Áì}5Ã2&á‡¦’¨R¹Œ¬Hƒ¹«¸›¹ã„jf‰ª¥e„ûÏïsWwgsîŠ»sÇ"&wÃÅÝqÇùÅý‹;æí2o§s©§AÜ1o×m©_AÛmÞN9h{7ÞnÞnõíÝ6µvx{ˆÉÜž¾Î‹ûbCq?TvQÜËVÜ»#îÊ.‹ûþ•Å]ÙDÜÇXÆÌÝÜ=ÙÅ„v™ÁZÈfèNA÷pDÕv1}¥D3wwák%n…TÐ,Câ.¸¸;Žã8¿i­S2í¾ÔÏ’QLÛÑ's*Ò.$9	²þåÛEÛ3Þ~žz;Úd0n7m‡·#&cËRµ¼}4¾!ë™µ é (…ßEKˆÊ´µ2ˆÏdéZûMaÖsâ^e Û)Au!pëwû£©Ú>ðGæ±Y—«U¸ó[6VBO®Ç6÷ƒª‡’¨&DÑrXSàÃÇ²Ú!qðÎÊØ!îàýˆ{ÿÓ.bLâ³â^IÏˆ;Ø×3ªïDÝ).#âŽ {—AZæYjîçdîI¹Ì¿ÍÜuäÞÄe–©Gî§ºc‡j˜¹ÕìP¥¼puwÇq>uq—x)ådxíRêí‚Æd('óWÁ¼ý/T™l]ÂÚ%Ô@Š·c[ª@ñv·On‹·wÅ½Yÿÿ†¼MBsä—VÂ>¬íJ÷dÎqÏìWœ·“×’¸£G±+î¦iWwyú«‰{úâÖëÄ=ÜÌàjˆ{ÑÐ'î3ÁŽ„Aü¸Ç<Ö·Wß€Û)€¾#âmÇ×!ïÓX»2ó-Ä}4š§æ.ˆ¹#ènq™P™3÷ï,-Ógî6r×´÷¹?WqÏ®bº«„´Ì-wÇqÇÅ}sq§½K&îðvô·äÛi]ªÕ·“·[¼úd0o¯ãí£)`q7XÜg©¸ÃÜÁUÄ}ââîâ¾óâF’–©Št?‰fî&î
Fîlî´ŠIGî¼‰)©…TqON¨r+¤‹»ã8ŽóÉ³a$‹ûÃFÜïvÅÞþ@	9KÞŽ|;Õ@æ¶.©¶£Úž,K}‰c©¢8¯_³óØŽ÷å¤qvŽ¿4rž^ß÷8$£23
Úˆ"VTUûâ	!oô7uYÖl,îýËúA q/À¸':ÞyÍ¥];²0WgðÑ‡ âÝ25áS*•^q7²}/0è­˜×"îü¼Z%“Š{{¡«ã#we@ÜÇåÄÌ]Ý3kTÅÜ…èˆª@»˜–IÝù„*Z!ÍÜ‘–ÙJÜYÝ½\ÆqÇù?{gó#GuEñt¹g1uFš®6bº^´„4±"¤ Á°#alä˜ELV±³a„£$Œä­ål"%–²`9Hì"…m$K¬"VÍ¿{ë¾W§êT½þ˜¯ÏýaÆžþ¨®é²Ä¯ç{ôÄ=8»i»ü¢˜ÍKUm7oG»ÅÛãÆTô@r}{ÂÛÏÁÛQ'S¦d66,&SK]ïŽ–ÉÚS­2c¹¥ {ÍÐúñãk%)q¯ß¿šþ
õœ‘n/Ö¼çw°oâ.þ¶+qfŠ{Þ÷Lˆ¾¦Šû¸«ìZÜâžVêNÜõ‡aq//n¦`ôX‹¸g)q/¾Ž—Š^ÈÐè¾±¡îž(tGÐý<oQ5s§B÷Ÿ*fî0Š©ÑçnKîv¨u?¡9w!Ú»‹»ã8Žst´=’yB H±vÚ—ju2–Û±Þ§¥BÛáío·ÆÛY·Ÿãööô°Ô»">¿K‹;ògªMâ-WpÏÔm©p÷¦¹bRJä¡îèŠIŠ{.Ì%îå¬ÑùZe²¹Åç•é–òv4å(æÎvsRÜ™nâÄàSâ®TÅ=íÔ‡/îË%sŠ{ãp)qí×{¤äã•ö1ª¡å2£jå2ÈËˆ¹×ƒîOÛš»™»P¬¹¿–žÄd‹îv¨
a‡ê3±RiÏË¸º;Žã8.îÕ·c\jÈ·c½z )ÞþŠÆÛQßŽÈ„·c½¶¥ž<vÌ´õ‡ÅÝ¤ÏÅÝÅÝÅ=-îÃlØG£;ÅeænCTUÜ…˜–IÝƒ¹cÍÝÄÝ2aÑÝÅÝqÇqq_HÜÑßr2o‡·Xo×òíÜßNîo¿PóvwLK-æíBTvö!MúV*”:nAms¤`M±ïN¯µ‰;Œ]¨¸bëüJq­¹Ä]9-îzÃAˆû3î¡?³3[ÜgöÓ£²³¸ã€ßšøÍLq·ßšâ.$ÄÝ€ù~›Ä]¶‰»>[i…Ž2R:æÙu:Mq×÷z(‡]
î4E…î&îºÓU3÷æ’»úÜß‹uîÑÜð,Ìw¨".‡¨>ãâî8Žãít;¶¤*˜—ªÚŽ|»‰ûYî“á€»õ·³·›¶_¼r2ÑÛ/”“A{[›ŒÅÛ³c /ö§ ‚Ü][öV½#qQÛYÜy_ª²^=ÎªRó×<W_ð3›»<º‰ŽYsýJTœÄ½XÎOeÜ›Ð=È¼÷PIñ¾„¸w“,¥âü4
	ICï£—`ïiÔ_
 é> ùU=ž>ê:YPÜ©à–Ä9^–ÿçƒKfO1Î(¥×[&2¹U¾–%æn½-í2èso/tÿE"çsWu¯.¹¿‹ILaƒªP=kâþ“hî
ÍPN)ßxÒÝqÇqq'qGÀý9övÓvÁj _oÖ@r};Æ.!ßmWoG¾ÚÛdÌÛ3 â^êMMÜ"P1¿¸?2EÜ#q~'ÄÝTzqÎ!îƒƒ÷ q‡JÎ/îÀÅýÀÄ¤Ä@ÜÎ˜&îãâˆÃ»ˆË˜ºÿ˜§¨¾hêŽªï«¹fî”sGZ…î¡[æ¥2çþV¥ò¹swqwÇq\Ü÷(î¦ígÏÚÎýía½ýuÌ]‚·§Æ.!ÞNÞþTœº„˜¼½?:	mgqW0¿3$,öQÜE*£‚Ã÷îƒ$îƒÅÄ½¯¸¸´¸Ÿ9nÞ¾Ó[ÎòŸn]Ú¹u½WŠ»\ŽñXx2»kq˜;â2Êe¬Ñ=š{r‡*rîªîès/ÌF¨*º?UÕÝÅÝqÇqo$†.	±òD¬o7oWä?¤(”)¼]¨ÎK}Y1xûØ—âíÜy>ˆ;·@ÂÛÑ'SÄdÖúÃìØ,q}%Èz-à‚°ƒÓk§OCÜ5XôÑÕ¥ÛÄ=Ð&îTÀºuw4 u§#µ‹;i|íÞPý­_…yÅ}ÜeÆ%íZ?ha¶¸#ûÏÏŒâ.”â'`‘¸w-æqÇ€6}'o'q‡–ïRÜqgN*å+¬îÕUŽË$î†?qsûÊ‡×—·¶¯]™\¹ºs³.îùP%uŒ*ÌA÷7aî¦îÈ¹k+¤Pö¹kÐýbÊÜ…ZŸû³êÜÑçNæ.¿s· {r“›»ã8Žs¤Ä]µ
Ü©¿Ý´Ý¶¥ÂÛ_kz»PóöW‘“±ÈóÈÉpLm2aê’´·KL¦Ÿ÷ÈÛYÜÇÝ>}]O‰;CÃSx{ôR3W^	ýÖ‰;\2-î,íC!_@Ü»,î©çä‹‹û*èå5‚¸£Å>ë¡wAé]¿)Ü¾4¹vûÖ'÷.O”ËŸ]Ï
F6áW®§Š{oPôBbÍ]hß£Š)ªbÐý×AÝ­[FÕÝÌ=ªûÑÜUÝm‡*Ò2Ø¡ÍÝÜ½Ö-ãâî8Žã¸¸³¸§óíO*¢íõ}©ðvŒKENu2¢í¯RÌÔúvK-ÖÛ5&ÓÍ³¬°ô“BÆ®©²nPùˆr¾Æ nf%òh±Až¢¤TÒÅ©™_YH£MÜ£}µ4¸„ûYÜÙ…†¸çHéÁòpC´vwýš•¸ëS9¸2ã5â^±ò¦yWÄ½0k&/£-áTåAƒÚü§„¸WÐK¾ºjæ®Œî(þèÕÏˆÒdGV¦Šû±HñŽ0§¸G%‡˜›¹ë_ž`âñLð!¶ðw§!îNtö\ÿd{kkëó+ªë÷®N|ö±Øü­ƒn,ÑÉá²^Þ¯oQ(èÞ¬…ärMË\ds;TßÃUb
}îO¶˜»‹»ã8Žãâ¾¸¸óz{ˆ·ë‚ûË*îÁÛiîÖÛÿF5¶/õç³Ç.¡½½?ÈÌ€Òâ.²'Jä<l‡¿Oh®³WÛW+ÌwS°ŽÉònÄ}d¸3£ÈLqÇáf‹ûp¿Ä’¸¯yyâ*%š89¯w÷(î@ÅÝXŽ$Å]Ä:-îòÅânÔÄ½`š¸ãc¤2¸sõaBˆÄomýãÞÎ_¾øâfäÆ¿ö$kVÅô+…î?ÃÕ—‰Ý2Ms§ª0wìPæNkî.îŽã8Ž[{áì J»]‰SMÛC;y»·¥b`ªy{ûÜ¥‹Ã¾TövìKåœLØ–ºo_Ó:f-é0T‚¸¯ÃÃgAâNÞNP¢C°?¡ÁÛDª#Dq‡.“nOe4ë`gF5šw ¾-ÇÛ3jç1 ôçceP2½WÄRŽÉà}‰¯Z}³MÜ•àí`¨^¾pR•’ø>ÎÀŽ>4ZöB£÷òy@ž=*8Y#ËÙ÷Zw»î¦ôáCBŽYVª-®[Ø|1þø£IÕùÍv¶Àö›7äŸ[Ôr™¢]f#š;¥efîP•îWÊ¹›¸ÃÜ5æþZ!ÉÜ©[T1Šé”Pš»»»ã8ŽsôÄýÄ	Ü‘ol`jØ—úVº¿½™o…¼ý–q©/R};¼}Cµý·¡½}Y˜GÜËY¨»÷!!íGVÜó<'q—[TÜÁÂâŽë'8Lq_>qïÌ)î!4¼þáå	Ãú®ílïììlÝþûŸÿôõW_ÿGøÑÆÌý©Ö´ÌyÁÌý˜{Ûš»•BŠ¹×úÜŸÅÕb‡ª a‹îß/1¹¸;Žã8G@ÚS)™‘Q¬OFÀ¼Tõvˆ;æ¥Òz»y{È·Ó¼TÕöfNæ}»„>Ädâr»xû?ïŽL§âni‡ˆfÜ×Ñ3“5"âd½,îØ9
q/ÄJ¾)| c?|qï”´=žNânà³F^2V,À2.¼ßdŠºÓHÜms*Q•*Ç…ºº—iœF¬†ò
ºã"*ÙBÌ÷ZåãÜ¨íÇ‹“•“‚3k}L‰û¸kÜØùf² ›ÊäÒÖööçW>ºÿþ¿¿–Uwë…4sš9w¬¹SŸ»NbRq§ILÖ-S›Ä„ªwš¡úxœ¡ú˜ñ„@yw¯…tÇqBq?%ˆ´7Ä½Q'£œ¥|;õÉÀÛ)'ƒåö¸àmo»ÔÚÞ¾2ŒZ2DÂ·L—F™Gq·ŒûH÷£$Ýï+ž ®ÇÚÎ£ùñ‚Iq7åcqÏ„hÁ‡)îÅéÀB[Ä±û\Ï·z&°é6ÈÂÄÛÅ=þÎâ›ÆÝ³Ä}IØGq_Šl¯µ¿â¾,ì—¸ÛÅÊ îr wù’ˆÊ·îMvÁæ¥K›òesóò¿þ‹F÷–¡œ;â2å’»©{¥ÏýÎ¹S+$åÜ%,£TÝ,ºGq—O	.îŽã8Î÷²¸×‹ EÛáí<w	Þnân}2¼Þ~žÇ¥
¼ÞnãR£·w—ÕJfŠ»°´²âÞuqOˆ{Ôp÷ƒ÷<ß“¸úûÉÞøò+Û£Ê­/ÒšûùæUË¤Íýåš¹‹ºWbî.îŽã8Îw|bjD½}Nq·¹KBë¼Tî“y^°åvÓvõv‹·›¸5Ø–*`¹ÞÎÓRsu"š ™™Þu…ZšC–Ö×æw¥ÌGCØQÖ“ŒâŽ 6ºYXÜí#FŽÇ*2³Å‰¾Î„ªvÅ ªAÜÄ€¶#¸2SÜ#Mqç»ªÛ^ñv×_MB¾]ÄÍ}Åà1p#¦¬†´LE¿Ñê’#c.qG5{UÜ³,öBâ^ü÷²aíøÀÕÉJÅûöÉÕÉù@Ì}£Ú
™Ú¢Š>÷—AÎýiá…çw˜ûkÈ¹›¸ÃÜ1‰)Ñ-q|‚ªã8ŽsTÄ…2$î”·#(C=ìí»dÞÎ9™“Á¸T´@ª·w{’!âNô£¸+³½½)îµUö¼d æwh9/‚¾¸›ÞeÌŠ;X\Üsw<¯)îÊ·CÜå–=Š{®§X/’wyZW¸sm²W¾”œ{ìs‡º‡¸bŠ;TÙÜUÝi‡ªš»uËÀÜ9,Ã)wãD¬–qqwÇqzkGP&ÊH›Œ’ê“9kîæí1ß.T¦ª¸OíoÇ¸TÔ@ž#oªëíq[jWU%!î1l¾‘• í‹ˆûZ˜Ž*®'ù	]©TÌæwf¤@ÜY¡ êø.ã»ÎÌôfÀâ|2c°‰Î›g¡A¤Æ"xÒšY±9øR­|ŒÄýxjÅ½•I}¤€¸ã"*AÜGU¦‹;¨‰;{QoWø ÙÉÐ`ƒƒòQ-¦Õ~óÁd¯lÞ×˜;ºeb\†sî¶CUÔ½ÖçþÊÔnb‚¹Ç%÷²RqGZæ„¢ênÕ2Ë¸»;Žã8GJÜÅÚô·Ûj;´z áí4wéíVoGNu2H·Ws2˜º´2êœIˆ{ÑiÂ&·kq—_–o¯ˆûðhŠû(Ö|wfq_Z’‡ÿ?ÄÝxPÅÝÊ8ã|¦”¸ãªj©Ìg—&{æ²„el‡jªÐýÒ2dî©VÈ7`îºæÎ;T1CU€¸‹º»¸;Žã8.î)qç}©‚j»Š»Í]²€»y{ì´œŒíK­Í]ºÐ\oÇ¸Ô7Õv÷èíÝLÄBÂâ.úF&·˜¸ªz.î”¸¯º¸·Šûøìß‹\åÇÍræb3,#;3.{cg.¼˜ NE)† 44­lÑê……ŠÙBPË¦¦KsRSh-)Æ¶Ð%B/
5Ð”j’¶ö&“%æ›%WË^Íþ}žó¼ï|ÏyÎygÎ®'ÍîæùD×ì¸ãììÙ,Ÿyý>ßguâNë—JàÒÒ7¡
u‡¹«3w½‰	gî®¥h…”%ª9ªP5q7Ã0LÜ¸ûwTAî‚·gÄÝÊ(oÿ¡ïo÷ëRÕÞ%Òv½.Õ{;Ö.q¾Þ^oÅu( ‘À‰;—³óÛ<•ï€×<éöFæÚÓèÄŽŒ˜;4}ãŠ;ã²è Z›¶‡Å‘vwB·ÄWCÄ½Ö,îôîw<6¦.:‰HO†ôUå{<Ð+•Ë0wwUèsGÎ}îR.“×-w˜;óšebLÜÃ0w$ÜEÜw§¦JPFÄ¬]ö¥~/}Üî[ e.Þ®Ö.e·.aíR²²Þsf™÷#BÇGå„2öÂâž¬‰3q_?â.˜¸·#Àæî*‹†‹û‘ãûze°ïæ2Ò2®RõBêULbîéCwIË èžMËˆ¸c…*¡ÄýÛ&î†aÆ]¥íØ™ª´­]‰;Ï¥ÂÛÑ'ó#×ß®Å1×ßoO×@îññvx;¡j +˜¥ê4aÄä’^„n¢y)-ÅNMl@[;€$ç k/EÜG„!âÎ„e1¼9µ-”"îò˜3^09”îç9;®¼÷và´DÃÅ}Ì#BœÖë"Úo‡¸{F× î€Ä½N$Ü	ã^mQ‹û[=P‚¹£\&±Eu‘ª…„¹ë¸ŒžPEŸ»ê–sw¥„«–a´ºËþTSwÃ0ccQ¨ÒÃEk»ð2È·+o÷ýí¹s©OgÏÛ_Ôçíá±TxûgÝJ‹·½‹‡ôcÈ\F×'&&Vaî¾
¼ÎG¼ŸªGÜÝ›+ˆ@HÜáía´¸â>$%îÌ(QHÜ“7¤Ÿy¤©¯‰€¸ù/kaq¸ÉÄò+¿ïãõcoÚ½..îŒ’öµ™{«ÑwyË-?­!Þ?ã_îï•Äë_Ý3wU9äÌ=ÛçŽ´ŒÏ¹ûªÏdÌðÝ2¾Îyð›˜P
	y&ï†aÆfw‰·3z_*
ÜÑ‰ÅKÈ·ûþö½n.ùv¸ë±TÉ·»œÌ«Ä¯ÿÈÞÞ$o(îýQÔ.ÿšè®AÜ«wžJ5qß\ââNl4q—g5TÜ›Ìo?\é•Åþ[ô'ÓŸ¹£}îzSÖÜÑ-ó„eHÜ±‰	¥ºïfú}î&î†aÆ¦wH{Ž¸ïÌw¶vˆ»òöþq»ìKUýí˜Kí]’:™=©±ÔŸ.&3åj ÙÛ#2ú"’£ŽuQ8RvúõýÕ%k_“¸Ç±ŠJœjÏ÷&$î b¶Å½Îw-Þ…Å]îQ†¸c¹nÄdÅžãmw¾¹DqgŠŠû»oöÊãÒ‹ûj!ÙÝÅÜEÝÜ?sG+d¿26w•sGŸ;â2ÚÜEÜ±CU‹ûN%îòsÎÄÝ0ÃØDâîw¦î$DÛõæ%x»h;r2®NFö¥"'ó$SãúvwÔ@"'ãk YÛÉÛu¼Þ^íˆ´“â¯ó+Rù„]gÆó˜‰;+Þ'nµÍ+&î‚w0jâ>TÜÃÓª¸îë•íô,&î*>ß"£Åu-îcôzRçò;œsÇõsãZÜß?Ø+•›7ÈÜ‰©@-$Ì=T	sGZ&uè.9w©sÇ*&ˆ»î–ÙI˜¸†a›ÆÛ1â[Ä}æRQ©½ýeogoÿ)i{~¾ãíÚÛ“QëRu¼]j »äD ,Ó$¼õÕøïªx{€¤²{¡mKÜŽpêgQÛ9(qÍ;qoe-®([ˆÒÄÀÚG=¡KŒ¡Š¿¶<¸]y{HÜqR®H|µkŽº~§3Ys&_uøÆvÍVOæõX5YW£^ŠùÏºâ_™a(W½Ð!B%/…ÌâîÐâ>pÍr®"—ÊÔˆ
‘˜¨M^#ÿmâçúÎù^‰¸µ´´´|Aw¿Š‰@ÎµasBmbÂ„*Ì=µDuîjB•ˆÜ	Qw—1s7Ã06¡¸#ßŽóvÔ·âí®PF÷·«"ÈØÛŸ°/ÞNøHŽÉô½=‚·÷ñòÄÒík÷¶‰ûmwæ‰{q'”¸ûÿÃqë@Üñ~Aqw#«LBÜüé½ò˜>p‰¸µLâNèB÷ðU1÷dŸûªÏªÛÅÜYÜs61‘¸{u7q7Ã06±¸ÃÛ¥»]r2"&£Åý©Ýý>²v>po÷{—Ü;z SûRŸWÞŽœLn»ööjÔ&C:Ÿ,ºç
e‰™î½÷Þ<qyâuÐ5µ™œJ8´ÉáÎˆ;(,îx®NÓ[š”7$îÕ¹R\<(~æÞ“b¨8v¯yâŽþþ¸wÔX6˜ŽÕCÛ	x2iEÜ™¬·w q‡Éû…¬£ôp –ž>j¨Øž¿(®#ª8n„äÁ{“yçüJ¯dö_¸µ<…ZÈD+d0-s'0¡*1÷ô„êv&>r—¸rî®Z&vwºœ–aRênân†alRq'kRÞþ˜Ê°·£OFïKÕÞŽ¹Tx{¨ëRÉÚ§¦Ü¶TY»4ò€øˆ-‰“dw5Keoˆ»>kïßÜÅ¢TB/¸XÜÛÅ½NdÜ]V÷h  ·­FÜ	ŸXaq÷[\Ü›yÞq<ÚÎAþ¿‘ß{qGF‹{-%î“„w…wy$/îòyVäB¸nò¾„Âo“¸3qßBå.îôq÷¡qwhqož<Ø+7—é,Ì=Ð
ù“sßsguGŸ;v¨¢ÎÝ›;ŽÜ1 *q-îŒ‰»a†q÷ˆû.Fr2„?o'mG¡Œh;¡òí¯È\*{ûÁ½K2—ª×¥²µÃÛ+-:¦c†¸ÔSL²Í‰¯iqŸX¥¸W*&îëQÜkùzùâÞY‹¸ƒu*îŸhqo
Gþþz¯tö}… ;Ò22¡šÝÄôó”¹ïÅ„ê“jB;T¿OÈ™{*,ÃwþÙfân†aÜeâ¾›IŠû£9âŽ€;z %ßNâ®ÎÛYÜÎ¥¦½(OÜYÇ î’ˆ¥â¾Å}Û¶‰ñ!â.n‡âˆ{ß`;ÌÝ'î­Vâ®.î„\çék÷jââV‹{âîð2[î´¸ãsY­¸·w?”{ì¯Ë”ØéN`õ„*Ì]§e$çNâÎæŽœ»:r×âÎgîé6wwÃ0cs’và[ YÛ×IÚwIÊÀÛ±xI¼]r2˜Ku…2èoö@b.Õ‹û«ðvö¥-}k'‡¢\rMö$¹Ådµ{¿×òG„m}²éöôïc±ƒÛ‘èDBx'ã+´épBD¦”™)„üAÛ2·ÁÝÃîâÕÀ–~´aU”ÃÄ]Pön±{ë¦˜.Y9Óú÷ì‹»Üì>ªH‰{ÕÁ¿«UšD¿¿²ÙÆsDŽ?¯¼s—fµuÅÙ¢Ä=Ø*‹;µØÜ1žêBû{»±n	t[Å{¾ûÖë¥«ûôÁ%w9r/nî¤îy›˜._¾<y~~~Ž~¾ÌÍÍ=ãÍY%î^Ý!îQ}Ø‰»¨†aZÜÉÙ	wØŽÅK(‚ôùv¿0U¼]âíðv—o×s©Ï¹|{QoÇy»Ï·³¶wë­XÜÇ”¸“ªCÜIè`âÅÅ}œNÝSÚÎ€¹Ö7wvBv,÷â†‰û¤£ªÅ).îrDíÅ½÷±qÄ½ŽQ!q§[*‘£òîñ7KË¾ycÇTN+¤JËè	Õ—øÐ]rî¯\¿þ4¥eÈÜ/_]¸vñÌ™³g¿8³xy~ñÚ©?/ÎÏa©;!¥¬î¾’‘fYÄ$›˜˜‡MÜÃ0Œ"í@i;Ä‹—ÐÉøÈÇbàí„êTûRõ\*i{ ß¾G´c©D¬íÞÛ£V;VM§¦âœÍ¨æ¬M*Iª©"ÈmZÜy‘*ïcRÈ±Ú9Ã«p`BÛz”÷”¨ÊÍºÜ›4`‘ËJ:Àm? îîGó´=,îÚÜ3}:EÄTó€¸ëM½S$=£ê âÞ•¿qîmÄ’Œêu®ÏH™æ®ƒÌ\]\¢&õ#@uâŽoP^Ê$D€_¸yÿÜþÛ–A-¤Ë¹£\9wÕçþ÷¹ï}îúÂÅ‹‹‹‹W¯.^ûâÐ‰•ÞÊÊJïÄÙS_Ìî˜9;/q˜;â2º‹˜Ÿ–I™»-b2Ã06Ÿ¸?äÅÞž]¼”“o‡·;qQÄ=oïRÊÛ¿«¼½Þi;]IŠ{›¾U¡.±ÅìÞwî„7qßÈâ.òžÿ JÜ£-îõU‰{'%îÌŽ—nî—–¹ûªª[FŸ¹‹¸‹¹__X¸x¨7=33såÂ•™ØÍ:ÝfŸÁ
U—¡#wwÃ0Œõe¢¿úôÐììì‰·ÿe?Xo›¸ßç+ÜSî²x‰‘©8pWùöl¡õE`.5pà®úd´·ÂÚÞjŒ5š1 àõ3•th¢ºU¼]‰;wÊÄâžwâ'fbÍsâ.îq‡î@Ü!«JÜ£q—ÝùZ½FAFqóú÷F£°¸Ž²tOžÿðXHÜA@ÜÑèžÿ8:#ò^©$®”~bcÌ÷ìD*ÐâŽg—÷Èod-îµÿ/;-³Â2z‡ªîsÇ‘;Ìý……k__›™Qïå³rèÔâÜö9
Ìˆ¹R-ãÌðmî„Äe”¸3&î†aÿýø£Y™€:ûÞ=Æw™Kº0UæRÑ'ÃÞÞ»„>ñv©o§µKD£w±µêÖûaíZÜqâ>\Ü£€¸w îQ©â®Ù`âÞ,EÜ«'ßxëƒâ>>^XÜ«Ä].îNq¯Ñ¯coÜ†°Áuî„
ËèML0÷¾¾påÊ¬q=<~=1súêGÿ<³8G<š÷§Ÿ;zt—‰»aÆæYâ÷}íµgŸ=úùé·§{Â¡¼v±&mWÎqOeDÛ·y	î(”ANF¼s©É€û_Šy»êoÇy{—ÇÝè¥³â†˜U$ÚxÊ4Ì¸œ¸§p·³¸ûÑÅJÅÂwœèu„À0&Ì5¦úw/î#ƒ€—•@!õè;æ‰»&•–I>ñdd@ÚÇ[·ò§äÕcÇß<÷hè¤¹GFÆ'!îé‘UýPv.“/îêñÍÅ(,î£/iz8µâž%Ä]^Wj:12¿Z‰áæMþJuÏí+ýÈýÕD^+äž`·‰ûÂ×¼žO¯ô‚zûp¯7sæÔ™Sãº™¹Ç_žÿr~þ¿§?ýôô¿¿üüwïý«»›P…ºûáÔŒ»›º†ñ?öÎ÷·­ë¼ã¦B‘AE†kfÛaŒ\6Ìq_Ö)¶‹Û+68˜`‹hZ.hŽ,TÑ»ÞHS2d©‰-¶°-’mÉ²¥ØRÌº/‚f€¤E÷e_‘ÿÂžç<çð9÷—¢ÈË5qÏÇ†L]Q¿xEãs}Ï÷X<ãôøêêÆÆí«V?ZÝx0ÏS˜ù»çöXªSË¨]VA–†í J; -LE8àÎî”o§SAÛÝ¼Ýì$o7÷]z‹j ÕºÔ¿B¤·Â1åÄhÅ(î%™cgœ›/…ÈÜa:ª‚Ñ"  i;ã×ÄÔÔ¡èÂäéíª\¡)nÍ®í½º3ˆ;¾ê.î‹»ŽÓ¢Cù™L6D²Ï®ŸYÉÐm²ðÝ—1Òêò±].z~âÎÏš]øD¥Ç£1q'w~Ý'$‚u¨
õMÉf}¾¦4®/yZ2iïSî§NBs„¹å;1æîþÎ—Ï;vUmn>~pãáÆ£éÍGÓ×æ§§¯>¾q{õéÒÍ›ãKKãï9¢ÔÜþ—•¬îŒw‹Åbñ€ž{º90p~k: À?ÌÕ¥=–&Šûw“áœŒæíîùv³PÆìowñv·'5o÷‡cîâÕ&îˆ˜¸_ˆòÐÅ]³»Šâ®@E7Å¿˜^+î†¸›¸Š{vxyÍ½É®§&£qiÞÑL.[UÜw8°[qmÿ†‹»?`Äª‰{Wq¶¼nsO|ñS4wê–á¡û[næÎ}î¿{>À©˜ó5}]##ÎüÀüÐ&Ìã7¯>ÞX¿yùìwÎâþçVÜ-‹¥™œ>÷éêPÁ…ë«ì±4_ÜÑÛYÜ©Á½½|ÃT3ß®
ÜÉÛß%o§BîoÄ]ï“9yR÷öHXøbDw„^‚µˆ{§„&î!§¹5Å*Üa),ãLãÐ+îÞˆ{gnvnqæRœä–J¦²ù‹yœ¸ççÒS3tV½wÞ`TûÎ+ˆ{«ïë'î|$Ö#wI ñ7qï’˜âž-xLúþÄÈžÊÜ-ÃæÎ9w¹Bxñå‹/~óÎWó†¸×‰ÈÚŒ\}|ëöÆÝ‡KW>°ân±X,ÍµÎ+ŸÝ½zÞ}—g÷Xš î‡wÍÛÍ"HÒv ¦wî,÷v@_–ªçÛïÅ#ííá·cúÀ›’2Œë¼ÀM–Bð÷B4^YÜÉëpi
’HÑkö€†ô5†o·â¾KqïÌfóâÆÅL.“Ç)§~q»˜Xž‚!<Šûð`a2™ùÅÌZ.9“'wŽ]`uG¤¸š¸ãkÈâ©EÜ}>ýÁû:ˆ;Ã‘»BíˆZQÜé$t93îøá¸æyX&1ù{ØA•Ëe´%ªlî<sGoöëçÏ?ÿÝW#ZRÆ®ÏŒMßzxÙŠ»Åb±4‘ŽßšŸ/¸sþ#;q¯ÇÚYÚYÛq]*BÓv€µ]¸ÿ€´Ýu]ê÷4oÿ¾3'ÃÞþžìoWÞþ¶éíoÊœŒæíÁvÉø?†í9«BâL6ª~”„Î•N]Ü‘þÕEŸÌ]öÉ"@;v8;‰;ø ¯·th&O°¸;V¦îcj3mÏÄl{GqG7ÝQÜ‘rq†·ï(îÑ|>”OÎÞùEžÆècÑ|fqf,ÞcóÌÖ¦†£p–²g
éÉÉíå‰3Ûë×ÖòÑèÅäúBî:6'ËYSòt:ÀGLqç+,w&†ÐMSÜÕÎ¶õ‹;QO»»¸·;r[a…wqÌ\',otK‚mq|t'
Ó78uî*ç˜æþ¶ÓÜO€¹~¾ðüùõB3(­¾/÷Oug¬»[,‹'œþôQõqËõ»¶U¦éâÎóvÕ'ƒ|»\ÜyÞþ·àíœ“á"HÕß®¼ÄÝX—ú¦ì“A¤·‡}­RÜ÷µà±qjYhqï£·»‹»rA9çµâ^‡¸g“wf:¯ÍÞÿPŠ{<ŸœLMÌ&s™9û¨9Í‰Ó´˜–³×â ¸ûbr+H¥Ï,¯Ï­Ï_^qoÿÿwx©Ä=š_ŸLšPçŽœTâiPwês?Ai™gÏ
MbèÉa+î‹ÅÒ4oß,îânÿSõZÜ×,îæÂÔò"Èå|;-L•}2<ogoçúvsÞþqÌW.î÷ R¸#Qüu÷CÜ)[@úÞÑ­« ÷zÅ}}b99³–•ñ—xgfk0‘]žKBj&·œîë›Ê†`qêÂDQëO§ûÉ	ýƒS¹ÌÌÅ|~¬.q /½¸GÜÄ=7Å=š_»Ÿö¼Îý‹ßê3wÞ‰©BÎýõ¹ÿº¯Ð4Ü´ân±X,MbüÑŽÉÅGŸÚ‘{j*pÿKDî»&8àNM\(C/ñ†©Ö¥~_z;Û…·s¼ý_¨¿]Ö·ìíT'sRí»Û¥îky¼‰Å½&R&îÕ­ÅÿˆÍS¹ÜQâ€=–PŒ¬6‰»œòóýÉ„XÜ½œoÆ’l¼æeÐ}×=îíûí€SÜ#&Nq‡«§¸c¨zmx4½|-/—§f/f’ÃÉÅ¹T¡˜HML%×Ö†'ú‡³¹ítz°X¨Lzbyn!—í tqW†ÚÑGq,€ôÊ/Zïë¯úÒcå¸3îW
Ú|@w±\Z~7Œø|aq‡‡„“¶¶ Ð¦v?È8é±5_ü–V¨’º›…îFÎƒîŸïüAëžÉÜ={\nÃ„”™»ír·X,–z9·ºsÎ±¸ùd|üÊÍ¥¥¥ËöWÄý5@×vÄ(‚Dm°ÀàS¹ÀûdþQÏ·sŸŒÛÍ|;j»c]*{{ÄFŠ{—&îú$Uö¸ï»dx;Š»ˆ;*]EqG`),7‹	ñä¦¦¹Ó-zý=ÿ©‰{ÐÅóÜv"5»&¼}qn.9“wÇ“£ÂÒSÛÉû£…ôÖJ5“,ö¥V–§XÜáô³›âG]Åù&‹{ùw‘Û¥’¸3´K"ö#qïW¾k[ýžo¡zêÇe~Âæ^–sÿ™;de
Õ9?2_¨“[W¬¸[,K38ýÙtMØkcszzú½{-î¤í¥y».îZ¤ÊÉP¾]ÜÝóíràþÚÀ¼Ä¼QÞŽ¶¾ÂâN°·×.î¤èÚÌ·‚¸£íùÝÄËóð=•º‘wqG¬¸—‰{~mf-º¶\èŸÊdžÏ­$ #3»0“ŸYî“Â7±2Ñ_è«æí©åõd.·8sAwÀUÜáÐK)îù)÷H5q…4yäóamîŒ·ê^¼}î—1ÌÄÓ28r§VÈwŸì$îC#…:y|ÓŠ»Åb±4ƒ+
»âÑø‹«³³¶3n'q^£„»¶aª÷h;¦~`o×òí<pçS+ÜÙÛ9ßÎwÝÛ»b-Â'A{ýìíàÏ<n'a=%=?zè(à"î=mÝ€.îŽé¹èwÄÈ„hwdµE’ÓmôŽlî¸F•¼‘á=š*©{)ŸÑÂì«†òÞâ‚ÏW—¸ìí&~gÛŽ÷P ³3kùìâÖä¯î@{LÿäÖììd?ÉúÊDÛ’¾þ¾ªF81|z%â:©FhâîG´“ÒRÚÅý•WøÑdJŠ^‹¸·’¦íýÔ8OnD#,7p?ßŠâÞAâÂm î=˜ë‘—¾ùÌ¶§q™Äÿø)ÜÑÜõœ{…‘û»/>Ø!$9_wíÌmì•!qç¨»Ñ	iíÝb±XvÏgC»lêµÕu‹»Ôöã(íˆ)î*'ƒÞ®Ä¼ýßô&HÝÛÕÂTÒvZ—*¼ûdxÞ®îåÞ¾¼…Ö!î–ÖzaŽRÜÖ¥¡6tl4w¹¥CãvL¸“¸q§u\Ÿísý{¹¸3wwƒ—BÜµi¯.îÝñ`4Eí°ÕÒ¯f·¶†×2³©b"Ñ'/}Å’k.,YÉÅqG(ËMÐÅ–‹¸«¾ ÇÿµwÆ]ÜSÜ»þýGi¯²Aâ.®aè>XðŽÉOþ³š¹Wš¹?Ó6`‚M”˜†ÛÝGž~í¸Tw+î‹ÅòÇ÷ïï±ìÐ'Ã”ÕÉ?nzû_¨q;{;¯K-ß0•r2ìírÞ.½s2Ü'ÃÞÎû¥:òíÁ}­è/JÜ%ÂÊÔ¼ G/¤¸‡‡Im?†o‡£=ñnt<w†24PíÞIÜáÓ)q—éveì
÷€0Å½t+&qŠ{YA‹ËèÝÕÇk:Æ¸‹;ú¤žÇp÷
_`,¦I;÷ÌÈs&¤z,7¼°°u-_Lû+™l4»ÞˆNe`™Â>ò|y@·ð+qGºÖy¹$AßQTýrd‡¡»&Ùt©ã&îH•÷n%öZ]ÅÝ¼†*¯»‘_ƒ^é£¾“T‹S1Z†¨FõÀç]Ïö´µÑsI<¥~žô*03—ÿ4÷Sº¹ÿÄÅÜAÝqæþåsmçÔOû ?;æ~üxYûŸÙ˜,‹¥>Ø˜ßå$åá¹=ïÅ½|ç%wövcÃT#ßÎ1Î·›=“áþvôöpË«Å=¨·ºàCÜ{zz*Š{ÞÐfŠ»>pîÝvwø¬$;Lé«Zq¯.îÙÙÄ`ª?5›É&Ó0,ß^ÄSóË$§'gÄé(wú„_Wqoý£Š;à÷c ˜;=gàwV‡ e†ÿä?¼vm6(z"îÑ{ÂÜ=TÍªº¹ŸøjDŸ¸{ÈüG—­¸[,K¸ù¨°;®oØÕ©žˆûövÖv‡·#ÒÛLÞ^–“áB™’Ez¡ÌßWÛw‰½=BZ"ÅÝ¯è¢¨´cï|MÜ1ÓÖGXÜÅq|C¼;HI¥ëÞBó£o²0©-lXÛñ’ëhõïÒý„SÜYÛYÜ7q'Q6pwnŸâ.^Hç_ Àâîøà†µ.âN;eù…4m‚?µ*úÒ+sëÃ9HS'ê÷‰…‹qœ¼CÀBÎÕœj /Ä=ÈàeÖ‹ò©ª*î­’ºÄÝ}0‰»:Ì¸‹{Å‹7Ts‡·SîOGTS—B< â‡¹tQ{ˆÆïp‹8vàØÏ>YOy Í}ëºÑÌý÷¹;1)qW;1½`s÷˜é§G¬¸[,‹÷ür¨°K6>yˆ<½¼ÇÒ\q§w¸Koÿgåí,î¼ñÒ»²Áƒ2oW¸Ë}—"íÂ]XÜ»c?8àwáâm$îrY±Y¤Z$	eìX…²ÚÊå#o'q§«…©Í±½ÀëRx¤¸ã õ‰»O°+qo•x%îD3Å½;›¾Ýßß_„ {_"•Ë,œ)ÖÝž^^ÌÃƒçôÂX\‰{‰;žŠjâŽ¶ß4_ÜM\ÄŽVwß~xq„²âSgG{·&î{ñ'fíð,y] 7Ž	$áô4Jj±7¼÷ß¥´ŒÛÈ7b"s(4ƒ‘'vân±X,Þsö£]·Ì óC·ž\þS¾ïÔIÈH¬údHÛ©¿Ý¹a*7ArÀe¾W1(C¦¾#‹ ß#o‡i¯Kuñvž·£”²öJ)sMµƒ„£ÚQ¼	fëòzƒ
UÈk¥ímAÕÀ€D£5rµ¶Äôv)îr ùú<¸W€“÷£¡6¿Se†þÝ
•¤ñÛø6;¶G¼]¶úˆ’³»ÛT.GT~1+xûNÁØBª,¦¾²ÜˆöÎÆèÌÂB.“T/á&tzE@D¡ÅdÄ-Fª;m¯…ÐTÛ¤<É"¨xµd=¿N­ñ`²¿—y¿z‚>0”ÇºjR¿dÙôv|à"®|ýRÝåe>EÄOô^â øú^u_!:!×Ô(‰$|î ¤eþÒ2'k3whs/šÀÐÃ÷¡;Ü½T.òn[!-‹¥éIwFnŒ[i/ƒ­]Ò®i;§ÛÑÛMqGkçw ´îÕ½epÜÎóvöv¹.ÕÌ·ñd†0·…Ú’€cïú¶nYœ^&î!%î%7¿ŠÞƒ˜Œðv5°T )]/ÜÛ¿¤øP÷Öý$;],îÇ ”™o¼ñÆA˜;f‚Û‚\Ý®Éz˜$^Ð×wT:‡O¦·Iâþw‚W+Ð¸¸Aö^¿®½»!îìí®ð~û—†Óeêã÷Hçá$FsÛ©Ñ‰É©¹¹…l fî½ÅGôô›º.îæ²„²‘;Žº}Nggv/î¹+¦¸¬ûÝ­\þÊ¡Kt"á’Oá˜º‹ß_ºôÅ0™wáë –@‘Àà¥úÒ¿ WClîÀIîsgsuwl¡úÞ‰gÿ[ðžâõG7Ï9r¸¤î ˜»B‰»í–±X,–]±tµ¡HO­¸{*î*&ãw×—(ßÎÞ®z 9ßÎ…2jÜm§œL—ðöv÷ˆ\“ª€hŠ«¸4q—ÄáOˆj âÞ"‡p©*‰{o³!¸ •Ä½uè«SÜ£’!yC8Î·¾upïëˆ»BitUqw®`tÞØÿÇ‡”­@õ¼wâÒzªà1éá,œðµÙþb. hæÒ¥$î¦µVúz¢{; wïÅ½µÕEÜk qg´»•Âêâî„Å]÷¶,‘¡™.îÌÉÞ;‰BƒŒfz{áÓÇ!-ã4÷7n6wÊ¹Ÿx6TlJXæÁÆÓO/[q·X,/ùåt¡F¬¸7,î"àNU,îäí²ÀýÇF¡ŒáíÿÅû.©ÈŠóv^—ªçÛ}š¸+ùeâÎyu7qGãxŠ_àÎø7(·‹$“ƒ„.î@ë~¬±1Åý‰; Äý ÷žžx¹¸‹È½Åwqg^jq'²s	¯¨©¹58·‹gh€?ºµž« îX4S»¸·ëˆWÃáÖo°¸·³¸wIqÇ~¥ÚÄý“‰FÏÐò%ºÖÌý$¶Bœ–)ïs§´Lsrî×‡nß´ân±X,·¸7Àüêi+î‰»Z™ú]Ä±.Õôvž·ÿæíúºTîo»äíí˜·mçu©Â6Jâî×î¼”Å]Ryâ~Þ£»«4ð6£¼¼×)î-•Ä$ñ	uß+“2Ç…Hþåý*‹{SYÜÉ‘ÝŠ;šÜ7GÜƒÿÇÞùþ¶uwRÈ-Pæ%cË¨UQ2°Ëb* ¦åÕ†ÙÖC_¸E—¡Eí€h¨Y”\—ìZŒdwb%×J×QäHÉÍ§ëbyQ›ß$Fò*ÿù/ìyÎsŸsÏ½—”È+ÉAÎpD]QÅÊç>úžï™^©†ÌHynúVÖÐÊ×±BÜ+îdŽ¦¸;ˆÑà$î;-îþ¤[÷„\ÌÝTÜ÷Æ«m1V˜ˆYJËÐÐÝ5sÿà2÷ŸJsH9÷ÐùíG'­¸[,Kˆ¼ðQ[â^»wÉŠ{âŽÞÎ2Ô×¥ªÀ×¥z7^âþ3Ÿ>mÞþ¼ÐvO¾s2Ëé&%îXLâxÅ] QÞª~Æn@É|VÖ¾ ±n¼hnoŠý)ÕíÂ†…E\â.w«HvHÜ{$X ‘‹û€*—ºI}.ÍÄ½ñ÷€o4qWëC§/VC&_ZYËsê}zÂ#îâvF††í&Ä½s+ÄhIÜeƒ¨¿¸ÃMŸ$îýrç¥^d?à+îtìâéb®­2ÈI\öëDR˜sÇ/çÎ­ÏsçªÇaæž«n7O>nÅÝb±XBäå?žiKÜ?¼dµ½q¥Ê|“¬çíœ“Ao7vLå"Hòv\˜4pÇ|;ŠûQ}ÃT.”aoq—ùv„óíÔc‡n(6‘ao÷÷,oÆD¨C")ÃÞžE”±‰‘»©Z‚øÜs(îœV—âžÕÅ]•Êˆ;j»y»œ¢£¸«Ë¾x{#+¸kMZôF:/1p5Åˆ»¨"$<Å3i"	°¸Kø2à qh…\ËWCâíµúåâÚÒdJr}bâzýNOÒMÐð³ö$6¡¿Æt…(îi"ÈC&ˆêÝÿXÜWâ…ŸAŠ»‚Ê}xàìU¥d{îGHÙwïÞ'¥qì\ae¤ÕGî³òÎ&sç˜^ds÷Ýˆ‰Ìý‡?9[ŸnRÕ2VËx[!­º[,Ë†9û¦¶Á‰'­¸· î¤íÁâÚnî˜Êwòvw.”ñz;çÛÿþö4N¿SÍÄ=$îŒ:àwµL;â><¹+î›÷¾¹±êV2Zž›¼iŸ¬ÌÏ--ÍÎL<êâžÞvqOamo&îÈr®EqÏßt,[åªf+$ÇÜŸçj1søàÚ„Ü?øów­¸[,Kxœúïkí‰û)+î,ílíœ’QÚ®y»è“toÿ	'ÜÉÛS7æí(î¾ÞþsÕ'“¤~•$EÐÛ"FHûÆJvÚUee†â£«Å£*øÌÍiwHâîq†{¨…Dzaej7íÖéºÈ t‰dJÎëæ	 Íøˆ»©Ý›!¨	Þ#‹®ÓPÜÓ‹;cÞ}‰û,PÝBò«§—Ö#ÑÙ…•Õ¥ÒÔå¥ù(ÓßX¼]k ï10Ä}C ÇœŒ#CÜŸÄŒ÷Ô-­!vÒ/¯N› º;þ,nqWÝL´XŸÈ½.ö’¹?©±_"\k¹®³â°¸“¹ÓªÊÜIÝ¹Ô]¯–sÿòÁ+áÝOÜûËIW;»»ÝˆÉb±X6Ï¥7Ûj8û¦M¸oVÜiã%_q—…2Ôil˜jxûÜÞ~T÷v*‚ü¾™“1úd„tBt|Å÷¹!,î†º«w³JÜ³t4žR
Íè)rjÐ3Í3Fw)î(;°MüSÐ1Éâ¸SJ ‚ï$ÂÉw†¿R’ˆh„ îAâ¾u#w®†/ffUÿxmlaö:‰»ºM,íþâÞ)ØqGÜâÎ÷(ÂŸ n$~Îhé>VâN.Å=¶×kœuqOjâî²öÞÞƒÍÄýb¹µ L~mR;QÂ[Ø
ÉCw®–¡;˜ûÑ/?}ðÙµÐÍýÃÿ=„q+î‹Å†}þå•j;œ½iÅ½eqÿ¶(”á˜Œòv}ÇÔà—Ìy»éí(îf¾Ýðv.Y‘þŽ¸«wbÑæâÞã'îY-¬6c5Ä=ªÁŸª.¦\ÈGJÜ{¶EÜ±rk©•Vó<ƒŸ*Ìˆ@ÉW]ÜI¤gÒÅ½¯¡¸‹NÌ˜wPò^	œ6w¤¥6÷ñ•…ùˆÃDDZfY3÷ÉÜ]uîlî?U3÷£_lA^æÚ¬¸[,KXüêw'Ú÷§¬´³¶ûÜ)ÝÎâÎÞÎ…2æÂTwZ™Ú¨PæmO¡÷É°·Ëw¸S$i»$‰:¢bh%„ðpSÜq/%l“ñˆ»ììSß¥Î€6AjÞžHÃIéð|=ÔééÇ¯Fa{*‚t¢&žPFFÄöZ¹J6ƒxÜ’¹w…#î$í^HÜë>É	u²Vv@Âã“þÊ®î:—¹Ru‹©åkú{Å…iØUÉ¼m^qÏ$¦q#â¼®ËCg =H¸3š¸«CÉ4×òÐ‰žðwý¶k÷rÅr0àåâ¤6†'ŠÒÝ;:´‡,#žäí°'ª+ß~õ}.ÂÜßh¡Í=wan]¼8\âžN	sW#w žs†sîz)äq0÷—¾|ðz5\ÎþÏwÐÜŸ¿9ænÊ»Í¹[,Ë¸õaµ=^ý³÷ˆ;¯K5ÄÝ¯P†î\(ÃÞþ·œoWÞÿÃ¥y»Yàþ=··SÀý¿~ç÷Ùˆ[ÁZ9qgâ@sq'Ôœ^z{$%*}Ä½Åõ”G¢¾íêÄv'.p‰;C¦¥FÓÔÌç p=w“íw4K¯¸§6Ä=*`q	Öaä¾½Œ¬ÌÍL4÷äv‹{š	w	éâCú“ƒÄ='q†ŒÈ™û W kŠû~÷;«ÕM’Ÿº|w6u‹»Ì¹ÿþ_SŸû±cjä(q7V¨ÒÌýè—Ÿ¿¶¸ÀÜ­¸[,K»¼ü‡kíþR¾yÊz;á‘vÎÉ ·8(ÃâNÖÎ;/Qƒû¿¨—þ-xÇTsÞnÜÙÛQÜ¹¿¼=–ñ!wšàQsÞèz¡¼°¸«®NÇ¤*ÊžUð‚ÔnÄ„ÓyNÓôÅ#I´ôz9‹ûsz»Ÿ¸ÓBX½½‰Å„'éâîq±ì8xYÜ	o'ºÚéq7R2ð†Çíu)$mo îi ¡¸óÙKÌ!äƒ5;U«n/¹Rùôìd2iÞhM’éA¼î{ÿ÷‹;ãºë|I¦1¥µ¼ì¸ŠnÜûX¹ƒUI9p«Ö¤˜ÃÚßƒÀ5èåÔGâ>Ìâ.m}ï^Tx8(4ï®nj7Ûû÷§.ßY¯TÜâÅ›?˜;ÎÜi'&5rŒ‘;™û„¹Ã¯“/>?S“3ª›»JË°¼Ûj‹ÅbÙTäµ¶;.YqoMÜAÛYÜÍS¹PFxû?4óvÞx‰ûdÐÛ—xÞÎâž1Å½rúÂøX©˜«Ž.Ì(G›Š;µ@ÆÑWè`¬‘¸w ,îÑ q§A;"5IÙÑ«6*îJb¿>â^'‹TÖrÕí&7Rº;úÊŠ{ñ?$qDIÜáI¾¾¸_Y©n‚µJ¥²Ž/·>CÜ<Ã0w^¡Ê1q·ŒÇÜƒ¹úJ5DþtÞŠ»Åb±ì¸¸sÈý—VÜ‹;BÞÎMßæ…©ìí”áx;ÍÛƒ7^zÛÈÉøzû3BÛzNæ?qÞž’f#]l„ã$ÑÊ\y´*_êë‹NÎÍƒÉLNÔÅ]˜»¸¬‰»´‰{,Í ¸÷$‰Œbâ.Ï•ÃßÂAð;Åñ®<©Gö—,°qÏlÐ¶¸wèë%i6º1q7‰2qAŒNy\žºŒÞ©‹{àì‰KÜS[+îI ™¸Ëuqç§…÷<_*ñ8‰;àÔôùYî÷ƒ”	÷½‹û¹å0}d\qInYœ9²¸ƒðn¸eÔ-#w5s'uF3wî–¡œ;Ý?sæ~ã7˜q§˜»w‹Åbi‹—ÿïÕvnþÊŠ{¸ânî¼äÝxég²P†Ås2,îÜß®îäíÙd‡[ÜAVXÜgË¥ÇgWwKåùÉù»§ç&ˆ»£ÄŽÂ¡ q§ƒˆcG ÚPâÄc3ð†qJìâC¾FâNBÉ¬/«;Á…¹¯™¸gÂ÷±Ó÷kM½½°®J—PÝã¦¸#ŽÈ¹ƒ¸#z;ª»Š¹“¸“¹£¸¿ôÅçŸ=VÊêÍKVÜ-‹%,~	5îmñÊGvmjHâ.7^((CâîÝ1õ.q?î	Êo˜JÞ>ÐÁâÎSn)ÀÓS9WgÈèèøHudjaud¤´X	w§¡¸»=9“$T¸?«òÒ×å@~I¥£ÝD¶wº«æhˆ@ŸÃ«ƒwJvl»¸éM‹{Ô ï&Ä#î‰¹µêP,Lì´¸wÖÅ} PÜ#mˆ{Bw ,îTÙ@Ü{÷z¢2£·/¾Ÿˆ"Kc¥±±ñ|ñöEøDÔ½»^.q—7ÜyÍÛÜ¹ÒoäþÒKPùYX›1ýî¤w‹Åb	‹ Ç½-^½eÅÝ·Â¤¬*Ü¥µ#þ;¦þ„v^Âq»,pm7‚2ÿÌAòvÚxé‡²ÒÏÛÿPãvòöL'Ø£ÞS"R&1¤R™_ÉùËêßø¢ÃfH®ì*|‘BdA"QÜS4W7Œ3B¤´m§tÀ“u%îêL!Qgý;¼{kÖ„‹pÜ•Ô  ZcJ@’G*Ølì¬íî«#4Òd€‰˜81‰·^ÿÎJng²2*‡Ÿ1~ öè4Àwt3q ÇE§FZ•Å¸¡ŠïŸ2¶ñâ÷´û5JƒÇ†v>CåÇs®¦‘'*Ü*£ûAÔÝôô!qµw§Äë­|q°.î#cù*“[-¼qõêÕ×n/.>ù¤8u§wµG:â$ÐÜáå/Í0Íýy6wøu‚#wP÷!‰ûë„_zßîNÛ§’»ƒ¼Û2w‹ÅbÙ<oµÙùÛ[VÚ]ÞÎ³öo"´0õYÒvBy;UA’·âŽ1.‚oÿG€r2àíoSÀ‚2`í\©b2š·¿¨BZ—z ë@š¼IdC2q!îNe~ime*_mÀTeb2¡‰;{»wZš*Å=NÕä)·Eœˆ.îòË¸\ÍÝûØ¿:½•õFâßqŸc¸ç§¦¸ãw¢±)6¸Y;@uW°Wª94¡	gÄƒGÜµ!»dev&äž[™–§Bô“eLo7ÅÕ¼©¸›ž îÔµ)îÉ´þ´©|o!ÿÃwzvÊ6Á\—¿Š@;œšføi„(qO€¸¤Y;ïµDKQ(îÃÃÊéñ:WKU øÚàÐûy™Wûøj¹X„!{q¬˜)–ß:<4´oß¾‹C»ñ‹»Ä}yÙeîð*ÊVHîsWæÎ9wm#¦¡¹CŸûgµ*ÑvcðwR÷gÅU‚çîe§î‹Å²];0ÕþtÞŠ{sqœÅîìí¼cª«P†ÅÝ(”ù1Ü}
eÔºT@Š;{û{ÑÎÎ¸*ÜÑ1*sK—§Æò¹&%Ýå»§ç××}Ä=NâžÕÅ=‘ÞîîY7ÅÝkàJÜ‘Ù¨ËQ½âî’YÖöw>ÚÁæ>Ð®¸Ç¼â¾§~Ïì)ŒWw‚ââ„.îI]Ü™dkÅ	÷‘¥	÷(>uèéâ—IÜ³jOaGìÊa0öv‚Å}ïÄ}¿.î…q9p¿ò1‰sîò•]ïÂˆ]ŒÙËï_½rø°÷¡Ã»víÞ]w4w¯¸‹;<#gîÂÜ•¸dî¦¸«˜ûÃO®…T*s‹Åýq+î‹ÅÒ.çïµÕùáo¬¸7wÊPÀÄýŸ<óvÌ·P(£í¼ÄAµó{;ÜÍBj‚ä;y{¤G(!îó‹åR1¿¡¦¿üèý……¥Je}˜½]Š»cˆ»VŠH›àh¶ø*¦~«¯ÝèŠ~„ÀÕxÈïÁÿ$Ãúõ|;ðˆ‰»æ¡ÍÄÝˆãGùÞdÜâžÝ“ÝS÷¹RmgFî•÷´ztƒÄñ÷¸wxƒ±u)îŽ¸ÉzNF=»e/êPóÍ‰ûîÛ£b‰ÀààkEÜSzrxhß•sCC î8pâ0_tÀEÖ;q§}¢˜s×GîÔ	éW
ùÊÜ>üäD5j÷Î+q¬¸[,K»¼ðÖÍ3¶Æ}Åçí¼.•¼æí~;¦‚µS¡ÍÛÿÖ¥ò¼½s2Téñög”·}2ï9°/(.ìdWÌ@Ýãêh®Ê4—÷±µµË…uÔ™% qw¤ƒ“rÃ¡GØ¡©Õa×tƒËPEa<O{a©	„ã6ºÊÖƒ=Æ®ª6v^Š…Ü&a‹{'ãwÖôáÞT½Ñ÷l·ëO	÷Ä=1{?¿3#÷¥(öåÐ¸:’Ñv1Bq7 u @ëâÞÕõX:U÷TJwÆ+îâ"‹;þñeqÇ+ðï`‰{Pu¤}&Ü¯¸#AâþoœÃhSîþ•ÁÁÂ(µË\}xúé§å }ß¼‹Þþ s”áùaºgñ!ò™Ž¹46wÊ¹;vŒÍ0Í«eŽ~~¢÷Î‹ÅfîVÜ-‹¥M.Ý¨µ.îœ´Ú°´»ÄýYÞy‰çíœ“ÈÛ±P¨7¸óÎKRÜÙÛ!á®ÍÛAÜMoÿ¾Ê·Þþ_˜“J²¥1“º>3wlÓ>Ÿ/.Ì­K	
¨#=þé»)uó@8ËWLtýýG1R''úE‡LgìD/€¹€^´ÂT~ÚÁ˜«(/¥‘Fzz¨WžH»a'ì!š‹»‰®ñÆu“:)vÇÀu¨|ÿiç5‰:ýýúåþùwBÜQ>§Ýµ=j©¨¾dÔï¾”ËwÓˆnï>iøà3¬Ç{ŒÂ2 7n ®µ¿b§T×ÒTÏ^^xUy<‚'!xšhÏ~àsFwPs Õ]qTÝ„Üì~pðx¸Æo‚¸c™ûøí} Júuö!æ€¸Ã	üCsO@•“¶ )äÌýçúFLÒÜyê¿¢¸sZæÓP²2µÞú˜;Pï–XÜ%JÜ­º[,KsÚ(s?qã”÷¶ÅýoPÜeP†çí”Q;¦²·ÿØôv3'ÃÞÎ9™_€·/§»ÜâžÉT
åR‹«óãw@ÝQÛMqéâ“â.@7O Ä³Z*qŠb0¸à#î½ÃLCqç·Ä£$î]-‹»»9¦¿Á‹ê´ÆWÜ³P+SÛ™b™õúð÷d’Å.ÉÂtCÜù1’Ï»VÄ}×kòÕ|ùÜàà¹Ó£µ‘ÒåÂ9¯3qWÓ|÷î>¬;åÍ%î=©e0wsUoZF™;VËx&¤w+î–ÿgï|£ÊÎ;^Vã¶xl1?5í¬v¼­'6VV×”¶")©Ð&Å‘v¥¤•Ú7‰’ª•ËŒAFrb–cCÜ,xÉÚ&‹ ÑÖ66Ø_/»/v[iÓ¼YUUÕ÷3ÿBŸç<çÜçÜsïeîwm/œ„ñÌÇ¾3‰>óø{¾Åb‰–¡ù…º§^ùëìž÷?(%PLÆôv•”Ñ¦âÀçíÔ)½Ü•·sPÆ§ÀÎ¥
qWÞþÎj:¤v–Rú¹%ÉÔÍÁáé×Òˆtw!#ˆY¢É0MºDúE˜{Ž!7M©› 7wº€!îl‘€h¬$q'<îî¶Â0êlíÞÌË¤ÌI«ú'ÍnF‹XÜù ¥¸5}¤RÞ_ú¹sÆ!fBW¿9œ¸{ßï‹;óÇ,îY§w“w3iëÌ6HF¼fœ~Gt`@=AH¬ûÛYÜÙÛÕ‹¡÷âº>\©Î¶¶6–‡oÏŽ=g°C6ßÝÝâî”MîYw2÷˜úcx%ÐçþeîN)ä·ëÜaæþ»£Q‰; Ì]æÜo:¥º·[{·X,–P¼ºr¹\'•kvØ^EÜyÞþµÉÛYÜù`ªÜ¼„ÚNÞÎ+SQÜ•·óÀýiànxûw ¡í\à~@z{<³…`q?wúK¾û.½¦,Æ½‰Ä=Îw“Ê°bº;pv=PÜóHqç»•Ànq÷•OŽ·Ëé´81Vøž?õþäæøQüø‰‹—6¤W¦oéÜk$î~dë îYqo—¿ÞÀ‡ÓÛLswwËàv.w@=$Å»qÏâ®ªÛs/­cÓ°îlî‹Ëåƒ·›(cŠû	0î¾ƒÄ=/Iä`S|“,îH,‹W2_}G˜û¹tç‘ûËzµÌßE&îot:æþ¼w‹Åb‰BÜo.ÔÝÑû±÷ðâÎ…2û¨R†¦Ò¼‹ =AÚ˜Jóv3(8oÿ!/^BoÇÅKš—’¸_ä¥êõrô,XÜÙ8Sš»D“î3ÄþIWêÀ%îlîêË˜Sz{øœ£‘;²Í}ÓŠ{zb®eŒw)ôã3.“ïÂ[†7¦òdÙ|âNÃvwºàq´RH¼¡‹{,PÜEáLªvqÏ+qŸYR÷Ãåå™`q'sÅ§•¸SÌ};*;¡ÄÂq±™ûÙ-CânÌÜÙÜ#÷ë£VÜ-‹%R%ýøhÝI™ñß³u2f£J»GÜ¹PfçÛÙÛ©Áî? 0(ómòvµ0UÊSIÜMoW9,‚”VšÄÇ³“}œAüÍI‘d¸QXÇÛS©Ž•tAñ–bžcm›ÑÄÌ\fg4ÃQ;âÙ}XÜé¦FÒˆîBEò6™f´÷ý[·ªº' Orí#‹†Eònggo÷è>ÊP¾AØÓÁÑ˜#;vè÷$d~¯²þœ>c”AêÐÕõwôt|€âíêâùcŠ»Ñä^ÈêâÎ±v^pþ]ÁzžFÈã\	ñÏ$ßJqW¿	÷„)îøº&o§½©•‰Åbqêv_åR“&î*#âíPw2÷§i5+‚9÷6±ÎÄ=‹o2ÊÜÿŒÍÝU-ó2WËˆ˜ûÿüW9úoöt‚¹^qÇ?/ dî¶\Æb±XÂ÷ÊÔYüµpóI?—êÖvw.p7› 9ß®î$î¨íJÜÉÛ±Áòí(î"&Ãóvw¯·½Å¼9ð±x)#Ï_fqf5OåðôEw’caÇRc`l™è 5¡4.›&‰‹€îbq: xTÑ¦‘PÐ1`­DÃµ[*‰˜Ÿ¸ïßÿ‡Ž¸;Ðmß)ï—%î<e÷ö„\)“ƒ·Æ–Ö?æ^Y:_MÜ‡ˆûà‘ÅÝ„¼ˆ)-'!'qo¨.îíÎ³•V°¸ëãöD"@Ü™	÷EÂÞÔJß¥)÷ã}GfMq'XÜ‘Ïí~)°Ž	rî]´ºL÷Š»˜¹ÿ›cîTçþ-Ä×ÜQÜ?-GÀÂÊ>%îÔ	Iò®êÜù„ªw‹Åb	ÍÐ•úÄ½òæ)+îÑˆ;äÛåÁTÚ¼¤îÊÛ©À6/‘·óâ%-àî-p—Þžm6Åýä¥ˆzNnÓd3î÷”œ{·´[% îmd5\ºá:±Gƒy¸·¹HTÁ÷THqßNÜ™èÅÝˆ³;èÖ¾‡/T5qGæ&z76)ÃÞ¾ÑâNãrqbõ‰»XË¤‹»xbÂ‹{›&îÃåÁYÌÌÌž¸7NÜ¿Þ*Å½UìQMtÀÑ¸¯¸ï*æþ:›;UË°¹£ºkTÉÄýòÝ½VÜ-‹%bÆçê\¿4dÅ½qw7Aþ…ËÛ.”ù+Y(ãöö¿¡÷`o'm'o‡E+"'#/š=â~q"²þ_Å™´GÜ;€–¶b+›;¯ŽlQâŽøŠ{Kq‡GBˆ;¢r<BjÄ€µ~qg¾q/E,îcŠZ_ú¦yàÎ6^Ü¥ûˆ; îèÀJÜÛqg|Å=¡b`áÅ}êø‘Þ¥[â”êÀlSÍâŽä[ÀÜ]÷˜÷ýpc«†¹Ã0wª–¡°ÌÿŽD"î+ûöZq·X,–ˆù×÷êlq¯qMëãw4•­Å´Ý]‰Óvœ·£µ÷hóv ´]e`ÜÎóvÞ˜*ÅÝØ¼ÄÞÎSÙÛ!Çªæíñöf÷âqþRTŠÊ½R‘yabSÜ!Ù®MÜ‹ò|)ú¹DxûCn¼o£žŽ£î*íãBwd+ÍCwCÜGÝ}¥2Ú^xsª)î¦_ªbBÞpjI4¼áv¿–ïqË»|h
ºJÖ•ÊéÛMW7­½Š¸3†¸7k„8+ü¬NLAâÎ˜êžõˆ{,­º!©Š^mv/ÇjÄçi!ÄÞxúŠ;ÜI°¸ÏL>Þ$R/ÝÝàí€[Ü…¬âÞäw1s‡·§ÚE­2â:>+W¨²¹“ºû”B:¸/¬ôìÝÛ¹·ók\	IT)çNÞNØã©‹Å’¡ëuuÊÜ¯­½füÁø+O’¸?¼(ÜÉÛ=âÎ›—€Ÿé9:™JÞþÁÞþr@¡/LÇPp¨6•ƒ’ÛNþ2ªº‘#¿b‡1Ä½A/›$"æ¾‡È+wÇ‘»æ£>v“wÓbBw»ÿóî#«)Dß%,-›aûCsA\qwDÒï4*ug²‡ò[! —Ñ ¬ðöáu¸OžOë|µÅQâžUPÅþUq¯Ä‚â.ß}†÷·î¹7Kqõ&äë„)îÞDqßæÞÿ^š;´Ÿ
äÑY:œúÔV¼Š¸ˆé¯«jw6wNËD4qqD\æE!î€w‹Åb©•gêé”¹3TÃ°ýØwoŽÌ??¿ú$‹;{;Š;z;'ÜU¤>pç©$îèí‡qo´ AÆšuq‰êjø]zéìDd"B„ýÅÔ±¼¢U Å‘âÎRJaV›G÷ã
ÍÄ·cà=Û¼áâÎƒxÉÂˆ{^§-HÜ[øÐáJy=é==ðóøc%î1qGsw qŸ=1|ûVHq§;PÜ‘¦¦Ý¸GhÍ·À
ÕF¯¸£¹omÎÊªØæ®oPUæ®‹ûår]ë‘ÞnÅÝb±X¢côÊOË5³pýX¸¯~l||üýwï\^(÷_YYy÷ÊüÛ·{óí W¸?/ÐW¦räNwòv÷ÊT¸³·ÜµûßwïÁT.‚L¥©½:+¡£v(Õ³‘|_0ˆÊñžéÊµ“è!`î™;)6‹(•DÂ–Áx ÿpÚ\ ±o6yÙ)Ì/Æñaù½š|ƒÚªg¶¹›èPÈ@qç¯ÍÙö¢-™Õs1®Ý¨šŽçéªé§/*à^>çë¤‹„®“¸sKèô…¨:i0QâŽøˆ»AýâÎîÎM:ž÷læþÈp•q:¾(ü˜Û…·“¸·´µG0üÄ]¾€óEâÆ‘‰Ù©¤C“²wqßA6‰Çñ|š’mx@U¨{º¿cº´[²WÑÜ_ç˜;§Ü]Õ2 î¿BÜ+gî÷ìÛ‹8æ.sîZ™;»;Û»uw‹Åb‰|yêÂÍPsóñ·ßŸŸ?³ sñ@ùòÚW^Ü_‡/ñ±T-ßÎâÎSyÞîèíTÉ÷—œ÷ïs¤×Ûÿš½]h»áí«év´ÇÛÅbNáíÝŽ.ù<AòÂ"$S9·+¡™{æ®fáj#jB|²Š;‰¾	y;¡OÝYÙYÜ93OCVÅ]Ÿü1±š¸o5ñz»HKm7Ä=Çð´Ý%îÇÛ“%ï<Å¥GPÜ×›ÓJˆ<ìö÷˜!îÆ™^÷*Ô-î1MÜ·®³·Ô£þµâNï?[´×c€¸ÓEfjúð'cI?qHÜÃ©ÂÒ»ñfw÷swØ‰ -¬´¶€¾å,ÕJÙ†UW)¤–1ªe~É‘æ‘5]ÜÝ9÷oÊ#ªèî,î
+î‹ÅÌ±zÄ}äãP%ñ7?X¨ô÷ÎW†ëGG‡qÁ_Ü¹P†eŒ"H@y;çd^âœŒp§œ{»™oA™²P&+°·¼(æâDd6WY>é#î¸Œ&^‰
"aqGOgqÇ«h¨JÜS†¸Ô!î€WÜã(îYÈE!îüYTâÎhùôö|Q#Œ¸¯ÿ¦¾ås%D?ý°ÉÄ=í ò1@–À “¦ò^qÏ´sè&Fâ?¢¸ßº7x#é'î<s×Ä}÷nw„ÅI>#wx«}cø-ãeVæž¹*«e@X†ÍÝ,…üÑ÷þ³7¢Œû>4wª–	÷”´[q·X,–¼ºv´ŽN™Ñ_øík¾!œßý—÷¯ß¹sýÔ«O€¸wvÞN95pçœ‰ûKFÀÜÑÛ¥¸ÿ­wó`ê7Œwôö.yç;è!95,`ŠŒÃ¿Œù‰{.XÜIÏŸÁˆwªÒ‹XÜ?q'sÏf6¹¸'QÜ¡­¤•J%ì¿œ¸*	6¹¸ãw§Ä=Tw\?_4CwIãâ^òˆ{[Mâ>wbbv,@Ü‰âÞÒ‘ëòˆ;!fî\
Iæn¬P¥‘{Dâ>²¶kŸ2w+î‹Å²‘…g„¨«Yy3(úxíÊÏ‡?õ‰»»Á]ö·sN¦ÇÝé.”ùg¿ƒ©?æ|{5oçÅK Ê¼³ºÚ€G+…Ð~GZrŠzxþ“(Ë½aÃýù³¯9âhàî/î‰ès#BÏÉcC$ŠÜâ.CwEqG´c€þï9ÙìÎâŽÙžh'×MÜÙÛõFÓÛÑùu{{«.îH› ï#(+³ÞÎôþûG%E¡¼û&wxÈw3>CŸ¢û¢¸C©ª|H‰{ã3r«˜óz¬*îE‰8úq|ð“Ù·\âÎêîw8‰º»ÌÝpw¸×0å:XÜ	<œžX	[Õ2lîúÈÝ1÷/¢÷£ïêéÙ¹Kw·ân±X,Æ+µOÜz¥zÈe4LÍdÿÚWÎÚMgGkçÍKÔàpN¦“Ï¥úAÒÀÝÓàÎwðvÞ˜ŠÚîmp7‹ Þ^ºšEqwdEÙanq¢m¤ùÂäéãçÎjŠóó$ÐŠ4IHÜÕ‚Çx#ÙqqèR‰‹`Pç5„9Õ3y)§ØN£W¬8Ð!AøèØ{
i§KD6¼h^Â îÞLÌ¤9ó¬N¡ÀçRõ>™. Þ[pÄ‡µÏ÷Vòä/ãø_÷ÔÜD$âÞ[	ßí‹.pJª;åÝ¥¹gCŠûV	}î»})”¸
JÜþÕw²v"«£«»z÷[ UFÍR‡|ÉÐö¥ N	QI¸›NóxŽø‰œš<qc`.ÉÌÝwˆþö&|bÉÜ©cd^ÐÔZÄ ZJ½¶åÒ®Þ¼À%‹ÅWÅUÑ-Ã1w@ë„üâ?úËpæþÎ]»\æÎTáÿ(y BîŒ5w‹Åb‰lwêÂü±ªñö+å²÷0âîõv>˜úkòv³Áý{ÆÆTž·³·ƒfhâ®‘cîD9J*ÃÃ½åƒÃËgYÜ{Š,î
òöxûv4õ”4š\*µ%L`5®qd}ân’€¸w¥¹L•7fnqï@qgLq/Ö(îc3}Qx{ooønÿßœO	J
÷ìÆ‰;â÷«UÄÐÅ} ¸w‰_Õ+î·–ïÍÎ.†w|H‰;ýÂÜ…¸§ýÄ=W¤½´J¥¾3w2÷/þ;Š‰{å½Ïwíúì³VÜ-‹%RF¯õ×Þ)óJUo¯„÷ùñ¯®¸ëõíœoðÁT.”¡€»!îèí?£ h»ÛÛƒ7/z; ¦b¾Ý	«€^(q,	T.œ—K%K{ò*À¡‰;Þ„y ŒÛIÔ)¸ž!n‹1=€R£YÊn'GÜgn-..¾µ83–ÔZV¼â®<ŠÅÍÙ1Ët,€c*c	#î[wß(¸òíˆwî~4Ä]•?ÂUõ;ã÷©±±¹{Q4õöÕ r'æœÒü”#îœ“aqWWŒeFÚÁâ7ƒÄïÍ¨ç« ÿMÂZÙšŽRà<Œ"“‘o¬ø×1$îÀyÞÛñv!î{ ZK ¯ÐÕ=Á¹'zŽÄ3&žÅ¹Ós3!Äéöw
Ñ$qOkâ®rCO	s—Õ2Š;åÜ¹ZÄýÓH¢2ï}¾sçÊÍÏPÜ]æ.Ôã2®NH+î‹ÅR7>¬D>q½ÞîëÈü©ñ'JÜÙÛEƒ;‰û_ˆ;eþ	Ä¼ýxûÃÅý ÜÑÛ¯âÚaˆBÜå€± r‹{Ä^:G(îy¸7n×Å=áw¶÷¼GÜ§f?Yº·¼<±<yiàV²~q'ÃÙxqGB‰{±Fq‡k¾8yp]¢2Le3‹;Ð€T÷¬|~Âˆ{Ú-î-µ‹ûñÁÛ³ÉpâNænŠ»*ŠLæñbâŽÑU¹‹{4÷Ÿß™ßeÅÝb±X"^ÀÔ_s©Ì7ªx{èNoÞ¼¿vwíÔc+î|2U÷ö?åy;ÜÍƒ©ßÅ Ì¯)(ÃóöC®;çÛõ;{{¡@áM¥¸ÏLö•¿,©Â; î”pßGÜá(y0ww’vüƒ¶‹>MÜgŽŸèëí­ ½'o¼5$CŠ{ÎwL;¬»¸Ç£wfq©/
	BGenkQ™M&î˜‰¢ƒBÜcâ^€çÇ;qGüÅ½+÷ð‰;}NŸxÅ}râÆñ¹pâNæNw@[¥*ºe’˜•é’/ë˜•QâŽdÒhî8r§˜;çÜ•¹ÿß§•r|ðùÎ»×ôô¹[q·X,–Í)îC÷×Þ©¥ì÷èÈÈÈ+o?.âÎÚNw1mç©<o§wL¸sä·AÜ¿+› ÍwoÀýÏƒ©´yéÿÙ;ûß8®ëƒò2Š¹¸ÜP¢Db)2ZAAÂÈ¨ËN]¤„ n“A‹¸R^W»á—$€BèZ$UÐA,W"×áJ‚Ë²"e‘–eK•"™(J4P)8Pô§å¿Ðsî¹wÎÌr—œ]ëã>ˆ—¤>(zFž9|ï{ÀÛ…uŠÑb(n)»Õ7X+U…È@Š´]w¨«sGbÔ®‰Ê1r’Ê5)¶eM¶tðLan´ÄdFï-//ÃÙ¾Ü:âŽp'¤…£m\¾	)Ê÷fMÜ5,ouñ\t¢|OÝ¼p×½]w¼,ëˆ;_j’>!~óé‹ûH®2Ÿ ¯2âò8œÊR^xŠ;c¿´‰;“”tx}’¸×âŽ+q—/ î6§ßâÞ,îe³[Üé;YhîûÊ¸[âÎÙwövweîÅ©éÅñ¢ÛÙýÄ­Þt*Ze'$Üz±AžÒ×ÏÍIš;…eø€ªÝÜÿâ÷¿$;wgõÐ¥›G¿ ºãÈQêþ#îƒÁ°)®n"*só”¯¶víÜé“ƒ•ïê¸ûÖS)î/“¸#äíT)½ýï\ÞþÇÜà.½ýûÚÆT··ó¼¦†C‚8fyÃh…¼F_ˆûÒ‚ëŽYë>ÐC‹• %îJDPÜwö  ¨&ÞEÉ7fg(+Ãóbaí1[ð"¥?¹ÅÉ¬–¿Îf³C£c“
3Ñ”\°ª‹{D˜;x{Ìwq¢lq‡1®fìI?qç_AHãv0ö¾¾övì®‡kÑÓã+îâš¤à.qßÃ@K Dè¼…©Ú‹{ä D
ð†ë ¥ò
næçlÑDoqî¹çØÞéõ¡¥ù(îÏûˆûWMÜñ&îMMâVË¯ŠZS;¼Çøù<Î«Ñ[O`íx¬x ²ÓKÜeû¾ýP5ÝO)î©ü$efÖwÆªq‡{²Àûü|ŒÕ2íÜšÔ-ŸKà* ¶'w$ØÜù€ª­Íý÷Átÿ²ºzåã¯”–±‹»™¸Ã¦y«ò÷Ë¾gJÏÞ<9QÚïŸßþØ[;{;‹»ªpçF™¯qÀÅeŽ:e('£Ê¸çí¾9Ï"Èaí0%Kf"‹CU÷ñ\<®Ô]™H4ÊÃoù$Á™zÁ.PhÚÈ¤Ìk9b¢ƒ5ò§rËc~n™™œ.ÎÀ¸ÝUÈ‚côöÍÛ–¸3BãH’¥{cØ!ñ–àÏ Å×mÒ¨Údì7È=}¤¸«]»‚Œ]ò¢E/ Þ)Ô|â~æÝH]^aìteÉ!¥H:;v´þv»¸Yçyty	¾èŠý	”›p=jØÚ%ÅÝž}ÒÒ3êËîPðg‚çãpÜD¼qû¬¡;åÚò¸5‹;E†Wó~ww¦U–Èô’¨#Ž·hîÂá]ô]‰;|éua[µÌ1×ÕÿÊ–‚àÖêêÍG6q—1w„›ed™»2wSæn0UØ¿4qí„Ÿ·¿WÚ,·n^=uâÔS*îäí,î”‘M
 ·óæ%>˜Êî(îäí$îNoìÞn[…¤šÁY—¦Öª'î‹Ñwbo” ¥Ø#Ì}_†ÍAÚû°Ñ†žòxj›$EsC²hRâ¾´Þ"Ðµìäf†3_¬¸'}Å=é÷övÙÞ¾iq‘ß%]'c§àP\ÉÖVÜÓ÷–ZXÜE”\÷îÇAÜÃˆ[Üëð%º¸ÇË÷Xyâ¾ÐÅ=?žŸŸ)CÜÅœ½¼Å=ÊØÅÎ’ø‹ûWë:B®j™àªßþür).Z]=ô‚wƒÁ`–O/Vžk¹qÜã?ûö%ööÊ¼|ëÒµÛo­ñip§˜a;˜
`ƒ;ÚNÞîœ·¿wéíÚæ%ž·óÆT/o8¦¼îŠ{¬e¸z)÷Ñ<X²nîQ&EA_<Aâ°¸7´Çz@TU¸Ä½IŒãÃÂég
ÓÙÖy¦‡ÆÎ\(ZÚ°º“OV.îì€>8ûÞáÕOÜwªç”âŽxˆ»ºŒQDä¢	‡×!ôc‰;|‹¢¶â¾Æâîž¸Çã<¾¶_¼º:%ævCß@Üéòº±¼Å+–äÓC<îG%$ð›=Å¨ñ‘$!27p+)è%.ÝâNƒv×ÄŠ9Í¿5m§C¨]]êDjW+EÚ5¤¸ôàº„&Šêz‹§˜ø‡–¹“i6÷Ï3¥ xïw«Ž¾âs´2wŽËèmî$îFÝƒÁƒûç*_eýp»[tO}ví.j¶¤î—oÝ8ñ$‹ûþýûyÜÎâîp§y;%e¸PFm^"q×î°´Ý^(ƒÚ~Ì*pï«×¼ÄÝ¤SÚßYÉT­Vf~ â)î ŽÜSÂ^PÊ[0àâ¾«	 Œ{†„Ûa÷²r&Ü )(<“qJº÷09;5Üæwzv©@ÜC¼0¾q¼ÅñwdóâÞ€Ãùˆ{çðHí3ît¡ñºÂ¿&ÑÄ»Bq¹ÖÈ.îrG<Ý-î¶T»'ë‰{Âí\µä÷: ,q'w‡ŸqÇd:œê)îø0ê-îÅy0öFhEjÜHÜ[ÑÕÂÚ¹ë¤Äƒ1|CÚ›¸ïÔñ—µ;n/…´çÜ÷“—nÞqÁ.î€Š¹ï7ân0›âþÉ@Äýáµs0@Þ¯xJÄÝ=pGowŠ;7ARÀ¼ýÝ÷¿…2 íš·+q—îõÔ3¸¸Ç>Ê–ªCö£?qG„¸ËºPÌ¸ãIõäí6qàº&q†³=’+Ìd×ôS©kÞi±¹â%îDuÄ½0Yë:Èñh¤p^`xþÞ.ÊN §¸'žMq/NOG™™ÙþŠÄÍÝOÜ#°!ŒýÄ=
KsgqWæþíÿdâ~úî£—^rŽÜ¸Ã–yXùÄýÜ§Ûõ˜Ìý‹¥€‚Ó—ÞÜþXŠ»žngqÿ†Ê·Ûúd°	8ÂMúÉÔÐÉÔ¿w6¸óÊTôöï[SAÜ‹—¸ò5pÿñO 2œPân/n×Ä½¡áét©:LÍs[5B®Â&µh#‘>¨ì.ÖÂû—$hÛ-˜§i½3~}r(ít¿µ@kCË…}‘6‡¸egÜCÉÒ¡£‹;‘dôw¨$©·Ä=æ÷©íy»$JâÎV'è:â®âÐ‚Öât¦¶Q™3ù”8OÐ3_PGy¡±»Ÿþ^’JR½€0S¤ôttÎ¿kÙvokoÆÆ·Œ“¸Çyí•¼ï–¸óïig”¸Ûz†·^ÆnÄ^®}„"#	‹;#í|:ö¯/Q¼%ZÈçò+yÏŒ»Õ%Ó%ÙtAr¦¿—(öJ¤¹Ã ´`w«b§¨R»ÈÊðÈý~›.Â•Uw@˜;@âÎqÊ¹ƒÅ]Oºq7WUùÄýâÛõ®çJÁ1xóÕ'áX*8;‚ÞÖN|ÍCÜöv@¬LÕîßò¸£¸s£ÜÙÛÿ°î?E	n“A°þÑ-î}ÕÊ¸¯-äð~HZGCâz‰¹ã+º…ª–ÁTB˜¡”;F,-yJº¿M¦‡&Ç—ÚÒvoqgô:H$aÑQ,î„KÜ;¤<Š~}ùTí˜ ÕA
"‹;eÜUŸZ3»<„¸—Ê¸çhÛP]mYœß@šŒþÞTï÷ Í}[™â]ò’zUè7óÝr‰{ÂWÜCÝâeŸau·¾£¤?§¨ÄÞU¼q\ä¾ÓyÂØKÜs‹Xø3RˆÎç£ó÷Î\˜LOœâ·îk¯&î»w·‹;üj6÷Ô@D~ÏãçêII*;uq6'»›b¿æþOº¹´iðÎ££G‚¹;Äýeí„*º»0wÄš¹3fèn0NNÝ¼¼uqß~û½R€Ü¹ú‹;e„¸Ko<› •·KÎÛ(æí¿p7AR£ÏÛ½e::ÈÛYÜ[ÜâÞ÷/÷ª4pŸ,HA¶ŠÔ½ÅCA2Ôˆ¥«ÂnªdPøhnz´r•HNçs5÷$PŽ¸ó-"q´º¸Ö÷ÞÞ~dqß½8€¸§Ë½Ù•Y¼uÎ#y±=Å6Y5«Úûç‰M‹ûoqO–%î	q­#î—©·Ä}À_Ü5¢3ô@5š-çá¿ÉLº´v}ÖCÜÕùÔÄ=j÷¶¥îš¸ð>ÆÜ¹Òfîøu â~î¿_9$Ä fLËq7†­.NØš¸oõÕS?)Éàûo?éâ®¼ýˆÛÛ}6/±·k2¾Sià®¼î A!öv?qýl¨J÷•œ4dØD€¾“¸£‡¸[V"Ô°¤Ú÷½
!îæÇ§†²™M™DæÌ\ñ™÷^wDw"?YCqO/Ì§¼Å	÷ùˆ{2YsqG‚w0`Œ¹SÖÿÊ—)îÃCô 3VÙi\“%=~Æ-î¼9U÷^_qoà´Œ§¸cÌýß©ZÆiîhqê£WàPOwW#w#îƒÁ°UÎß¬üpêgÛ9Ý~õ³‡·O—‚eðæñ§AÜo¯XÜâŽÞÎwMÜµ€»:˜úó¸d0âjÜî#îK´’'xÒr`.$î=€&îHTmQ%µ «Žp.´Ýrô¿h~jhã¿ìõBôY÷ÞõÄ}~¡†â>´<#Ä]ªkË Ð‚Ð'qor‹û6qG¾`qU î‘²Å}~R]1ø4ÿ_žÑÄ‹Ü‡¸wzˆ{JŠ{›¹û‹{¼¨.î×VIÜj–9rÄˆ»Á`0l™³×61qçV™ãïVct{ëê“)î$í®©€jpÿ{»}eêŸÓæ%jp§;o^bowe^PÛ)àÞêF+”ùö˜À=mo‰Eæ²ÕÛš*Å½Gbwü_x1;Um V#ôa£ÅÞÆTãìð§Å™©Å‹;Ìk+î ™Îw%î¤íêE ²\¢2qïÝ@ÜgWÒµ÷‘á~´MÑ ¢Žã_
«gF¤eâXî’(qOÖ!Û6d+âŽ(q‡—2ÅÀZüA·¸SÈWGÜìC\â¾äsSÖ2ÙìÈ0Üâ~MÜº¯vq§î ™‘’÷”p÷”KÜº¸w„šú"¿1wpwnsÿß@šÿ/>:ü
›ûŽª(ïFÜƒaSœ¨<*3xå¬e¸ÔI8ƒ7ig\2èìAR¤§¸ëS)àN+SyÞÎÞŽwkcê›—to=”‰…¥”È2Ïs©È»#Õ[¾¤"ëqçVLBÅØÁihHI{A™þâð…‘µtvkÚ967?ãO%î‹»fî¾âîRxŸw•âø¸ŽË;Aê&q‰uo€pô‘ Ö
Z„Ä³XénBñXÜeºb|´fâž¾7·˜ÜÁ{ŒXmœÈ®&Gëf3a—p~Wc‡ŽŸì°Q'?²ˆãr"×áÔtKå+CâŽ8¿*!îÍhîa*FÒÀÿ ©( ¼}üLÉŸÉùÆÜb¾_w¼Óhï–¸wÉ›¬ÜÝ
™íMQV¦ç ]ÜíÏ&IÒù¢ZæÇ(îlîŸ¥»âø‹;UB"T,°ºs)¤i…4-ã>¸yq?õÖRU¸|ãøÓ!î”yEw¸óÊTY(ó×ZÀ¦z5AÊs©´yé`8®‹{‹§¸/ñÉÔ É¬1X[¡¸ïXÜÙÜ[ó×G²ðI‡2[¬–_XÌ=Fâa¦‹{kajë)¨2Å}t9×Ûø"ç>ÑQHâ.æ¿Ø‘í¸ÓóÙ÷Üâõ‘tÉ—Ìrn|hªè'î»ƒwø¸)&7¨"Ç¤¸g‚˜¸Ÿ¼½zØˆ»Á`0/îïV^<!÷Íóß,U…Á»W§wÆÒv%îœ“Ù¯7ÊPÀ]op§ÕKo¸V/ýPo‚Þþ#ðvï;‹;zû‡}ñ8{;à7pÇ LÕH¯,ì‹@9{DXsMÕŸD)	‰;AjJ‰þFñ³™4tml¶ÉßRB ¡¡2q÷Í$Ü‘6Kq%êuqw;=î¸ÅPˆ!#uƒ—~¤UÀâ^¼¾¶å{:]f¯P/@3÷ ^¥¸‘TÉX;º¤‚/.´è
®Ë;‹9³®¸×nq¯G(é.¶+uw'­G‡D‡&îÚ".KÛ“$îX's×Ô²Bº¸GçWî­­W…?=VJçùêqgÜâÎîŽâ¾Ù·GfÜ=Ä½9ÉÀÇ!Ú j‰;˜ûo~;X
€Ó—HÜE³/Pý3^Ãìç´ŒwÀ2wSçn0LÜ'.ÅiûWn].U‹‰_=Mâ®Ü9áÎÞŽMjàîÝIÞNwòöojMèí¼vIà7pÿéH©ŠŒ-¿ûNÄì ê'Î¹w]qoó÷\aÇí£Ù@Â÷-=;âÞ*aqÏÍe¶*îe>>¥¯IÜ‘¢Ä_¤¸O¡¸Ãç‰•+î…é…uãKâ1)ß¿0–_GÜø‹û¾T[™âžH„?1wn–ùÍ¤iƒüÝ_RVæwƒÁ`ø¢Å$½}ã“Ryïþ&îûÙÛ_@Ûµ&ÈÃT(CÞþ†·ÃÁÔJ¼ÜÁ<¸Ò7âN÷*’ÎNb„8Ø>ÎÛf¬µ@ŒŽ4Fy$+„–¾ˆÌ.NÁWŠ¾CÓdî$îaxÝXÜq‡—JÄÓ	(ŒñÅ]KÊø‹{/ƒvGÒî÷®á‘‰{v¥H‰)ÏJj›paNÜ%öµ!—¸7#I§¸sM¨\Ü;:º!·¸'“üû•‰;|ªxX,›"uçè)îÃÓSçÈ/,gKró…Vq?pà j;=¨Ñâ\q½ÉÛå‰ouX>uÓõdš‘˜»£òÿ‚©q¿²úúa€Ì]©û‘#Z™ûþýFÜƒ¡"NÝ8]±Tß~óê§W.—ªÉåŸ\q'o_ïdê<V/}O?™ú·Ô(ÃÞâþGö“©”‰ÅE›.˜çœLLsvñòÓ3k¥ª’[jAqß)d]MÜ{¥¸ƒ–ãû j.ÎN¶³Ëck™L€_jú:˜»÷]á¾'î:‰;Àâ¦¨‹{2	jH•&þâŽø‰;›»®íl÷w 8®¸]˜•z‰/”˜áJQ-NO¶*Æzë‚7;Ä¼xâÎHqßfwÀ)îw4ZZßª~áŽ
Å=Ü×³¦îqÇW÷™Åë“Ù¯y6»VZ™ÉÝ)v¶Îçs,î] ˆ;
{¿ “¼}dÌù©È½Ý!îÔˆƒÊ¾À‹›Ds‡˜;OàÿV@ÜI;^úç×¿sXËÐÐÝˆ»Á`0l…·*žœŸ¾våÎ¹RuYûäáù«WÏðé‰/ÜÛ¿dGj»ê¾¢r2LÕÅ½ý{;ÜaàNÞÎM.oçƒ©ß•ùv
¸ÓÖ(Pƒ{½½O@¼îªÿðÁ¿eª}ãFÇ´ÇzäÔ(Aâ.6|Zg(¹©šTÄ›_¢5ûÁ‘ž^’‡S6÷¦¦z—¸³º“ÇJÞYÜ	%îôKB {»MÜ»¸SÒHÀÒžJùÍÛ5qG»³-O­ÝÄ‘a÷ ¶	q?h­QmXÜy ,ßŠKÆÝ‹‚‹ ã;œ$ztBêkˆÎQ…H’àŸDâNxŠ;=*¸¢2òÈq©;ßÕmŒMÜ1â^ÅñLz¼uöÞX¾³3W(táúÔ@1H³Å~xníç;â‘ûˆcp•mÿŠÝ–¸'›ñùC~ÔÝ÷!ÅÜ©YÚ ƒàÖ£×ÉÜ¡¹ëâ€¸#ûåùT ÕK!¿dÇ˜»Á`0(>¸Xñ4üd©œ¼œ;wíü*îGPÛIÜeRÆš·¿Awåí¼2s2úÁÔ¿Ò¼r2$î¢Á¼îèBˆ­+î?-Uéwb+÷”.î]ù… /¸¨PŠû®§SÜ[™þN§¸wÎÔFÜ3Ó îŒ·¸£¹W*îðR¹¸ã}ø2à÷P"ä-î‰­‹;˜{9âž[ž*·itmí^k>›¾ÐÚY™‚Ë[Xœï:°{n$ß™Ÿžíí-.æ»àu¶qoY_Ü›•¸',q‡ëÕ&÷ÑR ¤ïü?{güÛÖuÝqÛ£æXd›’JKÙ^ìÉƒF/î ÅXæ.[¬Ø²*úÃÐ5Y~È‚ƒI˜"6GvXSr* Q–bL-uœ¤MCYK$é¼jU"AE‚aúczï_Ø9÷ÜûÎ{÷=Š”ô¨QÎýÄ (Ú¢¤wŸ¢Ï;üÞs>ùú?aXFÅÜ o7ân0[:±w4o~gogˆ;I»w™’Ñr2Ô’:A6òvµ1•[¸?èí'r2(î í€>0ÕëíQðvwDÓvä•’mµÉ—‰3ƒ.qWÚAÛ!(#â0r'ð:DŠ;úýéââ$Ibèæ¾´_„~YÜ5Zwª[:Ì±»ÓRÜIÝ)Ü î*»„'÷°·³»Ç˜Óðv="ÃâŽ÷j+©­v•±[¼:ÒÄ64Š;ŒPuä9ÒéwøZº9r˜\Swµ,œTÒb2¨î»ÿêD®fx{œÍ›C¶áo îÞ±CˆûŠO-åîû‰A“q?‚Ô§s™V<ü)ÕÖ,ûf½²f§—Öo¦Ë•«…ôˆ|fqdt"39?R,/a5ÒL\¨*qçïQÀÃÈÜi˜û³ÿëŒ¿¸óõ sSM!µ´ŒÌË¸KŒ¸ƒÎù÷_µ:ûýó,îTn×6¦RR¬A™‡TP†ëípð5”¡‚»ðvwmòz;mLÒ¸TðvwGÜñ¯1(Ó~¦j‰ýq§R:‰ûi‡#.¨ÚNN
ñvkS4×¤Ë3bP”7§6wOâ])²)qïñEÜ]Ür¸=ØÜåÑä™šÌ¨ðu~¿2—Ù–L©›5··ûÄ\Rx»w„Åëì,î‚kîr/¥½"E-Ž|ÌšV Í]‰;{ºôv¦—ÅÖP÷a¿¸c¶Fˆ;ü‘½áÁÜam•¹‹ýƒ
GÜcãS…”Õ:™É,n(çñ‡k"cåë)¸;gÛ“Õù’eO«ÙÂü‘ÑZ}Fˆ;i;{;«;d‚^5Âƒ*¾‹ÙZ	IÜoâþ7s§nîàî”•Ñ6¨RÑÝˆ»Á`0´Äóo]°:šs;QÜ)(ãx»w¸SÁw¦ÒÈT]ÜÝ#SUÁÝ#îäíï¢…€	6÷dòZÖj?…ñÕ3èíMÄ=Ö@Üë 'áŠ;“X½»ÅÑÅ}9»=â¾²Ž¸ƒQ²¸ýdîR)7,îL#qš‰ûðð–Ä¿0w¢ë>w^[ª%½Ý÷b9—µ7¼é4Ü¦ø‘ùÉ4ÜÍåá€çsilšT‚ˆZq~rr>	úÚ%eâIw&HÜ{÷D’ïª9LÿóË´çÞqs—âNæNa#îƒÁ°¾ýÖk.îÐ5~›ž˜Ú²¸S¼;¸?¼ž¸c'HÏè¥·))ƒÞâ®:A~ƒ'¦jâ®&/uAf·K†?Ná/ë¸ƒ
É:‡‡“K%«ýØåp¬.""ü"î©P¶Np'ßµéL{/*qßäT&Š ºyWRIú®ûû’LŠ¨„†»óÈ¾=RÜeª,‘´]ÈX¡@ ¸So{¾þq¡Ðªt»Äíìò"‚3Åö‹{ðæÔ\XÉñA¯¸GÉ*…½£¸‹£êÐëwgciƒk)l|"„"éØˆS¸;‰;|øXÉ0®
1äÆ½wA~Öá=A¸«g‰ˆ³††)ˆÞ'Î RÛ¥œ/eÓV¨Øhó‹P†_Y:23>¹¼*.×ñEþ|À<û3öŽ$ÕÕpÚ¸ÛÏ}öÉ·4q¸›;Ý›Š»i-c0—ß{Íêl®|0ÖAâþ‡€v5xIîJ¤¸c¹ÝÛÂÝ¿3õQÏÎTÐvÍÛ¹ÞŽâÎÞÎ	wåí7Ð*îëOŠ
ß)*¯ƒ¤ã„Å=™€1<íçfmDÅ#îÌAâ®#”feó_c+³=K/‹:d¼uq'Û	Ë´ž¸“Òí»Ç-îÕwás¸JÜw¿¶óadggqga÷ˆ{÷VÌ=;Wqy;ËÊÞŽá<»Ý\ˆ{‚§²èawuÜ¥UëÚ.FÔÍqW…t·šzÅŠî,îÁÈ<ŒˆOoö4`7Š;U®ayæðb}O¨°Ìq—¸Ç–Óp®†ŽÍÀ-×Öôê©C"&Óàaj"îHÚ ú›pæ/]øÕçOaÉ=¨™ûcO(q§¢;¢1‘¼FÜƒ!ó/îßÿÏ½Ûoí~q—ÅöÖÅýajáî˜Ê#S©Þ.½ýGÔ	ò!(Úîöv¼ÄÞþ,oL½éRâž€%÷wÁÛuq'¯¬¶“Y©DXÜYÚ=âNê~Z ±j)µEoAl ‘X^ƒà¯ƒ_ÛýâNlVÜwD¸%™ûÛ+î¼%Bw •õ/ëâ~úþã yûÁƒ‰œŒ‡ºýâÎGX¶”¦#%ÅŠ¸¯ØÞ^ÊâÞmÆ‡©Ïâ~²[îYÀ€ülÌaüCÈ¤b4ÁâîcHw„Ì®¤¡àÎâŽ‰¡#±5ËJÙV{ÈOå-{j	Žq½QÑ/wD÷>4wÜ ú›m+”’û§O½ð-6wl		´.î²ìîwãîƒÁ°ëò¿wº¸ÿàù];HÜyf*j».îTow‹;u‚|›
îÒÛ1(£¼Ý#î\o—÷}‡=â~JÜAâ>;ÝWàBwºPš,M,ÍÅð‹ûÖÚÉØ™´÷t&ÕH,'VŠ{tËâ~¸¹¸‹L5|‚~WÉ½=Lqg:[Ü9…íî	Ð£Œ_Ü*°kâ°¸ßCìÖÅaÔsb!>\^I´ îô¸Ë°Lb¿&î@¬LâÞ>2×ÐÛIÜ]Ü5uÜ ˜{HƒSÏýäÎS/¼àwÀ5?µUqgm7ân0È·;}sê…÷Ïï$qÌ#îÁ­ yc*µ‚.¸óÈTåíîé(CA|é¿«?ÉâžHâqÝÝÝp{=ß¦K9›¶%Î/--Ín^Ü‹Û²Ù7®–ŽÂ7ŒÛ³›w¥ìŽ¸÷nBÜ©7y‹{âÐvq qß­‰{v¹¡¸:âÞV)9#1Å^†z[w÷Š;àwY<W–ïEwfHÑTÜñósÅ=ÞPÜçìœÞ6ý–±§^^½Ôº¸]IËüKHó—^ýüŸAÜEÌ]Žabq)w#îƒÁ°9qÿA‡‹ûO^ß»#Äý÷ôvN¸“·kwê(ƒÞÜQëí<z‰î¼1•'¦Þ q§ž2JÜã î¢Øb¬p.­Øm©·gWRTj=(=“vâùÅÑÅ=¦Ú@²Ï¤ÒiŸÀ´L
‹ïÁä¯íß‚¸{Ûz#r#%¡‰;ã¾=ÅÝÝÄ=|qg¶ØU¦õÈ/›‰{7âwv÷®a¤¹¸÷(p­¸5;>@&ß‹°¸Ó &Ÿ¸3‡7!îŒOÜ“òÕµ;ÕÅ=Õ²‰Û<ÿ
î·HjjzúúEºŠ‰Dš‹;a™_gÃ âN%w ŠâÎæNS˜ #îƒÁp‰û…÷ÎÿîLeggqgmNr½]ï(CÞÜ	Róö'Ÿdoçz»ßÛ©ÞÎA ~#ßˆ¢·#bcªþþäj[v¦¦s7—k‹iÜ”XDÉDAÓû èâNœÖµd-‘mïl{—iU$ÙÿKîÁ ™BöW*O“'‡QÏÜÖ	p<žÕ#?‚ÛÝÞî—v ±¸äì£ìì:Væ²V›ÑÅ]ÍÆEqG©³ø¡¤¢]ÛEDz¦w¡‰R÷	”óPUÈ8Š;©;b¢60¸>J_@z‡øo ¿w?¯jù)X¶–QÃÊæJ5ëácgl×qÍÛòáÖ)_/Ax/s8èÅ—ÒÝáÀ`7÷§»ýÓOyÍzB²¹“º“¹SÑ;Ë°º³¸»ìÝˆ»Á`0 Ï¿yÎêd~úÃ];OÜqdjcqGoÿšðv
ÊÈœ@Ü¡¤j©F/q½ýYléî(£‹»:Þ– Li¾8S\œšœªÎÀ`È­ˆûÀbA«äƒ·0vi|¢`…Aázâ‹(îåÌ÷žVÄé‡ý¾ Ü£çÙ ¸÷mwª¹“¸+u¯Lá†«1éÉIÛÊ-ÃMB_PmÏ–WðàNndS?»DÉ®VÅ¾‘Hô£¿ôËtHƒS¸C;øðŠéâÞÐÚ!í Y»Òö“'ÙÛÿao|A™§ÔÎTÕ	ò*¸?I9,¸ë“—þÒãí_U9éíÀ$Éâ.¼E*‹û‹+VÈN€‰(.Õ—\º~ä¸D÷u©ß´µšyŠïcE¿:•²Â€Jî‰¤Fcq8½ô˜$ïë‰;Z¿t:g,>sFBÒî÷BÇ“C2ÍÄ©¯m“¸OèâN_5œÇöp†JiO,î"ãÜGoÇ•‰¼vòÆy"ü—,îû0ww=†CñX9ÿ„xçk9cXéiXÜBÜ]gy»ŒËœau‡EÏ[)MÜ³÷úLV×¬ôÄèb:5½¸`O•&*Õl¬®–ÀÇP|o…ôÜEw È¹êq§½Ü;4PÜ÷Äß©O…ÓTæ6TÜ!,ƒ)wÊÊøÍ;Ës?yR©;¹û ,îãîƒá‹NÇGÜßºZ}vlÇ‰;Ü’Þ”!q§œŒ*¸ëÞî.¸Ë€ûK²Þ~Ã/îQ¿¸_º•²Â'³¶ÄÙÝ­‰;
Î¤òùtX_õôË‰øþøÝ'îëŠ{ºCÄ=ß¬¸ó}wï
ºßi*îôt’í÷ãã÷”wOou¹àj}42‘žªŒÔóSõ‘j©Z©ŒŒ.N•‹±åTj¡º˜£¤MÓ—–ú6&îð`X¦6i…Ák¿øäiØ‰¯Ìý!aîFÜƒ!qïì¤Œ}åÃËg_ÿÃË)îdíÜQFëàÎõv=àþ'NÀý<“—¾	õvwÕÁ¼]h;@e8àÎå1œ$îR:=â~µ`…	÷þcqçaüwØ;™_?ð&™¹Uª¸ûñ„/¯ÌcDƒå=¢QÜIïÅÙ¸¸¹¶’²¶ƒÜâïx7§ŠfB,îhîrÇt2¾qïò‰»¦í:bÅZ÷ÃÌÖÅQ'†w$AK;ˆ7°´ã);í5ïR-V_ÈZÄJe¤6W©ÌUGG*ó3â8ë•X¬6½V‹Ã¯,Ogš5¦™ú®<Ki SSq§ïw8ºNÅýWŸÞyT™;×Ü¹›;·–Aq—înÄÝ`0šröçÏYÍ•·þãÍW¿ÿÃ±íw·µ{Äð‹»¸ÿ‘&î:A~Å]zû¸¡Œ¶3•ÄýðvîIA™dO_ wÄ]‹›ïþÌj);WË„þvÒÛc„zoq1è$Õr¾IÂP¹9*o,îI·¸Óƒ,î¬>‡–Å½·¹¸¶EÜçKÖv`ßœ?ê‚¾ÐQÈ¹ßOâ.Õý”	F4Ï¸»Þ§|;.pi{\àºW‹&ÚÂŠ»bÈµh.qGÿU_GÜñ.‹;…Ü]Ý&AÜ¥¹«WÃ`mÅþ…c3ØTÆÛö¨P…ƒTq¶T®<?22Z7îŸ˜™¥
ÞÖj±úòÂÚZÁ²+…àÚéòÁâ‘§®.îx  5NWHâ~ûÎ£>æŽ=!Õ U·¸#‘¹ëâþ§FÜƒa^¿mu8çpBGÝ·]Üµ©€wÎÉ¨©Ü	ò+(îùîk ¡…»”ù&íL%o÷ÜicªðöÞMÂ/aréRZTF@êa¸4‘m‹¥Ù¥¼ðD“gÓlJe¹”çaNm¬·sKÈDb5ÑPÜñ8%ˆ½ÝÐïé$èh»X9ßß’sÐ€Ó†„½Í=PÛ‹;D¤·ƒôZEwøºFGAÜáû9xÄ‰Aâ~Ñ#÷™.éíýQÊÛÄê…wq ûP·RwØ†Éý ¥¸÷±¸úB¡¶ëâÞwïn~â%îð´üo±Õ¢¸<S?Ÿîu>3XŸ„“:å÷Ñ2¥fŠ#ÄÜ Š•beÎÊ/-c:>eéd¯^¼~ý"]'ºÓ2NÛL2wF]t¼œ³BàÜÇ î`î\r×6¨ºÄÌÝÙ Jw}ƒªwƒÁ`|ï¿l«ó¹ðÞŽ÷¯øÄýi—¸+oÇ–2K“—(à.îÜ	Òwž¼ôÒÏÄ£$æ$?4s	†/‰{r¼MÖ–«AÜ+yÇ;2ÙTûÄ™šÏÎnBÜ‰N÷£÷åL'‹;[{°¸G£š¸÷ûÅ9!‰ŸŠÓ”§hCq—8¼qï]GÜ÷øÅ=YŠ»+Å=gVÜgÊâîøHš·µµåÇçsvi%ké^¼´’» î=MÄýj>”ñKŸÝQ%w#îƒÁ*ß¹mí žû`l›µý·}Až½ô%q§©þV#”pçN”y\v”ùkéíosPs2<z	½]u”ù*eTÀýD2JÞž@[“‹çßÒJÜ_)Yá“‚œîÜ±`q?²q‡x;÷]ÏäÓVè`}SŸ¿:{õÅD#q'Öwò¾F«‚¡MŠ»gmLcäèHâ>0ð  ’2Ø³§ýØ…Å"xúè€GÜŽÀµ‰;ÆEÊv€¸k°¸+XÜñ:âž N t‹óHÜ#>qê‹¤úÅÝxâ¬ücx×/î>îíðßc¸Ç9…¤¸'PÜ‹+¾¨L~Å}MŠ;‹:ÝÕq¶ÇŠÅê¥Ôâ|ÎÒÉ^%gÝºèˆ;§Üâî2wÕßt<k…ÀÇŸŠâÎ%wî		âˆý©O<ÁYê	‰êÿ{u¦0™°Œ¡É¯î±³cg¸Û;6¶Ë`ø"ðÁkpûõ]#î_r‹;ML¥†2ÒÛYÜ=#SÑ;Ê`N{¸“·;âþ•”aq—Þþ¬Ê¼sFõÐpµnð0‹»ô†Ùr;­4}smœÅ=4÷ YÌ[ˆ;“ÑÈÍÍ^+/µ&îÈ†Å¸x	x£â>Òš¸“¹y~a{
îÙ¹ú€WÜ‹;îžŒ‡'îðÜˆ÷xcq—~ÎçfâNÓ\ÜÅc{†úvŠ;|•$î¶­u•™ªÁ¢ŽnDÜyxe:=^÷÷JM•Ò©9Ÿ¸3v÷7&2¡ŒßøßÏï<ŽâN)w®¹SÊcîÂÜ‘ßeqŒ¸š –>vþüÙ½gÏŸeHáÍù`¸Ûùï îÿúóË/îÜRÆßÂîZÀýIéí<2Uˆ»62•Ä6¦B'ÈW§ÔA€¸«±ë”i‡´MV+KÅ:êmJÝ¬¸Žç¬¶c§Ó–Fæ•ñÜõ‰{ÔãíÍÅýK/ŽßºukîÚl°¸º¸DXÜñ8nIÜTæ¶ÇÛí©|Œ“˜SâþcÀAMÜ×+ºG>q§HÜ»a‡«&îÈ	Ÿº›Ú¹÷j˜„žÃã-‹;ÃâN<ð Ådö1Ptß½{÷½½hîDTþxJqŸY³­´WÜW*1`"Ó¢¸b8œËÙÅJÀ+*©´•w„ÅG†{ùÛî#.–Óaœ
¯}vç/Ç”»_ÜÁÜ¸¶–Ù¼ÃÅßK7(óðÉû.ƒá.åìÿ±w¶±MYêLDbˆia`ú’I;Yk‹f²ÛÕV³CÙ¾|`wø²jW]‰ŽTï`¿Œ3EÅdqa“¤±I] £MmTPL¢jZi+u‹Tí|Ê÷J•¶ªÚ¢ÙsžsŸ{¯¯±_Ü8Ü­Ih^ˆ¯¡?ŸüŸÿi9vèB³²è9q¡eÙb÷_½wÈ·g­”¡*Hy2u7‰;î^âF
¸kUÏsÀeDPæ£mn‹ŸIÜ¡’Ú î}1Å~ÂÁmè— ‰{S2ª|/Dzâ‰¼Ä_›§¸ILEü@¸¿kâ^o“¸?<"¯ûÞÄ½þÇr2ÅÝc›¸§[ðŸ@g|Àû'î„•¸/'qWæ?‡:q¯nUUŸß—)îãR	çw"-îÕ­ñîóŠYÅ‡îâ~´Ó«ØÁç;žÛ¾Ã2¼?•*!ÉÜIÜ©Òw‡yPZÜãšï,'ywKò––}W®_~ûí3û•ÅÎ‰xÞ^|qGgGø`êO‘ôê%ÊW/ýu®;&ÜIÜ¹	’î<p7{ûo±Qf[-Z ãN³ªbn_¤êýX³Ó-´’[ Ÿy¦y ‘ •¶Ëvw–Qn),2þ‹©Þ‘TžâNPNÃ…hþ-q!©®¾Þž£.¶ø`Ô¯ÊO}eRÜéÝÄ‡5‹ûúõàífq¯&ÌÞ.ak7 ådÒ÷˜¢ƒ@ÿhîóÂOhï¤žÕõë7B%$Í†‡nF“>½¼A`8,,/JÅ*7‚=2 h»d="Ü]–,AA9Y¶1ûÿaó=0¥`ˆjÈ×ð|‘þ¾š;C!ÚC×¿ì'ž'q·ž¸ÆÙÖ³AÌ´ÆÄ˜o¼q*›¸74à3I€±¤ðô=$¸Ö!âwŠÇqWSð~ø?;¶›Gî¯ÓÈ¨>•6wm@êŽðÕ¿ÈÞqà)'‡xL~AˆÐ8‘w‡¥EËôûgßÚ¿ï‰æSÊ¢fï‘KÏî$î|0ù9ÂS³4ÊÐ¼ý^ÞN«—xe*æd²xûo!áŽ÷­î­O’ûIgqg-¹VlÇ7Y½­RžIÒÎXó†Uôö˜ueüêý&Ú7Œ£æ!îB,Wáüœ§‘âÎÄ/Æ:BÑD_ü Z{_ëTX÷åtvi©jz'^Í£·od²ˆ;ÓÈ˜¬Çîâ…§‰IŸR¤û ‹» Å¾³€hB—{­AÜ­fw£Ï‹Ý«›ôâÎÞwŠ;"ÄÍ
aVlÒæ.”6Oqjn!îÙY¹¼e®©s¯ÐÄžV ¸û­¢2Éˆ(æéÎ)î†?gCQ_°.fmÏým›ñËdo×Ä]~ƒ–Å}Jµ'ÝøŽÜ·S±LæÌýo6w„¨R™;PeqxèîÈûƒ	äÙÁÈËó}k|ÇÝ–‡»úæ^ÞÜ±ˆÙ{æPñ‹ ÙÛów™pgqçyû¿èeHÜwQPFŠ;x»Åê%¸sä½·ÕââÃRÜ7­Ú`÷¶ÁŒ}mgjôGí–â^™·¸b½†šÑüâÇßôýÆ—ˆ÷tÙ'îZU~ £s°§·u,0%‹jâ®Ë<&îLVqçá7¶A‡ŽáLq‡ïÆä!îž¼ÅXµ)‹¸¯·wd‹AÜ]E÷5:q¯N ¸«†•`£•ÀhLäFç'îþñdX±Â?XÆânhÔ\ƒBKqïêP{6§îxÎ–yY®abq‡¡{¾âN8âþ SŽ#ôyž;Å±»“vwX"´\¾tõM¥D8röÐÎ÷§Œ÷×ó¸ƒ¸£·îÏÓÀ½Ä]6Ab	$I
‹»ø	¼½Ì¥KÊ¼èSlÇÆ±&gÛÁÛ$î£³>^Û®âE¸	uc>¨MyXÜóŒÊ¸ØÛÙ„Ä3$…PÃÑh@5ßec]›…·WÜ)E#Bî¥8DÆ¦A?‹{# ¿¦‰{U6q¯ÇS]}==½=ÃðoOÏpoo\÷µ€érðÄ`qç¨ŒQÜ©‹ýûw¬—â>p^QýÆ:Èè÷óówb<ëPÔ±x‰;Üá–Óz²ˆ{oD±…ÏÿÄÝ4rgq—#wGÜòdçžy&_xìî´Ì8”>-Ç_>¢”Wo´,qGmçÝK,î/êƒ2¦
wKoç“©ú€;{{ÆÀš ßPÅÞNÐÖTðv×íø#¸NßyÅ~Á´·?ƒ˜ÎI68_½g†˜Îú•a¯øèSc¿ÿø[WAëˆEÆ_ÖAŽ£óöµzrŒ)C=Bœ8àÎ÷lâ^äÈ¸³¸[#óïO?–)Å!09 'îúßC“XÃâ¾¾J£{(‰ôÊ½ƒ×:çÇbÑ4ÑPÿH¯¤«‚ÔÝÃ¤3în0÷ª4¨îr^F´UPÓ,âÞ€GLšnîwXÑs‰ûJ	eÜ×!0qGsÇê›ªª¡ˆ¢úÌ˜Dè¥CHü08ynoç=LÁ°êµôöhOEYz=¬Ëˆ¸7IäÑëµ'£ðÓ`Àž¤Ìÿ>»ƒGî†2÷¿7›»wÞÂ„8âîFt>–/ôÿðŽº;”6n\¹òÁ™›•ÒâÒñ"zûôÈ:@¿1O¦òæ%^™úAp7{û³:o§©ÖÞþS‡ÞîFØFTáf—ä(ÂC\âàÐvÎ$ª‘Ä j;Ê$»‰º&¢QðŒî4¡yhcû¤ÁäJšÐdq¦ÃÞóqŠšã!¬!ú"ÂûÞj¨ù{‚þmho»èÏuš·š=tö‰½Þ„…¸§¥=ÓÚý=žÚ€„o04åUŠ‚¿Ôê7Ö$¨¬|¤{8ˆ$ƒ“±‘°Ïç7oî÷…¢!±Á‘àH_ÛÚ
ýñU·„ïKÝþT1Ê×Ì]óÒu\\3h¦;Ú%\õÈbž/Ô1C¬F´OFçS)ãâ®øŒON}­Ýp­‡CôŒ2ÝÀTÿã4–­2ô ÷+–ÝøÅ—ÕÀ]Æmj®àé|*âÒ±î`Â§ØÁ'7Ÿ5˜;P•æ.«e8,CTåùTýÕŸq¹Ìô8æþ@É¤ÞÐ÷î<:J–cg›9¡*¥ÆÕC%(îÜi]á+SåÎTsÀýyööo'qo‡&ÈZÜºd÷ZwÑ|·™Äè	Ý÷vá,îu:øU)îL¥öÉ°¹lÝ‹7šäÂ[@Á¡é="½n»ºQÜ7«Ä½
Ö¾|ùïåF^h)m®;ãM‹»‡ÐÉf†¸CÑ¦MâN§WG;}E÷Y£¸?öp¦všÚ“ãHp²#ŒDÄ1~ä‹7	Gb‰Þ£Â6¥¹óÕÊWÜ7g÷Ì¹ùÄ}…YÜågæîqCýM2 =MeÔIw
4ù's‰;}çJÉxk"ÃâowãZ$îÀZÂ,îm¶´Aªû¿x‰Äý9“¸SX†;!YÜÝ8íˆ»ƒ­ÚÎ8Cw‡R¥åú™SJIòa‘Å¥=-î?boç˜VA¢µsP†Ü³­^zÎàípGoç€;5¸ãÁTs£ÜßÃÿù³¸ îÛà‡¶k¡¦Lld¶¿À—y’=Ö=Íè4²IÎ0yoâ…©¼4o@hrâímŸ-XÜý…ÙÁDz;Màh}Ë_ø½ÆxÀ¼]Š»ÇƒÞ>–[‹Ã×z„•L#©ô¼Øqo’‘vkqGšŠ9qx”h’““­‚þh ‡ý®À]9ºÎVRâHÃmˆ™Å}­w@¿pˆŠÅÑw¸Æ?\«aD¬žŸ(@ù<Šû¶ê~o¦¸÷·ÃµžôÒ±iw¢òžâÞ=::Ú¯fý³ZæŽâ¾eËrüŽ¹;%gÌâŽ¿¬‹Ã*'øãÍ—^2ÜAÜÿ=½†	øt:–ƒ^˜»uü'—ÑçÜIÜ	GÜ¼p»Î]îtC:”$çÞoVGÜï¸ÿU^â¾Ã,î<p'qÿ§ìâþ;Ñ(ã1‹;i{­[&ç¨ÛÚ*<ß°ÎÔÆÕŠ»õâ%Õ«Âš¾…’íã…geÆân *•Ê-îèìo¼ñÜ²¸£·ìéKõåeÅ¾hkëX8’èù>Ä}¬xQ™Ñ¡¡äd"1ÙõûÁ×á_ÛŽ-øB×‚]æ!îYÄ½FŠûÚ"‰{™÷„wã™qïž¥Çål%’¸W'§bçÃÙOq˜Ä}¥^Ü]&qPÜû¢¶T}¾+‡¸|ýÎé?ž¾<ó1Šû±+—ç¾›»áˆ»ƒ™|´½E~.swúeJòeÇ/R•åí‹SÜiõÂUú
÷—³7ÊP$íLm§„»l‚$qOLýÍo´F™÷jñ8%/‰$QAPPá"}#ñ`X±µch‰{%%eÌâŽä÷Fø'õànS“1¿—
$@‰¬Lj¸'•¸¿ ¸ëNömˆÇüù}>ðW$ÇzÚdBû¾‹;‚â^¬Lj 6tž…~@UìÇìk3‹;m%XÜ·rR&»¸cÐÛ(îÝ/qÇj<ž2;÷{wˆÊ4Ñì\k7Š{%c÷‰{>Œ×Önò¬q‘¸$î[¨I‡Å]ß®³ÎžR™ýŸíÚm2wn–AsÿôöÜ·ßÎÝ¾}çÛ;W +súöï¾ûî«Ûçˆû\¶¸ì¼|Þãö¢kãÆÌÌõë>¸<=3}zß±–{|.ÇÜJˆ=‡šùàÒ)¥d9»o‘‹û‹VÞÎM,îäí»d£UÊ`Àîäí€æíƒPPf«§‚ÅÄÕ]t»Qû‰Á©‘‹£ö[ShÏ¥’NZ‹;’CÜáÅá˜Z¹…UQKYàÔ=Ð*Ä½··;CÜÓ9wÊ¸oy¼X¯¾SàÀ=ÞÕ3x-<Ï¡ôù`Y'oN½Ÿâ.2îÅwŸñyïë
-_ÂîmYÄ]ÖLÄiÈjN Ò2›…Ø.V’¸¯Ô1/q‡w^iwÈÕSÈÝUFâŽ‡S½Æç4Þ©á¦êú`@{vÌµLø47«¸w'¼9ÄÝíÙ°FœH¥âwRt—ËJÜk‚[JÜ?»yÍ}‡fî¯zsÿôÎ·w¿½uè©·¾C¾ºsÅ÷nƒû oZð†í=w¾eçs—Ï^mÞ¿¿ù®W‡~ëææž=9}üX¶÷pâ2%Ãá™·Ï\Ýj¯R²™ÙSdq'òw¸‹ƒ©ìí,î¨í<pßâÎÞN;SÞÎ2q§&H>7‰ûF`}zâÎõ…k®‹‰Á˜×þÄd5ÖT“>Zˆ;©"£IÜ|©°à†ÌÓ„Çgô¿k)ÑÞ•ž¸§Õ]ÜJqÇµåqwðv|ú´âmñxOkg`Þq’”^ÜÓuÛn•±QÜÃÊü¥„×½ØÓw4SÜ‘*£¸ãj,.GÊ$¨­¼‰uMYƒÛÕX÷Žê½âñz@ÉóówÍúé½E%V¤qÇfª„
gfÜ}±áêú‰˜B}MDŽµ(ú¹Å}ƒsw@/îø£LqÿÏV¿-âþù7wï†‘û³ÚÈý—qýÖŸ¥¶ß½{÷Öå;äí_}uëP.qw§.©q»¼-ß	¥ðzî˜Ìá+\j¶ŽiØ{éäÌÎÃNÐÝ¡¤¹rdï^UQJÙÛ[Šãìäífq—2¿Ðv/A£ÚÎw£¸ç¸¿Æ2:oÿµl”ÑæíZÀ]Ü5o÷¸åÀF·QÜãÁ‘„ß~[ššxâ	M&…V
ØÜ³Ò()(·¡ªª\çÞ>¦„r›ðè…Mzˆûò7$ËQÜ=°G÷y¦ººº‚óNýøúSðÎ«Ìâ¾ÍJÜ	°±¸›ö-™åÝP:3 ‡¥…ˆv$zâ–âÔ[Ý€X¾º¦Lc-ÃÅ4býÁ:À…­+«…¸khº»’Ä=_V’¸oA¨Ê]K•“¸‡­b^ýÝr‚	æ!îCPûž·¸oA´®z)î@†¸¼h¸ñˆ»EX†Še>KÜ‘¹»RÜ¿¹5}š¶0a±5ËüHÖ¹›‹eÊ6÷R6vë_§ñûÎ{ÆdZŽ_?›cMóþ“Ó–ß¦w‚î‹Ÿ=`¼‡>TJ›·ÀÛ±¸³·Å« ÁÛ¥¸sP†e¨R¼Ý8pm—U¼zé#ìÇ°waš,î„±?(£vƒO&îøÓcãÄh½¸`•Ž–<
Í4áB&Éáà¼Åý÷/hâæ^QQ›:xtþ¦ã/¾¸·Oú•¥†ªú£½ùˆû€Å½B¾3\Ê2ê6¯©1Šûæ‚Å½F/î`îxÍ“~+q??Q¿>¦C¥¹Å}t¶£ó¼· qohØb%î6Õ¸ÿñO7_ÛÅ#w4wY	‰â~ûÏqÿŽ¼Åý›¹[ç¬ÅþvÄ}IlRÚÉÞndÞ©þqgÇ>ôþÕyäÞ¼ôþ«Jwgæî°ÈW¤Î\>t¥”½s2Åw’v œ]x;Z;ådØÛQÜ_ä€;UÊ·ÓÉTövãÀO¦ÊÝKZ£L•'SÓ+Sßaq‚GæŽÞn÷Šƒ}ö·ˆ¨‘$§7šâþèb.ê‚QuáªÖ9RÓµƒPžLÉõ'ªÌÞN2·
 k‡[ZOw:œZCâæ¤zuáâîÖ´Å]ŸqGlwŒÊ,AToÇà„i¹;‹;\§rè¾¦ÂI¿¹ Ù+ÒlÖÈ!î+³¸PÜe´^ˆ{Ù†U«ÜU	<XÑŸ45QÿÄpD|“ÂÚ‰t¨]/î¸uØëÍ¹˜Å½¦†ÅÝ²É^[#ÛvÍ«ÎÞOþðÚ®]ú‘ûvýþÔ×oKm'qç;rGÎÜÉÜYÝ¦Åeq/UÊE¢=¯HÄÊ°L¿½_É“ÍÎY|l§ÑÝa³çØõOxëˆRÚ4_ß³ì{w„Å½W/É“©4pÅ]”‘'S_Â»•·ÿZçíš¸sPFk‚ÓB´½*!xränw «Óî«7„s©¬í¸ÐBÜÙ-¨Kv¨Gt$úé`êÔhÆ»Û›
ÈËø¨’ñTHq'y÷ˆ;fÜÁÜ©ruK\…M(îž¾)º£ç/î«î-îõ,îˆ#îYcÁÞ>*ä×¨bqGð"¢º³¬ëáßŠ—]Ø-Í¦šÚÚÌ„—üœm=«¸ãÒUtwôvŒÓ#â4¬x¾YöžÎv××'#IÒžMÜ!mÃäwD'îü…¹2èŠ)vð	Üuæ¾Ã2"åžŽÊÜ%xà|ykzú#îKÖñeybííÓ—ÞTæÃ['[ö8i‡Ò¡å<ÄKž7|p`Ù"÷_™ÄÝ4pGo7'ÜÍÞNUpÏ8™Ê«—>‚„;câî:x1 Ø‹69<A=RÜëšê…lÌ<Å½nx¡‡fÑuü‘ÈÆxcCøÄ\rL±-äNšš¸{Ä¼Ä]lN¥ýK55UÞ„BèYPyž?·¸â> Q™%Š7šê­Í.îâZŠ	¦Iwqp1äíÍÜw¸Õ‰{‡¥¸'º©NF´—æíÙÄ½;@‹
«ç/îö´Ažúü•?¼&²2ÂÜeÊýU9rùi»))ó‰û—ss·f¦ÏýÜ÷%§í]ò}7°Aò­û2~'Î	U‡ÅÉž}×(¥Ï©3ÅÜ¼ÄÒn÷_PŸŒeä‹æ;WÊü›ôöí¦
wn‚ä;Š;e8)Ãw¸sù7ù±^;œJow„{ñÍN<±±ÞèíuZ¡i;Qg"#ãÞ4ºàžÞP,â£–A¨àà:YÀ,9’„ûÎ,îÔ4"o×ÊœÁã F–]âM6‰{<Þ^ˆ¸_›HÅ*ÍÛiîõiª¸³ç-îCYÈÒE=ßãHq§Œû“òªqØJí3òÏŽ	á·ëˆÕBÝ%ôÊCˆEi$¾vÔÔÀ².å}xN˜EÜû¡½}˜´Ù/ÓÀ]{ºö¢É{SûÀpî|–74;Öš¢Rô—•-#³™~$¬ Ü_yåÝ×2Gî¯Ê‘û­{Ü¿üòë¯¿ž›»3³ï§RÝÑÝét*‰;ã¨{‰PŽ‡N—Ä±“ÍÊPÏžÎLË8‡ÅEËŽ¿q¶Y)uNh>y`Ù"÷¿ø	ÜiÞÎ;S)(óYîàíïêîÿ,îÒÛŸç€»¬‚Äûˆ»G6VÝCÜqƒ{—qk¹b4
u2ˆL·ƒ,‚¥?=_qoê_¨@ú§‚£ã
ÛÏ&uu ¦,˜À •¸ƒì¬r5Z¶)'·½ÖçsJUg¢¿ÿZ"8O-XÜôVF˜n¼ÖBÜk˜¨†âHíÉÛ	j|g\¬$Ë]¬€É;c-îÌJ£¸SÄÞ`TÆÂÜc£••8qG:F+qoŸíŒæ¾˜¾Öx<¥µay‹»[ÛÔýŸÝüÓÍwÁÜw“¹k)w¹|'óh*‹;©ûÿÍÝ¾rÜ÷ÅþÆÃö+äêÌ2NXÆaqøôéÓ—Ï ÐpZúœ83Ã]¬Ew.pî™wí`*LM{;`òö_š½Ý2(Ãw™“á
w”Á`5`÷ªõë…¸»­×®ÌÕ–°9ÏìëHR{;š{"d‘Å°w‹:÷¡ÙyåäUúÁJZ48 :PYÀ—ëO¤XÜ¥»¯oÀý‰óvRv\½„„YÜCürpC‘/4ÖŸL	ÕL³‘¨×ºfh—aqÏßùòM)ã¾”‰ü?{gÛÆ}ÞqÍ‘ 5âfS–¡D¶86ìØ€ç&n¡"ª­+°ÅŠtÆ†$NÖ¢ÅÖ%8LdÄIÎf2ê5‘K²DQ!eYžÅÐ[-Æ¶^,Y–PvE5m†ƒä#¹[…4Øó»çŽÏÝñ(R¼³LZ÷qE±ªë’"Ý|îÑ÷÷}ú&K1.ƒâ.R.QJ”'Q-Â~‰»ŠBV³EwM`Ä}‡,îô¶ywLWÜ]n[P~+ã
&@Övww£ƒãÓã²§$µÄjFî…Z¤X4D½çâ³¼zû?_zŸ…eÐÜ©ÌÍýß¿H¸SRFövàó{ó±:¦î‰¬Œ,ï–¸ç5F½½¦éb?Ÿ5õW´×ÖU‹œ a(»:;;ãçz¯ 9(îÏ(Åý{jqÇ©Ú
÷((óKVáNM¯%¯^ú!Ü©Âe˜Tf îOÂ^õ÷¼¼©8—¢à6†1q-¹DëX¿í
­àíÑüf.¬žãc¾ ;¸ÖI}q'ogé`­¸ËYéÒóðˆŒ Ü–¸›3ÞQN¥$îŽÙávãÅÞ3q_¸Æ¢2I«e…žŽ‘Vw{¢wü-iáz”â^¨#îÛµ¸ÃbJûÇ+7ûo¿òþûŠ°Ì’¹ãùÔß|¹VR†Äýw¿ûôÓ«Mß¶Ä=Ï)6~t±ÞØp¸K–±fîýÔGCÓ‰ÙÞÞ~>/ñÏôžäµœœ¹t£&'Åý¥¸Ow:™ŠSià¾æÉTw
Ê€·£¸c¤¼z	î@"
P™w†¤žÒ
Èÿ80Y‰zBL™1Ú€ôâ®“Ez\<Ç¤ÅáH­îÉ^SöŠÃÑYÚFä?n6ûŸ5Þp)Aâ¾‘æíÈ†hîtÈñ¼áõ´žnÑ/IÜÉÜ‰ìÅ±âáÔG¯¯“§n#PÜË5âÎ¾¾¼Ä_|}ôÅXSÜ™"_Pš{©Cq×à‰—„$qZ%î8“OsósÝO#îÈž·a7šQü««õüíW~#w¹Yæ3÷ÄÈýúçäí©’2ÿ‹âê>uåFóSˆ%îdL†MÃ×žÇ×óF¹ÜdÅÜ-r‰šSó3õýy›ˆ™™Š´ó.Ç¦c9/î?¢„{òê¥Ÿ¡¸£·ƒ¸ë5Ê¼‰îG;Sé`*ˆ»”Áx®ä¨íºânº·;<ñr×>Z;€®žVÜ‰Ã}N\|*8]kù.§ã4áªÃQ1aàu+gø(îq‡{jq/â~aÏŽì×…Bœ·“¸di²±ÄÝ®¥îw%åIà®&ôöÊJIÜÉÜS‹{¢Ù]z»¾¸£º#øÖ)õ9()£ºˆ¬Š;Òˆ;nhÊ¤.I¼TY·¸wŽ
¼A„å;7ÿÊ+/IæŽâ~Œ‰;š{ê.Hòv÷û÷?m¿4ô–¸ç%´ÿTŸº¦Å‰+×¯L,65Ê¤ø'u”ÉfF3s·Â2…ºSuŒS‹ƒõçNæWfpÆŽ—˜šbKÒæ{yµõíW
š‹7ÚÚIÚå£©jq—eàdêŸˆUäí²¸ËM?¥
wòv±QÅýuÕê%&îŠ÷Ÿc¤¼2µº§í¨%
q"IÜÏ¶ð¦Ò®8,±— m'qW¡•G"äˆ}ð^Ä}-Õæ4óxÁÑè³Ž¶2¥÷úBÒ
Võd?§=Ÿ\	1X© ê…a¤H´¯Çw³~ÒžFÃžãu/¸#Õ²¹jq't}8ü< ~óa’úÈã‰‡ÏG”ßHîHÿf[T©ŠŽ«¦`ñ3ÕeqQ‘ÉÞ“¼ýPÜ÷ì qpâ®cîž¨RÜ,)cOP	»[>}4p/Ñ¦~ØsHÜeò)+;0>ˆYYõóßyå¥—X%¤N™û=ý­©ÿ§'îàí÷¿ùæþÅ7†HÜ%,wÏRÆdºfýý~?ÈË9?nfvp1vZwSêoSjŸ(¶¨Zl8u]±á‹ƒÀð`}¾MØcp=Ð~®jª¾~j^º,_TÌÜÛ‡¯/Æ
€wE»¶	w¦êŠû˜¸Ë«—ŽaP†¼î,áŽÞ®wÑÛÿõß`õRõ¯˜¶Kî7©Ä¼óÝk&çdÆ÷*qß¹>dHÜSŠäs>ñT×ÚÊv>r|*Ô),‘qmÁ6x0c£ãÁDBFÁ˜±¨!kÎVµ¸{Tâþ8«‡§ÀÅá[(G”¸³ËÌ¸?ê8½_ww8D&™¯+©$sÀÛýøs«£‡Jw“äjÅ:²i‚®wDOÜÅÒô²ƒEÀvüùkDeln/‰;ž)!q·E[œNŽÏ¡e¤Z÷Õs’~ˆD`L¦¬ÌxäÉ›¯®œãnŸxEaî0r¤2wiàþ{õÑÔÔ÷o€û~ÿì4;e‰{~¡?Ø>^»zÙŸôÖáûg/Îw5¨™öóæpyÈjs·x˜4Çf§>¯˜ššbjÞ;{µ7_hj‚yrÐíêÉÄon.¨i(~ˆâŽÖÎ>žÊ@ÜÉÛ¥£©ê;%ÜõÅN¦R¥ŒªQ¦š®£	¢VÜ¡‡Z¤œÕœ¸xS H]ogâ®&IÜ÷jD2ê§ŒœÇãÀ±:—i‚eu‚ÐÉ-EB”’±£‚Z­¸ã`ÞŽâ½~²ßâÞTÆîÒRŽ7ŒË7¹©¸cbi¯c'qg€¸·mqGyo}omõEƒÕŽÚ5âŽìÇBU¨Œ|6á¦wU‹¸]IftÄ€AöÁB&îHIyŸþÄ½%l‹ðn "‹{‚ Ï+d~9*þ¡T+îÔmZ‰}b(Ä}‡ñÿÿX¾óêm˜º¿¡w0wyäŽ2q_ãh*Š»ÈoÛÔÄb±ÓÏþñ³–¸ç¡·±ÞþÚ~õ‹*£¾nZ¸vð´Õ	iñÐhžhÏ·¥¨µ3±¡¡éÁÙáØiÙÔµÇº›gf¦êÛgf.O y"ît2•îT)£:™ª­pO:™JÞŽî”I/îååG~÷îFÓƒ2©Å}ßzÄ=‚ç‚Ë‰£FÎéÈÌC¸6ðöPO#Ç;Ý0:Ö÷ìs ‚çŒ®¸oM+î€)âî,E¸¸cTfSÁ9=Kã‘ÊµÄ}? ~±_ù&î ÇEôg.Ì	ºâ>:¹«#ÎIg:Ôân³—ëhØ±Wg'îo}à0úv¾ùêk·9ÿêÌÜÅ2¿ ¬ŽÜÿ›&îzw@5p¿ÚÎøúëÿùúÜ¹þá¦¦¦ºÏžµÄ=O½½nþ"¿‚æJWBv®›˜(8y±A%ÖÈÝbÃh¾1Ü^Ëçóâc?]·ÆÙòÓC]M‹7††NÏqvmqÇ2HôvÕÀ]¿
Rìp×Ü1(ó·€TùsôvÜ™Š«—äl;J»FÜË=*ŽÛ!ßmrÀÝã®CN=qß—±¸GæÐ88CÀ%¨iáæF`Ã{Ø+F	R‰û¸7û¬L·úp*]­pMq?zô¨9â.ð-:â~ÀTqÇ¨Ì¦ƒsµM&Äý	­¸ƒ´#ÕìÊ÷”–Y[ÜÉÝ1åž©¸e4r/élÑ÷9÷>AÚT<,V¸ãË‰F|.>cÚ:ªeq'm'DqtÄÝx©ŒÿÖê««~IÜ_Ò«„üèËŒî””Dmog|õUm­àÆPÃg–¸ç£·w×§õ—ÚúKÓÇÙ²TS]G˜P?<ËÜ-6†ã]—àmŸ\FcOþEÏqgÇRõÅ]®p(àN»—t½]o÷e(àþçèí4p—lƒ†íx»¼Øýíî3g 2b&_Åa0we´½BçD*ÓöçPÚSdÜ+¢àí"‚×ËQsLzÀjm¡øh‹î‡¤|·$íDØcàl¨RÜåN@ì”AäÓ|ª­©¥GÅ“œ)WG¬QLÜUõ2vlt_·¸#ð´
ü&ÄÙ7Y)³uøŠŸ‰"LÜáu=²D±fT+î(ìð™8(Q€¾ÿác¡±(î(ô¢Ùc•³÷’w‚nç©'jx¤1l£LdÌ œLZ8ÜËÅ73>EZq‡G_&¾½ß½Æñ†>¾óækwû?¾sGîzæþEêåKºw€y;‰;Àó³‹±fKÜsý,JC¦ûOÛg®LúÍÞÆ³Î§Zl<5Ó—ó©öñ\oûL¯.ë*È%ô­¼]+îr$ÀÆíäíb¥yû‹r‡ûâ~,u…û›ªÕK?V6A¢·³û¯+«YÜ÷“Ï1q—½}›»¥Ž}šIcÏÈ^õæüçvŽ„ö=§fÈØuÁœ;öÊ¤Gh·‡–œbÚ>
ÊYûÓ"6ÀÊ^K¹¹É¤BÈ"„âøµÑÛQÜM°aaÌýž{<BâÎ`ª‰ÈæNâ.}2w¢"à7%Î¥Iy²~ PŠû®]ÒQuùÑÝ3=ßŠâ^„jx‡°5\H‘lõ…j 9óƒÄ>ƒ°Ãkd}EÕ'îz×öp#¸ÆéPêøú¶|	mA¨·Xüg;\]ÈâNà³¡#©Ø(ÃÄ½M0‰\þäÎÊ2ÝOHæŽ1w),s·0Ý£J™ß§¸“¸«¼?YÛ>Ñ%Ý-uÏy{Cì²bGó¨·ÄÝb#85,äS°}¸iºiúÒð,
y”Äý/5âN2Ôá®¸S$xûrÀÄýÇp§;žL•½nýúâ~&ÞâuæzûxŒo¯JÜƒápp½â®W".8½™ˆ»wÉÝÄŸÞEl@
q?ÐÆÈÊw/ÇEðz¼Þž3‘Î'î›tâŽÌþÆÈi£QÜ·üLµ×÷Æ°=êIwœÂgŽg„Ûq,x{™®¸é‹{çoÇ­OnÖ²ª¯ƒ¸¿!žOý%Š»"æ.öÊd9pÿJDŠ,_ŽÕYâž³‡¬‹†ëíÝI­ó©MÍÞ¼òöSÅl¯*È7q–!6¸£¸“·?ƒÞN;S52ÿ(&ÜFw½“©Xáþ2xû?h‚2,à(*ÜAÙY©T‰;û´(Ý­N‡×Ôy;×êî• q‡Ö-î#K\rW;—Ñ¥ƒ-(V[;ç¢¤¬Ï'‹{OöÏ½1ª÷íTâNîŽ_+$q‡.÷¨áè8f]O[$¥¸“·kÅ½B…êÕROˆÌqüæ¤5º_qL >“¼KW¿ î`îLÜ·‹ ›ë‹{!@â®6÷-ÀcšL2èî¢¹oílÕÏ¸{Ãö°'1}šÑYï+ç
W¢·³øOQa™RÜÕoi¹R!îg<†Ï¦Þ½y’ãý+¯ãÈ™;žOÅ5L‰”;j{Ú.Èû:w€—¨ŸøÌ÷¼ñöæÁ\h£ž.¶¶0Yl,5‹y”ÄGyr€ríù(îß;S¿-{; Š;Ü¿CîÚ{:oÿ{¸£·kî”·;2o—~©©–öBN²(
'˜éísyñ’JÜãqwLú…âÌÛ‚ dÕ!ßa·‡]ì^ÏˆAÞNâÎ°÷÷níÀ=¸+·Ø¾çåÍÂÑ!qÑNÜˆûèfwGk8¨w¶ˆî»èêBî%p:u;B/>Z; in¡>¸^·Œùù·Þ¾E-î Çld_ôî˜@=îê‰ûä\bâ­#âŽ·x¸õ=]wå¶„·oÅ°7mâ’D±‡	À}°ŒƒáK†[©j—Wn-÷ó¯¾æ.PMj–ùÍçuAR¥Œ6)“ }¾Á÷œ¤Xj#†fkù`æ”U,c±±‡b¹Oï¥Åa?ïoßâ®¸ÿî	oÿ>xû?S£Ì	j”¡„ûß 8p'oÇ z;œ6[@o×÷÷œ¨í¦áØëŠ{Ï:Å}_´-K©æ‚v{È'°{!ÛÚâweŸ¥p÷³fÖ£s-áÉ$îÅÍuËD™º³Nw™§Mw6ºN#î@ÑÂ¨þÄÝå>`K_uô„B¡xÀë]ïË6ªFq?Âî:âNHOhBÜÝ^ã÷•›ýËw_{Äýˆ;vB‚¸C™;™ûŸ“¸§¸“·²·ÓÌ½Î÷|ðöâ®Y>'¨¨Q*•%îž†é‹°¸ §©¿k®95eþtj;íLý.UÊˆ…2äíRRæGÚ
÷×1p§FL¸ëy;6Ê”WW3o·ƒ¥Ãâ	ÔöÒNˆ¦ºNÛ"PUUÁ Iw/Eö)ÍÐz{x,#µu¶8^M l¯
÷µ9Ä•’2Ï$î6‰‘—9µ2àí)Å}+Àª ‘R‘<o‚Ó¦&wdîIâNßv-{•zmå7/œk.”.ñìOƒ®ïJp`ÿ¬Å[eÐÑ·Úu£xñF1•ãðzË·d@Õ÷ˆlA°Ñíbr;tÅÝ?`wòˆwnt,‹æ|ÛZˆt²kÐ­˜dgÞè<jwùÎöÂ'}FãvÞ…‰ûòêk î`îr³¤Ü5#÷/³î‚ÔÝÜÍ8s·ÊerˆäŠMí|Ž0ÕT À
¹[l 5]‹Wá`vîÒ©¹XÌŽÕä·¸?•RÜÉÛQÜÉÛIÜ“îzÞŽI]qÇ
w,€<Pi‡_»ž¸osÏ¹Lõv¡%"–†#Jqß9>^¸Ã­\Föñ9´BÝawÆmôhôÄ½ÊÝæ²sw§wDOÜ]o.’¹Wë›»ü„×-î!_€ã71œ.EåcÍ‰™;Üq?thâ¾ÐwÙ„Ë¶0’ÅÜý`áŽwQÜµŒ†*GèKà³ e¤zÛ¡ ¯í,«”)*L÷qð–‰ûÛ}£I™»·V–o­~ò¦lîjqÿ>ŠûG÷>_GRFÛÉ«ñ_±Ä=÷½}ºžÏÎXân±Ñ×4]ªçs““ý½W(A–oâN1wÊÉ0k§*È¿Ry;U¸c$u¸ëžLo‚2z'SÿEÑ(ƒçRí îàì Ké*Å¨îŒ´9sSÁî;CGÜãÞøÎ}„ÆÛ©ËÅ=4ž™/º|QMÕ†+Þas³ÿ6çU]F x¾Øö5
|v8GÃGˆ¬pßÊØžŒVÜM·aanRº§w2wôvBOÜá•ˆŽâ¾ÚMŒc.ªZÚ%Å¬v·ïÞ½›Í§±NˆUõk($q¯ßnŸ$î{PÜEpõŠ»jê~Ö+Š»ÎéÔÊà˜±gé†Sì‡Ü¾Nx>bÂ“2øÖ¾€Á*wòxxooïåÁ}ø_7oÝ\YYÅ›e’GîaR&}äý4w¤7f‰{Žq\{æóF.)K½ÒQ¬÷ˆÅQ|j˜ÏIüóM›GÜeo'qOx;ˆ»¸z	« AÜÉÛ)àNA™?ä
÷?eàÉÔj13ñk°vðv;¢÷…h[K#gªâ´MÚ”‹:•âìs¶…2÷PÜ+Ðd15Ž%èÔÉ8˜ect!î°¥÷Pp´?;.p6{qoqšíÃ.ß‚¹â^÷ÁþªMRÕ÷Ý"îDÙ[p¼î@Ý™ìsñF˜ƒ
÷ŽHøƒÉ#qÇ÷vq/yÇp Šs.ßºuëæêË–a3w¬„qg•€hîàíˆn$‰;y»ž¸—O[âžÓ÷âX;ŸKL(,Åz“Xl‹~>çêg¯ÔÁ_‚M&îß¡JíÀýe…»¾¸ƒ·'‹;ÜYÀ‰ºnõÅ=p‚¹ùöÑÐ÷èœ³5š¡¸WŒÄ½LŒ9!mZ%êSgÅ¹xþçÝ.¸ˆÂ½4â^e›qÏïùÒŒÄ¼ÄýšWàM&6QÜ«‚Ñx›ÇÉñ°‹©Ê|qGÔâ¬)îïŽ¥Ê¹ŒìþñDágtÁñ`ç‚Ž¸—¤÷#g[x£Ô‚¸¸ü	‰;š;naBq?vµÝðÀº¹O[âžËS‡r,"0ÓU@X§S-6ŠùœËÊÔú/_Â¿®ù/îX)CâNîäíÚ*Èéd*ˆ;xû_ÓÉTÚ½tBÞ½Dî îèí?¤©t2µwÄÀ']q¯†sáÚ&í©Ä}„r`$¼s_Äqû>Ègð@zq÷ŽG4I—±IqñŒ ‡0=ZÀ”D¨5{ãq\ëTˆ;+ÙŠèh;z;‰»»Õt'vôtš$îUÁ‘pOÀ9*@ð¸m©Ä_úwðuw2w¸Ah›š;Šû–$Þº&ðº8þü&÷´T*/Ítâ$îGº=¼1×‡·î®|xëŸ^†¬Œò|ê/”a™{é¶¦j;ÜõÅè¿n‰{q\p?ÝÎçþ+VVæÿÙ;÷Ø¨îìŽÅ.Ì
ÎmÁµ6¨µÔE›­²­´ÚPV›VÑJÍ£»ê•|o¹3ƒ­±äâ¿xI~àÌƒ¿”€V-lƒab°WµdGH© Žl¹°]¢ünUEÝ*mÏïž¹œ{ïÌxÆóòÜâGÆ(¹3ó}îáœï±(>ÇgJKÜš§®LôÀo€¯µ¸—Äý§ñÝK$îÉÅ² 1
½=.îïÀhjªÝK?ŒO¦þk|2u¯Ã½1UIÄý‚ÝÁòŒ#löv÷àO¯‰„3w“áÎž.Ã]‘£{¢Ì€“¸Û‚PEw€Ág"îž˜È²¦ãºQÜqßpµ!Ô‰Æ®N‘å·ß îHâîñ÷EÜ²eíäÅ³u6IÄ]N5¿í4®öž^Ü9hë‰âþ<Å½ Hv¾ôáu¿·Ò-q6UžF†â>äÌõæïß_Yž_~Äjî\ÜÉÜ?@sGqÏtkêWI·¦š<i‰{é`j”i¹ÍJåv™…EÑ9>ÝÌJålÿôÕ¶g^Ú)R†k»–(cövZšJîæÝKTpOÉ;e´D™£´{‰'ÊüRK”áËRk¸±Vé¡Xøy(ïÞ.F/pAªâšL)î{F]’$òh:o<£…‰bkÇ­A»‹é‘ Qf7ˆ¿ÄÄÈƒ¸ãÕHÔ÷³RŽâNæŽ˜kíH­‰s>‰å,¹o7&ËPœûn@3wJ•!ÈÚÃö>Ç7~"ÕˆÐ®-' óS³·rÿA5OhÜ²™ÞvóI¨Àªd™C&'6ÖÙ_}õÕçU0ßýL„„Îû÷ï¯ìõuoÇÎŸr òåyÉÁ«4X;-‰…Ã½õ²Ìrcáá‘‡ÇÎß%w÷¸¹c–;•ÜŸ ¶çœI4L[k˜JµQ¦mPa¥ÆÀp™…E±©`¥Â©†©õøš‰û_sh÷®^2G¸C$eABÁÝÜánÚ½„ÞþŽæíTp§©ñ÷ßro‡B«*¬‰âŽä½Ðé­I)îÞYÁáv‰PrGC\EÜ½Q—Zkä4%_!®¶;Èàí¶P$2ë”}Á*³¸sêêôîUÇ?ú²h%vŽªè›Ô¯ÉÅ~€?&î9XÞq‡ôâ¾Ø±öó«àCy|ð 0Šûž`´Ã%1Š‹{?A8(±·rûþƒù& #qR‹;šð¾}hî„^ÜOcèb¾uFÚpûþp_ïëš¸ã^(bIÏ£œóòËÉÄ}se®1îÂâ‘#ÇÞŸãâþö;ú0÷ßèKîŸî™vÊPÁ=‘©VKÜKÓÛë'Y	2YfaQlê'KDÜOœ|<ÓZ_öÍwôvódêSÜi25I„;&Êü›*î5«Š{0"°<ãÖ¤wÝÉœqÉç]UÜÁgL%¸ðv·ñÿ…*pgŽPÈï©ÊDÜÁÜ½#"Ëùòv¸oJ)îµ›€Z]í
Ë7R_wnâîµwÈÌ"q6‰¸ï¨<øTÜk‹"îÏó8HrÏ#BìúÁ`Óh;¤%ŠûÓgt©»|KJq¿ër<¹KGVîÏ-Ì?üÙûXrÿË˜JîŸªë—òPp'šg,q/•D™ãÆ wVŠÜn+³°(2õ%Ñ*3h¼†óÙßq#I$%Êàd*FAš¼"ex½Åý˜ag*%Ê`Á½j÷¶ª”â^ãõÇòîŒr“-µ¸‡cLÔIGytUq÷ÚcCÒdÊ(áj¿ÑÛGøÎVÞäÃmKzqÇ’{(«¦Ø€ïn5Š;‘¸ó|—[ayÇÙtÁ î;Ö"î{¼¡¨ƒY$÷$îx~ªÔLÜÜ7¦÷ÝÔ6UAâNÚn÷òLÄ½Kfy÷vèÞÞ“%WžŒIÜwÙïªÏ§××qã<<"åqïÉñšäå£ó’8·ò3.î¼æN[˜æþÙ#ðö¬FSY
š§-q/É‚ûÅVŠ†­£aQt®~ÈÖ™SÍ7û'§{ZË¾fâþ=Iâ÷öïRÁÜÞnL”Ñ&Sõ‰2ù/fo7$Aâd*Üq ½ÌfSý—Àò
XyÔ[“ZÜý.&	‚À]·=Tm†4>u™ª½ÚßiøÅnîí×ù-‰Ú´“ î’‹{“Ì²BDæèÚJhjž¨p`é:qß	ðÇz!î¬Ýo÷Jƒ¸Û |gp> q÷x!HÆj’IŽÐî¯K÷Ùløûn@{ Å½ yO%î€úø²³e8Ï=÷œIÜ7ÉÈïÁqô¾´É'2¥é.?Åµ;UoGq?šÎºá~£×!*.»z©4”Êµ?A8Ï×;Xn4ƒ¸3'Ì§¾…æNÉ2?§d	ùù—PÜWÍ‚ÒÜ‘ãÃ–¸—‰2ƒ¬4™h,³°(2=·×¹Ø~vpìj[}6çê¼JÏðEøfãÅá¶uÒv"±Ü®¦\ÛŸzû€agê{ÜÛJ”!oq7{û?¤Ø™JITpç\W5¿0‹{ÈÍòŠÂwdÖ³H!î/‚¸‹²Sâ®+t†S‰»'Ô)ãQLŸCó†G½4B¶~ø/H£U5 ÊûnøœBÜ‘>1K•“E&ùÀu4tîD·tÀàí[¶€ï¦âÎMž]\Ý9Pn‡owìÝEâÎù+zoÈÝ=þè¬ÃZ¶”©¯Åáç§F5÷×¹»ã»OÊÀ­Fa¨Ç8šZÁ!q×ž¢¹?¨Ú®qÉÅòõ{m²Ë|@uëKpÑ›wªÞ~fèr×Ë—:%Æœ½[¶œ‹ð—àfÒ#xÅ;U6÷æx]ŠsåèÒ äA.¿¥ÖÜ1RwnîZÉýŸ~þeúN™ôw¢y¬ñ?ÿÄ
–)µ‚ûÄ +M®´”YX™¶Éæõ´ö©+Ÿ\ÌîÄ–±‰Fø<9~ûã‰Öž[ƒ·gêŸaq×"ÜIÜ)Q†wÊPƒ;Š;ÜßGqW#Üqõz;&Aò‚;o”Á…K¨fôâ^ogŠÜá{l«ˆûøŠN·S”%µÍ=©¸¿nj°–(8[Ñ·Ç˜‹£D‚ÜÆ›$&Î†×"îÙv)¼“§ýR‰‰»â½¾kíâî:$KÛWí•ñ$ˆ; ]i¯WÄ¥H+îøøÚÄý\ÞÅ]ô½¾•‡°K½[AÜk7ïÜÂÅýt“KŒ\Ž‰ê:äÞ¡N‹»/•¸oÎ9TF™{pd~aeeù¡*îïSÉºÜõmî?0÷Ïéîæ,È5‹ûÀÍ+W-q/o7¼à­¬D™²re,Š	ðí›¶¦ÆûïŸÌâŠïµòŽÀÙ™ã'ûù¥7OCÃÏxO©ˆ;E¸£·ƒ³£ ßHŒ‚L(ƒâŽ;SW/¸j$À½'SAÏÕ$HŒ?$q¯)·3±/wÂ”âŒ0InïÔ¶ugŸ¹æïn—™‚ò(ÈN!mçÂ+†¡#ÈmÜ3+(±ë5F´+"q·Þœ^×IÜáËêâb¬UFD‡½*.î• ‰; ™; ¯¹û‹Á>k$uu$_BÅ]»s'q‡/ñã€îŽâ^nwü„OÆnw÷—ÁÝÄýôÐOÌ{ÐåÝ
èy÷KPp‡`Ku×+¯ ‹2FØH.—È’ˆ{…&î*s#—ëR¤iþðÊüÒÃùåcoÅKîZ$$7w5Y†¶0}údí£©«æ$œŸnÙ´·Yâ¾Nl4F¸×³R¥á^™…EÑi¾zíÃ¬èœ¹¸Fk¯oíáÞÞvê^ÿ‹‚Ç®$üþ)}q§D ¼=±Ã{;‰{bÁ{;ÜÉÛ)ÂÄ]›L5ˆ»ƒâ@œLË3òlx7Ç îs‡¡ÇN¦ˆŽv‰¢(„ÌâíÕ|FTÀûŠ"(éÂ!°Bá6%ûÈlŸ®¼"£¸ˆcwÈBv¶!
¼Í@/îø5‰¸Ã–_÷Ú§bž~|Ó€zÜ9IÅ}Op4bõ¶§AŠ‡Sãæ^£š;Š;²!q×ÒÛÅ½\ƒÄÍ}Ÿšæþ¢‰û¹¡N§¤äûyµ·wÞ‘ƒ`÷-0 [~¾SIv‡×¼M£Ÿ	f8àwû–=ÂÂÒÂÒ!¨¶Ï;ï£¸c²L’’ûTsÿÊ‚Ì¥àNœ
ô216Ñ?Þ?ýÉÌL‹%îÅ§ÞØ9>©°RåÄÄñ2‹u íÖø)Vlš§×z‡1ss¼§íÖ• HÿT3ú«n¸õŒŠ;x»1R†&Sµwôv-
’’ ÍîïR¤Ú(“©Øá®ši¢¸‡#ù¯·{w§÷G%nìØ#2±#jPw>”ŠÅ=AÉT7bn‘_ñzªµU&­¸{G:L™Š’i;cJ{Wq¯ÕE¸¦§÷ÞB‰»¯j-âîÆ¬r{ZÄ‘°YÜ9ê9ã#ª[9…÷WÏôÆÐÚóŒ 	¢ÈW§òl~\·ìÛ·¯<ùTw—zÕÛÊÄ½{„å€¸øxîñ¡+Ë®…åcª¹k™	©7÷þ(OYD ¡¹90 4744ôßk±Ä}}'S‡XéÒoBZ¬­ë.3Þ’ñEK}ü§ú?<•²‚ßX‚âd-îTpO#î í©‰;ÜQÜW£¸Ûì1åwÐ–^Ü÷øA9åŽ&»Ýï÷‡‚ô÷¹Ö¤$f»:ü›F•ŽTâN„FŒw ¼×DÈÌxœn	ê”‰âNÝÎ$î >¦‰;˜û‹a$äÙ›©¸{B>·S`éPœ£ufqÇÏ0Ú#ª•û9[\Ä©Ø÷ÂËzqß°­{èŽK)à“}wUi¯ @Ü»#,âK]½—NãE’¸Ã×Kí,¤ù¥…•C–æç–Žd&îI3eþÀI±|‰­…@Ã•KÜ×s2µþcVÂž,³°X®¿äþápÆ´ãmemê%°TÜ¼Ö³žA¤íD¸óz;VÜÉÛÿ<a4õ=jq×v/2ÜAÜqgê/Rv¸Ö"eL÷ªøh*ÆA¢@S²Œ/ÿŠ&7Uƒ¯[ü˜—ú9ñfàê8:q…w™NàpGFíÑ˜CáÑì‘Fmš¬Óú)~OA{þ	Ô¯ptÄ”™©¸Cdú1v}{½²=íCù?œ§)‘—b"Ë;xG½°KGüáÐ_5à\j8j@fˆØç‰J@ž~Sª;vÀLeCü-¯ p£‘ªÈdòD ‘ºÎöç?êºŒJ…Bq4Wo/âIòåö‡Br»ö3x“A—\^ž[¨Œ´8â¾2?¿¼rÍÝ,ƒæNYîæN2I³ ¿ÊJÜ‰kmV»L19n,¸Ï°æ¦®i‹¢Ò3®°"kLïÈü–D5N_i`i¸ÒVzâ™2hîÉ¡z»ÙÛy½ýŸq÷ÖÛ©àþ¦ÎÛ©àþ¶n2õ(z;ÕÛÕÉÔßÖ©Æà£¸{£p´Ž°MwÄ¦‚š\­ÇïdqDÞÆ.(èð ð.‡SÄmFÙƒ©ú¼úÝ*x¡þ+å¨$R=1:Qæí:®PØÕqa;BêNöŽþ–d>Šû»« Æƒì=FoßèÅ]Û‹e±šdÖ,îf` ww0wÀ$î-•i£¸&q‡_Xþh;Šû†Î59…W/ŽÅjœa«à¼q×B¿ï;åv'ËSÎ¹­,../-}jîokó©ðG u¹¿©Ë|ú$·,ÈôÜì±Ä}ý
î'?d¥L GwÇa‹¯û&¦Ä^™ÆÖ™VÍ·L\™¼Õ¨¶ñœhN??«&‹,îDÂÒTÔv´vŒ‚Ô² ÑÛQÜM‘2¿¦(Hòvm2õçZ½]+¸ƒ·SÁêíážFâØ®mÁÙü{»â­ãvœNÜ_$GÐ‹Id“Š‚.Ÿâ6Ã¢T„úÁÛ9Fa×¾±»E–îë~IŽï&ŠûÁƒ¦¦4244êèr³Âàð«	B&Câ®{%Â£#.‘=CÀ‘aëæAÒ]RÍáæŽmb»öVÆÍ½ÖŒÚ,¥wRv[ Þ±²m/µÿé†mgz/GV`|äí|íÒGv™­†t¹–¼xá;§›$–ÒÜÂâÃÚÔÅ¥£hîZÉö§’¹ó’û“4Y9ÜÙ©+VÅ½¨¢ 7^SXIÓJWk‹âRï&+2Í×îÍLOL_äÆ~ub¸ìä­±©æ›Øª~†°Ç³ßTX¦œ½÷Œ‰»9R‹‚üGÚ½„âþ÷Ä‚ûacÁý—ßÇ(Èª]	âÎÛDx=°*)€¤ÉQ-qFÛPwºàŽÉ`í2J•\RNFõ»ß×d/î£N–ãÏ•)Å½6¸÷HÜ•‘ë`‘5«Š{ØŽ=B¥ ¯tÄ×4‹Œ¸E¶H}©ÅÍ=QÜ‰lÄý[§»ì7…w'ÜËËa]jwŒ­Ž{èŒNÜ!½òŒOÈå¼.,ÍÍ¿;/-­Ì-5•ÜßÑ7ËPÉýIžGSÍœ¿h‰{ñî4™ZÚÜ*³ÄÝbýÌ}j@aE%Ð ³ûƒcc“ý7ãcWÎx:ÌdKÙÅkg›Çlœø¸¥$Ä¦&Š;z;‰ûŸ™&S±àŽÞŽîXpÿ@óö¿o‡ÝKÆwîí‡ÑÛ„‚;‰;§†[;)„î8ýhÇßFv“¸“ÙpüzÿPø‡«CVDEDÌ‹Îžÿþ"l3Š;‘RÜ©ÍÝ'e+r1ŸŸ›R·Ê ë îŽYÕªâ^ìtÉ"+uÙáˆtªŒt6½žp0ûg¬˜P«Ì:Ù&q¯Ù‹½2IÍŸŒÄ€à–o=¿á|oS{1–b	7jÕ†{wøèr±48.Ÿáíü4Wlãâ~'§4ÈÅÇóï..<Xš[>æ®ïrçâN‘Z–û›OtYyìp'šoYâ^<6ÖëûYisjBéeE¥¾uºÿfÃ‰âŸû@ 0 ÒŸTš¯Ýàg1/;5\êâÎ;Ü„÷¿KÜ½„ÞŽ“©¿€wwŠ”¡‚»>Q½O¦î"qPÜ‘`a‚º!³¸£šÅ=Ü'+‚nüST(²]Q? %«Õ¯~ç­²÷pDÈVÜÛ]
oÈAÜ…R1±Ó“Ð*Cáñ7•xn»(Ë²$9#Mv?˜:âÑD¹Ú…W¾è(í¡„³¯½V­#w> šZÜ7g&îPèîÞ;.©(Ï+Ö½Y‹¸Q?¡¸§íŠ¯Àc¬ŠûùÜÒ ç/,=X˜{°¸°ÂÅ]gî$îXr×Ìýßÿ7§åKéi°Ä}½
î{N°Ò&0YFXânQüÝ“­÷ÆKà6ûÊÿíÂ‹ûêÒŽü×vwŠ”ÑyûO©àž¤ÃÝ”(óí^mOêí†‚;íLå¨[CÏ	ÆÄ!AZòvwÄîdQã¢îpIu3‡þÃ£/l(î©Í]Iô-’ý€¨ä–T›#e'øÖ{6CøRÁ‡I‰7^SÅýé+áµGÛe•,¢Óé‰F£>ßhÈƒzìy*Ü¯xGÝE7wApF=<‹‡Øó ™;¬(ÖÆS±S*YÉàÒ›u•êù^{g‘™¤Ø%ž‰à…u9XZ"Ýñ­.z=—cäüÂ= î~è0™;EB¢¹cÉÍý³G(îùíp'”Û=ÖþÔ"f¸—éd%Ž2v\'îÖ±(>·N±gú¶Äý{š¸£·›#Ü©Áý=ˆ”ù[ZšJ÷¿¡‚;ïp§w}ä±¸¸°àN;S±àŽâNàfÇëyï“¡‚»–Z£ë’!4Õ‚TÁ);ev>œêJ.îYTÜÿç~o«2aK@½&Ó-~Í~…¼Ü‘˜ÜT™TÜy€7¢v?$÷KTí/ÀÔðÃQˆ‹{]ØÞçV¢²Ë=;:j{8ÕuÕIP—Fu
¬Èˆ²{ÔóJ2qÔôS[Õîš½\ÜUkß„¬"îäî¦\êsÉ¬8H¾óp7—2wÁwN'î¹¥AÊó‹?|¼°8¿ðøÐ¡¸¸ãaî	ù+-ÌÌýŸâó©o~IÞn÷œ:Ü‰ÉzKÜ×«Ã=ÀJ}&F½Ur·XêgšÙ³=Óâþk]äO´H÷´“©(îßW#Ü!
ÒV“BÜ=¡†Ë>AÜ‘dâ¾gTf2˜»ˆz.æKÿïkwÒvo0ŒkC;²¾ùÿÙ;ßØ&î4ç'¤&¤Q/.}qAÍ’éöEVåtð­z·U»'t/öN:©B»ªVS˜9<vl)%&g°¶ü‰‰ØùƒRµIœM	¤lïì‹í•=EýMKËråï=¿ùyòÌxl2±™±-Í'MÖ@+yÛ)úäÛçù>§&"¼€â®Á¸·õºÍSà°_/îþ¸rñÅ¥í’à
ø —ëLD»×39w YÅý²åâ.y’Ã5/÷Š—!îköbA©épá¶U:q7’¸aäÐ^EÜ_tã7ÞËÇyýê•-s·o_¿²Ä]7,£+–+L˜W‰»ÎÛó÷žÉ•¶¸[†¦Ã½y€=Sêz[Üm
t¹R¥ilgÁÅÜQÜUGS´¤¸ÿ{º¸c$ÞLUîokÄ]·™šIÜ;ãfýGw)swqÔÉ»·ÀÚ_ß>~nPÜëÒÅ=îË/¢¹G…BrÃ„N§÷*
Š;`B$.üÝ­ÔŠ;X{2è¹*.$W"Þ½{W„Ïa?X;°”¸û“Nb1<íì‘F¨¸/>ê‹âÎþùSàÿòÄjdz­¼ˆÅtÀ“¨w1\bJ‰ûo{„HBŽßŽK0ucË–…ë×oý½"îo«#wÕýT¹ƒ¸ÓÄÝ`àžÛÉ‘m¶¸&p*~‘úÊìÄÝ¦àœh"¥HËÀLcYˆ;€{6qÇãK8áÎÄ]¿šÊ¼]w¸3qÿgwõÍT˜p‡³ë›qG&".Ž˜ƒäŒ
$‹¸ÇI— /5íýþ¹Ì½%ÅÝáH÷u¢·[~áuæQX= îÞ<Ä¶SMãæ=?>
¶Ç¼Aw1ÎÈHÁáõë×Ó©vh×¸×ˆ.b-œKt¤‹{ZÜS‰;˜;Œ¸¿®wx½”¸wzNXH°Ý¨¸#žS˜¸ïõò„p¹þÛ•gaËÜuþÊVHÜõ‘;wjî8+óî—™WSmq/Å	wM¥ÌIRôìW=PˆccSöOkijoo/­è½eªÑŠ‹ÃKM¥»v3•z{ö*ÈŸâfê¢·¿¥öö5Uÿ±Xù6VA2o_¹™ú	x; ÝåWþ°‰"à•ÅOuJ»¼ŽÇÂÂËM{<gÜ©©x!ÌÖµ3î±p¢¡¡Aq—r}W|hvÂG¸s‡ÓÄM›*ÀÛÍwÅÚ;iØ-†ß<xòüÎ]*îˆZÜëúQ™ˆ@¬Å™„ßDƒ\ªÉFe(ô§äSdP	¹aÃ_§¼ÂPï(ãs {(Ê»Äsn'±at°ŠpižNã×”„^yZæo ÆK¡ráêÂÜáê­[·ôæÎ"÷SÊÜ?NË\3Ü™ã‘o{TÆ*¶iVS[÷¢GÛi'î6ÅÀþ¡K33/ŽŸé'¥Bÿ™±ýeHaÅ+eXÜŽâ®TA¢¸cà®ööT¼Åy;÷´*HÌÛYäçõ›QÜë¿øM—Ø wÇ›o¢·§‰»‹f°TIÊy0öÏÏSÜ3.î
ÝwD÷šáøœÅ½“ÎhwTv#â¾Êlqç®F;eiïìŽ&’W¿—E¦¨ÄýÛ‡è¨w ÈÅ];2‰;ÀpÙÜqßð*°qß{TGÝ<±)ÐÑ–IÜÛÎIÄ ®CLÜá¯Èo®ka6SçnÜÚº‡eTÅ2ª+L)sÿÕWKî¶¸—Íó=IJ€ö¨ŒM1Ñ<Ôwl9ê.¤qUÚµG"-}ûšËŠ_Ü³Me›©zqÇI™”¸g	ÜQÜÙ Œ6q¯­‡˜<
Í%ÆÄL+]Š¬K8Ý*ä(îß€ó1æEÇ²Å=î#a*î5QWîA¡à=¤-ØÅ&î˜¸Wú£‰Äå›à2Å&îÏî?}ä*îë-•áQ‡1q¯\¾¸·‰¢×ãvKÄbøpyU&qßØ+wÿÁß‚¸‘¼pßØ´pûÆÜí+·pX†Šû¿(ë©zq÷‹yw]dÞâ¾k ÕwkØ¦éS<ÒDŠý&{TÆ¦8Ô½}1HËéÓ-Vçìý„´Ÿ89ÝÓ×h©´gwe3Ü3x;÷ŸPtGSéñ%&îoªw¨”aÞžµÃ7S°™*{;Š{åfùpfgÂMÌÄ­P¡¿Ô­÷‡8Âqàynñ2¦›“¤\¼ïù"ótèÅ‘"“µ£¸+N§—äQ™áóÉÙ—<ñ	­åèÌYÜ«ŽšWG.ýpÏßy÷ÞM–C*â^`sÇùwôr#âµ¶ÈÝn ôâÎÐˆ{}íf˜•y€i™(îk•Ç`•VÜ»z#N§@
€ëhfq_q8@ã9
cîA’_ûÜ¦MsW®ÌmÇÈ*!ÓºÜ­îr¿6Ÿ½Ä=goGÚ÷ÁïôvênõjêÎ)R´Ì”Ù=î6EÆþ³'›úÙmÓÌÈ¿HO&µŒ·Z]?=Ö×Ô²µlèÂ‘²"w<¾ÄÄòv¸ã¤n¦âñ%]ä/q3•y;wðv¸^©wöJø¨ˆ©øbŽEIV$K±ÌÜG”Â8ˆÙ1q'¹pÿ92Ï°¸+F,HF»é/EÝ$gøË³abËYYÜÑÜ_¡÷Ã&N|<»7œ¸	FSdâþŒÍÇd÷ºŒè—S­-r—\"Š»êªÄ}½2äâ¾zÃ)©"Uì¿xåhUùâÕŽÞ^o@àIatÐ§Sy[U+Ù{Š#†;:|$w$çõø}lî½…+7¶Sq§]î8åN#wfîqÿâ+Màäw|I_ä¾Íwë'eö·“`ÏÁ2{9Õ¦èhœŸë;Ö“!zïiiï››šÿìØ™¾Ö²™vb{ZZzz¦‡`¶o-5q×îZq/©÷_`¥Š»fÂn¦¢¸3o§{eB f"\îv¨Aq×Á¦è›öBjNqû·0e‘sâNÛÌ#¸Ó_ª‰ð¹½€Äª«c.Âå#îåÐ˜mÜ³;×o>Ðˆ{Áge0jÏ_Ü/JÜ»cÝÅš;}¾ÀÜ×l`°ªzq €_{¨7äR(„S{³ˆ{ÕQ71ïq†EW^s¯,ÌÍ-lzïÆ•¹Œâ®‰Ü¡’šû_ß7¸ç!î»š.Øânýjê)úUâ¾Íw›"KÞÇT-‘`Í=MíMíãÎîŸ-k>>tüàÎ}{¬òö33“Sû˜L—PÜÑÚÕ2(î:oçMàÞþsv4®¦¢·kn/a‡;îúAv{i7l¦V*Ö^/_L„$Sm&o¨qh@ÇÊ€_Ì÷°ŽÉHÜHš¸Ç}4p¢.’³¸;Õ««'|TÜålQÜË©	¬ƒLÃLq'ßËRCF±™ÂŠûðû­lâ®ÞC¨Óx¼îa²VÜ±S&~9èífÿI)%îô½¯§ÀÛm ã2µkÖ¬´—¹^QböUkËºŠY{!pGc?¥FÜ«ª’åà$G$ž“ì¦Þ˜ƒI¸(·=­Rßå•×þôµY«©HûÔÐ~[Ü­”iþŒ”Ójq·GelŠ/z?}ŒræÌôØÔØøÌÐÅ!m‘Ë‘Ï$b>MgŽ £1Û¬ï˜ÕÚ®+ƒÌ(î íØá®l¦bà·—doÿ'Õf*ˆ;n¦f<šºEs{	7SqÄ~õ3’5Ž×dg},é"ys_'~þe‰{e…èä½@C˜ËYÜ¥Àˆ{Ü£w
÷µÅÝÄíÔïî3q/ø¬Fí/QÜcç%b!B¸Ff]ü²@\É„VÜdŸ¯ Å2Š¹³‰Êëô Ó*`-<GáÌRAKõ¥€ØVžUÜÛ¼<1L^EÂ¨‹ã¥ÀÜÜmp÷…÷@Ü·ëŠe~‘ÚOÅó©_Îë‚òÉUÛûÎÜf‹»…WSÏ¶RàÄNûpªM1³òà¾ã2Gš››õå‹Í}ýVxû¥ãÇ÷µ–!Å0(£H»,î`í í ®¦ìö’ÚÛ©¸ãÍÔèj*ËÛÑÛ?†À]ñvµ¸c$z; ª‚\½fÍšz
ˆ{-|øÁKMDòÅëÔ¤‰;ÚŒŠu^g¾
ˆ¨š•q¼@Üµ'¡@Ü¡Ä18\¿Ð=šÏÉÉÎêÕ«E7w´vwŠ,î‹˜VPÒÄÝcž,ç îÖEíÙ}qgxñ1q oR–wx¬„e2ÝI¶É£¸3o_,š;ˆ;@O1UÃ¼ŒVÜ«ªÀÚÅ‘ÂZ;?z>Ôµq­<¼£÷¿H=¢]bžÞÏÅ]ß½‰®§Î¸ëÍ]wfî4rÿÓ¼©Ç—þžû¶Ù™»uû81ûpªÍ"§šˆ¹LŸh"í—,	Ú­w:à®ˆû? ¸ã Œº
Å]¸WÖ¢¸o†´%îµq—Éerþ:ÙÅéáò“@P=ów—%îÃ£Ð†CÅ=æ#9#ÐÑöÎŸ§¸w%ÓjÒY©÷ï,wŒÚëmý1ý"ÿ/}u¯{ùâK‘×e1Ú]3œðqD’ÜKŠûÀšâÞ588‚­J…Á9ÜÖV¾öEâ~ÀªÝßÀÑSá Ù½¼ý¶FÜFÅ])–sÇa™ÿ™Ïr|	È÷ø’~Ô}r§-î&‹;ÒCJ]mq·)]ŽŸ0;oÿl¨ur`feY‹;”aâŽ«©Ø©ßLýy¦J¬‚dâÎ6SQÜµîèí»åÀ]÷7j·ƒ¿Ï&“» 3[;Š;‚?ŽºH<Ê6láÈ:<wR¸Ì~Ntçs4&˜‡„^N]BÜË«ÒÅi319VÄýawìjGgGds_$‡Ä=6Â«áÝ®H\LødóM{È×QØKz˜•¡ÔBäÎÄ]ž—'á(ÑÚ…g°­ª¼\/î +‡dßQKvôŽxÜ·?s¿}{ìí¤M¹£¸³ýT÷kÿ­x»	WSõ´_´ÅÝªI™K¥!îýÇUŠ`‹»Mi±ïô.b=-¤ÿ4ì¢67®,+5qÿ%åíïàí%­¸ÿçJàžéöv¸g?šŠ•2(î•›åªïñ3O1ò¡î,ÒŽN£çïüa0-“ïÑÓ¸ç0äìBT÷Ô[ÉyÄ–Êdw¹3¤y‘¸—zˆYüßýl§bÔþè±žçìSË»ÆÅ½½8CáQsrüå´vw¹Ë÷ÏêUâ¾¡ºzv°Wô¡µ)ÒF%®^dw -bÍ;>åòŒ|ô&îï¿§žrWÌý—Ú.÷/¡¸/¸¿”‡ýÌ>[Ü­	ÜW’`ºÕ¾¿dS¢´^š–ˆy›š?^V`2h;¢YLýKEÛiàŽÞžYÜqRF[)ƒ“2Ùn/¡¸§¼÷Z™Í
µ›g'¢ç\¼iãe—rhë(î™a17—ƒÁ<xÁ~c’ÑÖ)rùí”	ùåŸæómË,Ä¨"ÊlÐÝ×ÔÝS¬ªB,ÝN} ‹»•MîXhóE?½¸+MTÜŽ:$mÇù¼µÞŽ˜®äygpÄç
³wÅ¤Y4÷Š¿®¯¯¬gâÏÉ†N1šð	G
7ÒU¥d±PÜ¹ÈlÄÿþ#ˆÜaTfŠ»¦XFcî_Qo7íø’ž]}¶¸›…F{ö’à¤ZšËllJ…ÖhŠ4þ¡ýÍ÷—•ª¸ÿ-¸ã¤LªRæ*î™« ÿ« ±Â½};óvv{é¿>¯Í îð‚¾>|(â1MÜ5(šz6q_,ÎÊp/å»•ŠÌ‹:q×
|…L¿Š{H¬.Ÿ !²’Ô‰ ^Ü™±§Fè§NÜ­JÜ€ÙX/îß>|ôô±ž²tq^$îëbÉ@ÁØLxÅ¤WŒ)OüºtØÿúÀÑZè¾zÃDÜëÂmÔB{{G•qßØë´âóÞÃ#çù‰O~ó¡,î,rßŠæÎÎ§ª+!!p·d5i²ÅÝ$Vª»WN’’ Gs7Õnƒ´)Žœl2«¿½i`àXœFEJYÜßÑN¸ÿTövœp×Š;”¡•2)qÇ÷Lî;Xdýf½¸Ó2Hú¥úÕÙÁ I“Xž¸¯Óˆ»Ä-S¾>~ž;ë‰{g7U§w$.‹{CÂ™×ˆ;÷Àâ¼XÜ7Šnbï[ÞäþÝƒ?¿XÔñCùòôé²Ä=	:I¡x_8é…Õ:w¹§î+â>,ÆCGŠ>|`…!q/Ÿ–ÌÛ‹N	š>…a™9¸ŸªÜqÌ]÷kœGq7uÂé¹ð¿¶¸[0)³sš”ÍönªM	Òxát¿i#2[Ï^:Rf€BŸ_2"î?Ñ‹;ÜQÜñh*N¸ÿZ9šŠƒ2éâÞ¾ehàž%q‡©÷êW7Vu…xS®/År÷x@"iY1.ÝJÅÁ4ß«3$î4q„ºeqÏ§-“Nl âîCq‡/¹ˆ{¯yâþÃ}k‡ÜŸÝ¢u¯³?ÒYNâÞ-yR8$žç]	ðv#â^QÿWoøcÑ –œ®C+Š;Þ3“àà¨äó„÷ù'}¸cG&qÇ+Lò¬Ì—_gÜ0-pZmq·`RæH?)	N4Ú#î6¥··Hæ¬£ö7¼ØLÿe(Nk×Ÿ_mWÄÐŠ;tAbà®9¾„“2x|IßI'ÜQÜõ«©Jà^›-q§ât+º‚œGà£¹‰ûð¨´ì‹-Ïž2k§<ÖÜ‰wGèz"$VVRs÷‡ò	.g³ŠûZ¶•*³J€	z÷0q7O¤­krÿdÐÛr'–AÜ½¸w'B.ŽŽw'»ëˆ;˜»ÃÃN‰\è <y qï
ó9/zÜÞó½Õ¿ûô£ q_5+ó³ôó©`îÐ¹Dàn†¸Ÿ9nËX0)3.‘’`¬Ùf¸Û?+\œ3)nŸž¼49Ó¸ÍHƒÔÊÁ³“CÅ$îª.È”·3qÇwæí²¸:šúVz‡;[MÍØáŽî›(»1p§ ·ò«êj*î{»Â‚3îÉwÙÅã¹å’g-&a:§Î˜¸Ã‹ÎaQôƒ¸±`~âæž÷x»AqÇåTóÄÝìíT¡ÑºŽÇì3+Ož>y_4—S¸GÏ{x‰>˜`]JYÅ¿{õ'9®ØLÄ=øÚkr¸ŽcV„9b6Ò¹£>Ÿ70¸qã§¿¿{caÇ&@gîLÜ™¹C¤…;&î¶¸ÿ?{çÓVšÞaþ ‹4 &IQ@3êhPÓi5r5£­zÉÎJíjUiW-Zµ³ÒVnWÊ¶ní3øµ%jl.ÆÆlsk1Úƒ	Â8¸3Õ4Òhÿ˜RË\h„ô	MH‚f§}Ïù|ø|||ðÁø“ê<!˜‹'OÞüÞß+RÆ²ˆž	†;Ô¤ŒÊ3ÅàÒ¢¿g¸Y¦ÊöV]«îø§ùÄü–®¹ÅµµµÅÅå–åXW™|Ê·\Pæ’“á{;s{‰t¸ÿ€½:ÜYqÏx;ˆ{þJœ“Éˆ;¸³Ç—ˆ±_`àì¼]SS“Ê1Õ¥’`.¤é£ œÕÄ7hq—>nv®’2Bò‹{c$wTaN3ë¦‚©Zˆ!Í»xâŽKdùr€)‹Lßy	öeÝN%é¦žqu>Ÿ'ˆ¸`þJÜf×£§v#^Gwø.Jš‘â0Ÿ{þÿ³Pœ0…dÇÝ;ä2™j47ß½÷TB×rÓ2ÄÜw¡¸» KüiÞ<çTÅ]~qïGÏ“eY¨IEcYÙœÚš”EÚGÛbNKóÐ¬¶Ï®®-MmÆ–‡›Y˜tD÷¬‰;®‚ä‚2DÜÙÕÔ¿ÜÅÅ'ÜEÅ½€øF§çÆÀºÊcN%îõŽ´¡¢ÆíÄÚù|ž,îu‘Hc¦oˆ>åù¥jÏ~jq—qâþå¾ÈvêýdÀÚÅù
 ¶.ÆŽqm´
ØítK÷z š6ë‘ò Ý7ž¿tI¢¸›‘Üh®C­’ËS£©¾ùoÿüÎ?÷·?:dÀÞ.÷ÕT‚ªIw™“2Àl;z WÊj§ŒŠ‚qNø[ü-Í2Xûê4¶OÞê{4uÅzzÆ6ûWæVÛhzØÏ¯³ñßê×éZ[›ÎPÜAÚáqqÿ"î¼wA¥;pç%eðÀl¦‚¸ó;ÜÌM%ww0Jø†áõA&{z½ënƒânÄ¶.ÅØ‰¸ùn…Ò´ø¸½ »Éâî˜wTe˜ß8U6#îÂ%OÜïïË¹
™C¡©ã–_â¯9Øaoç‘#î!») CÒÑ ˆˆ;!Y|E2ãyåƒqï…P›ÌXÊ½&Ú}½¦Rã‰Æ™+LÀ[ØÜy]îø
Ó'Ó)WÂ8+Tq—ƒ&ÞØmÉc4*ËÙ©ö&5)£¢T*,+#þv$“]–V]GGž¥¢ßÒ±µÜŒPsÏdÏ(„4·L.-ÍÍÍN<[âþí<âNî?eÄýM@\Üñí¥.r«©q¯4—k®÷Œ‡½ëzTb´öPqâþZH ª$:#·æwãRÅî}ÜÀ=4c¢P‘PóLagšFHìT¨¸£}ÙBî÷¿~üQu.#ƒlvïwGBÞŽ‰)ân³#eB-\—.îA=’z¦÷Æø:¼[ÚQ[„¹Ât¬¸ÿBÂjê—%OÊ´léTq—?)3Ñ"ËŸæ··­ŽÅÆb±¹Øj),¦yKMÊ¨(PWçÄÄàXO3’‡æÉ‰Š<ÊùoM®Á3®¥@{`óèh{óèdWÅÙEe°³3€¶3€·“ÍT|4•½¾”ëí8)Ãu¸¼WÊ÷Ìñ¥?#îÄÛáöÜ_ .¾p‘x{-xû‹ÏF^ï÷Þ8çqS4*f›ÌE
¹àø†6_ÏgÜþ•°þ›y‹àò¦$qÑ('î‘¡¡¤‰FE¡5ç««qÄQaMqÇ³òåç2È)îe	¹C@fŸXºDÄ9ÜŽc&ä\ä$Í4R®¨qOê‘B±ŽÃ§ž‚ÄÝeôùÂV#¬rk|ÑÞ…‘;W	ù­ì¬w„é£§µšªŠ»Td‹»n‹.±³·ô¬NÎÝžê·8–VfX6xkdtô´wg¡B¸«(ÝàÔÔlúåÒöaÿØ`ÞGpVt,µ @êCÓ1‹¬Ú.ìp'âþ†˜·×áþ»dàNîße½ýû¤Ræoó&ÜÁÛ’p'›©øD*[Údi»Fó\%hä9Ï@/¨¢'èºíTiŠ.hÃPàUÐ*ñ0;ANRù²2´pÜþKNØ9wçÁñk0q#GÜã‘À«˜€-JtS¨(La[„ù ÷v3¯x‰¸Ÿ?TDŠ¸——Ë™GxHÄ½dY™[:¼Ïa;FR#Êƒ÷xÐ€”>`ÞOx9ÎÜz¤TôÁNÖÛ%¸{yùå=’hgê\˜ñU¦®WÖVß|÷gLXæš åÎ5BþäÃtA¢RÑ¶	wUÝe ‰W9YRi_^œÛšêxµ¥vmô”]j§ŒŠ‚©pn.ö,#9 ›zæ¦:Úzg±§guv%Fùw¡·“w2pçwA2ÞNîoÜ³Ž¦²ÞŽÅîx3Fîð•LÛÁÙ³Åýrg-VHO¯Çãñ7¬TI*eUÅ‰;/+£7´¹ãva» ®-á½ »º:IâÞ
eÄÝM†Ébopº|ó½µ,îÚõi‚,BÜ}3HVq/eÈ2"¢^ÐÕùd½¾9VÜ¡i
)Úš¨'ï§˜¸‡¬H±Ðë7
ˆ{y°7*3†pÊfr§*;5ÐŒZû>3rçÖSI%äÑÈ;š
œáÀ}±¿Bwù#îÎžÒe›ç6'D} õö$*žK¶#¨â®¢$ÀŸ]#~$í«±1à¶Ž?joºfÙG>éìè,üÃ:Å‰»ðöÒ?åÜ¹ÛK.6pÇâþûDÜqR&«
ò*˜;|¹€µ'î W'^ŽéôMôéÿˆ;RU¤¸¿V_ïÈ$èì¡mZÏoD*;þ¡ÐæwÅÝa9Øvð†h"R2é‹<;>0âÄ}Ús$îçO.î²Fe•2äþå“}žµKªWÏÏî=qqmO›h¤ S†}?_>NÜãÝH¹Âššò¼â^Y‰¿–g!VfæT×¸;+ká=¸üÜ…÷pÊ]däþ‹ÝB]2ˆ{óÚŠN÷3ˆ¸¯Œ–ªíbi¢ÀQ¤Ž)Ñv«L]MUQ*àÏs«H.Ú''Z!væä?‰›KK³KkíÅ†åoÏÎÝ¶œ¸göRŠ»ÈÑTðöo?pÿˆ;öö0GSÉÍÔì„;l¦rw—Xq¯eaÅÀæðÅ~P‚}H*é .FÜ16â_OÕÛCúlå„q»T¤‹{$idÅ=ž0: ±Ï€Š‚ÚXHÀrjŽ¸WJ÷r"îv$OöKr§éÿytxpRS?€/Ç±Ÿa÷^öv¡¸ŒCJªg¡’õXÜ°¸×çHk‘r±ÔˆŠ;À›¸^3’wgÑ¶jü²æE¹¿)w¼žŠÍ4B~²[ R¶„»*î²P‘]×4‡N=¼Œ­½ º²%ñ	wB«ºšª¢ pL>oÌóTº3ÒúMŸ—ok†4¢îìVS¿	àÝTöfêoC£'î¬¶cqÿƒqÿKwâíß%ÞÎˆûÙwìíorÞž»™JîW°°_„/¸NœýuÆÛ/ Œ¹³ð=.Í™}ƒ­®¨“ îðŠ`ä`KBh®fÏfÍîfzJ¤ ÷{À¤DÉ÷>c"ÎŠ{Àh‹FãÑªØBõ_ÊS[Ët°Ó¬¸_&{©•Yd„£<îmrFe¾&âþ¨xqÿÒ°»{(nêÒU}?,a»‘ººlq'ó÷HÚ¬U”ö&°¸‹_N&ÓR0æ§‚Kü´L^qåy s]+³¸ØÑFo¥¯W£é×0#w6,óÖ5®Y†œOÅUâ]2‰{Ûˆ*î2ÑÔšõá´¬•äøú„³LS±¢ÆùSüÿ€2ÅÐEò1š³ZÑÚZÖÚ±åG%`Òò4Å]¼
ò2pwðvqqÿqVÂý&áÎÜ1DÜ÷«ââÎâu´g.î„ÄŒÝªgX¯E,z“UK¢ÙlÅ €«À3/™k>ä-œØïÞ“(îHÊ°¸B°›ªGÅá2¤RóµžuœNÜe¸?Ø/:äNbí;»{‘½¢.ÝÔ…ìÂM#Ða¡¸G¡~HIh§ãÇ‹{ÔEé‘‚1+¥‹;Ã€]æ]Ù°¡ÛWY™Jin„Ç5LÊýgï€¸_»æÎ¹
Þ.špäê‚ìÙüL÷3HÊXšOl[9ÑEÉ;'Õ7ÇÊÔÕTå¡›XYéškFrAöÄúù§VfoMÝkA¥`L)âþãÅý¯…âÎDÜÙyûO÷· Üá	w¶¾›{®¸_wŒgÜm²›(ºhqo<…¸ÇÓ3<8–¡´‚Lx­%¿Ì}…»Æy$óÒÅ=Š7²â	êãFwÑÝàÖà|jÞSíÙ`âÁÔ©ÄÝkE2žN->ä®×ëµíOƒ¶ßƒßiíõ}ø*EÔ	Yî$êó‰{C¨›FJ‚6âÔ’R4v_‰Ê¼÷•·XÆl´¹ÆaÍÛÓYíz/W¾xÜóˆûG‡OeàŽÖº*Tq?qßF§¢}q³Cw²‡w.¢ÒâäýÔ«©*Š@wgÑï_õÓ²dFÛÛGý‹±M?L?çnó·”ìR†<Ò.Þâþ€óíü€;wa‡;¬¦Š{û‘¸¿½=Óáþ§Â¤3p¿rõ—pgµ$Ü¯ð
'îDkP23°nÖ2êÅˆ{•ˆ¸¿ö1v1BÝz½ÉeÒ3g—´Ì7Yê~ÿáWÒ .ÿù½—%‰;$eæÙ•Ú—!¬w$\†b„cÞë©eÇ‘®öƒÀ0FTÜk²àÞ"çrêýCVrŠw½u:=½±½½½©‡mâ½}Q[—®ê±©x=îBq¯¹²°&üw—owk‘’¡Ý7Ê—X5'âàŸ'Ê3<ñÙe÷ðÂLØèñSÕ>#ó'Wµï1)÷ßÃ]îGW˜à§ÀO><8é‚”õjêèœ³På] )Cˆ¡S±x§˜_æG†Ñ‰¸S¦VÊ¨(ÐÛ—åŠµ·­ŽŒÄb#wüqûíÕvT:&;ÊÎTÜ™ÅTØLÅÞNîdàž¯Ãý¯x•2H*e8qVÊü	ñvn55 •2 î/8}Ü¼¸³#÷cÅýò/¼aµn¬¯›ôELÜ«ªˆ¸“1ûk…Å=ž‚6yÊ
êN3¬¥ôŒ(â4ó×_˜]‰âî0XÜ¡¬$H¿ö¨uyçÇ=)vÖ5¯-` ë;|7•ˆ{Ì[|´|¢¶¿»½½ƒgçëâNÃK&¿DÙÓ‰x êYövˆªŸ€Çàê"<ä€íFXæ9qÀhGÊÂ0TßP@ÜãÝ4R2&ï9˜²¿„ù5†lq?ÏÎÛa
OÄý¥—Î-PH>ÁûtÐã¯­†p“W,ó­£‘û§»‡WSìí%÷–µØ”N÷3hqïXDÅÓì¿Õ_ÔšhëlÛ‰ü¢LM¸«(gL&k_¹Õålå÷È8û;ïŒ´ R2×z†âþMàÄâ.Ò™}4Ä—¸ÿ@x4õãÿÆ$ÝCÑ>°s‡1NF¸
’'î7‰ûox!èv‡¡Ý
"Ožö-VÜCf«É¬Õêõi#.úÓÒÈìN¸)&ÚqÀÁö‚s-áGß/îñh¼‹{„fâCfT,vojÞ›òL³æc\¼¸{@ÿecg/Hlïíí¥÷†ö¶w@oDÍÝÜm7¸ÒvŠ™µCX$ÆØv¤‰:|-dêDØ¹7å÷úÐIY¬µ'#Å}F‹Œvèú%q'Ãvw•ï{]H>Lîõpg¯ç9wœí{/s>õÿ|ê}~xLä9îÃk«#]–Ï*Tq—~Ò¤ÿT	Ù®¢•g³í"3Á·~õAE.Ê`í-Ë#[yšúç'×zhTJÚnëdÎ·ÿÊ“aa’2qmÿÞwrÄ'Ü…÷ïg6SÉÀ'eÈÀtA~±ýïÀö6¬–êMÁè¼1mÒj)SÚË÷¹÷ÊáÔ½† }î3ÓÞNø;ªS'Ž%XCq¤ˆ{ÂŠ´f+c]wÀØMé)J«µ&ã¾ÿè@:àðœÙïHwGVS±¸7Øìédwñ’5Ò€gxÜìùjVÜñ‡£øâ^#Žg]Vqï«ê°8ñ¤YDÜµ”Áe‹„˜•Ý!fÖ É'nâ.âé	M]ÈNÒÑÀ„Ü	õF…5kÅ=0d@
†²Ë÷Wxâþ
¦“Y^=6Èø;‰cØÏMÊh¼PÍìŠÀÈ\a")w^Äýlº ý]SSŸÁOúª¸ŸAÄ}³ËòfÁG²XšÊ,–¼3÷éæîoU;ÜUGG×H*1=«±;]–|Å5r,ÀŽõ—=qÿU~Ä÷ßÈjªXR†_)C’2oâ;îpç’2_ÜÕ"R¡HÙ»­ÚLrÃIÕqR%âžH ¦¿¢éÔ\÷N›Ö}}¯s±ân´kiD™)Úê2% =o(™œv' ‘‘|pxPÅ=8÷øÒ›O¡†3½ðAÓ°ânŸ×dQ™õCŽË@v©{%ŸAJVq¿xñbU8|…Å2Ìz”¦Ì3C¶¨£¾ÁÁDT8?%ðÄýñ16uÂ#ÂÝHN‰»#a§‘’ÐÛƒÑq²>»MÊNÊ\ºDÄ<#îÄÜË9qçÓkGraõúÂ½½Ì³Æ“3÷óç57q±,¨feep‡»øñ% ÔA™Ñ˜óŸéTq—]S)"îÃ“]Ç´eêöÒÜÈØÚòrl6¯HOËL:³A¸«(€Ö­Iÿ(*1‹Sù÷oMÊQ\3«“OÜ	ŒµuÊ¼Á6Ê`sç{;ž·ÿöv²™ú÷¹	w²™JŽ¦â;öv”ùÏ»HÚÜ½`4ÎÇ‰°-Ô—é™ao01	ŽÊlYÄJ™òù|Æn»»=pRs7$êÀÛË©üQd½ FÉh-k7»ì	fHYïˆÇAùë÷óp Eæ¡NPp€‰yç8q¯ÂÄ‘Æ* ±Ña;+ÓóÕ ÷÷1Äi™|TòÐð©›‘\hï†.^¹r¿gqØîÞ½k¶om¶DÚd¶Z­fƒy&˜ˆb[Ze$ÕÅy„]À½þd7¿Ýƒÿeðv›¢b2ZÓLÆí˜}I”‹»³<‡K‡¹ú¹r~ßÑy€ûCºr»ÜÝ¾¡¡T'´@Â“)< O)˜¸k.¼OFîoeÌý“xI™3I¸·L}PÅ]6²“2ÎÉbãíÇü¢ß4±5²èoi¦Æ?–ÏGæÚ¥³Å½Iw•§s¶•šžØD™®[³K‹-H–ž%q'w˜·ÿœMåVSIP‹ûÇÿq¬àQfëÆŒÕl6ØÝ‰¾+WÀÜ!=ózõ‹q×ðIyá…u2-†™»é„!÷bÄr2H«¥¼LÖtäHè=ìé¼/À^¿³W'IÜG÷H7®²‘
ccÔB
6	ªû†˜)æ@~qÇoWz¼Ï
®"gÆ]»¿’-î¯:¢P_Š}uqc"aLØlÄÚŠ{ñCuqž<z²Íˆ{ÝË™ßUÕ’f¤ÌÌ¾4mÞHDâõÒÄ=jG
Æâú‘¸ââ~I¶ÂRýÂ¸Õíñ\¯„6/O†çàyQçSsÖS?ýðó“uAªâþŒí¦öiþ1¡™¸=²ÚÖÜÜÌ×|ÛFF4Vj‰»Š²ô£Ò²Yqæyœ¹åáÑQ$³g)îlP´]LÜ‹w”ù;”ÜN‚2x3õ'xàNª ¿Ø¦
ú%'ÓÁè•~®§þ&óKaÞ1ï@Ð½ö^ säÄ½zÜŠ¤CÛ#BoÀ–÷xÍˆ;`MÏ˜ºÓÉd2c÷À½{{;%=¯Øì$˜Jm.#*îH ‹{ÑÊÎü¥"°|³nÓV_±m¾jüáÓ°"Nà>ÒÀs€˜¸×ÊézôL„/î@cûÝËu@ƒƒ‰—äƒÄqõˆúÃü®ÎçnÂÅ}ARzS2±a·ƒ¶×K'dF
Æ<^“SHÊ¤cŽ1áoÏçpºÄ]¶‘;2öú:/_q÷°û9Ì3âêûL±Ì?€¸LÊýãs» ñ.HTZVTq—	aF¼«¸qûbþ˜LÓàVÌß6*r¦iB—kîåg¸‹çõQQyªXFÚQ)nnGÍÃ“KSÎÖ|ãöµv$“ƒeÿoÅýÿØ;÷Ø¶Îóë%,Ã¡•9‚%äÒØ@agŽÜ8‰ÁVK·2†®Ã0Úlå"žò&ª ‰¬'‰m©ÕÅ"Eš7	¥„Ô"M]CŠÓÖQx(¼ºŠaà;iâ6Nb'{Ïùxôñ#ÉÃC‰jÏCÚu$!JcZyüú÷þÞïiËM»gˆ£¸kšFæÆQMk¶¸§&ËqY»q‡œw“Ç7a2›Í¸p÷NdaçÃOå!MÜÛü÷aü£¾	m¹âNÜíÑFðŒTLËõb¦*w%0±Ž;´¸ød
Ù²,9q—*êùoý¤ ŸóÚw"îQã ¡&Bí‰´ÑÝâóø#-’©ýLŽËrÄýØ”)‚ÁØ:šºt©•ˆ;¹q¿ñx»øÀî”‘7p§¦²Ônª*î{&î‹ú*JŸ†é *H¯3™kî³$‰õþ’ÊÕÀ½¿ò×·×¶·–Â‹[ÃíbÛ¯Ã[ëè x{¡"Hºòélq?K{;n”yŽ_*•”!÷OÊÜøy™åuƒW}££ùâÞ8NÍ^ÆV‰åhõ9Ê¹"é)WÜ#™‹Ã»<p¼4–¶›Íöë;wÈú#÷èrÅý–iÎ@ÄtÊ g¢sÜ?€É'eF/6¥&µÜz]¶©g;û!á_1yÿS8¢¤Ì„»€¸Ÿà‘(îÍ î’GêŸQõÏEøäºÿ$Î¸s{i³í;ZsÚöÈy•GZTËhG'dEÝ³àÕý1GZÈK
Ý•2Lµ‡OÞÞx(•ÂÒŽÅ§ÜqÈýÆ{·ÿPôøÒ=ùIV¯·„C¤GzÁ÷ïÊoP!Ž¸×Ëêªˆfd¶BÞrk£Û—‚H
=Ô¦ójXFe©_³ J°,mCl½'4Û^W_×AŽ,Q'RWÂëN=R
}|ºNqq?’±ö#xÞŽ;Ü‰¶ƒ·ép‡*HÑÕTÊÛÉñ¥œ„ûM-*VhŽ¹wŒ—›ø¶BÓÅËSÝW§R­9¾™z§<'Ì•¾f€wJp"ƒgç#·šñ,ÄÒ7ïFN.€¸KÄž{qo– î‘&)ãëN0ˆkç‘§½)5§,ˆ»_puqq/~ßSM'î†î¡\q?€·gÈ÷fLÎ%S÷b#õ‚¦Zžcéüƒæº'3q‡åƒÁÐv=½ uÎ~¨ýˆ;énÍw"ïÇø°;Q÷Çð@žûv
Þ¡ÐùTÃ•Ñ‹©Ürª&…o>ÃbdepÊ=sÿ?âíÄ]öjjp#^¶vL/Åãëáx+äêqyYü®ðØ‘#ª¸+G=µ›º!cX¸Ø)¢³!‹¾üKca$‰øXZ,£R3tÄõr}ÙéDÈµ=Ð>¶Þ„²ÔBXWœA)GïÌpÝÞ‰ûK¥Åý9Qqo§ÄeJŠ;÷ÇÅ’Ü9êš¿:55BMÜ/D¯/§à4šrÊV´ó‘òÄÝHýÍÓž´G(¿öùÜ-EÅýSê™Ë­» î4´¸c]7FcŒv3ƒ µ.³§1mJ]1ðç—äŠ{# ´¸ë¾|qˆ¸K€ˆ;õ²fêbo¼Ç=ïñ\çšÁÜÁÛçtµ í~¶ËwØ½®qº¦~XRÜ353àí‚¸3”9j57xµÛ8>222>¦àt/îš'q#$ âþ, +³šªO?o…/Ýg_¶Žõ[­Ë[O¬-®­„Âá¸Å°>ªŠûž%e¦{P¹xÅ¼½?DR`ãýôÈ}­WÚ'PŠ£¦ÜUö“öÅ üÂÇäL`‹û%Ôií,Ü5™Œ{‘’ÁÛ÷MÜÏ
âN´]¸ƒ¶IðvAÜÉñ%¡ò›$áŽ/¸ƒ·SîH&ZƒÉäèÍÎÊL]nâ\“¦ÉhF’Ñ:" ~’ÅÝ·@Ù¤ÝtÁ}÷þ‡r:ÈÒâ‰d’2î˜ÕV$î]ãÈÕh®0Üºqõ²Åç *£äÈý°˜¸“¬áALÜ%™:=S§¹ÇËºv?6àfßþMXC:â>Ù"“Èƒj“‘˜{Qq­'â®\%¤Î`¶ÙÇüÍØtIi8u'#w÷ßâ;÷ª%Ü-3³ðE›÷³gáËøðåüià¥—¬›Éß9¢Šû^‰{}¿Œ
¹|™^²Hô­çƒÄÑ¥~ú¼šrW©Ú·œr\ÙÛÛ»º8ÖÞÙ1P4êÕ9Ð¹…ÿøJÙy{ˆûkââN%ehoÿÎw¾÷loÿGìíyGSñÈ],òþÎÔè¥TÆS0ÝÊ÷V¿©qO”!înOÂÌ°ÔíQ¢íDÜáÉƒïÉ“{åþÎRâ@¾‡o‡Gvdãˆj¢£)M·'eäŠ{W×Ù¨èÄbCÕwwìsÉ¦N»º®{°¸ûç÷ÛÛµ{Ì_·²0ÚXTó˜Fdˆû±RíÃ/¾Ø¹k¼Ã‘‚”;_,âþþNñ»ü«©Þå×ž÷— yD÷=¼›º”íí„ä:å'Á^t:ƒÈÛ+ª«tZFª…‡³MAM¹«ì½ŒHùÖZ2Ù?Pzíuf=Ñveq&ëjVÜI‰;©”!âNM%A™Üû_}ûý›:T¬Î4819½|‘sFM#-îxú;ZÆ\M;_†¸{ìZDÓel¡‰Ýº_Šá‰ø)Hý-	â>4„kÂ»'˜
íJKiüžh4ÁrÅt‡Lyâ(,îºÁH5Ä=’¦M½@üåž$Sÿ(sÌÍÿÞÎ±¯Þ“ß®ùn¿ÈÃ=É ÚG{õ‡¥Å Åý‘+R”ß}|v{ggçöN„¹ƒ¹í­÷oþPâøR0ðUÜkb7Ux²…ncgƒ=®øÌb²zvm¶;ØŠDqf(sï#I©?6PÅ]eßè„ê2:=ÁYØ©.ñØÚèÕë‘Âô,v*hí Ý(ð·—„ˆûË ‰ÊJÒIWÊoÏ$e¾âþOøøÒ÷q¥Œ îÄÛ¿ýµ÷ošÙŠÔ]«cóŽÁ)ËÆaü“ÿ!Ä¶%Óe,”‘iÔ¡Ø´;gZ	â.wîs÷ˆ¿/3p·¡
1ù5£ãÆè¸™oto%q'”w¥£2ð³t âŽ½] 7gòœÈúÙt§Å4]ª¬T”{Ì¼<i“v_{dÝXÛe‹»ß†ö‹’Ä}÷ð›.½£CJò9/î·ï^Ü-–¼C¤RöÀ½×µ¸öš îÀ_`sçÔ¼]DÜUwWp7ÕGrzöÙ]‰Ñ¯/%§w? žÃ›¡UÄ"JÁÛ·‘4V‡ÕJH•š }Í…¤ã]¶öoCÔ«4çÇB=z¤4úÕåÎºw\)ƒ¯¦â„»ÐáâÎy»q‡¤ÌßÓâþÖ[7~Í 
a®w¢´¸ãÉ/¹KO‘˜¤Š;Œ"s¥Œeb-4wv~/Î}xÂ7þ)~w'RRÜ¡ÒÍ‹{[ŒÁ½ìò™MûFSSøÞüÅ¼äzk9â~îœÂâÎtæ(.îgv),î÷$ÏÔ¥Æ5è††ÿX´'wPéo˜Ç=2'1rî:tÐM^Ø•v©â\Tö0Ö‡‚¸?¼;Êaz÷G°Ÿ
‹©
¬¦:ã3Ék¯¾¦ŠûþA¯Õ‹Êb#¯¿}Û‚0AW _¼Ü=	­Ÿ®YjÆè’¨Kª¸«Ô‹«N§•BßÓóžÅüÛåR´wNo‡½HQ‚^=òÎŒµ+™“¡Ü¬ u{	{{1q§îq§Ž/‰WÊ`o‡M­öªØî¨f·²‰°+î¬¤LþŒÞåjs´ÝgŒ™ØÜ«”nqq¿Ÿ÷(É­»œ³÷>c·¸ŸqÏi«3T XÚ‰Ô'¢I]e¸>»V™q÷9XE·Sq	&wÌ¶v‚HQ¤{¢ZžþA11_¬ë"\ÊZ»Ù>ï0éXòÖœžˆùZÈ«V®¸ûìè`Ð5ÞÀ+ù# 'íD×	g¤¸pU‹”ãöv`ga²||ÊýÆÎÚÛK'eP),ñÐæµ7ß€/ÔØÜ±ºŸåÍý	ðöLXæˆÀ£ê&Å#îc½¨œÖº¤˜º¿œ¯Û
éé¸/õþ™^$	Ë°z>U¥6˜M&WVõ%)¡¥@`f{@Ú¯Kkri´ZIôz§Y–àWñ^‹ûÓ<_'GSÁÚzàŽ« GSI‰{Qo‡ÍT>)Ãñks•’ÏÆ” îçˆ¶Ã1 ›tq7yN‚Þõ÷ÿ|ƒr°yúrýÈx«´¢ßû›îRâîŒ¹ñŠªÇÄ"–éb*™akR¾Ñ&n[µG[)Êw_¡‘Z0+•9L‹;õNÊéiqÉ3õ>ÊÓô¼Ç¦XÚ ÒµW‰Ä¹ÃØ“¾¾¾“ÍòÄ=ûƒft0`'/4dR2dÐþg´¶ÓâþÌ3ÏÀ^š0 ÅøŒwÌNôôéÓOþ²2¿½]õ{ÏòµkÏÁ—hlîÏ`îXÜwUÜ÷VÜ7½e%csGêÃ¡Œs[Åe s›jÉè¥þ!zäìÅªë©*ûÉùúöþp/*Hk}¹£ô:mïH†{z‘²°!——×LqÇÞþ]ìíÿÎy{	qûíÜ˜gQ`‘É—/îÀˆ½ûO»±¸Ÿ
‹{$!òùçÜy~·9årëN)qÄ<C‡9¸{…w³Q½ØÔ8Îpãì¦qo(_Ü5~RÖä©‚¸¿ â.kžþQžª‹4èà{´b‘îÿ–Û“NÌq$&ýî¾f 
âcÐaþ¢,q?vI¹0Ð_äˆ;?r¿‹½½ŒÕÔÒAÏW_}N‚¸QÅ]Y¨Iõ*ƒÞåúo³ˆg5Yrª8L… BÙòÐï’šrŸÎö5+£²ÏLÇÒ{½£çIÞ–(¾ÓýcÛá¤8ÎYØ×ï—¸ýéÌñ%Éâþ™÷¿¡îÿ’=pÿ¾P)C¼$e@Üß_°iQ5ÐMŒ
ƒˆ·ãóûåŠû	ZÜOæ ¥‰ù$"¹~ä¾ù±äZg1q¿~'_Ù	œ¹ûðÀ¦Û,[Y¤Ý—ºQ#Ÿ™kqoÍ÷†òÄøKeû ª3q—(êÔk»4(ãR°c‡‹ô7î}'0rÅh÷
Ô¢‚aJ²¸ÃGý9x;÷cH!>¼Ø‰œ>}Ž¹¿¿ó Ê÷ÞÀ‹‚¸¿‘#î8,_ØñÄƒ×vUÜ€Ž˜Ì 2˜ÉÙhk“wH`Ñ™¥[Ù±ƒ0’Fp¥^M¹«ÔÛ–žøââz_»Ãh§+#à¬%¾8ŒgéÅo°®V]ë¤<Á¥ÎÎÒ‡:öGÜa1õ‰L$^Løˆ;©‚»š*2pçÄÜÿ¡`RæíüçÞõ$¶:j£bân+Çý%ˆ{Kdž÷¼‰»çvôügqàý¥Å}7æIh«0®LŒ§GÌˆ5WCÜ•œ¸#F4ã.Naqoé6K/¢êRùHVH´:´³:3èãwqÉÞmöK¥Y¶¸c|tP`çG8sçî§N*CÜ2Å(µ›JÄýáí»}çÎ5j~ú.ÜÒÇ—ˆ¸—<•zíÍW³GîÏB%df?U÷½÷U$çpŽql Ëf§DËYÍºÛX—ÅRPrÆ^w•blqy¬³~zÆì	ÍmÆAò"Ck{ÇvhÉZ$-c]²ô"ùè½Á ·GZÈ¦'iÝŒ]kÊj;-îØÛqNæ‰üÍT¼šJº ±·w!)CWÊ€·KdàNŽ/á;÷¿û³H¬:žÇL¦2î˜sÀè +GÜ¿úÕ]uo¦µÝ“6ˆÚdÆxˆþAÜK#®õ·Œ¹¶N‹ûÛÝ¶;p¯vðòø•ñTjB‡˜‰T«Ì¨L#ÐÄY; ¬¸ÇšKˆûQL®º·Q—S]¢ùtY¦.Ž2Önp¤'Ò6FÇ0öt:)«çÃT™7T&î6t`ÐBX¦áq~9U€ÿ1÷S§¾ô%ìö— JûC0wøÚtúÉ…ÛxàÎQ»ó—/òâ.˜ûkd?fîÔ~*Ý+¨½2ŠµAvZt¶r¼=¬ÏÏ%ÿt¬‘Oçê”rg7³~×¡¾Tö›vœ`·n–‡9_Yï¡²]‹ÃK,² bQÃ+K••½$qß\vm„¶ëjFÜI¥ÝáŽîÄÛÿ–ª‚¤¼ˆ;åíx5õm¸ÿ¬¹mhÁ\%¥Kå‰{*¦•%î@fìN%<‰.Fü¬<íGœÒ7õ?æùäÖB	qøúª6p7§ì“£—Í1Ý­•ˆûi@yqŸìƒŸ	âN8äŠ»ÇTÎ<]TÓ•÷v–aXJOÝaw{b€Çí>Ù\TÜæ
ÄÝoCÝÜHCÃcÀ#<àíÅÅ]xó±ÑA¤Ÿe‹ûÃ;ðµháÖÑÕÔ‰¸ß+KÜÙÕÿ}ýÅß|“J¹Sâ¨â®$â—‹úË÷=6±XÖÊÉ{ÙÝõÔ:Â¬I$nU0©ÔçÚ9_Ž»¼´+Ç9‘_ã>Äj¥¿nu[Ç*óvËÒX{ç@ûXIÀ9XE®­úÚ÷7(qÇÞâÎeÄŽ/ý·Ðáž½™Š“29	÷·!âÎÜÛªÒœi<OÜ5ÝLâÞÇw€ƒ¶g8“#îŠ»ºÝ/ Y~â.™ÉÿäLÜÏPâÞævñ÷néÌ‘‹ÉwÅ<™Òtë°¸Ë¤8·â®µû‰¸‹r4~âž¥·/¼ â^ÄÓ«A5dÔ‹ÙÌÌî_2	ßî¬.·ÑâNÿŽµ”ÁîûMè ¡µ_nxìøñã{/$îXÛ…¾÷R€{YÞ<Øñ5Þ½ýàA©ãKÄÛ¥$eÂ¿|%[Ü¿QLÜ¿Â¡ŠûÞÔ¸o¥;Âý·YBÄÛ¥“tŠ5ÄKNìô$³m©S}!¨ÔõÓUKåãê‡wöÏ„¶­Y£öÙ@8Š{‘lô–LÓäp\Ò¼=éBúéº?q›OÊ4·h¹Ó¶*1w-î€ßV=qo‰ésîæ|q÷_Ïº©Ïr¸î/*îm°™Êq°ü¹Ê"îžÉ¹ñ¦¨E¬m¼¶ÅŒÜ+w[•M…ª*†´V%Œ±.a¦¼Éz5*%î:H°ƒ©ãrÄý'Š´^þ^÷‡ îÀƒ»‘ðvÙ«©úž ¢ÑoÌ\{åuZÜUÜ÷¿²~If³žÎ«#oò|¡Ï#þŸùEÁTBÙ»QÆ‚¬Ú+£R›Ôœ¢EìÁÐXÝùÅ^¡4Õ:;Û¿6ãêEòñ®®»BÛcç…VV½„Åîö-tòv q'«©-ˆûßeuA
«©|ÂŽ¦ÒI"î°š
wN´žu/ànô
±ùòÄ=5¡EÑ&"ÅÅ„Tº¸÷MpÆÎ?Šó	þ¸,>O»‹Š{Ÿ?r˜£¯»K‹ÖPÑv¯¹Û8Øâ;etƒ©ªˆ»GIqguv£|q„‰{¥uxV–1˜í&çé¶˜›—î¾»Én³Ù&àÕ¹§âî1£…áJƒq?váJª:ŸÒw¹ßî2VSõ¿úyÎžÔ¯ÂK×®½B‹ûª¸×†¸wÎ°H"x¶GglÀÄ¼} ?¹¹LnuˆTXw„ßÎe¿ÄC"ªR½Á¤RCt¬x‘(½áakˆûõ²4Ý9œ9«i;r­ôOÏZ³\½¨l|¬.iA–µ:¥Å=GÚ9„NÜù2/îtä«@æj*¸¸ƒ·ÿ5pë‚„„ûßå¼ÄýÙ£ã¤©B'd®¸Ÿót•á°'O ¢âÞñùÓ:$J‚w®&œ£û^Ž ‹>°¶ÓÜZÀÚ^HÜÝþH·œê³3:¡å“ˆú'§R—A¶™«²*eˆ»cqN0H9XÃ#CÜ)sq7v•éé{‚9‹uû=i‡Ý‘ö´4ãýÒ¿ÇO7É¬ÓêNˆ;ÇŸØÄ±¶‘C î„Ç)m oÀæÕ26ª2‰·c E¯¦¸÷þâ”‚±Îÿ¹ö_ßû'î¯Ãv*µºÛ+_Îñv*î•¾¢6¹+D=%Ó,’†w–6”UüÖåüKKÓ›3«¾æÂé\_žÍßÆs"žU+uU*zêSžW_	*µÃÀ
*@0p"À»±²è+¼~j	­ä|Þ’âî]lï€<ýj¿bÖ..îÄÛaàNwA‚¶“NàMÑ{É.H"îØÛÿ•tAâ„;ðì—¿|ôhŸoÒŒ*Ä01>Ú”áô¹sœ¸GåLì[nãÙÕ!Ø5MØmL¡¥Ø>NÜ9?Â×}01÷òDþºG|)õLfàî‹ôñµ2–e+¹ë®j¢ãÐâ5å”A6ð?.jïùo=tè)~;U£‰Ì#%DéxäÏe¦W¼œŽÂw¸‡#³±Ù|²äÄ!xî-ÌüB„ÿŸÛç÷ñ›§¤¦™‚¼h»@€·«‰¸‹ñG'îH;8z¨7vþe‘”°ssxþÄã…™ûÿ³wî1m]yç?¤í ýÃ‰I2R@ ±ƒØiväÝY©Q£Ýv´jw‡hÛí¬:ÙnÕÎl=k{ýKÐƒ.Ì&¤Ä˜øARA:’‰QìðÔ		;eÒm:­¶µR*›&iúÈcöwîñåœƒïµ¯ík0³÷5X€émûá×ïùþk}É~~Š;õö]ÊânïDÑ¥îßÿÊ+‹Í]÷?ÆâÎ™ûŸðßÖˆ»>t×6Þ¹XX…»e‚æÔyzæÁÙ)ƒ“§:+xæ¼t™Ì«fÖRAÑ³2:eDO)ÑMë:¼-ïR$r¡§‚§sÆ‹rÃ{Î.µoŒ¸?Î‹»ÌÀýEœ”!»—¸;—”y“nM%]Š	w,î¿Àâ^Ãàó¸‹v×ÀÑj–ž€¸™Îg‡(/îT”Â~AÉºFct#'¥.>~‡ððŽtî©ñ÷þX}Zbñ€/‚„»øî`íðvƒÓ±&)CÌô1@NÜå¸»”væš”Å½…ˆ;¡&ÓÜ%Ë­‹;xMßXñ(ª'ÖÀÃI·
q—ü]#qw¡M†ÛÙÚº#‰;…Š;?vÞ@-äÑ^iÉÃ|îÄÛ•¶¦òÖ„+o qßGîät*¹ËŠ; ‹û:.N=9¨6 Âê*Ï#‘‰µNÞ7Ó‘iSôT+»né#îsH5ã#z•»N™fÜg‘"Âx7*šŽ¥™“íí´Î¹ŽœÂÉ2ÓÝq©³¢ŒÅÜ÷“;ˆ;·5•Ü¡ÄnMo'Ë—~Ä/_bº M¦–¡Qkñbç:!š{u5˜;ž¸ç1LsÇiœ‚#0 (—PÈ\ÔÈŠ;w¬ZûCñ%¥aî\ÕgÁô ,ˆv¹`än6¥]G—/JôÈúV¦¸ë[ 7¼¸c”Ä}Ïžf TJãsx†¶Ê‹{GešvXÜ98q$­eä›£+Ép JÜYqoiÑRÜ+f´¹0Z«ˆ¶KâŽß’Yqã0wÌ‰.¤%·èÑTêíò]ù–¸Û»—þçÀƒÏcs'#wIÜ]Ü7ˆ6VÜG:ì“¼z{fqíàodbÉ°°¦ þ¢ø¨AföW9Ÿ‡Ô\°èâ®SŽTZDJØ&:ŠÖö©K'‰y«ø…™'97?hôU¬»¸£(îÐ£©¬¸swZ)Ãz;$e¤;wêí îR¥Ì·Š­¸­æâ[!‰¸ƒ¹ïÑBÜa¼ÓuJOÄn9q¿£†‡’ÛÓ÷À·¡Œ1û|¾Ø¨ßáîwp7õÃ:îtÕŠwóÀòª´sâN ²®(î{Dá’Š{œh:±t9qoÇdw_ÒZ>Ú _ƒÅˆ;]Á”—¸Ó]hs)w|!V‰c'ˆlZÜ¥x; ÞŽ/rüþWß2#¹{?šÊÜET&Üyè*ûàí}??pð wv“¢¸£‹ûúÔ¸Û‘:ø¡9	ÊxO®-i_@òÎñùYxY9cGª™bŒ¿Mw²¡òÔ‚²¸/EŠwûÂä\»¥Ð-N³§¼ÐJYú“©TÛi¡†M•N¦‚·“íKœ·óIðv:pgO¦’£©Òò%ÞÛAÜIR&])Süjn$Í‚Ý2ý6‡£(«VÕ"ø„js>âÞÌ÷†Ðh*å2+~±TŒ>úQL:4ë¿M¹sû 7ªpÓÃ©Ü!âóÅ[ñ™[›ÛŠ¼ ¿RžÞÓ‰ÚVÜi«fìUÖÜ[GÉ¸o©Å”\Ü=¦­,- wo÷ŽÆm@#/îMMÒ¾Sç±¡òÀ:«s÷Ù1ÊB‹‡ðE¿Ãx~§œ¶×aòØ¦št Í…-i¨…K ƒwúË&µó¿ŒÂ¯§U>mEÚ±&àNÌ½.H;¯^W>zû¯^Ø·ŒÜIV†3w’r'æÐå©ì&Pwý|ªÖ‹SÙ¥ã…ì^:eG@”l`TµÌitYp_va˜w¤ž…½R§±\<–%)ÓQTTÆ;u¨G1ç22›Ëúg'Ç,_²ü!Šûßˆ	w^ÜÉÀý×RÈN&‘<r+Eƒ-ut¯(î@³oº8q÷Z³…QÌ£Fyqûoç‰$ö•Åc4ùÂ	“¸³J(zý’í¸ÓæO´¶íB¼Ýâžb
dòw@2÷†²÷þPK½&ân2i"îð"HºÍh3!øCÕµ»víqÇæN&íÜqëµâ.¾[¼œÚ=×›J÷\GSiÂ=ÎË™û{oC!À/èâ^¾mÀŒJià»aÉà»‚çÔ1¤LG{%»o	†Év&£A@!;˜,z!¤N¹Ð9çE%!êë)àJ´ëûâÉuwÈ· í4'C;Ü¹„{ö¤ÌK4)ƒ—/ñ]TÜù.ÈÕ“©jX›H8S¶¢rîÉp8¶×€Ùëtç!î%¹$Ôæ©—÷`×íBqÇ•5Íè˜¡!é°,h{Q¸NŒ¹ŽZL[A!´bxaçÉ»×ÊPò¨I¾ˆiöÝÌäŠ{c£\TCrñðcÂ°°ÁQÛbÅ4—¶CÕôý¬·×qÐ÷å"à<mC›	è
]ÆmR[à:–&îÜ±íbÇû·â¯Ÿ¢â·‡OÛ¤_æ®”‘÷ÛkîÞk¬¸×~ûwœ•yžfe¸bjîlZF,„„œ».î%wË<Rƒ0ÉúÎÛp¬oM¼7»;L±Þa‰`qgg	åA¤S¹ë”!°c©Œ/Í_ÉvªÔ+QUaŸï,q§ÞwÒù";pžÜÁÛŸÌè‚$â•2rI’p§I2Í<J¸5?í(FˆººzÏ£îydeºœâžk“?¦ îqÛÍð•ULÞ³Š{ ˆB Úšˆ{ÿX×4tè½IóôrÆ˜=«ºgŠ;Ü±¸-©¸;¹9úniðNÅ½IwÌî´´SDq¯Á|u#Ü.—Ë?à	mM‹;jö]F¨¸cLF9q¯ÔŠ{ƒøB‰m.s\øÇ¾¶Vôô-"éË”ˆ;ÙÐÄˆ;|^ÚêÃ¿Fê~‹¸?P×™)îÑË×XoïøèÉ'ž q'Y™ƒtäÎ˜ûˆ¹qtq_ÿýKHQîpiß‚(ð>–áêÐÁkÎÙQ7W%yåÁì0ót:õA§L°@Ls¼Ks#–‡bgU–L;UnâNƒ2dàN¼ý@Æò%ÖÛ¡ÃýéÀˆ;S)Cº ÁÛ¦Õ wŽ¡˜ÇQ¤âM¿ŽÅ½Ñã(PÜãIÏ¨[@Y°õ;ë³ˆûí5/Ê^ïÈ"î¾X,òÁSÒÛØ¨ctyû«ÇðäO´V±Áß,(ˆ;®”Áo—RÜm£VÜ›°”ãK[×ˆ»¤îe*îþãA',U‚ØwçÚë-îôÔß+V´©p¯ÄXÝ!/C.ÒÕì;/îÀ®]ä†Ã)mžìýŒ Œº­©2wÖÒ>xìIbîûÈÈt¹ÿ5–ÁÞ./î€.îë•YDjèàkØ£xtáU¢o1§m·±ï@è¯ýêá–È´uêYrk•Vt/‚¶Wäb8¢r©“0¿iÄ/_¢]/‘„û³4á.y;/îtàÎˆ»¨WðºŸsº8?5§†ê½;ƒ]…‰{²Ëá°	9²5Œ¸7°âîtÈË9½§äõ·ÝNeq‡"H¨‚L!Aït=1à4lÿÏiøl½¯)î†f ¦î¥wsHRpFÜá6CÜiµÌVq‡§¼¸œËÕ{áû¬©ÑNÜá®q¸Ãk¾âÂNn¤GÄüÚTXW†ðñÈº«wòÿŠ0£VÍÏ¦Ù» î°'³­Ò}í£Ç~˜EÜœâþ]]ÜK]ã®~ÿÒk=‹ÜÚS‚eR@9ˆrñÚI48Âæã£(:ô»NYÒyÁK*µ&Ýƒ‘“–\_s¸³¢óÜ’Ê/9Ñ·âÞþµâNKÜ9qf¸ÿ»|‰–¸s]$)Ã‹;)áë·U2QÅÝU¸{Êp:PŸ!îuéŒ»ûftO £8qŒA7Â-E#,/' Ù.–Xw%ò÷VYq‡*÷e•ÁÎw@NÜ"îøƒŒ¸·´lìÄÝìwÁáémø»ÿ~½fâ^Ÿ)îF•âÎC'î€ÇŒ6O£ØKÅ@Åþ’Äô~ˆ;a9¥És}H½½à£©àí—¯	4Fé½òÛÇ~(‰ûùŠûwô‰ûú‰ûÈbÞË—Ú." ûÿ9ÕÔ°ŸéãZd&!©¼”ßrFw²dxV»»}p2r©½2‡9÷ÌMÎœìžT)%ÞùžÊR¶¸‹ÎŽoh©Œ4oÄ
wR)ó>áN¼ýnàþD†·Ó£©´Ãñvz2•Ü!šLÅ]–­&cÈSÄ1U¡ÿuƒ‚¸6·YIÜ˜ [Í/FFÜç'îŸËp¿ä >kÀ);t'†×K	‚ÍaÖÀpŽ×¶Ö¶VýÇ˜!ëÙe°uumÏ÷j yáõ~•.'#î»wKâæN}”},¾i¶õUqo6*"Xm6Çt¨¦ mÇ¾M.NªÙ?ñ¬Ùž*š;wr7Oqoà‚¢ÄÍEohçÎ½Í`î"µ{"{ˆ»ãª™ô‚U˜·ï‚Q;ùx3èEZð…ÒÑTõ]ã×®]¾EiÆ/_ùà¥§cÍýÀ¼¹¿¸Z,ã© wfæÎ6¹‹7z“»&TrâîE*Xª`Y@À"ÿ9ÏGÕ|š¶ÍW0L¡¼`÷È´éâ®S6ôL ­Ÿ<ß“ûäugdEÎD¼H%Ñ3–RÏÛÿˆÙ™JÄýÛÐI¼]VÜé¼Äý >šª´|IŠ¸³•2¼¸ÿ”ˆû/¤;¾iÂÈ‹û÷è¤ŠØÅTÝè”‹Ê˜{S9q7aÀwb§ÍjÁ„aµ â^¢¸‡SA%qoð™â$˜­føøë	Ck«ÄÝ6öª4f‡u4ÙHO*%˜ˆ;÷’žMlöh*m?q§æ¾'0º6*Ø\+c£ž»Š\9jÅBÅÂÔ˜ îJ;šB+6-¦Ÿßùú‹[wï?x°ªµwo}ýyI.‘8\ÛÀÜ1ÍÒ:6üáIÃÌ–tF>Àå²u!-¸[èÀŠû•w¯\]õ¶î+ï¿ùÒKO?ÍÜÉ&8ŸJÌ]^Ü¥‘»$îd*AŸ¹k_|>lG¹±Ïqeí¢!œâ[¤ó=×v±{˜µ”=ÌjÓ¯r¡oniƒ7ÒS‘‹xºãÜ ÂØ‘ZìSë/îç%î|$w4õ¹´·Ëˆ;ñvfùwxÍ%î€±psï=ŒÅÝ-Û>á·ÉÕAš _8î™¶ªÙcT÷ ˆ{AÜ´Nœ.Eq‡M®+²ZÍšœó,·Öõ›Q×‘*­ÄýpoiÅ=.i;+î€¢¸7í€òÔÄRæðv÷JÐgò™ÒßòVR»N¹xq‡«Qkq£©i7*œÛ_õÍ}âë„ßÃ‹øö÷÷î>Dš#Lû 0µ­ºYÄPM043â¾³>
ºŽ/¸d€¸iAú©*/_Êy4µããÿ½L/Ðk¿üŒ(îÄÜI¯ÌÏuq/Sq?åE¹á»-"àáy[Æ"ÕÜŒŸg'î“~uS^,³S¡£S.œ\ÒÈÛÏ´ç˜íŸŸ9×na{¡Ô6Bòùž‘Î¶¶wšpç“2/o§Inàž™pÿKš”Áâþ_bRøU.qo|cŽâÄ]}»	ˆ%ý6³ª¤rØÄŠ;•	ºqNÿ…_óÂíTœ¸Æp/^šjÓbi§s Ä=áÇ¡¢×
wÆàw*%Ž8¹fxqÇ¤{Ú3'îMœ¸‹õ£õÇ:0š˜Q-ÄÛë MÄ½³z=j%î@ Kº…LÙ~q”‡ê»ÈÝ›%H¹‹ân¨æ MÇË™Ä¨Ì1D#zûÎXÜ5V-×/Ñ{Þ]¿ù‡w©uEß{óågÀÜÙ¬ˆ;ÉÊìg!uqß ÚXÏ½¤f<8ËMí@À!~j©â<ó¥Ïp\óµšæ	é}:åC{ÄŽ4 :•ÃÛûÎt cg.Ìæ-îsŒx\˜˜š¸tñ\O[‰;M-JÜIRæ×¸S‡Üs‹;+45Ý{4qXU?ZYÜëâ¶\NƒHçÑ{x‘ñ@\YÜ}b"Ýf4¨69;–h5íÃYU´¸Òâò¥w±ü·
qo”w`#Zel)8rlj!çI5wò95w ôäù÷õÎ—·p.k;¾U¶÷ûÚçe\a,îÕÛ0ÙÅ`Þ±£IÄ§ÍéŒ¯¹J>)£´|‰¸_ûäÝËÝtàþ¾.îå¿°è‚ª	ûs>€É6.(£¶ÊñB%3÷çÆ~³ùÊÇ¡6ú„ô>HòÁrÉ‹ŠÆÞ1‘kÅ)Dd
£›÷‘‰(>|îŒœko« töõuj(îßÆÀÙT9o‡µ© í|¥Ì~œpW.q§Ioÿ'z4ÕD&Ÿ9Ä½…ìt÷¸÷ÚêFùáª`ÍT_G2ª5:ë€‘Š;†‹Ê„
w Á¯…•‚2õ¡^²y©hÇ0¿utÌYÛšð¤¬æÔ‘*‰œâlÏTw¸UoÙã.½¸7ŠRÞDt½&+î ñvLQwŠÉÙ»þÞ¾2¦UŒé|{qÎ²Guõ^=Eü}€_šZ¸Ë?"¼rºWí ý«op€ÇÂk¦µ_¿qïÆ‡·Ö© \„½iÄ˜;ˆ;ËÀÅKÂ]ÛpahSúß@»CÚ\·rvA~!¢Øyõ“w®Úé ôƒŸüòe>+Cw0Ñí©¤X†,O¥æNze€Çpw]ÜK>q¯œC¹ñ²
Q‰;zˆ³î)Y!ÝÞòäó-é§SuÊ‡¶sÇP±x'/)—6ZÚ‡{ú:{”O£ª?jÒ>e_}ï™SäKÏD"s#X;H»L$¶v©Ãõv÷§ÀÛWÅýOÙ¤Ì>vàÞÎÜq¥Û)ów™÷']XÜ·æ÷–´¸›’Ž‚<Õ…Å}‡lrÕìÎ¬•~¿[PßI¦œ¬,=ì*"	íŒ%Ù…¬Œœ5ˆ]š`›~ý°ópb91`ü‡aØ.‰{Nq¯’ØBØE0•XÜ›š%qû ‰¼SqO«ÝÂ”!î¾¤­+f›+Ë(väý8ÓÕ3mšk{TwÞÛµwHÌû9ƒ"_u÷Ï=zG|¡<¸þÙõÏ×KðóNò— x\5³eËöíé³Í îø²ÙàK'èÒlý<Ëœw*îwø.ÈËŸ\¦c¢kï<÷“_’‘;<‹ûóÄÜ±¸sÇ#÷§žqgÍ]êrÇCwf{*E¯–ÑRÜÏØQN9ÅÇwÎ*Î#uDg*8ƒòD˜cŸ‘r×)zŠÎÊxç³ÄdÚNMMNDÎLFu¶ùJºç••ÿ…™C=ÃÃ'#ð‰Ç§NV®›¸“2HÚáNîœ¸ÓûÏÒGS3º ÿ{ûOéò%ÒÏGÅ]ÉÜ	¾éÂ–õ$ îCòwTÖTÀÈD‹×Ž9Ã®"Ä},9í“wc 3kc6©Dëk¯Ÿ=ûZâ-³ù¬ˆû#€JqoåÅYSYâ»u Ñ„îÍÍØÜ±¸‹¬feÄ»™âÎãÖWÛû“Á µãl~œù!5âÞÒ¢¹¸×Éó¤R)¿UIÚ~u÷þ}ÑV3Ýýžt—Õ÷ëÎ7jnÜDšãÖuO—D’PÙŒ/ °~q7Òþhªr$æêÕ5GS»½ãÞ«^‰x/¿÷îsÏ>#÷g˜‘;í•!é¬Œ.îePãL©pŒ)Ö‹gº²Ÿç²¶KH%Ñó•
ª³ˆò¤;Â>#]ÜuÊˆS8Äb·áíYw$Í£‚¼ÞñÙ“i,!–èÒÄää¢öHûºŠ;M¸dÄýIš”aîàírË—ÀÛ©¸ã;&í[»1
â¾ZÎítÙ„BzÊ±¸7É¥ÜÍ·µ(1ˆøˆ!ãîL`¦.è.Fó+õ²âî‹{‚½HP)ähUl…íKo?r´~N¯>¢…¸Wq/m¤¹?Ü´‹;1w^ÜUâ>”4£õÃv:(ŠyéÅnò÷:@xtÚ-ÓöøÅ7÷)@Ý³èû=Iß?‹ßˆýîS¤=þàPÚÜ	R|ªy™·CÄˆ;þÑ’6¤wØ{Ž.ÈO¯]]3pÇ1©‡,zí÷ü/Ï=÷,¹Sq§K˜Ò*÷ÿ¿â^Ùs¦ÍÒßüÆŠ{ÛÊÍ%.CGð4ô®–C
3Äóy'eìº¸ë”+}¸žÏÛ'”¤¹§_íT(öÙ¹¹¹ÎÛ•ó4Š; #î íìÑÔ?—’2]OÓwfàþ÷¤'eDoO‹û_ ÿ
÷ÿn0‰Èˆ{“‚¸×„Ç¦]Ö|åú÷DJÈô¿•¢bÎæÓ1*îl‰vñwÀ:&+îÆðŠGåâ [¿Ëœã—šeÃrÕ‰éé.Á<z¤*/qßañu@ºƒ•è°•ÁÞIÄ›{q'4ePìÐzáN†ê(T¦5wxCÅ¡q¯SæÑ†@ 9ÍÝo~	í2< ¯ ï÷€wÝYó!Òso¹¨½CÒÎQq¯Þ†Å½þQô¬ž6kµ~‰/qW¸úéš{ô7?úä*JsùãŸý8-îìÈ]÷}t“4rÇÇS§dÄýñ?Hq¯i—X½×i©¬Ü8qoŸ@9é8Å:‰o@å>úiy›œ-°Än`ÒÅ]çÿØ;û˜¶Î{óÇ*K	RaŒŒ—\	,¨ª±¬Ùt‘¢ni¯Ò»n­¶¶¾íÖ©Óí–uw«|g{1<,ƒV^&Ò›¤ƒccÊ¨à/%!°»ÜÒnWëM›*Ú¢(ÒsšÜÛ,ªn§û{ÎsÎyžÇ>Ç>>>‡K¨?mbóã8!|üãû|Ûyän<ß>a+R¥sl¬stôB2J¯ò©ló»ŽÍd,µ9Vä2(îTÛ|0ø†¸Soÿ	ñö§¸„ûc´RÄ«”á·¦>!u¸Ó.È_à»œ›¸—ªŠ{5,„—Å½ª/[÷wÕ)uOtÞ(îî˜Ä½ž÷*îûÃÐýbORUÜCm=‰&zÛ3íÉøöŽÆãeûvŸÆÅ—MÇwgÌ·ß'ƒí“r,Uy¹´XÜ‘/Áˆ{-wLueeeu¦²ÞG¢V.)¡­[ÀÔÚ¶3Ö›Ù©µH;§HWÙ¿ðÙé·•“¸kÜ)mÂpTueeª«µÃ‡|oßCU“÷OEçQÜýzãõ›nd>ÂzH÷RÒ=‹©‚cª€<q¯®¯—ÈX2ƒO°·g¸«M^yOw!ðá?WÌ=µXæÇØÜÙ¬ŒÜ©¹s#wr>õÀ£XÜ©ºßóânGw8lÌ¶ ¸ç¬îðãÿkqêÑ¹#î'#¸Ñ…¸H/ceQî0Kdlq/°C¶§Æ{—Îh43ú'–XXšµ÷‚îÇ•üËèü™3c”‰Èø…sš%î_²@ÜŸÕw’”©(¥=7q‡^ˆg½¹)^£•iUó)˜5v‚¦!»¦¸}yõP§‹;ü4Ù3=åÖ{ÒçÌœýÔ¾Õãozòœýµnqß­KÜ;,^Ê‰{+îu•rµ6ux£¯Íƒ¶†¦D…}ËÄ¼VºQ‹Ä}¿t
‡B¡ÉÆhÛtbèÊu‘kØÞÕùTºHåÏ77JBS–<ò±¶*…Ç/Ö‰=3e°SÄ¥*dÂkâÙT?pÏ,î—6Ÿ|ïÃK$(|÷‡šâþ˜ª¸M[Ü'îâŒÝ¦þÕO”wÇVŠ;EÇ¬{ÙÆækÀ+\¬N,È¥óø´pŒØ
‡SlÛFH£Sñ±ó£~­ Î2ÎÀùócKçäÕ	s‘xe!ˆ÷®å+î¤
òJÄýFÜU“2¯ðâÎ—¸¿¬)îàíDÜéÑTe×e)î–Á?RÅ½˜ ™]1PŒ¿Ü–”E;rœ¸ï-+ÙSY©Ö!ä³|Ô¹RAÄ½¡žÐ (	±Ç}ÈDq'…2!	ztºEG[–oû{zNŸmëz³­Ë;xbßn%¬)˜ûï» ª~?Fº …§âÎ²›y-þùµ&ËÅ½Jwœr'ÔÉëð>(ñÈU±Ù·áoî®F;[Õ¾?¹®¢Èvüfmm¯‘~nÒ2øBî…¯9P^Ó oK+¤kô¹¹ÔRsýÞNî,üÞÊ+BvøÜ¸~GFÕÝUƒï‰ÕƒeeÑ&KFîá‰zå/ÖªàïOÉƒµ••ÅðÃ¿•ššA2[iwí­©K¸·|øä“^
8 ¼õ^VqÇ)wš•áÅ­r§âìq·9²$bl¿kËÔÝeËM»Ïùùˆ{ð—
"Ýhlp?ƒ0Ç=+*P.°86f0Ë²¨>Á_[kÏ/3â/j?æçísº}Ñe¶¸™h»âí0oçÅ'Ü¥ˆû·¹÷°2àí|‰ûáG RâŽî°{‰@‹@@Üyo§âºÕèËqâ¾wïƒ{*«£*ÙAÈ+ÊRNhPe0ìiÀFo^â^N )f;”ñé7‹•É~Ÿ[È˜õé‡†P'óZÛoöQDqÿ¢–¸ï¦ŠNUŸ¿|ÄÝâÓ©¤ž»DLÁTQq§à·+Þ{ðº{Ù|/Ò·%}îŽÁ˜]!]ÜyiÞ/#z¶ìëðrÚ!eì $ÕNÅ ãö4;·Ë·®-îìýÒ%qíÇÿªûû§Dâ%n®–§=V<ümøù5Gî¡ªÅ'v îÊ3ãu·)ë—ÔîÙ·¦’ ÌÓO¿·A¬M¸ôÞó?ÍýeMsçÄO¹SR÷/ïPq·éÉÂˆn¿å÷“:ÄýkŽ1èÒIžæ ÊaÌ_È¸Ø®´##gšÕo-Ÿ‡ºÃÖlìÍé¿¥¹ö-÷¯¥&eT¼ýïqgº éÑTÒáÎÜÁÛ¦?Õ'î³SBŽâ¾‹ûX‡éß„/—àµ jR~âž ·(ÍXÁ¸º;æ!ÔÔÕäÌ(îÓ^'r–ì[%{OE@Ü=âž«Áï@øíñ&‹u8)‰{	N­Wq`g—ÄÅJ !A€QÀêDe„ÖþXˆ•[QÎíš,)ºô.vYÓáµ0ØNwü‰£"î)Öm±¸óî¾ò	æ‡vv‹­(îâŸG·5azï¤Ã¼ðÈÀÝñÀ½^OÖÉi™ÀmÝwêíDÜãW>|úé8n=ó]zkóyIÜÁÜ¡òXÂÄOå³2¤Ë}§‹;Õv}FîØšÀŒ½7ÇZP6‹ì$1ˆÐ2çú­;BoˆÃ˜ãŒ7Ä½ÀvÅ&`È¯ÕûRàôdÞ¥ ‚žVÜƒúïÑGÐ¼x±ó¨%âN—/=%Ü5Å¸+âþ+îrÂ½ëU¥«U`ïYÄý@Š¸µæZ¹O÷!“MÒ3Rws'îTÜ+ì5ø¼kOÎ(¸§:2‰»wªIüÎh;+îxŽ¾ÝÅ0â¾Ç˜¸C{½ÕÚî›nïßŸƒ¸ÛYq§ßk¯ü>EÜ‹·¡¸G¯‚Ñoï¢¸ÿ9*Šû²‚•!’R÷êj| â w“þ•¸CKÜUÄóv~ùRdãá'ž¸ÁŸ–—þøÞs/iˆ»ööÔ/îôHj.Žo½¹;¸Ã©Ùu àg‘ÆšgCó†Ž“ZßÄ3î*ˆ{mË¢¡\ËBgŠÿ¶‹ÕOAdœ–µÑñ‘N£	|aaíäÉÎµá–¥á3Ö‰;x»Üù¯àíòÖÔo§&e~NÄý%˜¸ó]‡˜£©¯þÛï±¸,­ú÷ÕÒ¬â^Ï‰ûj®»‡ÜožÅ}²[0UÉzÂå™Ä]L:˜*î5PŸGluÆòNP–õVˆñšò;íÁ#á³'¨·¸ßQ×Ä}w&q·8*ãNöa/Ww²À^MÜVÜË[dq '1yà€š¸g¹¬¸ûiÈ]SÜáš‰â÷ÆkŸðÜ²Ggeðrb!k:!+XqÇµ;²¸×)â^#9<3øT»Ð¸oo\~øá«¾[!ßŸ}î¹—^zþ—?|ËÊðUî$äþ"¹VÄÝåwäfÕÖçe¸‰{v¿èe'm°ò×9¦_JŽ©§„ñB{U˜?ÏOµ]ósóÍù…Û¨µ·»¸›½È¥Žfnn©%×â‘¥EVÚµ­€µË—ØwÐvÑÛ¿#MÅÞ®%îôh*-qAÚ¾Dî´S†._-}k–ª¸SsWv‰]%Ñ\/ÎžŸ/©­>ÐÐ¦bÑ‚S0ªÕCåZâNIxLw¸¬	ÇWœNé¡£ÛÓ‘Xq¯Öû;[}üÜ”LwS0óEŒ$ä»y¨³§¼æ··Ê´ÂÀ½¶¶Å]‚dfê¤¬;Y“I)aÄ³:ˆ¬Å½+-¬ÁÚ­WÜA/9·¦Pg—Uwbî5™Ä]!óT]z“qÝ¼ý‰
w²ßoŠâÞ…¬az’=ßËŠ{uµ2q/7OÜÿ;ËÖÔERî@àê¡‡Þ|ûˆû‘K>û,ˆ;¹óUî´’wlî_—Ìý;ØÜ±ºÓ*w Ì¨;˜{6w/Ú¦ä~±9¬¶P›?7¿c3)ã àÍìHPwZ6®”ñÏ!‘ÂæÔ;‰‰”#ó'›ýüçnlo™™‹#ãÒ‹a\çôß ¿vaQ§¸?€¸³Þþ÷˜o'÷$'Séö%YÜ3{;wii* M}‹»Ø¦\W†EÄý |-ek¸bå ž8qõ;s÷¯î©ƒÄM´KPß-jO8£¸‹µ á~·â.ŠØPÒ‡ï²®E‰ÆÁDFÊn¿ìmu§×E
ð.ãÅÿ ÈGNÝªÜaÕ]ñøãoNrâŽ/eq'1Âñ-1 ð)ânõÙTOÏäžZÝâNaÅ:1£íR;*†\U^IÄ½\§¸´:er‚&eÀLÓ´=ûðýf‰ew@HNÂCJ?“ JþÉ!wh½'!%sö¦~œqù ~45¾ß™”îoo>âÎ›û÷ñÈš;mr'âNÌ]:šnî kî î˜{RÜÁÛeâmÚoÃ=ð¸’GT†½ùÎ ÊÆ°‹IÇ.#a®ˆa-‚tr¡H•düJ©îé‰{Ëµvn;Z0qÒ—žAFÚ-wz4õE9áâŽ½]uk*í”‘îàí?ÄJ™W¥{ùÄ½>£¸c‘Ä=µ]—ÂFËpSs½Ú¹3Áéòóv"TÚYquy‹;³(3<4‚®*oc_8ívÊßTðôŸîHÖ"E‰o§¤5=’«ÛEÜ…1â^‹u.µÅ qçfï%eµð—ÉB¼ë³p°·§ˆ{…+Öw©…TÞœ
˜!î)¯Ðz‰GNÊÜ&¤Ýµ‡ï ðWðéÔ¾dž)0wöa”"‹ñžˆb"î@xE0kýÒ§GSIPfóð¡C—7¼ îîgDq—Rî/Ð‘;/îbÊýEr<Bî¤Xf§‹»ËÏÞ±<“î‡þ÷ÓÝ«6ÃâÎîSÊ>o›aG-)÷q½S»3Eª¬!ƒç‹
˜
ìq_âÛ…\ìEyÓ²æJ_Àº€Œ²4jž¸oÇâÎ'eq'	÷ï‘„;wìíŠ¸ƒ·?C» qÿIÊˆA™ƒ`í`Y9ˆû¬/¬±’Züà‹²i…Ý“Œ­k‹{^òêMØVÜýM‚¾S©¨+î«Nø‘ŸíNÖ‚€Ö×÷ew}âœZ,µâ„"æpAW£RiOw*ïräAKÅÝÛ?[[+ÜË³ˆ»]S…uˆ{Fy›ùâ.Àë@IÊ²è{š¼_ÃDe,c=¬&îÅ +î±ÓÖ/i._Ò>šzå2ˆûæ”¹òä3`îÏ‘”»Ü	âþÏ¢¸“FÈo‰æÎfežRÄ›ûN÷'MÍðåÔŸáWºx•‡ xk0nÇ/‰/û!†“·¸wFPâØ"9w6âÞ¾ ÓÛµ¦¶ ƒDXq÷Ä½À=~8uù»xz!ç¯&½ý*7d”å“f‹;î‚d:eÀÛ©¸ƒ÷—©¸Ó¤ÌÓÌÖTˆ¸“.Èß•“=KP*“ÛÄrêÄ½JwkeÜÉŠ,â^!Feò*…ö¥Š{lÅçÔuï|žÖD2šeö/yÞ<Ûªþ¤¥ë”%â¾zÖcí¦|Å^=da_èŽÖ•ÕõÙÅ]ÆRq‡ÓÒºÅÝvÌäõÛ”¬³wÆß¯OZ,îž„]mâ^Ï‹;TV™À-c]oÿå‘Ã‡mnÄßÆæ“Oâ‘;'îdäþ/ØÜyqs'#÷ îÆçíí‹ó3ãÃÃ#ÃgÎ_lçì]UEmøÀªÃ¦¶pÕînË/ã~1»9/ò¢ÝÛÉìƒ:ý¡]õžŒöŸ$²ÊÂþ¥÷º¸Ï1â>º„"KkÐ(™'ñùQ•§´£ËÈ(p/s÷Gýw²4•=šJÅÜÁÛAÜKßšJ“24âN½]>šú3æhªlíp–Pê|,Nw@YGã±Æ&ÁHsU)¾¤y&ÙK_>Ÿ"î““yÖA
 î2¤bzÅãôè0wçtOk²/9jóa5È+})Ò/HÞŽ¦Nèrv*î’¾K/A•Œm•ÁüfÊâ‰{¢èµ"$#TÕß£.î \™íw[(î“uuµ8?ÍvñÃ…vvHÕN½=ý\*¦£ò7QÍ«Óe=«¸ÛÅÿôÅ÷ÚÝÛjd¾_»â¾ºbeh”<Žð?~Ø™{½,îæüñ7½]|Ræê# î‡777®\…2.ÅÜùFH.äþ-1+ót{*ˆ;5wš•!½2²¹C±Ì£÷®¸«eYlí‹3Ë-ñx÷Šƒ},Í/Õ0w›2·×œ¬ã±»Ã–Ï»É:,çÄýp0÷rMŸ¸3Ejœ@†	0Fâ(ˆ{í]r¤Ÿ±v:ÇõGZy»øÁ#ó~õs³&ˆ»ŠµSm'æNæíüÀ{û7©·«Š;Ÿ”ù©ÚÀtAò2´òwvørÉn§/Æà:Þ,SƒÅ½±C0dÙu¢¸›·ßÞ›•3ìÇ&:W­'Bö!_^wÚ'ƒ©ðxuˆ{ÓPÛJ´4‹u¹É¸§e‚ˆ;’Ž¦*Þ¾k×®½{÷îÚµ³O§‚¦sðâ~lÿL°zsª§M[Ü÷` ó® H{Qv‰ªOÓ´VsB™i9 ˜7¾š¸—7 R)Š¨ï²¸×(â^®öla¥¯Ý£î÷éoSöÜ¼vW$]ÛUíýŽ¢ï×n”€¸Ÿu"ëè	Û%¤ã©d‡*P¯<ë6ç™Ü]êí÷øÆÙ¼zuóòÃ‡žx‚Š;Ÿ•Q¹Sq°¸3æs€¹“™;ñvªî˜íkîÚ2yôÂ\Kð¯Å(26ÓÞ¬òëý.iy“#[M¼#{¶˜}´}‘ùh)ë—Æ¤‹N›š·÷"ã,3™£p8µÀ6Ã6G9¡û´9à	m^DÀü…Þóþ"5Î÷"ÃŒ7›,î?a#îtkª<pÿ)3p™Ü¹åK¤TFZ¾ô|45UÜ‰¹«ˆ»Øã®ÌC=N¤jªîþP)÷ÐºYV ¬L2ÖHW¸Œ{¬»59™g;›“±u‚[ÇÄÝ³K&úJû¢ý^ñ1pzÒ‹Ü]Óò(¾{Œw ®Jâ.’]Ü‰¬Sq,^ÀäìŠÕU©Š{¶ó"ðäM€2l¥t[u÷¼ÉÉ†z±UÚ" .îåw-qa—¡â®À¦¶8W3ólâN'îp‘]Ü'¯ÜeÐ!ï43ÓˆãKQ²AËT(âSvéÂŽ1ioêÔ.ÈO8q×¸äûËåKAßæ!¨„dÌo„¤½2¼¹ã¬¹ïtq·¥¹¤ëØü‚ú.^Tm¤±áŒžÅ¬2îúÅ}”=KG3ŒøÇ.Âú»nl…ˆ{m†ë\Ð€CþmtíÂHåEËR ¡ÀH§£H£Ãqd”óE‰»Òùc&áþº5•ˆûTÜÉÉTvkêÏä­©¯WÄ.ÁÐÕÅ¨‰"î±\‚2Î¦RšÒ3	776+»!´6Úyq§`e'—¡¤Û=½â1MÜc]N<<t”™ôâßò´4Ue“ÐúúiÈäñâN®ƒ¸r÷ÏNu Kñ$Këtˆ{	+î%JH†¼¯Eâ.¸}ÓÉX˜Àé9cânWwü´·Z¸y‰;ÍËè›¸ß¸þ1æ.‹ÎäÌÍU÷S­ÈBš¢€$îHOÂÔˆ;ú¼]ûhê]õ£©}ôÑ•à-ïUwÙÜå¬Ì/i¯ÎÊÐ%LDÜI±¹ïlq·¥¯]š˜f0Ûñ“®ô™»²íæ/m‚JÉ\êƒl<ŽµÍÛrÎºÐ©=Å¿–—·9Ç> q/°ÝX \82‘¹æ‰‰µ¥@ ˆò öŽÈ1RUüç"ÆÅ}bKÅý»TÜIÄ&exq'	wRânXÜ’Þâ=C±u/Þ3Yj²¸{“áòìâ¾?Úrg^‡÷pÓét­‰œšN÷õ•&=šÅ9ždÙñ$ˆŽYkÄý×§}ÈR„ŽXvq/É(îÖLÜwëJ"ºà†9‰{EVqÇæŽ½½´ºŽì-Ó'îvƒâN¤]kâžÖ™¸ö±Ì]ŽTkO³÷Û×±¸G-wa*¬&î$Ž&’ðš´~‰h»®£©ÿCÅÝë»uË·™MÜßàÅýñÏ’¸»\i‘W”™Þsé‹E©¶›9tçÞw>‚²8ÉŠ;Š¯±…Ð:s¼‘ô2HHæCd¢°©Àvæä2Ê…ø9(õÂ@ åG||¾7°AÂ˜_ó)E2ÊB§NqH‡¸Óˆ;)q‡¤Œ²5õq6)£^âžšp'[SÅ¤'î€>qÏåûØžd¸®d×;+¥ânnPF[Ü‰p‘“´ÆñÒÊšPÒ‹|>AÏf¢Æ¶õhél”_7ÅÓtêÄP?’î”½€Nq'¨ˆ;ñöûNuÈê‘{•ÙœÊTÉPj-¸;=­ÓmÑâêâTqq×Õ*CÂWªâ^Y)&Ì°¸äª-q‡K+&î|sdøÊÇ”gï¤V¦Ûâƒâ]&âæNÅÝÔ³©5ÔùpëVpãðaNÜµ·§Rqg!Ÿ’v0} qsÏ$î€…ân½·;:—ãYGnóù€.c‡S×ô­\gøÔKgé¶­rŒÎåë'Gû—
lgüó99xËðÅÑ3-(oZ&:{ñÙÔ–ó®"àŽ¥w^_Æ
e€¿ÄN™¯|¼”Ê°wêíüÑÔÇßy;Sâ®ˆ;ÞšJî îÜÀÄýWRRËG®â^%)9|WßÐÐJrR|†€÷/™%îÞ6E`RÄÝN¯W$:òúˆîuúì ÇGûæ”3¨MC¥‰D¨n61íÖ–Ë•Ù×›ÈãtâóìË £íiHâþšVBŠ©uˆ‘0¨µW)íªTÜ1!ÓW§
¾©D´w!‰5¦¬¸´B&@†²>*S\\I «S˜zÉFµ¼œž{%h‰;EçÄÝŽ¹ñvŠ¶«Ùû]µÙ; Y™¯®ö tðÁ“hª Ä“w“þ‰¸­sùŸ”!âî»âNCîüÈ=žJzehÈ¹“^s‡êI¯wÌC÷¸Ûü6#=‘ãQ!.cäY…#»¸cÞýŸœÑ o†ýeÍŽ ü˜+œM-°½iŽ ýDz{—òðöx$.©õè„x3cÍE8fâÆ?LïðèÉQ¿âþO¯¼øøÃ;Àcï¼ÿîûïð§w¾k@ÜñÀÝ ¸Ç`„¬›éI¸¡¾ðd¨ âŽ¶š€0µëw "¿žsJé®©Xw"È8êucÉ¬âo2dRRÏ›$.ôìË]ÜâÞ„,ÆÛ&†b¶—¸;»áÚZâÔõ #îTy5Ø¦â®kâ.m_ú«/ïz‡ïPYrº	¥ãíð “V”°L}=+î&¯_¢Þ®»’x;DÜ/kŠûÏ?ëâžºh1¢3ç:2Z”‡¹ëÖ0Ÿ]½[üE”á`JrF/Á‘“d$·Aù2Ã(*P`š{más¤¯ªåü"<+&lšŸÿpPÅ8‘åååEW†w))ƒ½oq H+qW’2¯üéƒ?}ðÁûï¾õîûï¶‰Zþó­÷ÿë{\§MÊÈe|¤´}©Ä›;Ø%ãíõ íqçÍSò:sø=+þê:LmÉÊ$|æˆÛy¨¥n§´ÇZól—#ËÑ®lïëqƒßµ‰¶ÐlˆÄŠ4DßÝu¶<–­¯íÓòvƒâþ9Â}Ç-w÷z¨DD6r"ë<U,óTÛ•4üÿ±w¶1]gçCR¤¤À¤-ÄÙ,ØŒ4l£d´«í²ÚFÙ·*Z-ÝmÕíî—•v«¬ìb0¶ŒdÙìÖ†-HZÞS"ìý 6b^L€y©’MPÒ4™4ïQò¡Ò¹I“(Iö9÷Ü{Ï9¾÷ú^s¯=0ëßL<f0ŒÍÀäç‡ÿù?ëð|È^„`v*Ñ	´µ5J$µ—	_ã.­^jwˆ_ ç8hG
®¸ÔbN_Ã¦løÛ(“R‘Òá§
Å£wãáûÛ}Í—µ&Þ®ì5ù*éÞJ¹%þ#Ôç³eý·›OÊ| ‰{¯ïM%+ómÑÜÿQ·WæÏˆ¹Ó¬Ìw˜¬5w©Êý™%L_UÌýN¸÷‰ä~È´ÞîfÌ8ºîÎ¦òs<[Æâ>ÌŠ;*,²ÇÜy¦Ö¶v2é8²L|§q¯qÜ™È£êÐ›Žåã©^¸66¿™.„CWëô‰5ò;ûÄý‘?þ»ÿ^xýõ^øÍv…ãaÉQBÏ¾üëW¾wqÿ{.âþç´Äý— îNiäŽ1wn ‘u»\2‰* E°´Éâ¾<*Ø²WÇ´¸;,ŠûPB÷è¬Gp•è½ð²T¸DÁ\Gr#Ñ±œ˜òÐôŒšàCÄ}Ï›÷3çU"o(î?¢Jì3-îtÚ.¯QíÄ$F‘ýxfgdqÚ÷&#q§YÜá÷uÅÝÁ|óékoZÄ'ªé»þðýýåFÍLÞ¾¤ÙFv†<
©TŸœöœM½¡¸wAqÐá{4ä®#î0r?²¸ßbÅ½›6ÊÐå¤f+mîÃ“W®îÇb‹ƒ~ó=î«2 0É(òÚf^,k';hE8¿ô"ëŒj÷ÇžÍ8ª0©Ýé
ç'›âb·:?¿º96©Ó'0ß‹,NGÌŠûWiT†¬MýËGÁÚa]6¶‹Â¾µ°”~ùå—óë×wù;&ÄñØý{¤RæWJz;iq‡;ñlîœŸšT4ˆÞîBeà›ƒwÔ&íÐìh•Ä=+Ø·9]-îœgÙÑ.'ôÏIâïÇ]BÜáu¾Q,7¾Žèü—Èi¤ýHd¨™Šûy€^çÐþ]VÜéµÛ$~:„*ç©Ææ³•²óÇRF|ˆµS&9Š*ÀH¾•Ô (#wœ:2’¸S;o sçÄ]Rzh^rh‰;ùóâÎ¿ÆYTC¥ÝÏ(ÄÌk £œµëßÕ­3Ÿ½mßÓ’Ïõ#Ù„oNz¤æïfÃžõKª.Hã¤õv$<Ë÷ÊpæþX±¹ÿ5ÙžJv0ÉÇS‘Šeàßñ[HÜ{z¬¬òÇêtˆìÏïúSq¥
»k“‘£æÜ{¸¨2b7Âþ/Õ1ÐÌK•Y`]½¶7µÆñd²€*ÌÂâ~:Ÿ^¬ËÌç§ÁÚ…ÂîÒüNº0QÑçK†âþ +î÷+âþhlÿ`suuKú¹•ÞöûC½(œÂá˜±0âà‡ìÌK¯<öØ/½âþ#.È•Åýq\â~Dqô”™¢ÀïHÎ:KâýŒvTÊ˜wG²ßZìBwç†éÏ‰Ÿ#oÐƒ+ë×Çû.æZÇç¤§9zâîé—:ÜOéŠû)“â~Z%î_¹ô4Ü…Š7¹Ÿ•Å]°qÇ†.R,îpCÙÛ[[›æ†Pðõ5µµáÏZÐvØÀŸ –ÅÝÁyûòu"ª{Cƒ\IetÄø†óˆâN'îô6Ï:p‡Ÿ´ôlÕ øþþLW4«ùe0äF¶áÞ…ZÜmZ¿ô{ã.Hý;¾‹¯]')w–ázeHÊ„e¸Ldäþc"îÄÜ‹Äýëê¨Ì‰Ê¸wLÝEå¡™N^Ü„nf†Z8š»±¸§Ôì›¦˜¸SÒèæÐ»ß]kq¯qì©‡$ZE™ŽÕuG&à¸w:Þ-,¤–æ'c[¥&î=kVïÕBD_ÚÒIÊ iä·b™­¥Â˜?¤ï5¡—©Ð¯ž{ñzN¦–wœp“2àeŠ;Pž¸û’ø¤kGGcËÙ³¶Š;dÈ3ËLŠ 9d]ÜäQ¾]Å¸Gç¢}×[›r^øMÚà®;±>Ã‹;½¦w‚¦¹Ÿ‘ë ¿BøÉ¬UW6¡ˆ{«ñvEÜÉü½QÏÛ©¸'³.d?îÁqwjr´šÆ¨Ž™·³âN¾TÈñT¶ÇÝQBÜÉV‚“Šyùwv:rä? JÜ?ôå(|ÿäýh×øE¤ËÅrÔM~¤*qOö#;Ð]¾ô™ÁÑT a¼Ï_çÅ›ûØ‘;_åÎOUÜ}T1÷‡ˆ¹ î„U]îõÅË“©ó¨L„BF–ÝÚVÿ?.žÏ«Òõõ¦Ä²6wöæ(?Áàoc“µˆ{Àâ6ªq?f÷j@þnÜêÕÌjzóÊÕ«ûû±@O$P§OÆê
¯›÷áÈÀý}} 2±¸³º°;
‹g%)ðÍBÏÁÀ]Þšª#îK%îG÷òÒ§Þ¹68ùz·$îØÛmw÷Š»|›Äˆâ>cî¥0”K$§V­­s#.wÐ+ÝþZã)“âÞ”wÑÙ9qÿ¯'¼U¹‹ÚŽî¬¸K3}q§­2v“MtÂ§ô]wM#f¥Y[Úåáp;Š;€'úGwˆî¾Rsâ¨2ð53×ntìFgàgï„×:»:ú<Ú;dçñT€¶?1_Ãöœ^ÿˆõv#qWÜ1Á7¯Sqg²2?8º¸'XÜÕ;SwRå“·ùqY –éu?O¨Ì½»<q7L©ó½ri>9³v³’2uµ¤L@ÏjU‚ðÂþþÕƒ«‹²Ÿ&#Ý;“Ã‘á€Ñ“÷Å¼Õ€[üJ=jù©‚ŒÄ®ln­B6fk>½´J]1…^ÿ³/þsÑö%9áà.ÈÇÉÑT' Nmà½]}8µS^r—7q—ÔŒDÜÁ¢pö71jC´a×+6Ë+.ëâî0ù¤EÜX¹6×Ò”Üs¡Ñ‹>A·íàý™ê<*¾à8u×]w?…Åýi=ÓyíÀG%ˆY™/•ßÀ„<SãÄÆIüEYÅ$j;[)JZè&›q¯$ÄÏj¸ÀâÎÇËuJ¦:íç(L£]šJqêCk µ)¾kä¶Ò.ÿ¡øryôÃç7ôí\)âí>ø‹ÒÜœ*x¼ö>Ýsò(O¬íY¿D¼]³ÄýUR`î„Þàó`îªWåþ}®W††Ü©¹?B!qXF=r§K˜ð¦“ îüü72†Ê§—[z8°U¢ô<¿¨Ú¡Z_VTfÞX’‡™ÄNM3÷­;}s2îáûkâ^ãØ2°„*ÁØNQ»T}=éZ5&bý`Ên¬Û@Üÿ`82‘ÙÄ	öP~ÆSaë–åùUHÊÈwè‚¤âÎlMÅ•2å‹ûÜPÞ·Ã;È:|qäJ¼ÝqwOE%W1wb73S6ˆ{bÈ óB[‡‚¹ÆË¹7Vö<Ú·ñ¹”ò“KÆ§ï`âþÀ²¸Ýî´,îIÜïþsÐ‡*Œ04'ž6•ZE;‰¸ó'U‰´sâR¯L…&îpØ Öˆà¨LÑ'‡´•§„¸“òBV•ÏÁOü¥ÀÉ´S~Ðl^ÜÕsöÊ· ÈŸ8wÈX»¹á;ëí¿Â_Ûúª<£ËlzÉI?ú9[Äýw¬·—Ÿ”!x±¹«Gî î´òßH•»zä]îÄÜo!qçw/Õ1K²¥L¹¥Õ¿);æÎÞbx¾¬év B6h“B7ƒéáZR¦ÆÉ`ßìÄ¿¡ÐîæÑW@‹»ERWÅ÷žYÜß˜€¨«ké%ÈÅØjQ®øs/IIu$ˆ;9šêtEÜs¾²¼iv¼µU-î3Ð‘hàœ£,q·Î	öIAÃØ	‡®­7öÅ½ûÚ[VÝAYÜ]+ãÍ÷Ÿ<å­Ž¸w¨Å½Ð÷.*îMðÁªžÙ¨´¢€wg	qw–-îÀ1÷™©~æ®²wýÒ™×fð_ÝLU÷lT%î6NÜ¿0Øšú)Fÿh*êÜ¯Ó^­FH¹Sqÿ«[^Üù÷Hô¤”’YI,‰¹š÷Øznâ¾$.…ªc( ÿ„jSÕÙ¬«•AÖ8Ûúä6¾™Ü\Øœ8º·g
6œˆU5Ê¼ûî—¾4<0‘¹²¿9/ž?M¥Û5JpÿêÅWEo/JÊ@£@“2€,îÔÜág“¦¸ãBìOyIôË87A ‚0f®ß¢Ž]›‘åE7ã@‡Ô8Z÷œ—\Œoœ\É&×³øúˆÎ¼}Hy…/ÙÜ|ÖXÜ1çïy@÷3ÚâNÍý|yß}÷ÞQ™j¬`j¡â®„£Z;8s§Pqo„Ï ±W¡;œélÂ?.88qW÷º8Œ&îø¢½HÜe”ãª&ÅÏæ‹»Æ“QzGxqO~,‚m”·w‚îì\æšZ€õQT|9'#îp\µç“áCÕò%@?áÎwA2JæN³2´W†wË`qg³2ß1%îd{êƒ'EÜyo^BG¤w{k1»’ö#CÆ®šË¨M7oxOæ™GØåŠæëÐÍÀaomà^ã8ÙFvŠ# ?_„›‚3Ûad•ùzJÏ»õÝÝð¯qdm~i{z,”ª`|Îå‘MåÄ]NÊHðŒ–¸7èˆ{gCrD(ën\Œ¶ Š·7q·ºÑÜµ—PìE‘qo±(î¾4Ê€Ê˜‰Êx7ÎFg7ÆÇÅ9wÖ«­“Ù  ‡9ºš	DÅÉU"ãÅ
OÄ½™ÂØ;m”¹]÷'Ûï»÷ÞŸg+/`ƒÍÜÄÌÜ‰’«Äî7ž¹ÓeM­¸rU!T[;AÜÕsmNÜÁ€éÄ]¿RM;‹ƒbZÜ²Å½rŽŠ;VwgÎû1ÇóÃwàíDk°Ü¯y,C@ö²·ÌýÈÏbfì9ðpÃÌÑTêí¼¸óæNÅöÊ€¸Ó¬WIªÜé&lî¢¸ãó©J—;'î'gâ^àV†,4¢±iSo.ôfŠÂ2ÝæÅ½'ŒXeÌxÑüW˜G›ÐM`­¾–”©qbØ!ëŒm­B¡í+¯vv‘e¶•ûÀÄb&“ÙÙß™ˆì¤ÇðæÖ
#¸Ÿ}ñ­wHÂwRâ.‰» qW âŽ%žwp²ñr«³ë’¸C ân"î‹âîÙp:Ä;OJct}‡jUŸÏ¢¸;’Y·©}±ÞÙËÑ©•åËSb™ŒÇëÒ~JÂ½T–j¸tK;÷Sìú¥ »¥PÞäü&gdq‡K±PF÷;O?	ã÷û¾|[5Ä=×Œ\^„*†eäZeˆ´Ëâ/ÀõÉÞ£ž
¶Ìã¼VS»^F´vìØ îæ<Úh9¼¦¸«0ÁhJÜÕ·`ÞìêøBÎì¢Sô1`ÚÞy}¶ ‰~Í­Ad/Á9æñ;Ze™Ï,,_â9|‹ËqÇæN!q±ÌwUÛSÕâŽÍwÌýTÜ±ºŸ q¬~[¢¿ØÜÍ‹{Ä„¸³e–Pü€}ÙªOˆí‚¬¯%ejo†ñér‹Ä7‡1\ôhmø¿6fÝ­ww¤„{ ”òùüöXaaa:…ª@¯;:|öùw^¦r¤4pÿ¥4®ÆâæÎ wµ¸Ïì	å9Ó`S mÉ¤â¾¼ç²X$G
4œ€)qŸ³&îÞ(vD&ÄÝÝ?{éÒ5ßTéÃ–.|²Òð¹™åw1Ó,–.3!QñFrkYÜI$áôé'Oƒ¸ßWÕ©p—Š;FwxgÄ]ž¸“{~yü2ü*Š»UŒ‘„¡¸KãrƒÄ9ÛTD~Qc,îß8ª¸3ï†x:l•’2R…+~i&ûAÃßoðþ®5|m\üŠ]j-Ì"{VWqBvð{SGS‰·—wáðÍo+#w*î`î¼¸s;˜ŠÅý›àí'_Üë9qˆ£ê_4sç_=0Hm²oòŠŸ=) ê“æL­S¦Æ1g8³pd­oâ	ù	6¬Å‘UBùLw8mÏlíŽùãáp!.ª‚àÂö?|í­w®Ó£©ølª””qž)SÜËlUôöI€Eâ‰k]ÎêŠ»g?c!£¿¸tyÐã›ò–LodûeVÝ˜w<Z—Å½ÄÐ÷;î âqïG•¦®Ù¤¸¬¸_î"ß@¯¤¸{7ÆÄÝa(îVÜYw'¿W5qÿ AÜË‰{Ã¹dð#jïæ’ï¿Å½uÎ£õ|Î¦ØLvY-îËöäë¿ÐIÊWÊPq§i™‡ùã©?(ÎÊ;˜»’•ù—[QÜùNñMT%z—T#w³O.üÆìÃ«ë˜`Å}	UÔMª%ej{&ŽªÌ»™Ø|>ŸÎØði¾˜¶êíáøöfÿ30<KOÇ{Qõzö>ÿÖÃÊò¥’£©”¡w}qoR‰{¹å,ž\k‘M)þÜ`ÇáTa$é”Å¦Å=ˆ¬à
ö›Ë!Ø_ìûû½®RÞ¾7â–rp¼•ˆ;¯îEâ~
Û³-"­ð†R^Fw úgDs¯Cà½
âîÚû¹	qoa#ÿh»¢s£B%;o’²¸;5ÅÝ!ŸìT,ÛXÜ©ë¶Kâîäö/Ù!î ímØÜÙ‰;ÝH~‚…Ø;/ïŸ+òNÎ¦ŽO	Z¹–œ€ìÏÊÐÇkkTæcõÑÔß•4•šûßJUîÅ½2ß£ÇSaäÎ4B’Ó©tÓ7Yqs?¡wvÐ¶[=™Ýì6.Z¡öm~âdTï˜k“¬:kEg
jÔ8öLnm‡…²D7'éõu6x{d!lÍRc»[™Ìâdæ`k¾B7Á}øüuyàŽ½ýq<pq'<s¡Ä]‡òÅïK²‰®²R;÷œYa(éh'8˜Õ’œñ“’À–Å]p{=fnvqýÌ¥©¡‹+£`æº¸F.iY¡<ŒD£¥ê.	<Yª
×‰+rÌŠ;Üè.€;£*^o¿½òâî}JÚ¾DéiÅ÷“R
:ƒÓ¶ã}+ýîÊî‡Šv68$qwòj,þÒ©óâ®2rí=KVÄ]óÜ»{Ü†Åúéðö¶»ï¾Î¥$F>)–wµ¾«ƒïo÷uˆâžEj¼¯ùÍx‹¾‘ÌùìY¿d~ù’±¸#HË°ÇS¹‘û¿“ã©fGîß"æ.ªûýt{*ˆ»ñòÔ›>pïæ¦Vø¢Ùó©¼¸ÇŒ£2;\ œŸçwo†Q•ùÚÑÔ'@f¡°H‡1½…­­B(žuÛ–×±š“IM/-,ÁF¥éÂtïSºÙ0w*îäh*¸Ó‰;ƒ¥¨Œ7èâŠâÞÒo-rFÜ­l_*WÜ-ž†—`FïG“Í—ŸîÏ%gƒÅ7g^vùú•*ÈñZºU´ÃÎ£åª’82wJõÄ§êˆ;` îÍÍ—6‚ä£[É‘{“"îpa$î€¸Žc)îrYÛÉ¥½ƒ¾s•ï¾d&:ªùù=7{q]›Q‰»më—Ô]@¹wjî¯ÖÄ÷MTEÒ“>Ë[},…àê{ðÛ³æ¼3†ªÌUî±jGSkœ ~ ›DÇÌm%šÞé	Ä&ëmû—i5„¬‘òÃ}Ð1Â÷æÃ|R¶/I\8ðQåR6v€w¡„T{vœ6Þ	BŠ+¾aØ4D;@D,íòt&2¬¸«Å‰Š»cÃmÑÜK
»[lÙ›šýióå©ÑÄri¿q¹]ò3qp"á”.€S\ÚŸH´ ‰0ö_IÜ!+C€+¸`†”ºß	â^ùýK]­<d“ØÉ‰»*t)ù´UïFôœÃI]]-î€–·;á‡~T^(…øù©Ú¹d,îz‘Ü;Æ®ŽêxòÜûnQÜ£+(|?t†ïº³÷Ãu"î#:eH²_Ÿò˜¥ç9ÑY—]÷/ì8šJw¨bs×ÚÁô?ª¬Ì_@VæÇ`îÿÍýí”;Àì`"ê~ÌÅß¾ß³‹ªˆ•—sþC¡÷ºúEÁPÜ8qçwÃV?ä¾;\¸×8™"‹±ý|Ø0ÅÝ‹RkøÓÜÆÏ›~tëñì{²¸C$.q—µ½Lq^tá<`l¸dœÖ)mÐlj ˆâî´’qwO%¾FœcRÜ£ÈS]^ŸwÖ'.­_nœ»–›Ùp›Ð}üËmÑÊÉm¤´4b/†ç?¤l‘Ð)‰û"î§AÜÏsTOÜ‘/§)îêí*qon^Ÿr£Š#÷ö’âÞÎ‹; ¤jàš®¸ë™;µt‹âNá*môÅ=Ñæ	ÊÚ;¾ë{6Ú‚_AÕbeF~hÒqó[þì¸{9GS‘½`î;˜¾ÿÿKÜY©ô£j2fräÎßÉý82ÀàŸ˜ð‡[«¨ª„büÀ½V)Sã¸ÓÃ5»Ì§PI„é|~w~¢ÎNº`Þ~âzþ:ööÊ%î8 cfâ®Ì‚%qŸ¤M,f¿ÞDD/ÈÄÝÊ&×h‚Ë%hŠ»ä6LTÆbÆÝ`âîñº…þ¹&pìÄl®)ÙOœÝíu—zG®•å¨>ÌmmØÞÛÚ$—PÔ·±‘¦O:Yq'"9àžS˜{¸Uªwª"îƒNÜiúG±v@Rvñ²ñ¿ŸØXñ
¨
Àª]=qœ¤Rsâ®BÒoæ6
ê›1ÍðÅ0#î9ï‡bï†Ãwµ¾o4µ`:!®R%¼9ñ!K5ø¶µAÞ°Ü©&æþ`ît˜;›•ù0w~1w,îÊöÔ,î|Ë•ª*[¾%ÑÔÜL!
‘âa=+îÝ±^TEz·êj÷',Ý>`Gßcáö@OÀæ:Êt
Ý’¾G» q‡y{ÙâN¼Ý¤¸ûà]t b$€½ÝÚÄRNÉÛéžô"ŠWZZwâá¥Ã2Á‹ÉñŽ®õÁ\üØåäöyŠn&‡d Á³’87m Dw?ÞâÇœÐ!‹{G‰Ó°âN,¹ÄjÞ9qÇ53·w—žv£
ãÞK¨Å]6÷VFÜ›q_ŸÍ=.T„`ÎYJÜil]eîø‡–‘ß$qwÈhŠûø5×‡,¼¾Óá»^v"î"­‰ ªCIFÜm;›úYÙwcq‡Ìá«ê*wÒ+£6wwÑÜÁÛuÄý!}q?ž½2¼H ê2ã;Í‰;2bi˜}SÕ;ü{çÓÈ™ßqRm„”uµ8ÑwÞÝH4H{ò!m*¹âE7÷¦í«k¥í›S¥“zU{o&‡§66X¶„Œ{2¸˜*KÆœ	{@_˜?Z86ü)›e©²*HÛ7ºÑIÑ½zæÒêÚkuªú{æ™™çy<ffì±Ç†ø³Y0&8ØcGŸùùûûýöƒìq÷ª½UpoÑì<Þ[Š£‹S…€ÑZÒÚŸ9Ø\ÝÚÜâNî îLÁTZ'î½¸»pRZp7WÜí^w‘îX°úHl‰ð0â~þ&úä¼ˆêKt>–Mwçw’àNXËElïBi€(i£e6‹>_2íuñÈVŽÿ¾à”Èºé¥°âN q¯¸+âÞ7X	‹êÅ]¥C{;—’ùðÈ/!Ç€SlÍ–ûMy	7w "§â~‡ 3~sqçKî€K÷bâK½¾ß'2_'M)År
á$CÅ½f½©ÿÞnw¤žáç\{*ÙžÊ—ÜÙDÜÕ’»Ñ(wðvnOm^qç·xF‘Ã,V.î‘‘Kü‰	Ÿä> Ç,·
î-.˜·#`—–M?~¸@eX˜š™{\ûçôØº¤€¸¿C[S«w×`H2NŽHÁ¨ÈNQ¼ˆ»G÷âQµÊ&L&«wO.ê‹t”ËmwlÏ®g·caÝ›’Zd§%øPcx4àƒœæ|€ËM qWé¥“}tâ¼-›ûÛrX_¢âþªRro^DõFÜq›Š{'+îïoÈIÂ;cq÷PqÇŸ¹‚{5âXwÀ²¸³ÏoåuËˆ»k0ŒÐ—eáÕfgxwŸM+â¾@ŽÜdÅ=¹#  w»Ë—ôHÒÙóÏj%îß¾àâ~ï@rºä>Ãùy»…·–$3W^Õ‹;wÓkFùñg ­î-šœÈÓaìò™õã9¤#0÷ðññÓå¶š3º@—ÿK¥âŽî=ÕŠ»ŠÉÆ$b³aDå”Ø&Ž`m×ÖÔìQ¥Ð L5÷º‹»p’„õŸó©ÍÉ fë‚ÄÛ%?M†e¼ÄÜ»µßZv‹ 2&CÄ½£™»¬Ä·e@ÜAÝû°¸_Õ*î°…	‹û‡)Tw`Òûƒ^Üù®ÔŽRÈYü“ENÜù±pîðQƒŠûò' 6ÄýNõâ0â>+ Â—æú^ÎÞoá3È9yµ™\>«G¶ ë—jØšJyö9³ƒ‰÷¿SÚS/¯¸ÃÞT.Câ4ð)wyž]dÆV»îG¹zh	9Å*oê­Q-š›å­a„™*)¤2ŒšNÇãøâîZ[]5é†½â®¶¦tâî¨¸“À5÷.ß¬"f»²Q.)sóf¯ljÈKNJU¯Ö×…4ù¡ªî‘a¿ÈÕo1'ÄÛÜü¸}÷n>š±óóEþý	&9ã?É# È;÷	ÊÃïrË!÷^ÙÅÔ3¥<92
 Ã·•jûUüù™«ÐœZ„£"Äz NÝåVÛ_'<ù(ÆR"î%aw¼Õ ‡¯¸Û§ÜlÍÜï0Ð<_oäí î·L1(æþÎÛ;è{4‡*à¸½e1hî59íÛÌh÷-E5à7 íö[SõHÏ>ÿjî îßcF¹Ã\EÜÿ˜Ì•ù˜û»dyª~®ÌŸ²¸³æ1wEÜKrîí:šdäŒóâ¾7Ã'bÌÏ.ÆÍÅýi;—¿ÑçpŽƒÃÑVP¦ÅâÞãƒ¸zN=Î·‹ní.-ÍÉÖ¾0·º´2˜:nZõöJ£2¤àn(î^¯‰¸»æÅ]J%]Lq{¢ˆÅ½ß0Ú2’Y—ª”¯Ýhkª?L2†À|‘ÜQ ³ Cƒé»Û³QQäbCAEÜÕ„;uOäºqgê®Ú[ ØÍ›òƒç“aO¯ººðrd:ŠSq‡±îª¸BÍBÂÐÞ¢aÅÓö¾ÎíX9÷’ª:/Ç=ŸÂ÷š_Ü½¼¸ã¿1•lÔÐÞ©¾Oddq‡7N$‹Óz&d)8¯š»Ý¤]¿dyù’yR†"žž~&‹ûßëv0qg³2ß§%w½¸›¶§buo~qç§§/ §‰sQ’ö{ægÓ¦·ù´L(2ÀJÈ¡CI å¶Öî¥)Þ®…Ë"¥#Ý‡†ð·§î>^Úm«Ó—ÚÛ¥Ótˆ»q7«¸¯']Å¢v
úVNÜO„ªîDx2ç©FÜí—ñŒgAÊ~nmÏ¡d†wÒ™J?ÝŠ¸÷‰»|P4q\¾äÞ‰QÅlÝyq‚·[÷'ƒAä8R({C/îì×åùpaÄÝíÖÄ=³a¤ÛÚVO’ª¸¯#KH;ùªâIžÜ¹âª¿«í,HŠ/œêw0ýå~YÅŸ>œç€ÏÊ˜ñ‡ÌÇ¸qÎ_î¦9ãûm­ L‹‹ÃøSÚ:òI¤MÏ'SsO#äãð©,/Ð%F„¤;S†Âº ˆ»JyqO›·¸“NçYqÇ!m¨÷Ë€Eqï©jÌ‰¸±™)‘ *>\¦Ý£Pÿ¬Œ$ÉêÚÙ¾•ÞI$Â¢n¼!Áƒƒ3
©¼Ww-í£L
!QHAòx;ƒ|”Øù3ÚBRRsÇÞ~ídÛ¯aq‹Ê ?¤ü±¨C`CÅ€ZÊýX5q¶¨w½bCÿ=ûîÎº9/î”âîÑEÜ»ºnäÉ ¡5Õ{÷oº+wt’Î†T„²Îy3ˆjÀ¯Ï)¸ÿÖ ànMÜqtóß~	%wÒžª„„¬Œ¾äÎfeþšûw¿«˜;?Éý"ˆ{ƒ+î¨°ÖÎÕÿÍÏ.LÉ…w‹Tþ)ÓŽ”Üµµ‚2-.Ó#á²Ãb"ûûõ}¯Jè2sö+µàN“2$R­wÙ7$óM”‘Ž&]¥¡¼»¸!"•TŽüh—¶4ÕCf°çSR5Þ%ÿ0‘Q¸TÍŒ+YùÔÉpý|0éîÍ­Ïç7DÑ¯Åå¿@ëíòšN|4q‡{BSËî^¢cÊqbN³”Í¶XÜ1²¸C©‹û7 šq®âŽ¢›iYÜÙÂ;þ­nß~½ïµ×úúà|zíþ|5†DžÊsÙÔžOIÉý|q¯Té{ØyîÚmpâNúµ•ïs>Ï\"ÆÞ;ü\qËâîRÅÝwâG˜ªí=š‡—«|ØÒÈGIWv2% ûL{ä¤Œ„jÀÿÐˆ»AÁ°\p§H³ÓçŸkseþ
‹;Þžª÷w•’û_ð%wPww@5w¬îßùM¹Sooº¨Le
9Ïâ8_Z·¿$jnˆ÷rÚ|ï8€êMüa¤­µ3µÅEahuQ
[xhù]Zhk*)¸ÿAfªŒš&Pg/+î®|
Þvç£ˆ÷›7é8C,îÊZó*çþùŒf±^À£¨û	^@¯ï”ºˆ»õËeàáÉÆŠ¹$]÷ž(ÇèÌsxh'$x;wÚ„êîºéÂ÷È£áÔûçÅà ¢ÈŠ¸ƒ›S	W÷È	¤Ð|>IÄ>¨çÚÙÄµkW1÷D"¸Ùc î,ßQ¹ñéü‡¯n•€¿¢W©OÝ’©íäI£]Ñƒd”®òËUv>¬O¾ol+§[–Å}bÛåKgR-ÈÌ¢Zð[£ÖÔj–/QAa$ø¯Ÿ•deþ‰feŒÅý[eÅºS›_ÜùA.û#ÈyÆ¸»ù’(Så^áÄ½|5?²[os/,òÞÞÞ
Ê´h^Ö–J¶,í}rüxÆÁ÷þîÝ»üÞ.ž¾ âþ)±@'î½n*în€Š;ž_BÅ=3)ÚuÌ½“ ÿÆF
‚Š¸÷2â^ÅTé(Ã×µ.kî^NÜoÔAÜI¿)&]½éÁÙÁìºˆt„C~9R#n¿™Ru½ÁŠ»PÅŸŠÀAÒw|®R&v‚»¿u‹ŠûU€÷7îOú‘#@d¨˜¾‹ÅÓ;DÜßxð*æà'PooþÉ\‰PWZW\ÿC°àùzØ$ŸQ‘Å\o‡'„™¸o†O…ö˜OË+zïvv>±š4ŸÌàc>Z+q·;’_¿D½Ýp$ñvŒ¥wÙ
8Óùüo±¸ƒ¹kËSˆÅýÏÙ;^žú}kâ\„Š;;à|&Žœg„”˜Šû½GV÷/Qq§í©”ã=T_ÛZA™†™]=cxxøð¸þÂÞ®Š{{ÛÀ*ºÜ<o§3eôâŽwubè`9jtn8¾6iÒÍ'¢š¸ë™~øi¦âNLÄSÅT1ËÆ¼šè¹‰qª¹“2<ö
>ã¨’€¤‰|º7½JœLøËÈb"*•ìc
e±‰i™gš”ñ1§K.,î iœ¸{»‰×ñâ.£ˆûkW9—ÂTÜÿá£(rˆðdl›¶Ëúú\ysåÁ?œ‘óÐææl¦ŒPW$îÊÛe2P%wÏyt«°_yAÓû•÷iTqïïRÄÝM^ÀÉ#U	÷p7³@ÁÄÝª?Ÿ$½ >·K(ï²¡Ê«¤¿?Š·ú„;¦ú‚;äÜÏpVF7Ê+¹ƒ¸¿KG¹3æ~aÅ_Á?Z@Î_á?šˆ{dQ2»ÁÅò?:Àåp"Ÿ º²ZzZ«—Z4/C[TŽÝ™¡ˆ#æÀê§KMøå;Ðš
È3enx|Cq'¶Ÿ¨¸ûÌ–p²ë0Åùd7˜»[ÁÕ-‹;P…¸odô;¢\<ØuÉ‘QgÇË@Š¥HbPœÈº{Ó±(
†ýåToøÙU@šLqÇ”wõHôËžÎ‹;•!!g9È¤Ee^Ãô1\u0+Hb"–æ½6B= °»ÿø§)5q=wÎ°‹Ð8Ó!J:Œ«©¹S¨¦S¸+”cÎ‹; <cðëÓîä$éHMÊ€¸ÿ\¨HÜOl‹»”ÈU7RˆFu?ó­©6–/1€¸³æ)wÒžª–ÜÿL_rÿ¼ƒI]ÂDÄ]1w.*¨ý©Í&îü¤“Ñ)Ô †Ç9Ñ6i 5ß¿xÊî_ºÇt§DQýˆ/•x{+(Ó¢‰™ÙEe^Z\ZœvàCÓ3ÓÓ¦$t‰‘Î^¾ âþ#²6ÕŽ¸»ÌæÁbP¢Yî;à5 îDF½ª¸W•}öÄ=Eu@ˆ&&²éÞ^xTèRTj'A½È÷Ûw‚ËmIÜû ;Õ1„Ðf©¸?PÅÝ35u@Üi[*¹`‚uqï6÷Y?²…skâÞ™‹ZÜ¬öžMÑö±IåwÆP¥„wô-ó¿±¹|Éœ…S˜+óÕ÷~ÖJŽÍv0´WäÛkç¥lørþòª¸ã–oLmeZ41Ë¨,x\*,¶Õ™±ÅÝÃ••)t©ñÿâW”qÿ‘²6U'îTYÜŠ¸kŸ]€©¸£Ô‘ŸfB8»öi	Ýž`…÷a-¸ó=´>œ˜é÷jâ.‹owýÅ=ž,ºÓÙ\”ÊHˆ#:¿îG€ PoÏzà×$êÎLa&Ê`ˆ·wÓ†E¥¡˜5÷~—,î€ÜœŠùM°v¹Oõý	ä ‰£í0ò*Öö+W®ÿì}x0‹8›)_
¯`$;>Trûr(\rïFym×ÇéÒî ×›Á)¼\bÎäð4HFé Ç­©¶åÕñ¢ÖÅ=”#¹´L
ÙDXOVqå2ëBiÄÝzÁ½JqGgÏõí©d{*?’deˆ¸+æþGò,w•aG¹M'îwwš,Õ]A`Q_]?¿­sfÎ´‚¿Æ©9¿œÿhÕ‡øVé=hy{‹ff|«`Ø†bãék82*²ÿôñããã‡¼ÔÄÃÏ¾ â.'elŠ{ÌD¹¥PJ »4¹öz™|nK[$¹ç1ç³+î!T‚;Åü¦|—Ñ/ùýÀ8ìzô:{»%q÷–w™¸Ór;WtòÓ(rÿÉ6'î}®W®ßÿg5©¸öÅ]¯îŽŠ»Ûîr`i=£Š{G‡UqO‰¸'7<XÏ¸ç&ª8QteCâøLîÀÂó¯ ¸G¸ü8j{N®§AÎ	sã¬p7Ä«CdÕÝ*øöVcj‹f¦}f×8ø©á’fÊÀþêÜð°€¾
Hèìv¦L+î‚ QqWoÖPq¯`;b05‘Jä“.€÷~¬êš¸»Ä½>›S‰¡g‹›‰PX"q(ÀÌHÑTPâ½ý(ïÓ¦ß°âŽ36Å½C^œJÅ²2œOSq‡ˆû«×¿	\ÿpCBFÚÈ;!î0+ˆ3xâ®d 3q/¦= )CÅý®åŠ»$Ó2Gv®¸SÝ	v(ïJ—liøOû³ ÍñŸBÈŠ;Ì•!Yf äpw*ÝÁÄoO¥Q™¦w
¬A¤@Ý­ÄÇÚ¹ù”†â¾f*î|ï-ûUÉÕcIcà`l 5P¦ÅE¢}m±Y™È¸msg¢1>\+ ¯âé_ƒ¸ƒ·ËI`CÜ+úÍÞR~¬««Ÿ÷¤I+ˆçsùÄdôâ./Ä~N+î.VÜûëZq'sbÄP,™OÀ'QëUð€H‚Š­óS/¤TÎÕoYÜ»Ë‰;w ‹ûísÅ½ó£r’è`#îo\ÿæ+¯¼ò?I¨Ñ„c™òâ^«¨ŒVg—ÿ”¥2qwy-Š{,ˆìÊã'’²Š÷V1dÍ^wz”–’\ÙÃ?S[«ÈÊ§Š®ÌIX@ÿ­KÊèfAÚ.¸£ø³ÓçŸ‘í©´äNÌN„|—ÜyqÿÖw^*“2}1w¸ª¢s‹UþÖŒÞ­?Œ£Z³2£ÿý[›—Z43ããÈˆ‘­ñ±¥ƒÕ1ûe‚¡¡ñ¶ãÕ½…x¡Pˆ£º"¡¦">}ÅÜm‹{>T‰	ÜsÇÞâ.ëæ¡E+“ëÂ³¹´‹Â‹;ˆ:'î€×@ÜaŽeÍÅ]œÌúðXØ¯])iRýƒ¹#þ	!Æ|ç‰»ÇW*îÝzq§>Gî¦*în,îXÜ1¯ãÏ<Nú‘ƒH©¼^Ü2) †#@wªUvùƒus/'îž;7(ô+w¯^ÜáæMÄ¼Bñ,H{mw1ân±âŽ&“Š¸û²~{Çf²§šõK°þ,¹91;! Ê˜¶¦Ú/¸#)>ÿÞ%wÃÇØjKCº8wÍ¢ùiÀ ïüú¡ŒuLõ/léOZS[47£KÈ˜áÝ½8
ìŽÙz&Oï/®,.MÅå¸¤^Z(4Üä¥ðéÄÛÕ!î:qtâNçƒ»)D™wÂ–ïOôƒlî°M›»:"Å#³¶¸Èh½­Üu¢
w@¾^5Z ¾ à¬LÕ	@ÁX¼™ÑÎËkÖ•rS¦¥õ"YÕ­÷"îâífZ ^ÜÕãôÊSÜß„)îØÛõâÞ1uÖSƒOÈH™×ßì»vý:ˆûï½+SO"{£Z8ÏöpâÞÇòó‘vu7wrãÌ–¥~/;_†þþOÓ™2¶³`Â|O(ú: KoŸÄ,ZøzÆ«RœÝ‘RÅž*zSƒ°±x3–äžáÿe\p·+î”³7wrÿKe’;1wº‚‰7÷¯¹M*îúôõèj{ì¼9cqZB&ÄsÅn“.Ñå%TCâ‡k¥p«ÞÞ¢Ù™^±T½ìWúÚ_[Û_ÝÃÆˆPàoó¥ ¹~dïp¯€F†G
rvñìì/¿xñ7ï¨âþ¶ÅH[/œ
ëÛw‰¸ƒ·óâž9oƒ¦š—¢±Lw…âÞÍŠ{É`½Á`-«íÐ…Š“<“)IeA
àíx\=Û«ÎºôâŽ)'îÞŠÅýmwÅÜ›•!Gï~‰¸ÿþ{±P0(¡ÆÝ¬ƒ¸{Uqg£7vÄ½ÿQÅÝe,î¤âî‚ð™=‚ƒ.FÜÓG–mÛKÉÄBvrLùž|¨ŠwwrÅlÖaÞqøugAR>·&î0ò2ˆ{‰U4FÜÆÄ¯Á›•™1¾±ƒb£M
«º˜L{k€{‹¦gùYcu¼òåJí£O—¦¦ææ¦êëÍ…"êR`xïpnŠ·¯ÌîB¿óžž¾|ñâ—/°¸+Û—Xq÷R\:ÜçVÜÿŸ½smäºîø¶°#ÀË"â¦®lYk¤+ADÄT8m·(’¢qƒÍ6qÞþ¤FÓ)4_¢@Å#‰dJ¶b‘"ÍW”’r RT(š‘¥´ÝlbìÚ»ˆ‘MêïwZ´IÛ|(zîÜ!ïÌCRÔÃåo×ZJG3ÔþÍáÿžãë"ª¬ßø'lîW®€HcO•N	dÜ.›Åå^±1²‡xì5Ø®Þ	ˆ&£D#ef¶NCêõv‰ågÈ]¿âÖ³öwá#kdš4×	jSiß’”9­†„!hW™§0`î‚™Ë[ÕËggÒvp³þ4hE._¼ý±'Ic™FS÷WL¶«Çî#*/~ø÷ï÷~óßÃîfN;äÎM½k»RÜ±YÃÙÝEb¾õ&\âÞœºIÄ¯ä½yDwbFr@/È¾#îWt í¢¸sÛHÛ)‘Zï+l‘©‹º„Íq {Ã—Z7ÒñKîIaï|·1<õ¥—ðêÔeÜIVæoÃSqV æN³2œ–i3;8¥–2#r/¡Sá¨MºöòeÙ:à˜k7ˆUÅYŒ‡ÐñP‚Zÿ0ß>äü±Gê(oÍuónÞæÁÖh»Õ€ÓÉC&¦”ˆÇ³Ù„—þDGÉrz+e¿5ÆŸVÁý”ÜI™O
Ó—ú÷@$ ébj½ùWÇ.ã¦ä¤¾,Ó.6eÂðÁcnDMs.ÅLéw.ÌM¼]¸©JÜmt*û„§€—|…oÒ!Cxèyâkmâ´wÝµQÁ‘Ÿ.6÷Q“0LzwT÷'ý(¶öã^îúÓ÷\ qoøxqÿ„Àqˆ»xÇ^Ê¡¡yrŸ¸’WƒÉ‚úÄÄý šÊø<=‰;cPX‚íl_¯4»&˜¡×„¿VÜui*…¿û+QÜiÉýyCHè+ó©¸ë¼Š»²»ø¦
Ñe©Y·m*cE¨È¶5Ò$r®X™gEýc°F×F†ùö!ç‘…B©ÂQÎ.Ž¨¨³ƒµ/.íDóŽR4nåëÅN«XË7xÑ£­£l²äS2†˜Õë/… ìîˆÐiÁ°™š*¸÷%îL&Àu±Ð‘ù—×°¸?×w¹¤à…~3ã ÇÆ“ow§ð—©h{GqoÎŠŒ·÷ãêÉØ<A¸Ä·ïÿ¯¯ÂU#olÔžš¸_zu0Œ;¢w }7wœ,(úõT÷â>u&Å ¯‡Lßâ^ÈÄ}]õÃfäD<zÔÆ`Øˆº„ßæt©´' 5™ì:~iÀ½ )†»ï€¹Ó†/Óá© îŸÆÃS? â>¢¬mgÑéŸ—`jS´ÞGÈ.Èœ_Mü¨Œú¦rØ¤ý°äóÀÈž©$”\Zi»­åÍ¥ÍÍÍ£x9„£)fG>Y‰áˆ;r$Ùd¼,h¼Ááõ–ùr‰Dtxtº0ØÛ‰¸×§/Qkï^Üg¹`.¬¤–ˆûxÊ‰4Ö0™Y½ž5z"“ªEr¨ÙJÛÉÈÍ ÖK¥Üî2ù8$Ûõ¶Öqm^ïËÄ°ÒäþFØ§wA÷ºwòPqÇÝ·¯á¥©TÜ/5¸Jøž‡G'Œ%s7•‘ˆû>üóëi}ë'Î'×@a¶#S@÷ÞÞ¸IJÝ“"äÅâNéüäÎ.¹-j»p›Š;ü„º¥Ã½p¶HÎlòŠÀA‘þ`<TÜÇFG/›X¤ŠG_u˜Ù™žûBÚ‚¾û’:]ÄÔùL¦ˆ[|ô¿Ë†/µYšÚ··ÌÝ¤äâY™FÉýyYÉ]ÚWæ[¤¯„ÜIÊ]ÞWFL¹+cî§íîJ]r ÓÁ?¢wÉíÔ‰æmÛ·f)Žú"VR2Ã¹KCÎ'‹E‡ês½œ]j‘tŸ[˜›[^ÊVJ•JÙŠNˆP¥âàÁÔc(T®Xñµ”àÖüÎÞæêQ9sÐiÃëoýò›°4•ˆ;NÊÐ‚»ÔƒÕŠ;´¯WÓfÄªv+½çu!*3;ÙBÛÌlp}#·«QWÜ‰b>†Å©ŒÞå1M¤jÄóî–Y^Þ9ŸŒË(uÐ{@§m)îxr*@ÛA6w|ˆõn—q×i§Ë£
q¿ziL"î¯WOZÜyn,óÌ³—.~ø‘‚¶?‚ùð«i¶ù#X›gÃÅ¼­Œ`Ê]y»RÜŒ¨¸ã³»!îtSs¨«+Å]Zoˆ»i`÷H´BÛ°1¨?ØœO*î×Â–žÄ˜ÊØP/s‘•–ÔNO›Ò‘	_$ÒñŸ­
îÿÕÿÒT%Ìí¢¸cs—‰»¼äN;BÊÌ”Ü•âœ%qW¦8æKè”ˆ­ŽHÄz¤µþÎ%yÔÇV;q§…p¥¸ôŽwgmîÂ°Þ>äü²uv¡Êä|Ÿ“žíkG…££l)†N’˜Ã_òC4†7ðˆiYKñl¼äïÍ¯F	mÿS î4)ÓRÜ©7tX!îš@°¶²mae›U»éï=~qìw¢4Ô6p˜šT0Ó*îôPpË•Y!EBK“D±DÝ±ëQŸ°+ÎÜf†«¾U˜&EùtUÚÍÀÓ)ÆêæNž“Æ ¦Ú$DÞ’Ç,>(QÜéåhûeHÊsSÁÜq_™«p{Œ˜ûc$.óšÝ†NýÆkB÷§/~ä‘G>ö1÷=úè£ ¯zŒMŸ·´i÷óà¹«w"ßÒv1
qÈïêu—k~+oWŠ»’Ià9Í8¨¶Ôî…[tøQ_@L\&î)s—âN_¯°~½·ˆ»‰éaIí´Ïî	OøR–±Ðˆ;õv*îŠ„;Ð··#>æ.fe^¢ÃS%YÒò|‹ûˆÂÛ—üÝÏ71„ðÔ7Ä¶©¸K‘µe)£8Å{5¥ð…¥D¨Gs(æ›¿¡1l'3äÜ°YBªá½ù£ùåù¥ýÍñT_X>,V‡ãD[.ÀÒ£‡KõE*<´‰G³;Ù¼ßŸˆBh&„NFo¹õÓ÷ÿøSŸúæŸAT‹;L_ÂcS{wM¤¶a¯¹õ€ÈXTWÃ~ç,îZ™¸«§]W™çàNé¡ŒpSüT)îÐ¯¢¿ŒŒÅæ6ù¦9V$[Úl±0-ôÞáfÃ™LÎ%ëÚŠ;)·w%îxS¤$¦.î2ƒéÇWÇ.Á"î`îëÌ‰Ï:ÚÅâþì³	æ<âþ‘G€×ÞPÖycõÝK¯­³ðp]WÜŸj"î“³Ò‰Iµâ~³Kq§«9ê?I)î&Kß±<c†Šû(ˆ;çéUÜ ‡íå½êIÜƒAnÂÇù´»n¾1~iÀ½ •æN—§Ò;˜;‰Ê@Éý<WÜ©ÓÏüÝý?Ó[ŽG‹;Ål1
IRÔ'ŠÅ¨Íí{±ãN–[®MmÇB¡Ü‹;”
k‚½Û·9Ï,»Rno2š,[+;kóó ðû;QÌ‰N§5‘Ý9Z»=qÈ6ÄbÖR"™Œçý¥|Þ‹Î Æ[¿üÕûŒ½‹;)¸Ó¤ŒBÜ)-ÅJÈî\ÄnFPN¤U: ùÕÇx•ˆ;UÐîÍ]ù•ç€º¼À¶1-ÄúwÆhvçL‘ééˆÇBšZZ§ƒÂºT0{Y‹l¹¸S-Ä}\•¸¢¸?'|[q'’Œ]…šû¸»(î_±O¼­Lêì–Ð^ëú£¸øjUÏ²z€¯wØ´ïÂÕÆî6ƒ
ïŽŒw[qŠ;€[ê+ÎOØ®ºŠûTgq—gèEqŸl!îáªžaú4w‹I£!âþÄXÜ}µ>Ä}2`¯ÕÖ«Lw%ÿÖó®ð´Öç›€ÿàÕ ^öý†$eÛ’j{…n? q'ËSIÉ]rÿlî î`î!kynÄ]"¹¾Bê	%v¶æáAØþ¯/C¹z«è÷¢Þá£²]k-Ù{÷2Ùä@eŒe­`¡nˆyã‡÷zûóÏžµ§Åñ8T¶­1t²  ?ØÛ/‹[Kq'­&ä“ÉD¾dõz­èôÑÿì—ïÿÕ_aoÿ”èí4)£¤¥¸StºÔÆJ:W«yXÖ¡¶)¸í?Äâ®ÓjèÐö^—¢0)w™‰#J®8ñ(£ïÙ@-U{0â›žæ‚ "¼Poc«Ó>S†ãjÒ Œ' k!îôˆŠÃG™¸£— Âœ}ñ f%w÷1B=Îþ®·Wákcbg™'_yÃrâ!÷ZÐ7°Œˆ(î_k}ccã­·¶BÐWGñnïºÑ`a<)ò´öÞÇ]é×u¦šð”’›Å}’B^ä×ß\ÜáÏy–AýabqŸ&}Üµ«IŠä.ŽãR¹.Lœ¯L,êÖÃMkAÜ}¤¢ðò&îÄÛ–”A?»æ~ïÎÊ|Eì+C;Bbq†0}›;)¹«nîŸûœÌÜ?þqlîDÝÁÝÏÎâT¢Ü2¢]ô=Ìï¬)ëÕöŠ~Ô+†„ÂÔ›{ü~G“È*Ä]µ¹ÃAóH=þì^‹Þx×‡Þ>ä|qý(„Î<
ù+Åýƒ­Ã8tgOdBµ¬½T‰ï~kÈ€Nˆ¶ßyÿ¯ÿúXÅ=±»W6<z½‘¯pSÈ4«vþÒÕ±QwQCOAÜ'‰¸÷ÓU†7gR 4¾Hf}Å…ÇEµ†1WMÀn8–SôÕ o â(Ä€¦^ýñ%iÅýÉ«¯ºÑ	Ãã°ðÌ¥«?B o€<ÏØ¯¼26ö½·ÌFKú7H#œ×<(F;×Ÿ¸ý‰;püâ®GúÃ‘‹û®KmõfÙ6Ò‡Ë‘Zô™©ß½¸¯k|€Nh´»i=ÞÂÿœÈÔT*îwn1Ps¿/Šû›Dq_x¨ªÝÅÒ´üÑj‹æäkG%'ê²´äõ–ïŒD;ŠûV³¹©ê[¾¬åNu­ñ,š¡¶ù`p}ÏÎ,‚AÎ×B•ÂáÞá~4Mø	o,dõBÈÄÑN<‘÷ÇÐ€	ý´ýóŸ•Š;™¾DšAö$îš`ºÌlÛXÜ49¢Á˜l¼*sóÀòÄk—u¸™Ê©‹{Ä…zC_ƒÚa8˜s›]æôº‹ocnS
Òí)]Ê£—>>Ì5ÄÈyqŸé î wéêÔ&âNjíäŸzÅýÉoéÑIc3Á~>ƒwí¢ »ÀUÚðæÆ÷í¦]Èù<ûì3cc7Þ2¢AA¦ÉÓ÷›Å~ÙjÅ¾Aˆ¸÷;¥ÕJÅ=lCªà×¹–â>È˜Õx:•r÷²d´rh\8Ðp¡Óè·ï©ðö>ÅÝqç¶ðÞý¾Ä8»â~}A®ñÙR‡¡rØn³Š¥Å}MÞÈ½…}_¯t÷ÅæUŸfY^‹&bˆoïÏg÷×Zm|nèíCÎËG^tqÆBN§#†ã1`²^oñ ×
Å£Bæ+•Ë¥J2êÅ£•®";†¥òëí;¿úùç?ÿÙÏbo'w,îŸ¤÷VÐå©"TÜ¹Œ™Íù2fÄîˆF@å|uf;|íÚem8â#*J˜Á´Ú%­–¬ÒŒ¯ 6I't"¹@C|¸u¶×‰KµªÛ¬×»jÛ6›‘myèÆZD7‚U»5V:ñ'€ÓF"ÐÜïÊÒìQ
iíH\ü
 ,¾­+]Cß ÑÜ5ä›´ÀåkH–Š;üûã1r¿*ˆ{½#¤4Œ;è»ÀÎ‰»F–ÎÊÙQÀfôûpfc-5Ùƒ¸+G&ÉWÐ©I2È£ÚoLnì³-ÉnÜª¿<hgPrz‹÷ƒ¸3N‡;A÷Ë—áW61"u˜ÃãÍÂ2äŠ„Ö<µZµÅ¶X=O™öÒ°•Ms>ŸÖ7=ÁÂaN«BþöD—¦"öÖ]Å0w¼:õGÍ:¹ƒ¹ÓL¢¹ÿ ™Á4÷q—KçÈ©Ã‘…>pmYJ†Pø—¤F}½åÚÔê@e^ž¹ioî-fqó(_!C3‹pxÅ½Õ¹–½>7ì9ä<²˜8‹Úî°Zr8üñÂÞêê^!™=(&ail4^ÉçaTê~±âõÂËÕÙe@&„Gª±˜3„§³:ÎÐÝÛw~þÅ/|Š{½§x;NÊô$î\Øî‚BrÐÅZV6ì!¢R¯ô9Ÿörd’ªû Ä}†Š;Ÿ°ã:2OU,ÂOŠÛÍè{w3Ë0<ô.·ñ6›žo5
Ž2LùÂÒz»q}—s:Ê„Nw…¶–¡Ù»wÍRÁWŠ;€… s—ŠûèÆ“7w³‰x f0—.=}éÙKP[—òLýS8×jì ½}=5ÙQÜ§žºùPûõ)Uâ>®wò°î'§
‹¯›‹;¡.îŽJ,ê6§Áâþw‹êRýdKq‡Ã )»§é;U¶\•m¬qåÖ{IÊp»¾Ý 'ˆ»Ocrñ<ÿoŠ„{ë¥©ýÜXª;!ä¸ýà<‹»úÑK[!¤ïVçmÏ•P÷X·dªÞ*§¾ÔqO£sMÚr`L«{.¬îí'Ë`ï!a£ ^h¤³³·Øþb`a¨íCÎ%›etöˆY­1>TŽ'“G‹«KK‡Ådq?[Âiöd´x´´8¿šõ‡xƒ“G]bðæK±ãZ)k½uïÞ½;wîÝºuû§·ï<øù·ëÞNÄ]ÚS’2Ð²[q÷Ej®wz=ùö´=ì«‹ZqG®°6µÍ#KŽk˜;þQ}Š;±•zlD*îÍA«Í(îDÓc#w²ìOÏò+,Tµ™…ù”Nˆ„¹H••ºb@›ŠPqŸž†`î²¢;x;”Ðåâ."SU©¸ŒãßÞè÷KDÜ¡âŽû¸7Ä>½ftâlG|—±õ‚Q@z›`?H¾†ç±½¸Ó–írË&;E$s’d¹-¥·«¯¸“íáá¦A –wqmwIËV:}l2&}£·ã9^B?j_.¬}ªùL5Âú\Oy–—TùS¤ó¿éé(XO8ÅÙk»H*ÅéÂ+<Ëòÿ{¢w€ßFus³aîŸi˜;ˆ;éäNÌýOÎ•¸ÈårÁ‹Ô_TµõÍ
êçÞˆÄš[FÜ·PùC;š»"®/ÛÍ­­B6›M&âÑhñ`·­n¯íÃ˜ÌóÊZ)NüÁZ.'
›k{[Ë–
Eh“÷;pTmosynq©­Äº,à‡bàí˜ZÎÇîÞ~ï_ùÊw¾óû|ík?ÿò·¿ýE™¸‹	wÚr¶Kq×@µ1º«ÛéªÅVË˜Âà”ä[Rj»ö±éŒ‡ÂÎ0âsfrÀâŽ£ùÓÀ„Žˆû¤€ø}ýL`b,"€¿óMC!¦]hkaöŒ´E¹ËÐÎrœ¶½¸ƒ¶ww‚¨kq×é._#€¤‹À-ü`"ŸÿÀˆN^oÞØq‡ƒOà6ƒDÏ[‹û.ˆÜ 0gðyÐ1*£Ì¦¯¸Ä]DØ×öâN®£ÍÇ"î îXÜkjÏj3Dq§±!ÎîvU«éš™áë­¡5'\æBÏ	ZzêÊïK­¤‘§ÑiízÖmãÝ~j*õöþÅEn=øÒKõL/ÔÅýÓÐ²qÿƒ†¸“ûéŠ»2áç‘bàíê˜£®Ù—EÓ[­!Í:Q{«òítâz§1IøÞeØ……åÎW,sÃ”ÌóËÜ™Zžjðƒ£ÇãÉbáp^‚K{‡GÅx¥dAS«%´¼8¿VÌ{»‰Ç8¼^9Ÿ·«…îÞ{pÿÍ}éKØÜ¿úw÷µ¯W*îàíTÜÅž2Ä#÷€}ÅÈºÖÝæí½mÝž‰pTÜUë£gqIŠIs-Ä}F“Rd_={.x»PpŸÆL€ÃÆI˜ˆ\lônŸ†iŸYÌjR»>V:î…ˆ·džz»èÛ’‹$!)seÐˆ¸Ï´wr…í_Ðv‰·Ó;ù‹ûkit
@^ê2æFB‰¸K~ÀânÌ&;ˆûù#ÐIÜ	Ç'î”Ù(é º€CúêárFÔ7úŒ€k+ò»¸6jÒw)îÊ–¯ÔÜxS‘T ð4gâÅ”ã@8½³9˜Æ náWR>.£_‡±©u¸‘ÛäæÛ¦àN+îÇêíÀÝÛ·¬Ã­w¾DÅOÅ3˜¾Íˆ;íäþ9QÜ©¹cw'âœs—ëå^©"¹ >-¡.)È¸•}'P¼-³ò^J
{½0¬¶9¿Ð5ê§O¨Ý[:\Z][Û*-íŽv’‰²×áà‘·¸
WÑdË–cªK÷!¿×Z†\<˜¿?Vºê0ôã¹uû½w_~ñå.ÄÆ¦v)îšHt@ïªnWÓ6WnzrkâÎ¥ù®»D·ˆÊÔ}äxÄ]ÛZÜMFÔ‡¸·ïóžrZín0 “u®6z" ÖPoo*îô˜ŸëFÜgdâ:Œ—vRq—ò¸ß7£SÀf"æ.Ñw ¡ë¨É–q××3*îJk—VÜ§ZDeÆ¥¸ªÅèKÜYá.“õ‘Š;ftìu•[e[ˆ;IËÈÄ½žCŠ˜<*77.ŽpøQ©*ßÃp^XS’3ÚuÚ€)¢	Zø\ÀÃþ¦yÁ} IÊíÞ¹í@wß»ÿwY<d¹„T‘è¦˜¼íÒÜEi•ûz‹¦«ÔèrwKjûÿ÷,&è,`ð&Ö–W÷Ö@Ù‹ÙxÉ[Nî’~ÌUJì/Îm²‰²?„TâÈ' "ŸÝ)&ãÐ4Ò`ˆÁJWG>‡ºzúRÞ¾÷‹ûoÿíß¾øâË?z	Äý; îàí_ÿ2wYR‹»blªªˆÊ8NÉ0zÓ¹ª­šÙ¨f|T85³&s—ÇÀn‡uððÆ¨V™µSZŠ{ciæ¬DäÅTA=w‚ß&˜Ìwn™‘Å=Ø‡Þ0l;#ÜÎEà'û»»é²TËFJmÅžt94€pÙÞˆ¡u¾­!EÜOÔçªÒ(>Ú	€eÀÛŸ¹ôôÓO“ …X¼‚Ñ<¼Ùäk\¼Ôí}T	~†¸u= ¬y{#¬¡§“ ‘JnÂÓ}SüKPÑ’6?TŠ{ËûSmg9TÜHfëÊ^29æXÄÎ'øÍ<óìA­¸#'>«ò~­8¦/¼•âþT°Ê²+¹À,HÆØËÅ˜ÉÎe\Aíl$—ÙÝ`Y»/ê0|	P_êÃ­¯}õ«îÝYïÝ—Œ`¢ËSåY™o¸ËÍÄ¦ÜÁÛO]Ü•÷REŒ¸æ³¨+œQe‘]¹³kÅ¢(O©ãzŸ+Ja8q3dÈ¹fËÎ 1oro~îÂä×£Ù,üM$¢ÉD6[¦Ð¾}ï(«6!Ã£äØÐß=šÜ9<ØÙÙ)£ùD²Û*l!wcèÉÙ­wïVî½÷îÛ/üé/€¸¿âNî îÒˆ;-¸ÓéK$‘öKl'îáõ=bŒ,o^ÏmÃ4úõí§4u|¹nýÊú¹kÄ²¾,ZE¶•¸)jÒ2O¦f£%›[°4ÂÈá•¡^_pY-àË™Yz‡+ ¢J‹;)½kXÜñ}äÎi]sq§’¯½}ìÙ§{ìéK@Gq‡¯žpc:ÂŠÃÇŒsüZñ9yÀãõ„r»ð¦âÎ¸ƒ)hÊ)žb-JîD¦)Äâ	´Ò®„H+x)Ù¦BÜfÅ}âÛ•{û}!â³Çr5f1i°¸‹×Àëf¤[döaqÏÖç„7ÂÄg€Š;Ú¨…ÇÇ©¸÷Vp‡ˆ{02‘©fS©H$²ŸÏfþõ$—¦RBwîƒ¹¿sç®õöý&}eþ\(¹ÿ=˜û_Ð’û9÷‘*,R¼kÍ*÷‹k‹‹«PonRN¢®H.(d]›9Dpì).PÔÝçz×öá’Ô!ÃŠû1Y{bgí°°Y,9òE„
—²Õ[ÊÇÙ½„š.ªÇgÌéM”%¨µd³û«ËËËK…ÂÞæVago« 5÷‡§<Å¼ù Y­B7ÖÊ½_¼ûîÛo?ÿ™çÿ‹û‹XÜ‰·7Ä4•ÁÞÞŸ¸§ì+¬˜õ°¯Û˜•ZÕ9Œ¦AÄÅwçn.XžJ6 wjq§(Ä~/]Û	‡'wbÇ
Ï]µÜ:OƒîyLÆ§ë^ÜáŽNâ>¡âNf£ªw»¼+8¿…¸'"îf“vZ«w¥O+*í÷Žwâ¹-®J¦âÎ­3Ç-î8{µ»‚ÔÁä¸â.dâš‰;ª:þ¸§YÔ-ÌJŠó¥ IínØç@bh%¬þ«èíTÜ['Ü©¸÷ÏÏî=ø*¼ý	æþÎ›ož{qo5ßè©!´¯œ×²yM@ÑÊŸG·@Þä]‰û²"*£Œ¸'Qbs²fõƒº€µç¤ù€°gE§säw`DÂÜâüÂâÒN¼B¥d%„B¡˜µ’,D­V5¥vCÌá¯”V¿Ãà,ABf¿-%³›×G>4¿¸ut¸µ	[wâe¡àÎ£×ê…N)^ÌF6W²ºú“Ÿ¼ÎPìŸ'yxÍz·T‚”ïýâÝ·?üåg>óüóõ‚û›qoÿ®,)#Ÿ¾DÆ¦B¯D9ÍÅ}<•q³âÒÊLÐ£çWrétXCÇ~|ël—’ëN]Æ5W™¸ÒJÆë)ÔÛ4êíbÚnÍ’C£:Ôó{ñˆçy½žAJlívSØ·›Â5Ð©z›Ž“å-¹ ÖS‰¸O7¯s¥áíûàqÇG-†«*¤ÅQ ™¸Ž‰â®ulž$ˆân² S…®˜*î£TÜ‰·LÜ-Þ69{‰db‰¼Ù¼NÝýæ¸HC³›i{[q§(Íö“‘CNgÉkœB®Oñ•Ðî6:.q×ATŸO î—TWÜQ5E†Ó_Õ¸§%wrÐTÜ1rqç2–šAþ{g£V~Þ{ÿ“ÉƒãJ;Þ±Ç‘Æ#OåÄëÄNK»m®omw“Vq«‰Ú¨·JÒÞê¦M‰dÞPÃËÀ^è]Ó‚t%ÞÂÞ3ÌÒÝ]ÕQÖÉ»+Y+YÑJçHQÿéþÕçw~~çpx90àIW|Æ;p8ÀösžùþžG²™î˜Ö=ÐT&ì(è}›4ýtÔÒÔ¹ÜÐ;|÷»<~ë­wON¾ƒCî`îŒ¸ÿ-wlî îØÜ‘¸óÍ½rÿµwaô»A‰!&´­š{º¼ã/¤ewÙ´è½°TÎÝYGiìVtÜ¤ÌDÏçÒ–ä]DßfkÑ·}Á'KìL×£Ú¾ím/÷¥
%°ä’Ûí> üP‡iKu¿YT3°ûúF"™¬†êh/ŽkØb9V±û¼.}èóù¼Å›×ÃDÖƒ}µQJVòíãJ;eyñË–ëÅ¿üåW^ùY´p\ŽÆb‰F£QŠ½ÿ>Ùö³Ÿ=ü#Äß‚·O%î0~	7ƒ!î²pÑª2ZQ«r)µPR.†¥d^—¢jâ¸„g¤¸¿4qÇE(î ˆû4(3Eê)#§{*é­ÓeŠ@¹/¼é9ô@ãÌŽJNóë0¸#¯ì÷ÁâW˜ZÜüTAtçP¤¸»f¿ƒônäú q‚œ’ý`˜—¸Ã%"Ä]‚/îAã,ÅýÂ
+î‡»âSp²>qéÊÄâ¾¶ÒÔ„(÷7m{*õº-T»`:šƒí½qKSgÛ’ ?xçä»°Bõ“7NNþ‹;rÿ£Aâþ¥>qÿ3wñ÷”™ÙÛ¯í±Š?)˜&ZsSâ)	öP¸³ñ±Á<+²lm‰¶v°ÙZZTÛ|RXj›©3bÇk[tq{«YˆU*±R,‹¢ÑÆýƒR¬áw›¡	=êæäý(äöWÝæj4_NyuÇöÒÒ–½íÝZr8tñãJ>oEý;4„rªõD¡ÝjÅ½qËç‡á· $î¿ûöÛoö³_úâÛü6ÃïýÙ?_ÿæ÷¿ÿmFÜ_åŠ;xû·Ä‰;NÊÈDˆûj !c0eOk0ÜAåvSQYm¡¸5ÔdÈµj¼‹ûÍâ~íÔâw—ÚeÕ(•V#2v¹Jc´îíç"¨Ë£'ËRá`îHÁ} ÎœtmBqï÷kƒÅ_w]º‰5k´¸///¿€Y^ÆênRMÅ}@Å¸DÀâ>Å©òÎá qß”oÇœmÅ](îB`eÅi“2¤íQp*x‹û›{”8hU'îðõTâî¤§è„6jPqWg8moq?“‚;@À¦“Ç¿ño°<•ˆû«DÜqVF¤¸ŸyWa“DCžC¥/%Ó=¨¶ú#ðµñOuãœ “Œð,cwaÙn·4öj`øÀBÚ,†§ž
z¸àEËµT³e·7“˜yV>>>®ÙSå*Z_Ò‡ôõ†{gˆÐA˜Ý\*™¹ß:hTÊMËÖäÙñr²á6ï„¾Ù1ûcùV3eyþy{J÷üóðýyŽ·¿ò»_û¼“ÜýK÷Ex{ÿ=dî_ÿ:xû÷ÀÛ±¸µq7ƒü_XÜÉÚT¶§L7âþ÷Ppÿ§q—ô#ëÃÎe•´Üh‚°Œ*4iäÊýˆ	:¦`C@HˆE„wéIýÉª3uWž\aY'âÎe¸?Àõv®¸Kˆ¸X¬X«˜FÜi£\Ý™Éd3jµu×ÕéÕê`¥cº=‘ŒF+çhû‘:l[ îÈMÑwÈ(¦+›ŒŒ“ç—#î7‡‰;i@ƒ,kå1vË¿ù›ËËŸþâÓàîHÞx6!wpgfÄûÐ\igÿ»Žtÿ<Ä]¹ïa^
ÜÊ‡'Ú˜®IãŠ;H<úŠß/æöPqgÚE’b:‘UÂŠû0ðv‰¸K†‰;
i9©Y`àwñÞ‹WÅ7ýw†WûÄý©F»Ïw¢íä1’«‘É+îÖôfÐ˜	H¹=žÓlØ>úx°¸ÿçœî€œ1÷“7pCÈnÈýUÜV™;#îÈÜ±¸3a÷^V†Ì`Âî~¶â.LÊª¢
î}íYòƒ…\Ÿï¯`OÐ²aá*÷Ò ³Œ¥Šø.î$â>EÙÉû°, .]ÔÚ|1äCÔ³òèn½ÙÝˆ¶ZöšOçKÁ”Ôf­e‡4úqÌMïø«úzÉév¨’÷Æ~‚0{Jç	}ˆ#öÕJÍg€ ›Îk1,ºT¹‚3«ûc4Y÷¡Ãò¹Ï|ÆaÑ=/wˆÊpÄý‹ƒÄý+ƒÄtqo'âþ¿Yqg›AŽ÷U›zWAÓ0!µèÔfÕ‘ŽZq„÷:o(îSdäZëÑ^dÎâ.™¡¸ª=“†–+5.“ÚN¦m64R‰TÍ=Ah»C‘p»2›KC$H¬¸¯O+î›SŠû¿B]ó,p†‹;†ˆû<¢2Z“t¤¸ß†øƒ¥‚íð	ÉúÜÄ¬¸kHÖs&Ÿ¸¯­¡£@­¢f }è÷hÄN½Ù/îøû¥IÄ=¨"â.	:;aO¤XÌ¢ÃfÖ¨JrO¸KS…÷9ô‚$À¦¿úˆûwH'÷O’¸[B”ú„¼0ôÉ*ôÕª	ñQ¯p‘¸s÷¼A‹âs®¾4±¸7GförŽŠêK¼Ù¨˜E±}Á'{•zv@‹–j5d®'¢åfªVˆµkÍ–Ïàðù¾Z­Ò€|ŒÖ¾WÍÈÈC~?üM¸ÊðþF£Zõ—*Ç…zˆÛk†NÄÑû…Ãõ—ÚƒÎ—¯×ë¥h¡’¯4[–çžû„ásÌ[2òvqâþM®¸µ/)CzÊÅý‚¸ÿ=ˆ;î)#‘Ž÷Õ@¤£¥äJ£)œQî9­Ú¤3Æœls°¸Ë¦ûQ…5g(î’ÓŠ;üKÂ2Cq×=Á¬‚¦¡ên:´…#žëÆ@á“4lÚUöÂí´B»»ñ ÀÁ@qúÄ62¡¸Kp„BŠX»Ú~q¤¸ŸÂâþi,î~r&Ye'âÞ{è /#3_q7ª¯£—b'îÄ´oãO¤æŽÁRç"îäž€¶dÓðbwö “Ú2”œžE–IÊ­w±¸ƒ¹ÿ«X‘Ö„_âŠ;ÛÂþ HW™1â¾aRLË—z@ÜÓXDÐÄ]k^`,îÂ¤Ì¼îÄÜ¿õÆÉ»ïžôúÊqÿ>ÊÊŒw`®â%`´J¾˜<â~,&Ìböñëí;Ô0v*ºicîÃ qç5l±ø©14·„eûéåcÀ1á˜…³/øoÊ’¸ŸCåà™Û¡û‹?DíTcÑÚö–7Z5S­&w{ê¥&ô~fA*´uM¯—êÐ²kíî4c/•êõªù ^®%Ñ¤ž"˜q¬pu£[—Žkíòq3e÷éžs|ø€ÅýŸ&wÆÛ§wXš:NÜÁŽ–™Rcuíiöá#f¨ÚµAŠ;`ë(hj:(î7g îRé qïNu,*§ªË<iFE£.2YWQNÃË#iõ®Š’Ñt $åöùŠ;p
q¿õì;¹ÓÌ„KÙxq‡çc.â®Q¯wRrÇR	qf)î¤ä zQú›q_ îA­Ò(ŸÅü%ô­qÄ=¨¿6U î/ÁŽO&îÌIO èÌÉ$6Ø¢VQ™õõ_>}2¬äüÅ þ‹“7¾õ˜ úè„×ò×AÜAØ™â°ù,*ÕÍŸ(Ä<7SÃ	t|hS"©ž,îÜ{w@™ãb"îâYBº³…µ—ßñ˜ÿ=ÙÙ1É]\ç´~¡î›õf¸‡üh¥c¢±¼ºÉ´Ð§f»\tD[À»ÍÕDC¯‡<M½Þ¨†Ì( “˜jùXô8‰ú>& 
_¶{Û~ÞiA=YïfgÜm‹×ëTÏq¬ý_øm`¸ó½eÜaÈ›”ù6x;ˆ;?âŽÄý»½¤Ž¸ÃÒÔ?oïk‰’2qÇòŒC2‘ŽŠ¢šLV«ìDÒá=½”Úö¬EÎ bÉ³ëtÎ)Ÿj”®{Á"î°'<qg5ëF(î¤šÞ3yÆgyá97µMÓhvæÂ’+¶ÈžFA£ ŒV¦f³Nf×uä´:ÉÀ%šVdƒÏ&Ë0q=åwéµæ–  XOºÊÜ(îì3Ô›š:XÜÙ¾îàêDÜñ%?Ô>+_W¨TJ…R«5j•»AR0¾0âÎY³Kžô‘|â~	•pÅL`KîèCèÒðâçä°Àn®çåƒËë‚ÀˆàÎ0ÿ>8÷¼ŽÁ z×ž}¹sW1‹µ©kdîø€:ÑŠÀ„¢2üß|É 2Ouƒ0TÜƒzâŸÍC[@íJÃÁ6ŠV£|Ï&K¿÷ñ\†/‰‡½óîï¾õøÝw~qÂ¹ÌžŠÄÛÉ](îÏ†úÊ€»síýTâ¾¶ ¡­Dåá­­IÄÝSkž?°)”Üæß[]¤Ôüb¹püÒöñØ¸÷¾£L, ˆ|sÙnëç]iéõ!(šPf°`=êq4Yi×ìñ¸²2í
t~t3-ÖAÑë0é8Yo”1‹T-%“	ŸzÜ¬%ÍÕJ¹m··ó)K­7Š¹©!ì$-ðù†ˆ;ãíPPFÜÁÛÐvNÁÞéÁÛ¿âŽ#îàíÿ£lê?p§/qîÃwH÷Õ€ÚÅh{'ÉM6µ‚Ý‡’0üÃ†G‘’•pä¦Ddw*ËR9÷Ô‡DÐaÃªMfºcŸÅâNØ»À_³]èÈp€'îÓt§i¥Uíu²÷œ*Í~“äršë¨'¤÷7°FèµNa‘vé‰û:\
ÏRp°¾¸ãë1JÄ*þTpÅn‹{—e\q=KSÏ¹u¯¸çrsê\1è!«p×@ÄýÐ¥˜—¸cðAJîˆË,¤âŽ¢éÍ±S°ò!lˆ„Ì
Ûà‰û:…=smgWõ¦ÔîÄÞMß½t÷î],î?0ŠŽÊçFÉº:é6{H³ÖÎÊÌógÛWL>7 ±™:¦àž>R)´A	$ÜG÷‚œ¿¸Cè­¾óÁÉÉãwAÉ‡ÜÁÜ¿æŽB²æ>¬äN*î¿=\Ü	ûÄŠK&à;âÇ/9üÔxÜ:^Pf\nµ¯MË-2ãnÐUf‰×Š}\Äý~”û8S‘,˜Œm‡½R2Ï·‡Œ¿=ÔaF)E… Ñc²Ù†	I¥Rù8YJ–+É4o7ûK¿š:&¢ùv­ÖÎçÛåd)QÒ›cPŠoZâÇåV³RNÇ ±^;ÎGýúF#™/é‡Mg:¨ž‰¸ÿõHq‡¦2xlê@qm?R‚¶ïšŠu0¾v)h§úÚªZ£2y$qç#‹L¹Ô’8™(q¿6ZÜÑg‘â¾1ET†V)Tj™í‹-bêXI³v-WZaéj÷ÍPÜWÇ‹ûÝ©Äýâ³*¹Ë]a›-È ¢Š¦~ŠwÀcÒÎGÜ7ùâÎª;;¿â~öâ_ÅýwðvÄ¥œ‚Riå3å¹‹ÁQàu­èbýjßÙž¸£ÄÄáV§˜k,ÏÂ¸¥Î¾~n®¢6§Ù´ÌöHû“_A/Hž¹¿sòh,óþû÷~}Ä}Èœ}4H´¸oëÅ¤Ïy Ñ-FÑé¯ÔmˆŠ;Ž)—-nHGç§Æ`ç<´Å8Ó&`Ëáµ7Ušš;z·»Úp‡(}£‚II¥h­¶…[ô~w=	_BîÅ—*·šÍ<â[0ù´mÏÃ”¤hDÚ†V9®³ÀT¥„ß]M$¡d´Ð´ë`$ÜÐAÂ;…¸ã„;IÊ|ÄGÜIOž¸ÿ5i)ì)Óíâ¾:PÜaJê‘Š’«´Y¨¶Ëèã~¤„u„×9«‘Žw@­¡¦dW ™˜^º¥OÜ%/]ã
(ÀAä!âNüŒ'î¹)ÄÝ˜uehÑƒM.¨»+r‚ÒèÌîáŒÌ„â.†ˆ»ä&ìîpqºâ~çÎEdç¢Åx°§|VÃR!ãÌ–`%Ò!âßä‰»Tmœ¸C*	Ž	¢á·±»#X©h»Xq¿<^@dœ¸“Ãš4Kê÷MÄ¥K7nÜ¸páZš*§iê´(‹—î®¬¬\¸ â~kÂŠ»Âá%× æäR&!a™>qÇ×fOCqh&÷ŒÄ£Î%2[:€°(Š[ä)÷'¿:“‚;!ô‹ !äÉãG¸¯¹óÅý‹ÏVÜÉ„~Ñ—Å=.¦^æÚs%£õDÉ¯6ÉÐŸâ÷©pO<€ik{PN½5.tãöqŸ…Å@ÓDÓE›Q(sïPóú6šÝUèý¸£Ü±B¬êODÛO5bè°~à†®/å”Å ?¸Ë9ƒ=åóÚÛå&$hZ…B3îµ@HÝ`pXR…D´÷ÁIF,Y8N¥R^ó•ŠÖCÔôÍâÚŽÅýsÓŠ;x;^›Êx;+î¤à.ˆ¸ÿn)À“.:Áá´®ŽQÓÑ(¹Õ°K¥uš6®]GÅ°ÃÌê4
±M=ý…6îúÖ¡+îX\ì‚Á¡3'Š;IÓlLóëE&À!cF<=‡Óþ~'st”Ee\ûêHÕÚÅˆ;	¹K¥qG€·w©¤'î.¬Ü@âŽÆ+÷e&þþÚžŠš?´3¸qÁwÖ;9Þc¬ø÷ÜÌÅÎFð<HÜvq*~ªJ;œ€ÌLÜWY‰;ÐÀÔã%Œd#îkàíw.‚»•”œžÉ€¬ë°Å;7@Þ/.¿ÀQ‡VJ$Z,îÝµâ«€­ŸDÜMÊÉ÷¹#ì…Q\&rS­…Ê¿-R|
ÞþôÉYÜÉD·ÞEâþø!÷¯L'îÀ¬Ä}kTA5@'î535ž&wÓöZÜgÂ»Wgˆ7›ÑªtñØ.ˆI¹Ó%^µ|Ð¬¨25†Ø¹EÄ}Á‚IYÒùŽ“==?i7»K±XÌ¯7£–5æh>
1õh;Ä`¢}µÔ(ÁJS(š0 Á+I-íh[çð¥ŽÛP~Ç-‡7ÕB™¢‰F	nn·û,‹3ìÍO ð!wbîXÜÁÜmÿ<÷Ùž2ØÛ'e^î&eîaqoÿÛSÖ¦OÊíân›œÐQîT3*M&SLË‚»4eÌ]³å4Ê¢¬ë¾R€ñÐ!2µö-#6Á~	Ä)WÜ…‰"îècsAÖ¨®—÷'–¹
"´½ž/RÇ8<L#6ºÇ	Åòè~‡9C-îð˜·¯ƒ·ƒ¸£Å»nõÁ¾Ó¨ è9Ü‹—±‰¢ÄD÷	Š»Ç³¹ÆÍ!*£p¥Ù§w.¹#†Š;ëÎè¯áâ¾*RÜ1âŽauž¶Þ_xá53Ý-í½qçêÕ;7l.J©œM®ÉƒÄYÓÌŠûk»”øÕ©½}¾&wÄ*¶ö¡â˜bM²Ò$;éÍ°5›F+Ï³pçé$î`îg´4•¤e~ŽÌýÑÉÉC&+ó2ÎÊÕ©HÜÙå©_cÍýE,îŸGê=ƒYqÿÓˆ;i'>.ý.ª»„]LÄÝÎÛ2¿Pw.•O„­exÒìUrOò§’¬;¡A&Tæîè¢à¾`ˆR»7Þy¦æ} oÚµv4Y?@«	Cõ²Åâ‹§šår¹+Å’±$Ú}HÃ·Ïžû‡Áá°4ËqØ;‹=®Óéç­B4††¶›­TÜëµ8ä!X`±j¹:fJÄ™‹;ŒMq·Eö­rÊi:2ªoG¹´M0i Uƒ”»&kJK¸â~Àâ. œ¥¦†¶vÔ’!H¥lÆhOw8ú3JÜ‘r!dÓ…Ü•47ˆ'îÝd6|9Kq¿Ž)îì-†‰;¿=$ÏÙáÓE†OXq:µ±Ss‚Ö7Ø²Œm‰ÃiF¾Æ…'îs¨¸«ö/\B¯GÜoö‹ûÀÊ%OÜÙ‚7>Žæ'î«üJ;’u‚PÜ/¡~Bç¯^*5ûÎÍ_ÂâÇ	+îoî‰¶~Ó†PÜIk'¡¸3×ÆâÎþ^,8Å«nMKÃ«M¢†4[û2“•÷÷rO¹Ã—F5qŸ§¹?þË{÷>zôðáY‰;Ñö­±Aá5È°]D1Ü<F-Þd½?ËçÝ{”At ¸s#îãäbÇ±HÊ,X H˜âùX¢>¯Z;EA3Ç¼Ý/7ô–qJyÈ³YìÍ|Ö¡&£^·8t>‹×î‡/íq(¹³'qË–Áfj¾m_¾PnA‘]g¾¶bnÔZr$æ¦@ÜÙ¤iÙßÄýK‚¤š¾ô2¿$éâN"î¬·ÿ9xûôMeÅ½›!)V¥Ì„ÓN m5ª/_[f”Ð§!"Sk”{i	†7t;~HYx%÷Ó‰–‘cîë’Þ¹Yœ*C€Èz¾ƒ]ˆ¿Ö#oï‚Ô5¥A0«T§÷b·ûw7Ÿ}	Ñ“w|Wâ á"sg·Ÿ8ÁX~/ë¼Œ÷bk¿KSA³_¿È‚¾.»zõV?øràÂa$\ÌBgK«bNâr”î¹j7.ƒaóuÂœÅ]kzóî]¦ûä&À,ƒ&'sÀí.<Ã–]kÇæŒ“»æ’S›g=|”¹ã+’ÜˆÐçe"îC`0÷óË\Š>8šÉË•±­ w®’Õoþ„¦Ä¡
²»MžæÅÆ¿ké}{ƒ]¡B¦4±È&ï)È]RiD»ë	e2¸½V-ëü;ÓÃý£7?:»¤á­“{`î'ï¿ÿÄýe4ƒI•Áa™WXsïëäŽÍX»Xq„!ð¯4¬Ò‹¨¸;Æ÷~.÷…c^^Ê]/FÜùÖ-´ïöÁ¸”¼c‘”Y°@$^˜"Zi„æ—‰5k•ŠZN6P™*L9¦`Ýi;š¨' dÍëØÖ—Cô¥å5X|hø’ciÛákµSöh¬ésXP‡È”eKçó†½ùÔ)$¼ýÞŽÅýy1âN¦/!q'wRpÇâŽîÑWpç‰û*³ZŒµn˜¶¤‘CY.Óh/Ún§QîYÑ	Øö•ªb ®Š[— Üžã,ë\9çéz¸Ugr¾€Ygjæ2ÖÜÙX‹W×|$×ûtÓ_F6U[™ÝÞ*R5gé÷õ›ºª :Â^„_$†Ñ9pœu´y< ³ôê£PJg
°ØËY ]Ë`&ë	‡ÃéˆKEÏMÜýN*†ˆû:€–;ÏmîÍw—ÖðAFfk&.Í€v™7k€=Š†Šûj·S»Ðßñ¹ÁhqÇ+:ÞvwùçÊ¸ÿU8a»õ#£ëŸìR3@ù“Ô£èæAVìK½gëöp"Àãaqï]Æ9C!ÚŽ_…ô.Í›¯L‹‹åÃY^Î£Ž¬K= îY[ÄùøøãÜŠ	‹ûÙÜZÿîÿ¹MÀõÄf01æþgbÄýy,î`î§÷¥ÑKOÇwUÙ2,M6Ø´dcüŽæ<¹H\·ø>q6À[·Ïs\}kÑSfÁ‚áx[±Ð~nÚ¾ãn|ÞfjêåX,^_MVP˜r4	3Q“Ñ6d`Îé|­h¬ä/Úq¼1ét]ÜÞ®ùZÉd»ÍÃÌ$øüYö Pë÷¤¨A¡ü‡3÷{“‹ûÿã‰{Zím§äÐÄ­HiÂ«—ÓáË·#…R¥-n„;Î£ L
ôn@œ”ˆ;iäHAM±x8BÜÁÜS‹;V®©F§*²‘Áâ~áÂÌÄßt†ì³Œ¹Ú&wÔIŸÙ	KŒ·#q?Å]ˆ¹qã"aq‡‹o ;ÜLç²JjðÄ(î8q—ô¬£2E[WÜR+áõŠ»D‚Žô+6(6LÜIüåôâÎ½ãH
Ä}åÎùóË/<øéî^P«¨`ÞÀ¹+"îoº(q8!Wô‰ûMüL1§ ½Ÿ@ƒ@Ü7L*^¯X\ÔoÃ¤élÖ0…×&+¥ÌI÷´Œ¸ÿ*xñ—•Rpˆ·Ïú­G÷îA[™‡–9•¸SŠ;L\Ú=â|ˆÑ/MVOˆÔ?¯÷{s¼ Ðå-A¹|k[ôà' _$e,¯fo'`ÂÑqG+…J2ÝÕó‰û”»Ëç+…${,Yn¢xŒýH7aòi9­YRÍã¦×að;´eoY|)»Åâ…«Œ'gOTÑ0UJõøqÿÜÄâþž¸ã¤Ì qÿƒ>qÿ®¸§MY-ˆ‘6k5v:š£\8€,"g¥T&u03:ƒ6Q#^Ü¥é}íi¼*£w,.âÅ}s¶âhÕ›g î 7Á÷•‹?¾µòcÐv"îËçÏ_ìŠû®¸ßáxûÅ£?XÜXq‡‡;*jæ¨LÁâ~s¤¸onÎ^Ü•{‡XÜ×¸â.ùõwÄ8q}wÿSPŸÖ×…âþSJ0öHzJqó^s¹Q”¸+ŠÐÒ*ã	çë9#cTÃVÕ“AÜŸþòÖŠú‰piê<Ó¤pÿ­ÇÌìTœrùÙ‹û–A¼BK–±‹S-n1mÜÅa©PÊ<é®ScinsÏ9„öí»ŸÜ‡»(¸/X0ˆm_¹ä¯ê©ùâ¢•r¡ÐnEýõJ9™,$`í(§tÐòöX Z iÛ}¾v2õu2wŸÅº.†xc±•?d¥Ý×>.×DÜ¹ÞâoÞÈÛ™fG"îàíß#Í 9w(¸ãµ©½ˆ;÷?áDÜÿ¦;6µ+îÜ.r4­+¨¶BJÅÓ«“1RŠ}4ƒTÕ8!ÈºÍÔ‰Uqµçª¶Sµ‘;j¹®¡°F‹!åQlÌbÂ€+îèKÜÊb“§íDÜÁ*¦š¦]í7$Êr å$î›Àq_ãhXØì`qÇÛEÿA²¥_àþ º-1¸–Þc¥çí·~Œêí·Vzq™t¢°÷tXœy<EžI_¶ú²{f6PÜaÍÄºÊ¬\ âŽŸ{®¸c™æ‹{/*&‘ˆwbî¸¸O;'TÏÜo¦çí›\¤‚•%0}	½´Ði=ó“O©•³y¹ÜaÅ½wXZÅ¦ã¥#Äý¦„œ:Xogg¬^ã·¦’+â’õa-·0ÏzN©ÐE­–éù4|kùµ÷úî ¯àPóæ¾ù0wf¬R…å©`î î`îxYú
ˆ{ÏÜAÝÆÜaêÇ¸†#ãí•ÙÍŒãŽAšÎm-rÿ­ê¬Ä0´8·òrï³ ®é$w¡}çÇDÜéÊ¹ERfÁ‚ 0Ž'£ÎÝÛ+Çvh¹žªU±üq²š($+­”ÕSå$` ½c«×y½>hÊ%ömƒcUDà8†%®ÈÈLBÔÀˆ»£XCþ²nzqÜYqGÞ.÷?ÇâÎ¿„#î€$m:R¡þé»¦päH®Êª/_‡/¯F2ðÝN`5§1º‚«=q—ˆwÀcRJ­4{A¸¯c„â¾w€•Áõ>qÏ©¦ëŽ"EÞ>Kq_›DÜ¥œ—-ItŽ%î+øú¬tsîð_WÜ™{²©&ž¾IkN£V!WÐƒsåÄÛYy%îsœJ;ƒÓ‹»dqf)î„ž¸#sÿçêý_5£ˆ;wö¸ZFâ.v “ÂäéîÛ`qGŒ÷Õ¢rª>8&Je²Eë“Ré4©³ZÈ·?}/÷ÑG¯-¯äž`q?‹„;=qÿ*Œ`zøøñËÃÅ˜½¸þßš/Ÿ¨ºÍ”?V0ø%÷­m_ÞyIˆw‹èb^ÊO
\ÇÜKì;Ôô-A½–ÑN°§÷}çcS,ŠFùÝfzÞµ}µb¯µ g£×žB­½-@ˆÝç`:Â¼µB)ÙÒ9:dìð7LUÚ†û8*æP¢’4SÑˆ3â^vã,Oû¡¥€Ç¦²âþånRæ³Ã’2ØÛyI,îàíÃ#î¿ô"î(ËLC˜5Óq¹2Fe6—ÞX½|yu5r¤Ñ*¡·ŒKaUÐ=)F îÂ(©¹wä§«ŠZÁÜù¾J )HwøRxÀâNªõì-¹Ú â>J51L6%C *È}F†)û ë®7åˆ»„UÄnóÄ+xp¨´r:Åœ»b %çCÌâ1˜[Ì¯âŽ"ßì½ÁÑáB½ÝÅ£Íä"u®ãÚ;Ò5ý7¥­ðUAk•nct¶oû¼¬ñÄ½¨š¹=Yƒ7qï.*Æ/î5„éï4Êî&¢wþ(÷|q¿Íp™KOÒ1#úØà—œmÊ;RØªèy[C‘)XèðàÁ´Ôl"îw€®·¿€X)îJµ¬gáDÛq;lîCÅý&+î×4¿
ÛWkhè¸²žÎÂñX4í‘¸ÿrå£§¯¿ðé×Þ$ÜÏ@Ü)úçhx*TÜ_}ôˆdeþq@CH ‹;˜;£íˆÓÌN]o·”ý])>Ð—½ý7A²¿ÍoÉÛˆˆRx5~N4µúàB½Á?NÌ^î]$e|î	ÖÐ.-"îü{gÛFžÞw¡¸…€µ®íìÙ+Û»wöBöN¸kŒÛ] n
¤é]Kå­h›\n‹\ƒ2Õ°âCŒÈÛßt%‰2EŽ<#ÊD$ýÃA¤E½-%Y<œïì €ßéà[»6Ì iúGòWŸßü†üÍpHŠ/#i×áÇ¶(’’8œ!­~Ï£ÄWÜ\šOž˜­‹$Ý¾³³èƒ=Œ;][_ÞXÜßÞ^…¡§ãàÛŽ±èÞþþæâšÏî€ÿ“\Sh›½i¸Åd²í.7>÷è–|nÑß™¸ÿ{¥¸¿*îV+îÿA!îÿMš›ŠÅ/HÙvo¡P.e™Êé!$Wâé2(øœ×à¥i9L<Ü¶¸œ·Û²(ß’¸CÅÝ¨wø¾Š6¤³øA†¹Œ8Aq¬÷Ñª¸`q—jû×.ßB]Ûq:8×LÜ¥í”Šír©ð®|	ÚòJÎpœ£Ë^«°Z´ïˆœ&U¸)”KöÂã¾fé²UõæLº6ê]m‰Xmà­wØ	'•ÉpõÄýz=qÂ[ùy÷ð Ð©à.óZqŸ±´–²)„É”âŽÄ}ˆ÷
íczES¸WÃ3ÊýÅ¬HÜ_\xAÏžíÍŸžþð%-âÔƒ_üˆ»ÔÊý4Ä½yfÝ¾’,¥Elccõ*î{‚ÐB-¼uH›š¤OyùÒÄqT¿ê…ÚûÛïŽa]õ§WpïÑ£‚ÝWÜ]HNœ˜¶/¸“²¹'·vw—Q˜}qwF+mÂ ¥q©i¼câõÐ·=åéüÙé9Ü‹8|BGLí£ÛKÉnÄý{XÜ•w"îàíxüRµàâN’2PqÿñWðšE4*3Ä•Í%ˆ²ÒH<®°…$

fº„	w(î9k—1Û Í´(îCõÅ—Ü‰¸ão$â>T :PÎp­‰¸ZwØ¢ºâ~	%9Tâ>*9¸cäÅ«ïÞüú›ç/^”ìŠˆ»šª¸ã`»’›xa*x¬´É•½·9çYøÃ³‰e³•YŽÒ;-Ö€7„èxø@l5ÎçBVJÑä“¹¢jÅˆ‰¡ª†UsYÓI‰;9f#é>ˆBù$âŸµ'îš7ºw¼!XÜáBIÜgÎÍÙôÙC±äíjqÏ·¨Ó¦bæªfÍÅƒ×œÇcT'JKX©ìcºgƒ¹’ÅeèK^Ÿýðük?,|,{ûY$e0ˆéo%qÿw0w…¸ÿWÝÅ½yY3ç{×ß Z?æ¨;Õ(²ÐB¥ª¿f¶RøÐ_ïv¶‰I+7¥˜<®®QŠ»6)³xŒv${I™=´ø}{›K;'o_p»“8&³ƒ•V––—×‹Åµ"dØWa¶’½Ï“ZÝöyúQèÙÍS3²89½¼¸3Õé†NîÎ'«Ó[wðö:âþ§*qÇwq'I™Š¸ÃØTh*ó#¾4Kfœµ8K“‹å˜ é\©TvšJ<ÈÒé+HEâi&ÜIT³ÙîB¢-–>Qq7²V±ýµ©ñkŸ!q‡‚ûkÁÜÛ÷ÚŠûMt­t{µâŽëÏÆQc<a5k.n«ç8Ž.°—Nsñ°ÑHÄs%Î–ò÷YÊé+ÍÄ]®eË) µ¸Çcfý£2ƒ¯ž¸_š½{†/é‚¾¤÷b‹Ý »w.ØQºÇÉöÜˆ!ÏÅ”`*¬NÊ\€~; îo5]š*œ¢û§¿¥wdîMÄÔ½+q×Ê¨Ã·¨m±äo˜@ÇàÕBÜ¿#KrÛQýþè*¼×½´ÉÕýh´^ eqAÀlDÛ™Á´ìP‰;þHp·;Ž^3È=jðÜ_Ù™^Ð©Ö>5éž¨û&äÄ„;9555½¼´^Ü„ÆÅ=_Ê‡–›Ú#¨­£ç°x¸uÀKþ.Æ¢ÃYY€èæƒ	E_÷/¡¹©õšAþ¦ÊÛeqoÿ.x;w9)ƒ×¦V—¦’¤)¸cqÿ‹¿ Ë¨Ún³Rb,³AeŠÏåâð»•)”b®ª©13Œ§ÇJÌäbÎÅh‘Õ&zÖtƒ%›cu £ÓepOÈq«±~¥¸KŸA[™šÊàáH„AÖy"îQNKQƒ[³£•¢ŠŒ{µ™^uKÞþî[çÞ|íµ×Î¿Y{»Œ6åŽ…¥*”_Q]§	VHÍK’*†KTRë&KÈ„«w…ùÆÓàî` àHÂ]-¯Js7 4{*_¦ôoM‰Å4éh‘å”ŠŒ{­¸°i6w­•“;¯Rtt¶%de¿g™VÜxµ—¿{gæ¥SRæ¶üÒNZ÷ü&÷·èÖÄÝËW<\éíÀh’‹Ñ04ÔYR†*hÊÊÄ]ô@Î,˜C3…“2ðÂC÷sw?>Ë¥©1ùÓÇ’¸£¶2ßU¬NEæ®m	|MBnÙ‘¸CÖE³DkZÐ2µ?Ö°?d?dJ‘¸·r‡yá~ù&÷VvÜ•_€î©­ÅbŸCSá[å°ëý6Ä[\Vy·¦§ÌjRhNQ•”éMíñO±HÔ·¿<!]HNÏï.oM5¸´3¹µVÜßÛ/®¦`Ìé¸Çl`òiÄáðlû"—éOq-êØwºá.¾MÄý›UqÿMà;•&îÕ¤ÜÁÛÿ¼ÒSæ[8)ó§ª‚;IÊ`q'wàýÿñü“²“BÙv¢ÃA.ÉòÆ\™…_˜\Œ²äøLÆå*QN¼}H2˜°q@—Ö[âzÅë¸\ÀÔU\FšÚ:P³°T;æRv >ðPÆZÙ"ð±ý>yÌµZ”%wbî"í¸ã¯ƒ¸«:þaØÜå¦×£*sGâþ:X	ª¸W âŽ¨Í¹“V2äjµ¸H[MS¤ƒ(yÞc(¸¢l˜­[Ý•DÛ•¯¢ÄÝñ+u©$ÅÏª•÷k|Ð$èŒ¹p w œëÊ`¶ºìÞPÜñª;Ž.Òš;1sÕU}Žo¡Ý#`ë
p·'ØMa–¾}[§‚»)¾@€’;âõKw„–ÐC£µ]VqgBûxÓá©<|•/°# î–’×D¡î7ßzyûk_ø
Ë4¾DÄý´‚î!ãŽKî•»¶¯ŒŽâÞ_ÛÀ}|¯6%C
Ý‘ÌþµaÄÀDrqÏá€)‡šW
îÉM__«òW%7•÷ceªù]Sm¥flêæqAü¨:ÌÓ£Ç?ežÕµ¥]}¦,MLNOï¬¬/m4HÜL$'w!×¾you5•Jy QH{?Dëá¬žŽ8ÓöE·{i}GÐ÷~Ëâþß5â®NÊ€·'îÏŸ¡Â©ÉVb!&b¶•²eŽ+Äè¸1Ï—Íb‰…r«õöJ‘Ñt,î€‘sïKŒcŒµânlYÜ±6wo'ý6Â†Æâ~Yâ4ÄÝì»7Ñ ûs
Ôw­¸«2îÕk°¸“¾ZÉÌq02iW&”ã˜°<î_-^7ˆ;p¥ø õÅ]×LDLó¤I&wôÀUŠuw uqjOÜYÜù™sA§ˆûà²¸_¸ÓÚS9ÈÃÖw#ît{2ÅŒœÊ¤yf„¶ˆÎ’•ú¿ÿøw/ò³_ÇÞÜ>R‹ûéÜÉ(¦Ç§(îZµoN6,%õ55÷quÉÝ¾%´Âäôüüd]÷ž^ó×”Ü×Ì†òŠÍ¤Ð”UÕFâÿüqûñ^R¦GD¿}µ¸¾4¿0!ê”™_Y_oo¹™˜ÞXY;<¼†ID|¨àœÛ˜=ÁvÿX_wÒŽþ7[sãŒŒ~L¶$î¸àŽÅ]Ž¸Ëã—äf²¸ÿŠÊh#î¸‹;Òv›ˆ-ÆØ¸q g³e3¶ ]Î@½=Mç2b€ËÙ¼Y‹hÍÉ:…ÄÑ‘¸s§Ä®$"P óa@éKÇŠ;¾ß‰†ânà‚bi:®w5'!î7ÔâÙ$âo½õú9%ÄÛë%Ý%q×VÜá|i®I›: GÑ«{Ì0À0¸‡¹FÂšˆû•ã¨hªr¨Ý+î€3;P‹; §°Úw ™¸KWµ-î€BÜ¯cˆ¸«@#Â3ùÁ„ f×…:âþú]ª5qßÀ(œýxqG§XÜ;ê$k€ŒÉÊÁº‘‘«á„Éœ-9ÍÿðñKæ&wðö7¸ÿàÞ'e;IÈOÕ_Ü›´Iq¬7šjëdåÇT™ô)¡;’Ëžšjß´¬ôÊbüýæâîö©–áÖ¾Å=îhö)èõ”éñ
€­µ-`tƒ?²½8ïNêé¸Kë+[““IE…}J@ˆ¢ NLn@§˜TÖ¬qàg ÝßïˆDìŽîCúÛÛþñÃiAo&÷t÷?®ˆûn(îÏŸ>°á6ÏÄY>0[l´˜‹ÇÃqžX&$R^o†E2ñö+CÇ‹ûõFâNàa–Owêî,ç N+î²òhÄ”!iPp©Ä"þàN[Ü‘¹#TUÜeq‡‰ô¤$w|ª5weXF:/¬\r‡›#·«÷«U4}º%Ñ$´#î ä»¥ÃT+îØSuï*ˆ™ÙZq$qÎPÜ«h×ŠûõzâçÃœSÐ+¯JÊT*ît»âÛß\ÜáJµ¸#xk'›Ì…3b	þ'X«`ËmÔÿ;šE³_ÏŸ?Ä1÷qý‚; œ¹ŸŽ¸kkÈþ]¡	ÛýM·×¬ƒ¡IÝ2Ußâæ‚ü»Q©ÞB3¶üJqï¯¸/&k&Ù+¸÷xÅÓˆ{?VÔpÎÃ¸Ýw½Óa°ƒžLLîÌ/¨VøLKç“ó[Ó“»+Ð§=•B#Q!ã‰ŒÃD¥qw^•Ó-žõééÍµyAwÜ°8õKŠû¯¸ã¤ŒRÜÿ#÷ß“Å]ööž?}d“ÙdÊÄ:ãtfË±`¦l¡
Ê…\ÙcaiªÕÅÅ¯¼s¢2 úˆ»1“žºQw¶ÛB™K\ëâ(Å} ¾¸3-{KšŠ;È¶¾âÖŠ;¨;wän
q‡š{íÔT|ŠËëê´–wµ¸_ 5wd°—‡aCeóPÑ½qG¤°²GëŠ{:Cé/îVvðtÅ]6w¶×÷Ò­ÉÜÑãÅµ"2¤ÓLLÐ§ë@)î˜s¯·Ú²&ÓŽ¸kJtr¼ƒ³,e†¹’@Ù M)õ±+Ÿ?VoKâþÆoÌ~tÆw‚ˆÚB‚¹ÃðÔ¶Åý_þ‹öÄ}Lý;Ð¾<ÑT‚÷úš‚»ËTð¯èP¾RÝS;ÚÐÎø¼ÐŒ]•€ÔÚ·cChÎb¯§LWŒ~m0|Ì·¶¹¿m—®U})½'ºZ\Ù™\˜ôfj‚|ž\XHNnÍOˆSÓ‹‡kkû«ö>{$²½A[á/®oG#0lI~¬ãP´ïó UðOwÄåÈÛ_ú’Ôòê¦2ØÛå¦2ÿGÜWq×vqÿ/Õˆ;)¸?yú µÔ3™ôi¯Ól
ð|ÉIY\¬Ó–ó%ÊR
¹x6—ÆÔDeˆ8ÛU†ôÊSª»+ä5uLÎp£
ÀÛ‹{e,‰ÊÔÁÐ‰¸‹&+[É¸+Z3v+î„úâŽ-ù½÷ÀÛUm#/€ºcWù{ÕÎ‰¢ÕÊ{õü)ÞhIa™8c€[Áâ^E¥ìDÜ‡TÜÀ´åíDÜ£Õ³âá¦;H€*3d¯Tö4:d(ôÞ{è®iÅ]+ŸZq'Tå_©÷¡Tß 9"¾J'A=’âyCÚ«WÂ]òö›,î˜œÚe†ˆ{-m×0ÚQO16Â;!çLÎfòÚÌÞ õÓO_¾„V’¸ÿŠÄí£µ½ Âàþùo€¸“»fSÕÜ¿Qm	âŽøçŽw’poCµç×ú$wm$°¿âšþ=¡{vVU?—êÖ•°+4‚|)i|©^A›š:®ae/)ÓãÕÃá‰€½RËÉ¤{g{¼¿_iÆã_
¤}cË-œ4“ÂI&'¦æ÷ìþ”Ç…J»ÔÝáðû=ÑââaÊÏ\è÷-®§<‹Iá¤˜÷é,îÿS#îO>yh ñÁó§–ÂÒ…@0˜ÍÑY³3K‡ùlÐEs9Y•²+Ì;r¡ÐIÜá7t˜áƒf±[¡(5w,>Å ÷‚¹-e7‰¸/çÂÄÛOLÜqjÄýÖ-üeHÇ0•OAÇÑÉ¥ÁÙÎÂ'·d°»kTŠ{ž1Ä9>:–ÔwÒíOqÐ¡ª/îLâÄ]ôòh§ÕŠ;y±òj„YyÛ¦[q'a¢çÝ‰;\®w†cn±Alw¿^WÜ[À"â>Ú¾¸]nÏšD/gÈò	³3@‰ÖlìÓ¿;Ê_8w^!î_ø›Ûw‚g[p'ˆ¦éÇÄÌ]'q×¶7<Žca~}ïpï>tOö×+¹+ÅÝ£GAkCu3©¤€X²+nsIhÆý1uÅ|LißcE¡9ó}½‚{W("#áH­-/oúüÁiÏŠ$ÏË{«ÑÊ3xÜo.íì‚´ŸSn7|˜ÞÚ8t@»I_4õCÏ´Ö—Š¤<Ð¶Ý¡Ó>€ñ¨Éå…¬º¿öëDÜ±·ÐÅ Ó—4Me¾…Äý·*kSÿÄšÊ.î$âþìéÑ£	a{úþQ0ý#6VFÍcl‚%7¬%Ž/°¬Sòx„Ž’QFÁÙ…ëZê‹;v6ÎeíÒÜM1FåLZñQ»’ü
¤‘¹ÚwÑbµ:-Y.cÆÓŠ*ÎÅ]eèúciÒÇþâ!L•Õˆï££ îhÖ>ÃÐ†ó73GÓôÝ¹9–¾ãè¹9é“;ôÜÌ]tÅ{ÎÐ,ŸNs<þ¦óùü˜çø¹™Û³³·çæx.Ï„óy&,a€õ}ù\)˜`óqÆˆ¥Sc^7ŒCT}ÛwTr'Ýñƒ‹TÜuÇRK/aªÇ¬úZë:¼F»ª¼{Êú±zA¥b¤SqÈ%ÕW8¾Ð>`2š5Ö×QÁ3ÜºgÒ)á>o×ÜÄ(Â2òA¡%é¡Ææ4÷Ž–¦šÊL¨˜’þùB0è4¡%øGŸÒž;Ú.Åd@Ý¿üå/ÿÊî>:£^ZÄÝÇßÃâþ»’¸ËæÞ€¸Ëæ®w4ƒ	Ñ$ç®IÊ(ÏEÝB+$ÝR3˜õýHŸå-8¶„î™"íIy]¹jÕ¿ØÖÚTµ}—qUÝx¯‰{Ï+¤óë¸=µ¶3!€½nnïÂâOÏzRžƒ´UtHÕ<¾ýÅ¥Iá™X˜^ZÛßó@˜Ý·õ¡Å(ã‘ÕÃ¢Ïn×åî£l¿oW8a¦V<ZqG	÷âþçqÿIÜ¿­wÜ’Œ_ÂâþeÛ&ÊòðÉ“‡ÿ:]±¹R!#ˆ!&ƒÌ;Ïr1‹•5•e"î¨¤×¸Wäæœ—»ËÊ¤d´šÔLÜ	¸KGÚÙNw›P&›a‡A§Xòš‰;¦#q?8˜…ÒyUÜemb†`ëãÇçr“çY:‘)•²¯†^«ÓéôfKA«°KA¸®¶ZáÚl¦\ÎdB¡P&”c‰X®Í|Ëá$VpÊ¡Mç
›39¯(X‚	š”`;fH?qW­GP=®˜‚EÐ*”¿uKÙZFu¸Ð}ÅrN´Ž¸Ãå­‹»êúFûO­íDnë„QxPÈ;ËÀ0·nt²ÉÀmu¸_¸pÛ*´„9ÁüjufUeË‹{Í=í()cåY'*»çá‰Á±%›Åd_¼|q ëjÏ«Åýc¦KS	"ÔÜþ=¼:U+î(äÞLÜ‰µ7÷‹o;“¾»ØôWª}CÐIjy*Ðø[íÄ¾«Z\:Vcß«n¡)Ñ>ÂX/)Óãó	™ìˆì¯ìÈ1HÇL»Ý»‹›Käi°èñ¬î7Ñ8´ÓµöyèÖžZõEP8Æî€¾Þˆï§ü}º0îÛ»?Þ~Ò$í­‹ûÿj(î¸àN"î²¸?;2ËåâGGŸ¼ÿäa —Ž¹Œ9k `³…
Y3eñlÆåâC'*îÀŸðš©®âô÷6&§Š¶l(à,çåe¨'!îÔó‰ûÁí¹™ÙJÅÝ€Äa˜8GçØtœ+€¬{±\"èõÚL€()€§€h¢Lb5Ù#¢«¥”€ %£D¬ØbÍ³h²xV³Ùæ…>Êãëˆû“÷Zq»lÂ‰deŽ÷"îZÏÄ×‘¸Öˆ»ŽÒµ%è‚é#q×Š»³µï§lü¯‚¹w&îá‚YhŸlêô¦`ÖU3é4íµÚ¨Pž¦ÑÔÔ‹µâþ½pæ	wÂô/N\ÜûU©Ñè”Ð.É…b¤¯!‘]AÖÆ5c&-6rŸXêS7•SO_…¦,õš¸÷x…èO­mhŒ|bJñùÖÒòÖ$´U?U¦&—×V£Q»¦¡â¶þHt¦¢¦V#}zÝ€iOK'éí¤­w ¼½FÜ¿ªwqÿ· îRÄýÛÕˆû÷Éø%õÚÔgO˜R¶}òþûï?
ˆJÄË&*­^K9áJs%sˆgØgTné½ø«@+â—4w€a!kÇYwÑJÄý½D”´Qw’q‡ÓFâŽ,¡õø4e³ÙÌ‚³‡Ø8 …¢•!÷[Š;:Á bzÜ gó9×Ü÷k&Í¥Ãá4]($Bo0VÈ8‘Œ›lV[§Á¬ø ï‹Íiµ™M‚gá*©Ê@q¾
Ø¼n VÜ¥f>uLTÝîJÜá)Åö2ƒTN,÷8ð?¨wé›†ŒÁgc¸®qWÙ9¡Æäˆ;zZä…´YÒåðžDâ[³YA¼s—ê‹ûl¦ÅiÇ¦r¼±¸kd½Úr Ïˆ„èâ%Ácèe:ÂÂl¯ÙìºE¿|q	µ²¼ˆÂ2²¸˜	œ}Á<·~ñ·ßUŠ;É¸qs—¼½UqjJp„•Ž6scµqÅ}GÐƒeÙÛ?- n{a-)4f¯_½6UÝSf¾õ¥© ý½‚{Ï5þû»SÂgŽäüÊat¼/ê‹JƒQÑ|¥Õíû{{Û)ÔþEü~ø·~Zw=¹î¯/îß‘îòÚÔß&I™ª¸ÿY›JÄ½qöô% >ùäéÓ‡ž‚·?46zÈÈyÅP<í¬9cœccÖL| ^(sF$õÅÐCÜA¦ãl!`îô=|Žˆûh—âŽë˜¬µõfò6T¤¶…x¥¸cÕ»†P•Ü;wèòi#òörbâ2ags±P‚Î•½6ÔÄÊb£º.¨:V›3‰%±Dåßs‰L¶sÅ`_ ¢»3ÈÑ|>ÏæhŽ1t'î@âÔˆû0ÀÄNDÜMAŽ¼Ø:kq'gëˆ»h*îyÄ]¯©©N¼½®¸Þ[|ahaßé@ÜGé Ð>66î¥
°ðÄê&‹Mäo¹Ž^\‚m¿X+îÎ•°¸Ÿ¥·“½5¹û‹ï¢~òêTdîºŠ»ÚbíÓBGÌï7¬Dë#înUÊTœNõŠBÔ÷ûöSYÜé5qïñª ¹õõiá3ÆÔÂääÒ¶}Ì‰J‘˜q¿ÇwmeñRî}zÙ„62ÅÓìÏÚ+MÜ‰¸'edo']Ü+w’”Áwm3ÈŸýŸ\Y|úÁ¿yòðÑÑó÷?	š-&[nÈÈR¶¼!ÁPðõR¨ µöx®ÀCË´>§dFIß
ƒáê0p›¦ŠíRj›Ê è§ÊŠò³t*îF¶(,UF ô@åLõÛc+ËUE"[üõê,¸²”4¡q°ÚðU£)º+À¦^9ƒÏÉHrÃÄÐ÷\¨”¸;Çæ\‰LÐj1ƒhëi®æR!–)ç¸<„¯ÀIžãÔÃ¢y|=í‡«ãö«î¥Jv×*¡F_Û2w$ÈØÛ‡1aœq×KBŠ#aàˆIÈö®z™¸5F@ömòYÃè–VØk§ýßP£ÎæÔ—ŠŸ  rw&m¸.‹‚P‰K0Ò«:XW)î—èoÂ$¸®g›Aí´:=fäÁKÖ*´7ÏZ²|µ#\†DJ¤\ƒ/^ºfaÓAÜ/Âè%0÷¯|åËÿøÊÿfæ#ïßŸuÁ01ÿø ­îäæ®wÒÊÄÀ}Ü[wURæ0Ùi¦§Ø¨.¶!è¨ê¥¾ˆ;®‘Æö›©·§6)£šíÚ\Ü'TKS{÷ŸcüÅå­ÏX¹}Â½³¼¸v˜‚,»OêNéúîWV6‹ÛŸlÐú1¹±tjÞîžNÎï{:÷o«ÄýkÄýw~y$ÙNòÑƒ‡Ï>xvôè!äÛmâÑÓ@†ÊQeíôÒ“ ¨BÌ$Ír€ZqG´*î@µ‹A+î@<a3u*î¸*«wt®Ž¸£|z‰»7Çà®ïÔ=X6
7÷Ë—eso[ÜåÍ2pe¯7ôQÖëtZ()¿ÞÎ¾ƒ ;|í”~’Ù¡\b@?Và¯ ¬œç‡ù¼a˜xsá¼HÜ¯0Õã>PÓK¥‘·cÇ´ÕË½®¸“%Äz—Üg.Ö÷‘úâ~U%îCx@©Å?~Ü@ÜQb®r­¹¡¸ã}q]Q²¾¼ï9aàìˆaø2mÑ)(3ó¦4·®¸·øHÍ,Ú5ˆ;ëhúW6—.f$Ì–K6²ˆVî çÊ_ª/î_|ãÏÎ²¤¶¹Ì'î°ªcqïïbi*aB“–!?R6"µõõyâVŠSM†¡¨².5/UÓÇ”ýÊXQOÜ{|~ñjÌõ¬­}kyñp;…£ÚSpbOí‹‡ûÅâªž¤ºzû©–¶×–ÖW¿©›Z÷¯ªÅ¼]+îP÷ÿTíâþû?ûåÃGîÜþÉ³g|ðzø'ÏPÔÃçõ"ÚÙÏzCi:ãŠÙ‚R†1ªJ€£¤S42·NÄ}çr«â®T†íhŒ½•­ü˜QàzFm±“ˆ; w|Â{ÅÖ$/†E’’…Â¨L‹ýN+îÃ î˜Ë­Š;:	3ižgyBîƒe§NSG@YœV¯ZÊd2%h8S‚.2è-•{± s/–	ÅîÑ<ÇÞ+@¸¢ãÍæÂÃ|¡Àç]	¾22UúÐ\ÜÝÄ˜ûhEÜÉNcñAÒ'ý®,îšüb›ˆJÊ« žc{£¹¸cmÇm×tI”­<A‰»2k"·rWˆûµáxIÔÇ!cçßDêþÖ…›DÜeæœ­FW
Ìh5[Dödþpa#Àu4})D[©lŒ6ŒÄ¥{VÁéµ”î%
Ê Œ{¸ÄýÜÍžyR†0±ñø'*q—Ì½¦“û7¤°L[â®]›êÙÒì¼©Žæ››‚.l)ó.÷À=ÞââÔ½š¬‹£¿¶õë½¥©=^|ëóÂgŠé•õâö*b¤›?º}¸¿¹²¹ñØu|ž¥÷¶·W’§›Ø_ûmO*å£nâþ³_þô‘T¶$OaüÒ3h	y„L>øä/ÿêG?fù+q&^.åã^!ÆÑ,cÄœ¢¸¼µ“”GŒÑWÜ[ŽOS1FdJè*îapv–¦]3!iN³´+ìpå©ÉøÈßËÍÝž™AÚá$pé`6?ƒš ûì:åYî "îÁ2?Î…bü0ôÒ‹q7œ½¸Ëè.îäát¬¸hÄhIÜ±º’¸ëUp§îœq‡’ûëuÄ}ÆÚòJn®Cq‡¤Œ(¶} ³©Ä†a™®+“¡Ì¥Lˆ½õòSú ¡¸ƒ¹ÏY‰¸Ÿ9S[?ÿ‰$îÿN÷¯þä'ÿª{q×‘íI/¯¬¯ïN.-°ä©[q?œô`r[!î«S¸âNX’ŒªƒA°<µõ9±îÕ^÷¯©ÝägªÚžœ\YF"ÐD=³ìþhqeýpÛç×5Ô×d’§|ßvVßþõ¯}Óâ®¿¤wœ”©ˆû·ªMe¾×¦VÅ²ín”é³=zôàÁÑ3IÜ?A"oyððù_þ5Ççøw†Œy>ÎÍNv1iÜ<ÆØPÜ­¸_Ó,´TŠ»¤yÄKdKA¹“¶Kq9ž1ZK“`V%9CÌ¡²ù’Ør#Ê. ˆ‚9ËJÁèFâ^mY¡ªéè;®Wö¦$‡L<ž†Ly¢Erhíb)g&T*ÅbA³ ´o0”5äº;Gß»GÏÌÌ±s éáÙÛ3\~!i;LSeðø00|Mrøðe†¥yæ2€"åDÖk¨,Í¬]l‰G‚*Áq%üEzˆ»p"ˆÖÿÏÞÙÇ¶qÞy^(RHtˆèËUŽlibH­w•ô’^Ù‹8‹tÛ=lêíí¡MïÝÜÝ¶Ç]“_$…T‘ÍER½Ñ&’M‘”‡¢¢;IW€/‚H[oõÆndIµìÆŠË sP`¸‹öïÃ}Ÿy†|fø"Qu–}Z‹ôˆ"‡CÆúÌßç÷hÎ÷Ì:k*î²[3q'ÖÌ/iU]0• „Š{óâØ›•åÛ	øJ/%qç<º
ÿ?|’ÔÛüñ'Îž}ùårÄ¤ƒ¯äˆ»|siV£5™uû&V[D§÷¸¦Ó\,j-^›P+üæ7¦…Š;å=ÿ‘ñvîþìÆ_(ÄýµÉÁ¹o*G0ý±$îRŽ¸ïÒÒ¼{‰¨[[§FÄ½¯*ÄX[eN^«sîóšBÜÛKëâŽˆ{µ:)³GÂ}VÕû¸à~Ì£JÏxth›¾>4rmpŽô¹ÐÞÕ76ÖcŸYëÁÈ¥ŠR=×ýpJ-CöLwˆûrÁâN½â.yû—îw4•ù3YÜiÄ]éí÷î¯tˆ„µõõåµÍû¯¾ú­¿ÞØYÖé¬Ë[v<°%bÄ¯á<XœJÕD†é¯U-E]Ëæ°ó­RÌñà7€Š»<èT++I}}YYVƒ',ûM3#”'1¥\qTÜ%ù’vfVjÓhÇ‡E£	kZ´Øx¢wqoÈýnÁœWTÛéFž×`E°ŸtyD»fÞVƒÁê°gO±8¬Y»Ò»\Q2‘É•ô$]øB+‘.’ž< =WÑJÆÃpÕ«±@¼QâÂ
‰'ÊNºÅ‡ƒa®±ÛèÚT
Í€¾ŽÔQ‹ˆû)¦«”’ÄþX½”þÖ¨m[¯Xù’{FÜëÎË(Ä­	•çãoTÜé»:Õ>øúR½ù¿,Ú7§ ¸Ë'EÍ9M4j˜½hI>h+ƒëò@Š´ƒq¿ì(ÙCmZÕÄWöÑ£€¾kÃƒ.½ÿóù˜C4z	,x£ÑŠ×-ØþÏoã'dqI|õËÏþ‹,—,GFÜAºè×´¯Ì×%sŸŸº‘-¹³Å©¬¯“÷}TÜ—ÔÞ>–1ÕÖ1´~Þ‹nr>}³bE˜¹ ÷nlQ¦wGŠ»÷„2Ô.¥Üã{<ªj
ì±¸óˆbGZä¨ÐÑ6;1fŸœF&¦Ë¹¸¸4?ÖÕÕÚUUA.ö šo_œ~Xg&‹R/H*îoØw÷¿ßUÜßº½ºÜÑI³íÛßÝ^Öon@Üw’1ln=@÷­¨;4ùÎœÑÖ„c)sT¨ÍœÉ&äŠ{MEÅ½PáËŠ{Ø]FüAoNøöwP²¸7]éÒÆl’‰€}¶jü®q'ì“äÁÔâŽR{0fB_L£Ñ‘ŒZT!uÔu{¥>ì#žÐ\>-ï#þtil´Z¤u¨È»»ÌR+‹-Û±,P5bú–ãTýá†°-’2qäT‚´ž$sSýþ„ž<·ž×îKÜU¥sugŸ’êí…Å‡%K®`VÜ3æ®ê	©wP²¸ƒòÅìOÜy¯®BGÄÿÞ.âþ¡A,W£¤4qç‚1cÿcôÑ¤>5â±˜ÉïÖ§-þ…Ú^S`¡._ÜŸUˆû{¶4õá“NwŽÞPˆûñk£7ßTˆ»zÓ¿)YÜÕÁ‘9uÙhI©Æs{-Yj/dªô-*ÓºØ»Á*Ób1ÆÔ!uÜKŸë:ÝªššZuÌ1&ãâ¡íÚÄÐèLkÓÙJjí‹“SK}öŠ$ž¹~md¤¿åaF[™¸ÛÇœ{‹ûŸ÷Û«·Bò}.oo}kkyõÕW‘o×‹–­¿9wngËµC8Ãç;…Vî¦p0¯Í¼ pjqÇÖJ‰;hyâ°–õËÍ¨¯¨¸—Ø5ÚÐâé’}v	4PQš¸`ÁÊ#†)—ñ€-u¸\VîÙá0JÅõ’²1i=0XÈúSGÔãqcªUONh\òw,GuX,Žˆ?áEgöHÄó‘÷£ˆÃjvERø^ÒMú·GÝ.—ÃjÄ­b¾¦ Çq›¼žˆÛav¹£Þ€O
òðû÷S»Š;6””)Xq?4q§ŸŸÔQä2Fqq¯)GÜÙJ’J‹{îÖKO÷WÄ’1ÕÞ^Š¸kt¦5™Åý¢3DƒM£’˜ùë@p&Þ_øüó½Äý©´à~Th¼yã†´<õ„Ü_»yó†JÜ¡îeŠ»âºZÜgÕæž=§—ŒôJ™Ž‹•``IYÅÇ†–EeT½¸¸w«Û9",£žÁº“Ž—¦óÀX¿x4¸6?3??Üåœ±ÛûÆ–&çÇ†èûXi¡ìÄ›Ý‹LÜ{Æ'zö÷¿R‰û_fÄý‡·WÖ2Ú®·¬o¯¯ÞßÞº¿±½
-\ÛÚxûí¿ÙY³®~þËOâˆ¸óÏ¯e£Öµ¸k@åÄõ½“¼õá¤¾¬²”5@Óê€‰;(AÜñ•KJ«Ì6Ñ‚»èŽËâÎf¦ª ÞžwÚ2kî\\¨
Z¤]#-œô’²ëP7èŠí äÄjµZ¬˜uÒCf'!ñbóGf¼¾Æd÷â¾ƒ+hÃÇ‹S/™LÁËÈ·_þ h²ÙHO“-ŸÆi›&óÚ‚¼¦‘ú!öˆØx6SÙw<1éET¼ {ˆ{Nê¥pOóSÅ¡¡xxûáWÜºH¼N	Ô4PØH±l”CöårÄ]qNL§wò0ûwÞ¯+C¤’[DÜŸxq?âÓ*{>–$î¼É/Ô,b9˜ƒœÍá‰ÙÌzoÝBàòåÍßÆóÄæþ÷/ü¯­GÇÛAz`hjð×7¾þÎ·o|}eÞüæw”Q¹æ.‹;(QÜUÉ‘êE•ÇŽç*øÌU»î™‚ÎP‘Z_ÇXNÅ½Å©ÜP<H?Ñ®Ê]ÜÏ ØþÕó?îyÌ#IÏ<öÐÒÑ=älž³# ã\œ[ZBÕýBEsí¸çÔÛûúS½6Ì*îƒÓ3yMe˜¸#âÎÄÞ.‰û/ îw í¹µ¼¶¶¶ºýÝ?ßÚ\^k1À×áí(¸o®¾ûþ/?FyýÔ©zžç‚A®†Š;¨´¸?GÅÕ*ÉŸ¬¸c	Y9ÞNûÌåˆûó…Åì%îpÃ¦Òz„<<N '®ð®â~¾A)îÙ~îx43jm(„G£–iòUØ·7’ßRo@…erÙÖ=H­Õ‰¸Ç®F\.Ø¶îM@•1œ……Z€ H—gÏž­íEC™_œ;ÙÄs¾xœãñúð¾8F>AÜ…‚ïøû8Ü‰ä­9ã.qØH¿|ÅÔ%¦íà”‚"âŽ·ËMZ
ˆ»EØÃÂü!mœ²«¸gßÈ˜ Ó\¾¸Ë3{ÉE³JÜ³r[³§¸7«Å=ìJWª§ºž³Š;([ÜØ÷}Š»Ï›àËlk™ŽpMßfJf‹#5ó›ßöªÄ=ßÜ¿ð…Ÿ]5@Ü¡¶ŽþÁ›ï|ûæ×¾Ix³â~Q©£‹JÿMæÇ^ú[ö¿<Õ^‘{Ú^ÅXêÈ‘ê±’Æ¦âÉªG(µvì1õ©ê¸à~Ì#Oõx‡xèD½½ªyvç<®Úí­•nÓÔ53Ú?29Õ_†iw¶´¤;®_k«ØúÔ>ˆ»ÔT¦o¤m1¿§Ì·éø%xûßÂÛÿJöv9)ƒž2wnKÑöt(ñC/™[Ë›Ëëß½¿¹†ÀtËæÖææƒ·Ïíì<Øx÷ÞÿØg³qG?"î5YqW*|Ž)01/EÜ›r}ÔPd×b£®ÜiT`ÝiÒ&îõjÎ ECNgÇéƒ £¤ò!H•Q‰;º$‹»Â™x84ç8Ÿ`òG\˜“ÑHùñl²úM^kZ)QF¤^’©TÊ
AÐ±”5åI!ôAsöHÊ%¸‚z@àç)u*Â¨»›âµg¹@À—íw¨PBOÐ4ÊÐÑŒkgÂtUå¨ëçù0¿Wß–lgÝ:5@%î¼Í"úâÔM™·3qgdcíÍ2Ç€*q—?f¢G’ôªÉú·–Í:S/HUùm¾·«Å]3Š•ÁüÁ¿|æþ"Aéì²¸›Ò¥‹{‚#ûTÕ•´kžSåMŽXs™wŸçm‰8ÆSˆI~=“ü¤dAqŠ¶ƒ$êþlïGzˆûÑ"4ró7Þ!ÜU!Ñ’EerV¦Hcõ(Ñ,Î~¥†Oð‘ÝÌ==Z(~aP<8jOŸÇ^Œ(3>óEß{³í*÷V/Mí.î­Ç½ yôq^>¡Ù‰¹±²Â¤knjpd²¯õ¦™µwwŠ-!qß\Ÿš"iû¹k
M´¢$wçÐÐÂÍ ‹‹;ªíäßÚtÇ­µ––[ëëkË÷?½¿½½¬“ÌdykkgãíåµwÑÅ=ˆ¡Jõõ<ÐJ^v¸â.£Éˆû™`ÂeÐ•/Z)_1qÇŽ—!î%u,A€¶qÛh¸Tqoà‚hÜŽáˆcÞêìºt¡|®+’tð®ˆC¯vs’t|>ß„T|±u7©¯›-4k¿zÅôá¥8¿€ò:ÌÖ†w£˜Þç4ùâ^ËŽ‰a×ã&S8÷ƒH6f\¹±¸ƒ‹;ûü#¿Ü.{;+/«ÅôÏ?4Ì—OÜ_R‹;õv&î`/qÇM
Š;‹Ê»$UêÊì}lWq×‰%cö+îaOThŽËw!æ1ƒÁTËóuX›Ú‹.î{ˆûSÏþÜ-9:¯ÝÌOEÉ½â~¡ºH˜–ÁÞ3ZêxS†3$œ¡
ÿžÂÞMU)(z>Ñ9ªú½žwÙCh²a\8NÊóHÒ3ÒòðC2³s­íÕ]=öö¾ùÑ(|ku…•½§§§½}¼Üzùug;t¿ì+Ãô¼¼0<ãü÷ofÄýë,)qÿ[9)óïXRæÎ]Ú¶ˆûòòòêúúýûÛßÿtusÙ@àë7¼o_ÞÚ€¸Ç¬ŽÀ©—N½T/›˜–ã´ìãzZÇæbÞÞ”ëá^ð²žÀ.è5.,$ÌúƒX†ÑF•0w@½¸^‡ÃÒ
q—¶Ó›²6á¥M`2$4'Ožoˆ§Œnß@ÛËbÇÄ¨»ÔŸ`Æ‘HDÍÑ„ßm1GÝf£ž-£À52âTjü‚…¤¦p b;"ø.Í>zcH9Òêðþ¨ÙLîQ·wdŒ\âñ.]

a<NÌfC0IoâÂ>IÜki`'sÁ#ØŽo×žäãaNýŠÕ€Ìr)9»üü`TªFCr[Ö÷ÒÅ]ËäV¾õÇÒÿÎ||Šlz	ßcóñóÅ=qˆânŒÕž¡Ç
œg«ÏÕ &Ä((î¸Ì‰Ë(Å]RðÓ§•ž&c@n~„ý%;û©é´œñªQ£©‰YÄJ%e~·…¸KHÚŽ†î/Ê<½qO;Â5€­—Q‰ûiv­–¹LÍ5eŠ»ÁNØøòˆn®6¯ëý¼·¶Nw˜{VÝ%cÇrùÔSÏ>ûÕ+ñÈ‘îŸÄêTjîß¡âþ ‹;5÷vwP¨âÞ>”ÓÃ-@,Îõ¾‚Ù®\BJOo¿Pí\ñ4ŽjúPú‚sÏY°Ç½ ùwñ!šê»Øãœ›@§—i\ïêªôL­SÓ³×GFÊ÷öl]àb¦ÿNè ¯Ù1ÌM}‹Ão€âoÿqW_úßÉd<½|ûSM]ýôûßÿÞªQGìÐ²lõ«¶6wÎýÝ»?™Q±&qä½AÚ»ðŠœ-Ó„ÒÄ‚qßÖÖ¡õ(*§æY	)³®w ƒpZÉ¼”K¢¦”w,8-I¥Ž#a“ ‘¬v7q¯ÅÐ#áJ*I[o%¢M—¡R[7nŒ¨¹Çë$½¦0ôœ4¯6^¬=á©Á8OŽz}ÊuXñrâ¾Ü^›×¡C™ldÔj*’Œ¢UŒ=cPM¯‰±s'ÌØ.Ð“²ç¸hxŽ¾fJéÄK5@µUs0å*.îgòÅ]VÕÏ‚œ±D€­Ieâ~ÈQ†ÞÛ›ñv ŸvI•÷w§S—ŠRO`W3í³bßœ].’{‘( îràç²hØf	:«V,)óU*îŒÇAVÜ¯¤÷Ñ[×fžŽ[	âÎ%ü\³¶¼“´tTxƒMÁ„Cç?ë„˜Àž5w*ïLÜ¡í añ¨s¿IÅ‹²âþB_1÷rÄ]™ ™ìP•Ü»
i@wqÇ0ÓBÌ<7êQ
x?iÔXÒÚÔÙÖqWFw/]8îyÌ£Ï…‡Ý
²chnnrph¶£¥¥íÚdšT8vv¡gpàŸ[€Xm³ý#Nùß…ê®ÖÖ‰H˜	ì£Ñ™oPq›šy¡¨¸ÿ§<q¿óÙŠTmO·„ZÐòö[?Z_[Ùþßÿt}l][]Ý´¢â¾µº³±o°iL»„ç³âŽÆø=ZPÜát
/ Ñ;€¸ó¾@ÄÌÊÎwj*|UŠ;ƒ‰{sM¶âèJwø/Q9MÓ.âÞØÐ¸ÀsqN1 ÚÊ¤»º9êEàÅt“	n“¡¥Ää¯ËÂzÓDŒlöq§ÉÎqXÌ±Hí×%Ã´F?ò_õšu"ßíF^Þ€…«x”´5…ŸâtŸgNZzŠI©¸.`h*i0“v6xÔ0v<Š’}â[$ÜîÃžª³¦q»Š»ªW§JÚµ€Š»üIHAq7Š‡‡ëwÔ½qo&w‘ƒ‹»fOq6CÅŽÅåBâsqß‡{:û÷çy!¬m——úÑy9!Èñq¿ÁbÂüroj³$q?èÄ£„ú*î #î=““ö²Ä]ÝÈÝ9-*è˜¨*ÀL¿XŒfúêd¼xP¦•Æ=OŸRøLÑC5~AçWÛwëîç¡¾ã¥©Ç<úT÷=ä¨LK÷èHw¨%ÝÙ1=8ÓJÒ(L]]ó×;ËnÝÛ6ÙcÇNQª‡'†¦i´g¬j±û@¥†A;"îR7È±>IÜß”ÅÞÎÄýï™¸KÞ~çîJy¹:n-¯¬„Ä[·ßút5´vÿ¿l¯/¥rûýWWõ°÷­-_zûºëôÐ>Fw¦ç“¼=·Í/˜0_•“09–”É$pØÌQxRÜ5€§oRÀsD<xÎÃ`SÒ¢Ž%&‹;ÈÉÊhœÄfâ^ŸK*îru4J„£%‰ûÕªrxV…Å!qä€[¹ê¸Ì,ÄÏ¤Ý•B+Æ0‡8:GNeÈA#ªMŒ9„QKöÌ76iyr¯M\ÌmµXôRÃH=y9f7tÝlÔáî ì,/¯3§l?–±â8ãZ‚œ\¹bºâD¼	|Iy½dQ+Ú´{P¿'Õ~"uE=)OÄ“ˆâð8“tŠ©*k	ÈµzùÀg3îŒ<q×>Ï‚Û²‹J?%%Úµ…¸Ÿf™ùÝE q¦ÃÃàïUŠû‰gžyæå—ÏuWLÎBÆ_ñò¼ýònÃa¡k((…Å]˜¸“¹¬Ä½†QXÜ±#@)î•J¸÷ÏSdÜ¥/ÔÛeq¿dÙÇqMÐ'¥Ì¸ã2?ãžÙ„ï
¦T™/u2ÜÀ‡9Þ+F‚™ñ—Ðòñbâþ¯¾üejîOwì’Y<z’»´8UYÜíS£N’•ùÄ]Š¹—'îöœû|¡_•ãE+Qm¹wÖfò`´,)½y)c*ºC=Êºœ²àÆÅ]Q=…‹Ç	÷cIZöÌÔtK'ªÇ×ÇgZ«@uSgh‘>5>ØñÏ2åx»êd~lZ„:ûG‘™;XØ½{Ó5@ß’2TÜÕ÷KîRÆýO©¸ÿê3º$µ¥cù“õõåÎOÞzëÞrË
ªíRÛ’ÐòêÖêÚÚòÎë¯oìlm ¤qÍÿÖÖÃÛ_"Ë¡ëc-è€–“l=nsôVo‚àµJ=	@ˆù¶ d3£VMDF”â+¥Ú·%Ü[Àk1²qEêZºd¸˜¸S!Vš»B-óÅ½ô¨ŒñJ]qq'G€#m_ü‘¨Ël5æ®AÕ-.¯dÆ$ÿÂÎn4œ)ƒÊÓUÂòQä¬ål¹t™¦3wéÂ(WØÅ,i€R¼ã—f<´ÑJ.±|•ÌhrË'óUÓzs4êŽFQ¤·X±É‚l8f£71Ìø–'ß	|¾¸««î¹‹1³‡6OÜë3âÎ¼‰;
°
žßKÜý‡)îé$ë+ƒÎÏ@Taî¸ŽOPÔâN„6«´‰{½RÜÁ^âŽËJ‰»©rA¢H¯RÜ%¤¤ÌÓ2ÿ#²Ÿå¢Z&îŒ¢‹S1T-èÆ™j9è6Žóñ¨Á³-Ô-|û|¡ˆ¸ˆ;åYðžÔÑ£eäfVÜesÿÊØüpYâUJùLZ]BŸ)ôË²¨'ÏöY96TÉž2íƒx$Õ©Ä´X„QuqNÝrz÷Š™³ú¸à~Ì#,yæá÷4õMLÎ;û¨$c=|…è
ýSg'F\ËìÿÃ õ´ç‹óâÈÒøÄ¶^@Ï©q­ˆûK£‹RP&OÜÿ½4}	Þ.ÏM%ÚN—¤¬¬Ü+Ÿ¬ßûñn¯£ä •ÅUŒ^ZÛÚÙÙÞ€¸ïì¬Z°Hõý_
¾æúS@êw¡­çhwéŒ·½Ç“r$_¤¤EŠÞŠ–2'†ägá5ìº°Å9žóÅ\½‚h­d†Ôx)GÜÝ
5 â^ÌÜ•sçqK9*“Ô•à îË/ž¨“ÂÔ'O‚¬¸óá€)A¥QÚ™Wg­Ûâö›‚\/@Óú¨žduø0>×€·ÓU5(¸#ÛKšÝ	îÏœ9l™„|:ºª¼ UO§91-‘‘zúGg4{bˆÝ$üÞÓ¸“)DrP™÷&Ñk2érE#(É'P¦Ç	™ÔRˆ¥Cäæ%tèÑv¹î^€3¹ÞNÄý RÑ¬ú“{U’'îôƒŒóàp3îi#*î
'Ð…ªx‰óÄ{­Fòö39«¢qä.—@ž¹¤wÜiØUÜ©¢gN4OË=i¤¬Œ–Ü+õHûß“ôVÙÇý)Ý.ñä“—û¸3wû˜Í®)2@Òú¬ïô§¤Å²Ð{>hŠkø˜ÁjKêz,MU‰;3÷\qê=¿xé¼>÷w5wûWÊ÷jµ’Î¦÷†Zí(V¤.]uvì½7U¥•°EUx§S,ˆzkuNÂ}®SÜ¡®ã‚û1<íÎÁñ¡j™_îjµ·¶cAM¥¨®ºØåúÝ?2Å} ­ûÚb»úÓÄÉÎ¶EùŸÄžƒ®©¿6ü5)Ä81\’¸ÿŠ†d@çòí»mbhåÞøã·~tõÝ¬_^¿¿©7nmloÿõë¯¿ýö–•LOý‡÷ÃaNwX¯
qG*=M@¾äcš´C‰:ÜQŠÛe³E2AkC£;•ð¸,¸½Naþ*¸ï)î¬äÎÇÅÅ½)fMï-þ…'^„Éw˜Ï±ZÌîH´Àø$kÄ:vu¹IW4!‰{ˆ¸ññ8.%…«A0žàu­‡5¶¡ö­xr*îù/UyâòTÔ‘ŽAD'.ßI“kâ
1$Þ%}×w
mZ²¸× µ¸Ë³A¡óÐdÅ½dÅôÏ?4©xZÜŸxâñKwHéîâÎ¼½ÂâŽþA•.¸®ü¬Râ&FÖöRÄ‹{Ë=Ç·?Ú=qIÑ÷z/z:-à…,QÜ¿h2ŠG–þÉ× îdxê›oqÿÊ7 íeˆ;+¹³ÙFJ:&«
0*¾¯*ÆÔªWÝUJæÄé.¥›LmÑ¥NÊT+j÷^sÇ	÷c}.öL=DqïôÍOMôTIÿäTWì|dÆ97:o—(CÜ;»'ffzrÖÜl¶ìb‡xpq§I™ÄýÏ~½2 RZÚ>¹}÷VÛÊ½Ÿq¿'oïÔ/ß¿¿œ—·_ÝÙÙ@TfËˆrûß½»ã7Õ×4C(|á°Åvµ¸û¼Æ}UHH­W&mD>$C:“î¨ z1Y½Ñxiwq?½Oq?ÝäóìmÖKO">€’{ž¸k gJZÍ‘„Íï6ä¶hOÆŽÄ_lIòå~Þ¥z;ÇÃŽ!ï44CïBÊju˜­²°;c7QäæHÑI"Ébîd$âÁŒV¯‰¬GE·÷ó™tŽÏ'™9‹EZ-„ž“À{"Ìi+&î4*#9f®¸³™BJ¨¸YÜ!ìYq¢¸[/Ÿ($îµµ%‰ûó ˆ¸Ÿ©¬¸ŸV‹;Z–‡iÁ=-V
ÇOWPÜ-ì([Ñ›'î@F·rÚpÊm,w™B<`kxÁlˆñ<Ç/ÁxmÉâþÕ#¹<ÌÞ”V§’_	oH÷¯¡•{yâÞ~A•ˆÍi­ÂnÈ+R@+žE=PXFØ;ç•{ÕU´œ¯:ëÈI¸ïq|«”{û1(­ƒ­ÖÞ=281?ætŽ-!2^Aª‡Çg»§»¡íe‹ûÀÐXk;îqf¶¶vŠ£{‘ÌMµ÷õì%îðö_Ýí4<*Ývã—îÞùÉO~øã{ëÔÛuk+ËË›VhîêÆ«[«Û¯?ØDf†t•IDMÚRq÷Ù¼S9âÇ
À#JÚAÀÞíð"r',,î©\{š@Ä=¿Ë‡ZÜi¤ütIâ®ô~ñ>ñâ	ÒWFq§µaŸ)ˆ¸ŸDŒ(ô£$Ûƒ|-¾ëÅÇæˆ-æ%4¤ÞÎcAª@Ú½¤,Ô¿‹’&äådôÀ`u!ZïJ!ãõzý6RB’¥¦2õçPO~¹;®hIòœ„tŠÃ¹P‹;¼ý‰ìDZ-¢!…ÅýLqG]zgÖÌ©¸Ó—« tÇdqò<$>a<Lq?¡÷'ž~'iq—¡âÞJwœ_fK1!W‹;­\SŠ¸ŸÎˆ;AÃaN(¾©­ä§žÞ'©·÷ö•‰ÆUâÞ¬>GÉ©ºkÃ|0á)÷u¶˜â>ÖæSš.^Ûkú¼·®¸ƒâþÅ­âQ¤m	=!éìT”ÜI#÷Vçð7ÊwÖ’µlQ0m/¸Þmï¥ ]Ãê4j›X6ƒ*o¶‡”MÁXÑc¤N»¨ã.#â®8îÇüÐŠ™D…PGÿèÔä¢Óéîi¯èBï®™ë¿TÜËÊÊtŒÚ«vgæÀÇ­âNõ¿¹—¸“5©¢DÛÝ•N´’ùÏwîýà?¹³¾²L·‡n­ß_Ñ£§ÌæÖö«[[;k¢nõÜ¹6|Îi¨¸ÇÁzµ¸û<ñ¨bð†á…BÐ‡¯»Š{#A-î¸E¾¸ã'²â.¸Ò{6¶»ôtFÜ›ðsJq‡ÇkxTÔ½©(–„ê2Ön‰¦° o¨å„XÒEª\àèêÓ“ø?ÉÆS·D’nw”äŠŠ£#+P-ôîåÐéÈšRRXOùm`€´ƒaÄa|$‡ƒª¥`½%w62q¯‘ÚÅÔ H8wùØd­’ÖÛ©hi³âþJ%Ä]³§¸70q?Ô®2–Xmž¸¿ˆOWÔâN[À°ö‡'î VGp1—¾rA´«ïw@í}w‡‰“Ä½¹q¼ÍeÕ•·2Õí	â¥â·1†žMñºŸ\Ý3»Š;ë*q¬7)EBôÚ*î0÷o ûÒ’½qÏûEº¨ª4õ;U¼
»òh»2B~]¾vÐOžÓ×Ô¥±A1´TÚ|§	ÕÍÔ½,œ»ïÎˆ*<4õ˜G“êá‡qMMMŽMÛ»Ha@±¾oÎÙ^vÃv;z7OôÿþwTÜW–¸w´]ŸÜËÛ»†ZÄƒÑ1aGÁý…ìv¹âm‡·CÜYSâí¿úõg+m"¥å“ÿúIKÇÝ;÷nÿÇüä^&ó®XÂ/;7W·þüÕW¿µ±½µó]=÷`kçÝ÷ù’¸ÃÜ}§”âŽ …_/Y,´"!;d†¤w>	¡8x–­T/¦]>è†lƒl¹ºwÅ=íþ¹¤2w2ÆHÃÄðñ@!‹1›ÒYÜÛ%Ê{!ždIª?a"Ö.="ö44ù#šD8x¡UÌÑ1¤Eƒ+i–n…›[£ž®Òr½àãx-;€œZÔ2Î6öúâAtþÔÈ2®Étf<Ã×«¬šœÔd‡ÞÒÅ¥r7•Œ¸7ŽÊ¼¤ôv&îåX¡ââžÑZy˜€¸ëó¬°7§äq?Q'`jR#î0òºë ¥¹SH _)îzšÙ¤˜¢ÚLQÙ­4á·¸ž#«SMV]å’2ÖŸ¦â²âýULNÕïkAŠ¾‰äÕÈ§	ÏÉoƒìÊšç$Â±0)ï©èÜ(·c°qÓÉxÔ˜Šñ—ã8_Í4Æ‘Åý‹ -sâN¬ŠûÓâìýè‘FVæÍŒ¸Ûß@Íýç˜ýK]ö®Œº«Ä½:*†ºä~Qõ«¾¿¯`Ä´_Ì'4¦¼—‰ÜàÌT9%¬üš¿½MÄ)A)Ó—:ÔØUÏ²}JÜáã‚û1>ÒÎ‡ÑÆ}àúÐÐÈà¢]uÑÕcG#˜¶ñör½}nhdhtö÷¿Ïˆ{Y%÷ÙÉ¥¾ª½îÈôYšêìÃ¿Ï@*¸3o§wˆ;Ší·:²¹û•Ïî¶…VîüâÞ½;·?¹ÕI7¢¿Ìú2V¦®.ßß¾¿±±ñ­íUÄwõÁ¹;~
qÇ/û3T­$O£¶ÖŒàñÈ¢‹„iAšnWV6%}‚HFD¢ç²¹?W£•É¶u¯g%øLÈšª˜Í²géð2q 2i‰p<} ˆêé©L»u¹5ys2S|8!µæ1¹É‡^’QŸ={ö$¦»ï}ÀÉ£+òQÄq×™“.£m]IoL£°È‘}©Á-¾FB«bÚKœDþãW‘†Œóœ·×Jª‰{Ž'E>>è¦³§-EÜk`[ä’µ!×´2Ìø‰©*‡/1Ë¸jšl3D™&ºˆ»|µ±¡HG1îÑæ»+~B¦îÅ:*zqgàÅ(¼×€<qÇ;“EÖÌŠ|Ž³r;Yá@Cýì>U˜˜¸Ò÷]™‹—Ž[<YIáL’T*îp]ÙÜ¡½LÜ¯ìG;­	ž~Ìò
€¶Ëâèb‡ì³%âàÃ±,‘˜ åÏjy¿ûª€½^DÄˆ¹Ÿ Ð‚;´]†H»BÜ¿›ïªA<‚t^[”Cîwû$æÞúµ?î›þX;%wB	â~A]roW¦bÛ
›ÓbjŸžGìjÙ/o€ã¬]m"ƒâ€SeE|P=ùTeß]»ïË ê°à˜cEª«ÚçFþÿ×Ü[ºgg¯.õôgp:ç'gHwôñ‹åz{ÿÿ¿¿+¿ä~ÝYÊ	Ï§ÍvŽôq~cqÿÕ¯‡ÚíwV>û$tkåîûÅ½Û+mò¡\¹¿Üq+¤_ÿÞö}°µº¹ºl]³XW7ÎÛØx÷§ïüíÇÌ­ w´1(H‰8ØÙžWe•Åh1‹IaÖÔâ¨1Àw÷Ë©û¨÷å—©É-öx	ŒØcUXôU´	JÅ²¸Ÿ_@D¥À£Ë4Àžìb8º»pau/ £VýWL~3¹±ÅX+™ÈxÔ0JíÖ›È¸Ô€ÀI-ø±kÙì/»!±=y0{)b7‘á²á :‚j¥hÇám Ã¢Z¬"¤âNÍý4"wZ0UAŸ¸=}ŠŠ;6ÐÉ¬J34È÷emqî0ç/-d¼æNÅýD¾¸K`—Q%goªââN›Í€ââNaâ^ Éiwwt”©ú«°t5õ€lÊfeö3€I—âäW^úÔF:EÉwvh8®¦ÜÞ.FG2ØH†!ÔúèŸDÄ]/ˆ˜ZÜAAq—×#¼éœíÍ=RÉÅv¤ÜÑV¦ohhìK­]¥ˆ{ñ’r«¢Ì¾U€¹˜ÇpN<4®–þ®)qß¤sûQ"â2¥þ;P¬æ×£º™:î2)îF[ÏqÁýÿ±wö1ßwžŸ?Z!eÐnÃ„„æ4A2;ÉŽ:èÒn§QÛ»½vÔª©×nÛ]EÕF—Ê·àÅ˜³%x+ƒ"³;<?Œ)°·òÅæÚ †™a(“Ñ^•Ø½Híu{­tïïïû³¿þÙþ<9ˆx+áÁcÿx˜×ïí÷çý9Ñ'C%cÊ]71a±tOMOOOñš˜è¶¸Ð.K–34œ:ˆúÆÀíÜ¹>žjÈ‹Ûk¸×OO/åËmÍÄqÿOYÁý½öl°}ëÎÒÒ½ÍŒ¦Âmçµ¾½£ŽÕÅÖ÷¾}cÜ¾ZÇ¾Õûïþ×Ï³©ÿøó·†š·ßæ£Œ/ÅcGVðšÃ)ÜNö¤‰Ï¬WRÐîª—$ŠQ{sRhÊ½ïêT™óÂ+ÜmÜ&‰ŠS#¸ÛNmz•ŒÐ*‹
XáÀs\/z]ÂÅÌ¯ó x]B ^bu*|Ue­&ñ [Ò<c&K°3¶³I©‚ô¸uÈç#«žà ›FÌ»â§Çg=wÎš°Þ	n–æ‘é\)jæƒÇ@2.¸sØž!Éæ¡“ÎsTÏ%O€øó¢&–¡gJ÷ä+SUÍÈGxÌ)íPô	ö¸Ëün†x w/ÈOÿí»@uý:N+“Éa*¦‚¥¸.Ñ*H€í™à^Ep—âzÙ”R™x.)Iâ–0X]Ìß\e'(×SIrçX>o÷ð›kô%ï)b>DÜéMò×±ÆŠ#pÀ<”«áB˜íðE¯;m#§µ¬¬Ýó¿ îåBp§Ðž	î/n?U¤w·,|c¾grpð—ç¦zZ8p¿66=:>>Û\ ¸3Ëia:ÖÄ-ð¸æ¹gM‡3Èxb0½²Ð'í]=iÜÞØëo\2Ü´ÿò%Hh¸7ç^J3.œ¥;1ÜOtÅÌãYõ:‹®©¾>ã·}jø=S::?77;6ýËKw¨°¬LÓÄl^'S‡Ž
“½©Í}ÍH¹Ã=ÜßÛž<BqÝôòæon=ØÚ"]õÄwÅ\:ïÒÚö
ö¥âÕ7öVVe±Õ•%Ùê
Àp;’2>§§¦‚ç‹Tp—ÆŽ°Ln–È (”Ü	êÑÅ9)n)IÚâ—
îä5-wjöÒ&Î„ß›
¸Œ†n9&ŒáŸÒ®†§Nº·“Òt+%wJ~PUéa¿É¦P8D'
ã2¹&0âìz«ë¶Áv“ÍŒÂ¿C;b3‡=>cZ‡‹”ÌÜô+
Ù}€yÃ9¬oÂXª„«ñàÉî¯
¤cHåc±€ŸßHSavpG"Ê wºBU’Ö!Šßô€ów_gâO½Üž„¯'—•‘/vq_ãª ’K9%Ð»·¨ÈåðÝ){¦{E*¸—RíîU¹Á‰;iñ¤àî+ªOì‹Ì¢~ö³x	pO;³àÁ·¶Â"îlúDîZÅ Š¡¦Ôg<pÔ)êñDÛCÑ¨b‘0|YÈj/'ÊÜOCgnËcGQõ£ï¼OkzìËóêúÞŽÜ›çú»ÕÝÃy»¸©Ü69Ð?:Ý?ÖpŠ)÷²Ò©ÖŒ|zÔº9¦.Ýu§Ò´³¤µÕˆYc®¡á.¸C9ï†¥-•ÛO÷g5Žéb^ïÇü—©)kH¥—è°ùy¶µ n{ÿ—Ð¿A”ÜEw(§Û><˜ß!?ôñÒ]ã"îm<¸ƒÛ“àN¸¸í©iâÞòúæ7Þxã¿Àn§E2ˆ¶¯-­ (³¼÷Ý]€ûî}YL³´²‚Õ•‡Ü@ðyNÇÜ¥&O2¡ÎVä3%@cŸàvPuK+©XHªãN9žßééó×í·ºÝí	jv~)ÄçqÞ¶Eô*‘‘Ã÷„8+¾¥t!²Üˆà4×ŠB?	•/N¶!idu*½“¬ÙËêÁÿaÄ´G£·F”¨­·a%“M‹IÎpåì&¥Þï@õ$t®ñ‘óØu‡ã^ƒ¬ …;6ÜH•`mëbà½@·#ÑöC!2’[ä€>QÿîdÜNÛíùg:„èžú¸b*£w] Z™
îeOÀr'­<F££‹~d¡ÊSÀûòÜù;rÇGÈEu5=Ä)àžãJþt	\ôY
rÅÀÝê³óÃÕEMÊHG¢hb9qüþÔiªƒƒû¢3$Dô¦ýH××Ô8øXêÂ•¡ »Ìj¸pWÜ¡M‘Šíéàþ§©zé¥—>p'ê:bó©llx O¶Z./ŒŽN¾ÈíNmmpÅºçZŸgàÎ+¸ÃU.I#sÀ{¦Û.Þ¦¨f<ÍªiâC­iÿ"NNåOîM½”½˜^?›y»½ÞÚTR/Èp|‰“J™g•`ýÑ€:öÿ_–YÒÝÚM¸Þ2Û˜¡åä¿üÍoþpµÜÿ÷¾ä®›žmÍó«¶L¡õ«áÚå¾ÁŽËYÁýý)†kjÏQ¸Öïqà¾©ã×§nn¼¹±®S»–·¿³½¶¶»=ŽU©—VþèîãÇ¯“¨™M…÷zÌÀ=®t¾/¸_¸ÀûUîŒÛ³€;®ŸEZÙ>+ñ±ÊÈn¯¢QuÅ¢ä-MÁm|><A_­âZd‚N¶Áõ‹–Qp—<A›9’¬|$¯âÐ&ÇÑ}í	/Î}fÄjïRÜ¾AÙ¤¥ÀÍâ1!.ÏŽÄ:e@
uÜ+(^î¸í	p?OlÏ	îd&2¸Cà^Iõ„Á=,:¸×ùÚºu«ýL&¸C×íBp'w‰wˆ¢H5“¿J¸Û=>
î[1qåŠò§Šî<XÊÀ=ËOÄ«ìðÕ”ZÃÜî 'Å<j(¹íN¿3pÇ<¸—cotì(ª^75ã¦{á2¦ ^|‘¬`zíéŽ—z|¾ïQ~àÎÂ2©'&wA»£ôb×BºSß€ÓŠüdjÎ°Þú‘bhR'vNÓ",×¸)ôísIÝz’p?Ñ'Gµ-£›åî­½›Ûø–Åá¼º3­¿zÿ7÷ƒYîÞþ¹¾|“;°{é°ªh¾Ö2<Ööâ‹·Àý;Û™ÖÑ%S—wl½±µ©¦Gkycmsc)¦[^ÛþÛÝ•µ½Ý¥º˜üþîã½ùý»_zýu€;†SÿñŸÞÆ3ìÇÍqWbë’ebˆØh*ÛJÉûU8†xªŸä‚®¡~Nk8Ä‹9•Òœd B™‹ÙMÆ&­!OÑsvu™¸­õ„ªðCnHÝ p8¡ª¨ÁZò$¡’H(ÉfYñSqQf…¢Ø6¤Èe*ÓÈ-€ÿ™3íŠ“ûTã\m¤JÞX—P±Pf»GáÁ7™ŸµsxàÎw¾ý,¨]D\G~ÇíH4°¡È¤„Y|Aº‹ŠfÓ9'šà;T-ˆ}?ƒŠë3J¯äítQözb!wc'q'Å‘›MýÙõòŸ]OSÂr¯JŒ?³¤;û…¦"·¸3QrÏÜÉgÛqv«öècE¸?ƒ•±	pêÊi¬\"ÌÎ3ÏœþÉH¼¦6ÐŸRS¥=¾d”¯=ècÑx¬Z…µ2ä–HJEÔé)w;£åW‰Îäh•á_1nÇw«¬Ž¦šÔ:°æÀ|¦S_FZUîm=S£S½ƒDÀ]d>5+¹‹eFj‡Äe ù'LdŽ‚-ä—íÌ|»u/µNÇD4pS,áåž<›œÑœî':öj³Ä>¹&ÄNèÄË$?°ÿhµ}ðá‡¾ÿ»ßPpgä^x¯Œej¸­6ïƒÕã-‚¥ÒÓpmphòË™àÎÜv6–º¼¹¹yçkïnÞ»³Ì9qõæ·–]:õÒîö÷Àí+»°Û¥òû{ïïí©dîwÿõîçÿ;fS#¸£_ÑhV
wˆ{Š^MwCP™“F¤qBj=‚ßìºus¹Wšnð(Ü°ÝíN\båÀ×«=bTªêÄžF‰æn„˜õZÌŸjÞ4s»³«½=ÔiSÖ‘ZH™~Ñ¶¸hƒÛn/­f‡‡' ÷Rìp%‹ðé\dHá°iqw¸ƒÜ)¡çw20Y]¸—=apow;€¬¹]žÜ‰áÎ¹ëYÀ½fù?]¬%“ w!àŽc[¸Bü0C°¨GÅÔõÌS)à~:¸?UHõK\éæÁJÜ¡ŠKÖÅº¶ð|
_%2×}z£=ê6´“F™«œöw¼H÷+í~éQ%w—{òy¼àŽy(²ƒ©cn´¾it²± pw–Â6¦\;­–EHÙ­ŒÍ'2o¶cÈâÝï‰„ÑÙ,wg,Öß~‰ˆtÍBÃ½$Ã}êæ‰á~¢O˜'>†¿D–þñÁæa¯Ø"QL¦¶&>j™¬Ý?"ó«>úèw¿cà~PËÝÛ?ßW@¨¾o*vxM¾|­¹ÜžîïÌõëR±]7¥æ<÷¯A[Ëëë^“Ù€ß¾ó®lÿð{ÛkÙ º´rÿþê},M]ÚûÒëÿº‚wDÜà~|†SÑ¨±9}¬‹='¸Cg¸3jHò¢”_Áä3Å÷½J£)ÀÅU˜ÙŽR·UÂM rÎ:g¼G­†h´j…ºœ6 ]|­ŒTcZD€E4e0óG"MÀá˜Ì,æ­–Y´…ÜRTtQB<Â!ƒ$Ç¡”DÚÉ¢S«Ýéˆ˜ƒ$ehP†ÈIUŒ¨úì}ŸrûŸ“åV	p¯J‚;K²K4
¦+e0ÁÅÀ=Á¨•·Cy;ÁiNÅNÇãš‘èiÖxÈ”¬q/+ÿY9ý/‰îä\‰šÄ9
]Q…ÿS!}?p'¯%iâŽ0>D¯[ºOTŸN"Rä|¤KŠ'©#zZÄq¿’÷+ªB¨Z+ÉÜ¡KnåÁ¾•FOËÍ0Ž*©rÚœh…Œ:;Ë)¸_¸pu?ÇýÓp?ƒbØ£,jº#*ÏEî­³È’OÌ5 î%ûxî%‚F%c^Á?ÊÂ„û\Œ	¬®Ææž©ÜUjsl<4•·»qq“©Ð°ˆ½QpZÑ?Z„úÄp?Ñ1W	ÀÝòÄýƒ©áùŽV<+×,!	w*×|Npomlüàý {–{æ_“¡Ž›…$‹ÆtEX²1xíå/_{bw`ûX¿ZÃQß»3ÇýÞ»ÿùkwî%6¥º–·¶–¼ËkKËÛ?üáöÚÊÚÊ*>°º¶R§º¿òøáÊã/}éõÇK+wÿŽ{–VMìˆK¦‰n!­_Ê ÷<¸ÃåÓå?S)‰	ðÉƒ{ žÏ2¤º”‰R™ÞF¼væW‘•ªe	E=·G‹~=".¢§r•¹˜§•UÑPp1Ur=^F³&½TiŠÌ8#
%öJ><ž 8‹±ÓÆu<|}C)él7Ê
ë¥`½'ˆ¸=—s‡ž}Ö‡ÔŒ`¿¸ÖjÃá`P«u’,Ç—ºï”lÑÅ-=WÅ×É0p/E—	9š¬tÙí)àÎTÍÄ³>ý0—†/çÅyÚÈQÃô*Wår•E”T¯×ÈN|Æëå¼çNqžsû3p‡8vç!9>NÀ‰8÷´ýS¸%®>KÄÊ˜4 ßh	TÜˆ»ê§W¸ó¤]a"Žû[ÆXAã©<¸ŽÊë‰JSKZƒ²ƒ}'«õ¬Õí¶â)¯P™!Tæs8“E¢BpÿëqOšíœN'tó©G[Þ‰ñ¾kO}ù"§^œÅÐêXcþà¼Í	©àöÚSLCpŸ:%ºÝ(Þ“Âûf§uÙÃî:4[žÊ¦]Ó`F7¤ˆ,µ‚ë	÷¡œßÉS'†û‰Ž¿„)¸Á)×ýÛÓ3ÖÒZK|ò~Qg'Ó³	&¶´”äˆÈŒ}ðÁþþ£\àåç¸ëzû
[ÔÚ1]„º¯–‹xö³á²Üá¶Í…'ˆ·O=x÷/ÿòÎæú:oÅÇ×Ñä¾¾¾óýüp{weiUWW§ZÚÝ]U=Ü]y¸w÷G w,M¥¥25bà¾Hlá£-©J k=ÏŠ‚ûY§¹pÂte¥¸—Z1Ü™w»¿@?·ÎˆqTÜ>­LçŠNâ.JŠ¯Ž‰gYpÀï’†Éj+Lr‡_)C&¨]4éõ&¿ßd4êõJ©“	µ[­•‰ÓÀ2¸yx¤Â½Æê#)»Â/Éµ†K—8Oôy€é`u[@o˜¶Ç ,n^oÔQ†£À	˜7Á·ûûœ z˜tñ’ ÜéÊÓüÀ‰{e~à~:Ãë*Q¹S/îÎ¥vÂk„MS¢2W~Æ¡ºÐ‡Tºóà^–îPàÎÞÁã¡Á=d¯á>Ùg*jè¿+R¸ƒcÓÁïý¤S_PáKi&¸Kª¸'‡ÏtÅ–Fq¶
§0†ªÊ~#ÑˆªøîåØŸzÔ¥ëDÆýZCëk¯=ÿÚähb¥€{nÏŒjà.Ì¯
®:šVÓ–ÕTkêénr	óúÝ£=³YÚæÔÌFÏ]áÍç0Ü›sš®6a<èÔ‰Nt¼…Áó›Í-º'×3ÜÒÀÏ‚4÷‹ÿuj9µàJœéwˆGdZ~õþoOÄÀ=¹ÃqµÜuõ({òîãK¸[æáŸ¼ØÐðb*¸ÿÅ{½iØîÕyÕëºÑ÷¾úÕwLyëÕäÃº%µniùÞÆÆÆ›oþà?øáÆòªwueyimm÷VîïýˆpûëtýfSEÁÝ¹¸Hàõè³»JeBj„„?2ÀäÎÇ+®2pgxÄÅÛ4àm*_DZ÷Eœ†v”ÆÐ˜SÔ­ tl2G4Òx‚×ñ:£©]iF>¬0ÍÃ¶€F–ÖGÂƒ;Œ­J6›ÈþSggßKUBBp‡Øö$¾+°]ÉŠä\y·Y¯ ¯Ôî„ÛnwQøn6©ÈVÒ„›_%‡Õo2é•eÜ}	pGÄàŒÂn	—xy5Ü)s%}sòÐÏ¦¾[&SÙ÷²ÜàN‹©ì¶&VL©nÿ$ÁkW’Ø^^N^ óÒ„%\÷òræ¸Cd“j‚B¹s@ž·épªˆÄÁ=CÙÁ½ÆŽÚ~«a™âFÜg¢x°|«ÞÊävòÑ[X@¿dA	'AD¨:Ü	²Î¿Pñ’2M•„e×«Ê®[’*kÔY¬bOÚ$Èý3àŽ¢ÆíDWB¦Ø‘—zîú ›;Úsz°ßëïËÜ¡› wQn¯€{ã¸ð7§ZVÝéþS›H]rGßPÏÀ4V,ZÔ–©þ¡Ù–61RkŠõ§gLºD¦Â˜z«àÓÆã1(ÏŒÍ‰á~¢ã¯›H¹•tà9¸'"×èlk	ãÞ&š8Í¸¦Çz\‰ßÐ¶¬%2--}ƒ|ø[Êíâ–;”åÞ=69ßQàopÃ¸îðÜ>ÔpñbÃì\[JTæ/ÞƒM!<ê©é	Ô=>øêÍi˜íq¯·)V¿Œw¬Oýñ¿¿±rßYvÅÖw¿½¶´¶»»··˜ÌWRÁ³©¿ ¸g]À„x„Ï;’Ê”›Âg¯È w´
Ò„EÜÏVf’;uÙk°?”»B/p×fåuçL8táìY!£¥f=±Ù¥É§/êd|ºF&—Ëdô™ÉVø$(–9þ€RÎåæå›-ì)»îŽ ’VI–'€QR™î¥²u	Y]b.‚óÝÕDdÎVv»NÎ ÌÚà¢§yk](‘7Fm\¼› ðFÐéFTÆÍ¢î(#¯±;Ã‹Zßséàá2ˆdÒ®§¼•Ü©¸ƒÎÁÀÙÁý?VÈT^Ü¾¸¿‹X°4´ôÕiV†w|ˆÏöåT¸Ó¼èäjò'¾;)ÄAë¹Àïå	în§½ÔàÄ^ ßb<VDi‚¸´™¸÷wîÕLÜ+|nÀ]PÉZX'ä4ðçÍ7‰:mú^pÿŒ Ü	³¹ö¶&;âêDäÅ†Éùæ§Ÿ~þ•¾Þ¦xoGžàÎø<KFöfmãMáÑÚ~¡«>™
î¦È]4}ÛÚ|ª¹¯¯µ±¹9ÇNÃ¶^¸úÍi—‰vS×·y Vði9wá©=1ÜOt,Iý¦ðü“ØámýÅ÷¸z´tpÌÿm ã§bªwM$àuº9KF%2Ð~ý^Är‚{î^™î’î+PóêÃžÆètÍH,öõÜynÿ³÷zÒ¢J:WÓJdî`íÒæ:­Ð¬__²ßS/ollýÕÖÎÆÎ›Ûkè€\ÝýÎÞýÕ¥¥‡Û_ß{¸÷…tp‡ã^# ÷Z¢ÌÉ#ŒÁîNÎ¾ÄzÜ¹}œ©TE—çÓ„5o°×ïP6ã'59Ñ 3¢1v^°’QP§ÛÊŒ`¹R\Ðcô/špPAÍþEs@¯TIqé¢Ç×­¼nW È.—òˆ/5:nßV¸¯GCèh·Ò¥¡	§7„(»+µ5 Öííb$b¶a5–Ê{Â¶pÐc0Øa½k#2•Í©˜úº¸f1l6¢®ÒFv¬´Ï	œNÇS)±'„-B5¯VÀ„†jºç‡ˆ©
J$MXÏ‰ºs¦¬àÎ>Ø¿ÀÀÞ€8¸_yªÈà®º==”{†wmÌ¡^ÁÜAìø „\p¦<«Êˆè€.íˆäñ;9 ÊcwúŒ¦¸3@ÏÀøÄë9ŸÏ§ OÃ‹a}¬¨-î<œSqoeÓÔ(Üm­—Š;~}íwÅù
ƒé€I¥§,Ä•8BÑ²*dÕÜî*î®
òú ÷ä„ê§© î‚ý°è=ÂäÎÀýé§ûæ.>z¥o žûdc^àÎÈ=Ýk9¯½/˜ÒZ*zRôá,wì0Ü8?Ñ³žJo®Ó°àžjf|Äåš\§+':Ññ;ÿf¸'P,ãí_èhkkÑFsþèNìDnL·Û'õÇ?e‚»øxª¸å^¯¯=À2®Ø34<ßŠ¤LÇ|ËeÜ¿18<áÞ®z´;6ñàÝÿöÞ”‹›õ¹7-?ØÚz°¬ón~÷»µ³¶¶óæÆ².W¯}ç;k«Ø—
Ç}ï_H÷_¤¨wb¦ÇEñx1ðE°¨á<‚3”…*9â¥¸k¢´ŸJ’´N@ÞµÛ­öÂšèdfptH«Ô8œA¿R®2IQ˜‘Žb{dÄÙÕ¥ˆÈAå6‡ÃFÜxi,nrƒ)0¼j£54 ¤1:f'ï
7oµSœ¼5x&TÅcÌÔ p·ºƒ¼cÖÈ0++“)Ã>\ûÜ#}1‚SézWÕ©"@v¬jÂ-:=°æÑ#ƒo;Ýœ*.îÜZÙKl U@Ü$#!eÜÍÈ{ó,¹*¯ªJ&†ýûƒ;+ô{*ZÜº}'s¸ãu"àŽùT¼ w@Þg OÃs§ÓªâèNÅƒ;DÁ=!ÂâÏQ	x!¸³÷¨XàrƒÙä)-†ƒJ¾¨2þÜÉ‘ÈTÔ/Ü	p‡Î	Á¤õî>¡Â~þ [SeaœC[qh*¾Wèþâ	ÝSŸD!ßÐ„>CÄ»àú:¸»ú.ruÓ³=jÃSÓS“òw†î7S>VB.È˜Óì°äèPœs‰lS: †à‚5Í	/kì§ƒfùØZ›>8+®ÞÆ“ÉÔ	Ï¾¹·oÎZ GÅMæ7—›OÝºÜÖ«lezaœw´-I¬.!O¶µö}ðþ!FîYñí©àÞäR÷/´¤ªå“©Þžæ×Z®!)ÓüâµkÜß›ò¦Cjwÿ´eó½÷Œ6Ñ,¾mw¾ùÍ7î,­onýÍw76×vvÖÖëcÞåÝm€»|iïÆ·öfwI.p¯ðd¤8å¸(çJÐÃXµˆ¬P'AG0J!ËNøÜšˆ'„<¤ØœLsJ¬>"æmØT¸mZ¬5ÕË5z¥Œ›Tµ‘áÒ´+´·ÚAßQ…I*5Fôír×(ÊÑ‰K‰ëKå&¢+]QtŽ˜#>lÛÛ‘¾qT8KÛ›‚!DÖÍÊ:|½ ‡åf<ÛbDƒ Ž4É•ª8ú#m
·Ö<í&äV¦Vp…Ôc‡øT»Pç+8p¿ôj)m\Ç|ª Ü)·—§éÉ€ûÕp.‘Q“íW„àNS2HË~ç?–ä;ÜÏpÊ	î••÷sÏew¸îÙÀ]!7Û%ˆËøqâVÔ^ûŸžÉÜÏtj
ŠÊTïîv;&5ž=`‰{Üè+³JÈ“Ç¦ˆ’¼šMO‡÷Ó·åGýïž®®íå†çŸŸj~åÑ£Ææa]¬§µp‡j±j±ôNŒº’›7oÖf)FœméÌÞ=×ÔÛq@éã<¼ñ´ûˆ(­ˆ¼óBÂZ{=õ¹HDØjy²{éDÇS%%o7é¼àÃâÉ5M]óFÁ™qóTN;º-YÙßÌN4´õ} }H±½ËÊî¸7õŽ/´ì„gìpÝ;ø+÷Úk¯=ýôÅ‹ÍmÜ/÷õ³£Î#t}Ü5zïÎƒÍ	5ö ÕÇë-SjT¹ñ;w6îmüóßlí¬mîl-KI1äÎßnïm¯ÄVîÛ{wÁí_aÜŽR™ù…D’Ü/U¸Ã‹fMì˜I.—#Â	å)Ö¨Šº#r¿Û® ÔÚ‚n`Ýƒà¸8é6-Ò%N·•éF”¿À¦.,dAO–™&ñD¥’¦]EîïŒr-äe
S]\Æ®:Óþ–â¶S«—ÒÈOj%È³—Ÿ‰vÝÂýYô\/€DÛCo½º¥ÀBO4ÓHõa­_SGN´Ú 7EC¼ÆhÔÈÁì¸î–FitÃ?& J9|¬0@v²='+€$BáIÐ:’5x[h¸ã§áUÊš	|dàNçQylç¡ˆg×DÏ9ÀIÀíÌ¯Ï1œz•EÉÏEGäÅãÙLˆg4‚r	(gu2Ü‡(¸ê¥—¹çw(õAK D:Ò{)ô/Ú@Ã](,rÏtá”)ët†Á¯q’)<QÜsìÀ[l5Y“™íØäk*,ÎÈý¹”GÉ÷ãpë|îóeü€	w	,ö³@uŸ3D&¬Øu wšt«Cø®Ò72›sÚ1©~ÄU¯ŸŸm¸8ØÒð¹W>GÈ}b¼0p‡J0ÍFuÞ{6û¹¤G¬ÇE|ƒÉÔÂ:Ño¶Yj¤]<'Îß½µ‚k
« ûÔ9'SOª OôÉë”¡¯{{`wKMÝÃÜ¯H	÷<wÝPk²$]=ÖV[Û<Ø3úáÿåôÇLrÏ=ž*f¹{- öƒ©¡'v(Mµ<ÿükO“NÞ†¶ËÛ›FÝ¸õô”Ç¿÷×ïô×sÁv@»åîK[ß|ãÚdþùnlnlìì,×{u«+Û;Û{k»+ÞÕÝßúÖÝ¯pàþ#
îÇ•Êü‚p;÷ˆî4ªIè’ÁVÇf*¤THA8 ðGPaŠ›|>3	Õ›"Ñ›‡ÇZ]åŽÈêTàa¹1b”?¡;÷D­ííÖè­AG\y»su.ÈÑÆÞè„\TÀ—'–!lMíô¸£Vwç­[ŠdkfLª8ç¢ãÊrÄçezà>êßÚÁi‹ |Æ$£ýò2¹J£Ø‚Àrªfì´!íÎ`0ˆ³›‹˜|/åLZÖí wO¸Ÿ'àŽní(eˆ2i·óë`¯òb,[–)êµs:›Áí¤š=)Þn§¯èKúøEw¹#‰¨”ÙxFå7/%Á9è— Oñ¸k‰çeØƒæÁ*¸[ÁwIºÒCïÙÁ=¨qÀ½n#9—+êö¥²üÀ=d,ä$IÏ­N¥ä9VJÅWð`AØw´ÖT¹}UÜ£ÀuòCŠ–%ÉYòcš˜à“îÂ‘Ô¹³ý°°ÜºâÝ£êîñ6üûñ9èOµMö¡Ì]ÜñíÔÝhe^ñJ8uoKÁI÷ÁþxmH›cs‰»æÍiiß<6ÐTƒ€xN÷g±|;è?ÎÜ¬H1yG'q“YÎÄû,¹LúžÙÑ”zÈ…ùrVþwªœ–û¾Uî¿þu“e`¾ñÀkÞr¸€ûØÓ<¸74¿ýò`:[ËûQoÿ½~WjZ¾·S¯{ã$)³õ`sckô¾¹¹ä]ÂÂÔí¿ßÝÝ]^[[_Ù¾qc÷áuÜ¸ÿ<Ük²{©; “Â‹ªØ±–Ü¤—éžH}.‰Ó•Yáö)2w¬HåpÏ‹(Äd<˜œÁðhÚCÚÝ(åÙÞï@K»;-¸Ÿyª¼K;ÒÙêD3M$!Ï šFfôUäÞ#£ÇêV#X?âP„$Õ$åãó)*eÀl6#à®u¢%²ZK±˜É‰Ò\èÀm¡÷ç~›Âþ‚ix§Ee›wˆ¡L™7=›Ü,›Iï Ü¹ PÁàÞŽÓÉ")xë™Lp‡îìWÜ¡ýÀ’ˆƒ{UÖ>$»^ãÁ›v³´ÈIFÙí+Bp¿"æ¸´
Kå€»ðl„›¸©AyæA» ¥7fÌq‚˜(ø±zB•Õ•Ü™éÎ:.…º¥û[¢uÕ#O©ëk~ž÷?yåQ#Âîwqû9³‰±7õº½bÛ‡û
ùg´a’/Â˜H‹Ù´æ˜³›<•c2uÞ—Nø©'U'ú¤¤fÐ
…ÈXmÇœºþðÕ2Þî©©–m(gwM¼[°2ÙÅ»ï1pgäÎÀ}¿bÖ+£›îÀ	Å…òªC©¿íy
î/77¿|íZÛØ”Àm¯s‡oú=b¶×'ž"P¯o.ë–¼‹ˆûÖ=PûÖÎ’w}iyçMØí¿±²´²v…‹¸sàþ#æ¸ÿ€;¸wÆíx®šf º«½Æ­ÕºK­a9½ã­:£_°õ›”@÷:Òß6û•u´KÔ3ÒÀŠÞQÔó”¸
=.ÆìwI%Çÿ•ê>C”Pi4ŠÿÛÛCŠóˆÂb'÷•F:LZw»"@Ãñ*3üt¸ç
7ÚÚ‚…ŽM\ˆD¿d‚œáˆQ¯‘kf?ªgü“µ¨$Üøæ?+¢óç	¸#ã^Ã#'Šz˜h¼]îb!¾Òíå÷ÉÜÙU¹ÏL€ûõÄÃæ5¥TÚŸ ÄàÎ•;i|éßC„ÜaÏf‚{æCÇ§™„€t!¸K²q;9Ö‰îˆœîdwEÙP]zŽÎr7âN÷l"•ú…”ÇKvÜÏ!ä/‘¤4—ÕPƒãtÐ.H2ü ET‚§v<7×Y$î™èÎÊs’Æû?tÚŽG^°^ÝÓAÁèvºî9Š{3þ²	ªÓÅèSÃ%yûa-œéZÒžýïÉ±ø´Q@-i“©Ó¹ŽÙpíIä‰>¡=î wœ{÷a&òÐZûÄÛÑkçt96i;ˆÒÉý"–;wñ»º¨íP5Pµ˜ª?ŒÔ³Ï'ÀýÚÅ—Û&…+¯ê›šÈ°ô?àÀ]¾ygY·|çk_$³©ËK÷¶6–b®Íïcmcç{kºÕµµ•Ýoß¸±½wãë{{w¹ÙT;Ý›úv)÷óBp‡¸C¥D†0àO—Þ=ÆŠ#n‚ë¬Á+˜ö; ¬ŽT<üp³^.ÚEmDF*ö!npt¡˜vb.G£ÑPgg—[á˜1£Ð…ëÉ°¶#ÍÜÒwš•ÜV½"Zi%¸ÕÙeµ‡<°ÙÍ<0“JŽÛ2…Aú
§Ó	oÞŽï0ù¬zà.œOeàþçÄs¿Äƒ{© Üyæ†.0pJÌyç?NÙ_xíÌ’šòtp¿r6oq$t!&‘¸#áþï î¤8Ÿ‘/¸Ó©RÁÆTéfàN€•Š4äƒg¸Sr'#À¢àî—)ª†jÀs‘ÎÜ¡NU!uÔm?G ÈÂ.Si•Äó˜*—úÝ¾P%yžƒ,OÅ1“(ÂvÜËËÓÁb—Ü“b‰™g~â8&ýZ®6Ü¡G»
îâ;U;t™è©1“ñvnh0ŸZ¶ŽÙþý»Ò?aL¼*Ú’”i¼»P¦ä¤
òDŸ ŽüþâECßà¨Nwð'ó\–éÞ±Öœ¿¸ïüH<+#žrfe\C‡<½i=·5$À–ûì@w}â‘ë¼wgzªß’<¢õ1Ýƒ:5¸ý‹ß|cc	%î›º˜zmg‹´A®í¬©]ë+{ß·ë[_ÿúÝÇï‚Ûw€Oîn·uà šÈ­èT§J©‘«Œ&“ßlD‰—ëµvƒ›dM0¤ª@tPõ1ÝU$¬Õ*B·ì¼­€œŠ‘™¿^^ÇÛìXmŠ¢G¹Þìp„ííŠ‘ðŒÙÒGEÎu` SÅ–Džy´a.ÊnŠ dÇföÛ´A²_–CýRnµ<Tás’¨“ÛUSÈ>$ÊPª‰OÎ»åÌèS.ßŸÏ>5Üh%<}\ž ÷3Åw¹öÄÁ‘;­üþS•ÙÏqO•22ÁKø\X!sÜJ”lTáP¯« ¼ª>G2Ü¹¥´lqUÜ}ª€Ýà±W;‹m	×\I÷+âà~µËß—¨ë¤‰Všâ@)ï'äÑÆ|¤HqÀß>~w%|Œ‹;)°z<x±ŸºDÜù‡˜u¿›`ýT—1v<än~å•W(¸#ãÞÚ2Øö³¦©ÊŸÛÓâÞÃY6õ¥’uîê›Þ±††}šdÆG“Öœw6=÷.2b—ÉøµÂÉÔ†‰\fàäÉdê‰>ñåcCÃÝ2–]Ýý=CóûÐqãÐnü£C§þÚkk9uHuŽÛã=àv
î×úæ,ÙÎ|º‡þã`ïÖë&,ˆÎLé6ß%à¾µ¹|os©>¶¾ñc@;÷µUÝòÊÚÞîî6À}owïîÝ¯$ÁI™úyM~àÎÆ«²ûªãš‰C˜ýì}LùÆÓURº!½à¼K®¬voW ¬´Švs'ÔV×J+eÕ^OºÓ²Ýí¾iÛèz«]¹Å.~ÁKÐ­ÁÆ»æHØØ˜P­d0‹‰˜ð¤MÜ’ð&8PÚôŸª;þçzÚ“ªÓ=¿ùý›Ûƒ±MT?ÙØx{Æ/Yæ;Ï÷ùÚG@ïj„H.¬Ýî`è˜Êj­œªz´f?4¶³kvÖ
í¨©Ûl”„LQ\ÍHÏ’Ak¸ìíYr]C\»íšÛ}iáüyâá3œåuÎ„sÆ>wë	±Ž¸&pË¬'Q—^P¢øMèNg Î0·MøºSƒû±¸S•äîô>ƒû•‘|{óeÚ˜˜¸óƒzÀ½4=¸3rWÉÀ¢A2Td¹ÜÑNÜ'tÁJŸÞY™÷MãÕb1¸§âYˆuÌš]Á]'¬C¾‰gYnT-÷*+iÉe™Ô*â9¥DNÞÑÏwªÁýÈ˜w†L“u"pošŒôµÔÝGP£÷Œ±½FZ}îLAÎ]-¢ÒÕMNYÓ¾gÓ @kËØŒ_´î|ì÷]éß÷qéž·J71¦ôiê«.t¦ôÐÇ²uó‘·W™fÆ§ÛfÙäÔ¬È=ó’ûÿÊKîÿ=5´Øy(WÕM6æT(	ÿ£ îMó3.…bSwn¡'U%2µ2³ãV0AõŸ©Sf+jájo­®F£°ÉÜÞ‚Ofssó7¿…Ç}øŽ¹©bp‡Å}àñ	ÔÖ Â¹‡@ËÑ¢ Í§¾À'Ã§&#I
½9,$-Â†‘?©Õ4Œ´Ôä¶:Q›Tkt†³þj®v#±§ÛŒ:‚?F¼.dÒ+òAntžÂ¿n7H“±5‘4ãB£«·›Ô×+iÒ^2¸WY>ÜŸWÜQ§'µù¿RpÏÅ]ãúxWp?—¸Wfî¸¤´¹pïn¶‡TnŸÓ—<g4ç0ÈŒÁ½´W“iÅ]ãª’€ûrp·¬&¥ÍÖõä©(¸Ç¹ÝZ±¸ŸËÜÏ~tPJî1œºUÜ'ý3×;iF{5úÊ ]2ò.Íš!.Y¦N1¸û3˜ò:54?7pˆÔÞy„Gè2‹“ýÒz çº¼¤§àSËV•EA*y’g]èL-èáPuréÀÔžûQgæakÏD­èoÉŽÜ¸3rÏ¤=Õ3…ŠDšx[rš,‹¾ûz
î­,JF&ÏäíAâSëk[Çƒrû·¾pGŒ{Ô„•¢«[++ÀöUxÝoÝ¯ßýÍÝÝDk*bÜ“Á½JÖœ
>Ãí¸¨³9Ü¿VK‰Œ¨åÅ@Tàm£@å	½³¼Ü¬K·jÖØ®&IŽrpçlj4ÒeƒÁî2_î Xt¥Ç€ÓjãfÃ(‚¯Á‘¾³k„dÎŒ²Ä.jFƒ^g¥*y,’oyBU$ÖýÌ3 w‘Ç]ßfÔ5÷x)·CäS¸(2írZgRBwñˆ¥DFÏr9ÏÖ¬Ç=ôô‘èVùu¯6Ç¸<¬wI ÈÈMî$ê›G÷“TÂÒGÊðW‚/v¨
ªdJ	î”ÏËËé9ü·zÀT"ˆ¬CîâªTÄô®üJk.”
Øé$Ù2á—m»¿±DÁ6â~…H€jþø„F¹œª=–­ë	³„…Æi^!wÛ`è.|p…I_}oåà._«Ìáâr‡bŽÉÎ¸±sÈ3á+®U÷ò·z7r/ªÆJÀö"Ùâ”Ñ,µbsy¦>WKWWx¨¯o§ï'Çûú#‹ß/ûÞŸ<¤pÔ SW»¬¸(‚T2ÊÜ,*e
zøT-ÿ÷µ„»"–=Xdf'2®[eû}ü¹@îQjO•—ÜÿÏlo=”ÍY¸4ÓùÂ<¸wNNÕ¦î@n8–xU×··ïly¸Xd}í[<¸¯­¯à-˜ÜW¢«woE£¿n¾q/Ekê+›àöï|Gî¿È
Ü‘d‡Zí3$IÐíž°aþÏÃ£àÃ—foÀlÌ7¸SÉ¦rÏèì=½W/-œ;WÒqåêµ‘µì –Z·Õ3|ŒÕ4‰bº6	•‘‚;EwÁÙ;úÀ],oOh‰»Pog¬¯·*•ŠQ.=šÌîÉàÎðIÜ©èºz—1n@\ÜQu?™Ð/¡$p/ÉÜ)©'À½œð§hˆW<¸CäúÏ‚†¼C¥ˆ )´S	Sfi‹nI¯nsMpçD‚¸[½!•J¯ã²lMíVu;Eà^á†žPwHžNŸîBÒûewPd¢äþÂ¡ö>çÇx¦jTÜãôÑÈ¸"á¼Î;—)êòíS)7Õ©Ðª,4hqþÔ_vcò­Oúâ‹”Œ2‹—qMMÁ(SÐÃ(“\ŸnŸé2Y2(Ž×F&‡;›j27œdŸ¨ø9wh÷öTÈÑ76lÏ‡:ûý\öjê¼OÀ	¶ž4Q¸Îïa7ëë[ÛSž••õeÂíËËÛ·°tåÖ­õ[žèÆ‚Ü‘¹ù“Í{wïm¾òÊ+¿¿·	ng1îˆƒü)wp»ÜŸ—;$ƒ;ŸˆŸV—–{è„Œôt$û‰	S»í†YeÔ°p¥·çÆ¬A«NoOLÅRÚ–ì:zaïdã3*&ZqW÷nßÄ¨ŽÓ¶ùÀígÜN¹Še€¥©ÑGêÇr¥é¢ñû³û$­Í¶ÁÖE±÷²-o„¶íŠ f#ÕTâGlRpg¸žxî9>Ìž{†Ü%Jìâ2qb¸y‰)‰œå›X!§•Ð»-ÿÅ`ÛGÄ$Ap;¡ãqp_pe~ôjð
/îå"ñ‹«BÞP…j)Ë§cD¾NÈYÎjìŸ“\Kà‚;$>U$¤ÕC2lgèÞÑ{pÈÝCÉ½~`¸³õ‹Mã®ÖãéšçóeªæRÕãXÑçø+Ô¤.Éq²Ç}._×¥ìGö¤ç™©¦¾^zÓ¡d”i—p{¡à^ÐÃ¢¢4€Ý9<7îØ…FMŽ©¡Ù¿…ü{Ü¹ïqÓï"óuùÊ~jòs9(²ØpÿÛ–´/©%â§bN9,°¸{ÂÛÛk îË[Ñ.æ¹µ5Y8Ëê›w-+ÑõÕ»÷vv^{íµïnò½©BÁ¯¸ýë4TæL¸ã¶ÜE˜WEÄVAÄ7üî¨ºƒÊY1‚(]úK`†Ò/õbN*Šéf\N„1R®7ÚÜÖ
k7ìí*¸Óãçq)÷AîRtw¹†`· îXÂ&Ú'éÀ$î'J9B/KS‹EA*s»|;àöãWò2†~ô
avü+É™	ëÈÈãd.þÔàŽš{jzËp%`B|á–§%î¾}“³Ü™è$ÕqòàwÜ÷Ùà«¬dàŽ}'Ï‚;™î[áË2 '¶d-·:}©P"–Á]þÉR÷“^ÓpE wøÜëÆfÂ“Ã÷ÛilB×Ízq{*ªê`xBñE5¸†MDÑC3–úDðT“¯ç¹|Üžt’_ÁƒÓ'ïÂ«––ê¹ôª]<Tˆp/èQSçPxp
¤˜R1cèæð@Ýž­â.{rÏ¸äMõßÈßöÍì2~“#<WÿÂMÓ“ ó4²ˆZêMý[aþ¯ãX_¾¸Œ‚;À}½–sDo­ïDùL™(.wvîÝÛÙü!÷ßKÁýqpÿ4	Üéí]Áý÷Š'œ÷’Ý¨.À{®Ò4»Pj‡ù¢ãRï5×¨q˜ nÜ#Zxdl#KˆÄs#LfáJ¸WUT'ïª¬â.ŸÀè±¸­2p‡(¸'7•
×é3©Ò9[--¸ÿQs5°ñRº1cús'åR&÷¤ÕÏ8ŸHçaPÜ++÷îxDZrç— Üy1hGë%¹²¢O7ßÒô|HÁ]&Ü‰X1¾#ã9*î•b1p¯„HŠ{·Õ™uÁÝ-FlWUì	Ü¡´à^|ÉÀYú›^¸³«Ö™¿?çhä ™–"Aùû‚sHâ"±™Üå_Lêª3qi>¤˜(3àç”˜¿á^Ð£¦¢ºÎö¦–¹ëƒ]žÚFÉÑ¾cj&ŒèÇ¦¬Žº¸ìõyÆ.÷Èdv/oj‰dOáë7¼ÛÒïP(+ˆ&Öšú¶û-¸\»øÒ…5Ü¿±î_;f}c½veç{oî¬ßºûþÛ;?yãþðµï~7ãÎœ2_‡R‚»œÛåàN–áBîH†°†ô.—ý•e¯˜nä2|—Í=m6mEÍXj¤ÎØ´1 ¼+N,Ùlf¸e¨ÄÓmâÉ2‰wÔŠgww2¹»}Ý‚¿]
î|±½’†ÁPt—#ÜK2±»(‚;Ð^zŽOï+;]mær–ÖÕq2I)î|Yžþ€Ÿ¤w
îÂŒÛ÷3 w1eÂË.y…O<ùä	)¸—@Ü}ƒóá5_:’îìI?±WéDoÆ%£^Ò%Ïì¸àE–8±0Ûwu[·Ü+à›Aõ=pÇ'swp?¹pM{pª]}÷ïOcœQ×týÍ°©‘OX,Bu=p¯O[˜ši•ºir—i:‰	r"ír£Œ´ÛTé‹yª¾á^Ð#§"ú9¯o¾>Ù×åê;ºfºÈ˜…ÅáÎvøf%\çBîiÀbàþ»?·äõ¬XË—µs-Ó÷ÿ¦…õ¤*«ÖîŸòp‘íå]¼pñÂ…ßú6âdLÑõhtk5ê_wccgguuãíwÞ¹“Š;<î©À„Ê(ƒ;DÆfJÀ‰;ê˜ÓÉì2Ð=pŸí½Ü{Ã¦cÎõŒEúUÕäšÌ±ÛšmKz+À=Éâ^1xGÓœ"¸ýE1µ?á’ÙÛ!Ší´àžì_ùdM°Z yee²âµÌEa|q LÛJé'ØŠ0ÆòD<î¹R”áêIª#‡1t—À;ñs—%X“ûyŒpGeòÌ-¶²‹KÍLdmþ^ôf<´çIB‘¥¥Ü…©³|²¶5ûpul’K5×Ê(¸‹‰/Üé+EÁ=Ó=ˆ5{Ña	àÎ¦y‘+•]îlËÚx1$àîô¹»¶KÀ½4îì’\ŠÀ½X®“ÐÇæîàÈ?æ¢p=Ý4=6háÃÃÕE­­Õ{wå™¥}5"hîçrW×tœÛàÛÑ¢d”Q	å(e
z”USß´8]×Ú9ÜÒ9?4VÔÔÔß˜#¹CÉ^™Ï™Wæ³¹ººúü>ÿ¾Z.kôõOÅÓIÂ'þ™¡¬jY¿óóï_\¾xqmkmyÝÔØhº]ºGW¶v¢«|ðÖÎÀýMb•¡÷ïÈÀýÇ™ƒ{‚Üa« ýîØW*Ëîà–£ðeƒÝgu\AYJÓ@Øs£Qmt–˜e|keH¤ÊÄÇÊœyÓSé¹«7¸4Ûãû»_”b;DÞ`~fê „%+¶ÈÛ¢B%È:Nóåè.º§”‘å’l b!•ñ4Ÿã®&'&²–zô
ÐÃbI*ïñÃ¸SŒ£d{”îäQèÉÏ•–ÄA4îTŒ)®3¡¯•¡;ÅvÔðžŽÃ<"“ îü#ZÍ:;’ü+}†ü——Žˆ_ƒI„„Û¸†èKt5³"9ÎõðÙ8ÜO‹^¯µ<4›í»ivJObøÚ‚Nú¤< ÷Rè.ùËÅ?[dB$rŸšìsÁ}C7;;‘2Ü8ØR]×t¯à^—¾’^;&Pš³"-ID 0ØÐ"«ÎW·Já£]ÁÁÚx]z×‚Q¦ GO5Âu+°='¡<}®à•!äþÙ$Úeó,T5²V×Í1“§+c‡¼c(ìGTÏöíŸß¹óÒK·#ž©uŒK5y,€vÏ­(eVÖ7v6Þÿíw~²™Üœ5¸Cìw_Ã9ï'JpÇ×ÝB¨wÔn+ÔÝ³	zçr’¦¹Íµä
z­ª
"•„.÷*g•Õ‹ùMnî´à>áîƒ» íV!åöTà~B
î¼Uæ\2¸Ï¶‘ƒû¹½€»pM:Í7§jÍ9ôej{>~ðàŽ%rpç1ò9aýxH&yÈb%p·´A¯¾[µ£Âf?–ƒûa%pïÈŒ¶ÔF·ÜË¸C¡ »¼2˜í‘?Ú^%à^aõ•çÜ‹qˆr ä÷Ðš’Ü&\c?ÝIäT?Nï÷´ˆ×´p¹j°.)®bFáÙÍÉà‰2*mJºjaôRAå öp,WrO.¹Ó¢ûïþ8?=ÿb­CÙŸ$ð÷;2]µËä1EúQÕðlÿüÕåí;?Z[wÔr–mô¦®X0Š)†<È­_oÜ]ÝØyàŽTÁãþ/ wI$¸]œ
PW wÓŸOÒ3UqnÇD|ù’;*Œdù0tåŠÙ®å
z RCZÃ’>ÔíÓ{Qk…¬*€»Ü÷Ê€âÁéAsÐÞg­â‹ïÖ×è–¹d(¸Óz;OíTq"M@;j”Ã‰‹Á]")¹-ã¥˜Â(1Î³z;8’wÝìHö 3\Ž&)ÙíÑ[LØªã w‘žcfõÄ|XÖ,I—¦"Š|&Y$|2O—•p—;;ðÚ9»oiÉêmÎÁ]ÓS|„*ÁígÏž=M¹Š“ûÂ.Mí	p'á¢‰<òÜCzoywÖ÷¶Ü½Kf'}x‰¸ÀÎì[™€û¥fî ÊïMÍÕ]ïŠaŠj{Q}Sý^l2ŠyŠâG¶äº›}­IÕ~%êõ$n/’ÎVQÚóv™k á^PAÙ«5×ÖôÏÓ$B~6×‚ñ­û ¹
î~‡)–f8úÃ&S¤«= ŽµW_ýþKË[+¨¦˜Ö·×–×¢üÈY¢ð¶¿¹§Ì[ï¿¿s÷îNÜaq§ÜÎÀ¤AVcàí
îˆp§*ïøéïS¾ôÊ!€ÜÜV(»?@Å´†ÑÑ6}ˆ”Ù½n/0=ˆ„æqªœÀs¯O?áj³7šímî€S˜œŠ|Reäåvü‚ži¡ó<%àNY‡°ÅdÍ¬/p?)_	‹3pg`¯,L°Œ#óe2]Ó`ÎÁt³_~*£{:ÁåMUV&wÌHêŒK˜ÀK'Ïž§þx”Ý‹ˆO¦Œï U|ApwkÕf½nÉºwL_ƒ;8ýìSO=uêtâÅYè0õ¹w´q»û;Ú?ã@?™åôY	‰õ$ƒ]ŸmÁÝàSIÀÝÚf÷–¤w:Ò‹öTgî46´lÁ¥æžbŽÁˆc¬¨hqÐƒ¸™–šáéºL«sÊ±C’ÄÈ¿¹McI»Õ>˜Þ…Ú8V/·ìÖHw^É(#+ÖŒ2”‹ê¯çzÜþçT‰k¯Ù§TLü¿%{eZ.ëš²Ôú=¦Áp-â ï¼úÒ6²#M‘õí­.Ö-x$ÓÖÆ¯76¾÷æ›Üw6ßÈ?¸#¹3pÇùnZ…¸SZƒ« ´ä#}/û
z0R7¸ônŸ#ÞÝn³ki¤¹aÄ§¢z@v×¬Ýn·Ðöj´µMèÝgÄC˜Ä˜¸ó)• î|ÁXîçˆÿ:	Ü‹!9¸SúÅU›—%;$ƒ&¢¸£ÐËë—|sªýòÕìÁ]ÓÖñôÓOŸ>½wp‡DàŽýJp»Ü©Ø$X
çt!Ž‚¨x€‡° Û àÎÚy%¬•æXsp–[šØï†¦gA
îÀt€ûé¸Ÿ>uê©§Î2pÏ¨ânŸp‡Rƒ;ÿì¾YÍv—ÍÎ8¸óWª vÄºà~îò4zÂýcí÷[‹šægj¹ðÀpßxFƒk•ëJÓb—øPŽÜ>—|Ü àuñïÂíÕJ½²ãÕ…D™‚
Ê£¦»¸õç¿$•Ü?[lÝ¯ý7qû/Ïøí0®,ã·ïLE0vimÐ‚Õµååå¨ß2]¿åçV¶ß{ïWï¾wxÜÀý§?ýÏ|€;)ÉJÀ?…~œVié¥Þžfm!ÝýAHmèqëaƒi34š›í³#mÁîŠŠnŸ[?*;!vÎ`³ŽL¸½ÝN˜×«ˆû] ÷3	lÿôYˆ¹Û…ÐBp;3è[z0¡ÊÝÁÒ¯‚ÉÁ=Ù™À@>~jG*î ÷Þžì¹Õhþð»ûIÉA„Ü)¹³)À]F„@s–ˆ)uñ[ˆŸÆàËíüBþ¡S€»uDëri5—¯‹Áý0îg9%÷S¸ã¿2áí¯¯»/wr;î%%YRql¶[w¹
Ø|%©Á½4îxi)¸Óžep§*+^¸|0Ï%úƒs×¯·rŸ7uµïræ{`q|×fÓH“ØÕâàrQ8y‡êÃ
ë÷UË¹½^Êí7k6VWàö‚
Ê§ZríMg5÷8¸ÿáOˆÜ/Mz¸}WãàmîŽÉÛ/ÿÛöàÚõ”Û·‘*saÍÁùIÅ½1ºúÞëïýzgç{àv€;BeÞQwbq—ƒû™ÌÀÜžÜŸ>¸S–)Y¸Üë2pí»b:{Û¨¡Á¨!ž™%³/
ùôA—­Á¨ÓhuºÛìˆË¬÷yVð¸µÛzÆêõy­Upÿ”VÜù÷]îöî´b›)¸‹WŒ‡-
÷b©¹#U†¤ÖfÝM‹ûi
î§!epÂ3p'>þtà	Yõ‰³GŸ<ÊWz¥*.cbg#äàN+õÂÜF»ÞŽÖ†ýø0ÙB©Áý©ÓpÇ«&¼V»ŒNå“’ÔA‘G¿RîTÞlä6ÿ€ô¡É£ê›¯UìîçàñiÁ.:Š¿¡ÑƒYŒˆÞ»†Æú§ü\x|ÆcOIîõ­5Õus“ý3S&ÿnO´¶ObkÉÅ)ƒÝI2™w*ùÛ±i‰ªapÏ8XÚÔ)½oÁà^PA9ª}Ë¹³’ûÿüñO‹Mûæ`+Zœâö_ŽùÛc$àöË_ýê¡ÁY¶öÒEÞÝîÙÚ¸Å9¶7V7Þ{wî;¤à¾ùqgàN§þ Kp§G$ÄÊðäþ÷•åâŠûé³§N1p'À± i6’ÈíGF±XìÁoQ­Õib1ÁîÒƒÚ»CÞà¨‘,A¡}Ö5av£•/°;»½>·;`E1ÞgÅûÉƒ;o•ÁøÔOñ‡¾³qp¯¤àþ„ÜKpç['¥÷¤‚´ˆƒÓÚÅå’A<°]îv5óÚ]Ö/ZóåÇ¿ðå/Ýåà~$!aRŒ•*¦Q3d§ÀÚT´4NíÔBh0qÌ tZRª¼lâlS1‘ÜK%ÂœÖÐˆQï³íMÝö!Ýá¸`i‡Ž~ú0• îø§.¼¿»´llÆ˜¦Ù-n®­¤Ÿ-áèæü	|¼:Bæ,‹ÙÚ ›F‹¶ßŠÕÄH „*¹1•è<ß¥! XqÎ˜@Å°gXÕrºÃãÃíõ‡ê›ê5u655u.Þœëë˜ký™Axk^æ¦¦¶ÉµÌ(”ÌûjäSed.õV…j}ãpÁà^PAuàrƒû_>ûSç>&=Õ`¨4·ï²Ì…-œ?²ýòË_½½åð“MÆ,[ˆq_ŸŠ®X¶7ÖW¢˜»pw'º¾Cœ2ï0§Ì+âP™4àþ"‹*T]á¢Ì.Íq§”BÁý0¾ÏQš;.Žþ+íðN4p8·“8sžxŒmA$=zÝÁ¥Q,©uÆæ‘‰ ÛdG‡*ín’)Ó£8Qq8ãb/B`v¢3»‚;ÞkXÜ‹¥à.Ïe?Î˜/Nî‰_íÜYž8U?9µ¡'{«Œzö£/=þØc@w†íIäÎæúË$Úôt$À=Î¥$*†i £^åù£á‰4ê‡¤…÷b,(–r;ÍTÜÆ•6ÿýæž–Ü™¸C`wúöþ¬GqOf/égmæPœŸùf	¾u"^n?¿ÐQÒqÕí³sÙÉ€;Kím‰”¹¨M‰6œ8W*8e˜Ê 4àáSþ!ú¼I.‚ÇGÂƒý3‘ÈÌŒÃc±˜<Ü^$q™·æð½ÝŸ¢úß¢`™õ÷ÕÉ¹]þ%?É¥×ä¡‚Q¦ ‚þÚÀ‘;°} u?wv8Âí»MÅã¼yûåÛký&ÊòS3[Ë—·"ÈoßþÆÆÖÖÆë°Ê¼»³uwõ-jqƒÜ7_Iî¿ƒû™Àýù8¸ƒñhŽ{ùnàŽ¼d¯ýQ*¸«ø5FƒQMRÜ]°¹/t1‹FÌz¤ÇTB$2 üÄFªŽô`Rj<îÎ*	¸?t:S•ÀWiÁÚ'p?™î†ž¥ÍžuÅ]ÓöqÞÀ½,¸#sUZ09¥_¸31p‡Ò‚û'	[üùÒ§ÛeÐ™»õÆý9‘e¼ºWpWöÊ¨]'Bn€´pÜWÑÕ7Ž]ýèhÇ¥K=Yqƒ¾Jî*7þ˜2w¼¼`w\fîÅW`–y¸”Ýó1HŒ-ÙÜkcM)ZÝ,
÷è+:$gïé¢£Ì`µÔ(Sàö‚
ÊY­“þ¼‘ûg˜¶´ŸªÙƒ{­Åä0ùý3}swþáåµAS-¿°vpmíÎ…‹–·00uíßX[{ýõ×ßûø7?ø ÷·ßÙ$àž:Æ=sp×‰¹]˜ÖDEÁ œ îÇa”IXeº—\¶qbÜ¸Ç´bsçµ/ÐNÒÛÍf—ÝÐÐÐl³/é½Ú–Ê¬OgrgÊ·ƒ‚dàŽ+f•Á;¬îàv‚v€;ÖI-¸'ØúòlCƒFcŸÍºâ®¹ññ—¾ôøã_ >w™”À]Îîd§(¹‹#×)¸Ÿ§ö¡2ž}éãòH˜<B–€;¿½¸ÊhX<Lþ`K‚íßü„Ð&Rg°‘¹Y=ª×·©÷å³¦ù8¸#„‡^"àþØcÑUè#%¯ŒñÚµô·³S§>rŠ„ÞÝóµ+¡…sÙFAƒÎÊ¸“¾Ý%z$Tš¸'äþI¢â^œÜÏ‰Áý¤¾0ª“|¹öqYjf8Åë˜GaÃ×å®š$noR(¨MuÊî\0ÊTPîš³pùÈýóÕûËís]Ü~«12ewÌÜù§¿=é Ëü‘®­‹ß‡ÅÄÊ€Õÿumkí?^ßYÝØXEä[°P™tàŽ¹©Yƒû³iÀ½øHjp/½r£0i?¥Öµ±øàU®>÷P%q#`æ’7hvÙtZ£Á€÷	7ZRUÜ…’»Ðè€OEzp|Û<ß'ƒ{ñƒ÷Ÿ]½ár57®eëÂŠ{–¸³‰Pt½“iÀk$?MuŒwÉÃÈÀƒû	½¥<¸“­¾	Ñ¬7ïOÛ7¼ÿÅ{÷+Jà®sÙz:p§½ ü•@ès—oè¯ö–f;ÛHÝã¬”€{ÀÎéô%ƒ;öè¾'pïè1¢nÿŸ½³iãÌó8IAICQ€y³—F½tÔ®öø#+¥]©©”^{ÛJûr—J]­î¶UU5{Wz1l²%†òb/1ó’²•°Ãa ¼‚«=*a]¤ˆýµkÿµÿß÷yž™yfÆž‰q<½Ëf>	ãúuìd>óã÷û>ªd–ky
‘/_”ÁµyhÙº¤öv lZŸÑ¹ùªòÆf£Œ‰I!¸>Ùš* 0÷?ß2z•WãË-3ËKã‰Éñ7v6c´
ámJ­$=Ú½øñÇ»ûÉŸ¼›L&=Üßûôƒo~óá/I
î´âÎfSY§Äz»$î¤Åý{¢¸¿ î€‹»ÐêŒà	>È
„éTô¸Ãêˆ·q/ôD\m§R,¹o˜Ë1IÊÎ¾ÁîqŽÜ¤h±-ÂÈ‚LÕ5º6ô…Ž3¸¸ƒ—ùéep)À]Xô“ÊGt¥¸3å¦]\L¼]wîárçÈ:TNdC4È*ö`Ä3ä¨ä¹ kqÄ]ëœÅkÕºRÕŠPô)Ý&ŠÍÌª»…J; ×8N´½ìÀÌåy%ÂéŒôÒKd¨ºÜ+-å(hØAt¢Ô/ZÔ3Å ¯í—¢¸³>#¿^dcx#•…¥Ÿ¯RØ.Š}ýýùöÓÙC5¡¯«:©óø¤OìãÄðDÚ)”Ò®YC}hSzÖíR.°š×A»eúN–¼·nö´÷þ•Ì>•ÊßKir½Ùànbb| dþüåÏ]E†²e|„»w>Ñµ9=³¹y†!Vö§SkÉ}ÔÚß~û'»ïþäÝwÑ.“¼ðé™NÄwùOðöT´¸ÿ†‰ûw/î?&â~@òd‰3bI–G†ÁÄÌ»ãUjq²ÖÊmf(¤Ñ`Bµ¡gÈ9­@­Ýç»9â\ðØ­uõ—«ÇãDÞ‡•T%TƒB§}Ï1ÉzöôiX;('ˆâÎº¶Ï)8˜¶Kâ®’rq—â9ýå<nQZu_Òö“U';œ=ž€Ý5Ô÷ÌlŸ´µ^¾¨@} ê(éqëíe”*O•ÄåŽÈ†RÜÙ•o#Ð‹;vÓ
®/w<V	mƒQCÜ…Ç^«øòq‰ÌÜáíñ-ävÍFG")Cpª‡…7§Šk;÷—X$O»³>¥EÚáýÌ ©2“•¦Î‘ÏÒö±é__DüFžÞn]ð±Z;¨¦ÜÜŽ„ø©&¾Á†D6qç!îðvÆqòVˆ]Kµ•€~pû6RÏ:›Êw^÷•­#=þg4Ö¨êíà–ÎIÄx‘™ibb]šøLÿeÎØç¹dx¢ÌÕ¥×[óó÷ÄæöµÄN¬iméQ2÷‰»ïÂâÑ#óÍbÜEqÿçÄýotÅUXx{¦¸¿¬ +§ÖÈÄ½D)î•½]7KîF?-Üu’R{gtäîÂvOévwl,ÐøöŠŠjÀ]CÜéXjÍYˆ{5w)î€‹;Û,*q‡¹ç.îÂ‡GM†¸ˆ{8tõMiU>Ñ=¤<·Ç^'/,—AÜ«nWå&î€h]­:ò„ø¬©¸W
Ë¢ÂI¡…\ÜÁßq'½2 SÜK€RÜ»ˆ[$â#ÁÅÆ…ò¸³Þ˜R¸/cdXOÜO²šûTƒ^Å=8§ç4’¸ÃÜ÷r[d}Ð²˜oïÉM”a÷jJÔi«¹zâ^Ë+î‚·ë‹;˜zÖKî*ÞÊãØæ¿–-I~Ë«s7}-›·+åûš¶ø«S˜I&&â7UÒl3ð/fó¸áÞ>Ñ{ð³Äääü
¿ÒðöÉ‰é‡ÿ3ü0q½2ðödr÷½Ý‡_?Ú»ÌÅi¹‰ûy¥¸3Ä>ˆûºâ­‡¸£Ë].îD8J	Âº„t±“r›êdö…Aú×#[è¦”Ú;CÎ@¸=ïØßyÂ ¥jäioç!Ÿ¤à~–‹û‹
q?G©dÕQŠ;SY¦º‚îé‰;—C)«„Rœ“¸÷9×§‚ngÇ¢UË7ìiåÎ©EÅýöÑ£‡Ú;Ú«DqGQ\.îÅòzâo|	&ÞÌ>táÊ%Ð=©4~RH!’GÈ`½w*ãw¹+Ä]z­Òž(ÆÄ=ÌÄ=p‡£åc†|§ëÃS–œÅ©;ÝUývÍ§Ûíëï%¥oÀš¬ Ä™½¢JZÜãÁ|=Ø1R¡wŒ¼vŽu–ç*î¬ßOB-î<M?«¸—v¬×¥žaÒãª°6ïÁïbzµ9ÛQU/ïat¼-s.õ’ªQ¦yF[ü×®«Íl”11)·b©ÂpÕû§?­6ÖáKËèplzyçµ{M-éTë(ÄÝ»ŸŒ®Œ/MxÑã~w§¾÷Þ…ä×Ñã~™‰;mqÏIÜù‚K07/Óâ+È÷
üÐFÚã—9Îûr…*!*´¬³u,R×é1gT›EEÿ‡cÃ922æ#k½c5àéi$.K×bB„ûÕÕDÚ¡6§ÁjÎ^&mPxËÏâJq· îëÊûùå<jE&ãˆƒTŠ;G©íÄÆ¡Î'Ñ[ƒ›Èa#r·Ç•:‚ëÁE÷b¯f‚ }H9WqÊå²ÁYuèÄýö¡2
6â.ú8…öŒh¬UÌû83¼JÆ±R
Pl/–ß:Ë+¼Tq ·ŠŒyãúlqRžCC¦:GÜ‘Å7dˆ7¦µ™!‚·ƒÃj î„^ÍÆz§¥¶Öïd¤eak)¯¾ŠÓÁ¡){žÏ×îìäâNƒjÊoŽù¹·k¶¹ãô\ö±œíµlé+1™“ÃG°kžåî¿‰•·Ïµô¦ï<ºe9ã`oWÕæ®è<—¦.³ÁÝÄäÿu’;@lâ_þØfTl¥áQK[›~ð[Ãì¥´Žz‡c“Ã©¦é,–ºû9w´¸¿—ÜG¯Ì§DÜ?ü%Ä}ïÿªn•a¡2|6âþŸ¿£Í¼ØÊç©ÐCÌÕ¥ÙóÔÛ©ÑCÛÇ;Ã:uaHÂªih 4ñmÑ½>2µmo0«îÁJ¢Ý==áEÛ,ú í³#Îm7*íTÚ]°ùÐM;£FUiç)A6 zžQAS%ªäæbaœ“ —áR1’zž¤¾’©²Vn•·K6N¥ðû„Ãâˆ¨È+@txé~;‚C¶`$ =$è
zTâ®X¬©ÎÝOMýö¡Ÿ>/‚mÙ#‹cªœÙáS¬Ì°•©˜Ê{(áOï¶˜j=àûƒt¡à2#Àv%°ø£³C=¶òrƒ†#ë"~)žCŸÓÉ“ÜÖŸ'<÷ÜsGY>y?†´ªœö~ÚEÎû©d¹Bµ¯‚è†Ý“ïRRNŸ8–
hXiÔ†¾€ÀÅ]	]<ŸßZÓ9ÕÑNw·>å8g|fY.RrÃ{@m_Ûj;’­Ü®Óæ]-R£®·ƒÕ	í‡]UÝº¹ÈÄÄ¤@\ŸHŒ?wÔ,³Õ’2–ÖåŸýì­×6‡ÙVºe&1ßÒ›ö¶¤Poÿèó‹´Å©2÷wþs"î_ííýêW¿ÂúK9‰ûwqG`q‡—XÜiÕ‘ÈË,Ê¹¸—÷ãx´Ìª{!p¬cu¥±±ÐXûØ‡¦ö…ívRduô„$õ±ä(îô{qCdD$q•!ˆ;È_ÜUÿ>ãða¥¸“µ~2ÄqAgÏPû FÝ3½1å©Sš¼M>ÈZ¿ÞqˆòSqÊÞ™Çˆ;6TF©¥_¯˜ƒ¸ãñËhù— ´Ö¯Ü]t/Ä-!—A‹¦	Ï?wq‡¹WÍ&÷ÞZ
Wcé#qGcË6&¨ó=wÕT(Å=Þo‹Z"î€‹û	&î§tÄ]ÊPŠ"çÙ¤é¾Ú·—´+Ò±Íîìµ°¹&Ãáôõ¢Ì>™Œ4Ç6íÃ²:Pæˆ9˜jbR8Ž2­åêr·Qý<³ÔõÖ[;ãbtûÒò\b~Ô»¿ß’ZJ~þÅÅDâm"î(·ïï]`âþÛ=bî<R)î¯÷óbÅý÷O.îåTÜ‰¶Óhäs°ušG"Š{eÜïã2¿­Ç¬¹?)u®»Ñ8Î‰@¹Ì
»ê­i\îpG¶ï†f;I®uÁÄ]ê–ÍEÜKtÅ½öÉÅýö€'âvnkõV×m¹W1“÷ËƒÂëwú]1ÐwNÄ½CBûÎ—¥þA©ß6äÙŽZüë9c½3_qï·ëˆ{¥ð_-½káuIÅÝ·ÿ™¼ÕèTŠ;@W>‰O"î˜BÈEÜ+§žÍÊF—î\Q¯–t ÛÇ¶Ú´ÂôÚdæÛrñön`‹ù#æ`ª‰‰q<( ¸Î"î—æ&Œöö[o]ßŒ‘GIãkeóž7¶¿¼<kšL¼ÿÅ‰Gû»dáÔÿ~¸wá÷>øí‡X}I÷á1îÄÛEq‡·³…SÏ¬ÃÅP›û¡6¸¶‹ÞwV!î•âäwépIÖl-ñ¸D=f¾Ì‘®kÜ!»Ò‡¶‰‘ÛQ_]J²ÚÃwÇfg}ÔbØo”j|aHAâŽwî@;â•t1w…¸Œ†¸ŸP‹;+½Ê½ýL	;ä9ƒb‰*‘þ0‚–i…{Ô¹×íiÅžŽÁ¾Ù0Ô÷SÉÚuÄý$Ô:«¸N¨)Î&î@%îlS:G÷ðb<2ž¤âî\Y,c®”14œ (Å½„N P˜·áâŽ›•úÅŽZÂ‰§Ç¥] ;¶¼8‚·)O¬a,LP#ÁÄ3°•€Û:ùNÃÜÏ1q·Ð¾u.î@KÜ+%°&Í}43
æÎB®.muk4È.ëõY•_%ÞWðKUûŸÑ~.Ó×ÌÁT¹QÀœEïCþ~bc‰Ýø»“MÂkö.ÍÄ¼ó;¯ïÌ¯Œï¾qßÝO|üvòaìá>†S¾·KÄAîd65qGŒ»®¸£«‚N/*¼ý4¨¼øGw@W¤ #²‘™A+êÃ&ù`m´»c•–h¿-àñl¸êÙÒK¨µ‡F í°uÑÙ+*|5DÜOCÛuÄ}/”U0q?Çâ7 î T-îT¸·gŠ{‰\Ü¥$Dµ¸ÃÛ‰rSGÕSÌá=î¶õõuÏ@•V(¢µ'ìH+.j—UÜÓöàmµ¸—eŠ;uuZô\Üñ+SÜýì¹ˆ;ƒ‹û+')2q?L¡‰‹¯÷ö÷µ·[âccqKùˆAY„ua¿–¸ã™‘ß^Ò÷â^`sû@­D{-™Ö%“¸ì„¥´Ò7¶ÿy|ÏXÅÍŠq·¨Å½\° 0]%ëU@±(w`p?k-3™k¶5ålíÞ™Õn­cþ´N%ltæzfé¬9³ÞÞ¼¬9˜š^k3SMLŒäÊµ‚™ÝÄœ(›MŠwëÆ¼W8}ÅÊ©-ÃÉwÞyggy&ñþû¿þâ²njâÑ×vß{—ˆ{rïƒ.ï}ó^qÏ_Ü)$kä`â®n„
[¢¸‹Ï†xqXS½fÇL ÚpNÃnWƒUÈ×L[7lch2q÷uvÂÜõÅq0q¯ÌwQeÔ=î04µ¸KœP‰;8”»¸÷9¦û«‚â®®¸[·ù$fSš‹¸gŠ;0FÜOR^Ò÷ovî±rÒpfÔº®Ò|ÅÝÖ÷þZ¼Åì°ÏDmÿP§WyÒh«™ÍWÜ-O(îlÓ28dM=CLLßÏœ)½–kÏhëÊ²æ¼Yó\‹ÞÁðÞµLGh¾¤òv°¥]ð6½ÝÄÄ`šç×ˆ2~­¨ð¬ýOärLØiïÌýÄŠsðöùéýÏ¨¸t1I@¨Ì{yˆ;Y8õüymqwåñ-›¸ÇI‡»Õåœ»¶›Sª&mµ¯;ëáˆ…vVFu{œcÐl.î7ov î ‹¸so§âÎ›A2Å×ÉWÜK¸¸!îÁÁ2­…ò­‘E—JÜËÝ\Ü{,î'™Në‰;§ä€âÎhŠ{GÇ)qÆ ¼ÃÓ^´µœP‹;{a4ÛGWÜÛÙŸ’«ïõ—’·³WÏÄ½tÊM~`”'Î
ß¬fÅý\>âr÷ZNÔú+âªÞÿ›žYÍ–$1‰[å@ËôÖu­YÐîÕ%½ãýô¢ÐÞžéí«ÚO¥é–úöæ`ª‰Ié.`®ÌŒymÆ6Ê¤G›†›ÄÖÉãÃk“ÓMK‰w’Kã;TÜ?J rÃ©¬âþ)ñv*î{ÿ&ä¸ÿ‡FŒûoX‹ûï áòÔvð=¹¸Ÿçh‰{5²“Ew+euYqÅÍsR¯Ì˜›,ÈâGJ(à2›ÝJñì=uB¥›®í»#¡Yß‹¾.îX;F#VÜA7õ¬M—o`v—TãU‰;—²Ø&¨\Ù¹¸óES•!îU\Ü¹®fñvéú€ä¸OªüŠìnO°zTÃ©ÁCh•ÑwÀÄ½Pwž‰;ƒ‘ru×)¤ó«+_‚òr:Ž*ÂO_ y\Üó+té&±UÉgÈ²©i÷ ÏÚçöŽGgœðvì2šzô9 ÷bìÝl„ýü]‡·ÄÑŸ_$£Ñé«ö±21¨¸QÜåhŠû9¥¸³g¨wÍO;(uZ1aò×ÀhlüÞüRìª†½·,ÍÝÉVëžI=ž	ïô½z)rzÍ6Ã÷š‹²¥fö¨wiß·Ë”111þ“³B1}ã)‹p‡·{›x¯^ëÊRÓÊÖÎÎ½ùäN"¹ó÷äÊ×É·oO•¹Œw*îÈqgwP&îÈîæÚN‘—Ü_æâ® êwq†S¡w(]Y¸¸ã@­.Ìž¦Ñ…žˆÍ‡ç‹Ñ»áF³[æ`¤á¥€m4ºÜ‘pÀ6§{sòN¨¡»wC¾k*˜·	'ÒÎQûûYâöd”—à}CÜ%W!î~La3líÔc€‹»¥~%yÉýûÄ©A–‹»J’‹eâî	¬¯÷öQqO‹;ñöé¬ân8*[2Çº1¨wh»ZÜE„áT¹¬*'ÓÜAGëH›pb‡ÉóAuúËS|e³cÇÎÕSFÈ¢ÝÖ^š	öº(î€œMÀ×¹¸'xšY»–‚L„)&÷DÏAp¯½áºTÞ48–TÁV	)¯Žó’;¤œÁ½]wŠø—p¦">ßÇ‹;Ybµß³è©O=ýŒn^»A¾±:[†j‹õ÷ÖÖTkSlüþõ¢ìäàíkó«mÍÚE0½H„@Þ¹’ÍÛé—’[+)-šVUw`¦š˜ÀƒÂµ¯u<®©7F2ÑÔrUüvt"š˜L|òÆÎæxò¯¿þÙ¯ßÇlj26ñèm¶p*w¤Ê òñâþïhqG¨LaÅ@ÓÞ@6qg‘ñÙ‘P'L³bÌ¹q˜â~0¸‰Ö;Ü‘P¨ß§Dßlˆ‹û¡¡ÈPˆlBÇó÷¹¸sY·gi(ˆ¸ƒ‰»-è°Ûûû¨ýY{z˜5Ö»„¦ézSÙ*ãê?:ÅsÜ­áÞ§FÜÛû:J”â^2 U.ÜQúâ^ì¤2°uˆ¹B¥§JâÞ÷íáé†…Îj ÷7«£Ñ8w£ÅÄ{ãƒ‘§Ôžw’4ußYÝšŸŸŒÅ¦gffæ·º®iØëí-KË]Íz%ºÕ%½"ØÊV¶D7êí—ÔÓ­ÚA[¦·›˜€=äÃw
Þ(³”2”	Þ'4Ú4‘jšßùÁ;s+Ó‰D2‘Øùì‹ÝG±G»?;eˆ¸“÷=¬›ªwÚâ.wZpÏCÜé·Ôù`u*qÇ¡òop†aÔBäÔân!ëµWÄão‚øÈFc£YqÏƒ4reöçÀà 4…J	Îƒ|>Öå^áóuŽ<ÎhµŽ¸su¯ PO?ÍÅPq§-P\Þ¹º« ŽsLÚÈCÜ‡™
rqÏ^.îƒUSŽžÞ^ÔÕ‰¦"vG=©¸ãw‚c1˜!îAi¤“§Aú€Xè¨_âNÑwNvqgÎŸ1fËÛnx\=F.ÂÚÁ¡2Òeßáï¼ý8™2€¸û·S…§nÝ_ª!î±óÿ¥Ã$Ã<OÅ¬‰•%\¾gð$"ûŠÜñ_¡»®ýIº}ê|Õß¡ÈÅ=>KþF0*Ï„òA6k×wòiåÞ®”w>Îo§KEëRO;[ÊÎxm3t½»­[9ªJ>¿5ÝšÒ¡em|ëz‘.w¦u:ä¯z—¯kxû¥õ¾¦à~¯ÈL51ù¸U87]n.pæÍ¦ÑîW[¥Š{kÊ»ùÆ';ŸìlÎï'Æ‡I¦L‚üÇ/²…S‰¸ïî?Jqÿ0gqÿ]aÅÛ‰}ÉFóN±#^¦¸‹Ìn[Óuf&ä­½ÁYX75¸Œ
âŽ^
–PŒEgCBý½ä!îØÄÕâX‘Q%í€‹;ø¶Ä} oÊåé`ëþ`¹XmÊJ;<VÇµd­2éúÆð LÜÓvÛ¡§CÜoyª#Þ®wƒBeáž›¸ã‰e÷â,½2‘^¹¸ËÄÝæHå+Š‘ø[à÷•ÿŸˆ{´1õ”³’Ó!²ùÖ6EO¹¶+·6­MÎÝ¹Þ­kÈÍ]3M)¦³”ÜPjG­ýJ†·_™Ni‘Îðv³ÁÝÄÄ®,NŽ‡W››U¹’2–4©³LÄ¶vîoî¼ñÉvöÇ—Öö?ûÅ¯ûÉÏ?ºHÄæN:e.$¿nyxùòo¿"w>›JCe4Å]N=äâ®y\Iê‘¡¿ÛƒçñÊ,[]“ùŠ5*xÜÜ÷vº2ù]¤õ™â~@êzÖAg`È³ÑãÚ âþ&ãÅêÎèØÝ……çHÔWQëÎ*îôO¾NWƒ	L£IÄHn9•Á¹EçÓÈ2”KÿsøKUâ..6ô¼®¸sˆ¸÷÷wDÂLi$ß†˜Û‡VrBèìÛ‰{ƒÝ3xtÊÎ¶Ä4H.îu:*Ü}§J¾¸+ž!'s%)ú­|µ
/¿ì0CœIe}½§„½%‰{4œ*<XYVý^ê¦nÀNA„&/	â>èÊ¸SOºhäùW„·lp¥ò§nˆ‰º0kŠþQÍ.îomq¯U‹;ÛÕZª¬;»F÷¸'zºY¾”Ó‘¯kKžÍ2§ÑãÒ²2=~oõÚÚõ¹>¯ÛÛ´™uáC'£6ïníl›QuôsÅTƒ¸_¸&÷tlùNÕ½-–NÌD‹(î­“;?˜›Þüä“½¾¼2™øÅg;_ìì'/~NÄw*îŸî=zøÍåË_}ENåw.îÄÛÅP™ßèŠ;OƒäšÇË´5"|§!îhqÇaŒ˜«BwPfCÕýFVµÂÆ"f£Ì©«GÁÝéq9çX\’’Š¨É|À6æ£Î-Š;ÜÏà¤oæiJµâAßa²#™ƒ‹;‡hBÜ9Ä‚d6ÈÕž{=÷*x«JÜ%÷öÁÞ~O oÀ‘4åy¿=î®Æ²ºWÄßÆ@¬È÷óáTÒâ~T@OÜ¹¼sÏH‰lØ²WQÁ%žWï•ù1ì{<¢RÜÁsÏ‘Þ~$4ÊÄ½¶öLÜÙ`DÁÝÆÞÚãéý9NÝˆ©2”2YX%Ùyö¸’ú KãvnMy¥}êI¼=Ý3VSCÄ_J—©{%üAëâ.DÕJŸZ.î§äâ^	ôÄ½?÷yªi+Ê‰k]7ÄºwÛu‚ãèhëDSlfîþ[×»WwÆ›tŸR,ë1û
érÉâíãšÞ>±¬ºò%ÓÛMLŒ¢§Ð#=¼z¥`“©«£©o¥®×3sŸ¼ñN"ñNb<ùúëh”ÙÙÝEÅz;ÄýÂ…M%=î_}˜³¸ÿ§†¸7‹¸ºÎÅ½F!îoŠâÎ~p4‡žFwqï˜9îy€ÈF‡{#²áì÷—³ŸbÄã#Îm»!ïÛwCQë¨~œ¸}q'bDGýÈ¯szâ&î@%îÔÛ)\ÛµÄ½
Ü§<C}P&–*ƒ¥Po;­øŽ­Êëê—k¤ÕíY—§¦;
"î€‹{ÐwÎKjÊ‡<'ˆ{o»$î§¨¸[FŒ˜LEm¼T&îR&¤°tÄ]0s–ðX&'p2q§{‚w•ØžHt#5DÜÙ´zn‰ÇËó÷Z
wâí÷òÅ§»
1‘›¸ó&“#Ýs^2€5ŠÂø°·É»6=3¾<÷àFw®ýã]ã^½ã»Fˆóx;]1U}ùxJ“ù"³Þnbò­±YÐä–5˜»gF³ö¿ìíoZwÚçc+•x³%ØMgRÅ£Nª$ÚE«Fj3÷æŽÔêNwFÊìh3ûjW£Ù[Ý7[æ6¬y°}ƒÆw‚ÝØ€!^¸Ø$\k¥@,‚Ÿ°íÕˆõ‹ê–ªþ	œa¿¿ó;‡ßáð`ÀiªóiLÌƒ±Iùœ‹ëú^‡_²ûw1›Šv™;?®î|qÿã×&âNÌý·È•)‰ûÿ=®¸¿´¸#‚„‰;¸JÄ]+‰{»øFº îW0 ZSÜ¯ÏºÔ^™&áF£Í•ÊYüþ`^'jû‹#ŒhwÞ`K9Pm×ˆ#{Çw"F,£ã'%î€Ëe©Øãn°ÙmžÀ‹Í`µyÚ*e}¬ÛaïbÆ,uq',îøìâÞVSÜÇØJ$¢íàt2Lìñ®c‹{@ÌwÄÖÚm«ÙHZZF«‰û;ñcy»éÕe1½‰;$œÄÍJqšS÷·Sb¸É¸æñÕÕý½ýýe0>Õ?<8Øø=ôOíc¨µ.Cûµ´½ííÍdRFÕz»ŠÊ2õš/ž ›Ë'cîÃkŠgÆ$šÛdÊÜ¾_(Ü>ÜÜ:¼óÕ‚¸ÿE÷ßÁÛéþ¥fÄýÿPqÿäÄýi•¹ÈÄ½âN'T™¸+å=²™ÍFUÝ·v³3™Ë98¤ÉˆKÝó¿Åqà´™p%61½xJˆ>‚vŸ ¸×N©Hé¢4$îúêâÞWWÜ{«Šû¨?É¤½Nu'­è•‰Ûì‘ŒÝî4CƒòT{Ž[+½ÇcHOLÜ¥%±½'+î¨¸“~péq&ú\œÊ’}cÈ×}´¸#Ê±ª¸#á‘0&þhÖ¸/ÈE’Èî±\D÷™¸ßÛCß\¡6®TÜóù|+â®mEÜ‰·3q×Ç¦â[ö5ÅÄþêÍcl^ƒ§²€¬Ëüëñþªm2i¹½‰Ý­QeÓŽ©¢ršôcÓI²5}¬™‡Ãƒý¤Qf¨xfÌGÇ÷w¡ì‡·1œººõã?ü‘.Ný•A$‰qÿ×ïÿ1î‹û¿âþ~qg(½HãŒåâNÖâ_Ôw½KÄ½GìS†¸‹ªÌÜ•öþt6tpàRûeÂ@âdB‘` §"®€4y%V6m®Ðl€Xû“ož è®AÍý½fÄ|i¤jŽC]EtqùÛoÅõ—ðÑß«‹ûù#ÄœµøºÃ‚ŠlÚcñˆß’ŒôQq7…ãÛ.î‚Åìôû·ÃkÑ˜Yä¬²VOðRçXXª¸›sÞzâÞÓ°¸³KÙµTÓwÑxA;‹[-£³Sw$°|Û-{xµºÓhpn÷Ñâ~^xgáš8‹JÄ]ìo—¶¡:LÂ’°í 9àò[1hpM¤G&î^×ñ1Ò¥%ü.i:É†ÑåK	HuÄ]™ä®LÜ)Wêˆ; 7¦Ö„›i5\ÈT|‹IL4W¾Ú‰­žk´¶9¼6}\µKS©ä¤‰·ÀÅToWQ9[ÆgŠ'ÉÜÚãŽÖŽ &OO/ì­­lLož¡·Ç
…Ý•lvgŸ¸{á{,`úYœú5ZeXäïHÅ½qg‹S1›úÿþFKë¢¸¿_!îÌßåâ^õ-ž îx%£
&&ƒ´]B™Í2¢¸Û— óvp/ðâÙ3‡U-¹]j‡µo‡"þÀ˜è°ö d¶ífžâÏÓäaÅ"¦gé§Z.¯H•ùD9£Þ^)îW)´ä.vPÁ¡ÞÎ`…w½&îD÷X§LEÖ{if±]Ný¥E} âîår'ÔÕÍ–ÑŒ®n·Ç¹œ“¼'PwüfŒvvú¤Š»q›ÃYi÷’˜ú"Ô”•âNé‘Àç?»–}4‹J/j¯€ÉúTÜI ‹ìÑ%&:ÛŒõx¾Ø¶ˆ^z÷„‰»D•ÔÙûôz%g'Þnö…‡2b°)\ÙW#õÜ`2¥èßtˆ{©Ü.$:ÊÆi„3"²4+yX’ž¥Êg§è)Ò•‰»øX‰ÏH{ŒÅ·—ù¥sM)íã½Øu“/ì.][ß¨&ó'Ðv%KÅšÄúÕÅK**gËòÉŠ;?[hÁÜ'¦—wöw×ÖÖ[ë3±ìVñ¬˜\-|Q8/ì&V
Ø›º{ûþýûw`î(¸+ÅMîoTÜµ%qo“‹;šejŠ;À«ï³¤±¨RÏTÌf»ÛC¬=Oß•×iÆòh	¹lfžÆ¥dâRÃ{þIúEúò‰‹»X’[ÜßùIˆûhÜæ¶ãþ©@›‹³Õ?æ±…)‡…ˆ»7.Š;{µ;|:9#½À_ìl{+Å]ã¹kTÜ«(ºÑnkLÜM¡@w¥¸ã;6)î˜N5M6ˆ;ÁÇùªˆû¢ß]lk(×²yÓ2ùFÕ‰;8JÜ<åôØâ®K¼ÝÝ2;MIøàp³Ú¾—˜92ã™ŠN?¬ÚÝÞAZe:*oêd3'”w£.^RQ9mvN¼)%6Õ|`%–XÍîíg÷ÆÇ×ŠóÅ³âÑæîï?GÁ½p˜ˆÞ.®®ˆ¸õ•Ô*ƒwù÷%q—í_úß²ýKeâþw¢¸ÿâý
qUÅ¾Çƒ·…gâkW‰¸‹ùÞdÌ°êÐ%&îäï­˜Ê‡T¿w©ÔÀ`´9=X¶Ä¥yjQúÑ|0xœ°vr{2‚™’ŸäóOŸæ…œ<p´¸_–Äý=À|]úbÚEÌôÛp/’FòVwfíÕÄ]_CÜ§#ó˜ À:ÛkŠ{¯?á<N¶0ñ¤Âk1#¾œ-—³ç"÷¤—UÜE3I‘ñ‰Í¦\ Twò"PfåíR¾¡pµs¥¸·Ä;¥Æ^X:€$âÞ)ç¾‘\Üñ,ûÃŽŒ­(ƒ7™Âo&ü¦Ä|àn¨¸Ío{ËæØQNèy…¼ã)}¼,ÐÝëF›Íî	ö”¢.Û?u­gŒË¸[?T7†ÓÁüÅ> †®Ü0€à#•kÀþ‡S	ë³ù¸LÜ¯ÈAÙ½0qg0³O‡­†·ZÝÙÁÁs§ÂÄÂ~¢¡|çõjC©ÃPvâîMmX´:QÑ$¯.^RQ9eö&‹'ÌüJGsÚ>½·ºÝ›v@OEç‹gÆüÌÊŸvVQé_-`ï#K‚¸£à.ˆûg‚¸£Å÷VÄýo¿øðDÄý:4‘ôRÈÅýAqÇ.”jâžVÅ½&¼=™™McàNÒ]=¬=r»ýÁ†LZÊÇà&ÙEƒã‰;ý"œRqÔÜ™¸ËGAsâ®Årq§x¾YqÁäv$“ñöq..ž	8Lv.è²9¶Ty‰.Î+$ì–K¨¸‹âò©¸·`èrZwÍ3‡ƒ‹Øäý/†ÔBÎƒ”	Û¹JlÕ˜¸ÛãÝ"¢À*€*×L‰aô=DÜå›c}9»ÝjÍ•‰{A÷^‹ÕÄ[&xõ]/~@¢KHÿnVˆ»äÔÇw®!q×<™M¾Ý3;#C±ìÆ¹¶Ûá‰éýÄúH#™“Õ–œw°.%ýuanuXõv•3gj©xÂð›ãM¤N¯D÷†ûûIsÜãý­3ôö¡ØÚÞÔ§Ë»+‰ØÊaá°PHÌ¬oWˆ;Â ×¢¸X^qhBÜ	q[etºÒÔboÛ¯!¿†¦`¼èí@˜¸UÜÀ¢ZžÏHZFI9—Ý,ºoN9ÒZ=ÊŽÄÚÙ£JÅ]Øœúw¢îJo'Hâ”â~µŠ¸ëõÕÄ]©î]Œ+LÜ»**îL©ãIˆàhq÷'“–87Ú$rj
c60åõºœ^¿Õæ¶ñ˜¶JâŽîw|¬­Ó‹&ä£*î=7n%îðÕúâÎ‹û…zâ.uÊt–ÑÞƒ´öÐiƒŽÈóY‡›¹!o°Z^¤œnK:d4¸’æ¢cê€¶Êêg7Cy©ÐNOAi±¨µöÆ4•‹û»þ¤ÓéÊùk‰ûb²x\~m0 ',e9³Z‘’ËSioTÜAq—ºd*
ªˆ;îòÅ¹ø–39Ý@Û‰4• ½ep<[olóÉÜÒòpõ¡Th{Ué^©}40°¦¼±Ú'£¢rôïÎœtbúÀÒxÓó§ö úSËãË»kKCÅ³chejjy£PÈ¾^Êîîì æ~û6÷¯JâŽwÔÛ«‹;¼½Yq­ˆ;Ìè©Ó‘»¶68q	¡2’¸CÙ	k…-ä:ÀÄ]•©ï´ä³–ø¬ãUÆá°Ä#9§=XFgˆÓi\üY^K¼]æ# NÅÏÄ<_—!îR²‹–ùU]qÇ&‚”Ä½ë<Tˆ;ó=j|‚Ü\JîìºoõßâWE÷…Xé¶…Š®W[Üû‚¡p<îíó&ä±
§N¿7™òy]3&7'ôÐ Þh·º2ÁÅ¿JqH=yPKÜ{I¦iO=q—‚ÉÒeâŽ›‹âÎ>ƒµÃÛ	
'gþNNñç†´3q'îDÜIÊ"ÌF¸Y‹%ÌzelÛŽ'×gg_Zž^õ]ÅZ#›Ø)Ã›¬umÒåg†Þ%">‘Î)Ô]¢›íµl»S!IÜo”‹{ûµ`ëAx‰Ó¼£0kPÊ™ÕÊ‘.»¨—s"â.G/£\ÜÑ.“A»Ì[Î@qòubc|êøÞ¾Í4œž<³Û_½ÜŽªÎ=ã‹µà³Ê;Rëí**gA?¶*Ÿ´¹?ÚÜiª`€e»ÑÄë¼ÑwvŒÌDÿýçØm1ž]Š­ìÂß×
w¿ü’‰;†SIÁýû¿C‹;éq÷/AÜáíÿ­4›ú_¥ÙT*ît6âŽýK¿‰»Dé’|8•q¹„8œŠL:-Œt}Û¸“Tîk=7Þíb1îZ$qêþÔ#0XCÕîtÚmvÒ€`-=R¼Ùnug¸tÐÎ…góÔÊ¦ïDq¿LÅýß)¡éž,Æ].îR½]^r¿H âh( 37å*nK³#sÁo…_]Ê®0ä(Þo_‰
q§G—Áp&n‰õ	#§¼;’ãmqoÊÉùfâ©NG)°È`6ÛrÁ0“þ¶¶âÊ8Ìeù=’ÉŽ.V¦¯Ó›*#Ùï}”K‚³:«p¡<½t¶$îÚÉ»tþüÏý‘ð,ç1êyþÍõëO/?½|/t½¼üŽaxqk)°zhÁ·%r™TDÍ˜©)F\&º‹»ð³Éd8HŒ]z'Exèhî;y®ZÄ¸m	èÇ¼¾+4®±"£±lˆô¢Â½u¢¨—N™¸É‘bý
E)î:B-q§7fâ~3o±<*Î¡h´°0|® ÚÃSË¨´4þýfVk¬JíxX]¹‡—·j¿(dÕ>•³…ióÆdñ¤IL4ÑÃ7]‹nÌÏÄfŠ“›sÅ3aþõÚÚÆÂêÒî^t+–x(Ü*~‰L€z;÷ïÀo+wVpWŠ;õv¥¸SUÿ„Q5SÞ~´¸Ó÷Õ»oÐ6e”0Ûauïê÷§{Q¥*<æüŒò#©G%øP2Š¤…¡<“Q]Ü	q¯–aâ.ç=¡\Ü? âÞÞ€¸c„‰;¡»6DÊåâÎ(³ö
qç"oŸ ãü6ç°§‚~«)qší&$ÇDv¾$ª7÷à¯c¢¸Û2cÀÑâÞëŒõWÜ/€FÅ½ÔwMÐˆ{ÂþWâËˆ\ÿç×5"i‡å‰æ6ÇÚv©—Êf5Ò?½íàÀVd˜ÌeŸ
RÿtýÀw­ù\‘Ìöäý†jâÞÝåykLÜEˆ¸û0dÐ"FW¥kÌ7ún5q'×ººÐüN§=„”õSw I;¹1`ã«7Á7Û†âÏ„ùâÌR,»¼<…~•†ƒÚO-l¬Äfæ›ûN±åáê! úŽ§l`É¡l‡êí**oŠÁÄIWºù™ì`GÃ]ö‰9”–¢ËÙ¥½3ê•™Üß[[{=ò:º¾¹{«]%»SïÞ/Ü…ÂW¢¸ÿ2$Tæ‹ûG’¸×ˆ¡qïA{.«¸*ÊÅýòlJÍƒlÞd³[“‘ œÕ½²pé<{4å¬(îŒSGÜ¯2j‹;âNm¬ª¸3ç§Aq§Ü€1fTw
6§úã‘àØX&Ëc5cÁÎ¥¢;g5QxNròø\ÿ sÔA/±Æt¶Qso#Tnhí(ö–¬¾RÜwk¯iZÜq‚>w|	+ÐËÅ=Ÿö¦ÓÁpÒ±ÂÛñ6¹³/ò‰'$¾_‡ºû+KÈÆ›Œä&F£<d@³ûKKá­ò%ŸhÈ<´IqÕÅ½Û	YÆÎ¥¸ú[j‹ã8X5âè’¬ï‚³™¸ë wÉ«ËÄ]JlAÜ©‘+ÀEõÄ]cqc ÷gÿ¨8´¹•XÉîL=žž@>±`V[“ÎwŽïdW£K›M/NJ,ÔªÜ×îñzp“•òª·«¨œÃk'?:³q®AbŠ“ÑåÇ$QæñðêÍ¦Å¶&'&GæV§¾¸Þº{÷öá~¡p§$îßýøýwÿH†S[÷¿}x‚â.µÈ¾ƒêRî^Æ»´â^¶<\M£eW¥ax³Û“[üw÷<]ÚðN½{ Kâ~]!îu*î•À×Pq‰»l.OrÀ±Y-qgÎÓœ¸Ã|©¸Ó3â½×woÜ½~‹Ágsœ¯³¶Ãh•AðŠ'±K¶±*u—ðz§¿sq´!q_\\”i9ŽTuÄ´.îí}”¶6±îÞÞG,™nðô[‚¿%±¸ˆ´ÛÌÖƒÙ'W57uô)Ê["Ý³wÒe–æQyˆ»Áý|ÖYrI£[6ÞjpZÆôÍUÜ	7X‚;Vç&îÝÞ7ÆI)¡¿Ï›qµrˆn°Ù‹&Ã¯…¸wD¹fâ.TÜ»‰¾(95½EÛ€¸ƒJqgßBI¹¸ëåâî=C ûÏ¡‘¡­¥×‰µ••ýééåññ…½½½ýµÕÕhlkf´ÐÛ:ÿz¯êjÄ‡ÃH¬îíƒõÆßæ+½ýœŠŠÊYÑ
âþ(ÚßXµÃ¬Ë8zxˆÊÂtt®x6ð8¶XšÄÿ—¶Æ??Œm®>½u{S!îR«ÌŸØúñI“ûúé‰;5÷KXƒN¶¦jë‹;¸lQw§6ƒ)å@±=î÷c#¬Cöh’¹5qÇsÉ8RÜ»…<ðfÅ}Ìëõ-Žrw£Õñµù]¦pÜíc(3ˆÛâ>ê0cpÀj´Çwpæâ$q¿Vw_$âMGâi.e æ:p¼¸¬‘€.ê(št@s3ÿ|öùËdiõÏóÖWOÒ©¢osYroï:aq×{½£Jqo¹½Ýä~•2&èºRˆ;ÍÙ¡ÚMz¸¨¸ëEÈÂ©Š{W-q¿÷Ý2?S Æ¨¨LÎMy|BÜ·ÈPl¹z£l?¼½FWët¬Î8³?¨¼+µÞ®¢r–<\9…2÷äîD#;W‡ŠókûûãSÃç£gç¬àc{+Cdóó+3›»ðö»wïÞ¿ýåý;…;w°€éOß}ÿÃß}öÙ?€cˆûûJqÕÅ½îp*u¥Lá%½oïbåv(e-qâ°UÇ´mñû9?š$”&}™¸7Ñ*s™P)î×ß«&î]DÜÏŸoLÜõŠ{wmqï®.î‹>¯×;Öç‹‡HS·Áž
ÛICÒáLE¶|h,.VÜyn?Ä=b‡©¦lÆ\àÁbÛ[%î^‹?€jz>l$­./_<ûFÃ`âAE«FþæÍ'±Ân0’÷Ù§O’¥‚»µ49ÁÞ.ãJsâŽs•â®àr	QÜGÃ-y»9Loo?»XUÜ¨Ýè’é’;·hÔ 1q×j!îúJq¿7ëR b$¶Qcå¼ýaŠ^k³4}Ní“QQy£ô¯ž†/Ïì52—ºTIìí$–²ÓûÉ”ìé3·5Äã4:žÅ8þÖòÔÚæÒÞ§ŸÞúò.Ô¡2ˆs'â^@ŸÌgXœúbûß3q¯ãþ_”iàŸ!îLÎ?a@Ó,UÚ~ó›ß0qg@Ü¡vRšÚ»çEq'ÜxçÝrq¯þˆÍ©–m5È½q „´ç5lî—ÁÄ]èpe9îåˆ©2@÷_	àÑÜ¯˜;(Ý¿PCïb*ÓzâŽÛKâŽœ’ú0aÆ½*Å½¯
(¹sœ·-vžd–g2qŸ×S´'í©HŠ7Gzãf¢©v«W’¨¸_âÜ|Ñl5‘3Jâdæ-÷ŠYSüVŽRÜ+GVÛ˜¸×¥\ÜÅP÷ö¥}³OÓùt<¨yi#k¹^}s/Oö)7E„§_XÄu)3jéVdÏX î¼$îâš&tŽÛÜ‘14Œ³%ÿ8q'OW	\KS%§ÇÕò÷R\½Qå³Ú×z#¦–¼=œ×Y<~-€·Ó;~\á'.MRÏè£‹"ÞŽÜŠ§
Ø{"Ò_ì²yÓŠ¥JµÄJâÎÖN¹fÝ§`îŽ²ÆZ<š‰.ÔL¦xXC¶Ž/ÍÕyiGšŒ’aÕÛUTÎ”ŽÝ‘âÉóhi¹ãèöúèd4ûzkmã1æcÏ¢à>Û_ç±<n/:„ÂÁÂÞÖV¶pëÖÝÂmQÜï¾"û—
‡ß}ýgˆ»Ô*oÿÏðvãþ¿ˆ¸ÿwÄ¸—í_ú¢¸ÿã~„¸(¡w¢veâŽ p"îâ8^ÒoôixA‡·+Å]§D“ŸÝ6«2b´&_qµŒjB!ˆ;[œ
÷¿¿"‰î‚¯KÇ`Bž»¨î—ò÷SHÙ]°Czß ½Ä¢QÝ9î
q‚	âvõÀÕRY%?â3æí
ÆüqÐ·èFœ¤ânÍeœßcÎeìîHªhå.pn“·F".×:F¡Ç¾°™Ì:š3‹ weŒ2mg0¯Š4—
Zw§¶ íô³ž$Vÿj±+!D¬EƒÉNßLÜñO‰;¸ãU8>™<uØ=ÏÒÏòOCRÏ;~ŠB¤¨3÷éeâ®×—ÄÏxHð1Ä½—DbrÖ–þº¿zª¼|®“Ä]<” 8ŠÝâ{@øE=½‹™»pS*Ölé[™¸ë@EPT¼DMq²Û~,wGš•N˜¹õÉfÌŸŸ+»ùÜÌä.ù©0°¹²0Q'R®:ëµ¬Î“Nj~»ŠÊ›faýTy=ûøèV™¥µhtc¢ÿ!ý1N›‘­èÞÊHq.¶‚ŠÂ@basfíÖ­Â—_o¿ÿöý;÷ï ÅýOúºuqG«Ì?ýÓ?cÿRmq¿	q'wñuïÊ;¥ÎWªp•%á*ânqªÞÞ°Çx,È©áh»ÄuÉÜ?DÜ?‘SOÜ]ÁDÐhê^¥¸—A¯fâ»‘Êé­‰;¨!îL8èóú|ÁxŠˆ¨Éæ¼ÁLÛSÝ‘m ^ðqï
ø¶Ir¢e´Ð¶wSÈW_Ü{Dog´¸ÿZ)î4²D“Ï“º;L<÷*­aâ.Q!î÷Ò4É˜^=±xžk®?Õ„9Uƒƒ­6LI¤òÏOqgo”SÜñ ¶ùb³ðö0—×xÓ\Ü¥7Øž$±=‰;¥Iq×7/î­ˆ\Ü5^d0C?D›ªcÍ$^OQWçñ1™Ý_‹®ü$¤}n=ºÜÂðSÙz‡.“ûçÎ©Þ®¢òÆ9µÞò¡ÕÁ£–¾aR~u¡ƒûgçN½ÜžØYILFf&e“_]OlL}ñé]L¦~*‰;¼‘2Ç÷¿+÷ON@ÜwRoïaË÷ëÏ“j3hc˜·#é¼¶®OP;iEÜqÒˆ¸cP²´šâÞ-kVŠ;NONÜÃ!<ÃŽrni‰q‡ü‹x|qÌ“Œ¸‹)ï…±^4V[9ï¶Ñtæ¼BÅÝ&¤ÚBÁ¶·HÜ‘ Þ^´ZÒ^M¥¸ß«÷{§ÝlÕ<C¾; Ã©&«ÝêÜ‡’v¬3rpn¦ý§-î½ÁòÛ.‹îŠ.ñê@}qïú)Š»N÷4d2œpÅýÇÃÍâ‘ð#3¢Þ¯/Oï“E$s(¶¯Ïg:†÷ÈÖ¢7-ïó›kãƒÏ5ÍòÒ|—ôèT•—ñaÕÛUTÎœ‡ËK§bîÑ‰#¾ñøj,ºŒ<™œ™Ú:ýþö¥Øämcx½·÷z$6þùç_|ñûß
o‡¸ßF§Lá•ùêëÃïþ|¼Šû¿@Ü™µŸœ¸ÍíÝlnŒÎLÖ,`RCeåç$E¦jc;NË6¹+ÄÚŽLwtÇ”=é¤Ë½
q‡µõvQ—ºhÉ¸‘BÜqÂJîz&îÒ|Q	õú&ÄÝ	Ç©Èh»ŸTÜMÉp2Ç9¿Íîîâv ×ëk‹íoÎæÉÙœNm‹;y¡ìlrG|5Äýš@{Ujˆ;~Òž:âÞÞÞ°¸S˜¸¿#>yo^+Ä¦š3yñ¹Vˆ;>/w\’~™ÁX§æiú2¹Á¬ÕhKe^e^Î¦Ó/]¶T< Ó³	ËfÄPs§O¤BÜé¹2qï	6—±Bw¿Z9Ìåú“Ž¼$ÊøáÄ£ñ/^—œw¬Ç])îZòN”BÜu­ˆûÇúUÌÛâ.Ís{'Ýè+üptÉ}`kwmHpó‘ìø·Ã—C[ûÑÍ¥ñ‡Ë±‘ÉMÌR½1F¶ÖZŠ†Oë°¾3Q-Q²ÿœŠŠÊ™Ó:ÅîùØø`Ýï»;³¹/Þb*:oÎ—zÿ²k“s‰xûçDÜoÝ¾MÌýËÃÝÃ;èq§âþIƒ¬+îÿ³š¸Ó‚;÷‰Ÿ'xšRÜ)R®Ü½š¸_—·Ê  F^ÌIÁ•¬/dÁ1õkîÏ·Õ’û‘ðöPÜ«©Ôv±ÌŠÏD•»ZÆG²9OãûÕÅœÁÕ¤ÍHÙ2LÜå™{P%JP,Å§í2r!KtD&K½Œ™²mKçläññ@í±H(IfÆ.x“DÜÃ\8á’Öx cñ&á}‹œÅ6âw‡Ýê2Zãm‹³Žhr‡Áa}ªXS¯éíàRUzA¸v/îaíp¡]YÜÚ-ühç#ÞU¤U÷Ê ™Båžy/ÿÄò*M¯½÷"ŒR»ÅëäqôÇ…Ãñ<õMIVè³Åìœõ¸W \ûÿÙ;÷ç¶Î3¿‹®U¦Ó”iHvU×žD’cIP×¶Æµ×V5ëÄ;ãlGjº›ÝdÄn.%,0Ã—ˆ@€hq7HðŠ—î®H1„À;@‚T§¢$Ó2åK´ñ$“ÙŸ€¡ß÷¼çà=8¸ñ™®ñ‘M‚ ç8Ÿóày¾¯P`¯f{šÿè0€æÓ}çÛ”%*­väÌ§C–çžÛ§øå‚Y?\MÃjHé^21!ú…;XQlÀÄ>9â^j8õ\/|rÆ$ZSÜÀmßÑ@w…îÞý‘`É'‹yï‰‰…yÒS2åý:Á51Ýô5#@m&æî™˜›~!æÞÐ­[˜5îÙ
ÞÉ`‘^ÇDþ…W+Þ^¡ÂÂ¢®,*„Šv‰<›†)¹°ß5½Ðý %M‡'Ý©ã©·Þ8OÅýâí«kø÷gqñâß]|l_ÜÁÎ‰;™Ûq'5BZ{*.îŒ¨½"î¥P˜Qh{qq‡´oKÜOî¸ƒbâ#ß)qGÜ!ƒå —®Š9}1·;aó[Â>g<¥|3b³jÒM¸1!UõÐ¿4Ç î WÜÁ.÷½‚¸'}†„*¥±_‹Ê6.î ÚÓIã=×Æâ½è·¡xz¢I¡•‰gÓâNØ˜¸;ì›k±ùœUÊäGQÿQ¿ßL¤»¸¸ƒÝ!îßÊwy4°£æžî^¸¿ä¸UÇò¹¦¶Ñé…~,YÂ™û×šŒ_#\øÃ.AÝ›šö·OÏö§4­ºá™eWóµ½%UÝH[~o¿°§B…
_måiSi™l*‘gÓ:ÕN.´Ï<È×û†uýÁï)ãÜÜËçßxy£©H–yqed	³©wzÜ©¸KcÜ‰¸ÿõ_³w–ù§ÄÛ¹T™_	â…+.î€…¹Kç£€£ø×±wÄ“Ñü5†¬}ªBQÐÙ!8Wo— íy8–ÙUxËíãìö(²KŸøŒTæùÝ¿¡âÎÙÓÃØÍÃ„ý
½”WÜ)P.nâqÚ]ÌÛLÝiKGÁ¬Ž«ê°ëw­Ú¶«Ýö„ã€ßéDÅÝýÍˆVaw;ø´bÜ7tÀÌ*T¦˜S*î¼6sâ^Ã‘åß9âþÀãÔÜ™ñÓ¯e·Ú”¸ `ý2®Q¨šŠ»Ì²™L¶˜;Éïëèâ[uÜon—Lž¥D¡®Ú:>ÚéY-.1q—ìN·Ö·^ÍSh™ÿéW9xõ÷orˆ¥Q}Ð²ZÕæçØëwr^Üi)wâí X¶h–¸ÓsÛ,q§‰y{>q—IÁ×0q§HÄ=ó”GÅ<Û4wI‘9žZ»_¢ZÞ?ÜvîÜÓO7ÍõÍ¶´Œxÿ-Ägÿþœ¹ƒö¬tÚ¡ëox`ÅöàÀŠk«ÙrÞ™`±óŒ…¹ü+8U¼½B…/n<5]AÆ$Kq\ÃÁiWû¥Kƒó©ECªu¤mF7¿xþøq×âÜ[çßxmqùô¸¯ÎLõ­ò©2_„¸ƒBâ~äl-úÛ©·Óã¬lSâ^ëiÐÓZit/ ò?â¾dÝŽˆ»´Þ¾aqTÜA!q¿R-¿RBÜÿÀs;"îvµ#s ®J+¬~K\p‡þ~jðß7¹™Æ@x\‰w!Ï|Å(ã_q¯Ä=©¶ÅÔ>¼è²9q'œåníéíõÈXK‡L*î`“âN/•w÷xJ¹sWØýŽpØ§öYø{ù(÷ç6/îà‹;½;G 1µut·Z$ÏŒ­ÃëÅ×ðn˜_n‡¸×èôððb³XÜaîÍÔÜ›½£Ë+Ó}-©²Ó=?2ÝÖ¾õd¹™`±;_X¹”OÛ+m2*ü'îÝè‰++32?<9½4Ò’zP´gÚ&§&ÛŽŸ7ž:o|2Ï¯®"Tf­oxfë/­ýzÜ+óë··.î4Æ}ÇÅ‡{Ò7!—ÕqA‘5÷èµ„V™Î5VØ|EçŠ±	äJÄ·h-ñHØúq'»Xbíl2•*}æ@wõãÞ„ 9À"–,ÅÈ3*w…UÜYÏtq‡xíˆ¸‡ÇÂŽXÜO:`TVŸ'–P{bl„Ô¾X"lŽèJEZe5©ÈT§ùÀgH%lTƒ9WÜ™¹ç&ÈÔ0¤âþLiq/=Ê¾ o§â~ŸMõ…#R%ß„¸³yå³ ™Lâº¼âž‘ÖÒâ^ ©¸¡UÆ1¥¬}ª4*•J™JãŒÊçóù=~µ[,îr@Åì£ËDÐo§Ô¯¹ÕÄ]ž_ÜeÛwîôÄ¶Ùßro}AZo]ÈsDjhÑu÷scRÆsœ¸¿ôÒKÍÞ¹¶lq‡Ïþš;.67]m-e*»7´¶öw‡'¹ö˜­f»4·õ¯×ÍxóÞu¥Ü^¡Â‰k ,ú6å-ýÈÓh[é~`¯&¶êæŒ3Áã™ã.×ùS§ÎŸ?ÿ*³:Ñ·øgX8õþ:÷_nQÜß{¤A÷olRÜeucã"„à5¬Ýxˆ!Z¢P–—do@›–
«²±QYñö´>æ©‘ÑÀ‹{-\A*î¸‚Š;…w¶·%œÕâ…wº{îGôÚÿÃ—á‚!ÅªCrGö]a"%.ÆK[erÅ—é»Í‹»;p›=DÜ±PØc‰)µ&ît–ˆÆ†Õ½”¶ñF2»j¸m¨¿Wåwú¶â^²ìþ˜ªŒ¸S%®Mz’u ¿¸×‚"â.Ü7È'î"k-!îÕâÛáƒÜI^q·„<Â›R¤má°Á¦×ªB_Ä±×éó9±*D®¸gzð©¸ç6ïäÌHÜ¨¸WoGÜÙp*+U‘J{aÓÇxnÞ[ÿà–ôðG‡ŸKéè›˜™ì›ïN-´=‘w„Ê4‹[e8´B/f<10?«Û¹£\:Z‚³óÃ#Ó£Ûqvpig)EÀÑ2ÿ×UÒÛ+TøB1–GÜ[¦›KgQcµ¹ôƒQ´Ö…¥¹Ñ‰áé¦ÓgŽ7ÁÛO!òå·Þxëå×ÖÖV1Jâ ÿZe˜¸s³©ßßš¸?ÅÄñ$G!q?)÷£àXFÜeK.!ÊXÈ"ÔÜŠ;¨UkRZ«I«H}ÅQ˜ÐÝžWÜe|r· 
G(‚Ì¡PH©‡ž›I¼îS|FØÍ@˜NE~$áWC~ÁV€IUùÃ@26%Í•’$’úÇ‰¶Ã« T›wa45«‰eÈûÃ¿Åa@3{JiŠ‡ýƒ6`‰˜‘˜-\ÑZåX$q×Pq·àA‘ðc&Æ¥VI…Å’%îŒ<5÷AÈ3—ZÏC6iæE&î"h± ž.vIÁS`’YÓ«]gâÎÊæ¹#©ÄÞ«%·`wB{g˜¸;`‰ý²m5¹t‡B¶¸?‚0O‹ÙaÙKÁâg'[@wž¼â.H;½úÒŒÌÂâŽ{Ù®¸“¢:™¸ïÛË½î°%n­vuCÁƒP5îùÑó.¯Ë87Ó1Ÿ%î [ÜÁ%¾Ñ}O»·mtq =9[¡»C×Öu©~®»A7»°°0Ü7³27ÚæÚþ¡e¸¨¶·Œ´µçïn¯´ÉT¨ðÅÒ<QžL—Ù¹¥OøÛæ–L‹{pjf±o¸oôô‰S§Îœ9~œˆ;qÚþ"*îX€‰‰ûw¶.îhqß9qG…LÎ‰;êíq?Dµ=WÜëò‹{—)-UV½Íö•wåx$™7O:é¹œ”mBÜ9GÏx;wwaÇ“}œ%îè~/,îÿ:GÜEÍÅäª"ârÅI×ÅÝŽ >ër†õi„†Ðí	'||‰1{£ÊðŒOcWªÂæ0ôQvUYø÷ÆØÐî÷°5qùÄÿ1Õ-ˆ;.åŠ{¶ãÖIÅâW¥@é~7…ÕWí‰Ä"ê€:66ŽŒ}rfW/ˆ;½gRq§ ÝU_Üîˆ¸¿ ²Ä;iÞ¨¸ÃÜ“Så;ýù\×óã{T§Óýý¶bºcj¾#l™<~üø™3§›–†—‹‹;ktÏ^“ted6µYt+£ssm^ïèè`Ûòr›Ë8è%%ððæöÑÉ`ñ,Po«”Û+TøÂi›M•…‘öÒâ¾§¹|îýº–t¦l2Û7¹4 ë<qút“ îƒ|-îH•Ad~qg­2ÿe3âþxqÛw¢¸wºÔI]]Qq/Tu?Úk×«”œ¦+”´AFÑ¨Ñ4âÒWå˜[”!H;R½ÃêhmIq§î^\ÜquFÜ±ÐV)q¼¸×1qçãÉÛ¢âŽÏ
Ëmæw\›1Vó•ˆ»Úçô8Ì5–°F‘j4XüaŸEÇpj ŽðÄ¸ÅmJ+È¹OLKfT}Ž!g\Å‹»­6»SÜkDâN¶¯îpË­‹;‹e‰{ÝfÄÎ‹!;¿˜¸›ýœŒoÂÚýê˜Úé‰±°gÖ^Ÿ÷jªÓ¹â~P"ÛRqyÄýÐ¦ÄÕØ³æJ
‰;n•+îÀÓü#¿ýùÍ†¼‡‡[÷î}|_GÝyûÐ[‚Ý­kkK++^*î'šæÚN”w4ºÃÜ%r‹~÷¥àæjdÁcóPMn_À
â…Iwôw½Pi“©PaÐ4Ùš*®Âƒ©™?ýÅò¦ê¦æøÅÙàðÀòâ´ñ„×xú4¼ý'îÏ·râþZ^qÿ®HÜÿ÷ýˆx;Äý¿ÁÛß•Ä¸âŽÙTNÜÿ/w*æÙâÎØ”¸Ñ±ŽŒF2u§™É…ÄF»v›¦Q©lÔ˜ô*jð*¼ÿ*£ÐŽùdÉ¤ÄÆêdQµáÚõ1?ÙrLÜ¹M~6Ã ;9z”–Ý…è8õva¿Ó]q?	r[e„ùGÚ‘©GõE“÷9-ÈBÖH­'™Í*íÒ¼—zÌàð¸OÄ¦H©CƒÚ‰GÌŽX ®ÇÒ©nS
¤ÇÈp$:füfI&Téµq‡Ó9”_Ü«jò"UwúÑéB¯q§7Ùœ¸We=ˆP0&[£#¼S2##+ î€žÃe‹;ƒØ7ê;vw¡¥P«—Š;woñÇ7¦’Ž;åCÄí<è1Ø>·…ûÙ¹Ÿ_ðóÃÂò9Y”äÁ3“ûÄÖþ8™Ø˜¸z"íÿ‡“·l‹ÒI\WÜî1KÜ«é/ý•¤z¼Àë‡é›ŸßÎ«Ë­÷>øøë·f[HÅ½;Ÿ¸ëú&‡—¸†Ê—]çyq?qº©˜¸³¢{»ÝoœžÚÄ±¶¥­L¯±{—û:Jœ2Lz¹+Ú^¡Âî`©<Eï–•K¥ÄýB[ùeºgé¸|Z7áHé&çž8ÑÔæ:qÞÎW±Vêk/CÜÑ)óbAq}‹âÄâŽ¹âþdaq‡Ò1q'
À¼ãs‡ [_<ãuPÍ<â^›L¾ß£6ÜHŒ7V>MÝUßøUµw•Íàö…ÃîZy¶¸'yh„ÔQz3w	$â.Ý¡é ^Û_yÖŽÆn—âN§“…áÔuìèc€òùX'-šOŒ<ÞÃ³xá#$T%
ÈÙg63i§<²ƒýv»/;œn»AíXy)æ÷%ÔnC,¦I;üVòÇ¥…´*½)æ0WyPqO[Ã!“ÝçöÓX™*B–¸ÄÒ½qç'g"UQ¨²SŠVÜ³¤ðûïã¶¦œÂêîa/"îµ"q—QDû­ ¸£JÌ<½šCø¤»ž]ÇnÉ7;-ŽÄFÏOÇÕè‘q»“~û¸ÁsåŠx²”w‰¶gœ\Î‘‰ŠÄF45’wn{Ì½VX€‰ß,LÜ³Z¹œmQZTç.çorg+FÓûÅ*™ý×ÆTùÿÐoÞÔæ«§7Ü\ýõÖ××?kÁy›Ü[&ßY]ECåyŒDçÅi•a`1¦ù¤ye ©Ä"=±§\œYÐ=â“uN.ì’¹Pñö
vû§ÊcÎ“%{e\Ã©ò‘nmåë&Ëºþ©ÁsF—ñLÓˆ;´ýø©7gÛV_&âþ<fSw±¸£`DM¡l*ŽåÊÐ£Y^qG-tF{}½=>Ãõkêk74ÊÐ®5¦¾’¤1–êKh>êj¬Å¡Ö‹"¾h’™BnÖÛü‚¸CÝÁ³TÛÁINÜŸ`â.ä¸CÜIÄ]ð¿<övpÊó¨TÜ³'Y8}_8Í¯´¸;q_Ø³pÄ•È%ñ×ûÂGÜóÔ>[ÊæpŽ+P‰xÂz›!ì3ÓwUÌì‹£N?ôåwº9…6^•e lâÓš3“Wš“óZáûãÄý°%é³¦²P*•š±1›IÒÿ¦ÐÚýÕj{ÄépøãÚ˜UówtewPLÜEw-÷Èx¸­ÂÜ]þ›ú¬&R®»y7O}¢ûÞÇ¯¿þ&Ôý^¡–þ¶$îàBÀDãàp0µZ\åè‹(µLy÷Â´«óW†R+TØ-ì_Ô¥ÊAÉ(÷æéîT¹é.LŽÌÎöµ3NO{ñ´‹çßã\Á}qÕ”Œ¸¿ÈÄý×qÿA~qÿáÑâÎÄ…ÊðâþÔSO1sçÞó!î9}2â<HQŒØãdðó|œ¥°iT÷ŒzÔB£½=ždg]EšeìWë2¥¾’(¬†p±ÖQñ!Ë<nŸ?Y+£W*Á5×‘´ÓkøUð, Úþì#0vž'éîC÷3é„â[exËaî.u7ü/i{æ5ž³¦ºŒÉñ/?Ôñáüù§R4®x"N5¸‡PIW’%•Ì>½i‚ŽˆÃRØœ»ÕªÐFª"Ö¸ßâªªÂ˜ª>Rå b¦Šy:#cïÙâþLIjÄÃ¥ì®˜°Hvg$1ó9:Y)È«°™Hº!ÙítJ’¾Ã{™h*‚ï´Â°Æý:î¼\z'Ùe¾zÀR¯ª#­OÄpî9÷»íŠ¬)ƒûQ_"–¬–c-­°ƒû‰ëŸÜyËAQ¾$¾ú‹BßòË½±‡®&ï\Ú(m´·ã&ä¤¦øf©·CÜkEi;\Ù€7w²å0à~]3ÔmÖÎDaå ¾ÙßüãÕ?Þ¾“OÝÝ7oÝiÈ=>qâ¾~ëÞý{wÓ©þþ´ë»eòy‰¸Ss?ŠŠ;Ë…Ìw¼ÝÓ6Ü@­lªi§;dIœeqtËÆ=¨h{…
»*2UúJ=óxRe¦uj±/8˜kzºiqf¹	-ŠÆ&ˆûùALè?0H&îÄÛ!îyqÿ™TÜÿ÷ß‹gSsÄýç¹âxqgŠ.˜/î\–y;›X‹;ÈyÁ>`>YLÜ_ $;“¸è	5*ôã®ÎCQ»b»
ŒbŸªQ«Gos#yù’Öj´*SÈ]+ý¡NB½5Y—«/V"îàöïîÐögij»DÜ¿˜¸Óº›aí¤mž”ð™¹Ky˜wy5-‰°Ä"âNßÒÆqPPÜn‡ÅI„ÜÒ˜L³Ùï<@¬¹Þá¬ŠhÇžx8¬mŒT¹­6„½[jªêQÖøªÜ1w•Å¼qg/®çˆûCTÖ7J¦Ô/œpâÎ&v9˜¸¹¸5£´¸³j;C^zï¢/Íñÿìù
5^rÙëQ‹;ÜšÏa±˜‡êkêkcéÃdð9Ý‰¸£ºÚmyÌ´jNG˜3ó±´«š‰;àF>©¸³¢ö>~…/Ý9qßÇÄýòÍbSàW˜À6]4	âÎÀ×RrÿØ
}öµ¢MSâþÿó“?þ¶‘LßKH·ÜÍcô-÷ðƒ×ßüøÖ­õîÏëî¶NÝ¿7«kÅÎ/âððÖÅŽ_q-/”¬–ì &·»ÚVúæuÈÎ)F÷ìä`áîÖæÊ’K*ì"š'Se¡£H $ê—šQê//ƒM³ÓO?}Î»<HžuÏx>¿¼âBªLAqÿå–Åý=ºpªXÜ}ÇÄRPÜiÍb'wPBÜ‹À²j=×ÆÇ=W£‡:zÅ}]«1iôzÍø˜Ý~#pÝ`ˆqIçÍî\œ5Í­"™²ù’u€‰»é²LÜ	d³3q§<ûÈ#¯ÐjîÂ%&îø=€¸säˆ;Ê•ü 1ù—C7ß’¸ÃØé[Hqa‚¸»fL™b*5„r­³†³ñz‹Åã¬òéM~=Ó*ìŸ^¯ö«#Îš*‡=­'âñûœLÜs©áa­2EÄåî[÷šŒ¸?“=ÃËÄ½šcâ˜¸oÊÜE“°Ü×²×Ä÷j9¼/2¦ÍÒö€Ïr˜‚Ò§Ew[(â·¹'#V­Z†a°ÔGJ®¸S„L±¸“å« ù»‘˜¸0q§Ã”m‰;È÷:ˆûÿÕoÿö·wrÍ½¿[‘s]÷gCÜß\_ÿà»ß[¿ÿVjjõíµûSý™ŠüðÚêvÄ\¨‡¿åÉŽþâ÷=;Â¥æ¦ÁÅ¾©Ò6ýSKƒ_#GNN¥Ü^¡ÂnâÒbGª´,^*Ö¡Ó<8ÒŸ*/ýs}ºàÂÈàÓçžhjÂp*ñv’‰Šû[TÜÁ¦ÅýØÎ‹{-Â;ÑïÞÓÕ{ï:½z}\£ÝìªŠFÓ¸ÝÐÕ… uOôý÷£QO2é‰¢‹Â®Uú{£"KÜw™½kâhíWûÐ³uq¹âo§ûøOž¤äˆ;>
‹{LŽ·%\8OÅý›f‡Ãlñù,CŽHÄéVûk ³+æ›«ÜmÄoÔ*‘ýÖ«1Û˜»¦Ê?žFúŒ?>R[*â^rçLÜé…\sgr½ßÉpH6)2î©Ð&b>'ÕõŸ5ËOUvCÈªQ×%ý1k()÷ƒYâ.ßq¯Ý¬¸ã±v\Ü_ýäŸÿùww”*­*eé©\Ò7ïðú›ßÿþ÷¾÷]ðÁ½ÔÝµŸ\¼¸¶ ÔÜ[^{~»âŽBuÁ:õ~ãòT°Xý»iû%¹æ&ïÜÌ0Z€J€UÅg‹Â¥æÊLj…
»ŒöòôšwŒî/&î _fZu:ÄRN{Ÿ>G&Š¨¸Ÿ\“û6Åý‡ÅÄý)‰¸SN2qç¯ß ¸¿°câîééÖ"e&YŽu=tìrïµ@BÓˆf—æC*õ¶PWO´³öÈcÉ#‚lÐ«Ì‹b!›RrÜÜ=¤5±hoÜd‡·wiº»`p"q‡gÙwG‘v'<Â•Û¿Aø‚0Ê-î'‘ˆ;î„Š;³j‚t×7Â"’¸=q¯±X†œˆ‡©wFÂ³ßÁuºxÂÄÝo3¹ëcJ"‡±ˆU¡×(ÐÜ^Ñ`è×çO(ÇüU_Bq¹â.#äw ÷âû*së¾ÉúYJæ
qŽ<?ú SkTšL¹=­²ÔKµ`ÚxeDòWgsÀoñxü>œ‰;i’‰»\"îð`^Ü«ó‰;i´áÂ$«éßëê)&îÐkšŒÄ±#â˜¸ï•Sqï½Ÿ~ò»Û·wûN£‚¹¯A«mHµö·6äL§fÄýg?û’!ïÿúâÅ¿»?Û7´öw¼“_ÜŸØ°¸—ìžEe&š¶ãìMFïèt_‰Ž¶Ð“·`±tüTºd*TØ}Ë’î2ÛV¢Ð¯K•¬\ÂS¬ËÛ~î‰'ˆµ{G½wpŠŠ;€·÷7‹TÜÿ#÷¬õ—^E;Y‰§òÎ1?™%î'iøˆh|
ß àuÜà"ksÉRö¬¥pqCâ.#@y.÷t]¿qãúõV¾Q¥j,©P¿×$®wE;Ô½üØ‘äû½êkau—%÷Zr¯"
f§•*¥R¡Øu½2ƒG^ëV»e	(Pfg[Ž‡ÙwZk§p£©ðÞþáR2cÈ'…qTýÑp™Ü}È?¯Å°Àp!Ì°@Ýý XÜPÙÜLÞkê-¿eÈb‰„ÜUUN‡Û1tÀñ9-÷xÈiMÔûüãpÄ´)R_Ñãw$AäŒ_Ðe)ìaXŸ»àêù‚Ýymß¾¸³ó®h\HÜÙFÿ
°HrácfªùÅû+¯m²ËY½%ðö#gó_ñ_v--*¶Ûbîdsng˜v¾3´j·F³¶Xª¯°5”tüÐTv'~B°úÌ—rÓ©Ðv@½ˆ¶	!7Ÿ™;Ô=ƒ¸YF.‚Msd]ÅÞƒ‡sÎqÿ¿zõÕ÷~úÓOÀïÿxûæÍ›œ¸ÿöÃ›-7oßº«D!§!Õr·?E!âþ¦ îßY[_{â¾Ö·Ð=;0<<2²ôbŽ¸Ÿ>Í™ûO<½aqG¯J3.ÂØÖ·P@Ý[Vš·x8]™™
öo¬¾6°BçQ+Éí*|©¸°Lí<óƒÅ³ ZSe¦edtyiq®é¥Á¶&ˆ»ÑÛtznj½2\Üak»AÜÉº IwžÎhOÏû—õ~=¸
X•ù+íÖ Ò${/;tèr×uõÕ«×nØ4z­Ö4v]í#ò.{˜áõ˜mÌŽÖmVÓîZ¡Uó—jëäåwìßÂâŽ=_ÜAqOöª»ºº|¾^·Û­-"î`Å¶;äÜ–!ßø˜Ï·"V•÷¡ªš*:b6‡TdþÑï·¥úD@mAÅF9Ãˆj¤"î9âÎ¯ì•Qt©¸:”Ý•u6Ù“P0k©ýIYæ„yDúd¡ÐÆ¶ÆX¡ï‡sÅ½ºˆ¸ï-%ît“í6qÿÍ?ü/^Ü¿ýíŸÿüßÿé'¿ÿýïokÉsÏÍÏ?ÿð£¿úôó[·>üð¦îÖG÷îö§`Ëw×ÅâþöÛ¿DÅ}umf c`ummuuõµíŠ;ë/¦¾ÆÑ¾Ž–T.X€GÐÕº¹»ojjo÷Î-MŽÏãþ6BCwp`É[ì.Uªí*ìâf™2T¿¼Å#eƒ©²Àº«ÓÃ®¯}p`Äõ’Ñu‚VÜO,' WæBâþ6Ÿ*CN…·ÿg–Y\Ü_‰;ít‹;I´ïù*îèGÃ,ž³9&î4T†Š»&î9¶v
()wpŒó÷÷£j›"Ÿ·«£Ñ«—;¹ðñÇzk=½74z^	¹D(Š‡Ôn¸;=þ[ün·ßê¸~™»6ä(C‡P™bÔŠ`âNeÐßÎÄÁ^t†FgSáê9ävM×ú£½v“Õf³'ÆIé–‘õQŽ½sFF­!ÜHá~\w)"?®rÆa§ÅgRš¬é´ÖFF¤…½ßm6ÇT¤Ãµ€¦1,©zÀg"W„¬ª„;WÜŸ‘õX5ñ§r®`7«"lÜÝYdFÜA}î³Y[JÜ´Hšãë¤úU"Æ{ˆ¹;Ž?ÐËE{6?`b‡aí<gk¿U‡Õ&Éüõx8¦Ñ,‡ýnË£BÊ#í…ß{å DÚÎ­[-çµ˜‰;…x=}ì#<‡­˜Ýb“ýSy.òêå +a&g«AÜ¸"ë×^ž½F¾©j^Ü_åÅOÊþçŸÞ¾£¿Ó­¼õé»ïþÕüé?ýâÿôáG?úø£[wïÞÅ*D7×I¯LFÜý“‹?Y]]›œY}ñžçÅæ.´Êl^Ü‚!‹v6ï™›œïÏ)§Só#ss‹‹£ƒ££ÞfÚYš¸£öfu;9lñÖ5Øæ\žž™XÐµ6 ×2µ1ú;†'Fq…¹TI€¬Pá«	9å*úd5Ó’*ÝóÁà,föuKð]K‹Mç\.Ò*ƒ0ÈÓM^ã™lq^"î?‹û÷wJÜA–¸Ÿdâþd!q?TqLÜóÇí¼¦Içh»6ÑÕÉnõØÕ®®žËW!FVd5¨Ãv-V#U«Ãj„Ó™iAoÈLÀÊ›»&cF=*Ñ	[wêíTÜ¥0qe“âÞƒuH5¥øUuøGÎL‘!“×á_^qLÜÁFÄÝ‰!ÜgK“=§²%Bîp„dËÔXœ5æw§=VéÇÜUœ¸+!«)ìÚÕâJ‰{ÝvÄäwY]¡ß¤oqÑ=[Üvvö,K«D#›ÙìNáüòlòªº«G=¦Õf‡C)±”­3Œ“©G-˜RÈ÷ê,q'wx» î{Á.wOÜÿ1WÜÿÃ§Ÿøùí;w?÷ÝO?ýñßüâxþþ¯?úË¿ýø³>úìÞÝÔÝÏÖ?xS,îè•¹¸vf}u'Å\*^uF×Ä@0wUÕnü§ëNµ;Z‚SóS###}}##}“}#ÃÃóÁùù`,½ò›!=ÛGÛ‹öÈTšd*Tøìÿoç}ÇËÀ²àX²$ÛŒ¬,vjˆlžâxI–þP#ElÅ‚´Ú ÀV¤?¤ÙP&c~‘Ð,cR¤I±;Š¤L›¶%*”Ù&íH¦$K&õ…Z(6´Ã†ü3õ/ìýÜsÇçxüþEv”ÞË!sG)êøE¯ûðó¼Ÿý,ÓùŠ{~|¯,nü¶+¹µôógvn»ž¸­ï¹„ŠûÛ0÷7Þ~ÆâN“Fzž•¸ƒzâ~òÚsiÐŒÍ0·¦åúééi´¸_Y^¾\¾IRe–ífýT4“r˜=Y;ä+þ¥çL½Áì°ì>{q7>ŽÔwì ¦Åý%x;¬ÞÞ®¸ƒÛW®G#‘Æ¥)£¡PƒÃ3¼!¥¼‰ÿF:%î	>îúÂ£c"-Ùxˆ·CÜÌ™‹ÙÈ‘PœL¬ªó‹I«Œ.•IçBþ}!î]OSÜÁ `^GÜ‡ÉI÷éék×íBóšÞ8µcž¥ éãRmîšìi‹cªì-C*tøØHÐþ(nÛÙWMÜ1Ì´q%EŠï%pÀYOÜÁS÷üýøÃÿûÿþä'¢¸ÃÛ!îÿöëO?úùGÿûÛ¹˜éïäâþ‹ï¿ûTÝ;-î¨º7 ÁÉÛ³WëG.ˆ'œµÆÜìâš«^)}Tí‘QQùÊcÝï¸¸/Tÿ
ntÏ&_šXÜ;hÍoÌÍ®ºÝùû#çÞÂ{ÒâþÂØäÛ‰;zÜ;!î ª¸Ÿ¥âÓµÅ”Ic«â.ÓOxBEð3/œ¼kO9l$œ1eº;=|BQÆ‰ V.Û#öx,ÃÓ[lS‘¸ÏÐip&•µÇ¼ÆÂ³Æà‹.[ÅÜ¡cÊÞeÅî¯$î=B|{UoR» žc‚˜!yRÎ5”V§l=@¦¦OAhâ1H±œ}°ÅŠûs&î±Óé·Û}Á'ÂÑ˜Wh}ñp"äÐtú5’‰UQqßÍ™¢ÞP¢WÓ¨¸çÇë‰;6ë°¸¿VAÜƒÚâ®L¥Tw¦îŠmËÞ¼¯o:áaœP4}åÊHûD>éu£#½wkºŸ%L]xõŠ)g3T|MdÃâ×	¢sŸ|&î_ÀÛ±0÷)è!wZŽgâ®œ3©TÜû	Jq/ß5¬Q}ˆ"‰;î¬equÄýG?úñ?ùÉO>ûL&îŸBÜþáýñ?÷Ûßý^!îï¾ÿþûk•auÇeuHæ—fg÷nô×ÄÃùûÉÀ˜µ¦”w«Õv•ý{ëá\§Seª½õÇ&wöè³iîöd÷AëÖìÜ¼Ë={bL¾çv-¼q£Ž¸_÷ï4ÙãþÝjâg—‹;½´ž¸IÜû•Ä½‚QÖ÷~…¸_(ãäðµ›÷ÒzIloMãÑÈ·gâ.ý]î"N†e=6=q}O“°oum#Žo;ãèÑ}¶èÒq'‘ (Cùß²“$ë¯KpÇ“EÅð&¼½"ôY'œÅ«¡g OóKeâ~Íî1uÍfê#çç±é&Ë„¸*¼‰;ëqoHÜ{ùhÌ¯EmÝ<;Gëº îÚCÎ¨%Ë!Ì=mÑ¥øŒ‘$bóÐÔnA—åc„Ð$wâßH­Ñª,îR„#{dÂF-ˆ»¦¢¸—ÜkŠ{ý†*å×7Ä½äuig,›îÙ£½i¤½`œŠ`º„òvªóÂ×eË¦Ç¶Š=¶¬)ˆç¹ø”W÷/ yœì†.&î²P™®2qLÜÎ‹wi:2FÉNa»†‰»H5q§Tw ­Ò<ÈúâŽ÷2qÿðÃ?üáþø‡rqÿ«ÎŠ;SwP¿†ö…­ûÆ¯v:F÷òÕGh™Ÿ³ÖêªŽHUQÙ/\\XZÙ˜¸Ôæ\¥—/íÛóV­ÕÆ\…½acÁt%WæîLy2é>rÄ=˜tÍŒå·Ü/¼!¶Ê¼-x{%qÿ…88âþ75Åý“êâþ/¿ÂüK¥â~Vôv¥¸Ÿ-NÑ#¥ÊP„Š»ÒÚ«ºl])î%Èëí@-qGÑ¯Øè®÷Ü»ÛC³lûâýK”·}|ÜžM;ÈŽ´y"¦°ÓŠñÜìaÛä1ìA¦{ãíóº)Ó¶P-¤âN‘ZŽ
zV[ÙY: i0@/V÷ßHâàíJq_öZÜ9zËTÄ¾Ì2âÔÜ™½UJ•)wh³FŽÅ§µ1‹Ùë@?LÈÊ„´	o0WHûy³'jÓE}v#ÆüÚQˆçÐOóÅ¢rq¯æî¶Ðr\/ÝŽ]Áè˜¸ñW”‰;MÛ•V˜Ù´˜ãN÷igÄ\¡ÐvðŽ)—zœ3êæFÜ»;]š‰›/GlºŠ¯œ²¦‚l…>óÄAÊ¤âþí•¡èì6vBµ {å^ê¯(îçÉutº&"]Òû®)îÒ
½Š¬*ÄÆÊ£âŽ™4¨¸·TÜ?©(îH•ùÞï&wˆû/?þüóêâþ—­ˆ{ëã=­VëN~iƒ4Î\êH¡}c~mÇÕ€´£§G-¶«¨ì'¬î@~þ*F¥·ÌÄÊù•	qev½»êWq3{&î›ùµ­;K3ø =wîÜ‘1×B²–-ÍÁ©O]Ü_¬&îg¿Úâ¸û`Êf;äLWw|o¾½ÌÇ#ƒc§¢&SÄóqœ“ƒ¹£¦b°;Æ>¶ëíF‡M_ÏÛcÁÃÅC:Ûw¢íµÅ”‰;8S*îW"ú6~½Ñó íÏ”Îˆ{o‚ã‚hxâNÇ-¶HÊ ÷„ü&»ïçç‚Q[*È{#‹.ê$ñí–Ä=˜5 ç=˜IÅQCoLÜÎäâ®y*â~à©Šû`Uq?A8‰WÒp	Ó·î]Çì
L·®M/_ÃëŒµ§^|'oY
åÌYSUô&ÅPKÜƒæÄ}ð©‰ûÑvÅ©2OGÜ™[ÌjqÃ½ž_[|ôðRa®Å"ûåK—ÇÎ¯mºcî†r%/ŽªA2**ûQëÎÒâÕ‰ûXÆ×/îÜ¸DÜÿÒ’»Æ0œ½š5uîN2°¹¸4†ÏÑ'î1w`&0öVàÎÃûc/Ô÷÷i«ŒRÜ¿]MÜLÅý’¸ÃÛeâNfÎd=îgÅ4H–*#©¼Qw™¸Ó0Hj‹"õÄ°TÖ™‚—	ªcº÷ â\Ÿô’Õ‡¥í…ÿ—IµwŸ)ÉYÐe3¼vdÍÄÃ~Ÿ)e¶uåJ-Œ\mC*–qìŠ[ùàÀó‹
R>¡%þ	3ÛËªÜÚé//v)Ñ8ÁÛßxkˆ;œJ)Mì’»_AHK[èæÜ½à`eq§Hæ^aæTÖ-ƒsz‰–óûÑàîsžæ§(ãIEC\È&­ïÎp4öeìËn*2ã (=öGÐOÅüúö„(×šbÐí„!¿„=¸4­ä¸ƒç(tæTp¬9q¡ÔÐw¥´Kê®ìˆg¯1i,ªœ3``š,õà$¤ý‹ô
‰‘ÓÃxÛõŽLí!?W
ú(bÓ ª~œ@~õ.Ò0%ˆ{~mæí¸®LÜKß3%kGA¥8™×Ë£š^¯!î#¥(zdLÕÙî®=%vùtÅýg¤W¦Qq§qrq‡¹ãOÁžˆ;ë ‡»6XÕFÜ•ÜAÖãÃ	’Î~¹!_Â7­@ÙÆ¬$Œ²akïV«í**û‘É­•ñVÊî7V/
·_ß˜(ìVï”½©¸ïÆ7Ÿì,mˆ·£¹}sÕõäÉäÒÆÖ_¼Ü)qÿçÅ’^wXwVc…Öà«Š» ‡«¢ãå__ÜAMq?	HÝ$ÆL3¹Àyq¥)âèlç£¶]H´Áb³™O.kâc¹))ÜI¶Î‹cÓBè‘jÌ˜~b€¿¦Ó6]ùÁA&(‚¨¨qþ˜6«ˆ;Z”OHâŽz;õv<8X«Zp—{;Ì Dq¿;Uh1«\ugâÎÌ]!îLÜ‰çã}Üi_š<I~>ÄùC>Á¸¹XŠ÷G<Ãnš™m)“S÷B.M›´{(î­MÀ„…Rq?â.7Hå\Šiºj£L•)+º—Šû0Ã•)¼$îýä„ÜzpïÖÀÉéëŽ‚£—çd©Pwq5vŒl ôZaˆ2÷cì¨SÊÄÌËË¨-îƒ8Ì9J¼‰{ù¡dÙ±t‰¸K¯ßŠâsßwâˆº7ÓG~‘ÄEº]ùü*2 Wf¯ÎŽæ&P…¿Eß#šNÎ&ÆÇ/ß@häâüíûùu×B€UÎ±vµGFEeØÜ˜k¾¿}qRª,,=ztkU™Ù£ŠûÄZ`õÎ¦Õvë“I×ÒÊª;™Oní¸_~ù=UÜ›w%ÃÂ©zÅ™;ûÛ¼Lu\·«·J»Þ‹esi:“*QzD§8ré)ÌñÓŽbXfË]ìè‚ñ?§Û#‘l*—ñ|fJ¯²g‡·Sš÷Å´"îÌÛ+‰ûM[GŽ\Þåzâw’ß‚X™pâtØ£Ó™íœ?ì<„Žt*îYŸ3eD¸¸%šuØý¾°âŽ|]6L§~åÅýXâ~¸5q÷åœaÊ4p÷YW6­1^à’ª¿„š»(îÚ¶ÅýyfË„:â~þ¨*îLÜk•Ý™»7\w¬n×º+™_ÍoÝ_Z»ON˜~i5¿¾³™œ™œœ	X©ê7	šW«í**û×íñ¦îyÙL`Ò]ëC)°ry÷òÜ\§G*bÊ¥µÙüÅƒÇ’îõù•µÉ'k+ëî±Z÷¿-ö¸ôÑ§¿–ÄÞ^YÜå=î°qX¹ Ñvêj´É]¸ì
V	¢ÉY»Ëi¤ôËQˆ{©}+7,sF}sø7ÌtŸy{yÉ²œêëÆt4“Í9lid“G3¯™”ÅÉ<BÞŒ)
ñÛô…cYPVzßÕé-}éP¡f	¿Ïñ>g¯ÆoÊJ½&åSŽ´+›$“©£_Žü¢WdK: “†/üYeØ´[bo»ô$3K»ëéÌ›a7ÇoC<’%)Šî§«ÓKàÂqŸöt0kÁðT_¯ß)Iv"òûSž¨cWŸõNÅ5ñzeœˆ{4ˆåÞúšÎVýíOWÜéN‘Ô½ÊÄ©d™E 6¡ïR«GY"M}q?# %Ã
‘0Á‚çÞòõ´AyäêˆòýâïRw <ÇLÜµ‚­ÓEy&¦(÷@º¼â.rŠÊòÑ’½$‹ƒ½]ƒm¨¸K/Å¡¡bº¤ÒÜË,ž]ŠÛW÷qÿw!UF!î0w1Uæ.Ïq‡¹ƒSÑãÞš¸ƒsTÝ›wÖíÞVoŠ•œFÅ¸z«™Q5GFEeÿ3z¿Év™‹&î~gñÑ¥G—
åòm·kåN€´·'·Ö>Z?rnìþí™·&›©¸ÿ1î¿lSÜáírq ¢¸¿I®yGôöFÄ}X q
q¯iîdÈ6¨"îÃÈ¹¸Ö¸ƒ`Ì¡#³óýH›1™B<ÆDœvo:…âh{çúúÄŸÓgò:,F›­R´
fÛ÷F#£®Rû.i”¡–¦Ñ&pþÁ¨çJ4ßõ+c2ˆ”Šû‰ÒŽc²\É)@	2qÊípöšˆƒ’{ r _’"?Å$Â-¾3¡—¶¿]SÜYÑýt=qO`tªVË™<˜W+¤áœR½×L8#Y“g×`·§c\<¦â¾ñ‡²¦Dq§Â]KÜ{«ˆ;ÚïŸ¦¸3Åç‰¯b
Û×wQäÕe¨.¡ø“‹;=]aíLÜ¥!/Ë¼ö»Ó^2JÆÚ~þy™¸“á·BÅ]KaªŽ*{q™¾ñX.¦p ÷M XQˆ;¿}ž~€Q!l7•Š;Ùây±àfUÅ½Vô‹e÷ˆûHMqÿdOÄæÞŠ¸3.²v÷gC÷(~ü¨šþ¨¢ò5Áš_œ¸Qc"åË7æä}2³K3MÝýXÀzq? Ð9.­¸\K[$Ç}f&9?¾â:rÄêZM¾÷²õ½*âþ×TÜáí,Çýó:âsÿ¬Š¸ÿ“ îÿZAÜÏ€Ú.‚ÅRqÆ°H¡cYœÕ´1qgB.­×)¹2XäŒ’¸T!î5½ø²†L…‰qN¿Ÿƒ' åeqè G«‚\8d”5	’nð†PMGVbÎwIµÞf4è±ôG.Ã'¶ö\">¥“‹{â.!Ë¥–‰{?wúÐµqgˆÇTP÷úÞÎ!JÅý÷îÒ„¿öA[Ëv]qª±ÌÐOËa³iý8¸âá¬7ç‰Áâ	¬¡G%í2QGÁhŠç2~¬ÒV™ÝH0å{«Û™KË(Í›#cŠY0@)ÓjªÆ¦VèqW wæíJqg”{ûÈ—ô†X$æ™¸&î„ár˜¸³×Ü­¦+87äXrQÓòQx2›@I{S+‰âÞÛ+wqúÎÊêwŠðÿM@fçBé\Î¾Ÿb{ƒ,¡¨.TÔeâ^œŽ–åâŽKq“êTœˆU÷†*îGAUqÿ¢(îH•!â.š;÷Ïþñ¨¸ÃÜë‹;Ìˆ;ØKqÝDÞ!ÏÏFÞÕ™–TT¾nLnÝ_{4>»žÀ¸…bOÌoÝ¾zc|||âòÜÄÕ‡+ë-$Ç¯/­®Í:Æ­î…¤»»ûI`meeeIîn×frŸ¯/WwðTÅý•½w\ß‚¸÷×w¦õÅ}„ŒâŽ¿Í°™Aˆ0Ðë²Íñ%].Gí6F;#á|1ï”Ù‘ÊÄã™T.‡*°köxˆ–‰»Æ3ïÊ\ÖÃ÷=KquÄL_O
ÁhßnBÜŸÕÄÝt&0:5fMÎ`˜s†C>2j•·‡ñl÷8ŸÎñ˜Iµï–Â®7²wTÜ5ÏDÜ%ÝGwVq´½†¾Îâê‹;=“¿——§/(cCÍ÷®M÷Ÿ¯*î½TÜ)‰;Ø;qÇ£$kÏÄìqgŒŽ>]ygí£££ª¶«¨|ípmnæWW·ò››÷7Æg¯ÎÑÒöøÕÙ¥±oXw¶6ó›ùù;«;É™V:ì¬èÍÛìœ¹_Ýìc33®ùÂÃu«{Ò=¹¹ã~«yqÿxOÄý[ˆ{BÜ‡÷\Ü±QÉÅ¬×»:ò[e3$V®¸£]!îÝïìcê /£Ø-£³¤E3…FjŸ`$Û|ÌnâƒçÅCñX1“aR»Oô–‰{¯?j‘«lfû™Šûodâ*Š»¯ïœ¹+Å˜g“â~ZËiO£É=‰fÂÎïÆ2aˆ»0¥j<ËØ¼Ïc3ù}Aí¡Ä½ãù¸OÓ1q’¶ïqÇ¤ _2q»pØÆÌsë¤B²·>ãÂ•[KIœÒõè_*³#3ˆ;¤›ÀÄ½Xt?ÐiqÇ¯7*îäu(ˆû&îŠÝJVþ´Äi4	šé~ZÖŽHUÚUT¾ö¸v’ë·n<ÚØXÌ¯'Ý¬0Å6ØyØ¡÷Ùµ@÷èØúÒÒN ¿˜ŸÙt¹Ÿ¸‘âþrâþŽ‰;¼ýŒ î==
q§ÒÎbfÈ‰¡ˆß‘ã–d	HÝ®´Ñ]AÑÛA‰¸cµ¢¸Ùeçƒƒõ*îâÁë€ä¾ÑãQüAgÅw&î³1uÇJÄ=ž˜Z-¨M0¡ñÇ<£Ñ¨×ësÇðÛÍ»ŽøˆÐ–ÝçôsZb#hÙàœN”~? z†zÛ±"®Bî|^½l‚&4¹‹‰âNÜ‚™×àØøpq§)2mUÜßx‚…™·zˆ¸÷¼4ðc ÀÖÞ¹éíLÑÝrˆ£‚ÃŠ;Ä´G#Ù‚c´áHÔ§AAÏbj4Úá4Úßµœ†ô¸CÜC|Èß’¸ËrqÇó¹§â®Twa­$pHˆbfýÊSÍëDÌ²/ìð.ýqC’½Êx] ŸÅGÉ¾ôMGÆE_±;ôò¯£¢7NPW&°‹ª6v¨7y‚©¸ãyÆšx»BÜÅ·!wmmqÇ;_÷çO:?(D¤
gôw:ÈÛ‹"îˆûaáQJ£g»”RMÜÙ®®p5ýá¦ÅýÃ¯Œ¸3w·â„Å½tön¡À¯Z»ŠÊŸn—kaÁèØ‡9K.Nt"ò¶ëb·u}iqãNòàWþ~~Òm=rîÜ{ï5/î(¸Sqÿ^Mqg§*ÄÞNÍœŠû)6P4tVlgâN!5wÆ0ÀY)Ê°ÀÆ›Êâg˜{Óäq%¯a¹uŠï½É¬/ÌðÝ$û§hÄ„n
dâ~x›·ÛyçÓER×ãâi‹#æº´@ðÆ4E³ÙT©3vž#ë±\*„j"Z:D‘ Ð7SwH_Ü!Uîõ6oˆSLß.9wv„D`â.¥?Ê­‰{ƒƒS_!`²Ü³²Yr‡wSitŸº¾}´\pÊ[ez)R/
C”eqZgÈ”™rÄ	MÐb·÷ÆSQÈ!×=”Ž>Èº3ƒbp:Ï„’b3UB#"l,¿Dz^áÛJšœ
Ä{UŠ»RÝ¡Ö}}bÂÉ ²Ê¦ë¤»Ny›Šò.M$,ôr¿F‚Õ±½<‹…œÑ	šdCŸ^-¾ÊNˆ×ˆÇáA»…UÛÓ÷nMãå)‰{_—Ø€†ç–¤Ç)wdBÒ5\ƒ§\Â"ž„oŠÐ›c™W³P…ObjŽÝË>Zp¸d;GxJ{¤ø€„€`Ž^*âNŽé¿hEÜ¿-‰;Ìýã?ÿé³wfÕDÞ…°™=’vr÷ªµ«¨¨´ñ9âžAÚ»{©ñ—vÛ—:»jÅ'åÌâ£¥¥ÕÀÅ…ÕûI÷Âú$Äý­z­2^SÜ¿Ý¸¸ÿ¬š¸/£é#M‹û@'ÄýB‹âÞÏÄH÷'Þ›-qJ.îçËÅýðàööÈBÜñœÙc÷õU÷.gÐæãq§0öí0ì“Äh‰LÖw qF-RŠ{&ì<¶WâŽ'¶1qÿwp¶š¸ƒ{)¹#¹~¹ÌÛ[w?ö'>ÞäA2?Á…Ã$RÏÆœ<Ú•x¿&ä‰ø|q_¯&C½#÷fœûSÜûšwP]Üu	â.˜°P¿ƒK·dÆÞ‰ûàuqä&6{|w@=,÷®–Åýx=q?ZMÜñÈ¡×²…2\w„Š{_»â.tçÔ÷Ÿí_qgïhd!3ÝkŽ¤¨2***m1sûÎ‚5™‡¹OÌµÓ&³’`î›ãó3®™ƒÉÅ;3'w’î2q§Þ*‹;‰qÿiÄ]2s¡Ã}Xw2KP´·zYeqÇêõJq¯ØèNÎ*ˆ;ku,A(ô‰(ÄÐO9ØPd‘øÙ‡µ&îƒÄIN’0raSL0r­ÜÜ¬á8”Ú£q¿°Ò×'IG/pÆcq_¢LÜ? rqOðY‹NØ©Ð1F(®Áþ“LÜK{b¨JáÄÔ]ìZÄ½*Þ€¸¿q—?ÏÈs?ó…¾@(w`Ì™‚Êi˜9îÊŒt¥¸ã?ÏûZ_<”™Ê8¹„ÖïÔ’Š;Ÿ‰s|4…5aoŠGÅ½W£#ïÄgbÍ‹»rkÖR³wâÎš5úd@ØY§5Ý¥âÎr$±1¶O¶T—Úo/w wPCÜYÈoæô´ó+÷øÁ2ÝV,¸ËÅ˜;í/ÇEÂã9^¼ŠH¼4 Uu{@ZËÄÁf•"ŸƒÒô°æõCCdw’Å/Å$ü>QÜñ8èýc4SqÎŠÛ£­Ÿˆû¯hªLâŽ^™w‹âs/w°·âÎí¾(2ÚÖu³ÀxX»š £¢¢Ò>“kó›ùÙ‰Å‡7Ú÷K
î+…5L ‡;MœLº&Ÿ4 îðö¢¸¿sâ÷W:"îý­Š;YÇ`}q§e·fÅ²#‰{ç'CSëˆ;šÐgS\câîËÚþx%q× ¥W#Š»jé±@ÛâÚw
÷a†LÜ
Ââ]–›ûó-ˆ»–<Wœ6lŠ›Ò^>ÈõrÜ!‚?ò9›-ÒøíïZCo’‡šB\ÇÄ<q§´/îÊÅ½<	þ|Ãâ~+­¦Ç5?¾9=ýjãâN+èà5ÐŒ¸ƒöÅ7ÅÖt—ˆâ~ UqÇ¿ÁnŽ|ÅY7²*Å¿à›ðu< á†âíÕ–TTT:ÃèØÌÂêÂâÛk•¹´‘O®ç×n/ÞYè}²°ézò$y3p®	qÿ+"îP7Feq§_ +ô”ˆ;j‹;+¸&ß”~	¹¸÷Ó»"Þ.>£(;eê‹;¥ž¸CtœŸé+Uw\|Y]Á˜k+ˆ{/’OX†«Áá9_<‚*°!Åc0Ý‚”¶Êœ¬$îÌÜ¥Ø<-¯R„‰µ„¹Sé¼©µgN%§³„ ÷3=ˆ{ÇÐyù~¦îÌÛ©´ƒúâŽ¥§ÆìQ³1…þv¢à½NŽ3yCaO¡õiˆ‘IøƒœÆG¿7ˆb|bŸ‰{EwÂˆ‚!&îÜb¨¬[†%AÒwH°ØãÞUÒ©Å o…¸WŠqº™ÒãÅl0?¸µ,åKÁ ñãDqóÅÌU&çâxS€EqEœ&µøžÃfÕÅ½´Ãç” îâxÓSô½_&îR—nË^âP]qvW< ¬•Q¥çU~UÅ×H wüõwF7[g/á‹OÎ¤…n€­É&Ý¤×f”œ‘ËÔ:»ŠŠJG¹8éZÛÀ,­mqc~éÑÜÄÒÂ¤uÔj›	´®nÜwéœ¸Ú„¸ÿæÅ²V™(î¨ÏpPŠ;Ñ:…¹Ó<g¹¸Ó)Ðq&ªu“âŽ?¬TÜÏáÏ¾LÜËÍ]4Ù~	Üœ6·‹àFM‰;3wÖÖ*‰;`«t£^àâ™µÜà>H ˜]äip$×&e
Öw6@ ¦¸c—‰û05÷šãS(ƒë*#<Ù4VFwæígq/ §ç–£Ð9ô™m™¸CØeÞþÍÓÏÕwm¯±2¶‚ÙîÓÒr‡œ“jJ…|é‚!ÆaPj8Äá’Ó0¥õ<»·âN®ê¬¸`âŽ3¥XÓI”ŽÉa7CS<¨(îB|Š`ÉÇñb.×/o¡’>·þjâ>mšÒíÛMWú)TÜE•=\>O*(êøqæðâ %âŽdâ~Jwt jµhÍ@w1â‘|zVwa®%6Ü»Qã‚½A[vpt@ÄµÒƒºâN*î#ŠŠ;¹ï‘¯©¸³Öw&ðVò_ˆÔÓ¥nR¢W}]EEeÏÀ<Ikí…B^š˜(Œ/º­V|`tO>[šÝ:Ò”¸£ÅýÝŽ‰;­(îg€ îïPq§¼(QÖCQ»âN…QÐHªì²ŠœT´SVêcXÅñ¨ç%q/¡¼äþjq”`â.9;þp«$îÚŽ3q¯Ž¶m0ÀOvS>¥ ˆ»?ArÜ¥ ë®°Ýò‹æôA‘ªâ®l’y•QLê+	a~‰<®QróÅßÒ+‚‰û™âÀTrÓ,¹£ Î= î´3âÿÙ»ûŸ¸®üŽã2„`˜WäÁ¸Æ‰M¡réÊj-¥? ö§ÝüÚ•VmÔJûÃj#$CëB™ÊŠ¹S‡‡ÌM¤;žÁ%™]'O’®ì4ÖäqÁq¶RþÿÿB?ç|Ï¹ßû0ÏÌÄ$9ïÄ0ó¿æäÌ÷viœ×„;JdS©ÂúþNÞ)%2n6ƒñùÉr&]^¸›+‰II×NÄJŽ“Ý]Ür\1UÆÒï­V¬V½T{à^u¤÷žY=¤ÒØD´“f(­ÇCÛ_N"áG+1«åvÿŸñ¬6›ñýo Ü>ÍaÅ}a}ëãÀÃFVœîëVÓñN‡Ewõ8,Ê‹×(k¸sqþéÿ³	¸¨è¿#ú‘ÏÑ=N"U]¼Î.þØ‰Àº~£pç)ûìöàþÇßþsÜ!÷(Ü!w†û_¸#½®‘ÃåÇfh6Äà„ø ŸñÆë&“éûiùÁ‡=üÒçk=ËKb¶ÌÚû×Ÿ\úöó›í„ûÿü4à>RîÏ´ wr{»àŽÒny¯œe›Å4Ü­’m[~¸ÇmÇÁxÛž:4ÜÇÃÝ‹á^ÙíÃ]þÿ=vŠ·­…·OÊ¤Û›‡»e—î…‚»9·k×ÊónÁurE§äŠYÀãe\;¸Û€ûv:“ÌãFhÜ»/ÜQU¸[µá¯w|Ë&á>z?õ÷î?¨w\u‰†àoîñzp©÷ê*«w«I¸Ÿ”ÿˆ:Ü M&Ó½¥÷µ[æÝ[ŸÞÄÚÃ£¸ý“Û7Ÿ|´¶öèit¸ÿÂ›ãŽ÷?
·¿"Ýþò¯„;f Âg"ív;ÇhG/EàŽjÀ}”b·#³s¸Ÿu»KÇ{Ü‘ÜÞJ©ßÃáØ,â¯lÊ·yXƒ¤XìT=¸[2ÀJ8ùŒí±Ý*,Oiâ—4¨+(Y¥t5¸SúèU£]ÏdwµCùgE*¸ŸíC«­¸¿Hpç§rr‹»|3¨“ò'··î³yw Jò‰“jg¸ë“\YN&m‰ÓNÎÍ”wKp¡“Mgs|Æ¶3ù|&-–Ú³àŽ!NyµœÎ\g~7wÚ3u;×‹š¦{]¸³Úå©>~âI±Ù½èE$ð
pÇvwñùÏc¸+¥úàyóáïßÛ~û¡:”¡ò&¤ÓF2†;Ó'<b³=Î˜°ø
ð6¾îH+?0¡UÃý¸LŒƒÔHç¥‡àNÇwß†·	†»ÚÅCßŸ®—0Ü«JžåÎp¿Ó÷¿•à.äþË_
¸ÿúå—ÿùw¿û§W^ÜÿÅ÷_îO¸›L¦ŸnŸb¬Ìµ¾xðþrnÿÓ'KO¢§;Ü±¾ÞÜávÔ0ÜÑhÂp§*Â«	wDß 2ÜÅzüñ>Zk«wªe¸3Ú@uU./îÊgÀ‹ÔÈ 80•~˜îÃÉ:pÇ†»>h*Z×jg¸ŸU/P­&w¤á.m·£~. wlroc³{îH«p¶³ù´<Õtp·c ·…ýHéX¢dÙù\±˜)‹¥t€·Ó¥L¹ìº¹L©Tªw&t,ZÜ»¸Á=ÃÝ»ßè;0ÞÅ+¸Ó§kÃF§pt/ä»!Ù—Á^îÓ7~ÿ‡û§pçi®÷D—x>d…òÃ=î5DU‡û˜wÄsÖùÿ±5wß•…†E-Ã= øÜïÔƒû¿¸›L&S[{½å]îïÜº}smy¦Gvó‹Ï¾xëé*Üû0p¿„»úÞôš¨:
w®”Ëï•áN½ñvÊL¡Á6Ë|•{î¨ÜoÜ[™m§ÜWËÈœ”>š†{)¶õÌH§¼²éÈa±ÞD¢•2ÅT!C/v“y+aÅbÙb2—±aow‚»{Xîú@ª<U¦:Üß¼qãNîÝ-Â}è0p—ßb¸›L&Ó¨åÏ¯µ¸Kæƒ?¿~E¼^Gºýögß\i¸ÿj'·3ÜáöÎÂfABiû1fÓ EwR½V;Ç˜«
wž*£A=ê>è{GR×#`{îBŒÉtäÍRñPË»eTž$F&iF˜.ÀÃñ®™Zp‡q"Y¾°b— Éa~¼©Q2çD]	úôB!7)<„?2_uáî»ÞÏSî—ä`™ç_D•áþ¼îØè.ðÞÏÁýÔ%t#¹²ßÎæVî&ï?”pg®)¸«îžâ5Þ-¡½±±nÛîVÇ«Å”ö]Çqze—e¶›*:˜r[E,²cÿ’[DÙD¸“Ï+GÃeîþÔ…ø#ï;·îÌYÚÛAŒìæ*ß-Õ¸ —“Q5\åTwV2ªpoT›ÄOÁÏsjfTöÍ,Ê£Ídî#ôèêî’pö_Ì¸†»ô2í£·T·x§ÒÏàÝ|?%]t<²å÷_õàŽ+ÀòvÙQòRÉË…s"»Üý&©spŠ?JÁý?:wû?ü…èofàn2™~Ò]oi—ûk_~ø`mmæÊõ%à}ùúGß|µôäQ€;zá¹KýƒãÜÅ¯:pïWÕ€;:,ÜÅ¯É(Ü)|}¸Ÿ¬w:0S¸óÉÖàŽ¯”pOBpO`O5¤ªà.ÉõáÎtWpçÄ`¾p'ÚÜñêRaqÜ²ß=ÏpçpÃx‚ûKj¤|ûß›³ûmmöêêV1ŸÒI‹ûàÞUîvÚp/%×·KvšÔ»lgû²ãæÅ»’“/¤òV,]ØÛÙ.$7W¥àî±·3ÃÝ_»á®×“éÈ¢ÜÕ$¤ÌNp·‚1Ü‘Øæ{Ü"¸q|/<.â9ªõà._“*áÎMRj…³'»Ðð°=½Üy&}McpG}Ï2Ü¹zpÇ•Àß4Xr¯wÔÇpGî&“ÉtDzp­¥a2×—{f–^ÿêæàþÖ[kWz÷ÿjÛŠû—4ÜûÜ;w¶€û€wáóšp§iîXsÿ®2ÜõVŠáÎÉûˆ„ûsoßßoo³ó«)¢;Ã½þŠ{¥´„{ñî¦“ÀA¯°Ÿ=“ËdI'–°í¼›¾œIím”³±X~onvq+¹1»ãØÎÑ‡»5&qÊpG÷nÃÝ£ªÀ½ÒŠ»5ÑÜDUáÎ*¨w\`!÷3îC­À}¸¸ËKÝ(Ü§î½½‡†{Ÿ»Éd2±Þÿú éùí·>YZ^êY{ðÅGkb·Œ˜*SîYîXpÿ×¬÷_Õ…»0¹<š™o°œªáŽ"p§1Q¸G«wf;Ã=ô7lîœî£¨6Ü+p;Á}JŽmF<’#XDäˆ„*â{é6w®SpG-À}$wud+£˜Ta¸Ÿ•ÛÔksÂÝÎp÷ŽÃtÿÞÊÁ~Ûí¾ZvÓÞõ?,òö³W[q¿»“KîVÉÝY($ 0Ìƒ,–ÝÌÖv&†#Õf2öåüÞÁìzÑŠå7p°ÖÂÆÁB¹˜¾¡ÜC¨“—'r~pç´ÜQé9â˜~¾(àNçY¼Håô~bX¥1KEáÎ`‚ZÙíQ¸OM5 wÚä®}L÷L•ºŸê?ï]FË
ÂñwMvR€äk>
÷'è‡z$Ò€Îwüpw< ¸‡nHý<¨Q¸ë*Â¿¿ÜÅSeZ‡;èþ7î&“Ét¨½2ï|ðà­+nß\þö«¥ÊÀÝÀý1Á]Êý»ÔÅ?ÍÁÞñ&¹ ¹·¹ƒƒÕm7m7wL|tâÝØˆ”°ÎÖü®m¥³å­\1™Ínoçcé<ö³Ç.ç7p$þ²÷Ùý¹ÔÝ««w¡ú£÷a†;:Ã&¯÷xóp§ûy}¸OÔ„ûhãpOXè(À]MÙÀý˜Éd2ýÈ[nz"ä­/>úèÛ÷¾üvfíQÏƒûsm‚ûx¥Î£6ÃùáŽZ‚ûÅ‹§OOMU‡;¿(®3pW&±CÍÃ]ö1*Ò(m¦A
îznZr×|¯÷S¨?Ú2Õ	¹£U,†;Ž7÷;n9™M;j“ûâF&“Ü]\Ïå3¥ta;oï®¬–3éäÂìÁUÀ=³7·°¾½¹S(äJGî”œ¬£öªwÂ-a¸ãqÀ‡ø±}JEó˜ÐÅÉéi>j?¾ùîí–‰Â>”rXãìöÜ'Äê?OÌQÕ…;÷~Jý€©wñÉ“S#Swqk…à‹µw‘»Éd2…¾z/6mbÕýß_ýúƒ¿¾õ‰ØÞÞ ÜÿÕ†»ÞãþsÀnoîÏp×nG HL2•FE†’GÔ<KU‚»ÿ¬óˆŒÎÑK(¹:pŸDl÷)ªOúƒåî‡;ŠÀ=0Ž6Îã»[ˆÕà®·¹s<¥®:ÜáöËTe2ŸË†•Û£³ãP˜íëƒÃþöðñ–ôU?¼/·ò ÷HŽ~|þ»½ÛÅ™Á	 wÈý¥þ—¼.ˆ¤Ü÷;ÑìÕÝ­¢CWnÀÄÜ9+“ÚÎåŠYË²§¸°’twç÷W‹™<à¾ë:âE´WwS‹«˜*“¿;»°ºµ[vzAëCÁê ÜÑ™´ª³€O'™CDZt\Ü›hÔª¾¯±Ùeáûœ|¼L’ÙÇCi¸žg¹‹Ç_ ùñ€·Æ‹¢ÜÎpLo—óu>¸[|½‡áòõã Qü2!¸#µõ\>Ê%ÜÅãX§èP¶ô'.š¬Üù¼*p§=î¨a¸Ãí÷Ÿ¸›L&Sk½õ^lú§kMÍ‚¼öÚ{K=fŽÜ_üéÂroîÔÑ€û‚;Wîˆo`©uõUî¾.ÈðDàÞü~§ZÜÍ6wÛ-º…bÉrË»;‹WNaanÓÍ¹¥ìÖŽëìÎ‰i“ós+;»©L,ænˆ­2…Ý-§ý áŽÚwTî“¨6ÜÇwÈ½¸ë?«Üååhî(Þ,ÜO†áŽÜM&“éÇÕò§ï¾{ûÛ/›Ü.ózÏÌò•™fàNnÿžà¶‹hZ7±Ý*†ûx Áæ›‡»|ÇpGÒÙ#ÜõØdŽ`¸ëá8]îˆ¾§î'TÝÃ]çjÁA]]OqQ¸3Í¢pïC5VÜÃÑ?¯ïŠ—'ª¦ÙöBW4ôS¯¹ë30ChGîÁƒÖCáÌû{ûë`×¡±*˜æÂpÑ{w'—Ë&÷
¥Raqvv¡ØeSn¦˜+9…r¦”ZÄK^ö®.ìå jwý`~»¸¹›­÷jî|€©-pFSNBÞ…l£p×ShBp¿ˆð2ã}^,Ò)ŠÌŽÈíÓ£Uá®NÒyùàNg"‚{Pî4½)>&¯·‹Â[e×1ÐÁô¼™vÚ(¸cƒ~ôÃî‘°½€;]—âé¶Ä»¸ñ5Ü{+Â=pîuÂT™ŽÂrÿkw“ÉdŠöú{Þ\úº™©2ï¾úérÏ#¸ý¨Ã}ÐÀý¨Ãý"òÁ}T6ˆš€;b¸#yS?WîêÃýÍ{sûk>ÕÜó»›®[v­tyÚßÈ[%»Ôë$‹v,íHÍÏ­n,Š3ÛùÁ}7µ·“ùÂµîxyv¸_ìÜ‘z U†;©¸)¸£ÖàŽîHÂ½«ÜÑ¡à~ÇÀÝd2™G8ŒÒ±¥ÏöïÚ‡ß¼?3ƒC/-¸_ÍúÑYw·{ppoîÌszÓÜÅ[ìoÑ+dîÇ#p‡Û5Üy:î”øŽÂ-ú å÷gÛw¶zU¸OŒ5÷“QúG×ˆLr|Ôw­÷sƒõàÎ¯@ö?Có£ýz	2×ßoÄ‡ýÐz@îƒï€Ä
³ÖãhŒ¬X>¸à~w±€©í	;£Ï¯3É¢Ó›Î¹8P­%á¾Xp·æÅ=WÂ}n}gµy¸Ç‚pì:w®Ü)ãÚ”Ãaí[âÕ»dN†;¿pó´«†;jîçëÁ}rÒƒû´‚»Zs×/š…Û©Ðr;}iKpOë	îSÝea¸Ë‡Ã]€A<>‡{jî¸<€{ÜÀÝd2™Sk·_kfŸÌ±c3kËGî0û¸
4¹G$:e8¿Û)ý ÜÃ_ÒçG«
÷iQîÙˆ6¦O*OMi¸O	X(¸à;Ðˆ6ÕâwŠ/‰v…°,á®(¯¤ö!<YuªŒ€»f[o  Æ&î?UÜßî?®œ%3Èf—¦Ö	¢ëI4–óÔÙ~’;+£„‚t¿$|Ž5vukŸR/ƒPOxªŒ ýï1¦¥S-&	¥V·|‡ô=æËÙZ(g]×†Ñg×WWÊ©…õ\¬ä¤cO9I×.®ì¯ä.»«ûØÜ^NäÅŠûÞæún î±XpÇ¹cT—È÷…±0Ü#"¯<;ôeÞ ¢Àf,’%â“ð{,h}$.æØž+3tBÐ}JÀúLž`¸O©­2‚îôÔ/=ÒéñKÃÎ“*=fFoWù€ø˜|•í„íÚí'©ãÞ«g¥¬ÅCkÌ+†øúÐÅÅ”¡àÃÿý`¸û‡Ê 1è†ÄÃ¨«K>?£»™¼ÅÏøá®/ _m2‚;Íã‰ð¯Î;wÆÜM&“é1uåÏ×ß)s{¿aíñ¯¸ÿ& ÷KýããÏt§Çåš»FºXŠ÷åß\Lg½×Îû÷è@ÈiYðÈ©:¬õ‰ðŸÀ×È™r}$w¸b’PÀùá.Âïã„X%A¼3Æ9rºþ€«3RÙMx3úpBM½“Ä˜UZ÷ÄÂ¡î#Ó´è	‘#¹Ü­ŽXïg1IŸ–åGé¶Rd§wè’JžGt×g ásÜp§D¸Ù$Ý9ßPÐ·ö;ÔÜfV<Q’ðäkšÐÊ†¶‹˜@“K:€ûÜÝõÅrra>eK »ë[Ž\q9XrŸ_Ý(Xî‹[©­Bº—KØ6FCÆj'XOS{¹JÎ»ëÀ«µü.zâ‰'Ô©sþÆDú} ¾	ïsà1ÂÝ-Þí-»Ë»Ø³b
"Í#ÖÐ&"åî¨ÊÿYãýi*9oR|¶	º«5n œÎng¸ë'ª§q¸à]o­ë
ÂùáÎ›ƒHÿ^z =}àN*¸ãj‘pR+˜>#zM7„ªNsœÜã1+ ÷ß¸›L&Ó÷UÏëo4<Ræ³÷ñffzŽÜ±$KPv	îÏe¸OÒÌvüm{¼u¸‡Q‚ÚwÔ Üã¨Y¸ËŸM®qž%¸‹sº‡;ó»ßwZP§[ö¼Ê5ä‡;z{u¿3¬æ‡¼ªÂ½ä¦\;Ÿs¬ÜêìÕù•B¾¼›SpßLe±æj*a—ñn+çÈ#§Îosy7R¯ÊJ;i«a¸÷vî\3pªÜÁO	w—8$¢I§ß7Ü'îâ::wNØ»:ÜÅKh›‡;É½I¸[…»|MÍ\dw“ÉdzL]ÿ Áåö[Ÿ¾/¥ŽÜGGGèo4w¼>±ÜûQp?K1Ù9ÞÃEÿÂçjÀý¸„ûiùzÓJhGr‡ˆ¤oqÂ]îu§]ª¤™xí"p·*¹Sp•„;Îñufûd„Øíuàî‘RÉE§NEá.ð}AÍp”Kó¤-÷—B¯-åp—á\’ý w&›wÎ)¥ºOŒŽ¾Ý¡5÷ÙL]¸wYn¹h[vÉÊ‹™í+©l6Ÿ±{EéŒ#¶Ê\-ÄÒÛóû+[ŒƒÄ÷ÝŒ8Üª]òàn§±ä®bs¡³•¹yTî]ø¼>Û£ì÷ÃýÁpn“÷ŽÝ$p¬îÝÝtWgäú-*Ý\	î£¸«_<ŒµÜåQŸ$Ä»‡Õ“›Ë—cÖ™‰àÅÀC[<4å$XžCƒŸ§mêè4¬óà.ÆIà®/HÀí4µîóNU¸cÅ}èÜ^¾càn2™L§+Ÿ¿ÓÈ‚áþÖŽ¸·î {ßé†á>@î(wSÓ¸KVXa¸Ó!Ã1ßëÂ]ìa?Ep‡ÆÑ RpGÕáŽn÷Ãýì…ÈM…;ª ÷q˜-¹Ø™÷•bpïÊ¤RYù*Õ¹…Õ²)œ^êr,·pu3KwV6\X/'¶Ê”Ýb¹˜e¸ÇÈÀ½
ÜÑt¸£jp§¢pŸHÔ»ŒŽßpº¸Óóßïî}ùbÖÀÝôÿìÝýO[Y~ÇqÌ%¬ð¤
£jBAÑUÔ­´¿ µ]iUi~i~¨ÔéÃþ²Úm…XÀ$H£_)äÞF²c{äîíìÆÓ›MW*4ÊÖÙÉÌ˜LÔ?Æüýœó=Çç>úì„dÎ[3³~$Æ//ßœûµN§;§]x|¯“e2k_ïœc¸sËN.É5î8*±+¸#y^õjà>2ÜîˆàîûÚb˜þÁÇè¬pÇÉ Üé³úéV·wwv¦Üg‰îò``„ûUw£»B;Š…;EW(¸‹ø;†± Ü_”Wú³È½œSpGpG¶S.b•º‘ß[-;G5«²ëä$ÜSÕìqÞM¸f¡ZËç w¥ºU®oíV]#å[ñò&Á=N÷!÷¤Î÷iOéH¹û.…ÄÜ“óxlüùcpÇkÂ?Ä¯ðqJŽ¿ß÷÷‰pŸìÜ¥Iü¡-–Ê| á®Óét¯­Lr¿÷éÚóÏÚÏ/ÜÑ ÷´„;NS]Ã]Ùê?Ü›¨)g…û,â‡ŒÒ„G%÷¶pG=‚;%ážþ,ÛŸµ2åÅŽà^ß°¦[Ì®”kÙrþp·JÎuM7ál	W[EËàp_ßË.ïåpûwîC}„;Š…; ÌFÊ"þð±Ç=w´€{²K¸£öpïñRL×l÷÷ôwN§{]ÝzØh×/Ÿ>½ýpgàæ…swZ*Ðî4²k¸Kª‘2?Üƒ`o¿£Ž“äh|9Ÿïˆß€ävEÜÓHÁ=M‰¦›t—»ßw,–ÁwqÄž,W$Ü}qUÊK2Õ-q*x,`\D ?Ü¹Ï©’Üå±¿tÇÜpûœ_[³¾TÑì¨ç-Ö¨ÚÊ¸M‘p÷ñæ'Æü£ØÀô‹ÿ]ïÏ<Hv™î†”œY­lØvÎ­nìïo–KNÝ)p\›ù‚YYß/ÚvÞÁ2ø’å&ªYìÇßÚÜªçí\"÷V•â.(4:2îßC»Î?S”ŸÃ]Ý©“ŒŸqpG~¸#é]ïë0ôŽ'~¾ÄÃiåvùÂ¤W/ÆÙ€Èì=Ô4è`mÙDr“o|G¡0ëËžy¥XJíìJîD÷ Ü½L¾þåzCÜßS
ù^ámàŽ¢áNßÆ†»N§Ó½Æî<ùu£u?zp÷éã;;·nœs¸ã×ò\ßá>}¸§}pG|™ìð;Ìí’¸/‘¾–|pgçpgÂ:¸œîIwuEñˆo|Qâ‰w’ç4c4§µ2A¸‹X#àŽFU¸‰î¨	÷«hNÁ=PsÃò/ÂážþŸÍ~¬q?.tw,7s®‹©2{{Ùj._ÁX™Âw¬{ß¯‹ÕZ­äš¦Áá¾¹—Ý<¬¢á~ñìpG}‚»oo½„;þôîàÎþ1ÎwV4ÜQÜ±ÐMÂJ  ÜéUñ¸Ú½pÕ»;j÷ë¨5ÜS¨K¸Ý5Üu:î<vãÛÛÖ}uwàÎýÇO^Þ:/{Üÿ*÷¥x¸q
î£(w*îsá¦eAunª¸£qÙu:ïÃB(\†û¤€;1.–Ì³áÖøeÎÈ’ñ‘$ã#UÆÜ·;¸#?Ü	ÞbA=Ñ¡áêt›Ág­kW‘”û,KmBäyvUÔ\C[JÅîÃïóm›N÷çðÔU'z§î¨P-švÁ-nî—fªõr>7ƒ
N5°rœ/•
Å²c&Ü‡{ö`y·šKEÃ÷÷²vR^¶#åìhów1Ñ=þF {3±˜f0y–¢¹À3KÑ]ä‡;RpWE®y	~’òÁ/,‡Ü“ó3Í	îêE7¸_v=pŸ`—[=wùÊæ1±)w¤&ÍFÂ=‚;•Am×ÊL öp73ú˜t:îµÕîèÔ_>¹‰[}sû‹;çî£½ƒ;Î¿ñpWÞ¸£1À1GÃNEÃ
Á}4î¸o¸)¸¶ÛÏ_zÑÜk£hZ¥œUßß®­Z¥hò[ØyËª¯d¼eZÛŽ€¨‹xœ[‡»'»ÅDBÃ½pŸÂäŽ§ƒî}ƒ{’Òp×p×ét:_w?m´êäÙºÕÃOÎ-Ü§—üpçÑá]Ãò.i÷³=îSSÀ=	÷Ðí<`H‹HkoÕFbŠ:Å™áŽZÜŸdDu÷9ññGâƒ’HÏ¼¿6pŸµƒûµ Ü§D8:pw•pÿ½Þ/”É':„;ö¸›¦[ªm—°ÜÝ)Ws„ÂœmX+Ë»5§jYùÖÆÐR™ýìI¶ê¾upÇy/î
ÆC8	÷Jb·{¸SƒS½¤ŸgRÆ#@a¸Ï³’¸³ÜSM¸ÓcÁ’ßf î×CpgjïîHÃ]§ÓéÞÚ±2_}yƒÏ{zïÞ¸¿ß;¸O#/ÛÏ ÷4RpG!¸+§Ÿîü÷7öõõ îTáŽÕ{¸¶…û”î|³âÎî}ø¦åýB'pGf¾dÚ³/¹vuÃ©ézìq·KÇ+Õ£Ãý²Sƒç®³Õ8Ù«ï-g·m÷H¸/¢¾Àä~cb.÷î™h¸£ï&ÜÿDÃ]§Óéb»õ«µF|kïÓÍî?ûêîÓÀäÞÇ5îî4È===Çå&EpxæTÄòøÜ}ëa("úT°tŒÜ}—(¸+¹‹+T“~0 %/ÜqpGA»/òšûÜU²ÖK^Úc]5¬5Û')	wZ·Î;r¸Ë§=º¹ð$Ç˜M†<“"gqK{ûZÓÄGLòäÛ3<Ëÿ¾Õ{¸HUO±<p/å­|µ”+­\©ZuŠ&ö¶[%³´ÍNÅZùÍõÕÕ•õ²0k›•ÃÊî®SÈµ…{˜í	O1pç¾ìÄûïyëîßc…ü?Lƒô¬ÿ’JK¦Ø¾ˆ†‡=3]ÈíòE ;]†»çÌÞèùäNk_hIƒ÷»3,55rbp—ÑÑ©óóúŽdIR¼ç©÷Ã]¾Ò9Ü½bG_“š¸·–û8Ÿ_Ÿœé/ÜávwN§‹ïÂ—-¹úms-ü³.áþ§p{¸ÿä'Áàþ£3Àêcceüp—x¯êî*	÷k<ŸÐ§Q¸Ç†ûuO“ž‚kÜé´„{´Ü	îHù°-Ü©Ð…±·ñ4ÚÂÿJ¸s&ÓG¦r¹CØ|¿øÕÙ¹ Ù)5Ç=f¸¾jTmx¶™ÜY´%Õ–•¡lZÀ}©ƒÜ—;‚;Ø–ËKE§d:Û¥âFuÛ±Œ™B­f+y¬q_ÙÝ?.—³Õ
Á}ù¨¼`%Ñ§Râ\°D°ÜgX™„/Ÿº}Ÿ~Jµ†û%_Q“i"ážBÌ¹pqÜÕÒíˆÁç
îétîêµ-
Ã=äˆÖÜ™Ül;aq‚»t7‡ûˆ0û8b·ŸÏˆ£$+îÈ Ü=‹Ü'eM¸‹°8¸S™x¸£¸Ó<Ü®á¹Ü¤á®ÓétglçQÜÒÜºýRŽŸùÕóÇú÷¿îî?á^ô~J¸3¸#w.÷«îh¬S¸ÏvwÔ1Ü‘„û¿UV½n¥žëî®]0óNÉ®dëÅíÃzeÃ²gìjÕª:…Âá2æ¸«¸¿rPàp?ÙÚÝ<*º)÷×whyHÀÅÂ}½•pÿ¹†»N§Ó½úî|ñqä"™{ÏØ®ø{_6Ã¿|ð]€û4+÷)Ôo¸‡½§Ï9ÜOw„çWP}n¶	w²8-Œ™Ž„ûXÏà¾°À6'ÁýwÇžhw
÷BÁæ{ÜêNå l7sFÎ6N¹d×—³˜3c¥œÝ‹Ã½±¼¼²çÜÄ[÷wû
wú‘èîK“b”à>ˆbá¾øjà>Ò%ÜQÇp¿‚F®° á®Óétç ÈIîkÏÿ°ƒÕïkî«‘ï7Î/ÜQážNk¸ÇÁêîœO
îÌß­áŽ‹Ï wÜßwåvn5œ]@xL‚cÿ½×èy˜üÒñR™¼U²Ý’ãT‹yŒ}Ä5ëÝmëpyå¸¾XÍWBÂ®¬ãŸ,s††{GpÇ÷náNÑ¥s"ï,w42Ôî‹!¸vwôzáŽdfi¸ët:ÝyiçáùbmM¹ýëÇw¾}ôüáãO=‡û?öîÀW¸v÷éWwß<fUî„‚;ÿ£ãNõÁÝó6]š#ã‡;%O¶¶;}—4cGÀýj¸WM/àÎ?*k,:ÿV¦¯KN£!ASÁ™=î¢¾|þÒúv§{ÜóÛ¶kdìí¢™H1*ÏLî…\iïd¯v´yèTöv+‡ûòúêfÍL ~Á=qnàŽg†ûÒ4ƒ;~–º…;þ?`®	wvŠÉŽˆç‹eÞE±pGA¸§Äà/Ü‰ò¸óÁ>)cÈwÔ)ÜÍÁ=ÅŸÇöpG¸ó7¯î?Ðp×étº¸n<~öÑÚÇÝþê7>Z#¼·ÜüdçÁÎ…³À½ÍTÈSeÚÃý§-áöaÅ©îžQÞ!´‰ À´ûÇKH¸‡£«#á®ê îòL0-ÚC‘ÜA\@I_‰.OD–ôÃvÔÕ$™øÄ÷#þÊ3Í‘EkÞkosrý±œ ƒÆâ×û6¶ücš7€¸<›EÁäžþÝáI£÷­Ô_ð-²h^‰†;âse»TÊAWVíp#—`Àvsî¶›ß]w
õÕ#gû([·.q¸onfÃ'ó³éT\_ídü½DGpWuw*úVJìÈ³#z†g„ž½À(H¯r¯Süý¢|Å^ÎušG1(ÍoO?Ds”„»ø¦ù&Ü3†Šà¹³ä0ÁÊÏ \§šÇýe)DïÜ}ûÜÆé5™^éI£Yî¡Ñ2(þe®à~™ug¯/\‡ýCK¸ÿpÿÅYáþ¤á®Óét1Ýüü›‡ÿòî'÷Ÿ<ûúÙ½µÆ¯Áí¢7î£îçî³çîøïg[>´¼oñ-ò¢kwÃ´s°ª½}\+¸©K†•·9Üsnþè¨dl¯oÔ÷÷¶M÷“Õ•­š©áþªáŽ:‡;¼‹ýpÇU=ƒ;×p×p×étß¹níÜä„¿ÿàþËgŸþæóSÁýÏX\î
î¨Ÿpÿ¿?"¸§Óa¸£3Â]wäQô+
ï¡	í! #Z*3Ìz‡®êîŠý|ø¹ä.éÞ5ÜG¨žÂÑZ w¶ä.w¶]¼*Ÿó!¥ÛÜgÛÀ²âo€M9©
n)Z)Ó—Aî##æ‹+ÉÈîÈ(”l#5èæk•¢=˜*UjÖ¥×ªål˜®³‰Qî[GÅÔE«¾Êæ>­×Ì8Ž£x³G}l’‚ûRpïp~;Õîê>ƒ—Ôå1p/u{no÷…÷kQpWÌÉ‚poþ€ñD~„»‘a"<:ÏK‚ÒWx€·œãžAIÔÜ3A¸Sa¸‰Å23@;
Á	¸£öpG‹ˆÞî
îÿ	¸ÿkàþ—!¸3µ³4Üu:.Ææ÷ïÞx³àNrçŸì#±þÃÖpŸC¯îðCÜþwwžü¬QJÃ˜ò$HKn'¸cß^Ô>wùë8ðÑ¿ºgOïv…wöñw#<Aí¨cRexf§P¸"µMgq.íø'îtÞYïÜ÷,ñt&ÛÃÝ4ÀU»è8EÓ¨î—­Á=W°Ü6†·ïVëâEöAªhËqTçpO (¸Ìo'Üä‘©ž×wä~Î;÷«ÍÅ2îÉy”A©ŒîÐ.‹¹}xáQ)¸{ØãážÊ$»‚»Âpçä_]H¸O´…;?b†Ããx&;ƒû?h¸ët:Ý«ëæ›má~ãüÂýý7î¨k¸O½N¸/v›üŒÿéî¨+¸ÏFÝÈ³õUÃm:‹À¹9×pÝŒkçÇJåkU3aä°ÎÝµªÕ|ac·±Z3sîÅ‹Å½““õõål1¡áÞ	ÜÓ½ƒû5÷IÀrgtÏˆ’ª&ÜGÜ‡æûw|¹žÁšÐp×étº7±ö{Ü¿¸ÿ¸ùÉ©û³ÿúí?1¹Èåþ‹öpÇø‘%Äwã‚êÌzÿÏG£š¥æ(5NŽ¤<p‡cšâ
ä‰-á/QDw_1n_TÑoúIqÏô’çQêƒ`úÕ½GÈ‰—)ñëÄ˜ ˆòòº¬¢O³³=ð(¨¾Ê—‚Ë0kœµÀNbðf$ò[€Jš]j+`r¢ü(§iK*½Gº¸%b»a}Ž/”WýhùÀ$¸SÁÁZÒÊÈµm7•2óE+gÚ¦#SíÜLn#»U¶°@f·šø ÷l:dÝJˆ>%÷šA!_óëR"EæKÈsŠ_BÐSeÝ/vOïAê‹k#J!¡Î$Å‡ñÄÁ]NUÅ«‡Á}I6MyÞ7Šõ2
çÓM¸ó¿ÒºÆE/VpñØH£æ`L9iNp’††øâpñsÏ—ð›ùÄL÷Ë4áø–Ù794‚†#ÝNÃj÷ËñMJnC‚ÔûŸŒÔÈØh¿_¹Œ†ä)÷ñÅ!Ãˆ†;Üþ7*¸c¥Ìßÿó‡þËßî¿õÂýÇgû÷{
wÌ^ØùäÖÀ…_þþ‹§/wpâî“ç¾¹5 Óétîíáþ³®àþþØýíÜÓèÕÀ}EÁýÿÙ»ÿß6îûŽã¢CaŽhÍªhBÖVX‹ OT KW EH°V4+Š¶IhL…ID_,¼DwA"©wËvç;„	¸fL;Ã
	®Æ‰mÊ±ó×PÿÂ^÷yß‡ŸûÊ;QmÉŸ'"‡ß)ñxÖƒçÏ}nðˆƒ;
ÂŠ†û$·º0ù áŽ\¸OÐ0cÿn£¼‹iú8ÛãáŽe†;%nÅ;Ã±…fQîcözû€à®äQ2Ü¥@pÇHdEU§bš€{sw·¥«•š	Ç¿ù¦V]˜ßª[¶ÒÜ=u¸Sw±OpŸ fèƒo'×í]áî†;Ë…û4­ü³hò¤;ÂÍ»±MÕ#A¸£d¸£ÜGâÜî{p—çQÜq& ÷lÜO£#	÷«_Ý¾uëöëO>¡óŸ<¹sçÎ½¯®µÑ­{÷î®´Ñû7ž\º|ùò¥K÷ï}~qH&“Éžc¸Cî?é×÷ï9¿mÉÐîøº Ëá\0®öÜ;GiààN	µÇÂu‡ûp§-†ü[ó»´à“ÀŸ¡¡2”wdŒKí
™œtŸ<‘Œ°ÁIFñtpGBùîs3î€ûy_žøÍÅè²:acÄ¯¡ÏîìÛÈ3£Ïkî¢ÿªÔwÝEZ îÂ °î•)ÙUa—)lq_ß©7LgUÃÒ¡r{§½\µ¯ÇÀŠBãX.li0í	î,¦lÇÚû†»L3…è{	âM–ž¥¦¨<s9w&óZî"÷3î9ïnÑîDwjÚ>›Y†æ]q¬wZ%=keáÉp§‚pŸC‚ïãHìŽîŽpçŸi(îÊO±œç<õJÖ“½ïÜÿ÷Ý·ÞrÜw¸]Àýï÷‹_ÜjS+·¿}òñåOÝ¾ÒŽêÚë×¯ß¸±Ò~pý›«Êð2™LÂ½ßp?qdáŽç#µûàZxà>)”àÁv®ßpGûƒûL4ÜÏ$ÜÅâêˆg"÷±J©}í–ÓÃÝ3#c£ÑPºÆ^´Õ‚]3
ªe©ob<Mei~­^pïî¼ ÜQj¸£Þá>ÜÜÙ*&¢7q îÙl"Ü‘„û'w>óØG0Û»öå­ß^º|õÃ!™L&{îàþÝ~ÃÝ4ŸTEÁ¤…{ò÷3©áîØúö–4TÆÝ=•HîÜ×‰:À#±plƒ»G	áq-ÁN“áŽünG“IpKŒqŸ#¹³ãQŠ|N§ëüpŸî
wôR¸3²±¥#àÎHGç(³µÛ>–9ÜyqpWuÏ÷ÆÔ”jÛ¦n¶fÕì¡j™ÓÐo*ªjo®¶ì†’é÷èi"Cp§ÀDoéàN
îÀ-©Ïí”€»çˆÄñp÷­õÂòp÷þ]ò2âƒjhJH¾ÿH–ê÷<¿:wÚ?õXÜ;ëñ¸?Ïzí%Óît«à>çì10›?¼p¿üù—·ß½Öî­•×Þ~ôäÛGŸÉd2ÙÑ‡;ÉÃýU	÷”pGl:;€;.À=çABè„Øÿ¬ÀuÔŽÿN³8Ü)Á¨é}Á^¾ Ü'îã¼Ç­öTÜ|œîŠÚPmM…ÞU]Å6w Ý¨loT6¶,×*Š©aˆ{CièÍ­zãMµ!á÷ñ„;Þoa¸“ÊŸ.ÜÑÁÃ}8{Há~ÿöƒÏnóí£ëp{ï½¿²reåáÝo®Éd2Ù‘ƒ;Éýo#áÎ6¹´¸ãÐ©S±÷b<Ü!ö`é]àî<îX Nö8¬‡áNŒˆ0ç] wŽµ²2Æ"šà>ŽF>ŒäF„×Ãå(üŸŸL ™P<ÜÁráó„ÉÜéSûÂåî—tžN Ä&ø Éwäžñ]î‹×ÌóyiNµvl§1ÚÁÍZmHeƒ#-.ÆPÈ­0<ª†2ªÚ‹5K™ÒM]×Íz«Ú\ZhªS™†®+‡Ý™ãje«®«Êñ4ùŽ“

Œïî"ï³Ûà–÷^x!æéÅi*wÊ¹jŠåàŽ\“²k9O=üìw‚Â+9«ùÄNñÏ~¸Ê÷þÜ÷Yg°ÁË—¤ËràËW•„” |Ó]ãÜY|:HŸÛ&Àd;¹úgVE|‡WöQœÐŽ¯`£¢ÎEx?u®Üéƒ‡;ò6á¬Gx¾›³ú¿ÿtàþû;öMý	‡;¹Ý÷¿ë3Ü/Þû½3jíÊÊÊí>tíáÝ‡.Éd2ÙQ†;ê
÷7ÒÃý‡!¸¿Æà>Ýo¸Óé1o´­8=Ü‘Cë=À`}vœ—î³Žrqjp0>8pqM¤‡{.—
îŸ†É]LÅƒüpg&“Â°ƒ¨’Áùxœfnp§¡ÇÈYÔ!¸±yÇE³4§<½v#hÙë»3Ä}GÏ¥ƒ;bÓA6ìj¹Ü2ŒJM¶TM«­®×Õ©†©)EoGz­ÕÚ¨ZºRØ#ÜóÂÝh_pÇ]ÐO¸ÓH|‘€»Ó%àÎü$ºœ¥ˆþÇw¬Ä"¿ÚybÃ;]z…íîsÇ§æIwõéîT2ÜÃù&îTÜQ îÈ÷?r¸ÿ0=ÜßxºpÿôÎ•~¯Ö_ß¸qçÓ}zIî´*“Éž'¸¿ý£¥»#÷!¹GÂ~)Óq3ÝSOôw¾y7Œ,ÂùÜEtMðÊ	‚;/î9Àƒ®8‹|pó=%ÀH€?÷÷àÞ§ÈF2Üs<ÜñÕî¾cöÌ•C`û¦¿iê%xÀÞÅÔ´€»ˆH%Ö™p{fŽàÎcpgß’€{e¾·_àÅ„û••Éôp/¨jA­•ÛíÒÎæ&à>…
õÍºZ(ÍE=£jzæxC«ìll—ÊMKSöwü_$.£pÙ±ˆî‹‡;%.xÁ)ê™¹í£ÝÁ×)‘kZ¯æ	îÙ3wäûi>Í¨è<Š‡;3},Ü§ÏŒ…àNÑzå|ðbpÏ²pƒWRÂ}„ÇáŽBf§3a¸§„;þ`ñ)6÷÷ß
¸Ãí¿{û£~:P¸_½÷%ÜÞÿ®<üú÷¿¼uçªÜö.“Éž?¸¿.áþtàž‹{vÐp§ºÃý4ûžà.Üî{ÁÜ'šížš_(¶»µPS'S•9ÕÀ(Ã(è»xØò†¡+ŠiªªZ_4§¦ÌÖòZµnØšŠ2åâÒövkÑ8@¸£#	÷±àþòQ‚ûðs÷ï<Û°+îÊ­î2™ì¹*ó»gîh pÏÜqYz¸CŸ„„ôpçæîî“néà>ÎclÜ)/¡BÎòŽÛÏœf[åQ2Ü…Ü'<#efñå	H@jµÝS»ó]GØ,W•<J÷‚i«zÝR¬¥öüZkµe¦ÌÅº©šµ¦¡›Ø?_*·,À]qN¯Õ4UUFÜ©ÞáŽÜ…Êßtl`ÖÀ±‰æîHÀÐŽ‚p§öw<.ÊI¸§€ûÕËvšðýÑ§C2™Lväáþ«çî(=Üs\Ô)áNq–¶À%æ{.Ü½ãZ“àÎ:éFL§RÁ}õ w˜}bÆ]{ƒ;EÆOî7»îÍb»ï•¶ëz>=Ü5K3ÛØšß]­-®mXfÃcÔ‚ÙÜ©µír	3ÔlØ°zÆØžÇœÂqô\ÃEÀìŽ¥ÍáÞYÎœÖYßÓÀýÂ?ÜÙdî3sgiÍcë„˜‰…ŒÝ¸Ójæ…;}€žŒr{–Ç_X¸¿’î¹=ÁýgÏÜ?ùêƒöÁ÷‡•[ßÈI"e2Ù‘‚ûÅDîÿÄáþÓîCeàö_þ2îï0¸ÿ·€;“;Á=rçÔé˜Îð8éxü`Æh¸¡$¸C‘Í0ÄúÜžó<÷ˆWŒ-ñ¢7xìó`Ì
Þ=Vñ`œçq~”ÚñûZˆØu•Q=ïƒ;n"\Î÷­ELa¸ÝÃæË!îìøS3ÔißFRÎ(Ñ´7¾DÄk$~döòowÜ^K»}7iðLiÞ¹Y{~µfÎæýeEµMÏ©ºnêZµÔ.UU£Õ4ô)£f¨ŠY¯ÖíêVkµ=¿m)Ç1¯ŒZ]h/×F{„»`;ŠÙ9eø]Šƒû‹iŠúvýÇüç‹ŽHŠ?9ÜgÇ1$è¤º}dôå‚~aHêû ô¦co¯’ûø8½çùÂÝ±6®æ´½ºÃÝÉ÷—Â$Ë§ÿ)–î·S<Ï•tÐ§,Š§;ûk€(G>ÍàžÿÓÿ‡ÁýšU†ÜîÂnÿ9þÚváþo¿N„»˜òÇ÷Oo´ÒW~õÅÅ!™L&;4p‡Ü%Ü%ÜSÀÝÇö§÷á,‡;271Z=Mó¥Ýn×.Uë‹•­òêÆFÓPò(-Üª®Ûm |JµMÇñšfX8¯×êÖVqµ^p¦9ž©/µ‹-[ÉH¸?SpÏI¸Üáöáþáíö€Ú½òÙÝGK»Ëd²Ã w.÷^áþ€;ÍãþÛ·Þ}×3T&îïÄÃ=ýPêŒˆï'5‚†à.ìN'|p¿‡€æpgðpGÑpçèp§çšˆ«3SŠR@;òÛÙÏü Û³ˆÃ=ç/ïæžñÂ}ÎIÀþŸ<TñQ>>9þvŽQéÊ…;¸³h	yà.èN{±v–,û‹®÷³#ô²ðyª}pŸÐ*ËíäŠåõ%ÿ/l¶~·X*•Š¥µŠ­NæÓ2L]É‡ch
Âa{{vXg{¢®‹K‹ÐèhÃªi­VÓpµnÀî›u%£ÛšjµåÝ…KÙÜ¤ú
w”í	w¹\x6ï@©§3®„¬éFo^*¸‹Ø!—DÐ÷=û§²]Ÿé#1­Áy÷@0ï°«è€‘à>Ìò–ÖòîØ—‚÷¬§‚/¯ÜùùnpÇÃFÂý&Áý½÷p‡ÛiŒ»ãöÜß}ngó¸¿þ:ÜÞÜ…Û{€ûåoWÚëÚÊƒûC2™Lv8àŽú÷_î¢ÀövO=ÃJ„;êîs.ÜÇw÷¤YeøO2FÑë–îlÂ4Mç^²ÎSað=rltpžc‘Y7çÛÉ•kÚâN[4¿\^ÚY/cÆ—Z¥Ò\Ôfó¢½Áýœbú)µ¶Z^Û^T`6µ^±Úb]×ê†¦©Š®
ÕT´æúêÎvya­¢÷î™ÑgîÉ‰¡ð,Ôw¬<}…ûwÜîÎwÏQ˜NãåøY¾‹VÚa;îÙ¬»¡Ë~opGÎj×¸RÁ¢×Ò3Æ}öiÀý/{„;•`»¿‘3ÌÈd2	÷#wèv`pÏA¸;KÀw,ç$¸ã¿d¸çrÆjÒ™b±]Ü®W–<ceJ[–m›¶¬?OÎPpÏšõºÞ0›K«;›ö)ÔËTšË·,j×­ºÝÈ¬õÝâêÚvµf©Ï+Ü_|*pGÑpŸÜÅ,îHÂ}@p¿xÿÁ@å¾rOÎê.“ÉŽ"Üÿ}ÏpÿgwÈÝ÷é„Ye^¦ö÷i$.tµ‹±4à{ <?‚»Ð6pKGr¤p.îDc^Ü;_ø±û bÎÆkq³È1îÙÜ;7ÊñaïÁ0|Þóì¸Cdž¡2A¸^ÿŽ˜°Ýsø0%\8ÚeQ/óùûL3ô™‚mõåùñÔf)aŒÌÚöònq­Òš÷\X}œãå“Ý^yå1[p¿iT+šfµÊ«­õ­º­5@»¾¸i(›ÅmCUFõÊj¹eØ‹Õõû´j2Ç3iùœ¡‚pWO¡‡{Šò/¦q{Ðø.IÝùdîTÜÅJ¼ñÆâpG'ˆì¾ø(w6ÙÑœ“#ww%ŽžŽó´tÀ<œqcc	øàN?ÑœFËÌŠ’:éºùà>Œ‹"àN¥‚;»ŒÃÍÍ /ÜßsÜžîoá·¿
·4ÜÑåû_ï¶Øƒ/þbH&“ÉŽÜ¿÷7z‚û_ îÁz†;5— w†{R‘ÓÅ¨ôÄ”¸eÜ³]àžOw”÷	Ÿ¨ðÒ‰Bp‡ Ð4.Áòî”ÊïL'ÅË?wäþxÖR×ÙÚ—šv}§ˆ*5å…šZ¦´iæöwø)îv­®iõå­JµfÔjæ¨±QÕê‹fk¡©Ãtzsy·´º¾´¶¾Œg_³ÁvEi¤…»è°Ã]ÌjéÙ6í…û0ãî/îçá~‚àþ×n¸‡ÁSBRbˆ»;¼œMÄxXàž;ÔpGŸ|Ö`¸õñ¿Éd2Ù¡„;ÜÎä€»˜Çý£·1ûoºÂrƒû¸p?Ó;¹=îèéÀý51Ûz@î tîø“rí}ö,nmu<—)=J„žG\-#ç)QÀø¹ ÜI… ÜéŸë#špO¢{HSc^7Qîp%Œ…ÛRds
û£zog"nÜÑ01’!ï‡vîæF¶—wšÆlž¥Y²tÛª×¶×–JK•Ç¹à~®P€ÜXùÉ›‚î]W‡íõåš¢+l|»^Ù4ìÍVsp/œ*4ìæúòÂzk}¡¸Û^¨b€»¢zz>gÐ+¤v4J£-öw~ÛãKt;‡;¿C<ÜqÓãâ™ÑS1pŸéDk©îîJÎÞQ/á„w
þ>pÑŒî4NÏ'÷à;Þ7&ÃýŸC=w§(¸gÅúH‰¡2Ùaº/¹=Ïá]–
Á
Áý$ƒ;¾\¸çw>«Áý~¸ÿ¼+Ü¸¿ýöG¿Š‡ûßôîèÒõnrÿ–œÒ]&“=¸¿„ûëéàþƒ Ü¿wØàŽw´o¸Ïîø#î(wÔ¸«µ…65:jquññlîfÞÙ&_ª*9çæšf×ëöD®'¸»nC“ª:,¶¹ŸéôÍõº¢é–¦XV}»ŒÍûK5Ý´Íª[–m­;“ØlÛw3óÃý¸¸ƒ‹¡2.ÜçbáŽâàŽžY¸çó‘p/<Üs‡îïÖd|%‡¹Ëd2	÷=ÁýBîÔ3w"t
¸G•ÁEéà>¾?¸ãúþÂ=8~aLÀ]÷ó(îÓ½ÀÑá—(m›»}i­Û¾i³Å’¯—ÛÅ-÷(î8—
î'ÅwÔ¨oVj‹ú)SS•…¥æÆÂB©½[Ú¨7W×[­šš±¶‹mÀ}K^3ŠªŽ¦…û±CwÀ¼p§÷Û^àNlçtO€û…AÃ½€õ1;p¸OvàþÿìÝo[×yÇqÓ°Ä![AyˆƒØAÜ9A¦j`Ãfd(Ðd˜ŠuX›¬¶m0/áZ²åË’‘@›ðÞÊ¥RIÈthSJÃ„]ÒÄ’“*Ì´TâÔéÿBþûóÜÃs_ÅKI¦-ï|×IõF‰—ñ‡Wç>wŽ–Ê>¸£¾x¾?É.©Æ¹«Tª»îXãþôÁÃ=z—¸ÜÏùûÂH¸ËÑ2û»lQæ„;2Ö©»í¨6 N¢wÀÝyÎ#	wÊwï0™Ï dƒ»Õ¬‹ÇüÁyÂýr‡;‰Ý!¦»LÂÑèvw¸Ë§9p··HÕ²}j5‡•ì²D¾YÑ»%•Œ7«Aka™Ü§ÌE$Üy°ÜîóH¯õvÍ–~T/kúfz§í5Òùf®˜é'Ó‰l£[ôYù­nîñÎŒ]ØÜ™ÜCdzÙ>á.=.Üí™Á>4½+Ü)ÜÑÏîg‘€;‹6Ödá*–<Ÿùà£v¹ãâ³$ÜÏ›Í¡iRö9	wJÎ
Q¶y9x/>Ÿ,—v!	wÁyÁ2ÃŸbG;e|Ákeæqá£÷Ü!÷ß¾8ÑÅ2oª]î*•ê°œ*áŽlpÿ§[wtþüyÜG/•aÞ>»°;Ü‹ö	wÔ)'Üe&†ÛáŽÜM‰O8@¸íp·4	¸[³Àî¢¼àŽœp§¿g3f¸7c}^¾b>H3dêrLH¥Ñ­úb;Á]`ÈâvwÚá*²À½Ó.’Z©s´Z)…:íf«¹Ú*µºµÚf,Yldq“¸ÛÉÍšó¦5å€;ñPÂ=ðÐCxuçÁÝ™îóh7¸»œj‡;b[Ìp»´Á/ÉîÐ;’seðiæ=îÞ6)r–?¼¬pçüžÂõ¸?ÀáNÑ1ÍN¸‡Ç„ûiÊîòT¬|gÿlÐH<‰þñÐÁ½òëŸNîo©aî*•êPÂäŽ±2p—Keg§2¹?ùä¿¿÷›§žúÞ³Ïî÷‹÷¯ w(ŽäŒ?iË¿gcŸ»éøòWùYgòÏç–«éShôÄpå…œ+Ev¸#ñqÃ¢"†GdÌa>‰Å(¶¬§4§ØEë²cáæ<:³]k^/1ø‡'p; 
þBd\‘´Ÿ•áj[ò[â2¿½DùQr?Îâl±wÂ5xÉ­!öùó.Ë Mãæœ4Ÿg7Ñ{ÅÐz¶6M{Lö¶Í÷ËÜ¨ÏÅìd1àÌPÐ9æJsSö"”ÖÞJ$»õJ)R­Õ#z­Rn¥wjµÞV³—Ü*ad¢ÏËtKº¶<RÒäu
L³B–‹>‰íô6’zl—ÿEýã£…C‘Y îÏwíkdd ;âiv¥cØJñZCC[%rgg‘Ü±2;ÜYŽeh4ÓI:›.ÌBÚ|k˜F³ÆÕÄåw–-6þŸrÕôñA-´;Ñ-‹aœá+ßÀa}û™\Ù7<M×Ó·¿Ð|ÿU÷‹¸ÿ=Áý‚;sû³ß{ŠÁýÉ'™ÛÜw*ƒàöƒ…;zû×Üç>¸üéë/¼ðú»oÿòˆJ¥R¸?öäº;áþˆ7ÜŸð‚;ÆA~—àþm3Ü/^Ü_Ã ÷!Ü±Ãÿ¬ÊƒÇÆƒû‚„»yÁµîr×xËºã]¼ˆRòc%Üù¹X¸gd–îÀ4ï™µÃ„Ÿ3ŸÖÈ÷ûíjGKØãî÷“îaä÷0½ßîs‹&±ó†;í¸³ÁýÃî#ÙŒ)ã/&¸£S"Ò?ÂG2eï»àw9)7y(­íÃí¹z79dûV®j_QãîÓˆï[5Á=‚|Á½£×‹én»—Ó:º(×5½­öÒñt:ÑÐ—õz3I74¥Ýðwê–ÁÝlö‰ÂÆÊ8á.1lców4Ü5¶ZwZæ.ÿt†Ã}æüƒüÿp	¹ï¾…Ãí»Ã.ó-#Âb¨á¡îHÂ=Â¢WÜß	ZàÎš	‰Æ;Ó5&v3Ü¾´u8%b'tÂ÷ó€ûW¯þ7ÆAŽwìqÂî8áþuîöÇÐAÁgPýÕå~õ“?|ëòïÞ¼¤»«TªC÷Gî?wÂýÁ½ÁB¸›‹íN3Õ©¨ìÖÂ¹À}ÑÜ™Ž&wÊ÷jÖŸä[­B¬OÅV[ÕÅà¤áUµ{íz³[eÇ†v4Iôº½ü ž+W*Z©‘ðA7-ÌTp÷wäîìsôyžpÇþö?å{Ügö÷©ƒ€;r»—ÛKe¼Ü?Ü_›ÜÑÂ½ôÛËWû“ëêÏ°8çÅO.Q©T*÷ÑpÇIÉoÜ¥Õ½àŽ&÷èbtnÜ—x~á.o.Ž÷àí‡»1ÓáœÞ3t{4•àn_­cR»Q¢XÇo`opç›îš¦uBR]•Û­:“»ÞZM&É–ÞÎ÷óõr·Y	”zñ>k«´_¸‡ÐÝ÷“¾áN@¿`ÞçÂíî2¶ášá	˜Îà?#àŽÜà>=»¸ó¯]àî™^ÖHíf¸èpŸÜMpG/¼ûég ûD¼©V»«Tª»îO†û3»Â}FÀý”\*#w·û‡»Ìîg	îö,lç|ôwÛ2‘•ƒæìp§œ£áp¼`Éµ2ŽÜN­ºÄ¶ð†»7àŽ¼Ë[‰œp‡W‚d÷œp§ýšÞp—ÙðNYá.¯¦C…mswœCåçèÜK±B-Á³2«ÙRxØøp§%V¸ãÕ(¸—KU»Õ«zµ»šêhåz(wŠéÍvk5›ëT[­Òr™àžh–Üwƒû,¤)N¾³CÀÝ|È„ñ¨&·[:3C±î|¢megØTj‰å„;å÷“îáQpÇ+œoUŽuúY¹ÁrGÂìˆÁ}ß»î û¥Oÿ|¢½ü¥:ªJ¥:dpÿs÷oJ¸“ÜŸ{Î€ûßÚà.ÇÊüäþÜ¿aÀý¯ ÷W9Üi«'ÜeS¦ËrœÌònüûìÙ…BÖcSÜ)áå“hÖw\6Hl2£“Çrå‹Ãåòç5÷SŽÙñ³Ã×mt§k¤ÜÃŽ'»O¹<IÅÌoøq™Ð“h†FvP|ºÌí>Þ588ÕüÁ°ÉÝ~ëlOlÚ¾N¦.ïú(Ÿ*¥Rº ²ÁÝë·$¯¦#RÜ	UV\¹Â½Z¯—k›ùÍÞj&_«¶»4„^l¦ã;ív·•jÕôå@;ÛÏöpþ¥‘Böv…»¥}°=@…¨IÀ'áN™án:g1ÞKûIpéü.ˆíÑw4#âï“GÇ\0­F>ÊÁv—‚$tÜLËx"áeûße hù&Á}èk’¶ºŸFC¸KÃ³m€íÊwN92Ý ùÔ•ýPÁ¹˜áþ÷o›àþ9Tæ©ß¼gœ*à·ÿçÓ¿øÜþöÞÀíîßœ ÜA÷·¿x¹?É®~¨V¹«T*÷]àþ ‚;2ÁtâpG‡îÛ«t\j8œKôÑjevêdY»p/W«åÚ;yk²Y­w{ÍÆV2™ÍÄûév)µ•)´;Zµµ•Oz­zç÷ñàŽ–Ð.p¯Ñ	ä€;:H¸‡Ü'wôã?\îOt2äKGT*•ê6æîÈî?”pÿWÜÿÆî4ÒwäÎá~^ÂïAÊî6ûyÍsG³Þ½á~vmeeûÚúúúÆÆ•ëWV„ÓaÊwDôw¼rðû]à¾d=!Stqî£¹èpH¤„»í|Ž²]H:-7XÜ@ÉÚ¸³œG¿zÊ#tDp—tç÷8nÏîtÞú]á.~‹îk|„{¶Ñ®åÒ}´U™2åwËïÃëwGV·ÃÙán}§£u:zjµÐÌuS%½Zª–+ÍÞN‡§æ·V“8H5UÃnø†Dv ãQ¨ÅXöÐÈ,ëYÆ¦û2’bÈp"'Ò4û¡ÀDàþÀ â>3"·}’;±ÝwlP÷àMÓI%Üñ›§îÆÉxQÜn„=,•{Üå&5…œp?=Ü`è‡{I¸»Ò}ž²Â=„lpŸŸw…;m®¸³
¯î4ÆÝ÷ïzÀnîp;M•ñ3òÈxýøóIÊ}põ-5YF¥R¸ÿÅxpÿ»1áþ#'Ü­Ã ýÃ9¼î”;ß¹¶¶²½¾¾}íJ·™ºR{ƒ©ýì×777·
…B>ŸO'óÜÆwú¹r‡Û¡Y×5î‚ë”yé0¬§µÂ=jIÀTŒ›Yt‡{íîaäîÎHîœOâYî,	wüOÒIv‚2Á}Á÷SÌíN¸[V<_gÓ­v1›À…äfÝåðcÃš¢ÂpŸrÀ]Ô©5r¥j®Ø°:år©™Ø^ø~,‘oÕs…®Fh=X¸ScÂý!t¯+ÜE!,±Ÿ8Ü§5Ñ’÷c¬û½àŽ¸Ÿ±o]”„;pçOç%Ü‘åñç÷i	wíp pÇ+Ÿp‡ÆÁöpGó@È÷ˆüRtQîpÒ‰SÝáþÃwÈýËÏ&ºÏý³O/©©ªT*÷ƒ…;ò÷T–»¸³šÁËtþf«•ËuofûƒhEÅâñôõv“<áNÿ¦»ÂÝrbDo¸£¥ÑpÇ.÷(þG§EÑ¸—ƒ»”û"ËÜ!wW¸ŸrÀÂŽÏ½Âý¸„»,jêZÝ£9½ÍýÞH•Ä	æ÷	÷é©½Á]«57{Ål¦Õ	t:‘ jç‡×N½S)$sš‚»O¸#ºÿmpzÀyÁÝ±éI¸Ë¢"Ü‡Gt¸ó‡‘îìš¶;Ü‘Ü§Ç†;¸î??Üp‡Ü÷«‰®sÿì‹WþäˆJ¥R.¸ë€á~ñ á.–F{ËýÄö•õµ³kx_6Hd0¬/ëÛdŠk»Àöº»ÃoÙýn’ãœ©Ñp‡Ü?âtÇ—’'b]ÄõwJèù‚;Zrû)wKðgö÷¨³Í8ÜÞ¼¡1½X¹;Ñ9(AýÁ]Ê]×Ù Çé)M—p§×v¸w4M/ÕrÍ­X²Š”Jz UiŽÌ žHç´åZ‹y"‡îè¶ÁÇ¶G‚;5Â>r¸³5ìg{í!w>uJºÝ7Ü‡g:–pÇUîÓåV£YÜjbÖº®—Ëº+Ü§ÞyÇîÓ{„{€ÁýènpÈß¦îÝáþÏ®kÜï,¸Cî—þrŸ`/®–Ë¨TªÃw’;Nom…;rgp‚ÃrÜíó ÷dp7Íƒü¾y;è~Ã]L•9?ãÅv·µïò¢{'Ö¯¼™-4R§c}?ò×·×ÚEQÛrÌUDN¸Óîl#3¾™ÆÂ¾À»îr]ÖÉ°§õb©¹,è’Yè4!Rf‘{˜šE'i;ÝêQnGV¸ÓËSt|0_‹`q;Kìxg9îI®)æ'L1ÞDp•îQ×ØŸP’ÅÚb-ÙO6ªÌCr•°’'×0!úMŒ\*#hUíÍf5{Íš1@ähE4t¯·ù­J¨cÀ=Rofø¸Ê\­
UºÍV©s‹àŽ|Â>ä!–îÎÉ“Go-Ü0…{M 88„;nÇÛÈ²XÆôüs©ÄvÇ•3"ö”q«Ÿ2¥-Ìù§3Ðm ÇŸqRîv9iïeM$ÒÞÉÄâ1Œ4ª7³(«Ô*úp?‡íCÂÝY	¶[áŽBÎÀvñë;mù"üqŸ¿ÁN(4žc„Ü¿oš)×¸Ó4HŒƒÓ ­§Ò4H	wîö¿¦i„;zéÍ‰—ùì’Úã®R©þ¿Ã•yõµ¯¬pG´Ãý@á~gÁ‰cL6èûlYýxceW¸Ãº®pG’‰C¸#ÇNw	wäwæöæøþv	÷ /¸OñpÁ	wçux"æ»ûJ8š¼c…»¼‡Üá.ñn;›¦í	wï*…A?ÙkuSíÕÕV™Î<3?LÀíîz¥Rë%bq”@±x¡Ö‰x4ÏÂþÐP¤\i·Rz(¢i‚pµ™ôén][”ë¥²Pp—p§ßiü¸mþ¾„»ÜúØfg†û¸£¿äçY¢}ïV¸£d|=¼ÍÃá£žpŸ¦3®Í’Û%ÜƒûZ["+–HÆù…x2™éÕ4:lyŸwŽ~´[wÙi—{ùƒû3‡îè—ŸOr¡ûï_9¢R©T‡î† wv&3Ü!÷KeØZ¸}l¸Ó˜îø7ng{Ü‘	vgÆ…ûvj}íü	ñÚÖÀÐ8^û/ž¾¹qã¸Ì±Ì]JÝwæ>o¸ÏÙá¾uKîa3lfExº0
îrE‡Ä)9ž²:Á#ˆvçJþÁ ±_Š(€.ò˜›Mp7e_ótÙá.ærz·½ëÇon·2éT©¤ñ{žøÇ‹˜án¹?FÂi•T‡+Ç-ENód;*×«P¨£—qk®P§°•YÍòòrG×;~YpGºí
'Üe‡îHÂ?`ðdÕxž:G™7@ƒÚr&,-“ØÿŠ¸Â}õ°eœx°ÙáNßPÂAßhê™zøäB«¶;™ø ï,–éµZµv¯Øë5mágs¥»ØŒðÿ¢=ÁÀ.áÎŸcÛñó î¼ÿªÜi¤îp;àÎÜþ„óüKînÜÉí·îè…?<?Á=îïª=î*•JÁà~þ–À}£˜)së++o`Æc1Þß[±üõ2ûÚööúµµã{‚{Ø
wa¸ÏÝÉpG
÷¯	÷ãÝD?¶µ}c³Ÿmc$ßÁÀ}ŠhUÉ5óÉ8µ,KxÃ]Ó;‘J®ÆÁŽ‘îÖ"¸kÝd,›Ïoµôåe²Ppž®p§NŽ„û=ßs…ûW¸ão\r‰—ZÙ¹‹‡Ÿ;ÜƒÕJ­‘Ï`lG±x"›‰ñ’Å
–oÑ¸ËñàÞ9@¸ÏÝr¸}pGÿõæäÖ¹¿¨¦¹«Tª»î8Ó^áŽ5î?’pçyÃ÷BàJäo67óy¬ÙsÙÆìt_Ùhla\dcãFÔÈÜåV¸/F%Ü—–üÀ±Å2²ƒh$ÜÏáóBî†Ò§XN¸Ó­3^}Ã]b‡ÈîÈî2	wJœOkä÷+Y¬OU›±tJwƒ;¡…âp·þØ®€§qÛåV!î¦±dËîz¥Vª´KeBš¦Eîz3ÛlWêåÆ¦£;
î÷ÞV¸ó[l…;pkÈÝ8þbÎîpgÑqÑ´±=:l[’d;"¶#ÛîuzÊsÌu¢ä“=Ü§ÃÕV*·šÉÄú>‹êìÇ3ä®ß˜uY&c.‚4þ”0òw<1ð‚;ûyÂAÀÓ Ç;M•¹ÓàŽ^™àª?û_5R¥RŽ5îþáþÄ÷•›ñ>oô÷W<ß½’»YHÄb\ÎUÇ‚;ÞpÂ=Š“*Ýápò|Ãº=p__
àO×p›ÜçÇ‚û2Ã}Q×«íV«˜qßr’©Žç÷J»RÖáv[#–Ê¤“9}™çsÉžá.;<p¿×wjzÚîˆàÎèNãeøö6cÚÜ¾†í¸‹èÜÄH|Uç\'¸w´R·Qˆ'èO2~‹í”#C¸W«š'Ü#ºŽ‹˜,Úªâ­w!÷Èü(¸Gï¸£—&'÷Ÿ~òú•J¥:4pG&¸ÿÐ€ûsf¸?Npçó ßƒÜ÷g÷!¸ÛæAþ€ƒ¤y€»‘„û£VäY¦róÙh§àµÕAÿÀÊ¤3ñ˜`ÛÇUÓ?éAÄ—°„y‰ÖƒSéÈVÓTHÊa™ø[ýðpÓà.…]Ðªö³‚«˜n‘p·É•²|iW³[õ.çËœ¢Èß¾ßÇ2v{šïV Ýˆ´n “p7ÑŒ²Øóíb¬ŸmUvúù
ýà.!™yàºyÎ”GaTN5Ål2ë»—­E<Ó«er—²×4îËÕ\³	ð@fsfGLÑµŸ¯T‘m¹yˆšÜé‹ÊÕ2Ô9ŠË}Ñ5Ù_@ 9—;’§I1oƒ|†Û¤Ø3å‡iÿºðºAócìä¬sŽG ½×xÚK/:º®§6óq}Üâ…öÐV‰ù2Ó–Ë©S¥vuêôér7]¨bÛéiÂ}Þ8¬•ƒøNOßÅR™Å> 1îlää4H‚;q‡Û9Üÿmœ¥2ß‚ÛÅw¸}"pÇl™«j•»J¥ú?öîþ·­ë¾ã¸ÉRH$Z°-‰ UÔ‚Õ`1,†m	 p,°`ÖCÒþ°[×!lF&|HSò‡$¼hI–ôZÒ$6´³²£—ˆ¸¦–§Rˆ°¬ù[.ÿ…}ÎùÞÃs%Šä¥©ø¼J")Qy…¾tuî÷>¸pÿ£»/Ü!w	w+Ã§Ê|ïD¸?ë	wÈàŽ•§îÔSpû„pÇ5n¸cÅY_€ÜÇ˜&P{É]Ú	÷±Æe¹áÇHþ¯ù\al¦nÕÍ$Ü‘}@Â‡îtâ
®{ùýùÃ¿ô€ûMwäwÙ4qÆwl"f0w‘Râz,~üAÊHë…DºÃ}Rò´ÎmŒLw½^I'r¬Øì›&¯ÖV$¹xš®5šU]ë[)‰¨öC§ÀÝ2<ß¿a1pÇ[÷î_ùŠîœfÖíÑþKïUÖ£t¹ÙÑKôµG¿†lÛ¼,6¤$7q>¶‰Ÿšxƒ@ïHÂ‘iTù\>52¦*QÑÂ×c[­ÛßÜÚbÞíiØ«_k5«â'w’;Ð<àÛ½Ã-Dpß¢bËê=o¸Ëó/=kƒ»s¨Ì÷Äw'ÜÿÒîP;+¸£—?ûôßGÆ"úT„T©T
î/¼ÜŸü mUéÎ|àŽN„{œÀŽu5°û4pßÛó;šîŽ ÷¸îì$¸éƒîa.Õ9¶Á=<%Ü/éõÃ¢qJé£LD¯wÃ¦nƒ»Öêµ0ëQë»àN)¸Ïwúað…;’›ß	pßßÙY3OiF÷<Ü5­Qï™Ju´í4¸G:¿X«×Âgƒû–^ëŸ÷Î÷ï//ÜÑ¿}øéKj»J¥Rp_ ÜŸfkeû{G	#¨r™ãIá¾éwÊî2ŽaÉåý)àqÃ >Üù‹Yà¶OwP	¸SwJFªÝ­¤sZTÂî™
î—jzó°82N/}ØªJlk6³b…»ÞÌ´ v¸iYà¾znáŽuà,'Ü©Ü6¸óM[-"N[
¿ÄÏŒ„;ò»Vk$4£Üu,fÑt½¦¯¸á®Uëµ¾Þj6øÅF¯ê÷U¸Ç4më‚;úõ½×Œà{ã“o_P©Tª~;àþÅþ´W ¹9À¿çÝ¬X‰ƒ–€;â³	îîœpßvH˜Ëƒ„äÀîqB²È¶Æ] ÝîÔ²Â]æ†»í M¸K½OwÂ"½Ó-ÞpTÆïæšÇð|¾@9NµF‰£æÉ\æòø(áiá¾R«ö†Ãì¤ò*—´-µHL¦é5-æ_ÅTpç­Îwt‚˜—î<ÜW(Üù2í÷­¿ôZå~wÑ[ã%ï4[Ôwóà”¨Ù%ÀùÁ½Q­GÆ<Ê7kµf¡Ó®ô\{ÜWª…R±ÓæKUÓîTÝ{ÜC¸à†;É}w÷:Þùd¸ãüK?ö‡û³çk©uûWo?òÞmµÇ]¥R-=ÜŸ°L•AîtêT¸Ë±2Ï=ÇàŽ±2/r¸Ë±2÷o
¸ÿâ‹‹7%x»à~ƒr‘ñŽ¡ýëo¾÷Þ¬”	®Ü/ãMz±cY”lü˜	îÒêŽ´“GGÀ‚ž“Ç9:ÌÌ‹xÅ/­ ˜ >Ý†[X+Òñãs¤Ë;çïî\ãö;7ÙÎáN
òyìÈ4níõ,3V?0ñ{Öã¶‡‡¿Ùø<™Èº¹dwÊç3wˆÊ–bÉÝÇí1­Ñ–óÆÙK²õÄ$/>€/à%q—ìŽHWô–KÌn¸Ëýîãl’û´nOêg÷2“±tÒ]…C¶lw·*fB¼)wüº)²o‡®C£wÞãæpv
äÖÄã7bãY[Ã™ƒÙùÜ¶EðOƒÉ®wó×Åãzï¨XLs*Q¬ØÌ¢T·Újé´­ÐÆÒèG˜„…ÏTìv:5Ú¿.ã@HN ÂÛö<ˆ;}±~ºÍQûï³¡2øs'Üî	÷ÅPÀýÝÿúgìp÷€»<qê?Ê¡2Ö0-îèåßz§û[¿ù×*•JuÞáþüLpÍî_ò—•r¹œOÁ•,Ü:î‚ÁîÔäpÇ­¸CÛÓÀÝ²2&*àŽ¦€;.z5ÜÑäp¿!áÎ¢UÇv¸ÿéña*Yú¼]J·ãw<>'Ã]RË‘^íä©Jgøgp×5ÍîÔâáNÍw\Z Ü‘î¶\õa+\ðÊ5‚Ž÷…;[CpGx<àçÝjvÛù´@©R)Ÿm·ú»T¿Ñ$Ç¸O¤†Ú)pßõ„{yÀMwLƒ<pGŸ}Õý¯‚»J¥:Ke‚‡û«ó…ûArÄ&®Ø¨ò»éáŽ&‡û6bŸà>Ã}“Z*¸gòF±SÉ•ºýYà¾R«¹i·„rÕ	÷þ}…ûúù‡{x2¸ÇñÏrúb0p·p„Ü¯úÂ[ÿ%î{1¸ÇQãwwÛùäÈ¤‘9¦h7¢ïîê­î e˜¥K¥r·¶Ü7ÜŸîO,î?ýè-µÄ]¥R=pG^pÝÿØ)w	÷o¸ûž:UÂÝ~¦g\pph›Ü39#ðJwå wÀÚî”<Ï‘ŒÞÉ2‹Ú•	m3/Lnsa¸ó„;-‡á_†Ü)ñÕÊ¬p§»£ú§Â]tÃîfôÄzÂÞ"¸['Üou‹É|»Æ:ˆ™p‡ÈE¾p§“4íEfÃ´‹©©Ý•m®#	÷¾¦Å|á.ùÅÑ… ÜùÂn§ÖEpÇ[>p_ç.µ(¸?8ŒÜgà?ÛÛ4˜‰ÏHE;kkü&¾Ó]Å¯	¹_ìÌåÎçŠbs!¸³ƒFöx±ƒ;[BƒL¸Cíw3•RvdÛ¨Øë¶{™a1)¯ªÔ›ñ¸à
ùÀ]º6=ó	Ã}“¼?xÂcÜÿš–Ê¸áî>ÿ’îXã.Ý.àŽ!îÈ÷‡œÍîößÂíÁö±š©R©Ü%ÜÑ\à~«Û/9–§EÜ­î–S/™»˜ùãÐ9)wjápßwÁ=:Ü%ÀÅqây³^Ë§ËL w“b6¸Ç3ÙTö`˜ÅHæö3ÁícågÇ©™R:aL]ê°ÖÐC(fž°5¶…$ÙÍÖ§„{	w´ÌpGæ¶iÛÆ£Âíï›pßf?)„m9øÈ„ûc4˜HÂ=î	w¾(Ü	÷ãf·BÃÚƒ.‘O%ré‘õš£Ã®ùÄÖÃºŽò	nTk±ÕÕh
I¸om-îÏ/Ü_ÿmð'P½÷ú•J¥zÀáþwn:îöGÆp¿âwÿ°Rs ƒïƒcëT™MwÑip§¹6¸oÈÕín¸ŸžîìõépÇkÜEîh¸³N¸#—ÛÝp'·K’‰êGÉlå —lÃíw9îÒîâÙˆ˜p_©f†åœ1KéJeP¨j¡u‚;è~^àŽüàNíŠwd…;F¤Ðcêw:ÅÜN‹Õ%ÜmÑ¬ÈËè;Ü÷‘edªîkD~¨ýVs˜O$ŒûÔ(™4[­f³ž)dºÃnlü÷µZ;{¨‡ªÃ|þ¨P…ú±]ÃÖGn÷†ûæ‰pÿ‚ûßž[¸ø–x¿úé•J¥:opwÏƒœî$wÜÿï«%ÜyjêñÇ/ôÎwÌ,¨Ý k‘·ÝÝ’p—¶@ÎÃêèÐ9@Yd3»Ô4qÆy£îô)-Y>ÀºÆ}Ån7ïŠ.³¯Çó(U1’ÙÝwûpGÌ¯"y³%¼!K²Ý%2Ì€É¥Úy£\µ¯Ã7'Y;åA’í[lß¤Öêb®ÇŒºJ$÷R»©19î‚»4xD7Ø5áN‘Ú)—Ê©uŸ¼Þ#lf•6.…mdÇº™0’w!»Î»s­¦£;¢W˜ÀCOŸî^GZðu2ÄyYt›Šîïp¹Çã7oÊu2D}1ZfGüÉ{nÜé~^É÷·d¶XÌæ³éd:•(˜u(ê{…bGuS| |¬Ú)èáp­›ÑÙfAwJÀä~‰~xã€»8qê7Éí€û3÷š|©Mƒ”n—KÜ÷ÛÿcÞ>SÇ¦ªTª/Ü¿e…;äÎàþIàþÅ“\éwÈý)t×L÷÷ŽŒ4äp—€v
Ý÷ˆ/Ü)«ÛwÖö×8F¶­]0ŸîûèLp§ÄüÃ|áŽ w‹Ýmp§$Ü/£«f×œI¸“ÙÙËg=î–³Ùò°dd›0Yí$¸G,ßnB«ÝN95—CQ"{Xó‡»¼F’…	îÔáB«²ñ§8Üý›îxÃî”mó¿ˆFåe\CE£8Ÿlæ¦X'³¿¿ÉWÉÐªª=w:8•×ÈTŠéÑÈXž5öˆ†~¸VmŒAµÖˆõ;#¶ô¹îj¸5Le[×Ñœà·s¸Ãíã>†û·–î/¿½€î¿W+eT*ÕòÁùÁÎÀ4Ü!wœIîr?î?Ü/:á~‘Ÿ¡üìp¿•)%ŒÀ;ªEðŸ'Ü#À»ixŠîQj›ußà>¾Ø9Ü¯R8ÿ)®sîQ¿lé¦™'ÜéX‡ÉÇ›GéüÑ°œHe¢›xŒ\p7é.ál‡ûJ«PN'9–oNwy!$ín7Œ
wþ%8á¾{àŽŸ¹šLÇUò
Ë'~Ì*N†¿ÉãnÒÈ§ˆœ¹²»‡‹î^%0–ªT—Ñu­ZÅ,¥äA+´ë¦ùâø¼Qªê­vÒ(M÷ËøÅ«§Ànÿv¸Ü¿ïwqþ%ûJ¸ƒíÁÁý“Ÿ€ûËT*•jÉáî¿ÇýÖS§ž÷ïžîpûôp‡ÜïV’FÐ¥k^p<÷¼Aî´¦øâl¾P†Ë—£}ÌXCQZO.°Í¢ó{Ôw{v¸Sw‹Üm`÷„»\ ï†;EçîØÇp‡ÍÇ¿qí
þî>á½ù=@Yw**Ú¨w;Ùti8H&Úúæ&-ß±Àèb‡»E~‘Zócdæ[²£cJ¸ïÚ#¸÷µþ:“9e¡s‰×2\5ÜýgB’’ù—@Ÿ‘ú#‚;µ<p˜9ÎElþê+½ÈM’®”[/àŽ wüNy™Ö·Ü‘ØÙÎ>mÛûããú²±åšôˆökµX7Ç†¶ÖCõna`0RvTî¶Vp`€îæÆ(Ì¦Þ›€;sûôpÇ4ÈSàŽ§J¸ÿyÀp¿}ï%#ð^ûOµÄ]¥R}yàþC‚;É]ÂÝ=Èýç w	wDp|&¸£;åÑä~ì	wa7ç%ÜQÔŒ«WL)gdåéVŒŒß;êˆà¹Êüáî¸3Ûw;Ü­È|÷¸ËˆÝ7Iàc¸Cî"ºù¤®¹àŠ÷ÕƒR9[<*'GÃ£/*áN‘ú\¿Gé½ÂA>i …Ã=ÆÓ1è}Yà¾ëw|ð’À=bÍº5F6åñôì››¡ãhq¬•áÑñÓ¦Û9Ü±Fæ:‹à¾‰´j³sP9È&Œ¥+×£G4¤…V;lëMb«úpd°íL1Èw†=ûÛ½àN[¦<> +e&€û¿ î>Ke~¸dpÿõ½×ŒàûÙ;jŠ»J¥Rpîÿ;g^¶·15ÜQTdÂ¯ø‰Ø'†;å‚;­÷‡;e~0íšŒÄ&»\çƒÿüà.ÌøÁýæpGìã½á®w³ùbiPJa©ï¦?Üe–ï¨VïäSAÀ,Uè¸¯ôO„{­ªà>Üi>$=ß^pGQŸò¸#scŠn:àN÷]í”³©ÆÈ,aÉA=®fêµþÃ­çúAmµ˜$Õ	c”Ë´öP¸ß^ˆÛßz[ípW©TËw÷3œ
¹ó5îX+CKe¬ppNŽ•Ü½æAÜ¿êw1æ]<=Àu§d^¢”Ñ=–É`<8+âÊtT¤î;Â@Æ8;-]mè*Ü‘×$Ž5ë½îÜAr=‰Oü«†söðJÜ=|rLÜ*p¨9]È]ŠÛÞ+À‘Û%ÅL¸÷º•b¾t„Å.Åº¹RˆàÎ"Õ¹ánª½pM”îbÙzŒ§éZì:Šy‡›a)!wËr•w¸Å{äºO[,¢ºÌ	wsì$HoOLš¤ûÙµöo9á>C«ÖßRpÇ[îÛÛlÖÛè1 Ò=~EiÄŒ¼‚ Ÿ¹Opß‹ ½~XÂÀö¥-QÎd:•n-Ô¨$#•O¥u¶h+ô7‚rË¾íO›ÊAwúŸ€ûÓävwyâT¸ýEÀÝ*ó.*ów8q*¹pçKÜÿžÃn?Ü	ís‡û+ÁíÁ÷ûÛT*•êœÀî¦Ü%Üÿl6¸Ó"÷ Ü|2Ü¹È'„ûêÍÏSFàŠMÍws?ÞžËì.¸#ð¸]ÂÝ?	wJ`ÝîQ‚;Ïf˜•ØipÇw…èÛ€r¯–¡h*=ã÷å±ÕoÀíˆ˜7£^=Æ2o².~ˆ¬ n©\.fË˜Sª_"—‹"Èév	¾V¡S¡íTj…$Üõ>s{¿/ôd‹\7‹ÖýáN­'í¤ãr—6îwíp$Î€4þKÁ$pGs†ûuK®ß…WÌîhÃ³}sZä¶}…f¶îLí•brd,s‰Ü0Ó«×B=†õƒf;™«¯6ólËëµ*ÕmkìY¤Ë–ƒSÞ{Üåw±Ãn÷†;Mƒ´Ãý¯îp;ÁÝ*¸?±@¸?ôÉÇÁ/oããO?{å‚J¥R)¸c—;ƒ;¹ÏîWî–F{¹¹?¸ƒÒSÂšîhb¸_§î>;ÝÑ¾	÷8pÇÓ!áÎ,ï°1¾Ñ=Øá.v´Vé|qP.¦t]p÷D{­QïSÉD€¬ªèîT?Æö¸÷uMÀ½¯i
î3Â9é¾‡"À}“ë^þ88áÞ‚Ú#cÉK­f§ÚcXï¬wS£ŽÆàžorÊ­½á¾‰¬pÿùù‡»œàø©ôÎO~òúCT*•êK÷¿™î?`pu¾pG·
Ùd"1
Zî•ÆöáN¬þ’Ã}ÑÑ‚~ñûpÂ=ÂªUÙ\®X9È’ÃÚdp¯Öåb>àý©©BˆàNÈÝ‚5	w­¦÷g€{8¸‡Î7Ü·¶Î÷ñÆ,~VÜ[å¥W;å½L¡ØË¤q¡­ÒF¶žIáùzyÄ§ÓâGôÁ„û+¿	x‚ûKo¼ýÎ+ß~H±]¥R'¸#¸??¸1O¸£7ï¶ËåRÊ¶\AŸÜÑ¢àÝwÃ=2)ÜÑÞ$p»]p§8ÅiÜåŽ?ÜYòm¹Ã½Ö”÷Á°”4Š­È.:îõn¦PÊ¥£QÀª:ª®ÚáŽøÓÛŠ9ânWpÿöîý§Í+Ïã8&F 8	•Ò3š©RµC¤ÌªÚv«j/Ò^˜i·+µR§ÚQg:]ÜÆ.ÆÆH”€·`-—ñàb‡Ë¨³f2´ÜBLÒ™ù[ÿû9Ï÷9>ÏlŒ‡œ·Ú`ŒÁà@òò“ó|Oéá~Epg‰of÷á™D"­|¶#_(€Ü#ý>¼2><ÌâûÙ`bf=«®o¿Œ,pÇuŽpÿu!pÿ¥îÿ[)p¿þõ®RÚ6z$Úe2Ù)€ûßánÙ:r/îÏXàîl÷ïŠžç]úäöÿÝ.õ@÷ ƒ»[gÏ•V¸_A#Ü…ÜUe›à^|îâ®ìáÞØè>î­­O&¸×#ÜéxyÁjp:7bËx‰ÝÅ]Zºž…‚e²á$aŸ³wÓ>WðüDÿ? µ—Öìø/”™va?£Vw¾'žñà’ÜuÓaˆÏÒBß'÷cŒÔ”îTÃ]È”c\a€;›©zí5~…*÷–ó©­ê‹šÉä\ØKÿ,Wùe³þýþxb89ŒzÇ"ÉP/ýÝ“iönµ¬$¢¥@ˆ¦æáþ‡Ïô§w¾ÿReÀýìZ©ÝÞµ’ª’Éd²'îçÏ¿ÈÊÁ™áÎ¹î8ä¹[w`zûm÷ôp7Îƒäp'¢¸?_ÜÀº½ïUJ™?>©R@†NœÐÁ]“ýý	ÉQº‰2…TÇãLFŽáNCó:ˆí·ãÔ½·Éí|³'ÝÝšZu
àw£ÇÁPtÄ]DM ÓÄKÃíM{ÈòÔëµéË5û!¬“‹ý8-ØÓNq¸× Úï—cLHÖ
e¦#*º=0."êj†×4#ÜŸ˜¢Ã®eÓSçªYyÁ]|LÝj;§¢CÞªû:4º•^B¸ó‰GIµ{´Ÿ*º¯†Ö+¸‚þ5I5;ié»xWá›üî•ÜóMqbkd&Rž¨|~_8ÝŸœe6gÙÁö}%=Çõ^ÌŠ¤—ŒipgOnYb lóŸ¾0Ân7Àý#ý4Èß›¦AÂíØIÀýGŽpgr?¾´pïYUJ×`WWvpk¤J&“É$Üóûw‹„{9äî	¸{T=pGî-‡Á½IÐ^ Üéêzõþ±ª!BûLt$]íÎp¯‰L&ûãÁÒ	ñ33Óõá’p/#Ü=íž—Ëîì<Èa‚{Ípd6¹VžÄÂ›Ý³“±9Ÿ?1õÍÅðüx¬º0¸wüåÔÀ½o{@)YK[‹w¶V¥Ûe2YÅÃ]µ»*wîW¯Âíîz¹î´“€û¿Üß|óý÷õ;0½Ãw`²…;æAž+î”Þí/ÞNû”Òå››ÔïÕInbÐÈ]EkÞ	îœî´X¦ ¸Ó“çˆÝÍÆò‡;g{‹Ã¿äwQ~é]¶~R8AµI„#Îuqrê¡p¸Ü“Áp0
¯û_&"àîfÃ¼áv¤©l:¾öù”R—õ¥§#W»‹jGf¸#Ü)®tvmá®]×V££àNåàîñØÀU;Ä¿¸7+ÜÕGÔñˆ{n ^¿Kp·q;~þ/]|¡g_çà®î<ŒÑ Ñ€WyR[$ýJ8>¦xÙáŸ›d«ŠÚ/ÛÁ~7-GÜÙ4HÀ]ì¿$Æ¸¸¿­Áý}¬”ÜávÀýŸ9ÜiŒ;ƒ;w»î/"ÀýoT¸3µŸ<Üû¾¹©”¬ìÞZ_Ï”ÜtI&“I¸ÛÀó K÷¦¦/¿õWÜQÂäµÂýný]G¸S…Â½ƒàÎ;îÍb©¾;’Îú!¬ïúÙú$—Ü‡'g6‡Ê²lÙ7–ˆµ“Ú‹„»HÂ=o¸×:Áýb®KÜÝ¸/OÐé¨OnëÓûYÅï£Wü›‘j{¸{ƒû§'÷×;ÜGv•’•ÿºÊÚhÏõ*™L&;mp§±2pÇZ™×-[§b­Œ€;/÷sl"»3ÜÅõ¶¸Cîs¥“{t¦C¨Öƒ´5îž£àÎÕ~´À¦5Áýšó»zÜIîõ"w’9>1ã´õí<awB€ w»Ünï@î"Û/“Ã¾Æñî Ïç¦×Ã>%›‰àª'Þ5òƒíØI'ö*eÈ;´9A‹£8²ésAÖí–<Öpí‰Ã½•*îxŸâáŽj)Zùbì(Ô«gêÒçjø¨ííô »\ß9sæÁ]ýöc‹³èth-•iVŸ—²Zp¡±&’ó)OtÙô\H‰Ü>S}™¶GyrYáŽT¸¸«nÏî´qj¥ÁýÆâ’Rªºö¾îÓýyc$5Úw+•Ú^=˜º!í.“É*î4Çrÿ!›*ócóX#Ü!w=Üõ‹ÜÜ_Ü!w=Üÿü„þ2ÄžëœðN?§O¼™nÃâYdÂØN}ùÕ0WŠ‘€ÞÌÃ¶•AšåÜº8Ü‘‡ÛW°ÝÒ¡pöËÈ‘îÝ,ïÝÆp§{Õ §4ëºA÷Èú ËÈÕè%1 ÷1h.ŽesÔé›nD×¡6µSü	Ãd"3ä÷ûüësCp{pZºÂåÎ›LŽ•Cí^¯?”ž¾«Iï[óm«ÙÅÛàŒÄOÑ•–i39®ž¶_6À]ví¨¢vQvjÇ6Ÿ=^†‡ÂµpWúA4ôòûêÇ·}†`cøZ‘öõÙ«ô°Ÿ0¼±³óÌøþ²»Fu;Í¡½¸ßé[¶  j&ºñò„çù^¸»n¿â6ÅÆÑÙ»íÈSÓ"RNÿð…q‰;àþ:àþŸz¸¿m†;Í”kÜ±TÆ´ÄýÇî?$·—î£;JÉš¿¯¿§µÅ½÷V¶ô*ó+«_O]¿±¶v£J&“É*îÈîGpÿ€æA
÷÷…;zù%Mî&”“Ë7 ´#Üð›Ï¿J;œÜŽ÷YL‘cÚú¶5¢šŠžÇ×˜´ÛÁ]0÷º€ØË£áŽCîÜí4óNàÝ	î ¶	îFská¦9‡»¸W¡è¶FŠà.ÞÝnÕ‡;Ò>E‚»ñãÖÕóîüƒˆOÏÍº»ðf}þÀÐ\Ú¯(ÁƒÁ]ÈÝ³<;PÊw(IÌÄÜ,#Êó†;*î”'Üéy¢.#Üi#VÜ/ëj¥ò‡»ÇãwúøŽ	Ã[áNÕšs©wébu²ó0k¹5éË­ês‹½"Iœ©~ªòÎ-ãQp÷hµãWGO»úMa‚ûLƒt†;¦A¾ãwuä4ò1Ãýú7:·cþ‹’_]ƒ]Æq®]]]KKó»»{»7–º{ïÑaõ³}ìÈþÎî fÌ,(Z½w-ÎÏ¯ÞªbÉÃï2™ìtÀý'ÁýCœú2Ü®Â]\w°Ýw\úäËO~óùûOè_É³Šápf¶Y5'¡pGùÂ]S;‡ûÇ†;U0Ü[(=po6Ä”Ývl¸7ÛÁÕ«\Gb%Ãê|ÂÈô3J(šÉ„²Øù}¹šÃ¢ÍI'cÙrP)<>3ÁoòS÷Ö‚áŽNî.÷Nw¸]ÍÆíÍÌí”{2™	(§«ìØl§îí,—ú vºìà^¸l…û÷ÿ:îWKwÝ÷ùÞ®¼µ%ÃM,.ÞÛXYY]\Ý¹¿¶¶vÿ›Õ•Õí©³t¨};Õ7µ¸ ˜XÂ/«=×ß¸žz4"é.“ÉÊÒqàþÈî4’à.ÎNÕÃ/r;0ñEî€;¹úçg_†Ûp×±Ÿ Üé×ç/ÝÞ÷+'P íîwÏLÇê:ˆ¼:
[à®å1Âô¶‡;r†»Ð¾Øg†¥ ¸#Îv-…Á;	¸‹žë ¸S$v$æ¸[>]Ü­Õµ	¸Sõj¹'@4$ãSÏÝŒAóõXƒî(›MŒ•Eeñ™ˆ	w$àn›'÷îW®îíHÀ½2Ã½á²%õ>màŽ7wÊwÜ>¯jàŽKôªåM€{§€»9ávîm-³ã!å´íD®Càî²ƒûsM€û‡¶p‡Ûw¬”apÿ•îÿ àNKÜ9ÜÿÅ w±Äý*‡;¹ýp¸W£[[
¯wq§€é2]oÝíé½u«gôÆ¨6«æÆÔº”ÚØX¹wgA±m`ñ›GÛ+{Rî2™¬Âà~õP¸¿æwr/ îµƒ;^çrw2»ÈîôWÞó*ÅŠþ0cÜ‘ÓäDŠÃ¹ó;:î ;ïZžpG¸£~¿Ž/b‡¥ÍpGêÇSÑnìp¸_p„;p×îÚ÷Üãè™Ø$’ÝQüÞ…g<f¸ãŒÔýhéÙîc åæ¤åw*î”&g7:
îˆÛw‘îÈ÷V‘Ü…ÜÜ©âánÊe©–‡[‹+9ÜIîôlÖ´¯
÷X2‘XWN]ÁéÚÃàŽÔŸ\WS£‡{ó+´ÄÝîïéáþÖ[ã¸ÿÄî¯=N¸.*ZK+Kz™ÚÎe»²â–ó;©¾*»Þ`vO­0ä/)N°»š$gFÊd²
ƒûÕÒÃýãrÀ}8	ÃmÆ.4Ù:¸·
wp£"áŽNîèXpãdÆGy|š]ò÷/7á><37äWJ^`lnf:‰Ãíî÷j¾Æýp¸GfÆC~¿rê
$j„{ýÁã>}p?«Ûyi÷€-êÝÚ³áúàüÊ€ùˆûÀû`»]£_¯¬Þ¿¿¢ä×Í‘¾*™L&{ÊàþYyà~{Ý«7ƒN/Ü/ÜucMw@Û¡v&Î.ÅŒpŸØz•’‡ýå'ºY%€»GÂ½¸»[ØwÛ!pÍ•SYz²"àþ£2ÃÝ:Á}wcKïö…­+Ü»VïOqÞwô.áHúƒí)‡}Ö6nbŽû|—’gƒ{ßÜ’[5Éd²
„;“;jXã.ÎNÕàn+#à.ÎN%¹ÜIî+ó¬î/	¸Évê’€»¥KèÜCJÑ…»bˆîm¹“6y¢ñ¤vd”±êöf]F}£:Ýí³÷zÄ¥.îP‹îÈ¸Q×–£áÞ¬ËîæÏ¤‘GçÈ"6Nf6UX¾ôlwˆ½ì÷T#‚ûÄÌÌtû¨–¼ÐÐxrØhn½uÄ5«Ü}Db7&ŠYÔx’ªxêgä=Á]$¤ÝêèvŠœÌán::î‡ûeÛèmÖ±óÕ†l®¢¯LdÕîì‡[ÿ³t?³ÝÝé¬r*$ÕßÄN—Ü]|+ö}¤mv Uß†ý—ôÓ ®ºýßùP™÷èÜÔŸêÇ¸«pÿ7wœ›Ê§A
¸ëÜ^¸ßÚÊŠ¹©]½¡{ww—s+)°úQ/­j_\ÜØ^ÜÛ[LÙ™½'u0rowA)°Þ+©³U2™Löxáþê«ç™Ýáv’»î†Aîˆ˜g§ÒLï îöce ÷ÿ!¸?¸Cê"zÕñŒTK¤sQìº7|™ö)Å6vûwÍžmˆO[AÂ³$<½ópï¶åØp†{îÖ|zF¾pï Žw¬AO®ñ¯W|i„;²Âÿ«Bp§Ç‘®ÉþhÈKÇÛ'¦£ìe<Ò‰G&'‡—'º×Ãá`@)q^ÿP¦{6æFŽp§,pw™pqp§i7w!=‡=­"r3Ù(XLWôä—3ÜN×¹wN±ª7'è«—-ß`®Úš«“Åá¹ÛAÂ5É8FÀ²Êé=à>¼ìBf¸»\µî.•îú}ÓU¸ükævÓ4H+ÜßbpS¿ÿRp'·CîLíç_}µpŸºÓ¥híôÝPD]ciå–ªý=\\Ø˜íÁÙ¨©TÝ–N;wÌïõ*Çiaï@Ê]&“=Upÿë³/•îç~Wü&=ÑÏ_dwôDÁw\r‚;ewz¸†79Ë×áö,{‹$2™¹¹t:¾¹^‘pGÓ“ø|Jwô4À=§ï’ÀýJM‹ÜcszŠŸ¬Ž¸P«îß?î×Ž†û;Ø8õW•÷[w­­Ô:·wu)víÐÂõ-¶ffªÊ±¾‘Õ¥ˆæïáÙÀu©w™LötÀýÓ²Àýö[ŸRdáß=,3Üë+îõ…ÃýÂ1àI†*83«ºÝO¤C>¯ÏçÅÿ¥G™/MÄ"lŒ„û“÷Ùq¯R¦Øflåo?6±™\ÎîÜë.w¸ý1ÂýÜ.H~_L‚ì]Ý³Ê}°wkíÚ*ic w5UåPêþÚâü’RT»Û;X9/“Éd•w’»îï:Âý§ùÀJ·À¯Ÿ,Ü?™óÄ½‰[l?
îÈîDq'¸Úî"nkÑ1à.äÞ˜ÜµË¸ëoî÷X&JòÊ%g÷³ª¤‡°r¦\ù£›ÉYR{¾pw?¸Ó5•wdwµ¢à^«ÁKû¯xì—Ê|Ùö–‹íÁh [n¹Âc3ž$N½Xnp5Ÿ0êfA"w”ƒ{Ó_>;î´ÿ’-ÜßµÂ¹½œpïÛYP´n@ñ¹a§gqÐ¸SÞÒÞÊâÁÜÎ:;uppÃá¯ÃÔ½­›7—”¢Ã&¬w¤Üe2Y©áNáŽî–±2;à¹ÿâº±2?ƒÜß…Üi¬äNceþ[Œ•ùHŒ•¡³Sÿ)wv*Áýåg1ýÊÜþ½ï$Ÿ?Ü;WôDHßW1~ºfà.À‰ÝqÁÍâÝä°JXC51j¶ÉDaêÂj¿;¾gâ¯mhÏ}m:W³»ã‰Ë·Mr‚;Ro\§fÞÑ•¿_=.:­q¯‰Íù½YÍí	¾S}yXïŸ¥ýQ‚{á‘®­p÷PÂc"ÜUÖ#÷ÖVgG³-°/Ïsx¸…ÅØ—QpWŠìÐ®ÝÊöè<XŠ`R•¬êŽa†‘‰îxÐ¯”'ÿz"§“ÙrO‚œˆ5ÌÄ‘eÌV2~;ñÇÌEßG<îx¼:^ùû/ipÿ9à·;•Û¸ó¡2€;þˆ‡Ûf*ƒ¿Èí¦¡2÷¿EîÂìÇ‡»8Ä¾°]u]§øG=©^ýšóÕíìªtt}{]ÊI5p¿J&“É'ÜQá~®ÔpÇö©>¥¨üýupo¬|¸£:bò‰À½¾ ¸ã5{¸#{¸G"³ã¾œQ2›8)¡¬yÃãÝì`»„{EÃÝå±…{"ê÷)å)”INÆö³J™ón×~g¸?Ý=ìŠ,W*Ü_,ÜÅ@™ÞÅÔÈÎMÛw¶VçÅ´™íÔèh^ãÕ§­î*'žOÈdÿÏÞýÿ´qçy7”°‰7-`åzºFñ®š^+µì)Zõ´«U´'íõNÛNÍíî]+íÝÞ^uš-ö‚mBD™0Ì$­M–Å[ÀtB´·Gi„ð%YÐµËÌ¿p¯™ÇŸù
cì±IöóT ¶)ƒ´<:ùÌûÃb5î_¯îÿXI'¹Ke´µ2?s®•yƒNr·Â0?Ùwrßw:ÒÞÍ/ë>ãN)ê	wÜ'7Ìpïq;"«I9ÝŽtæ[àî~ØùÒ¥ê]p§ ö€;^ð~¸ã¥f¸Sî{ÀÏ–÷2Uy©©LZm¦‰bÉù’ÄãùÕwÜ¨î4÷ÁïîpS¸›Ö´à~Ëà%ù‡;u¹Yív¸SÉ{ÀukeËqUiJ±ýr^ˆFGbJ³Ûñ9h‹%)›•£r‡>õN¸»}']èþÒw¸]‡û€ûÌpÿow¸Ý4ÆLq7VÊí—j€;ªî«wÆÒî#mQºJîŒí>ÞZ»±¨¨Äí|¡ýÌÐäá½Ñ±¥©³›ã×¯÷÷‡X,ë©†ûÇ†;~yÀ}¤N¸«{Ÿ7îTÐú¯Á5î_î¹r2ÆQz©±XÝŽÙå¼(à92¸?ypÏ”Ëåd“=¸•äö¨¸7¨4·8§Ìíá.$òR!›#5Âý"Æ¸?¹p_½7PßÞOwO[™»>~¯²êVÏløsóÐÖJ£[¼sÿðñýÕë!‹Åz*àþ¦î;¶NÅ wÜÑwÎû†ûRîÈî)¥¾f>'W[Ú®Ní4çØJ•üèt…;Ý9Õ–î}š‰ïýÂYï×wdz†Öér·À½Ï…;¼ÍüáQŸ îÅU¥EÅ3å¬À?×ƒN wÔl¸‡‘+Ü#5ÁÝYmp§÷Hpïu‡;‚Ü/à›±¯°—Ž#UiJ©JóÓé˜ÒÄ¸äÆB¾ÌmäÚ»Âb>QhãÅ…;†ËD¢®pï0ÕóYîšÛk„ûZ÷É]CÙ£›Ãs»Õ‹Pož	Ýº£b¬ËöÒ­Õ·wúpû™þëã[‹J,..ïÞerg±XÃ®rwÂÑ±2DîÜ!wÜ5¹ÿJ+óît‘ûÈ"w'Ü¿:OÄî
wš7Ü_|ño wög‘;Ü_üßz_ìÿþb÷%Û>Á{¥#àn«ÍÅ/£#ù³Wù¬s¿ˆLpÇ+ÈÿTD^¹n€D×¸£çùÈnp?G³Ã·º¶Ç»\q>WZ—,xúEÃ¯ã‹X«Yí$`Ë¬ÜÝÖ¸Sç[ºlcs£àî2U†R½ªv'Ü#Ü]Ç¸Ê¿òý5Dž„î{ç…s}‰$§4¯dã\²ô¯†ÔøB)®œº^„Þ\1+w9Iîj$žÂýrõsmümL8J¿‹z÷?~ŒSíCeÞ°•!n'Ceàv•ù'
÷¥pÇwÝíÜÿ¹ÀÝP{]p×mNR×ÆCGÒìƒG÷ïöo->˜\Ò–¿ø8Ù}}rimsÛƒKÝ™d3ÝY,V«áþjppÿHƒ;ªîzú#îý.©ÖùóósÀ½[ËÜi=N¸£
Ü‘ç™srFw…ûËÇÀ];|wpÎ
wd}JÈîÈw+ÚÝ/ÎÇUUiI±xr/Ï÷Ð|ËÛI÷cÎ—{Á½½¸›ŠØówäî sëàŽœpï
·w
…‚˜/O7ï/j¸é’(EÚÂüBÌ@{j]Êñâ†ð·ï`¢…å°6ï±-"k§âóÒÙ£Áä€»1ÅÝ÷÷ƒƒû«AÂ}ªº×ÒòíÃñÇÛäö½ƒááG[«¡»w6¡öòqÄÉ¥íå¬m²]¶Z†Åbµî¯6îÿa†û³õÁù‚û'jSenvWà.[àN;Ü¯^õ÷«V¸ãýP·[ôð–õÕw>RŸ‘ÜIvµÓy2}nr×9¥5©©½bcdw¹3‡%È9Qê<µpïE„;j Ü/#/¸ãÃC®¼˜XDM¼"6/EÂ²˜-mÄ+¬ç%„Haa=è~¾©ÒÙ³dþ~à~Væ#¸•D¡Çîm-€û«ÁÁ½ÿÑlÄÛ6wwoTÜ¾6Ò?ÚœÍMùúÑ75775·²¬Ÿºs·ÿ;ëÎb±N)Ü?¨îï5î¿×÷âŸ)Üé>LO<Ü;ýÂ½;¸ój«Üž.òðM£á.å{éäúÌf2¸ãŸïm$ÜÃ¼ ç&@ö&¦rñ!FÒ•Õô\,]"áö^üùd<¥DZ	®XYÖá.¤6}­,m|>!õôxÀ=Å÷îXâþDÂ½ÿáŽq"ûî½.õöÃà~wu8ä¯áÉ;;+»‹J3RoN®_gvg±X§î¿®îÆZ™ï¾«-rÿ
Ò¶Áù…;¹<ÕÜŸ­s­L*ñŒ÷ê<w
÷çHÔî&µ{Ã´v§»i‘»¦óK—ð›îÈÜ©ÜýÁýœvm)à»yU+ÜwEU¹ã67-“Ñß‘þ/NßwN yZ¶f pÇ[|Â=·ŠiGÇKª¬Ëx«Ç©Ã)Ü+Õ÷°[·k>6]Ì°õQpoGD×ëQíRÖ
ÜÁËˆ¶ÍiDŽTwN¥—¡wÌ¤7Â“@úk 9'æ²óû)•S‚O­îü¥Æ7BT.lT>.—Â" YÀ‹$D"ÁN‡L¹­«M,gõ³î²”“…R^Ûsà¥ËzíæÚÈ®ª¦…{¸÷)àþÞ»€;Ü~"¸ÿÚ
÷_6îg&wÒöÝÐÜ¶RiliHCý°¿!2×‡Çïo/+Mlt{wó`•†d±XÁÁýëîØªúû°;Ün½8õu
w²“îd¬äŽ˜þ@v`:z$ûÿwÂyÁQéû‡;ú~ðÖÑþŸ.R®z•^Û	ª’|Á9ánä~Éw{ÞlGúa½N¹“çëî»SþÈ	÷sô>ƒø´*Ü¥D1‘XHµÊí™¬d+Úk‡»éA¹°ÇéÓ,U²¸
rÏ–‹Ò)„;­×;]„Se¢x~î•:xžÀÏå33‰|I¯À»À=ì
wâÿËHæ
%”/îM''Ò\³Î±sªblâ›ð\¤D²ò¦Áõ¼ ‡Q»Ìã“)ËxÂ¹é`wô-ñím<ÖÈð“îx-rp‡Û»±ÿ*óïÖ¡2ØéWt$…;ÜnÛéï_·®q‡Ü¡öïã‡ˆávTÜçVÒâæphr–ÜÜ¾}û±OßÝZ¹¡4»ÅÙÝÃ[Ã!‹Åzºàþ.àþ¥Ü_i0Üëœä>ÿáUÜ‘îtÔùS	wz„úáÎÆâ-ÉÅ8…£no Üå|FUq®65ŸÍg”õ¿¸ó^Ê—Ë	‰ÅL*®ªƒ©Ô ÖD9©îR±L)gŽ§Ÿs.ShoÏÍÏOÇÉ[RëY¡:¿d‰Ç–÷8%¨b©8W–Ãax]–yY[0„Ï¶ðiMpïÃ÷'îÕÁ;“¡Ê÷Ù·nLú†ûÜÒí1¥%Þ{p+Äb±XÍ»}­ÌëÆZ™ïÑµ2Ü!wÀÝm­…ûAî?4ÁrÇ"÷/éw=m‰ûw^yíµ×t¾£oh=ëxƒéîÏÚsÀ=U÷¾øÐ$Ø
™Ý¦¤ÓQçZäw’>ÈÝ†kdÀýÒ×e¶¡vË¬˜‹ÎÌ\§kç­o4Ò.oëhuâv„9ëvO¥/²>„.p‡–O)­ip}~?½_¨™²Ý_ïÄŒc}ZáF<–®‡i®pØ« —Þî5åcm;
ë9´»P¾êAçáðÁ:´ôU-úí\®4’-Ï¤cÜÄšˆ)–¸‰¼|™¦Ý± Ý`;ŠòâBŒ‹URš‹s¦OÏc=yaS«lç­Ÿ!§?PJ)Ÿ/$FÄ³¼ÜÅó‘®¶J²Ü"QÔkþêj¯-ßl•1§Üáv÷ŠÛh_)£Áý­·þÍ¼RÆØ	pÿàÓJü +eÜéJ™ÆÂ}|“œc_]»ÕON¸Ïã,úO¸÷“=W[ÕØÕ‹ÅbµîÈ|ÊÝÜ!w,r'p‹Ü­pÇå©t$…;ªîèyäwºÆ=Ã)'/ø³é46u¬KÆ)çîÇÃû’¦vW¸SwÛ!I^p'®¶ÈÝ¼‹’ëÇ#ïO¢0·)½‡DÞI²¸}BiMñIÎåÅ*nzw9Wœ–|Á=Bó÷Ëèx¸Ó;Q’Ÿ-S	Ü/#7¸Wö¢’DA* Òþt*vä®D…Ë–¼á.P1Ùl®Ó52œªVœÎíg¥¨˜-;@Äö³üíÖ"²çB2¸k1´Y2m€;ªÂÝôc…{åÂ DáŽ´¡2p»îXâþ&àþãàþ/Æ	÷_·¸ÃíÀýÌÜVemÌîÚ¥û„àkS!ß¤>|ø{7µ´{“!‹Å:p‡Üë†;r…û7kƒ;ò÷D];0M|rM¿.ô÷ÐÜ†¾1sæBãà~•ä
wÚ	àÞ(Ü;!7¸çZåvnC²¹qpçGb®pçEInÜñ*8¸KÚ²óù™T*•Ž+Ç•Êúƒû§âBGlÛÕ˜yÈäF.Í§³ï™…Ü/ îneÓA=¥øF^Ö‡É˜ááåšà~î³ÿùø½ï>ipŸ[Y$çÛwÏ­(Ë:ÁGû}²}èñÎìì¥Õí…X,ëé‚ûkç­pÿ&zå5Ü0Ãýü1p?~©Ì'Ó\]p¿µ_Ã‹ÜYðâwbcºG’¸¿¬Ü©Ûp¿ê÷¾ZàÞéw¡Ì)­ˆ¬m
îÒ¼›7ã{å}m`| p¿|,Ü‘	îáFÂ½0“Ò.P_¥ó½.pw<!ÿ’¶Êí\l0Fž 7È¥²QA0@>8S’ÂžnïÍÍÄ” šÉÕ2à–yÌØ‘{k„ûGÀ=Ø¥2S[cŠÞèÒÐð.!üìÎÖ­3¾–ÈŒ.Í*§¢Ù%¶ÐÅbwômÜ¿e‰lW§þTäþæyäêÔŸ™¯NuÂ]—;~Žèó wšwbv'Ü‘«Î‡ûïëš*3mÀ)„Íâ¦²5¡A´N¸¿¬g;™ÝmÏ<ðÝÌhÊö£ànÍ²¨çÒÉÝgŽæ\Öï„;ŠÝw1­´¦xÙdZýp/dÜO™Æ Àu±p§ù„»­()r|Æ2wW¸ƒ†RiB©¥Øžày²>*îÇ”V´Ç ÷
ÛÓ{Åä„˜_Ø#÷cÉ¢Ð¥åwYËñ€ž•/K&¸#)'·á+„o'Üqý‚îÚKŸ÷_¸Â×¦Âí€;Üþ¹6Õ2ÿ‰‡ÛŠ%î.pÛ+Ó ¿e‚û·ÿÕ÷ÞËêâaèÖ¶NàµG«~ÊŒO®>^›SNI£÷Ùp‹UG~àŽ ÷
Ü;än†»u‘;äþÏ{e¬än‚ûot¸Cîö±28ç®Íƒüëó†±t;Ü)Ý‘‹Ü½ØŽìã ÷ë€{lá·uíÚµçµíO {Ñb2tÞ?W¡«1ê²Ý`÷Ëf¸#7¸;NïzN“q;nÐwqìfGv¹»ÀÑKqu9ì^H)­‰Ëä"–…v$'¸#Öx{Ã=â¿°±Â™Ve»Ç4™ªÙi¢#½#r(šflq¯Æ¯ ·.àÝhd<}bú„_àZ¥v}‘gÚ&YÈ¦ãûiNUõkŒò‘.R»[B6áQ—úÎVÂÇw‹ 
)+õ£„ÂÕ/L_6ú×Iø×¦êpçºý½6pÿ=áŽ¡2ÿE†Êî? 'ÜMp·_›Já·ûƒ{è˜&ï)hìÆìòÀƒÐÐ®v{Ë×©ëñƒµíÝcÊéig’íÅÄb±š	w,Ü¿ªî¯œîÖ³u*7róÊóF×ˆÜz¾ªEq¬y¶êöêÞDf?SÜq›¼Ñ]ÒÝ4'ÜuÎ;åþêCAÁÝdcîÚK.1WZRZ
îr¡¼žI©^n•‡;oÜÅ}®V€–ñn¼–Ü‘°kÛµ¹¤1¼ÓÉ…©±|Çºb”ÜËó]ÕÜÏ¸K#q¥¡ÅÒéAUgDAä¸·…ñÅJbXÎEw¸GÜáÞýäÁ}reY_sçÞ¢²=7~_¦Ù?l´2º¬œ®–—ÆC,‹õdÀýmìzÜß©Âýyäî¯œ î86†F~2¡*'náCmT¼‰îdÉÌÅŠn)Ý‘î/½¯ºÂ°Á]_[îîä!rÇÜñ´÷>t"¸#óY÷Ü§´¢¤ÜùB>ŸŸç<à¾‡Õ¸W5¸Œê†{vC=ÁÅ¹üÈ‚VI”\à®Ù=’Í@ÐÍoF†Ø9 ]¥7Ò0âÞBL!¥ö³B{×Ñpç|ƒçAªIl95)ˆòÙj]˜„/ç‹¹°\(GÁÌÙ§p?÷™?¸¿íîp{àp_]UÐèÊÁ&n,mÞÝ]›¼~œÚn®Œ(§®]6’Åb=5p÷ýš÷›_ÄO¾ßÝ|ÑîÈî}î/UáNYLÜþ—w*w@§©>0¸ó8t6é5Ì¦Tž¸‹ÓJíqûéxL+µ±_ìt…{X.&9¥éq‹£*H‡ûô|7ã\…í™’ÔÞ~ÜQ.6x
dî¬È
ù’h‚;¾R±$‡eï­î?YpZZÔ0ÌÞ~8¿/>Ø|49tô;]?XÁºå6ûˆ­•a±XîµÃýÊ'É»=qóŠî$º+“¸ãñúáNjÜÏ¡¦Â¿¸ƒ¸-(^Œ w_ÚðØÒ'•œÉ>pÏ­«JŽHN¸#çò›™ãðë# ¹xœS¹AÓ<úôF)÷ˆÜžO+-UjËÚd± œEm•S{#b±Ë¼\Ü1òýcáþöIáþjãá~­,//ïÞMn¾ãsSSÃG¿ÏÔá¬ªœÎÆÖØZ‹Õ¸#ÀÝ1Væ{TîúX™Ÿÿp§ce ÷Ÿ@îd¤1Væ?ó !wÐ]Û	ce¼à®¿¦„÷†»írÿU¸_Ñ«c­Ìú‡8Šî$øÝ¦[šÆbîîúw:æ„)5×®á¶;Ü©ÃéíôÆoîp§tw»œµ:öÕ wäîzî6ú¹‹ÿÏÞÝ8·mßw5ùBÇæ"ÇblçâÌÎ:ûì.sî²,·lK®ëv]ºôÖ^š-wëuÙµkwS1,—¼“c“MQ€ÓdÓ¦íˆ:ÈNÓHv#Ñ¶"‘ñSÓ¿øö~  	H2–ïKeŠ²)%/¡_|ñµÀ½ÁÅ[
í4eÞ…¼âxCn±ï·r˜ÙGîëƒ;­¹‡¹Þ8e{gp‚X|Èä9Üm€²ù¬®÷I_Æûa°¥%“	<“ªO1¸›^ö¶$#ƒî`³?Üñ@ý+G².ˆBT"¦Û…ÅÓÞ•ÀsÆ7NŒÀ<4^p?µ“ÌsSwëº©žÛ ávÀÝÚù	¶AÂít©àþÞ{Ž¥2îmKe°2 ¸½>û±öá¥±Kc¸ÚÒõ%íØÕ3çN­jöë¸ÔÖ?>²ÞË„……="p7äþ¾¹ò›pÿ™÷wé!wkä;M¸ÿ­î¿ß7áŽííÜ]u÷ƒÈî—»½vªþðyÛ{vï6Ù\ÇÝÓãí&u]îC€;Ž¹“ãí…)Ü‘ó$×çŸ÷‚;¸ï »_®W@Nq» N3áî¼£î¾l§û$QÜ·XYFm£¯	wnNë{	,eì%ÜéRHÝûMÖzCÐp°p÷•Üð€;µÕHK«-„lyKµ¤@uÁ†;1wËïfD¨Íg’ý9ÖŽ%2z*—eŒ+¥¸WÒŒsÿ¾Œ‘¸“¸ã‘xd+E[ƒ…;ÊÉ¬*(äÌT¡"Çw<(ñË±¸7¿h.¸“­=öÏ‘¸=”f-•iÂý'î?0áþÙI'eÜÉwºò}Ãí?„ÛÉ÷NàŽº…;Î/=vìÒääØ¥«8Ku3îGO¬ßSW—ÎŸÇ)©p³á.÷°°°`àŽ(Ü‘îÈµÈý;­pÿ¾îîY²ÈýÚáþ÷Ÿ4áŽ³S¿êîÈùÜêp'Q¸cÔe¡Û…Lù‚õ¶ØíFtÃ¡;Ý¶ŽÛ¶Ü·ÀíÈ8àŽ»ýá¾FGÖÌ{5$ò€{çÑ×	îâ¼Ö×ôl#ßµÛQ¼ÓÄb£žÒ<JNqžp·º„»ûnÒ¥z²ÓÜfïîqê	Üí˜U*E½‹dr™$ðžÜ5p7Çð›ï9™+U…ýû¼ànÜŒ«‘h³Ç©±h:¥[²ðUÑ„»RS¢ˆeãœX‘Yî1Ü_àöûÁ}ˆÀn÷ƒ»ßR/¸ÿ¥îß¡p'nÜ¡vô
úc'Ü;ßâ~üöÊäØ1}lyvY[95püËégÏøÎµã%]»¤=ê-Ÿ{\àþ+o¸ã	yÜ/Ì%µ®ÊÝ8KáN3á¾#×ÈºÞ—Ÿ7Ž¹?Eán“Ýî8LþˆÁ}Wïà¾G©çZÿÊ¤%6Þ¸³Š¤LxR¬¼ùá.t`¹ÌyÃ©å~À=UÈd1ÛÎ¤Ý<+Õž1KkŠñ…;¾ÄQZDUáø
ü%¢J^‰DQ¥&˜pWã¬\«îp{$Ò9ÜÍsS7Ü¿\ÃáóÑ«×¿\úðó'N|ôùÍ~ÇÚoOß%‹#ñFï„………õîß¦p7åþ×¨îoR¸cVÆîo9á·[pßÛww/ ÷î¯Z¸øjî»(ÜQ;Üí?ýü“¸ÈÑS6Üét;rÃµº}XBg‡‡ï!<ÙÕÔ²ÙÚp7ßÜÆà~to©{¸Û·
3AÎ÷ñJ™)ŽÖ€;qN—p§Vk	¿Q´a¸#ŠöŽà×9®YÚ)Ü÷!7ÜÕZ2•V÷ùÀUS½V;>€T.—cŒév]k­ ,>}¸Gi”îQ5ø+§2é(Ÿ–¢ˆ«¥ãæwNª‘cYµîxÈVƒûÉv¸¿å÷wßýMî¯w÷o÷™k£c£€ûäý£g®jË3¸ë¸ß:™ëÓcN.Áí|ÇÂY™°°°@áNrÀcŠÏtÿ+dÐÝ€;]+C‡Üˆ½2ïAîÖÙ©o6ÏNýÄyvêÆÙ©ï@îoÑ³Sm¸Cî_´äŽ ÷UáŽmp§yÁÞ™ÎéÝnÁ'oË’qªAß¤ÃxÙaBña„E.Zrp»çI“Ö­p'ÇÞ›r'â¾‡¤…+•òÃz©¾X+OM•kµ|Z‘¤{÷ÈGä	wzËÎYÿ¨^ÿøÂDÅîÈ]I{8¾Ìhý‰É³‚{¼s¸#±”ÕÚJUÈ›1ÿRQµw÷j‡{Œ!tG
÷ºÂ¶
ÜGˆ	³+™Z/[óã^çÒJÅÞ²=É$L6›Ë&íƒìXáîØ*[ûÈŠ¸Ý·˜ Ä¢‘hðëpôŒª"ær¢|YŽ¢ÈVAáyIT5n=âÍG¦ùÍÓ|DíŸ3ãÏß“2öŒ;q;û;€ûÙKeL¸ÿ‡unªk©Ìû87õ‡€;qw,•1áNØŽL¸›îääTÛìëû3Ÿ/ŽNŽéÚ­Sg®â°»ß	¬'NÍ<X>¦m–>¾6st ,,,lóÃÝrïÜodµ>ÀÝ:ˆ>lþ¸cZmëîø÷.WòùÅúÜÙ{Í¤ã)ÃäŠsõr%-+çwRpp?²ëÈïž~ÿôîˆŸÓú’Þàã}„»Ê{\”©‹’º™á¯æ´€Ê)þpæ²êÝt{6Å sH†”`ÍU25þ©¡uÀ“ÅHŒUƒ¿,A¶*õ4d"r'pçD™çD%_Ü·î¿ìîoöîG¯_]ž›\š<véÎGgnŸöœnÇàûí;ÓË£º¶yÂjœ°°°°ÀánØýOÌ¸#
w×&÷ŸÒµ2ÿ¹»7¹îÿf¹Ó}îMî?¡r?ùë?ì þ=ðÚÜÍ‘„¡l•AÎžÍg»_ã~ÐŒrî†tžœ²j’ý#ÃÉd¸ÅXàBäî¶;n;à¾kAN/6r©T
{.¼Ð‘ÍeŠ¥Z~—Œ1–ŽæÝéVIR›êin “#îÎ¬·½6ÜÛ¹KÍîŒÍ3Z?Ê¦Uo npÀÝ‰m×à¹œñzô¦ÓVàðªp÷v´î(æj·j¾t¾]ïùvÔ¼§ƒ÷X5§ÈÒÁöÈo¬Rgz¤vnÏäpÈÝ¸Pªã^ëO|\*nòí»Ÿî„¢m±’"EYA¨¤‚>•ºÆF£J©¯G*yŽêÄ•|…ç¹¸·oÊväù“fÜÚöÛOOþ‚Àn§p'“2€»ûòKø×7”±—AR¸cR¦ýòK¶ÛŸÁ¤Œ™¡ö.à~úê2ÖÃŒ®LÏ~ŽÌ·{aÇÚïL^Â¥–6WK§O„;!ÃÂÂ¾F¸CîÞpCî­pÿ€ÈÝî¿4ÏN%sãmp7ž¡V÷…»!ôçPîæöHwÏ.vû_×Ô¢µÇ\…‰Ó'»!÷«“ŒO‚žŒ¯ãÀ—®LþÉç]cîæß «àq¬ýa“·Úê%™l*•)å+Uƒï-mCAÂýîÛµ¸¯^›N¿óºÖûô¢ëÜÍj§vJ	Ïöží5á>ÔÌî¨C¸ïkm„~Ö÷>o¸#Ü•‚\™ª:¸•D—¤GHØ˜Ïj=(Á0LÖn×M¥Ûf×“ñy/zjÈlß¡CûG(Ü¡v/¸Ç8ž0ãÎ×þx“uãË 6ªx'RßQ$¢²
¯ˆXänÀ÷xÀº„[Øinq÷†;ÜNáþ.;FÜ_÷†;ÜÞK¸¿}kiòcíüÓñÙ"sêôõ›Ó·Æ´M—~iöÎÍ/N¯¡öˆÂý
÷­÷0/ê-Ü·_,t‰Äìûˆ»cpßmE¦|@zÀOw»a¢aLÌÚàNt´óŸÉåb¤è,ìžfró5Y‚Ý{wRp§yÂ†Ã¸	Ô[¾3yn¸ïaÙÀáÎzž­¨Oq}„»%÷v·wwòV®"Eüà¤VÁëÀÝŽƒíÆàY*á |Â‚»ž âÊ¡CÂÝX%²Š¿ó•ŒhÙ</DÕJAÁ¤ŒX—‰Û#œ ª
¯ÆP+ÜãÍ¬Ÿ.
÷m¿îÿÛk¸Ÿ8uÿÚÊÒ¨®û_gôøýéó“—´MÚ‡—ÎOß9Îº‡……}]£2Ã}xìm‡;Ü¾n¸¿à	÷ƒ]n•I4>Ûî÷7l¸÷ð€;á°©öm~p¿· çK…ìºùš,”ÊUEQøážqwOËlî@yJKOÔkåz‘é%Ý3bÌî[XŽ«–óÒÊ±AÂs%ž\-¸öî1³ÀYp¾©|Ž´ÁÝ&),,O%‚e{2‡	ã–czÉF|²0×(ó[œpß¿
Ü#‰"IÜY¹:§k¦g*>ÊÖŠŠ*Šµ²`o¯8A–%/¸ùÂýHPpïñ¨Ì‰Ó·¯ÝZ^ÕÎñ¶çüûÑ£3WGµMÞØÊÕ/Â‰™°°°þÂýïz÷aÀ}·îÏŽcýpß‹ç¼àÞýwfqü…NàŽ—[p§t' ö‡ûÞ³—/Öc¨]×º(™™˜˜˜ËË¢Ô³#î½…;Ç'(ùÎÁMh=I/	Þpç¹VŸË%˜)¥ZO³AÂ]ö„{²¢nR¸%]¸ïw$L}¸=—Õé#Q,èZ‚IZ#åS
·‡ãötw•Œ¯(i>åÒr°Cîz®Ê	1¶ZT¥ž­©Ö2JVâX±¢¬÷¡V¸º)àŽì+KË·Î~~Ü‹í3woß\Ö‡–„rëÜ_z‰ÀÈÝ‚û7	Ü³2X+¹“µ2»	w÷Ù©;=;p§rÜ³Sw¿aÈðÝœÃîããã—§–/^×]Q¸ƒãîS	ÜÍàèÖÆ§˜ÀýDáN˜¾ÛŒž°úÜs;áM»¿[QuÀîpc!=5ŸI%6ª’l¦X¯*Ò°Éé'›ÌvÎ¸´ýet˜ÒÝõò#”õ^|GÛ?Üý7´ìlÍ¼Wk¥Lðp§» Ûá¬S
˜BXb9^b×±O†)¸ò>âNkH–ñ»€;ˆ®}ï{ß³á>H)·¶ÁYg¡vw#JvWÖ¤ö¦^©ñæé‡Ž/hîl>ÛS™B6™pÜ1¿M‚Üur|{®ŠoCãJiC6Üñ‰›pÇ§O·ÊXV¦ÅX9Ïr²\	ôË£gdIdc’¤F„r¡šÅ‹ ïÔ÷øÍîX*c°Ýéö·\ç¦þ¨yn*àn¹ý»p;Y*CÝ¸ÿ´m©ûK/mîoÏÜ¹5:ºríÚÍsí¨?zîöŠöØ´t} ,,,,@¸¿òŠ/Ü!wŒÊ|“ìƒô…»ûìÔ§p§—`r.„Ä>ÈßoßkŽzG¬·¿öÚ‹g¯,.–çSXƒ˜i”/¿úª—ÜQ“Ò{á9bw¸'»]*³ãWDïÆ»ÚIØ¾c»•ëÈ»)wdI˜ÒÜ»R.Íe´ Ò™ÌD£”OWeqAºgëšBÑCì/“Ñ{]9ïnÒßÊr;jøªp7ïò~…-[¸|VïÜk,…µ+ðé–Ñ©B~ªØ¨(ˆk7z¼%joWÄºþ+Ï3JËbŠÜ´~· ¢oÞ²&FÿÌl+É:L–ŒX”kÍ)wŸ»é^F¤RB¼¼ºßŸ±»õIÙ×:Ró¹\&¥ž+5RŽŸMKU·l©ènäEÅÖîr?”ñŠyÀ]å¹"Æ¥–Ò,1_™JÇâ‚ãDQV"ä·Uàâ˜sgÍgéRò=ã2û6;ÜÆˆ»'Ü}®›ú‰Üéww¸Ýî¯¼²^¸=qüþÕ¥?ž}0Ó6BóÑé™/gµÇ¨Ñaaaa›î_í…mwcFè½pc"ÅC¡ºÎÌßølüÙ_Ó3kÃ¹áN_Œ+§v¹Sf‡/ÜÐ2»	Üíß.0ioÃ}—/Ü‡¥ËWÁxÕ8É3•Íæçê5x_î‡Wƒ;^Þ_¸³éŒÞ³sSÝp‡Ä”Z©Øj-ÝœHŠ…	¹gpÏÊñÍ÷x%©ž^fW;RÅª˜Ïñž&òEÇíª®1SreÂ r½ZV†º„;+pŠÌâ'÷lfNŒrUÑüýp7‹ÅÙ8fÿù­ýû›}„;–ÅÜ¿yíü‡“·Ï´MÐÜ]^Õ§Fï„………õ	îôLžpÿ'ç>H"wîtÈÝš•Üÿrÿo÷ƒnÍY™³ããe×¡W=5¿xñÂ•Å—?{Ö”;e;…{¼ØW¶éä½=GÂ»…Ü]›Ý1übLèo·gô_3þÎ^äyÄ÷›pGµ\Ð`Õ™b©T–ï5©í	÷Ã$/¶#¼äå¸?í†ûÎÖ¨<àNÿŠÜ¥9õãˆ;&5V=¸Äs¶ôµÖw9ãýÐÌ	žp¡V¸Ó(ÜÍ‘p¹¸iÔ¸så¤|sÒ~3ãóB üVžÂÌèÚ†›H›(æ)bð?½PVvzŽF­÷}Vƒq•M¸â(Ü¥Z4*ÕÓxò”ÝJb–«æ•uÃý×€;ÜNàNÜNàþ¯î†ÛwkRf-¸·÷£3w¦¯Í.-Ýlo?wmL{Üš|î„ëÜQgpo#pÿÅÉ_5á¾ãìÂòâÃl›¼
¥ùTnbîÆ76÷twBÎ\|µîWûŸ¸oïîÃ7)­%L!?¼©àü0Õ²ä†{¬²º³RšÈmî‚Ïž‘T5¾1¸£þÃ¯÷îL_îˆàƒÉ1æê˜,~œG‰:žÉÍg2uqçÎÀ}DD1®
ªÊ7t-À²²XâBEÄ¤%Ï5áÎÆ9QäüáŽ<á~rCp¯3¸ÿy×pûí·¯O/ÏÞš~pÆ¥ùS§ÎÌLkWŽN.ß<7¶ž:;äþ­gÜàNäÞ
÷ïCî?†ÜM¸“Y™ïÚkešp‡Ü-¸¿Ó÷¿!pÿ
¶ÅÀw>ÿ0—d’ž5ždnŒw÷¤.¸ç¬ë¦¸“Èºx'Ü1}àŽË0Q¸“ÿkÁ¼ÿÞY±”ÒzV.}ÏîÈ	÷]ÁyÀý)ç…R‘?ÌwøÁ=©õª"ï†»º:ÜMãÕdEEŠ¯'
w5ïóÈ–Y
÷¸wÄY±fªîî™(ÏPf[¿Ä>ïî|ÇsJQëIUa™p7ž´Ã	å¬Öe:“MR¸—•JVŸK§Ë:¾%DxÏNó›÷ÐˆC¾M˜­wUdqPPØŸÑL/H/³R«&ùr5b=b¬ÊÉJÌ	wd= îŸ>
÷#¿%Ke,¸ÿ…»9)Ó÷ŸîdÄÝ‚;Üþc¸ýûp»îÄíN¸?ó-¸½¸»‡ØÏ9zweùÖµû®çgîÎÎN¯Ó«ŽÝzpÿô@XXXØ×w[î8ä¸c!¤îûÏî„ûn¸ÿ³wºVæ+|¿Qd€öU+\lÂý…uÃýJ¡Ë#îx_î;:„;&z^3_©îÈ†ûÁ{ŸÝXœOj=,3ºûÁý0…;ÚåQáÎÏ%´•,s-£2€¨®¯ñJ¹b©^,4Ò¢È­îH.øvÛnwÃSa?eÕPUxñ<§:-Mäud»GpZobædÕ9äšq´“‹Zwé©cÎµ×aÿœ02ÒH0ÜÔŠÊN£6¸Óp/¢K8ññ´qªâ ËÅU9P¸'êœT¥"¨<º[_$qbYÜÚwú zÀýiŒ¸Ûp‡ÛM¸ÿÀ9âþîŸ¸ÓîøW;9àn¹½pÿèÁÌ¹«+³×ÜÇÛg>Õ»Æ¦gÂÂÂÂº†;­îˆÀÎÊ¸CîÞpßÜänÃr÷ÞI¹Ó}'ý)à~¹Ät@°‡¸¿zöU¨¸Y›ÒÉÖ.OtCC}þòfÛíœp77Bâ¾aÂ}‡}r*ÚN¹[p'—Nµ†ùÇ¯Ü˜Ë&u­—éÉ\yºÝù@vu’õŽàî}¶*}ÎîžÁ½¨Ä[à®æMï`ÞO²¹	Y%ÈÚÀ3«ÞŽ­wÖgA`"¯ÒmHåX<åÄôT±ˆüó™d"‰«TŠŸj4ÊX;hd–À·îÔp1WžjGž34XhÕb÷¢0¾‚b°âÔõIÙ‰µœÖUzÂ\“¯àõK—Çy<)‰;×„»s9&Ý ';’ªJ©Õ@¿>É|$ªr•ãårž³7Ç«Ž•ó’½:“~¬Grþ€AïtÄž›JáN·¸[Û c›ú/¯—nqŸÂÝëÜÔ¿ n'p¹áþD[®ÿÍÜüòæôÛ÷ÓÙ™Ó_Ü]ùX{ì:6}j ,,,ìQûß;à¹ÿ¼s¸cVæÓ?\Ìw¤j=sñÅËùÅr9}aûºáþYW[esˆÛýà><ìwÈÝîàòÙËØÞÞû˜ù
Oàý¨Ã]™×µ5'¸áŽÄuH+[oLTY±&Ç8YfcÏÅâg [õ‡»à3ž¬¸àÎWê5…§°eÜï—/„WcæDÖ€;'I\ßáÎ–µž¥O©þp§‰9­ûrÊ–©L¢ÁUq»Ä‰n( ¸ÇYV’¥˜‘œî•ˆ**€»Äùš%á»-¯VÙõÃýäjpÿÀîö©©=…ûÑ§ïÜ¾uíÜñæñöã÷ï,OŽië,\àþÿìÝÿoç}Àq‹“¦6ë8å!sáRDóÀº5]W4X‡é6ô›±.í†f-†}i¯39óÈÈ8†Íç`›”îlàØ;Ú´Î’rÆ9n“q#_ä/!;Æ öS‹ -
ýé¹aŸ»çŽ<JGš§HÚ½‘(¶ ‡¢Ì´/=þÜçâââb¸÷Àw;…;9r§û }÷NýN/ÜAîø˜«ól8¶eÅf6Ã²|ízx¸Ã™¸ÝÅÆh'î×;l'?àæÁnù
8¿;pßã±Ý÷Ãî÷WUNƒïRòY¼9±…yNïÁ=t¬G	w¹¼Ip·É3¡‡w Ë0¯iù’"ÖËEAn™âL‘©*ªÁ 	wâžåRRuEVEUkæØl³UÊ„Ù4bÊªªÔÛíš"Ã#Ü!ïß(–ptŠˆÂ=Ùó¤hZîQNõ'õæ«2ÏÎîëÂýÐ¡CÛá§ááŽDI…”ý¢ËxŒååTU­Ü¤6M”šHB‚` 	±ÆM$ÃÃ"·_òàî•ù.û?»Û )Ü¿Ú÷¯†û_îÇ_;ú`í­»]_{knïÌÞˆo™7>¸SºS¸Ãb{!$DÜîTî°f€À¹ÿ­7+W§¾B‡ÜáÈ¹wÁÝ‘û>þøãøBÖ
Ëhw¿;.¼täNáNòÁýôH—?ÂtÌ·»"ßg/•!¹Cî^î@ßOÁÞs¸sjÕl6ó…|ÁÂ›–ÅJnèî4ŒÙ½$V‚ûT¸Ö³†RJŽ&k¾î¨ž	ÿõËàL¥Ágz­PÒ¸
oŠE¾-Š­Š>£šœÀH¢4ãžöw]bjV
|¾Ü¬äÈ#àPeóår>cY¾%ÜIt»xˆ…23´ ¸Ózà®³8Âx.H*A›™*xÔ²B56W¦]b˜Cv“SPð«ÔÅ:ãæÍ¹“º¾dH@ShÒ@ÆŒ!ÔX<¶r!Y7'’²)3L2@ò(É5õd²ó;ßwº[Æ÷'Ý-îéÛâþmÛíÜ½÷ïÛ#î wûÀ½îÑsm*=pÿ¢ÝöJ:ãNÙ¾ÜÿÙÚµ·Î{ÛÏ\[>whÖòÙ]qqqq[î¯~C¸ÿá£?ä3x„²õÓÃÂ}´;§¸sîÐðpÂûSU¨X`YË²ðfÇ·a­ûÖ†»Ü[ýp7³á9fs<LºÏ·•ùz£ÔÔŠ%ÞTZ¹¦,7s¦ ÖêUròîƒû çÃ·Ìz9ëþ›G,Ó’6îRÛÂ–w¦8’Kó¥BM`PÑTì—)½³Òä#Ã~859ƒ	Õq^Y]'TNi.¼.º§Ú/°‰$W”Á	„ûá§`RÜ>Ü_ŽîtyÌÚ©Ÿ?B.S½õÎí‹xÇöz|â7æUîdVÆÞ+CW¹{p÷or¸¹‹ìƒüé:pÿ§^¸Ó{§þú£1¶q}öóÝpï<ü˜Ò`~µ1Â£Y•ëdÂýEè üí¹“ÜÉ°Ù*sà€î³Þ‰ûýU®5ßšçñ'U&_WaT'Üa×Œ·82,Üi#À=ºQ¶&tæŒËáÐY¬e5ÍFÙT´FK+Ö‹Z½fšŠÉµà^ogª¨ÕeÆ¨JLª“0èÛD6›ÁZÖDd)¤;2SâážîtÆ]Ìá(Ë
w‡¥p—ê<º¦(©º^—ÐÌ$Aû¡i»Ct\fÒ‰¾Zá£È	¶WÊÍ^4Ã0Þì`DÂ’ä<_e9%(RJ’‘ÌšwÁ°wC*Îœäì¸¸Óm^»!xsø	w:)tßTp{îtÄÝq'Û }Ë ý#î®Ûî2dR&Ô÷S7îx[ ¯½½ˆwt÷vÅÅÅÅm!¸Ûrÿ:½™•ùqÿ-˜(ÜýA,{¡N÷¥QîÁÈs/R¸;Q˜wŽÜa³y°ÙYøÐÏÃ»á]p¿/›m>Yø“+Û‡†;…º3/ë6¸Ó¢?qgë~¸Cj‡ÌÊ°˜m«j½X5TMªŠ"	
§Èlk¬›ÅÏ×8xÃIÚ¼†`b*e’‘Ò¢än^†å27ë%ÜÅQÆÎKaàÎJ½6äÙ¥:=C¯;uá~èîä•
o:ràNó]8@án7%0)3V¸çjUAR‘¤W“’^TSÜap†«>>Ü?³.ÜÁí>¸¿BÜ}pÿZ8¸¿0:ÜŸ÷¶É<¸máÞÂøÌ=...z¸¿0Ü_öÃ=àÞ©ß¡pÿý<zå¥Î
õppŸ½43O¾î4€»÷YçÁfÉžÂ½úf%‹?ùØ†:Ü]¦Gw%oáhÊøàN2Â^ÊÏ7ò%SdPUH¥2ì7ð·„IV…ª®éf«n6•b‘Ï´D½\Ò±X+ŠdŒ>ªX7îBG|âÎ„;$H"Wgäv±Xœo‰3p‡úàNßØ×«††û$2àª%<¶¬L‰«"Éu!‰dNHÚ¥¸F©"3îð<úàþäÓ¿ì‡û·ÃýCÁýKã‚;½ õí«WðŽì˜o‘ûr|×Ô¸¸¸-w:äNöA’EîîÿÝ÷ßÏáG¨t‰LCž¸go†…û,Ôw8{·á¾ïôéÕ›¼%Ê´•NÜ‰Ú#‚;ýxtDeLÜIB#Ô/-ë‚Ì‰(å×[Š±3˜£*!IáðÞæKõbóE®™É58­dá+É›wdfp¤•äDH¸CSB¨?É˜Ã$ÛíÝp÷6¯@SN{÷îõÁ¼¤'M3Ar‡…;M/à±Uæ41È5É@‚®£d'Ù”ŽÊP³ûàþ?Îµ©î_¸ƒÛéR™>¸³$…;È=îÏA£Ãýè»·WðNmá˜vòõó»ââââ¢•yt¸“#÷¸ÿþ}
›¯Nî£ìqÏÖÂÃÝ“;…ûžÓ§—n>lðÉ*sÕÐprsáÎ¢;ÑEýpgÂø/[W”§ìp‡\M
TE×j­z»oÔ+[jµò,Ž²Œ‰6	îBG[A	w@øFÝóš¢(Ò4ùeÓŒîöó<DÔ¾>Ü™pŸì‡;’Æ9U‘ÁžÑ5ÄH2§Hîý—RI¡Ý{Geƒáo?µ	pÿ8pîp¯¥;·æðÎmÅ·Üreùµ]qqqqQÂ½Oîît­Ì¼EîdÈý«ôêÔÀ}ï¬•ù=½.uÄÚ×•-³EÆá2e»÷Úì('î™Æª÷ç¡Ÿ·óÁ°îä<>ûY'øE—j+YÖÂ[&‹Ÿ×«ApÂÉU;Ô½Lf÷~È±@Ü÷ŽwêûøÝZdp/ËLºŸ`j)Äwm¨k'z?Ýá}^U3M³V›/å+ùrÎÂQÆR¸“s×pÈ÷€=î	/2òíˆ{"áßJÑe93$ t:m¿p¤^¯’ŽÒ	È}ªÝ/6{¸ÝþWÀ:Ò •H“´ž×ý/ë‚;ÃÆÌŒ(ª¥qþ„*MØpW`6FEø	$ëRR2uƒ°òm•!“2}Ü·Az·_¸Ûn'på•_ü;;¬q·S¸ÿ€.•¡p÷]›:2Ü>¸07·ˆwpÇNZ¸“uûÎc»ââââ6îîDîýp‡#w"÷Ü‰ÜÉ½S÷~?2Ü_·¸{ûé†¸>´çþ\1‡ÃG¯õÁäþ‚Avwx@îÏºp¿|3Ÿ±ð+“o]ªºƒ0”íÝQ¸C¶Ð÷îÝ?µ×9uî)î‚™ÃÑ”5X¦+xƒ¬RÕw’!Š‚¤˜öÖ™v³Y‰vYVCÄ³ÔØƒàÎ0 ÷´RÀÑ–—¡án¦OÉM¶‹¹eßÝ«r¦ˆÒp¿/+² pO§í¡áî§{ Ü‘¨Â¶UãŸJ°-Q‘’II“áíÄ„TEðå1d¢,öo	ÔyŽö[ø¤Áî›jÃý‡àö^¸×ƒ{Çíp'nîg×ðNìØ±cØmåÄJ×û_?µ+...nüp‡þÜ†»{óÔ/úäîÀÊÝƒû¿ø×Ê|“ÂÞ;•ÂÜŽ¹Êå—^"pÿãg€ÔÝFS¸ÓÎÝÌâ¡³*—÷ž‡ºpÿò—¿nwá~ îóèô›e`û,Ã?|séœ7ÁNÔ÷Ï}îsŸÚÏl¸Ó\úPð=Ü‰8„z6:â2½ÙT6Ú?iñšê2Â=8I‘ #ïºÒfq„å4ƒJÛW€ÝÁáp§ÜýÜ½“Å‘–ÕÒÜ¡õàÎØçå½€QÔí©®Š¢V.5Hí¶†:Ÿ>9wœ.…o*‚óÊC²<èVAïg:õÃ]’Õ™éIIH×ÙñýÆŠ2‚ÑÑTá­¤ªu¡Ò5¾Vîo/½óRš~ê4r™íá_Áµ©.Üé¤ÀÝÛâî‡»ïÚÔ¿q®MuÜ¿p÷ÜîÀÝçv2ãþWÎwP;î§®]9¿6‡!ï°æ–——0éö[Wç,wÂýê™#»ââââ¢„ûsaàrïÞùõàCî¿ùí‡,~äøâõÕËK×ïwÃæTÃ}Â}S=¸$½9ˆÿ,r?pÀ¹ÁÓÓäñ	Ü/rÅâÃ‚…·h™léæê“ÁýIw˜&Ç’àsøñ~(
¸ß¯e¢qïc;c'WX¼~¼ì9Ø÷ÁxOÙ¢,1Œ–Û$¸3ÐFpO
w¡aáHãå„w(Ü!Ð¬U«UarfÚUÉÑOŸI«™f½”aíB¡¦S¨Zçóêè–üc¸OvàŸ²¿tÓB)«PÓU¶ÈTï† 9“?id$“ÝpŸNCô¶K½Á»Ã¤Œ÷ÿ†û÷ìÛ/uàþêÏé{7Üí÷Ÿ„;=pîç__¸ðö…cö1ôÊÉcx'µðîÙ³gÜvžÚÂ­×ŽŸzïêÜÊÊÉ•Û7®Än‹‹Ûžpÿm!6ßnTJÍ¢z?î³=]§]{ÑwÇë®÷‹Ko>ä³ÙŒ…·nVÎ<·µà.Õ²Ñ7îÐ†«ãy}$¸3NbÅŠt·§¸)pG-GZ^îLç‰“9ŸD§T7Ü‰+çØ®Û'dø–n–3ØÊµªÂ£Ã|ÓXÂc‰-”y^1ìI±Š$QH@ö6RA•Ò~¸S·€û¯l¸ÿ×–ƒûÑ£¿
X·ŽYÞî·ƒÑ/ÌYÄíïÙËÚ»¶07waùÁy°úÑó÷nÜ¸uãL¼Ä=..nä6€;L¹¹“!÷ÀíýW§þ«·VàNFe@î/Ó!÷^¸Ó«SÁíã‰eY‹-TêÅK÷¹3æ¤§ƒà¾”Þ·ÙùÕç;µ“à‡.Ü÷Q¸C³ç.×ò¹ÞêYyî)êöhà…‡{u>Ü¹`¸CÅìFû3|Ôˆp7Ì,Ž°‚n 7
ô~gÒ[uT&§ÃÃ=vžÇ@¸OCØ^è?ÐÎ¸ßõ·$é¾ ïc»4&¸óZ‘oHhb"™µjªŠ’B9p—P‚A‚‘èü¾º»)áÿzpw&e¼Q2âþwîþkSî0)óUoÄÂº½oÄäî-•!n·[îGÏ¿{ïÌ'íÑ‘•mOvïÌ½~ëÚÚÝûIÝ8îÎï¿{çÚ)wœÿÈñãÇc¶ÇÅÅEw`ûzpÿ†w*wîpäÞw;]+óãîµ2 ÷ß}ˆÇ™Åf²ùúõsÃ}èÅÚV¡~ýyÜ_ôÁ¸ïƒû¦Ú3î{öœ»~éR±’ÁÛ!¶¢<
î#w€;üµß÷Ý{Ç÷™p™Ap×a~­wªÝ÷tz0Ü¡b.R¸×uMÓ8H÷	¥Ã^â†‚;Mlâhãõ°pw´nÃ™|â,iwAÒÊ9¼Nl©Ô¬e‰¾nƒàN×¿C~¸§»jªy<–Êª^×u™I&U’pôÎ)ÎÙ&Ô¢Ž|pgÖ…;¼k÷¯È;À,•ùJÐ}Sÿ“,ƒ|•Œ¸¸¿ì^›ú5Xé¸ÿ=pÿ†îDî!á~ôÎÛ'î.:ê]Üæp_¹ýÖ]Y‹Ë§Ž?vôÊ'N.¼~Þ³úÑ]qqqqOË|Ú)îTîß GîtV†,„$÷N¥³2¾…äÈèNö·¹l{Éwqh@Ï?*“»ùÌA;Ïí®ÖŸy† Ý;r:°ïÜõ%n>ŸÏám[æî?½ôR?Ü¿ðºUf7ÔÙó™Ý½Qæ„T{
‡ÚŒ
î%™ñ¢rš…m‹ŒS—ß'r‚MõÔx¡•ÁÆf¡\.WÈÚº`0ž!ëLÌÛ‚{¥Q³Ï@>¸§QÝÂ‘Æ¶P÷÷?‚:÷¢Í0ÿ¦x&Ÿ0mF¥\˜¯a®¡®³Éý¡ýP	wHÅ^lÁìcÿ)ƒq¾™0³c‚;§+\Sž˜ ¸Ë¨Ýx<‘J'œ­¡LÎ@LOÝhßmgÃÝù~ú°odÀ¤Ì÷è¤Ì«Þ}SÁíî?ò®Mý‰î_ràNÝõÂýÓNj?räø½Þ’Äc++ÞÎÍÝºröÎÝÅÅw×ˆÖO½ûÆ{ñÞ˜¸¸¸÷ß|Å!‹UxsO0Üi«a!•¿ôÙ`¸“ˆÜ	Ü÷¬ró%žÅÛ©<wÿ‰àr·í=ÜÉ¼yµÅApq)[7F…;ªeð&Å·ô*ŠîBËŠüÈ/Ü«ò<ÞÊò¤ó‡*ÃÀrànˆªŸÅØîœÊ6uM/¶E˜qGº>1z<Á)û±†¦	3vö«1ÜwÛ[ÜÁí.ÜÁíÃÂý§c†ûù{Ö·/.Ú3&°4q[vráÂ	ŒW.Ü;
óëgÖn¬ñ×œÙãââ¶)Üÿm Üÿáƒ,V¾¸ºo#¸Ÿ~8$¤,ž{fc¸Ãå©ð€Kó¼…·YV¾Î­>±Eà®ó8š25i0Ü«µRfƒ#wiôwoZpê>Õ‰{ÔOÃjHã„{UnðÃ§03#Â]åô8áÎë’"ëõ*<¤iŒf"…ÚH0j5=,ÜaÄ=<Ü9Ü¯\[˜#·]Ü¾W¤.^xãÚ•wß¹»| ý±£ñM•âââ>a¸Ã_#ÂýGîîú¿'p±OÏn÷‹C_þ˜+ž>èæÁÔ÷‹—¹&‹·a,ßàN÷Âý)îÐŸÜíöïï,r·!ïo,pìÆ©¼ÎÂ`©ëÏÖ[ye4¸Cð”6±yac¸§F€;#ó8â*Õ±ÁI
°}¸Ê²äÂÝÕ{¸“+d§!á|6\£r5)r¦YuNÜ•Ç{:…=ãn$(¥g>i÷ÝÝpßø%î?¤p‡÷àkSîŽÛ]¸ƒÛCÃý¹/ž:å­qwÔ÷#gÏ¼ÝN.Â¨ÌökåÄÜÜ‰…·Î¼ÿú³+gwÅÅÅÅ}²p÷áÝ½yêsN¾«SÉ^ru*ÜKÏ]+CöÊ¸pwäp‡½2¯¼â»:.L¢ìü¥ÕsîÛw©d=ãp§ÂýâÒÒ¥›žÅÛ4¾µÔ#wð:\œêFàT'+dF‡;ã+ î9My™ù¬äüÇÁCê»SÊnÜÉõ¶›”Õ®R¸÷ç—^œ:í«î´”TÂ×$p§Á~ÒÝO€|Ê)'P®j¶ùþä©¥ˆhÚn2°iû±ÜÍ^î;§Ç¸²,&ÅV¾. ÜE||"á•6Œ„$WÓÓ3Þ6ôUÜsàÛŸ<ùô/}pßàÚÔŸwàþu
wÿRøŸ}²SÆwmês§n,ŸyÎ½mªíîÇ¯¼·|wÚ~l?6·payí½{kb°ÇÅÅýÿûo>ø0ÊdøÿcïþcÛ8ÏŽ›,…Ð“9Ç¯† 7˜ÑuJ5±5ØÚ:M5¬H‡!ëÖ­-v9Æ)y$ H¼‹e‘¾“6Ò$mÆ´,3>ÙÈjQNlú·[
;C³Ä6$@aÿ#Øï-éêlqì¹{y|yäQ$%Òï7®m9iÅ1úÑ›çž7™[îëf¼u£vfs5¸L…B>ŒZ7w(¸Ë|¸3ºšâ^î|Ä]e]áráÎ%Ý¨y…¢&ÁËyX–õ¸‘)ÉnÙŸæ÷X:Ä¢eÍ	Ü²áîìiÐ¿•B<3—äívK,…7À!)c2 wÎ)Åû†À]çöJpÿÅÊáþrMp?½cjþØù‘ñ‘½ýÃ;5¸ß¸áþìîþá½'.¡MÞsñÜ¾©…ùóý0CÇbh4Z+ÀýÑ%ge¶ÜŸ¹ä¾m›
÷§‡Üÿóß'‘i±©]%pß éNÜ¨¾äìÁÇ¾#b/
ŽÛg²^·,£ÖÎŸÛTìv™sWá0q×·$Ü]…š	wâm‚†;[MSŒ®šá.FšwØS„qYÖ¼ÜIÖ"ò[‹Ó¹\.ñ"3’YoŠl•Ñg-®l=žû)dûÂ´ì<£A©Gi‹:ƒ¿WÒƒÃŸÍIàN~½§£1_¢É³b&MçD€{"¸K<ÃJNî\z6ÃéCéÇòK~KÚlê³©êµ©d©Œñ¤Ì_*[Ü_3\*£mƒ|àþw¥“2Ã#¯ö?úû8>ž×<·ïôá‹‡¿±ûaî¿½S…ûðÈ›g==ˆZ®_òégw¿@ƒ¦^9¿wF£µÜ_(†û“*ÜñZ™ŸÜŸÓàþÞÛ“È¼ÜÉýp_Ñw˜”ùÆpßu|"p£6ÈŸ:©÷:ñ;y@Ã½Ë$¸s¦-=÷¦9¸“×•­~CÐ2á>çFM+wÀ´¸;’$ÁàŒÌˆ¬€;_éWÞ Ó9NP{w§³¸aÔˆ<i	ä®Â‰¦¢k-ê•KNF•qœ¾h]pïê„ë—ªÂ¸k÷¦>­Àlq^ƒû•Á}äÐ…Óg/8qt_žåChhrß™K'öâQ™;o/½¸§åDÝ1ùÉ¯îÜ½{{ñÖââÔÙ‘qº)†F£µ9ÜŸRáŽgeÈL^1Ÿ3cUNÜgüõ^*œÜ½ôØc¹?ø |·ÿøÁSÓ!j<%r¿Ê»l–ÁpWª
wF©.¸‹¦íNtÏòåp'1bµIt6Å-î2jVì,_Ü¡%á®a¸ä¿hâà;›°®î|_Êß€/ñ@î$å´½èmÊ¿
C¸Ç}¨y3öÄ,À·HL"[káÄ˜jW?1ÇóSzY¤ƒ{W!åú%˜”!pÿnîž‡ûKäÄÃý'uÀý{W/]œDèÀÀ ~frÏÀà{÷¾:Þ?|þÄ™£{†Z‹ìðíWß\¼ukñîÝ[ÃÃÃããt¤F£µÜ¿úÕeÀýIC¸xe™Yøà†¥á>@«'ytb]%¸ï:žšõºQÛä{å²ŠuwÂv÷ŽúáãªÀ=aÚét Ê‰{ÕëSÝq™pÏ6îòhÔeÜñÔ;$š³ÝÒ·®îL"åeñZÒ%pï©îÁÝ‘ËÆƒAI’B”[»–áE8n—$+ÃqBT¨w\)Ü{áÞÔÜ\÷¿ÐÁýêƒû×¿uõêÕoœ==€*50uúâá7]œD­ÔÀé©ÛpÌ~óæüÎÇnßYC£Ñh­÷‡.,„Ä!‰ÜÉÓ©Xî[µ!wØ‰7¹c¸“+˜T¸ÿÇ•ÈÔÂø¦ŠÕICÏ©1lv-…íîW:>3í•Q;åŽéá¾©îÝÊ†¹®úàžÿ˜)ªÜ££22§¬à\îUo8d–÷L 5+w6æ‚ªÍ¸c„÷gÕÕ4¸Gá¾ZîÚŸÄ mÔ¼/éà^”2†;Ó¨¥28×’iÉb±p¼o€““œNI])
1®üÉî®
uvÙ
÷¦þŒLÊ Ü“2“2x‹;†ûOîßWáÏ¦n¸à®¹}kÞíWß9söÐá©ÃG/.yp-ÃÆÇIÔR}4°¸0f~d|á®BöÝÇFv®¡Ñh´6‚û×ëû‡×‘Éù#}ÇOœ˜8¹kl1ÜëÆMŒ=P÷Í»&N%S§’oµÀeK&À}½î½½­÷¹X)ÜKFxœB•%ür6V7Ü91“ô¹Q³’½I±Eá_ÜE!5çAJLçbõÂáœ|¸Qp
ñTF²Û-¢À­uHÏ3VÆiåD®d3“­:Ü_‡-îuÀÜ^îWŽžƒSô¡CC¨šØ7uèÖ­7‡÷..Â3¨ó‹—vÃÿG>»†F£Ñ¾TÕ÷‡zHwíÈÏÊlÅ!Ë‡ÜAî*Üñc©&Çæ"áÐètêTßñugïNyP=…g&öë6An>>“
³nÖÃºQ»åÉiW.)•m–¸CëupWëT«wDÎÆøˆ‡Ì;q¯0ÝN¾®zª?/÷2¼‹Ñhfv®ÉÏ-³)ÃäÀa¶/î„ü&Â=Pë‰»ç„\xæG)1êcQ“=£‡ºâQùçµhˆÈåáÞS’³GmÜB:‰3v»ÍH’ p’du*Ÿ‚qÂ»„¿òUž˜ÝbËG¨®>>i33¯+îy¸ÿ¸dÄ/ƒ4q¼hRæç°Åà®-ƒ|çðžIÔnÉözóüøîþþ×Üº»Ø¿æ¾ÝÃô¨F£µ=ÜÉ‘û6u!äSî¯=÷áõw›c7ë–ÁÕž@ä•1¸×¸·$¿ÞÑíLOÔ¾ùÍg¦ýnÔ¦Ò—«À½Ün"Ü3>dR‘ØpÇ/¶ÚåOrX¨îb_Ä
°2jr¾¸ÍîPCà‘‘	…µÂT€{,èC/ÐWÜ%¾#1Í¢ìb¦Ü ÷xÆÂGü\*Ä89!&©nW_w2à®Ö­ÁêUàþÇù÷?58p©pàþ\ÅI™"¸?±pnµWöíÛ³xæXÿ³÷­Ùì;ÏÜ¡çì4Âý½+“MFŒìž>Y÷“Õ'àÕxîMæÏÜ˜ƒYøõvMGï_U¸÷š¶ÆÝŸ–ªÃÝ_uO_mp…h.âgÑjä¤mfÂ7åÄˆË…»”Hû<È„¼9¡£¸^œeÑÊ“g9>—Iä‹ÝÎÅ3v†çõö¥HLÄ8¦¸÷n„I™lÜ¯žÝ#£öihrrÇžC—Æw*W*õÏï}vÍ‹ý»éõJ4­5àŽ+Àú¦’²V†ÀýÑ<Ü¿ƒgÜ+À]›•y<¿Éý¯ß{wGó3g ÷	_m×ŸgÉ¹º'”œØü»Çû‚Y¿×ËÊ¨]“=ÉØ&îtWá<Çrï$pÇU‚;®˜ºØ·è|ð9/2%9+¸p•áÞôVÿ_©îBfµ<,Z­ÂB.ìôâðKî©P©“­º˜¸5>_Âi w@»Ü‰ß‡M<ÈœØ@Ž‡CnÆYw{i.!*	yBÃ›¶$¦Óñ”`wX¤˜h_ËÜÁíêëˆEE›ò¥	æeŒáŽ?îÝ¤ƒ»ñ÷¿Ò]¿¤]›ú™”y^»7õÃP;59pnñÈä§bv§f§Ñhíwý™;Àï•ÁpÇrÿQÜß¿>°
nÍŒÁ]®	î!Œ
¹Ã3}où¼nÔÖÉ~uR†œ¹?òH	Ü1Ý»1Ü¡åÀÝ«ÉK÷Ë)“&OÇŒà^üz.ÉV7ÕÒp´çrY?»ª·è²éjp·@Ë…»#fÂZzwV´Öwà³ô³æ¿•KÃ]¹§	|/ŠŸE(µ³©Lš¸‹™˜á$øÄV¸JyÚ™çl=P­pïÝø:†;vûÊàn?½µQÿýÉ§7çíZ÷½Hgdh4Z«ÂŒÊ|Ê”Âý{µÃýý÷Þ>€š;j÷Wj‚;bý:¦ËÞ€µ{ ÷û«Ã]—£¯î%•z¸Ç"&1Ì1‚{—îi/ª’<«wA€™Q¿wÕ¿¼cƒfÂÝŒY9œ‘–wFÌy©
µÂK|cžÐ ¸ÇæÂ}		ÞXZPàî`œV§:á.ò6Wp‡÷ûWwx8ÕøÙÔáþÎT¹ý×¿¹ó9t{>ƒJ£ÑÚ îXîØî w•î T
w;†;¾‚Iƒ;È=wûµ·ßZ‡úfvmXî³©Èãq£{-6›+‡;ü ¿>µ¾¶“àãŠp'tÇrÔr0ùT|$Â&½éîYÑ†'ƒ‹>_éúJ±:I½iÎÅØ8ŽyIc;ÄÄ2Ál8ìóÈhõóöÂ½È¾%C¸¶—œ¸£Fç‡A™ZáNbbé¬™›œ¢—¾ú7Ï†ãQúQ
%ìB*—ŽÜ-±o—DÎ¡ÍëtÄbRÜ»HPWGGÇúîÎ<Üÿàþ3²Rƒ;¸ÃÜN®_Ráþ¸
÷'Ÿ·ÿ-¸/•Ù¾õêá¶qûÿûÙç¸»7oÑMí4Â½îïÿ×»“hUòŸÚ_¾rì-Õ”,£{/ÖŒU†;®÷·zWw‹Ÿg r¸WYãn.Ü¡Æ·©h,‘ŠLOGfsQŽç$‰‘Áäœß“_C´úyÌ…{b´á/8c…ê„;ëmÂ;^wd ÷#\‡­17§†•Éõe8»‰¦á;‰¿]Ãç™úàþú/–„û	ÜÁíÊ÷ÊpáƒAÔ}ôƒÚµà§·aa;F£ÝkpWå®Áýç…Y™Ç¯½=¸Jža#àö¿SÒ:€;­r¡øý€óÊp‡¾öµåÁ½¬Êç™|Ô„w6É× w¾†ÉO(òÈ²ìv{BÓsÓ³éôlÐŽ¾<ù¢fÂÉøQƒKquÃã£¨¥«.K¾2¸s|‡-èA+OŽˆöXd6•ì1´À»@fsb	^Î)vû–-¥{Ü¡õÝÝ*Ü»`ä¿Àwîß-qI¿Å]›”yº0)ó£ü¤ÌökûPëcíšØ?ûìsøCùáö<}$•F£µ%Üõw§*t¸“½2Oà#÷—ñ»räþä/?¸²­Rl¶oÿ:€ûßwM»­br8¾‰Àpß¨¯~¸ƒÚ•0Üór·Cª›pâÎ¦T¸kÓ-øÓå'‚É>ÒçEuæÆ3í_¢Ø×£‹Ø»v¸ç½ìÀéö¸OË¨±¹3ÖºáÇþÍÉµêË¿$—­¤Ëg‹…ÑÊó¤-v1’ÍÄv>šNIvãTàÎÀOŒ p%ÇíV;©{=·wóœ:å®lqÇ÷¦þMîBFÜ@FÜñ2È×Ôe†îàö«‡Q‹cí vëðCq‹tZ†F£Ý›pßZ÷k×aº}µ’ÙPpWÜ•gSi•r‡û.o\î˜è+»–ÒÃÝ´û—d_¦Cw;N}Å\ÚƒZ¾Ñ„«6¸[¡ºáÞømî¹DÝpO„P“’ƒRMpïâE×/'¼0#NûÒ¢ÅÂ'rIx,;/rN¦ƒç=ÜÜmP‡ÜoŒá¾Q”iÜ§dÔÊýÏoîàSv£n_§ûdh4ZÀØŽï`ú3H¥{a­Ìw eV†ÈÌÊ¼Œ‡ÜŸºva­flrÿ:¥¤u}~D«˜?­ºý¥Mjø'Äìj
à?„îDîÊŸRÊËÝVãÒ²ª>\ý˜sÿq‡Ý@½æv"w.×úp÷¦]N‡.‹R^œµ2;qÄ¦ÉÜø‹SC1òùth'ý^QÜÞ´ä¸cmÙk±¸J/ó:ÂwÛøhCàÞpONgb0$Ã§ãö¯|ÅÊ0Ö!.:]‰ocœNíÅî6}ð+GŽé„eªÛË&e4¸¿T4âŽwÊüOÊÀ¿0Õ&eT¸o}áIÔªÁÃ¨wÁ~ç|Sº¹xŒºÓh´{î/àþËÎ¡Õ-03¦‡;ôŠÑ*6zpS)Ü7n,ƒ{'À¼:Ü+åÒêÉGàÞ4	îžWw`Mé&zUî\ŠE-ž')ºÕá®¥¿Ž´¸Ç~ÁA®N¸c7+w6jÑ^üX	îëá;!„1*óŒ]È¥£"ÀÝÂØ¸;aLFŒIN8p]ÛN©<˜Z|Ú¾bŠá®LÊüS5¸ã÷ªpß~mj­d¤öÑ‰]ß§ŸÞ>Ó¿†F£Ñî5¸o/À}Ûµëh5Ãë KÝ>6COÜ+çMÅªÂ½Z+…{gÜÕ*}¼ÏÄoXã^<ºÓÑ•útáå-œìÏ‰.—¥4buòŽÇä/2Ž¾á¦&E;©¸‹‰”5µiÞ®¥ÁÝ¥ƒ»Ÿ	 •çÿöî7¶ó>à¸èQm…«aêJÌzQÖ‹)®§ÔÆ,›ßdkX7 é€­°]W”ó­’€añ.Öšw"iQ¢UùlZ^[QVmSþ'Q–m¬Ð‹ùÅÞ{!Äoù¹ qæd/‚ýŽOŽÿeéÄcó|‹Øj‹DŒ¬(?ú=¿S6)¬ÄîYtàPµ;©í¢ é¼Òán7Ü¯î„Èw”Àí ÷Ÿÿì/ p;™”Ánÿv{ÉÝTpûßƒÛîÚÝÔw îè[ÜWZj‹û)á2ÆJÀNz>ÐF£Ñh¿/pÿÚVáþôw÷N¡fÇegJá>¥wS«åJIû4î¦=	IÁ=É¢–Ì„|œoÖÏ{Ì…{|‡Õ”[‚»¸D»\DnîðùžØ‘OßˆäÈÄÃŠ6*#øs¢ãðE{ÆÞÃË[…;Œ¸ÃN™:p'[Ü\îßj¡ug/L€Û?µW?c/íÙãA:çN£ÑZ¡º—Sî~x*¹ú§øv*–{q“»~;õ¿þgaÂ
œy2V÷Y
÷*©Cãò~ŒtŒv’î$#Üj'£2¯ ÷„ikÜó1ìöÚpïˆGPÆ“~¿_	çü1´U¸“š ÷¤Ø Ü‰Ýñˆýî”œF¸C{:+¹Q´åe‡#ž‹KpÎÏ§gc0.£É½G3‡xA€‰œCøŽuñj*a;¾y­¿Øå~µ×#îÚ‰»¾Å]¿šºñø%ìvw¼’À]l*¾›
p_y€Z¤‹ss?zYT{-°“>þøÿÖÖü´F£Ñ¾tpÿÉÓæNÉ­]*qŸ¢Keªé/·ì†š	wÉ,7s9¾¸Ã¬ŒŠZ+ÕËE¢~Qû{ËðcÜM•	*™­À]Ê«h÷KñÀÝ,¢í¦ú)ÑÁ(9)s:x%)Â‡Ã·²ó²P„{OOCpÿÍ–áN¶¸—ÃýÏoN Vhb~©íôú³:b'd'=[m£Ñh´/Üñ¥Ôæ§F&_+[*sÛ×ÌWÄ²^Y25˜ßr×„{oŸ¸ûÒlw5÷‹Z&o0ô§Â’HîÝ¶Ü³¢£q¸á jF‹Á}G~ßÉFý€]I¤¥ü¬ÝÜ…?ðÈ%»À3vQ’‹p‡±˜žFàþ+X*ÓÜ_ú›ŠpÿÖÊÍ{gÏ!kwfþÚÝø÷ÚèZm±LÀNúlõì–í§334­õ¦ÜÉœ»÷¹ëCîo†Üß{zyY¢`øàk¥½Ù<¸«Þ@>}X‘†ÜPîÒòþÚp/d'r7À;¢JžZIfÁ÷º\°É]ßsáÞk¨¢*j‘ØHJQüþŸ±C:	Ü÷ê‘7I¯w&Í5î”õ¢fÄ¦¥/¦Ü;!O!{1>Å±h»©4€=®$âð‘áŸáyç9Ó^‚ÌkŠÇ6ïÑÜ^în<âþþûGÜÿ±¸Åý»øn*ì”ÁpÇî†wìvøÿtnzÁÊ“îOŸîkƒFÖªOÅTî3èÓçwFGæÖîS¸Óh´V„;‘{ãp_ùÝE«XôÉØÛ¯•å5‰YÙè™1È?¬ê’·áU.°—ÝÐÎÁÝN"§Áu‹9xIíxo_e¸w’"¨%òå“’ÀvîbžÝY¸ËÂÝ–BÍ) 1-9Sî‡°Ú…¯ðþ‹¶7œ‹!XBi³1</ŠŒ‡ñxdI´ãïépg˜:pwi[Ü1ÜKÜ_Ò'eð2Hîàöoâw|5Ãý‡'N¬<›Ÿ@ÖìÌÂÜ€NîÓëÿÛ¸ØIŸ®®­­®¶Q¹Óh´/ÜWžþ·e¾¤{³3o—ÃýMHmŠÛ‡o\šéêîî>x°{¼(÷`6j>ÝUíþ[ÜV€»Y¿­ò&Å†à.fYdý@w©„lß}¸3~5	îé¦}«*4»È8bR.¯w1!Øc)n»îÑt2, Ü`»Ó–l{y¾ wA^î0)Sîÿ¤mqÿ^Ù¤Lm¸Ÿ8rbeÚ’rŸZ{|¥¯MïÝõµg[{1xcunä4½¤J£ÑZî ÷ÝnË½î öé{,2 Éú²“G-ƒûX’C»›ÊzY–›µCšÜŽk!*™WÓÜTo®6ÊÀòW»aP¼Û*ƒ»Ñì‡ô<¥µ‡}f¸“—¤½áªw!Ì!«§r|:&0ÓÕ^OáÕy9*†å.¡¦À]r>ÔÄrÊpÄË¦m/61B›®hˆ2ßóÐ¶âs‘ ¼1“›ÃÉÇbNfÞ=)$äÂçp6Ú^TzqÀ^‡»qæà®mq7<7µèv<â®¸ƒÛ¿G–A‚Û7ÃFÜ_zOŸ”Ñá~äÈÓÈbMÍ¯¯¯_1“¿;8²þ¬
Ù`/Ýë©?l£Ñh´„û×Êá®Óä®Ñ}e	Ô>¬‘Ê‡/=zøp™ÜgfÙ]V{h8›Ï¦&»!]î]7B*ŠN¾ö&@µ™y}ÁY¿tX¹«EàN·—Á]‹ÀÝU†û=OiBÊk"Ü5°ëÌÑ¿Sp *þ¥ƒÈÒ±ÜP>š–äÃ4îbŠm
Üÿ.âP3ã‚ðƒ.…»þy¬}#Çî±Ûýòå’Ü,¶RBId6^R<†{F”y—‹®b¸Cî¸
p‡-îpàrÿWÜÉ÷ï“-î¸ƒÛ1Üñû{äÀ]cû[o­\FÖêÂÜH___[i#k±“^~úòåKøyíÑ`ÔG'fh4Z+^NÅ`‚g0áÅ2åp?²òð<ïY¥`ræ0îèFE¸çwî\d6#233]ÇŽÛD÷±p(;ztìvS9Œ†ÓñýÇÝ¯ wÀùWŠv/ƒ»k£Jlïìtâ´%w›‚ÿO\4î¤Íó=´t¸'"ÈÊ³©tB3-¦´N-§WMëõàîÀU…»D»wÒ^!D( 9Dî97¾yÄo÷÷5\*<›‹9÷&’päƒõ¢?œ`œÚ?@vY]½®e‘¸ovºAí8».wXIvÊl†;¹šZ6)ó#Ãû;ÿB&epŸ>‡¬Ó¹ÓÚ]^.vˆˆôÒÐêó›×ûûFéÄFûýƒû‘•§w®ÁˆŒu
…Ï®÷ñˆŠv-6?	fïê>Vhƒípæ~ÞÜÞÜUÖ¬WIËÚTŒ…à.GY“Ìë¯÷RžE–ME‘Ï M„{,Ò¸'²^dòSîÂâ¶¿r¥£)É¶7¾˜`xÀ=­dö0ŒGƒ{<vµCˆ‰íÃ½C›”ùYpÿ÷-ÃýÈÜd..Vh\7ž±WìeYŸC«÷`¯ä(”¡Ñh­
÷?«÷•Pû½3ç…ânŸkm¦ûÛZ»:›Âea@¦«î¿…?ŽÁ+Ó:#ˆêåå¼ª9˜M»——Ý:ÜÝê°Ýèö*pwájÁÝ©W0IóhÌ¬Çë„”Mn×^+a{î½Ëá€UWì³lp6)	x0£©p—Bh‡›­÷XÚ¿0\ÜÕ>qß&ÜÙ¼’Œ¦áY©bŒøuäc"ƒÁí¢’¸ê’%±½Ý^	î‰ÀÝýŸ wp{é¤»qR†lqÇKÜaRÆ÷êpËBCîg.ßïk«Ö»ë«F±VOì¤/>_Xêk£Ñh4‹VîÚ™»¾WæOúGFF¯\¹²òhzá¶[*5;³q¸½qê^üÁ!´;±Á¡ÛÅ×ÙN"pïn î¾g†f½ÛËò¿|ÜíÀ×…;d€;®*ÜË®¦:7µÇ˜³Xb™SDrAÆ'Fá.ç|ÈŠ±¡üb2¥ˆÂ¨Q¸ï5îŠíp‹¢£vJÄ‡,P„ònãªµœEÛŠ]”¢Ù„ÍacN!ã€_ÈLLvz
	1ÑîežçÛ	Ü+·»¸Ü^>â;e¾Ož¾ôKrànÇp·“»©·Ÿ(¸ýÛG^@MïìüåkóÓk>,iéYÝ3vBvbv­…¹ë§Ûh4­Õàþ?,ƒ{ÿÒ/¦§áKæüµ{SÈrÆ»p7ÌÌøênÜd†¢ãc]Ýep?î¿%pKqõáòš1ôËnår·
p_–—-w³¶¨«ùX¸ßÊrÈ‚©ÁEIxmDÆ¸[àÄ=w:j%å‚È
…‰qÔ‡ûÐ6ážçã‚ƒOÄ2¶ÂEX>ž(Ân¿àÞÞÞÓ(Ü#î&Áýä‘;÷š}bsan´d´¿ö¡xÿúêÎØ7wñÑOéÍTfáªŒË|8200Ò÷Gß(,•9ýÆW¿úÆ×¿>z÷²n>”!rßèM|ÄÞDÂããã3˜íîÆ°Ü/ÍªõWv›1(À%o¹÷õºå[²û8}Y–KFeöë¹¡×Ç|/Ùz®S˜ü¸’=E³ÛôöTÍ4ën*ßAÂf7´?êE–Ke}³
Ï”M¯
xH³ãÜzUáÞ¨Ù	TãA´³EEGx%À!ä[Œgl•¶Þlþ­g'Ãd’ê6ŸöÎåÑÁÇý‚²	‰˜Àx´µ“íí`w— ó°²“ÁUrû&Ð_í-lq‡%îïƒÛîu&e îàvîxÄÜþ6)ƒ—Ab·kp?yò¯F¦§PS[Xlä_lWžWûç†¾(íÅê\_áÏ§Cî4­µà>ú‹ÓðéÑë÷Þ¼³ôðÎ¹kSÈº±Of6û˜„¥<¬"sórÃþó]Pu¸Ôá~p<PŸØ jÂ­ÙÄ¾}ûz!q·‚ÓkÂýõ×ËàŽÝ;p;wÞ¬m¡xGm¸‡}Èj©ÜPR‘3góànþ¨Œ×Ï8ª'eC*²BaÁVc]%»G
móÄ]I‡ad&®x—L",3¸wf2í0ç.®Špg*Á½ý7¿Ö¶¸›÷“ïBÍè”ön'ÌO_olþ|píÓFÎØÉ[/´ÿ¼xqíJ=q§Ñh­÷Á»Ò/Þ½{íÁÅ‹g&Îž9;11¥")\5È½ø†&å>sÕdÃ“ç»u¸ãŸ7Á½‹,–Ñî¦Þ®ÿr¼f\MøÝîH¯W;¨À½¤R¸“åâí5—Œ‹QÖ¬A‡špw[o;°=ËÀ‡®Üá'’g:Ü…¤	>«Å§#*²@j>-ÔýÈÀG>Ã;=â0ÚNÞœœNË68qóÜRJâ‹'î<ïâ	í.÷ž
C2î.˜”ù9~ljÕI÷¸knÇpÿÛâÝTüØÔ~ nÿ‡r¸ûNsæ$OM‚ë¨s×¯Œ4¸¨±o}µê»QìÀuÒós÷OÓwÖjpï{ˆ—~MM É›Ã:® wxòQÒ‹L´V(Ÿ9ï°2ÜÉ1|ñ; 3Yv‡—Aªo¨ÕðC*
¤—÷mî¤…»lÒRu8QîJY(!–‹äbÈZpw&‚hgóV‡;¿È!Ä²)ÑÕ…;# Ü• ÚNÞ¨’ÖîÀò	Ù©MÊð±xLƒ;È—Oˆ¼öà%ÝíµáÞ'et¸ÿué2ÈÓ·¸c¸ÿ‡aÄ½.ÜO.-4cÆýÜÔ)õâÃ‘¾-pziµÎ;;é“æÛúGÛh4­eà>x†Ù[¬Èx×1¨
ÜÍzü’ªª,xâŸÑÞ_ãpŸÜáÁ•ãX¬`$ÄV\uOa·[î‰a³FÜ;jÀÝ-!ÅƒÁátŒñXîB™>âNÜÎ¢f§²^¯vW´1¸g2NOŽ}õ/!ÚCé´ÂÃI{F»›j“cb"Q•a!&xxYJð®vî=µáîêýµ¾ÅÝ¸¯\žBÍûƒû[;¸W~ÄN*'{±µõ]_êo£Ñh´VûÀÝ…)Ôjå/“I%gï“¦ì”Q½>_h6å;zø`!¼½ê"r‡Œ7Sñ¤ÌŽæWçqOÆ+Þ¶än¹Ý“°OÂ|%ÝÞ0Üë»rÖb;1c<€LÉ»¸\wò· ëÄú†ÓŠ"{HFš¸ãêÃ"ÿu{pÑ§8ª$XÀí\$WDÔ Üq)õUßä´÷M¥{`vÈÁÈ²¨Hø
Ã‹<c%Yùv}‹Ð¡C5à[ÜµÇ¦wÊüeÙˆ;Þ)ƒ¿d˜”ù&¸ýÍídÄ]ƒ;°½°TæäÀÔ¸Ÿ=s³¿oK3¯põ´\ìŸûè“ùë£Kè‰;öÿìÝïOwžÀq të\‚B¦èÈv·QÚ\ÛKšU*5w§[åzÕjœ´ÚSöî¤{ÐU¥•îŒ”™Å?€³%
ž`›Xy°6ŒÑ ×=lr€!pBƒîÑþ÷$:étZé;M¨wû ºÏøëáËØÆØflliÞR	iÒTR^|ó™Ï×¬aà¾¼9€.64Uî'2<…q¦Ã¶™.u[<v;DàÝÍt£+î³Ãk³K8¬‘±ƒ<¸Â:ÐµÎàÞ\­‘&|<Ü;g<uÄv§£½.áNÙØ¸Sâ™»]¡Q³@åÀ}U’ÕceÒê™‚3Ú“¨6‹ÌsðNl“ÕsöÜ[:D“9Ià¡8Ü[á®î”ù—êÁý§[½èšžœÜ^œ[(ç©Ñž%Üó‡bô`×új{~gtÍt»™™Y£À}äéN7j¼Ü<Œ¢‡»Öµ«ñÖ²‡l+‡[k@î„î$°ºö£wïve{ÓfGÆ§¨§¶öÕˆ[ÉS’ÇµŽ­Žáš›Žì…×¹çÒ`ý!»Îí–D“Å€(Wk·‹#pÒ»=3*Ô¹¿nKÒ¨N‚A¦ G‰Ð<ÿ²YÖ[Ho½¥Ã¸—<ÈàÒ’¥@m¢-M£³Œ¡YÏ^ÜRbGÖB†P%yâ^Æç¡²ûa›ÔvN¹óÍ%ŠÙmA”àç)Ž»ôŠÈª¿óNÞf™V­«®üGÎ¤Ì_æNÊü&e²[ÜîÙkS1Ü’…;vûÏ±ÛÉwØùÑŸ­õ£Ú×¿Ý‹ÐèrYë^½ `/vÆŽ;¤ûtì‹/v‡GF6™™™™Õ?Ü{`º½³nL½©‡»nÅÌTÂpXÓ¶¡{Ùu“¤»…àNêÂÁ‰{5Rœ¡Ô†›Ö=ßJ³Œ7:î.÷;Ð‰pÿýbpÏ;l/î\ŠEÕH±ÿÏUˆ Ã½s_°ù<ÖzQ»Õ¹‡Ù^¯poŽ[‘±ÑQKÄøÙ^†¥°öp(”©’áŽkö*„»‡úhxEöRâ¹smm-\.û.—‚<E‰A‘ÒWîäÚT€û?=pÏŒ¸Üµw€;>pÇ#îÚíKž÷÷&vF{Qmëî!´;ÑTÜ‹€]ovü©ñÑ°	w33³€ûÈã^Ô€±	¸®´ÜÞâN3Œ{cåÞ½£p‡y™³†;“œ] ÜÉvHñ$Ü)¡Ü¯ÜëçÄ	í€ûz4ìµ¢:‰uûâA`{]ÃÝoGÆfZòãÃt–±Þ¨¿Y¶@eÃ½ƒªî^›× ¸Ói<§Î;×Ò’»,2~—S¢(ST ,î0)“}6µÐ2Hp{îäÀ½l¸¿·¶ù¬ÖŸ(b£ý
˜+k€¥gž=ì„ìy½„bóM8s-¤™™Y=Ã}y5`tr52;t<Ü§Œ”a“¡ðìÐÅ‹@uí8îØµ3šì»»;T•[\†õ„“'«9q§¶ø^ îX¸ƒÛ‹ÁÒÃ¾Ûà'îÖøUÜ‘1w)diTÑŽtJâÞx£C\ÖÃD€ŽéÞÑQîú¹uCã½ÈØöxK^T”EgÍº£‚ªî2çb*nKm®¸WÝ¥„óçÎup2| ´Q¼$É-™8A¤ îq‘*FûÕìˆû§*Ü?ÑMÊ€ÛÉ¤¹}é—d‹;™”·¬Á»]ƒ{Æí-¿=¸Ö[ë¥2¨¾¼Cð'“ÅÏØóÉþ’Ôû¬É„»™™YÀýYc¸{Ã¶í¢£3î§¡óá•¡¡{‡»úåC>ÜIStUÎn=§C¯g2*ESë w 7ü•1wfÌ¾ÿƒ`Çç?™Š_¿_3¸‹{ªF.Ü¥ÀžÕKŠ7ÎgÀÂ·9÷ææ6’ŽíÕƒ{-àö3Ü©O[¾hÐUwŽ8+x
%x1(À?ë
†ÃÀ]æå–6€»Ì‰\î"GQ²Äsœ\"Üñµ©pýûßT÷Ü÷Ÿâ÷·ß{ûíÆçbM÷w£Úµ9ÞÔô°œ=î£pÔN¼^
ÙI£k™½2}ƒ=æ-ªfffõ,÷­†„»bõÍ*“´ÓïU‡‘ó(‘!õœ î™ôûäu£2ðw¦B,2>6íò9úè¦™´M¸²ž²íƒ»ñn˜j¤•=~ŸÀ]Wip×?—š{iãBRAÕÈá¿„Ã£2ûþ„“Fuæ€ëÜq”VG‡žçî¸·Ô
Ÿ·[ŒNp÷”lÉ‰³™ÛiG"-•¤Á’mŽJvA¦,þ æg\-¶aº¬¾—ñ+jx]¾.‹¼$qGWÇ¼³ã®BÚµ© ÷ã®MÍß)óúIp»~RæÇ¸ÀÜþÁËÛ¨îÑîtïd?ªM;O&–Ë`ô“ÅQ0;ñzá¹˜Âôï<iêû|mÙu733«g¸?D˜)÷k«Nã,š±—	÷ÛÐ¸“5îñb;,–ÞøÛïÜ‰§ü*ÐÛ3“2 ?V» ÕÜýnT”ß­»ùÜ/_¢zˆV	îr”AÆ–àõCôR<ä@gmwï‘•í•Â]Ö
àžÄ”;à¸‡øhX…»(p¸S<Oa¸Ë¼ÄS vI,îð_›ZhÄ=§¸ý3rû’
wp;œ¸—÷÷¶v–Æ?X~üìé.ªM£ÛKãM%÷àÉ³g»_eÍ^ —ÅBðŠÑçM»ÛËMffffu÷áÝnÔ€1>w\.Ü§|FÁƒõ¸¦Š¹À¸ýÞ½Û9p_9`á±‰ÙM?ŠÕA³{	´½·IwÔ€Þ9p‡ŠÀ*îT&Ýîñ“á^åû—˜ßó‡p—\IkæS5:ûœI‡‚žO÷ó¤*Âß›Z½w1Šß µÏ‘‚ÀöÓÂ]†YTv&“þ 1a.ž’à!W^”1Ü9>;ãÞ!y> P2E‡;”™
Ã×¦b¸“wý;™”ùìÈ2Hòh*ÀÜ~8)ó«p‡z†Ço½öÚÈ­Ï'Q­Š=*ãéÔ‡=Ã»_®¨Ùµº×^ÝŠÍ÷4™™™™Õ1ÜÇc¨ñ¢Ó‘kEà>kŒÖš»}j¸¿q#Ã£=‘›Ú´›\]=ØìïÃ{» ÁK\ÝÂ=^¸³¶«Üƒ	XÍ\'p·ÇãNÔ@p7~©ŒÕFuûm“¡GTä,Ð©á.ÉJvbrÑ”Ïã—÷mÉÀ½…Â[eZ:dªŸ¸‹A‰âƒ"üÖ*îWþí·Ÿf·¸ÿUuáþ£[· îöÌ 5ð¸E?xØ´°+ï”]×ÎÂøöôÓ2>“ö™S5fff5‡û5ä:H{äî]=Ü¯a¸ã6Xc†Û7lpÜž÷®#½YÜOš”Q*0€zÇÒz˜QxÝ¾1³¿?3+´·ƒ¶óÅMà©pï<k¸ËQ+ªFVîRÔûõWuâvXÚÞÀRe]\~«½éáuÔ	Ü)Ã'e¼RÎ Ní£ÙDÔh¶@À½¥’§ Ø¨»Ò~ÙÇ&ƒ²-Êc©CG–É‚_¤dø)îw`ÄýSp{íà>òùªMÝ‹ãMå58#d/*Pïókhg¢äþÁá'Ëƒ¯–ð3>0x5333l­ÌD¹[ÃS]î¤#pØtúhïlW>Ûóá®Eà~û/ÔnÂ}ªø¤ŒB+ån•£=®Ù•õÙ«ÝÎ:Ó¶±öwïKëÂ~'Ñ6¹:T…;	d_Ü¡Âp×_—ŠÕ^xôºæÛ ·®Âlië×_ÕÜ“Bkk0Mc¹ÉåÀÒÁý<T¸Ë.£eíã-$ÁS{µ3vò8ª!p¯ä%0¦ãOíI‚7—å @µ@×³pïèÈNÊp’Hµa·£c¸·’Ý¯üûoƒážwýÒßé¶¸ƒÛÿn_Ê¹~	ÜžqÿÜp‡{S³n¸ÿ,³Åý£¬Ûoý(÷o=šF5©ÿiyŸØ4oÂïúÒæbòÛ~þ¨?öx¤ÔÛø³¹¥¥¹GÇ{}áé“‰ž¾¾‰­G[žŽ4™™™™U÷Æ~<•NÏÜ ¸ëèNä<IáÆ¹˜Ïö|¹ëžJÍ¸Ðþý‹Ðí]øÂ¦`Û)S Ì7€|Æéöº¦ÆÖg]¡DÂµ•¾Û>p×¬}AÃ:Ð]wîê‘ûûÄìy‚ûœþÀ—QeË‘J¢$fPRþ[’l«®ƒä‹ïÀíõw·¿µõ‹ ÆÅQ'ŽÊ´äö.Ïéäuƒ“ŒÞùãˆ·YH5_ßÎ8âþ Åˆ€ì¸ŠànGã’+!ö|¡ ¬.nWuÞrÈž{–î”Ü&‹<Eà^¸«úÍ¸6µÀ¤Ìß’kS,ƒ¸“gSÞ¾”9pÿ9¸=g$q;¨¶ÿð‡#c¨&ÅÖzšúúÊ9¬\Š™‹)žÒërJ4µoyiqs{rwkb°¾;¾°0Ñ£›œYXÛéÜŸ›ÛìŸîŸîk23333î#ký¨±r¬^»ñæqp¿¶ê6âÏÕ¾Ù‹ÂÌþ}þéÌM«7Nq§ÙaÏ:tö[ÄDVfm³+‘ƒðê†kf¬z÷Ýöõà¾ævèR&Øg^¸S×Ow)A£jôâ÷ÿùâÅ‹oÿï»¯µ÷:€»7ØÚÊ¥9ã¯´ªÕ7Ü›ýŽª¸s¢èw£Zæ´ÛãXí†Â=èFeç	¸âr*-Ä}{©€`ppÜÎq×[ Ü)x©Â½£Mˆ%Ã&eÊûgÀ}bQéF5©ÿñÄ“'åŒ¹?|:ú2¿r†sJŸ”™Øšß™œÜ™Ÿ[{º0¾¼9::¹¸5Ø”mdpk;† îXeŠí7™™™™îÐÄRƒÉÝ¹q<ÜWÒ
:e
ë	Ù¦ÀßDë%Âºw»Ýî÷T¸Ÿ°œ’I$Yå$~$Ü4‚¬;M{#c3˜”Y¸Â+í
÷Îý}wLìK—^Ž…;t*¸_WY¡qœ‡Ê‚{ÐƒªÑË?|ùåÿ~óí·ß¸Ÿ½Û•0×ÚŠ÷ÖÓ{b+®¾á0îtTû•Å°ÛíTPÍ²z~A°@ÆÂmvE)î~ç îQg”…x@‚}í<¯Á½%›z÷R .æÃ~;“]¬‡¿ñ2H`»ºTæ8·ãIpû/õË ‚á®º½¸>[­Ù&÷gËšsß©€ì$eq¡ô/Æç&G·w ÍÝMüé_ÊÈ½gðéæhþËæ¸Œ™™™p‡çJîJzæx¸Om8”Óž¶ÛÃ³pl^îÚ«Åà~Ãý¤­òÎÈÆIpgÜ	<·ÏX­4b¼®Ù¡ö±•™¡••}î0¹~%îÇœ¸wž5Ü«tgæw ÷o¾÷z‚»Çß
p÷*ø¢F€{›E†f÷[p‚—A5Œñ$ÞUî!º¸-"M®t@âe1p§dY›9„»ÈÉA?½D¸«Ë 3pWÝ^	Üÿ:÷3n?„ûŸfFÜƒûk#Ã;¨&M?–Úƒ‘ÏG	Ù+iw¸œãýùÝI8iïíV.6××Ôót‘¨]¿–~éùDß«Mffff§…ûƒÁÇ›pbÐ(Ùm÷2vÖèNänÄæEÚ»Á¥fá~ü*HõïÞÍƒûEw–ºlöbÃë´ÛvÒÚyÅáq3‡ÃîÎD:m»à>u¨­Á¸«/ðÅÿºJ…;tå¸“÷6 ]‹Àh²¶Ke¾ù¸c¸Ÿåˆ»t{\«vâÎD5¸¿ƒÉNê€Žƒ»þ9Ôê×·ëg—lÁ¥jèv…IÄ¥f‹‘µÉÔ¡®C,ƒJ¼(¦¢bÔ·‰²?3îPî‡¿4'ñ/eáž7C"“2ÚíKŸä^›ú÷ú2ªÛÿµàNpû/ˆÛ¥wû{àvÜ¡…ÍÚ¸}ÆdÊX¹Ø÷ùÜnì%ÊËØQÒÈ‚jôÞÞ£ÏÓö,Mw£cèßœ{>¨þõ™ïfffÃúÞÈÄÂãjŒœ®¡£ï„ûªóÔ»d`£¡p¿ñäX=î¾“¦h§ÇAžš±­Ü}hf}}è&;aöŽ»SÏpçÃ,ªF_¸ŸÝˆ»ÓÎ*ˆd´Bx®›µ5ÜýNƒážõsÔª Å$m±Ùbl¼Äµd“’
ƒÊ-$I2rqQŸMy¿Ð¢ÁDµPB\j“9¹4¸_½“Ù)S:ÜÿÉ¸>îG5ht¡ÌesÛýÝ§üR¡¼i–¾­ÞÞi‘vçb¨HÝ½K[Ã[M»›™™Unwhb¾5BÖ1•ÄÜsš
Ê„
<“Ú"/ŒõâpïÂ÷/^ÎÀýðW‰¸u
·²Hÿ}'sâÐ½ƒÅ¯ÐêöÇ™™¡ö×oŽ­a¸¿½Ì“kk ³ÊÖ¼‘uÄìÀ³ÊÂ½¹‚Í„â]÷|¸×ü£sÏæ³êÇ#®BA’Y3/g)†§ 
Ã½¸ÛîJˆË>ÙP#·+¬/(RÍ†¿]îo¼á·W ÷´Œ{)Ñ•Rœ$‚Í!
¯ý”eõÝB5S¢ Ë"—ÝIÈžŸvûÒoð»~R†,ƒüµ
w2)ƒ—AæLÊ|¬_â®M¸“%îÄí?Ìôáó^Tƒ&Ë…ûòi¯%éÝ*SÓƒ ÷˜‚HÓ¨xð3v7w§c»‹[æ­fff§ûƒ…¥TÿÑ¾õ?¹|ù2È];q×-Q_I0¨âkru*«õRä?®Á½Ü^îêrÿ9=ÏÛôX<ü3h†±úfgVV‡^»üz&Ü;÷ù;Äêú.©î‡è$p¯À”¢¯*pÿNƒûÙ¸»mœÖ}²!ÞnxÁ¢#ž…;>K-
w‚öÆ‡{XÎ¸Ý]·Óìž$«o;‹ÁÁä¹¬ÁO9”
öÙRÁ`\
¸‚²Ì‹¼¬â\î ¶«ür^­¹™‚y™ÓÃýêqp'·/}BànÏ½}	Ã]7)n'î¿8
÷— ÷ÁÚ|²è}ò ¬Ïj}–'»ÑiÚ~ÒTNæ§”ò·ûÂ‹îþµóÐÝÌÌ¬R¸Cß›XŠ¡ºÏ¹©ƒû5ãàîð¹fºnWw¨ Ü¡©‘X¯·B¶2î¤Õy}%ì‹Ü›º|Ö·_»©;qç;K{{-à^û÷oðR™3‚»Â:þŸ½ûmã¼8nbÃØV,K¾Ô¢Âª¥nê¨E¸qi7(Ð¬XòrØ²´hô‚Aòhä&È¼+’º“0žII”(Y¢}¶±A$]›täH¢ÿD(Ð	
øEW}ýÚaÅ0Á~Ï=<=<’’xSÖû"V¬ºµeW²?zü»ßJ¨‡B¾Ú'3á×Ì¸“.B1üò/î('»!)Ï¢Ä¥8Ä¶îŒ´	w!•#Ë¥S’¤È’Œ×¹Ê™Ðœ<ÚƒŸLvC w<&Ó5Q¸²°5ÜÿÀÝpû_×¸ÓkSÿ?šJàþCãö¥wÀí-À½S§®]Ûg-Xô2†v‘Å«Z'otëÞXË?¢wüƒËWœM3NNNMÕÀí_úÒäÕ9¤¡=ÊÝ·‚»¿õKS}¡™ãg	Öwœ•9Âp§+"Ïž¸CØíîó1ÍÄoÞâÑŒQ`j*¿ûh!T¸Û;41pþ<¼Œ<ª†;|9†¢» C‡¨ÙIÇà÷ó;ÀjîÐ9qÿ#…{ÇÝÎúr™lJ`˜TÞ¼n$—0Ü£
&\Ý´=w¡ÝŸWù²nœRî„Ü=Ù§ [NÜ)Üå¬?¦!«eÔgº¤lV)¥² 'wUôrÆ€»’±Ù7áÞß¯$”­&e†É¤ŒîôÀî”¡ît§Le$^Y·S†ÂýkUpŽÀýÕWoÝß£pïÂ®®%½méüÍoÞ†•lc¨å¼s÷ÁîÎ¹»““SKp‡`»Ìý¹Å1´gÓbóCÜÊu3î3j1Oz ½¸Ÿª†;€½÷³þ ªJc­ðEc9Í°!ŸËçàê¥…e<Ù~êí:\}âÞþBÀ]Êk¶Œ¸¸w~Ä]ã¹¬ÂèIq«!Z\Á§¥äžMþ‹w%ŒÚ—¡[@mOØ÷.U}Æ€{&õ ‹i%õYL%ÅR>5¨ª‚Šu®
ÌSºÜŸé"Lª¢0ŒªVÁý‘"ö7ìúÍÛ—Àí»;Èý5
wÝío Ûé{-ÜWQ'š{h™´wõ÷Æ«—­ÊÜ^[A»L[\}8ùæ>''''ëp‡~?ùá›÷FF5´7ã¦"CCÏãÎmš}·Ë Ùø2…zý©ú¿k5¿yÝên?«sýÜ9ørw¼Ø	¹Šó=áX0:{7T\«›Ãnÿ
 [g;F'¥n'pÿ²ÎóèNÇeÔ<œÊàNŸÔW‘crôXe"jËˆ{‡áNGdÂé¬Ì@:´üaÑ|™~\2h‚;C¬d˜ý©ºÖ;[—ßgÜS–ÑòŠ]Ÿã0ôáTu
…yd±@H•³Š¬Èé´|D•’òü	ÛÉ§hð>À*|‘†DŸKuª\Ä°™”1–Ab¸··wó¤u{=Ü'auŠýiK“û¬vmµžwé’•çRÜœ^DméÞµ}NNNNÖáNzöâµ‡+«{Tî‚ÎöƒðÏ9`qµž	ÜyÔbùùÆSì$ ¸þÂ|-“>Ûn¼Báƒ7¾œ90á5î-§±Æù-_ðóÁÂl±é5€lë¾>¤Ã¯<]³EŽ,ƒÜ¿ŸÀ¢pßî&¸ˆ‰.¨¡Ë£Iðcž|JgW×~äÖ«Ó~êÊíq§÷/Û;wO,”MªGŽt¥â>’uJ¢pçÖ•î/ÜÛ>Èä©À]Y÷Ù¾;Ÿ]Ú÷gªêêü%ÐŽ“Ë(Æ#‹ñ!4¥ôôÈ¡¬pDHf$Ÿÿž&·qÁ‡£§Ê²«>ŒÉ§Þî†«; á2î¿ îàö†Ë îÿ¶¹Sæ¯L#îæeàöZ¸›GÜ_…¾ukÙßâGû,wù>j½Ñ.Z¹7uµ+/Ü¸êäääÔ*ÜqÞA{06·ü">m?øüAlw=`ò&ÜO­é…g+7Cœ Ý&`ÜéY?™Š¯ƒû©s¸ÃÛ	¶G“ññ`h~yfbhÀwí>
÷ÓxKø ©îûa‹»ÑŽp‡ƒ|3Ü¹~¸Ÿ´w!d‹ßþX½T¦Sng×1¿°ºŒ¤õ*¸óÉ~œœö‘gS¿psí†{Nqë©¡ †ìÉÇ{ŒÓýæ§ŠÁ]©Kv†»*IG0Ü×éT…ƒÈbÁd2æ²èOŠ²(%D :À‡ß\øSn†q	‚*
Ý®ë®þ:¸ï‡ªá>Ü«ß¾´	÷Ÿ˜ÜÉµ©t§À¸c·ÓgS-ÂzÜ¸ðÞ¾÷,Þ4zeÍ‹Zî~ó“2O_^ZDíkô¶³ÒÉÉiWpÿÖ•‡÷¦WÇ½yµ=äöü‚¾QæÈªœWÁ}!¦!ëyÊÅÐÂ	ã'^8‰|'n¯…û™p§ép?s"p_®‡õwÍNÏ†ŠóC0ãOáÞk¤À‚\Ý:ÜO’t·¸Ã·c¸È›=r'£ó öº(ÜÁ–á^²îøÓÿÜµhŠL¨ŸÞiHæ=ô›ËJ?dŒ¸§Œ2Ôíz=•Àérw¶ŒÇžI(ÖìZ«¤¹ÊmOîf2é”äÆ©É²G¸÷¨²¬Ÿ·‹Š Å‡C‹ÉÉ’’˜JÀ‰»œ$IDîGàx¯p‘14|q*à^wâ¾ÿ+PõÓ'}çñN˜”ù'÷-o_¢“2?Ãp§Ë é³©ôö%ûw6áþµÆpÿýÃ‘NÀ½díÉÍ§wõÅ½+Í_šzÇ‹Ú˜6·â<¡êää´+¸ë÷×n]~psíÆM¸)btÎ‹vNózÇç½Èž¸pzþÅ±Û·‚û‰)YKC..W Y^^^(øg¡ÂìüLdf~~æ¸e¸Ÿ©…û|~›ñhr:»3ßÙh:ž+Ìœ8Xo ÷¾álßpÁXíïs
÷Ž¸³Ñ$Sw¡`«<)ÓI6/¹¾pçP{‹J6ïEZ^r'xúYÂ	‰¤/CÒÂ~üÆe(šÚîB*…á~D”„TY/¯0)EIˆrÉ/ˆ¢"²¬âwž“:Ü].òi*
Œ ¸ñÐŽpïûòoÈN™ÿ¯p[yß…IK ½ ›ÑZnñæ¥æÜ×P{»?¹ÏÉÉÉ©%»?Kzz}òÚä…[w®®ÜYÛé"imüÆÒÒ“'O>ýôÉê¨-t¦ç'¸4ÃÈ}&ÎYž ‡«RÏ`aCËÅ\<öø€'.O§Ê±\haæl-Ü©Üé„û™ª*p'oœ¸Ç«$g:§cÃ9¾r—*çá´íwÞÌ§cþÞÞGC[0»¯²À½î§!îüQOàNÛî¤>óÃ©´nÒ >åpÇÕÂ½1<•œfÇˆ;…{ÇFÜ~pîô&Ü•k:¦pøî´=	÷ö·îyÙ]é_@×väËnÞïÄ–˜Ý^âP>›L{*“ç‰,~«bÒÎp—zà£ŠQ™“ }ë•˜ÈdAIgñ{Ù+!Ÿ÷‘çFŽ¸¦NÛ¯_'3î4cT†Ö×û˜”ù.´å¤Ýâ×¦VM¥[ÜÉµ©0ân,ƒ$n'KeÀíæ-îÏÁ£©…»÷ŽÕç“Wnîî#0šÓd—Úþtîªw''§–àN"‡î¯¾Šï¶~îý÷ŸûÆå•µQp.ª›QîÕÓÐè½Ï>ùíÇÐ;ß{ç“OGì0RHÑÏ˜ÁÎô\ßñr–>ZZ…;Çæ—#‘ÈÌ¬é®zóxXxÞ(ÌGÎµC_%?,d…?GÃp?Cà¯?^uÿ’,G«\ÇÅâAü#ñ| ¾Æ"mË[SÙ¨¾8µ ûñÈú*ÀÆ«+8ì¦Úð)©áŽ?#¨‹À¤Ë£§‹Ve\ýNC¥¬Ù1âNáÞ±I™`‚©=qOå9q¥ánH(a#†%óòÇTRÙ“'îöÁÊD9Ôþðq¹ÓÈð’´Ù³¥$ü=È”‡¼eRÂvpg¶âÉÁ–ïädAå„¢ø“Š *’@¯Ñ¥0¢ÈœvÇ»jån~6u¸o€Ü¾DFÜÁíU·/5º6õçäÚT:ânà^wûÒKd$d¸¸p‡¿}<n³Ù5übÅ"Ü¯Ü¹…OÜ½^ÔRãÍ?Ûþ¨Æ¿·ÏÉÉÉ©pZà÷ìk+÷ÖîÝXº¹tÑXô®-N¯®®ÁzãÆOÞúå[oýêWo¿ûî÷¾÷ñ“EÜþÈ‰ár7Ãýx%}»ÇêÍÓž Žå6¦6Ê<×Øö¾Xqvyâàa˜œ‰$p'5	÷ªÁ{®¼Päèw(Ç8|î>•ÏÏâ›£X¶‘h9«…‹þ~ÐÞîØMÀ}¸%¸5	÷§63^­©”×ìqÿSåþ¥Ï;÷hªîëAŽ¾ëdô_&ý'ì)É®M¸«#•Ã~õ/bT¦\wU*EQÛ+ã§_ã¬qú¾Uâ‡‚TC[]÷K;Â]ÅÁVNÜ¹´˜LŠ‚"ŠR2#©úŒûõZ¸ŸÆ› ÉGm=ÜáÌT;ž”Ùî wÓµ©ÜÖ&¸?kóV™E}ârõC‹–]Y{°´ˆFÇçPKM?nz¥ÌƒqÔîÖœ•NNNm…û7/\»|íÚ•ÉÉÇ++W§GGÆ§§§—>úí'Ÿ|ò[Ü/	pÿ;üYðÎg#¨Íñ™GÃî/nwh!ïóy<OSh¯>xç8@sã ÷üÆìür(+D¸ë/Lp'R¯‡û2ââ3³ªI™¨†ÿU,.œJût¢£º4_€õŠÅåÞÞÃ6á^ÃnûàSîæ(ÜIMÀÝ,R[æ%>ÿsçáîËŒ^Õ¨ŒHÏ”µ@<¡ÿ2%yýÑT¦’*‹‚”\gµ°áj7ÜÃ)ó6ôœYzÐ–MÁI¹ZÖÎÓî²¢(‚<… ŽÛ~»g6µÜUEÖGeDy°•wá@†Éfd9%«B&#2¢(ˆ2†» ªÜ!A8WAê¹j;t ºá_#î¿htm*†;¸Ý˜”!Ë Áík,qÿcR¦îßÙî°uÑÆ¼súcU7-nZyóêÊƒUÍ{oiµ’Öô6õK·ï¡v7vÕY,ãääÔV¸~ÿ†ßÅ_þþoL>~øÑLö—à·ùŸ¾³‘¯½öc"÷·áÄýo>i»D<å±3ÜO,„ŠÅb¡fwR»rØÀ—ó îØ¼u¸W¸s¹™¾Ê"± >”œŠ,„5ÖS?çNàQxaÂïŸ€A™¡†p§Ãè w|5»ÞšY™¯·î›r'%Ñ¯›äØ2ân†û: ÷œÌˆ´úqÇ²1U
fû)Üƒ	Ãí‰LBÎæ9äËüeœ¸“îê~¤øs<»3Ô¬iíf¢@[µ.w¹»¦¸pgR	Å-&ãår9½Î5åk>»ÜÅD
ÃýˆêênîŸ`:J
%U1™ÄdBPWÜ)"¼‚_Ý	îÃÃpm*¹}©éGSÍ“2ïàwâöW¹}+¸Ãî×Öl…û˜A7,.7¿xëŒðŒÜ^iî‹MÊùý[KsÈ†F>pË899Y‡;Q;û&Ý_¹cº¹¿üò÷ }zé%÷W^Ù”û¯Þ¹üÞv/Ë–áÏ,÷ó ÷ƒ5p×#p‡NDffNÌÌ‚‹¶Nã|üÔl!ÆZ¿ÿi‚>KáÎé‘·ÊxõìñYžjÜƒ…^w+ª¦…0ãã‹Ùú¿`AóâDïÝåÈ@-¬{Mp'¦¸ST÷WÁý˜ü*ö}ûÛ;ÃÒ½¯Ü‰ÝM7©öà€íT¢Õ_ïz†¦†<¨ýýÏŸèÅ©‚»ÇÏèÑ_jHÌ„Y:â.â_Â¼p
OÊ¸)5µžMÆ9ýÑÖÒ^‚»ÐöÍ/õ}Ê©ö?iñyÄG¸—Ýb\Ûú0[u»SdÆ—tÓé0ŸË®5²º©¹Ùz¸÷ÀÿU`m÷ÁîÁîd YËgþ”(•’bJE9›ºõ´ãð+RB†×HÛÁ}ÜNo_ª=pÿ»Í%îîøÑTc‰{ÍNºÄýzàþ¸ýæGSá¸"lÇp¿‡lÏ:Ü/îƒ‡fWßiÍÕsMŒÔ¿wíÖƒ«Ó^dK«—ŸÞçääädÜ¿¿-Ü?YCí-œèn
î´ó[ß®Îy¹æÔ©Ù°õµÝ–áîç«7ÆÏø+Úcy0{ ÏšÑÈd»¾02ïöôND&ÎowH÷y?´ÜûÚwó=ª†Ün|­ÜÅ4kÃˆûŸëáŽl.¯4€»œ˜î_ê†²Aý/FIúKéÒz:“âÿ}ªgÂ=åkÿ¯“».1FÓÂSú'ÔYr”6•Å×­æämgxØãvËy|¶¤âÍE™PÆŸ-ñ,ž5c-ÿ_-ÜYfzI•Á×šeXëp÷•B±#§äTFVA]>qÇGïðîƒ?já•lV>vèP³pÿW2)ÓÜáÀýç»„ûsßxnî°Ñ¶¼‹ÞÖà~íÖ%0ûÒ­¥±/AzoÇaœ÷î!›šþðÍ}NNNNm…;È¸ƒÜßÀr×geÜ_«ÌÊ¼Ýöw%îv¹ŽïïgÔŒÊP¹Ó‘üÂÏk8TU`£XX&´.‘ÅØ™çŸ?lüàgq”ïëÆ7áð­®ðljÑ¸ ï¡ß§Îç¦ çó°ôR&¾•äó|841pxbè(È}€šz[¸C“&¸Ã’wryª…]îPŸ^µÜiX v£f‹ªàE;–yNàN–Êtî\F%h7Á]‰{ªÏn»!Ïh„¥nW¢ŒÅÊS¥ôz˜Õ…IÍNöñì¸3ëšýp‡˜D)Î{6ïöòSe}®¦'RÏKdd'pÙõ’â†RÑ-<—žjä™õ¤˜Ès,çóq¨µÙ¸«²ïÜ*þ”Ë]H#ËiZ&NH‰„
I‚À¨ÂuY²ËÙÄõÍw%“ê?&S¸Å×§Ë½ï×äö¥Æ¦ÒI€»iRÆq'Ë O¸ÿ âö—MKÜ¿ñ¾wØ*3mã€ûÈœ·¥Ñ‘n_¾ºè]¹rÃ‹ZiüÁö‡í““—ïLk²îûœœœœ:w,÷×ð‘û[äÈýã'cí½QêîÖ—¡a¸Ã‘»žîP5Ü¡H( A>>ŽF«´.ÌcCE²˜/}·îä- p§{*!¸i«å‡>ÞG¾…æàm%š«=ò…yx©ùré\¬xwàp$òâÑ¡Ã‡‡Ìãç•×(°ëÎÃëá~`xÿW¬ÁÈª9x®ÀÝU}‹?‘lÝ×{Œ î¶¬qÿ¯*¸þŸ{^"?E³Üy†*KŠ1)Ã¥¥d‰G,-§Kd‘Ïß³á®xP£Gàõ©ª*ùsÁXz}½T^Ïf%U‰¡`¦ËçPB]n©Ì¡`Ht»»òˆe´Eé.øîrìæx|.ŒvW -™àÞ…ßƒA¨À)µ ÷¸\ZÏ¤ü%EÊ$—()ý¢xÙS)|â>|¬’%ùæ•g‡ôúuï”¡¦’%îîæ%î_»’¸¿S{à^wâvwìqß„ûƒqûà>:2êµv)éâí•kWWßoíÇÝn­ËÓ—n­Ü¸·ºˆlnO½ ³2ÎVH''§ŽÃ½Íë ƒYr‡ l1nîP$Íû0Ê>;»0?[,N‹Í¾ ›4“c‘Å<ñ…‰&áNÞš™8ÛØíù1’æ‹ä4¶rò¸‘æ5-løðŠ‹x<n¿;3qê…À¶Ö¯hÙîðÃ»„ûþJ.RwÓpOEíq§pÇ§Úïv6—Àý€?æc	¨Ð£nîád)èAZ€çóéõ >R–ö"Ü%²õÙTs]J2%ÈxGb—J”“xX=ˆ4?>aÏ„’‚›´=Üù¬[(ùª„v—OQ¸Cø©kU–[?qçü=þLH’2©T)éê%™,kxTfø‘ØÑO¹Á>†·_?Ð§OÊ|÷;ÁÜŽáNnM­û»VàNÜnÀý£dW‹££dVfÍ"Ü/]ýàÊÍÅ±Õµ¹¶ß›úæãÓ£²»ñ7W®.­\ÚçäääÔ9¸ƒÜÛ|âK‘Íh&¸Üî§–ý…Âl„ü×"Ë!à°ÆåŽc“Ná'G-ÆñS‘Z¸“Ìp¯¼5Ë˜¹r1ª‘¯…£@º
Üµ˜¿FZ¾÷á‹UcåÂòÄÄüìÝ£G‡Žö4„{ß
î=Ù jÖáþßƒ;»®0P=Ü“eãïQb	ñ@7.¤ô…=ˆå|| ˜“§W=!f/Â=Í¡6—ÜÛ`§	’RKÁuÅ1j—»)¸kÁLÂ·5-š¨…;#Š¸Ëqd9_R(e¢œÎJ™ä¡nA‚9^îp…~HÅ~Ò°pl›w×õëú¤;q;†{ý¤Œw8p§pÿa#¸ƒÜ_Ùî0ßþ:…;ž%·)mqÜÞ
Ü¯\}p	Ö¸yQ‹Ï¦^Üb‹ÌƒVV½¨#Íis÷n>tŽÝœœšÅ;»i!$dÀª…;‘;y:õ-²ÊÃÝ;:²ˆÚ’'­¸¸÷}½÷èÐ‹_%n?S]-Ü!Õ›‘Füpz]\ÖÝNáþBÚƒ,Çñéù³Üñ3¨Ur§p?Uyküª…g+ßÀÅ¦xõy4ŽÓ€ó³þÈ7xVãóÑpÜ??3_(Ü€Q™óP=ÜáqÓ¯ÄÖam†ûwLÊ4wò’Â½šîxZ¦¢ø‡Â½67Há®‚cÛÞçf¸Û?)“èO—ÁrWÒA¶‚I?Ù’Á³×äAc>è»ƒY²2“DØ¾àÞö`^ÜjrBv7HbÑVq\ÛýN¸µãÉL8¥¸Ç’É´_RR¥DÂ/×³àuýyÔLZr¹ú!÷aøx·ËôÓuîj&e®_7n_¢KÜéûv·/ý°jäÛ¦Û—v„;Ž,ƒ|öÂÊ¨}« ½tÉ‹•.=¸ra©u`?xºñw{g|†î;™wÜÙéäädî¸gÍp‡#w;•;^+CáþšqÓ;ŸýnñwŸ~öäwcm!R6¸ï¸Ã.s8s§l¯ƒ»ö¸Ÿzaff&BÜNá~j>ÚT4.Z˜™8[wúýÖì—?Q¤i²2bËóø4p»¿@|œç‚>Í·±<³Á¡Ø<¾–ß({åâìÝåÙÙÈ 49Là^S–»	îpäN¼Þ î°V¦I¸Ó»ŒjáŽ3£ÓëÚÜkG£p×Óœ#îõpGv¦­‹À½v$›O¤’’bŒp Üƒá ëóUÜm€ûÞ»~I‹«î6Õ•¢r7Ã]E|s*Ãœ×­]ÏŒ õ„?”H¤dE†wY&CÉøw’’õ)AûMp‡L'ît§†ûO(ÜéíK0)cî?ý)½}	oq7»ýõj¸_|8bßN™E²Æ}Äê£š/¼9yoltµuÄýÒÕ9ÔùàW§ÿeïþcÛ8ÏŽ«U–Ù¦ÕXVlØ±a'ÞTmH5A -’µÀp±µhlYþè–KDBü!yä¦J¼›$’:ZO$ER$%Ñ–dtáÕ¡lÉ’hËVÿ(’EŠ¡)Š (†ýñ^‹ÄÍÚ Åž÷^ž^I["u™é¾HMYs¬¸™Ü^?÷¼ZZZ¥*v{Á¸–;–‘á^(÷ü…ÿCî¿üù»ï|õ_ô«²Rfö	v¾ðï•9p¹wÊ]}3Qþe”ûª Æ”LG‡ð±;®øgî‚ÜYqó ÞiErÆ´S£ÉŽ¹DÑ ¸[m¡`GØ‚Ä¡Ëc&œeL©Lxè0ì“9Á/ûÄ‰b¹!pa“·Rm’áNå^öRÇ¤=G:D*úPŒo’¯}"5Aàx!Bõ¸Å*Œ¸ï2Ü‘5ÂÀ¤_·ÛD$ep¸l6§Ó¤X)$?Ê`3Ïî“Âd§j¯=Ü³R5fQÅghwåîËÁ\IÐÊÎÂ:ÈFŽ;5BÛÏH¶¼:ý‚9ŽÙî§c©·éávs{ïg›råÃ=÷ZS'^âN–AnwRæoåI
w¸6•Ü¾DÝŽá.»]¹Å]’;f;4²P5ÍÀ³©Ó"†ûpCYí‡]Šw—ñ„»š×/ÕÄíhrI–ÑÒÒzÜ/^Tî°òåç_~þùw~>©Æ3€Â©'žÈÁýÀr{j™p?ü¸Ÿ‰9+’Š(™h°kK¸ÄsY3ÑM³Š{ÀˆoWr¦£b¬(ÞèH$d³wÁßeJ'ŽP,š¸|øüùsR`k
wªh
wh“ÔU‡{'¥;…{|W	w½^	w![÷Ý†»Hå®„;¿fåmŸ½GÇX­õ!v_}ÂÝ†êîÿºËpGb–£p—’àÎžbåðŸŒßÛ¼§#k`vÇ¾³¼€5åXVà9î-ëVO>ow¼SÜîÊI€;=pÇpÿÎÃÜ_ÃîÂýútõà>Ú7‰!=3VæûÈþK×WnÎLVötrÿÍîúq;ì”oÐÒÒÒ*÷îÞ±±ñ±KåÂ¢p¹¿ Ëfeà¦/¿üòóïþLD;+Kp'!)Üi
<oîC è
38Cá7/wœ)¨CB»\ÚŠH¢#vvsl†q„\ŒôšÙ01F²AÐd?Þa¶ŠÉØP0`©L&ë:Œÿ|¡îž,<ù>BàåÞs ³4Ü;¡"¸Û&ÜáÃ*“ÏÜ[ Éí-¹ïÒÈà…;ïBª÷á' wrÿÒG¢p¯jI¸û\Fô€äÏÓ¿¯NánAÚ‰ûfV…»4*ƒ/`‚ÇS=ÉrÈFŒÒk„_\óyü>.ðêðVæÙ9Ž¼|[îmÍ}ÂvÂn‰„:<¦Òwp{ÑNìöÜ•KÜ	Ü¿LÜwÊ¼¸5Ü{§zª·NÜ1]aä¼¬F/öÎ,/Ü@Ó•Œ¤OÏÕ|N†6°¢ít×ÒÒ"No¸4>|íÖp¯üŽ_ßšš™™›ºtß.Ü¡RpÂn—áþÕ_ô«±Ú¡ñôU„;”¶‰¨ÒD‹ÛÜƒ›VOEÛ32êD«Ó*â	w‹Ëép¹¬03Ã KúrGØå0Ã®YWÒe²Á€{°¹Üÿ?Á½Û ï×îÞ’p7;Aç[e\äêîŸ©c¸ÿï@»›a÷p›pgyA‚ûì)![Ü!†ü;÷…ìžF³]ˆÛ]Ëµµy<MMìUÞ'lž¸^=^WÀ½3îò÷ZÂ]¬žYÉV™þ2§¼÷6Îõ/÷ý+{ÏûÅÃâgpkÔô”öxª––IŒ_¹r{~eybåúðˆtœ1¾´Üƒ Ñ™Û—JÃ<ŸZr!$•;ÀÂ§¾ô¾<Ã]ûSm‘ÆÓ:éy0>îøöTÐq¥pWuÐ2:7Ò±¡ÒnÑ'èµ0.î"»4øÊÀþsz#e‚¥îV‹;ŠeÒ‰öp*Kl­I{lèòåæswBêDîøQRþó¦ÊY¨*î…{QîqFÜõŠt½[µÛ ÿHáNGeªœÑÎ*ÌNÒ{“[ÃÝ ·ËÕÜã&Õÿkúœjyœhwcl.WÈCáÎKpo-ëÄÝè"ÃxŽ¸/°æãÌ‹¾ˆÕµ±óðÇû×1ÅõPïåômMúœÜ7¿†OÛG:›òáþ#wâv÷/OÊ|·xRFZâþ5:)ó’¼Rév`»´S†¸=wòdjõOÜQOO/“÷ÊêâÈHCïü4ñÏ€Êï·ýÏ`¡ÛúP­ZÖžNÕÒÒ‚?ö»9·º:Ñƒ ÉÕëwîÝ»2?‰rM,\)qèŽË¹ËgîÀW(wéÈ<ž
rÿåÏTpçO76ž>Ú
áµ2`P0çs'Nœ—äÞÊ]zí‚šsI«#h¯0>^à²£D“#=#1ýo—¾ûì³ôÄ]tÆ)òÐb2›MÙD²>qÎhMtÖ™‰Å¢Q³9š'Ò€ûF,8„>úèù\'pXÔØÎ2Üå­22²	©¶ËŠ?BöÉšã—ùÉßÍý_óŸ÷“'ÈSîäÏñ%kH'ƒÊ@ôytgí&¤zŸÔàÄÆÔ=Zw¿‹ÙzêÙ¿V$ô˜–‘º™Ì*^å@»Ÿ1ràŽ›å…}Ø½¼w2ŒçŠÇ“và5›ñ~[Ö÷²-œÀ²0ØÞ‰áÎ²¸Åb—®Z‚oáS*wxG>ËÈ÷×e·Ëp/õh*¸ý[?ü!y4õëôÀ^›ú9pÃž·Kn§+eÀíîÀvÜØ¼ˆª”80 Á}úf™'îÝÝ—–úúû{`1Í@óvï/œqÔÐíâÜXƒ––Ö^oïõ~D›ìë›˜É¿Á¹eiüâþKƒã·ïŽô^*îÏ(àþ¼
¦šÙÓlãir¬Iá°Ä—{(ÜÛît¯LåöDNêpSNîðîtQ¼#¶Jû½Ó‰D8kÀo¥ÜöD¤çˆ™-–L,‘0ÛÓöÀ†EDÖd(èh†?vž¦„;N†;@œ¾w¸ŸÜÜAÛ‚;Iq¼¯„{þ¥L\È¨þˆ;Àý÷»w§ÿhÜ[X¶5[·³(©náîUWïÀ\ƒRžÜYžßm,îÆµHî¾ø¢m|<Ë± ÷HÜ(ç<ëlÓCM‚ŸõM¹KÍ©Â§•wOÊ Ü_/îàvÕà>¼ŠªUÏä¤Äî‰[e/Z ¸/ÏŒŠ7æú+¸¢`c÷øRª!ÜÇ´´´öxÝcÓH™Ø#¢ü&çn.ÍÏÂ½Ëó·{ý0¸¡$ÜåUîrwU…I™øéÓ:p»î M|ä¤…šåŠáþîüáæ-àžp«ÁSÊŒçerW§vHp
t‘ŒdVC6ÑÜl¶áw„ÒötÆÉ0VG&deîL(ëÌ:M&ƒÁj³„Ò4ôëTÂÊ¿‰\À®V¿Ë‡ñî²±OÂ¯ îP1ÜñÇÏÃ;Y#O	Ÿƒ;•;·ÆTaÄÂý»÷”G	÷F˜]ŽÄíŽ­eÜ…Ùë	îœST{1û9µ ×îûöåàÞ:{ªœ¬‹KÄ/!¯_°{õœßëáV¯>^ßÈrïçX2(ãØÍ>Þ’oDØvï”àN?ËžÃ;e^§;eˆÛ‹àþ
w²²`äKÃýÚrõ&Üûû§¥ï‘†²ë_™E£÷nV ÷3îÝc÷æ&‡jÖÀÌ`ƒ––Ö?n¿6×‡¶ª§¿rz ^º5ø¸Ó…Vw²r'î"c`¤×”ÿ4DáÞ†áäTÀ½ãÁpén÷®pÖ(ª3ˆ/†{4%Ê^KšSdËÄPsoË¶Â±h8e5:CNéj«Õd41ô-t:ìº|äNþà î”‚»ìv
wH†{SçfjÁÂpWt ü 
w\î¢ú#îî”áþ¡wTíœ¼îl<ÿòŒ´UŒÛsªná·Šu{àZ®I¶x+;ŒÊÀ·û`«ŒßQÎ=Ë6Ù|^¯7àkÓy¼~!wÖÃéaRNÜàyŽˆ·©îä5ïó—¸¸“÷/)Ü•#îd‹;]âNGÜ¿IáN—AR¸?]¸÷`·Oc¹^¿TÜ§æfúa<|jºü÷û-ßî–Ù>xg®¾ø¯]“ðu‹––Ö^®ûÊÔ*³Ñëc„;ÙIàNè›ÜŸy!ïÈýUTqpÞl$—K²îøËZ¶„{G¹pºH¥ðuª wâvî1Çæ;Œ­0Ü3Í]xG¤ÑŽ¾y9J90Ô.L6«¬>S2N\î8nÜŸ”×)Ü/<î ¦N^å®ÜI…p?‰+w>[…wÜwkÆ}‘Ëƒ;±¡meJúOÜ¿§µábª‰IÕÖÝðIÕ¦$GàÞÊ²GÉŒ;ŸBÛÎ`3‘YNowE8ÖïXI/ÁÝïó{9=Äyí‹ÞN½bTÿQ¸ão¤%îtR¸CÅKÜÿIávîŠ[S¿)ßššc{ÜÜoMTîÓ==øùÞ
à~óæÀ}iE,ÞÆìVnäNÛçûÈï!5kz^;q×ÒÚÓ]º{£•Ýäü•‘¿„`“ ;•»÷¿ú"$ÃÚ„ûË;Ùixûm#~q vø‹„áNÈ	pãŠO¥ßb×c·“õ ¸ÃÅ¦)ƒzJ1mD»àKîäŸ"·Æ]Äƒ2Áö¨KÚÖÞt3Ht˜‡†º‚áPÊ’Í¸ˆ±ÚàÄÝ "xËJ‡‡::àç’{ŒÊÀ+=Ÿéäà¾ù®¸Îµµ•†û±cçÊ€{Á]L4éƒn¾¯ÆhÜ„;ëñÆCÖ*Œ¸Ëp¿¿‹pGÖßØ
Ír,çX·{oð›õf-‘Ùz„»©š)¢Îw/O‰¨F­¸K’âÖÐ¶c"ù:Oð„²vÎ‰s:¶EÇ®c¬ëX–‹¸}«‡ø¸ßÃ7é•‘ïËÏ—#øÀ}«2'ßšZ°Sæ«…;T<)CàNVÊ¸ÿúöhõM%KaÄJà>|ýÞÌ4Z™éCe÷¼‘jbipï•;3£ü¶ÆpïY¾ÓÛ½¿AKKkv±Â?×¸±pkplld[pA÷\¾$ÂÄ#Ý
óíÕ†»Š'î“ŒvmÂý|D2â.Š ¼`{;¹3 ÷Gñ1<“MtuÍ.«h°<fa²EdÈÚÓöp?Ûú@¸C2ÜŸÄVÇ’&p‡êîDî>¾¸æ0êÝÿ/•¡£2îU.ÉÃÿ_
‘P(`CÛK\›=Åú#‹.$†Ø:„û¢©š5þ9ògN+ªU¶ølî­­À’fÜ×ÌöˆÙËq>³ÐÆ±ºu¿GºrI¯‹»½z\¿òÁMaÅp?» ¿n Ü¿'ev÷§÷{}¨JH³šP%CÞ÷–oŒŠheµ•|Ñréîõ}|@à^K¹‹£ó÷´Cw-­=ÛØª°Éå™¹¹;Ãc# w ;;‘»<äÛ_÷§r—§Âûk*\¾dÈúOKQ¸7Ò!÷Ê›óê(/d¶€;Þ)£b¦œ”Ë{Üá5š[¯gÜH´··ÃY§%óhÚŠ'g†Ž'2›‘b˜0"ÁõÈJ„£¹{Š÷Ãþ%ËÃ2¢é„Ñ2Üá5wê~¢®V.˜9pòÉGˆØ‰Ñå%îÊîÇ¤
ñ~¤TÜ×A¸¼¾¾~¾Ç±,ÛÉ¶°^_|-e3ˆ¨ý¾&'îÉ§Óy“†² {P¹ÒèD=ž¸Û*£×§†Û]¨–¥¸}¤£­GR¸—[2’ŒÄã~–ó,³R:¬u½Þñ{„6®M0§ÜM01#pTì¹kÍZˆØÈ=šúc²Äý{t§¸Àýo
vÊ¸+vÊ¼,ÁlqÜ®€û‹ÄíÊIrùÒ.ÁØ^Ü/64,Nô#Ô7ZÁˆ;ûÞŸ€¯ü‰Û!TÓ&´ËSµ´öjÝwûÐûFWïü¹îÀý•WžºÓ#÷wWvL4Æ‘^×ÁÍ4Üé;È]>s'sî…z§‚oÆm÷3aƒT,¥p‡b9sXÌgÛ¡`03G‡6d±G£Ñ´K³[CÒ ÿÒHÍ™`pèøæMRxÃ$ðžƒ;”;üE¿¡«eJE6¾ Ü/\8¶M¸{0ÜÉ¼çéßõ{CÉµ@ `÷ù#¡ÅE»Ý±;-6U«O”pÿp÷àçÍTF¢Ãëw‹bÖ¸}{àÄÝÁêÝŽ¬ñVYî³­î³!TvkñµÈ¢Ýï1›=-àvü€*¹uiÝgöyYØ&Ê	¬—kòF„b¸Ã›î'ñÈä&e¾‡áNÜáGSÿ:ïÀì”¡#îx‰;À>š*_¿$»½¸,ôWîÓd	{?lU/§K#Ýû§æ–ÅŠî_úÀ¾î—à^ûwhzI{@UKk6rí´‰¥áÁÏãßÄKÃËÀNÜAî¯ít‡» MF¤o}8ÜIÍŠÊ…{ÔePU*á.ÜSŒÄ´TÃýìÙãgžm~4lA6{4œN§6d…ýs0c‰ðÓÁãCÁ³gH%á~¾ îdæ…Dà~NÝ·„û¡Ã]xS€¼Í#³9¼è´8œ#qŒÑâ´2xÈh2¢*öáÇµ‚»Á•2¡²2fsûá¦ú‡{ígÜyõ¹PËÊë;YÏlåpwûÌ^ßÈ…ì˜ùO›®‰ÕCMÞPÈ×†y¡E¬ëÛXŽ-wüi›;e€íàv2)Ceè¤LþNìöÜ2Hòhêód¥¸ýÕW+…ûÒd×¸Ocx¯^)ïxjøîXCïÌÂµU‰bË KÁÕ¶•kZZZ{²ñh§‰Ó}ównÞì}º`TæÅ%¸KrAž•ùéÊN?.ù7ÖgOËp‡`+	l„¤p§t‡r“à²Ò)Ü©ÜKÊDSªZÅš’®_Â?9…»1l&‚íÜßt3ÌFÂœreÌv‡Ñárdá ÝÆ Èfo‚óv´‘àÿ¡p'¿	îÄêîùt¿€#¸.Šìq¸c¹Ê‡û9	îç $ùç='%}ÌÜŸ/æõ†×²n÷ÚšÓˆ3AV#ªE÷7áþ¿»w$Vúwg)Ü)ÏkwÖÍ U3vÄöˆ+»fCµÎêÃËdlå„Y‰í•ŒÊ8í¼®E×²èæuW¯²¿ÞBFÛ=ÞÅ ßq‘µEw„å@:'¬7•‚;/q¸·ÿ£tâNv¸ÓI	îÄíßÂƒ2ò2È‚	wìvºÃ~CWŒ¸¸c¶Kr·K]Z¨ÜEQœ&Gî7ÆË;p_Z¹Û0¾zóö¹ ¤Üî×á‰;š¼Ù ¥¥µ'»6ÔiúÆÔÂðã!sw0=…Ë¸ÿtn í4Ñö«ü˜o¢3î8…;!æÎáÞžVw†Ã
6wA2Ü]"¶š-}¶=ŽÜ»`ÑŒ	9Ì‰ŒÍ–$‡ÕaŽe£DÈ€Û¥9òx+TîDÑ$
w…{Qð:ÈýÉÒp?)à~âœîë±HÚm³YƒÕºßn/†ûïP—å÷Õ#Ü}j¯q7.îÄí)ª‡l¾ƒî³³xÆ½•÷
ÀÝjqy9§‹¯ùuð¸ve×éñLÞø"¯ƒ„ˆ/d‹ë9<âŽ—¼—†{ç“Åî2ÜK.ƒ$pÿúvàçí%Ü‹à>²4Ô­g ‡À‰ÜW†ËpŸš¼ÓpåúðR?ª¤êîÚ^--î;m`náÊÓ!Ã.–‘ÎÜñ.÷o|ã?ùù4ÚaŒõí÷~óƒÄÐUÀý •{cÀžOÅ†„-(çòNÝé\L‰:h|9Õ•'“L`¸w@ßa¦-ãŠåà~Žø³VºÇÒöÌ†ÃêÜpÜÑ¨Ûj•Êl$àK	2ß~\ÏË(äžÛ-¢>–S»Än…ß¡É€—ß:	¸Cøo=²“¨Ü•“4îëf·ïü©§>ù”ÁqºÖ¼GKÁVµCq#ª‹QVÎŸQ]dŠÌb¸ã0ÜzíþETvN·ÓÌûyÁïóèpœ_€ßÐXÓ=â`­(oö¹L^½ŸoÓ7±\§^ª‘¤‡0Üacì”‘nMý‡Üå•2Ôí wâöÆn'£2xRækòN<)ƒáNÜpß”‘w¸C˜íØíŸ‡•2ÒœŒÌöÏ~ö³½S"Rµé¼M0Óš(sLäÞüpÃÝáñ¹ÔƒÊïOu	÷¾;´´´öbWVR“îw¿ð`¸ãY™w†v”Èˆ¶÷ÞûÕ}ÿ?ÞøÑÕÖ"¸wæàŽ;±c¸›-"R5g,î0ºŽ¯B5e‚gÛ‡‚A÷!»‘	Ó°;&ã°%7LÆP4š¸L"?+Q½ îî8wªì]‚û›!“ˆê¬>þ”ÁÝåå9p{Â}6bDõ°r6ä€l"ªœÞVwøÃÝðF*øYR–8/p>³¿¥QàñA;Àý*ÛÄ
·˜åá77/i0Åõ<Þå.ø=MÅpÇyî²Äº]	÷o+Üéˆ»òÖTzàþ¸—	÷+7ºM®Þ˜Ü\ä.É{u¼¼÷±ñîÁ©¥¥ÑžÕ•
FÜpÿ°Nà¾:Ü ¥¥µ'›Cª¶|ýÖàãPî¹Y™M¹ÿdjí$ãÛ&Ã{o½õ›×ÿåÿ)=žú
wéòT<,CáåÁ½¹t
·WõÄ]´™» g!ü³'­&£Á˜Œž=+m•—˜™ÒCáŒ98œ!·É–4/NÛh$Õq0'?Z†û³¸f½Eõ©<¸“€í*€{4k@u×ýOÜNÞ	^—pçj[Ùd¯äcÍ€ê ÆD^‘}†û,7‹Geâ©
à.˜,Ïµ\|l£?îü7Ë²œÇãõ5z×â³ wÜÃÝ+èKÂ<šJ/_’àN'eä]ß-\â®ÜùZn¥;¸Ãý‹Û‡ûµõIå™™üÖè½îòN…>¶0?Ñ3zm¡¿ìC÷ßÛëp«ÌõKZZZ{2ÕWwMNÌßûÊàWJÂýÕ_öU¾JõˆÆ÷Þ²½ýÖ{oý7†ûºjÃÝpWy“û&Ü›&«‘±¥±Ø‰Ûÿ½ónò¾ï¸ÉÉÃ	bŒØCÍJëÑ#]Ü’ôèmíÝî’ëÖtäÚ­·^–ôšë´ ôH–'Ýi²MÆ’Ù;	IÖoËvWÙ"F²1¶Å/ß¦Ø¾˜,	eÀœËõ¯ïÓ5K–6»vŸïóÕãG’ÀR%E9žX–,$“/>zßoB¡°…ýEÅ¶xÂ“HÄc<j¤÷„½5-î¡	9ª=>Î+î¿¬Qq×'ÝÍµ+î„>Ó÷®yØfÕ#Gµ€:êÃê®4˜3âÞl¶qŸwQñ°AM;m©(-s:iö(gè«v½3žy3LÜ>¹õ*dÜAÜ!_XÜÿE$îÂÀ½zâ÷Ê Š ðÞ4\œ³nÄ™’®Îij½2c4¡âøð“Zœ¸]«“xHé¾ØÊKdèìðÙé7»±¸æÎ‰û±¥îK•#õ²bùƒ%íÒôg_ÿG.+ƒÅ]|<õ1ÈÊžœt¶[KwpâòÖ¸
[,#îííq½B­VôP‚¸ÃÀ=‹%lñ°!áóÄC~ðÛ´,›
Y,xi“ î@>qÖ¨f#®„Ì@>È«)VÜ÷RJTƒ|úywEÞd‹{Cíà.»¸kÜEy{T+—+jCÛÙžà³®àÂ}Â¨™æ¢2î c@E£Ôûì4÷S.³Ù\¥íÁ Ûí”Á
&»ÛnèsÔ:Ý>%ÕT"î›¿2øhêk/%î™åK/’¤Ì
$eÄ%îÜò% ’2‚·‹;Må½ˆ;ñv`MÜOULÜF#˜{dºèýà'aæ{¡f¯_*VÜýÉG@‰ûÐuià.!ñðrâú*301Î_{ó;¼¹ƒ˜û[s*TÊtZ®^º¥½³º¼|géÖ/ž}ýõ‚¬Ì™}û@Ü·dÜAÜÁÜ±¸“š{yq‡±;¼ã9Šy€¸Ã‡¸T¦Ü!÷vK\Ã*µÚ	ÿ€óvK\­·„}ñ˜ßÓ§±ú-aÊÛÒó©¹QýÇƒõC¾.ÁÛyqÇ÷THºã‡ŠÞˆû1@,î‚Ï‹Å³“ Ÿäo.«Ûîã¨öøðó$î
½ð…/€·çˆ{þŠ™‡BÜ—“ñ©QÍ ˆŽ64Ø]Q—ýQ^Ü›G·?òàö•’qï·¹e[ž$ãtÙqi{ÔIÓgd²&»ªfôº™¶SŒÌîbðÕ]M¹ÞôØcÛ¸¤ß)óÊ½%îâ­©øhªàí|Ä_¾ôWÉ{;ÏÛ¿œÝáîòxFÜ?7ƒÊÉ·›FS)â~r°ótï¤Íœ¿8f,:oWƒ÷™K’·KH<ÔLPùaUº³ç¾“-îàí&T¦å¥´âÖjzùƒ;ËÜÀýÙ÷ +#÷æqßu¯¸{6–$î-‰²»‚žjÄ½G®Ô÷øbkâWú .“y)µoÁ2$B–ð¸)má=pGyqo)QÜÅ¬_Ü>XÜ÷^XP¢Zã£Bâ^ƒæ®OÚ÷=Tâ.OÙ×©í>½¶O£@5›o'`q'4Ó£œ¸{\‹ŠE©öÙ™].[”ŽFÍ2Ù(ÃÐ£vs½Ì…ÈÓ—2Cò–¦ÊìTÒ±UVpäþ¸ç÷ãùÄý_‹ûß+îóâþþu]…–/áa{@×.ÖIg÷©éë#4wyz¶èˆû'¹÷*üã_…L:cÄh*àí'ê$$$fNÍ¡Š šzëkYâþæYUi‹kXm:Y^½£¼õA:}'þÅkï½‡³2p<uß@w(5q‡Y2i!'þ	3÷F GÜÛy
‰»Å*Zö{–¸+”[ø /î0p×ÀÀÝà…¨x<ì%Æá˜…‚=Lžð@ÛžÍG;0bqq'4bxgçÅPš¸dû’XÜQÇkCµÆÇŸqWÚ\ô¾‡KÜÙ	óº"2î>9ãRe
DPÃVþHªV‹Øqf´!WÜi;]úÄE³!è³ºÜnmoÆm2v0ø«®(å0ÏO0õŽ EÑ²]î¤KVPÜ·í…{FÜ¿I"îë÷?Ç÷rˆ{×´*Pæ‰°™&‹÷®s×/™ÐÔµacÑË—?©zTF7Óß?4;{v’ì‰Í¡ÿ²äí9Ût§š›~ëk¼¸õ?ë|~–#1òå[iœ’Ñ°UËw^~N_qÇS7É¶lØ-îÜùÔ§ã­ô°³mïANem°¸^›²ì2°àÅ¿ž”{ãVµ6EYÖÄŽw.XÀÛ-Þ0µ„â¾åÅ|Úqÿ…FxÝ`Ïf^Ü[
ˆ»¸r}âþÄ:ÄÈ/îÇDúp‹j‹Oó‰ûýjeX9èZõQô$íÍ[²ÄýÑG¥¨LCƒ™fóy-‹>ô®Œ€k\´9¨å>´ÛÍã{#î£‚¸—r‡mN›'Øt;œt3Ô¶Ûá]=ô¹;\0{7h¢õŸÇûÝ™3…Å})qq']÷IÊü4+)Ã—AŠ·/}½Tqïž Ê`Š¨Èú¥b—ýoìêê=ui©Æ&‡P±üúWÕ÷þ+Ý§/_¼<_7"Õ½ùvÉÛ%$zÏCOnEÌ]~3s:õ­Ùõ>;³÷LÞY-4@Þc_½µœÖÞzïå—Ÿ^ÇÇS›DâŽÍ¯<Ä[é!>¦Ú?n‹;¯ê…Å½üáy*\32Lh{â^lí˜^ƒÞ²Ä¡˜ßOùcþ……°7ì÷&laÎ˜Û@Ü9Z0`íâíw`â~5ìÉª!>ü]qâÎªSÐãÓ§¬öƒÐúp,µÆÅ©º¸;mj­^«@U…Õ’ñºÂ0JSÏa†0ö§R©TÒ¹ï"ãöÜ‰»ÓüÀø(ª”»<Îø‚I}¯`jF¡/b¢(øÒG)½qC?¤Øt8ÇÚ¹LÇþK¸qç¦’.Èù­©…“2ÄÛÿ¼ýoI‰»¨S¼}â~zÄT!o×é8qWŸ(VÜ7vÜ8mDÆ‘©Hñy»*‹;x{§íº®âb=HÜUl`XÊ·KHHÔu:Ï•€ussDµÎl¼Š4*X0]•Â$‡`ûÒ­ôçîÜZ‚±û7¿ù2ÌÜaäY™3Í‚¸oÿâÁÜñ_`;ÖÄýin—ÐNâŸ›³ o¸·T ãŽzü ßØ¸c°WI‹;Üù÷ð„†Úï‡ Æ=á…(_"Öa	Û´©PcÀMÜ[Dâ.PHÜÅì%äßÅâŽCì™>M!-³· ¸ÃW_C¬¡vø(WÜËÿµ›Û7*×¦âî%ôÕUE}Þ×¼¸¿¸øDµpè«X9:ºaƒÝ&GUDN|½/êNöÈYenhhf¬J_áîMÓ£`ð<£2Î +(/%7Ä8\ðÀvìíXÝ¹‰»ð.‡¦4VOÒå¦áN¶ëð.¾R÷¦Ã;pR†Ê¼’3pI<pÿ>Ü’5pÿ¶xûRfkªÈÛÿŒx;h;÷gˆ¸C¡†ÓöÇ+V*£‚¦áÒÄpb2 ê›1¡"ùå¯²Ä¨°¸«"ºó]7vö^	¬í>«C<ºá‹ç¥ÍK˜“Ó{}³dú­W¿±î8ŽJtI·¼¼|ciFíwž_½µtgùÖ{DÜIVææ-¹â~xI_ã‰{¶¸·)î–
YèãDÜC¾ñ>íB¬å@‹A›òîÅö[âž„?¿‡C	­Ú0Ð¸{û}Å]8¢
?sÅðû‰;u[;wæw f«¡õ©çŸ¸çŠ;«Ðk46ÊKÎá¶yäU­ŒÖï«}qWTmâ>ÊxÆ£QkU½]íKÂ¨ís7lØÀlÝ 4»Äº^XÜ·7oç&îAw)â®Ô¸\Ô„>j§°3•¦áÍÍÐ²3vœœaúzç¼Bk`œNC¢2¹â¾‰$e
ˆûKbqî¥‹û3Ïäˆ;P‘R•®?2š&¼~©øÉÔÉºÎ‘ÈÐÔ”Ž-:ââÎ×Êâ^)sÌŒLŸëíÖ2ŸÐÍ]ƒ5‰Äa
œí®ë’‚2ƒg¨B˜t³“×çÖ]ùÅ"9dÝÙ‹7Ò+++‹jõÒó«°1uiùÎ+ îØÜùã©€à^Y†˜{7rßÙFtò	¹ƒ~‚{â¨IžúöŽ¬OñÎŽéÀû—*p:û÷þö˜ÏÚ£qç‰-ôÄ„ü!o<µ wpøDÊæ±Zã^¸Ó­{€Íç!¾¤e¿ ÿh ®Ï}Ov±i>ŽÝvo|¬W ö:ñ7ÃßZ[V«{ÆÝ=[3÷qÏ?/SN$(x ‘ÿvÅª¶LŠeV×SÀ¾æŒºCd¶Z¾ô¨ˆ†*b·¢r£aò?<³A#—««X‚NVµZ­M6Bãä¹KÍ£[È£¡Vf;¾t¤‚.u	‹Xõ.O0iž<¬I…a»=ê e´ÛÝ2v›†¡“H•muÝM2`íê™7~2» s“2?)””!GSoÿïídûñvÐv±¸Wêlêìù‘@¤?ÂPë.~[Éà‰ÎãÈÅéÁMÃÿ
â.ŠÊ åŸ¶›f&‡gg†f„þµþó×áoç‹CøÏ°ÜðÔ÷ê$$$$ßëž$Ï‹ÁØ@ë!bŒð¶‹°‹‹é•»++imzõæÒÒ*¸g‰;·=U$îðÖ)÷m{ÖÚIÄô“÷ÆÖÖû-câÄ½£ÃR¤Rz¼ÜýÀânµ&¼í™ÐºÅï‹{cqEMô¼»w[¼ÞaÜ–ãû‚w,m>Úž+îX×ïQw¸9ü([±ëZAEááçU÷Ìð½¸Ã—óâŽ9˜Í^b¹äëq‡ÝM5cî¿ü î¿*,î¬>q¡“wøJUçu­ÕêažâàGî€Z÷ U¾òQèT5”¨Šh\N'ÃpE14#ôÜ/îÀ÷‰`TŠE®PæLÒ¦§RqÂ6/É°¸ãnÏ„“±"­tž1çwwHÊ÷—²Ä$exqMý‡¢ÄýÉ<â~r2‚ÊNdzpŒè,æNÿ‚r'L­c— @-¢3¡bø$KÜqÔ®‚÷ˆN74§S‰ï—êN€«w¾8;uþÜà‰ºu6ž<7966kü,­ËtãF$cS7–U¥Ó îKwW–V^¸»´ºº”þà[¯¼âçSùí©DÙ	øŒÜ·qç Ç:9_Úyq/Èš¸{m
Tväã1îŽ´„< å- ÚX»”°x¶„?¾`ðBì=3w¿ÇàÍ
ÄÀE¶¸C.žwòk0äzG;wN¸3ö-¶nñúSÑÈò/"qç²ÂåÚÍ´âÀž¶{âÚ6 Ùä‰¸çNÜsú YeµY •È»×`ÕkµjE¥ÃíNû™§2Ô¸¸ûå~ôV&ç7¡©$”"jQ‘r(UÜ››yÄm–•a‘Â–t:ƒn'ô¸7×Ó£²z³yW}=Í0t“Ìœ´º£
VÃÈ0»òˆ{=<žùŸ”mM}á]ÁoMýv¦RæŸù.HÜ)C¼½q„Ößò0²ºKÝSª ˆ;‹Jš¸oÜXwn]¾Ü¯š›‹qÏ¸W*ä®
„É™Éˆ¯FÎžZ;‡vJ:“*!!‘ÃÉîîÞ‹³FúŒPéÒ72¿ùE\,¥!ãÎÍÜW_X]}þîÒÜ„‘;÷×3#÷<âÎËjGk« î`îbˆŠÅÓ^RÀÂwÄóÛR†¥=#î^_¡Åo[ üTØr‹{ÌóÇý‚©wt€”‹Å}-)sàÜ—øöÍÂ#:ðÆ- š¸çÎ#î@«XÜ[ElËZÄzˆ°í	p¼‰¸ç‹ÊˆkeV_x3ÀŸì]û>á.ýxE#3j+%“ÉžZ£Y$í5&î´GÊ‹Òm·Ô¬\Î¢jÒç,›¸oÁafÞWÂ‹Õñv7ã¢\ îõùã 7¬N¥ƒJ.Ÿ§eÀVúpS.²3”!%îdàþ-^ÜEI™þ{»0pwAÂ¼=3p'ÞÎ'ÜŠ;x;÷Ç1DÜOO¡235Ð]ê6û#ˆî¬+ë:÷³&ÝôÙ¢Äý·ÙâŽÍ½râ.^a™3ŒýÃ§ë$$$$@Wï•)úL`ué´1ãí+‹&¸XYFF<o¿µró…›7Wï~ð­ç@Ü9s¹×CT¦ù~â¾—w‚âžuDµ‹S¿½ÃRž˜HÁU^ÜÃ)«ßë‡l»ßï=räÀn/öv¼h) —”9’²²Å$‚$î;qÇï1‚ºó!±µÃ'ò‹ûÓÛ.¤ä¨&ø4¸ßs:U1Êúƒç¾]<m@%›éµI¦^$îÛkYÜTf”IÑš%Æå¦”UïÏï£šË7qßÞâžòDµ¨X¬¶”Ïà®—Eƒ.È¸0X§wñâÞä²9Z¹ÜÍùÄýˆû=GSŸ»§ÄýÇâ;_âžok*/î_]w‘·óâþd>qïEåÅxå²1p¹k8ÒâÌö’!:$HŠ ëb õN¡9x+†ª'îbt#S¯_:Y'!!!±zÉöªcJ¿“¸ëÞ¾}Eß^ºqcåæÍÅå¥Õ^ o_}ï¹,qsO-,î aÅŠ;ÐNU"¬­·wø=	ÊgMùÛyq÷Æ=~K(´ûHŒ¢ #s 
ÜÃ0oßÇÛùw€ÌÙóŠ{GAq¸Ÿ¸ï]·¸ï ÄâîW£Z‰¸çfÜÅ!wµ-Ôš#î™0Æ¯GU[ƒæúÏ‘¸3=w:jÕj”¨ÊÈmŒ“n(›¸Ce$ˆûÄx	÷Op>å¢¾¤ÛNgÄGev9™«[e2·ÇáÖË}á„>·7‘»¸Sæy"î¢;$Üù¤ŒXÜÿ®¸çÜÿ¨óŠû‰KCåAGF:ÏéŒç:ÇL:’NŸ%CèÝE%GºGTì0DÜ‡!2SàíâŒ{uÄÝ8sñR¯‘X7§‡ûU¨êÈûÓ„	¼óÓ· îKéÅ»?øñÊrzõø‹ î–‹;n„|cÓ¾/l€NììÜ%®•yboÖ¾ÏL¥¡`éÄâNÄMÔ	î‘W@Ü->eONž†¹ìÐâ÷Ä7{ýP1ŠÇC^¯7uàî^H±‹Ë1|R†¸;H»XÜ1™,?§¢™‡Jä›‡»–±ö¶DÜáRÈ«ïÄà6žÖŒ¾‹¾‡XÜÅ<½m¥­•ˆ»xâž+îzƒ¥‘hûf®t3{d¤5çj¢6©Ðô¤‚L=@Ä=cïðÚ^‹âî®¨¸Ó-úèÁ}”e÷í´ÄÝ9Þ7/GÅ¢ì‹ú<N»Áã‹ÒÍ2 ¤LÜé¦]MN_”Ñ()üä?s©¯?sîPâ.š¸ƒ¶o¿‰;‰¸qÇ	wR)wÎÛ‰¸Ã´ý+xà~ò+BÂ·vàý+:TVt—ë¦k§f‘‘„8gÎ‘W†‹óÚÓðõW®õG®\.êþ}ø›êOÜUªÀìùs’µKHHEçå³S#c:TUT7ÒŒ·¿ûÓ•ôò\)sûæÝÅôÝã/¾øð]wrÇæþZ&+#{j°	¼¸ïÀ#c~g¾ÊÉk+G£Àæ,ò¹ÇR
T‰>ÈƒRkˆ'!^Üc‰…ð€Ÿ²ìÆ±vK‹î@,„Å}aqßMÄ}ý-Yâ¾Fö¹ËF|$„ˆ;h:ºâŽ{ÜE¬GÜÀ[j‚ÿ+,îúž^ÓgàOæOžûã8š-î{cVTnÔ—ƒ!fY†Úw—•…O¸õ¨Uµ>9Z>qFN÷TOPŠ†õ¸Ü2§Í–Œ:ë‰¸oÝ
ÿƒ˜]Ñ«»65]õø˜	¥Æí»d²¼â¾‰ï‚|¼DÜù Lqº AÜ‰·ÃÙTÞÛ¿ÚŽ3î_ˆ¸“w"î_N>“+îðvv”k¼¼q.z§L#ÝÜýú¹bêÌ7^îG3½ç#ý½ÅÝ¿_÷J™;;6rQ¶KHHÍ‰îSÝ§®Qõ`M‹0éwÿúö;+ÀâÒ]¸\Z9~üæ‹ØÛ¿û<˜»XÜaäÞôÔ†¼ââŽáÅ]àþâîµ)+ÒÙ²YqÌ’÷j<a	Â°L•ŠY€•{Ãq¿—ëi)(îÀ=âÞRª¸U‡+wøú‹ûÕZ9›úiq×Z=þP8GqßáO/g‰»e•Mðªøœ‰»}œ-w¥%Üøª>ú ËÞPVq7»±¸Oô8Jx8
›ÛÅØçÇ£xí w»Ý\O;\PÿH;mVf^NÉšò‹;pøg™.È×ò‰ûKB§Œ8)Cî¥ˆ;#îïw½ÿÝå-•ÑõÏ\ê3Nžë˜2xLçµSEEÜ'hjpRoTU]ÜS§»¥d»„„D‰tuž×¡ªa2!Bäçß÷•·áÇâÝÛ+Àêñ›7oæ÷ÌÈ}_Éâ^ý‰»bátAúã>”!âî5,ø½ñåÑX©Ýû½^KKÌ°÷ >‡â¾-¨¬™ˆ{®¸kû¬ñØ ÿØsÄ‹û…²:%+ïñ9Hâs&îÎ	¶rm”UŒÛË*îÍNÎ¸÷i(+*kÒ`K2.ŠrØGe@=vv'\ši»Ùéöùì¥žÜHÿã¦o'	÷lq®8qÿvAqÿZ~qòÉ\q?ÙUî³©3ccç®Ö]šÒ¸Sæl'i@ë,ê5ä;uMÂ•õóß¿©²¸ÃšñÞ:			‰Òéš®^Ø]•ùØô»ßkgqeqñöm\á~ó¥›7_„°1÷Ü”{˜;&KÜŸ H‚ÃåÜ	DÜ×ä“ËØtÉ*$a•Q¥‘W¤ÈßvØîà=ñålCŸfÆð‘	…!ê"ŽáÅ]XŽÊy;/îDÙÿ]Pwâí¢í­€`Û9äë ñ¿qî5÷6¡bàø
Ú¿÷XV«ÌÓÀ¶?üCJY+÷\q_Ž‡bü7"GÜ[€Œ¹âÞ‡Ê‡ÒtÈ€Ââž#åµ"îQmåzÍã¨â°H„BÝçh(³¸›£QÜã®Ñ{´¨hÆÇ'z‚fÚw†‹·Ãñå¦MÊétP.»¡'ÚÄ±K,îøoÚ†;ÜÅ	wqÏñö¿Éñvþh*Ùš*M}õÕW…N¢ík]_y†ˆ;h{¶¸wž,óÙT4325}~vúDÝ¥9c?dÜMS§Iô¥«¸ÅÿƒSÎ™®žAEð?bq¯ðêTÝÌÈån)$#!!ñûqâúL U—ÈÏô£·oß~v/Á»·WVnÿø¥—ŽÄý9wÎÜŸåºÜq•ûö{ÅÌl ÍH(y'ˆÅœk{Ž¸ÃE(¥¨„ABoÈÛ‘™ˆCÌ…¸uÜïO$ü¡˜·Å†w·0`´ýèÑ£í÷ˆ;4ËêNÄwwnãêÌQ¸"ŠôguÁ¾Ép‹{6ÇxqoqÏš×·Á/Ên•áÄý1'ˆKðqŽ¸ÿ×ò-¹ÿ­ø“qo!ð#÷2‹;+GÚ ]–¡©œÈw0Â÷Ñ¤•Å|ó£ è)“T¢Ê¢dõZV\'uŒ–[ÜíÉä(LÜ­Š>e	-CúÔ<#3GáÐrFÜ›hóá­[›Ì.êêa§ËÅ¬nâí4Í¥e²òVpq‹;çí îÏÂÖTq‰;ˆ»èhª°5•x;¿5õU¡SFðvÌÿ³wþ1mæ÷‡,¤ÀH \Br­!jÚë!·wÒÐÒ?²Ó:M•vkwéÖäîº­í®º»YÇØ†UãG€Á6´Ïƒ66`LøÑª`(‰ùý#@Ô¢I–(¹C›RN‘žgëªëuÝ>ßçû|yžÇ?`;éõy51ŽÄöúò'ïïûó<ˆûÓ/½ô’8o"îõB–<•ÌL c¹õ7çë\6¸O¾ž{I]SÚ<kœjqÍÔ¶Îplòü"Sâ^™Ü²k{Q544NË€+Ìe´òÞxùò=˜·oÞÛÚÜÜºÿˆûýûÃ‹;OGî_@æÎW¹ÏÆ1wlî×tÅ'G…ñ1™¾c1=/Š;Àk›\Ü	½f.âÞÖGü$ÍRÙgê·NLú›¡Hf†æ§á†Óåâ“ØÚ§vwÂ)	q/¸ HCAƒ—š9®Ï$$wÜw¥¸ƒf¬<w¹¸ÿÇ¾f|÷‘´o‹;<¥dàŽ¨”‰{Ç¤%E‰î‰6nÅsØQ$wàwDÜ=m›Z,^þ<§Éél³ì÷¥s%º–¼ç]sF'äQfT'“ž‰;³b˜Pÿ€8¶i9F3ÚMa!q_£ŠŠò)f­¤„¢i¦Ý‚Å„ÞqX*î¥¥9P)ó}¨”‘‹»¼RQâ®÷ âŽ» ñÀ])îŸþ4LÜŸWˆûSÀ¼TÆÈÉß³‹¶ºQ{ÖÂèb+ˆ6‰¶
â^¥Êq\¬ma}q£ªsÄ¨¦’ˆ;Fq‡€L—½Ó^•¥¡¡¡‘
êWëÂóöÛ[?ØÚ¼wùÞí;ïnmÁÈýþÕ+o¼q‰û+	Ä!eâ~ˆ;pTà"¯a'Ñ%IjÃqG	g¬nD˜û¢Õié ëÅöLðOzûLp*µÙß×ï/?çGoÞŽµ‹; ÷¤wå
q‡ÇˆÝåg¥f×Õˆ;òv¥¸çC}ùñGÜeâþÁï™:
 ¥¸“£ü ¸‰ûõ¶”ô—8»½L·!æ8\DÎþŽ‰»7õI?¥^a÷g^î†Îs†ñY—»'œ»·Ò´ÓÙ&­†HaÞÎdg ãNyŽƒ¸·Y¬z&º—C>&BS9DÜAÐ‹Ê`™*C•è|ã4¯	ÙÊQ'î()#Š»2)Þ~E6pÿÁnÛ—¾ÞžPÜ1qâŽ~<ÅS?f„\«{Vêêzæêk§—–zøÿÂâ^?¶jÏR”@ºV§fæ¦]œšˆ{ªÅÝØhdãŽL¯¶jÎ®¡¡‘Rj[fG{ÙL M_{ðÎÛ›wƒÁÛï¢¨Ìæý+W@ÜåY0w|<…ÜÑñTwˆÊqÏq—›;¿Sˆ¿†ëÉÅ#ª$à,wÌénCÄ½²ïÖ-(9÷Cùc³š ÑÏfQÜ‰·'wKqo'âlî$îçgž9¿«¸KúHõb<ãÅÅÛâ^BùbÕ=ââþÞ‡ã~RÒŽ~ž‹û±mqOA}¹>jrSäiwzÁÉ~7ÅÝ‘êŠO®!tè âÞÐMS”ß7Šò¸»«wKåÄ†‡'ÄÀ5EJóR.î ßãîk‹¬zVº£·×êu!‡PLQQçUwŸ;`å7/ÁªeäQÜIŽ¦‚¸ÇoMq¿*é‚ü{ÙÀýK$)#FÜ‰·“¤ŒLÜ?@XæiéÄýáÃ‡XÜ;ÙT²xstpzt£¾vvtÉ„ˆûâ?hoYT%î—¦Y¨¿ËÖÈ±Éó[$î€RÜ÷[äîé1Æ©üLW½ÑÐÐH=öõL¨»ëÁ½o?¨3mwÂì¿Þ}wë58¥
#÷+²”;érÿÌÜ…FÈkÇ/,Äâæž#wpÈbAÜ‰»ƒg'QAQhEªÈNßHK»´³_¶©³ÙtË
»–Æ{{ýpî½{"÷p	=÷rÑÜñòTR4ƒPÌÛ‰¸Ê1ø54öää¤xoT%‹UÏ<£÷óÐFóÜ‹g>(áÅp0¦PÛc¸“‰ûo=z4^Q ƒÄÛ±·'÷¾ƒ‹»bË åîå ƒS2’?œ
7<Fq÷8S:8°¸Oì/ o¥òdÐf61f:‘D}jB‰½ý@w_Äsè8 ­«ž&«•6…hHÇl‹{@¹½P™ïöy|´[_2´•Æ_Dø2'wA~ßšúÉò%wR)£ôv’pÇw”—/ñ2HÜÉÖT‰·?áÅ´Ÿ¸?|øy¼ih‰M!Æ™›ScCÓSöK7gPRÆµZÅ{øúÒT•Êˆ;Ë9Ní«"î©š¸‡–ŒäúüÒüâÒÌÀB–†††FZ¨]µ±iæÎû_þöæ|Ýx{ëµ×¶6ÿ}së
wÞÜùLØÜ‰¸ã%Lp<µP"î%‚¸ËÒ2pŽFÂÏ0sOBÜý·Ò=qGWÆoz{'ûû­“ý ìþ¾>ÿ©
 â.-¼ÄâŽ€wA“ögøø_©BÜÏœ9“@ÜÁ>†}57âæþ¿?}ÝøÉˆû9¥¸÷›:Yn÷]ãÅÜò:4q'BXv™(» %O…¸/Sy’ŠRÎ©"à®JÜi«.B+«0Ê6ŸÃ‰¸=Ç¶¸;teE%:J×·Cçó:Jò¾q‡âÜù"î_ÄâN‚2{Š;¸cqÿŠLÜ±·+Åý%ðvQÜÅÅ©]#©¬ÿ1ŽÌÎÍŒteU­Î¸lìPÂ÷Î1»ªŽ…#»~-w¨“ˆ¸«6w.èšïé±á»œXhkêÒR2_rssá$=\r¸ÈÜ°Ï¥yè¾ûå{ÿö ˆsŽw6_oG1÷«W¯Ü¿/îØÜßä{e¾ÇS?	ÖCÜ…Ü3gŠ¥Y÷‹h>`skÜ‰¸+OOØÃp£™ˆ;bGïIØÔ?	™úš+À¿››ÁÜ•˜:X&
õHO£qGÄe0ØÛåÝ)<øŠü&mïˆí–w<†‡w÷“Ï¶#Îçò2:6wßæx"+ëþ_ÿ‡ù`òC?ì”Å¡¡%Òs©ØÛIä§.îzs€öfÎ k%q$ìqW(âÇMÜ­Xv}ûøÄæ˜{8O…¸7y³ó$¥8úÀpšÄÝ£AÜctHm®HßÔÄFÝfwÓ4SF^Þ9F—ŸŸO1T>ã¥)×ê)A¹ ‡|iê5(qî²w"î¸RFÖá.IÊ|)îhêWq¤dà.z; x;4Aâw…¸ÛGÙfÜƒ³c³=v(&^¬B;ä˜}Q×)Ó¹´¿s2qÿ¥BÜÕÜ9#l4ºfæÃœ0yŸ³_Êº¤ed44RJ. ßàB4.à¶Lß0v`Çß„¿üˆLÜÚ±ôæeo¿ÿþû·‰õUäí[÷¿Ž¼]™•‘W¹ëäâžæN©“˜; ÞŽ3YqïwêÙ4À9û%â~Ýz£¿2î}þq4lÔ‘PAÀu`ÿâŽçÊñTÂ;’ÃªÄÜ±¡XÜáØœ×ü8#î?}ô!ü³D’â~nqï˜l`÷	WíŒù¨í»ƒ*ÒÄ=%âSŠ÷w=Ëú]Ä½4Ï+6DY"yi÷R‡7@Ã#ŠÑ&ƒêµ©íÕ5¡åH	¤õEq§|n]¾nŽ0%Œ7kUW$ó%rrròOüDVâþÅä–/}Yz4Ü•âþYõâ>4ÃÎ(5÷¥–±¹‘¡KYöœMm„íKê¸T…úÞ7lì~øÕGâÄý@âÎ…—ëŒ6W_X^šk½”¥¡¡‘B(ƒ¯£Kåï]BòÎ+}fîÊ%$æ{¼~¯<+­-ƒa6}ïÜ¾+´‰½³uùÞææ½·Þzýõû[÷¡XÜ±¹‹âŽGîp<µ‰;Qq×Ab.Q\æE/•8×æ~T*îå;sn²cÓ¡Û¿-î½·º¡¼½ÏÚÝÛQÑÜÜÜÁOÀsßVùrâí{‹;|”$ÞNüTúž$: ?ÙºRÜù ¼tç,¨|BqÏ'â~ØªylwÐöfx°øî%îäÙ“‹ûÉc}íûLYºCnJvúô3Rq‡ør¼¸g¨ßq'Qw”åX•Xw
§ÓM»Ì³é<Ÿ“ÛN×SyjÉNJÜ©HÀÈD[UOÜÍfÎ`uÆÜ´—fŠ¶'î*?Ÿ¡}nÔ*cõù,+e%·;?îµ¸ã¤>šŠ+eä÷„%îdk*Ü•âþYõâ^?k;X:Æ–ˆ{pîRí\ÝüÌÊÆFÐú¥žu•«¿[ë» f3¶Ïàý/w÷Ÿ«w[OOcxÖ>ì	òÉöÁ)MÛ54RmÊüdÜHï}¹„ïI’÷ä=í“ÿª®¹¥ ›68[‘Œwî¢÷­·_{í­×ïß‡”»\ÜIÊýMq{j¡ îÈKòeee î:±öbïDÜŸÝ]ÜOiJÊ fŸ/GâÞlB™qSÀä÷_oîÀk™d!l^8+*yG7#Û$¦‰u}Wq'”# ?R‰Å]X4+ô'bq­½ 6}ê(÷bà9ô¯HÝAÜHÜÁ@<êÇqÿéLúñk"îÂ**$ðbí²	‹;TÁCºjW»A·fee"âqˆCõR¥¸Û›S}¯×ëEÛ#Žßq¯ÄêfÕÒæÎÛª[¿ËáT1JÃÁ‡«Ãáö8’÷ãÇ‡#í¾C¥Pp‡5&k ë6‰*ú{Ä\§ÐË`Ékª^†c¨]I¼¸ÿx{kê›âÀ]Þy5áÀ]YâÚŽÄÜÅˆ;‚M%â.v¸cq¸á:·sÁ DÜ{ 3œéß™·Áö¥VUÉöÎ…®ú±–K«óFv_üÄ]¹I¸‡ç§æÃs=ÁÁ‘ºº™éÕ¡Ú*-!£¡‘¹ù¶òÝÓçîøs«¿ûéwø†P¥Vz¹s÷îƒ-¸¿ýök0sÿ:we#$˜;9žúãÃDÜ?¹ƒ¸£(W#îé¸úv?÷q,I½'Sýþþ¾æJ÷ŠÄâæ.w@¸Ÿ*?—&qGi$¹¸ÃÌ‰{Ž©æqDÜÿç‘ßš<!DÜ1»‹{…\Üµ5¯“Se¥VÆpoqç÷ÕÓ&‹¥¡Á\£×7ø~OÄÝ9„‰XÔŽÜÛ¼nfX9·ŠaÀ!¶ÊèW<ªfíÃîX[7¬¸ÓdÐ‡Õ‹; y­X
çQt'Ð?^ÁOtÅ\wÉNè¶¦òÞ.¸ËÄý-‰¸Ä]æíß:eþIÚ)£^Ü«ªr;G"î6—“Mªo½9?
â^»ËDŒ òêÄ}Ì^¿psº‡ÝÿýweÆ=éZ™ÆÅ…ú—‘µ…]£ë7‡ê«´Ã¨©4edíi™Š«g¿
žÆ¹{.Á~s°'Ì¦ãí6aÓ«0qGâæÎge^Q.aBY~ä~­pgq°½ã Çâ^±£¸·§oRíÄ½£ßÔâÞ;ÙkS¯W@RfWq¿ FÜás]Àà<qT%’ÐŒBÜIøîùxq?É÷… Lqç«¦™v=›q~ñÁ‡§yq'=A’÷òxqG(Ò &±£{Š{åóº¯9Lf=Gü¥Úêx"ÅJ±¸sMîCO·Ùi®V¥yÑ2í2«Nü"¢.ä‹‹2IÈ:ye0LÇÚjà…¶')q÷ éâðÇ¸}È«>EÜn7å(#FN­­€
þ2­Y—CfçZ‰H¸£åKß!	wyRF¹5õ29š*¸'÷¿’”Aþ1@Ä¬].î wõu’P;gs¹‚q_œjšƒ°K×ÍÁ¥ºÆ¥®,UTµÚWGzöÿMD)î¿R'îKcõöUÿ`\ƒ­Y*Hë°:Õ	ó\à`£útŠ;`_íáØt&fnCRfëÕWßæ³2¢¹KGîßŠo„,Ìdâ.š{1‰`£<ö‹'Ž>ËK¨sVˆûétÜõ‹s’LÜ¯[­ý×ûL“ý°u©£@D!î Ž ã›+HTf7àØ­P&C8Ùš„H‰\Ü	¢¸“'60!SÕ÷œØ÷âxq/r?sÿõ£fNÊ §^ñ`
’÷ò
¹¸£Ð>£bä^`J’wÊÛÝd‰†V„³„
ŸDq÷6°)E¿|ˆ@¹=¾ŽUE^Þ$/îNïpž'Ê%'îÙ”2KÑ}+ñXqÂ¦!ä¦
³÷÷Òao7/î¥ îêÑ·Å|4ñÁZTˆ;¥;A!q§¬+>S“[*ìÂÝE~à.–¸Kî¢·¿.í‚Ä÷Åý+w þf«®Q"îA›-,ÑÞºÁõÕ›³-UU³•1Ö«:—Zo_p±ûçgwÛT•}´Ž¿¶4ÛRŸ¥¡¡‘Ú`ûÁ³¦oØ®þ3¤[Ýk×gÓ:sçÁæåËXÜÁÜ‰¸cs—ÜIÊ=§4ûeØ "†ÜKà’‡fø‘û^3/sG?É6Q’p_I“mÖ´› S€Å}|ÚÛû&­ã•P	cì‚³pæ³ØùŠõJ¨P÷rm'”!(fô²ƒõ0÷gÎÃ1Ôgà`C@#wÞçmU3‚«¿HÄ®Ã©`@(–á+©ÝÕ›QŒ÷=zäGóÝ#x;ÿ*h‡ƒ8l‹;ZÔu¼,-L
}uMÌ#vÆ>	È+ÜL¬†U1Ä}â&÷… +ýDò2Á›q/ ›8•1÷C‡âžG@Ï&`‚9r$F~×sHÝ[šhª†;8ñEB$_c0B^Ï°cx‡¹{v¡@)ˆ»ÛS:¬zâN’øÆG{`À®ãgî90wpè`ö€ÐÑÑnoŒAßÒJ®]+à
BÇÜÿWÊˆGS‘·ÿ%	Ê\o—%Üå÷?·¦bo'2DÜamªàíDÜŸÆâŽ¶¦b>…i³ê06¥ª^g~`czpvj`¡*«s’2á95ÓvûÂÔ¨ë@q»,îá‘®©0z\®é-!£¡‘kÏü ›Ü›LõâM/¥UÝÃ··.¿
Y<r¿*˜»RÜ¿!ˆû®!q9;¼ýw„`î@±¹ƒ¹c+‰#ãéShànI“kZ&O‰µ1~ÈÊøÇÇ››ýÍ|úä¼™mKôYÈÑ a<7ág’œÃì%î 
ƒ#qþaX-ñv^oa­Ý‰¸ãæÔ*ƒÉá)a¬+–ŒNÝÛüå¢&HäáhÌNº0áeöv,îÅsƒÍõ_`îHÜË|Éè¨¥©=ñä+Ä°mínÚê4ìœ³YöF	ø¤ˆ;ÕÆ¦–ê w$ÝÕEAùSâ™Øå½!ZÏ9Ý2ëV@G«Ã7s¬Ã2„YÜÙ	Å}ØãöÒ
îÔAª‡‹QŒÏÇPnÆ‘Ï‹{¥CâŽ2îÀZ;¼–(+)Ã•M<šÐýø'ß—vAÊÅ¼‹;$Üe÷oï>pÿGÜ)#O¸#mÿ)•kˆ¸?|(ÝkU÷?²"a©¸7ŽtÕGf;aóé(T²,¶d%In•}}ô yÎßþæ€â¸fç{z\ƒ«Ú´]C#•¤p:J"Ÿ˜Yy¦î¹2ª†æÒ©î\ã;îaq‰ûò¬wlîÛÇSU‰;ŒÜEoWŠ»?mñC YRÓ^	î("ÓÜ\YÙÑqìã%îÄÜá¿ÂZ$ZcÈ˜»ëßk.‡ÅK©÷V‡Ï&†‹ÒÌZ±.qÏ÷EÀÚ«:í²fÂ…·)¢O†¸§ü|±™ÄeUÀñâþ]º)ñtŸÅ½:æØ]Ü#Mú]ÿG<‰ÄÝáñÐ‘ã‡à¡ê}¬N­^Ž0ÖMmGeÊ 'ÞÎ0XÜ»Y³n%½2DÜ‹I$IÊN"îhûRòâþ';ˆûŸ)Åý%¹¸¼c<@ÄÛ‚,[jÉš®CÕíƒ®äîUö±Q×ÁWA$÷Ÿï%îy8£³CCccY)ínI±Ú>1÷&õ…7¹q<Lg«;`»ýî–ìxª¸=•˜;îr‡*wt<5ûå—_Î.Ü÷êËƒî^2O>‹Ý¸@&î$ñž¾.Hne¼@ Æì0m÷7Wò‚ŒÄ#Š;P E*î!#’XÜ7aY?wî´ Ü€Åþô‚xˆ¸#dâ¶Ž GS˜
acð›üë<0C:$X&Ooëxy9ÜwÁÛñÓÇ[{BqÇYà<ô¸ÃÏ£'>q…O5EÍf§ÓÙ¤|œÁÀ_:iI~QŽhíJq÷˜°µ'¤ÂÎžH ÍP­o0ïgÏ”¸/³)få„B 6éãâ¢t)|œìyI´èKÏU£âv"î5Þ¼Ý‰˜w¿–vwœ¸“ Ã¥”uÙ¿rXÕp5MßÄŠ—ñPä5oH|Q1/î:ÝZ·ÁÊÿIä#$GS¿ ßšŠ¼ýåÑTåÖT$îbR†x;é”‘z;ð<™·Ë#îŸŠ úlª1(µë\â/m£C¹Á©¬¬Öz$îlÝF2óªZ{çúè|]*ÎÉìoâÎ5º–He²mÝ®%d442¨í™ÿ”ð¡OöÃËUÐ9ÕÃ¦Žã‚ï¼{˜»X	)šûŸâ”ûwðÈý:œ
ib!ãž ˆ5ü‚˜;ÖwÞ3O~
(w,uä¬ªÿVÚÄ½a²Ëwe¤Ýý}¦þfÞÎáÖcrÎ"â÷·
*ZŽßˆà*–.·{¹¸°¸_@ùvéâÖÄ]¸x™ûQ¤íð@Û®àY.#â.¨{ŸÔehÌ33@Ó‡çNË—Np<WØóñõ
áEZ…"äNàO§äõÓÉg`›œ‹`úûûÆaUVÔÂÊ¨i³Þ€>Ç6«¯¸XxÅr8%:ï„eï ‰s¥?O^ÑNÅk'¦Ou”ÉqH®îTlÙY©f“¤)â qç)t”¢7î¶B\ÃÖDà LdOqß3§qÈÅ]Àá b+HÜK­Õ¬jÌ±•ekC`ÍM3|PÆáÈÉ¡ÖtE:þÆµhrGh,ìXÙùMñE<pWzû+ØÛ¯ìåíß¼ý«¢·cmÇ]HÛ±·‹ãv~ÞŽ¼l^€€æØ<«ŽF[X–”=„Ehd´ÍÖ×wÙ«{8×¿Si·ÐIm×Âôè`›
þó7{Š;°Cfß6ÝÙ2Òˆ_zØ³4442çµ™Ÿt'ñaö¡¨‚El¬·Ù3üs•´ŽÙôÁ±Ð/³õ÷«òã©DÜÅ”;ŒÜKãÅýðgDq—7C‚j¢‰*icq¿ ÷ô•AêÍV?/î°|©·  ·{ÒîÑö„âN m/*â‘D[*ØÞÉÛ¤ÄÜá³—Ë£2€(îÄÜ‰{Q>OY¤½­&÷sãŸ;ý/çNó#t©¸óOEeBqAw<uGçoO“N"ô8Ï_Ÿ´H%Ûl½~t6E® î9»ˆ;å™UŽ¦=é÷Ì—Ê Ñãqâ^xüxá!¦=é¨{C€ÄÝ0¡@Q‚”¼ÞRƒê “wˆÜìEMÌ7¬÷ãÃOlÂ®†û÷PûÊDCÈçv3p§Šr 1´¨¬LÇC…VLwÇrv¾ãÜùJ™7ˆûxù$MoW)îO·¶>Íeâ;e >©zqj8h”Z|]%§[ÆÆ¦¦Wºj«jgg\ìb'¤`†6ìY	hm™žI]Qñ¯‹ûÏww~mÔªÚÎÌjÞ®¡ñX¼½µshllyc}a¬¥«6W…º§R÷[!µ7»ãd{–gìß(©ª]¬3¦ÏÜõ¶wînÞÇa™¿%]îDÜ‘¹cqÿ¹—*ÄuðqßŽºŸ(æ%Œˆ;AÐd$t}múô=&‹µIysÿd¯¿£ßÚë¯ÄÒž”¸ƒ`øÞÔåÚÈÅ!¸*¤¸_@[›xmÇˆâ~ö¬LÜIX†x;\}ngqÏÁvEekîP“¡:½qwî½sçøR™Ó@’â~A&îxæ^pì,/îGñ×Ì³Ç&ÍƒAé‹¥éVÿ³±Úï%î”›8Õ*!F}Å½‰‰w¸€R÷ÈŠ³-š\k{Äs –Ùß‘#ŽÄûy¹vš‰{µºÉêSNÜ)ÚgŠÒûŒÊèÍÎh ;j²F<>ž¸åPª¨LWìà¿qÑÑv¯[Ç‹;ã[CßÒàæâ‹?’ÜAÜ¥Ë—HPF±5U™pÿ»äÅýùÎÎçQLˆ÷ÚANíÄ]*Ú\¸.(=×9ÝÒµ07×ÒÚ:40´¢EL££³;'Æë[¦çS™Üü™\Ü$Ä°ÍA(¿sÔ5x³+KCC#³Ú^?¶15²ØS”é™Ÿ™†×ü©>c
±‹´¯,î’ÙÎ¬Úw	ýå¦UÜaËuëÂLZ£îÆ°íMùÈ]q<Üu¥…q/AâÀ/ø	FŒ¹_Câ?âÅýTo:3Ü„¤¼Ã?Þ×Ûß×ßçïhî(H(î²[ø¢BYÃºRÜ1•2”âŽxA!î`îðŽ|sbyÈÛÁéQU¥x/ÐÌý" Š;¬§EIï‰¸ã«‹ÅÚ-Õé:¬ª74M6ÃÄ¢2dâNóv†¼=‘¸ƒ¶#H&:žºáGâë¿°Þš˜ì5™ú:PFˆÌäá‘%˜J|ÝQèT´K>~q‡ìGj1ÄâÄÀÀÄÙ›T‡¾&räH¶/ û‘¥GB‰}ÛÐí†Î}râÎàwÜ;Ì)Œw×	xà
³²Ÿ/ZýJ ©‰6…†"wÆç)"uù>g”¦AÜukk†ÎÛŸø	$eÀÛ±¸K÷¿–._ºªwùÀ‰;¸ï(î‘@ÜŸN î]ê×/5²²Vqqªmqpµjaff£sl*b¡Î=Ë>;²¸4§4÷z{×ìbj«>ÚŸ¸»fÑš¥Ü®mÚ®¡‘Qm¯êúöÎ=¦­ôÌÃ‘†dn¹0
IšlSwv¤M•®µÒ^¤v«]¡­¶íJÛª]mµkíbsñBÅÆÁllÀán†‹¶†%1Wf»‘2R÷ŸUj:É´™NÏiwÛ™¶ª}¿ï;ŸÏ9>6ö±Ï!Úê<Ê8öq›äñËïû½«ã‡oœYÚhÉpÊ<œþ¥x“‘áøÒTzÝV3-CŽ$Mv42jÒØúý¿ÿ¹s—Ëq‡”{m->ZÄU‰cq/„1•¤\¦
Q]“TáB³2WP¤j4·w‚ÿvÎCbzìÎùÒÒÞ›¥© Œ‡´xü}IØú"Fdï7$¦"q§ê
Z‹§ôþL+¾||WÐ¹r¡®†Â‹;ôÊ çžR„9!¿:ët­±‘ØÖ¢Ã¢Â÷3"cp!CP*ÃqNxd—z;}ˆVêp2	 –t.R”ªÁ”ö–vv^­F q'jO–Æ

e`£ ü¿qÚX4äè¸íÓÒÝKÇÈ¡(ë¡Æ.¤@?‡Û·²¹ÃžHdÀs3ÑÃæä¦¦(­ÅÉ(îßÎºÉÑ²Õ”dÜCQ”Ý÷uç’	dbí¦¶ 5âKü¹qù|»¼¸·ÛðÇœþ]}b9E=ê‚¤•2_Üÿ–ÜI¥Œ8)ó§II|2•÷v@:p‡“©$)ó‡{ê¨Œ}ö¶\ogEâîˆûÌžm*î]îwoììŒovÌôéŒ:÷þÌ`«w|J'¦ouv¥ƒQ”ÿý0ƒ¸§9º9¥ÓÐÐ8ê
H;4Iee¡ñå®Cï#{6¦;k³šýš#vs©Oý¸ŒTÜ1}«+PÀ«&ßëK¸þA’.a"Y™ïPq¯,"ªþDÄ wÈb£ª5 î5 gu¢Mª*žMó0Ë=ÙywhÌ}lOÛ¡òäówÊÉ®&ÌÍÜ#*îÎÙåˆ;€ª:!ìŒ,*®îMch€>4t>Kq‡ew!5¢íRq/‰{EEa0Å"ÝL®,¸ž»¸‡›e1¤wLet«YÎyïtÞNe=ÂRßÎ0q—ÑäÈ.„Eâ>ítF·ÂN¿oÉ…pÃ°úõ%d½R‘?Ô#q'¸"Ì6i•	[}œ¸ã;ˆ» ÃÜÅâþ:pÿ'¸q'Ü‘·ÿY¾D½î^¢âNw/¡.Ètân[–qgÅ±Äç³¨µ}©q²ßÞ×b‡ž˜a÷bqn¦u¸qxeN<ÝšßW˜_aq‰;À‰û™'îÃËn††FîÈwjPYþéÝ3Ê£Ë‰wÍÊý[prCí¸ŒTÜ9úîÇÕ4wÖ0ñàûo¥÷¯¸ÃÈRî…bq/Ï îgj _T9çs°ŒjXÚ¡¹’2‘™‡;ÉÉÜ„_f÷º#÷dèÖq¯sGÇSkä‹{%¶ÚŠit\SYšFÑÍÏ+!î—°¸× ¹Š»Óº°àq˜òHõT÷£ÊDwÐàPr¥ñPÉÒ÷éÃÓü2þà³Pà(wW¬;\àîIÙ[¾…î€k×érq?í‡;/îN«e€ü-Š…‰¸—ù.¸«!î‘$îÏ,îÆµa™eÃÂ_	JeØõµÛ“-ö)›{5><¼†…¸ksw¥_P Ù5©Â>‘ßÊwJëª¶lICãc2{39¸§w¼+‡¡{æßµgr ¾“æ>Ôw^Ýw6U¹³¨û£·Ñ?H|¯?r…t¹—Ö‚^+:MNo•œFÇS‹8¸œ{u÷ë×qf¹útCò’ÒÛyÏÌ¨‡ãŠ›€¸uÎ[­w!áŽîíN€=Bµ¸¹wÔ!q‡ ;Ï%‚ØÞ)—	€éû kzqê/ÑÙR¸5Nc¯#s?q‚”MSOà'±¸ƒ¶_¼x|'ê±(ê„¯wž‚¨Ì¼à 51q¿`qÇ¹€3w*îÀe
6w$îÂ(\1PÀOø‚Uq§æN^˜øbÍ,›_–ß2rü9‹{°‡Qópj­ìí€o`ÛÓ­ÈŽß2ÐmLÎã‡áŒ¶É±mG,âNqµ{|þOÈ‘KÆ=îiû¢þrT‰Í)ßºð¯ÎzFˆ¸£ˆ; /ã+e¨·ƒ¸':ÜIä·HÂ]Ú)“>)óÚáÎmMý¸c¸÷—XÚ)Æ†â†¾eo®-î ÛáíM…½Kë“}¶cÿ¸—ªúÔÌ0þÄÙ–†bÛT×ÆÎø 
Þþ‹EâNke2Fe€ÖeíTª†ÆÛík^&G6WÝŽœÊž·ï¯39²¾Ÿú‘¨.î-ËÇWuê>üß0vq™;wèrÿ¹ŸâÅŸ’¼Æ©¢DÜ0wÒ?^]C ÕîcÝ¬ºIÌÐèÝÎùÑÎ›½7O’:ù´âNM¹†£ÈBÜ¥ŸIÜ¥W«Ÿ¥âNÌµ¦¾®¾”Š;€ÅÏÜlÄ½ ÂßÞdVìùfc“Îó{§DâŽ'î$¤wªø`îTÜ)WyqÒ‹;º@—Ëo]43Àÿsq1+g
g÷
§ßå‹u³ù/NˆM÷‘cÇEf@ÝÐ-HàŒ¶û
\Ñ(tÊËÅ`1o¹b¦‘P,tr‹QÉ¡î`ÀOŽÚ‡·ÚéG0ú*H¸£ÝKTÜ©·cq'ÞN» ÉÖÔT%îŸ…£©Šˆ»Ímƒ÷ñÍFFlc£è$“ ¤:1kG˜Ù~ü½goÇšQ‡èŠ³$‘2»<8¸º_÷ª“ÑüÝA*qÿ¹gwfbFË¹kh…·÷çUGÞºÜ—ÉÜå¨ýÆ:“ëò‚;Êˆ;àžZ}·UUu‡^÷èúT^ÜI±N¹—ÔÂ¿ ×
‘¸ãz¾³0sGÀ‰UœŸÑs$†î8ÞAÌ½¾žH±º÷fHÊ ½ îó'‘g—R”ˆ;QFô2#áî é ôqçÁ_UÒ5Ã{;[š—9Ÿ	T8Pq¿pÀÚJ'î¼¹ãbD€ˆ;]ÊCb$µµXÜg@¹Ö|¶{M}:„äû´`néjTºöRvŠP÷Åâ~5A˜{O™žhAëÖ–§™U¢Å©¦¸}Rpø.ò¤wÊ©Ê@ÞM”¬%V™è³4EœÇÅ³yYX`[*¦² §NÃM8—ÇÜäp„¬æ-ëÈˆ5ÈÅúˆ¸»@ä1Á-O€Ô2AnÆ¬*;ÃWÊqO×ù•´]4)C½]$î_@ÞžNÜÅ1Àâ^¼±Ò!ólj£èhª—Ÿ³+`¿ý÷Wû Ø>ëõÞÇâ^ÜµN?|½c˜Q‹_§÷2‰;áöæ†NCCCå˜LÿdÞ¥(“SòÌ=ý‡ûf˜<™éKyéj‹û/ØúïÿlBeuãáÛ îÉ#wZ,£¿Vð‘2q'ÅÚ%¸²¢Ì],îø4³þŒ€êj¨J»ÚI w~tˆúufq'j,wDÞâœÏI»KÄ½ž³„¸S“-+ËZÜS
VŠ6ëy`ž÷Ë¼¸s½8¬A$îxÖÎuBŠ²A¨¼>­¸ÃàÄýúu‰¸ûFšƒ2/EÏWÜ§#å'îYŠû©Ê‘ž“†öã®m–žŠuejÐ±Èþß'J2îÓàìÐ
ÙÞ>ÒÌÈÆb1·8F¬#h¸„›«Ÿ†ˆ{‰ÞUBÅÝáñáÕL%%»_UYª”I7p'âþ->áþw îÈÛ©¸óÞNîàíâ.Hz6õcÙ‰»ÍÖPÜ²ºÞ(³Å]<qœÔ¡oÌõÏíÏ¹‹¡Jf¥c}£AÏ2GÂû¢¨LúÕ©é†gs:e(6¦’Wû¸2]†³})Ï…ÊõöeÌwbMÅ™{zqlSï=aÔeâÁ£·Þ"âÎ¯OÅâŽFî…¼¸c},ºvPQQ	ò(¬s? qç­~QÚ13ª&e.a:GGQ¸ªûaÚŽ™RMÅ·¹‹Zß:!b§ŸRÜ¯jì þ	ÜñÃ» |PÕPö({q'’\TN-óølj§°ºžÑ	 îX¾Ñ_ôl\Äâðø·ß‚M±™ÅÎ9ôgÏ–#ü¡mKêçÛã;Ž”¦-@•]Ê)1®`0ibòÁãŒ6³Ô²Ã®Ö9ÀÊ¾O‰»+‚ýKÎÐH{âÎ2fkl;¹ü~bê€ÒìÎ]nâîXš£¨Ò…oøJ™OóKS…÷/
—/¥ï‚ü*7p'ÞNÅÜ?ÁwÊ|’h;w4U•1¡Æ}Fæ2`'&XaÄ}ß 4±Ü53Ó55gÇ)ÖÁáq®}&îl#£:??8øÈ4qOoî+ZÎ]CCÅy»qyX1£·Ë3÷Þ®ÔDa³+ÅÝ©/î@ËÞ»?bÔ„m|ãÁÃGŸÿüç$xäSÜ‹EgO õ$e8u|ºw IÜ_N˜{Õu ÄýbÕÃr¯;5$e†Nf/î‚o
Ôùˆ;§¸ ½øQIÔ½¦F¾¸¬‚=î¯ÁC~ú4q'·çèÈ=kq/Câ¢[MJÎ¨{Â¿wâÞíÊZÜÑ;\Ö|žOÖ4°e¦oCÅÌáü•Ü°`h^°‚¹û£!×t…/XdrÀähÞ
BÕ£`UY8à*Ñ;õœÅ[-æx§·¤í”Cîÿ&:šJÅ–K‹îÿÌWÊðwáÖT©¸Ó{zq'€¸SàŸ‚®Y™Ëà¶(ëÒè¯Sïg77Ö¼Ë6÷\T´À‘×Á}£Ó7Û
Ÿ¤:€¸gž¸#Ò]Z\›¹khÈ@Þ|{ÏË(ÈðR*s—áíËŒb¬¥¼CõÅò2ï=ù%£*æ>J=r/ª­…PX9¹ÿG¹_CâNì1q@õÅAÜ_&µTÜê¡×•N°¦fGw3K“2XK{ïÞí%¾Mý[tÐT’áfÛU¼ÞuAÒ)Ô}üqø2‚4þ(¯ïÜQÿNZÃtˆÀƒ¹cuG…”É3ws§âN‹;PHH¨›¢~, î îÂS©‰ZËdq'{r©¸s‰þû/ø$úëjÔÂÃpéHÜËÊ8qßµzšmFI}ÇÓðàÄÝÃ(M³6‰‹øÅµTÞ	þ-&ÌÃáMÜ?š
`Ë,ÿpév  …ýVO ÝSmãq…·¬»äÏ²ó ­HåjŠN‡ÚgyÉî®>¤G•20p…Ü¿žzàÞž¼4Ušp'eèÀŠ»0(ƒ¬‹;þ‹¾Å&˜¹‹ï¯È’êaoù­+ƒÞD?ÌðrÿþªÝ½qÄ½¸k|0¾Á‰»±o)~âþ[äít“|qØ¸vBUCC2ê[ì“ŒÂ¬ods—¾¿“Q¸]úPŽBÜ_z¼÷äÙo®²º›Lo<¢ëSE)÷WkKô åÈÎ‘A–œ¦â^(w°-h?)xsGqå3ÊÜ-ÖÑÑ{mÜö!\HRŠê©iÃô<“¸ã ÿ2£žŸûŠ¡Ÿ„?Ná^ Ð!<MÌ$L–ˆ{fˆþÒÖx#Á‰v¡¸ã;¯¯zY"îbDâîŒ™Œ"õ<…Ã© îðX©´‹¼ÒÉóÄá_Nü&þ:Q Ÿ‹¹Ã!êRPƒke²ôÁ‹eEa·ƒÏWÜ!ãþ¼ÅZÝ»MJ„tBÄ€RHù§\Øžh8è‹ú
¢M#Q3“Í°Œ5	¸ÐŸ½‹{D›¸žµ±?LÞ±¸—áîÒ;òöVAÒJ^Üÿ,åÀýXÜ?H·/Qq§÷—Ü"qo(î[ËŠ±tÄÝ{yÐÛÑ˜wûÔ”qcf2¶½Iïl¿Û–¨ë`Tçàà µ¸g.r§4îè444”Ÿ·ït0Ê3ë–¨n–¯#v&EéHù"B}q·¿÷ìÙ³ƒ_ÿ‚QÌÜ©¸0r‡FÈJNÜõY‹{/î½÷LJ?N‡µ®®wlÝî±:"î½°y‰÷:õÄ âŽQJÜÁÜSˆ; #wYâîPÐÍ?=Åý<mˆ¡Ð:ÈlÄ#WÜwï<Fq¿Êâ~ôuÝ²Äpƒ~Ÿ‘Ó–+³¸?31òó2~?ˆ{`{$dÉ-t¢A|¼Yï;‡‹Ö£ZH:qobº!HS‚¾¬žVÊPqÿ€Ü3‹;?pÏYÜ_xüX¼~É~¦ƒ‘Ô?'Þ^ÙŸñòA›Û³s«;s3ûð–û~|pÍî6Òlë~+£6¿qÏsâx÷t
ÏÛ³ò4xpefv|yy|r&î=L±[÷¤÷M‚f™QœUåÍ½8"uiïÉÁ3ààF]o<|ôfbäþi /a*)q/#âRYˆÄä1IÜy@>ëë‰ƒÎo+ž”ióÜ»7àé¶°¸ò*Š{{{O’ ;‰µˆÅý‚PÜ¹ÍFä±’l
÷eR#Nc8ÏÝ×¸«[â=ª\¾;onXÝ!åMƒ2RqGBà­ý4‚÷k‰”³:?ÃôÓN$îóçÓ,€…7H;ÀŸÖÅI±¸Ó%«¥ui½ƒÌýÅ²`(tÏÑl`”‡ÝöIðÿUÜ[…"eÄâžJà
ÂžÍÅ`â~<ÜÃæ02©ôOWºÛ}9=PGÈ_	±c;/!ñö’ÝD­ÌÔhÂÞ‰Ä½ê{ÿ		wÐvÉÀ*e’’2_NßùUQ$©‚Äâþa$€îdkjÒÎÔÇ í÷ê #‡	/¿(uxrv}ÐË‹{|yvC·ºŽ¶Ú—Öã{¶b‡qÇË¨Í¯€¼Å½Ñ»S¬ÓÐÐÈ©°vy™¬œ]j:ßÜÚd+“Žq©¤gööFÆ3ß¯|2ˆ»ý½àðá/UW÷¾™ÈÊ|ge`äþjaBÏ« ˜P]«¼VX~ºètQy¹HÜ_ðÌ½ob‚*M5˜ÍôƒeLžy²oi9òÆºKD²±·‹ÅÞYÃ’äÈÛñ÷p÷ .—I%î¥)Åq,îÀ\ƒxC*î„+Ù‰; æŽígÐdÜqTæ)FÄ7(¸Ck˜ð
¦Jø.íü5)*îChä>Ä‹»¸ IÍÉùóÐxü:äí¥Â#¿è–_©
÷Þ;žf³I­â²4H(–
K;þZô.ø÷©&î–‘Ê
D%/îµ"*	µ"ü‹ª‹;ý@eÄ”Óª§@$vÄr+Ÿo‹ø]1G»ßŸØÀTît–»|Axá÷°[®r':œ
GSI¥h;/îŸK?p§GSÓÜÿ\šp'âþÇôd*¶öÏ“©Bq·Qqïšœ`dGÜ)ÞÙ¸OnÎöµLv,»ÑŽ•VÚoL‹eÔæ}%&î@+œ©ÕÐÐP.'³š}AËRêc&îñtî>›¬Ë¿`Œ3ª0#1wõÄ|ïôñþ“jî*GÝæ‡ï¼ý6·…é›däþ]=n]Ð¿HÒë¤í£¨Ï{á–ÖÊPo†"îzÂ™Þv3£
&“n†ª¬ÔXÝÁq#:z[À-ðy±¸W·qÇ «Dg&…§S!Æ‚àD³T$îuXÜ¾s~2nQE.{Žˆ;wr‹;†´A¢³©tsj‰"í…EhqêE*îÇPïµ¢›S¡òqÇ3w¾Ñ^ÔI·/ñâ~ùÿ‹Ôâ~fw4bQµ@4ø{&îmá
*î”lÄ}zÄb`ówÁUÂ%ˆÄýÛÁœROæfSSl 3ä¶™-è³zbaŸ‹Š»Ëï,tº¸:Hè´4·û\zWY‰þ:šJN¦
;Ü?Ç{»èhªÔÛÿ’ïpçîÔÛ%âþI^Ü4pMÜ!&ƒÙ”Yå Xzz{fif3q6µq}rf¶¤®ÃbCãF¼ü§…Q™_ òË¸Ss·é444”êog²£u|J—ÛÎ
“’¥ä9w†nÕ¦›F‰¹«'î/ Sïp<;Š¨{ãoüà^Ü_A)÷$îhÚŽ–+QumèÎpÐw*î×a"îêNY“‰…Ûî1,îœk§âoÂÛœ¶ßJw\yS ®NæãGMÅ|6i…¼€¸
ÐÆ±¸ƒ†â˜ú^Ü	Ä\3‰;—Çâ‘«HÜiá]DTžw}$î°•A‚¸Tœ:†©Tðl*ky}.`~nƒ\A$î^Üo—DüŠ+¡¸—vÎß±Þë60jÒz®â~LqqoòBHÅ½0	xq'Ä-šØ¼¿=Cß ¨¸SBÍ¹^Ü€5Gq_ˆ„][[A(”! q¯DGsŠÊÝc‰…Ïè!ûG:Ü_áÄ]ÒáþE2pyû¿§ìp—+îŸ‘ˆ;1÷bhZ.~¼Ô!³>YPìèÛÇâÞº¼¿:¥ÛŒ/wéZ–WºŠu6›Q‡)žR]ÜswT†ÒºÖ¢ÓÐÐÈi>Ä¶’eDfÕ­Ë@WêˆËœÄ–{@vˆí¨oîT»Uw„û=øï€@£î*Ã>x‡ˆ;-–Á}i/ãÜ:Ï€‰¸S@(TÜYÝþèi’¸—f!îõUÀËú„¸ó6w‘¸Iâ¤÷“€TÜa-SÜ$îÕÂÅÿÈÛ“Å¿à q¿sVd–©¸;#Ê=å†¦{£WÎ¾v'ÅÀ^åDÜ¹¸ÌMD²¸_†§”_O+÷Ò;‘Å&(úTö9‹;d«¦-GqG]é#Mùæë§³÷é\_NšCÖœ>Õ¼Ý¾ësazÕô9k‘ºã‰»ÕlŠÀiŠÝ]_ð$ÜQ¥ŒBâþ×"qÿÃÜÄ„ºQæÄ½C°oÉ½¶§‡Sgæ¦ºZöVV@Üíãñû6ÑÞçÖal«­ŒÊüÏAþ­2”áÙ>-.£¡¡D¾½eÉïª.æV)-[Nïí6ðö£3÷†53î{?ãÅý¨¢î¦?|ÔËÐ‘;ˆ;q®þ€¡ûi ¯^}•º—	Ä@âþºIÍ½?~zŠ{•¹E‰{=x;^%E)ÁPs¯Â3÷CÄ½T îð—-å A÷sl®²2¼¸£Œ;ÝëZpv’áÅ Ÿ‡a;ápŒàßRð)7õÜ¹ÒiÜ¹r¸¸Ÿ°¸ŸÆe¨¸Sâ~2…¸÷Þ}ÍÁMq§‰¸‡Ú¿  ]®”IÜ“Ojgó÷Š‚”$?µÎö\Í=µä”ü·O[M‘ÀbÌIÅÝçs¢àY@ô0žªõúÐÀïÍÏÃÉTDjo‡ Ì— áÎw¸CRFêí4)Ãw¸mO¹|I’q8qË¸{ùL{ëœ{vpÝ{›vÊØv[ËÒøý¹]ÿòôÛìv.tâV_Üdˆ{Fs¿½¹ãÖihhä;oïËÊ“—º,ÙiM¡Ë’‘væm\gTeS'F5qúÞýq€Üýè¢îÝÑÈ¦Ü©¸ƒ¹Ó¬	˜;ŠXã&Â´â^3Ö£^ìø±µ·N Î¤#íEcð“7nÝº€ŸáÔ*zè8%#w|[FÒ2u¬ì< èjõ¥¥ œ	q‡íCp‡—o$‹û¹Ôâž2ÁgS/] W€"2ø¸ LÖQ,‰úzâž€t¾^Ÿ|.*ÞNð-*ù”wÁÄýÎy¬¢&wáÀ^QÂÜñ@Å^,¼‰;µv^Ü{{GÛ-ŒºÐ5ý*‹;EòÕÕwÿ)‚¨9¦à"¦P@ªµª#yŠû¢/¸SèÌ=Wsw,äÖãn»Ú[!G„Šût0Œ&îÓ…$à²´…áÏWt`tìÞSwIäßð	wÁÀýËÿªRæ³´RFº4õSÔÛ?ö	ªíqm§ÒNæíTÜ»ä‰;ÛÊgÚ'âýSÐIKf†×lö†¾Ée;Š´ïõëlFcƒŽÃ¾¤²¹ÿò•y_(î /î™Gîïš]§¡¡‘ßÁÔ¾Ö¬lWÎâ3÷$#aYò(Ò‰ó&£23ÉO‰zâ¾÷äC@<tG@Ô]õ~™7¡’+–)I!î`îÅ}tAÅ»ùOo–"î€q'·¸É2gq¿ä*î·w¸ÍZÜÝ¬r÷ž×ÀÊù‡ª¸ŸL÷Î±öH‰9š¬Îß3q7Ç*ówSžw>’QÜó4wÖlÊMÜ£¡˜ÁÚn×sâ^»jAW÷à¢Ù
ˆ‚¾ïYïý'e¾¦ž¸“y{Öâþ¸¡XfMãmïf¢rsÎ¸ì`¹„êž®Øfëšq/np·u6·ÑwŽþ8£*¿‚|§tâ€·Ëw`b\ºkhÈCâíLf@»å±ÊHè?Œ´ßXaTgYí˜;Uwû{0¤ æ~ÄQw¶ù¾ó“7_ùW<r¥Åæ.8Þ‰Å½\,îˆ*J}ý¼GEcŸüt¨”"w0w^Ü±Ó×ÕÐþvÁ!Ï³	Npæ^G¹€©BW³qÉ'w}î8œC²24*’&ä.lIÈ£D÷s)aî¸ çEHÄÀÃH%â~]ÁÙ¢B µÊÐ¤UN¡nõYÂVZ¬í‚C§¢l»(ç.wà2_÷`qr	Ñ9q˜™£5ÿ{çÔÖyæa™ÅÅöÄ—ìÄdl§ñµ1nÝÚ™f3ìÖ»uÛiÓÙ¥»ÓîtÿèNºÛéª•( „…ƒ´HÜ„WsGA¨“1˜ƒ@`ƒ!õ®'ù—™Ìxhä`E:JÍ'Þ÷û¾óéœ£#		Î=11FXJŒ½ú}¿wrðÿHÜjÓ®2 a1dŽú$î›-…ÔVfDå)¹6mî!vU–õ”Ô7OÈä€Ó©‡Ím6*îõêö{óoÔÔÜ]}uAþR’pÇâþÒ)#MÊühÝ¤Ì)Q‡;@W/Ò ðÎ×¾ÄSh°@Ü=åI&e:ºé»#ÕÂÜìýuÇ„KìKÓ^½´,^cuØ©÷Ö"§¼¸É‰;`œHÏÜÓ¤I2(“ü¼½Û«Jw·ä@yD &Æ3‰6,ÉÜæëxê’ï#Ä}
oî>ŸÏ¨pÒ][òÖ[oÞYÆëS‘¹cq§sŠ;5w^ÜkÚ•Ô±ÏøÞ»¼'Ì¦Åû`ÈèËÌKHÜðöuÄ}çy*¹Rqçd˜ew@,îøÉ¸c{7ÉW*£­ÆóöÇ/÷u*(î;{ß¨P³)Bwm²ykÅ–}SÎFÅ(­.SbâNÅÝÔÜlžPMÕ=-¥%ímC™ô…›l&îûUc{­%oS_/êp§%î¨Ã=îÀ–¦Æ_¾”¼¸¬ïÅqX³²ÝI¶¸7TQQ÷BÜÔ5÷n—[£±÷{ívF…YŒÅ^H{îƒüóÚŸqÿH,îÉGeèÕtÎ=Mš{;“ˆ·wØUÉcoˆßænpÍÎÍM¹§%£úTàT4æNÅÝ„ïsTÝE3wŸßðöA±ÂãÉÔ}uõ5ÈÜ±·s‰ò@ÜÁ÷ñpAì°ºï¾q¥LÉƒ©<ÏÜAyqÇà³¢¤‡H±ÅâNáÄW¢sÇY‘¸Ó}ýp…XÛÉ¯ˆ¸£âNeï%s_¯Dk;„mˆ¹q'7™{öCäx‹;¾ép«18+ƒ k•Í‚Kº.#cGmÔºÉ^ÔÇÄ]2_Ô“*î<è²š:_¿t•nÕLÕ¹Ôm[*î-×åÏŒõ$+î”]€Ù6T«–SÜMf€wScWEY—-ü¬eRË¦Œ²æ}=E]=¥f’B_¸É”C§f·Œ†ºà¯{Í¥»/¿Hî4)ƒ;ÜÀw¸‹î¿UÊÄZ¾ôW)ó<'î§Eâþ(òv*îïpó/w+cÈÊr¸ª’wš”)dT†%—k¶›ÖDÎ,èõö~—×jµÂÊTT	„ŠÃ0nT¶ÆL±ÅýS÷$ú )ÓisO“&‰€{òý-sÕFv:Z¢Ö;Äƒz65”"Ä[	qgŸa¨¹Ž©€?è+Ÿ-(©}³²²´‘Ì¢©¸ƒ[BéITq§æ^ÐW«ä‰§jîH|#Ä}'HÜI7:É‹ÅÜ†Åý@®ŠûA¸F^ÜÅw-ó!o	8OÜÑÌ©;œN¥[®àÞÇ÷6ù<¸¬’lOêì¬y#wôï¯cYwüñ˜âŽ.ˆ{MßÕÑë:5›2´•;€­ž¸«S+î”XâNþŸ‘CÜÍ-@ckWWW{{+÷~­íI³m£O[ÆR8qomª¸ÞÒu½1<o7ÙÌ¼¸çöhëQ‡ûÝ+«àí î1–¦þ”._ú]š¸/,î¿æîXÜ©·q?wÈ·ch¤@Ü³
“_¿2–w‡¸´û„AÅLÌMÍÐ%ªãN³8;å c&ò÷,n#‹uDá2HwñáTa­L²QJ÷„S•&MšÜg?Ê™<zá4_êè2(˜KíÁTÊT¤yË/îY¾ÏÒ¡»!ôy˜Àç‡XÅQéà‘·œ¥äá¬L¶ÈÜó…#÷N%îï¯=àÌ½”—"š¸ï‘ˆ;Vm´‰”ÂEf°·SqßË•¹“òGà w\ÞŽß¥âÐþÈ§yoÇ€™óžo{š˜;y† Ï-°¸ƒ¹ôEú¤ˆB¦ñÙèîG»SsøVHùÎ¦†t—PÌã5Ã¿	’µJaq5\òâ.þ|t)'îpYçUH¶§]ÛeIà™€ùšÜâ®®kÜ…(â.Z£Š ’ß¥Ý„¸ïLÍ­ÍÍ]ccc×k+´j âúõ±±º
r½Úžaî^A'0REE]{ëØ¨­}L î-æ=œšß\VýznÁÍÒ7î<ËÜ‰·‹î¿Üÿ#j‡;¸coeDÞp]TÜAÛ#Å‘lÄ½ªœ–AVÍ@RÆ983Û@¦:¡9·AcwOtOÁÚT05@Â¿v®±B¥û|¹²eQ'îŸl|âN›sÜª4iÒ¬‹TOG6áí–ùi×ÜLGÇìÔˆg‘‰ž–ˆ-ïgFCj“2ä¥¹ÅÝá¿wï³èêîX<¾ Û\úØT Ö]k½Å²{÷Ù‡pÅ85w<p/­PòÑàÇ»ïuîŒ!î ß7HÅ”ÑÇ÷ÜÝÄÎóòwt¤gÀÜQ³•Öˆû±õÅ=CÅîþ‡ñÈ²«U'ßÈòÒãpóÐ¼]~qï¼\
-©EÛnÞBqWlæ¬íÉØÄÅ=§]½ñ?½«¥¹gh²ºB–‹k9ô^nMÙvuÑµ¡ºúÖ®J³`ânÊ1Ûè¾ç×«‹zšn¾v÷öêêå¸w"îâ»øh*9™Ê‹;¸_Ü¸n$âÎý†r<"º]áR™â)c_œ˜3ŽèkädŒÅíÀQ£W)<rÿ`-îÄýÓä3î”9‹*Mš4ëáíãÉN¦)šÅ±nvÏŽ;¢É}Ü€ŠÅxE×ldSD1#ãùÔ¬h,øîQÔ%e¼K¥yßZpÉ~À¦u]knÁî£¬­h*RJt@Þðƒ!€ýòlîë£j%¦Rð	U‰¹•Ãg\à»»HÜQZf;æa|ëQ™%œpÅ¿a¢ëÜÀÃ·D¢¸w"–ò´ ºYd—š0i$šê ‰¸ï?‰ q|¸—ÉÖ%áÙ_wrPußvˆ	Ö÷Jù¼¨h´n_ÍåNÒk	àŸ€ð‘pN&blXÜÞÛè¥ˆË—®ŒÖ•±©F×¬°²óH/§k«•}²Üîo`‚ð÷œ0 xq‡jrêC›XD;¦+)+bãRÝÆß/¶É”ÔõkËX][›®lr¨™fÜÙen1ešLû(ä^ÿúÍW^Z]¾sg™Ü©¸ƒ·ÿ£`àþ3’”¡KSiRæ»XÜIÂýÇá.ÈïO¦>ÞN—¦ŠÄeÄ«— ”•a“Š¸—w4Ðdz@\œš™á2ïÅ³ãn§{¢Ü¸”¥w2Y½ÝâpX,XÜv;z˜Q¶’?UÜ¿HvâN™K§eÒ¤IÚÛ-ìúÌ©¤0Ó¬”b—W%a<î˜{.ÊH¿ŸM³’‘»¼âîôß#HÍÝ‡"îGàó Ç~šYøþÌ¦€Ðõ^’þ&!’¼ý`îx­g&Çv¤û²É`¸´"¤ÜƒÁMËˆÜš@ß£PÏ™;ß.ÃN}oOÅ@c=‰ô¯;OB"Lô;)(ª#…Ê;µYü>wwT7OÅ@ÖN âÀ‡	ôƒLÀ&gCW
··æòåóø•„óàíA¿1vîß”Ç¯$H^j€ûå+u%!6õÔ6n­¸ÓJD™5gÄw
5õˆ_âÊu¥Û^Ôc­&z¿˜Ju¬ò”jÇÌCe¡ÉÆ63y¦rèPÆ°y{æ«æü}ó$[ÛûÚ+«·o¯.£©Ëädªxàþðvš”A÷ßGÜ¿ËÜiÂý¢JÉÀ=q×déû»“lq§¥23nx<™Ÿšš+qé÷~‡Õên(·¨,^FUhuÏ;¨Ð{ÝhÚåu,ƒFeâ‹{’ær¥Í=Mš$ƒ2Vc}2ér¥Øß‘ðé™¸¥ìFÑõÍ³Ñïr°)Ã#ßÈ=KŠ5°òÉ½¨êMP)\°øýîì/XüJ·ºÓý÷¥MTÜÐKûæã‰;¿	ˆ÷î_<ñî•¦„Å½ ˆ#î’w¼ÁâNïáT½@Ü¹ÐÉcw__ÜÆ÷½"q'à.K"î²MÔu}p³jz/“g!2‰{_]»5Ôýˆ»éšì†:´kÓâÞ¦´J‡*tífzl+-I¸w•Uµkµ•¶Ûp ÷¼¶°ýUÓðÈ½µDw÷/¯¾}{ùY^Ü%wìíá;ˆ;¸Ÿx;wZ)“˜¸?OÜë;YIMÜf8Oè·ª4ú¥ÁÁ)#ËÑo€ÇÅ™‡uÑk…);LÛéc9³€Ó§…Ž—Q©2H^Üi‘»<âTÍ.¤W1¥I“TÀÝ•@ðNš]ûý¨xZ!ÂòD¹˜r1(Ã§†½JˆÌâ¾èû æ.Pw_0èx‚~o 8ü8c¿pÁëƒ+Å¬âÀqE¡¸£¬8w"íBqo­)v0õAïÞÄÜq&=ÎÄ{»TÜ¤w°c¼ø•OÁDw²KŸe]GÜ¹¤=ú(g³âNàÄý`XÜ9so%îøR^Ü›«YÙÕöbqïm‚c³ îÀ&Å½³³÷ª.åÃvºÂ§Þ¼õâÞVÇÊL½-cÓânj×²J£í‚™;¿‰IiŠÚuêÉ®"íd‹÷G†·gæ›òÃY™Ú²»”¹§â 'îÿCÜB» yqÿ{eÄ½Ð0mLnâÞAËÇáÑ1>èšCuàZw•{vše,¸UÊ²à#*Œ™VÆÜ?%âŽˆ#îÿ›lT†bìO¯bJ“&‰
÷v},’qûz¶?eU‰™gE4D;ëß®”á’Þ?²É»Ãÿá‡ŸDS÷ ß„N¿{N§žÖ3§;!7³0ð}ªëÎŸvŸÜâžyâüÈ!àJÅüÝ“%ÊL¥¬½{—AŠ9	w¬íeî²ÆwZÝrö$ºçÍã¡W Üì. HžºúA ä=¬î íÑ™V`'ŽÁ“âç)OË'9¤|†VT8{—¸Ûy	@úeZur†Â/Áí¼t©	ßr¢îRqðObq§õ¤î÷uÕVC‘LÊ)©.áÑtÎúâ-“¸Ñ‹!+µ²‹»)®¸‹K"Ñ0pÛl£!åUº'|§˜”7wuu	;ÙSRÝl³™ÂQ™œáí¯fS^}µµD{õå—àdêÏïÀÛßˆ’2”ù'ÞÛÉÑÔ¼ý;ojû™3gxmÿ&3ãîž-NJ`ghÄÝ³­,gÿÜ\G…ÍÍ6x•uºc^åðZìh–)‹»Þnà_	Pä4RXÜï¯#î3÷A‡*Mš4	Ü™ªd³$€eýâ©ˆ­Å› {£´¶÷«XØ”aQ¬Ë]3¾ò!@ÍWw”’ñÃ°]ï¿ïw;™ãÇí¿gÞyqÑï[yŸUõõ^ZœÎ­3B#÷'N:§Þ`wgN&Öß¶:µb¡I±´Ã?>÷n“TÜó8$3w¡‡Çî ¾¢ÎE¨tÉq—P ÷“'áóÀÜÉØ÷ƒq§÷ÕQ®j?‚Æ×üDúi±¸ÓöÜ~ÃÝâç°B*ÝÉàA>LO¯’~Y»|t}pCû®–î!Ï9à+‰*î€DÜ)¼¹×tUlMF&¤»V§Æw¤ÏJˆ;üîDÅ½•›kë‰;gëÂâ´*_Óªíþ™F3™¹+þç©ClåPÙ¨­¥ÑDæf@ä>˜¸s‡èáœ°ú—^q_~ûVi¤ØÛéÉTZ)ƒ½ï‚$ÞþmZ)C;Ü_z»4ßþ5@ªíMrðPÃ,$e0Szô@;ÈM­r¹-n;¬s*Ÿ·Ì[œ îòí¨˜Q…qÎ(2eá'î
ˆ;P5hW¥I“&1qŸÝ@ä› n•Gœ–š¬†(É÷)v‹Î§Ê)îîà‡©º@Àç·îÝNsîB ð‹–gÜPúVi´o\Æâ`¿,€™û¾L$îxáþ¶]däÞSRü`*¯îkkï–žßAžAÊ=Ž¸gq§Í‹ ãBøÃ¨ôšNr×?Ü%ân£ÙEqÂñ*îô^¢ˆ;ÙÅ‹;<eàÀ™lî¦ÊG¤Wklº2zé(™ûy/î¼¹¯'î5´ý1õhk+‡P•ËXË_€¸É®Ã÷mÛˆ·#†GÕŠ‹»ºHWTR7DfîÍÊÿêÒ–êÚ¶¶!÷CÛÍæì|³ÌïùC!ø_üÅßüN§¾ýöª òëˆû8q§÷_“£©2Š»=±R™}Ðl˜1Ò2Hôâ¯×âÎsý3ƒNƒeª{¢œÑ@JÆ ·fE{•X3Þ­@ä¥Åž›¤k!Ó¤‰AVÒA£AR“Å–xeñÅL”™yñMKn³2Yôý+È!ÊËø`'“? !wÿ}ßâÆqîôˆ¼gÑiŸú-·¾/Rbî;à¥sÏ¡Üžyâh &’âÙ-×”²´OÅÒNÿAiD}¥PoçÅìPE#kÚfÉA…\@…»&z-ä0+:¢*wò‚Š86÷cGÐ%ÄÓÁÛ# ÞNÅ=W(îÐÛ.wÞÜ³–zµŒÿ¥;¡[¾æJ{ïQÂÁcøŒêÓO
Ä ewx‰{ß•+õeŠzZüFÛpsûX}«é/@ÜëX¹Ý´¸£›Gw0)Žº}Y£jë*Qúªl+)m+m‹û‰W³÷åÛlù ÅéÕ±Ú7‘¸¿õ6De·G¸ÿLp45Š¸wÊüxâþ%©¸{gÊÇ”‡ë”g\7ƒö+y\ssåx‰êt·kiÑañÌtô,j SÆªÉâGLáÈ‹é7Ê?fQ^Ü¡ï2½Š)MšDîúò(^•˜iVHwÇÔHÿàŽâ‰/Ò‹C9â°Ÿèüª7Jé$3Â‘»BK˜æ;>FHÔy»Ï„ù<çÎ0ÇÏ¯{ÀÛ~_à¹gn-øƒÝJ›{}o8»}úOÎ‚¸o‡‰;HûøÃm9™ î­d}§ ÒÜ1ïõJ#íã¦Ãr‘¸ç¨¸ÔÜé&)1áëÃâÎùrØÜ÷çáÚÂŒ ²ƒ±â¡{Dm$GÜÏböbBêNÏ¨ŠoMºËy6UÛÕ7¦óJeÍQÊ vÃRðÓÿ/_âëchÎýr¥®¤DËnÕÍ»¾üå[£¶wn½¸*)î¢Ã§"W—Š{Ä…b™›*ºšÍÃ)9¢ªªÖN65Æ qßâÞÒ’0ßhº
Õ®>ûìŠ·—Ãî'î‚ü)M¸ÿŠx;÷ï“ˆû¿	» iÄxû)äíwOy"ñîqª÷Æ¹Ùn2~AiQËøÈ ]CGÿlq?c]ô¸ª\äd«Õj‹;Å:ÞÁÊÌý
fÜ)¡Yw–*Mš4˜8RêJ>(3.ºP°+Õ>?bdEÌ¨DŠ&£”ÎT1›ì•©ªª’cä®’),ãt}üi4s÷}÷‚ÿgÁ@0èa¾zîø9K0èeöÏCÍŒóâ©NÝ‚V÷÷•Î¹÷'ä`™ûa*ž¸ÊØÉ8±ýaÓd‰Råb’|û‡ï=<eÚ÷ïßœ2P@ˆ)TÜÁzQ/ËvºýÕ¸€#?±WÈÙ“»Iœ½`? ×J"*ø"øwÞÝaìŽJ3	'\^>‘H;Õû(¯D¬xÖË<ñ„ðiù,tï‘3)Sw¥fÏÎË•¥{h+y¹€7÷°¤KÅÌ\©ƒÒö­C7”óÔSÔQ•÷§€xâ>©V*ãìª;×`“È¯àØžšBZÝ¤OÝ‡¯iYEiª(«ìi&ÏcCéœÉ6ßÀko4Þ¼\Ç½¹úì·Þ\&wZ)#ôö¥Þþ<o‡÷Hoÿ/nùÒFm”9-ñv°öøQ™Äö¦6,Z¦¸€Ì,7ÿêž@6n÷ŒŒLÑÑÔ©ªîi3=>Ò1Ñ?áf«Õ‰»eYâºfÛÕ-ó÷ëHqÿHq‡¯s‰I«{š4ëì^r'0°ªDxâí*Ö{:X!*!NV„C,éÒ–È	6qÊçFÆ—ÜNì’ó.MÌÙä˜Râx*3ßÐÀÜ#Õ}%¼çóX`àîÌ3zæÌÆ?pú8<4¸ý~ËÅçí·ž{æÔ­%ÿŠÒálî€‘{4qoSHîKãías¿ÿîÝ8âNIFÜ³EâNÓìDÜÑÁÔ³TÜ,îy
‹;OÜó³oÈYë§ÖAA~Sß•ÞMˆ{MßU8í°…Mgüÿ÷ëfYÄ=Ã6ªeSC¨®qØ´#æ>ÙXWÖ5Ùv8,îû úšÚî›7_¹Í²oÝyöÎmpoçJÜÁÛÿ™$ÜiPFšp‹;edwç\ñú¶êb¬ó³,¦¼ÃÈÍ¼, ãÆ38ˆGðlƒÇîX˜öXN»Q·Å=bÖ”¥Ÿè–7Ø{âÈ#î@È8â,T¥I“ˆ9LžIºQÆ+Ör)å¬ gœƒ°ãâüÔŸÝÞ0²d‰Ìá[ÝÓ³ïr—IÜ—¾ q—ª»Ï·r/¸èA§S=^†a¾ª‡SªÎs§O£fï…‹§nÙO=wëÔ)Å£î°CõüNð70÷cy¹O@•"÷ß!ž:œy@©£©ŸIÆí¼·¾Ý2ÇÄ50ÄjO"¨Ï#îôqåÉA‘Å ¡;2ÿ“®ÖÙ³XÜEˆ;tÉPoÇ ´h»@Ü¥-–¼¸óI˜ÎŠÄÏ¹·ÈÚêWÛ{¤©¯²´‰Ü®£ ÷Ç(_!÷Çk.U¾¡+ÚRo‡ LF–iŠÔ¥ã÷°‹>ðåhàÿB*î¼Î§^Üù4Œ8ÙNà¿DîSÛÚ¡53%¨GÛ†I¡{½¢ÿ{Ô·… tx8%…efrÞŽq{ÿpóµ—ß€’Ð;¿\]]]^^&'SIÂ]:p§]ÿÎ‰û÷Â	÷_‹;ÜÁÛðv^Ü'-îól\hï#3Âo4’ûÀl_‚‰û´kª¡]PÌÎÌ[¼Þ…A¯Êj€œŒ†ö¸Ç‚1Êù;iqØP<åÖ¨Ò¤I#N¸'iÆ*L7fIë`Ìº+d.ÊM1Z…óûî&íƒK1û_lÂ,ÉrÂA™/¼¹Su_Aa™ F]ðÚõ_=ç*wèƒdN/úÌ…SË­çž»…ÞüÊ¶º—\­qGU†;ó
Î>!î6…¶¦~cÞNÅÌ]Ø%CGë'1¹<	‹{¶ÀÜÄâ~V îàÒtä]ÜOà½ÄÅ=79q‡[óúXHNéí;RSZÙ»G$îÇ°¸SA-îw–¾QQ¤e·m—ù/DÜëqo•Éˆ/îü¥TÜ›&µlŠ¸nÛ±UÖ–•••¨YE¸kà*ZsÌ¦°¸sÇÏs³ósn¾²
k†Kn?»#÷Õ?Ñ‰»()óÛp‡û¿Ð»TÜù»Lâ^8nL$)Ós™A»‹IŽtQ£xG?9›:`,†‰»ž±6XTzƒÕ®‡6H»=®á2Ó³Ý9ú­% îÀæÅ˜·ªÒ¤I3’€×.ªDtðsn·JŠÔÏ½â£°1Ï®Z9I÷&SUiñTqYJxìî’½WÆ0½ò&rè¾²òÉ
„ÜWüãn‹—GoÐ·;Ü/\°;Ý‹–SÏœzî…ç^¸åñ¯ü™UŽºÞoí$%äÐåþÄwð,îÛPhkêbiÛ±·#s‡‰6ÄP£=‹8¹—Àkp¤¸ï‘M I˜‡0`èTÜiÓ€/ §GV~ôgßGØÁ¸gøV ÝÞOz##]=bUrý³©¸‚Ã²B½—uý’º®¯M¥»¬Èþ(,îOgÿ:˜úc_áçð55½WF¡GfË©#ÉtqG?'#îOTÈ±¸Óëá‘ˆ{O‘ü6séf%1ÂOÊñHNKcódmÊÄ½hhÛBãÐÐPéX‘2âÞ\ªmË1£÷C'23Éßh|<5÷æk¯¼tû­öÍ_þîqÿk"îäh*xû/pR†¸G÷oóGS©·sII§ÌñÑÔo‚³Sk§ð¥bÝ	MÜÝ³\ÓCy1IÏè5úÂ,wpjv }
|¸cÑ
âÞoPê-^{–Jïu¯#¸Î‰‘‘‘Á‘¹nYªÖ0âV€÷åš¸ðE•&M&Ó·(=^ÚÏGKâu®.Æ¹ÏÅ®«iˆ¿égã1›ÐßïùÕ½Ü wTf±¾‘EQwŸïÃO‚ÁOîùÇ½z»þo}”	=ú3Ç-°YÃpœ¾xñ‹÷ˆû­[ðØñ[JFÝu—žü‰:ï<¶;—w<r7ÙZëy~-ZŸŒØÜïƒ¹#¤â¾7†ûŠë ã‹{¾TÜ*î{ñ&&rà5÷â.ÚóJeç(òv´Ü5Yq/-cåCW
/«4ßwxƒ’ËQÄÞ)5}W»¶èDª4MñÈS[)îÊOÜuÍÛ"ÄÞKJÜ‡Mm­C£º
6u¨¯™wðü®¥]«ÌÁävõX®‚ÐÀýuqoÌÏÿÃÍW^~ñ7·‹Ø·—Þ~ûÎ2WI“2ÔÛéÀTÊî îtàN« ùF {»(àþ(,MM@ÜS	Œ»Ëç¡À±»ªŠìM-Æ?¸¸èPYqïÁ/ŒàòvÆ®qØ³4–é,Mµ:`âhz×ëð¤`³ÜãÄýó5ñáTáéT:qÿ`“â”O8ÒA÷ÿcï|€Ú<ï<¯x“àKâ;ÁÄNœ„Lš¤Y×vëœn»K¤›Þ6ëéÝÞÜÜÞMÓîÍô¦JË?I³Z^ ¼Vd @ï!iö°"ý7’»uÖNæ¦sxqízXûU;ÿ.Mr¿ç}ôð¾/ï+!Á«˜9ëc–ˆÀ£¼~þ>ß_‘"îº|î´´£]žX†¥¤ÁÌGW2ù™ ›X•#q]Þ½2%
LÜ×MÄç+ÔýâÒÒÅÑ¯ë×ÚÇ‡mß\òjwïc`qêÒõäž=/½t˜a^xáOéÄ›
üíóo&–.Öjb68ôµƒ\ÝßŸ<ópù^dî 	àíí'ªR(ó™XÚ¥ÖŽ¸LÌ]t‹»@àÅEŠ¤K1»¸ã¬Ly¥XÜ,îð—¹oåy’Ô:Â°¸è6»7~ñ0°€ßð¶ñdwÑ	ÖÑ:E#îé²Jôyî²Š{Çøð\CMuŠÝ´ölª˜,#â¾9«¸o^¸„wß¶P÷ÖMò …hq—Z{oÿÄlç—^×9Ó¿YHoWA‚R£³Õ3=eí½ePk_v×ƒøéŒ¢2àí0pÿÅ·®4"qG˜. o´=[ÂýßóKS%	wâíXÜÉ¼]*îXÛåÄ½„“3G<Óf³!q·B&°Úý.Fe±»\.çó6è‡4Véá
®7ú¬^ËKr½Hi2^ Sùt	|ŠÈ"îŸ‰ûzN§¢a½ªH‘"2>Ë;ánË³ãe	n‰ùË7¹ødBîž,OlUîÝlV¤½òÍºÅŽõß¸Á™;vwu_‚:ú îÌãÛõÛm/]3ïÞ­]»víú53t¼B{Ì‡_x3–xó‘¸ÿíóþæÛK†ÚÑÈN€÷»°¸·Õ·²…/”Y™“ÁÚŽ/`îwðöR^ÜaI£)/ÍQÜå›q"î•¸iß>qX$î¥J5c§HwÐÖƒG¶òâþä3ØÛeÅ½c˜:ß·mª‡úû'7¸+/¨[2‰û–UÅ½­¿¾{¦îVd˜ŽnRV_S@ÎhMg_[OO÷½xñBÿüÞùú_hàþ­5©3¯½våüù‹ î‹¯ŠÅexqWÊà Ìë¿Ì.î{Ö"ît$•C¢ÝÍÄ©ZxU§sà>ó€ÛgT1.›‰Á;L6Öa7¢É›QOyÝ	Š¡óH“è½+Í½Åà€_-©\g-_‰û*â.¸ã2EŠ(›”±²«WÉ×3zU«á—Ý»ª7ˆžœU2Óu:‡Lº¤*?bŽ<!×-îU1ëà& ÊËXPÔž^üàâRòÒ!­~»
 =»wS´Ç¯Ñ¨ÒK˜~N¨¦Å®$?_wfä~jˆˆûÓ¥¨W‡ÜûºØÂð¾ÐÚ¥ÞNÄý3dî•k÷½òâðâ÷#âÎQà?C{‘äÅ½‹;"ƒ¸ïâœ/«Ê×&îŠíMM¥ª›¦ë‡Þwphlè>¸ß÷'_o—÷©Ó§NuwÕ°‡Æ“]5­³=HÜë
‘:Y«¸·÷Ív5²·†éÞÍBúg
3q¯SÏõÜÕ~WYÚèŒÅ½}¢~~þ7ÿóWÿíêÂ·®ž…>Èï\9{vŽ¦~aQ°|é?€¸ÿˆ;_â.'îdàžAÜ÷¬IÜ=¡jT¶%ÀJuXMXÜýá$Ôk½6ÖéöZtÍèâ¨CF£/¡½IJÀ¨rGÙ6äéµ©üW¬—Îætæœ}ÿèqÆw•Q`âìL±]¦HDUžîÑS‡b	Î¦Ü6Ùá¼ŸPk‘)yO¯‰•fùb±®¬~T}É:ÅÝâ¼HÔý¢/vÝšð\‡ª×ÌFÊx¼ýzÜ¸›
‡Ÿ¥®¡ õÊ&Ì>|øH¹ÿ1gîÏƒ¹ó›o(êÞ0žw¨r/‡ã©m‚Z™IÈj„xm'æ.öv¢ídæ.wPf‚$ßžw@$î¢=ªHÎÊEâ^
qßÝ‘Ü‹ÄÜáfÂb‰IçÚ^WôÜlKPrà·àà–µŠÅýh«B.%MíDY¨¡©Ž¯Ý÷(&Ýá¾“C(îÈÛÇ§kØ”:¥ Öµ¶®Ë*S£}ÓÐ	Øÿ•Â‹»”Â‹;¡±ï¡¬Qþ=bqoë;ÙÈÞ2Ô›…LÂ©]ÅIÍÂ&¸®ž»îîz`÷üœÌèàq”¹zåê·Î¤Rç¿ó3g¯à„»ØÛÉÒT¾Ã_šú=q¥‰¸o'âä/îI»*ëò¸üè©!}6Õ´øÜ„>îht;kCcwSzf4P™t'Íú|/ü¯7è×¥Z¬ÑˆÃšØ6ã«esäC‰¸¨ôêT)-Ñ8¥*R¤HU‰Ä¡³c—_|jÊ)Y.ûAìO§R-27²R¬ÕÐDÙÕ …7_çñT}@ÿûÂæŽÁæîùB³Î¨^™cÌ¡Çµp×ÒIš^º|Íü,Å˜)³ù•W~å ‰;1whuÿ„UžºÁ‘‘±§ VU¹oÛû „Ü7ÿ}{6ªÜü‚ÇÛ¥Þ`qÿfîruíÛ’w‘°Ìƒ¹cBoÁ½†>¸ƒ¸ßËäÉ,ŸL… ÜƒDÑÑŒ¾ÀYv,íp©·sÚ~‡paê^žm wþ~£
‰Xµš›ÚÙrÞ15µók\qå£ø\êAäì¸ï1-îLLíœ:Ö©VT¹jZ§MÔ¯c€Ÿjí©†Ö^ÜÑÒÌ~ž»¸KÉ¬í„Â‰ûÄC¼Ž‹X©í‚[µÌ6±·’™;6h/À¶eõh}cõèŽöÞQ…û½DÜ'†§ Ãý`âYöôÂOÏœ^ü6/î|PFšpGÜùJA$>™zX¶
’ˆ;tAòÚ¾–6È”É¯&]ápÄÝdK_âÌ~›‹ÖÛY‡ù|ÔÊ‰»^oÔêµ£5®evµ˜‚	oÈg8­†mÍ½RvâpâÜU‘"·="q§jÙU±ˆ†Ö’­JÙ1ÉEP¼“8Z›L-£Sî›‰5âbW!©TÈðDßEu'â~ÑísÇîŽ]üÈz=è	^3oßnÌÛ–XØ|íýëžÏ¾d¦S¯¼$'î?@­î7•ŸfÕ54ÌÖ=	½2 îe î=sêÂÊ|*ÓÞ.¸sWLÜïUHÜnÜNÄ@Ô[qŸŸUfj	ƒóšá¡§† âqhl¬cYÜñ±T<l'âþÈÈ‰é†îæ9E­+Õ8wb¬ÙL«×üA†Ûz¦j uåÿwq?š·¸÷Œv·²<",3YßÙÐÕ f•¤þhSÍÄ]ýý;ÐS?mPÆ}lîpàtêÙ« îW¤•2YÅ¼]"îdk*ööµ‹»>hÈa°ìŒ$è¤‘Ž°µ&œ”©uj-¡”OeöÃ8¾Þ2¤¸‰;ˆ»‘ŠÁ¹M½&ÿQ’Ñâv¸´ÝOS—Ã¥äQß{+ÄG†Ší2En{ª$
ˆ¼øúTbŒöP(äNj¥mîÒžÅDæó &™Z»GRµf¢lvÜÊ‰;ew¼›F˜—ù$êr‡ïf¢Ÿ\\ò%‚K	£QöÒZ†IóÒûÞž…+Ä8
õ
p‰;ÎÊ¤Íýço–.$êÞZß#÷­•å{çúzÿòïû
Óàþ™xÞ.Ž·óIÂ‡ÈÜ¹ù¶¬»ý˜G>*Ã‹;w?œÁÛ¸%I8+#w’‚áÄ§Wr”òHv»ŠÅÖ¤C2{ÉƒÃHÅýaÁ(Tª—¬jç#PÌ>4>öw.ÂÚþzñŽc0žW+s€xý±ã[+ø^dP½öqkEû0,æ¬l¯HUþ#ñsÁâ¤¬âÎ#¾7A,ù›¾‚XqÿÆBˆ;”¦¬"î[x¶oˆ“M=›Åôôõ÷Í6¤Xå­«nnÛÛÎ=—±·¥ÏüLqÿÙÏPÈ}ñ§WÎž_Ü„îXÜI‡»¸Rœ”z;¸ÈÛÄÛq$Ööâ^"DŸC»Íšµ–°Ó†Âçœ”Q1N'Sm0àíðnHÊ8œ^SEÑc,Qå†¡-NƒÝ“ˆ¸Ìšp¨% rç{,I$îŽÊ¬Éâ2¦"ªb§L^GS*æLA‹Žå03¤Ü¥Iv‚]fÛ’I“å»]Öa¿ÖL{<†Êô\ä~:µD³Þ æüâ‡î—+y‰râžøƒš¢^3“Œy½LòòsàÀŠswGêŽÄ sOÏÜþó¾¸vÝP€¼Ì±ËlÝuäèpkÓlû_&âþaæòvøIàµ®sßŸ—¸ƒ·ç.î„J^Üï…8Ri4r'HÅ™öÓ»<,'îÛˆ¸ÙÅ]|çãÓ)Åä¹{Œsô©qˆÊðÞ.Ú—úñæcŠÇ-Ôuƒ#Ç+1åå}ëòÙ£èáuö®*îx»ê&ø­Ðâ®|<%5Ó¿%qïÝÚ¨§û7ËÐ§ä?ÚuŸ¬©nÞñà‘¸ÃÎÔ_§î?{máDe^~FîxàNv/‰¼t¸‹v/­\¾ô<ép'âMxàž¯¸k-9¬_ò$è ÛoµA–‹»)Y¢µP*³“M9)–…)k¸JëRt"lWå‹6¦ý:{Øk²ëõÁ+cå7nùô–ˆ{JçcŠÅEŠâN ÙUi1Ë¿+¼×È¨^6ïê+À)3·Q™WD™(UŒLÀ5à#ù6ƒËç‘½‘ŽÍ†µJðµ‚××…ÿm-Ü—‡î!»ÛGé}}þQÄëW÷$ÍLœÖ&b±@2yýr|ßgÍ4m†ùº¿ Ä›ûß|ÛJ)>4;Ö±óàÁûŽŸh­†ñ{_´š(ÏÇ¼µKÍX»ÀÛ±¹•g÷ý‚·–-x¯¼¸c„â^‰ØEàÄ[?W:³_ÒZŽßYvNØåÄ]øð–åc\0&›¸åbFŒ?ÔÕs#õ±ú)øÎ,ÍA,í$)3ÒU§týwMç©ccGH?=‘&šÖQá^VÆ‰{w¶‰;fÚøGEE…òâú,¼§ò<<™AÜå´½t®fƒTuN´Ý!w¢·¯«ºZ´ ®Þ\Mƒ­ÕÃ½÷rÏmüFÏšúœL]à¼ýµï\¨†ƒ©/_8¿ø}ÒáÎÜÿ¼‰;9™º"áŽ½ýuÞÛyqç“2DÛ±¸o'Û—¸˜L6qg"9¹ƒn»Ýd:­P×ŽÏ¦F=Ú­”ˆlµµ)|-v™U»Fo»>ÿ¨Œ9af\&¿;J¨àaÙ51GÎùÆ/nÙÄp8U‘"·1¢»=ß¤ŒI~—ªÙ–ñ1SñP6V€KFÜk-«æCFéLÐ/B›ì•›J¡Ó©”y›»(/còÆìžKñ‹Ÿ	Xeô@$³N0žXréã%Ë¾”…a•UÜÿó/_ÿí5“Òßî)÷Ž)ôÆÌt]ª€…2€ØÚ¥)âípq8?VY(q/1ÇâŽkÞAÜQdåÃ¥Bq/‰;A,î¢GÇ‹û=ù‹;DÜ\9:Î‰ûÔøêŒÁ`o'â®xcMÓ\óX)¿X
^m®[óGkn/kknªQwö•e÷ó¥ŠûLÄ½mqßÂ³A¦í@õL¿|ÏähWCScMSkkCgWWC×ðÄhçš£s©†úyò¤áž\hàþ««Wˆ¸_9«>óòÂi±¸ÿ$îâJù L!ÄýR@—ƒ˜š¢^W0àŒÐú%< ƒKxºÏ¤³qjsøÚHBO3 î%hp×ç}8µ„2—X\¨ÞmÔÄ¶d‰;ŸyKþwåÌ=¦Š•îEŠwLæç“–Gb—&Ó	A9MNJŽ ür-7–L‘x«¬·›ƒ!V–Z§TÝl6Ákâ®›ÞÃˆÔý¦+ás3aëÍÏ/)ŠÑÞ¯×RŒå'èabñk—/vïÓR€™ÁâTæŽÅýØÜüÖo¯¿«¬4œšÚ¹óà8nI¥
Y(CÎ¥Ê{ûgboGü~¤Cbî¼ìJt/`’…,b"ËJAÜ%f^¾|zô±ýådO€·2“ŽÏL8†¼%ÇJqï?U­\núØ#˜ð÷„eiÆ•õvuãÌìÈñRþ‹Œ?¥î»FNöÞYÝ£Ã}e¸³Q$îb5¿®ÀÜ‘›¸g?…JÞIÄ]xïaµâ<ÛÚŽÈ¸Aµ<0ÛÈn¦Ê6‹!©¥þÙ¹®®éÑ>Žžö²ž.vÌõu¥ŽnÛ‹~çK)TA^½ºðäí î‹gÙ3/_i<ƒ½]¾
R¼4•œL}e~ êpç¦òA™}8(#:˜šQÜµ’ˆ»üu*¤N°sƒOÁ”'`†qT¨%½ I‡óTÜ£Ø¼'A©4ù^4ZJ£Š™tÎˆÎK\µ!ÆbÍÿ`R®â®ìÈÝd÷Ù=Å3ªEŠ2 ÃfEZÀî&O£¬U--B·.1I»c4ÖŒ3}¿LgM˜å1Éy;ítd¡ûò; VfâNûß[†h;üÔ¹í§Ýª3|îb´´ùþ¯_ºŸ¢õ»—öº¯]ÿ`É¼Ï¬= ¥´{^â2îø„*I¹?€¸/›ûë¿½þ(çw îc]j$uuuê‚Ê ’µKé¼xÿ÷Í…÷'Ÿ$âŽAã¼J9q‡›	x##îð£œïiç<#Oq?®`P©a{;Xº¼¸J))Ÿ§FŽÏoÄâÞ×JBå¿4óÎ;ËÚÚ''Û+6m$qŸM±
S3:™›¸÷ÌB mƒ žØÈŠ{Y_óps_Û–-µô–­k.mJÍŸïç6—•å•»`à¾€îàí0qgO/^€Í©ç^=ÇLå» I£'îÄÛÉî%ÞÛ¿I*ÜI‡û+ˆ—°¸Šûã9‰»ÑgÈ%âwz,Î¨µ…ˆ»!iz:=‘2Å½¨Ë= Ñ˜
Ñ´Q•7F‹VE¹YÏñ¹C¦HÊØØ\ùB<qVˆ;PÀ‰{¬“õ{!‹“2@]›DÂÉL'™õ<«_æ}nV@TNÜiyq7P2Šìb³±¨€\K0ãâŸX#ZŸ%Þ.Œº[]¡¨ÿæÍh$š¸î—ô—((ˆû˜Øõ¥¥‹×=û.+CxØÃ‹»èxê7Óâþã×ß^R²Õ½¦íOš!P·v566*-îïñs¬í9{;pñ_§ˆË7CŠ´=»¸ÃD‡lP-*!âN>–DÜ‰©‹Þnf–Íƒ¶¿±lîðR–UÄ}¬+¥ÜÁÁ©GÒ<%¼{¤AAmoîëÇ§rÅâ^J;×5©óm	ï¿³³BÜ‰l]±‚'?q'ðk–re‘…Ë¸×4OVlÂd÷þá£íu]³=™¾’wlÙÒÖßÓ[¶eKYY{;'îk÷ÎÎêêÁ¾ú>Át>™ŠÄý5$î‹§Ùê3‹‹Î,ž[<·\)ówÂ*H””ÉSÜ_„KSÒIÄ]²y)‡6ÈÚ–Zâ¥® ²8#¦Z0Ôô¹ºÌ8ºž¶Ã½áV~Æ	/#LeD‘—0£OïøËãÒ¯7ê-ñ¨ÃäŠú!«ÍäÑØsþÒ“„c>âN&îJ¡&èb½L‘¢¸GòŒ¸Ó,¦V¤Ïz›´™E*évIðà’w¬¸×2RCvæ0ÎH¨ÄØslÑ©ªR­ª„•$ænˆú]NÝSÄêÓÞ­ÕB#ï%K‚¡ƒ´–¸wk-Úf‹®HÜ÷b WB’°´–ý™û[ï,éZÐá%%¨91´ó©ñAÔ¾\7×UªVZÜÿ°¬íèE–u©Rm‡«˜;^C
ˆ”]vÞ.V÷;9à•x€º?–ŽÇ#q:V|‹aJ•Ò;ÿÚV‰¸?‡Èz[yÛræ¿²êÄ}:È©u$)34ê.'îÇÏ™á±ùýË-?¢ðOúßÔ­ê|—•=ñÄ­wìÊ"gÝ»Nù°x&q¯¨xè¡eqíÜ0Ú^3SßÓ¶9³¸eË´·­GÜëšR­G6”sTŸ:²këo~UdàþÓ…ój¹ñw0q'KSÓî¤Âî$áŽ½÷Kª q‡;wðöµ‰;åvdwGqÒ@,èÑ'£Pýˆ÷¦êâF­VA¯jÜkÙPÐS´ öVg¸«ŒÖlÌýÂ_Rw´ël‘PÈ¹¾KoŽæ[öé-w‡Áá°†"Éb»L‘ÛÝÛ)6Ïµ©A©˜öì¶”™«[R[e²NÜª•$¢½Ñ¶Ú¬ct‚^:‘¯•_«¸[\, QwƒßéFo8t7ý%ýýZ³Öhfèxø%s~´dÞÿK!oÏ(îâ‘û‹/þä­wþ9‚)4ŒÜYÂŽ®Æ3Ê;	©&Öž}íRZÜIR sºEâ³½¼Ä&î{ßX—¸+y6µa{ûØ±‘â^¯ÐÄ=ÕtbèÈsÏÉ‹û@¶ðá“5©<§Ðm`¬QÜo‰¸÷Ü0áöÆ“£=“›\Ä½­·}²¬¬zÍ_›šToŽóâþ¸ÿâêUwðv÷Ÿ^¨cÏþŽK¸Ÿ;GÄóöÿ*Ù½DîÜî¥×ew/) îfW*s²=…«Õ¹ÜN;äÎ­-ºGc´z´HD3±Ðy¿ß™øz¤±x,ú*ô;­ÍuÖNZtþˆËn­uØ¼ª˜!¯µ©âLÈ.î7”w-UË¶Ø‹GT‹Üîw}0Ïw¿Ü;µg”mawP*ž’PæwiÆ=!¹%AãdÓ¢Á0m¡ÌOÂqdÿ<€@a70ù-×Â¼ŒÍowÙÝ†w7nDb3wJ«ÿ:KjõfÆ{ñ:½®ZŠzö€DÜ‰¸ÃÈýE0÷ï¾õÖoßùg»~Nutã†¡5ÃõØ½ô$'Ã÷·¯>oÇæ~\Qq‡ŠI"î•yZÔå(wÄ.äê™Å]Ð,zÉEÜ±¸÷ŸT+æ‚ƒCXÜGÑè]NÜÇ;Óâ½i‡#©Ý#GvUf÷ùÑ&¸Mçìü@›}›6¨¸«•÷ÙÕÄ}r´I½Q¬}v¢´=Gqïí˜DS÷“)vm¤R©Î‘ÁÁ~ìí•óóÏlýÍÿˆû•$îÈÛaùÛâþ»ÅW!+ƒ—¦þ'áÑÔÌCÜ_PFÜkWÿ¼§ÏïrÃ¥KÇíMµ9Ã`¨%ZJŸÔ¥tÖäõGé¸Ÿ&×%£í_ª¢ÌÆÜÄ]KÄÝYkŠFƒ>“Áb´NvujSèÅMÑÄå3^Ü?”ˆ;PqO9gØ|zUqæ^ä¶.•’«>]h¡è›$•/€/[:”SgW†w‰)K«LHÒ ie1~ñÆVs<šíÌ) É<kp) îžHÔÝ§¢¦w]Ð0z£ñÒ%cØë±˜YüÖØöíöËïÞw@`îx{ªhäþçÜñTœ•yñ'?ùîw¿÷½·þÅ¤@Ù÷‘cM)”eì(Àî¥Ï3KýŒGâíòÚ|æ>OÄ“U…Aà‰µ@Ü´¿ÄóöR8šz°uëÓ»D)uŽRé¡ûÓˆg]wy®Á¹êcÐû˜>Œ*«å™ëàžmBŽÏ¥ó«útPæØàøÊ¬;ÉÐ 
uõ:²Q5­3]Ý#ðµ â¾#ø‹êìêîkï¬É³M¤ÑöL…ŽàÛ ¹k<œJ â^Hw°ò°€ò‡SÅ‘v9‘
´Þ¢q»ºP³Õu]Í££G{Û K&»¸?œLOïä$ü6˜Z»¾uN6Ïs›Ó€][qÂ}áÊ•×°·¿üòÂù”ãÂ_-ž¿ðê9ìí$(Cî¤ÃWAâ„;Yš
•2’ûa‘¸óÞ¾ýqÖö¬âáôÕ±é¨Áé6µè\Rf9c1Sú€Í3xk2ê2Ò>³J£ÒP”¦
MÐ±ØçÖ'Cš#ÃVœ$Ý:«Á]E[s\¼Ì:.Å‹;QÜV9já€ª¾DU¤Èm,î@x•ˆ…’)¡1­–:‰Ê%i\’à»lQd–w³JL"ýà]¹¢ùÏ„àc3]¿¸k}05‘ª{‹ÉªÓ¸3ªþDÂ§aÞ~ÿýŒ=›·Ç£íÛµ¨òÀn`ˆ»à|êaéúT<r‡™;6÷÷/ÿ{Ý÷ãÈÛ¹ã#M¬ÒÜøTn_êgðk•c©ïcqÇsß×Ï‹ÄoL’xò= 'îÄÛ+*ž à•»8q-pÙÏyû.$îpNQŸ£01óÊË<ÅŸ¸ãð/îàßÜ£i[áí¥,°Rk‡Ç´c¯ÈÜ6°JÑ”NÊLž’Š;f¼»¡¡«»«z­sâÎSCG¶reöÏA`HFÜïÙVZÞ>?ïÞáš<Ím°mâH³Š;¼\Þšú•uŠû¦/_Ü!ÎßnÄw´…êK§º©súäð,0|r®µ®®{âhÏä–2´q)wqŸìíèA™YõÚÅ½ux¦¹¬±e áâ~uYÜ¿}¡.uþÜ¹ógÎýµ`ùxû$A®R‹;x;YšúKù¥©‡9kÇÞ~€÷vTáž£¸39ÉMIÚ±»Žtk{R£§c´VCÙku!ëôø£–˜Ré«4t˜ñÐZ¤îF:§…¢Uà÷(ã®ç*ØwÌ²šo®ùJ±¸“a‹HÜI¤$*°
âpzŠ÷"·oT†ÀdÔê42“o·JôN)n¹áz(“7µ›j‘Ñì$™ÌËÆ]¬‰L}ŒÙ6I™k'îUžHÕÝu[ñUgÐë¡(Ê1÷¸3ðü[ÆåÓ>ç‘,´ewlî\™;ž¹Å]8r‘÷ïýÅ;§mëÌÖ7pFÕ96ÖÊ*Í{oçù,£¶“y;°<oÿ™{óq"„¼¸Å›û_Åi÷÷@S;X9€Áw4,.E¤?*˜úþýÏöÃëpë‡Ÿ&,‹;·ŽI,î+àn)j¯Cä$îå
þ“Gëø7°¸77IÄ05rl|hQwuÓðÔ}8þÏuó¤Åý±Ç ì¸nü{¸ðR_C¾ý‰2âí@Vq'¯“6©¸²}’¹¹£!è–ß¼ â^7Z¶Iºi‰W÷^š|¹Ô´NÏNôõô÷¶#ú{ŽNíÝ²ª³“¯áOqÿíýý½eð\\¸7ÌuM”Vb¸“©ÿ€ª ¯.oqodOŸ{õüéE÷s\äßHîÈÛÿL4pç;Ü…»—ˆ¸£5Ö|Nàs2DÜ¥ÖŽ©Šërš$Ç¼N·=ê¨Å‹¿uqM	e8Ìëu&Ö×Û£t, …‰{•%Æ<„d˜8]•Kp36¢Q=÷Fm&.wúuQŠr±ù­M._þ‘YÜ;qZ¢Lqâ^ävCºÄ_Í¹T&(·“ÉÍJñÈ¥ÖMÒ%¿Ó™SòV Õywf·ˆE6©’äõåð¯[Ü)w-+kî¡DÂÊR9íÝ—ŒÆ¯c._2@}‘ÄãÛ¡eÆb¡rwdî’‘û_üŸuÝkºu©ñ€¶´YùÎŠ?m—Ö·gÏ·¿Oø€ËÃÅË*îÄÜÁÚá'À‰ûW¿*+î`î»pÆ}+÷ewNÈ~°ÐýÈó¡ôýÑ5ˆ{ùå•oT¾Q^?%â¬÷RåÎ¦¦¦‡¾xdhdüyq'Lu«óÎO¨«kfÆqô›;>¢+w’âþ2îlk®ÉSeÁÛ7ª¸+/Ñ]=›¤âSë´¸—m`¿LRu3³G{Ú'¢~ÇèüÅýÎ6è”Y¯¸wžš*EÒNª ¹
÷…«p2•óöoÃ
¦³‹¯ž>û»¿þÑââ¸;®”Á	wù¥©Ð)óCEÅ½ªªŠ$eZrÑQ¿Ïétù­-µ6>›ªÑhÐ Oš66ÄèQ‹Ñ¬G—p‹Ý£Ã–*•6™¤r¹æ›ã	­^£Ò{#¨P&MýQ›[E[ó>t9ž¼¼Š¸RPq>Æ\T÷"·z¢¢YÕ[¾ñÅ)×íbe%˜Jä¶¤Z3ˆ{HîÐhT:žgT"â¤.&æˆè/úÔË¸Ãy"š»ÃGÜ!U—/À\ºt·ÞøõpÄOzÃI«ÜáÇ¾}iq„âpâNÖ§’°wlîöÎÚÍ½º»~ézªµ~Ûñ5«0ÿW’Ì“‘÷ö±·pB•˜{¦pû½AŸûÿcïl Û*Ï<¯d
„bÂG)aÈÀél9”åôdÏ¡Û”]fO[8í€´íÎ0ÚNÇ‹ìÊ’®nísT]Ûã+Û²#°eG¶e[’UKÚÎúC+Èúˆm¤”æÄÞc²%ž“Øù $W”ÒmÓÝç½¯^ß{}¯¥+G&@ýÙqda°ïOÿïÿÙ¶Éûg·mãÅýöÛw€¸c÷‡‘;p²=•¸»ÔÚoD †î·¸óÜÿçøœÌmàèÑ|æF@6÷'eæÀ¾Ck%ÝoGÙö¶++R0¹Ì8rçäAâNdÿ²ZÜëÇ*ºóŠª©¦ácÕ£(>$ì©Ú¦òâ.þïqû.ôªy¸@ÛmjÁÇCU‹;É¹äwÙ+Â¤9ž¬¸Ë?â†´ÊÔtÍKÄÙ	à¿ îý•¦¶W÷tÔí$Ÿõ¾NÄŒzÜ¯C\EØ§l¸áHJ¬!q¿ÿÕ—_Äe¾øÅÇfõ¦3OÌ‚¸/œY’v¸‹–¦‚¸“*H¥¥©ÿ$,M•Ü?ŸÊÜGÜa­)†Q'îvW0è²[ ww„¢ÈÃ°A‹7cÔ„ì>Æ›­t:æ¡lN
¦ñq¿N¸3,ãL±¥Ž`"è›HØ=qŸÙb™Ñ…½¯Mý•ÓvI½¸Åöv@oNúB:Í&›|2áŸöc´¢·*˜{Xed@áà¨CŸç…rßåÏ"Jxy7ÙÝêãšÜøÖl–qê9e|W+îk…m†Í|ÖÝå›Q6z™¢Wpf2:3‘ˆáî[m(:	’‘;w0w<sWèrÿÄÜ¿ŠÌýÄk–õyûðÈ^	ú|¦½Eæ}’’!2ò˜h»ò¼x˜»¢´“6Øú€x#¨;bâv ”š—pñCâíJÈÃïCÀÜ˜€}î†ôp”ÆóŸÆgTQÇÀ[,]»Gày?â3€°…·öá6úÏ ÈûÃKx(+<<:UœyiÃÐÔ‘Þ;€{a³ÖˆáÎÈà%ÃvÉ+}Æ$Ê4UÝ]¸ó¾Ûn;tÏJÏnlîð‰ÃÎŽÃ@èÉÓ¶–ñŠBCßàêTQ|Ûvøw#âžg‰ªÒÛ7BÜQwÌ~à°]d¾÷Ü²ksã‡•)3ŽwÔn/YD?+îÐ¹ýÈ«m˜[/™r“á:JqÝ_ý74pÄý1^Ü?SY>ÿÔüÜü3Ï,<³ÚÛ³»—ˆ¸ÿxàN*eðÉT<o''S…ƒ©dàNÄœ]qâ®S_*d8ótjÂî¶ZÜôª=ÌÐ¨rL7m¶Ú½Þ´&¢÷¥¦–¢tpJ[JÁ<ÞÆÐªD ®bl2àL¹&f"I‹e2íBK	™	N5Yo¿‚ëæ¯ÈáTyä{E_ªŒu‚Ñl²É'ŽRøb-EÞN i ÕsW8å©LD!ô¢w(o5Un[*ê¼oŠõ€ÒÇM’OŒ›2!M>"œ€]#ÆÅ)ã¹Jq§<VN},`ÿ5 }¾f™rÂr<ÏŒz&¤ÁÛ}ôVúsŸ³á«ƒ¢¸K³2ÿBÄý¿`qGæþþï¿?qâ5+W s#c¦±­ûTkC±Ý€ìÝ[;Þ~EV'£¬íØÜÇ^É'î»²;R…<VvÌŽHÜ1¯¬H½JŽ^ì^‘h"î ØXÜ?ýiØ´*wPUeqßÈêixqÇæ~ã
ª1:ÄÓXï`w7lÕºã^`p¤;Ÿ¸÷N•#ÊÔ-Þ©Ïa‚öžÝ3{ âŽ¼=iÂ€¶­Ìp…PÞSÂç3®…¸cr‰{ñÇßHÛ¥â	/ ‹û€ÁÄm<™r r¨¿@m'ùeq¿n×§v¡¨Zs#·nÊšê÷ô‚¸‹îÏŸâ“2ØÛ?3Ç~jÞ4ÿÌ¨R†ˆûß‘û÷²÷¯¡»¼R'e®ZÜ	º¨=‡­‹0‡OÂn±¸9À5Ãèh‡Ó‹üìæ˜5á×F}“¾ LÌhº”†hè‰á‹b´*7ø'© 5º¼ö`À’±u!»jO~eÐc/“‰; ›¸oäêT³_³É&Ÿ ÀÖù¿4ÒÝu´Ù{©bZÆoV±ˆ¨®™Î“8	)†bXyÂœôÇ˜Ü_g'ç]¤â1/“k=° Šç*¥¥E
Ê ¿†i
uwÁá D˜*õ³;™¢i§#IÓQ¶/Ø˜¤|óùÏ‹ÌÀ >žJRîp<•¤ÜAÜ¿ö¥/}ïõ×_?ùËª–5Îâƒ©­×µ@[_qyW^ßŽ½]}ñv|y˜ÝÅ]ps@4bÿÏ@w$ì˜¬[sß€1Qwœ€ÁoÄâ¾’V‡Ö÷›ÄïI¼fŸ îp—2q'æ.ÎÐgÅ}/A<qßÛ;\œtûõ}}õ0p?xðŽ;{»ï q'dmÜÄôqï‹r?d…Édª¬¬…O´ßƒ©“ç82q¿qÇjq/´Â=3Ü¶(©(¾¸ÉTg£ŠTnÀáÔwž¬µ#éE@ûþý[·¶7RØ3üž£Š†ñêêêþæÂã1¹Ä¬Rh­¹Šƒ²#‡öÖóÏ´ñÀý~÷R6)³´ôØãO.‡Ó©³HÜ!(#®‚ÄGS¿'K¸“¤Ìß’»°4UÑÛo…Òö»ï~H¡PFu¤Þ*6wËd48á²ðIs”¦!ã?O%bvk„²1Î°Ý•BWn$ôZŽ¢Ð ÎÆÀm0q<™1û<1{pÂbw»£ºI¯êTy¶Sæƒ—‚Ÿ“De€]Ü½žÍ‘û&Ÿ´ è9T¾Ü‘¼—*Ì‘©§HXAÜcr/–‹»@P!)c³(GÜVËg¼pAqÈmœD_ÔÏÜƒjBîá«wÿD®˜»9Ì†'‚~­?åtLN2´“qÌ„™‡hÛòÝÎBî·JÅla"#wé&r<™ûW±¹ãßûæ÷_?á.HæÊ9 b¼î§Eé½M
eÔy»¼N&ëíÙ¤ðÛ³Çº_¹zqÇÀIP©¸ÃÈÄ9.u<tÿ%qß'wx×«÷ÃãÅPÂ²©Á»{€·ƒ¸wyÄÐ;fÌpå¦©#Ç†Ld[QŽ'à5]†nÃÈHïüä‹;Ÿ$âÿv«'îµ…þÏUVÍ{mGsmÑÅ¼óGJÜË«×÷ýÀV5Ú(Ê*§Œ¦ª£ýDÙ?rân¬6ŒªÝO_}õå‹|Pæ?€Fœp_zcéñ'fõsKó–ÙÒáÎWAâ¤¸Üñî%ðö•-M%âŽîÊâŽîyÄ	z×w}Fô|ÉˆÅ’f+¯ù>FãpØl4œMNÆ,ÞI'E…"vo”†:HGÜzEeh­Ê´L)¼W:áÍ¢ÉÀLÀóºüŽ¤jKNü
eâÙ;KŸ¢2×BÜKÐ_ªÙd“O†¶£,L>@Ûu4­‘1‘×buö<½Ž„°ÂÌÛÂhD°kÌôÓœÂP?.Í¼NFWE€#¸49C>òò¶ð©ŠÂlµfV†”ß7×úÃ)g$ef¢l*Ê>t3½ü
1·Þú9AÜ‰¹q—¥ÜÿE¹ÿ#¹ƒ¹™û7_?á-$®\…µl¸õº¶¡²"A^îÊu2ÍÛñåáƒaÃ+"qÇ6.	µ|:†¼åv¸% Ü†äzÖ«IZFhgGçNQN}Wð»°¸ÿ%Ÿq'™n|“×pìê+÷Ì³wmqˆ¶‹{lvw‹3¾9Üg¼Ów¤fïbq?€‚2Rq?ÅÐXsÌÐyï½õÕU¦J8¤Xsl¬ÉXYYQq¬ž %qßàÅ×?’ÿDÜëª¸Wõó!™fCs]ÑÅ½ðüÇ üÂßù†ŠûV@IÜoiîªÊ{Ê^ÆS^Õ8ÔßÖÖÑÚJž",îä3$BØ›Š¤iûUeÜCû+†‘ú»ê;ñó‹O¡;ªp?uÄý‹HÜŸ|ò‰3•gŽŸXÀ÷oËîHÜ%;SaàN‚2boÇAðvñvAÜ‘µçwzRÅ %ãöZ'|v»Ë«×ãy²–at(¨éÂ&UKØádCÓ	.â®s„“±Q4wÃ©L¹3ç†Õ¬“ñ` –ñÑi‹ê\Êä%,î$ŸBGÏ]®¥¸CÌ}ó€ê&ŸŒŒF%(ó^ª®\&Z¸¸Ë7œú=ö	ÙÄœàPŠ¾'WÆCò ŒY£»b,‡Q[é‡Ò,îºPLá‡ÏV}eBÀ©"Œ3âIMzíñ/ŠÆ—o^^¾™v²ŽG!ç.ˆ; ÷ÿ ˆ»Â&¤îØÜ¿’7w«·LU=ööª¸Ûþ¨Tß~%··ËçíÄÛlîs†Wrˆ;KÜ¥“z¨‹Ay™CŠâæþ×|Ñj„îhq	g_¿¸ïÃâþJ‘ÆªåS#cÕYq¯73È-îÄÛáÝöà“ñúcÃÕ}w¬ï®®é<¸ZÜá>tDØ+ú¯€;}»úM:ecËv e¼§eË¦¸ï¿¥cª¢ØÞnš:Šh:ÒÞÜB>‹ëw‚²¸·t´!q¿°n—3ºm##‡÷þüâù‹§NÁÀU¸/?…î/-<ùÄP9ûÔüü®‚¼]”ùª”ùa÷ÒFˆ{D…¸ëÝzw`Âìry3è2a°?£…>HMÊl5s	Ö–NÛX»7džbhš¡'cwuKDÁóK5l¦g1{2	ÍÞÊÇ©@Ž+?‡î—¨•;Lcs¿vâÄR›æ¾ÉŸÅ°=Ï©Ëp±¢2tÉƒKyÉªÎ¢4†÷¬îpOÁ–ùÒiÖ¦‘áT<6«SÎ¢ëW!îZg@z]uó¬]Ñé€•ƒiŠÞ›iÙÈd(äñ…'íî¨cÆ73=ÃÜ|ó2V\Óp=@ê~+w\	™KÜÿVË€¹£-L¢°Ì÷iÖ[ŽŸ8îUm*ºÚv´ûdê;òÅKàí‚ºËëdä=¿•y;6÷oÄÂ.B›Ä€ßR5C‚<csGêN A,¦ÙmMØÛÁWï¶£úHsóàÔ¼0ËÇdó2xÈŠ;Øîn¾QqÊS#YqïF³ww¤íŠâŽ¹7ûkï 
Û<pÓMDq¿ÿ/÷}XÜ1+â¾ƒg¶%í…f$ŒíX
;{vnßhqW’VÑný+'îÆÖ[¤EŸÍz/J¸×å¿V‹@e•	¨4™mu<µë”vn$ô¤ÅxðÍ·Þ„¡{ó…ß¬;ãÞÓÛ>:bØÓÙÛùòO.žºx{ûw/.ñÞþø“0pjé5îÄÒ™ùÅg`ù©pï^Âóö¯à©8àâÚžKÜÉÎT¢íØÛóFe|zU‡fÈO$½ÿÞ±éxÚYJÛh‡Çî²xÃÛtHñ4îv2ðÂF9(>ç®Qx>LÉáÚj…šÉIWÀç5³q³šY»]çeTÉˆFÓ—UNÜ7ÐÜ]36Í&›||)Õ`”·ðÃ©3Êk›rÃ®Ñ@RLÉÃ;,Ÿ dwàµßì­ý”$š¿VÆL‹Å]SŒÇ+õöä„t=9é­n«Õî‹kAËÌx&#.sØÆ†Ó©pè!wÊáp0¶G‰¸"qs—/aÊ-îßüþÿüÖ¿ŸøåâOXT´‘!Ê†ÿ÷èT‘ƒ2¿ÅÖ.·‹¼]eÌû2m‡ëCƒá•QÜÁ«?<q¯.––õÝ™÷Îú;rŠ{gg§ îõƒƒw"qÇ`qïì”Š;B*î„•Ä½y¸P»„€û––þŽºÃÀŸ‰¸7Õn•‹;‰{GUQ –™†{Úƒ¡¿½ço@l¼¸×‚¸Ã/mþ´îþXÛá6C7À:_úÉ‹œ:âNîDÜŸX8Í½vféÄü³Ïªwðvt45ëíXÜ‰·cq‡yûúÄ=SÙöÅ8½Ë—ÈJ~"Å¦X›NKMº|>wÌ©c(Úsùq)»“†F@£cT%ÜùÑ}ö¬Ë“L„“\Â±ªyT>¸tè}6BîçÒ1ñË×vâŽU™=›å2›|œµ½Xç4œ®bÔA3…¥Î	¥UIŒwÕÑÔiYÄ }Ü
Iv­	¿Gö¯##ym¶°Ô‘õ.8Â	FWÂnÍX,K-gŸ¦™P<eàíq4Ê@P†vø´Ív«¢¸‹×§þ'ÙúTY%$˜û÷xsÿÙëp&ë‡jÓîúÆ‹/ÿ¯ñ"«ÈŸdùv@mLPŽÉð‹µ?ø ÑðJ^q—éºjq'êÎ/EEÎ}w>!r[6+Z¿>qÇÅ+ÒQ÷±
®8Tõñós<E_SÜ#cÇºúÜYß722265<r@,î:;»‡¦Fº»{ëEâþéûîº~#r‹{ÛÑòóíã-hÚ~t¼¥¶vË–?q¯èP÷ý î%†
îê(‡${SÓÑþæ{û?Dqßñ
¿‚©åÂÜ:É=¼ïPýáÃ}#o¢F™S8áŽ½‰;òö§ž:c²Î¿ Y™ï,,~[i÷w¡
{;wÙî% ïL]¸ë¢UmOÒí
Ì7Â@l’ŒiÂ=´F °½T·ølèãg¡i§]¿C—kKÖ´:–…ZIÈÀd?5g<lRM%êóÂÅ8ªc.¡ÝKi ,_¾¦w½}ÂÎy“)Z³É&C´è©wÑ 'ríRšP·€	ð29‹W¤wyx% ñôÕü˜ÂÀÝá’%|”FùÁüâ\¿¸Ói;'ÆjI$Í(ÃŸ8²¸¡æ¼=ê×QN&”äfBQçõ4e£Ø4ËÐw#EÞ._ŸJÒ2¤XFº>•œO%#w–ùÙÏþþ[`î‹'ÌV5UîçòÒ›EÞ™úîäu2Wò×ÉäŸ·Ãõhì®Ë%î¨WæÁ¼ðný¼Du]Ø§
SuþMˆ‡À‹ûQúý>¾2ð¤Ž]ážñ½gÅýFèri' ß%â>ÚTV$46ŽÔïoï¬—ˆ; 20hïí«žªª,ÏTté;VSYY	ŽÝ8Ø9Ø×_=b€tû±)÷šŒUGºë³â~ µ;ÙÇ/2waíÒ6žŠ%³k`;Ü;Z;
HÁÜù@ôž*Äîq@¬}cÄÝØºYï= ž³öµGÊ®ÊÚ+Œ]Õí---%ˆ¢ŠûÙ5³;	÷`¸sÇ””´]øíúN›Ûêïê¬ï|óâü"ŠÊ¬¸ƒ·?ýôinö…3³‹?ZqWÜ½$t¸ËîŠóvY‡;j”‘–AjÐ¨KÊ¸‚ž`,á‹Y³¯ÆAÐŒN²›'“æ”ºàJÃîîŽé°ni¨ôüZÐ´ÿJ•R3q&¨·Âe(£çñ@ÆWs4UL¡K¤=®¥.ñît&‰GúÜ*qDâ¾Ñ#w{Äã…—aJ³É&;Š¨ídè-Á§tt4•?pÓä &ÏÔEÇL¯zD“òœ_êíÙúS)IqOæýaAîó¾ZÙÁÔ'Ák†uÕ$“jõZ9K˜ISZëg}ú¤SÇ†lÎiöúeÆâÎR-/ßý¨LÜq—;€ºÜs®O%eîÂÈ‰;2÷“'æÌsssî\—Ä¹óüøbSyÑ‹ åu2P;o?Ç¼	]^ÍåâNÞ&ÜCÞŸŠ#÷”,bÚ“%kîd»*OÜ±¸£“©üòSØæ±ºâN¨
dû(|«¯¡HÞ>Õ`ƒ	9•éëî”ˆ{ç`÷‘±‘±¦¦Fce¶$ÛX.ªn¯œjšª©BM2•¦ŠŠŠŒ›?ÖË‹;öv^ÜwXÜEŸ{ìíX×¶m+8à^Ùƒ/u´Ö¶t´_Ü·lÙšå†üâ¾u+X;†Lò7FÜ[n@,wBÝÐz•º=+ªû[k¯#÷dÍºâ³ö;sˆûu+”Ô6.¼¿î¨L×h÷è¨aðç î/‚¸Ÿ"÷S§ÀÛñÀÄ}^‰{öhêß­1p'•28áŽ½]Z)îp_—¸«IÊdìŸ–/ÙÝdnÅ x‹ÃV:m6ûb‡¦TWZ±D!ôŽŠÛ)¿ß.¯q„£ÌÚ'Ú†Í€aivÆ·[|?‚%5sgP¯")¶Ã£K:! ÿÿÎ…V.säÁ¥s
âþÿÍùCw·jrôœÅãÔl²ÉÇ]„p{Î#ª.ÂAÔˆÌôåøT­Dò+6RºéUšÏJÚoäÆ_jç$È'ò¬ê‰;«²í¥•¾Á¹zºbåGí=ysGBßr2½=¤¥œxûÍ×Ûjý—‚/,îò-LBÊFîßB#÷>·xòäÉÅ“³(²¸ò Ë+Mss•DÓÀÛ_|q¶²øEòu©DÛÅñv@¦ídÞ.÷v¬îïsã£9ÄÜàÉ'î€\Ü±¹Ù÷ûqÏÚ¹ÜÛ×)îÅjƒ,ïên0ÜÁ‹;®q_a°»z¨±ª¼ÂTQ–‘žP&ä8Y6ÜÝ‰Åý6Eq'1™]DÜöšÂS>­i®îjêjÝùÑ÷Š¢‹{].q?Z¶×­2··w`W¿vâ^×ñfsË›o]8wînTÚZëGû:_>þêp^÷¬·?ÞþÌïk'ÉÒTH¸‹+eÈÀ]Ø½]#î ¾yÑûÂ1W,‘±Ögxa†Ëº–rÐºI½9Hëh'T.DÌQ‡ŸÂ3tÆ¦¡mZ
Òî9ÄÇAL†‰³6gÆ}×d@ïža]\~qTeé¾,}îòŠ¯Ô×1—VÄø°'îz³ËÍ¹-œw"µyFu“
¥ŽE?¢êfÄ¿£$å,§ŒG³ñµÞÇ©WºgFzVg‘‡è}ùž9KäýYôcis÷áKÆï¶I·làž‰²×mu…ã3!6×²P(£³9f:Í\¿L1Ã,Ã% ÄýîµÄ¶§JÖ§sÇY™¯ .wéÈÄý¹þçoçGóÇÍfKyöxü7ÎŸŸ­ óvhD~£*³aEòœÌóöwÔÎÛßå©<Ö!qfñmR	¬÷«+$÷¼";ßC¼]jîâä;â>¾ÄexùÇIò¡ˆÏß(÷ÝYˆ´q¿«8â^6T?85Õ÷Àðª>Ò]O¤½w¤¡ÊxÒ™©jªéÝs?ˆûÃËÄ=[¢³í%<mS\”7ö4oÙ¾Å`,«ª1ö—.îeqGv¼qÏ=Ys—«ëÊø'HÚ1[WÄÝXü‰;ºkð_pà¢ï`¿µŸ@É”»Ú;ÚjÛjñS ‰¸ß‚;[s¹ýªØ¦ŽÌ]ðvŒ8%ÓöÖÙ§Ïþž±ÿ~ýOEÛF;ÿâç/]¼ø"ˆ»”yì”hàþÌÒœåÌ³'çä	w8™*Ü‰·K–¦
[SÿkNqm/Ž¸gn¨ó$¼¼¸›'~Ö¦…‘º3iõ…ÃŒ†
ÅÇ†I;
˜ëüÓNÉç)’Ój‘ ÀŸu2~[È¥·»pwCÌÍ%üj¶¦Zƒq4Iƒìo½|‰ÖÈ`/ËÅ™û‹;AŸü)ú„mÝ7ùxÛsý®ƒMÍ„'#‘Èd4wRõøÍ¢/¿B6Ý\š×Ét[ëå®5ŠäÙU?˜y¿—’½)W!–µÊÐfN	‰›«®òNÝÕß£­p|FºƒÉHù§ÇÇ2Aó¤mÙÏ2|PÆFQ°EŠeÐÄzu°¾K×§bs'3w’r7Ë€ºã-L‚¹kÅÜ¿óìÂüì‰×ÜHÏ+g—àR·tš×·ÌñóÏ?òÈù¹âzûïeãv±µ_Q¡íro„y;ð‚¹‹‘‹û.`uÚ4ŒKfñÙ¸ˆ»,ê"y'
Å}ïƒXÜQ6 ÷
Í‹»èø)wò‚€bóˆ=#¦¢eÆê{ŒuÞtð ô±#]ÇÞÞ9f4š¸ª±‘&cùU,Ù4U3ô’Œ;€­]²t	e#u…÷[V!Y¯m*……ß qÇä÷­€XÜaÞ¾"î]EoUïß’ýÈbqÿ,€òFíFŽ§¢Ñ˜Éëƒoj<ÚÕZW‚!â.°³Èâ~°10 ÷ŸÖnãKeÞúýï~÷GàÊï¸õÒØÛ×Ç{û#<ÂÉT±·?³pÜ;ÿù‹xiê·äÞN:ÜQ¥I¸“y»ÒÒTèæÍžK}}‡V!îêÏ¦ºc”—I˜õøºi£SÓ¸¶Pk"3q§Ígõ04\ftm;pR30Ò:ü6š¦#æ^$’9’Õ™N5I™´íq€LÄuIéxéœ¢¸o|T†Ñ[Ñ®ÙDzsè¾ÉÇƒÒÚÎÄ#——cIø¢,­Q#
æMK60)%\f¸5H29½´Ó(¯bð=±j0ï!z-`çòwRÚÜçâ½y7Nér&e´’Wý²ïÇ	ž·ÜAvY›NDasÑÚü~g(Ä,3MÅSŽ›m3÷/ DÜÎ§~ýë"sÿo ©„Ä1w²…‰ŒÜ¿IÎ§s‡1Ôü™Ù9SåÜìÂ“Ož9=W‘Ézûó?8?WÆ“÷WÍÛ¯ðÿ¬»NF˜·mÇƒw¡8eŸL!îˆFß"q—ÖË¬¬g"â.2÷¼â¾‹û>wwðUPwAÜ1+[˜„);¯ñ"î"ÔÃ!Ä"Pfíî;|¸þà`îõƒÙ¤Lo#ÇÕTwwè[e?QCSCW÷(;¿¡j/þ¡ƒDÜKx¶õ˜¸B©é l2••qM-y½ý/…ˆ;ø¸ îEqÿ+1HrEž_]Vlª#-6‚¸_G¨ëª‚êuSMOóxEžšöª¦žžžæ–:iÜf?ÏN$+´ž'F%[È-xTÒÒQ‡žÔµõ÷ô·ÂŒŸˆ{Ë›o¾ÙöÓm--Í¸£ŒÜº?=Ãƒ½½¿xùâçamj¶Ãß™úE±·¿ðÂ	7÷ÅÅçÈÉT¾
RpÇ÷•eˆ·ýë²“©bq*e„>9pÕñ¨i]´{ÑË¬·{})–õSÐ3m×{œ
ææqOÊã<ºÎh´Ž™¢0:âNilLÙœ1Ÿ‹#ØS3.?±8šË[ÂàÄ4{)¤ØBwëÆß¯¯¸sî€Ç3aFWÖÍmL›|¬ÇíTtÂÍ)cªŒƒiÊskâ¦²Zue,iÍjf¬²FYX^ò§úUï“=ªiN	%ÏÊX’¦%œj#î)”ì[´×ìÎxÝ^òÜ°G©R¿g’a<”Ríìô´ŸB)›ß±L3L¡â.-–ùi%¤0rÇæÎ‹û³gfg_X8öþÄOž9Žµ£üøù/ùùóðZ1yO1Þ~•õí’y;ànß'w Û8w ·¸ƒ]«w@"î{U‹; BÜG§¸¢PY}ªdêyq_9›z Û”™êC•íc•ÅëWõ÷¶íÍ)î­ÆÂ{WÝöÚ¶þ†LåÐÈºDÅ}¼¬è}ã
âNh6ôÚ¡fgk‡1S%s÷‚3×Z[[J€÷umm-[Jn(©­«kiîèhnnï‡Çfèjª1UV5­nonnš[{o~þé‘;/îWÖÿ¼f‚2/_œ}cö"ž·KîOñÞþ,÷“¿\|nqñ‡àíxà.Zšú7JKS¡	²Øâîpù±ºágžˆyñu+áK1:Ø¾D…Ý±iJyX6i™NYìq´722ë¤° ä¹<Ñ6Ð|-Z—d%WŸ`=V5I™ÐÒwî@‡BöÊ#÷k,îæ4M9Ó>—%…ÊÌM6ù(“ãév(hára²5D£âÅavœ[“dHÂ	pâçò^I‹nõIVV69åm‡qS
Ýñ®¼?)pi¤â®:m–ÆbP¸¥ÜáÂ<‘t["ŒÖ9vØR‘i”jgÓÓNŠ¢húfš¾îŽ¹KÅÌ‹»¸‹û?IÎ§ÊGî
1÷™?óÂÏ<óôÓO=õÄÂl9V…ÓKßýò—Ï//n;_(³F}ûjo'mGU¼ý7˜·óöp÷+«Å»:Ûôñvl–$-Cä}¯•A­¸µßˆ¸#qG!"î`îÛÄâÎ? ©¸Cí{>q/V©LãàánCoýá› æÞ;V]Ï÷²×•gŽ@q{ïHU‘†ÄUCÕ­»QÔÿv [ÄIr2À:¶ñšÆaÊ¾³µ©"3-;·o ¸oÙrÃúÅÝ`âŠ©Uw¹¹×ÖnCý[ëÆ»ªM$Çp@ÕÑ#GB8¦­¹eþÌ‹Åhº@Aâ¾³DôIië9ÒUmè¸¥y|hjj¨Áh¬©1A!Qú&ï»ø"=EVgÏž½ð–¡Ípö³ïüþì…³Yq›[™©ÑWQRföôéÙ‹? o—V¸/Í/`qŸ÷ž@§SŸ{îõ
wÉÀWAJîòÕKòÝKXÜ!'£JÜý	5w7¼Nfçm._š¡u:¸„íAQÈ©O»íþ”ÅG´ÓC£ß¦žƒRt:TÝˆ†JA·Ëµâê^O:Æåæòfxç ºŽ¢À½"þËXÜ¯Á&ò/Ã@BÀï&ì'=•›lòñ·§Õd×’i
ÒY¶+*:+sâµHDäQÇ}™·$¤a‚kÕÙ¶ò¼MòqB!dPúÜD4â®–R’¡÷â@¡ÛâÎdC2¡tpÒ¡]Ž‡SìŒ'ìÐ1”c:íÔ.SËðM¾ý?´Lƒ·qÈ&ws/¤YæK‚¹óÍ2ä|*ls™ûÒñ‡Ãî}·èÞþ›?(Ö·“:™uÎÛ¥ñv¬íˆò†‘fa¸'î`ÐàdÓÄÑ1H+18þŽAâþð>´†	‹;â&DÖÛïÃ™û] oÞ$Ý [\ž½G2óö£>o?$õv”oÇ.ÖÞTcw½a¤o°þ&0w8›zÇ½8â^ÎÕŒT7Ö˜2Åx”UÖëékËŠû§ðÄ½3Ðo,ü#UµoP¦»²nWÜ·DÜ·
Eí¢ßÏ}OÂï67pEg¨×¢qmN½Àåë·ÔÕ6×àn¨¡žžþžšrÓÑÖ:Dí~Ä-JâÈô]…¸o)¨min®¨ÐÓœÖ¡*Dv†»†ËË2™l-2´·”^oG_«¼À—ð…Óà«ú÷ ™¸ÿfÝâ>øêÏ_þÉ©7fO¿qŠ?™J¼ýq”Yš?ó4òögÍs‹ß^\Ä'SEÞNîÿHª ÿ»((óŸW5Ê€¶¯¸ß î*2)z_Ðº‰$yq7 ÀNS6ZGy\Q¸j–Ú˜i_X—²{lPOlcYZË8@Ü¥›–äân¥lÊiÓB™£Ù	x¹,®tÐËå'À3|ÃMÎyÕ¥?^Û‰;´BÆáó¢qLº’!ŠÙ\Ç´ÉGÙÛµŠoŽº8uÄÒ*T”µÈƒè´E±l‘6s9°ÆžH$¸ê¤&‰¿Èò.fÙæ$I'|”\¥ù&çÙ·ôm‘ÍÛéÏqWú>ÉD¼Ò33zþìïpc‚å¿‡êØ4ëO{<!‡ÐÖ¡Õ.ë®§u`î7£+AÁâ.?ŸŠÅý+ îJ#÷o£”û³dä~f.{H:Š“yûŠ4Þ.ˆ;’ö¢ÔÉoÇ»ZwËÄ4wŒ’¸#ˆ¹(î»7@Ü;›Š¤ÔU†Ã°B©‰ûÁÞ‘>,î ²¦Ìd*Ï9œ]^Y¥ƒurqo­É¼”?cìÄHëp%$?Z?ÂâÞ2ÅS;$ƒ¶‚¸Ë¼]wDIÇû;ê 3ÐÖ
	sžýE÷-Ð£¡õþþžêžñ¦&Ck{Oè::CAþ’‹;6÷·#Þ@Úþ»¬¸ÿ‰[™¦Ñ{ù¥?òÆñÙ‹§N=Ï{;Ê<±„v/--`q_xmnqqþ$œLÍ1p—e6@Ü©`F…y,pÕK&Ì^ðÅSNÍŽýIVÅŽ8ë µ“–ˆU—ù:-\<tÒÃVr´TjÚ¦AŠ¯‹Ûõ>fš\£õP“A,¹q{¦cèÚÊ=Ä]Î7qßhs·Ú#N¨bŽú"š±é6gî›|”Èï“a;§žD\“&!ŸŒûdçJI‘ca¸ü
^IËªÝ“²9ù„´ŒFŽžQª§·KBéî|{£t¥ªÒí€-jÎ½ž9ÌïjØÈŒMÇFS”þr2¥ÚRô³O˜¹/Óð‹;€bî|\FfîXÜÑñT¥JH’•ÁûSÿÜ‘¸ÿheä>?‡½ý‹=¶Tdoÿ5ïí"®ä«oµ]>oWêíäú`2´‰wÜ¾íºÏ^W²m×í$¸šÀ7žHÅ Çþk$î÷XÞ1àìB!$´7îÃ`qç?,Êd{(±·KyX&î·¡×P3<-Nähçè`_/÷Î‘#}w`ºk¸!SVal24£'/"q¯;šá
ÆhhØÞ_ƒ†¹Íë÷ÜAm>÷ðk<¬LÜóÈ|KWt2C%|¯"ñn0m”NÇàãžàç—)é7Ö´–àÌ¼…h;w%Ö#î-ãSUå@YtÕÈžó)OÜq_"îÈÜ?X÷áÔ¾—_úÉ_<_5Û—pPïL]XâO¦boÿÑâÜkèd*®‚ÄîDÜáÛ#¸“*H¡Âš ‰¸Ë¼Ådµî9¤GÜ'T&eÜÿŸ½ómã<óü4ë,­²©Ù’œ7éZØ.‚-Ö»k4ÍÝõ¹6-‚ lÓlÓÂ›½Ûë&:R)YÃ©tàq$g$SÖ ÖÈ¦eÚ&ižI6€tÌß–Ò¶Yµ,'²Ï‰ã\Ò—m®IÛ4YÜóÎËW£ÑŒÈEE2ŽØ”kÓ!•¶ÉÇ¾Ï÷ñ¸È¬Ç•de…Wÿ%3áH¼ÄðbA°ñ¯;Æ—¿ØngmZ£Ù’™I‘YIð‚,
Ä1M_/•rú²žªŒ3îwá$
ÇTDú`Åp‡EžUòxòÎò {ƒ;)Þ^ô¢å‰¹ª!÷Â]Ë|qÃç@*T®)‚c±¦‡¯ž¶2pW|‹kãÈ„£acmÅ-x*É!žXAB)†ç¢¢Är§„dŽ·½-( îüöÛVÅ û©XÜÿZ÷g©¸“JH½¸—Íý•éIhYø¾š–‘ûó î]ÄÛŸ|ò*´¹×•Oé¼Ý”±4oÿÈÚ¼ý—”_ÐX½³&î_q‡½»ï³.î w qßüQYÜ‰ÅCn¤qßÔÙ]§Ñmç0”ç=¸C÷hƒ$÷v´j”Z»{öõß§‰ûÞ±öeÏÛ;v=|˜Lêwí[=qS_¡¸ŸDõ§wh±¸oŒâ~osxûŠÄ}Kó½•ÄÞÈñ½cm4C©EÜ?¨·ö›š¼†½ýÇ·`â~‹ˆ;ñv÷Ùçž{nvöyìí?˜v9§_œ)WÊü°,îÔÛ5q_Xáþ×º„{]Ä]ÌZ¸#ä‚oÐƒTr
ƒçé<ÏHqOŠçV*&åP2WrÈÌîþéˆ˜Ÿ÷¶skxªœ@žu‚/çq„ó¹RÕ@­ºV°UÑñŸ æâ¾ÚYŠ#TXžc[CÛÜI-…4Z6ÎŒ¥U}i»Ý¹ÄH;¬ã™¨p®U46Í›¨:÷ZH¸«¹·Píâ«›«ò•óD¡D•ð9N]FMÅ£BhbB°±¼$+ŠŒ«¾™{›…üqEq¨¸SsÇâNSî_3ì§s'÷SIXfn²•ˆ;ËÌ¾Ù†Ú/Î~ó›O>yëªw»ÁÚÍçíŸPªÅÛÍóíÚ¿ GÇÉÑ×çÅý~,îÀÌ—7qßn÷&üðÆ\Ü	8ƒÅ„¼W$î´ÕG¢Ž´<
÷R›šv<>|âÄ—ß¡¶AžB«J©½w¸û‰¸œkGË¤cOOOÏÙŽŽM»>âþgëEÜÛÎZwööå‹;|#ÍK‰;”±ïÙÁ˜S­S7qÿøÕHÛkàí_¿z}ò:ÜNÕm¦Þ¼ùÜwÊâþƒL;S/ÎMÍ‘ NÊÀ?õAz{ék x;ˆ»æíTÜAÛW îö¢³ºtº\näðäœóó4°vžãù‰¬'iãAŽÇ¤¨ßƒpŸ:ø</+/IU×0m’dg‰ì¢…9!1ÿ‚nˆ$«	ƒ/žÉáw…©›|‡ŠûZMÜ@8#Ù$’$©QÙ`½aú¥ 9Œj"ÎT%¿¸Á%¾ÔL»àCÖðÅycRQ‚&ÕîC2=U%`ïÒ¿w>_»³ÚµU–µ˜p—b.´$Ž€3.Às8V*ÄDV(C,k·ñ²,ñ'IÏâ­Ô·5q‡ïàífâNÍŠ»–ù‘ÑÜŸ¦æNbîÓ—ÑäÜ‹/“2÷ž…%»P —¹ã+Lm¨ž|¨Ï·/Twóqû‡‹¼B½½ê¼ —z:_Ÿ÷ûÊvðvÚq¢‰»iÆý/ydóöEQ™¦¦' wŠNÜ¿àû—Êò¯Mëã5qß¬ARîjŒž «”)Ü!ƒ^J½='Z=¨Š;Ü`~pGÓà ÜW›’™y½ÿxsÿ¶åUvvŽu¡R¹qïjˆ;E÷/@Æ}}ˆ{i¼Š;MÊè¢2j[Ï‚Ìº©¸oÀ4kÝ§â¾{;<}ÿÂâ9;^FÝ7zll°»»»¡ú‹ûoQtÝúp0õêÅÉ[·oÝ¾ºp3õæÜá>;;Þþý¹ËèÊ‹3W®Ì@$h»ÞÛÿ3övZáþ£%î:q‡|;w 7AZwrK»jBÆí
 _ŠWÅµež Èð!%”*Ú„‰,òKøb!$È!Ùn!Q«„øÈ¥¾<SpêÊÏÕÞ˜·Ptâwž©†òŒân<ºêx`(f’ñh¨˜i¬¨6¸ÖRcT#	–©F& oˆeôÈYKÚîŠÛÔ¸éTÜ_±Æ]rU<
É3\öªIE—”±^ÊT_xü¢À2<«î1BT<»Sð]¸·mvˆÉ¼]ƒ¸Ób™%Å}A%äÌ5'šœ~…ˆûO¦§.N]œìBmoÞü÷ëÝ¨ž|dZßn“)«{õíZ¼‚SÝ#›‰¸ã•T¬ådâÒŽçïš¸Ã/˜ˆ;¸µ™¸ƒ¹cˆÁ›ˆ;ÝP%—˜V(îõŠ²´?r¢©éHÏ¡Ý îg 1£Šûƒä«Nk×©s:GÇ:jh2;vx âÔ%5Ô<²q=‹»a¸>§{Š{³^Ü‰‘ÃOÕ.îøÃÈýøqw-£ZûþÑc££{Ú–³Öbl•¡âþ[£¸ˆj¤ûÖO
â~ýÍÛ/AVfaä)¼˜:;ûÏª¸O¢3¯LMNïÜ¹ógt3Õ\ÜiÂý¿‚¶×WÜ9õ-N¯•¼ô<RZdìx˜Ãþt¸È1œÂ‰ñXˆ	aqWï¡‡Q‘Qf™ªp±	N‰9”y]y‚'˜u Š8Â…ˆ¡œÈT…ÿàc*î€*î€!*³úx#Q^ŒäT8Ê4h°Î½=”Eµ“–ªæ·C.dÌ½cœ†ç¦¨
ÞÇáœKD\872ÆÄõç\øÍÆù™ª–aÃÀÝ
‚éÏ»äIJ6cé_P_—xØ/
xÁˆ8¼ 
Ë©,.…$q§Í2ØÜ¿ª»Â¤7w­’ÆÜé&,îÿžˆûÌwàÂ=Ÿ:w!Ð8š„+L`î7'¨Žüî÷¸Ò’·SªÕÉhân¬“Ñ¼ÓÚÛsæ÷rë£ú€‰Ùº›;5uµé@ü]­”«Vk{“Êã˜' ø±úØBÙ¶íO(jè‹»þ8«NÜ˜\ÿáyæS3TÜ[h­ÓÄ½swËîÓcGwÀ[ï<pBýlžGŸ­m]Ým5ý¾]Æ[IUwt6o¬;Tò]1ÕYôô{ë\äN·Šß^]fÞº· åRw}ôØ²£¸«^¯ë•iîk†Œûñæ{I“=¾¦´·ocßÐ>8¨E2ã8«dâí:qÿ@îúŒû'µOÜúc0ö7/ÝúÆÕ«t3•ˆûÅY¨p‡ÕÔŸ€¸¿|MÎ½2uù
™¸ã€;wìíZ¤¾Ã‹»¾Ã]µö¯â¤i”¡âXw!ˆªáÈAºÝÌ„ÉJ¨wžg””?åyQá£þ`ž½ŽwE’XUí«b+ä&xNH¹`n.¦K¾ÀükzÃÕvS]þ¸‡¬¦VÅžùÅZgÜ)Þ	HÙ…<Ôé4h°n0»‚*¡•à¼`ÔjWL7X7äJ4äˆ»Òì9bžªç½ˆ1ÜR5NÜ­dÜã&÷™üú·ZªØ	XÜO·Û„
}>ž<Ï…ÖNÌ*¶P$\äm6;ÏIvx”p•»uq§æn¹k•DÜŸ.‹;x»ëÊÌ|—û”©\¾ñÜs î7ë»™úkvc¾`êíµÄdŒóöy]í;c&îwÄ´Úº¸«ò?²,î_¬]ÜÏ·¢ºÐÞÓÒr¢§ûŽÓç‰¸Ÿ€ñ:§µŠKY‡l=·wãúw`hÕŸ¶sÄ}C½Ä”½¯ï¸:so¾çž¾½ª°÷ß;²whtl ½´Ì")¸ÿkqÿøÕHûÅ¯ÿøÖÅ[XÜi¥ñöoÍNÝxþy’pÿþ÷_žr_žûÞôäÔ¯¾Jîš¸ëîÏ>ûµ¿HPFóv’p_¡¸+YT…@:˜uºçO"¹Š$¦ÍÛ%“%™Š‘x>Zô8 DÃà‚w	O{H‘DÈÆDÓ([œH@'³•q;]%Tw"†·WI–©Žðnâ¾QŠ'/A–
f9÷ëÙÛ…Z!IÿF÷K¦#wTd(qs‰u&RQž1EJ›ž-¥•2ÆŒ»q]Õ@ŠY€arŒÅ»õëKv‰cÅ„#0Ÿ·ç96!Ùð€„—E	Šl“#é¸ÆÎ)2ú.qü–ÑTÿFKË`4s§Z³ér×WBêGî×._¾ö©„uŸž,!Ì¥)õ~êÍ7ëèí½Ýzo×ÌŽ¥RãvÂr¼Ýo×è>üú›‰¸«‚^Î´oØ²Â2ÚÅ¥²\ß‡¡E0›!â«¢ÛÈÉT"îzžhÚD°Ñö²ykmî$¨¨¡UÚ©¹ãçªØÔÉ'º§JÅýÄ8ªí¯íÞvæÐ‘a¼`{¢óènõ³Ù}º­sJm­ˆ•2ÿŠ{{Ï=‹Å}ƒ†%q¯¸œ
4«òÞ?442ý=££=§zöîéßÕŽ€šÅý×Õ'îŸ¢i½xõë·¯_¿~ñ¶þöTAÞ¸îÄÛ_œ»äœþÞÌôÜÎŸ©2ÔÛi£Ì?ÒÛKZÂ]ßI½n¦´ÂÆd*5¸cì.T…lÞîÙ‰rÜÕY`'’QQfYYžˆL0b$)&ãÅ|ÌïÂQ·Ì0\4Ä3Ã1‰"Ž€?™¥Miâ(¡Ê¤3jOZÖRæ„éÄ}í&î€Ëâ)“Œ
RãŠjƒõZß^p¡ã]´Ç™Žm<dÐi‚hú•³xÖ‰Ê\No6˜JŠ<³²Q
cH³˜kz®ŠƒÇ…79ýB˜u¿×”áŽ-¤=Þ€idL’1ERdÆ&ˆ1d‘“bá˜Â.D3‚>ò<k"î€QÜÁÜõeî®0¹Ó”ûÏ¯M¿J*!ÁÜ§ËÁÇäÔÔÔSõ¼˜Ú~nôýwÍçíŸ¯¥Ö^'óKc¾]£ídçè™@žõâŽ3îˆ¸—o-‘;Mø)âØYÇwZ@uËÊþ¦üQ3w¬õø“&î ÷Í ÖwMÜuÃvÒ$SQÜ›:»ë(îÄ­8ôO"ð	œ8YBë’f°}ë\ÜûÇZQ½iíÝ·@Ük;üÙ(îÚ%àÏ1KŠ{³úŽoéÛw`pp€^Ðí:wöTwo²Jí5î ª‘¶‹8á~ý6”¸kUDÜggIP¼ýå_¼à›ZêöÒ?iAÍÛõâN« u•2 íÅÝbiD)Íç"ÁX(R"/+ÙpAvRsEÌÄDQœˆýRœçC2ÏÃ G{¯ŸŒˆ6[ÞåHÇƒ.‘SÝ>l%`E6ÏvGKb2ñŽ1ã¾6w IQäPHhLÝ¬Ëy{
ÕR–Ñ!"¿1-ÃšW7ºdÆ^œ(&“ÅŒ¨T½A,ºÐ<FGÆtD€‡ÕeØøõ¯õf¶_Ãj*_¢‰l$”ÙäD*’¤‰¢ÄRÉ(þg‰ ØC°3d³Ù¸L^´cq‡Ù»uqm_$îú‘;˜;¹ÓýÔ7Þzkæ»ÚýÔ™©Ëó=d—\¾K—ºêç Ìûïíïýwß1ÄÛÆÛ©¶ŒóvÖîÞ±3Fqß èÅ£¶7ÂwMÜ·Y÷M¸Þ'fÆÙw@/î íË÷Ýcm¨>ttnq?1¬÷´¢;„¶“#×¹¸ÿ÷‘ñª3]Çî1ˆ»¦í5Š;åøÞ¡¡!­Â!Ô±n]?ªãáÔÕ÷«XÜi…û|Pæ¹Y¼šJ‚2ØÛ_™ò]˜yaçNµÂTÊ<M½]½™ú?+Ü^V.î¶‚UÃ›ÉäœÙL4M¿¶\pAÛ9Ž•ã‘®‡¢r>œ–|I»<²3¼ X3R!Yä9èpƒNäœsËßP(%š”±Ð+£‰;1÷5ˆÊP|AY¨ErcæÞ`ýy;Fõ!²Øiƒ†—âóP¹S`VFÑaÌ·P<cz95 ~JGŽ©Œ‚Œ¸Xfù°#Ä©ˆÏXÏëÇãY”ñÉ`”AG@Ò‹Ësb{;+g¢ð‘ wâîj•;Ž¹kâþ·¦âNÍbîÆ‘ûW\ÎkXÜÉ¦¹+Ní-’Ùfýhß²Ñ7òÞûï¼½òÕ%`©y»iL%oWÃÑÝ‡G¾DÌ]ãn€˜»jé‰.Hœ”ÙöpËC-ZFæ1êïÀBq§‡™à÷€‚C±Ìöyu§âN­]w€¨:Í¸SqÿÛ0gêT0ØÚ~êDô¸ŸV+r†‡Ëâ¾cÇÑ“èŽ ýÜÐÆu.îÀ±Tgvõ«/DÌî£Þ¿€È¼›&ch
Þ ~Ò]ÍwŸ;9>ÐaÑÓë?qÿø}­.Wš¼ý/Woi·—4o¿‰+ÜéÀý•W¦]“s;çæ~V®‚Ôu¸kw‹â®Ü±¹k·$îlÞ…ª‘“3NV°â—
Äìq_\’Šy™c‰CÑ¢K¤r øL(¯06!„§aD±%Oo¿Šñ ²Š#"ÀÀÝç#I+½2ät*÷5Ë¸k•š 'âD‘­1vo°®¼]ñ¢z‘×ÏÝ(Ë->æ`[B{òŠ>«ˆ¡CÝLÇÓÌ’VbS‘tÅ›MÖ±±ÌÒyc°?(F!˜èÌ©tŒÏ»œ±h’1Œ„¦J0içA²UwºŸªn¨ê:!ŸõT€ŒÜé‚ê·IÌ]«„o÷¡Ëo}7Ëà°ôÉ¬RÈrë©}äÌñbîºœLóv¢í•¯.æaƒgþ’Š;-€¤â®óv}]#¸Ã„;.•v¸Y:q§<ªý°Euð¯|e^Ü1–ÄÌ‰ñzÄÛw?}dx¸²íÃØÛw„ê§•'zzÛÐº§m gdã î{ÇQ}i=µw%â®…àõRÉ¾¡ÃtÌ¾Fâþ™*î¿¬ùªØíyé6	¸ã;õv(ƒœ½1GeTqŸ»|ynçôôÙLÕîêf*h;½½DÅSgh£Ñv¼—ªm¦.OÜùdUqwÇ˜”;=Á]È­ÞDTÒ®”$†#2Íp6.é£ù|0÷¢\ˆQD‰a…«~|‰µ“ë\ÎˆøpÏ{e\y%Œ><û·„½ðÎ‡†ZMÜ?os‡Í2Žð×-^i$f¬vÃÿW£>T?äÅÆì+ŽÜch—ÈÔLÔSÁÛ4O0hâLesO2•H!#Á´¾³Q2“0;å&fÒÈS`’Î Pp"…X<Ê3¬’‰*‚d·ƒ·ó¶…hæ®¥eÌÄP%êþš¹«)wsÿOóÍ2×\hò­ÿF:!_™ž\ooï‚Âí}êUL?˜»™·L0_K5ÎÛÍ¯¥R–övh /µu÷¼â®§,î÷‘dËõ¼¸o{û­æí+âŽÞéÐ]'îØÇÀhõ2†¨¯SkÇ¿‡¶ÀÃVì6Ì‘Á•én7Ü§/uœêÙÝÒ²c¸©ó|'÷á#‡6as'<~ô@ZïìÛ¸Úè½½Fq¿ç@Å£ûØF¸«ZŽ‘tÞNe\C/îô'(}{ûGàêØ`;ª?Öï/Ñ‰ûÿEµQºtû%•¡óöo’€ûs7AÜ§¦ToŸÅÞþ½ï]¸<ýêÌµiÚ(ó÷0p'ÞŽîßÆ¨îÔÛAÜŸy†x;ÖvMÜAÛ±¸Ó Œ…BFEòPÀÔsé¢$Åª¸ç„‚3!â,¥†sAANy=©”áocyN²2æã•‚ù¼N„r…ˆY&§d<Èíp&yÆ2ÉÊ|´6§S8#üwÉ†Íf’B#1Ó`m°¼½ˆê‰>æ.á½}(œå–eG‘©)RÑ›AêM—`9Ÿá‹ÕÙËT@DF\|mÿÅD#a"`"î¹Tzeaq5,ã›ÓÅT0É1 îQ1Ýí’¬Àc5qÿ›¥ÄÎÜi%äÂ˜ûÂ+Lo\€ ç|™ûµË«tjglèØ.40ºe+÷?zwÁ±Tøf¡Næ·5×É‡Îíxê|rÄª¸×Þ¾}óöeˆ{Æ(îøûæ´^HUÜ5ÌÄæôð+ðÚj¼~…’Ú¡Ç¯ÔÞ{òµÎÎ3›Zv¿6ØÙ„Å½³çwR.Ó³Þã2­çŽß!â~¶­Î÷Q£¸ƒ¯DÜûöï;{òÜ©îZØ³fâN'î¿®ýÓKWo©â~õæU”QO¦Þ¸qƒe^ÆÞþÂçôÏæ.\q'Þ®Ê|{AÂ}•Ä]ÉU7Ì|Òãç%QR3‹(m/°,Çñ‚(Ê¬½èñÛ8 ]Œ»1ž(¹Ä[w9èFé`ºæ³È2¸ìw8|¾pˆ±Šø‹5-r7â‰ñåÑš5FîÖ›¡R<†êKÞX•ÓæôæÎ{tùZH:õÞ^i{´`èƒDrs/2KÂ¹‘©»Ëº¼^72àpæ¼àíJÊ™“…J§âÁ¸ I™‡Fü¸RqFw?•ÄÜI%$5÷7®]{ƒ^aš¹â4÷„ßù9Ü÷Ù¶Þcwo%âŽi>ýŽ–n_ìí[^Ký¥úv£¸ãäNéäÐâþoîÃ)–?Ry¾a±†­ÔíÛÕJ™‡}”¦Ûâ@“;µöÅ#w`þˆ*•võ«æìfâN^?Ü7­Ð¨Û{¡€»½«kWïà‘––3c{Ž¶ Ã§ÇÊâ^ÞQ}ìËpŸu]³ëØîqß·«¾â>¸¯,î*[·–|ƒ¹¸o*‰{_sÿè±±]mtŸe=ˆûïk÷."îO=7ÁÛ©¸??;5ûåF"î®k?œž¼ö]:p×¼'eHÂzûjˆ{Ôƒªàöúƒ¹‚ÉxÊ÷ƒ¤ä²±u³t>²Ép”	Å‚ñheCêÍ†çX+	N–duœHÖƒù»–!½Ñ¨9Üžü2„·ðÎúwä¤§ÙFV¦Áz)‚Œ£:ãã7–â:SÏèßƒìCÞ(³\Š^óBJqé’?5ýŠæî“˜¥È"#Éš¼=qÁ+¹âèóx³i‡· G«`‹<˜ËC# h;'	pÇC[ÍâNÌÐFîtâ¾HÜÿþ§i%äÌŸ©%ÚJ+ôöcº¡§­ûØÿÚª‰;ŒÜßüÔRPíZªõµTm;µ¤í_BÜUÜAªa#u;3{{KÓg×Ä¢ÞP}œ Zü£\ëŽ7U‰Œƒ¹Sˆ¸k¯`*îp÷é‘Gˆ¸ï^áÝÔÖîvu|70ˆÅýÈk§w· _;¡î¨’·‹ÿT²{}›{ÛXßÜ!â>2Pï÷»Žîº«¹Vq XZÚ÷>7¶§»½a>7q'ÞNÅý·†¨ˆû¿Öú2]×_úœN}êæ­ëXÜIäw¾U³d3•Šû”ï
LÜß¢U¦âþ5ÍÛÉ^*x{Ä]JùPeà‚i6›è3}qAŠ† EÉÚðj©Ì~?ÇF'’¸&Î2,î‚”Cø—16a×ÿ\(WBaØJu„á²J)(ÇàýàP½u¸Ö™¸C\¦PV÷FR¦Áúðöª;~½‡Ðù	†`ÚÁ˜e %½U´Y)-]“YbD±X,4-Ö©6ô™Ö²ñHÖ—Î`oÏ3™D8åÏ£,^,RŽ‡Å!;k·UwêîØÜAÝ4Ë q×WB‚¸ÏËªØÜ§Ír2îK—­hEtwnèëìê:ÜgÁ èyÆ-ï½û©¥µT­Nc˜·ëêdííU–;ûï_¾‘ª÷í0î†½P,íå÷Mï ®þWÀ—$è7TçÇïØâ%æÞ„ÕÈ¸jîÛâþ0Šû î›Ëâ~bp…Ö·K-ø,uumÙt´ç(6õ¦C{^;¨ÞŒjyH}¯ª¹h[ÇA™“#°?ºÚè$¼fq?>ˆêKWÏÙîÞîîSg÷mÕ´Ž‡´]wÂqß;zøìžÁÁÞvT«|	Äýw¨FÜ“p3õæÍ§n^¿~ãÆì,x;w|2•ÜL¥ÞþÂ´óòôÌô$ežV7S©¸ÿ#ˆ»êíÏ–;ÜÿÝ"q×:ÜÉjêÔÅTÀÒÑT‹I_8ìÎE%›’p8êÀ>²’Ä2¬˜/p¡HJ²b1Stú
#	Ã‹QY`•tÓˆ½Xt¢€?×²L ¦Õ?FHŒu r‰;*áKí¬,¿ÊÞn<>4aT_!!˜·¬Ó
&‰±ˆèw"¾ŒÁì=Ã%1¬aœ†¬_¼ÂÔÊ'SsL°Ñp ™ÈÅ’~7oÈ9ÁÀòjh"‘+òv^PdÏÛí,x{ÝÄš»–•Ñ›;™¹Ï˜öÉ\ššr®x0z÷±ÞÞNðv¸ßuWç;tÚn½NÆZ¾Ý’¶¥ÁQÃÈý¾EâNO.akj‚4IYÜÿj)q‡MÜŸ âÞÔTUÜÿ0w–!â¾ÂóKm]m¥²úî<p¿¿ƒc§:w,÷ÇîiEë”_u¿÷wŒ¸ßsÕ™v—jë©MÜ‡F…ë§>q7NÜ?4Fe~ƒj¥ãú7þÄÛAÜÁÜ/Þøñv¸Ï’{ÙÛwÎLú®Ì¨«©ÄÛuwêít3µîân‹:Q\‘°3.K8Sã(¡@8*e’2ÃãÖVŒ%åP>
YAQü(!«·þx)¤È‚ÝÆÂõÆˆŠ;/ñ`÷1rúý.äËBšÓ2žBÆ«^Mµ-ï«Ï¿X_â8¼1™iÐ`íe¨·¯òÈ÷!LH7¨N0z
H‡+.3Õ	¥MŒi¥z˜E4™g™Åäé8Ç‰ #¾&oO8Ì½=\(ø³é"SH§3L&œâ")Ù9Y	Ç²’$ñlw§òN¯0‘3L$-ƒÑÎ§’õTCX†v¹k÷Sßøù2áòÔ…Näz÷ß½Ï©cÍ*àìøˆûÞ÷ß±äíæu2r2µhß3:ÔSvÂý„/Þ_^LÅJ­æd4nÁî;ÀÛ¿<Ïƒ¨(îÄÜ©¸Cf]-†§A™r8†~(£þ°,îàåÔ‡žo]¡¸Óßß{ôÌðÁãª¸9þÈ¦²¸ðvŸÀŸÆ‘ÁZŸüò]Ú¹îÅ€ûêp²ÿxŸvViE_òˆÁ	#£ÇzNuwµ!Ìšˆ»>â^wq/]º¥ŠûS×'/Þ¼ØqÄ]õö˜ý	ˆ;õöp3õB o¦jA:pÇ«©?"AìíDÜI$õö¿U)wAþ[@'îXÍÚ6ï«*î±B0eÙ˜úÌ€_Á îËò¸®}")³Š"±BÄ›gí,/q8hÉÃY›YP~gYç%·«­6ž„!ŸÓ‡¬á÷ã
Ì²>øŠûZ¹køÂ¡{ƒµgIDXÕ”{Ð˜#¡Âbs/-6Ö¢ÄT@Î½ÕB:æåŽ(f–ÒI‡ùú!‡kÂðrHcEW¤ìÑœþÓw8êO‚¢Pæ’öh8yGÅH.)Ù$AŒÊe$Žã$’Š+w Üï§q§Å28æeî?¿rÙL(\´"JãûFÏöìÛ`"î¶ÿMCNÆ4&C©xuÉXßn©ïfàÜ¾¾ÅâNeÔ"MÜ[0xÞ¾,qš4qÇqÇÚ®÷‡—wZù%,îµwÊh×§T:öìÞ´éÈÉ=Gð›;rúÐn¸cs‡·¯¶.ùÕÇï¾×w§ˆ;px•<¹ýðñ~kâ~\ý¸w_Ïø.¼ä`Êî¦£2Õ¢zSm”yòÉ‹ŽÉÙëðÄ¼'e~‚s2eqõÕ^ñ]ø9¸ã*HZ)CÄýÙyo§âŽ­}¡¸u%âÎU/`tFígŠ	e‘ÛJÙŒÀÉk“d™Ã—>9žÄ¤È3r$,ª­ä¼ÄãI:o^äÎ‡¢<
øAkÁdÉå‚wáp£å%eJZRÆ2RìW÷µ2w‡7)0¬yÀ=ƒV‰¤>+c”yO€¯ìÉ€+˜TxÆ€¤L¤‚^3Gt,Å³†¦Hód:·ÈùÝ¯Ö…j¿!¥„H‡Ãí.á‰('fòE‰Kao÷xÑ„Ï/°3IâV"wûòÅ]KËPq‡‘»sÿ; –Ñ™û×@ÛÍi]yçôøøØÈ*îªUqÀÜ-ÌÛé¸ÝZ}»uoJ¨Ô>6rw3ìé-(ÓÓÊÛ¬ËDÚ7j†äÁª·kâNí]w‡‰ü¨Ü3óÄxO•˜q9*CÄ²ëäE¨­Å¢®Ænª×Æhë©£ÃM-‡NK>zúèðBq§…—žîBë‘O~ÿé»ï÷ß9âÞ¿­c[šÿÀÚ˜‹;e¨óÀx¯i_»ûKõw˜¸«·—¾y½õÒÍí—nBP´ó˜·kÞþÃ+Ëo·Ó
wÝÍÔgñ¼Ð6Sq£õvš“©]Ü±ŽW#!H	É¡2ÝwŽ•pÂERIÂâ	'¥BRa1‘á Œž`%XJÜ•‘•TžbgpÄœÇ^9Eôª[÷õ%î´Óg4XÛ€»âFKáƒûÉBTC!1šÉ§‚iZ^}•»QæcÆ7—CJÎ„?6‘ùì{lcç™ŸÝX#“ÆJf8k£µ‘HHƒ´i
¬‘¦ð¢»ÛÂñb×Ùr§n±)‚4î’)ÞJ\I+R$%‘(‰CQ3$ÅÉìîˆÃp†"ER¢,úYÍE,kì	âÙÔèw¶¹4·&íûŸÎÃ«ŽfT@O",k,F‘5^ýÞß›JëÕB1_Z¶<)#!Ú2‚ŸÊh$bHD(WbÕüWµµ¸ìÇcÙÂt­èDb82p­Ù‚¥ tvÁsO-d­i£¨dX÷€¼]Â®…^  €¸]îtäaQ™ûiJF¹áÐQÑ­Ì|èE$îO|rìýv9ooåíœñéïÁâÞƒÇí ¯íÄÛÉF*x;­8ÇB¦~˜Æë©ô5ðDÄ¨» îõ÷Ò¦¸+;×,^é½:x}Ä}äê2â|"¬G'_áë]?|ÿGÃÿ¿ˆûOÕÍ]Ù¦9?sž{qŸqÌz:8§œ¸ÿæhâŽ47ÞùC˜¸ÿÑnß½Ñm¾ÅeÈÍT¸ƒ·¿zw÷o¾ûÚ+{±]q£õvÈÉA±¸ÿyqkïHÜÕ­Ë #Ñ`Ái&#(â‡§(4A²,®0`mxËT›]®á¡;Ã¤C!7Î¯ãëK*>É®–wœ)–ÝZ7‹·Òâ.ÄE"˜;‡+ÌE!–vj*ÕžHqG±PÖÃœrÊCÅ¦nºµI1”sUéàØS*.EPäsä"µ‡N™FÉbÊrš‘m]4o‹	AÉSg¨\Yö»,qÓÚš¿Á&{.ñDNj™šÓZcÒårÉÃÂ4…s×‚°« ¹¸DÝÉ~ê¿;lî 1w–‘î§ÂÌÆÜ·+$‡&²±JTt¾™3daŽò,æq „fêýÿÝDÛÉ¼½ÝúöÇícxêŸXz°·‹n"Õ,xØÑv<`qÿ@bîÔÞåùî—é¯7º?ù1º•z îÔÎÉ/¢nHÁãLJ]ß¼záâÈµU³ãl?ˆûÜõ9"îÔÜÁÛ!,\XÕ “Æ/ÈÕÝÿóÃ÷'§†{ÞÞ]ƒ¤èµSùU(àôÍgìH14¾áž3rœ34éðêŽsUsÐËqœ2âþcÔ5ÜüÛ?Äâ®¿õ®Ýx÷ Q†Üwwöv_{í•;·‰¸“ÍÔ¯bq§M_"â.x;eäîÐ‰WS±µ[©­ÅÝVs¢8ãÅ2ZÊáºB-©j w@2*¬&ï¹¥õõd²îî³T7s­
ô=`Q3P¹+IKµÈÖîÎ²µqwÅàaD³ËXvZ¦3 òÞ¸TÜGêí€µhaN9åeÊHŽJ6È4‚]KÆ:_O¥B.úç.Ë5*ùQ—„ÖríÜv-Ê†ß)kVÔ6Y¦Tîr£/A—x ÅÎ¸ËÖ5&‘Š»mÁ DÛm×ÀßQRÜéÈ›ûá‘;÷-ùúöØíÍ[wïlŽ>Ø9ÓDÜŸ˜yûWG­o—ÎÛ;TØð÷ó‚¸ÓÔ9mwéy;h{3qZ‹ûï5÷'[ˆû5¥î\æÊÄ•‘»i ÄýìÈ…g¥âÎ›ûÜ ‡N?ÃÞN‰îÝ~¦ë°ûc}ð±‡%îOMÍŒ_›ö"¥Ð¯L!à>$@NÜÇò+¾ã.áèÄ~å¸#Ý_RBÜ‘þû0pÿ£wŒº[?Ø@æwù;m”qÿò]0ö×àäÜÆímÞÛ©¸7Sym§ÞNîÊŠ»'k}~)UqÆSNdˆ¸ç¬ë…t"`aY|äƒ±­¥ŠkkÕµ\ºä·º Ï|X·Ä½á´I]J•ÜÉ¬X©?VN:Qû¸àq8“Éº™NQ³ÿƒŒÜOØÄp¦ÖOã2§<<ÔÚÖ•(Öh‚iN ×–\ûµÒÐ¢h.{`¢ Ýà/´WÖHI0ÒFHò¥x¢.Ôe7Ól*†ä0,¹ñÙ:‹»êÖªÝÉå5O"u3·¯ñ	ËÁ!7•,râŽî0}–†e¨¸Ë…eèÈòíH†ÈæÝÿ|wÓ…Ž7:ÉkK… îÀc“÷ÕÙ¼j{—u2R8ã,6wœ–yê)âíO~¬.íké?˜·œð‰º¸ˆÍ]ž!;=¢ŠK	Oâ'
¼(E0zXMU*Ú¹Ò?1âð’³Kg'&xg®8(Á½Zr˜Ñ‰âçÄÛ>eõ«ûïÿhüƒÝ‰ûåË—YÜ¥¯lÒ®ÄÿF“93?=Î[»‘ºO;¼:’Ö®?’çô™Qÿjõ..nsPÜæwÞúÓwô†[ÿñm´ñl¦òAêí î·ï¾òÊ×¿¾Ù“4Ê;övÑÀŠ{½	¾ÌRmkðí¥–= S'°dh#~¬“1¦à©³ÀfsÙÜz€w˜`ÊÉt ¦‹‘¸‡È@È½TµhaôÓOÚíÉUÜx|µ]rÆ+±N>¬.9—–] ð©nfÔîÿÙhâ GIÌŸ;ÝQ=åQeÖdü·­ü–­àï0+ãqJ³2ëØøŒ÷ê”F?‰‹£F¤UëD‚©6œ4’eºC[°6úág5h	®gSÑ[*Gr6hôr«XwÀ†×ü166àQEÜi±m–˜;wQXæ›õ‘ûÖŽÁ@Çê84Ö½o|c÷hÞŽu3-ôˆÍ‚NÜáÞ#›?þÑ}ÁÛÜ´¾½Å¸½ûÑ9<ö)w8™ÊÜ?F´ +© övjå]ˆ;(0x;¦—@Åë¸ÈÖ¡öæïu…‡—Åâ>¡ÔjªÞë¸Ðß?â¸~‰7ö—.NâNÍý¹çø‘ûÈ:t‚øå¯ÁÛñçÎ½·çÇ†ÎwaîÇ8qÇ¿Êÿ³†ÂœI'ÇäôØå:nÇÏCa™©…EEd8£×7–.Æ¼2ˆ8¤_˜„žI]ý´Ùª™¯¶ÿ¯ŽÄý×DÜ»‡Ó¿ýÄd¾ÿƒï‚¸Ó ­‚ÜÙ¸ƒÅ}Çµó²¸Âý¯Éé%âíôôÒ§ù€ûwÌÑÄ]¡–„––³¥2‡8~w š­­¹-äçµÚõeg.‘M¦Òî%|š\ËBãŒ–­­{yð»¶¹Kw%ªe ‰&^(‡R~u„a9iÅ÷’ª›9ã:˜ûIwÀ-µÌ)§<ü LP¦VË´IÁÚYl¤.ãFÀ#æ.¥TA EçŒ,–rË½
¡âŒÁ¨5'`ºCnð8þòR*9CÑRm…j¬©Zh€Ä=2ð[=x˜Ò©¸Ã†ªHÜ±¸Ó‘û×Ä#÷¯îã×íý½CiöÈÎ7^…ÓKGXf3¯Žj8ûüPÝ,ÈÞ'UþÓãÄe†îwRß^Wwi¼½{o!Y™9GÄl¥‚¶÷cxgÇ<ßXÜ%YÑ+ˆ¶g	½¹ˆ“ÓÛKTÜ‰·âN™Pê–©Ý…ýâ,¸÷ÂýÔë2âþôsäûK'),ó[ÞÛ©¸ÓÖ@dfa
¦ç
pìâþÇ2
œN‚‹ÎŸ!È‰{Ïðd>cÖ %Ñ­:æWìH2r×€YWò+«&âÑzÍöA“¾©¸÷—ÄâþÄÐ¿óî´yëÆæ[?xë¿Ñ m”¹s{¼ýå½Øæ–°™Jî0×84p‹ûï* î-#î ÌÃC¥u?"â–j²äÁ‡µq¨×I†JÕ
-áˆ7<Âbª*P
ÊçÛñßeTl)Í+ih{/T²9b/áâkàÎ‚¶;a©ýˆ»EîÊÝ—j§Kª§<T6•¤QDG?ÏòDQ’2³ï5IÂ>&/)%Q{Ê*ÌÍ[Ø)ò™˜¨x9,…eÔW<Át‰Š6AJˆ9#¼àKVK©Èr±V
¨¡Ý+àŠÍƒ«¼èO9[‹; ˆ;˜ûGÅâNÍ],îâ3L[{~þŽëþÖ‹/Š*!¹ÈÆW_½¯é~"˜Ÿ^ÑÃT-ˆ¸?õ¡ž3=X+øsŽ?ñÄãÀðÕûÝÅÛ¥ãv u…Þ7ùTO\K…œßÍxPþ­í‘¸ÖöY‡7{PÜI•ûYHó--‚¹÷á[¬¬æÏ ð¸:…w@´šªTÄÓû®ôõM8ì™KÏÀ#¹ž£âN!wòÌùO
?ýàíDÜé'Î½ûSÃÃ—•sv)Þîr«Ñ?xZTƒÎ7XJ%Ï/O¯Ø5HY8Ý¨oÑ.ÎÊpýè¬ÏÎAvGO^1šôúÑÕA$)#÷Ÿ‡S•wnãÖº±á$âŽîXÜ_åÅý»;"î‘Û»/Õƒ2¿Oîàí_"'Si$wêíMÄ½y¾`ÚŽ¸’Õ¤?›Šüe:YNó…1j°ã¡\ ”u{ØZ´¤fTü=¤.µr2l:¨ÂSù„%ÍZ Ñ­’¬UÊÅ‡:£RX2@â3ØmD pï¤Š»|<Áæ9ÃŸr¼÷*uA+wrÏÊŒ³SÄyÓò#î\µÂ
5ïL#²j†ÓÖp‰Õïfäqç–e;”¶ös# y¾R+’J'Ò¹øš;ðàlŒ…µ€ºÃ´Ww"îè„ð‚*qwœq‹;‰¹÷?¿¹ƒèéÜÜ&÷S÷o|$7÷v¿Í·5¨Kô«Óc³>üz}]Ž®}‚¸×Ç‚ŸâÍ0þþ=9oÿE]ÜÖ¼Næ'G÷vQ§óL=âÞão~À¥Žçy^*íòâNßü6H¶ƒú>>Åâþt¦.îÏ`ˆÆ7÷9§ƒ^êë»–Ñ,^yÄ…¹K#ý<‚·ÏQàÑÉ ¼n¦RoÇOš{÷ß~;?3<tù„ˆ»<ðÍêPÞ|¤Ø9ço\"ÖŽÛíœÂë§3+PN£7ê5ôu:ý caìü˜·.ñ:£ÑžY\ÔkàÍZGÜ©¸ËDe~…Žˆñí—ÎÛ|ë­·°·ƒ¸ïÞÝ­‹û¦÷}§uû‹²âþy±¸ÿ‰ î¢ÛK‚¶Ã—áÒ¸’j³PZŽTBTg¹Z	­±6×%ªAw4ËBÍÖ¢Uw5è»»Äzd\Së®òâõeõ€ÇÍÖÊÅ¬?šŠtXä‹G­(V^	n‡g˜;ª<Ö\B{h·Vžî­žrŒ›©n$‚lEÍà‚ÒíT¿V&Y^cäIç–c¨Îå>×Oµ ÈˆX–´EÊ’(ÄC"Ñ¶VŠév>úêân):Qc\V$´%Ü Ž¶ãŒŒ…õØX¿›ªîTÜiû?}ð€ª8+ssÿëýeŽÉìmñW˜àÓ¶ïí~÷+»w6­ê)?>”×kfÇ{äÄ€×CU÷gÇÀÜ;·ÿDÁy»1ãÕq¦üØ¸cƒå½"0í‰ûóô·Pqÿ7bq'òþ4/îðþˆ¸“|qW.m®¿>Ò×{i530ÅVSû‹{/wÊ€~B¼#ñvò9óó{Ÿcføò‰÷Ç/OçMšî%Ú4Ý ýñòù¡©±éð¨QIeÇ=’³‘ãÌ™ÅQ“É¬×k°£ëa¨˜œt8¦ìäq&<¿âuŒ‡ÍzM÷‡S£¸ŒFBºï¿{ën=á^w¨p‡Œ;xûÛþÈ½½ÚNî íÔÛ¿Fî¸	Rœ”ù,oí0n§Ãv<mï@ÜµmDÜËkÑˆ+ä<èÙ\ª.-• XÉÂÄÎ½¬FÝ8ÃÝkÅ´wAz Ç=˜€)tâîI$lü)lï’d‹ñB²œ-s(ãPû„RËˆxBš¾ks/Þû¹dâ~bÌÝU^³hÕˆ{ ¸MŸÝOQò	F±YÅ!å*ÓÕjÂºL%(÷½CŽiD ­år2Z¨º[¤zJVÔŠˆXûÙ˜(5¤fÃ–jÙh
Èeki[›˜âîiº,`°–ýÐNŸÎ®³Øïg<¬@ªl$Ú®–|;Ðì
Sq§Í2´Rdîoîáµ¤HeŸ/ssiÏŠ îöÎîî½ÍÛ±î“°Ók4+Su="â)wr/æ¹Ÿ›s—ÖÉ`š¯¥Â¼ýÈÚ}³&ð’Ùk&âÞGÅ+x§â.¸>ð<>Å¦N¼Ä ½2< ÍüY¥gx„±{}_õ÷Ä<si”CÊ`èí›˜»íí0öçÏ¹öDY xšeNŒ·Sq{;ðËßÞð9Æ.?DqoðÛ‹;0ék«¢QnÍDç8/#îüiÔÉùU¯]$•YG_Ô˜f3:^ÜAáõ:“×Œ`°>:›w¬šÃÓÓ^£)ïÐó¿ÉäË‡½æÅééUÍÑkÜAÜÁu{cãÎ·xo^ýòîîW¾ûÚîÞÝ]¸™º»áÚÜÞ‚&Hoî‚¸ƒ¶7÷V·—Ûš³å¯¤üÈŠÃîBªfÓ&ÜÈÃ¸-l.T»«pP±–M³6\VfƒZa(†Ø¥Všø°1•‡ÕÂóDÊŸÊù— ®îE:ªM„=WvãâÉn±DO`¤€5%ÚîÕÅÒiôýÅîòÃr·!´ ¿ÍíÔ@L:]g]¨N¼©þÒÕB¶d×ÖmµÞD;-šÖÅ³‚£,òÞn«†PC¸H¨ìw¦Øt2¾¶¾ž¨µqv5;CSwæaˆû7·—"2øwnÒû©$ïn°nÞùúîŽ5æ2t­í¦ðXÏ˜O£ñõÈˆû¤âœ{ÿ~«y{«öv ëÇì]Áû—úÅé×;wàðU^ÜH;æ3ˆ; #îŠåìsXÜg3×/àˆûµ+#½MÄxÞaâÐ£æˆ·ËÜ©·Óí¨czêò£÷O~²™¸ãó³^'iŽ}eQò&æi9qžY4›Œ
TÇØÃa3ÀÔíƒ¾ùUbñ}fÕ¬7šWÂùÉ×Ç§W½+ðRÞ±2»¨á8lîöÑAÓà¢×¬ãºw%£2Íí[w¿%l¦ÂÔÄýÎ½ý­^xa3v{g›Ÿ·7÷?QPÜÛoq·Zc•hÙu î©b¼Ê&Ü,Õ«i•;™óØª©ÔšŠÉH¾‚ì,ô	{ +ÓÜ,Q*Ä+Ln*ˆûR	îÜR‚9
îå,î@¨æáSÈ*², sµÓ¬Ì)Ç5pOˆWHlL·ØÊ¨­ÊE›_:\W	Òr3ÊQõ£¶H0"r
ÜRR¢P†Âù“ñeW,žMV²kÙõ þ™%DÜYm}&¢Å¨wœ–qßOqs?dÀÍ^ûÿµ~?õÅmœwçœ›û[/oo¸P×hL+ÓÃ=3«ïí‰‹;vw¡ýâSç@Ý	çÆîßk; £íŠÖÉ®b2c÷àLŽk¼H÷ÓŒ»x'µµ¸Š;ÎËÀ3¢îTˆŸÆ·Žø”{wJP7w’ ¼}"¬GÊÀe.öö]sdF0p¿67w¥Þ“¬¸Sý&ðöÆw*îÂæ›q:"/?öhÄýq€š»TÜ	<?3àXµÛõ¨!šÑ…! cš9t/bíÃ“++£2Tf;ä]Â‹z,ê¦ÑAï¨ÉÌ‘†ÇÙùÉðlx~rxjfxrÞç[ÈÃÜ}Þ1jÖÁïÒGWAâ½ƒ&]÷÷—”Ÿ¸›ÿé[ î´
òË»óˆû>ÜN…
÷—ŸŠ;x;©”n/dàŽ!9…ÄÝw¡Ö,§ÂÛ9SI2
Íw"ÐÊÑt0õGÙ`±V§ƒÖÈŸ#ÇÝî ÿãkW!½¼\v!'ÎÐ·+W
!d-mmËÞ;ÑâŽüEw	'Ûq~•éN9åXîeIý‹,–D©ºV(ÔJ”kÄR{µ2e™íÔäqxrº‚Ú$Ä4½GUI0ÇM0Î5‰É¤r0ßˆYCK…õB5 ÅE ž@À£R©yqWã‘»êøÅýf
ß¹¶&·ÿü¯é¦r!geoë…—÷nP×èWÆ¿ó/§Y;Ó‘¸ŸúÑÛ÷ZÖ·+?o§ ÎhÞwéõ#‰û'Äâþ	áwJ+q§ƒøÎ¦BAtŽ‰þ‰Œïê5xo—®Îô·÷³Wè‘Þ.¸Ë{;µ‚Øhx~alèÄŠ;fjâîºÆ]G€™4²ùÙ!ñÄ}h|!D
À™}³«áY|É„g½v£†LÞMá™¡sSÓcã“ÓSOMÎÌúáÑQofÔ4¸:ëóúF3ùÙEÒds²ÄýMÊàÛK¸òµW^Û¾»¿·â¾³îm·?dqW%*Ô.îa¢TÜ¹r´R);s6˜«CžÓ’rúSiKÁŸdÝñµúèGËÖ=`í}šï«Šþør$â´º:1ÚµT&ÿ,s4àr¨ûÉw)—C•æŽ;4)§Šˆ¯&ŒKak©²Ó€êDBñB Cs¯0P¡²Üè>ÒRPFí“eÄ$©sÔÆ+ž¬³±·‡¢E|§Ž‹-gÝ¥«æ‡ìXNF‡í4áÞRÜ)TÜjîôz*Ë æŽ«eþÃv%†Íþ›F®0míã÷Xyoë‹/mw½’
pæ7.gx`éÀÛ±¸¼·Ã‹bs'¯‡`.w0÷É÷ïI¼½YÍ·×9º´¬.š4Ü(–Ù~q«ŒÔÚ¥æ.¸;õv™ªŸ9 ”¸€ýÔyç·TÅá@¹Ndžëí¿ð†6Tù2Èëá}òð„^žç¸âEz<|=qÞ.ÊR ·{ÃÓã—Š¸“„áYà±Öâ<ûì™É°‰9ÞøÔÀs|ºþÒ;?~³ N­Îˆµ}:¿¨P_;gšÍ¯˜tzÞ»2??0?ª!Ý1ƒ¾<´äŸï™Wæ!ãÈû|™Q»ÎžÉ/€ÌÏ¬š½ƒƒ‹â‡ÙýáTZ©†;ÄÛ_¥ÞþÊ+»/ïnà
÷}klT¸ÿEÝÛ¿D¼4ÊÐ¤Œèø½šúQørK´‹;•ö¶Ä]íì­ævöà¾ª5[Ì­Ç­kx`ÏJe0è[KfÙÂR‰ÁYK–eØµ’­Y¸3J%Tª’?V,-U’N«ÕéäÇwý¥£»‹{méq§µ2'¼ÿ‡°»M²…ëaOï§(U©u¶š·ÛÖ–"2û/Y–‘¡‚äY–Ñ{§¥aÐÞ•Ó2G$ ‡0°-¾ñUPÆPY«ñ_…]¡hOö«q¬]«b Þ®bT*&Urn„Ä©;6wqÎýÈ&*îoñGKÛß$W˜~{ÇpÜ}ûÅ_Ú‡êö®án¼óí¿ûÞxÞŽ½o”þÈYq§ðSwÂyà;“oƒ¹Sk—ËÉ4ž·#˜š[Õkì³—&ÀÛ‰¸“^™öÅ"ñq§Åý<ÄšûÀ¶Þ'²xŒ‚IßµÞç®­êÃú€k×ÃXÜá]ò<-ˆ» ?rœ½ºj7›ÍšG¶—Jƒ2IP†z;@œ€|vhì‹ó3ãEfºW|AÜ{ì“M2î<àY gÚ«ÓéGóùüÀ<N/êAâÍø(Øùž©Éñó¢™ûÊ`íÃ“yå2Lz_xÕ«×C9ÌØðX~DÜhÖë4£ó“Cç§Æ†Ï¿¾°²†ÎïÊ*ÎÀû&‡ÏŒŸš€¾N‡šÓÙáT%'îÈ°ó_îÒ›©Ð(ó.‚|yëöíý—¾¸}Û°wÁÛAÜoÿ4õvI¾ Óö…i9mDuæNÔ.8|WÊËV—’	|:p©¸ž³F’i[(&Ñ‹}úb<5÷ Ô¾3–*’Ëq?‚{¬£ð7.:öWµ
,ˆ­ûO°¸Ódk. ¥Yj5ötê~Š2÷"¨Èú¯ÉI%dþá¡ÖâN§Ù® ¤RÀ_cŽB"CQfšÎÜås\¨‚©†ÞkXJ'â>0S‰’ÞKZýHšyÑü|j§âþµjÒÉ¡H9wóóŸÇâþg[{Ëx
ÂíÿÝ¨k47Þû«oÿíµ°‘xûùzH¦]qzÀÜiŒdÞ.ööæíÊ‰ûÂ‡?|íªÏ¤÷Â<úù³TÜ…ØË±Š;üÒ\Üû”K™ë®Nôö^ñêÞ¸Ò‹Åýªã¼G±¸÷Š×ô\ºÒwíÒÜÜÀvý#ôöÖA™ŸÂáqkÐàÊüôÌÐCw”y¢]q`–=?óì³¤¦gÞŒ8}xøˆûåùAßäQOËÊ0µöá™ð dY”Â1‹³«™Ù•ù…ˆÞxõðq[\È›9Î»0~~xjj|h&lÌÏ®B²‚íúÁéáñ±ÉéE{go}8UÚ	üXAq¿{ë.½™
ÞÎ‹û{{/}q«ìÚÙÚú*½™Ê‹;ñöÎÅhWÜ-ÑX;{©§o©±Ù\Ò_„¤L´/¬§bå’–­Ad:^P3jËl æM½Ý’âè©ß•Š»BI'âœNjŸ8Y0–Sbäì‰þö$‹;•#VêFÕhétYõEîž: ¤•fdš™H¤¿Ã‰ä©d”8Í”¤&]eºD]]B#-¢ŒKRí˜¼=s¢pw ãçíÉ$ù7_kÓò‰v5¼püâNšeÞ,”]xÍé&üáDÎ§nßFÖÊÎþ4ËìCÐ½{4ï}á¿ÿÕ|z¤Ÿ%ÞOØÙ›‰;À{÷§¦ïÓ{Ëy»¢ÚNÅ¯ÿë>rÕ®ôNPqøx{âNi!î´^þû ¸÷â”Ž¬¸OÌê‘r÷Þ‘«ƒ^H¯LâÎ?Yqúx.Ì92ÆGàítàÞfP8øäÐí£óCMÜNÄBÄ}Ú‡;Þ5™ðÂô²/"ä:3µ¢?$îÃcá¯)„Æ˜ÉO.dVÓ+3ÿªÌüÔø
´µ¯,€Ÿ/,LÎgìfSÆd_ÍšL‹Žé±™ùÙÙQÔÄÛ[‹; ´¸s®Í;·vqÀý+0pÿn}àþÂÖæÎÖ‹[›Üæ­‚¤wš“¡GSÁÛ•wU°Â¡Ö¸Be'ªc-Ó¥Êr5¬%ãÑl­‚Rm¶\ô€Hºùw–Ui-6rbäð…u›š4ç,0'Ê¡rÔï,[#œ«£¤Š*°µfñVwÜzâÅE²R›ò¤Ó§â~ŠIQB%b‘^Ô7.RÙj)]ª¢KÖCŸžÒ…ÐöÅ}M\ä.ãÉÚn†íE?êŠtG¥BK›æ„ª}og‹½Ý_F'É‹k°—ÊðA>•¡%úN9zTæ£DÝsHÜo¦üä
åÞ¬—¹CZæf²²¿µ[û·Gôö¿üË÷2:ðö©ƒ’:©¸‹:!…‰<~‚ÿ~hà~k©H! ¬ ¥2#³ƒ×GÎNPo‹ûï€¹ËÑZÜ¥ê~0xç…;å™Lþ ãÞ{]1YÖ_8{)³:pq„†ëÄžó[ª½âŸøýÇ¢‰{xÞ×¼	÷v$`ON}ð¡ˆûðÚnÅ}Ú„êØGS“ƒãgÆç½:Äc^8óÔðø‚oTÉÈg_É‡!ßòî3"¬ö:¼øÈ’#ïX˜ÉûV ÿÑ~|/ÞzÎ³šŒ:˜¸ÿ’2Ç.ît=u—epR{ûöÖ{{[/¾¸ÃU¶`Þ.x;¸m§w€Ü¢í=BTF[ò£6pE\¨Ž!LXØTn½ME«¹h<Ëj-¹”›a«ÅViµ– «r¯T é–C+•ZiGI—£0”O‡œÑ¤«\F¿ƒö‰×C†T4•Pfô(–ý?=i§S¥ë¸‡MAÍ¨N½ý”.î°®&Þš(#ÌÒËØJâìLE²GZhÙÚ’”YM4¨W
0,”Q·DØvþ§8a»¾%¶5‘i5›µ")—ž…rÙ¥öö¥*ÜLz@Ö=6h‚ô0*|§º©º-Ü]w² JFîŸ¥æNÛÜ?}?k¼
Þ^wØN½¹ÅWËlíY¹#¹à;_øÂÞ»¡AÆðµïœÁ`!Vþ5wêîRzz^¿~ï‘y; ¥2}O^tÌMôƒO×wS^ÛyoïaaUŒ0y'R,rå~±¸?	€._Ì(ejPyvÎwõâ¥k}˜‰	<ã§¡{¯ÄÜùá?}0}½#s¾A3z(üô×AÜ›4Aây;EgZÅ53çw¬êbš_N%È¨û¹sSóƒH@ŸÉèŽ¬À>êØ<¤W ïÔd~òçŠÂ™ÍÒxa¶¾ªÓà¼Ù¾8jÔ!½7¼°ÎÏLM/8ÂŽp"4¦•Ù°Ãg¢y©Ž'î?mOÜÃuë€{]Üw·¶·áfê~dyûæÖ¡€;ˆ;ÉÉPo§2xÞNîd1U,îM¬¡­YQgD
6“ŽWÓµZt-QH…]\O¨Õ‰šÛÆÇ`‚6¶ˆÿ UCØ]"î6Èj³©e7¤f“\2ë7”ý¨S’‰bbî5¥¼Õã®&c'\Ü‘5uènªJ…ËfNSî§(9p—&EÖˆ'd.|ú‘@¬*©–i½œ*÷ ÉKVÛÆÙÒ9ˆsä¨[ÚŠdðG›»»oãfÚD”]#pá!·\ ìØì¥Ó,(;Û=V­"ah”Q·¸¿Y\vAw{áM'¸cssWË@)ä_ÜÜq¢îÁ‡7Þûûw°·Ï~ûï>üt+î=coß£ÞÞ¬Næ¸ZÄt™¹×Ÿé­`¢ùöG)î}TÜ{•ZN5_½0òü•‹W®^àÛ ç®t.îÀ…‹x! ;¿´ÓQPBg´{ó3C'VÜ/Ï‘R¢>˜ñ™u=cÒqÇÐ¢a4½ÓãšÇïcuvTÓó:“oa|fV¦†g¦'Ç¦æÍFï ]/}Ýï¦Ê‹ûÏ2\r'âÎÜ±·¿ðòîþÞ÷mëm8ÅT÷öo’ÓK’»Òâî)FPg„Ü0H‡ªK Vò¸ã1C< ™‹- wS±Fªm6&‘«Ú Z˜<¸3¥†sL¤±¨™CÙ
1-êŠ…¬í|èbHÀZ
@>'ZI3<*­Z¥°¨õ„‹;2TJ´:‚b)•,0y?å”N±©äî!IN¤Y¹hµ½xXì-V?+2¿1ØX¹ÉB«¹»-PÍAŠç¨H·s=I$‹?ž•?ÜÊVa¦Xmíz{Bþ¢FÄou¹B…õ
ùöÅÍØÜë	›Í]
jñX¼˜jÓ‚¾Cowâ<PçNäý£ÀºSqw§œxÜ~w¹Sq¿Ý¹É‹ûWw"¨{ŒßïûvÍ³^üûoÿí÷¾æŽÅýFðòüË4wá÷ÅóvÉZªdÞ®(šAÇ5èq?{åÒ•F°pîsŸ;’¸Ã1q¨¸Óq©:å@ÜûFe$í+/ÂvêÜ"®ƒœX½Žï‚¸óðD*îOò7ƒ§s×¡_äxùå¯ÿ/wiP¦uÀ]Š~pv~Fiq4öÿÇÞÙ·qŸw~='þˆRG–“ëã¹‹òÖñM2—ø¦yqU;iÒŽÏ	œ—Úiâ8mê¸p(ˆ× 3(–D¸ ›!^	$Þ$ Ó;¾à á$ PsCÉz¥dËRlÏÅ“ñÌo“4×\3i|Ïo—«åŠ¤5ÃO¬„h22cñ£‡ßçûü;L7q— ÷ãÁA$‡f.)sû’Q§iïì`ÔàwÅ5ˆ5Î/rÓ}Ûüœ}"*ÂÔÝïó‡ÑAV;00`Ô¡-¡ÐÞw@þpªd9õ7HØ˜Å±rùêÕ«ë6S?ÿù¯@nóÚêù'Î_ò^¹¶*+îÞ"îŸ´ýý 'í€oß‚¸3Yý–Ü1™Ì™É@%Òl™	w=CÐ5É«ÍŠ¤:Õ6CªÔ0
Âïé‘R;È¬IQ„9ÕD ‰tÅ¼1´)IÈÓ$½éñ*amÇœ¹ˆ°¯IZIâö1,’Ì.Ä™€ÒfÕúÕB2S§È ½W¹Çm­¦ÐMh¹ÍÌÑ*…D„”:Ú@YîäS‘a’ï¾l“«dÌ²y·L«šËZ’HRÄÚ1ÔG9WÍ¨5C·R™N1WÞºÑë'DÞÛY¤yÙB'¥ç¼=C˜AÙ­°Ýßaw€âF!¸S×¹÷KÜ¹¡;Õ.;á—Z9ó¹G?Ç«;6÷3Vù2÷£×›´]L/¿òØ+?µ±{û~xußFq—ÆÜ…çDð“–é^'È´·+‹É35	I’°afjf|û“ 7pß|Ì]~ôÎÇÜÆˆâ.™×i¥&î¬gzvòÀøÔÈÀÉq˜›G—¥âÎ³^Üá± î¢ºsÆg£õßlôv,îòw@âí]-rÄrí>q÷C±¢,:›Í4 Ójñ}ß>a
…æmƒÏÜ q` iŒFíÈÒœ!]Z,ý>¶OìžAÖ6
íƒ[øœ³|^àÎˆ;2­œ½üì‹W/ß« AÜ¿²ºw¢AÜŽ³W®?'I¸ƒ¶ë¼·o&î@¯âö¼•z–f¹ãvÓÅ\‹¦ª^Ï-(KVÀiu$x9“1sÆN’0z_•aH|¶Ÿ¨7
ðÓË±H½C1‡mJ¤’r¤ÚY”t$ÅJ }NK-¯RRÜAAv»¸#ø%[IÉ/r®d>W ÷^Ü}í&eHÈÊx»#OHèžÿÎÉ7)vyÒ»eqÇ°±,Å·ò™ Ã0Ý©Seo)J‘Ø “BïFÌi 5KRæO*›Ãäœ]–‹ôåN žŠ!Px˜·›;Ëáfò·™1“„šÄG˜øJ÷~Š;Sµ }£pO‘ Ë sçbîO=}áúêK?~nµ¡ßö¼ý•Ç{ìgçXNáÿþGÿø“ÿæÎížn]Ü‰×°…íø¼]D;žšœ9i˜YX˜ý x;†¯‚Ü¶·c¶-îŠNµ†œ^bµ'|ø?ÏÌÀÜ]^Ü‰¸c[çÁüÁÒè êÿ÷ÑÛ{h”ùµ4(ÓèJ	—Ò®]&î6tgÐÎ—°—êIû'¢#x¨oš‹z VdHÒ‹Ñx<LÃ_èp·MZ|"jSðhÞd™ç_'™¸ÿ¾qÿ=RÖr*e®Þ¸|ù*h»àí¸Á5VŸxþüYgÌ{óö§øy»x2ó¥¾ˆ{™Ý’9&–4Ã´ó¸:†®·ñ¿6^ïPj¦½Óx&?*¾ò‘Hç ”‰Ÿ§ReÏúÅN±N=Ú}£X+3Œç-Í<þŽ0ÝŒ¡œYüšD(A¾±ÛÅÝYÎ“Bÿ¶š¡)’ TæB-Õ.Té½ÈÌ½¢’|/¬ƒnØèí–Mò)ùXWß52*§¡bÛw‘d,KêQ(éÔÐ–©=a–Í,&#Þ$ræ(&•ÄS“"ùýj›r2³›ÉP\tN­Vq?T*åÄ7ËHRî8&ãHÕ?þä—¤â•ßYm:j×VW¯]bÑ¶`_{óñÇß|ùœ!ÓO_f™A›ûÿ|à=ÇŽ½»¸òâî²¿ÑuÞ®p{{w«;9{brrjafx¸°Oâl.îðB©Ã©š¹ÙƒÇí&4°p`r’ÛM•w>®ƒÈˆ»ÈÀ©P»ïÿOôvE‚2"¬F«µy&Žï&qw•4èŽÀŽ†ŽCqÝL/qÅðZ=l_ôÄÓá9O¸41št|qtÄˆ»" æñù÷´†iæâ%qn5	o¹Éý%QÜ¹Oø¯‘2h/]|öÅ¯\“Šûù³ú+¸÷J5.|G^ÜŸ|’¸o÷?¹qWçk›þi£Ìwó²,Î~¶L=“qWÓË4X®!oÛJš3•
cÍT–Ý°-)œ![ÅŒÄ%UxO’Är­¢r[;–Z=¡G=¡wÄ’	b9
Ü»¤`©µMÊBvj»\Ü‘¾V`s†ÉÐ° \.w¬k—˜R¤_Ib=¶±šÚìîN`o§ˆM8ÐMÚ„„º…!`å3îý@!ãnGÐVHæh¢'¬¯¬·—#N|œ§h¼UÓ“Örž¡;yŠK
¹vµP*³ÍRÈ? sTyqÇæþ§­LOªg¾pg˜8qç›ež‚†H‡Óá…ÿÚnÕÚÏ>ûø›¯é4p€	¼ý±¹ÿÌý‘cØÜq9û!ŒÜ~ªˆøÄ! ôZ×:™îï¸]ÄfŸ<p`rÊ0ýAAÜÁÀ•0wHÝpHÌþbà¿×ÝRuq6˜”jq>ˆîìü4T¸OOMCbFH¯‹=‘Bèuýc½ýSŸúÔ§NLEGtHi~ûŽDÜ×½Q¦wo—öÌ„ÓþÛ=ª*¿•Ú£¸=ôÐ‡xÆ<¨ÿh´•›ùsƒKÑÅA±ƒ#Qˆ´£ö‰ S=&HµÛM&ã ÷÷—u¦yHÃK`ÁéµºÎo®5yìžð’É¦eÅÕž§ÿŒÂyåÙg^¼|íÆwÁÛyqoÿò—ÏÖ`àþüó×cŽkçŸo‡€»äö·‹óvðvAÜÅÅTðö?èUÛkÁ±‰·GÚTÅ‚•1ËÎÖÝV¦“+¶2T§Í¨Tyo² awŠ¡L«MÃ(ßòTqýL
B4¤¸™j&A×	7Ó)çÜT»u;Ô3±bëE$O`Tuo„VÞfòÍ]½Šqäw;‘­%TÂÑ\ë™!™JYríÌžºï±uq§X$P'Ö³Œå1@lJ )“‘—/w¤å*Û«ÒV™]B‚c¹zÅ‘`ˆÞ°¶e¼Ýém6#I¤Y,Nü >kMSVŠÎPV7Å¸I3¬çG%Š‹ûûo^a
T½(’È?ÊUB>ºfî¢¸¯®^ÜŽ¾üø+?{y€+rÿÞ/pæþ8æÎ™;îg?´žuâ¾ÎÝ×Ë<¼‰áœ0nú^)-<5þG³S3“““o¿]q‡wu+v?ÀË; Š;œ<’pð¤N!sóflP.sà3'f§ìöYqþG"î¼­ß*îÀ©éøœ²i÷_þx{o2ÿº-q ²ŽíqôYÙÁ®‘Ö$óIÒŽÎÎG¥|‰iq0ê;ìš!ß¾8b´™L£sC¾øüàè¢=h˜³™lBÌ]£ÓÀ_&£Ç3o„G«[*•Jé´gÑî™·€ìsoýË-ˆ»bÿ~ëÏ^}æ[¸RFðvNÜWáþxûÑëÇ•Õ38à.l¦
Þ.wñöÒûoWÜ©”~³¯=Á5F&¹¯‘\‡´"‰V>PÏCT¥à¬Ñ8^	-t¢ZžaV$a·S­cÅTîL6R‡Ÿ³8-¸÷L¤NG[[&¹jk5RpŠ£Ê¤’»\ÜQ2Û©6b(Ù¬:•›˜¬t®±4*±Ç[LÊT‘€Wêãèô”2C7±Äz¤F'íXi!Ù÷]CªÛÁ6êFÅMlßÛK6kAN‹ÅÁKÍˆ M1èm‡v.\Ir.ØÈñmŠ»ÌÕÿºæíïî§Ò)g2U§ Z†¿Âð#w!,óôõ‹¶îåŸBL†E¯ýì±ï}ï{1÷cÀ!@FÜEQ_‹¾±ƒõíò°ºûäfgg§g¦‡±s+,îÂàsö?úÌg>#S=ÈÁ?âFíüëGŽÌŒ(q÷D§&Oê4óÓð~''ÃæÅ¯Š¤ìïÝÄFïŸºOàS¿QŽ_üÛ;¢¸wóöíÜÅ(¶m)=¤Œ¸Ký½wq „É«©}ƒÕêLƒó#bÅýVN³öÀ6øBvûkZŠ–<Kñt<:72h]š‹–âÁß5ôàÐþ!¨•n›¸¡^ôx<£0X‡x‹Ñ‘ù¥‘QÏââÜˆîæ;gmŒ7„çíþPÚ÷Köþ“*s8Uw1âŽAŠqéÆ3—/s2¢·ÿÙjóœL=zt5ÂÖV×SÅÍT¡Âk”ù‡x{iÍÜ!&³­„»ŠÞd7UI%ª9×&Œ'îúd6@VšUšÊ+A7Ð ©@¾]ÉÀ³]“'Ý9K‹W)ÝfH¸«2*ßL¸­r$¶rØPŸ53eé\<v‘Q}€Éîvq‡A\­qÀ§&·5He®s)Ô½[ª{lµS&Ò%ØáÆÎ=Qè¦»	$¡)ûsÉ~÷Ðì¢Þæåì&î^ƒ8zÏ-ÙœL#ëM‚¼{ñxÃÙ¬“ÐýJAØPó1Ü¬]E’âŽOßÄ‚<d¤Âàbá~ª˜rs?³šÈFbh›ð£6×,óæ÷{ì±ï½À›;ÄÜÿ÷ÿÚTÜß#+îÀÄèFoÿEÿóíRXSxò“ž™™Ýâ>Ö"e˜Ÿ2ÌÌÀjêiÜ	9>³03.+î"_èQÜÇÓs:Ï¥Þêí¿{·€û¿ŠÞ¾EqXcŠÊß{§Å½¯wi"ëQÛú§l6-Z„yº/4Œz‚%¸²dÎ{æÂ¸¼Ý544äóùÇÆÆ†Æ|c>_(^JÃ¦ª}Ôf‚vZKž9¨¡YLJ6VY­Òñƒ/½Ž§çms£†3w‰¸w¯qÿRÇµ«g¯\½
Ú.zûŸo^ÁâþÒù2dÜEo‡y»0poï‹¸“ËÞî2GÃë´p_9ôxÏÜn:QõöfóT%RKäI7ƒKÜ«u+—c'É@ÀšOtèF-@ßÁ…‘<ûTÖ(¦2*È¤°åJcKaQ(Ge†STŠlj¢/ÐMn—|WÃÆ"ÞNþ—[?â¾&ów#‚_Þ3÷=6ƒ$eUÙi¾5(c!z¤‰¤3úÖ»”µdå:u´{`½]sBæN¢‘D²x³•Ì–>õš|k}¶‘[^ÎÆÖ¼`ê\ï+	Év7ŒÚ%÷+n[ÜYqÿH¦hqfóÁ€¸‚¹ói™3çÙ.ús/¿|N0oüû`î0rÇp1waäÞUÜåT1Cñsru2ÒÈþc²CDfr‹ûìäíº»ˆ(î|R†wž5yßXï>©Ø8vdvxÒ`Dºðô0¼ãSSk­2`îð‚G*îœ¹á_Xÿ¤DÜÿ#pß‰ÅVÉs©RoÅ]&à.i”ÙFb–…ÃLKö‰±{zPtåÄ¿!/î÷ßÿ‡ÚPÿÐ.ÅK‹F‰[ktlá®¦.Åƒ¡‰èb¼48%‹Ÿß7t/ž±Óq{zÂ?äòƒÅƒ~xÓx¸TZœ³Çã¾‰tÂìó&]É>?7ª“¨»F7oOûÒ8W;]\ÅÿÌ]öpªtâþ[¤š•—¯]¾ÊÏÛ±¸ƒ·?qþlsõüù£Ï½¢w\_pÇÚ.xûŸ®5¸‹©ÿEqïq·píê¬^›¾W®ë©U§	*ëLÑL¾],Ò$Ý¡`ÞÛÎ¨ø#KîÄ¯“©ª%å&H!ànT‹4EYÕËµŒŠòo»šD½KX¡†&—¿7Ð¡ÌËõ~é©*Jîfq[â Ö’jÃ?|ô\Í]¡/ÇwÏÜ÷Ø‰ò%ºTzá™EL¾U—ÑYÊ)‡É 	u¹6HýzÏm£ÝD¬Et‡©WSå$Yx ŒÞÈ&à|ô–7k‘\±b¶V-œ·w¬0¡5§ßVŠâ3DÿÅ=SŒÔª×,#÷ã¨Ì/$±í){&AÚ•×_Å·Rb/½þÊãœ¸a0wËÈ‹»ˆ¼¸cü§åêÛwºñ—\˜ÅáöÉáNÎÌLö_Ü1ÝÄ}zT!+f£“³Óa²-†÷éñ®âþ À«;¦»¸cm·j•<»ô‡ÄÛ•j”‘‡Õ=ßá;(îqM?Å}t~€Ýð¤	Â-žEO´d/ÍÍ‡£`ÙpÕµÿ¸ß·h¿+8g´Ócc!_È7´ï˜/èÛ?–é¿/4áEí†’=J—&& é=X2I•y`$jŸ[2Œ…<bŠýB÷î÷_!åp\¹Æ‹»8pâ‰+—®¯®}î¥k1¶ya'ÅIé»EÛ¹ëÛ¬3É"=~CK-†"‰åŒ[EÔ#µ:ifò‰*å†A•b(+ÞI%AÜ)k ™,7bÕ›ww n6¥Ie›´
>n2‘/£ÞI6+t»V®3n‚Jä¦ÕÇ5Ì@Ö‰îàºšPáïzà¤+S°Þ³·£ºÇ»¡ê’”©H®'É]m—“\‚.±a¦\”¹S¯sX¥zž%y?»‹œzï6èNky¹“Ï€Nou½ÉÊ‰m¬–¨[Õ­ÿï8•ÉPEZ¹#K$,úC:Ñ¬Úòç]ÑÚ¥ª¼ºÓÅbžo–ø°4œ=úq.-óÅL
¶…såì%Zyók¯¯8áUík¯ö³ƒ¹?Æ™ûXÜÿž‹¹C¯Ì±5{ßìÛ‡keîãX'îRw¿xð=Ás2ñö/üÕO&¹ËK“3S·˜ù¤ÈºÙ,³ÞÞÅeU\ìÂ.Á`CÊ`šZGGXvtúá‡!3=3,”=bÖÖ?†y€CyŒTÜ¹t{Ð£U¸²kÀØ,à í00÷ÝÓ=³Öú(Ò{†FFÜ¹çá%l¥BûÞMEýƒ•½Ý¤Ñ™Fìé´²ìáEˆ³û\C.¬:ì
…îuAÍ§=ôù¹ÀŒkÿ¼<åsÁÿ^xžôýCCÁpiÂ?/ó‡ÂÚÑzíÀ¨ÇŠÅÅ3, Ñÿzçî/¬&¶råÆ7AÛ9oÿ
çíÏ_k\¿pþèŸ»î@ÞUébª”¼ýÓ°vAÛ…ÅT‘nÒ.“„Tu¼Hžl¾“)etèõÙD"¯¶’õl´æë•Ô28£[mf¬j*@¹Õ ÁÌGœ^8¯D’keeÐa–mtòÅ–*P\†9|%ÙÈb¨gàðG%kñ¶p6·åM@0§â®ªXÐ]D¬ŠuÁÜéÀ§ k@9™Ìæ÷Ì}^“2Ñ¦$%(ågTéÚ:¡½ÅR­1Ù"E«Eºî)7[¯I›ãwPdÕGTtYÖÛ“ŽZÅM¶½øpjŽVg*ø[kn:ÃçÕ$CC9¤"âðâ.Ø»XæêN¨O|âÓëÅó¹3…ÚI‹#¶rùÆ
r¼þõ7WðˆP÷Ú›þYÞÜ¿Ï›»sÇ3÷.â.NÜ1÷Þ+FÜ±·?øÈ©hLâí;o—jÇÈÂ0>z
QwÅÄø€ˆ»~ê¾NÜpŒGuJUvŸÄ{	Úð0îŽŸ¶Osâ.Ò»¸càµñiCØ¨Q¸rkA`»A)º¥ ë½÷Ü³Sâ¾Öã~˜3wWíàðÂÿ½çp_{Ô ù—`08³öý®ãCÇ]¾øÈ¢ß
}k7”&Àæ'‚†x<l›ùÇsó¥ô¢ÍçLÆÑQ£idÞ3š×²?žwLµÚÑè †ÕŽx`•uþw÷_+y#VéÚå¿ýÁš·Ÿ?½ýùó×®?ÿÜs?þñjÅ®=…½]l‚îBƒ»˜o+ÜeêdzwrÙÒ­s°P“Ï½ÇjåŠJ¡£¤«•DŠ&ðš”â14Œœ¬ ÄbrI¤GÍÀÍF™L½Ú,@º=@ân"S‹èêK®Øˆ±\ÂÝœòæ‰|®ÓÇ<ÝDwÐ£O î|a™ó.|á0»W.³G¯â^@Hî:?£ŒZz±ÐÝFîÅ®âÞ’Uô”4ø¾ë(Z‰~¡¤œH§5òæ‚Å"Ù
C¸óË-:Ü[–±	AÂÆ›TRÜYqÿæ¦·¯ßO=Ó.;¶y†ðâÅÿp1¦9ûW_Ór‡SßüêŸKÍ]ˆ¹sÍ2b^æØþý‚¸‹i¶óâ.š<·¨š>×5ßŽvÍÈÂä¸¼L¯‘˜®?µq?HÄ}fD!ÑžæÃòöÆŸ±ß–¸Ÿ:1c_…†Âu2Ò °…“© Ú>Æ(Ì˜ïé®à½‹û–0ºûçPÿaY~'ä]3ÛKñ4Þ9õùýþ¡SðVQÇöûKáhÉ¿ohÒ0ˆ)-¦!ó/!S
º|éøÄXöyÓp–É ¶M‘ þð6®!Ÿa^+{Ó,lˆMñô’V³dð:4:ùFWqÿ··Þ5hXÅÄ}åÚµ«ÿopÿÊ*/îGW¯ŸoúBé›°¸cs½½oâÞ¶ ùïÒ6ù…T½~ã”l T=“KPD¥ªš	†¦TV:Ï0”ÙÝ1fÒÊMëÂHÇgèT*“Ï-»4<é.:#*vû^©UËNè?$€¼¥L‘Ålì£ÖÜU#w'të«	5á^.®ÿ[å\†Øc®H®õ”å‹Ë±Ï·å¼]¤Þeä¾Lˆ˜H$æ–dèe7Vkh÷ai˜þôÏ"uG¤YxTnU-ÈRÎ·[™@€"é\.O*˜¨Í\(µ£âþ‘›âÚþäÇÿúBÑ‹¶cåâÕ~ûÛß¾C+¯¾úr¯¥¾üêW¥â.í„ÜLÜYq-Ýñy»Ð”wzjrKý1
‹»²%îÈåÅÊf88<{`zÔ¸ppûâþ‡ÃpŒ)¬¥ŠÚl9à Û@kŒŽÝ	qŸ0¢þ£…;J62ÍMKöàÄZV}lè¡‡öï?æò»üq{pÈŸÁ÷ÇîÝÿáÃÀÿ(°èðþýpNíø~ÈãÃ‹ÃðÜáÃøñÆæä„›5âþE-²…}‡ísEÁÜ7NÞzÛ*d7ê´ÊMÜ¯Ü÷/CT†÷¼¸C­²¬þ7œoçÅýQÌ—ú&îîbÉàh4¼&7Nƒ’	Fúœh1‰"å1$AeÌó˜I\úè†Ð"îBQ!å.D*æJ5ßéPØ½kl¹ÐŒÅXÔ#±Tµii¶TØªÞ‘ÉV)¢˜sItaÉåñ7ÎÉ€ðÍs7¾…¾Ç½ˆ»Û!;Ç>Ÿ4ohu— r2Is·{J9Ém&ÙkŽ¡][ÎôeÞž¹¹OÃ&c±¤‰8#M˜·g)8˜JQf’0Ë³šTáj]¼ºsâŽ0	êÞ~¦ÕºÐ*6cÛúêwñÆ‹ÏþðòÅ³1ä¸x{»Tÿâ/8snÆÜ±¸¯…eÞ#Š;ÄeÞ#wyq÷Gc‚·ïdŒ|£ûÉiÄ]rßª¸Ÿ˜WfÚŠt'§p!<kœ:2<;¼0<²mq?5uÚ„”æ7kÚ.w2õ_$Þ®tPFÄfp?~Ï‹ûñàÎˆ»ÿiÔ´§ý!ðv×˜ÌµûùýC¾‰ËoúöÚÇÅü¡5ÖžàÕnâtkÇÑ.ÃÆh(¬CìœÄ=m¾õ†ôþðÞzÛwˆh¹kgAÜyoçîÐù<$Ü¾ô3Y,Æ î-ežÄA™>‰{¦‰äpD,úµTV*í0%o¶@
IºEQÐ-‘é0¤
2íî x ‚®*µ—ë\T¤•²f²Ù@§\­s-7,²ŽlªÙtôøûb›b¤Q Ž±¤(²šêsˆ;Sv¢»‰Z"ÕLÔ)‚Øóõ=¶]	.è±É(ÜKH¨°Ó&ºµ;fä£5‰ÎïRRå½ÎêofÚá>jRâ¸NxÒ[Î–yÊë+Vº°LáåTµ›aÀãïˆ¸ƒ¹?I'"ÞÆ¶* YÇÙËÏ¼øâ‹?¼¸bq¢s++1„b+¯ýkœ¸‚¹smî/æþÈ!qæÎ;¹àíÝÅwÏÜ”«oGwÉÓëÐ]÷îb/wþåæâ>n°)“ðL>|`Á„s¦ŽŒO.Ø§ñ‡àÙª¸ŸZLSñx»ÌÉÔþÜE4ÆE{<8v|GÅ}(mD;kƒVv—?tÝ+§xÙtè¸?ößË;ûq?,zâ~<ªE²°X^3,š4š¹‰±ýða}é·ßzƒãW¿}ã·^{ëí·~êp*®èÖ˜ûÕµF™ó«ç9o?
÷ç.\øÎ™”éËg¤îÒF%Å]Ý¥Å]/o­l-WsÖ–)hŠ±.i3IPI’k5íŒÛ‘ A€3e^»Ñh¶º«º;—T¬°&’l-UÎ6½õ&Q2×JYÊuèê‚î©¼ï>›;º›`am8éÍ¶ÜÒì‚™‚ÏÈ{¼›¸Wåožv¸ËfýêUBB&×{ÁÛeß}×?xIIg·Â*@#oz;›t8`â¯¾;Åï|ÖŽH³Ø¢qã+…·Qq¤•
PoW²R¼Â$¨û' h1[3÷'é*ŒÚ·GråÚÕo=óÌ3/>{ãòÅ§Ó‰ï/¿ùõ¯ýk_Ãæ.ˆ;?sá…›ìŽ‰urâŽ34ë›Ý¹‘ûé_KZ yÐA;bŸU@Ü74CÊ‹»xˆ	·Ë|˜Õ(³•88‚>;¯Ó²¶¸Æ:~âÄääø‘5ÖÝÐt9qÿððÌIÂô'Þ.ŠûÎ{;F7`\Œ‡\üØ])gÇ¬sv1ã¾ˆv Í±öãcIÇåìr¥Óc¸5JÛ‡örâ’ÎÃ?!Š»œºïóÍ³Ý6F<£ºÁRÔ„É3±ï00äûùÏ'~þó…·ß¶OùNùO¹¸ß+\%Rý¥«àíxÞâŽ½ý%¼˜ú3gžÆâ½2RqïR)h»Øùï×!kíòIyu×óÓîõx[DªE™ÁØ©lÞM¨AßU Ó0tÇÙvÎáU„9áD€£bå½Ýí&èFÊJ{±šeÝtÅšÍZÍ‚z­5“–b±Ée«•`ÎQé÷ÀèÔôè®Ã+I©àFL¢µšÙãV ¶U$+ßâ^¼5:Ó”u±‰üD·¿­#Ÿ¼II¯©î^ô©:¡ÖNS8œ|P`!Ò.žuŠd#,ò¦ªíƒwþÍ$w*Uí¦àÑN‰;övQÜ™|µé@ÛÄqöÆwÿé»ßÂâþì¿}Ö‰á—.¾úopâ.5w1,#tBî;ÔEÜïƒÿt÷GÒƒŠ¬¥*Ÿ™¼câ>®TÂ]{rüÈÁ#'NYÓ|#à¼Ô–ÅýÔðøøôÂi£)´·ËÜ7m”‘žLUŠ‘pphçÄÝÞmµ‡ÀÙCc¾ÐØƒ=xèAÇDÓ§ŽCz}°eq6ˆû¾Ðœ¶ÛÇŸ@Fø;bðá·æ9ôÈ>~æÔ)Pwÿ(‹”åÒ*ˆ;ÎÉ@©wÎÛŸ~úïþîL
º‹_Ü!qd»Èi²IÊœ¬nš!¬†pÊË´µ'ŠŒ
æºnkf™V$ö’ªxy‰ì¨9GÀ3¢z‚V#©²9:D!†’^Œ—ztÑB#ÑÉZð4™TCd$À¤ŠÑo¬õ&ºûHæ·\dtd;f«uOÞ÷X‡U½Nä¼ò	ôò-ÑÉR$d¿Ë„"]Jh*Ò»«iT(BÜË5Ä§©#57m¯¥ŠüA#½ÞÉÂë±d$×¦ézž†="5ÿ{¸U8¼¤¤¼‹â.À©ûŸ ï¿—aê‰Zm“ä¥kWÿöŸ°¸csÿáÅsx+õìëó7ß s—ˆ»`î0q;!yqÇ>~ŒwéÀ}MÜ	â~êäÀ®ñv``ia²·CK=¼Öõuö.ãíqkÒ¶®¡fÄ}túàðøäÔÂÔäÃÀ-Q™w÷SÓ'çNŸÑ±Hq~õ°Y$ z»òw)¬±ºq—hÿæ¸éìâá]ô9•5•|PmŽŒ9¶ðƒx9õØa@*ík|åœWu°vþï¿ÎGm0wø‰±’É£åm0#qÉˆÿÆuÂ‹«C«p®áMåÅý	~àŽ½&îO'œX¾ÎH½]šoç­r2‚¶‹î]¤½ç2HT+f“ÜWi³s¨1õrÁœ¡3íL¾I0xw%U¡HØÝí†ž£†y<•Ït­‰KÊæL“Åï¸G"m*_P©ZÛL tÃÒ¶ÂÀ]Môº†î>œ©¼u´#y‹íBk¯rùÝTÊ)›{QG²¸	‘
B½Ü¥T»uAª-²w«írbÙeŠè‰Î2Ñ388blÃÃË¨©D"—jX’pToª&-‘f®’§H+Óiw¨µ£$Î»ïŒ¸ƒ·ã™ûš¹3­Œs¶‹åÊê7¿yõÆå–˜ûåK89sñÕ¿üKÞÜù˜ûW%aPwaAÄ8Æû8pü%MÊ`qÖ‹;~Ë‰¥]äíÀàÂd/VÞËÀý2â.X;¨ô:q?ŽŠ`›Â‹®áV…„ûäÂRxj¸wqßïóÏ„µ¨/üòw¢¶¿sged{K¡÷îˆ¸ïó-êPÑzã¾1?l º¸Q÷ƒþ1*ÚOç…]Pwñ!ˆâþÐFq‚ÆÌÛ´ÑÜ]~¸µÏ·)mWg?¿vzé	aàþ4ˆûê…§®[¹Ã{; ·óÞ®„¸w?›ª/zîNZG–Q“bm×I*ÕÌ¨àj=ïæ¼ SåbÞŠ}ÀÚèº$â®R
-µ;á´är^}ª“J¢ÞqH’¨˜6ÿµz&‹P_q;A½Á¢»g­àˆÂ·T3ð9ŽyÞD€Øc’”®·	Æ‰P¤—KîÝ?”£Û&kÉž_¢Ñ]@¬\ 7™z3Ë¹ò]q¯y;«¥Rü›m¶Ú®¤¼Ž˜^o©yAÛb«NS°×Ct»n¶’êµI±#âQø#ˆ;ÓJy“,Ú&N·ÿà—Ï^º´rù™o=óâÅKÈyîìå¿ú«àÍÄ]4÷Ç%1w¾Í7wAÜïäÄ¸EÜHî"oŒ'{	º+"î ÑëÄ}ÊˆAszzvòÈŽ!B©ÌðäœÍ>Œ¯==ÜCTæ}ãSö……9£õ‡ß¿#"Ó(ÓûÉTåÓ%q×ˆ;A}c`.‚¶ûCþã‡Ã©ojØqÐ}_âþÑ-‹ûþ0ê[É‡:‡öâóûöÙuHaô—VÁÛ…F™—Ö‚2g®_êBO™/€µ îâÉTåÅ½ûÙTg¤æÀyË†E"î4!Ë@= ê4$¬IáÃK*3ã&˜þ†®šÀÍ¹â°,“üGÀF1OÔ½¸¬&–lò	N§“E½ÐÈTÆJUZV“i4(H¸ÓÄÎ¯¡»X™;Nån¥Rš øû.É¢²{‰™ÿÏÞÙÀ¶qžy~Ú•@´Vë8±6ˆÝì4­t´{>î]’Mî’Ýæ€M ×ìm7d³mzVwÄ£(@p,…3’(iöH"%J")Ö$[@-ñÛ"K
¸ÈX©ÀP"axy‹íwíÞÇó¾ÃÑp¤¡CI¤-Ëú92)Š”…$4zôÿÏÕ×/¡ü6N×´)LÝƒ(R‰WÉ¾Gµíñ	Î`"Ë±ºNÎÇC.ò-‰>\ÂŠ¶d&ãò¸b¡Ÿ]6BžLÐeG¾LŽc9ŒØY.À±åA»Áh44NÜUyÿ7Ë(âþí”ßiG{ÆvcVn~\BÈ|ó­·>o‡~™ßüèG`î î/‹»ÆÜ53w%æÕ2dÞ^F+î5¯äfú¦:·]«3ný)û‡üVÝÕ+ß9E\]wµO‹û×¾ÖòµsÀV«Œ{¼NÓµ´´jq¶ƒÂ»[æFÜóý“Ï<ƒÅ]ãí'FN^™²°O[¦——W»M¨Q@›ÌÞî¿k°¸ãc­{rö/iý,Am“QÅ]¦·§5„vSûüèåÑÙ¡ÞÞ+c½¦ºÜãwˆºWm]‘qŒrÃ½iqÿ¢*î[™wìí­³¦š¾²¨¥„¿Tsoj†uPp«[räúú»àíòÀýâŠÅN2f~x;4AÊÞ€µ+9ðv­¸+Ò¾Kqgt¦–ð©o/9AßUÌÉˆdÄ=í,›Oðô	Ÿl>gK‡9CÍ¤”Ø¼“Ø5iƒ,Ü¡øÂír²Ýl³ÙQø´A))‘•U#çŒSá`B¸_‚qü‡W\¤A½‚È—LLÔå)¯aš:â£Q’Þ6ÏÔ”=÷0TU•÷c«LÖÚ?æ!ÂcM‡¢‘Æ@8_ˆG½1§)XYJ)ä‘Ë»<éX&“ñø —Šy|68ücKƒ.³=)NâŒ îƒ{vféÆ‹ûw ¥ÇÜSiß~ÎtÝZñÅõ[£’Ùl»õÖ¯oØçæ'ýÓŸbsÿ+bî$æ^Î¹«1w%çN¨>qOq4â~L¡¯§K­“9´,íT÷²}?×j÷S@…¸ÿévqÎÊâ^·ûÊxw§åDË¸	™zZÓŽkã«Ó`íq‡µL“–™({œ^œ~èê_¾vÍíïãŸñÒ%5(³&ÈFµ
]i¸¸Wæôå_œgï…Œû,,@½¾<;,ë²vÌ~rÿâÞDÄ}x¢&s/utŽ5iè‚%Mõ¦d¿±N‚2ë¯’ Œœp¿xáÂ¦‘;h;¦š¸¿mß¸CØ\·6]âkz…“‰<Ã2V/40¢‘¡ØXäƒ¨,ŸA2i‘"°,ÍÒ””Av§ÕŽJJ‹‚ÍŒ>3x~L2ð© „r$#pÁ4'„2<u¿ƒè¡Ä
³všØ'¤â~Bé<}dîG`Œú“os¥AÇkž¸#KUµ"?UILÿÈªàA'%3Ú‰™£táƒ>Ž±ú|I¯7šKI´Ž&íð ›3
Æü1Ÿ-”•F°¹Ë1äˆ{=žÃ†{ªûw>ýô;•Ý2/‹!ó~Â{›ëßýÅ|Ö?úèÆ­[›‘ùÆ'ÿN¨‚ºcsÿ+9,£¤eþšsßfîÐå.'ež*íý›»êí[·_™è8 Ú®îÔžQuOÏÌV“/ÕÅ|¨rÄ~
PßWÅà_Ãùuè¾X§9¬i|©Ü}bÒ.“#3ÇÜøÒµmâþÍ‘™žÕÁñÉé™Å•Ž0÷+¤d¡5ÿº^ËÀ]?(âÞð¦Óüì•«{)‘QÅ]QwYÛUÎ¨4¤W¦­sppvlbêJ/HuoßØòøõeX™
[—¶srì NÅeôîK€g3Þ Zë¸0Û'ÇkzIn§u¶5 çÉÉ¬¯o‡ûÅbñâ…b1‚_éÌÁ5uõ°#'Ò®é“v[(ä­º¾¬í„Tß‰2,+JL€X¹¹]ä%šå!æ.ùcaòb@Ó[ç]}^†(#	¬@		qóÖ'ƒ‘þçáqú¬yŠÅ	Þ k@Ü¡òi¸ß/)z()ÙÒ	žãc8öL¤øxÚŒœ	I¨#(êhâ®\w"Ÿ¨‰¬Ô˜q’¥OUÀkGñú	š:Tð”t8hmÏ„b"–#Ä	ýd·ºœVg0šq%âi§?Îsk0ÒF#ÍâtŒdÜYF06VÜ¿Šµ][
Nîç@×Æ÷×7nÞÜÜøä“[7p
ó£ßügweæNrîª¹kK!ßßª–y/a‚NEÜ?|^Öw"èÏë‹;æÚuÓAwÒ3¢5wËêÒô)…†ˆ{KO½Ä}urÆ}n®¿„ÐÂ5÷RÏÈÜê’{‡¸CiÌÊÂàê
œA-X¦÷YhS{yû^› ‰·7tàN(uL5ZÜ{—QýéŸšZn=Ù;i™ÑËåáÞV â~?êò‚©Ö·ã³cÃðS¹±Ù±Þ¦¡Ë°À©þ”|·ÀÛðöwHNæâÛkÖ››DÓEðv9àÞ8qgzÃ-»Ï\Å£#¬\íHÉ?³e$>ÅQR<ÅÒ©üF“P€4«-îl€°Î;±­—ÐnðÙ±üGbñh¨,îR&Í1Ád˜º°ð•?¤ØÒ1ÚN~žŸ‰ˆRÔ©Ùh€æã<uÄ£6@Æ†<ÛÅÝ&P*9TÈÅé d4v¯¸W©¥ñ£CE¼Z}»-*„ù€$
p—õ»œI¢Éx ¼=™çâ™`\ÂëR9†6Ðä?\È:;ª‘âÚþU@#îLÂƒöŠçæ:œæqqý7ÞøäÖG>|Æë×¤Z†˜»r@U5÷­RÈ?Ó”BÂ&¨•QGîÃï2t×Šû±Jží7$m'Ì¥éÓ*“«ó‹î¯ê!îßk´âîX­“Çt_ƒäÍL'Bmã#s–g,=ÅÛ"î0rŸX]è¿Ôm*á±&Ô8ôÇíÿ¯†&Hý €HûÂèðWö'î_øÂî%î'Çæ»ë,­Ý=C`ÅàêWF§–—G‡¡R¦‰P³¸ÕÅ]ó`uâNZk†zºQm´wõÏO7]±,OY–óÍ¢ýÆ_(+Sß!îo^¸ðÚ…ÍÍbLÞtDr2•'S•œLýÄ×KÊ˜«Ö«;#¢¸yy«Çáa{ +Ql8,®p§¸]ÑÆ,¹/-I‚a‰ŸŸ§8o4çO0¡`…„»3ÈQ÷6›D-vòƒ(•‹p¬ˆºÌ¾tŽf¼šut\õ¤ò/É\uâ®ÍÎ0>t;ÇÀa'BÕ—/é'hX:TxõfI„ìéDŠ¡Ê©6¦ƒÑBXb$¯3õF”ðZÀ§R!–HRí0{'G†¨Š;M
/%ÛÄýå‚íÛÍu8É…'îÐ€üÆæG¸öÒóÑ¯ß"mîÊÈ½q‡°6wÜQ!îÖ îÀ¬r9ht¬XÔ¡»cÆ2©Š;øù>Åý{;Ä}n¥T§¯[÷K%Ômi™é™s¯L¶ì÷o:&W/uw´—ÐýàŸ·Ûõî¿°Aµ}`y¨¡âÞ\çDÓÊ^
ûIGg§zfá:6ê†‹;îÙ·‹v˜6ÓàPSßìDÏÔÔ`	5€ÒÇXÜ_}*eÊâæ¾V¼ðquãÅÛô‚2>Ý«pk:+Ò[,Ÿå,î‡ó3-J#âÞ­Ï™$rh¤Y–ÅÆvÇà¨l³Ærà<ÆPÙX¦î'tÞ‰n<ÎL¼²1²yãþ$æQehö(öþ(F[Ø¥íµíY½‚}\Ûž—’ÛÇ©*¹^Ûy¸ˆéÖ@ÚmÉPA2°R8À)ËD£q^d€pŽç8Q X×·‹\‡y	¸C\¦ntPŽ¶’ˆ»ßûië­õw7Ó0tsjep1ä›¿5L îa¥ZFoƒêûT)æ{ÿ~Éæ~ìçäpªVÜñÕ'Ž]7¡Gû%2twÈ¿yT¼JZæY…­kò¶TqWŽ§~“p¦]·r÷3îÉÕ®tÊ8s«×žQPkeÎpL.t™Úî‡¸·ÿö3õ}eTqG§½ßÒ»uÿâN´â~¿î¶¡ºÑÑ3Ü‹U}l¶§gôòPïUëÏwÛ‰¯+â®<ø9Í=Ï p¡VÔàïÄ‡v÷ï¶¯wtyjt A6uÜ××ËÞ~{ûkÅâkE©•!I™Ä}[¤¡
:}p\ÈWë+dÍ8K~‰•pXxp6š§¥ k ‡—pÔ]*x½~—Õ³å r‘«"2Ûß=±€‰'CáHT¤0tŠQ¸hƒ—¦êGŠnì(âãÙpÜ›†¶Š7ÇóE`™£«.ZUæ·ßÝÍ4Üé3”—––U‰)d¨J‚èpa£)-LÄŠl±D!ÅsB )¤R¹Í–EIâŽcXõÎhš”@Ò4·7VÜ »kÅýå”ßºgo·ÝZeý¦§e@Ü7ðÒ¥›Ÿüä‡¿øåßþ­bîš™»ºBUsÿ²‡©lîXÜŸÄ¿€—ÀÜ‰¸ƒ¶7aq×BáØ“=]èàQêZµLNNŸ~ÖíÆ2þ§_q¾î˜sƒ¹Ww Š¸kw§VŠûÈ’©^©‰ž‘–~\™l™\éqLNTŠ»ªî’qh<¿½{çÎmý ás‚2¿ktPF?p4´q¯¸­Š¸c×mf»Q½èœºÚ:|ylhj~~bŒXûþÅÐ÷/ÎO^!î½S»:ú½ÜÔ·<Ø¨ÿù WÜ×_Ùš·_\»ðZ$´¶––Åý/±¸W6¸ÿI¥µÿ`ânJŠÕlÓæŒ×eÍÁñ8¿¤°|8•“hI¤i\-æ91žñhfõž~µ‘xçÞcv´[Ìž4ÌÙ¿5’ó¦h
#ÆÒ•
Bç>#‚Ü­ÇGCÑB8âDÐdÁ‹ùD$/±dâ.°Ô,¹*rF@šÚÝÁQkÆMDýiUñõý<_¥ž3£ÃE‰ßYéŠòeÄ@>¡ÅÝ)ƒÀ1ŒÀÒË¤DB*/ŸX>Tgvh;\l/sgùÈ¾Š 3ÅWÖ76×ÿâU0÷õvðvØÃôÃŸüâ¿„¡;Ž¹+Í2€jîDÜ÷¿qWÌý¿¹ã˜;>žJÀÓö²¸ãœL¼Ì7B¥™ðÔ±c—WÚÑÁ£Ôqi``pò4:qwONº«wB–¯Õ îÏTˆûL	Õ‡NØ›jéB¦®A÷Èxçb‹cÎÑrîÄ9 2-C.Ë]&¹7–ÿqûNß—¾2|çög5¬L}ðAõç-—Ù;;†ïâŽ2–:Ñ6?Õ3>ßÙy©bt´]#î@Uq'×4·odð£››+Ä]¾ãI]q†¯£ÝÐ±<ÛßÕYBáã,îë?SÄ}Ó[|-+®eH%ËŸ/î íµ¤dô<×(°tÖ‰jÄî
…l®<C¹Ñ ŠçS´˜ñN?)œ
‡qi‰g˜ÉÈRU’{ß-¥dr8“ˆò…8W¸ÛâyI÷?ŽùÐÃŽ9–
G¼Ñ¬˜òº/–¢¹¼Âî4Ž3MÜaâH¥@mË¾Û9I{ÁÌUi›Ië¬k:LD¨JøLA²,E³“Iå‰`:JdE±s†UÛi–IÅÃ¬\Ì%	´ “÷:³CÛwˆ»ÀG263Ú;¥6óÍõw_ÀÛoÙpä î?üeYÜÕ‘û%âþŸÔ‘ûŽNH0ws?†c/Ý?$#wUÜ›·‰; ÷çGÚÑ¤­­ÍÔ¿4·MÜ-‹sõw%ã8êV±Ñ>î€Nøî¶~8’zm¥¦¾Ø–s
ZqÚ1iï@äŸ~[^kÔ:|çîg»Êüßû”QiëŸ½Ú q&êöevuµCà©cÁÒ-/5Š»~Ì]wòp¸TqqÇ\Þ]ÐËÔÝ^*¡aÛ|åg?+n¬C¥	¸û­¹×r™Üïšýk	]jN¦Îâ	Æë©]¢ã1d‹Jð™ðkºr…0W³øï~†/$BÉínžÌz3<9gÜKÀÝ’XžD¶šH4L£J„w:‚çð÷6I¢‡s:'Š…P„Â!+²z†@Ð™`pÃÈ0‰*–É:•¬Œ
çC{$§õ×*	w£6‚šÈŒÙâ)J8ŽOås‘D< %íFYÜ¬Àˆ¬¼„½ÝÀ…³–biªaâ.[ûqgÂ‰ýh»—yÔýû7­%dÝ|ã0÷ÿD6wå€êOå°ŒÖÜÿc¥¹ÿ[ sžÅ`'QX¬OFîÇ›evˆûq|ÿYXýs0iëœ!QÅ¼Ó35MÜá!À³ª¸c“WÅ,a*OÁ'/¡:aê9qn¤ÇÔÖ}©gdzaÜ1½2?ç_uÄ._:ñôô%Ô8 Kæ³;_(ç¿[ûÊ™?(Ð Œ•º~¹µâN¦Ù–î¶ú|‘ð™.Z®\m½Ú»[qN½îÙ\!îð¦÷3˜íâÞ®Oè]90a7ßMX™º¶þAù`ê›1{âüF&òB;plíÏ†‰;É¯ ±³ñ$òùEŠ³a–ÍÆ|™0ÞÏ-Q¸ŸŒ’BÖ’fWÐ—É¸(+íÞÛÓþB<“ÇSÙD˜ÆS}%T*	Ñù€ÎºÐC5*áØ,e`ò~›Ù„ñHOà*”ÀpT2ó¨á­Ö’Ñv5òuÐW Såtè°±”O[ý)Ž¥Y‘ç|8œJñ¢ œøÇ=],\`ogÅTž‡÷ ŸçŒTØÒöíÕ2ŸçE1­ƒ¶“©{zýÕ›Û¸¿æ®„eÞÚÑ	ù÷8,CÄ]Ý úgØÜßÿ}å€*™¹c°¹?ö@ÌýØSOdq?F´½IUùc}–kî%Óêœ2?ÇœÒÍ·+WÔµ?uJ³@• æ¦]/oMŸì3¸OL¶XV–Üçªð40Ò¸
÷ÒÿüÃí»wzUy½:t÷öTsßýÊT ÝOÚº¯_¾Zq‡¤ûIÂYE‰ÏöÖ+Uê„&™+PÏØÛÜúF»Èœ=)£'îøžÍ¨âN8{V¾»*îäóœ$âN¨h‰êƒœûÁ ”ÜÀ+S±¸“B™ 'q¾Ì½@¶ìg°¸«îõwCíIk(²Ú39 à…–‚%O$\ÇüE^‚:ŸÉìtyâø%‰ÙKDÒœôú½ik<â‡ü°1@‹1+)÷ õ``6ô°Sò¥ã"	´¹|Èiw†
0í£EN‘lÜ‘º?Z„ªùµWqùýgY\†*÷’6AãB‡ü–·Gmä'\¢$p@äš*c0ÒŒˆÅ]°Ø§
a†TPo¤„’‘Ñ¨;ŠÁúÖPÚS¯Wþ¶ö4h{Élþx:!‰¸sWÃ2?UšeªÜr›;1÷ŸãBwbî/=ýtÙÜ¿êŽåX=IÎ Olq€ÍuLÌ•c/Ø½aŠîžsŸV‘'ëÝŠH­»+æ®Ð‚KÜÛP}˜>qÂ½jBòÙÔÅ9Èã_ƒ?@e‡¹O6bT
+î»ÿñöí»c½'5Ûêþ4Þ^óê¥ºÿâNÔ}y¨<uWŸþF=—ªsLU#îgeZ	$8Ž-þí®Ës·ûºetlhl¸¹µùx³æ`©fR®º;¾í9BåPñö²»?w’|• 1}ÅÚ	Xøã?®tC5õN”™»çÖ¼S,¾M*Ü_»´Åß+†rßŠÛ”‰»pWeþ´xûw0_-S]ÛUsL´æ¤L:‰Ù­q†RÁ oÈ[Q&/œEq‰tÒjÖSïXLÂ-bí%(ã’Ál(	&ÜcÃÒq»-ò$X®Cô—ÐÃ-Ä¢X>êò8c!hçSY‰XÜÒ+>îè°ê#*î®u3vFçî»ÄÆQ’H!ª3Ï?døo¸bY/œHËrœ@*wÙÒöx£Àqp^ä¢VAÂ=îôöuîŸÆ=ù|¨ž”¬ÉäÇ™Í×_›ûŠ¹ËÍ2 î?Ò5w½˜;©–!æIw"î 6÷õå/¹ª¸}S—ìÌ½kuæY,îØÐÁ¾OÏÍ¸O»Ýzâ®‡Ú7÷S³2j3äL?ª¦‰÷57)×˜s,-]s¸GN´TšûŽ¡ûL'„:ê;v‡âÑ;wÆ®i»–ÖaËíÏjh”ùß6(£Ò>05ÜZ/qoRÄ½ùê™ÞÁ:äÛ&,°ƒt¶·Dæà÷WÜŠ¸Ã-S&t °ßüàíõâä&È×B>ïùb&ñ­‚µ~âÎ2¬¡š‡šký×›‡™º3O	a¯Ó+0^»Ç›ÁÇ0E³Îj3s4SN´kJ®hB
ÀÞÏXÄLÑ&HÛý!Ü):xÒ‰°HÌœæã¡´Í0… TæKedY‘çñ<s4v$ÅÝ.j.)Sø}6zT•@Œ‹:äw5+ÃäàI†Ïž²,Ã°ÛŸÀŸqqŒåDQ$ÛTY<{DQ06ÊÚáÕ…Iøñj·±±ŽËÜå™ûÁÜ‰¸kÃ2ä€*w0wEÜ•NÈ÷·¨~ø<÷cdâN¼ý1¼	bïª¸Ë½sŠ4à‹_MÁÖ Šieæ”,îÏqŸvÃÁÎ™9‡*î@â‘w ,îå‹ÇR½býÓ×z,#¼6uÐ1Ó¿:×âv;¾{â^â>ÒÓ9o™œ¨gÐ¡Ô9;|†ØA#îàµ}Ð0óÙ¿ÔØ(£z;ÝJóSCWï]©½®w½“ðŠÜ…~æêxÚíýË³£—Ggg¯lÚe…–Í[n­¸£'Ö®>@‹,ýòƒÉC´âŽ?o¼ý)ù‰LÄ½ÊéçKè `¾óƒwŠk0p8µ'×ŠÉÐE'‰ÊüûÊ€û·¿-{ûËDÛqÿü"HÒS K ƒjÃÍæbväÌÃÑ¤µ€×¹âþP*ãÑã«~Wïä!ßÜ2¹LÆŒCþi±À&ÌIÞ“6î2£Ã€'Ì•wi±|<æIÇó	hàH´”B`¹H(/PG<‚âŽò:IôÔ>Íx»~¼ö#)t(É–Ÿid™U]EÞŒj0oç’ àš ¿	´v¸ØŽ ò©HÚŽö…ÇêJÇb™4ìõ°—àÝäÍÍâÆ&©„s}+-çS5Õ2$æNÌ«»s'æ¼Ã2ÄÜAÜ.‹ûc$+#‹ûã²¸—_ê‰5¨âNfî×Ü'Üå‰;¬bÂoËêêêÒô®ÅýÙâ>7X¯ÐÓ crpòÜ$ˆ{ÇâÈD×„Û=9í8qOqÚ1í~é¥‘	ª¥ßÝ¶œ©dçR¢¡;P1ÞþÙ½eÄÀPjïŸêÛ‡¸«êŽ½ÄÐºlÚo‚ëúòüõÑ¡>­€7aÀµ5œ¬w qZkwÙÜÉc.Œo¼áÌÎÛå“©àíç#g±˜®‘Lžˆ{Å´}OâNj¨f¡6Tv8³¡R,À$’6?'„ÌæX$‰;s”USY_H¤¸x4ê·¡]cwe¼L8íÄBþX–åD^2ð.Ë&ƒÔ'éT¬Á<KaHØ)˜gDŽÆßä	5ˆÙCñˆà­º¡?‚V–ÚOZÆ*QZüH!qøî@šTÃðºêáo¥ë—»s,ige9IR¿Û ÈTrEÔgùÓÎ}Iµ'£Åµâf(ít:]épssý šeˆ¹q—ÍÎ§þÄÌ]í„”Ã2êÌ]5w%-#P}Ì]¹Oª¸ctÄîé>°æ~ÉrZÞšê˜±Ì€Ÿž^Zé0ÍÏhÄýóÐ÷éT rrñÚ9K7BÝ33ÝÝ“'f–&IV¦º¸/Žñ®öR[ÛþŒÉüö³»cÍZq×cø.Ýk¸?`oWy¨âNÀ|Øw´ÄÔÝ½2
Ãöã½Ç›¶™wãÄý¹âÈ9‹Ü ¬¸Â´{ûù„'Û—Òkk"îdÜ¾Oqö;p÷„rA;Þeà¢6kžâÓ8žÌ!µÂUÛ$,qÚ­´{l™`^Zó¼7æ1bÄ[`ÙhÉžtYSÔƒ%gE‡uA=-¥²(šaÈÍGÍîQ­dVÀÙÕ”öžO¨&9JKJ÷rè ”'VugUqçò¾Àà¼MÓ††Y»‚AEÈmh”\ÙµxÐåHžws£¸¶V\åwÞùˆ;6÷Ê‘ûñÈ}ÇU²†Icîÿ 1wm)äÏ‰¹?þ¯Ÿ|ì±ÇTq?¦Q„åÃË]è€Ò>`q|ý4œJuXÆç@ÀOÏYÚM+=ÓDÜkswöÊ~YÜ¿Ñ–úpiæœìx›SÿÌ8¤eÜãbí-
Ï zâþ˜cq|ae¾Û´ww7Í÷L-Þ½kÞ&;î_!æn¹{ûÀeTÚWÆ®Ên®*:¹üÆ7 ÿ£÷?¾¤PY©ìQm½Ú
7Ìvµµ•öãí+×/7Oõ>¥yZÉAvJÌ^ÀëI»âàJ«ÌNq'.ÿ1‚¦ˆfl¡=x|·.þ |2uíÂ{Q{pm-æ*¾à/áŒ»âí˜?ÑwmŸŒTè»ÕméL4‚aIžž g(XKÉH0wFé{´û…xÆe7›Ñî1;3	–·ºòñ Õš£x&÷’+‰B,õ`aðž©C‚+L)h<Ý¨;ŽÊÞ+Í¼”ÓÅìH¨|¨FüFJ‹°¥†F'Asñãs¦êÌ@m‡lE5Ðøh*Ã°FV
ˆœ(
†FG­²†‰‹'Ñ®±›5ïÙBçqÖÓ‹×.¼yáâEXSòÁŠ¹+#w0÷dä®–‘Ó2ÊÈ]{@õHµÌ`îÇÈ& VqolG”¶K‹îéžÕ‰™™Á•ÉS$ú2³Ôo2XN«â~ŠP]Üe´«˜Ü«íu÷çžq¿„:zÜã––ž®þ™µˆ;ðô¯®¹¯X–»ö¨‘ÿ¸8LÆ®ðÜ[Ü	}—ïþþ_ªy»Ú(sîdÓÔ°zþt×âNÐŠû•©ë]û÷ÎÙ±±¾&ŒæI¥#îåJ-÷wÂ®Å½il¡„8¥ ÜIÂ½-‚¸§×Þó»ŠßòÚ! "î÷?&Er¤<l¯AÜ÷×)cña|2ù¼Ú¬à5C;dÐëw¦îµÕÂ½ç›}/âîòæ¥„ÇŒ¹ì™ %F"EÎDTóN¢C‚Ù_éh÷vOqGæ~HÉU_”Ä#»DmCŠ¡Z°áOW­Â=¥Ù9”øÊ û­±*Ór‘;Mb@p$É4(Ø¾“²·G­hW˜­I—Í\iíI|í…„%#kðª†·“`s›;ˆ»ÖÜå°Œr@õ¯ËTÿF	ËTÝ 
È¥ÇÊæ®@Ž§Â½†íÑ7»Òµ×¡oãÕmii¡£cÞËH!íŽqO Rç¢jî²“Wµ÷S[lÝí»ß­[§ê\t·œhÁ­2s-K«sîyˆ¹×$îäâ15=625ÐÝÝÙÝ¾Ë%Uý=COTšœUÐwÂ7 ø­Ò(s ƒ2*ãÃØÄ¿©Tw`{«Œ*øpE+î
­Í­g®ô£}ÐmVž@Ûëd4ÔjíZq/ÿ‡¬ØœZ^¼D¬ˆ{3 Š{ÓØ%ôÀ)¹Šo¾I’2=92;‹/x]Y<q÷Dÿœh;wÍÁTÐvMŸŒB5ißW§Œ-ÁÐ?Ø·5Ke3kÁÈùÁÛ½¡x2ÃÝKb}é´Ïl¶ûJh÷”Òùœ?™Lzð!JÖÈŠTØeö§Ò^–zðÄ=èP`FÖlÍ=VJñ¹Â5E6²¨’UIÉ8©œ5Œš¹{s"”	^¢Û4™Ò"§ÍY†A†cX˜‹7*!£/îF1jÛÕxÅÆ¬võOÒŸÈ¯}k=éÂù÷ÎcsôÍýuu“¶ZFÝ ZÕÜ•:w%,S³¸~5º<>`B’¶îÿÏÞùþ&rçyžžuÇ›i{&IÇ‰â<˜™MK;I3¥Óî]ßÜlKi­´Ê®ÆNº9éNºìOqÄSÈHØ`»$Û”¡ IWq»Â†£1¿ÛÐÆÉÒÈîÑÌƒ(ÒjµÒ·ö/XÝ§
ÊEA16mû5Ýã:mãæåïïû³B«^
$CÎz1äûï‡th!éüVâ®ÃÆ,Ã‰µ‰Df±¡gÛ§ßœI¼Ù»¸ïÏ6ƒë›%ê%«1,ÂâÎ•÷Æ$ô î`îŽõ]Yù×ßýuçÕK£#îHó|Ë~^q‡W;‰ûÍ)‡yõzÑ¼wžw€¸·ˆû˜^ƒ.+Åyûqõ„a¸h;Vy˜.WŽi.Rþ¨EÜßé_Üû¸ceÊÅëyÉå* m¡2‹F+¹bË»©ê„."#ýŽ‚i-–¦"V*æ†µªÊE–\®Tì¶ðåÕ¹GÐ%€µJ)·¢gL¶º¸»ñë¦ÈËE5£µÉ^–íc%Y6.?Þ—ÎÐå%"É9ùÜÁÜ¡åÝhü	“q~ÖÞíb“êÝÛ‰höî•%Ú^JŸ<|üÅƒj)‚Ê'_>üòÞ	de>—ÌÜÅ´ŒX-ó·Û–‘¤eÄjH¹ƒºƒ¸‹¥s¿}^qì«O–•h$aÕyÑcû¹nçûwüI¦düwú÷iý";q_ö¯ù'üúepº]}(\s&œožCÜá•z¦	xãÙÎžN©?Ô,/©Y%+ßo¿÷Üúë¤m„]Ä]äÆ†Þüû¯… ÌÈz; í2ö‰;×åî8P²ýö“îðãö‹w@NÜí,ºhØÂ	ÌÛóDþääËYj_RQÈ¹ƒ1ç>¦¸«`\Ö+F¥1xIÅi¡S1S
Hbx¬TðŸuRî}åá$òŒÆüP8™Š+j$*U£”MÑ9.#ú’PÅ£t	À¨b¬Wqç‚s¾t
W\óª3Þž‡‘„gQF.p—òvéº•¶ŠVß–´¿Ì0
 ë9èºÉ¤šS©†yUž¹oL¾ZÖŠz‚õ¦]ïãù²E+ÑöøãÇ™ˆ…>yøðá½?²'Ÿ÷ î¢¹‹Õ2Rq—Ö¹óâæÎPý)ˆ;ð– r¿) /pcg(Jµš7¸ùƒàû°@5òßy?x ÔlûÁÁoïUÜg9î„4Jv Z¹ý§Nÿ›‰ŒŽÝÍìÎÙDÎÒNHÅ]Tw‘_òçˆ?ýôÓ·€OŸ™·=‹KóÖzÀã9XŒqiQ#<áÑo8^Ø…mù2âæÞÞ]Ü'¡ÛýÆÆ¿}-ÜGîdª4ž2 q‡˜;—²«F} ÛÛÙ“Ò]ÜÇÎ)îc@»¸µ‰ûmAÜO¯6µµ4úô‡ããŸ§éêÉç«^„UŽ)êØUBˆ¨ˆ2 íƒŽÊØ(+êo”;ŽiIÂ]Õ8'h£±âJYÓ_AÃÀŠeB«-Ñ˜6³¹}¹š	/£G¨lxI˜ð<†^}¬åb?‡ßTñ|ü:-óÊÓ¼PÙF"ÙTŒM¶(RäPþÇØBÞ§¡ØÑÛ}Zt©ñµ˜´¢^Ø‡Q!ÃÓõ#lñZ¾A=)U~õŽï*‘MÚn)çã_<:ÎEËLå$Ÿ;¾ûV€“lôX*î¼¹ƒ¸‹1÷º¸KÃ2ÿ]&ææ.6Ëðâ.”BÞ‚.÷:§âþÕÍ©ÄXy®C#
Ë²uu2¿Ï5C&õ	(†<Ò‚ý‰ût"h^„Û„·„œáÐ›þ#åB2£Y0‡fg“žLÐß·¸úÆ‹ðúx×‹g;žEµZ·¼»¿µX6Ì«u†í'«79º‰ûÙ÷IwÀ¡ÿý¿üþ_F5(#²¸³1˜‰{cAÒÖ:7ózÐö‹w@FÜ§Ö.ºÔ•0''?‡Ê¬8ÒcAÞÊÝ““»Ü4¼²¸“`µgê]–ñ"+éÍÃ]©j›K“)Ó!M•1—/‹†B¤L"¨,|6Š©b•q)ª$*Ð…\g_œ3¹_f}¡;uÌ]K05¼åÃ}îë°Ìew†$v˜„S
YÜ‡TC"/ŠuåXå‹ ]nÊ­:­yÇp´ý¬ÁÓÞHÏ…_iŸ±˜¦	’mþ;å‚&œ‹ÚÕ»<¸{÷˜²X˜ãÏFÊÔ]ì„l6waƒê“˜»\X¦-æ^Ÿ¹ƒ¹7ó0u
Ÿ¥˜jn•©c_,ŽêU±2ÔÛ¯O†a¿R"s¼óÈ´ÑÚ%ÌÎdÀlÞS£ É¼	â¾–È,evçAçÚ®z9Ø>qçé`îœºôÑGŸï6 ™wcs?°³µáxï½Ï6õóú‹ï‹_À6qÀøZU½0ÜÉÕ••õûÝ×œ·[tä5ÊHÑyVšÄ]Š4 /G
Ü¨ÓX¢
¿¹O„CpÞ;úâæª Ö"‚µË2&OGqoþàmAÜëÝïõ›ã¿UEÆ¤¬èÕè‚)ü¿ãÏï}ùùñ—Á¥ÉÔÝ/? G¶F}§Þ.6ÊÈ4¸÷•‰G±Ëb^²»DkÉ(c±D9_FDîÐ+.[Š(XœÑË'ËI³(KÓµTÎíŽ"’.Ó¾®ÏÑ%å·W]0ºŸ©ªë‰û«Ž4e]BˆN-0Ñ.­C‡¹<ÅPéT-Žw,C9<õö¬ªm	Ôe§¦è>sFƒÌYÖ®²Åb±Ã²õ™M×jŒ—l¾B„ â?þñÇáù,MåŽÔÅ=ÅTïÝ«›û_¸ƒ¹‹a™¦ªÿõÔÜ;•B‚¹‹˜¤{˜êÕ2joV÷[râæÞÂmûÆ“}a”ÕÊ!N¿3ös½ìPï>ýÁôûÎ;­â^³³¸?ËÂNó@<Gyôæ„Óÿ,‘g2Ð|œM,©žMHyS”wQÜEâÞv~ÿÆ‹7ø/"‡ÃÎWžŠ»Ì¸€/n]ÜÁQÏ€÷\ûºùàëÿøßì.“’;”ûSµ]@¼Œû0¸ aì‚¸?µó5éßùÎÛßÙðhPï°hasLPq^©/î€TÜ¥7Ò.î-W¼mß¿è™»åàí_Þ»÷ð˜[sÄCPŠ eÄ½iÚ.ÌÛgï¯	²¾ßÃW¥#\¥ûÑTŒ`Ê,A•èœ7íNY².¼Vˆ`ñ8††„6¢e•*FVãQªXñ)Š^Tâî£˜»]¼ÑÃk¿‚ÌÍuY„Z”ÙI$Pv«>¦Î?TÐ¥‡4}Ä.">tÅ˜Ê0+ê«—©¦Ë˜V:‚gá¡
¯T}ðcüÁãÇ_|Á™û—ÇÇ÷ÂÃÚ=aäð#w0÷æ´Ìß õª‚¸ÿætÓ_·‹»ÔÜá€ê?ÿfî}ˆ;àX]Ùv™ÑEmðdæ`3Âœ=¡‡7Ï%îÓÁÝäÿî ,‡]Hr‡PkÐšH˜ÃÎäîvxv¢•þÅý§u„=÷‚¸CW¦Î'îÀÓ'Ï§ûÝò²n4î€aóâˆâ.÷I¹óóõ…süÙfóæØXÓgûíC÷±qºˆ;\øÞ¾](êçÐœu||÷¤ oÑ îÇ|ä#yqÿ¬'qŸë>kQá.7tBDÈh×s–ÖhºÀä½Zš"èAC¬Ï¢Ò¡2øQU•DÃƒŒæKˆHQÑZÑ¥²EYŒÉF}ŠQÂT¥It)ð¦mŠk®ÒgMò¨ëÈÝ…NÁ\Š¾a:”#>t Ûäzˆ“öÞnüÐ‹z‡,å+”—mKÛÝ¿ÿãG9oéðã`îüÌbî ˆ;×å.ˆûÿqmÅý/wÎÜÿ‡ô€*ˆ»¼¹ÿ—6s‡™»èíg‰»d%“cÓ£C£«™×-,oaÖÞ t´è	ÂqÐz<¦IÜåq÷ï‚³ƒ)ÐSî:ßä–¤:C™%óLb{7Êèý³ƒwQÝÏ÷)Žs‹;pÃ±ù|‚2‘Èhz;b—6Ÿö+î"“§Ÿ“sÄÜ5Oþ|jÊS?¬3Jâ¬zÐ…¢¤!%Ã‰{ÅËgN?æê­þ-Ä}NÕ]ÜÝñ¢jQ¹ÒµÚ¨PåJŠôRYŒŽB™Œ[Q³ :®ð•ÈÎDÐ0`#-øA´¬Õz½DºZÅŒ-ÓÙâÜˆ™F—ƒ|iUŠk®’î’j¡ÖqÎæý—$+ž$˜0t¨ßÜçÆá½Þn<9×>kªÊ`’ÁÓöO>ùäþ}<M0.ˆË wk©ðvwÎÜ¹6w¨„sçÜý‚¹7-PýóÿÌ!š;ÌÜÿAls—TËüEËÌhÄÜys—Ü%âþÕG'q¿ýÓuÈÿŽ4¬R³döÃöÓ™ f^¹xH&Z'îmÌÖ™Ö/ì%Ö2ì@TÅ³Nînïé‚~f7âîœ‘ROËü‰€Œ¸CÊ½›¸‹œ9qÅèEÜEVŸìÂÀ]gý÷…åEÍÈ‰;bO&Ï%îð±uqçŸÒØ«jß_T£Þ8Æ†(î²_Bn˜ß&î@wq¿½²„.¾ó¸›â†ßdþ‹Ç|~ºoLýdâîr©TUY±Ñ,êSÌ2¾(ËÔÊ–R)ísÅb4IWcªX™®«‘,x­YÊ%ÒbAt•Ê™l‹e½”qôê¯	t9€¹Yª»v÷+‹ER,& oöÑ¾â25òô¶ÛË¡JèJÀâŠáåÜÇÇÏ!í€/íE=¡å‹Nà%V*‘ÍÚ^ m?áøä¾1^Ä!ç3w…y«õ´¨ûC~æÎÇÜÁÝ!åÞå€*ß	Ù¾‡Iw!æ.ÌÜEs÷§ zàí¢»KBÆ*ìúE4ê(fÿÇôÚ4·ûêV2~QÛe™©3>XÎNgT9;±Ê,ª•HwäQë’ÓþmOpvFÂ/ ˜¸‹£wðv©¸oÀÔ½•·D$c÷Û oîÂðæTõ5L“€¤\¥›ÅO­ê÷æaÞ¾¼)5xûˆ±¼Õ$åÂËÎâª. x?§îŽ•€®§»ÚöêÍïÙí7›ÄZ,Ž•›C^â…—²u2"òÚï¯ÛvÂÛët°dôø!(Ž³ZÐøq–åþ‘p0•¯p¯K»X(Ã#h»LR¦»¸Ã27…²î®AuKµBW12/cuˆ»â”µ³¹bµhŠ¶¢áà¥	+÷ P.•¼…\šŽ»¢$™-”â£·pßTÅÐ%Ájñfs±ë°ûEeA-0ãéüåóbŒ"l{0‹FWB¦_} üð¾ê<çóm¹’õB„$#,ÒF¬­k9ÈUmç‘û}Ðv˜¸»R%d¥O·Š»—‘š;¨ûi›;¿AõŸÄ™»¬¹ÿ'qæÞwÞÜæÞŸ¸ŽE8¬!^›˜™q†õ!’ÓC²7q_K.e¦gœGh °Ká‰µðÑ’AÆ AÿLx÷ 8ýJŠ;ðtEïYøwÍþÓÉ•íêÝÍ§wÀñä@sæŸ©Þ]ûêæ˜ý«±—*îc}‰û­[%ºHJ'œ¸çêXvU-ˆ#ëOÜEºt	ç¶(YU¤»øw„ñÅ+.ÆJ»*^";ýðš¥MîâažZ¾›,”,Üt‡Ä
å•£Ó®¨ÙBÞ­=Üi]´–lÊeT\ske²¨•¸¢óÌ¥qÅ¹;˜Ø”\öýÊpÖø8Ü€PÓ»µ—#¨X„Ñ_×nˆWÐÂo6·Á³Àïm÷ëâ|Ë•ÉH!ü MÜ…6wNÝ[¨Šæ.™¹ó{˜Dsÿµ`îâÌÄ]¨–ùí/ßÅ½aîÒ§ðÛŸ¬?u lQuuguËIÿì/œÉex™\Ò)ÑRP÷ŽNâîšC0v_@`>9;áLzÏ£™×Ïø3GIÿŒÎÛžÄý#žúk-Þþ]IÔ½EþÚ }äK!¥âÎÓUÝ!ë®³în½îØÜ6¨Ñh¡4ì¯JÚÚáõ†º‹ïiOË´¿ûô)†³<waçÉÖMþX*Ô2òQ•?lÚ‹*zz[¡»´×½þ½ÕöÝ7p·'ôÓ÷®¬:Ö=ó,º0"7q¿×ÈŒcÕ
8ˆ¸oçV¦
=mýíãè¾AW)|4›˜.â^Ž™|¾8Ã¸b”…qÃ„;oÅŠs±jž.‘Ã²GoÉ"¬a²Qš)æ-+ŒªÚG/Ëac¬èò %LÜ}˜¹‚P¨¬õ~ yrŽ¤lŠž9,!²ë*{;˜¹sO¬ò¿Îwuc­Ç¡‹–ÕÒ©U°rÞhÕÖßGzËQ†¢ Xg|ç?ø^IU}ðÅçÜc9Ú‹•ó®/Äó©¢ºKªeþL¹7:!¹f™.{˜~-_-Ófî·€¦‰»¸ÉEž†Øá„ê+0tÏ„Á%´`'·÷4ÈÀåÜ	!bþÁ´`ìfýþÙ™Yó@:e–B”Ñë!t±Ô–BI¸ùVúw¸ÊMÝáuaàÞQÜNâô.îÀ”C¿¤]Ø±¿nßÚ_uWÎÏ«&àw q¶vçQ'tËžÀº:7Ðõ¹O1¯í¢¬sËœzw oq/¸ÝþB‡cucG.Kþ—”)³&—¼·ñÇåÛ[Åý{ƒwØ¬=§)E¼€:BæMx­âŠÙT®,Q7ÇÝŒ–±ÅòQÂAÃk¬‰XH’ð¹JEJ…BE–ðý²˜ëñÑÔGaèò@z½^¦æº>©zæ«kgu  Æ¬ä¾’Æ{Ôö2°ädf¸R¤úÞA!²CÈæükVñ*mA=caòYÌÚ¼X+š¯¹|8ns›ÀÚe«EËtÿ	oîÆ
ÑªëÑÇõf™†»?ÄRHq“P.#ŽÜù™{÷ªÍ‹˜þWÝÜÿN¨–ù%·2µqç/^ÙŸG#nÙœyÔ°Ô2f¬î@Ò›ƒsž†Š™vqŸ†ýáàÁ@„r91±æôûõ‹¬ò ˜ÜÛö;3ÄÌ«,îÀäÔÊþ‚n{Åaºµo`GAÜë²X¤1;)îöÕõmù;ºf{}cÕÁY» î‚Š÷%îcœ·WÜí·n¿wëÅ‹žÔ¥<ÜT½Ru%ÓFðö¡ˆûœ
.u§½©b·Í×x‘ªÚàQÂÆÆc1•‹ÀŠã)"Â¢aÁ,ÖÆqÉ‚ÅK€EF#+aP9®z‰÷qS¯˜î²è’€QÚBd™êuÚýÒ#­4±iQí–²¢&"ÑøÙßÕ°RÆkoG¨*?=ï¹œÿ`øun|¹ó”È°Y1L+)q¯øŒß|øÙÏ>oG±BºÞü8–&0ºÆ5¡}êæÞ&îŸwwi³LÃÜÿÌ]Ë´mPm¤e /TsÄOË4ºcº=Ý.JÅF`žE£Ê~ ƒ—:OÈÜÕ ç öû×¸Ñº$½§s6X4h#î!(%ç‘n;û\?BÓÓw>ç^O»¿<q‡xºX>xx²útswžz1ì{tj5h»aÞ°³:8qÞæra¨Vm0;xÍÅ]ªâ`ì°Ô´YÜÄÑQÜó‰;Ð³¸ñ8ïÁse[++bî¢¸skSë°ZÄaIÝï,î¯}Kq+u•°t×.HÆ¨Š×â°ÝÞÏçÜ&ŸÍE¥b1«ECC[ 1\¤ÃèxÊ‚,tÁ›3qWâ¨pè¨zï›ðZI‹.ÖrÜXËSQ:š/âð	¸æ23'¿U$Þv_I(äcŠÎ¸›ª§´ò{tå7wøÕCmŒ¢_\ùsý+åeIÀ¢üxÜ~öÍgŸýÀ˜ó¢rÅMð…CjžLÃ®o9qsî¢¹K7¨Šæa™úÌý7ÝÌ]¬sç;!3÷7æÞ÷›=ˆ»X¹²oP¢‘G©Ñ©¹‚ÈE8šÚ^@JÝ´º‡B	ÿÚìÚZ»¸Ïú¡°qP?’¨`ÀÍ î»zØãê?`—‚ÎÖ?fþÒ=ªP)/î5º áüdëÜêµ-ÚÞ·¸OrÜxºµm0<_Ÿ¼±±³Æ|Á°fqyA©9ØØº!júÂ+À¹ÅøáÔŠyQÉŠG–Õ<__qLñÔ{Osí¢·ŸÂ¿Þ®ßØ¦ þRî¥È‡p#üíÝ¼Ý.îö î7Ç¦Î(¿Å­Õ[ÝÜXÝeÑÅ`ÉARæ¤Ä¶¾wHâÀ¥°}‰ 
]þÊ$…«Œn_ÑgŠæâ0‚v§ÈH–öZÑð (šld”Ð",Ï"+M•)\šóy)5×s=.	­õr¸»–¨˜T*w<MÓLª»ÎÌ\b¤A‹jÇ*£ÚÅ’UÞ¸Ü÷O,×œÊ ŸB]ARÇégÛûÃVaÔ;,	Û”¿‰•¥2)ü5€×öŸ8!©ÌÝõÎOlüh8“Å‹ûÇœ¸M1÷{B'dÃÜTAÝÅó©‚¹ÿ“`î¿i2÷Ž+T…ª|)ä[Ç“LûZ
¡–~™ÕzE€6HOÐ™Ðöæ‘r1J!03!ìAšmw§?	š†‚.ôl‡CAšÕ,&LóÛáµ™_48÷¸V ‹¸‹Êÿÿ)¤_¦KVæ& ˜»¤öºex&¥ât³öúun8žì¬;^@á5,ºh”{óJÝó­Ç¤¨à$"/î@go¯›7ÌÉ·¶wwçá^Á*•JõÒöÎª´0FwJàE¾q‹§Z?%Pw@¾Ç½¥UfJ¤÷íMB nukõæÊæÊæº¼•»Ä»˜!µ	ÞÎi»ôpª¤Á]Ž³–tà9ajA,ü²”£5÷ø\•ñb>gÃ]9¯¶L[ÐÁÒiq°ÃõÐñ4	2ŸºTqW½t­éŽ1EGK‘K í¤×B¤ª¹¢mÎ]ø*•ÃM¦9Å5W +ãB2`rÙ–Jµ)ÐéZ<f³+V©¬5áÍÛä²„®$ùnv>Xk7ÅÓe²L¥Š>Ü•+°M_àtÜÄi;oí\T&*DŽ§‚·ã‡ŒWKÐY*&w¹·WËüœßÃô`îÖ0wPw¡Í]4w÷ö™û¯åÍ]ZçÞQÜù×;‹;hÀ¶½(Õš…]=„U’™]Tº‡ƒs„}‚gâ1§÷5§yi^‰»¤Ï,…ýáeHÙÃAÙ÷ÁŒ9äœ>CÜáÕ!ˆ;0XqìŽ§S¯¿n_yXu‡¹J¤ÑOþ±}r°âæ§:7á(îr ØY±Ûßþ–âþ!xûEˆ»cýÉŠc}gk_.–÷ã2jÁ
›èåÅýµo)î&›ºÑ¹^/¶ÍÜ¬Âkt:›Æãn£É9UÆçJˆÈÓÃÔÓUldwÈ(ƒ6Ô\%yª”“ŒØ¡°øåXMïØ|Æ8¨^]ÄÕˆù\ºDÐU›Êí*VªE_1î†hÕujæ²‹»
C2xeëAã&«|2‚¤XèJ‡»OÜ‚®(L·<¿†CZÓo>&—ÅÎùŒ“sÙL*_”À"M‡TãF~ÜþÍ7ðà«…H6þÙg îFîÎ`ÍÆñ˜¿æÎ»»¸‡	ö§‚»3÷äGîB)¤´²eƒ*˜»0rÿu[)¤°‡I4÷nâ.µÑýï»µ¹¤D¯
¬nÏC‰ä²fáÈ¼I@S£Ÿ7vg"á‡×fù Œ3aÞ^Vjà~°¬÷¯=ÛE{á;w‰;þpBzVèµi÷kÚ.ŠûGÒF÷ï~W*î·¹í©u—ºß·w`Êá°Û4µ¹¿™÷EºpX)ŸoL:žJ<\Pö³y½ÔÚìë;v»ý)÷Ik³f¾¿9‹têì-âH²/gÊw‹²K*â{3wñR0÷õÍMý–ÃÃ¢‹ «=xPñÊÕ1‚´b…;.H°ö~ƒ2ãn_œ"‘ÖSq'©\ºŠÃc†Ê•¢JÞ¼/µ²YŠ@C¤³A€>B"m6•µr¡Øœ•«TÚ§xÈº…hµ=NuáFc<%
TÅçæötU˜ªqÜˆ»¯ï—<+Erò£r¸[ZÔ]µuüŽAW—²íŒC¨Ø{ßÎnrÁw1:ÚRÍ…›¸‚É‰D,þÏ÷a™o\4‘Æ?qÇ—ÊÞrÚÅoa‚JHAÝ9qçÔ½ý€ê_®aâÔ]÷Ö6÷? Ú0wAÜ¥3wþ€jË#üm‰¸·ùÉÍæMLôê 9ÐC´zÚ=ÃÒòQ21‘Hêý0uwÂÒ`~6Í=»‹ì`ö…3ž Ü~bYX›Iè¡r[ïlwþpª(îp8µ]Üß8CÜ%Ö><q¯GãázžÚ§~´µo^œ\F¢ÛênnLö!î¯Ÿ"·‹LM=­«²¬1ËôäóÈ¦Þáú=ÑEÜeâîpió5ÚÅø¾c]¿³ùÕú…¬Ïb‰“¨Hë{#V¢Ø.î@Ÿâ.¢rW
H­˜Z‰ûl˜ˆ)oÄÂÔª‡QVë%H4<°Ü\¬Ä¥5Xo*Íe&‹ñÂè(åz%¤ÑG[ÑHc)¯¥«n±X‰I¹Ü
U­ÀF:g›wWr1ÉVãÐw=w¿Ä#÷"’óu¼ÃW)æ²ÚÎw¸rºhRtÂM£«ŒåP14lE¨qDç¦pèç1¹h«ÄÛÇ_{M¥zhˆ;^)9o·Ò^º
õFH©¸9÷»Í•@KÌ]¨–iš¹ÿÁÜ›cî îrTÅ>w0÷þíÿ}ëœâ—Ã¯:«zuÐì™CÓ3 çúí½EÃ¢'<:
ÏÎB¬ÝÒs%‘kAsb-£Ó¨Ñ Pî…Ã ˆ¸3£1ga…«?±7ŸñŸ!îÀŸö'î·€—(î"öÍuûOv—Gaì®Ü·ÿqŸâ.þ=åÅëÈhˆ»€¼¸ö'ý­u] …“'m&m-d½éûCw §È³‰m>\KÓPÚ^È¥˜b…à¼~x@ýåÿgï|ÛÆó;Og³#ÌÆÙ®wãÙÅÜu6\3ƒÃnö0Š¶w{- ¢½z=¸[à
ß*†ì˜âÚ€Vt‘‰i›·‰S¶b“c’@ëÄ,ãè¥‰T1O-öYó (úè«á>¤HQ”(Y¶);òê5[V%Žüã¥Þß÷'R€.B&.èµr
å4JF	1_ªØH`”ÐÛE<—KÅ­§R’ºa59Ïõíó8¥JFY­\br¢*±4‰c1Jy^ËŒÏªžßÝ©DÕË©XhVRkE¹”Èyª\ž/P4ÖƒA¿áð,|"™:_É¯ÛÇ0\ÊÐX„jKD¦¸"àgJKÜ!2ó¤ÝqUçRyêÇöU›nsoËÊø¨ºâî…eÀÜ-qZ3w/,cÝ½‘»;sïHËüÌý“oOoyŠ{ûnF'F½úÅ,3‹Ïöw`ä½‡SW–çîn@òü†q‡¡{{gg}ï9
‡…ý½ƒ¸ÑìÒ"zN¿Ø{ññþìâ~ö»ûZI»ˆû÷GÛ¿aã&Üçu§·;Î(îÞiã^ÓaðÊvwïX×c˜ˆ_Ý¼|	-ƒwÖVï¿\¾‰Îš»œùyœû³ïîÕ@W"È'îÓ‡Ø5àw_t&XÜ½¤í¦?rh,¦îHïvúÜäÓ‡÷–áïã9tT~õ£bùh FÞä‹°T°´Ý·4õXÎîëItBY.ÖŠ¦5n’IQ-I‚âhˆT$Œàs¢, rU©ˆ¥¼Z@áó<‰æ[â"Öc?^©€'SB…—“	‡pD¦˜WôJ®on&Y.J–‘á“@/$‰fL$˜Áxì~W0JÿúÂþd†ª›…B¡VW%–À!Æ£1Œ…JÆÐe“’Á0Jád‹j¹Ö7‘\¾ŽÛÖîˆ»'ï´ª—ÄÕÇâÇïºÛS÷vq÷mPý_ÍªÿÁ¿‡É3÷?tGîÍ´LÇ¦®ªÿÑ3wWÝ›Õ2÷4PÜŸ6Kæº›èšâþþƒ×ÀÜGˆ›‹Ï¶ö`ÍRzoëõ½×[{Ùô:ˆ;4Ë¤oX/&§¶B
Ì<ÛÙA™õùe´0qúõÉôæ­t·¸Ã!Y‡¦µw‰;¸ú¡ân¹z;¿|µI§¸Áâ(îð²ÝÕûVŸ<ÜµV~1‡ÎËL¿ë0ˆ¸¿;aq¹OÛ÷ŽY{ç¿±íì6m~}¨¸{îÜhÏ)?x‹þ±ûÚèÖ£éGËèak*òÁTˆ«³™ÚÃvŸ¸;QCàxÚÔt9®,æ¹J9iMÙ“®RQC‘K)44£‹yž*õ§gªõzU¨¢¬ŽŒ)…R½äœÅ¶’AKªQÕd¹É˜E“Ä Z’pŠÏWÊ›É	B¼ÇØ7`ô&QRA”Å‹1œ¥T6jíÁÏÝÏeÈ]E½PÂÎªn¬a9{]“¹8:6‚La±L¡GeSÒ¸d¹’ˆ[qMŽ§@Û /Ãš5éMSÜY+Ý™Ôé.q÷ªeZ!÷Ž´ÌŸtšû4ÍýÚÌýö3wï€ªwBÕ5÷¿…™{ v³{oq·°^?Z™E£ÄÍ(z±m9»³óbjÊòõu§]Æè¥ÄsöÀJÐÛA™Æ«ìdz/;™ÝßßÎþî¿íäÄâÞ~¸¸;övlq·h÷+~¦w×V×¬]¹°öøÕâÌßÅ›k}ÅÝ#Tqï
ÉLû8¹¸O»âîqdqžÌÌ>ž¾}Å2‚þ#Ó'|q¦hhI¡ 9™ qN&î¤r¸§•|ÂžÊ¦T¢ˆzFªÈuqxâÎhÖµõª’T2¬"SX”Tâ9Í”5hªPÐ™“&eËçxˆÅÆàU[H§T£^-è:/—9ËÞ“LGþ«¤ý1÷’s‹8£4>^«zþBî ƒzÁ©Xˆ"Ó$©<Ï^à+'\®!T
™Å—™’ÈëºÌåM©Æ5BI©âÑH‹wÞPb"É“Mq'AÜ!(ó;âî¯–qŠe¼RH·ÔÝÛÃô^µÌO›æÞÜÃâæþ½ö0yâî7wXžú­@¸ƒ¹oÌ¡‘bfîÙ6˜;t·LNYL:Ü°&ïéÙþ”»[Yèª™ÌnÌÌ¤³Û[{pv/þîQÄ8TÜ¿	€·Ÿ¶¸àçpûÑý·/\X{øÅbãLïà•Š»ý>ƒ‹ûEà´Ä½[ÏÃ÷Õ»hsúêê«tÚäj?â}ÊÄÕ(ŠU„âpÄÔ“h qçšÛ®“\2.â´ªòLM-¡áÐJ5#$•–*ù¦å«3H®+J)$%‰†ˆ QâCÉé™ª(Z«²ží›q¦i<cÔŠ¼X.+S“ýêž5•´c³™!#¶épÏàãSªç2+££ÞðD1‰Æ´àjØñ 2 ìùê•:K`¬ˆEÅ3šÈ›,Y•Á:æ´ñQePB‡Šš%?{c”…Šáü€²bîï¹âîÝƒÄhw0w_'¤gîöùÔV)¤gî¶ºûÌÔÝw×Üaän¥_ð}‚îÝw`u¤N¨6Ã/>¶NÙ¸â>	“÷í{a9çÂÖ¿Ùƒàüös´¼µ3¿o•ØÌCPæ†×éE”Þæ¥–¸ÇÖvWÜá4j ¸óTÄ^u‰{ÀÉÕÛ>¼·qûá³Ù³œ¸/?¾ÓOÜ½Kð—ž ÷‹Á¸Þ>¸¸Ô-å}h¿	·ÃrU µ.µ7½Ä}÷ñÍç&Ö/¢Ó&ñë_•Q²ÊJŸªŠy¾†.îD!¥!ÍŽ÷œ,&S<UÅ¤œ)
h(¤8Ù$Àyåb´Pªb”¬ã–É#®Zë£–Ë µr²†E2/ÇÑaÄåFJ™ºRJ0:‰F”&YÊ è!ir…Ún(Ç)5Š%ìa{SÜqIuwCžÇ¬G½aªX(~ã¥vÂi8vH©Z°ž(K¡Pàª8°z¾ÈÆ0R¥ˆX=Ÿ‹s|tð&Sä«àíRA¯ÓPæÎ×?ûàºû{^·Œgî–ñ©»Ûææþ—Ù6sï4w8Ÿ°A¨ºi™ÿÜJË¸)ww…*„e.^u.>½ØJÊ€·[…_¼\D#EãÖÖú”3Üžr±Íyj>¬¥qwkoûÅúÔÖÂÌÆÎþÒüV:{ðj	fúÛt‹ûp°;e¾ÿï|ã÷ °öÖ\ýÛ|Óæ“¯}íÒ¥÷/yºÞJ´{´_ãé ˆ`§¸ž¸”¬x6Tò~azõþÚíÛÓ—/?x¹|–y™;æ>1ázzðŠ¥?l¶ÒûmÝÿa>·<Ú'×Àt m±"÷ÁñÅÃñ=èîj÷‹½ÿÈp÷_ÛyŸµ•åÇ·ÏbïqéW¿ö»42>½þC–|Ï•vKÛé“Á „øpqÇ=Š,:FhBªF•Ñpà4‡¨qf&/Òt‘—¬Ä-“Ò¾@c£AÕ”9E=ÜÜ
e9©šE2.ƒ‹9¡š*_IØ9y§Ž&Q–ùšD{‹‹&Ž9—Yõ#¯b'%V‡ÛH*ÔÀaöb)‡B$UŒ4ë…2ƒc0¤É58ÞðB2mYšŽ½Cò]%¾þu‚~3€¸ÞUÀ‰¹{uî¶¸·ïaúãîªCwoæn‹»7to«sÿ™cîO§­‘€'î@ðþ®gë-	!³÷@Ü¯]âž~Vôwvei+î+ÅýùƒlöÆÖ½[¡‰»çíŸ€¶¿¶âîqyw÷Î]¸ÝG/—ÑÙi™CÅøÍ÷ÝÕ¥WW¿8ý»ø_‹)ä#¥ÿÐÞ—¾¸Û	”#¨0HU#dVÐˆI·{Ìt®Š*FUK"©J¥h­^EpsXkT%³*'Q?âIQ¥]Í¦I’ÀŽD§j2“¨ð"×pþL8ð ,IÒÍ­¨Ž£2ç3+C¡þÈê	ŸŒOÛ{QÖ2Ø¡°…|…JþTZ-4æ€J"ÎéiAàø¯V†5å$§±o¾nñÙÉÄýO»Ä½}“%î-sÿ?Tuïw{æþ7`îöÏz¿¸_ì%î6mW­½¥´ÌÌâAv*HÜ§&÷P84nm,íLN­ïÏ¡»KÖ¤=»ÿúõü0Ä´ýìÅÝnÏÞ¯º{ãÖiOÝ­?pnþ]`,î_½·w¯Þ¿µøj6BÁŸ”A©RY”†%î´~ýÎUÊŠ3•J.ià4R%ì<£tAcÙªcŠÀp*c*J^¤FÕ%qX±¢_Ð*n]Ï1ÃpVä5_§ÛÕ,vô¹([/T%ÒP89ä8™ç‹uÒžÊ³ãZ™óXå”=“ÀŽ‰ªäÐ˜>”u•îwð½ú4 ¥5gøI§Ý†`«
—¨)ëNŽ¸ÐªAº—ÙZ>™”ë4œOmòàº;˜»¿huBþ»VµÌïû;!ýæîŠûO=LÁæîÍÜ½ª|´ÌýÃ¦¸?uÚ »ŒeÚOûžÍ ‘¡±p°7é‰»Ç÷öî…£ßßJOM¥7`êþüNö»ïmmíì­‰;¼$îí–îwv[Û¿vÉwÛÚ=qÆ'qþý@úñŸ¾ï}N©Þs¼só´3T‹¯îÎÍ-ÎÍ tëá»}¶-}\¸j1˜¸_ñ=PõÓ§P^}¸odõà[âîy»w=Åý"$î—gè”á~­	¾i¾ —
àíMk÷5¸–o¥RÆC(óe»,ÕYÓê.F7p,#Š8nR5]Â25
´°ÎŠJ¹lÆ°Èˆæ©YAÃ!)jÀ’V®X5kõª^J*ly+ÒNÖù<#¤Zçb“Œ¬Õ©%‘ãŒûù¹«èP<…°C4æP’y¥J±X$_ˆI:eÉ*ò’á–yÜ¹—*ehŽm>˜ó&î”+î™¼3S€Z™cˆ»kî^›ûŸ:i™î=L îÞaîÝ2ÿÅMË8uîæ~qÚ®¸ýd7—7æ÷&;ÅýÚ÷¾óñXÞIg¡¦fï•µˆ)›ÝKœÞKÃ–Ö.qÿøŠûÚ“Ç«¶CÞy¸rŠƒ]˜·/?yôxþþüÏîÍ.,Ý‹{¸ïNO<zµ±ïÔÅ]þUÞ²Ð ÍŠ6,q§*h`8…onÎn@íW5¯á\YN¬˜œBQt¦Â¸®³`½Šhšù„Uf£A!GºZFÃAÈ×Š	Ô¢ÿCùc…ŠD4†«Zm‹K&/æ¹d’I6ý=ÇTDQÔkõÌ¸òÜOÒkŽ¯ÓØ ´230WÎóÅ¢f¡órBíCA·Îãð\Ã:mŠ{¡h±fq±ú_# YËçPN6Þ¼,îîUÀIËxqßÈÝž¹;T½´Œw@µ–ñ6¨:TÿGó€jÇ
Õÿä-brºe~a™»åê¶·‹ût?Öß™{ãæÜòëùìT‡¸_K¿ž	-c½6µžÝÛ‡£©éÉõlvÞÈÞø8f£Ì	ÅýÒ¥ q‡·ÎBÜw×ÜqríÉ)vC.¼zyßòòËkkž¼ZXYív‡!Š;pdqw8±¸ü•‚Ä}Ú÷Ó?°ù§-î)¾êKÚ§×3õŒµ2uâ+$—ê¢óìv%¹,‘ùðÏZFÃ5±Àk¤.K˜&›8ƒ—¤É”(kô‹Ó#:Þ©²€NN<‘ˆw^Å”È¢‘²]šáò¢Ø:@“aþ‹ÅÈŒZ-êšÆË%®”ÏÃ‹r%/Ëº:6÷s˜•©£ÁHVtS"°ÃaM…C!Ïó¼, 1a40¯•+þÙ7B’pH³ÓÞœ‘(1‡’rJeú‹»7sw¦îÎÌhŠ»mîvµ¨»–<sÿ£ ªž¹û¨º1w ÝÜÖ2w(…\ÜÛ¯¾óäù(¥eff—7wÖA•§,`“eÍ;·Â’™¹ýI÷õíg»Û–À§'!)³îéíSÀÉÄ÷÷ßÿ­3w‹iGŠ§×îo,œÒúìþÃÇó«»MC_[ºõìAlûY‹{ÛÑÒm¸,î‹;|x]âoÁÿ®·?ý»¿ùâD§Wí(q7®_')éúpÄ•hPòFkÄžTDkþ­%Q…ˆ 4KÀ Ç¬ÉE¾d`†¬±±ˆ*ˆŒÈgçÏ¨’ÑKÂI]%•y®ûê8rà9Äè¦idØõÅÂ#£IœÆ%µnP’Z­ÕL³¦iu||Bõ¼ee î()K²¢kU*89E³Õ¢fºNÎ`@f¼½)*$†EëB¹¼J€Â™²IcÑÖÃ8‚Äc(Y«¤b•lŽÛ»äý–¸;eî6öÈÝw0wÿ&gèîÎÜ½6w7çþÓ ™»W-Óq@ÕÝÄävËØæþÉSÐOÜ¨—qÅãÎ“»h„hÌÌ=?ØÚ[·œy}oÏrøõƒY³ë× (þˆûü¶•”™ÚžwÄ}²ûí©Ž¶Ûü^§¸»êþï¿éñ	ÐwG×¿¸áÊîÜL¸Á²î^ºj»åàâÞ&ÅwžÜ;•“›+O6çž­^^µå}÷Éókæþ×Ûý\µ¹òAW:O•N÷ŽÊ|tèq 5HÜ§;ÅÝmw÷èßÎîÇçíð˜dârÇÑZxÛ¹¢éí¿ü×>mq+jµ£×¯K¢Ž7Åýž´ÞáŽJÄd·êb½Òp.2\ªTÇc¬Î¥Px4*Ç0²V¥t¥˜Pb±QD‰ä¶­q”ãÔ¸ª—R'¬¸Ï+z^°Ó0A¿\áeÅ ˆ˜u52lÅ‹Yã¸A³ì¸Zæ<ŽÜttr|Á¬€jmä­YÏÏ$R(TÌGcN
1C.ËE*†Ñª"ÄóuºíSA*šíÛ—Èb.^®CŒæc‰»–qã2¶¹;#÷?qN¨BXÆ9¡ÚËÜÿ: -cÝÛ1¹wÌÜ¡ÇÝwAÜ;°Òe¤¸¹pweR,{[ÛÖÄýExË$on¤¯­¯_K,,¼ÞJ¯goÜØÞŒû°Åýb‡¸_ÂwËP.îÀîêãW§ î3·fÐÍÍG_ÞŸ°Í}cþöhŠ;p,q¿úáÄ‡ö.ØNqw®˜hzûÿûùÏþõÐ©’Ó5¡3)âÎGÜi^@ƒR6
	Ôjsç
,•‰°b
…GI3ªÌ}ò5I®äËRLW(ºžeÝä“•Ìy"Úà+9tÊ…±÷™
I¡º`ÌÌÆÆâ~SîôvRÆZŒó'D¨b6tF²¶«f9‘/H0CñtŒzy–'õæ¾ÛÜÛÏ§‚º7[!}æÞY-ãÛÃ3÷–¹{9÷?îcîÞ"&gäx3wg…ê/~i™»½†Éw‹€­ìÎ¿œ4C°ˆ©Ñ@£Dãæ­çû;[;i°æßÞº^Úz‚íékéý{+û{VÕdv{oý ¢ÞÁIÄÌÝÁ6t¿¸Ã…ö}ª¾rÈÅÝãªc¨}äi{_ÀÜ[\~w÷ÁÒixbÃúü›{µ¹ôÈõÛ««·¿ÒÎ…œ|L WÚ­½ùvOqŸö¶¢º¿+˜ÖRÇÑÔž‰´¶ëœ­«µm:ùêðvÀZÛ÷+—/ÃÛW®ÀKÛÛÿö—?ÿò_>ÿ§n Ó„)úƒã‰*|×Ã*éåd¾R$ÀÊq4 ŒIµºKÊµ¢F³¦¡*(<Ê]¨Q(×&ÎT1S.lÔÐÍª˜dªÝ:j}˜£FŒ¦t.ŽŽG.ÁˆTI	vßc.ð‰ŽzÌ	ð¡Ièí$Ó^7?æ$pÌ#*©T×$Âÿm„Î°DÄþ–‹¤ß)­h¼9Š¸;Õ2@ËÜ-uwÄ½eî î^)dËÜ½ªÞ¯ZÆ+…ü1w˜¹7ÍÝÂ-r÷<¢Ó×¯v‹ûåéÕÇÏh´hÌÝÛ8€¹{6Ý˜EaqkkÊŠßlonÌoíA?|zo;{£¿¸»«\`q÷èmîvÆÝã’ÍÀâîÉz¸_<¾¸ƒJÞyøÅòMt*Ì,<{b5Ê€¿^¹à÷wŽ)î_õ¹öw`q÷Ô=ø\jÇÛþÉ'ÓÖÓ6WÁÜ?„ÌwÀúÍÕóö_üüËøòËÓ=škŒßf©ëð­­KC÷ÁÅ[(z«š­^¢õ*ÎòØcH$
†)±,ÆõªØÈé1UÖk&NUDVÍ3 ÁDtšx]L ¾Äã½:wL•ÌE¥"Øí1ñÎ¡»P6ÇgDÇ„·=ÑÛHkc¼Çé$ÈÑö³Ã¼b-W#z<!¥Ìg"‘˜Õp2q‡´Œ_ÜÝ”»ÏÜ½‘»¯Z¦ÝÜÿ{_s÷V¨:iÀwßj÷˜›M€¸ƒ¹ßyôräÌ}áÕë•×ûó[ûËËÛ“Û{“ë[KÐç>¹¾·ý"=4q÷Ôý}àmw >9N¥y¨13O¤l¬Ú'T¿âç]—Qw`Pq‚Å}â'Ž·CPægÿò3tšpfÑr2¡åÃ"â~UÙ¡ˆ{CÂI1·ñ=YÌT«d]ƒ{>‘P8äøzUŠ]SÌb2§à¬¬˜5‰Ös•ª^ÖI¬ƒ>¨ceõ!‘þuèxŒFb™Z¡ 2qH¹\…R¾bÈÌxÒ˜PSî¸€ÞB(¬<sltÌ%½ìLIWÉX¯gíŠg8¥NF:èsœ û§Í´ŒOÜ»&î¿ïˆ{÷
Õ?ôWËü·nsÿ3ÏÜmq÷ÌÝ«swfîÓO[€¹û;2|ên×‡ öËý>x ;TGŠÆòÁüÒææÁÒæóÙðÒó›ëß{‘½¶¾õzec;}cê”ÊØmÍX»Èº…ëí¶¸Ã%÷ŽR —²·]¾äxú%»KÆ¾âÏVŽ©^ñ¢é]ë],íY7æ~Á)uÙ}´9ü©{ãæìj,ÌOtïõV2yîîÇ/î`Ä®/·1x‚g«»±+îîÓö%‡‡BÓ€s|þ¢çsj¹øgñWû(ïÖwë\ê/ÀÛ?ÿüËÓ¸'Š&cïÔÉç-|ú@Ów¿µWÜ‰brà*H‚*7œby7XJÑpŒÔB…Cž2T‚&¢’"DYW#šX­RDUu…ËKç+V£¦%tS‚Ÿ• á^«*Ôè'8.W®ºèI>S ÇÞ>&ä‘{½}T0‹ññÔ¯b´¡W˜’Rec=|H<“*iHÑtãw ¦îÞØÝksï_-ãmPõªe¼ªîÌFîAi¯êÜ}1÷sow;ðîd&,®¶ÞÞÃÔø>øè««+3h”hÀéÑùýùùK¯^|?]ŸšÜyGS³/¬ûÎNvÒ¦­\=HÜÁÜ¿ÑâÛíôwÀw[Þ[âþÕ>âî—G`8âÞ¼àúòÄG›4\`äŽÐÜÊæËûÓG÷Ë—;Ä½]Á/¼×‘ÄÝù5ë*WÜÛï£¶gM:ï5ï6\oïãîŽ·ÿäCÇÛ?N×ÜS²*# \U7)ó_·¤è>–é6T>ŽC&czÎ±Ã:†“D]Wí.6…C¢Fà¬¡F#’®+<E‘†bR®bV+	3Š3HSÎ¡^ÄK:_J¦‚Ž.“Öï-Øˆ¤u&YÐ¬Ê3)”Ê%ŒLãícB7÷2zë °v44æx$(WÛU1‘,óÃzŒÛ#l¡e´Ž(îÞUÀw§Î=h“mîÿ··¹wåÜÿ·×
é¬Pí9sï÷§®¸[ôw88wéáó›hthÌ.¾‚Ó©KKûáÕÐ7níüvzûÅúÔÞÒÊþìÖöúüÁN:}ÃÓöÁÅýÛ‡ˆ{Gbæk¶¿[ÞnK{¸âôÉô÷w=e^{¼²8ƒ†ÎÌâò­•ûWN,îÀ0ÄÝ£í*x(îp—Ýmž¸÷µv ùê'W!'Óœ·õO_.4Ði‘SìxJ¯–Ze?Æñ÷†$îÑBc´Š#žŽ’¤dH„Uh”S(’<©*×¢`¥r¾#%…7T«½]Ôô2cVõàù"Ã'â=[
„DY.çŠîY§T9ŠÅpØÏÓÍ~ø'òši°ãû˜Ð‹eXô¶QÁ|TÑ˜ÿÏÞÙÿ¶qßwüÔZ ÝJ‹‰XNöƒ:Câvð`bé–Ë
¤ÜÚ²wÐF©ÔÃñ OÒx'é,`$J¢$’:‹d‘è¡d>[TÈ`h—Ù/6
ÔpQì§ã¿°ÏïøåŽ))Ê¾WléÈÐMÆÉ+¿¿ïÏ™H“Š¶|~ÉàRq¦ô~wuB î ÷jHÜÁÜ•:wqÍ]+îåVH%çÞ£/îzjˆû+¿uaæ¥eJ£;Ãëë{3ÓC‚%îsëûVïÁÈÎöa×þþÌá:˜zÛŠ{DóÄ)3°5»¹3$Ž2jWZ¹¿°8Ñbqq—^©¶÷@ñöw€»ï|ÔRs÷0’Ig`¥Sæ½ë’iŽ¸“uÏËC4¥ŒÝÒÉE“Q)«…F~ÂG$FFü!cCÁ0‰±±x”"éÃ$ré ‹Yâ…sR:™È!9×Ì…ÒNÎjµ¢3E³d!’X^%SÜM¹·÷D›ÇTpÁä„íÊa²)Š®½­<J¸&ÅÁ<ÞHqGÍ2€*ç®®–Q¨"s‡œ»ÚÜQ»ÊÜ¥:wÔ-£¹_Ò÷@GÜÅ®:ØÖ¹¸3(\÷†7¶·]#ýVÊ,Ckûœuc¼ÿÀº¿3+Ë‰ûë/®¸ó;Í0ÆÒèÔîÈ@eä>µÐýµkÝðË:q¿Ö>â¨½¸ûÑGð›¾Uæîg‚rž¼èS„™»õíMwK&]ï<<•Q?'’-$)£ù|¬Àfrá9)1‘H€#ãnÁ´ýIO(Œ&2p.ëÎRâlÿEtRŽ‚˜KÐQóÿâ*ÇQª¼„Æþí6š„þ¶™˜7roç°LH;v
&©òòX”(k»EÿHŽSð‡8\Ÿ]Ü‘¹`îè„ª¤îhè œ»¾¹£RÈS¨ªêÜÑ&&eè~Ôý˜¹¿ª+î¢atŠÒ ˆ»‚¸CÒÕ3`„ÒÐøôŒkcxÄÀJ™ÕmðösÃS;ÛÖíå;ðýO÷’·?¯¸C¾ý,â qmš¸Ãn¤…¦ÔËŒ-m®í Uþck“ð•¯õt îõ™{µ¤K/”|]¸+¨Þ#”qô¿ä©wäíRŸLYÛïŠÞþñã_·d ã•¾=¡BXDo7QÜaÂ]oáËQBIÄø¢˜…¦ŠGÐ,@%ó<‹ù„çÅ—Šûl<•)°	w‡Kbª„âÃP–IhøÂ#á´;èqhµ]<õë—rîð÷ÜiÆ]Cž’.hŠÚmAÓ$Ï³6ÌÄÄ¸‘{û6ËxpLCN0i˜Tõb8¢üYg1µ€p» dc¨°J_Ü*æhZ!¡ò˜¹WPÕžP•Ä™ûßT›û¿V›ûOÅ™»Ò
©5÷åª’¹k[!h4¡,î²Ék)?hëÞCðàCi`t×À¥üýKËËÛÞÖåÕám«wÙÛµ½ºÜuš¸§‹; /î€JÜWêÕdæúôUä¹{ý\Qq™û;ƒ%ÁhÆ¦g––v+ê>º´0?;qæ¨ŒÄñ¤ºŽÁ+¯4zì×ªŽšÓÄýUtSƒŽ·÷Ég†å7¦OEw‡¸DöUNæ# ¼Ä}@h:%wä—Åœ.|J¶dG„­hûwú¦bõRwÂ=ÁÝ‚’pÇ1[LÆS¬½ãÄÝ«žç10fæœy*ìó{ât’IÙ-™°y·P!&ÉÁåNRñp8ëºèèqÈ
ïÏæ_(fÜL.çË%Ã>¶É:_Œâ9Z=“©vSÜMŒ4÷¶L‘#ã4kež“$¦Å"j;Ól†"0‚åü‚3¥1¬¥â®Ú zÒÌýG²¹£VHEÜ5æ~·ú„ê-•¸?ÿ’Å<£¶¸Ã€Ù•vKË@KàPmM)8¶Z½0p70Á«wxÏ÷j¤´ÌÚá`Sv/=Z[™()'TwßŸ4Åýr‡<oWÄ]òö÷+¡ùC¿Œ†BLÙ3¼’`ÉQ×›(îDÈQçSKñ`eFÃÀ½;Â1ŽWpd %òÌ8rE8`ÉÅÝq>IøsŸ…€;Á0Q2™fB‘8½ðÐ<‡ÉX('œPÊåóG<ÎåcÉ•?b1®+F3É°›‰¤â31i&¶¶Uc'˜§SŸ“üqo·c —Œå
8š+Ä6Pd1úæ®'ïr^æ½J'äíªœû_¢˜»¬îš=LÿUcä®,bú;w0wIÜQÎý‡€6,ƒrîÊÌ]AµŽ½\hÝ)àµkÙ•M÷§„ö¢4òÅÁÎèÀèh?º|}ÀøÌÆèª¨ß7æö—­]ËëËÖõ%—	ûIâ®€ÄýÝwõÃ2· ]qn¡pEƒˆ¨è*Z¿zxfqGtÌ¯MÁlÜp§WVÆûQ¹ÌÔÎð¤Ž¸§ô¸#m?]Ü¥Ü˜úÁÒO¦wDqGnÞÙ‰nkP~TmqTâ~åò•ŽKê|»”ùøýÇ_¶@ÜS?HE ²á"B&_9—ª•ö³/^Bp¹z“,Q^y¨;f§Iš/P¼Ô_BÐvÌ–OŸý¦èLgC‘h,f²Q<Ä06áAfÙBÎxìå€fI‚à
yŠKú‚~˜¿Çé@.A`•ÌFñX Î™½&MÅÖ¶1÷†@Q“FpÄ|‰Û«Þðò;NÆ–”“38K™lXSÅ™;ˆ»: ªÌÜ¥ªÈÜuW¨þƒ*ç®ÌÜß×œPE­HÜôÀ_qï”Å]c ð0EÜ'AË„s§¤´’¡ï¬{7¾8pŽŽLíNMÏLíîã7Dº¼Þ¹9ïòïÁ´«Ëw[“Wºï­=gh¼ªor`×µy¯çå÷+=eo—îÉÞþ>ðìÍN´¹ÓN:@ÓÑ¨SY¶só½&Š»ýÔ¤ŒC^Ê"ŒtQbœ˜¨¦Ä.H;m·ã´Íf¡‹éÒY; qŒ¤à;ÏÆr	ðvìÈ±ÓÉHž¸L‡¡üKf¨üÒ3H*‚×Ú‚Ó–c§qŽ¥
æ‚T“ÖŽÜq·Ð„1À¹?ž¨t¼&”Ä«¼“°“¼|§…ÎD"f—$Þ(q¹ƒºë,búk¹R1÷Ô3÷©eî/™»fŠËètË Ë/qW¹Ü)Þ­èÝì|žýC££ccƒ#»;{sWßôî{½{{Ã«{.×Ò
ì^:˜™ƒl…[S½’·CmûÜ\—õÎêîôªµUâ._·×w¸ûœÅ½ck²çÊÄÄqÓÚnÔ½TB—»‹ðÕdêwÙÑë÷G«~ªºÅ€ë†ÅÐ÷ GÎÉHâ.k»èíð¿é[˜²™€À¤"9z»œp‡«Ûï5SÜ¹Ó–/9˜¬³\I	>].(<b-b£od£I¾8Ngœ¹;c,E‘¸8W¦“D.ƒQák/†’„#S¹t8Ž•+Êì–—ªÐCt‘<iÁj•`´)î&-L¹”ÐøiL‡”Ð"`_B(-\püq_œDùv»¥zD`#p
öb‡8¸Ùq¯ÝÕÌýø
Õ¯iîêœûQÎ]×Üµ­eua'î•v™úâW^íìTö4ÍnN÷Ÿ»¸O­¸ö\_ºÖ×÷­¯‹¼i'áBö÷—·××·7Ô—Òôz/De¶W×»¬]]ðu†¿8X®WÜAÙeqwå|<ÑÜkµÊ g÷¯7$î³ÃÃóWº»/‹@bf°¿‰sßÁ•ÉË²­×Î¸#P£Œ®¸P¤¥³j ášP<šµkh¢¸#m—. NFöv%'£xû÷€ï?þrHh‡£~qÿeÔ-8=Ðö÷6›({{ñæõfŠ»ýˆ9-Ç’9… ÓÇ©Dn;Â”øã0<JáÌîHˆzÉÒèçj&†Ç²1³¦Ó$TÔØÉT€—î¸8J0L"”b1À†üõ¥ÂrB—Ž•1i±¹…v €éÁ	-Á]ÄDòNá"¤0šÊó„¢í˜ŠÅx¦@æ#>Á{êw­¼+âŽZ!µæŽÔ]–*‹˜à€ªÜ-óW€®¹£j0÷ŸýL4w@6wt‡¸Ì1s¿U=t—¯¥Žp$î€n)ÑÉÜ'6Ï1è^ê—æ®SŸ>·½¾ÿnoï›2ÊX°Îy×7¼V× ¢è²‚}{]3ÃsVïÆÆrWMq¿QÆ
ˆ7¤§'>Ó×EÐéÔÓÅ]{ã›	DxFq/ƒ:Þ+Ê^¦¡¨ÌäÚá£ÅY£;î»–vÆ›¶[ o×¢Òön@-î}=ú é¹êuƒËÚ§Y«T¹Sßäµïº¥wô#ú´twHTú8KúÞþ¾èíßÿðéÎ§–üîRýUiej„|›J€/Þ.ŸKEâ®•öçw2âv'ôù<ÁP¡ÀEË]¾fÇyŽ y²üon›"×,MX`vÃx„Iç¹€3A)Ç¢ì8ñEcÅuþ^Ì…Cix»"î¦8™˜œoÌ=%œ?Ñò¾“TrC>áââç1„âíqät&Q*†‹û<îŽa-w0wYÝq—Í]5r¯ž¹ËÝ2?W¥e~ªäÜµâŽŽ¨jgî·ê÷òEó{¤aßäðô¹ÝÆÆGúKƒûW¯‚¢ëŠ;`Ýßï]ŸŒctïLÍ÷fV»¬@4CÂ§‰û[CÜ»g‡gÖ *#³59{ß5m¸º—ÄÃc;+÷·^BqGÞþÍÏ>ý¤†·¿ÿäƒßIÜ…z@µÝŽ,ÿ6sJV{³ÉâÎ…ƒuüA–Â".¾'ÄbD4•'ì´Eš÷Ú	;·ÝfÇ’;j4çî,ØŽU†•ñ1Dæ1¼'á2Ï0©x:Ä)u6ÓaMLZˆîÍ¸pÞ0X’­H†shî.*þ<Oë¼ÏDD`
ÕEWùxŒÃth°ò»"r\æ: PÕš»¤î¨ZFcîµW¨Êæ.­P•w¨þ³ÊÜÑ	Uu+$JËèsœNAÊÂ®w¥ñ}òþÃ±ó÷Ý½‡3‡#ƒã{óWßíEÜ¨&îVk¯×ÐêÊñQÜ½«îëëË]õ‹»ÂÕ
5ë uÅ]~ˆ;€l¯žjAä50Õ÷Fë {'T&ÕÿSPøc$ýc»ãS®ùÉ‰'îÝe4ÝÈÊkpIB	Ô\_­k´‰»Œê'«c]–Ž¸ËoœcºEsG1 ÉÛ•H@îTÄýÙož>ýU©iQ„;öv&â©gog1¶À Ä1ú©xÉ"K†¥K_œ·Ùóñ‰vˆCJÎ.‡6H
Ç#ÜK9*éqÁÖ-Õÿù°±Q.ù„äBfbbÒ>æÎ­J¶Ô¤"%\P‚a&Lû“=’
øƒ)ZÕ	“ƒÅ¸®º£œ»ˆ4r$sWrîºæþç•:w”sÅ]2w@ÓçÈæœlî’¶? ;Txñ (—¿Kª7ï='q´?·xxeÉµÿî»ºÞ9¯¼ÝØg¸»-~kœK…}2ôÞ6wàœÄèé¾¬fâÞæÌ` ¥ÑG›‹“—¦‹»VÅélªÑâ®*^…·BOÜ%oý]÷·>ûDÓßŽr2¢¸ðå€Ð|˜x€	B¶¼ÈÂdâ½¦Š;^Çˆ<:™p>æ,‹{ ŠÓÅEy'*5Ô-l†%wG:ì&2„Æl´XPF'Ó¡V5Çì&&í–BÂ¹RÄ­}fÚ…­„[¸xÁâÕ›QI*fÁªMw8E7÷ãi™o×w ‰»\-ƒêÜµ‹˜PÎ].…Ô? úuÍÜE=¯GÜÙsš¹>ü$öêÜþ¾·†¸ÏmÀfÓÞ¹½1CmqfYþ*VÉÜ¡r¹Ëwµ¸ë3¹y8j¤F.^š'î=m.îâ¼ý”oGóöïÉâþôI3Å=ècò•3c÷8wófóÅ=åNÂã÷H÷Ù0#HøbœØ Ís4]QmëMpžæs%¡Jž`:‹ÒÁó´êÌ¥d¹B±	eÌâ“óÅ‚içH Sa·´ôxjHºˆxRáp‘%P"&šÇ-ÅtÒ™I½œ|(‘'š*î`î²ºkÅ@â.wB‚º«êÜµæŽN¨JT¡Z™;Ê¹#s§z“žº£‰»ø	i»FÜù•æÍÜK¥Úå.²ó‚üê‹»wÏµÝ{ccÊØñ=«<q‡:È.q¨}îwLq¯CÜa%ÓîøˆK™†N¾tâÞQ%îâ¹ÔO”½KJ$òö?q¯?*Óx„ÆÊûÐ-O ¿	¼4SÜÙð‰ò`:í{Ü=nŸ,øÎi§	Œ,Di‹…à8{9•NÒ ïâý¡F_ _’cqFb$†6÷Q	GÍþ&&ç–iŸ™{S!ÖQU‘šÿì|
ñ,øyŸp¦ˆLÖ™KQtÕýl*!Î4r×©„D­@9åÈæ®³BõÏP)¤sGÕ2ÈÜ«61ý\•sGæ®Í¹mbú¨ÊÜÿÌé:š¸+ GDÌgkqe¬¿i5íƒýZc‡o¥Á¥ù×*âŽœa½á]]õöÎ-ûÜv–{ˆá€¸ƒ·oì­[»àJâ$qnT‰»ÒãþG²Žk8^‰.‘¸#õÓóA=q×Õ÷n‘¾*,r¿|:Ó¥!gîƒK³§ˆ»,íè²O¢çt”ºU®'î§£ysÔoÖ¥šTÞ!ù	ËµíbÝf™žK··?~´@9™Ÿ|øÁÏ~!GÉ­îsñ'•Å¤nÈÉDÊóö?@=ƒÜá¡ö"#œ„3"6@:ünxJe Ð—°[ìœX‰ñ©¼r!h¸³+.ò	á‘’úEZ¾/D’$ÉÍy»‰IV„s‚±k½ÝÞÊžù„ÎëpÑHQ²Ž#q˜(-ðèOQ•‰Œ«‡S«eÐà½Òç~]3tW-bRÄÃ2âÕŸ ˜{-sWUËüL5sGq”–Aæ®¬bB€™Ÿ(îÕ«$/M,ºvG›£îƒÓ‡c%ËŽŽÎLM¹¸¿®+î]sûÞÞÞqÁHFVE‡o°{	\|ùà‹u«HcâŽÌ‰»ŽŸëõ¸#oŒwàd}ïžGÜ/omN–JÆ‰äk«nqï“86?AÜÅÇ©¨þ’¸KœEÜ;ËÔvxô]ëSž|÷@÷7Þx£ïÁgUóöÇ•y»âí<{úì‡O~ý+w¿`qæBnñ^ÈuÒàí×+ýí•Q;`D};‚{NN r)å®<S #¦	–´ÁÇ|<*OÅls'¨¨xw4x—Ä	’â)JüÑ<“§¹PöˆÀLLLÚpæZêbD6)+ƒH4}à~ÑGî1Lƒ…ÎBÌ¦»à®µâÞ®˜»R-ó'hä®= ŠJ!U9÷zæâ®kîÿ!š»¼DUãî‘‘€¼¾¸÷)V²5¿ððp¨ÔqßÙ[PÛÚÔÃÍûûk›§ˆ;¬5…PËÜÊ ¡Ïç`®¬áeïÚ>p-$îo½uª¸HÜ%tÄÝÑnâÞ½ÕÝsom×ÈÌõØf‡Ñâ¨SÜ¯5*î—$Œ÷>ðöO«Ï¥>~üåd? Ì“§_~õÕÓ§ÿãhVT¦$ÝtÆ¢Îf¸›jqÿ-ýÛúÅ½n§cNáD²´lq2‰|>J²Ëâv±2CHðä›“¦ïTØßHÖ2ˆØ£@¶[4;Ai>.šÞnbÒ¦3÷¤pø9MÀÝ.}oYÊ=Œ;åžÀuþì•äPvæ¼Ä]3rdqGæþMXFo…*ŒÜeqjŽÜ•j™»w+æ®=¡*êÄ7ÑÄýdq½™˜\ØB±Ãè_q=šRÝ5³ÿÚkßxm~ÿóÓÄ¼Ý:<Rdj[ÖðòÇ.qjû‰{g›‰{‡üikkvsmÁ¸’ŸþÑ¥ùf‰;p²¸ÃÍç÷òçï|çLâ®öö»â¹ÔÿûÝã•û³gBNæÉÓ¯¾üêéÿ:„fáK8!ÚNÞ¾}ûæí›q§Yü»õŠ»Å^ïàää˜’Û™M€Ù;r%ÿÂäiž*Ä“K‹Š¢0;I’fs¢·ÃW¶³±œ[¨“ 3Í¤cÉPœÃ´X¢¡PÔÌÉ˜˜´­¹ç[?löPÚ€»dï­‹ß³˜ú‚ÜIÒ¦×dÁZ,î€VÜ‘¹+3wdîª5w4s×Y¡*™»fÊ¹£nànõ	U=qÿL¹ëˆ»Æo&6--÷¿fiwý´ƒ£#S;ÃŸøÖk@mq5¹÷ÍÞíÃ’±ëõ­*q‡J›9ë™Åý5 ¬ý­·ÞÒwýÄ»ô	EeÚEÜO·ÏNnIú>ûpdgqx¤ß qŸ^[œí8£¸÷]Ó"gÉ­­º†Ð.`jHÜ/©P‰»L]â¯gK½õ©”“Å´r2AÜá7·œ“o‡ßöOž}õ‹æµÊ¸“4Lóo‹â¨ÅÀéßk@Ü±ú ²BmÙx˜Ó<L2éTf5ÆçSPCÚ1.ìŒs8Î²„4qÇi±Ýh¶˜KuÏÜA6Nq6Lƒ=NdÌs©&&mlî<#´˜¨æ)6yìÞ¢ðJ;NL¸H0Ih½ýù±è£wDUZ¢ŠêÜuÿ¶jÓP+¤fÓßÖZ¡ªkî?®iîÊ	UEÜ‘¹k’2¢.~6qW1I÷vvVú";E#A¢8»xoÞ5ÖŒ˜ûÌÔ@¹af`úáðæýù«’¸KÒYÐöJ¤*&3…/sÖ½QÁØ{¯há
w–·ÁÛÕæ~Gæ%u·j×¹ªêdÔvŽ®uÝýqõ•Wä …¸ë’¢@"Ž‰»ÆÄ=šúŸó›Ã÷`LÜÝÓ1	+U'ï?2èm_¸råë_¯öuÈ€ëNUýOK_õ&Y¹nFåöÚ—èšLåVmM—/4÷èê·O«YšÚ-¿ÒÿÏÞù?µ}ßwÜ8vå$¦5êvwîæÜuön=“Ü6Û½[›Û²,·nuîªK“æ’y]§Íqª’>ƒ›Š€¢ °Z!@aKB¶¤d3ßd#ßs=›-±‰]¸ä|ÙÏý{½?ß^ú|ø oH²Ü~ŽÅƒ,.òƒÏ÷óõ}x ¯ÏòÞ.Ô@¿ÿ½èíì¼}{ûõ×øƒ{^¦D,Ì¼êLúã§Ï~KÔv~_*µ¿ø/f«“AqÏõ™8ðfÌÌ¬Ç Ò’\Ä@:¥&"‘uÒß8ïAÛ¡OÐJ¦ütbuÞÃý	K{Æù™q_uîºÃw4´¢z»ŠJ… ¬xt¨¼óö„|œ!ñònlÕZž¤y;å“Z~quWw@±ZF0w¥VHa1wå>w¢îòBwI+¤’¸7t	Qw¹¸£q€@‚‘>yrx²©ø-M­¦&î%H][ÑÍ&î—o^í>
-î·nN¹Ræ²DÜG¯]ëÎSÜO•EÜ
w¤Ó5Ñ_}¤ª«€ÜtUu{šð³\8©åþ§þÅõvìoÇHâí¼¶Ã¼ýÑ½/~øÃwY™ÒL¼|zÕá³Uw 7qÏƒ`ÈŸù+	Ÿ•±† lÅ"VA m6ítÓÌÑäºFg6s#/ÚLiÄo^S ò¾áó…¼^ßjÀãpø¹”¼¡=ÅÈ1xCëô®sp:]0žPóí**•kîå7{1'ƒw¼@’L‰P^â¼Î<1X¹/Z'ù6J©Ô]^‰â.æeÒúÜyqGs'âŽæþm¡ZÄÓ2’j™4s+³¹ÿ->sGs—PåÅ½Fî|Kä³DÖÅÞ™tmó2=Å0å”^š–oL1€~ÙxKÖ¼¢,î5×ÚŒ£§F§7‹»35ÕÚVƒâNîÓÆ"‰;—“Á »2Ï 9‹»$´½_qÿæ~Ë aØA—ëŸy^jmíiibö‰~®3qð/ŒâžfóØ‰Iö-î‡dHÂ2Â…Xª/÷ªúçÒ½ýgØ‰óvðö×·}ñèÑv‰&î)Ï:, XºINµopW¶öývÊ˜}ÞŒwÉ‹Y!¨Š1‡ùiSÜ1³ÓnÓQ6³scÅŒÓ}³Í,ÌÇ!.CnÁðí33nÊHlDç£¿e1'=^™·/À{•C’765ß®¢R©i$R¶y³Ç­ìí€†’Ü1›¿A$É<)Ø¹âÌ†S‡ŸÐŠw¾Y1	#waŽÜ_‘Ü%uî\+ä/%uî’ML‚¹ï•sçn»°\†²ï)î@×xGÓþÕ½¹··y÷@V¿Ô_›“¸Þî›¾Ú=zõ–±£¨	w“±æ„TÜcbÄ]÷\ŠÜ»nÔßà‡ðCý®ìú,Öñ§ÿ ÄÙKÜ¿_Çåd¤ÞŽ}2¼·ÿ ¾Zß†Ã©¥worõexÒrÚ^(Ÿ¸kÖ=Yf3¡hlq’0	W¹A‘u¦æ Ý'PƒÁˆSRC‰YòRËÉ;M*´”Ù¼î‹®ØiÍ¾î[<„Þ°{÷ŠF-¼»½68ª¨¨TÌ
U€Ž1e!IÉ½’9<²Â”‚Å=÷Ø1OìÓ«=æ·†ÝèíMÜsÇEL(î°BK!å1w\¡ªlîØ
)7wNÝÑÜÅZH4w‰ºâ~•öÙ¹¸“h»ÜÜû:ôÌþ€(ûG î’yšinMPZî%wª×¦žâ›l»Ö6Ýýç×zŠêí)Ê@OMÝ7GÏqW¼·$îàìœ¾g=œ*w0÷Ë8%âþ˜£2H5…Àu§7&z›÷÷Ij\Æ.w”÷ƒ@>â7(î,Š;¢,îÊÞžYÜëPÜIPF!ßþq_êï¿øâ_xo‡ÿí·=úŸ’ˆ{,ræ,¤´}·¸©¸âŽ2Ê,áõØjJÓ>ÛÛ¸ê¶ÑîD6›udžîtÒ’§m¨…Ü{2§pFc³Ûhl‘ù…öôŠÒã¨]§Ñpq4¥æÞUT*`æ^öBÄÀ®ÜŽdÊ®Ó–|-’ŸñžÐJH“IÄƒ7Ñb9iÅÉ&î§	¬¹ƒ»ó)w^Ý±ZFÚ-ê._ÄDN¨¾ÉåÜ%æþ®ÄÜ1çþÌ¹}î³2q®ów@"îÀîYa×°±o?Û˜@ãL#m½¤ìOât=µ¨´ º¬µò‰{÷ínÞ¼=Ý}m¹¸}­cäCÔ ç`Ü.¨y!âŽ”\ÜÊ÷ªÁ¶¥¶þ*î^ôì¯ÿ?ÕÜsÅU_˜¸§#)ÜAqO{xv‹;Ÿ¸ÃËlw|;%qÄõößü
óí¬¶ã¾TX»Dr2¬·¿ûî~ôè™âcÛNŸÎ&î_*®¸SqK¶Å®¡•HÐm×ÙXoÇ}«ÎDÜN±uŠ6 ‰·hözFgÍœ¢"3vš†	ÝzÀá'íYèD2—üÉVÊ±›á_`nb¯€Ž¦Õ ŠJeäÜ‘u/Sjæ3{;yŠ‘°PÚF9æ	 	£["êa,8d ñY¶Xd1w€5w¨;´BrîÎŠ;§îb)ä’—áÅ]ÖçŽiiµÌü"&I·š»l“¼Rnî³×g…C©ð“ÛÂDÌýðá½l‘h=yÙ5Ü¶ÜR°Ž¥˜TÇx[K#H{#ôÈ`ðF?2Ø j;À[;h»TÜŽõ\…Ó©cSú¢ÎÛM°{©&Ë£ÝG^Ý‰§ËÄý(xûó„ìâ^+!«¸?|%GqÇîÂÇ(îH}ÛäÒPœéì¬?â*üTDª©¹©e|Ø5ÜyDà)@^‰ ¸£¼K§á'~_-“~|dö^Ÿ3âB¤¯×#ì½©«fáÅŠyžLóöŸ	óvôv¸±â.zû/?qo·ZÑ¹ÛSûµv‡ÇÂSÀY;ädg^ü^Û‘Â­qÇ²Î—’ó+ë«	ó¼æ3‹ñ‡cb2fÞ )ø)[­ÓdšÒQfHÇ#Ré\;Ú­‡ÕZÚtœ÷Ã$(ŽÛé-¥z»ŠJ¥ìPEœ%Ny[WÈÁ§Å°Œ¹è*½*ûxÒf]¦òqP”{#ì10ÉI<PIâ.YÜ9sW^¡Š3÷ä}îò™;VËìZ¢šnîp-îÜÄ]øAxnoq¯ºú'æ¦
»7¶Ž¸†úz:L)6í¾ÜÓÚÈ¤ 6Ó2~L*îÇqàîÆååéîS˜“)ÞÎT©¶ß¼Ùj®Š;Š{ŽLôšúˆº×wõ÷tN¼Jµ±çÊœ±‹äoŠ,îV^qð•Ìâ^}(}Þþcôv^Üù|û¶·AÛ‰·¿³}ÇoðnÞaxüwîìwÖäÙX÷X×Ï”ÅýÅRˆ»f%ëÀ}!˜¯ØW=$ƒ?³ó‡fÙFk´W¡i—’‹’¸ã0^KFôæˆ;Á¶ò…>¸‰…×ívgp#¾±2‰o85ÙÅAMº«¨T@Z¦\a‘¤3óàÏ§"NoI¦b4³9NÐ>Cêùv-~V™â.šûy4wwˆ{º¹ÿ½¬ògîò'T%æþ#™¹ê.Ë¹ÿ‡dæÞ@˜ÍýY¡É]T÷ÃÊâÎÝÜÆÔ45´¶æ¿=ÙÑjjlrCn¦µwrn˜Ï@F&“¸›œ»ŒEE¢õtäj[ÛÍ£DÅó÷ª¸éoaLWú«HàÝhì_j.pâÞ2>p)­¸×Õ=nq¯"ÞÞ0ûß¿¼]>o½ö.ÁÒÔGÛï‚·¿óöç÷îxïÜg8¼îx÷ÙLì;sÚgÉ î_.…¸›}~&ðv‡'¤V<dÞˆGC_tÝ¹1¡¡VÆ±C³-I±˜•béÂ|^«l\™Ù§ÜöÐâü4É{=±¤µ}a&âfO¾f:†
ú¯£tª¸«¨<>ŸmìžòÄdÐÛÏª"Aqãá4”üSáÌÌ$½Óîñ¾eQâ¨;Š»€¨î
Åbfeð„ª4,ƒ­Rs—íP}s/ssîxDU²ŠI0wˆÊtÎ‚¶µ¼ºãZU¶Í:MÐÕ%<KïÕgw/¥u˜®†Ú5—qÌ8Þ6Õ:2X»fìÑO‡û×q6¦¾ÈÅ½æÔócM_¾:©gŠJSß¨ÄÛÏµu\é&&ŽâN¤]&îÏsÖÎÏÛQÜá&«¸'(‰ûa âþKÄ©éééï‡YùÐÒxg×\¡½úe—TÚÄý$O>â†]Í‚[Wá¤º"‹;þ÷F‚µKÅ]`EŽ¥â¼ëdxomçóíÛ÷6¡PæÑÖçÛoÿüç[wîûyéÞüð½M³ü‹‰Ó§#¾’”á7¦
ñv2lÇ“©ÅvDYÌr¿<I‡Á¥l!®`&´˜Y+Ñðºs%nßð%t”$o®ÃÃª6»k´»ÄžYáƒˆ+T-»Ž¼©–{w»¶¿b{š—QQ)7Ù¿é¥)ÑÐÙ“ÈÁÛqb/¢¹‡w},y6'XéwÌcüŽÀ:a‰;ª;¶¹c)$Ù Ê›û·%æNÔ]y…*äÜÑÜw¥e°[‡îŠ3wÊo˜=>[Ëùûu‘z"î‡×•½cmèJK*MKØð·â>tëø±µ¡‘9¨nœ[žëo ²‹;ÈñèÈ”ñj_STR½W¥÷Ñ:¦îw$›¸#¥w¤RÄ¨œè…³ƒp:Õ5pä†ëJOS÷©þ"‰;¼DqªÓ7êq@qÏ™<ÄˆûI6Þ.™·£·s9ì“yúdîmnÞÙÜ|pïÞƒ;÷yY¿ÿù{[¦pRŒ%œ€È36§írq¾\q§£þ,âîp´3í¡UŸ•÷‹w!äñ"öˆ;¸’Hø|nm–ˆ»ÍFeúÞº<_‘ÕE¢I‡ÕêYXŒ%C3ëwú»Û]ƒÝ5:µYFE¥ìd7ç`Œ):†höŽSðR™{X©A^ö5SÙw«w1ˆn8ñ!¬<qa—¸s)w4wŒ¹£¹KFî¬¸_qÄ=}Ó;b+äë»ûÜÑÜ¹‘;9¢
æNTûñòŸdä~C÷Ã™ÄïmNe)iÅ·ÀS¨µÇo­AÝã±a×`míÚUãµµ\Å½û¶¾yfýÅ¥ñÊ	‰¸wO/ß­QÅÅ=_ª†¦š§Œƒ\¹ÌþñISAŸ˜eW9Ä½þ±‹{¿véWØ‰9ÎÛqàÎKÝÞºwoó‡Ÿ÷‡l2…cY°œgNdÜ®$î í¥wû"“C»n½+Üx,~¯fð‹¥CwÓöx„ÒJÏ¦jQµ3cµxˆ•nDÁØíî S'tfWQ©\´Šÿsn8˜âfŸ÷Ë›e»µø9<«•*b•ìí¾$tû:)É	ãòŠ;š;ª;'ï_$hî îØæ.­sÒ2Xç.›¹CµŒ¢¹+äÜ¡[†5w®\æw0t‡;ÌÛÉ³µÄâqâN&íäB°tk†îsË¦Ì'Qû–›¡AFrwÕ6.{.Ž¯®ñ«‰¾Á–·$Þ~À:H¡²ÚFRLqI™¦A»Ÿþ(À–?N·ô\«‘‹û¹Ìâ~
8! wÈ1*äšqGu—#wc/OÆé2ö@.
¦îCy×wBéùÍ§EŽð˜NÊ©«Ci—Ã«88~Z6>­ Rø³¢ª+J{KÆ‚È¿ ¤ ^bòXGYâ^Ï×·sÞþcì”åÛ±Oæàó­­­{ðóŽR–­-+S^k;ÜÀ:Ñøi±	ò« 'í¨íèíEwzÞ›{?9b ÿB8Bñ›“·Öæ¿IÞ÷®¡iéQ¯ô%N”™Ò¨»—TT*eõ£æ­ÅÔÍÅœû±YgQ’çqåÑ¾<,CY˜JÅë©LTÉûÜQÜQÞÙCªé}î/©;º;˜»¨îßa!æŽ}îÄÜ­hîbµÌEÎÜ1-#1wy-$¶BŠµ³µ íì–@wNÛáVwä+ä²aÀÝú½ÅÝÔ××b2IMÛ47ø×¿ñÌ3¬¸ÂÕ7àZ&îD{¾&Š{M›‰)S·Nqâ~™÷›=Ìäh’UÜOñœ@^"ˆâ~<q¤=î6§æ-îà‡Uè¿O?]Bq>HÿìÙíâ(Á«-yfÜ{ûzšôsx?øwž«¸sW/î€ð `µ;P‡Þ^¸¸×q(‹;î]Eq¯ªr2¿I·£·ÿ3æÛ¥Þùvxxÿý·ÞÚºâm¸¿óð7Î/Önð‡gRLØ]H€´Ÿ	ºOÃVz{ZH†{žËRàžwÂ=’ãö€ÝÇ¹Ï'‚6-eƒú_Š†‚q4®ÉO«áÈUœ¢…£­0ŽÇ™»ÙIá+êð]E¥rã2ˆ-êeŠƒeFù†|îÚÿÝHìòv-^<…Ç°âÄ‹;§îâÌËËàÌ1)œPåv¨âÐ]®î—ÁML
«˜€ZÎÛ»fÙ“ª×w‰;€Þ.w–g†'®t4í93mé€ú”$öÞ2¾ÆÙAÜÜÅýòèµ^¦4·Õqs?GFîçn7µŽ-‚¸ãÌ½¶q?\Bq?Xq?rcØ8ÙlZrqEìÿÙéšË¯Š¨±wbpb¹cn œâ^_vq¯ª:Y/_»„ÞŽ1©¶¿ý6x;§ío½ù&é’±ì¼ñôBzIæ=w,á…ØÝó!fÁ~!–‚¸;v2o/‹¸ãÒÔœ1Äâ!rˆ6n¶EÜZÊí¤ÌNë8*ÏAùÅïµCè†¢(¡Í+$AæÅWÀÜÕ‘»ŠJåš;b›·EÛ)e/Ìó.Íï7¬cV>«–‰3•ÉªÂspåˆ; w‚DÜÑÜÿZnîdä.ïsç«eø>wI\F¶‰IVèŽÝ2hî³/‘›ë—Q÷ç2Š;¨{g¿±¯uuO56éM¦F1ñnjjnimîi3ãÅˆÈÄý˜‚¸CCã¥K€©mô/î¬®ßš4µ]®)¦¸×ÿ£w``bª¹ui¸
.Y“Ñç×Úp`|n¸þVÜ«èíü¹Ty};€ñv"îì¸óö÷‰·_Üñ“„û¥0vëƒÏî§rË"yý¤þñ“ðÆ«B–Õ3vOÈ	ânsÛ^Å´½äâNmXòé«txüŒ#09`vÓ(›™rÍ:qÔTpÇ‹Ž¦¤S{€íŒ£ð8e×±kZUqWQ©à^H„Š/0ûÃ§²trýýˆ‡)œÔŒÂ÷å×H˜©D¢JÞ^~qWÎ¹ÿ©Øçþ-Ì¹\Ì=£¹CÌ]¶‰	Ô]È¹¿ÇÍÜß—˜{Æ™û¹¸Ì/ ¶\æwDÝá?q?>ËÜÓÅà$‘¤ÛùŒ;Š» î]Ãã}8V—ÒØ¦ojî€ŠÀ¶¶¥‘qãí©žÉ6×šh©(îµ…Seâ^3¶lÒë™0Ù}ŠÀ*81÷±Þ¾›55êÄ½âŽ/OMÜ“ïã=yÍÜ—:Þ(µ¸(åe÷jðvRßþ ¬qÞ.óv÷‹wH‡;Ü-–û;êÈ1g[<¾»ŸÄï¾úèÌ…3ó–°S\˜
ýírqŠ*îîP>Á‹•iÅíp„ÔFiÀ§5öÇpƒóÅÝLïBÌÏhð„«F]¹¤¢ò¤Ý‘•P;S0ÉÜk(³Oäu>¦PíŠÞŽÈ‹l™Ê#¬ü9+¿¼ãØaO¨ry¢îØ
‰ibîønw©¹ÿ+1÷“ˆ;æÜ…VÈ7si…Ä™; Ýÿ‹QÅ±;¨ûu1ÀÃ¬¸¨ˆx*U)õÞÐÅNÝñjúVSëòû„qhpíÖ­µck®	ãÄ-˜¸ìIÌÖbÁÚ‘¯±œ ®Áž¦ÒÐ:v‚wàÜhw÷•–Û’»´UæO€4q?…ÈÅ·0Õæ`îœ»£¸gYÀ„²Ž×hìz;±Äò‰;R=8<P-”ÍÀ~®9ŸÓ\Þ÷ƒ¹-`ÂG £¸Wr5ÐÈyÄß­ÎYÜ…«CøQq¯?4K¼·ãºÔ`ÙÝÉe$9™‹~¸uß¿ùð÷?ÛÙùø{ŸYÀ
õ‰Þ™(-ÿäîê'?=÷î«/Ÿ¿{áLÐáX9ƒõí í‡K—tveò7æUoÞîñ0~_Ðf6Û#6qEj12’ZÕ‹]‘ä]+‡k4êÒ%•'ÀÜwÔS`Š}_;“Þ&˜d
Á;s@ÙÛ­ÌÜiGÅ{;þ›Q~qG²ˆ»—‘·BŠ1wNÝ¥9wìsªeH·ßçŽ'Te#wbîÒr¢î—ágî$*Ó?Èò¥ìâ®˜zÿúš«­o¹ÇÔ´ËÝõSWÚ††‡o­µ çDÖk­«Äýë€(îØ##÷«“¥òöÔtMš¸wOß¾ÝÑj<WLqjÿ(Å["'†ŸjÉÇÜ''êK,î0ô®ËOÜ	Åw îP['óÙÚ%I»|àþ6žK}ó"xûl=xxéáÎÎkß}í{ßƒÀ{;³°³hØ|àev^ú!±ùÉÊÝóç/@`ïUx.:súŒÏ}ùlqGk/®¸;¹¦ÛýÆs´lÚ ÓlÒâ“¾#-Å“òJ!ðyuë’ŠJ’ùkêˆ/_w·V¨¼¿Fë}‘z*Ã6%oÏòN+SY„”žÊQ÷Y¤ê~ƒîÂÈ= Š­ÿHfî¿f[!ñ„*æÜ…ry¡;îP•ÔBòâ€¸³µ</ÁãlTæð¡zR ~EPDwÖ*Ó-^L½7ÍõMµê›MÍMúfHÇ4ëÙõ—CƒÇQK¹!;{%Š;¼.x{Zs;^oobJÄG”Aq¿9ijnžTHÊä(îˆdâ.½Rý™¸ólÖww^³ˆ{Zež>òMÂæ>°ÔÚ6xEŸß	ÕNùýØãÞ£¸D[ß;*û&Kuš§scâ.‡CÂ;’|š“‡—üÇ?ÌÕ@âÖ%…}©?ÀúvÌÉ€·sãö‹?Ï—^»ôñÇß…oËýÓƒvæ~ò³Wv’Ÿ>ð£«/ÆD‹·„ÞùŸÂ³Îy˜€¶_xÄ}eÁç$Ö~Vªí/²]Û:ned´ûhëñÊêð2–ÅÅ€ý@0LDÌÜ<b¦uÿÑ.<ð®T¯¥Ôu©**OPÐ±Ï'½9ÛÃ	:¯m­Hö‘r<Ou;±²þRÐÏT1…/*[Üq€TGîrsE—¹°3÷³º+”ËüLR.#h;¡³Î*î"(î ùÝµ~×øÈÈÈäòÈ•¥É‘¹¥ŽÖžÞ‡Aq6³¸§§ÄKîí©¾['ÒÅýD°;ÆÎ©â^¸¸ÜKÜo5ªÃS-=z&z‡ëJ.îð+EÜëêŸÃ:…µKJõí˜oçc2<ÜzøÆ¥K¯½ö]¢íð±ÙîÝüô•ÿøÓ4%¶|ú™•oŠ´D?	„ú—çVÜÉÌýL0vâÞ¥r‰»òvC¿×/ÞmÜë”KÉ,@¼ÝHPtÐi_j°ÍQGQèÛƒ½4Ú,4#Ó
â®Q+eTTþŸ½³jëJï¸pIÍL›u:OÏÔÄévÜÎx:ÍÞÌzÇ›LÒl³U:mÓÖI3m’©i/’SF²-@­,°ì€BFÒfkŒÄ‹¥;ã1³cÿàáO¸úúœ{Ï½Ï=GG/(\¦÷Ã”ññãïù>UJi§ö®Í¯¸¤â8"Ñ´¯øÂ§z{ÜéHùÁ„ðÆÇü3–ÏQ}óvnl•‹;Àˆ;@¨`î îPÅ´š;³DUÎ¹“ »¨Ð]´EÌÝ±\†ª;X2,bRTœ÷Ã@yâN¸zu(4zø~hìê„Ù§§‡ÀOO©YgÄ¥^4q§ÞÞ&Äêýc¼¸·=<TRÜÿ´ªÄ.Ô€¸×…Vûzfn´KÛ¢{z_ÅâN^wâíF‰;\™w¸„âÞ@¼½^ïíŸ‘:áÚ¥¿U½ãíèíŸdÞâ.{û[O~Ÿy¶uîã³g!ë>®—ãã©GO–\½®ŒKòÌŸ>½	) ‚2$'‚‰hì/ ¸ï®¸»ÓãÇ”gÜA/-E£‘^Ò!ë˜êò{Ré°Óé÷ùüàÎ6§×/›»•ü±Ñöõ‰Ý@Æ]k†´˜˜˜ÔøUw2;™ê{o ÛoSÅ+»úF¼¬qøÒbÐÂQì?½HJUCT0o¯jq”ªØ-ƒæNäÎÜÑÜ™>w~Ó'r\†k…ü'&-Sôˆ*šûoÁÚáå»{o€`*ÒÆýíš¸ 4y‡Ï3`E$º=êçÑ£ßœÒ}\¶¶³€¸
ÄÝày{÷ì­c:q?8Ò|gµåîÍƒyâ~0_ÜîŒ¸#•ˆ;R_¾¸{"îP)ÓÝr740ÖÓ—“rR™är]=å‹;ûrG©¼cª½À/©#€·Ÿ, îõ]‹ŠN_
rƒ°R†÷†:¸UÏ®]Boædð\ª<o—µ]ööŸ‚·ƒ¸?ûÝ“·Î}üñãg.XÉíõ@{bäÙÖæë6×#‘l¼7qš„dàIGõvrV~>ž„BÝ—ºKânóe¸ILÖSÔÛ£ëóñ<mOðÆáˆ$Ò1¿Óë&²îOn¡¼Qmnô{¶È·[µ_´nòMLLjˆòÛ¥œ¾ålzq2'Dó‹ëÉ°»¢o^¡èÓ©îH$K§ç±ó÷ [}ÞŽ)¢ê÷?,$îŠºã&šs‡ªhî îx@Íésÿk@`î…fîxBGîrZF©…„Yûw÷ÈkZKxàö¾ÞÉyÞ®
ºlíÚˆ<_Üé5O!º8»*©p‰ü‘áiRq§¾NßŽ|}×(oo¹v§YwàÐÁæ;W.wŒ`¿#õv€ëƒ$ÞN¯UTÜ_(%îø 0Ú¾mq'JRYÈÜe;¥¾*B¯ó‚£¥;!îÀÌèjkûêÂèØÃ©½½Lqïº|cHw¼™è É¿nÿþ·íÝwë~|R¯æhçõzÈçàÍÉ“MœÓç•E¢¸Ã7†ZO¼Š{Ù–
u2˜oÇ>Œ·æíœ·ÿìí õö·ž<m?û8:ÕßühsééV$²uá=9ƒ7™ÚÌF7AÛxÚ!Ú®ˆ{6±!{;ädvWÜ½óvÜå÷¬Dzéª¥äF|iÉ#÷Hb2ãš«wÍ—ç×½N%Êâ]^’ÜŠÍ
Šíq÷[vøŽf&ÆÄ¤6ÕÝZEß¸°ë{³‰¥ñÝ·ñù‚yÜ]QÚÜ7ª°O½½zÜ¨»"î´Ìðjîl)ä›j¡{^Îý‚fî$,ƒ3w¹cZÃ2Ü&&¶»eXsÿê¿áˆêoIRæž&î·Îá¢æäðVh—ÏáT^Ï‹"ä”¾K#¯½öÚÑT¨´ƒ	öÀ¢|ƒÈ=9SG¿ù ƒeT	?¤Âª»’“iÎC§í
/w1LsOiqG]D‘T
Ì•DHyCvªÖÛòô?PÉ«“ùc„k•îèƒuº¡…öÖKÝRYtO÷Áùy	”{*ßuön‹ÿ"¿÷ŸÏï;ùœJº¬îõ íTÜë…hÅñM”¦&˜äÃ_}é¬½hRQ¶.qÞŽóv¾¿]¼w‰™·ÿTñö·ÎÉÞA÷§/^|ôdsóÙæ{¯¿þàô£ÍGÿúèŒ,î`íÚ¼ýU_z™AòS‰¹£·p·//q…gÏ¸Ë£È| ½\ðnïJ"•‰G’ci-œŽÎyÝÞ ×	Qô`Ð-ïF²XAg‘åK•çÝMo71©ÙSª†ôMZw>½ãÝXL¬\4#˜›òV¢óÙ »ø?"¥²ïË½ÒÞ3'èÛ©qØ6w,…¤æŽa™÷¨¹ªeèÌ[!É&&aÌýo¨¸«9w¦’ÆeÀÜ•õ©:q'/ªµ“w*w9Ã]TÜáó²¶óâNh¾ÿ +'/îŠtÃÈýÎMâíä½¢â~°Å½¾êÅ¨»›“ZgCÓ—úÞm+ç¿mË•aðö]÷ú’â^Ï\«bqW·¥Òúvìoç½]pÿw¸Ó»ìíokÞ~îñÓ^×³.^<þý÷=zzûiø=Ðv:p'ÞNƒ2ÉÌÛ÷BÜ‹S|¾]m”qæ³q—g
ï9G ³îîqÀ…Tt1ë´{ƒ±˜S¶Ë£'wÿ…{‡À®I3,cbR«§TÏuc`óù’IŸ/ì,1‚ ÃŠbä}Úç‘ö˜ÜÚžx;b-—r§âi5-CÅÍ(fî0r§ijî´’ºÃÌýCÕÜ±ÐW1á	UTwuæŽæ.÷ÊÇTÄ‹Ü!ïN¼àO¦ŠÅ÷ö× ø¾¬¾«NO¼>MŠûïÛ%ÃÈõÝ:A@Ý¼ys1ðf±¸kÚ~ˆ wôvÄ›Üõâ^/w¤/î/îHèRK.w·cbblláR{‹T’¶‡¡þ}"d?çÑÄ}¿]@¾€¸Ëÿfóììd]vÅï‰Á3œ$hâŠŠ{‰ÉÐy;z;£íüÚ%¾¾]éoÿ5«íÔÛÏ=ÞÜJ9~¿õÑÅ÷ÞCm?sFóö7ÑÛ_ýù›¯²îTÚÉ³— (c5¬R¦—KÆ3‹é¸g¤ôÏ»âÑLtqr%âq,-f“n«~Çyíd$n³ÚIÇ[Úk·[íæ®%“Å
ìÙ73ÌTívÛvËìƒiOqùFõ‰;®abÅ«ePÝÑÜ¹>w0÷e˜;7tÇ¸Û-ÃÝ?ÓÌýÁÜI$QwEÜQÞáùËw¼Fž¸³ú
‹DO)4^àPóíÚôöÎ¯uÒ®Äé¿½5Ò¬PLÜEÅ0"î 
¦Æ®‰;R‘¸×…®u¶æÚ/Oô??´pc¶»´º·tö\m‹;¡ðìy—¹‘ºËï ×¼¸õ<ÏQqGt…5ÄÔ)Œ¸š¸uÔÛÕc©ÀgìÚ¥w˜q;Æd¸q;õvìO¶žþÎµôä¢êí¨íœ·Sm0ß.Ü_QÀÕKF‰;ßáîÊJu»gry#Þ;	÷¸GâóÑ¥¨Ï›L§2élš4>¸c>¯•„càçÚýÙùe·aû\l¦¸›˜˜ê#s¾ƒAoó®âÏH{ÈŠWpkIÜNÜ6æ¨3wìsgÓ2sçO¨þƒÐÜ±[Foîê.¦£q§ê¾SâÖN/±âRóÄýÖ%Ãr2`ƒ'8q¿ßÑqÿ"à%Å½Ù÷ÊÄíyØ×Ú~el&Ô1Ý³ÚUZÝÛ®„w²€©)!î ÷:]¯LÜëÕx;î]¢[—"oÇs©š·ÃôÉÐƒ©[[OŸ>}¶µµ	1Ðvðv%'ÞŽwZ'³çânK®°÷•¸KYñ:>ïÏ»¤@”|À•È®G=S©¤˜“át–8º/1¤)VwÐ·ía5µÝÄäÿ½ºƒs[Ã¾…àÖ&ªàX*²'Ï«Å—wZ-Cø·ˆ‰5wÜÄ„Õ2À½¹ŸÅ:wº‰‰=¡Zp‡*ÝÙ>w¥Ð]¿E²2·u “óê%•vÎÜòèÄ]Uu"» ñ‡Fo~oÜÀ½uõÉ ƒw®Â÷41?qW8 ­£ºÓ#ß™
ÄÍ½°À•LÚh¨Ïv"î<ûóÌ½P/McÿØÄÝ¶îŽþ¡é‰Ž‰2²î-7úó½FOò4Êp‘÷ýx4|aSøñ•ýü–öPêš„0¥îäúrz;æd˜u©Â}©ù÷Oˆ¸ër2Ÿ<ÙzS÷ÿà½ˆ;h;¸sÞÎ-^‚¤ŒV(ƒÒŽT,í<áh/ãíKqÒ'“ëux&Ã¾¹x jÜ—z%0vçœKÊeÖ}N»ß^Ci‚}ÎõªAùå¯ÅÄÄÄ¤ Ö&ÌÖÛ[×v±¹/J{DZ”ª!q‡WxDÝä]–ß°ZÎ†eD‹˜@Üuæ^¨²¨¹ÃÐýsíˆª|<õÞ=väN_vRÜ÷—ïq?tëÁ÷w¸·]»¯æÛ‘fÐöâ.K;º:Šû1âíFˆ;R«âŽ÷t·_›î™…z.•lüìœn¬TÜyxqG½.*îüÐ¼÷:¡¸ïkÔb2”AoçòíÔÛ¿Ðæí˜ox»ÌYxªø‚2²¸«Þ~Z~ZÁ H; O>x*• ÏP»'îv6(ã$RŠÈGÒÎÌJÊ5p9¦\‘ÄF:q™ÄzÒuíN¿Íé·x£Ëvúï­Á,,&7111)ªîÖ
U^ªàÄ,jÅæ¾á‘ö€ˆOøìÛÈËÀŒjï?Š;cî ÎÜ1,#ÇÜ.çŽå2°µ î²¹r¹À¤eè*&eè®ÎÜ_¼‡ÞŽhâ®ˆ%æ9J‰»RôXÄÚ±¹÷ëWÚZrÆyûÁ(îHYâÞü²NÜ›…âN­Å£lq§”1r‡7Ú‡ÉHx¯ÅõcÁµëfF/·võÝí}ØU²ÎýJh¦¡A$î¼LÐÚeÂ8MÅ½Q}liÛ&ÒDà¼wëòÄû;ÁXÑôvÝºTZßþŽp]ª6nÿÇBu2 xûÇ <Gœ%Þ~^Î·ÃÀ]pÿ9w€­“¡Î€´k`í@0ž“©@&ã’~eÍâ[‘\^²1u)µ´”‰¸Róóé¤×+MmP¾àöo¤cVZŠfOfcv‹‰‰‰I	e³mÓÞ­2ÕQvƒÚ^¹¹W¤]'j”âàåšw€ÆÜÿÄ]Ðç~žÎÜñˆ*5w¬…ü{ Ìººƒ»ÿÆe>—ÍÔx{ÿíÛ3ð¢RO^QmGvFÜ©³¿¡º²&î·:%ãÈ­^?â^ØÜÅýx•ŠûáZ÷ºÆþ†ç¯.tæºnŒNw\˜èk-õíÒhcí‹{#Ù–ÊÅÛbÇR¿Ö·ã¹TmÞÖÀAö‹tÞþ: y; O.²·W‡¸Û×]2žŠFð¦WÊ$-þ„’îòÆÔx†DÅp8I
m´½86—$k—äÚ3çrÒ¸›˜˜”íîÖrgôp]ÃìÑè½Oâ<Ê¤´»xÖDþ-µ+î&w€Šû4w¦Ïã2üÌýC¦[¦p-${DÏ¨Rs¿M™aìh{qq?@Ø–¸ÓS¨úïà6É8Z{NP8UW/râhQ™—_–¯U•âŽ•âpR1Tõhæ>ãÅ§èÄ½V©N¯vµ]ê	45…`è^‚K!NÀwí±¥GOú#Ùä•¥pàrýáïA¼]·c{» ÞŽk—JÕ·ãÞ¥³0m'ãvÎÛÏ¨âT¸û2-2Ñ)xóõ‹{Y^îq¢s‹pÑ3ïµøÉ¶T›ÝJÆH6¿\Ýí¶ÉIgØiž511ÙFhÆŽV+^›\ËØ[a3<è#úšµ]ËÄ½Â‡·öÄ)…dÚeÈ"¦_ªaZèÎ÷¹ŸEsg»e>Õºe> qÇULtÿ+\¢Š[TùF÷ÿ‘»2qo„J=wðpõ¥´¸ëw¢Œ¶¿Á*³¦À÷tç$ãè»U@Ü‘bâÞ_Ø¬Ó
eªFÜ@Ü‘*w¤îù†¡‰Ùîöî+¡þ¦¦áéË-%fî³ÃÛwxµ+â¾â^@ÔÞàÖ¥¼u©_`ûÚ±ÔOuÞþ6z;€Þ®ˆûiâí ÊÀSŒ¬íØ&ƒâOM»(îÞÉ)I£7á\Àáxv=LfSã0|¦7Âþäd*5ý¤³° ~ŸB3v"òð4ìôšóv“ma}”w4 6Ä*×¿ZÉÛ]RÈ2ßZñýÌÃ—vWV¸ÃÊRƒâü„š;—y“ UËÐ>wöˆêGxD•ïsÿ—¨bÎÍ]8sÇ-ª¸‹‰ŽÜgôq™z*îåOÜÑQÅâ®œH}I›m£¸“77¯uIÒÞsˆw¬uD8q§ÀXã—o5›ÐªEÜŽÈýƒGªIÜ‘†ÐÃÎ»«íCp“ÇfÛ¤¢´-ô—-îûÀ¶Kˆ;½HÅ^oKÜ•¯‡:É:JIq¯?|ŠxûW_~	ÞÎÔ·£·Ž¥2ùö‰·œ·Ã¸K˜HYÛÒ'Cà¼
ed~ìž¸¯$ÇÊ2Ìß§zë^·u#š‚:w‡+“v’PæF2ìµÚìø[È½¼¸ìwÛí0ƒ·Ã{>Ÿ)î&&&•Á‰;ûn[dq)·Y	;§ÏîÒÐ=á¯oGJÔ¹¨î„W ²P³ðKªî4æŽ3÷4çN¨jæþ65wyèþë¼ZÈ/0-(æÐMLìÕÏéÌ½ÀéT*ätâ.êpÇi»HÜ_“Aoƒ¶kŒÜüv¶]2’ÙÁfŽ‘ëƒ#x#¸[t\j;|æâ08§?¦‡¸Smß†¸(Œ@Û‘F¸ó2Û a¸óîÎ~ àõûCg{nôµ÷õ75-ôÉêÞÚÞ*	éš˜)GÜåûøcæ+ñ"ÿ)b®¯”9¢kioêØÞT‡hFONUæå¯%§RÁÛµx;ñvUÜ±M†[—úEYùösÄÛ?¦ùöóŒ·3SáéÀ;Ó(ó#Ðv…?'¬Ý
ìXdÜçR3‹s+’'“Iø,öØzb	fñ™õl6¹ìó†c~·{ƒníPSxq1ìwº-Ð/C‚2¾˜ÛbbbbR›X‰œÛˆO²vI¤óø•›û^ÝW’xsªOÞ¹ZHŠ6v§uî¸C• âNgî¬¹ÿ‚1wyäŽ«˜xsÿ4¯Ð—¨âÐÍÓ2ÅÜ£›¹³µ2ÔÛ	e‰ûQwPvw}•L3§Éƒß^†=øFréþHzéúÍ;"qGÔ‘;±xYÜ_ÂEQpø\;^(_ÜƒµöRâÞØ$¢Ä¾"`÷Ä?}uºczúFgëj¨©©?´0ÛÙVúrbsï(!îÔÑÛ›€"âÞ€_#wx,åÓ©MUv
Šû~ú<áß
0&ƒãv}Næl,ã\ê'ÚÞ%Ðv:o§w½·zoqç½Çí“Ñ†íúQ;²#ÒŽA™qôöÔbÂ%'ÒsÙ°Å›\ž[šr¥²Nolm1öýv«?úØÜvK0=ç“Ï¨ÚÝn·ÝŸ·YLLLLj¢érP‡€ïX*¤´*oD$c‰¬—u\¶öÅš;¶Bj›˜0çŽ­ùiì–aúÜ…î¿¢âžgî–ùê¿~Cwq¤:p§šY©¸…Å}°§K2”ÖËàí»-îGMq/|ý†á”¹_ëêœhh˜¹Z¸r-ÔºÒ&Ž9Ý6DÜë€ÊÄ½Ž÷ý"q{;Ö·¿#ÌÉü3·/Ä]·3ýí´Rë“oØy;€óö½w¾Qfje1á‘\‹áX,èµ¸cs©Hbmc}ÃkÃBT¢ç0q÷Â¨]éY›ó¹•ßF íN¿Óœ·›˜˜Ô>h”»²üyÑÈ¼ŒgÎVà–Ô°¸cZ†wÕÜõâŽ­ï)…îZ-$£îÔÜAÝ¿ÁULL¹mtWâ2 m…¤î®vËhGTi­z;pŒ\¯™üÈP®¸ân¸··ô=¸©[zªEeG‰Å]¶u€÷—ˆ·+Ÿc€"îÈÎ‰;Râ.¦¤¸ïÛ70=16<½ÚýpˆÜ¼þáaˆ²Ot
‡î­‡Qº‘Òâ¾ƒ2¬¸7Ö³«R&¥we«þ1¤)wBã¥½x;ŽÛ±¾ýWØ&“,×.}ƒÚ®x;±ví\*ÄdÎSm”q»^ÜÑÛQÜ1ßþÊ.Š»/£ß»”pÁ½ßõìpèt9BþÕ7ŸöÚ¼ð®ÝçÇà¸û“ë$ÓîzÝþ`8èw»ÍF¤¼xŠw²W2†©Ig¡¶žšw:s'sô¹ÓB÷?ÁjºÓ¸ÌÙ¼%ªØçÎQÅ¡;Š;º3æ®4ºY8è.òÌââNV'îoGkGMù¶[2\ûì­æG6#"q'U2òV¾$È œpgh“r”?{êh¥âŽ0â^øp*"²kAÜÁÜ‡Æ::F¶AU»6ŸÁ‚HÑ	Uwís_ä‹;;w‡w ‘¸ë¬ýpÞòTUÜIs;˜9fÛõƒ|å>ï—?  	Z i{ûgn,KÕådþ­$9¥Næí¼·¿…ÞŽ1ÌÉœ!(u2ÄÚ	úH¸+óvãÅo”•¨©xf)¶€‰Çb±å„Ë•™‹ù²ËNg,hµøý6’f·*ÏúîØ†ÏïLÆü±$¤hLm7111©dãS8ávÒÞ+‚ûmQ­GTý	U,—ÔB²qv‡*nb¢3w>ç®ÝsÇ¼—á{!±\PÊe@ÝUsŸáÅ‚2yç[eÐÚ©È"¬¶#Ç	‡¾î3rÚÞ>Ûqý¸ŒüÑÑ…h[—doÿ?öÎÀ§Í3¿ã†£sÓÀ¶©IK¤4×õVVÚNºu(Ò¤J·­º›{ºµUo¹I·µáÀñ‚„òb‚Á”$„¸z[ ˜ 	Dý_à_ØïyÞç}¿ïóøqì8v¢çƒ1ÆN›~üë÷ùþ>üðC{mª˜­×{Ä Uq¯ÍÔÊS÷Æ§¹ÃÐ1`×ˆ{€È)î5à9Š;vBEovÏß\î¸pvÄ÷µèrîm3Òà	¼xíÝ­×Ñ!ål„¸Š¶ã¡öàˆ»ý”ÃÖ}GÜñÄ€àmqçÚ.ÚdÎðH§R¥c©¿òÖÉ¶ëëÛÝs©ˆ·³m©èo—÷¥"&£zû_‰”æíï1t]2¥Êô»=]ç'ÏOÍÍÅh„ŽÅb‹ëëK«Ó³sV:¶Ra#õˆ¦¡;5ÉÄ“±Íåýþp,IÅÂ>ƒÁ`0hîåW÷ó«áÜ—]Ü1s's—Ìý_aîŽ¸‹Bw7-ƒ ûg:sÿiæN°‘;ÁÍý©Ðå—FöÊ"îƒ×4—1Ü¾Ð6^}<‡¸< w^Üùùç¤íyÄ^éµ¾¬â^µwÅˆ¶Ý‰Žô›®‰eÝBÕ¥÷ŠbÅ½†È+îÂÛÏž­K¨ÌövBÄÛ‘“Á¹Tô·‹x;úÛå|ûG/¦¸'o‰Ô®IZÚ¿M#ôdØOA™Øk’kk¹:Å`ÂöH=D·’V<n¥RT‡‚!jo§·>ƒÁ`0—!ÒS¥Ìº¯?ŒçÜûêÛ{âÈÛmXT†qWÌýOZuîh…ÌqBõ×¹K«˜~—³Ðæþ3y“<sgRžÁÄ®)y»"îdµÙâÞ¤÷ñ;}å\—Úz‡i;¨&\Y¯¾t	GíÅ¤{;Cw7¤>9Q~@Úž¡±;}r1â+î„¦'R#íª¸Ã4K)î?²É'î 0ÐC¦¾Ðúàf~ÑÑåv]4—¸»é—ªBÄ=`SW¡÷WlðÈŠ/)ZàO4Hˆ¯ŒÇ—ž ˜¼ýgx{¾úväÛEŸÌ¯5ÞŽ{vŸö.©çR?ÅýÐ¤dÊ(îþí~1nï¿r–uAÎYq~ÕZ½qoÎçgï„(×²Rq‘IÅ¬P<K†¨Y&QV&fö¥CQCw^,QÃÌäì\žoþ¢QxÐý=·Z'T³rî:sÇU®îÈ¹«æ.Â2jÎý3]¡;Ô'T	¯¹óa;Y;w"Ã/Âß1s'gÏ%î’×Š6¸ÿß…²Ö@¶_?î-f·¢È}|0;,£ˆû_f‹{#ÿ9ó‰{†»;Ò2%w¢JOàqâ*ˆç+î:v]~Ð;‘ðüþ¢CÍÙMüÃ5 (q¯©¸Ó/CÂ=¯¸³Ï··7UèÅ¼ú*‰ûwòvÑ&#ŸKE$?—Šúv'ßŽœÌ?ã\*údoÿ&kï‚2Þ€û»Æí"ßîÌÛùÖ¥Âãí¾¢I‹
÷‹÷6ºv×ÓY¹ß§7«ý;iƒV’ºS‰;Óx
ÌXì4j*'o÷Ó=AjL™>ƒÁ`(ÎÜóÖäÓÛ­<ßyO‹û{jµÂ2XÄ„˜;!åÜIÝaîšœ;Ôý_Pè.†î8¢šmî8¢*†îÌÜ ¸ŒMTLÜkÙ+¿<¡¸ã]½¸3oßÝ)#­ƒ¹Å½zðÒ¥ê¢Ä›{Þ‰{c}=»dŠ:œª÷BÙ+âíé	TÎôDË(
SãHÜoÝQèy^âN*îì‡>Qõ·ò+YÛáír}û—¶·|;¯D}»ëíNLæ´¨D¾‹û;ÙãöÇ‹;
eÞ{âžš´½}c¶ÿâtŒÔ<œ
Ó"%+Åþ§ítÊwš«ÇãÉdÜOv¶›œïtGÞcGTS, oÄÝ`0ŠVw`­l<MÚýÊR:Ï·}AÉ—¼;A÷SoœúÉ!!îôQ!î„÷O˜ºCÜŸØÜÿàšûŠ¹0wôBªqÞèÞ(—Ê°¨êÜ\Ü!îLÛ¬3¸ýí'!î"·ríQGY½½ùÁm®ëŽHÇ««y>æõ×_Ëæ8O¹#ãÎ¨&o'x$÷c¯5û¸×{hâ3÷Zº°¹ûÜqwaâ ä[¶œr«„êBÜÝ†CæÐÜ¥%l½Ö“;Í¾OåÄ	ja!öq¡Ïwz;ØÈv0-ß–ºoz®¶+C÷æ…‘¨£ê9Š!íVÙ«!Öu"Ü^Ç`??ûÖBÜ	Q'£>Ü¹ÌÜk __ð*Ñ`{{VLæï„·£òW„“A¼]õöìúvô@jö.	qW#î‡¸¸‹x;¤ÝCI22 IÞÎÙØžê'MÅÃ)Ú‹šŒ%·ÏïÜ›Ý²3’~òöpÜJÓGØ²%¹§­PÐÇƒ2áäV,â7EƒÁ ¥ˆ¤yjñîdQ	™ÕX¾g{OÜ,îXÄDpqçatBBÜyZ†Ý2w˜»wäÜ¿G¡;Ì])tÿ¥RéžPEÐý;.ÃõÝ¸×25Wã2ˆ»[ÿÈÚµu2´.µ¥œ5Í®Uçw2wqf•k;Ä÷Aì+îM$é\Ü_Ûßxì§õyð:ý“‰;îÏ/îtŸFÜ‰BÅ4³â~‚È÷Š'Ø@?§¸ö;5‰û}vµ˜o¡?ÅÝÝÝÖVîð»t@õéÄÝ>¹k‹;Á–‚·ß†´çwÂý|Â¾)Ükäx;Î¥"Þ®÷vôÉpo—óíò¼âŽy»ëí|»p§¿n~"-^’ÄýOÊ(îqgïÇä¢õp5é§cs›éP<FöÖV2tÄ"2V:Å=>NŠ»?^ÛL§­ Ïh»Á`0<ÁÇj´µ9ýdy÷³´,ÏÊûTáe÷S²¸ã€*61‰¤;rîÎUfîÜÝ…¹«3w;éþ¹®Ð]—‘Ö¨ÂÜ½CwaåÜÌÑ	 íO(îÕ×Æ:¸‘•‡æŽ¾Gß'´ân/X*PÜ0ogâ^ïˆûkµy¬½INÍp^@q¯,«¸70è¹Å!žá¶¶áJ™º‰zöu¡e·}âA«}ºŸ˜)^Ük„¸×0ÜBÜ«Šwxû?ELæŒvY*¡®]bÚ®ÖÉ¶ës2Ž¶ŸÎÙIÚNÀÛ¥}©(p†â\»Çc2çÏ÷¯Ä­p0œÞZ\ÜJ“¶¯_¼1›áC!
³[ßŒ±RÔ*ä÷§W’Ó'c0¥ŠË€ôæìFA“÷®»S[©¼~¿oŠ;ðÝÙ²ÌÜ‰òÕO`îò&&˜û7:sG¡»8¢ú0÷ìvÝaîâˆª8£Jòh{{†¿³J§{-¿¹Åa¯:AòKm4nï›o-S¸}þÛqÚxªwÜ§w‚‰;‡7C²L¼w¢Ö÷ÆcùÌ½¾	—²‰»¸¶Înä÷OmcÛ§€Ü¼qÇG\o¯l°©ÔŠ;q'ju•2Ñ«Ý-íËí­‰Nû0Ä.Åe´âN÷WÄ]à÷J†,îo³×Wr‰;Nüæw¸{ÚÛs{;Z eo'mu2“k—¤œŽ¥²½K„þX*˜ŒðvÂ­“q½Y;¼½lânÍòm}÷¶nÌ&}”lßZ~hÍMÝí?Ûµ”ôžaíí!6f³ÔLˆMÙCIÚ½ä3C)ÕXé‡SÓW&s¤Þoœ_Ÿ^ÚJ£¯½0mùÅæqçTesÇ*&2w”ËÀÜ)-sG/¤nè.Ì»»3sw{!ë™º7¦îNàwéÄ½^÷£Š¸¿>ÁvÛwß™8WžúöGãôÝžVÜIÚ™·{Ä½â^¨·ó_Wnq¯zåy‹;î(JÜ‰h"ÑS©P34Ö=?”kŸ¸IÿÀ0ÚÛzÊ%îUùÅÚž%îìGy³j¿h“q½[;Ž¥þR·ÿ1oi»´.Þ.´ý¿P'q‡·BÞþÂˆûÜ:É¬×Ög-_0¹½:µK-®w¿»öæìA»]Æ¤o¤Œ;•¹Ç#ápÄ¬K5†‚(~‡©•šÛ^\šš¾ukcã.ãÖìÒêÊfÌŠþa‰;È!îž–ÑÕ¹ÃÜ…ºs'uG¡»ØÄt:ë„*Ìý{aîŸkÌGTµæþ•»Œ‰â2”t'ÄÄQ›Q2 •í*G	ˆ;+s¹6ÖÝÊ«¹{±j§„ì¶ŽŸÔŠûq™“ôâ^M÷0ooj²ý?yýãº³_YÞ¨xbqw•BÜAÁâN¨&ÏpÄ}ŸB¥–š™èLM¥Jtd¡ýæÌÈå«Ñ¡^;VÕ±<•@Üµ½/öÞ%és!áUŒ|â^ÇìÃÛÙc8H-“K—¾Êövˆ»âí8—JÚÎëÛ	îíê¾T“ùÓ'Ãµ]òvAJÚîôÉˆB9M{éÄÝZêâ‹›³Ók!–{™Ú²æVïö¯¯¦|ˆ{Ðo¯ÛóéT*ÍÜCÖÖv:lQ}»É·CÑÐ0äù=9ØûâNÈ9w¨;Z!	wnîËØ…î|ä®¬bú¹rDæNàˆª'-£‰ËÒÕê¡è<ážAÇLáâ~ø(Áì—»ôààxÛXo«“DoÞ-C¼½ûÎ¥“ü›|¼¸K™ûlq¯f°ß8Ä]}ÊR€·Eˆ;'¸k·/I©ì:"¿¸ï+¸KZîwz‚¸ëDgÔ»*óËÑÄüýÄåVûÏw~tæ	ÄÝ6m·>²âîåéÅ½²òmÑ)µÉH§Rµ[—Ôy{®c©ÂÛ¿qc2j;ö¥2´ûR!îï3ž‰¸ÇWúùÓéóëS±H8ÙZÚ…§®¬Ïn…}2BÎ™´#|í’5·½™ŽÇM¾Ý`0^\±Æ´}»;àÞ.@·Œ@1w‚ÍÜaî’º+å2¹Í»˜Tsç3wÝ5½g\sÏdìX;_ßÏ ròFiîEe»¤í‡ßr†í<Ú>~éÚ£s;e¥ûšÛ;y\‡xå°,ÏËðw¨nÆå ›Äó^zîíŽX×>ÙÞ›ò‰;,âžgîŽÒñƒT9.$ÞyK`ìî­lWÄnsgž÷žHÜõ:Nß‚'S
d&Ú30<à˜;è™è¸?0Ò;ŸÜì¶‡îC·Á™¯Œ7ÈÀî”MçA˜»¶rÓó<@‚o ¥8ííºH,KE¾½°:™ŸKk—¬]Òk»wy_ªªí”’èÚÛK~2Uˆ-¥CÉX*¹µ’Š?¼·¾˜òå DžîçòNÏ¥­xÈ4ãvƒÁ`xAÕÙö½/îÀw˜û©SwÌ«˜>ÒÝÉÜÅ	UÝ5å2J£û—ht×ÝXÆ$ÌÝ™2ÓŒ8˜ªŠ;<•W+î$ÃÜ–¹¸µì”“Ž;Gw¨;¿‹»xO÷ÃBÜéç>räÈ~w%•*ëìbogöyú K'îäg
w’Î§÷JP¸¸+óòèèÈhFî pµwl8q¹·s`xŒ?ék™è)@Üaðzqo $q×êºx5âÞàŠÿ>¶+U]ºDÖŽq;¼ùvµ½1}};Ö¥þF·#'#Ö.hoâ~ˆàÚo'àíe÷ÔôY*ëšìš^ûh€¾•'c+ÓÓ›ñì¿K!îA¿Ÿ®CñTÒÌÚƒáEž‹ûÃy©Ä(LÜß…¸#æŽVH˜;Ò2ºªßË…î_£2O\½ÿùßLÝ›êYçoYZ¦^÷ú‚Å¸}½íAóN¹pç@	Äý C÷cLÜ±)ðÇ!c¿©§¶|IÌÛÙ£bÄ½ q$F†¢úÏ¸?½z¡ý&]í½#LÜ±,Õ÷¼1ÔÉ|-¯]BŸŒ>'oÇ¾ÔâÅýOË-îÖÔ$›¶ßšZM“‘[±ÍµH0¶:½S…œ%ÚƒNÔ=Ž-j0™ŒŒÁ`0”‰ÝÝiûž7w}XâŽ˜»*î˜;Ò2ès's?sÇUÉÜÿU.óe–¹š ûWÞ^ÈlOG‰Œ®½âÎ¡·ž“©÷ÁK×'úÚ[Ëš“i;|4¸gWÄ¯YbïèÄ¨ÿ)­L=räÏBÜ½d(KTÏ®ñ€sÇÄ=/ª¸{´=Ÿ¸ãƒø½¸Zq‡¬ãvNÔ˜Œ–F~q3‰¡á€îët>¸:3Ò¾31ÃÏ¨6÷ÞŒ*â^©w7¿ßÕù²ô‰°»z¼¸SÄânm~USa©F»MFÌÛõñöP½ýKB·£OFÉÉ PÆÎ·£¿E¢N†{ûqçæþ†àý\A™R{{d¥Ën‚LÆÙ‘Óˆ•‡çW·,M>iEDÐ=d¥â‘Øœå3C©ä%Sm?ž¼”âN!î¯…<Dps÷¨û»?†¹"Ìs§¡û§˜¹kÊetæþ…ÇÜ•¸Ì]ìQu¦îg¸ºÿºÃÝé"^TqgÅ@÷K×n8þÇ;c}°örpnáúaw9Å~RÄÝFéÔ‰û~ÝÄ¼=#®ž¥¸WíIq£Ë	·3Æûu¢ÝÑ…–å™Äº_XvÅ_®Žã©“©¡{9ûŠ
÷Ë’¸2wjwt:ˆ;æíw~Íä=ªuU1nÓößÚÝí„&&CÖÎ½9Ku½ýosçd>õÎÛ™µ£PæcµRœLÅ¾Ô÷Åâ%ýµTfqOÞÝ!Î/†}ñ”f‹•ÒÛ+›© O+î!!îA‹: “©ˆÏ`0eÉ¤ûË=kI
Ý‘scww©]C÷"çÎÐºÃÜ¥¸Ì¿yÕýs¥R	º«Ë˜0u÷´Ë45Õæž¸¨“iR9Ê'Ù'ï<xôíõG-»º˜sçZvñ¢iíX¸óG,|j’ÄfŽ›¸ƒpoÞ)Ä½ž‹ûþ#GŽ\2v[Þé"R3 ¶`q×‰üA=n<æŽVíí5¡ÜV9P\!îžc©2¸#yÅ½²`jˆ™ÄÈhÔ‘déyF´írç@ktoék¦œûüœ‚aŸè÷w°ûs€w>_Çpn²iÈ	ÕçT¾kt–.ÉÓv5&óOðv©½ÛR5u2’·Ó¿ôR$¼Ý·K=ÌÙ½ëRÝ:%ßJdí`5Êt-…}‘ÔÚÖV,I­¬®ÅsI8ßÈ‰ÐU“’1†²¹;¢éÅH¯p#î®¸®¸R\æS'è~:W¹ŒÜ‰´ÌïQ.£¬Qêîˆ»3tgæ.’îŒŒ¹*î'yäõ¾ÝÖÞ^LÛwaíÝÝ½½çJàíÝm·½›ZÙõ³wêÉ$a§>nÏ0u¯—^2FÜÀ–ô™­¸£Ë3m——÷[ØøÕžç+î¼ö²!ð]&#ÆíLÜËPN¥þ½;n'”m©_ÃÛIÛsÕÉ`ÜNH1níj ‘o—ÅýÔswkª‹î´.5·b++épl{{Þ®ÅÛƒáÙ¸;QÔ¨]X»wˆ;'·¸ÿBt'q'ä™»¾2g£»zF•ÔÝ=£Š¨{Õ‰ûQ¸s®Í·xe·›Û/?ºÜ×q®åéÏ¤Ž]§xŽ+îMuâJ)îµBÝk¹¼‹¡;WwáíÌã¸çÇ‘t×“ÕdÏðÈÐ@Í@çòPCÏrFM+ît›Ä]¸;ÚÙw~ß	¢RœJåÓv}$r2žm©Ÿ©ÇRIÜÉÛÿ´]x;!×@"Þþ‹‚Åxžâž\ºrqçy{(÷Y[s‘äövÞš?u½›öGƒÁ`(/H©}Ä¤þ¥wìbÂ	UÆ!Ú¢*Ì]:¢*V1±œû;;,£º#.ƒ™»T‰™;‚î¿ÇU®îX£J .£.c¢¸Ô];q?ª÷Kãã·Û²Å¼¹µ£{áÁXÛ>ÊÉ” KæÛ“MwN®¨«Á½¸¿e“-îŠ¹;EÖ&ÓÈ_¹¶;òÞXbqÅŠ;QVq—ÆÒàGD>qwÁÌðHÛèè2­Q´]µŽœ×(î¯
<§Yœ7ß¤+&îuH»^ÜÉÛiÜN1VÞŽ6“Á¸ÝõvÄdø¼]ÖvÔ@æž·Ëõí„h“Á¹Ô|û<(C¯NLæÎ¥
`íe÷ÈjÿÅ[lÞN;PÃiËgÅoÏ…?7ávÃÿ³w¾?m^gÆn¢B)m`8ð…6D"¬YÕmŠÖvÚ«™´ª¢µê¤5ÕÔUkÕ2ÉÐa“2H&ÅfÆ¢AÀ(xmR§i70JqZ©mPUÑìo‰ÿ…=ÏyÏûÞ>ÇÇ? ;	ä\QØ/¶iÕèÊÓûÜÅb¹{=3äã}Zò©øö½@•¥0w¯KTUqÿµ'î0÷wäÐ9wuæ®ÝÙÜe/$«;ÏÜ‰÷Mî„ºËFwÌÜ…ºs¥»‘1,þçûÌzzy=~„¤¹•”}=>³N%“ÙÑ.íCÑÍÜbj,^ŒÖ¤Ô=Ÿëì¤Á8Ä§SA¸Ë
œÝx]ÉIWÜÛ!•vÄŠ¼?ºhÈto¯˜qoVPÙ‘¸3ž¸“±êâÎg8uq¯ŒùòòÚoßŽ¸+¾Ì½Ó—“cS-óQîì¿kaŒÖîW`e‡¸¾åCí®©ëSöÊìWJ Ñ)Çí¿5-KELñvädoGÛ9ß®K}Þîˆ;¦z{—äÛ	Keê#íàëé?Ío¯Ó±Ó‰†	jo¿8Ò?RÉÛ¹²ßÜ-‹åî[ìkÅu‘ŠQC5¼¸?YJÜÑ,CxiwÔBoJsG¹ŒÞèþ9ÚeÜ™»¾FêŽ3ª˜¹cè~ £Í2EâN¬/fWS‹¹µðØâb.•ÜLmŒjÇN†F£ÙäâZ:ËF¢ÉÕÚ,QØ\¿'âŽ™»Ü ëY;¦íâK+î;w™º2ŸÉÌ'7æ[f³y6÷ñ{'îû8&ó/·ÿ]_–ª§dÌÞnnÔ¥
o×k 	¥’p
ÜŸñeP'Cpû]÷ÓSNæÚõ	2öÓ.^½nkb,‹e”Eõêƒ¥î êN8…î®ºKsWV¨²¹³ºcSÁUB›¹ëæþžºÌÜYÝYÜaîw™–!”-ªrèŽmL.pvÁÊ"yûäàà ézh 
ÑÀm€¾ŒD#ÃCÃ‘ÄF*·¶´¼o½´9LÒ;!?<œçÃ‹ñA¼Ý)+>!ê-;XÝÙ¦‘•îŠ*OÛÛ¶9q¯ÎÚÉÏ¥¸?þ¸"ðNX¦ó0²õQÉ¸»­‰¾"j,îÎ¾ì!ÏÐânF¨8ÈŒÓ}6usÎ?ukþÝ_˜®óKè­:?ca¥þ†)Øq×ÝŸÀŒWé.]2äd^5ÇÛÿ(½À¼ÝàíêÚ¥Â}©ÊÖ%FÊ°µ¼x;z 	h;Smß}pço_m¸xýüU²ö«çÎÑ‚%‹Åb±Xv¥¸3wQuÕ1÷ç•#ªFsGŸ»rDæŽ´j!ÙÜ	¥\Fé…Ä.&Â1÷®`Û)GB:ø—ƒ·o)¾¼¼¾¾–ŽD“£¡ÐÐh$‘Ìår©\x)¼–[J/_ŠÏ´²‡w>jE6ÃáTt4’Ï¨,î•Á7èâÎ”w€œŒNÅÝisâ®š{)q»DÜAlv63>eÊ?ÍGT#WJŠ;},'î`«âÎ÷ö7»%„×ù6ƒy»¡½ý}´É RÏ·³·£’½ý÷º·ãX*ƒ}©?Fd9q¯Wºœÿ6çËóHÛ/^¤mJ6 c±X,–](î¼ˆÉÃMËDZÆ3wÄeŠ—¨Ju'œVÈã8¡ªQÕj!Õ-ªz»Œ¶Œ	…îŒcî<t—ý27è(æˆ»Ã
¬Ì¤ÃdèËáTjmi)½ÇÙÖgfâqÄPÖ'wI¦é	ãépú’ûòA…*Í	¢ËAµùÎ`å]÷bÜœ»È ~/ãíµw Ä]žËô‘×VwP+q7UËð‹ÃÜK	¼’QÄ>0{kq.°°kGïä£Ww?()îx·Ûwß‰\ù_±+•]h;ÆíoÇ¸]i$œœæíðvôÉð¼Ú®®KÖîîK-Ü»„þv7'ósx{ƒ2Ÿ~tçÛë¯M\¼@£vZ®dc2‹ÅbÙëâŽVHe‰*‚îÈ¹{êŽ]L¿sÕÝ<t?‰5ª%ò28£Jˆ¸:ÝCÕÅÝIšw1­—.ñp]Ð
èîÞÞt6´óÚöô¢“ÇáwWÜ›Ë‰{Á¢N7
Û÷æšŠ»oˆ;›_½µàÏd(73;é™{ýÅÞî“%ðv¶vÄÛÉÚÑÞŽòvB·¿îµ@²¶#'CÖîiû)-Þ®¯]Â¾ÔûCÜ”!oïo¡S©§_kè·)‹Åb±ìæ#ª0w©î¦VHÌÜus—yºƒîž¸¿Çå2J£;*ÝÑ.SbS_Ì]ÝåéKÃÄ½Ó¡Ë£¨.=Ín&£5ðöp«¬XA€—¯–#fq?âþ8”r?Êö­v¡oCÜ¹ Ò“õ-‰»òÀÅJÞ÷)âîóÅå¶ÀN+‹»W-©‰»³¸#-'/wÒiÿ!ìXB
&°º5Ÿá;lî“³HÈhÏªüP¥Å1Y;ÄÝWHOà†ˆÉoGºÝ\ÞŽHu[ªôv9nÿCá¸ý%%ÞþÖ.‰”¼Ý<oVàÖÉHm'<igê$íàú7w>ü¾Ÿ·)‘¸[k·X,ËÞwY
É@Ý‹ÄÐV1É¡»ºc‡*’î¨…ÔËe`î¦vÄetG»Œ;twÒ/áíAÏÚ]Ñ…{ñ˜%Ž¶äèØjhÅíù:Ñ:]LÏ¶wšÄ&ä]Ûwzó].qçó©ÐïGEt‰,Í„«Câq¯N	qÿQUâ¾_÷}Ž´#ãÎQ™úhwAÜówŸ1=ÝLOÏÖÅˆÍÍÅÄÂýâó&ßÔ"™»ÈÍ,¬æ¼ªN1;_ÛîàýŒ5÷žž¶ûŸ m2nJ†‘Ú®žJÅ²TÔÉoÇ¶T½NFö@
oå9n××.iâm—5nä]÷×ò|5BÝÀ\án÷)Y,‹e™»y‹*ºežÔŠ!aî$î|D•æþ|‘¹‹˜»“s?uŠó2¦ZÈwœ»X£*Ì@/$‚îè…ÔÌ½O©tÿá·yþLrúÛ*8L,oŒ¦––6#;pv.IQ|.=Ã¯áü…AÌüóÂâ†o*Nôê¦‹Ùùÿo Gï|%ë¼ó¥x)ª„thcÄê"*!æº›WNÍl#'ƒâGÓ}L`Ÿ÷è‘eˆæàÆöC?!ôÖ§‡7ª¿Z¾èá~‰{Õñ9ã-<’™š
ÿá›»2;îgs·ò‰)þvø:,\þ”Î“»ï@¾<_ç¾mñ-:Ú¨ÿž8s¢çöv·Lóö·1o×Z 	x{Ñ±ÔrÞ~ª Ok—LëRù
x;Z ŸtÀ±Tƒ¶×ÁÛOñÑ?¾šà€ÌÈˆ·[,‹ew‹;ºeƒ¸ž¹{S÷g˜;ƒ#ªXÅÄæŽ¡»¶E•0mQÅÐ3wæ®Äeˆ¾‚z™n³ºU¤“£›Ä}%ÊŒFvV 9X‹?7Í4]„IÜ!é[w$~ îìíw¢íØ1jt§[þ(9æ$Ûã<¯íp0‰;øxL×vTµ+Ð½¥Ä2Îöiwq ”w~H÷ ¡‹»‘-‰;“™žÎÐ;7ÿ}™X†µ’îÓ·BÙGÜ»òç)/î,êª¸ª î='N4>ôÐÙ³gÎô8ãvî’‘áv¥¼1¶vÌÛÕ˜ÌÂÛ±u	9¥M†µ]x;òí8–ú<o'¼òöBo‡¸?VªO¦>M_LÐ®=;j·X,Ëƒ!î˜ºëGTR îN»ŒÌ¹ÿ“Äí2ÚÌ]7woŽ¨ª½X£ª¶ËüUÝYtuq?Ì˜Å=©Á~ÔÕåGåKHq? q§›:ˆ{W‘¸s8zôhõâÎW›Å=&?BÐV3q×eœ…wŠ;?ZBÜå%ã³óãÓ«ùÉ…z‹û™³Ä™3ÝÂÛ”ÚdŒÛ	CäI}Üîyû»z};Ž¥²¶»ëR#Äõíhdo¿ÄýÜµ;×.6X,‹Å²gÜ]Šûcº¸KžHqg\qç´
Ý!î2.ƒ™»›s7ÝYÜ	aîÔÝÜ)ò2(†”C÷ŠâNwÕFÜóÌh2MÞq'âÞÙY^ÜAeq§F™êÅ]bìw/%îŸxW TA–w€ËÊ‹»ß/­Wh»AÜAO9qgØ§µïÙ¶¸#t¯,?Åƒ$îH×ûÝOÇí™Ù›WbSÙüÆœwçç-
ò}±§Ò"îè6ãcøM·7údº]MÉ”<–ŠHC¼]idow´52&C Ò¸cí’ðvÄdˆ§=ÈÛ!îîŸ8u³vðð×~óuƒÅb±X,{GÜ‰bq?q×z!_$äUiî<tgdZF)—Qã2P÷Ï¸]†ÍÝ=£Š ;ò2EÛ˜0u×†îÁ Ùîì<’I™"qôÑçÖ†v íƒ‰lb#o=¬‰{pW‹û~¨HÜÙ‚¸77‹Kk-îMMåÅ½©”¸ƒšŠ»¯HÜÇÛ3±Xla~®{ar`,V½¸Úª¸;ÚÞØây»:mWºÛ	9mW½]j;¼ÒíJLm2¨“Ñ½]X»>pG¤ 5÷JÜ¯~zí{[Ûn±X,–½%îÞÕ‚ã©ìî•Fw//ó¢@ÌÜœQæŽ3ªh—)^£*Ï¨ÊFwÄeÞ7mc‚¹$Ýµz™Ö^áÎl¼hNïb î3ë++Ëk‰m7É„'Ç–×W–Wz{‹Å=H6íq SŠ{WíÄý#¾ä'‡¸wdÐ½CPVÜ;ÊgÜaîOlAÜ›Ý\Meqk†›Ã!rÏiyq— ;®½¸ûbÓ±@“—”¸û±X %6žé^XMÌgªwÿ–Å½ñ,q" Û‘n/·sÉx*õOE§R_6´É¼émKÖ®k;[û‹^JF®K}úgBÚ…µãhªPvL­÷ÉÔ/¿·óv‹Åb±ì"ªº3¬î¼kË˜tG¹Œ.îlîê.¦?cfî"éþ¹0÷¢¡;ÄÝ”—y›0ÝÉÜ]Ùí`q×!iO¯¥677"Û™´‡òt u5¼âµÀkÞ®‹»`‹âŽL„3³?bDÌÜËSÂÛqb÷ÊÅân¯bR×v*íñvq#sÝ((uB¢PFeŸ@º;×9Vw¢]¤ðeÅo‹>@ãµ§‘øHÜ§Ã—©]¦ÑÁw¿K€¾ÞôTru6CíšeÚå³Ë§+ltÃïíÀèî,û$îMÂÛYÛ	EÛ…¸ëãvó©TŒÛ9Þî¥Û_Fº]9–ÊÞNüÒ$îÈ·ÚÛIÜ]gg`íUiûNÿð;ÿïïF¬¹[,‹å÷LâŽ´Œ;r—9wÅÜåÌýxa¹Q”–A£;¸Œ––‘qiîˆËô	sG^ÆÍ«ÐÅ½·k&ÛÜÌFF‡B[Ÿ´e7²“É¥xWïý"îDíÄ@ÜáíUŠ;Ûž÷ÆØ
²ÅÇd§n^žÎÔAÜe÷;J•Þþ+òö>ÄdàíÅ9ÌÛ“·+óvÜäíúÀ@dEqáÞ‰ûÄùóTiÅÝb±X,{MÜ¡î¿ÐëÜÏÜ1sÇU½òåˆ*Q°EUMËP½›»—QÒ2„º¿ªÔË†îÎ!ÕF†e@ëúÒb"’ˆŽ‘·ç·r•›‡³kë—ÖWâôDfq¯éIGÅæ^qÇ}?(+î¨¬(îÝõòâî3£lJ½[âÞ››Š5–wf|j:æU1‡!îô…AÜé³ªÅ½Çù{Ê¾ŸÒíZ™Œ9'ÃÚ®{ûgrYªiÞ~\­ÄÞ¥wôµKÒÛoG¡ŒÜ–JoW¤½îâ~úÜ„í´X,Ë^º3r“\¢*sîºÆÜâŽBwiîˆË¹kqaîòˆªŒË èŽ#ª¦zLÝÉ\sw×1IoWÕ=¾–Ì&"ÑDdhÞžŒN&ÑÈfx]4;Jg7MÜƒ"”NÚ^;q—Ë_e_dÍÄ½MwóEîrßª¸7ÄÑ²ÚBÇ»uqwÆW¿ŒT÷@ W–~ˆ;áSÅŽ¸¼«w~?"îÀÐ7‰;½^ËSÍRÛÙÛûÜM©úÎ¥ŠËRßp[ …·#'ó¡¶É¼ÅÖîÖ·—wÔ·c]*ýæ|;!ÃíØºT_k#§'^kxØš»Åb±Xtq—qô¹nÎpÓ2Å½ˆË Ñ•îq—1$ÔJw©îŒÚÙW—ùÏí^y®S÷±ì$…]²“‘êeè jzey9ŽÓÓ•wºâÞQq'Jˆ;¨ƒ¸9s//î¹W/îôqWŠ;SYÜýM&qoÙ¶¸S}{e‹žÚ£pUj: ÕKZyûIBj»ëí¯ho×ËÛ“y‹âíÛ±wI?—JÞnwâ>w›“±X,ËžQwƒ¸#êîÊûAÙ
©æÜ	™s7ÕBBÝÙÜOÉ¸Œ¶FU	º¿®¬Q%Ôr$Ý1u7&Ýo“ºKsG3dWk:—ZåÖÆR£bâÎ7fB©‰F"ÑÅ• `ÙöÄ]”ÄÓ­'äR ©âÞY¥›ÅÝ…ªp$üÚå¯åÔÝØ	ÙVÔ*ÓVç¢â®6r³¸#{ )ê->¿Ö‰«@¡ÌúÊáX0Œ›n·%îPêÒâ.¸³¹‹Djãˆð—âî¾!õ:ƒ¤kð}ìííû›•2™>½LÞnŽÉ°¶»ÞnZ–ŠòvÑYÐÞ®Ô·k52'ƒ}©„Œ·»ÒŽp»AÜk^&úGúí¸Ýb±X,{JÜA)q'xæN`“ãîˆË¨æ.Ó2^£ûq˜;j!Ý¡ûgÿgïZã:¯0œjÁHrGXŽÆÁC$IÔTÆ8‚¸tš„vB¡†45Å(%2±½¨í•‚¢… +ã¤U7.ubŒÒm à8¿¥ý=ç»çÞ÷ž3ç^ÍH3•,Î#"Éšo4£Ý“Ãû½ç³òÐ]Úe™¹çÛ˜—A1¤2÷^L&ŸMú.ÆM2Ožlµ·nMnÜ¼E©õõ57óåúú_7¿~ÄcöG;[zq‡@wÄžq'"îô‚5À_Xhñéûûâ®%ÝµöNG&÷c§|Æ:V'î0×ã'î{‹ûìÅ½1KÚŽq{J·‹·›H¤dOÛ9%Ó“!t¼ýjwúÛUJ†QëReÞî‹;¼}øâþûW‚ ‚à˜Š;â2JÜ™Wm¹Û;y{B·ËXswÒ2(twÝ—ÁUî¦^y™¿H½LRi©—Íw×ÿ{ûÎšég¿}ëÖûß?¸{w{Â^-îLú½„8ólDêKÜù÷ùâ>™3NÀÝw¢%âî¹{¸Ë#¹§ƒâFNŽ	¾¸[ºÅ¾Ð·%s‚¸§ú–©ýŠûÔÔ~Å©÷‰ZqÏ~N4\¨ÒínG™¼ýw¼-N{;AÚÞåí_dùv¹–ZÞ»„p{JÉ¨x»ˆ;R2w'&3tqx{AâqG¡»Û)…îyÐ«˜ˆdî„í…$`îþU'èŽ©;™{ÊËLv:Uâþðûµ¯ÖËYö;÷7ÿusggg{ÎÞ“¸··¸? ¸Ó7!îÎ^W÷éz­¸ÏŽª•K««t+µ:ÞŽòvãí×ÅÛS¤ŠÉ`[*çdÈÚÑÉñvÔ@ªöväÛ-î¡ÜAÁ+!ï{©;Â2D^
IWTáîoª¤;#ænv1‰¹_ÅÐ]™»ÜQesWCwSéN¨Jw˜;Š!ÕÐýEªg$áVPf|k{s½1kkw<ÚÞýw3Ñ© m†¸‹0#)“÷¸÷.îBYÜ™½Ä=Ñ)ðã2pw:Ä½ {âÎêž{»èùÞQuL”|T8íŠ;pÅ}d¤²’µ=#ÏÉ8â.gkë å¬Æw‹w01…:È$îx¼ŽŠi;ÛIÛÓÎ%¶£Þ.Úo¿¦Úd0nÇ­Ôäí¨“ÁµTx;§dÌÚ¥®òvÎÉØH¢(‚”[©®¸‡´AÁ0ÄÑâ^ÔË@Ü³bH%î¢îºK/ä¯sÏêedèŽvt'ÈÜ½=ªfîØ¤Jê.âåmoì<¿-7S¿\¿ÿ|sóéF“èOÜˆûôQw°oqç¬ÌþÅ]8êâÎeq¿|¹”’áp{Ú¹kGLÆŒÛýxûu‰·'mG¾]-]JÞŽÈjqÇ­T=nq‚ ‚Cwvwˆ;FîöŠ*Ä=©;z!ßeœBw"3÷ÇY»Ö¨²º'swG¿L¹]† q÷Ö1-¶»Ä}qãÑ7k4jÿêöúýÍçOwww'Iwb'ÝÞmÚÙiˆ»è»xûÄ½ÖÙëÄ}\¤}‰gòw}ÍÄ½ðw›–‘·Å"Þ›¸_(ÝV~6Ý|ÖÌÄŸ]Bîh;Ä .cÄ¸ŸÈÅ}bâÞ ªÄ½Qb â>’=Ž‹õöËìí¬í¸”*â.Öžk;n¥Šµ’’·m2IÛ±-UúdT¤x»´@Š¸«m©’o·âÎÖâAVwà—Bêª„·EõMÓèŽBwÜQ•^HÊÍæ3÷ß¹£]¦P÷dîˆË¨=ª.©BÝuÁÌªÉËpéºfñáw·ÿCù˜§ÈÚ7’ù6}Œ·kkŸ£\Ü§-}Š;XdÐ?^°q/ÑñD+{?êM©²Ž^I†“ü1}.éýâg	ò±nøœŸtWfžÉ{9Âs7G¡Þ>'±ni_©Ö­á º~b£†ô‚Œü«T$oÅ}&û31¼—G³—<¡Âð|]àûéÑå’·—´}U2Ðvgç’7n—e©jÚ®¶.}šoKU-2ngo·9™$íâíåi;QìK=	”²Gº=‚ †+î0÷JqÇU5t¿Êè¸›»Rwé…¼NhsÇ%Ulc"\s/oR]ŸT¬<¹ùõ·ß~óÝ“­‡‹	1Þ!ˆ{«gq÷qE.îÙ³gÏ–Å½HÜ[Íý‰»ez™O‰¸‹·Ÿ©÷’°[q¾¸ÿ$á‰;Ûo•Fcý*;u¸OU‹ûˆ#îüó‚Õˆ;©úÁÄ]hÌRºÝï’)¼ý}"Y»Ú¹TÛ	m7·Rß%¤MFÊdô²TOÜEÛCÜƒ ‚àåwjtö
ÝÕÌâŽvmîtÇÐýcÔË¨Eª¨†Lú‚~™Kê’ê?þ¨Ô}kûîóO·wwYz/îôÁŠ;èYÜ[­&±?qGrf™æíòÓ\ÜÏ÷¿óézßâ>[!î wq§OÇVÜïÝco'm—K©—|oOâžOÛ	[&co¥¦övx;k»wÑv‰É ÒÖ·KLˆ{AŽ¼WÜaîwtË¶Z¦Hº—k!¿Pî,îD9-“Úe—A½ÌÝm†Ä%UQ÷×HÝÅ„·vwž>Ý‘QûÁÄ}îÐÄ]€¸·ÊoWþœþÄŠŽ.ó‡á“…«Laë*à>xq¯¯ƒ¤Ç'î NÜ½ˆ»ÄìKIýô(Ä])ƒÿo ig.7ô¸©ê€ÌÇíeÞ~Å¿•j—¥Š¸Ûm©”“AŒ­dÐÉÞnÅýÕ
qÿiH{AOÜÏ…»»#wFÄ}îúÜ1s§‘;!æŽ^H•–!sÇÐqCBÝQ/Ãˆ¹+u¿Dæž©ûÊRºÔ¹Aì>Ü_Ô´M&ë8¯w<mˆâÎ8âNÌÑ´}ßâ®/­Ú%q—x{ö	46¼.‘v|ÖG|qÇÔc î oq?Q'îÌ=¦”’¹„˜Ì¯‹È_šH½+õ¼]—@ÚövÔÉˆ·£¾ÝñvéowîªPæõ÷·!îAA0luÇ.&&·÷_¨z³Š	9wÕùIÕU[ù‡T/ƒ¼Ì‰ìŽê5ÔË¨¡»´Ë`Áy™ÒÔ}ƒ¤æ_`RÄäÜS¯ð…³~	È³Zú|Âj{qÝô,S¶ÏIØß`ÈÛß¦ÿÔØ=ç÷ßJ´¿3y#Ó= ÁGRfÙc¸ês§

'GÐ}‚¼Œ2üET?SÞ™™,Eb%½–‰)™éÔ=Çi‰ñð^®¼Ž(P&éá¼¢;q¿<o»dVIÛ±*UÛ‘’¹Æµëîö¢L¦Ø•ª–¥¢½]ådlLévÂÙ–*ÖŽA»l]
m‚ ‚£%îï1lîf‹*ÔîdîÖ¨bèž›;Çe8/ƒ¸ÌÝæeÞgŠfHŒÝ‹¼¢î[[ðvOÜÏ#gíUÜ[õâÞêGÜåqWÜßèQÜÚePTÙ¥F™÷Ã÷Æü<GÜçg³êvš¶3·‹¶K¸E™‘R2ˆÉ ÝŽòv3n—k©2mWu2˜¶«[©Dˆ{AMq§Oy¥»j…d`îº]F™;!3wj—¹#.££îÿ þ„¸î¨^u7æŽjH»ŽéR¡î++ã+ã‹¾¸3<qgu…¹CÜ÷Ž'îòœ¢½§¸£à‘½ÈÄ}‰Hê.âN°¸ÓuEunŽOç¿º­@Š§'Òa˜{¸ƒåJüeMž¸£Â‘wŽ¼àwOÓñ£~Ä½1OÒN/4Š”Œ½”J@Ûµ·_càíˆÉHº]•@Š·›ÈO<og*¼ý­h{mggq‚ ‚—MÜ3wG\†Í=sw˜»ZÇ$i×ÜEÝíU½	Å¢î¯-…¸¿dâ>3 qŸ²¸ZÜgó”{ûjQÝ.óvŒÛÉÚ·£MF{»”ÉØi;¼µ”Œx;[{ˆ{A¼dîÎ°¹ïäæ^Z£
sGVå2ÜKí2WUÐÝitÿŒÍq¢¤îúŽ*¢îˆËÀÜyæÎêžò2-í¬îÍ.—•ûž .ÞnÅŸ‚ÃÀj;ªa
DÛÑÚNøâ.Ocqçoó¿ ÕQô(îÍˆ;ÌÝ
ü˜eßâ~ÚìMpUÜ}JR'5âsÇQOÖëÅçsqŸíˆ»Eö5%qo°¶“·§p»Z¹¤Òí¬íÒíªòs7&£[ q+ñvöv&Ÿ·’o'Œ·#&ƒœ[{áíaíAAphê~‘s«0÷D¦î¨…ô®¨".ó!Úedänã2ÖÜ1tWõ2NÒ]Ì]wº¯®f´º¯ŒçšqÒÅ"»G™Ž=’žSx{Ó!o¡éƒ¼(fÎìIåo!î„|Mê^ôÐäîOâŽ>~ÅÌýÜ…{z{9äÎß²²£"²?qGÊÝbÅ]¼[eÔ!¸{¾…K‰:à‰}¥›Ï' æÂ¼‹zM-îŠôÆ§À3?áÁâ>2??2Ë!™<%C³&&Cøéö+ðv”·ËÎ%×Û‘“Qm2˜·§k©°v[)évo¿x‘þm‚ ‚£"îïu·âþò2<tgüeLŸª¡;Ì]Ö¨ÊÐÍí2î6&¥îè—Á&UÉËÐÐÝè:¦ãEô×w¡RÜå\¿@Ü—ÄÛß&ÄÛ­¸3sÖÜSÜ'1Dqw¯¨úÔ‹»ñvs§†/î`pâNL¹â>_/î£§ íy$“[;‘_JÕÞŽ”Œ´É ¼1äÛEÛáí^	¤ŒÛ‘’±â®µC2!îAApøâ.¼N8âŽeLÕAw\QÅÔÝ¶Ë`jžtçN÷î=ªzèÎ¹[uW¥î–jÈ¿‘º¿HŠnáù;v1aníPÊ¢8´*îK{Š{:SR÷.q7Å2•âÞ,QÓY˜Y®{Te%=nâ>üwç‰;7»sÄ}æç£Ë¢í…·ë
HLÛ	±öòªÔ^äãÇvÜÎ%fÜ.e2–¥Úx»io‹±âž8>‚2AAp¸âN_°FÕŠ;Ì¡™ûjj¹’/©r»ÌCwcî¬îbîz©2XÇÄæug0uG^æÅ¤Øw`‹êq÷Î Å}¹q!î=‹;=03:ÆÚNÞ.Íí¶R¼=·ko¿bv.aW*v.zW*âíù®ÔÑ&cÛÛiÞþo·AˆûÉ“!îAApâ.dâ~±wÂw™¹{·TËÈÐ]Ò2væn÷¨z*¡ã2õfîVÝÛ=‰{{âÞ¢N™¾¥8¨¸3ÿ/qÇ?‡)î§¼¸wzÓ3§’¶#%³ê{;ÊdLwû+ìíŸ{»RÍ¸m2X–*óvÖvÆ¹“Ê¸â.Úq¿âþ?öÎo5®ûˆãÈv ¡Û"¹Q-Š74Š­“PRSdÒA[18”RãˆCKîJoü ½õä!tc|——Pª3¿3ç|ÎÌÎ­dÉúãùDD»ëµl…$|<|ç;EQEq!öþÇçÃ!&Ò2„eè…œ÷¿Í}Ô.#`îªîvFµ™»ì¨ÒéŽº'Q÷¨î:t_Ì½—#îÆÖwØsßr,¿<ƒæî½ÁíÙg†õHzºn…¨Œ0o?P&Åy‡S‹û{QÜßü;”ÞÝ“jG8KqÄ=Z=Î¾ÄZâ®Üèk:nGÛ5Ú•…ÛI·;m'&Cºý[¼}˜ÇR§Å½i»ÊP'CÂ]¼Ý1rö²ö¢(Š¢¸pqïÝwß‰¹«¸cî¶¢jê.¸¤»™ûqêÎÐ=é—¼¹w÷˜DÝŽŽø9w^:+qßUŽ÷œNÜáBÄ?¸Ë‹ï®¸kNæþ­_þ–ævoGÛ¯íÂ¨ÒÆíAÛ‰Éäe2vuiÈÉx{lìÅöö÷¢(Š¢¸hsGÝÁc²ÀL—1súrw3wºe¸ÅdwTÿêe8£*4suÿÆcRuÏ‡î˜»ouÏò2£ÂÇÞÛCLlŽL­½eGèN!™´÷RÞ×{GÛ¸;iÿuÇ'Ý+ûëro¸é¾5ºÏ•ÔÜûWh¯´šŒuÌçáT%¤†a:§2ÒËû¶cÌÌÏówäÜ_¾LîíÛÂ’Å'Öž‰ûûïßøÍ­ŸØIÅÛÙIœ¶ÇîöœJe)UK ‰ÉP&£¨¶3oÿÇR›·[›{©_[{»y{“éC2vr	e‡²ö¢(Š¢xÛâ® îªîy™xF•¸µÖ)PéN\†3ªÄeLÜW›;êÎÐ=´ºjî‚ªû¯ŽDX]0¦{¸h4-âNí î¶Ò¾kË¦_òyJÜöIqqß‹»Û†uâ(|V;?!î€œq7xŠ;L‹;æ®î~ÄÝ8‰¸ëÃ›7åÙÇ‡]JÆŠÛcsû_“q{L·«¶mÜN›1R21&£u22o5Ädh“!&Ã­TÓöLÜUÛKÜ‹¢(Šâ²Š;æ®pFÕµË¸¼wT]»L¼ÆdÇ˜²kL¨ûSJÝº§QwEÌÝÔ}1?‘¸/îx«â×FÜåï×WÜ%#sóæ}9¸dávB2!ÜþÇF¬n·îvÆí7—ºyû3b2±¼ýÏ}›Ìód-Õ{û×t·wÞ^â^EQ—LÝ£»S.3÷¾sçŒª`æN`&ÍË$æþxÉÜ_Ù5¦‰¸LPwÕöåRwÁò2-0ãÕýà„wÀý]˜}¦L‹{qw`ídeRqW Ê¾JÜ7qg×²2ËÆ¾lðÇ‰»±¶¸“qÏ!§8q_Ÿu´öH¯îˆ»ÿIæ=®¤6oï.I¶
ÈXÝÞÈÒíŒÛñöo™¶Ç6™ÇBŒ·ÛVê°–ú%)™pué/ýÍ¥Q¼}TÅo¯x{QEQ\€¸ûjH6TMÜÙQânîÄeš¸‡3ªC²¢úXðAwQw†î¨;î¨»ºTC
 /£Y÷V0'÷;Š÷™€¯%îÆ™‰ûÞâ@ÜÑv¹—¸Ÿ‹¸ã\»n¤J¼LÛ[¸”ŒY»ÀN*'%Cw»j»µÉPùJÇíÄd+Œm2ÍÚi“!&Ã¸q§Mf,îì¥Ž+ KÜ‹¢(Šâ‚Êeb©ûï:Ý‘÷¤Ò-Õ?-›;9÷tÿêqh—±¼ŒÝ›¹˜;CwÁÌ¨{luo´-ÕÖy´%âJ†„åT9;‚«éÄ}á£/0S&¢2ñ§ìï[Nº§QÜs,*#dâžçØ[ß@Ü‡ˆ;úþFâŽ¯áí¿!™¸ç,ýZ‰¸oÀ¨HFL›¶[d‡Y{hnÏÓíx{›¶¤ÛuÚž¶É í–“qévóvmÏ®¥~št·X»x{u·EQÅUwÅ‚î>.ƒºsFµÍÜÛÐÝêeâ5&î¨C÷u§ÔÝÝÝA&·¦j3C­;â®'”"Œ¥UÖ•\Ü‹w(q¿”âÞ_J•U2a%•p{VÝÎ¸.•vK·»›K“ÁÛ‡2b2KˆÉXJ†
Èæí%îEQEqÅsÏ:Ý1w%UŽ1™»Cw©…Œõ2_)£¸Œ’îæÎÔ¡»/uwkª®`F³îsþ4÷ö±ÃöÞþðáÃwt1uŽˆ»ö)qße¬÷ý•â¾+ô¶nõðúxÇX÷ù2{ÝYG=qW®…¸o“æéøPðoúaû÷%$sø“ÉüÓY{¨n7oª˜¶ãíúßi»¥ÛŸ…q»2·ÿ§iûËX&cñvR2“ÞNw»z{‰{QEQ\Sqwí2£rvT)†dG•fHÔ½™»EÝ“~sw¢îˆ{Ì¼–%Õƒ·.î³Ë'î·KÜÏKÜoÜø ÉØ½¥¬J†Ùvºd¬LÆB2‚Û“›Kx;%£6™—}›Œbm2%îEQEñÎ‹»™»Â5&â2¬¨tï—T‰Ë—aè.$QwugêN­;.2i`¦‹ºwäâîR$QÜ›2ïš¸oÍÎ[ÜgQÜñösš¸g(îÊ;5q¿!Q™[?[º·d!WÜNs»ºd·“’!ÝŽ¶û¥TÊÛ_ºòvEc2C¼o/q/Š¢(Š« îÈûç”ºf’ZÈXéNÒ]@ÝÿmCwâ2tº›¹[`¦7wš!k†ÄÜ…fîQÝ1wÆî\dz}´%è­q%¸ƒÔ>èÅ][Ü]¤‰;Ì:bRF\ß9!î0÷ñÏpå2ˆûæN.î›¹¸ïõâ.ßO÷þóë‹»)øñâ® Å«Õq?RiÏI„Ý±ôÖ'Oº/wØ´{K±J&×vºdLÛcu»`Ýí¡’îv´ý¥u@bí.&#owm2]ŸŒo’Qºÿ)NÙ«O¦(Š¢(.LÞq÷\Ü1wºË‡÷G¸sG•¼ÌóçäeÌuwõ2IwÔ=žREÝ³5U.2µ†™ý­­9g‰æ{ê³‰¸›¹~»)tÇ—vå£ÝÑö¦Û3{×·™„CV‰¸+û‚|â½³ÝÅÝ…p÷îž±Pæ|®Á²uWŽ…½!zq0 Ï„ö'“þ£˜Æ#îg˜ou´¨Œ¢OÔÓå£Ã™;âŽç‘Id®óÓš¿ÂÛå‹˜}‘ÕÖ¾a˜¸vÓvªd’•Ô˜mWLÛ©n'Ýn)YK}•ŒÛYJåæÒsR2q-õQ"îLÛ­2w£J ‹¢(Šâ*‰;æÞ ÑÝÇe~H1±£J3¤™»;ÇdCwÌÝÔ]Í}P÷f<.êž—C˜ùQÔýGs[SÛn\möÅÝC
;æÌ»ýØ|,îŸå¡Õv,ooOsoâÎÜ]3M×!¿EœÆ¾WO&îÓwU§Å½û$Ï0wÄ½#÷ííCùk-qß˜Róõ‰,˜’Œ]ÐÏò›8$$£ÞžgÛ• í¤dÄÛ¿KªÛû›KªíÖÝNL&)“±òv¶RÈc2fí¤dJÜ‹¢(ŠâZ‰;æî
ÝQ÷©3ª¾]†%UÔÝ/©~¢îã¬ûSÅ
fRuÇÜÌ´^÷ÅÂjÜ7êÀ«ÄÄÜ§ÄpxÞ‘zû ï£—MÜ5}câÞÖöj"îI$âŽÌ{œ¸7&ÅÝž®+îÌçO-îÊ‰»0)î¼ŽµÿWhSùxn	oWÚ´=ÝI¥¹=·«µ/¥¦1¼=¶É“é ÞîÓí%îEQEqÄÜUÝíŒ*ý2£U%ÕP/óXàænâî†îôË(ôËø‹LJT÷>0#{ª³¶ÝyàL÷Ôâþ»{ˆ»ãdâÎCïó_L‰û&œ^Üï#îúlw8;qçÙ¥w^µvecû°×vñv¬]Éî-åÞ®ãvÄo–t·£íœ\b)kW¦âíŸ*%îEQEq‰˜VwH1q‹)\Q˜ºÇ¡û—aèNÐvŠ!ÝÌ]Õ¤û0s±|JUðµîtCº‹Lý5U½É¤ig±ém"hQ™yWñÒ™ûØÁßXÜ!wqßÌ8 }	’¨ŒÂ7úðömžÁñâÎ/îÆŠjHœš·?–	C??qbãvIÊlKHÆ´ÝÝITÛ•‘·cíþâK©¤Û›¶“nÏ½x{RŽ.YL&¦ÛGÚþ«xt	e‡rö¢(Š¢¸zân3wÄ}tGu9.£Cw—¡u‡TWÞcfp÷X0#]`ÆÔ]×5O(îÂ•÷½\Üï¬÷Û%îëˆ»j»Z{Óö–’ÑÃ˜¶»
HB2x{¨€¼îv´=ënú›KÄd¸ûx»wµö÷¢(Š¢¸Ò¥î0NÌôæ.˜ºcî.é®<R†´•îBˆËì¨&Íêî—É3/|5dÜRU\¿3aêî46Ç4V;$)R7u'ãž²¾«ß»w¯O¹G´WfÄP‚“±{ÌØ]¼¦÷tc$îBò!‚¹;“7s§L¦‡Çp«aïÀsÓø·Â
I÷OÝÄ]´½I¥I†*™Ø%ƒ·cí£
Èïè’qévÉ°”jÓvÁ¦í.&Úd’£KB\K¥»]èËÛ;mÇÚ«º½(Š¢ø?{g³Wz„aÎj´ô³iCv‡`Óœ0™lzã!«a˜…2aðìÈ*‹Á¹oïtòE¥ê;uÎsªºúèÈŽ¬¿zÔ²º¥ö€<S¼õVq#ÄýOŠÍÝQwa´¥Š¹» » 9wò2Ã9¦ïGõ2îª æNÔ{Lf(˜AÝóZ÷¦î&ïfîv’©eÝ—õXâí™®bî‚¹ûžbTµ”ýrÅ}gSÜM¿#8GÜ-ÖnÅî&î(:/!w˜î‡„ùân\Sq!¨¶‡&å¥aÙv!-ngÚ.ÐÜ>ªnÿ;Óv”ÌæRê÷ÃRª»¹dÓvÁMÛÅÛÝNê—Ã¬]PgWJÜ‹¢(Šâ–Š{~GUØ¨tÿ›ÍÜ³UÁ·Ëè9&º“—‰÷˜˜º;qOÌ©»ú•¸{¿¦ºgMpz´{ª¿vˆ·ß5q‡ùâÎëÛ.îX;+©ÿí´ý›¶o÷âÎ´2¼t{LÉÄdÆ7—N(“ÁÛÕÚ‡x»Y;·R),q/Š¢(Š[-î‡NÜYQeèîÏ¨¢îcJÌ=tºSêþ]ŒË°¤*$KªâîÏPwéUÌ¬]˜½}*§ûòhÖnâ¾ˆâ>‡	q·ïŠ´Ëck‘{Ÿ•éî±v¡õÝêf‚¸+QÜ-1£u“â®?ÝßŸ'îde4,Ó×È|Œ¸“w¿JqÏÑŒL’yïšdq÷Ú—Rã¡T–RGóö¦íq)•x{h“Qow)™çÝÍ%R2NÜc{ûa‰{QEQ\WfÉû|qï˜÷xF5¿ÆÔ«{²¥Úš!•..#ÐéÝ=n©Æ±»¨Õ+Ìˆ»7u?[’ù>ÕÏö Ä]øqÇÙsqWìUjî]äÞ`îvsÌÌsq£âÞžÉiØâóÅÈ	®¸Ã}kWm'$ÓþZ…h{nO¦íÚNºý—fí®».…îö,Þ>!î¿›+î™·—³EQÅ•«;x{‡&ð¡ÕýK®1Q.£ü¹#ÛQ¥_†%U’îé’ª5Csw2	ÑÜÙSíhYw¡eÝ-ì¾X÷óv­šîú«‰;Q”åž™;Lhû”¸÷Ia»¸ï¨°wèK¾dXk{à¸á6)íy¿:¸»ý˜§©¸Oš<Q™)qç=S\…½t$ÿðÅi°±TÎ-‘lGÛÃ´l{¬’Ñq»i»`Ú§í”É°”J$]2h{¼¹D{¼¹Ds{³vÑupÊ^ÍíEQEqcÅuWÈËŒÝ™ºoU÷¤^&ª{ÛQº¼Œ`Iw«†DÝc«;awŸvß¼Ét¶X«´›½ïvI™ý»FÜ7[Ü›–#îúÝTÜŽìq‡ÅýáÃ_Ý{wjÑvjÛÇÉvi'Ûžî¤†2R2NÛIÉ’¦µHvR{kGÛKÜ‹¢(Š¢Ä},îòÐ™»¹û×ã~™“..óÚÅebÔ]è/©~ëZÝ3ßäawÆî~Mõe¬˜ùp¶\›ÑwûèÑ(Êmwû:GÜ[¹ûÊ>îš¸Sò®!xÓv±öAÛåïSÚÛÎTB2
!™fí‚…d¸”:ÚIe)•˜ŒV·¿î¼.™¯ÍÚµö÷¢(Š¢(qqW	Ë¸¸Ì_1÷ÍJ÷XyBÒsL‰ºÓ™TC¢îéE¦0uÇÝ‡“L–˜Ñ©{»ssèt¥æ®Pæ®˜DÃ“%îüŸˆ¯‹ÉÅ]yÚ¼½±ÕÜ]'äÿIÜŒ+÷6kkï{d~fØ.„Úv¢í„dâJªknÕíÖéÃí]2Ü\BÜ“îvçí
K©ˆ{Ë¶—¸EQÅmwºKô„¸ÛÐ=i—s'.£î®CwÅ-©†‚™¼Ò2åYwÜ=¶CRìn‰™Z9híªÍ—O-2-î;7KÜa¶¸k¡ýOò/ä'yuÅ]¼ýÞ»•Ûÿ#ÞN‘ÃögÉ°=dÛÎ¤†&¥þà+ ßÝŽ·³”*Úr2¹¸Sß^â^EQ·ÊÝÇæ.4u74.cîîÝé—‘›/*îqèNÐ=5wš!•%ÕnH¿¥Ê-UsÆÔ=Q÷Q³»žSåÆ¿û
«í×S—àöTg7Aâ‰æn,."îÇ@¡Ì¦µß¿s÷Ë©¼%on_÷/$îS¶>KÜGÿ¹œºRýÁ=22o\[bÚž‡dB¸ÝB2B’¡¹]ºdâ¸=¿¹Ô¯¥þKðãöxt‰ÔØÞn¨°V%eíEQEqýÕwúŽºcîˆ{ÚÉŽª[REÝÃ9&Á—º\Rµ%Õñ–*y3ùÐsW0w¥©»&fÞŸ=Zìš¸›Îâ´ˆ; îÑß¿:Ç×S6Äý+÷Ä:È¡ù±³u÷GÂB°·ŽD~×@×3qÄ]?µ\‡Èÿþ$‰¸‘‹ûœ„»{™™öÅ™/î]HF#2«S×ÚnøÔ’¡¸Œ·ÇÔ_¬L†.W&#Xu»`·RýR*Ú®Þ»d÷Ñ¸mÿƒ€²­½´½(Š¢(nƒ¸—1s'0“›ûº3uÇÜÌ]	Iw)u·V÷¸¥ºaîŠš»’»»˜»`öNØ]Ô}¹vâŽÉ®?‡¸›µ#îÂƒ‘¹{q îpAqß 1Óœ½é;LŠ;|ÑáÄ}6¿¿DqÏ£2"îZÿHLŸ‘y¥8kwµíÊp%Õ{;ÓvvRÕÛeÜ¥Æ2·¿8¹dãvaðö>$£’iô1™÷¢(Š¢¸«âÎÔÀÌ`îœc¢Óuï’îo?tÏî1Y^&ÞR¥×½©{,‡ôæžõº¿3í(Së˜YìÚ^ªpÕâŽ¹'â¾)ì“ân%1ü±æ‹;Dswç›w´}®¸ÇÃL[Åý .IÜÅÙÛ>êo,#Ó‡d¶ç!óvî-‘m·H•v¦íTÉø”ÖNJ†“K‚/ügzrI½Óö÷¢(Š¢¸âÞ°3ªÂcÃï¨
¬©uÏó2"ï'ÖéžNÝ“%Õo™º'™P÷´aw9î˜Ñ–kvÿY¦îg’	ß_µ|VLù’Å]ñQÜ÷ÛÅ})íWXDÌÃ½¸+ˆûSýoÿ$qGÛWÂGŠû`Ú~ùâN÷c+’‘ŒÌ;ËÈô7R…¾ýQÎÚ¬Þv²íx{œ¶S©ÞžNÛ9¹Dyûó+©J§í¬¤
n+uv¡ÛIJ-q/Š¢(ŠëÊùæ¬¨*ÝÜz†î¸{Ì˜¹‡¼Lw:Ý½¹i½ŒÆeb^†¬{0weëÔ=ï˜Qu¯G™,ß>ÖÙIq]NMöM`ëƒÅó¦ î‚	9âÎÀ}o±ÔO`ìÎoò÷´UFþ‘mÆNÿÌ,q?ŠâÞaÞÎÊjðr…¯÷Ý¸ zð‰LK»¢OlØÞ¬½i»%dH¶çÓv w²í1%; : ½·¿6og+•”Ì–H¬=†Û‡*1öÒî)k/Š¢(Š»&îÑÜŸ7däNÐÝfîÿP¬R¡Ó]¡Ò•ºÁÜ•ÌÜé†T0w!$fšºã¬W îOžÈcSÜƒ¸ï5uÿTq?ºaâÎ·/híï¦¼™ßô©ÿfØþÒed¦í„d˜·[JoÿÑw@“aÜ.¨¶Ó©ôóö·ý¸=®¥š·—¸EQÅõ÷ÌÜiu·¤;‰™–Q÷XiâÞfî1.£XÒ]u÷ý2¨;Ý¾’-Õ$ì.ugìn‰]Tmg™Lg“:ÈÔÛ©ƒÜÐöór3ý[ÿÒqWsßÙSHÀ¬wÈ·Nºq—®™!üò´÷m§í®Gfm_G û	þMÒÁ¬]aMUrëzk~F9ò1î™i¾ûîD“dÔ~žOx»0´?ZÌ°‘ê´=ô¶’q÷–¬¸æv´]`Ú.øC©!&C¼îv¥K%'ƒ¸‹µ§9™Câö®¹ÊÙ‹¢(ŠâÖ‰»Ý¼?VD‚»“sõ2Y§û‰™;êž.©ªº[¿ŒUCÒÙÌÝ©ûdÖ£L&ï$f¬dæƒºûZµ}SÜ<ÀÛ?]ÜÄ]Ùiìmw‹ÝwQwÄÝ¡âNñû`ëX;NnÓv¬½ûú{Rñ'ÿ¼BÝWˆ»<LÜÁ§Û£¸Û[2Þ)ü,aŽ¸#ì½µ·h;í¦íÞÚÑö0l÷÷–¶»;©JÛI˜¶Ç¥T´½÷ö“ÆíY™Lh“ñÖ®ÿi>VúQ{‰{QEQÜeq§RQqoøSªÙ9&ÍËpH•¨;—TQ÷ÔÝ;sï3ßyu7wW]ÂÜ9ÉD±{#¨;-3o|d¦3æMqßKw<weq®¸»Ó¹ân_ÅÛçˆ;/wÃž'âŽ°gâÎ·ø‘ÀoÜ4wÞqq7ôy³ö>#ó†ŒLÔv"2
™ÌÛÕÚÑvšÛC¸ÝJU·³•ºíäR´ö†H»Š»u@–¸EQE‰{wqW¢¸SIÒ¸ŒŽÜsgè·TMÝq÷™º÷ê®Duçœ*Swqot‘»´y9piâ®\–¸›—¸'jdü­¥l#UÿþäÚþ½íÒ É½%³v_é..™¶'Þ~"wóöTÜÓq;ávñö÷¢(Š¢(qïÅý06º7\\†´qêe¬ÓsLê.¶c­îdÝÍÜ¹¦Š¹s’ÉgÝ*fpw153wAÝ]»Ýwö–ŸEÜ…-â¾Ø"î‹yâ8÷çwå¢â.Oq?°˜â>É|q†í-"#t³v=Šµ£íIm»j»óvÎ¤
·[äÿØ;ŸÖºÎ#oÜ¥…{E,×±â€¦æº6A%Pt“b²h§·”BÅYè³ôChã­¾„ò¡:óžyÏsfîœ«{%;Áñ<‘#ëþ‘µáaú›ßtmg'•
Hwr)¤ÛYJm2l¥š¶Çöö»%îEQEñ¾³E¥;îN£»0m—yêÅÝõËô™»|—Ü}ŒËÄ-U
fbÖÄÌß)‡œëuW¦‹ªÝÜ¹§Êàý”«LBWwu÷ß²“Jº}­¸\ÅX+3w]2LÜ³ã©Æf™4ã~O°ÈþžàËÜm5UI¥xS‡öìÍã–U=Íºyõ·ÏkÌÝ@ÜòÄoö\D†[K§$dòÚö$"Ã´Ý@*Ã°Ý22ì¤’nÇÚÙI%&cÚþçQÛ{NÆ†íY›9N.õòö?äåíÕÝ^EQï“¹ÃÜ5&ÅÜvÄ=š;y’î,©ª¹“t§ÔÝÝc"êŽ¹sK•†™^0ƒ¸cîÔC*ÁÜã¦j£w»ÿOÜý'«x¸µd¿íÅ=yJÅ]h?NdüÁÑ=ÔàHÈÄ]þŽ½“·Sø˜âñŠ{dy›Ø{úèGÍ°Py˜Ñwý„¸ë:ê§·Î—fímÚ.Êžì£âídd\ý#µí;©“H²íÿ¾Ë+ i€Œ§RéngÜžt@¢íˆ{h“QeoÌLÚëæRQEQ|ânŒö®¡â®èÈÀwT‰Ëxu7w§_F`æ.ô¨;¥EÝ¹+QÝÉºÇzH¥›;în%36wÿ©©û®ð®Ä'â.V¾•¸ƒ>rt=q7;?\D®-îpMqÇÛo îŸ‚&d–\ZJÛ±v„Œëf´ý{åŒp;©ýN*ÚÎR*éönímÿ¯âÂí®LFþV™¶#î.#Sâ^EQ%îMÜ¦îQÜÔ%uÑï¨bîÿÆÜµ_sWuÍ=žReKU°‹Ll©uÿž“L»wïêNÇÌP2ÓÜýXq¹˜·.î-î~|üd×‰»¦cœ¹@OÒ¤â.OáíÀ\=ÂÃoYÜaÇ³w5·¸_M"îjì*îV ©™ó±EÆ×ÈœbíôÈ¬¯m§·˜LÉpo©OÛóC©xûkÂí¾Rµ=,¥êßªžm7oGÜñöfí%îEQEQânâ©n—aKUÔÝÜ]Íw7sWLÝ•>u'ëÞÝ=fÝYTEÝÓ«LJ/™á.“ÝÅÝÅµŸ<y×â~ÿgwø€ÄÝî,í\ˆ¶7k´=¶È0mÖ®¨´ËG‘a%•l{Ÿ¶‡µn;©ÍÚ·».N¥
ñTj¨“!Ü^â^EQ”¼ƒï—QLÝ…»i½L7wvTc§;Cwúe(˜QB¿LÏºænÝIÖ=7w"3_»Ž!†Ý'õý.“¨»ºû‰ÃZqÔ|VÜi˜96q?¬Fuo_…¬ÐHÓvSUÌ§æ~bsïf~x{9aNÜùrùnÌ]KñöÍÄÝåf,ÛnQ™žlfíBÚþH°=omŸóv×$Ã´ýz;Ùv7mU2Äd,%Ã¸=tÉ¼ˆéöX&£ÎNJÆvRqö’ö¢(Š¢x?¹ÎèÉ;ƒw÷§&îAÝÅ5Pw3Š»¤*§T]¿L4w——QuéÕÝÂî^ÝÉº›¹+¾Ù]íýËi¹»™ûx—IÝ}÷cA“èÂân^n¬¼®=Ä]”[Õ=/‚ìðUw{òž0ù)'ÎÜ—
£·ßÖßùÉ»);¬÷àõtD®w{RÔ›/õßç¯IïNÜ…AØÅßÏoM"2–éÞ>MÈ|98;ÚÞ0mqÿ¶{;ÚN“;©/•VÜ.$ãvóöù..¥RIF&V·GmŠ¸‹¶3iƒöê,Š¢(Šw1wÅ5Cfy3˜»©»â
f\©»k†Pw‘‰cªi±{ÒìÎž*yÉº“™ÑÈ™±ë·+î¼f•ÙXÜóNÈä;ÀÉÈ¾¿«z(dâ[‹{|~gcqWš±ç´»ªqâþÑÞÞR2«‡–ääÓÓdØNý#E2Im{h€HÉLï-	=ÛŽ¶“**¼Lôö~s	qW~_â^EQ%îWŠ;—T1wÔ]Å™{¼Ç”çeb«{\S¥Ö}2u÷'™ÎXTeOw÷a÷ü¤ª.«þHf¦»»ŽÝ›¸ï6~qq?¸™¸·…Cùµ|âÎûÚoõ»)uWïÆÕSqßÌŽnî®TF†ð;fíýÐÞ¾~•…T´}ºzÆµ¥q'U¤]>LÛÉ¶³’šh»ÛIýÆ{ûŸ’“K_¡íIs{‰{QEQ”¸o.îdÝQ÷0t'-ƒ¹ûnHSwÌ=¨;½îv)öºSì>ßìŽºçcwïfšffÔÞUâ¾\þlâÞÕã$k2qç‰qWaWg?—gEÚ)‘QTÙMÛ•4Ù~Uk»ðµíŠË¶‹·so)×v¼k'ÛNº=ënGÛÉ¶—¸EQE‰ûZqÛQÍN©ÚÐw÷C÷<.C«{3wsŸˆ»õº¿œ1÷3›º[Ö†™˜˜Ñ¼;õ±’ÃLêî–™ÑÁ;â.l*îó¯ÛPÜ±÷Þ.3|™ˆ»²ªîñ”ªNÛ»VOÄýpqŽ·GÅ=gUÜGQ_"îQÛƒ¸ïuq¿µ·Ã™%Jd§«E2ÍÚñv¦íx»Šû8m?óÞN¤[BÜñv±v¡k;1™¿“IªÛ©’f¥²•ªÖ^â^EQ¿N¶UwÚe¶÷X/ó2TCþÓOÝQ÷¶¤JÖ½É»Ìs3[ºÿugìž¸»Ù{ÈÌ°ªÚØUsŸõö(î<0/îÊÄ}ü&ýí|£ØéÄ]À¼ö·wÜùv´ñöUqÿ>cx‹ÖÐì)ºÅªÖî2ÖØ:Û¶ôÈ(dd„P$æíš‘‘q»EÛ¹·$xm§²ÏÛ)n§’”Ì5Å6™LÛ«L¦(Š¢(JÜ3q'-C\&ËËˆ½Du‚¹»ÀL7w+‡Tu§aÆä=¸;ê®ÄÄîŽ¼ÇšËÌô’È&ïmî^â~]qçÑyq_È?‚{[wá¼l,Ö®Û¨Y‰LÞÙN´m'#ƒµ¯É í:nOÎ-áí„Û¶+!%CL¦Ä½(Š¢(
Ø@Ýwÿ|Àc
1wî1©º'Qwúe¬Ô=d2s'éîË!¶TÿÁE¦sWuWyGÝ¹Ê¤ˆ¹ªÝqw]T%43\Uõ÷&îBní‰¸gWšhƒÌî'yg§îñÈÅýxôõí[š·ÃjõK3ee­½/”¼]?¾ÖË7î¸çöå{{†MÜå=‹‹“Ë±B†„L;ª	¬½á‡íöÇÁFíÎÛåPâíáÞ
 }ºÝB2"íÊ+ÓöoÖ¦d„o÷»
ÝíŠX;Æ^!™¢(Š¢ø°Å]aðÎ9&Ä=ÙQ•R÷P/C^&9¥úú5KªmìÎ–j,‡|Ô=»3vŸï‡ÄÝÝªªAdFP{×¼»…f>kÜLÜÅÛ¯w3uð›Š;+¦¿VÅ=—÷þ6òÔÙáù¾¼üñbÎÜ—/îãëêíJüYý%Zô.Ön£v»²ô£Ò­½“u?Æd;ÖÎ°]8K"2Ê¸’:oI­.™×x{ÜIÅÛ…>kgØÞ¥qçä£v¥Ä½(Š¢(JÜ¯÷xIU1so˜¹Ó/Ã’ª»ÇN©:s÷3®×=I»³¨JÅL™Éû!‘÷ÁÜI¼·]U“wÜüÚ÷_RÜo{qwj¼™¸Ãêk?~ÞØ@Üwœ¸\ˆ¹_Œÿ1ösäùPÚK°v·Œ:dòöÇ˜lÿ6†dl!5I¶3m7ow!Ì¤ò•ÐwRçíŠ÷öùK©%îEQEQâ¾¸S)AÖ=˜»ÂÐ=5wÜ]yÅ=&e2uæ®4sÌÜ]±û7u§d&šû|Úu'3ChæãÕÎQvýµ±¸ëó&îÝÌG‚¸÷TÀ¯•6÷¦È7wãâ¾Ü×s­ò«eeTßåùü¤áÓþIÈ™ÓöäÒRhŒÑv6R§µíl¤Ú½¥Ð )`íNÛin7kÞŽ¶Ïy;Ùöö—®Y{‰{QEQ”¾¯è»W÷Oœºçâûe^äý2
æN©»âÌÀLXSå$Ó`îlªa÷3Ô«L³'U‰ÌÄšSw+š!4£ö.˜·Úˆ»~îÐãÞBîˆ{q§æ±çÜ%DmŸw!Þ7eàž˜ûø®ŠûRq_ª¦üE÷ø! Ó¿÷‹‹ËËK2$d¼µ‘‰Öî’í®GFiÇ–öQo'ÚÎ´]p!¼Hçí!%Ã©Tõv²íªí³â®Ú^ÛKÙ‹¢(Š¢Ä½¸ë˜ïjqŸ¨ûÆî˜»Ð·TÉËø‹LÑÜ…uÃžjZ1³yØ‚È|ðÎäÝ–U‘wµ÷˜•yöìÙýûòë³H]‹¹ñÅîƒºŠ÷•àD>:ûÊ ïNÜ½äÖ%C5ü~`h–1o)¦îÑÎ1v/â¹¿«²7¦ïYðÙÓ[ez™ÌÂMþÛ=)³¯9âìC[{ÛFµÚGÃºý:*Ö>mgØ®dE2DÛåœÉàíl¤FmeU2VÉR*³v…p;óöYqïÿçWïn/q/Š¢(Šj†\©†ü¼cQw3wôÝ¯¨*YÔ©;3y«;åÉÔ]°©{s÷nîDflM•´{™‰«ªjî¸;³÷44£ê.™÷À3Ã†íO:Ò'K!>|ô°áu\'åMÀÅÚ5ð;¦íú†ÍÅu6UC™cB8]º¸<É×¾UdÎ('—‚H{Èœ*k«I¶g—–ÌÚ	É4kÇÛ›µmÅí„dðöÁÚ™¶‹´ÇæöXÝî§íæí¦ì ñöæë_YEQÿgïŒuã:0Ú'‚Aª0KE Â
%
2a³`“>FÂAŠ@† )¬Bï øì‡P£ˆÕ>B
é¥2ßçßsïÜ¹ë¥I:Eæx—\jW*8óMQ”¸çâî¥îFwÔÝˆû†~3˜;î¾lîrwºO§îöÐØ°»X
»§qw23‹f¼;fìw'Þî3wkDÜOÇÃùö¦±Vw÷÷æí¦ê{†íazK¢!q¿gŸj¿)d‚¸Ã¢¸Ë¯Ñ×á^éÌ=Š{üãx'1÷<O½Lc5äc>ø*ª BæP"“Û³h;ÚîÃv´}2m÷q»[;!™‰·cíx;!™Å.šÛeímØþ'ºd÷OY{‰{QEQ”¸_AÜgõ2£Nw1
ºãî‰¹SÉš*™¤uÇÝ¥î>xÇÜQ÷,2ƒ¾ç¡™±¸Óðî¡™qjFl/îú¬½ßÄýë\Ü5n^¯Þ¯Þ¼yûfuûfÄ]F­/{¿½¸÷_@Üoÿ¼µŸõ\)£I»úc<cÎ~öê<c$ ƒ²çÉv†íx»¤½1²v´}²“:®m“&Æí3oÇÚG÷<ÜN™L‰{QEQ”»/’/©vÒfÈG“¸Œ@Üç¥îÏMÜ'Ý>u§Ö^÷lMU¸¹˜	awÜ]òž^er²ÌL¼Í”6Íš1w¼}IÜeîwç¾‡fº¸¦+o_­ÞÛCÞ>w}4_eÍÅ}!ð>|9Æ«Å]°Mz3â®—ýÿ0´T{/}4Ú¨}äìÊµ72X{¼µÔ´ÝÄýïX{Œ¶’‘·#ímÙvzÛÃÁ%šdì1¯n×Vj~rÉþ:…HçqcŸ*{Y{QEQü¿/ª~2âéÞ¹¥š­©¢î‚ÀLÌË0t÷±;§T“^wÉ»Ä¬»É»éc÷p•	uÏ"Ó©;‘Îú4“çÝ_9¤f<óÞ89¹ûàä=â¾¤zò@´^H±kûÂ¾ÛÂªOÍ÷@æ;t¹ï÷Sq·Q{ÀîŒ8o¬Å½ý`ßõ:Ø»<NÖÛ¤ÐÃìžnÇÛ7gÜñöNË¼+Ún™&ízU»ã¹ö3œÝ1i§DÆLÛIÈ íaØÎBªÀÚõ_Õ°’Ê´Ýµ]’i´;©†VR·Ç”LÉˆ+©£;©þ—îé'#j!µ(Š¢(JÜ÷ÅÐÌ²¸Sé.ØQeêN7dÌæº!Ss3»sPu>vgêžlª2uÏÆî¨;‹ªÐïâç‘¼KÜÝÜÝÝ×Å2]ÜO\Üw»¸ëµœ|r™6ìÈÎé”±É»‰»=õ"w'wqÜÌ¿¶GäíHÜsqø»°qC-ä0iïõ1?±‰š6ÈÈÙ7¬£
ríeÖŽµO¢íßOZÛ5kG´ý/ÓÞö¹·ÿàÚž…Ûi€ÓvR2xû’¸‹Ç%îEQEQâ~Uq_v¹'â®§Ä]î>6÷—‰Y÷ïZ¯{(v7{BÝÝÝiv‘™lS5º{ì™Éïª’x—¿¼S6ó¡q×£0‰¸‹‰»þÔÅ]˜¶š§ß’¼»¤ß[»úad&î;s@üÇâî î.îdß»†ã”KŠ;ïöh/Ôû¸òP»ÇcŒ>g
,	ÛÓÛ¨±CkãÊv/mgØî=2‚ˆÌB2b!$²í>nÇÛÉÈàíˆ»ÀÛ;_|Qâ^EQÅŠû#‡îÓbH1î—£fHc˜ºKÞu—»SIÖ}v—»{±»ð©û÷2÷&ï˜{ÚîŽ¼göž‡f©™›ñU»§:DÝ—Å}·ƒ¸mÈÝm¯/ú‘Ò÷ îö¸‚¸û‹£££'O\Þí3G—w¼=ÊûLèó?±}d%..ú&ªŠÚŠc@f´Œjœ=H{ÒØÎ°½I»Ûÿá§–zm»[»¤Úv1X;WRÉÈˆo¶ë’qÜþH”¸EQEq-â.LÜVT“‹Ll©6fqSš¤Õ=œdBÜ…™»‹{»kì3$fÄëiA¤«{.îIKdœ¼ŸšLÞ©›ñM¦îCº}`ðvÄ]ÜúæânÆîèwÊÜ}ìî¦þ¹¸¤¸;ˆ»aâ.öz÷èI:âÎëKÃïöpÌê#ÎN<f) “ŸF]wi»—?RÙžDÛÉ¶·a;Ç–mOÄ•Ôèm—$îÏcºp»È¥²–z@Œý½+q/Š¢(Š2÷-O©B?¥æî¨»ÀÜ;ª£%U£Ýé†$ëþ#êÂîLÝqwê!ÛÔ]êŽ»¿6w7Ò†ÈØ)m×³3¿¬jFi4ÅÜŒwE~æ<èâ>\`2qŸ!qç¥ñÐËiv…Ü}"î›¢2ûÎùœ…²È&÷{.îÑÞ§¢ŽÄ_‰Û-ÒN{LojgÎ®¯Ïo,‘™6?ÆuT¦í®í$Û‰¶Kýc·vŠdÉx¶h» Ûþ•..ã‹KáTj<”£íÌÚáé íPm2EQEQâ~mâ.B\†¬{˜!ìÞÕ}óžêØÜQ÷p•)	»GsÑÝiîþ,YX5ß$63®›¿(î§Åý|÷°™8{ª7(îâZÅÝ?®æn+IÚ§í1gö`Î>·v¼=©~ŒÁöèí¯—†íl¤Æ©²v´ÝÃídÛ¤·Ýøj@ÖC2dÛ£¸Yâ^EQÅvò~µ‹LfB\†¼æžŸR•º‡V÷,/{ÝÙÔ±{ÜSŒÝåîdfÒ´{îî¨{<Ð½ÿ$b[¤’2b"î§¢}ÄÝ¾JÛÍÛwÍÛÏ÷ÏMÊ?·ïãî.äwû‘sgúÓÎ¢2S~×T=¼CêÙ˜aÌ~¡î9;ñ˜)aÒžGd–“íœGe•Y»µ»·KÛ_Äiû¬HFL
 ÅßhnO¦íi$m2AÛ!™-î-•¶EQE‰ûµ‰»ÝÌ=FÝ™FY÷x’	u>vÿvãØýµ›{ˆÌˆ îIÑŒÀÝ;¾®:|{%ZlFîNáL7wKµëÓõ¹¸ÄÝ~Eâ¾¿³¿s¸sÞÅÝèâ¾#~…¸ëÅLÜmW.)î|ÖýðVÑnÒ.úê8óRHØÏ^bí8{*íh{jíx{,\¼µ$(’1¢¶noÚÎJ*™èí”@Î´½Ä½(Š¢(Š›w–TOöžÝc¡Õ}æîŒÝ™ºÛI&!s÷À‰ÜÝÕ©{îîRw3aîîîbÙÝ‘w»G5Âgï?Ó8#LÜ…¤]ò~ËÅ}è–¹w«ñpmîöFËÊXU;wÌý|§-›6.#î´¿·ŠwJf&æþ™ûqçá7V…‡cZ2æÂxïƒöÞC}L¯Žœ}ó2*W–¢µsU‘áÖÑv·ÇÖv¢íh;ÓvvR¶Gk7@º³§—ØIkÌÙE‰{QEQW÷áë&q”ª;Ì¨{0wßRU7ä¼af¾¦JbæßqêN³»ÀÜ'‘Ô=ÍÄÄ{Ô÷p¥‰Uc¢ïë¬;âî×Qo¸¹Ÿzçð?ûq.î2÷;¿JÜïwß$îb;q—·ÏÆXx~ÿãÅÇ]ÙE´OÃ1‰³ç£ö?#íAÛce;Þ.kddâ´ýÅâJjÔvÆí„Û£·‡a»`Ø.mw†Iûq÷Y{‰{QEQ—’÷|IµÑâ2uD3d¨uÏÍÝfTÎÁÐ}¶¥º¹bÆ3F6vOWUév¸{¦îÈû¢»7íúÞ÷UåïÞö>^[õ±;âks’5zOò\ÜåÇ9ç)á÷îŽ¸£èLá#4´ë¨Å1òu§—´óo*³ö(íK%2H;ÖÎ£.Ed†ŒÌ»kŸFÛÅÚÚ~%ÕÀÚ·góvŠÛÅº¹}Ô)É0kÇØ¡”½(Š¢(JÜoRÜÝÜc7¤˜®©JÞQw²î\S7Ì™;7™|ì¾.™AÞeîO»3wÑÝ)šidî.fòn:Š¹ë9¹Ô„½3{ÍÜÁã2Ÿ‰öž4]ÞÅÝ¸‚¸ûÜ]q›%qÄ—TÆÜ^í­ŒÑ{c(Žiœéé,¶Ç`í({È,[;ë¨b¾Ž*kgØž\[âJêüL*áö&íx»x¾°’Zâ^EQÅÿ,3CÖÝ˜‰;îN¿ŒÃ–j¾¨*s§Ry™» b&LÝã¢*îŽº3v§Ý=ßUòî¹¼ÏÛfŒ³À+¯œI³3®çÒrc=u7qÇÜû;ƒµMÍÛj©n©êÇ ‹¨z•‹»ä?€Å?‰âu–Çß>íavwvƒ‚vP®=m‰Òžo£æË¨®íxû¿¦Ãv´=Dd˜¶cíYFÆ ="#°ö°’*’•Ô™¸?5fÙörö¢(Š¢(®KÜ'§TGþnj2/uî1Q9wáCwã.21uÿ.žd¢Øu÷vH¯vO#3qU5WwŠfòÁ{ŒÍ$³÷qì½ÏÝ…4óÍU…Þ»´Ÿ><mwÄ}×­ow57oÄýÈÐÄß€¸'úŽ¸Ãºï}¯½Z©0¦ñþ#û§Ñ¼]Á˜éœPötÔŽ´ÇmÔ|5È¸¶¿ãFª¬] íÚ>9·„¶kÚ.æ!—v=›¶Oçíƒ²ËÙ»±OªÛKÜ‹¢(Š¢¸Iq?Ø(îy5$âžwCrLµÑ®©ÆvHä=?¨ÚÏ2Qîîê>YV[‡f°÷¨ïK¹Ä&Ù·wé»û{§Ý\5Æ{L¦=Ìß î{3q'+£Oæâž8ûžÙWƒ¯_4Þ†ìDcv6QÓ1({îìÎÆ]ÔX"#˜µÿsˆÈ í[µ¶m§J¦[» $c¬C2F^¹,î¢Ä½(Š¢(ŠßJÜ1wÂîYÒq¸{¬uç$îNØ=ÌP2#uÏkfXUå2“‘¸;ò¾èîÐÄæ©÷±ÉÓøNzfªðë»M7+î­~aä]ˆgbÞãë2váƒv	;žÞ_O³1àÆŽ´çÖždv‚íh{,‘ïRkß¸ê!™®í±¸½…d¶I·“m§K¦Ä½(Š¢(Škwˆòã–*SwöT³‹L")‡ÄÝi‡ÌÃîRwºoµ©kf^§¡»#ï[†ÞãðýåDÜ¥î!=ƒÀ„hú¹Õÿ²w)z”Q]ƒ“,À¡Šd"œÑAGÆžˆC2èM¸ ³&®£ã¢¬Wÿ«œúoÝ¯¨ŸN:¸§éŽhÒ‰ p¸Üw¿IÚëóó¥3=¨ÚU{›zÒï/Øzô4U_Y}ÏÂ÷hMÿ²‰¥SÜ°/»9c÷þ×†µ±7¤½hg÷Ú~½‘9|Š·ÿ0óÔ¾‘ÊE*díì¶OH¹]¤]Ÿ[*e—›T”ÝH{öC!„pºÃðE&Üç˜¹û3^SÐuÈîº÷Ä3fv3z©JÛ}†ÎÌ»KÕëkïî?ûà}½[yW‰Þ×xøîÐh‹æÛ™Z‰laŸ·fNœiû²õXÚ^qùÌVÜç›×þ•}[¼ýìíBÕaš×Ý‰ig_•ØO_¾îOGÒþ½­Ç`íÚj÷™ë‰ç…<³´n¶û{ÔqGæÉ©$CEf†%™MÖ^,%Ÿµ7Ï¬]“ösc¶‡Bá‹{™»ÏÜY˜¡1sBÌuŸÂŒYv/äAÕ~Q•KÕ«‚Ü]bwff¨»7¸»•wz×µHØ¸ûôU,¾RøŽßqxYO?)uù{?âÔË3ˆ{¡+*î³¦×·¨/õÞÎü7s{ûfWïBLÑ	;ªŽ¯cíÖØµÒ~ j/gWm®‹íÅ:k/ü=*Þþ´Ãö‚ùÇ.É¶Ÿi;ÞÞÒn:2&ogG&âB!„$î„îÈ»éº£î:ëÎ™*}BwmÌŒ÷!i»cî-ï¢î[w§2£¥™ÂÈ»Ø»S÷ÞVYº3­ï<ÛT´hDáoß%ñ-ñåñJu[Jáë–túœ?Þ*­éÈz1}ÿbñõ6uxÕ¨²õï†µû¹ÇÆ:;ÖŽ¶2×zJÖ^Ðl—RÇo-Qn—–%óJª÷vR‰Û#î!„B¸qGÝ¥é^Ÿë}™uÿzfUufÌÝž©ú&“OÝiÌˆ¼_¹…HrwúîØ;în[3¾ò¸;Hu¦òÌâð@ÿOóº“5Ð(üûæ¶?ê'Ö·ó'¦¾I×ÛÔ?£jû6gœÝ”ÚÇ§¨X;I»öÚ7¶¯ZÚi¶·µ£íZm§Û>kûïK·]¼Ý·dŠÑp;q{¤J»}Òöˆ{!„î(ïÞßýÈM÷¯`¥îvÝõJ•‰™®º»÷:ä“,»ïÄî2Ùêîå]ƒ÷Â&ïZ›iôfS}?}åGÀÞéÑÐ¥^×ÇüEù‡ÀÓËÔH×¤ócíÅbì5öÆíú.ê‚ÛÜ£–´KØ.›íìÈã!Ým/i·Ýöí{K@»}wFc´‡BáƒŠ;¡»w[uçL•–Ýi»÷ÄÌK&f
Ì]Ý]ßT½ÒSU_šÁÞí¹êø^${/´?ƒÄïÆðÁ{h×TÁfü·Í?{Å_Á°³•uYgMÙcíþU£v´Ýœ£²"ƒµóÒ’+ÉðÖRK{Ÿ¤²ÚNÚÎ’Ì¨$£âNÜq!„Â=»ƒ[‡ÄÝKÞ¥0³˜{Qâ.…™B3Äîjî»Ø˜aÛÝ»»¿Uei¦ÁÝµ63.½ƒÈ;þn x…§­B¥æRô—ñÝê¿Ë&j×?%ºîCöýJ»¯Ç0ÖN«]2„ímFdh¶›Ža;©ËAj{û¢í/Š³‹Tâö3moo'mŸÙ”daíåì4ÛqöÌ¶‡Bá¡ˆ»š{¡gªëÇTiÌ¸G™˜˜)0w–Ý]ìÎ£ª¸»Ê;ö®¹»OÞ}oÆû»swô]“÷î£Ð¥¹/øÍúw.ÆÊ®Q»7v@Ù‡I;Y»-ÈðÊÖ~EÖ^Ònšímí¤í”d^²#CG†¸oç•T3ÜŽ·GÜC!„ðpÅ½˜½…iºcîZ˜YBwRw¦!™˜QsÇÝ3Òv—™™VwÉÝ¥ï~íƒw_›ñ¥w¿‹¿{÷"Q¿Wø†^Ôve?d÷•v_ñQ;kí¢íÛ;jç}T;#ãRýþ#»íkk×´½ $sbÛngI¦(k¸‡Bá‰»Ù‡,©Yåî¸».Ìàî^ÞYv_çî\ªþè/U‹wg"òÄÖÝ‹vw=WEÞ©ÍüŒ½;?^ŸÁßqx+òL§[^m>,|DÝQ˜½€v„Ý·cˆÚÍ)êbí¿ùkÔEÛ±öa³}úOiïíÇó*2„íúÞ’’YgíÓ§YŒ¸‡Bá÷b_ÜY˜ÁÝ}Ù]r÷6w:3¾ïÎ©jÙ;uwÜ]’w}ŸI—"ýàî~Dßñw^¼‚×‹ ~ºOW[?ªì€±ÛF»ÎÇÐi×¤]­°ýææXCoï¨½Ð7ÿˆ¶[q_‡í÷B!Ü·¹_®ïßÌ ïVÜ1÷®Ë0ëþLÌ¾ûlîZv_oÌæR•º»-Í´¼ûÖŒnÍˆ½»âŒÚ»ÏÞ½¿ë~¤õwÆhÞ;|ogìrxê…Ýçìêì(»í$í²ãû1ÅI»DízJC†S‘¡#C¯½qS2"î£÷–Ø’)v«ìY“	!„ÂGwx¼ªr£JÕ]»î´ÝõPõEñK×Ýi»2î®±{‹{«ûî^â~^›AÞÙšQwWyÇÝÑ÷ãþŽÀcò—aÍü"ðt+ì(ûpèvƒv´ÝïÇh?†¹öbÖö	Û]¯´—–Ø‘)äÕ¦í,@r•ÊdÄ=„BÄßŒº7Ì`ï²/Óæ.3ë²ûfaæ|²Õ½§ÝÝ¥ªT•™-Í¸§U™ši÷]{÷Ù;ïŒÂH¬­Ø}Îî]×cd@¦ddøÑX;Þî*2Ý’ù{fµ#CK¦Å½µÝvÒv¿%ó¸@Úû¡Ôéö·‡Bá£Š»ïR˜TÝ	ÝËÞgOÒ×T[Ýú2”ÝKÝuÜÝËûŸ‹¼£ï¸û2©;‘ë¹™³Á™ÂÔf }wþ¾q÷EàA¼lJÞAæùhú Z_„½¾rvt|;†é˜õxÌovõ‘†L)»däyT‘v&Û™‘!nï´½p'©Ü¤ö”]n_gíµGÜC!„ðiˆ;`îfvÏTÿ(ü°»”ÝÛË¤1Óæ.‘jî­î…¿VÅÜéÍìg|wÆ>Ù„Àænýý½âÝGìüyU×}3FƒvçíÏ
2ÒAÚ«#SÞŽ¸wÖŽ¶ÏœwdÎÂvRÇ'©Å&o7%9J¸‡Bá¾9¨î°Òw6f(Ì˜ûþ™ªf4w/˜˜‘²»Tf|ìîåýFV5;‘Ú›ÑâÌ¯àíÝ¼ÏßÇ_
u—Kð¦î3võuëì»/Çh;fFœ½µÝÎµµ»°{TH¥#Ãj;óRm7ï-ù“T¼ý%™öv3#£ÄÙC!„pâ^Ÿ0›û¼#îðØæî´Ýq÷R÷†ØawÙ˜Ñ}HFf|eFÕ}ìîjïÏUÞ	Þq÷Æë»IßEâï®ñwWudý¸²cìãœi/ÔÙ‹­µ_É\;Þ.ÖÎŒÌþúã„m¶7kk—fû„éÈ¨¸÷ÿ§sT¤=âB!„÷Ì&fØ˜ñÛ»¼³Ùhì^¬*3ò¤*ï2ÇÝµ4S´¼KðÎMr°ÊÚL£ú>xÀà•­Ã#ò—p@Ê½¨ÏÖÕEØá€°£ìûåfê1Û9F-TÚuüqÝ)Œµ#í¦ ãfÛ5l÷ìÈdH&„BŸ¬¸Ú˜ÑuHÄÝ=¨Jìn7f
™ÑÜý'oî7˜û„š{Ñâ¾Vw®UGê~´<ƒ¾{.ðöËŒ²+Æxmo4i§ £Ö®µöÒvñvÄ]³v}!µK2«·s*™/µÙ^ø‹ÔyK&âÂÿì1nWDo¡”p¢(°È‘ÃP@€Œœ:ñ%|òŒžþÛÃ7[ª?˜Å‚—ªj#J6x(Õ¯!„pËâ^È;UíË´»Ï‡ÝÇÜ´/ÃQ&6f$tÇÝQw}ªjK3‡äÎ»)½[{÷úNßëãb…¿^×ûß¶Æî•Ý;;Æ®íœ}_ÚõÊÎNÚ^l´kŸïÈpl‰Àm/¤ÙngÛÛÙr;R#î!„Bxÿ7™¨;»îTfÝ‘÷ÁG™èËÐuÈÆŒ™Qyow§3£ÑûË ï3=4ÎÞ}o}×Áw°úî“¿*/ÀÓ­­Ï›1 ¾Ž²›vŒ¯Ç4}aée A»îµ«´ëŒŒTÛgiû‚?¶Tˆ´/¸cKÚþ¹Èµ¥B!Üœ¸7æšªª;±û€ÆewÜ} /U¥îŽ»ÛÒL»»ÞŸ«7ã–"Ý“UíÎìø»7xoñ˜ü¥ ã‡ñžnWÙ…=c7ÍŒÝåìXzv2X»+È`í$í4d
ŠínGoGÚ§íæJjÄ=„B7.îàÄ½8.îjî¨;îNîÞ…wYˆ$yWyGÝméýaö`UŠïtg|ù÷Ã_¡ñWª:¶ÆÖg×fŒvc¸ˆj6¥Òn´]“vÝ~ìZû`kí´]¼]Äý›w´Ý‰ûÝBÄ=„B7s‘	wGß}Õ]ë2¤îÃ“^Í¾Œº;êÎÆ¹ûúRs?RšÑÜÎ{1swìâö~¾ãð—‚•_È›°Ê®Î®å.+­˜ÍGdÌ‚µvWá=*‹í„í.nÇÚu R·d;)åv”kâì!„Bx÷â®E÷]ºÜ½ w{/w_Ä]ûî%ï<V%u—Ø}>ðÞê®¥™VÞ/³wŸ¾ƒxùMþzOÇÖ#ë(»ÔÙ½³»¨‚Ì€‚Œ9²äçÚuD¦K2Og“íÚk_>—ï8ûnI†¨]î¤FÜC!„ð1ÄSª~²>v÷æNî>à&“¬Ì¼ÓvŸ¸»ÔÝqw÷ZµíèýÈ“UÓ{cïàþÁÕ½±ƒQv×g?ò•zL;»}ÄÚu°ÝX;™–vší¬ÈÈŽŒ¾H½ßx»î¶÷—F»ýüPjÄ=„BCÜÇÇ/g¸Ôý^RwP•…H™Ñ‘HÔ]
ï¸;ö>¯¼³6ãí÷Õwvgpxµx¯ñžëÝ{ºWul]BvÀ×}Ì.säì'$g·Î.µv´½}lÈè©%:24dŠIÚÎn{C±][2w÷B!¼®y¤ÊE¦bóLÕ¿SÇîÛsª…SwÖÝ·‘%î2ï®K3¨»1wÔ½åÝX5É»nÎ€Uw/ïøûÛó}‚ÑvRvé³#í’´[o/gGÚ›]o—lï°Áv¶Ûç¨Ì¶ûÕv÷¶v:2Ü[Úwö<I!„Âí‹;ÞîÏ©æ¡ê‚˜ûBW$zÝÎæîJ3~ãÝïÚzÇÞfï4h¼ÄÃ÷]®7ô}OÇÕWßiÆ`ìêì‹±l>úR»¶ÚÑv	ÛeûñIVdÐvëííìÌ¶o»í÷B!ülúþ™qHî1t`f»´íNì^˜•™×™Yð®îŽ¹ÛÆ{áJï€»ïÛ;òŽ¾{ƒ‡ïo®î…Ýì(»ƒJ;Úãì~BF¬}µX{¥íšµ®ÙÎˆL±yz¶ ¹Uv¬È…({!„>Dî>Ôw_åÝçîSuŸ›»NDÒ˜)ž˜ˆDÞ]îNqyGß±w{¥	yô]üÝDðH¼Šü›ƒ¨+6`×^¶v:FsvŒ}à_¢jÖÞÒ¾°-ÈÐ‘ÑéGÂvõv´Ý†íšµ¯ÒŽµmOÖB!„$îz‘É‰;”¸cîó¶{«»Œ»Û§ªäî‹¹ëm&IÞ1w-½¿<ó^µAÝ÷›3¦üî#xøÿ”€]ie7Ú®â¾J;OQ	ÚYj÷I;â.síkÜ.2«¶3"³õvÂöy³o'pŸ‹û,Þq!„ÂM©;ú~|Ø½øt¢å}H©;±»„î¶íNê¾8æþçÊ¦îNìní×ª4Þwz3Ôf8Ôd‹ïþí*<‚dðG¸ÄÌ=¨ºÏØ­®û:;‡•¾ƒ²Ój—·¨…Îµë^»¤í¶Ø®Ív·ãìr%caûÑÙv”=wRC!„pâ¾|À)ŸÎÓe÷áB›Ü]ÍÜ½¶·ò^¶IÝ¿`îÜ]s÷R>ì]«jå}æîÈ;öNq÷é»÷wÞ:<5¨:¶®¾îÝ+»;«D¡ }níû™†#K’µ/¼N?zo?IûIÜ¿ñ õY;ÒÞpnéõËz×_ßÓÿ!9{Ä=„Bï†ëbw¦Ý	Þ?­W™`öPµAÝµ3S±»^f2}÷ÜÝ¼Võöî¬žµÞŸÂwôÝçïêðÇsxÏ?SbM]mÝ{C/†å˜g„Ý”cHÐNÒN±ÝžG¥ØNEæ¼!#]lg/ÖŠLQ‰Úe´Ý:{”=„B·-îìCJaq§ð®¹û`ˆ;û'¶‘tfLiæ©ÕÆû€ÈýMdï¶8CøNùÝû;
ï%‹÷<.tïê^Ö½®û«JÄì*í$í»•öß$h—áÇ3o'j×^;Ö^¼Zûò££íZAÜÏK2¬?FÜC!„ð‰{q¹¸KeuoìSÕu!’Æ¹»ˆ»iÍ î¸û\Þ{×—«Wø;=êê‡Ý+»J;Ó1~ïQ³öBû1¤ílÈÈ`{ÑÛö9ê£íôÚ‰;õöáí÷B!|pq÷e¦!›ÕÜOº„¹›—ªfòGU)¼›ÛLíîmï.vÇÝÆÝíX¤žjzAàiÏ ð•÷ˆ}_ü÷Ðô¶øz°/Pv?ø¸vÚ%ko¬´o2H»lÈtGÆGEÛuü‘ÙöM±–Ì¯+,ÉP”‰¸‡Bá£¼S7ë^ömî¾ê¾âëîþ¨*òNÝ]’wÜý+ˆ¼cïûÅÿnywúî‹Ÿjü•ð›¼«{a÷ÊŽ´{c×G¨þ&ªJû×«´kÒn‹íÙªí÷¯˜™öv`ü‘°}UvŒ=/RC!„ð{wŒÉEaxZ…ƒ’I5³^‚h:q`¼ífÖhÝ®[üUGç¯)cùü`{£™àãrß­o÷Já.§Ý«‡àÞÉ…Hµ{oÍ ÷™¼ûÙ»ú]õÞ~'ôÞ!x ?ox$>uú¼Öì<?­<ØívÄ>ž³s¬ýfg?FÔ¾¸Ý¯È¬ãvØ®pçA*1hç{K{J)¥”þw‡Ý»ËÖÌxî.r¯X—±SwÆîtW¹³ò®r¿™Á»»9ž½C÷_Þá»ó»ï)`Gìžì í¨Ý²µ?âvÖcÔí°}¿!s0mçA*nwÇé¥‚ìë°=gÛSJ)¥¸OÃ]í~©ÌØÁ»Ã{ë}Ý˜áÁêè½ªØÝì½‹Ý[ï„ß×éûÁÞÞKþ|8Ýh]¹Þÿ£~ÊŽÙ©ÅN½íkÛ­ö·¿yˆú^32£vó•™
µÃåöÀ=¥”RJûîª»¬º[¸Û3éGUýäýÕÞ9ðÞ½Ë©™êf?¯Z¡÷5ôNBxüá™ÃËx¡ü³R¦ëOÙ‰‘»=ÎN"ö³ßÖ8ûX™ï¢ÚÝ¨ýU'ít±7d0ûp»½Ì®jÜSJ)¥ôáŽÞgáÞ_dÚˆ\Bî[¼w–f»™»+ÝïrjæÓŒèÙ»úýPËwïgðÃW ÆCùQëÜ3ªƒõ¥?é`¾î^ vc±»SíË= Ú…ínÖîß£÷B;µÖ—Øéï-ÍÂ³î)¥”RúOãÝÝÇ·Ýy§Zùµ÷TuÅ{å/DÎ¯¼wE÷ÏÐûhöNîf$Awø®€ÇïÆð0þDP­kìc²cvBìbv¿ÑÎ[Ô5s@Æ.µûÛ—JÌ¾eûp¯½íöfûxØ¶§”RJ)pwpgìÝ[ïÈýr.¼#÷š¼ËÖŒÒ½3t÷“wäNÐ»ûù»ç;=lu2b‡ì¨]ÙN““vFí¨¶ë–µ—Û+» Óní¸}5;lo·î)¥”R
ÞçýÞèQ½WrR_ª~öÕî£ªÊØ}w¡»»³5s]bî~Û4¡wøîwß1¼g<9ÉŸO™î©îµNÝ›½k±ÓÞì•A»ßk¯¾¼F•½vsûQÔ®Ç_øÔR÷»¿þxÿbÙSJ)¥ôà>wØ½Ú}QÕŒÝÉmÌtþ“ªã#‘Þõ¹*§f*{æ¾ßIüîï)oL?•ýW=ÓÑº&XŸ²ëá˜
±·Ù·ë12Ví°]Ý~Q·›2~ØÛ‡‹íˆ=pO)¥”Rà>÷r˜ž˜ñgfôHä"w«÷¿:³6Ãì]ÆïÞïà]ùîàçã½èÇ@çWV÷kìJv:;Sv*²£öÍ ½3fgE²WîˆÓöÀ=¥”RJéß;•ÃÆp÷÷Ý™»è^÷KÄîM÷ÅïÐýFÈ}ðh•¼Ü½ß!ü3ƒë^ìtHvØŽÛ×c–Ÿj%j¯†£vóqÔÀ=¥”RJi®ÇõNãûGOUå>¤àýbe¦óGfhÝšîØÁ{å¶Þ½Þá»ž& OÏ:y­vGvoöÛíºSdGí°]Èt¨]ÙŽÙ	´ë“TöÚõ9*	Ù{¤¦”RJ)pÿ
÷Ý•™ÅVmwðîîCú}wÂîÞ;]yÿ¡£wñ{ÓV½Óá¼W¼rþ|žèjuïuv´Nx}d×õ˜6».µó»Ù+ÈnöÚÇ×í´þ©zÙ]‘	ÜSJ)¥¾éÐ»¬Íàîïd?ªªxGîz'²»3¿.õ¹åNÖïðñ8þ‰y©?>_ÇëôVjïÎõª¯P÷j¯Ÿ´ÎÚq» Ý³ý'ávÔîá¾d¯?›=dO)¥”Rà~î£‘l»Û}w¿6ó£ƒîtï¥wvgñ>Ï÷áÅŸŒÿ”ÓúÌ„ín›o+µÛIn>ºõ˜
µwÂvÜŽÙ÷”RJ)¥§Àô¥*xGîlºw*wèÎÊÌe•ûÑä]èŽÝ[ïzn†Ü±÷ºãw<ùÎOÖ	­±“¢,Û¯Çc>Þ1;jW¶›I;do¶_>ÑnØ®GÛ›ì½ÝN<FívlÜSJ)¥¸?wâÌŒ¼ƒ4ð®·fÊy“K3õ—Ðµ*½³8ÓswÂOÅ{ÌŸ¤[«ÏhDëòY%7fg=FÙ^?÷u=Æ²}{?f1»½³û3Qý¦½¼´Ú÷”RJ)EïS~Ÿ¿	Þ—;ƒw»ï~üVUí^µÞ_×É;-t—Ù»>Z­ïðÍ`1<’7ž?Ÿ
Ý;]²çë ÝÞák¨ë1½í•‹Ê~Lw´×Î°¯w ýøöc®?¦”RJ)|Gï3|Çï¬¼O,¼ëÒsw¿òîÍ w¾±Ú¿_ÉÎß1¼á‘ü|ó6÷Z—p:ÝÈŒ¡±ó³ûó1þX;û1‚ö‰µöòz‡Ø7dÏ™”RJ)îO‡»ÎÝGrïÈÝÒÝ_›qkïôAûO­Ò¼ÜUðO	¯?ìö7·cß ú…v=Æ³·ƒöÑíGµ+Ü›í{J)¥”Òy¸x7vßÃ½¿«Jã±;v‡îè†çf¨ù.gß½à=áaüL'|®}:\{}Ov>ªDfÒ~ðm%ÌNFí?×@»ý6êîFí =pOÿ°wÿª$QÅ3=‚S§'³ 8˜õ‹ãld^{·¤+uë«Ë
­°ÌžLƒ“ù#;8s¹U-I’ážõáŽ¼íÎIÕñ(wT¹ï‘îyßý¸ó¾Î÷m˜½“îÈ7F.4ñÞG<!=B=£Ö›h_ÈÅŽ|sL9Kö×ªõ¸×>ô{ít;†ªöpÕp—$Iæ;f6I3w<ÁÖÌ©pZuøW§UKLwÂ½_zWÉx–h
š¿­ÌJ…Rl³íyÐŽI¶—Üìo«õ°“®k/Í¬}c²K’$ÃýëÂr/´{è÷|UäÐ-½ÿƒtŸ¶ûûìè*>æn_ë9Ù9~ŠPí¨hQ)öavå#Å’}ïÉp—$I2ÜãÂûö¨›¼cÙïC(xVàƒÛêS%vPëÔ:Òå1T{©l7Ü%I’¾S½ç€o×Ý1Ò}X¶û÷eÖ§U1[›¡Þ·gÁÓï àixPñ­+ò¼GªO¦ë³µìÔ:Èõƒ~=f$;ÞJí?Â%2-¶Ç`÷ÚvI’d¸_î”{>ªJ¹ŸZNÞA»÷ƒwÚMº¿¬0'ßA¼‡„§â‡¿nƒP'Õñ{^'ÙA´‡n'Úóœ=ÚóYT¤£¨è^´4ºÝp—$Iº»p'ÝA¹§÷3a•îyéÕ«ŒÝ¾Wê’ð5¼NõžûýöÅž£ýðW=ªÁÎ°ýð) ìÆ€foX?’í†»$IÒ×õ{÷Ó‚ß×÷ÊwÒ}x˜¬Ì4ížâ|ÏõÚ=ïÍ€íwÊ}ºw„–¿Ü;ÚTg+&Ù/ÚŽé›=${ˆö¦ÚÓŠÌ°Ük¯dÏú1¢×C¸[ì’$ÉpG´ÉÂà=œV%Þ×§Uûtïe]î9Þ©÷ðD|BÇO½ã¿;„zŽuëý]íË•úµö7´;2çgQ‡pu2jßî’$I×Ö{¿:3Â}1zO³÷%¾Y!à™¼·ïX%à)øvý‚Ÿ'ò×Ëõ6ÖÁ|}>dG³Ð¾û(óF;µŽÉVûN˜³/íã—c66»$IÒ½‡{^›wâ­™Üïèê€Ÿ3¾EsSö¡Ëùê‚T§ÖC®wÍžöb*ÛW+íD;áž«Ýp—$IúžáÎ¾Ì0½!±ÞAº§±{ÞœIõ^¶h|hø[ù•ä\ïƒý³„fWÇ¤a;öY³‡™xuøÃp—$Iº‡pÏw»?“|oîš)ÇrON«îŸ¥V>÷§ï/YÅ{rÃbGÍØ“K¦ì8YŽÁáÓ<;ïW*O8ö”ìûçcºDÆp—$Iº§€gôÎÊÌaq&Ü_¯ZF¸§Ùû.3óâÌ.PS¼÷ùNÀç„/¿nˆ?å9Øûeöó`¯j§Ø‰öña†9ûøõ´ršìç×>—cöO‚W£ì’$I7Ïw\pÙKïÝâL¿7Ó_7Ú¯ä{x¼ Oùú’ú^ÉÍ~tµŽ-Â…14{¿ÒŽùi7¦_Ža¥='û¬Ö½­]’$é~ÂýgîýÚL®÷a™ïéÎH°øÞ7<ŽýrSüIhk¯/B}^û´ÙYÁŸ†»$IÒÿ1Ü¯÷þªw<cºü^¶ á[ÿq°÷¶çöà9ÙqÞì†»$IÒ·pE·#¯ºã´Ýçc÷á¤ÜÇãT¾æ=ïÎ |ýLŸñ··ò€}¯3eo.jBÜ‘ÉÍþsf/—-·î’$I_îUl„;v·¿€dß~Ë~¯ëf0­w,â=×ûx–×ìsiÛºi¤ãsá5;­õÜìá²Ç®ÙÅ^ßÔ·lÿ?°ú~îãÇÀp—$Iº·|§ÞsÂ‡ÞÎª®Ä£ª8O÷nòŽgðA(øÞ¥©~e®÷Sö~Òþ†Ôìt;á¾¶xÃf—µcc²K’ô7{wÛ6…Ax—#ÌàMv^^ø"¾ÿM>©ÆôßCPš8šú¤ -fQêt7¥'
÷~Ö;H÷8ð¾
åÞOžÁè÷ûØú—Éžž¨´Ú&;Úfg†Œá.I’ôÿ%ÛgÏjÕœï¹Þ·ñÞLzÇ;˜:“œƒWL|<È+&Î ØW "OéŠª}žì·µ¨³^¯—°×%I’Ž¸çŒ÷þÉL ÞÛgú~+±à~OÎ¯¿ÙybVë«ëè‹½ß:f Ù1YŠŠ0Ü%I’ž7Ü‡®Ü×]Ê|GŸï}Âã7×:¹ž‘ìM±¯ÇåûÔí†»$IÒÿ1ß	÷qÆÒtk»CžôÎ´™ýïïyéêŽ€Òê‚=NŒÁaó˜½{>Òëûz\ïñÿÜ´]’$é{†{¿Zµä-Þƒïm½÷ýžãäûÜ;–:ú+ëŠM±w£ì Ù‡TíC7ÒîÓ–$I’¾ý^3´[høÑ|ññª$ülì½|Ž÷ð¬Õ˜ð!ßwüaÇ{½¼#ïÏŽ~j	É>ëé¡¨ëvíØÞq÷‘$I2ÜóØ;˜ü^šÉï â÷9Væ=R}ë Öó"TÃ]’$Ép'Üƒî/«QÃ×tÙ¸$äžp¯á^‡Šwú=&|7ÿxý˜:Þ·Œ!Ü)öá¾~àë§‘íàV½¬¦áîŽí’$IÏî/e²ÓÌ¯´VµŸòŽ¨ØÒ‡{®wT[ß9Õë„÷^“í„;(öÙ¤ö¸µÌv)†»$IÒ“†;^nH÷5¯“6b½¯ú|GHø%]ŽÞmƒŸûšýº,˜Ï~À­ÚÉvÃ]’$é›÷ûñ‚G5 YØŽ¾î÷Ë—„ïKþ=¤|Fˆw¿Ý«7Œ¸ÜÂ´‘{½ìeç«ÕõV%]¯»‹Œ$IÒ7÷:Çp_ÏXk°ßÇñ¶
Ô{ÙÓï§ìÚ½óþ@oˆ.[§lZì9×KHöúOqCj˜ýz§À­ÌÁn¸K’$=q¸áx¯pýÎ¤ðrmä>ßïQòá¯‹¸¦×‹ýÞá>ºÝp—$Izê~ßîõjîøµ¨Ì¿º%«•«±ßg#ïõ‚†'æÿc¼ñ\gdO{´Ç)í¨rX?Ýí„vÂ½îÏ¾p·Ø%I’þÜp'à³Zô˜ö›ÁÚ›ËaÕÏ{ßôû©Ns×JÆ¦¨ï*¾E©k™áÂøqdoç³C^„ÚïzÝp—$Iúƒû?:MÃ§€ÏWK¿vÙ	ËÐøÙ£Öç±ž ‚\¿ÚëÔºÅ.I’d¸ï÷üØ¦ÞÞrç÷;³?¨ØqÛ3Æp—$IÒpï¬õŽK¹ð)áÉwêý`Âã”íïzOub`Ÿ ÙK71f9ñµés­ó2»á.I’ôOÁïßçTf;þŽ/á^/˜	¾¾èË}à×Èvv{z£¬.”ëþÇ×‘ëyŒ=7;f£ìŽ´K’$î÷~ì}9Ìmsútgñ²ºÜ4Ên¸ÿÍÎ«¸
Eaí¦´ÌSLcsû¼ÿK]&?G¶›‘ƒ a­&Ffðxª° €
>	®áS™¯ƒ·*à›ñ™¾ãñçMŒ¿LÌÃDb=š\ÏF®G/YúZ×ë  Â}©¤7›Wcð/‡ážã±˜ÿ}¬µ;Ù{_p¸â°ÆÚã­ÉõT{µ‡‹p îµ´_îµt¼+tèÒ!Ü·|bŒ¦·Õò0«2šø}œÔÉÿ`œ†‰Üwµ')õlä±£\î  ÂýãM¸o?¹o‰Ô˜÷ôû±!ÉJ}÷µösáÙ“ñÍ1M¸ÿw  á~ËpŸÏ÷¨Ã=Údî  Ü'àçß4ë`÷¸j­jødü¼&Ëg=]«'ÚcœœÃ]° ÷ÂÒ«Ã½±÷÷ñ.oîãB²Ö—:ÛûpO´w  Rj—F|_ñIùÄ|ç¹÷(ý^äQ{F½‰ôXGË|¬ëu  áéÄºáw±yîŸ¯‰ØÏ üöyìYyD«ÏòÞ³Ò§zî(·ù:¬ö£Ù¼ã^î  Âý‹Â½'Ü î7÷gA¸ ðŸpï-qòÝ3‘ŽŸõŒ2ÀçÕk¯ÇÙ{?„»` Ðð“_;™ñ1Qó×¨½ôçNWë  Ü>ÜãÛÂ}î  Ü+Üs"Úp?,ù5–œØçqñuçÇù?/}\T±øR±Qwºp @¸w  „»pî  \Tðwzµ~¾ÞÚXâ¢‘vÁ ÀlÂÏg|,1õMsÇ©Yâ’LOª«u  ¾(Ü{ë¤eÂ€ÿìÖ! !EA‡ÜûweÝ	!@3#kÚºPú†{’¿w†{¾n®Ó…;  mÃ}Þt«á @ó„ÏÆŠïJ#šw¹ €pî  ˆøUc}5¾Þéb €ÇÃ½†¯‡{ý"Ü îÂ]¸  Ü…;  *>èîZ €Æážxœ‘¯î  ´øìòp/b  á.Ü àýpß¹O¸  Ü…»p à@Å£Õ òR  „»p @¸#Ü îÂ  t¼N @¸ÿìÖ     ÿk#T÷ªªšùI¯ªªq÷ªªÆ}Ü«ªjÜÇ½ªªÆ}Ü«ªZú=¯ªª¿?òªª÷ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*ìÁ     ÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*ìÁ     ÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*ìÁ     ÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*ìÁ     ÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*ìÁ     ÿk#¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª*íÁ!   € ÿ¯a                                                      à@÷2ìÀõ!    IEND®B`‚‰PNG

   IHDR   2   0   d)Ùˆ   gAMA  ±üa   sRGB ®Îé   PLTELiq=rjwŒ}†™ %%o•™¦©""(0B\j‚SSSF{8=F>DQ!(1?nDN\IWj††ŽH[iŒ•š—›¦]k€As=nDu:b7W€ Bo'O‚%Ck#FsDUn'SŒ1<J,7>@Ur2D[1O9OnEWr.Q-T˜¥{ƒ`mƒr}iu‰8j'L|'M6V"H{6_>[‚?m:j?l@q.Lu-Sƒ<[‡ ?i1Qy#Dr3R|)S‰0Vˆ,Fl%P‡(R‡>Nf-XKˆLVi)QJ`|Qd_r‹,FWaq.U"7W!Eˆ‘ q{‹,R 6Yfr†ÕÙÞ=m:l@sDu8Z‡FxA]„ An?o'L}"Do0OyEv EvFdŒ*R†7c1Q{&?d/Z%Ft%Fr!<aIc†<RqJXkL…6Y:GY5\‘<gCVy)<+Aeo~‘y‡ž<Ok2UN_v$=chq5WK\yozŠSd~crŠ2U7^r}|†—<p9j!Cs=m)Ho>j)Iv3Y‰G^|>^…#Iy9j6Y†;n+O{Cb‰G\v)Hp)>[$=b"=cM]sFi™LbƒH{9`’Cg—A^„9[‰ 9'E#B'@sƒ›œ¥³”š«%?gœ¤¬7Nr0Fd3FfUe|HZwjtƒlw†nwˆjt‡€‹ht‡S^q#;]$Jz2T9W6aDx)M.U:f,Q4]=k+O-S5_3\/VH}2Z0W8cEzG|)L<iH~1X;h9e I€>nCuBs@pDv9d=m? K‚AJAq L„0Y<l@p'K7c0X;j=p6a8e$HCv?s!N‡	 DG~J„%JB9h+M{"7WÔYF   ÃtRNS ð$	)
Õñ&±2D
ÉÞñxþå¢þVù‰:W`wþêÑ'¹¯Þò²úø‰}þ/š´]Úˆ±ðºÜüÕjìÿ'û=N5j%-û¯þ|qõçÅù¼ú¾¡çhõíÎèÆÓÈxÅo”²öo~¾gÈN÷ÇE¡äAíLe²Öhîò¶VèýÛ©’;ÇëÍ×áoŠéßËãÕ„¿VÌã”‚]±Ù@§ºŸÉ2†¯o+üì²ø‚†–¢­Ÿ¯Zµáƒ©|;  #IDATxÚ…”wXIÀWÎ°„DØbï½ÇÞ{‰^ŒÆ/¹$—ž˜\zï½ß%×{ï½÷ûë Dã©
ƒHXb!¶`înf…h`YÌ¼yðûvæ½ù1‡íÄDÈ`ÓÙ9Œ9ÇsQ²|ù±3Vÿì}9þ–ifÐ‡EXQÊ?]ì÷‰åÖìú•¼oEùø£ûcyÅæéÝE‹ýÚ“™%÷5š’ Æ£i»üBMa†©2ßÃO£ÑŒ%å>šÞâ’[Y¤Jå¶1F¥Îó…[C¶¢z¥ùûTMÑnRåñxµ
ÿvpCJ²««kòsÁG½@Víõ©²äÕ	™J-“,Ú¼ÙmÍ<È·M«âd2[mKb ™/LÈ µZ-›<@"‘€”*ÃŸ¬`yÈM œM8ª¶. +XvaçM+tJÖï%QJÓÕVèèˆ{‘¬`Öá¼üYÁ6ŽpLÌü3ÁÈ¼Õ¨¥’ùú¨¼‡3bccó$gp=ÂQ$ä“Ü²§¼€"·Ñ*¹¼ÇÄP‚$ý;ªðYoyËl=)Š×‚0wå¨Üˆâ¸¤‡]‡òM,ËoKPöã¯qìÂˆr!\§õ÷»…X(vÞ=J_á Âg×áýFðg€³%nH‰mxÓBYÓáJlElNìuW*1S°•n
%Ö».ÉBa½…	0€×öÂ©×Çó˜q-†ëµñsÅ÷Æ €@«_O‡†;’}‰u/Å©ç[Ô¸àX`bÐsgÚÎ4 ˜ž7¿˜¨Ç}·ø!ïÔ¬”ÔéD·8ë€y[²×ê»§Ñë»õ3Ö‡ŠÍÛ’îÙ.m´ŽTêhÑñÝö[R)üƒ10Æ·ÚÛÝO˜·e»tøn»u†‡÷ Ó'‡!k×ðð_TˆÐ–wø"jEtÔªÔ‘ªðC‘SYwø"
ø|‘{¡Ø/½\÷íW¥(úî>--‰¾h_îúþâ7l<=ÐB ~#§íéP¨Uµ¾è÷—îÞÚÕFÉÀ²÷„²¼îœ3ÑIïDÞ@%¼²s@y"tYøOSÜÎçµþM	¯lT~n
œêä®6¯•’æ²‚ÃÄSê~ ÄÚÏkæQÓ$<KcÂ³è–Û3dïþ¦æYh^*gƒ—ê	÷äÒ/*ü‹O
›fAÈåJä©£÷taŸöeU¸pV¸†ótp†ï®ž­Öq…BŽ;;ãÇ¡‚DÔ\«îë›¼gÐýCÁp»Æ	*Lzeí•ú¹~¼$4Œ÷AnÏ¤`r|²Zöß×tãåwŠˆ<S¹¤ö—_û=&¦ÞÅ%*j®‰¨(—ú˜˜?¯üqµ¦ö¼3ŠLƒ:1ò1 F‹Žžc$:š€igçˆ:ù5g³Æ'    IEND®B`‚‰PNG

   IHDR   @   @   ªiqÞ  °iTXtXML:com.adobe.xmp     <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about=""
    xmlns:exif="http://ns.adobe.com/exif/1.0/"
    xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
    xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"
    xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
    xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
   exif:PixelXDimension="64"
   exif:PixelYDimension="64"
   exif:ColorSpace="1"
   tiff:ImageWidth="64"
   tiff:ImageLength="64"
   tiff:ResolutionUnit="2"
   tiff:XResolution="72/1"
   tiff:YResolution="72/1"
   photoshop:ColorMode="3"
   photoshop:ICCProfile="sRGB IEC61966-2.1"
   xmp:ModifyDate="2022-08-03T20:50:19+08:00"
   xmp:MetadataDate="2022-08-03T20:50:19+08:00">
   <xmpMM:History>
    <rdf:Seq>
     <rdf:li
      stEvt:action="produced"
      stEvt:softwareAgent="Affinity Photo 1.10.5"
      stEvt:when="2022-08-03T20:50:19+08:00"/>
    </rdf:Seq>
   </xmpMM:History>
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>
<?xpacket end="r"?>1“@G  €iCCPsRGB IEC61966-2.1  (‘u‘Ï+DQÇ?fˆbaañÒ°2b”Ø(#¡¤iŒòk3sÍ›QóãõÞL’­²U”Øøµà/`«¬•"R²”5±azÎ3j&™s;÷|î÷Þsº÷\pER*mU÷@:“3ÃcAmvn^«}¦7:ñG•e‡B“T´;ªœxãwjU>÷¯5,Å-UuÂCÊ0sÂãÂ“+9Ãámá•Œ.	Ÿ
w™rAá[GùÅáD‘¿6#áp5	k‰2Ž•±Jšiay9¾t*¯~ïã¼ÄÏÌLKloÃ"ÌA4&e„~z”¹?ºeE…üžŸü)²’«d6XÅd™Irt‰š—êq‰ºèq)Vþÿí«¥÷ŠÕ=A¨y²í·¨Ý‚Â¦mÚváÜp‘)åg`à]ôÍ’æÛï:œ]–´Øœo@ëƒ5£?’[Ü¥ëðzsÐ|õÅžýîs|‘5ùª+ØÝƒN9ï]ü`¾gã±WÉ   	pHYs     šœ  @IDATxœí›[ƒ Em7çš]]û‡É¨€<nBîùÓMñGÃ¶‘Ø|FÿÁq¿–ùû¾qÈâ­Iß1BF×G%®é)¢ËB³×ôÑ´ *qM‹ˆ×­$/¼•P=ÉZâšZUƒ­'/ÔH(è%y¡TBÑ oÉ%²¼&/ä$|gb•G;Þw_xª‚ÛVI^¸“ÀGàêæj»/\U+@ßXu÷]¬€ôbõÝÒ*_áœ¥¥üyÂW  @Cè ÐP : 4€  @Cè ÐP : 4|%†Äáð» *+ðÛ "K°?`v Ö`‹Ln²w	ìËÀFÉÒÅ¼IèÚ*+x‘0¤YZ°.ah»|Š5ÓL¤X‘ 92“öÐ”&ì±9MØƒ“WX?:K¢óÖ´„XüV¸q    IEND®B`‚‰PNG

   IHDR   @   @   ªiqÞ  °iTXtXML:com.adobe.xmp     <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about=""
    xmlns:exif="http://ns.adobe.com/exif/1.0/"
    xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
    xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"
    xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
    xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
   exif:PixelXDimension="64"
   exif:PixelYDimension="64"
   exif:ColorSpace="1"
   tiff:ImageWidth="64"
   tiff:ImageLength="64"
   tiff:ResolutionUnit="2"
   tiff:XResolution="72/1"
   tiff:YResolution="72/1"
   photoshop:ColorMode="3"
   photoshop:ICCProfile="sRGB IEC61966-2.1"
   xmp:ModifyDate="2022-08-03T20:49:57+08:00"
   xmp:MetadataDate="2022-08-03T20:49:57+08:00">
   <xmpMM:History>
    <rdf:Seq>
     <rdf:li
      stEvt:action="produced"
      stEvt:softwareAgent="Affinity Photo 1.10.5"
      stEvt:when="2022-08-03T20:49:57+08:00"/>
    </rdf:Seq>
   </xmpMM:History>
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>
<?xpacket end="r"?>Ý{AÚ  €iCCPsRGB IEC61966-2.1  (‘u‘Ï+DQÇ?fˆbaañÒ°2b”Ø(#¡¤iŒòk3sÍ›QóãõÞL’­²U”Øøµà/`«¬•"R²”5±azÎ3j&™s;÷|î÷Þsº÷\pER*mU÷@:“3ÃcAmvn^«}¦7:ñG•e‡B“T´;ªœxãwjU>÷¯5,Å-UuÂCÊ0sÂãÂ“+9Ãámá•Œ.	Ÿ
w™rAá[GùÅáD‘¿6#áp5	k‰2Ž•±Jšiay9¾t*¯~ïã¼ÄÏÌLKloÃ"ÌA4&e„~z”¹?ºeE…üžŸü)²’«d6XÅd™Irt‰š—êq‰ºèq)Vþÿí«¥÷ŠÕ=A¨y²í·¨Ý‚Â¦mÚváÜp‘)åg`à]ôÍ’æÛï:œ]–´Øœo@ëƒ5£?’[Ü¥ëðzsÐ|õÅžýîs|‘5ùª+ØÝƒN9ï]ü`¾gã±WÉ   	pHYs     šœ  DIDATxœí›Kƒ EÛ®§ÛpÕn£ûiGéáä¨€|^BÞi&—8ÑðxØ<GÿÁgÛ¾-óßû>4Æ!‹·&}Æ]•¸¦§ˆ.ÍJ\ÓCDÓ¨Ä5-"nO´’¼pWBõ$k‰kjET¶ž¼P#¡x —ä…R	Eƒ¼%/”HÈðš¼“ðšˆU.íxß}áª
NX%yáL£›«í¾pT¬ }cÕÝt°Ò‹Õw_H« |„ð/…(å/Èc¾(  
@€†Ð ¡ t h(  
@€†Ð á+1d /€ßPXßX‚ý³±[dr“½K`—X6J–.æMB×VYÁ‹„!ÍÒ‚u	CÛåS¬‰˜v`"ÅŠÈ‘™”°‡¦4aÍiÂœ<ÂúÑY·Õ„Xg+¦Ý    IEND®B`‚‰PNG

   IHDR   @   @   ªiqÞ  °iTXtXML:com.adobe.xmp     <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about=""
    xmlns:exif="http://ns.adobe.com/exif/1.0/"
    xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
    xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"
    xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
    xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
   exif:PixelXDimension="64"
   exif:PixelYDimension="64"
   exif:ColorSpace="1"
   tiff:ImageWidth="64"
   tiff:ImageLength="64"
   tiff:ResolutionUnit="2"
   tiff:XResolution="72/1"
   tiff:YResolution="72/1"
   photoshop:ColorMode="3"
   photoshop:ICCProfile="sRGB IEC61966-2.1"
   xmp:ModifyDate="2022-08-03T20:47:09+08:00"
   xmp:MetadataDate="2022-08-03T20:47:09+08:00">
   <xmpMM:History>
    <rdf:Seq>
     <rdf:li
      stEvt:action="produced"
      stEvt:softwareAgent="Affinity Photo 1.10.5"
      stEvt:when="2022-08-03T20:47:09+08:00"/>
    </rdf:Seq>
   </xmpMM:History>
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>
<?xpacket end="r"?>‹Í~)  €iCCPsRGB IEC61966-2.1  (‘u‘Ï+DQÇ?fˆbaañÒ°2b”Ø(#¡¤iŒòk3sÍ›QóãõÞL’­²U”Øøµà/`«¬•"R²”5±azÎ3j&™s;÷|î÷Þsº÷\pER*mU÷@:“3ÃcAmvn^«}¦7:ñG•e‡B“T´;ªœxãwjU>÷¯5,Å-UuÂCÊ0sÂãÂ“+9Ãámá•Œ.	Ÿ
w™rAá[GùÅáD‘¿6#áp5	k‰2Ž•±Jšiay9¾t*¯~ïã¼ÄÏÌLKloÃ"ÌA4&e„~z”¹?ºeE…üžŸü)²’«d6XÅd™Irt‰š—êq‰ºèq)Vþÿí«¥÷ŠÕ=A¨y²í·¨Ý‚Â¦mÚváÜp‘)åg`à]ôÍ’æÛï:œ]–´Øœo@ëƒ5£?’[Ü¥ëðzsÐ|õÅžýîs|‘5ùª+ØÝƒN9ï]ü`¾gã±WÉ   	pHYs     šœ  GIDATxœí›ÑÂ EÕÜÈœÔÜÈô+NN[ ^ ïþµ&—ô§—‰ÍÕúî¯Ç·eþçù6ÑdñÖ¤÷°ÑuA«Ä5=EtYhTâš"š@%®iqz¢—ä…³ª'yK\S+¢j°÷ä…	ÅgI^(•P4h¶ä…	Ù³&/ä$ÜFâ•C;³ï¾pT»?¬’¼°'ÀÖÍÕv_ØªV€¾±êîº
XéÅê»/¤U¾Âø—B”òä1_€  @Cè ÐP : 4€  @Cè Ðð•2„Àï¨@¼Àoƒˆ@<Áþ€Ñxƒ-2¹É³K`—X6J–.6›„®­²Â,Lš¥ïLÛåS¼‰v`"Å‹È‘™”°‡¦4aÍiÂœÜÂûÑY3¬„X¯{A    IEND®B`‚‰PNG

   IHDR      0   ÀCa[   gAMA  ±üa   sRGB ®Îé   uPLTELiq                                                                                                                  8"þ   &tRNS òéÙ@#<`˜Âã.Ê¥'ÓoF1Pxdg¶]7±ž¬¤  IDATxÚÍYŽƒ06ƒ	!ì„ì!ÉÔý8m±|‚©?«ôÔjµ©ºz§¾$‘AÐm7‰wåèÀì“ ¯^Îd`Çr…Ë‚§šˆ ’xó3›Zë³D‡@­ÙÁDçz‚È,^5m$=×\ïmû(­Zæ`v’G5»©Ãe©•|ä5Óð+o§I¤¹Z2qŸH”ã(¥mŒä¡š¹Ùø’†úŸÔ?M{¯³b?™{,œ†xÆÎç‡÷Ö¨ã™n[“£ý9F“†‚M¯zûä‰¿a“N¦„[2tµ|†ÁÛçHë™…g"JÏÜ!Ü½ç¿£›?öu"œ¤Ø3a    IEND®B`‚‰PNG

   IHDR   l   &   !¥~Ç   	pHYs     šœ  ¿iTXtXML:com.adobe.xmp     <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 6.0-c002 116.164655, 2021/01/26-15:41:20        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmp:CreatorTool="Adobe Photoshop 21.2 (Windows)" xmp:CreateDate="2021-11-12T08:54:19+08:00" xmp:ModifyDate="2021-11-12T12:02:08+08:00" xmp:MetadataDate="2021-11-12T12:02:08+08:00" dc:format="image/png" photoshop:ColorMode="3" photoshop:ICCProfile="sRGB IEC61966-2.1" xmpMM:InstanceID="xmp.iid:e29be79c-d9c7-c247-b8fd-ebbdf7589274" xmpMM:DocumentID="adobe:docid:photoshop:4e645348-a748-3547-a837-78951e9aef8c" xmpMM:OriginalDocumentID="xmp.did:06457400-9228-684b-9e69-d511f1e60125"> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="created" stEvt:instanceID="xmp.iid:06457400-9228-684b-9e69-d511f1e60125" stEvt:when="2021-11-12T08:54:19+08:00" stEvt:softwareAgent="Adobe Photoshop 21.2 (Windows)"/> <rdf:li stEvt:action="saved" stEvt:instanceID="xmp.iid:4b942734-3af9-ec4a-b480-a9e299865081" stEvt:when="2021-11-12T09:44:50+08:00" stEvt:softwareAgent="Adobe Photoshop 21.2 (Windows)" stEvt:changed="/"/> <rdf:li stEvt:action="saved" stEvt:instanceID="xmp.iid:e29be79c-d9c7-c247-b8fd-ebbdf7589274" stEvt:when="2021-11-12T12:02:08+08:00" stEvt:softwareAgent="Adobe Photoshop 21.2 (Windows)" stEvt:changed="/"/> </rdf:Seq> </xmpMM:History> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>ôqv   ÊIDATxœí›{Œ]SÆ·fh;35-ªŠA£âQo¦D=ŠÖ[I5Q¯(š A„Ä+ñ¦‚ ¨Ð” QmãU}ŠVÐzEêU¯–šÎñÇ·¶³ïžsÏ=çÞ¹#Ãý’“sÎ>{í½Ö^{¯½ÖÚ÷¢(¢Žžƒ^ÿ6uäC]a=u…õ0ÔVGUèo×ÿÉºNŽº;×-ÀràÏ¼eÀ`àq`°ðvúÈ‚f`;à »\ƒ>ª’u`dÂuPÐAÌ úTÏo"Z­8¸F}dÁ†À,¤¨ûjÔG+ÈÚ`÷aÀ¹@_»Ö ¿ ¯#Æ¾±ûVÀj¯	@“Ñ¬:€{òñÀJïù•
è“08ÉóhFšUÀ6F»¢‹ø±Ò{Î-ëñHÓßsOíý¦ ^|”}M<SÜõk^‚>º2š¿ÀÚ[dïhv·–¡›dtßM)di«rËÚ¼ß\ŒB¦¯ÃÊØóZc°7ð-ñ^v×FÒ¬\X×Ú©V!Î$gik?»ßm÷a@P ¦Y™k£àÑ9‹²pðnB½-áö|‹G[sYÝ
»¡Äûc(>³ç9öíSŠ™Š¬,Ä6ÀÉhoL¹Ü¬+õ} µs2Ì4éé@ƒ²¡E(uuØ•¥n·È®°R8Ð.Lð‹3Òù\„à¯„ï¡Ð_Ø½”÷"6Q€é)}ô– _ZYo»/x}4KM<~œ…é…¬É¶oý­N¿„~k&k¨0·÷ü”_Žö¶Wñ“€½IÃfÈ”®"(kq´“>©ÊÅ1‡£Ax™rux9!n0f …Mž-ÑÖ	Àeö|„GÛ@ç=®f²†Æ»Z‡>î~³çß×€…)'á^à´¿­|kæ#¬l°5p
ÃˆõíþjJà8{ö•°Ü.¯Ç_‹HÆH»¯>HéºAV·gý‰¼¢Ÿ(ÞÃ’ö§¬{Xv6º»‰íúmh†6ålËaw—¾eê^huÓ&á4«Sm0_•¬a.ñ%àtb
”Ùðáìú€úJq‘Ý_ðÊ£Ùvn…mŽ¶ûsh0Òð&¸aÀÆ%ê¸$Â;òãP•¬á€¿‡ôgÑ)ÈánïM(3r>°y^n0 ¶ŸQ,ÄB´âGSlï³ €ÒJ ó]óÑÆß€LcˆV4q#`vN^|t™¬iný2â¥»m˜îýDª7‰×Í•½kÏÍü}s´r‡#ãµ9#ÍmFó<'ò$û¶"G{I¨ZÖ1çIµ{eÏ£4Ó£Hy·#“9ø¹2¾ÿAàLäÈ<ðÝ¥lÎÌÙî(»Ï°¶³ài»Šâ'Îy™—£½]*«[Q3àâ6e“'¢h{10y’ÍT·Â®·úOô®½€P¸qBÆ6±ö"b7<Ö¾2ºg¼ò½‰³£è²¢Keu
‹Ðêú‹Î^âUV65 ­TamÈ#ýƒ8 … xÌÞç“¤†hAqäZt$”­¯ÕÆŸßÿG”÷6K¡Ëe=Æ*¾…ìì3tVØl$ÈvÀ¦ÄƒJ6™—ˆÎæ!bgäåE(¾	cÄ‡YÝ¹eê%¡	9 ‘ñ7	™ývb³˜5‘u‚UºÔÞGR¬°”˜‰¢ò‡ˆÏpò*¬‘8YBñŒKàj¯üA`‡”ö§X½+Rê¤¡92Onð*AÍd½Ò*\hï¡×x¨½‹6ôxÊ¾åQØ@àlbî¬„:IB€Ì„û6…ƒ(>5oDYŒ`Ÿ<”CoâUæ®±äàk*ë­öqŒ½‡
»{µ AY‚Ìc±Â‘'”¤°²É7‡/¢lÄ(áê.Ç¨_¶²ŸxßW7¢Óa‡ìÛ×	ƒP}ÑÆZYíÄÎÆ'Ày(Ž
SM!ºEÖ—íÃnöî+¬Ú0§¢ ú`}ŸL¬°]P–$B¡õ»Œù-m\‡ÿrLúeíÈËL³«³€;L¶ò))Z
— =ÜçñY¯¯v4ðcË´Ó-²~ˆâeG¬°û‰YƒÀ¿¡˜!B©,§°‰Ä6~ ÄhEF(£à¼·»Ð,ö/Ç _¶% PÆå+”ïFq¦|¶ÑfÛF£•°€8¡˜s0èk=¹Ö ým–ÑŠLo“7v5—u{«ô®'Èb…9Wóc{eÄšqNaCÐ2ž‹Nh}l‰&Áÿàd¨	ì_Nˆ°|¨G·ZM>ZÐ¤ë ØL†Øx)w)ò]ŸGv‚”v8
Âý}í'ôs‰€÷sºKÖkŒè~ßŽŽ"@…fY°…G7ØŸb§£Ø“ÒIáÃJ”û(µ‡ÏÂN4º™eèS<ø‹‰e,…áhõÌ¢8=çÌUx>X3YÝæxR˜[ª?£Í¯ÜOÚ–fì4+œyƒÔ9F7>CÝ¡Èb¼…¬HhÒ0eÜ§ ³³eÄçZyQ‘¬{ #w<=Ù˜¹šÎG+IpcW •Xˆ<ƒÐˆLúç”¬ŽGY5Eþ<§C+•É
(å_)–‘ÿÀ²vE›ú
â#ZÓÐSP‘¬á>þmô'Þ¨_AûÉZ¨ÿ³g¡þw£†ºÂzê
ëaøþé¶§7£Î    IEND®B`‚‰PNG

   IHDR   µ   5   0=ZC   gAMA  ±üa   sRGB ®Îé   ~PLTELiq                                                                                                                           ñgL   )tRNS OÓ.ò^GVÙ?éªŽ¸kÆ&¡x4€²ÌÀqˆ9e•ðœãÝ»§Ž‚  ­IDATxÚí˜ÛŽªJE‹[•ÊEñ†@«ÝmÿÿÁ«`ãÓ¦LN'{¼hf.—³ÖÂ)~ÅçEü>¾ùo%ð1å\¡øk¸Š÷ádà{?–£
`/‡¢òV®¾À[ÕN«ôäÙQXà½Ó~’Žqk2zÊaÙ
¢Ã…{ñP»Áµ[>ÄÛ8{°	„s“$Ž‘cÈ}¥ü6/«ŽaÕtJvl‰6+8ˆ'>âmÜÀ}ö.2rB¥eVT¯ª^€h¥ã\‘ˆ'Rñ>vlÅƒå°S…þ
 ¦Uß`ë¥gaú«¤éAh¿ééöé 90b´Ýöãc3©ºëp «úm¢:§ì$°Õ‡Ú2WˆÄ”ü…CPž‡JÏ'Rô”œDË‘Ž7ÍîèN¥^LEpÿ¬ú©šžÏð€þµ(ZÂÛ8n‘õ‰]y@¾c>ª;È›ø£êà•UÞâµ×>}p îüÑé@šíûvV#Ð·l2²·Í¸j€doƒ<¨þdÿ°xÞ9=?üG¦G•#, Š"º@Žå 8.<ˆÇUÃ!†U`”ï¨%þ¨¡îÊ^C¯’Ëú<žZì„-ÖpšªËŒ«Þ<ÆáöÅ¹Á¦+LûáüIKê*í;¾¾f¯ÍP78¥2Õ…Êì¸hTõ©7O©&U‹º³³G­‹TòØIÚé.Ì³ö®z›I-—ä¢#„ÛtË,SøžV‘t=÷Æ¼~Ó/3ç‹¬½îË™ÕjØ¼èõ¹œôzXã¹†Ó¤ê’UûRé{®³Ã³%ú×è^æP“Ïò.m9QÓ™ü “ó¢jáx°ÑŠ>»ñƒSÁóÍ^˜&·-Ÿy«Ö„n‚,Ú]ø¸½Êá
Ñì {ý¤ºO ~(› e½Ðù9#fÛ”N{±÷°_gh=Ègp ºÛ(ºQ$€wêóëª…/amæµžùg9ðÔ¨Ëª=~;<Ì(™u"]–²-'ªðÑ¥0ëÎT&ö¦ê{}j:3$Jhâ;-?·Ç½wÃ±}³h®®¯ yã»ëý_<ªåãr–ûÈ½Ý}\ÇèŽ+þGì¡¿ŽkvÿøÇ~UÎ7!¿$ç;1â$æ¡üf9U—E ¬æ|þ†™»QÄ9À®«ëT‚—…ÂbÎç2`žCôøã ¡£…Åœ/C“Íë4ìü¥€•2ª/ñÜ°ø€ri3ç«é©çY:éÃÅÈ‡;(ú´¶™ó9µgþ—1)—’\†GiÓ™oa3çóµçPê§GuVC¯7úñ;´šó} ³ÿ£ƒ+Ôzj¨^X™SYXÉùlæ!øë.NŠFIKiþC]íæ|Žç9s×.D/õ€‘sÝŽâÿ]Î·y¿¶Nø½–=ó!p³”óÙ#|“,<©u¯Ï[Èùìâ£ëKÉ_ûzm'ç³ˆcNÐi´#<©–r>‹˜-œ±Æ¯¡¥œÏ"©öÂ–T«®¥ÖêüœÏë§o]ØèœO”È¦·j$lå|ñn»Ã%žÒ9Ÿ¸Bí‹0†JÙÊùlÒx +	‰¯s¾®9$úYÉù¬â¤`Œr>W€La+ç³Í²pýó$çNtTÂZÎ7å_Î÷¾œï?1-×Àý¹m    IEND®B`‚‰PNG

   IHDR         k¬XT   gAMA  ±üa   sRGB ®Îé   9PLTELiq8c9c8c9d8d7f9c8c7c8d8c8c8c8c8d8d8c9d#8]2   tRNS öN•_©É*=éÚ¸ˆn{xÿV	  IDATxÚìÜ[’ë(DÑˆ7zåüÛýã¯Ž›®¾åÖØ6ÂBÈ¶,Ë²,Ë²,Ë²,Ë²,Ë²,Ë²,!ù«þÌå“}µŽ<þ—ÞG)ûv‡êíËÔ­ã¯ê%ß±Ú·¿¢çxÙhøEc{~„¿¬œÞ¬â÷¹Üì±2>bÜ—=’ÇÇä&:x¹Úã|ÔvÙÃD|–;¼=ÊOëgÒ\x¥N .Šàí×äÐƒh Þ–&€â'€qM ½N ®M .ŠàÅÙ ÌÀÕÉ _“Àð“@I“@~x WþÓÝ}ëbÈ(|®^[<réß¶ðHW8ÊW]ø ¼ÔŽŽ÷Ý^ZvxWSðâãÀ{†—ð’ÞM°‰xIgÇ;ªJ€ŸÞ®à%tð‚` »vÐ†R€—´(ÀN°º—`¬[3€œ×ÀÏ‚S4€màÕ i'ˆ0?@ÙUX§ª°”M6€ïäJ¨À"(§l ÛÁ(º(—l +`œº»n +`xÝ Œ¨ 9vÝ ¶à¼n€FÐ:‡f ~á ¯€_šn ÛA¸…Ü ìÂ.‰à/º¬€p
Ø@Ø„Ü á „. ‚qéð`4Ý ÖA8…6á „]8ÀBÁðºU4 ¿ê°BP@8gpØAØ„döÙá ]8À‚›= „Ü`$Ý '^7@ãZd0ªn€¶0šn€º0Âšº«À
Àh³ÿª³ßLàšývøš}CÄëØfßÉ³o‰åÙ7E÷Ù·ÅËìFÊìÆyö‡n€„ÉHT0¢n€0û!©{öcryöƒ’7ûqù1ûY7@ãÖÁˆº0ªn€Œ¤`€0fyz×PÁ8tœ`DÝ Œª ƒÐM6@#ë8Á8uì`TÙ ÞàL6@c×°ƒqË¸@i²N0\šü_e³©h Ù ™œª.P²©8@	ª¼ÃyÕ ;DTJT°ƒÒ½h€ ÎašÒ ç°“M3@ ©i¸:8Å$¤R”2H=IÈ`¦`k$Á i-˜^ ¿ƒVL/@à5½ Ñ—M-@- Ï]bü†·&à::Þ2’R€–ñ&WM%€ÛÀÛNSj¸w‡ØíÉFü“ó>¶mø©~=*Àç›;ÀfsØÓÜŠ·©ŒË¦Ð/›:€«6u ×lê .ØÔzµ©ŒË¦°{›:@N6u€Ûlæ £ÙÔ6o3èÍãÐüøy'>m{’€ÏÑž¥â“ú™ìa<>§ßÞžgàC1|Ý‹€Ûš=UÁ¯+ÑAô+PŽjÏ¶ýæàƒ·ç‹_'ÿ)äþG¾Ý±yû6¾ýûˆ÷‡Žû<c­VoË²,Ë²,ËòO{pH     èÿkWØ     n@³Ý¿âA–    IEND®B`‚‰PNG

   IHDR         k¬XT   gAMA  ±üa   sRGB ®Îé   TPLTELiq8c8c8c K8d<j8d8d8d8c7b8d8c8c8c8d8c8c8c8d8d8c8c8d8c8c9dãû   tRNS ú.œ!º:ŽéòØ‚ÏÅuDj¥°NXáa&ºO¢  òIDATxÚìÝé³,’ àb”Up·îÿ>ûísúÇœ™oÞÆD–$>7X""<Çãñx<Çãñx<Ç#?.“Ð?†£ÿ&ÿ`Lß‹kI§}öjYûÆÑ‡±Ös87Ž!ôëÚ©8ï•ŒÃ—r:£êÖàþ1.¬‹òó>Hß³áôK8^`]ßùsúü¦ ‡=výAðäè»øÑ1ôT½#øºyÐð‘Ø×ßgzµKþ‰7?X¼‰ëNÊáƒèÍ¯ÞéXã àCèI‚w³}üŒV &æ`×¹ý¾@¾'˜‹YN	-ã4ös:ºM@³Ø¼ZÌmŒÚÄe° ÛM¢ÍÛßc!!Ê6o1¦›D{·¿¨0khÈ vx	­àÛJ°8Ûš Î€Uô»€°x`%.2¨N*ƒÕ%¡2Ú¬ˆ,jâÓŠ•ÕÀ°ºu€j†ÐO¼âõÿrèŠSÝë¯/P(Ž.ØEBarÁ–¥¡(­Þ€X‚÷°Q@A|¶øëÂÚuJù£÷J©eî°ø³CAÓ¯2¡óqŸ¨üÏr.´f’NûÕ¾ÌI(F|	q«š')àŸi:Í~	¾Fq(Dw/æ¶üN5ü[\¾ÂP†ˆ¯sKLÌóº«—Ò+‹€"6ƒ—¹k)~ýR‚ÍnP‚ñ*ÓíìzŽñzŠ5ÈO¨W’º¯%Ù¼†HÈo2xÍørZ_ŸWŸƒ²cýÕ9«M”K7uäbú‚¾™q
x=ðŠpê·gÒP' ¼bøóÎ“×n+LY3o0…¬ØˆéìmI¦!²š1õìÆìcbäGÑL ŠÝš1El¦Ž@Í4€E€Ù «“­ xŽ( '=bªq (ñÕY{~’oÿ_dÝ4Ò ˆàÖa±í(‡¼6Lµ2È…*‹ÿ€ô‘Af|ÅDn€|Ø?,Æ&Ár“Ó“CFbø_‘Üê'ùEL´jÈ‹ÓÓwë8:çÂÚù
(@Œ-MÎF·mß÷‰Je¤jz¦¾ÓŒ¾;R{@øN'¦	¾ï1Íß‰YL2jøN{zbæ§ß#ƒï$L2Ã—¢˜Ä0øR±jf²>0à·_‚£€/µa’¿ý´¾Õˆ)z_JÛß Å„üô§°?Þ*øZSLðÛ} Ñ?Þöðã} ‡¯¥0Å_«Ç¾–ÃFÀ·âöÇû@ýëÃ Z7!Rß„)øZ3¦`ðµ<& ~û[ð€{h)).£R2Quàm\N{TÝ²¬ýeëÒ)?ORT-ð&=Ì]pß`Ââ7·3†|ð½ÁŒjp3›-%¾?2	³€[q’}FXÇïcnŽ€È¾0BÌïtœ¼ü§Àž«GýR,÷tˆî1A½R2÷”ðFðn‡,þ18ä\…/ šsíÁuŽÃm†Ì˜0EÅBSæ xÌáüœùsXJ?¼*`‡»ÐÌã ‡9ý10˜…,<Ú[Àwa™{Ý³˜á.:óï˜…*ü9ì3§^+¾9É»LzÁ,V¸MæÜhÄ,úÂ“¢cÞÖu¡ð´¸åð"mZ@À:kæéºn³dyQƒ8¸Ê<òâ
38à6sî‘íÛn[öýRCßt@óÿà Ž†ßSXo`ç2ÚVBÂ(dÈå—~4¤Á €+3Éå°ÍÞ+Õý®ð· ô¿?¹ÐŒÉ¿[0ÁR|ÃHàPÈZzoÄ–A!¡ôÊÕ¡±âGé]¬Œ4µuœÛÒ¥,¸Ã‡€"tù-\&¡P„,ÿgbS›ÇLÁÊÿ$%lå×.3ÒÒæá9q: |/ˆ¾Ml#@…^Ðéf6±-u*joŸ6£$˜dá_º…‰˜ÄHÈn®2&ñØL7¸¾3?•=uHÈŒLààfúÀ4±º~kµ’ªŽ5QÞÚ×«+[xp«VRlà@d½¢ªèyý3>¯x¸‚ª7 \òV®_[¹Š•=;LDÎÚ iÕâê8ÊÊÀÈ@LÕéº'¬µÏ˜±3¯Ù 0f«/Ÿê˜à~<bB3ÏEU:òk8°òsÔbÅn@öXû›\ô˜Œx]ë´sB!—Éb25ÜHDÛÀ¹³bÅt&
¸Ïv`*ù¶Ò>~:¶qì¬Xð‚cÖp¶b²Q@FÔ\Š@dp©&‹ï‹Ÿ»K;›aç|™¥Ý¤£ð&>¬$Cí„bK»ß=’o=^`)d&G¼fŒòí—Ó­rÛ-^c—M¼wäv:2Av¢Ã«B”üÅúR/	ò“#^e—SÂerî	^B6(a·xÙÑí.aûbð¢UC	¢Ã¸n¿ð ˆI9¼ÊP†ñn‰ƒ†bð¡Zý¤ô‡à:Û«jø;Î6¿Ú´Ò	OðEnU«üÈå4w#ÁWÌPëÞ¬üxnƒdþ'®å°û.|M`PìñäûEùù<÷m›¦iÛ÷Ù«¥w_e&(jñ}æ8Üþ3ßA¢€¢øv`K…ñÙ`;F
Å	o±vçPS¡ÔÀZi+øåôjÑÞ`ua€zt4XÙ8AM:X•Û8T%f‡;‡ÊÄÞc5îP:‹u„]@¤?°†uâÐ},Ž,šÁ§ÅbYVIh‰ô#–ä"ƒ¶ˆ­3X
YwÍaóJ°ç)‡ñÁUo}zëLÕÛ_Ÿœ—32Ë®¡i\žËwù³äÐ<¹ç	]gÊá#°]äöË”ÃÇ`›_¦HÏ-sø(‚îj=ð¦W;ðyôpªÞà{ÈØÍƒ†O¥‡Y­£ÁañãðÑÝfµs9…NRÀ7ÐtšýÒ‡Åöû.ÃÅW&ä°Ñ«¥ÎX‚ÿ±Æ…~Q>žÛ |'Áä0ísŒÞ+¥ºnù£ë”RÞÇ8ïÓ ™€ßÀ…ÐZ³?´ÖBpÇãñ¯öà    @Ðÿ×®°    |2Ï×z €    IEND®B`‚‰PNG

   IHDR         k¬XT   gAMA  ±üa   sRGB ®Îé   WPLTELiq8c8c8c9c3a5h:d8c8c8d8c8d8c8c8c8c8c8c8d8d8b7d8d8c8c8d8c9d{u=   tRNS «û”å
+ÕdWî¹u?ÞÅõK‚5Îž%dÑÁ4  ˜IDATxÚìÝéÒ£(`ApC\¹ÿëœüè*ª¦z¾1§:Ñ>‡÷Ä'qÉVRRRRRRRRRRRRRRRRRRRRRRRRˆÖê­ha§cÝ…Ð¶Æx?Ÿ§|#ç9ÏÞ{cLÛ†Ðuõ¤Ø_ur7lM_ÙQ¤÷#F[U}ÓlÃà¸œ½	/ÍþŽèÃðÍþ°Û Ž~ûå°>Ÿ!†½éöå°ûöÙªDúdÆÆI–§è0ˆôñØm÷ÝôHƒš‹ô•ØAšãyÚôé[=7õÓ–]¤D™ l	8A;=	ÀTéËÍ¼jö”èY¤¯Ç>èK dº!¢™Ÿr&˜xº%•|Èa°¸tO,ïi€4ºðcHwE¸  °¥Û2òî~zK7
ìõý Mº1ö<h¤ÊGÚ iš6À¸´Rï#m€ä:â ãi¤¡#`çH ¹Ž8€õŠ6@â5q€¦}8€¨šÓ÷•µ£xú•`eûsŒ1ÞÏrçCcèx6@e®=br¬]ë%oìÇÀí ™amýÞˆ7… #­lÆwø ,/¸ÆðÊd†ë½ÁÀTàö*Àè5> ¦×½º* '„ L×ûxùN @NçÄÕr'€2Í5€¾Å	À–Ó^¨R ¶º‹—¬ j/	Ì
) k7ÀuÀÁ¿0(o/¬( àbº-@Í‰,û€/@”— Z =_Øð0/® ´ˆ, Æ`ª@ÀR?	Ž´/ƒl€;Ar÷nEO@-Œ	`’€>€Þ¯Á}AB•üÕÌ3bˆ§ Ó
ÃOÂk¬ a#ôÏ¼ÞV€Î‘þ{œÅÙR|@"'‘É9äHð!©œcîˆ ÐõYB ºÝ¦‹‘€Z½»¼ÿÖkd qõ®zçZ†@O9M×#ä„@Mu×zé*‘ÞIoôÃæúÇ¬k×…Ð?Kî‹ï¥©qã?Ç¹aØš~åµ9H†ÀH9Ñè& xÍHôF‘åÂHA“¨|d4ò,:”„ë4i€­UŒ2Àf"# 631Â "þÔ òþÓÈûO@md„,‘ÑÈkÓÈS«“Í¹jFÀ:³0F r~UŒ*€¨xÞ}z ¢ßM­£	 òCDï¤É+m°ŸM^kÀØ\ú|
 y‘=.½	yÉER ÍlÂzÄ¼ïä rÕE 5~¢
PØ¦Â! Hê`0ÇÛ½_0°ZZ€ " Vï L z… x	ðñ]yAÀtÀ 8¼œ à`*@0õþJíÕ|  €¯Õ_" Aˆ X4[à €Ôˆ Ød€ " 6ù÷d ô D l™! ²@õ®€•µÆÀŽ$€ .°¯@®	( X½ƒð è&€ ×„ $ Lw0 p¾j4 L' h ˜	t ¼&LãK  S-L  ‹@ ¹$ƒ`€  È5!H  ›<@À  ×„…€-3L @®	A à%Y/, p ¹&	 `õ@ W   xM˜ÄÐ*, Lw0ˆ .€  ×„ , LA äš$€€©& ðÌ-pF ðcIösF¾¢`P’%;Oh ØØZ ^Šý@ ¯	û ¼&gDµÌÎû5¡[Q ÀK²Þ  €ˆY£ €×„' xM¸G ðšOx rMHõK2r p©äšð‘kOôýC5aÓ²ïÐ5q5áo…'~ePTŽsü.€’†õG~¤ÇvO\vËTÀõ ?RÚ9~`åö©|¢&îû­¨2=¬©„Õ„·­9_Y NÀ’¬¹eÍ†ÿ¹0+öþ¦	Ø¢¯`Tº&Ûç&ž‚·6¢Œ
´÷èîøo4JüÇ¨þüô ‹ßÄo e§Ø}YÿÎOŒ*¶¼ÿš{š››gžÖµ‘®SS5pßMŸÚoÆ¼%wš¼V®—®õrçÜ9Îw9›p¨Ïmìh½äî.gÓ=fúe­bœ–eš¢ÒŸßÖ´¼2)ÍJJJJJJJJþi	    ýí;    À|šù¯W`€I    IEND®B`‚‰PNG

   IHDR         k¬XT   gAMA  ±üa   sRGB ®Îé   BPLTELiq8c8c8d8d7d8c=a8d8c8c8c8c9c8c8c8c8c8c8c8c9d´èaè   tRNS šú"ÏnÝ]ÁN?/òé}Œ¶ªÂ™1¿  ÄIDATxÚìÝÙ’¥*Ð”ypÚÿÿ«÷¡o„ÝQ­Žm‚ë*¢(¨½^¯×ëõz½^¯×ëõz½^¯×ëõú>+sƒ›—aØbÜRVÔ	–(ðÂ›u˜“¦v©q^'ü\¦öØqð8Ì/É6öÛœT¶ÑRä0áï4ñ—V\W†L¬Ù`ð¡u$¾FƒëøWBŽ¨¤8âG¨(JbfœP•˜-1¢Tg2±‘<¾aÑÄƒÃ—øDØ_#Få¿â›=œòø®…Áïßqhƒ]‡U #îè¡lÄ-Š¤gZpcé‰FÜf¦’·’ÇÜh`0 tÖ²À­z˜ˆ{Mô,wËô$zÂÝ=ÉŒÛm-t áŸpÍÊ|¬ãÿw"¬Êað8+Òƒxœ#~?ùUaåÛ #ÎÙ$ý‰œ=Óµ`Ä~üáÁ&Î
gš~¢œÇ!‰#ÔýµsÁßyK±ÕÞÍR«
°¥þn^^ñ³IÓc$¶T»[XnDKÇÙY0Ù‰8hRtJ6WZò~Ó¹ B'X5=ˆÂ®úÄ•Íó·„Ó¥p½ÄÄô6„©r×,&¶»ÁŽ®Ê³) „_ƒ¢·u ¤Oh©è¡Ö
ÀZÄ!3µÊà‘ZåqH¦V¢©UGê¼LÔ¬	Gê}T½Oƒ¹÷…£V­8d¥V8¤hj”Cç50â˜ÉR›$Ð÷÷ 8Fä¾WB€Ñ}N»¨;o…ãVK2½·À‚VEÍÉ8cJÖÀn¶Ô˜€s¢¢¶è‚s¦Ðé0¸3‰Z"NÛdß] ‹¦f¨‚Ê"©3.[¦6h‹b#¡q	—y§úwbÈÁ.Ûgì&ös‚Ã§¶D¬øXLÄ˜øœ‰/åQ	¶ó€wºóÀ4kâIÔQ¸6Š¨ÄbÉ.¨Å$bi,¨e•Ä‘4¨EŠ²€¾GÃPªf©2”êY,ñcÝÔgªòN/µg‰!¹uš¯¾Kµ”@,ZKiçQÉf{}j„ÿ=³´¡
£ˆ+¹Tà%íº¦L|ÙqÅÇJ&Îäìñ!¯‰·´	|d#î´3ø„#þò'“‚ÈÔ L…a ×Ñ`£F¨«“B VØ1âo©£Çy#5Äº‚³5E8+Q[ÆR1\»5Ip>P¨9gÝ{$ê¼fê¼VjÑŒÃ&j‘×&Â.ÿ)Pç‰uJa¨Mzú©›¾ƒ*¥ ƒ”>qÍ|%ôShpHê=¥/Q«\ïÕcŸká]FçQ¥ª÷ ‚#BïÍcï= Q«tï+AÙù· %tžÙpˆí|)ì©ó¡H­²Ÿ]a›æÙ¹0*ª(±9TCÁ/¢fÌÂåkØ•ï¤L8$?îJ‡ÉwV€°ôOÙ¿³½oC,>òø"ÊÛ’Š—g®V‹£—EÕô­à‹€ƒÔcÏïJ¸ãhÔ<ùÃ*¿8¾<ú WÌúÛÑ”éá{v~¼øÈâáý¥  ð¨€Œ]Å:L* `W­ô 0¨€“¥G:({€KP¨ig„zþéínšUí­ßxœÞîâOÚjž°c± qÞê²¥ß©0œYìZþ®Äe”vÿ)*-WŒ¬S”ÅdâºE_pUdp‡å"6‡¢Z :^·ÄWü3E±ŠÓ¯ÏuÝ¢åt“­¾"zO ¬ƒTá7ð_M2ãn“¤]‡3AÉœ^ªO$z9áFÿ“f¨é÷c«Yúü,vø>/›ÎÒçÿVq˜Pçly½àkL&rD¬ß—H+ê[31’ªL"fÔRPÜ#Ä;}ˆÕŽ[Á‡Ê’‰3ÖÏþøšØSÎàŠ²E»Î¢äÍ’,5E†mÂ!~sIS“²bù¡Ï›uq£¢ÆÉÑ-Ãýô‹7ë6,³IÑëõz½^ÿµ‡    ‚þ¿v…    àà6‘8®æìþ    IEND®B`‚‰PNG

   IHDR         k¬XT   gAMA  ±üa   sRGB ®Îé   3PLTELiqáº‡á»ˆá»‡á»‡á¼ˆáº‡à»ˆà»‡àºˆá»ˆá»ˆá»ˆá»ˆá»‡á»‡á»ˆ·   tRNS =öO“`É©(éƒÚrŸº%5ˆ  ]IDATxÚìÝ[Žä*EÑ `Þgþ£méþô×UGVwY®¬	¤Ø2ù œ–ã8Žã8Žã8Žã8Žã8Žã8Žã8,Të©ülšú="þFŒm”½×L?¯F½"þ©VVOU~Šñ-ÚÊ?"BÀ7+«¼ÜÆ7+óÕ*¾_¼ƒ¼ÖGŒ·^ŠÇÜtØÝU^'áQKåe2žûËt<­My“…ç•Êù)h³ó ÀVçÐ’ó ÀRç°Õy Œê< Zu 18€˜ ²÷ HÞÄà< Zu C@Qçp¿<@,ÿkŒñ÷ò»ù­!÷»4|U¬/`¤é*_QÞÀNCoø\'ð[XŸ
LD4|f(G€ß>Mp±™Ÿ¨tD>°ùˆ¤»D@tÃl0é0Ë”dÂª)e É°êœìg1£r£I@.ØÖ ²a“Xè€Éf 6•5€,˜\´´Á"*k I0™´dÃ¢ð0QÚ R`‘y$XlÞ R`¡¼2,2o 0Ø¼dÁ *o€ ‹Ä@.â 
q€ å 8À†A'Ða°‰Dâ axHÁ$°`°ˆLâ 	8@……òPXÞ Ò`0‰\Ä6q€ƒF ÃByXTÞ 
‹À@q€ƒé=@'°a°ˆÜ0ØÄ
q€Í{€H Ã‚8À„…ž ´ò	`Qy$ïÂ	`xÔÀ")p°HÞ¸ÿ"ä>Àô {ÿ1ä>Àå=Àò¾$v{_ÝÞ—Å‹÷‘â}klxßmÞ·Çáü€D…Eæ¼’šÞÉ-ï%¢÷ãòÃû7o€ ‹Î Ã"ñè°¨¼nïwáa°yTXtÞ ™7À‹Ê Á 	m€
‹›7À„Åä°aQih„AÚ ›7À†E§ 0	´&œÿ£dÅÖ &‰*ÀÇ¯†¨¬*LnapÁ$±Ðhœ¬ºu¨&™5À“¦Î³Ó…4Àpþœ¡6·pH0
œj„MÎ F™3À£&”¬&e€«¡Œ.˜%çOž.Â Ø¾ 9Ân	[€ZðXÉè…t¡
P{ÃG†27>«°Ðt|l
E€šæŽø‚-o0òŸÌÙ¯uˆ/júª ÏKâ;À%¾lñ ¨ï CÅu€VÅu€XÅu€Äu€˜Äu€VÅu€QÅu€­â:Àq ‹ë #ˆë —Šç -Èk\xÞRy‰§$o’ð¬‘å]*žÔ¦¼>:|•÷xÈ0Ÿ÷M ® oUðíJV1 ½J¯ònë;ŸTÞ/7ü{Í0ø÷Hwû‡#_=•ŸFÃ[¼_ÔûÌ9…P«ÊqÇqÇqüj	    ýí
    À-¾eTJ¿ûjŠ    IEND®B`‚‰PNG

   IHDR         k¬XT   gAMA  ±üa   sRGB ®Îé   QPLTELiqá»‡á»ˆá»ˆáº†à¼‰ÿ»»áº‡á»‡à½‰á»ˆá»‡á»ˆá»ˆá»ˆàº†â»‡á»ˆá»‡á»ˆá»ˆá»ˆá»ˆá»ˆá»ˆá»ˆá»ˆ…õ*ö   tRNS óÒ;ºü^léÞÆ(2…P¦yE°‡p   	 IDATxÚìÝ‰®ë¬ àÌÆÆx›÷Ð©j£V¿îµ¶“ä{xÌ¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾Êzž9Ÿ¦iù1Ãòcš&þcZÀû/‡±{ÜN)GÆ˜÷ŽRêœ÷Œ£”ò$q·æXø,àÍh~˜=’sdNáŸ(ÇÆs‹Éšx‚&‘Ñ+¼NQ/Éþ³é>AyIìñ›§ƒžL”ŒâèHìàWš}óø:'ãúû¦‚^L)æ¡1“€_$ûé1'îƒþ=ÍO£ÂÜ¨Ü¿€ÍÏ‹žvý7—
Kq›áÐ3±ì’bIž¬º5Û“bilçÐ'1D‡Prè>ÿ~©°ŽÑò>ÿþj9t‡Ej´:²D‡•¹Ä¡b•
«£dÐmFlAÉ>B‚y÷Ø³34Ç“Ãf\œ ±…PlH‘	ZÇ©°)µ-ÐÐ0bkê¶_bd³Çá"±òMÛßÞx@Ó‰Ý—íßöcãPïªý¨b€ªBT˜¢
ó »†Š„}-áçÇ“Ä˜Ò¾ï)Åøï¼9ÅW8ŸåF’¬9–ÿ”ƒÂÌ—c5{ÜF‡OcT3ÏæøÎh®áŸ…é°i{:£TÈ“¹­d–ð×ŒúºoLáÜ uèâ}~»šç×“I’â}›†*V‡·ùx+¿žJ°ÑjàïrÄÌ5R¬£†òt|"©ËŸJ²G÷¨	Ê;ÞÃžNësw(n–xÝV]/ÝD*„€
ïðiz1ã4â^Ca‹Ç;¤	/ï:ÞyëRÊ
ÛÍí:/›"ÅË(ËÐ¶<¹^:`fxÍ–´Öã5j†¢,^GÓœ1ûÈð¦» *ÎYóÏ#^a» ŠÌ Õ{`äÝ€Tï·BQFáUçT 
ƒáŸy«¡¤Àð*¶ Tïftà1kÎu–.	#^¤’†²†Å4¯$_^tÎpAÎ°XÉòµ2âl¸ <ÌÿPŒ­Æ4h(S¼FQ¶ßn^á)îG€òv¼èP–˜L"çÈ~Œ'IfÒPf=mÎëyY˜cáê^“¼%‚×0oivWW@xO¯¼%!?| Ì/aÞÓÚÅ èÿÀfxOÚã%ÞÔ¢ð
7Ã›Ú{ÈLöÿT|öCiøì‡àï*ât‚wÅð
)àMúÙA ,=hõÿ*Ìô‡¯ÞÖˆWðÙk ¾Jøð50Á‡¯+¼-ÙA…fÿ°Óð®ýð50¨_'¼ÂÀÛ:ðŠÞ–Å+fx[	/ à£“Bò|š–á¶eâ³nð2ÁcÙ¶SÞvn$&{LºY´Á‹Â`Éè)¾À[Zdç*ì†ˆ%I‡¯S,2£åSÁH•ïžEY	U|G8ìóq™{@µu˜“72
Åwyù	2šKw@˜[/½%¼*ÌÍMÕ_‡µíÕ÷„—µ1Ù…;àÀ‡lŽÂ°ó{öCN,a«=Ž‰Çœ¼€\–ÂÀ° —©p ä°ˆ©r dzë€r™w€Ç"lå—!ÛÙ€rÑ…“ã;
U¶LzÃ"NÈ¦pnÔb²ò¦(Ëgd5B6/ ž\ï0Ž¼–À ›­päµ8,ÀC6±pä%bç`KG^“ì{
¬ÅÏK-RõÜKù¢ÇÌÆÚ‰à³Ùí5Ò´ÂE†‚¯û&™Sv ø:Û‚«ÝSŒä/Xåwß?…óÌÿlÃ¶ê'ÇG•œx©^'Gg¨d¬}€gÀ¾êå}íìà¬º::.híÒ]Áð
¯{*Þ> j¿ªªàõïW¶]ê×.xÉ¨û9Ë¯tƒûèÒOõº¨¿
bê§z}„¬6¼Ä‡n±mMnÔV”\ƒyRxÉ&z9È»B“EÀñ^NðLUž‡ÔÉ» UƒÏû¸Ù’AfÁã5{GÙÏfWªú¹‹ë­SíøóÁ–žö&fÚÇ­º6C¥lášî$ÚãÃÈÎtñÙK‹—le&_û»ÕgÖp!"x‘2­ NM/WGÆ §¡ =âU$´ g›ìZQf ´EfWùò;bÛíéˆ—d7xlüÁ¹…bÃe€KlýN®%^FS(ðµóÖ	šƒâet¾vÎ4”¢Ïf§ØW‡W%(g z`aøÐð~o½áÞÈc>³Î€Ju½~Ÿ!^f¡$Að9¼n"/ó Ÿ!€”,ð"1l*ÿÝ	™K»~R¬:ÈPOïa;ÏùÁåöÉ9CñJï“ÛíÓ³šà]ã>‰'ï—røÐK‘ÊÄð.º·q+)ÞBW¨ÁP¼Í3ß® wxÓ Mð	ž¬\ÀUúˆïrÔ11|Ûìà
½ì£ÊuRûIð@e4SøûÙ‰tÒ7h¤“Âç(¶%{pý‡k%-a
Ÿ ,Ô3õÚÍf¦YüoÛÃ4˜H‡Ïg¸­ÙY?å™Üân1ëzÇº»ÇMz…ÏrT50|™rÞ36þ`Ì;…¯P»†ªÄê±'Û•	ë°lêt¢ØjÔ7GŠ}PICs/càä ŸÜrVÂî°¹q øä`´Z?Ù* )m6ä€Æô*¶ÂŒ†æÄ@(¶1=à»ÇÔyèC0«Sdnˆa£XzÂw†5ù}†¾è•¸ŠÓßè·µˆ>-:$–Äšþýí…•¸¦{Ünr›	Ð51âË5ßNºÇa
ó£ç£ù›×ÈTþæ/~yM§W˜‹òÛ¾øUôb’ô˜ƒ“ÑL~Ÿ°˜(¾†ŽÄ~«0Øx2÷ôÈ·}å~µyYmÜF§î7>™cÒðÂtØ´Iæ)^@=“$™ƒkx'š«±)nrdŽ*…ÿG)êü(·˜¬Y®á=éyZcí¾§#!ÛBbLißwkŽaš5|¡uaþBÐZøúúúúW{pH     èÿkWØ     >?ÍŠáó(ñâ    IEND®B`‚‰PNG

   IHDR         k¬XT   gAMA  ±üa   sRGB ®Îé   KPLTELiqæ°Œá»ˆá»ˆáºˆã¼‡á»ˆá¼ˆáº‡áº‡á»‡â»‰áº‡á»ˆá»ˆáº‡á»ˆá»ˆá»‡á»‡á»ˆá»‡á»ˆá»ˆá»ˆ79   tRNS “Vä
ü+Õd¯9IuÉî¼ö„Þ§œåiÝÈ  bIDATxÚìÝÛ–³¨`"gDåýŸ´«÷»»F\ãOb¯Å|èg™PS6333333333333333333333333çêV8ÇpÒÎø¤´6ÆÖÄ­´ÖbŒÖZ)CÞ8ÅþcQFF±Õœ×c)Eë~7Zï¥,Çºæœëyµhÿvàÿ•‹oì¹Ýÿ\ô~ü8ˆÿ9¤Ç38yº¿#ºü8\Qz÷d%³îïÌ¾VCzªY÷·§ä+>ôïÀœº"ºTaÍó¸]ú§¢óyéÒ½S&¹4z9¥{€-ýÃÑkóœ=%¼éþñ”M¦§ (Ñ¿½¶§|¸³%ËåŸ!jÿNÊéi€¾× ž û·¢kàß0¹-ûæù÷Öþ½”ËÐèE$Ú }‰Ž6@ÏÓØ¯D /QÑÐÕÓè¥9Ú ½â ¥)Ú ½zâ %*Ú }3ÄVùp ½¬¿æ8–RvØ›z6@¹äï±ÖÆØÄ¹UØSöÍ<`±¯M1I>È(¶µÜ¿ Œ™62^«¾{` IŠu¿#p< ƒ@ßcI¶î/ Sa+¯ì‘ã`Ü_Ë«Â!`Ü\åÆH Àˆ¯úÕr'€²ëk ‡Ä	ÀR+/‹€ùúâÏ V Õö—šB
Àä
øÄ`NÀ˜ T,¯ l |*fÅ`6â é18A€7â ,j@/Š
 °Ë P¨	îÄš¦=ä­ÓPPã
êàÈ•÷t*1ø8¨…@5M»6'àñ0&€û@  +…s þhl3H\+'HŒ„LqŠÌH;ÁIR#¦€	"h ¸½‰’#Ê_0I€ò±¾|þ%rd ÊÇm¹ó-CÀ“·­–þz´HH ”3^Æ«.ºßÉaù³J3¿Æ{B66qÖµà{ijÏÛï©5ç¼EÏ×æ É‘ÐÂÑ8,' OÃHV‘ØEb¤rà¤–èe€ý2Œ2€®žSÐY*F@¯Ö1š ãü	èl£	0ÎŸ&À8Â :KÇ”3(F`,¬M lÒ1F`,®O l61F@/[ôŠÑ§O`l¯¢£	 K¾Æî2Ô ö£
;vÚ"PÖ³Ù±Ç)€ýÈ›ˆrÜø Æ&{§ˆ6Œ-I¬°Ý$&€Quèkt¸ ´`(ër[ aXZ`°FÜ8bÂÀŒ( D Ì\ L $€€qÞh	 ã~ÛH àˆ  €€©PõM¥%, p ð½ú—f° À0eïƒ€9»P ÀÀ\„ `)÷7˜5X àˆ Xº]’é"G  èå2 3$€ `ˆ  f.€€çx ¸‡	 €Õ„½œž£ %@  \ À¨	! FIÀ @  /Éúþ#€ .°yŽ€)@ 0J2€@à †@‡ `.Â Œ’" Ð °Ô 5( £$	`€  %H  \@× Ð 0sÁÐ p
À¨	A FI@ ÈR! 5!H À(É@X à FI@ ¨c`ÎöÓc €×„½4‡ ^öUr ðšP_	 ¼&<$
 xM¨…C /ÉªG X,
 xI¦#G 8 à5áåP ÀK²À  /É.… . °Œšð‘{Oš ¿«$[%ûhRÔ;6ÿY ·Çço*ÉöOW"JhÀÖøP'n»eà~ šð˜ß4ìª¼£&Ô›gŸŽ²àª€ød ]ûïGõ+
ç-DÈCþ`\@MøÅ…—\\úoG¸*šPo:#–~ã¨Þ#°×/.ºoÚ¡ÿå¨þü]™bÖÿ -¾:W,ÙóJnþGåä¹èÿ[wüË+Osc¯zì}\û%Ÿ1¸w}Ø¹îcÑù*ž°î8O^FqÛOÎK4Œz£·ŒâÜjÝNñ¤•·¹RÎ¥äœSüýŸåÒOœâlfffffffæ¯öà    @Ðÿ×n°    ,ÁHÛ¨=Ý    IEND®B`‚‰PNG

   IHDR         k¬XT   gAMA  ±üa   sRGB ®Îé   ?PLTELiqá»ˆá»ˆáº‰á»ˆá»ˆá»ˆæ°á»ˆá»‡á»ˆá»‡á»ˆâº‡áº„á»ˆá»‡á»‡á»ˆá»ˆá»ˆBû‡U   tRNS ò,¾™=ûÚç]N
mÍz®Š'Í.-  ÊIDATxÚìÝÙ²­&àf‘Aì÷Ö\äÂJ%et9šö{€]µYŒ?ðù|>ŸÏçóù|>ŸÏçóù|>ŸÏçyNJ;Ç²¬Æ4­ÛºD+0‘âZ=þ?Õf›a\j^Ú„ÿ§š"a<y6«u07'‰6;ƒ4ŠúlÃß	#4+^¤)·„9àBÉ@’ÔxQ£ÞHK fžðV~q<þM•@†ð~Í@CñøŒ` gð1~†î)O*Ð¹ðY+tMDÎ% *n¶‚\ñ:å4¾BHèÓŠ/©z4ãkèPøŸxv€C `V¤ÇW­Ðïš /ß&¡'yÂ·èÉ‚¯k#T ?Õ F(€‚§	3Kå  œ’Ñ<KC?\Às|›3ü“ŠO©„-ÁIË„Ç²s€0ïœ#hžà( ð“a*±ÐxïB6/âH=rÐ†‡ù(ã)µ 'ð°x×ÎºÈÐ‹‡­·­ˆ$?hÇ¹e§’á)Á)²î”dG¦“ÀõJÐ2 µYÀ6p]¯‹ƒžØSàz%ÐúRÞÌºËcžž»;»Tˆ>´¨ ?IpENÉÁ†à(XaTY¸À£šð	£xH†Qy<B ó0ó>À;UÀC÷aÐÂ¨4÷‰P{y/“êjP(TAæm`Æc&c’È¼
8ÇxÉs&´©™ç0°Ñ™A/È°r/ŠÇ5ãYñ­xÎ6“…áÔ×/Â?*®Œ%<gŠŽç\hS-Œ$y<­%ž#áÆ¯
†¡þ@¬	F±àO|“0†Deí²ø³°(žCáÆÉ´ljÌ@œõxÉD~L(x‘o–i7°Ñ3æ4^W÷‡E)BðZ1$¢I!IkZ2ìà%%¨Ò¸ƒÃw#·âßfw!º\Nïâ‚²ÁÏÞ0
Yª»d½3P×=®ž©ÊµzžÑÚ›Ôp‹E[ñ."E.Nxã€¢\&¼IË\Ÿ¡ÂÆ6¼EU@UZÞ $ K-^7I ËÍšx°ôui	xQÈ@š³Æã%¨S¥âè“;ƒ“ËùÂô((‚mži7p}na‡¹Ap°ƒÃ»„3ìàðý°ÂP”Á³,Œe<‚Mªw&ìsØP3<ïâo|æ^˜—ÀÌK Áˆ–;žšárÞ4Áˆ’À£"0O$00&ÃdAtýÙƒZyU&œSú®Ç5Óg‘{X-ûœFÃ½ îÕ3y/X`TŠ{€À#"÷Äê™{°0ªÌ} ¹O…-óÅDîWîï6<BÃ¨ÜDç«°³ËRJœÜÈ’ÙTF<‘c¨¬†‹@ÜÔèàŽÈóMÎ<tÃÓÒ8!áÚS7<'ø—§nxZ<fís¶*ŠƒK\%qXTMO]óxêvÿNÄk%{Lè9Gµ¥ç7ÇM×¸~ÍOGôÚÎŸ	óË@÷ä‡Ò£#•“²77¶ƒèñ0K"R?Ì'OKiPHN¶OXé<ªb>øÐü	>õ¿{»™–ûr	xŠ¡¥­‹ºõö „?+ái^éàßT4ÏÒÝ~µÜ'ô:§¼ý•4¯1ÓSŸ‚nM¿ÒDÎ°ì£}}>{üsÃœOŠÀþí“
 ë* tAzü#Dè=$½€þ\ fèÈ‚o›ôÄ5|—”_ºÎ[èœðE‘rðÅu¾@rÃwøúä¾AXèVÁçÉ @{‡N´YeË+ãñ)URã3ÖL8?û:-ywC¨–a„ø&DÇù=Ù˜Ð&ð"±J ,Gíñg^Çló³E‹
!OGÉ×Õ:JŠmÂCB[l†9YL;u¾¶µÌ
—æ²š¦Ãô·Pu3ëR¢Uðù|>ŸÏ_íÁ!   € ÿ¯]a    ¸Ì#Z’:-DK    IEND®B`‚         h  V        ˆ	  ¾         ¨  F  00     ¨%  î         i  –D  (                                    šˆ|lP?1bD2h]>+‹Y:'¨X9%µW8$½V7$ÂV7#ÄV7#ÅV7#ÄW7$ÁW8$¼X9%³Y:'§\=*‹]=(eS1ÔO,ÊN+îN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN+ÿN+ïT0ØO+lQ-R.¸S.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿR.ÞW1×]9 3L" W1¡W0ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿW0ÿV0ÅY2‰a<"¡tS=[4‡[3ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ[3ÿ[3§Y2\5Hb=#`7n`6ÿa6ÿa6ÿa6ÿa6ÿa6ÿa6ÿa6ÿa6ÿa6ÿ`6ÿ_6…        c8 d:Ud9üe9ÿe9ÿe9ÿe9ÿd8ÿe9ÿe9ÿe9ÿe9ÿd8ûc9c        h< i==h;ôi<ÿi;ÿi;ÿmA!ÿwN0ÿoD$ÿi<ÿi;ÿi<ÿh;ñh<C        m@ mA'l>æn?ÿvJ)ÿsF%ÿqC ÿ}R3ÿsF$ÿoAÿyM-ÿoAÿl>ál@(        sE# rD"qAÔtD ÿÄ°¡ÿ­‘|ÿq?ÿr@ÿq?ÿ‰`AÿÖÈ¾ÿ‡]>ÿo?ËqC!        yJ( xJ'uDºwDÿ—oRÿcBÿvCÿwDÿwDÿO+ÿžy^ÿ~N*ÿtC­wJ)        R/ ÿÿÿ zG œ{GÿzEÿzFÿ{Gÿ{Gÿ{Gÿ{GÿyEÿzFÿyF Šw@         ’hG |F ~J!yI ÿI ÿ~I ö~I ú~I ý~I û~I õI þ~I ÿ}I!e}H             K! ‚L#TƒL!ý‚K!ê€J![I KI YI NJ!I‚K!Ö‚L!÷‚L#@L"             †O$ †O$0†N"ê…M"ˆK$ƒM#     …O& ˆM …N"q†N"Ü†O$ …O$             ˆQ% ˆQ%‡O#|‡O#‡O#             ‡O# ‡O#‡O#oˆQ&‰R'                         à   à   à   à   à   ð  ð  ð  ðñ  ññ  (      0           	                  ÿÿÿ x_P ´¦žŽzm€iZ1qWFWkO?pgK:€eI7‹dG6“cF5™bE4bE3 aE3¡aE3¡bE3ŸbE4cF4šcG5”eI7ŒfJ9ƒiN=vmRBerYIFÙÒÍoTCA]>+«U5!ÜR2êO.÷N,ýM+ÿL*ÿL*ÿL*ÿL)ÿL)ÿL)ÿL)ÿL)ÿL*ÿL*ÿL*ÿL*ÿM+ÿM+þN,üP/ãfG4OT2äM*ôL)ÅM*ÂN*üO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿO+ÿN*ÿN+äV3ÅP,èP+RO*U1:Q-ñQ-ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿR.ÿQ-ÿR.ÐT0òT/ aA,X4 X5'T/çU/ÿV/ÿV/ÿV/ÿV/ÿV/ÿV/ÿV/ÿV/ÿV/ÿV/ÿV/ÿV/ÿV/ÿV/ÿU/ÿT.ÿU0·V0á[5¥¤‚dA* ]8W1ÙW0ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿW0ÿX2šX1[5énL5j¦’…_:!Z3ÇZ2ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿZ2þ[4zZ3Z2{^7ÔhD+X}]G]5±]4ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ^5ÿ]4ù^6[[3 [4Z2Z2:  `7˜`6ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa7ÿa6ÿ_6ïa9>            £‰v \0 d:}c8ÿd8ÿd9ÿd9ÿd9ÿd9ÿd9ÿd9ÿd9ÿd9ÿd9ÿd9ÿd9ÿd9ÿd9ÿc8ÿb8ßd<%            ÿÿÿ d8 g<bf:ÿg:ÿg;ÿg;ÿg;ÿg;ÿg;ÿf:ÿf9ÿf:ÿg;ÿg;ÿg;ÿg;ÿg;ÿf:ÿe:Êi@"                i= j?Hh<øi<ÿj=ÿj=ÿj=ÿj<ÿk>ÿ{S5ÿ~W:ÿwN/ÿj=ÿj=ÿj=ÿj=ÿj<ÿi<ÿh<¯pI-                mA  nB!0k>íl>ÿm>ÿl=ÿk<ÿm>ÿn@ÿ{Q1ÿ‡aDÿwL+ÿm>ÿm>ÿk<ÿl=ÿm>ÿl=ÿk>_*                 rE# qD#n@Ýo@ÿo?ÿgJÿ¬{ÿ|O/ÿo?ÿo?ÿo?ÿp?ÿp@ÿyL+ÿªŽyÿkPÿo?ÿn?ÿn@nl<                 wJ) vI(qBÇrAÿsBÿÇ³¤ÿýýüÿ{aÿq?ÿsBÿsBÿsBÿq?ÿ—rWÿûúùÿÎ½°ÿtCÿqAúqC NpA                 }Q0 €V7tD«uCÿvCÿ•mPÿµ™„ÿƒU2ÿvCÿwDÿvDÿvDÿvCÿR.ÿ³—ÿ™rVÿuCÿtCíuE"1uE!                 ‹bD m5 xF ŒxEÿyFÿxDÿwCÿyEÿyFÿyFÿyFÿyFÿyFÿyEÿwCÿxDÿxEÿwEÙyH$yH$                     xD {H"jzGÿ|Gÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ|Hÿ{GÿzG ½}M)	}M)                     }I! ~K#I}H øI ÿI ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿI ÿ}H ÿ}I!š1   ƒT1                     €M$ M%,€J!êK ÿK ÿ€J î~I ¸I ÌI ÜI ßI Ø~I ÅI º€J ÷K ÿ€J ÿ€K"r}G ¾¢Œ                     …Q) „P(‚L"Ñ„L!ÿƒL!ÿK!’€K#J!J!I J!J!‚M$‚L!¼ƒL!ÿƒL!ùƒM$K‚L"                         ‰W/ ‰Y3…N#®†N!ÿ…M!ÕƒM"%ƒM"                 ‡S* „L  „M"S…M!÷…N"ç…P&(…O%                         ‘`; „J ‡P$}‡O"ñ‡O"WˆN  †P%                     ‡P$ ‡P%	‡O"¥‡O#Å‰S)‰S)                             ‡O" ˆP$2‡O#]‡P$‡P#                         ‹U, ‡O" ‡O#)‡P#WZ2ŒW.     À                             ˆ   ø   ø   ø   ø  ø  ø  ø  ü  ü  ü  ü  ü  üÃ þ?Ã þ?ã (       @                                         ÿÿÿ ÿÿÿÿÿÿµ¨ ”€t,ˆre?j\M|dVXyaRbw^Oiu\Mpt[LusZJxrYIzrXI|rXI|rXI|rYIzsYJysZKvu\Lrv]Nlx_PezbT^}eWU‚k]Jˆre=“s-¥•‹èãá     —„xv]M^hL;“cF4«\>,ÄU6"ãR2îQ0ôO/÷O.úN-ûM,üM,ýM,þM+þM+þM+þM+þM+þM,þM,ýM,ýN-üN-úO.ùP/öQ1óS3íU5"äZ;(½    v\KD\<)ËP.üL*ÿK)ÿK(ÿL(ÿL)ÿL)ÿL)ÿL)ÿL)ÿM)ÿM)ÿM)ÿM)ÿM)ÿM)ÿM)ÿM)ÿM)ÿM)ÿM)ÿM)ÿL)ÿL)ÿL)ÿL)ÿL)ÿK(ÿL*årVD6W5 ÙM*ÿM*ïM*¿N*œO+ÓO+ÿO+ÿO+ÿO+ÿO+ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿO+ÿO+ÿO+ÿO+ÿN*ÿO,×Z9$¢P,ÿP,ÔP+FQ-
+  S/ŒP,ÿQ-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿR-ÿQ-ÿP,ÿR.ÂU2ÝQ-üR/]R. Y6 L& U2vS.ÿS.ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿT/ÿS.ÿS.ÿT0©V1ëU/í\8 .Z6     S- X4_U/þV/ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿV/ÿU/ÿW2ŒW1ÊW1øgE.MO& æáÞ X2 [6JW0ùX1ÿY1ÿY2ÿY1ÿY1ÿY1ÿY1ÿY2ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY1ÿY2ÿY1ÿX1ÿW0üY4nY2lX1øb>%ÅˆmZ,    _9  ^85Y2ðZ2ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿ[3ÿZ2ÿY2ö\6QZ4Y2ŠZ3ød?&ÚwWAPP&	 b<!#\4ã\3ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ]4ÿ\3ÿ[3ë_86[3 [4	Z3ZZ2°_8q    f@%^6Ó^5ÿ_5ÿ`6ÿ`6ÿ`6ÿ`6ÿ`6ÿ`6ÿ`6ÿ`6ÿ`6ÿ`6ÿ_6ÿ`6ÿ`6ÿ`6ÿ`6ÿ`6ÿ_6ÿ`6ÿ_5ÿ^5ÿ^5Ûb;      \7 bPA [4Y1jD) lG-
a7¾`6ÿa7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿa7ÿ`6ÿ`7Åf@%                    xT: ˆiSc9¦b7ÿc8ÿd8ÿd9ÿd8ÿd9ÿd9ÿd8ÿd8ÿd9ÿd8ÿd9ÿd9ÿd8ÿd8ÿd9ÿd8ÿd9ÿd9ÿd8ÿc8ÿb7ÿb9«rO7                    ŽnW P  f;‹d9ÿe9ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿe9ÿd9ÿe:S                       ª’ b5 h=of:ÿg;ÿh;ÿh;ÿh;ÿh;ÿh<ÿh;ÿh;ÿh;ÿg:ÿg:ÿg:ÿh;ÿh;ÿh<ÿh;ÿh<ÿh;ÿh;ÿg;ÿf:ÿg<mc6                         h< k@ Th<üi<ÿj=ÿk=ÿk=ÿk=ÿj=ÿj=ÿj<ÿyO1ÿ‡bFÿƒ]Aÿ‚[?ÿl?ÿj=ÿk=ÿk=ÿk=ÿj=ÿj=ÿi<ÿh<új?Nh<                         m@  nB";k=ól=ÿm>ÿm>ÿm>ÿl=ÿl>ÿm>ÿm>ÿvI)ÿ‰bFÿ’nTÿ|R3ÿn@ÿm>ÿm>ÿl=ÿl=ÿm>ÿl>ÿl=ÿk=îmA!3l@                          qE$ rE$%m?än?ÿo?ÿo?ÿp@ÿ|P0ÿvH&ÿo?ÿo@ÿo?ÿn>ÿn>ÿn>ÿo?ÿo@ÿo?ÿyM,ÿyL+ÿo?ÿo?ÿm?ÿm?ÜpD#pD#                         vJ* vJ)o@Ñp@ÿqAÿp?ÿ›y`ÿçßÙÿÌ»®ÿ{M,ÿq@ÿqAÿqAÿqAÿqAÿqAÿp?ÿ‰aDÿÞÓÊÿÜÐÇÿ‡^?ÿo?ÿo@ÿo@ÄuI)uJ)                         }R1 }R2rB¸rAÿsBÿr@ÿ½¥”ÿÿÿÿÿòíêÿŠaBÿr@ÿtBÿtBÿtBÿtBÿtBÿr?ÿ£ƒkÿþýýÿüûûÿŸ}cÿq?ÿrAÿrB¥‡cH~T5                         †\=     tD ›tBÿuCÿuBÿŽdEÿË¸ªÿ³—‚ÿzI$ÿvCÿvDÿvDÿvDÿvDÿvDÿuCÿƒU3ÿÃ¬œÿÁ©˜ÿR0ÿuBÿtBÿtD ‚m8 ŒiN                         iL p< wF"{vDÿwDÿxEÿwDÿyFÿxDÿxEÿxEÿxEÿxEÿxEÿxEÿxEÿxEÿxDÿxEÿxEÿwDÿwDÿvDþwF"_uC                                 wD zH#[xEýyFÿzFÿzFÿzFÿzFÿzFÿzGÿzFÿzFÿzFÿzFÿzFÿzGÿzFÿzFÿzFÿzFÿyFÿxEôyH#>yG!                                 {I# }K%=zG ó{Gÿ|Hÿ}Hÿ|Hÿ|Hÿ|Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ|Hÿ|Hÿ}Hÿ|Hÿ{GÿzG â|K&#|K%                                 M' €N(#|H â}Hÿ~I ÿI ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ}Hÿ|H È€O)€O*                                 „R, ƒR+~J!ÊI ÿ€J ÿ€J ÿI ÿI ü~I ü~I ÿI ÿI ÿI ÿI ÿ~I ÿ~I þ~I úI ÿ€J ÿ€J ÿI ÿ~J"¦ŽcAˆY4                                 ‹[7 cAL#©K!ÿ‚K!ÿ‚K!ÿK ÿ€J! I!VI |I ”I ¡I ¢I —I ƒ~I b€J!f€J!ì‚K!ÿ‚K!ÿK!ÿL#{C ˜oO                                 ŸxY {@ ƒN$‚ƒL!ÿ„M!ÿ„L!ÿ‚K!Ü‚L"*‚L" “^4 ™c9 M$L#a7 Œ]3 „O& …Q(‚L"ŸƒL!ÿ„M!ÿƒL!üƒN%V‚K!                                         „M! …P%X…M!ü†N!ÿ…M!û„M"p…H „O&                         ‘a: „M" „N#9„M!é…M!ÿ„M"ì†P'1…O%                                         ‡Q& ˆR'0‡O"ì‡N"ÿ†N"°…O$…O#                                 ‡Q' ‡T,†N"Œ†N!ÿ†O"ÐˆS*‰T*                                         ŠU+ ŠU+‡P#Æ‡O"Í‡O#*‡O" ‰R(                                     ‡P# ‡P$‡O"É‡P$¡’d@Y1                                         Z1 `;‡P#E‡O#.ˆO" †P$                                         ŠU, †M ‡O#2‡P$7†M Ž\5         ð   À   €                         „   ä   ü   þ  þ  þ  þ  þ  þ  þ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿÎÿƒÿÿƒÿÿ‡ÿ‡ÿÿÏ(   0   `           $                                                      ÿÿÿ ÿÿÿ ÿÿÿÿÿÿýüüæâßÓËÆÉ¿ºÀµ®"¸¬¤&´§ž+²¤›/®Ÿ—3«œ“5©™8§—Ž9¦–Œ;¥•Œ<¥•Œ<¥•Œ<¦–Œ<¦—:¨˜9©™7«œ“5®Ÿ–3±£š0´¦ž,¸«£'½²«#Æ¼¶ÎÅÀÙÓÏðîìÿÿÿ
ÿÿÿÿÿÿÿÿÿ ÿÿÿ                 üûû ÿÿÿÙÒÎº­¥"¯¡—,›ˆ}Bj[vv]N•oUD©jO>¸fJ9ÃcF5Ì`D2Ó_A0Ø]?-Ü\>+à[=*ãY;)åY;(çX:'èX:'éX9&êW9&ëW9&ëW9&ëW9&êX9&êX:'éX:'èY;(çY;)åZ<*ã[=+à]?-Ý^A/Ù`C1ÕbE3ÏdH6ÇgL;¿kP?´oUE§u]M•~gY{‰tgH    ÿÿÿ ¤“ˆ ÌÂ¼“~rLv\L–fJ8Æ^@.Þ[<)çV6#ñM,þK)ÿJ(ÿJ(ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿJ'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿI'ÿJ(ÿJ(ÿK)ÿL+ÿT4 Öîëé     š‡z-mQ@ªU5!ôL*ÿJ(ÿJ(ÿJ(ÿJ(ÿK)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿL)ÿK(ÿN,ÙhK9 wi.`A.ËM*ÿL)ÿM)ÿM)ÿL)ÿL)ÿM*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿN*ÿM)ÿN,ËŸ‹bB/¯N+ÿN*ÿN*ÿN*ëN*¶N+ˆN+jQ-§O+ÿO+ÿO+ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿP,ÿO+ÿO+ÿN*ÿR.¹jL9]R/õO+ÿO+þO+¶P,:R/?	 M) W4_P,þP,ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿR-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿQ-ÿP,ÿP,ÿS/£\:$§P-ÿQ-ÿQ-ÆR.P- W3     T0 X6LR.ùQ-ÿQ-ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿS.ÿR-ÿQ-ÿQ-ÿU2‰X5ÓQ-ÿR.ýT0fP, X5         X4 [8!9S/ñS.ÿS.ÿT/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿU/ÿT.ÿS.ÿS.üW4nW3áS.ÿT/ð[8 7Y5             ^;# _<%(U0æT.ÿU/ÿV/ÿW0ÿW0ÿW0ÿV0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿV0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿV0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿW0ÿV/ÿU/ÿU/ÿT/öZ6TX2ÐU/ÿW1ðfC,8`=%             d@) dA)W1ÙV/ÿV0ÿW0ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿX1ÿW0ÿW0ÿV/ÿV0ì\8;Y3V0ÿW1þjH1v    Ã¶®         jH0 jG0Y3ÇW0ÿX1ÿX1ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿY2ÿX1ÿX1ÿW0ÿX1ß`;#&[4FX1ëW0ÿa<#ß‹p]B    ßÙÕ     qP9 uU?[4³X1ÿY2ÿZ2ÿZ2ÿZ2ÿZ2ÿ[3ÿZ3ÿZ3ÿ[3ÿZ2ÿZ2ÿZ2ÿZ2ÿZ3ÿ[3ÿZ3ÿZ3ÿ[3ÿZ2ÿZ2ÿZ2ÿZ2ÿZ2ÿ[3ÿZ3ÿ[3ÿ[3ÿZ2ÿ[2ÿZ2ÿZ2ÿZ2ÿY2ÿX1ÿZ3Ìd@'_8Y2‡Y2üY2ÿfB)ÜŠo]^ÕÌÇ	¶§œ bL ÿÿÿ ]6›Z2ÿ[3ÿ[3ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ\4ÿ[3ÿ[3ÿZ2ÿ[4µlJ2	[4 [4Z3’Z2÷Z2ÿa;"ôxXB™q‘wd D  _9ƒ[3ÿ\4ÿ\4ÿ]4ÿ^5ÿ^5ÿ]4ÿ]4ÿ^4ÿ^5ÿ^5ÿ^5ÿ]4ÿ^5ÿ^4ÿ]4ÿ]4ÿ^5ÿ^5ÿ^5ÿ^4ÿ^4ÿ^5ÿ]4ÿ]4ÿ^4ÿ^5ÿ^5ÿ^5ÿ]4ÿ^4ÿ]4ÿ\4ÿ\4ÿ[3ÿ]6›ñóô    \4 \5
[3_[3ÅZ2ñ]5ÎhD+ fB) X. b;j]4ÿ^5ÿ^5ÿ_5ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_5ÿ_5ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_5ÿ_5ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_6ÿ_5ÿ_6ÿ_6ÿ_5ÿ^5ÿ^5ÿ]4ÿ_8~P$         [5 [:" [4[43Z3#Q(S* _6 d=!Q_5ú_5ÿ_6ÿ`6ÿa7ÿ`6ÿa6ÿa6ÿa7ÿa6ÿ`6ÿa6ÿa6ÿa6ÿ`6ÿa6ÿa6ÿa7ÿ`6ÿ`6ÿa6ÿa6ÿa6ÿa6ÿa6ÿa7ÿa6ÿ`6ÿ`6ÿa6ÿa6ÿ`6ÿ_6ÿ_5ÿ^5þa:a\3                                     d<  f?#:`7ñ`6ÿa7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿb7ÿa7ÿ`6ÿ`6÷c< Fa8                                     iA% jC'&b8åb7ÿb7ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿd8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿd8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿc8ÿb7ÿb7ÿa8êg?$.f>"                                     pI- oI-d:Ôc8ÿd8ÿd9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿe9ÿd9ÿd8ÿc8ÿc9ØjC'jC'                                     vQ6 wQ6
f;¾d9ÿe9ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿf:ÿe9ÿd9ÿe:ÀpJ.pI.                                     €\C ”wbh=¥e:ÿg;ÿg;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿh;ÿg;ÿg:ÿe:ÿg<¤ˆmWxT:                                     •wa F  j? Šg;ÿh;ÿh;ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿh;ÿh:ÿh:ÿh:ÿh:ÿi;ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿi<ÿh;ÿh;ÿg;ÿi>„V%  ‘t_                                     ÿÿÿ d6 lA!nh<ÿi<ÿi<ÿk=ÿk=ÿk=ÿk=ÿk=ÿk=ÿk=ÿk=ÿk=ÿk=ÿk>ÿŠfKÿhÿ…_CÿnUÿš{dÿwM.ÿj<ÿk=ÿk=ÿk=ÿk=ÿk=ÿk=ÿk=ÿk=ÿk=ÿi<ÿi<ÿh<ÿk@ df9                                             j= oD#Rj=ûk=ÿk=ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿm?ÿ~U6ÿ†`Cÿ¯•‚ÿ›|dÿ„]@ÿvJ*ÿl=ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿl>ÿk=ÿk=ÿj=÷nB"Fk?                                             pC# rF&9l>ñl>ÿm>ÿn?ÿn?ÿn?ÿn?ÿn?ÿm>ÿn>ÿn?ÿn?ÿn?ÿn?ÿm=ÿl=ÿrD"ÿo@ÿl=ÿm>ÿn?ÿn?ÿn?ÿn?ÿn>ÿm=ÿn>ÿn?ÿn?ÿn?ÿm>ÿl>ÿk>épE%,oD$                                             uI( uI)#m?âm>ÿn?ÿo?ÿp@ÿp@ÿo?ÿsD!ÿT4ÿwI'ÿo?ÿp@ÿo@ÿp@ÿp@ÿp@ÿo@ÿo@ÿp@ÿp@ÿp@ÿo@ÿp@ÿo?ÿuG$ÿU5ÿtF#ÿo?ÿp@ÿo?ÿn?ÿm>ÿm?ÕtI)tI)                                             zP1 zO0oAÏo?ÿp@ÿp@ÿqAÿp@ÿyL*ÿÁ­ÿìåàÿÖÈ¾ÿ‰aCÿp?ÿqAÿqAÿqAÿqAÿqAÿqAÿqAÿqAÿqAÿqAÿp?ÿ‚W7ÿÎ¾²ÿìæáÿÊ¹«ÿ~S2ÿp@ÿp@ÿo@ÿn?ÿoAº|R3	{Q2                                             „[< …]?qC ¶p@ÿqAÿrAÿrAÿp?ÿŸ~eÿûúùÿÿÿÿÿÿÿÿÿÂ­žÿrAÿrAÿrAÿrAÿsBÿrAÿrAÿrAÿrAÿrBÿrBÿq?ÿ´š‡ÿÿÿÿÿÿÿÿÿÿþþÿ­{ÿp?ÿqAÿqAÿp@ÿqC ›êóý…`D                                             ‘kN ÿÿÿ tD!™qAÿsBÿsBÿtCÿr@ÿ£‚iÿüûûÿÿÿÿÿÿÿÿÿÆ±¢ÿtCÿtCÿtCÿtCÿtCÿtCÿtCÿtCÿtCÿtCÿtCÿs@ÿ¸ž‹ÿÿÿÿÿÿÿÿÿÿÿÿÿ±”ÿr@ÿsBÿrAÿqAÿsD!yk9 „\>                                             eH j7 uF#ysBÿtBÿuCÿvCÿuCÿ€R/ÿË¹ªÿòîêÿßÓËÿ‘iKÿuBÿvCÿvCÿvCÿvCÿvCÿvCÿvCÿvCÿvCÿvCÿuBÿŠ^>ÿØÊ¿ÿóîëÿÔÅ¹ÿ†Z9ÿtBÿuCÿtBÿsBûuF$VrB º«                                              ÝÐÈ rA xH%ZtCývCÿvCÿwDÿwDÿvCÿ|K'ÿ‹`@ÿR/ÿwCÿwDÿwDÿwDÿwDÿwDÿwDÿwDÿwDÿwDÿwDÿwDÿwDÿvCÿO,ÿŒa@ÿ~N*ÿvCÿwDÿvCÿuCÿtCðxI&8wG#                                                     xH$ zK'>vDówDÿwDÿxEÿyEÿxEÿxEÿwDÿxDÿxEÿxEÿxEÿxEÿxEÿxEÿxEÿxEÿxEÿxEÿxEÿxEÿyEÿxEÿxEÿwDÿxEÿxEÿxEÿwDÿwDÿvD Þ{M*{L)                                                     ~N) ~O+%xE äxEÿyEÿyFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿzFÿyFÿxEÿxEÿxF Ã€R0€R0                                                     ƒT1 ƒT0zG!ÎyFÿzFÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{Gÿ{FÿzFÿyFÿzH"¢—sZˆ\<                                                     ‹_= ŽcB{I"±zFÿ|Gÿ|Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ}Hÿ|Hÿ{GÿzFÿ{I#~r: gH                                                     •lL I   }J$|Hÿ}Hÿ~Hÿ~I ÿ~I ÿ~I ÿ}Hÿ}Hÿ}Hÿ}Hÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~Hÿ~I ÿ}Hÿ}Hÿ}Hÿ}Hÿ~I ÿ~I ÿ}Hÿ}Hÿ|Hü}K%Y{G                                                         »¡ wA M&m}H ÿ~I ÿI ÿ€J ÿ€J ÿI ÿI ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿ~I ÿI ÿI ÿI ÿI ÿ~I ÿ}I ð€N'7L%                                                             K" ‚O(K~I øI ÿ€J ÿK!ÿJ ÿ€J ÿ€I ÿI ÿ~I ý~I ÿ~I ÿI ÿI ÿI ÿI ÿI ÿI ÿI ÿ~I ÿ~I ÿ~I þI ýI ÿ€J ÿ€J ÿ€J ÿ€J ÿI ÿ~J!ÛƒQ*ƒQ*                                                             ƒP) „Q+,€J!é€J ÿK ÿ‚K!ÿ‚K!ÿK ÿ€J ÿ€J ÞJ!lI „I ªI ÃI ÑI ÛI ßI ÝI ÓI ÈI ´~I ˜~I!o€K"‡€J ùJ ÿK!ÿ‚K ÿK ÿ€J ÿ€K"¼ˆX3
ˆX2                                                             ‰W1 ‰W1‚L#Ð‚K!ÿƒL!ÿƒL!ÿƒL!ÿ‚K!ÿK!þK!{W  s? ‚M$J!€K"€J!~I J!€K"J!€L#†S+„O% „O&L"ÅK!ÿƒL!ÿƒL!ÿƒL!ÿK!ÿ‚M$—    dB                                                             a< ’fBƒN$¯ƒL!ÿ„M!ÿ…M!ÿ„M!ÿƒL!ÿ‚L"ÉƒM$ƒM$                                             ‹X0 €H ƒM$b‚L!úƒL!ÿ„M!ÿ„M!ÿƒL!ÿ„O&mF øþÿ                                                             ™oN t3  …P&†„M!ÿ…M!ÿ†N!ÿ…M!ÿ„M!ôƒM"WƒK †S*                                                 …P' …P'„M"À„M!ÿ…M!ÿ…M!ÿ„M"õ†Q(D„N$                                                                     „L  ‡R(Z…N"ü†N!ÿ†N!ÿ†N!ÿ…N"ž†P'…P&                                                     ŽZ2 „L  …O$U…M!õ†N!ÿ†N!ÿ…N"àˆT*"ˆS*                                                                     ‰S( ‰T*0‡O#ë‡O"ÿ‡O"ÿ‡N"Ð‡O$&†O# ¦xZ                                                         ˆQ' ˆR)
†O"¦‡N"ÿ‡N"ÿ‡O#½ŒY2ŒY1                                                                     Y0 Y1ˆP$Ç‡O"ÿ‡O"æ‡P$I…L ŠU,                                                                 ‡P# ˆP%0‡O"Û‡O"ÿˆQ%Šu.  ”fB                                                                     _9 m  ˆP$~‡O"Õ‡O#S‡S*‡Q%                                                                     ‰T* €>
 ‡P#T‡O#ÕˆQ&J‡N! ¡~b                                                                         ‡O# ‡O#‡P$ ŠS)‰R'                                                                             ‡Q& ‡Q&‡P#%‡Q%‡Q%                     ÿà     ø       à       À       €               €      €      €      €      €      €      €      À      €À      ÀÀ     ðÀ     ÿÀ     ÿÀ     ÿÀ     ÿÀ     ÿÀ     ÿà     ÿà     ÿà     ÿà     ÿà     ÿà     ÿà     ÿð     ÿð     ÿð     ÿð     ÿð     ÿð     ÿð     ÿø     ÿø     ÿø     ÿø     ÿø    ÿøÿð  ÿüÿð  ÿüÿø  ÿüÿø  ÿüÿü?  ÿþÿþ?  ÿþ?ÿþ?  ‰PNG

   IHDR         \r¨f  håIDATxÚí½w¼$Gu/þ­î™¹yoÚ¬ÕfÅ]­JH …@‘›gÃ³öï°ùÙÏïÙ~2Áü~˜`#L”Á ‘‘(gi%­´Òæ¼{óÌÐ¡Îûc¦gª««º«gæî]éÎÙÏìÌí®ð­SU§N:Ut¨CêP‡:Ô¡u¨CêP‡:Ô¡…@l¾¼˜è”7þe‡u1k™m!ß“Ín½èÜ‡¿øñkh¾±uèøÒioøæ3{3,ûÆ¬>›ùOf™w÷Ö[>uBµk¾¼XèÎ_Ý;›}-û:€ïrÂwŠŽ÷Åß<¸ýÏºîï—~òÏ¿>ß;tœèœkþ´2Ù‰Ù_ã„õ9ÿ‚Oìsdu6ßØd²çÀ‹…¶Ñ–Å³%ïsl®=ê"àTNô
ÓÛåž´ùU»Ž<ý‹jèP{iËu·¤LÙ?õ8þ€µ¨iÙDX°Éñm¿¸c¾1ŠÔÑ ÚD3…Êˆè,Ý›ê_YNôJÏ§¯V8~÷üw}ºk¾±vhnhËÛÿvIÙõÿÒõé£ †ä÷ŒáŠKÞ}ÓÚùÆ)RG ´þêsÿ>`YìÕD¨[U$ëŠO´ÌõøßLJtæµÕ?ß˜;Ô^:ó-5P®øèszÙÐ@Pûx>?¿âãŒùÆ*RG ´~±ub3.NÒí	èã„O8ýÙYoù‹ùÆÝ¡öÐ5ô/6³³¿í~€0@5pŽÞî¬õ²›þå?³ó9 Ž håKÎye×_ËÌÖTz9¬?(ñÜmêh/
z~ïø›+®÷q êúÂtÑyÍ]ÛÆçs@Ð"½ç_äœ®ŒU²œðGŸ}ôìwüC÷|—¡CÍÓY×ýÝæ²Ë?Á	‹3 âò5 oí|ã¨# Z¤£Ó•%3E÷ÄéÿjÍ —â8Þûßð_þ¹S/@ºè½Ÿt}þÇ>Çyâ\_KÕwýãÓ¥Kç{@†×"YŒÎâD‹ @ÛHýŽ€Ï§Oí>:ó–ù.G‡ÒÑüõw¬Â¬s£ëñë4Ô|Ý4°Vïœ¨ëèTå‚ß<¶+3ße : %Úsà˜5>]¾@7@µ‰$ŸhyÙãŸ:ëº¿»`¾ËÓ!súÍÖ½9>ÿ=râs¢pýQõü#Öç¶»—Îw€Ž h‰n»óñþé¢sçdc`Á ¶Ýè@Õâùü¬Šçêâ÷}fù|—©CÉtá»nZ:Srÿ›çóuA„:c,¤í1…J@D«·íÜ4ßå : %zø™ƒ°Ôðú©“N”„AÐ@<_=5Sþã+nü§Ž£Ð	Lã“GYÉñ¯õ9½F@¡ 2I8®¿âðdåôù.Ð -ÑŽC3gúœ¢ªœb¤W’ °\Ïÿà‘©Ùw<¿{wg“Ö	J¿õ‘¯Yr¼?àDÝU9ÎjõW«dÆh†"²26Ö?¿íÉy÷è€&‰ˆØT¡r–ëó!ª?©‡ =	B€¹>ÿã·~â–Ž=à¤wüK}Å²û1ŸÓF Ðò«ÿcêz®	UÛHÍY„ç~òË÷/›ï2u@“ôw_¼uÈb´.0ú„€ª_Ú#~U‹Ë ßçg–Jî'/|çMKæ»Œ
Ó“»&¯ö8HÛÙÛŽøÂƒC±ânÞwl¶# ^¨tçÖƒ'9.ß¬ÜUKå(2‚Áõý×NÎ–oüä?~³S?']ø®›N*VÜqN£rç‘ð,2ó“ëñ¡®,[;ßåê4°&i²PYVª¸« D†é¨_œC!Ë	½õ¾}W&áèÐÜÓ›?úE+_r¯s}ºL)Á ®Å5Ô~AÞKm„,?ëÇ·ß?¯þ ÐëÉ²S9Q€z‚ø¯:õSÏCžBáœV+îo¾îoWÏwy:šÌop\ÿÃD”	6 ¥À«ýz¯cÇ¦+~ï®]9Ì#u@ô™›Ù]ªx[té˜‘¿¾.,üÍwy>¿Òqü/z÷gçÝZ¼Pé]zs._t>JÄO­>:¿a=ª‰PrÜÓ<ß›×]¡ÐmÛ;Ù;U¨\TýËÀ	\ž3Öœ†Bj¡ZˆXœø‡ffg/žï2/TzrÇ¡—;žÿf’kQìüÉõXn+cý3…Ò¼Ö MMîbÇõW„û<‹ÎóêK>áy`5f–nH¡¥š†ïóå®çüÒ÷}ºã%xœéò?;X©xïõ9­ª>½®Ã3}_–!D´èÈdñÜù,cG 4AÇ&gÎ`½qëû-‰Dq¦ú#ôŽ^5•/ÿöÇÿþ[3#Ï”^Yñø5á§a{OãqcŸ	¿ãˆsêŸ)IDóæøÕ )‰ˆpx¢¼™ˆzbÃiž‹ó
ux½1eÊ®÷Þ¿û%ó]þ…B—~à³ƒeÇûqÞ§@a!~evî+çâ|å?|ùÖEóUÎŽ HO™ñ|e“Ï)ÛPï€ð¨õ¼PÖB{âÔ	Îim©ì~ô²|¶s”Øq ‰©â5œóª'in¯R÷I´„<„BïmË:éáíÇNž¯rv@JúÌ¿Þ6Êˆ¯P7¡C³ˆå¯ñ]o L²&KEI€p¢7MLÞ6ß<x±Ó+>ø¹uœó9Ç@T•O:õC
C€ëóÕ{æ×ÎWY; %=øÌá5 –‡+—¢¿MÔÀÈz²b^ßWqýo~Ûÿ:á.˜x±Páè>6™/½Ùóý‹Y É))E=‹$Õ©ãz£ÅR¥£¼PhÏÑâz×ã+sÀút@CqHi Š‰(42ÎéÂŠãþöËÞÓ9Kp.èªÿ÷»kŠe÷ýœSÕC/ÒÁÓtø„°µö’µÙºŸÜqß¼lï€”Tª¸k\ß¯¦[ÿÕ4mXŠ'yzÏLÅ»h¾yñb£|ê[lzÖ¹Áõü3êv‘÷ox`à=¨i/>±Mß¼ý¹y±ít@
ºÿáÇ{²­2³òš4@y€¼29±ÑÐ’ÙRå.¿ñ3CóÍ“í>td]¹â¾@&*Ã%am@QïrPI,”*›Œå‡æ£Ì‚nþÙ³ƒ®Gb1ã‡é—•TéùW™˜íÛDÏì=jž(¾ÇçÜð¨®ö]ñè8ÞRFþ¼8zu@
Ú}xzd¶âÖŽrRXëƒßò3$’"ãüÌëËIýžïø‚wÞtB]5õB¥w~ük›Ï{+…­K¹I;?µŠÛˆÏËáôùpê€Ä¹·´âx+k)´ÖÔ„ó~•¿€$0|ŸŸW(•ßýêßýÂ¼î({¡ÓöõL¹â¼É÷|aô7\ÅiFÈÉ ™™¢{î¿ýðÁãîéÙ †DDŒ|ä"(ú¬z9t@ŸnÄ¥	ÃÊ÷}{Mœ3ßüy!Ó®}ÇÖUï'ªzÔÔO\½%jumŽMåK§Jåã¾ë³# é‘§veJŽ·žiæîF@CZ7Så¾‚®çìþ|ï|óè…HDÄ¦ó¥÷úž¯Y‹™¦ßrýÆœ Á ß÷—íÜspøx—¿# é7OìÏNÜ³A$ñLòí½ü˜fãˆH*Û,Hª? º\€àD¯>ttêµóÍ£"]ôžÜä8î›À˜B³Óœá¨==›ôÁŠ’ÅØàþ£ÓÒ%Ð:u€!fgû
ÅÊÆê’®jŸ»ÀDÿp@ï+®)bW ¢ËŠTÝZ¼ØqÜŸ~Í_4ß|z!Ñ­÷l·òÅò[}N›)VM‡¹F§Ò"áÆ’b°9Œí?6{êñæAG Òá£ã+A~c:¯h­Xˆ›L'œè
ËÂÿù{tî0¤?ÿüÏp]ÿúú-JJf'éÚBôa$^×÷yÿÄLù¸»xŸ¾hÏ‘Â)  8ŒEp|ÄD"§Èñêé„VÂiÔ([.»¿÷•[~ó »Ú]~Z¼üÕ_ÈÎÎLv¹ïƒ(•+ƒÜ÷³ŒY Y"Ê<Ë92"‘…*ÓªXÌ,—1æ ðˆ¸kg²nW.[ ò‹8E‹ûÅõûo­ÜòÀ#í[l—è­ÿíëö3;ö]ãy~cÔ­M¿âBˆùÕQ¼ü%‚Íø²Ÿüâ×=WýÖËKsUn™:ÀŽLOãœúTçnµNÊ4FºˆŸ˜xJPýdØjZ¬ú¢ÚðB©DWHgpª†:u¦P|ï×n»ÿ¿¿ûuEÏªVÐÛÿüûØ±c¿519aYn1kÛl€uõ¯ð|~:÷ù
"¾’ˆº×6;p¤›zÁ°ˆ1„s(GÄ» ä 
¾µÖl"8 w‰Pà p|Ï­”|oŠˆf@T `æáÑ×—Ö¾öõ.ócÓclÛÞ—µüÝ{¬Rš-P¦Ëíïëã§žºžV¯^N7ý¶ù­ÛÓS“+Ë÷jOÇ¨Þ¹U2¨Z‡€	ß‘²Æµ	IÃ# –ÅV÷×;–Øc\©# ˆˆì3ßò?×ùœg…‡õN qL=@t\N	’ŸÕÓSPtá!b3h4ÚLÅõ¯ÿÛ¯þê6 ÊQßzýØÃ¶ôLýQ×©,²,=úèÖ€µ‰8?Ç³rK=B–UÜ^€†‰ÐPÝÇ€j½úŸ(_dìú1‘9ToÔíÓ§!l&€ˆÈ•8ç”'òK`Y—q/•JoÝºmÇc>±cýUŸƒÉÛvfjxh`êÊKÎtÿúw_­Äqh¼ð^ß÷O‰ÓÐTÎ¾ºñ^½Ÿ3|ƒéê™10"¸>Öï<<»ÇQ tæ‹ôÕïþbô¦oÜ÷•éYç¡_ø]?ÿ/³!Hó­£ê{éXiá<Áh„F'Êd2ÿ¼xxàÿ¹ïßþ ¸åº¿é«8þjÇqÎñ•¶mŸF`/ó} »úavMUá>¾dÊ™—yíãàŒ¡À˜õcx„ûü ˜5ÖÓÓõ|–wù“û&ŸüÕWýËÞ÷™SŒOÍõü…
Œf#hyi°êS›ž‘„™	ïCÉ!^ƒ³,Vê¿î¡¯ÿÑŽ×;€Ý½õÀRj¾Úš½ûWn0·¯Æˆ*ƒb#aRWgò|Ÿ4S R¼¾ï_{t|º¼îêOõç¥¥ Vá€x~`Ã!ã'm÷KP§«æ—^,ê¦þòFª†l`€@„"þ* ¯ªñ¨\.Wö”‰íá=«'6¼þ/MVz>?'"l4K°$è)×“XÁ·,´Dm
uUªÑž8ç]ðãº' # hßXi¹ëÓŠÈA}”%;…Ž„j5â°¡B'w‡hâµ¹)a	ÿ= ul]'×y,Æu^H-‚i¾uDM¼£nÎé4 §€ïsâÜ!"Xïl…wDÛ
j%Ž‹z|ñ‚»‘šeáÔ/ç—]xÛ•¶Le@šÎWUo¹~ŽÂÐÃ¢*! 6I`hOlç×;V}Ù¢p¯i	&Ëcm·Õ3Å§]DŒ¨Öî#r.\^’l-
¯ö¿Þ~“ýlÙßü«Ç7¯ÎŽ H "bü¥œs£¥•íÁ]±±'X?¡tâ–¤XR'mö°ºªÒ ä0-q½MeÑñD…;x¤8Ê]aßÑ_
Kq©Ç—šùbåÌñ©b˜hD)@}çGwõ ´ ÂëÃÑæÒ„•†º`.ØèHuÃlÝæŽò•ž’æóqd^vM†ðmª¢'L)æ»Á7C|—J‰ÊH«=V,ªm÷ºlo€})Ð4u4€úå#ú‹~FbFŽ¤#¤câ«›º	ÉºØ(ÒJ;Â&¼¦#s\þ&ØMHÝù«_)½9uFÚäˆQTŒu•ÿŒté4O@“…òÀlÙim“†¨Ú“²ÒµáÓ»73_ŽëhiÕûV¦º)FVÍÚ<‰7õÊñãp§Ä.ß ,“\9‰ú*C×DÞ;ÍUdjêLˆqwØqÜÅÕ¿(´$uÕ,*üâ33î©(©‘©FwyA§§m‡&Zˆ.ŒÊ i’A‡Ýôfm95N;¡÷q;>#öžðTI5pNÖT¡¸þØäŒÀKQ€¦¨£Ä{î*Vu˜‰	ecWìþ#
W~d„ª‡…¾†º7š%-ûÉñÓ~â(©ó›`Ocl7ÓpÑN#-†ëN§¹%ñ§ZïÜs—|ù»w—ëÂ: žìÉY÷th|Ûcçi1®½² b´‰Äí¥:-¤j×üS¥ªë:÷ñ™óš_cÄÓcÛ3_|J Û²†ŸÝ;¾êxµ# bèÑgÚ“yçt"ýT)Uå3!|l#:óþ´$ZèÓ.½Éé´º”7ek"¯TSŒ0ië»êÈ5zx¢´öx”¼cˆ¡=Žvå³Iœëç©òm¿áe¾€jÏHPÅo%éFxù}:
EðFŒìl”íTc”KvýjG#QO\FÃžš+
¾È˜¶†Äš4Ëªr<ñcÓëZ(1u4€zò™Ý# Þ¸¨IÒj	F¶™y¶žÂY’¦XbçâBÜ´Ìwt[u4|5Hcî_µŸÄäž¢Îd¾$Û"™—UÊ9œ- ßç¶ï¹+ŽÇ1á †všZÁ€þÈ&âçñÁsMÚZí€òÈÖXÐx&ËŒ‘MKqçÄÄÕ‘
›	Ÿ’pE¶R'hI8TáUÚDLõGø¥ÓF“~g3öšOýÓ˜Lâw+Ô 1´¬´Žƒgò„)¼\%{€ÅOÌ»zë¯~	‰	gÌ…b(:Ž¸Ù%é[7Ž(F¸5^…ù¥â™¾Ó#–ßq<MÂ¬ŠßxÄMD^¶ŒÙ®-ä-n0ª'.	`â|ís{£# æÆ&óë=Ï
Ú:@¢ú\4|’ÔOëòÚ Uƒkxâ;SÕ8©!›âS¼MÌ+ˆ¯Ã®{ßJ¹ÌË$/Ášñ6úN]ÿ@©\ÙxàÐÄb ;›kH€†ˆÈòÝòRÎ¹ØÓªß²´¦håš_ >nTz¹iËû\÷ä-~ÚÄ] Ñ¯ËGõ\çO‘ÄÖ;¿Såü=ªÀBßŽÇ‡9ØH«œN¢Ž ÐÐ—n¹c‘mYËÒÝ"!¤ÎeÞ[1ÎEg7ãC:ƒ]0ú7… i:°ÉÔ¢)ÿÿú`¢ãX&c¯škC`g
 ¡ûŸ<0ê©ÏÙ×l•íÑhaõ5)\#ùx÷Ö¨¯»žÒvì8,Í„×JõvU|! î˜éû“œ§{'ÕÏ´ý›,×óÏú»¯ü$‹êá©sB ¡cÓ¥aÏ§åÂ©á¸Æ—Üè’æÖò¨£3ø¥1vé¼uÆ6µŠ]\ÇO20FfÍaŽ£$ªÎ[5ˆXÍqUO‚Vz³¥3÷ì?šCG ›,,)•“‚=ZhISk&Æ¹fzÛ€¾“á¢q›5,6Ò:JC˜&3ã0«°ë} „IÏóþ(öp@*Qc !_ò6äË~/€‚1sSRÇ ¡ó—qÎ{Œ79…G jU¦”óÎÖ…‚´[Ló7Ë;:]‘;bû°kÕî„RfeVa—(ÉÿƒbNG¨J•nò½Å-1$:@Ani:k1HóÿFÃa¨©mÊ]|Â'_LG–øÕ”à[>ÎÛ,©Cš¦#3¯Ûð“&Oæ{žË¼VÄ!4,ü±í‚ ¦ÇÅëž.ºszahG (ès·<ÒUrHsQc¼j(®ì(+<’VšFwE¥YÉ0ÅÒL‡Ôá"ƒ0Ç»Št»-ã1Wû>©Çm2Õ¸¼obrzS
†¦¦Ž PÐ¡Ãã]ÅRy­ÑÑPuI/lÕ¯=Nl+º´µÏ9`‚É”Ú•Ži^¦ØÛ¦¼yžf©RhJE$N€ÔòáD¹ñéÒ)s¹Ø1*h*_ìÉÏ–×ƒjw¾DvÉXy(ò.ä=D¨±„t¦€æ&"mx©N’ó×tcšG\~ÍbWáPíÕ7Ån‚?Ïƒ°J+©ê§^e[;‚œˆàsZúõïßÑ‡92v€‚ˆ{K‰¨G¬‘´ÛFåí¡¡ù ¢aµG}òLó¢äg*ìq¦UÌ¦å×…i&ÿfy®ò	1ÖHŠ¶) Ûb£w=¾w)æH t¦ ÆgÊë ä‚JB˜&¤þ­cò¼ùB5þxaL›ÿ\æÙj:M¬hèW°ìÀÑé•sUìŽ ˆ’5=[Þ  «þD˜Jî5Âw°|¤0(™¨¤sÝÐ“F%Óéƒ*Í¹ÀžfTo6ÿãi	g 8Ë@p=oùÑ‰üÉs…¤3ˆ›˜©lä¼v-¶¤“ð¬ê0\¶©;×/æä¹ó+7¡=UgsTV.]ª0:[B+$N“ÔîwæyÖË_ÿ/¾Ø«	Š…Q:Õ×¡…óu=Þ;[öV$åÔ,u4 ‰ŽMÌäf³«¸a¨nœçp	ËJ&£f¬?A“¤KK>ipµ&-nñ;ŽO&¸’¬ïmÃN âuwè@†Éí¥þÑB"ä2lÅ=<škCÃÔ }óÖ{†,£#™£G{S¸RµŽ4ßˆ	{<(žtF®ãƒÝÔ'¢~éq…nViPZíÅZÿõŸo›“û;S ‰žÞ3¶„1-AmÈ‘Ÿé˜0!2ˆ«>æ+zà§ê[%¤­Â™„CÉ=Cìªðºxªp&Øuù™:	)&NQÄ÷Õß•Jå”}˜@›©# $:tlz©ÖöÓîŒ½æGU#LJžÇæ¦ÏZ¡¸dŠÝ4Ý´Ø›ÕRžò$ÚN"ZAÕŸd¶ä®ÌWSÀˆ:@¢ÃÇ¦Ö¹®·¬U×+ýáM¥&}ÏÍU>íî|íŠ“&]ÓôÛ¹"L1y®;k-‹Òul U±çóðM@ÛTëá„¹œê¸*“-¯rœ$2=
K}Ø%)¿U8ÒœwÒöß8ìqñeì¦Ç…µ²•Z°	_
„ãØfsXëçÂ%¸# :täXwÆÆ’†­F¬ÅI¸qh¡ÈGmÉZ¨¾åC/ã>A¸pöÑ÷ª´âNÖaWu&9MÕÁ I¸u|ˆÃ‡Ku¦a~L‰öîÞ@0¦ÚTO¼ÿ‘È.Ì–Îþ—[îl»ÆÞ™ô…ïÞ7À‰¬4\Km` (áü¤X›¶Á©AºxÍä¡+CÚ÷I>-v“cÎâ´Ó8&§,)1æ'«Û(ìª b3ùâicãù ×8Aê ð|Oév8i¤9S/ˆ£5‰ZZuHj\éNàÑwÄ$A¤èÍtM
U“ü›;‘9}ž­›f)ŒÇ[:S˜íPj*qu€@GÇ¦‡Êegµ¬Tû¦l…W]ü!‘ÎËLˆz¯j8Íx§évÿi„Lbú*ìqem·ÊûO…=)n¤×Ï`£½4 ¦|_ÁXï‘±©• ÆÍ ™QÇ PÅq†+Nõ¦èq]5ªÖF$n5\ˆ”ì}–ô^'xd:O:“ôÅôââšxÕÅ¥‡Ù»	ß›yÇ8xÐ^XDš©Æ°h|¦ÔöÓ: FDÛ¶—‘%>wj>¨ª÷Ú†„¹¨¨IàéÞ¥Í_…ùx`W…K›¿ŠçíÂÞL™Û‹Ê›ÔçÔ`ÂY×n¸)@Ïf*._Ô.¯‹;>¨d†Ú­Š†9GktèH‘öT}jÕ©ÄÜ÷»òS“ëÛ­£ÔèÎ‡¶eÊg- +<Oæ
‰¼¤õÜ,â²—m[ÈØ2¶Û¶`Õ‹éæ¥é‰×ølYŸmdl¶e…–›%"qt'h™5AAÕAipë³{ºÛYæŽP£C‡'rùÙÒF¤uƒäeÁê³ø¦Ðºtì‘E}Ø¸z1.9{N_¿‹‡±mŒO°çàîylžÞqG'òàD°:ÚG*â¼ÚéW,^„MVà¥çlÀê•£ì‡ëù›ÌcÛÎƒ¸÷ñØ±o“3EXÌ2TòÄÎl:2ålüÊØÖò/ÿÇ]£ ´«ìP£éülw±TÑ¼ ¾š+á’¬ÄÚ8µ¥Ã¾ž^zöºþêØ%çl@ow–VÚˆï{ó¥Ø¶ã¾ýÓ‡è§w?ÅŽM–+ùˆ··Ž]Í3³ôLó$!xëØ‰ËFpÕe›ém¯9Ÿ¾nrY;Â¿×]¾Å’ƒ{}ßøñƒtßã;Y±ì„n:J¢äö’ðš{«öíÛ¿Ð~š)G9Qw¸"ôKwqWJU: Ð" =0äDêÃ‡®}®¿úB6:¤ß	ÊCW.‹sÎXÓ×¯`mY‡Ï~ý—Ø¾û(,‹…²KêüDêÍ€ìŠÝqñ,‹/=_1MÚÞ1Éö’”o sÂë—ã£ïº¯ºdëÊé»ƒmYèëÆk.ÛŒó7­a_¿í~|é–ß`r¦K<ù7»
]Ò”¢Þ¦×_~d²ÔÖ‹Bìv&öB¦5ç^uîÁ#oçœ÷!èÀ…—Ú8(» B¤i„!A8¡ #ƒ½øÄ‡®Æ¯»}æS¾LÆÆ©k–áÌ+°uû~ÏK˜’dœË)ôL&uL…<Ta¤ñ„d1^V¿dìÐ`ÃÕðæäœpÖ)+ñ?>v^~þiÈfÌ»BoOÎ9ýdŒöáá§÷ ìx¨î£«k™;/C©`
¾û=Ù\öç‡¶Ýù¸1Øêk4•Ÿ] zX¬Pnx‹Ån2©»tÆtŽ`ŸAM'ªªý¼öe¸æÊó7"éÈ²,\xÖzüñû_ƒ•K…ìUëçáN*âJÂn4ìkâ‰K©Â;ÉVæyt9O…]~.¥S«¯UË†ðÇï¿
/Ù´¶¡)¥ î\o}õùxÿ5—¢§+[µi°›î%ˆÅ]ûÎØÖ
q©ºUê  DÄ¦¦òkŒï¬Æ2|f˜N­a\´e=]ÿÚ‘Ë¶6;»ü‚Ópí«Î§fw:ìéŒ\qåý=‡d3†ë^ó¼ìüSZJ§+—Å¯»l^CÄ“øÔ^XL<áï­ý«ÏÞÜ¶•€Ž ¨’5S(®ñ9¯éI0®±6×€‰C=xÇë.dKFZ.P.›Á›®<—¾n9|Ÿ·œÞ‹…|ŸcÓÆ•xã+ÎA&…Ú¯£e£‹ðŽ«/býÝKÁ&S%UøÆ»²ÇÏxjßLo»øÑ  nûÕ#ý†+0ìñ§_ìV`3kÅDÀºUÕ¥¾vÑ©k–á%›×† Ôçbù4»K2‰,‹áÂ³ÖaÃêö¯qé¹±vå(TÓC@u:”¦Ãx+ægË§ŒMúÚ…½#  üê¡#Œ±a±›'¦1Æï¡·,†KÎÙ€¾ž®y% aµ‹ú{êGqA³™IäE´Á6s`Iø TŠÍ‡Iž˜zìÊ~‡ó`.8kmÛx }½]¸øìõÂ)åóÚIDÏ§þ\6;Ü®4; Àþ£“K9aIðwØ3­0P¦ 6ØªMuØÆië–Ã¶Û[%×,EOw6ÔÁ"žfŠo"ñwÐyFCýA<â=©;G¥ÆíÏÏÂÂ ü‘±3¦Ná´D<}½]Øpr{O×Êflœ¶n9ª^ä:ìT?ÿC}‚TíHñ#u»°w €ñ‰é¥ž×ØU;5Óyø!BÃ=˜Çn”“­ÃŒ·>÷—id°¿¾Ä¸¢6v×6¶=„;
p*Š¨±h7Î½—/ÄˆÓ"CÔ’¢XHNGgï ÙŒ‘¡öŸ°½x¨¿v!¬ÜDjeÒ¶ñSÅ)”_øÎåKÎævÖq05]XêÖ¶@{ÓOèÅ„Q½«ç"\&R]ÏXí—Ç¶mÕ–ÆÃûÍÃßª˜q£–„=¤5È#º|tˆÉh(ªíágf6ý;ÆªN=íç³ ÔgÜâ¦‘Ú‰A™‰™Ò¦ûÇ, ~«¸¼@DŒ1ñy Þ¦µ4³&Ûª£Óøtû/€œž…ëùmØ™ Ç®ßêa›‰Žëarf¶íIOLËjÆŠüªj9œfgK'=ùÜþlb"´àÀcÛvuÛ¶µ@Ã)EPG‰Ô<\‘	§‰kÔA"`Ï1pÞÞ³ïðÊ7šwÂ¾õ4Ø•ñu]^qáU§Á^û0 å²ƒý‡Û{¿†ïsì98âIØUíEm°L8/ ÷¡­;n¯J¢/ ~|ïóÝ®ÏVÔ;td)0:ç…@ÅžË•_ONß8¹ÏqÏcÏ£â´õÌG<¸u'ò³%É›Yq|•®á`×vò`2+ç×J‡®óÉCŽÅ¦ò%<ôÔî¶ò¸\qqïc;¢ƒ…¶\á&°Ã„«C°í²6@YÚ½ÿh[^ lß¹¿¿Rq6†joõÄë±dcžVµ3šR¶í<„§žoÛF/<:…·î‚ãJSE• ÒÂjA#1ÕÒ¦	Ã4a×ÃOìÂá±é¶AÚúÜ~<³ëP
–DW3ÄgÑ³"!)|äØØØÚv`_ð 0“¨T*UŸÐzãâ’e¶Jª›€#›€êdÚè©ŸÌã[?ºŸËNËå"~v÷“ôø³{É¶ÔküÑïf°·kž¯šZ‘&\óØm‹á‘§wÑ/ï}º-Ri¶XÁ7o»ONÏÖÆ¤d“³µ#iZŠª/ÀàÑ©ÒIíÀ¿à 'ZT®8¹èhQé¥å˜8ç—°á‹!Ú¨ã7'ÂÏï}Êúñ¯Ÿhù„Ÿ'¶ïÃ×o½‡•*.k4L›ümŠ]Yz©li?2ïui©.ë4ÇÎC©ì²¯ýànÖª¶Å9áÖ;Ãí÷o³ÇÃ4Ã;Õ]	µHÏóy¦Pt–·¾FZ Ô½TãƒÊe3Àd®¨G1‹1ŒOð¹¯ÿ÷=¾£érí94ŽøÊOðÌ®ÃšÓZE“t»´SÞ¥[]gzÇAüÃWÒ´A Üõèvüïÿ%&gf>7WþÈI@	Ó²lÆ¾çÑg[Þ´   «Tª¬EÜ¹F÷{*æn)Iô~ÏüÙgnÁOîÚ
×3_ê% O<»ö™ÿÀ¯Ø–jéo.oškjnïá÷<…?ûÜàÉçÒiŽëáGw>ŽO}ö{Ø¹ï˜±ËoÄ±,n©4&M"BÆf«¿}ëÝ-»/èA®½áÆÌ÷~ñðõSùÙ‹x· ™e4¦Š^´Xª%A@o?`›Ìã­»05S¤%Ãld°?¶¡<:…ïýì!úû¯ü˜=ôä.Eša<ª;uaDŒºçqdzE˜Þ±áâg‘ójÚj5ïÜw>½ £e£‹X¯~Põ9Ç3;áKß½“>ÿÍÛÙ¾Cã°,+³N¬fˆFåF›’­~Ñ¸™l>ËÜöüÃ?=b–±š´'à±ñi{¦0»š ‹@`Ú„ R¨R'ÍtAuá¦®Ó‰qŽŒMãß¼wÜ¿œµmÙ€k–at¨¶marzûOà­;ñàÖ]xü™½(Uååœ*<º­
‡Ýäê1’ïý3Á¥ËÃäÁÀ˜ûÔóðß?ÿ}üàöGpá–õ¸`óz¬Z>ŒáE}p=Ólß}÷?±mÝ…gw¡óÅôcù´§ú—fôÍ¢í®\qOšœ*´¬,l0YÈå•UÉTcE/Õm ÚAï½7nöäsûñôŽƒøŸ?ŒÞž²™ê¡•®ç£Rq13[‚ãúÈØ“G:1½$<&M°ï“:f¼1U-L°§}ÎC¹â²»y>¹}w£+—EÖ¶Á‰àù>Š%ùbœsØµSVÔ~M†|³-ÅMÿk/]×éáÜë€VhÇ¾#ƒ`èiôg.n)ÆàTÕFg[©ƒ;ó³%ägK2Æ21»Óv’v`Oÿ^ml9žØmÛ‚ïsLÎë½[”ëŒ±TûbŠk‘@ÖfK«®ì¬é´ Øu`jc¬hÌù	[_93ÞÓ£ˆï‰¤Sua¢GôÖç¼-—Ü‹^ä‡ª¬ª¥¼´˜R„‹Å’W”ïÅ6ïèOTÒtÄ¸ÕöÁ¸çnøê7~˜Ð´ãÈ‚ Ç¦
«¨÷àÖ¶d&"·½Bê\Â©µ±Z†ªSêÒ”â‡Tƒ¸*œþ«zé\AxY÷P¥-¿W5z•1•¯·$OL™2v1€ø>æÜ=&‡U	I)à]¨$`;iY‹N¾èxç>øÌánt@s419sç<ùx%S!@áÎ%8¦ð[<C^lDâñ×DPjÅõ¶LÑ>j{¤ˆTØPo¢Xîü²Ê*v<’:Kð>®ËïC¼ß+œ~BBVÊŸÉ|—}8Ä4Dk»Èù¹´Ò“
»Ä°tk²FaffµS³n.EÊZÐ`j¦°Ú÷Õ'‹RWiˆÝèh#’ï ClD`Ê¶NÑU	Ù kI
Þñp²”„]ƒ%T&(ÁÜ‘Ä)šG$-éàRÅ‘¼9Iª7ÙÚ^ÇÏÔéEV‚$ìJ¾Âª ¡NbHˆ<Ïï·-,0–YMÖˆˆ²žë.â\8›¿ÝWTªvÄù#­ÄçÓÅ¡^êi¡m§L)F¢$ì"VöX[—¼öMßEÀôÑŒæÑŠõY2Ä­uMFXûùQ?…(†ï"µÒÖB«ÈÍÎ–V¦O¤AV |õ?~5±­Qck²nËk|¤F\ðh\ÒŒ¦ÒKƒ¥Ø•ñZÅƒ¸íæ‘IþqaM{"á_8ï1 «Xœ]—¢€Z°à‰göT;”b+7Ri)­¤×…O•EãïWo3öÔå!=æfq5[Îf±· Mš¶3â¼g|2z+K¢Öph|fØ÷ù²úƒÈE™M, éâÅ¥™“RTíf-`Rå£ÊO—.ÏˆwšnÊPãª
šò¨pÉ¼k•r^q<oñÈï8Ó
ýä€=U¨¬GÕ¥¿©ó¬ 86>3\qÜ%¢A<DšÆU=\S® mà­Ìït#u»F=Ð¿[ISx”ËÚèéÎ¡Xrªg†¶<$ä¥*wövñD—·H¦yÆà;>©¦J:P7A8ØÈçÿýçý ¦›)ö‚Š•‘Šã„ŒP†^ZÊÊæÈØfJjèmÂNDÈem¼ïÚËñÝÏ}ïxÃK‘ÉXÒêd‹Ó‹vÆV°46~j³ò$,,XŒ=þÔóM_¾  !—±FgÈ‹#·6’QoÙ^ H¯•¸’d\É¸UïtÏ,ËÂ®<¿sý+qÆú•øÝw\‰+/Ù\»ÜLÈáLpµ{«DšúÍ–…ðŒ-98žoút 9xèÙ£9&0-ùq†-Æ´s6Õ3]Xý¼¯‘N3q«ïÃ%”Ócõ+-ô¸ëá‰êKåÊ²ÖF§—_pþèýWcéÈ"p"œ¼|Ÿø7¢0[ÂÝl¯æË¢¸«}!¸ƒEòc6ç¹*|ßZá¹Fäy¨°ráµ¤\€çùKŽO7- ¤ð‹{Ÿèv}Z¯‘N½Ó5uÊ”êy;â&ÅSu]ø\.ƒ¾ž.pNà¼v“P-Î	–má•—lÆŸ}äœ¼bSù"~pû£˜)”°áä¥ø‹^‹W]º™Œûõ]ƒœsø>G.kcõÊÅX22¨ÌIåoVhw}Õ±èŒ¨‘ñÓR×õúgò¥¦ï:[À¡CÇºJ¥òÕ¾öèþÑuTH$a¶è,Ë¦BGIñ“,æ.%v"ôâcï}-V,ÂÎýÇðØ3{±{ÿQŒOÎ cÛ8yÅ(^uÙ¼ñçâä£˜)”ðÿû|í?ïÆî·^N7^{9;}ýJüÏ?¸·Ýù~õÀ6<2€aéè 6m<	glX‰Õ+ãÈø>ùßæSùð‘¦	ØS2MªÓ„4Ò®Ð$®RògãbÕDÚ)J ìŒ=LDc,õ=ðR ”òÓÝÅBaEãtß*U…ûâ‡‰j¹ fËJª8ºÆcºÄeÒ©ãp‰8Äð
ë:èéÎáÒóOÅ™Na*_B¡XF¥âÂ²úzº°dd –eáÀ‘I|þ¿À·n»³¥
þ÷Í?cGÆ¦ñ‘w\‰“WŒâƒo½oyÕ(–* cèÎe1´¨ÙŒ"Â#Oï®n½ñÅ	5»Ž˜ÆÞ·W/ª°iœË"­ÄøÁwÃeYuL6“9ù¦¯þ¬@Þ,ã-È#ÁÎ¾ìõ«·ï9ü;Díh  ÑÙåÊTìöJ3úè¨n¼K\­«N
Še;÷EW.G}½]léÈ z12ÔáÁ>ôõvãÈØ4~qïSø_ÿr+~|çcp<cp]Onß‡'¶ïCo7–/ÄÐ@/û{Ð×Ó…ÙRÏî:ŒÞþ0>óo?ÁÞƒcÌø¨­$ž›†kfI´©:ŠÏŸÐ~y°ªROÎš´¹{Ûc÷þ$µ X€ëyKY¤ìÂ-‘‘ÂCA*_ÆdêY6ŸK\lœsüú¡gðÄ³û°qÍ2¬Y9ŠKGÐÛCÅq16Y {³m;b:_„ÅÖÆ8î{ô9l}vN]»kV.ÆÈ`,Æ03[Â±É<öžÄžGáx¾æDãæñ‡KËû¦êH5¸„­þÏÕçŠŒVoÝá‰ü" Ó¢Xp€ˆØ›>ü7«H—+jæhÚ:¢˜xª°©öƒ¦?—Æb1†éü,{à‰xà‰ÈflØ–N®ç3"‚mYÚÎkYÅR?µ?¹³~Ú‘Ï«Æ@Ëb±ñç»üÉÏÛ•§ô$"dùËÎ’éB9y[»‚œ  Àò…Ò€²jF×Þ‰-f£yÏ4ÏâÜ¾téÆMO„÷¡¹f\þªï(öêdÕ0Ä9¼ÚŽJ›1@y2²ä5É2¶Ý°³¢GšiÏ)0áwR=(ÂÕÓO*¿ž/!ìÁ;åA!æ$Ÿ|,_) œSW.›i&ý…( ¬©Bq5Q|ÙMŽ– ñPRäðJ{ý«ÞÈƒÄYlG¨Ñ21Là ¢(LœA2”¿¬úÒ0{¢aC?IˆW+¯ntJ‘O2v.-ß%,²[rä!I<ù$®iÔDÍü]EªÓÕa”ö#ä­oæ|À' JÇžÉ—WpÎ##JxÔÆÕŸøªZ²ä}£+8ua"¯æˆáÅNt UIåÎ'å¼ Eä¦±«H1jy2©c‘Ô±Dì!!À¤ttØe(…½Kâ¹œ§$ˆã°+ë%ÚöâN?n„‰ ˆ,Ïó7ýû÷ïÈ Hu½ô‚ ?øå£}ê¯?¬½²;Lè¯Ä
Š³ˆ£‹ Åë;i>)…W>£¸%I]*uW%1ï˜iŠrä;ˆ¨0D4“Øò3($™^WFÏuXtØuå?7ÛÊ+…—<k¿
EgíÎã6: žžÜ¾gÄ²¬þPµSL#­ÑO	’In¸qï’D3çVâ$[ªç‹f:ÒÖ|Rò<Õ$éÈìIð>S…ÒšbÙÍ(§ÉwÁ¹ïÝh#ZTˆã¤sr%Î÷xzñQ¼¦Pÿ­TVäó¾©|q8m¾N ŒOÍ®àDƒÊÞÆµ÷ù¸tã…–Ï\äÙnì&éµ'O]fZ&cèžŸ\‘6×…' ¦Ë<Ï_T5æ¦QGU)Tmc‹x³|ËOÜ·*¾Hš¨ºvKßä»›G•~\‡HºÚË„/¦øÒ¼Ó…‹»Ê¬U~„ÈÁ·ÎÎ¡ø¶3†þéüì¤¤g(Ì–G]ß¯ž¥..?ÉþðD¦Â7qHº¯Ù8qþ	¦y5{_R>ipë.ûŒ[‹Ã‡ÉÄn£KÓä¶äöh	¶E|Ÿó¾c“k3—hAi D”µ,6D\¥êG+)ÍÝä½,:-@Eæ·N›ÀrXõûÆ’˜J°˜äaJix‘6oõþ¨ä4ô{¯âµ•¤rªó5˜vê­ÿuò}ž™*8«Œ#Ð‚ _þî¶e-¯þ%©ó"ÿ‹ïy„W-‘y´¢úw#l25âÄ}Ò|7–Ï(8¯¿é¼Ú]Ç³øÕ•(ïs«¯µ·‹ïºð¢¶)-J*¾É Ä˜5|ÏcÏ÷$hAMž}~oç¾þü´ âåmž±k¾"‰ëÎ&Ëgqa"ž6éé°$å/çc²l™D¢K°éRb\™)exS>©x&ûm˜bOÊGµÜœÂð,i¬rµ,6rËm¿P2`€¦<6µÈõøÊÄ
’-ÆÔNt³ëßÍbi·å¿Ù‘2–Vy””^3£üñi/ªÝÊ°üÀ¡±T§-(06UXTª8Ë€ o“¾§Ù
šZPÌ!¥Áqn9Nìó‰Y—gZžSZAa’-Áq½•ûL,O“Æ‚š”ËN¥âVÿ2T¹’ð0¹ •“dLQáÖ¥›æàì¦q“°×\1¼7Ånšwš¸q$èâø¡ã›ŠÇõ¿ã R=hÅñFgf+@ED„Œm/!¢ú)H­–€V…3±Î¦	'þ­2ö$Å•ßéÒŸ5{d•)vÓ¸³ãpËy˜œÓ—öy³<Oƒ=¯{×v"ÿÅO38çÌ²¬TÞ€G  ­f· –î¨:ežð<©ÿ­tbùùñÄßìÈ:Ÿ˜Û…=xÖvIFEÃ²ûÛž3MuÁ€ÝñP¦\©¬€Æ½G< ´Á\ÃiBšÑ°ÕQ¿­Œ†i±›àÔ¥÷¾ìíâù\`×gVZñc}Â«ë¾ÿÓ»—Œ`Ç¾£ÙbÅ]OÁ2F½¬2Y·œ'.Ûh2Š›wªæ³*JšGšPÜœÒ$Ï¤¥PÓKCMðÇu¤f°§á“I>&G7‹]p&ª/BÖöýg{4ÌÉí¥\.oØ½ÿH/ï
\0`:_ÊÎJ'…Oxiü6¤j_íéç"NZU»]À\`OŠ×,†¹À^£°¬P·IŠ´Ýh>…¢sòøTÑXX0S€R¹ÒS©T†MÔú`: exˆZ™‹RÂw+y™„mvù†/ìi1šæ“Twñù›Ù“Åˆ)Ò#x>°3Ù!Sn,Ÿ­Œ€6ŽhF½è.­0…Wäßˆ}×ùå4’N’­Äq½ìr\Jˆ“w\ù[ÅžÄ/U|Sìiø6ª]JÒª‡±6\ÒChm"ZiÈ„…3˜œšYÉºª\cj!{úl-ž’LcôôÙúµd‘¸í°v'áH‹=)L;1·{þvñ<­Öþ;ªHíEi[¨ÿqÊÓB„@D˜œÎŸBw©¤šÆž££¾X§­,mëÊŸîyöèÈ‡¡µ%ùæ±kRáoÏÓbOOR{‰_=ÈÌä‹§=öÔóF·~-€Må‹kÔmä\"“4A#½?W¶˜ž(®:4¬¿átãŒÐÕ¼Ló	ã
;Ó…q˜³¥/Î@ÞnõÅ­2ö°eÎ‹ú/Tµ/½ƒ^³ØÍyÀt3‚K˜)ØäLaí¡cSFƒû‚ ù|q‰ïóªT¬×x3*ÑäÐ¤†P¿‹P
on6ú´Rˆ‡ZˆišaÂS»XSüRí·Çžw=††·:ìj!™tIbù©!j9ä —>»ëp ')……" ²ÅRe”¤‘<|`Œ]Àt¨k ú{Œs¬¥YŒI‡Z´{3§µ{R&<×àÑlžFåOô.„Â2 ¶eõ=³óàø,ÀÍ·ÞÓoYèo}Nfª¦!T)&\'Ä	Ã&ØÓ”¯d<Y3õNlwÊ‰£9n	—¾bØXÑ71>n´)hAh mÛ7Ä˜5yñÚ‚pãKÂn;1žüÌtRiºI'içêlÃ8Ìr<Õ·»jdö8ü*ïC¶.ŽA\%OÒð\â	¥Änì*j£’-)Ü…U !…^499y2hA€#ö÷# 4$¹ãë4’½ ­ÇY+ž|&[kè†j<
µ2Ò›¤g‚]g‰‹ÛïIÓ¿“øû®þŸü0UY|ÎÇ§fÀ‚˜LfsÎëÛ$}ÝD©k²Ñ'©qmM³Å°íŒÛŽô^pØMÔ÷fó1KOlÊ®çÛ3Eg±I¼! ŽŒÏ.u\hl¾h/™TbÚ\—m ÝëxÚ4æ{³-I3ÚSºöÒ¸4´‘ŒmgFžÝ?è÷² ¦ ¥reØõ¼ˆ òÜyÓù¥ö NÕû$ÏÂ )þ6=ð2ŽâòW-‡Æ­5›b7ñ4-¿.HÆÄsSÞëò7á›ôžh§Ð/-Öü Ø¶µôK7 	w¾è5 "Êä²öpº}4
cOÈò7â¨,´óš4“ò2¡ #ÆåOßÍ`OŠ—†Üué˜ò»Yž·‚Ý4ù=5Ú[àó¯ŠIqØ	ŒøªýûŽ$!Ñ€_Ü·­Ë¶¬%I•©5„cstN–ÒÒtÀ	{;„ß|ànæ¸kÈ›ÑD
7àŠã¬8|l"ñx°ýàžûíó<oU]™ÔøÔÆ¹òÆ]Á]šrãJ28Æ-Å%QÜr“ü^ågœ”ž)v]ø¸òÄ-ñ%-O&ao†çÍäcÊï¸4%ÿ„Æy•áïFPýô„(W¼ÅÓ…òèE/ v8Ò[©8'iV˜¡›ëj]7Óî1}_ÍÀL˜˜nÍº™%2SìqqÓä#~·‚Ý”o"ÏuëôÍð¨…öï¤$/YËÏŸSŽYÉçW°á¥ïê«¸þ*böRŸ£UKœ›±øÁÞ=ÛnÿR¹åL$šœ.ôË•%Uþèæ‘Áwüˆ‘x¹d3ÇI‡3·‹ÒŸ¹ÌãDÅ>Wø›HÓÌ;Q´3èó³3ö2"²c\—Òœ
€ÏýëÃø‡ÿóÙ>×q.òÉºlÖ¡õìlB„ÞZI*>±mS3•V¾ä?\4ºø§Ïüô3n»08.ï«8^â\¨ÆA@ký6‰~<—¾ÚLì/ "£i¢ïTÖÝô¾•PÑ…™pÒy×Ù°²«ÿúŸnz-ç¸°6°K±úÞÅ‰Ð9tM~rüÖ\ü®Ïî¹ïfãûÍâ(“Í!«ç¥ÈÈ¤åŸ9ñ¯Á0ß†›6®IÚs™ÿ\ãšËü7®ÆòžÉ²%bAÅõN}~ÿX7b@[WÎ¼âÖI/¹á4neÿ«Ot›Ïñ\NÀI&ya	÷éS ûà+¯ûÃ–±ó9Eó–YêWHßaj²­íZK{Ç¼*®îèh“F¨c‚%)ÿ4eVúfÌv•¡×üêñäújV¸-[Ê¶†B±¼z|b&öŽ€¶i k/yïàT¡òNxç‚`73`r¢^Ï§”©ûÛ Ž´‚éðØ´]*–VdE-ù1j¾áJA#-1LtÅ@Ü··¢¯66WáÅøµÐ ÷£·	{07ß×¤2^‘Ðž)TÎ¤3 DìáCCÌÊÝxä+×qÏåò2ˆ'qEë/‰ç)—ÊÇç•Š3Â‰ÅžÜ² 8é%7ät‘ãzŸà„—¡7ìà¤Xf‘¹+1”ÀÖ¼lÑ=-
€]{öÛ•Jy9 K>4#š-iðˆïBÀ… 
&æSM2Ü9Ô‡nD=ÉâÔ£Ž,ÔÄª!Âƒ‡ØèÃqÅFßHÃ{ü¢ )ž	)„ðq)my¹,Œ½Q·úÎ¤Æ.
Ž(f•`¨òH„¢0óÅ´½H™/GÚ5³²°²# öêâ´¤fozÃŸ,eÿ	çì[>§«ˆ¨W»¶ª*1“kµ"7¬]ùÄ{¯¹bªl pèØŒ=5S\MDÌHE•1+U«†›kõµ˜®Úó«ÚˆI9²è‰êqâ±‡;wôy¸ãÊ?Š+<
ØÍ\Ô¸Ç¬ËaE¾†qÉåJÆ¼«âŽ¦Óö ¿°Ž(0“°§k/,¸F~)ý\©T\Wâ¦5€“/¼á´É#>É}~=A0²©Örµü¤yíïM§ž<õ‘w½öÖW]¶e¶YlÍ–*v¡XY®v›TÈ>£e¸4)þ>›fòOÂe2Ç•ÃÄ-›6CqéÅ©¿æØçæ½Ž/æØSñ&²Ý¤O)¦:@W©8»1Î™Z |ôÿ?¸ã™Ë*Žÿ—œü—Ÿ>*«+1ªª8·ÌØÎÞtê¾ßßë¿ýš—w61˜Ðþ#“>÷{õopº¡î,ê¦&|Ízû™¦oš†©Ç[«˜ËCÉáâ¼òâOé¬~7ƒÝ(OJNC•,nQó`BûßÇÛ8§ÜÄäÌÚ¸€©ÀÚ‹ß•ýÞíÏ¾™ûüo8a}èeÜ©+šªæ¢þnÿ·^ºeçï¾÷ßÙrÆú[ ìŒs^0¥c3‹-Æº”¹BÆš¨z×W}¯°_ÈkÒåßºg­v8U—«<àt¸äï¸SŠL1'	œ8&í-©¾ä0*žëÒ6ÁÞl{	ÅSïh¬áˆ[ºæDlºP:	ÕAÚSee, .¼öOÙÁý{ÞæûÞMœÓ²8‘O.€ƒÍV¯Z2ó®7]þôÛßxÅ-Ë–Œüˆ;Ó¯[¦¡‰ÉéÅèŽTrSõ±l)ÿÖ[’õ–@q6UšºFdB&aç{šôÒ¦‘r©Ô(®Ñðxao´Cñ[oGQ0¾O‹¾úýßô È«r1 ¿uãMìÙ'}»ïùŸáD‹ ã
¦WQ8ú{ºù¥çzàÃï~ýÏ/<÷ôŸæ²Ù{ ¶,¦”TÍÐød~%zãÕzy>žï©Îžo‰Zi¸óMíÆÞá….ñ{C:\–mõ?òÄsÃhV ü·s|ù“ï‹çûŸnt~AÇ Tø ¬^>R¼î—?öö×¿ü§kN^þS ÏQÞ²¬–Õ~‘¦§gVrN½¼&ËðsèØ¡…ÉÐ¶ %Á®,;vlš¥ÀDð¥¿÷*ßçŸn¨ý*°	ÐÚ²D.—Å[NûÐ¯ùÙk®¸ð‡`ì>":Ès,«ýGLNMú¾/xBI94ç‹g¶ùtœáUŽ/ò}€'‚€11ˆš”o¾±ë0‘¢ç»šŸÆû› |tl|â$ ª^Ç
€µ—¼ûÌrÅûDX¥çSØ0öšj¨Ñ‹‡Ü7½êÂíïyÛk~|úÆÕÿ	`ë\Œú,do|ùC¾Ïõ9µ§ZoòÐYlŠ/óHß0åŽ©z®Š§Â–,ŒÂüÒaóOÆ~ÎSÝiÃ+E¦Â(ìt%§ÉB¸ƒpéòW	o“2ÇÕI´^;¿ø-²·F®çMVè’Ð
€Moøø’‰C{ÿ„ˆŸG``	 ’Ã^SaÝÉKKï~Ë+ï~ÿÛ¯únoO÷¯‰°‹1”çbÔè§öõf2™Ere7+ñÕB6ºž¯7ìê\{ÃFÈ€waAítµØ¡ç¢—]¼7œÚî¡¯Â.v˜¨—œè'wHÂÄ•0Ãž´ø¢X	Ë¨ûo˜çr§7©/-šØ+5±é²P´ m×ós…beXS) nøýÿeÝýð¶÷ç×Õ‹Dj©Å&HJ"ÚrúÚñß{ßëuÕ+.º¹+—½—sü™þy›ŒŽ-oš~óÀÖÛbC!Ž›ì¹§BÐuÄF\Z¿;@Ø²+g)^ï=(/‰7Ò–q…IÕ‰¹bÔ±ËùG/U¹üêØöî‹.û‹¸TØÃUG‘®Æ.ã’½ùÂ˜£ž€ñØ£|H×^¨#ÑAª+÷ “±‡‰ÈfŒùrL¥ ¸çñçUÊ•Qx]µ~*hwüìMö}êc7|ï²6}Àc flÛ:.¦ß={."¢á:_êØ£œr 	ƒð›ÆwÔ=µÁ	’2P¯è £[Õ˜š¹†+z¹e½XõUÕjGÃW"êóîàÉƒƒšGêéA,®PõÉatå&)|‚+ó—ZKö8~´¡\$2Mfbøaôw }ÕÂÛ¶½ìÓ_½­Š•€ˆ~õ‡þ¶›;¥ÑFGŸ"€Î>sý¾?ùÝë¾sÙ›nð €i&zÞÌ1>|xÐsÝ‘*a˜	Éå¥Ð§Z‰\‘nOöû†:¬Ìg…_z*ì±>üµ´ë'ÎFqE}í)7‘gJì&ñ‹«ÎR…	ç›T~5Ï¡À$cç.9/Ÿ¤i/yžDL¤,ÔÐ |Ï[ñÄÖmýª"à™í;_á8îkDÙÀ	gl<ùÐŸþþõßxå¥gÀV Åæ÷F7G“Sù×ónG‰’aƒ­DÄHë¸4H­yÿ‰Z)¬)+™Øe5Ø›%Õà¢Ã&K›y^Çn·\7©p«Ê!Ú)¢hãžÏ×™,ªÂ„¦ /ÿÀM};ž|ô}D´8ö$\a‚ˆ°vÕ’â‡n¸êû/¿è¬o x–1–xGù\ÐäÌlÅqEp‡8$›’—••ç«:7ß´^yiâê\^#œŸž©Û­)voº8ìª4â°Èn¾sÁsWlR|…À½Q£'7êLgÝbŒ¡\q–LM”{bBàðÎ§/ã¾w¹êLr&1Nfp ×}ó«/úÉuo¸üf Ïíqém†³‡|ŸÛòóêÐÜ1ÎØ³†jJíp9mÅ%XÎ¿ÝîÅíL#	û\ä=<osÔÀH
ù§\„xŽãöûžß§Ê£>øë/ÞÖe3ë·|ÏW:ü$í§·mçlÚðä®¿ú_2¶ý*Ç[í°fr]¹%"ö€ULúˆ|“™Ÿ¾5Ó(¦
ÇÍ]¶Ù|Ž›Y'&ï6c?AxÎXô£:†,dÞ¤Ðÿ¬l.»D•G]¸õ'·/-•ËW›Ì…TB`éÈ@þÚ«.ùÎò¥#(ZÖüyXýò¾grDXªÄ,k/±Þz ‹a‰Þ.>OsJZsf	ï¢–u]Þ†S'ãCVãð¤ÅnÊ³´Ø“òLöÐc‰†Ó­àˆáH1ÕV,¤:"¼. <Ÿm.•õh‚côÒ6ÝûÚW^ü ãÇÓÚ¯¢G·nË9Ž£ô~Š¬ñlŒ•úé¬²
iÞ…—§šZ¡ÐKGšo9L;°SŠçªÞv,&<×­Ø$•·™´ãq5|ôékv¯²J¹´öß¾óÒÚ§ ÿòÍÛ³ùé7‚x—Úú,½ÈÖñê”`x°oì¬Ó×~cpQßN gƒãMGé*—K+t­Ð—	UÑ¬zÎ’bÃèœfÐÓ €º.“1§Án&-v}ºº¼LóŒöfõ"’‰VÛÜ´ÄˆŸš¿ä\ïëa¥Š»~ÏÁ±ˆßO }fÿâé|ñBR»VEQHžVkW-{úÊKÏy@y¾æý"OÏvK•Ðt¬Ð<*îpˆ(ìÚ­^5‰œQÏ>NVP›p+Ï©HÀÞ§ÁžT”6c¤„=†çŠu®9ÁÅÔ°òét¡£Â. †  3³å“MÔ`÷î½ç ´"Î*a	„¾nZ¿jñC§mX½s¾Uÿ€fKNO¹ìŒDY¦P‘’¬ûqÇf™.7%…Uh ®O/–­Lq+—©jyëfˆ]L8Q#n‘ç*¥Â®àyàQ—8Ë™›ö"°£HMŠTéVœAtCòÌ ÀØøô)œÓ°Ajµ¯ÆÆƒl&ståò%÷hËM>í L&»ˆˆlÕ»´m9²"žÙnjÇòY\Z$½kWÒ¦ÓŠ“L»ù®qyo;ö9i/àŒ!;Sò†ƒX 06™_íy~w#–‰ñ‚jÂ‘ŽuÆú§u¬ž""æú|9‹ìshuÉ¨Cz!Q¸3°îüôLd‰ßºÛ¡^_Ìyúþk1†žÞî/¿xË¡aî”uv¶tÉ@Ýê£$Knº«®ÚEÇ+Ïù([»pµ{»Òk7.£~Uß3È1tçùÈ\ëkßúáÛ¶O2-œèÄ£ÁC===óæñ§âY¹\^Æ¢S€¸ÝTæU]…Ú-ØLïÚÃ§½sÏ4ÿ¸-°Íb—Ã7ƒÝä®¿v×‹Žç:ìí¿PMF©B–Âš­%ê©Û3=SX#GÍÌLM/¶VH•SŽgm²«m×y·Jœ`ŠåÅœ“¾šK5çe‹Od¯w`„IÚ+nVáb<Õ=vªt›¹]VLO—¾î½vbOÃ›V±'¥¥Â¦{gÊó8!Õ¶öÂ$ã©ØFUË†12‚sž›š)F|c2°ìnBpv~Ìj¸P°Æº5Ä=«gø·‹ò…¢55_EÄMt§šASv>áu«lÒ±àI›;Q¨Ñ©ºÞ”L0µ»îˆÁ4]™q¼o»¬E´‹çl.Ú‰íáÕ&¾O.¯ïŠ¥Êˆ|0H¦ìx9Ÿó ŸC¦’âR"æ8N¦âÌË†?%=¿÷p¦T,È#·ŠájÍ@d65æ´ê 	)}»%Ü­2×ØEj»Ì!Ð
µ“çÍ”³IÐµo Éc²1}¨¾·-«÷Û?{$t0HÆ)s¾çå¢>*ç‚+?[Z|øØÔ	cÜúì¾€ra3Pïâ+ÅtîÞŽ¹ú|¸:öù0ˆ¦Ãc¿’ŒÕtÅ÷€e[C÷>øÄ `¹>Ïñºp: œS3³+›<aÀÎ}G†-ÛêºV6Žšš«ÊV_qæaæ–äÓ:.ãUÛ±§XÂ6Ú»0·Ø£í¥y~6:Õ9’õô‰îÛ·T|šÉf3`,8š[ŽÈ”éÔfxž7øÓ»žè01§Ü2¤£Ç&F¹HÔptSƒÐs!Áêÿ!âé¦1*6`I,˜ßALSErÃŽ2p\aqáIQíIØƒ]N“ÅÄk;°K|ã9S…i{\{Ñà®ð²í Î ¨rôäœFf
å° X²x´˜ÍîžÐØ/²:jR¯²-6úÄ“Û7àD GÇQ¿\ñØfÕÜR¥ŽÅØÅk_`î<õŸblÞHMËS1ºtÞx i#W$¦957”65°ÅbÒ7ÀŠ.b7<“Ò‹‹W#Ìs±+x`ÄóàCØ-º	ì2sšm/
{VÜô¡1ÐY â¨î) ¸ž?:>5:&/³r´ßïëÊðIâ¨Ÿ’¤Ðkæ¾ï/y~÷¾3P=øsÞijjj±ïó>&ùAuIüFÕ"ýsJŠ'í­hFÃ#1¢jš¡¢8mF‡%aûmjìºx&ù×xñÏˆ‹›ƒ	t¾“êQÆ®IÔG#ŸäeyÑ8œàãºNO±P“—Y¶d¸Ø•Ë«ìNR©˜´6ÉàºÞ¢‰©ÂÕaóAS3…!ß÷º£…Ð5lÕRÅÄ1¥vÎ#›I«iIÓfìiÒi%ÿvÏ×Óbi•g&é›.{ŠXáˆsØ– Ö¦S×ãDcýº}¢öCòNâÄÎ»àÚOyÎ5•K¥Å¾çgk\ŠaÐèä²ì„±iv¨C¡›Šôdf@´3™¥÷=s´~_¦õò‹·cym¢âTZƒÁ)_2qdï™óÍ("Ê³ûëjH03f–,9_x‚àDõï7ÅýBÄü0SÌG°ÉQb e?ýÙõ, ÅžÞÞv&C±™†6ÑD0P)—ÞpúåïËaéÇ÷=×“Éd†ÃÛYEÜš¹°’â]cÓ{Uó§Ú¥i<×]u‚«©x…•)öÆ%!q—Äá¦˜tÃ¸Õ+4ñ“øžöb•f±'¥—Ždž'Í®…Á+²á­‘·çûK: Î)ë×lïîÊå)ÔqÒ‘ïy×ºžVêˆm¤çŸßÝÍ€ÈøüË*òG\c–+RnXÑ›{Å¸@”½Ñ´Å4ƒÕŠê‰°¬~M—üQ=—×ÆEìª›Š¢÷†ÃˆØC®àìuiñF^·úyt]?Œ]îÌìª25BPÖg<Ï›ÇžÔ^Â”®½€¢uÔ`Ô'Áñøê±©Ùú ÿòOßßËÌ6æù¡\ã©†Ô÷ùòÙbùw.½á/»Í"¶ŸvîÞßçs>*G£T6Jz®ktê
l4$^ûÐà ílÕì‹T°Ø Åtd ü‰vô$ìbúü­co¤C¡°Ñò´Š]õAÝïC}´v3<GÂó¹m/u4$·ÅÊçµÐ†CãQ5R©T^:5¯÷Ñ zÙE[že–}˜I»Ó÷ý·ì|æÉ_øf+é4KGp]wIìe $ÿžjšö%+U/+ÅšôEó	òË'iÊQM3ìÕÛ‰=V—*mù}µìÁ¹Ía‡éò”Iiçö¢ÔêN€¢½¨ªË)—ûÉ­44 "ÐÈàÀô†Õ+vX–tU`Ê© q>Â½ÊÇN~ÉuRElMÍÌö9Ž;>Æ+ýtFQ24FqÜŽ´uù´»z4šìíã‹ØdÛC;±ë¦E­óB½”4x)É²³Ùú4Ù²,†þžÙ—l9åqÛ¶¼ˆ¡/ªg†“uB ÄébÇqÿêä‹Þ=š¥ÍT,úJe$2™3+­ÎëKž£ÍU˜4¤=âòTÅI‰}Î¥	ß›Å6òÜ„qµoAŠYõ»?ƒ!¿rÎæ/[<4V‡ éðÕé…ôN˜ûp8§7»•òŸŸtÁ;«p}êõ<?BLÓ
•A/$ƒçâ{Þ¨ÃúÚ­d 
›ìÃ8U&]Ñ±(©ñ ŠrÝÕ°E‰LŸšÄ$c×
	ŸÎª-c¯ãbáÌSá&É©Oƒ5»®½ÈugØ^ÒÊ"Õ ]ý¶+¥ÒŠ€I ðÏ;ëÔëV¯|DQ[¹`àˆ¸Ìeg9ßsoô]÷/V_ôž‘”Ð›""B.—X²À6¥h:TÝ:SgŽÐÀ5iD*BŽ+Vš¢òêmƒIqc45niÔ}ìIÝ¸Hn¤&ØU~Éáä2#»ªüºð”†çÐóœåWˆ¡Û^$ü¦í%ŽLÚwC«³Ë•Êú‡¶>g5À£Õ'-=´vÕ²‡ûúz<ª	ñSMCµt¢hd ˆóßu>T)åÿù¤ó¯ßxá[ÿ`®½j2Ì²—7 hÎó‹c–ªbCRŠ
^†Fm@uÄ†^-EO(žX>yÔãêFŒD$JtšŠh‘Â#Ô*ëØ#-ÊÚ £‘ë¼£dž|…	Sà¦ðë:ÏìòÈ/§+ï"Œ`Ÿ‹ö¢!“;êK7°Jewù‘±)nP¼ä%›ï[::¸+ÒÑë<b‘Ö’Ëˆx–ûümN¥tó¾Þvê•ÿ¥sD÷<¾Û®8Î(ªû­¢Ó”€1ât@7z„ Ôãæi‘÷†ñ‚|#˜Å3ïMeGP•	Ø‘œ¾v*"
3–gvÓò%ñE¨¯$á*wô´|iw{ÑRQDìŸâw¾PXR*–"Àëë_þÔù[N»«»+ç©2Õi âßÁ}{L0§‹<×ùÂôÑƒŸYuÁ;ÎYwÙû³h3íØ¹+ã¹îÒP,TØ+”ŒTÞu"Á(pÂ’Ig<I$N ìš‹äA€j
<sÊ•á©™ê5auPS—ÇÞýÕw¬_³bRÌ î¦©ÀYýUH Õ%BÎßW)•~\ÊÏüíŠsÞvÑºËÞ¿m¢±±‰Œã8‹ªJÂÜ¡¨”Æˆøe÷žêÂ  ”.<÷ôû^ûÊoïíéæÂˆ/}»Š¨	eˆóåžëþWÏs8;=õOËÏ¾æCk.y×)›_û‡vRRq49SÌÎ–œ•"ž`ôoLÃHûÑ1KÁy¥º•ú©I2î¥¥8MH…«•üTÔ¶`ŽK·•ü“ê«™úkå¨¡Bßé#ý4x.„±l«ëÈDaˆ\Ÿ`ß5W_þÍÇžÚyÞíw=rJ$‡f._Tmðà|	ï&ÎÞVÌ¶—ù+Ï»îç ~ÃÈ?`çzf{zJ}}½îÃÿù™Ä,œJ)S.‡Tx]³f™XÆ¸%D•Ô¤ƒ›„/èLËoSÜrãJƒÝ$Óö¢‹§Â˜f™7M{•ý†MÊ2ÇíE
tÒUÔç¹¬{fzz c®ëWNß¸úÁ·¿ñŠïîÜsð#»ö4=+OÛÁbâQ7ˆ¶øÀŸW®QÉ¶XÑ§ò£N¹ôèäÑñ½K7_3Áå3]=cÙ\fDE€<;“szúó¯¸Ê›Éï\ä¸žr5ò2Ã.JÛ´£F™6Ö´šB3Xæ
{«éÍöfÒ3Ð­`i#Ï•Û©uqº…ÂÕ ÍÚDDGßòºËoyjûž3¿üÛ^—/3OyBˆt (çsÂqV ¸:Ã+¹•Ò·‚CD4À¡431QþÑÍÿìõtwña-£·É¦g^Lµ*h>Ó|Ò`i7vÕˆ*_MÞ.ìÆwìµ€Ý4jµ½ÄhºDÔ],Õ  |ßsm;óÜßùºo:rìôïýè®Ó\ÏÒ¶C6[X¡Ó‡ïÁöMŠ"êáž¿ Ás&¶X,ê³‹“¢²v“Öw@§ÅUš®±¤É?)\œÖ&O/Tß:ÞÅa7å[vž8ì&üŽÃ­ã]šöb:Í‰ã™A{!Õó´íÕ¾T(VQ#   “É@aÅÒÑ;?pýÕ_<ÿìS÷V÷	5–s‚Ž*%4Ô"QÕöÎF<&ƒå¥¸
Q[Hú;1mÅ\+b0UWD¢±G«U%¸ÄçIUµrÓvS2Á®àE\}(Ô¦y›ò\Ó^Lð)ó6äg¨…'´—øº¨¦äznnrrz Ð€q Ç^rÎ·þþÞrËY§¯›’‹ó	Hê”Õ2P=™ñòºé‡Ùyi1 ´¯(ÕG¦ˆ/‚‚´¨E>¤)NÚrJÏ%ÿÃæ°7IíÀÞ&žk:¦©ø‹m?	ï…ZwÅÃQ¸Ï­r©¤\h0¡Úã<"ÚýšW\ôm×ó‡ÿú³_{Ë³;öKk÷3ÌÅãˆÃš\ôy0ú7Â…<jhlá#Ãå­¦$}J²¤µŽ4s;°.¤,XEkqR>,&~\ùÓÞ¬ò'Iº,4	{UIÇ¥KWU¦8j³²M$ö—ˆ¶ÞMDz PÀ¯ÕK¿ìû~öï¿ðÍ×m{nïP#Aqm2È¬ÚÃ#{ÐY™âoÕ
‚^›HøVW'fu¤!¥UwÒM›iøvàNÂØTaué¾‰j—˜4Ž.½…eÛ=t%
€ZÇ,xôMW½ì+ÝÝÝþßþßßøØSÏqÎ¥éGÒüC#W.KŒ«{§Ÿ²Í·KoU@UG™:ªyÆ”»¬Á½°°7è…„»í¥ÑÇÂ}£Ñç,ËîýÚO @] Üÿš+.ðúz»œÏ|ñ»¯¿û­Ë*ŽÃ¢MÌ5I-ž©®ºJSX³D-EdnRƒO;åcÚpÑU‘FújµSÔŒTÆe™oâónPT;ÒÕOCý•Ã¨p1!Ž{Ø%kkº:RcWã
ç¯®]½ÊÓÇ¸ ùh/¿[m/ª6 “e¡gïžÝÝF  ED³ ºìÂ-å¥£CÓ_üúmo¾åÖ;ÖNçgm ŠpX£kLFš÷b8+ô^œ%Ÿçî<²B,žNj4Ò¨F´•íŒñjo”¢|m­)&Ë»Ì÷ ­F£Œ»ñ8£gŠX]ÞÆ²q<vÉÎ‰áÆ0?í%iå3©½0VÝ
>t¸ÏX Ô
G5!ðø©V?þÑw>eÝIWÿÛw~záö{û<ß‡».×xu#†É|L—CwGš*n”ñÑ#‚šXhôóŠ_ErG5Ÿƒ2éwØ†¢73E’Þ“»(<y¥±¿ˆF·æ _½ŽïúxPÖ™9þ°íJÆ;í%\_qí%fM"špw¹ìäšš•Ë„\Ž2Œ±åœÓÅ=µýM_¼ù‡/½ý®GN>6>•µXL²ó2/¡Ì;Ô¡V(Vú?	ÃCƒ^tÁÙ76Ý3jRÇ0`ÓL~öÒ[qïëð“»Î¼çÁ­Ã³ÅRmV…ìºØŒ€h%nÜuÎFaÅðqïYÌsS[œ½#{.23×Ø›áy³ÆÉ¤úŠÃu¢¶¥ê N½* ž<÷œ3ÞßòÐX9 + œððØËvçƒ—Þrë¯6n{n÷¢‰É|õä+EVï/Må°&ª³Ö×Ü€¡‘p¦®¸´t¶‘¸ðÍàŽKC—N®4ØÓä™&¯A™g³<O‹]¦Ùö"‹)ƒÆ¥¹* m?{Ëé­€€8çc¬ÀÉ Î>26yé/ï|ðÜŸÞùÐ©O<õüàþCG³œs&,L,¬ÇO…gs”U+d¾éDÅµ€Ig-4Ž^ çžÝ@NØó}Û¶¬~ÆØ* §ONå/~dëöM>¶mÃ¯ï}lù³Ïïí›-•mÇqë q€§hUSÖIÑàÜ>n3J³;à’âêMùéò×g€¦êÂ´Ìs…½<?a†H³´€¡íçµc
 ¢CããX:4dY–Õ`	€u®çyl|êÌ»l¼ç¡'W?ðÈSKö:Ö75]ÈNNçmÇqX!Ð Þ°šŠë é×š;$v¿¸b97­i&ñyRÚ'tç›ojØÔ>„ááÁg/8ï¬ÌiO¡†oÕ[{—£:EØP*UÖ?¿{ÿê§žÝµâù]–î=pxðð‘ñî#c“¹#Ç&r…Ù’ÕHG,Tôï@ug’[rè}‡:ô¢§`96^c&",^2úø/»äƒÇ­gl}ö NY»ÄêÊe² ú Œ ª,°*_(®8rlbéäT~ñÄt~drjfÑ‘c“=cãSÝã“Ó¹™ül&?[ÊÎÎ–¬R¥bW*®E |¿z³j©TÎLLÍd|ŸkŽ²pè…½H·5_º¶ÃpÝšU·ÿÞo¿ãwæ¥Ô¶&2Æ`Q@wÍ€8XûŒæœú=Ï[ä¸^¯ïû½>§nÎy7uqNU¡‹ÙÏ>¿gäKÿþÃ>ùÜÒƒ‡Ç²®ë2™NÄ€ºåt7~iHí"«M,á¹yói¨Ã¨wsš`×ÑñÃÄñ<_ž·‚]±‚@¡ƒðTõ2¥2ÈRí@ÜZ§·mÃC|ÕŠ¥…s6müÇOÿÿú÷'Ä0(LYŒ1Õ­Ê ]¨.3fk¿ƒçÁÁ®½[6=SØr÷ƒ[/~zûîu;víÚ³ÿpïþƒG»Æ&g2žçYDâ5¦pBp¦1+%ü…H-Ä’É’‘Ùz—¤ºa„˜‡Ê·\T£»1E?{ÕVn}CÛBo('Ò¨ëY¨qÕŸSPg0Õ?Ã<’íGjìªúÝyeÿûð¶c3oÍnìªM
$œº-Oƒ¥T˜eÕ¼­êßŒ¡§»‹/rW,-Ÿ´|IeÕÊ%ÓkN^qdÓië>gó)ÿÊ{ò„ I0Ûó<æxºr9ØÕ#ŠÄšÎX
à"Ú8“Ÿ]=61½bz¦0<5SÞwàÈð¾ƒG{Ž›ìž˜œé>26Ù55Ï:Žc{žÏ<ßgžWûø><ßg¾çÃókWlÕCCB0á‡0Áh³³c“B%ÔË"Õ‡Wªu4°hS'éo#µ†Cý<"ÆÉj¿%áw#®ø·,Ÿ,Ë‚±‘±-Ø¶M¶m!cÛ”±mÊdl²-‹ìŒM¹®èwF‡U/®,^TY¹lqyÅòÅÅ‘¡|_oÏÄ@ïØèð¢±ÁEý‡ìð€ý Š'JÍ·…ˆˆQ–1ÖƒªÑq¨ö0èû|‘çûCœó!ÎiÈqÝ¾cãS=ÇÆ&{&§òÝS3…žé™BW¾PêÎÏ³…Ùbn¶XÎ–Ë•Œãº–ãx–ã8VÅq­ŠãZ®ëÁq\»âzÌu=æys\×r\žë±X•5Ë4¢v¨ý”jù¡ˆËlÛ¦\6ƒl&CÙlõ“Ëfx&cSÆÎð®®,uå2<—Íñê{›gìuwçüîî.·§»»Òß×ãôõ¸}½ÝÎÀ@_ehQŸ7¼h <0ÐWYT^4Ð?k[¬À˜5cÛÖŒm[ÅŒmçäL˜~Q=ßÃ!"nYÖ‹³]‰S
ß÷-Û¶ƒiB—ðé­}w×~÷Ÿ>ñ½ëy}³Årw±XÎKåîb©œ-•.Çu³å²ÓUqÜ¬ëz9Çu-×õržïgÇÍT×v×®8®U©8v¥âZžï³ŠãØNMˆ8®Ç|Ÿ3Çq,×õ,ÏçV¥â2Ÿû¬ú·Çõ‘o¹®Ï|Îáy><×³¨¶K„¤9 EçÁHÄê¿C/ê±‘oÛÛX˜ògãO–¼ª›3>I‚)RVˆcdgln1‹2›Ù¶EÙl–gm‹lÛBWWŽ#n6“áÛ¢l6Ã³¹¬Ÿ±mtU;2·m‹ºr9?—ÍR&cóîîïÊeý®\ÖÏå²ÜÎdx6“ñmÛrsÙŒ“Ëfýl6ãæ²7›Í8ÙLÆíééòº»r•Þžn§»;çvwuyÝ]ÙJOw—Ã+˜à¢ÚqK Ê áwEø~»µ0 Ÿˆ|ÆX°Kˆj<Ð±þÅOÕƒzzz‚²[D°ƒª]ÁBÕ®©}[hØ 2Âïàï@ ÏÄ÷Y Y2¾çg<Ï·9ñŒçûYßãYŸûYß¯j-¾ï[œ(Gœ,Ÿs‹@]ÄÉæœÀ‰Û rœ“Å€'bœsæs^¾Tó<ßr\Ïò<ŸqÎmŸsæº Ï÷-Ïç6çŽë ¸Ï™çû6c¾Ï™ïûõöàºãDŒ1Æ<Ï·Ú}JNÆ¶9³ˆ@Œ²ÙL½#Û¶E¶m×d£lÖ®Ÿ>cÛ6²™¡jØâ™ŒÍk–ÀÀ³Ùg`¨¶Ü¶mÊf3<SíØ¾eYTSÏf1bŒU,Æ|Vµ9cðæÚãŒ1ß²,×²-ßbÌ³-‹[–å2‹yÛölÛòmËò2™·,æ¢ÚyíÛCµ3¿Kµß. _z|‚wù |Æ¯½ãÒ§Þ±›=üfÁ	€4ÔØnÒÂÛƒëù,c[ ãDÌ¶,KÃÐ*¢p±kïlé]Fx;!½Ëig¶ƒˆï2Ò;KÈšp±šF\Ë—æ¢Àª™³ÆÄ[–4Aã—â¨v_ø›jsM\BµƒùxÂw'ø¤Ã¥|‚o®'vÌzåœŒqÖè¨\ÀO 1Çö™Ž 8¤=•|/–ÖÓ•CÃRx¾ÏcÈf2ªxLzÆ¤œ_u
@05ÁFªpš<ÚI\ñŒ¤o¬fÕ1„TZ„…†ü\÷®þÌõ<25­5Æp"8ŽO=ÝÚË¬CiÍÿtêP‡:Ô¡u¨CêP‡:Kÿ_zÖ
NÄÎ    IEND®B`‚         h  V        ˆ	  ¾         ¨  F  00     ¨%  î         “q  –D  (                                    Yhs‘¬½*œ¹Ë^¡¿Ò¤ÃÖž¦ÅØ«§ÆÚ³¨ÇÚ¸¨ÇÛ»¨ÇÛ»¨ÇÛº¨ÇÚ·§ÆÚ²¦ÅØ©¥ÃÖœ¢ÀÓ¡ÁÕ_¬ÎãÑ°ÒèÎ±Ôêð±Ôëÿ±Ôëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Ôëÿ±Ôëÿ±Ôéð«Ïæ×°Ôër¯Óé­Ñé¹­Òêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ­Ñêÿ­Òéß©Îç×£Çà2´Þú ¨Îè¢¨Ïéÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ¨Ïéÿ©ÏèÆ¦ÍçŽžÃÜŠªÀ¤Ìæˆ¤Ìèÿ£Ìçÿ£Ìçÿ£Ìçÿ£Ìçÿ£Ìçÿ£Ìçÿ£Ìçÿ£Ìçÿ£Ìçÿ¤Ìèÿ¥Ìç¨¦Îé£ÊåNÂÜŸÈån ÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿ Éæÿ Éå‡        œÇå ›ÅãV›ÇåüšÆåÿšÆåÿšÆåÿšÆæÿ›Çæÿ›ÆæÿšÆåÿšÆåÿšÆåÿ›ÇåûœÆäd        —Ãã —Âá=—Ääô–Ãäÿ–Äåÿ–Äåÿ’¾ßÿ‰²Ñÿ¼Üÿ–Ãåÿ–Äåÿ–Ãäÿ—Ääò—ÃâD        ’¿à ’¾à'“Áãç’ÁãÿŠ·ØÿºÜÿŽ¼Þÿ‚¬Ëÿ‹¹Úÿ¿áÿˆ´Õÿ¿áÿ“Áãâ“¿à)        ŒºÝ »Ý¾âÔ‹»ßÿ<Q`ÿSp…ÿŽÀåÿ¿ãÿŽÀåÿv ¾ÿ+9Dÿy¢ÁÿÀäÌŽ¼Þ        †µØ ‡µØŠ¼à»ˆ»àÿfªÿpšºÿ‰¼âÿˆ»áÿˆ»âÿ¯Óÿ^‚ÿ±Ôÿ‹½â®‰µÖ        ®Ñ 7  †¹ß…¸àÿ…ºãÿ…¹âÿ„¸àÿ„¸àÿ„¸àÿ„¸áÿ†»ãÿ…¹áÿ†¹ß‹ˆ¿é         n™º ƒ¹ã ¶Þz€¶ßÿ€¶ßÿ¶ßø¶ßû¶ßÿ¶ßü¶ßö€¶ßþ¶ßÿ‚¶Þf‚·à             ~´Þ }³ÜU}³Þý}´ÞëµÞ`€¶ßP€¶ß^€¶ßS€µÞM}´Þ×}³Þø~³ÜA~´Ý             y°Û y°Û0y±Ýëz²Ý‹´Û|²Ü     {°Ú w²â z²Ýsz±ÝÝz°Û!z°Û             w®Ú w®Úx°Ü€x°Üx°Ý             x°Ü x°Üx°Üsw®Úw­Ø                         à   à   à   à   à   ð  ð  ð  ðñ  ññ  (      0           	                      Q_h 9CIfy„y'‹¤´I‘«¼b•°Àq—³Ä|™µÆ„š¶ÇŠ›·ÈŽ›·Éœ¸É‘œ¸É‘›·É›·ÈŽš¶ÈŠ™µÇ„˜³Ä}•±Át“­¾g©¹W‰¡±;   §¸8 ¾ÑŸ¨ÈÜÒ«Ìàã¯Ðåó±Òçú²Óéý²Ôéþ³Õêÿ³Õêÿ³Õêÿ³Õêÿ³Õëÿ³Õëÿ³Õêÿ³Õêÿ³Õêÿ³Õêÿ²Ôéÿ²Ôéý±Óèû°Òçø®ÎãÞ—¶ÈG«ÌáÞ²Õëø³ÖìÐ²ÖìÌ±Õëü±Õëÿ°Ôëÿ°Ôëÿ°Ôëÿ°Ôëÿ°Ôëÿ°Ôëÿ°Ôëÿ°Ôêÿ°Ôëÿ°Ôëÿ°Ôëÿ°Ôëÿ°Ôëÿ°Ôëÿ°Ôëÿ±Õëÿ±Ôêå©ËáÀ¯Óêë°Ôê\°Ôë«Îå=®Òêò®Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Ñêÿ­Òêÿ­Òêÿ®Òêÿ®ÒéÒ«Ïçñ¬Ðé£¦ÈÞ¨Ìä §Ëâ(«Ðéç«Ðêÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©Ðéÿ©ÐéÿªÐéÿ«Ñêÿ«Ïè¹©Ïèä¥Êã¢HXcœ¿× ¢Çà¨ÎèÚ¨Ïéÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ¨Ïéÿ§Íç›§Îè†¤Êäè²È`FT^ ÅÞ¥ÌçÈ¥Íèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¦Íèÿ¥Ëå|¥Ìæ¥Íè…¡ÇâØ–ºÓVˆªÁ¢Êæ³¢Ëçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ¡Êçÿ£Ëçù¡Éä]¤Ìç ¤Ëç¥Íé&¥ÌèËÿÿ ŸÈäšŸÉæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿŸÉæÿ ÉæïžÆâ?            d€” £Ïï ›ÅãœÇæÿ›Çæÿ›Æåÿ›Æåÿ›Æåÿ›Æåÿ›Æåÿ›Æåÿ›Æåÿ›Æåÿ›Æåÿ›Æåÿ›Æåÿ›Æåÿ›ÆåÿœÇæÿÇåà›Äà'                ›Çæ ˜ÃâcšÅåÿ˜Ååÿ˜Äåÿ˜Äåÿ˜Äåÿ˜Äåÿ˜Äåÿ™Åæÿ™Æçÿ™Åæÿ˜Äåÿ˜Äåÿ˜Äåÿ˜Äåÿ˜Äåÿ™ÅåÿšÅäË—ÀÝ                —Âã •ÀàI—Ãäù–Ãäÿ•Âäÿ•Âäÿ•Âäÿ•Ãäÿ”Áãÿ†®Ìÿƒ«Èÿ‰³Òÿ•Ãäÿ•Âäÿ•Âäÿ•Âäÿ•Ãäÿ–Ãåÿ—Ãã°·Ô                ’¾ß ‘¾Þ1”Áãî“Áäÿ’Áãÿ“Âåÿ”Äçÿ“Âäÿ‘¿âÿƒ¬Ìÿvœ¸ÿ‡²Òÿ’Áãÿ’Áäÿ”Äçÿ“Âåÿ’Áãÿ”Âäÿ”Áâ‘¤Úÿ                 Ž»Ü Ž»Ü‘ÀâÝÀãÿÀäÿuºÿYwÿ…²ÓÿÀäÿÀäÿÀäÿÀäÿ¿ãÿ‡´ÖÿZxÿr˜µÿÀäÿ‘Àãÿ‘¿áp”Ãæ                 ˆµ× ‰¶×Ž¾áÈ¾âÿŒ½âÿ8L[ÿÿb…žÿŽÀåÿŒ½âÿŒ½âÿŒ½âÿŽÀåÿh¨ÿÿ1CPÿ‹¼àÿŽ¾âúŽ¼ßO¾á                 ­Î ©È‹»à¬Š¼âÿ‰¼âÿgªÿE_sÿ{¨Êÿ‰¼âÿ‰»áÿ‰»áÿ‰»áÿ‰¼âÿ}¬ÏÿGbvÿcˆ¤ÿŠ¼âÿ‹¼áîŠºÝ2‹»Þ                 uŸ¾ “Ìö ‡¹ßˆ»áÿ†ºàÿ‡»âÿˆ»ãÿ‡ºáÿ†¹àÿ†¹àÿ†¹àÿ†¹àÿ†¹àÿ†ºáÿˆ»ãÿ‡»âÿ‡ºáÿˆºàÚ†·Û†·Û                     ‡»â …·Ýl…¹àÿƒ¸àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿ„¸àÿ…¸ß¾ƒ³×
‚²×                     ƒ¶Þ ´ÜK‚·ßù¶ßÿ€¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ‚·àÿ‚¶Þ›    {ªÎ                     ³Û ~²Ú-µÞê~´ßÿ~´ßÿµßð¶ß¿€¶ßÓ€¶ßá€¶ßä€¶ßÝ¶ßË€¶ßÁµßø~´ßÿµßÿ€´Ýt‚¹ã PqŠ                     z®× {¯×}³ÝÒ|³Þÿ|³Þÿ~´Þ—´Ý€µÞ€¶ß €¶ß#€µÞ€µÞ~³Ü}³Þ¿|³Þÿ|³Þù}²ÛL}³Ý                         v©Ñ v§Íz±Ü¯y±Þÿz²ÞØ|²Ý(|²Ý                 x¬Õ {³ß {²ÝWz²Þøz±Ýèz¯Ú)z°Ú                         nŸÅ {¶å x¯Ûx°Ýóx°Ý\w±à y¯Ú                     y°Û y¯Ûx°Ýªx°ÜÇv¬×v¬Ö                             x°Ý w¯Û5x°Üdx¯Üx¯Ü                         u«Ö x°Ý x°Ü,x¯Ü\r¦Ît¨Ñ     À                             ˆ   ø   ø   ø   ø  ø  ø  ø  ü  ü  ü  ü  ü  üÃ þ?Ã þ?ã (       @                                                    ;EL_q{ n‚Ž0v‹˜<{’ŸG€—¥Oƒ›©V…«\†ž¬a‡Ÿ®dˆ ¯f‰¡°h‰¡°h‰¡°hˆ ¯f‡ ®e†ž­b…¬^„œ«Y‚™§S~”¢LzžDuŠ—:m.ar} FRZ Êðÿ ^p{ƒ›«N’­¾‚˜µÆšŸ½Ï¶§ÆÚÙªÊÞæ¬Ìàí®Îâò¯Ïãõ°Ðå÷°Ñåù±Ñæú±Òæú±Òæû±Òçû±Òçû±Òçû±Òæû±Òæú±Ñæú°Ñæù°Ñåø¯Ðäö®Ïãô­Îâð¬ÌàìªÊÝå¨ÇÚÙ¢ÀÓ±ÿÿÿ …ž®9¡ÀÓ¾®Ïäø²Ôêÿ³Öìÿ´Öìÿ´×íÿ³×íÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³×ìÿ´×íÿ³ÕêæŠ¥¶/§ÈÝÑ²Õëÿ²Öìô²ÕëÌ²Õë¬°ÔêÚ±Õëÿ°Ôëÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôêÿ°Ôëÿ±Õëÿ°ÓéØ¤ÅÚ›¯Óêÿ°ÔêÛ°ÔêT¯Óé}š®¬ÐæŽ¯Óêÿ®Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ­Òêÿ®Òêÿ¯Óêÿ®ÑèÄªÍäÛ®Òêý­Ñéd®Òê ¨Ìã ´Úò ªÎåw­Ñêÿ¬Ñêÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ«Ðéÿ¬Ñêÿ­Ñêÿ«Ïç«©Îçë«Ðéí¥Èà/¦Éâ     ¬Òë §ËäaªÐéÿªÐéÿ©Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ¨Ïéÿ©ÐéÿªÐéÿ©ÎæŽ¨ÎçÏ¨Îç÷™»ÒGªÑë  # §Íæ ¤ÉâK¨Ïèù¨Ïéÿ§Îèÿ¦Îèÿ§Îèÿ§Îèÿ§Îèÿ¦Îèÿ¦Îèÿ¦Îèÿ§Îèÿ§Îèÿ§Îèÿ¦Îèÿ¦Îèÿ¦Îèÿ§Îèÿ§Îèÿ¦Îèÿ¦Îèÿ¦Îèÿ§Îèÿ§Ïéÿ¨Ïéý¦Ìåp¦Íçu§ÎèúœÀÙ¼rž$Ç÷ÿ ¢Çá ¡Çà7¦Íçñ¦Íèÿ¥Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¤Ìèÿ¥Íèÿ¦Íèö£ÉãS¥Ëæ¦Íè–¥Ìçûš¾×Ð…¤¹FªÓî žÄÞ%£Ëçä¤Ìèÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ£Ìèÿ¤Ìçì¡Çá8¤Ìç ¤Ëæ¥Íèg¤Ìè¾ŸÆàyÿÿÿ ™ÀÚ¡ÉåÔ¡Êçÿ Êçÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Éæÿ Êçÿ¡Êçÿ¡ÊæÜÄß"    £Êæ £Éä ¤Ëç¨Ïë•¼× ”¹Ó
ŸÈäÀŸÉæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿžÈæÿŸÉæÿŸÈåÇšÀÚ                    ˆ­Æ }´œÆã¨ÈæÿœÇæÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çåÿ›Çæÿ›ÇæÿœÇæÿÈæÿÇä­³Ë                    s“ª ²åÿ ™Äâ›ÆåÿšÆåÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™ÅåÿšÆåÿ›ÆåÿšÅã°ãÿ                     ]wŠ Êë —Âàq™Ååÿ˜Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ˜Åæÿ˜Åçÿ˜Åæÿ˜Åæÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ˜Äåÿ™Ååÿ˜ÃáoœÉé                         —Ãä ”¿ßV—Ãäü–Ãäÿ•Âäÿ•Âäÿ•Âäÿ•Âäÿ•Âäÿ•Âäÿ•Ãåÿˆ²Ðÿ|¢¾ÿ€§Äÿ€§Äÿ”Áâÿ•Âäÿ•Âäÿ•Âäÿ•Âäÿ•Âäÿ•Âäÿ–Ãäÿ—Ãäû•ÀàP—Ãã                         ’¿ß ‘½Ý<”Âãó”Âäÿ“Áäÿ’Áãÿ’Áäÿ“Âäÿ“Áäÿ’Áãÿ“Áäÿˆ´Ôÿs˜´ÿk¦ÿªÈÿ‘¿áÿ’Áäÿ’Áãÿ“Âäÿ“Âäÿ’Áãÿ“Áäÿ”Âäÿ•Âãï’¾Þ4“¿à                         ŽºÜ ŽºÛ&’Àâå‘ÀãÿÀãÿÀãÿ¿ãÿ‡´ÕÿŒºÜÿÀäÿ¿ãÿ‘Àäÿ‘ÁäÿÀäÿ‘ÁåÿÀãÿ¿ãÿÀäÿ‰¶Øÿ‰·ØÿÀäÿÀãÿ’Àãÿ’ÀãÞ¼Ü»Ü                         ‰µÖ Š¶Ö¿áÒ¿ãÿŽ¿ãÿÀäÿh‹¥ÿ(/ÿ8KZÿ†³ÕÿŽ¿ãÿŽ¾âÿŽ¾âÿŽ¾âÿŽ¾âÿŽ¾âÿÀäÿx¡Àÿ'4>ÿ)7Bÿ{¤ÄÿÀäÿ¿ãÿ¿áÅ‹¶×Š¶Ö                         ‚®Î ‚­Î½àº¾âÿŒ½âÿ¿äÿBYjÿ   ÿÿuž½ÿ¿äÿ‹½âÿ‹½âÿ‹½âÿ‹½âÿ‹½âÿŽÀåÿ[|”ÿÿÿ`‚›ÿÀæÿŽ¾âÿŽ½à§{¡½‚¬Ë                         x¢Á     ‹»ß‹½âÿŠ¼áÿŠ½ãÿn–´ÿ->JÿF`sÿ„µÙÿ‰¼âÿ‰»áÿ‰»áÿ‰»áÿ‰»áÿ‰»áÿŠ½âÿz§Éÿ6JYÿ8M]ÿ|ªÌÿ‹½ãÿ‹½âÿ‹»ß„“Èð u™µ                         q™· Äê ˆ¹Þ}‰»áÿˆ»áÿ‡ºáÿˆ»âÿ…·Ýÿ‡ºàÿ‡»áÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿˆ»âÿ†¸ßÿ†¸ßÿˆ»âÿˆ»áÿ‰¼áþˆ¹Þa‹½â                                 ˆ»á …·Ü]‡ºàý†¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ†ºáÿ‡ºàõ†·Ü@‡¹Þ                                 „¶Ü ƒ´Ú>…¸àô„¸àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿƒ·àÿ„¸àÿ…¸ßãƒ´Ù$ƒµÚ                                 €²Ø ±×$ƒ·ßã‚·àÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ‚·àÿƒ·ßÊ€±Ö°Ö                                 |­Ó |­ÔµÞË€¶ßÿµßÿµßÿ€¶ßÿ€¶ßþ¶ßþ¶ßÿ€¶ßÿ€¶ßÿ€¶ßÿ€¶ßÿ¶ßÿ¶ßÿ¶ßü€¶ßÿµßÿµßÿ€¶ßÿµÝ¨sŸÂw§Ì                                 u¤É rŸÁ~´Ü«~´ßÿ}´Þÿ}´Þÿ~´ßÿµÞ§€¶ßa€¶ßˆ€¶ßŸ€¶ß«€¶ß¬€¶ß¢€¶ßŽ¶ßmµÞpµÞî~´Þÿ}´Þÿ~µßÿ~³Ü„½é i“³                                 c‹« …Àî |±Û„|³Þÿ{²Þÿ|³Þÿ}´Þà}³Ý.~´Ý |±Ú z®Ö´Ý€µÞ{¯×{¸å {°Ù {¯Ø}³Ý¤|³Þÿ{²Þÿ|³Þü|±ÚX~´Þ                                         {³Þ z¯ÚZz²Þýy±Þÿz²Þü{²ÝvwÁÿ {°Ú                         r¥Ì |³Ý {²Ü={²Þìz²Þÿ{²Ýíy¯Ù2z°Ú                                         x®Ù w­Ø2y°Ýíx±Ýÿy±Ý¶z°Üz±Ü                                 y®Ù x¬Õy±Ý’y±Þÿy°ÝÑw¬Öw¬Ö                                         uªÔ uªÔx¯ÜÉx°ÝÓx°Ü/x±Ý p¤Ì                                     x¯Ü x¯Û"x°ÝÎx¯Ü¤o Äs§Ï                                         s¦Ï q¡Èx¯ÜMx¯Ü4w°Þ y°Û                                         v«Õ y³â x°Ü9x¯Û=y²à q¤Ë         ø   À   €                          „   ä   ü   þ  þ  þ  þ  þ  þ  þ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ†ÿƒÿÿƒÿÿ‡ÿ‡ÿÿÏ(   0   `           $                                                                              
#&+272;A7@F:DK>IO!BMT#DPX%GSZ&HT\'HT\'HT\'GT[&FRY%DOW$AMT#>IO!:DK7AH3<B,49"(,   	                                              		*16;FMUeo.t‰–]€˜¦|‡ ¯¦¶ ‘«¼­•°À·˜³Ä¿š¶ÇÅœ¸ÊÊžºÌÏŸ¼ÎÓ ½ÏÕ ½ÏØ¡¾ÐÙ¢¿ÑÛ¢¿ÑÜ¢ÀÒÜ¢ÀÒÜ¢ÀÒÜ¢ÀÒÜ¢¿ÑÛ¡¿ÑÚ¡¾ÐÙ ½Ï× ½ÏÕŸ¼ÎÓž»ÌÏœ¹ÊË›·ÈÆ˜´ÅÁ–±Â»“®¿²ªº¨Œ¥µœ‡Ÿ®Ž˜§{wŒ™ai|‡5        3=C #&`r}8˜§}’¬½°›·ÉÌŸ¼Ï×¤ÃÖå¯Ïãû²Óèÿ´ÕêÿµÖëÿµ×ìÿµ×íÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿ¶Øíÿµ×ìÿµ×ìÿµÖëÿ´Õêÿ³Ôèÿ°Ðäþ¨ÇÛÎ    “¯Á Zkv‹¦¶”¦ÅØé±Òèÿ´Öìÿµ×íÿµØíÿµ×íÿ´×ìÿ´Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ´Öìÿµ×íÿ±ÓèÚ„­ i}Š#›¸Ë»±Óèþ´×íÿ³Öìÿ³Öìÿ³Öìÿ³Öìÿ²Öìÿ²Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ±Õëÿ²Öìÿ±ÓéÍN^gš¹Ì¡°Ôêÿ±Õëÿ±Õëÿ±Õëô±ÕëÊ±Õë¡±Õë„¯Óé¶°Ôëÿ°Ôëÿ°Ôëÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ¯Óêÿ°Ôëÿ°Ôëÿ±Õëÿ®Ñç¼’¯ÁS¬Ïåñ°Ôëÿ°Ôëÿ°ÔêÇ°ÔêN®Òè¥Éá³×î ¨Ëáa¯Óêþ¯Óêÿ¯Óêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ®Òêÿ¯Óêÿ¯Óêÿ°Ôêÿ­Ðæ¥¢ÄÙ ¯Óêÿ®Òêÿ¯ÓêÑ®Òé)°Óê ©Íä     ¬Ðç §ÊàN®Òéú®Òêÿ®Òêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ¬Ñêÿ®Òêÿ®Òêÿ®ÒêÿªÎåŒ§ÊáÐ®Òêÿ­Òêÿ«Ðèo±Õí ¥Èá         ¨Ëã ¥ÇÞ;¬Ðéò¬Ñêÿ¬Ñêÿ«ÑêÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿªÐéÿ«Ðéÿ¬Ñêÿ¬Ñêÿ­Ñêý¨Ìãq¨Ìåá¬Ñêÿ«Ðéñ¥Èà:§Ëã             ¢ÅÝ  ÃÛ*ªÏèè«ÑêÿªÐéÿ©Ðéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©Ïéÿ©ÐéÿªÐéÿ«Ðéÿ«Ðé÷¦ÊâW§ÍåÔ«Ñêÿ¨Îçïš¼Ô6ŸÂÚ             œ¿× ›¿×¨ÎçÛ©Ðéÿ©Ïéÿ¨Ïéÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ§Îèÿ¨Ïéÿ©Ïéÿ©Ðéÿ©Ïèî£Èà=¦Ìå¤©Ïéÿ¨Îçý•·Îlÿÿÿ -6<         –¸Ð –¹Ð¦ÌæÉ¨Ïéÿ§Îéÿ§Îéÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ¦Íèÿ§Îèÿ§Îéÿ¨Ïéÿ§ÎçàŸÄÜ(¤ËåP§Îèï¨ÏéÿÁÚÖoˆš4÷ÿÿ      Ž°Ç Œ­Ã¤Ëäµ§Îèÿ¦Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¥Íèÿ¦Íèÿ§Îèÿ¦ÌæÏœÀÙ¡Èâ	¦Íç–¦Íèÿ¦Íèÿ—ºÒÐo‡˜K4>F €Ÿ´ *5<¢Éãž¥Íèÿ¥Ìèÿ¤Ìèÿ£Ìçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ìèÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ìçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ëçÿ£Ìçÿ£Ëçÿ£Ìçÿ£Ëçÿ¤Ìèÿ¥Ìèÿ¥Íèÿ¤Ëå¸”·Ï
¥Ëæ ¥Ëæ¥Ìç¤¥Íèû¥ÍèÿœÁÚì‚¡¶}Zo}
g ¿ìÿ  Çâ†¤Ìèÿ£Ìèÿ£Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ¢Ëçÿ£Ëçÿ£Ìèÿ¤Ìèÿ¢ÉäžTeq    ¤Ìç ¤Ëå¤Ìçt¤ÌèÖ¥Íéú¡Èã×”¸Ð"–ºÒ ©Óð Åàl¢Ëçÿ¢Ëçÿ¡Êçÿ Êçÿ Êçÿ Êçÿ Êçÿ Êæÿ Êçÿ Éæÿ Êçÿ Êçÿ Êæÿ Êçÿ Êçÿ Êçÿ Êçÿ Êçÿ Éæÿ Êçÿ Êçÿ Êçÿ Êçÿ Êçÿ Êçÿ Êçÿ Êçÿ Êæÿ Êçÿ Êçÿ Êçÿ Êçÿ¡Êçÿ¡Ëçÿ¢Ëçÿ Çã±Þý         ¤Ëæ ¤Ëå¤Ìç¤ÌçF¥Íè2«ÔïªÒî ¡Éå ›ÃÞS¡Êæû Êçÿ ÊçÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿŸÉæÿ Éçÿ Êçÿ¡ÊçÿžÆád¤Íê                                     ›Äß ™ÀÜ<ŸÉåòŸÉæÿžÈæÿžÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿÈæÿžÈæÿžÈæÿŸÉæÿŸÉæøœÃßHŸÇã                                     –¾Ú •½Ø(ÇäæžÈæÿÈæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿœÇæÿÈæÿžÈæÿžÈåì™ÀÜ0šÂÞ                                     ·Ó ·Ó›ÅãÕœÇæÿ›Çæÿ›ÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿšÆåÿ›Æåÿ›ÇæÿœÇæÿœÆäÚ–½Ù–½Ù                                     ‰¯Ê ‰¯Ê™ÄâÁ›ÆæÿšÆåÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™Ååÿ™ÅåÿšÆåÿ›ÆåÿšÅãÃ¶Ò·Ò                                     €¤¾ r‘¨—Âá¨šÅåÿ˜Äåÿ˜Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ—Äåÿ˜Äåÿ™ÅåÿšÆåÿ˜Ãâ§}œ³ˆ¬Ç                                     p¦ Âúÿ •Àß˜Äåÿ—Äåÿ—Äåÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ—Åæÿ˜Åçÿ—Äæÿ—Åæÿ˜Åçÿ–Äåÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ–Ãäÿ—Äåÿ—Äåÿ˜Äåÿ–Áà‡­àÿ t“©                                         œËí “¾Þq—Ãäÿ–Ãäÿ–Ãäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”ÂãÿyŸºÿh‰¡ÿ¨Æÿu™´ÿkŒ¤ÿŠ´Ôÿ•Ãåÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ”Âäÿ•Âäÿ–Ãäÿ–Ãäÿ—Ãäÿ”¿ßg™Æè                                             •Âã ¼ÜU•Âãû”Âäÿ”Âäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ’Àâÿ}¤Âÿr–±ÿMfxÿ^}“ÿušµÿ‡²Òÿ“Âåÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ“Áäÿ”Âäÿ”Âäÿ•Âãø’½ÝI”Àá                                             ¼Ý ¹Ù;“Áãò“Áäÿ’Áãÿ’Áãÿ‘Àãÿ‘Àãÿ‘Àãÿ‘Àãÿ’Áäÿ‘Áãÿ‘Àãÿ‘Àãÿ‘Àãÿ‘Àãÿ’Âåÿ“ÃæÿŠ·Øÿ¾àÿ“Ãæÿ’Áäÿ‘Àãÿ‘Àãÿ‘Àãÿ‘Àãÿ‘Áãÿ’Áäÿ‘Áãÿ‘Àãÿ‘Àãÿ’Áãÿ’Áãÿ“Áäÿ”Áãê»Ú.‘¼Ü                                             ‹·Ø Š¶×%’Àâä’Áãÿ‘ÀãÿÀãÿ¿ãÿ¿ãÿÀäÿ¾áÿ†³ÔÿŒºÝÿÀäÿ¿ãÿ¿ãÿ¿ãÿ¿ãÿ¿ãÿÀäÿ¿ãÿ¿ãÿ¿ãÿ¿ãÿ¿ãÿ¿ãÿÀäÿ¼ßÿ†²ÔÿŽ½àÿÀäÿ¿ãÿÀãÿ‘Àãÿ’Áãÿ’Àâ×Œ¶Ö‹¶Ö                                             …¯Ï †°Ï¾àÑ‘Àãÿ¿ãÿ¿ãÿŽ¾âÿ¿ãÿˆ¶ÙÿG_qÿ%,ÿ3DPÿ{¥ÄÿÀäÿŽ¾âÿŽ¾âÿŽ¾âÿŽ¾âÿŽ¾âÿŽ¾âÿŽ¾âÿŽ¾âÿŽ¾âÿŽ¾âÿ¿äÿ­Îÿ:N\ÿ$+ÿ>Scÿ„°Òÿ¿ãÿ¿ãÿ¿ãÿ‘Àãÿ¾à½…¯Î
…¯Î                                             |¦Ä |¤ÂŽ½ß¸¿ãÿŽ¾âÿŽ¾âÿ¾âÿÀåÿc…žÿÿ   ÿ   ÿ@Vgÿ¾ãÿ¾âÿ¾âÿ¾âÿ¾âÿ¾âÿ¾âÿ¾âÿ¾âÿ¾âÿ¾âÿŽÀåÿNj~ÿ   ÿ   ÿÿUs‰ÿÀåÿŽ¾âÿŽ¿ãÿ¿ãÿŽ½ßžRdp|¢¿                                             q—´    Œ»Þ›Ž¾âÿ¾âÿŒ½âÿ‹½âÿÀåÿZz“ÿÿ   ÿ   ÿ7KYÿŠ¼áÿ‹½âÿ‹½âÿ‹¼áÿ‹¼áÿ‹½âÿ‹½âÿ‹¼áÿ‹¼áÿ‹¼áÿ‹¼áÿŒ¿äÿE^pÿ   ÿ   ÿ   ÿLh|ÿ¿åÿŒ½âÿ¾âÿŽ¾âÿŒ»Þ|•Çî r—³                                             ]}– —Ëñ Š¹Ü|Œ½âÿ‹½âÿ‹¼âÿ‰¼áÿŠ½âÿ|ªÌÿ,<Gÿÿ"(ÿi«ÿŠ½ãÿ‰¼áÿ‰¼áÿ‰¼áÿ‰¼áÿ‰¼áÿ‰¼áÿ‰¼áÿ‰¼áÿ‰¼áÿ‰¼áÿŠ½ãÿq›ºÿ+3ÿ
ÿ#09ÿu Àÿ‹½ãÿ‹½âÿ‹½âÿ½áüŠ¹ÛYŽ¾â Tix                                             0AN ¿ä ‡·Ú]‹¼áýŠ¼áÿ‰¼áÿˆ»áÿˆ»áÿ‰¼âÿ¯Óÿl•³ÿy¦Èÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ»áÿˆ¼âÿ{ªÌÿl”²ÿ}¬Ïÿ‰¼âÿˆ»áÿ‰¼áÿŠ¼áÿ‹¼áñ‡·Ú:‰¹Ü                                                     ‡¸Ü …´Ø@‰»àôˆ»áÿˆ»áÿ‡ºáÿ‡ºáÿ‡ºáÿ‡»âÿˆ¼ãÿˆ»âÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿ‡ºáÿˆ»âÿˆ¼ãÿ‡»âÿ‡ºáÿ‡ºáÿˆ»áÿ‰»áÿ‰»àß„³Ö!„³×                                                     ‚²Ö ±Õ'‡ºßå‡ºáÿ‡ºáÿ†¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ…¹àÿ†¹àÿ‡ºáÿ‡ºáÿ‡¹ßÆ€®Ð­Ð                                                     }¬Ð }¬Ð†¸ÞÐ†¹àÿ…¹àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ„¸àÿ…¹àÿ…¹àÿ†¹àÿ†¸Þ¥n•±x¤Å                                                     u¡Ã sž¿„¶Ý´…¹àÿ„¸àÿƒ·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿƒ·àÿ„¸àÿ…¹àÿ„¶ÜÆñ r›»                                                     j“³ Ûÿÿ ‚µÜ“ƒ¸àÿ‚·àÿ‚·àÿ¶ßÿ¶ßÿ¶ßÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ‚·àÿ‚¶ßÿ‚·àÿ‚·àÿ‚·àÿ‚·àÿ¶ßÿ¶ßÿ‚·àÿ‚·àÿ„¸àý‚´Ú\…¹à                                                         Mk ‰¿ê €²Úp‚·àÿ¶ßÿ€¶ßÿµßÿµßÿ€¶ßÿ€¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ€¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ€¶ßÿ€¶ßÿ€¶ßÿ€¶ßÿ¶ßÿ‚¶ßñ±Ø:€³Û                                                             µÝ }°ØM¶ßù€¶ßÿµßÿ~´Þÿµßÿµßÿ€¶ßÿ€¶ßÿ¶ßÿ¶ßÿ¶ßÿ€¶ßÿ€¶ßÿ€¶ßÿ€¶ßÿ€¶ßÿ€¶ßÿ€¶ßÿ¶ßÿ¶ßÿ¶ßÿ¶ßÿ€¶ßÿµßÿµßÿµßÿµßÿ€¶ßÿµÞÝ|®Õ|®Õ                                                             |¯× {®Õ.µÞêµßÿ~´ßÿ}´Þÿ}´Þÿ~´ßÿµßÿ€µßã€µÞ|€¶ß•€¶ß¹€¶ßÐ€¶ßÜ€¶ßå€¶ßè€¶ßæ€¶ßß€¶ßÕ€¶ßÂ¶ß§¶ß€µÝ”µßú~´ßÿ~´Þÿ}´ßÿ~´ßÿµßÿ´Ý¿w§Íw¨Í                                                             w©Ï w©Ï}³ÜÒ}´Þÿ|³Þÿ|³Þÿ|³Þÿ}´Þÿ~´Þÿ~´ÞƒqÀy®×´Ý€µÞµÝ€µÞ&¶ß)€µÞ'µÝ €µÞ´Ý~²Ú{±Ú {°Ù~´ÞË~´Þÿ}´Þÿ|³Þÿ}³Þÿ~´Þÿ}²Ûš'# pÀ                                                             q Å oœÁ|±Û²|³Þÿ{²Þÿz²Þÿ{²Þÿ|³Þÿ}´ÞÐ|²Û}²Ü                                             w©Ò €¹ä |²Üj}³Þü|³Þÿ{²Þÿ{²Þÿ}³Þÿ{°Ùpºå 3BM                                                             h“´ Óÿ z¯Ù‰{²Þÿz²Þÿz²Þÿz²Þÿ{²Þ÷|²Ý_|µá {¯×                                                 z°Ù z¯Ø{²ÝÇ{²Þÿz²Þÿz²Þÿ{²Ýöy®ØG{±Û                                                                     {³ß x­Ø]z±Þýy±Þÿy±Þÿz±Þÿz±Ý¦z¯Ùz°Ú                                                     uªÓ |´à z°Ü\z²Þ÷y±Þÿy±Þÿz±Ýâw«Ô$w¬Õ                                                                     v­× u«Õ3x°Ýìx±Ýÿx°Ýÿy±Ý×y°Û,y±Ý r§Î                                                         x®Ø w­×y°Ý®y±Þÿy±Ýÿx°ÜÀt§Ïs§Ï                                                                     s¦Ï r¦Îw¯ÛËx°Ýÿx°Ýëx¯ÛRzµå v¬Ö                                                             mŸÃ x°Ý w¯Û7x°Ýáx°Ýÿw®ÚŽ•ãÿ mœÁ                                                                     nžÄ ÿÿÿ w¯Û…x°ÝÞx°Ü^x®Ùx®Û                                                                     v¬Ö ]r x¯Ü^x°ÜÞw®ÙOy±Þ dŒ«                                                                     i’² x°Ý x¯Üx¯Û)v¬Öv­Ø                                                                             x¯Ù x¯Úx¯Ü.x¯Úx¯Ú                     ÿð     ü       à       À       €                €      €      €      €      €      €      €      €      €À      ÀÀ     àÀ     ÿÀ     ÿÀ     ÿÀ     ÿÀ     ÿÀ     ÿà     ÿà     ÿà     ÿà     ÿà     ÿà     ÿà     ÿà     ÿð     ÿð     ÿð     ÿð     ÿð     ÿð     ÿø     ÿø     ÿø     ÿø     ÿø     ÿøÿð  ÿüÿð  ÿüÿø  ÿüÿø  ÿüÿü?  ÿþÿþ?  ÿþ?ÿþ?  ‰PNG

   IHDR         \r¨f  qZIDATxÚí½wœÇu.úªîž<³9ïbE‘Ì9‰™¢Ä Q–(S9Û’ý,§k_Y×O¾¾ºOŽ
¦$K²$K–•©HI3)1‰™Á D\ fºëý1Ó3ÝÕUfg± w~ƒÙé®ðÕ©ªS§NªÚÔ¦6µ©MmjS›ÚÔ¦6-"¢…Ð¦6½RéŽß  À4 ±õM_hX>j€Ñ“ßü#ÌVÐeó‚Xa¼T®Øßvqç>3s¨X™ÆÆ«ÿ÷BÃlÓ [>ý^pÎòÝ¥Ük	Î9"]ìÖ©2>nTŽ»ö/bŒ…ðJ¡GžÞÅ–u¾—8ý€4'ØÌäo´q_3ó±Y!n½ïË:´áê¿^h¨mš'º÷‹ÂÓÛ·S©TXââOœËdAqjŠ;øÞBãô[h ¯zôëˆîÂjƒÑ¤k9}£sMÎ¾˜2ØOÏÚ=Ï}ÿOñ¹¿ø­…†Ü¦y Î¬‰•KÇN²ÈþWq-€¬ûŽ10Âkïxì¥ôMÿôî…†Z§¶0Gzó5bÅ'âáÿüÅk@X üaˆÐc0öÁŽ¬µìÀ©mYÕ¿}¡q·©utÏ—þys
gíc-ƒýoÎèduH:eÃxçJƒ³û³Km`ŽtõÙ«ð¯ù¯‘²-Ng.w~—ˆ`rFW›&ÿ$©uâ¿€»¿~ôÌÛÔ}ýÿÜ€Í+:qh–­L™ìcœÑÉ@ýã!“Óªr¹²aýUWâc¿{åBCÐ s¢±Áœ»iÇŒæ6¤:^ˆè8œo’ó‰Gœ?\Õm\è"´iŽ4ÐSÀï~¦+mò?cÀ¹À+bçæ£ÿ”Ý¼rp¡¡h€9ÑGÞ%Ž}÷×bÆñg¥¸ñâƒ9Ÿ)ÛËþÚ‡ºmj’n½ñ}˜­”­Á®ÜMƒ]¸&:²ÖÉ¥4ïíÉ-4| m0'Ú4^Âÿú­cºr)~Qh@R>:Ÿþnv¶<òü÷þï¸òô….N›Ð·?þ6œøÆ¿AW!s©ÅñÛÇž& ÆÐk˜Ö†ÕmàåOëÆ;@Ä†²)ce¨G…Þ.p±i²ÿ¹íÅÉâ{^wÂB§M1é{ŸxÖ/ëÅ=_øý•)ƒÿ1€€úGGÕ÷ÙÁîìI´áwº Ú`NdœøGd™üDd  "I™Œ½¡˜µþèÀ¡ÙÌ­7~`¡‹Ô¦49ëàÁí{ó™”ñÇœÑq>£ŸBØ×Û… È(fŒ-ïyÝY™ßÿíº(mÐ,u—rØzÌÞ×‘9RDÕž-Ïè
ÆÈLì†RÖºæ‹ß¿Ÿ}ÿïXè¢µ)„nüóëðÚNÅHwîË`Wd=yžHß¶#F¶®_:~Üºñ….N[ 4Kü®WãüS7ö¦L¾"²óÍ‡ªqQ·eòßpé¦ã¶¬ÀÏ>ùž….^›tåy[pÆqKqÏ·~µ1e°÷1¢¼Z_­>åŽ/·ƒ³‘#Åµ'­[x;@[ 4IWœ¶&zWÔ’ÆJ€?¸ g´22ÿjûîÉ±b>µÐÅk“‚þøúÓ±}ÇþLÆ4Þjp¶!IÜº ‚i°®|Š¯¹à¼î’““$Órj€&iüÂS1Ö—?ÆàÔ_­^Jº·J†ÁNÉ˜üwžq2÷£zçB±M­[Ò‹Îbú‚”Éß¸µ^­ÄzÝGØ ªªßlE,ÿ£w¾§pÑÉ«´LmÐýÞ[.Ñ–eòÕœSªªõ„^§DY†]ÃÛxHÃàüMc¥×žóŽÄÏ?ýÞ….j›jô½|7n~àùQËà B¨ùõÔêNŠŠ®	yp0M¾åôCë–v/h¹Ú 	:÷¸eøÇ?½¦D+½XæûÕ@tDÍuPx\£NËäxÿW~ÿØÁî,Ú´ðôßÿ÷øÁ=ÏðÁîÌ›9£Sä÷ðÙ@¶Poe-cy!cl^=€ËÎ9nÁÊÖ MÐ±+û°r¸4˜±ŒUÐ¯ýÊ ÕFoÃ ÀgCg+Ó&ÿ½§v*þ÷ÿm¯
,$}úÏß€c—÷âº³VnJÆˆ¨áðS«7_¯Éòºp×¤Ë¥¦f•´ùC´z¼wÁÊ× 	éúWŸŽž³Ž‡iðËäCÕ§äëÄ$ýÓQÃ:,|Z Àˆ.êÎ¾µ<=ÃoùÌûºØ‹–Ž_3ˆ§žß›Î¥ÍwŒVÀÛ±E½·×ÃQ]È!µOÔøTãSÚ26~ðúL“Z[Hm6¬DÏà[rE¬‰åþ	ø¦ÞŽîÞRýÊ¤Lã]k—õ4ÔÛ{ÿý]ôEIœ3äsésÎ^[×ÖÈS_!D!ï	 ÞRúÄ5c)»2»`åk€„41TÀï]³9]ÌY[âœ¨&[ëÏ(lî 0¢eŒÑï¾´ï@G:Ó^<ÒôÓyv¼4Ù—±ŒwQG €Pºý©%0Æú¹™îì_°2¶@B:~Í:r©|1—ÚTí§1Ìý¹ê!„ð«†õFÒh-çsÙk×\ù1”FÖ.tñýÇ_ß€3Þz=z;WœŸ ×]@n'BˆbO)½ùúK·,X9Û !ž9˜•eD%¿Tðªˆ‘^¶!üB ®¸i5	ÒœÑ‡îýÒ‡Nºåï.]èâ/
úÈ{¯À–ý¸ósŸ_j™ìzFÈTßx„|ÀùK®KY8 ²À+tå6Núà‚•µ- Ó&vçÖn£PSU¨—€He=Ö‘ a"mïÚ½ªãöÏýîB3àOWœºÏìØÇ
¹ôÕ&gÇûß*Ô~ÏT@(ƒ:bŒx>c-'"ãuŸ¸ em€„DD4Ð™Þ@Œ‹ôÑÓ ¡lrœ`˜”Á¯èÊ]~Âoýîûòï/4^Ñ4S® ³˜Ya™ü- JÔGb	õzXÀüÛ?x]ßy'®^²¶@ºæâ“±l|$K›¬:¼{Ô;÷4P¯7`pŽHŒùç‹$Ÿ"*©™p)ƒ³÷ÞþÙ,Ÿ-Wš¯XúÂÇ~Ÿýá#<“¶®'¢¥ ó{¯Û¯Æ_÷òÛ|„,Œ­_Ö³ åm€tÉñ¶×œ6dðËy¯›ŸÚ¹GI^!¦2Ö§lsg)ÿÎ=ûš¿øT{Ç`«é·¯:§3„kÎ\y2®%†òyuÅ0üéI HYÆÈ`w~Éq›—¢˜K7V³Ô 	èüãÆ°v¬8Î&Ú÷§‘¨ÂÈBÀ8ÃµÃý]çž²a	þáOß°Ð,yEÑ—¬ÃƒO¿”-åS×™&sÈkb’58Ë0ÆÆ°æ]øÀ›^uÄËÜ 1‰3†¾³Ö£¿3³Ì2Ø€€b„÷M¼Dp²µXNV#©Ÿˆ†R–ñÞ{ŸØÕwá	Í–Wm]=„ÎBvCÚ2_ (”}ª½»Á#Î9`†ñ¬U±üÞ~iî˜eGÞ%¸- bÒÛ®9D—0b|”sfˆ±8F>F#rç™5bŒÎ±~å¿}ëWí»[D¿÷–Ëð/ßüµUÊ[ïeŒú¢cèÎ}óþMÒOu[I™lÃq«úKC±–nµ@L:mÓ8Þ}ÝùyGÐhxguÿ ÕÃÞ½ 6ÀÊ¤Ì÷_~ÚŠÕw}¾½,Ø
úÀU[°uuÿé–aœé{¡Zï¯þ¡II³%X™F•òéÔŠb.Õ¹né‘÷l€˜´qy¶®îëL›l¥ïE¬ybœZ×Ð4¡	«rÙÔÛ~vOêhºkîåH7ÿë{pïož-²©70FC¾—"AGM~Mq–«6š:ñÈ{¶@êéÈcíªaôuäºsis•{ŒÏ¬›/–ù<qÃ¦rZBŽâŒ^ÌxÏ¹ç´_ùß´ÐlzYÒç>rN=v9F:N5~¹n®î³Ç$rÿU¥x—…¦eÐ¦Uo8âý±- bPÅv€uïFYÐ 7x14°Ü(„l,"}<ÕoòÌ#%AÂ9ëËfÒo»ûÁíëW,4›^–´qå0~tÛÃù”e¾‰1ÖQ}_‡–b	‰j>DÄ;©õgm^Â“dÑ
j€T®T@DÌ2Í¥˜/ž5±æ$`ü¼b.}ÉÄøÀséåIù\]¥Ü	–i„Ò¯«Ÿ¬ò™ôòB¡˜9÷äDgÎ™Ú &]qö&3Ÿ6V²k¨lýuÿlRMtãº$d/Á@ƒËpF¿sÿCOßýï¿³ÐlzYÑWÿêzÜqÿ“Ù|.ýNbŠí¾ "5¶Èé_¼4QÇŠñþk.<²v€¶ ˆAD„‰¡’ÙY°6Pâ£ë‰DÜp¡û‚>ˆD´¾Ï¾n÷‹/²ûþãCÍ®—m\5„³Ž_Õãç;5r$'éÐé @=ª¶{WC+“ƒÝ…•—Ÿ~ÌåC[ Ä OþÅÛQìèì²,kÐmøð®ùJ4â€HI&*|mk±É»ahttËøH>ý'×,4ËŽzúç__=ül12¯âŒõûê¨ÊÏ{ˆÑË¶Êô¼O8§Ž‘žìÊÞÓ7Q>´@ºæ¢ÍX2Ø¹D ¹Æ@¬è˜J/Àjñ~’PTèš0~Ã¯y6uÜúñ…fÙQMÿý·oÁ	Ç.GWGîÓäW RùBÇÙ£AÚwaä=VŒ3f¥SÖr¢sè·.?íˆñ"Þ™v‹V]áî;W¨ ™‡×(Äù§¦6ÖqÕHù9ðüóŽIÁ“¥È4Œ+³™ôç77[Ô;?ûˆåó©”aZcd€wÀÍÊìTN€• êöì ešCÄXTÏGÈ±Ü]-äá‰  Ç‡gÀ! Ó M;Ž}¸R©¼HÄw2ö2ÎvsÃš$QžaÂ®8BØŽãT¦§gÊ¾d•¯|çGÅöàààÔ4¾ñƒ»R+—\Ï«žñïÖé9ÄÅ]ÁQ]ùæ­G!Õ—¿54\‡•­†¡*zÿí¯-­ZÒ½ïsßøyóL@mA…lõÜ¾®ü
Î) ªš×Þ»§û 0rÔ…W¥”‹ç»~Jä†#m;h’Qo1—~Ïs;vßûóO½÷Ài7ü_mØ;?ÿA@nY¼hpêI§3½Œ±‚*9•òm`ŒF# Ía·L€0„H›D°ª@‰Áç¡'Æ5ÅÓ½2ÃaŒÎ
* U T f ˆ{ãO§Óé'×òÇŸøöÿxáÉïðÂqÍÎÎîšÝ7Kéý¿>í#3¹Iàu«Â1Œ÷€2­s•óy5|>üOÝ» ¼ß„d1.¼í'èe8qÜŠŽ¡áÞü¾¨¢­¢¶ ˆ ×_v2
]éÛ>ó®ÑêÙR7—çûõ¿„ÏÉ×­|oxáOH¡zª§aB€s:·¯§tÉš³Ö|á+ûÞŠ}pV*C³Èd*Ó&R†8Þ4­q!PÂB,%¢å :„`—[f =„Ø­¶&0«ñÑÒÝ§EDÃD8†1w™œ‰šp´,óqÓ4ž/0þÜÙ¿úÈ~!œ½ý÷Ÿ<8[®<Ä¬ü&•§|l›sÙn Ñ©øÜ_¾¿¸ïùô¥§.sÝç_ÓÛÔ%Q?%å[…V ¯ð4Ž	GÊd£ÃÝ¹þ#‰Î´@(§oYžÎR·m£·ÚNÔU]ïÜõš#¸]ZnÕ{¥¼'¡žl¨Vê‰@D)Ëxóc7?rï±«G'm»2Ä‰m$ˆsÒ45&ÒF F ‘«Îf qÃ+Æ¢¢D…	[ÚTý–Óµ”ŠDìX ÇºïˆÈ!Î_Êp¾“¨rP¼¸j|è¶G¾ù£»žøî_<ã”§÷OšÞjülxº$„¤¸gü+µ<é›|Ð«‘.IQÓ4ºLËêë={®¾ð|ù»·c¾©- BHàØÝàÎÔ g
K’Z_m0~e^ÕH1Çt/­7ÝYÒˆÀ;“Löe@ôšÏ0ªºNC¥¢D!¿å†ß„MD™Ž÷[Y#1pƒQ€>·^R)ób 3vŒï)ä2dp>Ø€åÍŽüuê¯'ÿ·.5þô%à‘ cÄÊ6Fˆ.d÷á×;mpÐê­ØñâžAË`µÌ»æxÕhLÞ†¡4(Öö)VwPdêþe‘fA9açB%jG¾×}Ëx’ZþênØjm1VªÚ!¼óÜÕè=½¹)XOªo_é4EÅs! ÆhÝ_¼ï5™å#Ý‡¶)j/†ÐéÇ­ßˆt:5lšF—6 ¢rå€‚ë„æ.Q•Ñ(¤…ÝQGŠëÐ
¶6‘ž·IÊEš´"by—÷|«1¾@Z¤Þðá¾Áç¥œ¹ní’Rvb¨—ÍQ[ „Ðù§m‡‚•Þxo}a
C ÊùGÖ0”–¡ˆÓ…ê¹ÄùøIi‘æoï³¤›h’nµŠßQå	K;^5NçÏák'‘£¾'!²&¸‘êèí,âHP[ „Ðæå}øð[/Îœ-Tjœ§Em­¹†úŽ×—´Â×<ÊXÆè˜Í| ½PÊ	4ŽÐ ­À®Ã$—ÍÃsÒÔ‰Îm;ì¹6nÇ©™£Ýg¼3>ç@mB+GJX·¤3ŸKóµ±F6ÄØÛ;ðH­…væbÐN/’ŽêaèFùôâzñ%Ì[zÒ8i(]Ì°MD¥$W4MmBË—À´¬b6“m<MªæºÑ$I¶Ù„>ŠÓa¢:YRÕ^§EÄÁ'||¡ faÔô€ü?cA÷,%ª@D&ä±3YÝ…ÔZ t$ä}[ „ÑúwÃïáŒeÝÚhT²qGjðšN,¯/+Da÷ÌÕÃ¨òU-»…5xÙÜÕy£¦
Þü„&^XzQSg{Ð”Nbc8¿T¼Ò¨÷Þ:‘3”³
äÛxÑ¨w`¨þÎf3£g¿Ö:ýøù¿¶- Bˆˆ(›I- Ce—§Ÿ i®ŽöZ˜…&Œï#Â:¯÷;9
ëV$âjºü¼aT‚H×ùâ£WQ’‘"Ÿ[ƒ½á„JPkGþhÜÔuù9{ÄÙ m?€é+òŽœ±>ÉH¤—ÁgÂ/|y(D­<Oä-ƒ’¨íqÂ‹ˆßªçG`¬-~ž{'Ã¶œp„èìÌŽ®Z:°}¾‹ÚÖ 4”N™X2Øet3kIyET•ô—}jF®Xs{ï|¸™ùt+(®³F5ÂÇÁMšï°eÊVMŽåôò\·b•«PiO."gÔ;Ü›_¶yÝp‹Ê©§¶ ÐÐ5ž€5+ÆrV*=L«	üAe»@ ‚ÆVfW¥¿Ê±F&é}‹ºÇé,qqS}–~ÃÙ5j×´sïdØ%†RöPt'–É‹Ý…1¬½[Ö-Á|R[ (ˆ¸î²Ó°répŸ#“ð^C^õ@‰V¬Ö©‹wªôÞà«ýnØ#TØU~Hñ=s¤—×8ªo–^#¬¨¹çF-£úÓÃÄîåyt™I‹]*”—©°ƒkWm½ñòSã0ºijÛ $pÞ‰ãØ¿g×0‘(„Ù§u¤5òécr‘ÓˆJ/¸Eg£ˆ1ãxº…u9~´]”Ïüå‡f¤Ž‡]Öâ”]è¼/ðÓM'ü(9¿a;Î²÷^uB×Ø`ÇŽÈÄç@m  ÎXs>op9'êx‹îNúc¹‚UÛIýó[¹Ã«Cô#yð]˜€±y7»D}ÇÍ#,Ï(×\9Ý°üUï„Ç"¦!ÅáQt|"ŸF¥ã]ã¹§ó{V Ë²–Ž÷wMŒö´À‘¦L:`…bq”<[ß	Øý×èÐ®Jo^)K× ã>Sæ.5ôvR¾÷bIBñÂ7çkïïüÉË…[.J³¨¦¯ÏG­½(ü ¤SÆxWG¦{ùXº:ŠØ³ï@¬ò%¥¶@Aï¸ö\eSB 7^ÃŠV-#ShrÔj}ZDàÓö¹RÍgY¯µuà1<j°ŒRår¥×Øp-^éÉ-ÌÛOm  S7Žá/Þ{A§¢ð	£Ær¯
êõø
R”‡`£ ðÑä¨ÍG•†®£Å9Î<iø0y¿õøõŸ$¼ˆã~÷$çxeö®ÕŒ˜úú#±|lp_1\JÌË¸Ôž(hÓªa88ÕÅÖÖ— j}^¹_ßÐ<›="óWÍ‡ÕiºáÃÕuÿ¾µ‘Lžûë°$ÁGØEågâ_ÅPèt¼×¿‹3
`&ïP1œ³ÈP¨ü6Jmx×ëÏµŠ…ÜT¢JH@m  %Kº1ðÔsÝ)“7ê[ª „KIFÄ¸ J04lA!à¦å·êGÀI°ëßÇ™25‡=œÂFzhÓ
G5s}Ø˜<$UØêïb>µ¦·#“â„y í)€DëWŽ«/E&›íI¥¬žêÓ¹Îq£ž¿ê×û£Ulÿšûœ7†j
…/è,å'‡‰¿nß~¿ïAÏýßºr5‡Iu¨8!mò^ƒó7æoœn ‰.:c3ˆ†i¦‚!@v–µ å6²§yGÙ-èå¦Ì/_÷\=¢RòçïÛä{Ãƒ/Ž÷IiéÒŽƒ]^]ý	¦¡Ã®Õ#°“â·ôÑžº TÚ2¯¾`þ6µ§ ­íÆù§lH™œÆýo•~¢iw†m’‰£J&y5:éTó¸Øç‚;ìwœNñœ“ÔØãò\~§ã‹4hÉHe¸lg)»ÖØ°éŽ8¥j†Ú@¢ážN>f(•±ªÇ€%!y:è{ynßB“±yÄ>·yûüæ;·4‚Ëªñã»S	Æíê(®¶ÎªÔžHÔÓÓ…îž®t>Ÿ› Æ@LfQ`Ò[ûø—Õ|{[„"Ž/nÌ©Dœ©†vƒ‘&¬÷[E…]‡+æ0ŠÂ¥¶ÇL7°T[Ÿ%DeÜ¥GFÄJYs)—žµ¹¹òFP[ H´åò“2|Æ2ú†¸±$d®êÛ	4Â¨‘¬¨¬ÉaOõ^7ì„…êaqæ{œüÃÒÐå¶£)Ž0‹Âz8ˆÚn£ÚÃáî@u:ÿÇ{¯î¼èÌù±´€LÖEH§¬Q½IGª2Ý¶QÅ©ÂFËVPT:bØ›Í³U†½ž·ŠšH¿!3üGÂŽpzWú—äçn[ HDDÔSÊ¬@M ÔzFö°`óÜ¡›/Tø(w¡0«¾Wì‰ÎiPÎøà@_×èÆ5ãóµm²æ8QM ¸jcí[Þ„âiüŽk-G°K÷ÓE†Kaj¯*ÏfCÜsô’ÄûXyj-±XZÉó:Võgþö¢ÏK °LÞÛSÊ÷o^Š‰‘<ñìKÉñ„P[ðP>› ÞÓ‘_ÁkG­S4SÅênÔ|Ô›Oœ9²/Ëˆqò”Ók{Ø'
wœéH¬³%AÖŒ/)Ï•<•?ºöâ&§æçŒ4@…Ëéõ—Ÿ‰VS[ðÐ[®:>ö\†›V·,¿U$¤3üÇZ	FÐâ}.é´ÊîÐ
ìsÍ³[Åä¹Ú;Ä•[“fÅ¶Ç>xý…Ùµã­¿0´- jDœºeº:Š=¶#Š‘£eÄÁ¨y÷…oN‰óÜ}WÏ¸™ÒI¿ÃòÂ‘øl¤y¶
{T:që"?’ó¢9Waç|bÓê‘Âè@W[ Ì	\tâ¦îïP
o¸Ÿ«×Óôž6‹ðôB=ÞÔsÉ¥“â‘æ9¤0q±GáÒá*³
Cì*<º£½âæ¯âEœúŠ ¯A ¸ó	Ù´µ¢¿§Xšëkùé@m€‡2ë–a°¿{”sÞÓºãÔk¿êOXQa’`Ã¦úžö0üq:pìaxšáy/¢â& ¥Í¡Š1e}¦Á»V$O7‚Ú F Ù“ÑYÌŒ™&ïR¼‘HÐ¡#$ùÜ1vævXÜ$Û„6ìîûæovMÄ°—¾å²=ˆÁk›Æ¨£¶ ¨Ñ›^}ˆ:ˆ:YÝ¸Tû¯öMa4Ù‚ï{Ü"uêMœ“uä£¦ÃÎÑÓ…¡¡¥êüsÅ.¿s
±{Ü<ââÖ•91ö0eè
ƒ»x¦FÊdÇœ¹e…ö‚šf©m¨Ñ9'®D¥2›Žôâ[¯'ÅÑPQËJŠnª¯Ô§Æz)ìd^÷½ê(.]Zrþº|Tßª¸IÎ0Œ{ªŽ®üÞ8aØu¼	ÃÆó¨tCOÂo%ˆ©áT–¼‡…DÄ
…ÜºÍÇLð›ïyÜŽL(µ@Ö,éÃK/9£QÕ{ªiÍ™t* ’Ä›†÷<¢5{:P”`S¥©ëüI±ÇÍ?.¿¢pÆ*SPÌ½?ŸK/Ëç3ÖÄ’ÁÙ'¶½<Mµ§ 5Z¶dý}]EÓ2•²‰yØ–ê%1UÕ¸«±¶*îË{+ã…¦“(ÍšÐJ› F…¾Îbçï^aKpºÔÖ  X¦Îñt=ðtG&••×xÝ?¿P«¹>AëóY{í#ÿí¥fÜlÃvêòOwlìQøel*÷_…»ò\°Çê˜QnÙQØ#¨Þ^<%
;àÙqD¾««´dl¸·¥7·5  +Æ€×@Ñmp–dµÒ]²qÆ7÷an..²Í¸ÙêÜvãºº¶{Ò4dÃ™Ü¡Z…=.Ïç‚ÝM3 Ij/!a¼G®P(§¹2ºÜ	¨-  t•² "ÆC^¬q€ëÝ_[;¦Æ:²ßó?îºx%mèqÒ;RÔJÜG{«yîÃÞh7õö"<ÏUj¿Dœ³Â@oqý§µ´Øm  Žƒ3·Li“-Àü@Õ¨Qoµ9à“-'BõÎBƒ3˜‡ipœ3Ö²ùk›ªBŸsà3cÔtµ’·MÔ5ÿóà¨ï'Æ8™©Ì Ñ0]õªÖÖ¶ °°ré™Íf–¢jêGÃàVHC*»K„ÿ|OH¶ƒVç3³<ûü^¼´ç MÏÀq²iÅ,FºPÈ¥àØÎ<ä¾8ˆ`ŒáÀÁilß±û&§05=ÎÙL
½÷w"erØŽ“$åºí(¬½—ýöP©Ø]ï}Ã¹¥+Gö}å{­9'´-  pÆÐÝY4ó¹Ìòºôõ®Å:¿ûT5*ãÄ§†Ðªmej¦,~~÷ãôÓ;Áƒ?gwîÅƒSp…\½]E¬Y6ˆ“6.Ãy'¯=yr× #ó©ÛZ!¸dNÌ—(j-v·¾wí=(núåCtÛ¯ŸÄož|»öLbòð4ÆPÌg02Ð‰c–ã¬­«pÊ±"m™”|I˜"ŸéÍ 4¼ù˜•}ãÃ=ûZÉÍEOw|å#¸é–ûÆ^ñÖ›ÎÆ„WÊû+:ö­·B_OÆM xüy|ò?ŸÞñ0öìß–Í¤°iõ(ÞúÚÓqú–0Ö„ÏBÃù$yçÒ­¨š˜â}ÝàD®zDb—óÐÄ B¹bã'w>ŠO~õg¸ï‘gqxz64NwGgŸ°7\y
Ö-‚ãòI{õ[<›B°ã5€ÉéÊ3O½pàº+Ç~1zÚÛ›àQZîZør¤ùòÇñÈw­\:Òwg¬P…æ@x'÷Qî§ äsÁ=&æö|×ž×P„ŸÞñþüßÄÍw=‚©™rdÊÛwìÁí÷=‰”ebÍ²A˜†QƒíI›¼å‘òw_IS  öÀa§Þô]ûˆÆâËßÃc’ÞûÒFã[Îß‹½Êxo…Hi42!"LÍTð¹oÞŽ}ò;xäé(W¢ì¦¦gñÐÏã¾GŸÃÈ@Æ‡<ÛFtØÞ^ÔíI6H8QÂùîšW>üÏŸþžŽÄEm#  àô–2c€È hŒD!Ò[6Ú(w ÖèÊN'¸Õ?ï|ài|ô_¾ƒ.qIv¼´÷Ùàë?¼¶£Ù²Z‡#ãðüövl»·aÖG[Ì@·tøíá¹@0Oi4Ôb÷áfŠ4Êv¾òý»ð÷Ÿÿ!^Ü3™˜Ï÷=ºýçoãî‡žñ÷qöÈöâ¯e»ãœ¥b —àú+NMŒYEm€jå”J…1"ÊÔ„…Ž›jÌ0
gŒ°í…=ø›oÂ£O7¿õ{ïCøø¿ÿ·Ý÷$S©–QË	°'^úÐàq;l$ïçŠÀˆá–{ŸÀ'¾øìŸ<Ü$—ß<ù<þö³?Ä³;÷1Wà(rœó*M#¾-høÜ³NµÖ®Z6Ç4«Ô U¢ÎŽüc,Òý/L‚7GåŠoÝükqÇ}OÎ¹@ÏíÜ‹/|û6ì=p¸½Lè!"Âîý‡ðùoÝ†ví›sz·þêq|çç÷‹J%je bÄ×Ð®ÎV^~Æšôp_±%üXôàºËN1#•¶¬>F’º¨R{ýNðÒGxž{BÅè€Œ/îžÄ×~pUì$ËLzúù]áž‡¶ÁàÍWóBVçÏÃ<_ÞûxKÒ+Wl|õ¦»é¥½“ÚÍCþëÚUí¥ö.àˆœåÓÖšñþbn´- ZCgŸ°
ïÃ9%ÇqŠ­RÕädâXã€{ÞŽgžßÝ²²í›<Œ;î{S3åÈŽw+ñÜi.ÓŽdØUáOÏâŽûžÂƒS-+ÑÓÏ½„_?f¯‰sÖct\"B&m[&+÷•Z‚}Ñ€36cÝÒÞ^‚èñ¿Q b‘wÏxUÒ+}»¥Fë8w=ð4fcX¢“Ð½?ƒÉƒ~k±np0Œ»JÃÑ}‚<@¤Œ<#`œót…¨>NáW´t?fËÜõÀÓ{!šž^^19=c¦l÷e7_Ùì‹Z 0"L¬X‚ÞîŽ^Æy] xjƒ4l/‘ª±ËËÚ¤Œ*„Às;÷´|Ä}a×>Ì–+L¬¶×Å{ðEµ¡O»‘/;Ñi8þòÉ,¡¥°F§‡_ÞŽ†½7ˆ]• ÌÌV°£s/9ŽÀs;÷Âu¿

M7iKÞ}B¾D€i˜Ö
¢´‚µ  X1Žîîâ€i}ª‘¹PõX³Ä%Íõ‚#§WPÔ|ù‰°o²uj©KNA¶)4:¤Ü¡uØ!…õb÷ïE¨žš#óÎ;¢{q05‹0Ä†]ÖVˆÛi©úïRu5AÕ~TË”ŠN˜÷§65^YÝ…ÔÆBÖjIß]Ô`ÃÊ1 §!“Jwš†‘‰öø›/ƒX5ÝlÚšc:AJ§L0ÎjNËÁµéä+Q#yô9†ñòT ýó$ Æé”Ù2þº”I[Þ®,cBÍ.ÄÙŒ•
™å£ƒÝ¼­qQ€WŸ¿Dd”+N?ÕKm\Š³.-G‘V<yõu·Æ²ë¥Þ®",Ó€P*6	0‡`W§©á‰Ö×Ôï£ÂÇÅ_û¤,½]­å3ÐßS
Ç®Ð)5þt÷sHÎYD„TÊê8cëÚôÛ¯9{ÎØµ X·´×]¼5Mp|#ŒÇ‹,8¢É¨¸P;5È3*0"lX5
Óh­wöº‰!ä2©†‡OØý~:Ì
ìç*uWmQç4„c¥Zù\k&[ÊcÓ0°~åH}*§ôzô h|ÔÓ/]OËzpQX71Øwþ)kçŒ}Q€ñÁNl^5’µ6R}Bh¸åïqóöCõÕv(dg'¬_†Žb¶eå3Ž­–!ŸM{ö%Å<aGÕ)5ØCÓQñ"nX9_ö°<à^Ì¥qü1Kçä!SW)‡­Ç,×%_€à‘î^øÑ¾¡¸±	Ž ®ñukæ~:Ð¢ CC}(¦3é5—ZUW]MÙ¤(£ƒÝxÕ©ë[¶pìºql]¿L{€§l˜öðtâ¦¯2–ÊØç€Õ-Ü'mZŽ«ÇšŠ¯¢‹Nß †ÜMAºAÀ-‚º½hÛQ}_Jµü‚Œ³ŽÞ®ÂØÊ#sÆ¾¨Àài[Á3ŸJYýðIÛæ7ê6÷£z6¹¬…×^p<–ôÎ¹l¹l
W]p¼ìŽãW7Õ½w:Ìº9«<
ã…*½p¾$ÇŽÝqŒ÷ˆ«.8^´Âèº|I?^sþñÈ¤,ÏmÑqxƒ¼mÒ“†Å)ß[JaÉzŒt5—vµ  N„è4NšÆ›¨îâŽ®êFaÛVŽÒ;®9…æ§ç¸æU[qÑéI‘ Q£kœ2Í±Ñ'&Ðá«Þ×réY›è5ç7§©@W)‡w]{6Ö.¢Æ)AsÕ‚ÜàzRõ¸n¢ìê‹Nš÷­ ¨9úaXÃàJàÙžƒš>!¦‘¾ap¼æ‚ãñ®×ƒžÎBâreÒ^{ÁqxÏuç¢˜ÚÛÔŒ:=7\ÖÜxÖLüR!‹÷ÿÖùxõ¹[šZìë*à=×‹+Î=k¶5·ÂA f+Nÿ~ûÒÂºUKšÌ»J‹ú@¾®‚ñúKNº¼»#&‘oM®(´.¼S
©OÒ>WÎ±aÕúºŠØöünì9p(ÆÕ „¾®"nxÍix÷ëÏAoWUÕ?<N¾f°‡¥>é>Œfo.òÆ)ä28vípÎðÄö]˜š™ŒËaÍ²!üÎõ¯ÂÕ¯Ú
Ë4bäb†9œ©O™§§gßêÞû™¯ý,1\ZÔg.ä¹lv ¿ ”Oóq¿§üøŠM|º;íTï m™xÍùÇcË1K¯|ïö£[ÂŽ—öaòð*µýœ1dÒz:ó8~ý2¼þâ«FYÊ2Ö÷U¾ÿaaT~÷aØeÒùóûÎWŒ¸“P‡].êÚ5oúºKxßÎÇéÇ­v¾øí[Ù]<Ýû&15]®þiù\ƒ=%œwÊ1xíùÇ;£ƒ]Œ3Ê£æH±êâþ]¿|H[ÆøH_¡gùX÷sÈlq€ŽB†w3ãDU?9ßlY{ã«Çà¥¼+4ØøäûâTTãÆ£}ì÷n¸o¾ò4üê7Ïà‰í/bïþC°mÅ,†û;±yÍŒvÁ4†š+®k&Såu	¦§»ªóêÊ“ä]®(ÌQ¤ )ËÀ‰—±-k—`Û»ñ«ßlÃó/îÃ¾‡aÅ<&Æz±iõº;
àœ1UÇ×ñÂÿ†F€î9_§9yÒM¥ÌžL&Û1¸z[×/Å÷?•˜À" ï¸ö< "k™FgµßRÄÞÛ¥j¿}õõÍ¨ØµoÇqÀjêý«N[WXu¿8Â©mñÒ–:_3ø¢Þ…‘nG_\sQýÃpQµ¿,íÃŠ%ý>Dm‡§;¥’ùœì2Ó0ÿÅèQ}Ç™Á*¶èBïå8cë¿6- ­ðªWmÁ²ÑžnÇi·ó“çŸšZkø¢°† hPŽ#`Û*µm;°§¹CtçXžfÏhUøÖ¯2Ô4È|¶aÛN¨=%öØ.* lÄÊwñ¥K†c&¤E+ Î~Óùí-Œ "¯×SMKN-Q¾à¾ßq—Ö’„Óåç;iÞQïâæö>ÌŸ ÉÒd’²']‘ äW¦Ú\Ó²ÌõòÎKS}Ý	mÐ¢ U‰}:;
ÃD”/Q¯¯}=Žâ´Ü€ÀU=GWkl	u<jÄ«·sùŒÍÒHjgÀo]…]LÞ¼¡
#óÓóÞM3°’¢Ã.;Q8fŽ6ížÇÂNúôµÎRM
sÍx_Þê*4ïÐ´(m n=uwÆ9gÑ‹í‘öxêZnEuAõ(ÂDÙ™¤pÞ<•;—åxr9¤G1±âªò–±EÙ˜ç8p§náº_{±{p©°é¹7€¥7˜…ÿXr%y™»’9zŠ9èd3Ö ²ŒÑ¾X´(5€µÃ "Êf³½œ«½8"í¤“ðªÑ ¦	4ŽxQ{ãÖ/šQì6ô ¬û4€u×§8¨¦)v9í&)®ÿ\Ï{cøRøù»Šw:MÈ[žxÊ“ŽHz¤Ò Âø®áŸ÷yÔ5ó²8g=gœºÍÒ¢Ô ®<+fË•Œ(Öwbiüÿ¤N›ˆäFòN·ä£ìhQù‰-"Á|5²Ü!* 5Ç·¦ÀNqË@ñ‚éê€äøºüe!íMÎ^jsRûU=X¹|qK.»/ª¤:Z”`ýš¥°Á;l}~ÝNáTR[zyQŒ‘ô¨¤8Bçh¥¸BGÝ1Îeä‚(SÌgWæ·›E½(À†‰~Ø·¯ƒ3ÄÚvç­ŒPaÇVWNc.izÓ¨@á½¤Ê·ìqól†ó•‡*þ\y—Û¦’.AÃ¥z»
+I¾¿>-J°rb¿yêÅNÃ0ûªO$,|]×Q÷Ô×` UÇMJJ5OÌ}DÃ¥êdÍb÷æSû›qÎ8lÇ‰Ü› MS‡k®üãµ@‰à¥·ó+G|•À£¬22&­^:d­_56ó•ïÝ–â¢3X1‚ÞÎlW:eô	¯'F\µjæi,söÒiEÃKK³á¤¸gxè±çð™ÿ¼>õBsÞ{aq¾xÔ*aå,eh–)pÁqœÒ›®<£óÜSÖ7qÑ	€ËÎÙà€x§aðTõ©÷Ü9)B“jqœJmU˜–×ß¿¸8cxúÙ]øËùoüáß~ÿçÓßÁŽ]{—•Y:ªxîË4îò`C@ÕdA÷øØÐÀ1«'š’[‹N œ´iˆˆÛ¶ÝË2.ŠQÂ;5ˆ’èóªqÑû[En˜°t½Ï)Æ?‡O7/•m!:\D„»÷ãê;øé¿ßÿÅýøû¿=û‘ºÌq±«xÅUÙ¢xf®Øm+1Õ…@__GzdåhgScÕ¢³¬éÂõ—›2˜ŸsbnCÖ-ÛF4Ýwh–1dœ4ÂòÕ¥ÇˆµRÝ$Ó_mË„=ûâŸÿ¾ù“{ Ð×UÄK{'ñ¥ïÜ†\6÷¼á|tsÕÎXsÌ©ïÈDøvZˆË‡$á“
¸|×Ð‰[‚e™Ý½Ýƒ=›V'ÂâÒ¢;ä=o8‡§ËùUËFßœÏe}ÇªÖç¨®ƒÇËm-­EóW]C­ØxìY<¾m'œÚ8Î£:ŽLÏ”ñø¶øøç¾ÿøîm(—ml]¿¿wÃEØ¾cž{q/îôYìØµ#ý]ÈfR`µ=õS3eìÞw<ý~|ëxvÇnŒõÀàGsƒ¡0v–JÞßUbD¬\©ÜÒ»úÚ[»û&Üÿè³‰`,: ¿¿]™\.;çp	 ’ˆÇáÃÿGôr›÷]·“Ê
®=Ç@“vÌå6°sÏ¼ÿ/>‹mÏ¿„¾®"6­ÃÒÑ>ôvQ©8Øöü.üä¶‡ðìÎ=€ Î8~5þàm—aóš%ìëõÉoÑ-÷<†¯~ÿÜrÏ#8iÓ
tƒ„ÀÎÝûpÿ£Ïâ©çvaf¶‚‘þNl^»ÄêïaB±º ÄUnUü9ñêÅ·¨|ëáX#0mñXð,„ÙÙòÀIë‡So¾ê¼™/|ëV$¡E' Vœw-~~÷_d2™L7 È{Òë.»õçªcÁ=žj>ßso0„×uþ0a K+ªÇ§uMö$ê™ú§lY‰víÅs/î©vtw
ù^}Î¼åê³01ÖŠ#pìºeô—¼ÿúåŸà¿~x^ØµÿyÓøŒúºK¸öâ“ÑY*ˆ*SÜå:ï#ººpÓ‰[:¿8<—íOÑÝ#ê–ÿÆtÉ+±‘×^v~nxxh&©ëÂ¢ À8¡›iÕi7·à ÉˆtÁP­+ÇýNR›óáAçÁ^Ìeðá·]&Î9i~øËéþG·ãÀÁÃ¨TpÎI™bÃª1ºäÌMØºaÙLN¿#–ŽöáÞy.;{¾ûóûqïCÛpðð4€”e`¸¯Ç®Ç'¬Åò±~¤,“æt¼VÔz~”à‹âçœ|ä<ë{Ò] õ×¾¬Ä4ŒãÃ}cC½{’²ëe6Ém}ùã¿ûê7-ÿ,gÞ­ÀÕ
ð78ïFÕ7œ,rÎlG`z¦ŒÝ{`jºŒ”e ³˜ù\†8¯^­v^Ÿã8˜-W0yhŽÈeRÕ‹L‰ÀXU5nñMéGQô"\ôÑm„™ÙÊ‹ÏîÜsîÆÕã÷—6¿1„E¨€
¹1€LUÇöŸy\Þ
6êÇˆyw÷E†w£¼><Ï¥ðZ,Þxqò×ao`qËÏˆM[ÈõÖÃjlzTO—¯µK.‘NYžçþ0sÃž¤ŽTù¨Ë¯Þ*¾ûÛ™÷Û#rƒG–e”¡P\5†\ÆÂ¡©èÓ]ZŒ€JùÌR¤Ãàý•é¡lÞÎ­œ¸ïÃ¶óJqëAúÞ•	•æ†ž44ïµØUø]þ@L*©Ru«q„”ž%Å®ÃíÉKÉs)žðbócW—šj õÅ ¢›ö…@XÙv†9åJÈÑÔ
ZŒ€u³ÃÄdý«1Â…à0À4Â,¹ž<ê$ ðžpõÇž´TN™†Ê&Í7åQŽü£Œ{h¾ª°òJ‰']_ž¢ñÛ×æ%ì¾td)H+3IÞÇ/ù%ã’ëÃãºë!êØÝâëpWPi¥5âŒkŽ?v='"	hQy^qÎ»vÜJYfWãæU?É4†Ícïjqˆy>ª%AÑOþõ6Cþô¼áTûêždnžÞ¸¾€Á<}kØÔÀ\OGî\2v‡IýÑÞ!ç)ó@•¦„¼éx:˜Ï6#óÒËó8Ø#ø…9PwßªS‚m®VC,m+OÞ8n$5š.€¸ðôxø©JŽcçF•Ñ¾eU<
I3ê‚µ7<L”]6Lí'uxÝ…)W“öãÀaºô¼Š¬ÄÀžˆç‘ bI05S¡;F¡á€ÎBf¼·#Ç“
€E£ìZLŒ÷:Õs C—q¢+ma¬Ôª1"<%	?ßðãb‘ëf!±'Å’´ŽÆñ(¶z3i+wõE''JnÑ  Ø|ÁIèïí ÆJuêLœ-±s¹ô¢ÕX×B`9šÊ&!‹J¤{ºŠ}oÝ¹‰R_T æt—rƒœ±’rðNèØ¡ö-¡ÀÇKqT´°{ñÂñ$»°Su“7~3ØÃ°…=Ozã|7aÒ²Gñ"
w3˜C¸½ÆçŽ@¶££4vâqå¼hl ÕÃóè,æúLƒ7€¼w×Îøó<ýqÑ÷Û%¹çN·<é½ôR…ÇNNO•V!ÐŒ¡Ë+/â\}ÅËfð‡ñ¼Ú\Z]á÷áêÙHDù®RaÂ\~E¢:Y4À%gn‘aðŽú¡a~å‘ÃoÅ¼ÕÌuwà%]UË“î5jEôêÆÙÀmµNŠÛÏÏ$Ø£Ò—ñyã·’çsÇb_ˆ±Wƒs–éé,Ž@6\_4à¼S7â¤Ë²•ŠÝ£´²&ÝæÆS>Ó’4ÜäiÇž½„”Eß8[ƒ]óvNZt¸qnn¸ vÕ@V™Š¶Éˆ2ÑODüÒsOˆû¢ +—áÌS6ç‘ç P—B¶’&ª9MÝZ¶bM;Ö»$¤[JÒåá)$m]¸Vcã‹bÝ?t~U/­Â–¿÷gŒÑ¿ö·_û¨n×®ØNéwß|Qñœ“ÖÅF»hl KGûñäöçê¹–´õ3ö)¹a^~¯‹ÛÌ2d‚5ñÈß2?âàj_Üªyp¶¸>qóŸKÜ(,ÜqÐ¾iW°y
¾uk–wõî[¢E£,êA_g¾˜2AÀÄ)ÆT?Iƒ™¥¤y\žò•m—Á’b™Wìšôbíõ?2íÅç¿V÷¤¦ÁžÎþUKã_¾(@:e¯\ŽŽB¶I›=ò&µ61“ÃÌ5œ&Nºas$‰¶YìI(îYü­Äž”ç:»÷°‘#Õ^êEoLÒikp §00ºf´¾Ë2Š… Ø¼fÀf¢’a)yNÖ¨WÅ\M®\¹RÜåC]8ß²¢›M£cTþÞôâ¾×BÔ,vÅé\òsÕrWö¸ù¨°'åy{P/›m/Õ¤ lÓàiƒ³ntž‹+Î=.V-
°ll DÄlÛê]ît A1ŽxòGN6j©âÆR/›È7Žai®Ø“RÜ2Ç5ŠÍWþó71Ïý›±tÑmÛî""vâÆå±X±(@>ŸÃæuËÓ4G ™xUrõUËÝB[^X>/gì­Îo¾±Ïæj‚MÇt@£¸áÕéÑÑxv€E! Ò–‰MkÆÍLÊ«×V´õþŠ~G©ˆ*µPO™u­#ì™K•Y55QÅK‚-ì½§
Ož{±'±M4[6æ$ØýÀá¶5w~êæìynpcÅÚå#ÙánÄ¡E±hýÝE3ŸµÆªv¹c{ëŒ<Šž0®Ý@3kQ7êyÒK+Ã„@Xø88›Va¤·¬a<Oó^^ŽÂždzåyï÷¬tMÁ±*Jä²™±¡þ®ÌÈ`¬‹¯‡pÒ¦•È¦SV>—ŒÓ@š8Â©E*â‘RÇçûB/36ûÈàöŸ,®VR£}S	Ù´12(?Ü_Š•ï¢ W¾ûÍ¦
ŒóLœð²—UHÈ˜átDPÈh®ÓèÒÒå¯ÊGcÄÅ‡$¸uåÂÞZÍóäáü=âD ÀTÉÙ(—gû0~y,ä¯ø)@•WÝ(å³ýB ¶8J¾/)‡$)ˆÎÛ‹Bã¹xñué¨¼òÜ¸qK®N#ˆU&
;BÒï•§/Oë±ûß«ÒMÆóxØ#9ñ[JS;lä) Ã°RcqÙ¯xÀ­¤®®Ò(€TdŠ[)‘	…àQw®xqç–¿”b“ØÃF¯øüÒ—§õØýï£„w4Æ¹aO’^Ü2ÕÉÈ¦S«z»b]ªøŠ @Uuê(dG‰(Ýdá–r)Hüi£ÞéMW“e¢ò«­ÈäIŸæ€=šeÍ`V}ËØ]ŽfòÒÅkö¨ÃIš³1‘æo_Þ¼£TXºnå’X)¾â§ 5¢ŽBv˜1JÕ9­½ÔúÚ¨©`¤Ù ”ô@ŽÆŠCõ;ÌðïõSð¼U5.ïaÉÃø±ëïðÔ©ÛáÓ‰¨ƒBxÂù®/›îüý(ìÑ<÷òMG\ºàËÆ£?Á¨KöwÌcV.©<ðè6„Ñ+^X¹d  x.Ÿí©^9%SEzÞ¥}Õ¤¨ç){yÉ‡G„"A>ïÒ¨<Ã0ë°{Gaÿa~ìªãÐ¢¿h`?’K‡= b”¿~	¬‡‡:ìê#º£y®Ãú^glÅñòµOsnãª‘Ž·_s¢è¯\xÆf°ŸÝ›68/úÆœ€'¦¾1÷Yj#&íT“\×;¶K9r)¯uGag¬)ìQ¯D…ÄEDÉöëIB=‰·h"¾Ç*Cô@U;.?44Ð76ÔóBTŠ¯h@œyü
2¼Ó¶í’[ù"™Y×Õ[€¼Ó)—Â…|7Ú$Èß&I‡%¶Æ¼BýÝJìMâ®‡×ñ5æây ¼œ·ªN@Š¾í¶$g*ÅT´š'ËwttžxÜ†_#‚^Ñ@`ë–cðÒäl‰ˆ
Õgžyc~a@äác˜ÜãŽ<I=ßTq¿ãÆêªo9Œ*¿¤Øe,aé©:s\Ï»fž…=×	ÇPìo6±5•ˆ•(©Þg2*uv—XËÆ#szEÛ †V­B©£»Ä» ÿœÒ×ù5s=ÿ@\²5.„Í§ÕÌ²DR7Ö¹â×ˆs-o«0‡ñB·e·YäŽþÉíP®MÃmÏ¦Á³½¥ì °Ålhr¯lÀÐµ½ÙÓ`.³\‡–€J§ú»å4ŸiÏWþ	…_ìd£—µæŽ}p7…½Iœ1Ú¢×P,DuàcätËUg†Æ}E NÀºJ¹Ë2:ªLbuf¹ÌX“ÃTÐÆ¨5Õ{/Å1<’â;ì–†LB7ê;¸Ü–,ß8Øãd“ò[N;,]Ýw+°Çi/×4"…AÃ¯¡R±»ÞyíÙ¹cV-ñŠ ¯¿ôd9Btø— ½ËA5çÑ#¥¾ôì|q:´Lr££´£ðêp6‹=ltŒ;ÕJ7¬LQÂ3Éô.	ö$¤&!žBqîGpl9vCçÈÈph3~E€«—`¸+“*—íUåÄ^>
TBÒQ·ºÙ¼ta›ÕšUÿãtN…©{+:d„1.²ìqp+òP,“Fû˜øùÅ>Ô×ÓÕ5:2j~E€c¸ð¼SÒ`Ô[g_¨{fÄ­3I2o…N÷>,¯¤ñZ‰½)Ã—*Ÿö˜fy¡Kg>xÔŒêÎ®öfô
˜Æ{ “Jõõv—:V,Íö- ÆF‡°qÝÊ¼eYK«ûXH»<4êípÓI¥®É@êHŽ¶g7®Aê¬ð­Äžô Ñ°ðQË}q°ÇÁíþVñ<l­?
{X¹Ãp#ä°È_x>~¾Y&+Z\t`p=.>óXmzGÌàÏþî›ø³à‘[Ÿ¤4fˆÙÓÌ®”ÉHeœÃ”wVž¸\üÙß=‡?ûÀ¥-Ës|¨¿é*f²©Tãx÷]•oAÆû¤±?p85c?ˆÛø“¤Õ®Væ×Lzº%¸ùÂ®Š×ìRh³u§YÓ×–þÁÇ UÊ³Ý@NÞ¼ßþé=Ê”æU <zëW0U1¨3=çboï[nß¿œA›¹™-šUÈS9Q¾}ûmÜDŒÝ÷æŸÿóÞ%§½½%ùV#wÇƒÙLÆŠw>’Ï·]-ærEv›ÚÔò®ä@ñ]#Æ‡Ï:y³qÃ5çVt)Í‹ xü–!ÁÓlf"Ÿž9Dç1bç (Â‘o¯2'q&7ØûÐ3ýçÂþÊ=OÝ~ËN~ÓÜ€ÇAˆo9£ìÜJNq„…¼Û­ÙtZ9	ö£…ü}â•óh*››gc×gÄ®Ã(/E –e­¾øì­éþÞ®ƒº|[jØ~çñÌÿÎS&_™Ë˜ÿÓ`ø<#ü+ƒx=€~  ªƒ
8€<.ãœrÛí‡6uwuâ7?úÇ90´ÊHÇ¶{åYb	[âJÒ&’lv¿ã[|Uå¥˜êc4æ¤Ûšç’«Žb¯m‚ITN]þIxÞ
ìþ<½szÕJ‚Â-\“&eŽ÷w­Î‚~ük‰ðÌíÿŽ
#aOpFo àZ‚XJ˜>œh³ÍøG}ôñká`¢ø>† x:G‹Ê&¤ß£î½§]Ý©ÔÛQy„hØÄ‚#¡nDk5öFþ"tkrÔÖßVaW…ãy5¨Žç"´>âbwóÇ&PâÛ&rÙìP6“J‹9m˜9€gîø"P´`¿†ÞK„`Z«v28mØ¹óÅ>Û¶›  °~Õ8O§ÒC 1ùØåÚ_o£1‡7<Šhpª¸ªðnãQåçÂó®CJ_@.¯úØiÿž~ÕÖ×$Ø¬Ðß\ã?Í«ùï·î vYûˆÁÕ<—;³ª>‚ØÝg~ìºñc—Ï"hí%4~¾s&ÒŽ=S\yòzí¶à¦GÆ{¾ú—Õ?œÙM&s>Áþžm†ÁÎ¯R¹•¯2äÐáÃûïºÿÉòe—œÞ4+Lƒcd¨åó¹Aªúÿz*E•µ§Ók/Ã
WV°xït÷W˜;r6>zœJX¾Fôô.ÉË›w»¼ï=ö¨6ÝˆÇ<8U‡¨±Ë|—ë¥ñŽÕy Î?ˆ;Œçjì.ßýØÕ¸âµEGªûª›®…¦Éy?Ì´uÑ” xêÖGçð’ìÓ?ÿ—k9g_e„ëÜí¶‰–A$@DØ?yØþÏïÞú­?ûø—÷ÓHóK‚åŠR>e”òÖ’à1ß#‹Ü4BÊß!ä9šî}½Zê¿ýa¢\{Ã>Jæ*;´
;C8vj»?^#]ÇÄŒˆôuØ’ñ\—v4ö¤íEJ<–¦/@©l¾°B	§ ÷}ó¯Ð=´å™é‚iïfVîw	P/±%TmˆûœþoßrÛ§¿|Ó LÍÅ{íE'¡·³J¥R%MŽð/ùy¾[©•)óõ~Có»ÙtöVæívî…ÀÞžÏ+vb[šJ”*rËH¿¬L äK˜949È­ÔGÃÕê/ÃN‘QJÛÆk!€mÏï>tãWnúé—þûæwï=p€ò\–b®»ìTÜ÷Ø³]BÄ8
\Ü‡Ï·IÃKq1ª–kÂvzÍuJ¶cDå•–7Ž*í#…=©])[«që°7‘‡×ä/r|¡ÃˆxwGq 1Æ„ã80±À/¿ø'XqÌ±8|ðÀrÎÙßsÆ.lÌ84Ã_jÈÒÖ»ÎÎ–í[õØKŸüâ÷~xÓÍw~	À­DØ—€WJºäí¿…ç>ú‰^Gˆ´ªÑûO,ðí]«v¢&ˆa'ö¨x·Î^Ñü5K‚]Ž“¤œI)ìôUþIx4ß<OÒBÂ6ÌQö•qTÖbyéïÝº~Âêïžþ¯ÞÈ'– Xºrîß;fYÖÇgV“ciU[¹Ý2ïxiÿÌ7¾ëýÿþ_?ùñ#O<óM ÷˜"¡®£¤õèî,õð. ¯„MØæÒðuqç_7>²ùÌ–V	ÈVð"IÜ°Á•÷yµ_ù÷x¾åÇÉ^|æÆb_wGsà©_|
ÓS‡ÆL+õÎ‡$‰äyg+¶ó«Ÿ|é3_ýá/¿õƒ[¿1;[¾Àv ÓÍs>H¥ü(åÂçO5qVÆ:7K é¬Mmjž(þ;ÝÊ Ž@qll¬{d°çEU­ øï¿z5Ž=ã5¨”g†Óú{ÎÙÅ’,òüq"J­w1^Ü} üŸÞóÐ?Üøïl{vç„÷ØÀaŒA5Oi–J]}AkB@3'JÔ¹R£MrÃÎ‘¡(ÙœQjá±»ïqb—q«µg%lÔHÔÑÝÝÕ¿võÄoTQµ`ó™¯ÁÉC¹R1ÿÇŒÑáPdƒ™¿ ÄlÇÁƒ=wð_ÿñ_ýöÏþcÿä¡›‰h›iÓŒHÌ”Ë-ëü¹LD„GoþT§Á…23¦AÉï|“Ä{+^ƒòN&LØ†í'K[HaÂ(BØkoBö¾Wåå}GçKìþ¸Ñ<Wå{OæŠÝMB5Øú³gœuwu†‡Æ•I(ý n¿ñxâÎÅBîœ³ßb1ç5²£PíüSÓ³În¹ÿ™ÿç}êó7~õ³òÐ×<*„˜*W*b¦\n’jzÛ5g@Â)6Ö´¹ŒîúÊ–Ó•÷h»ó5ÝºzõãºÒVy';°4ÂH¨êxü=ªujÙIÈßFç« ÊÛ›?ù‹@X÷[Uæ†&æ†Ññ½‘‡»Þç@ÅO}þ^Ì„0ìr}©qËØÃxÞI6FË4
=ùô®G>›	h ù¾Ë±õìWáñÇŸ:“1úåC—ãB8b&W¾öýÛý§Ï~óOmá;DôX&mBˆé™
æƒŽ]·×_qj¾bÛ¥¹§æ)GPi„ÏE×}ï]ItðŽ.¾åF)?5©—×˜­JÇÝ›¿ÜQdìþŽÙhäá|‘y¨Æ¯2¼yœ‚ø]táyîõŽcõwþüiÄÇlôžËKÜÍ·_¦¡ª‚?=ÎD(]xõyÇãsßø™ï½O |øàÍ7¼=¾­/—/¾Ÿ16¾¾ÌÓåOÕ«ïÐ¡ýâ÷n¿ñ?üµ/îþ>€g„³SÓ­ñeZ»jÏìØ]z†éVâgºÛøüÊ jK²æãá†‚…ÞF¢¶æÆ3Pë4ÑxŠË{Dº?ŒÜæä|É{C’£îÈÿßîH^Î0ìÞºñb£¨ŽK³Ø…RSö—M“ ÖÐûí¯By¶ÜwÉië2—¿ê´©PpýGÿ?Üý“ïÑºãN|=çìm©"FØ»òà§¾tÓÍÿÌ7nœž™ý€Ø±™M,]‚‘Ç_(qƒw} ®KîQ—TwÍÉ•Ì$º£«¼–«‡‘ŒÈ÷åÏS_—`W—/z©·ÜÁ2~mÄ¿æ5’GÍÕ[=È«F	ªáTaTíEi°ŽG¾0 Œ÷ŸsöiÙÑ±Ñ)9´¯vØ‡±å+ÇTú- Ì¦Ø@„“‡¦?ý7ýô_¾ðOOÏÌþÀN¡Î ¥KÑÝÝÙifOs)èæìÒ;bÞÉ¯/L´Oº4š´j^Ú_òÕ»ö˜?O9So¢ñ–Þ±«pÕß©ò›÷ûÃèß·ˆç*\sj/ž|e‰&ƒ³ñ±¡žÒ’á ×~]øÜŸ]…ÍWþ1žùågÞjpZÌ[6,õ,"ÂÔô¬øÏïÞrë?|î[Ÿœ<8õsT—øŽìšKj]¥|1eJìò/áZ„C–·óÓP=7LZ«tTUZI=Òt‡aêFÝ‰2sÅ®Ê3³‹!Êuy>°«¨ìqâ'n/ÞvH¬ÆË/Õáµ)Ëêé(ä{;©ÔÀÖÓÎÆo~xæZnš±€Þçˆ¨rÅÆOn{à¡úüw>=ypêg öáwþ­& ô!2Š¦ÁÓ¡Ø=^¿!‰¤6¦QÑ›u‡ëröNåoÖðÔ“ðx¿›ÁFq±«:x+°7KºÜŒr‚wþÃFÔFEQ×˜©6°¦RVG:“Êu,ÁP_žqOý€Ï}ì­Xyö;@Ü<‡sc“„ê¨lïç™çv=÷ù¯ýèSOoßñ# û± Þg¿DD3Ó3]ò‘MSc?¼ÛéÝ÷h€y£€J—0®RåŒÊ§…ùÏ¥Ü‰}.eN‚½ä*Fî ÕÈÚkèk|t"0Æ,ÛvŠÈ‡óNYï{Ï `ÕšcpÓçÿW71~!1¿ÕÇ=k-êœ¸ƒ‡¦íïÝ|ÏOôó»¿…ªÁ¯u.}	hb|Ë‡J–íØýð`×	.µñ†Ôsœ9e˜=ÁýŽ#iâÌa“4Ì°üIóÝl>2îfÓSÅ×­µGØpŒçñÚKÐœÝ^\M@:p„ìJe„(E§f|á Â&t¬%…\údyÈ‹º-Ç¥Ýöøg¿zÓgPõé?b?™F‡ûqÆ)Ç¦LÃè‡Œ‚ç¸f’‹
Â+Þ¡ÃHn€Þï¨OqX2Ì:ìòó¸¸å¼âc’óÕ½WñÜÍK(Þ©>B“–ŽçaB"Y{iLKÃÚ‹ÔGÕý”ÌTjøìS6óŠãÏ `hí%#uã<ÞÐÔœ™-OÝ~Ïo¾òôö¿0ƒ¤A,·RéÌ Ï@â–Ä·Ö-¼³~Ô­µ¾2ê¹Ž\é6Îþƒxš¦[ÜéWâ%]‡RisÁ—_ª²ÉaUØÃpÅÅÝk@# }[×•¸‰Y–µlýš	cÿäa_\ãMWœ‚eKF²Ý¥‹dÔ9ê¾ÞxÏðÌs»ž¸ïám?ÂBXü%êïé@g)ŸÊ¤SƒuFÄÒôÿÞþ$<…c;P½Ua®!Ø#E¿eØÝwþð/â<bÊ^öHë±«ø©u»ôNo½¾• ˜K-ì4|ØoßgW]z6V¯_e˜Æ¸_“âãªªBÓ3<ýüK÷~ó¿|èûŸýËSý]êë)¡«#—ÊeRQy’ß×þN|Rk-ž3XE|HËs¿!H‘¦*/i=H¥üåw­Àg›*}o¾ÀÑØ…þ]s¸Ý`ð\E1øY6Ïß¤+‹/ª<ZT;m6“é!ÆÍ´åwïa¿îRôõõ® ]¡bX!‚ëÔphjæàöçwÝ`Ïoüð‘2ŽjÉ\z„ãäym	0.	Õ»¬ÖÑTËPò'é*ó<*Oe4J†[g®Ø’oØ²š—wIy—Bµ&ö°¸:Œsl/ºÒÄ:úÜ+<¥Ó&NÙ¼ÜŠ!s<ú»ËÎŠ¾JÓgÝø®ºƒîxâéçîP!"pŽ'‚ÓÍNÇ$H(5	¨Ei7»&9×%»£/óY¶8{a€/ÑíU2v‘ê(æú®¾äTßsFD<N÷ñØ=·!  »bï¸õ®‡¶¹Ëm•ùÙà—€wDé´5y§£;ObwÌØÆ™#^Ý‹#“ÏS\­ÆÞ*ž·W¼ƒqIñíoßB •Ëç–y™/&ûÓw_ÙU©ØÍ Žû÷ïìÉmÏ8ŠËe³ƒBh;ñmMcnpÏø‘¢#•çÑt¹gR\­ÆÞªôZÎÓØýŠüãYÀ”BÙR©´ö=fK—÷;BŒFãÞh" ÄÌììd¥b/ð¸_%ƒ3  L:ÝKæJ»…_OÒ·ÂÈÒÌE˜¯Ä˜ñ›Í/.ùy’8qqÏ{³¼kGœ8GªþÈkG©=i|+Ú¯ÛÆ%	ÀˆÒ¥BfHNß ¢¼ òÞÄUXUW$lð©²í,¸õ lG “2YG!;Àˆq§ÇyW¼Lv]/Uçúx ß¥{¦Z¶‘/ßT]Ó¤…Å“ó
¯Âî£
¯n/Ñ˜u<Ññ.ßuïUžªxGÄ©§¤í¥ñ²ö_½¹Rã;ÂÊM—sF¥b® º;Ø½w À,æ¤8‰ ö3–!WÄ'ÆØQ¡Köu1Ø×ÅÅü`2‰Ûèðõßµ?ãÞ76jxÝ©åOÔˆ¬kd­ 7ÿ¹`kìQ#_3B¢Ø£ò‹2:ìÍja¸]c{už&ªïôžœ<y2 (lX>¾þÊ3ëÏt&grÃ4««ñPK”å²™BWG/íÙ»òæ‹®½ø$<õì®7Œ´ßgƒ”£•o—ŸRÅ‰e¿ŽdüVÒ’ç-»«Fw4Ýó8Ó’VóÍ-C†¹NáÖ¦éwjhMõ'¾$ÛÉ_vÞ	ùÕ£õã÷7cLq}…|ê‰RG!3<:Ø³à@"àœ“ŽÁêeCÇvÒ$á•5—£Õ öò§8#ÓÑNGö0?O(ãªŽ@ÏêU+z–,«	Æ‰8ñê²y”  wªl6Ó½~å¨y¾´Íðˆ³H çž¶C=ÝŽ9¿Ôô_©»ó×§Cz!¨æÂÈ†BÂQÜ|C°4…]•®
s\ìqqÏ{TŠªÌçI±'i/q5#ë1ÖÙÕYêZ¾t¤ÆØ³wßl¥\žòI·á+OzAc¾L€#DéŒ“6ò™Çnºå~,$eÖmFoï=ÝT¿PIÏ0£›—3yˆ7Ä}ï…*ÖX~¤Fîw3Î%Bõœ<ïêZº+Ýøõ]%¼~½Bz§]G—ÂÊÐ¸¥)D}3„û[ÂîÏD]G^¾ûØ¡â9ùÿôÝ¢°«xÞŠöRûS2Ø†ÛWª‘½›Œ8£žŽB¦gp´¯ÎxqÏäôLÙ>Ô`rLj€íX:¶jx°û±ø‘ç‹Ö »»§1žÀ­ã­Ödìe0¡©Uƒ®§©ÁHJé¸F"ØÆµù×ÂvŽ(:+iÒPZ˜eìqHv—Uñ"±‡ç
A$c×$H<)vR³…úzwÇª¯`>ñm®íÊ3%¨É/+e•::Jè_Ž\&…CS3`Ï½¸¯rððH–:¾½È*Wß›¦Ñ76Ü·qù)oÂÇ~çÕñ<OÔQÌurÎ²BºlÁ-‹Ž‘êiA5VUÍÄK2išq§*ì€~
xK¤ç¥œRÞ…M§æ‚]:@5vþ	±‡ÄÓ-U*7‰ÕÃä9çDÜÈã¸ôìã  ìù/íÑN÷`_…ÕÛŠ±Õ¿cÄÉY÷¿~Cé´-+ZÀøæÈE–/º¸a¤•'¦—Y­h<mjSëHu&euùÐÓ5Cí¿+årñ“6M  Ø÷zç^v©³¦†ê)t‰©tæäµ[Ï\±åÔsðÖKÆxéÙÇ‚ˆ˜ÁY©q•™Pð$ÊxåerÕ«ut¤–"÷íÇÞjOËÖ“ÊÂ¯³xyÃŽCïÓ…éÑ±ªó/ÛwàÐt¹\Þ/´sz´aÜX’NgOùÇ¿ûýÎûß=OÐpê–UX7ZÌTÊ³AàæÔxÙqdŽ(5ßAj6Oo±[ëOßª)ÁBa®ÿ£v/@ä`¥ª9Nc¼g|ÉˆÕÓÝYý`êÅ;™™-O…XÂ™È­Ô›Î¼ð¢~+›o1¢I`t°ÇmZ›r§`RSu¢¶´6ëãîªi¸~¾ªÒ¦žŸÿ”•‘³yì^/Pÿq`*ì	m	°‡ÙqTé{Õd¿ª¬ÆŸçêç­k/^ŒÞüš°yÂ˜œ†{;‹™ÞÎj7a *·Üûè¶©™Ùƒ~£qL°5Îœ­éíî¸fâ¤ë°9v1[GË'F°|b,GŒu†â§šm@û]û€Õ–½•¼1Ç–ùÂ6>ätEm¬Ý6*YîdÆìO7˜ŸêèvùæÛ8ØÉ‡½JÁkÅ$æzpê:š?yéxîçaìú{ûÜ¦µ²Pöó\æK|ì­i/žWã¯'£ÙâîS
ªï3éÔpwg13Ø×Ð œŸßþàãÂû«‰5§æQšÆ[Ÿ¹ýs›¾qÛg›Jc.4::†‘‘‘¼i½õub/ãC@ÌÁN£:M68B&Q•ý£}µVý@x;”¤â™üñîöcô§Ÿ»Ä÷ó'ù.¸ †¼ž»Qî Ö‘dª"Çn Š‡=¨5Huˆh³íEÒÎ½„ìÒÒÓ™tG*“M—†ªGf2 xüéç^Ø³oÿ“Ž£9¢)Œ<b”q¾ÎJçÞé°LþÙ»¿£P­£þ¥#èì(æMÓìò;iÈŸ"¾uÌ›‹ÅUÃH“V°aÇÇ˜4ùyXºq°'áQòü“ñ".Ï“LqçÚ^tïb'}{Aã†í8yt­P b÷Þ‡î~à‰‡mGè/óˆ9‚2ÆßdYü·wm˜}ço_¾eÔ1Žb±K§S=M-5ÌD5$o¸8iE½kN#Ó¦kÔ™+v/ŸZ=*ï8¸æZ¶¤Ø[ÀóÖµa&ìrP›˜&€©{ïìÎƒ‡¦¦H¶šx:~U³N'õÄâŒþ¨otâÊ‰u'Ð¶[?ÓBfªi|¸À¬”•3L£àW‡äÆ“Ëžn™¡©« ¿ï•ÆÝsc¥9žntÖQ˜Z(	†f°‡åOM–9–J7Õƒç‘õ…è<ÃÚ‹·ÍDáN*“ômŸqÃì%""˜c (?øÈÓ=õÌú:;üó!ßiZ>FU©>ÃdÔg˜Ö_ºû¯.OfÛoŸ_›ÀÆÕc  Ç®ä¨¦3úæpM¯Íºñ<û²½¯¨öGÝiÊ›g¾M¬ÞÇ<¡0NÖ/¤0>êÓ`B‹Vï\vJ€<éÔ©äg_=¬”ž»¯c‰`\x;ùë@f$é°‡ñœùyNž+±“{T{‘Ë@	ÚK³
€7jòl6»lb´Ÿ	0Ûq vüLÜvÏCÛŸyvçÝårÅ[„é{2ðÚ_ÂMë¯³ý7œœLýæo²Ñ´d¸DÄ+åÙ>ïó9­Éú—§ÒdÆÈ†$áI ÎÙH#7PYÂ5–8#¦oTQàöÙÒ¼Þº,QØe
)€-ud_¶’TóñÜk	÷J0)Ï ßeÜÂs¡Æâ«ÁÕ^êuÝd{Ñ‘üNÖÌ½ÏÜ²Ì‘¥cƒ¨iàt Øÿ›Ç·Ý¹{ï]Œù—“€&:3FÓø?}ƒÿ#ßÑ3ôë{æCèî*aÅPsÎû€ã½N3ð=—Ž¬²©Z¿. R‡uÜ8È4B Èj V÷–?)v‚ £*ÄÿMìaF.eùšÑü¢âèÊ«j/˜‡ö¢*oX0Y
ùLw©˜k€•¿ðµÞùÔ3;ï¶íª-PÏ–"åG>šÉ½Ÿ¬êY(  À9ÿ e¥¾Ò»ñ²WW*T|ê—Ÿk¢bô”ÍåpÌº5F*eu»Ï\Ìð.éÈ#_:1ow‚ÇiˆaWj$ó–+°'-×|bO‚[ƒM;×Ÿo\ºWšN/ÛëSàªŽÉæúSéï,æ|Gg‹»ö>÷¥oüàÇãƒ§ôõt´‡úò•$Œo]»þm1Ã8™ÿ$ËóïÚ•ÊçŸøÙ'2599Ãk.xo“ŒªR6›ÅÐ`?7³>¨OÓàœª³BT§ö‰Am:ÚÈÓ>ÃÎ+‚»Á½œ¥G:Sç¶é0ó&ààwtÇ/~vûýyµ ÷½o$ Ø@"¼itqÃ¸ÎL¥þ-ßÑõÕ®Á¡kŠ½ƒKÿÙ¿¥ÿYó«é”…ÎŽ¼™I[*è´—fÝ4C¥pXø¤ÎHs«K/éóV`O’çBc¯ØãŒæšéjØWQýÔqs¨;Ÿ¿òÜ-)@-ÁòÞý“}õ›?ùôO?·›©:†›±"ƒ¸×nQ?ãüb3•þ¬aðäŠùfKoÚ~Ç}üæO à{»:6o-ËB6›5rÙl¯WíwqªŽ¾v«N‹õ1\¶¢†ýÖ=ÓÝ#§ªlÕ4%*}5Ó£óÔ…kv7nH{‰}íVö¹tì(žÏ'ö¤<¯ÿ©¼”Z"OG8éÎÎR×ÄÒ1ÿí9–É1[¶þèçwÿlË†•7÷õv]ÞYÊsáß©¡/ßeQ ,ÆÙ
ÆÙ…€ÃÓ©‡SÙÌc/üúë/:å™_o¿óÊûg;	g/Oegfî·ì›´Ÿ{úiç³ûÿ‰á%«à™#ËJ§²*l^MÀÿÚ?ÅqoÅ«ÊUaq„ˆ—nT˜f„@TQy&Åõ.¬½$åy+µ£8Â±•ØÃâÄìSdr<v¤óù|ç¦«ü`¶l€àÉÏ|é»ŸY¿zé’óÏ<~cq¬¹sÙMFœ¯°–sçé) “D4 ì8b*›¸'“¼wxx×¦SN™aBÂ™Ù±ó¥¥Œ¨¾±Þ¡£n€U¯o.ÔŠ†•þÑŒÝ‹ïHñ¼•å?ÒØcð<x\ˆ>^McHçóù.céÆàýyµ ‡wíÞw÷?Þø¯õöt·qU7 *cÓÞ	uØ^c¼ÄÛLí€À§R[ªI ¢6PWÿ& õNN@ª
Šª´°¸IÂÈ"ØF%ñ›i\qeÜ0q°hì?±žÉ<™/ìIð7ƒ=*œ7Ÿ¶JÚ^™L:ÕŒBy%p­gMo~×nu­[5¾ª£˜7«V¿Õ2>y—Vü`ƒóyC$ª7˜0To7nìßb¨nÎÃè¢+O¼6!É«®éæ ÞéK³Ø£ÂÊ*½
»†Jìª©S\Üq±Ë<’>¡ØÃòöt2ŠÂf÷sÚ‹¶ízú@Ì±+¿è[vì/Ãîw ¸ï¡'vr¹þUcËó¹Œ§“©†€v=Ø~Ë»4n¨Š?sñöU“|ó*"R—Œ"VFÂH7¿K8¿ävÔ\•(ùŠµ
{>(pShpÍ<<AùcQBÛFœ<I—†Ôž‚Ã`£ìUªfÛ‹§±Û:†ù	ˆUpàW>>É¤FÖ­\:”N[¾‘VÝY€êaª#•É÷¼Q.½ðîY÷
B]¼ÖÌµU£A b(Þ2cìåÈ¹©WÉÊ'{Ž¹PÃpÏiXÅ©ÇÐ:iSÊr7Å‹àIMDÛqî-®ý¾#…ý‡§¦òŸùZ*mYÆ^{þ±Å¼á¡k	€¨ñ›¾æS¼qtŒ÷’?m÷]Øè””B¨®ö‰¼äsdÍãÑ†}¡¨±¢¥*=Á±EŠˆŒ(À¥©™™òŽ_?ôø$gÔ»bÙÈ`.›ænbþ)€*CHa¼q¼Ó¿v |§²=tTic?ê©Hš¥ùûÜÔÔÔožxðž›â
 àðôôìÎ;õðôM,(óŠøIÕqT³çòSÄs½!:Ý¨C.IúÄÅèÅâ«¤I•Ù({Œ.ÿ0þéø¢ÂÒqmCÉ ºþƒqƒ¸uuÑl{I’ìÉÚKãE¹O5Ò™ššzäé'·}/®  ªBàPÅ¶Ÿ¿÷ÇvíÜµ'74Ð38Ð×•bÌkt'õªÆ”¸Ìˆbª7=õ™lº4ý4Êó°`¥²²6¤6ñxŒ1
ŠÊ£RÕ¡d,~ì^|rxoþÞ*S7(Õ*œ§7„n[±¦öêX¼<—qÉá]Wÿ»‘•‰4<n/AìºðGª½„¹µ{ÀôÌ3ÏíxéûI€ËÑÃ¶í<ÿÐ£Oï|è±§ÑQ,tôÓéTC
ÈK&>¦ÈUHß:)­ûèœ× ©7Ö¸ïåJWé§º’I®Uþ'QOÇÛ±ªqYLì¤ÀŽßŸ¿û›ÕÓóâQawÓ÷v>¯QV¢aøÝ¸Þ6àõÊçÌ+o³S/'û6µFÎ8Øýí¥‘†Ìoû‘h/î¨¯é+®ÁÀá©é^Ø±ó»I€KÓ v¼°s÷Ó·ÞõÀý‡{::K‹s4ì…Z¶ãªX‰¯›vÄU;u‡«ÿáV[}|ï­Vá’©ê°ó“¿Üy£§ Q”Lí–±ÇÏß«éÊÜÊö¦¥ÍW{Qó¬Èbffæ…;w»)ÀclF±ëÐáém¿zà±÷Üÿè!Óà]…\±çÚe¿	6…
™$Û,%M#FÅµ$ß(á;Wìó…;
{3ƒÇ‘âyœ0­l/!m\êD„é™™];_lR xvÏÙ ö;ŽóÌó;_Úö“[îÝ÷ä¶ç€\owG:›I3Šêèq„‚.œ^.¶nŠ¡bf¼QE7w‹—^œiN’Q6.nù[„„Qaˆƒ9*ì\±'á7é5ƒ=I:""\\üªwµ¿ÃÚº¦O¦§f&wíÞû­f§ ^ ¦ ìªTìÇ{òÙ§n½ëÁÝ>ò”35SNõtÒVÊâ–ixæA®J£`h¡ ‡Ú9* dæ&­Õ{oEÇiÌQyÇÉ/vh¾UaTÎ\òßÍ`ÃÏ8Øu<Ð‰§^Â°ë„B3åkf ñB‰Òˆ33³»_Ø±ë¿Z! À9‡Â0É{öÐá©G}rûã?»õÞgo¹ó™ýû
G8FÊJ¹\†1V§ß³Pí”ñçeÑ…Ž9Zƒˆšº„¥Ý’0A/Wì/#ÜqÛ]½ýÅm‡¤ÉŽ05=½ûù»¾1/àŒ1!DÚ¢Àr kF‡ú6ž¸eÝªõk&†×¯YÖ³vÕ²|G)o0"pÆêXg1÷¸eþÿÚ””T;ïäo—Tæk…5Hfw&Ž¶·èÉßgäw{÷íôž_=ôæyã`ída²mÛ0 `Â2Íåý½«F‡ûÇW/_2¸qÝò®5+–”úûºÒ™tšeÒËfRd¼Új“ðœ¢,4mÅë–ÜmZ|¤[*õjDÀK/íyð—·Ý}Ã¡œ1‚eÛN@/€a Ã¦iŒ¤SÖè’‘Á•cÝ£Ã}¥%Ãý¥®ÎR¦Ïšù\ÆÈe3<“N±tÊdé”ÅLÓ$Óà8cÕ½Áœ‘_Gh-(ÚÂ¡M¯$òûè©qøÍ/¼xë—¿þÝ·-”Å  Ò¨j¨^VÖªpè5ÞÝÝU*t–Š…R1—ÉdÒ™LÊJ¥Ó–e†eœ×Ên@€–.*\yÑ™C=iË4êjbU‰Puøà³Ök5Ìë@óò /vßùÊ/’›õË·¾½¨ö¸„waÙa¨bÛ8<5ûzâÆkÞúÇZÐIÔÙ›7ãÇ÷ÞË4i¶\f ÌÚ'…ªpHÈ¢z2û·Uû¸ž‡& Ó4ëVl¸äÜ“Ž=nÓš¾þ¾îL1Ÿ5Š…Ë¤-rU#÷!áZÔyíû¢qýS¤`èT¯F7€`ñzs5¼»Ü#Ìª¼65î9P5f!5jä/ê¶’êoÙiDÎ_…ËÞëýç-wp*/Ûn¼ÖyË5|ñcWñÕË£øÇ½õËåm0O/Ïƒ¼÷û°zp¡v7F`3Ž?v£½P<ùª²…xøë.f¹|²m‡¦¦Å¡CSöä¡){ßþÉÙÇŸ|vÿ÷>ôÐ¿úÍß<øð“?=j­(µŠô.0""FDŽLêT@À2"Ú”Ë¤×¬œY¾l´wÉH©¿·+ßÝUÊuwÍŽRÁ(ä³Fg)oä²V_’‡1ñÇÍrÓ4¯øŠsœGTøÆ|Ñß¬ƒÏã–×Kþ%C¯B¡ÊÓEëv¢Æê×<6WŸäÐ•µÁE
³ÄÇ=ÈS•¿$B[ˆ¨Ø6š²'ªì?p¨2yð°½wÿdyßþƒ³ûLNïÚ½oòù/íyjÛóûžØöüŽ“Ÿrñk ÷ Ø}Ô
€&ÉPÐ ÕéD½Å|gOWG©Ï³™T)—MrÙl¦«³˜îî,Z¥bÁ*rV©˜3Š…¬YÈe|.Ëó¹7Lƒ1b`ŒÈ5nV½!©ú¬úDTõ’$¹rEx¿ü5OTÏ=!^ñ†ÍZÇ«w $B§9
›;ëFouxªABÀŽãTÿvDý™B8ŽÇpGÔž!lÛ3Ó3öáÃÕ‘{òÐTåÐá©ÊäÁÃåý“‡ìý–š*ïÛpvòà¡éé™ÙCSÓ3“‡M<xhêðžý“÷íŸ<P©Ø{¼`Oí{_í³ŸˆfÎ+M x«€0‘åáN)rµO@	µéc,kšFÖ4x–sžåœå9ciÆXÊ0xºËf
…lªÏ…\Öª'­L:Ås¹Œ™Ë¤Ìt*ÅÓéË¤,3•2Y:28çŒsNœ328gœ3bŒÁàœ8çdpFî3ÎqÎ‰Á08U…K-<cbÄ9Õ„g\©U+,áœ‰Ïk…)]€È¤¶‘žÛ!íZ´m[8µiÛ¶¨uJØŽûÌŽm;¶dÛ¶°m!„pP±maÛŽpGT*Õ¿+¶-ÇqÛ³³e{f¶âLÍÌ”§§gœéé{j¦\™ž™­ÌÌÌ–:\9xhº<yèpùðáéÊá©éÊá©™òg§gËSB8‡lGÌ:¶3m;Î”mÛÓ•Š=[.WÛŽ3…ªÞáÚç€I 3µßÓ fkŸJíS¿¯OÏµW ÉÓ	"bB÷ QÛƒû±PµC¸ï\{„k¸´<Ÿ”ç™Qûm‘i™†•JYF&2ÒiËÌ¤SŒ3f¤R–‘²L#e™¦eÄªÏ8çÜ48c©”IDdš†Á8ç°LÎ… Ó08Uå‡aŒ3Æ«WÐçŒ¹Z
çœ Î1Îˆƒap FÆƒ@M¨0rÇ\n0ríÕœÖ6•Ú¨W7"TlG¸°#ªÎÓi…mÛõÙ€í8¢bÛµ¿…°«=UTl DÅ¶x:¨ÕŽíÛv÷o!DÅ¶aÛv¹ì8¶c;˜™ŽíØB{¦\qÇ±ËåJev¶l;BØ3³e§\¶+ŽãT¦gfíÙrÙ.—+öÔÔŒ]íè³å™™YÇvœ2ª®ò3µOþNY®}ÏÔþv?3R<[Šc×¾ëº:+nç cµë9£úFKkõBÕNØ¶í]DeÒ‡ 0FÄ!8ª6
^,¼†£*Ü¿Ýß†çoî	o"(”P{oÕòt¿©öÞk'1cŒWç%#"Î«@×d…AÄªŽW ÕÌÊˆ:@0¸×NÒ"rG@PuTrlÛ©wðšÚ\u'r TlÛvíµÚ@Žã8Çq„SUj§vD5ÕÎ4:GÙó÷¬çÛ®…sGÊÙÚ·]{fKÇó¼â	ë}oµ2ØBˆJ-?[úv<ßn·)Ëª•Ë®ó£ÕÔ G€ˆ@¢1ži¿Î¨b;îÈëŽÒ$ª-]vBwÿfŠ¿üu²I<pœ:iâÎÙÒo·cÊäU]½aÅ{oºÂF›«ú’ÇcdB"Œ‘°mÇ§Ä³Ò¬úý² ¶ x…÷ìêpœú”G¦¸»_²Ï9ÆªÑ%Ûn>­6µ©MmjS›ÚÔ¦6µ©MmzÑÿ-xò…ÎZ    IEND®B`‚function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
  var desc = {};
  Object.keys(descriptor).forEach(function (key) {
    desc[key] = descriptor[key];
  });
  desc.enumerable = !!desc.enumerable;
  desc.configurable = !!desc.configurable;

  if ('value' in desc || desc.initializer) {
    desc.writable = true;
  }

  desc = decorators.slice().reverse().reduce(function (desc, decorator) {
    return decorator(target, property, desc) || desc;
  }, desc);

  if (context && desc.initializer !== void 0) {
    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
    desc.initializer = undefined;
  }

  if (desc.initializer === void 0) {
    Object.defineProperty(target, property, desc);
    desc = null;
  }

  return desc;
}

module.exports = _applyDecoratedDescriptor;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _arrayLikeToArray(arr, len) {
  if (len == null || len > arr.length) len = arr.length;

  for (var i = 0, arr2 = new Array(len); i < len; i++) {
    arr2[i] = arr[i];
  }

  return arr2;
}

module.exports = _arrayLikeToArray;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _arrayWithHoles(arr) {
  if (Array.isArray(arr)) return arr;
}

module.exports = _arrayWithHoles;
module.exports["default"] = module.exports, module.exports.__esModule = true;var arrayLikeToArray = require("./arrayLikeToArray.js");

function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) return arrayLikeToArray(arr);
}

module.exports = _arrayWithoutHoles;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _assertThisInitialized(self) {
  if (self === void 0) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }

  return self;
}

module.exports = _assertThisInitialized;
module.exports["default"] = module.exports, module.exports.__esModule = true;var AwaitValue = require("./AwaitValue.js");

function AsyncGenerator(gen) {
  var front, back;

  function send(key, arg) {
    return new Promise(function (resolve, reject) {
      var request = {
        key: key,
        arg: arg,
        resolve: resolve,
        reject: reject,
        next: null
      };

      if (back) {
        back = back.next = request;
      } else {
        front = back = request;
        resume(key, arg);
      }
    });
  }

  function resume(key, arg) {
    try {
      var result = gen[key](arg);
      var value = result.value;
      var wrappedAwait = value instanceof AwaitValue;
      Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {
        if (wrappedAwait) {
          resume(key === "return" ? "return" : "next", arg);
          return;
        }

        settle(result.done ? "return" : "normal", arg);
      }, function (err) {
        resume("throw", err);
      });
    } catch (err) {
      settle("throw", err);
    }
  }

  function settle(type, value) {
    switch (type) {
      case "return":
        front.resolve({
          value: value,
          done: true
        });
        break;

      case "throw":
        front.reject(value);
        break;

      default:
        front.resolve({
          value: value,
          done: false
        });
        break;
    }

    front = front.next;

    if (front) {
      resume(front.key, front.arg);
    } else {
      back = null;
    }
  }

  this._invoke = send;

  if (typeof gen["return"] !== "function") {
    this["return"] = undefined;
  }
}

AsyncGenerator.prototype[typeof Symbol === "function" && Symbol.asyncIterator || "@@asyncIterator"] = function () {
  return this;
};

AsyncGenerator.prototype.next = function (arg) {
  return this._invoke("next", arg);
};

AsyncGenerator.prototype["throw"] = function (arg) {
  return this._invoke("throw", arg);
};

AsyncGenerator.prototype["return"] = function (arg) {
  return this._invoke("return", arg);
};

module.exports = AsyncGenerator;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _asyncGeneratorDelegate(inner, awaitWrap) {
  var iter = {},
      waiting = false;

  function pump(key, value) {
    waiting = true;
    value = new Promise(function (resolve) {
      resolve(inner[key](value));
    });
    return {
      done: false,
      value: awaitWrap(value)
    };
  }

  ;

  iter[typeof Symbol !== "undefined" && Symbol.iterator || "@@iterator"] = function () {
    return this;
  };

  iter.next = function (value) {
    if (waiting) {
      waiting = false;
      return value;
    }

    return pump("next", value);
  };

  if (typeof inner["throw"] === "function") {
    iter["throw"] = function (value) {
      if (waiting) {
        waiting = false;
        throw value;
      }

      return pump("throw", value);
    };
  }

  if (typeof inner["return"] === "function") {
    iter["return"] = function (value) {
      if (waiting) {
        waiting = false;
        return value;
      }

      return pump("return", value);
    };
  }

  return iter;
}

module.exports = _asyncGeneratorDelegate;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _asyncIterator(iterable) {
  var method;

  if (typeof Symbol !== "undefined") {
    if (Symbol.asyncIterator) method = iterable[Symbol.asyncIterator];
    if (method == null && Symbol.iterator) method = iterable[Symbol.iterator];
  }

  if (method == null) method = iterable["@@asyncIterator"];
  if (method == null) method = iterable["@@iterator"];
  if (method == null) throw new TypeError("Object is not async iterable");
  return method.call(iterable);
}

module.exports = _asyncIterator;
module.exports["default"] = module.exports, module.exports.__esModule = true;function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
  try {
    var info = gen[key](arg);
    var value = info.value;
  } catch (error) {
    reject(error);
    return;
  }

  if (info.done) {
    resolve(value);
  } else {
    Promise.resolve(value).then(_next, _throw);
  }
}

function _asyncToGenerator(fn) {
  return function () {
    var self = this,
        args = arguments;
    return new Promise(function (resolve, reject) {
      var gen = fn.apply(self, args);

      function _next(value) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
      }

      function _throw(err) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
      }

      _next(undefined);
    });
  };
}

module.exports = _asyncToGenerator;
module.exports["default"] = module.exports, module.exports.__esModule = true;var AwaitValue = require("./AwaitValue.js");

function _awaitAsyncGenerator(value) {
  return new AwaitValue(value);
}

module.exports = _awaitAsyncGenerator;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _AwaitValue(value) {
  this.wrapped = value;
}

module.exports = _AwaitValue;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classApplyDescriptorDestructureSet(receiver, descriptor) {
  if (descriptor.set) {
    if (!("__destrObj" in descriptor)) {
      descriptor.__destrObj = {
        set value(v) {
          descriptor.set.call(receiver, v);
        }

      };
    }

    return descriptor.__destrObj;
  } else {
    if (!descriptor.writable) {
      throw new TypeError("attempted to set read only private field");
    }

    return descriptor;
  }
}

module.exports = _classApplyDescriptorDestructureSet;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classApplyDescriptorGet(receiver, descriptor) {
  if (descriptor.get) {
    return descriptor.get.call(receiver);
  }

  return descriptor.value;
}

module.exports = _classApplyDescriptorGet;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classApplyDescriptorSet(receiver, descriptor, value) {
  if (descriptor.set) {
    descriptor.set.call(receiver, value);
  } else {
    if (!descriptor.writable) {
      throw new TypeError("attempted to set read only private field");
    }

    descriptor.value = value;
  }
}

module.exports = _classApplyDescriptorSet;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classCallCheck(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
}

module.exports = _classCallCheck;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classCheckPrivateStaticAccess(receiver, classConstructor) {
  if (receiver !== classConstructor) {
    throw new TypeError("Private static access of wrong provenance");
  }
}

module.exports = _classCheckPrivateStaticAccess;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classCheckPrivateStaticFieldDescriptor(descriptor, action) {
  if (descriptor === undefined) {
    throw new TypeError("attempted to " + action + " private static field before its declaration");
  }
}

module.exports = _classCheckPrivateStaticFieldDescriptor;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classExtractFieldDescriptor(receiver, privateMap, action) {
  if (!privateMap.has(receiver)) {
    throw new TypeError("attempted to " + action + " private field on non-instance");
  }

  return privateMap.get(receiver);
}

module.exports = _classExtractFieldDescriptor;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classNameTDZError(name) {
  throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys.");
}

module.exports = _classNameTDZError;
module.exports["default"] = module.exports, module.exports.__esModule = true;var classApplyDescriptorDestructureSet = require("./classApplyDescriptorDestructureSet.js");

var classExtractFieldDescriptor = require("./classExtractFieldDescriptor.js");

function _classPrivateFieldDestructureSet(receiver, privateMap) {
  var descriptor = classExtractFieldDescriptor(receiver, privateMap, "set");
  return classApplyDescriptorDestructureSet(receiver, descriptor);
}

module.exports = _classPrivateFieldDestructureSet;
module.exports["default"] = module.exports, module.exports.__esModule = true;var classApplyDescriptorGet = require("./classApplyDescriptorGet.js");

var classExtractFieldDescriptor = require("./classExtractFieldDescriptor.js");

function _classPrivateFieldGet(receiver, privateMap) {
  var descriptor = classExtractFieldDescriptor(receiver, privateMap, "get");
  return classApplyDescriptorGet(receiver, descriptor);
}

module.exports = _classPrivateFieldGet;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classPrivateFieldBase(receiver, privateKey) {
  if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
    throw new TypeError("attempted to use private field on non-instance");
  }

  return receiver;
}

module.exports = _classPrivateFieldBase;
module.exports["default"] = module.exports, module.exports.__esModule = true;var id = 0;

function _classPrivateFieldKey(name) {
  return "__private_" + id++ + "_" + name;
}

module.exports = _classPrivateFieldKey;
module.exports["default"] = module.exports, module.exports.__esModule = true;var classApplyDescriptorSet = require("./classApplyDescriptorSet.js");

var classExtractFieldDescriptor = require("./classExtractFieldDescriptor.js");

function _classPrivateFieldSet(receiver, privateMap, value) {
  var descriptor = classExtractFieldDescriptor(receiver, privateMap, "set");
  classApplyDescriptorSet(receiver, descriptor, value);
  return value;
}

module.exports = _classPrivateFieldSet;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classPrivateMethodGet(receiver, privateSet, fn) {
  if (!privateSet.has(receiver)) {
    throw new TypeError("attempted to get private field on non-instance");
  }

  return fn;
}

module.exports = _classPrivateMethodGet;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classPrivateMethodSet() {
  throw new TypeError("attempted to reassign private method");
}

module.exports = _classPrivateMethodSet;
module.exports["default"] = module.exports, module.exports.__esModule = true;var classApplyDescriptorDestructureSet = require("./classApplyDescriptorDestructureSet.js");

var classCheckPrivateStaticAccess = require("./classCheckPrivateStaticAccess.js");

var classCheckPrivateStaticFieldDescriptor = require("./classCheckPrivateStaticFieldDescriptor.js");

function _classStaticPrivateFieldDestructureSet(receiver, classConstructor, descriptor) {
  classCheckPrivateStaticAccess(receiver, classConstructor);
  classCheckPrivateStaticFieldDescriptor(descriptor, "set");
  return classApplyDescriptorDestructureSet(receiver, descriptor);
}

module.exports = _classStaticPrivateFieldDestructureSet;
module.exports["default"] = module.exports, module.exports.__esModule = true;var classApplyDescriptorGet = require("./classApplyDescriptorGet.js");

var classCheckPrivateStaticAccess = require("./classCheckPrivateStaticAccess.js");

var classCheckPrivateStaticFieldDescriptor = require("./classCheckPrivateStaticFieldDescriptor.js");

function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
  classCheckPrivateStaticAccess(receiver, classConstructor);
  classCheckPrivateStaticFieldDescriptor(descriptor, "get");
  return classApplyDescriptorGet(receiver, descriptor);
}

module.exports = _classStaticPrivateFieldSpecGet;
module.exports["default"] = module.exports, module.exports.__esModule = true;var classApplyDescriptorSet = require("./classApplyDescriptorSet.js");

var classCheckPrivateStaticAccess = require("./classCheckPrivateStaticAccess.js");

var classCheckPrivateStaticFieldDescriptor = require("./classCheckPrivateStaticFieldDescriptor.js");

function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {
  classCheckPrivateStaticAccess(receiver, classConstructor);
  classCheckPrivateStaticFieldDescriptor(descriptor, "set");
  classApplyDescriptorSet(receiver, descriptor, value);
  return value;
}

module.exports = _classStaticPrivateFieldSpecSet;
module.exports["default"] = module.exports, module.exports.__esModule = true;var classCheckPrivateStaticAccess = require("./classCheckPrivateStaticAccess.js");

function _classStaticPrivateMethodGet(receiver, classConstructor, method) {
  classCheckPrivateStaticAccess(receiver, classConstructor);
  return method;
}

module.exports = _classStaticPrivateMethodGet;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _classStaticPrivateMethodSet() {
  throw new TypeError("attempted to set read only static private field");
}

module.exports = _classStaticPrivateMethodSet;
module.exports["default"] = module.exports, module.exports.__esModule = true;var setPrototypeOf = require("./setPrototypeOf.js");

var isNativeReflectConstruct = require("./isNativeReflectConstruct.js");

function _construct(Parent, args, Class) {
  if (isNativeReflectConstruct()) {
    module.exports = _construct = Reflect.construct;
    module.exports["default"] = module.exports, module.exports.__esModule = true;
  } else {
    module.exports = _construct = function _construct(Parent, args, Class) {
      var a = [null];
      a.push.apply(a, args);
      var Constructor = Function.bind.apply(Parent, a);
      var instance = new Constructor();
      if (Class) setPrototypeOf(instance, Class.prototype);
      return instance;
    };

    module.exports["default"] = module.exports, module.exports.__esModule = true;
  }

  return _construct.apply(null, arguments);
}

module.exports = _construct;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
    var descriptor = props[i];
    descriptor.enumerable = descriptor.enumerable || false;
    descriptor.configurable = true;
    if ("value" in descriptor) descriptor.writable = true;
    Object.defineProperty(target, descriptor.key, descriptor);
  }
}

function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  if (staticProps) _defineProperties(Constructor, staticProps);
  return Constructor;
}

module.exports = _createClass;
module.exports["default"] = module.exports, module.exports.__esModule = true;var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");

function _createForOfIteratorHelper(o, allowArrayLike) {
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];

  if (!it) {
    if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
      if (it) o = it;
      var i = 0;

      var F = function F() {};

      return {
        s: F,
        n: function n() {
          if (i >= o.length) return {
            done: true
          };
          return {
            done: false,
            value: o[i++]
          };
        },
        e: function e(_e) {
          throw _e;
        },
        f: F
      };
    }

    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }

  var normalCompletion = true,
      didErr = false,
      err;
  return {
    s: function s() {
      it = it.call(o);
    },
    n: function n() {
      var step = it.next();
      normalCompletion = step.done;
      return step;
    },
    e: function e(_e2) {
      didErr = true;
      err = _e2;
    },
    f: function f() {
      try {
        if (!normalCompletion && it["return"] != null) it["return"]();
      } finally {
        if (didErr) throw err;
      }
    }
  };
}

module.exports = _createForOfIteratorHelper;
module.exports["default"] = module.exports, module.exports.__esModule = true;var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");

function _createForOfIteratorHelperLoose(o, allowArrayLike) {
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
  if (it) return (it = it.call(o)).next.bind(it);

  if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
    if (it) o = it;
    var i = 0;
    return function () {
      if (i >= o.length) return {
        done: true
      };
      return {
        done: false,
        value: o[i++]
      };
    };
  }

  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}

module.exports = _createForOfIteratorHelperLoose;
module.exports["default"] = module.exports, module.exports.__esModule = true;var getPrototypeOf = require("./getPrototypeOf.js");

var isNativeReflectConstruct = require("./isNativeReflectConstruct.js");

var possibleConstructorReturn = require("./possibleConstructorReturn.js");

function _createSuper(Derived) {
  var hasNativeReflectConstruct = isNativeReflectConstruct();
  return function _createSuperInternal() {
    var Super = getPrototypeOf(Derived),
        result;

    if (hasNativeReflectConstruct) {
      var NewTarget = getPrototypeOf(this).constructor;
      result = Reflect.construct(Super, arguments, NewTarget);
    } else {
      result = Super.apply(this, arguments);
    }

    return possibleConstructorReturn(this, result);
  };
}

module.exports = _createSuper;
module.exports["default"] = module.exports, module.exports.__esModule = true;var toArray = require("./toArray.js");

var toPropertyKey = require("./toPropertyKey.js");

function _decorate(decorators, factory, superClass, mixins) {
  var api = _getDecoratorsApi();

  if (mixins) {
    for (var i = 0; i < mixins.length; i++) {
      api = mixins[i](api);
    }
  }

  var r = factory(function initialize(O) {
    api.initializeInstanceElements(O, decorated.elements);
  }, superClass);
  var decorated = api.decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);
  api.initializeClassElements(r.F, decorated.elements);
  return api.runClassFinishers(r.F, decorated.finishers);
}

function _getDecoratorsApi() {
  _getDecoratorsApi = function _getDecoratorsApi() {
    return api;
  };

  var api = {
    elementsDefinitionOrder: [["method"], ["field"]],
    initializeInstanceElements: function initializeInstanceElements(O, elements) {
      ["method", "field"].forEach(function (kind) {
        elements.forEach(function (element) {
          if (element.kind === kind && element.placement === "own") {
            this.defineClassElement(O, element);
          }
        }, this);
      }, this);
    },
    initializeClassElements: function initializeClassElements(F, elements) {
      var proto = F.prototype;
      ["method", "field"].forEach(function (kind) {
        elements.forEach(function (element) {
          var placement = element.placement;

          if (element.kind === kind && (placement === "static" || placement === "prototype")) {
            var receiver = placement === "static" ? F : proto;
            this.defineClassElement(receiver, element);
          }
        }, this);
      }, this);
    },
    defineClassElement: function defineClassElement(receiver, element) {
      var descriptor = element.descriptor;

      if (element.kind === "field") {
        var initializer = element.initializer;
        descriptor = {
          enumerable: descriptor.enumerable,
          writable: descriptor.writable,
          configurable: descriptor.configurable,
          value: initializer === void 0 ? void 0 : initializer.call(receiver)
        };
      }

      Object.defineProperty(receiver, element.key, descriptor);
    },
    decorateClass: function decorateClass(elements, decorators) {
      var newElements = [];
      var finishers = [];
      var placements = {
        "static": [],
        prototype: [],
        own: []
      };
      elements.forEach(function (element) {
        this.addElementPlacement(element, placements);
      }, this);
      elements.forEach(function (element) {
        if (!_hasDecorators(element)) return newElements.push(element);
        var elementFinishersExtras = this.decorateElement(element, placements);
        newElements.push(elementFinishersExtras.element);
        newElements.push.apply(newElements, elementFinishersExtras.extras);
        finishers.push.apply(finishers, elementFinishersExtras.finishers);
      }, this);

      if (!decorators) {
        return {
          elements: newElements,
          finishers: finishers
        };
      }

      var result = this.decorateConstructor(newElements, decorators);
      finishers.push.apply(finishers, result.finishers);
      result.finishers = finishers;
      return result;
    },
    addElementPlacement: function addElementPlacement(element, placements, silent) {
      var keys = placements[element.placement];

      if (!silent && keys.indexOf(element.key) !== -1) {
        throw new TypeError("Duplicated element (" + element.key + ")");
      }

      keys.push(element.key);
    },
    decorateElement: function decorateElement(element, placements) {
      var extras = [];
      var finishers = [];

      for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
        var keys = placements[element.placement];
        keys.splice(keys.indexOf(element.key), 1);
        var elementObject = this.fromElementDescriptor(element);
        var elementFinisherExtras = this.toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
        element = elementFinisherExtras.element;
        this.addElementPlacement(element, placements);

        if (elementFinisherExtras.finisher) {
          finishers.push(elementFinisherExtras.finisher);
        }

        var newExtras = elementFinisherExtras.extras;

        if (newExtras) {
          for (var j = 0; j < newExtras.length; j++) {
            this.addElementPlacement(newExtras[j], placements);
          }

          extras.push.apply(extras, newExtras);
        }
      }

      return {
        element: element,
        finishers: finishers,
        extras: extras
      };
    },
    decorateConstructor: function decorateConstructor(elements, decorators) {
      var finishers = [];

      for (var i = decorators.length - 1; i >= 0; i--) {
        var obj = this.fromClassDescriptor(elements);
        var elementsAndFinisher = this.toClassDescriptor((0, decorators[i])(obj) || obj);

        if (elementsAndFinisher.finisher !== undefined) {
          finishers.push(elementsAndFinisher.finisher);
        }

        if (elementsAndFinisher.elements !== undefined) {
          elements = elementsAndFinisher.elements;

          for (var j = 0; j < elements.length - 1; j++) {
            for (var k = j + 1; k < elements.length; k++) {
              if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {
                throw new TypeError("Duplicated element (" + elements[j].key + ")");
              }
            }
          }
        }
      }

      return {
        elements: elements,
        finishers: finishers
      };
    },
    fromElementDescriptor: function fromElementDescriptor(element) {
      var obj = {
        kind: element.kind,
        key: element.key,
        placement: element.placement,
        descriptor: element.descriptor
      };
      var desc = {
        value: "Descriptor",
        configurable: true
      };
      Object.defineProperty(obj, Symbol.toStringTag, desc);
      if (element.kind === "field") obj.initializer = element.initializer;
      return obj;
    },
    toElementDescriptors: function toElementDescriptors(elementObjects) {
      if (elementObjects === undefined) return;
      return toArray(elementObjects).map(function (elementObject) {
        var element = this.toElementDescriptor(elementObject);
        this.disallowProperty(elementObject, "finisher", "An element descriptor");
        this.disallowProperty(elementObject, "extras", "An element descriptor");
        return element;
      }, this);
    },
    toElementDescriptor: function toElementDescriptor(elementObject) {
      var kind = String(elementObject.kind);

      if (kind !== "method" && kind !== "field") {
        throw new TypeError('An element descriptor\'s .kind property must be either "method" or' + ' "field", but a decorator created an element descriptor with' + ' .kind "' + kind + '"');
      }

      var key = toPropertyKey(elementObject.key);
      var placement = String(elementObject.placement);

      if (placement !== "static" && placement !== "prototype" && placement !== "own") {
        throw new TypeError('An element descriptor\'s .placement property must be one of "static",' + ' "prototype" or "own", but a decorator created an element descriptor' + ' with .placement "' + placement + '"');
      }

      var descriptor = elementObject.descriptor;
      this.disallowProperty(elementObject, "elements", "An element descriptor");
      var element = {
        kind: kind,
        key: key,
        placement: placement,
        descriptor: Object.assign({}, descriptor)
      };

      if (kind !== "field") {
        this.disallowProperty(elementObject, "initializer", "A method descriptor");
      } else {
        this.disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
        this.disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
        this.disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
        element.initializer = elementObject.initializer;
      }

      return element;
    },
    toElementFinisherExtras: function toElementFinisherExtras(elementObject) {
      var element = this.toElementDescriptor(elementObject);

      var finisher = _optionalCallableProperty(elementObject, "finisher");

      var extras = this.toElementDescriptors(elementObject.extras);
      return {
        element: element,
        finisher: finisher,
        extras: extras
      };
    },
    fromClassDescriptor: function fromClassDescriptor(elements) {
      var obj = {
        kind: "class",
        elements: elements.map(this.fromElementDescriptor, this)
      };
      var desc = {
        value: "Descriptor",
        configurable: true
      };
      Object.defineProperty(obj, Symbol.toStringTag, desc);
      return obj;
    },
    toClassDescriptor: function toClassDescriptor(obj) {
      var kind = String(obj.kind);

      if (kind !== "class") {
        throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator' + ' created a class descriptor with .kind "' + kind + '"');
      }

      this.disallowProperty(obj, "key", "A class descriptor");
      this.disallowProperty(obj, "placement", "A class descriptor");
      this.disallowProperty(obj, "descriptor", "A class descriptor");
      this.disallowProperty(obj, "initializer", "A class descriptor");
      this.disallowProperty(obj, "extras", "A class descriptor");

      var finisher = _optionalCallableProperty(obj, "finisher");

      var elements = this.toElementDescriptors(obj.elements);
      return {
        elements: elements,
        finisher: finisher
      };
    },
    runClassFinishers: function runClassFinishers(constructor, finishers) {
      for (var i = 0; i < finishers.length; i++) {
        var newConstructor = (0, finishers[i])(constructor);

        if (newConstructor !== undefined) {
          if (typeof newConstructor !== "function") {
            throw new TypeError("Finishers must return a constructor.");
          }

          constructor = newConstructor;
        }
      }

      return constructor;
    },
    disallowProperty: function disallowProperty(obj, name, objectType) {
      if (obj[name] !== undefined) {
        throw new TypeError(objectType + " can't have a ." + name + " property.");
      }
    }
  };
  return api;
}

function _createElementDescriptor(def) {
  var key = toPropertyKey(def.key);
  var descriptor;

  if (def.kind === "method") {
    descriptor = {
      value: def.value,
      writable: true,
      configurable: true,
      enumerable: false
    };
  } else if (def.kind === "get") {
    descriptor = {
      get: def.value,
      configurable: true,
      enumerable: false
    };
  } else if (def.kind === "set") {
    descriptor = {
      set: def.value,
      configurable: true,
      enumerable: false
    };
  } else if (def.kind === "field") {
    descriptor = {
      configurable: true,
      writable: true,
      enumerable: true
    };
  }

  var element = {
    kind: def.kind === "field" ? "field" : "method",
    key: key,
    placement: def["static"] ? "static" : def.kind === "field" ? "own" : "prototype",
    descriptor: descriptor
  };
  if (def.decorators) element.decorators = def.decorators;
  if (def.kind === "field") element.initializer = def.value;
  return element;
}

function _coalesceGetterSetter(element, other) {
  if (element.descriptor.get !== undefined) {
    other.descriptor.get = element.descriptor.get;
  } else {
    other.descriptor.set = element.descriptor.set;
  }
}

function _coalesceClassElements(elements) {
  var newElements = [];

  var isSameElement = function isSameElement(other) {
    return other.kind === "method" && other.key === element.key && other.placement === element.placement;
  };

  for (var i = 0; i < elements.length; i++) {
    var element = elements[i];
    var other;

    if (element.kind === "method" && (other = newElements.find(isSameElement))) {
      if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
        if (_hasDecorators(element) || _hasDecorators(other)) {
          throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated.");
        }

        other.descriptor = element.descriptor;
      } else {
        if (_hasDecorators(element)) {
          if (_hasDecorators(other)) {
            throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ").");
          }

          other.decorators = element.decorators;
        }

        _coalesceGetterSetter(element, other);
      }
    } else {
      newElements.push(element);
    }
  }

  return newElements;
}

function _hasDecorators(element) {
  return element.decorators && element.decorators.length;
}

function _isDataDescriptor(desc) {
  return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);
}

function _optionalCallableProperty(obj, name) {
  var value = obj[name];

  if (value !== undefined && typeof value !== "function") {
    throw new TypeError("Expected '" + name + "' to be a function");
  }

  return value;
}

module.exports = _decorate;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _defaults(obj, defaults) {
  var keys = Object.getOwnPropertyNames(defaults);

  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var value = Object.getOwnPropertyDescriptor(defaults, key);

    if (value && value.configurable && obj[key] === undefined) {
      Object.defineProperty(obj, key, value);
    }
  }

  return obj;
}

module.exports = _defaults;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _defineEnumerableProperties(obj, descs) {
  for (var key in descs) {
    var desc = descs[key];
    desc.configurable = desc.enumerable = true;
    if ("value" in desc) desc.writable = true;
    Object.defineProperty(obj, key, desc);
  }

  if (Object.getOwnPropertySymbols) {
    var objectSymbols = Object.getOwnPropertySymbols(descs);

    for (var i = 0; i < objectSymbols.length; i++) {
      var sym = objectSymbols[i];
      var desc = descs[sym];
      desc.configurable = desc.enumerable = true;
      if ("value" in desc) desc.writable = true;
      Object.defineProperty(obj, sym, desc);
    }
  }

  return obj;
}

module.exports = _defineEnumerableProperties;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
}

module.exports = _defineProperty;
module.exports["default"] = module.exports, module.exports.__esModule = true;export default function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
  var desc = {};
  Object.keys(descriptor).forEach(function (key) {
    desc[key] = descriptor[key];
  });
  desc.enumerable = !!desc.enumerable;
  desc.configurable = !!desc.configurable;

  if ('value' in desc || desc.initializer) {
    desc.writable = true;
  }

  desc = decorators.slice().reverse().reduce(function (desc, decorator) {
    return decorator(target, property, desc) || desc;
  }, desc);

  if (context && desc.initializer !== void 0) {
    desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
    desc.initializer = undefined;
  }

  if (desc.initializer === void 0) {
    Object.defineProperty(target, property, desc);
    desc = null;
  }

  return desc;
}export default function _arrayLikeToArray(arr, len) {
  if (len == null || len > arr.length) len = arr.length;

  for (var i = 0, arr2 = new Array(len); i < len; i++) {
    arr2[i] = arr[i];
  }

  return arr2;
}export default function _arrayWithHoles(arr) {
  if (Array.isArray(arr)) return arr;
}import arrayLikeToArray from "./arrayLikeToArray.js";
export default function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) return arrayLikeToArray(arr);
}export default function _assertThisInitialized(self) {
  if (self === void 0) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }

  return self;
}import AwaitValue from "./AwaitValue.js";
export default function AsyncGenerator(gen) {
  var front, back;

  function send(key, arg) {
    return new Promise(function (resolve, reject) {
      var request = {
        key: key,
        arg: arg,
        resolve: resolve,
        reject: reject,
        next: null
      };

      if (back) {
        back = back.next = request;
      } else {
        front = back = request;
        resume(key, arg);
      }
    });
  }

  function resume(key, arg) {
    try {
      var result = gen[key](arg);
      var value = result.value;
      var wrappedAwait = value instanceof AwaitValue;
      Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {
        if (wrappedAwait) {
          resume(key === "return" ? "return" : "next", arg);
          return;
        }

        settle(result.done ? "return" : "normal", arg);
      }, function (err) {
        resume("throw", err);
      });
    } catch (err) {
      settle("throw", err);
    }
  }

  function settle(type, value) {
    switch (type) {
      case "return":
        front.resolve({
          value: value,
          done: true
        });
        break;

      case "throw":
        front.reject(value);
        break;

      default:
        front.resolve({
          value: value,
          done: false
        });
        break;
    }

    front = front.next;

    if (front) {
      resume(front.key, front.arg);
    } else {
      back = null;
    }
  }

  this._invoke = send;

  if (typeof gen["return"] !== "function") {
    this["return"] = undefined;
  }
}

AsyncGenerator.prototype[typeof Symbol === "function" && Symbol.asyncIterator || "@@asyncIterator"] = function () {
  return this;
};

AsyncGenerator.prototype.next = function (arg) {
  return this._invoke("next", arg);
};

AsyncGenerator.prototype["throw"] = function (arg) {
  return this._invoke("throw", arg);
};

AsyncGenerator.prototype["return"] = function (arg) {
  return this._invoke("return", arg);
};export default function _asyncGeneratorDelegate(inner, awaitWrap) {
  var iter = {},
      waiting = false;

  function pump(key, value) {
    waiting = true;
    value = new Promise(function (resolve) {
      resolve(inner[key](value));
    });
    return {
      done: false,
      value: awaitWrap(value)
    };
  }

  ;

  iter[typeof Symbol !== "undefined" && Symbol.iterator || "@@iterator"] = function () {
    return this;
  };

  iter.next = function (value) {
    if (waiting) {
      waiting = false;
      return value;
    }

    return pump("next", value);
  };

  if (typeof inner["throw"] === "function") {
    iter["throw"] = function (value) {
      if (waiting) {
        waiting = false;
        throw value;
      }

      return pump("throw", value);
    };
  }

  if (typeof inner["return"] === "function") {
    iter["return"] = function (value) {
      if (waiting) {
        waiting = false;
        return value;
      }

      return pump("return", value);
    };
  }

  return iter;
}export default function _asyncIterator(iterable) {
  var method;

  if (typeof Symbol !== "undefined") {
    if (Symbol.asyncIterator) method = iterable[Symbol.asyncIterator];
    if (method == null && Symbol.iterator) method = iterable[Symbol.iterator];
  }

  if (method == null) method = iterable["@@asyncIterator"];
  if (method == null) method = iterable["@@iterator"];
  if (method == null) throw new TypeError("Object is not async iterable");
  return method.call(iterable);
}function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
  try {
    var info = gen[key](arg);
    var value = info.value;
  } catch (error) {
    reject(error);
    return;
  }

  if (info.done) {
    resolve(value);
  } else {
    Promise.resolve(value).then(_next, _throw);
  }
}

export default function _asyncToGenerator(fn) {
  return function () {
    var self = this,
        args = arguments;
    return new Promise(function (resolve, reject) {
      var gen = fn.apply(self, args);

      function _next(value) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
      }

      function _throw(err) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
      }

      _next(undefined);
    });
  };
}import AwaitValue from "./AwaitValue.js";
export default function _awaitAsyncGenerator(value) {
  return new AwaitValue(value);
}export default function _AwaitValue(value) {
  this.wrapped = value;
}export default function _classApplyDescriptorDestructureSet(receiver, descriptor) {
  if (descriptor.set) {
    if (!("__destrObj" in descriptor)) {
      descriptor.__destrObj = {
        set value(v) {
          descriptor.set.call(receiver, v);
        }

      };
    }

    return descriptor.__destrObj;
  } else {
    if (!descriptor.writable) {
      throw new TypeError("attempted to set read only private field");
    }

    return descriptor;
  }
}export default function _classApplyDescriptorGet(receiver, descriptor) {
  if (descriptor.get) {
    return descriptor.get.call(receiver);
  }

  return descriptor.value;
}export default function _classApplyDescriptorSet(receiver, descriptor, value) {
  if (descriptor.set) {
    descriptor.set.call(receiver, value);
  } else {
    if (!descriptor.writable) {
      throw new TypeError("attempted to set read only private field");
    }

    descriptor.value = value;
  }
}export default function _classCallCheck(instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function");
  }
}export default function _classCheckPrivateStaticAccess(receiver, classConstructor) {
  if (receiver !== classConstructor) {
    throw new TypeError("Private static access of wrong provenance");
  }
}export default function _classCheckPrivateStaticFieldDescriptor(descriptor, action) {
  if (descriptor === undefined) {
    throw new TypeError("attempted to " + action + " private static field before its declaration");
  }
}export default function _classExtractFieldDescriptor(receiver, privateMap, action) {
  if (!privateMap.has(receiver)) {
    throw new TypeError("attempted to " + action + " private field on non-instance");
  }

  return privateMap.get(receiver);
}export default function _classNameTDZError(name) {
  throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys.");
}import classApplyDescriptorDestructureSet from "./classApplyDescriptorDestructureSet.js";
import classExtractFieldDescriptor from "./classExtractFieldDescriptor.js";
export default function _classPrivateFieldDestructureSet(receiver, privateMap) {
  var descriptor = classExtractFieldDescriptor(receiver, privateMap, "set");
  return classApplyDescriptorDestructureSet(receiver, descriptor);
}import classApplyDescriptorGet from "./classApplyDescriptorGet.js";
import classExtractFieldDescriptor from "./classExtractFieldDescriptor.js";
export default function _classPrivateFieldGet(receiver, privateMap) {
  var descriptor = classExtractFieldDescriptor(receiver, privateMap, "get");
  return classApplyDescriptorGet(receiver, descriptor);
}export default function _classPrivateFieldBase(receiver, privateKey) {
  if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
    throw new TypeError("attempted to use private field on non-instance");
  }

  return receiver;
}var id = 0;
export default function _classPrivateFieldKey(name) {
  return "__private_" + id++ + "_" + name;
}import classApplyDescriptorSet from "./classApplyDescriptorSet.js";
import classExtractFieldDescriptor from "./classExtractFieldDescriptor.js";
export default function _classPrivateFieldSet(receiver, privateMap, value) {
  var descriptor = classExtractFieldDescriptor(receiver, privateMap, "set");
  classApplyDescriptorSet(receiver, descriptor, value);
  return value;
}export default function _classPrivateMethodGet(receiver, privateSet, fn) {
  if (!privateSet.has(receiver)) {
    throw new TypeError("attempted to get private field on non-instance");
  }

  return fn;
}export default function _classPrivateMethodSet() {
  throw new TypeError("attempted to reassign private method");
}import classApplyDescriptorDestructureSet from "./classApplyDescriptorDestructureSet.js";
import classCheckPrivateStaticAccess from "./classCheckPrivateStaticAccess.js";
import classCheckPrivateStaticFieldDescriptor from "./classCheckPrivateStaticFieldDescriptor.js";
export default function _classStaticPrivateFieldDestructureSet(receiver, classConstructor, descriptor) {
  classCheckPrivateStaticAccess(receiver, classConstructor);
  classCheckPrivateStaticFieldDescriptor(descriptor, "set");
  return classApplyDescriptorDestructureSet(receiver, descriptor);
}import classApplyDescriptorGet from "./classApplyDescriptorGet.js";
import classCheckPrivateStaticAccess from "./classCheckPrivateStaticAccess.js";
import classCheckPrivateStaticFieldDescriptor from "./classCheckPrivateStaticFieldDescriptor.js";
export default function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
  classCheckPrivateStaticAccess(receiver, classConstructor);
  classCheckPrivateStaticFieldDescriptor(descriptor, "get");
  return classApplyDescriptorGet(receiver, descriptor);
}import classApplyDescriptorSet from "./classApplyDescriptorSet.js";
import classCheckPrivateStaticAccess from "./classCheckPrivateStaticAccess.js";
import classCheckPrivateStaticFieldDescriptor from "./classCheckPrivateStaticFieldDescriptor.js";
export default function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {
  classCheckPrivateStaticAccess(receiver, classConstructor);
  classCheckPrivateStaticFieldDescriptor(descriptor, "set");
  classApplyDescriptorSet(receiver, descriptor, value);
  return value;
}import classCheckPrivateStaticAccess from "./classCheckPrivateStaticAccess.js";
export default function _classStaticPrivateMethodGet(receiver, classConstructor, method) {
  classCheckPrivateStaticAccess(receiver, classConstructor);
  return method;
}export default function _classStaticPrivateMethodSet() {
  throw new TypeError("attempted to set read only static private field");
}import setPrototypeOf from "./setPrototypeOf.js";
import isNativeReflectConstruct from "./isNativeReflectConstruct.js";
export default function _construct(Parent, args, Class) {
  if (isNativeReflectConstruct()) {
    _construct = Reflect.construct;
  } else {
    _construct = function _construct(Parent, args, Class) {
      var a = [null];
      a.push.apply(a, args);
      var Constructor = Function.bind.apply(Parent, a);
      var instance = new Constructor();
      if (Class) setPrototypeOf(instance, Class.prototype);
      return instance;
    };
  }

  return _construct.apply(null, arguments);
}function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
    var descriptor = props[i];
    descriptor.enumerable = descriptor.enumerable || false;
    descriptor.configurable = true;
    if ("value" in descriptor) descriptor.writable = true;
    Object.defineProperty(target, descriptor.key, descriptor);
  }
}

export default function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  if (staticProps) _defineProperties(Constructor, staticProps);
  return Constructor;
}import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
export default function _createForOfIteratorHelper(o, allowArrayLike) {
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];

  if (!it) {
    if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
      if (it) o = it;
      var i = 0;

      var F = function F() {};

      return {
        s: F,
        n: function n() {
          if (i >= o.length) return {
            done: true
          };
          return {
            done: false,
            value: o[i++]
          };
        },
        e: function e(_e) {
          throw _e;
        },
        f: F
      };
    }

    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }

  var normalCompletion = true,
      didErr = false,
      err;
  return {
    s: function s() {
      it = it.call(o);
    },
    n: function n() {
      var step = it.next();
      normalCompletion = step.done;
      return step;
    },
    e: function e(_e2) {
      didErr = true;
      err = _e2;
    },
    f: function f() {
      try {
        if (!normalCompletion && it["return"] != null) it["return"]();
      } finally {
        if (didErr) throw err;
      }
    }
  };
}import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
export default function _createForOfIteratorHelperLoose(o, allowArrayLike) {
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
  if (it) return (it = it.call(o)).next.bind(it);

  if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
    if (it) o = it;
    var i = 0;
    return function () {
      if (i >= o.length) return {
        done: true
      };
      return {
        done: false,
        value: o[i++]
      };
    };
  }

  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}import getPrototypeOf from "./getPrototypeOf.js";
import isNativeReflectConstruct from "./isNativeReflectConstruct.js";
import possibleConstructorReturn from "./possibleConstructorReturn.js";
export default function _createSuper(Derived) {
  var hasNativeReflectConstruct = isNativeReflectConstruct();
  return function _createSuperInternal() {
    var Super = getPrototypeOf(Derived),
        result;

    if (hasNativeReflectConstruct) {
      var NewTarget = getPrototypeOf(this).constructor;
      result = Reflect.construct(Super, arguments, NewTarget);
    } else {
      result = Super.apply(this, arguments);
    }

    return possibleConstructorReturn(this, result);
  };
}import toArray from "./toArray.js";
import toPropertyKey from "./toPropertyKey.js";
export default function _decorate(decorators, factory, superClass, mixins) {
  var api = _getDecoratorsApi();

  if (mixins) {
    for (var i = 0; i < mixins.length; i++) {
      api = mixins[i](api);
    }
  }

  var r = factory(function initialize(O) {
    api.initializeInstanceElements(O, decorated.elements);
  }, superClass);
  var decorated = api.decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);
  api.initializeClassElements(r.F, decorated.elements);
  return api.runClassFinishers(r.F, decorated.finishers);
}

function _getDecoratorsApi() {
  _getDecoratorsApi = function _getDecoratorsApi() {
    return api;
  };

  var api = {
    elementsDefinitionOrder: [["method"], ["field"]],
    initializeInstanceElements: function initializeInstanceElements(O, elements) {
      ["method", "field"].forEach(function (kind) {
        elements.forEach(function (element) {
          if (element.kind === kind && element.placement === "own") {
            this.defineClassElement(O, element);
          }
        }, this);
      }, this);
    },
    initializeClassElements: function initializeClassElements(F, elements) {
      var proto = F.prototype;
      ["method", "field"].forEach(function (kind) {
        elements.forEach(function (element) {
          var placement = element.placement;

          if (element.kind === kind && (placement === "static" || placement === "prototype")) {
            var receiver = placement === "static" ? F : proto;
            this.defineClassElement(receiver, element);
          }
        }, this);
      }, this);
    },
    defineClassElement: function defineClassElement(receiver, element) {
      var descriptor = element.descriptor;

      if (element.kind === "field") {
        var initializer = element.initializer;
        descriptor = {
          enumerable: descriptor.enumerable,
          writable: descriptor.writable,
          configurable: descriptor.configurable,
          value: initializer === void 0 ? void 0 : initializer.call(receiver)
        };
      }

      Object.defineProperty(receiver, element.key, descriptor);
    },
    decorateClass: function decorateClass(elements, decorators) {
      var newElements = [];
      var finishers = [];
      var placements = {
        "static": [],
        prototype: [],
        own: []
      };
      elements.forEach(function (element) {
        this.addElementPlacement(element, placements);
      }, this);
      elements.forEach(function (element) {
        if (!_hasDecorators(element)) return newElements.push(element);
        var elementFinishersExtras = this.decorateElement(element, placements);
        newElements.push(elementFinishersExtras.element);
        newElements.push.apply(newElements, elementFinishersExtras.extras);
        finishers.push.apply(finishers, elementFinishersExtras.finishers);
      }, this);

      if (!decorators) {
        return {
          elements: newElements,
          finishers: finishers
        };
      }

      var result = this.decorateConstructor(newElements, decorators);
      finishers.push.apply(finishers, result.finishers);
      result.finishers = finishers;
      return result;
    },
    addElementPlacement: function addElementPlacement(element, placements, silent) {
      var keys = placements[element.placement];

      if (!silent && keys.indexOf(element.key) !== -1) {
        throw new TypeError("Duplicated element (" + element.key + ")");
      }

      keys.push(element.key);
    },
    decorateElement: function decorateElement(element, placements) {
      var extras = [];
      var finishers = [];

      for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
        var keys = placements[element.placement];
        keys.splice(keys.indexOf(element.key), 1);
        var elementObject = this.fromElementDescriptor(element);
        var elementFinisherExtras = this.toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
        element = elementFinisherExtras.element;
        this.addElementPlacement(element, placements);

        if (elementFinisherExtras.finisher) {
          finishers.push(elementFinisherExtras.finisher);
        }

        var newExtras = elementFinisherExtras.extras;

        if (newExtras) {
          for (var j = 0; j < newExtras.length; j++) {
            this.addElementPlacement(newExtras[j], placements);
          }

          extras.push.apply(extras, newExtras);
        }
      }

      return {
        element: element,
        finishers: finishers,
        extras: extras
      };
    },
    decorateConstructor: function decorateConstructor(elements, decorators) {
      var finishers = [];

      for (var i = decorators.length - 1; i >= 0; i--) {
        var obj = this.fromClassDescriptor(elements);
        var elementsAndFinisher = this.toClassDescriptor((0, decorators[i])(obj) || obj);

        if (elementsAndFinisher.finisher !== undefined) {
          finishers.push(elementsAndFinisher.finisher);
        }

        if (elementsAndFinisher.elements !== undefined) {
          elements = elementsAndFinisher.elements;

          for (var j = 0; j < elements.length - 1; j++) {
            for (var k = j + 1; k < elements.length; k++) {
              if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {
                throw new TypeError("Duplicated element (" + elements[j].key + ")");
              }
            }
          }
        }
      }

      return {
        elements: elements,
        finishers: finishers
      };
    },
    fromElementDescriptor: function fromElementDescriptor(element) {
      var obj = {
        kind: element.kind,
        key: element.key,
        placement: element.placement,
        descriptor: element.descriptor
      };
      var desc = {
        value: "Descriptor",
        configurable: true
      };
      Object.defineProperty(obj, Symbol.toStringTag, desc);
      if (element.kind === "field") obj.initializer = element.initializer;
      return obj;
    },
    toElementDescriptors: function toElementDescriptors(elementObjects) {
      if (elementObjects === undefined) return;
      return toArray(elementObjects).map(function (elementObject) {
        var element = this.toElementDescriptor(elementObject);
        this.disallowProperty(elementObject, "finisher", "An element descriptor");
        this.disallowProperty(elementObject, "extras", "An element descriptor");
        return element;
      }, this);
    },
    toElementDescriptor: function toElementDescriptor(elementObject) {
      var kind = String(elementObject.kind);

      if (kind !== "method" && kind !== "field") {
        throw new TypeError('An element descriptor\'s .kind property must be either "method" or' + ' "field", but a decorator created an element descriptor with' + ' .kind "' + kind + '"');
      }

      var key = toPropertyKey(elementObject.key);
      var placement = String(elementObject.placement);

      if (placement !== "static" && placement !== "prototype" && placement !== "own") {
        throw new TypeError('An element descriptor\'s .placement property must be one of "static",' + ' "prototype" or "own", but a decorator created an element descriptor' + ' with .placement "' + placement + '"');
      }

      var descriptor = elementObject.descriptor;
      this.disallowProperty(elementObject, "elements", "An element descriptor");
      var element = {
        kind: kind,
        key: key,
        placement: placement,
        descriptor: Object.assign({}, descriptor)
      };

      if (kind !== "field") {
        this.disallowProperty(elementObject, "initializer", "A method descriptor");
      } else {
        this.disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
        this.disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
        this.disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
        element.initializer = elementObject.initializer;
      }

      return element;
    },
    toElementFinisherExtras: function toElementFinisherExtras(elementObject) {
      var element = this.toElementDescriptor(elementObject);

      var finisher = _optionalCallableProperty(elementObject, "finisher");

      var extras = this.toElementDescriptors(elementObject.extras);
      return {
        element: element,
        finisher: finisher,
        extras: extras
      };
    },
    fromClassDescriptor: function fromClassDescriptor(elements) {
      var obj = {
        kind: "class",
        elements: elements.map(this.fromElementDescriptor, this)
      };
      var desc = {
        value: "Descriptor",
        configurable: true
      };
      Object.defineProperty(obj, Symbol.toStringTag, desc);
      return obj;
    },
    toClassDescriptor: function toClassDescriptor(obj) {
      var kind = String(obj.kind);

      if (kind !== "class") {
        throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator' + ' created a class descriptor with .kind "' + kind + '"');
      }

      this.disallowProperty(obj, "key", "A class descriptor");
      this.disallowProperty(obj, "placement", "A class descriptor");
      this.disallowProperty(obj, "descriptor", "A class descriptor");
      this.disallowProperty(obj, "initializer", "A class descriptor");
      this.disallowProperty(obj, "extras", "A class descriptor");

      var finisher = _optionalCallableProperty(obj, "finisher");

      var elements = this.toElementDescriptors(obj.elements);
      return {
        elements: elements,
        finisher: finisher
      };
    },
    runClassFinishers: function runClassFinishers(constructor, finishers) {
      for (var i = 0; i < finishers.length; i++) {
        var newConstructor = (0, finishers[i])(constructor);

        if (newConstructor !== undefined) {
          if (typeof newConstructor !== "function") {
            throw new TypeError("Finishers must return a constructor.");
          }

          constructor = newConstructor;
        }
      }

      return constructor;
    },
    disallowProperty: function disallowProperty(obj, name, objectType) {
      if (obj[name] !== undefined) {
        throw new TypeError(objectType + " can't have a ." + name + " property.");
      }
    }
  };
  return api;
}

function _createElementDescriptor(def) {
  var key = toPropertyKey(def.key);
  var descriptor;

  if (def.kind === "method") {
    descriptor = {
      value: def.value,
      writable: true,
      configurable: true,
      enumerable: false
    };
  } else if (def.kind === "get") {
    descriptor = {
      get: def.value,
      configurable: true,
      enumerable: false
    };
  } else if (def.kind === "set") {
    descriptor = {
      set: def.value,
      configurable: true,
      enumerable: false
    };
  } else if (def.kind === "field") {
    descriptor = {
      configurable: true,
      writable: true,
      enumerable: true
    };
  }

  var element = {
    kind: def.kind === "field" ? "field" : "method",
    key: key,
    placement: def["static"] ? "static" : def.kind === "field" ? "own" : "prototype",
    descriptor: descriptor
  };
  if (def.decorators) element.decorators = def.decorators;
  if (def.kind === "field") element.initializer = def.value;
  return element;
}

function _coalesceGetterSetter(element, other) {
  if (element.descriptor.get !== undefined) {
    other.descriptor.get = element.descriptor.get;
  } else {
    other.descriptor.set = element.descriptor.set;
  }
}

function _coalesceClassElements(elements) {
  var newElements = [];

  var isSameElement = function isSameElement(other) {
    return other.kind === "method" && other.key === element.key && other.placement === element.placement;
  };

  for (var i = 0; i < elements.length; i++) {
    var element = elements[i];
    var other;

    if (element.kind === "method" && (other = newElements.find(isSameElement))) {
      if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
        if (_hasDecorators(element) || _hasDecorators(other)) {
          throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated.");
        }

        other.descriptor = element.descriptor;
      } else {
        if (_hasDecorators(element)) {
          if (_hasDecorators(other)) {
            throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ").");
          }

          other.decorators = element.decorators;
        }

        _coalesceGetterSetter(element, other);
      }
    } else {
      newElements.push(element);
    }
  }

  return newElements;
}

function _hasDecorators(element) {
  return element.decorators && element.decorators.length;
}

function _isDataDescriptor(desc) {
  return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);
}

function _optionalCallableProperty(obj, name) {
  var value = obj[name];

  if (value !== undefined && typeof value !== "function") {
    throw new TypeError("Expected '" + name + "' to be a function");
  }

  return value;
}export default function _defaults(obj, defaults) {
  var keys = Object.getOwnPropertyNames(defaults);

  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var value = Object.getOwnPropertyDescriptor(defaults, key);

    if (value && value.configurable && obj[key] === undefined) {
      Object.defineProperty(obj, key, value);
    }
  }

  return obj;
}export default function _defineEnumerableProperties(obj, descs) {
  for (var key in descs) {
    var desc = descs[key];
    desc.configurable = desc.enumerable = true;
    if ("value" in desc) desc.writable = true;
    Object.defineProperty(obj, key, desc);
  }

  if (Object.getOwnPropertySymbols) {
    var objectSymbols = Object.getOwnPropertySymbols(descs);

    for (var i = 0; i < objectSymbols.length; i++) {
      var sym = objectSymbols[i];
      var desc = descs[sym];
      desc.configurable = desc.enumerable = true;
      if ("value" in desc) desc.writable = true;
      Object.defineProperty(obj, sym, desc);
    }
  }

  return obj;
}export default function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
}export default function _extends() {
  _extends = Object.assign || function (target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i];

      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      }
    }

    return target;
  };

  return _extends.apply(this, arguments);
}import superPropBase from "./superPropBase.js";
export default function _get(target, property, receiver) {
  if (typeof Reflect !== "undefined" && Reflect.get) {
    _get = Reflect.get;
  } else {
    _get = function _get(target, property, receiver) {
      var base = superPropBase(target, property);
      if (!base) return;
      var desc = Object.getOwnPropertyDescriptor(base, property);

      if (desc.get) {
        return desc.get.call(receiver);
      }

      return desc.value;
    };
  }

  return _get(target, property, receiver || target);
}export default function _getPrototypeOf(o) {
  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
    return o.__proto__ || Object.getPrototypeOf(o);
  };
  return _getPrototypeOf(o);
}import setPrototypeOf from "./setPrototypeOf.js";
export default function _inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function");
  }

  subClass.prototype = Object.create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      writable: true,
      configurable: true
    }
  });
  if (superClass) setPrototypeOf(subClass, superClass);
}import setPrototypeOf from "./setPrototypeOf.js";
export default function _inheritsLoose(subClass, superClass) {
  subClass.prototype = Object.create(superClass.prototype);
  subClass.prototype.constructor = subClass;
  setPrototypeOf(subClass, superClass);
}export default function _initializerDefineProperty(target, property, descriptor, context) {
  if (!descriptor) return;
  Object.defineProperty(target, property, {
    enumerable: descriptor.enumerable,
    configurable: descriptor.configurable,
    writable: descriptor.writable,
    value: descriptor.initializer ? descriptor.initializer.call(context) : void 0
  });
}export default function _initializerWarningHelper(descriptor, context) {
  throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.');
}export default function _instanceof(left, right) {
  if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
    return !!right[Symbol.hasInstance](left);
  } else {
    return left instanceof right;
  }
}export default function _interopRequireDefault(obj) {
  return obj && obj.__esModule ? obj : {
    "default": obj
  };
}import _typeof from "@babel/runtime/helpers/typeof";

function _getRequireWildcardCache(nodeInterop) {
  if (typeof WeakMap !== "function") return null;
  var cacheBabelInterop = new WeakMap();
  var cacheNodeInterop = new WeakMap();
  return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {
    return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
  })(nodeInterop);
}

export default function _interopRequireWildcard(obj, nodeInterop) {
  if (!nodeInterop && obj && obj.__esModule) {
    return obj;
  }

  if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") {
    return {
      "default": obj
    };
  }

  var cache = _getRequireWildcardCache(nodeInterop);

  if (cache && cache.has(obj)) {
    return cache.get(obj);
  }

  var newObj = {};
  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;

  for (var key in obj) {
    if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
      var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;

      if (desc && (desc.get || desc.set)) {
        Object.defineProperty(newObj, key, desc);
      } else {
        newObj[key] = obj[key];
      }
    }
  }

  newObj["default"] = obj;

  if (cache) {
    cache.set(obj, newObj);
  }

  return newObj;
}export default function _isNativeFunction(fn) {
  return Function.toString.call(fn).indexOf("[native code]") !== -1;
}export default function _isNativeReflectConstruct() {
  if (typeof Reflect === "undefined" || !Reflect.construct) return false;
  if (Reflect.construct.sham) return false;
  if (typeof Proxy === "function") return true;

  try {
    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
    return true;
  } catch (e) {
    return false;
  }
}export default function _iterableToArray(iter) {
  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}export default function _iterableToArrayLimit(arr, i) {
  var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]);

  if (_i == null) return;
  var _arr = [];
  var _n = true;
  var _d = false;

  var _s, _e;

  try {
    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
      _arr.push(_s.value);

      if (i && _arr.length === i) break;
    }
  } catch (err) {
    _d = true;
    _e = err;
  } finally {
    try {
      if (!_n && _i["return"] != null) _i["return"]();
    } finally {
      if (_d) throw _e;
    }
  }

  return _arr;
}export default function _iterableToArrayLimitLoose(arr, i) {
  var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]);

  if (_i == null) return;
  var _arr = [];

  for (_i = _i.call(arr), _step; !(_step = _i.next()).done;) {
    _arr.push(_step.value);

    if (i && _arr.length === i) break;
  }

  return _arr;
}var REACT_ELEMENT_TYPE;
export default function _createRawReactElement(type, props, key, children) {
  if (!REACT_ELEMENT_TYPE) {
    REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7;
  }

  var defaultProps = type && type.defaultProps;
  var childrenLength = arguments.length - 3;

  if (!props && childrenLength !== 0) {
    props = {
      children: void 0
    };
  }

  if (childrenLength === 1) {
    props.children = children;
  } else if (childrenLength > 1) {
    var childArray = new Array(childrenLength);

    for (var i = 0; i < childrenLength; i++) {
      childArray[i] = arguments[i + 3];
    }

    props.children = childArray;
  }

  if (props && defaultProps) {
    for (var propName in defaultProps) {
      if (props[propName] === void 0) {
        props[propName] = defaultProps[propName];
      }
    }
  } else if (!props) {
    props = defaultProps || {};
  }

  return {
    $$typeof: REACT_ELEMENT_TYPE,
    type: type,
    key: key === undefined ? null : "" + key,
    ref: null,
    props: props,
    _owner: null
  };
}import arrayLikeToArray from "./arrayLikeToArray.js";
export default function _maybeArrayLike(next, arr, i) {
  if (arr && !Array.isArray(arr) && typeof arr.length === "number") {
    var len = arr.length;
    return arrayLikeToArray(arr, i !== void 0 && i < len ? i : len);
  }

  return next(arr, i);
}export default function _newArrowCheck(innerThis, boundThis) {
  if (innerThis !== boundThis) {
    throw new TypeError("Cannot instantiate an arrow function");
  }
}export default function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}export default function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}export default function _objectDestructuringEmpty(obj) {
  if (obj == null) throw new TypeError("Cannot destructure undefined");
}import defineProperty from "./defineProperty.js";
export default function _objectSpread(target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i] != null ? Object(arguments[i]) : {};
    var ownKeys = Object.keys(source);

    if (typeof Object.getOwnPropertySymbols === 'function') {
      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
        return Object.getOwnPropertyDescriptor(source, sym).enumerable;
      }));
    }

    ownKeys.forEach(function (key) {
      defineProperty(target, key, source[key]);
    });
  }

  return target;
}import defineProperty from "./defineProperty.js";

function ownKeys(object, enumerableOnly) {
  var keys = Object.keys(object);

  if (Object.getOwnPropertySymbols) {
    var symbols = Object.getOwnPropertySymbols(object);

    if (enumerableOnly) {
      symbols = symbols.filter(function (sym) {
        return Object.getOwnPropertyDescriptor(object, sym).enumerable;
      });
    }

    keys.push.apply(keys, symbols);
  }

  return keys;
}

export default function _objectSpread2(target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i] != null ? arguments[i] : {};

    if (i % 2) {
      ownKeys(Object(source), true).forEach(function (key) {
        defineProperty(target, key, source[key]);
      });
    } else if (Object.getOwnPropertyDescriptors) {
      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
    } else {
      ownKeys(Object(source)).forEach(function (key) {
        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
      });
    }
  }

  return target;
}import objectWithoutPropertiesLoose from "./objectWithoutPropertiesLoose.js";
export default function _objectWithoutProperties(source, excluded) {
  if (source == null) return {};
  var target = objectWithoutPropertiesLoose(source, excluded);
  var key, i;

  if (Object.getOwnPropertySymbols) {
    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);

    for (i = 0; i < sourceSymbolKeys.length; i++) {
      key = sourceSymbolKeys[i];
      if (excluded.indexOf(key) >= 0) continue;
      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
      target[key] = source[key];
    }
  }

  return target;
}export default function _objectWithoutPropertiesLoose(source, excluded) {
  if (source == null) return {};
  var target = {};
  var sourceKeys = Object.keys(source);
  var key, i;

  for (i = 0; i < sourceKeys.length; i++) {
    key = sourceKeys[i];
    if (excluded.indexOf(key) >= 0) continue;
    target[key] = source[key];
  }

  return target;
}{
  "type": "module"
}import _typeof from "@babel/runtime/helpers/typeof";
import assertThisInitialized from "./assertThisInitialized.js";
export default function _possibleConstructorReturn(self, call) {
  if (call && (_typeof(call) === "object" || typeof call === "function")) {
    return call;
  }

  return assertThisInitialized(self);
}export default function _readOnlyError(name) {
  throw new TypeError("\"" + name + "\" is read-only");
}import superPropBase from "./superPropBase.js";
import defineProperty from "./defineProperty.js";

function set(target, property, value, receiver) {
  if (typeof Reflect !== "undefined" && Reflect.set) {
    set = Reflect.set;
  } else {
    set = function set(target, property, value, receiver) {
      var base = superPropBase(target, property);
      var desc;

      if (base) {
        desc = Object.getOwnPropertyDescriptor(base, property);

        if (desc.set) {
          desc.set.call(receiver, value);
          return true;
        } else if (!desc.writable) {
          return false;
        }
      }

      desc = Object.getOwnPropertyDescriptor(receiver, property);

      if (desc) {
        if (!desc.writable) {
          return false;
        }

        desc.value = value;
        Object.defineProperty(receiver, property, desc);
      } else {
        defineProperty(receiver, property, value);
      }

      return true;
    };
  }

  return set(target, property, value, receiver);
}

export default function _set(target, property, value, receiver, isStrict) {
  var s = set(target, property, value, receiver || target);

  if (!s && isStrict) {
    throw new Error('failed to set property');
  }

  return value;
}export default function _setPrototypeOf(o, p) {
  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
    o.__proto__ = p;
    return o;
  };

  return _setPrototypeOf(o, p);
}export default function _skipFirstGeneratorNext(fn) {
  return function () {
    var it = fn.apply(this, arguments);
    it.next();
    return it;
  };
}import arrayWithHoles from "./arrayWithHoles.js";
import iterableToArrayLimit from "./iterableToArrayLimit.js";
import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
import nonIterableRest from "./nonIterableRest.js";
export default function _slicedToArray(arr, i) {
  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();
}import arrayWithHoles from "./arrayWithHoles.js";
import iterableToArrayLimitLoose from "./iterableToArrayLimitLoose.js";
import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
import nonIterableRest from "./nonIterableRest.js";
export default function _slicedToArrayLoose(arr, i) {
  return arrayWithHoles(arr) || iterableToArrayLimitLoose(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();
}import getPrototypeOf from "./getPrototypeOf.js";
export default function _superPropBase(object, property) {
  while (!Object.prototype.hasOwnProperty.call(object, property)) {
    object = getPrototypeOf(object);
    if (object === null) break;
  }

  return object;
}export default function _taggedTemplateLiteral(strings, raw) {
  if (!raw) {
    raw = strings.slice(0);
  }

  return Object.freeze(Object.defineProperties(strings, {
    raw: {
      value: Object.freeze(raw)
    }
  }));
}export default function _taggedTemplateLiteralLoose(strings, raw) {
  if (!raw) {
    raw = strings.slice(0);
  }

  strings.raw = raw;
  return strings;
}export default function _tdzError(name) {
  throw new ReferenceError(name + " is not defined - temporal dead zone");
}import undef from "./temporalUndefined.js";
import err from "./tdz.js";
export default function _temporalRef(val, name) {
  return val === undef ? err(name) : val;
}export default function _temporalUndefined() {}import arrayWithHoles from "./arrayWithHoles.js";
import iterableToArray from "./iterableToArray.js";
import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
import nonIterableRest from "./nonIterableRest.js";
export default function _toArray(arr) {
  return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();
}import arrayWithoutHoles from "./arrayWithoutHoles.js";
import iterableToArray from "./iterableToArray.js";
import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
import nonIterableSpread from "./nonIterableSpread.js";
export default function _toConsumableArray(arr) {
  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();
}import _typeof from "@babel/runtime/helpers/typeof";
export default function _toPrimitive(input, hint) {
  if (_typeof(input) !== "object" || input === null) return input;
  var prim = input[Symbol.toPrimitive];

  if (prim !== undefined) {
    var res = prim.call(input, hint || "default");
    if (_typeof(res) !== "object") return res;
    throw new TypeError("@@toPrimitive must return a primitive value.");
  }

  return (hint === "string" ? String : Number)(input);
}import _typeof from "@babel/runtime/helpers/typeof";
import toPrimitive from "./toPrimitive.js";
export default function _toPropertyKey(arg) {
  var key = toPrimitive(arg, "string");
  return _typeof(key) === "symbol" ? key : String(key);
}export default function _typeof(obj) {
  "@babel/helpers - typeof";

  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    _typeof = function _typeof(obj) {
      return typeof obj;
    };
  } else {
    _typeof = function _typeof(obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };
  }

  return _typeof(obj);
}import arrayLikeToArray from "./arrayLikeToArray.js";
export default function _unsupportedIterableToArray(o, minLen) {
  if (!o) return;
  if (typeof o === "string") return arrayLikeToArray(o, minLen);
  var n = Object.prototype.toString.call(o).slice(8, -1);
  if (n === "Object" && o.constructor) n = o.constructor.name;
  if (n === "Map" || n === "Set") return Array.from(o);
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
}import AsyncGenerator from "./AsyncGenerator.js";
export default function _wrapAsyncGenerator(fn) {
  return function () {
    return new AsyncGenerator(fn.apply(this, arguments));
  };
}import getPrototypeOf from "./getPrototypeOf.js";
import setPrototypeOf from "./setPrototypeOf.js";
import isNativeFunction from "./isNativeFunction.js";
import construct from "./construct.js";
export default function _wrapNativeSuper(Class) {
  var _cache = typeof Map === "function" ? new Map() : undefined;

  _wrapNativeSuper = function _wrapNativeSuper(Class) {
    if (Class === null || !isNativeFunction(Class)) return Class;

    if (typeof Class !== "function") {
      throw new TypeError("Super expression must either be null or a function");
    }

    if (typeof _cache !== "undefined") {
      if (_cache.has(Class)) return _cache.get(Class);

      _cache.set(Class, Wrapper);
    }

    function Wrapper() {
      return construct(Class, arguments, getPrototypeOf(this).constructor);
    }

    Wrapper.prototype = Object.create(Class.prototype, {
      constructor: {
        value: Wrapper,
        enumerable: false,
        writable: true,
        configurable: true
      }
    });
    return setPrototypeOf(Wrapper, Class);
  };

  return _wrapNativeSuper(Class);
}import _typeof from "@babel/runtime/helpers/typeof";
import setPrototypeOf from "./setPrototypeOf.js";
import inherits from "./inherits.js";
export default function _wrapRegExp() {
  _wrapRegExp = function _wrapRegExp(re, groups) {
    return new BabelRegExp(re, undefined, groups);
  };

  var _super = RegExp.prototype;

  var _groups = new WeakMap();

  function BabelRegExp(re, flags, groups) {
    var _this = new RegExp(re, flags);

    _groups.set(_this, groups || _groups.get(re));

    return setPrototypeOf(_this, BabelRegExp.prototype);
  }

  inherits(BabelRegExp, RegExp);

  BabelRegExp.prototype.exec = function (str) {
    var result = _super.exec.call(this, str);

    if (result) result.groups = buildGroups(result, this);
    return result;
  };

  BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {
    if (typeof substitution === "string") {
      var groups = _groups.get(this);

      return _super[Symbol.replace].call(this, str, substitution.replace(/\$<([^>]+)>/g, function (_, name) {
        return "$" + groups[name];
      }));
    } else if (typeof substitution === "function") {
      var _this = this;

      return _super[Symbol.replace].call(this, str, function () {
        var args = arguments;

        if (_typeof(args[args.length - 1]) !== "object") {
          args = [].slice.call(args);
          args.push(buildGroups(args, _this));
        }

        return substitution.apply(this, args);
      });
    } else {
      return _super[Symbol.replace].call(this, str, substitution);
    }
  };

  function buildGroups(result, re) {
    var g = _groups.get(re);

    return Object.keys(g).reduce(function (groups, name) {
      groups[name] = result[g[name]];
      return groups;
    }, Object.create(null));
  }

  return _wrapRegExp.apply(this, arguments);
}export default function _writeOnlyError(name) {
  throw new TypeError("\"" + name + "\" is write-only");
}function _extends() {
  module.exports = _extends = Object.assign || function (target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i];

      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      }
    }

    return target;
  };

  module.exports["default"] = module.exports, module.exports.__esModule = true;
  return _extends.apply(this, arguments);
}

module.exports = _extends;
module.exports["default"] = module.exports, module.exports.__esModule = true;var superPropBase = require("./superPropBase.js");

function _get(target, property, receiver) {
  if (typeof Reflect !== "undefined" && Reflect.get) {
    module.exports = _get = Reflect.get;
    module.exports["default"] = module.exports, module.exports.__esModule = true;
  } else {
    module.exports = _get = function _get(target, property, receiver) {
      var base = superPropBase(target, property);
      if (!base) return;
      var desc = Object.getOwnPropertyDescriptor(base, property);

      if (desc.get) {
        return desc.get.call(receiver);
      }

      return desc.value;
    };

    module.exports["default"] = module.exports, module.exports.__esModule = true;
  }

  return _get(target, property, receiver || target);
}

module.exports = _get;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _getPrototypeOf(o) {
  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
    return o.__proto__ || Object.getPrototypeOf(o);
  };
  module.exports["default"] = module.exports, module.exports.__esModule = true;
  return _getPrototypeOf(o);
}

module.exports = _getPrototypeOf;
module.exports["default"] = module.exports, module.exports.__esModule = true;var setPrototypeOf = require("./setPrototypeOf.js");

function _inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function");
  }

  subClass.prototype = Object.create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      writable: true,
      configurable: true
    }
  });
  if (superClass) setPrototypeOf(subClass, superClass);
}

module.exports = _inherits;
module.exports["default"] = module.exports, module.exports.__esModule = true;var setPrototypeOf = require("./setPrototypeOf.js");

function _inheritsLoose(subClass, superClass) {
  subClass.prototype = Object.create(superClass.prototype);
  subClass.prototype.constructor = subClass;
  setPrototypeOf(subClass, superClass);
}

module.exports = _inheritsLoose;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _initializerDefineProperty(target, property, descriptor, context) {
  if (!descriptor) return;
  Object.defineProperty(target, property, {
    enumerable: descriptor.enumerable,
    configurable: descriptor.configurable,
    writable: descriptor.writable,
    value: descriptor.initializer ? descriptor.initializer.call(context) : void 0
  });
}

module.exports = _initializerDefineProperty;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _initializerWarningHelper(descriptor, context) {
  throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.');
}

module.exports = _initializerWarningHelper;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _instanceof(left, right) {
  if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
    return !!right[Symbol.hasInstance](left);
  } else {
    return left instanceof right;
  }
}

module.exports = _instanceof;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _interopRequireDefault(obj) {
  return obj && obj.__esModule ? obj : {
    "default": obj
  };
}

module.exports = _interopRequireDefault;
module.exports["default"] = module.exports, module.exports.__esModule = true;var _typeof = require("@babel/runtime/helpers/typeof")["default"];

function _getRequireWildcardCache(nodeInterop) {
  if (typeof WeakMap !== "function") return null;
  var cacheBabelInterop = new WeakMap();
  var cacheNodeInterop = new WeakMap();
  return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {
    return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
  })(nodeInterop);
}

function _interopRequireWildcard(obj, nodeInterop) {
  if (!nodeInterop && obj && obj.__esModule) {
    return obj;
  }

  if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") {
    return {
      "default": obj
    };
  }

  var cache = _getRequireWildcardCache(nodeInterop);

  if (cache && cache.has(obj)) {
    return cache.get(obj);
  }

  var newObj = {};
  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;

  for (var key in obj) {
    if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
      var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;

      if (desc && (desc.get || desc.set)) {
        Object.defineProperty(newObj, key, desc);
      } else {
        newObj[key] = obj[key];
      }
    }
  }

  newObj["default"] = obj;

  if (cache) {
    cache.set(obj, newObj);
  }

  return newObj;
}

module.exports = _interopRequireWildcard;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _isNativeFunction(fn) {
  return Function.toString.call(fn).indexOf("[native code]") !== -1;
}

module.exports = _isNativeFunction;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _isNativeReflectConstruct() {
  if (typeof Reflect === "undefined" || !Reflect.construct) return false;
  if (Reflect.construct.sham) return false;
  if (typeof Proxy === "function") return true;

  try {
    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
    return true;
  } catch (e) {
    return false;
  }
}

module.exports = _isNativeReflectConstruct;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _iterableToArray(iter) {
  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}

module.exports = _iterableToArray;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _iterableToArrayLimit(arr, i) {
  var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]);

  if (_i == null) return;
  var _arr = [];
  var _n = true;
  var _d = false;

  var _s, _e;

  try {
    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
      _arr.push(_s.value);

      if (i && _arr.length === i) break;
    }
  } catch (err) {
    _d = true;
    _e = err;
  } finally {
    try {
      if (!_n && _i["return"] != null) _i["return"]();
    } finally {
      if (_d) throw _e;
    }
  }

  return _arr;
}

module.exports = _iterableToArrayLimit;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _iterableToArrayLimitLoose(arr, i) {
  var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]);

  if (_i == null) return;
  var _arr = [];

  for (_i = _i.call(arr), _step; !(_step = _i.next()).done;) {
    _arr.push(_step.value);

    if (i && _arr.length === i) break;
  }

  return _arr;
}

module.exports = _iterableToArrayLimitLoose;
module.exports["default"] = module.exports, module.exports.__esModule = true;var REACT_ELEMENT_TYPE;

function _createRawReactElement(type, props, key, children) {
  if (!REACT_ELEMENT_TYPE) {
    REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol["for"] && Symbol["for"]("react.element") || 0xeac7;
  }

  var defaultProps = type && type.defaultProps;
  var childrenLength = arguments.length - 3;

  if (!props && childrenLength !== 0) {
    props = {
      children: void 0
    };
  }

  if (childrenLength === 1) {
    props.children = children;
  } else if (childrenLength > 1) {
    var childArray = new Array(childrenLength);

    for (var i = 0; i < childrenLength; i++) {
      childArray[i] = arguments[i + 3];
    }

    props.children = childArray;
  }

  if (props && defaultProps) {
    for (var propName in defaultProps) {
      if (props[propName] === void 0) {
        props[propName] = defaultProps[propName];
      }
    }
  } else if (!props) {
    props = defaultProps || {};
  }

  return {
    $$typeof: REACT_ELEMENT_TYPE,
    type: type,
    key: key === undefined ? null : "" + key,
    ref: null,
    props: props,
    _owner: null
  };
}

module.exports = _createRawReactElement;
module.exports["default"] = module.exports, module.exports.__esModule = true;var arrayLikeToArray = require("./arrayLikeToArray.js");

function _maybeArrayLike(next, arr, i) {
  if (arr && !Array.isArray(arr) && typeof arr.length === "number") {
    var len = arr.length;
    return arrayLikeToArray(arr, i !== void 0 && i < len ? i : len);
  }

  return next(arr, i);
}

module.exports = _maybeArrayLike;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _newArrowCheck(innerThis, boundThis) {
  if (innerThis !== boundThis) {
    throw new TypeError("Cannot instantiate an arrow function");
  }
}

module.exports = _newArrowCheck;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}

module.exports = _nonIterableRest;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}

module.exports = _nonIterableSpread;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _objectDestructuringEmpty(obj) {
  if (obj == null) throw new TypeError("Cannot destructure undefined");
}

module.exports = _objectDestructuringEmpty;
module.exports["default"] = module.exports, module.exports.__esModule = true;var defineProperty = require("./defineProperty.js");

function _objectSpread(target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i] != null ? Object(arguments[i]) : {};
    var ownKeys = Object.keys(source);

    if (typeof Object.getOwnPropertySymbols === 'function') {
      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
        return Object.getOwnPropertyDescriptor(source, sym).enumerable;
      }));
    }

    ownKeys.forEach(function (key) {
      defineProperty(target, key, source[key]);
    });
  }

  return target;
}

module.exports = _objectSpread;
module.exports["default"] = module.exports, module.exports.__esModule = true;var defineProperty = require("./defineProperty.js");

function ownKeys(object, enumerableOnly) {
  var keys = Object.keys(object);

  if (Object.getOwnPropertySymbols) {
    var symbols = Object.getOwnPropertySymbols(object);

    if (enumerableOnly) {
      symbols = symbols.filter(function (sym) {
        return Object.getOwnPropertyDescriptor(object, sym).enumerable;
      });
    }

    keys.push.apply(keys, symbols);
  }

  return keys;
}

function _objectSpread2(target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i] != null ? arguments[i] : {};

    if (i % 2) {
      ownKeys(Object(source), true).forEach(function (key) {
        defineProperty(target, key, source[key]);
      });
    } else if (Object.getOwnPropertyDescriptors) {
      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
    } else {
      ownKeys(Object(source)).forEach(function (key) {
        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
      });
    }
  }

  return target;
}

module.exports = _objectSpread2;
module.exports["default"] = module.exports, module.exports.__esModule = true;var objectWithoutPropertiesLoose = require("./objectWithoutPropertiesLoose.js");

function _objectWithoutProperties(source, excluded) {
  if (source == null) return {};
  var target = objectWithoutPropertiesLoose(source, excluded);
  var key, i;

  if (Object.getOwnPropertySymbols) {
    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);

    for (i = 0; i < sourceSymbolKeys.length; i++) {
      key = sourceSymbolKeys[i];
      if (excluded.indexOf(key) >= 0) continue;
      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
      target[key] = source[key];
    }
  }

  return target;
}

module.exports = _objectWithoutProperties;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _objectWithoutPropertiesLoose(source, excluded) {
  if (source == null) return {};
  var target = {};
  var sourceKeys = Object.keys(source);
  var key, i;

  for (i = 0; i < sourceKeys.length; i++) {
    key = sourceKeys[i];
    if (excluded.indexOf(key) >= 0) continue;
    target[key] = source[key];
  }

  return target;
}

module.exports = _objectWithoutPropertiesLoose;
module.exports["default"] = module.exports, module.exports.__esModule = true;var _typeof = require("@babel/runtime/helpers/typeof")["default"];

var assertThisInitialized = require("./assertThisInitialized.js");

function _possibleConstructorReturn(self, call) {
  if (call && (_typeof(call) === "object" || typeof call === "function")) {
    return call;
  }

  return assertThisInitialized(self);
}

module.exports = _possibleConstructorReturn;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _readOnlyError(name) {
  throw new TypeError("\"" + name + "\" is read-only");
}

module.exports = _readOnlyError;
module.exports["default"] = module.exports, module.exports.__esModule = true;var superPropBase = require("./superPropBase.js");

var defineProperty = require("./defineProperty.js");

function set(target, property, value, receiver) {
  if (typeof Reflect !== "undefined" && Reflect.set) {
    set = Reflect.set;
  } else {
    set = function set(target, property, value, receiver) {
      var base = superPropBase(target, property);
      var desc;

      if (base) {
        desc = Object.getOwnPropertyDescriptor(base, property);

        if (desc.set) {
          desc.set.call(receiver, value);
          return true;
        } else if (!desc.writable) {
          return false;
        }
      }

      desc = Object.getOwnPropertyDescriptor(receiver, property);

      if (desc) {
        if (!desc.writable) {
          return false;
        }

        desc.value = value;
        Object.defineProperty(receiver, property, desc);
      } else {
        defineProperty(receiver, property, value);
      }

      return true;
    };
  }

  return set(target, property, value, receiver);
}

function _set(target, property, value, receiver, isStrict) {
  var s = set(target, property, value, receiver || target);

  if (!s && isStrict) {
    throw new Error('failed to set property');
  }

  return value;
}

module.exports = _set;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _setPrototypeOf(o, p) {
  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
    o.__proto__ = p;
    return o;
  };

  module.exports["default"] = module.exports, module.exports.__esModule = true;
  return _setPrototypeOf(o, p);
}

module.exports = _setPrototypeOf;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _skipFirstGeneratorNext(fn) {
  return function () {
    var it = fn.apply(this, arguments);
    it.next();
    return it;
  };
}

module.exports = _skipFirstGeneratorNext;
module.exports["default"] = module.exports, module.exports.__esModule = true;var arrayWithHoles = require("./arrayWithHoles.js");

var iterableToArrayLimit = require("./iterableToArrayLimit.js");

var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");

var nonIterableRest = require("./nonIterableRest.js");

function _slicedToArray(arr, i) {
  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();
}

module.exports = _slicedToArray;
module.exports["default"] = module.exports, module.exports.__esModule = true;var arrayWithHoles = require("./arrayWithHoles.js");

var iterableToArrayLimitLoose = require("./iterableToArrayLimitLoose.js");

var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");

var nonIterableRest = require("./nonIterableRest.js");

function _slicedToArrayLoose(arr, i) {
  return arrayWithHoles(arr) || iterableToArrayLimitLoose(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();
}

module.exports = _slicedToArrayLoose;
module.exports["default"] = module.exports, module.exports.__esModule = true;var getPrototypeOf = require("./getPrototypeOf.js");

function _superPropBase(object, property) {
  while (!Object.prototype.hasOwnProperty.call(object, property)) {
    object = getPrototypeOf(object);
    if (object === null) break;
  }

  return object;
}

module.exports = _superPropBase;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _taggedTemplateLiteral(strings, raw) {
  if (!raw) {
    raw = strings.slice(0);
  }

  return Object.freeze(Object.defineProperties(strings, {
    raw: {
      value: Object.freeze(raw)
    }
  }));
}

module.exports = _taggedTemplateLiteral;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _taggedTemplateLiteralLoose(strings, raw) {
  if (!raw) {
    raw = strings.slice(0);
  }

  strings.raw = raw;
  return strings;
}

module.exports = _taggedTemplateLiteralLoose;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _tdzError(name) {
  throw new ReferenceError(name + " is not defined - temporal dead zone");
}

module.exports = _tdzError;
module.exports["default"] = module.exports, module.exports.__esModule = true;var temporalUndefined = require("./temporalUndefined.js");

var tdz = require("./tdz.js");

function _temporalRef(val, name) {
  return val === temporalUndefined ? tdz(name) : val;
}

module.exports = _temporalRef;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _temporalUndefined() {}

module.exports = _temporalUndefined;
module.exports["default"] = module.exports, module.exports.__esModule = true;var arrayWithHoles = require("./arrayWithHoles.js");

var iterableToArray = require("./iterableToArray.js");

var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");

var nonIterableRest = require("./nonIterableRest.js");

function _toArray(arr) {
  return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();
}

module.exports = _toArray;
module.exports["default"] = module.exports, module.exports.__esModule = true;var arrayWithoutHoles = require("./arrayWithoutHoles.js");

var iterableToArray = require("./iterableToArray.js");

var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");

var nonIterableSpread = require("./nonIterableSpread.js");

function _toConsumableArray(arr) {
  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();
}

module.exports = _toConsumableArray;
module.exports["default"] = module.exports, module.exports.__esModule = true;var _typeof = require("@babel/runtime/helpers/typeof")["default"];

function _toPrimitive(input, hint) {
  if (_typeof(input) !== "object" || input === null) return input;
  var prim = input[Symbol.toPrimitive];

  if (prim !== undefined) {
    var res = prim.call(input, hint || "default");
    if (_typeof(res) !== "object") return res;
    throw new TypeError("@@toPrimitive must return a primitive value.");
  }

  return (hint === "string" ? String : Number)(input);
}

module.exports = _toPrimitive;
module.exports["default"] = module.exports, module.exports.__esModule = true;var _typeof = require("@babel/runtime/helpers/typeof")["default"];

var toPrimitive = require("./toPrimitive.js");

function _toPropertyKey(arg) {
  var key = toPrimitive(arg, "string");
  return _typeof(key) === "symbol" ? key : String(key);
}

module.exports = _toPropertyKey;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _typeof(obj) {
  "@babel/helpers - typeof";

  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    module.exports = _typeof = function _typeof(obj) {
      return typeof obj;
    };

    module.exports["default"] = module.exports, module.exports.__esModule = true;
  } else {
    module.exports = _typeof = function _typeof(obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };

    module.exports["default"] = module.exports, module.exports.__esModule = true;
  }

  return _typeof(obj);
}

module.exports = _typeof;
module.exports["default"] = module.exports, module.exports.__esModule = true;var arrayLikeToArray = require("./arrayLikeToArray.js");

function _unsupportedIterableToArray(o, minLen) {
  if (!o) return;
  if (typeof o === "string") return arrayLikeToArray(o, minLen);
  var n = Object.prototype.toString.call(o).slice(8, -1);
  if (n === "Object" && o.constructor) n = o.constructor.name;
  if (n === "Map" || n === "Set") return Array.from(o);
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
}

module.exports = _unsupportedIterableToArray;
module.exports["default"] = module.exports, module.exports.__esModule = true;var AsyncGenerator = require("./AsyncGenerator.js");

function _wrapAsyncGenerator(fn) {
  return function () {
    return new AsyncGenerator(fn.apply(this, arguments));
  };
}

module.exports = _wrapAsyncGenerator;
module.exports["default"] = module.exports, module.exports.__esModule = true;var getPrototypeOf = require("./getPrototypeOf.js");

var setPrototypeOf = require("./setPrototypeOf.js");

var isNativeFunction = require("./isNativeFunction.js");

var construct = require("./construct.js");

function _wrapNativeSuper(Class) {
  var _cache = typeof Map === "function" ? new Map() : undefined;

  module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {
    if (Class === null || !isNativeFunction(Class)) return Class;

    if (typeof Class !== "function") {
      throw new TypeError("Super expression must either be null or a function");
    }

    if (typeof _cache !== "undefined") {
      if (_cache.has(Class)) return _cache.get(Class);

      _cache.set(Class, Wrapper);
    }

    function Wrapper() {
      return construct(Class, arguments, getPrototypeOf(this).constructor);
    }

    Wrapper.prototype = Object.create(Class.prototype, {
      constructor: {
        value: Wrapper,
        enumerable: false,
        writable: true,
        configurable: true
      }
    });
    return setPrototypeOf(Wrapper, Class);
  };

  module.exports["default"] = module.exports, module.exports.__esModule = true;
  return _wrapNativeSuper(Class);
}

module.exports = _wrapNativeSuper;
module.exports["default"] = module.exports, module.exports.__esModule = true;var _typeof = require("@babel/runtime/helpers/typeof")["default"];

var setPrototypeOf = require("./setPrototypeOf.js");

var inherits = require("./inherits.js");

function _wrapRegExp() {
  module.exports = _wrapRegExp = function _wrapRegExp(re, groups) {
    return new BabelRegExp(re, undefined, groups);
  };

  module.exports["default"] = module.exports, module.exports.__esModule = true;
  var _super = RegExp.prototype;

  var _groups = new WeakMap();

  function BabelRegExp(re, flags, groups) {
    var _this = new RegExp(re, flags);

    _groups.set(_this, groups || _groups.get(re));

    return setPrototypeOf(_this, BabelRegExp.prototype);
  }

  inherits(BabelRegExp, RegExp);

  BabelRegExp.prototype.exec = function (str) {
    var result = _super.exec.call(this, str);

    if (result) result.groups = buildGroups(result, this);
    return result;
  };

  BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {
    if (typeof substitution === "string") {
      var groups = _groups.get(this);

      return _super[Symbol.replace].call(this, str, substitution.replace(/\$<([^>]+)>/g, function (_, name) {
        return "$" + groups[name];
      }));
    } else if (typeof substitution === "function") {
      var _this = this;

      return _super[Symbol.replace].call(this, str, function () {
        var args = arguments;

        if (_typeof(args[args.length - 1]) !== "object") {
          args = [].slice.call(args);
          args.push(buildGroups(args, _this));
        }

        return substitution.apply(this, args);
      });
    } else {
      return _super[Symbol.replace].call(this, str, substitution);
    }
  };

  function buildGroups(result, re) {
    var g = _groups.get(re);

    return Object.keys(g).reduce(function (groups, name) {
      groups[name] = result[g[name]];
      return groups;
    }, Object.create(null));
  }

  return _wrapRegExp.apply(this, arguments);
}

module.exports = _wrapRegExp;
module.exports["default"] = module.exports, module.exports.__esModule = true;function _writeOnlyError(name) {
  throw new TypeError("\"" + name + "\" is write-only");
}

module.exports = _writeOnlyError;
module.exports["default"] = module.exports, module.exports.__esModule = true;MIT License

Copyright (c) 2014-present Sebastian McKenzie and other contributors

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "@babel/runtime",
  "version": "7.14.0",
  "description": "babel's modular runtime helpers",
  "license": "MIT",
  "publishConfig": {
    "access": "public"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/babel/babel.git",
    "directory": "packages/babel-runtime"
  },
  "homepage": "https://babel.dev/docs/en/next/babel-runtime",
  "author": "Sebastian McKenzie <sebmck@gmail.com>",
  "dependencies": {
    "regenerator-runtime": "^0.13.4"
  },
  "exports": {
    "./helpers/jsx": [
      {
        "node": "./helpers/jsx.js",
        "import": "./helpers/esm/jsx.js",
        "default": "./helpers/jsx.js"
      },
      "./helpers/jsx.js"
    ],
    "./helpers/esm/jsx": "./helpers/esm/jsx.js",
    "./helpers/objectSpread2": [
      {
        "node": "./helpers/objectSpread2.js",
        "import": "./helpers/esm/objectSpread2.js",
        "default": "./helpers/objectSpread2.js"
      },
      "./helpers/objectSpread2.js"
    ],
    "./helpers/esm/objectSpread2": "./helpers/esm/objectSpread2.js",
    "./helpers/typeof": [
      {
        "node": "./helpers/typeof.js",
        "import": "./helpers/esm/typeof.js",
        "default": "./helpers/typeof.js"
      },
      "./helpers/typeof.js"
    ],
    "./helpers/esm/typeof": "./helpers/esm/typeof.js",
    "./helpers/wrapRegExp": [
      {
        "node": "./helpers/wrapRegExp.js",
        "import": "./helpers/esm/wrapRegExp.js",
        "default": "./helpers/wrapRegExp.js"
      },
      "./helpers/wrapRegExp.js"
    ],
    "./helpers/esm/wrapRegExp": "./helpers/esm/wrapRegExp.js",
    "./helpers/asyncIterator": [
      {
        "node": "./helpers/asyncIterator.js",
        "import": "./helpers/esm/asyncIterator.js",
        "default": "./helpers/asyncIterator.js"
      },
      "./helpers/asyncIterator.js"
    ],
    "./helpers/esm/asyncIterator": "./helpers/esm/asyncIterator.js",
    "./helpers/AwaitValue": [
      {
        "node": "./helpers/AwaitValue.js",
        "import": "./helpers/esm/AwaitValue.js",
        "default": "./helpers/AwaitValue.js"
      },
      "./helpers/AwaitValue.js"
    ],
    "./helpers/esm/AwaitValue": "./helpers/esm/AwaitValue.js",
    "./helpers/AsyncGenerator": [
      {
        "node": "./helpers/AsyncGenerator.js",
        "import": "./helpers/esm/AsyncGenerator.js",
        "default": "./helpers/AsyncGenerator.js"
      },
      "./helpers/AsyncGenerator.js"
    ],
    "./helpers/esm/AsyncGenerator": "./helpers/esm/AsyncGenerator.js",
    "./helpers/wrapAsyncGenerator": [
      {
        "node": "./helpers/wrapAsyncGenerator.js",
        "import": "./helpers/esm/wrapAsyncGenerator.js",
        "default": "./helpers/wrapAsyncGenerator.js"
      },
      "./helpers/wrapAsyncGenerator.js"
    ],
    "./helpers/esm/wrapAsyncGenerator": "./helpers/esm/wrapAsyncGenerator.js",
    "./helpers/awaitAsyncGenerator": [
      {
        "node": "./helpers/awaitAsyncGenerator.js",
        "import": "./helpers/esm/awaitAsyncGenerator.js",
        "default": "./helpers/awaitAsyncGenerator.js"
      },
      "./helpers/awaitAsyncGenerator.js"
    ],
    "./helpers/esm/awaitAsyncGenerator": "./helpers/esm/awaitAsyncGenerator.js",
    "./helpers/asyncGeneratorDelegate": [
      {
        "node": "./helpers/asyncGeneratorDelegate.js",
        "import": "./helpers/esm/asyncGeneratorDelegate.js",
        "default": "./helpers/asyncGeneratorDelegate.js"
      },
      "./helpers/asyncGeneratorDelegate.js"
    ],
    "./helpers/esm/asyncGeneratorDelegate": "./helpers/esm/asyncGeneratorDelegate.js",
    "./helpers/asyncToGenerator": [
      {
        "node": "./helpers/asyncToGenerator.js",
        "import": "./helpers/esm/asyncToGenerator.js",
        "default": "./helpers/asyncToGenerator.js"
      },
      "./helpers/asyncToGenerator.js"
    ],
    "./helpers/esm/asyncToGenerator": "./helpers/esm/asyncToGenerator.js",
    "./helpers/classCallCheck": [
      {
        "node": "./helpers/classCallCheck.js",
        "import": "./helpers/esm/classCallCheck.js",
        "default": "./helpers/classCallCheck.js"
      },
      "./helpers/classCallCheck.js"
    ],
    "./helpers/esm/classCallCheck": "./helpers/esm/classCallCheck.js",
    "./helpers/createClass": [
      {
        "node": "./helpers/createClass.js",
        "import": "./helpers/esm/createClass.js",
        "default": "./helpers/createClass.js"
      },
      "./helpers/createClass.js"
    ],
    "./helpers/esm/createClass": "./helpers/esm/createClass.js",
    "./helpers/defineEnumerableProperties": [
      {
        "node": "./helpers/defineEnumerableProperties.js",
        "import": "./helpers/esm/defineEnumerableProperties.js",
        "default": "./helpers/defineEnumerableProperties.js"
      },
      "./helpers/defineEnumerableProperties.js"
    ],
    "./helpers/esm/defineEnumerableProperties": "./helpers/esm/defineEnumerableProperties.js",
    "./helpers/defaults": [
      {
        "node": "./helpers/defaults.js",
        "import": "./helpers/esm/defaults.js",
        "default": "./helpers/defaults.js"
      },
      "./helpers/defaults.js"
    ],
    "./helpers/esm/defaults": "./helpers/esm/defaults.js",
    "./helpers/defineProperty": [
      {
        "node": "./helpers/defineProperty.js",
        "import": "./helpers/esm/defineProperty.js",
        "default": "./helpers/defineProperty.js"
      },
      "./helpers/defineProperty.js"
    ],
    "./helpers/esm/defineProperty": "./helpers/esm/defineProperty.js",
    "./helpers/extends": [
      {
        "node": "./helpers/extends.js",
        "import": "./helpers/esm/extends.js",
        "default": "./helpers/extends.js"
      },
      "./helpers/extends.js"
    ],
    "./helpers/esm/extends": "./helpers/esm/extends.js",
    "./helpers/objectSpread": [
      {
        "node": "./helpers/objectSpread.js",
        "import": "./helpers/esm/objectSpread.js",
        "default": "./helpers/objectSpread.js"
      },
      "./helpers/objectSpread.js"
    ],
    "./helpers/esm/objectSpread": "./helpers/esm/objectSpread.js",
    "./helpers/inherits": [
      {
        "node": "./helpers/inherits.js",
        "import": "./helpers/esm/inherits.js",
        "default": "./helpers/inherits.js"
      },
      "./helpers/inherits.js"
    ],
    "./helpers/esm/inherits": "./helpers/esm/inherits.js",
    "./helpers/inheritsLoose": [
      {
        "node": "./helpers/inheritsLoose.js",
        "import": "./helpers/esm/inheritsLoose.js",
        "default": "./helpers/inheritsLoose.js"
      },
      "./helpers/inheritsLoose.js"
    ],
    "./helpers/esm/inheritsLoose": "./helpers/esm/inheritsLoose.js",
    "./helpers/getPrototypeOf": [
      {
        "node": "./helpers/getPrototypeOf.js",
        "import": "./helpers/esm/getPrototypeOf.js",
        "default": "./helpers/getPrototypeOf.js"
      },
      "./helpers/getPrototypeOf.js"
    ],
    "./helpers/esm/getPrototypeOf": "./helpers/esm/getPrototypeOf.js",
    "./helpers/setPrototypeOf": [
      {
        "node": "./helpers/setPrototypeOf.js",
        "import": "./helpers/esm/setPrototypeOf.js",
        "default": "./helpers/setPrototypeOf.js"
      },
      "./helpers/setPrototypeOf.js"
    ],
    "./helpers/esm/setPrototypeOf": "./helpers/esm/setPrototypeOf.js",
    "./helpers/isNativeReflectConstruct": [
      {
        "node": "./helpers/isNativeReflectConstruct.js",
        "import": "./helpers/esm/isNativeReflectConstruct.js",
        "default": "./helpers/isNativeReflectConstruct.js"
      },
      "./helpers/isNativeReflectConstruct.js"
    ],
    "./helpers/esm/isNativeReflectConstruct": "./helpers/esm/isNativeReflectConstruct.js",
    "./helpers/construct": [
      {
        "node": "./helpers/construct.js",
        "import": "./helpers/esm/construct.js",
        "default": "./helpers/construct.js"
      },
      "./helpers/construct.js"
    ],
    "./helpers/esm/construct": "./helpers/esm/construct.js",
    "./helpers/isNativeFunction": [
      {
        "node": "./helpers/isNativeFunction.js",
        "import": "./helpers/esm/isNativeFunction.js",
        "default": "./helpers/isNativeFunction.js"
      },
      "./helpers/isNativeFunction.js"
    ],
    "./helpers/esm/isNativeFunction": "./helpers/esm/isNativeFunction.js",
    "./helpers/wrapNativeSuper": [
      {
        "node": "./helpers/wrapNativeSuper.js",
        "import": "./helpers/esm/wrapNativeSuper.js",
        "default": "./helpers/wrapNativeSuper.js"
      },
      "./helpers/wrapNativeSuper.js"
    ],
    "./helpers/esm/wrapNativeSuper": "./helpers/esm/wrapNativeSuper.js",
    "./helpers/instanceof": [
      {
        "node": "./helpers/instanceof.js",
        "import": "./helpers/esm/instanceof.js",
        "default": "./helpers/instanceof.js"
      },
      "./helpers/instanceof.js"
    ],
    "./helpers/esm/instanceof": "./helpers/esm/instanceof.js",
    "./helpers/interopRequireDefault": [
      {
        "node": "./helpers/interopRequireDefault.js",
        "import": "./helpers/esm/interopRequireDefault.js",
        "default": "./helpers/interopRequireDefault.js"
      },
      "./helpers/interopRequireDefault.js"
    ],
    "./helpers/esm/interopRequireDefault": "./helpers/esm/interopRequireDefault.js",
    "./helpers/interopRequireWildcard": [
      {
        "node": "./helpers/interopRequireWildcard.js",
        "import": "./helpers/esm/interopRequireWildcard.js",
        "default": "./helpers/interopRequireWildcard.js"
      },
      "./helpers/interopRequireWildcard.js"
    ],
    "./helpers/esm/interopRequireWildcard": "./helpers/esm/interopRequireWildcard.js",
    "./helpers/newArrowCheck": [
      {
        "node": "./helpers/newArrowCheck.js",
        "import": "./helpers/esm/newArrowCheck.js",
        "default": "./helpers/newArrowCheck.js"
      },
      "./helpers/newArrowCheck.js"
    ],
    "./helpers/esm/newArrowCheck": "./helpers/esm/newArrowCheck.js",
    "./helpers/objectDestructuringEmpty": [
      {
        "node": "./helpers/objectDestructuringEmpty.js",
        "import": "./helpers/esm/objectDestructuringEmpty.js",
        "default": "./helpers/objectDestructuringEmpty.js"
      },
      "./helpers/objectDestructuringEmpty.js"
    ],
    "./helpers/esm/objectDestructuringEmpty": "./helpers/esm/objectDestructuringEmpty.js",
    "./helpers/objectWithoutPropertiesLoose": [
      {
        "node": "./helpers/objectWithoutPropertiesLoose.js",
        "import": "./helpers/esm/objectWithoutPropertiesLoose.js",
        "default": "./helpers/objectWithoutPropertiesLoose.js"
      },
      "./helpers/objectWithoutPropertiesLoose.js"
    ],
    "./helpers/esm/objectWithoutPropertiesLoose": "./helpers/esm/objectWithoutPropertiesLoose.js",
    "./helpers/objectWithoutProperties": [
      {
        "node": "./helpers/objectWithoutProperties.js",
        "import": "./helpers/esm/objectWithoutProperties.js",
        "default": "./helpers/objectWithoutProperties.js"
      },
      "./helpers/objectWithoutProperties.js"
    ],
    "./helpers/esm/objectWithoutProperties": "./helpers/esm/objectWithoutProperties.js",
    "./helpers/assertThisInitialized": [
      {
        "node": "./helpers/assertThisInitialized.js",
        "import": "./helpers/esm/assertThisInitialized.js",
        "default": "./helpers/assertThisInitialized.js"
      },
      "./helpers/assertThisInitialized.js"
    ],
    "./helpers/esm/assertThisInitialized": "./helpers/esm/assertThisInitialized.js",
    "./helpers/possibleConstructorReturn": [
      {
        "node": "./helpers/possibleConstructorReturn.js",
        "import": "./helpers/esm/possibleConstructorReturn.js",
        "default": "./helpers/possibleConstructorReturn.js"
      },
      "./helpers/possibleConstructorReturn.js"
    ],
    "./helpers/esm/possibleConstructorReturn": "./helpers/esm/possibleConstructorReturn.js",
    "./helpers/createSuper": [
      {
        "node": "./helpers/createSuper.js",
        "import": "./helpers/esm/createSuper.js",
        "default": "./helpers/createSuper.js"
      },
      "./helpers/createSuper.js"
    ],
    "./helpers/esm/createSuper": "./helpers/esm/createSuper.js",
    "./helpers/superPropBase": [
      {
        "node": "./helpers/superPropBase.js",
        "import": "./helpers/esm/superPropBase.js",
        "default": "./helpers/superPropBase.js"
      },
      "./helpers/superPropBase.js"
    ],
    "./helpers/esm/superPropBase": "./helpers/esm/superPropBase.js",
    "./helpers/get": [
      {
        "node": "./helpers/get.js",
        "import": "./helpers/esm/get.js",
        "default": "./helpers/get.js"
      },
      "./helpers/get.js"
    ],
    "./helpers/esm/get": "./helpers/esm/get.js",
    "./helpers/set": [
      {
        "node": "./helpers/set.js",
        "import": "./helpers/esm/set.js",
        "default": "./helpers/set.js"
      },
      "./helpers/set.js"
    ],
    "./helpers/esm/set": "./helpers/esm/set.js",
    "./helpers/taggedTemplateLiteral": [
      {
        "node": "./helpers/taggedTemplateLiteral.js",
        "import": "./helpers/esm/taggedTemplateLiteral.js",
        "default": "./helpers/taggedTemplateLiteral.js"
      },
      "./helpers/taggedTemplateLiteral.js"
    ],
    "./helpers/esm/taggedTemplateLiteral": "./helpers/esm/taggedTemplateLiteral.js",
    "./helpers/taggedTemplateLiteralLoose": [
      {
        "node": "./helpers/taggedTemplateLiteralLoose.js",
        "import": "./helpers/esm/taggedTemplateLiteralLoose.js",
        "default": "./helpers/taggedTemplateLiteralLoose.js"
      },
      "./helpers/taggedTemplateLiteralLoose.js"
    ],
    "./helpers/esm/taggedTemplateLiteralLoose": "./helpers/esm/taggedTemplateLiteralLoose.js",
    "./helpers/readOnlyError": [
      {
        "node": "./helpers/readOnlyError.js",
        "import": "./helpers/esm/readOnlyError.js",
        "default": "./helpers/readOnlyError.js"
      },
      "./helpers/readOnlyError.js"
    ],
    "./helpers/esm/readOnlyError": "./helpers/esm/readOnlyError.js",
    "./helpers/writeOnlyError": [
      {
        "node": "./helpers/writeOnlyError.js",
        "import": "./helpers/esm/writeOnlyError.js",
        "default": "./helpers/writeOnlyError.js"
      },
      "./helpers/writeOnlyError.js"
    ],
    "./helpers/esm/writeOnlyError": "./helpers/esm/writeOnlyError.js",
    "./helpers/classNameTDZError": [
      {
        "node": "./helpers/classNameTDZError.js",
        "import": "./helpers/esm/classNameTDZError.js",
        "default": "./helpers/classNameTDZError.js"
      },
      "./helpers/classNameTDZError.js"
    ],
    "./helpers/esm/classNameTDZError": "./helpers/esm/classNameTDZError.js",
    "./helpers/temporalUndefined": [
      {
        "node": "./helpers/temporalUndefined.js",
        "import": "./helpers/esm/temporalUndefined.js",
        "default": "./helpers/temporalUndefined.js"
      },
      "./helpers/temporalUndefined.js"
    ],
    "./helpers/esm/temporalUndefined": "./helpers/esm/temporalUndefined.js",
    "./helpers/tdz": [
      {
        "node": "./helpers/tdz.js",
        "import": "./helpers/esm/tdz.js",
        "default": "./helpers/tdz.js"
      },
      "./helpers/tdz.js"
    ],
    "./helpers/esm/tdz": "./helpers/esm/tdz.js",
    "./helpers/temporalRef": [
      {
        "node": "./helpers/temporalRef.js",
        "import": "./helpers/esm/temporalRef.js",
        "default": "./helpers/temporalRef.js"
      },
      "./helpers/temporalRef.js"
    ],
    "./helpers/esm/temporalRef": "./helpers/esm/temporalRef.js",
    "./helpers/slicedToArray": [
      {
        "node": "./helpers/slicedToArray.js",
        "import": "./helpers/esm/slicedToArray.js",
        "default": "./helpers/slicedToArray.js"
      },
      "./helpers/slicedToArray.js"
    ],
    "./helpers/esm/slicedToArray": "./helpers/esm/slicedToArray.js",
    "./helpers/slicedToArrayLoose": [
      {
        "node": "./helpers/slicedToArrayLoose.js",
        "import": "./helpers/esm/slicedToArrayLoose.js",
        "default": "./helpers/slicedToArrayLoose.js"
      },
      "./helpers/slicedToArrayLoose.js"
    ],
    "./helpers/esm/slicedToArrayLoose": "./helpers/esm/slicedToArrayLoose.js",
    "./helpers/toArray": [
      {
        "node": "./helpers/toArray.js",
        "import": "./helpers/esm/toArray.js",
        "default": "./helpers/toArray.js"
      },
      "./helpers/toArray.js"
    ],
    "./helpers/esm/toArray": "./helpers/esm/toArray.js",
    "./helpers/toConsumableArray": [
      {
        "node": "./helpers/toConsumableArray.js",
        "import": "./helpers/esm/toConsumableArray.js",
        "default": "./helpers/toConsumableArray.js"
      },
      "./helpers/toConsumableArray.js"
    ],
    "./helpers/esm/toConsumableArray": "./helpers/esm/toConsumableArray.js",
    "./helpers/arrayWithoutHoles": [
      {
        "node": "./helpers/arrayWithoutHoles.js",
        "import": "./helpers/esm/arrayWithoutHoles.js",
        "default": "./helpers/arrayWithoutHoles.js"
      },
      "./helpers/arrayWithoutHoles.js"
    ],
    "./helpers/esm/arrayWithoutHoles": "./helpers/esm/arrayWithoutHoles.js",
    "./helpers/arrayWithHoles": [
      {
        "node": "./helpers/arrayWithHoles.js",
        "import": "./helpers/esm/arrayWithHoles.js",
        "default": "./helpers/arrayWithHoles.js"
      },
      "./helpers/arrayWithHoles.js"
    ],
    "./helpers/esm/arrayWithHoles": "./helpers/esm/arrayWithHoles.js",
    "./helpers/maybeArrayLike": [
      {
        "node": "./helpers/maybeArrayLike.js",
        "import": "./helpers/esm/maybeArrayLike.js",
        "default": "./helpers/maybeArrayLike.js"
      },
      "./helpers/maybeArrayLike.js"
    ],
    "./helpers/esm/maybeArrayLike": "./helpers/esm/maybeArrayLike.js",
    "./helpers/iterableToArray": [
      {
        "node": "./helpers/iterableToArray.js",
        "import": "./helpers/esm/iterableToArray.js",
        "default": "./helpers/iterableToArray.js"
      },
      "./helpers/iterableToArray.js"
    ],
    "./helpers/esm/iterableToArray": "./helpers/esm/iterableToArray.js",
    "./helpers/iterableToArrayLimit": [
      {
        "node": "./helpers/iterableToArrayLimit.js",
        "import": "./helpers/esm/iterableToArrayLimit.js",
        "default": "./helpers/iterableToArrayLimit.js"
      },
      "./helpers/iterableToArrayLimit.js"
    ],
    "./helpers/esm/iterableToArrayLimit": "./helpers/esm/iterableToArrayLimit.js",
    "./helpers/iterableToArrayLimitLoose": [
      {
        "node": "./helpers/iterableToArrayLimitLoose.js",
        "import": "./helpers/esm/iterableToArrayLimitLoose.js",
        "default": "./helpers/iterableToArrayLimitLoose.js"
      },
      "./helpers/iterableToArrayLimitLoose.js"
    ],
    "./helpers/esm/iterableToArrayLimitLoose": "./helpers/esm/iterableToArrayLimitLoose.js",
    "./helpers/unsupportedIterableToArray": [
      {
        "node": "./helpers/unsupportedIterableToArray.js",
        "import": "./helpers/esm/unsupportedIterableToArray.js",
        "default": "./helpers/unsupportedIterableToArray.js"
      },
      "./helpers/unsupportedIterableToArray.js"
    ],
    "./helpers/esm/unsupportedIterableToArray": "./helpers/esm/unsupportedIterableToArray.js",
    "./helpers/arrayLikeToArray": [
      {
        "node": "./helpers/arrayLikeToArray.js",
        "import": "./helpers/esm/arrayLikeToArray.js",
        "default": "./helpers/arrayLikeToArray.js"
      },
      "./helpers/arrayLikeToArray.js"
    ],
    "./helpers/esm/arrayLikeToArray": "./helpers/esm/arrayLikeToArray.js",
    "./helpers/nonIterableSpread": [
      {
        "node": "./helpers/nonIterableSpread.js",
        "import": "./helpers/esm/nonIterableSpread.js",
        "default": "./helpers/nonIterableSpread.js"
      },
      "./helpers/nonIterableSpread.js"
    ],
    "./helpers/esm/nonIterableSpread": "./helpers/esm/nonIterableSpread.js",
    "./helpers/nonIterableRest": [
      {
        "node": "./helpers/nonIterableRest.js",
        "import": "./helpers/esm/nonIterableRest.js",
        "default": "./helpers/nonIterableRest.js"
      },
      "./helpers/nonIterableRest.js"
    ],
    "./helpers/esm/nonIterableRest": "./helpers/esm/nonIterableRest.js",
    "./helpers/createForOfIteratorHelper": [
      {
        "node": "./helpers/createForOfIteratorHelper.js",
        "import": "./helpers/esm/createForOfIteratorHelper.js",
        "default": "./helpers/createForOfIteratorHelper.js"
      },
      "./helpers/createForOfIteratorHelper.js"
    ],
    "./helpers/esm/createForOfIteratorHelper": "./helpers/esm/createForOfIteratorHelper.js",
    "./helpers/createForOfIteratorHelperLoose": [
      {
        "node": "./helpers/createForOfIteratorHelperLoose.js",
        "import": "./helpers/esm/createForOfIteratorHelperLoose.js",
        "default": "./helpers/createForOfIteratorHelperLoose.js"
      },
      "./helpers/createForOfIteratorHelperLoose.js"
    ],
    "./helpers/esm/createForOfIteratorHelperLoose": "./helpers/esm/createForOfIteratorHelperLoose.js",
    "./helpers/skipFirstGeneratorNext": [
      {
        "node": "./helpers/skipFirstGeneratorNext.js",
        "import": "./helpers/esm/skipFirstGeneratorNext.js",
        "default": "./helpers/skipFirstGeneratorNext.js"
      },
      "./helpers/skipFirstGeneratorNext.js"
    ],
    "./helpers/esm/skipFirstGeneratorNext": "./helpers/esm/skipFirstGeneratorNext.js",
    "./helpers/toPrimitive": [
      {
        "node": "./helpers/toPrimitive.js",
        "import": "./helpers/esm/toPrimitive.js",
        "default": "./helpers/toPrimitive.js"
      },
      "./helpers/toPrimitive.js"
    ],
    "./helpers/esm/toPrimitive": "./helpers/esm/toPrimitive.js",
    "./helpers/toPropertyKey": [
      {
        "node": "./helpers/toPropertyKey.js",
        "import": "./helpers/esm/toPropertyKey.js",
        "default": "./helpers/toPropertyKey.js"
      },
      "./helpers/toPropertyKey.js"
    ],
    "./helpers/esm/toPropertyKey": "./helpers/esm/toPropertyKey.js",
    "./helpers/initializerWarningHelper": [
      {
        "node": "./helpers/initializerWarningHelper.js",
        "import": "./helpers/esm/initializerWarningHelper.js",
        "default": "./helpers/initializerWarningHelper.js"
      },
      "./helpers/initializerWarningHelper.js"
    ],
    "./helpers/esm/initializerWarningHelper": "./helpers/esm/initializerWarningHelper.js",
    "./helpers/initializerDefineProperty": [
      {
        "node": "./helpers/initializerDefineProperty.js",
        "import": "./helpers/esm/initializerDefineProperty.js",
        "default": "./helpers/initializerDefineProperty.js"
      },
      "./helpers/initializerDefineProperty.js"
    ],
    "./helpers/esm/initializerDefineProperty": "./helpers/esm/initializerDefineProperty.js",
    "./helpers/applyDecoratedDescriptor": [
      {
        "node": "./helpers/applyDecoratedDescriptor.js",
        "import": "./helpers/esm/applyDecoratedDescriptor.js",
        "default": "./helpers/applyDecoratedDescriptor.js"
      },
      "./helpers/applyDecoratedDescriptor.js"
    ],
    "./helpers/esm/applyDecoratedDescriptor": "./helpers/esm/applyDecoratedDescriptor.js",
    "./helpers/classPrivateFieldLooseKey": [
      {
        "node": "./helpers/classPrivateFieldLooseKey.js",
        "import": "./helpers/esm/classPrivateFieldLooseKey.js",
        "default": "./helpers/classPrivateFieldLooseKey.js"
      },
      "./helpers/classPrivateFieldLooseKey.js"
    ],
    "./helpers/esm/classPrivateFieldLooseKey": "./helpers/esm/classPrivateFieldLooseKey.js",
    "./helpers/classPrivateFieldLooseBase": [
      {
        "node": "./helpers/classPrivateFieldLooseBase.js",
        "import": "./helpers/esm/classPrivateFieldLooseBase.js",
        "default": "./helpers/classPrivateFieldLooseBase.js"
      },
      "./helpers/classPrivateFieldLooseBase.js"
    ],
    "./helpers/esm/classPrivateFieldLooseBase": "./helpers/esm/classPrivateFieldLooseBase.js",
    "./helpers/classPrivateFieldGet": [
      {
        "node": "./helpers/classPrivateFieldGet.js",
        "import": "./helpers/esm/classPrivateFieldGet.js",
        "default": "./helpers/classPrivateFieldGet.js"
      },
      "./helpers/classPrivateFieldGet.js"
    ],
    "./helpers/esm/classPrivateFieldGet": "./helpers/esm/classPrivateFieldGet.js",
    "./helpers/classPrivateFieldSet": [
      {
        "node": "./helpers/classPrivateFieldSet.js",
        "import": "./helpers/esm/classPrivateFieldSet.js",
        "default": "./helpers/classPrivateFieldSet.js"
      },
      "./helpers/classPrivateFieldSet.js"
    ],
    "./helpers/esm/classPrivateFieldSet": "./helpers/esm/classPrivateFieldSet.js",
    "./helpers/classPrivateFieldDestructureSet": [
      {
        "node": "./helpers/classPrivateFieldDestructureSet.js",
        "import": "./helpers/esm/classPrivateFieldDestructureSet.js",
        "default": "./helpers/classPrivateFieldDestructureSet.js"
      },
      "./helpers/classPrivateFieldDestructureSet.js"
    ],
    "./helpers/esm/classPrivateFieldDestructureSet": "./helpers/esm/classPrivateFieldDestructureSet.js",
    "./helpers/classExtractFieldDescriptor": [
      {
        "node": "./helpers/classExtractFieldDescriptor.js",
        "import": "./helpers/esm/classExtractFieldDescriptor.js",
        "default": "./helpers/classExtractFieldDescriptor.js"
      },
      "./helpers/classExtractFieldDescriptor.js"
    ],
    "./helpers/esm/classExtractFieldDescriptor": "./helpers/esm/classExtractFieldDescriptor.js",
    "./helpers/classStaticPrivateFieldSpecGet": [
      {
        "node": "./helpers/classStaticPrivateFieldSpecGet.js",
        "import": "./helpers/esm/classStaticPrivateFieldSpecGet.js",
        "default": "./helpers/classStaticPrivateFieldSpecGet.js"
      },
      "./helpers/classStaticPrivateFieldSpecGet.js"
    ],
    "./helpers/esm/classStaticPrivateFieldSpecGet": "./helpers/esm/classStaticPrivateFieldSpecGet.js",
    "./helpers/classStaticPrivateFieldSpecSet": [
      {
        "node": "./helpers/classStaticPrivateFieldSpecSet.js",
        "import": "./helpers/esm/classStaticPrivateFieldSpecSet.js",
        "default": "./helpers/classStaticPrivateFieldSpecSet.js"
      },
      "./helpers/classStaticPrivateFieldSpecSet.js"
    ],
    "./helpers/esm/classStaticPrivateFieldSpecSet": "./helpers/esm/classStaticPrivateFieldSpecSet.js",
    "./helpers/classStaticPrivateMethodGet": [
      {
        "node": "./helpers/classStaticPrivateMethodGet.js",
        "import": "./helpers/esm/classStaticPrivateMethodGet.js",
        "default": "./helpers/classStaticPrivateMethodGet.js"
      },
      "./helpers/classStaticPrivateMethodGet.js"
    ],
    "./helpers/esm/classStaticPrivateMethodGet": "./helpers/esm/classStaticPrivateMethodGet.js",
    "./helpers/classStaticPrivateMethodSet": [
      {
        "node": "./helpers/classStaticPrivateMethodSet.js",
        "import": "./helpers/esm/classStaticPrivateMethodSet.js",
        "default": "./helpers/classStaticPrivateMethodSet.js"
      },
      "./helpers/classStaticPrivateMethodSet.js"
    ],
    "./helpers/esm/classStaticPrivateMethodSet": "./helpers/esm/classStaticPrivateMethodSet.js",
    "./helpers/classApplyDescriptorGet": [
      {
        "node": "./helpers/classApplyDescriptorGet.js",
        "import": "./helpers/esm/classApplyDescriptorGet.js",
        "default": "./helpers/classApplyDescriptorGet.js"
      },
      "./helpers/classApplyDescriptorGet.js"
    ],
    "./helpers/esm/classApplyDescriptorGet": "./helpers/esm/classApplyDescriptorGet.js",
    "./helpers/classApplyDescriptorSet": [
      {
        "node": "./helpers/classApplyDescriptorSet.js",
        "import": "./helpers/esm/classApplyDescriptorSet.js",
        "default": "./helpers/classApplyDescriptorSet.js"
      },
      "./helpers/classApplyDescriptorSet.js"
    ],
    "./helpers/esm/classApplyDescriptorSet": "./helpers/esm/classApplyDescriptorSet.js",
    "./helpers/classApplyDescriptorDestructureSet": [
      {
        "node": "./helpers/classApplyDescriptorDestructureSet.js",
        "import": "./helpers/esm/classApplyDescriptorDestructureSet.js",
        "default": "./helpers/classApplyDescriptorDestructureSet.js"
      },
      "./helpers/classApplyDescriptorDestructureSet.js"
    ],
    "./helpers/esm/classApplyDescriptorDestructureSet": "./helpers/esm/classApplyDescriptorDestructureSet.js",
    "./helpers/classStaticPrivateFieldDestructureSet": [
      {
        "node": "./helpers/classStaticPrivateFieldDestructureSet.js",
        "import": "./helpers/esm/classStaticPrivateFieldDestructureSet.js",
        "default": "./helpers/classStaticPrivateFieldDestructureSet.js"
      },
      "./helpers/classStaticPrivateFieldDestructureSet.js"
    ],
    "./helpers/esm/classStaticPrivateFieldDestructureSet": "./helpers/esm/classStaticPrivateFieldDestructureSet.js",
    "./helpers/classCheckPrivateStaticAccess": [
      {
        "node": "./helpers/classCheckPrivateStaticAccess.js",
        "import": "./helpers/esm/classCheckPrivateStaticAccess.js",
        "default": "./helpers/classCheckPrivateStaticAccess.js"
      },
      "./helpers/classCheckPrivateStaticAccess.js"
    ],
    "./helpers/esm/classCheckPrivateStaticAccess": "./helpers/esm/classCheckPrivateStaticAccess.js",
    "./helpers/classCheckPrivateStaticFieldDescriptor": [
      {
        "node": "./helpers/classCheckPrivateStaticFieldDescriptor.js",
        "import": "./helpers/esm/classCheckPrivateStaticFieldDescriptor.js",
        "default": "./helpers/classCheckPrivateStaticFieldDescriptor.js"
      },
      "./helpers/classCheckPrivateStaticFieldDescriptor.js"
    ],
    "./helpers/esm/classCheckPrivateStaticFieldDescriptor": "./helpers/esm/classCheckPrivateStaticFieldDescriptor.js",
    "./helpers/decorate": [
      {
        "node": "./helpers/decorate.js",
        "import": "./helpers/esm/decorate.js",
        "default": "./helpers/decorate.js"
      },
      "./helpers/decorate.js"
    ],
    "./helpers/esm/decorate": "./helpers/esm/decorate.js",
    "./helpers/classPrivateMethodGet": [
      {
        "node": "./helpers/classPrivateMethodGet.js",
        "import": "./helpers/esm/classPrivateMethodGet.js",
        "default": "./helpers/classPrivateMethodGet.js"
      },
      "./helpers/classPrivateMethodGet.js"
    ],
    "./helpers/esm/classPrivateMethodGet": "./helpers/esm/classPrivateMethodGet.js",
    "./helpers/classPrivateMethodSet": [
      {
        "node": "./helpers/classPrivateMethodSet.js",
        "import": "./helpers/esm/classPrivateMethodSet.js",
        "default": "./helpers/classPrivateMethodSet.js"
      },
      "./helpers/classPrivateMethodSet.js"
    ],
    "./helpers/esm/classPrivateMethodSet": "./helpers/esm/classPrivateMethodSet.js",
    "./package": "./package.json",
    "./package.json": "./package.json",
    "./regenerator": "./regenerator/index.js",
    "./regenerator/*.js": "./regenerator/*.js",
    "./regenerator/": "./regenerator/"
  }
}module.exports = require("regenerator-runtime");
Ïúíþ              …€        X  __TEXT                   €               €                   __text          __TEXT          D7      \3      D7               €            __stubs         __TEXT           j      Ü       j              €           __stub_helper   __TEXT          |m      Ä      |m               €            __objc_stubs    __TEXT          @p              @p               €            __objc_methlist __TEXT          àp             àp                             __gcc_except_tab__TEXT          ôp      È      ôp                             __objc_classname__TEXT          ¼w             ¼w                             __objc_methname __TEXT          Úw      è      Úw                            __objc_methtype __TEXT          Ây      T       Ây                             __cstring       __TEXT          z      g      z                             __const         __TEXT          }|      ¬       }|                              __unwind_info   __TEXT          ,}      ”      ,}                             __eh_frame      __TEXT          À      8       À                                (  __DATA_CONST     €       @       €       @                  __got           __DATA_CONST     €      ˆ        €                =           __mod_init_func __DATA_CONST    ˆ€             ˆ€             	               __const         __DATA_CONST    ˜€      Ø      ˜€                             __objc_classlist__DATA_CONST    p‚             p‚                            __objc_protolist__DATA_CONST    x‚             x‚                             __objc_imageinfo__DATA_CONST    €‚             €‚                                x  __DATA           À       @       À       @                   __la_symbol_ptr __DATA           À      è       À                N           __objc_const    __DATA          èÁ      ð      èÁ                             __objc_selrefs  __DATA          ØÃ      0       ØÃ                           __objc_classrefs__DATA          Ä             Ä                            __objc_data     __DATA          Ä      P       Ä                             __data          __DATA          hÄ      °       hÄ                             __bss           __DATA          Å                                              H   __LINKEDIT              À             k‹                    "  €0      `   `  Ð  0 `     ˜ ¸        ¸ V  H5 €R     P                N                           3 ‹                         ôËìê©™5¹,ZÝ…#ÅÕ2                      Y*                €`               /System/Library/Frameworks/CoreWLAN.framework/Versions/A/CoreWLAN          0          AÜ   /usr/lib/libc++.1.dylib    8         d'   /usr/lib/libSystem.B.dylib      &      P h   )      ¸           Ð‡ ›                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ÿCÑôO©ý{©ý‘ ÕˆHX@ù¨ƒø Õ€mXhR Õó# ‘è ùó ùá# ‘$  ”à@ù ë   Tà  ´ @ù@ù   @ù@ù ?Ö¨ƒ^ø Õ‰EX)@ù?ë¡  Tý{D©ôOC©ÿC‘À_Öú ”è# ‘ó ªà@ù ë  T @ù@ù  €  ´ @ù@ù ?Öàª¤ ”ÿÃÑôO©ý{©ýƒ‘ó ª ÕèAX@ù¨ƒø @ù  ´?  ë  T @ù	@ù ?Öà# ù	  ÿ# ù  è£ ‘è# ù @ù@ùá£ ‘ ?Öÿ ùô# ‘á£ ‘â# ‘àª9  ”à@ùŸ ë   Tà  ´ @ù@ù   @ù@ù ?Öà#@ùè£ ‘ ë   Tà  ´ @ù@ù   @ù@ù ?Ö¨ƒ^ø ÕÉ;X)@ù?ë¡  Tý{F©ôOE©ÿÃ‘À_Ö¬ ”ó ªà@ùŸ ë  T @ù@ù  €  ´ @ù@ù ?Öà#@ùè£ ‘ ë  T @ù@ù  €  ´ @ù@ù ?ÖàªL ”ÿÃÑôO©ý{©ýƒ‘ Õ7X@ù¨ƒø @ùS	 ´ôª @ù@ ´?  ë€ T @ù	@ù ?Öà# ù€@ùÀ µ  ÿ# ù€@ù@ µ  è£ ‘è# ù @ù@ùá£ ‘ ?Ö€@ùÀ  ´Ÿ ëÀ  T @ù	@ù ?Öà ù  è# ‘è ù @ù@ùá# ‘ ?Öô# ‘á£ ‘â# ‘àªM  ”à@ùŸ ë   Tà  ´ @ù@ù   @ù@ù ?Öà#@ùè£ ‘ ë   Tà  ´ @ù@ù   @ù@ù ?Ö¨ƒ^ø ÕI.X)@ù?ë! Tý{F©ôOE©ÿÃ‘À_Ö €R- ”ô ªÁúp Õù ”. Õ Õâ)Xàª2 ”4 ”ó ªàª+ ”  ó ª  ó ªà@ùŸ ë  T @ù@ù  €  ´ @ù@ù ?Öà#@ùè£ ‘ ë  T @ù@ù  `  µàªÑ ” @ù@ù ?ÖàªÌ ”ÿÑöW©ôO©ý{©ýÃ‘õªöªô ª Õˆ&X@ù¨ƒøÀ‘àªØ ”À@ùÀ  ´ß ëÀ  T @ù	@ù ?Öà ù  è# ‘è ù @ù@ùá# ‘ ?Ö @ùÀ  ´¿ ëÀ  T @ù	@ù ?Öà# ù  è# ‘ ‘á# ù @ù@ù ?Ö•¢O©¿ë" Tè@ùh ´é# ‘?ë` T)a ‘¨ ù  €Â‘á# ‘c  ”  ©b ‘? ù  µ ùà@ù @ù@ùáª ?Öè#@ù ´é# ‘* ‘_ëà  T)á ‘¨ ù  ©â ‘? ù  ¡‚ ‘¡ ùà#@ù @ù@ù ?Ö¨‘ˆ~ ùè# ‘ ‘à#@ù ë   Tà  ´ @ù@ù   @ù@ù ?Öà@ùè# ‘ ë   Tà  ´ @ù@ù   @ù@ù ?Ö€Â ‘ ”àªv ”¨ƒ]ø ÕéX)@ù?ëÁ  Tý{G©ôOF©öWE©ÿ‘À_Ö” ”  ”  ”ô ªà# ‘Ì  ”  ô ªà@ùè# ‘ ë¡  T @ù@ù ?Ö  à  ´ @ù@ù ?Ö    ô ªàªR ”àª2 ”ý{¿©l ”V ”úg»©ø_©öW©ôO©ý{©ý‘$@©)Ë8ýF“	 ‘*ýzÓJ µöªó ª
@ùëãz²HË
ýE“_	ëI‰šë€ÿ’71ˆš÷  ´èþzÓ¨ µàæzÓF ”õ ª   €Ò´‹èª AøÀ  ´ß ëà  T©‹  ù  ˆb ‘ ù  ¨‹ ù @ù@ùáª ?Ö©‹èª Cøà  ´Ê‚ ‘_ ëà  T©‹  ù  (á ‘ ù  ! ‘¨‹ ù @ù@ù ?Ö¶‹—‘xV@©¿ë 
 T €Òúª  H# Ñ ùZÑ9Ñ¨‹ë` Tª‹è
ª	]øé  ´JÑ_	ëà  TŠ‹Iø  H£ Ñ ù
  ‰‹)ÑŠ‹AÑIø @ù @ù@ù ?Öª‹è
ª	_ø	üÿ´J Ñ_	ë€  TŠ‹IøÛÿÿ‰‹) ÑŠ‹A ÑIø @ù @ù@ù ?ÖÒÿÿu"@©‰‹i^ ©v
 ùë  T Ñ   @ù@ù ?ÖsÑŸë  T`@ù ë   Tà  ´ @ù@ù   @ù@ù ?Ö`‚_øt‚ ÑŸ ë ýÿTàýÿ´ @ù@ùëÿÿt^ ©v
 ù ´àªý{D©ôOC©öWB©ø_A©úgÅ¨µ
 ý{D©ôOC©öWB©ø_A©úgÅ¨À_Ö#  ”%  ”Nÿÿ—Mÿÿ—Lÿÿ—Kÿÿ—ôO¾©ý{©ýC ‘ó ª€ ‘ @ù ë   Tà  ´ @ù@ù   @ù@ù ?Ö`@ù ë   Tà  ´ @ù@ù   @ù@ù ?Öàªý{A©ôOÂ¨À_Öý{¿©ý ‘  ”ý{¿©ý ‘ €RŽ
 ”c
 ”þ Õ Õ¢öX—
 ”ôO¾©ý{©ýC ‘ €Rƒ
 ”ó ª  ”û Õ Õ¢ôXàªŠ
 ”ô ªàª„
 ”àª@
 ”ý{¿©ý ‘¡ÄP Õ>
 ” Õ¨ôXA ‘  ùý{Á¨À_ÖÀ_Ö`
 ý{¿©ý ‘ €Rb
 ”ˆþ Õ  ùý{Á¨À_Öèý Õ(  ùÀ_ÖÀ_ÖQ
 ÿƒÑöW©ôO©ý{©ýC‘ôª ÕÈñX@ùè ù3 @ùá# ‘àªv
 ”  5è@ùó£ ©Êp Õ‚Ê Õà# ‘Ï  ”!Ê0 ÕÊP Õà# ‘ ”õc ‘ác ‘àª„
 ”  5é#A©è§©¢B ‘ác ‘àª< ”è@ù ÕiíX)@ù?ë! Tý{E©ôOD©öWC©ÿƒ‘À_Ö €R%
 ”ô ªè ªàª  ”   €R
 ”ô ªè ªàª  ”¡ñ Õ ÕBçXàª#
 ”%
 ”  ó ªàª
 ”àª×	 ”ÿCÑöW©ôO©ý{©ý‘ô ªóªÿ ùá# ‘H
 ”À	 5á_ ‘àªV
 ”à	 5è_@9H 4ác ‘àª8
 ”` 4`µ0 Õ·p ÕO ”è@ù@ù‰·0 Õ ñ5ˆšàª]
 ”â ªã ‘àªáª
 ”  5è@ù@¹ q) €R(!È‰€R	
™@z  Tâ@ùãc ‘àª €Ò

 ”  5õª¿øá@ùb 9 ÕHàXA ‘hR ©öªßøþ©Á  ´àª" €Rãªó	 ”` 5ý{D©ôOC©öWB©ÿC‘À_Öâ@ùãc ‘àª €Òß	 ” üÿ4 ­0 Õá±P Õ ” ­0 Õ!­ Õ ”`¬0 ÕA­0 Õ ”à° Õ±0 Õ ”   Ô «0 Õ®P Õü ”ô ªÈ^À9h ø6À@ù’	 ”àª‡	 ”a
@ùÁ  ´hb@9h  5`@ùÉ	 ”¿ ùàªZ	 ”(þÿ—ôO¾©ý{©ýC ‘ó ª Õh×XA ‘  ùÜÀ9h ø6`@ùz	 ”àªo	 ”a
@ùÁ  ´hb@9h  5`@ù±	 ”
 ùàªý{A©ôOÂ¨À_Öþÿ—ÿCÑø_©öW©ôO©ý{©ý‘÷ªõªó ªX@©àªÛ	 ”â ªã# ‘àªáª”	 ”À 5ã@ùàªáªâªÄ	 ”€ 5  €Rý{D©ôOC©öWB©ø_A©ÿC‘À_Ö €RT	 ”ó ªè ªàªDÿÿ—aØ Õ ÕÎXàªY	 ” €RH	 ”ô ª`@ùèª8ÿÿ—áÖ Õ Õ‚ÌXàªM	 ”õ ªàª  õ ªàªD	 ”àª 	 ”ÿCÑø_©öW©ôO©ý{©ý‘÷ªõªó ªX@©àªœ	 ”â ªã# ‘àªáªU	 ”À 5ã@ùàªáªâª…	 ”€ 5  €Rý{D©ôOC©öWB©ø_A©ÿC‘À_Ö €R	 ”ó ªè ªàªÿÿ—Ð Õ Õ"ÆXàª	 ” €R		 ”ô ª`@ùèªùþÿ—Ï Õ Õ¢ÄXàª	 ”õ ªàª  õ ªàª	 ”àªÁ ”úg»©ø_©öW©ôO©ý{©ý‘ôªõªó ªV ËÙþC“@ù @ù	Ë?‰ë) T÷  ´w ùàªÚ ” €Ò~ ©
 ùø·	ýB“?ë)™šêï}² ü’
ë(1‹š	ý}Óé µñ}ÓàªÐ ”÷ ª` © ‹h
 ùŸë   TàªáªâªÞ ”è‹  h@ùË©‹ýC“?ë6”šØë   TàªáªâªÓ ”?ëI Tu@ù”ë   TàªáªâªÊ ”¨‹  è‹h ùý{D©ôOC©öWB©ø_A©úgÅ¨À_Ö  ”ý{¿©ý ‘þÿ—ôO¾©ý{©ýC ‘ó ª ÕºXA ‘  ùÜÀ9h ø6`@ù ”àª„ ”a
@ù¡  ´hb@9h  5`@ùÆ ”àªý{A©ôOÂ¨ƒ $ýÿ—ÿCÑôO©ý{©ý‘ÜÀ9¨ ø7@’€ ‘È µ  @ù€ ‘H µŒ@ø ´Œp Õ  ”à‡ ©èc ‘à# ‘~  ”h^À9h ø6`@ùh ”àƒÁ<`€=è@ùh
 ùh^À9H ø6s@ùàªý{D©ôOC©ÿC‘À_Öj ”l ”öÿÿúüÿ—ÿÑôO©ý{©ýÃ ‘óªô ª  @ùà ùè# ‘! ‘¶ ”  5@ù ´€@ùâc ‘ž ”@ 5”@ùá@ù  ”@ùãc ‘àªâª ”  5áA©à@ùãc ‘{ ”à 5áOA©ô@ùàª[ ”  5àªáªý{C©ôOB©ÿ‘À_Ö €R4 ”ó ªà@ùèª$þÿ—a´ Õ ÕªXàª9 ” €R( ”ó ªè ªàªþÿ—   €R! ”ó ªà@ùèªþÿ—  @€p Õap Õs  ”   €R ”ó ª€@ùèªþÿ—a° Õ Õ¦Xàª ”   Ô    ô ªàª ”  ô ªàª ”àªÈ ”–üÿ—ô ªà# ‘\  ”àªÂ ”ÿÑöW©ôO©ý{©ýÃ ‘ô ªóª  @ù@ùä# ‘ €Ò €Ò? ”  5~ ©
 ùè@ù ‘àªÀ ”á@ùàª €R¹ ”€@©h^À9i@ùj
@ùJù@’J Ñ q"±“šÈ€RC±ˆš €Ò( ”@ 5ý{C©ôOB©öWA©ÿ‘À_Ö €RÌ ”ó ª€@ùèª¼ýÿ—a§ Õ ÕXàªÑ ” €RÀ ”õ ª€@ùèª°ýÿ—á¥ Õ Õ‚›XàªÅ ”   Ôô ªàª¾ ”  ô ªàªº ”àªv ”ô ªh^À9h ø6`@ùž ”àªo ”ý{¿©ý ‘âª €’ €’Û ”ôO¾©ý{©ýC ‘ó ª  @ùa@ù¶ ”   5àªý{A©ôOÂ¨À_Ö op ÕApp Õêÿÿ—   Ô%üÿ— ¼ Õæ ôO¾©ý{©ýC ‘ó ª@ùt ´ˆ" ‘	 €’éøè  µˆ@ù	@ùàª ?ÖàªX ”àªý{A©ôOÂ¨À_ÖôO¾©ý{©ýC ‘óªá ªâª  ”àªý{A©ôOÂ¨À_Öó ª? q! Tàªk ”K  ”l ” €Òôÿÿó ªh ”àª' ”õûÿ—ÿÑöW©ôO©ý{©ýÃ ‘ôªóªõ ªA_P Õã# ‘€R ”  5ö@ù  Õàª €Ò €Ò  ”ãªàªáªâª« ”€ 5àªáªý{C©ôOB©öWA©ÿ‘À_Ö €R8 ”ó ªè ªàª(ýÿ—á” Õ Õ‚ŠXàª= ” €R, ”ô ªè ªàªýÿ—a“ Õ Õ‰Xàª1 ”õ ªàª  õ ªàª( ”àªä ”ÿÑôO©ý{©ýÃ ‘ó ª @ùà ùè# ‘! ‘s ”` 5a
@ùA ´t@ùâc ‘àªW ”À 5á@ùàªq ”à 5à‡@©# ”  5ý{C©ôOB©ÿ‘À_Ö €Rû ”ô ªà@ùèªëüÿ—A Õ Õâ‚Xàª  ” ^0 Õ^p ÕHÿÿ—   €Ré ”ô ª`@ùèªÙüÿ—‹ Õ Õ¢€Xàªî ”   €RÜ ”ô ª`@ùèªÌüÿ—a‰ Õ ÕXàªá ”   Ô    ó ªàªØ ”  ó ªàªÔ ”àª ”ó ªà# ‘  ”àª‹ ”Yûÿ—ôO¾©ý{©ýC ‘ó ª  @ùa@ùÚ ”   5àªý{A©ôOÂ¨À_Ö`V0 ÕáVp Õÿÿ—   ÔFûÿ—ÿÃÑôO©ý{©ýƒ‘ Õh|X@ù¨ƒø@ù@ù	 ñƒ  T@ù@ù  ác ‘àªì ” 	 5è@ùó£ © €R“ ”ó ª ù ÕÈxXA ‘ü¨ÿÿ©ác ‘â# ‘ ”hž Õ@ù M ©t ´ˆ" ‘	 €’éøè  µˆ@ù	@ùàª ?Öàª\ ” Õà“XÄ ”ó ª Õ “X¨ ”¯ ”â ªàª´ ”ãc ‘àªB €RÀ ”è@ùˆ ´ Õ@šX(ƒ Õô£ ‘è ùô# ùá£ ‘Šùÿ—à#@ùŸ ë   Tà  ´ @ù@ù   @ù@ù ?Ö¨ƒ^ø ÕIrX)@ù?ë¡  Tý{F©ôOE©ÿÃ‘À_Ö` ” €RL ”ô ªè ªàª<üÿ—aw Õ ÕmXàªQ ”ó ªàªK ”	  ó ªà#@ùŸ ë  T @ù@ù  `  µàªþ ” @ù@ù ?Öàªù ”ôªó ªàª ”! ”àªò ”ÿCÑø_©öW©ôO©ý{©ý‘õªöª÷ªó ª €R ”ô ªT © ÕÃgXå# ‘àªáª €’äª9 ”@ 5á@ù£  Õàªâª €Ò €Ò$ ”  5á@ùàªý{D©ôOC©öWB©ø_A©ÿC‘À_Öàªõ ” €Rü ”ô ªè ªàªìûÿ—am Õ ÕcXàª ”ó ªàªû ”àª· ”ÿƒ Ñý{©ýC ‘á ©à# ‘á ‘  ”ý{A©ÿƒ ‘À_Öa  ´àª× À_ÖÿƒÑöW©ôO©ý{	©ýC‘ @ù4 @ùÈ €RèO ©é ‘$a ‘ô©%¡‘5 ‘ÿ©#Á ‘è©àªáªâª ”@ 5è@ùé@ù	ëé T	ñ}Óÿ÷Hë ŸÚ» ”ã ªà3 ùà ùàªáªâª €Ò €Òú ”à 5è7@ù	@ùé7 ù@ùà ‘ ?Öà3@ù@  ´¢ ”  €Òý{I©ôOH©öWG©ÿƒ‘À_Ö €R¦ ”ô ªà@ùèª–ûÿ—   €RŸ ”ô ªà@ùèªûÿ—Áa Õ ÕbWXàª¤ ”   Ô  õªó ªàª› ”	  õªó ªà3@ù   ´} ”  õªó ª¿ q Tàªˆ ”hþÿ—‰ ”Òÿÿó ª† ”àªE ”úÿ—ÿÑø_©öW©ôO©ý{©ýÃ‘õªöªô ª  ù(@ù¨ ´àªB ”@ 7Á@ù
 ´À@ùâƒ ‘Õ ”` 5è#@¹ q¡	 T¡@ùa ´ @ùâƒ ‘Ì ”  5è#@¹ q T "€RT ”ó ª×@©! ´ã# ‘àª" €R} ”` 5è@ù÷#©  ÷©ÿÃ 9¶@© ´ãã ‘àª" €Rq ”€ 5è@ù   €Òö£ ©ÿc 9áƒ ‘â# ‘àª[ ”“ ùá@ù¡  ´èc@9h  5à@ùi ”á@ù¡  ´èÃ@9h  5à@ùc ”àªý{G©ôOF©öWE©ø_D©ÿ‘À_Ö €R$ ”ó ª @ùá( Õèª, ”1   €R ”ó ª @ùèªûÿ—*   €R ”ó ª @ùa% Õèª ”!   €R ”õ ªè ªàªûúÿ—AO Õ ÕâDXàª ”   €Rþ ”õ ªè ªàªîúÿ—¡M Õ ÕBCXàª ”   Ô €Rñ ”ó ªÀ@ùèªáúÿ—L Õ Õ¢AXàªö ”  ô ªàªï ”  ô ªàªë ”    uùÿ—tùÿ—  ô ª  ô ª  ô ªà# ‘z ”àƒ ‘ˆ ”àªÆ ”àª— ”ô ªàªÖ ”àª’ ”À_Ö½ ý{¿©ý ‘ €R¿ ”(N Õ  ùý{Á¨À_ÖˆM Õ(  ùÀ_ÖÀ_Ö® ÿCÑöW©ôO©ý{©ý‘ôª Õh=X@ùè ù3 @ùá# ‘àªÓ ”À 5õ@ùá Õã# ‘àª€RÑ ”  5è@ùó£ ©ö# ‘á# ‘àª:  ”ãª¢p Õàªáªú ”à 5õ ùÂ" ‘á# ‘àª˜ûÿ—è@ù Õé8X)@ù?ë Tý{D©ôOC©öWB©ÿC‘À_Ö €R ”ô ªè ªàªqúÿ—   €Rz ”ô ªè ªàªjúÿ—   €Rs ”ô ªè ªàªcúÿ—A< Õ Õâ1Xàªx ”z ”    ó ªàªo ”àª+ ”ÿÑôO©ý{©ýÃ ‘ó ªô ‘è ‘àªaüÿ—è_@9	 ê/@©? qA±”šb±ˆšãc ‘àª ”€ 5ô@ùè_À9h ø6à@ù@ ”àªáªý{C©ôOB©ÿ‘À_Ö €RA ”ô ªè ªàª1úÿ—6 Õ Õ¢+XàªF ”   Ôó ªàª? ”  ó ªè_À9h ø6à@ù$ ”àªõ ”ÿÃ ÑôO©ý{©ýƒ ‘@ù¡ ´ó ª  @ùâ# ‘ ”  5è@¹ qa  T  €R  a@ù! ´`@ùâ3 ‘… ”  5è@¹ qàŸ    €Rý{B©ôOA©ÿÃ ‘À_Ö €R
 ”ô ª`@ùèªúùÿ—   €R ”ô ª`@ùèªóùÿ—A. Õ Õâ#Xàª ”  ó ªàª ”àª½ ”öW½©ôO©ý{©ýƒ ‘óªô ªõªàª\ ” ÕÃ$Xâ ªèªàªáªý{B©ôOA©öWÃ¨$ ÿƒÑø_©öW©ôO©ý{©ýC‘ó ª( @ù  ù(@ù ù(@@9@ 9?| ©?@ 9H @ùô ªˆŽøH@ù ùH@@9  9_| ©_@ 9èt•RHU¦rõ ª¨ø ä o ‚€< ‚< ‚‚< ‚ƒ< ‚„<¿b9@ùh µ–@ùác ‘àªá ”` 5á@ù! ´ãc ‘àª" €RÝ ”` 5÷@ùö_ ©   €Òö ©ÿC 9a@ù¡  ´`@ùÛ ”  5 ùv^ ©B 9 ”aÂ ‘ ÕâX ”s ùàªý{E©ôOD©öWC©ø_B©ÿƒ‘À_Ö €R’ ”÷ ªè ªàª‚ùÿ—   €R‹ ”÷ ªè ªàª{ùÿ—A Õ ÕâXàª ”   €R~ ”÷ ª`@ùèªnùÿ—¡ Õ ÕBXàªƒ ”   Ôö ªàª| ”    ö ªàªw ”  ö ªà ‘  ”    ö ª`Â‘K  ”àªK ”àª  ”àª  ”àª$ ”ôO¾©ý{©ýC ‘ó ª@ùÁ  ´hB@9h  5`@ù† ” ùàªý{A©ôOÂ¨À_Öã÷ÿ—ôO¾©ý{©ýC ‘ó ª@ùÁ  ´hB@9h  5`@ùv ” ùàªý{A©ôOÂ¨À_ÖÓ÷ÿ—ôO¾©ý{©ýC ‘  @ùK  ”ý{A©ôOÂ¨À_Öóª6 ”
 q! T @ù	@ù ?Öá ªÀê  Õƒûÿ—  @ê  Õê 0 Õ}ûÿ—   Ôó ª' ”  ó ª$ ”àªã ”±÷ÿ—öW½©ôO©ý{©ýƒ ‘ó ª @ùT ´h@ùàªë€ T Ñ   @ù@ù ?ÖµÑßë` T @ù¿ ë   Tà  ´ @ù@ù   @ù@ù ?Ö ‚_ø¶‚ Ñß ë ýÿTàýÿ´ @ù@ùëÿÿ`@ùt ùç ”àªý{B©ôOA©öWÃ¨À_ÖÿƒÑüo©úg©ø_©öW©ôO©ý{©ýC‘ó ªô ª•ŽAøˆb‘è ùè#‘! ‘è£ ‘ Õ{X ‘xC ‘  àªË ”¿ÿ8©¿ƒøà@ùµ ”vfO©ßë  T¶ç8©~©h‚@ù‚ ù¨ƒøà@ù® ”úªõG ùàªáª$ ”  5ÿ©ÿC ù@@ùà  ´õ ù @ù@ùá£ ‘âÃ‘ ?Öõ©õ©ÿ9ø ùŸÿ ©Ÿ ùa@ùÁ  ´`@ù¢ƒÑù ”@ 5¡ZøâÃ‘àª €Òµ  ”à©@@ùà  ´ @ù@ùáƒ‘â£ ‘ ?Ö  è@ù¨ µhC ‘è ùèÁ9h ø6à'@ù‹ ”à£ ‘€ ”á@ù¡  ´èA9h  5à@ùÂ ”à;@ù`  ´à? ù ”à‡H©§ ”@ 5Z‘_ëÁ÷ÿT   €R ”è ª`@ùè ùoøÿ—à@ù¡ý  Õ ÕBó X„ ”]  á ùà ùà@ù| ”á@ù  à ù? q¡
 Tà@ùo ”á ªà£ ‘ ”n ”Áÿÿòÿ´9ƒ Ñ   @ù@ù ?Ö9Ñ_ëÀðÿT @ù? ë   Tà  ´ @ù@ù   @ù@ù ?Ö ƒ_ø:ƒ Ñ_ ë ýÿTàýÿ´ @ù@ùëÿÿà@ù/ ”h"D9¨  4`Â ‘ ÕAï X¼ ”ý{Q©ôOP©öWO©ø_N©úgM©üoL©ÿƒ‘À_Ö €R7 ”ó ªàG@ùèª'øÿ—Áô  Õ Õbê Xàª< ”  `Å 0 ÕáÅ p Õƒúÿ—   €R$ ”ó ªà£ ‘ö  ”á ªàªñ ”!í  Õ Õ‚è Xàª' ”   Ôô@ù    ô ª ”  ©öÿ—    ô ªàª ”
    ô ªàª ”  öÿ—ô ª  ô ªà£ ‘qøÿ—à;@ù`  ´à? ùò ”à#‘:ûÿ—  öÿ—öÿ—ô ª ãÑÜþÿ—àª» ”ÿƒÑø_©öW©ôO©ý{©ýC‘ôªöªõªó ª  @ùà ùè# ‘! ‘B ”  5a@ù ´`@ùâc ‘* ”€	 5w@ùã@ù   €Òw@ùÅ"@©ËýC“æc ‘àªáªâª( ”  5ô@ùà@ùác ‘  ”` 5èc@9( 4a@ù! ´`@ùâc ‘ ”`	 5s@ù  à‡@©ãc ‘âªó ”à 5ó@ùô@ùà‡@©Ó ”à 5àªáªý{E©ôOD©öWC©ø_B©ÿƒ‘À_Ö €Òs@ùóÿÿ €R§ ”ô ªà@ùèª—÷ÿ—Áâ  Õ ÕbØ Xàª¬ ” €R› ”ô ªè ªàª‹÷ÿ—  €¯ p Õ¡° p Õíùÿ—'   €RŽ ”ô ª`@ùèª~÷ÿ—¡ß  Õ ÕBÕ Xàª“ ”   €R ”ô ªà@ùèªq÷ÿ—Þ  Õ Õ¢Ó Xàª† ”   €Rt ”ô ª`@ùèªd÷ÿ—aÜ  Õ ÕÒ Xàªy ”   Ô        ó ªàªn ”
  ó ªàªj ”àª& ”    òõÿ—ó ªà# ‘¸ùÿ—àª ”ôO¾©ý{©ýC ‘ôªó ª@ù¡  ´`@ù ”À 5
 ùˆ@ùh ùˆ
@ùh
 ùˆb@9hb 9Ÿþ ©Ÿb 9àªý{A©ôOÂ¨À_Ö €R; ”ô ª`@ùèª+÷ÿ—AÕ  Õ ÕâÊ Xàª@ ”ó ªàª: ”àªö  ”ÿCÑôO©ý{©ý‘ÜÀ9¨ ø7@’€ ‘È µ  @ù€ ‘H µŒ@ø ´!  p Õºøÿ—à‡ ©èc ‘à# ‘ùÿ—h^À9h ø6`@ù	 ”àƒÁ<`€=è@ùh
 ùàªý{D©ôOC©ÿC‘À_Ö ” ”ùÿÿžõÿ—ý{¿©ý ‘  @ù€  ´  ”ý{Á¨õ  ý{Á¨À_ÖöW½©ôO©ý{©ýƒ ‘ó ªx@ùT ´h~@ùàªë€ T Ñ   @ù@ù ?ÖµÑßë` T @ù¿ ë   Tà  ´ @ù@ù   @ù@ù ?Ö ‚_ø¶‚ Ñß ë ýÿTàýÿ´ @ù@ùëÿÿ`z@ùt~ ùË  ”`Â‘½  ”a@ùÁ  ´h¢@9h  5`@ù ” ùa@ùÁ  ´hB@9h  5`@ùû  ” ùàªý{B©ôOA©öWÃ¨À_ÖWõÿ—Võÿ—ÿÑöW©ôO©ý{©ýÃ ‘ôªõ ªóªã# ‘ã  ”  5â@ùã ‘àª €Ò€?ÖÀ 5ôªŸøá@ùb 9 Õ» XA ‘hV ©öªßøþ©Á  ´àª" €RãªÉ  ”  5ý{C©ôOB©öWA©ÿ‘À_Ö €R”  ”ó ªè ªàª„öÿ—   €R  ”ó ªè ªàª}öÿ—¿  Õ Õ"µ Xàª’  ”à‹  ÕŒ 0 ÕÚøÿ—   Ô  õ ªàª…  ”àªA  ”õ ªÈ^À9h ø6À@ùi  ”àª^  ”a
@ùÁ  ´hb@9h  5`@ù   ”Ÿ ùàª1  ”ÿôÿ— Õ³ XA ‘  ùC  ý{¿©ý ‘ Õ(² XA ‘  ù<  ”ý{Á¨O  ôO¾©ý{©ýC ‘@ù” ´“Â‘àª5  ”( €Rˆ"9€Â ‘Ä  ”àªý{A©ôOÂ¨0  ý{A©ôOÂ¨À_Öô ªàª*  ”àªÙôÿ—Øôÿ—5   ÿ ÕaÔ Õb«ü Õ:   ÕðªX Ö ÕÐªX Ö Õ°ªX Ö ÕªX Ö ÕpªX Ö ÕPªX Ö Õ0ªX Ö ÕªX Ö Õð©X Ö ÕÐ©X Ö Õ°©X Ö Õ©X Ö Õp©X Ö ÕP©X Ö Õ0©X Ö Õ©X Ö Õð¨X Ö ÕÐ¨X Ö Õ°¨X Ö Õ¨X Ö Õp¨X Ö ÕP¨X Ö Õ0¨X Ö Õ¨X Ö Õð§X Ö ÕÐ§X Ö Õ°§X Ö Õ§X Ö Õp§X Ö ÕP§X Ö Õ0§X Ö Õ§X Ö Õð¦X Ö ÕÐ¦X Ö Õ°¦X Ö Õ¦X Ö Õp¦X Ö ÕP¦X Ö Õ0¦X Ö Õ¦X Ö Õð¥X Ö ÕÐ¥X Ö Õ°¥X Ö Õ¥X Ö Õp¥X Ö ÕP¥X Ö Õ0¥X Ö Õ¥X Ö Õð¤X Ö ÕÐ¤X Ö Õ°¤X Ö Õ¤X Ö Õp¤X Ö ÕP¤X Ö Õ0¤X Ö Õ¤X Ö Õð£X Ö ÕÐ£X Ö Õ°£X Ö Õ£X Ö Õp£X ÖP  b  @  P  _  [  P  \  …  P  Y  ¥  P  V  ¿  P  S  Ü  P  P  ÷  P  M    P  J  5  P  G  T  P  D  r  P  A    P  >  ¦  P  ;  Ð  P  8  é  P  5  
  P  2  *  P  /  @  P  ,  a  P  )  |  P  &  Ÿ  P  #  Á  P     Ü  P    ù  P    "  P    A  P    a  P    {  P    Ž  P    ±  P    Ç  P    Ý  P    î  « ÕðG¿© ÕP‹ X ÖP  ùÿÿ   P  öÿÿ6   P  óÿÿX   P  ðÿÿ¹   P  íÿÿà   P  êÿÿ1  P  çÿÿ‚  P  äÿÿº  P  áÿÿä  P  Þÿÿ  P  Ûÿÿ"  P  Øÿÿ=  P  ÕÿÿX  P  Òÿÿo  P  Ïÿÿ¥  P  Ìÿÿ¿  P  Éÿÿ×  P  Æÿÿô  P  Ãÿÿ    P  Àÿÿ  P  ½ÿÿ  P  ºÿÿ!  P  ·ÿÿ0  P  ´ÿÿ¢  !  °!ìAù  °>@ù Ö   Ô   Ô   Ô!  °!ðAù  °>@ù Ö   Ô   Ô   Ô!  °!ôAù  °>@ù Ö   Ô   Ô   Ô!  °!øAù  °>@ù Ö   Ô   Ô   Ô!  °! Bù  °>@ù Ö   Ô   Ô   Ô  €   S  Þ  TÆÿÿÿÿ
<˜ DŒ    ÿÿ l  l€ €à   ÿÿ# ˜  ˜$ ¼˜ Ðˆ  Ø€ äœ   ÿ›=2 T  T$Ð $˜ äˆ Œ„Ø€Üh  ÄÔ È           ÿ›-# ¼  ¼ÀŒ¼ ÈìÄðÜ         ÿÿ   4 ,  ÿÿ Ø  Ø  ä  ôœ €4   ÿ›1& Œ  Œ´ œl  ˆ´ œH  äôè          ÿ›Ld      ÿÿ ˆ  ˆè ”(  ¼Ü Ä8   ÿÿ ˆ  ˆè ”(  ¼Ü Ä8   ÿ›L`      ÿ›<˜XD  œ¤       ÿ›UL <  <@ ˆŒ,  ¼ø Ä$  èè ô  ˆä ”Œ¨  ¼à Ä ÜH        ÿÿ* H  HH° (  ¸œ À(  èŒ ð° ˆD    ÿ›,H      ÿ›),$  @P D  T`X           à  ÿÿ ”  ”ô  $  Äè Ð8   ÿ›UJ 8  8Ð \ä`$  „¼ Œ  ¤ä¸  Ì¬ ÔÐ ì  €¨ ˆ¤  H          ÿ›,H      ÿÿ& x  xø „œ   ¼ ¨`  ˆ¬ ”€    ÿÿ ´  ´Ø À,  ÿ›UBDXÜ°Ä¸4  ì°ô  ˆ¬Ü¨L  ô€ ø  „ˆ    }       À  ÿ›€w ˜  ˜ˆ È€ ð ˜ø°ô´,  à´ ð  „ü Œ   ð °  Àà Ìˆ ä  ôÐ €€ ˜  ¬Ì ´”        ÿÿ& Ü  ÜÄ è  øÀ „  ”¼  8    ÿÿ <  <¼ H<  „¬ ¼ ¨0    ÿÿ Œ  ŒÌ ”  ¨È °0   ÿÿD˜(è èØ üì ,  ¼È È  ØÄ äè ü  ´ ˜Ø °h  ÿ›$<      ÿ›$<      ÿ›) ,  @t Ph l„|   }  D
      ÿ›”€dì œÔ Èœ ø ô¬¤ ø˜Ð”$  ¸ÜÀôØ4  ŒÜ ”Ø ˜À  Øˆ à„ üÌ  ¬ô ´ð àèä„    }         	  ÿ›}u L  L@à ˜Ø ¸¬ ÐÔ ìÜð@  °À ¸$  Ü° ìÜ€  ”¨ œà ´  È¤ ÐÔ è  ü  „¬ œX       ÿÿ l  lŒ t,     ÿ›<ŒX8  ˜       ÿ› ¼  ¼øØô     ÿ›E: t  t˜ „$  ¨„ ´  Ä€ Ð  è˜ üL  ÈØÌ          ÿ›`,L      EventDelegate CWEventDelegate linkQualityDidChangeForWiFiInterfaceWithName:rssi:transmitRate: alloc bssidDidChangeForWiFiInterfaceWithName: clientConnectionInterrupted clientConnectionInvalidated countryCodeDidChangeForWiFiInterfaceWithName: init linkDidChangeForWiFiInterfaceWithName: modeDidChangeForWiFiInterfaceWithName: powerStateDidChangeForWiFiInterfaceWithName: scanCacheUpdatedForWiFiInterfaceWithName: setDelegate:  sharedWiFiClient ssidDidChangeForWiFiInterfaceWithName: startMonitoringEventWithType:error: v16@0:8 v24@0:8@16 v40@0:8@16q24d32 v24@0:8@"NSString"16 v40@0:8@"NSString"16q24d32 addEventListener Callback called after move vector Error::New napi_get_last_error_info napi_is_exception_pending napi_get_and_clear_last_exception Error in native callback napi_create_string_utf8 napi_create_error Error::Error napi_create_reference message EscapableHandleScope::~EscapableHandleScope napi_close_escapable_handle_scope ../src/main.mm main HandleScope::~HandleScope napi_close_handle_scope type wlan code ssidDidChangeForWiFiInterfaceWithName Callback receiver must be an object or function Callback must be a function  ERROR: Unknown exception during async callback wlan rigister notification error St13runtime_error St9exception St12length_error St11logic_error St20bad_array_new_length St9bad_alloc N4Napi5ErrorE N4Napi15ObjectReferenceE N4Napi9ReferenceINS_6ObjectEEE             8      <        T     T     T    `€  D7  „  T   ¡j      „  D7  ôp  8  q  t9  q  t;  @q  è=  €q  \A  °q  B  Àq  HC  àq  @E  r  ¨E  $r  ¤F  Dr  ìH  dr  PI  tr  øI  r  œK  èr   M  s  ¨M  (s  N  Ts  O  ts  |P  Ìs  ÈP  Üs  ÜR  t   T  t  ”U  tt   X  øt  øY  $u  ÐZ  Hu  ü[  hu  ^  °u  T^  Àu  ”^  Ðu  Ð_  üu  ¸c  ”v  ,f  w  Ìf  (w  Œg  Dw  ˆh  `w  j  ¨w      =       Ð   0  0 ˜ 
¤ 	p	 ä	 
  `
 Œ
 ”
 ¸
 Ð
  ü  d ` \ œ ¨    ´  X ¤ ¼    d  È Ð  8  „  ˜ „ ¬ ¼ P !  ! D! \! ´"  Œ#  l$ ¸$ Ð&  '  P'  Ø' Œ( t, è.  ˆ/  $0 H0 D1  2 ´2 Ø2  <3   T    T         zR x         ¾ÿÿÿÿÿÿ        Dž            ”^      @E      ÈS                              H      ˜€      €      ð              hg                                              LM      „j             |     €       }|     €˜€             ­|     €˜€             œ|     €À€             Ö|     €˜€             ½|     €ð€             
}     €       ñ|     €              ã|     €       0            ˜€                             @E      ìH      PI                      ÐA      ÔA      ØA      üA      B      B      B                      äi      øi      j              €j                      \X      `X      dX      ˆX      ˜X      œX       X      @Ä      pÄ          @                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           øo       o      ,o      8o      Do      Po      \o      ho      to      €o      Œo      ˜o      ¤o      °o                                      ¼o      p      Èo      Ôo      ào      ìo      p      p      (p      |m      ˆm      ”m       m      ¬m      ¸m      Äm      Ðm      Üm      èm      ôm       n      n      n      $n      0n      <n      Hn      Tn      `n      ln      xn      „n      n      œn      ¨n      ´n      Àn      Ìn      4p      Øn      än      ðn      ün         
   Hx      Ây              dx      Ây              y      Êy              wy      Êy               x      Êy              €x      Êy              ³x      Êy              Úw      Õy              Úx      Êy              .y      Êy              Ây      Ây      æy      æy      æy      æy      æy      ûy      æy      æy             pÄ                 (   (               ¼w              0Ã                                                    ¼w      àp      0Ã                              x      ®x      Xy      fy      wy      žy              @Ä                                      HÃ      Ä                              Ã                      Êw                              èÁ                      `       àÂ                             e{      ¨M      t{                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ! SCTAp(RApRARARARARApRApppSBWBSApY" ^D`+ARARARARARARARARARARAZAp pp0SCVAp RCp€S     >@_OBJC_CLASS_$_NSObject QrÈ@_OBJC_METACLASS_$_NSObject €Èÿÿÿÿÿÿÿÿ@__objc_empty_cache ´@__objc_empty_vtable €Øÿÿÿÿÿÿÿÿ´@_napi_create_error qp@_objc_msgSend A_OBJC_CLASS_$_CWWiFiClient rˆ@__ZNKSt3__119__shared_weak_count13__get_deleterERKSt9type_info q˜@__ZNSt12length_errorD1Ev €øûÿÿÿÿÿÿÿ@__ZNSt13runtime_errorD1Ev @__ZNSt20bad_array_new_lengthD1Ev @__ZTVN10__cxxabiv117__class_type_infoE €h` €@__ZTVN10__cxxabiv120__si_class_type_infoE €€ÿÿÿÿÿÿÿÿÀ´@__ZTVN10__cxxabiv121__vmi_class_type_infoE €@__ZTVSt12length_error €€þÿÿÿÿÿÿÿ` @__ZdaPv rp øÿÿÿÿÿÿÿÿ@__ZdlPv  øÿÿÿÿÿÿÿÿ@__Znam  øÿÿÿÿÿÿÿÿ@__Znwm  øÿÿÿÿÿÿÿÿ@___gxx_personality_v0 q`@___stack_chk_guard @dyld_stub_binder €       @__ZN18ThreadSafeCallback4Impl21static_async_callbackEP10uv_async_s Qq @__ZN4Napi7details12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__ €@__ZZN18ThreadSafeCallback4Impl14async_callbackEvENUlP11uv_handle_sE_8__invokeES2_ €@@__ZdaPv rp øÿÿÿÿÿÿÿÿ@__ZdlPv  øÿÿÿÿÿÿÿÿ@__Znam  øÿÿÿÿÿÿÿÿ@__Znwm  øÿÿÿÿÿÿÿÿ  r @__Unwind_Resume  r@__ZNSt11logic_errorC2EPKc  r@__ZNSt13runtime_errorC1EPKc  r@__ZNSt13runtime_errorC1ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE  r @__ZNSt20bad_array_new_lengthC1Ev  r(@__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc  r0@__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm  r8@__ZNSt3__119__shared_weak_count14__release_weakEv  r@@__ZNSt3__119__shared_weak_countD2Ev  rH@__ZNSt3__15mutex4lockEv  rP@__ZNSt3__15mutex6unlockEv  rX@__ZNSt3__15mutexD1Ev  r`@__ZNSt9exceptionD2Ev  rh@__ZSt9terminatev  r@___cxa_allocate_exception  r˜@___cxa_atexit  r @___cxa_begin_catch  r¨@___cxa_end_catch  r°@___cxa_free_exception  r¸@___cxa_throw  rÀ@___stack_chk_fail  rÈ@_memcpy  rÐ@_memmove  rØ>@_napi_add_finalizer  rà>@_napi_close_escapable_handle_scope  rè>@_napi_close_handle_scope  rð>@_napi_create_error  rø>@_napi_create_function  r€>@_napi_create_object  rˆ>@_napi_create_reference  r>@_napi_create_string_utf8  r˜>@_napi_create_type_error  r >@_napi_delete_reference  r¨>@_napi_escape_handle  r°>@_napi_fatal_error  r¸>@_napi_get_and_clear_last_exception  rÀ>@_napi_get_cb_info  rÈ>@_napi_get_last_error_info  rÐ>@_napi_get_named_property  rØ>@_napi_get_null  rà>@_napi_get_reference_value  rè>@_napi_get_undefined  rð>@_napi_get_value_string_utf8  rø>@_napi_is_exception_pending  r€>@_napi_make_callback  rˆ>@_napi_module_register  r>@_napi_open_escapable_handle_scope  r˜>@_napi_open_handle_scope  r >@_napi_set_named_property  r¨>@_napi_set_property  r°>@_napi_throw  r¸>@_napi_typeof  rÀ@_strlen  rÈ>@_uv_async_init  rÐ>@_uv_async_send  rØ>@_uv_close  rà>@_uv_default_loop     _ E Àˆ  CLASS_$_EventDelegate METACLASS_$_EventDelegate ? ˜ˆ  OBJC_ _Z X È¡  11RunCallbackRKN4Napi12CallbackInfoE R4InitN4Napi3EnvENS_6ObjectE óN ÿZN18ThreadSafeCallback4Impl14async_callbackEvENUlP11uv_handle_sE_8__invokeES2_ ® Œœ ”½  18ThreadSafeCallback4Impl21static_async_callbackEP10uv_async_s ù4Napi7details12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__ ¨È§ èÎ     ÄnÐà€èÌt(H,$´øhüüÀd¨¤ÌLPdˆèL”ì(”È$ØØàL˜@@ˆ´èô œ$üÜ$d   	    D7      >	  € 8      ²	  € t9      I
  € t;      è
    Ü=         € è=      ¹  € ´@      D    (A      ý    4A      *    \A      W    ¤A      z    ÐA      '    ÔA      Ô    ØA      ˆ    üA      M    B           B      ¿    B      r  € HC      ”  € @E      ¨  € ¨E      Ì  € ¤F      ñ  €  G      Ä    àH        € ìH      /  € PI      G  € øI      k  € œK      ‰  € èL      ¦  €  M      Ê    LM      à    XM          ¨M      G  € O      v  € |P      ‘  € ÜR      Ú    ðS      ˆ  €  T        € ”U      X    \X      ð    `X      ˆ    dX      '    ˆX      ×    ˜X      u    œX           X      ½  € øY      í  € ÐZ      	  € °[      .  € ü[      ‡  € ^      ¨  € T^      Ì    _      p  € Ð_         € ¸c        € ,f      4  € Ìf      O  € Œg      q  € ˆh      Ç  € äi        € øi      c  € j      Á  € €j      $     „j      <     @p      P     `p      c     €p      ~      p           Àp      Ï     àp      ÷     ôp      	!    q      !    q      -!    @q      ?!    €q      Q!    °q      c!    Àq      v!    àq      ‰!    r      œ!    $r      ¯!    Dr      Â!    dr      Õ!    tr      è!    r      û!    èr      "    s      !"    (s      4"    Ts      G"    ts      Z"    Ìs      m"    Üs      €"    t      “"    t      ¦"    tt      ¹"    øt      Ì"    $u      ß"    Hu      ò"    hu      #    °u      #    Àu      +#    Ðu      >#    üu      Q#    ”v      d#    w      w#    (w      Š#    Dw      #    `w      °#    ¨w      Ã#    }|      Ú#    |      ì#    œ|      $    ­|      $    ½|      5$    Ö|      G$    ã|      Z$    ñ|      x$    
}      œ$    ˜€      ®$    ¨€      Å$    À€      Ú$    Ø€      ð$    ð€      %           %           D%    0      b%    H      u%  € €      ˆ%    ¨      4&  € ð      &    (‚      '  € x‚      @'    èÁ      w'    àÂ      ¦'    0Ã      Í'    HÃ      ñ'    Ã      (    hÄ       (  € pÄ      B(    ÐÄ      O(    Å         d          k(  d           ª(  d           ²(  f             .  D7      ½(  $  D7      õ(  „           })  „           *  „              $   Ð          N  D7         .  8      *  $  8      Š*  „              $   `         N  8         .  t9      ´*  $  t9         $             N  t9         .  t;      K+  $  t;      ê+  „           i,  „              $   h         N  t;         .  Ü=      â,  $  Ü=         $             N  Ü=         .  è=      ú,  $  è=      ³-  „           4.  „           ».  „           1/  „           ´/  „           J0  „           Ú0  „              $   Ì         N  è=         .  ´@      ]1  $  ´@         $   t          N  ´@         .  (A      è1  $  (A         $             N  (A         .  4A      ¡2  $  4A         $   (          N  4A         .  \A      Î2  $  \A      û2  „              $   H          N  \A         .  ¤A      w3  $  ¤A         $   ,          N  ¤A         .  ÐA      š3  $  ÐA         $             N  ÐA         .  ÔA      G4  $  ÔA         $             N  ÔA         .  ØA      ô4  $  ØA         $   $          N  ØA         .  üA      ¨5  $  üA         $             N  üA         .  B      m6  $  B         $             N  B         .  B       7  $  B         $             N  B         .  B      ß7  $  B      ’8  „           ê8  „              $   4         N  B         .  HC      m9  $  HC      9  „              $   ø         N  HC         .  @E      :  $  @E      :  „              $   h          N  @E         .  ¨E      p:  $  ¨E         $   ü          N  ¨E         .  ¤F      ”:  $  ¤F         $   ü          N  ¤F         .   G      ¹:  $   G      Œ;  „           <  „              $   @         N   G         .  àH      ™<  $  àH         $             N  àH         .  ìH      ð<  $  ìH         $   d          N  ìH         .  PI      =  $  PI         $   ¨          N  PI         .  øI      =  $  øI         $   ¤         N  øI         .  œK      @=  $  œK         $   L         N  œK         .  èL      ^=  $  èL         $             N  èL         .   M      {=  $   M         $   L          N   M         .  LM      Ÿ=  $  LM         $             N  LM         .  XM      µ=  $  XM         $   P          N  XM         .  ¨M      î=  $  ¨M         $   d          N  ¨M         .  N      >  $  N         $            N  N         .  O      ;>  $  O         $   h         N  O         .  |P      j>  $  |P         $   L          N  |P         .  ÈP      …>  $  ÈP         $            N  ÈP         .  ÜR      ­>  $  ÜR         $   ì          N  ÜR         .  ÈS      ö>  $  ÈS         $   (          N  ÈS         .  ðS      ^?  $  ðS         $             N  ðS         .   T      @  $   T         $   ”         N   T         .  ”U      ¡@  $  ”U         $   È         N  ”U         .  \X      Ü@  $  \X         $             N  \X         .  `X      tA  $  `X         $             N  `X         .  dX      B  $  dX         $   $          N  dX         .  ˆX      «B  $  ˆX         $             N  ˆX         .  ˜X      [C  $  ˜X         $             N  ˜X         .  œX      ùC  $  œX         $             N  œX         .   X      £D  $   X         $   X         N   X         .  øY      AE  $  øY         $   Ø          N  øY         .  ÐZ      qE  $  ÐZ         $   à          N  ÐZ         .  °[      E  $  °[         $   L          N  °[         .  ü[      ²E  $  ü[         $            N  ü[         .  ^      F  $  ^         $   @          N  ^         .  T^      ,F  $  T^         $   @          N  T^         .  ”^      PF  $  ”^         $   ˆ          N  ”^         .  _      “F  $  _         $   ´          N  _         .  Ð_      7G  $  Ð_      gG  „              $   è         N  Ð_         .  ¸c      ðG  $  ¸c         $   t         N  ¸c         .  ,f      mH  $  ,f         $              N  ,f         .  Ìf      „H  $  Ìf         $   œ          N  Ìf         .  hg      ŸH  $  hg         $   $          N  hg         .  Œg      ñH  $  Œg         $   ü          N  Œg         .  ˆh      I  $  ˆh         $   \         N  ˆh         .  äi      iI  $  äi         $             N  äi         .  øi      ·I  $  øi         $   $          N  øi         .  j      J  $  j         $   d          N  j         .  €j      cJ  $  €j         $             N  €j         .  „j      ÆJ  $  „j         $             N  „j      ÞJ  &  ôp      ðJ  &  q      K  &  q      K  &  @q      &K  &  €q      8K  &  °q      JK  &  Àq      ]K  &  àq      pK  &  r      ƒK  &  $r      –K  &  Dr      ©K  &  dr      ¼K  &  tr      ÏK  &  r      âK  &  èr      õK  &  s      L  &  (s      L  &  Ts      .L  &  ts      AL  &  Ìs      TL  &  Üs      gL  &  t      zL  &  t      L  &  tt       L  &  øt      ³L  &  $u      ÆL  &  Hu      ÙL  &  hu      ìL  &  °u      ÿL  &  Àu      M  &  Ðu      %M  &  üu      8M  &  ”v      KM  &  w      ^M  &  (w      qM  &  Dw      „M  &  `w      —M  &  ¨w      ªM  &  }|      ÁM  &  |      ÓM  &  œ|      éM  &  ­|      þM  &  ½|      N  &  Ö|      .N  &  ã|      AN  &  ñ|      _N  &  
}      ƒN  &  ˜€      •N  &  ¨€      ¬N  &  À€      ÁN  &  Ø€      ×N  &  ð€      éN  &        O  &         +O  &  0      IO  &  H      \O              oO  &  ¨      P              hP  &  (‚      ÿP              'Q  &  èÁ      ^Q  &  àÂ      Q  &  0Ã      ´Q  &  HÃ      ØQ  &  Ã      øQ              R              4R              VR  &  ÐÄ      cR  &  Å         d               @Ä           Ä      >     ÈP      f     N      …   € ”^      È   € ÈS      0  € hg      ‚   @            þ        ´    þ        Ï            ß                        8            Q            m            È            â                        $            o            º            ì                        (            B            W            l            }            ¤            Î            ù               €           €           €        &   €        -            G            U            h            y                        œ            ²            Ä            ×    þ        ê    þ        þ                            þ        #    þ        F    þ        _    þ        r    þ        ˆ    þ        œ    þ        ³    þ        Ì    þ        ä    þ        û    þ            þ        !    þ        D    þ        V    þ        p    þ        ‰    þ        ˜    þ        ²    þ        Æ    þ        â    þ        ý    þ            þ        '    þ        I    þ        a    þ        z    þ            þ        ™    þ        ¦    þ        ´            ¼    þ        Ë    þ        Ú    þ        ä    þ        õ                                        !  "  #  $  %  &  '  (  )  *  ,  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  P  Q  R  S  T       €           €   €   €   €     +  -  5  O  U                              !  "  #  $  %  &  '  (  )  *  ,  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  P  Q  R  S  T        _OBJC_CLASS_$_EventDelegate _OBJC_METACLASS_$_EventDelegate __Z11RunCallbackRKN4Napi12CallbackInfoE __Z4InitN4Napi3EnvENS_6ObjectE __ZN18ThreadSafeCallback4Impl21static_async_callbackEP10uv_async_s __ZN4Napi7details12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__ __ZZN18ThreadSafeCallback4Impl14async_callbackEvENUlP11uv_handle_sE_8__invokeES2_ _OBJC_CLASS_$_CWWiFiClient _OBJC_CLASS_$_NSObject _OBJC_METACLASS_$_NSObject __Unwind_Resume __ZNKSt3__119__shared_weak_count13__get_deleterERKSt9type_info __ZNSt11logic_errorC2EPKc __ZNSt12length_errorD1Ev __ZNSt13runtime_errorC1EPKc __ZNSt13runtime_errorC1ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE __ZNSt13runtime_errorD1Ev __ZNSt20bad_array_new_lengthC1Ev __ZNSt20bad_array_new_lengthD1Ev __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm __ZNSt3__119__shared_weak_count14__release_weakEv __ZNSt3__119__shared_weak_countD2Ev __ZNSt3__15mutex4lockEv __ZNSt3__15mutex6unlockEv __ZNSt3__15mutexD1Ev __ZNSt9exceptionD2Ev __ZSt9terminatev __ZTVN10__cxxabiv117__class_type_infoE __ZTVN10__cxxabiv120__si_class_type_infoE __ZTVN10__cxxabiv121__vmi_class_type_infoE __ZTVSt12length_error __ZdaPv __ZdlPv __Znam __Znwm ___cxa_allocate_exception ___cxa_atexit ___cxa_begin_catch ___cxa_end_catch ___cxa_free_exception ___cxa_throw ___gxx_personality_v0 ___stack_chk_fail ___stack_chk_guard __objc_empty_cache __objc_empty_vtable _memcpy _memmove _napi_add_finalizer _napi_close_escapable_handle_scope _napi_close_handle_scope _napi_create_error _napi_create_function _napi_create_object _napi_create_reference _napi_create_string_utf8 _napi_create_type_error _napi_delete_reference _napi_escape_handle _napi_fatal_error _napi_get_and_clear_last_exception _napi_get_cb_info _napi_get_last_error_info _napi_get_named_property _napi_get_null _napi_get_reference_value _napi_get_undefined _napi_get_value_string_utf8 _napi_is_exception_pending _napi_make_callback _napi_module_register _napi_open_escapable_handle_scope _napi_open_handle_scope _napi_set_named_property _napi_set_property _napi_throw _napi_typeof _objc_msgSend _strlen _uv_async_init _uv_async_send _uv_close _uv_default_loop dyld_stub_binder -[EventDelegate ssidDidChangeForWiFiInterfaceWithName:] __ZN18ThreadSafeCallback4callENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEE __ZN18ThreadSafeCallbackclENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEENS1_IFvRKN4Napi5ValueERKNSD_5ErrorEEEE __ZN18ThreadSafeCallback4Impl4callENSt3__18functionIFvP10napi_env__RNS1_6vectorIP12napi_value__NS1_9allocatorIS7_EEEEEEENS2_IFvRKN4Napi5ValueERKNSE_5ErrorEEEE ___clang_call_terminate __ZNSt3__16vectorINS_4pairINS_8functionIFvP10napi_env__RNS0_IP12napi_value__NS_9allocatorIS6_EEEEEEENS2_IFvRKN4Napi5ValueERKNSD_5ErrorEEEEEENS7_ISM_EEE21__push_back_slow_pathISM_EEvOT_ __ZNSt3__14pairINS_8functionIFvP10napi_env__RNS_6vectorIP12napi_value__NS_9allocatorIS6_EEEEEEENS1_IFvRKN4Napi5ValueERKNSD_5ErrorEEEEED1Ev __ZNKSt3__16vectorINS_4pairINS_8functionIFvP10napi_env__RNS0_IP12napi_value__NS_9allocatorIS6_EEEEEEENS2_IFvRKN4Napi5ValueERKNSD_5ErrorEEEEEENS7_ISM_EEE20__throw_length_errorB6v15006Ev __ZSt28__throw_bad_array_new_lengthB6v15006v __ZNSt3__120__throw_length_errorB6v15006EPKc __ZNSt12length_errorC1B6v15006EPKc __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEED1Ev __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEED0Ev __ZNKSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7__cloneEv __ZNKSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7__cloneEPNS0_6__baseISD_EE __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7destroyEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE18destroy_deallocateEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEEclEOS6_SC_ __ZN4Napi5Error3NewEP10napi_env__ __ZN4Napi5ErrorD1Ev __ZN4Napi6Object3SetIA5_cEEbPKcRKT_ __ZN4Napi6Object3SetIA38_cEEbPKcRKT_ __ZNSt3__16vectorIP12napi_value__NS_9allocatorIS2_EEE6assignIPKS2_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsISA_E9referenceEEE5valueEvE4typeESA_SA_ __ZNKSt3__16vectorIP12napi_value__NS_9allocatorIS2_EEE20__throw_length_errorB6v15006Ev __ZN4Napi5ErrorD0Ev __ZNK4Napi5Error4whatEv __ZNK4Napi15ObjectReference3GetEPKc __ZNK4Napi6String9Utf8ValueEv __ZN4Napi5Error5FatalEPKcS2_ __ZN4Napi20EscapableHandleScopeD1Ev __ZL14_register_mainv __ZNSt3__110shared_ptrI18ThreadSafeCallbackED1B6v15006Ev __ZL11__napi_InitP10napi_env__P12napi_value__ __ZNK4Napi5Error26ThrowAsJavaScriptExceptionEv __ZN4Napi11HandleScopeD1Ev __ZN4Napi8Function3NewIPFvRKNS_12CallbackInfoEEEES0_P10napi_env__T_PKcPv __ZZN4Napi7detailsL10AttachDataINS0_12CallbackDataIPFvRKNS_12CallbackInfoEEvEEEE11napi_statusP10napi_env__P12napi_value__PT_PFvSB_PvSG_ESG_ENUlSB_SG_SG_E_8__invokeESB_SG_SG_ __ZN4Napi7details12WrapCallbackIZNS0_12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__EUlvE_EEP12napi_value__T_ __ZN18ThreadSafeCallbackC2ERKN4Napi5ValueERKNS0_8FunctionE __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEED1Ev __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEED0Ev __ZNKSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7__cloneEv __ZNKSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7__cloneEPNS0_6__baseISH_EE __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7destroyEv __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE18destroy_deallocateEv __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEEclEOSA_SG_ __ZN4Napi6String4FromIS0_EES0_P10napi_env__RKT_ __ZNK4Napi5Value8IsObjectEv __ZN4Napi5Error3NewEP10napi_env__PKc __ZN18ThreadSafeCallback4ImplC2EON4Napi9ReferenceINS1_5ValueEEEONS1_17FunctionReferenceE __ZN4Napi17FunctionReferenceD1Ev __ZN4Napi9ReferenceINS_5ValueEED1Ev __ZNSt3__16vectorINS_4pairINS_8functionIFvP10napi_env__RNS0_IP12napi_value__NS_9allocatorIS6_EEEEEEENS2_IFvRKN4Napi5ValueERKNSD_5ErrorEEEEEENS7_ISM_EEED1B6v15006Ev __ZN18ThreadSafeCallback4Impl14async_callbackEv __ZNK4Napi17FunctionReference12MakeCallbackEP12napi_value__RKNSt3__16vectorIS2_NS3_9allocatorIS2_EEEEP20napi_async_context__ __ZN4Napi5ErroraSEOS0_ __ZNK4Napi5Error7MessageEv __ZN18ThreadSafeCallback4ImplD2Ev __ZN4Napi5Error3NewIS0_EET_P10napi_env__PKcmPF11napi_statusS4_P12napi_value__S9_PS9_E __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEED1Ev __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEED0Ev __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEE16__on_zero_sharedEv __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEE21__on_zero_shared_weakEv __GLOBAL__sub_I_main.mm _objc_msgSend$alloc _objc_msgSend$init _objc_msgSend$setDelegate: _objc_msgSend$sharedWiFiClient _objc_msgSend$startMonitoringEventWithType:error: __OBJC_$_INSTANCE_METHODS_EventDelegate GCC_except_table0 GCC_except_table1 GCC_except_table2 GCC_except_table3 GCC_except_table5 GCC_except_table9 GCC_except_table17 GCC_except_table18 GCC_except_table19 GCC_except_table20 GCC_except_table21 GCC_except_table24 GCC_except_table25 GCC_except_table26 GCC_except_table27 GCC_except_table29 GCC_except_table33 GCC_except_table34 GCC_except_table35 GCC_except_table36 GCC_except_table37 GCC_except_table38 GCC_except_table41 GCC_except_table42 GCC_except_table49 GCC_except_table50 GCC_except_table51 GCC_except_table53 GCC_except_table54 GCC_except_table55 GCC_except_table56 GCC_except_table58 GCC_except_table59 GCC_except_table60 GCC_except_table61 GCC_except_table63 GCC_except_table64 GCC_except_table67 __ZTSSt13runtime_error __ZTSSt9exception __ZTSSt12length_error __ZTSSt11logic_error __ZTSSt20bad_array_new_length __ZTSSt9bad_alloc __ZTSN4Napi5ErrorE __ZTSN4Napi15ObjectReferenceE __ZTSN4Napi9ReferenceINS_6ObjectEEE __ZTISt9exception __ZTISt13runtime_error __ZTISt11logic_error __ZTISt12length_error __ZTISt9bad_alloc __ZTISt20bad_array_new_length __ZTIN4Napi9ReferenceINS_6ObjectEEE __ZTIN4Napi15ObjectReferenceE __ZTIN4Napi5ErrorE __ZTVN4Napi5ErrorE __ZTVNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEEE __ZTVNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEEE __ZTVNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEEE __OBJC_LABEL_PROTOCOL_$_CWEventDelegate __OBJC_$_PROTOCOL_INSTANCE_METHODS_OPT_CWEventDelegate __OBJC_$_PROTOCOL_METHOD_TYPES_CWEventDelegate __OBJC_CLASS_PROTOCOLS_$_EventDelegate __OBJC_METACLASS_RO_$_EventDelegate __OBJC_CLASS_RO_$_EventDelegate __dyld_private __OBJC_PROTOCOL_$_CWEventDelegate __ZL7_module __ZL21notifyCallbackForJsFn /Users/fndroid/nodejs-projects/network-interface/build/../src/ main.mm /tmp/lto.o -[EventDelegate ssidDidChangeForWiFiInterfaceWithName:] /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/shared_ptr.h /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/function.h ../src/main.mm __ZN18ThreadSafeCallback4callENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEE ../src/napi-thread-safe-callback-impl.hpp __ZN18ThreadSafeCallbackclENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEENS1_IFvRKN4Napi5ValueERKNSD_5ErrorEEEE __ZN18ThreadSafeCallback4Impl4callENSt3__18functionIFvP10napi_env__RNS1_6vectorIP12napi_value__NS1_9allocatorIS7_EEEEEEENS2_IFvRKN4Napi5ValueERKNSE_5ErrorEEEE /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__mutex_base /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/vector ___clang_call_terminate __ZNSt3__16vectorINS_4pairINS_8functionIFvP10napi_env__RNS0_IP12napi_value__NS_9allocatorIS6_EEEEEEENS2_IFvRKN4Napi5ValueERKNSD_5ErrorEEEEEENS7_ISM_EEE21__push_back_slow_pathISM_EEvOT_ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__split_buffer /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/allocator.h /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/new /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/pair.h /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/uninitialized_algorithms.h /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/reverse_iterator.h /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/swap.h __ZNSt3__14pairINS_8functionIFvP10napi_env__RNS_6vectorIP12napi_value__NS_9allocatorIS6_EEEEEEENS1_IFvRKN4Napi5ValueERKNSD_5ErrorEEEEED1Ev __ZNKSt3__16vectorINS_4pairINS_8functionIFvP10napi_env__RNS0_IP12napi_value__NS_9allocatorIS6_EEEEEEENS2_IFvRKN4Napi5ValueERKNSD_5ErrorEEEEEENS7_ISM_EEE20__throw_length_errorB6v15006Ev __ZSt28__throw_bad_array_new_lengthB6v15006v __ZNSt3__120__throw_length_errorB6v15006EPKc /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/stdexcept __ZNSt12length_errorC1B6v15006EPKc __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEED1Ev __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEED0Ev __ZNKSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7__cloneEv __ZNKSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7__cloneEPNS0_6__baseISD_EE __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7destroyEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE18destroy_deallocateEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEEclEOS6_SC_ /Users/fndroid/nodejs-projects/network-interface/node_modules/node-addon-api/napi-inl.h /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/initializer_list __ZN4Napi5Error3NewEP10napi_env__ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/string __ZN4Napi5ErrorD1Ev /Users/fndroid/nodejs-projects/network-interface/node_modules/node-addon-api/napi.h __ZN4Napi6Object3SetIA5_cEEbPKcRKT_ __ZN4Napi6Object3SetIA38_cEEbPKcRKT_ __ZNSt3__16vectorIP12napi_value__NS_9allocatorIS2_EEE6assignIPKS2_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsISA_E9referenceEEE5valueEvE4typeESA_SA_ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/distance.h /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/copy.h __ZNKSt3__16vectorIP12napi_value__NS_9allocatorIS2_EEE20__throw_length_errorB6v15006Ev __ZN4Napi5ErrorD0Ev __ZNK4Napi5Error4whatEv __ZNK4Napi15ObjectReference3GetEPKc __ZNK4Napi6String9Utf8ValueEv __ZN4Napi5Error5FatalEPKcS2_ __ZN4Napi20EscapableHandleScopeD1Ev __ZL14_register_mainv __ZNSt3__110shared_ptrI18ThreadSafeCallbackED1B6v15006Ev __ZL11__napi_InitP10napi_env__P12napi_value__ __Z4InitN4Napi3EnvENS_6ObjectE __ZNK4Napi5Error26ThrowAsJavaScriptExceptionEv __ZN4Napi11HandleScopeD1Ev __Z11RunCallbackRKN4Napi12CallbackInfoE __ZN4Napi8Function3NewIPFvRKNS_12CallbackInfoEEEES0_P10napi_env__T_PKcPv __ZN4Napi7details12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__ __ZZN4Napi7detailsL10AttachDataINS0_12CallbackDataIPFvRKNS_12CallbackInfoEEvEEEE11napi_statusP10napi_env__P12napi_value__PT_PFvSB_PvSG_ESG_ENUlSB_SG_SG_E_8__invokeESB_SG_SG_ __ZN4Napi7details12WrapCallbackIZNS0_12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__EUlvE_EEP12napi_value__T_ __ZN18ThreadSafeCallbackC2ERKN4Napi5ValueERKNS0_8FunctionE __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEED1Ev __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEED0Ev __ZNKSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7__cloneEv __ZNKSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7__cloneEPNS0_6__baseISH_EE __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7destroyEv __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE18destroy_deallocateEv __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEEclEOSA_SG_ __ZN4Napi6String4FromIS0_EES0_P10napi_env__RKT_ __ZNK4Napi5Value8IsObjectEv __ZN4Napi5Error3NewEP10napi_env__PKc __ZN18ThreadSafeCallback4ImplC2EON4Napi9ReferenceINS1_5ValueEEEONS1_17FunctionReferenceE __ZN4Napi17FunctionReferenceD1Ev __ZN4Napi9ReferenceINS_5ValueEED1Ev __ZN18ThreadSafeCallback4Impl21static_async_callbackEP10uv_async_s __ZNSt3__16vectorINS_4pairINS_8functionIFvP10napi_env__RNS0_IP12napi_value__NS_9allocatorIS6_EEEEEEENS2_IFvRKN4Napi5ValueERKNSD_5ErrorEEEEEENS7_ISM_EEED1B6v15006Ev __ZN18ThreadSafeCallback4Impl14async_callbackEv /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/wrap_iter.h __ZNK4Napi17FunctionReference12MakeCallbackEP12napi_value__RKNSt3__16vectorIS2_NS3_9allocatorIS2_EEEEP20napi_async_context__ __ZN4Napi5ErroraSEOS0_ __ZNK4Napi5Error7MessageEv __ZZN18ThreadSafeCallback4Impl14async_callbackEvENUlP11uv_handle_sE_8__invokeES2_ __ZN18ThreadSafeCallback4ImplD2Ev __ZN4Napi5Error3NewIS0_EET_P10napi_env__PKcmPF11napi_statusS4_P12napi_value__S9_PS9_E __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEED1Ev __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEED0Ev __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEE16__on_zero_sharedEv __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEE21__on_zero_shared_weakEv __GLOBAL__sub_I_main.mm GCC_except_table0 GCC_except_table1 GCC_except_table2 GCC_except_table3 GCC_except_table5 GCC_except_table9 GCC_except_table17 GCC_except_table18 GCC_except_table19 GCC_except_table20 GCC_except_table21 GCC_except_table24 GCC_except_table25 GCC_except_table26 GCC_except_table27 GCC_except_table29 GCC_except_table33 GCC_except_table34 GCC_except_table35 GCC_except_table36 GCC_except_table37 GCC_except_table38 GCC_except_table41 GCC_except_table42 GCC_except_table49 GCC_except_table50 GCC_except_table51 GCC_except_table53 GCC_except_table54 GCC_except_table55 GCC_except_table56 GCC_except_table58 GCC_except_table59 GCC_except_table60 GCC_except_table61 GCC_except_table63 GCC_except_table64 GCC_except_table67 __ZTSSt13runtime_error __ZTSSt9exception __ZTSSt12length_error __ZTSSt11logic_error __ZTSSt20bad_array_new_length __ZTSSt9bad_alloc __ZTSN4Napi5ErrorE __ZTSN4Napi15ObjectReferenceE __ZTSN4Napi9ReferenceINS_6ObjectEEE __ZTISt9exception __ZTISt13runtime_error __ZTISt11logic_error __ZTISt12length_error __ZTISt9bad_alloc __ZTISt20bad_array_new_length __ZTIN4Napi9ReferenceINS_6ObjectEEE __ZTIN4Napi15ObjectReferenceE __ZTIN4Napi5ErrorE __ZTVN4Napi5ErrorE __ZTVNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEEE __ZTVNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEEE __ZTVNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEEE __OBJC_LABEL_PROTOCOL_$_CWEventDelegate __OBJC_$_PROTOCOL_INSTANCE_METHODS_OPT_CWEventDelegate __OBJC_$_PROTOCOL_METHOD_TYPES_CWEventDelegate __OBJC_CLASS_PROTOCOLS_$_EventDelegate __OBJC_METACLASS_RO_$_EventDelegate __OBJC_CLASS_RO_$_EventDelegate _OBJC_METACLASS_$_EventDelegate _OBJC_CLASS_$_EventDelegate __OBJC_PROTOCOL_$_CWEventDelegate __ZL7_module __ZL21notifyCallbackForJsFn          úÞÀ  ›          úÞ  ‡       g   X        ‡Ð                                        €         mac-arm64.node –ð¦f
g~ª%ªÓ«NwšL£r½¿¤+*D×Ž­¬²XoÆéfÀ×ÑÑkOXÿ|´|z…Ú½‹H‰,§­¬²XoÆéfÀ×ÑÑkOXÿ|´|z…Ú½‹H‰,§JæU#aáDíÞl"Ñ.p	ºÇÊr#–éÿè%8^Ý…eQ‡9Š(–.þ-¡Ôb3æ1¬.2D½g©+µ,H”‘ELLÌþyÌC÷ìi@âØvo“å!gF)BW$„÷ùÛAKU^æÓ(åykœÕ‘²Ô\ª?)ZYã›
Ü¬üŒžØ »·ß}úŸ»¸v*òQ2t1V9qÈdD¸1J©RÃË±Þþÿò¶_zE9ãH³"úØûôJ4­¬²XoÆéfÀ×ÑÑkOXÿ|´|z…Ú½‹H‰,§­¬²XoÆéfÀ×ÑÑkOXÿ|´|z…Ú½‹H‰,§­¬²XoÆéfÀ×ÑÑkOXÿ|´|z…Ú½‹H‰,§(%Æ®¾Æª'N©3O1ÏÏ×˜Æï  *Å«+BF,]°­¬²XoÆéfÀ×ÑÑkOXÿ|´|z…Ú½‹H‰,§­¬²XoÆéfÀ×ÑÑkOXÿ|´|z…Ú½‹H‰,§­¬²XoÆéfÀ×ÑÑkOXÿ|´|z…Ú½‹H‰,§#@M2À&™7ÿ7+¥T‡Uì¦€Cio‘É˜	ýóœýG#fç‹CP+› “µf*}‰Ê¢íÒÂ,ª¥~±ú©zp|mpCß}ûÀÃEMj´mÿ€£³íºiî˜Ì‚ZiºÝ=Q¶1ë<›ÕbX¶Ø[m—?^"Gƒú4èŠŠYdQÇÄ>Ãw¸ÏNÙØ!¨ð¹|Ä´3«¯¿|è5ð¤ø€snË.=Ä=øì˜ÂI‹õ
'´Òÿ_p›v²(ŽhäyÈÂÊú8ÁQc:º‚g7Šõ»sÍVRž£ÂX)iøO?’è‹Ö˜ÖÇ-±o„—Í¿E-Ñ7N­£¢±Ë4!·oOe„U¤»\Y~§ÿÐn|àëIÌ=3f *þë*ÜÑÏúíþ           P
  …€        ¸  __TEXT                   €               €                   __text          __TEXT          P+      Ï5      P+               €            __stubs         __TEXT           a      h       a              €           __stub_helper   __TEXT          ˆb      @      ˆb               €            __gcc_except_tab__TEXT          Èd      ü      Èd                             __const         __TEXT          Ðk      ²       Ðk                             __objc_classname__TEXT          ‚l             ‚l                             __objc_methname __TEXT           l      ç       l                             __objc_methtype __TEXT          ‡n      T       ‡n                             __cstring       __TEXT          Ûn            Ûn                             __unwind_info   __TEXT          lq      8      lq                             __eh_frame      __TEXT          ¨s      P      ¨s                                ¨  __DATA           €       @       €       @                   __nl_symbol_ptr __DATA           €              €                <           __got           __DATA          €      ¨       €                =           __la_symbol_ptr __DATA          °€      à      °€                R           __mod_init_func __DATA          ‚             ‚             	               __const         __DATA          ˜‚      è      ˜‚                             __objc_classlist__DATA          €„             €„                            __objc_protolist__DATA          ˆ„             ˆ„                             __objc_imageinfo__DATA          „             „                             __objc_const    __DATA          ˜„            ˜„                             __objc_selrefs  __DATA          ¨†      (       ¨†                           __objc_classrefs__DATA          Ð†             Ð†                            __objc_data     __DATA          à†      P       à†                             __data          __DATA          0‡      `       0‡                             __bss           __DATA          ‡                                              H   __LINKEDIT       À       À       À      (‰                    "  €0    À  X   XÀ  Ø  0Ã    ÀÆ    ØÍ  ¨        èÑ  <  à÷  HQ     P       ×  ×     ï  M                           ¨õ  Ž                         Þ`#m5Ÿ’.íH=8´$       
     €`               /System/Library/Frameworks/CoreWLAN.framework/Versions/A/CoreWLAN          0          $   /usr/lib/libc++.1.dylib    8           '   /usr/lib/libSystem.B.dylib      &      €Ñ  h   )      èÑ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      UH‰åAVSHƒì0I‰þ¶G ¨uHÑèI^ H…ÀuXëI‹F(I^ H…ÀuIIƒ~ tBI~H5YC  è˜  H‰EàH‰UèH}ÈHuàè“  öt	I‹~0è¿5  H‹EØH‰CEÈöuHƒÃëI‹^0H‰ØHƒÄ0[A^]ÃH‰Çè«5  è¬5  ëÖH‰Çè$   @ UH‰åH‰òHÇÆÿÿÿÿHÇÁÿÿÿÿèê5  fD  Pèr5  èC5  D  UH‰åSPH‹_H…ÛtHÇÀÿÿÿÿðHÁCH…ÀtHƒÄ[]ÃH‹H‰ßÿPH‰ßHƒÄ[]éÛ4  UH‰åAVSHƒì@H‹T  H‹ H‰EèH‹= [  HñV  H‰E°H]°H‰]ÐH‰Þèe   H‹}ÐH9ûtH…ÿtH‹ÿP(ëH‹ÿP H‹ÊS  H‹ H;Eèu	HƒÄ@[A^]ÃèË4  I‰ÆH‹}ÐH9ûtè
3  L‰÷è"4  H‹ÿP L‰÷è4  @ UH‰åAWAVSHƒìhI‰ÿH‹qS  H‹ H‰EàH‹~ H…ÿtH9þtH‹ÿPH‰EÐëHÇEÐ    ëHu°H‰uÐH‹ÿPHÇE     Lu°H]€L‰ÿL‰öH‰Úèò
  H‹} H9ût!H…ÿtH‹ÿP(H‹}ÐI9þtH…ÿtH‹ÿP(ëH‹ÿP H‹}ÐI9þuäH‹ÿP H‹ÔR  H‹ H;EàuHƒÄh[A^A_]ÃèÓ3  I‰ÆH‹} H9ûtèb2  H}°è)2  L‰÷è!3  H‹ÿP H}°è2  L‰÷è
3  f.„     UH‰åAWAVSHƒìXH‹dR  H‹ H‰EàH‹_Hƒ r
H‹G(H‹@ëHu H‰ßèÒ3  …À…J  H‹E H‰]H‰E˜¿    è3  I‰ÇWÀ@H‹íQ  HƒÀI‰L‰ûHƒÃ)E Hu HUH‰ßèó  H‰ÜX  L‹5ÝX  L‰=ÖX  M…öt#HÇÀÿÿÿÿðIÁFH…ÀuI‹L‰÷ÿPL‰÷è`2  H‹=ßW  H‹5ÈW  L‹5¡Q  AÿÖH‰ÃH‹=ÌW  H‹5•W  AÿÖH‹5“W  H‰ÇAÿÖH‹5ŽW  H‰ßH‰ÂAÿÖH‹5ŽW  HM º   H‰ßAÿÖHƒ}  t>H‹=9X  HêT  H‰E°H]°H‰]ÐH‰ÞèžýÿÿH‹}ÐH9ûtH…ÿtH‹ÿP(ëH‹ÿP H‹Q  H‹ H;EàuHƒÄX[A^A_]Ãè2  ¿8   èÔ1  I‰ÇH‰ÇH‰ÞèZ  H‹5sP  H‹<P  L‰ÿèÎ1  I‰ÆL‰ÿè½1  L‰÷è11  I‰ÆH‹}ÐH9ûtèp0  L‰÷è1  H‹ÿP L‰÷è
1  I‰ÆL‰ÿè/1  L‰ÿèQ1  L‰÷èï0  f.„     D  UH‰åAWAVATSHƒìI‰×I‰öH‰ûH5|>  HMØº   è1  …Àu?L‹eØH5¤ýÿÿH‰ß1Ò1Éè¨   H‰ÑL‰÷L‰þL‰âè¿1  …ÀuAL‰ðL‰úHƒÄ[A\A^A_]Ã¿8   èÒ0  I‰ÆH‰ÇH‰ÞèX  H‹5qO  H‹:O  L‰÷èÌ0  ¿8   è¤0  H‰ÃH‰ÇL‰öè*  H‹5CO  H‹O  H‰ßèž0  I‰ÇH‰ßëI‰ÇL‰÷è…0  L‰ÿèù/  f„     UH‰åAWAVAUATSPI‰ÏI‰ÔI‰õI‰þ¿   è20  H‰ÃL‰(L‰xH‹³N  LMÐL‰÷L‰æHÇÂÿÿÿÿI‰Àè\0  …Àu6H‹uÐHƒ,  L‰÷H‰ÚE1ÀE1Éè$0  …ÀuH‹UÐL‰ðHƒÄ[A\A]A^A_]ÃH‰ßèº/  ¿8   èÂ/  H‰ÃH‰ÇL‰öèH  H‹5aN  H‹*N  H‰ßè¼/  I‰ÆH‰ßè«/  L‰÷è/  f.„     D  UH‰åSPH‰òH‰þèþÿÿH‰ÐHƒÄ[]ÃH‰Ãƒúu&H‰ßè]/  H‰Çè=  èV/  1ÀHƒÄ[]ÃH‰ÃèE/  H‰ßè¿.  H‰Çè·ùÿÿ€    UH‰åSPH‰ûH‹èM  HƒÀH‰öG t	H‹{0èä.  H‰ßèÊ.  H‹sH…öt€{ u	H‹{èB/  HÇC    HƒÄ[]ÃH‰ÇèSùÿÿ UH‰åSPH‰ûH‹ˆM  HƒÀH‰öG t	H‹{0è„.  H‰ßèj.  H‹sH…öt€{ u	H‹{èâ.  H‰ßHƒÄ[]éV.  H‰Çèôøÿÿ@ UH‰åAVSHƒì I‰öH‰ûH‹?H‰}ØHuàèõ.  …À…†   H‹sH…ötH‹;HUèèº.  …À…  H‹H‹uèëH‹1öHMèH‰ßL‰òè‰.  …ÀuwH‹UèH‹}ØH‹uàHMèèR.  …À…   H‹]ØH‹uàL‹uèH‰ßè .  …À…¥   H‰ØL‰òHƒÄ [A^]Ã¿8   è£-  I‰ÆH‹uØH‰Çè(  H‹5AL  H‹
L  L‰÷èœ-  ¿8   èt-  I‰ÆH‰ÇH‰Þèú   H‹5L  H‹ÜK  L‰÷èn-  éÑ   ¿8   èA-  I‰ÆH‹uØH‰ÇèÆ   H‹5ßK  H‹¨K  L‰÷è:-  é   H=>;  H5c;  èx÷ÿÿé…   ¿8   èõ,  I‰ÆH‹3H‰Çè{   H‹5”K  H‹]K  L‰÷èï,  ëUëë H‰ÃL‰÷èØ,  ëH‰ÃL‰÷èË,  ëH‰Çè=÷ÿÿH‰ÃH‹}ØH‹uàèÕ,  …ÀuH‰ßè!,  H=´:  H5Ù:  èîöÿÿH‰Çè÷ÿÿ@ UH‰åAWAVATSHƒì I‰öI‰üHÇEÐ    HuÀL‰÷èÍ,  …À…I  HußL‰÷èÝ,  …À…H  €}ß t'HuÐL‰÷è“,  …À„‚   H=n9  H5¥9  ènöÿÿH‹EÀH‹ H…ÀH±9  HEØH‰ßè»,  HMÈL‰÷H‰ÞH‰Âè+,  …À…  H‹EÀ‹@ƒø‡”   ¹Ì   £Áƒ†   H‹UÈHMÐL‰÷1öèù+  …À…†   H‹uÐM‰t$IÇD$    AÆD$ H‹HJ  HƒÀI‰$WÀAD$ IÇD$0    H…ötM|$I\$ L‰÷º   L‰ùè+  …ÀucL‰àHƒÄ [A\A^A_]ÃH‹UÈHMÐL‰÷1öèU+  …À„zÿÿÿH=f8  H5ð8  èfõÿÿH=S8  H5W8  èSõÿÿH=@8  H5]8  è@õÿÿH=Ð8  H5Ö8  è-õÿÿH=8  H5Š8  èõÿÿI‰Æöt
I‹|$0è€*  L‰çèf*  I‹t$H…ötA€|$ u
I‹|$èÚ*  IÇ    L‰÷èó)  H‰Çèëôÿÿf.„     UH‰åAWAVSPI‰öH‰ûH‹>H‹vLEà1Ò1ÉèÐ*  …ÀumWÀHÇC    H‹uàHƒÆH‰ßè¾)  H‹uàH‰ß1Òèª)  I‹>H‹HƒàþHƒÀÿöHSHESI‹v¹   HEÈE1Àèq*  …Àu<H‰ØHƒÄ[A^A_]Ã¿8   è­)  H‰ÃI‹6H‰Çè3ýÿÿH‹5LH  H‹H  H‰ßè§)  ¿8   è)  I‰ÇI‹6H‰ÇèýÿÿH‹5H  H‹çG  L‰ÿèy)  I‰ÆL‰ÿèf)  ëI‰ÆH‰ßèY)  L‰÷èÍ(  I‰Æöt	H‹{è)  L‰÷è´(  @ UH‰åAWAVSHƒìhH‹H  H‹ H‰EàL‹7M…ö„á   H‰ÓH‹~ H…ÿtH9þt3H‹ÿPH‰EÐH‹{ H…ÿuë5HÇEÐ    H‹{ H…ÿt$H9ût'H‹ÿPëHu°H‰uÐH‹ÿPH‹{ H…ÿuÜ1ÀH‰E ëHu€H‰u H‹ÿPL}°H]€L‰÷L‰þH‰Úè  H‹} H9ût!H…ÿtH‹ÿP(H‹}ÐI9ÿtH…ÿtH‹ÿP(ëH‹ÿP H‹}ÐI9ÿuäH‹ÿP H‹4G  H‹ H;Eàu=HƒÄh[A^A_]Ã¿   è
(  H‰ÃH5|6  H‰Çèž'  H‹5½F  H‹†F  H‰ßè (  è(  I‰ÆH‰ßèê'  ëDI‰ÆëI‰ÆH‹} H9ûuH‹ÿP ëH…ÿtH‹ÿP(H‹}ÐHE°H9øuH‹ÿP L‰÷è%'  H…ÿuL‰÷è'  H‹ÿP(L‰÷è
'  f.„     UH‰åAWAVAUATSHìˆ   I‰×H‰óI‰ýH‹TF  H‹ H‰EÐL§°   L‰çèü&  H‹{ H…ÿtH9ûtH‹ÿPë1ÀH‰EëHµpÿÿÿH‰uH‹ÿPLu I‹ H…ÿtI9ÿtH‹ÿPH‰EÀë1ÀH‰EÀëL‰uÀH‹L‰öÿPI‹ø   I‹…   H9Ãs1H‹EH…À„¡   HpÿÿÿH9Á„é   HMH‰C HÇ    éæ   I½ð   I¸ªªªªªªªH‹H)ÓHÁûH¹«ªªªªªªªH¯ÙHsL9Æ‡  H)ÐHÁøH¯ÁL4 I9öLBöH¹UUUUUUUH9ÈMCðM…öt(M9Æ‡Ô  L‰ðHÁàH<@è&  ëHC HÇ     ë\1ÀL‰¥hÿÿÿH[HÁãL<H‹}H…ÿtI‰ÄH…pÿÿÿH9øt}HEI‰| ë
I‰ÄHØHƒÀ HÇ     ëmH‰[ H‹}H‹H‰ÞÿPH‹EÀH…ÀtI9ÆtHMÀH‰CPHÇ    ëHCPHÇ     ëHs0H‰sPH‹}ÀH‹ÿPHƒÃ`I‰ø   éc  M‰| H‹L‰þÿPH‹}ÀH…ÿtHE H9øtHEÀI‰|PëIHƒÀPHÇ     ëI4HƒÆ0I‰tPH‹ÿPKvHÁàIÄIW`I‹ð   L‰èM‹­ø   H‰ËI9Í„µ  H‰•`ÿÿÿL‰¥PÿÿÿH‰…XÿÿÿE1äM‰îë,@ K'HƒÀðHÇ     IƒÆ K,HƒÀ IƒÄ H9Ø„Å   K‹D%ÀH…Àt.K,HƒÁ H9ÁtAINÀK‰D'ÀHÇ    ëGf.„     D  K'HƒÀÀHÇ     ë'f.„     D  K4'HƒÆ K‰t'ÀK‹|%ÀH‹ÿPK‹D%ðH…À„ZÿÿÿK,HƒÁÐH9ÁtINðK‰D'ðHÇ    éGÿÿÿ„     K4'HƒÆÐK‰t'ðK‹|%ðH‹ÿPé"ÿÿÿL‹­XÿÿÿI‹…ð   M‹µø   MçM‰½ð   I‰ÇH‹…`ÿÿÿI‰…ø   H‹…PÿÿÿI‰…   M9þ„  L‹¥hÿÿÿë H‹ÿP M9þtkL‰óI‹~ðIFÐH9øtH…ÿtH‹ÿP(ë„     H‹ÿP Ls H‹{ÀHƒÃ H9ût¹H…ÿtºH‹ÿP(ë²L‰¸ð   H‰ø   L‰    L‹¥hÿÿÿI‰ÅI‰ßM…ÿLu tL‰ÿèã"  H‹}ÀI9þt(H…ÿtH‹ÿP(H‹}H…pÿÿÿH9øt#H…ÿt$H‹ÿP(ëH‹ÿP H‹}H…pÿÿÿH9øuÝH‹ÿP IƒÅ0L‰ïè†#  L‰çèd"  H‹™A  H‹ H;EÐu+HÄˆ   [A\A]A^A_]ÃL‹¥hÿÿÿM…ÿLu …aÿÿÿédÿÿÿèx"  è³   ëè¼   H‰ÇèÒìÿÿH‰ÇèÊìÿÿH‰ÇèÂìÿÿH‰ÇèºìÿÿH‰ÃH‹}H…pÿÿÿH9øt.ëJë H‰ÃëNH‰ÃH‹}ÀHE H9øtèù   H‹}H…pÿÿÿH9øuH‹ÿP ë!H‹ÿP H‹}H…pÿÿÿH9øtâH…ÿtH‹ÿP(L‰çè„!  H‰ßè@!  H‰Çè8ìÿÿH‰Çè0ìÿÿUH‰åè-!  €    UH‰åAVS¿   è{!  H‰ÃH‰Çè4   H‹5-@  H‹ö?  H‰ßèx!  I‰ÆH‰ßèg!  L‰÷èÛ   f.„     UH‰åSPH‰ûH5Ã/  èÇ   H‹@  HƒÀH‰HƒÄ[]ÃfD  UH‰åAWAVSHƒìI‰ÿH‹H‰}ØHuàè«!  …ÀuMI‹wH…öt(I‹_HUÐH‰ßèj!  …ÀuwH‹uÐH‰ßè!  …À…”   H‹}ØH‹uàèë   …Àu:HƒÄ[A^A_]Ã¿8   è   H‰ÃH‹uØH‰ÇèôÿÿH‹5.?  H‹÷>  H‰ßè‰   H=?/  H5R/  èÌêÿÿé¯   ¿8   èI   I‰ÆI‹wH‰ÇèÎóÿÿH‹5ç>  H‹°>  L‰÷èB   ë~¿8   è   I‰ÆI‹wH‰ÇèóÿÿH‹5¶>  H‹>  L‰÷è   ëMëë I‰ÇL‰÷èú  ëI‰ÇH‰ßèí  ëI‰ÇH‹}ØH‹uàè   …ÀuL‰ÿèK  H=‹.  H5ž.  èêÿÿH‰Çè.êÿÿH‰Çè&êÿÿfD  UH‰å]Ãf.„     UH‰å]é`  fD  UH‰å¿   èX  HSA  H‰]ÃfD  UH‰åH=A  H‰]ÃUH‰å]Ãf.„     UH‰å]é  fD  UH‰åAWAVSHƒì(I‰ÖH‹>  H‹ H‰EàH‹HuÀH‰ßèC  …À…‡   H‹EÀH‰]ÀH‰EÈH5á-  Hß-  L}ÀL‰ÿèÅ   H5Ñ-  HÏ-  L‰ÿè  HuÐH‰ßè5  …ÀuUH‹EÐH‰EÐH‹EÈH‰EØHUàHuÐL‰÷è?  H‹€=  H‹ H;EàuSHƒÄ([A^A_]Ã¿8   èV  I‰ÆH‰ÇH‰ÞèÜñÿÿë¿8   è<  I‰ÆH‰ÇH‰ÞèÂñÿÿH‹5Û<  H‹¤<  L‰÷è6  è7  ë H‰ÃL‰÷è  H‰ßè’  fUH‰åAWAVAUATSPH‰ÓI‰÷I‰þL‹/L‹gH‰×è´  HMÐL‰ïH‰ÞH‰Âè$  …Àu'H‹MÐL‰ïL‰æL‰úèt  …Àu?°HƒÄ[A\A]A^A_]Ã¿8   è  I‰ÆH‰ÇL‰îèñÿÿH‹5.<  H‹÷;  L‰÷è‰  ¿8   èa  H‰ÃI‹6H‰ÇèçðÿÿH‹5 <  H‹É;  H‰ßè[  I‰ÇH‰ßëI‰ÇL‰÷èB  L‰ÿè¶  fD  UH‰åAWAVAUATSPH‰ÓI‰÷I‰þL‹/L‹gH‰×èÔ  HMÐL‰ïH‰ÞH‰ÂèD  …Àu'H‹MÐL‰ïL‰æL‰úè”  …Àu?°HƒÄ[A\A]A^A_]Ã¿8   è¯  I‰ÆH‰ÇL‰îè5ðÿÿH‹5N;  H‹;  L‰÷è©  ¿8   è  H‰ÃI‹6H‰ÇèðÿÿH‹5 ;  H‹é:  H‰ßè{  I‰ÇH‰ßëI‰ÇL‰÷èb  L‰ÿèÖ  fD  UH‰åAWAVAUATSHƒìH‰ûI‰ÖI)öM‰õIÁýL‹'H‹GH‰ÁL)áHÁùI9Í†®   H‰uÐM…ätL‰cL‰çèÚ  WÀHÇC    1ÀM…öˆ  I‰ÜH‰ÁHÁùHÁøL9èIBÅHºÿÿÿÿÿÿÿH9ÑH»ÿÿÿÿÿÿÿHBØH‰ØHÁè=…Ì   H<Ý    èƒ  I‰ÇL‰áI‰D$I‰$HØI‰D$M…ö~L‰ÿH‹uÐL‰òè‡  M÷M‰|$ërH‰]ÐL‹{M)çJ>IÁÿM9ýHFÂI‰ÆI)ötL‰çH‰UÈL‰òH‰ÃèO  H‰ØH‹UÈM9ýv'L‹uÐI‹^H)ÂH…Ò~H‰ßH‰ÆI‰×è  LûI‰^ëMôH‹EÐL‰`HƒÄ[A\A]A^A_]ÃH‰ßè   L‰çè   fD  UH‰åèM  €    UH‰åH‹9  HƒÀH‰]éX  „     UH‰åSPH‰ûH‹h9  HƒÀH‰è4  H‰ßHƒÄ[]éP  fD  UH‰åAVSH‹_H…Ût.L³°   L‰÷è  Æƒ  HƒÃ0H‰ßè  L‰÷[A^]éî  [A^]ÃH‰ÃL‰÷èÞ  H‰ßèšäÿÿH‰Çè’äÿÿfUH‰å]éà  fD  UH‰åAWAVAUATSHƒì8I‰ÔH‰óI‰ÿHÇ    Hƒ~ t7H‰ßèð  „Àu+H‹sH…ö„y  H‹;HUÀèw  …À…ç  ƒ}À…[  I‹t$H…ö„ü   I‹<$HUÀèJ  …À…	  ƒ}À…Ý   ¿  èP  I‰ÆL‹+H‹sH…öt'HM¨L‰ïº   è  …À…  H‹E¨L‰mÀH‰EÈëL‰mÀHÇEÈ    ÆEÐ I‹$I‹t$H…ötHM H‰ßº   èK  …À…	  H‹E ë1ÀH‰]¨H‰E°ÆE¸ HuÀHU¨L‰÷èI  M‰7H‹u°H…öt€}¸ u	H‹}¨è  H‹uÈH…öt€}Ð u	H‹}Àèþ  HƒÄ8[A\A]A^A_]Ã¿8   èy  H‰ÃI‹4$HÝ'  H‰ÇèW  ë¿8   èW  H‰ÃI‹4$H‰ÇèÜëÿÿH‹5õ6  H‹¾6  H‰ßèP  ¿8   è(  I‰ÆI‹4$H\'  H‰Çè  ëx¿8   è  H‰ÃH‰ÇL‰îèŒëÿÿH‹5¥6  H‹n6  H‰ßè   ë.¿8   èÖ  I‰ÄH‰ÇH‰Þè\ëÿÿH‹5u6  H‹>6  L‰çèÐ  ¿8   è¦  I‰ÆH‹3H‰Çè,ëÿÿH‹5E6  H‹6  L‰÷è   ëI‰ÇL‰çè  ëWI‰ÇH‰ßè€  ëbI‰ÇL‰÷ès  L‰ÿèç  H‰ÇèßáÿÿH‰Çè×áÿÿë]I‰Çë I‰Çë3I‰ÇH‹u°H…öt€}¸ u	H‹}¨èˆ  H‹uÈH…öt€}Ð u	H‹}Àèp  L‰÷èê  L‰ÿèˆ  H‰Çè€áÿÿH‰ÇèxáÿÿI‰ÇH‰ßèñ  L‰ÿèe  D  UH‰åAVSHƒìH‹wH…öt=H‰ûH‹?HUìè  …Àu5°ƒ}ìt$H‹sH…ötH‹;HUèè`  …Àu.ƒ}è”Àë1ÀHƒÄ[A^]Ã¿8   èf  I‰ÆH‹3H‰Çèìéÿÿë¿8   èL  I‰ÆH‹3H‰ÇèÒéÿÿH‹5ë4  H‹´4  L‰÷èF  ë H‰ÃL‰÷è3  H‰ßè§  €    UH‰åAWAVATSHƒìH‰ÓI‰öI‰üH‰×èÊ  HMÐL‰÷H‰ÞH‰Âè:  …À…†   H‹UÐHMØL‰÷1öè  …À…†   H‹uØM‰t$IÇD$    AÆD$ H‹u4  HƒÀI‰$WÀAD$ IÇD$0    H…ötM|$I\$ L‰÷º   L‰ùèº  …ÀuXL‰àHƒÄ[A\A^A_]Ã¿8   èB  H‰ÃH‰ÇL‰öèÈèÿÿë¿8   è(  H‰ÃH‰ÇL‰öè®èÿÿH‹5Ç3  H‹3  H‰ßè"  H=#  H5#  èeßÿÿë I‰ÆH‰ßèú  ë$I‰Æöt
I‹|$0è¼  L‰çè¢  I‹t$H…öuL‰÷èH  A€|$ u
I‹|$è  IÇ    L‰÷è'  H‰Çèßÿÿf.„     D  UH‰åAWAVAUATSHƒìH‰ûH‹H‰H‹FH‰GŠFˆGWÀÆF H‹H‰GH‹BH‰G ŠBˆG(ÆB HÇ‡°   §«ª2‡¸   ‡È   ‡Ø   ‡è   ‡ø   Æ‡   Hƒ uxL‹{HuÈL‰ÿè6  …À…‹   H‹uÈH…öt(HMÈL‰ÿº   è  …À…™   L‹eÈH‹sH…öuë$E1äH‹sH…ötH‹;è  …À…ž   HÇC    L‰;L‰cÆC èk  Hs0H‹æ1  H‰ÇèF  H‰[0HƒÄ[A\A]A^A_]Ã¿8   èE  I‰ÄH‰ÇL‰þèËæÿÿH‹5ä1  H‹­1  L‰çè?  ë^¿8   è  I‰ÄH‰ÇL‰þè›æÿÿH‹5´1  H‹}1  L‰çè  ë.¿8   èå  I‰ÅH‹3H‰ÇèkæÿÿH‹5„1  H‹M1  L‰ïèß  H‰EÐL‰ïèË  ëë H‰EÐL‰çè»  ë$H‰EÐM…ätL‰ÿL‰æèù  ëH‰ÇèÝÿÿë H‰EÐL»°   L‹£ð   M…ä„   L‹³ø   L‰çM9æuëdf„     H‹ÿP M9ætIM‰õI‹~ðIFÐH9øtH…ÿtH‹ÿP(ë„     H‹ÿP Mu I‹}ÀIƒÅ I9ýt¹H…ÿtºH‹ÿP(ë²H‹»ð   L‰£ø   èÓ  L‰ÿè³  H‹s H…öt€{( u	H‹{è1  HÇC     H‹sH…öt€{ uH‹;è  HÇC    H‹}Ðè)  H‰Çè!ÜÿÿH‰ÇèÜÿÿf„     UH‰åSPH‹?èr   HƒÄ[]ÃH‰ÓH‰Çèh  ƒûuH‹H‰ÇÿQH=Õ   H‰Æè³ÛÿÿëH=Ä   H5¾   èžÛÿÿH‰Ãè2  ëH‰Ãè(  H‰ßè¢  H‰ÇèšÛÿÿf.„     UH‰åAWAVAUATSHìè   I‰ýL‹gHÇ°   H‰}ˆè›  M‹½ð   M‹µø   M9÷„B  IEH‰…(ÿÿÿI…ð   H‰…0ÿÿÿH‹v/  HƒÃë4„     H‹}èq  L‰ûH‹}ˆèA  M‹½ð   M‹µø   M9÷„è  H‹…0ÿÿÿWÀ HÇ@    H‹}ˆè  L‰}fL‰¥xÿÿÿL‰çHu€èé  …À…á  WÀ)…PÿÿÿHÇ…`ÿÿÿ    Iƒ  t"L‰e˜I‹ H…ÿ„  H‹Hu˜H•PÿÿÿÿP0L‰¥@ÿÿÿHÇ…Hÿÿÿ    L‰e HÇE¨    ÆE° H‰]˜HE¸WÀ HÇ@    I‹uH…öt&I‹} H• ÿÿÿè.  …À…ß   H‹µ ÿÿÿëD  1öH‹½(ÿÿÿH•Pÿÿÿ1Éè™  H‰…@ÿÿÿH‰•HÿÿÿI‹PH…ÿt"H‹Hµ@ÿÿÿHU˜ÿP0ëf.„     D  Hƒ}¨ …:  H‰]˜öE¸t	H‹}Èèü  H}˜èá  H‹u¨H…öt€}° u	H‹} èY  H‹½PÿÿÿH…ÿtH‰½XÿÿÿèÃ  H‹½xÿÿÿH‹u€è  …À…´  IƒÇ`M9÷…tþÿÿéÏ   ¿8   è¡  I‹u H‰…pÿÿÿH‰Çè"âÿÿH‹½pÿÿÿH‹54-  H‹ý,  è’  é`  H‰•8ÿÿÿH‰EÐH‹½pÿÿÿèp  H‹•8ÿÿÿëH‰EÐƒú…è  H‹}ÐèE  H‹u¨H…öt!H‰EÐH‹} è  …À…Ê  HÇE¨    H‹EÐH‰ÂHƒÂH‹HH‰M H‹HH‰M¨¶HˆM°WÀÆB èô  é†þÿÿHƒ} „QýÿÿI‰ßëH‹ÿP L;u„0ýÿÿL‰óI‹~ðIFÐH9øtH…ÿtH‹ÿP(ë	 H‹ÿP Ls H‹{ÀHƒÃ H9ût¹H…ÿtºH‹ÿP(ë²H‹}ˆè?  A€½   tIƒÅ0H‹5V,  L‰ïèB  HÄè   [A\A]A^A_]Ã¿8   è6  H‰ÃH‹µxÿÿÿH‰Çè¸àÿÿH‹5Ñ+  H‹š+  H‰ßè,  éú  H=Ý  H5ð  èj×ÿÿéâ  èÀ  éØ  ¿   èÝ  I‰Ç¶E¸¨tH‹EÀëHÑèH…À…Ö   Hƒ}  „Ë   H5  H} èIÞÿÿH‰…ÿÿÿH‰•ÿÿÿH½øþÿÿHµÿÿÿè8âÿÿöE¸t	H‹}Èèc  H‹…ÿÿÿHM¸H‰A…øþÿÿëpL‹eÐéÏ   ¿8   èG  I‰ÇH‹u H‰ÇèÌßÿÿH‹5å*  H‹®*  L‰ÿè@  é  ëI‰ÄL‰ÿè(  ëé„   I‰Äè  ë}H‰Çè‹ÖÿÿH‰Çèû  èü  L‰ÿHu¸èŠ  H‹5£*  H‹l*  L‰ÿèæ  é´   H‰ÇèOÖÿÿë4I‰ÄL‰ÿèÆ  ë*é²   I‰ÄH‰ßè´  é¥   H‰Çè#ÖÿÿI‰Äë<I‰Äë7I‰ÄH‰]˜öE¸t	H‹}Èè]  H}˜èB  H‹u¨H…öt€}° u	H‹} èº  H‹½PÿÿÿH…ÿtH‰½Xÿÿÿè$  H‹½xÿÿÿH‹u€èh  …Àt0H=ö  H5	  èƒÕÿÿH‰Çè™ÕÿÿH‰Çè‘ÕÿÿH‰Çè‰ÕÿÿI‰ÄH‹}H…ÿtL‰öè
  L‰çèm
  H‰ÇèeÕÿÿD  UH‰åAWAVAUATSHƒì(I‰ÎH‰ÓI‰÷I‰üH‹?H‰}ÀHuÈèY  …À…í   I‹t$H…ötI‹<$HUÐè  …À…H  M‹,$H‹MÐëM‹,$1ÉL‹L‹CM)ÈIÁøHEÐH‰$L‰ïL‰öL‰úèø
  …À…Á   H‹]ÐH‹}ÀHuÐèÙ
  …Àu+€}Ð t%I‹t$H…öteI‹<$HUÐè¦
  …À…:  M‹4$ë H‹}ÀH‹uÈHMÐH‰ÚèZ
  …À…ä   L‹uÀH‹]ÐH‹}ÀH‹uÈè
  …ÀuL‰ðH‰ÚHƒÄ([A\A]A^A_]ÃM‹4$1ÛëÒ¿8   è 	  I‰ÆH‹uÀH‰Çè%ÝÿÿH‹5>(  H‹(  L‰÷è™	  ¿8   èq	  I‰ÆH‰ÇL‰îè÷ÜÿÿH‹5(  H‹Ù'  L‰÷èk	  é  H=o  H5”  è©Óÿÿéö   ¿8   è&	  I‰ÆI‹4$H‰Çè«ÜÿÿH‹5Ä'  H‹'  L‰÷è	  éÂ   ¿8   èò  I‰ÆH‹uÀH‰ÇèwÜÿÿH‹5'  H‹Y'  L‰÷èë  éŽ   ¿8   è¾  I‰ÆI‹4$H‰ÇèCÜÿÿH‹5\'  H‹%'  L‰÷è·  ë]ëëëë&H‰ÃL‰÷èœ  ëH‰ÃL‰÷è  ë ë
ëH‰ÇèýÒÿÿH‰ÃH‹}ÀH‹uÈè•  …ÀuH‰ßèá  H=t  H5™  è®ÒÿÿH‰ÇèÄÒÿÿ@ UH‰å¿   è  H‹û&  HƒÁH‰H‹5Å&  H‹®&  H‰Çè  f.„     @ UH‰å]é¾  fD  UH‰åSPH‰ûèª  H‰ßHƒÄ[]é®  @ UH‰åSPH‹H…ÛtH‰ßè   H‰ßHƒÄ[]é†  HƒÄ[]ÃD  UH‰åAWAVATSI‰þL‹¿ð   M…ÿt}M‹¦ø   L‰ÿM9üuë`D  H‹ÿP M9ütIL‰ãI‹|$ðID$ÐH9øtH…ÿtH‹ÿP(ëfD  H‹ÿP Lc H‹{ÀHƒÃ H9ût¹H…ÿtºH‹ÿP(ë²I‹¾ð   M‰¾ø   èã  I¾°   è¿  I‹v H…ötA€~( u	I‹~è<  IÇF     I‹vH…ötA€~ uI‹>è  IÇF    [A\A^A_]ÃH‰Çè+ÑÿÿH‰Çè#Ñÿÿ UH‰å]Ãf.„     UH‰å]é`  fD  UH‰å¿   èX  H)  H‰]ÃfD  UH‰åHý(  H‰]ÃUH‰å]Ãf.„     UH‰å]é  fD  UH‰åAVSHƒì0I‰ÖH‹%  H‹ H‰EèH‹HuÈH‰ßèE  …ÀuyH‹EÈH‰]ÈH‰EÐH5˜  HMØº    H‰ßè)  …ÀukH‹EØH‰]ØH‰EàH5  H}ÈHUØè™   H‹EÐH‰EØHUàHuØL‰÷èQéÿÿH‹’$  H‹ H;EèuQHƒÄ0[A^]Ã¿8   èj  I‰ÆH‰ÇH‰ÞèðØÿÿë¿8   èP  I‰ÆH‰ÇH‰ÞèÖØÿÿH‹5ï#  H‹¸#  L‰÷èJ  èK  ë H‰ÃL‰÷è2  H‰ßè¦  fD  UH‰åAWAVAUATSHƒìI‰öI‰ÿH‹L‹gLmÀL‰ïH‰Öè“ÚÿÿH‰ßL‰îè˜   I‰ÕöEÀt	H‹}Ðè°  H‰ßL‰æL‰òL‰éèw  …Àu°HƒÄ[A\A]A^A_]Ã¿8   è’  H‰ÃI‹7H‰ÇèØÿÿH‹51#  H‹ú"  H‰ßèŒ  I‰ÆH‰ßè{  L‰÷èï  I‰ÆöEÀt	H‹}Ðè7  L‰÷èÕ  D  UH‰åAVSHƒìH‰û¶öÂt
H‹VH‹vëHƒÆHÑêHMèH‰ßèi  …ÀuH‹UèH‰ØHƒÄ[A^]Ã¿8   èë  I‰ÆH‰ÇH‰Þèq×ÿÿH‹5Š"  H‹S"  L‰÷èå  H‰ÃL‰÷èÔ  H‰ßèH  „     UH‰åHƒìH‰}ðH‰uøH}ðHuøè3   HƒÄ]Ãf.„      UH‰åH…öt	H‰÷]éX  ]Ãf.„     fUH‰åAVSHƒìpH‹H‹H}€H‰Æèƒ   H‹EèH‹HH‰MèH}€ÿH‹}àH…ÿtè  1ÀHƒÄp[A^]ÃH‰ÓI‰ÆH‹}àH…ÿtèè  ëH‰ÓI‰ÆƒûuL‰÷è÷  H‰Çè×áÿÿèð  ë½I‰Æèæ  L‰÷è`  H‰ÇèXÍÿÿ„     UH‰åAWAVATSI‰ÖI‰÷H‰ûHÇ   H‰wH‰WLGHÇG    LOhLg WÀG`HÇG    HO0H‰O(H‰÷H‰ÖL‰âèä  …ÀuMH‹C H;v;¹   H÷áHÇÇÿÿÿÿHAøè/  H‰C`H‰C(L‰ÿL‰öL‰âH‰ÁE1ÀE1Éè   …Àu$[A\A^A_]Ã¿8   è  I‰ÆH‹sH‰ÇèŠÕÿÿë¿8   èê  I‰ÆH‹sH‰ÇèoÕÿÿH‹5ˆ   H‹Q   L‰÷èã  ë H‰ÃL‰÷èÐ  H‰ßèD  @ UH‰åH‹=E   H5ž'  H ÿÿ]é“  H…ÿtUH‰åH‹ÿP(]Ãf.„     D  UH‰åH‰øH‹ H9øtH…ÿtH‹ÿP(ëH‹ÿP ]Ãf.„     H…ÿtUH‰åH‹ÿP(]Ãf.„     D  H…ÿtUH‰åH‹ÿP(]Ãf.„     D  H…ÿtUH‰åH‹ÿP(]Ãf.„     D  UH‰åAWAVSPI‰÷I‰þL‰ûI‹ðIGÐH9øtH…ÿtH‹ÿP(ëH‹ÿP L{ H‹{ÀHƒÃ H9ûtH…ÿtH‹ÿP(ëH‹ÿP M9÷u´L‰÷èf   HƒÄ[A^A_]Ã ÿ%Š  ÿ%Œ  ÿ%Ž  ÿ%  ÿ%’  ÿ%”  ÿ%–  ÿ%˜  ÿ%š  ÿ%œ  ÿ%ž  ÿ%   ÿ%¢  ÿ%¤  ÿ%¦  ÿ%¨  ÿ%ª  ÿ%¬  ÿ%®  ÿ%°  ÿ%²  ÿ%´  ÿ%¶  ÿ%¸  ÿ%º  ÿ%¼  ÿ%¾  ÿ%À  ÿ%Â  ÿ%Ä  ÿ%Æ  ÿ%È  ÿ%Ê  ÿ%Ì  ÿ%Î  ÿ%Ð  ÿ%Ò  ÿ%Ô  ÿ%Ö  ÿ%Ø  ÿ%Ú  ÿ%Ü  ÿ%Þ  ÿ%à  ÿ%â  ÿ%ä  ÿ%æ  ÿ%è  ÿ%ê  ÿ%ì  ÿ%î  ÿ%ð  ÿ%ò  ÿ%ô  ÿ%ö  ÿ%ø  ÿ%ú  ÿ%ü  ÿ%þ  ÿ%    hm  é6  hˆ  é,  h²  é"  hÒ  é  hì  é  h	  é  h$  éú   hB  éð   hb  éæ   h  éÜ   hŸ  éÒ   hº  éÈ   hÓ  é¾   hý  é´   h  éª   h7  é    hW  é–   hm  éŒ   hŽ  é‚   h©  éx   hÌ  én   hî  éd   h	  éZ   h2  éP   hQ  éF   hq  é<   h‹  é2   hž  é(   hÁ  é   h×  é   hí  é
   hþ  é    L1  ASÿ%Ñ  h   éæÿÿÿh^   éÜÿÿÿh   éÒÿÿÿh¢   éÈÿÿÿh  é¾ÿÿÿhV  é´ÿÿÿh¨  éªÿÿÿhá  é ÿÿÿh  é–ÿÿÿh+  éŒÿÿÿhL  é‚ÿÿÿhh  éxÿÿÿh„  énÿÿÿhœ  édÿÿÿhÒ  éZÿÿÿhì  éPÿÿÿh  éFÿÿÿh!  é<ÿÿÿh    é2ÿÿÿh½  é(ÿÿÿh5  éÿÿÿhN  éÿÿÿh]  é
ÿÿÿh²  é ÿÿÿÿ›<!•]@  ¤       ÿÿ3u ;a  ÿÿ X  XÍ n˜    ÿÿ% }  }ö ½  ÊÏ ÒI  ›¼ ¦k     ÿÿ }  }Ô ˆ#  «Ì ¶1     ÿÿ   ¾ ¨)  ÿ›)	  +A 3  DQI           ´  ÿ›AU      ÿ›AT      ÿ›qi 5  5G³ «˜(  Àž È#  ë‘ ö³ Œ  ¢ ª³ Å«Ø  í õ³ ‹3  ¾äÃ  Ïä     ÿ›1& ©  ©È ¹g   È ³F  ùþ          ÿÿ* >  >E“ ƒ"  ¥€ ­&  Óó Û“ ñ;    ÿÿ* f  fÌ i,  •Ì ˜Ñ ®g  •¿ ¤‚    ÿ›]U K  KÛ
 ~Æ
 Öâ
 À¾
¶
œ®
à¦
ÅÈ•À˜°  È	Ý
 Ð	H  ˜
â
 ¤
¬       ÿÿ   2 )  ÿ›e[ 2  2¹ ^òc   ƒ¬ ‹  ¡ò´  ÊŸ Ò¹ è  û ƒ› ™+  ÄêÉ  Õê       ÿÿ É  É‹ Ô  ã‰ î0   ÿÿ p  pÇ {&  ¡¿ ©1  ÿÿ p  pÇ {&  ¡¿ ©1  ÿ›V*C      ÿ›‡ ¥  ¥° ê« —µ ½¡Õ™Ú   úˆ ‰  œ© ¤'  Ë† Ú  éù ô° Š  ™ì ¤« º  Ìê Ôw  Ëøã€è3       ÿÿ l  l¦ t  †¤ Ž+  ÿ›E< œ  œ¬ ¬!  ÍŸ Ø  ç ò  ˆ¬ ›J  åùê        ÿ›qgŽ.ù âÛ ‚û š   ºÍ Åù Û  êË õù ‹  ½ ¥Û »)  äñïÃ  ²ïÑçÖ!         ÿ›)	   .^ ?T Wnf   }   Ô      ÿ›Ð½ Ç  Ç‡ ‹í
 Þ9­±÷
 Šå
²ÿ·(  ßî­ˆL  Ôó	 •î	 š¶  ÐÕ
 ØÐ
 ó÷‹ò
 7  Ç1…
øD  ¼	á	 Ä	ß	 Ú	  ö	ý	û	  
¹
’
Ã
 ž
Á
 ´
u  ©ïÑ£í>    }       Ü  ÿ›˜Œ C  CEã ˜	Ù ¹	» Ø× üÛ2  ³Ê »#  Þ½ éã „Û—  ­¹ µã Ë  á· é× ÿ  •µ » ³;  î”ó  ÿ”        ÿ› ·  ·õ×í     ÿÿ µ  µ÷ À  Ïõ Ú0   ÿÿ -  -± 8H  €ž ˆC  ÿÿ T  Tu _)  ÿ›5 ^)H/B  q€ y
  ƒˆ    }            ÿÿ ¾  ¾ù Æ  Ù÷ á+                               N4Napi5ErrorE N4Napi15ObjectReferenceE N4Napi9ReferenceINS_6ObjectEEE St9exception St13runtime_error St12length_error St11logic_error NSt3__117bad_function_callE EventDelegate CWEventDelegate clientConnectionInterrupted clientConnectionInvalidated powerStateDidChangeForWiFiInterfaceWithName: ssidDidChangeForWiFiInterfaceWithName: bssidDidChangeForWiFiInterfaceWithName: countryCodeDidChangeForWiFiInterfaceWithName: linkDidChangeForWiFiInterfaceWithName: linkQualityDidChangeForWiFiInterfaceWithName:rssi:transmitRate: modeDidChangeForWiFiInterfaceWithName: scanCacheUpdatedForWiFiInterfaceWithName: sharedWiFiClient alloc init setDelegate: startMonitoringEventWithType:error: v16@0:8 v24@0:8@16 v40@0:8@16q24d32 v24@0:8@"NSString"16 v40@0:8@"NSString"16q24d32 addEventListener message Error::New napi_get_last_error_info napi_is_exception_pending napi_get_and_clear_last_exception Error in native callback napi_create_string_utf8 napi_create_error Error::Error napi_create_reference EscapableHandleScope::~EscapableHandleScope napi_close_escapable_handle_scope Callback called after move allocator<T>::allocate(size_t n) 'n' exceeds maximum supported size HandleScope::~HandleScope napi_close_handle_scope type wlan code ssidDidChangeForWiFiInterfaceWithName Callback receiver must be an object or function Callback must be a function  ERROR: Unknown exception during async callback wlan rigister notification error           8      <         ! QÑXQaQQ  Q€  P+  \  T    a      \  P+  Èd  p,  äd  -  ðd   .  e  @0  0e  01  Pe  2  de  p2  e  Ð2   e  03  °e   5  $f  @7  Xf  p8  ˆf   :  ¸f   @  g  €@  (g  pB  g  C  °g  pD  Ìg  0G  èg   G  üg  ÀJ  h  €K  ¬h  M  ôh  P  hi  P  ”i  ÀV  hj   Z  k  p[   k  €\  @k  P]  \k  0^  lk  Ð^  ¤k      1 Ð     °   Ð  	à    À Ð ð à À   € à Ð	 ð   Ð    °   0 °    @     €  ° à @  P p 0  À! À$ @% p+ .  `. °. °/   0 01  2 2  à2 €3 4  `5 aÑX             zR x  $      8¸ÿÿÿÿÿÿ        A†C          D   0¸ÿÿÿÿÿÿ        A    $   d    ¸ÿÿÿÿÿÿ?        A†CBƒ    $   Œ   ¸Ëÿÿÿÿÿÿ	        A†C       $   ´   ðËÿÿÿÿÿÿ*        A†CBƒ    $   Ü   xÍÿÿÿÿÿÿ        A†C       $     `Íÿÿÿÿÿÿ
        A†C       $   ,  HÍÿÿÿÿÿÿ        A†C       $   T  @Íÿÿÿÿÿÿ        A†C       $   |  (Íÿÿÿÿÿÿ        A†C       $   ¤  Íÿÿÿÿÿÿ
        A†C       ,   Ì  ØÏÿÿÿÿÿÿz       A†CMƒŒŽ    $   ü  (Ñÿÿÿÿÿÿ	        A†C       $   $  Ñÿÿÿÿÿÿ        A†C       $   L  Ñÿÿÿÿÿÿ*        A†CBƒ    $   t  pÑÿÿÿÿÿÿ
        A†C       $   œ  ãÿÿÿÿÿÿ2        A†C       $   Ä  0ãÿÿÿÿÿÿ
        A†C       $   ì  ãÿÿÿÿÿÿ        A†CBƒ    $     ãÿÿÿÿÿÿ+        A†CBƒ    $   <  äÿÿÿÿÿÿ        A†C       $   d   äÿÿÿÿÿÿ
        A†C       $   Œ  èãÿÿÿÿÿÿ        A†C       $   ´  àãÿÿÿÿÿÿ        A†C       $   Ü  Èãÿÿÿÿÿÿ        A†C       $     °ãÿÿÿÿÿÿ
        A†C       $   ,  æÿÿÿÿÿÿ#        A†C       $   T  æÿÿÿÿÿÿ        A†C       $   |  ¸çÿÿÿÿÿÿ        A†C       $   ¤  °çÿÿÿÿÿÿ        F†C       $   Ì  ¨çÿÿÿÿÿÿ%        A†C       $   ô  °çÿÿÿÿÿÿ        F†C       $     ¨çÿÿÿÿÿÿ        F†C       $   D   çÿÿÿÿÿÿ        F†C       $   l  ˜çÿÿÿÿÿÿo        A†CFƒŽ       zPLR x›E    ,   $   ð±ÿÿÿÿÿÿ¬       WëÿÿÿÿÿÿA†CGƒŽ  ,   T   à²ÿÿÿÿÿÿœ       CëÿÿÿÿÿÿA†CGƒŽ  ,   „   P³ÿÿÿÿÿÿ      ëÿÿÿÿÿÿA†CIƒŽ,   ´   0´ÿÿÿÿÿÿ      ëÿÿÿÿÿÿA†CIƒŽ4   ä    ¶ÿÿÿÿÿÿç       ÿêÿÿÿÿÿÿA†CKƒŒŽ      4     Ø¶ÿÿÿÿÿÿÑ       çêÿÿÿÿÿÿA†CJƒŒŽ    ,   T  €·ÿÿÿÿÿÿY       ÃêÿÿÿÿÿÿA†CBƒ    ,   „  °·ÿÿÿÿÿÿ]       ¿êÿÿÿÿÿÿA†CBƒ    ,   ´  à·ÿÿÿÿÿÿ\       ŸêÿÿÿÿÿÿA†CBƒ    ,   ä  ¸ÿÿÿÿÿÿì      êÿÿÿÿÿÿA†CGƒŽ  4     Ð¹ÿÿÿÿÿÿ      ÃêÿÿÿÿÿÿA†CKƒŒŽ      ,   L  ¸»ÿÿÿÿÿÿ,      ¿êÿÿÿÿÿÿA†CFƒŽ,   |  ¸¼ÿÿÿÿÿÿ¦      ¿êÿÿÿÿÿÿA†CIƒŽ4   ¬  8¾ÿÿÿÿÿÿÐ      ¿êÿÿÿÿÿÿA†CPƒŒŽ    ,   ä  àÃÿÿÿÿÿÿE       çêÿÿÿÿÿÿA†CCƒŽ  ,     0Äÿÿÿÿÿÿz      ÇêÿÿÿÿÿÿA†CIƒŽ,   D  ðÅÿÿÿÿÿÿ      ÿêÿÿÿÿÿÿA†CIƒŽ4   t  àÆÿÿÿÿÿÿÚ       ïêÿÿÿÿÿÿA†CJƒŒŽ    4   ¬  ˆÇÿÿÿÿÿÿÚ       ÓêÿÿÿÿÿÿA†CJƒŒŽ    ,   ä  Êÿÿÿÿÿÿ^       ·êÿÿÿÿÿÿA†CCƒŽ  4     PÊÿÿÿÿÿÿ      ›êÿÿÿÿÿÿA†CMƒŒŽ    ,   L  8Íÿÿÿÿÿÿ¹       ÷êÿÿÿÿÿÿA†CGƒŽ  4   |  ÈÍÿÿÿÿÿÿ      ãêÿÿÿÿÿÿA†CKƒŒŽ      4   ´   Ïÿÿÿÿÿÿ÷      óêÿÿÿÿÿÿA†CMƒŒŽ    ,   ì  èÑÿÿÿÿÿÿv       /ëÿÿÿÿÿÿA†CBƒ    4     8Òÿÿÿÿÿÿ+      +ëÿÿÿÿÿÿA†CPƒŒŽ    4   T  0Øÿÿÿÿÿÿœ      ÇëÿÿÿÿÿÿA†CMƒŒŽ    4   Œ  8Ûÿÿÿÿÿÿý       +ìÿÿÿÿÿÿA†CGƒŒŽ      ,   Ä  pÜÿÿÿÿÿÿ
      ìÿÿÿÿÿÿA†CGƒŽ  4   ô  PÝÿÿÿÿÿÿË       ÿëÿÿÿÿÿÿA†CMƒŒŽ    ,   ,  èÝÿÿÿÿÿÿˆ       ãëÿÿÿÿÿÿA†CGƒŽ  ,   \  ˜Þÿÿÿÿÿÿ˜       ÃëÿÿÿÿÿÿA†CGƒŽ  4   Œ  ßÿÿÿÿÿÿ      ËëÿÿÿÿÿÿA†CGƒŒŽ                      P      p2      à]                      0,       Y      ø‚      øƒ      `ƒ      0ƒ      è‚      ˜‚      „      Àƒ              ÐY                                      Œd      Øc      âc      ìc      öc       d      
d      d      d      (d      2d      <d      Fd      Pd                                      Zd      –d      dd      nd      xd      ‚d       d      ªd      ´d      ˆb      ’b      œb      ¦b      °b      ºb      Äb      Îb      Øb      âb      ìb      öb       c      
c      c      c      (c      2c      <c      Fc      Pc      Zc      dc      nc      xc      ‚c      Œc      –c      ¾d       c      ªc      ´c      ¾c      à_                      p2      Ð2      P+             l             îk      À‚             &l             àk             Ð‚            è‚                    3l      è‚             Vl      è‚             El      Hƒ                       B      B       B      @B      PB      `B      pB                      àF       G      0G              G             fl      è‚                       Y      °Y                               [      [       [      @[      P[      `[      p[      ‡      0‡          @      
    l      ‡n              ¼l      ‡n              Øl      n              m      n              ,m      n              Tm      n              ‚m      n              ©m      šn              ém      n              n      n              ‡n      ‡n      «n      «n      «n      «n      «n      Àn      «n      «n             0‡                 (   (               ‚l              à…                                    m      n      p,                            ‚l      @†      à…                              Kn      Qn      Vn      :n      cn              ‡                                      ø…      à†                              `†              l                              ˜„                      `       …                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      !SBZAp ^D`+BSApRA€pRARARBWBSApRBRCYBRARARARARARARARARARAZAp pp SCSCUAp RCpppQ>@_OBJC_CLASS_$_NSObject Qq@_OBJC_METACLASS_$_NSObject €Èÿÿÿÿÿÿÿÿ@__objc_empty_cache ´@__objc_empty_vtable €Øÿÿÿÿÿÿÿÿ´@_objc_msgSend €øòÿÿÿÿÿÿÿA_OBJC_CLASS_$_CWWiFiClient €¨@__ZNKSt3__119__shared_weak_count13__get_deleterERKSt9type_info €úÿÿÿÿÿÿÿ@__ZNKSt9exception4whatEv €@@__ZNSt12length_errorD1Ev €è÷ÿÿÿÿÿÿÿ@__ZNSt13runtime_errorD1Ev @__ZTVN10__cxxabiv117__class_type_infoE €`´@__ZTVN10__cxxabiv120__si_class_type_infoE €àÿÿÿÿÿÿÿÿ»À @__ZTVN10__cxxabiv121__vmi_class_type_infoE €øýÿÿÿÿÿÿÿ@__ZTVSt12length_error €€ûÿÿÿÿÿÿÿ` @__ZdaPv €˜ øÿÿÿÿÿÿÿÿ@__ZdlPv  øÿÿÿÿÿÿÿÿ@__Znam  øÿÿÿÿÿÿÿÿ@__Znwm  øÿÿÿÿÿÿÿÿ@___gxx_personality_v0 €Ðþÿÿÿÿÿÿÿ@___stack_chk_guard @dyld_stub_binder €    @__ZN18ThreadSafeCallback4Impl21static_async_callbackEP10uv_async_s Qq@__ZN4Napi7details12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__ €@__ZTIN4Napi15ObjectReferenceE €ð@__ZTIN4Napi5ErrorE €¨úÿÿÿÿÿÿÿ@__ZTIN4Napi9ReferenceINS_6ObjectEEE €˜@__ZTINSt3__117bad_function_callE €àúÿÿÿÿÿÿÿ@__ZTISt11logic_error € @__ZTISt12length_error €Øùÿÿÿÿÿÿÿ@__ZTISt13runtime_error @__ZTISt9exception  ¸³² ¨@__ZTSN4Napi15ObjectReferenceE €Èýÿÿÿÿÿÿÿ@__ZTSN4Napi5ErrorE € @__ZTSN4Napi9ReferenceINS_6ObjectEEE €Àÿÿÿÿÿÿÿÿ@__ZTSNSt3__117bad_function_callE €°@__ZTSSt11logic_error €Èþÿÿÿÿÿÿÿ@__ZTSSt12length_error €@__ZTSSt13runtime_error €Èÿÿÿÿÿÿÿÿ@__ZTSSt9exception €°ÿÿÿÿÿÿÿÿ@__ZZN18ThreadSafeCallback4Impl14async_callbackEvENUlP11uv_handle_sE_8__invokeES2_ €ûÿÿÿÿÿÿÿ@__ZdaPv € øÿÿÿÿÿÿÿÿ@__ZdlPv  øÿÿÿÿÿÿÿÿ@__Znam  øÿÿÿÿÿÿÿÿ@__Znwm  øÿÿÿÿÿÿÿÿ    q°@__Unwind_Resume  q¸@__ZNKSt3__120__vector_base_commonILb1EE20__throw_length_errorEv  qÀ@__ZNSt11logic_errorC2EPKc  qÈ@__ZNSt13runtime_errorC1EPKc  qÐ@__ZNSt13runtime_errorC1ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE  qØ@__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc  qà@__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm  qè@__ZNSt3__119__shared_weak_count14__release_weakEv  qð@__ZNSt3__119__shared_weak_countD2Ev  qø@__ZNSt3__15mutex4lockEv  q€@__ZNSt3__15mutex6unlockEv  qˆ@__ZNSt3__15mutexD1Ev  q@__ZNSt9exceptionD2Ev  q˜@__ZSt9terminatev  qÀ@___cxa_allocate_exception  qÈ@___cxa_atexit  qÐ@___cxa_begin_catch  qØ@___cxa_end_catch  qà@___cxa_free_exception  qè@___cxa_throw  qð@___stack_chk_fail  qø@_memcpy  q€@_memmove  qˆ>@_napi_add_finalizer  q>@_napi_close_escapable_handle_scope  q˜>@_napi_close_handle_scope  q >@_napi_create_error  q¨>@_napi_create_function  q°>@_napi_create_object  q¸>@_napi_create_reference  qÀ>@_napi_create_string_utf8  qÈ>@_napi_create_type_error  qÐ>@_napi_delete_reference  qØ>@_napi_escape_handle  qà>@_napi_fatal_error  qè>@_napi_get_and_clear_last_exception  qð>@_napi_get_cb_info  qø>@_napi_get_last_error_info  q€>@_napi_get_named_property  qˆ>@_napi_get_null  q>@_napi_get_reference_value  q˜>@_napi_get_undefined  q >@_napi_get_value_string_utf8  q¨>@_napi_is_exception_pending  q°>@_napi_make_callback  q¸>@_napi_open_escapable_handle_scope  qÀ>@_napi_open_handle_scope  qÈ>@_napi_set_named_property  qÐ>@_napi_set_property  qØ>@_napi_throw  qà>@_napi_typeof  qè@_strlen  qð>@_uv_async_init  qø>@_uv_async_send  q€>@_uv_close  qˆ>@_uv_default_loop     _ E ˆŽ  CLASS_$_EventDelegate METACLASS_$_EventDelegate ? à  OBJC_ _Z qnapi_register_module_v1    \  11RunCallbackRKN4Napi12CallbackInfoE l4InitN4Napi3EnvENS_6ObjectE N ›T ­ZN18ThreadSafeCallback4Impl14async_callbackEvENUlP11uv_handle_sE_8__invokeES2_ š À`    18ThreadSafeCallback4Impl21static_async_callbackEP10uv_async_s •4Napi7details12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__ Äà» Ð…  15ObjectReferenceE Ê5ErrorE Œ9ReferenceINS_6ObjectEEE ’ø… À…  4Napi ÐSt3__117bad_function_callE ¿ø‡  N ˜St ”È†  1logic_error Ð2length_error ˆ3runtime_error Žà† °†  1 Ö9exception §è…  I ÅS ²î×  15ObjectReferenceE ·5ErrorE ù9ReferenceINS_6ObjectEEE ÿà× ‡Ø  4Napi ½St3__117bad_function_callE ¬æØ  N …St ÖØ  1logic_error ½2length_error õ3runtime_error ûÅØ ³Ø  1 Ã9exception ”¦Ø Ð³  d    ÐV° @  ðà```ð °°ÐP0€  àà€ 0` À€€° @ 0€ Ð0    0         ´
  € P+      Ì
  €  ,      é
  €  ,        € 0,      2    p,      j  € -      Þ  € 01      '  € p2      ;  € Ð2      O  € 03      s  €  5      •  € @7      ³  € p8      J  €  :      é    ð?      ¨     @      Î    P@      é  € €@           B      Å    B      r     B      &    @B      ë    PB      ž    `B      ]    pB        € C      4  € pD      Y  € PE      ,    ÐF      ƒ  € àF      Ñ  €  G        € 0G      }  € G      à  €  G        € ÀJ      7  € €K      \  € M      µ  € P      å  € ÀV      b    `Y      ‹  €  Y      ­  € °Y      Ï  €  Z      ñ     [      ‰    [      !     [      À    @[      p    P[          `[      ¸    p[      V  € €\        € P]      ø    ^      ¦  € 0^      ;  € Ð^      z    à_      ’     `      Ñ     `      L     P`      Ç     p`      ö     `      œ!    °`      Ó!    Èd      å!    äd      ÷!    ðd      	"    e      "    0e      -"    Pe      ?"    de      Q"    e      d"     e      w"    °e      Š"    $f      "    Xf      °"    ˆf      Ã"    ¸f      Ö"    g      é"    (g      ü"    g      #    °g      "#    Ìg      5#    èg      H#    üg      [#    h      n#    ¬h      #    ôh      ”#    hi      §#    ”i      º#    hj      Í#    k      à#     k      ó#    @k      $    \k      $    lk      ,$    ¤k      ?$  € ˜‚      R$    xƒ      þ$  € Àƒ      K%  € „      l%    8„      &  € ˆ„      +&    ˜„      b&    …      ‘&    à…      ¸&    ø…      Ü&    @†      '    `†      $'  € 0‡      F'    ‡         d          b'  d           §'  d           ¯'  f *ú~d       .  P+      (  $  P+      *(  „           ¨(  „           )  „              $   °          N  P+         .   ,      )  $   ,         $              N   ,         .   ,      ž)  $   ,         $             N   ,         .  0,      ¶)  $  0,      ç)  „              $   @          N  0,         .  p,      t*  $  p,      ¬*  „           »*  „              $              N  p,         .  -      J+  $  -      ¾+  „              $            N  -         .   .      è+  $   .      ,  „              $             N   .         .  @0      ˜,  $  @0         $   ð          N  @0         .  01      ·,  $  01         $   à          N  01         .  2       -  $  2         $   `          N  2         .  p2      -  $  p2      --  „              $   `          N  p2         .  Ð2      ‡-  $  Ð2         $   `          N  Ð2         .  03      ›-  $  03         $   ð         N  03         .   5      ¿-  $   5         $             N   5         .  @7      á-  $  @7         $   0         N  @7         .  p8      ÿ-  $  p8         $   °         N  p8         .   :      –.  $   :      5/  „           ¹/  „           A0  „           ¿0  „           E1  „           Ñ1  „              $   Ð         N   :         .  ð?      O2  $  ð?         $             N  ð?         .   @      3  $   @      43  „              $   P          N   @         .  P@      µ3  $  P@         $   0          N  P@         .  €@      Ð3  $  €@         $   €         N  €@         .   B      ÿ3  $   B         $             N   B         .  B      ¬4  $  B         $             N  B         .   B      Y5  $   B         $              N   B         .  @B      6  $  @B         $             N  @B         .  PB      Ò6  $  PB         $             N  PB         .  `B      …7  $  `B         $             N  `B         .  pB      D8  $  pB      ÷8  „              $             N  pB         .  C      9  $  C         $   à          N  C         .  pD      £9  $  pD         $   à          N  pD         .  PE      È9  $  PE      ›:  „           (;  „              $   €         N  PE         .  ÐF      ²;  $  ÐF         $             N  ÐF         .  àF      	<  $  àF         $              N  àF         .   G      W<  $   G         $   0          N   G         .  0G      ¥<  $  0G         $   `          N  0G         .  G      =  $  G         $             N  G         .   G      f=  $   G         $             N   G         .  ÀJ      ¡=  $  ÀJ         $   À          N  ÀJ         .  €K      ½=  $  €K         $            N  €K         .  M      â=  $  M         $             N  M         .  P      ;>  $  P         $   €          N  P         .  P      ~>  $  P      ®>  „              $   0         N  P         .  ÀV      <?  $  ÀV         $             N  ÀV         .  `Y      ¹?  $  `Y         $   @          N  `Y         .   Y      â?  $   Y         $             N   Y         .  °Y      @  $  °Y         $              N  °Y         .  ÐY      &@  $  ÐY         $   0          N  ÐY         .   Z      x@  $   Z         $             N   Z         .   [      š@  $   [         $             N   [         .  [      2A  $  [         $             N  [         .   [      ÊA  $   [         $              N   [         .  @[      iB  $  @[         $             N  @[         .  P[      C  $  P[         $             N  P[         .  `[      ·C  $  `[         $             N  `[         .  p[      aD  $  p[         $            N  p[         .  €\      ÿD  $  €\         $   Ð          N  €\         .  P]      *E  $  P]         $             N  P]         .  à]      ¡E  $  à]         $   0          N  à]         .  ^      	F  $  ^         $              N  ^         .  0^      ·F  $  0^         $              N  0^         .  Ð^      LG  $  Ð^         $            N  Ð^         .  à_      ‹G  $  à_         $             N  à_         .   `      £G  $   `         $              N   `         .   `      âG  $   `         $   0          N   `         .  P`      ]H  $  P`         $              N  P`         .  p`      ØH  $  p`         $              N  p`         .  `      I  $  `         $              N  `         .  °`      ­I  $  °`         $   o          N  °`      äI  &  Èd      öI  &  äd      J  &  ðd      J  &  e      ,J  &  0e      >J  &  Pe      PJ  &  de      bJ  &  e      uJ  &   e      ˆJ  &  °e      ›J  &  $f      ®J  &  Xf      ÁJ  &  ˆf      ÔJ  &  ¸f      çJ  &  g      úJ  &  (g      K  &  g       K  &  °g      3K  &  Ìg      FK  &  èg      YK  &  üg      lK  &  h      K  &  ¬h      ’K  &  ôh      ¥K  &  hi      ¸K  &  ”i      ËK  &  hj      ÞK  &  k      ñK  &   k      L  &  @k      L  &  \k      *L  &  lk      =L  &  ¤k      PL              cL              L              ¥L              ·L              ÎL              äL              ùL              M              -M              QM              oM              M              ”M              «M              ÀM              ÖM  &  xƒ      ‚N              ÏN              ðN              O  &  8„      ¨O              ÐO  &  ˜„      P  &  …      6P  &  à…      ]P  &  ø…      P  &  @†      ©P  &  `†      ÉP              éP              Q              'Q  &  ‡         d               ‡           à†      >      .      f     @0      …   € P      È   € à]      0  € Ð‚      N  € ø‚      a  € À‚      …  € øƒ      ¦  € Hƒ      »  € `ƒ      Ñ  € 0ƒ      è  € è‚      ú  € îk        € àk      +  € l      O  € fl      p  € Vl      …  € El      ›  € 3l      ²  € &l      Ä  € ÐY          2      /   @        J    þ        a    þ        |            Œ            Ë                        $            >            W            s            Î            è            3            ~            °            Ô            ì                                    0            A            h            ’            ½            Ó   €        Û   €        ã   €        ê   €        ñ                                    ,            =            S            `            v            ˆ            ›    þ        ®    þ        Â            Ê            Ó    þ        ç    þ        
    þ        #    þ        6    þ        L    þ        `    þ        w    þ            þ        ¨    þ        ¿    þ        Ó    þ        å    þ        	    þ        	    þ        4	    þ        M	    þ        \	    þ        v	    þ        Š	    þ        ¦	    þ        Á	    þ        Õ	    þ        ÷	    þ        
    þ        (
    þ        ;
    þ        G
    þ        T
    þ        b
            j
    þ        y
    þ        ˆ
    þ        ’
    þ        £
            ò  ô  ö  ø  ù  û  ü  ý  þ  ÿ             	  
                                       !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  6  7  8  9  :     @Û     €Ü  ÷  ú     €   €Þ  à  â  ã  ä     €   €   €  í      5  ;  ò  ô  ö  ø  ù  û  ü  ý  þ  ÿ             	  
                                       !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  6  7  8  9  :    _OBJC_CLASS_$_EventDelegate _OBJC_METACLASS_$_EventDelegate __Z11RunCallbackRKN4Napi12CallbackInfoE __Z4InitN4Napi3EnvENS_6ObjectE __ZN18ThreadSafeCallback4Impl21static_async_callbackEP10uv_async_s __ZN4Napi7details12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__ __ZTIN4Napi15ObjectReferenceE __ZTIN4Napi5ErrorE __ZTIN4Napi9ReferenceINS_6ObjectEEE __ZTINSt3__117bad_function_callE __ZTISt11logic_error __ZTISt12length_error __ZTISt13runtime_error __ZTISt9exception __ZTSN4Napi15ObjectReferenceE __ZTSN4Napi5ErrorE __ZTSN4Napi9ReferenceINS_6ObjectEEE __ZTSNSt3__117bad_function_callE __ZTSSt11logic_error __ZTSSt12length_error __ZTSSt13runtime_error __ZTSSt9exception __ZZN18ThreadSafeCallback4Impl14async_callbackEvENUlP11uv_handle_sE_8__invokeES2_ _napi_register_module_v1 _OBJC_CLASS_$_CWWiFiClient _OBJC_CLASS_$_NSObject _OBJC_METACLASS_$_NSObject __Unwind_Resume __ZNKSt3__119__shared_weak_count13__get_deleterERKSt9type_info __ZNKSt3__120__vector_base_commonILb1EE20__throw_length_errorEv __ZNKSt9exception4whatEv __ZNSt11logic_errorC2EPKc __ZNSt12length_errorD1Ev __ZNSt13runtime_errorC1EPKc __ZNSt13runtime_errorC1ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE __ZNSt13runtime_errorD1Ev __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm __ZNSt3__119__shared_weak_count14__release_weakEv __ZNSt3__119__shared_weak_countD2Ev __ZNSt3__15mutex4lockEv __ZNSt3__15mutex6unlockEv __ZNSt3__15mutexD1Ev __ZNSt9exceptionD2Ev __ZSt9terminatev __ZTVN10__cxxabiv117__class_type_infoE __ZTVN10__cxxabiv120__si_class_type_infoE __ZTVN10__cxxabiv121__vmi_class_type_infoE __ZTVSt12length_error __ZdaPv __ZdlPv __Znam __Znwm ___cxa_allocate_exception ___cxa_atexit ___cxa_begin_catch ___cxa_end_catch ___cxa_free_exception ___cxa_throw ___gxx_personality_v0 ___stack_chk_fail ___stack_chk_guard __objc_empty_cache __objc_empty_vtable _memcpy _memmove _napi_add_finalizer _napi_close_escapable_handle_scope _napi_close_handle_scope _napi_create_error _napi_create_function _napi_create_object _napi_create_reference _napi_create_string_utf8 _napi_create_type_error _napi_delete_reference _napi_escape_handle _napi_fatal_error _napi_get_and_clear_last_exception _napi_get_cb_info _napi_get_last_error_info _napi_get_named_property _napi_get_null _napi_get_reference_value _napi_get_undefined _napi_get_value_string_utf8 _napi_is_exception_pending _napi_make_callback _napi_open_escapable_handle_scope _napi_open_handle_scope _napi_set_named_property _napi_set_property _napi_throw _napi_typeof _objc_msgSend _strlen _uv_async_init _uv_async_send _uv_close _uv_default_loop dyld_stub_binder __ZNK4Napi5Error4whatEv __ZN4Napi5Error5FatalEPKcS2_ ___clang_call_terminate __ZNSt3__110shared_ptrI18ThreadSafeCallbackED1Ev -[EventDelegate ssidDidChangeForWiFiInterfaceWithName:] __ZN18ThreadSafeCallback4callENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEE __ZN4Napi8Function3NewIPFvRKNS_12CallbackInfoEEEES0_P10napi_env__T_PKcPv __ZN4Napi5ErrorD1Ev __ZN4Napi5ErrorD0Ev __ZNK4Napi15ObjectReference3GetEPKc __ZN4Napi5Error3NewEP10napi_env__ __ZNK4Napi6String9Utf8ValueEv __ZN18ThreadSafeCallbackclENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEENS1_IFvRKN4Napi5ValueERKNSD_5ErrorEEEE __ZN18ThreadSafeCallback4Impl4callENSt3__18functionIFvP10napi_env__RNS1_6vectorIP12napi_value__NS1_9allocatorIS7_EEEEEEENS2_IFvRKN4Napi5ValueERKNSE_5ErrorEEEE __ZNKSt3__113__vector_baseINS_4pairINS_8functionIFvP10napi_env__RNS_6vectorIP12napi_value__NS_9allocatorIS7_EEEEEEENS2_IFvRKN4Napi5ValueERKNSE_5ErrorEEEEEENS8_ISN_EEE20__throw_length_errorEv __ZNSt3__1L20__throw_length_errorEPKc __ZNSt12length_errorC1EPKc __ZNK4Napi5Error26ThrowAsJavaScriptExceptionEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEED1Ev __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEED0Ev __ZNKSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7__cloneEv __ZNKSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7__cloneEPNS0_6__baseISD_EE __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7destroyEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE18destroy_deallocateEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEEclEOS6_SC_ __ZN4Napi6Object3SetIA5_cEEbPKcRKT_ __ZN4Napi6Object3SetIA38_cEEbPKcRKT_ __ZNSt3__16vectorIP12napi_value__NS_9allocatorIS2_EEE6assignIPKS2_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsISA_E9referenceEEE5valueEvE4typeESA_SA_ __ZNKSt3__113__vector_baseIP12napi_value__NS_9allocatorIS2_EEE20__throw_length_errorEv __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEED1Ev __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEED0Ev __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEE16__on_zero_sharedEv __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEE21__on_zero_shared_weakEv __ZN18ThreadSafeCallbackC2ERKN4Napi5ValueERKNS0_8FunctionE __ZNK4Napi5Value8IsObjectEv __ZN4Napi5Error3NewEP10napi_env__PKc __ZN18ThreadSafeCallback4ImplC2EON4Napi9ReferenceINS1_5ValueEEEONS1_17FunctionReferenceE __ZN18ThreadSafeCallback4Impl14async_callbackEv __ZNK4Napi17FunctionReference12MakeCallbackEP12napi_value__RKNSt3__16vectorIS2_NS3_9allocatorIS2_EEEEP20napi_async_context__ __ZNSt3__1L25__throw_bad_function_callEv __ZNSt3__117bad_function_callD1Ev __ZNSt3__117bad_function_callD0Ev __ZN18ThreadSafeCallback4ImplD2Ev __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEED1Ev __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEED0Ev __ZNKSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7__cloneEv __ZNKSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7__cloneEPNS0_6__baseISH_EE __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7destroyEv __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE18destroy_deallocateEv __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEEclEOSA_SG_ __ZN4Napi6Object3SetINS_6StringEEEbPKcRKT_ __ZN4Napi7details14vf_utf8_string4FromEP10napi_env__RKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE __ZZN4Napi7detailsL10AttachDataINS0_12CallbackDataIPFvRKNS_12CallbackInfoEEvEEEE11napi_statusP10napi_env__P12napi_value__PT_PFvSB_PvSG_ESG_ENUlSB_SG_SG_E_8__invokeESB_SG_SG_ __ZN4Napi7details12WrapCallbackIZNS0_12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__EUlvE_EEP12napi_value__T_ __ZN4Napi12CallbackInfoC2EP10napi_env__P20napi_callback_info__ __GLOBAL__sub_I_main.mm -[EventDelegate ssidDidChangeForWiFiInterfaceWithName:].cold.1 __ZN18ThreadSafeCallback4callENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEE.cold.1 __ZN18ThreadSafeCallback4callENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEE.cold.2 __Z11RunCallbackRKN4Napi12CallbackInfoE.cold.1 __ZN18ThreadSafeCallback4Impl4callENSt3__18functionIFvP10napi_env__RNS1_6vectorIP12napi_value__NS1_9allocatorIS7_EEEEEEENS2_IFvRKN4Napi5ValueERKNSE_5ErrorEEEE.cold.1 __ZN18ThreadSafeCallback4Impl14async_callbackEv.cold.1 GCC_except_table0 GCC_except_table4 GCC_except_table5 GCC_except_table6 GCC_except_table7 GCC_except_table8 GCC_except_table9 GCC_except_table10 GCC_except_table11 GCC_except_table12 GCC_except_table13 GCC_except_table14 GCC_except_table15 GCC_except_table16 GCC_except_table18 GCC_except_table20 GCC_except_table27 GCC_except_table28 GCC_except_table29 GCC_except_table34 GCC_except_table36 GCC_except_table37 GCC_except_table38 GCC_except_table39 GCC_except_table40 GCC_except_table41 GCC_except_table42 GCC_except_table47 GCC_except_table54 GCC_except_table55 GCC_except_table56 GCC_except_table59 GCC_except_table60 __ZTVN4Napi5ErrorE __ZTVNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEEE __ZTVNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEEE __ZTVNSt3__117bad_function_callE __ZTVNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEEE __OBJC_LABEL_PROTOCOL_$_CWEventDelegate __OBJC_$_PROTOCOL_INSTANCE_METHODS_OPT_CWEventDelegate __OBJC_$_PROTOCOL_METHOD_TYPES_CWEventDelegate __OBJC_CLASS_PROTOCOLS_$_EventDelegate __OBJC_METACLASS_RO_$_EventDelegate __OBJC_$_INSTANCE_METHODS_EventDelegate __OBJC_CLASS_RO_$_EventDelegate __OBJC_PROTOCOL_$_CWEventDelegate __ZL21notifyCallbackForJsFn /Users/runner/work/network-interface/network-interface/build/../src/ main.mm /Users/runner/work/network-interface/network-interface/build/Release/obj.target/mac-x64/src/main.o __ZNK4Napi5Error4whatEv /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/string /Users/runner/work/network-interface/network-interface/node_modules/node-addon-api/napi-inl.h /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/new __ZN4Napi5Error5FatalEPKcS2_ ___clang_call_terminate __ZNSt3__110shared_ptrI18ThreadSafeCallbackED1Ev /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/shared_ptr.h -[EventDelegate ssidDidChangeForWiFiInterfaceWithName:] ../src/main.mm /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/function.h __ZN18ThreadSafeCallback4callENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEE ../src/napi-thread-safe-callback-impl.hpp __Z11RunCallbackRKN4Napi12CallbackInfoE /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/swap.h __Z4InitN4Napi3EnvENS_6ObjectE __ZN4Napi8Function3NewIPFvRKNS_12CallbackInfoEEEES0_P10napi_env__T_PKcPv _napi_register_module_v1 __ZN4Napi5ErrorD1Ev /Users/runner/work/network-interface/network-interface/node_modules/node-addon-api/napi.h __ZN4Napi5ErrorD0Ev __ZNK4Napi15ObjectReference3GetEPKc __ZN4Napi5Error3NewEP10napi_env__ __ZNK4Napi6String9Utf8ValueEv __ZN18ThreadSafeCallbackclENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEENS1_IFvRKN4Napi5ValueERKNSD_5ErrorEEEE __ZN18ThreadSafeCallback4Impl4callENSt3__18functionIFvP10napi_env__RNS1_6vectorIP12napi_value__NS1_9allocatorIS7_EEEEEEENS2_IFvRKN4Napi5ValueERKNSE_5ErrorEEEE /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__mutex_base /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__utility/pair.h /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/vector /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__split_buffer /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/allocator.h /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/memory __ZNKSt3__113__vector_baseINS_4pairINS_8functionIFvP10napi_env__RNS_6vectorIP12napi_value__NS_9allocatorIS7_EEEEEEENS2_IFvRKN4Napi5ValueERKNSE_5ErrorEEEEEENS8_ISN_EEE20__throw_length_errorEv __ZNSt3__1L20__throw_length_errorEPKc /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/stdexcept __ZNSt12length_errorC1EPKc __ZNK4Napi5Error26ThrowAsJavaScriptExceptionEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEED1Ev __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEED0Ev __ZNKSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7__cloneEv __ZNKSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7__cloneEPNS0_6__baseISD_EE __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE7destroyEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEE18destroy_deallocateEv __ZNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEEclEOS6_SC_ /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/initializer_list __ZN4Napi6Object3SetIA5_cEEbPKcRKT_ __ZN4Napi6Object3SetIA38_cEEbPKcRKT_ __ZNSt3__16vectorIP12napi_value__NS_9allocatorIS2_EEE6assignIPKS2_EENS_9enable_ifIXaasr27__is_cpp17_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsISA_E9referenceEEE5valueEvE4typeESA_SA_ /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/distance.h /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/copy.h __ZNKSt3__113__vector_baseIP12napi_value__NS_9allocatorIS2_EEE20__throw_length_errorEv __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEED1Ev __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEED0Ev __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEE16__on_zero_sharedEv __ZNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEE21__on_zero_shared_weakEv __ZN18ThreadSafeCallbackC2ERKN4Napi5ValueERKNS0_8FunctionE __ZNK4Napi5Value8IsObjectEv __ZN4Napi5Error3NewEP10napi_env__PKc __ZN18ThreadSafeCallback4ImplC2EON4Napi9ReferenceINS1_5ValueEEEONS1_17FunctionReferenceE __ZN18ThreadSafeCallback4Impl21static_async_callbackEP10uv_async_s __ZN18ThreadSafeCallback4Impl14async_callbackEv /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/__iterator/wrap_iter.h __ZNK4Napi17FunctionReference12MakeCallbackEP12napi_value__RKNSt3__16vectorIS2_NS3_9allocatorIS2_EEEEP20napi_async_context__ __ZNSt3__1L25__throw_bad_function_callEv __ZNSt3__117bad_function_callD1Ev __ZNSt3__117bad_function_callD0Ev __ZZN18ThreadSafeCallback4Impl14async_callbackEvENUlP11uv_handle_sE_8__invokeES2_ __ZN18ThreadSafeCallback4ImplD2Ev __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEED1Ev __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEED0Ev __ZNKSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7__cloneEv __ZNKSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7__cloneEPNS0_6__baseISH_EE __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE7destroyEv __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEE18destroy_deallocateEv __ZNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEEclEOSA_SG_ __ZN4Napi6Object3SetINS_6StringEEEbPKcRKT_ __ZN4Napi7details14vf_utf8_string4FromEP10napi_env__RKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE __ZN4Napi7details12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__ __ZZN4Napi7detailsL10AttachDataINS0_12CallbackDataIPFvRKNS_12CallbackInfoEEvEEEE11napi_statusP10napi_env__P12napi_value__PT_PFvSB_PvSG_ESG_ENUlSB_SG_SG_E_8__invokeESB_SG_SG_ __ZN4Napi7details12WrapCallbackIZNS0_12CallbackDataIPFvRKNS_12CallbackInfoEEvE7WrapperEP10napi_env__P20napi_callback_info__EUlvE_EEP12napi_value__T_ __ZN4Napi12CallbackInfoC2EP10napi_env__P20napi_callback_info__ __GLOBAL__sub_I_main.mm -[EventDelegate ssidDidChangeForWiFiInterfaceWithName:].cold.1 __ZN18ThreadSafeCallback4callENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEE.cold.1 __ZN18ThreadSafeCallback4callENSt3__18functionIFvP10napi_env__RNS0_6vectorIP12napi_value__NS0_9allocatorIS6_EEEEEEE.cold.2 __Z11RunCallbackRKN4Napi12CallbackInfoE.cold.1 __ZN18ThreadSafeCallback4Impl4callENSt3__18functionIFvP10napi_env__RNS1_6vectorIP12napi_value__NS1_9allocatorIS7_EEEEEEENS2_IFvRKN4Napi5ValueERKNSE_5ErrorEEEE.cold.1 __ZN18ThreadSafeCallback4Impl14async_callbackEv.cold.1 GCC_except_table0 GCC_except_table4 GCC_except_table5 GCC_except_table6 GCC_except_table7 GCC_except_table8 GCC_except_table9 GCC_except_table10 GCC_except_table11 GCC_except_table12 GCC_except_table13 GCC_except_table14 GCC_except_table15 GCC_except_table16 GCC_except_table18 GCC_except_table20 GCC_except_table27 GCC_except_table28 GCC_except_table29 GCC_except_table34 GCC_except_table36 GCC_except_table37 GCC_except_table38 GCC_except_table39 GCC_except_table40 GCC_except_table41 GCC_except_table42 GCC_except_table47 GCC_except_table54 GCC_except_table55 GCC_except_table56 GCC_except_table59 GCC_except_table60 __ZTSN4Napi5ErrorE __ZTSN4Napi15ObjectReferenceE __ZTSN4Napi9ReferenceINS_6ObjectEEE __ZTSSt9exception __ZTSSt13runtime_error __ZTSSt12length_error __ZTSSt11logic_error __ZTSNSt3__117bad_function_callE __ZTVN4Napi5ErrorE __ZTIN4Napi9ReferenceINS_6ObjectEEE __ZTIN4Napi15ObjectReferenceE __ZTISt9exception __ZTIN4Napi5ErrorE __ZTISt13runtime_error __ZTISt11logic_error __ZTISt12length_error __ZTVNSt3__110__function6__funcIZ55-[EventDelegate ssidDidChangeForWiFiInterfaceWithName:]E3$_0NS_9allocatorIS2_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS3_IS9_EEEEEEE __ZTVNSt3__120__shared_ptr_emplaceI18ThreadSafeCallbackNS_9allocatorIS1_EEEE __ZTINSt3__117bad_function_callE __ZTVNSt3__117bad_function_callE __ZTVNSt3__110__function6__funcIZ11RunCallbackRKN4Napi12CallbackInfoEE3$_1NS_9allocatorIS6_EEFvP10napi_env__RNS_6vectorIP12napi_value__NS7_ISD_EEEEEEE __OBJC_LABEL_PROTOCOL_$_CWEventDelegate __OBJC_$_PROTOCOL_INSTANCE_METHODS_OPT_CWEventDelegate __OBJC_$_PROTOCOL_METHOD_TYPES_CWEventDelegate __OBJC_CLASS_PROTOCOLS_$_EventDelegate __OBJC_METACLASS_RO_$_EventDelegate __OBJC_$_INSTANCE_METHODS_EventDelegate __OBJC_CLASS_RO_$_EventDelegate _OBJC_METACLASS_$_EventDelegate _OBJC_CLASS_$_EventDelegate __OBJC_PROTOCOL_$_CWEventDelegate __ZL21notifyCallbackForJsFn      MZ       ÿÿ  ¸       @                                     º ´	Í!¸LÍ!This program cannot be run in DOS mode.
$       ¦·»âÖóèâÖóèâÖóèö½ðéèÖóèö½öéiÖóèö½÷éðÖóè°£÷éíÖóè°£ðéóÖóè°£öéÉÖóèö½òéçÖóèâÖòèÖóè £úéàÖóè £óéãÖóè £èãÖóè £ñéãÖóèRichâÖóè                        PE  L Ög}d        à !   ¶      ãQ                                          @                    › P   ð› <    Ð à                   à °  ¬ p                           Ð| @              <  H— @                   .text   â                        `.rdata  >ƒ      „                @  @.data   ì   °     ”             @  À.rsrc   à   Ð     ¢             @  @.reloc  °   à     ¤             @  B                                                                                                                                                                                                                                                                                                                h°èH>  YÃÌÌÌÌƒ|$u"‹D$hŒ}ÿpèGy  ƒÄ…Àu
Pÿ  Â 3ÀÂ ÌÌƒì‹D$WÀV‹ñ‰D$VÆD$RD$Ç´!PfÖèY  ƒÄ‹Æ^ƒÄÂ ÌÌÌÌÌÌV‹ñWÀFPÇ´!fÖ ‹D$ƒÀPèÙX  ƒÄ‹Æ^Â ÌÌÌÌÌÌ‹I¸ }…ÉEÁÃÌÌV‹ñFÇ´!PèY  ƒÄöD$tjVèƒ=  ƒÄ‹Æ^Â ÌÌÌAÇ´!PèÞX  YÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌWÀ‹ÁfÖAÇA´}ÇÜ!ÃÌÌÌÌÌÌÌÌƒì$èÕÿÿÿh—D$PèT\  ÌÌÌÌÌÌV‹ñWÀFPÇ´!fÖ ‹D$ƒÀPè	X  ƒÄÇÜ!‹Æ^Â V‹ñWÀFPÇ´!fÖ ‹D$ƒÀPèÙW  ƒÄÇÀ!‹Æ^Â 3ÀÂ ÌÌÌÌÌÌÌÌÌÌÌhÌ}èÍF  ÌÌÌÌÌÌ‹T$ƒìƒzV‹ñr‹FÇ´!WÀ‰T$PfÖ D$PÆD$ètW  ƒÄÇ "‹Æ^ƒÄÂ ÌÌÌÌÌÌÌÌƒì‹D$WÀV‹ñ‰D$VÆD$RD$Ç´!PfÖè,W  ƒÄÇ "‹Æ^ƒÄÂ V‹ñWÀFPÇ´!fÖ ‹D$ƒÀPèùV  ƒÄÇ "‹Æ^Â Qè8N  YÃÌÌÌÌÌÌÌÌ‹ÃÌÌÌÌÌÌÌÌÌÌÌÌÌV‹ñ‹N,ƒùr(‹FAù   r‹PüƒÁ#+ÂƒÀüƒøwS‹ÂQPè‡;  ƒÄFÇF(    ÇF,   ÆF PÇ´!èÙV  ‹FƒÄ…Àt€~ uPÿvÿ„¼ƒÄÇF    ^ÃèÓx  Ì‹D$‹	‰Â ÌÌÌÌÌU‹ìjÿhQd¡    Pƒìx¡°3Å‰EìSVWPEôd£    ‹Ù‹}‰½|ÿÿÿÇE€    E„ÇEü    Pj j ÿsÿ3ÿ¼ƒÄ…À…Å   ‰‹Ï‰GÇG   ˆ‹E„@ÇE€   Pèm  ‹w‹U„;Öw‰W‹Çƒr‹Æ ëE‹G‹Ê+Î+Æ‰Mˆ;Èw$ƒ‹Ç‰Wr‹Qðj VèZ  ‹EˆƒÄÆ ëQQÆEˆ ÿuˆQ‹Ïè{(  ‹O‹Çƒùr‹j QPÿsÿ3ÿ¼ƒÄ…Àu8‹Ç‹Môd‰    Y_^[‹Mì3Íè©6  ‹å]Â ‹M¼è/  hÔ–E¼PèY  ‹MŒè  hÔ–EŒPèY  ÌÌÌÌÌÌÌÌÌU‹ìƒäøƒì8¡°3Ä‰D$4VW‹}D$‹ñPh¸~ÿvÿ6ÿ´¼‹ƒÄ…Àu‰‹Ç‹L$‰O‹L$<_^3Ìè6  ‹å]Â ‹ÑL$èž   hÔ–D$PèX  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìƒäøƒì8¡°3Ä‰D$4‹E‹UVW‹}‹ñL$QPÿuÿvRj ÿ6ÿ¸¼‹ƒÄ…Àu‰‹Ç‹L$‰O‹L$<_^3Ìè‘5  ‹å]Â ‹ÑL$è   hÔ–D$PèX  ÌÌÌÌÌÌÌƒìVWD$ÇD$    ‹ò‹ùPVÿt¼ƒÄ…À…  D$PVÿŒ¼ƒÄ…À…  8D$tD$PVÿÈ¼ƒÄ…À…   é‡   ‹D$ºH~S‹ …ÀEÐ‹ÊYŠA„ÀuùD$+ËPQRVÿ¤¼ƒÄ[…À…Ñ   ‹D$‹@ƒÀþƒøw"¶€@ ÿ$…8 D$Pÿt$j Vÿ ¼ëD$Pÿt$j Vÿx¼ƒÄ…À…’   ‹L$WÀ‰wÇG    ÆG fÖGÇdÇG    ÇG(    ÇG,   …ÉtGPjQVÿà¼ƒÄ…ÀuS‹Ç_^ƒÄÃºà}¹ü}èc  º~¹ü}èT  º$~¹ü}èE  ºd~¹ü}è6  º|~¹ü}è'  º~¹¨~è  W k     ÌÌÌÌÌÌÌÌÌÌƒìl¡°3Ä‰D$hSVW‹ñ‹ú‹T$|‹Ê‰t$‰t$YŠA„ÀuùD$+ËPQRWÿ¤¼ƒÄ…ÀuqD$Pÿt$j Wÿx¼ƒÄ…Àur‹L$WÀ‰~‰FˆFfÖFÇd‰F‰F(ÇF,   ˆF…ÉtFPjQWÿà¼ƒÄ…ÀuH‹L$t‹Æ_^[3Ìè	3  ƒÄlÃ‹×L$èýÿÿhÔ–D$PèU  ‹×L$DèvýÿÿhÔ–D$HPèeU  º~¹¨~è   ÌÌÌÌÌÌÌÌjÿRjÿQÿˆ¼ÌÌÌÌV‹ñ‹N,ƒùr(‹FAù   r‹PüƒÁ#+ÂƒÀüƒøwi‹ÂQPè×5  ƒÄFÇF(    ÇF,   ÆF PÇ´!è)Q  ‹FƒÄ…Àt€~ uPÿvÿ„¼ƒÄÇF    öD$tj0Vè€5  ƒÄ‹Æ^Â ès  ÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿhd¡    PƒìSVW¡°3ÅPEôd£    ‹ù‰}ð‹u_Q‹Ä‰]Mì‹V‰ÇC    ÆC ‰è=  EäÇEü    PNèª  ‹H…ÉtCPjQÿ3ÿà¼ƒÄ…ÀuGÿuðÿuìÿä¼ƒÄ…ÀuCWÀfÖGÇd‰G‰G(ˆG‹ÇÇG,   ‹Môd‰    Y_^[‹å]Â º~¹ô€èwþÿÿºÀ~¹Ø~èhþÿÿÌÌÌÌÌÌÌÌS‹ÜƒìƒäøƒÄU‹k‰l$‹ìjÿh½d¡    PQSƒìH¡°3Å‰EäVWPEôd£    ‰eð‹ñƒ~( ‰u¸…/  ‹N…É„$  Q‹ÄÇEü    ‰M¼èÀ  E°ÆEüPNè   QM¨Q‹Èè$úÿÿM¼ÿpEÄPè%  ÆEü ÿuÀÿu¼ÿ”¼ƒÄ…À…ë   ‹EÄ‹MÈ‰EÄEÌ‰MÈMÄPè‚øÿÿ‹øF;Çth‹N,ƒùr.‹ Aù   r‹PüƒÁ#+ÂƒÀüƒø‡²   ‹ÂQPèp3  ƒÄFÇF(    ÇF,   Æ   ó~GfÖ@ÇG    ÇG   Æ ‹Uàƒúr9‹MÌB‹Áú   r‹IüƒÂ#+ÁƒÀüƒøwKRQè3  ƒÄë‹]ì¸j Ã‹]ì‹u¸F‹Môd‰    Y_^‹Mä3Íè€/  ‹å]‹ã[Ãºô~¹è°üÿÿè]p  ÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿhýd¡    PƒìH¡°3Å‰EðVWPEôd£    ‹ñ‹VQ‹ÄM¸‰è¤  ÇEü    ƒ~ t E°PNè  ‹@PÿvÿÄ¼ƒÄ…Àu.ÿu¼ÿu¸ÿä¼ƒÄ…Àu4‹Môd‰    Y_^‹Mð3ÍèÇ.  ‹å]Ã‹VMÀèNùÿÿhÔ–EÀPè>Q  ºÀ~¹Ø~èáûÿÿÌè{ýÿÿƒxr‹ ÃÌÌV‹ñ‹F…Àt€~ uPÿ6ÿ„¼ƒÄÇF    ^ÃÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿhd¡    PƒìSVW¡°3ÅPEôd£    ‹ù‰}ð‹u_Q‹ÄMì‹‰Ç    ÆG ‰è’   EäÇEü    P‹Îè   ‹@…ÀtSjPÿ7ÿà¼ƒÄ…Àu)ÿuðÿuìÿä¼ƒÄ…Àu%‹Ç‹Môd‰    Y_^[‹å]Â º~¹ô€èîúÿÿºÀ~¹Ø~èßúÿÿÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ‹A0…ÀtPè‹-  YÃÌU‹ìƒäøƒì4¡°3Ä‰D$0‹EV‹ñN‰QPÿp¼ƒÄ…Àu‹L$4‹Æ^3Ìè>-  ‹å]Â ‹L$èÃ÷ÿÿhÔ–D$Pè²O  ÌÌÌÌÿqÿ1ÿä¼ƒÄ…ÀtºÀ~¹Ø~é?úÿÿÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìƒäøƒì4¡°3Ä‰D$0‹EV‹ñN‰QPÿÜ¼ƒÄ…Àu‹L$4‹Æ^3Ìè®,  ‹å]Â ‹L$è3÷ÿÿhÔ–D$Pè"O  ÌÌÌÌÿqÿ1ÿ”¼ƒÄ…Àtºô~¹é¯ùÿÿÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìƒäøƒì8¡°3Ä‰D$4‹EVW‹}‹ñL$QPÿvÿ6ÿ˜¼‹ƒÄ…Àu‰‹Ç‹L$‰O‹L$<_^3Ìè
,  ‹å]Â ‹ÑL$èöÿÿhÔ–D$Pè~N  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿhld¡    PƒìH¡°3Å‰EðVWPEôd£    ‹ù‰}¼‹M‹U‰}¬‹‰‹A‰G¶AˆGÇ    ÇA    ÆA ÇEü    ‹‰G‹B‰G¶BˆGÇ    ÇB    ÆB ‡Œ   jPè+A  ƒÄÇ‡¼       Ç‡À       Ç‡Ä       ÆEüƒ Æ‡È    …‹   ‹wE¼PVÿÌ¼ƒÄ…À…¬   ÿu¼M°Vès  ƒÄ‹ðÆEü‹G…ÀtPÿ7ÿ„¼ƒÄ…Àt‹ë~ÇG    ‹‰‹F‰GŠFˆGÇ    ÇF    ÆF ‹E´…Àt€}¸ uPÿu°ÿ„¼ƒÄwhà  Vÿl¼Pÿ¼¼ƒÄ‰>‹Ç‹Môd‰    Y_^‹Mð3ÍèS*  ‹å]Â ‹ÖMÀèÙôÿÿhÔ–EÀPèÉL  ÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿh d¡    PƒìSVW¡°3ÅPEôd£    ‰eð‹MÇEü    ‹	èD   ‹Môd‰    Y_^[‹å]ÃºD¹Ü}è÷ÿÿ‹Mì‹ÿP‹Ð¹Ü}èÿöÿÿÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿhðd¡    PìÄ   ¡°3Å‰EìSVWPEôd£    ‰eð‹Ù‰]´‹s‰pÿÿÿ‰µtÿÿÿ3À‰E”‰E˜‰Eœ»Œ   ‰EüWèO?  ƒÄ…À…#  ‹¼   ‹;YuCWèB?  ‹E´ƒÄ€¸È    tƒÀhP& Pÿ|¼ƒÄ‹Môd‰    Y_^[‹Mì3Íèô(  ‹å]ÃE”;Át*‹ÃÇ    ‰E”‹A‰E¬‰E˜‹AÇA    ‰EœÇA    ë3Û3À‰E¬WèÇ>  ‹}¬ƒÄ‰½lÿÿÿ‰]ˆ;ß„  VdÿÿÿèûÿÿÇE     ÇE¤    ÇE¨    ÆEü‹K$…ÉtU ‰u°‹RU°RÿPWÀÇEÔ    ‰µxÿÿÿÇ…|ÿÿÿ    ‰uÈÇEÌ    ÆEÐ fÖEÀÇE¼dÇEä    ÇEè   ÆEÔ ‹}´…@ÿÿÿP‹ÏÆEüè
  ‹OQ‹@‰E°‹Ä‰MŒèûÿÿ…8ÿÿÿÆEüPOèá  ‹M ‹U¤Q+ÑQÁúTÿÿÿRÿu°Q‹ÈèÒñÿÿE»PÿuŒÿŒ¼ƒÄ…Àt3ÆE» ÿµXÿÿÿE€PMŒè8ûÿÿÆEüÿuÿuŒÿ”¼ƒÄ…À…`  ëR€}» tË…0ÿÿÿPOèf  ‹8‹@ÆEüÿu‰E°ÿuŒ‰}€‰E„ÿ”¼ƒÄ…À…   ‹E°‰½xÿÿÿ‹}¬‰…|ÿÿÿëj‹}€‹E„‰½xÿÿÿ‹}¬‰…|ÿÿÿëS‹µ\ÿÿÿMÈè”  ‹F‰EÈ‹F‰EÌŠFˆEÐ¸6$ ÇF    ÇF    ÆF Ã‹…pÿÿÿ‹½lÿÿÿ‹µtÿÿÿ‹]ˆ‰E´‰}¬ÇEü   ‹KL…É„È   ‹U¼R•xÿÿÿRÿPÆEü‹Uèƒúr,‹MÔB‹Áú   r‹IüƒÂ#+ÁƒÀüƒø‡a  RQè¿)  ƒÄEÀÇEä    PÇEè   ÆEÔ ÇE¼´!èE  ‹EÌƒÄ…Àt€}Ð uPÿuÈÿ„¼ƒÄÇEÌ    ÆEü‹E …Àt]‹M¨+ÈÁù    ‹Èú   r%‹@üƒÂ#+ÈƒÁüƒù‡Ù   ëƒ}Ì …Ò   é9ÿÿÿRPè&)  ƒÄÇE     ÇE¤    ÇE¨    ÆEü ÿµhÿÿÿÿµdÿÿÿÿä¼ƒÄ…À…²   ƒÃPéâüÿÿ‹]´ÇEüÿÿÿÿ‹}”…ÿ„üÿÿ‹U˜Q‹ÏèN  ‹Mœ¸gfff+ÏƒÄ÷éÁú‹ÂÁèÂ€‹ÇÁáù   r‹üƒÁ#+ÇƒÀüƒøw`QWè…(  ‹]´ƒÄé¸ûÿÿPèz6  ºô~¹èNòÿÿèûe  M¼èáóÿÿPHÿÿÿèµëÿÿh$–…HÿÿÿPèrG  ºÀ~¹Ø~èòÿÿèÂe  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ‹D$V‹0…ö„â   ‹Ž¼   W…Étz‹–À   Qèz  ‹ŽÄ   ¸gfff‹¾¼   ƒÄ+Ï÷éÁú‹ÂÁèÂ€Ááù   r‹WüƒÁ#+úGüƒø‡‰   ‹úQWè¤'  Ç†¼       ƒÄÇ†À       Ç†Ä       †Œ   PèÞ9  ‹FƒÄ‹=„¼…Àt€~ u	Pÿvÿ×ƒÄÇF    ‹F…Àt€~ uPÿ6ÿ×ƒÄÇF    hÌ   Vè*'  ƒÄ_^Ãèºd  ÌÌÌÌÌÌÌÌV‹ñ‹N$…Ét‹;Î•À¶ÀPÿRÇF$    ^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌV‹ñ‹NLW~(…Ét‹;Ï•À¶ÀPÿRÇG$    ‹N$…Ét‹;Î•À¶ÀPÿRÇF$    _^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿh~d¡    Pì¼   ¡°3Å‰EðSVWPEôd£    ‹Á‰…Tÿÿÿ‹u‹}Ç…Xÿÿÿ    ‹À¼Ç     ‹F…À„š   XÿÿÿQPÿ6ÿÓƒÄ…À…  ƒ½Xÿÿÿtz‹F…Àt \ÿÿÿQPÿ6ÿÓƒÄ…À…ÿ  ƒ½\ÿÿÿtS‹F…Àt \ÿÿÿQPÿ6ÿÓƒÄ…À…Ø  ƒ½\ÿÿÿt,ht…Tÿÿÿ‹ÏPè‚êÿÿ‹Èèëéÿÿ‹ÐMÀè‘îÿÿƒÄé­  ‹G…À„W  \ÿÿÿQPÿ7ÿÓƒÄ…Àt‹é€  ƒ½\ÿÿÿ…0  hÌ   è"  ƒÄ‰…\ÿÿÿÇEü    ‹O‹…Éu3Àë;…DÿÿÿPjQSÿà¼ƒÄ…Àt‹Ó`ÿÿÿè[ìÿÿhÔ–…`ÿÿÿé'  ‹…Dÿÿÿ‰Hÿÿÿ‰…LÿÿÿÆ…Pÿÿÿ ÆEü8ÿÿÿÿvÇ…Xÿÿÿ   ÿ6è  ƒÄHÿÿÿÇEü   Q‹\ÿÿÿPÇ…Xÿÿÿ   è}õÿÿ‹½Tÿÿÿ‹5„¼‰‹…<ÿÿÿ…Àt€½@ÿÿÿ uPÿµ8ÿÿÿÿÖƒÄÇ…<ÿÿÿ    ‹Lÿÿÿ…Ét€½Pÿÿÿ uQÿµHÿÿÿÿÖƒÄ‹Ç‹Môd‰    Y_^[‹Mð3Íèç   ‹å]Â h¤…Tÿÿÿ‹ÏPèôèÿÿ‹Èè]èÿÿ‹ÐMÀèíÿÿƒÄë"‹MèDëÿÿhÔ–EPè4C  ‹MÀè,ëÿÿhÔ–EÀPèC  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿhd¡    Pì¼   ¡°3Å‰EðSVWPEôd£    ‹ñÇEü   ƒ> „Ø  …HÿÿÿÇ…lÿÿÿ    ‰EœÆEü‹MT…Ét‹•HÿÿÿRÿ‰…lÿÿÿ…pÿÿÿÇE”    ‰EœÆEü‹M,…Ét‹•pÿÿÿRÿ‰E”‹³Œ   ÆEüV‰uœèÑ5  ƒÄ…À…  E ÇEÄ    ‰E˜ÆEü‹M”…Ét‹U Rÿ‰EÄEÈÇEì    ‰E˜ÆEü
‹lÿÿÿ…Ét‹UÈRÿ‰EìÆEüM ‹ƒÀ   Q;ƒÄ   t‹Ðè  ƒÄƒƒÀ   PëP‹¼   èš  ‹Mì…Ét‹EÈ;È•À¶ÀPÿRÇEì    ‹MÄ…Ét‹E ;È•À¶ÀPÿRCPÿ¨¼ƒÄVè5  ‹M”ƒÄ…Ét‹…pÿÿÿ;È•À¶ÀPÿRÇE”    ‹lÿÿÿ…Ét‹…Hÿÿÿ;È•À¶ÀPÿR‹M,…Ét‹E;È•À¶ÀPÿRÇE,    ‹MT…Ét‹E0;È•À¶ÀPÿR‹Môd‰    Y_^[‹Mð3Íèh  ‹å]ÂP hÀ<ÿÿÿèhåÿÿh$–…<ÿÿÿPèÕ@  Pèž/  ÌU‹ìjÿhd¡    Pƒì0VW¡°3ÅPEôd£    ‹E…À„B  ƒ8…9  ‹@ƒø„»   ƒø
taƒø…  ‹=ÔÇEÈÇEÈ4‰Eìƒì(ÇEü   ‹Ä‰eÇ@$    ƒì(‹ô‰uðÇF$    ÆEü‹Mì…Ét‹Vÿ‰F$ÆEüÆEüé¨   ‹=ÔÇEÈÇEÈL‰Eìƒì(ÇEü    ‹Ä‰eÇ@$    ƒì(‹ô‰uðÇF$    ÆEü‹Mì…Ét‹Vÿ‰F$ÆEüÆEü ëS‹=ÔÇEÈÇEÈ‰Eìƒì(ÇEü   ‹Ä‰eÇ@$    ƒì(‹ô‰uðÇF$    ÆEü‹Mì…Ét‹Vÿ‰F$ÆEüÆEü‹Ïèdüÿÿ‹Mì…Ét‹EÈ;È•À¶ÀPÿR‹Môd‰    Y_^‹å]ÃÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿh
d¡    Pƒì|¡°3Å‰EðVWPEôd£    ‹Mƒy‹qv‹A‹@ëE¸‰u¼PVÿÐ¼ƒÄ…À…Ð  ‹E¸j‰u¨‰E¬èV  ‹øƒÄ‰}¼ÇEü    E¨PWÀÇE     fÖE ÇG    wP‹ÎÇG   ÇG   ÇlÇE¤    è¸øÿÿÇEüÿÿÿÿ‰5ÔÇ‹5ØÇ‰=ØÇ…öt!ƒÏÿ‹ÇðÁFu‹‹ÎÿðÁ~Ou‹‹ÎÿPE´ÇE´    PE°ÇE°    Pj jÿ0!…Àt[‹=ÔÇ…xÿÿÿÇ…xÿÿÿ”‰Eœƒì(ÇEü   ‹Ä‰e¸Ç@$    ƒì(‹ô‰u¼ÇF$    ÆEü‹Mœ…Ét‹Vÿ‰F$ÆEüÆEüëuj j j hÐ, jjÿu´ÿ4!…Àt{‹=ÔÇ…xÿÿÿÇ…xÿÿÿ|‰Eœƒì(ÇEü   ‹Ä‰e¸Ç@$    ƒì(‹ô‰u¼ÇF$    ÆEü‹Mœ…Ét‹Vÿ‰F$ÆEüÆEü‹Ïè?úÿÿ‹Mœ…Ét‹…xÿÿÿ;È•À¶ÀPÿR‹Môd‰    Y_^‹Mð3Íè‡  ‹å]ÃM¼èâÿÿ‹ÐMÀèåÿÿhÔ–EÀPè÷<  ÌÌÌÌÌÌÌÌÌU‹ìƒäøƒìl¡°3Ä‰D$hSV‹uD$W‹}Pjh¤€Wÿ¤¼ƒÄ…À…²   ‹]jè(  ƒÄ‹øD$PWhà> jÿj SÇ`. ÇG    ÿh¼ƒÄ…ÀuTPPh I Wÿt$Sÿœ¼ƒÄ…Àu:ÿt$ÿt$ÿuÿuÿÔ¼ƒÄ…Àu^‹M‹Æ‹U‰‹L$t_‰V^[3Ìè–  ‹å]ÃjWèç  ƒÄL$D‹ÓèäÿÿhÔ–D$HPè<  ‹×L$èøãÿÿhÔ–D$Pèç;  ‹UL$èÝãÿÿhÔ–D$PèÌ;  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌƒì‹D$L$‰D$ƒì‹D$$‰D$(D$‰D$D$(‰D$‹Äó~D$ÇD$°0 fÖ ‰HèÚ  ƒÄ ÃÌÌÌÌÌÌhp¸ÿ¬¼YÃÌÌÌW‹ù‹…Étd‹WVQè  ‹O¸gfff‹7ƒÄ+Î÷éÁú‹ÂÁèÂ€Ááù   r‹VüƒÁ#+òFüƒøw#‹òQVèÒ  ƒÄÇ    ÇG    ÇG    ^_ÃèNY  ÌÌÌÌÌÌÌÌÌÌÌÌV‹ñ‹…Àt@‹N+Èƒáüù   r‹PüƒÁ#+ÂƒÀüƒøw"‹ÂQPèu  Ç    ƒÄÇF    ÇF    ^ÃèòX  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÿ1èø-  YÃÌÌÌÌÌÌÌQS‹\$V‹ñ‹F‰D$;Ã‡\  U‹n‰l$;ë„K  Wƒü   ‹Ëºÿÿÿ+È‹Â+D$;Á‚9  ‹ûƒÏ;úv#‹ú¸#  €Pè‘  ƒÄ…À„  h#ƒåà‰EüëC‹ÅÑè+Ð;êv¿ÿÿÿëÎÅ;øBøOù   rA#;Á†ä   ë´…ÉtQèA  ƒÄ‹èë3í‹D$‰^@‹\$‰~PƒûrF‹>WUèÍ;  CƒÄû   r‹OüƒÃ#+ùGüƒø‡‡   ‹ùSWè;  ‹D$ƒÄ‰.‰F_]^[YÂ VUè‰;  ‹D$ƒÄ‰.‰F_]^[YÂ ƒûsBƒýr=‹>@PWVè`;  ‹NƒÄAù   r‹WüƒÁ#+úGüƒøw‹úQWèÏ  ƒÄÇF   _]^[YÂ èSW  èÝÿÿèwÜÿÿÌÌÌÌÌÌÌV‹ñ‹Nƒùr'‹Aù   r‹PüƒÁ#+ÂƒÀüƒøw‹ÂQPèx  ƒÄÇF    ÇF   Æ ^ÃèøV  ÌÌÌÌÌÌ‹D$Ç    ÇA    ÇA     ó~@fÖAÇ@    Ç@   Æ  ‹ÁÂ ÌÌU‹ìjÿhd¡    PƒìSVW¡°3ÅPEôd£    ‹ù‹u_Q‹ÄMì‹‰Ç    ÆG ‰èõçÿÿEäÇEü    P‹Îèc   ‹@…ÀtSjPÿ7ÿà¼ƒÄ…Àu)ÿuðÿuìÿä¼ƒÄ…Àu%‹Ç‹Môd‰    Y_^[‹å]Â º~¹ô€èQâÿÿºÀ~¹Ø~èBâÿÿÌÌU‹ìƒäøƒì8¡°3Ä‰D$4V‹uW‹ù‹O‹…Éu‰‹Æ‰N_^‹L$43ÌèÂ  ‹å]Â T$RQPÿè¼‹ƒÄ…Àu‹D$‰‹L$<‰F‹Æ_^3ÌèŽ  ‹å]Â ‹ÑL$èßÿÿhÔ–D$Pè7  ÌÌÌÌU‹ìƒäøƒì4¡°3Ä‰D$0V‹ñ‹F…ÀtPÿ6ÿ„¼ƒÄ…Àu‰F‹L$4^3Ìè-  ‹å]Ã‹L$è´ÞÿÿhÔ–D$Pè£6  ÌÌÌÌÌU‹ìjÿh@d¡    PƒìSVW¡°3ÅPEôd£    ‰eðÇEü    ‹E‹‹EQ‹ PPEäP‹E‹ ÿÐƒÄ‹@‹Môd‰    Y_^[‹å]Ã‹MìèFäÿÿ¸p7 Ã3À‹Môd‰    Y_^[‹å]ÃÌÌÌÌÌÌÌÌÌÌÌÌƒì<¡°3Ä‰D$4V‹ñ‰t$‰t$‹D$HW‹|$H…Àu‰FëL$QjPWÿà¼ƒÄ…Àu ‹L$‰N‹L$<‹Æ‰>_ÆF ^3Ìè  ƒÄ<Ã‹×L$è¤ÝÿÿhÔ–D$Pè“5  ÌÌÌÌÌƒì<¡°3Ä‰D$4VWD$‹ñPjhÜ‹>Wÿ¤¼ƒÄ…Àu0ÿt$häÿvÿ6ÿ°¼ƒÄ…Àu/‹L$<°_^3Ìè¢  ƒÄ<Â ‹×L$è'ÝÿÿhÔ–D$Pè5  ‹L$èÝÿÿhÔ–D$Pèü4  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿhmd¡    PƒìP¡°3Å‰EðVWPEôd£    ‹ñ‹MEØ‹>PèVÚÿÿÇEü    M¤ƒ}ìEØQÿuèCEØPWÿ¤¼ƒÄ…À…‡   ‹}¤ÇEüÿÿÿÿ‹Uìƒúr(‹MØB‹Áú   r‹IüƒÂ#+ÁƒÀüƒøwoRQè  ƒÄWh¸~ÿvÇEè    ÿ6ÇEì   ÆEØ ÿ°¼ƒÄ…Àt‹ë!°‹Môd‰    Y_^‹Mð3Íès  ‹å]Â ‹×M¨èùÛÿÿhÔ–E¨Pèé3  èHR  ÌÌÌÌÌÌV‹t$W‹úÇG$    ‹N$…Ét.;Îu ‹WÿP‰G$‹N$…Ét‹;Î•À¶ÀPÿRë‰O$ÇF$    ƒÇ(ƒÆ(ÇG$    ‹N$…Ét6;Îu(‹WÿP‰G$‹N$…Ét"‹;Î•À¶ÀPÿR_ÇF$    ^Ã‰O$ÇF$    _^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌƒì‹T$¸gfffSV‹ñW‰t$‹+Ó‹N÷ê+Ë¸gfffÁú‹úÁïú÷éÁú‹ÂÁèÂ=333„â  ‹N+ËUh¸gfff÷é¸333‰l$Áú‹ÊÁéÊ‹ÑÑê+Â;È‡¬  
‹Í;ÅCÈù333‡–  ,‰Áå‰l$ý   r'E#;Å†y  Pè  ƒÄ…À„r  X#ƒãà‰Cüë…ítUèí  ƒÄ‹Øë3Ûÿt$(¿ÁàÃ‹Ð‰D$èpþÿÿ‹NƒÄ‹D$$‹û‹6;Áu%;ñ„   ‹é@ V‹×èHþÿÿƒÆPƒÄƒÇP;õuëën;ðt‹è V‹×è(þÿÿƒÆPƒÄƒÇP;õuë‹l$Q‹×‹Ïè=  ‹D$ƒÄ‹T$‹L$$‹@‰D$(zP;Èt)‹l$(q°‹Ç+Âð V‹×èØýÿÿƒÆPƒÄƒÇP;õuë‹l$Q‹×‹Ïèí  ‹|$ƒÄ‹…ÉtN‹WQè×  ‹O¸gfff‹7ƒÄ+Î÷éÁú‹ÂÁèÂ€Ááù   r‹VüƒÁ#+òFüƒøw;‹òQVè  ƒÄ‹D$‰€‹D$ÁáË‰O+]‰O_^[ƒÄÂ è¨Ôÿÿè  èpO  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌQ‹T$S‹Ù¹ÿÿÿU‹Á‹k+Å;Â‚  V*‹ð‰D$ƒÎW‹{‰|$;ñv#‹ñ¸#  €Pè:  ƒÄ…À„÷   x#ƒçà‰GüëC‹ÇÑè+È;ùv¾ÿÿÿëÎÇ;ðBðNù   rA#;Á†¹   ë´…ÉtQèê  ƒÄ‹øë3ÿ‹D$‰C‹D$ ‰s4/Æƒ|$‰D$UrW‹3VWèl2  ÿt$,/j Pè0  ‹D$(ƒÄ‹L$AÆ  ù   r‹VüƒÁ#+òFüƒøwK‹òQVèÄ  ƒÄ‰;‹Ã_^][YÂ SWè2  ÿt$,j VèK0  ‹D$(ƒÄÆ  ‹Ã‰;_^][YÂ èàÓÿÿèKÓÿÿèN  ÌÌÌÌÌÌW‹ú;ÏtPVqLD  ‹…Ét‹FÜ;È•À¶ÀPÿRÇ    ‹NØ…Ét‹F´;È•À¶ÀPÿRÇFØ    ƒÆPF´;Çuº^_ÃÌÌÌÌÌÌÌ‹L$ù   r‹D$ƒÁ#‹Pü+ÂƒÀüƒøv	éM  ‹T$‰L$‰T$éá  ÌÌÌÌÌÌÌÌÌÌ‹D$=   r)H#;È†ŠÒÿÿQèq  ‹ÈƒÄ…Ét
A#ƒàà‰HüÃé>M  …Àt	‰D$éL  3ÀÃÌÌÌÌÌÌÌÌÌÌÌÌU‹ìƒäøEMPQè  ƒÄ‹å]ÃÌÌÌÌÌÌ…Ét‹jÿPÃÌÌÌÌU‹ìjÿh d¡    PVW¡°3ÅPEôd£    ÇEü    ‹y…ÿt-·Œ   VèÀ!  ƒÄ…Àu+GÆ‡È   Pÿ¨¼Vè³!  ƒÄ‹Môd‰    Y_^‹å]ÃPèç  ÌÌÌÌÌÌÌÌÌÌhèý  ÌÌÌÌÌÌS‹\$W‹ùûÿÿÿ?‡á   ‹W¸ÿÿÿ?‹+ÑÁúV‹òÑî+Æ;Ðv¾ÿÿÿ?ëò;óBó…Ét?Áâú   r‹YüƒÂ#+ËAüƒø‡›   ‹ËRQè_  Ç    ƒÄÇG    ÇG    þÿÿÿ?wiÁæþ   r/F#;ÆvWPèÞ
  ‹ÈƒÄ…ÉtRA#ƒàà‰Hü‰‰GÆ^‰G_[Â …ötVè²
  ƒÄ‰‰GÆ‰G^_[Â 3À‰‰G‹Æ^‰G_[Â è›ÐÿÿèöþÿÿècK  ÌöD$V‹ñÇltjVè¯  ƒÄ‹Æ^Â ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ‹L$‹T$ƒÉVW;Êw‹|$‹Â‹÷Ñî+Æ;øw>;È_BÈ‹Á^Ã_‹Â^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìjÿhÐd¡    Pì¤   ¡°3Å‰EìSVWPEôd£    ‰eðÇEü    ‹E‹0‹E‹8…lÿÿÿ‰…hÿÿÿEˆP…`ÿÿÿÇ…Tÿÿÿ   P…lÿÿÿ‰½XÿÿÿP…dÿÿÿ‰µ\ÿÿÿPVWÇ…`ÿÿÿ    ÇE„    ÇEˆ    Ç…dÿÿÿ   ÿØ¼ƒÄ…À…¥   ‹…dÿÿÿ;…Tÿÿÿv=3Éº   ÷âÁ÷ÙÈQè  ƒÄ‰E„‰…hÿÿÿj j P…dÿÿÿPVWÿØ¼ƒÄ…ÀuvÆEü‹Mˆ‹A‰Eˆ…TÿÿÿP‹ÿÐ‹E„ƒÄ…Àt	Pèã  ƒÄ3À‹Môd‰    Y_^[‹Mì3Íè¸  ‹å]Ã‹PÿÿÿèOÙÿÿ¸8B Ã‹•XÿÿÿM¼è+ÓÿÿhÔ–E¼Pè+  ‹•XÿÿÿMŒèÓÿÿhÔ–EŒPèÿ*  Ì€|$ tjQè¸  ƒÄÂ ÌÌÌÌÌÌÌÌÌÌÌAÃÌÌÌÌÌÌÌÌÌÌÌÌ¸˜¹ÃÌÌÌÌÌÌÌÌÌÌU‹ìƒäøƒìH¡°3Ä‰D$DV‹uD$W‹}P‹6VÿÌ¼ƒÄ…À…‚   ‹D$‰D$D$Pj h€€V‰t$ÿ¤¼ƒÄ…Àuv‹D$‰D$D$PQL$‰t$èZõÿÿ‹O‹+Ê‹D$Áù‰D$ƒùsj‹Ïè*üÿÿ‹‹D$‹L$L‰B‰G_^3Ìèy  ‹å]Â ‹ÖL$èþÑÿÿhÔ–D$ Pèí)  ‹ÖL$èäÑÿÿhÔ–D$ PèÓ)  ÌÌÌÌÌ‹D$Ç |Â ÌÌÌ¸àºÃÌÌÌÌÌÌÌÌÌÌU‹ìƒäøƒìH¡°3Ä‰D$DV‹uD$W‹}P‹6VÿÌ¼ƒÄ…À…‚   ‹D$‰D$D$Pjhh€V‰t$ÿ¤¼ƒÄ…Àuv‹D$‰D$D$PQL$‰t$èJôÿÿ‹O‹+Ê‹D$Áù‰D$ƒùsj‹Ïèûÿÿ‹‹D$‹L$L‰B‰G_^3Ìèi  ‹å]Â ‹ÖL$èîÐÿÿhÔ–D$ PèÝ(  ‹ÖL$èÔÐÿÿhÔ–D$ PèÃ(  ÌÌÌÌÌ‹D$Ç ”Â ÌÌÌ¸pºÃÌÌÌÌÌÌÌÌÌÌU‹ìƒäøƒìL¡°3Ä‰D$HSV‹uD$W‹}P‹6V‰t$ ÿÌ¼ƒÄ…À…Ä   ‹D$L$ƒì‰t$‰D$è¾òÿÿ‹\$D$Pj#hD€Sÿ¤¼ƒÄ…À…¤   ÿt$h€ÿt$Sÿ°¼ƒÄ…À…Ÿ   D$PVÿ€¼ƒÄ…À…¢   ‹D$‹7‰D$‹D$‰D$ ‹G+ÆÁøƒøsj‹ÏèÎùÿÿ‹7jD$ PVèï)  ‹L$`FƒÄ‰G_^[3Ìè  ‹å]Â ‹ÖL$$è—ÏÿÿhÔ–D$(Pè†'  ‹ÓL$$è}ÏÿÿhÔ–D$(Pèl'  ‹ÓL$$ècÏÿÿhÔ–D$(PèR'  L$èKÌÿÿ‹ÐL$$è@ÏÿÿhÔ–D$(Pè/'  Ì‹D$Ç Â ÌÌÌ¸Ð¹ÃÌÌÌÌÌÌÌÌÌÌU‹ìƒäøƒìL¡°3Ä‰D$HSV‹uD$W‹}P‹6V‰t$ ÿÌ¼ƒÄ…À…Ä   ‹D$L$ƒì‰t$‰D$è.ñÿÿ‹\$D$Pj"h €Sÿ¤¼ƒÄ…À…¤   ÿt$h€ÿt$Sÿ°¼ƒÄ…À…Ÿ   D$PVÿ€¼ƒÄ…À…¢   ‹D$‹7‰D$‹D$‰D$ ‹G+ÆÁøƒøsj‹Ïè>øÿÿ‹7jD$ PVè_(  ‹L$`FƒÄ‰G_^[3Ìè‚  ‹å]Â ‹ÖL$$èÎÿÿhÔ–D$(Pèö%  ‹ÓL$$èíÍÿÿhÔ–D$(PèÜ%  ‹ÓL$$èÓÍÿÿhÔ–D$(PèÂ%  L$è»Êÿÿ‹ÐL$$è°ÍÿÿhÔ–D$(PèŸ%  Ì‹D$Ç 4Â ÌÌÌ¸8ºÃÌÌÌÌÌÌÌÌÌÌU‹ìƒäøƒìL¡°3Ä‰D$HSV‹uD$W‹}P‹6V‰t$ ÿÌ¼ƒÄ…À…Ä   ‹D$L$ƒì‰t$‰D$èžïÿÿ‹\$D$Pj)hìSÿ¤¼ƒÄ…À…¤   ÿt$h€ÿt$Sÿ°¼ƒÄ…À…Ÿ   D$PVÿ€¼ƒÄ…À…¢   ‹D$‹7‰D$‹D$‰D$ ‹G+ÆÁøƒøsj‹Ïè®öÿÿ‹7jD$ PVèÏ&  ‹L$`FƒÄ‰G_^[3Ìèò  ‹å]Â ‹ÖL$$èwÌÿÿhÔ–D$(Pèf$  ‹ÓL$$è]ÌÿÿhÔ–D$(PèL$  ‹ÓL$$èCÌÿÿhÔ–D$(Pè2$  L$è+Éÿÿ‹ÐL$$è ÌÿÿhÔ–D$(Pè$  Ì‹D$Ç LÂ ÌÌÌjÿt$è¼  ƒÄÃ¸h¼é    QRPhH—è`Æ  ZYÿà¸p¼éåÿÿÿ¸t¼éÛÿÿÿ¸x¼éÑÿÿÿ¸|¼éÇÿÿÿ¸€¼é½ÿÿÿ¸„¼é³ÿÿÿ¸ˆ¼é©ÿÿÿ¸Œ¼éŸÿÿÿ¸¼é•ÿÿÿ¸”¼é‹ÿÿÿ¸˜¼éÿÿÿ¸œ¼éwÿÿÿ¸ ¼émÿÿÿ¸¤¼écÿÿÿ¸¨¼éYÿÿÿ¸¬¼éOÿÿÿ¸°¼éEÿÿÿ¸´¼é;ÿÿÿ¸¸¼é1ÿÿÿ¸¼¼é'ÿÿÿ¸À¼éÿÿÿ¸Ä¼éÿÿÿ¸È¼é	ÿÿÿ¸Ì¼éÿþÿÿ¸Ð¼éõþÿÿ¸Ô¼éëþÿÿ¸Ø¼éáþÿÿ¸Ü¼é×þÿÿ¸à¼éÍþÿÿ¸ä¼éÃþÿÿ¸l¼é¹þÿÿ¸è¼é¯þÿÿ;°uÃé  é  U‹ìëÿuè8A  Y…Àtÿuè´A  Y…Àtæ]Ãƒ}ÿ„  éø  U‹ì‹EV‹H<È·AQÐ·Akð(ò;Öt‹M;Jr
‹BB;ÈrƒÂ(;Öuê3À^]Ã‹ÂëùVè½	  …Àt d¡   ¾ø¼‹Pë;Ðt3À‹Êð±…Àuð2À^Ã°^ÃèŒ	  …Àtè®  ëèx	  Pè:H  Y…Àt2ÀÃè J  °Ãj èÐ   „ÀY•ÀÃèÆ  „Àu2ÀÃèŠN  „Àuè¼  ëí°Ãè‚N  è­  °ÃU‹ìè$	  …Àuƒ}uÿu‹MPÿuÿ<!ÿUÿuÿuèž@  YY]Ãèó  …Àth ½èL  YÃè¢D  …À„uD  Ãj èTN  Yéh  U‹ìƒ} uÆü¼èÞ  è  „Àu2À]ÃèÒM  „Àu
j è  Yëé°]ÃU‹ì€=ý¼ t°]ÃV‹u…ötƒþubèm  …Àt&…öu"h ½è2L  Y…Àuh½è#L  Y…Àt+2Àë0ƒÉÿ‰ ½‰½‰½‰½‰½‰½Æý¼°^]Ãjè  ÌjhÈè8	  ƒeü ¸MZ  f9   u]¡<  ¸   PE  uL¹  f9ˆ  u>‹E¹   +ÁPQè³ýÿÿYY…Àt'ƒx$ |!ÇEüþÿÿÿ°ë‹Eì‹ 3É8  À”Á‹ÁÃ‹eèÇEüþÿÿÿ2À‹Mðd‰    Y_^[ÉÃU‹ìèl  …Àt€} u	3À¹ø¼‡]ÃU‹ì€=ü¼ t€} uÿuè“L  ÿuè¾  YY°]ÃU‹ìƒ= ½ÿÿuuè¯J  ëh ½èK  Y÷ØYÀ÷Ð#E]ÃU‹ìÿuèÈÿÿÿ÷ØYÀ÷ØH]ÃU‹ìÿuè¶  Y]ÃU‹ì]éŸüÿÿU‹ìöEV‹ñÇ !t
jVèÏÿÿÿYY‹Æ^]Â U‹ì‹Eƒè t3ƒèt ƒètƒèt3À@ë0èVýÿÿëè0ýÿÿ¶Àëÿuÿuè   Yëƒ} •À¶ÀPè  Y]Â jhèè  j è…ýÿÿY„À„Ñ   è|üÿÿˆEã³ˆ]çƒeü ƒ=ô¼ …Å   Çô¼   è±üÿÿ„ÀtMèw  è+  èJ  hd!hP!èÒK  YY…Àu)èYüÿÿ„Àt hL!h@!èoK  YYÇô¼   2Ûˆ]çÇEüþÿÿÿè=   „ÛuCè  ‹ðƒ> tVèœýÿÿY„Àtÿujÿu‹6‹Îÿ<!ÿÖÿ½3À@ëŠ]çÿuãèþÿÿYÃ3À‹Mðd‰    Y_^[ÉÃjèf  ÌÌÌjhè‡  ¡½…À3ÀëiH£½3ÿG‰}äƒeü èfûÿÿˆEà‰}üƒ=ô¼ukèüÿÿè>  è   ƒ%ô¼ ƒeü è9   j ÿuèšýÿÿYY¶ð÷Þö#÷‰uäÇEüþÿÿÿè"   ‹Æ‹Mðd‰    Y_^[ÉÃ‹}äÿuàèFýÿÿYÃ‹uäèÛûÿÿÃjè´  Ìjh0è×  ‹}…ÿu9=½3ÀéÙ   ƒeü ƒÿt
ƒÿt‹]ë1‹]SWÿuèÉ   ‹ð‰uä…ö„£   SWÿuè›ýÿÿ‹ð‰uä…ö„Œ   SWÿuèS  ‹ð‰uäƒÿu'…öu#SPÿuè;  …Û•À¶ÀPèºþÿÿYSVÿuèj   …ÿtƒÿuHSWÿuè@ýÿÿ‹ð‰uä…öt5SWÿuèD   ‹ðë$‹Mì‹Qÿ0h¡N ÿuÿuÿuè•úÿÿƒÄÃ‹eè3ö‰uäÇEüþÿÿÿ‹Æ‹Mðd‰    Y_^[ÉÃU‹ìV‹5¤!…öu3À@ëÿu‹Îÿuÿuÿ<!ÿÖ^]Â U‹ìƒ}uè4  ÿuÿuÿuè®þÿÿƒÄ]Â U‹ìj ÿ ÿuÿ h	 Àÿ Pÿ  ]ÃU‹ìì$  jÿ$ …ÀtjYÍ)£ ¾‰¾‰¾‰¾‰5¾‰=¾fŒ8¾fŒ,¾fŒ¾fŒ¾fŒ% ¾fŒ-ü½œ0¾‹E £$¾‹E£(¾E£4¾‹…ÜüÿÿÇp½  ¡(¾£,½Ç ½	 ÀÇ$½   Ç0½   jXkÀ Ç€4½   jXkÀ ‹°‰LøjXÁà ‹°‰Løh¨!èàþÿÿÉÃé2H  ƒa ‹Áƒa ÇAÈ!ÇÀ!ÃU‹ìƒìMôèÚÿÿÿhLEôPè=  ÌU‹ìƒìMôè ½ÿÿh—EôPè   ÌU‹ìƒ%<À ƒì$ƒ°j
ÿ$ …À„©  ƒeð 3ÀSVW3É}ÜS¢‹ó[‰‰w‰O3É‰W‹EÜ‹}ä‰Eô÷ntel‹Eè5ineI‰Eø‹Eà5Genu‰Eü3À@S¢‹ó[]Ü‰‹Eü‰sÇEø‰K‰SuC‹EÜ%ð?ÿ=À t#=` t=p t=P t=` t=p u‹=@ÀƒÏ‰=@Àë‹=@À‹MäjX‰Mü9Eô|/3ÉS¢‹ó[]Ü‰‰s‰K‹Mü‰S‹]à÷Ã   tƒÏ‰=@Àë‹]ð¡°ƒÈÇ<À   £°÷Á   „“   ƒÈÇ<À   £°÷Á   ty÷Á   tq3ÉÐ‰Eì‰Uð‹Eì‹Mðj^#Æ;ÆuW¡°ƒÈÇ<À   £°öÃ t;ƒÈ Ç<À   £°¸  Ð#Ø;Øu‹Eìºà   ‹Mð#Â;Âuƒ°@‰5<À_^[3ÀÉÃ3À@Ã3À9àÇ•ÀÃU‹ìì$  Sjÿ$ …Àt‹MÍ)jèù   Ç$Ì  …Üüÿÿj Pèy  ƒÄ‰…Œýÿÿ‰ˆýÿÿ‰•„ýÿÿ‰€ýÿÿ‰µ|ýÿÿ‰½xýÿÿfŒ•¤ýÿÿfŒ˜ýÿÿfŒtýÿÿfŒ…pýÿÿfŒ¥lýÿÿfŒ­hýÿÿœ…œýÿÿ‹E‰…”ýÿÿE‰… ýÿÿÇ…Üüÿÿ  ‹@üjP‰…ýÿÿE¨j Pèï  ‹EƒÄÇE¨  @ÇE¬   ‰E´ÿ( j Xÿ÷ÛE¨‰Eø…ÜüÿÿÛ‰EüþÃÿ EøPÿ …Àu„Ûujè   Y[ÉÃƒ%DÀ ÃÌÌÌÌÌÌÌÌÌÌÌÌÌh@l dÿ5    ‹D$‰l$l$+àSVW¡°1Eü3ÅP‰eèÿuø‹EüÇEüþÿÿÿ‰EøEðd£    ÃÂ  U‹ìƒìƒeô Eôƒeø Pÿ@ ‹Eø3Eô‰Eüÿ< 1Eüÿ8 1EüEìPÿ4 ‹EðMü3Eì3Eü3ÁÉÃ‹°VW¿Næ@»¾  ÿÿ;Ït…Îu&è”ÿÿÿ‹È;Ïu¹Oæ@»ë…Îu
G  ÁàÈ‰°÷Ñ_‰°^Ã3À@Â hPÀÿD ÃhPÀè  YÃ¸XÀÃ¸`ÀÃèïÿÿÿ‹Hƒ$‰Hèçÿÿÿ‹Hƒ‰HÃ¸ÜÇÃSV¾ìŠ»ìŠ;ósW‹>…ÿt
‹Ïÿ<!ÿ×ƒÆ;óré_^[ÃSV¾ôŠ»ôŠ;ósW‹>…ÿt
‹Ïÿ<!ÿ×ƒÆ;óré_^[ÃU‹ìVÿu‹ñè]¸ÿÿÇô!‹Æ^]Â U‹ìQVÿu‹ñ‰uüèþ·ÿÿÇô!‹Æ^ÉÂ U‹ìVÿu‹ñè#¸ÿÿÇè!‹Æ^]Â U‹ìV‹ñFÇ´!Pè^  öEYt
jVèÙõÿÿYY‹Æ^]Â U‹ìƒìMôÿuèˆÿÿÿh„EôPèè  ÌU‹ìQQS‹]VW‹ù¹ÿÿÿ;ÙwT‹GQPS‰Eøèõçÿÿ‹ðNQèªåÿÿSÿu‰EüP‰_‰wè×  ‹uüƒÄ‹EøÆ ƒør@Pÿ7è<åÿÿYY‰7‹Ç_^[ÉÂ èš¸ÿÿÌU‹ìƒì‹USV‹Ù¾ÿÿÿ‹ÆW‹K+Á‰Mü;Â‚   ‹C<VPW‰Eøèsçÿÿ‹ðNQè(åÿÿ‹MüƒÄƒ}ø‰{‰Eô<‰s‰}üQr/‹3VPèC  ‹}Wÿuÿuüè4  ‹EüÆ ‹Eø@PVè¢äÿÿƒÄ ëSPè  ‹uVÿuWè	  ƒÄÆ> ‹Eô_‰‹Ã^[ÉÂ èß·ÿÿÌj ¸úèÊ¸  ‹ñƒ& ÿuƒf ƒMüÿÇF   è  ‹Æè„¸  Â ÌÌÌÌÌU‹ìƒì ¡°3Å‰Eü‹E3ÒV‹ñƒì‹Ì‰uà‰uàP‰‰Q‰QèH  ÿuEäÿuPè¡  ƒÄ$‹ÎPèl·ÿÿMäèTÚÿÿ‹M‹Æ‹U‰N‹MüÇì"3Í‰V^èðÿÿÉÂ U‹ìV‹uWV‹ùèáµÿÿÇì"‹F‹V‰G‹Ç‰W_^]Â U‹ìVÿu‹ñèÈÿÿÿÇü"‹Æ^]Â j ¸$è¸  ‹ñ‰uÔ‹EMØP‰uÔèîþÿÿƒeü EØPÿu‹ÎÿuèÿÿÿMØè¯ÙÿÿÇü"‹Æè‹·  Â U‹ì‹UV‹u‹B‹N‹@;Au
‹;u°ë2À^]ÃU‹ìöEV‹ñt
jVèóÿÿYY‹Æ^]Â U‹ìV‹ñFÇ´!Pèc  öEYt
jVèÞòÿÿYY‹Æ^]Â U‹ìQSVW‹}‹Á‰Eüƒ‹_r‹?ƒûs‹÷‹øj¥¥¥¥^ë/‹Ã¾ÿÿÿƒÈ;Æw‹ðFPè¹âÿÿ‹Mü‰KQWPèé  ‹EüƒÄ‰X_‰p^[ÉÂ j ¸`èå¶  ‹u‰uÔƒeü ƒ}$ tjhô"Mèª   EØPMèå  ƒx‹HÆEür‹ QPMè…   MØènØÿÿE‹ÎPè³ØÿÿMè[Øÿÿ‹Æè=¶  ÃU‹ì‹Eƒètƒètƒètƒè…+?  jè   j ë÷jëóU‹ìƒìV‹uÿ4µ"èD  Pÿ4µ$"MìèþÿÿhL‘EìPèÐ  ÌU‹ìQS‹]W‹ù‹G‹O+Á;Øw*ƒ‰G‹Çr‹VSÿu4VèÌ  ƒÄÆ ‹Ç^ëSÿu‹ÏÿuüSèüÿÿ_[ÉÂ U‹ì‹UVrŠB„Àuù+ÖRÿuè   ^]Â U‹ìQV‹ñW‹};~w$ƒ~S‹Þr‹Wÿu‰~Sèb  ƒÄÆ; ‹Æ[ëÿuÿuüWè1ûÿÿ_^ÉÂ U‹ì‹E‹U‰‰H]Â U‹ì‹AV‹u‹V;Bu‹;Eu°ë2À^]Â U‹ìQQVWÿu‹ùÿu‹‹pEøP‹Îÿ<!‹ÏÿÖPè5ýÿÿYY_^ÉÂ ¸°ÃU‹ìÿuèE  Y‹MPèÓûÿÿ‹E]Â U‹ìVW‹yÿ1ÿu‹‹r‹Îÿ<!‹ÏÿÖ‹E_^]Â ¸ #ÃV‹ñj h   FÇ,#Pÿ\ ‹Æ^ÃV‹ñFÇD#PÿH ‹Æ^ÃU‹ì¡hÀƒè tƒèt
ƒèté"=  ƒ=ìÀ t	‹M]é»ÿÿÿ‹M]é”ÿÿÿAPÿd ÃAPÿT ÃAPÿP ÃU‹ìƒì¡°3Å‰EüS‹]V‹uW‹%ÿþÿÿ‰uèƒøu.ÿ< 9C(t‹C‹0‹Îÿ<!KÿÖÿ< ‰C(ÿC,é=  …öu`ÿ< 9C(t‹C‹0‹Îÿ<!KÿÖ‹uè‹K,A‰C,ƒøŽþ   ÷   …û   ‰K,…ö„â   ‹Fu	9F„Ò   jéÍ   ƒ~ ‹Œ   …À‚ƒ   Fu9F~yEìjPèÐ  ‹YY‹Mð;N|9Eìr9Eìu¦;Nu¡‹Eô;F}™ÿ< 9C(„aÿÿÿ‹C‹pEìPÿuèè#  YYP‹Îÿ<!KÿÖ„À…4ÿÿÿEìjPèg  ‹uèë’ÿ< 9C(„ÿÿÿ‹C‹p‹Îÿ<!KÿÖ‹uè„À„#ÿÿÿéõþÿÿjXëÿ< ‰C(3À‹Mü_^3Í[è˜êÿÿÉÃAPÿ` …À•ÀÃAPè  „ÀY•ÀÃAPÿ` …À•ÀÂ APèû  „ÀY•ÀÂ APÿX ÃAPÿL ÃU‹ìVW‹}‹G‹p‹Îÿ<!OÿÖ_^]ÃU‹ìV‹uFPè{ýÿÿƒN(ÿ‹Eƒf, Y‰^]ÃU‹ìj ÿuèµýÿÿYY]ÃU‹ìW‹}ƒo,uƒO(ÿ‹GV‹p‹Îÿ<!OÿÖ^3À_]ÃU‹ì‹M¸Ð%9tƒÀ=@(uò¸¼-]Ã‹@]ÃU‹ì‹MSV‹uW‹ù¥¥¥¥‹y…ÿy‹‹qƒê‰ƒÞ Ç Êš;‰qxè‰yë‹‹q» Êš;‹Ç;ûr‹¸ 6eÄ‹qƒÂ‰‹ÇƒÖ ‰q;û}ä‰A‹E‹ß+p+X;x}ƒêƒÞ Ã Êš;‰Y‰‰q…ö|…ÒrÖu…Ûƒ! ƒa ƒa _^‹Á[]ÃU‹ìƒì VWÿuEàÿuPè:ÿÿÿ‹ð}ð¹@B ƒÄ¥¥¥¥‹Eø?B ™÷ùiMðè  _^ÁÉÃU‹ìQQEøPè  ‹Uü3ÀEøYƒÒ - €>ÕÚÞ±ÉÃU‹ìQQV‹uWƒþu.‹}…ÿt'Sè½ÿÿÿSj h€–˜ RPè°°  ‰]ü[‰kÁd‰W[‰Gë3ö_‹Æ^ÉÃVhÌ-ÿ0 ‹ðhè-Vÿh hô-V£pÀÿh hü-V£tÀÿh h.V£xÀÿh h.V£|Àÿh h0.V£€Àÿh hD.V£„Àÿh hT.V£ˆÀÿh hh.V£ŒÀÿh h|.V£Àÿh h”.V£”Àÿh h¨.V£˜Àÿh hÈ.V£œÀÿh hà.V£ Àÿh hø.V£¤Àÿh h/V£¨Àÿh h /V£¬Àÿh h</V£°Àÿh h\/V£´Àÿh £¸Àhx/Vÿh hŒ/V£¼Àÿh h /V£ÀÀÿh h°/V£ÄÀÿh hÐ/V£ÈÀÿh hì/V£ÌÀÿh h0V£ÐÀÿh h(0V£ÔÀÿh h@0V£ØÀÿh h\0V£ÜÀÿh hx0V£àÀÿh hŒ0V£äÀÿh h¤0V£èÀÿh hÀ0V£ìÀÿh hØ0V£ðÀÿh hô0V£ôÀÿh h1V£øÀÿh h$1V£üÀÿh h81V£ Áÿh hH1V£Áÿh hX1£ÁVÿh £Á3À^ÃU‹ìV‹5ÐÀÿu…öt‹Îÿ<!ÿÖëÿ@ ^]ÃU‹ìV‹5ìÀ‹Îÿuÿ<!ÿÖ^]ÃU‹ìQ‹E‹MSV‹XW‹x‹×‰Uü‹ò…Éx-kÂƒÃÃ‹]ƒúÿt<ƒèJ9Xü};~ƒúÿu‹uüI‰Uü…ÉyÞB;÷w;Öw‹E‹M_‰p^‰‰P‰H[ÉÃèƒ5  ÌU‹ìƒìƒeè Eè3°‹M‰Eð‹E‰Eô‹E@ÇEì
h ‰Mø‰Eüd¡    ‰EèEèd£    ÿuQÿuè>  ‹È‹Eèd£    ‹ÁÉÃU‹ìƒì@S}#  u¸[g ‹M‰3À@éÑ   ƒeÀ ÇEÄ§h ¡°MÀ3Á‰EÈ‹E‰EÌ‹E‰EÐ‹E‰EÔ‹E ‰EØƒeÜ ƒeà ƒeä ‰eÜ‰màd¡    ‰EÀEÀd£    ‹Eÿ0èŸ®  Y‹M‰ÇEø   ‹E‰Eè‹E‰Eìès  ‹@‰Eü¡<!‰Eô‹MüÿUô‹Eü‰EðEèP‹Eÿ0ÿUðYYƒeø ƒ}ä td‹    ‹‹]À‰d‰    ë	‹EÀd£    ‹Eø[ÉÃU‹ìQS‹EƒÀ‰Eüd‹    ‹d£    ‹E‹]‹mü‹cüÿà[ÉÂ U‹ìQQSVWd‹5    ‰uøÇEüág j ÿuÿuüÿuÿl ‹E‹@ƒàý‹M‰Ad‹=    ‹]ø‰;d‰    _^[ÉÂ U‹ìVü‹u‹N3Îèîâÿÿj Vÿvÿvj ÿuÿvÿuè   ƒÄ ^]ÃU‹ì‹MV‹u‰èV  ‹H$‰NèK  ‰p$‹Æ^]ÃU‹ìVè:  ‹u;p$u‹vè*  ‰p$^]Ãè  ‹H$ƒÁë;ðtH‹…Àt	ëñ‹F‰ëÚè3  ÌU‹ìQSü‹E‹H3MèOâÿÿ‹E‹@ƒàft‹EÇ@$   3À@ëlëjj‹Eÿp‹Eÿp‹Eÿpj ÿu‹EÿpÿuèW  ƒÄ ‹Eƒx$ uÿuÿuè¢þÿÿj j j j j EüPh#  èdýÿÿƒÄ‹Eü‹]‹c‹k ÿà3À@[ÉÃU‹ìƒìSVWü‰Eü3ÀPPPÿuüÿuÿuÿuÿuèë  ƒÄ ‰Eø_^[‹Eø‹å]ÃU‹ìW‹}€ tH‹…ÉtBQŠA„Àuù+ÊSVYSèG#  ‹ðY…ötÿ7SVè3  ‹E‹ÎƒÄ3ö‰Æ@Vè•1  Y^[ë‹M‹‰ÆA _]ÃU‹ìV‹u€~ tÿ6èn1  Yƒ& ÆF ^]Ãjh¨‘èˆìÿÿ‹E…Àt~8csmàuvƒxupx “tx!“t	x"“uU‹H…ÉtN‹Q…Òt)ƒeü RÿpèJ   ÇEüþÿÿÿë1ÿuÿuìèC   YYÃ‹eèëäöt‹@‹…Ét‹Q‹p‹Îÿ<!ÿÖ‹Mðd‰    Y_^[ÉÃU‹ì‹MÿU]Â U‹ì€} t2VW‹}‹7>csmàu!ƒ~u~ “t~!“t~"“t_^3À]Ãè´
  ‰p‹wè©
  ‰pèy0  ÌU‹ìè˜
  ‹@$…Àt‹M9t‹@…Àuõ3À@]Ã3À]ÃU‹ì‹M‹UV‹‹qÂ…öx‹I‹‹
ÎÁ^]ÃU‹ìV‹uW‹>?RCCàt?MOCàt
?csmàtëè,
  ƒx ~è!
  ÿH_3À^]Ãè
  ‰x‹vè
  ‰pèØ/  ÌéÒ/  è  „Àu2ÀÃè‰
  „Àuè¶  ëí°Ãèä	  …À•ÀÃj è“	  Y°ÃU‹ì€} u
èŠ
  èˆ  °]Ãè|
  °ÃÌÌÌÌU‹ìV‹uW‹}‹ƒøþt‹NÏ38èëÞÿÿ‹F‹NÏ38_^]éØÞÿÿÌÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìƒìS‹]VWÆEÿ ÿ3ÇEô   èR©  ‰‹]‹Cs3°VP‰uð‰Eøè„ÿÿÿÿuèˆ  ‹EƒÄ‹{ö@fuZ‰Eä‹E‰EèEä‰Cüƒÿþti‹MøGG‹‹H‰Eì…Ét‹ÖèÙ  ±ˆMÿ…ÀxHëŠMÿ‹ûƒûþuÉ„Ét.ë ÇEô    ëƒÿþth°Vºþÿÿÿ‹Ëèü  VÿuøèóþÿÿƒÄ‹Eô_^[‹å]Ã‹E8csmàu8ƒ=h2 t/hh2è§  ƒÄ…Àt‹5h2‹Îjÿuÿ<!ÿÖ‹uðƒÄ‹E‹M‹Ðèy  ‹E9xth°V‹×‹Èè‚  ‹EVÿuø‰Xèsþÿÿ‹MìƒÄ‹Ö‹Iè#  ÌU‹ìƒì‹ESW‹}» “‰Eð…ÿt-öt‹ƒéVQ‹‹p ‹Î‹xÿ<!ÿÖ^…ÿt
öt» @™‹Eð‰EøEôPjjhcsmà‰]ô‰}üÿp _[ÉÂ ÌÌÌÌÌÌ‹L$¶D$‹×‹|$…É„<  iÀƒù †ß   ù€   ‚‹   º%@Às	óª‹D$‹úÃº%°ƒ²   fnÀfpÀ ÏƒÇƒçð+Ïù€   vL¤$    ¤$    ffGfG fG0fG@fGPfG`fGp¿€   é€   ÷Á ÿÿÿuÅëº%°s>fnÀfpÀ ƒù róóGƒÇ ƒé ƒù sì÷Á   tb|àóóG‹D$‹úÃ÷Á   tˆGƒé÷Á   uò÷Á   t‰ƒÇƒé÷Áøÿÿÿt ¤$    ›    ‰‰GƒÇƒé÷Áøÿÿÿuí‹D$‹úÃU‹ì‹E‹M;Áu3À]ÃƒÁƒÀŠ:u„ÒtìŠP:QuƒÀƒÁ„ÒuäëØÀƒÈ]ÃU‹ìÿuÿt …ÀtV‹0Pè +  ‹ÆY…öuñ^]ÃÌÌÌÌÌÌÌWV‹t$‹L$‹|$‹Á‹ÑÆ;þv;ø‚”  ƒù ‚Ò  ù€   sº%°‚Ž  éã  º%@Às	ó¤‹D$^_Ã‹Ç3Æ©   uº%°‚à  º%@À ƒ©  ÷Ç   …  ÷Æ   …¬  ºçs‹ƒév‰ºçsó~ƒévfÖ÷Æ   teºæƒ´   foNôvô‹ÿfo^ƒé0foF fon0v0ƒù0foÓf:Ùffoàf:ÂfGfoÍf:ìfo 0s·vé¯   foNøvøI fo^ƒé0foF fon0v0ƒù0foÓf:Ùffoàf:ÂfGfoÍf:ìfo 0s·vëVfoNüvü‹ÿfo^ƒé0foF fon0v0ƒù0foÓf:Ùffoàf:ÂfGfoÍf:ìfo 0s·vƒùróoƒévfëèºás‹ƒév‰ºásó~ƒévfÖ‹4r ÿà÷Ç   tŠˆIƒÆƒÇ÷Ç   uí‹Ñƒù ‚®  Áéó¥ƒâÿ$•4r ÿ$Dr Dr Lr Xr lr ‹D$^_ÃŠˆ‹D$^_ÃŠˆŠFˆG‹D$^_ÃI ŠˆŠFˆGŠFˆG‹D$^_Ã4<ƒù ‚Q  º%°‚”   ÷Ç   t‹×ƒâ+ÊŠFÿˆGÿNOƒêuóƒù ‚  ‹ÑÁéƒâƒîƒïýó¥üÿ$•àr ðr ør s s ‹D$^_ÃŠFˆG‹D$^_ÃI ŠFˆGŠFˆG‹D$^_ÃŠFˆGŠFˆGŠFˆG‹D$^_Ã÷Ç   tINOŠˆ÷Ç   uñù€   rhî€   ï€   óoóoNóoV óo^0óof@óonPóov`óo~póóOóW ó_0óg@óoPów`ópé€   ÷Á€ÿÿÿuƒù r#ƒî ƒï óoóoNóóOƒé ÷ÁàÿÿÿuÝ÷Áüÿÿÿtƒïƒî‹‰ƒé÷Áüÿÿÿuë…ÉtƒïƒîŠˆƒéuñ‹D$^_ÃëÌÌÌ‹Æƒà…À…ã   ‹ÑƒáÁêtf¤$    ‹ÿfofoNfoV fo^0ffOfW f_0fof@fonPfov`fo~pfg@foPfw`fp¶€   ¿€   Ju£…Ét_‹ÑÁê…Òt!›    óoóoNóóOv  Juåƒát0‹ÁÁét‹‰ƒÇƒÆƒéuñ‹ÈƒátŠˆFGIu÷¤$    I ‹D$^_Ã¤$    ‹ÿº   +Ð+ÊQ‹Â‹Èƒát	ŠˆFGIu÷Áèt‹‰vHuóYééþÿÿÌÌÌÌÌÌÌÌÌÌÌÌU‹ì‹E…Àt=ÁtPèø%  Y]Â U‹ì¡ °ƒøÿt'V‹u…öuPèé  ‹ð¡ °Yj Pè  YYVè±ÿÿÿ^]Ãè	   …À„&  Ãƒ= °ÿu3ÀÃSWÿx ÿ5 °‹øèŸ  ‹ØYƒûÿt…ÛuYjÿÿ5 °èÁ  YY…Àu3ÛëBVj(jè8'  ‹ðYY…ötVÿ5 °è™  YY…Àu3ÛSÿ5 °è…  YYë‹Þ3öVè+%  Y^Wÿ| _‹Ã[ÃhPu è®  £ °Yƒøÿu2ÀÃhÁPèF  YY…Àuè   ëå°Ã¡ °ƒøÿtPè°  ƒ °ÿY°Ãjhp’èôßÿÿ3Û‹E‹H…É„
  8Y„  ‹P…Òu9ò   ‹‹u…ÉxƒÆò‰]ü‹}„Éy öt¡Á‰Eä…Àt‹Èÿ<!ÿUä‹Èë‹EöÁt‹H…É„¹   …ö„±   ‰GPQë7öt=ƒx „™   …ö„‘   ÿwÿpVèøÿÿƒÄƒuVƒ> tQGPÿ6èÌóÿÿYY‰ë@‹H9_u#…ÉtZ…ötVÿwGPQè©óÿÿYYPVèHøÿÿƒÄë…Ét7…öt3öj [•ÃC‰]àÇEüþÿÿÿ‹Ãë3À@Ã‹eèë3À‹Mðd‰    Y_^[ÉÃèé#  Ìjh’è¶Þÿÿ‹U‹Mƒ: }‹ùëyzƒeü ‹uVRQ‹]SèŽþÿÿƒÄƒèt!ƒèu4FPÿsèóÿÿYYjPÿvWèw  ëFPÿsèñòÿÿYYPÿvWèM  ÇEüþÿÿÿ‹Mðd‰    Y_^[ÉÃ3À@Ã‹eèèP#  ÌU‹ìƒ}  S‹]VW‹}tÿu SWÿuèHÿÿÿƒÄ‹E,…Àu‹ÇÿuPèïÿÿ‹u$ÿ6ÿuÿuWèb	  ‹F@PÿuWè°  h   ÿu(ÿsÿuÿuWÿuèÕ  ƒÄ8…ÀtWPè¥îÿÿ_^[]ÃU‹ìƒìdSVW‹}3ÀWÿu‰EðÿuˆEèèF  ‹ÈƒÄ‰MøƒùÿŒs  ;Oj  ‹];csmà…÷   ƒ{…í   { “t{!“t{"“…Î   3ö9s…Ã   è9üÿÿ9p„³  è+üÿÿ‹Xè#üÿÿÆEè‹@‰Eü…Û„ú  ;csmàu*ƒ{u${ “t{!“t	{"“u	9s„È  èÚûÿÿ9ptbèÐûÿÿ‹@‰EôèÅûÿÿÿuôS‰pè	  YY„Àu@‹}ô97Ž0  ‹Gh¹‹Lè  „À…  ‹EðƒÆ@‰Eð;  ëÓ‹U‰Uüë‹Uü‹Mø3À‰}Ð‰EÔ;csmà…«  ƒ{…¡  { “t{!“t{"“…‚  ‹u$9G†  ÿu EÐWÿuQPEÀPè1ëÿÿ‹UÄƒÄ‹EÀ‰EØ‰Uô;UÌƒå   kÊ‰Mä‹ }œj‹p‹EøñYó¥9Eœ¥   ;E œ   3É‰Mð9M¨„Ž   ‹C‹@‹ƒÀ‰Eà‹E¬‰UÜ‰Eì‹ð}°¥¥¥¥‹}à‹ò…ö~&ÿsE°ÿ7Pè­  ƒÄ…Àu"NƒÇ…öã‹Mð‹Eì‹UÜAƒÀ‰Mð‰Eì;M¨u¹ë+ÿuEœÿuèÿu$ÿu Pÿ7E°PÿuÿuÿuüÿuSèüüÿÿƒÄ0‹Uô‹MäB‹EØƒÁ‰Uô‰Mä;UÌ‚'ÿÿÿ‹}‹u$€} t
jSè^îÿÿYY‹%ÿÿÿ=!“rlƒ u‹G Áè¨t\ƒ}  uV‹G Áè¨tèÏùÿÿ‰XèÇùÿÿ‹Mü‰HëGÿwSè
  YY„Àt]ë&9Gv!8E…‰   ÿu$ÿu QWÿuRÿuSèz   ƒÄ èƒùÿÿƒx uf_^[ÉÃèK  jSèÅíÿÿYYMÄè1  h¬’EÄPèOñÿÿèNùÿÿ‰XèFùÿÿ‹Mü‰H…öu‹uSVèGëÿÿWÿuÿuèz  Wè1  ƒÄPèâ  è&  ÌU‹ìƒì8S‹];  €„  VWèôøÿÿ3ÿ9xtFWÿ€ ‹ðèßøÿÿ9pt3;MOCàt+;RCCàt#ÿu$ÿu ÿuÿuÿuÿuSè¡éÿÿƒÄ…À…Á   ‹E‰Eì‰}ð9x†´   ÿu PÿuEìÿuPEÜPè èÿÿ‹UàƒÄ‹EÜ‰Eô‰Uü;Uèƒ€   kÊ‰Mø‹ }Èj‹p‹EñYó¥9EÈN;EÌI‹MÔ‹EØÁáƒÀðÁ‹H…Ét€y u.ö @u)j jÿu$MÈÿu Qj PÿuÿuÿuÿuSèÆúÿÿ‹UüƒÄ0‹MøB‹EôƒÁ‰Uü‰Mø;Uèr†_^[ÉÃèð  ÌU‹ì‹USVW‹B…ÀtvH€9 tnö€‹}töua‹_3ö;Ãt0CŠ:u„ÛtŠY:XuƒÁƒÀ„Ûuä‹ÆëÀƒÈ…Àt3Àë+ötöt‹Eö tötö töt3öF‹Æë3À@_^[]ÃU‹ìSVWÿuè©  Yè9÷ÿÿ‹M3ö‹U»ÿÿÿ¿"“9p u":csmàt:&  €t‹#Ã;Çr
öA …­   öBft&9q„ž   9u…•   Qÿuÿuè0  ƒÄé   9qu‹#Ã=!“r9qu;Çrh‹A Áè¨t^:csmàu:ƒzr49zv/‹B‹p…öt%¶E$Pÿu ÿuQÿu‹ÎÿuÿuRÿ<!ÿÖƒÄ ëÿu ÿuÿu$QÿuÿuÿuRè›ùÿÿƒÄ 3À@_^[]ÃU‹ìVÿu‹ñè‘ÿÿÇp2‹Æ^]Â ƒa ‹Áƒa ÇAx2Çp2ÃU‹ì‹EƒÀPAPèÍïÿÿ÷ØYÀYþÀ]Â j<hð‘èÛÖÿÿ‹E‰EäƒeÀ ‹]‹Cü‰EÐ‹}ÿwE´PèdèÿÿYY‰EÌèÁõÿÿ‹@‰EÈè¶õÿÿ‹@‰EÄè«õÿÿ‰xè£õÿÿ‹M‰Hƒeü 3À@‰E¼‰Eüÿu ÿuÿuÿuSèæÿÿƒÄ‹Ø‰]äƒeü é‘   ÿuìèo  YÃ‹eèè[õÿÿƒ`  ‹}‹G‰EØWÿu‹]Sèì  ƒÄ‰Eà‹W3É‰MÔ9Ov:kÙ‰]Ü;D‹]~"‹}Ü;D‹}kÁ‹D@‰Eà‹MØ‹Á‰Eàë	A‰MÔ;OrÆPWj SèV  ƒÄ3Û‰]ä!]ü‹}ÇEüþÿÿÿÇE¼    è   ‹Ã‹Mðd‰    Y_^[ÉÃ‹}‹]ä‹EÐ‹M‰AüÿuÌè]çÿÿYèšôÿÿ‹MÈ‰Hèôÿÿ‹MÄ‰H?csmàuKƒuE “t!“t	"“u*ƒ}À u$…Ût ÿwè®éÿÿY…Àtƒ}¼ •À¶ÀPWè’èÿÿYYÃj¸‡è¨‘  è$ôÿÿƒx uƒeü è£  èôÿÿ‹Mj j ‰Hèýëÿÿè  ÌÌÌÌÌÌU‹ì‹E‹ 8csmàu6ƒxu0x “tx!“t	x"“uƒx uèºóÿÿ3ÉA‰H ‹Á]Ã3À]ÃU‹ìjÿÿuÿuÿuè   ƒÄ]ÃjhÈ‘èvÔÿÿÿuÿuÿuè%  ƒÄ‹ð‰uäèmóÿÿÿ@ƒeü ;uthƒþÿŽ¦   ‹};wš   ‹G‹ð‰MàÇEü   ƒ|ð t0QWÿuèó  ƒÄh  ÿu‹Gÿtðè2  ëÿuìèµèÿÿYÃ‹eèƒeü ‹uà‰uäë“ÇEüþÿÿÿè'   ;uu6Vÿuÿuè¤  ƒÄ‹Mðd‰    Y_^[ÉÃ‹uäèÁòÿÿƒx ~è¶òÿÿÿHÃèÁ  ÌU‹ìƒìSV‹uW…ö„€   ‹>3Û…ÿ~q‹E‹Ó‰]ü‹@‹@‹ƒÀ‰Mð‰Eè‹È‹Eð‰Mô‰Eø…À~;‹FÂ‰Eì‹Uÿrÿ1PèwúÿÿƒÄ…Àu‹Eø‹MôHƒÁ‰Eø…À‰Mô‹EìÔë³‹Uü‹EèƒÂ‰Uüƒïu¨_^ŠÃ[ÉÃè'  ÌU‹ìÿu‹MÿU]Â U‹ìÿu‹MÿuÿU]Â U‹ì‹E‹@]ÃÌÌU‹ìƒìSQ‹EƒÀ‰Eü‹EUÿu‹M‹müè  VWÿÐ_^‹Ý]‹MU‹ëù   u¹   Qè{  ]Y[ÉÂ U‹ì¡<!=ÕV td‹   ‹E‹€Ä   ;Ar;AvjYÍ)]ÃVW¿<Á3öj h   Wè—  ƒÄ…ÀtÿTÁƒÆƒÇƒþrÛ°ëè   2À_^ÃV‹5TÁ…öt kÆW¸$ÁWÿd ÿTÁƒïƒîuë_°^ÃÌÌÌÌÌÌÌÌÌSVW‹T$‹D$‹L$URPQQhP… dÿ5    ¡°3Ä‰D$d‰%    ‹D$0‹X‹L$,3‹pƒþþ„F   ‹T$4ƒúþt;ò†5   4v\³‹‰Hƒ{ …Àÿÿÿh  ‹Cèa  ¹   ‹Cèt  é¡ÿÿÿd    ƒÄ_^[ÃÌ‹L$÷A   ¸   t3‹D$‹H3ÈèšÅÿÿU‹hÿpÿpÿpè.ÿÿÿƒÄ]‹D$‹T$‰¸   ÃÌÌÌÌÌÌÌÌÌÌUVWS‹ê3À3Û3Ò3ö3ÿÿÑ[_^]ÃÌÌÌÌÌÌÌÌÌ‹ê‹ñ‹ÁjèÃ  3À3Û3É3Ò3ÿÿæÌÌÌÌÌÌÌU‹ìSVWj Rhõ… Qÿl _^[]ÃÌÌÌÌÌÌU‹l$RQÿt$è þÿÿƒÄ]Â U‹ìQSVW‹}ëo‹…”Á‹3…ötƒþÿuvëV‹…(<h   j P‰Eüÿœ ‹ð…öuGÿx ƒøWu(‹uüjhÀ<VèÆ  ƒÄ…Àtj j Vÿœ ‹ð…öuƒÈÿ‡ƒÇ;}uŒ3À_^[ÉÃ‹Æ‡…ÀtVÿ˜ ‹ÆëèU‹ì‹EVW<… Á‹ƒÎÿ;Æt+…Àu)ÿuÿuè?ÿÿÿYY…ÀtÿuPÿh …Àt‹È‡ë‡73À_^]ÃU‹ìVhØ<hÐ<hè-j èÿÿÿ‹ðƒÄ…ötÿu‹Îÿ<!ÿÖ^]Ã^]ÿ%ˆ U‹ìVhà<hØ<hô-jèbÿÿÿƒÄ‹ðÿu…öt‹Îÿ<!ÿÖëÿ” ^]ÃU‹ìVhè<hà<hü-jè'ÿÿÿƒÄ‹ðÿu…öt‹Îÿ<!ÿÖëÿŒ ^]ÃU‹ìVhð<hè<h.jèìþÿÿƒÄ‹ðÿuÿu…öt‹Îÿ<!ÿÖëÿ ^]ÃU‹ìVhø<hð<h.jè®þÿÿ‹ðƒÄ…ötÿu‹Îÿuÿuÿ<!ÿÖëÿuÿuÿ„ ^]ÃVèlíÿÿ‹p…öt
‹Îÿ<!ÿÖè.  ÌU‹ì‹E‹Mx€   ¾A]Ã‹A]ÃU‹ì‹E‹M‰H]ÃÌÌÌÌÌÌÌÌSQ»0°é   ÌÌÌÌSQ»0°‹L$‰K‰C‰kUQPXY]Y[Â ÌÿÐÃ‹ÿU‹ìSW‹ù‹MÆG _…Ét	‹‰‹Aëƒ=Ã u¡¸±‰¡¼±‰CëAVèu  ‰wSP‹HL‰‹HH‰è±  Vÿ7èÖ  ‹ƒÄ‹P  ^¨uƒÈ‰P  ÆG‹Ç_[]Â ‹ÿU‹ìV‹uW‹}¶A¿ƒøwƒÁ ¶FB¿ƒøwƒÂ ‹ÁG+Âu…ÉuØ_^]Ã‹ÿU‹ìƒ=Ã u)ƒ} uèc  Ç    è_  ¸ÿÿÿ]Ãƒ} tã]éÿÿÿj ÿuÿuè   ƒÄ]Ã‹ÿU‹ìƒìV‹u…öuè  Ç    è  ¸ÿÿÿëdW‹}…ÿuèÿ  Ç    èû  ¸ÿÿÿëDSÿuMðè©þÿÿ‹Eô‹˜”   ¶F¶Š‹Ñ¶ÀG¶+Ðu…Éuä€}ü [t
‹Mðƒ¡P  ý‹Â_^ÉÃ‹ÿU‹ìì(  ¡°3Å‰Eüƒ}ÿWt	ÿuèÌÿÿYjP…àüÿÿj Pè•ãÿÿhÌ  …0ýÿÿj Pè‚ãÿÿ…àüÿÿƒÄ‰…Øüÿÿ…0ýÿÿ‰…Üüÿÿ‰…àýÿÿ‰Üýÿÿ‰•Øýÿÿ‰Ôýÿÿ‰µÐýÿÿ‰½ÌýÿÿfŒ•øýÿÿfŒìýÿÿfŒÈýÿÿfŒ…ÄýÿÿfŒ¥ÀýÿÿfŒ­¼ýÿÿœ…ðýÿÿ‹E‰…èýÿÿE‰…ôýÿÿÇ…0ýÿÿ  ‹@ü‰…äýÿÿ‹E‰…àüÿÿ‹E‰…äüÿÿ‹E‰…ìüÿÿÿ( j ‹øÿ …ØüÿÿPÿ …Àu…ÿuƒ}ÿt	ÿuè
ËÿÿY‹Mü3Í_è¿ÿÿÉÃ‹ÿU‹ì‹E£¸Á]Ã‹ÿU‹ìVè&  …Àt)‹°\  …ötÿuÿuÿuÿuÿu‹Îÿ<!ÿÖƒÄ^]Ãÿu‹5°‹Îÿu35¸ÁƒáÿuÓÎÿuÿu…öuÊè.   Ì3ÀPPPPPèÿÿÿƒÄÃ‹ÿV3öVVVVVè}ÿÿÿƒÄVVVVVè   Ìjÿ$ …ÀtjYÍ)Vj¾ ÀVjèþÿÿƒÄVÿ Pÿ  ^Ã‹ÿU‹ì‹E£¼Á]Ã‹ÿU‹ìVè"   ‹ð…ötÿu‹Îÿ<!ÿÖY…Àt3À@ë3À^]Ãjhè’èõÉÿÿƒeä j èO  Yƒeü ‹5°‹Îƒá35¼ÁÓÎ‰uäÇEüþÿÿÿè   ‹Æ‹Mðd‰    Y_^[ÉÃ‹uäj èT  YÃ‹ÿU‹ì]é^  ‹ÿU‹ì¸csmà9Et3À]ÃÿuPè   YY]Ã‹ÿU‹ìQSVWè›  ‹ð…ö„9  ‹3Û‹Ê‚   ;Ðt‹}99t	ƒÁ;Èuõ‹Ë…É„  ‹y…ÿ„  ƒÿu3À‰Y@éø   ƒÿuƒÈÿéë   ‹F‰Eü‹E‰Fƒy…·   B$Plë‰XƒÀ;Âuö‹^¸‘  À9wGt>9  Àt/9Ž  Àt 9  Àt9  À‹Ãub¸   ëX¸†   ëQ¸ƒ   ëJ¸‚   ëC¸„   ë<9’  Àt/9“  Àt 9´ Àt9µ À‹Ãu¸   ë¸Ž   ë¸…   ë¸Š   ‰FPj‹Ïÿ<!ÿ×Y‰^ëÿq‰Y‹Ïÿ<!ÿ×‹EüY‰Féÿÿÿ3À_^[ÉÃjh(“èÈÿÿ‹Eÿ0èq  Yƒeü ‹Mè*   ÇEüþÿÿÿè   ‹Mðd‰    Y_^[ÉÂ ‹Eÿ0è„  YÃjh“èÉÇÿÿ‹ñ€=ÈÁ …–   3À@¹ÀÁ‡3Û‰]ü‹‹ …Àu,‹=°‹Ïƒá¡ÄÁ;Çt3øÓÏSSS‹Ïÿ<!ÿ×hèÂë
ƒøuhôÂèÖ	  YÇEüþÿÿÿ‹9uhx!hh!è§  YYh€!h|!è–  YY‹F9uÆÈÁ‹FÆ ‹Mðd‰    Y_^[ÉÃ‹Eì‹ ÿ0è   ƒÄÃ‹eèèæ  Ì‹ÿU‹ì3À}csmà”À]Ã‹ÿU‹ìƒìƒ} uè“   „Àt	ÿuèÊ   YEÆEÿ ‰EèMþE‰EìEÿj‰EðX‰Eø‰EôEøPEèPEôPèsþÿÿƒ} tÉÃÿuè   Ì‹ÿU‹ìèŒ  ƒøt d¡0   ‹@hÁè¨uÿuÿ Pÿ  ÿuèN   Yÿuÿ  Ìj ÿ0 …Àt4¹MZ  f9u*‹H<È9PE  u¸  f9Auƒytvƒ¹è    t°Ã2ÀÃ‹ÿU‹ìQƒeü EüPh”=j ÿ¤ …Àt#Vh¬=ÿuüÿh ‹ð…ötÿu‹Îÿ<!ÿÖ^ƒ}ü t	ÿuüÿ˜ ÉÃ‹ÿU‹ì‹E£ÄÁ]Ãjj j èªþÿÿƒÄÃ‹ÿU‹ìj jÿuè•þÿÿƒÄ]Ã¡ÀÁÃ‹ÿU‹ìƒìS‹]…Ûu3Àé  Vƒûtƒûtè¥  j^‰0è¢úÿÿ‹Æéú   Wèü$  h  ¾ÐÁ3ÿVWè0  ¡ˆÄƒÄ‰5xÄ‰Eð…Àt€8 u‹Æ‰uðMô‰}üQMü‰}ôQWWPè°   jÿuôÿuüè  ‹ðƒÄ …öuè+  j_‰8ë2EôPEüP‹Eü†PVÿuðèv   ƒÄƒûu‹EüH£|Ä‹Æ‹÷£€Ä‹ßëJEø‰}øPVè‡  ‹ØYY…Ût‹Eøë&‹Uø‹Ï‹Â9:t@A98uø‹Ç‰|Ä‰Eø‹ß‰€ÄPèí  Y‰}øVèã  Y‹Ã_^[ÉÃ‹ÿU‹ìQ‹ES‹]V‹uWƒ# ‹}Ç    ‹E…Àt‰0ƒÀ‰E2ÉˆMÿ€?"u„É°"”ÁGˆMÿë5ÿ…ötŠˆFŠGˆEþ¾ÀPèÌ&  Y…Àtÿ…ötŠˆFGŠEþ„ÀtŠMÿ„Éuµ< t<	u­…ötÆFÿ ëOÆEÿ Š„À„Â   < t<	uGŠëó„À„­   ‹M…Ét‰1ƒÁ‰M‹Eÿ 3ÒB3ÀëG@Š€ù\t÷€ù"u.¨uŠMÿ„Ét€"uGëŠMÿ3Ò„É”EÿÑèëH…ötÆ\Fÿ…ÀuñŠ„Àt=€}ÿ u< t3<	t/…Òt%…ötˆFŠ¾ÀPèò%  Y…ÀtGÿ…ötŠˆFÿGévÿÿÿ…ötÆ Fÿé4ÿÿÿ‹M_^[…Étƒ! ‹Eÿ ÉÃ‹ÿU‹ìV‹uþÿÿÿ?s9ƒÈÿ‹M3Ò÷u;Ès*¯MÁæ‹Æ÷Ð;ÁvjPèÐ  j ‹ðè$  ƒÄ‹Æë3À^]Ã‹ÿU‹ì]éüüÿÿƒ=ØÂ t3ÀÃVWè#"  èß&  ‹ð…öuƒÏÿë$Vè*   Y…ÀuƒÏÿë£äÂ3ÿ£ØÂj èÇ  YVèÀ  Y‹Ç_^Ã‹ÿU‹ìQQS‹]3ÒVW‹óŠë<=tB‹ÎyŠA„Àuù+ÏFñŠ„ÀuäBjPè!  ‹øYY…ÿtn‰}üëR‹ËqŠA„Àuù+ÎA‰Eø€ú=t7jPèó  ‹ðYY…öt1SÿuøVèO  ƒÄ…Àu@‹Eüj ‰0ƒÀ‰Eüè%  ‹EøYØŠ„Òu¨ëWè'   j è
  YY3ÿj èÿ  Y‹Ç_^[ÉÃ3ÀPPPPPèÚöÿÿÌ‹ÿU‹ìV‹u…öt‹W‹þëPèÐ  ‹Y…ÀuðVèÀ  Y_^]Ã‹ÿU‹ìV‹ñW~ë‹MVÿ<!ÿUYƒÆ;÷uë_^]Â ‹ÿU‹ì‹E‹ ;äÂtPèÿÿÿY]Ã‹ÿU‹ì‹E‹ ;àÂtPèuÿÿÿY]Ãhž• ¹ØÂè’ÿÿÿh¹• ¹ÜÂèƒÿÿÿÿ5äÂèIÿÿÿÿ5àÂè>ÿÿÿYYÃéþÿÿjhh“ètÀÿÿƒeä ‹Eÿ0èË  Yƒeü ‹Mè×  ‹ð‰uäÇEüþÿÿÿè   ‹Æ‹Mðd‰    Y_^[ÉÂ ‹uä‹Eÿ0èÔ  YÃjhH“èÀÿÿƒeä ‹Eÿ0èp  Yƒeü ‹MèS   ‹ð‰uäÇEüþÿÿÿè   ‹Æ‹Mðd‰    Y_^[ÉÂ ‹uä‹Eÿ0èy  YÃ‹ÿU‹ì¡°ƒàj Y+È‹EÓÈ3°]Ã‹ÿU‹ìƒì‹Á‰EøSV‹ W‹0…ö„  ¡°‹È‹ƒá‹~3Ø‹v3ø3ðÓÏÓÎÓË;þ…   +ó¸   Áþ;ðw‹Æ<0…ÿuj _;þrjWSèP$  j ‰EüèØ  ‹MüƒÄ…Éu$j~WSè0$  j ‰Eüè¸  ‹MüƒÄ…É„€   ±‹Ù‰Eü4¹¡°‹}ü‹Ï‰Eô‹Æ+ÇƒÀÁè;÷Ò÷Ò#Ðt‹}ô3À@‰9I;Âuö‹}ü‹Eø‹@ÿ0èõþÿÿS‰èíþÿÿ‹]ø‹‹	‰GPèÛþÿÿ‹V‹	‰AèÎþÿÿ‹ƒÄ‹	‰A3ÀëƒÈÿ_^[ÉÃ‹ÿU‹ìƒìS‹ÙW‰]ì‹‹8…ÿuƒÈÿé·   ‹°‹ÊV‹7ƒá‹3ò3úÓÎÓÏ…ö„“   ƒþÿ„Š   ‰Uü‰}ô‰uøƒï;þrT‹;Eütò3Â‹UüÓÈ‹È‰‰Eðÿ<!ÿUð‹‹°‹Êƒá‹ ‹‹@3ÚÓË3ÂÓÈ;]ø‰]ð‹]ìu;Eôt¯‹uð‹ø‰Eôë¢ƒþÿtVèj  ‹°Y‹‹ ‰‹‹ ‰P‹‹ ‰P3À^_[ÉÃ‹ÿU‹ìÿuhèÂèZ   YY]Ã‹ÿU‹ìƒìjE‰EôMÿX‰Eø‰EðEøPEôPEðPèçüÿÿÉÃ‹ÿU‹ì‹M…ÉuƒÈÿ]Ã‹;Au¡°‰‰A‰A3À]Ã‹ÿU‹ìƒìE‰EìMÿjE‰EðX‰Eø‰EôEøPEìPEôPèæüÿÿÉÃÇÃ ±°ÃhèÂèÿÿÿÇ$ôÂèÿÿÿY°Ã°Ãèüÿÿ°Ã‹ÿV‹5°Vè·ñÿÿVè…òÿÿVè*  Vè),  Vè÷ÿÿƒÄ°^Ãj èïÑÿÿYÃ‹ÿU‹ìQhlÄMÿèT   °ÉÃ‹ÿVÿ5ˆÇè  ÿ5ŒÇ3ö‰5ˆÇè  ÿ5€Ä‰5ŒÇè÷  ÿ5„Ä‰5€Äèæ  ƒÄ‰5„Ä°^Ã‹ÿU‹ìV‹uƒÉÿ‹ðÁuW¿È±9>t
ÿ6è´  Y‰>_^]Â h@>hÀ=è¸'  YYÃè#	  …À•ÀÃè•  °Ã‹ÿU‹ì€} tƒ=Ã tè.  °]Ãh@>hÀ=èÞ'  YY]Ã‹ÿU‹ìÿuè¹	  Y°]Ã‹ÿU‹ìQ‹ESV‹u+ÆƒÀW3ÿÁè9uÛ÷Ó#Øt‹‰Eü…Àt‹Èÿ<!ÿUüƒÆG;ûuä_^[ÉÃ‹ÿU‹ìV‹uWë‹>…ÿt‹Ïÿ<!ÿ×…Àu
ƒÆ;uuä3À_^]Ã‹ÿU‹ìQÿuÇEü    ‹Eüè¹  YÉÃjhˆ“è
»ÿÿèÝ  ‹p…ötƒeü ‹Îÿ<!ÿÖë3À@Ã‹eèÇEüþÿÿÿè   Ìèø'  …Àtjè2(  Yö@°t"jÿ$ …ÀtjYÍ)jh  @jèWîÿÿƒÄjè	õÿÿÌ¡ ÃVj^…Àu¸   ë;Æ}‹Æ£ ÃjPè²
  j £Ãè  ƒÄƒ=Ã u+jV‰5 ÃèŒ
  j £ÃèÝ
  ƒÄƒ=Ã uƒÈÿ^ÃW3ÿ¾H°j h   F Pè…"  ¡Ã‹×Áú‰4¸‹Çƒà?kÈ8‹•pÅ‹Dƒøÿt	ƒøþt…ÀuÇFþÿÿÿƒÆ8Gþð°u¯_3À^Ã‹ÿVè,  è,  3ö¡Ãÿ4è¤,  ¡ÃY‹ƒÀ Pÿd ƒÆƒþuØÿ5Ãè,
  ƒ%Ã Y^Ã‹ÿU‹ì‹EƒÀ PÿT ]Ã‹ÿU‹ì‹EƒÀ PÿX ]Ã‹ÿU‹ì]é’	  ‹ÿU‹ì‹UV…Òt‹M…Ét
‹u…öuÆ è‡  j^‰0è„îÿÿ‹Æ^]ÃW‹ú+òŠ>ˆG„Àtƒéuñ_…Éuˆ
èX  j"ëÏ3öëÓ‹ÿU‹ì‹MA=   w‹E·H#E]Ã3À]ÃÌÌÌSV‹L$‹T$‹\$÷ÃÿÿÿÿtP+Ê÷Â   t¶:uH…Àt:Bƒëv4öÂué%ÿ  =ü  wÚ‹;uÓƒëv°ÿþþþƒÂ÷Ð#Æ©€€€€tÑ3À^[ÃëÌÌÌÀƒÈ^[Ã‹ÿU‹ì‹E…Àu]Ã‹M‹UVƒèt·2f…ötf;1uƒÂƒÁëæ··	+Á^]Ã‹ÿU‹ì‹M3À;Å@>t'@ƒø-rñAíƒøwjX]ÃDÿÿÿjY;ÈÀ#ÁƒÀ]Ã‹ÅD>]Ã‹ÿU‹ìVè   ‹MQ‰è§ÿÿÿY‹ðè   ‰0^]Ãèâ  …Àu¸ô°ÃƒÀÃèÏ  …Àu¸ð°ÃƒÀÃjh¨“è†·ÿÿ‹Eÿ0èá  Yƒeü ‹E‹ ‹ ‹@Hðÿ ÇEüþÿÿÿè   ‹Mðd‰    Y_^[ÉÂ ‹Eÿ0èï  YÃjhè“è4·ÿÿ‹Eÿ0è  Yƒeü ‹E‹ ‹ ‹HH…ÉtƒÈÿðÁuùÈ±tQè   YÇEüþÿÿÿè   ‹Mðd‰    Y_^[ÉÂ ‹Eÿ0è„  YÃjh”èÉ¶ÿÿ‹Eÿ0è$  Yƒeü j ‹E‹ ÿ0è  YYÇEüþÿÿÿè   ‹Mðd‰    Y_^[ÉÂ ‹Eÿ0è/  YÃjhÈ“èt¶ÿÿ‹Eÿ0èÏ  Yƒeü ‹M‹A‹ ÿ0‹ÿ0è³  YYÇEüþÿÿÿè   ‹Mðd‰    Y_^[ÉÂ ‹Eÿ0èÕ  YÃ‹ÿU‹ìƒì‹E3ÉAjC‰H‹EÇ ø<‹E‰ˆP  ‹EYjÇ@HÈ±‹Ef‰Hl‹Ef‰ˆr  Mÿ‹Eƒ L   E‰EðX‰Eø‰EìEøPEðPEìPè&þÿÿE‰EôMÿjE‰EøX‰Eì‰EðEìPEôPEðPèÿÿÿÉÃ‹ÿU‹ìƒ} tÿuè   ÿuè  YY]Â ‹ÿU‹ì‹Eƒì‹ùø<t
Qèñ  ‹EYÿp<èå  ‹Eÿp0èÚ  ‹Eÿp4èÏ  ‹Eÿp8èÄ  ‹Eÿp(è¹  ‹Eÿp,è®  ‹Eÿp@è£  ‹EÿpDè˜  ‹Eÿ°`  èŠ  ƒÄ$E‰EôMÿjX‰Eø‰EðEøPEôPEðPè„ýÿÿjE‰EôMÿX‰Eð‰EøEðPEôPEøPèÌýÿÿÉÃ‹ÿU‹ìV‹uƒ~L t(ÿvLè©+  ‹FLY;Ãt= ±tƒx uPè¿)  Y‹E‰FL^…ÀtPè0)  Y]Ã¡ø°ƒøÿt!VPè3  ‹ð…ötj ÿ5ø°è_  Vèþÿÿ^Ã‹ÿSVWÿx ‹ð¡ø°ƒøÿtPèû  ‹ø…ÿtƒÿÿux3Û‹ûët¡ø°jÿPè  …Àtéhd  jè   ‹øYY…ÿu3ÛSÿ5ø°èö  Sèa  YëÀWÿ5ø°èá  …Àu3ÛSÿ5ø°èÏ  Wë×hÃWèlýÿÿj è+  ƒÄ‹ßVÿ| ÷ßÿ#ût‹Ç_^[Ãè’øÿÿÌ¡ø°VƒøÿtPèJ  ‹ð…ötƒþÿtxën¡ø°jÿPèo  …Àtehd  jès  ‹ðYY…öuPÿ5ø°èK  Vè¶  Yë<Vÿ5ø°è6  …ÀuPÿ5ø°è&  VëÙhÃVèÃüÿÿj è‚  ƒÄ…öt‹Æ^Ãèø÷ÿÿÌ‹ÿSVWÿx ‹ð¡ø°ƒøÿtPè¤  ‹ø…ÿtƒÿÿux3Û‹ûët¡ø°jÿPèÅ  …Àtéhd  jèÉ  ‹øYY…ÿu3ÛSÿ5ø°èŸ  Sè
  YëÀWÿ5ø°èŠ  …Àu3ÛSÿ5ø°èx  Wë×hÃWèüÿÿj èÔ  ƒÄ‹ßVÿ| ÷ßÿ#û‹Ç_^[Ãh¡ è„  £ø°ƒøÿu2ÀÃè/ÿÿÿ…Àu	Pè   Yëë°Ã¡ø°ƒøÿtPè‘  ƒø°ÿ°Ã‹ÿU‹ìV‹u‹;Ãt‹M¡è¶…P  uèP)  ‰^]Ã‹ÿU‹ìV‹u‹;lÄt‹M¡è¶…P  uè’  ‰^]Ãjh(”èp±ÿÿ‹Eÿ0èË   Yƒeü ¾Ã¿ ±‰uäþÃt9>tWVèd)  YY‰ƒÆëáÇEüþÿÿÿè   ‹Mðd‰    Y_^[ÉÂ ‹Eÿ0è½   YÃ3À¹Ã@‡Ã‹ÿU‹ìƒìjX‰EøMÿ‰EôEøPEÿPEôPèbÿÿÿÉÃ‹ÿVW¿Ã3öj h   Wè5  …Àtÿ`ÄƒÆƒÇþP  rÛ°ë
j è   Y2À_^Ã‹ÿU‹ìkEÃPÿT ]Ã‹ÿV‹5`Ä…öt kÆW¸øÂWÿd ÿ`Äƒïƒîuë_°^Ã‹ÿU‹ìkEÃPÿX ]Ã‹ÿU‹ìV‹uƒþàw0…öuFëè;,  …Àt VèêåÿÿY…ÀtVj ÿ5hÅÿ¬ …ÀtÙëèTøÿÿÇ    3À^]Ã‹ÿU‹ìQd¡0   V3ö‰uü‹@9p|EüPèÞ  ƒ}üt3öF‹Æ^ÉÃ‹ÿU‹ìV‹u…ötjà3ÒX÷ö;Er4¯u…öuFëè­+  …Àt Vè\åÿÿY…ÀtVjÿ5hÅÿ¬ …ÀtÙëèÆ÷ÿÿÇ    3À^]Ã‹ÿU‹ìƒ} t-ÿuj ÿ5hÅÿ° …ÀuVè•÷ÿÿ‹ðÿx Pè÷ÿÿY‰^]Ã‹ÿU‹ì‹E;EvƒÈÿ]ÃÀ÷Ø]Ã‹ÿU‹ìV‹uW…öu‹u‹Îè¼  3ÿ‰~‰~‰~é„   3ÿ€> u‹u9~uj‹Îèê  …Àuj‹F3Éf‰ëÒWWjÿVj	ÿuèÑ  ƒÄ…Àuÿx PèÃöÿÿYèóöÿÿ‹ ë4‹};GvP‹Ïè   …Àu ÿwÿwjÿVj	ÿuè  ƒÄ…Àt¼H‰G3À_^]Ã‹ÿU‹ìSV‹u…öu‹u‹Îè
  3Û‰^‰^‰^3Àé¡   3Ûf9u ‹u9^uj‹Îèú  …À…   ‹FˆëÏSSSSjÿVSÿuè—  ƒÄ …Àuÿx PèöÿÿYè=öÿÿ‹ ëMW‹};GvP‹Ïè­  …Àu7SSÿwÿwjÿVSÿuèQ  ƒÄ …Àuÿx PèÇõÿÿYè÷õÿÿ‹ ëH‰G3À_^[]Ã‹ÿU‹ìQÿuEÿPÿuÿuègþÿÿƒÄÉÃ‹ÿU‹ì‹Eƒì(V…Àuè¶õÿÿj^‰0è³âÿÿé»  ‹uS3ÛW‰‹û‹‹Ë‰}Ø‰MÜ‰]à…ÀtaMüfÇEü*?QPˆ]þèí.  YY‹…ÀuEØPSSQèˆ  ‹ðƒÄ‰uøëUØRPQè$  ƒÄ‰Eø‹ð…ö…ˆ   ‹uƒÆ‰u‹…Àu¥‹}Ø‹MÜ‹Á‰]ü+Ç‹÷‹Ð‰uøÁúƒÀBÁè;Î‰Uôö÷Ö#ðt/‹Ç‹Ó‹A‰EðŠA„Àuù+MðC‹EøÙƒÀB‰Eø;ÖuÝ‹Uô‰]ü3ÛjÿuüRè©éÿÿ‹ðƒÄ…öuƒÎÿ‰uøé…   ‹}Øé„   ‹Eô‰}ø†‹È‰Eè‹Ç‰Mô;EÜt[‹Ö+×‰Uä‹ ‹Ð‰EìB‰EðŠB„Àuù+UðBPÿuì‰Eð‹Eè+ÁEüPQèÆ-  ƒÄ…Àur‹Eø‹Uä‹Mô‰ƒÀMð‰Mô‰Eø;EÜu¬‹E‰]ø‰0‹óSèqüÿÿY‹EÜ‹×+Â‰UäƒÀÁè9UÜÉ÷Ñ#È‰Mèt‹ñÿ7èIüÿÿCY;Þuð‹}Ø‹uøWè4üÿÿY_[‹Æ^ÉÃSSSSSèáÿÿÌ‹ÿU‹ìQ‹MQŠA„ÀuùW‹}+Ê‹ÇA÷Ð‰Mü;ÈvjX_ÉÃSV_ÙjSèŠûÿÿ‹ðYY…ÿtWÿuSVèõ,  ƒÄ…ÀuPÿuü+ß>ÿuSPèÜ,  ƒÄ…Àu7‹]‹Ëè„  3ÿ‰Eü…ÀtVè›ûÿÿ‹uüYë‹C‰0‹÷ƒCWè„ûÿÿY‹Æ^[ë„3ÿWWWWWè`àÿÿÌ‹ÿU‹ìì˜  ¡°3Å‰Eü‹M‹USW‹}‰•¤ýÿÿ;Ït#Š</t<\t<:tQWè¡,  YY‹È;Ïuã‹•¤ýÿÿŠˆ…«ýÿÿ<:u G;ÈtR3ÛSSWèäþÿÿƒÄéÖ  Š…«ýÿÿ3Û</t
<\t<:ŠÃu°+Ï¶ÀA‰hýÿÿ÷Ø‰lýÿÿVÀ‰pýÿÿ#Á‰týÿÿ‰…ˆýÿÿ‰xýÿÿˆ|ýÿÿè  P…hýÿÿPWènüÿÿƒÄ¬ýÿÿ÷ØÀSSSQ÷Ð#…pýÿÿSPÿ¸ ‹ðƒþÿuÿµ¤ýÿÿSSWèDþÿÿƒÄ‹Øé  ‹…¤ýÿÿ‹H+Áù‰„ýÿÿ‰Œýÿÿ‰ýÿÿ‰”ýÿÿ‰˜ýÿÿ‰œýÿÿˆ ýÿÿè  P…«ýÿÿP…ŒýÿÿP…ØýÿÿPèûÿÿƒÄ÷ØÀ÷Ð#…”ýÿÿ€8.uŠH„Ét*€ù.u8Xt ÿµ¤ýÿÿÿµˆýÿÿWPèªýÿÿƒÄ‰…€ýÿÿ…Àu\8 ýÿÿtÿµ”ýÿÿè«ùÿÿY…¬ýÿÿPVÿ¼ …À…Mÿÿÿ‹…¤ýÿÿ‹„ýÿÿ‹‹@+ÂÁø;Èt4hj§ +ÁjPŠPèç$  ƒÄë8 ýÿÿtÿµ”ýÿÿèOùÿÿ‹…€ýÿÿY‹ØVÿ´ €½|ýÿÿ ^tÿµpýÿÿè*ùÿÿY‹Ã‹Mü_3Í[èõœÿÿÉÃ‹ÿU‹ìƒìj MðèŠÚÿÿ‹Eôºéý  9Ptè¨  3Ò…ÀuB€}ü t
‹Mðƒ¡P  ý‹ÂÉÃ‹ÿV‹ñ€~ tÿvèÇøÿÿYÆF ^Ã‹ÿU‹ìVW‹ñèØÿÿÿ‹}FVWPè_   ƒÄ…Àt
ƒf ÆF ë	ÆF3À‰~_^]Â ‹ÿU‹ìVW‹ñèœÿÿÿ‹}V?PFPè    ƒÄ…Àt
ƒf ÆF ë	ÆF3À‰~_^]Â ‹ÿU‹ìÿuè\÷ÿÿY‹M‰÷ØÀƒàôƒÀ]Ã‹ÿV‹ñW‹~9~t3Àërƒ> u&jjè©÷ÿÿj ‰èý÷ÿÿ‹ƒÄ…Àt‰FƒÀ‰FëÑ+>ÁÿÿÿÿÿvjXë5Sj?Sÿ6è7  ƒÄ…Àuj^ë‰¸˜‰N‰F3öj è¦÷ÿÿY‹Æ[_^Ã‹ÿU‹ì]é„ùÿÿÌÌ‹ÿU‹ìV‹u…öu‹MèÙ   3Àé¨   S3Ûf9u%‹u9^uj‹Îè’   …À…†   ‹Fˆ3À‰^ëzSSSSjÿVSÿuè5
  ƒÄ …Àuÿx Pè«îÿÿYèÛîÿÿ‹ ëMW‹};GvP‹Ïè@   …Àu7SSÿwÿwjÿVSÿuèï	  ƒÄ …Àuÿx PèeîÿÿYè•îÿÿ‹ ëH‰G3À_[^]Ã‹ÿV‹ñ€~ tÆF èrîÿÿj"Y‰‹Áƒf ÆF ^Â 3À8AtˆA‰A‰A‰AÃ‹ÿU‹ìì,  ¡°3Å‰Eü‹Eðýÿÿh  QPÿ¨ …Àuÿx PèÚíÿÿY3ÀëU‹M‹Eƒ¥äýÿÿ ‰Ôýÿÿ‰…Øýÿÿ‰Üýÿÿ‰…àýÿÿÆ…èýÿÿ èýÿÿP…ïýÿÿP…ÔýÿÿP…ðýÿÿPèrþÿÿ‹…äýÿÿƒÄ‹Mü3ÍèË™ÿÿÉÃjhh”èC¥ÿÿ‹Eÿ0èžôÿÿYƒeü ‹Mè*   ÇEüþÿÿÿè   ‹Mðd‰    Y_^[ÉÂ ‹Eÿ0è±ôÿÿYÃ‹ÿV‹ñ¹  Q‹‹ ‹@HƒÀPQÿ5dÄè÷  ‹¹   Q‹ ‹@H  PQÿ5hÄèØ  ‹FƒÄ ƒÉÿ‹ ‹ ðÁu‹F‹ 8È±tÿ0è:õÿÿY‹‹‹F‹‹BH‰‹‹ ‹@Hðÿ ^Ã‹ÿU‹ì‹E-¤  t(ƒètƒètƒèt3À]Ã¡tD]Ã¡pD]Ã¡lD]Ã¡hD]Ã‹ÿU‹ìƒìMðj èRÖÿÿƒ%pÄ ‹EƒøþuÇpÄ   ÿÈ ë,ƒøýuÇpÄ   ÿÄ ëƒøüu‹EôÇpÄ   ‹@€}ü t
‹Mðƒ¡P  ýÉÃ‹ÿU‹ìS‹]VWh  3ÿsWVè4»ÿÿ‰{3À‰{ƒÄ‰»  ¹  {«««¿È±+ûŠ7ˆFƒéuõ‹  º   Š9ˆAƒêuõ_^[]Ã‹ÿU‹ìì  ¡°3Å‰EüSV‹uW~éý  „  …èøÿÿPÿvÿÌ …À„ô   3Û¿   ‹Ãˆ„üþÿÿ@;ÇrôŠ…îøÿÿîøÿÿÆ…üþÿÿ ë¶Q¶Àë;ÇsÆ„üþÿÿ @;ÂvïƒÁŠ„ÀuÝSÿv…üøÿÿPW…üþÿÿPjSè¹  Sÿv…üýÿÿWPW…üþÿÿPWÿ¶  Sè@'  ƒÄ@…üüÿÿSÿvWPW…üþÿÿPh   ÿ¶  Sè'  ƒÄ$‹Ã·ŒEüøÿÿöÁt€LŠŒüýÿÿëöÁt€L ŠŒüüÿÿëŠËˆŒ  @;ÇrÄë=3Û¿   ‹ËQŸB ƒøw
€LA ëƒúw€H AàëŠÃˆ„  A;ÏrÌ‹Mü_^3Í[èg–ÿÿÉÃ‹ÿU‹ìƒìÿuÿuè  ÿuèýÿÿ‹MƒÄ‰Eô‹IH;Au3ÀÉÃSVWh   èrñÿÿ‹øƒËÿY…ÿt.‹u¹ˆ   ‹vHó¥‹øWÿuôƒ' è­  ‹ðYY;óuè×éÿÿÇ    ‹óWèòÿÿY_‹Æ^[ÉÃ€} uèMðÿÿ‹E‹@HðÁKu‹ExHÈ±t	ÿpHèÚñÿÿYÇ   ‹Ï‹E3ÿ‰HH‹M¡è¶…P  u¥E‰EìMÿjE‰EðX‰Eô‰EøEôPEìPEøPè¡ûÿÿ€} „rÿÿÿ‹E‹ £¼±écÿÿÿjhH”èË ÿÿ3ö‰uä‹}¡è¶…‡P  t9wLt	‹wH…ötmëYjèðÿÿY‰uü‹wH‰uä‹];3t'…ötƒÈÿðÁuþÈ±tVèñÿÿY‹3‰wH‰uäðÿÇEüþÿÿÿè   ë­‹uäjèþïÿÿYÃ‹Æ‹Mðd‰    Y_^[ÉÃè^åÿÿÌ€=tÄ u<ÇlÄÈ±ÇhÄð´ÇdÄè³è ìÿÿhlÄPjjýèþÿÿƒÄÆtÄ°ÃhlÄè½ëÿÿPèÿÿÿYYÃ‹ÿU‹ìƒì ¡°3Å‰EüSV‹uWÿuè{ûÿÿ‹ØY…Û„°  3ÿ‹Ï‹Ç‰Mä9˜øµ„ó   AƒÀ0‰Mä=ð   ræûèý  „Ñ   ·ÃPÿÀ …À„¿   ¸éý  ;Øu&‰F‰¾  ‰~f‰~‰~3À~«««VèÛûÿÿéF  EèPSÿÌ …Àtuh  FWPè£¶ÿÿƒÄ‰^ƒ}è‰¾  uº€}î Eît!ŠH„Ét¶Ñ¶ë€LA;ÊvöƒÀ€8 ußF¹þ   €@ƒéu÷ÿvèOúÿÿ3ÿ‰†  ƒÄGéfÿÿÿ9=pÄ…°   ƒÈÿé±   h  FWPè¶ÿÿƒÄkEä0‰Eà€¶‰Eä€8 ‹Èt5ŠA„Àt+¶¶Àëú   sŠ‡ðµDB¶A;ÐvåƒÁ€9 uÎ‹EäGƒÀ‰Eäƒÿr¸S‰^ÇF   è°ùÿÿƒÄ‰†  ‹EàNjüµ_f‹Rf‰IƒïuïéµþÿÿVè+úÿÿ3ÀY‹Mü_^3Í[èe’ÿÿÉÃ‹ÿU‹ìV‹u…öu3Àëm‹E…Àuè'æÿÿj^‰0è$Óÿÿ‹ÆëSW‹}…ÿt9urVWPèé¶ÿÿƒÄ3Àë6ÿuj PèµÿÿƒÄ…ÿu	èæåÿÿjë9usèØåÿÿj"^‰0èÕÒÿÿ‹ÆëjX_^]Ã‹ÿU‹ìƒìVÿuMðèwÏÿÿ¶u‹EøŠM„L0u3Ò9Ut‹Eô‹ ·p#Eë‹Â…Àt3ÒB€}ü ^t
‹Mðƒ¡P  ý‹ÂÉÃ‹ÿU‹ìjj ÿuj è–ÿÿÿƒÄ]ÃÿÐ £ˆÄÿÔ £ŒÄ°Ã‹ÿU‹ì‹E¹5Ä  ;Áw(teƒø*t`=+Ä  v=.Ä  vR=1Ä  tK=3Ä  tD‹Më)=˜Ö  t=©Þ  ví=³Þ  v*=èý  t#=éý  uØ‹MƒáÿuÿuÿuÿuQPÿØ ]Ã3Éëæ‹ÿU‹ì‹Eºéý  SVWrÿ;Æt;Ât2Ûë³¹5Ä  ;Áw#tIƒø*tD=+Ä  v2=.Ä  v6=1Ä  t/=3Ä  ë=˜Ö  t!=©Þ  v=³Þ  v;Æt;Ât‹Máÿÿÿë3É‹}$¶Ó÷Ú¶óÒ÷Ò#×÷Þö÷Ö#u „Ût…ÿtƒ' RVÿuÿuÿuÿuQPÿÜ _^[]Ã‹ÿU‹ì‹UW3ÿf9:t!V‹Êqf‹ƒÁf;Çuõ+ÎÑùJƒÂf9:uá^B_]Ã‹ÿU‹ìQSVWÿà ‹ð3ÿ…ötYVè¬ÿÿÿWWW‹ØW+ÞÑûSVWWèâþÿÿƒÄ$‰Eü…Àt6Pèúêÿÿ‹øY…ÿt3ÀPPÿuüWSVPPèºþÿÿƒÄ …Àt‹ß3ÿë3ÛWè©ëÿÿYë‹ß…ötVÿä _^‹Ã[ÉÃ‹ÿU‹ìV‹u…ötjà3ÒX÷ö;Esè/ãÿÿÇ    3ÀëBS‹]W…ÛtSè±  Y‹øë3ÿ¯uVSèÒ  ‹ØYY…Ût;þs+÷;Vj Pè²ÿÿƒÄ_‹Ã[^]Ãh$Ih Ih$Ij èÿ   ƒÄÃhdIh\IhX1jèå   ƒÄÃhlIhdIhlIjèË   ƒÄÃ‹ÿU‹ìQSVW‹}é¢   ‹Ä‹0‰Eü…ötƒþÿ„ƒ   ë}‹¨Dh   j Sÿœ ‹ð…öuPÿx ƒøWu5jhÀ<Sè}áÿÿƒÄ…Àt!jhISèiáÿÿƒÄ…ÀtVVSÿœ ‹ðë3ö…öu
‹MüƒÈÿ‡ë‹Mü‹Æ‡…ÀtVÿ˜ …öuƒÇ;}…Uÿÿÿ3À_^[ÉÃ‹Æë÷‹ÿU‹ì‹ESW…àÄ‹‹°ƒÏÿ‹Ê3ÐƒáÓÊ;×u3ÀëQ…Òt‹ÂëIVÿuÿuè÷þÿÿYY…ÀtÿuPÿh ‹ð…ötVèHÙÿÿY‡‹Æë¡°j ƒàY+ÈÓÏ3=°‡;3À^_[]Ã‹ÿU‹ìVh„Ih€Ih„Ijèaÿÿÿ‹ðƒÄ…ötÿu‹Îjúÿ<!ÿÖë¸% À^]Â ‹ÿVè þÿÿ‹ð…öt‹Îÿ<!ÿÖ^Ã3À@^Ã‹ÿU‹ìVh<Ih4Ihè-jèÿÿÿ‹ðƒÄ…ötÿu‹Îÿ<!ÿÖëÿˆ ^]Â ‹ÿU‹ìVhDIh<Ihô-jèÃþÿÿ‹ðƒÄ…ötÿu‹Îÿ<!ÿÖ^]Â ^]ÿ%” ‹ÿU‹ìVhLIhDIhü-jè„þÿÿ‹ðƒÄ…ötÿu‹Îÿ<!ÿÖ^]Â ^]ÿ%Œ ‹ÿU‹ìVhTIhLIh.jèEþÿÿ‹ðƒÄ…ötÿu‹Îÿuÿ<!ÿÖ^]Â ^]ÿ% ‹ÿU‹ìVh\IhTIh.jèþÿÿ‹ðƒÄ…ötÿu‹Îÿuÿuÿ<!ÿÖëÿuÿuÿ„ ^]Â ‹ÿU‹ìVèÎüÿÿ‹ð…öt'ÿu(‹Îÿu$ÿu ÿuÿuÿuÿuÿuÿuÿ<!ÿÖë ÿuÿuÿuÿuÿuj ÿuè   Pÿè ^]Â$ ‹ÿU‹ìVè‹üÿÿ‹ð…ötÿu‹Îÿuÿ<!ÿÖë	ÿuèž  Y^]Â ¹hÅ¸àÄ3Ò;ÈV‹5°ÉƒáÞƒÁ"B‰0@;Ñuö°^Ã‹ÿU‹ì€} u'V¾Äƒ> tƒ>ÿtÿ6ÿ˜ ƒ& ƒÆþàÄuà^°]Ãÿì …À£hÅ•ÀÃƒ%hÅ °Ã‹ÿU‹ìƒìHE¸Pÿ, fƒ}ê „—   S‹]ì…Û„Š   V‹3CÆ‰Eü¸    ;ð|‹ðVè³  ¡pÇY;ð~‹ðW3ÿ…ötY‹Eü‹ƒùÿtDƒùþt?ŠTöÂt6öÂuQÿô …Àt#‹Ç‹Ïƒà?ÁùkÐ8‹EüpÅ‹ ‰BŠDˆB(‹EüGƒÀ‰Eü;þuª_^[ÉÃ‹ÿSVW3ÿ‹Ç‹Ïƒà?Áùkð84pÅƒ~ÿtƒ~þt€N(€ëy‹ÇÆF(ƒè tƒètƒèjôëjõëjöXPÿð ‹Øƒûÿt…Ût	Sÿô ë3À…Àt¶À‰^ƒøu€N(@ë)ƒøu$€N(ë€N(@ÇFþÿÿÿ¡Ã…Àt
‹¸Ç@þÿÿÿGƒÿ…Wÿÿÿ_^[Ãjhˆ”èÄ”ÿÿjè"äÿÿY3Ûˆ]ç‰]üSèl  Y…Àuèjþÿÿèÿÿÿ³ˆ]çÇEüþÿÿÿè   ŠÃ‹Mðd‰    Y_^[ÉÃŠ]çjèäÿÿYÃ‹ÿV3ö‹†pÅ…ÀtPèä  ƒ¦pÅ YƒÆþ   rÝ°^Ã‹ÿU‹ìSVW‹};}tQ‹÷‹…Ût‹Ëÿ<!ÿÓ„ÀtƒÆ;uuä;ut.;÷t&ƒÆüƒ~ü t‹…Ûtj ‹Ëÿ<!ÿÓYƒîF;ÇuÝ2Àë°_^[]Ã‹ÿU‹ìV‹u9utW‹~ü…ÿtj ‹Ïÿ<!ÿ×Yƒî;uuä_°^]ÃjhÈ”èŸ“ÿÿƒeä ‹Eÿ0èöâÿÿYƒeü ‹5°‹Îƒá35|ÇÓÎ‰uäÇEüþÿÿÿè   ‹Æ‹Mðd‰    Y_^[ÉÂ ‹uä‹Mÿ1èöâÿÿYÃ‹ÿU‹ì‹EHƒèt-ƒèt!ƒè	tƒèt	ƒèt3À]Ã¸xÇ]Ã¸€Ç]Ã¸|Ç]Ã¸tÇ]Ã‹ÿU‹ìkˆ=‹EÈ;Át‹U9Pt	ƒÀ;Áuô3À]Ã‹ÿU‹ìƒìjX‰EøMÿ‰EôEøPEÿPEôPèÿÿÿÉÃ‹ÿU‹ì‹E£tÇ£xÇ£|Ç£€Ç]Ãj$h¨”èŒ’ÿÿƒeà ƒeÐ ±ˆMç‹uj[;ót7Fÿƒèt"Hƒèt)HƒèuGëƒþtƒþt
ƒþ~6ƒþ1VèüþÿÿƒÄ‹øë>èfßÿÿ‹ø‰}à…ÿuƒÈÿé]  ÿ7VèÿÿÿYY…ÀuènÚÿÿÇ    èjÇÿÿëØx2ÉˆMç‰}ÜƒeÔ „ÉtjèQáÿÿYŠMçƒeØ ÆEæ ƒeü ‹?„Ét‹°ƒá3=°ÓÏŠMç‰}Øƒÿ”ÀˆEæ„Àuq…ÿ„ñ   ;ót
ƒþtƒþu(‹Eà‹H‰MÔƒ` ;óu@è^Ýÿÿ‹@‰EÐèSÝÿÿÇ@Œ   ‹Eà;óu"kŒ=k=Á‰MÌ;Ètƒa ƒÁëð¡°‹MÜ‰ÇEüþÿÿÿè)   €}æ ud;óu.èþÜÿÿÿpS‹Ïÿ<!ÿ×Yë#j[‹u‹}Ø€}ç tjè¬àÿÿYÃV‹Ïÿ<!ÿ×Y;ót
ƒþtƒþu‹Eà‹MÔ‰H;óuè©Üÿÿ‹MÐ‰H3À‹Mðd‰    Y_^[ÉÃ„Étjè[àÿÿYjèËÿÿÌ¡°‹È3„ÇƒáÓÈ…À•ÀÃ‹ÿU‹ì‹E£„Ç]Ã‹ÿU‹ìV‹5°‹Î35„ÇƒáÓÎ…öu3Àëÿu‹Îÿ<!ÿÖY^]Ãjhè”è@ÿÿ‹Eÿ0è´ÖÿÿYƒeü ‹uÿv‹ÿ0è[  YY„Àt2‹F€8 u‹‹ ‹@Ñè¨t‹ÿ0èó  Yƒøÿt‹Fÿ ë‹FƒÿÇEüþÿÿÿè   ‹Mðd‰    Y_^[ÉÂ ‹Eÿ0èTÖÿÿYÃj,h•è´ÿÿ‹Eÿ0èßÿÿYƒeü ‹5Ã¡ Ã†‹}‰uÔ;ótO‹‰Eàÿ7Pè¹   YY„Àt7‹W‹O‹}à‰}Ä‰EÈ‰MÌ‰UÐ‹Eà‰EÜ‰EØEÜPEÄPEØPMçèúþÿÿ‹}ƒÆëªÇEüþÿÿÿè   ‹Mðd‰    Y_^[ÉÂ ‹Eÿ0èÃÞÿÿYÃ‹ÿU‹ìƒì ƒeø Eøƒeô Mÿ‰EàE‰EäEôj‰EèX‰Eð‰EìEðPEàPEìPèÿÿÿ€} ‹Eøu‹EôÉÃ‹ÿU‹ì‹E…Àt‹H‹ÁÁè¨tQè   ƒÄ„Àu	‹Eÿ 2À]Ã°]Ã‹ÿU‹ì‹E$<uöEÀu	÷E   t°]Ã2À]Ã‹ÿU‹ì‹MVWq‹‹Â$<uGöÂÀtB‹9‹A+ø‰ƒa …ÿ~1WPQèk  YPèi  ƒÄ;øtjXð	ƒÈÿë‹Áè¨tjýXð!3À_^]Ã‹ÿU‹ìV‹u…öu	VèãþÿÿYë/VèÿÿÿY…Àu!‹FÁè¨tVè
  Pè  YY…Àu3ÀëƒÈÿ^]Ãjè§þÿÿYÃjh(•è­ÿÿƒeä jèÝÿÿYƒeü j^‰uà;5 ÃtY¡Ã‹°…ÀtJ‹@Áè¨t¡Ãÿ4°è;"  YƒøÿtÿEä¡Ã‹°ƒÀ Pÿd ¡Ãÿ4°èãÝÿÿY¡Ãƒ$° FëœÇEüþÿÿÿè   ‹Eä‹Mðd‰    Y_^[ÉÃjè½ÜÿÿYÃ‹ÿU‹ìV‹uW~‹Áè¨t%‹Áè¨tÿvè…ÝÿÿY¸¿þÿÿð!3À‰F‰‰F_^]Ã‹ÿU‹ì‹E…ÀuèÕÿÿÇ    èÂÿÿƒÈÿ]Ã‹@]Ã‹ÿU‹ìƒìSW‹}…ÿ„  ‹]…Û„  €? u‹E…À„  3Éf‰é  VÿuMðè„¾ÿÿ‹Eôxéý  u!hÇSWÿuè—"  ‹ðƒÄ…ö‰«   é£   ƒ¸¨    u‹M…Ét¶f‰3öFéˆ   EôP¶Pèô!  YY…ÀtB‹uôƒ~~);^|'3À9E•ÀPÿuÿvWj	ÿvèûîÿÿ‹uôƒÄ…Àu;^r0€ t*‹vë33À9E•À3öPÿu‹EôFVWj	ÿpèÃîÿÿƒÄ…ÀuèòÓÿÿÇ *   ƒÎÿ€}ü t
‹Mðƒ¡P  ý‹Æ^ëƒ%Ç ƒ%”Ç 3À_[ÉÃ‹ÿU‹ìj ÿuÿuÿuè©þÿÿƒÄ]Ã‹ÿU‹ìQè×ÿÿ‹HL‰MüMüQPèZÙÿÿ‹EüYY‹ ÉÃ‹ÿU‹ì‹Eðÿ@‹H|…Étðÿ‹ˆ„   …Étðÿ‹ˆ€   …Étðÿ‹ˆŒ   …ÉtðÿVjH(^yøÀ±t	‹…Òtðÿƒyô t
‹Qü…ÒtðÿƒÁƒîuÖÿ°œ   èL  Y^]Ã‹ÿU‹ìQSV‹uW‹†ˆ   …Àtl=ð¶te‹F|…Àt^ƒ8 uY‹†„   …Àtƒ8 uPèÛÿÿÿ¶ˆ   èÔ  YY‹†€   …Àtƒ8 uPèêÚÿÿÿ¶ˆ   è°  YYÿv|èÕÚÿÿÿ¶ˆ   èÊÚÿÿYY‹†Œ   …ÀtEƒ8 u@‹†   -þ   Pè¨Úÿÿ‹†”   ¿€   +ÇPè•Úÿÿ‹†˜   +ÇPè‡Úÿÿÿ¶Œ   è|ÚÿÿƒÄÿ¶œ   è•   YjXž    ‰Eü~(øÀ±t‹…Àtƒ8 uPèDÚÿÿÿ3è=ÚÿÿYY‹Eüƒô t‹Gü…Àtƒ8 uPè ÚÿÿY‹EüƒÃƒÇƒè‰Eüu°VèÚÿÿY_^[ÉÃ‹ÿU‹ì‹M…Étù¨?t3À@ðÁ°   @]Ã¸ÿÿÿ]Ã‹ÿU‹ìV‹u…öt!þ¨?t‹†°   …ÀuVè%  Vè­ÙÿÿYY^]Ã‹ÿU‹ì‹M…Étù¨?tƒÈÿðÁ°   H]Ã¸ÿÿÿ]Ã‹ÿU‹ì‹E…ÀtsðÿH‹H|…Étðÿ	‹ˆ„   …Étðÿ	‹ˆ€   …Étðÿ	‹ˆŒ   …Étðÿ	VjH(^yøÀ±t	‹…Òtðÿ
ƒyô t
‹Qü…Òtðÿ
ƒÁƒîuÖÿ°œ   èZÿÿÿY^]ÃjhH•èRˆÿÿƒeä è!ÔÿÿxL‹è¶…ˆP  t‹7…öu=jè×ÿÿYƒeü ÿ5ÃWè=   YY‹ð‰uäÇEüþÿÿÿè	   …öt ë‹uäjè¤×ÿÿYÃ‹Æ‹Mðd‰    Y_^[ÉÃèÍÿÿÌ‹ÿU‹ìV‹uW…öt<‹E…Àt5‹8;þu‹Æë-V‰0èüÿÿY…ÿtïWèÌþÿÿƒ Yuâÿ ±tÚWèìüÿÿYëÑ3À_^]Ã‹ÿU‹ìV‹u…ö„ê   ‹F;ü¶tPèØÿÿY‹F; ·tPèù×ÿÿY‹F;·tPèç×ÿÿY‹F;·tPèÕ×ÿÿY‹F;·tPèÃ×ÿÿY‹F ;·tPè±×ÿÿY‹F$;·tPèŸ×ÿÿY‹F8;(·tPè×ÿÿY‹F<;,·tPè{×ÿÿY‹F@;0·tPèi×ÿÿY‹FD;4·tPèW×ÿÿY‹FH;8·tPèE×ÿÿY‹FL;<·tPè3×ÿÿY^]Ã‹ÿU‹ìV‹u…ötY‹;ð¶tPè×ÿÿY‹F;ô¶tPè ×ÿÿY‹F;ø¶tPèîÖÿÿY‹F0; ·tPèÜÖÿÿY‹F4;$·tPèÊÖÿÿY^]Ã‹ÿU‹ì‹MSV‹uW3ÿŽáÿÿÿ?;ÆÛ÷Ó#Ùtÿ6èœÖÿÿGvY;ûuð_^[]Ã‹ÿU‹ìV‹u…ö„Ð   jVè¯ÿÿÿFjPè¤ÿÿÿF8jPè™ÿÿÿFhjPèŽÿÿÿ†˜   jPè€ÿÿÿÿ¶    è;Öÿÿÿ¶¤   è0Öÿÿÿ¶¨   è%Öÿÿ†´   jPèQÿÿÿ†Ð   jPèCÿÿÿƒÄD†ì   jPè2ÿÿÿ†  jPè$ÿÿÿ†L  jPèÿÿÿÿ¶T  èÑÕÿÿÿ¶X  èÆÕÿÿÿ¶\  è»Õÿÿÿ¶`  è°ÕÿÿƒÄ(^]Ã‹ÿU‹ìƒì¡°3Å‰EüSVWÿuMäè·ÿÿ‹]…Ûu‹Eè‹X3À3ÿ9E WWÿu•ÀÿuÅ   PSèÝçÿÿƒÄ‰Eô…À„„    J‰Uø;ÑÀ#Át5=   wèRC  ‹ô…ötÇÌÌ  ëPèBÔÿÿ‹ðY…öt	ÇÝÝ  ƒÆ‹Uøë‹÷…öt1RWVèÛ›ÿÿÿuôVÿuÿujSèiçÿÿƒÄ$…ÀtÿuPVÿuÿü ‹øVè%   Y€}ð t
‹Eäƒ P  ý‹ÇeØ_^[‹Mü3ÍèƒxÿÿÉÃ‹ÿU‹ì‹E…Àtƒè8ÝÝ  uPèŠÔÿÿY]Ã¡ ÇÃ‹ÿU‹ìì  ¡°3Å‰Eü‹MS‹]V‹u‰µüþÿÿ‰øþÿÿW‹}‰½ ÿÿÿ…öu%…Ét!èøËÿÿÇ    èô¸ÿÿ‹Mü_^3Í[èÿwÿÿ‹å]Ã…ÿtÛ…Ût×Ç…èþÿÿ    ƒùrØI¯ÏÎ‰ÿÿÿ‹Á3Ò+Æ÷÷@ƒø‡¶   ;Î†'  7‰•ðþÿÿ‹Æ‹ò‰…ÿÿÿ;ñw/PV‹Ëÿ<!ÿÓƒÄ…À~
‹Æ‰…ÿÿÿë‹…ÿÿÿ‹ÿÿÿ÷;ñvÑ‰½ôþÿÿ‹Ñ;Át;+Á‹ß‰…ÿÿÿë›    ŠR‹µÿÿÿŠBÿˆDÿ‹ÆˆJÿƒëuã‹øþÿÿ‹ÿÿÿ‹µüþÿÿ+Ï‹•ðþÿÿ‰ÿÿÿ;Î‡`ÿÿÿéy  Ñè‹Ë¯Ç‰…ÿÿÿ<0WV‰½ìþÿÿÿ<!ÿÓ‹µ ÿÿÿƒÄ…À‹…üþÿÿ~M‰µôþÿÿ‰½ðþÿÿ;Çt=‹ôþÿÿ‹÷‹½ÿÿÿëI Š‹Ö+×Š
ˆˆFƒëuî‹½ìþÿÿ‹øþÿÿ‹µ ÿÿÿ‹…üþÿÿÿµÿÿÿ‹ËPÿ<!ÿÓ‹•ÿÿÿƒÄ…À~I‹…üþÿÿ‰µìþÿÿ‹ò;Ât7‹ìþÿÿ+Â‰…ðþÿÿ‹Ð›    ŠvŠL2ÿˆD2ÿˆNÿƒëuë‹øþÿÿ‹•ÿÿÿRW‹Ëÿ<!ÿÓ‹•ÿÿÿƒÄ…À‹… ÿÿÿ~5‹Ø‹ò;út-‹Ç+Â‰…ìþÿÿ‹ÐŠvŠL2ÿˆD2ÿˆNÿƒëuë‹… ÿÿÿ‹•ÿÿÿ‹µüþÿÿ‹Ú‰•ÿÿÿ;þv>ë¤$    ð‰µôþÿÿ;÷s#‹øþÿÿWVÿ<!ÿ•øþÿÿƒÄ…À‹… ÿÿÿ~ÓëB‹•ÿÿÿ‹øþÿÿëI ð;òwWV‹Ëÿ<!ÿÓ‹•ÿÿÿƒÄ…À‹… ÿÿÿ~Û‹ÿÿÿ‰µôþÿÿ‹µøþÿÿë¤$    ‹… ÿÿÿ‹Ë+Ø‰ÿÿÿ;ßvWS‹Îÿ<!ÿÖƒÄ…ÀÙ‹… ÿÿÿ‹ÿÿÿ‹µôþÿÿ‰ÿÿÿ;ÞrJ‰…ðþÿÿ‹Ót++ó‹ØŠRŠLÿˆDÿˆJÿƒëuë‹µôþÿÿ‹ÿÿÿ‹… ÿÿÿ‹•ÿÿÿ;û…íþÿÿ‹þéæþÿÿ;ùs<‹øþÿÿë¤$    +È‰ÿÿÿ;Ïv!WQ‹Ëÿ<!ÿÓ‹ÿÿÿƒÄ…À‹… ÿÿÿtÕëD‹øþÿÿ‹µüþÿÿ¤$    +È‰ÿÿÿ;ÎvWQ‹Ëÿ<!ÿÓ‹ÿÿÿƒÄ…À‹… ÿÿÿtÕ‹µôþÿÿ‹•ÿÿÿ‹Ê‹½ÿÿÿ+Î‹Ç+…üþÿÿ;Á|=‹…üþÿÿ;Çs‹èþÿÿ‰D„‰¼ÿÿÿA‰èþÿÿ‹ÿÿÿ‹½ ÿÿÿ;ñsD‰µüþÿÿéøûÿÿ;òs‹…èþÿÿ‰t…„‰”…ÿÿÿ@‰…èþÿÿ‹µüþÿÿ;÷s‹Ï‹½ ÿÿÿé¿ûÿÿ‹½ ÿÿÿ‹…èþÿÿƒè‰…èþÿÿˆvûÿÿ‹t…„‹Œ…ÿÿÿ‰µüþÿÿéŽûÿÿ‹ÿU‹ì‹MS‹]V‹u…öu…Éu9ut'è+Çÿÿj^‰0è(´ÿÿ‹Æ^[]Ã…Étç‹E…Àtà…öuÆ 3Àëæ…ÛuˆëÍ+Ù‹ÑW‹øƒþÿuŠˆB„Àt'ƒïuñë ‹ÎŠˆB„Àt
ƒïtƒéuì…É‹MuÆ …ÿ_u²ƒþÿu‹EjPÆDÿ XëŠÆ è¡Æÿÿj"éqÿÿÿ‹ÿU‹ì]éBÿÿÿÌÌÌÌU‹ìV3ÀPPPPPPPP‹UI Š
Àt	ƒÂ«$ëñ‹u‹ÿŠ
ÀtƒÆ£$sñFÿƒÄ ^ÉÃ‹ÿU‹ìj ÿuÿuè   ƒÄ]Ã‹ÿU‹ìƒìƒ} uè!ÆÿÿÇ    è³ÿÿ3ÀÉÃV‹u…öuèÆÿÿÇ    è³ÿÿë9ur3ÀëEÿuMðè¬¯ÿÿ‹MøVÿƒy tJ9Uw
¶öDuð‹Æ+Â‹Öƒà+ÐJ€}ü t
‹Mðƒ¡P  ý‹Â^ÉÃ‹ÿU‹ìQQ¡°3Å‰EüSV‹uW…ö~Vÿuè"  Y;ÆYp|‹ð‹}$…ÿu‹E‹ ‹x‰}$3À9E(j j •ÀVÿuÅ   PWèàÿÿ‹ÐƒÄ‰Uø…Ò„X  H;ÁÀ#Át5=   wèƒ;  ‹Ü…ÛtÇÌÌ  ëPèsÌÿÿ‹ØY…Ût	ÇÝÝ  ƒÃ‹Uøë3Û…Û„   RSVÿujWè¢ßÿÿƒÄ…À„ç   ‹}ø3ÀPPPPPWSÿuÿuèåÿÿ‹ð…ö„Æ   º   …Ut8‹E …À„³   ;ð©   3ÉQQQPÿuWSÿuÿuèßäÿÿ‹ð…ö…‹   é„   6H;ÁÀ#Át/;Âwè½:  ‹ü…ÿt`ÇÌÌ  ëPè­Ëÿÿ‹øY…ÿtKÇÝÝ  ƒÇë3ÿ…ÿt:j j j VWÿuøSÿuÿuèväÿÿ…Àt3ÀPP9E u:PPVWPÿu$è<ßÿÿ‹ðƒÄ …öu,WèŠ÷ÿÿY3öSè÷ÿÿY‹Æeì_^[‹Mü3ÍèïoÿÿÉÃÿu ÿuëÀWè^÷ÿÿYëÔ‹ÿU‹ìƒìÿuMðèr­ÿÿÿu(Eôÿu$ÿu ÿuÿuÿuÿuÿuPèâýÿÿƒÄ$€}ü t
‹Mðƒ¡P  ýÉÃèÝÚÿÿ3É„À”Á‹ÁÃ‹ÿU‹ìƒ} uèUÃÿÿÇ    èQ°ÿÿƒÈÿ]Ãÿuj ÿ5hÅÿ !]Ã‹ÿU‹ìW‹}…ÿuÿuè†ÊÿÿYë$V‹u…öu	WèQËÿÿYëƒþàv%èÿÂÿÿÇ    3À^_]Ãè¬öÿÿ…ÀtæVè[°ÿÿY…ÀtÛVWj ÿ5hÅÿ!…ÀtØëÒ‹ÿU‹ìSVW3ÿ»ã   ;™+Â‹ðÑþjUÿ4õØ`ÿuèï  ƒÄ…Àty^ÿë~;û~ÐƒÈÿë‹õÜ`_^[]Ã‹ÿU‹ìƒ} tÿuèÿÿÿY…Àx=ä   s	‹Å¸O]Ã3À]Ã‹ÿU‹ìQQSVj8j@è#Êÿÿ‹ð3Û‰uøYY…öu‹óëK†   ;ðtAW~ ‹ðSh   GàPè!âÿÿƒOøÿ€gø‰8‰_ÌGàÇGÐ  

ÆGÔ
‰_Öˆ_Ú;ÆuÉ‹uø_SèÊÿÿY‹Æ^[ÉÃ‹ÿU‹ìV‹u…öt%Sž   W‹þ;ótWÿd ƒÇ8;ûuòVèèÉÿÿY_[^]Ãjhh•è6yÿÿ}    r!èƒÁÿÿj	^‰0è€®ÿÿ‹Æ‹Mðd‰    Y_^[ÉÃ3ö‰uäjèeÈÿÿY‰uü‹þ¡pÇ‰}à9E|94½pÅu1èíþÿÿ‰½pÅ…Àuj^‰uäÇEüþÿÿÿè   ë¢¡pÇƒÀ@£pÇGë»‹uäjèSÈÿÿYÃ‹ÿU‹ì‹E‹Èƒà?ÁùkÀ8pÅPÿT ]Ã‹ÿU‹ì‹E‹Èƒà?ÁùkÀ8pÅPÿX ]Ã‹ÿU‹ìSV‹uW…öxg;5pÇs_‹Æ‹þƒà?ÁÿkØ8‹½pÅöD(tDƒ|ÿt=è6  ƒøu#3À+ðtƒît
ƒîuPjôëPjõëPjöÿ!‹½pÅƒLÿ3Àëè>ÀÿÿÇ 	   è Àÿÿƒ  ƒÈÿ_^[]Ã‹ÿU‹ì‹MƒùþuèÀÿÿƒ  èÀÿÿÇ 	   ëC…Éx';pÇs‹Áƒá?ÁøkÉ8‹…pÅöD(t‹D]ÃèÃ¿ÿÿƒ  èÎ¿ÿÿÇ 	   èÊ¬ÿÿƒÈÿ]Ãjhˆ•èWwÿÿ3ö‰uä‹Eÿ0è¤þÿÿY‰uü‹E‹ ‹8‹×Áú‹Çƒà?kÈ8‹•pÅöD(t!WèOÿÿÿYPÿ!…ÀuèS¿ÿÿ‹ðÿx ‰èW¿ÿÿÇ 	   ƒÎÿ‰uäÇEüþÿÿÿè   ‹Æ‹Mðd‰    Y_^[ÉÂ ‹uä‹Mÿ1èBþÿÿYÃ‹ÿU‹ìƒìV‹uƒþþuè¿ÿÿÇ 	   ëY…öxE;5pÇs=‹Æ‹Öƒà?ÁúkÈ8‹•pÅöD(t"E‰uø‰EôMÿEø‰uðPEôPEðPèùþÿÿëè°¾ÿÿÇ 	   è¬«ÿÿƒÈÿ^ÉÃ‹ÿU‹ììŒ   ¡°3Å‰Eü‹E‹Ðƒà?ÁúkÈ8SV‹•pÅW‹}‰}˜‰U´‹D‰E”‹EÇ‰MØ‰E¤ÿ!3Û‰EˆSM¼è¨ÿÿ‹MÀ‹Ç‹ó‰]¨‰u¬‰]°‹I‰M„‰}œ;E¤ƒ  Šùéý  ‹MØˆEÑ‹E´‰]¸ÇEÜ   ‹…pÅ‰EÔ…3  ‹UÔ‹ÃƒÂ.Ñ‰U8t@ƒø|õ‹U¤+×‰EÜ…ÀŽ±   ‹EÔ¶D.¾€P·@‰EÌ+EÜ‰EÔ;Â  ‹UÜ‹ó‹MŠ1ˆD5ôF;ò|ô‹uÔ‹MØ…ö~VEôÂWPègŽÿÿ‹MØƒÄ‹UÜ‹}´‹ó‹½pÅÁˆ\0.F;ò|î‹}œEô‹uÔ|ÿÿÿ‰EŒ3Àƒ}ÌQ”À‰|ÿÿÿ@‰]€P‰EÜEŒPE¸Pèa  ƒÄƒøÿ„  ëU¶¾ˆP·A‰MÔ;Êž  3À‰tÿÿÿƒù‰xÿÿÿtÿÿÿ‰}Ì”À@QP‰EÜEÌPE¸Pè  ƒÄƒøÿ„¯  ‹uÔOþëŠT-öÂtŠD.€âûˆEìŠˆEí‹EÔjˆT-EìPëCŠˆEãèìèÿÿ¶Mãf9H},G‰EÌ;E¤ƒ1  jE¸WPè­èÿÿƒÄƒøÿ„E  ‹}ÌëjWE¸PèèÿÿƒÄƒøÿ„(  SSjEäGPÿuÜE¸‰}œPSÿuˆèi×ÿÿƒÄ ‰EÌ…À„þ   SM QPEäPÿu”ÿ!…À„Ú   ‹u°+u˜‹EÌ÷‰u¬9E ‚Ì   €}Ñ
u4jXSf‰EÐE PjEÐPÿu”ÿ!…À„š   ƒ} ‚™   ÿE°F‰u¬;}¤ƒ‰   ‹M„é|ýÿÿ…Ò~%‹ñ‹E´‹…pÅŠ;Î‹uÜËCˆD1.‹uØ;Ú|à‹u¬ò€}È ‰u¬ëP…Ò~ñ‹uØ‹E´‹…pÅŠ;ÎˆD.C;Ú|èëÑ‹U´‹MØŠ]ã‹•pÅˆ\.‹•pÅ€L-Fë³ÿx ‰E¨8]Èt
‹E¼ƒ P  ý‹Eu¨‹Mü‹ø3Í¥¥¥_^[ègÿÿÉÃ‹ÿU‹ìQSV‹u3ÀW‹þ«««‹}‹EÇ‰Eü;øs?·Sè‰
  Yf;Ãu(ƒFƒû
uj[Sèq
  Yf;ÃuÿFÿFƒÇ;}ürËëÿx ‰_‹Æ^[ÉÃ‹ÿU‹ìQV‹uWVè"  Y…ÀtU‹þƒæ?Áÿkö8‹½pÅ€|0( }<èÔ½ÿÿ‹@Lƒ¸¨    u‹½pÅ€|0) tEüP‹½pÅÿt0ÿ!…Àt°ë2À_^ÉÃ‹ÿU‹ì¸  è 0  ¡°3Å‰Eü‹M‹Á‹Uƒá?ÁøkÉ8S‹]‹…pÅVW‹û‹D‹MÑ‰…øëÿÿ3À«‰•ôëÿÿ««;Êss‹½øëÿÿµüëÿÿ;ÊsŠA<
uÿCÆFˆFEû;ðrä…üëÿÿ‰M+ð…øëÿÿj PV…üëÿÿPWÿ!…Àt‹…øëÿÿC;Ær‹M‹•ôëÿÿ;Êrëÿx ‰‹Mü‹Ã_^3Í[è`eÿÿÉÃ‹ÿU‹ì¸  èÅ/  ¡°3Å‰Eü‹M‹Á‹Uƒá?ÁøkÉ8S‹]‹…pÅVW‹û‹D‹MÑ‰…øëÿÿ3À«‰•ðëÿÿ««ëuµüëÿÿ;Ês%·ƒÁƒø
uƒCj_f‰>ƒÆf‰ƒÆEú;ðr×‹½øëÿÿ…üëÿÿ+ð‰Mj …ôëÿÿƒæþPV…üëÿÿPWÿ!…Àt‹…ôëÿÿC;Ær‹M‹•ðëÿÿ;Êr‡ëÿx ‰‹Mü‹Ã_^3Í[èwdÿÿÉÃ‹ÿU‹ì¸  èÜ.  ¡°3Å‰Eü‹M‹Á‹Uƒá?ÁøkÉ8SV‹…pÅ‹uW‹þ‹D‹M‰…ðëÿÿÊ3À‰ôëÿÿ«««‹ú;ÑƒÄ   ‹µôëÿÿ…Pùÿÿ;þs!·ƒÇƒù
u	jZf‰ƒÀf‰ƒÀMø;ÁrÛj j hU  øëÿÿQPùÿÿ+ÁÑøP‹ÁPj héý  èßÒÿÿ‹uƒÄ ‰…èëÿÿ…ÀtQ3Û…Àt5j ìëÿÿ+ÃQP…øëÿÿÃPÿµðëÿÿÿ!…Àt&ìëÿÿ‹…èëÿÿ;ØrË‹Ç+E‰F;½ôëÿÿ‚Fÿÿÿëÿx ‰‹Mü‹Æ_^3Í[èEcÿÿÉÃjh¨•è½nÿÿ‹uƒþþuèø¶ÿÿƒ  è·ÿÿÇ 	   é³   …öˆ“   ;5pÇƒ‡   ‹ÞÁû‹Æƒà?kÈ8‰Mà‹pÅöD(tiVèÁõÿÿYƒÏÿ‰}äƒeü ‹pÅ‹MàöD(uèŸ¶ÿÿÇ 	   è¶ÿÿƒ  ëÿuÿuVèQ   ƒÄ‹ø‰}äÇEüþÿÿÿè
   ‹Çë)‹u‹}äVèƒõÿÿYÃèE¶ÿÿƒ  èP¶ÿÿÇ 	   èL£ÿÿƒÈÿ‹Mðd‰    Y_^[ÉÃ‹ÿU‹ìƒì(‹M‰MüSV‹uW‹}‰}ô…É„±  …ÿu èôµÿÿƒ  èÿµÿÿÇ    èû¢ÿÿƒÈÿé  ‹Æ‹ÖÁúƒà?kÀ8‰Uð‹•pÅ‰EøŠ\)€ût€ûu‹Á÷Ð¨t°‹EøöD( tjj j Vè  ƒÄVèûÿÿY„Àt9„Ût"þË€û‡ô   ÿuüEØWPè‰úÿÿƒÄ‹ðéœ   ÿuüEØWVPèÅöÿÿƒÄëæ‹Eð‹…pÅ‹Eø€|( }F¾Ãƒè t.ƒètƒè…    ÿuüEØWVPèèûÿÿëÁÿuüEØWVPèÁüÿÿë±ÿuüEØWVPèíúÿÿë¡‹L}Ø3À«j ««EÜPÿuüÿuôQÿ!…Àu	ÿx ‰EØuØ}ä¥¥¥‹Eè…Àue‹Eä…Àt*j^;Æuè¶´ÿÿÇ 	   è˜´ÿÿ‰0é°þÿÿPèh´ÿÿYé¤þÿÿ‹}ô‹Eð‹Mø‹…pÅöD(@t€?tèw´ÿÿÇ    èY´ÿÿƒ  épþÿÿ+Eìë3À_^[ÉÃ‹ÿU‹ì‹MƒùþuèF´ÿÿÇ 	   ë8…Éx$;pÇs‹Áƒá?ÁøkÉ8‹…pÅ¶D(ƒà@]Ãè´ÿÿÇ 	   è¡ÿÿ3À]Ã‹ÿU‹ìV‹u…öuèð³ÿÿÇ    èì ÿÿƒÈÿëR‹FWƒÏÿÁè¨t9VèÝÿÿV‹øèZÞÿÿVè”ÞÿÿPè6  ƒÄ…ÀyƒÏÿëƒ~ tÿvèâ»ÿÿƒf YVè:  Y‹Ç_^]ÃjhÈ•è$kÿÿ‹u‰uà…öuèp³ÿÿÇ    èl ÿÿƒÈÿë<‹FÁèV¨tè÷  Yëçƒeä èf±ÿÿYƒeü Vè6ÿÿÿY‹ð‰uäÇEüþÿÿÿè   ‹Æ‹Mðd‰    Y_^[ÉÃ‹uäÿuàè@±ÿÿYÃ‹ÿU‹ìQQV‹uWVèÍòÿÿƒÏÿY;Çuèè²ÿÿÇ 	   ‹Ç‹×ëMÿuMøQÿuÿuPÿø …Àuÿx Pè‚²ÿÿYëÓ‹Eø‹Uü#Â;ÇtÇ‹Eø‹Îƒæ?Áùkö8‹pÅ€d1(ý_^ÉÃ‹ÿU‹ìÿuÿuÿuÿuènÿÿÿƒÄ]Ã‹ÿU‹ìƒìÿuMðè%œÿÿ‹Eôh €  ÿuÿ0èû°ÿÿƒÄ€}ü t
‹Mðƒ¡P  ýÉÃ‹ÿU‹ì‹M€9 u3À@ë€y ujXë3À8A•ÀƒÀ]Â ‹ÿU‹ìQÿuEüÿuÿuPèÕ  ‹ÐƒÄƒúw‹Müùÿÿ  v¹ýÿ  ‹E…Àtf‰‹ÂÉÃ‹ÿU‹ìQQƒ} SVW‹}‹?„œ   ‹]‹u…ÛthWMÿèhÿÿÿÿuPEøWPès  ‹ÐƒÄƒúÿt\…ÒtO‹Møùÿÿ  v+ƒûv3é   K‹Á‰MøÁè
áÿ   Ø  f‰ƒÆÉ Ü  f‰úƒÆƒëu˜‹]+uÑþ‰;ëY3ÿ3Àf‰ëë‹E‰8è ±ÿÿÇ *   ƒÈÿë=3Ûë…öt:ƒþuCþCWMÿèÅþÿÿÿuPWj èÒ  ‹ðƒÄƒþÿuÔèà°ÿÿÇ *   ‹Æ_^[ÉÃ‹Ãë÷‹ÿU‹ì‹Eƒ  ƒ` è»°ÿÿÇ *   ƒÈÿ]Ã‹ÿU‹ì‹M…Éu3À]ÃS‹]VW‹}·B¿ƒøwƒÂ ·3ƒÇF¿ƒøwƒÆ ‹ÂƒÃ+Æu	…ÒtƒéuÏ_^[]Ã‹ÿU‹ì‹M3À8t;Et@€< uô]Ã¡¤ÇÃ‹ÿU‹ìQèy  …ÀtEüPEjPèœ  ƒÄ…Àtf‹EÉÃ¸ÿÿ  ÉÃjhè•è¦gÿÿƒeä ‹Eÿ0èôîÿÿYƒeü ‹E‹ ‹0‹ÖÁú‹Æƒà?kÈ8‹•pÅöD(tVèÒ   Y‹ðëè¼¯ÿÿÇ 	   ƒÎÿ‰uäÇEüþÿÿÿè   ‹Æ‹Mðd‰    Y_^[ÉÂ ‹uä‹Eÿ0è§îÿÿYÃ‹ÿU‹ìƒìV‹uƒþþuèX¯ÿÿƒ  èc¯ÿÿÇ 	   ëa…öxE;5pÇs=‹Æ‹Öƒà?ÁúkÈ8‹•pÅöD(t"E‰uø‰EôMÿEø‰uðPEôPEðPèÿÿÿëèú®ÿÿƒ  è¯ÿÿÇ 	   èœÿÿƒÈÿ^ÉÃ‹ÿU‹ìVW‹}Wè¼îÿÿYƒøÿu3öëN¡pÅƒÿu	ö€˜   uƒÿuö@`tjèîÿÿj‹ðè„îÿÿYY;ÆtÈWèxîÿÿYPÿ!…Àu¶ÿx ‹ðWèÍíÿÿY‹Ïƒç?Áùk×8‹pÅÆD( …ötVè.®ÿÿYƒÈÿë3À_^]Ã‹ÿU‹ì‹E3É‰‹E‰H‹E‰H‹EƒHÿ‹E‰H‹E‰H‹E‰H‹EƒÀ‡]Ã‹ÿU‹ìƒì$¡°3Å‰Eü‹MS‹]V‹u‰]ÜW‹û…öu¾¨Ç3ÒB…Ûu	»Ü}‹Âë‹E÷ß‰Eäÿ#ù…ÀujþXéD  3Àf9FudŠCˆMî„Éx…ÿt¶Á‰3À„É•Àé  ŠÁ$à<Àu°ëŠÁ$ð<àu°ëŠÁ$ø<ð…ò   °ˆEïˆEíj¶ÀY+È¶EîŠmíÓâŠMïJ#Ðë%ŠN‹ŠÁŠn,<‡½   €ý‚´   :éƒ¬   ¶Å‰Eà‹Eä9Eàs‹Eà‰Eä‹EÜ‰]è)EèëŠ#CÿEèŠÄ$À<€u¶Äƒà?ÁâÐ‹Eä9Eèrß‹]à;Ãs*mä¶Áf‰F¶Å‰f‰Féÿÿÿú Ø  rúÿß  v=úÿÿ w5¶ÁÇEð€   ÇEô   ÇEø   ;T…èr…ÿt‰ƒ& ƒf ÷ÚÒ#Ó‹ÂëVè·ûÿÿY‹Mü_^3Í[è—XÿÿÉÃÌÌÌÌÌÌÌÌÌÌÌƒ=èÇ t2ƒì®\$‹D$%€  =€  uÙ<$f‹$fƒàfƒød$ué  ƒìÝ$è’
  è   ƒÄÃT$è=
  R›Ù<$tL‹D$f<$tÙ-Hr©  ðt^©   €uAÙìÙÉÙñƒ=°Ç …\
  0pº   éY
  ©   €uëÔ©ÿÿ uƒ|$ u%   €tÅÝØÛ- r¸   ë"è¨	  ë©ÿÿ uÅƒ|$ u¾ÝØÛ-ªq¸   ƒ=°Ç …ð	  0pº   èé
  ZÃƒ=èÇ „
  ƒì®\$‹D$%€  =€  uÙ<$f‹$fƒàfƒød$…Ù  ë ó~D$f(Ppf(Èf(øfsÐ4f~ÀfTppfúÐfÓÊ©   tL=ÿ  |}fóÊ=2  fÖL$ÝD$Ãf.ÿ{$ºì  ƒì‰T$‹ÔƒÂ‰T$‰T$‰$èi
  ƒÄÝD$Ãó~D$fóÊf(ØfÂÁ=ÿ  |%=2  °fT@pòXÈfÖL$ÝD$ÃÝ€pÃfÂ`pfT@pfÖ\$ÝD$ÃÌÌÌU‹ìWVS‹MÉtM‹u‹}·A³Z¶ I Š&
äŠt'
Àt#ƒÆƒÇ:çr:ãwæ:Çr:ÃwÆ:àuƒéuÑ3É:àt	¹ÿÿÿÿr÷Ù‹Á[^_ÉÃ3ÀPPjPjh   @hˆpÿ !£P¸Ã‹P¸ƒùþuèÑÿÿÿ‹P¸3Àƒùÿ•ÀÃ¡P¸ƒøÿtƒøþtPÿ!Ã‹ÿU‹ìVj ÿuÿuÿuÿ5P¸ÿ$!‹ð…öu-ÿx ƒøu"è¶ÿÿÿèsÿÿÿVÿuÿuÿuÿ5P¸ÿ$!‹ð‹Æ^]Ãj
ÿ$ £èÇ3ÀÃÌÌÌÌÌU‹ìƒìƒäðÝ$ó~$è   ÉÃfD$º    f(èfÀfsÕ4fÅÍ f( pf(°pf(qf(%Àpf(5ÐpfTÁfVÃfXàfÅÄ %ð  f( àvf(¸ÐrfTðf\ÆfYôf\òòXþfYÄf(àfXÆáÿ  ƒéùý  ‡¾   éþ  Êò*ñföÁá
Á¹   º    ƒø DÑf(`qf(Øf(pqfYÈfYÛfXÊf(€qòYÛf(-àpfYõf(ªðpfTåfXþfXüfYÈòYØfXÊf(qfYÐf(÷föfYËƒìf(ÁfXÊfÀòXÁòXÆòXÇfD$ÝD$ƒÄÃfD$f( qòÂÈ fÅÁ ƒø wHƒùÿt^ùþ  wlfD$f( pf(qfTÁfVÂòÂÐ fÅÂ ƒø tÝHqÃºé  ëOfqò^Ðf@qº   ë4f0qòYÁºÌÿÿÿéþÿÿƒÁáÿ  ùÿ  s:fWÉò^Éº	   ƒìfL$‰T$‹ÔƒÂ‰T$ƒÂ‰T$‰$è”  ÝD$ƒÄÃfT$fD$f~ÐfsÒ f~Ñáÿÿ Áƒø t ºé  ë¦¤$    ëÌÌÌÆ…pÿÿÿþ
íuJÙÉÙñë¤$    ¤$    Æ…pÿÿÿþ2íÙêÞÉè+  ÙèÞÁö…aÿÿÿtÙèÞñöÂ@uÙý
ítÙàéÏ  èF  Àt2íƒøtöÕÙÉÙáë éë  é©  ÝØÝØÛ- qÆ…pÿÿÿÃÙíÙÉÙä›Ý½`ÿÿÿ›ö…aÿÿÿAuÒÙñÃÆ…pÿÿÿÝØÛ-ªqÃ
ÉuSÃÙìëÙíÙÉ
Éu®ÙñÃé‘  èÏ   ÝØÝØ
ÉuÙîƒøu
ítÙàÃÆ…pÿÿÿÛ- qƒøuí
ítéÙàëåÝØéB  ÝØé  XÙä›Ý½`ÿÿÿ›ö…aÿÿÿuÝØÛ- q
ítÙàÃÆ…pÿÿÿé  ÝØÝØÛ- qÆ…pÿÿÿÃ
Éu¯ÝØÛ- qÃÙÀÙáÛ-¾qÞÙ›Ý½`ÿÿÿ›ö…aÿÿÿAu•ÙÀÙüÙä›Ý½`ÿÿÿ›Š•aÿÿÿÙÉØáÙä›Ý½`ÿÿÿÙáÙðÃÙÀÙüØÙ›ßàžuÙÀÜÒqÙÀÙüÞÙ›ßàžt¸   Ã¸    ëø¸   ëñVƒìt‹ôVƒìÝ$ƒìÝ$›Ývè  ƒÄÝfÝƒÄt^…Àté.  ÃÌÌÌÌÌÌÌÌÌÌ€zuf‹\ÿÿÿ€Ï€çþ³?ëf»?f‰^ÿÿÿÙ­^ÿÿÿ».rÙå‰•lÿÿÿ›Ý½`ÿÿÿÆ…pÿÿÿ ›ŠaÿÿÿÐáÐùÐÁŠÁ$×¾Àá  ‹ÚØƒÃPRQ‹ÿ<!YZXÿ#€zuf‹\ÿÿÿ€Ï€çþ³?ëf»?f‰^ÿÿÿÙ­^ÿÿÿ».rÙå‰•lÿÿÿ›Ý½`ÿÿÿÆ…pÿÿÿ ÙÉŠaÿÿÿÙå›Ý½`ÿÿÿÙÉŠ­aÿÿÿÐåÐýÐÅŠÅ$×ŠàÐáÐùÐÁŠÁ$×ÐäÐä
Ä¾Àá  ‹ÚØƒÃPRQ‹ÿ<!YZXÿ#è  ÙÉ¤$    I ÝØ¤$    ¤$    Ãèí   ëèÝØÝØÙîÃÝØÝØÙî„ítÙàÃÝØÝØÙèÃ¤$    d$ Û½bÿÿÿÛ­bÿÿÿö…iÿÿÿ@tÆ…pÿÿÿ ÃÆ…pÿÿÿ ÜrÃëÌÌÌÙÉ¤$    ¤$    Û½bÿÿÿÛ­bÿÿÿö…iÿÿÿ@t	Æ…pÿÿÿ ëÆ…pÿÿÿ ÞÁÃ¤$    Û½bÿÿÿÛ­bÿÿÿö…iÿÿÿ@t ÙÉÛ½bÿÿÿÛ­bÿÿÿö…iÿÿÿ@t	Æ…pÿÿÿ ëÆ…pÿÿÿÞÁÃÝØÝØÛ- r€½pÿÿÿ Æ…pÿÿÿ
ÉÃI ÝØÝØÛ-r
ítÙà
ÉtÝ&rÞÉÃ
ÉtÙàÃÌÌÌÌÌÌÌÌÌÌÌÌÙÀÙüÜáÙÉÙàÙðÙèÞÁÙýÝÙÃ‹T$â   ƒÊf‰T$Ùl$Ã©   t¸    ÃÜ@r¸    Ã‹B%  ð=  ðtÝÃ‹Bƒì
  ÿ‰D$‹B‹
¤ÈÁá‰D$‰$Û,$ƒÄ
©    ‹BÃ‹D$%  ð=  ðtÃ‹D$Ãf<$tÙ,$ZÃf‹$f=tfƒà t›ßàfƒà t¸   èÙ   ZÃÙ,$ZÃƒìÝ$‹D$ƒÄ%  ðëƒìÝ$‹D$ƒÄ%  ðt==  ðt_f‹$f=t*fƒà u!›ßàfƒà t¸   ƒútè{   ZÃè]   ZÃÙ,$ZÃÝlrÙÉÙýÝÙÙÀÙáÜ\r›ßàž¸   sÇÜ|rë¿ÝdrÙÉÙýÝÙÙÀÙáÜTr›ßàž¸   vžÜtrë–ÌÌÌÌU‹ìƒÄà‰Eà‹E‰Eð‹E‰Eôë	U‹ìƒÄà‰EàÝ]ø‰Mä‹E‹M‰Eè‰MìEMàPQRèó  ƒÄÝEøf}tÙmÉÃ‹ÿU‹ìƒì ƒ=´Ç VWtÿ5äÇÿ ‹øë¿Æ ‹EƒøÞ   „Ì   ƒøetPjY+Át:ƒèt)ƒètƒè…•  ÇEäˆré  ‰MàÇEäˆré?  ÇEä„réæ   ‰MàÇEä„ré$  ÇEà   ÇEäré  ƒètTƒè	tCƒè…9  ÇEä”r‹E‹Ï‹uÇEà   Ý ‹EÝ]èÝ EàÝ]ðÝPÝ]øÿ<!ÿ×Yéú   ÇEà   é±   ÇEärë¸Ùè‹EÝéÞ   ƒè„Œ   ƒètAƒèt3ƒè	t%ƒèt-«  t	ƒè…±   ‹EÝ ëÂÇEä˜rëÇEä rëÇEä¨rëÇEä”r‹E‹Ï‹uÇEà   Ý ‹EÝ]èÝ EàÝ]ðÝPÝ]øÿ<!ÿ×Y…ÀuQè™žÿÿÇ !   ëDÇEà   ÇEä”r‹E‹Ï‹uÝ ‹EÝ]èÝ EàÝ]ðÝPÝ]øÿ<!ÿ×Y…ÀuèSžÿÿÇ "   ÝEøÝ_^ÉÃ‹ÿU‹ìQQSV¾ÿÿ  Vh?  è­   ÝE‹ØYY·M¸ð  #ÈQQÝ$f;Èu=è¤  HYYƒøwVSè}   ÝEëaÝEÝ°rSƒìØÁÝ\$Ý$jjèÑ  ƒÄë?è  ÝUøÝEƒÄÝáßàöÄD{öÃ uSƒìÙÉÝ\$Ý$jjëÇVÝÙSÝØè   ÝEøYY^[ÉÃ‹ÿU‹ìQÝ}üÛâ¿EüÉÃ‹ÿU‹ìQQ›Ù}ü‹M‹E÷Ñf#Mü#EfÈf‰MøÙmø¿EüÉÃ‹ÿU‹ì‹MƒìöÁt
Û-¸rÛ]ü›öÁt›ßàÛ-¸rÝ]ô››ßàöÁt
Û-ÄrÝ]ô›öÁt	ÙîÙèÞñÝØ›öÁ tÙëÝ]ô›ÉÃ‹ÿU‹ìQ›Ý}ü¿EüÉÃ‹ÿU‹ìQQÝEQQÝ$èÏ
  YY¨uJÝEQQÝ$èv  ÝEÝáßàYYÝÙöÄDz+ÜðzQQÝUøÝ$èS  ÝEøÚéßàYYöÄDzjXÉÃ3À@ÉÃÝØ3ÀÉÃ‹ÿU‹ìÝE¹  ðÙá¸  ðÿ9Mu;ƒ} uuÙèØÑßàöÄzÝÙÝØÝ€|éé   ØÑßàÝÙöÄA‹E…Ú   ÝØÙîéÑ   9Eu;ƒ} u5ÙèØÑßàöÄzÝÙÝØÙîé­   ØÑßàÝÙöÄA‹E…ž   ÝØÝ€|é‘   ÝØ9Mu.ƒ} …‚   ÙîÝEØÑßàöÄA„sÿÿÿØÙßàöÄ‹E{bÝØÙèë\9EuYƒ} uSÝEQQÝ$è·þÿÿÙîÝEYYØÑ‹ÈßàöÄAuÝÙÝØÝ€|ƒùu ÙàëØÙßàöÄzƒùuÝØÝ|ëÝØÙè‹EÝ3À]Ã‹ÿS‹ÜQQƒäðƒÄU‹k‰l$‹ììˆ   ¡°3Å‰Eü‹CV‹sW·‰|ÿÿÿ‹ƒèt)ƒèt ƒètƒètƒètƒèuljëjë
jëjëj_QFPWèª  ƒÄ…ÀuG‹KƒùtƒùtƒùtƒeÀþë‹EÀÝFƒàãƒÈÝ]°‰EÀFPFPQW…|ÿÿÿPE€PèJ  ƒÄhÿÿ  ÿµ|ÿÿÿèýÿÿƒ>YYtèxÁÿÿ„ÀtVè•ÁÿÿY…Àuÿ6è.  Y‹Mü_3Í^ètFÿÿ‹å]‹ã[Ã‹ÿU‹ìQQÝEÙüÝ]øÝEøÉÃ‹ÿU‹ì‹E¨ tjë¨t3À@]Ã¨tjë¨tjX]Ã¶ÀƒàÀ]Ã‹ÿS‹ÜQQƒäðƒÄU‹k‰l$‹ììˆ   ¡°3Å‰EüV‹s CWVPÿsè•   ƒÄ…Àu&ƒeÀþPCPCPÿsC ÿsPE€Pè|  ‹s ƒÄÿsè^ÿÿÿY‹øèÀÿÿ„Àt)…ÿt%ÝCVƒìÝ\$ÙîÝ\$ÝCÝ$ÿsWèc  ƒÄ$ëWè)  Ç$ÿÿ  VèÒûÿÿÝCYY‹Mü_3Í^è^Eÿÿ‹å]‹ã[Ã‹ÿU‹ìƒìS‹]V‹óƒæöÃtöEtjèÀûÿÿYƒæ÷é  ‹Ã#E¨tjè§ûÿÿYƒæûé„  öÃ„š   öE„   jè„ûÿÿ‹EY¹   #ÁtT=   t7=   t;Áub‹MÙîÜßàÝˆ|öÄ{LëH‹MÙîÜßàöÄ{,Ýˆ|ë2‹MÙîÜßàöÄzÝˆ|ë‹MÙîÜßàöÄzÝ€|ëÝ€|ÙàÝƒæþéá   öÃ„Ø   öE„Î   ‹EW‹ûÁïÝ ƒçÙîÝéßàöÄD‹œ   EüPQQÝ$è¬  ‹UüƒÄÂ úÿÿÝUðÙîúÎûÿÿ}3ÿÞÉGëgÞÙßàöÄAu	ÇEü   ëƒeü ‹Eö¹üÿÿƒàƒÈf‰Eö;Ñ}0‹Eð+Ê‹UôöEðt…ÿuGÑèöEô‰Eðt   €‰EðÑê‰UôƒéuØƒ}ü ÝEðtÙà‹EÝë3ÿÝØG…ÿ_tjèúÿÿYƒæýöÃtöE tj èúÿÿYƒæï3À…ö^”À[ÉÃ‹ÿU‹ìj ÿuÿuÿuÿuÿuÿuè   ƒÄ]Ã‹ÿU‹ì‹E3ÉS3ÛC‰H‹EW¿  À‰H‹E‰H‹MöÁt‹E¿  À	XöÁt‹E¿“  ÀƒHöÁt‹E¿‘  ÀƒHöÁt‹E¿Ž  ÀƒHöÁt‹E¿  ÀƒH‹MV‹u‹Áà÷Ð3Aƒà1A‹M‹À÷Ð3Aƒà1A‹M‹Ñè÷Ð3Aƒà1A‹M‹Áè÷Ð3Aƒà1A‹‹MÁè÷Ð3A#Ã1AèPùÿÿ‹ÐöÂt‹MƒIöÂt‹EƒHöÂt‹EƒHöÂt‹EƒHöÂ t‹E	X‹¹   #Át5=   t"=   t;Áu)‹Eƒë!‹M‹ƒàþƒÈ‰ë‹M‹ƒàýÃëð‹Eƒ ü‹¹   #Át =   t;Áu"‹Eƒ ãë‹M‹ƒàçƒÈë‹M‹ƒàëƒÈ‰‹E‹MÁá3áàÿ 1‹E	X ƒ}  t,‹Eƒ` á‹EÙ ‹EÙX‹E	X`‹E‹]ƒ``á‹EÙÙXPë:‹M‹A ƒàãƒÈ‰A ‹EÝ ‹EÝX‹E	X`‹M‹]‹A`ƒàãƒÈ‰A`‹EÝÝXPèw÷ÿÿEPjj Wÿp ‹M‹A¨tƒ&þ‹A¨tƒ&û‹A¨tƒ&÷‹A¨tƒ&ï‹A¨tƒ&ß‹ºÿóÿÿƒàƒè t5ƒèt"ƒètƒèu(   ë ‹%ÿûÿÿ   ‰ë‹%ÿ÷ÿÿ   ëî!‹Áèƒàƒè tƒèt	ƒèu!ë‹#Â   ë	‹#Â   ‰ƒ}  ^tÙAPÙëÝAPÝ_[]Ã‹ÿU‹ì‹EƒøtƒÀþƒøwè”ÿÿÇ "   ]Ãè”ÿÿÇ !   ]Ã‹ÿU‹ì‹Uƒì 3É‹Á9Åøzt@ƒø|ñë‹Åüz‰Mä…ÉtU‹E‰Eè‹E‰Eì‹E‰Eð‹EV‹u‰Eô‹E hÿÿ  ÿu(‰Eø‹E$‰uà‰Eüè!öÿÿEàPè½ºÿÿƒÄ…ÀuVèUÿÿÿYÝEø^ÉÃhÿÿ  ÿu(è÷õÿÿÿuè9ÿÿÿÝE ƒÄÉÃ‹ÿU‹ìÝEÙîÝáßàVöÄDz	ÝÙ3öé­   Wf‹}·Ç©ð  uz‹M‹U÷Áÿÿ u…ÒthÞÙ¾üÿÿßàS3ÛöÄAuCöEuÉ‰M…ÒyƒÉ‰MÒNöEtèf‹}‰U¸ïÿ  f#ø…Û·Çf‰}[t	 €  f‰EÝEj QQÝ$è1   ƒÄë#j QÝØQÝ$è   ·÷ƒÄÁîæÿ  îþ  _‹E‰0^]Ã‹ÿU‹ìQQ‹M·EÝE%€  Ý]ø‰þ  ÁáÈf‰MþÝEøÉÃ‹ÿU‹ì}  ð‹Eu…Àu@]Ã}  ðÿu	…ÀujX]Ãf‹Mºø  f#Êf;Êujëèºð  f;Êu÷Eÿÿ u…ÀtjëÍ3À]Ã‹ÿU‹ìf‹Mºð  f‹Áf#Âf;Âu3ÝEQQÝ$è|ÿÿÿYYƒètƒètƒèt3À@]ÃjëjX]Ã¸   ]Ã·Éá €  f…Àu÷Eÿÿ uƒ} t÷ÙÉƒá€   ]ÃÝEÙîÚéßàöÄDz÷ÙÉƒáàA@]Ã÷ÙÉáÿÿÿ   ]Ã÷(}   t&è•   ¡ÈÇ@£ÈÇƒøuhÌÇjè¢  éA  Ã¡¸ÇS3ÛCV;Ãt`…ÀuXh˜|ÿ0 ‹ð…öu‹óë*hŒ0Vÿh …ÀtìhÀ0V£¼Çÿh …Àt×£ÀÇ‹Îº¸Ç3Àð±
…Àu;ót;ÃtŠÃë2À^[Ãèˆÿÿÿ„ÀtV‹5¼Ç‹ÎhÄÇÿ<!ÿÖ^ÃºÄÇëó¡ÄÇ…Àuõ3ÉAð±
…ÀuìÃ‹ÿU‹ìƒì@EäjPÿuÿ …ÀujYÍ)öEøDtEVWEÀPÿ ‹}Ä‹÷÷Þ#uWÿ‹Â#U#EJÇÂ3Ò÷÷3Ò‹È‹E÷÷Èt3Àð	÷ƒéuô_^ÉÂ ‹ÿU‹ì‹<  SVWƒ¹t  vD‹±à  …öt:·  ‘  ‹¾  Ð·™  3ö…Ût‹B;ør	‹JÁ;ørFƒÂ(;órè3À_^[]Â ‹E‰‹E‹J$‰‹B   ëâ‹ÿU‹ìQQVEøPEüPèpÿÿÿ‹ð…öu‹EÇ    ëCƒ=ÐÇ u!÷Eø   €ÇÐÇ   ujYÍ)ÿuüVèÆþÿÿÿuÿuÿuüVÿ …ÀujYÍ)^ÉÂ ‹ÿU‹ìQ÷(}   t"èRþÿÿƒ-ÈÇuEüPÿ5ÌÇècÿÿÿè   ÉÃè»ýÿÿ„ÀtV‹5ÀÇ‹ÎhÄÇÿ<!ÿÖ^ÃÇÄÇ    Ã‹ÿU‹ìƒì4SVWèQýÿÿ‹M¿   ÇEÌ$   ‰MÐ‹A‹YÇ‹Qß‹q×÷‰]ü‹yÇ   ‰EØ‰}ð‹y‰}ø‹}‰}Ô3ÿ÷   ‰}Ü‰}à‰}ä‰}è‰}ìu$EÌ‰Eüè&ÿÿÿEüPjWhW mÀÿp 3Àé×  ‹E‹;+ÂÁø‰Eô‹†‹ÁÁè÷Ðƒà‰EÜ  u·Á‹˜}3ö‰Eà…ÛtEÌ‹ËPVÿ<!ÿÓ‹ð…ö…\  ‹˜}…ÿ…“   …ÛtEÌ‹ËPjÿ<!ÿÓ‹ø…ÿua3ÛSSÿuØÿ(!‹ø…ÿuNÿx ‹=´|‰Eì…ÿtEÌ‹ÏPjÿ<!ÿ×‹ø…ÿu%EÌ‰EüèNþÿÿEüPjSh~ mÀÿp ‹Eèéþ   ‹Mü‹Ç‡;ÇuWÿ˜ ‹˜}‰}ä…ÛtEÌ‹ËPjÿ<!ÿÓ‹ð…ö…•   ‹E3Û9Xt-9Xt(‹G<<8PE  u‹Mø9L8u;|84u‹uô‹Eð‹4°…öu^ÿuàWÿh ‹ð…öuNÿx ‹5´|‰Eì…ötEÌ‹ÎPjÿ<!ÿÖ‹ð…öu%EÌ‰Eðè€ýÿÿEðPjSh mÀÿp è,ûÿÿ‹uè‹E‰0‹˜}…Ûtƒeì EÌPj‹Ë‰}ä‰uèÿ<!ÿÓè8ýÿÿ‹Æ_^[ÉÂ ‹Môd‰    Y__^[‹å]QÃ‹Mð3ÍèW8ÿÿéÝÿÿÿPdÿ5    D$+d$SVW‰(‹è¡°3ÅPÿuüÇEüÿÿÿÿEôd£    ÃPdÿ5    D$+d$SVW‰(‹è¡°3ÅP‰EðÿuüÇEüÿÿÿÿEôd£    ÃPdÿ5    D$+d$SVW‰(‹è¡°3ÅP‰eðÿuüÇEüÿÿÿÿEôd£    ÃÌÌÌÌÌÌÌÌÌV‹D$Àu(‹L$‹D$3Ò÷ñ‹Ø‹D$÷ñ‹ð‹Ã÷d$‹È‹Æ÷d$ÑëG‹È‹\$‹T$‹D$ÑéÑÛÑêÑØÉuô÷ó‹ð÷d$‹È‹D$÷æÑr;T$wr;D$v	N+D$T$3Û+D$T$÷Ú÷ØƒÚ ‹Ê‹Ó‹Ù‹È‹Æ^Â ÌÌÌÌÌÌÌÌÌÌÌU‹ì‹E3ÒSVW‹H<È·A·YƒÀÁ…Ût‹}‹p;þr	‹HÎ;ùr
BƒÀ(;Órè3À_^[]ÃÌÌÌÌÌÌÌÌÌÌÌÌÌU‹ìjþh–h@l d¡    PƒìSVW¡°1Eø3ÅPEðd£    ‰eèÇEü    h   è|   ƒÄ…ÀtT‹E-   Ph   èRÿÿÿƒÄ…Àt:‹@$Áè÷ÐƒàÇEüþÿÿÿ‹Mðd‰    Y_^[‹å]Ã‹Eì‹ 3É8  À”Á‹ÁÃ‹eèÇEüþÿÿÿ3À‹Mðd‰    Y_^[‹å]ÃÌÌÌÌÌÌU‹ì‹M¸MZ  f9u‹A<Á8PE  u¹  f9Hu¸   ]Ã3À]ÃÌÌÌÌÌÌÌÌÌÌÌÌÌQL$+ÈƒáÁÉÁYé   QL$+ÈƒáÁÉÁYé   ÌÌÌÌQL$+ÈÀ÷Ð#È‹Ä% ðÿÿ;Èr
‹ÁY”‹ ‰$Ã-   … ëéÌÌÌÌÌU‹ìQƒ=<À|f}´ Àt	}µ ÀuT®]ü‹Eüƒð?¨t?©  u¸Ž  ÀÉÃ©  t*©  u¸‘  ÀÉÃ©  u¸“  ÀÉÃ©   u¸  ÀÉÃ¸  ÀÉÃ‹EÉÃÌÌÌÌÌÌÌÌ‹E€ƒà„   ƒe€ý‹|ÿÿÿéuÿÿÃÌÌÌÌÌ‹T$B‹Šxÿÿÿ3Èè£4ÿÿ‹Jø3Èè™4ÿÿ¸øŠéÉRÿÿÌÌÌÌÌMìéhÿÿÌÌÌÌÌ‹T$B‹Jà3Èèj4ÿÿ¸$‹éšRÿÿÌÌÌÌÌÌM¼éÈÿÿÌÌÌÌÌ‹T$B‹J¤3Èè:4ÿÿ‹Jð3Èè04ÿÿ¸P‹é`RÿÿÌÌÌÌÌÌÌÌÌÌÌÌM¸éøÿÿÌÌÌÌÌ‹T$B‹J¬3Èèú3ÿÿ‹Jü3Èèð3ÿÿ¸°‹é RÿÿÌÌÌÌÌÌÌÌÌÌÌÌ‹M¬éHÿÿ‹M¬ƒÁé=ÿÿ‹M¬ÁŒ   é?ûþÿ‹M¬Á¼   éáÿÿM°éÿÿÌÌÌÌÌ‹T$B‹J¬3Èè‹3ÿÿ‹Jü3Èè3ÿÿ¸Ü‹é±QÿÿÌÌÌÌÌÌÌÌÌÌÌÌÌ‹T$B‹Jè3ÈèW3ÿÿ¸(Œé‡QÿÿÌÌÌM”éxÿÿdÿÿÿéÿÿM éåÿÿM¼éÍúþÿMŒé•ÿÿÌÌÌÌÌ‹T$B‹Š,ÿÿÿ3Èè3ÿÿ‹Jø3Èèú2ÿÿ¸Œé*QÿÿÌÌÌÌÌÌhÌ   ‹…\ÿÿÿPè66ÿÿƒÄÃ‹…Xÿÿÿƒà„   ƒ¥XÿÿÿþHÿÿÿé*ÿÿÃ‹…Xÿÿÿƒà„   ƒ¥Xÿÿÿý8ÿÿÿéÿÿÃÌÌÌÌÌ‹T$B‹Š4ÿÿÿ3Èèv2ÿÿ‹Jü3Èèl2ÿÿ¸éœPÿÿÌÌÌÌÌÌÌÌM0é˜ÿÿMéÿÿ‹MœéˆÿÿHÿÿÿé}ÿÿ‹MœéuÿÿHÿÿÿéjÿÿpÿÿÿé_ÿÿMœé'ÿÿ‹M˜éOÿÿM éGÿÿ‹M˜é?ÿÿM égÿÿÌÌÌÌÌ‹T$B‹Š4ÿÿÿ3ÈèÖ1ÿÿ‹Jü3ÈèÌ1ÿÿ¸`éüOÿÿÌÌÌÌÌÌÌÌMÈéøÿÿ‹Méðÿÿ‹MðéèÿÿMÈéàÿÿ‹MéØÿÿ‹MðéÐÿÿMÈéÈÿÿ‹MéÀÿÿ‹Mðé¸ÿÿÌÌÌÌÌ‹T$B‹JÄ3ÈèZ1ÿÿ¸èéŠOÿÿÌÌÌÌÌÌj‹E¼Pèœ4ÿÿƒÄÃxÿÿÿévÿÿ‹M¸énÿÿ‹M¼éfÿÿxÿÿÿé[ÿÿ‹M¸éSÿÿ‹M¼éKÿÿÌÌÌÌÌ‹T$B‹Šxÿÿÿ3Èèê0ÿÿ‹Jü3Èèà0ÿÿ¸XŽéOÿÿÌÌÌÌÌÌÌÌÌÌÌÌ‹T$B‹Jà3Èè·0ÿÿ¸´ŽéçNÿÿÌÌÌMØéXÿÿÌÌÌÌÌ‹T$B‹J¤3ÈèŠ0ÿÿ‹Jü3Èè€0ÿÿ¸é°NÿÿÌÌÌÌÌÌÌÌÌÌÌÌ‹T$B‹Jô3ÈèW0ÿÿ¸8é‡NÿÿÌÌÌTÿÿÿéµÿÿÌÌÌÌÌ‹T$B‹ŠLÿÿÿ3Èè$0ÿÿ‹Jø3Èè0ÿÿ¸déJNÿÿ‹T$B‹Jð3Èèý/ÿÿ¸Èé-NÿÿMØé¡ÿÿÌÌÌÌÌ‹T$B‹JÐ3ÈèÓ/ÿÿ‹Jü3ÈèÉ/ÿÿ¸(‘éùMÿÿMémÿÿMØéeÿÿÌÌÌÌÌ‹T$B‹JÐ3Èè—/ÿÿ‹Jü3Èè/ÿÿ¸üé½Mÿÿ‹T$B‹Jì3Èèp/ÿÿ¸L’é MÿÿÌÌÌÌÌÌÌÌÌÌÌÌV‹5ØÇ…öt%WƒÏÿ‹ÇðÁFu‹‹ÎÿðÁ~Ou	‹‹Î_^ÿ`_^Ã                              h £ 
£ ú¢ ê¢ Ä à þ ž &ž Bž Vž hž |ž –ž ¬ž Âž Üž òž Ÿ  Ÿ :Ÿ RŸ jŸ ˆŸ ¢Ÿ ºŸ ÌŸ ØŸ êŸ     "  2  Z  f  t  ‚  Œ  š  ¬  º  Ð  æ  ò  þ  
¡ ¡ .¡ @¡ J¡ V¡ b¡ t¡ †¡ œ¡ ²¡ Ì¡ æ¡ ö¡ ¢ ¢ &¢ :¢ L¢ X¢ f¢ v¢ Š¢ –¢ ¬¢ ¾¢ Ì¢ Ú¢ ,£     Š œ     ÕV       02         Êb ú› wÛ »õ         ¥ Oõ Âœ                         node.exe    @‚~N      ½p½ˆ‚À ° Ð‚À ° bad allocation  ƒÀ ° lƒjX ° ¸ƒjX ° „À ° @"X"l"|""¨"È"               $      device or resource busy invalid argument    no such process not enough memory   operation not permitted resource deadlock would occur   resource unavailable try again  ˆ„e[ ° :   Ø„e[ ° ,…H[ =^ ú] Œ] ž] Â] generic ¬…º^ t` ”` ¸` ¯^ ø…Å^ „` ¦` Ã` ÕV       ·      5            m       o   &   ª      Ž      R      ó     ô     õ           7      d	     ‘   )        p      P            '                     (         {      W      !   '   Ô   '   ƒ      æ                       2      n      a	     ã  i                     )     Õ                                    '     @'  d   A'  e   ?'  f   5'  g   '  	   E'  j   M'  k   F'  l   7'  m   '     Q'  n   4'  p   '     &'     H'  q   ('     8'  s   O'  &   B'  t   D'  u   C'  v   G'  w   :'  {   I'  ~   6'  €   ='  ‚   ;'  ‡   9'  ˆ   L'  Š   3'  Œ   f   @(d   `(e   p(q   ˆ(   œ(!   ´(   Ì(	   Ø(h   ì(    ø(j   )g   )k   8)l   L)   `)m   t)   @")   ”)   ¨)   À)   Ì)&   Ü)(   ð)n   *o   **   0*   H*   l*   X"   x*   ˆ*   ”*s   ¤*t   ´*u   Ä*v   Ô*w   è*
   ø*y   +'   +x   (+z   @+{   L+   `+|   t+   ˆ+   ¤+   ´+   l"   Ð+€   à+}   ð+~    ,   |"   ,i    ,p   4,   "‚   L,Œ   d,…   |,   ˆ,†   œ,‡   ¬,   Ä,$   ¨"   È""   Ü,   ð,‰   -‹   -Š   (-   4-   T-   h-r   x-„   ˜-ˆ   ¨-address family not supported    address in use  address not available   already connected   argument list too long  argument out of domain  bad address bad file descriptor bad message broken pipe connection aborted  connection already in progress  connection refused  connection reset    cross device link   destination address required    directory not empty executable format error file exists file too large  filename too long   function not supported  host unreachable    identifier removed  illegal byte sequence   inappropriate io control operation  interrupted invalid seek    io error    is a directory  message size    network down    network reset   network unreachable no buffer space no child process    no link no lock available   no message available    no message  no protocol option  no space on device  no stream resources no such device or address   no such device  no such file or directory   not a directory not a socket    not a stream    not connected   not supported   operation canceled  operation in progress   operation not supported operation would block   owner dead  permission denied   protocol error  protocol not supported  read only file system   result out of range state not recoverable   stream timeout  text file busy  timed out   too many files open in system   too many files open too many links  too many symbolic link levels   value too large wrong protocol type unknown error   k e r n e l 3 2 . d l l     FlsAlloc    FlsFree FlsGetValue FlsSetValue InitializeCriticalSectionEx InitOnceExecuteOnce CreateEventExW  CreateSemaphoreW    CreateSemaphoreExW  CreateThreadpoolTimer   SetThreadpoolTimer  WaitForThreadpoolTimerCallbacks CloseThreadpoolTimer    CreateThreadpoolWait    SetThreadpoolWait   CloseThreadpoolWait FlushProcessWriteBuffers    FreeLibraryWhenCallbackReturns  GetCurrentProcessorNumber   CreateSymbolicLinkW GetCurrentPackageId GetTickCount64  GetFileInformationByHandleEx    SetFileInformationByHandle  GetSystemTimePreciseAsFileTime  InitializeConditionVariable WakeConditionVariable   WakeAllConditionVariable    SleepConditionVariableCS    InitializeSRWLock   AcquireSRWLockExclusive TryAcquireSRWLockExclusive  ReleaseSRWLockExclusive SleepConditionVariableSRW   CreateThreadpoolWork    SubmitThreadpoolWork    CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx                                                                                                                                                                                                                                                              üi D†jX ° bad exception   6   6   6   (6	   46
   @6
   L6   \6	   h6   p6	   |6	   ˆ6   6
   œ6   ¨6	   Ü}    ´6   ¼6   Ä6   È6   Ì6   Ð6   Ô6   Ø6   Ü6   à6   ì6   ð6   ô6   ø6   ü6    7   7   7   7   7   7   7   7    7   $7   (7   ,7   07   47   87   <7   @7   D7   H7   L7   P7   T7   X7   \7   `7   d7   h7	   t7	   €7   ˆ7   ”7   ¬7   ¸7   Ì7   ì7   8   ,8   L8   l8#   8   ¬8    Ð8   ð8&   9   49   D9   H9   P9   `9#   „9   Œ9	   ˜9   ¨9   Ä9   ä9%   :$   4:%   \:+   ˆ:   ¤:    È:"   ì:(   ;*   D;   `;   p;   „;   Ü}    ;   ¤;   À;   Ô;   ô;   Ü}    ð6   7   87   07   7   ¬7   <   __based(    __cdecl __pascal    __stdcall   __thiscall  __fastcall  __vectorcall    __clrcall   __eabi  __swift_1   __swift_2   __ptr64 __restrict  __unaligned restrict(    new     delete =   >>  <<  !   ==  !=  []  operator    ->  *   ++  --  -   +   &   ->* /   %   <   <=  >   >=  ,   ()  ~   ^   |   &&  ||  *=  +=  -=  /=  %=  >>= <<= &=  |=  ^=  `vftable'   `vbtable'   `vcall' `typeof'    `local static guard'    `string'    `vbase destructor'  `vector deleting destructor'    `default constructor closure'   `scalar deleting destructor'    `vector constructor iterator'   `vector destructor iterator'    `vector vbase constructor iterator' `virtual displacement map'  `eh vector constructor iterator'    `eh vector destructor iterator' `eh vector vbase constructor iterator'  `copy constructor closure'  `udt returning' `EH `RTTI   `local vftable' `local vftable constructor closure'  new[]   delete[]   `omni callsig'  `placement delete closure'  `placement delete[] closure'    `managed vector constructor iterator'   `managed vector destructor iterator'    `eh vector copy constructor iterator'   `eh vector vbase copy constructor iterator' `dynamic initializer for '  `dynamic atexit destructor for '    `vector copy constructor iterator'  `vector vbase copy constructor iterator'    `managed vector copy constructor iterator'  `local static thread guard' operator ""     operator co_await   operator<=>  Type Descriptor'    Base Class Descriptor at (  Base Class Array'   Class Hierarchy Descriptor'     Complete Object Locator'   `anonymous namespace'   4<p<¬<a p i - m s - w i n - c o r e - f i b e r s - l 1 - 1 - 1   a p i - m s - w i n - c o r e - s y n c h - l 1 - 2 - 0     k e r n e l 3 2     a p i - m s -                                       À         À       –  À         À       Ž  À         À         À       ‘  À       ’  À       “  À       ´ À       µ À             	   m s c o r e e . d l l   CorExitProcess      ‡™     ¹™     Ú¿ À ®™ ®™ ´¥ ¦ ;À LÀ     ç™ t¤  ¤ ÀÁ  Â —¹ ®™ Y¶         ®™     š     ð™ ®™ ±™ ”™ ®™                                  	               	      
                                                !      5      A      C      P      R      S      W      Y      l      m       p      r   	   €   
      
   ‚   	   ƒ      „      ‘   )   ž      ¡      ¤      §      ·      Î      ×      Y  *        AAAAA A$A(A0A8A@ALAXA`AlApAtAxA|A€A„AˆAŒAA”A˜AœA¤A°A¸A|AÀAÈAÐAØAäAìAøABBBB,B       8B@BHBPBXB`BhBpB€BB B´BÈBØBìBôBüBCCCC$C,C4C<CDCLC\CpC|CCˆC”C C°CÄCÔCèCüCDD DHD\DSun Mon Tue Wed Thu Fri Sat Sunday  Monday  Tuesday Wednesday   Thursday    Friday  Saturday    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec January February    March   April   June    July    August  September   October November    December    AM  PM  MM/dd/yy    dddd, MMMM dd, yyyy HH:mm:ss    S u n   M o n   T u e   W e d   T h u   F r i   S a t   S u n d a y     M o n d a y     T u e s d a y   W e d n e s d a y   T h u r s d a y     F r i d a y     S a t u r d a y     J a n   F e b   M a r   A p r   M a y   J u n   J u l   A u g   S e p   O c t   N o v   D e c   J a n u a r y   F e b r u a r y     M a r c h   A p r i l   J u n e     J u l y     A u g u s t     S e p t e m b e r   O c t o b e r   N o v e m b e r     D e c e m b e r     A M     P M     M M / d d / y y     d d d d ,   M M M M   d d ,   y y y y   H H : m m : s s     e n - U S   xD„DDœDj a - J P   z h - C N   k o - K R   z h - T W   øD4<8EpE¸EFdFp< FàFGXG¨G HHH˜H¬<¬H¸H Ia p i - m s - w i n - c o r e - d a t e t i m e - l 1 - 1 - 1   a p i - m s - w i n - c o r e - f i l e - l 1 - 2 - 2   a p i - m s - w i n - c o r e - l o c a l i z a t i o n - l 1 - 2 - 1   a p i - m s - w i n - c o r e - l o c a l i z a t i o n - o b s o l e t e - l 1 - 2 - 0         a p i - m s - w i n - c o r e - p r o c e s s t h r e a d s - l 1 - 1 - 2   a p i - m s - w i n - c o r e - s t r i n g - l 1 - 1 - 0   a p i - m s - w i n - c o r e - s y s i n f o - l 1 - 2 - 1     a p i - m s - w i n - c o r e - w i n r t - l 1 - 1 - 0     a p i - m s - w i n - c o r e - x s t a t e - l 2 - 1 - 0   a p i - m s - w i n - r t c o r e - n t u s e r - w i n d o w - l 1 - 1 - 0     a p i - m s - w i n - s e c u r i t y - s y s t e m f u n c t i o n s - l 1 - 1 - 0     e x t - m s - w i n - n t u s e r - d i a l o g b o x - l 1 - 1 - 0     e x t - m s - w i n - n t u s e r - w i n d o w s t a t i o n - l 1 - 1 - 0     a d v a p i 3 2     n t d l l   a p i - m s - w i n - a p p m o d e l - r u n t i m e - l 1 - 1 - 2     u s e r 3 2     e x t - m s -      AreFileApisANSI                                           LocaleNameToLCID       AppPolicyGetProcessTerminationMethod                                                                                                                                                                                                                                                                                          ( ( ( ( (                                     H                „ „ „ „ „ „ „ „ „ „                                        ‚ ‚ ‚ ‚ ‚ ‚                                                                                                                                                                                                                                                                                           €‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿu k        ØV   àV   èV   ðV    W   W   W   W	    W
   (W   0W   8W   @W   HW   PW   XW   `W   hW   pW   xW   €W   ˆW   W   ˜W    W   ¨W   °W   ¸W   ÀW   ÈW    ÐW!   ØW"   °O#   àW$   èW%   ðW&   øW'    X)   X*   X+   X,    X-   (X/   0X6   8X7   @X8   HX9   PX>   XX?   `X@   hXA   pXC   xXD   €XF   ˆXG   XI   ˜XJ    XK   ¨XN   °XO   ¸XP   ÀXV   ÈXW   ÐXZ   ØXe   àX   èX  ìX  øX  Y  œD  Y  Y  (Y  4Y	  \D  @Y  LY  XY  dY  pY  |Y  xD  D  ˆY  ”Y   Y  ¬Y  ¸Y  ÄY  ÐY  ÜY  èY  ôY   Z  Z   Z!  $Z"  0Z#  <Z$  HZ%  TZ&  `Z'  lZ)  xZ*  „Z+  Z,  œZ-  ´Z/  ÀZ2  ÌZ4  ØZ5  äZ6  ðZ7  üZ8  [9  [:   [;  ,[>  8[?  D[@  P[A  \[C  h[D  €[E  Œ[F  ˜[G  ¤[I  °[J  ¼[K  È[L  Ô[N  à[O  ì[P  ø[R  \V  \W  \Z  ,\e  <\k  L\l  \\  h\  t\  „D  €\	  Œ\
  ˜\  ¤\  °\  ¼\  È\  Ô\  à\  ø\,  ];  ]>  (]C  4]k  L]  \]  h]  t]	  €]
  Œ]  ˜]  ¤];  ¼]k  È]  Ø]  ä]  ð]	  ü]
  ^  ^   ^;  ,^  <^  H^  T^	  `^
  l^  x^  „^;  œ^  ¬^	  ¸^
  Ä^  Ð^  Ü^;  ô^  _	  _
  _  (_;  @_   P_	   \_
   h_;   t_$  „_	$  _
$  œ_;$  ¨_(  ¸_	(  Ä_
(  Ð_,  Ü_	,  è_
,  ô_0   `	0  `
0  `4  $`	4  0`
4  <`8  H`
8  T`<  ``
<  l`@  x`
@  „`
D  `
H  œ`
L  ¨`
P  ´`|  À`|  Ð`a r     b g     c a     z h - C H S     c s     d a     d e     e l     e n     e s     f i     f r     h e     h u     i s     i t     j a     k o     n l     n o     p l     p t     r o     r u     h r     s k     s q     s v     t h     t r     u r     i d     b e     s l     e t     l v     l t     f a     v i     h y     a z     e u     m k     a f     k a     f o     h i     m s     k k     k y     s w     u z     t t     p a     g u     t a     t e     k n     m r     s a     m n     g l     k o k   s y r   d i v       a r - S A   b g - B G   c a - E S   c s - C Z   d a - D K   d e - D E   e l - G R   f i - F I   f r - F R   h e - I L   h u - H U   i s - I S   i t - I T   n l - N L   n b - N O   p l - P L   p t - B R   r o - R O   r u - R U   h r - H R   s k - S K   s q - A L   s v - S E   t h - T H   t r - T R   u r - P K   i d - I D   u k - U A   b e - B Y   s l - S I   e t - E E   l v - L V   l t - L T   f a - I R   v i - V N   h y - A M   a z - A Z - L a t n     e u - E S   m k - M K   t n - Z A   x h - Z A   z u - Z A   a f - Z A   k a - G E   f o - F O   h i - I N   m t - M T   s e - N O   m s - M Y   k k - K Z   k y - K G   s w - K E   u z - U Z - L a t n     t t - R U   b n - I N   p a - I N   g u - I N   t a - I N   t e - I N   k n - I N   m l - I N   m r - I N   s a - I N   m n - M N   c y - G B   g l - E S   k o k - I N     s y r - S Y     d i v - M V     q u z - B O     n s - Z A   m i - N Z   a r - I Q   d e - C H   e n - G B   e s - M X   f r - B E   i t - C H   n l - B E   n n - N O   p t - P T   s r - S P - L a t n     s v - F I   a z - A Z - C y r l     s e - S E   m s - B N   u z - U Z - C y r l     q u z - E C     a r - E G   z h - H K   d e - A T   e n - A U   e s - E S   f r - C A   s r - S P - C y r l     s e - F I   q u z - P E     a r - L Y   z h - S G   d e - L U   e n - C A   e s - G T   f r - C H   h r - B A   s m j - N O     a r - D Z   z h - M O   d e - L I   e n - N Z   e s - C R   f r - L U   b s - B A - L a t n     s m j - S E     a r - M A   e n - I E   e s - P A   f r - M C   s r - B A - L a t n     s m a - N O     a r - T N   e n - Z A   e s - D O   s r - B A - C y r l     s m a - S E     a r - O M   e n - J M   e s - V E   s m s - F I     a r - Y E   e n - C B   e s - C O   s m n - F I     a r - S Y   e n - B Z   e s - P E   a r - J O   e n - T T   e s - A R   a r - L B   e n - Z W   e s - E C   a r - K W   e n - P H   e s - C L   a r - A E   e s - U Y   a r - B H   e s - P Y   a r - Q A   e s - B O   e s - S V   e s - H N   e s - N I   e s - P R   z h - C H T     s r     èXB   8X,   øgq   ØV    hØ   hÚ   h±   (h    4h   @hÏ   LhÕ   XhÒ   dh©   ph¹   |hÄ   ˆhÜ   ”hC    hÌ   ¬h¿   ¸hÈ    X)   Äh›   Ühk   àW!   ôhc   àV    iD   i}   i·   èV   0iE    W   <iG   Hi‡   W   TiH   W   `i¢   li‘   xiI   „i³   i«   àXA   œi‹   W   ¬iJ    W   ¸i£   ÄiÍ   Ði¬   ÜiÉ   èi’   ôiº    jÅ   j´   jÖ   $jÐ   0jK   <jÀ   HjÓ   (W	   TjÑ   `jÝ   lj×   xjÊ   „jµ   jÁ   œjÔ   ¨j¤   ´j­   Àjß   Ìj“   Øjà   äj»   ðjÎ   üjá   kÛ   kÞ    kÙ   ,kÆ   ðW#   8ke   (X*   Dkl   X&   Pkh   0W
   \kL   HX.   hks   8W   tk”   €k¥   Œk®   ˜kM   ¤k¶   °k¼   ÈX>   ¼kˆ   X7   Èk   @W   ÔkN   PX/   àkt    W   ìk¯   økZ   HW   lO   X(   lj   ØW   la   PW   (lP   XW   4l•   @lQ   `W   LlR   @X-   Xlr   `X1   dlx   ¨X:   pl‚   hW   ÐX?   |l‰   ŒlS   hX2   ˜ly    X%   ¤lg   øW$   °lf   ¼lŽ   0X+   Èlm   Ôlƒ   ÀX=   àl†   °X;   ìl„   XX0   øl   mw   mu   mU   pW   (m–   4mT   @m—   xW   Lm   ˆX6   Xm~   €W   dmV   ˆW   pmW   |m˜   ˆmŒ   ˜mŸ   ¨m¨   W   ¸mX   ˜W   ÄmY   ¸X<   Ðm…   Üm§   èmv   ômœ   ¨W    n[   èW"   nd   n¾   (nÃ   8n°   Hn¸   XnË   hnÇ   °W   xn\   Ð`ã   „nÂ   œn½   ´n¦   Ìn™   ¸W   änš   ðn]   pX3   ünz   ØX@   oŠ   ˜X8   o€    X9   $o   ÀW   0o^   <on   ÈW   Ho_   €X5   To|   °O    `ob   ÐW   lo`   xX4   xož   o{   X'   ¨oi   ´oo   Ào   Ðoâ   ào   ìo¡   øo²   pª   pF   pp   a f - z a   a r - a e   a r - b h   a r - d z   a r - e g   a r - i q   a r - j o   a r - k w   a r - l b   a r - l y   a r - m a   a r - o m   a r - q a   a r - s a   a r - s y   a r - t n   a r - y e   a z - a z - c y r l     a z - a z - l a t n     b e - b y   b g - b g   b n - i n   b s - b a - l a t n     c a - e s   c s - c z   c y - g b   d a - d k   d e - a t   d e - c h   d e - d e   d e - l i   d e - l u   d i v - m v     e l - g r   e n - a u   e n - b z   e n - c a   e n - c b   e n - g b   e n - i e   e n - j m   e n - n z   e n - p h   e n - t t   e n - u s   e n - z a   e n - z w   e s - a r   e s - b o   e s - c l   e s - c o   e s - c r   e s - d o   e s - e c   e s - e s   e s - g t   e s - h n   e s - m x   e s - n i   e s - p a   e s - p e   e s - p r   e s - p y   e s - s v   e s - u y   e s - v e   e t - e e   e u - e s   f a - i r   f i - f i   f o - f o   f r - b e   f r - c a   f r - c h   f r - f r   f r - l u   f r - m c   g l - e s   g u - i n   h e - i l   h i - i n   h r - b a   h r - h r   h u - h u   h y - a m   i d - i d   i s - i s   i t - c h   i t - i t   j a - j p   k a - g e   k k - k z   k n - i n   k o k - i n     k o - k r   k y - k g   l t - l t   l v - l v   m i - n z   m k - m k   m l - i n   m n - m n   m r - i n   m s - b n   m s - m y   m t - m t   n b - n o   n l - b e   n l - n l   n n - n o   n s - z a   p a - i n   p l - p l   p t - b r   p t - p t   q u z - b o     q u z - e c     q u z - p e     r o - r o   r u - r u   s a - i n   s e - f i   s e - n o   s e - s e   s k - s k   s l - s i   s m a - n o     s m a - s e     s m j - n o     s m j - s e     s m n - f i     s m s - f i     s q - a l   s r - b a - c y r l     s r - b a - l a t n     s r - s p - c y r l     s r - s p - l a t n     s v - f i   s v - s e   s w - k e   s y r - s y     t a - i n   t e - i n   t h - t h   t n - z a   t r - t r   t t - r u   u k - u a   u r - p k   u z - u z - c y r l     u z - u z - l a t n     v i - v n   x h - z a   z h - c h s     z h - c h t     z h - c n   z h - h k   z h - m o   z h - s g   z h - t w   z u - z a           log10                 ð?      ð?3      3                      ÿ                     €C O N O U T $           ÿÿÿÿÿÿ ÿÿÿÿÿÿ      ÀÛ?     ÀÛ?øÿÿÿÿBøÿÿÿÿB   €ÿÿÿ   €ÿÿÿ xŸPDÓ?X³1ï=        ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ              ð?      ð?                      0C      0C      ðÿ      ð     ð     ðùÎ—Æ‰5@=)d	“ÀU„5j€É%ÀÒ5–Üjü?÷™~Ÿ«@5±wÜòzò¿A.¿lzZ?               €ÿ       €ÿÿÜ§×¹…fq±@      ÿÿ@÷6C˜ö•ý?      à?exp          €ø Àû Ðû °ù              Àÿÿ5Âh!¢ÚÉÿ?5Âh!¢ÚÉþ?      ð?      @          ð?5Âh!¢ÚÉ>@ÿÿÿÿÿÿï             ˜À      ˜@      ð        log log10   exp pow asin    acos    sqrt          ð?       €D        € 0                    ä
¨|?÷Q-8>=  Þ¶W‹?0ûþ	k8= €–Þ®p”?á‘xü9=  >Ž.Úš?pnžÑ5= ÀY÷Ø­ ?¡  	Q*=  cÆ÷ú£??õñb6= ÀïY§?ÛTÏ?½=  Ç>ª?†ÓÐÈWÒ!= @Ã-32­?DÙøÛz=  Öp(°?vP¯(‹ó= `ñìœ±?ÔUS?à>= Àeý³?•gŒ€â7= `Å€'“´?ó¥bÍ¬Ä/= €é^s¶?Ÿ}¡#ÏÃ=  Jwk·?zn è= ÀäNÖ¸?‚LNÌå 9= @$"´3º?5Wg4pñ6= €§T¶•»?ÇNv$^)= àé&ê¼?ËË.‚)Ñë<  lÁ´B¾?éMóå%= `j±¿?§w·¢¥Ž*=  <Å›mÀ?Eúáî2=  Þ¬>Á?®ðƒËEŠ= Ðt?¸Á?Ôÿ“ñ= ÐOþQÂ?Àw(@	¬þ< àô0÷Â?AcÇõ0= Pyp”Ã?dry?é=  ´St)Ä?4K¼Å	Î>= Àþú$ÊÄ?QhæBC .= 0	ubÅ?-ª³ìß0=  öòÅ?a>-ï?=  ¢Æ?Ð™–ü,”í<  (lX Ç?ÍT@b¨ == Pÿ•´Ç?Å3‘h,%=  Îf¢?È?Ÿ#‡†ÁÆ = ðVÌÈ?ß Ï¡´ã6= ÐçïßYÉ?åàÿz $= ÀÒGéÉ? $òl35= @‹¤nÊ?[+¹¬ë3= ðRÅ· Ë?sªdLiô== pù|æˆË?r x"#ÿ2= @.ºãÌ?|½UÍË2=  lÔ‘Ì?r¬æ”F¶= aûÍ?–®‘Û4= ý«YŸÍ?sl×¼#{ = `~R=Î?ä“.òi1=  Ü,šÎ?‡ñõë = ”vXÏ? êë¯= pÛ€™Ï?h–ò÷}s"= Ð	E[
Ð?%S#[k= èû7€HÐ?Æ¹¹“j= ¨!V1‡Ð?®ó¿}Úa2= ¸jqÆÐ?2Á0Jé5= ¨ÒÍÙÿÐ?€ñö5= xÂ¾/@Ñ?‹º"B <1= i—zÑ?™\-!yò!= X¬0zµÑ?~„ÿb>Ï== ¸:ÛðÑ?ß#.X'= HBO&Ò?ù¤(~= x¦bbÒ?.°= ØCÀq˜Ò?y7ž¬i9+= €vÁÕÒ?¿¾Þê:= 0»§³Ó?2Ø¶™’8= xŸPDÓ?X³1ï=     ÀÛ?     ÀÛ?     QÛ?     QÛ?    ðèÚ?    ðèÚ?    à€Ú?    à€Ú?    ÀÚ?    ÀÚ?     ¾Ù?     ¾Ù?    €]Ù?    €]Ù?    PÙ?    PÙ?     ©Ø?     ©Ø?    àUØ?    àUØ?    (ÿ×?    (ÿ×?    `¯×?    `¯×?    ˜_×?    ˜_×?    Ð×?    Ð×?    €ÃÖ?    €ÃÖ?    ¨zÖ?    ¨zÖ?    Ð1Ö?    Ð1Ö?    pìÕ?    pìÕ?    §Õ?    §Õ?    (eÕ?    (eÕ?    @#Õ?    @#Õ?    ÐäÔ?    ÐäÔ?    `¦Ô?    `¦Ô?    hkÔ?    hkÔ?    ø,Ô?    ø,Ô?    xõÓ?    xõÓ?    €ºÓ?    €ºÓ?     ƒÓ?     ƒÓ?    øNÓ?    øNÓ?    xÓ?    xÓ?    pãÒ?    pãÒ?    à²Ò?    à²Ò?    Ø~Ò?    Ø~Ò?    HNÒ?    HNÒ?    ¸Ò?    ¸Ò?     ðÑ?     ðÑ?    ˆÃÑ?    ˆÃÑ?    p–Ñ?    p–Ñ?    XiÑ?    XiÑ?    ¸?Ñ?    ¸?Ñ?     Ñ?     Ñ?     éÐ?     éÐ?    ØÂÐ?    ØÂÐ?    8™Ð?    8™Ð?    sÐ?    sÐ?    pIÐ?    pIÐ?    À&Ð?    À&Ð?    ˜ Ð?    ˜ Ð?    à´Ï?    à´Ï?    €oÏ?    €oÏ?     *Ï?     *Ï?    ÀäÎ?    ÀäÎ?    `ŸÎ?    `ŸÎ?     ZÎ?     ZÎ?    Î?    Î?    0ÖÍ?    0ÖÍ?    À—Í?    À—Í?    PYÍ?    PYÍ?    àÍ?    àÍ?    `ãÌ?    `ãÌ?    ð¤Ì?    ð¤Ì?    pmÌ?    pmÌ?     /Ì?     /Ì?    €÷Ë?    €÷Ë?     ÀË?     ÀË?      à?   r   ”r   „r   ˆr   à{   è{!   ð{   ˜r    r   ø{    |   ¨r   |   |    |   |   |   $|   ,|   4|   <|   D|   L|   T|"   \|#   `|$   d|%   h|&   p|sinh    cosh    tanh    atan    atan2   sin cos tan ceil    floor   fabs    modf    ldexp   _cabs   _hypot  fmod    frexp   _y0 _y1 _yn _logb   _nextafter            ðÿÿÿÿÿÿï       €K E R N E L 3 2 . D L L                   €O   _ÿÿÿÿ    ¼                                                           °†   <!                                                                                   ì†                    HÀnode.exe         Unknown exception   bad array new length    string too long     napi_get_last_error_info    Error::New  napi_is_exception_pending   napi_get_and_clear_last_exception   Error in native callback    napi_create_string_utf8 napi_create_error   napi_create_reference   Error::Error    message napi_close_handle_scope HandleScope::~HandleScope   napi_close_escapable_handle_scope   EscapableHandleScope::~EscapableHandleScope ERROR: Unknown exception during async callback  Callback receiver must be an object or function Callback must be a function Callback called after move  wlan    type    wlan_notification_acm_connection_complete   code    wlan_notification_acm_disconnected  wlan_notification_acm_scan_complete wlan open handle error  wlan rigister notification error    addEventListener    Y:\nodejs-projects\network-interface\src\main.cpp   main    Reference<T>::Reference vector too long pF pF  E ðD  B ÀB  H  H F €F  B ÀB I I  H H  B ÀB ` p ?  ?  @ ° ÐC ÐC àB ÐB  B ÀB àD àD ðC àC  B ÀB     Ög}d       X   ‡ w     Ög}d          \‡ \w     Ög}d       x  p‡ pw     Ög}d                                                                   @»T‚           d‚l‚    @»        ÿÿÿÿ    @   T‚            Äºœ‚           ¬‚´‚    Äº        ÿÿÿÿ    @   œ‚            X¹ä‚           ô‚ ƒ´‚    X¹       ÿÿÿÿ    @   ä‚            »0ƒ           @ƒPƒ ƒ´‚    »       ÿÿÿÿ    @   0ƒ            ˜¸€ƒ           ƒœƒ´‚    ˜¸       ÿÿÿÿ    @   €ƒ            ¸¸Ìƒ           Üƒìƒœƒ´‚    ¸¸       ÿÿÿÿ    @   Ìƒ            8¹„           ,„8„´‚    8¹       ÿÿÿÿ    @   „           d„l„    X»        ÿÿÿÿ    @   T„            ø¸œ„           ¬„¼„8„´‚    ø¸       ÿÿÿÿ    @   œ„            Ø¸ì„           ü„…¼„8„´‚    Ø¸       ÿÿÿÿ    @   ì„            |»@…           P…\…l„    |»       ÿÿÿÿ    @   @…           ˆ……    ¨»        ÿÿÿÿ    @   x…            ì»À…           Ð…Ü……    ì»       ÿÿÿÿ    @   À…            ,¼†           †(†…    ,¼       ÿÿÿÿ    @   †            ¹X†           h†t†´‚    ¹       ÿÿÿÿ    @   X†
h  §h  @l  P…  Q  ½ ý l   ð ~   
 @ m   Ð ú $ ` ‡     € €                RSDSVs>j«úÀN¢êg$m¢?—   Y:\nodejs-projects\network-interface\build\Release\win-ia32.pdb     Ù   Ù       ×   GCTL      .text$di        .text$mn    0 €  .text$x ° 2   .text$yd       <  .idata$5    <!    .00cfg  @!    .CRT$XCA    D!    .CRT$XCU    L!    .CRT$XCZ    P!    .CRT$XIA    T!    .CRT$XIC    d!    .CRT$XIZ    h!    .CRT$XPA    l!    .CRT$XPX    t!    .CRT$XPXA   x!    .CRT$XPZ    |!    .CRT$XTA    €!    .CRT$XTZ    ! °`  .rdata  @‚ P  .rdata$r    † \   .rdata$sxdata   ì†    .rdata$voltmd   ‡ ä  .rdata$zzzdbg   èŠ    .rtc$IAA    ìŠ    .rtc$IZZ    ðŠ    .rtc$TAA    ôŠ    .rtc$TZZ    øŠ P  .xdata$x    H—     .didat$2    h—     .didat$3    ˆ— ˆ   .didat$4    ˜   .didat$6    › Œ   .didat$7     › P   .edata  ð› (   .idata$2    œ    .idata$3    ,œ <  .idata$4    h Ö  .idata$6     ° ˜  .data   ˜¸ ¨  .data$r @» (  .data$rs    h¼ ˆ   .didat$5    ð¼ ü
  .bss     Ð `   .rsrc$01    `Ð €  .rsrc$02                    "“   ‹                       ÿÿÿÿ0"“   H‹                       ÿÿÿÿ€"“   t‹   Œ‹               ÿÿÿÿ        °ÿÿÿÿ                  ‹@           a "“   Ô‹                       ÿÿÿÿð"“    Œ                       ÿÿÿÿ0    8   C   Q   _"“   LŒ   \Œ               ÿÿÿÿ    ÿÿÿÿ                  pŒ   Äºìÿÿÿ=! @           .! "“   ´Œ   ìŒ               ÿÿÿÿÀ    È   Ó   Û          ã                       ¨º\ÿÿÿþ# "“   4                       ÿÿÿÿ     5   Wÿÿÿÿ5   W    "“   ˆ                           ÿÿÿÿ°    ¸   À   È   Ó   Û   æ   ñ   ù   	   	   "“	   Ž                           ÿÿÿÿh    p   xÿÿÿÿP   X   `ÿÿÿÿ€   ˆ   "“   |Ž                       ÿÿÿÿÀÿÿÿÿÏ   Ú   âÿÿÿÿê   õ   ý"“   ØŽ   èŽ               ÿÿÿÿ    ÿÿÿÿ                  üŽ	   ¨ºìÿÿÿb7 "“   0                       ÿÿÿÿ`"“   \                       ÿÿÿÿ£k "“   ˆ                   ÿÿÿÿ        Àÿÿÿÿ                 ´	   ¨ºPÿÿÿVB     þÿÿÿ    Øÿÿÿ    þÿÿÿ±M ÄM     þÿÿÿ    Ðÿÿÿ    þÿÿÿ    ÔO     þÿÿÿ    Ðÿÿÿ    þÿÿÿ    œP         P þÿÿÿ    Ôÿÿÿ    þÿÿÿxQ —Q     ð     \   |– —    ˜¸    ÿÿÿÿ       OX     ð     ”   ¤h —    ¸¸    ÿÿÿÿ       X ÿÿÿÿ£k "“   À                       ÿÿÿÿK    S"“   ì                       ÿÿÿÿ"“    ‘                           ð     \‘   p‘Œ‘ä– —    Ø¸    ÿÿÿÿ       ¹Z     ø¸    ÿÿÿÿ       Z þÿÿÿ    Øÿÿÿ    þÿÿÿ\j jj     þÿÿÿ    Ðÿÿÿ    þÿÿÿ    Ù‚     ‚ š‚ þÿÿÿ    ¤ÿÿÿ    þÿÿÿ    ë€     5€ ?€ @            ÿÿÿÿ    ÿÿÿÿ                  ’"“   (’   8’               þÿÿÿ    Ðÿÿÿ    þÿÿÿ­w ±w     þÿÿÿ    Øÿÿÿ    þÿÿÿZx ^x     ð     ¼’   È’ —    ¹    ÿÿÿÿ       W     þÿÿÿ    Ôÿÿÿ    þÿÿÿ    ßŒ     þÿÿÿ    Øÿÿÿ    þÿÿÿ| Œ     þÿÿÿ    Øÿÿÿ    þÿÿÿ    ¯Ž     þÿÿÿ    Ôÿÿÿ    þÿÿÿ    ·–     þÿÿÿ    Ôÿÿÿ    þÿÿÿ    \–     þÿÿÿ    Øÿÿÿ    þÿÿÿ¢› ¦›     þÿÿÿ    Øÿÿÿ    þÿÿÿ    DŸ     þÿÿÿ    Øÿÿÿ    þÿÿÿ    ^      þÿÿÿ    Øÿÿÿ    þÿÿÿ    ¯Ÿ     þÿÿÿ    Øÿÿÿ    þÿÿÿ          þÿÿÿ    Ôÿÿÿ    þÿÿÿ    v¥     þÿÿÿ    Ôÿÿÿ    þÿÿÿ    5¶     þÿÿÿ    Øÿÿÿ    þÿÿÿ    ‚±     þÿÿÿ    Ôÿÿÿ    þÿÿÿ    Â     þÿÿÿ    ¼ÿÿÿ    þÿÿÿ    {Å     þÿÿÿ    Ôÿÿÿ    þÿÿÿ    :Ã     þÿÿÿ    Øÿÿÿ    þÿÿÿ    ÄÆ     þÿÿÿ    ´ÿÿÿ    þÿÿÿ    pÇ     þÿÿÿ    Ðÿÿÿ    þÿÿÿ    yÉ     þÿÿÿ    Ôÿÿÿ    þÿÿÿ    Î     þÿÿÿ    Ðÿÿÿ    þÿÿÿ    àÝ     þÿÿÿ    Ôÿÿÿ    þÿÿÿ    Àß     þÿÿÿ    Ðÿÿÿ    þÿÿÿ    €è     þÿÿÿ    Ðÿÿÿ    þÿÿÿ    ×ë     þÿÿÿ    Ôÿÿÿ    þÿÿÿ    [ï     þÿÿÿ    Øÿÿÿ    þÿÿÿÙì    ð     È–   ,—|– —    ¨º    ÿÿÿÿ    0         t¹   ÿÿÿÿ       °    X¹    ÿÿÿÿ       €    D–`–¬– —    º   ÿÿÿÿ       P5    ä– —    °     ˜–    8¹    ÿÿÿÿ       `     Äº    ÿÿÿÿ       €     ð     4–    »    ÿÿÿÿ       P    ! ð¼ h¼ ˆ— ›                                         ˜ äš (˜ B˜ ^˜ r˜ ~˜ Ž˜ ¦˜ º˜ Ö˜ ô˜ ™ .™ D™ ^™ x™ ˆ™  ™ º™ Ô™ ê™ ú™ š š :š Pš fš zš Žš ²š Êš öš     ¡enapi_create_function  öenapi_open_handle_scope  Æenapi_get_last_error_info  enapi_create_error 3fuv_close  Êenapi_get_null µenapi_delete_reference ¸enapi_fatal_error  ìenapi_is_exception_pending Ýenapi_get_value_string_utf8  ‹enapi_close_escapable_handle_scope ·enapi_escape_handle  ‚enapi_add_finalizer  ­enapi_create_type_error  ªenapi_create_string_utf8 'fuv_async_send ðenapi_module_register  fnapi_set_named_property Çenapi_get_named_property ïenapi_make_callback  &fuv_async_init fnapi_typeof fnapi_throw  »enapi_get_and_clear_last_exception ¤enapi_create_object  Ñenapi_get_undefined  fnapi_set_property Àenapi_get_cb_info  õenapi_open_escapable_handle_scope  §enapi_create_reference Œenapi_close_handle_scope <fuv_default_loop Îenapi_get_reference_value                                                                                                                                                    ÿÿÿÿ    Ò›          È› Ì› Ð› H! à›   win-ia32.node _register_main_ ,œ         |    \         ¸ 0!                     h £ 
£ ú¢ ê¢ Ä à þ ž &ž Bž Vž hž |ž –ž ¬ž Âž Üž òž Ÿ  Ÿ :Ÿ RŸ jŸ ˆŸ ¢Ÿ ºŸ ÌŸ ØŸ êŸ     "  2  Z  f  t  ‚  Œ  š  ¬  º  Ð  æ  ò  þ  
¡ ¡ .¡ @¡ J¡ V¡ b¡ t¡ †¡ œ¡ ²¡ Ì¡ æ¡ ö¡ ¢ ¢ &¢ :¢ L¢ X¢ f¢ v¢ Š¢ –¢ ¬¢ ¾¢ Ì¢ Ú¢ ,£     Š œ     xGetModuleHandleA  KERNEL32.dll  ¶ WlanOpenHandle  Ò WlanRegisterNotification  wlanapi.dll ±UnhandledExceptionFilter  qSetUnhandledExceptionFilter GetCurrentProcess TerminateProcess  ‰IsProcessorFeaturePresent ‚IsDebuggerPresent ÓGetStartupInfoW {GetModuleHandleW  OQueryPerformanceCounter GetCurrentProcessId GetCurrentThreadId  ìGetSystemTimeAsFileTime fInitializeSListHead gInitializeSRWLock ´ReleaseSRWLockExclusive   AcquireSRWLockExclusive 4EnterCriticalSection  ÁLeaveCriticalSection  cInitializeCriticalSectionEx «TryEnterCriticalSection DeleteCriticalSection ±GetProcAddress  ÕRtlUnwind dRaiseException  oInterlockedFlushSList dGetLastError  4SetLastError  0EncodePointer bInitializeCriticalSectionAndSpinCount ¢TlsAlloc  ¤TlsGetValue ¥TlsSetValue £TlsFree ®FreeLibrary ÇLoadLibraryExW  aExitProcess zGetModuleHandleExW  wGetModuleFileNameW  HHeapAlloc LHeapFree  xFindClose ~FindFirstFileExW  FindNextFileW IsValidCodePage µGetACP  šGetOEMCP  ÄGetCPInfo ÙGetCommandLineA ÚGetCommandLineW óMultiByteToWideChar WideCharToMultiByte :GetEnvironmentStringsW  ­FreeEnvironmentStringsW µLCMapStringW  ·GetProcessHeap  ÕGetStdHandle  QGetFileType %SetFilePointerEx  ÚGetStringTypeW  QHeapSize  OHeapReAlloc NSetStdHandle  ¢FlushFileBuffers  WriteFile GetConsoleOutputCP  ÿGetConsoleMode  ‰ CloseHandle Î CreateFileW WriteConsoleW DecodePointer æGetSystemInfo ÐVirtualProtect  ÒVirtualQuery  ÆLoadLibraryExA                                                                                                                                                                                                    ÿÿÿÿ±¿DNæ@»   #           ÿÿÿÿ             “                                                                                                                                                                                            ÿÿÿÿ    °J                                         À±            À±            À±            À±            À±                    ð¶        0M°N¨?                         ±È±C                                                                                                                                                                                                                                                                                                                                       abcdefghijklmnopqrstuvwxyz      ABCDEFGHIJKLMNOPQRSTUVWXYZ                                                                                                                                                                                                                                                                                                                                                                                                                                                           abcdefghijklmnopqrstuvwxyz      ABCDEFGHIJKLMNOPQRSTUVWXYZ                                                                                                                                         ¤  `‚y‚!       ¦ß      ¡¥      Ÿàü    @~€ü    ¨  Á£Ú£                        þ      @þ      µ  Á£Ú£                        þ      Aþ      ¶  Ï¢ä¢ å¢è¢[                 þ      @~¡þ    Q  QÚ^Ú  _ÚjÚ2                 ÓØÞàù  1~þ    þÿÿÿ    @·˜Ç˜Ç˜Ç˜Ç˜Ç˜Ç˜Ç˜Ç˜ÇD·œÇœÇœÇœÇœÇœÇœÇ.   .                                                                                                                                                                                                                   þÿÿÿ            u˜                     ¸€à1 ì€                     !    .?AVlogic_error@std@@    !    .?AVlength_error@std@@   !    .?AVsystem_error@std@@   !    .?AV_System_error@std@@  !    .?AVbad_exception@std@@  !    .?AVruntime_error@std@@  !    .?AVbad_alloc@std@@  !    .?AVObjectReference@Napi@@   !    .?AV<lambda_d140f3408c5d6501cef4f188841a2113>@@  !    .?AV<lambda_dca5e2c226bdc3b609aca40752122a18>@@  !    .?AV?$Reference@VObject@Napi@@@Napi@@    !    .?AV<lambda_3cd62b67e7f0728e5c484febe10e0b49>@@  !    .?AV<lambda_5cf9e5d7c3aca48226ddc103b2d1909b>@@  !    .?AVError@Napi@@     !    .?AVexception@std@@  !    .?AV<lambda_66695dafc1bb79b0c2ae942f6900d83a>@@  !    .?AVbad_array_new_length@std@@   !    .?AVtype_info@@  !    .?AVerror_category@std@@     !    .?AV_Generic_error_category@std@@    !    .?AVstl_critical_section_interface@details@Concurrency@@     !    .?AVstl_critical_section_vista@details@Concurrency@@     !    .?AVstl_critical_section_win7@details@Concurrency@@ ¯I öJ ÊI ÔI ÞI èI òI üI J J J $J .J 8J BJ LJ VJ `J jJ tJ ~J ˆJ ’J œJ ¦J °J ºJ ÄJ ÎJ ØJ âJ ìJ  K                                                                                                                                                                                                                                                                                                         €                  0  €               	  H   `Ð }                  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
                                      ü   0020`0Œ0´0È0õ01#1<1\1v1Œ1¦1Á1ç12@2S2l2†2û23F3U3“3<4r4Š4ª4Á4Ì45*5T5‹5¹5Ð5í56*6L6S6e6y6¤6Ë6ß6ä6î6ó6ý67777 7*7/787<7T7‰7¢7Ä7æ78+8:8?8X8«8Ê899x9‹9 9Ë9Ð9Ú9ß9	::—:e;’;—;¶;Å;<!<S<a<f<•<¶<È<=2=T=Y=c=h=š=³=Þ=÷=>>*>C>n>‡>“>˜>º>Û>?6?E?    Œ   020|0‡0Ž0•0È0æ0ø0/141H1f1x1ð1÷1Û2W3„3Ä34Ä4ã4k5ô5ù56-626ø6Ö7è78œ8-9F9»9*:]:u:–:¨:<©<¹<Ö<ç<'=1==‰=Ô=Þ=f>u>¨>?!?'?-?r?|?Œ?Ü?é?ó? 0  t   0š0º0Õ0Ü0111'131N11©1Ä121272V5h5¼5Ï5ñ5ö5 666W6Ž6ª6Ã6í677k7”7Æ7ý78*838C8N8z8”8¶8Å89R9o9¨9?$?b?‘? @    ª01(1³12b2v2’2Ñ2ê23%303£3½3Ö3á3ú3454@4³4Í4æ4ñ4
5+5^5e5y5„5›5
6$6>6a6v66š6»6î6õ6	77+7š7´7Î7ñ788*8K8~8…8™8¤8»8*9D9^99–9°9½9Ë9Õ9ß9é9ó9ý9:::%:/:9:C:M:W:a:k:u::‰:“::§:±:»:Å:Ï:Ù:ã:í:÷:;;¢;F<f<—<Ê<ð<ÿ<=="=(=.=4=:=O=d=k=q=ƒ==õ=>*><>Š>÷>#?0?Q?V?o?t??Ã?Ë?   P     0
0030K0°0Â01¾1Ø122!2(2;2I2O2U2[2a2g2n2u2|2ƒ2Š2‘2˜2 2¨2°2¼2Å2Ê2Ð2Ú2ä2ô2333:3@3T3q3„3Ž3—3>4G4O4Š4”44¦4»4Ä4ó4ü4555>5E5X5n5:6Z6d6}6‘6®6ì6û677'7a7j7w7}7ƒ77•7¸7À7Å7Ø7ì7ñ78%8D8_8u8©8å9 :|:¡:É:×:;p;ý;<§<´<Á<Þ=õ=,>>>R>Y>i>p>|>–>µ>À>Ë>×>ú>??,?>?Ü?   `  P  0%0<0\0z0š0¾0É0à0;1Q1]1d1Ì2Ò2Ù2à2å2ë2ñ2ö2ü2333333$3)3/353:3@3F3K3Q3W3\3b3h3m3s3y3~3„3Š33•3›3 3¦3¬3±3·3½3Â3È3Î3Ó3Ù3ß3ä3ê3ð3õ3û3444444#4(4.44494?4E4J4P4V4[4a4g4l4r4x4}4ƒ4‰4Ž4”4š4Ÿ4¥4«4°4¶4¼4Á4Ç4Í4Ò4Ø4Þ4ã4é4ï4ô4ú4 555555"5'5-53585>5D5I5O5U5Z5`5f5k5p5w5|5Š5™5£5°5»5C6Z6¢6º6¿667Ì7Ý7ÿ9‡:k<ó<'=/=A=N=p=Ð= >E>X>Ð>®?   p  `   0050C0ñ1(2/24282<2@2–2Û2à2ä2è2ì2[5p5Š5²5À5Æ5á5	6696C6M6[6v6‡6“6â6ñ6Ñ7þ9B<¸<(?g??…?¬? €  ¸   p1244?4[4{4‰44–4Å4Ñ4ê5ñ5(6<6M6Y6h6€6©6¼6ä6ÿ67	7$717:7?7D7_7i7u7z77š7¤7°7µ7º7Ø7â7î7ó7ø78)8A8ƒ8“8Õ8Ý8ä8v9R:@;J;W;ˆ;º;Ë;Ö;#<F<M<\<z<’<­<¸<?>U>q>¾>Ë>Ú>ï>ù>???7?<?H?M?a?     È   0070I0R0 0¨0²0»0Ì0Þ0í01c1q1z1ì1õ1.292%4W4^4‰5ª5Å5Õ5Ú5ä5é5ô5ÿ56n6Ì6ß67’7/8~8‰8È8ñ8D9‰99•9¡9¾9÷9:::*:0:;:A:O:m:†:‹:·:È:Í:;G;};š;É;Ô;û;<$<2<><J<X<h<}<”<·<Ò<ß<í<û<==0=>¯>â>õ>?S?„?¾?         0‚0˜03122=2W2o2v2—2À2Õ2ç2ô23&3D3k3€333Æ3Í3î34,4>4K4d4u44¡4²4Ç4Ñ4ô4þ450555>5…5¹5Ò5ÿ5666&6,6G6N6‚6ˆ677B7H7Z7è7ž8ä8Ì;²<=·=í= °  è    0F0¬0Ç0Ñ0D1§1Æ1é142;2B2I2c2r2|2‰2“2£2ù213Y3H5k5°5¼5Î56[6d6h6n6r6x6|6†6™6¢6½6ê67V7Õ78)8t8™9ž9¤9©9":Ú:%;“;<<<&<+<0<@<E<J<o<‹<™<¥<±<Å<Û<=-=6=n=†=–=ª=¯=´=Ñ=õ=	>>>.>8>H>M>R>m>|>‡>Œ>‘>¬>»>Æ>Ë>Ð>î>ý>???3?C?|? ?Ä?Û?à?ë? À  ´   0$000=0D0N0d0œ0Î0é0#1Z1l1 1Ã1'272h2˜2Ð2è233p3w3~3…3’3ã3è3í3ò3û3¼4Å4%5.5F5r5˜5ì5ô566"6:6G6Ó6í6ò6Ú8û899/9<9A9O9<:; ;°;ý;Õ<<=f=–=ü=5>L>l>î>?+?=?O?a?s?…?—?©?»?Í?ß?ñ?   Ð  h   0$060H0Z01X2ª2¼2i34…4ç4f5œ5ê5‚6Â6L9­;³;<<@<i<”<7=Q=—=¦=´=Ñ=Ù=>	>%>,>C>Y>”>›>ë>ÿ>0?c?x?‰?ó? à  p   	0X0t0–0è0(1z1Ô1à2 3Z33¯3º3È3S4„4£4µ4¿4á45o5•5¼5Ý5X6~6¥6Ä6€7°7Ê7ý78989’9::_:³:Ç:c;<)<S<§>á>?–?¬? ð  À   0O0Y0t0×0ö01‚2í233D3h3s3€3’3Ú3ó3w4Œ4•4ž4 5&5+525B5P5a5y55‹5ª5°5¿5Ä5	666!6)6G6O6±6½6Ñ6Ý6é6	7P7z7‚7Ÿ7¯7»7Ê7Ý89P9‡9¤9¸9Ã9:™:Ü:;v;ö;†<¦<¶<=>>->5>E>V>½>È>Î>×>? ?,?;?N?m?˜?³?ü?   €   000B0d0ˆ0ú0©1»1Í192˜2ó2a3€3±35=6X6n6„6Œ6ð9ø:	;‰=™=Ÿ=©=»=Í=Ó=â=é=ò=ø=þ=>>9>@>F>O>X>>š>â>ë>ô>ÿ>???P?~?Ž?²?Ì?Ý?ê?  |   0000:0d0¬0Ö0á0÷0	1#181D1J1_1„1ž1¤1¹1222-2R2e22Ð2393V4[4m4‹4Ÿ4¥4¶5r6¡6Û67Š7´78Ÿ8?9±9+:T:‹:´:ñ:;B;~;›;³;     $  <1D1H1T1X1\1`1l1p1t1œ1 1¨1¬1°1´1¸1¼1À1Ä1Ø1Ü1à1ä1è1ì1ð1ô1ø1ü1 22222222 2è2ì2ð2ø2ü2 33333333(3,3034383<3@3D3H3L3P3T3Ô5Ü5ä5ì5ô5ü56666$6,646<6D6L6T6\6d6l6t6|6„6Œ6”6œ6¤6¬6´6¼6Ä6Ì6Ô6Ü6ä6ì6ô6ü67777$7,747<7D7L7T7\7d7l7t7|7„7Œ7”7œ7¤7¬7´7¼7Ä7Ì7Ô7Ü7ä7ì7ô7ü78888$8,848<8 0 T  h2l2p2t2ˆ22˜2 2¨2°2¸2À2È2Ð2Ø2à2è2ð2ø2 3333 3(30383@3H3P3X3`3h3p3x3€3ˆ33˜3 3¨3°3¸3À3È3Ð3Ø3à3è3ð3ø3 4444 4(40484@4H4P4X4`4h4p4x4€4ˆ44˜4 4¨4°4¸4À4È4Ð4Ø4à4è4ð4ø4 5555 5(50585@5H5P5X5`5h5p5x5€5ˆ55˜5 5¨5°5¸5À5È5Ð5Ø5à5è5ð5ø5 6(<,<0<À=È=Ð=Ô=Ø=Ü=à=ä=è=ì=ô=ø=ü= >>>>>>$>,>0>4>8><>¨?¬?°?´?¸?¼?À?Ä?È?Ì?Ð?Ô?Ø?Ü?à?ä?è?ì?ð?ô?ø?ü? @ Ì    00000000 0$0(0,0004080<0@0D0H0L0P0\0`0d0h0l0p0t0x0|0€0„0ˆ0Œ00”0˜0œ0 0¤0¨0¬0°0´0¸0¼0À0Ä0È0Ì0Ð0Ô0Ø0Ü0à0ä0è0ì0ð0ô0ø0ü0 111h4l4p4t4¨4¬4°4´4¸4¼4À4Ä4È4Ì4Ð4Ô4Ø4Ü4à4ä4è4ì4ð4ô4¼?Ä?Ì?Ô?Ü?ä?ì?ô?ü? P À  0000$0,040<0D0L0T0\0d0l0t0|0„0Œ0”0œ0¤0¬0´0¼0Ä0Ì0Ô0Ü0ä0ì0ô0ü01111$1,141<1D1L1T1\1d1l1t1|1„1Œ1”1œ1¤1¬1´1¼1Ä1Ì1Ô1Ü1ä1ì1ô1ü12222$2,242<2D2L2T2\2d2l2t2|2„2Œ2”2œ2¤2¬2´2¼2Ä2Ì2Ô2Ü2ä2ì2ô2ü23333$3,343<3D3L3T3\3d3l3t3|3„3Œ3”3œ3¤3¬3´3¼3Ä3Ì3Ô3Ü3ä3ì3ô3ü34444$4,444<4D4L4T4\4d4l4t4|4„4Œ4”4œ4¤4¬4´4¼4Ä4Ì4Ô4Ü4ä4ì4ô4ü45555$5,545<5D5L5T5\5d5l5t5|5„5Œ5”5œ5¤5¬5´5¼5Ä5Ì5Ô5Ü5ä5ì5ô5ü56666$6,646<6D6L6T6\6d6l6t6|6„6Œ6”6œ6¤6¬6´6¼6Ä6Ì6Ô6   ` Ð  Ø0à0è0ð0ø0 1111 1(10181@1H1P1X1`1h1p1x1€1ˆ11˜1 1¨1°1¸1À1È1Ð1Ø1à1è1ð1ø1 2222 2(20282@2H2P2X2`2h2p2x2€2ˆ22˜2 2¨2°2¸2À2È2Ð2Ø2à2è2ð2ø2 3333 3(30383@3H3P3X3`3h3p3x3€3ˆ33˜3 3¨3°3¸3À3È3Ð3Ø3à3è3ð3ø3 4444 4(40484@4H4P4X4`4h4p4x4€4ˆ44˜4 4¨4°4¸4À4È4Ð4Ø4à4è4ð4ø4 5555 5(50585@5H5P5X5`5h5p5x5€5ˆ55˜5 5¨5°5¸5À5È5Ð5Ø5à5è5ð5ø5 6666 6(60686@6H6P6X6`6h6p6x6€6ˆ66˜6 6¨6°6¸6À6È6Ð6Ø6à6è6ð6ø6 7777 7(70787@7H7P7X7`7h7p7x7€7ˆ77˜7 7¨7°7¸7À7È7Ð7Ø7à7è7ð7 p X   ê1î1ò1ö1ü:;;;;$;,;4;<;D;L;T;\;d;l;t;|;„;Œ;”;œ;¤;¬;´;¼;Ä;Ì;Ô;Ü;===p=ˆ=˜=   € Ì  1 1$1(1,1014181<1@1D1H1L1P1T1X1\1`1d1h1l1p1t1x1|1€1„1ˆ1Œ11”1˜1œ1 1¤1¨1L2P2`2d2l2„2”2˜2¨2¬2´2Ì2Ü2à2ð2ô2ø2 33(3,3<3@3D3H3P3h3x3|3Œ33”3œ3´3Ä3È3Ø3Ü3à3ä3ì3444(4,40484P4`4d4l4„4”4˜4¨4¬4°4´4¼4Ô4ä4è4ø4ü4 5555(585<5L5P5T5\5t5„5ˆ55¨5¸5¼5Ì5Ð5Ô5Ü5ô56666 6(6@6P6T6d6h6l6t6Œ6 ; ;,;L;X;`;€;œ;¬;¸;Ø;ä;<<<<$<0<8<l<t<|<Œ<˜< <¸<À<È<Ð<à<ü<===8=@=H=P=X=h=Œ=”=œ=¤=¬=´=¼=Ä=Ì=Ô=Ü=ä=ð=>>$>,>4><>D>L>T>`>€>ˆ>>˜> >¨>°>¼>Ä>ø> ???4?@?`?l?t?”?°?¸?À?Ü?à?    ð    0 0,0D0H0P0X0`0d0l0€0ˆ00˜0œ0 0¨0¼0Ä0Ð0ð0ø01$101P1X1`1d1h1l1t1ˆ11¤1¼1À1à1è1ì1222$2H2T2\2„2ˆ2¤2¨2°2¸2À2Ä2Ì2à2 33 3@3`3€3œ3 3À3à3 4 4@4`4€4 4À4à4 5 5@5`5€5 5À5à5 66 6(60686<6@6H6\6d6x6€6”6œ6 6¤6¨6°6Ä6Ì6Ð6Ø6à6è6ü677 7(707D7   ° ¼   0 101@1P1`1p1ˆ1”1˜1œ1¸1¼1ð6ô6ø6ü6 777777 7$7(7,7074787<7x8|8€8˜8¸8Ø8ø8989X9t9˜9Ð9:8:p:¨:Ä:à:;@;X;|;¨;ì;,<h<l<p<t<x<|<€<„<ˆ<Œ<<”<˜<œ< <¤<¨<¬<°<´<¸<¼<À<Ä<È<Ì<Ð<Ô<Ø<Ü<à<ä<è<                                                                                                                                                                                                                                                                                                                                                MZ       ÿÿ  ¸       @                                      º ´	Í!¸LÍ!This program cannot be run in DOS mode.
$       bÓ‡&²vÔ&²vÔ&²vÔmÊuÕ#²vÔmÊsÕ¯²vÔmÊrÕ,²vÔ™ÎrÕ(²vÔ™ÎuÕ/²vÔ™ÎsÕ	²vÔmÊwÕ#²vÔ&²wÔ„²vÔÿÏÕ$²vÔÿÏvÕ'²vÔÿÏ‰Ô'²vÔÿÏtÕ'²vÔRich&²vÔ        PE  d† Kú~d        ð " # Z       ØU        €                        À         `                                   Ð0 X   (1 <      à   p            °     p                           ðú @           p °  Œ+ @                   .text   îY     Z                   `.rdata  ZÊ   p  Ì   ^             @  @.data   ¤!   @     *             @  À.pdata     p     :             @  @_RDATA  \        T             @  @.rsrc   à         V             @  @.reloc     °  
   X             @  B                                                                                                                                                                                                                                H™Y é`B  ÌÌÌÌHƒì(H‹Âƒùu!H‹HH	ì è€°  …Àu3ÉHƒÄ(Hÿ%Ã_ 3ÀHƒÄ(ÃÌÌÌÌÌÌÌÌÌÌÌÌ@SHƒì H‹ÙH‹ÂH]c WÀHSH‰HHèóg  H‹ÃHƒÄ [ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌH‹QH­ë H…ÒHEÂÃÌÌÌÌÌÌÌÌÌÌÌÌÌH‰\$WHƒì Hÿb H‹ùH‰‹ÚHƒÁè*h  öÃtº   H‹ÏèÜ=  H‹\$0H‹ÇHƒÄ _ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌH¹b H‰HƒÁéég  ÌÌÌÌÌÌÌÌÌÌÌÌÌH9ë HÇA    H‰AHÆb H‰H‹ÁÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌHƒìHHL$ èÂÿÿÿH HL$ èek  Ì@SHƒì H‹ÙH‹ÂH=b WÀHSH‰HHèÓf  H`b H‰H‹ÃHƒÄ [ÃÌÌÌÌ@SHƒì H‹ÙH‹ÂHýa WÀHSH‰HHè“f  Høa H‰H‹ÃHƒÄ [ÃÌÌÌÌ3ÀÃÌÌÌÌÌÌÌÌÌÌÌÌÌHƒì(Hmê è@L  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ@SHƒì0HƒzH‹ÂH‹ÙrH‹Hƒa H‰D$ H‰HSWÀÆD$(HL$ èf  Hãa H‰H‹ÃHƒÄ0[ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ@SHƒì0H‹ÙÆD$(H‹ÂH(a HSH‰D$ WÀH‰HL$ è¸e  Ha H‰H‹ÃHƒÄ0[ÃÌÌÌÌÌÌÌÌÌ@SHƒì H‹ÙH‹ÂHÝ` WÀHSH‰HHèse  HHa H‰H‹ÃHƒÄ [ÃÌÌÌÌé+V  ÌÌÌÌÌÌÌÌÌÌÌH‹ÃÌÌÌÌÌÌÌÌÌÌÌÌ@SHƒì H‹QHH‹ÙHƒúr-H‹I0HÿÂHú   rL‹AøHƒÂ'I+ÈHAøHƒøwVI‹ÈèP;  HI` HÇC@    HÇCH   HKÆC0 H‰èee  H‹S H…Òt€{( u
H‹Kÿ ; HÇC     HƒÄ [ÃèÅ±  ÌÌÌÌÌÌÌÌÌÌÌÌÌH‹H‰H‹ÂÃÌÌÌÌÌÌ@SHì   H‹ , H3ÄH‰„$€   H‹QH‹ÙH…Òu3ÀëH‹	LD$ ÿ; …Àu‹D$ H‹Œ$€   H3Ìèo:  HÄ   [ÃH‹HL$0è¹  H: HL$0è|h  ÌÌÌÌÌÌÌÌH‰\$H‰l$ VWAVHì°   H‹”+ H3ÄH‰„$    H‹úL‹ñH‰T$@3í‰l$0HD$8H‰D$ E3ÉE3ÀH‹QH‹	ÿ: …À…  WÀH‰oHÇG   @ˆ/ÇD$0   H‹L$8HQHƒúvH‹Ïèï&  H‰oH‹L$8H‹WH;ÊwH‹ÇHƒrH‹H‰OÆ ëJH‹ñH+òL‹GI‹ÀH+ÂH;ðw'H‰OH‹ÇIƒørH‹HL‹Æ3ÒH‹Ëè`h  Æ3 ëL‹ÎH‹ÖH‹ÏèL(  L‹OL‹ÇIƒùrL‹H‰l$ I‹VI‹ÿB9 …Àu+H‹ÇH‹Œ$    H3Ìè9  Lœ$°   I‹[0I‹k8I‹ãA^_^ÃI‹HL$Pè>   H¿ HL$Pèg  ÌI‹HL$Pè   H  HL$Pèâf  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌH‰\$WHƒì0H‹úHÇD$X    H‹ÙHT$ H‹Ïÿi8 …À…T  HT$PH‹Ïÿƒ8 …À…R  8D$PtHT$XH‹Ïÿ×8 …À…  é   H‹D$ H–æ IÇÀÿÿÿÿH‹H…ÉHEÑIÿÀB€< uöLL$(H‹ÏÿU8 …À…  H‹L$ ‹Qƒêt&ƒêt!ƒêtƒútL‹D$(LL$X3ÒH‹ÏÿÄ7 ëL‹D$(LL$X3ÒH‹Ïÿý7 …À…Ì   H‹T$XH1é H‰{WÀHÇC     ÆC( CH‰C0HÇC@    HÇCH   ÆC0 H…ÒtLK A¸   H‹Ïÿ8 …ÀuH‹ÃH‹\$@HƒÄ0_ÃHöå Hæ èÂ  ÌHjå H3å è®  ÌHå Hå èš  ÌH"å Hå è†  ÌHvå H÷ä èr  ÌHzå Hãä è^  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌH‰\$ WHìð   H‹( H3ÄH‰„$à   I‹ÀH‰L$ IÇÀÿÿÿÿH‹úH‹ÙIÿÀB€<  uöLL$8H‹ÐH‹ÏÿÁ6 …À…®   L‹D$8LL$ 3ÒH‹ÏÿL6 …À…°   H‹T$ WÀˆC(HÊç H‰{HÇC     CH‰C0HÇC@    HÇCH   ÆC0 H…ÒtLK A¸   H‹Ïÿ·6 …Àu$H‹ÃH‹Œ$à   H3Ìèà5  H‹œ$  HÄð   _ÃH€ä H‘ä èL   ÌH‹×HL$@èýÿÿH HL$@èÑc  ÌH‹×HŒ$   èìüÿÿHm HŒ$   è¬c  ÌÌÌÌÌÌÌÌHƒì(IÇÁÿÿÿÿL‹ÂI‹Ñÿq5 ÌÌÌÌÌÌÌÌÌH‰\$WHƒì ‹úH‹ÙH‹QHHƒúr-H‹I0HÿÂHú   rL‹AøHƒÂ'I+ÈHAøHƒøwqI‹Èè*5  H#Z HÇC@    HÇCH   HKÆC0 H‰è?_  H‹S H…Òt€{( u
H‹KÿÚ4 HÇC     @öÇtºP   H‹ËèÏ4  H‹ÃH‹\$0HƒÄ _Ãè„«  ÌÌÌÌÌÌÌÌÌÌÌÌH‰\$H‰t$ WHìð   H‹ç% H3ÄH‰„$à   H‹úH‹ÙH‰L$ H‹JH‰KHÇC     ÆC( H‰L$(HT$0ÿ%4 …À…¿   H‹W H…ÒtLD$ H‹Oÿí4 …À…À   H‹T$ H…ÒtLK A¸   H‹Kÿ·4 …À…À   H‹T$0H‹L$(ÿ§4 …ÀuQWÀCH]å H‰C0HÇC@    HÇCH   ÆC0 H‹ÃH‹Œ$à   H3ÌèŸ3  Lœ$ð   I‹[ I‹s(I‹ã_ÃHkâ H|â èþÿÿÌH‹T$(HL$@èÇúÿÿHH HL$@èŠa  H‹WHŒ$   è¤úÿÿH% HŒ$   èda  ÌHàá H)ä è¬ýÿÿÌÌÌÌÌÌÌÌÌÌÌÌH‰\$WHìÀ  H‹l$ H3ÄH‰„$°  H‹ÙH‰L$@Hƒy@ …Š  H‹IH…É„}  H‰L$ HT$(ÿy3 …À…Š  H‹S H‹{H…ÒtLD$0H‹Ïÿn3 H‹{…À…„  H‹T$0LL$0Laá H‹Ïÿà2 …À…†  LL$8L‹D$0H‹T$(H‹L$ ÿŽ2 …À…ˆ  H‹|$ H‹T$(H‹Ïÿk2 …À…”  H‰|$ H‹D$8H‰D$(HT$HHL$ èÕ÷ÿÿH{0HD$HH;øtnH‹WHƒúr0H‹HÿÂHú   rHƒÂ'L‹AøI+ÈHAøHƒø‡J  I‹Èèí1  HÇG    HÇG   D$HL$XOfoôã óD$XÆD$H H‹T$`Hƒúr3HÿÂH‹L$HH‹ÁHú   rHƒÂ'H‹IøH+ÁHƒÀøHƒø‡Ö   è|1  ëH‹\$@HC0H‹Œ$°  H3Ìè@1  H‹œ$Ø  HÄÀ  _ÃH‹T$ HL$pè€øÿÿH HL$pèC_  H‹×HŒ$À   è^øÿÿHß HŒ$À   è_  H‹×HŒ$  è:øÿÿH» HŒ$  èú^  H‹T$ HŒ$`  èøÿÿH• HŒ$`  èÔ^  H¸ß HÙß èûÿÿÌèn§  ÌÌÌÌÌÌ@SHìð   H‹à! H3ÄH‰„$à   H‹ÙH‹IH‰L$ HT$(ÿ60 …Àu{Hƒ{  t3H‹S H‹KH…ÒtLD$0ÿû0 H‹K…Àu{H‹T$0ÿ 0 …À…‡   H‹T$(H‹L$ ÿÈ0 …ÀuH‹Œ$à   H3Ìèì/  HÄð   [ÃHÄÞ HÕÞ è`úÿÿÌH‹T$ HŒ$   è÷ÿÿHž HŒ$   èÝ]  H‹ÑHL$@èûöÿÿH| HL$@è¾]  ÌH‹SHL$@èÛöÿÿH\ HL$@èž]  ÌÌÌÌÌÌÌÌÌÌHƒì(èGüÿÿHƒxrH‹ HƒÄ(ÃÌÌÌÌÌÌÌÌ@SHƒì H‹QH‹ÙH…Òt€y u	H‹	ÿ// HÇC    HƒÄ [ÃÌH‰\$VWAVHìð   H‹i  H3ÄH‰„$à   H‹òH‹ùH‰L$ H‹
H‰3ÛH‰_ˆ_H‰L$(HT$0ÿ¬. …À…–   H‹VH…ÒtLD$ H‹ÿu/ …À…˜   H‹\$ H…ÛtLOA¸   H‹ÓH‹ÿ=/ …À…•   H‹T$0H‹L$(ÿ-/ …Àu'H‹ÇH‹Œ$à   H3ÌèN.  H‹œ$   HÄð   A^_^ÃHÝ H,Ý è·øÿÿÌH‹T$(HL$@èwõÿÿHø	 HL$@è:\  H‹HŒ$   èUõÿÿHÖ	 HŒ$   è\  ÌH‘Ü HÚÞ è]øÿÿÌÌÌÌÌÌÌÌÌÌÌÌÌ@USVWAVAWHl$ØHì(  H‹ H3ÄH‰EM‹ñM‹øH‹òH‹ÙH‹	H‰L$PHT$Xÿ6. …À…m  H‹SH‹;H…ÒuE3ÉëLD$HH‹Ïÿ'. H‹;…À…b  L‹L$HI‹I‹NH+ÈHÁùHT$HH‰T$0H‰D$(H‰L$ M‹Ç3ÒH‹Ïÿ‡- …À…D  HT$@H‹L$Pÿ- …Àu}8D$@twH‹SH‹H…ÒuH‰T$hë LD$Hÿ§- H‹…À…   H‹D$HH‰D$hH‰L$`D$`H‹T$XH‹L$PÿÕ, …À…€   H‹ÆH‹MH3ÌèŽ,  HÄ(  A_A^_^[]ÃLL$`L‹D$HH‹T$XH‹L$Pÿœ, …Àu"H‹L$PH‰H‹D$`H‰FH‹T$Xÿt, …Àu#ë¡H‹T$PHL$pèóÿÿH HL$pèRZ  H6Û HWÛ èšöÿÿÌH‹T$PHMÀè[óÿÿHÜ HMÀèZ  H‹×HL$pè=óÿÿH¾ HL$pè Z  ÌH‹×HL$pèóÿÿHŸ HL$pèáY  ÌH‹ÑHL$pèÿòÿÿH€ HL$pèÂY  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌH‹I`H…É…“+  ÃÌÌHƒì(H‹QH‹	ÿ', …ÀuHƒÄ(ÃH7Ú HHÚ èÓõÿÿÌÌÌHƒì(H‹QH‹	ÿ_+ …ÀuHƒÄ(ÃH?Ú H`Ú è£õÿÿÌÌÌH‰\$ UVWHì   H‹j H3ÄH‰„$ð   H‹ùH‰L$@3íH‹H‰H‹BH‰A¶BˆAH‰*H‰j@ˆjI‹ H‰AI‹@H‰A A¶@ˆA(I‰(I‰hAˆhHÁ  UèHE  H‰¯`  H‰¯h  H‰¯p  @ˆ¯x  H9o…‚   H‹_HT$ H‹Ëÿó* …À…Ñ   H‹T$ H…Òu	H‰l$0‹õë&LL$ A¸   H‹Ëÿì* …À…Á   H‹t$ H‰t$0ÆD$8 H‰\$(H‹WH…ÒtH‹ÿ* …ÀuSH‰oH‰H‰wÆG ÿÅ) H‹ÈLK  HW0ÿI* H‰0H‹ÇH‹Œ$ð   H3Ìèº)  H‹œ$8  HÄ   _^]ÃH‹HŒ$    è÷ðÿÿHx HŒ$    è·W  H‹ÓHL$PèÕðÿÿHV HL$Pè˜W  ÌH‹ÓHL$Pè¶ðÿÿH7 HL$PèyW  ÌÌÌÌÌH‰\$ UVWAVAWHìÐ   H‹– H3ÄH‰„$À   I‹ðH‹êH‹ùH‰T$(L‰D$0H™  H‰\$8H‹ËèäC  …À…M  HD$@H‰D$ E3ÿL‰|$xH‹M8H…ÉtH‹HT$@ÿH‰D$xH„$€   H‰D$ L‰¼$¸   H‹N8H…ÉtH‹H”$€   ÿH‰„$¸   H‹‡h  H;‡p  tHT$@H‹Èè¢%  Hƒ¯h  €ëLD$@H‹ÐH`  èä  H‹Œ$¸   H…ÉtH‹H”$€   H;Ê•ÂÿP L‰¼$¸   H‹L$xH…ÉtH‹HT$@H;Ê•ÂÿP HO0ÿ]( H‹ËèôB  H‹M8H…ÉtH‹H;Í”Â€òÿP L‰}8H‹N8H…ÉtH‹H;Î•ÂÿP L‰~8H‹Œ$À   H3Ìè¶'  H‹œ$  HÄÐ   A_A^_^]Ã‹Èè˜>  ÌÌÌÌÌÌÌÌHƒì8H‹	è   HƒÄ8ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌH‰\$H‰t$WATAUAVAWHì@  H‹¿ H3ÄH‰„$0  L‹ùH‰Œ$˜   HAH‰„$ˆ   H‹8H‰¼$   3öWÀóD$0H‰t$@I  èöA  …À…›  I`  L‹!L;auUI  èÚA  A€¿x   tIO0H  ÿÆ& H‹Œ$0  H3Ìè¶&  Lœ$@  I‹[8I‹s@I‹ãA_A^A]A\_ÃL‹öL‹îHD$0H;Át'L‰d$0H‰1L‹iL‰l$8H‰qH‹AH‰D$@H‰qM‹ôëL‹d$0I  èIA  L‰¬$    HbK L‰t$HM;õ„|  H‰|$hHT$pH‹Ïÿ	& …À…¾  WÀóD$PH‰t$`I‹N8H…ÉtH‰|$xH‹LD$PHT$xÿPH‰¼$¨   H‰´$°   H‰¼$  H‰´$  Æ„$   WÀ„$ø   HC× H‰„$ð   WÉŒ$   H‰´$0  HÇ„$8     Æ„$    I‹WH…ÒuL‹Æë!L„$€   I‹ÿ5& …À…)  L‹„$€   LL$PH”$Ø   H‹Œ$ˆ   è{÷ÿÿ „$¨   ë+3öHEJ H‹¼$   L‹d$0L‹t$HL‹¼$˜   L‹¬$    I‹NxH…ÉtWH‹L„$ð   H”$¨   ÿPH‹”$8  HƒúrHHÿÂH‹Œ$   H‹ÁHú   r,HƒÂ'H‹IøH+ÁHƒÀøHƒø‡–  ëHƒ¼$   …‹  ë¯è­$  H‰´$0  HÇ„$8     Æ„$    H‰œ$ð   HŒ$ø   è¸N  H‹”$  H…Òt €¼$   uH‹Œ$  ÿG$ H‰´$  H‹L$PH…ÉtLH‹D$`H+ÁHÁøHÅ    H‹ÁHú   rHƒÂ'H‹IøH+ÁHƒÀøHƒø‡  è$  WÀóD$PH‰t$`H‹T$pH‹L$hÿ‘$ …À…ð   Iƒî€évýÿÿM…ä„üÿÿH‹T$8I‹Ìè2  H‹T$@I+ÔHƒâ€I‹ÄHú   rHƒÂ'M‹d$øI+ÄHƒÀøHƒø‡³   I‹Ìèˆ#  éCüÿÿ‹Èè\:  ÌH‹T$hHŒ$@  è©êÿÿH*ÿ HŒ$@  èiQ  I‹HŒ$  è„êÿÿHÿ HŒ$  èDQ  èò™  HŒ$ð   èìïÿÿH‹ÐHŒ$À   èlæÿÿHMþ HŒ$À   èQ  èº™  H²Ñ HÃÑ èNíÿÿè ™  ÌÌÌÌÌÌÌÌ@SHƒì H‹H…Û„Æ   H‹‹`  H‰|$03ÿH…Ét\H‹“h  è  H‹‹`  H‹“p  H+ÑHƒâ€Hú   rL‹AøHƒÂ'I+ÈHAøHƒøwzI‹Èèd"  H‰»`  H‰»h  H‰»p  H‹  èÃ<  H‹S H…Òt@8{(u
H‹Kÿ" H‰{ H‹SH…Òt@8{u	H‹ÿþ! H‰{º€  H‹Ëèý!  H‹|$0HƒÄ [Ãèµ˜  ÌÌÌÌÌÌÌÌÌÌÌÌÌ@SHƒì H‹ÙH‹I8H…ÉtH‹H;Ë•ÂÿP HÇC8    HƒÄ [ÃÌÌÌÌH‰\$WHƒì Hy@H‹ÙH‹O8H…ÉtH‹H;Ï•ÂÿP HÇG8    H‹K8H…ÉtH‹H;Ë•ÂÿP HÇC8    H‹\$0HƒÄ _ÃÌÌÌÌÌÌÌÌÌÌH‰\$ UVWAVAWHl$àHì   H‹ H3ÄH‰EI‹øH‹ÚH‹ñÇD$     HÇ    Hƒz t+H‹Êè#æÿÿƒøtH‹ËèæÿÿƒøtH‹Ëè	æÿÿƒø…H  H‹Ïèøåÿÿƒø…r  ¹€  èÍ   L‹øH‰D$hL‹7H‹WH…Òu3Éë!LL$`A¸   I‹Îÿ9! …À…o  H‹L$`L‰t$HH‰L$PÆD$X ÇD$    H‹;H‹SH…ÒuH‰T$8ë&LL$(A¸   H‹Ïÿî  …À…‘   H‹D$(H‰D$8ÆD$@ H‰|$0ÇD$ ?   LD$HHT$0I‹ÏèèôÿÿH‰H‹T$8H…Òt€|$@ uH‹L$0ÿè H‹T$PH…Òt€|$X uH‹L$HÿË H‹ÆH‹MH3Ìè¬  H‹œ$h  HÄ   A_A^_^]ÃH‹×HMÀèéæÿÿHjû HMÀè­M  HT$(H‹Ïè›äÿÿH‹ÈèããÿÿH‹ÐLÏ HL$pèèÿÿH0û HL$pèrM  ÌHT$(H‹Ïè`äÿÿH‹Èè¨ãÿÿH‹ÐLöÎ HL$pèTèÿÿHõú HL$pè7M  I‹ÖHL$pèUæÿÿHÖú HL$pèM  ÌÌÌÌH‰T$USVWHl$¸HìH  H‹ÚH‹ùHD$hH‰Ep3öD‹ÆH‰u HD$hH‰…€   HD$ H‰…ˆ   ‹ÎH‰L$XL‹J8M…ÉtI‹HT$ I‹ÉÿH‹ÈH‰D$XL‹E HD$ H‰EpH‹?H…ÿ„¹   HEÀH‰…ˆ   H‰uøM…ÀtI‹ HUÀI‹ÈÿH‰EøH‹L$XHE H‰D$`H‰u8H…ÉtH‹HU ÿH‰E8LEÀHU H‹ÏèÅôÿÿH‹L$XH…ÉtH‹HT$ H;Ê•ÂÿP H‰t$XH‹M H…ÉtH‹HT$hH;Ê•ÂÿP H‹K8H…ÉtH‹H;Ë•ÂÿP H‰s8HÄH  _^[]ÃH•Í HM¨ètáÿÿHõø HM¨è¸K  ÌÌÌÌHƒìhH…ÉtPƒ9uK‹Aƒøtƒø
tƒøu9H¹Î ëHðÎ ëHgÏ H‹(0 HT$ H‰D$ HD$ H‰D$XèGþÿÿHƒÄhÃÌÌH‰\$H‰t$H‰|$UHl$ðHì  H‹m H3ÄH‰E 3öHƒy vH‹A(H‹PH‹AH‰D$XH‰T$`HD$Xë3H‹YH‰\$hHT$XH‹ËÿY …À…Q  H‰\$pH‹D$XH‰D$xHD$p )E fE€¹   è¯  H‹øH‰D$PWÀ Ç@   Ç@   H4Î H‰H_óELE€HUH‹ËèûÿÿH‰(/ H‹)/ H‰="/ H…Ût,¿ÿÿÿÿ‹ÇðÁCƒøuH‹H‹ËÿðÁ{ƒÿu	H‹H‹ËÿPH‰t$H‰t$@LL$HLD$@3ÒJÿÛ? …Àt	HÈÍ ë5H‰t$0H‰t$(H‰t$ L@þÿÿº   DBùH‹L$Hÿ¬? …Àt#HÑÌ H‰E°HE°H‰EèHU°H‹r. è¥üÿÿH‹M H3Ìèy  Lœ$  I‹[I‹sI‹{ I‹ã]ÃHL$hèÖßÿÿH‹ÐHM°èªâÿÿH+÷ HM°ènI  ÌÌÌÌÌÌÌÌÌÌH‰\$UVWHì°   H‹Š H3ÄH‰„$    H‹éI‹ø¹   H‹Úè$  H‹ðHÇD$@    HÉýÿÿ3ÒH‰D$8Lk  D$8HD$0H‹ËH‰D$(LBÿH‰t$ ÿ …À…½   H‹T$0Lƒ  HÇD$(    L‹ÆH‹ËHÇD$     ÿÅ …À…‹   LL$8H‹ËD@HZË ÿ´ …À…–   H‹L‹L$0H‹ËL‹D$8H‹Wÿê …Àu-H‹ÅE H‹Œ$    H3Ìè$  H‹œ$Ø   HÄ°   _^]ÃH‹ÓHL$PèdáÿÿHåõ HL$Pè'H  Ìº   H‹Îè  H‹ÓHL$Pè8áÿÿH¹õ HL$PèûG  ÌH‹ÓHL$PèáÿÿHšõ HL$PèÜG  ÌÌÌÌÌÌÌÌL‹ÜHƒìHHbþÿÿI‰KI‰CIKØICI‰SI‰CØICI‰CàICI‰Cèè…  HƒÄHÃ@SHƒì H‹ÙH‹	H…ÉtJH‹SèÖ  H‹H‹SH+ÑHƒâ€Hú   rL‹AøHƒÂ'I+ÈHAøHƒøwI‹Èè2  3ÀH‰H‰CH‰CHƒÄ [Ãèâ  ÌÌÌÌÌÌÌÌÌÌ@SHƒì H‹ÙH‹	H…Ét>H‹SH+ÑHƒâøHú   rL‹AøHƒÂ'I+ÈHAøHƒøwI‹ÈèÎ  3ÀH‰H‰CH‰CHƒÄ [Ãè~  ÌÌÌÌÌÌH‹	é€3  ÌÌÌÌÌÌÌÌ@SHƒì H‹QH‹ÙHƒúr,H‹	HÿÂHú   rL‹AøHƒÂ'I+ÈHAøHƒøw!I‹Èèa  HÇC    HÇC   Æ HƒÄ [Ãè  ÌÌÌH‰\$VWAVHìð   H‹y	 H3ÄH‰„$à   H‹òH‹ùH‹
H‰3ÛH‰_ˆ_H‰L$ HT$(ÿÁ …À…–   H‹VH…ÒtLD$0H‹ÿŠ …À…˜   H‹\$0H…ÛtLOA¸   H‹ÓH‹ÿR …À…•   H‹T$(H‹L$ ÿB …Àu'H‹ÇH‹Œ$à   H3Ìèc  H‹œ$   HÄð   A^_^ÃH0Æ HAÆ èÌáÿÿÌH‹T$ HL$@èŒÞÿÿHó HL$@èOE  H‹HŒ$   èjÞÿÿHëò HŒ$   è*E  ÌH¦Å HïÇ èráÿÿÌÌHƒìXH‹L‹H‹AL‹ H‹QH‹H‰T$0L‰D$8LD$0HL$@AÿÑH‹@ë3ÀHƒÄXÃÌÌÌÌH‰\$WHì   H‹ü H3ÄH‰„$€   H‹9LL$ H‹ÙHƒÆ H‹ÏA¸   ÿ° …Àu@L‹L$ LlÆ H‹SH‹ÿ£ …ÀuB°H‹Œ$€   H3Ìè-  H‹œ$¨   HÄ   _ÃH‹×HL$0èoÝÿÿHðñ HL$0è2D  ÌH‹HL$0èPÝÿÿHÑñ HL$0èD  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌH‰\$WHì°   H‹, H3ÄH‰„$    H‹ÙH‹9HT$(I‹Èè^ÛÿÿHT$(Hƒ|$@HCT$(LL$ L‹D$8H‹ÏÿÉ …À…¶   H‹|$ H‹T$@Hƒúr2HÿÂH‹L$(H‹ÁHú   rHƒÂ'H‹IøH+ÁHƒÀøHƒø‡˜   èO  HÇD$8    HÇD$@   ÆD$( L‹ÏLîÃ H‹SH‹ÿa …Àu#°H‹Œ$    H3Ìèë  H‹œ$È   HÄ°   _ÃH‹HL$Pè-ÜÿÿH®ð HL$PèðB  H‹×HL$PèÜÿÿHð HL$PèÑB  è‹  ÌÌÌÌÌÌÌH‰\$H‰l$H‰t$H‰|$ ATAVAWHƒì H‹)L‹ñH‹IM‹øH+ÍL‹âHÁùL;Á†ù   H¾ÿÿÿÿÿÿÿL;Æ‡j  H‹ÑH‹ÆHÑêH+ÂH;ÈvH‹ÞëH
I;ßIBß3ÿH…ít@HÍ    Hú   rH‹MøHƒÂ'H+éHEøHƒø‡  H‹éH‹Íè  I‰>I‰~I‰~H;Þ‡ó   HÝ    Hû   r)HK'H;Ë†Õ   èÓ  H…À„Ó   Hx'HƒçàH‰GøëH…ÛtH‹Ëè¯  H‹øH;I‰>I‰~Jý    L‹ÃI‰FI‹ÔH‹ÏèF  H;ë[I‹vH‹ÍH+õHÁþL;þv4Hõ    L‹ÃèVF  I‹~J#L+þH‹ÏJý    L‹Ãè8F  H;ëJÅ    L‹Ãè"F  H+H‹\$@H‹l$HH‹t$PH‹|$XI‰FHƒÄ A_A^A\Ãè†ÕÿÿÌè@  Ìè²‰  ÌÌÌÌÌÌÌÌÌÌ@SVAVHƒì L‹qH»ÿÿÿÿÿÿÿH‹ÃH‹ñI+ÆH;Â‚  H‰l$@H‹iH‰|$HL‰|$PM<I‹×HƒÊH;Ów:H‹ÍH‹ÃHÑéH+ÁH;èw)H)H‹ÚH;ÐHBØHCH=   r9HH'H;È†»   ëH¹       €HƒÁ'èO  H…À„—   Hx'HƒçàH‰GøëH…ÀtH‹Èè+  H‹øë3ÿL‰~MFH‰^H‹ÏHƒýr:H‹H‹ÓèüD  HUHú   rH‹KøHƒÂ'H+ÙHCøHƒøw3H‹ÙH‹ËèÏ  ëH‹ÖèÅD  H‰>H‹ÆH‹|$HH‹l$@L‹|$PHƒÄ A^^[Ãèjˆ  Ìè,ÔÿÿÌèÖÔÿÿÌÌÌÌÌÌH;ÊtqWHƒì H‰\$0H‹úH‰t$8HYx3ö H‹H…ÉtL‹HCÈH;È•ÂAÿP H‰3H‹KÀH…ÉtL‹HCˆH;È•ÂAÿP H‰sÀHƒë€HCˆH;Çu¹H‹t$8H‹\$0HƒÄ _ÃÌÌÌÌÌÌÌÌÌH‰\$ VATAVHƒì L‹qH»ÿÿÿÿÿÿÿH‹ÃM‹áI+ÆH‹ñH;Â‚I  H‰l$@H‹iH‰|$HL‰|$PM<I‹×HƒÊH;Ów:H‹ÍH‹ÃHÑéH+ÁH;èw)H)H‹ÚH;ÐHBØHCH=   r9HH'H;È†è   ëH¹       €HƒÁ'èw  H…À„Ä   Hx'HƒçàH‰GøëH…ÀtH‹ÈèS  H‹øë3ÿL‰~N<7H‰^M‹ÆH‹ÏHƒýrLH‹H‹Óè!C  M‹Ä3ÒI‹Ïè?  HUCÆ' Hú   rH‹KøHƒÂ'H+ÙHCøHƒøwKH‹ÙH‹Ëèâ  ëH‹ÖèØB  M‹Ä3ÒI‹Ïè»>  CÆ' H‰>H‹ÆH‹|$HH‹l$@L‹|$PH‹\$XHƒÄ A^A\^Ãèe†  Ìè'ÒÿÿÌèÑÒÿÿÌL‹ÜI‰SI‰KHƒì8ICI‰CèIKèICI‰Cðè(  HƒÄ8ÃÌÌÌH…ÉtH‹º   Hÿ`ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌH‰\$WHƒì H‹yH…ÿt.H  èñ)  …Àu)Æ‡x  HO0ÿD H  èØ)  H‹\$0HƒÄ _Ã‹ÈèÍ%  ÌÌÌÌÌÌÌÌÌÌÌÌÌ@SHƒì HƒÀ H‹ÙH‰öÂt
º   è¾  H‹ÃHƒÄ [ÃÌÌÌÌÌHƒì(H¥¿ è0  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ@SVWAVHƒì(H‹AH‹úH‹H‹ßH+ÂI‹ðHÁøH+ÚI¸ÿÿÿÿÿÿÿL‹ñI;À„  H‹IH+ÊH‰l$PL‰d$XL`HÁùI‹ÀH‹ÑL‰l$`HÑêH+ÂL‰|$ H;ÈvIÇÇ€ÿÿÿIO'ë1H
M‹üI;ÄLCøM;ø‡©  IÁçIÿ   r)IO'I;Ï†  èç  H…À„{  Hh'HƒåàH‰EøëM…ÿtI‹ÏèÃ  H‹èë3íHƒã€H‹ÖL,+I‹Íè±
  I‹vI‹H;þu"H‹ýH;ÞtbH‹ÓH‹Ïè’
  Hƒï€Hƒë€H;ÞuèëHH‹õH;ßtH‹ÓH‹Îèp
  Hƒî€Hƒë€H;ßuèI‹^H;ûtI‹õH+÷Hƒî€H>H‹×èD
  Hƒï€H;ûuëI‹>H…ÿ„   I‹vH;þtPH_xfH‹H…ÉtL‹HCÈH;È•ÂAÿP HÇ    H‹KÀH…ÉtH‹H;Ï•ÂÿP HÇCÀ    Hƒï€Hƒë€H;þu¶I‹I‹VH+ÑHƒâ€Hú   rL‹AøHƒÂ'I+ÈHAøHƒøw?I‹Èè’  I‰.I/L‹|$ I‹ÅL‹l$`IÁäLåH‹l$PM‰fL‹d$XI‰NHƒÄ(A^_^[Ãèƒ  ÌèàÎÿÿÌèšýÿÿÌÌÌÌÌÌÌÌÌÌH‰\$WHì`  H‹|ý H3ÄH‰„$P  H‹AH‹H‹H‹8HÇD$0   H‰|$8H‰\$@HÇD$H    WÀf„$   HÇD$P   HD$`H‰D$XH„$˜   H‰D$(HD$HH‰D$ LL$`LD$PH‹ÓH‹Ïÿ< …À…¶   H‹L$PH;L$0vR¸   H÷áHÇÁÿÿÿÿH@ÁH‹ÈèA  H‰„$   H‰D$XHÇD$(    HÇD$     L‹ÈLD$PH‹ÓH‹ÏÿÚ …Àu~H‹Œ$˜   H‹AH‰„$˜   H‹HL$0ÿÐH‹Œ$   H…Étè  3Àë3ÀH‹Œ$P  H3Ìèß
  H‹œ$x  HÄ`  _ÃH‹T$8HŒ$°   èÒÿÿHæ HŒ$°   èÜ8  H‹T$8HŒ$   èöÑÿÿHwæ HŒ$   è¶8  ÌÌ„Òt
º   é’
  ÃÌHAÃÌÌÌÌÌÌÌÌÌÌÌH	 ÃÌÌÌÌÌÌÌÌH‰\$WHì°   H‹¬û H3ÄH‰„$    H‹I‹øH‹ËHT$ ÿµ
 …À…©   H‹D$ LL$ A¸    H‰D$0HÁº H‰\$(H‹Ëÿ;
 …Àu\H‹D$ LD$8HL$(H‰D$@H‰\$8èùóÿÿH‹D$0HT$ A¸   H‰D$ H‹ÏèõÿÿH‹Œ$    H3Ìèœ	  H‹œ$À   HÄ°   _ÃH‹ÓHL$PèÞÐÿÿH_å HL$Pè¡7  ÌH‹ÓHL$Pè¿ÐÿÿH@å HL$Pè‚7  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌHiº H‰H‹ÂÃÌÌH ÃÌÌÌÌÌÌÌÌH‰\$WHì°   H‹|ú H3ÄH‰„$    H‹I‹øH‹ËHT$ ÿ…	 …À…©   H‹D$ LL$ A¸   H‰D$0Hy¹ H‰\$(H‹Ëÿ	 …Àu\H‹D$ LD$8HL$(H‰D$@H‰\$8èÉòÿÿH‹D$0HT$ A¸   H‰D$ H‹ÏèìóÿÿH‹Œ$    H3Ìèl  H‹œ$À   HÄ°   _ÃH‹ÓHL$Pè®ÏÿÿH/ä HL$Pèq6  ÌH‹ÓHL$PèÏÿÿHä HL$PèR6  ÌÌÌÌÌÌÌÌÌÌÌÌÌÌHù¹ H‰H‹ÂÃÌÌHi ÃÌÌÌÌÌÌÌÌ@USAVHl$¹Hì    H‹Hù H3ÄH‰E7H‹M‹ðH‹ËH‰]ßHUÇÿR …À…ë   H‹EÇHMÏH‰E×H‰¼$È   H‰]ÏèõðÿÿH‹}ÏLMÇH‹ÏH¸ A¸#   ÿÇ …À…Å   L‹MÇL¸· H‰´$À   H‹ÏH‹u×H‹Öÿ¬ …À…·   HUÇH‹Ëÿ? …ÀuFH‹EÇHUÏA¸   H‰EÏI‹ÎH‰u×è…òÿÿH‹´$À   H‹¼$È   H‹M7H3Ìèù  HÄ    A^[]ÃHMßèdËÿÿH‹ÐHMçè8ÎÿÿH¹â HMçèü4  ÌH‹ÓHMçèÎÿÿHœâ HMçèß4  ÌH‹×HMçèþÍÿÿHâ HMçèÂ4  ÌH‹×HMçèáÍÿÿHbâ HMçè¥4  ÌH‰¸ H‰H‹ÂÃÌÌHI ÃÌÌÌÌÌÌÌÌ@USAVHl$¹Hì    H‹¨÷ H3ÄH‰E7H‹M‹ðH‹ËH‰]ßHUÇÿ² …À…ë   H‹EÇHMÏH‰E×H‰¼$È   H‰]ÏèUïÿÿH‹}ÏLMÇH‹ÏHC¶ A¸"   ÿ' …À…Å   L‹MÇL¶ H‰´$À   H‹ÏH‹u×H‹Öÿ …À…·   HUÇH‹ËÿŸ …ÀuFH‹EÇHUÏA¸   H‰EÏI‹ÎH‰u×èåðÿÿH‹´$À   H‹¼$È   H‹M7H3ÌèY  HÄ    A^[]ÃHMßèÄÉÿÿH‹ÐHMçè˜ÌÿÿHá HMçè\3  ÌH‹ÓHMçè{ÌÿÿHüà HMçè?3  ÌH‹×HMçè^ÌÿÿHßà HMçè"3  ÌH‹×HMçèAÌÿÿHÂà HMçè3  ÌH)¶ H‰H‹ÂÃÌÌHi ÃÌÌÌÌÌÌÌÌ@USAVHl$¹Hì    H‹ö H3ÄH‰E7H‹M‹ðH‹ËH‰]ßHUÇÿ …À…ë   H‹EÇHMÏH‰E×H‰¼$È   H‰]ÏèµíÿÿH‹}ÏLMÇH‹ÏHk´ A¸)   ÿ‡ …À…Å   L‹MÇLx´ H‰´$À   H‹ÏH‹u×H‹Öÿl …À…·   HUÇH‹Ëÿÿ …ÀuFH‹EÇHUÏA¸   H‰EÏI‹ÎH‰u×èEïÿÿH‹´$À   H‹¼$È   H‹M7H3Ìè¹  HÄ    A^[]ÃHMßè$ÈÿÿH‹ÐHMçèøÊÿÿHyß HMçè¼1  ÌH‹ÓHMçèÛÊÿÿH\ß HMçèŸ1  ÌH‹×HMçè¾ÊÿÿH?ß HMçè‚1  ÌH‹×HMçè¡ÊÿÿH"ß HMçèe1  ÌHÉ´ H‰H‹ÂÃÌÌH‹Êº   é3  ÌÌÌHƒì(HA'H;Áv'H‹Èè#  H‹ÈH…ÀtHƒÀ'HƒààH‰HøHƒÄ(ÃèÅy  Ìè‡ÅÿÿÌÌÌÌÌÌÌH‰\$H‰l$H‰t$WHƒì 3íH‹ÙH‰i8H‹úH‹J8H…Ét5H;Êu(H‹H‹ÓÿPH‰C8H‹O8H…ÉtH‹H;Ï•ÂÿP H‰o8ëH‰K8H‰j8HƒÇ@H‰kxH‹O8H…Ét2H;Ïu%H‹HS@ÿPH‰CxH‹O8H…ÉtH‹H;Ï•ÂÿP ëH‰KxH‰o8H‹l$8H‹ÃH‹\$0H‹t$@HƒÄ _ÃHè é    H‰L$H‰T$L‰D$L‰L$ HƒìhfD$ fL$0fT$@f\$PH‹ÐH½Þ èð
 foD$ foL$0foT$@fo\$PH‹L$pH‹T$xL‹„$€   L‹Œ$ˆ   HƒÄhë ÿàHs é{ÿÿÿHo éoÿÿÿHk écÿÿÿHg éWÿÿÿHc éKÿÿÿH_ é?ÿÿÿH[ é3ÿÿÿHW é'ÿÿÿHS éÿÿÿHO éÿÿÿHK éÿÿÿHG é÷þÿÿHC éëþÿÿH? éßþÿÿH; éÓþÿÿH7 éÇþÿÿH3 é»þÿÿH/ é¯þÿÿH+ é£þÿÿH' é—þÿÿH# é‹þÿÿH éþÿÿH ésþÿÿH égþÿÿH é[þÿÿH éOþÿÿH éCþÿÿH é7þÿÿH é+þÿÿH  éþÿÿHó  éþÿÿÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌff„     H;iñ uHÁÁf÷ÁÿÿuÃHÁÉéŽ  ÌÌéï	  ÌÌÌ@SHƒì H‹ÙëH‹Ëè-w  …ÀtH‹Ëè™w  H…ÀtçHƒÄ [ÃHƒûÿtèß	  ÌèMÂÿÿÌHƒì(è£  …Àt!eH‹%0   H‹HëH;Èt3ÀðH±`  uî2ÀHƒÄ(Ã°ë÷ÌÌÌHƒì(èg  …Àtèª	  ëèO  ‹Èè¨}  …Àt2Àëèg  °HƒÄ(ÃHƒì(3Éè=  „À•ÀHƒÄ(ÃÌÌÌHƒì(èó*  „Àu2ÀëèŠ†  „Àuèñ*  ëì°HƒÄ(ÃHƒì(èƒ†  èÚ*  °HƒÄ(ÃÌÌÌH‰\$H‰l$H‰t$WHƒì I‹ùI‹ð‹ÚH‹éèÀ
  …ÀuƒûuL‹Æ3ÒH‹ÍH‹Çÿ¶" H‹T$X‹L$PH‹\$0H‹l$8H‹t$@HƒÄ _é\v  Hƒì(è{
  …ÀtH`ÿ HƒÄ(éëƒ  èŠz  …Àuèez  HƒÄ(ÃHƒì(3Éè!†  HƒÄ(é\*  @SHƒì ¶ÿ …É»   DÃˆÿ èj  èÉ)  „Àu2Àëèt…  „Àu	3Éè*  ëêŠÃHƒÄ [ÃÌÌÌ@SHƒì €=Ðþ  ‹ÙugƒùwjèÙ	  …Àt(…Ûu$Hºþ èƒ  …ÀuHÂþ è}ƒ  …Àt.2Àë3fou" HƒÈÿó‰þ H‰’þ ó’þ H‰›þ Æeþ °HƒÄ [Ã¹   è~	  ÌÌHƒìL‹Á¸MZ  f9¥®ÿÿuxHcØ®ÿÿH•®ÿÿHÊ9PE  u_¸  f9AuTL+Â·QHƒÂHÑ·AH€LÊH‰$I;Ñt‹JL;Ár
‹BÁL;ÀrHƒÂ(ëß3ÒH…Òu2Àëƒz$ }2Àë
°ë2Àë2ÀHƒÄÃ@SHƒì ŠÙèÃ  3Ò…Àt„ÛuH‡’ý HƒÄ [Ã@SHƒì €=‡ý  ŠÙt„Òuè2„  ŠËè‹(  °HƒÄ [ÃÌÌÌ@SHƒì Hƒ=bý ÿH‹ÙuèÜ  ëH‹ÓHLý èG‚  3Ò…ÀHDÓH‹ÂHƒÄ [ÃÌÌHƒì(è»ÿÿÿH÷ØÀ÷ØÿÈHƒÄ(ÃÌé?üÿÿÌÌÌ@SHƒì Hÿ  H‹ÙH‰öÂt
º   èüÿÿH‹ÃHƒÄ [ÃÌHƒì(…Òt9ƒêt(ƒêtƒút
¸   HƒÄ(ÃèÖüÿÿëè§üÿÿ¶ÀHƒÄ(ÃI‹ÐHƒÄ(é   M…À•ÁHƒÄ(é  H‰\$H‰t$H‰|$ AVHƒì H‹òL‹ñ3ÉèFýÿÿ„À„È   èÍûÿÿŠØˆD$@@·ƒ=Aü  …Å   Ç1ü    èüÿÿ„ÀtOè«	  èV	  è}	  H² Hƒ èZƒ  …Àu)èµûÿÿ„Àt Hb HK èö‚  ÇÜû    @2ÿŠËè*þÿÿ@„ÿu?èH	  H‹ØHƒ8 t$H‹Èèwýÿÿ„ÀtL‹Æº   I‹ÎH‹L‹Ö AÿÑÿÝû ¸   ë3ÀH‹\$0H‹t$8H‹|$HHƒÄ A^Ã¹   è¨  ÌÌÌH‰\$WHƒì0@Šù‹û …À3ÀH‹\$@HƒÄ0_ÃÿÈ‰„û è³úÿÿŠØˆD$ ƒ=*û u7èÇûÿÿèf  èÝ  ƒ%û  ŠËècýÿÿ3Ò@ŠÏè}ýÿÿöØÛƒãèÉûÿÿ‹Ãë¢¹   è#  ÌH‹ÄH‰X L‰@‰PH‰HVWAVHƒì@I‹ð‹úL‹ñ…Òu9 û 3Àéî   BÿƒøwEH‹¸ H…Àu
ÇD$0   ëÿÃ ‹Ø‰D$0…À„²   L‹Æ‹×I‹Îè ýÿÿ‹Ø‰D$0…À„—   L‹Æ‹×I‹Îèu  ‹Ø‰D$0ƒÿu6…Àu2L‹Æ3ÒI‹ÎèY  H…ö•ÁèÆþÿÿH‹? H…ÀtL‹Æ3ÒI‹ÎÿL …ÿtƒÿu@L‹Æ‹×I‹Îè.ýÿÿ‹Ø‰D$0…Àt)H‹ H…Àu	X‰\$0ëL‹Æ‹×I‹Îÿ	 ‹Ø‰D$0ë3Û‰\$0‹ÃH‹\$xHƒÄ@A^_^ÃÌÌÌH‰\$H‰t$WHƒì I‹ø‹ÚH‹ñƒúuè  L‹Ç‹ÓH‹ÎH‹\$0H‹t$8HƒÄ _éþÿÿÌÌÌ@SHƒì H‹Ù3Éÿ H‹Ëÿ ÿ H‹Èº	 ÀHƒÄ [Hÿ% H‰L$Hƒì8¹   ÿ  …Àt¹   Í)Hú èÉ  H‹D$8H‰õú HD$8HƒÀH‰…ú H‹Þú H‰Où H‹D$@H‰Sú Ç)ù 	 ÀÇ#ù    Ç-ù    ¸   HkÀ H%ù HÇ   ¸   HkÀ H‹é H‰L ¸   HkÀH‹ é H‰L H” èÿþÿÿHƒÄ8ÃÌÌHƒì(¹   è   HƒÄ(ÃÌ‰L$Hƒì(¹   ÿ …Àt‹D$0‹ÈÍ)H&ù èq   H‹D$(H‰ú HD$(HƒÀH‰ù H‹öù H‰gø ÇMø 	 ÀÇGø    ÇQø    ¸   HkÀ HIø ‹T$0H‰Hâ èMþÿÿHƒÄ(ÃH‰\$ WHƒì@H‹ÙÿE H‹»ø   HT$PH‹ÏE3Àÿ5 H…Àt2Hƒd$8 HL$XH‹T$PL‹ÈH‰L$0L‹ÇHL$`H‰L$(3ÉH‰\$ ÿ H‹\$hHƒÄ@_ÃÌÌÌ@SVWHƒì@H‹Ùÿ× H‹³ø   3ÿE3ÀHT$`H‹ÎÿÅ H…Àt9Hƒd$8 HL$hH‹T$`L‹ÈH‰L$0L‹ÆHL$pH‰L$(3ÉH‰\$ ÿ– ÿÇƒÿ|±HƒÄ@_^[ÃÌÌÌék~  ÌÌÌHƒa H  H‰AH H‰H‹ÁÃÌÌHƒìHHL$ èÒÿÿÿHÏ HL$ èÙ#  ÌH‰\$H‰t$WHƒì3À3É¢D‹ÁE3ÛD‹ÒAðntelAòineID‹Ë‹ð3ÉACEÐ¢AñGenu‰$EÑ‰\$‹ù‰L$‰T$u[HƒËæ ÿ%ð?ÿHÇ³æ  €  =À t(=` t!=p t°ùüÿƒø w$H¹     H£ÁsD‹­û AƒÈD‰¢û ëD‹™û ¸   DHû;ð|&3É¢‰$D‹Û‰\$‰L$‰T$ºã	s
EÁD‰fû Ç$æ    D‰!æ ºçƒ‘   D‰æ »   ‰æ ºçsyºçss3ÉÐHÁâ HÐH‰T$ H‹D$ "Ã:ÃuW‹×å ƒÈÇÆå    ‰Äå AöÃ t8ƒÈ Ç­å    ‰«å ¸  ÐD#ØD;ØuH‹D$ $à<àuƒŒå @‰‚å H‹\$(3ÀH‹t$0HƒÄ_Ã¸   ÃÌÌ3À9è •ÀÃƒ%‘ú  ÃH‰\$UH¬$@ûÿÿHìÀ  ‹Ù¹   ÿz …Àt‹ËÍ)¹   èÄÿÿÿ3ÒHMðA¸Ð  è§"  HMðÿ H‹è   H•Ø  H‹ËE3Àÿ H…Àt<Hƒd$8 Hà  H‹•Ø  L‹ÈH‰L$0L‹ÃHè  H‰L$(HMðH‰L$ 3ÉÿÊ H‹…È  HL$PH‰…è   3ÒH…È  A¸˜   HƒÀH‰…ˆ   è"  H‹…È  H‰D$`ÇD$P  @ÇD$T   ÿ¦ ƒøHD$PH‰D$@HEð”ÃH‰D$H3Éÿe HL$@ÿR …Àu„ÛuHè¾þÿÿH‹œ$Ð  HÄÀ  ]ÃÌÂ  ÌH‰\$ UH‹ìHƒì H‹èã H»2¢ß-™+  H;ÃutHƒe HMÿR H‹EH‰Eÿ< ‹ÀH1Eÿ( ‹ÀHM H1Eÿ ‹E HMHÁà H3E H3EH3ÁH¹ÿÿÿÿÿÿ  H#ÁH¹3¢ß-™+  H;ÃHDÁH‰eã H‹\$HH÷ÐH‰Nã HƒÄ ]ÃH™ø Hÿ%Ò ÌÌH‰ø é„$  Hø ÃHø ÃHƒì(èçÿÿÿHƒ$èæÿÿÿHƒHƒÄ(ÃÌH‰ ÃH‰\$WHƒì Ho± H=h± ëH‹H…Àtÿˆ HƒÃH;ßréH‹\$0HƒÄ _ÃH‰\$WHƒì HC± H=<± ëH‹H…ÀtÿL HƒÃH;ßréH‹\$0HƒÄ _ÃÌÌÌÌÌÌÌÌ@SHƒì H‹ÙH‹ÂH WÀH‰HSHHè³  Hp H‰H‹ÃHƒÄ [Ã@SHƒì0H‹ÙÆD$(H‹ÂHÜ WÀH‰D$ H‰HSHL$ èl  H) H‰H‹ÃHƒÄ0[ÃÌ@SHƒì H‹ÙH‹ÂH™ WÀH‰HSHHè/  HÔ H‰H‹ÃHƒÄ [ÃHƒìHH‹ÑHL$ èkÿÿÿHðÉ HL$ èb  ÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì H¿ÿÿÿÿÿÿÿI‹ØH‹êH‹ñL;Ç‡£   HÇA   HƒûsH‰Yè #  Æ3 ëkH‹ÃHƒÈH;ÇvH¹       €ë¹   H‹øH;ÁHBùHOHù   r
è‘ìÿÿL‹ðëH…ÉtèºïÿÿëïE3öL‹ÃL‰6H‹ÕH‰^I‹ÎH‰~è”"  AÆ H‹\$0H‹l$8H‹t$@H‹|$HHƒÄ A^Ãè¯²ÿÿÌÌÌH‰\$H‰l$H‰t$WHƒì H»ÿÿÿÿÿÿÿI‹øH‹êH‹ñL;Ã‡”   A¸   HÇA   I;øsH‰yè "  ëaH‹ÇHƒÈH;ÃvH¹       €ë¹   H‹ØH;ÁHBÙHKHù   rèµëÿÿë3ÀH…ÉtèßîÿÿLGH‰H‹ÕH‰~H‹ÈH‰^è½!  H‹\$0H‹l$8H‹t$@HƒÄ _Ãèã±ÿÿÌÌÌH‰\$H‰l$H‰t$WATAUAVAWHƒì L‹qH»ÿÿÿÿÿÿÿL‹d$pH‹ÃI+ÆM‹éH‹ùH;Â‚  L‹yI,H‹ÕHƒÊH;ÓvH¹       €ë,I‹ÏH‹ÃHÑéH+ÁL;øwãJ9H‹ÚH;ÐHBØHKHù   r
èÛêÿÿH‹ðëH…Étèîÿÿëï3öH‰oI,6H‰_M‹ÆH‹ÎIƒÿrMH‹H‹ÓèÕ   M‹ÄI‹ÕH‹ÍèÇ   IWAÆ, Hú   rH‹KøHƒÂ'H+ÙHCøHƒøwKH‹ÙH‹Ëè•íÿÿëH‹×è‹   M‹ÄI‹ÕH‹Íè}   AÆ, H‰7H‹ÇH‹\$PH‹l$XH‹t$`HƒÄ A_A^A]A\_Ãèd  ÌèŠ°ÿÿÌÌ@USWH‹ìHì€   H‹ƒÞ H3ÄH‰EðH‰M I‹ÀHƒeÀ WÀHƒeÈ H‹úM‹@H‹ÙHƒxE°rH‹ H‹ÐHM°èˆýÿÿLE°HU HMÐóE èŸ  HƒxrH‹ HÊ H‰E H‰HSWÀÆE¨HM èX  H‹UèH) H‰Hƒúr-H‹MÐHÿÂH‹ÁHú   rH‹IøHƒÂ'H+ÁHƒÀøHƒøw1èkìÿÿH	 H‰H‹ÃóCH‹MðH3Ìè*ìÿÿHÄ€   _[]Ãèc  ÌÌH‰\$WHƒì H‹ÚH$ H‰HQH‹ùWÀHKè·  H¬ H‰H‹ÇCH‹\$0óGHƒÄ _ÃÌÌH‰\$WHƒì H‹ÚHÔ H‰HQH‹ùWÀHKèg  H\ H‰Hr CH‹\$0H‰H‹ÇóGHƒÄ _ÃH‰\$H‰t$WHƒì`H‹ÊÜ H3ÄH‰D$PI‹ø‹òH‹ÙH‰L$ WÀD$0WÉóL$@IƒÈÿIÿÀC€< uöI‹ÑHL$0èíúÿÿ‰t$ H‰|$((D$ fD$ LD$0HT$ H‹ËèÊýÿÿH‹T$HHƒúr.HÿÂH‹L$0H‹ÁHú   rHƒÂ'H‹IøH+ÁHƒÀøHƒøw1èØêÿÿH™ H‰H‹ÃH‹L$PH3ÌèžêÿÿL\$`I‹[I‹s I‹ã_Ãèoa  ÌÌÌ@SHƒì H‹ÙöÂt
º   èŒêÿÿH‹ÃHƒÄ [ÃÌÌÌH‰\$WHƒì Ho H‹ùH‰‹ÚHƒÁèš  öÃtº(   H‹ÏèLêÿÿH‹\$0H‹ÇHƒÄ _ÃÌÌL‰D$H‰L$SVWHƒì`H‹tÛ H3ÄH‰D$PI‹ØH‹òH‹ùH‰L$(H‰\$(Iƒx tA¸   H­ H‹ËèQ  H‹NH‹D‹HT$0H‹@ÿÔ HT$0Hƒ|$HHCT$0L‹D$@H‹Ëè  H‹T$HHƒúr.HÿÂH‹L$0H‹ÁHú   rHƒÂ'H‹IøH+ÁHƒÀøHƒøwXè{éÿÿWÀHƒg Hƒg KOHƒc ¾   H‰sÆ Hƒc H‰sÆ H‹ÇH‹L$PH3ÌèéÿÿHƒÄ`_^[Ãèë_  ÌÌHƒì(ƒét(ƒét#ƒétƒùtè§q  Ì¹   è   Ì3Éè   Ì¹   è   ÌH‰\$WHƒìPHcÙH=šÿÿè  L‹ŒßXt HL$ ‹”Ÿt L‹ÀèýÿÿH¨Â HL$ è²  ÌÌH‰\$H‰t$WHƒì0H‹ùI‹ðH‹IH‹GH+ÁL;Àw*HƒJH‰GH‹ÇrH‹HH‹ËèV  H‹ÇÆ3 ëDŠD$@L‹ÊH‹ÖH‰t$ H‹Ïè•ùÿÿH‹\$HH‹t$PHƒÄ0_ÃÌD‰H‹ÂH‰JÃÌH‹BL‹HL9IuD9u°Ã2ÀÃÌÌÌ@SHƒì0H‹I‹ØD‹ÂHT$ H‹@ÿÞ H‹KL‹HH‹QI9Qu
‹9u°ë2ÀHƒÄ0[ÃÌÌH!Ù Ã@SHƒì0A‹ÈH‹ÚèŸ  WÀHƒc Hƒc IƒÈÿIÿÀB€<  uöH‹ÐH‹Ëè*÷ÿÿH‹ÃHƒÄ0[ÃÌHu ÃHƒÁHÿ%Q	 ÌH‰\$H‰t$ WAVAWHƒì@H‹ŽØ H3ÄH‰D$0‹L‹òºðH‹ñƒøuJÿï 9FHtHNH‹H‹ ÿ
 ÿÔ ‰FHÿFL3ÀH‹L$0H3ÌèÏæÿÿH‹\$pH‹t$xHƒÄ@A_A^_ÃM…öu(LyHÿœ A9„­   HNH‹H‹ ÿ³
 é˜   Hƒ: |nuƒz ~fº   HL$ èµ  H‹D$ I;|…³   A‹F9D$(¥   L~Hÿ9 A9tNH‹FHT$ I‹ÎH‹Xèw  ‹ÐHNH‹Ãÿ@
 „Àtœë$LyHÿ  A9tHNH‹H‹@ÿ
 „ÀtH‹NL3Û¿  A‰FLƒø~÷   u‰NL‹ßë	ÿ¼ A‰…Û„ãþÿÿ;ßt
¸   é×þÿÿM…öt Iƒ> uA‹F÷ØÀƒÀé¼þÿÿ¸   é²þÿÿ¸   é¨þÿÿHƒì(HƒÁÿ– „À•ÀHƒÄ(ÃHƒÁHÿ%q ÌHƒÁH‹H‹@ Hÿ%n	 ÌÌH‰\$WHƒì H{ H‹ùH‰A‹ÚHƒÁÿ0 ƒOHÿƒgL ‰H‹\$0HƒÄ _ÃÌÌÌ3ÒéÑýÿÿÌHƒì(ƒiLuƒIHÿHƒÁH‹H‹@ÿ		 3ÀHƒÄ(ÃÌÌHé 9tHƒÀHÊ H;ÂuìHÆ ÃH‹@ÃHƒìD‹AL‹Ú$L‹$E…Ày&ƒÉÿ¸ƒ¾àA+È÷á+ÊÑéÊÁéÿÁiÁ Êš;DÀ‹ÁL+ÈAº Êš;E;Â|"¸ƒ¾àA÷àA‹À+ÂÑèÂÁè‹ÈiÀ 6eÄDÀLÉE;C}E+SHƒÈÿI+LÈEÂëM+E+CL‰$M…ÉxuE…ÀHƒ$$ E3ÀAˆ?B ¸ƒÞC÷éi$è  Áú‹ÂÁèÂÁHƒÄÃHƒì(HL$0èÞ   ‹D$4Hº €Á*!Nbþ‹L$0HÁà HÂHÁHƒÄ(ÃÌH‰\$WHƒì ‹ÚH‹ùƒúu3H…Ét.è²ÿÿÿL‹ÀH¸½BzåÕ”¿ÖI÷àHÁêiÊ€–˜ H‰D+ÁAkÀd‰Gë3Û‹ÃH‹\$0HƒÄ _ÃÌÌ@SHƒì Hw ÿ) H‹ÈH‡ H‹Øÿ† H H‹ËH‰ê ÿo H˜ H‹ËH‰þé ÿX H‰ùé 3ÀHƒÄ [ÃÌH‹áé H…ÀtHÿ% Hÿ%Þ ÌÌH‹ÄL‰H L‰@H‰PH‰HSHƒìpH‹Ùƒ`È H‰HàL‰@èèÀ  HT$X‹H‹@ÿÇ ÇD$@    ë ‹D$@HƒÄp[ÃÌÌÌH‹ÄL‰H L‰@H‰PH‰HSHƒìpH‹Ùƒ`È H‰HàL‰@èèl  HT$X‹H‹@ÿs ÇD$@    ë ‹D$@HƒÄp[ÃÌÌÌH‰\$H‰l$H‰t$WHƒì ‹y‹ò…ÿH‹ét+_ÿ‹ûè  H›H‹@`HHcEHÁ;p~;p~…ÛëÓ3ÀH‹\$0H‹l$8H‹t$@HƒÄ _ÃÌÌH‹ÄH‰XH‰hH‰pH‰x AVŠLQˆA‹ñL5“ÿÿI‹èL‹ÚH‹ùöÃt$A¶
ƒáJ¾„1(… BŠŒ18… L+ÐA‹BüÓè‰BöÃt
A‹IƒÂ‰BöÃt
A‹IƒÂ‰BIcMBE3ÉD8L$0uPöÃtKH(¶
ƒáJ¾„1(… BŠŒ18… H+ÐD‹RüAÓêE‰KE…Òt ‹‹JHR;Æt
AÿÁE;Êrëë	A‰Kë‰BöÃt%A¶ƒáJ¾”1(… BŠŒ18… L+ÂA‹PüÓêA‰SH‹\$L+ÇH‹l$I‹ÀH‹t$ H‹|$(A^ÃÌÌ@SHƒì H‹ÚH‹ÑH‹ËèŒ  ‹ÐH‹ËèZþÿÿH…À•ÀHƒÄ [ÃÌÌŠ$ÃÌÌÌH‰\$H‰t$WHƒì LL$HI‹ØH‹úèy   H‹×H‹ËH‹ðè?  ‹ÐH‹ËèþÿÿH…ÀuAƒÉÿëD‹HL‹ÃH‹×H‹Îè|C  H‹\$0H‹t$8HƒÄ _ÃHƒì(Aö H‹	H‰L$0tA‹@H‹H‰L$0AƒÉÿHL$0èËD  HƒÄ(ÃÌÌH‰\$H‰l$VWATAVAWHƒì A‹pL‹áI‹ÈI‹ùM‹ðL‹úè¦  M‹$‹èL‰…ötwIcFNÿ‹ñH‰HˆI_;k~â;kÝI‹HT$PE3Àÿ LcC3ÉLD$PD‹KD‹E…ÉtIPHcI;ÂtÿÁHƒÂA;ÉríA;És™I‹$H‰IcLˆH‹H‰H‹\$XH‹ÇH‹l$`HƒÄ A_A^A\_^ÃH‹H‹ÑI‰Aö tA‹HH‹H‹I‰	I‹ÁÃÌÌÌH‰\$H‰l$H‰t$WATAUAVAWHƒì@H‹œ$   L‹âH‹éI‹ÑH‹ËI‹ùE‹øD‹sè¥  E3Ò‹ðE…ö„ë   L‹_ƒÈÿHc[D‹ÈD‹èA‹ÖDBÿK€I‹;t~;t~A‹ÐE…ÀuàE‹Â…ÒtBÿH€HƒIÓëI‹ÒIAƒËÿH…Òt‹B9~#‹B9AD;9|D;yE;ËA‹ÀE‹èAEÁD‹ÈAÿÀHƒÁE;ÆrÅE;ËL‰d$ A‹ÂL‰d$0AEÁL\$@I‹[0I‹s@‰D$(AED$ DEÐH‹ÅD‰T$8L$0óE óMI‹k8I‹ãA_A^A]A\_Ãèf  ÌÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì`H‰T$ H‹ú)pèH‹éH‰T$03Û‰\$(HPØ(t$ H‹ÏfpØE‹ð3öèB  D‹3ÒE…É„Â   L‹GL±ŽÿÿH‹G‹ËD;ð|HÁè D;ð…É‹Ú‹òDÙ‰\$((t$ A¶ÿÂƒáJ¾„(… BŠŒ8… L+ÀA‹@üÓèL‰G‰GA¶ƒáJ¾„(… BŠŒ8… L+ÀA‹@üÓèL‰G‰GA¶ƒáJ¾„(… BŠŒ8… L+ÀA‹@üÓèL‰G‰G A‹ IƒÀL‰G‰G$A;Ñ…IÿÿÿÿÆft$@HT$@‰t$8H‹ÏèY  D$0L\$`H‹ÅI‹[I‹s I‹{(óu (t$PóEI‹kI‹ãA^ÃÌÌÌ@UHl$áHìà   H‹§Í H3ÄH‰EL‹UwHu  L‹ÙHL$0H@ IH0A @@I0HPA@@`IPˆ€   A`@pH‹€   Ap‰€   H‰   H„8  I‹H‰EH‹EOH‰EŸHcE_H‰E§H‹EWH‰E·¶EH‰EÇI‹B@H‰D$(I‹B(L‰M—E3ÉL‰E¯LD$0H‰U¿I‹H‰D$ HÇEÏ “ÿ®ý  H‹MH3ÌèRÛÿÿHÄà   ]ÃÌ@UHl$áHìà   H‹£Ì H3ÄH‰EL‹UwHÑ  L‹ÙHL$0H@ IH0A @@I0HPA@@`IPˆ€   A`@pH‹€   Ap‰€   H‰   Hl9  H‰EH‹EOH‰EŸHcE_L‰E¯L‹EoH‰E§¶EH‰EÇI‹HM‹@ IJMBHcEgH‰EçI‹B@H‰D$(I‹B(L‰M—E3ÉH‰M·I‹H‰U¿I‹L‰E×LD$0H‰D$ HÇEÏ “ÿŽü  H‹MH3Ìè2ÚÿÿHÄà   ]ÃÌL‹AL}‹ÿÿL‰AL‹ÉA¶ƒáJ¾„(… BŠŒ8… L+ÀA‹@üÓèM‰AA‰AA¶ƒáJ¾„(… BŠŒ8… L+ÀA‹@üM‰AÓèA‰AA¶ƒáJ¾„(… BŠŒ8… L+ÀA‹@üM‰AÓèA‰A A‹ IƒÀƒz M‰AA‰A$„  D‹RA¶ƒáJ¾„(… BŠŒ8… L+ÀA‹@üM‰AÓèA‰AA¶ƒáJ¾„(… BŠŒ8… L+ÀA‹@üM‰AÓèA‰AA¶ƒáJ¾„(… BŠŒ8… L+ÀA‹@üIPM‰AÓèA‰A A‹ I‰QA‰A$¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèI‰QA‰A¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèI‰QA‰A¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüLBÓèI‰QA‰A ‹M‰AA‰A$Iƒê…éþÿÿÃÌÌ@SHƒì H‹ÙH‰è[  H;XXsèP  H‹HXë3ÉH‰Kè?  H‰XXH‹ÃHƒÄ [ÃÌÌH‰\$WHƒì H‹ùè  H;xXu5è  H‹PXH…Òt'H‹ZH;út
H‹ÓH…Ûtëíèò  H‰XXH‹\$0HƒÄ _Ãèš`  ÌÌHƒì(èÓ  H‹@`HƒÄ(ÃÌÌHƒì(è¿  H‹@hHƒÄ(ÃÌÌ@SHƒì H‹Ùè¦  H‰X`HƒÄ [Ã@SHƒì H‹ÙèŽ  H‰XhHƒÄ [ÃH‹ÄH‰XH‰hH‰p WHƒì@I‹YI‹ùI‹ðH‰PH‹éèZ  H‰X`H‹]8èM  H‰XhèD  H‹O8L‹ÏL‹Æ‹H‹ÍHP`3ÀˆD$8H‰D$0‰D$(H‰T$ HT$Pè¿1  H‹\$XH‹l$`H‹t$hHƒÄ@_ÃÌÌH‹ÄH‰XH‰hH‰p WHƒì`ƒ`Ü I‹ùƒ`à I‹ðƒ`ä H‹éƒ`è ƒ`ì I‹YÆ@Ø H‰Pèº  H‰X`H‹]8è­  H‰Xhè¤  H‹O8HT$@L‹GÆD$  ‹	HH`H‹GD‹è ôÿÿÆD$8 HD$@Hƒd$0 HT$pƒd$( L‹ÏL‹ÆH‰D$ H‹Íè1  L\$`I‹[I‹k I‹s(I‹ã_ÃÌH‰\$H‰t$H‰|$AVHƒì €y L‹òH‹ñtLH‹H…ÀtDHƒÏÿHÿÇ€<8 u÷HOèÕM  H‹ØH…ÀtL‹HWH‹Èè–`  H‹ÃAÆFI‰3ÛH‹ËèM^  ë
H‹H‰ÆB H‹\$0H‹t$8H‹|$@HƒÄ A^ÃÌÌÌ@SHƒì €y H‹ÙtH‹	è^  Hƒ# ÆC HƒÄ [ÃÌÌÌH…ÉtgˆT$HƒìH9csmàuSƒyuM‹A - “ƒøw@H‹A0H…Àt7HcP…ÒtHQ8H‹I(è*   ë ëö tH‹A(H‹H…ÉtH‹H‹@ÿ4ù  HƒÄHÃÌÌÌHÿâÌ@SHƒì H‹Ùè  H‹PXë	H9tH‹RH…ÒuòBHƒÄ [Ã3ÀëöÌHcHÁƒz |LcJHcRI‹	Lc
MÁIÀÃÌH‰\$WHƒì H‹9H‹Ù?RCCàt?MOCàt
?csmàt"ëè  ƒx0 ~è‚  ÿH0H‹\$03ÀHƒÄ _Ãèm  H‰x H‹[è`  H‰X(èç\  ÌÌÌHƒì(èÛ\  ÌÌÌHƒì(èW@  „Àu2Àëè  „Àuè‰@  ëì°HƒÄ(ÃHƒì(è3  H…À•ÀHƒÄ(ÃHƒì(3Éè±  °HƒÄ(ÃÌÌHƒì(„Éu
è  èF@  °HƒÄ(ÃÌÌÌHƒì(è÷  °HƒÄ(ÃH‰\$H‰l$H‰t$WATAUAVAWHƒì@H‹éM‹ùI‹ÈI‹ðL‹êèx@  M‹gM‹7I‹_8M+ôöEfA‹H…Ü   H‰l$0H‰t$8;;ƒv  ‹÷Hö‹DóL;ð‚ª   ‹DóL;ðƒ   ƒ|ó „’   ƒ|ót‹DóHL$0IÄI‹ÕÿÐ…Àx}~t} csmàu(Hƒ=õ
  tHì
 èOà  …Àtº   H‹ÍÿÕ
 ‹LóA¸   IÌI‹Õèˆ?  I‹G@L‹Å‹TóI‹ÍD‹M IÔH‰D$(I‹G(H‰D$ ÿÿô  èŠ?  ÿÇé5ÿÿÿ3Àé±   I‹w I+ôé–   ‹ÏHÉ‹DËL;ð‚‚   ‹DËL;ðsyD‹UAƒâ tDE3É…Òt8E‹ÁMÀB‹DÃH;ðr B‹DÃH;ðs‹DËB9DÃu‹DËB9DÃtAÿÁD;ÊrÈD;Êu7‹DË…ÀtH;ðuE…Òu%ëGI‹ÕA‰GHD‹DË±MÄAÿÐÿÇ‹;ú‚`ÿÿÿ¸   L\$@I‹[0I‹k8I‹s@I‹ãA_A^A]A\_ÃÌH‰\$H‰t$ WHƒìPH‹ÚH‹ñ¿ “H…ÒtötH‹	HƒéH‹H‹X0H‹@@ÿ°õ  HT$ H‹ËÿÚó  H‰D$ H…ÛtöuH…Àu¿ @™º   H‰|$(LL$(H‰t$0¹csmàH‰\$8H‰D$@DBÿœó  H‹\$pH‹t$xHƒÄP_ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌff„     W‹ÂH‹ùI‹ÈóªI‹Á_ÃÌÌÌÌÌÌff„     H‹ÁL‹ÉLC‚ÿÿ¶ÒI»L¯ÚfInÃIƒø‡ƒ    IÈG‹Œ‚  MÊAÿáL‰YñD‰YùfD‰YýDˆYÿÃL‰YòD‰YúfD‰YþÃfffffff„     L‰YóD‰YûDˆYÿÃ L‰YôD‰YüÃL‰YõfD‰YýDˆYÿÃL‰Y÷DˆYÿÃL‰YöfD‰YþÃL‰YøÃflÀIƒø wóóBDðÃƒ=›Á ‚Ý  L;–Á vL;•Á wö´Ö …îþÿÿÄã}ÀL‹ÉIƒáIƒé I+ÉI+ÑMÁIø   veL;\Á ‡Î   ffffff„     ÅýÅýA ÅýA@ÅýA`Åý€   Åý    ÅýÀ   Åýà   HÁ   Iè   Iø   s¶MHIƒáàM‹ÙIÁëG‹œš@ MÚAÿãÄ¡~„	 ÿÿÿÄ¡~„	 ÿÿÿÄ¡~„	@ÿÿÿÄ¡~„	`ÿÿÿÄ¡~D	€Ä¡~D	 Ä¡~D	ÀÄ¡~DàÅþ ÅøwÃfffff„     ÅýçÅýçA ÅýçA@ÅýçA`Åýç€   Åýç    ÅýçÀ   Åýçà   HÁ   Iè   Iø   s¶MHIƒáàM‹ÙIÁëG‹œšd MÚAÿãÄ¡}ç„	 ÿÿÿÄ¡}ç„	 ÿÿÿÄ¡}ç„	@ÿÿÿÄ¡}ç„	`ÿÿÿÄ¡}çD	€Ä¡}çD	 Ä¡}çD	ÀÄ¡~DàÅþ ®øÅøwÃff„     L;¹¿ vöàÔ …ýÿÿL‹ÉIƒáIƒéI+ÉI+ÑMÁIø€   vKfffff„     ffAfA fA0fA@fAPfA`fApHÁ€   Iè€   Iø€   sÂMHIƒáðM‹ÙIÁëG‹œšˆ MÚAÿãóBD	€óBD	óBD	 óBD	°óBD	ÀóBD	ÐóBD	àóBDðó ÃH;ÊtHƒÂ	HA	H+ÐŠ:u
HÿÀ„Éuò3ÀÃÀƒÈÃÌ@SHƒì ÿœï  H…ÀtH‹H‹Èè¨U  H‹ÃH…ÛuíHƒÄ [ÃÌÌÌÌÌÌÌÌÌÌÌÌff„     WVH‹ùH‹òI‹Èó¤^_ÃÌÌÌÌÌÌff„     H‹ÁL6~ÿÿIƒø‡  ffff„     G‹Œ‚° MÊAÿáÃL‹‹JD·JD¶RL‰ ‰HfD‰HDˆPÃL‹·JD¶J
L‰ f‰HDˆH
Ã·
f‰Ã‹
D·BD¶J‰fD‰@DˆHÃL‹‹JD·JL‰ ‰HfD‰HÃ·
D¶Bf‰Dˆ@ÃL‹‹JD¶JL‰ ‰HDˆHÃL‹·JL‰ f‰HÃL‹¶JL‰ ˆHÃL‹‹JL‰ ‰HÃ‹
D·B‰fD‰@Ã‹
D¶B‰Dˆ@ÃH‹
H‰Ã¶
ˆÃ‹
‰ÃIƒø wóo
óBoTðó	óBTðÃH;ÑsNI;É‚A  ƒ=½ ‚ã  Iø    vIø   wöÒ …dþÿÿÅþoÄ¡~olàIø   †Ä   L‹ÉIƒáIƒé I+ÉI+ÑMÁIø   †£   Iø   ‡>  ffffff„     Åþo
ÅþoR ÅþoZ@Åþob`Åý	ÅýQ ÅýY@Åýa`ÅþoŠ€   Åþo’    ÅþošÀ   Åþo¢à   Åý‰€   Åý‘    Åý™À   Åý¡à   HÁ   HÂ   Iè   Iø   ƒxÿÿÿMHIƒáàM‹ÙIÁëG‹œšð MÚAÿãÄ¡~oŒ
 ÿÿÿÄ¡~Œ	 ÿÿÿÄ¡~oŒ
 ÿÿÿÄ¡~Œ	 ÿÿÿÄ¡~oŒ
@ÿÿÿÄ¡~Œ	@ÿÿÿÄ¡~oŒ
`ÿÿÿÄ¡~Œ	`ÿÿÿÄ¡~oL
€Ä¡~L	€Ä¡~oL
 Ä¡~L	 Ä¡~oL
ÀÄ¡~L	ÀÄ¡~làÅþ ÅøwÃfÅþo
ÅþoR ÅþoZ@Åþob`Åýç	ÅýçQ ÅýçY@Åýça`ÅþoŠ€   Åþo’    ÅþošÀ   Åþo¢à   Åýç‰€   Åýç‘    Åýç™À   Åýç¡à   HÁ   HÂ   Iè   Iø   ƒxÿÿÿMHIƒáàM‹ÙIÁëG‹œš‘ MÚAÿãÄ¡~oŒ
 ÿÿÿÄ¡}çŒ	 ÿÿÿÄ¡~oŒ
 ÿÿÿÄ¡}çŒ	 ÿÿÿÄ¡~oŒ
@ÿÿÿÄ¡}çŒ	@ÿÿÿÄ¡~oŒ
`ÿÿÿÄ¡}çŒ	`ÿÿÿÄ¡~oL
€Ä¡}çL	€Ä¡~oL
 Ä¡}çL	 Ä¡~oL
ÀÄ¡}çL	ÀÄ¡~làÅþ ®øÅøwÃfffffff„     Iø   vö@Ï …ŠûÿÿóoóBolðIø€   †Ž   L‹ÉIƒáIƒéI+ÉI+ÑMÁIø€   vqD  óo
óoRóoZ óob0f	fQfY fa0óoJ@óoRPóoZ`óobpfI@fQPfY`fapHÁ€   HÂ€   Iè€   Iø€   s”MHIƒáðM‹ÙIÁëG‹œš8‘ MÚAÿãóBoL
€óBL	€óBoL
óBL	óBoL
 óBL	 óBoL
°óBL	°óBoL
ÀóBL	ÀóBoL
ÐóBL	ÐóBoL
àóBL	àóBlðó Ãf„     L‹ÙL‹ÒH+ÑIÈDðHƒéIƒèöÁtH‹ÁHƒáðÈL‹ÁM+ÃM‹ÈIÁéto)ëfffff„     )A)	DðLàHé€   )Ap)I`DPL@IÿÉ)AP)I@D0L )A0)I Du®)AIƒà(ÁM‹ÈIÁétff„     HƒéIÿÉuðIƒàtA
AI‹ÃÃÌÌÌHƒì(H…ÉtHXÍ H;ÈtèÒN  HƒÄ(ÃÌ@SHƒì H‹Ù‹Ù· ƒùÿt3H…Ûuè&5  ‹Ä· H‹Ø3Òè^5  H…ÛtHÍ H;ØtH‹Ëè…N  HƒÄ [ÃÌÌÌHƒì(è   H…ÀtHƒÄ(Ãè¤N  ÌÌÌÌH‰\$H‰t$WHƒì ƒ=f· ÿu3Àé   ÿ'è  ‹Q· ‹øè¦4  HƒÊÿ3öH;ÂtgH…ÀtH‹ðë]‹/· èÎ4  …ÀtNº€   Jè)P  ‹· H‹ØH…Àt$H‹Ðè§4  …ÀtH‹ÃÇCxþÿÿÿH‹ÞH‹ðë‹ç¶ 3Òè„4  H‹Ëè¼M  ‹Ïÿ¨ç  H‹ÆH‹\$0H‹t$8HƒÄ _ÃÌHƒì(H©þÿÿèx3  ‰¦¶ ƒøÿt%HúË ‹Èè74  …ÀtÇ]Ì þÿÿÿ°ëè   2ÀHƒÄ(ÃÌHƒì(‹j¶ ƒùÿtèt3  ƒY¶ ÿ°HƒÄ(ÃÌÌHƒì(McHM‹ÐH‹A‹ƒøþuL‹I‹ÊèŠ   HƒÄ(ÃÌ@SHƒì LL$@I‹ØèäÿÿH‹HcCH‰L$@‹DHƒÄ [ÃÌÌÌHcRH‹D‰ÃH‰\$WHƒì A‹ùI‹ØLL$@èNäÿÿH‹HcCH‰L$@;|~‰|H‹\$0HƒÄ _ÃÌL‹é   L‹éh   @SHƒì I‹ØH…ÉtRLcYL‹RKH…ÀtAD‹AE3ÉE…Àt0KËJcIÒH;ÚrAÿÁE;ÈrèE…ÉtAIÿIÊB‹DHƒÄ [ÃƒÈÿëõècL  ÌÌÌH‹ÄH‰XH‰hH‰pH‰x AVƒÍÿI‹Øƒy L‹Ò„¬   LcIL5ÉtÿÿH‹z3öLÏE3À‹ÕA¶	ƒáJ¾„1(… BŠŒ18… L+ÈE‹YüAÓëE…ÛtlI‹BD‹A¶	ƒáJ¾„1(… BŠŒ18… L+ÈA‹AüÓèð‹ÆIÂHÇH;Ør+A¶	AÿÀƒáJ¾„1(… BŠŒ18… L+ÈA‹QüÓêÿÊE;Ãr¥E…ÀDÕ‹Âë‹ÅH‹\$H‹l$H‹t$ H‹|$(A^ÃÌÌÌH‰\$H‰t$H‰|$AUAVAWHƒì0M‹ñI‹ØH‹òL‹é3ÿA9xtMcxè¢êÿÿIëH‹×D‹ÿH…Ò„w  E…ÿtèƒêÿÿH‹ÈHcCHÈëH‹Ï@8y„T  9{u9;G  9;|
HcCHH‹ðö€t2Aöt,H‹	É H…Àt ÿ&æ  H…À„/  H…ö„&  H‰H‹Èë_ötI‹M(H…É„  H…ö„  H‰ë?AötJI‹U(H…Ò„õ   H…ö„ì   McFH‹ÎèÄôÿÿAƒ~…«   H9>„¢   H‹IVè¬ìÿÿH‰éŽ   A9~tIc^è­éÿÿHëH‹Ï‹ßH…Éu4I9}(„”   H…ö„‹   Ic^IVI‹M(èaìÿÿH‹ÐL‹ÃH‹ÎèKôÿÿë;I9}(tiH…ötd…ÛtèUéÿÿH‹ÈIcFHÈëH‹ÏH…ÉtGAŠ$öØÉ÷ÙÿÁ‹ù‰L$ ‹Çë3ÀH‹\$PH‹t$XH‹|$`HƒÄ0A_A^A]ÃèI  èˆI  èƒI  è~I  èyI  èsI  ÌÌH‰\$H‰t$H‰|$AUAVAWHƒì0M‹ñI‹ØH‹òL‹é3ÿA9xtMcxè¢èÿÿIëH‹×D‹ÿH…Ò„z  E…ÿtèƒèÿÿH‹ÈHcCHÈëH‹Ï@8y„W  9{u	9{I  9{|	‹CHH‹ðöC€t2Aöt,H‹Ç H…Àt ÿ$ä  H…À„0  H…ö„'  H‰H‹Èë`öCtI‹M(H…É„  H…ö„  H‰ë?AötJI‹U(H…Ò„õ   H…ö„ì   McFH‹ÎèÁòÿÿAƒ~…«   H9>„¢   H‹IVè©êÿÿH‰éŽ   A9~tIc^èªçÿÿHëH‹Ï‹ßH…Éu4I9}(„”   H…ö„‹   Ic^IVI‹M(è^êÿÿH‹ÐL‹ÃH‹ÎèHòÿÿë;I9}(tiH…ötd…ÛtèRçÿÿH‹ÈIcFHÈëH‹ÏH…ÉtGAŠ$öØÉ÷ÙÿÁ‹ù‰L$ ‹Çë3ÀH‹\$PH‹t$XH‹|$`HƒÄ0A_A^A]ÃèŠG  è…G  è€G  è{G  èvG  èpG  ÌÌÌH‰\$H‰t$H‰|$AVHƒì I‹ùL‹ñ3ÛA9}H‹òëIcpH2èÉûÿÿƒèt<ƒøugHWI‹N(è†éÿÿL‹ð9_tè‘æÿÿHc_HØA¹   M‹ÆH‹ÓH‹ÎèÆ(  ë0HWI‹N(èOéÿÿL‹ð9_tèZæÿÿHc_HØM‹ÆH‹ÓH‹Îè‰(  H‹\$0H‹t$8H‹|$@HƒÄ A^Ãè­F  H‰\$H‰t$H‰|$AVHƒì I‹ùL‹ñ3ÛA9X}H‹òëA‹pH2èýÿÿƒèt<ƒøugHWI‹N(èÅèÿÿL‹ð9_tèÐåÿÿHc_HØA¹   M‹ÆH‹ÓH‹Îè(  ë0HWI‹N(èŽèÿÿL‹ð9_tè™åÿÿHc_HØM‹ÆH‹ÓH‹ÎèÈ'  H‹\$0H‹t$8H‹|$@HƒÄ A^ÃèìE  ÌÌÌH‹ÄH‰XL‰@UVWATAUAVAWHƒì`L‹¬$À   M‹ùL‹âLHH‹éM‹ÅI‹×I‹ÌèÿÜÿÿL‹Œ$Ð   L‹ðH‹´$È   M…ÉtL‹ÆH‹ÐH‹ÍèþÿÿH‹Œ$Ø   ‹Y‹9èÛäÿÿHcNM‹ÎL‹„$°   HÁŠŒ$ø   H‹ÕˆL$PI‹ÌL‰|$HH‰t$@‰\$8‰|$0L‰l$(H‰D$ èàÿÿH‹œ$    HƒÄ`A_A^A]A\_^]ÃÌÌÌH‹ÄH‰XL‰@UVWATAUAVAWHƒì`L‹¬$À   M‹ùL‹âLHH‹éM‹ÅI‹×I‹Ìè÷ÜÿÿL‹Œ$Ð   L‹ðH‹´$È   M…ÉtL‹ÆH‹ÐH‹ÍèþÿÿH‹Œ$Ø   ‹Y‹9èäÿÿHcNM‹ÎL‹„$°   HÁŠŒ$ø   H‹ÕˆL$PI‹ÌL‰|$HH‰t$@‰\$8‰|$0L‰l$(H‰D$ èOàÿÿH‹œ$    HƒÄ`A_A^A]A\_^]ÃÌÌÌ@USVWATAUAVAWHl$ØHì(  H‹Ì¬ H3ÄH‰EH‹½   L‹âL‹­¨   M‹øL‰D$hH‹ÙH‰T$xL‹ÇI‹ÌL‰m˜I‹ÑÆD$` I‹ñèò"  D‹ðƒøÿŒa  ;GX  ;csmà…É   ƒ{…¿   ‹C - “ƒø‡®   Hƒ{0 …£   èÖôÿÿHƒx  „¯  èÆôÿÿH‹X è½ôÿÿH‹K8ÆD$`L‹x(L‰|$hè
ãÿÿ;csmàuƒ{u‹C - “ƒøwHƒ{0 „Ë  è{ôÿÿHƒx8 t<èoôÿÿL‹x8èfôÿÿI‹×H‹ËHƒ`8 è¾"  „ÀuI‹Ïè¢#  „À„j  éA  L‹|$hH‹FH‰EÀH‰}¸;csmà…»  ƒ{…±  ‹C - “ƒø‡   E3ÿD9†Ä  ‹…    HU¸‰D$(HMØL‹ÎH‰|$ E‹ÆèÖÚÿÿEØóEÈfsØf~À;Eðƒ‡  L‹MØD‹mÐL‰M€H‹EÈH‹ HcPA‹ÅH€I‹ALŠA IcL ‰M°f~ÀE A;Æ6  H‹E HÁè D;ð%  E‹çH‹ÑHVL‹}¨IÁï H‰UE…ÿ„ó   A‹ÄH€ŠEø‹DŠ‰EèdáÿÿH‹K0HƒÀHcQHÂH‰D$pèKáÿÿH‹K0HcQ‹‰L$d…É~<è3áÿÿH‹L$pL‹C0Hc	HÁHMøH‹ÐH‰Eˆè8  …Àu%‹D$dHƒD$pÿÈ‰D$d…ÀÄAÿÄE;çtoH‹UélÿÿÿŠ…˜   L‹ÎL‹d$xH‹ËL‹D$hI‹ÔˆD$XŠD$`ˆD$PH‹E˜H‰D$H‹…    ‰D$@HE H‰D$8H‹EˆH‰D$0HEøH‰D$(H‰|$ è*ûÿÿëL‹d$xë	L‹d$xL‹M€E3ÿAÿÅD;mð‚…þÿÿ‹%ÿÿÿ=!“‚ú   D9 tè;àÿÿHcO HÁu!‹G$Áè¨„Ø   H‹×H‹Îè9×ÿÿ„À…Å   ‹G$Áè¨…  D9 tèøßÿÿH‹ÐHcG HÐëI‹×H‹Ëè%   „À…   LMˆL‹ÇH‹ÖI‹Ìè³×ÿÿŠ˜   L‹ÈL‹D$hH‹ÓˆL$PƒÉÿH‰t$HL‰|$@‰L$8‰L$0I‹ÌH‰|$(L‰|$ èÛÿÿë=ƒ v7€½˜    …   ‹…    L‹ÎL‰l$8M‹Ç‰D$0I‹ÔD‰t$(H‹ËH‰|$ èx  è#ñÿÿHƒx8 ugH‹MH3Ìè·ÿÿHÄ(  A_A^A]A\_^[]Ã²H‹ËènáÿÿHMøè‰  H’‘ HMøèåÿÿÌèc?  ÌèÍðÿÿH‰X èÄðÿÿH‹L$hH‰H(èF?  Ìèl?  ÌÌÌÌ@USVWATAUAVAWH¬$xÿÿÿHìˆ  H‹ñ§ H3ÄH‰EpL‹µð   L‹úL‹¥  H‹ÙH‰T$xI‹ÎI‹ÑL‰e I‹ñÆD$` M‹èè;òÿÿƒ~H ‹øtèBðÿÿƒxxþ…  ‹~Hƒïëè+ðÿÿƒxxþtè ðÿÿ‹xxèðÿÿÇ@xþÿÿÿƒÿÿŒQ  Aƒ~ LTgÿÿt)IcVHV¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèë3À;ø  ;csmà…Ä   ƒ{…º   ‹C - “ƒø‡©   Hƒ{0 …ž   èïÿÿHƒx  „l  è€ïÿÿH‹X èwïÿÿH‹K8ÆD$`L‹h(èÉÝÿÿ;csmàuƒ{u‹C - “ƒøwHƒ{0 „ˆ  è:ïÿÿHƒx8 t<è.ïÿÿL‹x8è%ïÿÿI‹×H‹ËHƒ`8 è}  „ÀuI‹Ïèa  „À„,  é  L‹|$xL‹FHMðI‹Öès  ;csmà…z  ƒ{…p  ‹C - “ƒø‡_  ƒ}ð †:  ‹…   HUð‰D$(HM¨L‹ÎL‰t$ D‹ÇèÔÖÿÿE¨óEˆfsØf~À;EÀƒý  L‹}¨‹EL‰}€‰D$hAGfH~ÀEˆ;Ç3  HÁè ;ø'  H‹FHUˆL‹FHM D‹è@  ‹E E3äD‰d$d‰D$l…À„ø   E8MHEÈòEXòEèMØè2ÜÿÿH‹K0HƒÀHcQHÂH‰D$pèÜÿÿH‹K0HcQD‹<E…ÿ~:èÜÿÿL‹C0L‹àH‹D$pHcLáHMÈI‹ÔèI  …Àu0HƒD$pAÿÏE…ÿËD‹d$dHM è‰  AÿÄD‰d$dD;d$ltYé`ÿÿÿŠ…ø   L‹ÎH‹T$xM‹ÅˆD$XH‹ËŠD$`ˆD$PH‹E H‰D$H‹…   ‰D$@HEˆH‰D$8HEÈL‰d$0H‰D$(L‰t$ èÍöÿÿL‹}€M‹GHndÿÿA¶ƒáH¾„(… ŠŒ8… L+ÀA‹@üÓèM‰GA‰GA¶ƒáH¾„(… ŠŒ8… L+ÀA‹@üÓèM‰GA‰GA¶ƒáH¾„(… ŠŒ8… L+ÀA‹@üÓè‹L$hA‰G ÿÁM‰GI@A‹I‰GA‰W$‰L$h;MÀ‚þÿÿAö@tQI‹ÖH‹ÎèÛÑÿÿ„À„”   ë<ƒ}ð v6€½ø    …—   ‹…   L‹ÎL‰d$8M‹Å‰D$0I‹×‰|$(H‹ËL‰t$ è‘  è ìÿÿHƒx8 ubH‹MpH3Ìè²ÿÿHÄˆ  A_A^A]A\_^[]Ã²H‹ËèkÜÿÿHMˆè†  HŒ HMˆèàÿÿÌè`:  ÌèÊëÿÿH‰X èÁëÿÿL‰h(èH:  Ìèn:  ÌÌH‹ÄH‰X L‰@H‰PUVWATAUAVAWHhÁHìÀ   9  €I‹ñM‹øL‹ñtnèuëÿÿD‹eoH‹}gHƒx tu3ÉÿÖÓ  H‹ØèVëÿÿH9Xt_A>MOCàtVA>RCCàD‹mwtMH‹EL‹ÎH‹UOM‹ÇD‰d$8I‹ÎH‰D$0D‰l$(H‰|$ è$Îÿÿ…ÀtH‹œ$  HÄÀ   A_A^A]A\_^]ÃD‹mwH‹FH‰E¯H‰}§ƒ †:  D‰l$(HU§L‹ÎH‰|$ E‹ÄHMßèºÑÿÿEßóE·fsØf~À;E÷s—L‹MßD‹}¿L‰MGH‹E·H‹ HcPA‹ÇH€I‹ALŠA IcT ‰U×f~ÀEÇA;Ä¨   H‹EÇHÁè D;à—   H‹EÏH‹^HÁè HƒÃìH€HŠHÚƒ{ t-LckèHØÿÿIÅtE…ítè9ØÿÿHcKHÁë3À€x uMD‹mwö@uDH‹EL‹ÎL‹EWI‹ÎH‹UOÆD$X ÆD$PH‰D$HHEÇD‰l$@H‰D$8Hƒd$0 H‰\$(H‰|$ è‹òÿÿD‹mwAÿÇL‹MGD;}÷‚ÿÿÿé‘þÿÿèT8  ÌÌÌÌ@USVWATAUAVAWHl$ÈHì8  H‹Ü  H3ÄH‰E(9  €I‹ùH‹…¸   L‹êL‹µ    H‹ñH‰D$pL‰D$x„u  è;éÿÿD‹¥°   D‹½¨   Hƒx tZ3Éÿ–Ñ  H‹ØèéÿÿH9XtD>MOCàt<>RCCàt4H‹D$pL‹ÏL‹D$xI‹ÕD‰|$8H‹ÎH‰D$0D‰d$(L‰t$ è<Ìÿÿ…À…  L‹GHM I‹ÖèH
  ƒ}  †  D‰d$(HU L‹ÏL‰t$ E‹ÇHMèÕÐÿÿEóE€fsØf~À;E¨ƒ¯  L‹ELÇ_ÿÿ‹EˆL‰D$h‰D$`A@fH~ÀE€A;Çç   HÁè D;øÚ   H‹GHU€L‹GHM°D‹è7	  H‹EÀHM°H‰E¸è  H‹EÀHM°‹]°H‰E¸èþ  ƒëtHM°èð  Hƒëuñƒ}Ð t(èÖÿÿHcUÐHÂt…ÒtèõÕÿÿHcMÐHÁë3À€x uOöEÌ@uIH‹D$pL‹ÏL‹D$xI‹ÕÆD$X H‹ÎÆD$PH‰D$HHE€D‰d$@H‰D$8HEÈHƒd$0 H‰D$(L‰t$ èñÿÿL‹D$hL½^ÿÿI‹P¶
ƒáJ¾„	(… BŠŒ	8… H+Ð‹BüÓèI‰PA‰@¶
ƒáJ¾„	(… BŠŒ	8… H+Ð‹BüÓèI‰PA‰@¶
ƒáJ¾„	(… BŠŒ	8… H+Ð‹BüÓèA‰@ HBI‰P‹
A‰H$‹L$`ÿÁI‰@‰L$`;M¨‚hþÿÿH‹M(H3Ìè·¬ÿÿHÄ8  A_A^A]A\_^[]Ãèb5  ÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì 3ÛM‹ðH‹êH‹ù9Y„ð   Hcqè’ÔÿÿL‹ÈLÎ„Û   …ötHcwèyÔÿÿHëH‹Ë‹ó8Y„º   ö€t
öE …«   …ötèMÔÿÿH‹ðHcGHðëH‹óèMÔÿÿH‹ÈHcEHÈH;ñtK9_tè ÔÿÿH‹ðHcGHðëH‹óè ÔÿÿLcEIƒÀLÀHFL+À¶B¶ +ÊuHÿÀ…Òuí…Ét3Àë9°„E töt$AötötAötötA„t„t»   ‹Ãë¸   H‹\$0H‹l$8H‹t$@H‹|$HHƒÄ A^ÃÌÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì 3ÛM‹ðH‹êH‹ù9Y„õ   HcqèRÓÿÿL‹ÈLÎ„à   …ötHcwè9ÓÿÿHëH‹Ë‹ó8Y„¿   öG€t
öE …¯   …ötèÓÿÿH‹ðHcGHðëH‹óèÓÿÿH‹ÈHcEHÈH;ñtK9_tèßÒÿÿH‹ðHcGHðëH‹óèßÒÿÿLcEIƒÀLÀHFL+À¶B¶ +ÊuHÿÀ…Òuí…Ét3Àë=°„E töGt'AötöGtAötöGtA„t„Gt»   ‹Ãë¸   H‹\$0H‹l$8H‹t$@H‹|$HHƒÄ A^ÃÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒìPH‹ùI‹ñI‹ÈM‹ðH‹êèÏ  èîãÿÿH‹œ$€   ¹)  €º&  €ƒx@ u8?csmàt09uƒuH` “t9t‹%ÿÿÿ="“r
öC$…  öGf„Ž   ƒ{ „{  ƒ¼$ˆ    …m  öG t]9u7L‹F H‹ÖH‹ËèWåÿÿƒøÿŒk  ;Cb  D‹ÈH‹ÍH‹ÖL‹Ãèˆ  é,  9uD‹O8AƒùÿŒ:  D;K0  H‹O(ëÎL‹ÃH‹ÖH‹ÍèƒÈÿÿé÷   ƒ{ uB‹%ÿÿÿ=!“rƒ{  tèÑÿÿHcK HÁu ‹%ÿÿÿ="“‚½   ‹C$Áè¨„¯   ?csmàunƒrh "“v_H‹G0ƒx tUèÐÐÿÿH‹O0L‹ÐHcQLÒt@¶Œ$˜   L‹Î‹„$ˆ   M‹Æ‰L$8H‹ÕH‹Œ$   H‰L$0H‹Ï‰D$(I‹ÂH‰\$ ÿbÌ  ë>H‹„$   L‹ÎH‰D$8M‹Æ‹„$ˆ   H‹Õ‰D$0H‹ÏŠ„$˜   ˆD$(H‰\$ è‹ìÿÿ¸   H‹\$`H‹l$hH‹t$pH‹|$xHƒÄPA^Ãè¦0  ÌÌH‰\$H‰l$H‰t$WAVAWHì€   H‹ÙI‹éI‹ÈM‹øL‹òè•  è´áÿÿH‹¼$À   3öA¸)  €A¹&  €9p@u+;csmàt#D9uƒ{uH{` “tD9t	ö …ò  öCf„  9w„ß  HcWL=¨XÿÿHU¶
ƒáJ¾„9(… BŠŒ98… H+Ð‹BüÓè…À„©  9´$È   …œ  öC „±   D9ucL‹E H‹ÕH‹ÏèVãÿÿD‹ÈƒøÿŒ”  9wt'HcWHU¶
ƒáJ¾„9(… BŠŒ98… H+Ð‹rüÓîD;Î_  I‹ÎH‹ÕL‹Çè  é*  D9uDD‹K8AƒùÿŒ9  HcWHU¶
ƒáJ¾„9(… BŠŒ98… H+Ð‹BüÓèD;È	  H‹K(ë§L‹ÇH‹ÕI‹Îè+ÆÿÿéÎ   L‹EHL$PH‹×èÅ  9t$Pu	ö@„®   ;csmàumƒ{rg{ "“v^H‹C09ptUè=ÎÿÿH‹K0L‹ÐHcQLÒt@¶Œ$Ø   L‹Í‹„$È   M‹Ç‰L$8I‹ÖH‹Œ$Ð   H‰L$0H‹Ë‰D$(I‹ÂH‰|$ ÿÏÉ  ë>H‹„$Ð   L‹ÍH‰D$8M‹Ç‹„$È   I‹Ö‰D$0H‹ËŠ„$Ø   ˆD$(H‰|$ èÐîÿÿ¸   Lœ$€   I‹[ I‹k(I‹s0I‹ãA_A^_Ãè.  Ìé/ûÿÿÌÌÌHƒìXH‰d$HŠ„$˜   ˆD$8H‹„$   H‰D$0‹„$ˆ   ‰D$(H‹„$€   H‰D$ è&ýÿÿ‰D$@H	   H‹Ìèû  ‹D$@HƒÄXÃÌ@SHƒì 3ÀWÀˆAH‹ÙH‰AH‰A$A0L‰A@D‰IH9BtEHcRIÐLVÿÿH‰Q¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèH‹Ë‰H‰SH‰Sè  ë‰H‹ÃHƒÄ [ÃÌÌƒz L‹É„Á   HcRIÐL±UÿÿH‰Q¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèI‰QA‰I‰Q¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèI‰QA‰A¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèI‰QA‰A¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèA‰A HBI‰Q‹
I‰AA‰I$ëƒ! I‹ÁÃÌÌÌ@SHƒì H‹ÙH‹ÂH¡È  WÀH‰HSHHè7ÍÿÿH\Û  H‰H‹ÃHƒÄ [ÃHƒa HTÛ  H‰AH9Û  H‰H‹ÁÃÌÌ@SVWATAUAVAWHƒìpH‹ùE3ÿD‰|$ D!¼$°   L!|$(L!¼$È   èÝÿÿL‹h(L‰l$@èýÜÿÿH‹@ H‰„$À   H‹wPH‰´$¸   H‹GHH‰D$0H‹_@H‹G0H‰D$HL‹w(L‰t$PH‹Ëèš  è¹ÜÿÿH‰p è°ÜÿÿH‰X(è§ÜÿÿH‹P H‹R(HL$`è)ÊÿÿL‹àH‰D$8L9XtÇ„$°      èwÜÿÿH‹HpH‰Œ$È   A¸   I‹ÖH‹L$Hè`  H‹ØH‰D$(H‹¼$À   ëxÇD$    è9Üÿÿƒ`@ H‹´$¸   ƒ¼$°    t!²H‹Îè•ÌÿÿH‹„$È   LH D‹@‹P‹ëLN D‹F‹V‹ÿGÄ  D‹|$ H‹\$(L‹l$@H‹¼$À   L‹t$PL‹d$8I‹Ìè–ÉÿÿE…ÿu2>csmàu*ƒ~u$‹F - “ƒøwH‹N(èÌÿÿ…Àt
²H‹ÎèÌÿÿèŠÛÿÿH‰x èÛÿÿL‰h(H‹D$0HcHI‹HÇþÿÿÿH‹ÃHƒÄpA_A^A]A\_^[ÃÌÌH‹ÄSVWATAUAWHì¨   H‹ùE3äD‰d$ D!¤$ð   L!d$(L!d$@Dˆ`€D!`„D!`ˆD!`ŒD!`D!`”èÛÿÿH‹@(H‰D$8èùÚÿÿH‹@ H‰D$0H‹wPH‰´$ø   H‹_@H‹G0H‰D$PL‹(H‹GHH‰D$pH‹GhH‰D$x‹Gx‰„$è   ‹G8‰„$à   H‹Ëè  è ÚÿÿH‰p è—ÚÿÿH‰X(èŽÚÿÿH‹P H‹R(HŒ$ˆ   èÈÿÿL‹èH‰D$HL9gXtÇ„$ð      è[ÚÿÿH‹HpH‰L$@A¸   I‹×H‹L$Pè—  H‹ØH‰D$(Hƒø}H‹\ÄpH…Û„  H‰\$(I‹×H‹Ëè›  H‹|$8L‹|$0ë|ÇD$    èúÙÿÿƒ`@ èñÙÿÿ‹Œ$è   ‰HxH‹´$ø   ƒ¼$ð    t²H‹ÎèGÊÿÿH‹D$@LH D‹@‹P‹ëLN D‹F‹V‹ÿüÁ  D‹d$ H‹\$(H‹|$8L‹|$0L‹l$HI‹ÍèSÇÿÿE…äu2>csmàu*ƒ~u$‹F - “ƒøwH‹N(èJÊÿÿ…Àt
²H‹ÎèÈÉÿÿèGÙÿÿL‰x è>ÙÿÿH‰x(è5Ùÿÿ‹Œ$à   ‰Hxè&ÙÿÿÇ@xþÿÿÿH‹ÃHÄ¨   A_A]A\_^[ÃèÂ'  Ì3ÀLSPÿÿˆAWÀH‰AL‹ÁH‰A$A0H‹ADŠHPDˆIH‰QAöÁt'¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèA‰@I‰PAöÁt‹HƒÂI‰PA‰@ AöÁt'¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèA‰@$I‰P‹LRA‰@(±0AŠÁM‰P"ÁAöÁt@<uIc
IBI‰@I‰H0ÃD"ÉA€ù …¸   IcIRI‰PI‰@0HBHc
I‰@é•   <u0A¶
ƒáJ¾„(… BŠŒ8… L+ÐA‹@HA‹RüÓêÂM‰PI‰@0ÃD"ÉA€ù u\A¶
A‹PHƒáJ¾„(… BŠŒ8… L+ÐA‹BüÓèM‰PI‰H0A¶
ƒáJ¾„(… BŠŒ8… L+ÐA‹BüÓèM‰PI‰H8ÃH‰\$WHƒì L‹	I‹ØAƒ  A¸csmàE9uZAƒy¿   Aº “uA‹A A+ÂƒøwH‹B(I9A(‹DÏ‰E9u(Aƒyu!A‹I A+ÊƒùwIƒy0 uè ×ÿÿ‰x@‹Ç‰;ë3ÀH‹\$0HƒÄ _ÃÌÌH‰\$WHƒì A‹øM‹Áècÿÿÿ‹Ø…ÀuèÈÖÿÿ‰xx‹ÃH‹\$0HƒÄ _ÃD‰L$ L‰D$H‰L$SVWATAUAVAWHƒì0E‹áI‹ðH‹ÚL‹ùè­ÄÿÿL‹èH‰D$(L‹ÆH‹ÓI‹Ïè»×ÿÿ‹øèlÖÿÿÿ@0ƒÿÿ„ë   A;üŽâ   ƒÿÿŽ  ;~  Lc÷èaÄÿÿHcNJð‹<‰|$ èMÄÿÿHcNJðƒ| tè9ÄÿÿHcNJðHc\è'ÄÿÿHÃë3ÀH…ÀtYD‹ÇH‹ÖI‹Ïè…×ÿÿèÄÿÿHcNJðƒ| tèôÃÿÿHcNJðHc\èâÃÿÿHÃë3ÀA¸  I‹×H‹Èè®  I‹ÍèêÃÿÿëD‹¤$ˆ   H‹´$€   L‹|$pL‹l$(‹|$ ‰|$$éÿÿÿèpÕÿÿƒx0 ~èeÕÿÿÿH0ƒÿÿtA;ü$D‹ÇH‹ÖI‹ÏèæÖÿÿHƒÄ0A_A^A]A\_^[Ãèñ#  èë#  ÌÌH‹ÄSVWATAUAVAWHì   )p¸H‹tŒ H3ÄH‰„$à   E‹éI‹ØH‹òL‹áH‰L$pH‰L$`D‰L$HèÃÿÿH‰D$hH‹ÖH‹Ëè½Öÿÿ‹øLvHL‰t$xAƒ> tè»Ôÿÿƒxxþ…x  A‹>ƒïëè¤Ôÿÿƒxxþtè™Ôÿÿ‹xxè‘ÔÿÿÇ@xþÿÿÿè…Ôÿÿÿ@0HƒÆH‰´$€   ƒ{ t?HcSH¶
ƒáL´KÿÿJ¾„(… B¶Œ8… H+Ð‹BüÓè‰„$À   H‰”$È   ëƒ¤$À    H‹”$È   H„$À   H‰D$0H‰T$8H„$À   H‰D$PH‰T$XHD$PH‰D$ LL$0E‹Å‹×HŒ$À   èt  H„$À   H‰„$˜   H‹„$È   H‰„$    L‹|$8L;ø‚6  L;|$X†+  HT$8H‹L$0ès  L‰|$8H‹\$0s´$ˆ   (D$0f„$°   HT$8H‹ËèB  ‹CL+øL‰|$8HD$0H‰D$ D‹ÏL„$°   A‹ÕHL$Pè  ‹ø‰D$Dƒd$@ E3ÉfoÆfsØf~ÀfsÞf~ñ…ÉDEÈD‰L$@E…É„   GA‰AÿƒøvIcÉHA¸  I‹Ôèã  ë6H‹D$`H‹ƒùu‹„$”   L‹ëD‹„$”   LÂIcÉHA¹  è[	  H‹L$hèåÀÿÿë‹|$DL‹d$pL‹t$xH‹´$€   D‹l$HéœþÿÿèrÒÿÿƒx0 ~ègÒÿÿÿH0H‹Œ$à   H3ÌèL˜ÿÿ(´$ð   HÄ   A_A^A]A\_^[Ãèð   ÌÌÌH‰\$H‰l$H‰t$WHƒì H‹éI‹øI‹ÈH‹òèïÓÿÿLL$HL‹ÇH‹ÖH‹Í‹Øè¸ÿÿL‹ÇH‹ÖH‹ÍèXÓÿÿ;Ø~#D‹ÃHL$HH‹×èpÓÿÿD‹ËL‹ÇH‹ÖH‹ÍèkÓÿÿëL‹ÇH‹ÖH‹Íè#Óÿÿ‹ØH‹l$8‹ÃH‹\$0H‹t$@HƒÄ _ÃÌÌH‰\$H‰l$H‰t$ WATAUAVAWHƒì H‹êL‹éH…Ò„¼   E2ÿ3ö92Ž   è“¿ÿÿH‹ÐI‹E0Lc`IƒÄLâè|¿ÿÿH‹ÐI‹E0HcHD‹4
E…ö~THcÆH€H‰D$XèW¿ÿÿI‹]0H‹øIc$Høè0¿ÿÿH‹T$XL‹ÃHcMHH‹×HÈèMêÿÿ…ÀuAÿÎIƒÄE…ö½ëA·ÿÆ;u ŒqÿÿÿH‹\$PAŠÇH‹l$`H‹t$hHƒÄ A_A^A]A\_Ãèh  ÌÌÌÌH‰\$H‰l$H‰t$WHƒì 3íH‹ù9)~P3öè¨¾ÿÿHcOHÆƒ| tè•¾ÿÿHcOHÆHc\è„¾ÿÿHÃë3ÀHHHN’ èÙÈÿÿ…Àt!ÿÅHƒÆ;/|²2ÀH‹\$0H‹l$8H‹t$@HƒÄ _Ã°ëçL‹LnGÿÿL‹ÑL‹ÊA¶ƒáJ¾„(… BŠŒ8… L+ÀA‹@üÓè‹ÈL‰ƒáÁèA‰BA‰JAÿƒøvƒùuJH‹‹HƒÀH‰A‰JÃH‹‹HƒÀH‰A‰JH‹¶
ƒáJ¾„(… BŠŒ8… H+Ð‹BüÓèI‰A‰BÃH‹ÂI‹ÐHÿàÌÌÌI‹ÀL‹ÒH‹ÐE‹ÁIÿâÌL‹ÜI‰[M‰K ‰T$UVWATAUAVAWHƒì H‹A@2íE2öI‰C3ÿM‹áE‹èH‹ÙHpÿL‹þ99~CE‹cA;üuH‹ð@µA;ýuL‹øA¶@„ítE„öuHT$`H‹ËèÕþÿÿÿÇ;;}H‹D$`ëÆL‹d$xI‹$I‰t$ KHH‹„$€   H‹L‰xKH‹\$pIHƒÄ A_A^A]A\_^]ÃÌÌH‰\$H‰t$WHƒì0H‹|$`‹ÚI‹ðL‹ÑH‹WI;PwwH9QwqI‹@H‹ÊI+JH+ÂH;È}-AD$ I;RvKH‹L$ HT$(èþÿÿH‹D$(ÿÃH9Gwäë-A‹ÙD$ I9PvH‹L$ HT$(èìýÿÿH‹L$(ÿËH9Nwä‹ÃëƒÈÿH‹\$@H‹t$HHƒÄ0_Ã@SHƒì 3ÛHQ› E3ÀH›HÊº   èT  …ÀtÿZ› ÿÃƒûrÓ°ëè
   2ÀHƒÄ [ÃÌÌ@SHƒì ‹4› ëH› ÿËH›HÈÿ¶  ÿ› …Ûuß°HƒÄ [ÃÌÌÌÌÌÌÌff„     H‰L$H‰T$D‰D$IÇÁ “ëÌÌÌÌÌÌfÃÌÌÌÌÌÌf„     ÃÌÌÌH‹%·  H~ ÿÿH;Ât#eH‹%0   H‹‰˜   H;HrH;Hv¹   Í)ÃÌH‰\$H‰l$H‰t$WATAUAVAWHƒì ‹ùL=DÿÿIƒÎÿM‹áI‹èL‹êI‹„ÿÐV I;Æ„ë   H…À…ä   M;Á„Ñ   ‹u I‹œ÷¸V H…ÛtI;Þ…™   ëkM‹¼÷˜” 3ÒI‹ÏA¸   ÿ)µ  H‹ØH…ÀuVÿ»´  ƒøWu-DCI‹ÏHàØ  èc  …ÀtE3À3ÒI‹Ïÿñ´  H‹ØH…ÀuI‹ÆL=oCÿÿI‡„÷¸V HƒÅI;ìégÿÿÿH‹ÃL=QCÿÿI‡„÷¸V H…Àt	H‹Ëÿ£´  I‹ÕH‹Ëÿ´  H…ÀtH‹ÈI‡ŒÿÐV ë
M‡´ÿÐV 3ÀH‹\$PH‹l$XH‹t$`HƒÄ A_A^A]A\_ÃÌÌ@SHƒì H‹ÙLDØ  3ÉL3Ø  H4Ø  è‹þÿÿH…ÀtH‹ËHƒÄ [Hÿ%{µ  HƒÄ [Hÿ%÷³  ÌÌÌ@SHƒì ‹ÙLØ  ¹   LØ  HØ  èAþÿÿ‹ËH…ÀtHƒÄ [Hÿ%2µ  HƒÄ [Hÿ%Æ³  ÌÌ@SHƒì ‹ÙLÝ×  ¹   LÉ×  HÊ×  èùýÿÿ‹ËH…ÀtHƒÄ [Hÿ%ê´  HƒÄ [Hÿ%n³  ÌÌH‰\$WHƒì H‹ÚL¨×  ‹ùHŸ×  ¹   L‹×  èªýÿÿH‹Ó‹ÏH…Àtÿž´  ëÿ.³  H‹\$0HƒÄ _ÃÌÌÌH‰\$H‰t$WHƒì A‹ðLg×  ‹ÚLV×  H‹ùHT×  ¹   èNýÿÿ‹ÓH‹ÏH…ÀtD‹Æÿ?´  ëÿ·²  H‹\$0H‹t$8HƒÄ _ÃÌÌÌÌÌÌÌÌÌÌÌÌÌff„     Hƒì(H‰L$0H‰T$8D‰D$@H‹H‹Áè‚üÿÿÿÐè«üÿÿH‹ÈH‹T$8H‹A¸   èeüÿÿHƒÄ(ÃÌÌÌÌÌÌff„     Hƒì(H‰L$0H‰T$8D‰D$@H‹H‹Áè2üÿÿÿÐè[üÿÿHƒÄ(ÃÌÌÌÌÌÌHƒì(H‰L$0H‰T$8H‹T$8H‹A¸   èÿûÿÿHƒÄ(ÃÌÌÌÌÌÌ@ Hƒì(H‰L$0H‰T$8L‰D$@D‰L$HE‹ÁH‹ÁèÍûÿÿH‹L$@ÿÐèñûÿÿH‹ÈH‹T$8A¸   è®ûÿÿHƒÄ(ÃÌH‰T$H‰L$Hƒì(E3ÉE3ÀH‹T$8H‹L$0ÿ¬±  HƒÄ(ÃÌÌÌH‰\$H‰t$WHƒì ÆA H‹ùHqH…Òtëƒ=™˜  uÐ‚ óëNè™  H‰H‹ÖH‹ˆ   H‰H‹ˆˆ   H‰OH‹ÈèÖ"  H‹HWè6#  H‹‹¨  ¨uƒÈ‰¨  ÆGH‹\$0H‹ÇH‹t$8HƒÄ _ÃÌL‹ÚL‹ÑE¶IÿÂA¶A@¿ƒøEH B¿EGÈJ IÿÃƒøA‹ÁGÊ+ÁuE…ÉuËÃHƒì(ƒ=á—  u-H…Éuè  Ç    èš  ¸ÿÿÿHƒÄ(ÃH…ÒtáHƒÄ(éŠÿÿÿE3ÀHƒÄ(é   ÌÌH‰\$WHƒì@H‹ÚH‹ùH…ÉuèÂ  Ç    èO  ¸ÿÿÿëQH…ÒtäI‹ÐHL$ è¢þÿÿH‹D$(L‹€  ¶HÿÇB¶ ¶HÿÃB¶ ‹Â+Áu…Òuà€|$8 tH‹L$ ƒ¡¨  ýH‹\$PHƒÄ@_ÃH‰\$WHƒì Hƒ9 H‹ùu@ÿ{¯  € ‰D$0uHƒg 3ÒÆGëH‹WHL$0è2   ‹L$0H‹ØH‰ÿN¯  H…ÛtH‹H‹\$8HƒÄ _Ãè‚  ÌÌH‰\$H‰t$WHƒì H‹13ÿH‹ÙH…öu;ÿ
¯  ‰D$0@8{u
H‰{ÆCëH‹{H‹×HL$0èÁ  ‹L$0H‹ðH‰ÿÝ®  H‹\$8H‹ÆH‹t$@HƒÄ _ÃÌÌH‰\$H‰t$WHƒì 3ÛH‹úH‹ñ8Zuÿž®  ‹ÈH‰_ÆGÿ–®  ëH‹ZHÞH‹\$0H‹t$8HƒÄ _ÃH‰\$H‰t$UWAVH¬$ûÿÿHìð  H‹P} H3ÄH‰…à  A‹ø‹ò‹Ùƒùÿtèá—ÿÿ3ÒHL$pA¸˜   èÃºÿÿ3ÒHMA¸Ð  è²ºÿÿHD$pH‰D$HHMHEH‰D$Pÿ­  L‹µ  HT$@I‹ÎE3Àÿý¬  H…Àt6Hƒd$8 HL$XH‹T$@L‹ÈH‰L$0M‹ÆHL$`H‰L$(HMH‰L$ 3ÉÿÊ¬  H‹…  H‰…  H…  HƒÀ‰t$pH‰…¨   H‹…  H‰E€‰|$tÿÁ¬  3É‹øÿ—¬  HL$Hÿ„¬  …Àu…ÿuƒûÿt‹Ëèì–ÿÿH‹à  H3ÌèÁŠÿÿLœ$ð  I‹[(I‹s0I‹ãA^_]ÃÌH‰“ ÃH‰\$UH‹ìHƒìpHƒeÀ ƒ=”  ÆEÐ ÆEè ÆEð ÆEø u¦~ ÆEèóEØHEÀH‰D$(H‹E0H‰D$ èJ   €}èuH‹EÀƒ ¨  ý€}ð t‹]ìHMÀèýÿÿ‰X €}ø t‹]ôHMÀèòüÿÿ‰X$H‹œ$€   HƒÄp]ÃÌH‰\$H‰l$H‰t$WHƒì0H‹éA‹ÙH‹L$hI‹øH‹òèýÿÿH…ÀtGH‹€¸  H…Àt;Iºp*W4H¼ÖH‹L$`H‹ÖH‰L$ L‹ÇH‹ÍD‹ËÿË­  H‹\$@H‹l$HH‹t$PHƒÄ0_ÃH‹T$hHâ‘ è-ýÿÿL‹H‹ãz L3Ø‹Èƒá?IÓËM…ÛtIºp*W4H¼ÖI‹Ãë•H‹D$`D‹ËL‹ÇH‰D$ H‹ÖH‹ÍèQ   ÌHƒì8Hƒd$  E3ÉE3À3Ò3ÉèþÿÿHƒÄ8ÃÌÌHƒì8Hƒd$  E3ÉE3À3Ò3Éè_þÿÿHƒd$  E3ÉE3À3Ò3Éè   ÌÌHƒì(¹   ÿ™ª  …Àt¹   Í)A¸   º ÀAHè¶üÿÿÿdª  H‹Èº ÀHƒÄ(Hÿ%Yª  ÌH‰‘ ÃH‰\$WHƒì H‹ùè.   3ÛH…ÀtIºp ÓßíÑH‹Ïÿ”¬  …À•Ã‹ÃH‹\$0HƒÄ _ÃÌÌ@SHƒì 3Éèƒ  H‹³y ‹Èƒá?H‹Ÿ H3ØHÓË3Éè¶  H‹ÃHƒÄ [ÃÌéÃ  ÌÌÌ¸csmà;Èt3ÀÃ‹Èé   ÌH‰\$H‰l$H‰t$WHƒì H‹ò‹ùèj  E3ÉH‹ØH…ÀtH‹H‹ÁLÀ   I;Èt98t HƒÀI;Àuó3ÀH‹\$0H‹l$8H‹t$@HƒÄ _ÃH…ÀtäL‹@M…ÀtÛIƒøu
L‰HA@üëÍIƒøuƒÈÿëÂH‹kH‰sƒx…Ä   HƒÁ0H‘   ëL‰IHƒÁH;Êuó8  À‹{tz8Ž  Àtk8  Àt\8  ÀtM8‘  Àt>8’  Àt/8“  Àt 8´ Àt8µ À‹×u@º   ë6ºŽ   ë/º…   ë(ºŠ   ë!º„   ëº   ëº†   ëºƒ   ëº‚   ‰SIºp3Ó0Oœ‹¹   I‹ÀÿÓª  ‰{ëL‰HIºps×PI†ÁÆ‹HI‹Àÿ´ª  H‰kéÿÿÿÌÌÌH‰\$L‰L$ WHƒì I‹ÙI‹ø‹
èœ  H‹Ïè   ‹èß  H‹\$0HƒÄ _Ã@SHƒì0H‹Ù€=¸Ž  …©   ¸   ‡—Ž H‹‹…Éu>H‹‡w H‹ˆŽ H;Ðt"‹Èƒá?H3ÂHÓÈIºp(ÙxE.™E3À3Ò3Éÿª  Hš ëƒùuH¤ èc  H‹ƒ8 uHoª  HHª  è«  Hlª  H]ª  è˜  H‹Cƒ8 uÆŽ H‹CÆ HƒÄ0[Ãè  ÌD‰D$‰T$UH‹ìHƒìPHÇEàþÿÿÿH‰\$`‹ÙE…ÀuJ3Éÿ'§  H…Àt=¹MZ  f9u3HcH<HÈ9PE  u$¸  f9Auƒ¹„   vƒ¹ø    t‹Ëè±   ÆE( HEH‰EèHE H‰EðHE(H‰Eø¸   ‰EÔ‰EØLMÔLEèHUØHMÐèQþÿÿƒ}  tH‹\$`HƒÄP]Ã‹Ëè   ÌÌÌÌ@SHƒì ‹Ùè'   „ÀtÿM¦  H‹È‹ÓÿJ¦  ‹Ëè/   ‹Ëÿc§  ÌÌÌHƒì(è³  ƒøtèu  „À”Àë2ÀHƒÄ(ÃÌÌÌ@SHƒì0HÇD$ þÿÿÿ‹ÙHƒd$H LD$HH¡Ì  3Éÿ§  H‹L$H…Àt)H¡Ì  ÿc¦  H…ÀtIºp{Z^›‡¢‹Ëÿ,¨  H‹L$HH…Étÿ¼¦  HƒÄ0[ÃÌH‰]Œ Ã3Ò3ÉDBé[þÿÿÌÌÌE3ÀAPéLþÿÿ‹2Œ ÃH‰\$H‰l$H‰t$WATAUAVAWHƒì L‹d$pM‹éI‹ØL‹òH‹ùIƒ$$ IÇ   H…ÒtH‰IƒÆ@2í€?"L‹ÿu@„í@¶"@”ÅHÿÇë:Iÿ$H…ÛtŠˆHÿÃ¾7HÿÇ‹Îèˆ3  …ÀtIÿ$H…ÛtŠˆHÿÃI@„öt@„íuª@€þ t@€þ	užH…Ût	ÆCÿ ëHÿÏ@2öŠ„À„Ö   < t<	uHÿÇŠëñ„À„¿   M…ötI‰IƒÆIÿE º   3ÀëHÿÇÿÀŠ€ù\tô€ù"u1„Âu@„öt
8OuHÿÇë	3Ò@„ö@”ÆÑèëÿÈH…ÛtÆ\HÿÃIÿ$…ÀuëŠ„ÀtF@„öu< t=<	t9…Òt-H…ÛtˆHÿÃ¾è 2  …ÀtIÿ$HÿÇH…ÛtŠˆHÿÃIÿ$HÿÇéeÿÿÿH…ÛtÆ HÿÃIÿ$é ÿÿÿM…ötIƒ& IÿE H‹\$PH‹l$XH‹t$`HƒÄ A_A^A]A\_ÃÌÌÌ@SHƒì H¸ÿÿÿÿÿÿÿL‹ÊH;Ès=3ÒHƒÈÿI÷ðL;Ès/HÁáM¯ÈH‹ÁH÷ÐI;ÁvIÉº   è  3ÉH‹ØèŒ  H‹Ãë3ÀHƒÄ [ÃÌÌÌH‰\$UVWAVAWH‹ìHƒì03ÿD‹ñ…É„S  Aÿƒøvè›  _‰è)øÿÿ‹ûé5  èé-  HÞ‰ A¸  H‹Ó3Éè¶$  H‹5¿ H‰˜ H…öt@8>uH‹óHEHH‰}@LM@H‰D$ E3ÀH‰}H3ÒH‹ÎèAýÿÿL‹}@A¸   H‹UHI‹ÏèóþÿÿH‹ØH…Àuè  »   3É‰è´  éjÿÿÿNøH‹ÓHEHH‹ÎLM@H‰D$ èïüÿÿAƒþu‹E@ÿÈH‰ ‰ 3ÉëiHU8H‰}8H‹Ëè×"  ‹ð…ÀtH‹M8èX  H‹ËH‰}8èL  ‹þë?H‹U8H‹ÏH‹ÂH9:tH@HÿÁH98uô‰³Œ 3ÉH‰}8H‰®Œ è  H‹ËH‰}8è	  H‹\$`‹ÇHƒÄ0A_A^_^]ÃÌÌH‰\$WHƒì 3ÿH9=•‰ t3ÀëOè†,  èÝ1  H‹ØH…Àu3ÉèÂ  ƒÈÿë1H‹Ëè5   H…ÀuƒÏÿëH‰p‰ H‰Q‰ 3Éè–  H‹ËèŽ  ‹ÇH‹\$0HƒÄ _ÃÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì0H‹ñ3ÉL‹ÆŠë%€ú=HAHDÁH‹ÈHƒÈÿHÿÀA€<  uöIÿÀLÀAŠ„Òu×HÿÁº   è­  H‹ØH…Àu3Éè  3ÀërL‹óŠ„Àt_HƒÍÿHÿÅ€<. u÷HÿÅ<=t5º   H‹Íèp  H‹øH…Àt%L‹ÆH‹ÕH‹Èè¦	  3É…ÀuGI‰>IƒÆèÀ  Hõë¬H‹ËèC   3Éè¬  ë3Éè£  H‹ÃH‹\$@H‹l$HH‹t$PH‹|$XHƒÄ0A^ÃHƒd$  E3ÉE3À3Òè¦õÿÿÌÌH…Ét;H‰\$WHƒì H‹H‹ÙH‹ùëH‹ÈèN  HH‹H…ÀuìH‹Ëè:  H‹\$0HƒÄ _ÃÌÌÌHƒì(H‹	H;ê‡ tè§ÿÿÿHƒÄ(ÃÌÌHƒì(H‹	H;Æ‡ tè‹ÿÿÿHƒÄ(ÃÌÌHƒì8HÇD$ þÿÿÿH”‡ è¯ÿÿÿH‡ è¾ÿÿÿH‹’‡ èQÿÿÿH‹~‡ HƒÄ8éAÿÿÿÌé·ýÿÿÌÌÌH‰\$L‰L$ WHƒì I‹ÙI‹ø‹
èà  H‹ÏèS   ‹ø‹è"  ‹ÇH‹\$0HƒÄ _ÃÌH‰\$L‰L$ WHƒì I‹ÙI‹ø‹
è¤  H‹ÏèÇ  ‹ø‹èæ  ‹ÇH‹\$0HƒÄ _ÃÌH‰\$H‰l$H‰t$WAVAWHƒì H‹3íL‹ùH‹H…Ò„h  L‹‰n A‹ÊI‹òH32ƒá?M‹ÊHÓÎL3JI‹ÚH3ZIÓÉHÓËL;Ë…§   H+Þ¸   HÁûH;ØH‹ûHGøE HûHDøH;ûrDEH‹×H‹Îè¹/  3ÉL‹ðè“  M…öu(H{A¸   H‹×H‹Îè•/  3ÉL‹ðèo  M…ö„Ê   L‹ëm MÞIþI‹öH‹ËI+ÉHƒÁHÁéL;ËHGÍH…ÉtI‹ÂI‹ùóH«L‹¶m A¸@   IyA‹ÈA‹Âƒà?+ÈI‹GH‹A‹ÀHÓÊI3ÒI‰H‹‡m ‹Êƒá?+ÁŠÈI‹HÓÎH3òH‹H‰1A‹ÈH‹em ‹Âƒà?+ÈI‹HÓÏH3úH‹H‰zH‹Gm ‹Âƒà?D+ÀI‹AŠÈHÓËH3ÚH‹3ÀH‰YëƒÈÿH‹\$@H‹l$HH‹t$PHƒÄ A_A^_ÃH‰\$H‰l$H‰t$WAVAWHƒì H‹H‹ñH‹H…ÒuƒÈÿéÙ   L‹×l A‹ÈI‹øH3:ƒá?HÓÏI‹ØH3ZHÓËHGÿHƒøý‡©   A‹ÈM‹ðƒá?L‹ÿH‹ëHƒëH;ßr_H‹I;ÆtïI3ÀL‰3HÓÈIºpHÚV–>ñ…ÿ/Ÿ  L‹pl H‹A‹Èƒá?M‹ÈH‹I‹ÀL3
H3BIÓÉHÓÈM;ÏuH;Åt¦M‹ùI‹ùH‹èH‹Øë˜HƒÿÿtH‹ÏèŸ  L‹$l H‹H‹L‰H‹H‹L‰AH‹H‹L‰A3ÀH‹\$@H‹l$HH‹t$PHƒÄ A_A^_ÃH‹ÑH*„ ém   ÌL‹ÜI‰KHƒì8IÇCðþÿÿÿICI‰Cè¸   ‰D$P‰D$XMKMCèIS IKè§üÿÿHƒÄ8ÃÌH…ÉuƒÈÿÃH‹AH9uH‹k H‰H‰AH‰A3ÀÃÌH‰T$H‰L$UH‹ìHƒì@HEH‰EèLM(HEH‰EðLEè¸   HUàHM ‰E(‰EàèúûÿÿHƒÄ@]ÃH‘l H‰ªƒ °ÃÌÌÌHƒì(HQƒ èlÿÿÿH]ƒ è`ÿÿÿ°HƒÄ(ÃÌ°ÃÌHƒì(ècûÿÿ°HƒÄ(Ã@SHƒì H‹Ïj H‹Ëè¯îÿÿH‹Ëè¯ðÿÿH‹Ëèk5  H‹Ëè8  H‹ËèKõÿÿ°HƒÄ [ÃÌÌÌ3Éé5¥ÿÿÌ@SHƒì H‹o… ƒÈÿðÁƒøuH‹\… HMm H;Ëtè×  H‰D… °HƒÄ [ÃHƒì(H‹Y‹ è¸  H‹U‹ Hƒ%E‹  è¤  H‹1… Hƒ%9‹  è  H‹%… Hƒ%…  è|  Hƒ%…  °HƒÄ(ÃÌHaÂ  HZÁ  éE3  ÌHƒì(èï
  H…À•ÀHƒÄ(ÃHƒì(è	  °HƒÄ(ÃHƒì(„ÉtHƒ=0‚  tè:  °HƒÄ(ÃHÂ  HÁ  HƒÄ(é3  ÌÌÌHƒì(èW  °HƒÄ(ÃH;Êt;H‰\$WHƒì H‹úH‹ÙH‹H…ÀtIºpHÚV–>ñ…ÿœ  HƒÃH;ßußH‹\$0HƒÄ _ÃÌÌÌH‰\$WHƒì H‹úH‹ÙH;Êt%H‹H…ÀtIºp0R^G'Óÿ¿›  …ÀuHƒÃH;ßëÙ3ÀH‹\$0HƒÄ _ÃÌÇD$    ‹D$éO  ÌÌÌHƒì(èk  H‹@H…ÀtIºpHÚV–>ñ…ÿn›  ë è   ÌÌHƒì(è'3  H…Àt
¹   èh3  öÍh t*¹   ÿÐ˜  …Àt¹   Í)A¸   º  @AHèíêÿÿ¹   èóÿÿÌÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì ‹­€ 3Û¿   …Àu¸   ë;ÇLÇHcÈº   ‰ˆ€ è  3ÉH‰‚€ èq  H9v€ u/º   ‰=a€ H‹ÏèÝ  3ÉH‰X€ èG  H9L€ uƒÈÿëuH‹ëH5#h L5h IN0E3Àº   èC,  H‹€ Lu„ H‹ÕHÁúL‰4H‹Åƒà?HÀI‹ÐH‹LÈ(HƒÁHƒùwÇþÿÿÿHÿÅIƒÆXHƒÃHƒÆXHƒïuž3ÀH‹\$0H‹l$8H‹t$@H‹|$HHƒÄ A^ÃÌ@SHƒì è8  è 8  3ÛH‹› H‹èÂ8  H‹‹ H‹HƒÁ0ÿ%˜  HƒÃHƒûuÑH‹l è[  Hƒ%_  HƒÄ [ÃÌHƒÁ0Hÿ%å—  ÌHƒÁ0Hÿ%á—  Ìé·  ÌÌÌ@SHƒì 3ÛH…ÉtH…ÒtM…ÀuˆèZ  »   ‰èæëÿÿ‹ÃHƒÄ [ÃL‹ÉL+ÁCŠAˆIÿÁ„ÀtäHƒêuìH…ÒuÙˆè   »"   ëÄÌÌÌÌÌÌÌÌÌH‰\$H‰t$WHƒì H‹ùè¥çÿÿHWH‹ÈH‹ðL‹€   L‰L‹€ˆ   L‰G L‹GèA	  L‹GHW H‹Îè	  ‹†¨  ¨uƒÈ‰†¨  ÆG(H‹\$0H‹t$8HƒÄ _ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌff„     H+ÑM…Àtj÷Á   t¶:
u]HÿÁIÿÈtR„ÀtNH÷Á   uãI»€€€€€€€€Iºÿþþþþþþþ
%ÿ  =ø  wÀH‹H;
u·HƒÁIƒèvMH÷ÐI#ÁI…ÃtÏ3ÀÃHÀHƒÈÃÌÌÌM…Àu3ÀÃ·f…Àtf;uHƒÁHƒÂIƒèuå··
+ÁÃ3ÀL{½  I‹ÑD@;
t+ÿÀIÐƒø-ròAíƒøw¸   ÃÁDÿÿÿ¸   ƒùAFÀÃA‹DÁÃÌÌÌ@SHƒì ‹ÙèÓ  H…Àu	Hf ëHƒÀ$‹Ë‰èÿÿÿ‹Øè±  Höe H…ÀtHH ‰HƒÄ [ÃÌ@SHƒì H‹ÚÆB8‰J4è[ÿÿÿ‰C,ÆC0HƒÄ [ÃÌÌHƒì(èk  H…Àu	H¯e ëHƒÀ$HƒÄ(ÃHƒì(èK  H…Àu	H‹e ëHƒÀ HƒÄ(ÃH‰\$L‰L$ WHƒì I‹ÙI‹ø‹
èÌ  H‹H‹H‹ˆ   ðÿ ‹è	  H‹\$0HƒÄ _ÃÌH‰\$L‰L$ WHƒì I‹ÙI‹ø‹
èŒ  H‹3ÒH‹	è¦  ‹èÊ  H‹\$0HƒÄ _ÃÌÌÌH‰\$L‰L$ WHƒì I‹ÙI‹ø‹
èL  H‹GH‹H‹H‹H‹	è^  ‹è‚  H‹\$0HƒÄ _ÃÌÌÌH‰\$L‰L$ WHƒì I‹ÙI‹ø‹
è  H‹H‹H‹‰ˆ   H…ÉtƒÈÿðÁƒøuHöe H;Ètè€	  ‹è   H‹\$0HƒÄ _ÃÌ@UH‹ìHƒìPH‰MØHEØH‰EèLM º   LEè¸   ‰E ‰E(HEØH‰EðHEàH‰Eø¸   ‰EÐ‰EÔH9{ H‰Eà‰Q(Hk¸  H‹EØH‰Hme H‹EØ‰¨  H‹EØH‰ˆˆ   JBH‹EØHU(f‰ˆ¼   H‹EØf‰ˆÂ  HMH‹EØHƒ     è&þÿÿLMÐLEðHUÔHMè‘þÿÿHƒÄP]ÃÌÌÌH…ÉtSHƒì H‹Ùè   H‹Ëè‚  HƒÄ [Ã@UH‹ìHƒì@HEèH‰MèH‰EðH¼·  ¸   ‰E ‰E(HEèH‰Eø¸   ‰Eà‰EäH‹H;ÂtH‹Èè2  H‹MèH‹Ipè%  H‹MèH‹IXè  H‹MèH‹I`è  H‹MèH‹Ihèþ  H‹MèH‹IHèñ  H‹MèH‹IPèä  H‹MèH‹Ixè×  H‹MèH‹‰€   èÇ  H‹MèH‹‰À  è·  LM LEðHU(HMèÖýÿÿLMàLEøHUäHMè9ýÿÿHƒÄ@]ÃÌÌÌH‰\$WHƒì H‹ùH‹ÚH‹‰   H…Ét,è7  H‹   H;qy tHHb H;Ètƒy uèè4  H‰Ÿ   H…ÛtH‹ËèH4  H‹\$0HƒÄ _ÃÌ@SHƒì ‹b ƒùÿt*è"%  H‹ØH…Àt‹ìa 3Òè%  H‹ËèmþÿÿH‹Ëèá  HƒÄ [ÃÌÌÌH‰\$H‰t$WHƒì ÿO‘  ‹±a 3ö‹ØƒùÿtèË$  H‹øH…Àt
HƒøÿHDþër‹‹a HƒÊÿè²$  …ÀuH‹þëZºÈ  ¹   èþ  ‹da H‹øH…Àu3Òè…$  3ÉèZ  ëÎH‹×èt$  …Àu‹:a 3Òèc$  H‹ÏëÛH‹ÏèÆüÿÿ3Éè+  ‹Ëÿ·  H…ÿtH‹\$0H‹ÇH‹t$8HƒÄ _ÃèæöÿÿÌÌ@SHƒì ‹ì` ƒùÿtè
$  H‹ØH…ÀtHƒøÿtxëm‹Ì` HƒÊÿèó#  …ÀtcºÈ  ¹   èD  ‹ª` H‹ØH…Àu3ÒèË#  3Éè   ë6H‹Óèº#  …Àu‹€` 3Òè©#  H‹ËëÛH‹Ëèüÿÿ3Éèq  H‹ÃHƒÄ [ÃèCöÿÿÌÌÌH‰\$H‰t$WHƒì ÿ×  ‹9` 3ö‹ØƒùÿtèS#  H‹øH…Àt
HƒøÿHDþër‹` HƒÊÿè:#  …ÀuH‹þëZºÈ  ¹   è†  ‹ì_ H‹øH…Àu3Òè#  3Éèâ  ëÎH‹×èü"  …Àu‹Â_ 3Òèë"  H‹ÏëÛH‹ÏèNûÿÿ3Éè³  ‹Ëÿ?  H‹\$0H‹ÇH‹t$8HƒÄ _ÃH‰\$H‰t$WHƒì ‹w_ 3ÛH‹òƒùÿtè"  H‹øH…ÀtHƒøÿtyëm‹R_ HƒÊÿèy"  …ÀtdºÈ  ¹   èÊ  ‹0_ H‹øH…Àu3ÒèQ"  3Éè&  ë7H‹×è@"  …Àu‹_ 3Òè/"  H‹ÏëÛH‹Ïè’úÿÿ3Éè÷  HiÞÈ  HßH‹t$8H‹ÃH‹\$0HƒÄ _ÃÌÌHƒì(H1ûÿÿèÔ!  ‰¶^ ƒøÿu2ÀëèTþÿÿH…Àu	3Éè   ëé°HƒÄ(ÃÌÌÌHƒì(‹†^ ƒùÿtèœ!  ƒu^ ÿ°HƒÄ(ÃÌÌ@SHƒì H‹‡u H‹ÚH9t‹¨  …e uè¤3  H‰HƒÄ [ÃÌÌÌ@SHƒì HSu H‹ÚJ‹ÀH9t‹¨  …Ëd uèl3  H‰HƒÄ [ÃÌÌÌ@SHƒì H‹sw H‹ÚH9t‹¨  …—d uèô  H‰HƒÄ [ÃÌÌÌ@SHƒì H?w H‹ÚJ‹ÀH9t‹¨  …_d uè¼  H‰HƒÄ [ÃÌÌÌH‰\$H‰t$L‰L$ WHƒì0I‹ù‹
èÖ   H–t H5o] H‰\$ H‹t H;ØtH93tH‹ÖH‹Ëè3  H‰HƒÃëÖ‹èê   H‹\$@H‹t$HHƒÄ0_ÃÌÌ¸   ‡9t ÃL‹ÜHƒì(¸   MKMC‰D$8IS‰D$@IKè[ÿÿÿHƒÄ(ÃÌÌ@SHƒì 3ÛHt E3ÀH›HÊº   èü  …Àtÿ"v ÿÃƒûrÓ°ë	3Éè$   2ÀHƒÄ [ÃHcÁH€HÊs HÈHÿ%7Œ  ÌÌÌ@SHƒì ‹àu ëH§s ÿËH›HÈÿŒ  ÿÁu …Ûuß°HƒÄ [ÃÌHcÁH€Hvs HÈHÿ%ë‹  ÌÌÌ@SHƒì H‹ÙHƒùàw<H…É¸   HDØëèŠ6  …Àt%H‹Ëè’àÿÿ…ÀtH‹gw L‹Ã3ÒÿŒ  H…ÀtÔëè8öÿÿÇ    3ÀHƒÄ [ÃÌÌeH‹%0   H‹H`‹¼   Áè$ÃÌÌÌeH‹%0   H‹H`H‹A ‹@ÁèÃ@SHƒì 3Û‰\$0è×ÿÿÿ„Àu
HL$0èù  ƒ|$0•Ã‹ÃHƒÄ [ÃÌ@SHƒì L‹ÂH‹ÙH…Ét3ÒHBàH÷óI;ÀrCI¯Ø¸   H…ÛHDØëè²5  …Àt(H‹Ëèºßÿÿ…ÀtH‹v L‹Ãº   ÿ1‹  H…ÀtÑëè]õÿÿÇ    3ÀHƒÄ [ÃÌÌÌH…Ét6SHƒì L‹Á3ÒH‹Nv ÿ ‹  …ÀuÿfŠ  ‹ÈèKôÿÿ‹Øèõÿÿ‰HƒÄ [ÃH;ÊsƒÈÿÃ3ÀH;Ê—ÀÃÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì0E3öA‹éH‹ÚH‹ùH…Éu$D8r(tH‹JèwÿÿÿDˆs(L‰sL‰sL‰s é  D81uUL9ruED8r(tH‹JèHÿÿÿDˆs(¹   èþýÿÿH‰CI‹ÖH÷ØÀ÷Ðƒà”Â…À”ÁˆK(H‰S…À…À   H‹CfD‰0ëAƒÉÿD‰t$(L‹ÇL‰t$ ‹ÍAQ
èˆ  Hcð…Àuÿk‰  ‹Èè˜óÿÿèôÿÿ‹ ë}H‹SH;òvAD8s(tH‹Kè·þÿÿDˆs(H6ènýÿÿH‰CI‹ÖH÷ØÀ÷ÐƒàHDÖ…À”ÁˆK(H‰S…Àu3H‹CAƒÉÿ‰T$(L‹Ç‹ÍH‰D$ AQ
è  H˜H…À„vÿÿÿHÿÈH‰C 3ÀH‹\$@H‹l$HH‹t$PH‹|$XHƒÄ0A^ÃÌÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì@E3öA‹éH‹ÚH‹ùH…Éu$D8r(tH‹JèûýÿÿDˆs(L‰sL‰sL‰s é   fD91uTL9ruED8r(tH‹JèËýÿÿDˆs(¹   èüÿÿH‰CI‹ÖH÷ØÀ÷Ðƒà”Â…À”ÁˆK(H‰S…À…Ñ   H‹CDˆ0ëL‰t$8AƒÉÿL‰t$0L‹ÇD‰t$(3Ò‹ÍL‰t$ è”  Hcð…Àuÿç‡  ‹Èèòÿÿè›òÿÿ‹ é„   H‹SH;òv@D8s(tH‹Kè0ýÿÿDˆs(H‹ÎèèûÿÿH‰CI‹ÖH÷ØÀ÷ÐƒàHDÖ…À”ÁˆK(H‰S…Àu;H‹CAƒÉÿL‰t$8L‹ÇL‰t$0‹Í‰T$(3ÒH‰D$ è  H˜H…À„lÿÿÿHÿÈH‰C 3ÀH‹\$PH‹l$XH‹t$`H‹|$hHƒÄ@A^ÃÌH‰\$UVWATAUAVAWH‹ìHƒìPE3ÿL‹êH‹ÙH…ÒuèÊñÿÿA]‰èWÛÿÿ‹Ãé×  WÀL‰:H‹óEàL‰}ðH…À„   HUHfÇEH*?H‹ÈDˆ}JèW7  H‹H…Àu<LMàE3À3ÒèÁ  ‹ð…Àt:H‹}àH‹ßH;}è„Ý   H‹èüÿÿHƒÃH;]èuîéÆ   LEàH‹Ðè  ‹ð…Àu	HƒÃH‹ë‚H‹}àH‹ßH;}è„š   H‹èÃûÿÿHƒÃH;]èuîéƒ   H‹}àIƒÌÿH‹uèI‹×L‹öH‰UPL+÷H‹ÇIÁþIÿÆH;þt"L‹ I‹ÌHÿÁE8<u÷HÿÂHƒÀHÑH;ÆuâH‰UPA¸   I‹Îè€áÿÿH‹ØH…Àu23ÉèMûÿÿH‹ßH;þtH‹è=ûÿÿHƒÃH;ÞuïA‹ôH‹Ïè)ûÿÿ‹Æé   JðL‹÷H‰MXL‹áH;þtLH+ÇH‰EHM‹IƒÏÿIÿÇC€<8 uöH‹ÑIÿÇI+ÔM‹ÏHUPI‹Ìèk4  …Àu^H‹EHH‹MXN‰$0MçIƒÆL;öu»3ÉI‰] è¸úÿÿH‹ßH;þtH‹è¨úÿÿHƒÃH;ÞuïH‹Ïè—úÿÿ3ÀH‹œ$   HƒÄPA_A^A]A\_^]ÃHƒd$  E3ÉE3À3Ò3ÉèœÙÿÿÌÌÌÌH‰\$H‰l$H‰t$WATAUAVAWHƒì0HƒÍÿI‹ñ3ÿM‹ðL‹êL‹áHÿÅ@8<)u÷º   I‹ÆHêH÷ÐH;èv BH‹\$`H‹l$hH‹t$pHƒÄ0A_A^A]A\_ÃMxLýI‹ÏèsùÿÿH‹ØM…ötM‹ÎM‹ÅI‹×H‹Èè^3  …À…Õ   M+þJ3I‹×L‹ÍM‹ÄèA3  …À…¸   L‹vDxL9v…   H9>u+A‹×Hèùÿÿ3ÉH‰èùÿÿH‹H…ÀtBH‰FHƒÀ H‰Fë]L+6H¸ÿÿÿÿÿÿÿIÁþL;ðwH‹K,6H‹ÕM‹Çè_  H…Àu3Éè7ùÿÿH‹Ë¿   è*ùÿÿë%JðH‰H‰NHèH‰N3ÉèùÿÿH‹NH‰L~3Éèüøÿÿ‹ÇéÞþÿÿE3ÉH‰|$ E3À3Ò3ÉèØÿÿÌ@USVWATAUAVH¬$ÀýÿÿHì@  H‹KR H3ÄH‰…0  M‹àH‹ùH»      H;Ñt"Š,/<-w
H¾ÀH£ÃrH‹Ïèj7  H‹ÐH;ÇuÞDŠA€ø:uHGH;ÐtM‹ÌE3À3ÒH‹Ïèøýÿÿé£  A€è/E3öA€ø-wI¾ÀH£Ã°rAŠÆH+×L‰t$@HÿÂL‰t$HöØL‰t$PHL$pL‰t$XMíL‰t$`L#êDˆt$h3ÒL‰l$8èNÑÿÿH‹D$x¹éý  9HuD8uˆtH‹D$pƒ ¨  ýD‹Éë8è›  …ÀuD8uˆtH‹D$pƒ ¨  ýA¹   ëD8uˆtH‹D$pƒ ¨  ýE‹ÎLD$0H‹ÏHT$@èÞ÷ÿÿH‹L$PLEà…ÀD‰t$(L‰t$ IEÎE3É3Òÿ–‚  H‹ØHƒøÿu*M‹ÌE3À3ÒH‹Ïèíüÿÿ‹ØD8t$ht
H‹L$Pè>÷ÿÿ‹Ãéƒ  I‹t$I+4$HÁþ3ÒL‰u°HML‰u¸L‰uÀL‰uÈL‰uÐDˆuØèWÐÿÿH‹E˜¹éý  9HuD8u¨tH‹Eƒ ¨  ýD‹Éë6è¦  …ÀuD8u¨tH‹Eƒ ¨  ýA¹   ëD8u¨tH‹Eƒ ¨  ýE‹ÎLD$0HU°HMègøÿÿL‹uÀ3Ò…ÀI‹ÎHEÊ€9.uŠA„Àu8UØt:I‹Îèsöÿÿë0<.u8QtèM‹ÌM‹ÅH‹×èöûÿÿD‹è…Àut8EØtI‹ÎèFöÿÿL‹l$8HUàH‹Ëÿh  E3ö…À…ÿþÿÿI‹$I‹T$H+ÐHÁúH;òtH+ÖHðLBöÿÿEFèy+  H‹Ëÿ  D8t$ht
H‹L$Pèãõÿÿ3Àë+€}Ø tI‹ÎèÑõÿÿH‹Ëÿì€  €|$h t
H‹L$Pè·õÿÿA‹ÅH‹0  H3ÌèÁ]ÿÿHÄ@  A^A]A\_^[]ÃÌÌÌéãøÿÿÌÌÌH‰\$H‰l$H‰t$WHƒì@3íA‹ñH‹ÚH‹ùH…Éu@8j(t@ˆj(H‰jH‰jH‰j éÃ   f9)u4H9ju%@8j(t@ˆj(è{êÿÿ¹"   ‰‹Á@ˆk(H‰ké•   H‹B@ˆ(ë¾H‰l$8AƒÉÿH‰l$0L‹Ç‰l$(3Ò‹ÎH‰l$ è  HcÐ…Àuÿl  ‹Èè™éÿÿè êÿÿ‹ ëLH‹KH;Ñv@8k(t@ˆk(ë‡H‹CAƒÉÿH‰l$8L‹ÇH‰l$03Ò‰L$(‹ÎH‰D$ èÀ  H˜H…Àt§HÿÈH‰C 3ÀH‹\$PH‹l$XH‹t$`HƒÄ@_ÃÌÌÌH‰\$H‰|$UH¬$`þÿÿHì   H‹×M H3ÄH‰…  A‹øH‹ÚA¸  HU€ÿ7  …Àuÿ­~  ‹ÈèÚèÿÿ3Àé¤   Hƒd$h HL$(H‹ÇH‰\$H3ÒH‰D$PH‰D$`H‰\$XÆD$p è5ÍÿÿH‹D$0A¹éý  D9Hu€|$@ tGH‹D$(ƒ ¨  ýë9è‚  …Àu8D$@tH‹D$(ƒ ¨  ýA¹   ë€|$@ tH‹D$(ƒ ¨  ýE3ÉLD$ HT$HHM€èëýÿÿ‹D$hH‹  H3Ìè|[ÿÿLœ$   I‹[I‹{ I‹ã]ÃÌÌÌH‰\$L‰L$ WHƒì@I‹ùI‹Ø‹
è€ñÿÿH‹H‹H‹ˆ   HƒÀH‰D$XH‹rg H‰L$ H…ÉtoH…Àt]A¸   E‹ÈAP~ HI@ A H0I0@@A@HPIP@`A`HÊHpIðHÂIƒéu¶Š ˆë'3ÒA¸  èÁ‰ÿÿèÜçÿÿÇ    èiÑÿÿA¸   AP~H‹H‹H‹ˆ   H  H‰D$(H‹Èf H‰L$0H…Ét^H…ÀtL HI@ A H0I0@@A@HPIP@`A`HÊHpIðHÂIƒèu¶ë3ÒA¸   è ‰ÿÿè;çÿÿÇ    èÈÐÿÿH‹CH‹H‹ƒÈÿðÁƒøuH‹CH‹H,N H9tH‹	è³ñÿÿH‹H‹H‹CH‹H‹‚ˆ   H‰H‹H‹H‹ˆ   ðÿ ‹è-ðÿÿH‹\$PHƒÄ@_ÃÌÌ@SHƒì@‹Ù3ÒHL$ è´Êÿÿƒ%Ùe  ƒûþuÇÊe    ÿ”|  ëƒûýuÇ³e    ÿu|  ‹ØëƒûüuH‹D$(Ç•e    ‹X€|$8 tH‹L$ ƒ¡¨  ý‹ÃHƒÄ@[ÃÌÌÌH‰\$WHƒì H‹Ù3ÒHƒÁA¸  èˆÿÿ3ÒH{·ÂL6M H‰SL‹ÃH‰“   Jfó«H3M ‹úL+ÀJHÿÇŠAAˆD0Hÿ  |èHN H+ØJ
HÿÂŠ  ˆ„2  Hú   |ãH‹\$0HƒÄ _ÃH‰\$H‰|$UH¬$€ùÿÿHì€  H‹ËI H3ÄH‰…p  H‹ù‹Iùéý  „G  HT$Pÿl{  …À„4  3ÀHL$p»   ˆÿÀHÿÁ;ÃrõŠD$VHT$VÆD$p ë D¶B¶Èë;ËsÆDp ÿÁA;ÈvðHƒÂŠ„ÀuÜ‹GLD$pƒd$0 D‹Ë‰D$(º   H…p  3ÉH‰D$ èy#  ƒd$@ LL$p‹GD‹ÃH‹—   3É‰D$8HEp‰\$0H‰D$(‰\$ è2  ƒd$@ LL$p‹GA¸   H‹—   3É‰D$8H…p  ‰\$0H‰D$(‰\$ èá1  LEpL+ÇLp  L+ÏH•p  HGöt
€AŠL çëöt
€ AŠLçë2Éˆˆ   HƒÂHÿÀHƒëuÍë?3ÒHO»   DBŸA@ ƒøw€	B ëAƒøw€	 Bàë2Àˆ   ÿÂHÿÁ;ÓrÌH‹p  H3ÌèªVÿÿLœ$€  I‹[I‹{ I‹ã]ÃÌH‹ÄH‰XH‰pL‰H L‰@UWAVH¨xþÿÿHìp  DŠò‹ÙI‹ÑI‹Èè;  ‹ËèÄüÿÿH‹   ‹øL‹ˆ   A;@u3Àéþ  ¹(  èÙìÿÿH‹ØH…Àu3ÉèîÿÿƒÈÿéÝ  H‹…   HL$@º   D‹ÂH‹€ˆ   DJ| H@ IH0A @@I0HPA@@`IPHpIÁA`IÉIðIƒèu¶ HH‹@ IH‰A H‹ËHD$@ H@ IH0A @@I0HPA@@`IPHpIÁA`IÉIðHƒêu¶ HH‹@ IH‰A ‹Ï!H‹Óè7  ƒÏÿ‹ð;ÇuèIâÿÿH‹ËÇ    èïìÿÿ‹ÇéÇ   E„öuè®êÿÿH‹…   H‹ˆˆ   ‹ÇðÁÇuH‹…   H‹ˆˆ   HI H;Ètè§ìÿÿÇ   H‹…   H‰˜ˆ   H‹…   ‹ˆ¨  …,N uTH…   H‰D$0LL$$H…¨  H‰D$8LD$0¸   HT$(HL$ ‰D$$‰D$(èøøÿÿE„ötH‹…¨  H‹H‰†H 3Éè#ìÿÿ‹ÆLœ$p  I‹[ I‹s(I‹ãA^_]ÃÌH‰\$H‰t$WHƒì H‹òH‹ù‹™M …¨  tHƒ¹    t	H‹™ˆ   ëd¹   èêÿÿH‹Ÿˆ   H‰\$0H;t>H…Ût"ƒÈÿðÁƒøuH
H H‹L$0H;ÈtèëÿÿH‹H‰‡ˆ   H‰D$0ðÿ H‹\$0¹   èêÿÿH…ÛtH‹ÃH‹\$8H‹t$@HƒÄ _Ãè1ÜÿÿHƒì(€=Å_  uLHèJ H‰¡_ HšG HÃI H‰”_ H‰}_ èåÿÿL_ L‹À²¹ýÿÿÿè†üÿÿÆw_ °HƒÄ(ÃHƒì(èäÿÿHT_ H‹ÈHƒÄ(éÌþÿÿH‰\$H‰l$ VWATAVAWHƒì@H‹CD H3ÄH‰D$8H‹òè/ùÿÿ3Û‹ø…À„T  L%PK D‹óI‹Äk98„F  DõHƒÀ0Aƒþrëÿèý  „%  ·Ïÿu  …À„  ¸éý  ;øu&H‰FH‰ž   ‰^f‰^H~·Ã¹   fó«éÙ  HT$ ‹Ïÿqu  …À„Ä   HN3ÒA¸  è0ÿÿƒ|$ ‰~H‰ž   …”   HL$&8\$&t,8Yt'¶A¶;Ðw+Âz(€L7ýH+ÕuôHƒÁ8uÔHF¹þ   €HÅH+Íuõ‹Né¤  t.ƒét ƒét;ÍtH‹Ãë"H‹ƒ£  ëH‹r£  ëH‹a£  ëH‹P£  H‰†   ë‹ë‰néÿÿÿ9Ç] …þ   ƒÈÿé   HN3ÒA¸  èX€ÿÿA‹ÆML$LÉI A¾   L<@IÁçMÏI‹ÑA8t>8Zt9D¶¶BD;Àw$EPAú  sAŠDÅAD2DÕ¶BD;ÀvàHƒÂ8uÂIƒÁLÝL+õu®‰~‰nï¤  t)ƒïtƒït;ýu"H‹›¢  ëH‹Š¢  ëH‹y¢  ëH‹h¢  I|$H‰ž   IÿHV¹   ·Hf‰HRH+ÍuíH‹Îèé÷ÿÿëH‹ÎèG÷ÿÿ3ÀH‹L$8H3ÌèLPÿÿL\$@I‹[@I‹kHI‹ãA_A^A\_^ÃÌÌÌH‰\$H‰t$WHƒì@‹ÚA‹ùH‹ÑA‹ðHL$ è@ÁÿÿH‹D$0¶Ó@„|u…ötH‹D$(H‹·Q…Æu3Àë¸   €|$8 tH‹L$ ƒ¡¨  ýH‹\$PH‹t$XHƒÄ@_ÃÌ‹ÑA¹   3ÉE3ÀézÿÿÿÌÌHƒì(ÿÞr  H‰\ ÿÙr  H‰\ °HƒÄ(ÃÌÌÌ¸¬Þ  ;ÈwOtD¸3Ä  ;Èwt9‹Áƒè*t2-Ä  t+ƒèt&ƒèt!ƒøë‹Á-5Ä  t-c  tH-  tƒøu3ÒHÿ%xr  ‹Á-­Þ  tîƒètéƒètäƒètßƒètÚƒètÕƒètÐ-5  tÉƒøuÆƒâëÁH‰\$WÿÿE‹ÙƒøI‹Ø¸¬Þ  A–Â3ÿ;ÈwAtx¸3Ä  ;Èwtm‹Áƒè*tf-Ä  t_ƒètZƒètUƒøëH‹Á-5Ä  tG-c  t@-  ë,‹Á-­Þ  t0ƒèt+ƒèt&ƒèt!ƒètƒètƒèt-5  tƒøtºòë‹×H‹D$HE„ÒL‹L$@L‹ÀLEÇLEÏtH…Àt‰8L‰D$HL‹ÃL‰L$@E‹ËH‹\$_Hÿ%jq  ÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì@ÿQq  3öH‹ØH…Àu3ÀéÃ   H‹ëf90tHƒÈÿHÿÀf9tE uöHlE HƒÅf9u uãH‰t$8H+ëH‰t$0HƒÅHÑýL‹ÃD‹Í‰t$(3ÒH‰t$ 3ÉèŸþÿÿLcð…ÀuH‹Ëÿçp  ë–I‹ÎèäÿÿH‹øH…Àu	3ÉèJåÿÿëÜH‰t$8D‹ÍH‰t$0L‹ÃD‰t$(3Ò3ÉH‰|$ èQþÿÿ…Àu
H‹Ïèåÿÿë
3ÉèåÿÿH‹÷H‹Ëÿˆp  H‹ÆH‹\$PH‹l$XH‹t$`H‹|$hHƒÄ@A^ÃÌÌH‰\$H‰l$H‰t$WHƒì I‹èH‹ÚH‹ñH…Òt3ÒHBàH÷óI;ÀsèûÙÿÿÇ    3ÀëAH…öt
èÿ'  H‹øë3ÿH¯ÝH‹ÎH‹Óè%(  H‹ðH…ÀtH;ûsH+ßH8L‹Ã3Òè“{ÿÿH‹ÆH‹\$0H‹l$8H‹t$@HƒÄ _ÃÌÌÌH‰\$H‰l$H‰t$WATAUAVAWHƒì D‹ùL5¢ýþÿHƒÏÿM‹áI‹èL‹êO‹”þð[ L‹•= M3ÓA‹Ëƒá?IÓÊL;×„ë   M…ÒtI‹Âéà   M;Ä„º   ‹u I‹œö@[ H…ÛtH;ß…ú   é‡   M‹´öÐ  3ÒI‹ÎA¸   ÿ’n  H‹ØH…À…°   ÿ n  ƒøWuEX°I‹ÎD‹ÃHC’  èÆ×ÿÿ…Àt,D‹ÃH £  I‹Îè°×ÿÿ…ÀtE3À3ÒI‹Îÿ>n  H‹ØH…Àu`H‹ÇL5¼üþÿI‡„ö@[ HƒÅI;ì…MÿÿÿL‹°< A‹Ã¹@   ƒà?+ÈHÓÏI3ûK‡¼þð[ 3ÀH‹\$PH‹l$XH‹t$`HƒÄ A_A^A]A\_ÃH‹ÃL5\üþÿI‡„ö@[ H…Àt	H‹Ëÿ®m  I‹ÕH‹Ëÿ"m  H…ÀtŽL‹>< º@   A‹Èƒá?+ÑŠÊH‹ÐHÓÊI3ÐK‡”þð[ ë‰@SHƒì H‹ÙL|¢  ¹   Ll¢  Hi¢  èþÿÿH…Àt IºpÀÑ4ÚÀ½H‹ÓHÇÁúÿÿÿHƒÄ [Hÿ%‡n  ¸% ÀHƒÄ [ÃHƒì(LÕ¡  3ÉLÈ¡  HÉ¡  èÌýÿÿH…ÀtIºp0R^G'ÓHƒÄ(Hÿ%Bn  ¸   HƒÄ(ÃHÿ%1l  ÌHÿ%Al  ÌHÿ%)l  ÌHÿ%)l  ÌH‰\$H‰t$WHƒì A‹ðL¡  ‹ÚLn¡  H‹ùHÜ  ¹   èRýÿÿH…ÀtIºpÚÒ2P> ‚D‹Æ‹ÓH‹ÏÿÅm  ë‹ÓH‹Ïÿ0l  H‹\$0H‹t$8HƒÄ _ÃH‰\$H‰l$H‰t$WHƒìPA‹ÙI‹ø‹òL¡  H‹éLû   Hü   ¹   èÚüÿÿL‹ØH…Àt_IºpâWPb¡ãH‹”$    D‹ËH‹Œ$˜   L‹ÇH‹„$€   H‰T$@‹ÖH‰L$8H‹Œ$   H‰L$0‹Œ$ˆ   ‰L$(H‹ÍH‰D$ I‹Ãÿm  ë23ÒH‹Íè=   ‹ÈD‹Ë‹„$ˆ   L‹Ç‰D$(‹ÖH‹„$€   H‰D$ ÿl  H‹\$`H‹l$hH‹t$pHƒÄP_ÃH‰\$WHƒì ‹úLI   H‹ÙH?   ¹   L+   èþûÿÿH…ÀtIºp2ØT#Ýê‹×H‹Ëÿtl  ëH‹ËèB$  H‹\$0HƒÄ _ÃÌÌÌH‰|$H‹˜9 H=qU ¹   óH«H‹|$°ÃÌ@SHƒì „Éu/HŸT H‹H…ÉtHƒùÿtÿ³j  Hƒ# HƒÃH$U H;ØuØ°HƒÄ [ÃÌÌÌHƒì(ÿ:k  H…ÀH‰ V •ÀHƒÄ(ÃHƒ%ðU  °ÃÌH‹ÄH‰XH‰hH‰pH‰x AVHì   HHˆÿNi  E3öfD9t$b„š   H‹D$hH…À„Œ   HcHp¿    HÞ98L8‹Ïèâ$  ;=Y O=‰Y …ÿt`A‹îHƒ;ÿtGHƒ;þtAöt<öuH‹ÿ›j  …Àt*H‹ÅLUU H‹ÍHÁùƒà?I‹ÈHÀH‹H‰DÑ(ŠˆDÑ8HÿÅHÿÆHƒÃHƒïu£Lœ$   I‹[I‹kI‹s I‹{(I‹ãA^ÃÌÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì 3öE3öHcÎH=ÜT H‹Áƒá?HÁøHÉH‹<ÇH‹Dß(HƒÀHƒøv
€Lß8€é‹   ÆDß8‹Î…ötƒét
ƒù¹ôÿÿÿë¹õÿÿÿë¹öÿÿÿÿµi  H‹èHHHƒùv-H‹Èÿ§i  …Àt ¶ÀH‰lß(ƒøu€Lß8@ë1ƒøu,€Lß8ë%€Lß8@HÇDß(þÿÿÿH‹ÖO H…ÀtI‹Ç@þÿÿÿÿÆIƒÆƒþ…1ÿÿÿH‹\$0H‹l$8H‹t$@H‹|$HHƒÄ A^Ã@SHƒì ¹   èÔÛÿÿ3Û3Éè/#  …ÀuèæýÿÿèÑþÿÿ³¹   èÜÿÿŠÃHƒÄ [ÃÌH‰\$WHƒì 3ÛH=­S H‹;H…Ét
è›"  Hƒ$; HƒÃHû   rÙH‹\$0°HƒÄ _ÃH‰\$H‰t$WHƒì H‹òH‹ùH;ÊthH‹ÙH‹H…ÀtIºp¢\\Äž”ßÿ#i  „Àt	HƒÃH;ÞuÛH;Þt;H;ßt2HƒÃøHƒ{ø tH‹H…ÀtIºp;Y>u¦™—3Éÿçh  HƒëHCH;ÇuÒ2Àë°H‹\$0H‹t$8HƒÄ _ÃH‰\$WHƒì H‹ÚH‹ùH;Êt$H‹CøH…ÀtIºp;Y>u¦™—3Éÿ”h  HƒëH;ßuÜH‹\$0°HƒÄ _ÃÌÌH‰\$L‰L$ WHƒì I‹ù‹
èsÚÿÿH‹£5 ‹Èƒá?H‹V H3ØHÓË‹è¦ÚÿÿH‹ÃH‹\$0HƒÄ _ÃL‹ÜHƒì(¸   MKMC‰D$8IS‰D$@IKèÿÿÿHƒÄ(ÃÌÌH‰-V H‰.V H‰/V H‰0V ÃÌÌÌH‰\$H‰t$ WATAUAVAWHƒì@‹ÙE3ÿD!|$xA¶Dˆt$p‹Ñƒêt'ƒêtRƒêtƒêtHƒêtCƒêtƒêt	ƒú…‚   ƒé„´   ƒé„   ƒé	„™   ƒé„‡   ƒùty3ÿé”   è´ÕÿÿL‹øH…ÀuƒÈÿL\$@I‹[@I‹sHI‹ãA_A^A]A\_ÃH‹ H‹‹  HÁáHÈë	9XtHƒÀH;Áuò3ÀH…ÀuèÐÿÿÇ    è›¹ÿÿë©HxE2öDˆt$pë"H=$U ëH=U ëH=U ëH=ùT E3íE„öt
AMèÈØÿÿH‹7E„ötH‹ð3 ‹Èƒá?H3ðHÓÎHƒþ„‹   H…ö„  A¼	  ƒûw5A£Üs/M‹oL‰l$0Iƒg ƒûuRèEÓÿÿ‹@‰D$x‰D$ è5ÓÿÿÇ@Œ   ƒûu1H‹Š  HÁàIH‹Š  HÁáHÈH‰D$(H;ÁtHƒ` HƒÀëëH‹U3 H‰ëA¼	  E„öt
¹   èWØÿÿHƒþu3Àé™þÿÿƒûu#èÀÒÿÿIºp3Ó0Oœ‹‹P‹ËH‹ÆL‹Ãe  AÿÐëIºps×PI†ÁÆ‹ËH‹ÆH‹¨e  ÿÒƒûw´A£Üs®M‰oƒûu¥èqÒÿÿ‹L$x‰Hë—E„ötNèÛ×ÿÿ¹   èq½ÿÿÌÌÌÌH‹©2 H‹ªS ‹ÈH3Ðƒá?HÓÊH…Ò•ÀÃH‰‘S ÃH‹2 L‹ÁH‹S ‹Èƒá?H3ÐHÓÊH…Òu3ÀÃIºpqTXæˆØI‹ÈH‹ÂHÿ%e  ÌH‰\$L‰L$ WHƒì I‹ùI‹ØH‹
èWËÿÿH‹SH‹H‹H…Ét\‹I‹ÁÁè$tO‹Á$<uöÁÀu
ºárÿë8H‹C€8 uH‹H‹‹AÑè$tH‹H‹	è÷  ƒøÿtH‹Cÿ ëH‹CƒÿH‹èïÊÿÿH‹\$0HƒÄ _ÃH‰\$L‰L$ VWAVHƒì`I‹ùI‹ð‹
èYÖÿÿH‹	J HcúI L4ÃH‰\$8I;Þ„‰   H‹H‰D$ H‹H…Àt"‹H‹ÁÁè$t‹Á$<uöÁÀuºárÿHƒÃëºH‹VH‹NH‹LD$ L‰D$@H‰D$HH‰L$PH‰T$XH‹D$ H‰D$(H‰D$0LL$(LD$@HT$0HŒ$ˆ   èþÿÿë©‹èüÕÿÿH‹œ$€   HƒÄ`A^_^ÃÌÌÌˆL$UH‹ìHƒì@ƒe( HE(ƒe  LMàH‰EèLEèHEH‰EðHUäHE H‰EøHM¸   ‰Eà‰EäèÐþÿÿ€} ‹E EE(HƒÄ@]ÃÌÌÌH‰\$H‰l$H‰t$WHƒì H‹ÙH‹ê‹I‹Á$<uOöÁÀtJ‹;+{ƒc H‹sH‰3…ÿ~6H‹Ëè  L‹ÍD‹ÇH‹Ö‹Èè•'  ;øt
ðƒKƒÈÿë‹CÁè¨tðƒcý3ÀH‹\$0H‹l$8H‹t$@HƒÄ _ÃH‰\$H‰|$UH‹ìHƒì`HƒeÀ H‹Ùƒ=GH  ÆEÐ ÆEè ÆEð ÆEø un2 ÆEèóEØH…Ûu3ÉèÅþÿÿ‹øë2HUÀèÿÿÿ…ÀtƒÏÿë ‹CÁè¨tH‹Ëè\  ‹ÈèE  …ÀuÝ3ÿ€}èuH‹EÀƒ ¨  ý€}ð t‹]ìHMÀè¤°ÿÿ‰X €}ø t‹]ôHMÀè°ÿÿ‰X$H‹\$p‹ÇH‹|$xHƒÄ`]ÃÌÌ±é9þÿÿÌH‰\$WHƒì0ƒd$  ¹   è³Óÿÿ»   ‰\$$;SG tnHcûH‹OG H‹øH…ÉuëU‹AÁè$tH‹2G H‹ùèÕ+  ƒøÿtÿD$ H‹G H‹øHƒÁ0ÿ³_  H‹G H‹ùèïÔÿÿH‹ôF Hƒ$ø ÿÃë†¹   è}Óÿÿ‹D$ H‹\$HHƒÄ0_ÃÌÌ@SHƒì ‹AH‹ÙÁè¨t(‹AÁè¨tH‹IèœÔÿÿðc¿þÿÿ3ÀH‰CH‰‰CHƒÄ [ÃÌÌHƒì(H…Éuè¾ÉÿÿÇ    èK³ÿÿƒÈÿë‹AHƒÄ(ÃÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì0E3öI‹ÙI‹èH‹òH‹ùH…Ò„#  M…À„  D82uH…É„  fD‰1é
  E8q(uH‹Ëè5ÇÿÿH‹SD‹RAúéý  u'LN H‰\$ L‹ÅH‹ÖH‹ÏèÒ+  ƒÉÿ…ÀHÁéÆ   L9²8  uH…ÿ„¤   ¶f‰é™   ¶H‹fD94H}aD‹JAƒù~+A;é|&A‹ÆH…ÿL‹Æº	   •ÀA‹Ê‰D$(H‰|$ èìÿÿ…ÀuH‹CHcHH;érD8vt	H‹C‹@ëKÆC0ƒÈÿÇC,*   ë;A‹ÆA¹   H…ÿL‹ÆA‹Ê•À‰D$(AQH‰|$ è«ëÿÿ…ÀtÅ¸   ë	L‰5©M 3ÀH‹\$@H‹l$HH‹t$PH‹|$XHƒÄ0A^ÃðÿAH‹à   H…Àtðÿ H‹ð   H…Àtðÿ H‹è   H…Àtðÿ H‹   H…Àtðÿ HA8A¸   Hó. H9PðtH‹H…ÒtðÿHƒxè tH‹PøH…ÒtðÿHƒÀ IƒèuËH‹‰   éy  ÌH‰\$H‰l$H‰t$WHƒì H‹ø   H‹ÙH…ÀtyHæ3 H;ÁtmH‹ƒà   H…Àtaƒ8 u\H‹‹ð   H…Étƒ9 uèþÑÿÿH‹‹ø   è  H‹‹è   H…Étƒ9 uèÜÑÿÿH‹‹ø   è  H‹‹à   èÄÑÿÿH‹‹ø   è¸ÑÿÿH‹ƒ   H…ÀtGƒ8 uBH‹‹  Héþ   è”ÑÿÿH‹‹  ¿€   H+Ïè€ÑÿÿH‹‹  H+ÏèqÑÿÿH‹‹   èeÑÿÿH‹‹   è¥   H³(  ½   H{8H¦- H9GðtH‹H…Étƒ9 uè*ÑÿÿH‹è"ÑÿÿHƒè tH‹OøH…Ét
ƒ9 uèÑÿÿHƒÆHƒÇ Hƒíu±H‹ËH‹\$0H‹l$8H‹t$@HƒÄ _éÞÐÿÿÌÌH…ÉtH<„  H;Èt¸   ðÁ\  ÿÀÃ¸ÿÿÿÃÌH…Ét1SHƒì H„  H‹ÙH;Èt‹\  …Àuèc  H‹ËèƒÐÿÿHƒÄ [ÃÌH…ÉtHÜƒ  H;ÈtƒÈÿðÁ\  ÿÈÃ¸ÿÿÿÃÌÌÌHƒì(H…É„–   AƒÉÿðDIH‹à   H…ÀtðDH‹ð   H…ÀtðDH‹è   H…ÀtðDH‹   H…ÀtðDHA8A¸   HQ, H9PðtH‹H…ÒtðD
Hƒxè tH‹PøH…ÒtðD
HƒÀ IƒèuÉH‹‰   è5ÿÿÿHƒÄ(ÃH‰\$WHƒì èÅÈÿÿH¸   ‹ˆ¨  ‹61 …ÈtH‹H…Ûu,¹   èÈÍÿÿH‹ˆA H‹Ïè(   H‹Ø¹   èÿÍÿÿH…ÛtH‹ÃH‹\$0HƒÄ _ÃèÀÿÿÌÌH‰\$WHƒì H‹úH…ÒtFH…ÉtAH‹H;ÚuH‹Çë6H‰9H‹Ïè-üÿÿH…ÛtëH‹Ëè¬þÿÿƒ{ uÝHï) H;ØtÑH‹Ëè’üÿÿëÇ3ÀH‹\$0HƒÄ _ÃÌÌÌH…É„   SHƒì H‹ÙH‹IH;Œ0 tè±ÎÿÿH‹K H;‚0 tèŸÎÿÿH‹K(H;x0 tèÎÿÿH‹K0H;n0 tè{ÎÿÿH‹K8H;d0 tèiÎÿÿH‹K@H;Z0 tèWÎÿÿH‹KHH;P0 tèEÎÿÿH‹KhH;^0 tè3ÎÿÿH‹KpH;T0 tè!ÎÿÿH‹KxH;J0 tèÎÿÿH‹‹€   H;=0 tèúÍÿÿH‹‹ˆ   H;00 tèåÍÿÿH‹‹   H;#0 tèÐÍÿÿHƒÄ [ÃÌÌH…ÉtfSHƒì H‹ÙH‹	H;m/ tèªÍÿÿH‹KH;c/ tè˜ÍÿÿH‹KH;Y/ tè†ÍÿÿH‹KXH;/ tètÍÿÿH‹K`H;…/ tèbÍÿÿHƒÄ [ÃH‰\$WHƒì H<ÑH‹ÙH;ÏtH‹è>ÍÿÿHƒÃH;ßuïH‹\$0HƒÄ _ÃÌÌH…É„þ   H‰\$H‰l$VHƒì ½   H‹Ù‹Õè¥ÿÿÿHK8‹Õèšÿÿÿu‹ÖHKpèŒÿÿÿH‹Ð   ‹Öè~ÿÿÿH‹0  UûèoÿÿÿH‹‹@  è¿ÌÿÿH‹‹H  è³ÌÿÿH‹‹P  è§ÌÿÿH‹`  ‹Õè=ÿÿÿH‹˜  ‹Õè/ÿÿÿH‹Ð  ‹Öè!ÿÿÿH‹0  ‹ÖèÿÿÿH‹  UûèÿÿÿH‹‹   èTÌÿÿH‹‹¨  èHÌÿÿH‹‹°  è<ÌÿÿH‹‹¸  è0ÌÿÿH‹\$0H‹l$8HƒÄ ^Ã@UATAUAVAWHƒì`Hl$0H‰]`H‰uhH‰}pH‹†% H3ÅH‰E(D‹êE‹ùH‹ÑM‹àHMè.¥ÿÿ‹½ˆ   …ÿuH‹E‹x÷   E‹ÏM‹Ä‹ÏÒƒd$( Hƒd$  ƒâÿÂèDäÿÿLcð…Àu3ÿéÐ   I‹öHöHFH;ðHÉH#È„   Hù   w1HAH;Áw
H¸ðÿÿÿÿÿÿHƒàðèèA  H+àH\$0H…ÛtmÇÌÌ  ëèÊÿÿH‹ØH…Àt
Ç ÝÝ  HƒÃH…ÛtIL‹Æ3ÒH‹ËèJbÿÿE‹ÏD‰t$(M‹ÄH‰\$ º   ‹Ïèžãÿÿ…ÀtL‹€   D‹ÀH‹ÓA‹ÍÿœV  ‹øë	3Û3ÿH…ÛtHKð9ÝÝ  uèÊÊÿÿ€}  tH‹Eƒ ¨  ý‹ÇH‹M(H3ÍèÇ2ÿÿH‹]`H‹uhH‹}pHe0A_A^A]A\]ÃÌ‹FE ÃÌÌÌÌATAUAVHìP  H‹ü# H3ÄH‰„$  M‹áM‹ðL‹éH…ÉuH…Òtè™¿ÿÿÇ    è&©ÿÿé©  M…ötæM…ätáHƒú‚•  H‰œ$H  H‰¬$@  H‰´$8  H‰¼$0  L‰¼$(  LzÿM¯þLù3ÉH‰L$ fff„     3ÒI‹ÇI+ÅI÷öHXHƒû‡›   M;ývuK4.I‹ÝH‹þI;÷w* Iºp‰Þ^•·u“H‹ÓH‹ÏI‹ÄÿßU  …ÀHOßIþI;ÿvÙM‹ÆI‹×I;ßt$I+ßfff„     ¶¶ˆˆ
HRIƒèuêM+þM;ýw”H‹L$ HƒéH‰L$ ˆ†  L‹lÌ0L‹¼Ì   éLÿÿÿHÑëI¯ÞJ4+Iºp‰Þ^•·u“H‹ÖI‹ÍI‹ÄÿPU  …À~/M‹ÎL‹ÆL;ît$f„     A¶ I‹ÐH+Ó¶
ˆAˆIÿÀIƒéuåIºp‰Þ^•·u“I‹×I‹ÍI‹ÄÿU  …À~0M‹ÆI‹×M;ït%M‹ÍM+Ï€    ¶A¶Aˆˆ
HRIƒèuèIºp‰Þ^•·u“I‹×H‹ÎI‹Äÿ·T  …À~3M‹ÆI‹×I;÷t(L‹ÎM+Ïff„     ¶A¶Aˆˆ
HRIƒèuèI‹ÝI‹ÿfH;óv+IÞH;Þs#Iºp‰Þ^•·u“H‹ÖH‹ËI‹ÄÿRT  …À~Ûë)@ IÞI;ßwIºp‰Þ^•·u“H‹ÖH‹ËI‹Äÿ'T  …À~ÛH‹ïI+þH;þvIºp‰Þ^•·u“H‹ÖH‹ÏI‹ÄÿÿS  …ÀØH;ûr8M‹ÆH‹×tL‹ËL+Ï¶A¶Aˆˆ
HRIƒèuèH;÷H‹ÃHEÆH‹ðéFÿÿÿH;õs(I+îH;îvIºp‰Þ^•·u“H‹ÖH‹ÍI‹Äÿ—S  …ÀtÛë%I+îI;ívIºp‰Þ^•·u“H‹ÖH‹ÍI‹ÄÿpS  …ÀtÛI‹ÏH‹ÅH+ËI+ÅH;ÁH‹L$ |+L;ísL‰lÌ0H‰¬Ì   HÿÁH‰L$ I;ßƒžýÿÿL‹ëéýÿÿI;ßsH‰\Ì0L‰¼Ì   HÿÁH‰L$ L;íƒsýÿÿL‹ýéØüÿÿH‹¼$0  H‹´$8  H‹¬$@  H‹œ$H  L‹¼$(  H‹Œ$  H3Ìè .ÿÿHÄP  A^A]A\ÃÌÌH‰\$H‰t$WHƒì E3ÒI‹ØL‹ÚM…Éu1H…Éu1H…Òtè”»ÿÿ»   ‰è ¥ÿÿD‹ÓH‹\$0A‹ÂH‹t$8HƒÄ _ÃH…ÉtÔM…ÛtÏM…ÉuDˆëÙH…ÛuDˆë»H+ÙH‹ÑM‹ÃI‹ùIƒùÿuŠˆHÿÂ„Àt±Iƒèuîë.ŠH‹÷ˆHÿÂ„ÀtšIƒètHƒïuåM…ÀHFÿHDÆH…ÀuDˆM…À…rÿÿÿIƒùÿuFˆTÿEPPé^ÿÿÿDˆèÛºÿÿ»"   éBÿÿÿÌHƒìXH‹ H3ÄH‰D$@3ÀL‹ÊHƒø L‹ÁswÆD  HÿÀHƒø |ðŠë¶ÐHÁê¶Àƒà¶L «ÁIÿÁˆL AŠ„ÀuÝëA¶Áº   A¶ÉƒáHÁèÓâ„T uIÿÀEŠE„ÉuÙ3ÀH‹L$@H3Ìè-ÿÿHƒÄXÃI‹Àëéèƒ5ÿÿÌÌÌH‰\$H‰t$WL‹ÒH5KÞþÿAƒâH‹úI+úH‹ÚL‹ÁWÛIBÿóoHƒøws‹„†¬$ HÆÿàfsÙë`fsÙëYfsÙëRfsÙëKfsÙëDfsÙë=fsÙë6fsÙë/fsÙ	ë(fsÙ
ë!fsÙëfsÙëfsÙëfsÙëfsÙWÀA¹   ftÁf×À…À„3  ¼ÐM…ÒuEYòëE3Û‹Â¹   I+ÊH;ÁA’ÃA‹Á+ÂA;Á‡Ï   ‹Œ†è$ HÎÿáfsùfsÙé´   fsùfsÙé¥   fsùfsÙé–   fsùfsÙé‡   fsùfsÙë{fsùfsÙëofsùfsÙëcfsùfsÙëWfsù	fsÙ	ëKfsù
fsÙ
ë?fsùfsÙë3fsùfsÙë'fsùfsÙëfsùfsÙëfsùfsÙëWÉE…Û…â   óoWfoÂftÃf×À…Àu5H‹ÓI‹ÈH‹\$H‹t$_ékýÿÿM…ÒuÐD8W„¨   H‹\$H‹t$_éLýÿÿ¼È‹ÁI+ÂHƒÀHƒøw¹D+ÉAƒùwyB‹ŒŽ(% HÎÿáfsúëefsúë^fsúëWfsúëPfsúëIfsúëBfsúë;fsúë4fsú	ë-fsú
ë&fsúëfsúëfsúëfsúë
fsúëWÒfëÊA¶ „Àt8@ „     ¾ÀfnÀf`Àf`ÀfpÀ ftÁf×À…ÀuA¶@IÿÀ„ÀuÔ3ÀH‹\$H‹t$_ÃH‹\$I‹ÀH‹t$_Ã â! é! ð! ÷! þ! " " " " !" (" /" 6" =" D" ž" ­" ¼" Ë" Ú" æ" ò" þ" 
# # "# .# :# F# R# ^# Ü# ã# ê# ñ# ø# ÿ# $ $ $ $ "$ )$ 0$ 7$ >$ E$ E3Àé    H‰\$WHƒì@H‹ÚH‹ùH…ÉuèF¶ÿÿÇ    èÓŸÿÿ3Àë`H…ÛtçH;ûsòI‹ÐHL$ è$šÿÿH‹L$0HSÿƒy t$HÿÊH;úw
¶öDuîH‹ËH+ÊH‹ÓƒáH+ÑHÿÊ€|$8 tH‹L$ ƒ¡¨  ýH‹ÂH‹\$PHƒÄ@_Ã@UATAUAVAWHƒì`Hl$PH‰]@H‰uHH‰}PH‹æ H3ÅH‰EHc}`I‹ñE‹àL‹êH‹Ù…ÿ~H‹×I‹Éèl  ;Çx|‹øD‹uxE…öuH‹D‹p÷€   D‹ÏL‹ÆA‹ÎÒƒd$( Hƒd$  ƒâÿÂè‘Øÿÿ3ÒLcø…À„s  I‹ÇHÀHHH;ÁHÀH#Á„=  I¸ðÿÿÿÿÿÿH=   w1HHH;ÈwI‹ÈHƒáðH‹Áè16  H+áH\$PH…Û„  ÇÌÌ  ëH‹ÈèH¾ÿÿ3ÒH‹ØH…Àt
Ç ÝÝ  HƒÃH…Û„Ø  D‰|$(D‹ÏL‹ÆH‰\$ º   A‹Îèæ×ÿÿ3Ò…À„±  H‰T$@E‹ÏH‰T$8L‹ÃH‰T$0I‹Í‰T$(H‰T$ A‹Ôè³Ýÿÿ3ÒHcð…À„{  A¸   E…àtQ‹Ep…À„l  ;ð]  H‰T$@E‹ÏH‰T$8L‹ÃH‰T$0I‹Í‰D$(A‹ÔH‹EhH‰D$ è[Ýÿÿ3Ò‹ð…À…+  é  H‹ÎHÉHAH;ÈHÉH#È„æ   I;Èw5HAH;Áw
H¸ðÿÿÿÿÿÿHƒàðè 5  H+àH|$PH…ÿ„Í   ÇÌÌ  ëè½ÿÿ3ÒH‹øH…Àt
Ç ÝÝ  HƒÇH…ÿ„£   H‰T$@E‹ÏH‰T$8L‹ÃH‰T$0I‹Í‰t$(A‹ÔH‰|$ è¬Üÿÿ3Ò…Àt^‹EpD‹ÎH‰T$8L‹ÇH‰T$0A‹Î…Àu‰T$(H‰T$ è×ÿÿ‹ð…Àuë.‰D$(H‹EhH‰D$ èôÖÿÿ‹ð…ÀtHOð9ÝÝ  u.è±½ÿÿë'H‹úH…ÿtHOð9ÝÝ  uè–½ÿÿ3öë
H‹Ú‹òH…ÛtHKð9ÝÝ  uèw½ÿÿ‹ÆH‹MH3Íè…%ÿÿH‹]@H‹uHH‹}PHeA_A^A]A\]ÃÌÌÌH‰\$H‰t$WHƒìpH‹òI‹ÙH‹ÑA‹øHL$Pèw–ÿÿ‹„$À   HL$X‰D$@L‹Ë‹„$¸   D‹Ç‰D$8H‹Ö‹„$°   ‰D$0H‹„$¨   H‰D$(‹„$    ‰D$ è[üÿÿ€|$h tH‹L$Pƒ¡¨  ýL\$pI‹[I‹sI‹ã_ÃÌÌHƒì(è[Ñÿÿ3É„À”Á‹ÁHƒÄ(ÃÌHƒì(H…ÉuèÚ±ÿÿÇ    èg›ÿÿHƒÈÿHƒÄ(ÃL‹Á3ÒH‹Ò2 HƒÄ(Hÿ%H  ÌÌÌH‰\$WHƒì H‹ÚH‹ùH…Éu
H‹Êè»ÿÿëH…Ûuè7¼ÿÿëHƒûàv-èv±ÿÿÇ    3ÀH‹\$0HƒÄ _Ãè‚ñÿÿ…ÀtßH‹ËèŠ›ÿÿ…ÀtÓH‹_2 L‹ËL‹Ç3Òÿ±G  H…ÀtÑëÄÌÌH‰\$H‰l$H‰t$WAVAWHƒì H‹éH…ÉtG3ÛL=7Õþÿ¿ã   A¸U   ™H‹Í+ÂÑøHcðL‹öMöK‹”÷ Ç è{  …Àt)y~ÿë^;ß~Ç3ÀH‹\$@H‹l$HH‹t$PHƒÄ A_A^_ÃKc„÷(Ç …ÀxÙH=ä   sÑHÀA‹„ÇÀ¬ ëÆÌH‰\$H‰l$H‰t$WHƒì ºH   Jøè§ºÿÿ3öH‹ØH…Àt[H¨   H;ÅtLHx0HOÐE3Àº   è ÙÿÿHƒOøÿHO€gø‹ÆH‰7ÇG  

ÆG
@ˆ1ÿÀHÿÁƒøróHƒÇHHGÐH;Åu¸H‹ó3Éè³ºÿÿH‹\$0H‹ÆH‹t$@H‹l$8HƒÄ _ÃÌÌÌH…ÉtJH‰\$H‰t$WHƒì H±   H‹ÙH‹ùH;ÎtH‹ÏÿE  HƒÇHH;þuîH‹ËèXºÿÿH‹\$0H‹t$8HƒÄ _ÃH‰\$H‰t$H‰|$AWHƒì0‹ñù    r)èp¯ÿÿ»	   ‰èü˜ÿÿ‹ÃH‹\$@H‹t$HH‹|$PHƒÄ0A_Ã3ÿOèJ¸ÿÿ‹ß‹Y4 H‰\$ ;ð|6L=I0 I9<ßtë"èþÿÿI‰ßH…Àuxë‹(4 ƒÀ@‰4 HÿÃëÁ¹   èL¸ÿÿ‹ÇëŠHcÑL0 H‹Âƒâ?HÁøHÒI‹ÀHÈHÿ%D  ÌHcÑLÚ/ H‹Âƒâ?HÁøHÒI‹ÀHÈHÿ%ýC  ÌH‰\$H‰t$H‰|$AVHƒì HcÙ…Éxr;š3 sjH‹ÃL5Ž/ ƒà?H‹óHÁîH<ÀI‹ööDø8tGHƒ|ø(ÿt?èL  ƒøu'…Ût+Øt;Øu¹ôÿÿÿë¹õÿÿÿë¹öÿÿÿ3ÒÿœD  I‹öHƒLø(ÿ3Àëè	®ÿÿÇ 	   èÞ­ÿÿƒ  ƒÈÿH‹\$0H‹t$8H‹|$@HƒÄ A^ÃÌÌHƒì(ƒùþuè²­ÿÿƒ  èÊ­ÿÿÇ 	   ëN…Éx2;Ø2 s*HcÉLÌ. H‹Áƒá?HÁèHÉI‹ÀöDÐ8tH‹DÐ(ëèg­ÿÿƒ  è­ÿÿÇ 	   è—ÿÿHƒÈÿHƒÄ(ÃÌÌÌH‰\$L‰L$ WHƒì I‹ùI‹Ø‹
è`þÿÿH‹HcH‹ÑH‹ÁHÁøLT. ƒâ?HÒI‹ÀöDÐ8t#è=ÿÿÿH‹ÈÿœC  3Û…ÀuÿHB  ‹Øèá¬ÿÿ‰èú¬ÿÿÇ 	   ƒËÿ‹è&þÿÿ‹ÃH‹\$0HƒÄ _ÃÌ‰L$Hƒì8HcÑƒúþuèÇ¬ÿÿÇ 	   ël…ÉxX;Õ1 sPH‹ÊLÉ- ƒá?H‹ÂHÁøHÉI‹ÀöDÈ8t-HD$@‰T$P‰T$XLL$PHT$XH‰D$ LD$ HL$Hèýþÿÿëè^¬ÿÿÇ 	   èë•ÿÿƒÈÿHƒÄ8ÃÌÌÌH‹ÄUVWATAUAVAWHh©HìÐ   HÇE÷þÿÿÿH‰XH‹\ H3ÄH‰EI‹ðL‰E¿LcòH‹ÙH‹EH‰E§I‹ÆM‹îIÁýL‰mÇHÐþÿƒà?L<ÀJ‹„éð\ J‹Dø(H‰EçE‹áMàL‰eŸÿ[B  ‰E·3ÿL‹U§A8z(uI‹Êèœ©ÿÿL‹U§I‹J‹I‰M»3ÀH‰‰CL9e¿ƒ  M‹ÎIÁùL‰Mï‹×ŠˆE‰}“A¼   LšÏþÿùéý  …{  ‹×L‹÷Jý>   KŒËð\ @89tÿÂIÿÆHÿÁIƒþ|íM…öŽà   K‹„ëð\ B¶Lø>F¾¤àH AÿÄA‹Ä+Â‰E¯H‹UŸH+ÖLcÀL;Âx  H‹ÏJý>   K”Ëð\ ŠˆDÿHÿÁHÿÂI;Î|ïM…À~HMÿIÎH‹Öè°PÿÿL‹U§LåÎþÿH‹×K‹Œëð\ HÊBˆ|ù>HÿÂI;Ö|èH‰}ÏHEÿH‰E×‹ÇAƒü”ÀÿÀD‹àD‹ÀL‰T$ LMÏHU×HM“èc  Hƒøÿ„`  ‹E¯ÿÈHcÈHñéû   ¶N¾¬àH AML‹EŸL+ÆHcÁI;ÀØ  H‰}¯H‰uß‹Çƒù”ÀÿÀD‹ðD‹ÀL‰T$ LM¯HUßHM“èø  Hƒøÿ„õ  IõE‹æL‹mÇé‘   O‹„ëð\ CŠLø=öÁt!CŠDø>ˆEŠˆE€áûCˆLø=A¸   HUëID¶I‹BH‹fB9<I}1LvL;uŸƒp  M‹ÊA¸   H‹ÖHM“è×ßÿÿƒøÿ„u  I‹öëM‹ÄH‹ÖM‹ÊHM“è·ßÿÿƒøÿ„U  HÿÆH‰|$8H‰|$0ÇD$(   HEH‰D$ E‹ÌLE“3Ò‹M·èÍÿÿD‹ð…À„  H‰|$ LM—D‹ÀHUL‹eçI‹Ìÿ‹?  …À„î   ‹Ö+U¿S‰SD9u—‚á   €}
u>¸   f‰EH‰|$ LM—D@ôHUI‹ÌÿE?  …À„¨   ƒ}—‚¦   ÿCÿC‹SH;uŸƒ“   L‹U§L‹Mï‹M»éýÿÿH…Ò~$I+öK‹Œëð\ IÎBŠ6BˆDù>ÿÇIÿÆHcÇH;Â|ßSëUM…À~'H‹×L‹MÇK‹ŒËð\ HÊŠ2BˆDù>ÿÇHÿÂHcÇI;À|àDCë#GˆLø>K‹„ëð\ B€Lø=B‰Cëÿ?=  ‰H‹ÃH‹MH3Ìè¾ÿÿH‹œ$  HÄÐ   A_A^A]A\_^]ÃÌÌÌH‰\$H‰l$VWAV¸P  èø(  H+àH‹î H3ÄH‰„$@  LcÒH‹ùI‹ÂA‹éHÁøH¬( Aƒâ?IèI‹ðH‹ÁKÒL‹tÐ(3ÀH‰‰GL;ÅsoH\$@H;õs$ŠHÿÆ<
u	ÿGÆHÿÃˆHÿÃH„$?  H;Ør×Hƒd$  HD$@+ØLL$0D‹ÃHT$@I‹Îÿ§=  …Àt‹D$0G;ÃrH;õr›ëÿ;<  ‰H‹ÇH‹Œ$@  H3Ìè¶ÿÿLœ$P  I‹[ I‹k0I‹ãA^_^ÃÌÌH‰\$H‰l$VWAV¸P  èô'  H+àH‹ê
 H3ÄH‰„$@  LcÒH‹ùI‹ÂA‹éHÁøH¨' Aƒâ?IèI‹ðH‹ÁKÒL‹tÐ(3ÀH‰‰GL;Åƒ‚   H\$@H;õs1·HƒÆfƒø
uƒG¹   f‰HƒÃf‰HƒÃH„$>  H;ØrÊHƒd$  HD$@H+ØLL$0HÑûHT$@ÛI‹ÎD‹ÃÿŒ<  …Àt‹D$0G;ÃrH;õrˆëÿ ;  ‰H‹ÇH‹Œ$@  H3Ìè›ÿÿLœ$P  I‹[ I‹k0I‹ãA^_^ÃÌÌÌH‰\$H‰l$VWATAVAW¸p  èÔ&  H+àH‹Ê	 H3ÄH‰„$`  LcÒH‹ÙI‹ÂE‹ñHÁøHˆ& Aƒâ?MðM‹øI‹øH‹ÁKÒL‹dÐ(3ÀH‰M;Æ‰CƒÎ   HD$PI;þs-·HƒÇfƒù
uº   f‰HƒÀf‰HƒÀHŒ$ø  H;ÁrÎHƒd$8 HL$PHƒd$0 LD$PH+ÁÇD$(U  HŒ$   HÑøH‰L$ D‹È¹éý  3Òè¦Èÿÿ‹è…ÀtI3ö…Àt3Hƒd$  H”$   ‹ÎLL$@D‹ÅHÑI‹ÌD+Æÿ#;  …Àtt$@;õrÍ‹ÇA+Ç‰CI;þé4ÿÿÿÿ±9  ‰H‹ÃH‹Œ$`  H3Ìè,ÿÿLœ$p  I‹[0I‹k@I‹ãA_A^A\_^ÃH‰\$H‰T$‰L$VATAUAVAWHƒì0I‹ÙE‹èHcñƒþþu-AÆA8Aƒa4 AÆA0AÇA,	   ƒÈÿH‹\$pHƒÄ0A_A^A]A\^Ã…Éx;5 ) s¸   ë3À…Àu3AÆA8Aƒa4 AÆA0AÇA,	   H‰\$(Hƒd$  E3ÉE3À3Ò3ÉèlŒÿÿëžH‹ÆL‹þIÁÿH­$ ƒà?L$ÀJ‹ùBöDà8t©‹Îè‡ôÿÿAƒÎÿHˆ$ J‹øBöDà8uÆC0ÇC,	   ÆC8ƒc4 ëL‹ËE‹ÅH‹T$h‹Îè   D‹ð‹ÎègôÿÿA‹Æé&ÿÿÿÌÌÌ@USVWATAUAVAWH‹ìHƒìx3ÿE‹ðLcùI‹ÙH‹òE…À„È  H…Òu7AÆA8E3ÀA‰y43ÒAÆA03ÉAÇA,   E3ÉH‰\$(H‰|$ è‹ÿÿƒÈÿéŽ  I‹ÇHÏ# ƒà?M‹çIÁüL‰eèL,ÀJ‹áBŠDé9ˆE¸þÈ<w	A‹Æ÷Ð¨t’BöDé8 t3ÒA‹ÏDBè  A‹ÏH‰}ÐèH  Hy# …À„  J‹âB8|è8  @8{(uH‹Ëè$ ÿÿHM# H‹CH9¸8  uJ‹âB8|è9„Ô   J‹âHUàJ‹Lé(ÿž8  …À„²   ¾M¸…É„ƒ   ƒét	ƒù…9  N$6H‰}ÀL‹þI;ôs\D‹uÄA··Èf‰E¸èÄ  ·M¸f;Áu6AƒÆD‰uÄfƒù
u¹   è£  ¹   f;ÁuAÿÆD‰uÄÿÇIƒÇM;üsë±ÿ³6  ‰EÀL‹eèéº   E‹ÎH‰\$ L‹ÆHMÀA‹×èõÿÿò ‹xéœ   H]" J‹âB8|é8}R¾M¸…Ét6ƒétƒù…€   E‹ÎHMÀL‹ÆA‹×è>úÿÿë¸E‹ÎHMÀL‹ÆA‹×èFûÿÿë¤E‹ÎHMÀL‹ÆA‹×èùÿÿëJ‹Lé(LMÄ3ÀE‹ÆH!D$ H‹ÖH‰EÀ‰EÈÿM7  …Àu	ÿó5  ‰EÀ‹}ÈòEÀòEÐH¼! H‹EÐHÁè …Àu\‹EÐ…Àt,ƒøuÆC0ÇC,	   ÆC8‰C4é¬ýÿÿ‹MÐH‹Óè ÿÿéœýÿÿJ‹âBöDè8@t€>tƒc4 ÆC0ÇC,   ÆC8ésýÿÿ‹EÔ+Çë3ÀHƒÄxA_A^A]A\_^[]ÃÌÌHƒì(ƒùþuè
 ÿÿÇ 	   ëB…Éx.;% s&HcÉH! H‹Áƒá?HÁèHÉH‹Â¶DÈ8ƒà@ëèËŸÿÿÇ 	   èX‰ÿÿ3ÀHƒÄ(ÃÌH‹ÄH‰XH‰HWHƒì0H‹úH‹ÙH…Éu.ÆB0ÇB,   H‰PðH!HèE3ÉE3À3ÒèIˆÿÿƒÈÿH‹\$HHƒÄ0_Ã‹AÁè$tè³  ëàèÀœÿÿH‹×H‹Ëè   ‹øH‹Ëè¶œÿÿ‹ÇëÄÌÌH‹ÄH‰XH‰pWHƒì0H‹úH‹ÙH…Éu%H‰PðE3ÉH!HèE3ÀÆB0ÇB,   3ÒèÍ‡ÿÿƒÈÿëU‹AƒÎÿÁè¨t=è½ÒÿÿH‹Ë‹ðèÏÔÿÿH‹ËèÕÿÿ‹ÈH‹×è  …ÀyƒÎÿëH‹K(H…Ét
èj©ÿÿHƒc( H‹Ëèý  ‹ÆH‹\$@H‹t$HHƒÄ0_ÃÌÌÌH‰\$H‰|$UH‹ìHƒì`HƒeÀ ƒ=>  ÆEÐ ÆEè ÆEð ÆEø ue ÆEèóEØHUÀè“þÿÿ€}è‹øuH‹MÀƒ¡¨  ý€}ð t‹]ìHMÀèÒƒÿÿ‰X €}ø t‹]ôHMÀè½ƒÿÿ‰X$H‹\$p‹ÇH‹|$xHƒÄ`]ÃH‰\$H‰l$H‰t$WHƒì0HcùI‹Ù‹ÏA‹ðH‹êèõïÿÿHƒøÿuÆC0ÇC,	   HƒÈÿëVD‹ÎLD$ H‹ÕH‹Èÿ
4  …Àuÿà2  ‹ÈH‹ÓèRÿÿëÐH‹D$ HƒøÿtÅH‹×LŸ ƒâ?H‹ÏHÁùHÒI‹È€dÑ8ýH‹\$@H‹l$HH‹t$PHƒÄ0_ÃÌÌÌéOÿÿÿÌÌÌ@SHƒì@H‹D$pH‹ÙHL$0H‰D$ èc
  Hƒøw‹T$0¹ýÿ  úÿÿ  GÑH…Ûtf‰HƒÄ@[ÃÌH‰\$H‰l$WATAUAVAWHƒì0H‹:3ÀM‹áI‹èL‹úL‹ñH…É„ç   H‹ÙM…À„°   L‹¬$€   8uA¸   ë8GuA¸   ëŠGöØMÀI÷ØIƒÀM‹ÌL‰l$ H‹×HL$`èº	  H‹ÐHƒøÿt{3ÀH…Òtl‹L$`ùÿÿ  v;HƒývIÁ  ÿÿA¸ Ø  ‹Á‰L$`Áè
HÿÍfAÀf‰¸ÿ  f#ÈHƒÃ¸ Ü  fÈ3Àf‰HúHƒÃHƒí…XÿÿÿI+ÞI‰?HÑûH‹ÃéŒ   H‹øf‰ëçI‰?AÆE0AÇE,*   ënH‹¬$€   H‹Ø8uA¸   ë8GuA¸   ëŠGöØMÀI÷ØIƒÀM‹ÌH‰l$ H‹×3Éèß  HƒøÿtH…ÀtŽHƒøuHÿÃHøHÿÃ3Àë¨ÆE0ÇE,*   HƒÈÿH‹\$hH‹l$pHƒÄ0A_A^A]A\_ÃÌÌL‹ÚL‹ÑM…Àu3ÀÃA·
MRA·M[A¿ƒøDI B¿DGÉƒøJ A‹ÁGÊ+ÁuE…ÉtIƒèuÄÃÌ3À8tH;Ât	HÿÀ€< uòÃÌÌÌ‹j  ÃÌf‰L$Hƒì(èú	  …ÀtLD$8º   HL$0èR
  …Àt·D$0ë¸ÿÿ  HƒÄ(ÃÌH‰\$L‰L$ WHƒì I‹ùI‹Ø‹
è°ëÿÿH‹HcL‹ÑH‹SH‹ÁHÁøL  Aƒâ?OÒI‹ÁBöDÀ8t	èë   ‹ØëÆB0ÇB,	   ƒËÿ‹èŠëÿÿ‹ÃH‹\$0HƒÄ _ÃÌ‰L$HƒìXLcÁE3ÉAƒøþuÆB8D‰J4ÆB0ÇB,	   é   …Éx`D;) sWI‹ÈL ƒá?I‹ÀHÁøHÉI‹ÂöDÈ8t4HD$`H‰T$@D‰D$xHT$0D‰D$0LL$xLD$8H‰D$8HL$pèúþÿÿë,ÆB8E3ÀD‰J43ÉÆB0H‰T$(ÇB,	   3ÒL‰L$ èS‚ÿÿƒÈÿHƒÄXÃÌÌÌH‰\$H‰t$WHƒì HcùH‹ò‹Ïè€ëÿÿHƒøÿu3ÛëZH‹o ¹   ƒÿu	@„¸È   u;ùu ö€€   tèJëÿÿ¹   H‹Øè=ëÿÿH;Ãt¾‹Ïè1ëÿÿH‹Èÿ°/  …Àuªÿ>.  ‹Ø‹ÏèYêÿÿH‹×L ƒâ?H‹ÏHÁùHÒI‹ÈÆDÑ8 …ÛtH‹Ö‹Ëè‚˜ÿÿƒÈÿë3ÀH‹\$0H‹t$8HƒÄ _ÃÌÌÌƒIÿ3ÀH‰H‰A‰AH‰AH‰A(‡AÃHƒìXft$ ƒ=  …é  f(Øf(àfsÓ4fH~Àfû¯œ  f(èfT-sœ  f/-kœ  „…  f(ÐóæófWíf/Å†/  fÛ—œ  ò\%  f/5§  „Ø  fT%ù  L‹ÈH#œ  L#ˆœ  IÑáIÁfHnÈf/%•  ‚ß   HÁè,fëãœ  fëÛœ  LT®  ò\ÊòAYÁf(Ñf(ÁLž  ò#  òëœ  òYÚòYÊòYÂf(àòXóœ  òX»œ  òYàòYÚòYÈòXÇœ  òXÊòYÜòXËò-3œ  òYë›  òYîò\éòAÁH¶¥  òÂò%ù›  òYæòXÄòXÕòXÂfot$ HƒÄXÃffffff„     òè›  ò\ð›  òXÐf(Èò^Êò%ìœ  ò-  f(ðòYñòXÉf(ÑòYÑòYâòYêòX%°œ  òX-Èœ  òYÑòYâòYÒòYÑòYêòL›  òXåò\æò5,›  f(ØfÛ°œ  ò\ÃòXàf(Ãf(ÌòYâòYÂòYÎòYÞòXÄòXÁòXÃfot$ HƒÄXÃfë1›  ò\)›  òêfÛš  fH~ÐfsÕ4fú-«›  óæõéñýÿÿfuòš  D‹?œ  èê  ëH„     òš  D‹%œ  èÌ  ë*ff„     H;Ù™  tH;À™  tÎHç™  fHnÀffot$ HƒÄXÃD  H3ÀÅásÐ4Äáù~ÀÅáûË™  ÅúæóÅùÛ-™  Åù/-‡™  „A  ÅÑïíÅù/Å†ã  ÅùÛ»™  Åû\%Cš  Åù/5Ëš  „Ž  ÅùÛ­™  ÅùÛµ™  ÅásóÅáÔÉÄáù~ÈÅÙÛ%ÿš  Åù/%·š  ‚±   HÁè,Åéëš  Åñëý™  Lv«  Åó\ÊÄÁsYÁLE›  ÅóYÁÅûIš  Åû-š  Äâñ©(š  Äâñ©-¿™  òàÄâñ©š  ÅûYàÄâÑ¹ÈÄâá¹ÌÅóY,™  Åû-d™  ÄâÉ«éòAÁHò¢  òÂÅëXÕÄâÉ¹0™  ÅûXÂÅùot$ HƒÄXÃÅû8™  Åû\@™  ÅëXÐÅû^ÊÅû%@š  Åû-Xš  ÅûYñÅóXÉÅóYÑÄâé©%š  Äâé©-*š  ÅëYÑÅÛYâÅëYÒÅëYÑÅÓYêÅÛXåÅÛ\æÅùÛ&š  Åû\ÃÅÛXàÅÛY†˜  ÅÛY%Ž˜  ÅãY†˜  ÅãYn˜  ÅûXÄÅûXÁÅûXÃÅùot$ HƒÄXÃÅéëŸ˜  Åë\—˜  ÅÑsÒ4ÅéÛú—  Åù(ÂÅÑú-™  Åúæõé@þÿÿD  u.Åûv—  D‹¯™  èZ  Åùot$ HƒÄXÃfffffff„     Åûh—  D‹…™  è,  Åùot$ HƒÄXÃH;9—  t'H; —  tÎHG—  fHnÈD‹S™  èö  ë@ Åùot$ HƒÄXÃÌHƒ" H‹ÁÃHƒ! HƒÈÿÆB0ÇB,*   Ã@SUVWATAVAWHƒì@H‹òö  H3ÄH‰D$0H‹´$    L E3ÛH=I³  M…ÉH‹ÂL‹âMEÑH…ÒAkHEúD‹ýMEøH÷ØMöL#ñM…ÿuHÇÀþÿÿÿéM  fE9ZuhD¶HÿÇE„ÉxM…ötE‰E„ÉA•ÃI‹Ãé#  AŠÁ$à<ÀuA°ëAŠÁ$ð<àuA°ëAŠÁ$ø<ð…ï   A°A¶À¹   +È‹ÕÓâAŠØ+ÕA#Ñë)EŠBA‹AŠZA@þ<‡¼   @:Ý‚³   A:Øƒª   ¶ëI;ïD‹ÍMCÏë¶HÿÇŠÁ$À<€…‰   ‹Âƒá?Áà‹ÑÐH‹ÇI+ÄI;Ár×L;ÍsA¶ÀA*ÙfA‰B¶ÃfA‰BA‰éÿÿÿ‚ (ÿÿ=ÿ  vDú   s<A¶ÀÇD$ €   ÇD$$   ÇD$(   ;T„rM…ötA‰÷ÚI‹ÒHÉH#Íè4þÿÿëH‹ÖI‹Êè/þÿÿH‹L$0H3ÌèÎÿÿHƒÄ@A_A^A\_^][ÃÌÌÌ@SHƒì@H‹ïþ  3ÛHƒøþu.H‰\$0DC‰\$(H#—  E3ÉD‰D$ º   @ÿ`'  H‰¹þ  Hƒøÿ•Ã‹ÃHƒÄ@[ÃÌÌHƒì(H‹þ  Hƒùýwÿ)'  HƒÄ(ÃH‹ÄH‰XH‰hH‰pWHƒì@Hƒ`Ø I‹øM‹È‹òD‹ÂH‹éH‹ÑH‹[þ  ÿ•$  ‹Ø…Àujÿy%  ƒøu_H‹=þ  HƒùýwÿÉ&  Hƒd$0 Ht–  ƒd$( A¸   E3ÉD‰D$ º   @ÿ¦&  Hƒd$  L‹ÏH‹ÈH‰óý  D‹ÆH‹Õÿ'$  ‹ØH‹l$X‹ÃH‹\$PH‹t$`HƒÄ@_ÃÌÌH‹ÄSHƒìPò„$€   ‹ÙòŒ$ˆ   ºÀÿ  ‰HÈH‹Œ$   ò@àòHèòXØL‰@Ðè  HL$ è&Áÿÿ…Àu‹Ëè³  òD$@HƒÄP[ÃÌÌÌH‰\$H‰t$WHƒì ‹ÙH‹òƒã‹ùöÁt@„öy¹   èC  ƒã÷ëW¹   @„ùtHºæ	s
è(  ƒãûë<@öÇtHºæ
s¹   è  ƒãþë @öÇtHºæs@öÇt
¹   èê  ƒãý@öÇtHºæs¹    èÐ  ƒãïH‹t$83À…ÛH‹\$0”ÀHƒÄ _ÃÌÌH‹ÄUSVWAVHhÉHìà   )pÈH‹¹ò  H3ÄH‰Eï‹òL‹ñºÀÿ  ¹€  A‹ùI‹Øèø  ‹M_H‰D$HH‰\$@òD$@H‹T$HòD$@èáþÿÿòuw…Àu@ƒ}u‹E¿ƒàãòu¯ƒÈ‰E¿D‹E_HD$@H‰D$(HT$HHEoD‹ÎHL$PH‰D$ è  èw¿ÿÿ„Àt4…ÿt0H‹D$HM‹ÆòD$@‹Ïò]o‹UgH‰D$0òD$(òt$ èõýÿÿë‹Ïèø  H‹L$HºÀÿ  è9  òD$@H‹MïH3ÌèW ÿÿ(´$Ð   HÄà   A^_^[]ÃÌ@SHƒìE3À3ÉD‰Þ EHA‹Á¢‰$¸  ‰L$#È‰\$‰T$;Èu,3ÉÐHÁâ HÐH‰T$ H‹D$ D‹ž $<EDÁD‰ D‰Œ 3ÀHƒÄ[ÃHƒì8H•«  A¹   H‰D$ è   HƒÄ8ÃH‹ÄHƒìh)pè(ñA‹Ñ(ØAƒèt*AƒøuiD‰@ØWÒòPÐE‹Èò@ÈÇ@À!   Ç@¸   ë-ÇD$@   WÀòD$8A¹   ò\$0ÇD$("   ÇD$    H‹Œ$   òt$xL‹D$xè¿ýÿÿ(Æ(t$PHƒÄhÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌff„     Hƒì®$‹$HƒÄÃ‰L$®T$Ã®\$¹Àÿÿÿ!L$®T$Ãf.ªª  sf.¨ª  v
òH-ÈòH*ÁÃÌÌÌHƒìHƒd$0 H‹D$xH‰D$(H‹D$pH‰D$ è   HƒÄHÃÌH‹ÄH‰XH‰pH‰x H‰HUH‹ìHƒì H‹ÚA‹ñ3Ò¿  À‰QH‹E‰PH‹E‰PAöÀtH‹E¿  ÀƒHAöÀtH‹E¿“  ÀƒHAöÀtH‹E¿‘  ÀƒHAöÀtH‹E¿Ž  ÀƒHAöÀtH‹E¿  ÀƒHH‹MH‹HÁèÁà÷Ð3Aƒà1AH‹MH‹HÁè	Áà÷Ð3Aƒà1AH‹MH‹HÁè
Áà÷Ð3Aƒà1AH‹MH‹HÁèÀ÷Ð3Aƒà1A‹H‹MHÁè÷Ð3Aƒà1Aèß  H‹Ð¨tH‹MƒIöÂtH‹MƒIöÂtH‹EƒHöÂtH‹EƒHöÂ tH‹EƒH‹¹ `  H#Át>H=    t&H= @  tH;Áu0H‹Eƒë'H‹Eƒ þH‹EƒëH‹Eƒ ýH‹EƒëH‹Eƒ üH‹Eæÿ  Áæ  þÿH‹E	0H‹EH‹u8ƒH ƒ}@ t3H‹Eºáÿÿÿ!P H‹E0‹H‹E‰HH‹EƒH`H‹E!P`H‹E‹‰HPëHH‹MA¸ãÿÿÿ‹A A#ÀƒÈ‰A H‹E0H‹H‹EH‰HH‹EƒH`H‹U‹B`A#ÀƒÈ‰B`H‹EH‹H‰PPèä   3ÒLM‹ÏDBÿ‚  H‹MöAtHº3öAtHº3	öAtHº3
öAtHº3öAtHº3‹ƒàt0ƒètƒètƒøu(H `  ëHº3Hº+ëHº3Hº+ëH#ÿŸÿÿƒ}@ t‹AP‰ëH‹APH‰H‹\$8H‹t$@H‹|$HHƒÄ ]ÃHƒì(ƒétƒétƒùuè˜ˆÿÿÇ "   ëè‹ˆÿÿÇ !   HƒÄ(Ã@SHƒì èEüÿÿ‹Øƒã?èUüÿÿ‹ÃHƒÄ [ÃÌÌÌH‰\$H‰t$ WHƒì H‹ÚH‹ùèüÿÿ‹ð‰D$8‹Ë÷ÑÉ€ÿÿ#È#ûÏ‰L$0€=Eö   t%öÁ@t èùûÿÿë!Æ0ö   ‹L$0ƒá¿èäûÿÿ‹t$8ëƒá¿èÖûÿÿ‹ÆH‹\$@H‹t$HHƒÄ _Ã@SHƒì H‹Ùè¦ûÿÿƒã?Ã‹ÈHƒÄ [é¥ûÿÿÌHƒì(è‹ûÿÿƒà?HƒÄ(ÃÌÌÌ@SHƒì ÷P§     „Ž   è‘   »   „ÀtH‹ H ÿh  ëóH‹ H…ÀuòðH±ÿ ué‹ÿ Ã‰÷ ;ÃuHð ¹   è
  è1   „ÀtH‹Â HÃ HƒÄ [Hÿ%  HÇ¬     HƒÄ [ÃÌÌH‰\$WHƒì H‹{ ¿   H;ÇtvH…ÀulH¥  ÿ  H‹ØH…ÀuH‹ßë8H£¥  H‹ËÿÒ  H…ÀtæH¦¥  H‰7 H‹Ëÿ¶  H…ÀtÊH‰* 3ÀðH± uH;ßtH;Ç•Àë@ŠÇë2ÀH‹\$0HƒÄ _ÃÌÌH‰\$WHì€   H‹úA¸0   HT$ H‹Ùÿx  H…ÀuHÍ)öD$DDtRHL$Pÿl  D‹L$T3ÒE‹ÁI÷ØL#ÃAIÿ‹Á#Ë#ÇÁHÿÈIÁI÷ñ3ÒH‹ÈH‹ÇI÷ñHÈ‹Á…ÉtðAƒ MÁHƒèuòH‹œ$   HÄ€   _ÃH‰\$H‰t$H‰|$Lc"ªþÿH5ß©þÿLÆH‹ÚH‹ùAƒ¸„   vHE‹ð   E3ÉE…Òt9A·HE·XHƒÁE‹T2IÈE…Ût‹AD;Ðr
‹QÂD;ÐrAÿÁHƒÁ(E;Ërâ3ÀH‹\$H‹t$H‹|$Ã‰‹A$‰‹AHÆëáÌÌÌH‹ÄH‰XH‰pWHƒì H‹ú‹ñHP HHèBÿÿÿH‹ØH…ÀuÇ   ëLƒ=§
  u'÷D$H   €Ç“
    u¹   Í)‹T$@H‹Ëèjþÿÿ‹T$@L‹ÏD‹ÆH‹Ëÿû  …ÀuHÍ)H‹\$0H‹t$8HƒÄ _ÃÌÌHƒì(÷B¤     t~è‡ýÿÿ„ÀtH‹
 H
 ÿc  ëóH‹
 H…ÀuòHðH±÷	 uæƒö	 ÿu‹ò	 HT$0èÿÿÿè3ýÿÿ„ÀtH‹Ä	 HÅ	 ÿ  ëHÇ²	     HƒÄ(ÃÌH‰\$H‰t$H‰|$ UATAUAVAWH‹ìHƒìpL‹âL‹ñè2üÿÿA‹FL¨þÿE‹~IÀA‹VMøA‹NIÐE‹nIÈHƒeà MèHƒeè WÀƒeð E‹FH‰EÈA‹D‰E0ÇE°H   L‰u¸L‰eÀEÐ¨u)HE°H‰E0èÔþÿÿ3ÒLM0¹W mÀDBÿ  3Àé  I‹?I‹ôH+òHÁþ‹öH‹ñHÁè?ƒð‰EÐt‹ñHa§þÿHÁH‰EØë·ñ‰EØH‹ˆ£  3ÛH…ÀtHU°3Éÿõ  H‹ØH…À…v  H‹b£  H…ÿ…¡   H…ÀtHU°OÿÇ  H‹øH…ÀulH‹MÈE3À3Òÿx  H‹øH…ÀuUÿò  ‰EðH‹¸¡  H…ÀtHU°Oÿ†  H‹øH…Àu+HE°H‰E0èáýÿÿ3ÒLM0¹~ mÀDBÿœ  H‹Eèé  H‹ÇI‡H;Çu	H‹Ïÿç  H‹¸¢  H‰}àH…ÀtHU°¹   ÿ   H‹ØH…Û…   A9^t-A9^t'HcG<<8PE  u‹M09L8uH;|80u
I‹\õ H…ÛujH‹UØH‹Ïÿü  H‹ØH…ÀuUÿ  ‰EðH‹Ü   H…ÀtHU°Kÿª  H‹ØH…Àu+HE°H‰E0èýÿÿ3ÒLM0¹ mÀDBÿÀ  èÛùÿÿH‹]èI‰$H‹ì¡  H…Àtƒeð HU°¹   H‰}àH‰]èÿL  è·üÿÿH‹ÃL\$pI‹[8I‹s@I‹{HI‹ãA_A^A]A\]ÃÌÌHƒì(M‹A8H‹ÊI‹Ñè   ¸   HƒÄ(ÃÌÌÌ@SE‹H‹ÚAƒãøL‹ÉAö L‹ÑtA‹@McP÷ØLÑHcÈL#ÑIcÃJ‹H‹C‹HH‹CöDt¶DƒàðLÈL3ÊI‹É[é‰óþÿÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì I‹Y8H‹òM‹ðH‹éI‹ÑH‹ÎI‹ùLCèlÿÿÿ‹E$föØ¸   EÀA÷ØDÀD…CtL‹ÏM‹ÆH‹ÖH‹Íè0ÿÿH‹\$0H‹l$8H‹t$@H‹|$HHƒÄ A^ÃÌÌÌÌÌÌÌÌÌLcA<E3ÉLÁL‹ÒA·@E·XHƒÀIÀE…Ût‹PL;Òr
‹HÊL;ÑrAÿÁHƒÀ(E;Ërâ3ÀÃÌÌÌÌÌÌÌÌÌÌÌÌH‰\$WHƒì H‹ÙH=ü£þÿH‹Ïè4   …Àt"H+ßH‹ÓH‹Ïè‚ÿÿÿH…Àt‹@$Áè÷Ðƒàë3ÀH‹\$0HƒÄ _ÃÌÌÌ¸MZ  f9uHcQ<HÑ:PE  u3À¹  f9J”ÀÃ3ÀÃÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì M‹Q8H‹òM‹ðH‹éI‹ÑH‹ÎI‹ùA‹HÁãIÚLCèþÿÿ‹E$föØ¸   Ò÷ÚÐ…StL‹ÏM‹ÆH‹ÖH‹ÍèÿÿH‹\$0H‹l$8H‹t$@H‹|$HHƒÄ A^ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌff„     HƒìL‰$L‰\$M3ÛLT$L+ÐMBÓeL‹%   M;ÓsfAâ ðM› ðÿÿAÆ M;ÓuðL‹$L‹\$HƒÄÃÌÌH‹ÄH‰XH‰hH‰pH‰x AVHƒì I‹Y8H‹òM‹ðH‹éI‹ÑH‹ÎI‹ùLCè$ýÿÿ‹E$föØ¸   EÀA÷ØDÀD…CtL‹ÏM‹ÆH‹ÖH‹Íè`ÿÿH‹\$0H‹l$8H‹t$@H‹|$HHƒÄ A^ÃÌH‰\$WHƒì I‹øH‹ÙèçÿÿöCfu;csmàuƒøtH‹\$0HƒÄ _Ãè*ÿÿH‰X è‡*ÿÿH‰x(èyÿÿÌÌÌÌÌÌÌÌÌÌÌÌff„     H+ÑIƒør"öÁtfŠ:u,HÿÁIÿÈöÁuîM‹ÈIÁéuM…ÀtŠ:uHÿÁIÿÈuñH3ÀÃÀƒØÿÃIÁét7H‹H;u[H‹AH;DuLH‹AH;Du=H‹AH;Du.HƒÁ IÿÉuÍIƒàM‹ÈIÁét›H‹H;uHƒÁIÿÉuîIƒàëƒHƒÁHƒÁHƒÁH‹
HÈHÉH;ÁÀƒØÿÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌff„     ÿàÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌff„     ÿ%z  ÌÌÌÌÌÌÌÌÌÌ@UHƒì H‹ê‹E0ƒà…Àtƒe0þH‹M@è°ÖþÿHƒÄ ]ÃÌÌÌÌÌÌÌÌÌÌHŠ(   é¤ÃþÿÌÌÌÌHŠ    éÄÃþÿH‰T$UHƒì H‹êH¸        HƒÄ ]ÃÌÌÌÌÌÌÌHŠ    édÃþÿÌÌÌÌHŠP   é„ÃþÿÌÌÌÌH‹Š@   ét¿þÿH‹Š@   HƒÁéd¿þÿH‹Š@   HÁ  é³þÿH‹Š@   HÁ`  éÕþÿHŠ(   é2¿þÿÌÌH‹Š0   é¤ÌþÿH‹Š(   é˜ÌþÿHŠ8   é¼ÕþÿH‹Š    é€ÌþÿHŠ@   étÌþÿH‹Š    éhÌþÿHŠ@   éŒÌþÿÌÌÌÌÌÌÌÌÌÌÌÌH‰T$UHƒì H‹êH‹M H‹ÿPH‹ÐH×›  èz¸þÿH‰T$UHƒì H‹êHM  H¶›  èY¸þÿÌÌÌÌÌÌÌÌHŠ0   éTÔþÿHŠh   é8ÂþÿHŠP   é¬ÔþÿHŠð   é ²þÿH‰T$SUHƒì8H‹êH‹¸   H‹•  H…ÒtCH‹  ÿrí  …Àt'H‹•  Hà  è«´þÿH,É  Hà  èlÿÿÌHÇ…      H‹CH‰…  H‹C H‰…  ¶C(ˆ…  HÇC    HÇC     ÆC( H¸        HƒÄ8][ÃÌÌÌÌÌÌÌ@UHƒì H‹êº€  H‹MhèéìþÿHƒÄ ]Ã@UHƒì H‹ê‹E ƒà…Àtƒe þHMHèc½þÿHƒÄ ]Ã@UHƒì H‹ê‹E ƒà…Àtƒe ýHM0è=½þÿHƒÄ ]ÃÌÌÌÌÌÌÌH‹Šx  é¤ÊþÿH‹Šp  é˜ÊþÿH‹Šˆ  éŒÊþÿH‹Š€  é€ÊþÿH‹Šp  étÊþÿH‹Šˆ  éhÊþÿH‹Šˆ  é\ÊþÿH‹Š`   éPÊþÿ@UHƒì H‹êº   H‹MPèìþÿHƒÄ ]ÃÌÌÌH‰T$UHƒì H‹êH‹M èZ»þÿH¸        HƒÄ ]ÃÌÌÌÌÌÌÌÌÌHŠ(   é4ÓþÿÌÌÌÌHŠ0   é$ÀþÿH‰T$UHƒì0H‹êH‹    è»þÿH¸        HƒÄ0]ÃÌ@UH‹êH‹3É8  À”Á‹Á]ÃÌ@UHƒì H‹êŠM@HƒÄ ]é‹îþÿÌ@UHƒì H‹êŠM èyîþÿHƒÄ ]ÃÌ@UHƒì H‹êHƒÄ ]éÚìþÿÌ@UHƒì0H‹êH‹‹H‰L$(‰T$ LïþÿL‹Ep‹UhH‹M`èìþÿHƒÄ0]ÃÌHŠ0   é[ÒþÿH‹Š(   éOÒþÿ@SUWHƒì@H‹êH‰MPH‰MHè¿$ÿÿH‹€   H‰HpH‹½˜   H‹_è¤$ÿÿH‰X`H‹EHH‹H‹Y8è$ÿÿH‰XhH‹MHÆD$8Hƒd$0 ƒd$( H‹…    H‰D$ L‹ÏL‹…   H‹•ˆ   H‹	èÿDÿÿèN$ÿÿHƒ`p ÇE@   ¸   HƒÄ@_][ÃÌ@SUWHƒì@H‹êH‰MPH‰MHè$ÿÿH‹€   H‰HpH‹½˜   H‹_è$ÿÿH‰X`H‹EHH‹H‹Y8èí#ÿÿH‰Xhèä#ÿÿ‹¸   ‰HxH‹MHÆD$8Hƒd$0 ƒd$( H‹…    H‰D$ L‹ÏL‹…   H‹•ˆ   H‹	èVDÿÿè#ÿÿHƒ`p ÇE@   ¸   HƒÄ@_][ÃÌ@SUHƒì(H‹êH‰M8H‰M0€}X tlH‹E0H‹H‰M(H‹E(8csmàuUH‹E(ƒxuKH‹E(x  “tH‹E(x !“tH‹E(x "“u$è#ÿÿH‹M(H‰H H‹E0H‹Xè	#ÿÿH‰X(èqÿÿÇE     ‹E HƒÄ(][ÃÌ@UHƒì@H‹êèß"ÿÿÇ@xþÿÿÿHƒÄ@]ÃÌ@UHƒì H‹êH‰MXLE H‹•¸   èDKÿÿHƒÄ ]ÃÌ@SUHƒì(H‹êH‹M8èiÿÿƒ}  uHH‹¸   ;csmàu9ƒ{u3{  “t{ !“t	{ "“uH‹K(èJÿÿ…Àt²H‹ËèÈÿÿèF"ÿÿH‹À   H‰H è6"ÿÿH‹M@H‰H(HƒÄ(][ÃÌ@UHƒì H‹êH‰€   LM D‹…è   H‹•ø   èKÿÿHƒÄ ]ÃÌ@SUHƒì(H‹êH‹MHè´ÿÿƒ}  uHH‹ø   ;csmàu9ƒ{u3{  “t{ !“t	{ "“uH‹K(è•ÿÿ…Àt²H‹Ëèÿÿè‘!ÿÿH‹M0H‰H è„!ÿÿH‹M8H‰H(èw!ÿÿ‹à   ‰HxHƒÄ(][ÃÌ@UHƒì H‹êèœÿÿHƒÄ ]ÃÌ@UHƒì H‹êèB!ÿÿƒx0 ~è7!ÿÿÿH0HƒÄ ]ÃÌ@UHƒì0H‹êècÿÿHƒÄ0]ÃÌ@UHƒì0H‹êè	!ÿÿƒx0 ~èþ ÿÿÿH0HƒÄ0]ÃÌ@UHƒì H‹ê3ÉHƒÄ ]éc}ÿÿÌ@UHƒì H‹êH‹EH‹HƒÄ ]éI}ÿÿÌ@UHƒì H‹êH‰M(H‹‹‰M$3Àùcsmà”À‰E ‹E HƒÄ ]ÃÌ@UHƒì H‹êH‹EX‹HƒÄ ]é}ÿÿÌ@UHƒì H‹êH‹Eh‹HƒÄ ]éè|ÿÿÌ@UHƒì H‹ê¹   HƒÄ ]éÏ|ÿÿÌ@UHƒì H‹ê¹   HƒÄ ]é¶|ÿÿÌ@UHƒì H‹ê€}p t¹   èœ|ÿÿHƒÄ ]ÃÌ@UHƒì H‹êH‹MHH‹	HƒÄ ]é’pÿÿÌ@UHƒì H‹êH‹…˜   ‹HƒÄ ]é]|ÿÿÌ@UHƒì H‹ê¹   HƒÄ ]éD|ÿÿÌ@UHƒì H‹ê¹   HƒÄ ]é+|ÿÿÌ@UHƒì H‹êH‹EH‹HƒÄ ]éñÃÿÿÌ@UHƒì0H‹ê‹M`HƒÄ0]éÚÃÿÿÌ@UHƒì0H‹êH‹M@HƒÄ0]éúoÿÿÌ@UHƒì H‹êH‹8  Àt8  Àt3Àë¸   HƒÄ ]ÃÌÌÌÌÌÌÌÌÌÌ@UHƒì H‹êH‹3É8  À”Á‹ÁHƒÄ ]ÃÌ@SHƒì H‹ã÷  H…Ût6H‰|$0¿ÿÿÿÿ‹ÇðÁCƒøuH‹H‹ËÿðÁ{ƒÿu	H‹H‹ËÿPH‹|$0HƒÄ [Ã                  4     8:     &:     :     :     t4     ˆ4     ¢4     ¶4     Ò4     ð4     5     5     45     H5     Z5     n5     ˆ5     ž5     ´5     Î5     ä5     ø5     6     ,6     J6     V6     d6     r6     |6     Ž6     œ6     °6     Â6     Ú6     ê6     ú6     
7     "7     :7     R7     z7     †7     ”7     ¢7     ¬7     º7     Ì7     Ø7     æ7     ü7     8     8     *8     68     J8     Z8     l8     v8     ‚8     Ž8      8     ²8     È8     Þ8     ø8     9     "9     49     D9     R9     f9     x9     „9     ’9     ¢9     ¶9     Â9     Ø9     ê9     ø9     H:             :4     L4             \ €   \ €    _€   @_€   @_€           À €             €                   <k €   ¼× €   Ð)€   `N€                   `ä €   8K€   ÜØ €                                   node.exe        ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€   ŒR €           àO€   €P€   ø€   ° €    €   p€   ° €    €   bad allocation  ð€   ° €    €   x€   ° €    €   ø€   ° €    €   €€   ° €    €   °t€   Èt€   àt€   ðt€   u€    u€   @u€                  $          device or resource busy invalid argument        no such process not enough memory       operation not permitted resource deadlock would occur   resource unavailable try again  P€   @d €    €   :       Ø€   @d €    €   h€   d €   Tg €   g €   œf €   ¨f €   Äf €   generic 8€   \g €   i €   i €   4i €   \ €              (                                                                                                                !   '   '      2      5      7      C      P      R      W      m       n      o   &   p      y   Š   {      ƒ      Ž      ‘   )   ª      ·      Î   &   Ô   '     Š        ã  i   æ     ó     ô     õ     Õ     ´  Š   a	     d	     )     '     '  	   '     '     &'     ('     3'  Œ   4'  p   5'  g   6'  €   7'  m   8'  s   9'  ˆ   :'  {   ;'  ‡   ='  ‚   ?'  f   @'  d   A'  e   B'  t   C'  v   D'  u   E'  j   F'  l   G'  w   H'  q   I'  ~   L'  Š   M'  k   O'  &   Q'  n            }€   f       ¨}€   d       È}€   e       Ø}€   q       ð}€          ~€   !        ~€          8~€   	       H~€   h       `~€           p~€   j       €~€   g       ˜~€   k       ¸~€   l       Ð~€          è~€   m        €          °t€   )        €          8€          P€          `€   &       p€   (       ˆ€   n        €   o       ¸€   *       Ð€          è€          €€          Èt€           €€          0€€          @€€   s       P€€   t       `€€   u       p€€   v       €€€   w       ˜€€   
       ¨€€   y       À€€   '       È€€   x       à€€   z       ø€€   {       €           €   |       8€          P€          p€          €€          àt€           €   €       °€   }       À€   ~       Ð€          ðt€          à€   i       ð€   p       ‚€          u€   ‚        ‚€   Œ       8‚€   …       P‚€          `‚€   †       x‚€   ‡       ˆ‚€           ‚€   $        u€          @u€   "       ¸‚€          Ð‚€   ‰       è‚€   ‹       ø‚€   Š       ƒ€          ƒ€          8ƒ€          Pƒ€   r       `ƒ€   „       €ƒ€   ˆ       ƒ€   success address family not supported    address in use  address not available   already connected       argument list too long  argument out of domain  bad address     bad file descriptor     bad message     broken pipe     connection aborted      connection already in progress  connection refused      connection reset        cross device link       destination address required    directory not empty     executable format error file exists     file too large  filename too long       function not supported  host unreachable        identifier removed      illegal byte sequence   inappropriate io control operation      interrupted     invalid seek    io error        is a directory  message size    network down    network reset   network unreachable     no buffer space no child process        no link no lock available       no message available    no message      no protocol option      no space on device      no stream resources     no such device or address       no such device  no such file or directory       not a directory not a socket    not a stream    not connected   not supported   operation canceled      operation in progress   operation not supported operation would block   owner dead      permission denied       protocol error  protocol not supported  read only file system   result out of range     state not recoverable   stream timeout  text file busy  timed out       too many files open in system   too many files open     too many links  too many symbolic link levels   value too large wrong protocol type     unknown error                                                                                                                                                                                                                                                                      k e r n e l 3 2 . d l l         GetCurrentPackageId     GetSystemTimePreciseAsFileTime  GetTempPath2W   ÿþÿýÿþÿüÿþÿýÿþÿû         )  €                           “                                                                                                                            )  €                           “                                                                                                                    $y €   ¸€   ° €    €   bad exception           Ð€          à€          è€          ø€   	       Ž€   
       Ž€   
       (Ž€          8Ž€   	       DŽ€          PŽ€   	       `Ž€   	       pŽ€   	       €Ž€          ˆŽ€   
       ˜Ž€          ¨Ž€   	       ˆü€           ´Ž€          ÀŽ€          ÈŽ€          ÌŽ€          ÐŽ€          ÔŽ€          ØŽ€          ÜŽ€          àŽ€          èŽ€          ôŽ€          øŽ€          üŽ€           €          €          €          €          €          €          €          €           €          $€          (€          ,€          0€          4€          8€          <€          @€          D€          H€          L€          P€          T€          X€          \€          `€          d€          h€          l€          p€   	       €€   	       €          ˜€          ¨€          À€          Ð€          è€          €          (€          H€          h€          ˆ€   #       °€          Ð€           ø€          ‘€   &       @‘€          `‘€          p‘€          t‘€          €‘€          ‘€   #       ´‘€          À‘€   	       Ð‘€          à‘€           ’€           ’€   %       H’€   $       p’€   %       ˜’€   +       È’€          è’€           “€   "       8“€   (       h“€   *       ˜“€          ¸“€          È“€          à“€          ˆü€           ð“€          ”€          (”€          @”€          `”€          ˆü€           øŽ€          €          @€          8€          €          À€          €”€          __based(        __cdecl __pascal        __stdcall       __thiscall      __fastcall      __vectorcall    __clrcall   __eabi      __swift_1       __swift_2       __swift_3       __ptr64 __restrict      __unaligned     restrict(    new         delete =   >>  <<  !   ==  !=  []      operator    ->  *   ++  --  -   +   &   ->* /   %   <   <=  >   >=  ,   ()  ~   ^   |   &&  ||  *=  +=  -=  /=  %=  >>= <<= &=  |=  ^=  `vftable'       `vbtable'       `vcall' `typeof'        `local static guard'    `string'        `vbase destructor'      `vector deleting destructor'    `default constructor closure'   `scalar deleting destructor'    `vector constructor iterator'   `vector destructor iterator'    `vector vbase constructor iterator'     `virtual displacement map'      `eh vector constructor iterator'        `eh vector destructor iterator' `eh vector vbase constructor iterator'  `copy constructor closure'      `udt returning' `EH `RTTI       `local vftable' `local vftable constructor closure'  new[]       delete[]       `omni callsig'  `placement delete closure'      `placement delete[] closure'    `managed vector constructor iterator'   `managed vector destructor iterator'    `eh vector copy constructor iterator'   `eh vector vbase copy constructor iterator'     `dynamic initializer for '      `dynamic atexit destructor for '        `vector copy constructor iterator'      `vector vbase copy constructor iterator'        `managed vector copy constructor iterator'      `local static thread guard'     operator ""     operator co_await       operator<=>      Type Descriptor'        Base Class Descriptor at (      Base Class Array'       Class Hierarchy Descriptor'     Complete Object Locator'       `anonymous namespace'   °”€   ð”€   0•€   a p i - m s - w i n - c o r e - f i b e r s - l 1 - 1 - 1       a p i - m s - w i n - c o r e - s y n c h - l 1 - 2 - 0         k e r n e l 3 2         a p i - m s -          FlsAlloc               FlsFree        FlsGetValue            FlsSetValue           InitializeCriticalSectionEx               À             À           –  À             À           Ž  À             À             À           ‘  À           ’  À           “  À           ´ À           µ À                         	       "“                   8            "“   T            ` 0          m s c o r e e . d l l   CorExitProcess  "“   T                            "“   T              (          èÔ €           4Õ €           l€   €    Õ €    Õ €   ä €   ôä €   Ô€   ð€           tÕ €   ¬â €   èâ €   ô€   0	€   øþ €    Õ €   4û €                    Õ €           ¼Õ €           |Õ €    Õ €   $Õ €   üÔ €    Õ €                                    	               	      
                                                !      5      A      C      P      R      S      W      Y      l      m       p      r   	   €   
      
   ‚   	   ƒ      „      ‘   )   ž      ¡      ¤      §      ·      Î      ×      Y  *                °œ€   ´œ€   ¸œ€   ¼œ€   Àœ€   Äœ€   Èœ€   Ìœ€   Ôœ€   àœ€   èœ€   øœ€   €   €   €    €   $€   (€   ,€   0€   4€   8€   <€   @€   D€   H€   P€   X€   d€   l€   ,€   t€   |€   „€   €    €   ¨€   ¸€   Ä€   È€   Ð€   à€   ø€          ž€   ž€   ž€    ž€   (ž€   0ž€   8ž€   @ž€   Pž€   `ž€   pž€   ˆž€    ž€   °ž€   Èž€   Ðž€   Øž€   àž€   èž€   ðž€   øž€    Ÿ€   Ÿ€   Ÿ€   Ÿ€    Ÿ€   (Ÿ€   8Ÿ€   PŸ€   `Ÿ€   èž€   pŸ€   €Ÿ€   Ÿ€    Ÿ€   ¸Ÿ€   ÈŸ€   àŸ€   ôŸ€   üŸ€    €     €   H €   ` €   Sun Mon Tue Wed Thu Fri Sat Sunday  Monday      Tuesday Wednesday       Thursday    Friday      Saturday    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec     January February    March   April   June    July    August      September       October November        December    AM  PM      MM/dd/yy        dddd, MMMM dd, yyyy     HH:mm:ss        S u n   M o n   T u e   W e d   T h u   F r i   S a t   S u n d a y     M o n d a y     T u e s d a y   W e d n e s d a y       T h u r s d a y         F r i d a y     S a t u r d a y         J a n   F e b   M a r   A p r   M a y   J u n   J u l   A u g   S e p   O c t   N o v   D e c   J a n u a r y   F e b r u a r y         M a r c h       A p r i l       J u n e         J u l y         A u g u s t     S e p t e m b e r       O c t o b e r   N o v e m b e r         D e c e m b e r     A M     P M         M M / d d / y y         d d d d ,   M M M M   d d ,   y y y y   H H : m m : s s         e n - U S        €     €   ° €   À €   j a - J P       z h - C N       k o - K R       z h - T W       €¡€   À¡€   ø¡€   0¢€   €¢€   à¢€   0£€   ð”€   p£€   °£€   ð£€   0¤€   €¤€   à¤€   0¥€   €¥€   0•€   ˜¥€   °¥€   À¥€   ¦€           a p i - m s - w i n - c o r e - d a t e t i m e - l 1 - 1 - 1   a p i - m s - w i n - c o r e - f i l e - l 1 - 2 - 4   a p i - m s - w i n - c o r e - f i l e - l 1 - 2 - 2   a p i - m s - w i n - c o r e - l o c a l i z a t i o n - l 1 - 2 - 1           a p i - m s - w i n - c o r e - l o c a l i z a t i o n - o b s o l e t e - l 1 - 2 - 0         a p i - m s - w i n - c o r e - p r o c e s s t h r e a d s - l 1 - 1 - 2       a p i - m s - w i n - c o r e - s t r i n g - l 1 - 1 - 0       a p i - m s - w i n - c o r e - s y s i n f o - l 1 - 2 - 1     a p i - m s - w i n - c o r e - w i n r t - l 1 - 1 - 0         a p i - m s - w i n - c o r e - x s t a t e - l 2 - 1 - 0       a p i - m s - w i n - r t c o r e - n t u s e r - w i n d o w - l 1 - 1 - 0     a p i - m s - w i n - s e c u r i t y - s y s t e m f u n c t i o n s - l 1 - 1 - 0             e x t - m s - w i n - n t u s e r - d i a l o g b o x - l 1 - 1 - 0             e x t - m s - w i n - n t u s e r - w i n d o w s t a t i o n - l 1 - 1 - 0     a d v a p i 3 2         k e r n e l b a s e     n t d l l       a p i - m s - w i n - a p p m o d e l - r u n t i m e - l 1 - 1 - 2     u s e r 3 2     e x t - m s -          AreFileApisANSI             LCMapStringEx         LocaleNameToLCID       AppPolicyGetProcessTerminationMethod                                                                                                                                                                                                                                                                                              ( ( ( ( (                                     H                „ „ „ „ „ „ „ „ „ „                                        ‚ ‚ ‚ ‚ ‚ ‚                                                                                                                                                                                                                                                                                           €‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿu k                     »€          »€          »€          »€          (»€          0»€          8»€          @»€   	       H»€   
       P»€          X»€          `»€          h»€          p»€          x»€          €»€          ˆ»€          »€          ˜»€           »€          ¨»€          °»€          ¸»€          À»€          È»€          Ð»€          Ø»€          à»€          è»€          ð»€           ø»€   !        ¼€   "       °¬€   #       ¼€   $       ¼€   %       ¼€   &        ¼€   '       (¼€   )       0¼€   *       8¼€   +       @¼€   ,       H¼€   -       P¼€   /       X¼€   6       `¼€   7       h¼€   8       p¼€   9       x¼€   >       €¼€   ?       ˆ¼€   @       ¼€   A       ˜¼€   C        ¼€   D       ¨¼€   F       °¼€   G       ¸¼€   I       À¼€   J       È¼€   K       Ð¼€   N       Ø¼€   O       à¼€   P       è¼€   V       ð¼€   W       ø¼€   Z        ½€   e       ½€          ½€         ½€         (½€         8½€         À €         H½€         X½€         h½€         x½€   	      ` €         ˆ½€         ˜½€         ¨½€         ¸½€         È½€         Ø½€          €         ° €         è½€         ø½€         ¾€         ¾€         (¾€         8¾€         H¾€         X¾€         h¾€         x¾€         ˆ¾€         ˜¾€          ¨¾€   !      ¸¾€   "      È¾€   #      Ø¾€   $      è¾€   %      ø¾€   &      ¿€   '      ¿€   )      (¿€   *      8¿€   +      H¿€   ,      X¿€   -      p¿€   /      €¿€   2      ¿€   4       ¿€   5      °¿€   6      À¿€   7      Ð¿€   8      à¿€   9      ð¿€   :       À€   ;      À€   >       À€   ?      0À€   @      @À€   A      PÀ€   C      `À€   D      xÀ€   E      ˆÀ€   F      ˜À€   G      ¨À€   I      ¸À€   J      ÈÀ€   K      ØÀ€   L      èÀ€   N      øÀ€   O      Á€   P      Á€   R      (Á€   V      8Á€   W      HÁ€   Z      XÁ€   e      hÁ€   k      xÁ€   l      ˆÁ€         ˜Á€         ¨Á€           €         ¸Á€   	      ÈÁ€   
      ØÁ€         èÁ€         øÁ€         Â€         Â€         (Â€         8Â€         PÂ€   ,      `Â€   ;      xÂ€   >      ˆÂ€   C      ˜Â€   k      °Â€         ÀÂ€         ÐÂ€         àÂ€   	      ðÂ€   
       Ã€         Ã€          Ã€   ;      8Ã€   k      HÃ€         XÃ€         hÃ€         xÃ€   	      ˆÃ€   
      ˜Ã€         ¨Ã€         ¸Ã€   ;      ÈÃ€         ØÃ€         èÃ€         øÃ€   	      Ä€   
      Ä€         (Ä€         8Ä€   ;      PÄ€         `Ä€   	      pÄ€   
      €Ä€         Ä€          Ä€   ;      ¸Ä€         ÈÄ€   	      ØÄ€   
      èÄ€         øÄ€   ;      Å€           Å€   	       0Å€   
       @Å€   ;       PÅ€   $      `Å€   	$      pÅ€   
$      €Å€   ;$      Å€   (       Å€   	(      °Å€   
(      ÀÅ€   ,      ÐÅ€   	,      àÅ€   
,      ðÅ€   0       Æ€   	0      Æ€   
0       Æ€   4      0Æ€   	4      @Æ€   
4      PÆ€   8      `Æ€   
8      pÆ€   <      €Æ€   
<      Æ€   @       Æ€   
@      °Æ€   
D      ÀÆ€   
H      ÐÆ€   
L      àÆ€   
P      ðÆ€   |       Ç€   |      Ç€   a r     b g     c a     z h - C H S     c s     d a     d e     e l     e n     e s     f i     f r     h e     h u     i s     i t     j a     k o     n l     n o     p l     p t     r o     r u     h r     s k     s q     s v     t h     t r     u r     i d     b e     s l     e t     l v     l t     f a     v i     h y     a z     e u     m k     a f     k a     f o     h i     m s     k k     k y     s w     u z     t t     p a     g u     t a     t e     k n     m r     s a     m n     g l     k o k   s y r   d i v           a r - S A       b g - B G       c a - E S       c s - C Z       d a - D K       d e - D E       e l - G R       f i - F I       f r - F R       h e - I L       h u - H U       i s - I S       i t - I T       n l - N L       n b - N O       p l - P L       p t - B R       r o - R O       r u - R U       h r - H R       s k - S K       s q - A L       s v - S E       t h - T H       t r - T R       u r - P K       i d - I D       u k - U A       b e - B Y       s l - S I       e t - E E       l v - L V       l t - L T       f a - I R       v i - V N       h y - A M       a z - A Z - L a t n     e u - E S       m k - M K       t n - Z A       x h - Z A       z u - Z A       a f - Z A       k a - G E       f o - F O       h i - I N       m t - M T       s e - N O       m s - M Y       k k - K Z       k y - K G       s w - K E       u z - U Z - L a t n     t t - R U       b n - I N       p a - I N       g u - I N       t a - I N       t e - I N       k n - I N       m l - I N       m r - I N       s a - I N       m n - M N       c y - G B       g l - E S       k o k - I N     s y r - S Y     d i v - M V     q u z - B O     n s - Z A       m i - N Z       a r - I Q       d e - C H       e n - G B       e s - M X       f r - B E       i t - C H       n l - B E       n n - N O       p t - P T       s r - S P - L a t n     s v - F I       a z - A Z - C y r l     s e - S E       m s - B N       u z - U Z - C y r l     q u z - E C     a r - E G       z h - H K       d e - A T       e n - A U       e s - E S       f r - C A       s r - S P - C y r l     s e - F I       q u z - P E     a r - L Y       z h - S G       d e - L U       e n - C A       e s - G T       f r - C H       h r - B A       s m j - N O     a r - D Z       z h - M O       d e - L I       e n - N Z       e s - C R       f r - L U       b s - B A - L a t n     s m j - S E     a r - M A       e n - I E       e s - P A       f r - M C       s r - B A - L a t n     s m a - N O     a r - T N       e n - Z A       e s - D O       s r - B A - C y r l     s m a - S E     a r - O M       e n - J M       e s - V E       s m s - F I     a r - Y E       e n - C B       e s - C O       s m n - F I     a r - S Y       e n - B Z       e s - P E       a r - J O       e n - T T       e s - A R       a r - L B       e n - Z W       e s - E C       a r - K W       e n - P H       e s - C L       a r - A E       e s - U Y       a r - B H       e s - P Y       a r - Q A       e s - B O       e s - S V       e s - H N       e s - N I       e s - P R       z h - C H T     s r             ½€   B       `¼€   ,       `Õ€   q        »€           pÕ€   Ø       €Õ€   Ú       Õ€   ±        Õ€           °Õ€          ÀÕ€   Ï       ÐÕ€   Õ       àÕ€   Ò       ðÕ€   ©        Ö€   ¹       Ö€   Ä        Ö€   Ü       0Ö€   C       @Ö€   Ì       PÖ€   ¿       `Ö€   È       H¼€   )       pÖ€   ›       ˆÖ€   k       ¼€   !        Ö€   c       »€          °Ö€   D       ÀÖ€   }       ÐÖ€   ·       »€          èÖ€   E       (»€          øÖ€   G       ×€   ‡       0»€          ×€   H       8»€          (×€   ¢       8×€   ‘       H×€   I       X×€   ³       h×€   «       ½€   A       x×€   ‹       @»€          ˆ×€   J       H»€          ˜×€   £       ¨×€   Í       ¸×€   ¬       È×€   É       Ø×€   ’       è×€   º       ø×€   Å       Ø€   ´       Ø€   Ö       (Ø€   Ð       8Ø€   K       HØ€   À       XØ€   Ó       P»€   	       hØ€   Ñ       xØ€   Ý       ˆØ€   ×       ˜Ø€   Ê       ¨Ø€   µ       ¸Ø€   Á       ÈØ€   Ô       ØØ€   ¤       èØ€   ­       øØ€   ß       Ù€   “       Ù€   à       (Ù€   »       8Ù€   Î       HÙ€   á       XÙ€   Û       hÙ€   Þ       xÙ€   Ù       ˆÙ€   Æ       ¼€   #       ˜Ù€   e       P¼€   *       ¨Ù€   l       0¼€   &       ¸Ù€   h       X»€   
       ÈÙ€   L       p¼€   .       ØÙ€   s       `»€          èÙ€   ”       øÙ€   ¥       Ú€   ®       Ú€   M       (Ú€   ¶       8Ú€   ¼       ð¼€   >       HÚ€   ˆ       ¸¼€   7       XÚ€          h»€          hÚ€   N       x¼€   /       xÚ€   t       È»€          ˆÚ€   ¯       ˜Ú€   Z       p»€          ¨Ú€   O       @¼€   (       ¸Ú€   j        ¼€          ÈÚ€   a       x»€          ØÚ€   P       €»€          èÚ€   •       øÚ€   Q       ˆ»€          Û€   R       h¼€   -       Û€   r       ˆ¼€   1       (Û€   x       Ð¼€   :       8Û€   ‚       »€          ø¼€   ?       HÛ€   ‰       XÛ€   S       ¼€   2       hÛ€   y       (¼€   %       xÛ€   g        ¼€   $       ˆÛ€   f       ˜Û€   Ž       X¼€   +       ¨Û€   m       ¸Û€   ƒ       è¼€   =       ÈÛ€   †       Ø¼€   ;       ØÛ€   „       €¼€   0       èÛ€          øÛ€   w       Ü€   u       Ü€   U       ˜»€          (Ü€   –       8Ü€   T       HÜ€   —        »€          XÜ€          °¼€   6       hÜ€   ~       ¨»€          xÜ€   V       °»€          ˆÜ€   W       ˜Ü€   ˜       ¨Ü€   Œ       ¸Ü€   Ÿ       ÈÜ€   ¨       ¸»€          ØÜ€   X       À»€          èÜ€   Y       à¼€   <       øÜ€   …       Ý€   §       Ý€   v       (Ý€   œ       Ð»€          8Ý€   [       ¼€   "       HÝ€   d       XÝ€   ¾       hÝ€   Ã       xÝ€   °       ˆÝ€   ¸       ˜Ý€   Ë       ¨Ý€   Ç       Ø»€          ¸Ý€   \       Ç€   ã       ÈÝ€   Â       àÝ€   ½       øÝ€   ¦       Þ€   ™       à»€          (Þ€   š       8Þ€   ]       ˜¼€   3       HÞ€   z        ½€   @       XÞ€   Š       À¼€   8       hÞ€   €       È¼€   9       xÞ€          è»€          ˆÞ€   ^       ˜Þ€   n       ð»€          ¨Þ€   _       ¨¼€   5       ¸Þ€   |       °¬€           ÈÞ€   b       ø»€          ØÞ€   `        ¼€   4       èÞ€   ž        ß€   {       8¼€   '       ß€   i       (ß€   o       8ß€          Hß€   â       Xß€          hß€   ¡       xß€   ²       ˆß€   ª       ˜ß€   F       ¨ß€   p       a f - z a       a r - a e       a r - b h       a r - d z       a r - e g       a r - i q       a r - j o       a r - k w       a r - l b       a r - l y       a r - m a       a r - o m       a r - q a       a r - s a       a r - s y       a r - t n       a r - y e       a z - a z - c y r l     a z - a z - l a t n     b e - b y       b g - b g       b n - i n       b s - b a - l a t n     c a - e s       c s - c z       c y - g b       d a - d k       d e - a t       d e - c h       d e - d e       d e - l i       d e - l u       d i v - m v     e l - g r       e n - a u       e n - b z       e n - c a       e n - c b       e n - g b       e n - i e       e n - j m       e n - n z       e n - p h       e n - t t       e n - u s       e n - z a       e n - z w       e s - a r       e s - b o       e s - c l       e s - c o       e s - c r       e s - d o       e s - e c       e s - e s       e s - g t       e s - h n       e s - m x       e s - n i       e s - p a       e s - p e       e s - p r       e s - p y       e s - s v       e s - u y       e s - v e       e t - e e       e u - e s       f a - i r       f i - f i       f o - f o       f r - b e       f r - c a       f r - c h       f r - f r       f r - l u       f r - m c       g l - e s       g u - i n       h e - i l       h i - i n       h r - b a       h r - h r       h u - h u       h y - a m       i d - i d       i s - i s       i t - c h       i t - i t       j a - j p       k a - g e       k k - k z       k n - i n       k o k - i n     k o - k r       k y - k g       l t - l t       l v - l v       m i - n z       m k - m k       m l - i n       m n - m n       m r - i n       m s - b n       m s - m y       m t - m t       n b - n o       n l - b e       n l - n l       n n - n o       n s - z a       p a - i n       p l - p l       p t - b r       p t - p t       q u z - b o     q u z - e c     q u z - p e     r o - r o       r u - r u       s a - i n       s e - f i       s e - n o       s e - s e       s k - s k       s l - s i       s m a - n o     s m a - s e     s m j - n o     s m j - s e     s m n - f i     s m s - f i     s q - a l       s r - b a - c y r l     s r - b a - l a t n     s r - s p - c y r l     s r - s p - l a t n     s v - f i       s v - s e       s w - k e       s y r - s y     t a - i n       t e - i n       t h - t h       t n - z a       t r - t r       t t - r u       u k - u a       u r - p k       u z - u z - c y r l     u z - u z - l a t n     v i - v n       x h - z a       z h - c h s     z h - c h t     z h - c n       z h - h k       z h - m o       z h - s g       z h - t w       z u - z a       "“                   ø% ¨                ðÿ              ð              øÿ                       ÿ                             ÿÿÿÿÿÿ              ð                        å&{ËÛ?            xËÛ?        5•q(7©¨>           PDÓ?        %>bÞ?ï>               @              ð?              à?                             `?              à?        UUUUUUÕ?              Ð?        š™™™™™É?        UUUUUUÅ?             øÀ        ý                    °?              î?              ñ?                       ÿÿÿÿÿÿÿ        æTUUUUµ?        ÔÆº™™™‰?        ŸQñ#Ib?        ðÿ]È4€<?            ÿÿÿÿ                     C O N O U T $              ž½[?   pÔ¯k?   `•¹t?    v”{?    M4?   P›„?   Àqþ‡?   €^‹?   ðj»Ž?    ƒ
‘?   àµµ’?   PO_”?    S–?   ÐÃ­—?   ð¤R™?    ùõš?   pÃ—œ?    8ž?   °ÅÖŸ?    º ?    á‡¡?   ÀU¢?   Àg!£?   í£?   €¸¤?   à8‚¥?   ¹K¦?   @ƒ§?   À˜Ü§?   Ðú£¨?   Àªj©?   Ð©0ª?    ùõª?    šº«?   ~¬?   ÕA­?    q®?   pdÆ®?   °®‡¯?   À($°?   ð&„°?   Òã°?   0,C±?   @4¢±?   `ë ²?   R_²?   àh½²?   P0³?   à¨x³?   0ÓÕ³?    ¯2´?   Ð>´?    ë´?   0wGµ?   `!£µ?   @€þµ?   @”Y¶?   ð]´¶?   °Ý·?    i·?   `Ã·?   0¦¸?    v¸?   0Ï¸?   @æ'¹?   m€¹?    ®Ø¹?   Ð©0º?    _ˆº?   pÐßº?   °ü6»?   Ðä»?   0‰ä»?   @ê:¼?   p‘¼?   äæ¼?    }<½?   €Õ‘½?    ìæ½?    Á;¾?   °V¾?    «ä¾?   ÀÀ8¿?   €–Œ¿?   0-à¿?    ÂÀ?   pOCÀ?   `½lÀ?   €–À?    =¿À?   OèÀ?   ðBÁ?    :Á?   €ÐbÁ?   j‹Á?   ç³Á?   0FÜÁ?   ˆÂ?   à¬,Â?   Ð´TÂ?   ðŸ|Â?   €n¤Â?   ° ÌÂ?   ¶óÂ?   P0Ã?    ŽBÃ?    ÐiÃ?   €öÃ?   `¸Ã?   àðÞÃ?   0ÅÄ?   p~,Ä?   ÐSÄ?   p yÄ?   p	 Ä?    XÆÄ?   0ŒìÄ?   @¦Å?   0¦8Å?   PŒ^Å?   X„Å?   @ªÅ?   p¤ÏÅ?   @$õÅ?   ÐŠÆ?   PØ?Æ?   ÐeÆ?   €(ŠÆ?   €+¯Æ?   àÔÆ?   ÐçøÆ?   p¡Ç?   àBBÇ?   @ÌfÇ?    =‹Ç?   0—¯Ç?   ÙÓÇ?   PøÇ?    È?   @È?   ÀõcÈ?   àÂ‡È?    y«È?   0ÏÈ?     òÈ?   pÉ?   °m9É?   €²\É?    áÉ?   Pù¢É?   pûÅÉ?   °çèÉ?   ð½Ê?   €~.Ê?   `)QÊ?    ¾sÊ?   p>–Ê?   ð¨¸Ê?    þÚÊ?   0>ýÊ?   0iË?   @AË?   p€cË?   ðl…Ë?   °D§Ë?   ðÉË?   À¶êË?   0QÌ?   P×-Ì?   PIOÌ?   @§pÌ?   0ñ‘Ì?   @'³Ì?   €IÔÌ?   XõÌ?    SÍ?   `:7Í?   `XÍ?    ÏxÍ?   p|™Í?    ºÍ?   ÐÚÍ?   ðûÍ?   0sÎ?    Á;Î?   Pý[Î?   `&|Î?   à<œÎ?   à@¼Î?   €2ÜÎ?   ÐüÎ?   àÞÏ?   Ð™;Ï?    B[Ï?   €ÙzÏ?   p^šÏ?   Ñ¹Ï?   ð2ÙÏ?    ‚øÏ?   PàÐ?    vÐ?   0+Ð?   ‰:Ð?   @JÐ?   àxYÐ?   ðãhÐ?   pFxÐ?   € ‡Ð?   ò–Ð?   0;¦Ð?   ð{µÐ?   P´ÄÐ?   `äÓÐ?   0ãÐ?   À+òÐ?   CÑ?   @RÑ?   @YÑ?   0X.Ñ?    O=Ñ?   Ð=LÑ?    $[Ñ?   pjÑ?   PÚxÑ?   @©‡Ñ?   `p–Ñ?    /¥Ñ?   ç³Ñ?   À–ÂÑ?   °>ÑÑ?   ðÞßÑ?   pwîÑ?   `ýÑ?    ‘Ò?   PÒ?   p(Ò?    7Ò?   0kEÒ?   ÐÎSÒ?    +bÒ?   ÐpÒ?   @Í~Ò?   `Ò?    R›Ò?    ‰©Ò?   à¹·Ò?   àâÅÒ?   °ÔÒ?   PâÒ?   À2ðÒ?    ?þÒ?   pDÓ?   °BÓ?   à9(Ó?   *6Ó?   PDÓ?                 ²"¼
²=Ô.3i±=WÒ~è•Î=imb;DóÓ=W>6¥êZô=¿á<hCÄ=¥Æ`Í‰ù=Ÿ. obý=Í½Ú¸‹Oé=0BïØˆ >­y+¦>ÄÓîÀ—>IÔ­wJ­=07ð?v>ÃöG×bá=¼MÌ>¿åöQàóê=ëóz	>ÇÀp‰£À=QÇW  .>nÍî [>¯µp)†ß=m£6³¹W>OêJÈK>­¼¡žÚC>*ê÷´§f>ïü÷8à²ö=ˆðpÆTéó=³Ê:		r>§]'çp>ç¹qwžß>`
§¿'>¼MÌ>[^jö7>Kb|ñj>:b€Î²>	>Þ”éÑ0>1 k>Aòºœ‡>+¼¦^ÿ=lgÆÍ=¶)>,«Ä¼,+>DeÝ}Ðù=ž7W`@>`z”‹Ñ>~©|'e­>©_ŸÅMˆ>‚Ð`Ä>ø1<.	/>:á+ãÅ>šOsý§»&>ƒ„àµôý=•MÇ›/#>yHèsù=nXÆ¼Ì>˜JRùé!>¸11Y@/>58d%‹Ï>€í‹¨_>äÙ)ùMJ$>”"Ø ˜>	ã“H*>þe¦«VM>cQ6!>6'Yþxø=ÊÈ%ˆR>jtm}S•à=`
§¿'><“Eì¨°>©ÛõøZ>ÕU&úâ>¿ä®¿ìY>£?hÚ/‹>77:ýÝ¸$>®a~‚>ŸéI{Œ,>Y—ðê)>6{1n¦ª>Ur	Vr.>T¬zü3&>R¢aÏ+f)>0'ÄÈC>6ËZ»d >¤'„4
>ÖyµUŽ>š^œ!-é=jýæc?>cQÙ›.>5b#)>^x8ˆo2>¯¦«Lj[;>vŽÜj"ð=í:1×J<>s|èd>fŠñì3>fvwõž’=>¸ ð;H9>&XªîÝ;>º7YÝÄ9>ÇÊëàéó>¬'‚SÎ5>º¹*StO9>T†ˆ•'4>ðKã Z>‚Ð`Ä'>øŒí´% %> ÒòÎ‹Ñ.>Tu
.(!>Ê§Y3óp>%@¨~+>‰!Ãn03>Pu‹øÇ?>d×Œ5°>>t”…"Èv:>ã†ÞRÆ=>¯X†àÌ¤/>ž
ÀÒ¢„;>Ñ[Âò°¥ >™ö["`Ö=>7ð›…±>áËµ#ˆ>>ö–ó6>š¢\‡.>¥¹9Ir•,>âX>z•8>4Ÿê&ñ/>	VŽYõS9>HÄVøoÁ6>ôaò"Ë$>¢S=Õ á5>Vò‰aR:>œÔÿüV8>Ú×(‚.0>àßD”Ðñ=¦Yêc%>×2x.&>ÏøÙ>í=…ÍK~Je#>!­€Ix[>dn±Ô-/!>õ9Ù­Ä7>ü€qb„(>aIáÇbQê=cQ61>ˆv¡+M<7>=éà¥è*>¯!ðÆ°*>f[Ýt‹0>”T»ìo -> ÌOr‹´ð=)âaƒ?>¯¼Ä—ø=ª·Ël(>>“
"Ic(>\,¢Áÿ=F	çET5>…mø0æ;>9lÙðß™%>°±…Ì6>È¨ mG4>Óžˆ?7>‡*yW3>öa®yÑ;>âöÃV£>ûœbp(=>?gÒ€8º:>¦})Ë36,>êï™8„!>æ ÉÌ;>PÓ½D 8>áj`&Â‘+>ß+¶&ßz*>Én‚ÈOv>ðhå=O>ã•yuÊ`÷=GQ€Ó~fü=oßjö37>kƒ>ó·/>dºnˆ9>Œ¯ÐhSû=q)iŒ5>ûm"e”þ=— ?~X3>Ÿç6>T¬zü36>J`„¦?>!T”ä¿4<>0Að±8>cÖ„BC?>6t9^	c:>Þ¹V†B4>¦Ù²’Ê6>“*:‚8'>0’ˆ<>þRmÜ=1>é"‰Õî3>PÝk„’Y)>‹'._MÛ>Ä5*ñ¥ñ=4<,ˆðBF>^Gö§›î*>ä`JƒK&>.yCâB)>O 'L>[ÏÖ.xJ>HfÚy\PD>!ÍMêÔ©L>¼Õ|b=})>ª¼ù\± >ÝvÏc [1>H'ªóæƒ)>”éÿôdL?>Zè|º¾F>¸¦Nýiœ;>«¤_ƒ¥j+>ÑíyÃÌC>àO@ÄLÀ)>ØuzKs@>àÄD>”HÎÂeÅ@>Í5ÙAÇ3>N;kU’¤r=CÜA	ú >ôÙã	p.>EŠ‹öK>V©úßRî>>½eä 	kE>fvwõž’M>`â7†¢nH>ð¢ñ¯eF>tìH¯ý/>ÇÑ¤†¾L>ev¨þ[°%>J
ÂÎA>Ÿ›@
_ÍA>pP&ÈV6E>`"(5Ø~7>Ò¹@0¼$>òïy{ïŽ@>éWÜ9oÇM>Wô§“L>¦¥ÎÖƒJ>ºWÅpÖ0>
½èlÉD>#ã“,=>B‚_!Ç">}tÚM>š'>+§AiŸøü=1ñ§I!>Ûu|K­N>
çcþ0iN>/îÙ¾áA>’ñ‚+h->|¤Ûˆñ:>örÁ-4ù@>%>bÞ?ï>               @ àààÿ?ðüÀÿ?úª¡ÿ? øøÿ?µÛ ¬cÿ?qBJžeDÿ?µ
#Dö%ÿ?|ðÁÿ?ŽEøÇéþ?Àì³Ìþ?ëºz€®þ?g·ð«1‘þ?äP—¥tþ?tåÉ:Wþ?sÜy‘:þ?þ?ààþ?Š†øãÖåý?Ê ÜÊý?Û¹v`®ý?Š#ò’ý?4,¸T¶wý?²ru€¬\ý?ÔAÔAý?[ü£,'ý?tÀnµý?Æ¿D\nòü?›‰VØü?çË–m¾ü?‘á^³¤ü?BŠûZ&‹ü?ÇqÇqü?†IÑ”Xü?ðøÃ?ü? .9µ&ü?àÀü?‹†îƒõû?÷”‰+Ýû?{>ˆeýÄû?ÐºÁù¬û?#ÿ+•û?‹3Ú=l}û?î¾ãâeû?Oè´Nû?ÎØJH7û?Ù€l@6 û?¤"Ù1K	û?(¯¡¼†òú?^”èÛú?pÅpÅú?ýë‡/¯ú?¾cj`ï˜ú?Yá0Qæ‚ú?mÐ¦mú?JŠhAWú?¤A¤Aú? Å‡*,ú?KzùÓú?  ú?Ù3•Žìù?-hkŸ×ù?¡äNÑÂù?ÚUê$®ù?š™™™™™ù?ÿÀŽ/…ù?r¸øäpù?®wã»\ù?àéÖü°Hù?æ,›Æ4ù?)âÐIû ù?ÕOù?úœÁùø??7ñzRæø?Ó0Óø?:ÿb€Î¿ø?ªók¹¬ø?œ‰öÀ™ø?J°«ðå†ø?¹’À¼'tø?†a†aø?xÂ Oø?Ý¾²z—<ø? ¤‚J*ø?ø?`€ø?@ýô÷?OZQ%â÷?ô}A_Ð÷?|.’³¾÷?Ãìà"­÷?‹9¶kª›÷?È¤xLŠ÷?Æšy÷?±©4äÜg÷?muÂÊV÷?F]tÑE÷?þAÅð4÷?¼ÞF($÷?	|œmx÷?p\à÷?`ò`òö?Ç7Ck÷áö?aÈ&¦Ñö?lÁlÁö?=£
I±ö?rSÑ<¡ö?ÀÐˆ:G‘ö?hhö?g6Ÿqö?ù"Qjìaö?£J;…ORö?d!YÈBö?ÞÀŠ¸V3ö?@bwú#ö?”®1h³ö?X`ö?ü-)4döõ?çÐ¸[çõ?¥âìÃgØõ?W“+ˆÉõ?‘úGÆ¼ºõ?ÀZk¬õ?ªÌ#ñaõ?íX0ÒŽõ?`XV€õ?:kP<íqõ?âR|º—cõ?UUUUUUõ?þ‚»æ%Gõ?ëôH	9õ?K¨Vÿ*õ?øâêõ?ÅÄá"õ?PPõ?›LÝbóô?9/§àåô?L,Ü¾CØô?n¯%‡¸Êô?á¦Ý>½ô?[¿R Ö¯ô?Jv­¢ô?gÐ²ã9•ô?€H"ˆô?{®Gázô?f`Y4Îmô?šÏõÇË`ô?ÊvÇâÙSô?ûÙbeøFô?Mî«0':ô?‡Õ%f-ô?QY^&µ ô?ô?feÑ‚ô?û°?ûó?¯¥Bîó?©ä¼,âó?Æuª‘ÙÕó?ç«{¤•Éó?U)#Ù`½ó?;±;±ó?"Èz8$¥ó?c,™ó?ŽfÓ"ó?88ó?îEÉÑ[uó?HÞóió?ø*Ÿ_Î]ó?Áx+ûRó?Fà¬yFó?²¼W[ä:ó?újí\/ó?¿+Jã#ó?¶ëéXwó?Ñ0ó?`Ä*Èó?h/¡½„öò?KÑþ¡Nëò?—€KÀ%àò? P-
Õò? ,MûÉò?7ZŽù¾ò?@+­´ò?Áó’©ò?žä)Ažò?¥¸[r“ò?°ˆ°ˆò?MÎ¡8ú}ò?5'¸Psò?'Ö|³hò?ñ’€p"^ò?²w‘~Sò?’$I’$Iò?[`—·>ò?ß¼šxV4ò?* "*ò?xû!·ò?æUH€yò?ÙÀgGò?  ò?pÁ}÷ñ?L¸<ôìñ?t¸?;ïâñ?½J.gõØñ?¢­Ïñ?Yàü"Åñ?)íF@J»ñ?ãºòg|±ñ?–{a¹§ñ?žàžñ?œ¢Œ€S”ñ?Û+ƒ°Šñ?ñ?„ÖŠwñ?ysB‰nñ?2üPdñ?'u_[ñ?ÉÕý£¹Qñ?;Í
_Hñ?$G4?ñ?È5È5ñ?¬Àí‰‹,ñ?30]çX#ñ?&H§0ñ?ñ?€¾ûñ?ðþðþð?¢%³úíõð?œækõìð?`‚Uäð?–F¨ Ûð?:ž5VDÒð?;Ú¼OqÉð?qA‹†§Àð?È%ìæ·ð?µì.r/¯ð?§h
¦ð?`ƒ¯¦Ûð?T	9?•ð?âeu³«Œð?„B!„ð?âê¸)Ÿ{ð?Æ÷G
&sð?ûyœµjð?ü©ñÒMbð?†ur îYð?4×÷—Qð?ÅdÌIIð?AAð?üG‚·Æ8ð?^µ‘0ð?é)wüd(ð?@ ð?7zQ6$ð?ð?€ ð?      ð?        log10           ÿÿÿÿÿÿ?Cÿÿÿÿÿÿ?ÃK E R N E L 3 2 . D L L         AcquireSRWLockExclusive ReleaseSRWLockExclusive                 @                                                                                      @€                   °r€   Àr€                                                                                                                                  4€                   ¸r€   Èr€   Ðr€   Ør€   àr€   node.exe         €   Unknown exception       bad array new length    string too long         napi_get_last_error_info        Error::New      napi_is_exception_pending       napi_get_and_clear_last_exception       Error in native callback        napi_create_string_utf8 napi_create_error       napi_create_reference   Error::Error    message napi_close_handle_scope HandleScope::~HandleScope       napi_close_escapable_handle_scope       EscapableHandleScope::~EscapableHandleScope     ERROR: Unknown exception during async callback  Callback receiver must be an object or function Callback must be a function     Callback called after move  wlan    type        wlan_notification_acm_connection_complete   code        wlan_notification_acm_disconnected      wlan_notification_acm_scan_complete     wlan open handle error  wlan rigister notification error        addEventListener        Reference<T>::Reference vector too long `E €   `E €   PD €   @D €    D €   0D €   ÐI €   ÐI €   PH €   @H €    D €   0D €   P €   @ €   pK €   pK €   ðI €   àI €    D €   0D €   €? €   `? €   à? €   ð €   F €   F €   €E €   pE €    D €   0D €   0H €   0H €   °F €    F €    D €   0D €                      Kú~d       [   p
 pø     Kú~d          Ì
 Ìø     Kú~d       ¤  à
 àø     Kú~d                                              PM ¨ €                            À         Ð             PM         ÿÿÿÿ    @   ¨                        øL   ø                            8         H             øL         ÿÿÿÿ    @                            ðJ ˜ p                            °         È H                 ðJ        ÿÿÿÿ    @   ˜                         M  ð                            0         P È H                      M        ÿÿÿÿ    @                            J   x                            ¸         Ð H                  J        ÿÿÿÿ    @                            (J   ø                            8         X Ð H                     (J        ÿÿÿÿ    @                            ÈJ ¨ €                            À         Ø H                 ÈJ        ÿÿÿÿ    @   ¨                                 (             pM         ÿÿÿÿ    @                            xJ x P                                     ° Ø H                     xJ        ÿÿÿÿ    @   x                        PJ   Ø                                     @ ° Ø H                         PJ        ÿÿÿÿ    @                             M  h                            ¨         À (                  M        ÿÿÿÿ    @                                                  àM         ÿÿÿÿ    @   è                        0N ` 8                            x                           0N        ÿÿÿÿ    @   `                         J à ¸                            ø          H                  J        ÿÿÿÿ    @   à            €€L Ô   
 P   O  'O  ÷Q  wV  óV  W  _W  /Z  4Z  ~Z  n[   [  ùk  Ml  b¬  ¡®  „»  —»  î»  ¼  ‘¼  ¯¼  Ù¼  ã¼  nÃ  ’Ã  sÈ  ØÊ  ŒÕ  $×  ,×  Ü  êÜ  Yä  ¨å  Äå  ­ô  õô  ¶ù  Öú  û  k © D s ¤ ê ñ $ ° ¾ ÿ 	  • L Æ Ô è " ¤ ´ Ã Ò á   ¾ é  A R b r ‚ ¥ ¹ ô a< Ô< <C €M …M ¡N ¦N \T hT ¹T ÖT @U åU aW pW ³W pY àc d d _d ƒd «d Íd e 3e =e De He Te ^e ke xe Še ’e ©e °e h h ÀN  À.  8  X   8ˆ  3  „»    ¨¿  ˜  ÐÚ  ph  ìH ¤  ðO   `] Ð   'c y  RSDSw­”@dN‡wl‡Ì6²   D:\a\network-interface\network-interface\build\Release\win-x64.pdb      Ò   Ò       Ð   GCTL      .text$di       O .text$mn    _ @   .text$mn$00 P_ P
  .text$x  i N   .text$yd     p °  .idata$5    °r 8   .00cfg  èr    .CRT$XCA    ðr    .CRT$XCU    ør    .CRT$XCZ     s    .CRT$XIA    s     .CRT$XIC    (s    .CRT$XIZ    0s    .CRT$XPA    8s    .CRT$XPX    Hs    .CRT$XPXA   Ps    .CRT$XPZ    Xs    .CRT$XTA    `s    .CRT$XTZ    ps Ž  .rdata  € ´  .rdata$r    4 <  .rdata$voltmd   p
   .rdata$zzzdbg   ˆ    .rtc$IAA        .rtc$IZZ    ˜    .rtc$TAA         .rtc$TZZ    ¨ P  .xdata  ø' ”  .xdata$x    Œ+     .didat$2    ¬+ $   .didat$3    Ð+   .didat$4    Ø, ð  .didat$6    È/   .didat$7    Ð0 X   .edata  (1 (   .idata$2    P1    .idata$3    h1 °  .idata$4    4 B  .idata$6     @  
  .data    J P  .data$r PM (  .data$rs    xN   .didat$5    €O $  .bss     p   .pdata    \  _RDATA     `   .rsrc$01    `  €  .rsrc$02                                         B   20
 
4 
2p ‚   R0 	 0  œZ €   '	 T 4  àp`  [  ¢   (  P_ 1  2P
 
4 
Rp 4#  p  œZ à   $ d# 4"  p  [ l â   (u | 
0#  P± ž   4; 8 p  [   ³  x­ ¶ Ç 
`#  @@ ¾ €œ_ Ý
ÙU bJ 
 
2P¬w  ä iî ð p     	 0  [  â   (  
0#  @= ’  " 4$  	àp`  [ D â   (u M õ œ # % 	ðàp`0P[ t   (} „ 
`#   µ àf >  ! 4'   p`P  [ ° ò   (¹ Õ 
`  €6ì_ .ü_ .` *`  PE n
>   %	 4#  ð
àp`P  [  Â   ( 8 à,  `4à,  P26  p4à,  @bà,  €4à,  @Â-  €
î`€y < b  ¬w  T 8a d ~   l øL @` €·`    
 
2P, dP 4O H ðàÐÀp  [ ´ 3  8Á Ý ô 
@5  `20#  Ð2°5   20  Á8@
å ÐL áa 		Õ -Á
²Z
Jd    bP0  ! t ð+  	,  ° !   ð+  	,  ° !   t ð+  	,  ° &	 4- $ ð
àp`P  [ t   (} — 
Àa .Ýa .b †Ýa .b  –˜ fT ¤  ) 	p`0P¬w  À (É  à,  á<à,  Á<à,  !¬à,  <à,  Á<à,  !tà,  !<à,  ÀÀ‚H"
  ! t  i ²i ° !    i ²i °  Â  *	 t& d% 4$ " P  [ \   (e k b Q ~ ! 4  p`P  œZ      ‚  " 4$  	àp`  [ ¸ â   ( Á á œ  ¢  ¬w  Ø 8a å ú   í ÐL @°b jX    4  p  œZ €    4  p  [ 4 ¢   (= D 
 6  PZ ¡>  t d
 T	 4 2ðàÀ	 	2à`0! ô
 t	 T à;  	<  h !   ô
  t	  T à;  	<  h !   à;  	<  h 
 
2p! d 4 0=  :=  ¼ !   0=  :=  ¼  4 2
àÀ`! ô
 t	 T °=  á=  ì !   ô
  t	  T °=  á=  ì !   °=  á=  ì  b  
 
4 
2p¬w  ` hi o Tz  œ  
 
Bàp`0  !( (ô Ô 
Ä T
 0@  q@  t !   ô  Ô  Ä  T
 0@  q@  t !   0@  q@  t  4/ , p  [ ð S  8ý   
 #  `@  ÐL üb ½ù°LÆ  
 
RP 4  p  œZ       à0P  œZ    !J Jd t °F  úF  H !   t  d °F  úF  H !   °F  úF  H !   t °F  úF  H !J Jd t PH  šH  H !   t  d PH  šH  H !   PH  šH  H !   t PH  šH  H !J Jd t ðI  :J  H !   t  d ðI  :J  H !   ðI  :J  H !   t ðI  :J  H  d T 4 2p Â     	 "  Üz     OQ  ÙQ  'c ÙQ   P   t	 d 4 2àÜz     @S  ¯S  ?c     T  T  ?c     
 
4 
RpÜz     WT  vT  Vc     LT  ŽT  oc     —T  ¢T  Vc     —T  £T  oc     	 4 ràp`Üz     ÙT  ¿U  ƒc ¿U   RP d 4 2p B  	 	b  
 
4 
rp rp`0 d 4 p 4º ¸ P   4	 2P           d
 4	 Rp
 
4 
’p  ²p`0[  R   (   6  P2 6  `”>>þ   òp0PœZ p    d 4 ²p[ X R   (a h 
 6  `¤ N¨  
 t	 d T 4 2à d T 4
 2ðàÐÀp" d 4 rðàpœZ 0    "  	 t d T 4 à  
 T 4 2ðàÀp`  P  œZ Ð    d T 4 rðàÐÀp% %h t d T 4 ²à d T 4 rp d T 4 ²p	 Ò0Üz     7l  Wl  td Wl   rpP0	 Ò0Üz     ãk  l  Ñc l   t d 4 2à	 ‚  Üz     ]y  ly  %e ly   BP0   d 4 ’p  p       `p   
 4 2ðàÐÀp`P d	 4 Rp RðàÐÀp`0Üz     z²  ³  Bg ³  ?²  3³  Xg     n³  t³  Xg      Òð
àÐÀp`0Üz     =¬  b¬  ×e b¬  =¬  Ú¬  üe     + h   ðà
ÐÀp`0  l\    ±µ  ¶  {g ¶  Í´  1¶  ‘g     ã     ð
ÐÀp`0Üz     V®  ¡®  ‚f ¡®  V®  ¯  ±f     ¯  £¯  ‚f ¡®  ¯  £¯  ±f      d T 4
 2ðàÐÀp ¢  Üz     e©  ®©  »e      rP	
 t d 4
 RðàÐÜz     }Œ  ²     ì  Ò  ì     ì  	
 t d 4
 RðàÐÜz     ~Ž  µ     ï  Õ  ï     ï  	 t d 4 2àÜz     &  œ     ²  	 t d 4 2àÜz     ç  ]‘     s‘  
 t d T 4 ’à
 d T 4 òðàp'
 % ðà	ÐÀp`0PœZ   *
 1 ðà	ÐÀp`0PœZ p  
 4 ²ðàÐÀp`P% %4# % ðàÐÀp`P  '
 ' ðà	ÐÀp`0PœZ (                    B   B   B   B   B  
 
4
 
rp b  .	 dÄ 4Ã ¾ àpP  œZ à   d
 T	 4 Rp
 
4 
2p d 4 2p 4 ÒP 20Üz     VÆ  oÆ  ´g      R0$w  ¸– –Ê  ÿÿÿÿ 4 ’
P$w  à– ÿÿÿÿTz      ÊÉ      	 R0Üz     yÈ  ÒÈ  äg É   4 2pÜz     =È  FÈ  Êg      4 Rð
àp`P b  $w  0—  4 2p
 t d
 T	 4 Rà rP b  $w  X—     lÔ      
 d
 T	 4 2ðàp 4 2pÜz     ùÐ  Ñ  Êg      4 2pÜz     5Ñ  ?Ñ  Êg      B  à]    J×  \×     \×     
 
20	 	’P	 	rP 4 2pÜz     Ü  Ü  Êg      4 2pÜz     Ü  £Ü  Êg      4 2pÜz     ÕÜ  Ý  Êg      4 2pÜz     MÜ  [Ü  Êg      B   d	 4 RpÜz     ä  ;ä  h     
 4 ’ðàÐ
Àp`P
 t d T 4
 rà d T 4 RðàÐÀp+	 h à	ÐÀp`0P  œZ 0  + tX 4W T P  œZ    d T 4
 rp%
 T 4 rðàÀp`œZ 8    r0 d 4 2pà]    ½ú  û  Eh     %	 %dS %4R %N àpP  + tô 4ó ð P  œZ p   4
 rpÜz     Yó  øô  +h      d 4
 rp 4 p   t  d T 4 ’p 20Üz     	 	 ^h      t d T 4  à  
 d 4 rðàÐÀpÜz      Æ wh     D \ wh      4 2pÜz     f
 
 Êg      t 4 ²P rP 4 2pÜz     â M ˜h      4 ²àp`Üz     € ) ³h     
 
4	 
RpÜz     & ¥ Ðh     
 
4 
2pÜz      # éh      2
0 T 4 2`-5t d 4 3²
ðàÐÀP  œZ X    Š àÐÀ  œZ   !(
 (ô…  t† d‡ Tˆ 4‰   [ |$ !     [ |$  d 4 p   ¢  œZ @    d 4 Òp-Ut d 4 S²
ðàÐÀP  œZ X    d 4 2p t
 d	 4 RðÜz     , Ö, ^h      b   4 2pÜz     …. ß. i     	 âðà	ÐÀp`0P   4 RðàÐÀ`Üz     a8 ž8 i     3 %4"  ðà
ÐÀp`P  `] ¸ß Ë       d1 ÿÿÿÿ-	 T4ŽŠàp`  œZ @  1 T–4”ŽðàÀp`  œZ `   d	 4 Rp 4	 RpÜz     y< †< 3i     
 T 4 RðàÐÀp	 	B   ¢   4 2pÜz     5A {A i         
 
h ¢   rð	àÀp`P0œZ 0    ’0&	 h  	àp`0P  œZ À    0 h Â          t	 d 4 2P	 d	 4 2pÜz     ²S ¹S Ki ¹S  t 
d 4  4 òp d 4 2p t d 4 ÒðàÐÀP 0  	
 
4 
2pÜz     ý[ 0\ €i 0\                      (                     + H+                  J     ÿÿÿÿ       ^                         x(                    ˜( 0( H+                     (J     ÿÿÿÿ       ]                         à(                    ) 0) Ð* H+                         PJ     ÿÿÿÿ    (   Øb                  xJ     ÿÿÿÿ    (   ˆb                         x)                    ) H+                  J     ÿÿÿÿ       «                  ÐK    ÿÿÿÿ       €6                  ÐL     ÿÿÿÿ    P                            p*                    ¨*  + H+                    à) ø* ¸) H+                        Ð* H+                 0      H*                      M     ÿÿÿÿ       p                  ÈJ     ÿÿÿÿ       Ð                  K    ÿÿÿÿ                        ðJ     ÿÿÿÿ       °                  øL     ÿÿÿÿ       P                         (*                ps €O xN Ð+ È/                                             Ø,     ”/     ð,     
-     &-     :-     F-     V-     n-     ‚-     ž-     ¼-     à-     ö-     .     &.     @.     P.     j.     „.     š.     ª.     ¸.     Æ.     ê.      /     /     */     >/     b/     z/     ¦/             Žpnapi_create_function  ãpnapi_open_handle_scope  ³pnapi_get_last_error_info  Špnapi_create_error "quv_close  ·pnapi_get_null ¢pnapi_delete_reference ¥pnapi_fatal_error  Ùpnapi_is_exception_pending Êpnapi_get_value_string_utf8  xpnapi_close_escapable_handle_scope ¤pnapi_escape_handle  opnapi_add_finalizer  špnapi_create_type_error  —pnapi_create_string_utf8 quv_async_send ñpnapi_set_named_property ´pnapi_get_named_property Üpnapi_make_callback  quv_async_init ùpnapi_typeof ôpnapi_throw  ¨pnapi_get_and_clear_last_exception ‘pnapi_create_object  ¾pnapi_get_undefined  òpnapi_set_property ­pnapi_get_cb_info  âpnapi_open_escapable_handle_scope  ”pnapi_create_reference ypnapi_close_handle_scope +quv_default_loop »pnapi_get_reference_value                                                                                                                                                                                                                                                                                    ÿÿÿÿ    1          ø0 ü0  1  5  1   win-x64.node napi_register_module_v1  h1         ,4  p  4         h4 ˜r                         4     8:     &:     :     :     t4     ˆ4     ¢4     ¶4     Ò4     ð4     5     5     45     H5     Z5     n5     ˆ5     ž5     ´5     Î5     ä5     ø5     6     ,6     J6     V6     d6     r6     |6     Ž6     œ6     °6     Â6     Ú6     ê6     ú6     
7     "7     :7     R7     z7     †7     ”7     ¢7     ¬7     º7     Ì7     Ø7     æ7     ü7     8     8     *8     68     J8     Z8     l8     v8     ‚8     Ž8      8     ²8     È8     Þ8     ø8     9     "9     49     D9     R9     f9     x9     „9     ’9     ¢9     ¶9     Â9     Ø9     ê9     ø9     H:             :4     L4             ’GetModuleHandleA  KERNEL32.dll  Å WlanOpenHandle  á WlanRegisterNotification  wlanapi.dll õRtlCaptureContext ýRtlLookupFunctionEntry  RtlVirtualUnwind  æUnhandledExceptionFilter  ¤SetUnhandledExceptionFilter 2GetCurrentProcess ÄTerminateProcess  ¨IsProcessorFeaturePresent  IsDebuggerPresent ñGetStartupInfoW •GetModuleHandleW  pQueryPerformanceCounter 3GetCurrentProcessId 7GetCurrentThreadId  
GetSystemTimeAsFileTime ŠInitializeSListHead ‹InitializeSRWLock ØReleaseSRWLockExclusive   AcquireSRWLockExclusive ÝTryAcquireSRWLockExclusive  ´FlsAlloc  ¶FlsGetValue ·FlsSetValue µFlsFree ÍGetProcAddress  RtlUnwindEx ÿRtlPcToFileHeader ‡RaiseException  ŽInterlockedFlushSList }GetLastError  dSetLastError  EEncodePointer IEnterCriticalSection  àLeaveCriticalSection  #DeleteCriticalSection †InitializeCriticalSectionAndSpinCount ÖTlsAlloc  ØTlsGetValue ÙTlsSetValue ×TlsFree ÅFreeLibrary æLoadLibraryExW  RtlUnwind xExitProcess ”GetModuleHandleExW  ‘GetModuleFileNameW  lHeapAlloc pHeapFree  FindClose •FindFirstFileExW  ¦FindNextFileW ®IsValidCodePage ÌGetACP  ¶GetOEMCP  ÛGetCPInfo ðGetCommandLineA ñGetCommandLineW MultiByteToWideChar 7WideCharToMultiByte SGetEnvironmentStringsW  ÄFreeEnvironmentStringsW ÔLCMapStringW  ÔGetProcessHeap  óGetStdHandle  jGetFileType USetFilePointerEx  øGetStringTypeW  uHeapSize  sHeapReAlloc SetStdHandle  ¹FlushFileBuffers  KWriteFile GetConsoleOutputCP  GetConsoleMode  ” CloseHandle Ú CreateFileW JWriteConsoleW GetSystemInfo VirtualProtect  VirtualQuery  åLoadLibraryExA                                                                                                                                                                                                                                                                                                                                                                                                                                        ÿÿÿÿ    Í] ÒfÔÿÿ2¢ß-™+                       u€          ÿÿÿÿ                                                                                                                                                                                                                                                                                                            ÿÿÿÿ    °§€                                                                èB€                           èB€                           èB€                           èB€                           èB€                                           @H€                   0ª€   °«€   ð™€                                                   €A€   ðB€   C                                                                                                                                                                                                                                                                                                                                       abcdefghijklmnopqrstuvwxyz      ABCDEFGHIJKLMNOPQRSTUVWXYZ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   abcdefghijklmnopqrstuvwxyz      ABCDEFGHIJKLMNOPQRSTUVWXYZ                                                                                                                                                 ¤  `‚y‚!       ¦ß      ¡¥      Ÿàü    @~€ü    ¨  Á£Ú£                        þ      @þ      µ  Á£Ú£                        þ      Aþ      ¶  Ï¢ä¢ å¢è¢[                 þ      @~¡þ    Q  QÚ^Ú  _ÚjÚ2                 ÓØÞàù  1~þ    þÿÿÿ            ØH€   8a€   8a€   8a€   8a€   8a€   8a€   8a€   8a€   8a€   ÜH€   <a€   <a€   <a€   <a€   <a€   <a€   <a€   .   .                                                                                                                                                                                                           þÿÿÿÿÿÿÿ           u˜          ˜s€           .?AVlogic_error@std@@   ˜s€           .?AVlength_error@std@@  ˜s€           .?AVsystem_error@std@@  ˜s€           .?AV_System_error@std@@ ˜s€           .?AVbad_exception@std@@ ˜s€           .?AVruntime_error@std@@ ˜s€           .?AVbad_alloc@std@@     ˜s€           .?AVObjectReference@Napi@@              ˜s€           .?AV<lambda_ad367726b36ae4d33699447722d5d035>@@ ˜s€           .?AV<lambda_da72bf39a866b315062fcd01c3d3b650>@@ ˜s€           .?AV?$Reference@VObject@Napi@@@Napi@@           ˜s€           .?AV<lambda_4c413343fa1ff2fe220fb0a178d3bc00>@@ ˜s€           .?AV<lambda_bcd96f391532111461e58bf0a95124b9>@@ ˜s€           .?AV<lambda_bb1359f0531ce563cae868efcd08a077>@@ ˜s€           .?AVError@Napi@@        ˜s€           .?AVexception@std@@     ˜s€           .?AVbad_array_new_length@std@@  ˜s€           .?AVtype_info@@ ˜s€           .?AVerror_category@std@@        ˜s€           .?AV_Generic_error_category@std@@               ˜s€           .?AVstl_critical_section_interface@details@Concurrency@@        ˜s€           .?AVstl_critical_section_win7@details@Concurrency@@     ‰L €   jN €   M €   M €   &M €   2M €   >M €   JM €   VM €   bM €   nM €   zM €   †M €   ’M €   žM €   ªM €   ¶M €   ÂM €   ÎM €   ÚM €   æM €   òM €   þM €   
N €   N €   "N €   .N €   :N €   FN €   RN €   ^N €   vN €                                                                                                                                             D  ¨ P  ‚  ° °  ò  ¸ P  p  Ä p  ¬  ° °  ì  °      ¨    q  Ì €  Ç  Ì Ð    ° 0  Ä  ° à  Y  Ô `  ó  è    Ó  ( à  )  4 0  H  ¨ P    ¸   …  L     „    7  ô @  X  ¨ `    °   Ô   $ à   #  T 0#  ^#  ¨ `#  Ž#  ¨ #  \%   `%  	'  à '  "'  D 0'  é+  Œ ð+  	,  ° 	,  È,   È,  Î,  , Î,  Ô,  < à,  -  ° -  f-  ¸ p-  ½/  P À/  1  ¨  1  ~1  0 €1  g3  8 p3  ù4  t  5  @5   @5  §5  ° °5  6  °  6  ~6  ° €6  ¿7  ˜ À7  ý7  È  8  Â8    Ð8  
:   :  ×;  L à;  	<  h 	<  =  t =  %=   %=  +=  ¬ 0=  :=  ¼ :=  ¦=  Ä ¦=  §=  Ü °=  á=  ì á=  ?  ü ?  *?   *?  0?  4 0?  ]?  D €?  Ô?  L à?  @  ° @  !@  ¨ 0@  q@  t q@  eB  „ eB  qB  ¤ qB  wB  Ä €B   D  Ô PD  SE  0 €E  ƒF  0 °F  úF  H úF  ³G  ` ³G  ÙG  x ÙG  öG   öG  H    H  0H  x PH  šH  H šH  SI  ´ SI  yI  Ì yI  –I  ä –I  ³I  ô ³I  ÐI  Ì ðI  :J  H :J  óJ   óJ  K    K  6K  8 6K  SK  H SK  pK    K  ÊK  ¨ ÐK  ‰L  \ •L  M  p  N  ¾N  x ÈN  O  ° O  =O  ¨ @O  tO  ¨ tO  ‰O  ¨ ŒO  ´O  ¨ ´O  ÉO  ¨ ÌO  ,P  \ ,P  \P  ¨ \P  pP  ¨ pP  ¹P  ° ¼P  GQ  ° HQ  àQ  | àQ  R  ° R  -R  ° 0R  jR  ° lR  ƒR  ¨ ŒR  ·R  ° ¸R  S  ¨ S  T  ¤  T  ¤T  à ¤T  ÕU  4 ØU  V  d V  LV  ° LV  W  |  W  3W  ¨ 4W  ÐW  t ÐW  =X  „ @X  ±X   ÜX  üX  Ä üX  ¨Z  œ ÄZ  \  ¬ \  À\  ¼ ì\  ]  ¨ ]  L]  ¸ L]  ˆ]  ¸ ]  Ì]  ° Ì]  ^  Ì ^  P^  ° P^  s^  Ä t^  R_  p T_  `  \  `  wa  ˆ xa  ‡b  ( ˆb  Öb  ¸ Øb  0c  ¸ 0c  d  < d  =d  ° @d  ‚d  ¸ „d  že  ð  e  Üe  ¨ Üe  #f  ä $f  ›f  Ô Äf  g  Ì g  Sg  Ì hg  i  ¤ i  4i  ¨ Ti  i  ¸ ˜i  ¾i  ¨ èi  ´j  À ´j  ãj  ¨ äj  :k  ¸ <k  Ÿk  ° ¼k  l  ˜ l  al  l dl  Æl  \ Èl  êm  È ìm  n  °  n  „n  d „n  ¶n  ¨ ¸n  „o  à ¨o  æp   èp  Qr  ( Tr  Ws  ø Xs  wt  ø <v  vv  ° xv  Ëv  ¸ Ìv  Þv  ¨ àv  òv  ¨ ôv  w  ° w  $w  ° $w  ªw  D ¬w  kx  X lx  ùx  ¸ üx  !y  ° $y  ‘y  Ì ˜y  Çy  ° ìy  Rz  ¸ Tz  ^z  ¨ `z  ˆz  ¨ ˆz  œz  ¨ œz  ®z  ¨ °z  Éz  ¨ Ìz  Üz  ¨ Üz  Ó|   Ô|  t}  ø }   }   °}  8   `  Š  °    °   À  5ˆ  $ 8ˆ  Wˆ  ¨ Xˆ  ¥ˆ  ° ¨ˆ  Áˆ  ¨ Äˆ  ƒ‰  d „‰  Ë‰  ¨ Ì‰  î‰  ¨ ð‰  Š  ¨ Š  AŠ  ° PŠ  ‹Š  ¸ œŠ  ‹  ° ‹  ñ‹  È ô‹  ò  À ô  õ    ø  ¸  @ ¸  y‘  l |‘  M’   P’  !“   $“  ù—  È ü—  ÷œ  è øœ  Ÿ    Ÿ  ¢  < ¢  A£  p D£  †¤  p ˆ¤  ¿¦  ˜ À¦  T©  ° \©  ·©  ˜ ¸©  2ª  ° «  H«  ° h«  R­  œ T­  ¤¯    8±  ¾±  ¸ À±  ð±  ¸ ð±  z³  P |³  u¶  Ø x¶  ·  \ ·  ý·  |  ¸  ˆ¸  \ @¹  º  ( º  Àº  @ Àº  »  ° »  ?»  ° P»  h»  ` p»  q»  d €»  »  h ¼»  
½  ˆ ½  Q½  ° T½  š½  ° œ½  â½  ° ä½  5¾  ¸ 8¾  ™¾  d °¾  ð¾  p  ¿  *¿  x 0¿  V¿  € `¿  §¿  ˆ ¨¿  Ñ¿   Ô¿  oÀ  d ¬À  òÀ  ¨ ôÀ  |Á  ˜ |Á  ãÁ  à äÁ  NÂ  ì PÂ  œÂ  d œÂ  ÷Ã  ¬  Ä  ›Ä  ü œÄ  hÅ  Ì hÅ  †Å  ¤ ˆÅ  ·Å  ¤ ¸Å  ÿÅ  ¨ Æ  FÆ  ¸ HÆ  Æ   œÆ  È  \  È  XÈ  ˆ XÈ  #É  h $É  éÉ  @ ìÉ  Ê  °  Ê  AÊ  ¨ DÊ  ³Ê  ( àÊ  ¥Ì  ˆ ¨Ì  Í  ° Í  ŽÎ  ¬ Î  Ï  ¸ Ï  Ð  Ü Ð  UÐ  Ð XÐ  rÐ  ¨ tÐ  ŽÐ  ¨ Ð  ÓÐ  À ÜÐ  Ñ  0  Ñ  SÑ  T  TÑ  Ó    Ó  $Ô    4Ô  wÔ  ü  Ô  èÔ  ô üÔ  Õ  ¨ $Õ  4Õ  ¨ 4Õ  qÕ  ° |Õ  ¼Õ  ° ¼Õ  Ö  ¨ ,Ö  @Ö  ¨ @Ö  PÖ  ¨ PÖ  …Ö  ¨ ˆÖ  ˜Ö  ¨ ˜Ö  ÙÖ  Ð ÜÖ  #×  ¸ 8×  b×  x  d×  º×  ¨ ¼×  ÛØ  p ÜØ  7Ù  ° XÙ  ·Ù  ° ÀÙ  6Ú  d PÚ  ÍÚ  ˜  DÛ  ‹Û  ° ŒÛ  ®Û  ° °Û  ÐÛ  ¨ ÐÛ  ðÛ  ¨ ðÛ  /Ü  ´  0Ü  mÜ   ! pÜ  µÜ  Ø  ¸Ü  Ý  ü  Ý  åÝ  ¤  èÝ  Þ  œ  Þ  ýÞ  ¬   ß  gß  ¸ hß  ©ß  ° ¬ß  à  d €à  "á  ° $á  ìá  d ìá  ªâ  d ¬â  åâ  ¨ èâ  
ã  ¨ ã  =ã  ° @ã  uã  ° xã  ©ã  ° ¬ã  áã  ° äã  Rä  L! `ä  Žä  D! ä  Øä  ° ôä  +å  ° Hå  ¦å  ° Üå  æ  ° æ  æ  ° „æ  Àæ  œ  Ôæ  Mè  Ü Pè  Ûé  Œ! Üé  ì  t!  ì  ¤í  ¤! ¤í  ñð  À! üð  ò  ü! ò  9ó  à! <ó  
õ  ”" õ  ‰õ  0" Œõ  $ö  ¸ $ö  ø  x" ø  {ú  `" |ú  4û  8" 4û  ”û  ¨ ”û  °û  ¨ °û  mþ  " pþ  ãþ  ¸" øþ  ÿ  ¨ °ÿ  Ž  È"   ž Œ!   5 \ 8 ô ˆ ô L ° L  ¨ °   d    Ü"  i ¸ l  Ô"  Ñ ° Ô ð ¨ ü é # ì ô p ô /	 ð" 0	 p	 ¸ p	 
 d 
 J
 ¸ L
 ”
 l# ”
 Â
 D! ä
 ] ,# Ä ` ¨# ` A Ì# D ¡  # ¤ 0 \ 0  #  ¾ ô# À  °  + ¨ , ¤ Ü 0 ¦ \ Ð  œ  0 Ø ¨ Ø F $ H ­ ¸ ° º <$ ¼ ( œ  ( Z ¸ \ d D$ d ó T$   [ |$ [ ð ”$ ð   ¸$   ÿ  d  ! ž! Ø$  ! h% È$ p% & ˜ & 5) ø$ 8) Î) è$ Ð) ç) ¨ è) !* ¨ $* ž* ¸  * C+   D+ é+ \ ì+ <,  % <, ä, 0% 4- î- ¸ ð- e. ¨ h. ó. d% ô. …/ \% ˆ/ ý3 Ì%  4 5  & 5 6  &  6 7  & 7 ­8  % °8 ¶; ˆ% ¸; < ¨ < ’< T& ”< 9= D& <= Ô= # Ô= }> Ì ˆ> Ë> 0" Ì> n@ x& Ü@ A & A A  & A QB ˜& TB !C d @C ëH È& I áJ Ô& äJ 6K 0" 8K TK ¨ TK L ü! L yL ð& |L 6M d 8M _N ø& `N ÐN ' ÐN ðN ¤ ðN †O  '  O °O 0' ðO P Ä P  S 8'  S PS ¨ PS mS ° pS ìS L' ìS T ° T T ¨  T ÊT ° ÌT jU ¸ lU V „' V V t'  V .W ' 0W ÃW ¨ ÄW šZ  ' œZ ¹Z ¨ ¼Z [ ¼' [ —[ p ð[ =\ Ä' l\ ñ\ p ] ^] è' `] ß] p à] +^ ¸ @^ _ ð'  _ "_ È @_ F_ Ð P_ v_   œ_ º_ Ô ` ·` „ ·` Ø` „ a ºa  Àa Ýa   Ýa b   b )b   b ­b   °b Øb „ üb 'c ( 'c ?c œ ?c Vc   Vc oc   oc ƒc   ƒc ¹c \ Ñc td Œ td %e Œ %e »e ì »e ×e ¸ ×e üe   üe ‚f ì ‚f ±f   ±f Bg ì Bg Xg   Xg {g   {g ‘g \ ‘g ´g \ ´g Êg   Êg äg   äg h   h +h   +h Eh   Eh ^h   ^h wh   wh ˜h   ˜h ³h   ³h Ðh   Ðh éh   éh i   i i   i 3i \ 3i Ki \ Ki wi   €i  i    i ²i ° ²i èi  èi îi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ~  þ}  ~  ù}  4~  $~  ~  õ}  Z~  G~  P~  9~  0~   ~  ~  ñ}  ‹  „  }  v  o  e  [  Q  G  K€  D€  =€  6€  /€  %€  €  €  €  3  ,  %        	    û€      î  Ô‚  (‚  _‚  Ú‚  ¿‚  °‚  0‚  Í‚  •‚  †‚  ‚  £‚  p‚  H‚  ð  ¶„  ¯„  ¡„  “„  …„  q„  ]„  I„  5„  æ…  ß…  Ñ…  Ã…  µ…  ¡…  …  y…  e…  B‡  ;‡  -‡  ‡  ‡  ‡  õ†  ç†  Ù†                                                                                                                                                                                          €                  0  €               	  H   `  }                  <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
                                    p $  °¢¸¢À¢È¢Ð¢à¢ð¢£££ £8£@£H££˜£¨£°£¸£À£È£Ð£Ø£à£ø£ ¤¤¤¤ ¤(¤0¤8¤@¤H¤P¤X¤`¤h¤p¤x¤€¤ˆ¤`¥h¥p¥€¥ˆ¥¥˜¥ ¥¨¥°¥¸¥À¥È¥Ø¥à¥è¥ð¥ø¥ ¦¸¨È¨Ø¨è¨ø¨©©(©8©H©X©h©x©ˆ©˜©¨©¸©È©Ø©è©ø©ªª(ª8ªHªXªhªxªˆª˜ª¨ª¸ªÈªØªèªøª««(«8«H«X«h«x«ˆ«˜«¨«¸«È«Ø«è«ø«¬¬(¬8¬H¬X¬h¬x¬ˆ¬˜¬¨¬¸¬È¬Ø¬è¬ø¬­­(­8­H­X­h­x­ˆ­˜­   € ô   ˆ¦¦˜¦ ¦À¦Ð¦à¦ð¦ §§ §0§@§P§`§p§€§§ §°§À§Ð§à§ð§ ¨¨ ¨0¨@¨P¨`¨p¨€¨¨ ¨°¨À¨Ð¨à¨ð¨ ©© ©0©@©P©`©p©€©© ©°©À©Ð©à©ð© ªª ª0ª@ªPª`ªpª€ªª ª°ªÀªÐªàªðª «« «0«@«P«`«p«€«« «°«À«Ð«à«ð« ¬¬ ¬0¬@¬P¬`¬p¬€¬¬ ¬°¬À¬Ð¬à¬ð¬ ­­ ­0­@­P­`­p­€­­ ­°­À­    ð   ˜¤ ¤¨¤€§§ §¨§°§¸§À§È§Ð§Ø§è§ð§ø§ ¨¨¨¨ ¨8¨H¨X¨`¨h¨p¨x¨ð©ø© ªªªª ª(ª0ª8ª@ªHªPªXª`ªhªpªxª€ªˆªª˜ª ª¨ª°ª¸ªÀªÈªÐªØªàªèªðªøª «««« «(«0«8«@«P«X«`«h«p«x«€«ˆ««˜« «¨«°«¸«À«È«Ð«Ø«à«è«ð«ø« ¬¬¬¬ ¬(¬0¬8¬@¬H¬P¬X¬`¬h¬p¬x¬€¬ˆ¬¬˜¬ ¬¨¬     ¤   p x € ˆ Ð Ø à è ð ø  ¡¡¡¡ ¡(¡0¡8¡@¡H¡P¡X¡`¡h¡p¡È¬Ø¬è¬ø¬­­(­8­H­X­h­x­ˆ­˜­¨­¸­È­Ø­è­ø­®®(®8®H®X®h®x®ˆ®˜®¨®¸®È®Ø®è®ø®¯¯(¯8¯H¯X¯h¯x¯ˆ¯˜¯¨¯¸¯È¯Ø¯è¯ø¯   ° h    ( 8 H X h x ˆ ˜ ¨ ¸ È Ø è ø ¡¡(¡8¡H¡X¡h¡x¡ˆ¡˜¡¨¡¸¡È¡Ø¡è¡ø¡¢¢(¢8¢H¢X¢h¢x¢ˆ¢˜¢¨¢¸¢È¢Ø¢è¢ø¢££(£8£H£X£h£x£ˆ£˜£¨£¸£È£Ø£è£ø£¤¤(¤8¤H¤X¤h¤x¤ˆ¤˜¤¨¤¸¤È¤Ø¤è¤ø¤¥¥(¥8¥H¥X¥h¥x¥ˆ¥˜¥¨¥¸¥È¥Ø¥è¥ø¥¦¦(¦8¦H¦X¦h¦x¦ˆ¦˜¦¨¦¸¦È¦Ø¦è¦ø¦§§(§8§H§X§h§x§ˆ§˜§¨§¸§È§Ø§è§ø§¨¨(¨8¨H¨X¨h¨x¨ˆ¨˜¨¨¨¸¨È¨Ø¨è¨ø¨©©(©8©H©X©h©x©ˆ©˜©¨©¸©È©Ø©è©ø©ªª(ª8ªHªXªhªxªˆª˜ª¨ª¸ªÈªØªèªøª À $   §0§@§P§`§p§€§§ §°§À§Ð§à§ð§ ¨¨ ¨0¨@¨P¨`¨p¨€¨¨ ¨°¨À¨Ð¨à¨ð¨ ©© ©0©@©P©`©p©€©© ©°©À©Ð©à©ð© ªª ª0ª@ªPª`ªpª€ªª ª°ªÀªÐªàªðª «« «0«@«P«`«p«€«« «°«À«Ð«à«ð« ¬¬ ¬0¬@¬P¬`¬p¬€¬¬ ¬°¬À¬Ð¬à¬ð¬ ­­ ­0­@­P­`­p­€­­ ­°­À­Ð­à­ð­ ®® ®0®@®P®`®p®€®® ®°®À®Ð®à®ð® ¯¯ ¯0¯@¯P¯`¯p¯€¯¯ ¯°¯À¯Ð¯à¯ð¯ Ð ´        0 @ P ` p €    ° À Ð à ð  ¡¡ ¡0¡@¡P¡`¡p¡€¡¡ ¡°¡À¡Ð¡à¡ð¡ ¢¢ ¢0¢@¢P¢`¢p¢€¢¢ ¢°¢À¢Ð¢à¢ð¢ ££ £0£@£P£`£p£€££ £°£À£Ð£à£ð£ ¤¤ ¤0¤@¤P¤`¤p¤€¤¤ ¤°¤À¤Ð¤à¤ð¤ ¥¥ ¥0¥@¥P¥ ð (   H«`«h«ð«¬¬¬ ¬(¬@¬Ð¯Ø¯à¯è¯ð¯ø¯   D          ( 0 8 @ H P X ` h p x € ˆ  ˜   ¨ ° ¸ À È Ð Ø à è  @ ´   0 €¡È¡è¡¢(¢H¢x¢¢˜¢ ¢Ø¢à¢@¨H¨P¨X¨`¨h¨p¨x¨€¨ˆ¨˜¨ ¨¨¨°¨¸¨À¨È¨Ð¨ ª(ªPªxª ªÈªðª«P««Ð«¬P¬¬Ð¬ø¬ ­P­p­ ­à­0®x®€®ˆ®®˜® ®¨®°®¸®À®È®Ð®Ø®à®è®ð®ø® ¯¯¯¯ ¯(¯0¯8¯@¯H¯P¯X¯`¯h¯p¯                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      'use strict';

const ns = {
  'win32-x64': 'win-x64',
  'win32-ia32': 'win-ia32',
  'win32-arm64': 'win-x64', // TODO: support arm64
  'darwin-x64': 'mac-x64',
  'darwin-arm64': 'mac-arm64'
};

const pa = `${process.platform}-${process.arch}`;
if (pa in ns) {
  module.exports = require('bindings')(ns[pa]);
} else {
  throw new Error(`Unsupported platform: ${pa}`);
}
{
  "name": "@fndroid/network-interface",
  "version": "18.0.3",
  "description": "Operating system network-related library for Node.js is used to obtain hardware status and network environment changes, etc.",
  "main": "index.js",
  "files": [
    "index.js",
    "build/Release/*.node",
    "src"
  ],
  "repository": {
    "type": "git",
    "url": "git://github.com/electron-modules/network-interface.git"
  },
  "dependencies": {
    "bindings": "^1.5.0",
    "node-addon-api": "^3.0.0"
  },
  "devDependencies": {
    "eslint": "7",
    "eslint-plugin-mocha": "^7.0.1",
    "git-contributor": "1",
    "husky": "^4.2.5",
    "mocha": "^8.1.0",
    "nyc": "^15.1.0"
  },
  "husky": {
    "hooks": {
      "pre-commit": "npm run lint"
    }
  },
  "license": "MIT"
}// Copyright (c) 2020 xudafeng

#include <napi.h>
#include <winsock2.h>
#include <windows.h>
#include <wlanapi.h>
#include "napi-thread-safe-callback.hpp"

#pragma comment(lib, "wlanapi.lib")

static std::shared_ptr<ThreadSafeCallback> notifyCallbackForJsFn = nullptr;

void OnNotificationCallback(PWLAN_NOTIFICATION_DATA data, PVOID context) {
  if (data != NULL
      && data -> NotificationSource == WLAN_NOTIFICATION_SOURCE_ACM) {
    switch (data -> NotificationCode) {
      case wlan_notification_acm_connection_complete: {
        notifyCallbackForJsFn -> call(
          [](Napi::Env env,
          std::vector<napi_value>& args) {
          // will run in main thread
          Napi::Object obj = Napi::Object::New(env);
          obj.Set("type", "wlan");
          obj.Set("code", "wlan_notification_acm_connection_complete");
          args = { env.Null(), obj };
        });
      } break;
      case wlan_notification_acm_disconnected: {
        notifyCallbackForJsFn -> call(
          [](Napi::Env env,
          std::vector<napi_value>& args) {
          Napi::Object obj = Napi::Object::New(env);
          obj.Set("type", "wlan");
          obj.Set("code", "wlan_notification_acm_disconnected");
          args = { env.Null(), obj };
        });
      } break;
      case wlan_notification_acm_scan_complete: {
        notifyCallbackForJsFn -> call([](
          Napi::Env env,
          std::vector<napi_value>& args) {
        Napi::Object obj = Napi::Object::New(env);
        obj.Set("type", "wlan");
        obj.Set("code", "wlan_notification_acm_scan_complete");
          args = { env.Null(), obj };
        });
      } break;
    }
  }
}

void RunCallback(const Napi::CallbackInfo& info) {
  // TODO(xudafeng) info[0] is the event name
  notifyCallbackForJsFn = std::make_shared<ThreadSafeCallback>(
    info[1].As<Napi::Function>());

  HANDLE hClient = NULL;
  DWORD dwMaxClient = 2;
  DWORD dwCurVersion = 0;
  DWORD dwResult = 0;
  dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);

  if (dwResult != ERROR_SUCCESS) {
      notifyCallbackForJsFn -> call(
        [](Napi::Env env,
        std::vector<napi_value>& args) {
        auto err = Napi::Object::New(env);
        err.Set("message",  Napi::String::New(env, "wlan open handle error"));
        args = { err };
      });
      return;
  }
  dwResult = WlanRegisterNotification(
    hClient,
    WLAN_NOTIFICATION_SOURCE_ACM,
    TRUE,
    WLAN_NOTIFICATION_CALLBACK(OnNotificationCallback),
    NULL,
    NULL,
    NULL);

  if (dwResult != ERROR_SUCCESS) {
      notifyCallbackForJsFn -> call(
        [](Napi::Env env,
        std::vector<napi_value>& args) {
        auto err = Napi::Object::New(env);
        err.Set(
          "message",
          Napi::String::New(env, "wlan rigister notification error"));
        args = { err };
      });
  }
}

Napi::Object Init(Napi::Env env, Napi::Object exports) {
  exports.Set(
    Napi::String::New(env, "addEventListener"),
    Napi::Function::New(env, RunCallback));
  return exports;
}

NODE_API_MODULE(main, Init);
#include "napi-thread-safe-callback.hpp"
#import <CoreWLAN/CoreWLAN.h>
#include <napi.h>

static std::shared_ptr<ThreadSafeCallback> notifyCallbackForJsFn = nullptr;

@interface EventDelegate : NSObject <CWEventDelegate>
@end

@implementation EventDelegate
- (void)ssidDidChangeForWiFiInterfaceWithName:(NSString *)interfaceName {
  notifyCallbackForJsFn->call([](Napi::Env env, std::vector<napi_value> &args) {
    Napi::Object obj = Napi::Object::New(env);
    obj.Set("type", "wlan");
    obj.Set("code", "ssidDidChangeForWiFiInterfaceWithName");
    args = {env.Null(), obj};
  });
}
@end

void RunCallback(const Napi::CallbackInfo &info) {
  notifyCallbackForJsFn =
      std::make_shared<ThreadSafeCallback>(info[1].As<Napi::Function>());
  CWWiFiClient *client = [CWWiFiClient sharedWiFiClient];
  EventDelegate *delegate = [[EventDelegate alloc] init];
  client.delegate = delegate;
  NSError *error;
  [client startMonitoringEventWithType:CWEventTypeSSIDDidChange error:&error];
  if (error) {
    notifyCallbackForJsFn->call(
        [](Napi::Env env, std::vector<napi_value> &args) {
          auto err = Napi::Object::New(env);
          err.Set("message",
                  Napi::String::New(env, "wlan rigister notification error"));
          args = {err};
        });
  }
}

Napi::Object Init(Napi::Env env, Napi::Object exports) {
  exports.Set(Napi::String::New(env, "addEventListener"),
              Napi::Function::New(env, RunCallback));
  return exports;
}

NODE_API_MODULE(main, Init);
#pragma once

// Needs to go first because of winsock issues
#include <uv.h>
#include <mutex>
#include <iostream>

class ThreadSafeCallback::Impl
{
    public:
        Impl(Napi::Reference<Napi::Value> &&receiver, Napi::FunctionReference &&callback)
            : receiver_(std::move(receiver)), callback_(std::move(callback)), close_(false)
        {
            if (receiver_.IsEmpty())
                receiver_ = Napi::Persistent(static_cast<Napi::Value>(Napi::Object::New(callback_.Env())));
            uv_async_init(uv_default_loop(), &handle_, &static_async_callback);
            handle_.data = this;
        }

        void unref()
        {
            uv_unref(reinterpret_cast<uv_handle_t *>(&handle_));
        }

        void call(arg_func_t arg_function, completion_func_t completion_function)
        {
            std::lock_guard<std::mutex> lock(mutex_);
            function_pairs_.push_back({arg_function, completion_function});
            uv_async_send(&handle_);
        }

        void close()
        {
            std::lock_guard<std::mutex> lock(mutex_);
            close_ = true;
            uv_async_send(&handle_);
        }

    protected:
        using func_pair_t = std::pair<arg_func_t, completion_func_t>;

        static void static_async_callback(uv_async_t *handle)
        {
            try
            {
                static_cast<Impl *>(handle->data)->async_callback();
            }
            catch (std::exception& e)
            {
                Napi::Error::Fatal("", e.what());
            }
            catch (...) 
            {
                Napi::Error::Fatal("", "ERROR: Unknown exception during async callback");
            }
        }

        void async_callback()
        {
            auto env = callback_.Env();
            while (true)
            {
                std::vector<func_pair_t> func_pairs;
                {
                    std::lock_guard<std::mutex> lock(mutex_);
                    if (function_pairs_.empty())
                        break;
                    else
                        func_pairs.swap(function_pairs_);
                }

                for (const auto &function_pair : func_pairs)
                {
                    Napi::HandleScope scope(env);
                    std::vector<napi_value> args;
                    if (function_pair.first)
                        function_pair.first(env, args);
                    Napi::Value result(env, nullptr);
                    Napi::Error error(env, nullptr);
                    try
                    {
                        result = callback_.MakeCallback(receiver_.Value(), args);
                    }
                    catch (Napi::Error& err)
                    {
                        error = std::move(err);
                    }
                    if (function_pair.second)
                        function_pair.second(result, error);
                    else if (!error.IsEmpty())
                        throw std::runtime_error(error.Message());
                }
            }

            if (close_)
                uv_close(reinterpret_cast<uv_handle_t *>(&handle_), [](uv_handle_t *handle) {
                    delete static_cast<Impl *>(handle->data);
                });
        }

        Napi::Reference<Napi::Value> receiver_;
        Napi::FunctionReference      callback_;

        uv_async_t                   handle_;

        std::mutex                   mutex_;
        std::vector<func_pair_t>     function_pairs_;
        bool                         close_;
};

// public API

inline ThreadSafeCallback::ThreadSafeCallback(const Napi::Function &callback)
    : ThreadSafeCallback(Napi::Value(), callback)
{}

inline ThreadSafeCallback::ThreadSafeCallback(const Napi::Value& receiver, const Napi::Function& callback)
    : impl(nullptr)
{
    if (!receiver.IsEmpty() && !(receiver.IsObject() || receiver.IsFunction()))
        throw Napi::Error::New(callback.Env(), "Callback receiver must be an object or function");
    if (!callback.IsFunction())
        throw Napi::Error::New(callback.Env(), "Callback must be a function");
    impl = new Impl(Napi::Persistent(receiver), Napi::Persistent(callback));
}

inline void ThreadSafeCallback::unref()
{
    impl->unref();
}

inline ThreadSafeCallback::ThreadSafeCallback(ThreadSafeCallback&& other)
: impl(other.impl)
{
    other.impl = nullptr;
}

inline ThreadSafeCallback::~ThreadSafeCallback()
{
    // Destruction of the impl is defered because:
    // 1) uv_async_close may only be called on nodejs main thread
    // 2) uv_async_t memory may only be freed in close callback
    if (impl)
        impl->close();
}

inline std::future<void> ThreadSafeCallback::operator()()
{
    return operator()(arg_func_t(nullptr));
}

inline std::future<void> ThreadSafeCallback::operator()(arg_func_t arg_function)
{
    auto promise = std::make_shared<std::promise<void>>();
    operator()(arg_function, [promise](const Napi::Value &value, const Napi::Error &error)
    {
        try
        {
            if (error.IsEmpty())
                promise->set_value();
            else
                throw std::runtime_error(error.Message());
        }
        catch (...)
        {
            try
            {
                promise->set_exception(std::current_exception());
            }
            catch (...)
            {
                Napi::Error::Fatal("", "Unable to set exception on promise");
            }
        }
    });
    return promise->get_future();
}

inline std::future<void> ThreadSafeCallback::error(const std::string& message)
{
    return operator()([message](napi_env env, std::vector<napi_value>& args) {
        args.push_back(Napi::Error::New(env, message).Value());    
    });
}

inline void ThreadSafeCallback::operator()(completion_func_t completion_function)
{
    operator()(nullptr, completion_function);
}

inline void ThreadSafeCallback::operator()(arg_func_t arg_function, completion_func_t completion_function)
{
    if (impl)
        impl->call(arg_function, completion_function);
    else
        throw std::runtime_error("Callback called after move");
}

inline void ThreadSafeCallback::error(const std::string& message, completion_func_t completion_function)
{
    operator()([message](napi_env env, std::vector<napi_value>& args) {
        args.push_back(Napi::Error::New(env, message).Value());    
    }, completion_function);
}

inline std::future<std::string> ThreadSafeCallback::callStringify()
{
    return callStringify(nullptr);
}

inline std::future<std::string> ThreadSafeCallback::callStringify(arg_func_t arg_function)
{
    return call<std::string>(arg_function, [](const Napi::Value& value)
    {
        auto JSON = value.Env().Global().Get("JSON").As<Napi::Object>();
        auto stringify = JSON.Get("stringify").As<Napi::Function>();
        return stringify.Call(JSON, {value}).As<Napi::String>().Utf8Value();
    });
}

inline std::future<std::string> ThreadSafeCallback::errorStringify(const std::string& message)
{
    return callStringify([message](napi_env env, std::vector<napi_value>& args)
    {
        args.push_back(Napi::Error::New(env, message).Value());
    });
}

template <typename T>
inline std::future<T> ThreadSafeCallback::call(std::function<T(const Napi::Value &)> completion_function)
{
    return call<T>(nullptr, completion_function);
}

template <typename T>
inline std::future<T> ThreadSafeCallback::call(arg_func_t arg_function, std::function<T(const Napi::Value &)> completion_function)
{
    auto promise = std::make_shared<std::promise<T>>();
    operator()(arg_function, [promise, completion_function](const Napi::Value &value, const Napi::Error& error)
    {
        try
        {
            if (error.IsEmpty())
                promise->set_value(completion_function(value));
            else
                throw std::runtime_error(error.Message());
        }
        catch (...)
        {
            try
            {
                promise->set_exception(std::current_exception());
            }
            catch (...)
            {
                Napi::Error::Fatal("", "Unable to set exception on promise");
            }
        }
    });
    return promise->get_future();
}

inline void ThreadSafeCallback::call()
{
    operator()(nullptr, nullptr);
}

inline void ThreadSafeCallback::call(arg_func_t arg_function)
{
    operator()(arg_function, nullptr);
}

inline void ThreadSafeCallback::callError(const std::string& message)
{
    error(message, nullptr);
}  
#pragma once

#include <napi.h>
#include <functional>
#include <future>
#include <string>
#include <vector>

#ifndef NAPI_CPP_EXCEPTIONS
#error ThreadSafeCallback needs napi exception support
#endif

#if defined(_MSC_VER) && !_HAS_EXCEPTIONS
#error Please define _HAS_EXCEPTIONS=1, otherwise exception handling will not work properly
#endif

class ThreadSafeCallback
{
    public:
        // The argument function is responsible for providing napi_values which will
        // be used for invoking the callback. Since this touches JS state it must run
        // in the NodeJS main loop.
        using arg_func_t = std::function<void(napi_env, std::vector<napi_value>&)>;

        // The completion function is reponsible for handling the return value and/or
        // raised exception from calling the callback. Since this touches JS state it
        // must run in the NodeJS main loop. Either the Value or Error will be empty.
        using completion_func_t = std::function<void(const Napi::Value&, const Napi::Error&)>;

        // Both functions will be called within the same HandleScope

        // Must be called from Node event loop because it calls napi_create_reference and uv_async_init
        ThreadSafeCallback(const Napi::Function& callback);
        ThreadSafeCallback(const Napi::Value& receiver, const Napi::Function& callback);

        // Must be called from Node event loop because it calls uv_unref
        void unref();

        // All other member functions can be called from any thread, including move constructor and destructor
        ThreadSafeCallback(ThreadSafeCallback&& other);
        ~ThreadSafeCallback();

        // Invoke JS callback from any thread. These functions are additionally thread-safe, i.e.
        // they can be invoked concurrently

        // - return future<void>, JS error is transformed to std::runtime_error
        std::future<void> operator()();
        std::future<void> operator()(arg_func_t arg_function);
        std::future<void> error(const std::string& message);

        // - handle result/error in NodeJS main thread
        void operator()(completion_func_t completion_function);
        void operator()(arg_func_t arg_function, completion_func_t completion_function);
        void error(const std::string& message, completion_func_t completion_function);

        // - return JSON result in future<string>
        std::future<std::string> callStringify();
        std::future<std::string> callStringify(arg_func_t arg_function);
        std::future<std::string> errorStringify(const std::string& message);

        // - return JS value in future<T>
        template<typename T>
        std::future<T> call(std::function<T(const Napi::Value &)> completion_function);
        template<typename T>
        std::future<T> call(arg_func_t arg_function, std::function<T(const Napi::Value &)> completion_function);

        // - ignore result, terminate on error
        void call();
        void call(arg_func_t arg_function);
        void callError(const std::string& message);
        
    protected:
        // Cannot be copied or assigned
        ThreadSafeCallback(const ThreadSafeCallback&) = delete;
        ThreadSafeCallback& operator=(const ThreadSafeCallback&) = delete;
        ThreadSafeCallback& operator=(ThreadSafeCallback&&) = delete;

        class Impl;
        Impl* impl;
};

#include "napi-thread-safe-callback-impl.hpp"var Node = {
  child: require('child_process'),
  crypto: require('crypto'),
  fs: require('fs'),
  os: require('os'),
  path: require('path'),
  process: process,
  util: require('util')
};

function Attempt(instance, end) {
  var platform = Node.process.platform;
  if (platform === 'darwin') return Mac(instance, end);
  if (platform === 'linux') return Linux(instance, end);
  if (platform === 'win32') return Windows(instance, end);
  end(new Error('Platform not yet supported.'));
}

function EscapeDoubleQuotes(string) {
  if (typeof string !== 'string') throw new Error('Expected a string.');
  return string.replace(/"/g, '\\"');
}

function Exec() {
  if (arguments.length < 1 || arguments.length > 3) {
    throw new Error('Wrong number of arguments.');
  }
  var command = arguments[0];
  var options = {};
  var end = function() {};
  if (typeof command !== 'string') {
    throw new Error('Command should be a string.');
  }
  if (arguments.length === 2) {
    if (Node.util.isObject(arguments[1])) {
      options = arguments[1];
    } else if (Node.util.isFunction(arguments[1])) {
      end = arguments[1];
    } else {
      throw new Error('Expected options or callback.');
    }
  } else if (arguments.length === 3) {
    if (Node.util.isObject(arguments[1])) {
      options = arguments[1];
    } else {
      throw new Error('Expected options to be an object.');
    }
    if (Node.util.isFunction(arguments[2])) {
      end = arguments[2];
    } else {
      throw new Error('Expected callback to be a function.');
    }
  }
  if (/^sudo/i.test(command)) {
    return end(new Error('Command should not be prefixed with "sudo".'));
  }
  if (typeof options.name === 'undefined') {
    var title = Node.process.title;
    if (ValidName(title)) {
      options.name = title;
    } else {
      return end(new Error('process.title cannot be used as a valid name.'));
    }
  } else if (!ValidName(options.name)) {
    var error = '';
    error += 'options.name must be alphanumeric only ';
    error += '(spaces are allowed) and <= 70 characters.';
    return end(new Error(error));
  }
  if (typeof options.icns !== 'undefined') {
    if (typeof options.icns !== 'string') {
      return end(new Error('options.icns must be a string if provided.'));
    } else if (options.icns.trim().length === 0) {
      return end(new Error('options.icns must not be empty if provided.'));
    }
  }
  if (typeof options.env !== 'undefined') {
    if (typeof options.env !== 'object') {
      return end(new Error('options.env must be an object if provided.'));
    } else if (Object.keys(options.env).length === 0) {
      return end(new Error('options.env must not be empty if provided.'));
    } else {
      for (var key in options.env) {
        var value = options.env[key];
        if (typeof key !== 'string' || typeof value !== 'string') {
          return end(
            new Error('options.env environment variables must be strings.')
          );
        }
        // "Environment variable names used by the utilities in the Shell and
        // Utilities volume of IEEE Std 1003.1-2001 consist solely of uppercase
        // letters, digits, and the '_' (underscore) from the characters defined
        // in Portable Character Set and do not begin with a digit. Other
        // characters may be permitted by an implementation; applications shall
        // tolerate the presence of such names."
        if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {
          return end(
            new Error(
              'options.env has an invalid environment variable name: ' +
              JSON.stringify(key)
            )
          );
        }
        if (/[\r\n]/.test(value)) {
          return end(
            new Error(
              'options.env has an invalid environment variable value: ' +
              JSON.stringify(value)
            )
          );
        }
      }
    }
  }
  var platform = Node.process.platform;
  if (platform !== 'darwin' && platform !== 'linux' && platform !== 'win32') {
    return end(new Error('Platform not yet supported.'));
  }
  var instance = {
    command: command,
    options: options,
    uuid: undefined,
    path: undefined
  };
  Attempt(instance, end);
}

function Linux(instance, end) {
  LinuxBinary(instance,
    function(error, binary) {
      if (error) return end(error);
      var command = [];
      // Preserve current working directory:
      command.push('cd "' + EscapeDoubleQuotes(Node.process.cwd()) + '";');
      // Export environment variables:
      for (var key in instance.options.env) {
        var value = instance.options.env[key];
        command.push('export ' + key + '="' + EscapeDoubleQuotes(value) + '";');
      }
      command.push('"' + EscapeDoubleQuotes(binary) + '"');
      if (/kdesudo/i.test(binary)) {
        command.push(
          '--comment',
          '"' + instance.options.name + ' wants to make changes. ' +
          'Enter your password to allow this."'
        );
        command.push('-d'); // Do not show the command to be run in the dialog.
        command.push('--');
      } else if (/pkexec/i.test(binary)) {
        command.push('--disable-internal-agent');
      }
      var magic = 'SUDOPROMPT\n';
      command.push(
        '/bin/bash -c "echo ' + EscapeDoubleQuotes(magic.trim()) + '; ' +
        EscapeDoubleQuotes(instance.command) +
        '"'
      );
      command = command.join(' ');
      Node.child.exec(command, { encoding: 'utf-8', maxBuffer: MAX_BUFFER },
        function(error, stdout, stderr) {
          // ISSUE 88:
          // We must distinguish between elevation errors and command errors.
          //
          // KDESUDO:
          // kdesudo provides no way to do this. We add a magic marker to know
          // if elevation succeeded. Any error thereafter is a command error.
          //
          // PKEXEC:
          // "Upon successful completion, the return value is the return value of
          // PROGRAM. If the calling process is not authorized or an
          // authorization could not be obtained through authentication or an
          // error occured, pkexec exits with a return value of 127. If the
          // authorization could not be obtained because the user dismissed the
          // authentication dialog, pkexec exits with a return value of 126."
          //
          // However, we do not rely on pkexec's return of 127 since our magic
          // marker is more reliable, and we already use it for kdesudo.
          var elevated = stdout && stdout.slice(0, magic.length) === magic;
          if (elevated) stdout = stdout.slice(magic.length);
          // Only normalize the error if it is definitely not a command error:
          // In other words, if we know that the command was never elevated.
          // We do not inspect error messages beyond NO_POLKIT_AGENT.
          // We cannot rely on English errors because of internationalization.
          if (error && !elevated) {
            if (/No authentication agent found/.test(stderr)) {
              error.message = NO_POLKIT_AGENT;
            } else {
              error.message = PERMISSION_DENIED;
            }
          }
          end(error, stdout, stderr);
        }
      );
    }
  );
}

function LinuxBinary(instance, end) {
  var index = 0;
  // We used to prefer gksudo over pkexec since it enabled a better prompt.
  // However, gksudo cannot run multiple commands concurrently.
  var paths = ['/usr/bin/kdesudo', '/usr/bin/pkexec'];
  function test() {
    if (index === paths.length) {
      return end(new Error('Unable to find pkexec or kdesudo.'));
    }
    var path = paths[index++];
    Node.fs.stat(path,
      function(error) {
        if (error) {
          if (error.code === 'ENOTDIR') return test();
          if (error.code === 'ENOENT') return test();
          end(error);
        } else {
          end(undefined, path);
        }
      }
    );
  }
  test();
}

function Mac(instance, callback) {
  var temp = Node.os.tmpdir();
  if (!temp) return callback(new Error('os.tmpdir() not defined.'));
  var user = Node.process.env.USER; // Applet shell scripts require $USER.
  if (!user) return callback(new Error('env[\'USER\'] not defined.'));
  UUID(instance,
    function(error, uuid) {
      if (error) return callback(error);
      instance.uuid = uuid;
      instance.path = Node.path.join(
        temp,
        instance.uuid,
        instance.options.name + '.app'
      );
      function end(error, stdout, stderr) {
        Remove(Node.path.dirname(instance.path),
          function(errorRemove) {
            if (error) return callback(error);
            if (errorRemove) return callback(errorRemove);
            callback(undefined, stdout, stderr);
          }
        );
      }
      MacApplet(instance,
        function(error, stdout, stderr) {
          if (error) return end(error, stdout, stderr);
          MacIcon(instance,
            function(error) {
              if (error) return end(error);
              MacPropertyList(instance,
                function(error, stdout, stderr) {
                  if (error) return end(error, stdout, stderr);
                  MacCommand(instance,
                    function(error) {
                      if (error) return end(error);
                      MacOpen(instance,
                        function(error, stdout, stderr) {
                          if (error) return end(error, stdout, stderr);
                          MacResult(instance, end);
                        }
                      );
                    }
                  );
                }
              );
            }
          );
        }
      );
    }
  );
}

function MacApplet(instance, end) {
  var parent = Node.path.dirname(instance.path);
  Node.fs.mkdir(parent,
    function(error) {
      if (error) return end(error);
      var zip = Node.path.join(parent, 'sudo-prompt-applet.zip');
      Node.fs.writeFile(zip, APPLET, 'base64',
        function(error) {
          if (error) return end(error);
          var command = [];
          command.push('/usr/bin/unzip');
          command.push('-o'); // Overwrite any existing applet.
          command.push('"' + EscapeDoubleQuotes(zip) + '"');
          command.push('-d "' + EscapeDoubleQuotes(instance.path) + '"');
          command = command.join(' ');
          Node.child.exec(command, { encoding: 'utf-8' }, end);
        }
      );
    }
  );
}

function MacCommand(instance, end) {
  var path = Node.path.join(
    instance.path,
    'Contents',
    'MacOS',
    'sudo-prompt-command'
  );
  var script = [];
  // Preserve current working directory:
  // We do this for commands that rely on relative paths.
  // This runs in a subshell and will not change the cwd of sudo-prompt-script.
  script.push('cd "' + EscapeDoubleQuotes(Node.process.cwd()) + '"');
  // Export environment variables:
  for (var key in instance.options.env) {
    var value = instance.options.env[key];
    script.push('export ' + key + '="' + EscapeDoubleQuotes(value) + '"');
  }
  script.push(instance.command);
  script = script.join('\n');
  Node.fs.writeFile(path, script, 'utf-8', end);
}

function MacIcon(instance, end) {
  if (!instance.options.icns) return end();
  Node.fs.readFile(instance.options.icns,
    function(error, buffer) {
      if (error) return end(error);
      var icns = Node.path.join(
        instance.path,
        'Contents',
        'Resources',
        'applet.icns'
      );
      Node.fs.writeFile(icns, buffer, end);
    }
  );
}

function MacOpen(instance, end) {
  // We must run the binary directly so that the cwd will apply.
  var binary = Node.path.join(instance.path, 'Contents', 'MacOS', 'applet');
  // We must set the cwd so that the AppleScript can find the shell scripts.
  var options = {
    cwd: Node.path.dirname(binary),
    encoding: 'utf-8'
  };
  // We use the relative path rather than the absolute path. The instance.path
  // may contain spaces which the cwd can handle, but which exec() cannot.
  Node.child.exec('./' + Node.path.basename(binary), options, end);
}

function MacPropertyList(instance, end) {
  // Value must be in single quotes (not double quotes) according to man entry.
  // e.g. defaults write com.companyname.appname "Default Color" '(255, 0, 0)'
  // The defaults command will be changed in an upcoming major release to only
  // operate on preferences domains. General plist manipulation utilities will
  // be folded into a different command-line program.
  var plist = Node.path.join(instance.path, 'Contents', 'Info.plist');
  var path = EscapeDoubleQuotes(plist);
  var key = EscapeDoubleQuotes('CFBundleName');
  var value = instance.options.name + ' Password Prompt';
  if (/'/.test(value)) {
    return end(new Error('Value should not contain single quotes.'));
  }
  var command = [];
  command.push('/usr/bin/defaults');
  command.push('write');
  command.push('"' + path + '"');
  command.push('"' + key + '"');
  command.push("'" + value + "'"); // We must use single quotes for value.
  command = command.join(' ');
  Node.child.exec(command, { encoding: 'utf-8' }, end);
}

function MacResult(instance, end) {
  var cwd = Node.path.join(instance.path, 'Contents', 'MacOS');
  Node.fs.readFile(Node.path.join(cwd, 'code'), 'utf-8',
    function(error, code) {
      if (error) {
        if (error.code === 'ENOENT') return end(new Error(PERMISSION_DENIED));
        end(error);
      } else {
        Node.fs.readFile(Node.path.join(cwd, 'stdout'), 'utf-8',
          function(error, stdout) {
            if (error) return end(error);
            Node.fs.readFile(Node.path.join(cwd, 'stderr'), 'utf-8',
              function(error, stderr) {
                if (error) return end(error);
                code = parseInt(code.trim(), 10); // Includes trailing newline.
                if (code === 0) {
                  end(undefined, stdout, stderr);
                } else {
                  error = new Error(
                    'Command failed: ' + instance.command + '\n' + stderr
                  );
                  error.code = code;
                  end(error, stdout, stderr);
                }
              }
            );
          }
        );
      }
    }
  );
}

function Remove(path, end) {
  if (typeof path !== 'string' || !path.trim()) {
    return end(new Error('Argument path not defined.'));
  }
  var command = [];
  if (Node.process.platform === 'win32') {
    if (/"/.test(path)) {
      return end(new Error('Argument path cannot contain double-quotes.'));
    }
    command.push('rmdir /s /q "' + path + '"');
  } else {
    command.push('/bin/rm');
    command.push('-rf');
    command.push('"' + EscapeDoubleQuotes(Node.path.normalize(path)) + '"');
  }
  command = command.join(' ');
  Node.child.exec(command, { encoding: 'utf-8' }, end);
}

function UUID(instance, end) {
  Node.crypto.randomBytes(256,
    function(error, random) {
      if (error) random = Date.now() + '' + Math.random();
      var hash = Node.crypto.createHash('SHA256');
      hash.update('sudo-prompt-3');
      hash.update(instance.options.name);
      hash.update(instance.command);
      hash.update(random);
      var uuid = hash.digest('hex').slice(-32);
      if (!uuid || typeof uuid !== 'string' || uuid.length !== 32) {
        // This is critical to ensure we don't remove the wrong temp directory.
        return end(new Error('Expected a valid UUID.'));
      }
      end(undefined, uuid);
    }
  );
}

function ValidName(string) {
  // We use 70 characters as a limit to side-step any issues with Unicode
  // normalization form causing a 255 character string to exceed the fs limit.
  if (!/^[a-z0-9 ]+$/i.test(string)) return false;
  if (string.trim().length === 0) return false;
  if (string.length > 70) return false;
  return true;
}

function Windows(instance, callback) {
  var temp = Node.os.tmpdir();
  if (!temp) return callback(new Error('os.tmpdir() not defined.'));
  UUID(instance,
    function(error, uuid) {
      if (error) return callback(error);
      instance.uuid = uuid;
      instance.path = Node.path.join(temp, instance.uuid);
      if (/"/.test(instance.path)) {
        // We expect double quotes to be reserved on Windows.
        // Even so, we test for this and abort if they are present.
        return callback(
          new Error('instance.path cannot contain double-quotes.')
        );
      }
      instance.pathElevate = Node.path.join(instance.path, 'elevate.vbs');
      instance.pathExecute = Node.path.join(instance.path, 'execute.bat');
      instance.pathCommand = Node.path.join(instance.path, 'command.bat');
      instance.pathStdout = Node.path.join(instance.path, 'stdout');
      instance.pathStderr = Node.path.join(instance.path, 'stderr');
      instance.pathStatus = Node.path.join(instance.path, 'status');
      Node.fs.mkdir(instance.path,
        function(error) {
          if (error) return callback(error);
          function end(error, stdout, stderr) {
            Remove(instance.path,
              function(errorRemove) {
                if (error) return callback(error);
                if (errorRemove) return callback(errorRemove);
                callback(undefined, stdout, stderr);
              }
            );
          }
          WindowsWriteExecuteScript(instance,
            function(error) {
              if (error) return end(error);
              WindowsWriteCommandScript(instance,
                function(error) {
                  if (error) return end(error);
                  WindowsElevate(instance,
                    function(error, stdout, stderr) {
                      if (error) return end(error, stdout, stderr);
                      WindowsWaitForStatus(instance,
                        function(error) {
                          if (error) return end(error);
                          WindowsResult(instance, end);
                        }
                      );
                    }
                  );
                }
              );
            }
          );
        }
      );
    }
  );
}

function WindowsElevate(instance, end) {
  // We used to use this for executing elevate.vbs:
  // var command = 'cscript.exe //NoLogo "' + instance.pathElevate + '"';
  var command = [];
  command.push('powershell.exe');
  command.push('Start-Process');
  command.push('-FilePath');
  // Escape characters for cmd using double quotes:
  // Escape characters for PowerShell using single quotes:
  // Escape single quotes for PowerShell using backtick:
  // See: https://ss64.com/ps/syntax-esc.html
  command.push('"\'' + instance.pathExecute.replace(/'/g, "`'") + '\'"');
  command.push('-WindowStyle hidden');
  command.push('-Verb runAs');
  command = command.join(' ');
  var child = Node.child.exec(command, { encoding: 'utf-8' },
    function(error, stdout, stderr) {
      // We used to return PERMISSION_DENIED only for error messages containing
      // the string 'canceled by the user'. However, Windows internationalizes
      // error messages (issue 96) so now we must assume all errors here are
      // permission errors. This seems reasonable, given that we already run the
      // user's command in a subshell.
      if (error) return end(new Error(PERMISSION_DENIED), stdout, stderr);
      end();
    }
  );
  child.stdin.end(); // Otherwise PowerShell waits indefinitely on Windows 7.
}

function WindowsResult(instance, end) {
  Node.fs.readFile(instance.pathStatus, 'utf-8',
    function(error, code) {
      if (error) return end(error);
      Node.fs.readFile(instance.pathStdout, 'utf-8',
        function(error, stdout) {
          if (error) return end(error);
          Node.fs.readFile(instance.pathStderr, 'utf-8',
            function(error, stderr) {
              if (error) return end(error);
              code = parseInt(code.trim(), 10);
              if (code === 0) {
                end(undefined, stdout, stderr);
              } else {
                error = new Error(
                  'Command failed: ' + instance.command + '\r\n' + stderr
                );
                error.code = code;
                end(error, stdout, stderr);
              }
            }
          );
        }
      );
    }
  );
}

function WindowsWaitForStatus(instance, end) {
  // VBScript cannot wait for the elevated process to finish so we have to poll.
  // VBScript cannot return error code if user does not grant permission.
  // PowerShell can be used to elevate and wait on Windows 10.
  // PowerShell can be used to elevate on Windows 7 but it cannot wait.
  // powershell.exe Start-Process cmd.exe -Verb runAs -Wait
  Node.fs.stat(instance.pathStatus,
    function(error, stats) {
      if ((error && error.code === 'ENOENT') || stats.size < 2) {
        // Retry if file does not exist or is not finished writing.
        // We expect a file size of 2. That should cover at least "0\r".
        // We use a 1 second timeout to keep a light footprint for long-lived
        // sudo-prompt processes.
        setTimeout(
          function() {
            // If administrator has no password and user clicks Yes, then
            // PowerShell returns no error and execute (and command) never runs.
            // We check that command output has been redirected to stdout file:
            Node.fs.stat(instance.pathStdout,
              function(error) {
                if (error) return end(new Error(PERMISSION_DENIED));
                WindowsWaitForStatus(instance, end);
              }
            );
          },
          1000
        );
      } else if (error) {
        end(error);
      } else {
        end();
      }
    }
  );
}

function WindowsWriteCommandScript(instance, end) {
  var cwd = Node.process.cwd();
  if (/"/.test(cwd)) {
    // We expect double quotes to be reserved on Windows.
    // Even so, we test for this and abort if they are present.
    return end(new Error('process.cwd() cannot contain double-quotes.'));
  }
  var script = [];
  script.push('@echo off');
  // Set code page to UTF-8:
  script.push('chcp 65001>nul');
  // Preserve current working directory:
  // We pass /d as an option in case the cwd is on another drive (issue 70).
  script.push('cd /d "' + cwd + '"');
  // Export environment variables:
  for (var key in instance.options.env) {
    // "The characters <, >, |, &, ^ are special command shell characters, and
    // they must be preceded by the escape character (^) or enclosed in
    // quotation marks. If you use quotation marks to enclose a string that
    // contains one of the special characters, the quotation marks are set as
    // part of the environment variable value."
    // In other words, Windows assigns everything that follows the equals sign
    // to the value of the variable, whereas Unix systems ignore double quotes.
    var value = instance.options.env[key];
    script.push('set ' + key + '=' + value.replace(/([<>\\|&^])/g, '^$1'));
  }
  script.push(instance.command);
  script = script.join('\r\n');
  Node.fs.writeFile(instance.pathCommand, script, 'utf-8', end);
}

function WindowsWriteElevateScript(instance, end) {
  // We do not use VBScript to elevate since it does not return an error if
  // the user does not grant permission. This is here for reference.
  // var script = [];
  // script.push('Set objShell = CreateObject("Shell.Application")');
  // script.push(
  // 'objShell.ShellExecute "' + instance.pathExecute + '", "", "", "runas", 0'
  // );
  // script = script.join('\r\n');
  // Node.fs.writeFile(instance.pathElevate, script, 'utf-8', end);
}

function WindowsWriteExecuteScript(instance, end) {
  var script = [];
  script.push('@echo off');
  script.push(
    'call "' + instance.pathCommand + '"' +
    ' > "' + instance.pathStdout + '" 2> "' + instance.pathStderr + '"'
  );
  script.push('(echo %ERRORLEVEL%) > "' + instance.pathStatus + '"');
  script = script.join('\r\n');
  Node.fs.writeFile(instance.pathExecute, script, 'utf-8', end);
}

module.exports.exec = Exec;

// We used to expect that applet.app would be included with this module.
// This could not be copied when sudo-prompt was packaged within an asar file.
// We now store applet.app as a zip file in base64 within index.js instead.
// To recreate: "zip -r ../applet.zip Contents" (with applet.app as CWD).
// The zip file must not include applet.app as the root directory so that we
// can extract it directly to the target app directory.
//
// To update the applet, follow these steps:
// * open main.scpt in macOS Script Editor and edit it as needed
// * select File | Export... (file format: Application)
// * replace the `applet` in `Contents/MacOS`
// * `zip -r ../applet.zip Contents`
// * base64 encode the zip file
// * replace the contents of the `APPLET` variable
var APPLET = 'UEsDBAoAAAAAABg+cVMAAAAAAAAAAAAAAAAJABwAQ29udGVudHMvVVQJAAPQpZRh0qWUYXV4CwABBPUBAAAEFAAAAFBLAwQKAAAAAAANPnFTAAAAAAAAAAAAAAAADwAcAENvbnRlbnRzL01hY09TL1VUCQADuaWUYbmllGF1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgABUePSBrsViN9AQAAqgIAACEAHABDb250ZW50cy9NYWNPUy9zdWRvLXByb21wdC1zY3JpcHRVVAkAA4mQEFf+pJRhdXgLAAEE9QEAAAQUAAAAjVI7TxwxEO73VwwcgobFQHnFIYRSpOUUpYy89hxr4ReeMZfLr8941yDSpVrL4+85uzlTk4tq0jQPG9gjA1WbgF1AYh0yHFKRq4nwrWLsU6O9J3AHYD79YmdekQl0QbCO9OTRboeFNbxaV2DMoN51UXZSDa0ufuy/PcMOlMV3Fav3cL+7vBtUpbKgOFUz/xdkA485e9yb4jJfEZyLN5pRxrRcnUPQJ9CeUTKwTZXBu4gjRuviC90IwXfub0igLf36jFM7YSlLyhkl21FLRogpjn+wJCjItUQwySLoaGXQEY31J64gKQ8hy1cMcMNIH2gYRCLXJlZQB1rwRmchxH94g45Vqj71OtuSlgWMuaSQeTQphIa923Xb97vVw/oezZzg4kF6a2xi6ymVVf4YsdDsMqRDT3z9kXfx0sSlEJ41QyUxb3QEix55CRa267aoqYjIMcK6oW6jU3XVR3/UJ/oIdvtJ/GV3YBOSVChQYQMBy19nnfbpZTvgb8dwO/wFUEsDBBQAAAAIAMM9cVNCvifldAkAAHjDAQAVABwAQ29udGVudHMvTWFjT1MvYXBwbGV0VVQJAAMupZRhLqWUYXV4CwABBPUBAAAEFAAAAO3dfWwT5x3A8efsJLglpQax0go6IloqqFAcutDRlxWHxMUMREKSoqjqdtjxBRv8tvMFkgKrWcRW2tJRtZPaSZvQ/tjKxFCF0NZVW3HWbt0mTYVuo+1WVdXEqlRrN1RNHTCF7Hl85/jsOClTX6ZJ34/05LnfPc/9nufufPnvufvtpeeeF0J4NCFmydorRFBW+07JP3PkvkahaOrPC0NqnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+7ly++d2mWEJpXbntkuVqWJxuE2C+aiu3XyRKWRde72taF7g11d07NoV3GOCrPa5rK0xvq661xfLDqACeudxVRnIdlDFnlbtX5uu6y8z3uiuvceetE3h3qes4ajOamzXfWyTevKi7xOfkaKvLpcSOZNcwa+c47xze7Ys+M8xtM70qkY3oiPZCpkW/ZGjtflyuuyFdF1424PmBGUkbt8x1y8uVdsXeGfOX72tHW2+ZqCFbd16ra65Tyfc2amW1yXvrOiJmbPt8yVzzTvHQ9ndRzw6loJqlnLXNKvmVOPp8rdudrEJWxrm/LWBVxZb6WqnwtNfK5f4e6nozMNL/VTr5rXbE7n3pZR70r1vX+TCqVSU83vy4nX5PrGHe+6me4/NxvXL9pQ6hjfek3krf7ntLKsXDFWlWuJbJHi9NPXRtfvnxOSlPeHicu66ywf7uq/a28fc227rP3zxbl37jmKqp/xfNdJbivfE/c1ItMmoT9gpPAYM4MJBPRQGw4GXPaFzrzOPPyLxeO3NnS+dAD777ytWN3PHOj3OdXHRquFFrD7OI9eNaZw80zzOPT0nXX5f0/VucdF/Y5Fv9frIjWqSMDPcM5y0gFNiaiZsQcDtyt/lXsypg7coH2jGn0GObORL+Rax4o7Q9sMcxcIpPOBdoqerjGWe0aRxtqrC+OU7rmsthDNq9tltc/EbWPu0nY1/m1vH3/ljux+l0AAAAAAAAAAAAAAAAAAAAAAAAAAID/znYRPvDX8MjZc+GH9/rCBwf9By6O/EIb/Ys3rL0fPnD6b3XhkVFfeOQ2MfiB2hpT6wMPvDSmViP/85B0jzz8pJXMRp63sv25sXVyf3h/wfKFZSe1/m9l4UsvHHK5pzjcu/7wS6FzwqfJ0feeDx/ce25MLZANj7zol90nlm7ShJhY2lX8211cHrnx4PXL5UZbz8RSVR9SayHFO29PTEzEr1dbb6it29TWK3LLXlO5yDlHd63WNKo1l63CLmp9uHC21fraRtljvr3CUgvaTcXx5zs5tPu7hTbk1/yNs3yHZMuNTt7zlyaKbixd2LY5/q972q8qrTP/sOPHnONvmOZ4t+L68aBd9zn1VqeOB2uvJ/U568TnOfWiNZe37hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEw1d4m4Z22PEPOC6uPX9sfro4l0zDDFZrPlkDBXzw3q7ZFksj2TymbSRtrqSOSyEas/LmRjUDZ2Zo10hzEQGUxak31UW3heUDeGEmpb0XQ9FZc7jP5By9DjRkQNsWCmT9V/JKf2BIufHb9PljtlWRuKFD+Xrr7TfbXmt6ck7O9Sa65XFwSq4pAdT85zQ1WsNrxi8hvkwfqp+0StM5/mmta+mvZ1nHKDzEjMvD0QWHXrytZVrbd8rJcPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPApe/nie5canfXuat36PFny9ULsF03F9utkCQu1hr2rbV3o3lB359Qc2tRdU6g8D2oqT2+or7fG8cGqA5y43inltfSWMWSVu1Xnm7/GznefK654yUCdyLtDvbiiPjdtvuya8nsCSrE7n8/J11iRT48byaxh1sj3oJOvxRXPPL/B9K5EOqYn0gOZGvmedfKFXfFML1VQ9+HJYp6Ott42vb1zU4+dLVh1H6pqr1NUH3/x+G0Z122YNp9PlPN4Xf0bROU81bzGJvO4GvJV88rXnlcpl64nI3puOBXNJPWsZU6bz++K3fOaJSpjXY9FrEj1eZZjf77yPP1V+aqVn6eN6zdtCHWsL93LQtV5FuxqyEmmicrnbImceYvTT43tK5R/o0pTwU61VdZNwr4+qv3Bgv08nZN1XNazZekSlWNoovwOi+m85uSpNkfY46nnITCYMwPJRDSg3lzhtC905vGH+h0//nvv7WeP77njX+OLTm2/xTmueI4Ns4WmSmkODQ95bhaue/a8EMvk+as86vl2U+PGnTGKv4kV0TqVNdAznLOMVGBjImpGzOHA3WYkZezKmDtygfaMafQY5s5Ev5FrHijtD2wxzFwik84F2ip6uMZZ7RpHG2qsL45TOmdZ7CGb1zbL809E7eNucs4jX7Dv23InVvdFud6Jt47K3J/Y21EAAAAAAAAAAAAAAAAAAAAAAAAAAAD+v4zvPnlk3Cseyz96sFs0HzX3zXm0O5I8Zs4X4omgECfqZC1Evnt89+jTBa9+ZmJEnB7frR0ZbxeP+cS+7mXisDnmFUfekjlU3/HdbUdkn8dU38VN3j9m6zx9wrO4uN3lbG+u8/hVfG7dySPF/V5R3N8lxLUXJiYWqHmp7Q/ktlojqtbGLnLm667VklG1JrZV2OUrzvpYta3W0jbKI/3llcSlZfUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOB/6LDz/fijayq/Lw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD49c28Q3aqeF4wNJ2N6zhqM6tFEOmaYYrMpDomcmBvU2yPJZHsmlc2kjbTVkchlI1Z/XDX6ZGNn1kh3GAORwaQ12Ue2lWi6norrxpDRP2gZetyIqNQLPKXmJ77aUqy3yHKnLGtDkXoV18lytea3U8hyrV1PvqIgUBWH7Hgyr9rwOnlK2yW1ZjTNOdY+uymXyozEzNsDgVW3rmxd1XqL+/pefLOxIGewQJTnOl/uk1PyeIWnTk1OTa9flj6n/SohRrc2eUTj5d3B4OSVbstmk4bVI+clvvyPY7m911xYekXY+5PXP/PO2A5r+P2ehZu/2X5kxdPvfvs3v/7RA0eP92V+9c5Aoe7V06d3eDr76if2nNhz//4//fzh8IEVP/iwdkPPnuk89pTm2/nET5u+uOfE8W984c2H+1fOHX6ma/SBn73a8lHzf+T21v7Nj6e/6zvz533PxT57WD+7eGTDlU993vedt393oeP1a2Kf9Pife2PdqSXff33Lrb//1lNX/NA8/ej3jm4fH33Rv/jfhUc6T770ovgPUEsDBAoAAAAAACA+cVMAAAAAAAAAAAAAAAATABwAQ29udGVudHMvUmVzb3VyY2VzL1VUCQAD3KWUYd+llGF1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgA7VBwR/dYplZAAAAAagEAAB4AHABDb250ZW50cy9SZXNvdXJjZXMvYXBwbGV0LnJzcmNVVAkAA82cSVZTpQ9XdXgLAAEE9QEAAAQUAAAAY2BgZGBgYFQBEiDsxjDygJQDPlkmEIEaRpJAQg8kLAMML8bi5OIqIFuouKA4A0jLMTD8/w+S5AdrB7PlBIAEAFBLAwQKAAAAAADtUHBHAAAAAAAAAAAAAAAAJAAcAENvbnRlbnRzL1Jlc291cmNlcy9kZXNjcmlwdGlvbi5ydGZkL1VUCQADzZxJVi2REFd1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgA7VBwRzPLNU9TAAAAZgAAACsAHABDb250ZW50cy9SZXNvdXJjZXMvZGVzY3JpcHRpb24ucnRmZC9UWFQucnRmVVQJAAPNnElWU6UPV3V4CwABBPUBAAAEFAAAACWJOw6AIBAFe08DCBVX2QbWhZgQ1vCpCHcXtHkzkzegtCDB5Xp/g0+UyihARnb70kL/UbvffYpjQODcmk9zKXListxCoUsZA7EQ5S0+dVq085gvUEsDBAoAAAAAAIeBjkgAAAAAAAAAAAAAAAAbABwAQ29udGVudHMvUmVzb3VyY2VzL1NjcmlwdHMvVVQJAAM9pQ9XLZEQV3V4CwABBPUBAAAEFAAAAFBLAwQUAAAACAAJgI5ICl5liTUBAADMAQAAJAAcAENvbnRlbnRzL1Jlc291cmNlcy9TY3JpcHRzL21haW4uc2NwdFVUCQADcaIPVxyllGF1eAsAAQT1AQAABBQAAAB9UMtOAkEQrNldd9dhH3Dz6NGYiPIJHjTxLCZeF9iDcXEJC0RvfoI/4sEfIvoHPEQEhbIHvOok01U16emu7vOkaF2dXu7XqrUTcyMATkxCwYKthCAUbmciAQ8O11yFcGBfbF/4jR24WmCvWjwUeXqfNutn13XyEeYYHkqKam+kghdJGfUCvwIfB6jiGAX6aCHHETroCrYFe6IKNEXfGOXChc0v7HKpBRzdSFrtELvbumKVC80F/FIjzwe9bj91uZRuXJuwAiLjNi7DlsxPaJSUAMrCFOeac3GfpINennQ6d/0sA4z7JxzKiVCCV+YHAs74LuuIONUi//4RIoC63czrIbYQS3PFicWJcTMTv1JHmocmROLJ45gjzfHvXJqjf7ZZ4RT+61uaBbDipGh2ZanBcjh8/gFQSwMEFAAAAAgAgHFwR3658rH2BgAAH9wAAB4AHABDb250ZW50cy9SZXNvdXJjZXMvYXBwbGV0LmljbnNVVAkAAx/WSVb+pJRhdXgLAAEE9QEAAAQUAAAA7d15PNR5HMfx72+claOWxrFZSm3KUUahZRmRkuSYpEQSHSNDmbbTGZaKomMK1Yw9VKiWlKJE0bmxu9m2VY6kdVWTY6dlxBqPR/vYLfvYf/bR8fB+zeP38OTB42Hmj8/j+/j+8f2y/YK4hDzQZvtNNSdEvmW7y/zZisM1hxNCFB3m2LkRQhHJIy/b/8Ur5NhKQqQV2ba2Lg62tjouIcEr2YErCDFPTHT3Xj3GXdWqkLtKd3w5K3Ba7Ppj1ooTFPcunJaeVxBRXW0axHMwrRrX5C96Vn7wRrm5SeHLdOdZLqHGLWmqpZfyI3X0fle+b5U3Zf/wCVWVOnpWeX9EuzTtzGhNsTBJYRfk1Kx4FtpxWHhk67Pzq4QyTeczF/GSVSl66klDNUY9N253/Of6STFxAjXZdA9XLX3v4/Nops4jNp5ZUmt7eavPrz9X9/JP5NtrjdZZp7389G/HRsTvpp4fdb+1gdrSnaxt3eL5iWh5U74xs3TKlnMP/X65wrUKT2SvbDCovxMv484KiD8wcvf3ZX/YK4iNv7vrI3AKaM1sevzV8rQvqgU5a4W+vXxOyerYDs6VoxUpfKsYoa+XWH/6hMaHrqWOmXv49j3y9Ws4YWfH1N3npSWPspZNelCTeipjlNDOK/u+XGYR/5sTZ3aMDW+MMe0wqDeMrzBrvMkquZeVubfsUMmG0vzpnu3tFtLF2wuWpLZdCxFzWEfaGx+3TE+9tXWzXU/3hc1zRGEh/BlPm0ObOmJ4hnI93x7YFz26NDo+It3eRtRY35vzYO5IKY0AzccOEUZ7vlZaMuWRNyejqcJRQc2sUtuR3tod5Sboszu9MyTy1GLZLNeEROcqw/MtrV2uZeVqofzQWNOsqIgixdPDZPQOTo27ONxpkdQofz2mbC393urj0UqyDNUTqho7fNJXqn3cWGzZ/lleyu2Sosv7eq9f94nuOleeN9k/zmobPVezZ1c2/c6KtqxYLz8V63ADM5r1pxo6H/0aXbGU4SBKXsegxm3eYekk2jsmV8Vf2H1vbuCspZZmd19eSDBxy0ibVT0jr1CwrM9k8jwv1i/ZBkpnv9S9NUks432x56pPjlezgZnr2XqNwwUe5V0+Xa09DJF+T8A3dRENHm35Idc8vy/MnXflSeAi7kZ3TY7sI/rzH1PKtpdpdaxra/BQtg/n3UhpPNXpbbk42EjJPvuATHdA10KN+Yl22Z3RnXF5Bhcnhum9vHrxdtjNsNth5WEl3rRki1uHHxU9NFqrzfW5Kgro0PSs3UrfrJ6/qpm3JnvuWN3A0Z/QQy6bPnT1ZbRPVJD3m+l6L4p3olVM50858rmWkp/2b0fFXkVGC6nt4hxap1Ovu/uC5rX7JmktDHYyL7JRSRhv65+wz3TBi3MeHenj9js/dmOPZFmwVI7nVNoox53O2CDg0MQ9Wj8fD8p1a/nJryaMtvjOZ0GtirdHb3T8ae9yzVOmk3mpLU3xx9S/vD5v12pWXBXH82MZYU3n7s40RqGyyhKj2YfECsVF1m1PxEb1u/IIb0xk1DXdIPWKm3I1MuYdMVW590u0kueEjqirfPFEdKmbsSn8ZWXzg1JudqNh5Bkzi8OXaoXr71ox+7LIqsQISsAPdXdZ1hvcPxiSHOxsFmyinv5gLBkalwW/Oz9dIx/P9C2OpKRkFdSnLgMAAHgreC4lRVkSSrOAyeqfRsRh1ny7kzOXbetf6cwghO7y5kqHRiTPwEqnc1NlN1Y6WOlgpYOVziArnVGiN1Y6HLlgrHQAAAAAAAAAAAAAAAA+aNRpq9OeE0qKlsT7536y8VRCHNvf3E+WJpJnYD85Qks/GvvJ2E/GfjL2kwfZT2aSV/vJUZLRckXQxdJuiHXBdjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvHXQ/BuaCZFLkJwF8J78SwAAAAAw5BBVEUXJFROqyL/k29dO/DImRHrbmyd+ER3JM3DiF3fLlk6c+IUTv3DiF078GuTEL6InWeUvGvYfJ35dUFYYqUOo8slnrr02gRj9w+X8IBOIKXkGJlAme10NJhAmECYQJtBgE8jn1ZmDlOLAHTYvnDlKZv/XHTb9g4vJJBTd5mDra4PLBNeMYnBhcGFw4ZpRAAA+cPzrNaPG03DNKFY6WOlgpYNrRgEAAAAAAAAAAAAAAIC/8G/XjAaaMPq/Ne8jf38JyX99z+YO/J1qHxGTVw97veRnUpId6Nd+f2i9ot75f4B3/+7efaA5Zw0h0vIEITRkC/LlrOj/osD2Cw7iDswEasjPhPUDnwNzyH8OCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYTQ+9CfUEsDBBQAAAAIAKBxcEeUdoaooQEAAL4DAAATABwAQ29udGVudHMvSW5mby5wbGlzdFVUCQADXNZJVv6klGF1eAsAAQT1AQAABBQAAAB9k1FvmzAUhZ+XX8F4D06lKaomSpUEIkWinVXIpD1Nrn1LrBrbs00J+/UzSdolZOwRc75zz72+ju/3tQjewFiu5F14E83CACRVjMvqLtyW6+lteJ9M4s/pt1X5A2eBFty6AG+X+WYVhFOEFloLQCgt0wDnm6IMvAdC2WMYhDvn9FeE2raNSK+KqKp7oUXYKA3Gdbk3m3ogYo6FvszR/SKOP2WcumTyKX6FLlmtl41kAhZCqPaB74HlihLBfxPnERujXuS1zjSAhlAKbyCUrkG6J6i8/kNunfEdJ5msfIJdjE7fAz7bA20ceRYwBA/9uTFuQ5Vc8zEq4rQPPoIyH5a/cDBD2A8zsg1TU21UrcdryxeV+gH6bonpvh9HO/SaR7Mx/pHUV7kxsbZVhgX4v6Uxoa+kgrLTVw4LjPMxrNgp405Bi4NiSN+Mxy14JYlrzD9mLa6C5sUDl7xu6qKzDupTzWW3MHTHHdALn9MWHsn97fzn/Mv7v7/BZtH8vAg6X928eIJfDTdgV8Q8n13Cxa7mxXaTCeh3dCh4t4vR4Z0kkz9QSwMECgAAAAAA7VBwR6ogBnsIAAAACAAAABAAHABDb250ZW50cy9Qa2dJbmZvVVQJAAPNnElW/qSUYXV4CwABBPUBAAAEFAAAAEFQUExhcGx0UEsBAh4DCgAAAAAAGD5xUwAAAAAAAAAAAAAAAAkAGAAAAAAAAAAQAO1BAAAAAENvbnRlbnRzL1VUBQAD0KWUYXV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAA0+cVMAAAAAAAAAAAAAAAAPABgAAAAAAAAAEADtQUMAAABDb250ZW50cy9NYWNPUy9VVAUAA7mllGF1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAFR49IGuxWI30BAACqAgAAIQAYAAAAAAABAAAA7YGMAAAAQ29udGVudHMvTWFjT1Mvc3Vkby1wcm9tcHQtc2NyaXB0VVQFAAOJkBBXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAwz1xU0K+J+V0CQAAeMMBABUAGAAAAAAAAAAAAO2BZAIAAENvbnRlbnRzL01hY09TL2FwcGxldFVUBQADLqWUYXV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAACA+cVMAAAAAAAAAAAAAAAATABgAAAAAAAAAEADtQScMAABDb250ZW50cy9SZXNvdXJjZXMvVVQFAAPcpZRhdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgA7VBwR/dYplZAAAAAagEAAB4AGAAAAAAAAAAAAKSBdAwAAENvbnRlbnRzL1Jlc291cmNlcy9hcHBsZXQucnNyY1VUBQADzZxJVnV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAO1QcEcAAAAAAAAAAAAAAAAkABgAAAAAAAAAEADtQQwNAABDb250ZW50cy9SZXNvdXJjZXMvZGVzY3JpcHRpb24ucnRmZC9VVAUAA82cSVZ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACADtUHBHM8s1T1MAAABmAAAAKwAYAAAAAAABAAAApIFqDQAAQ29udGVudHMvUmVzb3VyY2VzL2Rlc2NyaXB0aW9uLnJ0ZmQvVFhULnJ0ZlVUBQADzZxJVnV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAIeBjkgAAAAAAAAAAAAAAAAbABgAAAAAAAAAEADtQSIOAABDb250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cy9VVAUAAz2lD1d1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAJgI5ICl5liTUBAADMAQAAJAAYAAAAAAAAAAAApIF3DgAAQ29udGVudHMvUmVzb3VyY2VzL1NjcmlwdHMvbWFpbi5zY3B0VVQFAANxog9XdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAgHFwR3658rH2BgAAH9wAAB4AGAAAAAAAAAAAAKSBChAAAENvbnRlbnRzL1Jlc291cmNlcy9hcHBsZXQuaWNuc1VUBQADH9ZJVnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAKBxcEeUdoaooQEAAL4DAAATABgAAAAAAAEAAACkgVgXAABDb250ZW50cy9JbmZvLnBsaXN0VVQFAANc1klWdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAA7VBwR6ogBnsIAAAACAAAABAAGAAAAAAAAQAAAKSBRhkAAENvbnRlbnRzL1BrZ0luZm9VVAUAA82cSVZ1eAsAAQT1AQAABBQAAABQSwUGAAAAAA0ADQDcBAAAmBkAAAAA';

var PERMISSION_DENIED = 'User did not grant permission.';
var NO_POLKIT_AGENT = 'No polkit authentication agent found.';

// See issue 66:
var MAX_BUFFER = 134217728;
The MIT License (MIT)

Copyright (c) 2015 Joran Dirk Greef

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

{
  "name": "@vscode/sudo-prompt",
  "version": "9.3.1",
  "description": "Run a command using sudo, prompting the user with an OS dialog if necessary",
  "main": "index.js",
  "types": "index.d.ts",
  "files": [
    "LICENSE",
    "README.md",
    "index.d.ts",
    "index.js",
    "package.json",
    "test.js",
    "test-concurrent.js"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/bpasero/sudo-prompt.git"
  },
  "author": "Joran Dirk Greef",
  "license": "MIT",
  "homepage": "https://github.com/bpasero/sudo-prompt#readme"
}var sudo = require('./');
var exec = require('child_process').exec;

function kill(end) {
  if (process.platform === 'win32') return end();
  exec('sudo -k', end);
}
kill(
  function() {
    var options = {
      name: 'Sudo Prompt'
    };
    if (process.platform === 'win32') {
      var sleep = 'timeout /t 10\r\necho world';
    } else {
      var sleep = 'sleep 10 && echo world';
    }
    sudo.exec(sleep, options,
      function(error, stdout, stderr) {
        console.log(error, stdout, stderr);
      }
    );
    sudo.exec('echo hello', options,
      function(error, stdout, stderr) {
        console.log(error, stdout, stderr);
      }
    );
  }
);
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var require$$0 = require('source-map');
var parser$1 = require('@babel/parser');
var url = require('url');
var path = require('path');
var require$$0$1 = require('fs');
var require$$2 = require('util');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0);
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2);

var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

function getDefaultExportFromCjs (x) {
	return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}

var splitRE$2 = /\r?\n/g;
var emptyRE$1 = /^\s*$/;
var needFixRE = /^(\r?\n)*[\t\s]/;

var deIndent = function deindent (str) {
  if (!needFixRE.test(str)) {
    return str
  }
  var lines = str.split(splitRE$2);
  var min = Infinity;
  var type, cur, c;
  for (var i = 0; i < lines.length; i++) {
    var line = lines[i];
    if (!emptyRE$1.test(line)) {
      if (!type) {
        c = line.charAt(0);
        if (c === ' ' || c === '\t') {
          type = c;
          cur = count(line, type);
          if (cur < min) {
            min = cur;
          }
        } else {
          return str
        }
      } else {
        cur = count(line, type);
        if (cur < min) {
          min = cur;
        }
      }
    }
  }
  return lines.map(function (line) {
    return line.slice(min)
  }).join('\n')
};

function count (line, type) {
  var i = 0;
  while (line.charAt(i) === type) {
    i++;
  }
  return i
}

const emptyObject = Object.freeze({});
const isArray = Array.isArray;
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef(v) {
    return v === undefined || v === null;
}
function isDef(v) {
    return v !== undefined && v !== null;
}
function isTrue(v) {
    return v === true;
}
function isFalse(v) {
    return v === false;
}
/**
 * Check if value is primitive.
 */
function isPrimitive(value) {
    return (typeof value === 'string' ||
        typeof value === 'number' ||
        // $flow-disable-line
        typeof value === 'symbol' ||
        typeof value === 'boolean');
}
function isFunction(value) {
    return typeof value === 'function';
}
/**
 * Quick object check - this is primarily used to tell
 * objects from primitive values when we know the value
 * is a JSON-compliant type.
 */
function isObject$1(obj) {
    return obj !== null && typeof obj === 'object';
}
/**
 * Get the raw type string of a value, e.g., [object Object].
 */
const _toString = Object.prototype.toString;
function toRawType(value) {
    return _toString.call(value).slice(8, -1);
}
/**
 * Strict object type check. Only returns true
 * for plain JavaScript objects.
 */
function isPlainObject(obj) {
    return _toString.call(obj) === '[object Object]';
}
/**
 * Check if val is a valid array index.
 */
function isValidArrayIndex(val) {
    const n = parseFloat(String(val));
    return n >= 0 && Math.floor(n) === n && isFinite(val);
}
function isPromise(val) {
    return (isDef(val) &&
        typeof val.then === 'function' &&
        typeof val.catch === 'function');
}
/**
 * Convert a value to a string that is actually rendered.
 */
function toString$2(val) {
    return val == null
        ? ''
        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
            ? JSON.stringify(val, null, 2)
            : String(val);
}
/**
 * Convert an input value to a number for persistence.
 * If the conversion fails, return original string.
 */
function toNumber(val) {
    const n = parseFloat(val);
    return isNaN(n) ? val : n;
}
/**
 * Make a map and return a function for checking if a key
 * is in that map.
 */
function makeMap(str, expectsLowerCase) {
    const map = Object.create(null);
    const list = str.split(',');
    for (let i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? val => map[val.toLowerCase()] : val => map[val];
}
/**
 * Check if a tag is a built-in tag.
 */
const isBuiltInTag = makeMap('slot,component', true);
/**
 * Check if an attribute is a reserved attribute.
 */
const isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
/**
 * Check whether an object has the property.
 */
const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
    return hasOwnProperty$1.call(obj, key);
}
/**
 * Create a cached version of a pure function.
 */
function cached(fn) {
    const cache = Object.create(null);
    return function cachedFn(str) {
        const hit = cache[str];
        return hit || (cache[str] = fn(str));
    };
}
/**
 * Camelize a hyphen-delimited string.
 */
const camelizeRE = /-(\w)/g;
const camelize = cached((str) => {
    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
});
/**
 * Capitalize a string.
 */
const capitalize = cached((str) => {
    return str.charAt(0).toUpperCase() + str.slice(1);
});
/**
 * Hyphenate a camelCase string.
 */
const hyphenateRE = /\B([A-Z])/g;
const hyphenate = cached((str) => {
    return str.replace(hyphenateRE, '-$1').toLowerCase();
});
/**
 * Mix properties into target object.
 */
function extend(to, _from) {
    for (const key in _from) {
        to[key] = _from[key];
    }
    return to;
}
/**
 * Merge an Array of Objects into a single Object.
 */
function toObject(arr) {
    const res = {};
    for (let i = 0; i < arr.length; i++) {
        if (arr[i]) {
            extend(res, arr[i]);
        }
    }
    return res;
}
/* eslint-disable no-unused-vars */
/**
 * Perform no operation.
 * Stubbing args to make Flow happy without leaving useless transpiled code
 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
 */
function noop(a, b, c) { }
/**
 * Always return false.
 */
const no = (a, b, c) => false;
/* eslint-enable no-unused-vars */
/**
 * Return the same value.
 */
const identity = (_) => _;
/**
 * Generate a string containing static keys from compiler modules.
 */
function genStaticKeys$1(modules) {
    return modules
        .reduce((keys, m) => {
        return keys.concat(m.staticKeys || []);
    }, [])
        .join(',');
}
/**
 * Check if two values are loosely equal - that is,
 * if they are plain objects, do they have the same shape?
 */
function looseEqual(a, b) {
    if (a === b)
        return true;
    const isObjectA = isObject$1(a);
    const isObjectB = isObject$1(b);
    if (isObjectA && isObjectB) {
        try {
            const isArrayA = Array.isArray(a);
            const isArrayB = Array.isArray(b);
            if (isArrayA && isArrayB) {
                return (a.length === b.length &&
                    a.every((e, i) => {
                        return looseEqual(e, b[i]);
                    }));
            }
            else if (a instanceof Date && b instanceof Date) {
                return a.getTime() === b.getTime();
            }
            else if (!isArrayA && !isArrayB) {
                const keysA = Object.keys(a);
                const keysB = Object.keys(b);
                return (keysA.length === keysB.length &&
                    keysA.every(key => {
                        return looseEqual(a[key], b[key]);
                    }));
            }
            else {
                /* istanbul ignore next */
                return false;
            }
        }
        catch (e) {
            /* istanbul ignore next */
            return false;
        }
    }
    else if (!isObjectA && !isObjectB) {
        return String(a) === String(b);
    }
    else {
        return false;
    }
}
/**
 * Return the first index at which a loosely equal value can be
 * found in the array (if value is a plain object, the array must
 * contain an object of the same shape), or -1 if it is not present.
 */
function looseIndexOf(arr, val) {
    for (let i = 0; i < arr.length; i++) {
        if (looseEqual(arr[i], val))
            return i;
    }
    return -1;
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
function hasChanged(x, y) {
    if (x === y) {
        return x === 0 && 1 / x !== 1 / y;
    }
    else {
        return x === x || y === y;
    }
}

const isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
    'link,meta,param,source,track,wbr');
// Elements that you can, intentionally, leave open
// (and which close themselves)
const canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
const isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
    'title,tr,track');

/**
 * unicode letters used for parsing html tags, component names and property paths.
 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
 */
const unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
/**
 * Define a property.
 */
function def(obj, key, val, enumerable) {
    Object.defineProperty(obj, key, {
        value: val,
        enumerable: !!enumerable,
        writable: true,
        configurable: true
    });
}

/**
 * Not type-checking this file because it's mostly vendor code.
 */
// Regular Expressions for parsing tags and attributes
const attribute$2 = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
const dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
const ncname = `[a-zA-Z_][\\-\\.0-9_a-zA-Z${unicodeRegExp.source}]*`;
const qnameCapture = `((?:${ncname}\\:)?${ncname})`;
const startTagOpen = new RegExp(`^<${qnameCapture}`);
const startTagClose = /^\s*(\/?)>/;
const endTag = new RegExp(`^<\\/${qnameCapture}[^>]*>`);
const doctype = /^<!DOCTYPE [^>]+>/i;
// #7298: escape - to avoid being passed as HTML comment when inlined in page
const comment$3 = /^<!\--/;
const conditionalComment = /^<!\[/;
// Special Elements (can contain anything)
const isPlainTextElement = makeMap('script,style,textarea', true);
const reCache = {};
const decodingMap = {
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&amp;': '&',
    '&#10;': '\n',
    '&#9;': '\t',
    '&#39;': "'"
};
const encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
const encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
// #5992
const isIgnoreNewlineTag = makeMap('pre,textarea', true);
const shouldIgnoreFirstNewline = (tag, html) => tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
function decodeAttr(value, shouldDecodeNewlines) {
    const re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
    return value.replace(re, match => decodingMap[match]);
}
function parseHTML(html, options) {
    const stack = [];
    const expectHTML = options.expectHTML;
    const isUnaryTag = options.isUnaryTag || no;
    const canBeLeftOpenTag = options.canBeLeftOpenTag || no;
    let index = 0;
    let last, lastTag;
    while (html) {
        last = html;
        // Make sure we're not in a plaintext content element like script/style
        if (!lastTag || !isPlainTextElement(lastTag)) {
            let textEnd = html.indexOf('<');
            if (textEnd === 0) {
                // Comment:
                if (comment$3.test(html)) {
                    const commentEnd = html.indexOf('-->');
                    if (commentEnd >= 0) {
                        if (options.shouldKeepComment && options.comment) {
                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
                        }
                        advance(commentEnd + 3);
                        continue;
                    }
                }
                // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
                if (conditionalComment.test(html)) {
                    const conditionalEnd = html.indexOf(']>');
                    if (conditionalEnd >= 0) {
                        advance(conditionalEnd + 2);
                        continue;
                    }
                }
                // Doctype:
                const doctypeMatch = html.match(doctype);
                if (doctypeMatch) {
                    advance(doctypeMatch[0].length);
                    continue;
                }
                // End tag:
                const endTagMatch = html.match(endTag);
                if (endTagMatch) {
                    const curIndex = index;
                    advance(endTagMatch[0].length);
                    parseEndTag(endTagMatch[1], curIndex, index);
                    continue;
                }
                // Start tag:
                const startTagMatch = parseStartTag();
                if (startTagMatch) {
                    handleStartTag(startTagMatch);
                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
                        advance(1);
                    }
                    continue;
                }
            }
            let text, rest, next;
            if (textEnd >= 0) {
                rest = html.slice(textEnd);
                while (!endTag.test(rest) &&
                    !startTagOpen.test(rest) &&
                    !comment$3.test(rest) &&
                    !conditionalComment.test(rest)) {
                    // < in plain text, be forgiving and treat it as text
                    next = rest.indexOf('<', 1);
                    if (next < 0)
                        break;
                    textEnd += next;
                    rest = html.slice(textEnd);
                }
                text = html.substring(0, textEnd);
            }
            if (textEnd < 0) {
                text = html;
            }
            if (text) {
                advance(text.length);
            }
            if (options.chars && text) {
                options.chars(text, index - text.length, index);
            }
        }
        else {
            let endTagLength = 0;
            const stackedTag = lastTag.toLowerCase();
            const reStackedTag = reCache[stackedTag] ||
                (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));
            const rest = html.replace(reStackedTag, function (all, text, endTag) {
                endTagLength = endTag.length;
                if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {
                    text = text
                        .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
                        .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
                }
                if (shouldIgnoreFirstNewline(stackedTag, text)) {
                    text = text.slice(1);
                }
                if (options.chars) {
                    options.chars(text);
                }
                return '';
            });
            index += html.length - rest.length;
            html = rest;
            parseEndTag(stackedTag, index - endTagLength, index);
        }
        if (html === last) {
            options.chars && options.chars(html);
            if (process.env.NODE_ENV !== 'production' && !stack.length && options.warn) {
                options.warn(`Mal-formatted tag at end of template: "${html}"`, {
                    start: index + html.length
                });
            }
            break;
        }
    }
    // Clean up any remaining tags
    parseEndTag();
    function advance(n) {
        index += n;
        html = html.substring(n);
    }
    function parseStartTag() {
        const start = html.match(startTagOpen);
        if (start) {
            const match = {
                tagName: start[1],
                attrs: [],
                start: index
            };
            advance(start[0].length);
            let end, attr;
            while (!(end = html.match(startTagClose)) &&
                (attr = html.match(dynamicArgAttribute) || html.match(attribute$2))) {
                attr.start = index;
                advance(attr[0].length);
                attr.end = index;
                match.attrs.push(attr);
            }
            if (end) {
                match.unarySlash = end[1];
                advance(end[0].length);
                match.end = index;
                return match;
            }
        }
    }
    function handleStartTag(match) {
        const tagName = match.tagName;
        const unarySlash = match.unarySlash;
        if (expectHTML) {
            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
                parseEndTag(lastTag);
            }
            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
                parseEndTag(tagName);
            }
        }
        const unary = isUnaryTag(tagName) || !!unarySlash;
        const l = match.attrs.length;
        const attrs = new Array(l);
        for (let i = 0; i < l; i++) {
            const args = match.attrs[i];
            const value = args[3] || args[4] || args[5] || '';
            const shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
                ? options.shouldDecodeNewlinesForHref
                : options.shouldDecodeNewlines;
            attrs[i] = {
                name: args[1],
                value: decodeAttr(value, shouldDecodeNewlines)
            };
            if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                attrs[i].start = args.start + args[0].match(/^\s*/).length;
                attrs[i].end = args.end;
            }
        }
        if (!unary) {
            stack.push({
                tag: tagName,
                lowerCasedTag: tagName.toLowerCase(),
                attrs: attrs,
                start: match.start,
                end: match.end
            });
            lastTag = tagName;
        }
        if (options.start) {
            options.start(tagName, attrs, unary, match.start, match.end);
        }
    }
    function parseEndTag(tagName, start, end) {
        let pos, lowerCasedTagName;
        if (start == null)
            start = index;
        if (end == null)
            end = index;
        // Find the closest opened tag of the same type
        if (tagName) {
            lowerCasedTagName = tagName.toLowerCase();
            for (pos = stack.length - 1; pos >= 0; pos--) {
                if (stack[pos].lowerCasedTag === lowerCasedTagName) {
                    break;
                }
            }
        }
        else {
            // If no tag name is provided, clean shop
            pos = 0;
        }
        if (pos >= 0) {
            // Close all the open elements, up the stack
            for (let i = stack.length - 1; i >= pos; i--) {
                if (process.env.NODE_ENV !== 'production' && (i > pos || !tagName) && options.warn) {
                    options.warn(`tag <${stack[i].tag}> has no matching end tag.`, {
                        start: stack[i].start,
                        end: stack[i].end
                    });
                }
                if (options.end) {
                    options.end(stack[i].tag, start, end);
                }
            }
            // Remove the open elements from the stack
            stack.length = pos;
            lastTag = pos && stack[pos - 1].tag;
        }
        else if (lowerCasedTagName === 'br') {
            if (options.start) {
                options.start(tagName, [], true, start, end);
            }
        }
        else if (lowerCasedTagName === 'p') {
            if (options.start) {
                options.start(tagName, [], false, start, end);
            }
            if (options.end) {
                options.end(tagName, start, end);
            }
        }
    }
}

const DEFAULT_FILENAME = 'anonymous.vue';
const splitRE$1 = /\r?\n/g;
const replaceRE = /./g;
const isSpecialTag = makeMap('script,style,template', true);
/**
 * Parse a single-file component (*.vue) file into an SFC Descriptor Object.
 */
function parseComponent(source, options = {}) {
    const sfc = {
        source,
        filename: DEFAULT_FILENAME,
        template: null,
        script: null,
        scriptSetup: null,
        styles: [],
        customBlocks: [],
        cssVars: [],
        errors: [],
        shouldForceReload: null // attached in parse() by compiler-sfc
    };
    let depth = 0;
    let currentBlock = null;
    let warn = msg => {
        sfc.errors.push(msg);
    };
    if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
        warn = (msg, range) => {
            const data = { msg };
            if (range.start != null) {
                data.start = range.start;
            }
            if (range.end != null) {
                data.end = range.end;
            }
            sfc.errors.push(data);
        };
    }
    function start(tag, attrs, unary, start, end) {
        if (depth === 0) {
            currentBlock = {
                type: tag,
                content: '',
                start: end,
                end: 0,
                attrs: attrs.reduce((cumulated, { name, value }) => {
                    cumulated[name] = value || true;
                    return cumulated;
                }, {})
            };
            if (typeof currentBlock.attrs.src === 'string') {
                currentBlock.src = currentBlock.attrs.src;
            }
            if (isSpecialTag(tag)) {
                checkAttrs(currentBlock, attrs);
                if (tag === 'script') {
                    const block = currentBlock;
                    if (block.attrs.setup) {
                        block.setup = currentBlock.attrs.setup;
                        sfc.scriptSetup = block;
                    }
                    else {
                        sfc.script = block;
                    }
                }
                else if (tag === 'style') {
                    sfc.styles.push(currentBlock);
                }
                else {
                    sfc[tag] = currentBlock;
                }
            }
            else {
                // custom blocks
                sfc.customBlocks.push(currentBlock);
            }
        }
        if (!unary) {
            depth++;
        }
    }
    function checkAttrs(block, attrs) {
        for (let i = 0; i < attrs.length; i++) {
            const attr = attrs[i];
            if (attr.name === 'lang') {
                block.lang = attr.value;
            }
            if (attr.name === 'scoped') {
                block.scoped = true;
            }
            if (attr.name === 'module') {
                block.module = attr.value || true;
            }
        }
    }
    function end(tag, start) {
        if (depth === 1 && currentBlock) {
            currentBlock.end = start;
            let text = source.slice(currentBlock.start, currentBlock.end);
            if (options.deindent === true ||
                // by default, deindent unless it's script with default lang or (j/t)sx?
                (options.deindent !== false &&
                    !(currentBlock.type === 'script' &&
                        (!currentBlock.lang || /^(j|t)sx?$/.test(currentBlock.lang))))) {
                text = deIndent(text);
            }
            // pad content so that linters and pre-processors can output correct
            // line numbers in errors and warnings
            if (currentBlock.type !== 'template' && options.pad) {
                text = padContent(currentBlock, options.pad) + text;
            }
            currentBlock.content = text;
            currentBlock = null;
        }
        depth--;
    }
    function padContent(block, pad) {
        if (pad === 'space') {
            return source.slice(0, block.start).replace(replaceRE, ' ');
        }
        else {
            const offset = source.slice(0, block.start).split(splitRE$1).length;
            const padChar = block.type === 'script' && !block.lang ? '//\n' : '\n';
            return Array(offset).join(padChar);
        }
    }
    parseHTML(source, {
        warn,
        start,
        end,
        outputSourceRange: options.outputSourceRange
    });
    return sfc;
}

function pad (hash, len) {
  while (hash.length < len) {
    hash = '0' + hash;
  }
  return hash;
}

function fold (hash, text) {
  var i;
  var chr;
  var len;
  if (text.length === 0) {
    return hash;
  }
  for (i = 0, len = text.length; i < len; i++) {
    chr = text.charCodeAt(i);
    hash = ((hash << 5) - hash) + chr;
    hash |= 0;
  }
  return hash < 0 ? hash * -2 : hash;
}

function foldObject (hash, o, seen) {
  return Object.keys(o).sort().reduce(foldKey, hash);
  function foldKey (hash, key) {
    return foldValue(hash, o[key], key, seen);
  }
}

function foldValue (input, value, key, seen) {
  var hash = fold(fold(fold(input, key), toString$1(value)), typeof value);
  if (value === null) {
    return fold(hash, 'null');
  }
  if (value === undefined) {
    return fold(hash, 'undefined');
  }
  if (typeof value === 'object' || typeof value === 'function') {
    if (seen.indexOf(value) !== -1) {
      return fold(hash, '[Circular]' + key);
    }
    seen.push(value);

    var objHash = foldObject(hash, value, seen);

    if (!('valueOf' in value) || typeof value.valueOf !== 'function') {
      return objHash;
    }

    try {
      return fold(objHash, String(value.valueOf()))
    } catch (err) {
      return fold(objHash, '[valueOf exception]' + (err.stack || err.message))
    }
  }
  return fold(hash, value.toString());
}

function toString$1 (o) {
  return Object.prototype.toString.call(o);
}

function sum (o) {
  return pad(foldValue(0, o, '', []).toString(16), 8);
}

var hashSum = sum;

var iterator;
var hasRequiredIterator;

function requireIterator () {
	if (hasRequiredIterator) return iterator;
	hasRequiredIterator = 1;
	iterator = function (Yallist) {
	  Yallist.prototype[Symbol.iterator] = function* () {
	    for (let walker = this.head; walker; walker = walker.next) {
	      yield walker.value;
	    }
	  };
	};
	return iterator;
}

var yallist = Yallist$1;

Yallist$1.Node = Node;
Yallist$1.create = Yallist$1;

function Yallist$1 (list) {
  var self = this;
  if (!(self instanceof Yallist$1)) {
    self = new Yallist$1();
  }

  self.tail = null;
  self.head = null;
  self.length = 0;

  if (list && typeof list.forEach === 'function') {
    list.forEach(function (item) {
      self.push(item);
    });
  } else if (arguments.length > 0) {
    for (var i = 0, l = arguments.length; i < l; i++) {
      self.push(arguments[i]);
    }
  }

  return self
}

Yallist$1.prototype.removeNode = function (node) {
  if (node.list !== this) {
    throw new Error('removing node which does not belong to this list')
  }

  var next = node.next;
  var prev = node.prev;

  if (next) {
    next.prev = prev;
  }

  if (prev) {
    prev.next = next;
  }

  if (node === this.head) {
    this.head = next;
  }
  if (node === this.tail) {
    this.tail = prev;
  }

  node.list.length--;
  node.next = null;
  node.prev = null;
  node.list = null;

  return next
};

Yallist$1.prototype.unshiftNode = function (node) {
  if (node === this.head) {
    return
  }

  if (node.list) {
    node.list.removeNode(node);
  }

  var head = this.head;
  node.list = this;
  node.next = head;
  if (head) {
    head.prev = node;
  }

  this.head = node;
  if (!this.tail) {
    this.tail = node;
  }
  this.length++;
};

Yallist$1.prototype.pushNode = function (node) {
  if (node === this.tail) {
    return
  }

  if (node.list) {
    node.list.removeNode(node);
  }

  var tail = this.tail;
  node.list = this;
  node.prev = tail;
  if (tail) {
    tail.next = node;
  }

  this.tail = node;
  if (!this.head) {
    this.head = node;
  }
  this.length++;
};

Yallist$1.prototype.push = function () {
  for (var i = 0, l = arguments.length; i < l; i++) {
    push(this, arguments[i]);
  }
  return this.length
};

Yallist$1.prototype.unshift = function () {
  for (var i = 0, l = arguments.length; i < l; i++) {
    unshift(this, arguments[i]);
  }
  return this.length
};

Yallist$1.prototype.pop = function () {
  if (!this.tail) {
    return undefined
  }

  var res = this.tail.value;
  this.tail = this.tail.prev;
  if (this.tail) {
    this.tail.next = null;
  } else {
    this.head = null;
  }
  this.length--;
  return res
};

Yallist$1.prototype.shift = function () {
  if (!this.head) {
    return undefined
  }

  var res = this.head.value;
  this.head = this.head.next;
  if (this.head) {
    this.head.prev = null;
  } else {
    this.tail = null;
  }
  this.length--;
  return res
};

Yallist$1.prototype.forEach = function (fn, thisp) {
  thisp = thisp || this;
  for (var walker = this.head, i = 0; walker !== null; i++) {
    fn.call(thisp, walker.value, i, this);
    walker = walker.next;
  }
};

Yallist$1.prototype.forEachReverse = function (fn, thisp) {
  thisp = thisp || this;
  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
    fn.call(thisp, walker.value, i, this);
    walker = walker.prev;
  }
};

Yallist$1.prototype.get = function (n) {
  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
    // abort out of the list early if we hit a cycle
    walker = walker.next;
  }
  if (i === n && walker !== null) {
    return walker.value
  }
};

Yallist$1.prototype.getReverse = function (n) {
  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
    // abort out of the list early if we hit a cycle
    walker = walker.prev;
  }
  if (i === n && walker !== null) {
    return walker.value
  }
};

Yallist$1.prototype.map = function (fn, thisp) {
  thisp = thisp || this;
  var res = new Yallist$1();
  for (var walker = this.head; walker !== null;) {
    res.push(fn.call(thisp, walker.value, this));
    walker = walker.next;
  }
  return res
};

Yallist$1.prototype.mapReverse = function (fn, thisp) {
  thisp = thisp || this;
  var res = new Yallist$1();
  for (var walker = this.tail; walker !== null;) {
    res.push(fn.call(thisp, walker.value, this));
    walker = walker.prev;
  }
  return res
};

Yallist$1.prototype.reduce = function (fn, initial) {
  var acc;
  var walker = this.head;
  if (arguments.length > 1) {
    acc = initial;
  } else if (this.head) {
    walker = this.head.next;
    acc = this.head.value;
  } else {
    throw new TypeError('Reduce of empty list with no initial value')
  }

  for (var i = 0; walker !== null; i++) {
    acc = fn(acc, walker.value, i);
    walker = walker.next;
  }

  return acc
};

Yallist$1.prototype.reduceReverse = function (fn, initial) {
  var acc;
  var walker = this.tail;
  if (arguments.length > 1) {
    acc = initial;
  } else if (this.tail) {
    walker = this.tail.prev;
    acc = this.tail.value;
  } else {
    throw new TypeError('Reduce of empty list with no initial value')
  }

  for (var i = this.length - 1; walker !== null; i--) {
    acc = fn(acc, walker.value, i);
    walker = walker.prev;
  }

  return acc
};

Yallist$1.prototype.toArray = function () {
  var arr = new Array(this.length);
  for (var i = 0, walker = this.head; walker !== null; i++) {
    arr[i] = walker.value;
    walker = walker.next;
  }
  return arr
};

Yallist$1.prototype.toArrayReverse = function () {
  var arr = new Array(this.length);
  for (var i = 0, walker = this.tail; walker !== null; i++) {
    arr[i] = walker.value;
    walker = walker.prev;
  }
  return arr
};

Yallist$1.prototype.slice = function (from, to) {
  to = to || this.length;
  if (to < 0) {
    to += this.length;
  }
  from = from || 0;
  if (from < 0) {
    from += this.length;
  }
  var ret = new Yallist$1();
  if (to < from || to < 0) {
    return ret
  }
  if (from < 0) {
    from = 0;
  }
  if (to > this.length) {
    to = this.length;
  }
  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
    walker = walker.next;
  }
  for (; walker !== null && i < to; i++, walker = walker.next) {
    ret.push(walker.value);
  }
  return ret
};

Yallist$1.prototype.sliceReverse = function (from, to) {
  to = to || this.length;
  if (to < 0) {
    to += this.length;
  }
  from = from || 0;
  if (from < 0) {
    from += this.length;
  }
  var ret = new Yallist$1();
  if (to < from || to < 0) {
    return ret
  }
  if (from < 0) {
    from = 0;
  }
  if (to > this.length) {
    to = this.length;
  }
  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
    walker = walker.prev;
  }
  for (; walker !== null && i > from; i--, walker = walker.prev) {
    ret.push(walker.value);
  }
  return ret
};

Yallist$1.prototype.splice = function (start, deleteCount /*, ...nodes */) {
  if (start > this.length) {
    start = this.length - 1;
  }
  if (start < 0) {
    start = this.length + start;
  }

  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
    walker = walker.next;
  }

  var ret = [];
  for (var i = 0; walker && i < deleteCount; i++) {
    ret.push(walker.value);
    walker = this.removeNode(walker);
  }
  if (walker === null) {
    walker = this.tail;
  }

  if (walker !== this.head && walker !== this.tail) {
    walker = walker.prev;
  }

  for (var i = 2; i < arguments.length; i++) {
    walker = insert(this, walker, arguments[i]);
  }
  return ret;
};

Yallist$1.prototype.reverse = function () {
  var head = this.head;
  var tail = this.tail;
  for (var walker = head; walker !== null; walker = walker.prev) {
    var p = walker.prev;
    walker.prev = walker.next;
    walker.next = p;
  }
  this.head = tail;
  this.tail = head;
  return this
};

function insert (self, node, value) {
  var inserted = node === self.head ?
    new Node(value, null, node, self) :
    new Node(value, node, node.next, self);

  if (inserted.next === null) {
    self.tail = inserted;
  }
  if (inserted.prev === null) {
    self.head = inserted;
  }

  self.length++;

  return inserted
}

function push (self, item) {
  self.tail = new Node(item, self.tail, null, self);
  if (!self.head) {
    self.head = self.tail;
  }
  self.length++;
}

function unshift (self, item) {
  self.head = new Node(item, null, self.head, self);
  if (!self.tail) {
    self.tail = self.head;
  }
  self.length++;
}

function Node (value, prev, next, list) {
  if (!(this instanceof Node)) {
    return new Node(value, prev, next, list)
  }

  this.list = list;
  this.value = value;

  if (prev) {
    prev.next = this;
    this.prev = prev;
  } else {
    this.prev = null;
  }

  if (next) {
    next.prev = this;
    this.next = next;
  } else {
    this.next = null;
  }
}

try {
  // add if support for Symbol.iterator is present
  requireIterator()(Yallist$1);
} catch (er) {}

// A linked list to keep track of recently-used-ness
const Yallist = yallist;

const MAX = Symbol('max');
const LENGTH = Symbol('length');
const LENGTH_CALCULATOR = Symbol('lengthCalculator');
const ALLOW_STALE = Symbol('allowStale');
const MAX_AGE = Symbol('maxAge');
const DISPOSE = Symbol('dispose');
const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');
const LRU_LIST = Symbol('lruList');
const CACHE = Symbol('cache');
const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');

const naiveLength = () => 1;

// lruList is a yallist where the head is the youngest
// item, and the tail is the oldest.  the list contains the Hit
// objects as the entries.
// Each Hit object has a reference to its Yallist.Node.  This
// never changes.
//
// cache is a Map (or PseudoMap) that matches the keys to
// the Yallist.Node object.
class LRUCache {
  constructor (options) {
    if (typeof options === 'number')
      options = { max: options };

    if (!options)
      options = {};

    if (options.max && (typeof options.max !== 'number' || options.max < 0))
      throw new TypeError('max must be a non-negative number')
    // Kind of weird to have a default max of Infinity, but oh well.
    this[MAX] = options.max || Infinity;

    const lc = options.length || naiveLength;
    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc;
    this[ALLOW_STALE] = options.stale || false;
    if (options.maxAge && typeof options.maxAge !== 'number')
      throw new TypeError('maxAge must be a number')
    this[MAX_AGE] = options.maxAge || 0;
    this[DISPOSE] = options.dispose;
    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;
    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;
    this.reset();
  }

  // resize the cache when the max changes.
  set max (mL) {
    if (typeof mL !== 'number' || mL < 0)
      throw new TypeError('max must be a non-negative number')

    this[MAX] = mL || Infinity;
    trim(this);
  }
  get max () {
    return this[MAX]
  }

  set allowStale (allowStale) {
    this[ALLOW_STALE] = !!allowStale;
  }
  get allowStale () {
    return this[ALLOW_STALE]
  }

  set maxAge (mA) {
    if (typeof mA !== 'number')
      throw new TypeError('maxAge must be a non-negative number')

    this[MAX_AGE] = mA;
    trim(this);
  }
  get maxAge () {
    return this[MAX_AGE]
  }

  // resize the cache when the lengthCalculator changes.
  set lengthCalculator (lC) {
    if (typeof lC !== 'function')
      lC = naiveLength;

    if (lC !== this[LENGTH_CALCULATOR]) {
      this[LENGTH_CALCULATOR] = lC;
      this[LENGTH] = 0;
      this[LRU_LIST].forEach(hit => {
        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);
        this[LENGTH] += hit.length;
      });
    }
    trim(this);
  }
  get lengthCalculator () { return this[LENGTH_CALCULATOR] }

  get length () { return this[LENGTH] }
  get itemCount () { return this[LRU_LIST].length }

  rforEach (fn, thisp) {
    thisp = thisp || this;
    for (let walker = this[LRU_LIST].tail; walker !== null;) {
      const prev = walker.prev;
      forEachStep(this, fn, walker, thisp);
      walker = prev;
    }
  }

  forEach (fn, thisp) {
    thisp = thisp || this;
    for (let walker = this[LRU_LIST].head; walker !== null;) {
      const next = walker.next;
      forEachStep(this, fn, walker, thisp);
      walker = next;
    }
  }

  keys () {
    return this[LRU_LIST].toArray().map(k => k.key)
  }

  values () {
    return this[LRU_LIST].toArray().map(k => k.value)
  }

  reset () {
    if (this[DISPOSE] &&
        this[LRU_LIST] &&
        this[LRU_LIST].length) {
      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));
    }

    this[CACHE] = new Map(); // hash of items by key
    this[LRU_LIST] = new Yallist(); // list of items in order of use recency
    this[LENGTH] = 0; // length of items in the list
  }

  dump () {
    return this[LRU_LIST].map(hit =>
      isStale(this, hit) ? false : {
        k: hit.key,
        v: hit.value,
        e: hit.now + (hit.maxAge || 0)
      }).toArray().filter(h => h)
  }

  dumpLru () {
    return this[LRU_LIST]
  }

  set (key, value, maxAge) {
    maxAge = maxAge || this[MAX_AGE];

    if (maxAge && typeof maxAge !== 'number')
      throw new TypeError('maxAge must be a number')

    const now = maxAge ? Date.now() : 0;
    const len = this[LENGTH_CALCULATOR](value, key);

    if (this[CACHE].has(key)) {
      if (len > this[MAX]) {
        del(this, this[CACHE].get(key));
        return false
      }

      const node = this[CACHE].get(key);
      const item = node.value;

      // dispose of the old one before overwriting
      // split out into 2 ifs for better coverage tracking
      if (this[DISPOSE]) {
        if (!this[NO_DISPOSE_ON_SET])
          this[DISPOSE](key, item.value);
      }

      item.now = now;
      item.maxAge = maxAge;
      item.value = value;
      this[LENGTH] += len - item.length;
      item.length = len;
      this.get(key);
      trim(this);
      return true
    }

    const hit = new Entry(key, value, len, now, maxAge);

    // oversized objects fall out of cache automatically.
    if (hit.length > this[MAX]) {
      if (this[DISPOSE])
        this[DISPOSE](key, value);

      return false
    }

    this[LENGTH] += hit.length;
    this[LRU_LIST].unshift(hit);
    this[CACHE].set(key, this[LRU_LIST].head);
    trim(this);
    return true
  }

  has (key) {
    if (!this[CACHE].has(key)) return false
    const hit = this[CACHE].get(key).value;
    return !isStale(this, hit)
  }

  get (key) {
    return get(this, key, true)
  }

  peek (key) {
    return get(this, key, false)
  }

  pop () {
    const node = this[LRU_LIST].tail;
    if (!node)
      return null

    del(this, node);
    return node.value
  }

  del (key) {
    del(this, this[CACHE].get(key));
  }

  load (arr) {
    // reset the cache
    this.reset();

    const now = Date.now();
    // A previous serialized cache has the most recent items first
    for (let l = arr.length - 1; l >= 0; l--) {
      const hit = arr[l];
      const expiresAt = hit.e || 0;
      if (expiresAt === 0)
        // the item was created without expiration in a non aged cache
        this.set(hit.k, hit.v);
      else {
        const maxAge = expiresAt - now;
        // dont add already expired items
        if (maxAge > 0) {
          this.set(hit.k, hit.v, maxAge);
        }
      }
    }
  }

  prune () {
    this[CACHE].forEach((value, key) => get(this, key, false));
  }
}

const get = (self, key, doUse) => {
  const node = self[CACHE].get(key);
  if (node) {
    const hit = node.value;
    if (isStale(self, hit)) {
      del(self, node);
      if (!self[ALLOW_STALE])
        return undefined
    } else {
      if (doUse) {
        if (self[UPDATE_AGE_ON_GET])
          node.value.now = Date.now();
        self[LRU_LIST].unshiftNode(node);
      }
    }
    return hit.value
  }
};

const isStale = (self, hit) => {
  if (!hit || (!hit.maxAge && !self[MAX_AGE]))
    return false

  const diff = Date.now() - hit.now;
  return hit.maxAge ? diff > hit.maxAge
    : self[MAX_AGE] && (diff > self[MAX_AGE])
};

const trim = self => {
  if (self[LENGTH] > self[MAX]) {
    for (let walker = self[LRU_LIST].tail;
      self[LENGTH] > self[MAX] && walker !== null;) {
      // We know that we're about to delete this one, and also
      // what the next least recently used key will be, so just
      // go ahead and set it now.
      const prev = walker.prev;
      del(self, walker);
      walker = prev;
    }
  }
};

const del = (self, node) => {
  if (node) {
    const hit = node.value;
    if (self[DISPOSE])
      self[DISPOSE](hit.key, hit.value);

    self[LENGTH] -= hit.length;
    self[CACHE].delete(hit.key);
    self[LRU_LIST].removeNode(node);
  }
};

class Entry {
  constructor (key, value, length, now, maxAge) {
    this.key = key;
    this.value = value;
    this.length = length;
    this.now = now;
    this.maxAge = maxAge || 0;
  }
}

const forEachStep = (self, fn, node, thisp) => {
  let hit = node.value;
  if (isStale(self, hit)) {
    del(self, node);
    if (!self[ALLOW_STALE])
      hit = undefined;
  }
  if (hit)
    fn.call(thisp, hit.value, hit.key, self);
};

var lruCache = LRUCache;

var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
function encode(decoded) {
    var sourceFileIndex = 0; // second field
    var sourceCodeLine = 0; // third field
    var sourceCodeColumn = 0; // fourth field
    var nameIndex = 0; // fifth field
    var mappings = '';
    for (var i = 0; i < decoded.length; i++) {
        var line = decoded[i];
        if (i > 0)
            mappings += ';';
        if (line.length === 0)
            continue;
        var generatedCodeColumn = 0; // first field
        var lineMappings = [];
        for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {
            var segment = line_1[_i];
            var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);
            generatedCodeColumn = segment[0];
            if (segment.length > 1) {
                segmentMappings +=
                    encodeInteger(segment[1] - sourceFileIndex) +
                        encodeInteger(segment[2] - sourceCodeLine) +
                        encodeInteger(segment[3] - sourceCodeColumn);
                sourceFileIndex = segment[1];
                sourceCodeLine = segment[2];
                sourceCodeColumn = segment[3];
            }
            if (segment.length === 5) {
                segmentMappings += encodeInteger(segment[4] - nameIndex);
                nameIndex = segment[4];
            }
            lineMappings.push(segmentMappings);
        }
        mappings += lineMappings.join(',');
    }
    return mappings;
}
function encodeInteger(num) {
    var result = '';
    num = num < 0 ? (-num << 1) | 1 : num << 1;
    do {
        var clamped = num & 31;
        num >>>= 5;
        if (num > 0) {
            clamped |= 32;
        }
        result += chars[clamped];
    } while (num > 0);
    return result;
}

var BitSet = function BitSet(arg) {
	this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
};

BitSet.prototype.add = function add (n) {
	this.bits[n >> 5] |= 1 << (n & 31);
};

BitSet.prototype.has = function has (n) {
	return !!(this.bits[n >> 5] & (1 << (n & 31)));
};

var Chunk = function Chunk(start, end, content) {
	this.start = start;
	this.end = end;
	this.original = content;

	this.intro = '';
	this.outro = '';

	this.content = content;
	this.storeName = false;
	this.edited = false;

	// we make these non-enumerable, for sanity while debugging
	Object.defineProperties(this, {
		previous: { writable: true, value: null },
		next: { writable: true, value: null },
	});
};

Chunk.prototype.appendLeft = function appendLeft (content) {
	this.outro += content;
};

Chunk.prototype.appendRight = function appendRight (content) {
	this.intro = this.intro + content;
};

Chunk.prototype.clone = function clone () {
	var chunk = new Chunk(this.start, this.end, this.original);

	chunk.intro = this.intro;
	chunk.outro = this.outro;
	chunk.content = this.content;
	chunk.storeName = this.storeName;
	chunk.edited = this.edited;

	return chunk;
};

Chunk.prototype.contains = function contains (index) {
	return this.start < index && index < this.end;
};

Chunk.prototype.eachNext = function eachNext (fn) {
	var chunk = this;
	while (chunk) {
		fn(chunk);
		chunk = chunk.next;
	}
};

Chunk.prototype.eachPrevious = function eachPrevious (fn) {
	var chunk = this;
	while (chunk) {
		fn(chunk);
		chunk = chunk.previous;
	}
};

Chunk.prototype.edit = function edit (content, storeName, contentOnly) {
	this.content = content;
	if (!contentOnly) {
		this.intro = '';
		this.outro = '';
	}
	this.storeName = storeName;

	this.edited = true;

	return this;
};

Chunk.prototype.prependLeft = function prependLeft (content) {
	this.outro = content + this.outro;
};

Chunk.prototype.prependRight = function prependRight (content) {
	this.intro = content + this.intro;
};

Chunk.prototype.split = function split (index) {
	var sliceIndex = index - this.start;

	var originalBefore = this.original.slice(0, sliceIndex);
	var originalAfter = this.original.slice(sliceIndex);

	this.original = originalBefore;

	var newChunk = new Chunk(index, this.end, originalAfter);
	newChunk.outro = this.outro;
	this.outro = '';

	this.end = index;

	if (this.edited) {
		// TODO is this block necessary?...
		newChunk.edit('', false);
		this.content = '';
	} else {
		this.content = originalBefore;
	}

	newChunk.next = this.next;
	if (newChunk.next) { newChunk.next.previous = newChunk; }
	newChunk.previous = this;
	this.next = newChunk;

	return newChunk;
};

Chunk.prototype.toString = function toString () {
	return this.intro + this.content + this.outro;
};

Chunk.prototype.trimEnd = function trimEnd (rx) {
	this.outro = this.outro.replace(rx, '');
	if (this.outro.length) { return true; }

	var trimmed = this.content.replace(rx, '');

	if (trimmed.length) {
		if (trimmed !== this.content) {
			this.split(this.start + trimmed.length).edit('', undefined, true);
		}
		return true;
	} else {
		this.edit('', undefined, true);

		this.intro = this.intro.replace(rx, '');
		if (this.intro.length) { return true; }
	}
};

Chunk.prototype.trimStart = function trimStart (rx) {
	this.intro = this.intro.replace(rx, '');
	if (this.intro.length) { return true; }

	var trimmed = this.content.replace(rx, '');

	if (trimmed.length) {
		if (trimmed !== this.content) {
			this.split(this.end - trimmed.length);
			this.edit('', undefined, true);
		}
		return true;
	} else {
		this.edit('', undefined, true);

		this.outro = this.outro.replace(rx, '');
		if (this.outro.length) { return true; }
	}
};

var btoa = function () {
	throw new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');
};
if (typeof window !== 'undefined' && typeof window.btoa === 'function') {
	btoa = function (str) { return window.btoa(unescape(encodeURIComponent(str))); };
} else if (typeof Buffer === 'function') {
	btoa = function (str) { return Buffer.from(str, 'utf-8').toString('base64'); };
}

var SourceMap = function SourceMap(properties) {
	this.version = 3;
	this.file = properties.file;
	this.sources = properties.sources;
	this.sourcesContent = properties.sourcesContent;
	this.names = properties.names;
	this.mappings = encode(properties.mappings);
};

SourceMap.prototype.toString = function toString () {
	return JSON.stringify(this);
};

SourceMap.prototype.toUrl = function toUrl () {
	return 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());
};

function guessIndent(code) {
	var lines = code.split('\n');

	var tabbed = lines.filter(function (line) { return /^\t+/.test(line); });
	var spaced = lines.filter(function (line) { return /^ {2,}/.test(line); });

	if (tabbed.length === 0 && spaced.length === 0) {
		return null;
	}

	// More lines tabbed than spaced? Assume tabs, and
	// default to tabs in the case of a tie (or nothing
	// to go on)
	if (tabbed.length >= spaced.length) {
		return '\t';
	}

	// Otherwise, we need to guess the multiple
	var min = spaced.reduce(function (previous, current) {
		var numSpaces = /^ +/.exec(current)[0].length;
		return Math.min(numSpaces, previous);
	}, Infinity);

	return new Array(min + 1).join(' ');
}

function getRelativePath(from, to) {
	var fromParts = from.split(/[/\\]/);
	var toParts = to.split(/[/\\]/);

	fromParts.pop(); // get dirname

	while (fromParts[0] === toParts[0]) {
		fromParts.shift();
		toParts.shift();
	}

	if (fromParts.length) {
		var i = fromParts.length;
		while (i--) { fromParts[i] = '..'; }
	}

	return fromParts.concat(toParts).join('/');
}

var toString = Object.prototype.toString;

function isObject(thing) {
	return toString.call(thing) === '[object Object]';
}

function getLocator(source) {
	var originalLines = source.split('\n');
	var lineOffsets = [];

	for (var i = 0, pos = 0; i < originalLines.length; i++) {
		lineOffsets.push(pos);
		pos += originalLines[i].length + 1;
	}

	return function locate(index) {
		var i = 0;
		var j = lineOffsets.length;
		while (i < j) {
			var m = (i + j) >> 1;
			if (index < lineOffsets[m]) {
				j = m;
			} else {
				i = m + 1;
			}
		}
		var line = i - 1;
		var column = index - lineOffsets[line];
		return { line: line, column: column };
	};
}

var Mappings = function Mappings(hires) {
	this.hires = hires;
	this.generatedCodeLine = 0;
	this.generatedCodeColumn = 0;
	this.raw = [];
	this.rawSegments = this.raw[this.generatedCodeLine] = [];
	this.pending = null;
};

Mappings.prototype.addEdit = function addEdit (sourceIndex, content, loc, nameIndex) {
	if (content.length) {
		var segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
		if (nameIndex >= 0) {
			segment.push(nameIndex);
		}
		this.rawSegments.push(segment);
	} else if (this.pending) {
		this.rawSegments.push(this.pending);
	}

	this.advance(content);
	this.pending = null;
};

Mappings.prototype.addUneditedChunk = function addUneditedChunk (sourceIndex, chunk, original, loc, sourcemapLocations) {
	var originalCharIndex = chunk.start;
	var first = true;

	while (originalCharIndex < chunk.end) {
		if (this.hires || first || sourcemapLocations.has(originalCharIndex)) {
			this.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);
		}

		if (original[originalCharIndex] === '\n') {
			loc.line += 1;
			loc.column = 0;
			this.generatedCodeLine += 1;
			this.raw[this.generatedCodeLine] = this.rawSegments = [];
			this.generatedCodeColumn = 0;
			first = true;
		} else {
			loc.column += 1;
			this.generatedCodeColumn += 1;
			first = false;
		}

		originalCharIndex += 1;
	}

	this.pending = null;
};

Mappings.prototype.advance = function advance (str) {
	if (!str) { return; }

	var lines = str.split('\n');

	if (lines.length > 1) {
		for (var i = 0; i < lines.length - 1; i++) {
			this.generatedCodeLine++;
			this.raw[this.generatedCodeLine] = this.rawSegments = [];
		}
		this.generatedCodeColumn = 0;
	}

	this.generatedCodeColumn += lines[lines.length - 1].length;
};

var n = '\n';

var warned = {
	insertLeft: false,
	insertRight: false,
	storeName: false,
};

var MagicString = function MagicString(string, options) {
	if ( options === void 0 ) options = {};

	var chunk = new Chunk(0, string.length, string);

	Object.defineProperties(this, {
		original: { writable: true, value: string },
		outro: { writable: true, value: '' },
		intro: { writable: true, value: '' },
		firstChunk: { writable: true, value: chunk },
		lastChunk: { writable: true, value: chunk },
		lastSearchedChunk: { writable: true, value: chunk },
		byStart: { writable: true, value: {} },
		byEnd: { writable: true, value: {} },
		filename: { writable: true, value: options.filename },
		indentExclusionRanges: { writable: true, value: options.indentExclusionRanges },
		sourcemapLocations: { writable: true, value: new BitSet() },
		storedNames: { writable: true, value: {} },
		indentStr: { writable: true, value: guessIndent(string) },
	});

	this.byStart[0] = chunk;
	this.byEnd[string.length] = chunk;
};

MagicString.prototype.addSourcemapLocation = function addSourcemapLocation (char) {
	this.sourcemapLocations.add(char);
};

MagicString.prototype.append = function append (content) {
	if (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }

	this.outro += content;
	return this;
};

MagicString.prototype.appendLeft = function appendLeft (index, content) {
	if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }

	this._split(index);

	var chunk = this.byEnd[index];

	if (chunk) {
		chunk.appendLeft(content);
	} else {
		this.intro += content;
	}
	return this;
};

MagicString.prototype.appendRight = function appendRight (index, content) {
	if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }

	this._split(index);

	var chunk = this.byStart[index];

	if (chunk) {
		chunk.appendRight(content);
	} else {
		this.outro += content;
	}
	return this;
};

MagicString.prototype.clone = function clone () {
	var cloned = new MagicString(this.original, { filename: this.filename });

	var originalChunk = this.firstChunk;
	var clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());

	while (originalChunk) {
		cloned.byStart[clonedChunk.start] = clonedChunk;
		cloned.byEnd[clonedChunk.end] = clonedChunk;

		var nextOriginalChunk = originalChunk.next;
		var nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();

		if (nextClonedChunk) {
			clonedChunk.next = nextClonedChunk;
			nextClonedChunk.previous = clonedChunk;

			clonedChunk = nextClonedChunk;
		}

		originalChunk = nextOriginalChunk;
	}

	cloned.lastChunk = clonedChunk;

	if (this.indentExclusionRanges) {
		cloned.indentExclusionRanges = this.indentExclusionRanges.slice();
	}

	cloned.sourcemapLocations = new BitSet(this.sourcemapLocations);

	cloned.intro = this.intro;
	cloned.outro = this.outro;

	return cloned;
};

MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) {
		var this$1$1 = this;

	options = options || {};

	var sourceIndex = 0;
	var names = Object.keys(this.storedNames);
	var mappings = new Mappings(options.hires);

	var locate = getLocator(this.original);

	if (this.intro) {
		mappings.advance(this.intro);
	}

	this.firstChunk.eachNext(function (chunk) {
		var loc = locate(chunk.start);

		if (chunk.intro.length) { mappings.advance(chunk.intro); }

		if (chunk.edited) {
			mappings.addEdit(
				sourceIndex,
				chunk.content,
				loc,
				chunk.storeName ? names.indexOf(chunk.original) : -1
			);
		} else {
			mappings.addUneditedChunk(sourceIndex, chunk, this$1$1.original, loc, this$1$1.sourcemapLocations);
		}

		if (chunk.outro.length) { mappings.advance(chunk.outro); }
	});

	return {
		file: options.file ? options.file.split(/[/\\]/).pop() : null,
		sources: [options.source ? getRelativePath(options.file || '', options.source) : null],
		sourcesContent: options.includeContent ? [this.original] : [null],
		names: names,
		mappings: mappings.raw,
	};
};

MagicString.prototype.generateMap = function generateMap (options) {
	return new SourceMap(this.generateDecodedMap(options));
};

MagicString.prototype.getIndentString = function getIndentString () {
	return this.indentStr === null ? '\t' : this.indentStr;
};

MagicString.prototype.indent = function indent (indentStr, options) {
	var pattern = /^[^\r\n]/gm;

	if (isObject(indentStr)) {
		options = indentStr;
		indentStr = undefined;
	}

	indentStr = indentStr !== undefined ? indentStr : this.indentStr || '\t';

	if (indentStr === '') { return this; } // noop

	options = options || {};

	// Process exclusion ranges
	var isExcluded = {};

	if (options.exclude) {
		var exclusions =
			typeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;
		exclusions.forEach(function (exclusion) {
			for (var i = exclusion[0]; i < exclusion[1]; i += 1) {
				isExcluded[i] = true;
			}
		});
	}

	var shouldIndentNextCharacter = options.indentStart !== false;
	var replacer = function (match) {
		if (shouldIndentNextCharacter) { return ("" + indentStr + match); }
		shouldIndentNextCharacter = true;
		return match;
	};

	this.intro = this.intro.replace(pattern, replacer);

	var charIndex = 0;
	var chunk = this.firstChunk;

	while (chunk) {
		var end = chunk.end;

		if (chunk.edited) {
			if (!isExcluded[charIndex]) {
				chunk.content = chunk.content.replace(pattern, replacer);

				if (chunk.content.length) {
					shouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\n';
				}
			}
		} else {
			charIndex = chunk.start;

			while (charIndex < end) {
				if (!isExcluded[charIndex]) {
					var char = this.original[charIndex];

					if (char === '\n') {
						shouldIndentNextCharacter = true;
					} else if (char !== '\r' && shouldIndentNextCharacter) {
						shouldIndentNextCharacter = false;

						if (charIndex === chunk.start) {
							chunk.prependRight(indentStr);
						} else {
							this._splitChunk(chunk, charIndex);
							chunk = chunk.next;
							chunk.prependRight(indentStr);
						}
					}
				}

				charIndex += 1;
			}
		}

		charIndex = chunk.end;
		chunk = chunk.next;
	}

	this.outro = this.outro.replace(pattern, replacer);

	return this;
};

MagicString.prototype.insert = function insert () {
	throw new Error(
		'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'
	);
};

MagicString.prototype.insertLeft = function insertLeft (index, content) {
	if (!warned.insertLeft) {
		console.warn(
			'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'
		); // eslint-disable-line no-console
		warned.insertLeft = true;
	}

	return this.appendLeft(index, content);
};

MagicString.prototype.insertRight = function insertRight (index, content) {
	if (!warned.insertRight) {
		console.warn(
			'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'
		); // eslint-disable-line no-console
		warned.insertRight = true;
	}

	return this.prependRight(index, content);
};

MagicString.prototype.move = function move (start, end, index) {
	if (index >= start && index <= end) { throw new Error('Cannot move a selection inside itself'); }

	this._split(start);
	this._split(end);
	this._split(index);

	var first = this.byStart[start];
	var last = this.byEnd[end];

	var oldLeft = first.previous;
	var oldRight = last.next;

	var newRight = this.byStart[index];
	if (!newRight && last === this.lastChunk) { return this; }
	var newLeft = newRight ? newRight.previous : this.lastChunk;

	if (oldLeft) { oldLeft.next = oldRight; }
	if (oldRight) { oldRight.previous = oldLeft; }

	if (newLeft) { newLeft.next = first; }
	if (newRight) { newRight.previous = last; }

	if (!first.previous) { this.firstChunk = last.next; }
	if (!last.next) {
		this.lastChunk = first.previous;
		this.lastChunk.next = null;
	}

	first.previous = newLeft;
	last.next = newRight || null;

	if (!newLeft) { this.firstChunk = first; }
	if (!newRight) { this.lastChunk = last; }
	return this;
};

MagicString.prototype.overwrite = function overwrite (start, end, content, options) {
	if (typeof content !== 'string') { throw new TypeError('replacement content must be a string'); }

	while (start < 0) { start += this.original.length; }
	while (end < 0) { end += this.original.length; }

	if (end > this.original.length) { throw new Error('end is out of bounds'); }
	if (start === end)
		{ throw new Error(
			'Cannot overwrite a zero-length range â€“ use appendLeft or prependRight instead'
		); }

	this._split(start);
	this._split(end);

	if (options === true) {
		if (!warned.storeName) {
			console.warn(
				'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'
			); // eslint-disable-line no-console
			warned.storeName = true;
		}

		options = { storeName: true };
	}
	var storeName = options !== undefined ? options.storeName : false;
	var contentOnly = options !== undefined ? options.contentOnly : false;

	if (storeName) {
		var original = this.original.slice(start, end);
		Object.defineProperty(this.storedNames, original, { writable: true, value: true, enumerable: true });
	}

	var first = this.byStart[start];
	var last = this.byEnd[end];

	if (first) {
		var chunk = first;
		while (chunk !== last) {
			if (chunk.next !== this.byStart[chunk.end]) {
				throw new Error('Cannot overwrite across a split point');
			}
			chunk = chunk.next;
			chunk.edit('', false);
		}

		first.edit(content, storeName, contentOnly);
	} else {
		// must be inserting at the end
		var newChunk = new Chunk(start, end, '').edit(content, storeName);

		// TODO last chunk in the array may not be the last chunk, if it's moved...
		last.next = newChunk;
		newChunk.previous = last;
	}
	return this;
};

MagicString.prototype.prepend = function prepend (content) {
	if (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }

	this.intro = content + this.intro;
	return this;
};

MagicString.prototype.prependLeft = function prependLeft (index, content) {
	if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }

	this._split(index);

	var chunk = this.byEnd[index];

	if (chunk) {
		chunk.prependLeft(content);
	} else {
		this.intro = content + this.intro;
	}
	return this;
};

MagicString.prototype.prependRight = function prependRight (index, content) {
	if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }

	this._split(index);

	var chunk = this.byStart[index];

	if (chunk) {
		chunk.prependRight(content);
	} else {
		this.outro = content + this.outro;
	}
	return this;
};

MagicString.prototype.remove = function remove (start, end) {
	while (start < 0) { start += this.original.length; }
	while (end < 0) { end += this.original.length; }

	if (start === end) { return this; }

	if (start < 0 || end > this.original.length) { throw new Error('Character is out of bounds'); }
	if (start > end) { throw new Error('end must be greater than start'); }

	this._split(start);
	this._split(end);

	var chunk = this.byStart[start];

	while (chunk) {
		chunk.intro = '';
		chunk.outro = '';
		chunk.edit('');

		chunk = end > chunk.end ? this.byStart[chunk.end] : null;
	}
	return this;
};

MagicString.prototype.lastChar = function lastChar () {
	if (this.outro.length) { return this.outro[this.outro.length - 1]; }
	var chunk = this.lastChunk;
	do {
		if (chunk.outro.length) { return chunk.outro[chunk.outro.length - 1]; }
		if (chunk.content.length) { return chunk.content[chunk.content.length - 1]; }
		if (chunk.intro.length) { return chunk.intro[chunk.intro.length - 1]; }
	} while ((chunk = chunk.previous));
	if (this.intro.length) { return this.intro[this.intro.length - 1]; }
	return '';
};

MagicString.prototype.lastLine = function lastLine () {
	var lineIndex = this.outro.lastIndexOf(n);
	if (lineIndex !== -1) { return this.outro.substr(lineIndex + 1); }
	var lineStr = this.outro;
	var chunk = this.lastChunk;
	do {
		if (chunk.outro.length > 0) {
			lineIndex = chunk.outro.lastIndexOf(n);
			if (lineIndex !== -1) { return chunk.outro.substr(lineIndex + 1) + lineStr; }
			lineStr = chunk.outro + lineStr;
		}

		if (chunk.content.length > 0) {
			lineIndex = chunk.content.lastIndexOf(n);
			if (lineIndex !== -1) { return chunk.content.substr(lineIndex + 1) + lineStr; }
			lineStr = chunk.content + lineStr;
		}

		if (chunk.intro.length > 0) {
			lineIndex = chunk.intro.lastIndexOf(n);
			if (lineIndex !== -1) { return chunk.intro.substr(lineIndex + 1) + lineStr; }
			lineStr = chunk.intro + lineStr;
		}
	} while ((chunk = chunk.previous));
	lineIndex = this.intro.lastIndexOf(n);
	if (lineIndex !== -1) { return this.intro.substr(lineIndex + 1) + lineStr; }
	return this.intro + lineStr;
};

MagicString.prototype.slice = function slice (start, end) {
		if ( start === void 0 ) start = 0;
		if ( end === void 0 ) end = this.original.length;

	while (start < 0) { start += this.original.length; }
	while (end < 0) { end += this.original.length; }

	var result = '';

	// find start chunk
	var chunk = this.firstChunk;
	while (chunk && (chunk.start > start || chunk.end <= start)) {
		// found end chunk before start
		if (chunk.start < end && chunk.end >= end) {
			return result;
		}

		chunk = chunk.next;
	}

	if (chunk && chunk.edited && chunk.start !== start)
		{ throw new Error(("Cannot use replaced character " + start + " as slice start anchor.")); }

	var startChunk = chunk;
	while (chunk) {
		if (chunk.intro && (startChunk !== chunk || chunk.start === start)) {
			result += chunk.intro;
		}

		var containsEnd = chunk.start < end && chunk.end >= end;
		if (containsEnd && chunk.edited && chunk.end !== end)
			{ throw new Error(("Cannot use replaced character " + end + " as slice end anchor.")); }

		var sliceStart = startChunk === chunk ? start - chunk.start : 0;
		var sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;

		result += chunk.content.slice(sliceStart, sliceEnd);

		if (chunk.outro && (!containsEnd || chunk.end === end)) {
			result += chunk.outro;
		}

		if (containsEnd) {
			break;
		}

		chunk = chunk.next;
	}

	return result;
};

// TODO deprecate this? not really very useful
MagicString.prototype.snip = function snip (start, end) {
	var clone = this.clone();
	clone.remove(0, start);
	clone.remove(end, clone.original.length);

	return clone;
};

MagicString.prototype._split = function _split (index) {
	if (this.byStart[index] || this.byEnd[index]) { return; }

	var chunk = this.lastSearchedChunk;
	var searchForward = index > chunk.end;

	while (chunk) {
		if (chunk.contains(index)) { return this._splitChunk(chunk, index); }

		chunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];
	}
};

MagicString.prototype._splitChunk = function _splitChunk (chunk, index) {
	if (chunk.edited && chunk.content.length) {
		// zero-length edited chunks are a special case (overlapping replacements)
		var loc = getLocator(this.original)(index);
		throw new Error(
			("Cannot split a chunk that has already been edited (" + (loc.line) + ":" + (loc.column) + " â€“ \"" + (chunk.original) + "\")")
		);
	}

	var newChunk = chunk.split(index);

	this.byEnd[index] = chunk;
	this.byStart[index] = newChunk;
	this.byEnd[newChunk.end] = newChunk;

	if (chunk === this.lastChunk) { this.lastChunk = newChunk; }

	this.lastSearchedChunk = chunk;
	return true;
};

MagicString.prototype.toString = function toString () {
	var str = this.intro;

	var chunk = this.firstChunk;
	while (chunk) {
		str += chunk.toString();
		chunk = chunk.next;
	}

	return str + this.outro;
};

MagicString.prototype.isEmpty = function isEmpty () {
	var chunk = this.firstChunk;
	do {
		if (
			(chunk.intro.length && chunk.intro.trim()) ||
			(chunk.content.length && chunk.content.trim()) ||
			(chunk.outro.length && chunk.outro.trim())
		)
			{ return false; }
	} while ((chunk = chunk.next));
	return true;
};

MagicString.prototype.length = function length () {
	var chunk = this.firstChunk;
	var length = 0;
	do {
		length += chunk.intro.length + chunk.content.length + chunk.outro.length;
	} while ((chunk = chunk.next));
	return length;
};

MagicString.prototype.trimLines = function trimLines () {
	return this.trim('[\\r\\n]');
};

MagicString.prototype.trim = function trim (charType) {
	return this.trimStart(charType).trimEnd(charType);
};

MagicString.prototype.trimEndAborted = function trimEndAborted (charType) {
	var rx = new RegExp((charType || '\\s') + '+$');

	this.outro = this.outro.replace(rx, '');
	if (this.outro.length) { return true; }

	var chunk = this.lastChunk;

	do {
		var end = chunk.end;
		var aborted = chunk.trimEnd(rx);

		// if chunk was trimmed, we have a new lastChunk
		if (chunk.end !== end) {
			if (this.lastChunk === chunk) {
				this.lastChunk = chunk.next;
			}

			this.byEnd[chunk.end] = chunk;
			this.byStart[chunk.next.start] = chunk.next;
			this.byEnd[chunk.next.end] = chunk.next;
		}

		if (aborted) { return true; }
		chunk = chunk.previous;
	} while (chunk);

	return false;
};

MagicString.prototype.trimEnd = function trimEnd (charType) {
	this.trimEndAborted(charType);
	return this;
};
MagicString.prototype.trimStartAborted = function trimStartAborted (charType) {
	var rx = new RegExp('^' + (charType || '\\s') + '+');

	this.intro = this.intro.replace(rx, '');
	if (this.intro.length) { return true; }

	var chunk = this.firstChunk;

	do {
		var end = chunk.end;
		var aborted = chunk.trimStart(rx);

		if (chunk.end !== end) {
			// special case...
			if (chunk === this.lastChunk) { this.lastChunk = chunk.next; }

			this.byEnd[chunk.end] = chunk;
			this.byStart[chunk.next.start] = chunk.next;
			this.byEnd[chunk.next.end] = chunk.next;
		}

		if (aborted) { return true; }
		chunk = chunk.next;
	} while (chunk);

	return false;
};

MagicString.prototype.trimStart = function trimStart (charType) {
	this.trimStartAborted(charType);
	return this;
};

// @ts-check
/** @typedef { import('estree').BaseNode} BaseNode */

/** @typedef {{
	skip: () => void;
	remove: () => void;
	replace: (node: BaseNode) => void;
}} WalkerContext */

class WalkerBase {
	constructor() {
		/** @type {boolean} */
		this.should_skip = false;

		/** @type {boolean} */
		this.should_remove = false;

		/** @type {BaseNode | null} */
		this.replacement = null;

		/** @type {WalkerContext} */
		this.context = {
			skip: () => (this.should_skip = true),
			remove: () => (this.should_remove = true),
			replace: (node) => (this.replacement = node)
		};
	}

	/**
	 *
	 * @param {any} parent
	 * @param {string} prop
	 * @param {number} index
	 * @param {BaseNode} node
	 */
	replace(parent, prop, index, node) {
		if (parent) {
			if (index !== null) {
				parent[prop][index] = node;
			} else {
				parent[prop] = node;
			}
		}
	}

	/**
	 *
	 * @param {any} parent
	 * @param {string} prop
	 * @param {number} index
	 */
	remove(parent, prop, index) {
		if (parent) {
			if (index !== null) {
				parent[prop].splice(index, 1);
			} else {
				delete parent[prop];
			}
		}
	}
}

// @ts-check

/** @typedef { import('estree').BaseNode} BaseNode */
/** @typedef { import('./walker.js').WalkerContext} WalkerContext */

/** @typedef {(
 *    this: WalkerContext,
 *    node: BaseNode,
 *    parent: BaseNode,
 *    key: string,
 *    index: number
 * ) => void} SyncHandler */

class SyncWalker extends WalkerBase {
	/**
	 *
	 * @param {SyncHandler} enter
	 * @param {SyncHandler} leave
	 */
	constructor(enter, leave) {
		super();

		/** @type {SyncHandler} */
		this.enter = enter;

		/** @type {SyncHandler} */
		this.leave = leave;
	}

	/**
	 *
	 * @param {BaseNode} node
	 * @param {BaseNode} parent
	 * @param {string} [prop]
	 * @param {number} [index]
	 * @returns {BaseNode}
	 */
	visit(node, parent, prop, index) {
		if (node) {
			if (this.enter) {
				const _should_skip = this.should_skip;
				const _should_remove = this.should_remove;
				const _replacement = this.replacement;
				this.should_skip = false;
				this.should_remove = false;
				this.replacement = null;

				this.enter.call(this.context, node, parent, prop, index);

				if (this.replacement) {
					node = this.replacement;
					this.replace(parent, prop, index, node);
				}

				if (this.should_remove) {
					this.remove(parent, prop, index);
				}

				const skipped = this.should_skip;
				const removed = this.should_remove;

				this.should_skip = _should_skip;
				this.should_remove = _should_remove;
				this.replacement = _replacement;

				if (skipped) return node;
				if (removed) return null;
			}

			for (const key in node) {
				const value = node[key];

				if (typeof value !== "object") {
					continue;
				} else if (Array.isArray(value)) {
					for (let i = 0; i < value.length; i += 1) {
						if (value[i] !== null && typeof value[i].type === 'string') {
							if (!this.visit(value[i], node, key, i)) {
								// removed
								i--;
							}
						}
					}
				} else if (value !== null && typeof value.type === "string") {
					this.visit(value, node, key, null);
				}
			}

			if (this.leave) {
				const _replacement = this.replacement;
				const _should_remove = this.should_remove;
				this.replacement = null;
				this.should_remove = false;

				this.leave.call(this.context, node, parent, prop, index);

				if (this.replacement) {
					node = this.replacement;
					this.replace(parent, prop, index, node);
				}

				if (this.should_remove) {
					this.remove(parent, prop, index);
				}

				const removed = this.should_remove;

				this.replacement = _replacement;
				this.should_remove = _should_remove;

				if (removed) return null;
			}
		}

		return node;
	}
}

// @ts-check

/** @typedef { import('estree').BaseNode} BaseNode */
/** @typedef { import('./sync.js').SyncHandler} SyncHandler */
/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */

/**
 *
 * @param {BaseNode} ast
 * @param {{
 *   enter?: SyncHandler
 *   leave?: SyncHandler
 * }} walker
 * @returns {BaseNode}
 */
function walk$1(ast, { enter, leave }) {
	const instance = new SyncWalker(enter, leave);
	return instance.visit(ast, null);
}

// https://github.com/vuejs/core/blob/main/packages/compiler-core/src/babelUtils.ts
function walkIdentifiers(root, onIdentifier, onNode) {
    const parentStack = [];
    const knownIds = Object.create(null);
    const rootExp = root.type === 'Program' &&
        root.body[0].type === 'ExpressionStatement' &&
        root.body[0].expression;
    walk$1(root, {
        enter(node, parent) {
            parent && parentStack.push(parent);
            if (parent &&
                parent.type.startsWith('TS') &&
                parent.type !== 'TSAsExpression' &&
                parent.type !== 'TSNonNullExpression' &&
                parent.type !== 'TSTypeAssertion') {
                return this.skip();
            }
            if (onNode)
                onNode(node);
            if (node.type === 'Identifier') {
                const isLocal = !!knownIds[node.name];
                const isRefed = isReferencedIdentifier(node, parent, parentStack);
                if ((isRefed && !isLocal)) {
                    onIdentifier(node, parent, parentStack, isRefed, isLocal);
                }
            }
            else if (node.type === 'ObjectProperty' &&
                parent.type === 'ObjectPattern') {
                node.inPattern = true;
            }
            else if (isFunctionType(node)) {
                // walk function expressions and add its arguments to known identifiers
                // so that we don't prefix them
                walkFunctionParams(node, id => markScopeIdentifier(node, id, knownIds));
            }
            else if (node.type === 'BlockStatement') {
                // #3445 record block-level local variables
                walkBlockDeclarations(node, id => markScopeIdentifier(node, id, knownIds));
            }
        },
        leave(node, parent) {
            parent && parentStack.pop();
            if (node !== rootExp && node.scopeIds) {
                for (const id of node.scopeIds) {
                    knownIds[id]--;
                    if (knownIds[id] === 0) {
                        delete knownIds[id];
                    }
                }
            }
        }
    });
}
function isReferencedIdentifier(id, parent, parentStack) {
    if (!parent) {
        return true;
    }
    // is a special keyword but parsed as identifier
    if (id.name === 'arguments') {
        return false;
    }
    if (isReferenced(id, parent)) {
        return true;
    }
    // babel's isReferenced check returns false for ids being assigned to, so we
    // need to cover those cases here
    switch (parent.type) {
        case 'AssignmentExpression':
        case 'AssignmentPattern':
            return true;
        case 'ObjectPattern':
        case 'ArrayPattern':
            return isInDestructureAssignment(parent, parentStack);
    }
    return false;
}
function isInDestructureAssignment(parent, parentStack) {
    if (parent &&
        (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')) {
        let i = parentStack.length;
        while (i--) {
            const p = parentStack[i];
            if (p.type === 'AssignmentExpression') {
                return true;
            }
            else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {
                break;
            }
        }
    }
    return false;
}
function walkFunctionParams(node, onIdent) {
    for (const p of node.params) {
        for (const id of extractIdentifiers(p)) {
            onIdent(id);
        }
    }
}
function walkBlockDeclarations(block, onIdent) {
    for (const stmt of block.body) {
        if (stmt.type === 'VariableDeclaration') {
            if (stmt.declare)
                continue;
            for (const decl of stmt.declarations) {
                for (const id of extractIdentifiers(decl.id)) {
                    onIdent(id);
                }
            }
        }
        else if (stmt.type === 'FunctionDeclaration' ||
            stmt.type === 'ClassDeclaration') {
            if (stmt.declare || !stmt.id)
                continue;
            onIdent(stmt.id);
        }
    }
}
function extractIdentifiers(param, nodes = []) {
    switch (param.type) {
        case 'Identifier':
            nodes.push(param);
            break;
        case 'MemberExpression':
            let object = param;
            while (object.type === 'MemberExpression') {
                object = object.object;
            }
            nodes.push(object);
            break;
        case 'ObjectPattern':
            for (const prop of param.properties) {
                if (prop.type === 'RestElement') {
                    extractIdentifiers(prop.argument, nodes);
                }
                else {
                    extractIdentifiers(prop.value, nodes);
                }
            }
            break;
        case 'ArrayPattern':
            param.elements.forEach(element => {
                if (element)
                    extractIdentifiers(element, nodes);
            });
            break;
        case 'RestElement':
            extractIdentifiers(param.argument, nodes);
            break;
        case 'AssignmentPattern':
            extractIdentifiers(param.left, nodes);
            break;
    }
    return nodes;
}
function markScopeIdentifier(node, child, knownIds) {
    const { name } = child;
    if (node.scopeIds && node.scopeIds.has(name)) {
        return;
    }
    if (name in knownIds) {
        knownIds[name]++;
    }
    else {
        knownIds[name] = 1;
    }
    (node.scopeIds || (node.scopeIds = new Set())).add(name);
}
const isFunctionType = (node) => {
    return /Function(?:Expression|Declaration)$|Method$/.test(node.type);
};
const isStaticProperty = (node) => node &&
    (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&
    !node.computed;
/**
 * Copied from https://github.com/babel/babel/blob/main/packages/babel-types/src/validators/isReferenced.ts
 * To avoid runtime dependency on @babel/types (which includes process references)
 * This file should not change very often in babel but we may need to keep it
 * up-to-date from time to time.
 *
 * https://github.com/babel/babel/blob/main/LICENSE
 *
 */
function isReferenced(node, parent, grandparent) {
    switch (parent.type) {
        // yes: PARENT[NODE]
        // yes: NODE.child
        // no: parent.NODE
        case 'MemberExpression':
        case 'OptionalMemberExpression':
            if (parent.property === node) {
                return !!parent.computed;
            }
            return parent.object === node;
        case 'JSXMemberExpression':
            return parent.object === node;
        // no: let NODE = init;
        // yes: let id = NODE;
        case 'VariableDeclarator':
            return parent.init === node;
        // yes: () => NODE
        // no: (NODE) => {}
        case 'ArrowFunctionExpression':
            return parent.body === node;
        // no: class { #NODE; }
        // no: class { get #NODE() {} }
        // no: class { #NODE() {} }
        // no: class { fn() { return this.#NODE; } }
        case 'PrivateName':
            return false;
        // no: class { NODE() {} }
        // yes: class { [NODE]() {} }
        // no: class { foo(NODE) {} }
        case 'ClassMethod':
        case 'ClassPrivateMethod':
        case 'ObjectMethod':
            if (parent.key === node) {
                return !!parent.computed;
            }
            return false;
        // yes: { [NODE]: "" }
        // no: { NODE: "" }
        // depends: { NODE }
        // depends: { key: NODE }
        case 'ObjectProperty':
            if (parent.key === node) {
                return !!parent.computed;
            }
            // parent.value === node
            return !grandparent || grandparent.type !== 'ObjectPattern';
        // no: class { NODE = value; }
        // yes: class { [NODE] = value; }
        // yes: class { key = NODE; }
        case 'ClassProperty':
            if (parent.key === node) {
                return !!parent.computed;
            }
            return true;
        case 'ClassPrivateProperty':
            return parent.key !== node;
        // no: class NODE {}
        // yes: class Foo extends NODE {}
        case 'ClassDeclaration':
        case 'ClassExpression':
            return parent.superClass === node;
        // yes: left = NODE;
        // no: NODE = right;
        case 'AssignmentExpression':
            return parent.right === node;
        // no: [NODE = foo] = [];
        // yes: [foo = NODE] = [];
        case 'AssignmentPattern':
            return parent.right === node;
        // no: NODE: for (;;) {}
        case 'LabeledStatement':
            return false;
        // no: try {} catch (NODE) {}
        case 'CatchClause':
            return false;
        // no: function foo(...NODE) {}
        case 'RestElement':
            return false;
        case 'BreakStatement':
        case 'ContinueStatement':
            return false;
        // no: function NODE() {}
        // no: function foo(NODE) {}
        case 'FunctionDeclaration':
        case 'FunctionExpression':
            return false;
        // no: export NODE from "foo";
        // no: export * as NODE from "foo";
        case 'ExportNamespaceSpecifier':
        case 'ExportDefaultSpecifier':
            return false;
        // no: export { foo as NODE };
        // yes: export { NODE as foo };
        // no: export { NODE as foo } from "foo";
        case 'ExportSpecifier':
            // @ts-expect-error
            if (grandparent === null || grandparent === void 0 ? void 0 : grandparent.source) {
                return false;
            }
            return parent.local === node;
        // no: import NODE from "foo";
        // no: import * as NODE from "foo";
        // no: import { NODE as foo } from "foo";
        // no: import { foo as NODE } from "foo";
        // no: import NODE from "bar";
        case 'ImportDefaultSpecifier':
        case 'ImportNamespaceSpecifier':
        case 'ImportSpecifier':
            return false;
        // no: import "foo" assert { NODE: "json" }
        case 'ImportAttribute':
            return false;
        // no: <div NODE="foo" />
        case 'JSXAttribute':
            return false;
        // no: [NODE] = [];
        // no: ({ NODE }) = [];
        case 'ObjectPattern':
        case 'ArrayPattern':
            return false;
        // no: new.NODE
        // no: NODE.target
        case 'MetaProperty':
            return false;
        // yes: type X = { someProperty: NODE }
        // no: type X = { NODE: OtherType }
        case 'ObjectTypeProperty':
            return parent.key !== node;
        // yes: enum X { Foo = NODE }
        // no: enum X { NODE }
        case 'TSEnumMember':
            return parent.id !== node;
        // yes: { [NODE]: value }
        // no: { NODE: value }
        case 'TSPropertySignature':
            if (parent.key === node) {
                return !!parent.computed;
            }
            return true;
    }
    return true;
}

const range = 2;
function generateCodeFrame(source, start = 0, end = source.length) {
    const lines = source.split(/\r?\n/);
    let count = 0;
    const res = [];
    for (let i = 0; i < lines.length; i++) {
        count += lines[i].length + 1;
        if (count >= start) {
            for (let j = i - range; j <= i + range || end > count; j++) {
                if (j < 0 || j >= lines.length)
                    continue;
                res.push(`${j + 1}${repeat(` `, 3 - String(j + 1).length)}|  ${lines[j]}`);
                const lineLength = lines[j].length;
                if (j === i) {
                    // push underline
                    const pad = start - (count - lineLength) + 1;
                    const length = end > count ? lineLength - pad : end - start;
                    res.push(`   |  ` + repeat(` `, pad) + repeat(`^`, length));
                }
                else if (j > i) {
                    if (end > count) {
                        const length = Math.min(end - count, lineLength);
                        res.push(`   |  ` + repeat(`^`, length));
                    }
                    count += lineLength + 1;
                }
            }
            break;
        }
    }
    return res.join('\n');
}
function repeat(str, n) {
    let result = '';
    if (n > 0) {
        // eslint-disable-next-line no-constant-condition
        while (true) {
            // eslint-disable-line
            if (n & 1)
                result += str;
            n >>>= 1;
            if (n <= 0)
                break;
            str += str;
        }
    }
    return result;
}

// can we use __proto__?
const hasProto = '__proto__' in {};
// Browser environment sniffing
const inBrowser = typeof window !== 'undefined';
const UA = inBrowser && window.navigator.userAgent.toLowerCase();
const isIE = UA && /msie|trident/.test(UA);
UA && UA.indexOf('msie 9.0') > 0;
const isEdge = UA && UA.indexOf('edge/') > 0;
UA && UA.indexOf('android') > 0;
UA && /iphone|ipad|ipod|ios/.test(UA);
UA && /chrome\/\d+/.test(UA) && !isEdge;
UA && /phantomjs/.test(UA);
UA && UA.match(/firefox\/(\d+)/);
// Firefox has a "watch" function on Object.prototype...
// @ts-expect-error firebox support
const nativeWatch = {}.watch;
let supportsPassive = false;
if (inBrowser) {
    try {
        const opts = {};
        Object.defineProperty(opts, 'passive', {
            get() {
                /* istanbul ignore next */
                supportsPassive = true;
            }
        }); // https://github.com/facebook/flow/issues/285
        window.addEventListener('test-passive', null, opts);
    }
    catch (e) { }
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
let _isServer;
const isServerRendering = () => {
    if (_isServer === undefined) {
        /* istanbul ignore if */
        if (!inBrowser && typeof global !== 'undefined') {
            // detect presence of vue-server-renderer and avoid
            // Webpack shimming the process
            _isServer =
                global['process'] && global['process'].env.VUE_ENV === 'server';
        }
        else {
            _isServer = false;
        }
    }
    return _isServer;
};
/* istanbul ignore next */
function isNative(Ctor) {
    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
const hasSymbol = typeof Symbol !== 'undefined' &&
    isNative(Symbol) &&
    typeof Reflect !== 'undefined' &&
    isNative(Reflect.ownKeys);
let _Set; // $flow-disable-line
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
    // use native Set when available.
    _Set = Set;
}
else {
    // a non-standard Set polyfill that only works with primitive keys.
    _Set = class Set {
        constructor() {
            this.set = Object.create(null);
        }
        has(key) {
            return this.set[key] === true;
        }
        add(key) {
            this.set[key] = true;
        }
        clear() {
            this.set = Object.create(null);
        }
    };
}

const ASSET_TYPES = ['component', 'directive', 'filter'];
const LIFECYCLE_HOOKS = [
    'beforeCreate',
    'created',
    'beforeMount',
    'mounted',
    'beforeUpdate',
    'updated',
    'beforeDestroy',
    'destroyed',
    'activated',
    'deactivated',
    'errorCaptured',
    'serverPrefetch',
    'renderTracked',
    'renderTriggered'
];

var config = {
    /**
     * Option merge strategies (used in core/util/options)
     */
    // $flow-disable-line
    optionMergeStrategies: Object.create(null),
    /**
     * Whether to suppress warnings.
     */
    silent: false,
    /**
     * Show production mode tip message on boot?
     */
    productionTip: process.env.NODE_ENV !== 'production',
    /**
     * Whether to enable devtools
     */
    devtools: process.env.NODE_ENV !== 'production',
    /**
     * Whether to record perf
     */
    performance: false,
    /**
     * Error handler for watcher errors
     */
    errorHandler: null,
    /**
     * Warn handler for watcher warns
     */
    warnHandler: null,
    /**
     * Ignore certain custom elements
     */
    ignoredElements: [],
    /**
     * Custom user key aliases for v-on
     */
    // $flow-disable-line
    keyCodes: Object.create(null),
    /**
     * Check if a tag is reserved so that it cannot be registered as a
     * component. This is platform-dependent and may be overwritten.
     */
    isReservedTag: no,
    /**
     * Check if an attribute is reserved so that it cannot be used as a component
     * prop. This is platform-dependent and may be overwritten.
     */
    isReservedAttr: no,
    /**
     * Check if a tag is an unknown element.
     * Platform-dependent.
     */
    isUnknownElement: no,
    /**
     * Get the namespace of an element
     */
    getTagNamespace: noop,
    /**
     * Parse the real tag name for the specific platform.
     */
    parsePlatformTagName: identity,
    /**
     * Check if an attribute must be bound using property, e.g. value
     * Platform-dependent.
     */
    mustUseProp: no,
    /**
     * Perform updates asynchronously. Intended to be used by Vue Test Utils
     * This will significantly reduce performance if set to false.
     */
    async: true,
    /**
     * Exposed for legacy reasons
     */
    _lifecycleHooks: LIFECYCLE_HOOKS
};

let currentInstance = null;
/**
 * @internal
 */
function setCurrentInstance(vm = null) {
    if (!vm)
        currentInstance && currentInstance._scope.off();
    currentInstance = vm;
    vm && vm._scope.on();
}

/**
 * @internal
 */
class VNode {
    constructor(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
        this.tag = tag;
        this.data = data;
        this.children = children;
        this.text = text;
        this.elm = elm;
        this.ns = undefined;
        this.context = context;
        this.fnContext = undefined;
        this.fnOptions = undefined;
        this.fnScopeId = undefined;
        this.key = data && data.key;
        this.componentOptions = componentOptions;
        this.componentInstance = undefined;
        this.parent = undefined;
        this.raw = false;
        this.isStatic = false;
        this.isRootInsert = true;
        this.isComment = false;
        this.isCloned = false;
        this.isOnce = false;
        this.asyncFactory = asyncFactory;
        this.asyncMeta = undefined;
        this.isAsyncPlaceholder = false;
    }
    // DEPRECATED: alias for componentInstance for backwards compat.
    /* istanbul ignore next */
    get child() {
        return this.componentInstance;
    }
}
const createEmptyVNode = (text = '') => {
    const node = new VNode();
    node.text = text;
    node.isComment = true;
    return node;
};
function createTextVNode(val) {
    return new VNode(undefined, undefined, undefined, String(val));
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode(vnode) {
    const cloned = new VNode(vnode.tag, vnode.data, 
    // #7975
    // clone children array to avoid mutating original in case of cloning
    // a child.
    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
    cloned.ns = vnode.ns;
    cloned.isStatic = vnode.isStatic;
    cloned.key = vnode.key;
    cloned.isComment = vnode.isComment;
    cloned.fnContext = vnode.fnContext;
    cloned.fnOptions = vnode.fnOptions;
    cloned.fnScopeId = vnode.fnScopeId;
    cloned.asyncMeta = vnode.asyncMeta;
    cloned.isCloned = true;
    return cloned;
}

/* not type checking this file because flow doesn't play well with Proxy */
if (process.env.NODE_ENV !== 'production') {
    makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
        'require' // for Webpack/Browserify
    );
    const hasProxy = typeof Proxy !== 'undefined' && isNative(Proxy);
    if (hasProxy) {
        const isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
        config.keyCodes = new Proxy(config.keyCodes, {
            set(target, key, value) {
                if (isBuiltInModifier(key)) {
                    warn$3(`Avoid overwriting built-in modifier in config.keyCodes: .${key}`);
                    return false;
                }
                else {
                    target[key] = value;
                    return true;
                }
            }
        });
    }
}

let uid = 0;
/**
 * A dep is an observable that can have multiple
 * directives subscribing to it.
 * @internal
 */
class Dep {
    constructor() {
        // pending subs cleanup
        this._pending = false;
        this.id = uid++;
        this.subs = [];
    }
    addSub(sub) {
        this.subs.push(sub);
    }
    removeSub(sub) {
        // #12696 deps with massive amount of subscribers are extremely slow to
        // clean up in Chromium
        // to workaround this, we unset the sub for now, and clear them on
        // next scheduler flush.
        this.subs[this.subs.indexOf(sub)] = null;
        if (!this._pending) {
            this._pending = true;
        }
    }
    depend(info) {
        if (Dep.target) {
            Dep.target.addDep(this);
            if (process.env.NODE_ENV !== 'production' && info && Dep.target.onTrack) {
                Dep.target.onTrack(Object.assign({ effect: Dep.target }, info));
            }
        }
    }
    notify(info) {
        // stabilize the subscriber list first
        const subs = this.subs.filter(s => s);
        if (process.env.NODE_ENV !== 'production' && !config.async) {
            // subs aren't sorted in scheduler if not running async
            // we need to sort them now to make sure they fire in correct
            // order
            subs.sort((a, b) => a.id - b.id);
        }
        for (let i = 0, l = subs.length; i < l; i++) {
            const sub = subs[i];
            if (process.env.NODE_ENV !== 'production' && info) {
                sub.onTrigger &&
                    sub.onTrigger(Object.assign({ effect: subs[i] }, info));
            }
            sub.update();
        }
    }
}
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null;
const targetStack = [];
function pushTarget(target) {
    targetStack.push(target);
    Dep.target = target;
}
function popTarget() {
    targetStack.pop();
    Dep.target = targetStack[targetStack.length - 1];
}

/*
 * not type checking this file because flow doesn't play well with
 * dynamically accessing methods on Array prototype
 */
const arrayProto = Array.prototype;
const arrayMethods = Object.create(arrayProto);
const methodsToPatch = [
    'push',
    'pop',
    'shift',
    'unshift',
    'splice',
    'sort',
    'reverse'
];
/**
 * Intercept mutating methods and emit events
 */
methodsToPatch.forEach(function (method) {
    // cache original method
    const original = arrayProto[method];
    def(arrayMethods, method, function mutator(...args) {
        const result = original.apply(this, args);
        const ob = this.__ob__;
        let inserted;
        switch (method) {
            case 'push':
            case 'unshift':
                inserted = args;
                break;
            case 'splice':
                inserted = args.slice(2);
                break;
        }
        if (inserted)
            ob.observeArray(inserted);
        // notify change
        if (process.env.NODE_ENV !== 'production') {
            ob.dep.notify({
                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
                target: this,
                key: method
            });
        }
        else {
            ob.dep.notify();
        }
        return result;
    });
});

const arrayKeys = Object.getOwnPropertyNames(arrayMethods);
const NO_INIITIAL_VALUE = {};
/**
 * In some cases we may want to disable observation inside a component's
 * update computation.
 */
let shouldObserve = true;
function toggleObserving(value) {
    shouldObserve = value;
}
// ssr mock dep
const mockDep = {
    notify: noop,
    depend: noop,
    addSub: noop,
    removeSub: noop
};
/**
 * Observer class that is attached to each observed
 * object. Once attached, the observer converts the target
 * object's property keys into getter/setters that
 * collect dependencies and dispatch updates.
 */
class Observer {
    constructor(value, shallow = false, mock = false) {
        this.value = value;
        this.shallow = shallow;
        this.mock = mock;
        // this.value = value
        this.dep = mock ? mockDep : new Dep();
        this.vmCount = 0;
        def(value, '__ob__', this);
        if (isArray(value)) {
            if (!mock) {
                if (hasProto) {
                    value.__proto__ = arrayMethods;
                    /* eslint-enable no-proto */
                }
                else {
                    for (let i = 0, l = arrayKeys.length; i < l; i++) {
                        const key = arrayKeys[i];
                        def(value, key, arrayMethods[key]);
                    }
                }
            }
            if (!shallow) {
                this.observeArray(value);
            }
        }
        else {
            /**
             * Walk through all properties and convert them into
             * getter/setters. This method should only be called when
             * value type is Object.
             */
            const keys = Object.keys(value);
            for (let i = 0; i < keys.length; i++) {
                const key = keys[i];
                defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
            }
        }
    }
    /**
     * Observe a list of Array items.
     */
    observeArray(value) {
        for (let i = 0, l = value.length; i < l; i++) {
            observe(value[i], false, this.mock);
        }
    }
}
// helpers
/**
 * Attempt to create an observer instance for a value,
 * returns the new observer if successfully observed,
 * or the existing observer if the value already has one.
 */
function observe(value, shallow, ssrMockReactivity) {
    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
        return value.__ob__;
    }
    if (shouldObserve &&
        (ssrMockReactivity || !isServerRendering()) &&
        (isArray(value) || isPlainObject(value)) &&
        Object.isExtensible(value) &&
        !value.__v_skip /* ReactiveFlags.SKIP */ &&
        !isRef(value) &&
        !(value instanceof VNode)) {
        return new Observer(value, shallow, ssrMockReactivity);
    }
}
/**
 * Define a reactive property on an Object.
 */
function defineReactive(obj, key, val, customSetter, shallow, mock) {
    const dep = new Dep();
    const property = Object.getOwnPropertyDescriptor(obj, key);
    if (property && property.configurable === false) {
        return;
    }
    // cater for pre-defined getter/setters
    const getter = property && property.get;
    const setter = property && property.set;
    if ((!getter || setter) &&
        (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
        val = obj[key];
    }
    let childOb = !shallow && observe(val, false, mock);
    Object.defineProperty(obj, key, {
        enumerable: true,
        configurable: true,
        get: function reactiveGetter() {
            const value = getter ? getter.call(obj) : val;
            if (Dep.target) {
                if (process.env.NODE_ENV !== 'production') {
                    dep.depend({
                        target: obj,
                        type: "get" /* TrackOpTypes.GET */,
                        key
                    });
                }
                else {
                    dep.depend();
                }
                if (childOb) {
                    childOb.dep.depend();
                    if (isArray(value)) {
                        dependArray(value);
                    }
                }
            }
            return isRef(value) && !shallow ? value.value : value;
        },
        set: function reactiveSetter(newVal) {
            const value = getter ? getter.call(obj) : val;
            if (!hasChanged(value, newVal)) {
                return;
            }
            if (process.env.NODE_ENV !== 'production' && customSetter) {
                customSetter();
            }
            if (setter) {
                setter.call(obj, newVal);
            }
            else if (getter) {
                // #7981: for accessor properties without setter
                return;
            }
            else if (!shallow && isRef(value) && !isRef(newVal)) {
                value.value = newVal;
                return;
            }
            else {
                val = newVal;
            }
            childOb = !shallow && observe(newVal, false, mock);
            if (process.env.NODE_ENV !== 'production') {
                dep.notify({
                    type: "set" /* TriggerOpTypes.SET */,
                    target: obj,
                    key,
                    newValue: newVal,
                    oldValue: value
                });
            }
            else {
                dep.notify();
            }
        }
    });
    return dep;
}
function set(target, key, val) {
    if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {
        warn$3(`Cannot set reactive property on undefined, null, or primitive value: ${target}`);
    }
    if (isReadonly(target)) {
        process.env.NODE_ENV !== 'production' && warn$3(`Set operation on key "${key}" failed: target is readonly.`);
        return;
    }
    const ob = target.__ob__;
    if (isArray(target) && isValidArrayIndex(key)) {
        target.length = Math.max(target.length, key);
        target.splice(key, 1, val);
        // when mocking for SSR, array methods are not hijacked
        if (ob && !ob.shallow && ob.mock) {
            observe(val, false, true);
        }
        return val;
    }
    if (key in target && !(key in Object.prototype)) {
        target[key] = val;
        return val;
    }
    if (target._isVue || (ob && ob.vmCount)) {
        process.env.NODE_ENV !== 'production' &&
            warn$3('Avoid adding reactive properties to a Vue instance or its root $data ' +
                'at runtime - declare it upfront in the data option.');
        return val;
    }
    if (!ob) {
        target[key] = val;
        return val;
    }
    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
    if (process.env.NODE_ENV !== 'production') {
        ob.dep.notify({
            type: "add" /* TriggerOpTypes.ADD */,
            target: target,
            key,
            newValue: val,
            oldValue: undefined
        });
    }
    else {
        ob.dep.notify();
    }
    return val;
}
/**
 * Collect dependencies on array elements when the array is touched, since
 * we cannot intercept array element access like property getters.
 */
function dependArray(value) {
    for (let e, i = 0, l = value.length; i < l; i++) {
        e = value[i];
        if (e && e.__ob__) {
            e.__ob__.dep.depend();
        }
        if (isArray(e)) {
            dependArray(e);
        }
    }
}

function isReadonly(value) {
    return !!(value && value.__v_isReadonly);
}

function isRef(r) {
    return !!(r && r.__v_isRef === true);
}

if (process.env.NODE_ENV !== 'production') ;

const normalizeEvent = cached((name) => {
    const passive = name.charAt(0) === '&';
    name = passive ? name.slice(1) : name;
    const once = name.charAt(0) === '~'; // Prefixed last, checked first
    name = once ? name.slice(1) : name;
    const capture = name.charAt(0) === '!';
    name = capture ? name.slice(1) : name;
    return {
        name,
        once,
        capture,
        passive
    };
});
function createFnInvoker(fns, vm) {
    function invoker() {
        const fns = invoker.fns;
        if (isArray(fns)) {
            const cloned = fns.slice();
            for (let i = 0; i < cloned.length; i++) {
                invokeWithErrorHandling(cloned[i], null, arguments, vm, `v-on handler`);
            }
        }
        else {
            // return handler return value for single handlers
            return invokeWithErrorHandling(fns, null, arguments, vm, `v-on handler`);
        }
    }
    invoker.fns = fns;
    return invoker;
}
function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
    let name, cur, old, event;
    for (name in on) {
        cur = on[name];
        old = oldOn[name];
        event = normalizeEvent(name);
        if (isUndef(cur)) {
            process.env.NODE_ENV !== 'production' &&
                warn$3(`Invalid handler for event "${event.name}": got ` + String(cur), vm);
        }
        else if (isUndef(old)) {
            if (isUndef(cur.fns)) {
                cur = on[name] = createFnInvoker(cur, vm);
            }
            if (isTrue(event.once)) {
                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
            }
            add(event.name, cur, event.capture, event.passive, event.params);
        }
        else if (cur !== old) {
            old.fns = cur;
            on[name] = old;
        }
    }
    for (name in oldOn) {
        if (isUndef(on[name])) {
            event = normalizeEvent(name);
            remove(event.name, oldOn[name], event.capture);
        }
    }
}

function extractPropsFromVNodeData(data, Ctor, tag) {
    // we are only extracting raw values here.
    // validation and default values are handled in the child
    // component itself.
    const propOptions = Ctor.options.props;
    if (isUndef(propOptions)) {
        return;
    }
    const res = {};
    const { attrs, props } = data;
    if (isDef(attrs) || isDef(props)) {
        for (const key in propOptions) {
            const altKey = hyphenate(key);
            if (process.env.NODE_ENV !== 'production') {
                const keyInLowerCase = key.toLowerCase();
                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
                    tip(`Prop "${keyInLowerCase}" is passed to component ` +
                        `${formatComponentName(
                        // @ts-expect-error tag is string
                        tag || Ctor)}, but the declared prop name is` +
                        ` "${key}". ` +
                        `Note that HTML attributes are case-insensitive and camelCased ` +
                        `props need to use their kebab-case equivalents when using in-DOM ` +
                        `templates. You should probably use "${altKey}" instead of "${key}".`);
                }
            }
            checkProp(res, props, key, altKey, true) ||
                checkProp(res, attrs, key, altKey, false);
        }
    }
    return res;
}
function checkProp(res, hash, key, altKey, preserve) {
    if (isDef(hash)) {
        if (hasOwn(hash, key)) {
            res[key] = hash[key];
            if (!preserve) {
                delete hash[key];
            }
            return true;
        }
        else if (hasOwn(hash, altKey)) {
            res[key] = hash[altKey];
            if (!preserve) {
                delete hash[altKey];
            }
            return true;
        }
    }
    return false;
}

// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren(children) {
    for (let i = 0; i < children.length; i++) {
        if (isArray(children[i])) {
            return Array.prototype.concat.apply([], children);
        }
    }
    return children;
}
// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren(children) {
    return isPrimitive(children)
        ? [createTextVNode(children)]
        : isArray(children)
            ? normalizeArrayChildren(children)
            : undefined;
}
function isTextNode(node) {
    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
}
function normalizeArrayChildren(children, nestedIndex) {
    const res = [];
    let i, c, lastIndex, last;
    for (i = 0; i < children.length; i++) {
        c = children[i];
        if (isUndef(c) || typeof c === 'boolean')
            continue;
        lastIndex = res.length - 1;
        last = res[lastIndex];
        //  nested
        if (isArray(c)) {
            if (c.length > 0) {
                c = normalizeArrayChildren(c, `${nestedIndex || ''}_${i}`);
                // merge adjacent text nodes
                if (isTextNode(c[0]) && isTextNode(last)) {
                    res[lastIndex] = createTextVNode(last.text + c[0].text);
                    c.shift();
                }
                res.push.apply(res, c);
            }
        }
        else if (isPrimitive(c)) {
            if (isTextNode(last)) {
                // merge adjacent text nodes
                // this is necessary for SSR hydration because text nodes are
                // essentially merged when rendered to HTML strings
                res[lastIndex] = createTextVNode(last.text + c);
            }
            else if (c !== '') {
                // convert primitive to vnode
                res.push(createTextVNode(c));
            }
        }
        else {
            if (isTextNode(c) && isTextNode(last)) {
                // merge adjacent text nodes
                res[lastIndex] = createTextVNode(last.text + c.text);
            }
            else {
                // default key for nested array children (likely generated by v-for)
                if (isTrue(children._isVList) &&
                    isDef(c.tag) &&
                    isUndef(c.key) &&
                    isDef(nestedIndex)) {
                    c.key = `__vlist${nestedIndex}_${i}__`;
                }
                res.push(c);
            }
        }
    }
    return res;
}

const SIMPLE_NORMALIZE = 1;
const ALWAYS_NORMALIZE = 2;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement(context, tag, data, children, normalizationType, alwaysNormalize) {
    if (isArray(data) || isPrimitive(data)) {
        normalizationType = children;
        children = data;
        data = undefined;
    }
    if (isTrue(alwaysNormalize)) {
        normalizationType = ALWAYS_NORMALIZE;
    }
    return _createElement(context, tag, data, children, normalizationType);
}
function _createElement(context, tag, data, children, normalizationType) {
    if (isDef(data) && isDef(data.__ob__)) {
        process.env.NODE_ENV !== 'production' &&
            warn$3(`Avoid using observed data object as vnode data: ${JSON.stringify(data)}\n` + 'Always create fresh vnode data objects in each render!', context);
        return createEmptyVNode();
    }
    // object syntax in v-bind
    if (isDef(data) && isDef(data.is)) {
        tag = data.is;
    }
    if (!tag) {
        // in case of component :is set to falsy value
        return createEmptyVNode();
    }
    // warn against non-primitive key
    if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
        warn$3('Avoid using non-primitive value as key, ' +
            'use string/number value instead.', context);
    }
    // support single function children as default scoped slot
    if (isArray(children) && isFunction(children[0])) {
        data = data || {};
        data.scopedSlots = { default: children[0] };
        children.length = 0;
    }
    if (normalizationType === ALWAYS_NORMALIZE) {
        children = normalizeChildren(children);
    }
    else if (normalizationType === SIMPLE_NORMALIZE) {
        children = simpleNormalizeChildren(children);
    }
    let vnode, ns;
    if (typeof tag === 'string') {
        let Ctor;
        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
        if ((!data || !data.pre) &&
            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
            // component
            vnode = createComponent(Ctor, data, context, children, tag);
        }
        else {
            // unknown or unlisted namespaced elements
            // check at runtime because it may get assigned a namespace when its
            // parent normalizes children
            vnode = new VNode(tag, data, children, undefined, undefined, context);
        }
    }
    else {
        // direct component options / constructor
        vnode = createComponent(tag, data, context, children);
    }
    if (isArray(vnode)) {
        return vnode;
    }
    else if (isDef(vnode)) {
        if (isDef(ns))
            applyNS(vnode, ns);
        if (isDef(data))
            registerDeepBindings(data);
        return vnode;
    }
    else {
        return createEmptyVNode();
    }
}
function applyNS(vnode, ns, force) {
    vnode.ns = ns;
    if (vnode.tag === 'foreignObject') {
        // use default namespace inside foreignObject
        ns = undefined;
        force = true;
    }
    if (isDef(vnode.children)) {
        for (let i = 0, l = vnode.children.length; i < l; i++) {
            const child = vnode.children[i];
            if (isDef(child.tag) &&
                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
                applyNS(child, ns, force);
            }
        }
    }
}
// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings(data) {
    if (isObject$1(data.style)) {
        traverse(data.style);
    }
    if (isObject$1(data.class)) {
        traverse(data.class);
    }
}

/**
 * Runtime helper for rendering v-for lists.
 */
function renderList(val, render) {
    let ret = null, i, l, keys, key;
    if (isArray(val) || typeof val === 'string') {
        ret = new Array(val.length);
        for (i = 0, l = val.length; i < l; i++) {
            ret[i] = render(val[i], i);
        }
    }
    else if (typeof val === 'number') {
        ret = new Array(val);
        for (i = 0; i < val; i++) {
            ret[i] = render(i + 1, i);
        }
    }
    else if (isObject$1(val)) {
        if (hasSymbol && val[Symbol.iterator]) {
            ret = [];
            const iterator = val[Symbol.iterator]();
            let result = iterator.next();
            while (!result.done) {
                ret.push(render(result.value, ret.length));
                result = iterator.next();
            }
        }
        else {
            keys = Object.keys(val);
            ret = new Array(keys.length);
            for (i = 0, l = keys.length; i < l; i++) {
                key = keys[i];
                ret[i] = render(val[key], key, i);
            }
        }
    }
    if (!isDef(ret)) {
        ret = [];
    }
    ret._isVList = true;
    return ret;
}

/**
 * Runtime helper for rendering <slot>
 */
function renderSlot(name, fallbackRender, props, bindObject) {
    const scopedSlotFn = this.$scopedSlots[name];
    let nodes;
    if (scopedSlotFn) {
        // scoped slot
        props = props || {};
        if (bindObject) {
            if (process.env.NODE_ENV !== 'production' && !isObject$1(bindObject)) {
                warn$3('slot v-bind without argument expects an Object', this);
            }
            props = extend(extend({}, bindObject), props);
        }
        nodes =
            scopedSlotFn(props) ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    else {
        nodes =
            this.$slots[name] ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    const target = props && props.slot;
    if (target) {
        return this.$createElement('template', { slot: target }, nodes);
    }
    else {
        return nodes;
    }
}

/**
 * Runtime helper for resolving filters
 */
function resolveFilter(id) {
    return resolveAsset(this.$options, 'filters', id, true) || identity;
}

function isKeyNotMatch(expect, actual) {
    if (isArray(expect)) {
        return expect.indexOf(actual) === -1;
    }
    else {
        return expect !== actual;
    }
}
/**
 * Runtime helper for checking keyCodes from config.
 * exposed as Vue.prototype._k
 * passing in eventKeyName as last argument separately for backwards compat
 */
function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
    const mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
        return isKeyNotMatch(builtInKeyName, eventKeyName);
    }
    else if (mappedKeyCode) {
        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
    }
    else if (eventKeyName) {
        return hyphenate(eventKeyName) !== key;
    }
    return eventKeyCode === undefined;
}

/**
 * Runtime helper for merging v-bind="object" into a VNode's data.
 */
function bindObjectProps(data, tag, value, asProp, isSync) {
    if (value) {
        if (!isObject$1(value)) {
            process.env.NODE_ENV !== 'production' &&
                warn$3('v-bind without argument expects an Object or Array value', this);
        }
        else {
            if (isArray(value)) {
                value = toObject(value);
            }
            let hash;
            for (const key in value) {
                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
                    hash = data;
                }
                else {
                    const type = data.attrs && data.attrs.type;
                    hash =
                        asProp || config.mustUseProp(tag, type, key)
                            ? data.domProps || (data.domProps = {})
                            : data.attrs || (data.attrs = {});
                }
                const camelizedKey = camelize(key);
                const hyphenatedKey = hyphenate(key);
                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
                    hash[key] = value[key];
                    if (isSync) {
                        const on = data.on || (data.on = {});
                        on[`update:${key}`] = function ($event) {
                            value[key] = $event;
                        };
                    }
                }
            }
        }
    }
    return data;
}

/**
 * Runtime helper for rendering static trees.
 */
function renderStatic(index, isInFor) {
    const cached = this._staticTrees || (this._staticTrees = []);
    let tree = cached[index];
    // if has already-rendered static tree and not inside v-for,
    // we can reuse the same tree.
    if (tree && !isInFor) {
        return tree;
    }
    // otherwise, render a fresh tree.
    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
    );
    markStatic$1(tree, `__static__${index}`, false);
    return tree;
}
/**
 * Runtime helper for v-once.
 * Effectively it means marking the node as static with a unique key.
 */
function markOnce(tree, index, key) {
    markStatic$1(tree, `__once__${index}${key ? `_${key}` : ``}`, true);
    return tree;
}
function markStatic$1(tree, key, isOnce) {
    if (isArray(tree)) {
        for (let i = 0; i < tree.length; i++) {
            if (tree[i] && typeof tree[i] !== 'string') {
                markStaticNode(tree[i], `${key}_${i}`, isOnce);
            }
        }
    }
    else {
        markStaticNode(tree, key, isOnce);
    }
}
function markStaticNode(node, key, isOnce) {
    node.isStatic = true;
    node.key = key;
    node.isOnce = isOnce;
}

function bindObjectListeners(data, value) {
    if (value) {
        if (!isPlainObject(value)) {
            process.env.NODE_ENV !== 'production' && warn$3('v-on without argument expects an Object value', this);
        }
        else {
            const on = (data.on = data.on ? extend({}, data.on) : {});
            for (const key in value) {
                const existing = on[key];
                const ours = value[key];
                on[key] = existing ? [].concat(existing, ours) : ours;
            }
        }
    }
    return data;
}

function resolveScopedSlots(fns, res, 
// the following are added in 2.6
hasDynamicKeys, contentHashKey) {
    res = res || { $stable: !hasDynamicKeys };
    for (let i = 0; i < fns.length; i++) {
        const slot = fns[i];
        if (isArray(slot)) {
            resolveScopedSlots(slot, res, hasDynamicKeys);
        }
        else if (slot) {
            // marker for reverse proxying v-slot without scope on this.$slots
            // @ts-expect-error
            if (slot.proxy) {
                // @ts-expect-error
                slot.fn.proxy = true;
            }
            res[slot.key] = slot.fn;
        }
    }
    if (contentHashKey) {
        res.$key = contentHashKey;
    }
    return res;
}

// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
function bindDynamicKeys(baseObj, values) {
    for (let i = 0; i < values.length; i += 2) {
        const key = values[i];
        if (typeof key === 'string' && key) {
            baseObj[values[i]] = values[i + 1];
        }
        else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {
            // null is a special value for explicitly removing a binding
            warn$3(`Invalid value for dynamic directive argument (expected string or null): ${key}`, this);
        }
    }
    return baseObj;
}
// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
function prependModifier(value, symbol) {
    return typeof value === 'string' ? symbol + value : value;
}

function installRenderHelpers(target) {
    target._o = markOnce;
    target._n = toNumber;
    target._s = toString$2;
    target._l = renderList;
    target._t = renderSlot;
    target._q = looseEqual;
    target._i = looseIndexOf;
    target._m = renderStatic;
    target._f = resolveFilter;
    target._k = checkKeyCodes;
    target._b = bindObjectProps;
    target._v = createTextVNode;
    target._e = createEmptyVNode;
    target._u = resolveScopedSlots;
    target._g = bindObjectListeners;
    target._d = bindDynamicKeys;
    target._p = prependModifier;
}

/**
 * Runtime helper for resolving raw children VNodes into a slot object.
 */
function resolveSlots(children, context) {
    if (!children || !children.length) {
        return {};
    }
    const slots = {};
    for (let i = 0, l = children.length; i < l; i++) {
        const child = children[i];
        const data = child.data;
        // remove slot attribute if the node is resolved as a Vue slot node
        if (data && data.attrs && data.attrs.slot) {
            delete data.attrs.slot;
        }
        // named slots should only be respected if the vnode was rendered in the
        // same context.
        if ((child.context === context || child.fnContext === context) &&
            data &&
            data.slot != null) {
            const name = data.slot;
            const slot = slots[name] || (slots[name] = []);
            if (child.tag === 'template') {
                slot.push.apply(slot, child.children || []);
            }
            else {
                slot.push(child);
            }
        }
        else {
            (slots.default || (slots.default = [])).push(child);
        }
    }
    // ignore slots that contains only whitespace
    for (const name in slots) {
        if (slots[name].every(isWhitespace)) {
            delete slots[name];
        }
    }
    return slots;
}
function isWhitespace(node) {
    return (node.isComment && !node.asyncFactory) || node.text === ' ';
}

function isAsyncPlaceholder(node) {
    // @ts-expect-error not really boolean type
    return node.isComment && node.asyncFactory;
}

function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
    let res;
    const hasNormalSlots = Object.keys(normalSlots).length > 0;
    const isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
    const key = scopedSlots && scopedSlots.$key;
    if (!scopedSlots) {
        res = {};
    }
    else if (scopedSlots._normalized) {
        // fast path 1: child component re-render only, parent did not change
        return scopedSlots._normalized;
    }
    else if (isStable &&
        prevScopedSlots &&
        prevScopedSlots !== emptyObject &&
        key === prevScopedSlots.$key &&
        !hasNormalSlots &&
        !prevScopedSlots.$hasNormal) {
        // fast path 2: stable scoped slots w/ no normal slots to proxy,
        // only need to normalize once
        return prevScopedSlots;
    }
    else {
        res = {};
        for (const key in scopedSlots) {
            if (scopedSlots[key] && key[0] !== '$') {
                res[key] = normalizeScopedSlot(ownerVm, normalSlots, key, scopedSlots[key]);
            }
        }
    }
    // expose normal slots on scopedSlots
    for (const key in normalSlots) {
        if (!(key in res)) {
            res[key] = proxyNormalSlot(normalSlots, key);
        }
    }
    // avoriaz seems to mock a non-extensible $scopedSlots object
    // and when that is passed down this would cause an error
    if (scopedSlots && Object.isExtensible(scopedSlots)) {
        scopedSlots._normalized = res;
    }
    def(res, '$stable', isStable);
    def(res, '$key', key);
    def(res, '$hasNormal', hasNormalSlots);
    return res;
}
function normalizeScopedSlot(vm, normalSlots, key, fn) {
    const normalized = function () {
        const cur = currentInstance;
        setCurrentInstance(vm);
        let res = arguments.length ? fn.apply(null, arguments) : fn({});
        res =
            res && typeof res === 'object' && !isArray(res)
                ? [res] // single vnode
                : normalizeChildren(res);
        const vnode = res && res[0];
        setCurrentInstance(cur);
        return res &&
            (!vnode ||
                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
            ? undefined
            : res;
    };
    // this is a slot using the new v-slot syntax without scope. although it is
    // compiled as a scoped slot, render fn users would expect it to be present
    // on this.$slots because the usage is semantically a normal slot.
    if (fn.proxy) {
        Object.defineProperty(normalSlots, key, {
            get: normalized,
            enumerable: true,
            configurable: true
        });
    }
    return normalized;
}
function proxyNormalSlot(slots, key) {
    return () => slots[key];
}

function syncSetupProxy(to, from, prev, instance, type) {
    let changed = false;
    for (const key in from) {
        if (!(key in to)) {
            changed = true;
            defineProxyAttr(to, key, instance, type);
        }
        else if (from[key] !== prev[key]) {
            changed = true;
        }
    }
    for (const key in to) {
        if (!(key in from)) {
            changed = true;
            delete to[key];
        }
    }
    return changed;
}
function defineProxyAttr(proxy, key, instance, type) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get() {
            return instance[type][key];
        }
    });
}

function createAsyncPlaceholder(factory, data, context, children, tag) {
    const node = createEmptyVNode();
    node.asyncFactory = factory;
    node.asyncMeta = { data, context, children, tag };
    return node;
}
function resolveAsyncComponent(factory, baseCtor) {
    if (isTrue(factory.error) && isDef(factory.errorComp)) {
        return factory.errorComp;
    }
    if (isDef(factory.resolved)) {
        return factory.resolved;
    }
    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
        return factory.loadingComp;
    }
}

let target;
function add(event, fn) {
    target.$on(event, fn);
}
function remove(event, fn) {
    target.$off(event, fn);
}
function createOnceHandler(event, fn) {
    const _target = target;
    return function onceHandler() {
        const res = fn.apply(null, arguments);
        if (res !== null) {
            _target.$off(event, onceHandler);
        }
    };
}
function updateComponentListeners(vm, listeners, oldListeners) {
    target = vm;
    updateListeners(listeners, oldListeners || {}, add, remove, createOnceHandler, vm);
    target = undefined;
}

let activeInstance = null;
function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
    if (process.env.NODE_ENV !== 'production') ;
    // determine whether component has slot children
    // we need to do this before overwriting $options._renderChildren.
    // check if there are dynamic scopedSlots (hand-written or compiled but with
    // dynamic slot names). Static scoped slots compiled from template has the
    // "$stable" marker.
    const newScopedSlots = parentVnode.data.scopedSlots;
    const oldScopedSlots = vm.$scopedSlots;
    const hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
        (!newScopedSlots && vm.$scopedSlots.$key));
    // Any static slot children from the parent may have changed during parent's
    // update. Dynamic scoped slots may also have changed. In such cases, a forced
    // update is necessary to ensure correctness.
    let needsForceUpdate = !!(renderChildren || // has new static slots
        vm.$options._renderChildren || // has old static slots
        hasDynamicScopedSlot);
    const prevVNode = vm.$vnode;
    vm.$options._parentVnode = parentVnode;
    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
    if (vm._vnode) {
        // update child tree's parent
        vm._vnode.parent = parentVnode;
    }
    vm.$options._renderChildren = renderChildren;
    // update $attrs and $listeners hash
    // these are also reactive so they may trigger child update if the child
    // used them during render
    const attrs = parentVnode.data.attrs || emptyObject;
    if (vm._attrsProxy) {
        // force update if attrs are accessed and has changed since it may be
        // passed to a child component.
        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
            needsForceUpdate = true;
        }
    }
    vm.$attrs = attrs;
    // update listeners
    listeners = listeners || emptyObject;
    const prevListeners = vm.$options._parentListeners;
    if (vm._listenersProxy) {
        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
    }
    vm.$listeners = vm.$options._parentListeners = listeners;
    updateComponentListeners(vm, listeners, prevListeners);
    // update props
    if (propsData && vm.$options.props) {
        toggleObserving(false);
        const props = vm._props;
        const propKeys = vm.$options._propKeys || [];
        for (let i = 0; i < propKeys.length; i++) {
            const key = propKeys[i];
            const propOptions = vm.$options.props; // wtf flow?
            props[key] = validateProp(key, propOptions, propsData, vm);
        }
        toggleObserving(true);
        // keep a copy of raw propsData
        vm.$options.propsData = propsData;
    }
    // resolve slots + force update if has children
    if (needsForceUpdate) {
        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
        vm.$forceUpdate();
    }
    if (process.env.NODE_ENV !== 'production') ;
}
function isInInactiveTree(vm) {
    while (vm && (vm = vm.$parent)) {
        if (vm._inactive)
            return true;
    }
    return false;
}
function activateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = false;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    else if (vm._directInactive) {
        return;
    }
    if (vm._inactive || vm._inactive === null) {
        vm._inactive = false;
        for (let i = 0; i < vm.$children.length; i++) {
            activateChildComponent(vm.$children[i]);
        }
        callHook(vm, 'activated');
    }
}
function deactivateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = true;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    if (!vm._inactive) {
        vm._inactive = true;
        for (let i = 0; i < vm.$children.length; i++) {
            deactivateChildComponent(vm.$children[i]);
        }
        callHook(vm, 'deactivated');
    }
}
function callHook(vm, hook, args, setContext = true) {
    // #7573 disable dep collection when invoking lifecycle hooks
    pushTarget();
    const prev = currentInstance;
    setContext && setCurrentInstance(vm);
    const handlers = vm.$options[hook];
    const info = `${hook} hook`;
    if (handlers) {
        for (let i = 0, j = handlers.length; i < j; i++) {
            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
        }
    }
    if (vm._hasHookEvent) {
        vm.$emit('hook:' + hook);
    }
    setContext && setCurrentInstance(prev);
    popTarget();
}

// Async edge case fix requires storing an event listener's attach timestamp.
let getNow = Date.now;
// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if (inBrowser && !isIE) {
    const performance = window.performance;
    if (performance &&
        typeof performance.now === 'function' &&
        getNow() > document.createEvent('Event').timeStamp) {
        // if the event timestamp, although evaluated AFTER the Date.now(), is
        // smaller than it, it means the event is using a hi-res timestamp,
        // and we need to use the hi-res version for event listener timestamps as
        // well.
        getNow = () => performance.now();
    }
}
/**
 * Queue a kept-alive component that was activated during patch.
 * The queue will be processed after the entire tree has been patched.
 */
function queueActivatedComponent(vm) {
    // setting _inactive to false here so that a render function can
    // rely on checking whether it's in an inactive tree (e.g. router-view)
    vm._inactive = false;
}

function handleError(err, vm, info) {
    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
    // See: https://github.com/vuejs/vuex/issues/1505
    pushTarget();
    try {
        if (vm) {
            let cur = vm;
            while ((cur = cur.$parent)) {
                const hooks = cur.$options.errorCaptured;
                if (hooks) {
                    for (let i = 0; i < hooks.length; i++) {
                        try {
                            const capture = hooks[i].call(cur, err, vm, info) === false;
                            if (capture)
                                return;
                        }
                        catch (e) {
                            globalHandleError(e, cur, 'errorCaptured hook');
                        }
                    }
                }
            }
        }
        globalHandleError(err, vm, info);
    }
    finally {
        popTarget();
    }
}
function invokeWithErrorHandling(handler, context, args, vm, info) {
    let res;
    try {
        res = args ? handler.apply(context, args) : handler.call(context);
        if (res && !res._isVue && isPromise(res) && !res._handled) {
            res.catch(e => handleError(e, vm, info + ` (Promise/async)`));
            res._handled = true;
        }
    }
    catch (e) {
        handleError(e, vm, info);
    }
    return res;
}
function globalHandleError(err, vm, info) {
    logError(err, vm, info);
}
function logError(err, vm, info) {
    if (process.env.NODE_ENV !== 'production') {
        warn$3(`Error in ${info}: "${err.toString()}"`, vm);
    }
    /* istanbul ignore else */
    if (inBrowser && typeof console !== 'undefined') {
        console.error(err);
    }
    else {
        throw err;
    }
}

/* globals MutationObserver */
const callbacks = [];
function flushCallbacks() {
    const copies = callbacks.slice(0);
    callbacks.length = 0;
    for (let i = 0; i < copies.length; i++) {
        copies[i]();
    }
}
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
    Promise.resolve();
}
else if (!isIE &&
    typeof MutationObserver !== 'undefined' &&
    (isNative(MutationObserver) ||
        // PhantomJS and iOS 7.x
        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
    // Use MutationObserver where native Promise is not available,
    // e.g. PhantomJS, iOS7, Android 4.4
    // (#6466 MutationObserver is unreliable in IE11)
    let counter = 1;
    const observer = new MutationObserver(flushCallbacks);
    const textNode = document.createTextNode(String(counter));
    observer.observe(textNode, {
        characterData: true
    });
}
else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) ;
else ;

const seenObjects = new _Set();
/**
 * Recursively traverse an object to evoke all converted
 * getters, so that every nested property inside the object
 * is collected as a "deep" dependency.
 */
function traverse(val) {
    _traverse(val, seenObjects);
    seenObjects.clear();
    return val;
}
function _traverse(val, seen) {
    let i, keys;
    const isA = isArray(val);
    if ((!isA && !isObject$1(val)) ||
        val.__v_skip /* ReactiveFlags.SKIP */ ||
        Object.isFrozen(val) ||
        val instanceof VNode) {
        return;
    }
    if (val.__ob__) {
        const depId = val.__ob__.dep.id;
        if (seen.has(depId)) {
            return;
        }
        seen.add(depId);
    }
    if (isA) {
        i = val.length;
        while (i--)
            _traverse(val[i], seen);
    }
    else if (isRef(val)) {
        _traverse(val.value, seen);
    }
    else {
        keys = Object.keys(val);
        i = keys.length;
        while (i--)
            _traverse(val[keys[i]], seen);
    }
}

function resolveInject(inject, vm) {
    if (inject) {
        // inject is :any because flow is not smart enough to figure out cached
        const result = Object.create(null);
        const keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
        for (let i = 0; i < keys.length; i++) {
            const key = keys[i];
            // #6574 in case the inject object is observed...
            if (key === '__ob__')
                continue;
            const provideKey = inject[key].from;
            if (provideKey in vm._provided) {
                result[key] = vm._provided[provideKey];
            }
            else if ('default' in inject[key]) {
                const provideDefault = inject[key].default;
                result[key] = isFunction(provideDefault)
                    ? provideDefault.call(vm)
                    : provideDefault;
            }
            else if (process.env.NODE_ENV !== 'production') {
                warn$3(`Injection "${key}" not found`, vm);
            }
        }
        return result;
    }
}

function resolveConstructorOptions(Ctor) {
    let options = Ctor.options;
    if (Ctor.super) {
        const superOptions = resolveConstructorOptions(Ctor.super);
        const cachedSuperOptions = Ctor.superOptions;
        if (superOptions !== cachedSuperOptions) {
            // super option changed,
            // need to resolve new options.
            Ctor.superOptions = superOptions;
            // check if there are any late-modified/attached options (#4976)
            const modifiedOptions = resolveModifiedOptions(Ctor);
            // update base extend options
            if (modifiedOptions) {
                extend(Ctor.extendOptions, modifiedOptions);
            }
            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
            if (options.name) {
                options.components[options.name] = Ctor;
            }
        }
    }
    return options;
}
function resolveModifiedOptions(Ctor) {
    let modified;
    const latest = Ctor.options;
    const sealed = Ctor.sealedOptions;
    for (const key in latest) {
        if (latest[key] !== sealed[key]) {
            if (!modified)
                modified = {};
            modified[key] = latest[key];
        }
    }
    return modified;
}

function FunctionalRenderContext(data, props, children, parent, Ctor) {
    const options = Ctor.options;
    // ensure the createElement function in functional components
    // gets a unique context - this is necessary for correct named slot check
    let contextVm;
    if (hasOwn(parent, '_uid')) {
        contextVm = Object.create(parent);
        contextVm._original = parent;
    }
    else {
        // the context vm passed in is a functional context as well.
        // in this case we want to make sure we are able to get a hold to the
        // real context instance.
        contextVm = parent;
        // @ts-ignore
        parent = parent._original;
    }
    const isCompiled = isTrue(options._compiled);
    const needNormalization = !isCompiled;
    this.data = data;
    this.props = props;
    this.children = children;
    this.parent = parent;
    this.listeners = data.on || emptyObject;
    this.injections = resolveInject(options.inject, parent);
    this.slots = () => {
        if (!this.$slots) {
            normalizeScopedSlots(parent, data.scopedSlots, (this.$slots = resolveSlots(children, parent)));
        }
        return this.$slots;
    };
    Object.defineProperty(this, 'scopedSlots', {
        enumerable: true,
        get() {
            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
        }
    });
    // support for compiled functional template
    if (isCompiled) {
        // exposing $options for renderStatic()
        this.$options = options;
        // pre-resolve slots for renderSlot()
        this.$slots = this.slots();
        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
    }
    if (options._scopeId) {
        this._c = (a, b, c, d) => {
            const vnode = createElement(contextVm, a, b, c, d, needNormalization);
            if (vnode && !isArray(vnode)) {
                vnode.fnScopeId = options._scopeId;
                vnode.fnContext = parent;
            }
            return vnode;
        };
    }
    else {
        this._c = (a, b, c, d) => createElement(contextVm, a, b, c, d, needNormalization);
    }
}
installRenderHelpers(FunctionalRenderContext.prototype);
function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
    const options = Ctor.options;
    const props = {};
    const propOptions = options.props;
    if (isDef(propOptions)) {
        for (const key in propOptions) {
            props[key] = validateProp(key, propOptions, propsData || emptyObject);
        }
    }
    else {
        if (isDef(data.attrs))
            mergeProps(props, data.attrs);
        if (isDef(data.props))
            mergeProps(props, data.props);
    }
    const renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
    const vnode = options.render.call(null, renderContext._c, renderContext);
    if (vnode instanceof VNode) {
        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
    }
    else if (isArray(vnode)) {
        const vnodes = normalizeChildren(vnode) || [];
        const res = new Array(vnodes.length);
        for (let i = 0; i < vnodes.length; i++) {
            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
        }
        return res;
    }
}
function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
    // #7817 clone node before setting fnContext, otherwise if the node is reused
    // (e.g. it was from a cached normal slot) the fnContext causes named slots
    // that should not be matched to match.
    const clone = cloneVNode(vnode);
    clone.fnContext = contextVm;
    clone.fnOptions = options;
    if (process.env.NODE_ENV !== 'production') {
        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
            renderContext;
    }
    if (data.slot) {
        (clone.data || (clone.data = {})).slot = data.slot;
    }
    return clone;
}
function mergeProps(to, from) {
    for (const key in from) {
        to[camelize(key)] = from[key];
    }
}

function getComponentName(options) {
    return options.name || options.__name || options._componentTag;
}
// inline hooks to be invoked on component VNodes during patch
const componentVNodeHooks = {
    init(vnode, hydrating) {
        if (vnode.componentInstance &&
            !vnode.componentInstance._isDestroyed &&
            vnode.data.keepAlive) {
            // kept-alive components, treat as a patch
            const mountedNode = vnode; // work around flow
            componentVNodeHooks.prepatch(mountedNode, mountedNode);
        }
        else {
            const child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
        }
    },
    prepatch(oldVnode, vnode) {
        const options = vnode.componentOptions;
        const child = (vnode.componentInstance = oldVnode.componentInstance);
        updateChildComponent(child, options.propsData, // updated props
        options.listeners, // updated listeners
        vnode, // new parent vnode
        options.children // new children
        );
    },
    insert(vnode) {
        const { context, componentInstance } = vnode;
        if (!componentInstance._isMounted) {
            componentInstance._isMounted = true;
            callHook(componentInstance, 'mounted');
        }
        if (vnode.data.keepAlive) {
            if (context._isMounted) {
                // vue-router#1212
                // During updates, a kept-alive component's child components may
                // change, so directly walking the tree here may call activated hooks
                // on incorrect children. Instead we push them into a queue which will
                // be processed after the whole patch process ended.
                queueActivatedComponent(componentInstance);
            }
            else {
                activateChildComponent(componentInstance, true /* direct */);
            }
        }
    },
    destroy(vnode) {
        const { componentInstance } = vnode;
        if (!componentInstance._isDestroyed) {
            if (!vnode.data.keepAlive) {
                componentInstance.$destroy();
            }
            else {
                deactivateChildComponent(componentInstance, true /* direct */);
            }
        }
    }
};
const hooksToMerge = Object.keys(componentVNodeHooks);
function createComponent(Ctor, data, context, children, tag) {
    if (isUndef(Ctor)) {
        return;
    }
    const baseCtor = context.$options._base;
    // plain options object: turn it into a constructor
    if (isObject$1(Ctor)) {
        Ctor = baseCtor.extend(Ctor);
    }
    // if at this stage it's not a constructor or an async component factory,
    // reject.
    if (typeof Ctor !== 'function') {
        if (process.env.NODE_ENV !== 'production') {
            warn$3(`Invalid Component definition: ${String(Ctor)}`, context);
        }
        return;
    }
    // async component
    let asyncFactory;
    // @ts-expect-error
    if (isUndef(Ctor.cid)) {
        asyncFactory = Ctor;
        Ctor = resolveAsyncComponent(asyncFactory);
        if (Ctor === undefined) {
            // return a placeholder node for async component, which is rendered
            // as a comment node but preserves all the raw information for the node.
            // the information will be used for async server-rendering and hydration.
            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
        }
    }
    data = data || {};
    // resolve constructor options in case global mixins are applied after
    // component constructor creation
    resolveConstructorOptions(Ctor);
    // transform component v-model data into props & events
    if (isDef(data.model)) {
        // @ts-expect-error
        transformModel(Ctor.options, data);
    }
    // extract props
    // @ts-expect-error
    const propsData = extractPropsFromVNodeData(data, Ctor, tag);
    // functional component
    // @ts-expect-error
    if (isTrue(Ctor.options.functional)) {
        return createFunctionalComponent(Ctor, propsData, data, context, children);
    }
    // extract listeners, since these needs to be treated as
    // child component listeners instead of DOM listeners
    const listeners = data.on;
    // replace with listeners with .native modifier
    // so it gets processed during parent component patch.
    data.on = data.nativeOn;
    // @ts-expect-error
    if (isTrue(Ctor.options.abstract)) {
        // abstract components do not keep anything
        // other than props & listeners & slot
        // work around flow
        const slot = data.slot;
        data = {};
        if (slot) {
            data.slot = slot;
        }
    }
    // install component management hooks onto the placeholder node
    installComponentHooks(data);
    // return a placeholder vnode
    // @ts-expect-error
    const name = getComponentName(Ctor.options) || tag;
    const vnode = new VNode(
    // @ts-expect-error
    `vue-component-${Ctor.cid}${name ? `-${name}` : ''}`, data, undefined, undefined, undefined, context, 
    // @ts-expect-error
    { Ctor, propsData, listeners, tag, children }, asyncFactory);
    return vnode;
}
function createComponentInstanceForVnode(
// we know it's MountedComponentVNode but flow doesn't
vnode, 
// activeInstance in lifecycle state
parent) {
    const options = {
        _isComponent: true,
        _parentVnode: vnode,
        parent
    };
    // check inline-template render functions
    const inlineTemplate = vnode.data.inlineTemplate;
    if (isDef(inlineTemplate)) {
        options.render = inlineTemplate.render;
        options.staticRenderFns = inlineTemplate.staticRenderFns;
    }
    return new vnode.componentOptions.Ctor(options);
}
function installComponentHooks(data) {
    const hooks = data.hook || (data.hook = {});
    for (let i = 0; i < hooksToMerge.length; i++) {
        const key = hooksToMerge[i];
        const existing = hooks[key];
        const toMerge = componentVNodeHooks[key];
        // @ts-expect-error
        if (existing !== toMerge && !(existing && existing._merged)) {
            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
        }
    }
}
function mergeHook(f1, f2) {
    const merged = (a, b) => {
        // flow complains about extra args which is why we use any
        f1(a, b);
        f2(a, b);
    };
    merged._merged = true;
    return merged;
}
// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel(options, data) {
    const prop = (options.model && options.model.prop) || 'value';
    const event = (options.model && options.model.event) || 'input';
    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
    const on = data.on || (data.on = {});
    const existing = on[event];
    const callback = data.model.callback;
    if (isDef(existing)) {
        if (isArray(existing)
            ? existing.indexOf(callback) === -1
            : existing !== callback) {
            on[event] = [callback].concat(existing);
        }
    }
    else {
        on[event] = callback;
    }
}

let warn$3 = noop;
let tip = noop;
let generateComponentTrace; // work around flow check
let formatComponentName;
if (process.env.NODE_ENV !== 'production') {
    const hasConsole = typeof console !== 'undefined';
    const classifyRE = /(?:^|[-_])(\w)/g;
    const classify = str => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');
    warn$3 = (msg, vm = currentInstance) => {
        const trace = vm ? generateComponentTrace(vm) : '';
        if (hasConsole && !config.silent) {
            console.error(`[Vue warn]: ${msg}${trace}`);
        }
    };
    tip = (msg, vm) => {
        if (hasConsole && !config.silent) {
            console.warn(`[Vue tip]: ${msg}` + (vm ? generateComponentTrace(vm) : ''));
        }
    };
    formatComponentName = (vm, includeFile) => {
        if (vm.$root === vm) {
            return '<Root>';
        }
        const options = isFunction(vm) && vm.cid != null
            ? vm.options
            : vm._isVue
                ? vm.$options || vm.constructor.options
                : vm;
        let name = getComponentName(options);
        const file = options.__file;
        if (!name && file) {
            const match = file.match(/([^/\\]+)\.vue$/);
            name = match && match[1];
        }
        return ((name ? `<${classify(name)}>` : `<Anonymous>`) +
            (file && includeFile !== false ? ` at ${file}` : ''));
    };
    const repeat = (str, n) => {
        let res = '';
        while (n) {
            if (n % 2 === 1)
                res += str;
            if (n > 1)
                str += str;
            n >>= 1;
        }
        return res;
    };
    generateComponentTrace = (vm) => {
        if (vm._isVue && vm.$parent) {
            const tree = [];
            let currentRecursiveSequence = 0;
            while (vm) {
                if (tree.length > 0) {
                    const last = tree[tree.length - 1];
                    if (last.constructor === vm.constructor) {
                        currentRecursiveSequence++;
                        vm = vm.$parent;
                        continue;
                    }
                    else if (currentRecursiveSequence > 0) {
                        tree[tree.length - 1] = [last, currentRecursiveSequence];
                        currentRecursiveSequence = 0;
                    }
                }
                tree.push(vm);
                vm = vm.$parent;
            }
            return ('\n\nfound in\n\n' +
                tree
                    .map((vm, i) => `${i === 0 ? '---> ' : repeat(' ', 5 + i * 2)}${isArray(vm)
                    ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
                    : formatComponentName(vm)}`)
                    .join('\n'));
        }
        else {
            return `\n\n(found in ${formatComponentName(vm)})`;
        }
    };
}

/**
 * Option overwriting strategies are functions that handle
 * how to merge a parent option value and a child option
 * value into the final value.
 */
const strats = config.optionMergeStrategies;
/**
 * Options with restrictions
 */
if (process.env.NODE_ENV !== 'production') {
    strats.el = strats.propsData = function (parent, child, vm, key) {
        if (!vm) {
            warn$3(`option "${key}" can only be used during instance ` +
                'creation with the `new` keyword.');
        }
        return defaultStrat(parent, child);
    };
}
/**
 * Helper that recursively merges two data objects together.
 */
function mergeData(to, from, recursive = true) {
    if (!from)
        return to;
    let key, toVal, fromVal;
    const keys = hasSymbol
        ? Reflect.ownKeys(from)
        : Object.keys(from);
    for (let i = 0; i < keys.length; i++) {
        key = keys[i];
        // in case the object is already observed...
        if (key === '__ob__')
            continue;
        toVal = to[key];
        fromVal = from[key];
        if (!recursive || !hasOwn(to, key)) {
            set(to, key, fromVal);
        }
        else if (toVal !== fromVal &&
            isPlainObject(toVal) &&
            isPlainObject(fromVal)) {
            mergeData(toVal, fromVal);
        }
    }
    return to;
}
/**
 * Data
 */
function mergeDataOrFn(parentVal, childVal, vm) {
    if (!vm) {
        // in a Vue.extend merge, both should be functions
        if (!childVal) {
            return parentVal;
        }
        if (!parentVal) {
            return childVal;
        }
        // when parentVal & childVal are both present,
        // we need to return a function that returns the
        // merged result of both functions... no need to
        // check if parentVal is a function here because
        // it has to be a function to pass previous merges.
        return function mergedDataFn() {
            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
        };
    }
    else {
        return function mergedInstanceDataFn() {
            // instance merge
            const instanceData = isFunction(childVal)
                ? childVal.call(vm, vm)
                : childVal;
            const defaultData = isFunction(parentVal)
                ? parentVal.call(vm, vm)
                : parentVal;
            if (instanceData) {
                return mergeData(instanceData, defaultData);
            }
            else {
                return defaultData;
            }
        };
    }
}
strats.data = function (parentVal, childVal, vm) {
    if (!vm) {
        if (childVal && typeof childVal !== 'function') {
            process.env.NODE_ENV !== 'production' &&
                warn$3('The "data" option should be a function ' +
                    'that returns a per-instance value in component ' +
                    'definitions.', vm);
            return parentVal;
        }
        return mergeDataOrFn(parentVal, childVal);
    }
    return mergeDataOrFn(parentVal, childVal, vm);
};
/**
 * Hooks and props are merged as arrays.
 */
function mergeLifecycleHook(parentVal, childVal) {
    const res = childVal
        ? parentVal
            ? parentVal.concat(childVal)
            : isArray(childVal)
                ? childVal
                : [childVal]
        : parentVal;
    return res ? dedupeHooks(res) : res;
}
function dedupeHooks(hooks) {
    const res = [];
    for (let i = 0; i < hooks.length; i++) {
        if (res.indexOf(hooks[i]) === -1) {
            res.push(hooks[i]);
        }
    }
    return res;
}
LIFECYCLE_HOOKS.forEach(hook => {
    strats[hook] = mergeLifecycleHook;
});
/**
 * Assets
 *
 * When a vm is present (instance creation), we need to do
 * a three-way merge between constructor options, instance
 * options and parent options.
 */
function mergeAssets(parentVal, childVal, vm, key) {
    const res = Object.create(parentVal || null);
    if (childVal) {
        process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);
        return extend(res, childVal);
    }
    else {
        return res;
    }
}
ASSET_TYPES.forEach(function (type) {
    strats[type + 's'] = mergeAssets;
});
/**
 * Watchers.
 *
 * Watchers hashes should not overwrite one
 * another, so we merge them as arrays.
 */
strats.watch = function (parentVal, childVal, vm, key) {
    // work around Firefox's Object.prototype.watch...
    //@ts-expect-error work around
    if (parentVal === nativeWatch)
        parentVal = undefined;
    //@ts-expect-error work around
    if (childVal === nativeWatch)
        childVal = undefined;
    /* istanbul ignore if */
    if (!childVal)
        return Object.create(parentVal || null);
    if (process.env.NODE_ENV !== 'production') {
        assertObjectType(key, childVal, vm);
    }
    if (!parentVal)
        return childVal;
    const ret = {};
    extend(ret, parentVal);
    for (const key in childVal) {
        let parent = ret[key];
        const child = childVal[key];
        if (parent && !isArray(parent)) {
            parent = [parent];
        }
        ret[key] = parent ? parent.concat(child) : isArray(child) ? child : [child];
    }
    return ret;
};
/**
 * Other object hashes.
 */
strats.props =
    strats.methods =
        strats.inject =
            strats.computed =
                function (parentVal, childVal, vm, key) {
                    if (childVal && process.env.NODE_ENV !== 'production') {
                        assertObjectType(key, childVal, vm);
                    }
                    if (!parentVal)
                        return childVal;
                    const ret = Object.create(null);
                    extend(ret, parentVal);
                    if (childVal)
                        extend(ret, childVal);
                    return ret;
                };
strats.provide = function (parentVal, childVal) {
    if (!parentVal)
        return childVal;
    return function () {
        const ret = Object.create(null);
        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
        if (childVal) {
            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
            );
        }
        return ret;
    };
};
/**
 * Default strategy.
 */
const defaultStrat = function (parentVal, childVal) {
    return childVal === undefined ? parentVal : childVal;
};
/**
 * Validate component names
 */
function checkComponents(options) {
    for (const key in options.components) {
        validateComponentName(key);
    }
}
function validateComponentName(name) {
    if (!new RegExp(`^[a-zA-Z][\\-\\.0-9_${unicodeRegExp.source}]*$`).test(name)) {
        warn$3('Invalid component name: "' +
            name +
            '". Component names ' +
            'should conform to valid custom element name in html5 specification.');
    }
    if (isBuiltInTag(name) || config.isReservedTag(name)) {
        warn$3('Do not use built-in or reserved HTML elements as component ' +
            'id: ' +
            name);
    }
}
/**
 * Ensure all props option syntax are normalized into the
 * Object-based format.
 */
function normalizeProps(options, vm) {
    const props = options.props;
    if (!props)
        return;
    const res = {};
    let i, val, name;
    if (isArray(props)) {
        i = props.length;
        while (i--) {
            val = props[i];
            if (typeof val === 'string') {
                name = camelize(val);
                res[name] = { type: null };
            }
            else if (process.env.NODE_ENV !== 'production') {
                warn$3('props must be strings when using array syntax.');
            }
        }
    }
    else if (isPlainObject(props)) {
        for (const key in props) {
            val = props[key];
            name = camelize(key);
            res[name] = isPlainObject(val) ? val : { type: val };
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$3(`Invalid value for option "props": expected an Array or an Object, ` +
            `but got ${toRawType(props)}.`, vm);
    }
    options.props = res;
}
/**
 * Normalize all injections into Object-based format
 */
function normalizeInject(options, vm) {
    const inject = options.inject;
    if (!inject)
        return;
    const normalized = (options.inject = {});
    if (isArray(inject)) {
        for (let i = 0; i < inject.length; i++) {
            normalized[inject[i]] = { from: inject[i] };
        }
    }
    else if (isPlainObject(inject)) {
        for (const key in inject) {
            const val = inject[key];
            normalized[key] = isPlainObject(val)
                ? extend({ from: key }, val)
                : { from: val };
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$3(`Invalid value for option "inject": expected an Array or an Object, ` +
            `but got ${toRawType(inject)}.`, vm);
    }
}
/**
 * Normalize raw function directives into object format.
 */
function normalizeDirectives(options) {
    const dirs = options.directives;
    if (dirs) {
        for (const key in dirs) {
            const def = dirs[key];
            if (isFunction(def)) {
                dirs[key] = { bind: def, update: def };
            }
        }
    }
}
function assertObjectType(name, value, vm) {
    if (!isPlainObject(value)) {
        warn$3(`Invalid value for option "${name}": expected an Object, ` +
            `but got ${toRawType(value)}.`, vm);
    }
}
/**
 * Merge two option objects into a new one.
 * Core utility used in both instantiation and inheritance.
 */
function mergeOptions(parent, child, vm) {
    if (process.env.NODE_ENV !== 'production') {
        checkComponents(child);
    }
    if (isFunction(child)) {
        // @ts-expect-error
        child = child.options;
    }
    normalizeProps(child, vm);
    normalizeInject(child, vm);
    normalizeDirectives(child);
    // Apply extends and mixins on the child options,
    // but only if it is a raw options object that isn't
    // the result of another mergeOptions call.
    // Only merged options has the _base property.
    if (!child._base) {
        if (child.extends) {
            parent = mergeOptions(parent, child.extends, vm);
        }
        if (child.mixins) {
            for (let i = 0, l = child.mixins.length; i < l; i++) {
                parent = mergeOptions(parent, child.mixins[i], vm);
            }
        }
    }
    const options = {};
    let key;
    for (key in parent) {
        mergeField(key);
    }
    for (key in child) {
        if (!hasOwn(parent, key)) {
            mergeField(key);
        }
    }
    function mergeField(key) {
        const strat = strats[key] || defaultStrat;
        options[key] = strat(parent[key], child[key], vm, key);
    }
    return options;
}
/**
 * Resolve an asset.
 * This function is used because child instances need access
 * to assets defined in its ancestor chain.
 */
function resolveAsset(options, type, id, warnMissing) {
    /* istanbul ignore if */
    if (typeof id !== 'string') {
        return;
    }
    const assets = options[type];
    // check local registration variations first
    if (hasOwn(assets, id))
        return assets[id];
    const camelizedId = camelize(id);
    if (hasOwn(assets, camelizedId))
        return assets[camelizedId];
    const PascalCaseId = capitalize(camelizedId);
    if (hasOwn(assets, PascalCaseId))
        return assets[PascalCaseId];
    // fallback to prototype chain
    const res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
    if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {
        warn$3('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
    }
    return res;
}

function validateProp(key, propOptions, propsData, vm) {
    const prop = propOptions[key];
    const absent = !hasOwn(propsData, key);
    let value = propsData[key];
    // boolean casting
    const booleanIndex = getTypeIndex(Boolean, prop.type);
    if (booleanIndex > -1) {
        if (absent && !hasOwn(prop, 'default')) {
            value = false;
        }
        else if (value === '' || value === hyphenate(key)) {
            // only cast empty string / same name to boolean if
            // boolean has higher priority
            const stringIndex = getTypeIndex(String, prop.type);
            if (stringIndex < 0 || booleanIndex < stringIndex) {
                value = true;
            }
        }
    }
    // check default value
    if (value === undefined) {
        value = getPropDefaultValue(vm, prop, key);
        // since the default value is a fresh copy,
        // make sure to observe it.
        const prevShouldObserve = shouldObserve;
        toggleObserving(true);
        observe(value);
        toggleObserving(prevShouldObserve);
    }
    if (process.env.NODE_ENV !== 'production') {
        assertProp(prop, key, value, vm, absent);
    }
    return value;
}
/**
 * Get the default value of a prop.
 */
function getPropDefaultValue(vm, prop, key) {
    // no default, return undefined
    if (!hasOwn(prop, 'default')) {
        return undefined;
    }
    const def = prop.default;
    // warn against non-factory defaults for Object & Array
    if (process.env.NODE_ENV !== 'production' && isObject$1(def)) {
        warn$3('Invalid default value for prop "' +
            key +
            '": ' +
            'Props with type Object/Array must use a factory function ' +
            'to return the default value.', vm);
    }
    // the raw prop value was also undefined from previous render,
    // return previous default value to avoid unnecessary watcher trigger
    if (vm &&
        vm.$options.propsData &&
        vm.$options.propsData[key] === undefined &&
        vm._props[key] !== undefined) {
        return vm._props[key];
    }
    // call factory function for non-Function types
    // a value is Function if its prototype is function even across different execution context
    return isFunction(def) && getType(prop.type) !== 'Function'
        ? def.call(vm)
        : def;
}
/**
 * Assert whether a prop is valid.
 */
function assertProp(prop, name, value, vm, absent) {
    if (prop.required && absent) {
        warn$3('Missing required prop: "' + name + '"', vm);
        return;
    }
    if (value == null && !prop.required) {
        return;
    }
    let type = prop.type;
    let valid = !type || type === true;
    const expectedTypes = [];
    if (type) {
        if (!isArray(type)) {
            type = [type];
        }
        for (let i = 0; i < type.length && !valid; i++) {
            const assertedType = assertType(value, type[i], vm);
            expectedTypes.push(assertedType.expectedType || '');
            valid = assertedType.valid;
        }
    }
    const haveExpectedTypes = expectedTypes.some(t => t);
    if (!valid && haveExpectedTypes) {
        warn$3(getInvalidTypeMessage(name, value, expectedTypes), vm);
        return;
    }
    const validator = prop.validator;
    if (validator) {
        if (!validator(value)) {
            warn$3('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
        }
    }
}
const simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
function assertType(value, type, vm) {
    let valid;
    const expectedType = getType(type);
    if (simpleCheckRE.test(expectedType)) {
        const t = typeof value;
        valid = t === expectedType.toLowerCase();
        // for primitive wrapper objects
        if (!valid && t === 'object') {
            valid = value instanceof type;
        }
    }
    else if (expectedType === 'Object') {
        valid = isPlainObject(value);
    }
    else if (expectedType === 'Array') {
        valid = isArray(value);
    }
    else {
        try {
            valid = value instanceof type;
        }
        catch (e) {
            warn$3('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
            valid = false;
        }
    }
    return {
        valid,
        expectedType
    };
}
const functionTypeCheckRE = /^\s*function (\w+)/;
/**
 * Use function string name to check built-in types,
 * because a simple equality check will fail when running
 * across different vms / iframes.
 */
function getType(fn) {
    const match = fn && fn.toString().match(functionTypeCheckRE);
    return match ? match[1] : '';
}
function isSameType(a, b) {
    return getType(a) === getType(b);
}
function getTypeIndex(type, expectedTypes) {
    if (!isArray(expectedTypes)) {
        return isSameType(expectedTypes, type) ? 0 : -1;
    }
    for (let i = 0, len = expectedTypes.length; i < len; i++) {
        if (isSameType(expectedTypes[i], type)) {
            return i;
        }
    }
    return -1;
}
function getInvalidTypeMessage(name, value, expectedTypes) {
    let message = `Invalid prop: type check failed for prop "${name}".` +
        ` Expected ${expectedTypes.map(capitalize).join(', ')}`;
    const expectedType = expectedTypes[0];
    const receivedType = toRawType(value);
    // check if we need to specify expected value
    if (expectedTypes.length === 1 &&
        isExplicable(expectedType) &&
        isExplicable(typeof value) &&
        !isBoolean(expectedType, receivedType)) {
        message += ` with value ${styleValue(value, expectedType)}`;
    }
    message += `, got ${receivedType} `;
    // check if we need to specify received value
    if (isExplicable(receivedType)) {
        message += `with value ${styleValue(value, receivedType)}.`;
    }
    return message;
}
function styleValue(value, type) {
    if (type === 'String') {
        return `"${value}"`;
    }
    else if (type === 'Number') {
        return `${Number(value)}`;
    }
    else {
        return `${value}`;
    }
}
const EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
function isExplicable(value) {
    return EXPLICABLE_TYPES.some(elem => value.toLowerCase() === elem);
}
function isBoolean(...args) {
    return args.some(elem => elem.toLowerCase() === 'boolean');
}

// these are reserved for web because they are directly compiled away
// during template compilation
makeMap('style,class');
// attributes that should be using props for binding
const acceptValue = makeMap('input,textarea,option,select,progress');
const mustUseProp = (tag, type, attr) => {
    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
        (attr === 'selected' && tag === 'option') ||
        (attr === 'checked' && tag === 'input') ||
        (attr === 'muted' && tag === 'video'));
};
const isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
makeMap('events,caret,typing,plaintext-only');
const isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
    'required,reversed,scoped,seamless,selected,sortable,' +
    'truespeed,typemustmatch,visible');

const isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
    'embed,object,param,source,canvas,script,noscript,del,ins,' +
    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
    'output,progress,select,textarea,' +
    'details,dialog,menu,menuitem,summary,' +
    'content,element,shadow,template,blockquote,iframe,tfoot');
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
const isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
const isPreTag = (tag) => tag === 'pre';
const isReservedTag = (tag) => {
    return isHTMLTag(tag) || isSVG(tag);
};
function getTagNamespace(tag) {
    if (isSVG(tag)) {
        return 'svg';
    }
    // basic support for MathML
    // note it doesn't support other MathML elements being component roots
    if (tag === 'math') {
        return 'math';
    }
}
makeMap('text,number,password,search,email,tel,url');

const validDivisionCharRE = /[\w).+\-_$\]]/;
function parseFilters(exp) {
    let inSingle = false;
    let inDouble = false;
    let inTemplateString = false;
    let inRegex = false;
    let curly = 0;
    let square = 0;
    let paren = 0;
    let lastFilterIndex = 0;
    let c, prev, i, expression, filters;
    for (i = 0; i < exp.length; i++) {
        prev = c;
        c = exp.charCodeAt(i);
        if (inSingle) {
            if (c === 0x27 && prev !== 0x5c)
                inSingle = false;
        }
        else if (inDouble) {
            if (c === 0x22 && prev !== 0x5c)
                inDouble = false;
        }
        else if (inTemplateString) {
            if (c === 0x60 && prev !== 0x5c)
                inTemplateString = false;
        }
        else if (inRegex) {
            if (c === 0x2f && prev !== 0x5c)
                inRegex = false;
        }
        else if (c === 0x7c && // pipe
            exp.charCodeAt(i + 1) !== 0x7c &&
            exp.charCodeAt(i - 1) !== 0x7c &&
            !curly &&
            !square &&
            !paren) {
            if (expression === undefined) {
                // first filter, end of expression
                lastFilterIndex = i + 1;
                expression = exp.slice(0, i).trim();
            }
            else {
                pushFilter();
            }
        }
        else {
            switch (c) {
                case 0x22:
                    inDouble = true;
                    break; // "
                case 0x27:
                    inSingle = true;
                    break; // '
                case 0x60:
                    inTemplateString = true;
                    break; // `
                case 0x28:
                    paren++;
                    break; // (
                case 0x29:
                    paren--;
                    break; // )
                case 0x5b:
                    square++;
                    break; // [
                case 0x5d:
                    square--;
                    break; // ]
                case 0x7b:
                    curly++;
                    break; // {
                case 0x7d:
                    curly--;
                    break; // }
            }
            if (c === 0x2f) {
                // /
                let j = i - 1;
                let p;
                // find first non-whitespace prev char
                for (; j >= 0; j--) {
                    p = exp.charAt(j);
                    if (p !== ' ')
                        break;
                }
                if (!p || !validDivisionCharRE.test(p)) {
                    inRegex = true;
                }
            }
        }
    }
    if (expression === undefined) {
        expression = exp.slice(0, i).trim();
    }
    else if (lastFilterIndex !== 0) {
        pushFilter();
    }
    function pushFilter() {
        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
        lastFilterIndex = i + 1;
    }
    if (filters) {
        for (i = 0; i < filters.length; i++) {
            expression = wrapFilter(expression, filters[i]);
        }
    }
    return expression;
}
function wrapFilter(exp, filter) {
    const i = filter.indexOf('(');
    if (i < 0) {
        // _f: resolveFilter
        return `_f("${filter}")(${exp})`;
    }
    else {
        const name = filter.slice(0, i);
        const args = filter.slice(i + 1);
        return `_f("${name}")(${exp}${args !== ')' ? ',' + args : args}`;
    }
}

const defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
const regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
const buildRegex = cached(delimiters => {
    const open = delimiters[0].replace(regexEscapeRE, '\\$&');
    const close = delimiters[1].replace(regexEscapeRE, '\\$&');
    return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
});
function parseText(text, delimiters) {
    //@ts-expect-error
    const tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
    if (!tagRE.test(text)) {
        return;
    }
    const tokens = [];
    const rawTokens = [];
    let lastIndex = (tagRE.lastIndex = 0);
    let match, index, tokenValue;
    while ((match = tagRE.exec(text))) {
        index = match.index;
        // push text token
        if (index > lastIndex) {
            rawTokens.push((tokenValue = text.slice(lastIndex, index)));
            tokens.push(JSON.stringify(tokenValue));
        }
        // tag token
        const exp = parseFilters(match[1].trim());
        tokens.push(`_s(${exp})`);
        rawTokens.push({ '@binding': exp });
        lastIndex = index + match[0].length;
    }
    if (lastIndex < text.length) {
        rawTokens.push((tokenValue = text.slice(lastIndex)));
        tokens.push(JSON.stringify(tokenValue));
    }
    return {
        expression: tokens.join('+'),
        tokens: rawTokens
    };
}

/* eslint-disable no-unused-vars */
function baseWarn(msg, range) {
    console.error(`[Vue compiler]: ${msg}`);
}
/* eslint-enable no-unused-vars */
function pluckModuleFunction(modules, key) {
    return modules ? modules.map(m => m[key]).filter(_ => _) : [];
}
function addProp(el, name, value, range, dynamic) {
    (el.props || (el.props = [])).push(rangeSetItem({ name, value, dynamic }, range));
    el.plain = false;
}
function addAttr(el, name, value, range, dynamic) {
    const attrs = dynamic
        ? el.dynamicAttrs || (el.dynamicAttrs = [])
        : el.attrs || (el.attrs = []);
    attrs.push(rangeSetItem({ name, value, dynamic }, range));
    el.plain = false;
}
// add a raw attr (use this in preTransforms)
function addRawAttr(el, name, value, range) {
    el.attrsMap[name] = value;
    el.attrsList.push(rangeSetItem({ name, value }, range));
}
function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
    (el.directives || (el.directives = [])).push(rangeSetItem({
        name,
        rawName,
        value,
        arg,
        isDynamicArg,
        modifiers
    }, range));
    el.plain = false;
}
function prependModifierMarker(symbol, name, dynamic) {
    return dynamic ? `_p(${name},"${symbol}")` : symbol + name; // mark the event as captured
}
function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
    modifiers = modifiers || emptyObject;
    // warn prevent and passive modifier
    /* istanbul ignore if */
    if (process.env.NODE_ENV !== 'production' && warn && modifiers.prevent && modifiers.passive) {
        warn("passive and prevent can't be used together. " +
            "Passive handler can't prevent default event.", range);
    }
    // normalize click.right and click.middle since they don't actually fire
    // this is technically browser-specific, but at least for now browsers are
    // the only target envs that have right/middle clicks.
    if (modifiers.right) {
        if (dynamic) {
            name = `(${name})==='click'?'contextmenu':(${name})`;
        }
        else if (name === 'click') {
            name = 'contextmenu';
            delete modifiers.right;
        }
    }
    else if (modifiers.middle) {
        if (dynamic) {
            name = `(${name})==='click'?'mouseup':(${name})`;
        }
        else if (name === 'click') {
            name = 'mouseup';
        }
    }
    // check capture modifier
    if (modifiers.capture) {
        delete modifiers.capture;
        name = prependModifierMarker('!', name, dynamic);
    }
    if (modifiers.once) {
        delete modifiers.once;
        name = prependModifierMarker('~', name, dynamic);
    }
    /* istanbul ignore if */
    if (modifiers.passive) {
        delete modifiers.passive;
        name = prependModifierMarker('&', name, dynamic);
    }
    let events;
    if (modifiers.native) {
        delete modifiers.native;
        events = el.nativeEvents || (el.nativeEvents = {});
    }
    else {
        events = el.events || (el.events = {});
    }
    const newHandler = rangeSetItem({ value: value.trim(), dynamic }, range);
    if (modifiers !== emptyObject) {
        newHandler.modifiers = modifiers;
    }
    const handlers = events[name];
    /* istanbul ignore if */
    if (Array.isArray(handlers)) {
        important ? handlers.unshift(newHandler) : handlers.push(newHandler);
    }
    else if (handlers) {
        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
    }
    else {
        events[name] = newHandler;
    }
    el.plain = false;
}
function getRawBindingAttr(el, name) {
    return (el.rawAttrsMap[':' + name] ||
        el.rawAttrsMap['v-bind:' + name] ||
        el.rawAttrsMap[name]);
}
function getBindingAttr(el, name, getStatic) {
    const dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
    if (dynamicValue != null) {
        return parseFilters(dynamicValue);
    }
    else if (getStatic !== false) {
        const staticValue = getAndRemoveAttr(el, name);
        if (staticValue != null) {
            return JSON.stringify(staticValue);
        }
    }
}
// note: this only removes the attr from the Array (attrsList) so that it
// doesn't get processed by processAttrs.
// By default it does NOT remove it from the map (attrsMap) because the map is
// needed during codegen.
function getAndRemoveAttr(el, name, removeFromMap) {
    let val;
    if ((val = el.attrsMap[name]) != null) {
        const list = el.attrsList;
        for (let i = 0, l = list.length; i < l; i++) {
            if (list[i].name === name) {
                list.splice(i, 1);
                break;
            }
        }
    }
    if (removeFromMap) {
        delete el.attrsMap[name];
    }
    return val;
}
function getAndRemoveAttrByRegex(el, name) {
    const list = el.attrsList;
    for (let i = 0, l = list.length; i < l; i++) {
        const attr = list[i];
        if (name.test(attr.name)) {
            list.splice(i, 1);
            return attr;
        }
    }
}
function rangeSetItem(item, range) {
    if (range) {
        if (range.start != null) {
            item.start = range.start;
        }
        if (range.end != null) {
            item.end = range.end;
        }
    }
    return item;
}

function transformNode$1(el, options) {
    const warn = options.warn || baseWarn;
    const staticClass = getAndRemoveAttr(el, 'class');
    if (process.env.NODE_ENV !== 'production' && staticClass) {
        const res = parseText(staticClass, options.delimiters);
        if (res) {
            warn(`class="${staticClass}": ` +
                'Interpolation inside attributes has been removed. ' +
                'Use v-bind or the colon shorthand instead. For example, ' +
                'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
        }
    }
    if (staticClass) {
        el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
    }
    const classBinding = getBindingAttr(el, 'class', false /* getStatic */);
    if (classBinding) {
        el.classBinding = classBinding;
    }
}
function genData$2(el) {
    let data = '';
    if (el.staticClass) {
        data += `staticClass:${el.staticClass},`;
    }
    if (el.classBinding) {
        data += `class:${el.classBinding},`;
    }
    return data;
}
var klass = {
    staticKeys: ['staticClass'],
    transformNode: transformNode$1,
    genData: genData$2
};

const parseStyleText = cached(function (cssText) {
    const res = {};
    const listDelimiter = /;(?![^(]*\))/g;
    const propertyDelimiter = /:(.+)/;
    cssText.split(listDelimiter).forEach(function (item) {
        if (item) {
            const tmp = item.split(propertyDelimiter);
            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return res;
});

function transformNode(el, options) {
    const warn = options.warn || baseWarn;
    const staticStyle = getAndRemoveAttr(el, 'style');
    if (staticStyle) {
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production') {
            const res = parseText(staticStyle, options.delimiters);
            if (res) {
                warn(`style="${staticStyle}": ` +
                    'Interpolation inside attributes has been removed. ' +
                    'Use v-bind or the colon shorthand instead. For example, ' +
                    'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
            }
        }
        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
    }
    const styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
    if (styleBinding) {
        el.styleBinding = styleBinding;
    }
}
function genData$1(el) {
    let data = '';
    if (el.staticStyle) {
        data += `staticStyle:${el.staticStyle},`;
    }
    if (el.styleBinding) {
        data += `style:(${el.styleBinding}),`;
    }
    return data;
}
var style = {
    staticKeys: ['staticStyle'],
    transformNode,
    genData: genData$1
};

var he$1 = {exports: {}};

/*! https://mths.be/he v1.2.0 by @mathias | MIT license */

(function (module, exports) {
(function(root) {

		// Detect free variables `exports`.
		var freeExports = exports;

		// Detect free variable `module`.
		var freeModule = module &&
			module.exports == freeExports && module;

		// Detect free variable `global`, from Node.js or Browserified code,
		// and use it as `root`.
		var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal;
		if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
			root = freeGlobal;
		}

		/*--------------------------------------------------------------------------*/

		// All astral symbols.
		var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
		// All ASCII symbols (not just printable ASCII) except those listed in the
		// first column of the overrides table.
		// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
		var regexAsciiWhitelist = /[\x01-\x7F]/g;
		// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
		// code points listed in the first column of the overrides table on
		// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
		var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;

		var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
		var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'};

		var regexEscape = /["&'<>`]/g;
		var escapeMap = {
			'"': '&quot;',
			'&': '&amp;',
			'\'': '&#x27;',
			'<': '&lt;',
			// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
			// following is not strictly necessary unless itâ€™s part of a tag or an
			// unquoted attribute value. Weâ€™re only escaping it to support those
			// situations, and for XML support.
			'>': '&gt;',
			// In Internet Explorer â‰¤ 8, the backtick character can be used
			// to break out of (un)quoted attribute values or HTML comments.
			// See http://html5sec.org/#102, http://html5sec.org/#108, and
			// http://html5sec.org/#133.
			'`': '&#x60;'
		};

		var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
		var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
		var regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;
		var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'};
		var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'};
		var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
		var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];

		/*--------------------------------------------------------------------------*/

		var stringFromCharCode = String.fromCharCode;

		var object = {};
		var hasOwnProperty = object.hasOwnProperty;
		var has = function(object, propertyName) {
			return hasOwnProperty.call(object, propertyName);
		};

		var contains = function(array, value) {
			var index = -1;
			var length = array.length;
			while (++index < length) {
				if (array[index] == value) {
					return true;
				}
			}
			return false;
		};

		var merge = function(options, defaults) {
			if (!options) {
				return defaults;
			}
			var result = {};
			var key;
			for (key in defaults) {
				// A `hasOwnProperty` check is not needed here, since only recognized
				// option names are used anyway. Any others are ignored.
				result[key] = has(options, key) ? options[key] : defaults[key];
			}
			return result;
		};

		// Modified version of `ucs2encode`; see https://mths.be/punycode.
		var codePointToSymbol = function(codePoint, strict) {
			var output = '';
			if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
				// See issue #4:
				// â€œOtherwise, if the number is in the range 0xD800 to 0xDFFF or is
				// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
				// REPLACEMENT CHARACTER.â€
				if (strict) {
					parseError('character reference outside the permissible Unicode range');
				}
				return '\uFFFD';
			}
			if (has(decodeMapNumeric, codePoint)) {
				if (strict) {
					parseError('disallowed character reference');
				}
				return decodeMapNumeric[codePoint];
			}
			if (strict && contains(invalidReferenceCodePoints, codePoint)) {
				parseError('disallowed character reference');
			}
			if (codePoint > 0xFFFF) {
				codePoint -= 0x10000;
				output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
				codePoint = 0xDC00 | codePoint & 0x3FF;
			}
			output += stringFromCharCode(codePoint);
			return output;
		};

		var hexEscape = function(codePoint) {
			return '&#x' + codePoint.toString(16).toUpperCase() + ';';
		};

		var decEscape = function(codePoint) {
			return '&#' + codePoint + ';';
		};

		var parseError = function(message) {
			throw Error('Parse error: ' + message);
		};

		/*--------------------------------------------------------------------------*/

		var encode = function(string, options) {
			options = merge(options, encode.options);
			var strict = options.strict;
			if (strict && regexInvalidRawCodePoint.test(string)) {
				parseError('forbidden code point');
			}
			var encodeEverything = options.encodeEverything;
			var useNamedReferences = options.useNamedReferences;
			var allowUnsafeSymbols = options.allowUnsafeSymbols;
			var escapeCodePoint = options.decimal ? decEscape : hexEscape;

			var escapeBmpSymbol = function(symbol) {
				return escapeCodePoint(symbol.charCodeAt(0));
			};

			if (encodeEverything) {
				// Encode ASCII symbols.
				string = string.replace(regexAsciiWhitelist, function(symbol) {
					// Use named references if requested & possible.
					if (useNamedReferences && has(encodeMap, symbol)) {
						return '&' + encodeMap[symbol] + ';';
					}
					return escapeBmpSymbol(symbol);
				});
				// Shorten a few escapes that represent two symbols, of which at least one
				// is within the ASCII range.
				if (useNamedReferences) {
					string = string
						.replace(/&gt;\u20D2/g, '&nvgt;')
						.replace(/&lt;\u20D2/g, '&nvlt;')
						.replace(/&#x66;&#x6A;/g, '&fjlig;');
				}
				// Encode non-ASCII symbols.
				if (useNamedReferences) {
					// Encode non-ASCII symbols that can be replaced with a named reference.
					string = string.replace(regexEncodeNonAscii, function(string) {
						// Note: there is no need to check `has(encodeMap, string)` here.
						return '&' + encodeMap[string] + ';';
					});
				}
				// Note: any remaining non-ASCII symbols are handled outside of the `if`.
			} else if (useNamedReferences) {
				// Apply named character references.
				// Encode `<>"'&` using named character references.
				if (!allowUnsafeSymbols) {
					string = string.replace(regexEscape, function(string) {
						return '&' + encodeMap[string] + ';'; // no need to check `has()` here
					});
				}
				// Shorten escapes that represent two symbols, of which at least one is
				// `<>"'&`.
				string = string
					.replace(/&gt;\u20D2/g, '&nvgt;')
					.replace(/&lt;\u20D2/g, '&nvlt;');
				// Encode non-ASCII symbols that can be replaced with a named reference.
				string = string.replace(regexEncodeNonAscii, function(string) {
					// Note: there is no need to check `has(encodeMap, string)` here.
					return '&' + encodeMap[string] + ';';
				});
			} else if (!allowUnsafeSymbols) {
				// Encode `<>"'&` using hexadecimal escapes, now that theyâ€™re not handled
				// using named character references.
				string = string.replace(regexEscape, escapeBmpSymbol);
			}
			return string
				// Encode astral symbols.
				.replace(regexAstralSymbols, function($0) {
					// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
					var high = $0.charCodeAt(0);
					var low = $0.charCodeAt(1);
					var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
					return escapeCodePoint(codePoint);
				})
				// Encode any remaining BMP symbols that are not printable ASCII symbols
				// using a hexadecimal escape.
				.replace(regexBmpWhitelist, escapeBmpSymbol);
		};
		// Expose default options (so they can be overridden globally).
		encode.options = {
			'allowUnsafeSymbols': false,
			'encodeEverything': false,
			'strict': false,
			'useNamedReferences': false,
			'decimal' : false
		};

		var decode = function(html, options) {
			options = merge(options, decode.options);
			var strict = options.strict;
			if (strict && regexInvalidEntity.test(html)) {
				parseError('malformed character reference');
			}
			return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {
				var codePoint;
				var semicolon;
				var decDigits;
				var hexDigits;
				var reference;
				var next;

				if ($1) {
					reference = $1;
					// Note: there is no need to check `has(decodeMap, reference)`.
					return decodeMap[reference];
				}

				if ($2) {
					// Decode named character references without trailing `;`, e.g. `&amp`.
					// This is only a parse error if it gets converted to `&`, or if it is
					// followed by `=` in an attribute context.
					reference = $2;
					next = $3;
					if (next && options.isAttributeValue) {
						if (strict && next == '=') {
							parseError('`&` did not start a character reference');
						}
						return $0;
					} else {
						if (strict) {
							parseError(
								'named character reference was not terminated by a semicolon'
							);
						}
						// Note: there is no need to check `has(decodeMapLegacy, reference)`.
						return decodeMapLegacy[reference] + (next || '');
					}
				}

				if ($4) {
					// Decode decimal escapes, e.g. `&#119558;`.
					decDigits = $4;
					semicolon = $5;
					if (strict && !semicolon) {
						parseError('character reference was not terminated by a semicolon');
					}
					codePoint = parseInt(decDigits, 10);
					return codePointToSymbol(codePoint, strict);
				}

				if ($6) {
					// Decode hexadecimal escapes, e.g. `&#x1D306;`.
					hexDigits = $6;
					semicolon = $7;
					if (strict && !semicolon) {
						parseError('character reference was not terminated by a semicolon');
					}
					codePoint = parseInt(hexDigits, 16);
					return codePointToSymbol(codePoint, strict);
				}

				// If weâ€™re still here, `if ($7)` is implied; itâ€™s an ambiguous
				// ampersand for sure. https://mths.be/notes/ambiguous-ampersands
				if (strict) {
					parseError(
						'named character reference was not terminated by a semicolon'
					);
				}
				return $0;
			});
		};
		// Expose default options (so they can be overridden globally).
		decode.options = {
			'isAttributeValue': false,
			'strict': false
		};

		var escape = function(string) {
			return string.replace(regexEscape, function($0) {
				// Note: there is no need to check `has(escapeMap, $0)` here.
				return escapeMap[$0];
			});
		};

		/*--------------------------------------------------------------------------*/

		var he = {
			'version': '1.2.0',
			'encode': encode,
			'decode': decode,
			'escape': escape,
			'unescape': decode
		};

		// Some AMD build optimizers, like r.js, check for specific condition patterns
		// like the following:
		if (freeExports && !freeExports.nodeType) {
			if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
				freeModule.exports = he;
			} else { // in Narwhal or RingoJS v0.7.0-
				for (var key in he) {
					has(he, key) && (freeExports[key] = he[key]);
				}
			}
		} else { // in Rhino or a web browser
			root.he = he;
		}

	}(commonjsGlobal));
} (he$1, he$1.exports));

var he = he$1.exports;

/**
 * Cross-platform code generation for component v-model
 */
function genComponentModel(el, value, modifiers) {
    const { number, trim } = modifiers || {};
    const baseValueExpression = '$$v';
    let valueExpression = baseValueExpression;
    if (trim) {
        valueExpression =
            `(typeof ${baseValueExpression} === 'string'` +
                `? ${baseValueExpression}.trim()` +
                `: ${baseValueExpression})`;
    }
    if (number) {
        valueExpression = `_n(${valueExpression})`;
    }
    const assignment = genAssignmentCode(value, valueExpression);
    el.model = {
        value: `(${value})`,
        expression: JSON.stringify(value),
        callback: `function (${baseValueExpression}) {${assignment}}`
    };
}
/**
 * Cross-platform codegen helper for generating v-model value assignment code.
 */
function genAssignmentCode(value, assignment) {
    const res = parseModel(value);
    if (res.key === null) {
        return `${value}=${assignment}`;
    }
    else {
        return `$set(${res.exp}, ${res.key}, ${assignment})`;
    }
}
/**
 * Parse a v-model expression into a base path and a final key segment.
 * Handles both dot-path and possible square brackets.
 *
 * Possible cases:
 *
 * - test
 * - test[key]
 * - test[test1[key]]
 * - test["a"][key]
 * - xxx.test[a[a].test1[key]]
 * - test.xxx.a["asa"][test1[key]]
 *
 */
let len, str$1, chr, index, expressionPos, expressionEndPos;
function parseModel(val) {
    // Fix https://github.com/vuejs/vue/pull/7730
    // allow v-model="obj.val " (trailing whitespace)
    val = val.trim();
    len = val.length;
    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
        index = val.lastIndexOf('.');
        if (index > -1) {
            return {
                exp: val.slice(0, index),
                key: '"' + val.slice(index + 1) + '"'
            };
        }
        else {
            return {
                exp: val,
                key: null
            };
        }
    }
    str$1 = val;
    index = expressionPos = expressionEndPos = 0;
    while (!eof()) {
        chr = next();
        /* istanbul ignore if */
        if (isStringStart(chr)) {
            parseString(chr);
        }
        else if (chr === 0x5b) {
            parseBracket(chr);
        }
    }
    return {
        exp: val.slice(0, expressionPos),
        key: val.slice(expressionPos + 1, expressionEndPos)
    };
}
function next() {
    return str$1.charCodeAt(++index);
}
function eof() {
    return index >= len;
}
function isStringStart(chr) {
    return chr === 0x22 || chr === 0x27;
}
function parseBracket(chr) {
    let inBracket = 1;
    expressionPos = index;
    while (!eof()) {
        chr = next();
        if (isStringStart(chr)) {
            parseString(chr);
            continue;
        }
        if (chr === 0x5b)
            inBracket++;
        if (chr === 0x5d)
            inBracket--;
        if (inBracket === 0) {
            expressionEndPos = index;
            break;
        }
    }
}
function parseString(chr) {
    const stringQuote = chr;
    while (!eof()) {
        chr = next();
        if (chr === stringQuote) {
            break;
        }
    }
}

const onRE = /^@|^v-on:/;
const dirRE = /^v-|^@|^:|^#/;
const forAliasRE$1 = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
const forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
const stripParensRE = /^\(|\)$/g;
const dynamicArgRE = /^\[.*\]$/;
const argRE = /:(.*)$/;
const bindRE = /^:|^\.|^v-bind:/;
const modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
const slotRE = /^v-slot(:|$)|^#/;
const lineBreakRE = /[\r\n]/;
const whitespaceRE = /[ \f\t\r\n]+/g;
const invalidAttributeRE = /[\s"'<>\/=]/;
const decodeHTMLCached = cached(he.decode);
const emptySlotScopeToken = `_empty_`;
// configurable state
let warn$2;
let delimiters;
let transforms;
let preTransforms;
let postTransforms;
let platformIsPreTag;
let platformMustUseProp;
let platformGetTagNamespace;
let maybeComponent;
function createASTElement(tag, attrs, parent) {
    return {
        type: 1,
        tag,
        attrsList: attrs,
        attrsMap: makeAttrsMap(attrs),
        rawAttrsMap: {},
        parent,
        children: []
    };
}
/**
 * Convert HTML string to AST.
 */
function parse$1(template, options) {
    warn$2 = options.warn || baseWarn;
    platformIsPreTag = options.isPreTag || no;
    platformMustUseProp = options.mustUseProp || no;
    platformGetTagNamespace = options.getTagNamespace || no;
    const isReservedTag = options.isReservedTag || no;
    maybeComponent = (el) => !!(el.component ||
        el.attrsMap[':is'] ||
        el.attrsMap['v-bind:is'] ||
        !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
    transforms = pluckModuleFunction(options.modules, 'transformNode');
    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
    delimiters = options.delimiters;
    const stack = [];
    const preserveWhitespace = options.preserveWhitespace !== false;
    const whitespaceOption = options.whitespace;
    let root;
    let currentParent;
    let inVPre = false;
    let inPre = false;
    let warned = false;
    function warnOnce(msg, range) {
        if (!warned) {
            warned = true;
            warn$2(msg, range);
        }
    }
    function closeElement(element) {
        trimEndingWhitespace(element);
        if (!inVPre && !element.processed) {
            element = processElement(element, options);
        }
        // tree management
        if (!stack.length && element !== root) {
            // allow root elements with v-if, v-else-if and v-else
            if (root.if && (element.elseif || element.else)) {
                if (process.env.NODE_ENV !== 'production') {
                    checkRootConstraints(element);
                }
                addIfCondition(root, {
                    exp: element.elseif,
                    block: element
                });
            }
            else if (process.env.NODE_ENV !== 'production') {
                warnOnce(`Component template should contain exactly one root element. ` +
                    `If you are using v-if on multiple elements, ` +
                    `use v-else-if to chain them instead.`, { start: element.start });
            }
        }
        if (currentParent && !element.forbidden) {
            if (element.elseif || element.else) {
                processIfConditions(element, currentParent);
            }
            else {
                if (element.slotScope) {
                    // scoped slot
                    // keep it in the children list so that v-else(-if) conditions can
                    // find it as the prev node.
                    const name = element.slotTarget || '"default"';
                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;
                }
                currentParent.children.push(element);
                element.parent = currentParent;
            }
        }
        // final children cleanup
        // filter out scoped slots
        element.children = element.children.filter(c => !c.slotScope);
        // remove trailing whitespace node again
        trimEndingWhitespace(element);
        // check pre state
        if (element.pre) {
            inVPre = false;
        }
        if (platformIsPreTag(element.tag)) {
            inPre = false;
        }
        // apply post-transforms
        for (let i = 0; i < postTransforms.length; i++) {
            postTransforms[i](element, options);
        }
    }
    function trimEndingWhitespace(el) {
        // remove trailing whitespace node
        if (!inPre) {
            let lastNode;
            while ((lastNode = el.children[el.children.length - 1]) &&
                lastNode.type === 3 &&
                lastNode.text === ' ') {
                el.children.pop();
            }
        }
    }
    function checkRootConstraints(el) {
        if (el.tag === 'slot' || el.tag === 'template') {
            warnOnce(`Cannot use <${el.tag}> as component root element because it may ` +
                'contain multiple nodes.', { start: el.start });
        }
        if (el.attrsMap.hasOwnProperty('v-for')) {
            warnOnce('Cannot use v-for on stateful component root element because ' +
                'it renders multiple elements.', el.rawAttrsMap['v-for']);
        }
    }
    parseHTML(template, {
        warn: warn$2,
        expectHTML: options.expectHTML,
        isUnaryTag: options.isUnaryTag,
        canBeLeftOpenTag: options.canBeLeftOpenTag,
        shouldDecodeNewlines: options.shouldDecodeNewlines,
        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
        shouldKeepComment: options.comments,
        outputSourceRange: options.outputSourceRange,
        start(tag, attrs, unary, start, end) {
            // check namespace.
            // inherit parent ns if there is one
            const ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
            // handle IE svg bug
            /* istanbul ignore if */
            if (isIE && ns === 'svg') {
                attrs = guardIESVGBug(attrs);
            }
            let element = createASTElement(tag, attrs, currentParent);
            if (ns) {
                element.ns = ns;
            }
            if (process.env.NODE_ENV !== 'production') {
                if (options.outputSourceRange) {
                    element.start = start;
                    element.end = end;
                    element.rawAttrsMap = element.attrsList.reduce((cumulated, attr) => {
                        cumulated[attr.name] = attr;
                        return cumulated;
                    }, {});
                }
                attrs.forEach(attr => {
                    if (invalidAttributeRE.test(attr.name)) {
                        warn$2(`Invalid dynamic argument expression: attribute names cannot contain ` +
                            `spaces, quotes, <, >, / or =.`, options.outputSourceRange
                            ? {
                                start: attr.start + attr.name.indexOf(`[`),
                                end: attr.start + attr.name.length
                            }
                            : undefined);
                    }
                });
            }
            if (isForbiddenTag(element) && !isServerRendering()) {
                element.forbidden = true;
                process.env.NODE_ENV !== 'production' &&
                    warn$2('Templates should only be responsible for mapping the state to the ' +
                        'UI. Avoid placing tags with side-effects in your templates, such as ' +
                        `<${tag}>` +
                        ', as they will not be parsed.', { start: element.start });
            }
            // apply pre-transforms
            for (let i = 0; i < preTransforms.length; i++) {
                element = preTransforms[i](element, options) || element;
            }
            if (!inVPre) {
                processPre(element);
                if (element.pre) {
                    inVPre = true;
                }
            }
            if (platformIsPreTag(element.tag)) {
                inPre = true;
            }
            if (inVPre) {
                processRawAttrs(element);
            }
            else if (!element.processed) {
                // structural directives
                processFor(element);
                processIf(element);
                processOnce(element);
            }
            if (!root) {
                root = element;
                if (process.env.NODE_ENV !== 'production') {
                    checkRootConstraints(root);
                }
            }
            if (!unary) {
                currentParent = element;
                stack.push(element);
            }
            else {
                closeElement(element);
            }
        },
        end(tag, start, end) {
            const element = stack[stack.length - 1];
            // pop stack
            stack.length -= 1;
            currentParent = stack[stack.length - 1];
            if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                element.end = end;
            }
            closeElement(element);
        },
        chars(text, start, end) {
            if (!currentParent) {
                if (process.env.NODE_ENV !== 'production') {
                    if (text === template) {
                        warnOnce('Component template requires a root element, rather than just text.', { start });
                    }
                    else if ((text = text.trim())) {
                        warnOnce(`text "${text}" outside root element will be ignored.`, {
                            start
                        });
                    }
                }
                return;
            }
            // IE textarea placeholder bug
            /* istanbul ignore if */
            if (isIE &&
                currentParent.tag === 'textarea' &&
                currentParent.attrsMap.placeholder === text) {
                return;
            }
            const children = currentParent.children;
            if (inPre || text.trim()) {
                text = isTextTag(currentParent)
                    ? text
                    : decodeHTMLCached(text);
            }
            else if (!children.length) {
                // remove the whitespace-only node right after an opening tag
                text = '';
            }
            else if (whitespaceOption) {
                if (whitespaceOption === 'condense') {
                    // in condense mode, remove the whitespace node if it contains
                    // line break, otherwise condense to a single space
                    text = lineBreakRE.test(text) ? '' : ' ';
                }
                else {
                    text = ' ';
                }
            }
            else {
                text = preserveWhitespace ? ' ' : '';
            }
            if (text) {
                if (!inPre && whitespaceOption === 'condense') {
                    // condense consecutive whitespaces into single space
                    text = text.replace(whitespaceRE, ' ');
                }
                let res;
                let child;
                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
                    child = {
                        type: 2,
                        expression: res.expression,
                        tokens: res.tokens,
                        text
                    };
                }
                else if (text !== ' ' ||
                    !children.length ||
                    children[children.length - 1].text !== ' ') {
                    child = {
                        type: 3,
                        text
                    };
                }
                if (child) {
                    if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                        child.start = start;
                        child.end = end;
                    }
                    children.push(child);
                }
            }
        },
        comment(text, start, end) {
            // adding anything as a sibling to the root node is forbidden
            // comments should still be allowed, but ignored
            if (currentParent) {
                const child = {
                    type: 3,
                    text,
                    isComment: true
                };
                if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                    child.start = start;
                    child.end = end;
                }
                currentParent.children.push(child);
            }
        }
    });
    return root;
}
function processPre(el) {
    if (getAndRemoveAttr(el, 'v-pre') != null) {
        el.pre = true;
    }
}
function processRawAttrs(el) {
    const list = el.attrsList;
    const len = list.length;
    if (len) {
        const attrs = (el.attrs = new Array(len));
        for (let i = 0; i < len; i++) {
            attrs[i] = {
                name: list[i].name,
                value: JSON.stringify(list[i].value)
            };
            if (list[i].start != null) {
                attrs[i].start = list[i].start;
                attrs[i].end = list[i].end;
            }
        }
    }
    else if (!el.pre) {
        // non root node in pre blocks with no attributes
        el.plain = true;
    }
}
function processElement(element, options) {
    processKey(element);
    // determine whether this is a plain element after
    // removing structural attributes
    element.plain =
        !element.key && !element.scopedSlots && !element.attrsList.length;
    processRef(element);
    processSlotContent(element);
    processSlotOutlet(element);
    processComponent(element);
    for (let i = 0; i < transforms.length; i++) {
        element = transforms[i](element, options) || element;
    }
    processAttrs(element);
    return element;
}
function processKey(el) {
    const exp = getBindingAttr(el, 'key');
    if (exp) {
        if (process.env.NODE_ENV !== 'production') {
            if (el.tag === 'template') {
                warn$2(`<template> cannot be keyed. Place the key on real elements instead.`, getRawBindingAttr(el, 'key'));
            }
            if (el.for) {
                const iterator = el.iterator2 || el.iterator1;
                const parent = el.parent;
                if (iterator &&
                    iterator === exp &&
                    parent &&
                    parent.tag === 'transition-group') {
                    warn$2(`Do not use v-for index as key on <transition-group> children, ` +
                        `this is the same as not using keys.`, getRawBindingAttr(el, 'key'), true /* tip */);
                }
            }
        }
        el.key = exp;
    }
}
function processRef(el) {
    const ref = getBindingAttr(el, 'ref');
    if (ref) {
        el.ref = ref;
        el.refInFor = checkInFor(el);
    }
}
function processFor(el) {
    let exp;
    if ((exp = getAndRemoveAttr(el, 'v-for'))) {
        const res = parseFor(exp);
        if (res) {
            extend(el, res);
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn$2(`Invalid v-for expression: ${exp}`, el.rawAttrsMap['v-for']);
        }
    }
}
function parseFor(exp) {
    const inMatch = exp.match(forAliasRE$1);
    if (!inMatch)
        return;
    const res = {};
    res.for = inMatch[2].trim();
    const alias = inMatch[1].trim().replace(stripParensRE, '');
    const iteratorMatch = alias.match(forIteratorRE);
    if (iteratorMatch) {
        res.alias = alias.replace(forIteratorRE, '').trim();
        res.iterator1 = iteratorMatch[1].trim();
        if (iteratorMatch[2]) {
            res.iterator2 = iteratorMatch[2].trim();
        }
    }
    else {
        res.alias = alias;
    }
    return res;
}
function processIf(el) {
    const exp = getAndRemoveAttr(el, 'v-if');
    if (exp) {
        el.if = exp;
        addIfCondition(el, {
            exp: exp,
            block: el
        });
    }
    else {
        if (getAndRemoveAttr(el, 'v-else') != null) {
            el.else = true;
        }
        const elseif = getAndRemoveAttr(el, 'v-else-if');
        if (elseif) {
            el.elseif = elseif;
        }
    }
}
function processIfConditions(el, parent) {
    const prev = findPrevElement(parent.children);
    if (prev && prev.if) {
        addIfCondition(prev, {
            exp: el.elseif,
            block: el
        });
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$2(`v-${el.elseif ? 'else-if="' + el.elseif + '"' : 'else'} ` +
            `used on element <${el.tag}> without corresponding v-if.`, el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
    }
}
function findPrevElement(children) {
    let i = children.length;
    while (i--) {
        if (children[i].type === 1) {
            return children[i];
        }
        else {
            if (process.env.NODE_ENV !== 'production' && children[i].text !== ' ') {
                warn$2(`text "${children[i].text.trim()}" between v-if and v-else(-if) ` +
                    `will be ignored.`, children[i]);
            }
            children.pop();
        }
    }
}
function addIfCondition(el, condition) {
    if (!el.ifConditions) {
        el.ifConditions = [];
    }
    el.ifConditions.push(condition);
}
function processOnce(el) {
    const once = getAndRemoveAttr(el, 'v-once');
    if (once != null) {
        el.once = true;
    }
}
// handle content being passed to a component as slot,
// e.g. <template slot="xxx">, <div slot-scope="xxx">
function processSlotContent(el) {
    let slotScope;
    if (el.tag === 'template') {
        slotScope = getAndRemoveAttr(el, 'scope');
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && slotScope) {
            warn$2(`the "scope" attribute for scoped slots have been deprecated and ` +
                `replaced by "slot-scope" since 2.5. The new "slot-scope" attribute ` +
                `can also be used on plain elements in addition to <template> to ` +
                `denote scoped slots.`, el.rawAttrsMap['scope'], true);
        }
        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
    }
    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && el.attrsMap['v-for']) {
            warn$2(`Ambiguous combined usage of slot-scope and v-for on <${el.tag}> ` +
                `(v-for takes higher priority). Use a wrapper <template> for the ` +
                `scoped slot to make it clearer.`, el.rawAttrsMap['slot-scope'], true);
        }
        el.slotScope = slotScope;
    }
    // slot="xxx"
    const slotTarget = getBindingAttr(el, 'slot');
    if (slotTarget) {
        el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
        // preserve slot as an attribute for native shadow DOM compat
        // only for non-scoped slots.
        if (el.tag !== 'template' && !el.slotScope) {
            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
        }
    }
    // 2.6 v-slot syntax
    {
        if (el.tag === 'template') {
            // v-slot on <template>
            const slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                if (process.env.NODE_ENV !== 'production') {
                    if (el.slotTarget || el.slotScope) {
                        warn$2(`Unexpected mixed usage of different slot syntaxes.`, el);
                    }
                    if (el.parent && !maybeComponent(el.parent)) {
                        warn$2(`<template v-slot> can only appear at the root level inside ` +
                            `the receiving component`, el);
                    }
                }
                const { name, dynamic } = getSlotName(slotBinding);
                el.slotTarget = name;
                el.slotTargetDynamic = dynamic;
                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
            }
        }
        else {
            // v-slot on component, denotes default slot
            const slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                if (process.env.NODE_ENV !== 'production') {
                    if (!maybeComponent(el)) {
                        warn$2(`v-slot can only be used on components or <template>.`, slotBinding);
                    }
                    if (el.slotScope || el.slotTarget) {
                        warn$2(`Unexpected mixed usage of different slot syntaxes.`, el);
                    }
                    if (el.scopedSlots) {
                        warn$2(`To avoid scope ambiguity, the default slot should also use ` +
                            `<template> syntax when there are other named slots.`, slotBinding);
                    }
                }
                // add the component's children to its default slot
                const slots = el.scopedSlots || (el.scopedSlots = {});
                const { name, dynamic } = getSlotName(slotBinding);
                const slotContainer = (slots[name] = createASTElement('template', [], el));
                slotContainer.slotTarget = name;
                slotContainer.slotTargetDynamic = dynamic;
                slotContainer.children = el.children.filter((c) => {
                    if (!c.slotScope) {
                        c.parent = slotContainer;
                        return true;
                    }
                });
                slotContainer.slotScope = slotBinding.value || emptySlotScopeToken;
                // remove children as they are returned from scopedSlots now
                el.children = [];
                // mark el non-plain so data gets generated
                el.plain = false;
            }
        }
    }
}
function getSlotName(binding) {
    let name = binding.name.replace(slotRE, '');
    if (!name) {
        if (binding.name[0] !== '#') {
            name = 'default';
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn$2(`v-slot shorthand syntax requires a slot name.`, binding);
        }
    }
    return dynamicArgRE.test(name)
        ? // dynamic [name]
            { name: name.slice(1, -1), dynamic: true }
        : // static name
            { name: `"${name}"`, dynamic: false };
}
// handle <slot/> outlets
function processSlotOutlet(el) {
    if (el.tag === 'slot') {
        el.slotName = getBindingAttr(el, 'name');
        if (process.env.NODE_ENV !== 'production' && el.key) {
            warn$2(`\`key\` does not work on <slot> because slots are abstract outlets ` +
                `and can possibly expand into multiple elements. ` +
                `Use the key on a wrapping element instead.`, getRawBindingAttr(el, 'key'));
        }
    }
}
function processComponent(el) {
    let binding;
    if ((binding = getBindingAttr(el, 'is'))) {
        el.component = binding;
    }
    if (getAndRemoveAttr(el, 'inline-template') != null) {
        el.inlineTemplate = true;
    }
}
function processAttrs(el) {
    const list = el.attrsList;
    let i, l, name, rawName, value, modifiers, syncGen, isDynamic;
    for (i = 0, l = list.length; i < l; i++) {
        name = rawName = list[i].name;
        value = list[i].value;
        if (dirRE.test(name)) {
            // mark element as dynamic
            el.hasBindings = true;
            // modifiers
            modifiers = parseModifiers(name.replace(dirRE, ''));
            // support .foo shorthand syntax for the .prop modifier
            if (modifiers) {
                name = name.replace(modifierRE, '');
            }
            if (bindRE.test(name)) {
                // v-bind
                name = name.replace(bindRE, '');
                value = parseFilters(value);
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                if (process.env.NODE_ENV !== 'production' && value.trim().length === 0) {
                    warn$2(`The value for a v-bind expression cannot be empty. Found in "v-bind:${name}"`);
                }
                if (modifiers) {
                    if (modifiers.prop && !isDynamic) {
                        name = camelize(name);
                        if (name === 'innerHtml')
                            name = 'innerHTML';
                    }
                    if (modifiers.camel && !isDynamic) {
                        name = camelize(name);
                    }
                    if (modifiers.sync) {
                        syncGen = genAssignmentCode(value, `$event`);
                        if (!isDynamic) {
                            addHandler(el, `update:${camelize(name)}`, syncGen, null, false, warn$2, list[i]);
                            if (hyphenate(name) !== camelize(name)) {
                                addHandler(el, `update:${hyphenate(name)}`, syncGen, null, false, warn$2, list[i]);
                            }
                        }
                        else {
                            // handler w/ dynamic event name
                            addHandler(el, `"update:"+(${name})`, syncGen, null, false, warn$2, list[i], true // dynamic
                            );
                        }
                    }
                }
                if ((modifiers && modifiers.prop) ||
                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
                    addProp(el, name, value, list[i], isDynamic);
                }
                else {
                    addAttr(el, name, value, list[i], isDynamic);
                }
            }
            else if (onRE.test(name)) {
                // v-on
                name = name.replace(onRE, '');
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);
            }
            else {
                // normal directives
                name = name.replace(dirRE, '');
                // parse arg
                const argMatch = name.match(argRE);
                let arg = argMatch && argMatch[1];
                isDynamic = false;
                if (arg) {
                    name = name.slice(0, -(arg.length + 1));
                    if (dynamicArgRE.test(arg)) {
                        arg = arg.slice(1, -1);
                        isDynamic = true;
                    }
                }
                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
                if (process.env.NODE_ENV !== 'production' && name === 'model') {
                    checkForAliasModel(el, value);
                }
            }
        }
        else {
            // literal attribute
            if (process.env.NODE_ENV !== 'production') {
                const res = parseText(value, delimiters);
                if (res) {
                    warn$2(`${name}="${value}": ` +
                        'Interpolation inside attributes has been removed. ' +
                        'Use v-bind or the colon shorthand instead. For example, ' +
                        'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
                }
            }
            addAttr(el, name, JSON.stringify(value), list[i]);
            // #6887 firefox doesn't update muted state if set via attribute
            // even immediately after element creation
            if (!el.component &&
                name === 'muted' &&
                platformMustUseProp(el.tag, el.attrsMap.type, name)) {
                addProp(el, name, 'true', list[i]);
            }
        }
    }
}
function checkInFor(el) {
    let parent = el;
    while (parent) {
        if (parent.for !== undefined) {
            return true;
        }
        parent = parent.parent;
    }
    return false;
}
function parseModifiers(name) {
    const match = name.match(modifierRE);
    if (match) {
        const ret = {};
        match.forEach(m => {
            ret[m.slice(1)] = true;
        });
        return ret;
    }
}
function makeAttrsMap(attrs) {
    const map = {};
    for (let i = 0, l = attrs.length; i < l; i++) {
        if (process.env.NODE_ENV !== 'production' && map[attrs[i].name] && !isIE && !isEdge) {
            warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);
        }
        map[attrs[i].name] = attrs[i].value;
    }
    return map;
}
// for script (e.g. type="x/template") or style, do not decode content
function isTextTag(el) {
    return el.tag === 'script' || el.tag === 'style';
}
function isForbiddenTag(el) {
    return (el.tag === 'style' ||
        (el.tag === 'script' &&
            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
}
const ieNSBug = /^xmlns:NS\d+/;
const ieNSPrefix = /^NS\d+:/;
/* istanbul ignore next */
function guardIESVGBug(attrs) {
    const res = [];
    for (let i = 0; i < attrs.length; i++) {
        const attr = attrs[i];
        if (!ieNSBug.test(attr.name)) {
            attr.name = attr.name.replace(ieNSPrefix, '');
            res.push(attr);
        }
    }
    return res;
}
function checkForAliasModel(el, value) {
    let _el = el;
    while (_el) {
        if (_el.for && _el.alias === value) {
            warn$2(`<${el.tag} v-model="${value}">: ` +
                `You are binding v-model directly to a v-for iteration alias. ` +
                `This will not be able to modify the v-for source array because ` +
                `writing to the alias is like modifying a function local variable. ` +
                `Consider using an array of objects and use v-model on an object property instead.`, el.rawAttrsMap['v-model']);
        }
        _el = _el.parent;
    }
}

/**
 * Expand input[v-model] with dynamic type bindings into v-if-else chains
 * Turn this:
 *   <input v-model="data[type]" :type="type">
 * into this:
 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
 *   <input v-else :type="type" v-model="data[type]">
 */
function preTransformNode(el, options) {
    if (el.tag === 'input') {
        const map = el.attrsMap;
        if (!map['v-model']) {
            return;
        }
        let typeBinding;
        if (map[':type'] || map['v-bind:type']) {
            typeBinding = getBindingAttr(el, 'type');
        }
        if (!map.type && !typeBinding && map['v-bind']) {
            typeBinding = `(${map['v-bind']}).type`;
        }
        if (typeBinding) {
            const ifCondition = getAndRemoveAttr(el, 'v-if', true);
            const ifConditionExtra = ifCondition ? `&&(${ifCondition})` : ``;
            const hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
            const elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
            // 1. checkbox
            const branch0 = cloneASTElement(el);
            // process for on the main node
            processFor(branch0);
            addRawAttr(branch0, 'type', 'checkbox');
            processElement(branch0, options);
            branch0.processed = true; // prevent it from double-processed
            branch0.if = `(${typeBinding})==='checkbox'` + ifConditionExtra;
            addIfCondition(branch0, {
                exp: branch0.if,
                block: branch0
            });
            // 2. add radio else-if condition
            const branch1 = cloneASTElement(el);
            getAndRemoveAttr(branch1, 'v-for', true);
            addRawAttr(branch1, 'type', 'radio');
            processElement(branch1, options);
            addIfCondition(branch0, {
                exp: `(${typeBinding})==='radio'` + ifConditionExtra,
                block: branch1
            });
            // 3. other
            const branch2 = cloneASTElement(el);
            getAndRemoveAttr(branch2, 'v-for', true);
            addRawAttr(branch2, ':type', typeBinding);
            processElement(branch2, options);
            addIfCondition(branch0, {
                exp: ifCondition,
                block: branch2
            });
            if (hasElse) {
                branch0.else = true;
            }
            else if (elseIfCondition) {
                branch0.elseif = elseIfCondition;
            }
            return branch0;
        }
    }
}
function cloneASTElement(el) {
    return createASTElement(el.tag, el.attrsList.slice(), el.parent);
}
var model$1 = {
    preTransformNode
};

var modules = [klass, style, model$1];

let warn$1;
// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
const RANGE_TOKEN = '__r';
function model(el, dir, _warn) {
    warn$1 = _warn;
    const value = dir.value;
    const modifiers = dir.modifiers;
    const tag = el.tag;
    const type = el.attrsMap.type;
    if (process.env.NODE_ENV !== 'production') {
        // inputs with type="file" are read only and setting the input's
        // value will throw an error.
        if (tag === 'input' && type === 'file') {
            warn$1(`<${el.tag} v-model="${value}" type="file">:\n` +
                `File inputs are read only. Use a v-on:change listener instead.`, el.rawAttrsMap['v-model']);
        }
    }
    if (el.component) {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    else if (tag === 'select') {
        genSelect(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'checkbox') {
        genCheckboxModel(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'radio') {
        genRadioModel(el, value, modifiers);
    }
    else if (tag === 'input' || tag === 'textarea') {
        genDefaultModel(el, value, modifiers);
    }
    else {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    // ensure runtime directive metadata
    return true;
}
function genCheckboxModel(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    const valueBinding = getBindingAttr(el, 'value') || 'null';
    const trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
    const falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
    addProp(el, 'checked', `Array.isArray(${value})` +
        `?_i(${value},${valueBinding})>-1` +
        (trueValueBinding === 'true'
            ? `:(${value})`
            : `:_q(${value},${trueValueBinding})`));
    addHandler(el, 'change', `var $$a=${value},` +
        '$$el=$event.target,' +
        `$$c=$$el.checked?(${trueValueBinding}):(${falseValueBinding});` +
        'if(Array.isArray($$a)){' +
        `var $$v=${number ? '_n(' + valueBinding + ')' : valueBinding},` +
        '$$i=_i($$a,$$v);' +
        `if($$el.checked){$$i<0&&(${genAssignmentCode(value, '$$a.concat([$$v])')})}` +
        `else{$$i>-1&&(${genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')})}` +
        `}else{${genAssignmentCode(value, '$$c')}}`, null, true);
}
function genRadioModel(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    let valueBinding = getBindingAttr(el, 'value') || 'null';
    valueBinding = number ? `_n(${valueBinding})` : valueBinding;
    addProp(el, 'checked', `_q(${value},${valueBinding})`);
    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
}
function genSelect(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    const selectedVal = `Array.prototype.filter` +
        `.call($event.target.options,function(o){return o.selected})` +
        `.map(function(o){var val = "_value" in o ? o._value : o.value;` +
        `return ${number ? '_n(val)' : 'val'}})`;
    const assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
    let code = `var $$selectedVal = ${selectedVal};`;
    code = `${code} ${genAssignmentCode(value, assignment)}`;
    addHandler(el, 'change', code, null, true);
}
function genDefaultModel(el, value, modifiers) {
    const type = el.attrsMap.type;
    // warn if v-bind:value conflicts with v-model
    // except for inputs with v-bind:type
    if (process.env.NODE_ENV !== 'production') {
        const value = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
        const typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
        if (value && !typeBinding) {
            const binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
            warn$1(`${binding}="${value}" conflicts with v-model on the same element ` +
                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
        }
    }
    const { lazy, number, trim } = modifiers || {};
    const needCompositionGuard = !lazy && type !== 'range';
    const event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
    let valueExpression = '$event.target.value';
    if (trim) {
        valueExpression = `$event.target.value.trim()`;
    }
    if (number) {
        valueExpression = `_n(${valueExpression})`;
    }
    let code = genAssignmentCode(value, valueExpression);
    if (needCompositionGuard) {
        code = `if($event.target.composing)return;${code}`;
    }
    addProp(el, 'value', `(${value})`);
    addHandler(el, event, code, null, true);
    if (trim || number) {
        addHandler(el, 'blur', '$forceUpdate()');
    }
}

function text(el, dir) {
    if (dir.value) {
        addProp(el, 'textContent', `_s(${dir.value})`, dir);
    }
}

function html(el, dir) {
    if (dir.value) {
        addProp(el, 'innerHTML', `_s(${dir.value})`, dir);
    }
}

var directives = {
    model,
    text,
    html
};

const baseOptions = {
    expectHTML: true,
    modules,
    directives,
    isPreTag,
    isUnaryTag,
    mustUseProp,
    canBeLeftOpenTag,
    isReservedTag,
    getTagNamespace,
    staticKeys: genStaticKeys$1(modules)
};

const hasWarned = {};
function warnOnce(msg) {
    const isNodeProd = typeof process !== 'undefined' && process.env.NODE_ENV === 'production';
    if (!isNodeProd && !hasWarned[msg]) {
        hasWarned[msg] = true;
        warn(msg);
    }
}
function warn(msg) {
    console.warn(`\x1b[1m\x1b[33m[@vue/compiler-sfc]\x1b[0m\x1b[33m ${msg}\x1b[0m\n`);
}

const doNotPrefix = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
    'require,' + // for webpack
    'arguments,' + // parsed as identifier but is a special keyword...
    '_c' // cached to save property access
);
/**
 * The input is expected to be a valid expression.
 */
function prefixIdentifiers(source, isFunctional = false, isTS = false, babelOptions = {}, bindings) {
    const s = new MagicString(source);
    const plugins = [
        ...(isTS ? ['typescript'] : []),
        ...((babelOptions === null || babelOptions === void 0 ? void 0 : babelOptions.plugins) || [])
    ];
    const ast = parser$1.parseExpression(source, Object.assign(Object.assign({}, babelOptions), { plugins }));
    const isScriptSetup = bindings && bindings.__isScriptSetup !== false;
    walkIdentifiers(ast, (ident, parent) => {
        const { name } = ident;
        if (doNotPrefix(name)) {
            return;
        }
        let prefix = `_vm.`;
        if (isScriptSetup) {
            const type = bindings[name];
            if (type && type.startsWith('setup')) {
                prefix = `_setup.`;
            }
        }
        if (isStaticProperty(parent) && parent.shorthand) {
            // property shorthand like { foo }, we need to add the key since
            // we rewrite the value
            // { foo } -> { foo: _vm.foo }
            s.appendLeft(ident.end, `: ${prefix}${name}`);
        }
        else {
            s.prependRight(ident.start, prefix);
        }
    }, node => {
        if (node.type === 'WithStatement') {
            s.remove(node.start, node.body.start + 1);
            s.remove(node.end - 1, node.end);
            if (!isFunctional) {
                s.prependRight(node.start, `var _vm=this,_c=_vm._self._c${isScriptSetup ? `,_setup=_vm._self._setupProxy;` : `;`}`);
            }
        }
    });
    return s.toString();
}

const CSS_VARS_HELPER = `useCssVars`;
function genCssVarsFromList(vars, id, isProd, isSSR = false) {
    return `{\n  ${vars
        .map(key => `"${isSSR ? `--` : ``}${genVarName(id, key, isProd)}": (${key})`)
        .join(',\n  ')}\n}`;
}
function genVarName(id, raw, isProd) {
    if (isProd) {
        return hashSum(id + raw);
    }
    else {
        return `${id}-${raw.replace(/([^\w-])/g, '_')}`;
    }
}
function normalizeExpression(exp) {
    exp = exp.trim();
    if ((exp[0] === `'` && exp[exp.length - 1] === `'`) ||
        (exp[0] === `"` && exp[exp.length - 1] === `"`)) {
        return exp.slice(1, -1);
    }
    return exp;
}
const vBindRE = /v-bind\s*\(/g;
function parseCssVars(sfc) {
    const vars = [];
    sfc.styles.forEach(style => {
        let match;
        // ignore v-bind() in comments /* ... */
        const content = style.content.replace(/\/\*([\s\S]*?)\*\//g, '');
        while ((match = vBindRE.exec(content))) {
            const start = match.index + match[0].length;
            const end = lexBinding(content, start);
            if (end !== null) {
                const variable = normalizeExpression(content.slice(start, end));
                if (!vars.includes(variable)) {
                    vars.push(variable);
                }
            }
        }
    });
    return vars;
}
function lexBinding(content, start) {
    let state = 0 /* LexerState.inParens */;
    let parenDepth = 0;
    for (let i = start; i < content.length; i++) {
        const char = content.charAt(i);
        switch (state) {
            case 0 /* LexerState.inParens */:
                if (char === `'`) {
                    state = 1 /* LexerState.inSingleQuoteString */;
                }
                else if (char === `"`) {
                    state = 2 /* LexerState.inDoubleQuoteString */;
                }
                else if (char === `(`) {
                    parenDepth++;
                }
                else if (char === `)`) {
                    if (parenDepth > 0) {
                        parenDepth--;
                    }
                    else {
                        return i;
                    }
                }
                break;
            case 1 /* LexerState.inSingleQuoteString */:
                if (char === `'`) {
                    state = 0 /* LexerState.inParens */;
                }
                break;
            case 2 /* LexerState.inDoubleQuoteString */:
                if (char === `"`) {
                    state = 0 /* LexerState.inParens */;
                }
                break;
        }
    }
    return null;
}
const cssVarsPlugin = opts => {
    const { id, isProd } = opts;
    return {
        postcssPlugin: 'vue-sfc-vars',
        Declaration(decl) {
            // rewrite CSS variables
            const value = decl.value;
            if (vBindRE.test(value)) {
                vBindRE.lastIndex = 0;
                let transformed = '';
                let lastIndex = 0;
                let match;
                while ((match = vBindRE.exec(value))) {
                    const start = match.index + match[0].length;
                    const end = lexBinding(value, start);
                    if (end !== null) {
                        const variable = normalizeExpression(value.slice(start, end));
                        transformed +=
                            value.slice(lastIndex, match.index) +
                                `var(--${genVarName(id, variable, isProd)})`;
                        lastIndex = end + 1;
                    }
                }
                decl.value = transformed + value.slice(lastIndex);
            }
        }
    };
};
cssVarsPlugin.postcss = true;
function genCssVarsCode(vars, bindings, id, isProd) {
    const varsExp = genCssVarsFromList(vars, id, isProd);
    return `_${CSS_VARS_HELPER}((_vm, _setup) => ${prefixIdentifiers(`(${varsExp})`, false, false, undefined, bindings)})`;
}
// <script setup> already gets the calls injected as part of the transform
// this is only for single normal <script>
function genNormalScriptCssVarsCode(cssVars, bindings, id, isProd) {
    return (`\nimport { ${CSS_VARS_HELPER} as _${CSS_VARS_HELPER} } from 'vue'\n` +
        `const __injectCSSVars__ = () => {\n${genCssVarsCode(cssVars, bindings, id, isProd)}}\n` +
        `const __setup__ = __default__.setup\n` +
        `__default__.setup = __setup__\n` +
        `  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }\n` +
        `  : __injectCSSVars__\n`);
}

const defaultExportRE = /((?:^|\n|;)\s*)export(\s*)default/;
const namedDefaultExportRE = /((?:^|\n|;)\s*)export(.+)(?:as)?(\s*)default/s;
const exportDefaultClassRE = /((?:^|\n|;)\s*)export\s+default\s+class\s+([\w$]+)/;
/**
 * Utility for rewriting `export default` in a script block into a variable
 * declaration so that we can inject things into it
 */
function rewriteDefault(input, as, parserPlugins) {
    if (!hasDefaultExport(input)) {
        return input + `\nconst ${as} = {}`;
    }
    let replaced;
    const classMatch = input.match(exportDefaultClassRE);
    if (classMatch) {
        replaced =
            input.replace(exportDefaultClassRE, '$1class $2') +
                `\nconst ${as} = ${classMatch[2]}`;
    }
    else {
        replaced = input.replace(defaultExportRE, `$1const ${as} =`);
    }
    if (!hasDefaultExport(replaced)) {
        return replaced;
    }
    // if the script somehow still contains `default export`, it probably has
    // multi-line comments or template strings. fallback to a full parse.
    const s = new MagicString(input);
    const ast = parser$1.parse(input, {
        sourceType: 'module',
        plugins: parserPlugins
    }).program.body;
    ast.forEach(node => {
        if (node.type === 'ExportDefaultDeclaration') {
            if (node.declaration.type === 'ClassDeclaration') {
                s.overwrite(node.start, node.declaration.id.start, `class `);
                s.append(`\nconst ${as} = ${node.declaration.id.name}`);
            }
            else {
                s.overwrite(node.start, node.declaration.start, `const ${as} = `);
            }
        }
        if (node.type === 'ExportNamedDeclaration') {
            for (const specifier of node.specifiers) {
                if (specifier.type === 'ExportSpecifier' &&
                    specifier.exported.type === 'Identifier' &&
                    specifier.exported.name === 'default') {
                    if (node.source) {
                        if (specifier.local.name === 'default') {
                            const end = specifierEnd(input, specifier.local.end, node.end);
                            s.prepend(`import { default as __VUE_DEFAULT__ } from '${node.source.value}'\n`);
                            s.overwrite(specifier.start, end, ``);
                            s.append(`\nconst ${as} = __VUE_DEFAULT__`);
                            continue;
                        }
                        else {
                            const end = specifierEnd(input, specifier.exported.end, node.end);
                            s.prepend(`import { ${input.slice(specifier.local.start, specifier.local.end)} } from '${node.source.value}'\n`);
                            s.overwrite(specifier.start, end, ``);
                            s.append(`\nconst ${as} = ${specifier.local.name}`);
                            continue;
                        }
                    }
                    const end = specifierEnd(input, specifier.end, node.end);
                    s.overwrite(specifier.start, end, ``);
                    s.append(`\nconst ${as} = ${specifier.local.name}`);
                }
            }
        }
    });
    return s.toString();
}
function hasDefaultExport(input) {
    return defaultExportRE.test(input) || namedDefaultExportRE.test(input);
}
function specifierEnd(input, end, nodeEnd) {
    // export { default   , foo } ...
    let hasCommas = false;
    let oldEnd = end;
    while (end < nodeEnd) {
        if (/\s/.test(input.charAt(end))) {
            end++;
        }
        else if (input.charAt(end) === ',') {
            end++;
            hasCommas = true;
            break;
        }
        else if (input.charAt(end) === '}') {
            break;
        }
    }
    return hasCommas ? end : oldEnd;
}

// Special compiler macros
const DEFINE_PROPS = 'defineProps';
const DEFINE_EMITS = 'defineEmits';
const DEFINE_EXPOSE = 'defineExpose';
const WITH_DEFAULTS = 'withDefaults';
// constants
const DEFAULT_VAR = `__default__`;
const isBuiltInDir$1 = makeMap(`once,memo,if,for,else,else-if,slot,text,html,on,bind,model,show,cloak,is`);
/**
 * Compile `<script setup>`
 * It requires the whole SFC descriptor because we need to handle and merge
 * normal `<script>` + `<script setup>` if both are present.
 */
function compileScript(sfc, options = { id: '' }) {
    let { filename, script, scriptSetup, source } = sfc;
    const isProd = !!options.isProd;
    const genSourceMap = options.sourceMap !== false;
    const cssVars = sfc.cssVars;
    const scopeId = options.id ? options.id.replace(/^data-v-/, '') : '';
    const scriptLang = script && script.lang;
    const scriptSetupLang = scriptSetup && scriptSetup.lang;
    const isTS = scriptLang === 'ts' ||
        scriptLang === 'tsx' ||
        scriptSetupLang === 'ts' ||
        scriptSetupLang === 'tsx';
    // resolve parser plugins
    const plugins = [];
    if (!isTS || scriptLang === 'tsx' || scriptSetupLang === 'tsx') {
        plugins.push('jsx');
    }
    else {
        // If don't match the case of adding jsx, should remove the jsx from the babelParserPlugins
        if (options.babelParserPlugins)
            options.babelParserPlugins = options.babelParserPlugins.filter(n => n !== 'jsx');
    }
    if (options.babelParserPlugins)
        plugins.push(...options.babelParserPlugins);
    if (isTS) {
        plugins.push('typescript');
        if (!plugins.includes('decorators')) {
            plugins.push('decorators-legacy');
        }
    }
    if (!scriptSetup) {
        if (!script) {
            throw new Error(`[@vue/compiler-sfc] SFC contains no <script> tags.`);
        }
        if (scriptLang && !isTS && scriptLang !== 'jsx') {
            // do not process non js/ts script blocks
            return script;
        }
        try {
            let content = script.content;
            let map = script.map;
            const scriptAst = parser$1.parse(content, {
                plugins,
                sourceType: 'module'
            }).program;
            const bindings = analyzeScriptBindings(scriptAst.body);
            if (cssVars.length) {
                content = rewriteDefault(content, DEFAULT_VAR, plugins);
                content += genNormalScriptCssVarsCode(cssVars, bindings, scopeId, isProd);
                content += `\nexport default ${DEFAULT_VAR}`;
            }
            return Object.assign(Object.assign({}, script), { content,
                map,
                bindings, scriptAst: scriptAst.body });
        }
        catch (e) {
            // silently fallback if parse fails since user may be using custom
            // babel syntax
            return script;
        }
    }
    if (script && scriptLang !== scriptSetupLang) {
        throw new Error(`[@vue/compiler-sfc] <script> and <script setup> must have the same ` +
            `language type.`);
    }
    if (scriptSetupLang && !isTS && scriptSetupLang !== 'jsx') {
        // do not process non js/ts script blocks
        return scriptSetup;
    }
    // metadata that needs to be returned
    const bindingMetadata = {};
    const helperImports = new Set();
    const userImports = Object.create(null);
    const userImportAlias = Object.create(null);
    const scriptBindings = Object.create(null);
    const setupBindings = Object.create(null);
    let defaultExport;
    let hasDefinePropsCall = false;
    let hasDefineEmitCall = false;
    let hasDefineExposeCall = false;
    let hasDefaultExportName = false;
    let propsRuntimeDecl;
    let propsRuntimeDefaults;
    let propsDestructureDecl;
    let propsTypeDecl;
    let propsTypeDeclRaw;
    let propsIdentifier;
    let emitsRuntimeDecl;
    let emitsTypeDecl;
    let emitsTypeDeclRaw;
    let emitIdentifier;
    // props/emits declared via types
    const typeDeclaredProps = {};
    const typeDeclaredEmits = new Set();
    // record declared types for runtime props type generation
    const declaredTypes = {};
    // props destructure data
    const propsDestructuredBindings = Object.create(null);
    // magic-string state
    const s = new MagicString(source);
    const startOffset = scriptSetup.start;
    const endOffset = scriptSetup.end;
    const scriptStartOffset = script && script.start;
    const scriptEndOffset = script && script.end;
    function helper(key) {
        helperImports.add(key);
        return `_${key}`;
    }
    function parse(input, options, offset) {
        try {
            return parser$1.parse(input, options).program;
        }
        catch (e) {
            e.message = `[@vue/compiler-sfc] ${e.message}\n\n${filename}\n${generateCodeFrame(source, e.pos + offset, e.pos + offset + 1)}`;
            throw e;
        }
    }
    function error(msg, node, end = node.end + startOffset) {
        throw new Error(`[@vue/compiler-sfc] ${msg}\n\n${filename}\n${generateCodeFrame(source, node.start + startOffset, end)}`);
    }
    function registerUserImport(source, local, imported, isType, isFromSetup) {
        if (source === 'vue' && imported) {
            userImportAlias[imported] = local;
        }
        let isUsedInTemplate = true;
        if (sfc.template && !sfc.template.src && !sfc.template.lang) {
            isUsedInTemplate = isImportUsed(local, sfc, isTS);
        }
        userImports[local] = {
            isType,
            imported: imported || 'default',
            source,
            isFromSetup,
            isUsedInTemplate
        };
    }
    function processDefineProps(node, declId) {
        if (!isCallOf(node, DEFINE_PROPS)) {
            return false;
        }
        if (hasDefinePropsCall) {
            error(`duplicate ${DEFINE_PROPS}() call`, node);
        }
        hasDefinePropsCall = true;
        propsRuntimeDecl = node.arguments[0];
        // call has type parameters - infer runtime types from it
        if (node.typeParameters) {
            if (propsRuntimeDecl) {
                error(`${DEFINE_PROPS}() cannot accept both type and non-type arguments ` +
                    `at the same time. Use one or the other.`, node);
            }
            propsTypeDeclRaw = node.typeParameters.params[0];
            propsTypeDecl = resolveQualifiedType(propsTypeDeclRaw, node => node.type === 'TSTypeLiteral');
            if (!propsTypeDecl) {
                error(`type argument passed to ${DEFINE_PROPS}() must be a literal type, ` +
                    `or a reference to an interface or literal type.`, propsTypeDeclRaw);
            }
        }
        if (declId) {
            propsIdentifier = scriptSetup.content.slice(declId.start, declId.end);
        }
        return true;
    }
    function processWithDefaults(node, declId) {
        if (!isCallOf(node, WITH_DEFAULTS)) {
            return false;
        }
        if (processDefineProps(node.arguments[0], declId)) {
            if (propsRuntimeDecl) {
                error(`${WITH_DEFAULTS} can only be used with type-based ` +
                    `${DEFINE_PROPS} declaration.`, node);
            }
            propsRuntimeDefaults = node.arguments[1];
            if (!propsRuntimeDefaults ||
                propsRuntimeDefaults.type !== 'ObjectExpression') {
                error(`The 2nd argument of ${WITH_DEFAULTS} must be an object literal.`, propsRuntimeDefaults || node);
            }
        }
        else {
            error(`${WITH_DEFAULTS}' first argument must be a ${DEFINE_PROPS} call.`, node.arguments[0] || node);
        }
        return true;
    }
    function processDefineEmits(node, declId) {
        if (!isCallOf(node, DEFINE_EMITS)) {
            return false;
        }
        if (hasDefineEmitCall) {
            error(`duplicate ${DEFINE_EMITS}() call`, node);
        }
        hasDefineEmitCall = true;
        emitsRuntimeDecl = node.arguments[0];
        if (node.typeParameters) {
            if (emitsRuntimeDecl) {
                error(`${DEFINE_EMITS}() cannot accept both type and non-type arguments ` +
                    `at the same time. Use one or the other.`, node);
            }
            emitsTypeDeclRaw = node.typeParameters.params[0];
            emitsTypeDecl = resolveQualifiedType(emitsTypeDeclRaw, node => node.type === 'TSFunctionType' || node.type === 'TSTypeLiteral');
            if (!emitsTypeDecl) {
                error(`type argument passed to ${DEFINE_EMITS}() must be a function type, ` +
                    `a literal type with call signatures, or a reference to the above types.`, emitsTypeDeclRaw);
            }
        }
        if (declId) {
            emitIdentifier = scriptSetup.content.slice(declId.start, declId.end);
        }
        return true;
    }
    function resolveQualifiedType(node, qualifier) {
        if (qualifier(node)) {
            return node;
        }
        if (node.type === 'TSTypeReference' &&
            node.typeName.type === 'Identifier') {
            const refName = node.typeName.name;
            const isQualifiedType = (node) => {
                if (node.type === 'TSInterfaceDeclaration' &&
                    node.id.name === refName) {
                    return node.body;
                }
                else if (node.type === 'TSTypeAliasDeclaration' &&
                    node.id.name === refName &&
                    qualifier(node.typeAnnotation)) {
                    return node.typeAnnotation;
                }
                else if (node.type === 'ExportNamedDeclaration' && node.declaration) {
                    return isQualifiedType(node.declaration);
                }
            };
            const body = scriptAst
                ? [...scriptSetupAst.body, ...scriptAst.body]
                : scriptSetupAst.body;
            for (const node of body) {
                const qualified = isQualifiedType(node);
                if (qualified) {
                    return qualified;
                }
            }
        }
    }
    function processDefineExpose(node) {
        if (isCallOf(node, DEFINE_EXPOSE)) {
            if (hasDefineExposeCall) {
                error(`duplicate ${DEFINE_EXPOSE}() call`, node);
            }
            hasDefineExposeCall = true;
            return true;
        }
        return false;
    }
    function checkInvalidScopeReference(node, method) {
        if (!node)
            return;
        walkIdentifiers(node, id => {
            if (setupBindings[id.name]) {
                error(`\`${method}()\` in <script setup> cannot reference locally ` +
                    `declared variables because it will be hoisted outside of the ` +
                    `setup() function. If your component options require initialization ` +
                    `in the module scope, use a separate normal <script> to export ` +
                    `the options instead.`, id);
            }
        });
    }
    /**
     * check defaults. If the default object is an object literal with only
     * static properties, we can directly generate more optimized default
     * declarations. Otherwise we will have to fallback to runtime merging.
     */
    function hasStaticWithDefaults() {
        return (propsRuntimeDefaults &&
            propsRuntimeDefaults.type === 'ObjectExpression' &&
            propsRuntimeDefaults.properties.every(node => (node.type === 'ObjectProperty' && !node.computed) ||
                node.type === 'ObjectMethod'));
    }
    function genRuntimeProps(props) {
        const keys = Object.keys(props);
        if (!keys.length) {
            return ``;
        }
        const hasStaticDefaults = hasStaticWithDefaults();
        const scriptSetupSource = scriptSetup.content;
        let propsDecls = `{
    ${keys
            .map(key => {
            let defaultString;
            const destructured = genDestructuredDefaultValue(key);
            if (destructured) {
                defaultString = `default: ${destructured}`;
            }
            else if (hasStaticDefaults) {
                const prop = propsRuntimeDefaults.properties.find((node) => node.key.name === key);
                if (prop) {
                    if (prop.type === 'ObjectProperty') {
                        // prop has corresponding static default value
                        defaultString = `default: ${scriptSetupSource.slice(prop.value.start, prop.value.end)}`;
                    }
                    else {
                        defaultString = `default() ${scriptSetupSource.slice(prop.body.start, prop.body.end)}`;
                    }
                }
            }
            const { type, required } = props[key];
            if (!isProd) {
                return `${key}: { type: ${toRuntimeTypeString(type)}, required: ${required}${defaultString ? `, ${defaultString}` : ``} }`;
            }
            else if (type.some(el => el === 'Boolean' || (defaultString && el === 'Function'))) {
                // #4783 production: if boolean or defaultString and function exists, should keep the type.
                return `${key}: { type: ${toRuntimeTypeString(type)}${defaultString ? `, ${defaultString}` : ``} }`;
            }
            else {
                // production: checks are useless
                return `${key}: ${defaultString ? `{ ${defaultString} }` : 'null'}`;
            }
        })
            .join(',\n    ')}\n  }`;
        if (propsRuntimeDefaults && !hasStaticDefaults) {
            propsDecls = `${helper('mergeDefaults')}(${propsDecls}, ${source.slice(propsRuntimeDefaults.start + startOffset, propsRuntimeDefaults.end + startOffset)})`;
        }
        return `\n  props: ${propsDecls},`;
    }
    function genDestructuredDefaultValue(key) {
        const destructured = propsDestructuredBindings[key];
        if (destructured && destructured.default) {
            const value = scriptSetup.content.slice(destructured.default.start, destructured.default.end);
            const isLiteral = destructured.default.type.endsWith('Literal');
            return isLiteral ? value : `() => (${value})`;
        }
    }
    function genSetupPropsType(node) {
        const scriptSetupSource = scriptSetup.content;
        if (hasStaticWithDefaults()) {
            // if withDefaults() is used, we need to remove the optional flags
            // on props that have default values
            let res = `{ `;
            const members = node.type === 'TSTypeLiteral' ? node.members : node.body;
            for (const m of members) {
                if ((m.type === 'TSPropertySignature' ||
                    m.type === 'TSMethodSignature') &&
                    m.typeAnnotation &&
                    m.key.type === 'Identifier') {
                    if (propsRuntimeDefaults.properties.some((p) => p.key.name === m.key.name)) {
                        res +=
                            m.key.name +
                                (m.type === 'TSMethodSignature' ? '()' : '') +
                                scriptSetupSource.slice(m.typeAnnotation.start, m.typeAnnotation.end) +
                                ', ';
                    }
                    else {
                        res +=
                            scriptSetupSource.slice(m.start, m.typeAnnotation.end) + `, `;
                    }
                }
            }
            return (res.length ? res.slice(0, -2) : res) + ` }`;
        }
        else {
            return scriptSetupSource.slice(node.start, node.end);
        }
    }
    // 1. process normal <script> first if it exists
    let scriptAst;
    if (script) {
        scriptAst = parse(script.content, {
            plugins,
            sourceType: 'module'
        }, scriptStartOffset);
        for (const node of scriptAst.body) {
            if (node.type === 'ImportDeclaration') {
                // record imports for dedupe
                for (const specifier of node.specifiers) {
                    const imported = specifier.type === 'ImportSpecifier' &&
                        specifier.imported.type === 'Identifier' &&
                        specifier.imported.name;
                    registerUserImport(node.source.value, specifier.local.name, imported, node.importKind === 'type' ||
                        (specifier.type === 'ImportSpecifier' &&
                            specifier.importKind === 'type'), false);
                }
            }
            else if (node.type === 'ExportDefaultDeclaration') {
                // export default
                defaultExport = node;
                // check if user has manually specified `name` or 'render` option in
                // export default
                // if has name, skip name inference
                // if has render and no template, generate return object instead of
                // empty render function (#4980)
                let optionProperties;
                if (defaultExport.declaration.type === 'ObjectExpression') {
                    optionProperties = defaultExport.declaration.properties;
                }
                else if (defaultExport.declaration.type === 'CallExpression' &&
                    defaultExport.declaration.arguments[0].type === 'ObjectExpression') {
                    optionProperties = defaultExport.declaration.arguments[0].properties;
                }
                if (optionProperties) {
                    for (const s of optionProperties) {
                        if (s.type === 'ObjectProperty' &&
                            s.key.type === 'Identifier' &&
                            s.key.name === 'name') {
                            hasDefaultExportName = true;
                        }
                    }
                }
                // export default { ... } --> const __default__ = { ... }
                const start = node.start + scriptStartOffset;
                const end = node.declaration.start + scriptStartOffset;
                s.overwrite(start, end, `const ${DEFAULT_VAR} = `);
            }
            else if (node.type === 'ExportNamedDeclaration') {
                const defaultSpecifier = node.specifiers.find(s => s.exported.type === 'Identifier' && s.exported.name === 'default');
                if (defaultSpecifier) {
                    defaultExport = node;
                    // 1. remove specifier
                    if (node.specifiers.length > 1) {
                        s.remove(defaultSpecifier.start + scriptStartOffset, defaultSpecifier.end + scriptStartOffset);
                    }
                    else {
                        s.remove(node.start + scriptStartOffset, node.end + scriptStartOffset);
                    }
                    if (node.source) {
                        // export { x as default } from './x'
                        // rewrite to `import { x as __default__ } from './x'` and
                        // add to top
                        s.prepend(`import { ${defaultSpecifier.local.name} as ${DEFAULT_VAR} } from '${node.source.value}'\n`);
                    }
                    else {
                        // export { x as default }
                        // rewrite to `const __default__ = x` and move to end
                        s.appendLeft(scriptEndOffset, `\nconst ${DEFAULT_VAR} = ${defaultSpecifier.local.name}\n`);
                    }
                }
                if (node.declaration) {
                    walkDeclaration(node.declaration, scriptBindings, userImportAlias);
                }
            }
            else if ((node.type === 'VariableDeclaration' ||
                node.type === 'FunctionDeclaration' ||
                node.type === 'ClassDeclaration' ||
                node.type === 'TSEnumDeclaration') &&
                !node.declare) {
                walkDeclaration(node, scriptBindings, userImportAlias);
            }
        }
        // apply reactivity transform
        // if (enableReactivityTransform && shouldTransform(script.content)) {
        //   const { rootRefs, importedHelpers } = transformAST(
        //     scriptAst,
        //     s,
        //     scriptStartOffset!
        //   )
        //   refBindings = rootRefs
        //   for (const h of importedHelpers) {
        //     helperImports.add(h)
        //   }
        // }
        // <script> after <script setup>
        // we need to move the block up so that `const __default__` is
        // declared before being used in the actual component definition
        if (scriptStartOffset > startOffset) {
            // if content doesn't end with newline, add one
            if (!/\n$/.test(script.content.trim())) {
                s.appendLeft(scriptEndOffset, `\n`);
            }
            s.move(scriptStartOffset, scriptEndOffset, 0);
        }
    }
    // 2. parse <script setup> and  walk over top level statements
    const scriptSetupAst = parse(scriptSetup.content, {
        plugins: [
            ...plugins,
            // allow top level await but only inside <script setup>
            'topLevelAwait'
        ],
        sourceType: 'module'
    }, startOffset);
    for (const node of scriptSetupAst.body) {
        const start = node.start + startOffset;
        let end = node.end + startOffset;
        // locate comment
        if (node.trailingComments && node.trailingComments.length > 0) {
            const lastCommentNode = node.trailingComments[node.trailingComments.length - 1];
            end = lastCommentNode.end + startOffset;
        }
        // locate the end of whitespace between this statement and the next
        while (end <= source.length) {
            if (!/\s/.test(source.charAt(end))) {
                break;
            }
            end++;
        }
        // (Dropped) `ref: x` bindings
        if (node.type === 'LabeledStatement' &&
            node.label.name === 'ref' &&
            node.body.type === 'ExpressionStatement') {
            error(`ref sugar using the label syntax was an experimental proposal and ` +
                `has been dropped based on community feedback. Please check out ` +
                `the new proposal at https://github.com/vuejs/rfcs/discussions/369`, node);
        }
        if (node.type === 'ImportDeclaration') {
            // import declarations are moved to top
            s.move(start, end, 0);
            // dedupe imports
            let removed = 0;
            const removeSpecifier = (i) => {
                const removeLeft = i > removed;
                removed++;
                const current = node.specifiers[i];
                const next = node.specifiers[i + 1];
                s.remove(removeLeft
                    ? node.specifiers[i - 1].end + startOffset
                    : current.start + startOffset, next && !removeLeft
                    ? next.start + startOffset
                    : current.end + startOffset);
            };
            for (let i = 0; i < node.specifiers.length; i++) {
                const specifier = node.specifiers[i];
                const local = specifier.local.name;
                let imported = specifier.type === 'ImportSpecifier' &&
                    specifier.imported.type === 'Identifier' &&
                    specifier.imported.name;
                if (specifier.type === 'ImportNamespaceSpecifier') {
                    imported = '*';
                }
                const source = node.source.value;
                const existing = userImports[local];
                if (source === 'vue' &&
                    (imported === DEFINE_PROPS ||
                        imported === DEFINE_EMITS ||
                        imported === DEFINE_EXPOSE)) {
                    warnOnce(`\`${imported}\` is a compiler macro and no longer needs to be imported.`);
                    removeSpecifier(i);
                }
                else if (existing) {
                    if (existing.source === source && existing.imported === imported) {
                        // already imported in <script setup>, dedupe
                        removeSpecifier(i);
                    }
                    else {
                        error(`different imports aliased to same local name.`, specifier);
                    }
                }
                else {
                    registerUserImport(source, local, imported, node.importKind === 'type' ||
                        (specifier.type === 'ImportSpecifier' &&
                            specifier.importKind === 'type'), true);
                }
            }
            if (node.specifiers.length && removed === node.specifiers.length) {
                s.remove(node.start + startOffset, node.end + startOffset);
            }
        }
        if (node.type === 'ExpressionStatement') {
            // process `defineProps` and `defineEmit(s)` calls
            if (processDefineProps(node.expression) ||
                processDefineEmits(node.expression) ||
                processWithDefaults(node.expression)) {
                s.remove(node.start + startOffset, node.end + startOffset);
            }
            else if (processDefineExpose(node.expression)) {
                // defineExpose({}) -> expose({})
                const callee = node.expression.callee;
                s.overwrite(callee.start + startOffset, callee.end + startOffset, 'expose');
            }
        }
        if (node.type === 'VariableDeclaration' && !node.declare) {
            const total = node.declarations.length;
            let left = total;
            for (let i = 0; i < total; i++) {
                const decl = node.declarations[i];
                if (decl.init) {
                    // defineProps / defineEmits
                    const isDefineProps = processDefineProps(decl.init, decl.id) ||
                        processWithDefaults(decl.init, decl.id);
                    const isDefineEmits = processDefineEmits(decl.init, decl.id);
                    if (isDefineProps || isDefineEmits) {
                        if (left === 1) {
                            s.remove(node.start + startOffset, node.end + startOffset);
                        }
                        else {
                            let start = decl.start + startOffset;
                            let end = decl.end + startOffset;
                            if (i < total - 1) {
                                // not the last one, locate the start of the next
                                end = node.declarations[i + 1].start + startOffset;
                            }
                            else {
                                // last one, locate the end of the prev
                                start = node.declarations[i - 1].end + startOffset;
                            }
                            s.remove(start, end);
                            left--;
                        }
                    }
                }
            }
        }
        // walk declarations to record declared bindings
        if ((node.type === 'VariableDeclaration' ||
            node.type === 'FunctionDeclaration' ||
            node.type === 'ClassDeclaration') &&
            !node.declare) {
            walkDeclaration(node, setupBindings, userImportAlias);
        }
        // walk statements & named exports / variable declarations for top level
        // await
        if ((node.type === 'VariableDeclaration' && !node.declare) ||
            node.type.endsWith('Statement')) {
            const scope = [scriptSetupAst.body];
            walk$1(node, {
                enter(child, parent) {
                    if (isFunctionType(child)) {
                        this.skip();
                    }
                    if (child.type === 'BlockStatement') {
                        scope.push(child.body);
                    }
                    if (child.type === 'AwaitExpression') {
                        error(`Vue 2 does not support top level await in <script setup>.`, child);
                    }
                },
                exit(node) {
                    if (node.type === 'BlockStatement')
                        scope.pop();
                }
            });
        }
        if ((node.type === 'ExportNamedDeclaration' && node.exportKind !== 'type') ||
            node.type === 'ExportAllDeclaration' ||
            node.type === 'ExportDefaultDeclaration') {
            error(`<script setup> cannot contain ES module exports. ` +
                `If you are using a previous version of <script setup>, please ` +
                `consult the updated RFC at https://github.com/vuejs/rfcs/pull/227.`, node);
        }
        if (isTS) {
            // runtime enum
            if (node.type === 'TSEnumDeclaration') {
                registerBinding(setupBindings, node.id, "setup-const" /* BindingTypes.SETUP_CONST */);
            }
            // move all Type declarations to outer scope
            if (node.type.startsWith('TS') ||
                (node.type === 'ExportNamedDeclaration' &&
                    node.exportKind === 'type') ||
                (node.type === 'VariableDeclaration' && node.declare)) {
                recordType(node, declaredTypes);
                s.move(start, end, 0);
            }
        }
    }
    // 3. Apply reactivity transform
    // if (
    //   (enableReactivityTransform &&
    //     // normal <script> had ref bindings that maybe used in <script setup>
    //     (refBindings || shouldTransform(scriptSetup.content))) ||
    //   propsDestructureDecl
    // ) {
    //   const { rootRefs, importedHelpers } = transformAST(
    //     scriptSetupAst,
    //     s,
    //     startOffset,
    //     refBindings,
    //     propsDestructuredBindings
    //   )
    //   refBindings = refBindings ? [...refBindings, ...rootRefs] : rootRefs
    //   for (const h of importedHelpers) {
    //     helperImports.add(h)
    //   }
    // }
    // 4. extract runtime props/emits code from setup context type
    if (propsTypeDecl) {
        extractRuntimeProps(propsTypeDecl, typeDeclaredProps, declaredTypes);
    }
    if (emitsTypeDecl) {
        extractRuntimeEmits(emitsTypeDecl, typeDeclaredEmits);
    }
    // 5. check useOptions args to make sure it doesn't reference setup scope
    // variables
    checkInvalidScopeReference(propsRuntimeDecl, DEFINE_PROPS);
    checkInvalidScopeReference(propsRuntimeDefaults, DEFINE_PROPS);
    checkInvalidScopeReference(propsDestructureDecl, DEFINE_PROPS);
    checkInvalidScopeReference(emitsRuntimeDecl, DEFINE_EMITS);
    // 6. remove non-script content
    if (script) {
        if (startOffset < scriptStartOffset) {
            // <script setup> before <script>
            s.remove(0, startOffset);
            s.remove(endOffset, scriptStartOffset);
            s.remove(scriptEndOffset, source.length);
        }
        else {
            // <script> before <script setup>
            s.remove(0, scriptStartOffset);
            s.remove(scriptEndOffset, startOffset);
            s.remove(endOffset, source.length);
        }
    }
    else {
        // only <script setup>
        s.remove(0, startOffset);
        s.remove(endOffset, source.length);
    }
    // 7. analyze binding metadata
    if (scriptAst) {
        Object.assign(bindingMetadata, analyzeScriptBindings(scriptAst.body));
    }
    if (propsRuntimeDecl) {
        for (const key of getObjectOrArrayExpressionKeys(propsRuntimeDecl)) {
            bindingMetadata[key] = "props" /* BindingTypes.PROPS */;
        }
    }
    for (const key in typeDeclaredProps) {
        bindingMetadata[key] = "props" /* BindingTypes.PROPS */;
    }
    // props aliases
    // if (propsDestructureDecl) {
    //   if (propsDestructureRestId) {
    //     bindingMetadata[propsDestructureRestId] =
    //       BindingTypes.SETUP_REACTIVE_CONST
    //   }
    //   for (const key in propsDestructuredBindings) {
    //     const { local } = propsDestructuredBindings[key]
    //     if (local !== key) {
    //       bindingMetadata[local] = BindingTypes.PROPS_ALIASED
    //       ;(bindingMetadata.__propsAliases ||
    //         (bindingMetadata.__propsAliases = {}))[local] = key
    //     }
    //   }
    // }
    for (const [key, { isType, imported, source }] of Object.entries(userImports)) {
        if (isType)
            continue;
        bindingMetadata[key] =
            imported === '*' ||
                (imported === 'default' && source.endsWith('.vue')) ||
                source === 'vue'
                ? "setup-const" /* BindingTypes.SETUP_CONST */
                : "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */;
    }
    for (const key in scriptBindings) {
        bindingMetadata[key] = scriptBindings[key];
    }
    for (const key in setupBindings) {
        bindingMetadata[key] = setupBindings[key];
    }
    // 8. inject `useCssVars` calls
    if (cssVars.length) {
        helperImports.add(CSS_VARS_HELPER);
        s.prependRight(startOffset, `\n${genCssVarsCode(cssVars, bindingMetadata, scopeId, isProd)}\n`);
    }
    // 9. finalize setup() argument signature
    let args = `__props`;
    if (propsTypeDecl) {
        // mark as any and only cast on assignment
        // since the user defined complex types may be incompatible with the
        // inferred type from generated runtime declarations
        args += `: any`;
    }
    // inject user assignment of props
    // we use a default __props so that template expressions referencing props
    // can use it directly
    if (propsIdentifier) {
        s.prependLeft(startOffset, `\nconst ${propsIdentifier} = __props${propsTypeDecl ? ` as ${genSetupPropsType(propsTypeDecl)}` : ``}\n`);
    }
    const destructureElements = hasDefineExposeCall ? [`expose`] : [];
    if (emitIdentifier) {
        destructureElements.push(emitIdentifier === `emit` ? `emit` : `emit: ${emitIdentifier}`);
    }
    if (destructureElements.length) {
        args += `, { ${destructureElements.join(', ')} }`;
        if (emitsTypeDecl) {
            args += `: { emit: (${scriptSetup.content.slice(emitsTypeDecl.start, emitsTypeDecl.end)}), expose: any, slots: any, attrs: any }`;
        }
    }
    // 10. generate return statement
    const allBindings = Object.assign(Object.assign({}, scriptBindings), setupBindings);
    for (const key in userImports) {
        if (!userImports[key].isType && userImports[key].isUsedInTemplate) {
            allBindings[key] = true;
        }
    }
    // __sfc marker indicates these bindings are compiled from <script setup>
    // and should not be proxied on `this`
    const returned = `{ ${`__sfc: true,`}${Object.keys(allBindings).join(', ')} }`;
    s.appendRight(endOffset, `\nreturn ${returned}\n}\n\n`);
    // 11. finalize default export
    let runtimeOptions = ``;
    if (!hasDefaultExportName && filename && filename !== DEFAULT_FILENAME) {
        const match = filename.match(/([^/\\]+)\.\w+$/);
        if (match) {
            runtimeOptions += `\n  __name: '${match[1]}',`;
        }
    }
    if (propsRuntimeDecl) {
        let declCode = scriptSetup.content
            .slice(propsRuntimeDecl.start, propsRuntimeDecl.end)
            .trim();
        runtimeOptions += `\n  props: ${declCode},`;
    }
    else if (propsTypeDecl) {
        runtimeOptions += genRuntimeProps(typeDeclaredProps);
    }
    if (emitsRuntimeDecl) {
        runtimeOptions += `\n  emits: ${scriptSetup.content
            .slice(emitsRuntimeDecl.start, emitsRuntimeDecl.end)
            .trim()},`;
    }
    else if (emitsTypeDecl) {
        runtimeOptions += genRuntimeEmits(typeDeclaredEmits);
    }
    // wrap setup code with function.
    if (isTS) {
        // for TS, make sure the exported type is still valid type with
        // correct props information
        // we have to use object spread for types to be merged properly
        // user's TS setting should compile it down to proper targets
        // export default defineComponent({ ...__default__, ... })
        const def = defaultExport ? `\n  ...${DEFAULT_VAR},` : ``;
        s.prependLeft(startOffset, `\nexport default /*#__PURE__*/${helper(`defineComponent`)}({${def}${runtimeOptions}\n  setup(${args}) {\n`);
        s.appendRight(endOffset, `})`);
    }
    else {
        if (defaultExport) {
            // without TS, can't rely on rest spread, so we use Object.assign
            // export default Object.assign(__default__, { ... })
            s.prependLeft(startOffset, `\nexport default /*#__PURE__*/Object.assign(${DEFAULT_VAR}, {${runtimeOptions}\n  ` +
                `setup(${args}) {\n`);
            s.appendRight(endOffset, `})`);
        }
        else {
            s.prependLeft(startOffset, `\nexport default {${runtimeOptions}\n  setup(${args}) {\n`);
            s.appendRight(endOffset, `}`);
        }
    }
    // 12. finalize Vue helper imports
    if (helperImports.size > 0) {
        s.prepend(`import { ${[...helperImports]
            .map(h => `${h} as _${h}`)
            .join(', ')} } from 'vue'\n`);
    }
    s.trim();
    return Object.assign(Object.assign({}, scriptSetup), { bindings: bindingMetadata, imports: userImports, content: s.toString(), map: genSourceMap
            ? s.generateMap({
                source: filename,
                hires: true,
                includeContent: true
            })
            : undefined, scriptAst: scriptAst === null || scriptAst === void 0 ? void 0 : scriptAst.body, scriptSetupAst: scriptSetupAst === null || scriptSetupAst === void 0 ? void 0 : scriptSetupAst.body });
}
function registerBinding(bindings, node, type) {
    bindings[node.name] = type;
}
function walkDeclaration(node, bindings, userImportAlias) {
    if (node.type === 'VariableDeclaration') {
        const isConst = node.kind === 'const';
        // export const foo = ...
        for (const { id, init } of node.declarations) {
            const isDefineCall = !!(isConst &&
                isCallOf(init, c => c === DEFINE_PROPS || c === DEFINE_EMITS || c === WITH_DEFAULTS));
            if (id.type === 'Identifier') {
                let bindingType;
                const userReactiveBinding = userImportAlias['reactive'] || 'reactive';
                if (isCallOf(init, userReactiveBinding)) {
                    // treat reactive() calls as let since it's meant to be mutable
                    bindingType = isConst
                        ? "setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */
                        : "setup-let" /* BindingTypes.SETUP_LET */;
                }
                else if (
                // if a declaration is a const literal, we can mark it so that
                // the generated render fn code doesn't need to unref() it
                isDefineCall ||
                    (isConst && canNeverBeRef(init, userReactiveBinding))) {
                    bindingType = isCallOf(init, DEFINE_PROPS)
                        ? "setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */
                        : "setup-const" /* BindingTypes.SETUP_CONST */;
                }
                else if (isConst) {
                    if (isCallOf(init, userImportAlias['ref'] || 'ref')) {
                        bindingType = "setup-ref" /* BindingTypes.SETUP_REF */;
                    }
                    else {
                        bindingType = "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */;
                    }
                }
                else {
                    bindingType = "setup-let" /* BindingTypes.SETUP_LET */;
                }
                registerBinding(bindings, id, bindingType);
            }
            else {
                if (isCallOf(init, DEFINE_PROPS)) {
                    // skip walking props destructure
                    return;
                }
                if (id.type === 'ObjectPattern') {
                    walkObjectPattern(id, bindings, isConst, isDefineCall);
                }
                else if (id.type === 'ArrayPattern') {
                    walkArrayPattern(id, bindings, isConst, isDefineCall);
                }
            }
        }
    }
    else if (node.type === 'TSEnumDeclaration' ||
        node.type === 'FunctionDeclaration' ||
        node.type === 'ClassDeclaration') {
        // export function foo() {} / export class Foo {}
        // export declarations must be named.
        bindings[node.id.name] = "setup-const" /* BindingTypes.SETUP_CONST */;
    }
}
function walkObjectPattern(node, bindings, isConst, isDefineCall = false) {
    for (const p of node.properties) {
        if (p.type === 'ObjectProperty') {
            if (p.key.type === 'Identifier' && p.key === p.value) {
                // shorthand: const { x } = ...
                const type = isDefineCall
                    ? "setup-const" /* BindingTypes.SETUP_CONST */
                    : isConst
                        ? "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */
                        : "setup-let" /* BindingTypes.SETUP_LET */;
                registerBinding(bindings, p.key, type);
            }
            else {
                walkPattern(p.value, bindings, isConst, isDefineCall);
            }
        }
        else {
            // ...rest
            // argument can only be identifier when destructuring
            const type = isConst ? "setup-const" /* BindingTypes.SETUP_CONST */ : "setup-let" /* BindingTypes.SETUP_LET */;
            registerBinding(bindings, p.argument, type);
        }
    }
}
function walkArrayPattern(node, bindings, isConst, isDefineCall = false) {
    for (const e of node.elements) {
        e && walkPattern(e, bindings, isConst, isDefineCall);
    }
}
function walkPattern(node, bindings, isConst, isDefineCall = false) {
    if (node.type === 'Identifier') {
        const type = isDefineCall
            ? "setup-const" /* BindingTypes.SETUP_CONST */
            : isConst
                ? "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */
                : "setup-let" /* BindingTypes.SETUP_LET */;
        registerBinding(bindings, node, type);
    }
    else if (node.type === 'RestElement') {
        // argument can only be identifier when destructuring
        const type = isConst ? "setup-const" /* BindingTypes.SETUP_CONST */ : "setup-let" /* BindingTypes.SETUP_LET */;
        registerBinding(bindings, node.argument, type);
    }
    else if (node.type === 'ObjectPattern') {
        walkObjectPattern(node, bindings, isConst);
    }
    else if (node.type === 'ArrayPattern') {
        walkArrayPattern(node, bindings, isConst);
    }
    else if (node.type === 'AssignmentPattern') {
        if (node.left.type === 'Identifier') {
            const type = isDefineCall
                ? "setup-const" /* BindingTypes.SETUP_CONST */
                : isConst
                    ? "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */
                    : "setup-let" /* BindingTypes.SETUP_LET */;
            registerBinding(bindings, node.left, type);
        }
        else {
            walkPattern(node.left, bindings, isConst);
        }
    }
}
function recordType(node, declaredTypes) {
    if (node.type === 'TSInterfaceDeclaration') {
        declaredTypes[node.id.name] = [`Object`];
    }
    else if (node.type === 'TSTypeAliasDeclaration') {
        declaredTypes[node.id.name] = inferRuntimeType(node.typeAnnotation, declaredTypes);
    }
    else if (node.type === 'ExportNamedDeclaration' && node.declaration) {
        recordType(node.declaration, declaredTypes);
    }
}
function extractRuntimeProps(node, props, declaredTypes, isProd) {
    const members = node.type === 'TSTypeLiteral' ? node.members : node.body;
    for (const m of members) {
        if ((m.type === 'TSPropertySignature' || m.type === 'TSMethodSignature') &&
            m.key.type === 'Identifier') {
            let type;
            if (m.type === 'TSMethodSignature') {
                type = ['Function'];
            }
            else if (m.typeAnnotation) {
                type = inferRuntimeType(m.typeAnnotation.typeAnnotation, declaredTypes);
            }
            props[m.key.name] = {
                key: m.key.name,
                required: !m.optional,
                type: type || [`null`]
            };
        }
    }
}
function inferRuntimeType(node, declaredTypes) {
    switch (node.type) {
        case 'TSStringKeyword':
            return ['String'];
        case 'TSNumberKeyword':
            return ['Number'];
        case 'TSBooleanKeyword':
            return ['Boolean'];
        case 'TSObjectKeyword':
            return ['Object'];
        case 'TSTypeLiteral':
            // TODO (nice to have) generate runtime property validation
            return ['Object'];
        case 'TSFunctionType':
            return ['Function'];
        case 'TSArrayType':
        case 'TSTupleType':
            // TODO (nice to have) generate runtime element type/length checks
            return ['Array'];
        case 'TSLiteralType':
            switch (node.literal.type) {
                case 'StringLiteral':
                    return ['String'];
                case 'BooleanLiteral':
                    return ['Boolean'];
                case 'NumericLiteral':
                case 'BigIntLiteral':
                    return ['Number'];
                default:
                    return [`null`];
            }
        case 'TSTypeReference':
            if (node.typeName.type === 'Identifier') {
                if (declaredTypes[node.typeName.name]) {
                    return declaredTypes[node.typeName.name];
                }
                switch (node.typeName.name) {
                    case 'Array':
                    case 'Function':
                    case 'Object':
                    case 'Set':
                    case 'Map':
                    case 'WeakSet':
                    case 'WeakMap':
                    case 'Date':
                    case 'Promise':
                        return [node.typeName.name];
                    case 'Record':
                    case 'Partial':
                    case 'Readonly':
                    case 'Pick':
                    case 'Omit':
                    case 'Exclude':
                    case 'Extract':
                    case 'Required':
                    case 'InstanceType':
                        return ['Object'];
                }
            }
            return [`null`];
        case 'TSParenthesizedType':
            return inferRuntimeType(node.typeAnnotation, declaredTypes);
        case 'TSUnionType':
            return [
                ...new Set([].concat(...node.types.map(t => inferRuntimeType(t, declaredTypes))))
            ];
        case 'TSIntersectionType':
            return ['Object'];
        case 'TSSymbolKeyword':
            return ['Symbol'];
        default:
            return [`null`]; // no runtime check
    }
}
function toRuntimeTypeString(types) {
    return types.length > 1 ? `[${types.join(', ')}]` : types[0];
}
function extractRuntimeEmits(node, emits) {
    if (node.type === 'TSTypeLiteral' || node.type === 'TSInterfaceBody') {
        const members = node.type === 'TSTypeLiteral' ? node.members : node.body;
        for (let t of members) {
            if (t.type === 'TSCallSignatureDeclaration') {
                extractEventNames(t.parameters[0], emits);
            }
        }
        return;
    }
    else {
        extractEventNames(node.parameters[0], emits);
    }
}
function extractEventNames(eventName, emits) {
    if (eventName.type === 'Identifier' &&
        eventName.typeAnnotation &&
        eventName.typeAnnotation.type === 'TSTypeAnnotation') {
        const typeNode = eventName.typeAnnotation.typeAnnotation;
        if (typeNode.type === 'TSLiteralType') {
            if (typeNode.literal.type !== 'UnaryExpression' &&
                typeNode.literal.type !== 'TemplateLiteral') {
                emits.add(String(typeNode.literal.value));
            }
        }
        else if (typeNode.type === 'TSUnionType') {
            for (const t of typeNode.types) {
                if (t.type === 'TSLiteralType' &&
                    t.literal.type !== 'UnaryExpression' &&
                    t.literal.type !== 'TemplateLiteral') {
                    emits.add(String(t.literal.value));
                }
            }
        }
    }
}
function genRuntimeEmits(emits) {
    return emits.size
        ? `\n  emits: [${Array.from(emits)
            .map(p => JSON.stringify(p))
            .join(', ')}],`
        : ``;
}
function isCallOf(node, test) {
    return !!(node &&
        node.type === 'CallExpression' &&
        node.callee.type === 'Identifier' &&
        (typeof test === 'string'
            ? node.callee.name === test
            : test(node.callee.name)));
}
function canNeverBeRef(node, userReactiveImport) {
    if (isCallOf(node, userReactiveImport)) {
        return true;
    }
    switch (node.type) {
        case 'UnaryExpression':
        case 'BinaryExpression':
        case 'ArrayExpression':
        case 'ObjectExpression':
        case 'FunctionExpression':
        case 'ArrowFunctionExpression':
        case 'UpdateExpression':
        case 'ClassExpression':
        case 'TaggedTemplateExpression':
            return true;
        case 'SequenceExpression':
            return canNeverBeRef(node.expressions[node.expressions.length - 1], userReactiveImport);
        default:
            if (node.type.endsWith('Literal')) {
                return true;
            }
            return false;
    }
}
/**
 * Analyze bindings in normal `<script>`
 * Note that `compileScriptSetup` already analyzes bindings as part of its
 * compilation process so this should only be used on single `<script>` SFCs.
 */
function analyzeScriptBindings(ast) {
    for (const node of ast) {
        if (node.type === 'ExportDefaultDeclaration' &&
            node.declaration.type === 'ObjectExpression') {
            return analyzeBindingsFromOptions(node.declaration);
        }
    }
    return {};
}
function analyzeBindingsFromOptions(node) {
    const bindings = {};
    // #3270, #3275
    // mark non-script-setup so we don't resolve components/directives from these
    Object.defineProperty(bindings, '__isScriptSetup', {
        enumerable: false,
        value: false
    });
    for (const property of node.properties) {
        if (property.type === 'ObjectProperty' &&
            !property.computed &&
            property.key.type === 'Identifier') {
            // props
            if (property.key.name === 'props') {
                // props: ['foo']
                // props: { foo: ... }
                for (const key of getObjectOrArrayExpressionKeys(property.value)) {
                    bindings[key] = "props" /* BindingTypes.PROPS */;
                }
            }
            // inject
            else if (property.key.name === 'inject') {
                // inject: ['foo']
                // inject: { foo: {} }
                for (const key of getObjectOrArrayExpressionKeys(property.value)) {
                    bindings[key] = "options" /* BindingTypes.OPTIONS */;
                }
            }
            // computed & methods
            else if (property.value.type === 'ObjectExpression' &&
                (property.key.name === 'computed' || property.key.name === 'methods')) {
                // methods: { foo() {} }
                // computed: { foo() {} }
                for (const key of getObjectExpressionKeys(property.value)) {
                    bindings[key] = "options" /* BindingTypes.OPTIONS */;
                }
            }
        }
        // setup & data
        else if (property.type === 'ObjectMethod' &&
            property.key.type === 'Identifier' &&
            (property.key.name === 'setup' || property.key.name === 'data')) {
            for (const bodyItem of property.body.body) {
                // setup() {
                //   return {
                //     foo: null
                //   }
                // }
                if (bodyItem.type === 'ReturnStatement' &&
                    bodyItem.argument &&
                    bodyItem.argument.type === 'ObjectExpression') {
                    for (const key of getObjectExpressionKeys(bodyItem.argument)) {
                        bindings[key] =
                            property.key.name === 'setup'
                                ? "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */
                                : "data" /* BindingTypes.DATA */;
                    }
                }
            }
        }
    }
    return bindings;
}
function getObjectExpressionKeys(node) {
    const keys = [];
    for (const prop of node.properties) {
        if ((prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod') &&
            !prop.computed) {
            if (prop.key.type === 'Identifier') {
                keys.push(prop.key.name);
            }
            else if (prop.key.type === 'StringLiteral') {
                keys.push(prop.key.value);
            }
        }
    }
    return keys;
}
function getArrayExpressionKeys(node) {
    const keys = [];
    for (const element of node.elements) {
        if (element && element.type === 'StringLiteral') {
            keys.push(element.value);
        }
    }
    return keys;
}
function getObjectOrArrayExpressionKeys(value) {
    if (value.type === 'ArrayExpression') {
        return getArrayExpressionKeys(value);
    }
    if (value.type === 'ObjectExpression') {
        return getObjectExpressionKeys(value);
    }
    return [];
}
const templateUsageCheckCache = new lruCache(512);
function resolveTemplateUsageCheckString(sfc, isTS) {
    const { content } = sfc.template;
    const cached = templateUsageCheckCache.get(content);
    if (cached) {
        return cached;
    }
    let code = '';
    parseHTML(content, Object.assign(Object.assign({}, baseOptions), { start(tag, attrs) {
            if (!isBuiltInTag(tag) && !isReservedTag(tag)) {
                code += `,${camelize(tag)},${capitalize(camelize(tag))}`;
            }
            for (let i = 0; i < attrs.length; i++) {
                const { name, value } = attrs[i];
                if (dirRE.test(name)) {
                    const baseName = onRE.test(name)
                        ? 'on'
                        : slotRE.test(name)
                            ? 'slot'
                            : bindRE.test(name)
                                ? 'bind'
                                : name.replace(dirRE, '');
                    if (!isBuiltInDir$1(baseName)) {
                        code += `,v${capitalize(camelize(baseName))}`;
                    }
                    if (value) {
                        code += `,${processExp(value, isTS, baseName)}`;
                    }
                }
            }
        },
        chars(text) {
            const res = parseText(text);
            if (res) {
                code += `,${processExp(res.expression, isTS)}`;
            }
        } }));
    code += ';';
    templateUsageCheckCache.set(content, code);
    return code;
}
const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
function processExp(exp, isTS, dir) {
    if (isTS && / as\s+\w|<.*>|:/.test(exp)) {
        if (dir === 'slot') {
            exp = `(${exp})=>{}`;
        }
        else if (dir === 'on') {
            exp = `()=>{${exp}}`;
        }
        else if (dir === 'for') {
            const inMatch = exp.match(forAliasRE);
            if (inMatch) {
                const [, LHS, RHS] = inMatch;
                return processExp(`(${LHS})=>{}`, true) + processExp(RHS, true);
            }
        }
        let ret = '';
        // has potential type cast or generic arguments that uses types
        const ast = parser$1.parseExpression(exp, { plugins: ['typescript'] });
        walkIdentifiers(ast, node => {
            ret += `,` + node.name;
        });
        return ret;
    }
    return stripStrings(exp);
}
function stripStrings(exp) {
    return exp
        .replace(/'[^']*'|"[^"]*"/g, '')
        .replace(/`[^`]+`/g, stripTemplateString);
}
function stripTemplateString(str) {
    const interpMatch = str.match(/\${[^}]+}/g);
    if (interpMatch) {
        return interpMatch.map(m => m.slice(2, -1)).join(',');
    }
    return '';
}
function isImportUsed(local, sfc, isTS) {
    return new RegExp(
    // #4274 escape $ since it's a special char in regex
    // (and is the only regex special char that is valid in identifiers)
    `[^\\w$_]${local.replace(/\$/g, '\\$')}[^\\w$_]`).test(resolveTemplateUsageCheckString(sfc, isTS));
}
/**
 * Note: this comparison assumes the prev/next script are already identical,
 * and only checks the special case where <script setup> unused import
 * pruning result changes due to template changes.
 */
function hmrShouldReload(prevImports, next) {
    if (!next.scriptSetup) {
        return false;
    }
    const isTS = next.scriptSetup.lang === 'ts' || next.scriptSetup.lang === 'tsx';
    // for each previous import, check if its used status remain the same based on
    // the next descriptor's template
    for (const key in prevImports) {
        // if an import was previous unused, but now is used, we need to force
        // reload so that the script now includes that import.
        if (!prevImports[key].isUsedInTemplate && isImportUsed(key, next, isTS)) {
            return true;
        }
    }
    return false;
}

const cache = new lruCache(100);
const splitRE = /\r?\n/g;
const emptyRE = /^(?:\/\/)?\s*$/;
function parse(options) {
    const { source, filename = DEFAULT_FILENAME, compiler, compilerParseOptions = { pad: false }, sourceRoot = '', needMap = true, sourceMap = needMap } = options;
    const cacheKey = hashSum(filename + source + JSON.stringify(compilerParseOptions));
    let output = cache.get(cacheKey);
    if (output) {
        return output;
    }
    if (compiler) {
        // user-provided compiler
        output = compiler.parseComponent(source, compilerParseOptions);
    }
    else {
        // use built-in compiler
        output = parseComponent(source, compilerParseOptions);
    }
    output.filename = filename;
    // parse CSS vars
    output.cssVars = parseCssVars(output);
    output.shouldForceReload = prevImports => hmrShouldReload(prevImports, output);
    if (sourceMap) {
        if (output.script && !output.script.src) {
            output.script.map = generateSourceMap(filename, source, output.script.content, sourceRoot, compilerParseOptions.pad);
        }
        if (output.styles) {
            output.styles.forEach(style => {
                if (!style.src) {
                    style.map = generateSourceMap(filename, source, style.content, sourceRoot, compilerParseOptions.pad);
                }
            });
        }
    }
    cache.set(cacheKey, output);
    return output;
}
function generateSourceMap(filename, source, generated, sourceRoot, pad) {
    const map = new require$$0.SourceMapGenerator({
        file: filename.replace(/\\/g, '/'),
        sourceRoot: sourceRoot.replace(/\\/g, '/')
    });
    let offset = 0;
    if (!pad) {
        offset = source.split(generated).shift().split(splitRE).length - 1;
    }
    map.setSourceContent(filename, source);
    generated.split(splitRE).forEach((line, index) => {
        if (!emptyRE.test(line)) {
            map.addMapping({
                source: filename,
                original: {
                    line: index + 1 + offset,
                    column: 0
                },
                generated: {
                    line: index + 1,
                    column: 0
                }
            });
        }
    });
    return JSON.parse(map.toString());
}

function urlToRequire(url, transformAssetUrlsOption = {}) {
    const returnValue = `"${url}"`;
    // same logic as in transform-require.js
    const firstChar = url.charAt(0);
    if (firstChar === '~') {
        const secondChar = url.charAt(1);
        url = url.slice(secondChar === '/' ? 2 : 1);
    }
    if (isExternalUrl(url) || isDataUrl(url) || firstChar === '#') {
        return returnValue;
    }
    const uriParts = parseUriParts(url);
    if (transformAssetUrlsOption.base) {
        // explicit base - directly rewrite the url into absolute url
        // does not apply to absolute urls or urls that start with `@`
        // since they are aliases
        if (firstChar === '.' || firstChar === '~') {
            // Allow for full hostnames provided in options.base
            const base = parseUriParts(transformAssetUrlsOption.base);
            const protocol = base.protocol || '';
            const host = base.host ? protocol + '//' + base.host : '';
            const basePath = base.path || '/';
            // when packaged in the browser, path will be using the posix-
            // only version provided by rollup-plugin-node-builtins.
            return `"${host}${(path__default["default"].posix || path__default["default"]).join(basePath, uriParts.path + (uriParts.hash || ''))}"`;
        }
    }
    if (transformAssetUrlsOption.includeAbsolute ||
        firstChar === '.' ||
        firstChar === '~' ||
        firstChar === '@') {
        if (!uriParts.hash) {
            return `require("${url}")`;
        }
        else {
            // support uri fragment case by excluding it from
            // the require and instead appending it as string;
            // assuming that the path part is sufficient according to
            // the above caseing(t.i. no protocol-auth-host parts expected)
            return `require("${uriParts.path}") + "${uriParts.hash}"`;
        }
    }
    return returnValue;
}
/**
 * vuejs/component-compiler-utils#22 Support uri fragment in transformed require
 * @param urlString an url as a string
 */
function parseUriParts(urlString) {
    // initialize return value
    const returnValue = url.parse('');
    if (urlString) {
        // A TypeError is thrown if urlString is not a string
        // @see https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost
        if ('string' === typeof urlString) {
            // check is an uri
            return url.parse(urlString, false, true); // take apart the uri
        }
    }
    return returnValue;
}
const externalRE = /^(https?:)?\/\//;
function isExternalUrl(url) {
    return externalRE.test(url);
}
const dataUrlRE = /^\s*data:/i;
function isDataUrl(url) {
    return dataUrlRE.test(url);
}

// vue compiler module for transforming `<tag>:<attribute>` to `require`
const defaultOptions = {
    audio: 'src',
    video: ['src', 'poster'],
    source: 'src',
    img: 'src',
    image: ['xlink:href', 'href'],
    use: ['xlink:href', 'href']
};
var assetUrlsModule = (userOptions, transformAssetUrlsOption) => {
    const options = userOptions
        ? Object.assign({}, defaultOptions, userOptions)
        : defaultOptions;
    return {
        postTransformNode: (node) => {
            transform$1(node, options, transformAssetUrlsOption);
        }
    };
};
function transform$1(node, options, transformAssetUrlsOption) {
    if (node.type !== 1 || !node.attrs)
        return;
    for (const tag in options) {
        if (tag === '*' || node.tag === tag) {
            const attributes = options[tag];
            if (typeof attributes === 'string') {
                node.attrs.some(attr => rewrite(attr, attributes, transformAssetUrlsOption));
            }
            else if (Array.isArray(attributes)) {
                attributes.forEach(item => node.attrs.some(attr => rewrite(attr, item, transformAssetUrlsOption)));
            }
        }
    }
}
function rewrite(attr, name, transformAssetUrlsOption) {
    if (attr.name === name) {
        const value = attr.value;
        // only transform static URLs
        if (value.charAt(0) === '"' && value.charAt(value.length - 1) === '"') {
            attr.value = urlToRequire(value.slice(1, -1), transformAssetUrlsOption);
            return true;
        }
    }
    return false;
}

// vue compiler module for transforming `img:srcset` to a number of `require`s
var srcsetModule = (transformAssetUrlsOptions) => ({
    postTransformNode: (node) => {
        transform(node, transformAssetUrlsOptions);
    }
});
// http://w3c.github.io/html/semantics-embedded-content.html#ref-for-image-candidate-string-5
const escapedSpaceCharacters = /( |\\t|\\n|\\f|\\r)+/g;
function transform(node, transformAssetUrlsOptions) {
    if (node.type !== 1 || !node.attrs) {
        return;
    }
    if (node.tag === 'img' || node.tag === 'source') {
        node.attrs.forEach(attr => {
            if (attr.name === 'srcset') {
                // same logic as in transform-require.js
                const value = attr.value;
                const isStatic = value.charAt(0) === '"' && value.charAt(value.length - 1) === '"';
                if (!isStatic) {
                    return;
                }
                const imageCandidates = value
                    .slice(1, -1)
                    .split(',')
                    .map(s => {
                    // The attribute value arrives here with all whitespace, except
                    // normal spaces, represented by escape sequences
                    const [url, descriptor] = s
                        .replace(escapedSpaceCharacters, ' ')
                        .trim()
                        .split(' ', 2);
                    return {
                        require: urlToRequire(url, transformAssetUrlsOptions),
                        descriptor
                    };
                });
                // "require(url1)"
                // "require(url1) 1x"
                // "require(url1), require(url2)"
                // "require(url1), require(url2) 2x"
                // "require(url1) 1x, require(url2)"
                // "require(url1) 1x, require(url2) 2x"
                const code = imageCandidates
                    .map(({ require, descriptor }) => `${require} + "${descriptor ? ' ' + descriptor : ''}, " + `)
                    .join('')
                    .slice(0, -6)
                    .concat('"')
                    .replace(/ \+ ""$/, '');
                attr.value = code;
            }
        });
    }
}

var consolidate$2 = {exports: {}};

function commonjsRequire(path) {
	throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
}

var consolidate$1 = {exports: {}};

(function (module, exports) {
	/*
	 * Engines which do not support caching of their file contents
	 * should use the `read()` function defined in consolidate.js
	 * On top of this, when an engine compiles to a `Function`,
	 * these functions should either be cached within consolidate.js
	 * or the engine itself via `options.cache`. This will allow
	 * users and frameworks to pass `options.cache = true` for
	 * `NODE_ENV=production`, however edit the file(s) without
	 * re-loading the application in development.
	 */

	/**
	 * Module dependencies.
	 */

	var fs = require$$0__default["default"];
	var path = path__default["default"];
	var util = require$$2__default["default"];

	var join = path.join;
	var resolve = path.resolve;
	var extname = path.extname;
	var dirname = path.dirname;
	var isAbsolute = path.isAbsolute;

	var readCache = {};

	/**
	 * Require cache.
	 */

	var cacheStore = {};

	/**
	 * Require cache.
	 */

	var requires = {};

	/**
	 * Clear the cache.
	 *
	 * @api public
	 */

	exports.clearCache = function() {
	  readCache = {};
	  cacheStore = {};
	};

	/**
	 * Conditionally cache `compiled` template based
	 * on the `options` filename and `.cache` boolean.
	 *
	 * @param {Object} options
	 * @param {Function} compiled
	 * @return {Function}
	 * @api private
	 */

	function cache(options, compiled) {
	  // cachable
	  if (compiled && options.filename && options.cache) {
	    delete readCache[options.filename];
	    cacheStore[options.filename] = compiled;
	    return compiled;
	  }

	  // check cache
	  if (options.filename && options.cache) {
	    return cacheStore[options.filename];
	  }

	  return compiled;
	}

	/**
	 * Read `path` with `options` with
	 * callback `(err, str)`. When `options.cache`
	 * is true the template string will be cached.
	 *
	 * @param {String} options
	 * @param {Function} cb
	 * @api private
	 */

	function read(path, options, cb) {
	  var str = readCache[path];
	  var cached = options.cache && str && typeof str === 'string';

	  // cached (only if cached is a string and not a compiled template function)
	  if (cached) return cb(null, str);

	  // read
	  fs.readFile(path, 'utf8', function(err, str) {
	    if (err) return cb(err);
	    // remove extraneous utf8 BOM marker
	    str = str.replace(/^\uFEFF/, '');
	    if (options.cache) readCache[path] = str;
	    cb(null, str);
	  });
	}

	/**
	 * Read `path` with `options` with
	 * callback `(err, str)`. When `options.cache`
	 * is true the partial string will be cached.
	 *
	 * @param {String} options
	 * @param {Function} fn
	 * @api private
	 */

	function readPartials(path, options, cb) {
	  if (!options.partials) return cb();
	  var keys = Object.keys(options.partials);
	  var partials = {};

	  function next(index) {
	    if (index === keys.length) return cb(null, partials);
	    var key = keys[index];
	    var partialPath = options.partials[key];

	    if (partialPath === undefined || partialPath === null || partialPath === false) {
	      return next(++index);
	    }

	    var file;
	    if (isAbsolute(partialPath)) {
	      if (extname(partialPath) !== '') {
	        file = partialPath;
	      } else {
	        file = join(partialPath + extname(path));
	      }
	    } else {
	      file = join(dirname(path), partialPath + extname(path));
	    }

	    read(file, options, function(err, str) {
	      if (err) return cb(err);
	      partials[key] = str;
	      next(++index);
	    });
	  }

	  next(0);
	}

	/**
	 * promisify
	 */
	function promisify(cb, fn) {
	  return new Promise(function(resolve, reject) {
	    cb = cb || function(err, html) {
	      if (err) {
	        return reject(err);
	      }
	      resolve(html);
	    };
	    fn(cb);
	  });
	}

	/**
	 * fromStringRenderer
	 */

	function fromStringRenderer(name) {
	  return function(path, options, cb) {
	    options.filename = path;

	    return promisify(cb, function(cb) {
	      readPartials(path, options, function(err, partials) {
	        var extend = (requires.extend || (requires.extend = require$$2__default["default"]._extend));
	        var opts = extend({}, options);
	        opts.partials = partials;
	        if (err) return cb(err);
	        if (cache(opts)) {
	          exports[name].render('', opts, cb);
	        } else {
	          read(path, opts, function(err, str) {
	            if (err) return cb(err);
	            exports[name].render(str, opts, cb);
	          });
	        }
	      });
	    });
	  };
	}

	/**
	 * velocity support.
	 */

	exports.velocityjs = fromStringRenderer('velocityjs');

	/**
	 * velocity string support.
	 */

	exports.velocityjs.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.velocityjs || (requires.velocityjs = require('velocityjs'));
	    try {
	      options.locals = options;
	      cb(null, engine.render(str, options).trimLeft());
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Liquid support.
	 */

	exports.liquid = fromStringRenderer('liquid');

	/**
	 * Liquid string support.
	 */

	/**
	 * Note that in order to get filters and custom tags we've had to push
	 * all user-defined locals down into @locals. However, just to make things
	 * backwards-compatible, any property of `options` that is left after
	 * processing and removing `locals`, `meta`, `filters`, `customTags` and
	 * `includeDir` will also become a local.
	 */

	function _renderTinyliquid(engine, str, options, cb) {
	  var context = engine.newContext();
	  var k;

	  /**
	   * Note that there's a bug in the library that doesn't allow us to pass
	   * the locals to newContext(), hence looping through the keys:
	   */

	  if (options.locals) {
	    for (k in options.locals) {
	      context.setLocals(k, options.locals[k]);
	    }
	    delete options.locals;
	  }

	  if (options.meta) {
	    context.setLocals('page', options.meta);
	    delete options.meta;
	  }

	  /**
	   * Add any defined filters:
	   */

	  if (options.filters) {
	    for (k in options.filters) {
	      context.setFilter(k, options.filters[k]);
	    }
	    delete options.filters;
	  }

	  /**
	   * Set up a callback for the include directory:
	   */

	  var includeDir = options.includeDir || process.cwd();

	  context.onInclude(function(name, callback) {
	    var extname = path.extname(name) ? '' : '.liquid';
	    var filename = path.resolve(includeDir, name + extname);

	    fs.readFile(filename, {encoding: 'utf8'}, function(err, data) {
	      if (err) return callback(err);
	      callback(null, engine.parse(data));
	    });
	  });
	  delete options.includeDir;

	  /**
	   * The custom tag functions need to have their results pushed back
	   * through the parser, so set up a shim before calling the provided
	   * callback:
	   */

	  var compileOptions = {
	    customTags: {}
	  };

	  if (options.customTags) {
	    var tagFunctions = options.customTags;

	    for (k in options.customTags) {
	      /*Tell jshint there's no problem with having this function in the loop */
	      /*jshint -W083 */
	      compileOptions.customTags[k] = function(context, name, body) {
	        var tpl = tagFunctions[name](body.trim());
	        context.astStack.push(engine.parse(tpl));
	      };
	      /*jshint +W083 */
	    }
	    delete options.customTags;
	  }

	  /**
	   * Now anything left in `options` becomes a local:
	   */

	  for (k in options) {
	    context.setLocals(k, options[k]);
	  }

	  /**
	   * Finally, execute the template:
	   */

	  var tmpl = cache(context) || cache(context, engine.compile(str, compileOptions));
	  tmpl(context, cb);
	}

	exports.liquid.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.liquid;
	    var Liquid;

	    try {
	      // set up tinyliquid engine
	      engine = requires.liquid = require('tinyliquid');

	      // use tinyliquid engine
	      _renderTinyliquid(engine, str, options, cb);

	      return;

	    } catch (err) {

	      // set up liquid-node engine
	      try {
	        Liquid = requires.liquid = require('liquid-node');
	        engine = new Liquid.Engine();
	      } catch (err) {
	        throw err;
	      }

	    }

	    // use liquid-node engine
	    try {
	      var locals = options.locals || {};

	      if (options.meta) {
	        locals.pages = options.meta;
	        delete options.meta;
	      }

	      /**
	       * Add any defined filters:
	       */

	      if (options.filters) {
	        engine.registerFilters(options.filters);
	        delete options.filters;
	      }

	      /**
	       * Set up a callback for the include directory:
	       */

	      var includeDir = options.includeDir || process.cwd();
	      engine.fileSystem = new Liquid.LocalFileSystem(includeDir, 'liquid');
	      delete options.includeDir;

	      /**
	       * The custom tag functions need to have their results pushed back
	       * through the parser, so set up a shim before calling the provided
	       * callback:
	       */

	      if (options.customTags) {
	        var tagFunctions = options.customTags;

	        for (k in options.customTags) {
	          engine.registerTag(k, tagFunctions[k]);
	        }
	        delete options.customTags;
	      }

	      /**
	       * Now anything left in `options` becomes a local:
	       */

	      for (var k in options) {
	        locals[k] = options[k];
	      }

	      /**
	       * Finally, execute the template:
	       */

	      return engine
	        .parseAndRender(str, locals)
	        .nodeify(function(err, result) {
	          if (err) {
	            throw new Error(err);
	          } else {
	            return cb(null, result);
	          }
	        });

	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Jade support.
	 */

	exports.jade = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.jade;
	    if (!engine) {
	      try {
	        engine = requires.jade = require('jade');
	      } catch (err) {
	        try {
	          engine = requires.jade = require('then-jade');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      var tmpl = cache(options) || cache(options, engine.compileFile(path, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Jade string support.
	 */

	exports.jade.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.jade;
	    if (!engine) {
	      try {
	        engine = requires.jade = require('jade');
	      } catch (err) {
	        try {
	          engine = requires.jade = require('then-jade');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Dust support.
	 */

	exports.dust = fromStringRenderer('dust');

	/**
	 * Dust string support.
	 */

	exports.dust.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.dust;
	    if (!engine) {
	      try {
	        engine = requires.dust = require('dust');
	      } catch (err) {
	        try {
	          engine = requires.dust = require('dustjs-helpers');
	        } catch (err) {
	          engine = requires.dust = require('dustjs-linkedin');
	        }
	      }
	    }

	    var ext = 'dust';
	    var views = '.';

	    if (options) {
	      if (options.ext) ext = options.ext;
	      if (options.views) views = options.views;
	      if (options.settings && options.settings.views) views = options.settings.views;
	    }
	    if (!options || (options && !options.cache)) engine.cache = {};

	    engine.onLoad = function(path, callback) {
	      if (extname(path) === '') path += '.' + ext;
	      if (path[0] !== '/') path = views + '/' + path;
	      read(path, options, callback);
	    };

	    try {
	      var templateName;
	      if (options.filename) {
	        templateName = options.filename.replace(new RegExp('^' + views + '/'), '').replace(new RegExp('\\.' + ext), '');
	      }

	      var tmpl = cache(options) || cache(options, engine.compileFn(str, templateName));
	      tmpl(options, cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Swig support.
	 */

	exports.swig = fromStringRenderer('swig');

	/**
	 * Swig string support.
	 */

	exports.swig.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.swig;
	    if (!engine) {
	      try {
	        engine = requires.swig = require('swig');
	      } catch (err) {
	        try {
	          engine = requires.swig = require('swig-templates');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      if (options.cache === true) options.cache = 'memory';
	      engine.setDefaults({ cache: options.cache });
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Razor support.
	 */

	exports.razor = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.razor;
	    if (!engine) {
	      try {
	        engine = requires.razor = require('razor-tmpl');

	      } catch (err) {

	        throw err;

	      }
	    }
	    try {

	      var tmpl = cache(options) || cache(options, (locals) => {
	        console.log('Rendering razor file', path);
	        return engine.renderFileSync(path, locals);
	      });
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * razor string support.
	 */

	exports.razor.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {

	    try {
	      var engine = requires.razor = require('razor-tmpl');
	    } catch (err) {
	      throw err;
	    }

	    try {
	      var tf = engine.compile(str);
	      var tmpl = cache(options) || cache(options, tf);
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Atpl support.
	 */

	exports.atpl = fromStringRenderer('atpl');

	/**
	 * Atpl string support.
	 */

	exports.atpl.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.atpl || (requires.atpl = require('atpl'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Liquor support,
	 */

	exports.liquor = fromStringRenderer('liquor');

	/**
	 * Liquor string support.
	 */

	exports.liquor.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.liquor || (requires.liquor = require('liquor'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Twig support.
	 */

	exports.twig = fromStringRenderer('twig');

	/**
	 * Twig string support.
	 */

	exports.twig.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.twig || (requires.twig = require('twig').twig);
	    var templateData = {
	      data: str,
	      allowInlineIncludes: options.allowInlineIncludes,
	      namespaces: options.namespaces,
	      path: options.path
	    };
	    try {
	      var tmpl = cache(templateData) || cache(templateData, engine(templateData));
	      cb(null, tmpl.render(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * EJS support.
	 */

	exports.ejs = fromStringRenderer('ejs');

	/**
	 * EJS string support.
	 */

	exports.ejs.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.ejs || (requires.ejs = require('ejs'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Eco support.
	 */

	exports.eco = fromStringRenderer('eco');

	/**
	 * Eco string support.
	 */

	exports.eco.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.eco || (requires.eco = require('eco'));
	    try {
	      cb(null, engine.render(str, options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Jazz support.
	 */

	exports.jazz = fromStringRenderer('jazz');

	/**
	 * Jazz string support.
	 */

	exports.jazz.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.jazz || (requires.jazz = require('jazz'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      tmpl.eval(options, function(str) {
	        cb(null, str);
	      });
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * JQTPL support.
	 */

	exports.jqtpl = fromStringRenderer('jqtpl');

	/**
	 * JQTPL string support.
	 */

	exports.jqtpl.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.jqtpl || (requires.jqtpl = require('jqtpl'));
	    try {
	      engine.template(str, str);
	      cb(null, engine.tmpl(str, options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Haml support.
	 */

	exports.haml = fromStringRenderer('haml');

	/**
	 * Haml string support.
	 */

	exports.haml.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.haml || (requires.haml = require('hamljs'));
	    try {
	      options.locals = options;
	      cb(null, engine.render(str, options).trimLeft());
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Hamlet support.
	 */

	exports.hamlet = fromStringRenderer('hamlet');

	/**
	 * Hamlet string support.
	 */

	exports.hamlet.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.hamlet || (requires.hamlet = require('hamlet'));
	    try {
	      options.locals = options;
	      cb(null, engine.render(str, options).trimLeft());
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Whiskers support.
	 */

	exports.whiskers = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.whiskers || (requires.whiskers = require('whiskers'));
	    engine.__express(path, options, cb);
	  });
	};

	/**
	 * Whiskers string support.
	 */

	exports.whiskers.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.whiskers || (requires.whiskers = require('whiskers'));
	    try {
	      cb(null, engine.render(str, options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Coffee-HAML support.
	 */

	exports['haml-coffee'] = fromStringRenderer('haml-coffee');

	/**
	 * Coffee-HAML string support.
	 */

	exports['haml-coffee'].render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires['haml-coffee'] || (requires['haml-coffee'] = require('haml-coffee'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Hogan support.
	 */

	exports.hogan = fromStringRenderer('hogan');

	/**
	 * Hogan string support.
	 */

	exports.hogan.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.hogan || (requires.hogan = require('hogan.js'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl.render(options, options.partials));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * templayed.js support.
	 */

	exports.templayed = fromStringRenderer('templayed');

	/**
	 * templayed.js string support.
	 */

	exports.templayed.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.templayed || (requires.templayed = require('templayed'));
	    try {
	      var tmpl = cache(options) || cache(options, engine(str));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Handlebars support.
	 */

	exports.handlebars = fromStringRenderer('handlebars');

	/**
	 * Handlebars string support.
	 */

	exports.handlebars.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.handlebars || (requires.handlebars = require('handlebars'));
	    try {
	      for (var partial in options.partials) {
	        engine.registerPartial(partial, options.partials[partial]);
	      }
	      for (var helper in options.helpers) {
	        engine.registerHelper(helper, options.helpers[helper]);
	      }
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Underscore support.
	 */

	exports.underscore = fromStringRenderer('underscore');

	/**
	 * Underscore string support.
	 */

	exports.underscore.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.underscore || (requires.underscore = require('underscore'));
	    try {
	      const partials = {};
	      for (var partial in options.partials) {
	        partials[partial] = engine.template(options.partials[partial]);
	      }
	      options.partials = partials;
	      var tmpl = cache(options) || cache(options, engine.template(str, null, options));
	      cb(null, tmpl(options).replace(/\n$/, ''));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Lodash support.
	 */

	exports.lodash = fromStringRenderer('lodash');

	/**
	 * Lodash string support.
	 */

	exports.lodash.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.lodash || (requires.lodash = require('lodash'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.template(str, options));
	      cb(null, tmpl(options).replace(/\n$/, ''));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Pug support. (formerly Jade)
	 */

	exports.pug = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.pug;
	    if (!engine) {
	      try {
	        engine = requires.pug = require('pug');
	      } catch (err) {
	        try {
	          engine = requires.pug = require('then-pug');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      var tmpl = cache(options) || cache(options, engine.compileFile(path, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Pug string support.
	 */

	exports.pug.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.pug;
	    if (!engine) {
	      try {
	        engine = requires.pug = require('pug');
	      } catch (err) {
	        try {
	          engine = requires.pug = require('then-pug');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * QEJS support.
	 */

	exports.qejs = fromStringRenderer('qejs');

	/**
	 * QEJS string support.
	 */

	exports.qejs.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    try {
	      var engine = requires.qejs || (requires.qejs = require('qejs'));
	      engine.render(str, options).then(function(result) {
	        cb(null, result);
	      }, function(err) {
	        cb(err);
	      }).done();
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Walrus support.
	 */

	exports.walrus = fromStringRenderer('walrus');

	/**
	 * Walrus string support.
	 */

	exports.walrus.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.walrus || (requires.walrus = require('walrus'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.parse(str));
	      cb(null, tmpl.compile(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Mustache support.
	 */

	exports.mustache = fromStringRenderer('mustache');

	/**
	 * Mustache string support.
	 */

	exports.mustache.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.mustache || (requires.mustache = require('mustache'));
	    try {
	      cb(null, engine.render(str, options, options.partials));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Just support.
	 */

	exports.just = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.just;
	    if (!engine) {
	      var JUST = require('just');
	      engine = requires.just = new JUST();
	    }
	    engine.configure({ useCache: options.cache });
	    engine.render(path, options, cb);
	  });
	};

	/**
	 * Just string support.
	 */

	exports.just.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var JUST = require('just');
	    var engine = new JUST({ root: { page: str }});
	    engine.render('page', options, cb);
	  });
	};

	/**
	 * ECT support.
	 */

	exports.ect = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.ect;
	    if (!engine) {
	      var ECT = require('ect');
	      engine = requires.ect = new ECT(options);
	    }
	    engine.configure({ cache: options.cache });
	    engine.render(path, options, cb);
	  });
	};

	/**
	 * ECT string support.
	 */

	exports.ect.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var ECT = require('ect');
	    var engine = new ECT({ root: { page: str }});
	    engine.render('page', options, cb);
	  });
	};

	/**
	 * mote support.
	 */

	exports.mote = fromStringRenderer('mote');

	/**
	 * mote string support.
	 */

	exports.mote.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.mote || (requires.mote = require('mote'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Toffee support.
	 */

	exports.toffee = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var toffee = requires.toffee || (requires.toffee = require('toffee'));
	    toffee.__consolidate_engine_render(path, options, cb);
	  });
	};

	/**
	 * Toffee string support.
	 */

	exports.toffee.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.toffee || (requires.toffee = require('toffee'));
	    try {
	      engine.str_render(str, options, cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * doT support.
	 */

	exports.dot = fromStringRenderer('dot');

	/**
	 * doT string support.
	 */

	exports.dot.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.dot || (requires.dot = require('dot'));
	    var extend = (requires.extend || (requires.extend = require$$2__default["default"]._extend));
	    try {
	      var settings = {};
	      settings = extend(settings, engine.templateSettings);
	      settings = extend(settings, options ? options.dot : {});
	      var tmpl = cache(options) || cache(options, engine.template(str, settings, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * bracket support.
	 */

	exports.bracket = fromStringRenderer('bracket');

	/**
	 * bracket string support.
	 */

	exports.bracket.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.bracket || (requires.bracket = require('bracket-template'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.default.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Ractive support.
	 */

	exports.ractive = fromStringRenderer('ractive');

	/**
	 * Ractive string support.
	 */

	exports.ractive.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var Engine = requires.ractive || (requires.ractive = require('ractive'));

	    var template = cache(options) || cache(options, Engine.parse(str));
	    options.template = template;

	    if (options.data === null || options.data === undefined) {
	      var extend = (requires.extend || (requires.extend = require$$2__default["default"]._extend));

	      // Shallow clone the options object
	      options.data = extend({}, options);

	      // Remove consolidate-specific properties from the clone
	      var i;
	      var length;
	      var properties = ['template', 'filename', 'cache', 'partials'];
	      for (i = 0, length = properties.length; i < length; i++) {
	        var property = properties[i];
	        delete options.data[property];
	      }
	    }

	    try {
	      cb(null, new Engine(options).toHTML());
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Nunjucks support.
	 */

	exports.nunjucks = fromStringRenderer('nunjucks');

	/**
	 * Nunjucks string support.
	 */

	exports.nunjucks.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {

	    try {

	      var engine = options.nunjucksEnv || requires.nunjucks || (requires.nunjucks = require('nunjucks'));

	      var env = engine;

	      // deprecated fallback support for express
	      // <https://github.com/tj/consolidate.js/pull/152>
	      // <https://github.com/tj/consolidate.js/pull/224>
	      if (options.settings && options.settings.views) {
	        env = engine.configure(options.settings.views);
	      } else if (options.nunjucks && options.nunjucks.configure) {
	        env = engine.configure.apply(engine, options.nunjucks.configure);
	      }

	      //
	      // because `renderString` does not initiate loaders
	      // we must manually create a loader for it based off
	      // either `options.settings.views` or `options.nunjucks` or `options.nunjucks.root`
	      //
	      // <https://github.com/mozilla/nunjucks/issues/730>
	      // <https://github.com/crocodilejs/node-email-templates/issues/182>
	      //

	      // so instead we simply check if we passed a custom loader
	      // otherwise we create a simple file based loader
	      if (options.loader) {
	        env = new engine.Environment(options.loader);
	      } else if (options.settings && options.settings.views) {
	        env = new engine.Environment(
	          new engine.FileSystemLoader(options.settings.views)
	        );
	      } else if (options.nunjucks && options.nunjucks.loader) {
	        if (typeof options.nunjucks.loader === 'string') {
	          env = new engine.Environment(new engine.FileSystemLoader(options.nunjucks.loader));
	        } else {
	          env = new engine.Environment(
	            new engine.FileSystemLoader(
	              options.nunjucks.loader[0],
	              options.nunjucks.loader[1]
	            )
	          );
	        }
	      }

	      env.renderString(str, options, cb);
	    } catch (err) {
	      throw cb(err);
	    }
	  });
	};

	/**
	 * HTMLing support.
	 */

	exports.htmling = fromStringRenderer('htmling');

	/**
	 * HTMLing string support.
	 */

	exports.htmling.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.htmling || (requires.htmling = require('htmling'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.string(str));
	      cb(null, tmpl.render(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 *  Rendering function
	 */
	function requireReact(module, filename) {
	  var babel = requires.babel || (requires.babel = require('babel-core'));

	  var compiled = babel.transformFileSync(filename, { presets: [ 'react' ] }).code;

	  return module._compile(compiled, filename);
	}

	exports.requireReact = requireReact;

	/**
	 *  Converting a string into a node module.
	 */
	function requireReactString(src, filename) {
	  var babel = requires.babel || (requires.babel = require('babel-core'));

	  if (!filename) filename = '';
	  var m = new module.constructor();
	  filename = filename || '';

	  // Compile Using React
	  var compiled = babel.transform(src, { presets: [ 'react' ] }).code;

	  // Compile as a module
	  m.paths = module.paths;
	  m._compile(compiled, filename);

	  return m.exports;
	}

	/**
	 * A naive helper to replace {{tags}} with options.tags content
	 */
	function reactBaseTmpl(data, options) {

	  var exp;
	  var regex;

	  // Iterates through the keys in file object
	  // and interpolate / replace {{key}} with it's value
	  for (var k in options) {
	    if (options.hasOwnProperty(k)) {
	      exp = '{{' + k + '}}';
	      regex = new RegExp(exp, 'g');
	      if (data.match(regex)) {
	        data = data.replace(regex, options[k]);
	      }
	    }
	  }

	  return data;
	}

	/**
	* Plates Support.
	*/

	exports.plates = fromStringRenderer('plates');

	/**
	* Plates string support.
	*/

	exports.plates.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.plates || (requires.plates = require('plates'));
	    var map = options.map || undefined;
	    try {
	      var tmpl = engine.bind(str, options, map);
	      cb(null, tmpl);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 *  The main render parser for React bsaed templates
	 */
	function reactRenderer(type) {

	  if (commonjsRequire.extensions) {

	    // Ensure JSX is transformed on require
	    if (!commonjsRequire.extensions['.jsx']) {
	      commonjsRequire.extensions['.jsx'] = requireReact;
	    }

	    // Supporting .react extension as well as test cases
	    // Using .react extension is not recommended.
	    if (!commonjsRequire.extensions['.react']) {
	      commonjsRequire.extensions['.react'] = requireReact;
	    }

	  }

	  // Return rendering fx
	  return function(str, options, cb) {
	    return promisify(cb, function(cb) {
	      // React Import
	      var ReactDOM = requires.ReactDOM || (requires.ReactDOM = require('react-dom/server'));
	      var react = requires.react || (requires.react = require('react'));

	      // Assign HTML Base
	      var base = options.base;
	      delete options.base;

	      var enableCache = options.cache;
	      delete options.cache;

	      var isNonStatic = options.isNonStatic;
	      delete options.isNonStatic;

	      // Start Conversion
	      try {

	        var Code;
	        var Factory;

	        var baseStr;
	        var content;
	        var parsed;

	        if (!cache(options)) {
	          // Parsing
	          if (type === 'path') {
	            var path = resolve(str);
	            delete require.cache[path];
	            Code = commonjsRequire(path);
	          } else {
	            Code = requireReactString(str);
	          }
	          Factory = cache(options, react.createFactory(Code));

	        } else {
	          Factory = cache(options);
	        }

	        parsed = new Factory(options);
	        content = (isNonStatic) ? ReactDOM.renderToString(parsed) : ReactDOM.renderToStaticMarkup(parsed);

	        if (base) {
	          baseStr = readCache[str] || fs.readFileSync(resolve(base), 'utf8');

	          if (enableCache) {
	            readCache[str] = baseStr;
	          }

	          options.content = content;
	          content = reactBaseTmpl(baseStr, options);
	        }

	        cb(null, content);

	      } catch (err) {
	        cb(err);
	      }
	    });
	  };
	}

	/**
	 * React JS Support
	 */
	exports.react = reactRenderer('path');

	/**
	 * React JS string support.
	 */
	exports.react.render = reactRenderer('string');

	/**
	 * ARC-templates support.
	 */

	exports['arc-templates'] = fromStringRenderer('arc-templates');

	/**
	 * ARC-templates string support.
	 */

	exports['arc-templates'].render = function(str, options, cb) {
	  var readFileWithOptions = util.promisify(read);
	  var consolidateFileSystem = {};
	  consolidateFileSystem.readFile = function(path) {
	    return readFileWithOptions(path, options);
	  };

	  return promisify(cb, function(cb) {
	    try {
	      var engine = requires['arc-templates'];
	      if (!engine) {
	        var Engine = require('arc-templates/dist/es5');
	        engine = requires['arc-templates'] = new Engine({ filesystem: consolidateFileSystem });
	      }

	      var compiler = cache(options) || cache(options, engine.compileString(str, options.filename));
	      compiler.then(function(func) { return func(options); })
	        .then(function(result) { cb(null, result.content); })
	        .catch(cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Vash support
	 */
	exports.vash = fromStringRenderer('vash');

	/**
	 * Vash string support
	 */
	exports.vash.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.vash || (requires.vash = require('vash'));

	    try {
	      // helper system : https://github.com/kirbysayshi/vash#helper-system
	      if (options.helpers) {
	        for (var key in options.helpers) {
	          if (!options.helpers.hasOwnProperty(key) || typeof options.helpers[key] !== 'function') {
	            continue;
	          }
	          engine.helpers[key] = options.helpers[key];
	        }
	      }

	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      tmpl(options, function sealLayout(err, ctx) {
	        if (err) cb(err);
	        ctx.finishLayout();
	        cb(null, ctx.toString().replace(/\n$/, ''));
	      });
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Slm support.
	 */

	exports.slm = fromStringRenderer('slm');

	/**
	 * Slm string support.
	 */

	exports.slm.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.slm || (requires.slm = require('slm'));

	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Marko support.
	 */

	exports.marko = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.marko || (requires.marko = require('marko'));
	    options.writeToDisk = !!options.cache;

	    try {
	      var tmpl = cache(options) || cache(options, engine.load(path, options));
	      tmpl.renderToString(options, cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Marko string support.
	 */

	exports.marko.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.marko || (requires.marko = require('marko'));
	    options.writeToDisk = !!options.cache;
	    options.filename = options.filename || 'string.marko';

	    try {
	      var tmpl = cache(options) || cache(options, engine.load(options.filename, str, options));
	      tmpl.renderToString(options, cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Teacup support.
	 */
	exports.teacup = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.teacup || (requires.teacup = require('teacup/lib/express'));
	    commonjsRequire.extensions['.teacup'] = commonjsRequire.extensions['.coffee'];
	    if (path[0] !== '/') {
	      path = join(process.cwd(), path);
	    }
	    if (!options.cache) {
	      var callback = cb;
	      cb = function() {
	        delete require.cache[path];
	        callback.apply(this, arguments);
	      };
	    }
	    engine.renderFile(path, options, cb);
	  });
	};

	/**
	 * Teacup string support.
	 */
	exports.teacup.render = function(str, options, cb) {
	  var coffee = require('coffee-script');
	  var vm = require('vm');
	  var sandbox = {
	    module: {exports: {}},
	    require: commonjsRequire
	  };
	  return promisify(cb, function(cb) {
	    vm.runInNewContext(coffee.compile(str), sandbox);
	    var tmpl = sandbox.module.exports;
	    cb(null, tmpl(options));
	  });
	};

	/**
	 * Squirrelly support.
	 */

	exports.squirrelly = fromStringRenderer('squirrelly');

	/**
	 * Squirrelly string support.
	 */

	exports.squirrelly.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.squirrelly || (requires.squirrelly = require('squirrelly'));
	    try {
	      for (var partial in options.partials) {
	        engine.definePartial(partial, options.partials[partial]);
	      }
	      for (var helper in options.helpers) {
	        engine.defineHelper(helper, options.helpers[helper]);
	      }
	      var tmpl = cache(options) || cache(options, engine.Compile(str, options));
	      cb(null, tmpl(options, engine));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};
	/**
	 * Twing support.
	 */

	exports.twing = fromStringRenderer('twing');

	/**
	 * Twing string support.
	 */ 

	exports.twing.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.twing || (requires.twing = require('twing'));
	    try {
	      new engine.TwingEnvironment(new engine.TwingLoaderNull()).createTemplate(str).then((twingTemplate) => {
	        twingTemplate.render(options).then((rendTmpl) => {
	          var tmpl = cache(options) || cache(options, rendTmpl);
	          cb(null, tmpl);
	        });
	      });
	    } catch (err) {
	      cb(err);
	    }
	  });
	};
	/**
	 * expose the instance of the engine
	 */
	exports.requires = requires;
} (consolidate$1, consolidate$1.exports));

(function (module) {
	module.exports = consolidate$1.exports;
} (consolidate$2));

var consolidate = /*@__PURE__*/getDefaultExportFromCjs(consolidate$2.exports);

let isStaticKey;
let isPlatformReservedTag$1;
const genStaticKeysCached = cached(genStaticKeys);
/**
 * Goal of the optimizer: walk the generated template AST tree
 * and detect sub-trees that are purely static, i.e. parts of
 * the DOM that never needs to change.
 *
 * Once we detect these sub-trees, we can:
 *
 * 1. Hoist them into constants, so that we no longer need to
 *    create fresh nodes for them on each re-render;
 * 2. Completely skip them in the patching process.
 */
function optimize$1(root, options) {
    if (!root)
        return;
    isStaticKey = genStaticKeysCached(options.staticKeys || '');
    isPlatformReservedTag$1 = options.isReservedTag || no;
    // first pass: mark all non-static nodes.
    markStatic(root);
    // second pass: mark static roots.
    markStaticRoots(root, false);
}
function genStaticKeys(keys) {
    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
        (keys ? ',' + keys : ''));
}
function markStatic(node) {
    node.static = isStatic(node);
    if (node.type === 1) {
        // do not make component slot content static. this avoids
        // 1. components not able to mutate slot nodes
        // 2. static slot content fails for hot-reloading
        if (!isPlatformReservedTag$1(node.tag) &&
            node.tag !== 'slot' &&
            node.attrsMap['inline-template'] == null) {
            return;
        }
        for (let i = 0, l = node.children.length; i < l; i++) {
            const child = node.children[i];
            markStatic(child);
            if (!child.static) {
                node.static = false;
            }
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                const block = node.ifConditions[i].block;
                markStatic(block);
                if (!block.static) {
                    node.static = false;
                }
            }
        }
    }
}
function markStaticRoots(node, isInFor) {
    if (node.type === 1) {
        if (node.static || node.once) {
            node.staticInFor = isInFor;
        }
        // For a node to qualify as a static root, it should have children that
        // are not just static text. Otherwise the cost of hoisting out will
        // outweigh the benefits and it's better off to just always render it fresh.
        if (node.static &&
            node.children.length &&
            !(node.children.length === 1 && node.children[0].type === 3)) {
            node.staticRoot = true;
            return;
        }
        else {
            node.staticRoot = false;
        }
        if (node.children) {
            for (let i = 0, l = node.children.length; i < l; i++) {
                markStaticRoots(node.children[i], isInFor || !!node.for);
            }
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                markStaticRoots(node.ifConditions[i].block, isInFor);
            }
        }
    }
}
function isStatic(node) {
    if (node.type === 2) {
        // expression
        return false;
    }
    if (node.type === 3) {
        // text
        return true;
    }
    return !!(node.pre ||
        (!node.hasBindings && // no dynamic bindings
            !node.if &&
            !node.for && // not v-if or v-for or v-else
            !isBuiltInTag(node.tag) && // not a built-in
            isPlatformReservedTag$1(node.tag) && // not a component
            !isDirectChildOfTemplateFor(node) &&
            Object.keys(node).every(isStaticKey)));
}
function isDirectChildOfTemplateFor(node) {
    while (node.parent) {
        node = node.parent;
        if (node.tag !== 'template') {
            return false;
        }
        if (node.for) {
            return true;
        }
    }
    return false;
}

const fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
const fnInvokeRE = /\([^)]*?\);*$/;
const simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
// KeyboardEvent.keyCode aliases
const keyCodes = {
    esc: 27,
    tab: 9,
    enter: 13,
    space: 32,
    up: 38,
    left: 37,
    right: 39,
    down: 40,
    delete: [8, 46]
};
// KeyboardEvent.key aliases
const keyNames = {
    // #7880: IE11 and Edge use `Esc` for Escape key name.
    esc: ['Esc', 'Escape'],
    tab: 'Tab',
    enter: 'Enter',
    // #9112: IE11 uses `Spacebar` for Space key name.
    space: [' ', 'Spacebar'],
    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
    up: ['Up', 'ArrowUp'],
    left: ['Left', 'ArrowLeft'],
    right: ['Right', 'ArrowRight'],
    down: ['Down', 'ArrowDown'],
    // #9112: IE11 uses `Del` for Delete key name.
    delete: ['Backspace', 'Delete', 'Del']
};
// #4868: modifiers that prevent the execution of the listener
// need to explicitly return null so that we can determine whether to remove
// the listener for .once
const genGuard = condition => `if(${condition})return null;`;
const modifierCode = {
    stop: '$event.stopPropagation();',
    prevent: '$event.preventDefault();',
    self: genGuard(`$event.target !== $event.currentTarget`),
    ctrl: genGuard(`!$event.ctrlKey`),
    shift: genGuard(`!$event.shiftKey`),
    alt: genGuard(`!$event.altKey`),
    meta: genGuard(`!$event.metaKey`),
    left: genGuard(`'button' in $event && $event.button !== 0`),
    middle: genGuard(`'button' in $event && $event.button !== 1`),
    right: genGuard(`'button' in $event && $event.button !== 2`)
};
function genHandlers(events, isNative) {
    const prefix = isNative ? 'nativeOn:' : 'on:';
    let staticHandlers = ``;
    let dynamicHandlers = ``;
    for (const name in events) {
        const handlerCode = genHandler(events[name]);
        //@ts-expect-error
        if (events[name] && events[name].dynamic) {
            dynamicHandlers += `${name},${handlerCode},`;
        }
        else {
            staticHandlers += `"${name}":${handlerCode},`;
        }
    }
    staticHandlers = `{${staticHandlers.slice(0, -1)}}`;
    if (dynamicHandlers) {
        return prefix + `_d(${staticHandlers},[${dynamicHandlers.slice(0, -1)}])`;
    }
    else {
        return prefix + staticHandlers;
    }
}
function genHandler(handler) {
    if (!handler) {
        return 'function(){}';
    }
    if (Array.isArray(handler)) {
        return `[${handler.map(handler => genHandler(handler)).join(',')}]`;
    }
    const isMethodPath = simplePathRE.test(handler.value);
    const isFunctionExpression = fnExpRE.test(handler.value);
    const isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
    if (!handler.modifiers) {
        if (isMethodPath || isFunctionExpression) {
            return handler.value;
        }
        return `function($event){${isFunctionInvocation ? `return ${handler.value}` : handler.value}}`; // inline statement
    }
    else {
        let code = '';
        let genModifierCode = '';
        const keys = [];
        for (const key in handler.modifiers) {
            if (modifierCode[key]) {
                genModifierCode += modifierCode[key];
                // left/right
                if (keyCodes[key]) {
                    keys.push(key);
                }
            }
            else if (key === 'exact') {
                const modifiers = handler.modifiers;
                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
                    .filter(keyModifier => !modifiers[keyModifier])
                    .map(keyModifier => `$event.${keyModifier}Key`)
                    .join('||'));
            }
            else {
                keys.push(key);
            }
        }
        if (keys.length) {
            code += genKeyFilter(keys);
        }
        // Make sure modifiers like prevent and stop get executed after key filtering
        if (genModifierCode) {
            code += genModifierCode;
        }
        const handlerCode = isMethodPath
            ? `return ${handler.value}.apply(null, arguments)`
            : isFunctionExpression
                ? `return (${handler.value}).apply(null, arguments)`
                : isFunctionInvocation
                    ? `return ${handler.value}`
                    : handler.value;
        return `function($event){${code}${handlerCode}}`;
    }
}
function genKeyFilter(keys) {
    return (
    // make sure the key filters only apply to KeyboardEvents
    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
    // key events that do not have keyCode property...
    `if(!$event.type.indexOf('key')&&` +
        `${keys.map(genFilterCode).join('&&')})return null;`);
}
function genFilterCode(key) {
    const keyVal = parseInt(key, 10);
    if (keyVal) {
        return `$event.keyCode!==${keyVal}`;
    }
    const keyCode = keyCodes[key];
    const keyName = keyNames[key];
    return (`_k($event.keyCode,` +
        `${JSON.stringify(key)},` +
        `${JSON.stringify(keyCode)},` +
        `$event.key,` +
        `${JSON.stringify(keyName)}` +
        `)`);
}

function on(el, dir) {
    if (process.env.NODE_ENV !== 'production' && dir.modifiers) {
        warn$3(`v-on without argument does not support modifiers.`);
    }
    el.wrapListeners = (code) => `_g(${code},${dir.value})`;
}

function bind(el, dir) {
    el.wrapData = (code) => {
        return `_b(${code},'${el.tag}',${dir.value},${dir.modifiers && dir.modifiers.prop ? 'true' : 'false'}${dir.modifiers && dir.modifiers.sync ? ',true' : ''})`;
    };
}

var baseDirectives = {
    on,
    bind,
    cloak: noop
};

class CodegenState {
    constructor(options) {
        this.options = options;
        this.warn = options.warn || baseWarn;
        this.transforms = pluckModuleFunction(options.modules, 'transformCode');
        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
        this.directives = extend(extend({}, baseDirectives), options.directives);
        const isReservedTag = options.isReservedTag || no;
        this.maybeComponent = (el) => !!el.component || !isReservedTag(el.tag);
        this.onceId = 0;
        this.staticRenderFns = [];
        this.pre = false;
    }
}
function generate$1(ast, options) {
    const state = new CodegenState(options);
    // fix #11483, Root level <script> tags should not be rendered.
    const code = ast
        ? ast.tag === 'script'
            ? 'null'
            : genElement(ast, state)
        : '_c("div")';
    return {
        render: `with(this){return ${code}}`,
        staticRenderFns: state.staticRenderFns
    };
}
function genElement(el, state) {
    if (el.parent) {
        el.pre = el.pre || el.parent.pre;
    }
    if (el.staticRoot && !el.staticProcessed) {
        return genStatic(el, state);
    }
    else if (el.once && !el.onceProcessed) {
        return genOnce(el, state);
    }
    else if (el.for && !el.forProcessed) {
        return genFor(el, state);
    }
    else if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
        return genChildren(el, state) || 'void 0';
    }
    else if (el.tag === 'slot') {
        return genSlot(el, state);
    }
    else {
        // component or element
        let code;
        if (el.component) {
            code = genComponent(el.component, el, state);
        }
        else {
            let data;
            const maybeComponent = state.maybeComponent(el);
            if (!el.plain || (el.pre && maybeComponent)) {
                data = genData(el, state);
            }
            let tag;
            // check if this is a component in <script setup>
            const bindings = state.options.bindings;
            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
                tag = checkBindingType(bindings, el.tag);
            }
            if (!tag)
                tag = `'${el.tag}'`;
            const children = el.inlineTemplate ? null : genChildren(el, state, true);
            code = `_c(${tag}${data ? `,${data}` : '' // data
            }${children ? `,${children}` : '' // children
            })`;
        }
        // module transforms
        for (let i = 0; i < state.transforms.length; i++) {
            code = state.transforms[i](el, code);
        }
        return code;
    }
}
function checkBindingType(bindings, key) {
    const camelName = camelize(key);
    const PascalName = capitalize(camelName);
    const checkType = (type) => {
        if (bindings[key] === type) {
            return key;
        }
        if (bindings[camelName] === type) {
            return camelName;
        }
        if (bindings[PascalName] === type) {
            return PascalName;
        }
    };
    const fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
        checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
    if (fromConst) {
        return fromConst;
    }
    const fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
        checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
        checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
    if (fromMaybeRef) {
        return fromMaybeRef;
    }
}
// hoist static sub-trees out
function genStatic(el, state) {
    el.staticProcessed = true;
    // Some elements (templates) need to behave differently inside of a v-pre
    // node.  All pre nodes are static roots, so we can use this as a location to
    // wrap a state change and reset it upon exiting the pre node.
    const originalPreState = state.pre;
    if (el.pre) {
        state.pre = el.pre;
    }
    state.staticRenderFns.push(`with(this){return ${genElement(el, state)}}`);
    state.pre = originalPreState;
    return `_m(${state.staticRenderFns.length - 1}${el.staticInFor ? ',true' : ''})`;
}
// v-once
function genOnce(el, state) {
    el.onceProcessed = true;
    if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.staticInFor) {
        let key = '';
        let parent = el.parent;
        while (parent) {
            if (parent.for) {
                key = parent.key;
                break;
            }
            parent = parent.parent;
        }
        if (!key) {
            process.env.NODE_ENV !== 'production' &&
                state.warn(`v-once can only be used inside v-for that is keyed. `, el.rawAttrsMap['v-once']);
            return genElement(el, state);
        }
        return `_o(${genElement(el, state)},${state.onceId++},${key})`;
    }
    else {
        return genStatic(el, state);
    }
}
function genIf(el, state, altGen, altEmpty) {
    el.ifProcessed = true; // avoid recursion
    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
}
function genIfConditions(conditions, state, altGen, altEmpty) {
    if (!conditions.length) {
        return altEmpty || '_e()';
    }
    const condition = conditions.shift();
    if (condition.exp) {
        return `(${condition.exp})?${genTernaryExp(condition.block)}:${genIfConditions(conditions, state, altGen, altEmpty)}`;
    }
    else {
        return `${genTernaryExp(condition.block)}`;
    }
    // v-if with v-once should generate code like (a)?_m(0):_m(1)
    function genTernaryExp(el) {
        return altGen
            ? altGen(el, state)
            : el.once
                ? genOnce(el, state)
                : genElement(el, state);
    }
}
function genFor(el, state, altGen, altHelper) {
    const exp = el.for;
    const alias = el.alias;
    const iterator1 = el.iterator1 ? `,${el.iterator1}` : '';
    const iterator2 = el.iterator2 ? `,${el.iterator2}` : '';
    if (process.env.NODE_ENV !== 'production' &&
        state.maybeComponent(el) &&
        el.tag !== 'slot' &&
        el.tag !== 'template' &&
        !el.key) {
        state.warn(`<${el.tag} v-for="${alias} in ${exp}">: component lists rendered with ` +
            `v-for should have explicit keys. ` +
            `See https://v2.vuejs.org/v2/guide/list.html#key for more info.`, el.rawAttrsMap['v-for'], true /* tip */);
    }
    el.forProcessed = true; // avoid recursion
    return (`${altHelper || '_l'}((${exp}),` +
        `function(${alias}${iterator1}${iterator2}){` +
        `return ${(altGen || genElement)(el, state)}` +
        '})');
}
function genData(el, state) {
    let data = '{';
    // directives first.
    // directives may mutate the el's other properties before they are generated.
    const dirs = genDirectives(el, state);
    if (dirs)
        data += dirs + ',';
    // key
    if (el.key) {
        data += `key:${el.key},`;
    }
    // ref
    if (el.ref) {
        data += `ref:${el.ref},`;
    }
    if (el.refInFor) {
        data += `refInFor:true,`;
    }
    // pre
    if (el.pre) {
        data += `pre:true,`;
    }
    // record original tag name for components using "is" attribute
    if (el.component) {
        data += `tag:"${el.tag}",`;
    }
    // module data generation functions
    for (let i = 0; i < state.dataGenFns.length; i++) {
        data += state.dataGenFns[i](el);
    }
    // attributes
    if (el.attrs) {
        data += `attrs:${genProps(el.attrs)},`;
    }
    // DOM props
    if (el.props) {
        data += `domProps:${genProps(el.props)},`;
    }
    // event handlers
    if (el.events) {
        data += `${genHandlers(el.events, false)},`;
    }
    if (el.nativeEvents) {
        data += `${genHandlers(el.nativeEvents, true)},`;
    }
    // slot target
    // only for non-scoped slots
    if (el.slotTarget && !el.slotScope) {
        data += `slot:${el.slotTarget},`;
    }
    // scoped slots
    if (el.scopedSlots) {
        data += `${genScopedSlots(el, el.scopedSlots, state)},`;
    }
    // component v-model
    if (el.model) {
        data += `model:{value:${el.model.value},callback:${el.model.callback},expression:${el.model.expression}},`;
    }
    // inline-template
    if (el.inlineTemplate) {
        const inlineTemplate = genInlineTemplate(el, state);
        if (inlineTemplate) {
            data += `${inlineTemplate},`;
        }
    }
    data = data.replace(/,$/, '') + '}';
    // v-bind dynamic argument wrap
    // v-bind with dynamic arguments must be applied using the same v-bind object
    // merge helper so that class/style/mustUseProp attrs are handled correctly.
    if (el.dynamicAttrs) {
        data = `_b(${data},"${el.tag}",${genProps(el.dynamicAttrs)})`;
    }
    // v-bind data wrap
    if (el.wrapData) {
        data = el.wrapData(data);
    }
    // v-on data wrap
    if (el.wrapListeners) {
        data = el.wrapListeners(data);
    }
    return data;
}
function genDirectives(el, state) {
    const dirs = el.directives;
    if (!dirs)
        return;
    let res = 'directives:[';
    let hasRuntime = false;
    let i, l, dir, needRuntime;
    for (i = 0, l = dirs.length; i < l; i++) {
        dir = dirs[i];
        needRuntime = true;
        const gen = state.directives[dir.name];
        if (gen) {
            // compile-time directive that manipulates AST.
            // returns true if it also needs a runtime counterpart.
            needRuntime = !!gen(el, dir, state.warn);
        }
        if (needRuntime) {
            hasRuntime = true;
            res += `{name:"${dir.name}",rawName:"${dir.rawName}"${dir.value
                ? `,value:(${dir.value}),expression:${JSON.stringify(dir.value)}`
                : ''}${dir.arg ? `,arg:${dir.isDynamicArg ? dir.arg : `"${dir.arg}"`}` : ''}${dir.modifiers ? `,modifiers:${JSON.stringify(dir.modifiers)}` : ''}},`;
        }
    }
    if (hasRuntime) {
        return res.slice(0, -1) + ']';
    }
}
function genInlineTemplate(el, state) {
    const ast = el.children[0];
    if (process.env.NODE_ENV !== 'production' && (el.children.length !== 1 || ast.type !== 1)) {
        state.warn('Inline-template components must have exactly one child element.', { start: el.start });
    }
    if (ast && ast.type === 1) {
        const inlineRenderFns = generate$1(ast, state.options);
        return `inlineTemplate:{render:function(){${inlineRenderFns.render}},staticRenderFns:[${inlineRenderFns.staticRenderFns
            .map(code => `function(){${code}}`)
            .join(',')}]}`;
    }
}
function genScopedSlots(el, slots, state) {
    // by default scoped slots are considered "stable", this allows child
    // components with only scoped slots to skip forced updates from parent.
    // but in some cases we have to bail-out of this optimization
    // for example if the slot contains dynamic names, has v-if or v-for on them...
    let needsForceUpdate = el.for ||
        Object.keys(slots).some(key => {
            const slot = slots[key];
            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
            );
        });
    // #9534: if a component with scoped slots is inside a conditional branch,
    // it's possible for the same component to be reused but with different
    // compiled slot content. To avoid that, we generate a unique key based on
    // the generated code of all the slot contents.
    let needsKey = !!el.if;
    // OR when it is inside another scoped slot or v-for (the reactivity may be
    // disconnected due to the intermediate scope variable)
    // #9438, #9506
    // TODO: this can be further optimized by properly analyzing in-scope bindings
    // and skip force updating ones that do not actually use scope variables.
    if (!needsForceUpdate) {
        let parent = el.parent;
        while (parent) {
            if ((parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||
                parent.for) {
                needsForceUpdate = true;
                break;
            }
            if (parent.if) {
                needsKey = true;
            }
            parent = parent.parent;
        }
    }
    const generatedSlots = Object.keys(slots)
        .map(key => genScopedSlot(slots[key], state))
        .join(',');
    return `scopedSlots:_u([${generatedSlots}]${needsForceUpdate ? `,null,true` : ``}${!needsForceUpdate && needsKey ? `,null,false,${hash(generatedSlots)}` : ``})`;
}
function hash(str) {
    let hash = 5381;
    let i = str.length;
    while (i) {
        hash = (hash * 33) ^ str.charCodeAt(--i);
    }
    return hash >>> 0;
}
function containsSlotChild(el) {
    if (el.type === 1) {
        if (el.tag === 'slot') {
            return true;
        }
        return el.children.some(containsSlotChild);
    }
    return false;
}
function genScopedSlot(el, state) {
    const isLegacySyntax = el.attrsMap['slot-scope'];
    if (el.if && !el.ifProcessed && !isLegacySyntax) {
        return genIf(el, state, genScopedSlot, `null`);
    }
    if (el.for && !el.forProcessed) {
        return genFor(el, state, genScopedSlot);
    }
    const slotScope = el.slotScope === emptySlotScopeToken ? `` : String(el.slotScope);
    const fn = `function(${slotScope}){` +
        `return ${el.tag === 'template'
            ? el.if && isLegacySyntax
                ? `(${el.if})?${genChildren(el, state) || 'undefined'}:undefined`
                : genChildren(el, state) || 'undefined'
            : genElement(el, state)}}`;
    // reverse proxy v-slot without scope on this.$slots
    const reverseProxy = slotScope ? `` : `,proxy:true`;
    return `{key:${el.slotTarget || `"default"`},fn:${fn}${reverseProxy}}`;
}
function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
    const children = el.children;
    if (children.length) {
        const el = children[0];
        // optimize single v-for
        if (children.length === 1 &&
            el.for &&
            el.tag !== 'template' &&
            el.tag !== 'slot') {
            const normalizationType = checkSkip
                ? state.maybeComponent(el)
                    ? `,1`
                    : `,0`
                : ``;
            return `${(altGenElement || genElement)(el, state)}${normalizationType}`;
        }
        const normalizationType = checkSkip
            ? getNormalizationType(children, state.maybeComponent)
            : 0;
        const gen = altGenNode || genNode;
        return `[${children.map(c => gen(c, state)).join(',')}]${normalizationType ? `,${normalizationType}` : ''}`;
    }
}
// determine the normalization needed for the children array.
// 0: no normalization needed
// 1: simple normalization needed (possible 1-level deep nested array)
// 2: full normalization needed
function getNormalizationType(children, maybeComponent) {
    let res = 0;
    for (let i = 0; i < children.length; i++) {
        const el = children[i];
        if (el.type !== 1) {
            continue;
        }
        if (needsNormalization(el) ||
            (el.ifConditions &&
                el.ifConditions.some(c => needsNormalization(c.block)))) {
            res = 2;
            break;
        }
        if (maybeComponent(el) ||
            (el.ifConditions && el.ifConditions.some(c => maybeComponent(c.block)))) {
            res = 1;
        }
    }
    return res;
}
function needsNormalization(el) {
    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
}
function genNode(node, state) {
    if (node.type === 1) {
        return genElement(node, state);
    }
    else if (node.type === 3 && node.isComment) {
        return genComment(node);
    }
    else {
        return genText(node);
    }
}
function genText(text) {
    return `_v(${text.type === 2
        ? text.expression // no need for () because already wrapped in _s()
        : transformSpecialNewlines(JSON.stringify(text.text))})`;
}
function genComment(comment) {
    return `_e(${JSON.stringify(comment.text)})`;
}
function genSlot(el, state) {
    const slotName = el.slotName || '"default"';
    const children = genChildren(el, state);
    let res = `_t(${slotName}${children ? `,function(){return ${children}}` : ''}`;
    const attrs = el.attrs || el.dynamicAttrs
        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(attr => ({
            // slot props are camelized
            name: camelize(attr.name),
            value: attr.value,
            dynamic: attr.dynamic
        })))
        : null;
    const bind = el.attrsMap['v-bind'];
    if ((attrs || bind) && !children) {
        res += `,null`;
    }
    if (attrs) {
        res += `,${attrs}`;
    }
    if (bind) {
        res += `${attrs ? '' : ',null'},${bind}`;
    }
    return res + ')';
}
// componentName is el.component, take it as argument to shun flow's pessimistic refinement
function genComponent(componentName, el, state) {
    const children = el.inlineTemplate ? null : genChildren(el, state, true);
    return `_c(${componentName},${genData(el, state)}${children ? `,${children}` : ''})`;
}
function genProps(props) {
    let staticProps = ``;
    let dynamicProps = ``;
    for (let i = 0; i < props.length; i++) {
        const prop = props[i];
        const value = transformSpecialNewlines(prop.value);
        if (prop.dynamic) {
            dynamicProps += `${prop.name},${value},`;
        }
        else {
            staticProps += `"${prop.name}":${value},`;
        }
    }
    staticProps = `{${staticProps.slice(0, -1)}}`;
    if (dynamicProps) {
        return `_d(${staticProps},[${dynamicProps.slice(0, -1)}])`;
    }
    else {
        return staticProps;
    }
}
// #3895, #4268
function transformSpecialNewlines(text) {
    return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
}

// these keywords should not appear inside expressions, but operators like
// typeof, instanceof and in are allowed
const prohibitedKeywordRE = new RegExp('\\b' +
    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
        'super,throw,while,yield,delete,export,import,return,switch,default,' +
        'extends,finally,continue,debugger,function,arguments')
        .split(',')
        .join('\\b|\\b') +
    '\\b');
// these unary operators should not be used as property/method names
const unaryOperatorsRE = new RegExp('\\b' +
    'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
    '\\s*\\([^\\)]*\\)');
// strip strings in expressions
const stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
// detect problematic expressions in a template
function detectErrors(ast, warn) {
    if (ast) {
        checkNode(ast, warn);
    }
}
function checkNode(node, warn) {
    if (node.type === 1) {
        for (const name in node.attrsMap) {
            if (dirRE.test(name)) {
                const value = node.attrsMap[name];
                if (value) {
                    const range = node.rawAttrsMap[name];
                    if (name === 'v-for') {
                        checkFor(node, `v-for="${value}"`, warn, range);
                    }
                    else if (name === 'v-slot' || name[0] === '#') {
                        checkFunctionParameterExpression(value, `${name}="${value}"`, warn, range);
                    }
                    else if (onRE.test(name)) {
                        checkEvent(value, `${name}="${value}"`, warn, range);
                    }
                    else {
                        checkExpression(value, `${name}="${value}"`, warn, range);
                    }
                }
            }
        }
        if (node.children) {
            for (let i = 0; i < node.children.length; i++) {
                checkNode(node.children[i], warn);
            }
        }
    }
    else if (node.type === 2) {
        checkExpression(node.expression, node.text, warn, node);
    }
}
function checkEvent(exp, text, warn, range) {
    const stripped = exp.replace(stripStringRE, '');
    const keywordMatch = stripped.match(unaryOperatorsRE);
    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
        warn(`avoid using JavaScript unary operator as property name: ` +
            `"${keywordMatch[0]}" in expression ${text.trim()}`, range);
    }
    checkExpression(exp, text, warn, range);
}
function checkFor(node, text, warn, range) {
    checkExpression(node.for || '', text, warn, range);
    checkIdentifier(node.alias, 'v-for alias', text, warn, range);
    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
}
function checkIdentifier(ident, type, text, warn, range) {
    if (typeof ident === 'string') {
        try {
            new Function(`var ${ident}=_`);
        }
        catch (e) {
            warn(`invalid ${type} "${ident}" in expression: ${text.trim()}`, range);
        }
    }
}
function checkExpression(exp, text, warn, range) {
    try {
        new Function(`return ${exp}`);
    }
    catch (e) {
        const keywordMatch = exp
            .replace(stripStringRE, '')
            .match(prohibitedKeywordRE);
        if (keywordMatch) {
            warn(`avoid using JavaScript keyword as property name: ` +
                `"${keywordMatch[0]}"\n  Raw expression: ${text.trim()}`, range);
        }
        else {
            warn(`invalid expression: ${e.message} in\n\n` +
                `    ${exp}\n\n` +
                `  Raw expression: ${text.trim()}\n`, range);
        }
    }
}
function checkFunctionParameterExpression(exp, text, warn, range) {
    try {
        new Function(exp, '');
    }
    catch (e) {
        warn(`invalid function parameter expression: ${e.message} in\n\n` +
            `    ${exp}\n\n` +
            `  Raw expression: ${text.trim()}\n`, range);
    }
}

function createFunction(code, errors) {
    try {
        return new Function(code);
    }
    catch (err) {
        errors.push({ err, code });
        return noop;
    }
}
function createCompileToFunctionFn(compile) {
    const cache = Object.create(null);
    return function compileToFunctions(template, options, vm) {
        options = extend({}, options);
        const warn = options.warn || warn$3;
        delete options.warn;
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production') {
            // detect possible CSP restriction
            try {
                new Function('return 1');
            }
            catch (e) {
                if (e.toString().match(/unsafe-eval|CSP/)) {
                    warn('It seems you are using the standalone build of Vue.js in an ' +
                        'environment with Content Security Policy that prohibits unsafe-eval. ' +
                        'The template compiler cannot work in this environment. Consider ' +
                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
                        'templates into render functions.');
                }
            }
        }
        // check cache
        const key = options.delimiters
            ? String(options.delimiters) + template
            : template;
        if (cache[key]) {
            return cache[key];
        }
        // compile
        const compiled = compile(template, options);
        // check compilation errors/tips
        if (process.env.NODE_ENV !== 'production') {
            if (compiled.errors && compiled.errors.length) {
                if (options.outputSourceRange) {
                    compiled.errors.forEach(e => {
                        warn(`Error compiling template:\n\n${e.msg}\n\n` +
                            generateCodeFrame(template, e.start, e.end), vm);
                    });
                }
                else {
                    warn(`Error compiling template:\n\n${template}\n\n` +
                        compiled.errors.map(e => `- ${e}`).join('\n') +
                        '\n', vm);
                }
            }
            if (compiled.tips && compiled.tips.length) {
                if (options.outputSourceRange) {
                    compiled.tips.forEach(e => tip(e.msg, vm));
                }
                else {
                    compiled.tips.forEach(msg => tip(msg, vm));
                }
            }
        }
        // turn code into functions
        const res = {};
        const fnGenErrors = [];
        res.render = createFunction(compiled.render, fnGenErrors);
        res.staticRenderFns = compiled.staticRenderFns.map(code => {
            return createFunction(code, fnGenErrors);
        });
        // check function generation errors.
        // this should only happen if there is a bug in the compiler itself.
        // mostly for codegen development use
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production') {
            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
                warn(`Failed to generate render function:\n\n` +
                    fnGenErrors
                        .map(({ err, code }) => `${err.toString()} in\n\n${code}\n`)
                        .join('\n'), vm);
            }
        }
        return (cache[key] = res);
    };
}

function createCompilerCreator(baseCompile) {
    return function createCompiler(baseOptions) {
        function compile(template, options) {
            const finalOptions = Object.create(baseOptions);
            const errors = [];
            const tips = [];
            let warn = (msg, range, tip) => {
                (tip ? tips : errors).push(msg);
            };
            if (options) {
                if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                    // $flow-disable-line
                    const leadingSpaceLength = template.match(/^\s*/)[0].length;
                    warn = (msg, range, tip) => {
                        const data = typeof msg === 'string' ? { msg } : msg;
                        if (range) {
                            if (range.start != null) {
                                data.start = range.start + leadingSpaceLength;
                            }
                            if (range.end != null) {
                                data.end = range.end + leadingSpaceLength;
                            }
                        }
                        (tip ? tips : errors).push(data);
                    };
                }
                // merge custom modules
                if (options.modules) {
                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
                }
                // merge custom directives
                if (options.directives) {
                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
                }
                // copy other options
                for (const key in options) {
                    if (key !== 'modules' && key !== 'directives') {
                        finalOptions[key] = options[key];
                    }
                }
            }
            finalOptions.warn = warn;
            const compiled = baseCompile(template.trim(), finalOptions);
            if (process.env.NODE_ENV !== 'production') {
                detectErrors(compiled.ast, warn);
            }
            compiled.errors = errors;
            compiled.tips = tips;
            return compiled;
        }
        return {
            compile,
            compileToFunctions: createCompileToFunctionFn(compile)
        };
    };
}

// `createCompilerCreator` allows creating compilers that use alternative
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
// Here we just export a default compiler using the default parts.
const createCompiler$1 = createCompilerCreator(function baseCompile(template, options) {
    const ast = parse$1(template.trim(), options);
    if (options.optimize !== false) {
        optimize$1(ast, options);
    }
    const code = generate$1(ast, options);
    return {
        ast,
        render: code.render,
        staticRenderFns: code.staticRenderFns
    };
});

const { compile: compile$1, compileToFunctions: compileToFunctions$1 } = createCompiler$1(baseOptions);

const isAttr = makeMap('accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' +
    'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' +
    'checked,cite,class,code,codebase,color,cols,colspan,content,' +
    'contenteditable,contextmenu,controls,coords,data,datetime,default,' +
    'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,for,' +
    'form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,' +
    'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' +
    'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' +
    'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' +
    'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' +
    'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' +
    'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' +
    'target,title,usemap,value,width,wrap');
/* istanbul ignore next */
const isRenderableAttr = (name) => {
    return (isAttr(name) || name.indexOf('data-') === 0 || name.indexOf('aria-') === 0);
};
const propsToAttrMap = {
    acceptCharset: 'accept-charset',
    className: 'class',
    htmlFor: 'for',
    httpEquiv: 'http-equiv'
};
const ESC = {
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    '&': '&amp;'
};
function escape(s) {
    return s.replace(/[<>"&]/g, escapeChar);
}
function escapeChar(a) {
    return ESC[a] || a;
}

const plainStringRE = /^"(?:[^"\\]|\\.)*"$|^'(?:[^'\\]|\\.)*'$/;
// let the model AST transform translate v-model into appropriate
// props bindings
function applyModelTransform(el, state) {
    if (el.directives) {
        for (let i = 0; i < el.directives.length; i++) {
            const dir = el.directives[i];
            if (dir.name === 'model') {
                state.directives.model(el, dir, state.warn);
                // remove value for textarea as its converted to text
                if (el.tag === 'textarea' && el.props) {
                    el.props = el.props.filter(p => p.name !== 'value');
                }
                break;
            }
        }
    }
}
function genAttrSegments(attrs) {
    return attrs.map(({ name, value }) => genAttrSegment(name, value));
}
function genDOMPropSegments(props, attrs) {
    const segments = [];
    props.forEach(({ name, value }) => {
        name = propsToAttrMap[name] || name.toLowerCase();
        if (isRenderableAttr(name) &&
            !(attrs && attrs.some(a => a.name === name))) {
            segments.push(genAttrSegment(name, value));
        }
    });
    return segments;
}
function genAttrSegment(name, value) {
    if (plainStringRE.test(value)) {
        // force double quote
        value = value.replace(/^'|'$/g, '"');
        // force enumerated attr to "true"
        if (isEnumeratedAttr(name) && value !== `"false"`) {
            value = `"true"`;
        }
        return {
            type: RAW,
            value: isBooleanAttr(name)
                ? ` ${name}="${name}"`
                : value === '""'
                    ? ` ${name}`
                    : ` ${name}="${JSON.parse(value)}"`
        };
    }
    else {
        return {
            type: EXPRESSION,
            value: `_ssrAttr(${JSON.stringify(name)},${value})`
        };
    }
}
function genClassSegments(staticClass, classBinding) {
    if (staticClass && !classBinding) {
        return [{ type: RAW, value: ` class="${JSON.parse(staticClass)}"` }];
    }
    else {
        return [
            {
                type: EXPRESSION,
                value: `_ssrClass(${staticClass || 'null'},${classBinding || 'null'})`
            }
        ];
    }
}
function genStyleSegments(staticStyle, parsedStaticStyle, styleBinding, vShowExpression) {
    if (staticStyle && !styleBinding && !vShowExpression) {
        return [{ type: RAW, value: ` style=${JSON.stringify(staticStyle)}` }];
    }
    else {
        return [
            {
                type: EXPRESSION,
                value: `_ssrStyle(${parsedStaticStyle || 'null'},${styleBinding || 'null'}, ${vShowExpression
                    ? `{ display: (${vShowExpression}) ? '' : 'none' }`
                    : 'null'})`
            }
        ];
    }
}

/**
 * In SSR, the vdom tree is generated only once and never patched, so
 * we can optimize most element / trees into plain string render functions.
 * The SSR optimizer walks the AST tree to detect optimizable elements and trees.
 *
 * The criteria for SSR optimizability is quite a bit looser than static tree
 * detection (which is designed for client re-render). In SSR we bail only for
 * components/slots/custom directives.
 */
// optimizability constants
const optimizability = {
    FALSE: 0,
    FULL: 1,
    SELF: 2,
    CHILDREN: 3,
    PARTIAL: 4 // self un-optimizable with some un-optimizable children
};
let isPlatformReservedTag;
function optimize(root, options) {
    if (!root)
        return;
    isPlatformReservedTag = options.isReservedTag || no;
    walk(root, true);
}
function walk(node, isRoot) {
    if (isUnOptimizableTree(node)) {
        node.ssrOptimizability = optimizability.FALSE;
        return;
    }
    // root node or nodes with custom directives should always be a VNode
    const selfUnoptimizable = isRoot || hasCustomDirective(node);
    const check = child => {
        if (child.ssrOptimizability !== optimizability.FULL) {
            node.ssrOptimizability = selfUnoptimizable
                ? optimizability.PARTIAL
                : optimizability.SELF;
        }
    };
    if (selfUnoptimizable) {
        node.ssrOptimizability = optimizability.CHILDREN;
    }
    if (node.type === 1) {
        for (let i = 0, l = node.children.length; i < l; i++) {
            const child = node.children[i];
            walk(child);
            check(child);
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                const block = node.ifConditions[i].block;
                walk(block, isRoot);
                check(block);
            }
        }
        if (node.ssrOptimizability == null ||
            (!isRoot && (node.attrsMap['v-html'] || node.attrsMap['v-text']))) {
            node.ssrOptimizability = optimizability.FULL;
        }
        else {
            node.children = optimizeSiblings(node);
        }
    }
    else {
        node.ssrOptimizability = optimizability.FULL;
    }
}
function optimizeSiblings(el) {
    const children = el.children;
    const optimizedChildren = [];
    let currentOptimizableGroup = [];
    const pushGroup = () => {
        if (currentOptimizableGroup.length) {
            optimizedChildren.push({
                type: 1,
                parent: el,
                tag: 'template',
                attrsList: [],
                attrsMap: {},
                rawAttrsMap: {},
                children: currentOptimizableGroup,
                ssrOptimizability: optimizability.FULL
            });
        }
        currentOptimizableGroup = [];
    };
    for (let i = 0; i < children.length; i++) {
        const c = children[i];
        if (c.ssrOptimizability === optimizability.FULL) {
            currentOptimizableGroup.push(c);
        }
        else {
            // wrap fully-optimizable adjacent siblings inside a template tag
            // so that they can be optimized into a single ssrNode by codegen
            pushGroup();
            optimizedChildren.push(c);
        }
    }
    pushGroup();
    return optimizedChildren;
}
function isUnOptimizableTree(node) {
    if (node.type === 2 || node.type === 3) {
        // text or expression
        return false;
    }
    return (isBuiltInTag(node.tag) || // built-in (slot, component)
        !isPlatformReservedTag(node.tag) || // custom component
        !!node.component || // "is" component
        isSelectWithModel(node) // <select v-model> requires runtime inspection
    );
}
const isBuiltInDir = makeMap('text,html,show,on,bind,model,pre,cloak,once');
function hasCustomDirective(node) {
    return (node.type === 1 &&
        node.directives &&
        node.directives.some(d => !isBuiltInDir(d.name)));
}
// <select v-model> cannot be optimized because it requires a runtime check
// to determine proper selected option
function isSelectWithModel(node) {
    return (node.type === 1 &&
        node.tag === 'select' &&
        node.directives != null &&
        node.directives.some(d => d.name === 'model'));
}

// The SSR codegen is essentially extending the default codegen to handle
// segment types
const RAW = 0;
const INTERPOLATION = 1;
const EXPRESSION = 2;
function generate(ast, options) {
    const state = new CodegenState(options);
    const code = ast ? genSSRElement(ast, state) : '_c("div")';
    return {
        render: `with(this){return ${code}}`,
        staticRenderFns: state.staticRenderFns
    };
}
function genSSRElement(el, state) {
    if (el.for && !el.forProcessed) {
        return genFor(el, state, genSSRElement);
    }
    else if (el.if && !el.ifProcessed) {
        return genIf(el, state, genSSRElement);
    }
    else if (el.tag === 'template' && !el.slotTarget) {
        return el.ssrOptimizability === optimizability.FULL
            ? genChildrenAsStringNode(el, state)
            : genSSRChildren(el, state) || 'void 0';
    }
    switch (el.ssrOptimizability) {
        case optimizability.FULL:
            // stringify whole tree
            return genStringElement(el, state);
        case optimizability.SELF:
            // stringify self and check children
            return genStringElementWithChildren(el, state);
        case optimizability.CHILDREN:
            // generate self as VNode and stringify children
            return genNormalElement(el, state, true);
        case optimizability.PARTIAL:
            // generate self as VNode and check children
            return genNormalElement(el, state, false);
        default:
            // bail whole tree
            return genElement(el, state);
    }
}
function genNormalElement(el, state, stringifyChildren) {
    const data = el.plain ? undefined : genData(el, state);
    const children = stringifyChildren
        ? `[${genChildrenAsStringNode(el, state)}]`
        : genSSRChildren(el, state, true);
    return `_c('${el.tag}'${data ? `,${data}` : ''}${children ? `,${children}` : ''})`;
}
function genSSRChildren(el, state, checkSkip) {
    return genChildren(el, state, checkSkip, genSSRElement, genSSRNode);
}
function genSSRNode(el, state) {
    return el.type === 1 ? genSSRElement(el, state) : genText(el);
}
function genChildrenAsStringNode(el, state) {
    return el.children.length
        ? `_ssrNode(${flattenSegments(childrenToSegments(el, state))})`
        : '';
}
function genStringElement(el, state) {
    return `_ssrNode(${elementToString(el, state)})`;
}
function genStringElementWithChildren(el, state) {
    const children = genSSRChildren(el, state, true);
    return `_ssrNode(${flattenSegments(elementToOpenTagSegments(el, state))},"</${el.tag}>"${children ? `,${children}` : ''})`;
}
function elementToString(el, state) {
    return `(${flattenSegments(elementToSegments(el, state))})`;
}
function elementToSegments(el, state) {
    // v-for / v-if
    if (el.for && !el.forProcessed) {
        el.forProcessed = true;
        return [
            {
                type: EXPRESSION,
                value: genFor(el, state, elementToString, '_ssrList')
            }
        ];
    }
    else if (el.if && !el.ifProcessed) {
        el.ifProcessed = true;
        return [
            {
                type: EXPRESSION,
                value: genIf(el, state, elementToString, '"<!---->"')
            }
        ];
    }
    else if (el.tag === 'template') {
        return childrenToSegments(el, state);
    }
    const openSegments = elementToOpenTagSegments(el, state);
    const childrenSegments = childrenToSegments(el, state);
    const { isUnaryTag } = state.options;
    const close = isUnaryTag && isUnaryTag(el.tag)
        ? []
        : [{ type: RAW, value: `</${el.tag}>` }];
    return openSegments.concat(childrenSegments, close);
}
function elementToOpenTagSegments(el, state) {
    applyModelTransform(el, state);
    let binding;
    const segments = [{ type: RAW, value: `<${el.tag}` }];
    // attrs
    if (el.attrs) {
        segments.push.apply(segments, genAttrSegments(el.attrs));
    }
    // domProps
    if (el.props) {
        segments.push.apply(segments, genDOMPropSegments(el.props, el.attrs));
    }
    // v-bind="object"
    if ((binding = el.attrsMap['v-bind'])) {
        segments.push({ type: EXPRESSION, value: `_ssrAttrs(${binding})` });
    }
    // v-bind.prop="object"
    if ((binding = el.attrsMap['v-bind.prop'])) {
        segments.push({ type: EXPRESSION, value: `_ssrDOMProps(${binding})` });
    }
    // class
    if (el.staticClass || el.classBinding) {
        segments.push.apply(segments, genClassSegments(el.staticClass, el.classBinding));
    }
    // style & v-show
    if (el.staticStyle || el.styleBinding || el.attrsMap['v-show']) {
        segments.push.apply(segments, genStyleSegments(el.attrsMap.style, el.staticStyle, el.styleBinding, el.attrsMap['v-show']));
    }
    // _scopedId
    if (state.options.scopeId) {
        segments.push({ type: RAW, value: ` ${state.options.scopeId}` });
    }
    segments.push({ type: RAW, value: `>` });
    return segments;
}
function childrenToSegments(el, state) {
    let binding;
    if ((binding = el.attrsMap['v-html'])) {
        return [{ type: EXPRESSION, value: `_s(${binding})` }];
    }
    if ((binding = el.attrsMap['v-text'])) {
        return [{ type: INTERPOLATION, value: `_s(${binding})` }];
    }
    if (el.tag === 'textarea' && (binding = el.attrsMap['v-model'])) {
        return [{ type: INTERPOLATION, value: `_s(${binding})` }];
    }
    return el.children ? nodesToSegments(el.children, state) : [];
}
function nodesToSegments(children, state) {
    const segments = [];
    for (let i = 0; i < children.length; i++) {
        const c = children[i];
        if (c.type === 1) {
            segments.push.apply(segments, elementToSegments(c, state));
        }
        else if (c.type === 2) {
            segments.push({ type: INTERPOLATION, value: c.expression });
        }
        else if (c.type === 3) {
            let text = escape(c.text);
            if (c.isComment) {
                text = '<!--' + text + '-->';
            }
            segments.push({ type: RAW, value: text });
        }
    }
    return segments;
}
function flattenSegments(segments) {
    const mergedSegments = [];
    let textBuffer = '';
    const pushBuffer = () => {
        if (textBuffer) {
            mergedSegments.push(JSON.stringify(textBuffer));
            textBuffer = '';
        }
    };
    for (let i = 0; i < segments.length; i++) {
        const s = segments[i];
        if (s.type === RAW) {
            textBuffer += s.value;
        }
        else if (s.type === INTERPOLATION) {
            pushBuffer();
            mergedSegments.push(`_ssrEscape(${s.value})`);
        }
        else if (s.type === EXPRESSION) {
            pushBuffer();
            mergedSegments.push(`(${s.value})`);
        }
    }
    pushBuffer();
    return mergedSegments.join('+');
}

const createCompiler = createCompilerCreator(function baseCompile(template, options) {
    const ast = parse$1(template.trim(), options);
    optimize(ast, options);
    const code = generate(ast, options);
    return {
        ast,
        render: code.render,
        staticRenderFns: code.staticRenderFns
    };
});

const { compile, compileToFunctions } = createCompiler(baseOptions);

var _compiler = /*#__PURE__*/Object.freeze({
	__proto__: null,
	parseComponent: parseComponent,
	compile: compile$1,
	compileToFunctions: compileToFunctions$1,
	ssrCompile: compile,
	ssrCompileToFunctions: compileToFunctions,
	generateCodeFrame: generateCodeFrame
});

function compileTemplate(options) {
    const { preprocessLang } = options;
    const preprocessor = preprocessLang && consolidate[preprocessLang];
    if (preprocessor) {
        return actuallyCompile(Object.assign({}, options, {
            source: preprocess$1(options, preprocessor)
        }));
    }
    else if (preprocessLang) {
        return {
            ast: {},
            code: `var render = function () {}\n` + `var staticRenderFns = []\n`,
            source: options.source,
            tips: [
                `Component ${options.filename} uses lang ${preprocessLang} for template. Please install the language preprocessor.`
            ],
            errors: [
                `Component ${options.filename} uses lang ${preprocessLang} for template, however it is not installed.`
            ]
        };
    }
    else {
        return actuallyCompile(options);
    }
}
function preprocess$1(options, preprocessor) {
    const { source, filename, preprocessOptions } = options;
    const finalPreprocessOptions = Object.assign({
        filename
    }, preprocessOptions);
    // Consolidate exposes a callback based API, but the callback is in fact
    // called synchronously for most templating engines. In our case, we have to
    // expose a synchronous API so that it is usable in Jest transforms (which
    // have to be sync because they are applied via Node.js require hooks)
    let res, err;
    preprocessor.render(source, finalPreprocessOptions, (_err, _res) => {
        if (_err)
            err = _err;
        res = _res;
    });
    if (err)
        throw err;
    return res;
}
function actuallyCompile(options) {
    const { source, compiler = _compiler, compilerOptions = {}, transpileOptions = {}, transformAssetUrls, transformAssetUrlsOptions, isProduction = process.env.NODE_ENV === 'production', isFunctional = false, optimizeSSR = false, prettify = true, isTS = false, bindings } = options;
    const compile = optimizeSSR && compiler.ssrCompile ? compiler.ssrCompile : compiler.compile;
    let finalCompilerOptions = compilerOptions;
    if (transformAssetUrls) {
        const builtInModules = [
            transformAssetUrls === true
                ? assetUrlsModule(undefined, transformAssetUrlsOptions)
                : assetUrlsModule(transformAssetUrls, transformAssetUrlsOptions),
            srcsetModule(transformAssetUrlsOptions)
        ];
        finalCompilerOptions = Object.assign({}, compilerOptions, {
            modules: [...builtInModules, ...(compilerOptions.modules || [])],
            filename: options.filename
        });
    }
    finalCompilerOptions.bindings = bindings;
    const { ast, render, staticRenderFns, tips, errors } = compile(source, finalCompilerOptions);
    if (errors && errors.length) {
        return {
            ast,
            code: `var render = function () {}\n` + `var staticRenderFns = []\n`,
            source,
            tips,
            errors
        };
    }
    else {
        // stripping `with` usage
        let code = `var __render__ = ${prefixIdentifiers(`function render(${isFunctional ? `_c,_vm` : ``}){${render}\n}`, isFunctional, isTS, transpileOptions, bindings)}\n` +
            `var __staticRenderFns__ = [${staticRenderFns.map(code => prefixIdentifiers(`function (${isFunctional ? `_c,_vm` : ``}){${code}\n}`, isFunctional, isTS, transpileOptions, bindings))}]` +
            `\n`;
        // #23 we use __render__ to avoid `render` not being prefixed by the
        // transpiler when stripping with, but revert it back to `render` to
        // maintain backwards compat
        code = code.replace(/\s__(render|staticRenderFns)__\s/g, ' $1 ');
        if (!isProduction) {
            // mark with stripped (this enables Vue to use correct runtime proxy
            // detection)
            code += `render._withStripped = true`;
            if (prettify) {
                try {
                    code = require('prettier').format(code, {
                        semi: false,
                        parser: 'babel'
                    });
                }
                catch (e) {
                    if (e.code === 'MODULE_NOT_FOUND') {
                        tips.push('The `prettify` option is on, but the dependency `prettier` is not found.\n' +
                            'Please either turn off `prettify` or manually install `prettier`.');
                    }
                    tips.push(`Failed to prettify component ${options.filename} template source after compilation.`);
                }
            }
        }
        return {
            ast,
            code,
            source,
            tips,
            errors
        };
    }
}

const trimPlugin = () => {
    return {
        postcssPlugin: 'vue-sfc-trim',
        Once(root) {
            root.walk(({ type, raws }) => {
                if (type === 'rule' || type === 'atrule') {
                    if (raws.before)
                        raws.before = '\n';
                    if ('after' in raws && raws.after)
                        raws.after = '\n';
                }
            });
        }
    };
};
trimPlugin.postcss = true;

var dist = {exports: {}};

var processor = {exports: {}};

var parser = {exports: {}};

var root$1 = {exports: {}};

var container = {exports: {}};

var node$1 = {exports: {}};

var util = {};

var unesc = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = unesc;

	// Many thanks for this post which made this migration much easier.
	// https://mathiasbynens.be/notes/css-escapes

	/**
	 * 
	 * @param {string} str 
	 * @returns {[string, number]|undefined}
	 */
	function gobbleHex(str) {
	  var lower = str.toLowerCase();
	  var hex = '';
	  var spaceTerminated = false;

	  for (var i = 0; i < 6 && lower[i] !== undefined; i++) {
	    var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]

	    var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point

	    spaceTerminated = code === 32;

	    if (!valid) {
	      break;
	    }

	    hex += lower[i];
	  }

	  if (hex.length === 0) {
	    return undefined;
	  }

	  var codePoint = parseInt(hex, 16);
	  var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for
	  // "If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point"
	  // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point

	  if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {
	    return ["\uFFFD", hex.length + (spaceTerminated ? 1 : 0)];
	  }

	  return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];
	}

	var CONTAINS_ESCAPE = /\\/;

	function unesc(str) {
	  var needToProcess = CONTAINS_ESCAPE.test(str);

	  if (!needToProcess) {
	    return str;
	  }

	  var ret = "";

	  for (var i = 0; i < str.length; i++) {
	    if (str[i] === "\\") {
	      var gobbled = gobbleHex(str.slice(i + 1, i + 7));

	      if (gobbled !== undefined) {
	        ret += gobbled[0];
	        i += gobbled[1];
	        continue;
	      } // Retain a pair of \\ if double escaped `\\\\`
	      // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e


	      if (str[i + 1] === "\\") {
	        ret += "\\";
	        i++;
	        continue;
	      } // if \\ is at the end of the string retain it
	      // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb


	      if (str.length === i + 1) {
	        ret += str[i];
	      }

	      continue;
	    }

	    ret += str[i];
	  }

	  return ret;
	}

	module.exports = exports.default;
} (unesc, unesc.exports));

var getProp = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = getProp;

	function getProp(obj) {
	  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
	    props[_key - 1] = arguments[_key];
	  }

	  while (props.length > 0) {
	    var prop = props.shift();

	    if (!obj[prop]) {
	      return undefined;
	    }

	    obj = obj[prop];
	  }

	  return obj;
	}

	module.exports = exports.default;
} (getProp, getProp.exports));

var ensureObject = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = ensureObject;

	function ensureObject(obj) {
	  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
	    props[_key - 1] = arguments[_key];
	  }

	  while (props.length > 0) {
	    var prop = props.shift();

	    if (!obj[prop]) {
	      obj[prop] = {};
	    }

	    obj = obj[prop];
	  }
	}

	module.exports = exports.default;
} (ensureObject, ensureObject.exports));

var stripComments = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = stripComments;

	function stripComments(str) {
	  var s = "";
	  var commentStart = str.indexOf("/*");
	  var lastEnd = 0;

	  while (commentStart >= 0) {
	    s = s + str.slice(lastEnd, commentStart);
	    var commentEnd = str.indexOf("*/", commentStart + 2);

	    if (commentEnd < 0) {
	      return s;
	    }

	    lastEnd = commentEnd + 2;
	    commentStart = str.indexOf("/*", lastEnd);
	  }

	  s = s + str.slice(lastEnd);
	  return s;
	}

	module.exports = exports.default;
} (stripComments, stripComments.exports));

util.__esModule = true;
util.stripComments = util.ensureObject = util.getProp = util.unesc = void 0;

var _unesc = _interopRequireDefault$1(unesc.exports);

util.unesc = _unesc["default"];

var _getProp = _interopRequireDefault$1(getProp.exports);

util.getProp = _getProp["default"];

var _ensureObject = _interopRequireDefault$1(ensureObject.exports);

util.ensureObject = _ensureObject["default"];

var _stripComments = _interopRequireDefault$1(stripComments.exports);

util.stripComments = _stripComments["default"];

function _interopRequireDefault$1(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _util = util;

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	var cloneNode = function cloneNode(obj, parent) {
	  if (typeof obj !== 'object' || obj === null) {
	    return obj;
	  }

	  var cloned = new obj.constructor();

	  for (var i in obj) {
	    if (!obj.hasOwnProperty(i)) {
	      continue;
	    }

	    var value = obj[i];
	    var type = typeof value;

	    if (i === 'parent' && type === 'object') {
	      if (parent) {
	        cloned[i] = parent;
	      }
	    } else if (value instanceof Array) {
	      cloned[i] = value.map(function (j) {
	        return cloneNode(j, cloned);
	      });
	    } else {
	      cloned[i] = cloneNode(value, cloned);
	    }
	  }

	  return cloned;
	};

	var Node = /*#__PURE__*/function () {
	  function Node(opts) {
	    if (opts === void 0) {
	      opts = {};
	    }

	    Object.assign(this, opts);
	    this.spaces = this.spaces || {};
	    this.spaces.before = this.spaces.before || '';
	    this.spaces.after = this.spaces.after || '';
	  }

	  var _proto = Node.prototype;

	  _proto.remove = function remove() {
	    if (this.parent) {
	      this.parent.removeChild(this);
	    }

	    this.parent = undefined;
	    return this;
	  };

	  _proto.replaceWith = function replaceWith() {
	    if (this.parent) {
	      for (var index in arguments) {
	        this.parent.insertBefore(this, arguments[index]);
	      }

	      this.remove();
	    }

	    return this;
	  };

	  _proto.next = function next() {
	    return this.parent.at(this.parent.index(this) + 1);
	  };

	  _proto.prev = function prev() {
	    return this.parent.at(this.parent.index(this) - 1);
	  };

	  _proto.clone = function clone(overrides) {
	    if (overrides === void 0) {
	      overrides = {};
	    }

	    var cloned = cloneNode(this);

	    for (var name in overrides) {
	      cloned[name] = overrides[name];
	    }

	    return cloned;
	  }
	  /**
	   * Some non-standard syntax doesn't follow normal escaping rules for css.
	   * This allows non standard syntax to be appended to an existing property
	   * by specifying the escaped value. By specifying the escaped value,
	   * illegal characters are allowed to be directly inserted into css output.
	   * @param {string} name the property to set
	   * @param {any} value the unescaped value of the property
	   * @param {string} valueEscaped optional. the escaped value of the property.
	   */
	  ;

	  _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {
	    if (!this.raws) {
	      this.raws = {};
	    }

	    var originalValue = this[name];
	    var originalEscaped = this.raws[name];
	    this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.

	    if (originalEscaped || valueEscaped !== value) {
	      this.raws[name] = (originalEscaped || originalValue) + valueEscaped;
	    } else {
	      delete this.raws[name]; // delete any escaped value that was created by the setter.
	    }
	  }
	  /**
	   * Some non-standard syntax doesn't follow normal escaping rules for css.
	   * This allows the escaped value to be specified directly, allowing illegal
	   * characters to be directly inserted into css output.
	   * @param {string} name the property to set
	   * @param {any} value the unescaped value of the property
	   * @param {string} valueEscaped the escaped value of the property.
	   */
	  ;

	  _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {
	    if (!this.raws) {
	      this.raws = {};
	    }

	    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.

	    this.raws[name] = valueEscaped;
	  }
	  /**
	   * When you want a value to passed through to CSS directly. This method
	   * deletes the corresponding raw value causing the stringifier to fallback
	   * to the unescaped value.
	   * @param {string} name the property to set.
	   * @param {any} value The value that is both escaped and unescaped.
	   */
	  ;

	  _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {
	    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.

	    if (this.raws) {
	      delete this.raws[name];
	    }
	  }
	  /**
	   *
	   * @param {number} line The number (starting with 1)
	   * @param {number} column The column number (starting with 1)
	   */
	  ;

	  _proto.isAtPosition = function isAtPosition(line, column) {
	    if (this.source && this.source.start && this.source.end) {
	      if (this.source.start.line > line) {
	        return false;
	      }

	      if (this.source.end.line < line) {
	        return false;
	      }

	      if (this.source.start.line === line && this.source.start.column > column) {
	        return false;
	      }

	      if (this.source.end.line === line && this.source.end.column < column) {
	        return false;
	      }

	      return true;
	    }

	    return undefined;
	  };

	  _proto.stringifyProperty = function stringifyProperty(name) {
	    return this.raws && this.raws[name] || this[name];
	  };

	  _proto.valueToString = function valueToString() {
	    return String(this.stringifyProperty("value"));
	  };

	  _proto.toString = function toString() {
	    return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');
	  };

	  _createClass(Node, [{
	    key: "rawSpaceBefore",
	    get: function get() {
	      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;

	      if (rawSpace === undefined) {
	        rawSpace = this.spaces && this.spaces.before;
	      }

	      return rawSpace || "";
	    },
	    set: function set(raw) {
	      (0, _util.ensureObject)(this, "raws", "spaces");
	      this.raws.spaces.before = raw;
	    }
	  }, {
	    key: "rawSpaceAfter",
	    get: function get() {
	      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;

	      if (rawSpace === undefined) {
	        rawSpace = this.spaces.after;
	      }

	      return rawSpace || "";
	    },
	    set: function set(raw) {
	      (0, _util.ensureObject)(this, "raws", "spaces");
	      this.raws.spaces.after = raw;
	    }
	  }]);

	  return Node;
	}();

	exports["default"] = Node;
	module.exports = exports.default;
} (node$1, node$1.exports));

var types = {};

types.__esModule = true;
types.UNIVERSAL = types.ATTRIBUTE = types.CLASS = types.COMBINATOR = types.COMMENT = types.ID = types.NESTING = types.PSEUDO = types.ROOT = types.SELECTOR = types.STRING = types.TAG = void 0;
var TAG = 'tag';
types.TAG = TAG;
var STRING = 'string';
types.STRING = STRING;
var SELECTOR = 'selector';
types.SELECTOR = SELECTOR;
var ROOT = 'root';
types.ROOT = ROOT;
var PSEUDO = 'pseudo';
types.PSEUDO = PSEUDO;
var NESTING = 'nesting';
types.NESTING = NESTING;
var ID = 'id';
types.ID = ID;
var COMMENT = 'comment';
types.COMMENT = COMMENT;
var COMBINATOR = 'combinator';
types.COMBINATOR = COMBINATOR;
var CLASS = 'class';
types.CLASS = CLASS;
var ATTRIBUTE = 'attribute';
types.ATTRIBUTE = ATTRIBUTE;
var UNIVERSAL = 'universal';
types.UNIVERSAL = UNIVERSAL;

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var types$1 = _interopRequireWildcard(types);

	function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }

	function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }

	function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Container = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Container, _Node);

	  function Container(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;

	    if (!_this.nodes) {
	      _this.nodes = [];
	    }

	    return _this;
	  }

	  var _proto = Container.prototype;

	  _proto.append = function append(selector) {
	    selector.parent = this;
	    this.nodes.push(selector);
	    return this;
	  };

	  _proto.prepend = function prepend(selector) {
	    selector.parent = this;
	    this.nodes.unshift(selector);
	    return this;
	  };

	  _proto.at = function at(index) {
	    return this.nodes[index];
	  };

	  _proto.index = function index(child) {
	    if (typeof child === 'number') {
	      return child;
	    }

	    return this.nodes.indexOf(child);
	  };

	  _proto.removeChild = function removeChild(child) {
	    child = this.index(child);
	    this.at(child).parent = undefined;
	    this.nodes.splice(child, 1);
	    var index;

	    for (var id in this.indexes) {
	      index = this.indexes[id];

	      if (index >= child) {
	        this.indexes[id] = index - 1;
	      }
	    }

	    return this;
	  };

	  _proto.removeAll = function removeAll() {
	    for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {
	      var node = _step.value;
	      node.parent = undefined;
	    }

	    this.nodes = [];
	    return this;
	  };

	  _proto.empty = function empty() {
	    return this.removeAll();
	  };

	  _proto.insertAfter = function insertAfter(oldNode, newNode) {
	    newNode.parent = this;
	    var oldIndex = this.index(oldNode);
	    this.nodes.splice(oldIndex + 1, 0, newNode);
	    newNode.parent = this;
	    var index;

	    for (var id in this.indexes) {
	      index = this.indexes[id];

	      if (oldIndex <= index) {
	        this.indexes[id] = index + 1;
	      }
	    }

	    return this;
	  };

	  _proto.insertBefore = function insertBefore(oldNode, newNode) {
	    newNode.parent = this;
	    var oldIndex = this.index(oldNode);
	    this.nodes.splice(oldIndex, 0, newNode);
	    newNode.parent = this;
	    var index;

	    for (var id in this.indexes) {
	      index = this.indexes[id];

	      if (index <= oldIndex) {
	        this.indexes[id] = index + 1;
	      }
	    }

	    return this;
	  };

	  _proto._findChildAtPosition = function _findChildAtPosition(line, col) {
	    var found = undefined;
	    this.each(function (node) {
	      if (node.atPosition) {
	        var foundChild = node.atPosition(line, col);

	        if (foundChild) {
	          found = foundChild;
	          return false;
	        }
	      } else if (node.isAtPosition(line, col)) {
	        found = node;
	        return false;
	      }
	    });
	    return found;
	  }
	  /**
	   * Return the most specific node at the line and column number given.
	   * The source location is based on the original parsed location, locations aren't
	   * updated as selector nodes are mutated.
	   * 
	   * Note that this location is relative to the location of the first character
	   * of the selector, and not the location of the selector in the overall document
	   * when used in conjunction with postcss.
	   *
	   * If not found, returns undefined.
	   * @param {number} line The line number of the node to find. (1-based index)
	   * @param {number} col  The column number of the node to find. (1-based index)
	   */
	  ;

	  _proto.atPosition = function atPosition(line, col) {
	    if (this.isAtPosition(line, col)) {
	      return this._findChildAtPosition(line, col) || this;
	    } else {
	      return undefined;
	    }
	  };

	  _proto._inferEndPosition = function _inferEndPosition() {
	    if (this.last && this.last.source && this.last.source.end) {
	      this.source = this.source || {};
	      this.source.end = this.source.end || {};
	      Object.assign(this.source.end, this.last.source.end);
	    }
	  };

	  _proto.each = function each(callback) {
	    if (!this.lastEach) {
	      this.lastEach = 0;
	    }

	    if (!this.indexes) {
	      this.indexes = {};
	    }

	    this.lastEach++;
	    var id = this.lastEach;
	    this.indexes[id] = 0;

	    if (!this.length) {
	      return undefined;
	    }

	    var index, result;

	    while (this.indexes[id] < this.length) {
	      index = this.indexes[id];
	      result = callback(this.at(index), index);

	      if (result === false) {
	        break;
	      }

	      this.indexes[id] += 1;
	    }

	    delete this.indexes[id];

	    if (result === false) {
	      return false;
	    }
	  };

	  _proto.walk = function walk(callback) {
	    return this.each(function (node, i) {
	      var result = callback(node, i);

	      if (result !== false && node.length) {
	        result = node.walk(callback);
	      }

	      if (result === false) {
	        return false;
	      }
	    });
	  };

	  _proto.walkAttributes = function walkAttributes(callback) {
	    var _this2 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.ATTRIBUTE) {
	        return callback.call(_this2, selector);
	      }
	    });
	  };

	  _proto.walkClasses = function walkClasses(callback) {
	    var _this3 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.CLASS) {
	        return callback.call(_this3, selector);
	      }
	    });
	  };

	  _proto.walkCombinators = function walkCombinators(callback) {
	    var _this4 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.COMBINATOR) {
	        return callback.call(_this4, selector);
	      }
	    });
	  };

	  _proto.walkComments = function walkComments(callback) {
	    var _this5 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.COMMENT) {
	        return callback.call(_this5, selector);
	      }
	    });
	  };

	  _proto.walkIds = function walkIds(callback) {
	    var _this6 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.ID) {
	        return callback.call(_this6, selector);
	      }
	    });
	  };

	  _proto.walkNesting = function walkNesting(callback) {
	    var _this7 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.NESTING) {
	        return callback.call(_this7, selector);
	      }
	    });
	  };

	  _proto.walkPseudos = function walkPseudos(callback) {
	    var _this8 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.PSEUDO) {
	        return callback.call(_this8, selector);
	      }
	    });
	  };

	  _proto.walkTags = function walkTags(callback) {
	    var _this9 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.TAG) {
	        return callback.call(_this9, selector);
	      }
	    });
	  };

	  _proto.walkUniversals = function walkUniversals(callback) {
	    var _this10 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.UNIVERSAL) {
	        return callback.call(_this10, selector);
	      }
	    });
	  };

	  _proto.split = function split(callback) {
	    var _this11 = this;

	    var current = [];
	    return this.reduce(function (memo, node, index) {
	      var split = callback.call(_this11, node);
	      current.push(node);

	      if (split) {
	        memo.push(current);
	        current = [];
	      } else if (index === _this11.length - 1) {
	        memo.push(current);
	      }

	      return memo;
	    }, []);
	  };

	  _proto.map = function map(callback) {
	    return this.nodes.map(callback);
	  };

	  _proto.reduce = function reduce(callback, memo) {
	    return this.nodes.reduce(callback, memo);
	  };

	  _proto.every = function every(callback) {
	    return this.nodes.every(callback);
	  };

	  _proto.some = function some(callback) {
	    return this.nodes.some(callback);
	  };

	  _proto.filter = function filter(callback) {
	    return this.nodes.filter(callback);
	  };

	  _proto.sort = function sort(callback) {
	    return this.nodes.sort(callback);
	  };

	  _proto.toString = function toString() {
	    return this.map(String).join('');
	  };

	  _createClass(Container, [{
	    key: "first",
	    get: function get() {
	      return this.at(0);
	    }
	  }, {
	    key: "last",
	    get: function get() {
	      return this.at(this.length - 1);
	    }
	  }, {
	    key: "length",
	    get: function get() {
	      return this.nodes.length;
	    }
	  }]);

	  return Container;
	}(_node["default"]);

	exports["default"] = Container;
	module.exports = exports.default;
} (container, container.exports));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _container = _interopRequireDefault(container.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Root = /*#__PURE__*/function (_Container) {
	  _inheritsLoose(Root, _Container);

	  function Root(opts) {
	    var _this;

	    _this = _Container.call(this, opts) || this;
	    _this.type = _types.ROOT;
	    return _this;
	  }

	  var _proto = Root.prototype;

	  _proto.toString = function toString() {
	    var str = this.reduce(function (memo, selector) {
	      memo.push(String(selector));
	      return memo;
	    }, []).join(',');
	    return this.trailingComma ? str + ',' : str;
	  };

	  _proto.error = function error(message, options) {
	    if (this._error) {
	      return this._error(message, options);
	    } else {
	      return new Error(message);
	    }
	  };

	  _createClass(Root, [{
	    key: "errorGenerator",
	    set: function set(handler) {
	      this._error = handler;
	    }
	  }]);

	  return Root;
	}(_container["default"]);

	exports["default"] = Root;
	module.exports = exports.default;
} (root$1, root$1.exports));

var selector$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _container = _interopRequireDefault(container.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Selector = /*#__PURE__*/function (_Container) {
	  _inheritsLoose(Selector, _Container);

	  function Selector(opts) {
	    var _this;

	    _this = _Container.call(this, opts) || this;
	    _this.type = _types.SELECTOR;
	    return _this;
	  }

	  return Selector;
	}(_container["default"]);

	exports["default"] = Selector;
	module.exports = exports.default;
} (selector$1, selector$1.exports));

var className$1 = {exports: {}};

/*! https://mths.be/cssesc v3.0.0 by @mathias */

var object = {};
var hasOwnProperty = object.hasOwnProperty;
var merge$1 = function merge(options, defaults) {
	if (!options) {
		return defaults;
	}
	var result = {};
	for (var key in defaults) {
		// `if (defaults.hasOwnProperty(key) { â€¦ }` is not needed here, since
		// only recognized option names are used.
		result[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];
	}
	return result;
};

var regexAnySingleEscape = /[ -,\.\/:-@\[-\^`\{-~]/;
var regexSingleEscape = /[ -,\.\/:-@\[\]\^`\{-~]/;
var regexExcessiveSpaces = /(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g;

// https://mathiasbynens.be/notes/css-escapes#css
var cssesc = function cssesc(string, options) {
	options = merge$1(options, cssesc.options);
	if (options.quotes != 'single' && options.quotes != 'double') {
		options.quotes = 'single';
	}
	var quote = options.quotes == 'double' ? '"' : '\'';
	var isIdentifier = options.isIdentifier;

	var firstChar = string.charAt(0);
	var output = '';
	var counter = 0;
	var length = string.length;
	while (counter < length) {
		var character = string.charAt(counter++);
		var codePoint = character.charCodeAt();
		var value = void 0;
		// If itâ€™s not a printable ASCII characterâ€¦
		if (codePoint < 0x20 || codePoint > 0x7E) {
			if (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {
				// Itâ€™s a high surrogate, and there is a next character.
				var extra = string.charCodeAt(counter++);
				if ((extra & 0xFC00) == 0xDC00) {
					// next character is low surrogate
					codePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;
				} else {
					// Itâ€™s an unmatched surrogate; only append this code unit, in case
					// the next code unit is the high surrogate of a surrogate pair.
					counter--;
				}
			}
			value = '\\' + codePoint.toString(16).toUpperCase() + ' ';
		} else {
			if (options.escapeEverything) {
				if (regexAnySingleEscape.test(character)) {
					value = '\\' + character;
				} else {
					value = '\\' + codePoint.toString(16).toUpperCase() + ' ';
				}
			} else if (/[\t\n\f\r\x0B]/.test(character)) {
				value = '\\' + codePoint.toString(16).toUpperCase() + ' ';
			} else if (character == '\\' || !isIdentifier && (character == '"' && quote == character || character == '\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {
				value = '\\' + character;
			} else {
				value = character;
			}
		}
		output += value;
	}

	if (isIdentifier) {
		if (/^-[-\d]/.test(output)) {
			output = '\\-' + output.slice(1);
		} else if (/\d/.test(firstChar)) {
			output = '\\3' + firstChar + ' ' + output.slice(1);
		}
	}

	// Remove spaces after `\HEX` escapes that are not followed by a hex digit,
	// since theyâ€™re redundant. Note that this is only possible if the escape
	// sequence isnâ€™t preceded by an odd number of backslashes.
	output = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {
		if ($1 && $1.length % 2) {
			// Itâ€™s not safe to remove the space, so donâ€™t.
			return $0;
		}
		// Strip the space.
		return ($1 || '') + $2;
	});

	if (!isIdentifier && options.wrap) {
		return quote + output + quote;
	}
	return output;
};

// Expose default options (so they can be overridden globally).
cssesc.options = {
	'escapeEverything': false,
	'isIdentifier': false,
	'quotes': 'single',
	'wrap': false
};

cssesc.version = '3.0.0';

var cssesc_1 = cssesc;

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _cssesc = _interopRequireDefault(cssesc_1);

	var _util = util;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var ClassName = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(ClassName, _Node);

	  function ClassName(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.CLASS;
	    _this._constructed = true;
	    return _this;
	  }

	  var _proto = ClassName.prototype;

	  _proto.valueToString = function valueToString() {
	    return '.' + _Node.prototype.valueToString.call(this);
	  };

	  _createClass(ClassName, [{
	    key: "value",
	    get: function get() {
	      return this._value;
	    },
	    set: function set(v) {
	      if (this._constructed) {
	        var escaped = (0, _cssesc["default"])(v, {
	          isIdentifier: true
	        });

	        if (escaped !== v) {
	          (0, _util.ensureObject)(this, "raws");
	          this.raws.value = escaped;
	        } else if (this.raws) {
	          delete this.raws.value;
	        }
	      }

	      this._value = v;
	    }
	  }]);

	  return ClassName;
	}(_node["default"]);

	exports["default"] = ClassName;
	module.exports = exports.default;
} (className$1, className$1.exports));

var comment$2 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Comment = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Comment, _Node);

	  function Comment(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.COMMENT;
	    return _this;
	  }

	  return Comment;
	}(_node["default"]);

	exports["default"] = Comment;
	module.exports = exports.default;
} (comment$2, comment$2.exports));

var id$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var ID = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(ID, _Node);

	  function ID(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.ID;
	    return _this;
	  }

	  var _proto = ID.prototype;

	  _proto.valueToString = function valueToString() {
	    return '#' + _Node.prototype.valueToString.call(this);
	  };

	  return ID;
	}(_node["default"]);

	exports["default"] = ID;
	module.exports = exports.default;
} (id$1, id$1.exports));

var tag$1 = {exports: {}};

var namespace = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _cssesc = _interopRequireDefault(cssesc_1);

	var _util = util;

	var _node = _interopRequireDefault(node$1.exports);

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Namespace = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Namespace, _Node);

	  function Namespace() {
	    return _Node.apply(this, arguments) || this;
	  }

	  var _proto = Namespace.prototype;

	  _proto.qualifiedName = function qualifiedName(value) {
	    if (this.namespace) {
	      return this.namespaceString + "|" + value;
	    } else {
	      return value;
	    }
	  };

	  _proto.valueToString = function valueToString() {
	    return this.qualifiedName(_Node.prototype.valueToString.call(this));
	  };

	  _createClass(Namespace, [{
	    key: "namespace",
	    get: function get() {
	      return this._namespace;
	    },
	    set: function set(namespace) {
	      if (namespace === true || namespace === "*" || namespace === "&") {
	        this._namespace = namespace;

	        if (this.raws) {
	          delete this.raws.namespace;
	        }

	        return;
	      }

	      var escaped = (0, _cssesc["default"])(namespace, {
	        isIdentifier: true
	      });
	      this._namespace = namespace;

	      if (escaped !== namespace) {
	        (0, _util.ensureObject)(this, "raws");
	        this.raws.namespace = escaped;
	      } else if (this.raws) {
	        delete this.raws.namespace;
	      }
	    }
	  }, {
	    key: "ns",
	    get: function get() {
	      return this._namespace;
	    },
	    set: function set(namespace) {
	      this.namespace = namespace;
	    }
	  }, {
	    key: "namespaceString",
	    get: function get() {
	      if (this.namespace) {
	        var ns = this.stringifyProperty("namespace");

	        if (ns === true) {
	          return '';
	        } else {
	          return ns;
	        }
	      } else {
	        return '';
	      }
	    }
	  }]);

	  return Namespace;
	}(_node["default"]);

	exports["default"] = Namespace;
	module.exports = exports.default;
} (namespace, namespace.exports));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _namespace = _interopRequireDefault(namespace.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Tag = /*#__PURE__*/function (_Namespace) {
	  _inheritsLoose(Tag, _Namespace);

	  function Tag(opts) {
	    var _this;

	    _this = _Namespace.call(this, opts) || this;
	    _this.type = _types.TAG;
	    return _this;
	  }

	  return Tag;
	}(_namespace["default"]);

	exports["default"] = Tag;
	module.exports = exports.default;
} (tag$1, tag$1.exports));

var string$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var String = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(String, _Node);

	  function String(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.STRING;
	    return _this;
	  }

	  return String;
	}(_node["default"]);

	exports["default"] = String;
	module.exports = exports.default;
} (string$1, string$1.exports));

var pseudo$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _container = _interopRequireDefault(container.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Pseudo = /*#__PURE__*/function (_Container) {
	  _inheritsLoose(Pseudo, _Container);

	  function Pseudo(opts) {
	    var _this;

	    _this = _Container.call(this, opts) || this;
	    _this.type = _types.PSEUDO;
	    return _this;
	  }

	  var _proto = Pseudo.prototype;

	  _proto.toString = function toString() {
	    var params = this.length ? '(' + this.map(String).join(',') + ')' : '';
	    return [this.rawSpaceBefore, this.stringifyProperty("value"), params, this.rawSpaceAfter].join('');
	  };

	  return Pseudo;
	}(_container["default"]);

	exports["default"] = Pseudo;
	module.exports = exports.default;
} (pseudo$1, pseudo$1.exports));

var attribute$1 = {};

/**
 * For Node.js, simply re-export the core `util.deprecate` function.
 */

var node = require$$2__default["default"].deprecate;

(function (exports) {

	exports.__esModule = true;
	exports.unescapeValue = unescapeValue;
	exports["default"] = void 0;

	var _cssesc = _interopRequireDefault(cssesc_1);

	var _unesc = _interopRequireDefault(unesc.exports);

	var _namespace = _interopRequireDefault(namespace.exports);

	var _types = types;

	var _CSSESC_QUOTE_OPTIONS;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var deprecate = node;

	var WRAPPED_IN_QUOTES = /^('|")([^]*)\1$/;
	var warnOfDeprecatedValueAssignment = deprecate(function () {}, "Assigning an attribute a value containing characters that might need to be escaped is deprecated. " + "Call attribute.setValue() instead.");
	var warnOfDeprecatedQuotedAssignment = deprecate(function () {}, "Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.");
	var warnOfDeprecatedConstructor = deprecate(function () {}, "Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.");

	function unescapeValue(value) {
	  var deprecatedUsage = false;
	  var quoteMark = null;
	  var unescaped = value;
	  var m = unescaped.match(WRAPPED_IN_QUOTES);

	  if (m) {
	    quoteMark = m[1];
	    unescaped = m[2];
	  }

	  unescaped = (0, _unesc["default"])(unescaped);

	  if (unescaped !== value) {
	    deprecatedUsage = true;
	  }

	  return {
	    deprecatedUsage: deprecatedUsage,
	    unescaped: unescaped,
	    quoteMark: quoteMark
	  };
	}

	function handleDeprecatedContructorOpts(opts) {
	  if (opts.quoteMark !== undefined) {
	    return opts;
	  }

	  if (opts.value === undefined) {
	    return opts;
	  }

	  warnOfDeprecatedConstructor();

	  var _unescapeValue = unescapeValue(opts.value),
	      quoteMark = _unescapeValue.quoteMark,
	      unescaped = _unescapeValue.unescaped;

	  if (!opts.raws) {
	    opts.raws = {};
	  }

	  if (opts.raws.value === undefined) {
	    opts.raws.value = opts.value;
	  }

	  opts.value = unescaped;
	  opts.quoteMark = quoteMark;
	  return opts;
	}

	var Attribute = /*#__PURE__*/function (_Namespace) {
	  _inheritsLoose(Attribute, _Namespace);

	  function Attribute(opts) {
	    var _this;

	    if (opts === void 0) {
	      opts = {};
	    }

	    _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;
	    _this.type = _types.ATTRIBUTE;
	    _this.raws = _this.raws || {};
	    Object.defineProperty(_this.raws, 'unquoted', {
	      get: deprecate(function () {
	        return _this.value;
	      }, "attr.raws.unquoted is deprecated. Call attr.value instead."),
	      set: deprecate(function () {
	        return _this.value;
	      }, "Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.")
	    });
	    _this._constructed = true;
	    return _this;
	  }
	  /**
	   * Returns the Attribute's value quoted such that it would be legal to use
	   * in the value of a css file. The original value's quotation setting
	   * used for stringification is left unchanged. See `setValue(value, options)`
	   * if you want to control the quote settings of a new value for the attribute.
	   *
	   * You can also change the quotation used for the current value by setting quoteMark.
	   *
	   * Options:
	   *   * quoteMark {'"' | "'" | null} - Use this value to quote the value. If this
	   *     option is not set, the original value for quoteMark will be used. If
	   *     indeterminate, a double quote is used. The legal values are:
	   *     * `null` - the value will be unquoted and characters will be escaped as necessary.
	   *     * `'` - the value will be quoted with a single quote and single quotes are escaped.
	   *     * `"` - the value will be quoted with a double quote and double quotes are escaped.
	   *   * preferCurrentQuoteMark {boolean} - if true, prefer the source quote mark
	   *     over the quoteMark option value.
	   *   * smart {boolean} - if true, will select a quote mark based on the value
	   *     and the other options specified here. See the `smartQuoteMark()`
	   *     method.
	   **/


	  var _proto = Attribute.prototype;

	  _proto.getQuotedValue = function getQuotedValue(options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var quoteMark = this._determineQuoteMark(options);

	    var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];
	    var escaped = (0, _cssesc["default"])(this._value, cssescopts);
	    return escaped;
	  };

	  _proto._determineQuoteMark = function _determineQuoteMark(options) {
	    return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);
	  }
	  /**
	   * Set the unescaped value with the specified quotation options. The value
	   * provided must not include any wrapping quote marks -- those quotes will
	   * be interpreted as part of the value and escaped accordingly.
	   */
	  ;

	  _proto.setValue = function setValue(value, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    this._value = value;
	    this._quoteMark = this._determineQuoteMark(options);

	    this._syncRawValue();
	  }
	  /**
	   * Intelligently select a quoteMark value based on the value's contents. If
	   * the value is a legal CSS ident, it will not be quoted. Otherwise a quote
	   * mark will be picked that minimizes the number of escapes.
	   *
	   * If there's no clear winner, the quote mark from these options is used,
	   * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is
	   * true). If the quoteMark is unspecified, a double quote is used.
	   *
	   * @param options This takes the quoteMark and preferCurrentQuoteMark options
	   * from the quoteValue method.
	   */
	  ;

	  _proto.smartQuoteMark = function smartQuoteMark(options) {
	    var v = this.value;
	    var numSingleQuotes = v.replace(/[^']/g, '').length;
	    var numDoubleQuotes = v.replace(/[^"]/g, '').length;

	    if (numSingleQuotes + numDoubleQuotes === 0) {
	      var escaped = (0, _cssesc["default"])(v, {
	        isIdentifier: true
	      });

	      if (escaped === v) {
	        return Attribute.NO_QUOTE;
	      } else {
	        var pref = this.preferredQuoteMark(options);

	        if (pref === Attribute.NO_QUOTE) {
	          // pick a quote mark that isn't none and see if it's smaller
	          var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE;
	          var opts = CSSESC_QUOTE_OPTIONS[quote];
	          var quoteValue = (0, _cssesc["default"])(v, opts);

	          if (quoteValue.length < escaped.length) {
	            return quote;
	          }
	        }

	        return pref;
	      }
	    } else if (numDoubleQuotes === numSingleQuotes) {
	      return this.preferredQuoteMark(options);
	    } else if (numDoubleQuotes < numSingleQuotes) {
	      return Attribute.DOUBLE_QUOTE;
	    } else {
	      return Attribute.SINGLE_QUOTE;
	    }
	  }
	  /**
	   * Selects the preferred quote mark based on the options and the current quote mark value.
	   * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)`
	   * instead.
	   */
	  ;

	  _proto.preferredQuoteMark = function preferredQuoteMark(options) {
	    var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;

	    if (quoteMark === undefined) {
	      quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;
	    }

	    if (quoteMark === undefined) {
	      quoteMark = Attribute.DOUBLE_QUOTE;
	    }

	    return quoteMark;
	  };

	  _proto._syncRawValue = function _syncRawValue() {
	    var rawValue = (0, _cssesc["default"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);

	    if (rawValue === this._value) {
	      if (this.raws) {
	        delete this.raws.value;
	      }
	    } else {
	      this.raws.value = rawValue;
	    }
	  };

	  _proto._handleEscapes = function _handleEscapes(prop, value) {
	    if (this._constructed) {
	      var escaped = (0, _cssesc["default"])(value, {
	        isIdentifier: true
	      });

	      if (escaped !== value) {
	        this.raws[prop] = escaped;
	      } else {
	        delete this.raws[prop];
	      }
	    }
	  };

	  _proto._spacesFor = function _spacesFor(name) {
	    var attrSpaces = {
	      before: '',
	      after: ''
	    };
	    var spaces = this.spaces[name] || {};
	    var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};
	    return Object.assign(attrSpaces, spaces, rawSpaces);
	  };

	  _proto._stringFor = function _stringFor(name, spaceName, concat) {
	    if (spaceName === void 0) {
	      spaceName = name;
	    }

	    if (concat === void 0) {
	      concat = defaultAttrConcat;
	    }

	    var attrSpaces = this._spacesFor(spaceName);

	    return concat(this.stringifyProperty(name), attrSpaces);
	  }
	  /**
	   * returns the offset of the attribute part specified relative to the
	   * start of the node of the output string.
	   *
	   * * "ns" - alias for "namespace"
	   * * "namespace" - the namespace if it exists.
	   * * "attribute" - the attribute name
	   * * "attributeNS" - the start of the attribute or its namespace
	   * * "operator" - the match operator of the attribute
	   * * "value" - The value (string or identifier)
	   * * "insensitive" - the case insensitivity flag;
	   * @param part One of the possible values inside an attribute.
	   * @returns -1 if the name is invalid or the value doesn't exist in this attribute.
	   */
	  ;

	  _proto.offsetOf = function offsetOf(name) {
	    var count = 1;

	    var attributeSpaces = this._spacesFor("attribute");

	    count += attributeSpaces.before.length;

	    if (name === "namespace" || name === "ns") {
	      return this.namespace ? count : -1;
	    }

	    if (name === "attributeNS") {
	      return count;
	    }

	    count += this.namespaceString.length;

	    if (this.namespace) {
	      count += 1;
	    }

	    if (name === "attribute") {
	      return count;
	    }

	    count += this.stringifyProperty("attribute").length;
	    count += attributeSpaces.after.length;

	    var operatorSpaces = this._spacesFor("operator");

	    count += operatorSpaces.before.length;
	    var operator = this.stringifyProperty("operator");

	    if (name === "operator") {
	      return operator ? count : -1;
	    }

	    count += operator.length;
	    count += operatorSpaces.after.length;

	    var valueSpaces = this._spacesFor("value");

	    count += valueSpaces.before.length;
	    var value = this.stringifyProperty("value");

	    if (name === "value") {
	      return value ? count : -1;
	    }

	    count += value.length;
	    count += valueSpaces.after.length;

	    var insensitiveSpaces = this._spacesFor("insensitive");

	    count += insensitiveSpaces.before.length;

	    if (name === "insensitive") {
	      return this.insensitive ? count : -1;
	    }

	    return -1;
	  };

	  _proto.toString = function toString() {
	    var _this2 = this;

	    var selector = [this.rawSpaceBefore, '['];
	    selector.push(this._stringFor('qualifiedAttribute', 'attribute'));

	    if (this.operator && (this.value || this.value === '')) {
	      selector.push(this._stringFor('operator'));
	      selector.push(this._stringFor('value'));
	      selector.push(this._stringFor('insensitiveFlag', 'insensitive', function (attrValue, attrSpaces) {
	        if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {
	          attrSpaces.before = " ";
	        }

	        return defaultAttrConcat(attrValue, attrSpaces);
	      }));
	    }

	    selector.push(']');
	    selector.push(this.rawSpaceAfter);
	    return selector.join('');
	  };

	  _createClass(Attribute, [{
	    key: "quoted",
	    get: function get() {
	      var qm = this.quoteMark;
	      return qm === "'" || qm === '"';
	    },
	    set: function set(value) {
	      warnOfDeprecatedQuotedAssignment();
	    }
	    /**
	     * returns a single (`'`) or double (`"`) quote character if the value is quoted.
	     * returns `null` if the value is not quoted.
	     * returns `undefined` if the quotation state is unknown (this can happen when
	     * the attribute is constructed without specifying a quote mark.)
	     */

	  }, {
	    key: "quoteMark",
	    get: function get() {
	      return this._quoteMark;
	    }
	    /**
	     * Set the quote mark to be used by this attribute's value.
	     * If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute
	     * value is updated accordingly.
	     *
	     * @param {"'" | '"' | null} quoteMark The quote mark or `null` if the value should be unquoted.
	     */
	    ,
	    set: function set(quoteMark) {
	      if (!this._constructed) {
	        this._quoteMark = quoteMark;
	        return;
	      }

	      if (this._quoteMark !== quoteMark) {
	        this._quoteMark = quoteMark;

	        this._syncRawValue();
	      }
	    }
	  }, {
	    key: "qualifiedAttribute",
	    get: function get() {
	      return this.qualifiedName(this.raws.attribute || this.attribute);
	    }
	  }, {
	    key: "insensitiveFlag",
	    get: function get() {
	      return this.insensitive ? 'i' : '';
	    }
	  }, {
	    key: "value",
	    get: function get() {
	      return this._value;
	    }
	    /**
	     * Before 3.0, the value had to be set to an escaped value including any wrapped
	     * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value
	     * is unescaped during parsing and any quote marks are removed.
	     *
	     * Because the ambiguity of this semantic change, if you set `attr.value = newValue`,
	     * a deprecation warning is raised when the new value contains any characters that would
	     * require escaping (including if it contains wrapped quotes).
	     *
	     * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe
	     * how the new value is quoted.
	     */
	    ,
	    set: function set(v) {
	      if (this._constructed) {
	        var _unescapeValue2 = unescapeValue(v),
	            deprecatedUsage = _unescapeValue2.deprecatedUsage,
	            unescaped = _unescapeValue2.unescaped,
	            quoteMark = _unescapeValue2.quoteMark;

	        if (deprecatedUsage) {
	          warnOfDeprecatedValueAssignment();
	        }

	        if (unescaped === this._value && quoteMark === this._quoteMark) {
	          return;
	        }

	        this._value = unescaped;
	        this._quoteMark = quoteMark;

	        this._syncRawValue();
	      } else {
	        this._value = v;
	      }
	    }
	  }, {
	    key: "attribute",
	    get: function get() {
	      return this._attribute;
	    },
	    set: function set(name) {
	      this._handleEscapes("attribute", name);

	      this._attribute = name;
	    }
	  }]);

	  return Attribute;
	}(_namespace["default"]);

	exports["default"] = Attribute;
	Attribute.NO_QUOTE = null;
	Attribute.SINGLE_QUOTE = "'";
	Attribute.DOUBLE_QUOTE = '"';
	var CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {
	  "'": {
	    quotes: 'single',
	    wrap: true
	  },
	  '"': {
	    quotes: 'double',
	    wrap: true
	  }
	}, _CSSESC_QUOTE_OPTIONS[null] = {
	  isIdentifier: true
	}, _CSSESC_QUOTE_OPTIONS);

	function defaultAttrConcat(attrValue, attrSpaces) {
	  return "" + attrSpaces.before + attrValue + attrSpaces.after;
	}
} (attribute$1));

var universal$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _namespace = _interopRequireDefault(namespace.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Universal = /*#__PURE__*/function (_Namespace) {
	  _inheritsLoose(Universal, _Namespace);

	  function Universal(opts) {
	    var _this;

	    _this = _Namespace.call(this, opts) || this;
	    _this.type = _types.UNIVERSAL;
	    _this.value = '*';
	    return _this;
	  }

	  return Universal;
	}(_namespace["default"]);

	exports["default"] = Universal;
	module.exports = exports.default;
} (universal$1, universal$1.exports));

var combinator$2 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Combinator = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Combinator, _Node);

	  function Combinator(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.COMBINATOR;
	    return _this;
	  }

	  return Combinator;
	}(_node["default"]);

	exports["default"] = Combinator;
	module.exports = exports.default;
} (combinator$2, combinator$2.exports));

var nesting$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Nesting = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Nesting, _Node);

	  function Nesting(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.NESTING;
	    _this.value = '&';
	    return _this;
	  }

	  return Nesting;
	}(_node["default"]);

	exports["default"] = Nesting;
	module.exports = exports.default;
} (nesting$1, nesting$1.exports));

var sortAscending = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = sortAscending;

	function sortAscending(list) {
	  return list.sort(function (a, b) {
	    return a - b;
	  });
	}
	module.exports = exports.default;
} (sortAscending, sortAscending.exports));

var tokenize = {};

var tokenTypes = {};

tokenTypes.__esModule = true;
tokenTypes.combinator = tokenTypes.word = tokenTypes.comment = tokenTypes.str = tokenTypes.tab = tokenTypes.newline = tokenTypes.feed = tokenTypes.cr = tokenTypes.backslash = tokenTypes.bang = tokenTypes.slash = tokenTypes.doubleQuote = tokenTypes.singleQuote = tokenTypes.space = tokenTypes.greaterThan = tokenTypes.pipe = tokenTypes.equals = tokenTypes.plus = tokenTypes.caret = tokenTypes.tilde = tokenTypes.dollar = tokenTypes.closeSquare = tokenTypes.openSquare = tokenTypes.closeParenthesis = tokenTypes.openParenthesis = tokenTypes.semicolon = tokenTypes.colon = tokenTypes.comma = tokenTypes.at = tokenTypes.asterisk = tokenTypes.ampersand = void 0;
var ampersand = 38; // `&`.charCodeAt(0);

tokenTypes.ampersand = ampersand;
var asterisk = 42; // `*`.charCodeAt(0);

tokenTypes.asterisk = asterisk;
var at = 64; // `@`.charCodeAt(0);

tokenTypes.at = at;
var comma = 44; // `,`.charCodeAt(0);

tokenTypes.comma = comma;
var colon = 58; // `:`.charCodeAt(0);

tokenTypes.colon = colon;
var semicolon = 59; // `;`.charCodeAt(0);

tokenTypes.semicolon = semicolon;
var openParenthesis = 40; // `(`.charCodeAt(0);

tokenTypes.openParenthesis = openParenthesis;
var closeParenthesis = 41; // `)`.charCodeAt(0);

tokenTypes.closeParenthesis = closeParenthesis;
var openSquare = 91; // `[`.charCodeAt(0);

tokenTypes.openSquare = openSquare;
var closeSquare = 93; // `]`.charCodeAt(0);

tokenTypes.closeSquare = closeSquare;
var dollar = 36; // `$`.charCodeAt(0);

tokenTypes.dollar = dollar;
var tilde = 126; // `~`.charCodeAt(0);

tokenTypes.tilde = tilde;
var caret = 94; // `^`.charCodeAt(0);

tokenTypes.caret = caret;
var plus = 43; // `+`.charCodeAt(0);

tokenTypes.plus = plus;
var equals = 61; // `=`.charCodeAt(0);

tokenTypes.equals = equals;
var pipe = 124; // `|`.charCodeAt(0);

tokenTypes.pipe = pipe;
var greaterThan = 62; // `>`.charCodeAt(0);

tokenTypes.greaterThan = greaterThan;
var space = 32; // ` `.charCodeAt(0);

tokenTypes.space = space;
var singleQuote = 39; // `'`.charCodeAt(0);

tokenTypes.singleQuote = singleQuote;
var doubleQuote = 34; // `"`.charCodeAt(0);

tokenTypes.doubleQuote = doubleQuote;
var slash = 47; // `/`.charCodeAt(0);

tokenTypes.slash = slash;
var bang = 33; // `!`.charCodeAt(0);

tokenTypes.bang = bang;
var backslash = 92; // '\\'.charCodeAt(0);

tokenTypes.backslash = backslash;
var cr = 13; // '\r'.charCodeAt(0);

tokenTypes.cr = cr;
var feed = 12; // '\f'.charCodeAt(0);

tokenTypes.feed = feed;
var newline = 10; // '\n'.charCodeAt(0);

tokenTypes.newline = newline;
var tab = 9; // '\t'.charCodeAt(0);
// Expose aliases primarily for readability.

tokenTypes.tab = tab;
var str = singleQuote; // No good single character representation!

tokenTypes.str = str;
var comment$1 = -1;
tokenTypes.comment = comment$1;
var word = -2;
tokenTypes.word = word;
var combinator$1 = -3;
tokenTypes.combinator = combinator$1;

(function (exports) {

	exports.__esModule = true;
	exports["default"] = tokenize;
	exports.FIELDS = void 0;

	var t = _interopRequireWildcard(tokenTypes);

	var _unescapable, _wordDelimiters;

	function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

	var unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);
	var wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);
	var hex = {};
	var hexChars = "0123456789abcdefABCDEF";

	for (var i = 0; i < hexChars.length; i++) {
	  hex[hexChars.charCodeAt(i)] = true;
	}
	/**
	 *  Returns the last index of the bar css word
	 * @param {string} css The string in which the word begins
	 * @param {number} start The index into the string where word's first letter occurs
	 */


	function consumeWord(css, start) {
	  var next = start;
	  var code;

	  do {
	    code = css.charCodeAt(next);

	    if (wordDelimiters[code]) {
	      return next - 1;
	    } else if (code === t.backslash) {
	      next = consumeEscape(css, next) + 1;
	    } else {
	      // All other characters are part of the word
	      next++;
	    }
	  } while (next < css.length);

	  return next - 1;
	}
	/**
	 *  Returns the last index of the escape sequence
	 * @param {string} css The string in which the sequence begins
	 * @param {number} start The index into the string where escape character (`\`) occurs.
	 */


	function consumeEscape(css, start) {
	  var next = start;
	  var code = css.charCodeAt(next + 1);

	  if (unescapable[code]) ; else if (hex[code]) {
	    var hexDigits = 0; // consume up to 6 hex chars

	    do {
	      next++;
	      hexDigits++;
	      code = css.charCodeAt(next + 1);
	    } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape


	    if (hexDigits < 6 && code === t.space) {
	      next++;
	    }
	  } else {
	    // the next char is part of the current word
	    next++;
	  }

	  return next;
	}

	var FIELDS = {
	  TYPE: 0,
	  START_LINE: 1,
	  START_COL: 2,
	  END_LINE: 3,
	  END_COL: 4,
	  START_POS: 5,
	  END_POS: 6
	};
	exports.FIELDS = FIELDS;

	function tokenize(input) {
	  var tokens = [];
	  var css = input.css.valueOf();
	  var _css = css,
	      length = _css.length;
	  var offset = -1;
	  var line = 1;
	  var start = 0;
	  var end = 0;
	  var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;

	  function unclosed(what, fix) {
	    if (input.safe) {
	      // fyi: this is never set to true.
	      css += fix;
	      next = css.length - 1;
	    } else {
	      throw input.error('Unclosed ' + what, line, start - offset, start);
	    }
	  }

	  while (start < length) {
	    code = css.charCodeAt(start);

	    if (code === t.newline) {
	      offset = start;
	      line += 1;
	    }

	    switch (code) {
	      case t.space:
	      case t.tab:
	      case t.newline:
	      case t.cr:
	      case t.feed:
	        next = start;

	        do {
	          next += 1;
	          code = css.charCodeAt(next);

	          if (code === t.newline) {
	            offset = next;
	            line += 1;
	          }
	        } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);

	        tokenType = t.space;
	        endLine = line;
	        endColumn = next - offset - 1;
	        end = next;
	        break;

	      case t.plus:
	      case t.greaterThan:
	      case t.tilde:
	      case t.pipe:
	        next = start;

	        do {
	          next += 1;
	          code = css.charCodeAt(next);
	        } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);

	        tokenType = t.combinator;
	        endLine = line;
	        endColumn = start - offset;
	        end = next;
	        break;
	      // Consume these characters as single tokens.

	      case t.asterisk:
	      case t.ampersand:
	      case t.bang:
	      case t.comma:
	      case t.equals:
	      case t.dollar:
	      case t.caret:
	      case t.openSquare:
	      case t.closeSquare:
	      case t.colon:
	      case t.semicolon:
	      case t.openParenthesis:
	      case t.closeParenthesis:
	        next = start;
	        tokenType = code;
	        endLine = line;
	        endColumn = start - offset;
	        end = next + 1;
	        break;

	      case t.singleQuote:
	      case t.doubleQuote:
	        quote = code === t.singleQuote ? "'" : '"';
	        next = start;

	        do {
	          escaped = false;
	          next = css.indexOf(quote, next + 1);

	          if (next === -1) {
	            unclosed('quote', quote);
	          }

	          escapePos = next;

	          while (css.charCodeAt(escapePos - 1) === t.backslash) {
	            escapePos -= 1;
	            escaped = !escaped;
	          }
	        } while (escaped);

	        tokenType = t.str;
	        endLine = line;
	        endColumn = start - offset;
	        end = next + 1;
	        break;

	      default:
	        if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {
	          next = css.indexOf('*/', start + 2) + 1;

	          if (next === 0) {
	            unclosed('comment', '*/');
	          }

	          content = css.slice(start, next + 1);
	          lines = content.split('\n');
	          last = lines.length - 1;

	          if (last > 0) {
	            nextLine = line + last;
	            nextOffset = next - lines[last].length;
	          } else {
	            nextLine = line;
	            nextOffset = offset;
	          }

	          tokenType = t.comment;
	          line = nextLine;
	          endLine = nextLine;
	          endColumn = next - nextOffset;
	        } else if (code === t.slash) {
	          next = start;
	          tokenType = code;
	          endLine = line;
	          endColumn = start - offset;
	          end = next + 1;
	        } else {
	          next = consumeWord(css, start);
	          tokenType = t.word;
	          endLine = line;
	          endColumn = next - offset;
	        }

	        end = next + 1;
	        break;
	    } // Ensure that the token structure remains consistent


	    tokens.push([tokenType, // [0] Token type
	    line, // [1] Starting line
	    start - offset, // [2] Starting column
	    endLine, // [3] Ending line
	    endColumn, // [4] Ending column
	    start, // [5] Start position / Source index
	    end // [6] End position
	    ]); // Reset offset for the next token

	    if (nextOffset) {
	      offset = nextOffset;
	      nextOffset = null;
	    }

	    start = end;
	  }

	  return tokens;
	}
} (tokenize));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _root = _interopRequireDefault(root$1.exports);

	var _selector = _interopRequireDefault(selector$1.exports);

	var _className = _interopRequireDefault(className$1.exports);

	var _comment = _interopRequireDefault(comment$2.exports);

	var _id = _interopRequireDefault(id$1.exports);

	var _tag = _interopRequireDefault(tag$1.exports);

	var _string = _interopRequireDefault(string$1.exports);

	var _pseudo = _interopRequireDefault(pseudo$1.exports);

	var _attribute = _interopRequireWildcard(attribute$1);

	var _universal = _interopRequireDefault(universal$1.exports);

	var _combinator = _interopRequireDefault(combinator$2.exports);

	var _nesting = _interopRequireDefault(nesting$1.exports);

	var _sortAscending = _interopRequireDefault(sortAscending.exports);

	var _tokenize = _interopRequireWildcard(tokenize);

	var tokens = _interopRequireWildcard(tokenTypes);

	var types$1 = _interopRequireWildcard(types);

	var _util = util;

	var _WHITESPACE_TOKENS, _Object$assign;

	function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	var WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);
	var WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));

	function tokenStart(token) {
	  return {
	    line: token[_tokenize.FIELDS.START_LINE],
	    column: token[_tokenize.FIELDS.START_COL]
	  };
	}

	function tokenEnd(token) {
	  return {
	    line: token[_tokenize.FIELDS.END_LINE],
	    column: token[_tokenize.FIELDS.END_COL]
	  };
	}

	function getSource(startLine, startColumn, endLine, endColumn) {
	  return {
	    start: {
	      line: startLine,
	      column: startColumn
	    },
	    end: {
	      line: endLine,
	      column: endColumn
	    }
	  };
	}

	function getTokenSource(token) {
	  return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);
	}

	function getTokenSourceSpan(startToken, endToken) {
	  if (!startToken) {
	    return undefined;
	  }

	  return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);
	}

	function unescapeProp(node, prop) {
	  var value = node[prop];

	  if (typeof value !== "string") {
	    return;
	  }

	  if (value.indexOf("\\") !== -1) {
	    (0, _util.ensureObject)(node, 'raws');
	    node[prop] = (0, _util.unesc)(value);

	    if (node.raws[prop] === undefined) {
	      node.raws[prop] = value;
	    }
	  }

	  return node;
	}

	function indexesOf(array, item) {
	  var i = -1;
	  var indexes = [];

	  while ((i = array.indexOf(item, i + 1)) !== -1) {
	    indexes.push(i);
	  }

	  return indexes;
	}

	function uniqs() {
	  var list = Array.prototype.concat.apply([], arguments);
	  return list.filter(function (item, i) {
	    return i === list.indexOf(item);
	  });
	}

	var Parser = /*#__PURE__*/function () {
	  function Parser(rule, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    this.rule = rule;
	    this.options = Object.assign({
	      lossy: false,
	      safe: false
	    }, options);
	    this.position = 0;
	    this.css = typeof this.rule === 'string' ? this.rule : this.rule.selector;
	    this.tokens = (0, _tokenize["default"])({
	      css: this.css,
	      error: this._errorGenerator(),
	      safe: this.options.safe
	    });
	    var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]);
	    this.root = new _root["default"]({
	      source: rootSource
	    });
	    this.root.errorGenerator = this._errorGenerator();
	    var selector = new _selector["default"]({
	      source: {
	        start: {
	          line: 1,
	          column: 1
	        }
	      }
	    });
	    this.root.append(selector);
	    this.current = selector;
	    this.loop();
	  }

	  var _proto = Parser.prototype;

	  _proto._errorGenerator = function _errorGenerator() {
	    var _this = this;

	    return function (message, errorOptions) {
	      if (typeof _this.rule === 'string') {
	        return new Error(message);
	      }

	      return _this.rule.error(message, errorOptions);
	    };
	  };

	  _proto.attribute = function attribute() {
	    var attr = [];
	    var startingToken = this.currToken;
	    this.position++;

	    while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
	      attr.push(this.currToken);
	      this.position++;
	    }

	    if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
	      return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]);
	    }

	    var len = attr.length;
	    var node = {
	      source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),
	      sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
	    };

	    if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {
	      return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]);
	    }

	    var pos = 0;
	    var spaceBefore = '';
	    var commentBefore = '';
	    var lastAdded = null;
	    var spaceAfterMeaningfulToken = false;

	    while (pos < len) {
	      var token = attr[pos];
	      var content = this.content(token);
	      var next = attr[pos + 1];

	      switch (token[_tokenize.FIELDS.TYPE]) {
	        case tokens.space:
	          // if (
	          //     len === 1 ||
	          //     pos === 0 && this.content(next) === '|'
	          // ) {
	          //     return this.expected('attribute', token[TOKEN.START_POS], content);
	          // }
	          spaceAfterMeaningfulToken = true;

	          if (this.options.lossy) {
	            break;
	          }

	          if (lastAdded) {
	            (0, _util.ensureObject)(node, 'spaces', lastAdded);
	            var prevContent = node.spaces[lastAdded].after || '';
	            node.spaces[lastAdded].after = prevContent + content;
	            var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null;

	            if (existingComment) {
	              node.raws.spaces[lastAdded].after = existingComment + content;
	            }
	          } else {
	            spaceBefore = spaceBefore + content;
	            commentBefore = commentBefore + content;
	          }

	          break;

	        case tokens.asterisk:
	          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
	            node.operator = content;
	            lastAdded = 'operator';
	          } else if ((!node.namespace || lastAdded === "namespace" && !spaceAfterMeaningfulToken) && next) {
	            if (spaceBefore) {
	              (0, _util.ensureObject)(node, 'spaces', 'attribute');
	              node.spaces.attribute.before = spaceBefore;
	              spaceBefore = '';
	            }

	            if (commentBefore) {
	              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');
	              node.raws.spaces.attribute.before = spaceBefore;
	              commentBefore = '';
	            }

	            node.namespace = (node.namespace || "") + content;
	            var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null;

	            if (rawValue) {
	              node.raws.namespace += content;
	            }

	            lastAdded = 'namespace';
	          }

	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.dollar:
	          if (lastAdded === "value") {
	            var oldRawValue = (0, _util.getProp)(node, 'raws', 'value');
	            node.value += "$";

	            if (oldRawValue) {
	              node.raws.value = oldRawValue + "$";
	            }

	            break;
	          }

	        // Falls through

	        case tokens.caret:
	          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
	            node.operator = content;
	            lastAdded = 'operator';
	          }

	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.combinator:
	          if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) {
	            node.operator = content;
	            lastAdded = 'operator';
	          }

	          if (content !== '|') {
	            spaceAfterMeaningfulToken = false;
	            break;
	          }

	          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
	            node.operator = content;
	            lastAdded = 'operator';
	          } else if (!node.namespace && !node.attribute) {
	            node.namespace = true;
	          }

	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.word:
	          if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.
	          !node.operator && !node.namespace) {
	            node.namespace = content;
	            lastAdded = 'namespace';
	          } else if (!node.attribute || lastAdded === "attribute" && !spaceAfterMeaningfulToken) {
	            if (spaceBefore) {
	              (0, _util.ensureObject)(node, 'spaces', 'attribute');
	              node.spaces.attribute.before = spaceBefore;
	              spaceBefore = '';
	            }

	            if (commentBefore) {
	              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');
	              node.raws.spaces.attribute.before = commentBefore;
	              commentBefore = '';
	            }

	            node.attribute = (node.attribute || "") + content;

	            var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null;

	            if (_rawValue) {
	              node.raws.attribute += content;
	            }

	            lastAdded = 'attribute';
	          } else if (!node.value && node.value !== "" || lastAdded === "value" && !spaceAfterMeaningfulToken) {
	            var _unescaped = (0, _util.unesc)(content);

	            var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || '';

	            var oldValue = node.value || '';
	            node.value = oldValue + _unescaped;
	            node.quoteMark = null;

	            if (_unescaped !== content || _oldRawValue) {
	              (0, _util.ensureObject)(node, 'raws');
	              node.raws.value = (_oldRawValue || oldValue) + content;
	            }

	            lastAdded = 'value';
	          } else {
	            var insensitive = content === 'i' || content === "I";

	            if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) {
	              node.insensitive = insensitive;

	              if (!insensitive || content === "I") {
	                (0, _util.ensureObject)(node, 'raws');
	                node.raws.insensitiveFlag = content;
	              }

	              lastAdded = 'insensitive';

	              if (spaceBefore) {
	                (0, _util.ensureObject)(node, 'spaces', 'insensitive');
	                node.spaces.insensitive.before = spaceBefore;
	                spaceBefore = '';
	              }

	              if (commentBefore) {
	                (0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive');
	                node.raws.spaces.insensitive.before = commentBefore;
	                commentBefore = '';
	              }
	            } else if (node.value || node.value === '') {
	              lastAdded = 'value';
	              node.value += content;

	              if (node.raws.value) {
	                node.raws.value += content;
	              }
	            }
	          }

	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.str:
	          if (!node.attribute || !node.operator) {
	            return this.error("Expected an attribute followed by an operator preceding the string.", {
	              index: token[_tokenize.FIELDS.START_POS]
	            });
	          }

	          var _unescapeValue = (0, _attribute.unescapeValue)(content),
	              unescaped = _unescapeValue.unescaped,
	              quoteMark = _unescapeValue.quoteMark;

	          node.value = unescaped;
	          node.quoteMark = quoteMark;
	          lastAdded = 'value';
	          (0, _util.ensureObject)(node, 'raws');
	          node.raws.value = content;
	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.equals:
	          if (!node.attribute) {
	            return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content);
	          }

	          if (node.value) {
	            return this.error('Unexpected "=" found; an operator was already defined.', {
	              index: token[_tokenize.FIELDS.START_POS]
	            });
	          }

	          node.operator = node.operator ? node.operator + content : content;
	          lastAdded = 'operator';
	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.comment:
	          if (lastAdded) {
	            if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') {
	              var lastComment = (0, _util.getProp)(node, 'spaces', lastAdded, 'after') || '';
	              var rawLastComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || lastComment;
	              (0, _util.ensureObject)(node, 'raws', 'spaces', lastAdded);
	              node.raws.spaces[lastAdded].after = rawLastComment + content;
	            } else {
	              var lastValue = node[lastAdded] || '';
	              var rawLastValue = (0, _util.getProp)(node, 'raws', lastAdded) || lastValue;
	              (0, _util.ensureObject)(node, 'raws');
	              node.raws[lastAdded] = rawLastValue + content;
	            }
	          } else {
	            commentBefore = commentBefore + content;
	          }

	          break;

	        default:
	          return this.error("Unexpected \"" + content + "\" found.", {
	            index: token[_tokenize.FIELDS.START_POS]
	          });
	      }

	      pos++;
	    }

	    unescapeProp(node, "attribute");
	    unescapeProp(node, "namespace");
	    this.newNode(new _attribute["default"](node));
	    this.position++;
	  }
	  /**
	   * return a node containing meaningless garbage up to (but not including) the specified token position.
	   * if the token position is negative, all remaining tokens are consumed.
	   *
	   * This returns an array containing a single string node if all whitespace,
	   * otherwise an array of comment nodes with space before and after.
	   *
	   * These tokens are not added to the current selector, the caller can add them or use them to amend
	   * a previous node's space metadata.
	   *
	   * In lossy mode, this returns only comments.
	   */
	  ;

	  _proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) {
	    if (stopPosition < 0) {
	      stopPosition = this.tokens.length;
	    }

	    var startPosition = this.position;
	    var nodes = [];
	    var space = "";
	    var lastComment = undefined;

	    do {
	      if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {
	        if (!this.options.lossy) {
	          space += this.content();
	        }
	      } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {
	        var spaces = {};

	        if (space) {
	          spaces.before = space;
	          space = "";
	        }

	        lastComment = new _comment["default"]({
	          value: this.content(),
	          source: getTokenSource(this.currToken),
	          sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],
	          spaces: spaces
	        });
	        nodes.push(lastComment);
	      }
	    } while (++this.position < stopPosition);

	    if (space) {
	      if (lastComment) {
	        lastComment.spaces.after = space;
	      } else if (!this.options.lossy) {
	        var firstToken = this.tokens[startPosition];
	        var lastToken = this.tokens[this.position - 1];
	        nodes.push(new _string["default"]({
	          value: '',
	          source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]),
	          sourceIndex: firstToken[_tokenize.FIELDS.START_POS],
	          spaces: {
	            before: space,
	            after: ''
	          }
	        }));
	      }
	    }

	    return nodes;
	  }
	  /**
	   * 
	   * @param {*} nodes 
	   */
	  ;

	  _proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) {
	    var _this2 = this;

	    if (requiredSpace === void 0) {
	      requiredSpace = false;
	    }

	    var space = "";
	    var rawSpace = "";
	    nodes.forEach(function (n) {
	      var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);

	      var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);

	      space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);
	      rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);
	    });

	    if (rawSpace === space) {
	      rawSpace = undefined;
	    }

	    var result = {
	      space: space,
	      rawSpace: rawSpace
	    };
	    return result;
	  };

	  _proto.isNamedCombinator = function isNamedCombinator(position) {
	    if (position === void 0) {
	      position = this.position;
	    }

	    return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;
	  };

	  _proto.namedCombinator = function namedCombinator() {
	    if (this.isNamedCombinator()) {
	      var nameRaw = this.content(this.tokens[this.position + 1]);
	      var name = (0, _util.unesc)(nameRaw).toLowerCase();
	      var raws = {};

	      if (name !== nameRaw) {
	        raws.value = "/" + nameRaw + "/";
	      }

	      var node = new _combinator["default"]({
	        value: "/" + name + "/",
	        source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),
	        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],
	        raws: raws
	      });
	      this.position = this.position + 3;
	      return node;
	    } else {
	      this.unexpected();
	    }
	  };

	  _proto.combinator = function combinator() {
	    var _this3 = this;

	    if (this.content() === '|') {
	      return this.namespace();
	    } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.


	    var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);

	    if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) {
	      var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);

	      if (nodes.length > 0) {
	        var last = this.current.last;

	        if (last) {
	          var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),
	              space = _this$convertWhitespa.space,
	              rawSpace = _this$convertWhitespa.rawSpace;

	          if (rawSpace !== undefined) {
	            last.rawSpaceAfter += rawSpace;
	          }

	          last.spaces.after += space;
	        } else {
	          nodes.forEach(function (n) {
	            return _this3.newNode(n);
	          });
	        }
	      }

	      return;
	    }

	    var firstToken = this.currToken;
	    var spaceOrDescendantSelectorNodes = undefined;

	    if (nextSigTokenPos > this.position) {
	      spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);
	    }

	    var node;

	    if (this.isNamedCombinator()) {
	      node = this.namedCombinator();
	    } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {
	      node = new _combinator["default"]({
	        value: this.content(),
	        source: getTokenSource(this.currToken),
	        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]
	      });
	      this.position++;
	    } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) ; else if (!spaceOrDescendantSelectorNodes) {
	      this.unexpected();
	    }

	    if (node) {
	      if (spaceOrDescendantSelectorNodes) {
	        var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),
	            _space = _this$convertWhitespa2.space,
	            _rawSpace = _this$convertWhitespa2.rawSpace;

	        node.spaces.before = _space;
	        node.rawSpaceBefore = _rawSpace;
	      }
	    } else {
	      // descendant combinator
	      var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),
	          _space2 = _this$convertWhitespa3.space,
	          _rawSpace2 = _this$convertWhitespa3.rawSpace;

	      if (!_rawSpace2) {
	        _rawSpace2 = _space2;
	      }

	      var spaces = {};
	      var raws = {
	        spaces: {}
	      };

	      if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {
	        spaces.before = _space2.slice(0, _space2.length - 1);
	        raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);
	      } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) {
	        spaces.after = _space2.slice(1);
	        raws.spaces.after = _rawSpace2.slice(1);
	      } else {
	        raws.value = _rawSpace2;
	      }

	      node = new _combinator["default"]({
	        value: ' ',
	        source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),
	        sourceIndex: firstToken[_tokenize.FIELDS.START_POS],
	        spaces: spaces,
	        raws: raws
	      });
	    }

	    if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {
	      node.spaces.after = this.optionalSpace(this.content());
	      this.position++;
	    }

	    return this.newNode(node);
	  };

	  _proto.comma = function comma() {
	    if (this.position === this.tokens.length - 1) {
	      this.root.trailingComma = true;
	      this.position++;
	      return;
	    }

	    this.current._inferEndPosition();

	    var selector = new _selector["default"]({
	      source: {
	        start: tokenStart(this.tokens[this.position + 1])
	      }
	    });
	    this.current.parent.append(selector);
	    this.current = selector;
	    this.position++;
	  };

	  _proto.comment = function comment() {
	    var current = this.currToken;
	    this.newNode(new _comment["default"]({
	      value: this.content(),
	      source: getTokenSource(current),
	      sourceIndex: current[_tokenize.FIELDS.START_POS]
	    }));
	    this.position++;
	  };

	  _proto.error = function error(message, opts) {
	    throw this.root.error(message, opts);
	  };

	  _proto.missingBackslash = function missingBackslash() {
	    return this.error('Expected a backslash preceding the semicolon.', {
	      index: this.currToken[_tokenize.FIELDS.START_POS]
	    });
	  };

	  _proto.missingParenthesis = function missingParenthesis() {
	    return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);
	  };

	  _proto.missingSquareBracket = function missingSquareBracket() {
	    return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);
	  };

	  _proto.unexpected = function unexpected() {
	    return this.error("Unexpected '" + this.content() + "'. Escaping special characters with \\ may help.", this.currToken[_tokenize.FIELDS.START_POS]);
	  };

	  _proto.namespace = function namespace() {
	    var before = this.prevToken && this.content(this.prevToken) || true;

	    if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {
	      this.position++;
	      return this.word(before);
	    } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {
	      this.position++;
	      return this.universal(before);
	    }
	  };

	  _proto.nesting = function nesting() {
	    if (this.nextToken) {
	      var nextContent = this.content(this.nextToken);

	      if (nextContent === "|") {
	        this.position++;
	        return;
	      }
	    }

	    var current = this.currToken;
	    this.newNode(new _nesting["default"]({
	      value: this.content(),
	      source: getTokenSource(current),
	      sourceIndex: current[_tokenize.FIELDS.START_POS]
	    }));
	    this.position++;
	  };

	  _proto.parentheses = function parentheses() {
	    var last = this.current.last;
	    var unbalanced = 1;
	    this.position++;

	    if (last && last.type === types$1.PSEUDO) {
	      var selector = new _selector["default"]({
	        source: {
	          start: tokenStart(this.tokens[this.position - 1])
	        }
	      });
	      var cache = this.current;
	      last.append(selector);
	      this.current = selector;

	      while (this.position < this.tokens.length && unbalanced) {
	        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
	          unbalanced++;
	        }

	        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
	          unbalanced--;
	        }

	        if (unbalanced) {
	          this.parse();
	        } else {
	          this.current.source.end = tokenEnd(this.currToken);
	          this.current.parent.source.end = tokenEnd(this.currToken);
	          this.position++;
	        }
	      }

	      this.current = cache;
	    } else {
	      // I think this case should be an error. It's used to implement a basic parse of media queries
	      // but I don't think it's a good idea.
	      var parenStart = this.currToken;
	      var parenValue = "(";
	      var parenEnd;

	      while (this.position < this.tokens.length && unbalanced) {
	        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
	          unbalanced++;
	        }

	        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
	          unbalanced--;
	        }

	        parenEnd = this.currToken;
	        parenValue += this.parseParenthesisToken(this.currToken);
	        this.position++;
	      }

	      if (last) {
	        last.appendToPropertyAndEscape("value", parenValue, parenValue);
	      } else {
	        this.newNode(new _string["default"]({
	          value: parenValue,
	          source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),
	          sourceIndex: parenStart[_tokenize.FIELDS.START_POS]
	        }));
	      }
	    }

	    if (unbalanced) {
	      return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);
	    }
	  };

	  _proto.pseudo = function pseudo() {
	    var _this4 = this;

	    var pseudoStr = '';
	    var startingToken = this.currToken;

	    while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {
	      pseudoStr += this.content();
	      this.position++;
	    }

	    if (!this.currToken) {
	      return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);
	    }

	    if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {
	      this.splitWord(false, function (first, length) {
	        pseudoStr += first;

	        _this4.newNode(new _pseudo["default"]({
	          value: pseudoStr,
	          source: getTokenSourceSpan(startingToken, _this4.currToken),
	          sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
	        }));

	        if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
	          _this4.error('Misplaced parenthesis.', {
	            index: _this4.nextToken[_tokenize.FIELDS.START_POS]
	          });
	        }
	      });
	    } else {
	      return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);
	    }
	  };

	  _proto.space = function space() {
	    var content = this.content(); // Handle space before and after the selector

	    if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {
	      return node.type === 'comment';
	    })) {
	      this.spaces = this.optionalSpace(content);
	      this.position++;
	    } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
	      this.current.last.spaces.after = this.optionalSpace(content);
	      this.position++;
	    } else {
	      this.combinator();
	    }
	  };

	  _proto.string = function string() {
	    var current = this.currToken;
	    this.newNode(new _string["default"]({
	      value: this.content(),
	      source: getTokenSource(current),
	      sourceIndex: current[_tokenize.FIELDS.START_POS]
	    }));
	    this.position++;
	  };

	  _proto.universal = function universal(namespace) {
	    var nextToken = this.nextToken;

	    if (nextToken && this.content(nextToken) === '|') {
	      this.position++;
	      return this.namespace();
	    }

	    var current = this.currToken;
	    this.newNode(new _universal["default"]({
	      value: this.content(),
	      source: getTokenSource(current),
	      sourceIndex: current[_tokenize.FIELDS.START_POS]
	    }), namespace);
	    this.position++;
	  };

	  _proto.splitWord = function splitWord(namespace, firstCallback) {
	    var _this5 = this;

	    var nextToken = this.nextToken;
	    var word = this.content();

	    while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {
	      this.position++;
	      var current = this.content();
	      word += current;

	      if (current.lastIndexOf('\\') === current.length - 1) {
	        var next = this.nextToken;

	        if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {
	          word += this.requiredSpace(this.content(next));
	          this.position++;
	        }
	      }

	      nextToken = this.nextToken;
	    }

	    var hasClass = indexesOf(word, '.').filter(function (i) {
	      // Allow escaped dot within class name
	      var escapedDot = word[i - 1] === '\\'; // Allow decimal numbers percent in @keyframes

	      var isKeyframesPercent = /^\d+\.\d+%$/.test(word);
	      return !escapedDot && !isKeyframesPercent;
	    });
	    var hasId = indexesOf(word, '#').filter(function (i) {
	      return word[i - 1] !== '\\';
	    }); // Eliminate Sass interpolations from the list of id indexes

	    var interpolations = indexesOf(word, '#{');

	    if (interpolations.length) {
	      hasId = hasId.filter(function (hashIndex) {
	        return !~interpolations.indexOf(hashIndex);
	      });
	    }

	    var indices = (0, _sortAscending["default"])(uniqs([0].concat(hasClass, hasId)));
	    indices.forEach(function (ind, i) {
	      var index = indices[i + 1] || word.length;
	      var value = word.slice(ind, index);

	      if (i === 0 && firstCallback) {
	        return firstCallback.call(_this5, value, indices.length);
	      }

	      var node;
	      var current = _this5.currToken;
	      var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];
	      var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));

	      if (~hasClass.indexOf(ind)) {
	        var classNameOpts = {
	          value: value.slice(1),
	          source: source,
	          sourceIndex: sourceIndex
	        };
	        node = new _className["default"](unescapeProp(classNameOpts, "value"));
	      } else if (~hasId.indexOf(ind)) {
	        var idOpts = {
	          value: value.slice(1),
	          source: source,
	          sourceIndex: sourceIndex
	        };
	        node = new _id["default"](unescapeProp(idOpts, "value"));
	      } else {
	        var tagOpts = {
	          value: value,
	          source: source,
	          sourceIndex: sourceIndex
	        };
	        unescapeProp(tagOpts, "value");
	        node = new _tag["default"](tagOpts);
	      }

	      _this5.newNode(node, namespace); // Ensure that the namespace is used only once


	      namespace = null;
	    });
	    this.position++;
	  };

	  _proto.word = function word(namespace) {
	    var nextToken = this.nextToken;

	    if (nextToken && this.content(nextToken) === '|') {
	      this.position++;
	      return this.namespace();
	    }

	    return this.splitWord(namespace);
	  };

	  _proto.loop = function loop() {
	    while (this.position < this.tokens.length) {
	      this.parse(true);
	    }

	    this.current._inferEndPosition();

	    return this.root;
	  };

	  _proto.parse = function parse(throwOnParenthesis) {
	    switch (this.currToken[_tokenize.FIELDS.TYPE]) {
	      case tokens.space:
	        this.space();
	        break;

	      case tokens.comment:
	        this.comment();
	        break;

	      case tokens.openParenthesis:
	        this.parentheses();
	        break;

	      case tokens.closeParenthesis:
	        if (throwOnParenthesis) {
	          this.missingParenthesis();
	        }

	        break;

	      case tokens.openSquare:
	        this.attribute();
	        break;

	      case tokens.dollar:
	      case tokens.caret:
	      case tokens.equals:
	      case tokens.word:
	        this.word();
	        break;

	      case tokens.colon:
	        this.pseudo();
	        break;

	      case tokens.comma:
	        this.comma();
	        break;

	      case tokens.asterisk:
	        this.universal();
	        break;

	      case tokens.ampersand:
	        this.nesting();
	        break;

	      case tokens.slash:
	      case tokens.combinator:
	        this.combinator();
	        break;

	      case tokens.str:
	        this.string();
	        break;
	      // These cases throw; no break needed.

	      case tokens.closeSquare:
	        this.missingSquareBracket();

	      case tokens.semicolon:
	        this.missingBackslash();

	      default:
	        this.unexpected();
	    }
	  }
	  /**
	   * Helpers
	   */
	  ;

	  _proto.expected = function expected(description, index, found) {
	    if (Array.isArray(description)) {
	      var last = description.pop();
	      description = description.join(', ') + " or " + last;
	    }

	    var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';

	    if (!found) {
	      return this.error("Expected " + an + " " + description + ".", {
	        index: index
	      });
	    }

	    return this.error("Expected " + an + " " + description + ", found \"" + found + "\" instead.", {
	      index: index
	    });
	  };

	  _proto.requiredSpace = function requiredSpace(space) {
	    return this.options.lossy ? ' ' : space;
	  };

	  _proto.optionalSpace = function optionalSpace(space) {
	    return this.options.lossy ? '' : space;
	  };

	  _proto.lossySpace = function lossySpace(space, required) {
	    if (this.options.lossy) {
	      return required ? ' ' : '';
	    } else {
	      return space;
	    }
	  };

	  _proto.parseParenthesisToken = function parseParenthesisToken(token) {
	    var content = this.content(token);

	    if (token[_tokenize.FIELDS.TYPE] === tokens.space) {
	      return this.requiredSpace(content);
	    } else {
	      return content;
	    }
	  };

	  _proto.newNode = function newNode(node, namespace) {
	    if (namespace) {
	      if (/^ +$/.test(namespace)) {
	        if (!this.options.lossy) {
	          this.spaces = (this.spaces || '') + namespace;
	        }

	        namespace = true;
	      }

	      node.namespace = namespace;
	      unescapeProp(node, "namespace");
	    }

	    if (this.spaces) {
	      node.spaces.before = this.spaces;
	      this.spaces = '';
	    }

	    return this.current.append(node);
	  };

	  _proto.content = function content(token) {
	    if (token === void 0) {
	      token = this.currToken;
	    }

	    return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);
	  };

	  /**
	   * returns the index of the next non-whitespace, non-comment token.
	   * returns -1 if no meaningful token is found.
	   */
	  _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) {
	    if (startPosition === void 0) {
	      startPosition = this.position + 1;
	    }

	    var searchPosition = startPosition;

	    while (searchPosition < this.tokens.length) {
	      if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {
	        searchPosition++;
	        continue;
	      } else {
	        return searchPosition;
	      }
	    }

	    return -1;
	  };

	  _createClass(Parser, [{
	    key: "currToken",
	    get: function get() {
	      return this.tokens[this.position];
	    }
	  }, {
	    key: "nextToken",
	    get: function get() {
	      return this.tokens[this.position + 1];
	    }
	  }, {
	    key: "prevToken",
	    get: function get() {
	      return this.tokens[this.position - 1];
	    }
	  }]);

	  return Parser;
	}();

	exports["default"] = Parser;
	module.exports = exports.default;
} (parser, parser.exports));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _parser = _interopRequireDefault(parser.exports);

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	var Processor = /*#__PURE__*/function () {
	  function Processor(func, options) {
	    this.func = func || function noop() {};

	    this.funcRes = null;
	    this.options = options;
	  }

	  var _proto = Processor.prototype;

	  _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var merged = Object.assign({}, this.options, options);

	    if (merged.updateSelector === false) {
	      return false;
	    } else {
	      return typeof rule !== "string";
	    }
	  };

	  _proto._isLossy = function _isLossy(options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var merged = Object.assign({}, this.options, options);

	    if (merged.lossless === false) {
	      return true;
	    } else {
	      return false;
	    }
	  };

	  _proto._root = function _root(rule, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var parser = new _parser["default"](rule, this._parseOptions(options));
	    return parser.root;
	  };

	  _proto._parseOptions = function _parseOptions(options) {
	    return {
	      lossy: this._isLossy(options)
	    };
	  };

	  _proto._run = function _run(rule, options) {
	    var _this = this;

	    if (options === void 0) {
	      options = {};
	    }

	    return new Promise(function (resolve, reject) {
	      try {
	        var root = _this._root(rule, options);

	        Promise.resolve(_this.func(root)).then(function (transform) {
	          var string = undefined;

	          if (_this._shouldUpdateSelector(rule, options)) {
	            string = root.toString();
	            rule.selector = string;
	          }

	          return {
	            transform: transform,
	            root: root,
	            string: string
	          };
	        }).then(resolve, reject);
	      } catch (e) {
	        reject(e);
	        return;
	      }
	    });
	  };

	  _proto._runSync = function _runSync(rule, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var root = this._root(rule, options);

	    var transform = this.func(root);

	    if (transform && typeof transform.then === "function") {
	      throw new Error("Selector processor returned a promise to a synchronous call.");
	    }

	    var string = undefined;

	    if (options.updateSelector && typeof rule !== "string") {
	      string = root.toString();
	      rule.selector = string;
	    }

	    return {
	      transform: transform,
	      root: root,
	      string: string
	    };
	  }
	  /**
	   * Process rule into a selector AST.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {Promise<parser.Root>} The AST of the selector after processing it.
	   */
	  ;

	  _proto.ast = function ast(rule, options) {
	    return this._run(rule, options).then(function (result) {
	      return result.root;
	    });
	  }
	  /**
	   * Process rule into a selector AST synchronously.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {parser.Root} The AST of the selector after processing it.
	   */
	  ;

	  _proto.astSync = function astSync(rule, options) {
	    return this._runSync(rule, options).root;
	  }
	  /**
	   * Process a selector into a transformed value asynchronously
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {Promise<any>} The value returned by the processor.
	   */
	  ;

	  _proto.transform = function transform(rule, options) {
	    return this._run(rule, options).then(function (result) {
	      return result.transform;
	    });
	  }
	  /**
	   * Process a selector into a transformed value synchronously.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {any} The value returned by the processor.
	   */
	  ;

	  _proto.transformSync = function transformSync(rule, options) {
	    return this._runSync(rule, options).transform;
	  }
	  /**
	   * Process a selector into a new selector string asynchronously.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {string} the selector after processing.
	   */
	  ;

	  _proto.process = function process(rule, options) {
	    return this._run(rule, options).then(function (result) {
	      return result.string || result.root.toString();
	    });
	  }
	  /**
	   * Process a selector into a new selector string synchronously.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {string} the selector after processing.
	   */
	  ;

	  _proto.processSync = function processSync(rule, options) {
	    var result = this._runSync(rule, options);

	    return result.string || result.root.toString();
	  };

	  return Processor;
	}();

	exports["default"] = Processor;
	module.exports = exports.default;
} (processor, processor.exports));

var selectors = {};

var constructors = {};

constructors.__esModule = true;
constructors.universal = constructors.tag = constructors.string = constructors.selector = constructors.root = constructors.pseudo = constructors.nesting = constructors.id = constructors.comment = constructors.combinator = constructors.className = constructors.attribute = void 0;

var _attribute = _interopRequireDefault(attribute$1);

var _className = _interopRequireDefault(className$1.exports);

var _combinator = _interopRequireDefault(combinator$2.exports);

var _comment = _interopRequireDefault(comment$2.exports);

var _id = _interopRequireDefault(id$1.exports);

var _nesting = _interopRequireDefault(nesting$1.exports);

var _pseudo = _interopRequireDefault(pseudo$1.exports);

var _root = _interopRequireDefault(root$1.exports);

var _selector = _interopRequireDefault(selector$1.exports);

var _string = _interopRequireDefault(string$1.exports);

var _tag = _interopRequireDefault(tag$1.exports);

var _universal = _interopRequireDefault(universal$1.exports);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

var attribute = function attribute(opts) {
  return new _attribute["default"](opts);
};

constructors.attribute = attribute;

var className = function className(opts) {
  return new _className["default"](opts);
};

constructors.className = className;

var combinator = function combinator(opts) {
  return new _combinator["default"](opts);
};

constructors.combinator = combinator;

var comment = function comment(opts) {
  return new _comment["default"](opts);
};

constructors.comment = comment;

var id = function id(opts) {
  return new _id["default"](opts);
};

constructors.id = id;

var nesting = function nesting(opts) {
  return new _nesting["default"](opts);
};

constructors.nesting = nesting;

var pseudo = function pseudo(opts) {
  return new _pseudo["default"](opts);
};

constructors.pseudo = pseudo;

var root = function root(opts) {
  return new _root["default"](opts);
};

constructors.root = root;

var selector = function selector(opts) {
  return new _selector["default"](opts);
};

constructors.selector = selector;

var string = function string(opts) {
  return new _string["default"](opts);
};

constructors.string = string;

var tag = function tag(opts) {
  return new _tag["default"](opts);
};

constructors.tag = tag;

var universal = function universal(opts) {
  return new _universal["default"](opts);
};

constructors.universal = universal;

var guards = {};

guards.__esModule = true;
guards.isNode = isNode;
guards.isPseudoElement = isPseudoElement;
guards.isPseudoClass = isPseudoClass;
guards.isContainer = isContainer;
guards.isNamespace = isNamespace;
guards.isUniversal = guards.isTag = guards.isString = guards.isSelector = guards.isRoot = guards.isPseudo = guards.isNesting = guards.isIdentifier = guards.isComment = guards.isCombinator = guards.isClassName = guards.isAttribute = void 0;

var _types = types;

var _IS_TYPE;

var IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);

function isNode(node) {
  return typeof node === "object" && IS_TYPE[node.type];
}

function isNodeType(type, node) {
  return isNode(node) && node.type === type;
}

var isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);
guards.isAttribute = isAttribute;
var isClassName = isNodeType.bind(null, _types.CLASS);
guards.isClassName = isClassName;
var isCombinator = isNodeType.bind(null, _types.COMBINATOR);
guards.isCombinator = isCombinator;
var isComment = isNodeType.bind(null, _types.COMMENT);
guards.isComment = isComment;
var isIdentifier = isNodeType.bind(null, _types.ID);
guards.isIdentifier = isIdentifier;
var isNesting = isNodeType.bind(null, _types.NESTING);
guards.isNesting = isNesting;
var isPseudo = isNodeType.bind(null, _types.PSEUDO);
guards.isPseudo = isPseudo;
var isRoot = isNodeType.bind(null, _types.ROOT);
guards.isRoot = isRoot;
var isSelector = isNodeType.bind(null, _types.SELECTOR);
guards.isSelector = isSelector;
var isString = isNodeType.bind(null, _types.STRING);
guards.isString = isString;
var isTag = isNodeType.bind(null, _types.TAG);
guards.isTag = isTag;
var isUniversal = isNodeType.bind(null, _types.UNIVERSAL);
guards.isUniversal = isUniversal;

function isPseudoElement(node) {
  return isPseudo(node) && node.value && (node.value.startsWith("::") || node.value.toLowerCase() === ":before" || node.value.toLowerCase() === ":after" || node.value.toLowerCase() === ":first-letter" || node.value.toLowerCase() === ":first-line");
}

function isPseudoClass(node) {
  return isPseudo(node) && !isPseudoElement(node);
}

function isContainer(node) {
  return !!(isNode(node) && node.walk);
}

function isNamespace(node) {
  return isAttribute(node) || isTag(node);
}

(function (exports) {

	exports.__esModule = true;

	var _types = types;

	Object.keys(_types).forEach(function (key) {
	  if (key === "default" || key === "__esModule") return;
	  if (key in exports && exports[key] === _types[key]) return;
	  exports[key] = _types[key];
	});

	var _constructors = constructors;

	Object.keys(_constructors).forEach(function (key) {
	  if (key === "default" || key === "__esModule") return;
	  if (key in exports && exports[key] === _constructors[key]) return;
	  exports[key] = _constructors[key];
	});

	var _guards = guards;

	Object.keys(_guards).forEach(function (key) {
	  if (key === "default" || key === "__esModule") return;
	  if (key in exports && exports[key] === _guards[key]) return;
	  exports[key] = _guards[key];
	});
} (selectors));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _processor = _interopRequireDefault(processor.exports);

	var selectors$1 = _interopRequireWildcard(selectors);

	function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	var parser = function parser(processor) {
	  return new _processor["default"](processor);
	};

	Object.assign(parser, selectors$1);
	delete parser.__esModule;
	var _default = parser;
	exports["default"] = _default;
	module.exports = exports.default;
} (dist, dist.exports));

var selectorParser = /*@__PURE__*/getDefaultExportFromCjs(dist.exports);

const animationNameRE = /^(-\w+-)?animation-name$/;
const animationRE = /^(-\w+-)?animation$/;
const scopedPlugin = (id = '') => {
    const keyframes = Object.create(null);
    const shortId = id.replace(/^data-v-/, '');
    return {
        postcssPlugin: 'vue-sfc-scoped',
        Rule(rule) {
            processRule(id, rule);
        },
        AtRule(node) {
            if (/-?keyframes$/.test(node.name) &&
                !node.params.endsWith(`-${shortId}`)) {
                // register keyframes
                keyframes[node.params] = node.params = node.params + '-' + shortId;
            }
        },
        OnceExit(root) {
            if (Object.keys(keyframes).length) {
                // If keyframes are found in this <style>, find and rewrite animation names
                // in declarations.
                // Caveat: this only works for keyframes and animation rules in the same
                // <style> element.
                // individual animation-name declaration
                root.walkDecls(decl => {
                    if (animationNameRE.test(decl.prop)) {
                        decl.value = decl.value
                            .split(',')
                            .map(v => keyframes[v.trim()] || v.trim())
                            .join(',');
                    }
                    // shorthand
                    if (animationRE.test(decl.prop)) {
                        decl.value = decl.value
                            .split(',')
                            .map(v => {
                            const vals = v.trim().split(/\s+/);
                            const i = vals.findIndex(val => keyframes[val]);
                            if (i !== -1) {
                                vals.splice(i, 1, keyframes[vals[i]]);
                                return vals.join(' ');
                            }
                            else {
                                return v;
                            }
                        })
                            .join(',');
                    }
                });
            }
        }
    };
};
const processedRules = new WeakSet();
function processRule(id, rule) {
    if (processedRules.has(rule) ||
        (rule.parent &&
            rule.parent.type === 'atrule' &&
            /-?keyframes$/.test(rule.parent.name))) {
        return;
    }
    processedRules.add(rule);
    rule.selector = selectorParser(selectorRoot => {
        selectorRoot.each(selector => {
            rewriteSelector(id, selector, selectorRoot);
        });
    }).processSync(rule.selector);
}
function rewriteSelector(id, selector, selectorRoot) {
    let node = null;
    // find the last child node to insert attribute selector
    selector.each(n => {
        // DEPRECATED ">>>" and "/deep/" combinator
        if (n.type === 'combinator' &&
            (n.value === '>>>' || n.value === '/deep/')) {
            n.value = ' ';
            n.spaces.before = n.spaces.after = '';
            // warn(
            //   `the >>> and /deep/ combinators have been deprecated. ` +
            //     `Use :deep() instead.`
            // )
            return false;
        }
        if (n.type === 'pseudo') {
            const { value } = n;
            // deep: inject [id] attribute at the node before the ::v-deep
            // combinator.
            if (value === ':deep' || value === '::v-deep') {
                if (n.nodes.length) {
                    // .foo ::v-deep(.bar) -> .foo[xxxxxxx] .bar
                    // replace the current node with ::v-deep's inner selector
                    let last = n;
                    n.nodes[0].each(ss => {
                        selector.insertAfter(last, ss);
                        last = ss;
                    });
                    // insert a space combinator before if it doesn't already have one
                    const prev = selector.at(selector.index(n) - 1);
                    if (!prev || !isSpaceCombinator(prev)) {
                        selector.insertAfter(n, selectorParser.combinator({
                            value: ' '
                        }));
                    }
                    selector.removeChild(n);
                }
                else {
                    // DEPRECATED usage in v3
                    // .foo ::v-deep .bar -> .foo[xxxxxxx] .bar
                    // warn(
                    //   `::v-deep usage as a combinator has ` +
                    //     `been deprecated. Use :deep(<inner-selector>) instead.`
                    // )
                    const prev = selector.at(selector.index(n) - 1);
                    if (prev && isSpaceCombinator(prev)) {
                        selector.removeChild(prev);
                    }
                    selector.removeChild(n);
                }
                return false;
            }
            // !!! Vue 2 does not have :slotted support
            // ::v-slotted(.foo) -> .foo[xxxxxxx-s]
            // if (value === ':slotted' || value === '::v-slotted') {
            //   rewriteSelector(id, n.nodes[0], selectorRoot, true /* slotted */)
            //   let last: selectorParser.Selector['nodes'][0] = n
            //   n.nodes[0].each(ss => {
            //     selector.insertAfter(last, ss)
            //     last = ss
            //   })
            //   // selector.insertAfter(n, n.nodes[0])
            //   selector.removeChild(n)
            //   // since slotted attribute already scopes the selector there's no
            //   // need for the non-slot attribute.
            //   shouldInject = false
            //   return false
            // }
            // global: replace with inner selector and do not inject [id].
            // ::v-global(.foo) -> .foo
            if (value === ':global' || value === '::v-global') {
                selectorRoot.insertAfter(selector, n.nodes[0]);
                selectorRoot.removeChild(selector);
                return false;
            }
        }
        if (n.type !== 'pseudo' && n.type !== 'combinator') {
            node = n;
        }
    });
    if (node) {
        node.spaces.after = '';
    }
    else {
        // For deep selectors & standalone pseudo selectors,
        // the attribute selectors are prepended rather than appended.
        // So all leading spaces must be eliminated to avoid problems.
        selector.first.spaces.before = '';
    }
    {
        selector.insertAfter(
        // If node is null it means we need to inject [id] at the start
        // insertAfter can handle `null` here
        node, selectorParser.attribute({
            attribute: id,
            value: id,
            raws: {},
            quoteMark: `"`
        }));
    }
}
function isSpaceCombinator(node) {
    return node.type === 'combinator' && /^\s+$/.test(node.value);
}
scopedPlugin.postcss = true;

var sourceMap = require$$0__default$1["default"];
var SourceMapConsumer = sourceMap.SourceMapConsumer;
var SourceMapGenerator = sourceMap.SourceMapGenerator;

var mergeSourceMap = merge;

/**
 * Merge old source map and new source map and return merged.
 * If old or new source map value is falsy, return another one as it is.
 *
 * @param {object|string} [oldMap] old source map object
 * @param {object|string} [newmap] new source map object
 * @return {object|undefined} merged source map object, or undefined when both old and new source map are undefined
 */
function merge(oldMap, newMap) {
  if (!oldMap) return newMap
  if (!newMap) return oldMap

  var oldMapConsumer = new SourceMapConsumer(oldMap);
  var newMapConsumer = new SourceMapConsumer(newMap);
  var mergedMapGenerator = new SourceMapGenerator();

  // iterate on new map and overwrite original position of new map with one of old map
  newMapConsumer.eachMapping(function(m) {
    // pass when `originalLine` is null.
    // It occurs in case that the node does not have origin in original code.
    if (m.originalLine == null) return

    var origPosInOldMap = oldMapConsumer.originalPositionFor({
      line: m.originalLine,
      column: m.originalColumn
    });

    if (origPosInOldMap.source == null) return

    mergedMapGenerator.addMapping({
      original: {
        line: origPosInOldMap.line,
        column: origPosInOldMap.column
      },
      generated: {
        line: m.generatedLine,
        column: m.generatedColumn
      },
      source: origPosInOldMap.source,
      name: origPosInOldMap.name
    });
  });

  var consumers = [oldMapConsumer, newMapConsumer];
  consumers.forEach(function(consumer) {
    consumer.sources.forEach(function(sourceFile) {
      mergedMapGenerator._sources.add(sourceFile);
      var sourceContent = consumer.sourceContentFor(sourceFile);
      if (sourceContent != null) {
        mergedMapGenerator.setSourceContent(sourceFile, sourceContent);
      }
    });
  });

  mergedMapGenerator._sourceRoot = oldMap.sourceRoot;
  mergedMapGenerator._file = oldMap.file;

  return JSON.parse(mergedMapGenerator.toString())
}

// .scss/.sass processor
const scss = (source, map, options) => {
    const nodeSass = require('sass');
    const finalOptions = Object.assign(Object.assign({}, options), { data: getSource(source, options.filename, options.additionalData), file: options.filename, outFile: options.filename, sourceMap: !!map });
    try {
        const result = nodeSass.renderSync(finalOptions);
        const dependencies = result.stats.includedFiles;
        if (map) {
            return {
                code: result.css.toString(),
                map: mergeSourceMap(map, JSON.parse(result.map.toString())),
                errors: [],
                dependencies
            };
        }
        return { code: result.css.toString(), errors: [], dependencies };
    }
    catch (e) {
        return { code: '', errors: [e], dependencies: [] };
    }
};
const sass = (source, map, options) => scss(source, map, Object.assign(Object.assign({}, options), { indentedSyntax: true }));
// .less
const less = (source, map, options) => {
    const nodeLess = require('less');
    let result;
    let error = null;
    nodeLess.render(getSource(source, options.filename, options.additionalData), Object.assign(Object.assign({}, options), { syncImport: true }), (err, output) => {
        error = err;
        result = output;
    });
    if (error)
        return { code: '', errors: [error], dependencies: [] };
    const dependencies = result.imports;
    if (map) {
        return {
            code: result.css.toString(),
            map: mergeSourceMap(map, result.map),
            errors: [],
            dependencies: dependencies
        };
    }
    return {
        code: result.css.toString(),
        errors: [],
        dependencies: dependencies
    };
};
// .styl
const styl = (source, map, options) => {
    const nodeStylus = require('stylus');
    try {
        const ref = nodeStylus(source);
        Object.keys(options).forEach(key => ref.set(key, options[key]));
        if (map)
            ref.set('sourcemap', { inline: false, comment: false });
        const result = ref.render();
        const dependencies = ref.deps();
        if (map) {
            return {
                code: result,
                map: mergeSourceMap(map, ref.sourcemap),
                errors: [],
                dependencies
            };
        }
        return { code: result, errors: [], dependencies };
    }
    catch (e) {
        return { code: '', errors: [e], dependencies: [] };
    }
};
function getSource(source, filename, additionalData) {
    if (!additionalData)
        return source;
    if (isFunction(additionalData)) {
        return additionalData(source, filename);
    }
    return additionalData + source;
}
const processors = {
    less,
    sass,
    scss,
    styl,
    stylus: styl
};

const postcss = require('postcss');
function compileStyle(options) {
    return doCompileStyle(Object.assign(Object.assign({}, options), { isAsync: false }));
}
function compileStyleAsync(options) {
    return Promise.resolve(doCompileStyle(Object.assign(Object.assign({}, options), { isAsync: true })));
}
function doCompileStyle(options) {
    const { filename, id, scoped = true, trim = true, isProd = false, preprocessLang, postcssOptions, postcssPlugins } = options;
    const preprocessor = preprocessLang && processors[preprocessLang];
    const preProcessedSource = preprocessor && preprocess(options, preprocessor);
    const map = preProcessedSource ? preProcessedSource.map : options.map;
    const source = preProcessedSource ? preProcessedSource.code : options.source;
    const plugins = (postcssPlugins || []).slice();
    plugins.unshift(cssVarsPlugin({ id: id.replace(/^data-v-/, ''), isProd }));
    if (trim) {
        plugins.push(trimPlugin());
    }
    if (scoped) {
        plugins.push(scopedPlugin(id));
    }
    const postCSSOptions = Object.assign(Object.assign({}, postcssOptions), { to: filename, from: filename });
    if (map) {
        postCSSOptions.map = {
            inline: false,
            annotation: false,
            prev: map
        };
    }
    let result, code, outMap;
    const errors = [];
    if (preProcessedSource && preProcessedSource.errors.length) {
        errors.push(...preProcessedSource.errors);
    }
    try {
        result = postcss(plugins).process(source, postCSSOptions);
        // In async mode, return a promise.
        if (options.isAsync) {
            return result
                .then((result) => ({
                code: result.css || '',
                map: result.map && result.map.toJSON(),
                errors,
                rawResult: result
            }))
                .catch((error) => ({
                code: '',
                map: undefined,
                errors: [...errors, error.message],
                rawResult: undefined
            }));
        }
        // force synchronous transform (we know we only have sync plugins)
        code = result.css;
        outMap = result.map;
    }
    catch (e) {
        errors.push(e);
    }
    return {
        code: code || ``,
        map: outMap && outMap.toJSON(),
        errors,
        rawResult: result
    };
}
function preprocess(options, preprocessor) {
    return preprocessor(options.source, options.map, Object.assign({
        filename: options.filename
    }, options.preprocessOptions));
}

exports.compileScript = compileScript;
exports.compileStyle = compileStyle;
exports.compileStyleAsync = compileStyleAsync;
exports.compileTemplate = compileTemplate;
exports.generateCodeFrame = generateCodeFrame;
exports.parse = parse;
exports.parseComponent = parseComponent;
exports.rewriteDefault = rewriteDefault;
The MIT License (MIT)

Copyright (c) 2013-present, Yuxi (Evan) You

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
#!/usr/bin/env node
/* eslint no-var: 0 */

var parser = require("..");
var fs = require("fs");

var filename = process.argv[2];
if (!filename) {
  console.error("no filename specified");
} else {
  var file = fs.readFileSync(filename, "utf8");
  var ast = parser.parse(file);

  console.log(JSON.stringify(ast, null, "  "));
}
try {
  module.exports = require("./lib/index.cjs");
} catch {
  module.exports = require("./lib/index.js");
}
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

function _objectWithoutPropertiesLoose(source, excluded) {
  if (source == null) return {};
  var target = {};
  var sourceKeys = Object.keys(source);
  var key, i;
  for (i = 0; i < sourceKeys.length; i++) {
    key = sourceKeys[i];
    if (excluded.indexOf(key) >= 0) continue;
    target[key] = source[key];
  }
  return target;
}

class Position {
  constructor(line, col, index) {
    this.line = void 0;
    this.column = void 0;
    this.index = void 0;
    this.line = line;
    this.column = col;
    this.index = index;
  }
}
class SourceLocation {
  constructor(start, end) {
    this.start = void 0;
    this.end = void 0;
    this.filename = void 0;
    this.identifierName = void 0;
    this.start = start;
    this.end = end;
  }
}

function createPositionWithColumnOffset(position, columnOffset) {
  const {
    line,
    column,
    index
  } = position;
  return new Position(line, column + columnOffset, index + columnOffset);
}

var ParseErrorCode = {
  SyntaxError: "BABEL_PARSER_SYNTAX_ERROR",
  SourceTypeModuleError: "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED"
};
const reflect = (keys, last = keys.length - 1) => ({
  get() {
    return keys.reduce((object, key) =>
    object[key], this);
  },
  set(value) {
    keys.reduce(
    (item, key, i) => i === last ? item[key] = value : item[key], this);
  }
});
const instantiate = (constructor, properties, descriptors) => Object.keys(descriptors).map(key => [key, descriptors[key]]).filter(([, descriptor]) => !!descriptor).map(([key, descriptor]) => [key, typeof descriptor === "function" ? {
  value: descriptor,
  enumerable: false
} : typeof descriptor.reflect === "string" ? Object.assign({}, descriptor, reflect(descriptor.reflect.split("."))) : descriptor]).reduce((instance, [key, descriptor]) => Object.defineProperty(instance, key, Object.assign({
  configurable: true
}, descriptor)), Object.assign(new constructor(), properties));

var ModuleErrors = {
  ImportMetaOutsideModule: {
    message: `import.meta may appear only with 'sourceType: "module"'`,
    code: ParseErrorCode.SourceTypeModuleError
  },
  ImportOutsideModule: {
    message: `'import' and 'export' may appear only with 'sourceType: "module"'`,
    code: ParseErrorCode.SourceTypeModuleError
  }
};

const NodeDescriptions = {
  ArrayPattern: "array destructuring pattern",
  AssignmentExpression: "assignment expression",
  AssignmentPattern: "assignment expression",
  ArrowFunctionExpression: "arrow function expression",
  ConditionalExpression: "conditional expression",
  CatchClause: "catch clause",
  ForOfStatement: "for-of statement",
  ForInStatement: "for-in statement",
  ForStatement: "for-loop",
  FormalParameters: "function parameter list",
  Identifier: "identifier",
  ImportSpecifier: "import specifier",
  ImportDefaultSpecifier: "import default specifier",
  ImportNamespaceSpecifier: "import namespace specifier",
  ObjectPattern: "object destructuring pattern",
  ParenthesizedExpression: "parenthesized expression",
  RestElement: "rest element",
  UpdateExpression: {
    true: "prefix operation",
    false: "postfix operation"
  },
  VariableDeclarator: "variable declaration",
  YieldExpression: "yield expression"
};
const toNodeDescription = ({
  type,
  prefix
}) => type === "UpdateExpression" ? NodeDescriptions.UpdateExpression[String(prefix)] : NodeDescriptions[type];

var StandardErrors = {
  AccessorIsGenerator: ({
    kind
  }) => `A ${kind}ter cannot be a generator.`,
  ArgumentsInClass: "'arguments' is only allowed in functions and class methods.",
  AsyncFunctionInSingleStatementContext: "Async functions can only be declared at the top level or inside a block.",
  AwaitBindingIdentifier: "Can not use 'await' as identifier inside an async function.",
  AwaitBindingIdentifierInStaticBlock: "Can not use 'await' as identifier inside a static block.",
  AwaitExpressionFormalParameter: "'await' is not allowed in async function parameters.",
  AwaitNotInAsyncContext: "'await' is only allowed within async functions and at the top levels of modules.",
  AwaitNotInAsyncFunction: "'await' is only allowed within async functions.",
  BadGetterArity: "A 'get' accessor must not have any formal parameters.",
  BadSetterArity: "A 'set' accessor must have exactly one formal parameter.",
  BadSetterRestParameter: "A 'set' accessor function argument must not be a rest parameter.",
  ConstructorClassField: "Classes may not have a field named 'constructor'.",
  ConstructorClassPrivateField: "Classes may not have a private field named '#constructor'.",
  ConstructorIsAccessor: "Class constructor may not be an accessor.",
  ConstructorIsAsync: "Constructor can't be an async function.",
  ConstructorIsGenerator: "Constructor can't be a generator.",
  DeclarationMissingInitializer: ({
    kind
  }) => `Missing initializer in ${kind} declaration.`,
  DecoratorArgumentsOutsideParentheses: "Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.",
  DecoratorBeforeExport: "Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax.",
  DecoratorConstructor: "Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?",
  DecoratorExportClass: "Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.",
  DecoratorSemicolon: "Decorators must not be followed by a semicolon.",
  DecoratorStaticBlock: "Decorators can't be used with a static block.",
  DeletePrivateField: "Deleting a private field is not allowed.",
  DestructureNamedImport: "ES2015 named imports do not destructure. Use another statement for destructuring after the import.",
  DuplicateConstructor: "Duplicate constructor in the same class.",
  DuplicateDefaultExport: "Only one default export allowed per module.",
  DuplicateExport: ({
    exportName
  }) => `\`${exportName}\` has already been exported. Exported identifiers must be unique.`,
  DuplicateProto: "Redefinition of __proto__ property.",
  DuplicateRegExpFlags: "Duplicate regular expression flag.",
  ElementAfterRest: "Rest element must be last element.",
  EscapedCharNotAnIdentifier: "Invalid Unicode escape.",
  ExportBindingIsString: ({
    localName,
    exportName
  }) => `A string literal cannot be used as an exported binding without \`from\`.\n- Did you mean \`export { '${localName}' as '${exportName}' } from 'some-module'\`?`,
  ExportDefaultFromAsIdentifier: "'from' is not allowed as an identifier after 'export default'.",
  ForInOfLoopInitializer: ({
    type
  }) => `'${type === "ForInStatement" ? "for-in" : "for-of"}' loop variable declaration may not have an initializer.`,
  ForInUsing: "For-in loop may not start with 'using' declaration.",
  ForOfAsync: "The left-hand side of a for-of loop may not be 'async'.",
  ForOfLet: "The left-hand side of a for-of loop may not start with 'let'.",
  GeneratorInSingleStatementContext: "Generators can only be declared at the top level or inside a block.",
  IllegalBreakContinue: ({
    type
  }) => `Unsyntactic ${type === "BreakStatement" ? "break" : "continue"}.`,
  IllegalLanguageModeDirective: "Illegal 'use strict' directive in function with non-simple parameter list.",
  IllegalReturn: "'return' outside of function.",
  ImportBindingIsString: ({
    importName
  }) => `A string literal cannot be used as an imported binding.\n- Did you mean \`import { "${importName}" as foo }\`?`,
  ImportCallArgumentTrailingComma: "Trailing comma is disallowed inside import(...) arguments.",
  ImportCallArity: ({
    maxArgumentCount
  }) => `\`import()\` requires exactly ${maxArgumentCount === 1 ? "one argument" : "one or two arguments"}.`,
  ImportCallNotNewExpression: "Cannot use new with import(...).",
  ImportCallSpreadArgument: "`...` is not allowed in `import()`.",
  ImportJSONBindingNotDefault: "A JSON module can only be imported with `default`.",
  ImportReflectionHasAssertion: "`import module x` cannot have assertions.",
  ImportReflectionNotBinding: 'Only `import module x from "./module"` is valid.',
  IncompatibleRegExpUVFlags: "The 'u' and 'v' regular expression flags cannot be enabled at the same time.",
  InvalidBigIntLiteral: "Invalid BigIntLiteral.",
  InvalidCodePoint: "Code point out of bounds.",
  InvalidCoverInitializedName: "Invalid shorthand property initializer.",
  InvalidDecimal: "Invalid decimal.",
  InvalidDigit: ({
    radix
  }) => `Expected number in radix ${radix}.`,
  InvalidEscapeSequence: "Bad character escape sequence.",
  InvalidEscapeSequenceTemplate: "Invalid escape sequence in template.",
  InvalidEscapedReservedWord: ({
    reservedWord
  }) => `Escape sequence in keyword ${reservedWord}.`,
  InvalidIdentifier: ({
    identifierName
  }) => `Invalid identifier ${identifierName}.`,
  InvalidLhs: ({
    ancestor
  }) => `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,
  InvalidLhsBinding: ({
    ancestor
  }) => `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,
  InvalidNumber: "Invalid number.",
  InvalidOrMissingExponent: "Floating-point numbers require a valid exponent after the 'e'.",
  InvalidOrUnexpectedToken: ({
    unexpected
  }) => `Unexpected character '${unexpected}'.`,
  InvalidParenthesizedAssignment: "Invalid parenthesized assignment pattern.",
  InvalidPrivateFieldResolution: ({
    identifierName
  }) => `Private name #${identifierName} is not defined.`,
  InvalidPropertyBindingPattern: "Binding member expression.",
  InvalidRecordProperty: "Only properties and spread elements are allowed in record definitions.",
  InvalidRestAssignmentPattern: "Invalid rest operator's argument.",
  LabelRedeclaration: ({
    labelName
  }) => `Label '${labelName}' is already declared.`,
  LetInLexicalBinding: "'let' is not allowed to be used as a name in 'let' or 'const' declarations.",
  LineTerminatorBeforeArrow: "No line break is allowed before '=>'.",
  MalformedRegExpFlags: "Invalid regular expression flag.",
  MissingClassName: "A class name is required.",
  MissingEqInAssignment: "Only '=' operator can be used for specifying default value.",
  MissingSemicolon: "Missing semicolon.",
  MissingPlugin: ({
    missingPlugin
  }) => `This experimental syntax requires enabling the parser plugin: ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`,
  MissingOneOfPlugins: ({
    missingPlugin
  }) => `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`,
  MissingUnicodeEscape: "Expecting Unicode escape sequence \\uXXXX.",
  MixingCoalesceWithLogical: "Nullish coalescing operator(??) requires parens when mixing with logical operators.",
  ModuleAttributeDifferentFromType: "The only accepted module attribute is `type`.",
  ModuleAttributeInvalidValue: "Only string literals are allowed as module attribute values.",
  ModuleAttributesWithDuplicateKeys: ({
    key
  }) => `Duplicate key "${key}" is not allowed in module attributes.`,
  ModuleExportNameHasLoneSurrogate: ({
    surrogateCharCode
  }) => `An export name cannot include a lone surrogate, found '\\u${surrogateCharCode.toString(16)}'.`,
  ModuleExportUndefined: ({
    localName
  }) => `Export '${localName}' is not defined.`,
  MultipleDefaultsInSwitch: "Multiple default clauses.",
  NewlineAfterThrow: "Illegal newline after throw.",
  NoCatchOrFinally: "Missing catch or finally clause.",
  NumberIdentifier: "Identifier directly after number.",
  NumericSeparatorInEscapeSequence: "Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.",
  ObsoleteAwaitStar: "'await*' has been removed from the async functions proposal. Use Promise.all() instead.",
  OptionalChainingNoNew: "Constructors in/after an Optional Chain are not allowed.",
  OptionalChainingNoTemplate: "Tagged Template Literals are not allowed in optionalChain.",
  OverrideOnConstructor: "'override' modifier cannot appear on a constructor declaration.",
  ParamDupe: "Argument name clash.",
  PatternHasAccessor: "Object pattern can't contain getter or setter.",
  PatternHasMethod: "Object pattern can't contain methods.",
  PrivateInExpectedIn: ({
    identifierName
  }) => `Private names are only allowed in property accesses (\`obj.#${identifierName}\`) or in \`in\` expressions (\`#${identifierName} in obj\`).`,
  PrivateNameRedeclaration: ({
    identifierName
  }) => `Duplicate private name #${identifierName}.`,
  RecordExpressionBarIncorrectEndSyntaxType: "Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
  RecordExpressionBarIncorrectStartSyntaxType: "Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
  RecordExpressionHashIncorrectStartSyntaxType: "Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",
  RecordNoProto: "'__proto__' is not allowed in Record expressions.",
  RestTrailingComma: "Unexpected trailing comma after rest element.",
  SloppyFunction: "In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.",
  StaticPrototype: "Classes may not have static property named prototype.",
  SuperNotAllowed: "`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?",
  SuperPrivateField: "Private fields can't be accessed on super.",
  TrailingDecorator: "Decorators must be attached to a class element.",
  TupleExpressionBarIncorrectEndSyntaxType: "Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
  TupleExpressionBarIncorrectStartSyntaxType: "Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
  TupleExpressionHashIncorrectStartSyntaxType: "Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",
  UnexpectedArgumentPlaceholder: "Unexpected argument placeholder.",
  UnexpectedAwaitAfterPipelineBody: 'Unexpected "await" after pipeline body; await must have parentheses in minimal proposal.',
  UnexpectedDigitAfterHash: "Unexpected digit after hash token.",
  UnexpectedImportExport: "'import' and 'export' may only appear at the top level.",
  UnexpectedKeyword: ({
    keyword
  }) => `Unexpected keyword '${keyword}'.`,
  UnexpectedLeadingDecorator: "Leading decorators must be attached to a class declaration.",
  UnexpectedLexicalDeclaration: "Lexical declaration cannot appear in a single-statement context.",
  UnexpectedNewTarget: "`new.target` can only be used in functions or class properties.",
  UnexpectedNumericSeparator: "A numeric separator is only allowed between two digits.",
  UnexpectedPrivateField: "Unexpected private name.",
  UnexpectedReservedWord: ({
    reservedWord
  }) => `Unexpected reserved word '${reservedWord}'.`,
  UnexpectedSuper: "'super' is only allowed in object methods and classes.",
  UnexpectedToken: ({
    expected,
    unexpected
  }) => `Unexpected token${unexpected ? ` '${unexpected}'.` : ""}${expected ? `, expected "${expected}"` : ""}`,
  UnexpectedTokenUnaryExponentiation: "Illegal expression. Wrap left hand side or entire exponentiation in parentheses.",
  UnexpectedUsingDeclaration: "Using declaration cannot appear in the top level when source type is `script`.",
  UnsupportedBind: "Binding should be performed on object property.",
  UnsupportedDecoratorExport: "A decorated export must export a class declaration.",
  UnsupportedDefaultExport: "Only expressions, functions or classes are allowed as the `default` export.",
  UnsupportedImport: "`import` can only be used in `import()` or `import.meta`.",
  UnsupportedMetaProperty: ({
    target,
    onlyValidPropertyName
  }) => `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,
  UnsupportedParameterDecorator: "Decorators cannot be used to decorate parameters.",
  UnsupportedPropertyDecorator: "Decorators cannot be used to decorate object literal properties.",
  UnsupportedSuper: "'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).",
  UnterminatedComment: "Unterminated comment.",
  UnterminatedRegExp: "Unterminated regular expression.",
  UnterminatedString: "Unterminated string constant.",
  UnterminatedTemplate: "Unterminated template.",
  UsingDeclarationHasBindingPattern: "Using declaration cannot have destructuring patterns.",
  VarRedeclaration: ({
    identifierName
  }) => `Identifier '${identifierName}' has already been declared.`,
  YieldBindingIdentifier: "Can not use 'yield' as identifier inside a generator.",
  YieldInParameter: "Yield expression is not allowed in formal parameters.",
  ZeroDigitNumericSeparator: "Numeric separator can not be used after leading 0."
};

var StrictModeErrors = {
  StrictDelete: "Deleting local variable in strict mode.",
  StrictEvalArguments: ({
    referenceName
  }) => `Assigning to '${referenceName}' in strict mode.`,
  StrictEvalArgumentsBinding: ({
    bindingName
  }) => `Binding '${bindingName}' in strict mode.`,
  StrictFunction: "In strict mode code, functions can only be declared at top level or inside a block.",
  StrictNumericEscape: "The only valid numeric escape in strict mode is '\\0'.",
  StrictOctalLiteral: "Legacy octal literals are not allowed in strict mode.",
  StrictWith: "'with' in strict mode."
};

const UnparenthesizedPipeBodyDescriptions = new Set(["ArrowFunctionExpression", "AssignmentExpression", "ConditionalExpression", "YieldExpression"]);
var PipelineOperatorErrors = {
  PipeBodyIsTighter: "Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.",
  PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.',
  PipeTopicUnbound: "Topic reference is unbound; it must be inside a pipe body.",
  PipeTopicUnconfiguredToken: ({
    token
  }) => `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { "proposal": "hack", "topicToken": "${token}" }.`,
  PipeTopicUnused: "Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.",
  PipeUnparenthesizedBody: ({
    type
  }) => `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({
    type
  })}; please wrap it in parentheses.`,
  PipelineBodyNoArrow: 'Unexpected arrow "=>" after pipeline body; arrow function in pipeline body must be parenthesized.',
  PipelineBodySequenceExpression: "Pipeline body may not be a comma-separated sequence expression.",
  PipelineHeadSequenceExpression: "Pipeline head should not be a comma-separated sequence expression.",
  PipelineTopicUnused: "Pipeline is in topic style but does not use topic reference.",
  PrimaryTopicNotAllowed: "Topic reference was used in a lexical context without topic binding.",
  PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.'
};

const _excluded$1 = ["toMessage"],
  _excluded2$1 = ["message"];
function toParseErrorConstructor(_ref) {
  let {
      toMessage
    } = _ref,
    properties = _objectWithoutPropertiesLoose(_ref, _excluded$1);
  return function constructor({
    loc,
    details
  }) {
    return instantiate(SyntaxError, Object.assign({}, properties, {
      loc
    }), {
      clone(overrides = {}) {
        const loc = overrides.loc || {};
        return constructor({
          loc: new Position("line" in loc ? loc.line : this.loc.line, "column" in loc ? loc.column : this.loc.column, "index" in loc ? loc.index : this.loc.index),
          details: Object.assign({}, this.details, overrides.details)
        });
      },
      details: {
        value: details,
        enumerable: false
      },
      message: {
        get() {
          return `${toMessage(this.details)} (${this.loc.line}:${this.loc.column})`;
        },
        set(value) {
          Object.defineProperty(this, "message", {
            value
          });
        }
      },
      pos: {
        reflect: "loc.index",
        enumerable: true
      },
      missingPlugin: "missingPlugin" in details && {
        reflect: "details.missingPlugin",
        enumerable: true
      }
    });
  };
}
function ParseErrorEnum(argument, syntaxPlugin) {
  if (Array.isArray(argument)) {
    return parseErrorTemplates => ParseErrorEnum(parseErrorTemplates, argument[0]);
  }
  const ParseErrorConstructors = {};
  for (const reasonCode of Object.keys(argument)) {
    const template = argument[reasonCode];
    const _ref2 = typeof template === "string" ? {
        message: () => template
      } : typeof template === "function" ? {
        message: template
      } : template,
      {
        message
      } = _ref2,
      rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1);
    const toMessage = typeof message === "string" ? () => message : message;
    ParseErrorConstructors[reasonCode] = toParseErrorConstructor(Object.assign({
      code: ParseErrorCode.SyntaxError,
      reasonCode,
      toMessage
    }, syntaxPlugin ? {
      syntaxPlugin
    } : {}, rest));
  }
  return ParseErrorConstructors;
}
const Errors = Object.assign({}, ParseErrorEnum(ModuleErrors), ParseErrorEnum(StandardErrors), ParseErrorEnum(StrictModeErrors), ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors));

const {
  defineProperty
} = Object;
const toUnenumerable = (object, key) => defineProperty(object, key, {
  enumerable: false,
  value: object[key]
});
function toESTreeLocation(node) {
  node.loc.start && toUnenumerable(node.loc.start, "index");
  node.loc.end && toUnenumerable(node.loc.end, "index");
  return node;
}
var estree = (superClass => class ESTreeParserMixin extends superClass {
  parse() {
    const file = toESTreeLocation(super.parse());
    if (this.options.tokens) {
      file.tokens = file.tokens.map(toESTreeLocation);
    }
    return file;
  }

  parseRegExpLiteral({
    pattern,
    flags
  }) {
    let regex = null;
    try {
      regex = new RegExp(pattern, flags);
    } catch (e) {
    }

    const node = this.estreeParseLiteral(regex);
    node.regex = {
      pattern,
      flags
    };
    return node;
  }

  parseBigIntLiteral(value) {
    let bigInt;
    try {
      bigInt = BigInt(value);
    } catch (_unused) {
      bigInt = null;
    }
    const node = this.estreeParseLiteral(bigInt);
    node.bigint = String(node.value || value);
    return node;
  }

  parseDecimalLiteral(value) {
    const decimal = null;
    const node = this.estreeParseLiteral(decimal);
    node.decimal = String(node.value || value);
    return node;
  }
  estreeParseLiteral(value) {
    return this.parseLiteral(value, "Literal");
  }

  parseStringLiteral(value) {
    return this.estreeParseLiteral(value);
  }
  parseNumericLiteral(value) {
    return this.estreeParseLiteral(value);
  }

  parseNullLiteral() {
    return this.estreeParseLiteral(null);
  }
  parseBooleanLiteral(value) {
    return this.estreeParseLiteral(value);
  }

  directiveToStmt(directive) {
    const expression = directive.value;
    delete directive.value;
    expression.type = "Literal";
    expression.raw = expression.extra.raw;
    expression.value = expression.extra.expressionValue;
    const stmt = directive;
    stmt.type = "ExpressionStatement";
    stmt.expression = expression;
    stmt.directive = expression.extra.rawValue;
    delete expression.extra;
    return stmt;
  }

  initFunction(node, isAsync) {
    super.initFunction(node, isAsync);
    node.expression = false;
  }
  checkDeclaration(node) {
    if (node != null && this.isObjectProperty(node)) {
      this.checkDeclaration(node.value);
    } else {
      super.checkDeclaration(node);
    }
  }
  getObjectOrClassMethodParams(method) {
    return method.value.params;
  }
  isValidDirective(stmt) {
    var _stmt$expression$extr;
    return stmt.type === "ExpressionStatement" && stmt.expression.type === "Literal" && typeof stmt.expression.value === "string" && !((_stmt$expression$extr = stmt.expression.extra) != null && _stmt$expression$extr.parenthesized);
  }
  parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {
    super.parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse);
    const directiveStatements = node.directives.map(d => this.directiveToStmt(d));
    node.body = directiveStatements.concat(node.body);
    delete node.directives;
  }
  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
    this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, "ClassMethod", true);
    if (method.typeParameters) {
      method.value.typeParameters = method.typeParameters;
      delete method.typeParameters;
    }
    classBody.body.push(method);
  }
  parsePrivateName() {
    const node = super.parsePrivateName();
    {
      if (!this.getPluginOption("estree", "classFeatures")) {
        return node;
      }
    }
    return this.convertPrivateNameToPrivateIdentifier(node);
  }
  convertPrivateNameToPrivateIdentifier(node) {
    const name = super.getPrivateNameSV(node);
    node = node;
    delete node.id;
    node.name = name;
    node.type = "PrivateIdentifier";
    return node;
  }
  isPrivateName(node) {
    {
      if (!this.getPluginOption("estree", "classFeatures")) {
        return super.isPrivateName(node);
      }
    }
    return node.type === "PrivateIdentifier";
  }
  getPrivateNameSV(node) {
    {
      if (!this.getPluginOption("estree", "classFeatures")) {
        return super.getPrivateNameSV(node);
      }
    }
    return node.name;
  }

  parseLiteral(value, type) {
    const node = super.parseLiteral(value, type);
    node.raw = node.extra.raw;
    delete node.extra;
    return node;
  }
  parseFunctionBody(node, allowExpression, isMethod = false) {
    super.parseFunctionBody(node, allowExpression, isMethod);
    node.expression = node.body.type !== "BlockStatement";
  }

  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {
    let funcNode = this.startNode();
    funcNode.kind = node.kind;
    funcNode = super.parseMethod(
    funcNode, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);
    funcNode.type = "FunctionExpression";
    delete funcNode.kind;
    node.value = funcNode;
    if (type === "ClassPrivateMethod") {
      node.computed = false;
    }
    return this.finishNode(
    node, "MethodDefinition");
  }
  parseClassProperty(...args) {
    const propertyNode = super.parseClassProperty(...args);
    {
      if (!this.getPluginOption("estree", "classFeatures")) {
        return propertyNode;
      }
    }
    propertyNode.type = "PropertyDefinition";
    return propertyNode;
  }
  parseClassPrivateProperty(...args) {
    const propertyNode = super.parseClassPrivateProperty(...args);
    {
      if (!this.getPluginOption("estree", "classFeatures")) {
        return propertyNode;
      }
    }
    propertyNode.type = "PropertyDefinition";
    propertyNode.computed = false;
    return propertyNode;
  }
  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {
    const node = super.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor);
    if (node) {
      node.type = "Property";
      if (node.kind === "method") {
        node.kind = "init";
      }
      node.shorthand = false;
    }
    return node;
  }
  parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors) {
    const node = super.parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors);
    if (node) {
      node.kind = "init";
      node.type = "Property";
    }
    return node;
  }
  isValidLVal(type, isUnparenthesizedInAssign, binding) {
    return type === "Property" ? "value" : super.isValidLVal(type, isUnparenthesizedInAssign, binding);
  }
  isAssignable(node, isBinding) {
    if (node != null && this.isObjectProperty(node)) {
      return this.isAssignable(node.value, isBinding);
    }
    return super.isAssignable(node, isBinding);
  }
  toAssignable(node, isLHS = false) {
    if (node != null && this.isObjectProperty(node)) {
      const {
        key,
        value
      } = node;
      if (this.isPrivateName(key)) {
        this.classScope.usePrivateName(this.getPrivateNameSV(key), key.loc.start);
      }
      this.toAssignable(value, isLHS);
    } else {
      super.toAssignable(node, isLHS);
    }
  }
  toAssignableObjectExpressionProp(prop, isLast, isLHS) {
    if (prop.kind === "get" || prop.kind === "set") {
      this.raise(Errors.PatternHasAccessor, {
        at: prop.key
      });
    } else if (prop.method) {
      this.raise(Errors.PatternHasMethod, {
        at: prop.key
      });
    } else {
      super.toAssignableObjectExpressionProp(prop, isLast, isLHS);
    }
  }
  finishCallExpression(unfinished, optional) {
    const node = super.finishCallExpression(unfinished, optional);
    if (node.callee.type === "Import") {
      node.type = "ImportExpression";
      node.source = node.arguments[0];
      if (this.hasPlugin("importAssertions")) {
        var _node$arguments$;
        node.attributes = (_node$arguments$ = node.arguments[1]) != null ? _node$arguments$ : null;
      }
      delete node.arguments;
      delete node.callee;
    }
    return node;
  }
  toReferencedArguments(node
  ) {
    if (node.type === "ImportExpression") {
      return;
    }
    super.toReferencedArguments(node);
  }
  parseExport(unfinished, decorators) {
    const exportStartLoc = this.state.lastTokStartLoc;
    const node = super.parseExport(unfinished, decorators);
    switch (node.type) {
      case "ExportAllDeclaration":
        node.exported = null;
        break;
      case "ExportNamedDeclaration":
        if (node.specifiers.length === 1 &&
        node.specifiers[0].type === "ExportNamespaceSpecifier") {
          node.type = "ExportAllDeclaration";
          node.exported = node.specifiers[0].exported;
          delete node.specifiers;
        }

      case "ExportDefaultDeclaration":
        {
          var _declaration$decorato;
          const {
            declaration
          } = node;
          if ((declaration == null ? void 0 : declaration.type) === "ClassDeclaration" && ((_declaration$decorato = declaration.decorators) == null ? void 0 : _declaration$decorato.length) > 0 &&
          declaration.start === node.start) {
            this.resetStartLocation(node,
            exportStartLoc);
          }
        }
        break;
    }
    return node;
  }
  parseSubscript(base, startLoc, noCalls, state) {
    const node = super.parseSubscript(base, startLoc, noCalls, state);
    if (state.optionalChainMember) {
      if (node.type === "OptionalMemberExpression" || node.type === "OptionalCallExpression") {
        node.type = node.type.substring(8);
      }

      if (state.stop) {
        const chain = this.startNodeAtNode(node);
        chain.expression = node;
        return this.finishNode(chain, "ChainExpression");
      }
    } else if (node.type === "MemberExpression" || node.type === "CallExpression") {
      node.optional = false;
    }
    return node;
  }
  hasPropertyAsPrivateName(node) {
    if (node.type === "ChainExpression") {
      node = node.expression;
    }
    return super.hasPropertyAsPrivateName(node);
  }
  isOptionalChain(node) {
    return node.type === "ChainExpression";
  }

  isObjectProperty(node) {
    return node.type === "Property" && node.kind === "init" && !node.method;
  }
  isObjectMethod(node) {
    return node.method || node.kind === "get" || node.kind === "set";
  }
  finishNodeAt(node, type, endLoc) {
    return toESTreeLocation(super.finishNodeAt(node, type, endLoc));
  }
  resetStartLocation(node, startLoc) {
    super.resetStartLocation(node, startLoc);
    toESTreeLocation(node);
  }
  resetEndLocation(node, endLoc = this.state.lastTokEndLoc) {
    super.resetEndLocation(node, endLoc);
    toESTreeLocation(node);
  }
});

class TokContext {
  constructor(token, preserveSpace) {
    this.token = void 0;
    this.preserveSpace = void 0;
    this.token = token;
    this.preserveSpace = !!preserveSpace;
  }
}
const types = {
  brace: new TokContext("{"),
  j_oTag: new TokContext("<tag"),
  j_cTag: new TokContext("</tag"),
  j_expr: new TokContext("<tag>...</tag>", true)
};

{
  types.template = new TokContext("`", true);
}

const beforeExpr = true;
const startsExpr = true;
const isLoop = true;
const isAssign = true;
const prefix = true;
const postfix = true;
class ExportedTokenType {
  constructor(label, conf = {}) {
    this.label = void 0;
    this.keyword = void 0;
    this.beforeExpr = void 0;
    this.startsExpr = void 0;
    this.rightAssociative = void 0;
    this.isLoop = void 0;
    this.isAssign = void 0;
    this.prefix = void 0;
    this.postfix = void 0;
    this.binop = void 0;
    this.label = label;
    this.keyword = conf.keyword;
    this.beforeExpr = !!conf.beforeExpr;
    this.startsExpr = !!conf.startsExpr;
    this.rightAssociative = !!conf.rightAssociative;
    this.isLoop = !!conf.isLoop;
    this.isAssign = !!conf.isAssign;
    this.prefix = !!conf.prefix;
    this.postfix = !!conf.postfix;
    this.binop = conf.binop != null ? conf.binop : null;
    {
      this.updateContext = null;
    }
  }
}

const keywords$1 = new Map();
function createKeyword(name, options = {}) {
  options.keyword = name;
  const token = createToken(name, options);
  keywords$1.set(name, token);
  return token;
}
function createBinop(name, binop) {
  return createToken(name, {
    beforeExpr,
    binop
  });
}
let tokenTypeCounter = -1;
const tokenTypes = [];
const tokenLabels = [];
const tokenBinops = [];
const tokenBeforeExprs = [];
const tokenStartsExprs = [];
const tokenPrefixes = [];
function createToken(name, options = {}) {
  var _options$binop, _options$beforeExpr, _options$startsExpr, _options$prefix;
  ++tokenTypeCounter;
  tokenLabels.push(name);
  tokenBinops.push((_options$binop = options.binop) != null ? _options$binop : -1);
  tokenBeforeExprs.push((_options$beforeExpr = options.beforeExpr) != null ? _options$beforeExpr : false);
  tokenStartsExprs.push((_options$startsExpr = options.startsExpr) != null ? _options$startsExpr : false);
  tokenPrefixes.push((_options$prefix = options.prefix) != null ? _options$prefix : false);
  tokenTypes.push(new ExportedTokenType(name, options));
  return tokenTypeCounter;
}
function createKeywordLike(name, options = {}) {
  var _options$binop2, _options$beforeExpr2, _options$startsExpr2, _options$prefix2;
  ++tokenTypeCounter;
  keywords$1.set(name, tokenTypeCounter);
  tokenLabels.push(name);
  tokenBinops.push((_options$binop2 = options.binop) != null ? _options$binop2 : -1);
  tokenBeforeExprs.push((_options$beforeExpr2 = options.beforeExpr) != null ? _options$beforeExpr2 : false);
  tokenStartsExprs.push((_options$startsExpr2 = options.startsExpr) != null ? _options$startsExpr2 : false);
  tokenPrefixes.push((_options$prefix2 = options.prefix) != null ? _options$prefix2 : false);
  tokenTypes.push(new ExportedTokenType("name", options));
  return tokenTypeCounter;
}

const tt = {
  bracketL: createToken("[", {
    beforeExpr,
    startsExpr
  }),
  bracketHashL: createToken("#[", {
    beforeExpr,
    startsExpr
  }),
  bracketBarL: createToken("[|", {
    beforeExpr,
    startsExpr
  }),
  bracketR: createToken("]"),
  bracketBarR: createToken("|]"),
  braceL: createToken("{", {
    beforeExpr,
    startsExpr
  }),
  braceBarL: createToken("{|", {
    beforeExpr,
    startsExpr
  }),
  braceHashL: createToken("#{", {
    beforeExpr,
    startsExpr
  }),
  braceR: createToken("}"),
  braceBarR: createToken("|}"),
  parenL: createToken("(", {
    beforeExpr,
    startsExpr
  }),
  parenR: createToken(")"),
  comma: createToken(",", {
    beforeExpr
  }),
  semi: createToken(";", {
    beforeExpr
  }),
  colon: createToken(":", {
    beforeExpr
  }),
  doubleColon: createToken("::", {
    beforeExpr
  }),
  dot: createToken("."),
  question: createToken("?", {
    beforeExpr
  }),
  questionDot: createToken("?."),
  arrow: createToken("=>", {
    beforeExpr
  }),
  template: createToken("template"),
  ellipsis: createToken("...", {
    beforeExpr
  }),
  backQuote: createToken("`", {
    startsExpr
  }),
  dollarBraceL: createToken("${", {
    beforeExpr,
    startsExpr
  }),
  templateTail: createToken("...`", {
    startsExpr
  }),
  templateNonTail: createToken("...${", {
    beforeExpr,
    startsExpr
  }),
  at: createToken("@"),
  hash: createToken("#", {
    startsExpr
  }),
  interpreterDirective: createToken("#!..."),

  eq: createToken("=", {
    beforeExpr,
    isAssign
  }),
  assign: createToken("_=", {
    beforeExpr,
    isAssign
  }),
  slashAssign: createToken("_=", {
    beforeExpr,
    isAssign
  }),
  xorAssign: createToken("_=", {
    beforeExpr,
    isAssign
  }),
  moduloAssign: createToken("_=", {
    beforeExpr,
    isAssign
  }),

  incDec: createToken("++/--", {
    prefix,
    postfix,
    startsExpr
  }),
  bang: createToken("!", {
    beforeExpr,
    prefix,
    startsExpr
  }),
  tilde: createToken("~", {
    beforeExpr,
    prefix,
    startsExpr
  }),
  doubleCaret: createToken("^^", {
    startsExpr
  }),
  doubleAt: createToken("@@", {
    startsExpr
  }),
  pipeline: createBinop("|>", 0),
  nullishCoalescing: createBinop("??", 1),
  logicalOR: createBinop("||", 1),
  logicalAND: createBinop("&&", 2),
  bitwiseOR: createBinop("|", 3),
  bitwiseXOR: createBinop("^", 4),
  bitwiseAND: createBinop("&", 5),
  equality: createBinop("==/!=/===/!==", 6),
  lt: createBinop("</>/<=/>=", 7),
  gt: createBinop("</>/<=/>=", 7),
  relational: createBinop("</>/<=/>=", 7),
  bitShift: createBinop("<</>>/>>>", 8),
  bitShiftL: createBinop("<</>>/>>>", 8),
  bitShiftR: createBinop("<</>>/>>>", 8),
  plusMin: createToken("+/-", {
    beforeExpr,
    binop: 9,
    prefix,
    startsExpr
  }),
  modulo: createToken("%", {
    binop: 10,
    startsExpr
  }),
  star: createToken("*", {
    binop: 10
  }),
  slash: createBinop("/", 10),
  exponent: createToken("**", {
    beforeExpr,
    binop: 11,
    rightAssociative: true
  }),
  _in: createKeyword("in", {
    beforeExpr,
    binop: 7
  }),
  _instanceof: createKeyword("instanceof", {
    beforeExpr,
    binop: 7
  }),
  _break: createKeyword("break"),
  _case: createKeyword("case", {
    beforeExpr
  }),
  _catch: createKeyword("catch"),
  _continue: createKeyword("continue"),
  _debugger: createKeyword("debugger"),
  _default: createKeyword("default", {
    beforeExpr
  }),
  _else: createKeyword("else", {
    beforeExpr
  }),
  _finally: createKeyword("finally"),
  _function: createKeyword("function", {
    startsExpr
  }),
  _if: createKeyword("if"),
  _return: createKeyword("return", {
    beforeExpr
  }),
  _switch: createKeyword("switch"),
  _throw: createKeyword("throw", {
    beforeExpr,
    prefix,
    startsExpr
  }),
  _try: createKeyword("try"),
  _var: createKeyword("var"),
  _const: createKeyword("const"),
  _with: createKeyword("with"),
  _new: createKeyword("new", {
    beforeExpr,
    startsExpr
  }),
  _this: createKeyword("this", {
    startsExpr
  }),
  _super: createKeyword("super", {
    startsExpr
  }),
  _class: createKeyword("class", {
    startsExpr
  }),
  _extends: createKeyword("extends", {
    beforeExpr
  }),
  _export: createKeyword("export"),
  _import: createKeyword("import", {
    startsExpr
  }),
  _null: createKeyword("null", {
    startsExpr
  }),
  _true: createKeyword("true", {
    startsExpr
  }),
  _false: createKeyword("false", {
    startsExpr
  }),
  _typeof: createKeyword("typeof", {
    beforeExpr,
    prefix,
    startsExpr
  }),
  _void: createKeyword("void", {
    beforeExpr,
    prefix,
    startsExpr
  }),
  _delete: createKeyword("delete", {
    beforeExpr,
    prefix,
    startsExpr
  }),
  _do: createKeyword("do", {
    isLoop,
    beforeExpr
  }),
  _for: createKeyword("for", {
    isLoop
  }),
  _while: createKeyword("while", {
    isLoop
  }),

  _as: createKeywordLike("as", {
    startsExpr
  }),
  _assert: createKeywordLike("assert", {
    startsExpr
  }),
  _async: createKeywordLike("async", {
    startsExpr
  }),
  _await: createKeywordLike("await", {
    startsExpr
  }),
  _from: createKeywordLike("from", {
    startsExpr
  }),
  _get: createKeywordLike("get", {
    startsExpr
  }),
  _let: createKeywordLike("let", {
    startsExpr
  }),
  _meta: createKeywordLike("meta", {
    startsExpr
  }),
  _of: createKeywordLike("of", {
    startsExpr
  }),
  _sent: createKeywordLike("sent", {
    startsExpr
  }),
  _set: createKeywordLike("set", {
    startsExpr
  }),
  _static: createKeywordLike("static", {
    startsExpr
  }),
  _using: createKeywordLike("using", {
    startsExpr
  }),
  _yield: createKeywordLike("yield", {
    startsExpr
  }),
  _asserts: createKeywordLike("asserts", {
    startsExpr
  }),
  _checks: createKeywordLike("checks", {
    startsExpr
  }),
  _exports: createKeywordLike("exports", {
    startsExpr
  }),
  _global: createKeywordLike("global", {
    startsExpr
  }),
  _implements: createKeywordLike("implements", {
    startsExpr
  }),
  _intrinsic: createKeywordLike("intrinsic", {
    startsExpr
  }),
  _infer: createKeywordLike("infer", {
    startsExpr
  }),
  _is: createKeywordLike("is", {
    startsExpr
  }),
  _mixins: createKeywordLike("mixins", {
    startsExpr
  }),
  _proto: createKeywordLike("proto", {
    startsExpr
  }),
  _require: createKeywordLike("require", {
    startsExpr
  }),
  _satisfies: createKeywordLike("satisfies", {
    startsExpr
  }),
  _keyof: createKeywordLike("keyof", {
    startsExpr
  }),
  _readonly: createKeywordLike("readonly", {
    startsExpr
  }),
  _unique: createKeywordLike("unique", {
    startsExpr
  }),
  _abstract: createKeywordLike("abstract", {
    startsExpr
  }),
  _declare: createKeywordLike("declare", {
    startsExpr
  }),
  _enum: createKeywordLike("enum", {
    startsExpr
  }),
  _module: createKeywordLike("module", {
    startsExpr
  }),
  _namespace: createKeywordLike("namespace", {
    startsExpr
  }),
  _interface: createKeywordLike("interface", {
    startsExpr
  }),
  _type: createKeywordLike("type", {
    startsExpr
  }),
  _opaque: createKeywordLike("opaque", {
    startsExpr
  }),
  name: createToken("name", {
    startsExpr
  }),

  string: createToken("string", {
    startsExpr
  }),
  num: createToken("num", {
    startsExpr
  }),
  bigint: createToken("bigint", {
    startsExpr
  }),
  decimal: createToken("decimal", {
    startsExpr
  }),
  regexp: createToken("regexp", {
    startsExpr
  }),
  privateName: createToken("#name", {
    startsExpr
  }),
  eof: createToken("eof"),
  jsxName: createToken("jsxName"),
  jsxText: createToken("jsxText", {
    beforeExpr: true
  }),
  jsxTagStart: createToken("jsxTagStart", {
    startsExpr: true
  }),
  jsxTagEnd: createToken("jsxTagEnd"),
  placeholder: createToken("%%", {
    startsExpr: true
  })
};
function tokenIsIdentifier(token) {
  return token >= 93 && token <= 130;
}
function tokenKeywordOrIdentifierIsKeyword(token) {
  return token <= 92;
}
function tokenIsKeywordOrIdentifier(token) {
  return token >= 58 && token <= 130;
}
function tokenIsLiteralPropertyName(token) {
  return token >= 58 && token <= 134;
}
function tokenComesBeforeExpression(token) {
  return tokenBeforeExprs[token];
}
function tokenCanStartExpression(token) {
  return tokenStartsExprs[token];
}
function tokenIsAssignment(token) {
  return token >= 29 && token <= 33;
}
function tokenIsFlowInterfaceOrTypeOrOpaque(token) {
  return token >= 127 && token <= 129;
}
function tokenIsLoop(token) {
  return token >= 90 && token <= 92;
}
function tokenIsKeyword(token) {
  return token >= 58 && token <= 92;
}
function tokenIsOperator(token) {
  return token >= 39 && token <= 59;
}
function tokenIsPostfix(token) {
  return token === 34;
}
function tokenIsPrefix(token) {
  return tokenPrefixes[token];
}
function tokenIsTSTypeOperator(token) {
  return token >= 119 && token <= 121;
}
function tokenIsTSDeclarationStart(token) {
  return token >= 122 && token <= 128;
}
function tokenLabelName(token) {
  return tokenLabels[token];
}
function tokenOperatorPrecedence(token) {
  return tokenBinops[token];
}
function tokenIsRightAssociative(token) {
  return token === 57;
}
function tokenIsTemplate(token) {
  return token >= 24 && token <= 25;
}
function getExportedToken(token) {
  return tokenTypes[token];
}
{
  tokenTypes[8].updateContext = context => {
    context.pop();
  };
  tokenTypes[5].updateContext = tokenTypes[7].updateContext = tokenTypes[23].updateContext = context => {
    context.push(types.brace);
  };
  tokenTypes[22].updateContext = context => {
    if (context[context.length - 1] === types.template) {
      context.pop();
    } else {
      context.push(types.template);
    }
  };
  tokenTypes[140].updateContext = context => {
    context.push(types.j_expr, types.j_oTag);
  };
}

let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;

const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];
const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];

function isInAstralSet(code, set) {
  let pos = 0x10000;
  for (let i = 0, length = set.length; i < length; i += 2) {
    pos += set[i];
    if (pos > code) return false;
    pos += set[i + 1];
    if (pos >= code) return true;
  }
  return false;
}

function isIdentifierStart(code) {
  if (code < 65) return code === 36;
  if (code <= 90) return true;
  if (code < 97) return code === 95;
  if (code <= 122) return true;
  if (code <= 0xffff) {
    return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
  }
  return isInAstralSet(code, astralIdentifierStartCodes);
}

function isIdentifierChar(code) {
  if (code < 48) return code === 36;
  if (code < 58) return true;
  if (code < 65) return false;
  if (code <= 90) return true;
  if (code < 97) return code === 95;
  if (code <= 122) return true;
  if (code <= 0xffff) {
    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
  }
  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
}

const reservedWords = {
  keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
  strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
  strictBind: ["eval", "arguments"]
};
const keywords = new Set(reservedWords.keyword);
const reservedWordsStrictSet = new Set(reservedWords.strict);
const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);

function isReservedWord(word, inModule) {
  return inModule && word === "await" || word === "enum";
}

function isStrictReservedWord(word, inModule) {
  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
}

function isStrictBindOnlyReservedWord(word) {
  return reservedWordsStrictBindSet.has(word);
}

function isStrictBindReservedWord(word, inModule) {
  return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
}
function isKeyword(word) {
  return keywords.has(word);
}

function isIteratorStart(current, next, next2) {
  return current === 64 && next === 64 && isIdentifierStart(next2);
}

const reservedWordLikeSet = new Set(["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete",
"implements", "interface", "let", "package", "private", "protected", "public", "static", "yield",
"eval", "arguments",
"enum", "await"]);
function canBeReservedWord(word) {
  return reservedWordLikeSet.has(word);
}

const SCOPE_OTHER = 0b000000000,
  SCOPE_PROGRAM = 0b000000001,
  SCOPE_FUNCTION = 0b000000010,
  SCOPE_ARROW = 0b000000100,
  SCOPE_SIMPLE_CATCH = 0b000001000,
  SCOPE_SUPER = 0b000010000,
  SCOPE_DIRECT_SUPER = 0b000100000,
  SCOPE_CLASS = 0b001000000,
  SCOPE_STATIC_BLOCK = 0b010000000,
  SCOPE_TS_MODULE = 0b100000000,
  SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_STATIC_BLOCK | SCOPE_TS_MODULE;
const BIND_KIND_VALUE = 0b000000000001,
  BIND_KIND_TYPE = 0b000000000010,
  BIND_SCOPE_VAR = 0b000000000100,
  BIND_SCOPE_LEXICAL = 0b000000001000,
  BIND_SCOPE_FUNCTION = 0b000000010000,
  BIND_FLAGS_NONE = 0b0000001000000,
  BIND_FLAGS_CLASS = 0b0000010000000,
  BIND_FLAGS_TS_ENUM = 0b0000100000000,
  BIND_FLAGS_TS_CONST_ENUM = 0b0001000000000,
  BIND_FLAGS_TS_EXPORT_ONLY = 0b0010000000000,
  BIND_FLAGS_FLOW_DECLARE_FN = 0b0100000000000,
  BIND_FLAGS_TS_IMPORT = 0b1000000000000;

const BIND_CLASS = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_CLASS,
  BIND_LEXICAL = BIND_KIND_VALUE | 0 | BIND_SCOPE_LEXICAL | 0,
  BIND_VAR = BIND_KIND_VALUE | 0 | BIND_SCOPE_VAR | 0,
  BIND_FUNCTION = BIND_KIND_VALUE | 0 | BIND_SCOPE_FUNCTION | 0,
  BIND_TS_INTERFACE = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_CLASS,
  BIND_TS_TYPE = 0 | BIND_KIND_TYPE | 0 | 0,
  BIND_TS_ENUM = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL | BIND_FLAGS_TS_ENUM,
  BIND_TS_AMBIENT = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,
  BIND_NONE = 0 | 0 | 0 | BIND_FLAGS_NONE,
  BIND_OUTSIDE = BIND_KIND_VALUE | 0 | 0 | BIND_FLAGS_NONE,
  BIND_TS_CONST_ENUM = BIND_TS_ENUM | BIND_FLAGS_TS_CONST_ENUM,
  BIND_TS_NAMESPACE = 0 | 0 | 0 | BIND_FLAGS_TS_EXPORT_ONLY,
  BIND_TS_TYPE_IMPORT = 0 | BIND_KIND_TYPE | 0 | BIND_FLAGS_TS_IMPORT,
  BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;
const CLASS_ELEMENT_FLAG_STATIC = 0b100,
  CLASS_ELEMENT_KIND_GETTER = 0b010,
  CLASS_ELEMENT_KIND_SETTER = 0b001,
  CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;

const CLASS_ELEMENT_STATIC_GETTER = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,
  CLASS_ELEMENT_STATIC_SETTER = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,
  CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,
  CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,
  CLASS_ELEMENT_OTHER = 0;

class Scope {

  constructor(flags) {
    this.var = new Set();
    this.lexical = new Set();
    this.functions = new Set();
    this.flags = flags;
  }
}

class ScopeHandler {
  constructor(parser, inModule) {
    this.parser = void 0;
    this.scopeStack = [];
    this.inModule = void 0;
    this.undefinedExports = new Map();
    this.parser = parser;
    this.inModule = inModule;
  }
  get inTopLevel() {
    return (this.currentScope().flags & SCOPE_PROGRAM) > 0;
  }
  get inFunction() {
    return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;
  }
  get allowSuper() {
    return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;
  }
  get allowDirectSuper() {
    return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;
  }
  get inClass() {
    return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;
  }
  get inClassAndNotInNonArrowFunction() {
    const flags = this.currentThisScopeFlags();
    return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;
  }
  get inStaticBlock() {
    for (let i = this.scopeStack.length - 1;; i--) {
      const {
        flags
      } = this.scopeStack[i];
      if (flags & SCOPE_STATIC_BLOCK) {
        return true;
      }
      if (flags & (SCOPE_VAR | SCOPE_CLASS)) {
        return false;
      }
    }
  }
  get inNonArrowFunction() {
    return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;
  }
  get treatFunctionsAsVar() {
    return this.treatFunctionsAsVarInScope(this.currentScope());
  }
  createScope(flags) {
    return new Scope(flags);
  }
  enter(flags) {
    this.scopeStack.push(this.createScope(flags));
  }
  exit() {
    const scope = this.scopeStack.pop();
    return scope.flags;
  }

  treatFunctionsAsVarInScope(scope) {
    return !!(scope.flags & (SCOPE_FUNCTION | SCOPE_STATIC_BLOCK) || !this.parser.inModule && scope.flags & SCOPE_PROGRAM);
  }
  declareName(name, bindingType, loc) {
    let scope = this.currentScope();
    if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {
      this.checkRedeclarationInScope(scope, name, bindingType, loc);
      if (bindingType & BIND_SCOPE_FUNCTION) {
        scope.functions.add(name);
      } else {
        scope.lexical.add(name);
      }
      if (bindingType & BIND_SCOPE_LEXICAL) {
        this.maybeExportDefined(scope, name);
      }
    } else if (bindingType & BIND_SCOPE_VAR) {
      for (let i = this.scopeStack.length - 1; i >= 0; --i) {
        scope = this.scopeStack[i];
        this.checkRedeclarationInScope(scope, name, bindingType, loc);
        scope.var.add(name);
        this.maybeExportDefined(scope, name);
        if (scope.flags & SCOPE_VAR) break;
      }
    }
    if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {
      this.undefinedExports.delete(name);
    }
  }
  maybeExportDefined(scope, name) {
    if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {
      this.undefinedExports.delete(name);
    }
  }
  checkRedeclarationInScope(scope, name, bindingType, loc) {
    if (this.isRedeclaredInScope(scope, name, bindingType)) {
      this.parser.raise(Errors.VarRedeclaration, {
        at: loc,
        identifierName: name
      });
    }
  }
  isRedeclaredInScope(scope, name, bindingType) {
    if (!(bindingType & BIND_KIND_VALUE)) return false;
    if (bindingType & BIND_SCOPE_LEXICAL) {
      return scope.lexical.has(name) || scope.functions.has(name) || scope.var.has(name);
    }
    if (bindingType & BIND_SCOPE_FUNCTION) {
      return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name);
    }
    return scope.lexical.has(name) && !(scope.flags & SCOPE_SIMPLE_CATCH && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name);
  }
  checkLocalExport(id) {
    const {
      name
    } = id;
    const topLevelScope = this.scopeStack[0];
    if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) &&
    !topLevelScope.functions.has(name)) {
      this.undefinedExports.set(name, id.loc.start);
    }
  }
  currentScope() {
    return this.scopeStack[this.scopeStack.length - 1];
  }
  currentVarScopeFlags() {
    for (let i = this.scopeStack.length - 1;; i--) {
      const {
        flags
      } = this.scopeStack[i];
      if (flags & SCOPE_VAR) {
        return flags;
      }
    }
  }

  currentThisScopeFlags() {
    for (let i = this.scopeStack.length - 1;; i--) {
      const {
        flags
      } = this.scopeStack[i];
      if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {
        return flags;
      }
    }
  }
}

class FlowScope extends Scope {
  constructor(...args) {
    super(...args);
    this.declareFunctions = new Set();
  }
}
class FlowScopeHandler extends ScopeHandler {
  createScope(flags) {
    return new FlowScope(flags);
  }
  declareName(name, bindingType, loc) {
    const scope = this.currentScope();
    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {
      this.checkRedeclarationInScope(scope, name, bindingType, loc);
      this.maybeExportDefined(scope, name);
      scope.declareFunctions.add(name);
      return;
    }
    super.declareName(name, bindingType, loc);
  }
  isRedeclaredInScope(scope, name, bindingType) {
    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;
    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {
      return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name));
    }
    return false;
  }
  checkLocalExport(id) {
    if (!this.scopeStack[0].declareFunctions.has(id.name)) {
      super.checkLocalExport(id);
    }
  }
}

class BaseParser {
  constructor() {
    this.sawUnambiguousESM = false;
    this.ambiguousScriptDifferentAst = false;
  }
  hasPlugin(pluginConfig) {
    if (typeof pluginConfig === "string") {
      return this.plugins.has(pluginConfig);
    } else {
      const [pluginName, pluginOptions] = pluginConfig;
      if (!this.hasPlugin(pluginName)) {
        return false;
      }
      const actualOptions = this.plugins.get(pluginName);
      for (const key of Object.keys(pluginOptions)) {
        if ((actualOptions == null ? void 0 : actualOptions[key]) !== pluginOptions[key]) {
          return false;
        }
      }
      return true;
    }
  }
  getPluginOption(plugin, name) {
    var _this$plugins$get;
    return (_this$plugins$get = this.plugins.get(plugin)) == null ? void 0 : _this$plugins$get[name];
  }
}

function setTrailingComments(node, comments) {
  if (node.trailingComments === undefined) {
    node.trailingComments = comments;
  } else {
    node.trailingComments.unshift(...comments);
  }
}

function setLeadingComments(node, comments) {
  if (node.leadingComments === undefined) {
    node.leadingComments = comments;
  } else {
    node.leadingComments.unshift(...comments);
  }
}

function setInnerComments(node, comments) {
  if (node.innerComments === undefined) {
    node.innerComments = comments;
  } else {
    node.innerComments.unshift(...comments);
  }
}

function adjustInnerComments(node, elements, commentWS) {
  let lastElement = null;
  let i = elements.length;
  while (lastElement === null && i > 0) {
    lastElement = elements[--i];
  }
  if (lastElement === null || lastElement.start > commentWS.start) {
    setInnerComments(node, commentWS.comments);
  } else {
    setTrailingComments(lastElement, commentWS.comments);
  }
}
class CommentsParser extends BaseParser {
  addComment(comment) {
    if (this.filename) comment.loc.filename = this.filename;
    this.state.comments.push(comment);
  }

  processComment(node) {
    const {
      commentStack
    } = this.state;
    const commentStackLength = commentStack.length;
    if (commentStackLength === 0) return;
    let i = commentStackLength - 1;
    const lastCommentWS = commentStack[i];
    if (lastCommentWS.start === node.end) {
      lastCommentWS.leadingNode = node;
      i--;
    }
    const {
      start: nodeStart
    } = node;
    for (; i >= 0; i--) {
      const commentWS = commentStack[i];
      const commentEnd = commentWS.end;
      if (commentEnd > nodeStart) {
        commentWS.containingNode = node;
        this.finalizeComment(commentWS);
        commentStack.splice(i, 1);
      } else {
        if (commentEnd === nodeStart) {
          commentWS.trailingNode = node;
        }
        break;
      }
    }
  }

  finalizeComment(commentWS) {
    const {
      comments
    } = commentWS;
    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {
      if (commentWS.leadingNode !== null) {
        setTrailingComments(commentWS.leadingNode, comments);
      }
      if (commentWS.trailingNode !== null) {
        setLeadingComments(commentWS.trailingNode, comments);
      }
    } else {
      const {
        containingNode: node,
        start: commentStart
      } = commentWS;
      if (this.input.charCodeAt(commentStart - 1) === 44) {
        switch (node.type) {
          case "ObjectExpression":
          case "ObjectPattern":
          case "RecordExpression":
            adjustInnerComments(node, node.properties, commentWS);
            break;
          case "CallExpression":
          case "OptionalCallExpression":
            adjustInnerComments(node, node.arguments, commentWS);
            break;
          case "FunctionDeclaration":
          case "FunctionExpression":
          case "ArrowFunctionExpression":
          case "ObjectMethod":
          case "ClassMethod":
          case "ClassPrivateMethod":
            adjustInnerComments(node, node.params, commentWS);
            break;
          case "ArrayExpression":
          case "ArrayPattern":
          case "TupleExpression":
            adjustInnerComments(node, node.elements, commentWS);
            break;
          case "ExportNamedDeclaration":
          case "ImportDeclaration":
            adjustInnerComments(node, node.specifiers, commentWS);
            break;
          default:
            {
              setInnerComments(node, comments);
            }
        }
      } else {
        setInnerComments(node, comments);
      }
    }
  }

  finalizeRemainingComments() {
    const {
      commentStack
    } = this.state;
    for (let i = commentStack.length - 1; i >= 0; i--) {
      this.finalizeComment(commentStack[i]);
    }
    this.state.commentStack = [];
  }

  resetPreviousNodeTrailingComments(node) {
    const {
      commentStack
    } = this.state;
    const {
      length
    } = commentStack;
    if (length === 0) return;
    const commentWS = commentStack[length - 1];
    if (commentWS.leadingNode === node) {
      commentWS.leadingNode = null;
    }
  }

  takeSurroundingComments(node, start, end) {
    const {
      commentStack
    } = this.state;
    const commentStackLength = commentStack.length;
    if (commentStackLength === 0) return;
    let i = commentStackLength - 1;
    for (; i >= 0; i--) {
      const commentWS = commentStack[i];
      const commentEnd = commentWS.end;
      const commentStart = commentWS.start;
      if (commentStart === end) {
        commentWS.leadingNode = node;
      } else if (commentEnd === start) {
        commentWS.trailingNode = node;
      } else if (commentEnd < start) {
        break;
      }
    }
  }
}

const lineBreak = /\r\n?|[\n\u2028\u2029]/;
const lineBreakG = new RegExp(lineBreak.source, "g");

function isNewLine(code) {
  switch (code) {
    case 10:
    case 13:
    case 8232:
    case 8233:
      return true;
    default:
      return false;
  }
}
const skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
const skipWhiteSpaceInLine = /(?:[^\S\n\r\u2028\u2029]|\/\/.*|\/\*.*?\*\/)*/y;

const skipWhiteSpaceToLineBreak = new RegExp(
"(?=(" +
skipWhiteSpaceInLine.source + "))\\1" +
/(?=[\n\r\u2028\u2029]|\/\*(?!.*?\*\/)|$)/.source, "y");

function isWhitespace(code) {
  switch (code) {
    case 0x0009:
    case 0x000b:
    case 0x000c:
    case 32:
    case 160:
    case 5760:
    case 0x2000:
    case 0x2001:
    case 0x2002:
    case 0x2003:
    case 0x2004:
    case 0x2005:
    case 0x2006:
    case 0x2007:
    case 0x2008:
    case 0x2009:
    case 0x200a:
    case 0x202f:
    case 0x205f:
    case 0x3000:
    case 0xfeff:
      return true;
    default:
      return false;
  }
}

class State {
  constructor() {
    this.strict = void 0;
    this.curLine = void 0;
    this.lineStart = void 0;
    this.startLoc = void 0;
    this.endLoc = void 0;
    this.errors = [];
    this.potentialArrowAt = -1;
    this.noArrowAt = [];
    this.noArrowParamsConversionAt = [];
    this.maybeInArrowParameters = false;
    this.inType = false;
    this.noAnonFunctionType = false;
    this.hasFlowComment = false;
    this.isAmbientContext = false;
    this.inAbstractClass = false;
    this.inDisallowConditionalTypesContext = false;
    this.topicContext = {
      maxNumOfResolvableTopics: 0,
      maxTopicIndex: null
    };
    this.soloAwait = false;
    this.inFSharpPipelineDirectBody = false;
    this.labels = [];
    this.comments = [];
    this.commentStack = [];
    this.pos = 0;
    this.type = 137;
    this.value = null;
    this.start = 0;
    this.end = 0;
    this.lastTokEndLoc = null;
    this.lastTokStartLoc = null;
    this.lastTokStart = 0;
    this.context = [types.brace];
    this.canStartJSXElement = true;
    this.containsEsc = false;
    this.firstInvalidTemplateEscapePos = null;
    this.strictErrors = new Map();
    this.tokensLength = 0;
  }
  init({
    strictMode,
    sourceType,
    startLine,
    startColumn
  }) {
    this.strict = strictMode === false ? false : strictMode === true ? true : sourceType === "module";
    this.curLine = startLine;
    this.lineStart = -startColumn;
    this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);
  }
  curPosition() {
    return new Position(this.curLine, this.pos - this.lineStart, this.pos);
  }
  clone(skipArrays) {
    const state = new State();
    const keys = Object.keys(this);
    for (let i = 0, length = keys.length; i < length; i++) {
      const key = keys[i];
      let val = this[key];
      if (!skipArrays && Array.isArray(val)) {
        val = val.slice();
      }

      state[key] = val;
    }
    return state;
  }
}

var _isDigit = function isDigit(code) {
  return code >= 48 && code <= 57;
};
const forbiddenNumericSeparatorSiblings = {
  decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]),
  hex: new Set([46, 88, 95, 120])
};
const isAllowedNumericSeparatorSibling = {
  bin: ch => ch === 48 || ch === 49,
  oct: ch => ch >= 48 && ch <= 55,
  dec: ch => ch >= 48 && ch <= 57,
  hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102
};
function readStringContents(type, input, pos, lineStart, curLine, errors) {
  const initialPos = pos;
  const initialLineStart = lineStart;
  const initialCurLine = curLine;
  let out = "";
  let firstInvalidLoc = null;
  let chunkStart = pos;
  const {
    length
  } = input;
  for (;;) {
    if (pos >= length) {
      errors.unterminated(initialPos, initialLineStart, initialCurLine);
      out += input.slice(chunkStart, pos);
      break;
    }
    const ch = input.charCodeAt(pos);
    if (isStringEnd(type, ch, input, pos)) {
      out += input.slice(chunkStart, pos);
      break;
    }
    if (ch === 92) {
      out += input.slice(chunkStart, pos);
      const res = readEscapedChar(input, pos, lineStart, curLine, type === "template", errors);
      if (res.ch === null && !firstInvalidLoc) {
        firstInvalidLoc = {
          pos,
          lineStart,
          curLine
        };
      } else {
        out += res.ch;
      }
      ({
        pos,
        lineStart,
        curLine
      } = res);
      chunkStart = pos;
    } else if (ch === 8232 || ch === 8233) {
      ++pos;
      ++curLine;
      lineStart = pos;
    } else if (ch === 10 || ch === 13) {
      if (type === "template") {
        out += input.slice(chunkStart, pos) + "\n";
        ++pos;
        if (ch === 13 && input.charCodeAt(pos) === 10) {
          ++pos;
        }
        ++curLine;
        chunkStart = lineStart = pos;
      } else {
        errors.unterminated(initialPos, initialLineStart, initialCurLine);
      }
    } else {
      ++pos;
    }
  }
  return {
    pos,
    str: out,
    firstInvalidLoc,
    lineStart,
    curLine,
    containsInvalid: !!firstInvalidLoc
  };
}
function isStringEnd(type, ch, input, pos) {
  if (type === "template") {
    return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123;
  }
  return ch === (type === "double" ? 34 : 39);
}
function readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) {
  const throwOnInvalid = !inTemplate;
  pos++;

  const res = ch => ({
    pos,
    ch,
    lineStart,
    curLine
  });
  const ch = input.charCodeAt(pos++);
  switch (ch) {
    case 110:
      return res("\n");
    case 114:
      return res("\r");
    case 120:
      {
        let code;
        ({
          code,
          pos
        } = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors));
        return res(code === null ? null : String.fromCharCode(code));
      }
    case 117:
      {
        let code;
        ({
          code,
          pos
        } = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors));
        return res(code === null ? null : String.fromCodePoint(code));
      }
    case 116:
      return res("\t");
    case 98:
      return res("\b");
    case 118:
      return res("\u000b");
    case 102:
      return res("\f");
    case 13:
      if (input.charCodeAt(pos) === 10) {
        ++pos;
      }
    case 10:
      lineStart = pos;
      ++curLine;
    case 8232:
    case 8233:
      return res("");
    case 56:
    case 57:
      if (inTemplate) {
        return res(null);
      } else {
        errors.strictNumericEscape(pos - 1, lineStart, curLine);
      }
    default:
      if (ch >= 48 && ch <= 55) {
        const startPos = pos - 1;
        const match = input.slice(startPos, pos + 2).match(/^[0-7]+/);
        let octalStr = match[0];
        let octal = parseInt(octalStr, 8);
        if (octal > 255) {
          octalStr = octalStr.slice(0, -1);
          octal = parseInt(octalStr, 8);
        }
        pos += octalStr.length - 1;
        const next = input.charCodeAt(pos);
        if (octalStr !== "0" || next === 56 || next === 57) {
          if (inTemplate) {
            return res(null);
          } else {
            errors.strictNumericEscape(startPos, lineStart, curLine);
          }
        }
        return res(String.fromCharCode(octal));
      }
      return res(String.fromCharCode(ch));
  }
}
function readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) {
  const initialPos = pos;
  let n;
  ({
    n,
    pos
  } = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors, !throwOnInvalid));
  if (n === null) {
    if (throwOnInvalid) {
      errors.invalidEscapeSequence(initialPos, lineStart, curLine);
    } else {
      pos = initialPos - 1;
    }
  }
  return {
    code: n,
    pos
  };
}
function readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors, bailOnError) {
  const start = pos;
  const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;
  const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin;
  let invalid = false;
  let total = 0;
  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {
    const code = input.charCodeAt(pos);
    let val;
    if (code === 95 && allowNumSeparator !== "bail") {
      const prev = input.charCodeAt(pos - 1);
      const next = input.charCodeAt(pos + 1);
      if (!allowNumSeparator) {
        if (bailOnError) return {
          n: null,
          pos
        };
        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);
      } else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) {
        if (bailOnError) return {
          n: null,
          pos
        };
        errors.unexpectedNumericSeparator(pos, lineStart, curLine);
      }

      ++pos;
      continue;
    }
    if (code >= 97) {
      val = code - 97 + 10;
    } else if (code >= 65) {
      val = code - 65 + 10;
    } else if (_isDigit(code)) {
      val = code - 48;
    } else {
      val = Infinity;
    }
    if (val >= radix) {
      if (val <= 9 && bailOnError) {
        return {
          n: null,
          pos
        };
      } else if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) {
        val = 0;
      } else if (forceLen) {
        val = 0;
        invalid = true;
      } else {
        break;
      }
    }
    ++pos;
    total = total * radix + val;
  }
  if (pos === start || len != null && pos - start !== len || invalid) {
    return {
      n: null,
      pos
    };
  }
  return {
    n: total,
    pos
  };
}
function readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) {
  const ch = input.charCodeAt(pos);
  let code;
  if (ch === 123) {
    ++pos;
    ({
      code,
      pos
    } = readHexChar(input, pos, lineStart, curLine, input.indexOf("}", pos) - pos, true, throwOnInvalid, errors));
    ++pos;
    if (code !== null && code > 0x10ffff) {
      if (throwOnInvalid) {
        errors.invalidCodePoint(pos, lineStart, curLine);
      } else {
        return {
          code: null,
          pos
        };
      }
    }
  } else {
    ({
      code,
      pos
    } = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors));
  }
  return {
    code,
    pos
  };
}

const _excluded = ["at"],
  _excluded2 = ["at"];
function buildPosition(pos, lineStart, curLine) {
  return new Position(curLine, pos - lineStart, pos);
}
const VALID_REGEX_FLAGS = new Set([103, 109, 115, 105, 121, 117, 100, 118]);

class Token {
  constructor(state) {
    this.type = state.type;
    this.value = state.value;
    this.start = state.start;
    this.end = state.end;
    this.loc = new SourceLocation(state.startLoc, state.endLoc);
  }
}

class Tokenizer extends CommentsParser {

  constructor(options, input) {
    super();
    this.isLookahead = void 0;
    this.tokens = [];
    this.errorHandlers_readInt = {
      invalidDigit: (pos, lineStart, curLine, radix) => {
        if (!this.options.errorRecovery) return false;
        this.raise(Errors.InvalidDigit, {
          at: buildPosition(pos, lineStart, curLine),
          radix
        });
        return true;
      },
      numericSeparatorInEscapeSequence: this.errorBuilder(Errors.NumericSeparatorInEscapeSequence),
      unexpectedNumericSeparator: this.errorBuilder(Errors.UnexpectedNumericSeparator)
    };
    this.errorHandlers_readCodePoint = Object.assign({}, this.errorHandlers_readInt, {
      invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),
      invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint)
    });
    this.errorHandlers_readStringContents_string = Object.assign({}, this.errorHandlers_readCodePoint, {
      strictNumericEscape: (pos, lineStart, curLine) => {
        this.recordStrictModeErrors(Errors.StrictNumericEscape, {
          at: buildPosition(pos, lineStart, curLine)
        });
      },
      unterminated: (pos, lineStart, curLine) => {
        throw this.raise(Errors.UnterminatedString, {
          at: buildPosition(pos - 1, lineStart, curLine)
        });
      }
    });
    this.errorHandlers_readStringContents_template = Object.assign({}, this.errorHandlers_readCodePoint, {
      strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),
      unterminated: (pos, lineStart, curLine) => {
        throw this.raise(Errors.UnterminatedTemplate, {
          at: buildPosition(pos, lineStart, curLine)
        });
      }
    });
    this.state = new State();
    this.state.init(options);
    this.input = input;
    this.length = input.length;
    this.isLookahead = false;
  }
  pushToken(token) {
    this.tokens.length = this.state.tokensLength;
    this.tokens.push(token);
    ++this.state.tokensLength;
  }

  next() {
    this.checkKeywordEscapes();
    if (this.options.tokens) {
      this.pushToken(new Token(this.state));
    }
    this.state.lastTokStart = this.state.start;
    this.state.lastTokEndLoc = this.state.endLoc;
    this.state.lastTokStartLoc = this.state.startLoc;
    this.nextToken();
  }
  eat(type) {
    if (this.match(type)) {
      this.next();
      return true;
    } else {
      return false;
    }
  }

  match(type) {
    return this.state.type === type;
  }

  createLookaheadState(state) {
    return {
      pos: state.pos,
      value: null,
      type: state.type,
      start: state.start,
      end: state.end,
      context: [this.curContext()],
      inType: state.inType,
      startLoc: state.startLoc,
      lastTokEndLoc: state.lastTokEndLoc,
      curLine: state.curLine,
      lineStart: state.lineStart,
      curPosition: state.curPosition
    };
  }

  lookahead() {
    const old = this.state;
    this.state = this.createLookaheadState(old);
    this.isLookahead = true;
    this.nextToken();
    this.isLookahead = false;
    const curr = this.state;
    this.state = old;
    return curr;
  }
  nextTokenStart() {
    return this.nextTokenStartSince(this.state.pos);
  }
  nextTokenStartSince(pos) {
    skipWhiteSpace.lastIndex = pos;
    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;
  }
  lookaheadCharCode() {
    return this.input.charCodeAt(this.nextTokenStart());
  }
  codePointAtPos(pos) {
    let cp = this.input.charCodeAt(pos);
    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {
      const trail = this.input.charCodeAt(pos);
      if ((trail & 0xfc00) === 0xdc00) {
        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
      }
    }
    return cp;
  }

  setStrict(strict) {
    this.state.strict = strict;
    if (strict) {
      this.state.strictErrors.forEach(([toParseError, at]) => this.raise(toParseError, {
        at
      }));
      this.state.strictErrors.clear();
    }
  }
  curContext() {
    return this.state.context[this.state.context.length - 1];
  }

  nextToken() {
    this.skipSpace();
    this.state.start = this.state.pos;
    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();
    if (this.state.pos >= this.length) {
      this.finishToken(137);
      return;
    }
    this.getTokenFromCode(this.codePointAtPos(this.state.pos));
  }

  skipBlockComment(commentEnd) {
    let startLoc;
    if (!this.isLookahead) startLoc = this.state.curPosition();
    const start = this.state.pos;
    const end = this.input.indexOf(commentEnd, start + 2);
    if (end === -1) {
      throw this.raise(Errors.UnterminatedComment, {
        at: this.state.curPosition()
      });
    }
    this.state.pos = end + commentEnd.length;
    lineBreakG.lastIndex = start + 2;
    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {
      ++this.state.curLine;
      this.state.lineStart = lineBreakG.lastIndex;
    }

    if (this.isLookahead) return;

    const comment = {
      type: "CommentBlock",
      value: this.input.slice(start + 2, end),
      start,
      end: end + commentEnd.length,
      loc: new SourceLocation(startLoc, this.state.curPosition())
    };
    if (this.options.tokens) this.pushToken(comment);
    return comment;
  }
  skipLineComment(startSkip) {
    const start = this.state.pos;
    let startLoc;
    if (!this.isLookahead) startLoc = this.state.curPosition();
    let ch = this.input.charCodeAt(this.state.pos += startSkip);
    if (this.state.pos < this.length) {
      while (!isNewLine(ch) && ++this.state.pos < this.length) {
        ch = this.input.charCodeAt(this.state.pos);
      }
    }

    if (this.isLookahead) return;

    const end = this.state.pos;
    const value = this.input.slice(start + startSkip, end);
    const comment = {
      type: "CommentLine",
      value,
      start,
      end,
      loc: new SourceLocation(startLoc, this.state.curPosition())
    };
    if (this.options.tokens) this.pushToken(comment);
    return comment;
  }

  skipSpace() {
    const spaceStart = this.state.pos;
    const comments = [];
    loop: while (this.state.pos < this.length) {
      const ch = this.input.charCodeAt(this.state.pos);
      switch (ch) {
        case 32:
        case 160:
        case 9:
          ++this.state.pos;
          break;
        case 13:
          if (this.input.charCodeAt(this.state.pos + 1) === 10) {
            ++this.state.pos;
          }
        case 10:
        case 8232:
        case 8233:
          ++this.state.pos;
          ++this.state.curLine;
          this.state.lineStart = this.state.pos;
          break;
        case 47:
          switch (this.input.charCodeAt(this.state.pos + 1)) {
            case 42:
              {
                const comment = this.skipBlockComment("*/");
                if (comment !== undefined) {
                  this.addComment(comment);
                  if (this.options.attachComment) comments.push(comment);
                }
                break;
              }
            case 47:
              {
                const comment = this.skipLineComment(2);
                if (comment !== undefined) {
                  this.addComment(comment);
                  if (this.options.attachComment) comments.push(comment);
                }
                break;
              }
            default:
              break loop;
          }
          break;
        default:
          if (isWhitespace(ch)) {
            ++this.state.pos;
          } else if (ch === 45 && !this.inModule) {
            const pos = this.state.pos;
            if (this.input.charCodeAt(pos + 1) === 45 && this.input.charCodeAt(pos + 2) === 62 && (spaceStart === 0 || this.state.lineStart > spaceStart)) {
              const comment = this.skipLineComment(3);
              if (comment !== undefined) {
                this.addComment(comment);
                if (this.options.attachComment) comments.push(comment);
              }
            } else {
              break loop;
            }
          } else if (ch === 60 && !this.inModule) {
            const pos = this.state.pos;
            if (this.input.charCodeAt(pos + 1) === 33 && this.input.charCodeAt(pos + 2) === 45 && this.input.charCodeAt(pos + 3) === 45) {
              const comment = this.skipLineComment(4);
              if (comment !== undefined) {
                this.addComment(comment);
                if (this.options.attachComment) comments.push(comment);
              }
            } else {
              break loop;
            }
          } else {
            break loop;
          }
      }
    }
    if (comments.length > 0) {
      const end = this.state.pos;
      const commentWhitespace = {
        start: spaceStart,
        end,
        comments,
        leadingNode: null,
        trailingNode: null,
        containingNode: null
      };
      this.state.commentStack.push(commentWhitespace);
    }
  }

  finishToken(type, val) {
    this.state.end = this.state.pos;
    this.state.endLoc = this.state.curPosition();
    const prevType = this.state.type;
    this.state.type = type;
    this.state.value = val;
    if (!this.isLookahead) {
      this.updateContext(prevType);
    }
  }
  replaceToken(type) {
    this.state.type = type;
    this.updateContext();
  }

  readToken_numberSign() {
    if (this.state.pos === 0 && this.readToken_interpreter()) {
      return;
    }
    const nextPos = this.state.pos + 1;
    const next = this.codePointAtPos(nextPos);
    if (next >= 48 && next <= 57) {
      throw this.raise(Errors.UnexpectedDigitAfterHash, {
        at: this.state.curPosition()
      });
    }
    if (next === 123 || next === 91 && this.hasPlugin("recordAndTuple")) {
      this.expectPlugin("recordAndTuple");
      if (this.getPluginOption("recordAndTuple", "syntaxType") === "bar") {
        throw this.raise(next === 123 ? Errors.RecordExpressionHashIncorrectStartSyntaxType : Errors.TupleExpressionHashIncorrectStartSyntaxType, {
          at: this.state.curPosition()
        });
      }
      this.state.pos += 2;
      if (next === 123) {
        this.finishToken(7);
      } else {
        this.finishToken(1);
      }
    } else if (isIdentifierStart(next)) {
      ++this.state.pos;
      this.finishToken(136, this.readWord1(next));
    } else if (next === 92) {
      ++this.state.pos;
      this.finishToken(136, this.readWord1());
    } else {
      this.finishOp(27, 1);
    }
  }
  readToken_dot() {
    const next = this.input.charCodeAt(this.state.pos + 1);
    if (next >= 48 && next <= 57) {
      this.readNumber(true);
      return;
    }
    if (next === 46 && this.input.charCodeAt(this.state.pos + 2) === 46) {
      this.state.pos += 3;
      this.finishToken(21);
    } else {
      ++this.state.pos;
      this.finishToken(16);
    }
  }
  readToken_slash() {
    const next = this.input.charCodeAt(this.state.pos + 1);
    if (next === 61) {
      this.finishOp(31, 2);
    } else {
      this.finishOp(56, 1);
    }
  }
  readToken_interpreter() {
    if (this.state.pos !== 0 || this.length < 2) return false;
    let ch = this.input.charCodeAt(this.state.pos + 1);
    if (ch !== 33) return false;
    const start = this.state.pos;
    this.state.pos += 1;
    while (!isNewLine(ch) && ++this.state.pos < this.length) {
      ch = this.input.charCodeAt(this.state.pos);
    }
    const value = this.input.slice(start + 2, this.state.pos);
    this.finishToken(28, value);
    return true;
  }
  readToken_mult_modulo(code) {
    let type = code === 42 ? 55 : 54;
    let width = 1;
    let next = this.input.charCodeAt(this.state.pos + 1);

    if (code === 42 && next === 42) {
      width++;
      next = this.input.charCodeAt(this.state.pos + 2);
      type = 57;
    }

    if (next === 61 && !this.state.inType) {
      width++;
      type = code === 37 ? 33 : 30;
    }
    this.finishOp(type, width);
  }
  readToken_pipe_amp(code) {
    const next = this.input.charCodeAt(this.state.pos + 1);
    if (next === code) {
      if (this.input.charCodeAt(this.state.pos + 2) === 61) {
        this.finishOp(30, 3);
      } else {
        this.finishOp(code === 124 ? 41 : 42, 2);
      }
      return;
    }
    if (code === 124) {
      if (next === 62) {
        this.finishOp(39, 2);
        return;
      }
      if (this.hasPlugin("recordAndTuple") && next === 125) {
        if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
          throw this.raise(Errors.RecordExpressionBarIncorrectEndSyntaxType, {
            at: this.state.curPosition()
          });
        }
        this.state.pos += 2;
        this.finishToken(9);
        return;
      }

      if (this.hasPlugin("recordAndTuple") && next === 93) {
        if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
          throw this.raise(Errors.TupleExpressionBarIncorrectEndSyntaxType, {
            at: this.state.curPosition()
          });
        }
        this.state.pos += 2;
        this.finishToken(4);
        return;
      }
    }
    if (next === 61) {
      this.finishOp(30, 2);
      return;
    }
    this.finishOp(code === 124 ? 43 : 45, 1);
  }
  readToken_caret() {
    const next = this.input.charCodeAt(this.state.pos + 1);

    if (next === 61 && !this.state.inType) {
      this.finishOp(32, 2);
    }
    else if (next === 94 &&
    this.hasPlugin(["pipelineOperator", {
      proposal: "hack",
      topicToken: "^^"
    }])) {
      this.finishOp(37, 2);

      const lookaheadCh = this.input.codePointAt(this.state.pos);
      if (lookaheadCh === 94) {
        throw this.unexpected();
      }
    }
    else {
      this.finishOp(44, 1);
    }
  }
  readToken_atSign() {
    const next = this.input.charCodeAt(this.state.pos + 1);

    if (next === 64 && this.hasPlugin(["pipelineOperator", {
      proposal: "hack",
      topicToken: "@@"
    }])) {
      this.finishOp(38, 2);
    }
    else {
      this.finishOp(26, 1);
    }
  }
  readToken_plus_min(code) {
    const next = this.input.charCodeAt(this.state.pos + 1);
    if (next === code) {
      this.finishOp(34, 2);
      return;
    }
    if (next === 61) {
      this.finishOp(30, 2);
    } else {
      this.finishOp(53, 1);
    }
  }
  readToken_lt() {
    const {
      pos
    } = this.state;
    const next = this.input.charCodeAt(pos + 1);
    if (next === 60) {
      if (this.input.charCodeAt(pos + 2) === 61) {
        this.finishOp(30, 3);
        return;
      }
      this.finishOp(51, 2);
      return;
    }
    if (next === 61) {
      this.finishOp(49, 2);
      return;
    }
    this.finishOp(47, 1);
  }
  readToken_gt() {
    const {
      pos
    } = this.state;
    const next = this.input.charCodeAt(pos + 1);
    if (next === 62) {
      const size = this.input.charCodeAt(pos + 2) === 62 ? 3 : 2;
      if (this.input.charCodeAt(pos + size) === 61) {
        this.finishOp(30, size + 1);
        return;
      }
      this.finishOp(52, size);
      return;
    }
    if (next === 61) {
      this.finishOp(49, 2);
      return;
    }
    this.finishOp(48, 1);
  }
  readToken_eq_excl(code) {
    const next = this.input.charCodeAt(this.state.pos + 1);
    if (next === 61) {
      this.finishOp(46, this.input.charCodeAt(this.state.pos + 2) === 61 ? 3 : 2);
      return;
    }
    if (code === 61 && next === 62) {
      this.state.pos += 2;
      this.finishToken(19);
      return;
    }
    this.finishOp(code === 61 ? 29 : 35, 1);
  }
  readToken_question() {
    const next = this.input.charCodeAt(this.state.pos + 1);
    const next2 = this.input.charCodeAt(this.state.pos + 2);
    if (next === 63) {
      if (next2 === 61) {
        this.finishOp(30, 3);
      } else {
        this.finishOp(40, 2);
      }
    } else if (next === 46 && !(next2 >= 48 && next2 <= 57)) {
      this.state.pos += 2;
      this.finishToken(18);
    } else {
      ++this.state.pos;
      this.finishToken(17);
    }
  }
  getTokenFromCode(code) {
    switch (code) {

      case 46:
        this.readToken_dot();
        return;

      case 40:
        ++this.state.pos;
        this.finishToken(10);
        return;
      case 41:
        ++this.state.pos;
        this.finishToken(11);
        return;
      case 59:
        ++this.state.pos;
        this.finishToken(13);
        return;
      case 44:
        ++this.state.pos;
        this.finishToken(12);
        return;
      case 91:
        if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) {
          if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
            throw this.raise(Errors.TupleExpressionBarIncorrectStartSyntaxType, {
              at: this.state.curPosition()
            });
          }

          this.state.pos += 2;
          this.finishToken(2);
        } else {
          ++this.state.pos;
          this.finishToken(0);
        }
        return;
      case 93:
        ++this.state.pos;
        this.finishToken(3);
        return;
      case 123:
        if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) {
          if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
            throw this.raise(Errors.RecordExpressionBarIncorrectStartSyntaxType, {
              at: this.state.curPosition()
            });
          }

          this.state.pos += 2;
          this.finishToken(6);
        } else {
          ++this.state.pos;
          this.finishToken(5);
        }
        return;
      case 125:
        ++this.state.pos;
        this.finishToken(8);
        return;
      case 58:
        if (this.hasPlugin("functionBind") && this.input.charCodeAt(this.state.pos + 1) === 58) {
          this.finishOp(15, 2);
        } else {
          ++this.state.pos;
          this.finishToken(14);
        }
        return;
      case 63:
        this.readToken_question();
        return;
      case 96:
        this.readTemplateToken();
        return;
      case 48:
        {
          const next = this.input.charCodeAt(this.state.pos + 1);
          if (next === 120 || next === 88) {
            this.readRadixNumber(16);
            return;
          }
          if (next === 111 || next === 79) {
            this.readRadixNumber(8);
            return;
          }
          if (next === 98 || next === 66) {
            this.readRadixNumber(2);
            return;
          }
        }
      case 49:
      case 50:
      case 51:
      case 52:
      case 53:
      case 54:
      case 55:
      case 56:
      case 57:
        this.readNumber(false);
        return;

      case 34:
      case 39:
        this.readString(code);
        return;

      case 47:
        this.readToken_slash();
        return;
      case 37:
      case 42:
        this.readToken_mult_modulo(code);
        return;
      case 124:
      case 38:
        this.readToken_pipe_amp(code);
        return;
      case 94:
        this.readToken_caret();
        return;
      case 43:
      case 45:
        this.readToken_plus_min(code);
        return;
      case 60:
        this.readToken_lt();
        return;
      case 62:
        this.readToken_gt();
        return;
      case 61:
      case 33:
        this.readToken_eq_excl(code);
        return;
      case 126:
        this.finishOp(36, 1);
        return;
      case 64:
        this.readToken_atSign();
        return;
      case 35:
        this.readToken_numberSign();
        return;
      case 92:
        this.readWord();
        return;
      default:
        if (isIdentifierStart(code)) {
          this.readWord(code);
          return;
        }
    }
    throw this.raise(Errors.InvalidOrUnexpectedToken, {
      at: this.state.curPosition(),
      unexpected: String.fromCodePoint(code)
    });
  }
  finishOp(type, size) {
    const str = this.input.slice(this.state.pos, this.state.pos + size);
    this.state.pos += size;
    this.finishToken(type, str);
  }
  readRegexp() {
    const startLoc = this.state.startLoc;
    const start = this.state.start + 1;
    let escaped, inClass;
    let {
      pos
    } = this.state;
    for (;; ++pos) {
      if (pos >= this.length) {
        throw this.raise(Errors.UnterminatedRegExp, {
          at: createPositionWithColumnOffset(startLoc, 1)
        });
      }
      const ch = this.input.charCodeAt(pos);
      if (isNewLine(ch)) {
        throw this.raise(Errors.UnterminatedRegExp, {
          at: createPositionWithColumnOffset(startLoc, 1)
        });
      }
      if (escaped) {
        escaped = false;
      } else {
        if (ch === 91) {
          inClass = true;
        } else if (ch === 93 && inClass) {
          inClass = false;
        } else if (ch === 47 && !inClass) {
          break;
        }
        escaped = ch === 92;
      }
    }
    const content = this.input.slice(start, pos);
    ++pos;
    let mods = "";
    const nextPos = () =>
    createPositionWithColumnOffset(startLoc, pos + 2 - start);
    while (pos < this.length) {
      const cp = this.codePointAtPos(pos);
      const char = String.fromCharCode(cp);

      if (VALID_REGEX_FLAGS.has(cp)) {
        if (cp === 118) {
          this.expectPlugin("regexpUnicodeSets", nextPos());
          if (mods.includes("u")) {
            this.raise(Errors.IncompatibleRegExpUVFlags, {
              at: nextPos()
            });
          }
        } else if (cp === 117) {
          if (mods.includes("v")) {
            this.raise(Errors.IncompatibleRegExpUVFlags, {
              at: nextPos()
            });
          }
        }
        if (mods.includes(char)) {
          this.raise(Errors.DuplicateRegExpFlags, {
            at: nextPos()
          });
        }
      } else if (isIdentifierChar(cp) || cp === 92) {
        this.raise(Errors.MalformedRegExpFlags, {
          at: nextPos()
        });
      } else {
        break;
      }
      ++pos;
      mods += char;
    }
    this.state.pos = pos;
    this.finishToken(135, {
      pattern: content,
      flags: mods
    });
  }

  readInt(radix, len, forceLen = false, allowNumSeparator = true) {
    const {
      n,
      pos
    } = readInt(this.input, this.state.pos, this.state.lineStart, this.state.curLine, radix, len, forceLen, allowNumSeparator, this.errorHandlers_readInt, false);
    this.state.pos = pos;
    return n;
  }
  readRadixNumber(radix) {
    const startLoc = this.state.curPosition();
    let isBigInt = false;
    this.state.pos += 2;
    const val = this.readInt(radix);
    if (val == null) {
      this.raise(Errors.InvalidDigit, {
        at: createPositionWithColumnOffset(startLoc, 2),
        radix
      });
    }
    const next = this.input.charCodeAt(this.state.pos);
    if (next === 110) {
      ++this.state.pos;
      isBigInt = true;
    } else if (next === 109) {
      throw this.raise(Errors.InvalidDecimal, {
        at: startLoc
      });
    }
    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {
      throw this.raise(Errors.NumberIdentifier, {
        at: this.state.curPosition()
      });
    }
    if (isBigInt) {
      const str = this.input.slice(startLoc.index, this.state.pos).replace(/[_n]/g, "");
      this.finishToken(133, str);
      return;
    }
    this.finishToken(132, val);
  }

  readNumber(startsWithDot) {
    const start = this.state.pos;
    const startLoc = this.state.curPosition();
    let isFloat = false;
    let isBigInt = false;
    let isDecimal = false;
    let hasExponent = false;
    let isOctal = false;
    if (!startsWithDot && this.readInt(10) === null) {
      this.raise(Errors.InvalidNumber, {
        at: this.state.curPosition()
      });
    }
    const hasLeadingZero = this.state.pos - start >= 2 && this.input.charCodeAt(start) === 48;
    if (hasLeadingZero) {
      const integer = this.input.slice(start, this.state.pos);
      this.recordStrictModeErrors(Errors.StrictOctalLiteral, {
        at: startLoc
      });
      if (!this.state.strict) {
        const underscorePos = integer.indexOf("_");
        if (underscorePos > 0) {
          this.raise(Errors.ZeroDigitNumericSeparator, {
            at: createPositionWithColumnOffset(startLoc, underscorePos)
          });
        }
      }
      isOctal = hasLeadingZero && !/[89]/.test(integer);
    }
    let next = this.input.charCodeAt(this.state.pos);
    if (next === 46 && !isOctal) {
      ++this.state.pos;
      this.readInt(10);
      isFloat = true;
      next = this.input.charCodeAt(this.state.pos);
    }
    if ((next === 69 || next === 101) && !isOctal) {
      next = this.input.charCodeAt(++this.state.pos);
      if (next === 43 || next === 45) {
        ++this.state.pos;
      }
      if (this.readInt(10) === null) {
        this.raise(Errors.InvalidOrMissingExponent, {
          at: startLoc
        });
      }
      isFloat = true;
      hasExponent = true;
      next = this.input.charCodeAt(this.state.pos);
    }
    if (next === 110) {
      if (isFloat || hasLeadingZero) {
        this.raise(Errors.InvalidBigIntLiteral, {
          at: startLoc
        });
      }
      ++this.state.pos;
      isBigInt = true;
    }
    if (next === 109) {
      this.expectPlugin("decimal", this.state.curPosition());
      if (hasExponent || hasLeadingZero) {
        this.raise(Errors.InvalidDecimal, {
          at: startLoc
        });
      }
      ++this.state.pos;
      isDecimal = true;
    }
    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {
      throw this.raise(Errors.NumberIdentifier, {
        at: this.state.curPosition()
      });
    }

    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, "");
    if (isBigInt) {
      this.finishToken(133, str);
      return;
    }
    if (isDecimal) {
      this.finishToken(134, str);
      return;
    }
    const val = isOctal ? parseInt(str, 8) : parseFloat(str);
    this.finishToken(132, val);
  }

  readCodePoint(throwOnInvalid) {
    const {
      code,
      pos
    } = readCodePoint(this.input, this.state.pos, this.state.lineStart, this.state.curLine, throwOnInvalid, this.errorHandlers_readCodePoint);
    this.state.pos = pos;
    return code;
  }
  readString(quote) {
    const {
      str,
      pos,
      curLine,
      lineStart
    } = readStringContents(quote === 34 ? "double" : "single", this.input, this.state.pos + 1,
    this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_string);
    this.state.pos = pos + 1;
    this.state.lineStart = lineStart;
    this.state.curLine = curLine;
    this.finishToken(131, str);
  }

  readTemplateContinuation() {
    if (!this.match(8)) {
      this.unexpected(null, 8);
    }
    this.state.pos--;
    this.readTemplateToken();
  }

  readTemplateToken() {
    const opening = this.input[this.state.pos];
    const {
      str,
      firstInvalidLoc,
      pos,
      curLine,
      lineStart
    } = readStringContents("template", this.input, this.state.pos + 1,
    this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_template);
    this.state.pos = pos + 1;
    this.state.lineStart = lineStart;
    this.state.curLine = curLine;
    if (firstInvalidLoc) {
      this.state.firstInvalidTemplateEscapePos = new Position(firstInvalidLoc.curLine, firstInvalidLoc.pos - firstInvalidLoc.lineStart, firstInvalidLoc.pos);
    }
    if (this.input.codePointAt(pos) === 96) {
      this.finishToken(24, firstInvalidLoc ? null : opening + str + "`");
    } else {
      this.state.pos++;
      this.finishToken(25, firstInvalidLoc ? null : opening + str + "${");
    }
  }
  recordStrictModeErrors(toParseError, {
    at
  }) {
    const index = at.index;
    if (this.state.strict && !this.state.strictErrors.has(index)) {
      this.raise(toParseError, {
        at
      });
    } else {
      this.state.strictErrors.set(index, [toParseError, at]);
    }
  }

  readWord1(firstCode) {
    this.state.containsEsc = false;
    let word = "";
    const start = this.state.pos;
    let chunkStart = this.state.pos;
    if (firstCode !== undefined) {
      this.state.pos += firstCode <= 0xffff ? 1 : 2;
    }
    while (this.state.pos < this.length) {
      const ch = this.codePointAtPos(this.state.pos);
      if (isIdentifierChar(ch)) {
        this.state.pos += ch <= 0xffff ? 1 : 2;
      } else if (ch === 92) {
        this.state.containsEsc = true;
        word += this.input.slice(chunkStart, this.state.pos);
        const escStart = this.state.curPosition();
        const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar;
        if (this.input.charCodeAt(++this.state.pos) !== 117) {
          this.raise(Errors.MissingUnicodeEscape, {
            at: this.state.curPosition()
          });
          chunkStart = this.state.pos - 1;
          continue;
        }
        ++this.state.pos;
        const esc = this.readCodePoint(true);
        if (esc !== null) {
          if (!identifierCheck(esc)) {
            this.raise(Errors.EscapedCharNotAnIdentifier, {
              at: escStart
            });
          }
          word += String.fromCodePoint(esc);
        }
        chunkStart = this.state.pos;
      } else {
        break;
      }
    }
    return word + this.input.slice(chunkStart, this.state.pos);
  }

  readWord(firstCode) {
    const word = this.readWord1(firstCode);
    const type = keywords$1.get(word);
    if (type !== undefined) {
      this.finishToken(type, tokenLabelName(type));
    } else {
      this.finishToken(130, word);
    }
  }
  checkKeywordEscapes() {
    const {
      type
    } = this.state;
    if (tokenIsKeyword(type) && this.state.containsEsc) {
      this.raise(Errors.InvalidEscapedReservedWord, {
        at: this.state.startLoc,
        reservedWord: tokenLabelName(type)
      });
    }
  }

  raise(toParseError, raiseProperties) {
    const {
        at
      } = raiseProperties,
      details = _objectWithoutPropertiesLoose(raiseProperties, _excluded);
    const loc = at instanceof Position ? at : at.loc.start;
    const error = toParseError({
      loc,
      details
    });
    if (!this.options.errorRecovery) throw error;
    if (!this.isLookahead) this.state.errors.push(error);
    return error;
  }

  raiseOverwrite(toParseError, raiseProperties) {
    const {
        at
      } = raiseProperties,
      details = _objectWithoutPropertiesLoose(raiseProperties, _excluded2);
    const loc = at instanceof Position ? at : at.loc.start;
    const pos = loc.index;
    const errors = this.state.errors;
    for (let i = errors.length - 1; i >= 0; i--) {
      const error = errors[i];
      if (error.loc.index === pos) {
        return errors[i] = toParseError({
          loc,
          details
        });
      }
      if (error.loc.index < pos) break;
    }
    return this.raise(toParseError, raiseProperties);
  }

  updateContext(prevType) {}

  unexpected(loc, type) {
    throw this.raise(Errors.UnexpectedToken, {
      expected: type ? tokenLabelName(type) : null,
      at: loc != null ? loc : this.state.startLoc
    });
  }
  expectPlugin(pluginName, loc) {
    if (this.hasPlugin(pluginName)) {
      return true;
    }
    throw this.raise(Errors.MissingPlugin, {
      at: loc != null ? loc : this.state.startLoc,
      missingPlugin: [pluginName]
    });
  }
  expectOnePlugin(pluginNames) {
    if (!pluginNames.some(name => this.hasPlugin(name))) {
      throw this.raise(Errors.MissingOneOfPlugins, {
        at: this.state.startLoc,
        missingPlugin: pluginNames
      });
    }
  }
  errorBuilder(error) {
    return (pos, lineStart, curLine) => {
      this.raise(error, {
        at: buildPosition(pos, lineStart, curLine)
      });
    };
  }
}

class ClassScope {
  constructor() {
    this.privateNames = new Set();
    this.loneAccessors = new Map();
    this.undefinedPrivateNames = new Map();
  }
}
class ClassScopeHandler {
  constructor(parser) {
    this.parser = void 0;
    this.stack = [];
    this.undefinedPrivateNames = new Map();
    this.parser = parser;
  }
  current() {
    return this.stack[this.stack.length - 1];
  }
  enter() {
    this.stack.push(new ClassScope());
  }
  exit() {
    const oldClassScope = this.stack.pop();

    const current = this.current();

    for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {
      if (current) {
        if (!current.undefinedPrivateNames.has(name)) {
          current.undefinedPrivateNames.set(name, loc);
        }
      } else {
        this.parser.raise(Errors.InvalidPrivateFieldResolution, {
          at: loc,
          identifierName: name
        });
      }
    }
  }
  declarePrivateName(name, elementType, loc) {
    const {
      privateNames,
      loneAccessors,
      undefinedPrivateNames
    } = this.current();
    let redefined = privateNames.has(name);
    if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {
      const accessor = redefined && loneAccessors.get(name);
      if (accessor) {
        const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;
        const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;
        const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;
        const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;

        redefined = oldKind === newKind || oldStatic !== newStatic;
        if (!redefined) loneAccessors.delete(name);
      } else if (!redefined) {
        loneAccessors.set(name, elementType);
      }
    }
    if (redefined) {
      this.parser.raise(Errors.PrivateNameRedeclaration, {
        at: loc,
        identifierName: name
      });
    }
    privateNames.add(name);
    undefinedPrivateNames.delete(name);
  }
  usePrivateName(name, loc) {
    let classScope;
    for (classScope of this.stack) {
      if (classScope.privateNames.has(name)) return;
    }
    if (classScope) {
      classScope.undefinedPrivateNames.set(name, loc);
    } else {
      this.parser.raise(Errors.InvalidPrivateFieldResolution, {
        at: loc,
        identifierName: name
      });
    }
  }
}

const kExpression = 0,
  kMaybeArrowParameterDeclaration = 1,
  kMaybeAsyncArrowParameterDeclaration = 2,
  kParameterDeclaration = 3;
class ExpressionScope {
  constructor(type = kExpression) {
    this.type = void 0;
    this.type = type;
  }
  canBeArrowParameterDeclaration() {
    return this.type === kMaybeAsyncArrowParameterDeclaration || this.type === kMaybeArrowParameterDeclaration;
  }
  isCertainlyParameterDeclaration() {
    return this.type === kParameterDeclaration;
  }
}
class ArrowHeadParsingScope extends ExpressionScope {
  constructor(type) {
    super(type);
    this.declarationErrors = new Map();
  }
  recordDeclarationError(ParsingErrorClass, {
    at
  }) {
    const index = at.index;
    this.declarationErrors.set(index, [ParsingErrorClass, at]);
  }
  clearDeclarationError(index) {
    this.declarationErrors.delete(index);
  }
  iterateErrors(iterator) {
    this.declarationErrors.forEach(iterator);
  }
}
class ExpressionScopeHandler {
  constructor(parser) {
    this.parser = void 0;
    this.stack = [new ExpressionScope()];
    this.parser = parser;
  }
  enter(scope) {
    this.stack.push(scope);
  }
  exit() {
    this.stack.pop();
  }

  recordParameterInitializerError(toParseError, {
    at: node
  }) {
    const origin = {
      at: node.loc.start
    };
    const {
      stack
    } = this;
    let i = stack.length - 1;
    let scope = stack[i];
    while (!scope.isCertainlyParameterDeclaration()) {
      if (scope.canBeArrowParameterDeclaration()) {
        scope.recordDeclarationError(toParseError, origin);
      } else {
        return;
      }
      scope = stack[--i];
    }
    this.parser.raise(toParseError, origin);
  }

  recordArrowParameterBindingError(error, {
    at: node
  }) {
    const {
      stack
    } = this;
    const scope = stack[stack.length - 1];
    const origin = {
      at: node.loc.start
    };
    if (scope.isCertainlyParameterDeclaration()) {
      this.parser.raise(error, origin);
    } else if (scope.canBeArrowParameterDeclaration()) {
      scope.recordDeclarationError(error, origin);
    } else {
      return;
    }
  }

  recordAsyncArrowParametersError({
    at
  }) {
    const {
      stack
    } = this;
    let i = stack.length - 1;
    let scope = stack[i];
    while (scope.canBeArrowParameterDeclaration()) {
      if (scope.type === kMaybeAsyncArrowParameterDeclaration) {
        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, {
          at
        });
      }
      scope = stack[--i];
    }
  }
  validateAsPattern() {
    const {
      stack
    } = this;
    const currentScope = stack[stack.length - 1];
    if (!currentScope.canBeArrowParameterDeclaration()) return;
    currentScope.iterateErrors(([toParseError, loc]) => {
      this.parser.raise(toParseError, {
        at: loc
      });
      let i = stack.length - 2;
      let scope = stack[i];
      while (scope.canBeArrowParameterDeclaration()) {
        scope.clearDeclarationError(loc.index);
        scope = stack[--i];
      }
    });
  }
}
function newParameterDeclarationScope() {
  return new ExpressionScope(kParameterDeclaration);
}
function newArrowHeadScope() {
  return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);
}
function newAsyncArrowScope() {
  return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);
}
function newExpressionScope() {
  return new ExpressionScope();
}

const
  PARAM = 0b0000,
  PARAM_YIELD = 0b0001,
  PARAM_AWAIT = 0b0010,
  PARAM_RETURN = 0b0100,
  PARAM_IN = 0b1000;

class ProductionParameterHandler {
  constructor() {
    this.stacks = [];
  }
  enter(flags) {
    this.stacks.push(flags);
  }
  exit() {
    this.stacks.pop();
  }
  currentFlags() {
    return this.stacks[this.stacks.length - 1];
  }
  get hasAwait() {
    return (this.currentFlags() & PARAM_AWAIT) > 0;
  }
  get hasYield() {
    return (this.currentFlags() & PARAM_YIELD) > 0;
  }
  get hasReturn() {
    return (this.currentFlags() & PARAM_RETURN) > 0;
  }
  get hasIn() {
    return (this.currentFlags() & PARAM_IN) > 0;
  }
}
function functionFlags(isAsync, isGenerator) {
  return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);
}

class UtilParser extends Tokenizer {

  addExtra(node, key, value, enumerable = true) {
    if (!node) return;
    const extra = node.extra = node.extra || {};
    if (enumerable) {
      extra[key] = value;
    } else {
      Object.defineProperty(extra, key, {
        enumerable,
        value
      });
    }
  }

  isContextual(token) {
    return this.state.type === token && !this.state.containsEsc;
  }
  isUnparsedContextual(nameStart, name) {
    const nameEnd = nameStart + name.length;
    if (this.input.slice(nameStart, nameEnd) === name) {
      const nextCh = this.input.charCodeAt(nameEnd);
      return !(isIdentifierChar(nextCh) ||
      (nextCh & 0xfc00) === 0xd800);
    }
    return false;
  }
  isLookaheadContextual(name) {
    const next = this.nextTokenStart();
    return this.isUnparsedContextual(next, name);
  }

  eatContextual(token) {
    if (this.isContextual(token)) {
      this.next();
      return true;
    }
    return false;
  }

  expectContextual(token, toParseError) {
    if (!this.eatContextual(token)) {
      if (toParseError != null) {
        throw this.raise(toParseError, {
          at: this.state.startLoc
        });
      }
      throw this.unexpected(null, token);
    }
  }

  canInsertSemicolon() {
    return this.match(137) || this.match(8) || this.hasPrecedingLineBreak();
  }
  hasPrecedingLineBreak() {
    return lineBreak.test(this.input.slice(this.state.lastTokEndLoc.index, this.state.start));
  }
  hasFollowingLineBreak() {
    skipWhiteSpaceToLineBreak.lastIndex = this.state.end;
    return skipWhiteSpaceToLineBreak.test(this.input);
  }
  isLineTerminator() {
    return this.eat(13) || this.canInsertSemicolon();
  }

  semicolon(allowAsi = true) {
    if (allowAsi ? this.isLineTerminator() : this.eat(13)) return;
    this.raise(Errors.MissingSemicolon, {
      at: this.state.lastTokEndLoc
    });
  }

  expect(type, loc) {
    this.eat(type) || this.unexpected(loc, type);
  }

  tryParse(fn, oldState = this.state.clone()) {
    const abortSignal = {
      node: null
    };
    try {
      const node = fn((node = null) => {
        abortSignal.node = node;
        throw abortSignal;
      });
      if (this.state.errors.length > oldState.errors.length) {
        const failState = this.state;
        this.state = oldState;
        this.state.tokensLength = failState.tokensLength;
        return {
          node,
          error: failState.errors[oldState.errors.length],
          thrown: false,
          aborted: false,
          failState
        };
      }
      return {
        node,
        error: null,
        thrown: false,
        aborted: false,
        failState: null
      };
    } catch (error) {
      const failState = this.state;
      this.state = oldState;
      if (error instanceof SyntaxError) {
        return {
          node: null,
          error,
          thrown: true,
          aborted: false,
          failState
        };
      }
      if (error === abortSignal) {
        return {
          node: abortSignal.node,
          error: null,
          thrown: false,
          aborted: true,
          failState
        };
      }
      throw error;
    }
  }
  checkExpressionErrors(refExpressionErrors, andThrow) {
    if (!refExpressionErrors) return false;
    const {
      shorthandAssignLoc,
      doubleProtoLoc,
      privateKeyLoc,
      optionalParametersLoc
    } = refExpressionErrors;
    const hasErrors = !!shorthandAssignLoc || !!doubleProtoLoc || !!optionalParametersLoc || !!privateKeyLoc;
    if (!andThrow) {
      return hasErrors;
    }
    if (shorthandAssignLoc != null) {
      this.raise(Errors.InvalidCoverInitializedName, {
        at: shorthandAssignLoc
      });
    }
    if (doubleProtoLoc != null) {
      this.raise(Errors.DuplicateProto, {
        at: doubleProtoLoc
      });
    }
    if (privateKeyLoc != null) {
      this.raise(Errors.UnexpectedPrivateField, {
        at: privateKeyLoc
      });
    }
    if (optionalParametersLoc != null) {
      this.unexpected(optionalParametersLoc);
    }
  }

  isLiteralPropertyName() {
    return tokenIsLiteralPropertyName(this.state.type);
  }

  isPrivateName(node) {
    return node.type === "PrivateName";
  }

  getPrivateNameSV(node) {
    return node.id.name;
  }

  hasPropertyAsPrivateName(node) {
    return (node.type === "MemberExpression" || node.type === "OptionalMemberExpression") && this.isPrivateName(node.property);
  }
  isOptionalChain(node) {
    return node.type === "OptionalMemberExpression" || node.type === "OptionalCallExpression";
  }
  isObjectProperty(node) {
    return node.type === "ObjectProperty";
  }
  isObjectMethod(node) {
    return node.type === "ObjectMethod";
  }
  initializeScopes(inModule = this.options.sourceType === "module") {
    const oldLabels = this.state.labels;
    this.state.labels = [];
    const oldExportedIdentifiers = this.exportedIdentifiers;
    this.exportedIdentifiers = new Set();

    const oldInModule = this.inModule;
    this.inModule = inModule;
    const oldScope = this.scope;
    const ScopeHandler = this.getScopeHandler();
    this.scope = new ScopeHandler(this, inModule);
    const oldProdParam = this.prodParam;
    this.prodParam = new ProductionParameterHandler();
    const oldClassScope = this.classScope;
    this.classScope = new ClassScopeHandler(this);
    const oldExpressionScope = this.expressionScope;
    this.expressionScope = new ExpressionScopeHandler(this);
    return () => {
      this.state.labels = oldLabels;
      this.exportedIdentifiers = oldExportedIdentifiers;

      this.inModule = oldInModule;
      this.scope = oldScope;
      this.prodParam = oldProdParam;
      this.classScope = oldClassScope;
      this.expressionScope = oldExpressionScope;
    };
  }
  enterInitialScopes() {
    let paramFlags = PARAM;
    if (this.inModule) {
      paramFlags |= PARAM_AWAIT;
    }
    this.scope.enter(SCOPE_PROGRAM);
    this.prodParam.enter(paramFlags);
  }
  checkDestructuringPrivate(refExpressionErrors) {
    const {
      privateKeyLoc
    } = refExpressionErrors;
    if (privateKeyLoc !== null) {
      this.expectPlugin("destructuringPrivate", privateKeyLoc);
    }
  }
}

class ExpressionErrors {
  constructor() {
    this.shorthandAssignLoc = null;
    this.doubleProtoLoc = null;
    this.privateKeyLoc = null;
    this.optionalParametersLoc = null;
  }
}

class Node {
  constructor(parser, pos, loc) {
    this.type = "";
    this.start = pos;
    this.end = 0;
    this.loc = new SourceLocation(loc);
    if (parser != null && parser.options.ranges) this.range = [pos, 0];
    if (parser != null && parser.filename) this.loc.filename = parser.filename;
  }
}
const NodePrototype = Node.prototype;
{
  NodePrototype.__clone = function () {
    const newNode = new Node(undefined, this.start, this.loc.start);
    const keys = Object.keys(this);
    for (let i = 0, length = keys.length; i < length; i++) {
      const key = keys[i];
      if (key !== "leadingComments" && key !== "trailingComments" && key !== "innerComments") {
        newNode[key] = this[key];
      }
    }
    return newNode;
  };
}
function clonePlaceholder(node) {
  return cloneIdentifier(node);
}
function cloneIdentifier(node) {
  const {
    type,
    start,
    end,
    loc,
    range,
    extra,
    name
  } = node;
  const cloned = Object.create(NodePrototype);
  cloned.type = type;
  cloned.start = start;
  cloned.end = end;
  cloned.loc = loc;
  cloned.range = range;
  cloned.extra = extra;
  cloned.name = name;
  if (type === "Placeholder") {
    cloned.expectedNode = node.expectedNode;
  }
  return cloned;
}
function cloneStringLiteral(node) {
  const {
    type,
    start,
    end,
    loc,
    range,
    extra
  } = node;
  if (type === "Placeholder") {
    return clonePlaceholder(node);
  }
  const cloned = Object.create(NodePrototype);
  cloned.type = type;
  cloned.start = start;
  cloned.end = end;
  cloned.loc = loc;
  cloned.range = range;
  if (node.raw !== undefined) {
    cloned.raw = node.raw;
  } else {
    cloned.extra = extra;
  }
  cloned.value = node.value;
  return cloned;
}
class NodeUtils extends UtilParser {
  startNode() {
    return new Node(this, this.state.start, this.state.startLoc);
  }
  startNodeAt(loc) {
    return new Node(this, loc.index, loc);
  }

  startNodeAtNode(type) {
    return this.startNodeAt(type.loc.start);
  }

  finishNode(node, type) {
    return this.finishNodeAt(node, type, this.state.lastTokEndLoc);
  }

  finishNodeAt(node, type, endLoc) {
    node.type = type;
    node.end = endLoc.index;
    node.loc.end = endLoc;
    if (this.options.ranges) node.range[1] = endLoc.index;
    if (this.options.attachComment) this.processComment(node);
    return node;
  }
  resetStartLocation(node, startLoc) {
    node.start = startLoc.index;
    node.loc.start = startLoc;
    if (this.options.ranges) node.range[0] = startLoc.index;
  }
  resetEndLocation(node, endLoc = this.state.lastTokEndLoc) {
    node.end = endLoc.index;
    node.loc.end = endLoc;
    if (this.options.ranges) node.range[1] = endLoc.index;
  }

  resetStartLocationFromNode(node, locationNode) {
    this.resetStartLocation(node, locationNode.loc.start);
  }
}

const reservedTypes = new Set(["_", "any", "bool", "boolean", "empty", "extends", "false", "interface", "mixed", "null", "number", "static", "string", "true", "typeof", "void"]);

const FlowErrors = ParseErrorEnum`flow`({
  AmbiguousConditionalArrow: "Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.",
  AmbiguousDeclareModuleKind: "Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.",
  AssignReservedType: ({
    reservedType
  }) => `Cannot overwrite reserved type ${reservedType}.`,
  DeclareClassElement: "The `declare` modifier can only appear on class fields.",
  DeclareClassFieldInitializer: "Initializers are not allowed in fields with the `declare` modifier.",
  DuplicateDeclareModuleExports: "Duplicate `declare module.exports` statement.",
  EnumBooleanMemberNotInitialized: ({
    memberName,
    enumName
  }) => `Boolean enum members need to be initialized. Use either \`${memberName} = true,\` or \`${memberName} = false,\` in enum \`${enumName}\`.`,
  EnumDuplicateMemberName: ({
    memberName,
    enumName
  }) => `Enum member names need to be unique, but the name \`${memberName}\` has already been used before in enum \`${enumName}\`.`,
  EnumInconsistentMemberValues: ({
    enumName
  }) => `Enum \`${enumName}\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,
  EnumInvalidExplicitType: ({
    invalidEnumType,
    enumName
  }) => `Enum type \`${invalidEnumType}\` is not valid. Use one of \`boolean\`, \`number\`, \`string\`, or \`symbol\` in enum \`${enumName}\`.`,
  EnumInvalidExplicitTypeUnknownSupplied: ({
    enumName
  }) => `Supplied enum type is not valid. Use one of \`boolean\`, \`number\`, \`string\`, or \`symbol\` in enum \`${enumName}\`.`,
  EnumInvalidMemberInitializerPrimaryType: ({
    enumName,
    memberName,
    explicitType
  }) => `Enum \`${enumName}\` has type \`${explicitType}\`, so the initializer of \`${memberName}\` needs to be a ${explicitType} literal.`,
  EnumInvalidMemberInitializerSymbolType: ({
    enumName,
    memberName
  }) => `Symbol enum members cannot be initialized. Use \`${memberName},\` in enum \`${enumName}\`.`,
  EnumInvalidMemberInitializerUnknownType: ({
    enumName,
    memberName
  }) => `The enum member initializer for \`${memberName}\` needs to be a literal (either a boolean, number, or string) in enum \`${enumName}\`.`,
  EnumInvalidMemberName: ({
    enumName,
    memberName,
    suggestion
  }) => `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \`${memberName}\`, consider using \`${suggestion}\`, in enum \`${enumName}\`.`,
  EnumNumberMemberNotInitialized: ({
    enumName,
    memberName
  }) => `Number enum members need to be initialized, e.g. \`${memberName} = 1\` in enum \`${enumName}\`.`,
  EnumStringMemberInconsistentlyInitailized: ({
    enumName
  }) => `String enum members need to consistently either all use initializers, or use no initializers, in enum \`${enumName}\`.`,
  GetterMayNotHaveThisParam: "A getter cannot have a `this` parameter.",
  ImportReflectionHasImportType: "An `import module` declaration can not use `type` or `typeof` keyword.",
  ImportTypeShorthandOnlyInPureImport: "The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.",
  InexactInsideExact: "Explicit inexact syntax cannot appear inside an explicit exact object type.",
  InexactInsideNonObject: "Explicit inexact syntax cannot appear in class or interface definitions.",
  InexactVariance: "Explicit inexact syntax cannot have variance.",
  InvalidNonTypeImportInDeclareModule: "Imports within a `declare module` body must always be `import type` or `import typeof`.",
  MissingTypeParamDefault: "Type parameter declaration needs a default, since a preceding type parameter declaration has a default.",
  NestedDeclareModule: "`declare module` cannot be used inside another `declare module`.",
  NestedFlowComment: "Cannot have a flow comment inside another flow comment.",
  PatternIsOptional: Object.assign({
    message: "A binding pattern parameter cannot be optional in an implementation signature."
  }, {
    reasonCode: "OptionalBindingPattern"
  }),
  SetterMayNotHaveThisParam: "A setter cannot have a `this` parameter.",
  SpreadVariance: "Spread properties cannot have variance.",
  ThisParamAnnotationRequired: "A type annotation is required for the `this` parameter.",
  ThisParamBannedInConstructor: "Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.",
  ThisParamMayNotBeOptional: "The `this` parameter cannot be optional.",
  ThisParamMustBeFirst: "The `this` parameter must be the first function parameter.",
  ThisParamNoDefault: "The `this` parameter may not have a default value.",
  TypeBeforeInitializer: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.",
  TypeCastInPattern: "The type cast expression is expected to be wrapped with parenthesis.",
  UnexpectedExplicitInexactInObject: "Explicit inexact syntax must appear at the end of an inexact object.",
  UnexpectedReservedType: ({
    reservedType
  }) => `Unexpected reserved type ${reservedType}.`,
  UnexpectedReservedUnderscore: "`_` is only allowed as a type argument to call or new.",
  UnexpectedSpaceBetweenModuloChecks: "Spaces between `%` and `checks` are not allowed here.",
  UnexpectedSpreadType: "Spread operator cannot appear in class or interface definitions.",
  UnexpectedSubtractionOperand: 'Unexpected token, expected "number" or "bigint".',
  UnexpectedTokenAfterTypeParameter: "Expected an arrow function after this type parameter declaration.",
  UnexpectedTypeParameterBeforeAsyncArrowFunction: "Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.",
  UnsupportedDeclareExportKind: ({
    unsupportedExportKind,
    suggestion
  }) => `\`declare export ${unsupportedExportKind}\` is not supported. Use \`${suggestion}\` instead.`,
  UnsupportedStatementInDeclareModule: "Only declares and type imports are allowed inside declare module.",
  UnterminatedFlowComment: "Unterminated flow-comment."
});

function isEsModuleType(bodyElement) {
  return bodyElement.type === "DeclareExportAllDeclaration" || bodyElement.type === "DeclareExportDeclaration" && (!bodyElement.declaration || bodyElement.declaration.type !== "TypeAlias" && bodyElement.declaration.type !== "InterfaceDeclaration");
}
function hasTypeImportKind(node) {
  return node.importKind === "type" || node.importKind === "typeof";
}
function isMaybeDefaultImport(type) {
  return tokenIsKeywordOrIdentifier(type) && type !== 97;
}
const exportSuggestions = {
  const: "declare export var",
  let: "declare export var",
  type: "export type",
  interface: "export interface"
};

function partition(list, test) {
  const list1 = [];
  const list2 = [];
  for (let i = 0; i < list.length; i++) {
    (test(list[i], i, list) ? list1 : list2).push(list[i]);
  }
  return [list1, list2];
}
const FLOW_PRAGMA_REGEX = /\*?\s*@((?:no)?flow)\b/;

var flow = (superClass => class FlowParserMixin extends superClass {
  constructor(...args) {
    super(...args);
    this.flowPragma = undefined;
  }
  getScopeHandler() {
    return FlowScopeHandler;
  }
  shouldParseTypes() {
    return this.getPluginOption("flow", "all") || this.flowPragma === "flow";
  }
  shouldParseEnums() {
    return !!this.getPluginOption("flow", "enums");
  }
  finishToken(type, val) {
    if (type !== 131 && type !== 13 && type !== 28) {
      if (this.flowPragma === undefined) {
        this.flowPragma = null;
      }
    }
    return super.finishToken(type, val);
  }
  addComment(comment) {
    if (this.flowPragma === undefined) {
      const matches = FLOW_PRAGMA_REGEX.exec(comment.value);
      if (!matches) ; else if (matches[1] === "flow") {
        this.flowPragma = "flow";
      } else if (matches[1] === "noflow") {
        this.flowPragma = "noflow";
      } else {
        throw new Error("Unexpected flow pragma");
      }
    }
    return super.addComment(comment);
  }
  flowParseTypeInitialiser(tok) {
    const oldInType = this.state.inType;
    this.state.inType = true;
    this.expect(tok || 14);
    const type = this.flowParseType();
    this.state.inType = oldInType;
    return type;
  }
  flowParsePredicate() {
    const node = this.startNode();
    const moduloLoc = this.state.startLoc;
    this.next();
    this.expectContextual(108);
    if (this.state.lastTokStart > moduloLoc.index + 1) {
      this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, {
        at: moduloLoc
      });
    }
    if (this.eat(10)) {
      node.value = super.parseExpression();
      this.expect(11);
      return this.finishNode(node, "DeclaredPredicate");
    } else {
      return this.finishNode(node, "InferredPredicate");
    }
  }
  flowParseTypeAndPredicateInitialiser() {
    const oldInType = this.state.inType;
    this.state.inType = true;
    this.expect(14);
    let type = null;
    let predicate = null;
    if (this.match(54)) {
      this.state.inType = oldInType;
      predicate = this.flowParsePredicate();
    } else {
      type = this.flowParseType();
      this.state.inType = oldInType;
      if (this.match(54)) {
        predicate = this.flowParsePredicate();
      }
    }
    return [type, predicate];
  }
  flowParseDeclareClass(node) {
    this.next();
    this.flowParseInterfaceish(node, true);
    return this.finishNode(node, "DeclareClass");
  }
  flowParseDeclareFunction(node) {
    this.next();
    const id = node.id = this.parseIdentifier();
    const typeNode = this.startNode();
    const typeContainer = this.startNode();
    if (this.match(47)) {
      typeNode.typeParameters = this.flowParseTypeParameterDeclaration();
    } else {
      typeNode.typeParameters = null;
    }
    this.expect(10);
    const tmp = this.flowParseFunctionTypeParams();
    typeNode.params = tmp.params;
    typeNode.rest = tmp.rest;
    typeNode.this = tmp._this;
    this.expect(11);
    [typeNode.returnType, node.predicate] = this.flowParseTypeAndPredicateInitialiser();
    typeContainer.typeAnnotation = this.finishNode(typeNode, "FunctionTypeAnnotation");
    id.typeAnnotation = this.finishNode(typeContainer, "TypeAnnotation");
    this.resetEndLocation(id);
    this.semicolon();
    this.scope.declareName(node.id.name, BIND_FLOW_DECLARE_FN, node.id.loc.start);
    return this.finishNode(node, "DeclareFunction");
  }
  flowParseDeclare(node, insideModule) {
    if (this.match(80)) {
      return this.flowParseDeclareClass(node);
    } else if (this.match(68)) {
      return this.flowParseDeclareFunction(node);
    } else if (this.match(74)) {
      return this.flowParseDeclareVariable(node);
    } else if (this.eatContextual(125)) {
      if (this.match(16)) {
        return this.flowParseDeclareModuleExports(node);
      } else {
        if (insideModule) {
          this.raise(FlowErrors.NestedDeclareModule, {
            at: this.state.lastTokStartLoc
          });
        }
        return this.flowParseDeclareModule(node);
      }
    } else if (this.isContextual(128)) {
      return this.flowParseDeclareTypeAlias(node);
    } else if (this.isContextual(129)) {
      return this.flowParseDeclareOpaqueType(node);
    } else if (this.isContextual(127)) {
      return this.flowParseDeclareInterface(node);
    } else if (this.match(82)) {
      return this.flowParseDeclareExportDeclaration(node, insideModule);
    } else {
      throw this.unexpected();
    }
  }
  flowParseDeclareVariable(node) {
    this.next();
    node.id = this.flowParseTypeAnnotatableIdentifier(true);
    this.scope.declareName(node.id.name, BIND_VAR, node.id.loc.start);
    this.semicolon();
    return this.finishNode(node, "DeclareVariable");
  }
  flowParseDeclareModule(node) {
    this.scope.enter(SCOPE_OTHER);
    if (this.match(131)) {
      node.id = super.parseExprAtom();
    } else {
      node.id = this.parseIdentifier();
    }
    const bodyNode = node.body = this.startNode();
    const body = bodyNode.body = [];
    this.expect(5);
    while (!this.match(8)) {
      let bodyNode = this.startNode();
      if (this.match(83)) {
        this.next();
        if (!this.isContextual(128) && !this.match(87)) {
          this.raise(FlowErrors.InvalidNonTypeImportInDeclareModule, {
            at: this.state.lastTokStartLoc
          });
        }
        super.parseImport(bodyNode);
      } else {
        this.expectContextual(123, FlowErrors.UnsupportedStatementInDeclareModule);
        bodyNode = this.flowParseDeclare(bodyNode, true);
      }
      body.push(bodyNode);
    }
    this.scope.exit();
    this.expect(8);
    this.finishNode(bodyNode, "BlockStatement");
    let kind = null;
    let hasModuleExport = false;
    body.forEach(bodyElement => {
      if (isEsModuleType(bodyElement)) {
        if (kind === "CommonJS") {
          this.raise(FlowErrors.AmbiguousDeclareModuleKind, {
            at: bodyElement
          });
        }
        kind = "ES";
      } else if (bodyElement.type === "DeclareModuleExports") {
        if (hasModuleExport) {
          this.raise(FlowErrors.DuplicateDeclareModuleExports, {
            at: bodyElement
          });
        }
        if (kind === "ES") {
          this.raise(FlowErrors.AmbiguousDeclareModuleKind, {
            at: bodyElement
          });
        }
        kind = "CommonJS";
        hasModuleExport = true;
      }
    });
    node.kind = kind || "CommonJS";
    return this.finishNode(node, "DeclareModule");
  }
  flowParseDeclareExportDeclaration(node, insideModule) {
    this.expect(82);
    if (this.eat(65)) {
      if (this.match(68) || this.match(80)) {
        node.declaration = this.flowParseDeclare(this.startNode());
      } else {
        node.declaration = this.flowParseType();
        this.semicolon();
      }
      node.default = true;
      return this.finishNode(node, "DeclareExportDeclaration");
    } else {
      if (this.match(75) || this.isLet() || (this.isContextual(128) || this.isContextual(127)) && !insideModule) {
        const label = this.state.value;
        throw this.raise(FlowErrors.UnsupportedDeclareExportKind, {
          at: this.state.startLoc,
          unsupportedExportKind: label,
          suggestion: exportSuggestions[label]
        });
      }
      if (this.match(74) ||
      this.match(68) ||
      this.match(80) ||
      this.isContextual(129)) {
        node.declaration = this.flowParseDeclare(this.startNode());
        node.default = false;
        return this.finishNode(node, "DeclareExportDeclaration");
      } else if (this.match(55) ||
      this.match(5) ||
      this.isContextual(127) ||
      this.isContextual(128) ||
      this.isContextual(129)) {
        node = this.parseExport(node, null);
        if (node.type === "ExportNamedDeclaration") {
          node.type = "ExportDeclaration";
          node.default = false;
          delete node.exportKind;
        }
        node.type = "Declare" + node.type;
        return node;
      }
    }
    throw this.unexpected();
  }
  flowParseDeclareModuleExports(node) {
    this.next();
    this.expectContextual(109);
    node.typeAnnotation = this.flowParseTypeAnnotation();
    this.semicolon();
    return this.finishNode(node, "DeclareModuleExports");
  }
  flowParseDeclareTypeAlias(node) {
    this.next();
    const finished = this.flowParseTypeAlias(node);
    finished.type = "DeclareTypeAlias";
    return finished;
  }
  flowParseDeclareOpaqueType(node) {
    this.next();
    const finished = this.flowParseOpaqueType(node, true);
    finished.type = "DeclareOpaqueType";
    return finished;
  }
  flowParseDeclareInterface(node) {
    this.next();
    this.flowParseInterfaceish(node);
    return this.finishNode(node, "DeclareInterface");
  }

  flowParseInterfaceish(node, isClass = false) {
    node.id = this.flowParseRestrictedIdentifier(!isClass, true);
    this.scope.declareName(node.id.name, isClass ? BIND_FUNCTION : BIND_LEXICAL, node.id.loc.start);
    if (this.match(47)) {
      node.typeParameters = this.flowParseTypeParameterDeclaration();
    } else {
      node.typeParameters = null;
    }
    node.extends = [];
    node.implements = [];
    node.mixins = [];
    if (this.eat(81)) {
      do {
        node.extends.push(this.flowParseInterfaceExtends());
      } while (!isClass && this.eat(12));
    }
    if (this.isContextual(115)) {
      this.next();
      do {
        node.mixins.push(this.flowParseInterfaceExtends());
      } while (this.eat(12));
    }
    if (this.isContextual(111)) {
      this.next();
      do {
        node.implements.push(this.flowParseInterfaceExtends());
      } while (this.eat(12));
    }
    node.body = this.flowParseObjectType({
      allowStatic: isClass,
      allowExact: false,
      allowSpread: false,
      allowProto: isClass,
      allowInexact: false
    });
  }
  flowParseInterfaceExtends() {
    const node = this.startNode();
    node.id = this.flowParseQualifiedTypeIdentifier();
    if (this.match(47)) {
      node.typeParameters = this.flowParseTypeParameterInstantiation();
    } else {
      node.typeParameters = null;
    }
    return this.finishNode(node, "InterfaceExtends");
  }
  flowParseInterface(node) {
    this.flowParseInterfaceish(node);
    return this.finishNode(node, "InterfaceDeclaration");
  }
  checkNotUnderscore(word) {
    if (word === "_") {
      this.raise(FlowErrors.UnexpectedReservedUnderscore, {
        at: this.state.startLoc
      });
    }
  }
  checkReservedType(word, startLoc, declaration) {
    if (!reservedTypes.has(word)) return;
    this.raise(declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, {
      at: startLoc,
      reservedType: word
    });
  }
  flowParseRestrictedIdentifier(liberal, declaration) {
    this.checkReservedType(this.state.value, this.state.startLoc, declaration);
    return this.parseIdentifier(liberal);
  }

  flowParseTypeAlias(node) {
    node.id = this.flowParseRestrictedIdentifier(false, true);
    this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);
    if (this.match(47)) {
      node.typeParameters = this.flowParseTypeParameterDeclaration();
    } else {
      node.typeParameters = null;
    }
    node.right = this.flowParseTypeInitialiser(29);
    this.semicolon();
    return this.finishNode(node, "TypeAlias");
  }
  flowParseOpaqueType(node, declare) {
    this.expectContextual(128);
    node.id = this.flowParseRestrictedIdentifier(true, true);
    this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);
    if (this.match(47)) {
      node.typeParameters = this.flowParseTypeParameterDeclaration();
    } else {
      node.typeParameters = null;
    }

    node.supertype = null;
    if (this.match(14)) {
      node.supertype = this.flowParseTypeInitialiser(14);
    }
    node.impltype = null;
    if (!declare) {
      node.impltype = this.flowParseTypeInitialiser(29);
    }
    this.semicolon();
    return this.finishNode(node, "OpaqueType");
  }

  flowParseTypeParameter(requireDefault = false) {
    const nodeStartLoc = this.state.startLoc;
    const node = this.startNode();
    const variance = this.flowParseVariance();
    const ident = this.flowParseTypeAnnotatableIdentifier();
    node.name = ident.name;
    node.variance = variance;
    node.bound = ident.typeAnnotation;
    if (this.match(29)) {
      this.eat(29);
      node.default = this.flowParseType();
    } else {
      if (requireDefault) {
        this.raise(FlowErrors.MissingTypeParamDefault, {
          at: nodeStartLoc
        });
      }
    }
    return this.finishNode(node, "TypeParameter");
  }
  flowParseTypeParameterDeclaration() {
    const oldInType = this.state.inType;
    const node = this.startNode();
    node.params = [];
    this.state.inType = true;

    if (this.match(47) || this.match(140)) {
      this.next();
    } else {
      this.unexpected();
    }
    let defaultRequired = false;
    do {
      const typeParameter = this.flowParseTypeParameter(defaultRequired);
      node.params.push(typeParameter);
      if (typeParameter.default) {
        defaultRequired = true;
      }
      if (!this.match(48)) {
        this.expect(12);
      }
    } while (!this.match(48));
    this.expect(48);
    this.state.inType = oldInType;
    return this.finishNode(node, "TypeParameterDeclaration");
  }
  flowParseTypeParameterInstantiation() {
    const node = this.startNode();
    const oldInType = this.state.inType;
    node.params = [];
    this.state.inType = true;
    this.expect(47);
    const oldNoAnonFunctionType = this.state.noAnonFunctionType;
    this.state.noAnonFunctionType = false;
    while (!this.match(48)) {
      node.params.push(this.flowParseType());
      if (!this.match(48)) {
        this.expect(12);
      }
    }
    this.state.noAnonFunctionType = oldNoAnonFunctionType;
    this.expect(48);
    this.state.inType = oldInType;
    return this.finishNode(node, "TypeParameterInstantiation");
  }
  flowParseTypeParameterInstantiationCallOrNew() {
    const node = this.startNode();
    const oldInType = this.state.inType;
    node.params = [];
    this.state.inType = true;
    this.expect(47);
    while (!this.match(48)) {
      node.params.push(this.flowParseTypeOrImplicitInstantiation());
      if (!this.match(48)) {
        this.expect(12);
      }
    }
    this.expect(48);
    this.state.inType = oldInType;
    return this.finishNode(node, "TypeParameterInstantiation");
  }
  flowParseInterfaceType() {
    const node = this.startNode();
    this.expectContextual(127);
    node.extends = [];
    if (this.eat(81)) {
      do {
        node.extends.push(this.flowParseInterfaceExtends());
      } while (this.eat(12));
    }
    node.body = this.flowParseObjectType({
      allowStatic: false,
      allowExact: false,
      allowSpread: false,
      allowProto: false,
      allowInexact: false
    });
    return this.finishNode(node, "InterfaceTypeAnnotation");
  }
  flowParseObjectPropertyKey() {
    return this.match(132) || this.match(131) ? super.parseExprAtom() : this.parseIdentifier(true);
  }
  flowParseObjectTypeIndexer(node, isStatic, variance) {
    node.static = isStatic;

    if (this.lookahead().type === 14) {
      node.id = this.flowParseObjectPropertyKey();
      node.key = this.flowParseTypeInitialiser();
    } else {
      node.id = null;
      node.key = this.flowParseType();
    }
    this.expect(3);
    node.value = this.flowParseTypeInitialiser();
    node.variance = variance;
    return this.finishNode(node, "ObjectTypeIndexer");
  }
  flowParseObjectTypeInternalSlot(node, isStatic) {
    node.static = isStatic;
    node.id = this.flowParseObjectPropertyKey();
    this.expect(3);
    this.expect(3);
    if (this.match(47) || this.match(10)) {
      node.method = true;
      node.optional = false;
      node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.loc.start));
    } else {
      node.method = false;
      if (this.eat(17)) {
        node.optional = true;
      }
      node.value = this.flowParseTypeInitialiser();
    }
    return this.finishNode(node, "ObjectTypeInternalSlot");
  }
  flowParseObjectTypeMethodish(node) {
    node.params = [];
    node.rest = null;
    node.typeParameters = null;
    node.this = null;
    if (this.match(47)) {
      node.typeParameters = this.flowParseTypeParameterDeclaration();
    }
    this.expect(10);
    if (this.match(78)) {
      node.this = this.flowParseFunctionTypeParam(true);
      node.this.name = null;
      if (!this.match(11)) {
        this.expect(12);
      }
    }
    while (!this.match(11) && !this.match(21)) {
      node.params.push(this.flowParseFunctionTypeParam(false));
      if (!this.match(11)) {
        this.expect(12);
      }
    }
    if (this.eat(21)) {
      node.rest = this.flowParseFunctionTypeParam(false);
    }
    this.expect(11);
    node.returnType = this.flowParseTypeInitialiser();
    return this.finishNode(node, "FunctionTypeAnnotation");
  }
  flowParseObjectTypeCallProperty(node, isStatic) {
    const valueNode = this.startNode();
    node.static = isStatic;
    node.value = this.flowParseObjectTypeMethodish(valueNode);
    return this.finishNode(node, "ObjectTypeCallProperty");
  }
  flowParseObjectType({
    allowStatic,
    allowExact,
    allowSpread,
    allowProto,
    allowInexact
  }) {
    const oldInType = this.state.inType;
    this.state.inType = true;
    const nodeStart = this.startNode();
    nodeStart.callProperties = [];
    nodeStart.properties = [];
    nodeStart.indexers = [];
    nodeStart.internalSlots = [];
    let endDelim;
    let exact;
    let inexact = false;
    if (allowExact && this.match(6)) {
      this.expect(6);
      endDelim = 9;
      exact = true;
    } else {
      this.expect(5);
      endDelim = 8;
      exact = false;
    }
    nodeStart.exact = exact;
    while (!this.match(endDelim)) {
      let isStatic = false;
      let protoStartLoc = null;
      let inexactStartLoc = null;
      const node = this.startNode();
      if (allowProto && this.isContextual(116)) {
        const lookahead = this.lookahead();
        if (lookahead.type !== 14 && lookahead.type !== 17) {
          this.next();
          protoStartLoc = this.state.startLoc;
          allowStatic = false;
        }
      }
      if (allowStatic && this.isContextual(104)) {
        const lookahead = this.lookahead();

        if (lookahead.type !== 14 && lookahead.type !== 17) {
          this.next();
          isStatic = true;
        }
      }
      const variance = this.flowParseVariance();
      if (this.eat(0)) {
        if (protoStartLoc != null) {
          this.unexpected(protoStartLoc);
        }
        if (this.eat(0)) {
          if (variance) {
            this.unexpected(variance.loc.start);
          }
          nodeStart.internalSlots.push(this.flowParseObjectTypeInternalSlot(node, isStatic));
        } else {
          nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance));
        }
      } else if (this.match(10) || this.match(47)) {
        if (protoStartLoc != null) {
          this.unexpected(protoStartLoc);
        }
        if (variance) {
          this.unexpected(variance.loc.start);
        }
        nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic));
      } else {
        let kind = "init";
        if (this.isContextual(98) || this.isContextual(103)) {
          const lookahead = this.lookahead();
          if (tokenIsLiteralPropertyName(lookahead.type)) {
            kind = this.state.value;
            this.next();
          }
        }
        const propOrInexact = this.flowParseObjectTypeProperty(node, isStatic, protoStartLoc, variance, kind, allowSpread, allowInexact != null ? allowInexact : !exact);
        if (propOrInexact === null) {
          inexact = true;
          inexactStartLoc = this.state.lastTokStartLoc;
        } else {
          nodeStart.properties.push(propOrInexact);
        }
      }
      this.flowObjectTypeSemicolon();
      if (inexactStartLoc && !this.match(8) && !this.match(9)) {
        this.raise(FlowErrors.UnexpectedExplicitInexactInObject, {
          at: inexactStartLoc
        });
      }
    }
    this.expect(endDelim);

    if (allowSpread) {
      nodeStart.inexact = inexact;
    }
    const out = this.finishNode(nodeStart, "ObjectTypeAnnotation");
    this.state.inType = oldInType;
    return out;
  }
  flowParseObjectTypeProperty(node, isStatic, protoStartLoc, variance, kind, allowSpread, allowInexact) {
    if (this.eat(21)) {
      const isInexactToken = this.match(12) || this.match(13) || this.match(8) || this.match(9);
      if (isInexactToken) {
        if (!allowSpread) {
          this.raise(FlowErrors.InexactInsideNonObject, {
            at: this.state.lastTokStartLoc
          });
        } else if (!allowInexact) {
          this.raise(FlowErrors.InexactInsideExact, {
            at: this.state.lastTokStartLoc
          });
        }
        if (variance) {
          this.raise(FlowErrors.InexactVariance, {
            at: variance
          });
        }
        return null;
      }
      if (!allowSpread) {
        this.raise(FlowErrors.UnexpectedSpreadType, {
          at: this.state.lastTokStartLoc
        });
      }
      if (protoStartLoc != null) {
        this.unexpected(protoStartLoc);
      }
      if (variance) {
        this.raise(FlowErrors.SpreadVariance, {
          at: variance
        });
      }
      node.argument = this.flowParseType();
      return this.finishNode(node, "ObjectTypeSpreadProperty");
    } else {
      node.key = this.flowParseObjectPropertyKey();
      node.static = isStatic;
      node.proto = protoStartLoc != null;
      node.kind = kind;
      let optional = false;
      if (this.match(47) || this.match(10)) {
        node.method = true;
        if (protoStartLoc != null) {
          this.unexpected(protoStartLoc);
        }
        if (variance) {
          this.unexpected(variance.loc.start);
        }
        node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.loc.start));
        if (kind === "get" || kind === "set") {
          this.flowCheckGetterSetterParams(node);
        }
        if (!allowSpread && node.key.name === "constructor" && node.value.this) {
          this.raise(FlowErrors.ThisParamBannedInConstructor, {
            at: node.value.this
          });
        }
      } else {
        if (kind !== "init") this.unexpected();
        node.method = false;
        if (this.eat(17)) {
          optional = true;
        }
        node.value = this.flowParseTypeInitialiser();
        node.variance = variance;
      }
      node.optional = optional;
      return this.finishNode(node, "ObjectTypeProperty");
    }
  }

  flowCheckGetterSetterParams(property) {
    const paramCount = property.kind === "get" ? 0 : 1;
    const length = property.value.params.length + (property.value.rest ? 1 : 0);
    if (property.value.this) {
      this.raise(property.kind === "get" ? FlowErrors.GetterMayNotHaveThisParam : FlowErrors.SetterMayNotHaveThisParam, {
        at: property.value.this
      });
    }
    if (length !== paramCount) {
      this.raise(property.kind === "get" ? Errors.BadGetterArity : Errors.BadSetterArity, {
        at: property
      });
    }
    if (property.kind === "set" && property.value.rest) {
      this.raise(Errors.BadSetterRestParameter, {
        at: property
      });
    }
  }
  flowObjectTypeSemicolon() {
    if (!this.eat(13) && !this.eat(12) && !this.match(8) && !this.match(9)) {
      this.unexpected();
    }
  }
  flowParseQualifiedTypeIdentifier(startLoc, id) {
    var _startLoc;
    (_startLoc = startLoc) != null ? _startLoc : startLoc = this.state.startLoc;
    let node = id || this.flowParseRestrictedIdentifier(true);
    while (this.eat(16)) {
      const node2 = this.startNodeAt(startLoc);
      node2.qualification = node;
      node2.id = this.flowParseRestrictedIdentifier(true);
      node = this.finishNode(node2, "QualifiedTypeIdentifier");
    }
    return node;
  }
  flowParseGenericType(startLoc, id) {
    const node = this.startNodeAt(startLoc);
    node.typeParameters = null;
    node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);
    if (this.match(47)) {
      node.typeParameters = this.flowParseTypeParameterInstantiation();
    }
    return this.finishNode(node, "GenericTypeAnnotation");
  }
  flowParseTypeofType() {
    const node = this.startNode();
    this.expect(87);
    node.argument = this.flowParsePrimaryType();
    return this.finishNode(node, "TypeofTypeAnnotation");
  }
  flowParseTupleType() {
    const node = this.startNode();
    node.types = [];
    this.expect(0);
    while (this.state.pos < this.length && !this.match(3)) {
      node.types.push(this.flowParseType());
      if (this.match(3)) break;
      this.expect(12);
    }
    this.expect(3);
    return this.finishNode(node, "TupleTypeAnnotation");
  }
  flowParseFunctionTypeParam(first) {
    let name = null;
    let optional = false;
    let typeAnnotation = null;
    const node = this.startNode();
    const lh = this.lookahead();
    const isThis = this.state.type === 78;
    if (lh.type === 14 || lh.type === 17) {
      if (isThis && !first) {
        this.raise(FlowErrors.ThisParamMustBeFirst, {
          at: node
        });
      }
      name = this.parseIdentifier(isThis);
      if (this.eat(17)) {
        optional = true;
        if (isThis) {
          this.raise(FlowErrors.ThisParamMayNotBeOptional, {
            at: node
          });
        }
      }
      typeAnnotation = this.flowParseTypeInitialiser();
    } else {
      typeAnnotation = this.flowParseType();
    }
    node.name = name;
    node.optional = optional;
    node.typeAnnotation = typeAnnotation;
    return this.finishNode(node, "FunctionTypeParam");
  }
  reinterpretTypeAsFunctionTypeParam(type) {
    const node = this.startNodeAt(type.loc.start);
    node.name = null;
    node.optional = false;
    node.typeAnnotation = type;
    return this.finishNode(node, "FunctionTypeParam");
  }
  flowParseFunctionTypeParams(params = []) {
    let rest = null;
    let _this = null;
    if (this.match(78)) {
      _this = this.flowParseFunctionTypeParam(true);
      _this.name = null;
      if (!this.match(11)) {
        this.expect(12);
      }
    }
    while (!this.match(11) && !this.match(21)) {
      params.push(this.flowParseFunctionTypeParam(false));
      if (!this.match(11)) {
        this.expect(12);
      }
    }
    if (this.eat(21)) {
      rest = this.flowParseFunctionTypeParam(false);
    }
    return {
      params,
      rest,
      _this
    };
  }
  flowIdentToTypeAnnotation(startLoc, node, id) {
    switch (id.name) {
      case "any":
        return this.finishNode(node, "AnyTypeAnnotation");
      case "bool":
      case "boolean":
        return this.finishNode(node, "BooleanTypeAnnotation");
      case "mixed":
        return this.finishNode(node, "MixedTypeAnnotation");
      case "empty":
        return this.finishNode(node, "EmptyTypeAnnotation");
      case "number":
        return this.finishNode(node, "NumberTypeAnnotation");
      case "string":
        return this.finishNode(node, "StringTypeAnnotation");
      case "symbol":
        return this.finishNode(node, "SymbolTypeAnnotation");
      default:
        this.checkNotUnderscore(id.name);
        return this.flowParseGenericType(startLoc, id);
    }
  }

  flowParsePrimaryType() {
    const startLoc = this.state.startLoc;
    const node = this.startNode();
    let tmp;
    let type;
    let isGroupedType = false;
    const oldNoAnonFunctionType = this.state.noAnonFunctionType;
    switch (this.state.type) {
      case 5:
        return this.flowParseObjectType({
          allowStatic: false,
          allowExact: false,
          allowSpread: true,
          allowProto: false,
          allowInexact: true
        });
      case 6:
        return this.flowParseObjectType({
          allowStatic: false,
          allowExact: true,
          allowSpread: true,
          allowProto: false,
          allowInexact: false
        });
      case 0:
        this.state.noAnonFunctionType = false;
        type = this.flowParseTupleType();
        this.state.noAnonFunctionType = oldNoAnonFunctionType;
        return type;
      case 47:
        node.typeParameters = this.flowParseTypeParameterDeclaration();
        this.expect(10);
        tmp = this.flowParseFunctionTypeParams();
        node.params = tmp.params;
        node.rest = tmp.rest;
        node.this = tmp._this;
        this.expect(11);
        this.expect(19);
        node.returnType = this.flowParseType();
        return this.finishNode(node, "FunctionTypeAnnotation");
      case 10:
        this.next();

        if (!this.match(11) && !this.match(21)) {
          if (tokenIsIdentifier(this.state.type) || this.match(78)) {
            const token = this.lookahead().type;
            isGroupedType = token !== 17 && token !== 14;
          } else {
            isGroupedType = true;
          }
        }
        if (isGroupedType) {
          this.state.noAnonFunctionType = false;
          type = this.flowParseType();
          this.state.noAnonFunctionType = oldNoAnonFunctionType;

          if (this.state.noAnonFunctionType || !(this.match(12) || this.match(11) && this.lookahead().type === 19)) {
            this.expect(11);
            return type;
          } else {
            this.eat(12);
          }
        }
        if (type) {
          tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);
        } else {
          tmp = this.flowParseFunctionTypeParams();
        }
        node.params = tmp.params;
        node.rest = tmp.rest;
        node.this = tmp._this;
        this.expect(11);
        this.expect(19);
        node.returnType = this.flowParseType();
        node.typeParameters = null;
        return this.finishNode(node, "FunctionTypeAnnotation");
      case 131:
        return this.parseLiteral(this.state.value, "StringLiteralTypeAnnotation");
      case 85:
      case 86:
        node.value = this.match(85);
        this.next();
        return this.finishNode(node, "BooleanLiteralTypeAnnotation");
      case 53:
        if (this.state.value === "-") {
          this.next();
          if (this.match(132)) {
            return this.parseLiteralAtNode(-this.state.value, "NumberLiteralTypeAnnotation", node);
          }
          if (this.match(133)) {
            return this.parseLiteralAtNode(-this.state.value, "BigIntLiteralTypeAnnotation", node);
          }
          throw this.raise(FlowErrors.UnexpectedSubtractionOperand, {
            at: this.state.startLoc
          });
        }
        throw this.unexpected();
      case 132:
        return this.parseLiteral(this.state.value, "NumberLiteralTypeAnnotation");
      case 133:
        return this.parseLiteral(this.state.value, "BigIntLiteralTypeAnnotation");
      case 88:
        this.next();
        return this.finishNode(node, "VoidTypeAnnotation");
      case 84:
        this.next();
        return this.finishNode(node, "NullLiteralTypeAnnotation");
      case 78:
        this.next();
        return this.finishNode(node, "ThisTypeAnnotation");
      case 55:
        this.next();
        return this.finishNode(node, "ExistsTypeAnnotation");
      case 87:
        return this.flowParseTypeofType();
      default:
        if (tokenIsKeyword(this.state.type)) {
          const label = tokenLabelName(this.state.type);
          this.next();
          return super.createIdentifier(node, label);
        } else if (tokenIsIdentifier(this.state.type)) {
          if (this.isContextual(127)) {
            return this.flowParseInterfaceType();
          }
          return this.flowIdentToTypeAnnotation(startLoc, node, this.parseIdentifier());
        }
    }
    throw this.unexpected();
  }
  flowParsePostfixType() {
    const startLoc = this.state.startLoc;
    let type = this.flowParsePrimaryType();
    let seenOptionalIndexedAccess = false;
    while ((this.match(0) || this.match(18)) && !this.canInsertSemicolon()) {
      const node = this.startNodeAt(startLoc);
      const optional = this.eat(18);
      seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;
      this.expect(0);
      if (!optional && this.match(3)) {
        node.elementType = type;
        this.next();
        type = this.finishNode(node, "ArrayTypeAnnotation");
      } else {
        node.objectType = type;
        node.indexType = this.flowParseType();
        this.expect(3);
        if (seenOptionalIndexedAccess) {
          node.optional = optional;
          type = this.finishNode(
          node, "OptionalIndexedAccessType");
        } else {
          type = this.finishNode(
          node, "IndexedAccessType");
        }
      }
    }
    return type;
  }
  flowParsePrefixType() {
    const node = this.startNode();
    if (this.eat(17)) {
      node.typeAnnotation = this.flowParsePrefixType();
      return this.finishNode(node, "NullableTypeAnnotation");
    } else {
      return this.flowParsePostfixType();
    }
  }
  flowParseAnonFunctionWithoutParens() {
    const param = this.flowParsePrefixType();
    if (!this.state.noAnonFunctionType && this.eat(19)) {
      const node = this.startNodeAt(param.loc.start);
      node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];
      node.rest = null;
      node.this = null;
      node.returnType = this.flowParseType();
      node.typeParameters = null;
      return this.finishNode(node, "FunctionTypeAnnotation");
    }
    return param;
  }
  flowParseIntersectionType() {
    const node = this.startNode();
    this.eat(45);
    const type = this.flowParseAnonFunctionWithoutParens();
    node.types = [type];
    while (this.eat(45)) {
      node.types.push(this.flowParseAnonFunctionWithoutParens());
    }
    return node.types.length === 1 ? type : this.finishNode(node, "IntersectionTypeAnnotation");
  }
  flowParseUnionType() {
    const node = this.startNode();
    this.eat(43);
    const type = this.flowParseIntersectionType();
    node.types = [type];
    while (this.eat(43)) {
      node.types.push(this.flowParseIntersectionType());
    }
    return node.types.length === 1 ? type : this.finishNode(node, "UnionTypeAnnotation");
  }
  flowParseType() {
    const oldInType = this.state.inType;
    this.state.inType = true;
    const type = this.flowParseUnionType();
    this.state.inType = oldInType;
    return type;
  }
  flowParseTypeOrImplicitInstantiation() {
    if (this.state.type === 130 && this.state.value === "_") {
      const startLoc = this.state.startLoc;
      const node = this.parseIdentifier();
      return this.flowParseGenericType(startLoc, node);
    } else {
      return this.flowParseType();
    }
  }
  flowParseTypeAnnotation() {
    const node = this.startNode();
    node.typeAnnotation = this.flowParseTypeInitialiser();
    return this.finishNode(node, "TypeAnnotation");
  }
  flowParseTypeAnnotatableIdentifier(allowPrimitiveOverride) {
    const ident = allowPrimitiveOverride ? this.parseIdentifier() : this.flowParseRestrictedIdentifier();
    if (this.match(14)) {
      ident.typeAnnotation = this.flowParseTypeAnnotation();
      this.resetEndLocation(ident);
    }
    return ident;
  }
  typeCastToParameter(node) {
    node.expression.typeAnnotation = node.typeAnnotation;
    this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);
    return node.expression;
  }
  flowParseVariance() {
    let variance = null;
    if (this.match(53)) {
      variance = this.startNode();
      if (this.state.value === "+") {
        variance.kind = "plus";
      } else {
        variance.kind = "minus";
      }
      this.next();
      return this.finishNode(variance, "Variance");
    }
    return variance;
  }

  parseFunctionBody(node, allowExpressionBody, isMethod = false) {
    if (allowExpressionBody) {
      return this.forwardNoArrowParamsConversionAt(node, () => super.parseFunctionBody(node, true, isMethod));
    }
    return super.parseFunctionBody(node, false, isMethod);
  }
  parseFunctionBodyAndFinish(node, type, isMethod = false) {
    if (this.match(14)) {
      const typeNode = this.startNode();
      [typeNode.typeAnnotation,
      node.predicate] = this.flowParseTypeAndPredicateInitialiser();
      node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, "TypeAnnotation") : null;
    }
    return super.parseFunctionBodyAndFinish(node, type, isMethod);
  }

  parseStatementLike(flags) {
    if (this.state.strict && this.isContextual(127)) {
      const lookahead = this.lookahead();
      if (tokenIsKeywordOrIdentifier(lookahead.type)) {
        const node = this.startNode();
        this.next();
        return this.flowParseInterface(node);
      }
    } else if (this.shouldParseEnums() && this.isContextual(124)) {
      const node = this.startNode();
      this.next();
      return this.flowParseEnumDeclaration(node);
    }
    const stmt = super.parseStatementLike(flags);
    if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {
      this.flowPragma = null;
    }
    return stmt;
  }

  parseExpressionStatement(node, expr, decorators) {
    if (expr.type === "Identifier") {
      if (expr.name === "declare") {
        if (this.match(80) || tokenIsIdentifier(this.state.type) || this.match(68) || this.match(74) || this.match(82)) {
          return this.flowParseDeclare(node);
        }
      } else if (tokenIsIdentifier(this.state.type)) {
        if (expr.name === "interface") {
          return this.flowParseInterface(node);
        } else if (expr.name === "type") {
          return this.flowParseTypeAlias(node);
        } else if (expr.name === "opaque") {
          return this.flowParseOpaqueType(node, false);
        }
      }
    }
    return super.parseExpressionStatement(node, expr, decorators);
  }

  shouldParseExportDeclaration() {
    const {
      type
    } = this.state;
    if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 124) {
      return !this.state.containsEsc;
    }
    return super.shouldParseExportDeclaration();
  }
  isExportDefaultSpecifier() {
    const {
      type
    } = this.state;
    if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 124) {
      return this.state.containsEsc;
    }
    return super.isExportDefaultSpecifier();
  }
  parseExportDefaultExpression() {
    if (this.shouldParseEnums() && this.isContextual(124)) {
      const node = this.startNode();
      this.next();
      return this.flowParseEnumDeclaration(node);
    }
    return super.parseExportDefaultExpression();
  }
  parseConditional(expr, startLoc, refExpressionErrors) {
    if (!this.match(17)) return expr;
    if (this.state.maybeInArrowParameters) {
      const nextCh = this.lookaheadCharCode();
      if (nextCh === 44 ||
      nextCh === 61 ||
      nextCh === 58 ||
      nextCh === 41) {
        this.setOptionalParametersError(refExpressionErrors);
        return expr;
      }
    }
    this.expect(17);
    const state = this.state.clone();
    const originalNoArrowAt = this.state.noArrowAt;
    const node = this.startNodeAt(startLoc);
    let {
      consequent,
      failed
    } = this.tryParseConditionalConsequent();
    let [valid, invalid] = this.getArrowLikeExpressions(consequent);
    if (failed || invalid.length > 0) {
      const noArrowAt = [...originalNoArrowAt];
      if (invalid.length > 0) {
        this.state = state;
        this.state.noArrowAt = noArrowAt;
        for (let i = 0; i < invalid.length; i++) {
          noArrowAt.push(invalid[i].start);
        }
        ({
          consequent,
          failed
        } = this.tryParseConditionalConsequent());
        [valid, invalid] = this.getArrowLikeExpressions(consequent);
      }
      if (failed && valid.length > 1) {
        this.raise(FlowErrors.AmbiguousConditionalArrow, {
          at: state.startLoc
        });
      }
      if (failed && valid.length === 1) {
        this.state = state;
        noArrowAt.push(valid[0].start);
        this.state.noArrowAt = noArrowAt;
        ({
          consequent,
          failed
        } = this.tryParseConditionalConsequent());
      }
    }
    this.getArrowLikeExpressions(consequent, true);
    this.state.noArrowAt = originalNoArrowAt;
    this.expect(14);
    node.test = expr;
    node.consequent = consequent;
    node.alternate = this.forwardNoArrowParamsConversionAt(node, () => this.parseMaybeAssign(undefined, undefined));
    return this.finishNode(node, "ConditionalExpression");
  }
  tryParseConditionalConsequent() {
    this.state.noArrowParamsConversionAt.push(this.state.start);
    const consequent = this.parseMaybeAssignAllowIn();
    const failed = !this.match(14);
    this.state.noArrowParamsConversionAt.pop();
    return {
      consequent,
      failed
    };
  }

  getArrowLikeExpressions(node, disallowInvalid) {
    const stack = [node];
    const arrows = [];
    while (stack.length !== 0) {
      const node = stack.pop();
      if (node.type === "ArrowFunctionExpression") {
        if (node.typeParameters || !node.returnType) {
          this.finishArrowValidation(node);
        } else {
          arrows.push(node);
        }
        stack.push(node.body);
      } else if (node.type === "ConditionalExpression") {
        stack.push(node.consequent);
        stack.push(node.alternate);
      }
    }
    if (disallowInvalid) {
      arrows.forEach(node => this.finishArrowValidation(node));
      return [arrows, []];
    }
    return partition(arrows, node => node.params.every(param => this.isAssignable(param, true)));
  }
  finishArrowValidation(node) {
    var _node$extra;
    this.toAssignableList(
    node.params, (_node$extra = node.extra) == null ? void 0 : _node$extra.trailingCommaLoc, false);
    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);
    super.checkParams(node, false, true);
    this.scope.exit();
  }
  forwardNoArrowParamsConversionAt(node, parse) {
    let result;
    if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {
      this.state.noArrowParamsConversionAt.push(this.state.start);
      result = parse();
      this.state.noArrowParamsConversionAt.pop();
    } else {
      result = parse();
    }
    return result;
  }
  parseParenItem(node, startLoc) {
    node = super.parseParenItem(node, startLoc);
    if (this.eat(17)) {
      node.optional = true;
      this.resetEndLocation(node);
    }
    if (this.match(14)) {
      const typeCastNode = this.startNodeAt(startLoc);
      typeCastNode.expression = node;
      typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();
      return this.finishNode(typeCastNode, "TypeCastExpression");
    }
    return node;
  }
  assertModuleNodeAllowed(node) {
    if (node.type === "ImportDeclaration" && (node.importKind === "type" || node.importKind === "typeof") || node.type === "ExportNamedDeclaration" && node.exportKind === "type" || node.type === "ExportAllDeclaration" && node.exportKind === "type") {
      return;
    }
    super.assertModuleNodeAllowed(node);
  }
  parseExport(node, decorators) {
    const decl = super.parseExport(node, decorators);
    if (decl.type === "ExportNamedDeclaration" || decl.type === "ExportAllDeclaration") {
      decl.exportKind = decl.exportKind || "value";
    }
    return decl;
  }
  parseExportDeclaration(node) {
    if (this.isContextual(128)) {
      node.exportKind = "type";
      const declarationNode = this.startNode();
      this.next();
      if (this.match(5)) {
        node.specifiers = this.parseExportSpecifiers(true);
        super.parseExportFrom(node);
        return null;
      } else {
        return this.flowParseTypeAlias(declarationNode);
      }
    } else if (this.isContextual(129)) {
      node.exportKind = "type";
      const declarationNode = this.startNode();
      this.next();
      return this.flowParseOpaqueType(declarationNode, false);
    } else if (this.isContextual(127)) {
      node.exportKind = "type";
      const declarationNode = this.startNode();
      this.next();
      return this.flowParseInterface(declarationNode);
    } else if (this.shouldParseEnums() && this.isContextual(124)) {
      node.exportKind = "value";
      const declarationNode = this.startNode();
      this.next();
      return this.flowParseEnumDeclaration(declarationNode);
    } else {
      return super.parseExportDeclaration(node);
    }
  }
  eatExportStar(node) {
    if (super.eatExportStar(node)) return true;
    if (this.isContextual(128) && this.lookahead().type === 55) {
      node.exportKind = "type";
      this.next();
      this.next();
      return true;
    }
    return false;
  }
  maybeParseExportNamespaceSpecifier(node) {
    const {
      startLoc
    } = this.state;
    const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);
    if (hasNamespace && node.exportKind === "type") {
      this.unexpected(startLoc);
    }
    return hasNamespace;
  }
  parseClassId(node, isStatement, optionalId) {
    super.parseClassId(node, isStatement, optionalId);
    if (this.match(47)) {
      node.typeParameters = this.flowParseTypeParameterDeclaration();
    }
  }
  parseClassMember(classBody, member, state) {
    const {
      startLoc
    } = this.state;
    if (this.isContextual(123)) {
      if (super.parseClassMemberFromModifier(classBody, member)) {
        return;
      }
      member.declare = true;
    }
    super.parseClassMember(classBody, member, state);
    if (member.declare) {
      if (member.type !== "ClassProperty" && member.type !== "ClassPrivateProperty" && member.type !== "PropertyDefinition") {
        this.raise(FlowErrors.DeclareClassElement, {
          at: startLoc
        });
      } else if (member.value) {
        this.raise(FlowErrors.DeclareClassFieldInitializer, {
          at: member.value
        });
      }
    }
  }
  isIterator(word) {
    return word === "iterator" || word === "asyncIterator";
  }
  readIterator() {
    const word = super.readWord1();
    const fullWord = "@@" + word;

    if (!this.isIterator(word) || !this.state.inType) {
      this.raise(Errors.InvalidIdentifier, {
        at: this.state.curPosition(),
        identifierName: fullWord
      });
    }
    this.finishToken(130, fullWord);
  }

  getTokenFromCode(code) {
    const next = this.input.charCodeAt(this.state.pos + 1);
    if (code === 123 && next === 124) {
      return this.finishOp(6, 2);
    } else if (this.state.inType && (code === 62 || code === 60)) {
      return this.finishOp(code === 62 ? 48 : 47, 1);
    } else if (this.state.inType && code === 63) {
      if (next === 46) {
        return this.finishOp(18, 2);
      }
      return this.finishOp(17, 1);
    } else if (isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))) {
      this.state.pos += 2;
      return this.readIterator();
    } else {
      return super.getTokenFromCode(code);
    }
  }
  isAssignable(node, isBinding) {
    if (node.type === "TypeCastExpression") {
      return this.isAssignable(node.expression, isBinding);
    } else {
      return super.isAssignable(node, isBinding);
    }
  }
  toAssignable(node, isLHS = false) {
    if (!isLHS && node.type === "AssignmentExpression" && node.left.type === "TypeCastExpression") {
      node.left = this.typeCastToParameter(node.left);
    }
    super.toAssignable(node, isLHS);
  }

  toAssignableList(exprList, trailingCommaLoc, isLHS) {
    for (let i = 0; i < exprList.length; i++) {
      const expr = exprList[i];
      if ((expr == null ? void 0 : expr.type) === "TypeCastExpression") {
        exprList[i] = this.typeCastToParameter(expr);
      }
    }
    super.toAssignableList(exprList, trailingCommaLoc, isLHS);
  }

  toReferencedList(exprList, isParenthesizedExpr) {
    for (let i = 0; i < exprList.length; i++) {
      var _expr$extra;
      const expr = exprList[i];
      if (expr && expr.type === "TypeCastExpression" && !((_expr$extra = expr.extra) != null && _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) {
        this.raise(FlowErrors.TypeCastInPattern, {
          at: expr.typeAnnotation
        });
      }
    }
    return exprList;
  }
  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {
    const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);

    if (canBePattern && !this.state.maybeInArrowParameters) {
      this.toReferencedList(node.elements);
    }
    return node;
  }
  isValidLVal(type, isParenthesized, binding) {
    return type === "TypeCastExpression" || super.isValidLVal(type, isParenthesized, binding);
  }

  parseClassProperty(node) {
    if (this.match(14)) {
      node.typeAnnotation = this.flowParseTypeAnnotation();
    }
    return super.parseClassProperty(node);
  }
  parseClassPrivateProperty(node) {
    if (this.match(14)) {
      node.typeAnnotation = this.flowParseTypeAnnotation();
    }
    return super.parseClassPrivateProperty(node);
  }

  isClassMethod() {
    return this.match(47) || super.isClassMethod();
  }

  isClassProperty() {
    return this.match(14) || super.isClassProperty();
  }
  isNonstaticConstructor(method) {
    return !this.match(14) && super.isNonstaticConstructor(method);
  }

  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
    if (method.variance) {
      this.unexpected(method.variance.loc.start);
    }
    delete method.variance;
    if (this.match(47)) {
      method.typeParameters = this.flowParseTypeParameterDeclaration();
    }
    super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);
    if (method.params && isConstructor) {
      const params = method.params;
      if (params.length > 0 && this.isThisParam(params[0])) {
        this.raise(FlowErrors.ThisParamBannedInConstructor, {
          at: method
        });
      }
    } else if (
    method.type === "MethodDefinition" && isConstructor &&
    method.value.params) {
      const params = method.value.params;
      if (params.length > 0 && this.isThisParam(params[0])) {
        this.raise(FlowErrors.ThisParamBannedInConstructor, {
          at: method
        });
      }
    }
  }
  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {
    if (method.variance) {
      this.unexpected(method.variance.loc.start);
    }
    delete method.variance;
    if (this.match(47)) {
      method.typeParameters = this.flowParseTypeParameterDeclaration();
    }
    super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);
  }

  parseClassSuper(node) {
    super.parseClassSuper(node);
    if (node.superClass && this.match(47)) {
      node.superTypeParameters = this.flowParseTypeParameterInstantiation();
    }
    if (this.isContextual(111)) {
      this.next();
      const implemented = node.implements = [];
      do {
        const node = this.startNode();
        node.id = this.flowParseRestrictedIdentifier(true);
        if (this.match(47)) {
          node.typeParameters = this.flowParseTypeParameterInstantiation();
        } else {
          node.typeParameters = null;
        }
        implemented.push(this.finishNode(node, "ClassImplements"));
      } while (this.eat(12));
    }
  }
  checkGetterSetterParams(method) {
    super.checkGetterSetterParams(method);
    const params = this.getObjectOrClassMethodParams(method);
    if (params.length > 0) {
      const param = params[0];
      if (this.isThisParam(param) && method.kind === "get") {
        this.raise(FlowErrors.GetterMayNotHaveThisParam, {
          at: param
        });
      } else if (this.isThisParam(param)) {
        this.raise(FlowErrors.SetterMayNotHaveThisParam, {
          at: param
        });
      }
    }
  }
  parsePropertyNamePrefixOperator(node) {
    node.variance = this.flowParseVariance();
  }

  parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {
    if (prop.variance) {
      this.unexpected(prop.variance.loc.start);
    }
    delete prop.variance;
    let typeParameters;

    if (this.match(47) && !isAccessor) {
      typeParameters = this.flowParseTypeParameterDeclaration();
      if (!this.match(10)) this.unexpected();
    }
    const result = super.parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);

    if (typeParameters) {
      (result.value || result).typeParameters = typeParameters;
    }
    return result;
  }
  parseAssignableListItemTypes(param) {
    if (this.eat(17)) {
      if (param.type !== "Identifier") {
        this.raise(FlowErrors.PatternIsOptional, {
          at: param
        });
      }
      if (this.isThisParam(param)) {
        this.raise(FlowErrors.ThisParamMayNotBeOptional, {
          at: param
        });
      }
      param.optional = true;
    }
    if (this.match(14)) {
      param.typeAnnotation = this.flowParseTypeAnnotation();
    } else if (this.isThisParam(param)) {
      this.raise(FlowErrors.ThisParamAnnotationRequired, {
        at: param
      });
    }
    if (this.match(29) && this.isThisParam(param)) {
      this.raise(FlowErrors.ThisParamNoDefault, {
        at: param
      });
    }
    this.resetEndLocation(param);
    return param;
  }
  parseMaybeDefault(startLoc, left) {
    const node = super.parseMaybeDefault(startLoc, left);
    if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {
      this.raise(FlowErrors.TypeBeforeInitializer, {
        at: node.typeAnnotation
      });
    }
    return node;
  }
  shouldParseDefaultImport(node) {
    if (!hasTypeImportKind(node)) {
      return super.shouldParseDefaultImport(node);
    }
    return isMaybeDefaultImport(this.state.type);
  }
  checkImportReflection(node) {
    super.checkImportReflection(node);
    if (node.module && node.importKind !== "value") {
      this.raise(FlowErrors.ImportReflectionHasImportType, {
        at: node.specifiers[0].loc.start
      });
    }
  }
  parseImportSpecifierLocal(node, specifier, type) {
    specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier();
    node.specifiers.push(this.finishImportSpecifier(specifier, type));
  }

  maybeParseDefaultImportSpecifier(node) {
    node.importKind = "value";
    let kind = null;
    if (this.match(87)) {
      kind = "typeof";
    } else if (this.isContextual(128)) {
      kind = "type";
    }
    if (kind) {
      const lh = this.lookahead();
      const {
        type
      } = lh;

      if (kind === "type" && type === 55) {
        this.unexpected(null, lh.type);
      }
      if (isMaybeDefaultImport(type) || type === 5 || type === 55) {
        this.next();
        node.importKind = kind;
      }
    }
    return super.maybeParseDefaultImportSpecifier(node);
  }

  parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport,
  isMaybeTypeOnly,
  bindingType) {
    const firstIdent = specifier.imported;
    let specifierTypeKind = null;
    if (firstIdent.type === "Identifier") {
      if (firstIdent.name === "type") {
        specifierTypeKind = "type";
      } else if (firstIdent.name === "typeof") {
        specifierTypeKind = "typeof";
      }
    }
    let isBinding = false;
    if (this.isContextual(93) && !this.isLookaheadContextual("as")) {
      const as_ident = this.parseIdentifier(true);
      if (specifierTypeKind !== null && !tokenIsKeywordOrIdentifier(this.state.type)) {
        specifier.imported = as_ident;
        specifier.importKind = specifierTypeKind;
        specifier.local = cloneIdentifier(as_ident);
      } else {
        specifier.imported = firstIdent;
        specifier.importKind = null;
        specifier.local = this.parseIdentifier();
      }
    } else {
      if (specifierTypeKind !== null && tokenIsKeywordOrIdentifier(this.state.type)) {
        specifier.imported = this.parseIdentifier(true);
        specifier.importKind = specifierTypeKind;
      } else {
        if (importedIsString) {
          throw this.raise(Errors.ImportBindingIsString, {
            at: specifier,
            importName: firstIdent.value
          });
        }
        specifier.imported = firstIdent;
        specifier.importKind = null;
      }
      if (this.eatContextual(93)) {
        specifier.local = this.parseIdentifier();
      } else {
        isBinding = true;
        specifier.local = cloneIdentifier(specifier.imported);
      }
    }
    const specifierIsTypeImport = hasTypeImportKind(specifier);
    if (isInTypeOnlyImport && specifierIsTypeImport) {
      this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, {
        at: specifier
      });
    }
    if (isInTypeOnlyImport || specifierIsTypeImport) {
      this.checkReservedType(specifier.local.name, specifier.local.loc.start, true);
    }
    if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {
      this.checkReservedWord(specifier.local.name, specifier.loc.start, true, true);
    }
    return this.finishImportSpecifier(specifier, "ImportSpecifier");
  }
  parseBindingAtom() {
    switch (this.state.type) {
      case 78:
        return this.parseIdentifier(true);
      default:
        return super.parseBindingAtom();
    }
  }

  parseFunctionParams(node, allowModifiers) {
    const kind = node.kind;
    if (kind !== "get" && kind !== "set" && this.match(47)) {
      node.typeParameters = this.flowParseTypeParameterDeclaration();
    }
    super.parseFunctionParams(node, allowModifiers);
  }

  parseVarId(decl, kind) {
    super.parseVarId(decl, kind);
    if (this.match(14)) {
      decl.id.typeAnnotation = this.flowParseTypeAnnotation();
      this.resetEndLocation(decl.id);
    }
  }

  parseAsyncArrowFromCallExpression(node, call) {
    if (this.match(14)) {
      const oldNoAnonFunctionType = this.state.noAnonFunctionType;
      this.state.noAnonFunctionType = true;
      node.returnType = this.flowParseTypeAnnotation();
      this.state.noAnonFunctionType = oldNoAnonFunctionType;
    }
    return super.parseAsyncArrowFromCallExpression(node, call);
  }

  shouldParseAsyncArrow() {
    return this.match(14) || super.shouldParseAsyncArrow();
  }

  parseMaybeAssign(refExpressionErrors, afterLeftParse) {
    var _jsx;
    let state = null;
    let jsx;
    if (this.hasPlugin("jsx") && (this.match(140) || this.match(47))) {
      state = this.state.clone();
      jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);

      if (!jsx.error) return jsx.node;

      const {
        context
      } = this.state;
      const currentContext = context[context.length - 1];
      if (currentContext === types.j_oTag || currentContext === types.j_expr) {
        context.pop();
      }
    }
    if ((_jsx = jsx) != null && _jsx.error || this.match(47)) {
      var _jsx2, _jsx3;
      state = state || this.state.clone();
      let typeParameters;
      const arrow = this.tryParse(abort => {
        var _arrowExpression$extr;
        typeParameters = this.flowParseTypeParameterDeclaration();
        const arrowExpression = this.forwardNoArrowParamsConversionAt(typeParameters, () => {
          const result = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
          this.resetStartLocationFromNode(result, typeParameters);
          return result;
        });

        if ((_arrowExpression$extr = arrowExpression.extra) != null && _arrowExpression$extr.parenthesized) abort();

        const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);
        if (expr.type !== "ArrowFunctionExpression") abort();
        expr.typeParameters = typeParameters;
        this.resetStartLocationFromNode(expr, typeParameters);
        return arrowExpression;
      }, state);
      let arrowExpression = null;
      if (arrow.node &&
      this.maybeUnwrapTypeCastExpression(arrow.node).type === "ArrowFunctionExpression") {
        if (!arrow.error && !arrow.aborted) {
          if (arrow.node.async) {
            this.raise(FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction, {
              at: typeParameters
            });
          }
          return arrow.node;
        }

        arrowExpression = arrow.node;
      }

      if ((_jsx2 = jsx) != null && _jsx2.node) {
        this.state = jsx.failState;
        return jsx.node;
      }
      if (arrowExpression) {
        this.state = arrow.failState;
        return arrowExpression;
      }
      if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;
      if (arrow.thrown) throw arrow.error;

      throw this.raise(FlowErrors.UnexpectedTokenAfterTypeParameter, {
        at: typeParameters
      });
    }
    return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
  }

  parseArrow(node) {
    if (this.match(14)) {
      const result = this.tryParse(() => {
        const oldNoAnonFunctionType = this.state.noAnonFunctionType;
        this.state.noAnonFunctionType = true;
        const typeNode = this.startNode();
        [typeNode.typeAnnotation,
        node.predicate] = this.flowParseTypeAndPredicateInitialiser();
        this.state.noAnonFunctionType = oldNoAnonFunctionType;
        if (this.canInsertSemicolon()) this.unexpected();
        if (!this.match(19)) this.unexpected();
        return typeNode;
      });
      if (result.thrown) return null;

      if (result.error) this.state = result.failState;

      node.returnType = result.node.typeAnnotation ? this.finishNode(result.node, "TypeAnnotation") : null;
    }
    return super.parseArrow(node);
  }
  shouldParseArrow(params) {
    return this.match(14) || super.shouldParseArrow(params);
  }
  setArrowFunctionParameters(node, params) {
    if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {
      node.params = params;
    } else {
      super.setArrowFunctionParameters(node, params);
    }
  }
  checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {
    if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {
      return;
    }

    for (let i = 0; i < node.params.length; i++) {
      if (this.isThisParam(node.params[i]) && i > 0) {
        this.raise(FlowErrors.ThisParamMustBeFirst, {
          at: node.params[i]
        });
      }
    }
    return super.checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged);
  }
  parseParenAndDistinguishExpression(canBeArrow) {
    return super.parseParenAndDistinguishExpression(canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1);
  }
  parseSubscripts(base, startLoc, noCalls) {
    if (base.type === "Identifier" && base.name === "async" && this.state.noArrowAt.indexOf(startLoc.index) !== -1) {
      this.next();
      const node = this.startNodeAt(startLoc);
      node.callee = base;
      node.arguments = super.parseCallExpressionArguments(11, false);
      base = this.finishNode(node, "CallExpression");
    } else if (base.type === "Identifier" && base.name === "async" && this.match(47)) {
      const state = this.state.clone();
      const arrow = this.tryParse(abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(), state);

      if (!arrow.error && !arrow.aborted) return arrow.node;
      const result = this.tryParse(() => super.parseSubscripts(base, startLoc, noCalls), state);
      if (result.node && !result.error) return result.node;
      if (arrow.node) {
        this.state = arrow.failState;
        return arrow.node;
      }
      if (result.node) {
        this.state = result.failState;
        return result.node;
      }
      throw arrow.error || result.error;
    }
    return super.parseSubscripts(base, startLoc, noCalls);
  }
  parseSubscript(base, startLoc, noCalls, subscriptState) {
    if (this.match(18) && this.isLookaheadToken_lt()) {
      subscriptState.optionalChainMember = true;
      if (noCalls) {
        subscriptState.stop = true;
        return base;
      }
      this.next();
      const node = this.startNodeAt(startLoc);
      node.callee = base;
      node.typeArguments = this.flowParseTypeParameterInstantiation();
      this.expect(10);
      node.arguments = this.parseCallExpressionArguments(11, false);
      node.optional = true;
      return this.finishCallExpression(node, true);
    } else if (!noCalls && this.shouldParseTypes() && this.match(47)) {
      const node = this.startNodeAt(startLoc);
      node.callee = base;
      const result = this.tryParse(() => {
        node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();
        this.expect(10);
        node.arguments = super.parseCallExpressionArguments(11, false);
        if (subscriptState.optionalChainMember) {
          node.optional = false;
        }
        return this.finishCallExpression(node, subscriptState.optionalChainMember);
      });
      if (result.node) {
        if (result.error) this.state = result.failState;
        return result.node;
      }
    }
    return super.parseSubscript(base, startLoc, noCalls, subscriptState);
  }
  parseNewCallee(node) {
    super.parseNewCallee(node);
    let targs = null;
    if (this.shouldParseTypes() && this.match(47)) {
      targs = this.tryParse(() => this.flowParseTypeParameterInstantiationCallOrNew()).node;
    }
    node.typeArguments = targs;
  }
  parseAsyncArrowWithTypeParameters(startLoc) {
    const node = this.startNodeAt(startLoc);
    this.parseFunctionParams(node);
    if (!this.parseArrow(node)) return;
    return super.parseArrowExpression(node, undefined, true);
  }
  readToken_mult_modulo(code) {
    const next = this.input.charCodeAt(this.state.pos + 1);
    if (code === 42 && next === 47 && this.state.hasFlowComment) {
      this.state.hasFlowComment = false;
      this.state.pos += 2;
      this.nextToken();
      return;
    }
    super.readToken_mult_modulo(code);
  }
  readToken_pipe_amp(code) {
    const next = this.input.charCodeAt(this.state.pos + 1);
    if (code === 124 && next === 125) {
      this.finishOp(9, 2);
      return;
    }
    super.readToken_pipe_amp(code);
  }
  parseTopLevel(file, program) {
    const fileNode = super.parseTopLevel(file, program);
    if (this.state.hasFlowComment) {
      this.raise(FlowErrors.UnterminatedFlowComment, {
        at: this.state.curPosition()
      });
    }
    return fileNode;
  }
  skipBlockComment() {
    if (this.hasPlugin("flowComments") && this.skipFlowComment()) {
      if (this.state.hasFlowComment) {
        throw this.raise(FlowErrors.NestedFlowComment, {
          at: this.state.startLoc
        });
      }
      this.hasFlowCommentCompletion();
      const commentSkip = this.skipFlowComment();
      if (commentSkip) {
        this.state.pos += commentSkip;
        this.state.hasFlowComment = true;
      }
      return;
    }
    return super.skipBlockComment(this.state.hasFlowComment ? "*-/" : "*/");
  }
  skipFlowComment() {
    const {
      pos
    } = this.state;
    let shiftToFirstNonWhiteSpace = 2;
    while ([32, 9].includes(
    this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace))) {
      shiftToFirstNonWhiteSpace++;
    }
    const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);
    const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);
    if (ch2 === 58 && ch3 === 58) {
      return shiftToFirstNonWhiteSpace + 2;
    }

    if (this.input.slice(shiftToFirstNonWhiteSpace + pos, shiftToFirstNonWhiteSpace + pos + 12) === "flow-include") {
      return shiftToFirstNonWhiteSpace + 12;
    }

    if (ch2 === 58 && ch3 !== 58) {
      return shiftToFirstNonWhiteSpace;
    }

    return false;
  }
  hasFlowCommentCompletion() {
    const end = this.input.indexOf("*/", this.state.pos);
    if (end === -1) {
      throw this.raise(Errors.UnterminatedComment, {
        at: this.state.curPosition()
      });
    }
  }

  flowEnumErrorBooleanMemberNotInitialized(loc, {
    enumName,
    memberName
  }) {
    this.raise(FlowErrors.EnumBooleanMemberNotInitialized, {
      at: loc,
      memberName,
      enumName
    });
  }
  flowEnumErrorInvalidMemberInitializer(loc, enumContext) {
    return this.raise(!enumContext.explicitType ? FlowErrors.EnumInvalidMemberInitializerUnknownType : enumContext.explicitType === "symbol" ? FlowErrors.EnumInvalidMemberInitializerSymbolType : FlowErrors.EnumInvalidMemberInitializerPrimaryType, Object.assign({
      at: loc
    }, enumContext));
  }
  flowEnumErrorNumberMemberNotInitialized(loc, {
    enumName,
    memberName
  }) {
    this.raise(FlowErrors.EnumNumberMemberNotInitialized, {
      at: loc,
      enumName,
      memberName
    });
  }
  flowEnumErrorStringMemberInconsistentlyInitailized(node, {
    enumName
  }) {
    this.raise(FlowErrors.EnumStringMemberInconsistentlyInitailized, {
      at: node,
      enumName
    });
  }
  flowEnumMemberInit() {
    const startLoc = this.state.startLoc;
    const endOfInit = () => this.match(12) || this.match(8);
    switch (this.state.type) {
      case 132:
        {
          const literal = this.parseNumericLiteral(this.state.value);
          if (endOfInit()) {
            return {
              type: "number",
              loc: literal.loc.start,
              value: literal
            };
          }
          return {
            type: "invalid",
            loc: startLoc
          };
        }
      case 131:
        {
          const literal = this.parseStringLiteral(this.state.value);
          if (endOfInit()) {
            return {
              type: "string",
              loc: literal.loc.start,
              value: literal
            };
          }
          return {
            type: "invalid",
            loc: startLoc
          };
        }
      case 85:
      case 86:
        {
          const literal = this.parseBooleanLiteral(this.match(85));
          if (endOfInit()) {
            return {
              type: "boolean",
              loc: literal.loc.start,
              value: literal
            };
          }
          return {
            type: "invalid",
            loc: startLoc
          };
        }
      default:
        return {
          type: "invalid",
          loc: startLoc
        };
    }
  }
  flowEnumMemberRaw() {
    const loc = this.state.startLoc;
    const id = this.parseIdentifier(true);
    const init = this.eat(29) ? this.flowEnumMemberInit() : {
      type: "none",
      loc
    };
    return {
      id,
      init
    };
  }
  flowEnumCheckExplicitTypeMismatch(loc, context, expectedType) {
    const {
      explicitType
    } = context;
    if (explicitType === null) {
      return;
    }
    if (explicitType !== expectedType) {
      this.flowEnumErrorInvalidMemberInitializer(loc, context);
    }
  }
  flowEnumMembers({
    enumName,
    explicitType
  }) {
    const seenNames = new Set();
    const members = {
      booleanMembers: [],
      numberMembers: [],
      stringMembers: [],
      defaultedMembers: []
    };
    let hasUnknownMembers = false;
    while (!this.match(8)) {
      if (this.eat(21)) {
        hasUnknownMembers = true;
        break;
      }
      const memberNode = this.startNode();
      const {
        id,
        init
      } = this.flowEnumMemberRaw();
      const memberName = id.name;
      if (memberName === "") {
        continue;
      }
      if (/^[a-z]/.test(memberName)) {
        this.raise(FlowErrors.EnumInvalidMemberName, {
          at: id,
          memberName,
          suggestion: memberName[0].toUpperCase() + memberName.slice(1),
          enumName
        });
      }
      if (seenNames.has(memberName)) {
        this.raise(FlowErrors.EnumDuplicateMemberName, {
          at: id,
          memberName,
          enumName
        });
      }
      seenNames.add(memberName);
      const context = {
        enumName,
        explicitType,
        memberName
      };
      memberNode.id = id;
      switch (init.type) {
        case "boolean":
          {
            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, "boolean");
            memberNode.init = init.value;
            members.booleanMembers.push(this.finishNode(memberNode, "EnumBooleanMember"));
            break;
          }
        case "number":
          {
            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, "number");
            memberNode.init = init.value;
            members.numberMembers.push(this.finishNode(memberNode, "EnumNumberMember"));
            break;
          }
        case "string":
          {
            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, "string");
            memberNode.init = init.value;
            members.stringMembers.push(this.finishNode(memberNode, "EnumStringMember"));
            break;
          }
        case "invalid":
          {
            throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);
          }
        case "none":
          {
            switch (explicitType) {
              case "boolean":
                this.flowEnumErrorBooleanMemberNotInitialized(init.loc, context);
                break;
              case "number":
                this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);
                break;
              default:
                members.defaultedMembers.push(this.finishNode(memberNode, "EnumDefaultedMember"));
            }
          }
      }
      if (!this.match(8)) {
        this.expect(12);
      }
    }
    return {
      members,
      hasUnknownMembers
    };
  }
  flowEnumStringMembers(initializedMembers, defaultedMembers, {
    enumName
  }) {
    if (initializedMembers.length === 0) {
      return defaultedMembers;
    } else if (defaultedMembers.length === 0) {
      return initializedMembers;
    } else if (defaultedMembers.length > initializedMembers.length) {
      for (const member of initializedMembers) {
        this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {
          enumName
        });
      }
      return defaultedMembers;
    } else {
      for (const member of defaultedMembers) {
        this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {
          enumName
        });
      }
      return initializedMembers;
    }
  }
  flowEnumParseExplicitType({
    enumName
  }) {
    if (!this.eatContextual(101)) return null;
    if (!tokenIsIdentifier(this.state.type)) {
      throw this.raise(FlowErrors.EnumInvalidExplicitTypeUnknownSupplied, {
        at: this.state.startLoc,
        enumName
      });
    }
    const {
      value
    } = this.state;
    this.next();
    if (value !== "boolean" && value !== "number" && value !== "string" && value !== "symbol") {
      this.raise(FlowErrors.EnumInvalidExplicitType, {
        at: this.state.startLoc,
        enumName,
        invalidEnumType: value
      });
    }
    return value;
  }
  flowEnumBody(node, id) {
    const enumName = id.name;
    const nameLoc = id.loc.start;
    const explicitType = this.flowEnumParseExplicitType({
      enumName
    });
    this.expect(5);
    const {
      members,
      hasUnknownMembers
    } = this.flowEnumMembers({
      enumName,
      explicitType
    });
    node.hasUnknownMembers = hasUnknownMembers;
    switch (explicitType) {
      case "boolean":
        node.explicitType = true;
        node.members = members.booleanMembers;
        this.expect(8);
        return this.finishNode(node, "EnumBooleanBody");
      case "number":
        node.explicitType = true;
        node.members = members.numberMembers;
        this.expect(8);
        return this.finishNode(node, "EnumNumberBody");
      case "string":
        node.explicitType = true;
        node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {
          enumName
        });
        this.expect(8);
        return this.finishNode(node, "EnumStringBody");
      case "symbol":
        node.members = members.defaultedMembers;
        this.expect(8);
        return this.finishNode(node, "EnumSymbolBody");
      default:
        {
          const empty = () => {
            node.members = [];
            this.expect(8);
            return this.finishNode(node, "EnumStringBody");
          };
          node.explicitType = false;
          const boolsLen = members.booleanMembers.length;
          const numsLen = members.numberMembers.length;
          const strsLen = members.stringMembers.length;
          const defaultedLen = members.defaultedMembers.length;
          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {
            return empty();
          } else if (!boolsLen && !numsLen) {
            node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {
              enumName
            });
            this.expect(8);
            return this.finishNode(node, "EnumStringBody");
          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {
            for (const member of members.defaultedMembers) {
              this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {
                enumName,
                memberName: member.id.name
              });
            }
            node.members = members.booleanMembers;
            this.expect(8);
            return this.finishNode(node, "EnumBooleanBody");
          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {
            for (const member of members.defaultedMembers) {
              this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {
                enumName,
                memberName: member.id.name
              });
            }
            node.members = members.numberMembers;
            this.expect(8);
            return this.finishNode(node, "EnumNumberBody");
          } else {
            this.raise(FlowErrors.EnumInconsistentMemberValues, {
              at: nameLoc,
              enumName
            });
            return empty();
          }
        }
    }
  }
  flowParseEnumDeclaration(node) {
    const id = this.parseIdentifier();
    node.id = id;
    node.body = this.flowEnumBody(this.startNode(), id);
    return this.finishNode(node, "EnumDeclaration");
  }

  isLookaheadToken_lt() {
    const next = this.nextTokenStart();
    if (this.input.charCodeAt(next) === 60) {
      const afterNext = this.input.charCodeAt(next + 1);
      return afterNext !== 60 && afterNext !== 61;
    }
    return false;
  }
  maybeUnwrapTypeCastExpression(node) {
    return node.type === "TypeCastExpression" ? node.expression : node;
  }
});

const entities = {
  __proto__: null,
  quot: "\u0022",
  amp: "&",
  apos: "\u0027",
  lt: "<",
  gt: ">",
  nbsp: "\u00A0",
  iexcl: "\u00A1",
  cent: "\u00A2",
  pound: "\u00A3",
  curren: "\u00A4",
  yen: "\u00A5",
  brvbar: "\u00A6",
  sect: "\u00A7",
  uml: "\u00A8",
  copy: "\u00A9",
  ordf: "\u00AA",
  laquo: "\u00AB",
  not: "\u00AC",
  shy: "\u00AD",
  reg: "\u00AE",
  macr: "\u00AF",
  deg: "\u00B0",
  plusmn: "\u00B1",
  sup2: "\u00B2",
  sup3: "\u00B3",
  acute: "\u00B4",
  micro: "\u00B5",
  para: "\u00B6",
  middot: "\u00B7",
  cedil: "\u00B8",
  sup1: "\u00B9",
  ordm: "\u00BA",
  raquo: "\u00BB",
  frac14: "\u00BC",
  frac12: "\u00BD",
  frac34: "\u00BE",
  iquest: "\u00BF",
  Agrave: "\u00C0",
  Aacute: "\u00C1",
  Acirc: "\u00C2",
  Atilde: "\u00C3",
  Auml: "\u00C4",
  Aring: "\u00C5",
  AElig: "\u00C6",
  Ccedil: "\u00C7",
  Egrave: "\u00C8",
  Eacute: "\u00C9",
  Ecirc: "\u00CA",
  Euml: "\u00CB",
  Igrave: "\u00CC",
  Iacute: "\u00CD",
  Icirc: "\u00CE",
  Iuml: "\u00CF",
  ETH: "\u00D0",
  Ntilde: "\u00D1",
  Ograve: "\u00D2",
  Oacute: "\u00D3",
  Ocirc: "\u00D4",
  Otilde: "\u00D5",
  Ouml: "\u00D6",
  times: "\u00D7",
  Oslash: "\u00D8",
  Ugrave: "\u00D9",
  Uacute: "\u00DA",
  Ucirc: "\u00DB",
  Uuml: "\u00DC",
  Yacute: "\u00DD",
  THORN: "\u00DE",
  szlig: "\u00DF",
  agrave: "\u00E0",
  aacute: "\u00E1",
  acirc: "\u00E2",
  atilde: "\u00E3",
  auml: "\u00E4",
  aring: "\u00E5",
  aelig: "\u00E6",
  ccedil: "\u00E7",
  egrave: "\u00E8",
  eacute: "\u00E9",
  ecirc: "\u00EA",
  euml: "\u00EB",
  igrave: "\u00EC",
  iacute: "\u00ED",
  icirc: "\u00EE",
  iuml: "\u00EF",
  eth: "\u00F0",
  ntilde: "\u00F1",
  ograve: "\u00F2",
  oacute: "\u00F3",
  ocirc: "\u00F4",
  otilde: "\u00F5",
  ouml: "\u00F6",
  divide: "\u00F7",
  oslash: "\u00F8",
  ugrave: "\u00F9",
  uacute: "\u00FA",
  ucirc: "\u00FB",
  uuml: "\u00FC",
  yacute: "\u00FD",
  thorn: "\u00FE",
  yuml: "\u00FF",
  OElig: "\u0152",
  oelig: "\u0153",
  Scaron: "\u0160",
  scaron: "\u0161",
  Yuml: "\u0178",
  fnof: "\u0192",
  circ: "\u02C6",
  tilde: "\u02DC",
  Alpha: "\u0391",
  Beta: "\u0392",
  Gamma: "\u0393",
  Delta: "\u0394",
  Epsilon: "\u0395",
  Zeta: "\u0396",
  Eta: "\u0397",
  Theta: "\u0398",
  Iota: "\u0399",
  Kappa: "\u039A",
  Lambda: "\u039B",
  Mu: "\u039C",
  Nu: "\u039D",
  Xi: "\u039E",
  Omicron: "\u039F",
  Pi: "\u03A0",
  Rho: "\u03A1",
  Sigma: "\u03A3",
  Tau: "\u03A4",
  Upsilon: "\u03A5",
  Phi: "\u03A6",
  Chi: "\u03A7",
  Psi: "\u03A8",
  Omega: "\u03A9",
  alpha: "\u03B1",
  beta: "\u03B2",
  gamma: "\u03B3",
  delta: "\u03B4",
  epsilon: "\u03B5",
  zeta: "\u03B6",
  eta: "\u03B7",
  theta: "\u03B8",
  iota: "\u03B9",
  kappa: "\u03BA",
  lambda: "\u03BB",
  mu: "\u03BC",
  nu: "\u03BD",
  xi: "\u03BE",
  omicron: "\u03BF",
  pi: "\u03C0",
  rho: "\u03C1",
  sigmaf: "\u03C2",
  sigma: "\u03C3",
  tau: "\u03C4",
  upsilon: "\u03C5",
  phi: "\u03C6",
  chi: "\u03C7",
  psi: "\u03C8",
  omega: "\u03C9",
  thetasym: "\u03D1",
  upsih: "\u03D2",
  piv: "\u03D6",
  ensp: "\u2002",
  emsp: "\u2003",
  thinsp: "\u2009",
  zwnj: "\u200C",
  zwj: "\u200D",
  lrm: "\u200E",
  rlm: "\u200F",
  ndash: "\u2013",
  mdash: "\u2014",
  lsquo: "\u2018",
  rsquo: "\u2019",
  sbquo: "\u201A",
  ldquo: "\u201C",
  rdquo: "\u201D",
  bdquo: "\u201E",
  dagger: "\u2020",
  Dagger: "\u2021",
  bull: "\u2022",
  hellip: "\u2026",
  permil: "\u2030",
  prime: "\u2032",
  Prime: "\u2033",
  lsaquo: "\u2039",
  rsaquo: "\u203A",
  oline: "\u203E",
  frasl: "\u2044",
  euro: "\u20AC",
  image: "\u2111",
  weierp: "\u2118",
  real: "\u211C",
  trade: "\u2122",
  alefsym: "\u2135",
  larr: "\u2190",
  uarr: "\u2191",
  rarr: "\u2192",
  darr: "\u2193",
  harr: "\u2194",
  crarr: "\u21B5",
  lArr: "\u21D0",
  uArr: "\u21D1",
  rArr: "\u21D2",
  dArr: "\u21D3",
  hArr: "\u21D4",
  forall: "\u2200",
  part: "\u2202",
  exist: "\u2203",
  empty: "\u2205",
  nabla: "\u2207",
  isin: "\u2208",
  notin: "\u2209",
  ni: "\u220B",
  prod: "\u220F",
  sum: "\u2211",
  minus: "\u2212",
  lowast: "\u2217",
  radic: "\u221A",
  prop: "\u221D",
  infin: "\u221E",
  ang: "\u2220",
  and: "\u2227",
  or: "\u2228",
  cap: "\u2229",
  cup: "\u222A",
  int: "\u222B",
  there4: "\u2234",
  sim: "\u223C",
  cong: "\u2245",
  asymp: "\u2248",
  ne: "\u2260",
  equiv: "\u2261",
  le: "\u2264",
  ge: "\u2265",
  sub: "\u2282",
  sup: "\u2283",
  nsub: "\u2284",
  sube: "\u2286",
  supe: "\u2287",
  oplus: "\u2295",
  otimes: "\u2297",
  perp: "\u22A5",
  sdot: "\u22C5",
  lceil: "\u2308",
  rceil: "\u2309",
  lfloor: "\u230A",
  rfloor: "\u230B",
  lang: "\u2329",
  rang: "\u232A",
  loz: "\u25CA",
  spades: "\u2660",
  clubs: "\u2663",
  hearts: "\u2665",
  diams: "\u2666"
};

const JsxErrors = ParseErrorEnum`jsx`({
  AttributeIsEmpty: "JSX attributes must only be assigned a non-empty expression.",
  MissingClosingTagElement: ({
    openingTagName
  }) => `Expected corresponding JSX closing tag for <${openingTagName}>.`,
  MissingClosingTagFragment: "Expected corresponding JSX closing tag for <>.",
  UnexpectedSequenceExpression: "Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?",
  UnexpectedToken: ({
    unexpected,
    HTMLEntity
  }) => `Unexpected token \`${unexpected}\`. Did you mean \`${HTMLEntity}\` or \`{'${unexpected}'}\`?`,
  UnsupportedJsxValue: "JSX value should be either an expression or a quoted JSX text.",
  UnterminatedJsxContent: "Unterminated JSX contents.",
  UnwrappedAdjacentJSXElements: "Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?"
});

function isFragment(object) {
  return object ? object.type === "JSXOpeningFragment" || object.type === "JSXClosingFragment" : false;
}

function getQualifiedJSXName(object) {
  if (object.type === "JSXIdentifier") {
    return object.name;
  }
  if (object.type === "JSXNamespacedName") {
    return object.namespace.name + ":" + object.name.name;
  }
  if (object.type === "JSXMemberExpression") {
    return getQualifiedJSXName(object.object) + "." + getQualifiedJSXName(object.property);
  }

  throw new Error("Node had unexpected type: " + object.type);
}
var jsx = (superClass => class JSXParserMixin extends superClass {

  jsxReadToken() {
    let out = "";
    let chunkStart = this.state.pos;
    for (;;) {
      if (this.state.pos >= this.length) {
        throw this.raise(JsxErrors.UnterminatedJsxContent, {
          at: this.state.startLoc
        });
      }
      const ch = this.input.charCodeAt(this.state.pos);
      switch (ch) {
        case 60:
        case 123:
          if (this.state.pos === this.state.start) {
            if (ch === 60 && this.state.canStartJSXElement) {
              ++this.state.pos;
              return this.finishToken(140);
            }
            return super.getTokenFromCode(ch);
          }
          out += this.input.slice(chunkStart, this.state.pos);
          return this.finishToken(139, out);
        case 38:
          out += this.input.slice(chunkStart, this.state.pos);
          out += this.jsxReadEntity();
          chunkStart = this.state.pos;
          break;
        case 62:
        case 125:

        default:
          if (isNewLine(ch)) {
            out += this.input.slice(chunkStart, this.state.pos);
            out += this.jsxReadNewLine(true);
            chunkStart = this.state.pos;
          } else {
            ++this.state.pos;
          }
      }
    }
  }
  jsxReadNewLine(normalizeCRLF) {
    const ch = this.input.charCodeAt(this.state.pos);
    let out;
    ++this.state.pos;
    if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) {
      ++this.state.pos;
      out = normalizeCRLF ? "\n" : "\r\n";
    } else {
      out = String.fromCharCode(ch);
    }
    ++this.state.curLine;
    this.state.lineStart = this.state.pos;
    return out;
  }
  jsxReadString(quote) {
    let out = "";
    let chunkStart = ++this.state.pos;
    for (;;) {
      if (this.state.pos >= this.length) {
        throw this.raise(Errors.UnterminatedString, {
          at: this.state.startLoc
        });
      }
      const ch = this.input.charCodeAt(this.state.pos);
      if (ch === quote) break;
      if (ch === 38) {
        out += this.input.slice(chunkStart, this.state.pos);
        out += this.jsxReadEntity();
        chunkStart = this.state.pos;
      } else if (isNewLine(ch)) {
        out += this.input.slice(chunkStart, this.state.pos);
        out += this.jsxReadNewLine(false);
        chunkStart = this.state.pos;
      } else {
        ++this.state.pos;
      }
    }
    out += this.input.slice(chunkStart, this.state.pos++);
    return this.finishToken(131, out);
  }
  jsxReadEntity() {
    const startPos = ++this.state.pos;
    if (this.codePointAtPos(this.state.pos) === 35) {
      ++this.state.pos;
      let radix = 10;
      if (this.codePointAtPos(this.state.pos) === 120) {
        radix = 16;
        ++this.state.pos;
      }
      const codePoint = this.readInt(radix, undefined, false, "bail");
      if (codePoint !== null && this.codePointAtPos(this.state.pos) === 59) {
        ++this.state.pos;
        return String.fromCodePoint(codePoint);
      }
    } else {
      let count = 0;
      let semi = false;
      while (count++ < 10 && this.state.pos < this.length && !(semi = this.codePointAtPos(this.state.pos) == 59)) {
        ++this.state.pos;
      }
      if (semi) {
        const desc = this.input.slice(startPos, this.state.pos);
        const entity = entities[desc];
        ++this.state.pos;
        if (entity) {
          return entity;
        }
      }
    }

    this.state.pos = startPos;
    return "&";
  }

  jsxReadWord() {
    let ch;
    const start = this.state.pos;
    do {
      ch = this.input.charCodeAt(++this.state.pos);
    } while (isIdentifierChar(ch) || ch === 45);
    return this.finishToken(138, this.input.slice(start, this.state.pos));
  }

  jsxParseIdentifier() {
    const node = this.startNode();
    if (this.match(138)) {
      node.name = this.state.value;
    } else if (tokenIsKeyword(this.state.type)) {
      node.name = tokenLabelName(this.state.type);
    } else {
      this.unexpected();
    }
    this.next();
    return this.finishNode(node, "JSXIdentifier");
  }

  jsxParseNamespacedName() {
    const startLoc = this.state.startLoc;
    const name = this.jsxParseIdentifier();
    if (!this.eat(14)) return name;
    const node = this.startNodeAt(startLoc);
    node.namespace = name;
    node.name = this.jsxParseIdentifier();
    return this.finishNode(node, "JSXNamespacedName");
  }

  jsxParseElementName() {
    const startLoc = this.state.startLoc;
    let node = this.jsxParseNamespacedName();
    if (node.type === "JSXNamespacedName") {
      return node;
    }
    while (this.eat(16)) {
      const newNode = this.startNodeAt(startLoc);
      newNode.object = node;
      newNode.property = this.jsxParseIdentifier();
      node = this.finishNode(newNode, "JSXMemberExpression");
    }
    return node;
  }

  jsxParseAttributeValue() {
    let node;
    switch (this.state.type) {
      case 5:
        node = this.startNode();
        this.setContext(types.brace);
        this.next();
        node = this.jsxParseExpressionContainer(node, types.j_oTag);
        if (node.expression.type === "JSXEmptyExpression") {
          this.raise(JsxErrors.AttributeIsEmpty, {
            at: node
          });
        }
        return node;
      case 140:
      case 131:
        return this.parseExprAtom();
      default:
        throw this.raise(JsxErrors.UnsupportedJsxValue, {
          at: this.state.startLoc
        });
    }
  }

  jsxParseEmptyExpression() {
    const node = this.startNodeAt(this.state.lastTokEndLoc);
    return this.finishNodeAt(node, "JSXEmptyExpression", this.state.startLoc);
  }

  jsxParseSpreadChild(node) {
    this.next();
    node.expression = this.parseExpression();
    this.setContext(types.j_expr);
    this.state.canStartJSXElement = true;
    this.expect(8);
    return this.finishNode(node, "JSXSpreadChild");
  }

  jsxParseExpressionContainer(node, previousContext) {
    if (this.match(8)) {
      node.expression = this.jsxParseEmptyExpression();
    } else {
      const expression = this.parseExpression();
      node.expression = expression;
    }
    this.setContext(previousContext);
    this.state.canStartJSXElement = true;
    this.expect(8);
    return this.finishNode(node, "JSXExpressionContainer");
  }

  jsxParseAttribute() {
    const node = this.startNode();
    if (this.match(5)) {
      this.setContext(types.brace);
      this.next();
      this.expect(21);
      node.argument = this.parseMaybeAssignAllowIn();
      this.setContext(types.j_oTag);
      this.state.canStartJSXElement = true;
      this.expect(8);
      return this.finishNode(node, "JSXSpreadAttribute");
    }
    node.name = this.jsxParseNamespacedName();
    node.value = this.eat(29) ? this.jsxParseAttributeValue() : null;
    return this.finishNode(node, "JSXAttribute");
  }

  jsxParseOpeningElementAt(startLoc) {
    const node = this.startNodeAt(startLoc);
    if (this.eat(141)) {
      return this.finishNode(node, "JSXOpeningFragment");
    }
    node.name = this.jsxParseElementName();
    return this.jsxParseOpeningElementAfterName(node);
  }
  jsxParseOpeningElementAfterName(node) {
    const attributes = [];
    while (!this.match(56) && !this.match(141)) {
      attributes.push(this.jsxParseAttribute());
    }
    node.attributes = attributes;
    node.selfClosing = this.eat(56);
    this.expect(141);
    return this.finishNode(node, "JSXOpeningElement");
  }

  jsxParseClosingElementAt(startLoc) {
    const node = this.startNodeAt(startLoc);
    if (this.eat(141)) {
      return this.finishNode(node, "JSXClosingFragment");
    }
    node.name = this.jsxParseElementName();
    this.expect(141);
    return this.finishNode(node, "JSXClosingElement");
  }

  jsxParseElementAt(startLoc) {
    const node = this.startNodeAt(startLoc);
    const children = [];
    const openingElement = this.jsxParseOpeningElementAt(startLoc);
    let closingElement = null;
    if (!openingElement.selfClosing) {
      contents: for (;;) {
        switch (this.state.type) {
          case 140:
            startLoc = this.state.startLoc;
            this.next();
            if (this.eat(56)) {
              closingElement = this.jsxParseClosingElementAt(startLoc);
              break contents;
            }
            children.push(this.jsxParseElementAt(startLoc));
            break;
          case 139:
            children.push(this.parseExprAtom());
            break;
          case 5:
            {
              const node = this.startNode();
              this.setContext(types.brace);
              this.next();
              if (this.match(21)) {
                children.push(this.jsxParseSpreadChild(node));
              } else {
                children.push(this.jsxParseExpressionContainer(node, types.j_expr));
              }
              break;
            }
          default:
            throw this.unexpected();
        }
      }
      if (isFragment(openingElement) && !isFragment(closingElement) && closingElement !== null) {
        this.raise(JsxErrors.MissingClosingTagFragment, {
          at: closingElement
        });
      } else if (!isFragment(openingElement) && isFragment(closingElement)) {
        this.raise(JsxErrors.MissingClosingTagElement, {
          at: closingElement,
          openingTagName: getQualifiedJSXName(openingElement.name)
        });
      } else if (!isFragment(openingElement) && !isFragment(closingElement)) {
        if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {
          this.raise(JsxErrors.MissingClosingTagElement, {
            at: closingElement,
            openingTagName: getQualifiedJSXName(openingElement.name)
          });
        }
      }
    }
    if (isFragment(openingElement)) {
      node.openingFragment = openingElement;
      node.closingFragment = closingElement;
    } else {
      node.openingElement = openingElement;
      node.closingElement = closingElement;
    }
    node.children = children;
    if (this.match(47)) {
      throw this.raise(JsxErrors.UnwrappedAdjacentJSXElements, {
        at: this.state.startLoc
      });
    }
    return isFragment(openingElement) ? this.finishNode(node, "JSXFragment") : this.finishNode(node, "JSXElement");
  }

  jsxParseElement() {
    const startLoc = this.state.startLoc;
    this.next();
    return this.jsxParseElementAt(startLoc);
  }
  setContext(newContext) {
    const {
      context
    } = this.state;
    context[context.length - 1] = newContext;
  }

  parseExprAtom(refExpressionErrors) {
    if (this.match(139)) {
      return this.parseLiteral(this.state.value, "JSXText");
    } else if (this.match(140)) {
      return this.jsxParseElement();
    } else if (this.match(47) && this.input.charCodeAt(this.state.pos) !== 33) {
      this.replaceToken(140);
      return this.jsxParseElement();
    } else {
      return super.parseExprAtom(refExpressionErrors);
    }
  }
  skipSpace() {
    const curContext = this.curContext();
    if (!curContext.preserveSpace) super.skipSpace();
  }
  getTokenFromCode(code) {
    const context = this.curContext();
    if (context === types.j_expr) {
      return this.jsxReadToken();
    }
    if (context === types.j_oTag || context === types.j_cTag) {
      if (isIdentifierStart(code)) {
        return this.jsxReadWord();
      }
      if (code === 62) {
        ++this.state.pos;
        return this.finishToken(141);
      }
      if ((code === 34 || code === 39) && context === types.j_oTag) {
        return this.jsxReadString(code);
      }
    }
    if (code === 60 && this.state.canStartJSXElement && this.input.charCodeAt(this.state.pos + 1) !== 33) {
      ++this.state.pos;
      return this.finishToken(140);
    }
    return super.getTokenFromCode(code);
  }
  updateContext(prevType) {
    const {
      context,
      type
    } = this.state;
    if (type === 56 && prevType === 140) {
      context.splice(-2, 2, types.j_cTag);
      this.state.canStartJSXElement = false;
    } else if (type === 140) {
      context.push(types.j_oTag);
    } else if (type === 141) {
      const out = context[context.length - 1];
      if (out === types.j_oTag && prevType === 56 || out === types.j_cTag) {
        context.pop();
        this.state.canStartJSXElement = context[context.length - 1] === types.j_expr;
      } else {
        this.setContext(types.j_expr);
        this.state.canStartJSXElement = true;
      }
    } else {
      this.state.canStartJSXElement = tokenComesBeforeExpression(type);
    }
  }
});

class TypeScriptScope extends Scope {
  constructor(...args) {
    super(...args);
    this.types = new Set();
    this.enums = new Set();
    this.constEnums = new Set();
    this.classes = new Set();
    this.exportOnlyBindings = new Set();
  }
}

class TypeScriptScopeHandler extends ScopeHandler {
  constructor(...args) {
    super(...args);
    this.importsStack = [];
  }
  createScope(flags) {
    this.importsStack.push(new Set());

    return new TypeScriptScope(flags);
  }
  enter(flags) {
    if (flags == SCOPE_TS_MODULE) {
      this.importsStack.push(new Set());
    }
    super.enter(flags);
  }
  exit() {
    const flags = super.exit();
    if (flags == SCOPE_TS_MODULE) {
      this.importsStack.pop();
    }
    return flags;
  }
  hasImport(name, allowShadow) {
    const len = this.importsStack.length;
    if (this.importsStack[len - 1].has(name)) {
      return true;
    }
    if (!allowShadow && len > 1) {
      for (let i = 0; i < len - 1; i++) {
        if (this.importsStack[i].has(name)) return true;
      }
    }
    return false;
  }
  declareName(name, bindingType, loc) {
    if (bindingType & BIND_FLAGS_TS_IMPORT) {
      if (this.hasImport(name, true)) {
        this.parser.raise(Errors.VarRedeclaration, {
          at: loc,
          identifierName: name
        });
      }
      this.importsStack[this.importsStack.length - 1].add(name);
      return;
    }
    const scope = this.currentScope();
    if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {
      this.maybeExportDefined(scope, name);
      scope.exportOnlyBindings.add(name);
      return;
    }
    super.declareName(name, bindingType, loc);
    if (bindingType & BIND_KIND_TYPE) {
      if (!(bindingType & BIND_KIND_VALUE)) {
        this.checkRedeclarationInScope(scope, name, bindingType, loc);
        this.maybeExportDefined(scope, name);
      }
      scope.types.add(name);
    }
    if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name);
    if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name);
    if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name);
  }
  isRedeclaredInScope(scope, name, bindingType) {
    if (scope.enums.has(name)) {
      if (bindingType & BIND_FLAGS_TS_ENUM) {
        const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);
        const wasConst = scope.constEnums.has(name);
        return isConst !== wasConst;
      }
      return true;
    }
    if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) {
      if (scope.lexical.has(name)) {
        return !!(bindingType & BIND_KIND_VALUE);
      } else {
        return false;
      }
    }
    if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) {
      return true;
    }
    return super.isRedeclaredInScope(scope, name, bindingType);
  }
  checkLocalExport(id) {
    const {
      name
    } = id;
    if (this.hasImport(name)) return;
    const len = this.scopeStack.length;
    for (let i = len - 1; i >= 0; i--) {
      const scope = this.scopeStack[i];
      if (scope.types.has(name) || scope.exportOnlyBindings.has(name)) return;
    }
    super.checkLocalExport(id);
  }
}

const getOwn$1 = (object, key) => Object.hasOwnProperty.call(object, key) && object[key];
function nonNull(x) {
  if (x == null) {
    throw new Error(`Unexpected ${x} value.`);
  }
  return x;
}
function assert(x) {
  if (!x) {
    throw new Error("Assert fail");
  }
}
const TSErrors = ParseErrorEnum`typescript`({
  AbstractMethodHasImplementation: ({
    methodName
  }) => `Method '${methodName}' cannot have an implementation because it is marked abstract.`,
  AbstractPropertyHasInitializer: ({
    propertyName
  }) => `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,
  AccesorCannotDeclareThisParameter: "'get' and 'set' accessors cannot declare 'this' parameters.",
  AccesorCannotHaveTypeParameters: "An accessor cannot have type parameters.",
  AccessorCannotBeOptional: "An 'accessor' property cannot be declared optional.",
  ClassMethodHasDeclare: "Class methods cannot have the 'declare' modifier.",
  ClassMethodHasReadonly: "Class methods cannot have the 'readonly' modifier.",
  ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference: "A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.",
  ConstructorHasTypeParameters: "Type parameters cannot appear on a constructor declaration.",
  DeclareAccessor: ({
    kind
  }) => `'declare' is not allowed in ${kind}ters.`,
  DeclareClassFieldHasInitializer: "Initializers are not allowed in ambient contexts.",
  DeclareFunctionHasImplementation: "An implementation cannot be declared in ambient contexts.",
  DuplicateAccessibilityModifier:
  ({
    modifier
  }) => `Accessibility modifier already seen.`,
  DuplicateModifier: ({
    modifier
  }) => `Duplicate modifier: '${modifier}'.`,
  EmptyHeritageClauseType: ({
    token
  }) => `'${token}' list cannot be empty.`,
  EmptyTypeArguments: "Type argument list cannot be empty.",
  EmptyTypeParameters: "Type parameter list cannot be empty.",
  ExpectedAmbientAfterExportDeclare: "'export declare' must be followed by an ambient declaration.",
  ImportAliasHasImportType: "An import alias can not use 'import type'.",
  ImportReflectionHasImportType: "An `import module` declaration can not use `type` modifier",
  IncompatibleModifiers: ({
    modifiers
  }) => `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,
  IndexSignatureHasAbstract: "Index signatures cannot have the 'abstract' modifier.",
  IndexSignatureHasAccessibility: ({
    modifier
  }) => `Index signatures cannot have an accessibility modifier ('${modifier}').`,
  IndexSignatureHasDeclare: "Index signatures cannot have the 'declare' modifier.",
  IndexSignatureHasOverride: "'override' modifier cannot appear on an index signature.",
  IndexSignatureHasStatic: "Index signatures cannot have the 'static' modifier.",
  InitializerNotAllowedInAmbientContext: "Initializers are not allowed in ambient contexts.",
  InvalidModifierOnTypeMember: ({
    modifier
  }) => `'${modifier}' modifier cannot appear on a type member.`,
  InvalidModifierOnTypeParameter: ({
    modifier
  }) => `'${modifier}' modifier cannot appear on a type parameter.`,
  InvalidModifierOnTypeParameterPositions: ({
    modifier
  }) => `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,
  InvalidModifiersOrder: ({
    orderedModifiers
  }) => `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,
  InvalidPropertyAccessAfterInstantiationExpression: "Invalid property access after an instantiation expression. " + "You can either wrap the instantiation expression in parentheses, or delete the type arguments.",
  InvalidTupleMemberLabel: "Tuple members must be labeled with a simple identifier.",
  MissingInterfaceName: "'interface' declarations must be followed by an identifier.",
  MixedLabeledAndUnlabeledElements: "Tuple members must all have names or all not have names.",
  NonAbstractClassHasAbstractMethod: "Abstract methods can only appear within an abstract class.",
  NonClassMethodPropertyHasAbstractModifer: "'abstract' modifier can only appear on a class, method, or property declaration.",
  OptionalTypeBeforeRequired: "A required element cannot follow an optional element.",
  OverrideNotInSubClass: "This member cannot have an 'override' modifier because its containing class does not extend another class.",
  PatternIsOptional: "A binding pattern parameter cannot be optional in an implementation signature.",
  PrivateElementHasAbstract: "Private elements cannot have the 'abstract' modifier.",
  PrivateElementHasAccessibility: ({
    modifier
  }) => `Private elements cannot have an accessibility modifier ('${modifier}').`,
  ReadonlyForMethodSignature: "'readonly' modifier can only appear on a property declaration or index signature.",
  ReservedArrowTypeParam: "This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.",
  ReservedTypeAssertion: "This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.",
  SetAccesorCannotHaveOptionalParameter: "A 'set' accessor cannot have an optional parameter.",
  SetAccesorCannotHaveRestParameter: "A 'set' accessor cannot have rest parameter.",
  SetAccesorCannotHaveReturnType: "A 'set' accessor cannot have a return type annotation.",
  SingleTypeParameterWithoutTrailingComma: ({
    typeParameterName
  }) => `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,
  StaticBlockCannotHaveModifier: "Static class blocks cannot have any modifier.",
  TypeAnnotationAfterAssign: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.",
  TypeImportCannotSpecifyDefaultAndNamed: "A type-only import can specify a default import or named bindings, but not both.",
  TypeModifierIsUsedInTypeExports: "The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.",
  TypeModifierIsUsedInTypeImports: "The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.",
  UnexpectedParameterModifier: "A parameter property is only allowed in a constructor implementation.",
  UnexpectedReadonly: "'readonly' type modifier is only permitted on array and tuple literal types.",
  UnexpectedTypeAnnotation: "Did not expect a type annotation here.",
  UnexpectedTypeCastInParameter: "Unexpected type cast in parameter position.",
  UnsupportedImportTypeArgument: "Argument in a type import must be a string literal.",
  UnsupportedParameterPropertyKind: "A parameter property may not be declared using a binding pattern.",
  UnsupportedSignatureParameterKind: ({
    type
  }) => `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`
});

function keywordTypeFromName(value) {
  switch (value) {
    case "any":
      return "TSAnyKeyword";
    case "boolean":
      return "TSBooleanKeyword";
    case "bigint":
      return "TSBigIntKeyword";
    case "never":
      return "TSNeverKeyword";
    case "number":
      return "TSNumberKeyword";
    case "object":
      return "TSObjectKeyword";
    case "string":
      return "TSStringKeyword";
    case "symbol":
      return "TSSymbolKeyword";
    case "undefined":
      return "TSUndefinedKeyword";
    case "unknown":
      return "TSUnknownKeyword";
    default:
      return undefined;
  }
}
function tsIsAccessModifier(modifier) {
  return modifier === "private" || modifier === "public" || modifier === "protected";
}
function tsIsVarianceAnnotations(modifier) {
  return modifier === "in" || modifier === "out";
}
var typescript = (superClass => class TypeScriptParserMixin extends superClass {
  getScopeHandler() {
    return TypeScriptScopeHandler;
  }
  tsIsIdentifier() {
    return tokenIsIdentifier(this.state.type);
  }
  tsTokenCanFollowModifier() {
    return (this.match(0) || this.match(5) || this.match(55) || this.match(21) || this.match(136) || this.isLiteralPropertyName()) && !this.hasPrecedingLineBreak();
  }
  tsNextTokenCanFollowModifier() {
    this.next();
    return this.tsTokenCanFollowModifier();
  }

  tsParseModifier(allowedModifiers, stopOnStartOfClassStaticBlock) {
    if (!tokenIsIdentifier(this.state.type) && this.state.type !== 58) {
      return undefined;
    }
    const modifier = this.state.value;
    if (allowedModifiers.indexOf(modifier) !== -1) {
      if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {
        return undefined;
      }
      if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {
        return modifier;
      }
    }
    return undefined;
  }

  tsParseModifiers({
    modified,
    allowedModifiers,
    disallowedModifiers,
    stopOnStartOfClassStaticBlock,
    errorTemplate = TSErrors.InvalidModifierOnTypeMember
  }) {
    const enforceOrder = (loc, modifier, before, after) => {
      if (modifier === before && modified[after]) {
        this.raise(TSErrors.InvalidModifiersOrder, {
          at: loc,
          orderedModifiers: [before, after]
        });
      }
    };
    const incompatible = (loc, modifier, mod1, mod2) => {
      if (modified[mod1] && modifier === mod2 || modified[mod2] && modifier === mod1) {
        this.raise(TSErrors.IncompatibleModifiers, {
          at: loc,
          modifiers: [mod1, mod2]
        });
      }
    };
    for (;;) {
      const {
        startLoc
      } = this.state;
      const modifier = this.tsParseModifier(allowedModifiers.concat(disallowedModifiers != null ? disallowedModifiers : []), stopOnStartOfClassStaticBlock);
      if (!modifier) break;
      if (tsIsAccessModifier(modifier)) {
        if (modified.accessibility) {
          this.raise(TSErrors.DuplicateAccessibilityModifier, {
            at: startLoc,
            modifier
          });
        } else {
          enforceOrder(startLoc, modifier, modifier, "override");
          enforceOrder(startLoc, modifier, modifier, "static");
          enforceOrder(startLoc, modifier, modifier, "readonly");
          modified.accessibility = modifier;
        }
      } else if (tsIsVarianceAnnotations(modifier)) {
        if (modified[modifier]) {
          this.raise(TSErrors.DuplicateModifier, {
            at: startLoc,
            modifier
          });
        }
        modified[modifier] = true;
        enforceOrder(startLoc, modifier, "in", "out");
      } else {
        if (Object.hasOwnProperty.call(modified, modifier)) {
          this.raise(TSErrors.DuplicateModifier, {
            at: startLoc,
            modifier
          });
        } else {
          enforceOrder(startLoc, modifier, "static", "readonly");
          enforceOrder(startLoc, modifier, "static", "override");
          enforceOrder(startLoc, modifier, "override", "readonly");
          enforceOrder(startLoc, modifier, "abstract", "override");
          incompatible(startLoc, modifier, "declare", "override");
          incompatible(startLoc, modifier, "static", "abstract");
        }
        modified[modifier] = true;
      }
      if (disallowedModifiers != null && disallowedModifiers.includes(modifier)) {
        this.raise(errorTemplate, {
          at: startLoc,
          modifier
        });
      }
    }
  }
  tsIsListTerminator(kind) {
    switch (kind) {
      case "EnumMembers":
      case "TypeMembers":
        return this.match(8);
      case "HeritageClauseElement":
        return this.match(5);
      case "TupleElementTypes":
        return this.match(3);
      case "TypeParametersOrArguments":
        return this.match(48);
    }
    throw new Error("Unreachable");
  }
  tsParseList(kind, parseElement) {
    const result = [];
    while (!this.tsIsListTerminator(kind)) {
      result.push(parseElement());
    }
    return result;
  }
  tsParseDelimitedList(kind, parseElement, refTrailingCommaPos) {
    return nonNull(this.tsParseDelimitedListWorker(kind, parseElement, true, refTrailingCommaPos));
  }

  tsParseDelimitedListWorker(kind, parseElement, expectSuccess, refTrailingCommaPos) {
    const result = [];
    let trailingCommaPos = -1;
    for (;;) {
      if (this.tsIsListTerminator(kind)) {
        break;
      }
      trailingCommaPos = -1;
      const element = parseElement();
      if (element == null) {
        return undefined;
      }
      result.push(element);
      if (this.eat(12)) {
        trailingCommaPos = this.state.lastTokStart;
        continue;
      }
      if (this.tsIsListTerminator(kind)) {
        break;
      }
      if (expectSuccess) {
        this.expect(12);
      }
      return undefined;
    }
    if (refTrailingCommaPos) {
      refTrailingCommaPos.value = trailingCommaPos;
    }
    return result;
  }
  tsParseBracketedList(kind, parseElement, bracket, skipFirstToken, refTrailingCommaPos) {
    if (!skipFirstToken) {
      if (bracket) {
        this.expect(0);
      } else {
        this.expect(47);
      }
    }
    const result = this.tsParseDelimitedList(kind, parseElement, refTrailingCommaPos);
    if (bracket) {
      this.expect(3);
    } else {
      this.expect(48);
    }
    return result;
  }
  tsParseImportType() {
    const node = this.startNode();
    this.expect(83);
    this.expect(10);
    if (!this.match(131)) {
      this.raise(TSErrors.UnsupportedImportTypeArgument, {
        at: this.state.startLoc
      });
    }

    node.argument = super.parseExprAtom();
    this.expect(11);
    if (this.eat(16)) {
      node.qualifier = this.tsParseEntityName();
    }
    if (this.match(47)) {
      node.typeParameters = this.tsParseTypeArguments();
    }
    return this.finishNode(node, "TSImportType");
  }
  tsParseEntityName(allowReservedWords = true) {
    let entity = this.parseIdentifier(allowReservedWords);
    while (this.eat(16)) {
      const node = this.startNodeAtNode(entity);
      node.left = entity;
      node.right = this.parseIdentifier(allowReservedWords);
      entity = this.finishNode(node, "TSQualifiedName");
    }
    return entity;
  }
  tsParseTypeReference() {
    const node = this.startNode();
    node.typeName = this.tsParseEntityName();
    if (!this.hasPrecedingLineBreak() && this.match(47)) {
      node.typeParameters = this.tsParseTypeArguments();
    }
    return this.finishNode(node, "TSTypeReference");
  }
  tsParseThisTypePredicate(lhs) {
    this.next();
    const node = this.startNodeAtNode(lhs);
    node.parameterName = lhs;
    node.typeAnnotation = this.tsParseTypeAnnotation(false);
    node.asserts = false;
    return this.finishNode(node, "TSTypePredicate");
  }
  tsParseThisTypeNode() {
    const node = this.startNode();
    this.next();
    return this.finishNode(node, "TSThisType");
  }
  tsParseTypeQuery() {
    const node = this.startNode();
    this.expect(87);
    if (this.match(83)) {
      node.exprName = this.tsParseImportType();
    } else {
      node.exprName = this.tsParseEntityName();
    }
    if (!this.hasPrecedingLineBreak() && this.match(47)) {
      node.typeParameters = this.tsParseTypeArguments();
    }
    return this.finishNode(node, "TSTypeQuery");
  }
  tsParseInOutModifiers(node) {
    this.tsParseModifiers({
      modified: node,
      allowedModifiers: ["in", "out"],
      disallowedModifiers: ["public", "private", "protected", "readonly", "declare", "abstract", "override"],
      errorTemplate: TSErrors.InvalidModifierOnTypeParameter
    });
  }

  tsParseNoneModifiers(node) {
    this.tsParseModifiers({
      modified: node,
      allowedModifiers: [],
      disallowedModifiers: ["in", "out"],
      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions
    });
  }
  tsParseTypeParameter(parseModifiers = this.tsParseNoneModifiers.bind(this)) {
    const node = this.startNode();
    parseModifiers(node);
    node.name = this.tsParseTypeParameterName();
    node.constraint = this.tsEatThenParseType(81);
    node.default = this.tsEatThenParseType(29);
    return this.finishNode(node, "TSTypeParameter");
  }
  tsTryParseTypeParameters(parseModifiers) {
    if (this.match(47)) {
      return this.tsParseTypeParameters(parseModifiers);
    }
  }
  tsParseTypeParameters(parseModifiers) {
    const node = this.startNode();
    if (this.match(47) || this.match(140)) {
      this.next();
    } else {
      this.unexpected();
    }
    const refTrailingCommaPos = {
      value: -1
    };
    node.params = this.tsParseBracketedList("TypeParametersOrArguments",
    this.tsParseTypeParameter.bind(this, parseModifiers), false, true, refTrailingCommaPos);
    if (node.params.length === 0) {
      this.raise(TSErrors.EmptyTypeParameters, {
        at: node
      });
    }
    if (refTrailingCommaPos.value !== -1) {
      this.addExtra(node, "trailingComma", refTrailingCommaPos.value);
    }
    return this.finishNode(node, "TSTypeParameterDeclaration");
  }

  tsFillSignature(returnToken, signature) {
    const returnTokenRequired = returnToken === 19;

    const paramsKey = "parameters";
    const returnTypeKey = "typeAnnotation";
    signature.typeParameters = this.tsTryParseTypeParameters();
    this.expect(10);
    signature[paramsKey] = this.tsParseBindingListForSignature();
    if (returnTokenRequired) {
      signature[returnTypeKey] = this.tsParseTypeOrTypePredicateAnnotation(returnToken);
    } else if (this.match(returnToken)) {
      signature[returnTypeKey] = this.tsParseTypeOrTypePredicateAnnotation(returnToken);
    }
  }
  tsParseBindingListForSignature() {
    return super.parseBindingList(11, 41).map(pattern => {
      if (pattern.type !== "Identifier" && pattern.type !== "RestElement" && pattern.type !== "ObjectPattern" && pattern.type !== "ArrayPattern") {
        this.raise(TSErrors.UnsupportedSignatureParameterKind, {
          at: pattern,
          type: pattern.type
        });
      }
      return pattern;
    });
  }
  tsParseTypeMemberSemicolon() {
    if (!this.eat(12) && !this.isLineTerminator()) {
      this.expect(13);
    }
  }
  tsParseSignatureMember(kind, node) {
    this.tsFillSignature(14, node);
    this.tsParseTypeMemberSemicolon();
    return this.finishNode(node, kind);
  }
  tsIsUnambiguouslyIndexSignature() {
    this.next();
    if (tokenIsIdentifier(this.state.type)) {
      this.next();
      return this.match(14);
    }
    return false;
  }
  tsTryParseIndexSignature(node) {
    if (!(this.match(0) && this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))) {
      return undefined;
    }
    this.expect(0);
    const id = this.parseIdentifier();
    id.typeAnnotation = this.tsParseTypeAnnotation();
    this.resetEndLocation(id);

    this.expect(3);
    node.parameters = [id];
    const type = this.tsTryParseTypeAnnotation();
    if (type) node.typeAnnotation = type;
    this.tsParseTypeMemberSemicolon();
    return this.finishNode(node, "TSIndexSignature");
  }
  tsParsePropertyOrMethodSignature(node, readonly) {
    if (this.eat(17)) node.optional = true;
    const nodeAny = node;
    if (this.match(10) || this.match(47)) {
      if (readonly) {
        this.raise(TSErrors.ReadonlyForMethodSignature, {
          at: node
        });
      }
      const method = nodeAny;
      if (method.kind && this.match(47)) {
        this.raise(TSErrors.AccesorCannotHaveTypeParameters, {
          at: this.state.curPosition()
        });
      }
      this.tsFillSignature(14, method);
      this.tsParseTypeMemberSemicolon();
      const paramsKey = "parameters";
      const returnTypeKey = "typeAnnotation";
      if (method.kind === "get") {
        if (method[paramsKey].length > 0) {
          this.raise(Errors.BadGetterArity, {
            at: this.state.curPosition()
          });
          if (this.isThisParam(method[paramsKey][0])) {
            this.raise(TSErrors.AccesorCannotDeclareThisParameter, {
              at: this.state.curPosition()
            });
          }
        }
      } else if (method.kind === "set") {
        if (method[paramsKey].length !== 1) {
          this.raise(Errors.BadSetterArity, {
            at: this.state.curPosition()
          });
        } else {
          const firstParameter = method[paramsKey][0];
          if (this.isThisParam(firstParameter)) {
            this.raise(TSErrors.AccesorCannotDeclareThisParameter, {
              at: this.state.curPosition()
            });
          }
          if (firstParameter.type === "Identifier" && firstParameter.optional) {
            this.raise(TSErrors.SetAccesorCannotHaveOptionalParameter, {
              at: this.state.curPosition()
            });
          }
          if (firstParameter.type === "RestElement") {
            this.raise(TSErrors.SetAccesorCannotHaveRestParameter, {
              at: this.state.curPosition()
            });
          }
        }
        if (method[returnTypeKey]) {
          this.raise(TSErrors.SetAccesorCannotHaveReturnType, {
            at: method[returnTypeKey]
          });
        }
      } else {
        method.kind = "method";
      }
      return this.finishNode(method, "TSMethodSignature");
    } else {
      const property = nodeAny;
      if (readonly) property.readonly = true;
      const type = this.tsTryParseTypeAnnotation();
      if (type) property.typeAnnotation = type;
      this.tsParseTypeMemberSemicolon();
      return this.finishNode(property, "TSPropertySignature");
    }
  }
  tsParseTypeMember() {
    const node = this.startNode();
    if (this.match(10) || this.match(47)) {
      return this.tsParseSignatureMember("TSCallSignatureDeclaration", node);
    }
    if (this.match(77)) {
      const id = this.startNode();
      this.next();
      if (this.match(10) || this.match(47)) {
        return this.tsParseSignatureMember("TSConstructSignatureDeclaration", node);
      } else {
        node.key = this.createIdentifier(id, "new");
        return this.tsParsePropertyOrMethodSignature(node, false);
      }
    }
    this.tsParseModifiers({
      modified: node,
      allowedModifiers: ["readonly"],
      disallowedModifiers: ["declare", "abstract", "private", "protected", "public", "static", "override"]
    });
    const idx = this.tsTryParseIndexSignature(node);
    if (idx) {
      return idx;
    }
    super.parsePropertyName(node);
    if (!node.computed && node.key.type === "Identifier" && (node.key.name === "get" || node.key.name === "set") && this.tsTokenCanFollowModifier()) {
      node.kind = node.key.name;
      super.parsePropertyName(node);
    }
    return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);
  }
  tsParseTypeLiteral() {
    const node = this.startNode();
    node.members = this.tsParseObjectTypeMembers();
    return this.finishNode(node, "TSTypeLiteral");
  }
  tsParseObjectTypeMembers() {
    this.expect(5);
    const members = this.tsParseList("TypeMembers", this.tsParseTypeMember.bind(this));
    this.expect(8);
    return members;
  }
  tsIsStartOfMappedType() {
    this.next();
    if (this.eat(53)) {
      return this.isContextual(120);
    }
    if (this.isContextual(120)) {
      this.next();
    }
    if (!this.match(0)) {
      return false;
    }
    this.next();
    if (!this.tsIsIdentifier()) {
      return false;
    }
    this.next();
    return this.match(58);
  }
  tsParseMappedTypeParameter() {
    const node = this.startNode();
    node.name = this.tsParseTypeParameterName();
    node.constraint = this.tsExpectThenParseType(58);
    return this.finishNode(node, "TSTypeParameter");
  }
  tsParseMappedType() {
    const node = this.startNode();
    this.expect(5);
    if (this.match(53)) {
      node.readonly = this.state.value;
      this.next();
      this.expectContextual(120);
    } else if (this.eatContextual(120)) {
      node.readonly = true;
    }
    this.expect(0);
    node.typeParameter = this.tsParseMappedTypeParameter();
    node.nameType = this.eatContextual(93) ? this.tsParseType() : null;
    this.expect(3);
    if (this.match(53)) {
      node.optional = this.state.value;
      this.next();
      this.expect(17);
    } else if (this.eat(17)) {
      node.optional = true;
    }
    node.typeAnnotation = this.tsTryParseType();
    this.semicolon();
    this.expect(8);
    return this.finishNode(node, "TSMappedType");
  }
  tsParseTupleType() {
    const node = this.startNode();
    node.elementTypes = this.tsParseBracketedList("TupleElementTypes", this.tsParseTupleElementType.bind(this), true, false);

    let seenOptionalElement = false;
    let labeledElements = null;
    node.elementTypes.forEach(elementNode => {
      var _labeledElements;
      const {
        type
      } = elementNode;
      if (seenOptionalElement && type !== "TSRestType" && type !== "TSOptionalType" && !(type === "TSNamedTupleMember" && elementNode.optional)) {
        this.raise(TSErrors.OptionalTypeBeforeRequired, {
          at: elementNode
        });
      }
      seenOptionalElement || (seenOptionalElement = type === "TSNamedTupleMember" && elementNode.optional || type === "TSOptionalType");

      let checkType = type;
      if (type === "TSRestType") {
        elementNode = elementNode.typeAnnotation;
        checkType = elementNode.type;
      }
      const isLabeled = checkType === "TSNamedTupleMember";
      (_labeledElements = labeledElements) != null ? _labeledElements : labeledElements = isLabeled;
      if (labeledElements !== isLabeled) {
        this.raise(TSErrors.MixedLabeledAndUnlabeledElements, {
          at: elementNode
        });
      }
    });
    return this.finishNode(node, "TSTupleType");
  }
  tsParseTupleElementType() {

    const {
      startLoc
    } = this.state;
    const rest = this.eat(21);
    let type = this.tsParseType();
    const optional = this.eat(17);
    const labeled = this.eat(14);
    if (labeled) {
      const labeledNode = this.startNodeAtNode(type);
      labeledNode.optional = optional;
      if (type.type === "TSTypeReference" && !type.typeParameters && type.typeName.type === "Identifier") {
        labeledNode.label = type.typeName;
      } else {
        this.raise(TSErrors.InvalidTupleMemberLabel, {
          at: type
        });
        labeledNode.label = type;
      }
      labeledNode.elementType = this.tsParseType();
      type = this.finishNode(labeledNode, "TSNamedTupleMember");
    } else if (optional) {
      const optionalTypeNode = this.startNodeAtNode(type);
      optionalTypeNode.typeAnnotation = type;
      type = this.finishNode(optionalTypeNode, "TSOptionalType");
    }
    if (rest) {
      const restNode = this.startNodeAt(startLoc);
      restNode.typeAnnotation = type;
      type = this.finishNode(restNode, "TSRestType");
    }
    return type;
  }
  tsParseParenthesizedType() {
    const node = this.startNode();
    this.expect(10);
    node.typeAnnotation = this.tsParseType();
    this.expect(11);
    return this.finishNode(node, "TSParenthesizedType");
  }
  tsParseFunctionOrConstructorType(type, abstract) {
    const node = this.startNode();
    if (type === "TSConstructorType") {
      node.abstract = !!abstract;
      if (abstract) this.next();
      this.next();
    }

    this.tsInAllowConditionalTypesContext(() => this.tsFillSignature(19, node));
    return this.finishNode(node, type);
  }
  tsParseLiteralTypeNode() {
    const node = this.startNode();
    node.literal = (() => {
      switch (this.state.type) {
        case 132:
        case 133:
        case 131:
        case 85:
        case 86:
          return super.parseExprAtom();
        default:
          throw this.unexpected();
      }
    })();
    return this.finishNode(node, "TSLiteralType");
  }
  tsParseTemplateLiteralType() {
    const node = this.startNode();
    node.literal = super.parseTemplate(false);
    return this.finishNode(node, "TSLiteralType");
  }
  parseTemplateSubstitution() {
    if (this.state.inType) return this.tsParseType();
    return super.parseTemplateSubstitution();
  }
  tsParseThisTypeOrThisTypePredicate() {
    const thisKeyword = this.tsParseThisTypeNode();
    if (this.isContextual(114) && !this.hasPrecedingLineBreak()) {
      return this.tsParseThisTypePredicate(thisKeyword);
    } else {
      return thisKeyword;
    }
  }
  tsParseNonArrayType() {
    switch (this.state.type) {
      case 131:
      case 132:
      case 133:
      case 85:
      case 86:
        return this.tsParseLiteralTypeNode();
      case 53:
        if (this.state.value === "-") {
          const node = this.startNode();
          const nextToken = this.lookahead();
          if (nextToken.type !== 132 && nextToken.type !== 133) {
            throw this.unexpected();
          }
          node.literal = this.parseMaybeUnary();
          return this.finishNode(node, "TSLiteralType");
        }
        break;
      case 78:
        return this.tsParseThisTypeOrThisTypePredicate();
      case 87:
        return this.tsParseTypeQuery();
      case 83:
        return this.tsParseImportType();
      case 5:
        return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this)) ? this.tsParseMappedType() : this.tsParseTypeLiteral();
      case 0:
        return this.tsParseTupleType();
      case 10:
        return this.tsParseParenthesizedType();
      case 25:
      case 24:
        return this.tsParseTemplateLiteralType();
      default:
        {
          const {
            type
          } = this.state;
          if (tokenIsIdentifier(type) || type === 88 || type === 84) {
            const nodeType = type === 88 ? "TSVoidKeyword" : type === 84 ? "TSNullKeyword" : keywordTypeFromName(this.state.value);
            if (nodeType !== undefined && this.lookaheadCharCode() !== 46) {
              const node = this.startNode();
              this.next();
              return this.finishNode(node, nodeType);
            }
            return this.tsParseTypeReference();
          }
        }
    }
    throw this.unexpected();
  }
  tsParseArrayTypeOrHigher() {
    let type = this.tsParseNonArrayType();
    while (!this.hasPrecedingLineBreak() && this.eat(0)) {
      if (this.match(3)) {
        const node = this.startNodeAtNode(type);
        node.elementType = type;
        this.expect(3);
        type = this.finishNode(node, "TSArrayType");
      } else {
        const node = this.startNodeAtNode(type);
        node.objectType = type;
        node.indexType = this.tsParseType();
        this.expect(3);
        type = this.finishNode(node, "TSIndexedAccessType");
      }
    }
    return type;
  }
  tsParseTypeOperator() {
    const node = this.startNode();
    const operator = this.state.value;
    this.next();
    node.operator = operator;
    node.typeAnnotation = this.tsParseTypeOperatorOrHigher();
    if (operator === "readonly") {
      this.tsCheckTypeAnnotationForReadOnly(
      node);
    }
    return this.finishNode(node, "TSTypeOperator");
  }
  tsCheckTypeAnnotationForReadOnly(node) {
    switch (node.typeAnnotation.type) {
      case "TSTupleType":
      case "TSArrayType":
        return;
      default:
        this.raise(TSErrors.UnexpectedReadonly, {
          at: node
        });
    }
  }
  tsParseInferType() {
    const node = this.startNode();
    this.expectContextual(113);
    const typeParameter = this.startNode();
    typeParameter.name = this.tsParseTypeParameterName();
    typeParameter.constraint = this.tsTryParse(() => this.tsParseConstraintForInferType());
    node.typeParameter = this.finishNode(typeParameter, "TSTypeParameter");
    return this.finishNode(node, "TSInferType");
  }
  tsParseConstraintForInferType() {
    if (this.eat(81)) {
      const constraint = this.tsInDisallowConditionalTypesContext(() => this.tsParseType());
      if (this.state.inDisallowConditionalTypesContext || !this.match(17)) {
        return constraint;
      }
    }
  }
  tsParseTypeOperatorOrHigher() {
    const isTypeOperator = tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;
    return isTypeOperator ? this.tsParseTypeOperator() : this.isContextual(113) ? this.tsParseInferType() : this.tsInAllowConditionalTypesContext(() => this.tsParseArrayTypeOrHigher());
  }
  tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) {
    const node = this.startNode();
    const hasLeadingOperator = this.eat(operator);
    const types = [];
    do {
      types.push(parseConstituentType());
    } while (this.eat(operator));
    if (types.length === 1 && !hasLeadingOperator) {
      return types[0];
    }
    node.types = types;
    return this.finishNode(node, kind);
  }
  tsParseIntersectionTypeOrHigher() {
    return this.tsParseUnionOrIntersectionType("TSIntersectionType", this.tsParseTypeOperatorOrHigher.bind(this), 45);
  }
  tsParseUnionTypeOrHigher() {
    return this.tsParseUnionOrIntersectionType("TSUnionType", this.tsParseIntersectionTypeOrHigher.bind(this), 43);
  }
  tsIsStartOfFunctionType() {
    if (this.match(47)) {
      return true;
    }
    return this.match(10) && this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this));
  }
  tsSkipParameterStart() {
    if (tokenIsIdentifier(this.state.type) || this.match(78)) {
      this.next();
      return true;
    }
    if (this.match(5)) {
      const {
        errors
      } = this.state;
      const previousErrorCount = errors.length;
      try {
        this.parseObjectLike(8, true);
        return errors.length === previousErrorCount;
      } catch (_unused) {
        return false;
      }
    }
    if (this.match(0)) {
      this.next();
      const {
        errors
      } = this.state;
      const previousErrorCount = errors.length;
      try {
        super.parseBindingList(3, 93, true);
        return errors.length === previousErrorCount;
      } catch (_unused2) {
        return false;
      }
    }
    return false;
  }
  tsIsUnambiguouslyStartOfFunctionType() {
    this.next();
    if (this.match(11) || this.match(21)) {
      return true;
    }
    if (this.tsSkipParameterStart()) {
      if (this.match(14) || this.match(12) || this.match(17) || this.match(29)) {
        return true;
      }
      if (this.match(11)) {
        this.next();
        if (this.match(19)) {
          return true;
        }
      }
    }
    return false;
  }
  tsParseTypeOrTypePredicateAnnotation(returnToken) {
    return this.tsInType(() => {
      const t = this.startNode();
      this.expect(returnToken);
      const node = this.startNode();
      const asserts = !!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this));
      if (asserts && this.match(78)) {
        let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();
        if (thisTypePredicate.type === "TSThisType") {
          node.parameterName = thisTypePredicate;
          node.asserts = true;
          node.typeAnnotation = null;
          thisTypePredicate = this.finishNode(node, "TSTypePredicate");
        } else {
          this.resetStartLocationFromNode(thisTypePredicate, node);
          thisTypePredicate.asserts = true;
        }
        t.typeAnnotation = thisTypePredicate;
        return this.finishNode(t, "TSTypeAnnotation");
      }
      const typePredicateVariable = this.tsIsIdentifier() && this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));
      if (!typePredicateVariable) {
        if (!asserts) {
          return this.tsParseTypeAnnotation(false, t);
        }

        node.parameterName = this.parseIdentifier();
        node.asserts = asserts;
        node.typeAnnotation = null;
        t.typeAnnotation = this.finishNode(node, "TSTypePredicate");
        return this.finishNode(t, "TSTypeAnnotation");
      }

      const type = this.tsParseTypeAnnotation(false);
      node.parameterName = typePredicateVariable;
      node.typeAnnotation = type;
      node.asserts = asserts;
      t.typeAnnotation = this.finishNode(node, "TSTypePredicate");
      return this.finishNode(t, "TSTypeAnnotation");
    });
  }
  tsTryParseTypeOrTypePredicateAnnotation() {
    return this.match(14) ? this.tsParseTypeOrTypePredicateAnnotation(14) : undefined;
  }
  tsTryParseTypeAnnotation() {
    return this.match(14) ? this.tsParseTypeAnnotation() : undefined;
  }
  tsTryParseType() {
    return this.tsEatThenParseType(14);
  }
  tsParseTypePredicatePrefix() {
    const id = this.parseIdentifier();
    if (this.isContextual(114) && !this.hasPrecedingLineBreak()) {
      this.next();
      return id;
    }
  }
  tsParseTypePredicateAsserts() {
    if (this.state.type !== 107) {
      return false;
    }
    const containsEsc = this.state.containsEsc;
    this.next();
    if (!tokenIsIdentifier(this.state.type) && !this.match(78)) {
      return false;
    }
    if (containsEsc) {
      this.raise(Errors.InvalidEscapedReservedWord, {
        at: this.state.lastTokStartLoc,
        reservedWord: "asserts"
      });
    }
    return true;
  }
  tsParseTypeAnnotation(eatColon = true, t = this.startNode()) {
    this.tsInType(() => {
      if (eatColon) this.expect(14);
      t.typeAnnotation = this.tsParseType();
    });
    return this.finishNode(t, "TSTypeAnnotation");
  }

  tsParseType() {
    assert(this.state.inType);
    const type = this.tsParseNonConditionalType();
    if (this.state.inDisallowConditionalTypesContext || this.hasPrecedingLineBreak() || !this.eat(81)) {
      return type;
    }
    const node = this.startNodeAtNode(type);
    node.checkType = type;
    node.extendsType = this.tsInDisallowConditionalTypesContext(() => this.tsParseNonConditionalType());
    this.expect(17);
    node.trueType = this.tsInAllowConditionalTypesContext(() => this.tsParseType());
    this.expect(14);
    node.falseType = this.tsInAllowConditionalTypesContext(() => this.tsParseType());
    return this.finishNode(node, "TSConditionalType");
  }
  isAbstractConstructorSignature() {
    return this.isContextual(122) && this.lookahead().type === 77;
  }
  tsParseNonConditionalType() {
    if (this.tsIsStartOfFunctionType()) {
      return this.tsParseFunctionOrConstructorType("TSFunctionType");
    }
    if (this.match(77)) {
      return this.tsParseFunctionOrConstructorType("TSConstructorType");
    } else if (this.isAbstractConstructorSignature()) {
      return this.tsParseFunctionOrConstructorType("TSConstructorType", true);
    }
    return this.tsParseUnionTypeOrHigher();
  }
  tsParseTypeAssertion() {
    if (this.getPluginOption("typescript", "disallowAmbiguousJSXLike")) {
      this.raise(TSErrors.ReservedTypeAssertion, {
        at: this.state.startLoc
      });
    }
    const node = this.startNode();
    node.typeAnnotation = this.tsInType(() => {
      this.next();
      return this.match(75) ? this.tsParseTypeReference() : this.tsParseType();
    });
    this.expect(48);
    node.expression = this.parseMaybeUnary();
    return this.finishNode(node, "TSTypeAssertion");
  }
  tsParseHeritageClause(token) {
    const originalStartLoc = this.state.startLoc;
    const delimitedList = this.tsParseDelimitedList("HeritageClauseElement", () => {
      const node = this.startNode();
      node.expression = this.tsParseEntityName();
      if (this.match(47)) {
        node.typeParameters = this.tsParseTypeArguments();
      }
      return this.finishNode(node, "TSExpressionWithTypeArguments");
    });
    if (!delimitedList.length) {
      this.raise(TSErrors.EmptyHeritageClauseType, {
        at: originalStartLoc,
        token
      });
    }
    return delimitedList;
  }
  tsParseInterfaceDeclaration(node, properties = {}) {
    if (this.hasFollowingLineBreak()) return null;
    this.expectContextual(127);
    if (properties.declare) node.declare = true;
    if (tokenIsIdentifier(this.state.type)) {
      node.id = this.parseIdentifier();
      this.checkIdentifier(node.id, BIND_TS_INTERFACE);
    } else {
      node.id = null;
      this.raise(TSErrors.MissingInterfaceName, {
        at: this.state.startLoc
      });
    }
    node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutModifiers.bind(this));
    if (this.eat(81)) {
      node.extends = this.tsParseHeritageClause("extends");
    }
    const body = this.startNode();
    body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));
    node.body = this.finishNode(body, "TSInterfaceBody");
    return this.finishNode(node, "TSInterfaceDeclaration");
  }
  tsParseTypeAliasDeclaration(node) {
    node.id = this.parseIdentifier();
    this.checkIdentifier(node.id, BIND_TS_TYPE);
    node.typeAnnotation = this.tsInType(() => {
      node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutModifiers.bind(this));
      this.expect(29);
      if (this.isContextual(112) && this.lookahead().type !== 16) {
        const node = this.startNode();
        this.next();
        return this.finishNode(node, "TSIntrinsicKeyword");
      }
      return this.tsParseType();
    });
    this.semicolon();
    return this.finishNode(node, "TSTypeAliasDeclaration");
  }
  tsInNoContext(cb) {
    const oldContext = this.state.context;
    this.state.context = [oldContext[0]];
    try {
      return cb();
    } finally {
      this.state.context = oldContext;
    }
  }

  tsInType(cb) {
    const oldInType = this.state.inType;
    this.state.inType = true;
    try {
      return cb();
    } finally {
      this.state.inType = oldInType;
    }
  }
  tsInDisallowConditionalTypesContext(cb) {
    const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext;
    this.state.inDisallowConditionalTypesContext = true;
    try {
      return cb();
    } finally {
      this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;
    }
  }
  tsInAllowConditionalTypesContext(cb) {
    const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext;
    this.state.inDisallowConditionalTypesContext = false;
    try {
      return cb();
    } finally {
      this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;
    }
  }
  tsEatThenParseType(token) {
    return !this.match(token) ? undefined : this.tsNextThenParseType();
  }
  tsExpectThenParseType(token) {
    return this.tsDoThenParseType(() => this.expect(token));
  }
  tsNextThenParseType() {
    return this.tsDoThenParseType(() => this.next());
  }
  tsDoThenParseType(cb) {
    return this.tsInType(() => {
      cb();
      return this.tsParseType();
    });
  }
  tsParseEnumMember() {
    const node = this.startNode();
    node.id = this.match(131) ? super.parseStringLiteral(this.state.value) : this.parseIdentifier(true);
    if (this.eat(29)) {
      node.initializer = super.parseMaybeAssignAllowIn();
    }
    return this.finishNode(node, "TSEnumMember");
  }
  tsParseEnumDeclaration(node, properties = {}) {
    if (properties.const) node.const = true;
    if (properties.declare) node.declare = true;
    this.expectContextual(124);
    node.id = this.parseIdentifier();
    this.checkIdentifier(node.id, node.const ? BIND_TS_CONST_ENUM : BIND_TS_ENUM);
    this.expect(5);
    node.members = this.tsParseDelimitedList("EnumMembers", this.tsParseEnumMember.bind(this));
    this.expect(8);
    return this.finishNode(node, "TSEnumDeclaration");
  }
  tsParseModuleBlock() {
    const node = this.startNode();
    this.scope.enter(SCOPE_OTHER);
    this.expect(5);
    super.parseBlockOrModuleBlockBody(node.body = [], undefined, true, 8);
    this.scope.exit();
    return this.finishNode(node, "TSModuleBlock");
  }
  tsParseModuleOrNamespaceDeclaration(node, nested = false) {
    node.id = this.parseIdentifier();
    if (!nested) {
      this.checkIdentifier(node.id, BIND_TS_NAMESPACE);
    }
    if (this.eat(16)) {
      const inner = this.startNode();
      this.tsParseModuleOrNamespaceDeclaration(inner, true);
      node.body = inner;
    } else {
      this.scope.enter(SCOPE_TS_MODULE);
      this.prodParam.enter(PARAM);
      node.body = this.tsParseModuleBlock();
      this.prodParam.exit();
      this.scope.exit();
    }
    return this.finishNode(node, "TSModuleDeclaration");
  }
  tsParseAmbientExternalModuleDeclaration(node) {
    if (this.isContextual(110)) {
      node.global = true;
      node.id = this.parseIdentifier();
    } else if (this.match(131)) {
      node.id = super.parseStringLiteral(this.state.value);
    } else {
      this.unexpected();
    }
    if (this.match(5)) {
      this.scope.enter(SCOPE_TS_MODULE);
      this.prodParam.enter(PARAM);
      node.body = this.tsParseModuleBlock();
      this.prodParam.exit();
      this.scope.exit();
    } else {
      this.semicolon();
    }
    return this.finishNode(node, "TSModuleDeclaration");
  }
  tsParseImportEqualsDeclaration(node, isExport) {
    node.isExport = isExport || false;
    node.id = this.parseIdentifier();
    this.checkIdentifier(node.id, BIND_FLAGS_TS_IMPORT);
    this.expect(29);
    const moduleReference = this.tsParseModuleReference();
    if (node.importKind === "type" && moduleReference.type !== "TSExternalModuleReference") {
      this.raise(TSErrors.ImportAliasHasImportType, {
        at: moduleReference
      });
    }
    node.moduleReference = moduleReference;
    this.semicolon();
    return this.finishNode(node, "TSImportEqualsDeclaration");
  }
  tsIsExternalModuleReference() {
    return this.isContextual(117) && this.lookaheadCharCode() === 40;
  }
  tsParseModuleReference() {
    return this.tsIsExternalModuleReference() ? this.tsParseExternalModuleReference() : this.tsParseEntityName(false);
  }
  tsParseExternalModuleReference() {
    const node = this.startNode();
    this.expectContextual(117);
    this.expect(10);
    if (!this.match(131)) {
      throw this.unexpected();
    }
    node.expression = super.parseExprAtom();
    this.expect(11);
    return this.finishNode(node, "TSExternalModuleReference");
  }

  tsLookAhead(f) {
    const state = this.state.clone();
    const res = f();
    this.state = state;
    return res;
  }
  tsTryParseAndCatch(f) {
    const result = this.tryParse(abort =>
    f() || abort());
    if (result.aborted || !result.node) return undefined;
    if (result.error) this.state = result.failState;
    return result.node;
  }
  tsTryParse(f) {
    const state = this.state.clone();
    const result = f();
    if (result !== undefined && result !== false) {
      return result;
    } else {
      this.state = state;
      return undefined;
    }
  }
  tsTryParseDeclare(nany) {
    if (this.isLineTerminator()) {
      return;
    }
    let starttype = this.state.type;
    let kind;
    if (this.isContextual(99)) {
      starttype = 74;
      kind = "let";
    }

    return this.tsInAmbientContext(() => {
      if (starttype === 68) {
        nany.declare = true;
        return super.parseFunctionStatement(nany, false, false);
      }
      if (starttype === 80) {
        nany.declare = true;
        return this.parseClass(nany, true, false);
      }
      if (starttype === 124) {
        return this.tsParseEnumDeclaration(nany, {
          declare: true
        });
      }
      if (starttype === 110) {
        return this.tsParseAmbientExternalModuleDeclaration(nany);
      }
      if (starttype === 75 || starttype === 74) {
        if (!this.match(75) || !this.isLookaheadContextual("enum")) {
          nany.declare = true;
          return this.parseVarStatement(nany, kind || this.state.value, true);
        }

        this.expect(75);
        return this.tsParseEnumDeclaration(nany, {
          const: true,
          declare: true
        });
      }
      if (starttype === 127) {
        const result = this.tsParseInterfaceDeclaration(nany, {
          declare: true
        });
        if (result) return result;
      }
      if (tokenIsIdentifier(starttype)) {
        return this.tsParseDeclaration(nany, this.state.value, true, null);
      }
    });
  }

  tsTryParseExportDeclaration() {
    return this.tsParseDeclaration(this.startNode(), this.state.value, true, null);
  }
  tsParseExpressionStatement(node, expr, decorators) {
    switch (expr.name) {
      case "declare":
        {
          const declaration = this.tsTryParseDeclare(node);
          if (declaration) {
            declaration.declare = true;
            return declaration;
          }
          break;
        }
      case "global":
        if (this.match(5)) {
          this.scope.enter(SCOPE_TS_MODULE);
          this.prodParam.enter(PARAM);
          const mod = node;
          mod.global = true;
          mod.id = expr;
          mod.body = this.tsParseModuleBlock();
          this.scope.exit();
          this.prodParam.exit();
          return this.finishNode(mod, "TSModuleDeclaration");
        }
        break;
      default:
        return this.tsParseDeclaration(node, expr.name, false, decorators);
    }
  }

  tsParseDeclaration(node, value, next, decorators) {
    switch (value) {
      case "abstract":
        if (this.tsCheckLineTerminator(next) && (this.match(80) || tokenIsIdentifier(this.state.type))) {
          return this.tsParseAbstractDeclaration(node, decorators);
        }
        break;
      case "module":
        if (this.tsCheckLineTerminator(next)) {
          if (this.match(131)) {
            return this.tsParseAmbientExternalModuleDeclaration(node);
          } else if (tokenIsIdentifier(this.state.type)) {
            return this.tsParseModuleOrNamespaceDeclaration(node);
          }
        }
        break;
      case "namespace":
        if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) {
          return this.tsParseModuleOrNamespaceDeclaration(node);
        }
        break;
      case "type":
        if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) {
          return this.tsParseTypeAliasDeclaration(node);
        }
        break;
    }
  }
  tsCheckLineTerminator(next) {
    if (next) {
      if (this.hasFollowingLineBreak()) return false;
      this.next();
      return true;
    }
    return !this.isLineTerminator();
  }
  tsTryParseGenericAsyncArrowFunction(startLoc) {
    if (!this.match(47)) {
      return undefined;
    }
    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
    this.state.maybeInArrowParameters = true;
    const res = this.tsTryParseAndCatch(() => {
      const node = this.startNodeAt(startLoc);
      node.typeParameters = this.tsParseTypeParameters();
      super.parseFunctionParams(node);
      node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();
      this.expect(19);
      return node;
    });
    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
    if (!res) {
      return undefined;
    }
    return super.parseArrowExpression(res, null, true);
  }

  tsParseTypeArgumentsInExpression() {
    if (this.reScan_lt() !== 47) {
      return undefined;
    }
    return this.tsParseTypeArguments();
  }
  tsParseTypeArguments() {
    const node = this.startNode();
    node.params = this.tsInType(() =>
    this.tsInNoContext(() => {
      this.expect(47);
      return this.tsParseDelimitedList("TypeParametersOrArguments", this.tsParseType.bind(this));
    }));
    if (node.params.length === 0) {
      this.raise(TSErrors.EmptyTypeArguments, {
        at: node
      });
    }
    this.expect(48);
    return this.finishNode(node, "TSTypeParameterInstantiation");
  }
  tsIsDeclarationStart() {
    return tokenIsTSDeclarationStart(this.state.type);
  }

  isExportDefaultSpecifier() {
    if (this.tsIsDeclarationStart()) return false;
    return super.isExportDefaultSpecifier();
  }
  parseAssignableListItem(allowModifiers, decorators) {
    const startLoc = this.state.startLoc;
    let accessibility;
    let readonly = false;
    let override = false;
    if (allowModifiers !== undefined) {
      const modified = {};
      this.tsParseModifiers({
        modified,
        allowedModifiers: ["public", "private", "protected", "override", "readonly"]
      });
      accessibility = modified.accessibility;
      override = modified.override;
      readonly = modified.readonly;
      if (allowModifiers === false && (accessibility || readonly || override)) {
        this.raise(TSErrors.UnexpectedParameterModifier, {
          at: startLoc
        });
      }
    }
    const left = this.parseMaybeDefault();
    this.parseAssignableListItemTypes(left);
    const elt = this.parseMaybeDefault(left.loc.start, left);
    if (accessibility || readonly || override) {
      const pp = this.startNodeAt(startLoc);
      if (decorators.length) {
        pp.decorators = decorators;
      }
      if (accessibility) pp.accessibility = accessibility;
      if (readonly) pp.readonly = readonly;
      if (override) pp.override = override;
      if (elt.type !== "Identifier" && elt.type !== "AssignmentPattern") {
        this.raise(TSErrors.UnsupportedParameterPropertyKind, {
          at: pp
        });
      }
      pp.parameter = elt;
      return this.finishNode(pp, "TSParameterProperty");
    }
    if (decorators.length) {
      left.decorators = decorators;
    }
    return elt;
  }
  isSimpleParameter(node) {
    return node.type === "TSParameterProperty" && super.isSimpleParameter(node.parameter) || super.isSimpleParameter(node);
  }
  parseFunctionBodyAndFinish(node, type, isMethod = false) {
    if (this.match(14)) {
      node.returnType = this.tsParseTypeOrTypePredicateAnnotation(14);
    }
    const bodilessType = type === "FunctionDeclaration" ? "TSDeclareFunction" : type === "ClassMethod" || type === "ClassPrivateMethod" ? "TSDeclareMethod" : undefined;
    if (bodilessType && !this.match(5) && this.isLineTerminator()) {
      return this.finishNode(node, bodilessType);
    }
    if (bodilessType === "TSDeclareFunction" && this.state.isAmbientContext) {
      this.raise(TSErrors.DeclareFunctionHasImplementation, {
        at: node
      });
      if (node.declare) {
        return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);
      }
    }
    return super.parseFunctionBodyAndFinish(node, type, isMethod);
  }
  registerFunctionStatementId(node) {
    if (!node.body && node.id) {
      this.checkIdentifier(node.id, BIND_TS_AMBIENT);
    } else {
      super.registerFunctionStatementId(node);
    }
  }
  tsCheckForInvalidTypeCasts(items) {
    items.forEach(node => {
      if ((node == null ? void 0 : node.type) === "TSTypeCastExpression") {
        this.raise(TSErrors.UnexpectedTypeAnnotation, {
          at: node.typeAnnotation
        });
      }
    });
  }
  toReferencedList(exprList,
  isInParens) {
    this.tsCheckForInvalidTypeCasts(exprList);
    return exprList;
  }
  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {
    const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);
    if (node.type === "ArrayExpression") {
      this.tsCheckForInvalidTypeCasts(node.elements);
    }
    return node;
  }
  parseSubscript(base, startLoc, noCalls, state) {
    if (!this.hasPrecedingLineBreak() && this.match(35)) {
      this.state.canStartJSXElement = false;
      this.next();
      const nonNullExpression = this.startNodeAt(startLoc);
      nonNullExpression.expression = base;
      return this.finishNode(nonNullExpression, "TSNonNullExpression");
    }
    let isOptionalCall = false;
    if (this.match(18) && this.lookaheadCharCode() === 60) {
      if (noCalls) {
        state.stop = true;
        return base;
      }
      state.optionalChainMember = isOptionalCall = true;
      this.next();
    }

    if (this.match(47) || this.match(51)) {
      let missingParenErrorLoc;
      const result = this.tsTryParseAndCatch(() => {
        if (!noCalls && this.atPossibleAsyncArrow(base)) {
          const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(startLoc);
          if (asyncArrowFn) {
            return asyncArrowFn;
          }
        }
        const typeArguments = this.tsParseTypeArgumentsInExpression();
        if (!typeArguments) return;
        if (isOptionalCall && !this.match(10)) {
          missingParenErrorLoc = this.state.curPosition();
          return;
        }
        if (tokenIsTemplate(this.state.type)) {
          const result = super.parseTaggedTemplateExpression(base, startLoc, state);
          result.typeParameters = typeArguments;
          return result;
        }
        if (!noCalls && this.eat(10)) {
          const node = this.startNodeAt(startLoc);
          node.callee = base;
          node.arguments = this.parseCallExpressionArguments(11, false);

          this.tsCheckForInvalidTypeCasts(node.arguments);
          node.typeParameters = typeArguments;
          if (state.optionalChainMember) {
            node.optional = isOptionalCall;
          }
          return this.finishCallExpression(node, state.optionalChainMember);
        }
        const tokenType = this.state.type;
        if (
        tokenType === 48 ||
        tokenType === 52 ||
        tokenType !== 10 && tokenCanStartExpression(tokenType) && !this.hasPrecedingLineBreak()) {
          return;
        }
        const node = this.startNodeAt(startLoc);
        node.expression = base;
        node.typeParameters = typeArguments;
        return this.finishNode(node, "TSInstantiationExpression");
      });
      if (missingParenErrorLoc) {
        this.unexpected(missingParenErrorLoc, 10);
      }
      if (result) {
        if (result.type === "TSInstantiationExpression" && (this.match(16) || this.match(18) && this.lookaheadCharCode() !== 40)) {
          this.raise(TSErrors.InvalidPropertyAccessAfterInstantiationExpression, {
            at: this.state.startLoc
          });
        }
        return result;
      }
    }
    return super.parseSubscript(base, startLoc, noCalls, state);
  }
  parseNewCallee(node) {
    var _callee$extra;
    super.parseNewCallee(node);
    const {
      callee
    } = node;
    if (callee.type === "TSInstantiationExpression" && !((_callee$extra = callee.extra) != null && _callee$extra.parenthesized)) {
      node.typeParameters = callee.typeParameters;
      node.callee = callee.expression;
    }
  }
  parseExprOp(left, leftStartLoc, minPrec) {
    let isSatisfies;
    if (tokenOperatorPrecedence(58) > minPrec && !this.hasPrecedingLineBreak() && (this.isContextual(93) || (isSatisfies = this.isContextual(118)))) {
      const node = this.startNodeAt(leftStartLoc);
      node.expression = left;
      node.typeAnnotation = this.tsInType(() => {
        this.next();
        if (this.match(75)) {
          if (isSatisfies) {
            this.raise(Errors.UnexpectedKeyword, {
              at: this.state.startLoc,
              keyword: "const"
            });
          }
          return this.tsParseTypeReference();
        }
        return this.tsParseType();
      });
      this.finishNode(node, isSatisfies ? "TSSatisfiesExpression" : "TSAsExpression");
      this.reScan_lt_gt();
      return this.parseExprOp(
      node, leftStartLoc, minPrec);
    }
    return super.parseExprOp(left, leftStartLoc, minPrec);
  }
  checkReservedWord(word, startLoc, checkKeywords, isBinding) {
    if (!this.state.isAmbientContext) {
      super.checkReservedWord(word, startLoc, checkKeywords, isBinding);
    }
  }
  checkImportReflection(node) {
    super.checkImportReflection(node);
    if (node.module && node.importKind !== "value") {
      this.raise(TSErrors.ImportReflectionHasImportType, {
        at: node.specifiers[0].loc.start
      });
    }
  }

  checkDuplicateExports() {}
  parseImport(node) {
    node.importKind = "value";
    if (tokenIsIdentifier(this.state.type) || this.match(55) || this.match(5)) {
      let ahead = this.lookahead();
      if (this.isContextual(128) &&
      ahead.type !== 12 &&
      ahead.type !== 97 &&
      ahead.type !== 29) {
        node.importKind = "type";
        this.next();
        ahead = this.lookahead();
      }
      if (tokenIsIdentifier(this.state.type) && ahead.type === 29) {
        return this.tsParseImportEqualsDeclaration(node);
      }
    }
    const importNode = super.parseImport(node);

    if (importNode.importKind === "type" &&
    importNode.specifiers.length > 1 &&
    importNode.specifiers[0].type === "ImportDefaultSpecifier") {
      this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, {
        at: importNode
      });
    }
    return importNode;
  }
  parseExport(node, decorators) {
    if (this.match(83)) {
      this.next();
      if (this.isContextual(128) && this.lookaheadCharCode() !== 61) {
        node.importKind = "type";
        this.next();
      } else {
        node.importKind = "value";
      }
      return this.tsParseImportEqualsDeclaration(node, true);
    } else if (this.eat(29)) {
      const assign = node;
      assign.expression = super.parseExpression();
      this.semicolon();
      return this.finishNode(assign, "TSExportAssignment");
    } else if (this.eatContextual(93)) {
      const decl = node;
      this.expectContextual(126);
      decl.id = this.parseIdentifier();
      this.semicolon();
      return this.finishNode(decl, "TSNamespaceExportDeclaration");
    } else {
      if (this.isContextual(128) && this.lookahead().type === 5) {
        this.next();
        node.exportKind = "type";
      } else {
        node.exportKind = "value";
      }
      return super.parseExport(node, decorators);
    }
  }
  isAbstractClass() {
    return this.isContextual(122) && this.lookahead().type === 80;
  }
  parseExportDefaultExpression() {
    if (this.isAbstractClass()) {
      const cls = this.startNode();
      this.next();
      cls.abstract = true;
      return this.parseClass(cls, true, true);
    }

    if (this.match(127)) {
      const result = this.tsParseInterfaceDeclaration(this.startNode());
      if (result) return result;
    }
    return super.parseExportDefaultExpression();
  }
  parseVarStatement(node, kind, allowMissingInitializer = false) {
    const {
      isAmbientContext
    } = this.state;
    const declaration = super.parseVarStatement(node, kind, allowMissingInitializer || isAmbientContext);
    if (!isAmbientContext) return declaration;
    for (const {
      id,
      init
    } of declaration.declarations) {
      if (!init) continue;

      if (kind !== "const" || !!id.typeAnnotation) {
        this.raise(TSErrors.InitializerNotAllowedInAmbientContext, {
          at: init
        });
      } else if (init.type !== "StringLiteral" && init.type !== "BooleanLiteral" && init.type !== "NumericLiteral" && init.type !== "BigIntLiteral" && (init.type !== "TemplateLiteral" || init.expressions.length > 0) && !isPossiblyLiteralEnum(init)) {
        this.raise(TSErrors.ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference, {
          at: init
        });
      }
    }
    return declaration;
  }
  parseStatementContent(flags, decorators) {
    if (this.match(75) && this.isLookaheadContextual("enum")) {
      const node = this.startNode();
      this.expect(75);
      return this.tsParseEnumDeclaration(node, {
        const: true
      });
    }
    if (this.isContextual(124)) {
      return this.tsParseEnumDeclaration(this.startNode());
    }
    if (this.isContextual(127)) {
      const result = this.tsParseInterfaceDeclaration(this.startNode());
      if (result) return result;
    }
    return super.parseStatementContent(flags, decorators);
  }
  parseAccessModifier() {
    return this.tsParseModifier(["public", "protected", "private"]);
  }
  tsHasSomeModifiers(member, modifiers) {
    return modifiers.some(modifier => {
      if (tsIsAccessModifier(modifier)) {
        return member.accessibility === modifier;
      }
      return !!member[modifier];
    });
  }
  tsIsStartOfStaticBlocks() {
    return this.isContextual(104) && this.lookaheadCharCode() === 123;
  }
  parseClassMember(classBody, member, state) {
    const modifiers = ["declare", "private", "public", "protected", "override", "abstract", "readonly", "static"];
    this.tsParseModifiers({
      modified: member,
      allowedModifiers: modifiers,
      disallowedModifiers: ["in", "out"],
      stopOnStartOfClassStaticBlock: true,
      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions
    });
    const callParseClassMemberWithIsStatic = () => {
      if (this.tsIsStartOfStaticBlocks()) {
        this.next();
        this.next();
        if (this.tsHasSomeModifiers(member, modifiers)) {
          this.raise(TSErrors.StaticBlockCannotHaveModifier, {
            at: this.state.curPosition()
          });
        }
        super.parseClassStaticBlock(classBody, member);
      } else {
        this.parseClassMemberWithIsStatic(classBody, member, state, !!member.static);
      }
    };
    if (member.declare) {
      this.tsInAmbientContext(callParseClassMemberWithIsStatic);
    } else {
      callParseClassMemberWithIsStatic();
    }
  }
  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {
    const idx = this.tsTryParseIndexSignature(member);
    if (idx) {
      classBody.body.push(idx);
      if (member.abstract) {
        this.raise(TSErrors.IndexSignatureHasAbstract, {
          at: member
        });
      }
      if (member.accessibility) {
        this.raise(TSErrors.IndexSignatureHasAccessibility, {
          at: member,
          modifier: member.accessibility
        });
      }
      if (member.declare) {
        this.raise(TSErrors.IndexSignatureHasDeclare, {
          at: member
        });
      }
      if (member.override) {
        this.raise(TSErrors.IndexSignatureHasOverride, {
          at: member
        });
      }
      return;
    }
    if (!this.state.inAbstractClass && member.abstract) {
      this.raise(TSErrors.NonAbstractClassHasAbstractMethod, {
        at: member
      });
    }
    if (member.override) {
      if (!state.hadSuperClass) {
        this.raise(TSErrors.OverrideNotInSubClass, {
          at: member
        });
      }
    }

    super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);
  }
  parsePostMemberNameModifiers(methodOrProp) {
    const optional = this.eat(17);
    if (optional) methodOrProp.optional = true;
    if (methodOrProp.readonly && this.match(10)) {
      this.raise(TSErrors.ClassMethodHasReadonly, {
        at: methodOrProp
      });
    }
    if (methodOrProp.declare && this.match(10)) {
      this.raise(TSErrors.ClassMethodHasDeclare, {
        at: methodOrProp
      });
    }
  }

  parseExpressionStatement(node, expr, decorators) {
    const decl = expr.type === "Identifier" ?
    this.tsParseExpressionStatement(node, expr, decorators) : undefined;
    return decl || super.parseExpressionStatement(node, expr, decorators);
  }

  shouldParseExportDeclaration() {
    if (this.tsIsDeclarationStart()) return true;
    return super.shouldParseExportDeclaration();
  }

  parseConditional(expr, startLoc, refExpressionErrors) {
    if (!this.state.maybeInArrowParameters || !this.match(17)) {
      return super.parseConditional(expr, startLoc, refExpressionErrors);
    }
    const result = this.tryParse(() => super.parseConditional(expr, startLoc));
    if (!result.node) {
      if (result.error) {
        super.setOptionalParametersError(refExpressionErrors, result.error);
      }
      return expr;
    }
    if (result.error) this.state = result.failState;
    return result.node;
  }

  parseParenItem(node, startLoc) {
    node = super.parseParenItem(node, startLoc);
    if (this.eat(17)) {
      node.optional = true;
      this.resetEndLocation(node);
    }
    if (this.match(14)) {
      const typeCastNode = this.startNodeAt(startLoc);
      typeCastNode.expression = node;
      typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();
      return this.finishNode(typeCastNode, "TSTypeCastExpression");
    }
    return node;
  }
  parseExportDeclaration(node) {
    if (!this.state.isAmbientContext && this.isContextual(123)) {
      return this.tsInAmbientContext(() => this.parseExportDeclaration(node));
    }

    const startLoc = this.state.startLoc;
    const isDeclare = this.eatContextual(123);
    if (isDeclare && (this.isContextual(123) || !this.shouldParseExportDeclaration())) {
      throw this.raise(TSErrors.ExpectedAmbientAfterExportDeclare, {
        at: this.state.startLoc
      });
    }
    const isIdentifier = tokenIsIdentifier(this.state.type);
    const declaration = isIdentifier && this.tsTryParseExportDeclaration() || super.parseExportDeclaration(node);
    if (!declaration) return null;
    if (declaration.type === "TSInterfaceDeclaration" || declaration.type === "TSTypeAliasDeclaration" || isDeclare) {
      node.exportKind = "type";
    }
    if (isDeclare) {
      this.resetStartLocation(declaration, startLoc);
      declaration.declare = true;
    }
    return declaration;
  }
  parseClassId(node, isStatement, optionalId,
  bindingType) {
    if ((!isStatement || optionalId) && this.isContextual(111)) {
      return;
    }
    super.parseClassId(node, isStatement, optionalId, node.declare ? BIND_TS_AMBIENT : BIND_CLASS);
    const typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutModifiers.bind(this));
    if (typeParameters) node.typeParameters = typeParameters;
  }
  parseClassPropertyAnnotation(node) {
    if (!node.optional) {
      if (this.eat(35)) {
        node.definite = true;
      } else if (this.eat(17)) {
        node.optional = true;
      }
    }
    const type = this.tsTryParseTypeAnnotation();
    if (type) node.typeAnnotation = type;
  }
  parseClassProperty(node) {
    this.parseClassPropertyAnnotation(node);
    if (this.state.isAmbientContext && !(node.readonly && !node.typeAnnotation) && this.match(29)) {
      this.raise(TSErrors.DeclareClassFieldHasInitializer, {
        at: this.state.startLoc
      });
    }
    if (node.abstract && this.match(29)) {
      const {
        key
      } = node;
      this.raise(TSErrors.AbstractPropertyHasInitializer, {
        at: this.state.startLoc,
        propertyName: key.type === "Identifier" && !node.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`
      });
    }
    return super.parseClassProperty(node);
  }
  parseClassPrivateProperty(node) {
    if (node.abstract) {
      this.raise(TSErrors.PrivateElementHasAbstract, {
        at: node
      });
    }

    if (node.accessibility) {
      this.raise(TSErrors.PrivateElementHasAccessibility, {
        at: node,
        modifier: node.accessibility
      });
    }
    this.parseClassPropertyAnnotation(node);
    return super.parseClassPrivateProperty(node);
  }
  parseClassAccessorProperty(node) {
    this.parseClassPropertyAnnotation(node);
    if (node.optional) {
      this.raise(TSErrors.AccessorCannotBeOptional, {
        at: node
      });
    }
    return super.parseClassAccessorProperty(node);
  }
  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
    const typeParameters = this.tsTryParseTypeParameters();
    if (typeParameters && isConstructor) {
      this.raise(TSErrors.ConstructorHasTypeParameters, {
        at: typeParameters
      });
    }

    const {
      declare = false,
      kind
    } = method;
    if (declare && (kind === "get" || kind === "set")) {
      this.raise(TSErrors.DeclareAccessor, {
        at: method,
        kind
      });
    }
    if (typeParameters) method.typeParameters = typeParameters;
    super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);
  }
  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {
    const typeParameters = this.tsTryParseTypeParameters();
    if (typeParameters) method.typeParameters = typeParameters;
    super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);
  }
  declareClassPrivateMethodInScope(node, kind) {
    if (node.type === "TSDeclareMethod") return;
    if (node.type === "MethodDefinition" && !node.value.body) return;
    super.declareClassPrivateMethodInScope(node, kind);
  }
  parseClassSuper(node) {
    super.parseClassSuper(node);
    if (node.superClass && (this.match(47) || this.match(51))) {
      node.superTypeParameters = this.tsParseTypeArgumentsInExpression();
    }
    if (this.eatContextual(111)) {
      node.implements = this.tsParseHeritageClause("implements");
    }
  }
  parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {
    const typeParameters = this.tsTryParseTypeParameters();
    if (typeParameters) prop.typeParameters = typeParameters;
    return super.parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);
  }
  parseFunctionParams(node, allowModifiers) {
    const typeParameters = this.tsTryParseTypeParameters();
    if (typeParameters) node.typeParameters = typeParameters;
    super.parseFunctionParams(node, allowModifiers);
  }

  parseVarId(decl, kind) {
    super.parseVarId(decl, kind);
    if (decl.id.type === "Identifier" && !this.hasPrecedingLineBreak() && this.eat(35)) {
      decl.definite = true;
    }
    const type = this.tsTryParseTypeAnnotation();
    if (type) {
      decl.id.typeAnnotation = type;
      this.resetEndLocation(decl.id);
    }
  }

  parseAsyncArrowFromCallExpression(node, call) {
    if (this.match(14)) {
      node.returnType = this.tsParseTypeAnnotation();
    }
    return super.parseAsyncArrowFromCallExpression(node, call);
  }
  parseMaybeAssign(refExpressionErrors, afterLeftParse) {
    var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2, _jsx4, _typeCast3;

    let state;
    let jsx;
    let typeCast;
    if (this.hasPlugin("jsx") && (this.match(140) || this.match(47))) {
      state = this.state.clone();
      jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);

      if (!jsx.error) return jsx.node;

      const {
        context
      } = this.state;
      const currentContext = context[context.length - 1];
      if (currentContext === types.j_oTag || currentContext === types.j_expr) {
        context.pop();
      }
    }
    if (!((_jsx = jsx) != null && _jsx.error) && !this.match(47)) {
      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
    }

    if (!state || state === this.state) state = this.state.clone();
    let typeParameters;
    const arrow = this.tryParse(abort => {
      var _expr$extra, _typeParameters;
      typeParameters = this.tsParseTypeParameters();
      const expr = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
      if (expr.type !== "ArrowFunctionExpression" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) {
        abort();
      }

      if (((_typeParameters = typeParameters) == null ? void 0 : _typeParameters.params.length) !== 0) {
        this.resetStartLocationFromNode(expr, typeParameters);
      }
      expr.typeParameters = typeParameters;
      return expr;
    }, state);

    if (!arrow.error && !arrow.aborted) {
      if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);
      return arrow.node;
    }
    if (!jsx) {
      assert(!this.hasPlugin("jsx"));

      typeCast = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);
      if (!typeCast.error) return typeCast.node;
    }
    if ((_jsx2 = jsx) != null && _jsx2.node) {
      this.state = jsx.failState;
      return jsx.node;
    }
    if (arrow.node) {
      this.state = arrow.failState;
      if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);
      return arrow.node;
    }
    if ((_typeCast = typeCast) != null && _typeCast.node) {
      this.state = typeCast.failState;
      return typeCast.node;
    }
    if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;
    if (arrow.thrown) throw arrow.error;
    if ((_typeCast2 = typeCast) != null && _typeCast2.thrown) throw typeCast.error;
    throw ((_jsx4 = jsx) == null ? void 0 : _jsx4.error) || arrow.error || ((_typeCast3 = typeCast) == null ? void 0 : _typeCast3.error);
  }
  reportReservedArrowTypeParam(node) {
    var _node$extra;
    if (node.params.length === 1 && !((_node$extra = node.extra) != null && _node$extra.trailingComma) && this.getPluginOption("typescript", "disallowAmbiguousJSXLike")) {
      this.raise(TSErrors.ReservedArrowTypeParam, {
        at: node
      });
    }
  }

  parseMaybeUnary(refExpressionErrors, sawUnary) {
    if (!this.hasPlugin("jsx") && this.match(47)) {
      return this.tsParseTypeAssertion();
    } else {
      return super.parseMaybeUnary(refExpressionErrors, sawUnary);
    }
  }
  parseArrow(node) {
    if (this.match(14)) {

      const result = this.tryParse(abort => {
        const returnType = this.tsParseTypeOrTypePredicateAnnotation(14);
        if (this.canInsertSemicolon() || !this.match(19)) abort();
        return returnType;
      });
      if (result.aborted) return;
      if (!result.thrown) {
        if (result.error) this.state = result.failState;
        node.returnType = result.node;
      }
    }
    return super.parseArrow(node);
  }

  parseAssignableListItemTypes(param) {
    if (this.eat(17)) {
      if (param.type !== "Identifier" && !this.state.isAmbientContext && !this.state.inType) {
        this.raise(TSErrors.PatternIsOptional, {
          at: param
        });
      }
      param.optional = true;
    }
    const type = this.tsTryParseTypeAnnotation();
    if (type) param.typeAnnotation = type;
    this.resetEndLocation(param);
    return param;
  }
  isAssignable(node, isBinding) {
    switch (node.type) {
      case "TSTypeCastExpression":
        return this.isAssignable(node.expression, isBinding);
      case "TSParameterProperty":
        return true;
      default:
        return super.isAssignable(node, isBinding);
    }
  }
  toAssignable(node, isLHS = false) {
    switch (node.type) {
      case "ParenthesizedExpression":
        this.toAssignableParenthesizedExpression(node, isLHS);
        break;
      case "TSAsExpression":
      case "TSSatisfiesExpression":
      case "TSNonNullExpression":
      case "TSTypeAssertion":
        if (isLHS) {
          this.expressionScope.recordArrowParameterBindingError(TSErrors.UnexpectedTypeCastInParameter, {
            at: node
          });
        } else {
          this.raise(TSErrors.UnexpectedTypeCastInParameter, {
            at: node
          });
        }
        this.toAssignable(node.expression, isLHS);
        break;
      case "AssignmentExpression":
        if (!isLHS && node.left.type === "TSTypeCastExpression") {
          node.left = this.typeCastToParameter(node.left);
        }
      default:
        super.toAssignable(node, isLHS);
    }
  }
  toAssignableParenthesizedExpression(node, isLHS) {
    switch (node.expression.type) {
      case "TSAsExpression":
      case "TSSatisfiesExpression":
      case "TSNonNullExpression":
      case "TSTypeAssertion":
      case "ParenthesizedExpression":
        this.toAssignable(node.expression, isLHS);
        break;
      default:
        super.toAssignable(node, isLHS);
    }
  }
  checkToRestConversion(node, allowPattern) {
    switch (node.type) {
      case "TSAsExpression":
      case "TSSatisfiesExpression":
      case "TSTypeAssertion":
      case "TSNonNullExpression":
        this.checkToRestConversion(node.expression, false);
        break;
      default:
        super.checkToRestConversion(node, allowPattern);
    }
  }

  isValidLVal(type, isUnparenthesizedInAssign, binding) {
    return getOwn$1({
      TSTypeCastExpression: true,
      TSParameterProperty: "parameter",
      TSNonNullExpression: "expression",
      TSAsExpression: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && ["expression", true],
      TSSatisfiesExpression: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && ["expression", true],
      TSTypeAssertion: (binding !== BIND_NONE || !isUnparenthesizedInAssign) && ["expression", true]
    }, type) || super.isValidLVal(type, isUnparenthesizedInAssign, binding);
  }
  parseBindingAtom() {
    switch (this.state.type) {
      case 78:
        return this.parseIdentifier(true);
      default:
        return super.parseBindingAtom();
    }
  }
  parseMaybeDecoratorArguments(expr) {
    if (this.match(47) || this.match(51)) {
      const typeArguments = this.tsParseTypeArgumentsInExpression();
      if (this.match(10)) {
        const call = super.parseMaybeDecoratorArguments(expr);
        call.typeParameters = typeArguments;
        return call;
      }
      this.unexpected(null, 10);
    }
    return super.parseMaybeDecoratorArguments(expr);
  }
  checkCommaAfterRest(close) {
    if (this.state.isAmbientContext && this.match(12) && this.lookaheadCharCode() === close) {
      this.next();
      return false;
    } else {
      return super.checkCommaAfterRest(close);
    }
  }

  isClassMethod() {
    return this.match(47) || super.isClassMethod();
  }
  isClassProperty() {
    return this.match(35) || this.match(14) || super.isClassProperty();
  }
  parseMaybeDefault(startLoc, left) {
    const node = super.parseMaybeDefault(startLoc, left);
    if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {
      this.raise(TSErrors.TypeAnnotationAfterAssign, {
        at: node.typeAnnotation
      });
    }
    return node;
  }

  getTokenFromCode(code) {
    if (this.state.inType) {
      if (code === 62) {
        return this.finishOp(48, 1);
      }
      if (code === 60) {
        return this.finishOp(47, 1);
      }
    }
    return super.getTokenFromCode(code);
  }

  reScan_lt_gt() {
    const {
      type
    } = this.state;
    if (type === 47) {
      this.state.pos -= 1;
      this.readToken_lt();
    } else if (type === 48) {
      this.state.pos -= 1;
      this.readToken_gt();
    }
  }
  reScan_lt() {
    const {
      type
    } = this.state;
    if (type === 51) {
      this.state.pos -= 2;
      this.finishOp(47, 1);
      return 47;
    }
    return type;
  }
  toAssignableList(exprList, trailingCommaLoc, isLHS) {
    for (let i = 0; i < exprList.length; i++) {
      const expr = exprList[i];
      if ((expr == null ? void 0 : expr.type) === "TSTypeCastExpression") {
        exprList[i] = this.typeCastToParameter(expr);
      }
    }
    super.toAssignableList(exprList, trailingCommaLoc, isLHS);
  }
  typeCastToParameter(node) {
    node.expression.typeAnnotation = node.typeAnnotation;
    this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);
    return node.expression;
  }
  shouldParseArrow(params) {
    if (this.match(14)) {
      return params.every(expr => this.isAssignable(expr, true));
    }
    return super.shouldParseArrow(params);
  }
  shouldParseAsyncArrow() {
    return this.match(14) || super.shouldParseAsyncArrow();
  }
  canHaveLeadingDecorator() {
    return super.canHaveLeadingDecorator() || this.isAbstractClass();
  }
  jsxParseOpeningElementAfterName(node) {
    if (this.match(47) || this.match(51)) {
      const typeArguments = this.tsTryParseAndCatch(() =>
      this.tsParseTypeArgumentsInExpression());
      if (typeArguments) node.typeParameters = typeArguments;
    }
    return super.jsxParseOpeningElementAfterName(node);
  }
  getGetterSetterExpectedParamCount(method) {
    const baseCount = super.getGetterSetterExpectedParamCount(method);
    const params = this.getObjectOrClassMethodParams(method);
    const firstParam = params[0];
    const hasContextParam = firstParam && this.isThisParam(firstParam);
    return hasContextParam ? baseCount + 1 : baseCount;
  }
  parseCatchClauseParam() {
    const param = super.parseCatchClauseParam();
    const type = this.tsTryParseTypeAnnotation();
    if (type) {
      param.typeAnnotation = type;
      this.resetEndLocation(param);
    }
    return param;
  }
  tsInAmbientContext(cb) {
    const oldIsAmbientContext = this.state.isAmbientContext;
    this.state.isAmbientContext = true;
    try {
      return cb();
    } finally {
      this.state.isAmbientContext = oldIsAmbientContext;
    }
  }
  parseClass(node, isStatement, optionalId) {
    const oldInAbstractClass = this.state.inAbstractClass;
    this.state.inAbstractClass = !!node.abstract;
    try {
      return super.parseClass(node, isStatement, optionalId);
    } finally {
      this.state.inAbstractClass = oldInAbstractClass;
    }
  }
  tsParseAbstractDeclaration(node, decorators) {
    if (this.match(80)) {
      node.abstract = true;
      return this.maybeTakeDecorators(decorators, this.parseClass(node, true, false));
    } else if (this.isContextual(127)) {

      if (!this.hasFollowingLineBreak()) {
        node.abstract = true;
        this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, {
          at: node
        });
        return this.tsParseInterfaceDeclaration(node);
      }
    } else {
      this.unexpected(null, 80);
    }
  }
  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope) {
    const method = super.parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);
    if (method.abstract) {
      const hasBody = this.hasPlugin("estree") ?
      !!method.value.body : !!method.body;
      if (hasBody) {
        const {
          key
        } = method;
        this.raise(TSErrors.AbstractMethodHasImplementation, {
          at: method,
          methodName: key.type === "Identifier" && !method.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`
        });
      }
    }
    return method;
  }
  tsParseTypeParameterName() {
    const typeName = this.parseIdentifier();
    return typeName.name;
  }
  shouldParseAsAmbientContext() {
    return !!this.getPluginOption("typescript", "dts");
  }
  parse() {
    if (this.shouldParseAsAmbientContext()) {
      this.state.isAmbientContext = true;
    }
    return super.parse();
  }
  getExpression() {
    if (this.shouldParseAsAmbientContext()) {
      this.state.isAmbientContext = true;
    }
    return super.getExpression();
  }
  parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly) {
    if (!isString && isMaybeTypeOnly) {
      this.parseTypeOnlyImportExportSpecifier(node, false, isInTypeExport);
      return this.finishNode(node, "ExportSpecifier");
    }
    node.exportKind = "value";
    return super.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly);
  }
  parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly,
  bindingType) {
    if (!importedIsString && isMaybeTypeOnly) {
      this.parseTypeOnlyImportExportSpecifier(specifier, true, isInTypeOnlyImport);
      return this.finishNode(specifier, "ImportSpecifier");
    }
    specifier.importKind = "value";
    return super.parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, isInTypeOnlyImport ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT);
  }
  parseTypeOnlyImportExportSpecifier(node, isImport, isInTypeOnlyImportExport) {
    const leftOfAsKey = isImport ? "imported" : "local";
    const rightOfAsKey = isImport ? "local" : "exported";
    let leftOfAs = node[leftOfAsKey];
    let rightOfAs;
    let hasTypeSpecifier = false;
    let canParseAsKeyword = true;
    const loc = leftOfAs.loc.start;

    if (this.isContextual(93)) {
      const firstAs = this.parseIdentifier();
      if (this.isContextual(93)) {
        const secondAs = this.parseIdentifier();
        if (tokenIsKeywordOrIdentifier(this.state.type)) {
          hasTypeSpecifier = true;
          leftOfAs = firstAs;
          rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName();
          canParseAsKeyword = false;
        } else {
          rightOfAs = secondAs;
          canParseAsKeyword = false;
        }
      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {
        canParseAsKeyword = false;
        rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName();
      } else {
        hasTypeSpecifier = true;
        leftOfAs = firstAs;
      }
    } else if (tokenIsKeywordOrIdentifier(this.state.type)) {
      hasTypeSpecifier = true;
      if (isImport) {
        leftOfAs = this.parseIdentifier(true);
        if (!this.isContextual(93)) {
          this.checkReservedWord(leftOfAs.name, leftOfAs.loc.start, true, true);
        }
      } else {
        leftOfAs = this.parseModuleExportName();
      }
    }
    if (hasTypeSpecifier && isInTypeOnlyImportExport) {
      this.raise(isImport ? TSErrors.TypeModifierIsUsedInTypeImports : TSErrors.TypeModifierIsUsedInTypeExports, {
        at: loc
      });
    }
    node[leftOfAsKey] = leftOfAs;
    node[rightOfAsKey] = rightOfAs;
    const kindKey = isImport ? "importKind" : "exportKind";
    node[kindKey] = hasTypeSpecifier ? "type" : "value";
    if (canParseAsKeyword && this.eatContextual(93)) {
      node[rightOfAsKey] = isImport ? this.parseIdentifier() : this.parseModuleExportName();
    }
    if (!node[rightOfAsKey]) {
      node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);
    }
    if (isImport) {
      this.checkIdentifier(node[rightOfAsKey], hasTypeSpecifier ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT);
    }
  }
});
function isPossiblyLiteralEnum(expression) {
  if (expression.type !== "MemberExpression") return false;
  const {
    computed,
    property
  } = expression;
  if (computed && property.type !== "StringLiteral" && (property.type !== "TemplateLiteral" || property.expressions.length > 0)) {
    return false;
  }
  return isUncomputedMemberExpressionChain(expression.object);
}
function isUncomputedMemberExpressionChain(expression) {
  if (expression.type === "Identifier") return true;
  if (expression.type !== "MemberExpression") return false;
  if (expression.computed) return false;
  return isUncomputedMemberExpressionChain(expression.object);
}

const PlaceholderErrors = ParseErrorEnum`placeholders`({
  ClassNameIsRequired: "A class name is required.",
  UnexpectedSpace: "Unexpected space in placeholder."
});

var placeholders = (superClass => class PlaceholdersParserMixin extends superClass {
  parsePlaceholder(expectedNode) {
    if (this.match(142)) {
      const node = this.startNode();
      this.next();
      this.assertNoSpace();

      node.name = super.parseIdentifier(true);
      this.assertNoSpace();
      this.expect(142);
      return this.finishPlaceholder(node, expectedNode);
    }
  }
  finishPlaceholder(node, expectedNode) {
    const isFinished = !!(node.expectedNode && node.type === "Placeholder");
    node.expectedNode = expectedNode;

    return isFinished ? node : this.finishNode(node, "Placeholder");
  }

  getTokenFromCode(code) {
    if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {
      return this.finishOp(142, 2);
    }
    return super.getTokenFromCode(code);
  }

  parseExprAtom(refExpressionErrors) {
    return this.parsePlaceholder("Expression") || super.parseExprAtom(refExpressionErrors);
  }
  parseIdentifier(liberal) {
    return this.parsePlaceholder("Identifier") || super.parseIdentifier(liberal);
  }
  checkReservedWord(word, startLoc, checkKeywords, isBinding) {
    if (word !== undefined) {
      super.checkReservedWord(word, startLoc, checkKeywords, isBinding);
    }
  }

  parseBindingAtom() {
    return this.parsePlaceholder("Pattern") || super.parseBindingAtom();
  }
  isValidLVal(type, isParenthesized, binding) {
    return type === "Placeholder" || super.isValidLVal(type, isParenthesized, binding);
  }
  toAssignable(node, isLHS) {
    if (node && node.type === "Placeholder" && node.expectedNode === "Expression") {
      node.expectedNode = "Pattern";
    } else {
      super.toAssignable(node, isLHS);
    }
  }

  chStartsBindingIdentifier(ch, pos) {
    if (super.chStartsBindingIdentifier(ch, pos)) {
      return true;
    }

    const nextToken = this.lookahead();
    if (nextToken.type === 142) {
      return true;
    }
    return false;
  }
  verifyBreakContinue(node, isBreak) {
    if (node.label && node.label.type === "Placeholder") return;
    super.verifyBreakContinue(node, isBreak);
  }

  parseExpressionStatement(node, expr) {
    if (expr.type !== "Placeholder" || expr.extra && expr.extra.parenthesized) {
      return super.parseExpressionStatement(node, expr);
    }
    if (this.match(14)) {
      const stmt = node;
      stmt.label = this.finishPlaceholder(expr, "Identifier");
      this.next();
      stmt.body = super.parseStatementOrFunctionDeclaration(false);
      return this.finishNode(stmt, "LabeledStatement");
    }
    this.semicolon();
    node.name = expr.name;
    return this.finishPlaceholder(node, "Statement");
  }
  parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse) {
    return this.parsePlaceholder("BlockStatement") || super.parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse);
  }
  parseFunctionId(requireId) {
    return this.parsePlaceholder("Identifier") || super.parseFunctionId(requireId);
  }
  parseClass(node, isStatement, optionalId) {
    const type = isStatement ? "ClassDeclaration" : "ClassExpression";
    this.next();
    const oldStrict = this.state.strict;
    const placeholder = this.parsePlaceholder("Identifier");
    if (placeholder) {
      if (this.match(81) || this.match(142) || this.match(5)) {
        node.id = placeholder;
      } else if (optionalId || !isStatement) {
        node.id = null;
        node.body = this.finishPlaceholder(placeholder, "ClassBody");
        return this.finishNode(node, type);
      } else {
        throw this.raise(PlaceholderErrors.ClassNameIsRequired, {
          at: this.state.startLoc
        });
      }
    } else {
      this.parseClassId(node, isStatement, optionalId);
    }
    super.parseClassSuper(node);
    node.body = this.parsePlaceholder("ClassBody") || super.parseClassBody(!!node.superClass, oldStrict);
    return this.finishNode(node, type);
  }
  parseExport(node, decorators) {
    const placeholder = this.parsePlaceholder("Identifier");
    if (!placeholder) return super.parseExport(node, decorators);
    if (!this.isContextual(97) && !this.match(12)) {
      node.specifiers = [];
      node.source = null;
      node.declaration = this.finishPlaceholder(placeholder, "Declaration");
      return this.finishNode(node, "ExportNamedDeclaration");
    }

    this.expectPlugin("exportDefaultFrom");
    const specifier = this.startNode();
    specifier.exported = placeholder;
    node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
    return super.parseExport(node, decorators);
  }
  isExportDefaultSpecifier() {
    if (this.match(65)) {
      const next = this.nextTokenStart();
      if (this.isUnparsedContextual(next, "from")) {
        if (this.input.startsWith(tokenLabelName(142), this.nextTokenStartSince(next + 4))) {
          return true;
        }
      }
    }
    return super.isExportDefaultSpecifier();
  }
  maybeParseExportDefaultSpecifier(node) {
    if (node.specifiers && node.specifiers.length > 0) {
      return true;
    }
    return super.maybeParseExportDefaultSpecifier(node);
  }
  checkExport(node) {
    const {
      specifiers
    } = node;
    if (specifiers != null && specifiers.length) {
      node.specifiers = specifiers.filter(
      node => node.exported.type === "Placeholder");
    }
    super.checkExport(node);
    node.specifiers = specifiers;
  }
  parseImport(node) {
    const placeholder = this.parsePlaceholder("Identifier");
    if (!placeholder) return super.parseImport(node);
    node.specifiers = [];
    if (!this.isContextual(97) && !this.match(12)) {
      node.source = this.finishPlaceholder(placeholder, "StringLiteral");
      this.semicolon();
      return this.finishNode(node, "ImportDeclaration");
    }

    const specifier = this.startNodeAtNode(placeholder);
    specifier.local = placeholder;
    node.specifiers.push(this.finishNode(specifier, "ImportDefaultSpecifier"));
    if (this.eat(12)) {
      const hasStarImport = this.maybeParseStarImportSpecifier(node);

      if (!hasStarImport) this.parseNamedImportSpecifiers(node);
    }
    this.expectContextual(97);
    node.source = this.parseImportSource();
    this.semicolon();
    return this.finishNode(node, "ImportDeclaration");
  }
  parseImportSource() {

    return this.parsePlaceholder("StringLiteral") || super.parseImportSource();
  }

  assertNoSpace() {
    if (this.state.start > this.state.lastTokEndLoc.index) {
      this.raise(PlaceholderErrors.UnexpectedSpace, {
        at: this.state.lastTokEndLoc
      });
    }
  }
});

var v8intrinsic = (superClass => class V8IntrinsicMixin extends superClass {
  parseV8Intrinsic() {
    if (this.match(54)) {
      const v8IntrinsicStartLoc = this.state.startLoc;
      const node = this.startNode();
      this.next();
      if (tokenIsIdentifier(this.state.type)) {
        const name = this.parseIdentifierName();
        const identifier = this.createIdentifier(node, name);
        identifier.type = "V8IntrinsicIdentifier";
        if (this.match(10)) {
          return identifier;
        }
      }
      this.unexpected(v8IntrinsicStartLoc);
    }
  }

  parseExprAtom(refExpressionErrors) {
    return this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors);
  }
});

function hasPlugin(plugins, expectedConfig) {
  const [expectedName, expectedOptions] = typeof expectedConfig === "string" ? [expectedConfig, {}] : expectedConfig;
  const expectedKeys = Object.keys(expectedOptions);
  const expectedOptionsIsEmpty = expectedKeys.length === 0;
  return plugins.some(p => {
    if (typeof p === "string") {
      return expectedOptionsIsEmpty && p === expectedName;
    } else {
      const [pluginName, pluginOptions] = p;
      if (pluginName !== expectedName) {
        return false;
      }
      for (const key of expectedKeys) {
        if (pluginOptions[key] !== expectedOptions[key]) {
          return false;
        }
      }
      return true;
    }
  });
}
function getPluginOption(plugins, name, option) {
  const plugin = plugins.find(plugin => {
    if (Array.isArray(plugin)) {
      return plugin[0] === name;
    } else {
      return plugin === name;
    }
  });
  if (plugin && Array.isArray(plugin) && plugin.length > 1) {
    return plugin[1][option];
  }
  return null;
}
const PIPELINE_PROPOSALS = ["minimal", "fsharp", "hack", "smart"];
const TOPIC_TOKENS = ["^^", "@@", "^", "%", "#"];
const RECORD_AND_TUPLE_SYNTAX_TYPES = ["hash", "bar"];
function validatePlugins(plugins) {
  if (hasPlugin(plugins, "decorators")) {
    if (hasPlugin(plugins, "decorators-legacy")) {
      throw new Error("Cannot use the decorators and decorators-legacy plugin together");
    }
    const decoratorsBeforeExport = getPluginOption(plugins, "decorators", "decoratorsBeforeExport");
    if (decoratorsBeforeExport != null && typeof decoratorsBeforeExport !== "boolean") {
      throw new Error("'decoratorsBeforeExport' must be a boolean.");
    }
    const allowCallParenthesized = getPluginOption(plugins, "decorators", "allowCallParenthesized");
    if (allowCallParenthesized != null && typeof allowCallParenthesized !== "boolean") {
      throw new Error("'allowCallParenthesized' must be a boolean.");
    }
  }
  if (hasPlugin(plugins, "flow") && hasPlugin(plugins, "typescript")) {
    throw new Error("Cannot combine flow and typescript plugins.");
  }
  if (hasPlugin(plugins, "placeholders") && hasPlugin(plugins, "v8intrinsic")) {
    throw new Error("Cannot combine placeholders and v8intrinsic plugins.");
  }
  if (hasPlugin(plugins, "pipelineOperator")) {
    const proposal = getPluginOption(plugins, "pipelineOperator", "proposal");
    if (!PIPELINE_PROPOSALS.includes(proposal)) {
      const proposalList = PIPELINE_PROPOSALS.map(p => `"${p}"`).join(", ");
      throw new Error(`"pipelineOperator" requires "proposal" option whose value must be one of: ${proposalList}.`);
    }
    const tupleSyntaxIsHash = hasPlugin(plugins, ["recordAndTuple", {
      syntaxType: "hash"
    }]);
    if (proposal === "hack") {
      if (hasPlugin(plugins, "placeholders")) {
        throw new Error("Cannot combine placeholders plugin and Hack-style pipes.");
      }
      if (hasPlugin(plugins, "v8intrinsic")) {
        throw new Error("Cannot combine v8intrinsic plugin and Hack-style pipes.");
      }
      const topicToken = getPluginOption(plugins, "pipelineOperator", "topicToken");
      if (!TOPIC_TOKENS.includes(topicToken)) {
        const tokenList = TOPIC_TOKENS.map(t => `"${t}"`).join(", ");
        throw new Error(`"pipelineOperator" in "proposal": "hack" mode also requires a "topicToken" option whose value must be one of: ${tokenList}.`);
      }
      if (topicToken === "#" && tupleSyntaxIsHash) {
        throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "hack", topicToken: "#" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.');
      }
    } else if (proposal === "smart" && tupleSyntaxIsHash) {
      throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "smart" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.');
    }
  }
  if (hasPlugin(plugins, "moduleAttributes")) {
    {
      if (hasPlugin(plugins, "importAssertions")) {
        throw new Error("Cannot combine importAssertions and moduleAttributes plugins.");
      }
      const moduleAttributesVersionPluginOption = getPluginOption(plugins, "moduleAttributes", "version");
      if (moduleAttributesVersionPluginOption !== "may-2020") {
        throw new Error("The 'moduleAttributes' plugin requires a 'version' option," + " representing the last proposal update. Currently, the" + " only supported value is 'may-2020'.");
      }
    }
  }
  if (hasPlugin(plugins, "recordAndTuple") && getPluginOption(plugins, "recordAndTuple", "syntaxType") != null && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, "recordAndTuple", "syntaxType"))) {
    throw new Error("The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: " + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(", "));
  }
  if (hasPlugin(plugins, "asyncDoExpressions") && !hasPlugin(plugins, "doExpressions")) {
    const error = new Error("'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.");
    error.missingPlugins = "doExpressions";
    throw error;
  }
}

const mixinPlugins = {
  estree,
  jsx,
  flow,
  typescript,
  v8intrinsic,
  placeholders
};
const mixinPluginNames = Object.keys(mixinPlugins);

const defaultOptions = {
  sourceType: "script",
  sourceFilename: undefined,
  startColumn: 0,
  startLine: 1,
  allowAwaitOutsideFunction: false,
  allowReturnOutsideFunction: false,
  allowImportExportEverywhere: false,
  allowSuperOutsideMethod: false,
  allowUndeclaredExports: false,
  plugins: [],
  strictMode: null,
  ranges: false,
  tokens: false,
  createParenthesizedExpressions: false,
  errorRecovery: false,
  attachComment: true
};

function getOptions(opts) {
  const options = {};
  for (const key of Object.keys(defaultOptions)) {
    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];
  }
  return options;
}

const getOwn = (object, key) => Object.hasOwnProperty.call(object, key) && object[key];
const unwrapParenthesizedExpression = node => {
  return node.type === "ParenthesizedExpression" ? unwrapParenthesizedExpression(node.expression) : node;
};
class LValParser extends NodeUtils {

  toAssignable(node, isLHS = false) {
    var _node$extra, _node$extra3;
    let parenthesized = undefined;
    if (node.type === "ParenthesizedExpression" || (_node$extra = node.extra) != null && _node$extra.parenthesized) {
      parenthesized = unwrapParenthesizedExpression(node);
      if (isLHS) {
        if (parenthesized.type === "Identifier") {
          this.expressionScope.recordArrowParameterBindingError(Errors.InvalidParenthesizedAssignment, {
            at: node
          });
        } else if (parenthesized.type !== "MemberExpression") {
          this.raise(Errors.InvalidParenthesizedAssignment, {
            at: node
          });
        }
      } else {
        this.raise(Errors.InvalidParenthesizedAssignment, {
          at: node
        });
      }
    }
    switch (node.type) {
      case "Identifier":
      case "ObjectPattern":
      case "ArrayPattern":
      case "AssignmentPattern":
      case "RestElement":
        break;
      case "ObjectExpression":
        node.type = "ObjectPattern";
        for (let i = 0, length = node.properties.length, last = length - 1; i < length; i++) {
          var _node$extra2;
          const prop = node.properties[i];
          const isLast = i === last;
          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);
          if (isLast && prop.type === "RestElement" && (_node$extra2 = node.extra) != null && _node$extra2.trailingCommaLoc) {
            this.raise(Errors.RestTrailingComma, {
              at: node.extra.trailingCommaLoc
            });
          }
        }
        break;
      case "ObjectProperty":
        {
          const {
            key,
            value
          } = node;
          if (this.isPrivateName(key)) {
            this.classScope.usePrivateName(this.getPrivateNameSV(key), key.loc.start);
          }
          this.toAssignable(value, isLHS);
          break;
        }
      case "SpreadElement":
        {
          throw new Error("Internal @babel/parser error (this is a bug, please report it)." + " SpreadElement should be converted by .toAssignable's caller.");
        }
      case "ArrayExpression":
        node.type = "ArrayPattern";
        this.toAssignableList(node.elements, (_node$extra3 = node.extra) == null ? void 0 : _node$extra3.trailingCommaLoc, isLHS);
        break;
      case "AssignmentExpression":
        if (node.operator !== "=") {
          this.raise(Errors.MissingEqInAssignment, {
            at: node.left.loc.end
          });
        }
        node.type = "AssignmentPattern";
        delete node.operator;
        this.toAssignable(node.left, isLHS);
        break;
      case "ParenthesizedExpression":
        this.toAssignable(parenthesized, isLHS);
        break;
    }
  }

  toAssignableObjectExpressionProp(prop, isLast, isLHS) {
    if (prop.type === "ObjectMethod") {
      this.raise(prop.kind === "get" || prop.kind === "set" ? Errors.PatternHasAccessor : Errors.PatternHasMethod, {
        at: prop.key
      });
    } else if (prop.type === "SpreadElement") {
      prop.type = "RestElement";
      const arg = prop.argument;
      this.checkToRestConversion(arg, false);
      this.toAssignable(arg, isLHS);
      if (!isLast) {
        this.raise(Errors.RestTrailingComma, {
          at: prop
        });
      }
    } else {
      this.toAssignable(prop, isLHS);
    }
  }

  toAssignableList(exprList, trailingCommaLoc, isLHS) {
    const end = exprList.length - 1;
    for (let i = 0; i <= end; i++) {
      const elt = exprList[i];
      if (!elt) continue;
      if (elt.type === "SpreadElement") {
        elt.type = "RestElement";
        const arg = elt.argument;
        this.checkToRestConversion(arg, true);
        this.toAssignable(arg, isLHS);
      } else {
        this.toAssignable(elt, isLHS);
      }
      if (elt.type === "RestElement") {
        if (i < end) {
          this.raise(Errors.RestTrailingComma, {
            at: elt
          });
        } else if (trailingCommaLoc) {
          this.raise(Errors.RestTrailingComma, {
            at: trailingCommaLoc
          });
        }
      }
    }
  }
  isAssignable(node, isBinding) {
    switch (node.type) {
      case "Identifier":
      case "ObjectPattern":
      case "ArrayPattern":
      case "AssignmentPattern":
      case "RestElement":
        return true;
      case "ObjectExpression":
        {
          const last = node.properties.length - 1;
          return node.properties.every((prop, i) => {
            return prop.type !== "ObjectMethod" && (i === last || prop.type !== "SpreadElement") && this.isAssignable(prop);
          });
        }
      case "ObjectProperty":
        return this.isAssignable(node.value);
      case "SpreadElement":
        return this.isAssignable(node.argument);
      case "ArrayExpression":
        return node.elements.every(element => element === null || this.isAssignable(element));
      case "AssignmentExpression":
        return node.operator === "=";
      case "ParenthesizedExpression":
        return this.isAssignable(node.expression);
      case "MemberExpression":
      case "OptionalMemberExpression":
        return !isBinding;
      default:
        return false;
    }
  }

  toReferencedList(exprList,
  isParenthesizedExpr) {
    return exprList;
  }
  toReferencedListDeep(exprList, isParenthesizedExpr) {
    this.toReferencedList(exprList, isParenthesizedExpr);
    for (const expr of exprList) {
      if ((expr == null ? void 0 : expr.type) === "ArrayExpression") {
        this.toReferencedListDeep(expr.elements);
      }
    }
  }

  parseSpread(refExpressionErrors) {
    const node = this.startNode();
    this.next();
    node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined);
    return this.finishNode(node, "SpreadElement");
  }

  parseRestBinding() {
    const node = this.startNode();
    this.next();
    node.argument = this.parseBindingAtom();
    return this.finishNode(node, "RestElement");
  }

  parseBindingAtom() {
    switch (this.state.type) {
      case 0:
        {
          const node = this.startNode();
          this.next();
          node.elements = this.parseBindingList(3, 93, true);
          return this.finishNode(node, "ArrayPattern");
        }
      case 5:
        return this.parseObjectLike(8, true);
    }

    return this.parseIdentifier();
  }

  parseBindingList(close, closeCharCode, allowEmpty, allowModifiers) {
    const elts = [];
    let first = true;
    while (!this.eat(close)) {
      if (first) {
        first = false;
      } else {
        this.expect(12);
      }
      if (allowEmpty && this.match(12)) {
        elts.push(null);
      } else if (this.eat(close)) {
        break;
      } else if (this.match(21)) {
        elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));
        if (!this.checkCommaAfterRest(closeCharCode)) {
          this.expect(close);
          break;
        }
      } else {
        const decorators = [];
        if (this.match(26) && this.hasPlugin("decorators")) {
          this.raise(Errors.UnsupportedParameterDecorator, {
            at: this.state.startLoc
          });
        }
        while (this.match(26)) {
          decorators.push(this.parseDecorator());
        }
        elts.push(this.parseAssignableListItem(allowModifiers, decorators));
      }
    }
    return elts;
  }

  parseBindingRestProperty(prop) {
    this.next();
    prop.argument = this.parseIdentifier();
    this.checkCommaAfterRest(125);
    return this.finishNode(prop, "RestElement");
  }

  parseBindingProperty() {
    const prop = this.startNode();
    const {
      type,
      startLoc
    } = this.state;
    if (type === 21) {
      return this.parseBindingRestProperty(prop);
    } else if (type === 136) {
      this.expectPlugin("destructuringPrivate", startLoc);
      this.classScope.usePrivateName(this.state.value, startLoc);
      prop.key = this.parsePrivateName();
    } else {
      this.parsePropertyName(prop);
    }
    prop.method = false;
    return this.parseObjPropValue(prop, startLoc, false, false, true, false);
  }

  parseAssignableListItem(allowModifiers, decorators) {
    const left = this.parseMaybeDefault();
    this.parseAssignableListItemTypes(left);
    const elt = this.parseMaybeDefault(left.loc.start, left);
    if (decorators.length) {
      left.decorators = decorators;
    }
    return elt;
  }

  parseAssignableListItemTypes(param) {
    return param;
  }

  parseMaybeDefault(startLoc, left) {
    var _startLoc, _left;
    (_startLoc = startLoc) != null ? _startLoc : startLoc = this.state.startLoc;
    left = (_left = left) != null ? _left : this.parseBindingAtom();
    if (!this.eat(29)) return left;
    const node = this.startNodeAt(startLoc);
    node.left = left;
    node.right = this.parseMaybeAssignAllowIn();
    return this.finishNode(node, "AssignmentPattern");
  }
  isValidLVal(type,
  isUnparenthesizedInAssign,
  binding) {
    return getOwn({
      AssignmentPattern: "left",
      RestElement: "argument",
      ObjectProperty: "value",
      ParenthesizedExpression: "expression",
      ArrayPattern: "elements",
      ObjectPattern: "properties"
    },
    type);
  }

  checkLVal(expression, {
    in: ancestor,
    binding = BIND_NONE,
    checkClashes = false,
    strictModeChanged = false,
    allowingSloppyLetBinding = !(binding & BIND_SCOPE_LEXICAL),
    hasParenthesizedAncestor = false
  }) {
    var _expression$extra;
    const type = expression.type;

    if (this.isObjectMethod(expression)) return;
    if (type === "MemberExpression") {
      if (binding !== BIND_NONE) {
        this.raise(Errors.InvalidPropertyBindingPattern, {
          at: expression
        });
      }
      return;
    }
    if (expression.type === "Identifier") {
      this.checkIdentifier(expression, binding, strictModeChanged, allowingSloppyLetBinding);
      const {
        name
      } = expression;
      if (checkClashes) {
        if (checkClashes.has(name)) {
          this.raise(Errors.ParamDupe, {
            at: expression
          });
        } else {
          checkClashes.add(name);
        }
      }
      return;
    }
    const validity = this.isValidLVal(expression.type, !(hasParenthesizedAncestor || (_expression$extra = expression.extra) != null && _expression$extra.parenthesized) && ancestor.type === "AssignmentExpression", binding);
    if (validity === true) return;
    if (validity === false) {
      const ParseErrorClass = binding === BIND_NONE ? Errors.InvalidLhs : Errors.InvalidLhsBinding;
      this.raise(ParseErrorClass, {
        at: expression,
        ancestor: ancestor.type === "UpdateExpression" ? {
          type: "UpdateExpression",
          prefix: ancestor.prefix
        } : {
          type: ancestor.type
        }
      });
      return;
    }
    const [key, isParenthesizedExpression] = Array.isArray(validity) ? validity : [validity, type === "ParenthesizedExpression"];
    const nextAncestor = expression.type === "ArrayPattern" || expression.type === "ObjectPattern" || expression.type === "ParenthesizedExpression" ? expression : ancestor;

    for (const child of [].concat(expression[key])) {
      if (child) {
        this.checkLVal(child, {
          in: nextAncestor,
          binding,
          checkClashes,
          allowingSloppyLetBinding,
          strictModeChanged,
          hasParenthesizedAncestor: isParenthesizedExpression
        });
      }
    }
  }
  checkIdentifier(at, bindingType, strictModeChanged = false, allowLetBinding = !(bindingType & BIND_SCOPE_LEXICAL)) {
    if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(at.name, this.inModule) : isStrictBindOnlyReservedWord(at.name))) {
      if (bindingType === BIND_NONE) {
        this.raise(Errors.StrictEvalArguments, {
          at,
          referenceName: at.name
        });
      } else {
        this.raise(Errors.StrictEvalArgumentsBinding, {
          at,
          bindingName: at.name
        });
      }
    }
    if (!allowLetBinding && at.name === "let") {
      this.raise(Errors.LetInLexicalBinding, {
        at
      });
    }
    if (!(bindingType & BIND_NONE)) {
      this.declareNameFromIdentifier(at, bindingType);
    }
  }
  declareNameFromIdentifier(identifier, binding) {
    this.scope.declareName(identifier.name, binding, identifier.loc.start);
  }
  checkToRestConversion(node, allowPattern) {
    switch (node.type) {
      case "ParenthesizedExpression":
        this.checkToRestConversion(node.expression, allowPattern);
        break;
      case "Identifier":
      case "MemberExpression":
        break;
      case "ArrayExpression":
      case "ObjectExpression":
        if (allowPattern) break;
      default:
        this.raise(Errors.InvalidRestAssignmentPattern, {
          at: node
        });
    }
  }
  checkCommaAfterRest(close) {
    if (!this.match(12)) {
      return false;
    }
    this.raise(this.lookaheadCharCode() === close ? Errors.RestTrailingComma : Errors.ElementAfterRest, {
      at: this.state.startLoc
    });
    return true;
  }
}

class ExpressionParser extends LValParser {

  checkProto(prop, isRecord, protoRef, refExpressionErrors) {
    if (prop.type === "SpreadElement" || this.isObjectMethod(prop) || prop.computed ||
    prop.shorthand) {
      return;
    }
    const key = prop.key;
    const name = key.type === "Identifier" ? key.name : key.value;
    if (name === "__proto__") {
      if (isRecord) {
        this.raise(Errors.RecordNoProto, {
          at: key
        });
        return;
      }
      if (protoRef.used) {
        if (refExpressionErrors) {
          if (refExpressionErrors.doubleProtoLoc === null) {
            refExpressionErrors.doubleProtoLoc = key.loc.start;
          }
        } else {
          this.raise(Errors.DuplicateProto, {
            at: key
          });
        }
      }
      protoRef.used = true;
    }
  }
  shouldExitDescending(expr, potentialArrowAt) {
    return expr.type === "ArrowFunctionExpression" && expr.start === potentialArrowAt;
  }

  getExpression() {
    this.enterInitialScopes();
    this.nextToken();
    const expr = this.parseExpression();
    if (!this.match(137)) {
      this.unexpected();
    }
    this.finalizeRemainingComments();
    expr.comments = this.state.comments;
    expr.errors = this.state.errors;
    if (this.options.tokens) {
      expr.tokens = this.tokens;
    }
    return expr;
  }

  parseExpression(disallowIn, refExpressionErrors) {
    if (disallowIn) {
      return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors));
    }
    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));
  }

  parseExpressionBase(refExpressionErrors) {
    const startLoc = this.state.startLoc;
    const expr = this.parseMaybeAssign(refExpressionErrors);
    if (this.match(12)) {
      const node = this.startNodeAt(startLoc);
      node.expressions = [expr];
      while (this.eat(12)) {
        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));
      }
      this.toReferencedList(node.expressions);
      return this.finishNode(node, "SequenceExpression");
    }
    return expr;
  }

  parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse) {
    return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));
  }

  parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse) {
    return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));
  }

  setOptionalParametersError(refExpressionErrors, resultError) {
    var _resultError$loc;
    refExpressionErrors.optionalParametersLoc = (_resultError$loc = resultError == null ? void 0 : resultError.loc) != null ? _resultError$loc : this.state.startLoc;
  }

  parseMaybeAssign(refExpressionErrors, afterLeftParse) {
    const startLoc = this.state.startLoc;
    if (this.isContextual(106)) {
      if (this.prodParam.hasYield) {
        let left = this.parseYield();
        if (afterLeftParse) {
          left = afterLeftParse.call(this, left, startLoc);
        }
        return left;
      }
    }
    let ownExpressionErrors;
    if (refExpressionErrors) {
      ownExpressionErrors = false;
    } else {
      refExpressionErrors = new ExpressionErrors();
      ownExpressionErrors = true;
    }
    const {
      type
    } = this.state;
    if (type === 10 || tokenIsIdentifier(type)) {
      this.state.potentialArrowAt = this.state.start;
    }
    let left = this.parseMaybeConditional(refExpressionErrors);
    if (afterLeftParse) {
      left = afterLeftParse.call(this, left, startLoc);
    }
    if (tokenIsAssignment(this.state.type)) {
      const node = this.startNodeAt(startLoc);
      const operator = this.state.value;
      node.operator = operator;
      if (this.match(29)) {
        this.toAssignable(left, true);
        node.left = left;
        const startIndex = startLoc.index;
        if (refExpressionErrors.doubleProtoLoc != null && refExpressionErrors.doubleProtoLoc.index >= startIndex) {
          refExpressionErrors.doubleProtoLoc = null;
        }

        if (refExpressionErrors.shorthandAssignLoc != null && refExpressionErrors.shorthandAssignLoc.index >= startIndex) {
          refExpressionErrors.shorthandAssignLoc = null;
        }

        if (refExpressionErrors.privateKeyLoc != null && refExpressionErrors.privateKeyLoc.index >= startIndex) {
          this.checkDestructuringPrivate(refExpressionErrors);
          refExpressionErrors.privateKeyLoc = null;
        }
      } else {
        node.left = left;
      }
      this.next();
      node.right = this.parseMaybeAssign();
      this.checkLVal(left, {
        in: this.finishNode(node, "AssignmentExpression")
      });
      return node;
    } else if (ownExpressionErrors) {
      this.checkExpressionErrors(refExpressionErrors, true);
    }
    return left;
  }

  parseMaybeConditional(refExpressionErrors) {
    const startLoc = this.state.startLoc;
    const potentialArrowAt = this.state.potentialArrowAt;
    const expr = this.parseExprOps(refExpressionErrors);
    if (this.shouldExitDescending(expr, potentialArrowAt)) {
      return expr;
    }
    return this.parseConditional(expr, startLoc, refExpressionErrors);
  }
  parseConditional(expr, startLoc,
  refExpressionErrors) {
    if (this.eat(17)) {
      const node = this.startNodeAt(startLoc);
      node.test = expr;
      node.consequent = this.parseMaybeAssignAllowIn();
      this.expect(14);
      node.alternate = this.parseMaybeAssign();
      return this.finishNode(node, "ConditionalExpression");
    }
    return expr;
  }
  parseMaybeUnaryOrPrivate(refExpressionErrors) {
    return this.match(136) ? this.parsePrivateName() : this.parseMaybeUnary(refExpressionErrors);
  }

  parseExprOps(refExpressionErrors) {
    const startLoc = this.state.startLoc;
    const potentialArrowAt = this.state.potentialArrowAt;
    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);
    if (this.shouldExitDescending(expr, potentialArrowAt)) {
      return expr;
    }
    return this.parseExprOp(expr, startLoc, -1);
  }

  parseExprOp(left, leftStartLoc, minPrec) {
    if (this.isPrivateName(left)) {

      const value = this.getPrivateNameSV(left);
      if (minPrec >= tokenOperatorPrecedence(58) || !this.prodParam.hasIn || !this.match(58)) {
        this.raise(Errors.PrivateInExpectedIn, {
          at: left,
          identifierName: value
        });
      }
      this.classScope.usePrivateName(value, left.loc.start);
    }
    const op = this.state.type;
    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(58))) {
      let prec = tokenOperatorPrecedence(op);
      if (prec > minPrec) {
        if (op === 39) {
          this.expectPlugin("pipelineOperator");
          if (this.state.inFSharpPipelineDirectBody) {
            return left;
          }
          this.checkPipelineAtInfixOperator(left, leftStartLoc);
        }
        const node = this.startNodeAt(leftStartLoc);
        node.left = left;
        node.operator = this.state.value;
        const logical = op === 41 || op === 42;
        const coalesce = op === 40;
        if (coalesce) {
          prec = tokenOperatorPrecedence(42);
        }
        this.next();
        if (op === 39 && this.hasPlugin(["pipelineOperator", {
          proposal: "minimal"
        }])) {
          if (this.state.type === 96 && this.prodParam.hasAwait) {
            throw this.raise(Errors.UnexpectedAwaitAfterPipelineBody, {
              at: this.state.startLoc
            });
          }
        }
        node.right = this.parseExprOpRightExpr(op, prec);
        const finishedNode = this.finishNode(node, logical || coalesce ? "LogicalExpression" : "BinaryExpression");
        const nextOp = this.state.type;
        if (coalesce && (nextOp === 41 || nextOp === 42) || logical && nextOp === 40) {
          throw this.raise(Errors.MixingCoalesceWithLogical, {
            at: this.state.startLoc
          });
        }
        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);
      }
    }
    return left;
  }

  parseExprOpRightExpr(op, prec) {
    const startLoc = this.state.startLoc;
    switch (op) {
      case 39:
        switch (this.getPluginOption("pipelineOperator", "proposal")) {
          case "hack":
            return this.withTopicBindingContext(() => {
              return this.parseHackPipeBody();
            });
          case "smart":
            return this.withTopicBindingContext(() => {
              if (this.prodParam.hasYield && this.isContextual(106)) {
                throw this.raise(Errors.PipeBodyIsTighter, {
                  at: this.state.startLoc
                });
              }
              return this.parseSmartPipelineBodyInStyle(this.parseExprOpBaseRightExpr(op, prec), startLoc);
            });
          case "fsharp":
            return this.withSoloAwaitPermittingContext(() => {
              return this.parseFSharpPipelineBody(prec);
            });
        }

      default:
        return this.parseExprOpBaseRightExpr(op, prec);
    }
  }

  parseExprOpBaseRightExpr(op, prec) {
    const startLoc = this.state.startLoc;
    return this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, tokenIsRightAssociative(op) ? prec - 1 : prec);
  }
  parseHackPipeBody() {
    var _body$extra;
    const {
      startLoc
    } = this.state;
    const body = this.parseMaybeAssign();
    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(
    body.type);

    if (requiredParentheses && !((_body$extra = body.extra) != null && _body$extra.parenthesized)) {
      this.raise(Errors.PipeUnparenthesizedBody, {
        at: startLoc,
        type: body.type
      });
    }
    if (!this.topicReferenceWasUsedInCurrentContext()) {
      this.raise(Errors.PipeTopicUnused, {
        at: startLoc
      });
    }
    return body;
  }
  checkExponentialAfterUnary(node) {
    if (this.match(57)) {
      this.raise(Errors.UnexpectedTokenUnaryExponentiation, {
        at: node.argument
      });
    }
  }

  parseMaybeUnary(refExpressionErrors, sawUnary) {
    const startLoc = this.state.startLoc;
    const isAwait = this.isContextual(96);
    if (isAwait && this.isAwaitAllowed()) {
      this.next();
      const expr = this.parseAwait(startLoc);
      if (!sawUnary) this.checkExponentialAfterUnary(expr);
      return expr;
    }
    const update = this.match(34);
    const node = this.startNode();
    if (tokenIsPrefix(this.state.type)) {
      node.operator = this.state.value;
      node.prefix = true;
      if (this.match(72)) {
        this.expectPlugin("throwExpressions");
      }
      const isDelete = this.match(89);
      this.next();
      node.argument = this.parseMaybeUnary(null, true);
      this.checkExpressionErrors(refExpressionErrors, true);
      if (this.state.strict && isDelete) {
        const arg = node.argument;
        if (arg.type === "Identifier") {
          this.raise(Errors.StrictDelete, {
            at: node
          });
        } else if (this.hasPropertyAsPrivateName(arg)) {
          this.raise(Errors.DeletePrivateField, {
            at: node
          });
        }
      }
      if (!update) {
        if (!sawUnary) {
          this.checkExponentialAfterUnary(node);
        }
        return this.finishNode(node, "UnaryExpression");
      }
    }
    const expr = this.parseUpdate(
    node, update, refExpressionErrors);
    if (isAwait) {
      const {
        type
      } = this.state;
      const startsExpr = this.hasPlugin("v8intrinsic") ? tokenCanStartExpression(type) : tokenCanStartExpression(type) && !this.match(54);
      if (startsExpr && !this.isAmbiguousAwait()) {
        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, {
          at: startLoc
        });
        return this.parseAwait(startLoc);
      }
    }
    return expr;
  }

  parseUpdate(node, update, refExpressionErrors) {
    if (update) {
      const updateExpressionNode = node;
      this.checkLVal(updateExpressionNode.argument, {
        in: this.finishNode(updateExpressionNode, "UpdateExpression")
      });
      return node;
    }
    const startLoc = this.state.startLoc;
    let expr = this.parseExprSubscripts(refExpressionErrors);
    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;
    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {
      const node = this.startNodeAt(startLoc);
      node.operator = this.state.value;
      node.prefix = false;
      node.argument = expr;
      this.next();
      this.checkLVal(expr, {
        in: expr = this.finishNode(node, "UpdateExpression")
      });
    }
    return expr;
  }

  parseExprSubscripts(refExpressionErrors) {
    const startLoc = this.state.startLoc;
    const potentialArrowAt = this.state.potentialArrowAt;
    const expr = this.parseExprAtom(refExpressionErrors);
    if (this.shouldExitDescending(expr, potentialArrowAt)) {
      return expr;
    }
    return this.parseSubscripts(expr, startLoc);
  }
  parseSubscripts(base, startLoc, noCalls) {
    const state = {
      optionalChainMember: false,
      maybeAsyncArrow: this.atPossibleAsyncArrow(base),
      stop: false
    };
    do {
      base = this.parseSubscript(base, startLoc, noCalls, state);

      state.maybeAsyncArrow = false;
    } while (!state.stop);
    return base;
  }

  parseSubscript(base, startLoc, noCalls, state) {
    const {
      type
    } = this.state;
    if (!noCalls && type === 15) {
      return this.parseBind(base, startLoc, noCalls, state);
    } else if (tokenIsTemplate(type)) {
      return this.parseTaggedTemplateExpression(base, startLoc, state);
    }
    let optional = false;
    if (type === 18) {
      if (noCalls && this.lookaheadCharCode() === 40) {
        state.stop = true;
        return base;
      }
      state.optionalChainMember = optional = true;
      this.next();
    }
    if (!noCalls && this.match(10)) {
      return this.parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional);
    } else {
      const computed = this.eat(0);
      if (computed || optional || this.eat(16)) {
        return this.parseMember(base, startLoc, state, computed, optional);
      } else {
        state.stop = true;
        return base;
      }
    }
  }

  parseMember(base, startLoc, state, computed, optional) {
    const node = this.startNodeAt(startLoc);
    node.object = base;
    node.computed = computed;
    if (computed) {
      node.property = this.parseExpression();
      this.expect(3);
    } else if (this.match(136)) {
      if (base.type === "Super") {
        this.raise(Errors.SuperPrivateField, {
          at: startLoc
        });
      }
      this.classScope.usePrivateName(this.state.value, this.state.startLoc);
      node.property = this.parsePrivateName();
    } else {
      node.property = this.parseIdentifier(true);
    }
    if (state.optionalChainMember) {
      node.optional = optional;
      return this.finishNode(node, "OptionalMemberExpression");
    } else {
      return this.finishNode(node, "MemberExpression");
    }
  }

  parseBind(base, startLoc, noCalls, state) {
    const node = this.startNodeAt(startLoc);
    node.object = base;
    this.next();
    node.callee = this.parseNoCallExpr();
    state.stop = true;
    return this.parseSubscripts(this.finishNode(node, "BindExpression"), startLoc, noCalls);
  }

  parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional) {
    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
    let refExpressionErrors = null;
    this.state.maybeInArrowParameters = true;
    this.next();

    const node = this.startNodeAt(startLoc);
    node.callee = base;
    const {
      maybeAsyncArrow,
      optionalChainMember
    } = state;
    if (maybeAsyncArrow) {
      this.expressionScope.enter(newAsyncArrowScope());
      refExpressionErrors = new ExpressionErrors();
    }
    if (optionalChainMember) {
      node.optional = optional;
    }
    if (optional) {
      node.arguments = this.parseCallExpressionArguments(11);
    } else {
      node.arguments = this.parseCallExpressionArguments(11, base.type === "Import", base.type !== "Super",
      node, refExpressionErrors);
    }
    let finishedNode = this.finishCallExpression(node, optionalChainMember);
    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {
      state.stop = true;
      this.checkDestructuringPrivate(refExpressionErrors);
      this.expressionScope.validateAsPattern();
      this.expressionScope.exit();
      finishedNode = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startLoc), finishedNode);
    } else {
      if (maybeAsyncArrow) {
        this.checkExpressionErrors(refExpressionErrors, true);
        this.expressionScope.exit();
      }
      this.toReferencedArguments(finishedNode);
    }
    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
    return finishedNode;
  }
  toReferencedArguments(node, isParenthesizedExpr) {
    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);
  }

  parseTaggedTemplateExpression(base, startLoc, state) {
    const node = this.startNodeAt(startLoc);
    node.tag = base;
    node.quasi = this.parseTemplate(true);
    if (state.optionalChainMember) {
      this.raise(Errors.OptionalChainingNoTemplate, {
        at: startLoc
      });
    }
    return this.finishNode(node, "TaggedTemplateExpression");
  }
  atPossibleAsyncArrow(base) {
    return base.type === "Identifier" && base.name === "async" && this.state.lastTokEndLoc.index === base.end && !this.canInsertSemicolon() &&
    base.end - base.start === 5 && base.start === this.state.potentialArrowAt;
  }
  finishCallExpression(node, optional) {
    if (node.callee.type === "Import") {
      if (node.arguments.length === 2) {
        {
          if (!this.hasPlugin("moduleAttributes")) {
            this.expectPlugin("importAssertions");
          }
        }
      }
      if (node.arguments.length === 0 || node.arguments.length > 2) {
        this.raise(Errors.ImportCallArity, {
          at: node,
          maxArgumentCount: this.hasPlugin("importAssertions") || this.hasPlugin("moduleAttributes") ? 2 : 1
        });
      } else {
        for (const arg of node.arguments) {
          if (arg.type === "SpreadElement") {
            this.raise(Errors.ImportCallSpreadArgument, {
              at: arg
            });
          }
        }
      }
    }
    return this.finishNode(node, optional ? "OptionalCallExpression" : "CallExpression");
  }
  parseCallExpressionArguments(close, dynamicImport, allowPlaceholder, nodeForExtra, refExpressionErrors) {
    const elts = [];
    let first = true;
    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
    this.state.inFSharpPipelineDirectBody = false;
    while (!this.eat(close)) {
      if (first) {
        first = false;
      } else {
        this.expect(12);
        if (this.match(close)) {
          if (dynamicImport && !this.hasPlugin("importAssertions") && !this.hasPlugin("moduleAttributes")) {
            this.raise(Errors.ImportCallArgumentTrailingComma, {
              at: this.state.lastTokStartLoc
            });
          }
          if (nodeForExtra) {
            this.addTrailingCommaExtraToNode(nodeForExtra);
          }
          this.next();
          break;
        }
      }
      elts.push(this.parseExprListItem(false, refExpressionErrors, allowPlaceholder));
    }
    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
    return elts;
  }
  shouldParseAsyncArrow() {
    return this.match(19) && !this.canInsertSemicolon();
  }
  parseAsyncArrowFromCallExpression(node, call) {
    var _call$extra;
    this.resetPreviousNodeTrailingComments(call);
    this.expect(19);
    this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingCommaLoc);
    if (call.innerComments) {
      setInnerComments(node, call.innerComments);
    }
    if (call.callee.trailingComments) {
      setInnerComments(node, call.callee.trailingComments);
    }
    return node;
  }

  parseNoCallExpr() {
    const startLoc = this.state.startLoc;
    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);
  }

  parseExprAtom(refExpressionErrors) {
    let node;
    let decorators = null;
    const {
      type
    } = this.state;
    switch (type) {
      case 79:
        return this.parseSuper();
      case 83:
        node = this.startNode();
        this.next();
        if (this.match(16)) {
          return this.parseImportMetaProperty(node);
        }
        if (!this.match(10)) {
          this.raise(Errors.UnsupportedImport, {
            at: this.state.lastTokStartLoc
          });
        }
        return this.finishNode(node, "Import");
      case 78:
        node = this.startNode();
        this.next();
        return this.finishNode(node, "ThisExpression");
      case 90:
        {
          return this.parseDo(this.startNode(), false);
        }
      case 56:
      case 31:
        {
          this.readRegexp();
          return this.parseRegExpLiteral(this.state.value);
        }
      case 132:
        return this.parseNumericLiteral(this.state.value);
      case 133:
        return this.parseBigIntLiteral(this.state.value);
      case 134:
        return this.parseDecimalLiteral(this.state.value);
      case 131:
        return this.parseStringLiteral(this.state.value);
      case 84:
        return this.parseNullLiteral();
      case 85:
        return this.parseBooleanLiteral(true);
      case 86:
        return this.parseBooleanLiteral(false);
      case 10:
        {
          const canBeArrow = this.state.potentialArrowAt === this.state.start;
          return this.parseParenAndDistinguishExpression(canBeArrow);
        }
      case 2:
      case 1:
        {
          return this.parseArrayLike(this.state.type === 2 ? 4 : 3, false, true);
        }
      case 0:
        {
          return this.parseArrayLike(3, true, false, refExpressionErrors);
        }
      case 6:
      case 7:
        {
          return this.parseObjectLike(this.state.type === 6 ? 9 : 8, false, true);
        }
      case 5:
        {
          return this.parseObjectLike(8, false, false, refExpressionErrors);
        }
      case 68:
        return this.parseFunctionOrFunctionSent();
      case 26:
        decorators = this.parseDecorators();
      case 80:
        return this.parseClass(this.maybeTakeDecorators(decorators, this.startNode()), false);
      case 77:
        return this.parseNewOrNewTarget();
      case 25:
      case 24:
        return this.parseTemplate(false);

      case 15:
        {
          node = this.startNode();
          this.next();
          node.object = null;
          const callee = node.callee = this.parseNoCallExpr();
          if (callee.type === "MemberExpression") {
            return this.finishNode(node, "BindExpression");
          } else {
            throw this.raise(Errors.UnsupportedBind, {
              at: callee
            });
          }
        }
      case 136:
        {
          this.raise(Errors.PrivateInExpectedIn, {
            at: this.state.startLoc,
            identifierName: this.state.value
          });
          return this.parsePrivateName();
        }
      case 33:
        {
          return this.parseTopicReferenceThenEqualsSign(54, "%");
        }
      case 32:
        {
          return this.parseTopicReferenceThenEqualsSign(44, "^");
        }
      case 37:
      case 38:
        {
          return this.parseTopicReference("hack");
        }
      case 44:
      case 54:
      case 27:
        {
          const pipeProposal = this.getPluginOption("pipelineOperator", "proposal");
          if (pipeProposal) {
            return this.parseTopicReference(pipeProposal);
          } else {
            throw this.unexpected();
          }
        }
      case 47:
        {
          const lookaheadCh = this.input.codePointAt(this.nextTokenStart());
          if (isIdentifierStart(lookaheadCh) ||
          lookaheadCh === 62) {
            this.expectOnePlugin(["jsx", "flow", "typescript"]);
            break;
          } else {
            throw this.unexpected();
          }
        }
      default:
        if (tokenIsIdentifier(type)) {
          if (this.isContextual(125) && this.lookaheadCharCode() === 123 && !this.hasFollowingLineBreak()) {
            return this.parseModuleExpression();
          }
          const canBeArrow = this.state.potentialArrowAt === this.state.start;
          const containsEsc = this.state.containsEsc;
          const id = this.parseIdentifier();
          if (!containsEsc && id.name === "async" && !this.canInsertSemicolon()) {
            const {
              type
            } = this.state;
            if (type === 68) {
              this.resetPreviousNodeTrailingComments(id);
              this.next();
              return this.parseAsyncFunctionExpression(this.startNodeAtNode(id));
            } else if (tokenIsIdentifier(type)) {
              if (this.lookaheadCharCode() === 61) {
                return this.parseAsyncArrowUnaryFunction(this.startNodeAtNode(id));
              } else {
                return id;
              }
            } else if (type === 90) {
              this.resetPreviousNodeTrailingComments(id);
              return this.parseDo(this.startNodeAtNode(id), true);
            }
          }
          if (canBeArrow && this.match(19) && !this.canInsertSemicolon()) {
            this.next();
            return this.parseArrowExpression(this.startNodeAtNode(id), [id], false);
          }
          return id;
        } else {
          throw this.unexpected();
        }
    }
  }

  parseTopicReferenceThenEqualsSign(topicTokenType, topicTokenValue) {
    const pipeProposal = this.getPluginOption("pipelineOperator", "proposal");
    if (pipeProposal) {
      this.state.type = topicTokenType;
      this.state.value = topicTokenValue;
      this.state.pos--;
      this.state.end--;
      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);
      return this.parseTopicReference(pipeProposal);
    } else {
      throw this.unexpected();
    }
  }

  parseTopicReference(pipeProposal) {
    const node = this.startNode();
    const startLoc = this.state.startLoc;
    const tokenType = this.state.type;

    this.next();

    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);
  }

  finishTopicReference(node, startLoc, pipeProposal, tokenType) {
    if (this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)) {

      const nodeType = pipeProposal === "smart" ? "PipelinePrimaryTopicReference" :
      "TopicReference";
      if (!this.topicReferenceIsAllowedInCurrentContext()) {
        this.raise(
        pipeProposal === "smart" ? Errors.PrimaryTopicNotAllowed :
        Errors.PipeTopicUnbound, {
          at: startLoc
        });
      }

      this.registerTopicReference();
      return this.finishNode(node, nodeType);
    } else {
      throw this.raise(Errors.PipeTopicUnconfiguredToken, {
        at: startLoc,
        token: tokenLabelName(tokenType)
      });
    }
  }

  testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType) {
    switch (pipeProposal) {
      case "hack":
        {
          return this.hasPlugin(["pipelineOperator", {
            topicToken: tokenLabelName(tokenType)
          }]);
        }
      case "smart":
        return tokenType === 27;
      default:
        throw this.raise(Errors.PipeTopicRequiresHackPipes, {
          at: startLoc
        });
    }
  }

  parseAsyncArrowUnaryFunction(node) {
    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));
    const params = [this.parseIdentifier()];
    this.prodParam.exit();
    if (this.hasPrecedingLineBreak()) {
      this.raise(Errors.LineTerminatorBeforeArrow, {
        at: this.state.curPosition()
      });
    }
    this.expect(19);
    return this.parseArrowExpression(node, params, true);
  }

  parseDo(node, isAsync) {
    this.expectPlugin("doExpressions");
    if (isAsync) {
      this.expectPlugin("asyncDoExpressions");
    }
    node.async = isAsync;
    this.next();
    const oldLabels = this.state.labels;
    this.state.labels = [];
    if (isAsync) {
      this.prodParam.enter(PARAM_AWAIT);
      node.body = this.parseBlock();
      this.prodParam.exit();
    } else {
      node.body = this.parseBlock();
    }
    this.state.labels = oldLabels;
    return this.finishNode(node, "DoExpression");
  }

  parseSuper() {
    const node = this.startNode();
    this.next();
    if (this.match(10) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) {
      this.raise(Errors.SuperNotAllowed, {
        at: node
      });
    } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) {
      this.raise(Errors.UnexpectedSuper, {
        at: node
      });
    }
    if (!this.match(10) && !this.match(0) && !this.match(16)) {
      this.raise(Errors.UnsupportedSuper, {
        at: node
      });
    }
    return this.finishNode(node, "Super");
  }
  parsePrivateName() {
    const node = this.startNode();
    const id = this.startNodeAt(
    createPositionWithColumnOffset(this.state.startLoc, 1));
    const name = this.state.value;
    this.next();
    node.id = this.createIdentifier(id, name);
    return this.finishNode(node, "PrivateName");
  }
  parseFunctionOrFunctionSent() {
    const node = this.startNode();

    this.next();

    if (this.prodParam.hasYield && this.match(16)) {
      const meta = this.createIdentifier(this.startNodeAtNode(node), "function");
      this.next();
      if (this.match(102)) {
        this.expectPlugin("functionSent");
      } else if (!this.hasPlugin("functionSent")) {
        this.unexpected();
      }
      return this.parseMetaProperty(node, meta, "sent");
    }
    return this.parseFunction(node);
  }
  parseMetaProperty(node, meta, propertyName) {
    node.meta = meta;
    const containsEsc = this.state.containsEsc;
    node.property = this.parseIdentifier(true);
    if (node.property.name !== propertyName || containsEsc) {
      this.raise(Errors.UnsupportedMetaProperty, {
        at: node.property,
        target: meta.name,
        onlyValidPropertyName: propertyName
      });
    }
    return this.finishNode(node, "MetaProperty");
  }

  parseImportMetaProperty(node) {
    const id = this.createIdentifier(this.startNodeAtNode(node), "import");
    this.next();

    if (this.isContextual(100)) {
      if (!this.inModule) {
        this.raise(Errors.ImportMetaOutsideModule, {
          at: id
        });
      }
      this.sawUnambiguousESM = true;
    }
    return this.parseMetaProperty(node, id, "meta");
  }
  parseLiteralAtNode(value, type, node) {
    this.addExtra(node, "rawValue", value);
    this.addExtra(node, "raw", this.input.slice(node.start, this.state.end));
    node.value = value;
    this.next();
    return this.finishNode(node, type);
  }
  parseLiteral(value, type) {
    const node = this.startNode();
    return this.parseLiteralAtNode(value, type, node);
  }
  parseStringLiteral(value) {
    return this.parseLiteral(value, "StringLiteral");
  }
  parseNumericLiteral(value) {
    return this.parseLiteral(value, "NumericLiteral");
  }
  parseBigIntLiteral(value) {
    return this.parseLiteral(value, "BigIntLiteral");
  }
  parseDecimalLiteral(value) {
    return this.parseLiteral(value, "DecimalLiteral");
  }
  parseRegExpLiteral(value) {
    const node = this.parseLiteral(value.value, "RegExpLiteral");
    node.pattern = value.pattern;
    node.flags = value.flags;
    return node;
  }
  parseBooleanLiteral(value) {
    const node = this.startNode();
    node.value = value;
    this.next();
    return this.finishNode(node, "BooleanLiteral");
  }
  parseNullLiteral() {
    const node = this.startNode();
    this.next();
    return this.finishNode(node, "NullLiteral");
  }

  parseParenAndDistinguishExpression(canBeArrow) {
    const startLoc = this.state.startLoc;
    let val;
    this.next();
    this.expressionScope.enter(newArrowHeadScope());
    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
    this.state.maybeInArrowParameters = true;
    this.state.inFSharpPipelineDirectBody = false;
    const innerStartLoc = this.state.startLoc;
    const exprList = [];
    const refExpressionErrors = new ExpressionErrors();
    let first = true;
    let spreadStartLoc;
    let optionalCommaStartLoc;
    while (!this.match(11)) {
      if (first) {
        first = false;
      } else {
        this.expect(12, refExpressionErrors.optionalParametersLoc === null ? null : refExpressionErrors.optionalParametersLoc);
        if (this.match(11)) {
          optionalCommaStartLoc = this.state.startLoc;
          break;
        }
      }
      if (this.match(21)) {
        const spreadNodeStartLoc = this.state.startLoc;
        spreadStartLoc = this.state.startLoc;
        exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc));
        if (!this.checkCommaAfterRest(41)) {
          break;
        }
      } else {
        exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem));
      }
    }
    const innerEndLoc = this.state.lastTokEndLoc;
    this.expect(11);
    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
    let arrowNode = this.startNodeAt(startLoc);
    if (canBeArrow && this.shouldParseArrow(exprList) && (arrowNode = this.parseArrow(arrowNode))) {
      this.checkDestructuringPrivate(refExpressionErrors);
      this.expressionScope.validateAsPattern();
      this.expressionScope.exit();
      this.parseArrowExpression(arrowNode, exprList, false);
      return arrowNode;
    }
    this.expressionScope.exit();
    if (!exprList.length) {
      this.unexpected(this.state.lastTokStartLoc);
    }
    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);
    if (spreadStartLoc) this.unexpected(spreadStartLoc);
    this.checkExpressionErrors(refExpressionErrors, true);
    this.toReferencedListDeep(exprList, true);
    if (exprList.length > 1) {
      val = this.startNodeAt(innerStartLoc);
      val.expressions = exprList;
      this.finishNode(val, "SequenceExpression");
      this.resetEndLocation(val, innerEndLoc);
    } else {
      val = exprList[0];
    }
    return this.wrapParenthesis(startLoc,
    val);
  }
  wrapParenthesis(startLoc, expression) {
    if (!this.options.createParenthesizedExpressions) {
      this.addExtra(expression, "parenthesized", true);
      this.addExtra(expression, "parenStart", startLoc.index);
      this.takeSurroundingComments(expression, startLoc.index, this.state.lastTokEndLoc.index);
      return expression;
    }
    const parenExpression = this.startNodeAt(startLoc);
    parenExpression.expression = expression;
    return this.finishNode(parenExpression, "ParenthesizedExpression");
  }

  shouldParseArrow(params) {
    return !this.canInsertSemicolon();
  }
  parseArrow(node) {
    if (this.eat(19)) {
      return node;
    }
  }
  parseParenItem(node,
  startLoc) {
    return node;
  }
  parseNewOrNewTarget() {
    const node = this.startNode();
    this.next();
    if (this.match(16)) {
      const meta = this.createIdentifier(this.startNodeAtNode(node), "new");
      this.next();
      const metaProp = this.parseMetaProperty(node, meta, "target");
      if (!this.scope.inNonArrowFunction && !this.scope.inClass) {
        this.raise(Errors.UnexpectedNewTarget, {
          at: metaProp
        });
      }
      return metaProp;
    }
    return this.parseNew(node);
  }

  parseNew(node) {
    this.parseNewCallee(node);
    if (this.eat(10)) {
      const args = this.parseExprList(11);
      this.toReferencedList(args);
      node.arguments = args;
    } else {
      node.arguments = [];
    }
    return this.finishNode(node, "NewExpression");
  }
  parseNewCallee(node) {
    node.callee = this.parseNoCallExpr();
    if (node.callee.type === "Import") {
      this.raise(Errors.ImportCallNotNewExpression, {
        at: node.callee
      });
    } else if (this.isOptionalChain(node.callee)) {
      this.raise(Errors.OptionalChainingNoNew, {
        at: this.state.lastTokEndLoc
      });
    } else if (this.eat(18)) {
      this.raise(Errors.OptionalChainingNoNew, {
        at: this.state.startLoc
      });
    }
  }

  parseTemplateElement(isTagged) {
    const {
      start,
      startLoc,
      end,
      value
    } = this.state;
    const elemStart = start + 1;
    const elem = this.startNodeAt(createPositionWithColumnOffset(startLoc, 1));
    if (value === null) {
      if (!isTagged) {
        this.raise(Errors.InvalidEscapeSequenceTemplate, {
          at: createPositionWithColumnOffset(this.state.firstInvalidTemplateEscapePos, 1)
        });
      }
    }
    const isTail = this.match(24);
    const endOffset = isTail ? -1 : -2;
    const elemEnd = end + endOffset;
    elem.value = {
      raw: this.input.slice(elemStart, elemEnd).replace(/\r\n?/g, "\n"),
      cooked: value === null ? null : value.slice(1, endOffset)
    };
    elem.tail = isTail;
    this.next();
    const finishedNode = this.finishNode(elem, "TemplateElement");
    this.resetEndLocation(finishedNode, createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset));
    return finishedNode;
  }

  parseTemplate(isTagged) {
    const node = this.startNode();
    node.expressions = [];
    let curElt = this.parseTemplateElement(isTagged);
    node.quasis = [curElt];
    while (!curElt.tail) {
      node.expressions.push(this.parseTemplateSubstitution());
      this.readTemplateContinuation();
      node.quasis.push(curElt = this.parseTemplateElement(isTagged));
    }
    return this.finishNode(node, "TemplateLiteral");
  }

  parseTemplateSubstitution() {
    return this.parseExpression();
  }

  parseObjectLike(close, isPattern, isRecord, refExpressionErrors) {
    if (isRecord) {
      this.expectPlugin("recordAndTuple");
    }
    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
    this.state.inFSharpPipelineDirectBody = false;
    const propHash = Object.create(null);
    let first = true;
    const node = this.startNode();
    node.properties = [];
    this.next();
    while (!this.match(close)) {
      if (first) {
        first = false;
      } else {
        this.expect(12);
        if (this.match(close)) {
          this.addTrailingCommaExtraToNode(
          node);
          break;
        }
      }
      let prop;
      if (isPattern) {
        prop = this.parseBindingProperty();
      } else {
        prop = this.parsePropertyDefinition(refExpressionErrors);
        this.checkProto(prop, isRecord, propHash, refExpressionErrors);
      }
      if (isRecord && !this.isObjectProperty(prop) && prop.type !== "SpreadElement") {
        this.raise(Errors.InvalidRecordProperty, {
          at: prop
        });
      }

      if (prop.shorthand) {
        this.addExtra(prop, "shorthand", true);
      }

      node.properties.push(prop);
    }
    this.next();
    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
    let type = "ObjectExpression";
    if (isPattern) {
      type = "ObjectPattern";
    } else if (isRecord) {
      type = "RecordExpression";
    }
    return this.finishNode(node, type);
  }
  addTrailingCommaExtraToNode(node) {
    this.addExtra(node, "trailingComma", this.state.lastTokStart);
    this.addExtra(node, "trailingCommaLoc", this.state.lastTokStartLoc, false);
  }

  maybeAsyncOrAccessorProp(prop) {
    return !prop.computed && prop.key.type === "Identifier" && (this.isLiteralPropertyName() || this.match(0) || this.match(55));
  }

  parsePropertyDefinition(refExpressionErrors) {
    let decorators = [];
    if (this.match(26)) {
      if (this.hasPlugin("decorators")) {
        this.raise(Errors.UnsupportedPropertyDecorator, {
          at: this.state.startLoc
        });
      }

      while (this.match(26)) {
        decorators.push(this.parseDecorator());
      }
    }
    const prop = this.startNode();
    let isAsync = false;
    let isAccessor = false;
    let startLoc;
    if (this.match(21)) {
      if (decorators.length) this.unexpected();
      return this.parseSpread();
    }
    if (decorators.length) {
      prop.decorators = decorators;
      decorators = [];
    }
    prop.method = false;
    if (refExpressionErrors) {
      startLoc = this.state.startLoc;
    }
    let isGenerator = this.eat(55);
    this.parsePropertyNamePrefixOperator(prop);
    const containsEsc = this.state.containsEsc;
    const key = this.parsePropertyName(prop, refExpressionErrors);
    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {
      const keyName = key.name;
      if (keyName === "async" && !this.hasPrecedingLineBreak()) {
        isAsync = true;
        this.resetPreviousNodeTrailingComments(key);
        isGenerator = this.eat(55);
        this.parsePropertyName(prop);
      }
      if (keyName === "get" || keyName === "set") {
        isAccessor = true;
        this.resetPreviousNodeTrailingComments(key);
        prop.kind = keyName;
        if (this.match(55)) {
          isGenerator = true;
          this.raise(Errors.AccessorIsGenerator, {
            at: this.state.curPosition(),
            kind: keyName
          });
          this.next();
        }
        this.parsePropertyName(prop);
      }
    }
    return this.parseObjPropValue(prop, startLoc, isGenerator, isAsync, false, isAccessor, refExpressionErrors);
  }
  getGetterSetterExpectedParamCount(method) {
    return method.kind === "get" ? 0 : 1;
  }

  getObjectOrClassMethodParams(method) {
    return method.params;
  }

  checkGetterSetterParams(method) {
    var _params;
    const paramCount = this.getGetterSetterExpectedParamCount(method);
    const params = this.getObjectOrClassMethodParams(method);
    if (params.length !== paramCount) {
      this.raise(method.kind === "get" ? Errors.BadGetterArity : Errors.BadSetterArity, {
        at: method
      });
    }
    if (method.kind === "set" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === "RestElement") {
      this.raise(Errors.BadSetterRestParameter, {
        at: method
      });
    }
  }

  parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {
    if (isAccessor) {
      const finishedProp = this.parseMethod(prop,
      isGenerator, false, false, false, "ObjectMethod");
      this.checkGetterSetterParams(finishedProp);
      return finishedProp;
    }
    if (isAsync || isGenerator || this.match(10)) {
      if (isPattern) this.unexpected();
      prop.kind = "method";
      prop.method = true;
      return this.parseMethod(prop, isGenerator, isAsync, false, false, "ObjectMethod");
    }
  }

  parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors) {
    prop.shorthand = false;
    if (this.eat(14)) {
      prop.value = isPattern ? this.parseMaybeDefault(this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors);
      return this.finishNode(prop, "ObjectProperty");
    }
    if (!prop.computed && prop.key.type === "Identifier") {
      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);
      if (isPattern) {
        prop.value = this.parseMaybeDefault(startLoc, cloneIdentifier(prop.key));
      } else if (this.match(29)) {
        const shorthandAssignLoc = this.state.startLoc;
        if (refExpressionErrors != null) {
          if (refExpressionErrors.shorthandAssignLoc === null) {
            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;
          }
        } else {
          this.raise(Errors.InvalidCoverInitializedName, {
            at: shorthandAssignLoc
          });
        }
        prop.value = this.parseMaybeDefault(startLoc, cloneIdentifier(prop.key));
      } else {
        prop.value = cloneIdentifier(prop.key);
      }
      prop.shorthand = true;
      return this.finishNode(prop, "ObjectProperty");
    }
  }
  parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {
    const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors);
    if (!node) this.unexpected();
    return node;
  }

  parsePropertyName(prop, refExpressionErrors) {
    if (this.eat(0)) {
      prop.computed = true;
      prop.key = this.parseMaybeAssignAllowIn();
      this.expect(3);
    } else {
      const {
        type,
        value
      } = this.state;
      let key;
      if (tokenIsKeywordOrIdentifier(type)) {
        key = this.parseIdentifier(true);
      } else {
        switch (type) {
          case 132:
            key = this.parseNumericLiteral(value);
            break;
          case 131:
            key = this.parseStringLiteral(value);
            break;
          case 133:
            key = this.parseBigIntLiteral(value);
            break;
          case 134:
            key = this.parseDecimalLiteral(value);
            break;
          case 136:
            {
              const privateKeyLoc = this.state.startLoc;
              if (refExpressionErrors != null) {
                if (refExpressionErrors.privateKeyLoc === null) {
                  refExpressionErrors.privateKeyLoc = privateKeyLoc;
                }
              } else {
                this.raise(Errors.UnexpectedPrivateField, {
                  at: privateKeyLoc
                });
              }
              key = this.parsePrivateName();
              break;
            }
          default:
            throw this.unexpected();
        }
      }
      prop.key = key;
      if (type !== 136) {
        prop.computed = false;
      }
    }
    return prop.key;
  }

  initFunction(node, isAsync) {
    node.id = null;
    node.generator = false;
    node.async = isAsync;
  }

  parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {
    this.initFunction(node, isAsync);
    node.generator = isGenerator;
    const allowModifiers = isConstructor;
    this.scope.enter(SCOPE_FUNCTION | SCOPE_SUPER | (inClassScope ? SCOPE_CLASS : 0) | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));
    this.prodParam.enter(functionFlags(isAsync, node.generator));
    this.parseFunctionParams(node, allowModifiers);
    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);
    this.prodParam.exit();
    this.scope.exit();
    return finishedNode;
  }

  parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {
    if (isTuple) {
      this.expectPlugin("recordAndTuple");
    }
    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
    this.state.inFSharpPipelineDirectBody = false;
    const node = this.startNode();
    this.next();
    node.elements = this.parseExprList(close, !isTuple, refExpressionErrors,
    node);
    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
    return this.finishNode(node, isTuple ? "TupleExpression" : "ArrayExpression");
  }

  parseArrowExpression(node, params, isAsync, trailingCommaLoc) {
    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);
    let flags = functionFlags(isAsync, false);
    if (!this.match(5) && this.prodParam.hasIn) {
      flags |= PARAM_IN;
    }
    this.prodParam.enter(flags);
    this.initFunction(node, isAsync);
    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
    if (params) {
      this.state.maybeInArrowParameters = true;
      this.setArrowFunctionParameters(node, params, trailingCommaLoc);
    }
    this.state.maybeInArrowParameters = false;
    this.parseFunctionBody(node, true);
    this.prodParam.exit();
    this.scope.exit();
    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
    return this.finishNode(node, "ArrowFunctionExpression");
  }
  setArrowFunctionParameters(node, params, trailingCommaLoc) {
    this.toAssignableList(params, trailingCommaLoc, false);
    node.params = params;
  }
  parseFunctionBodyAndFinish(node, type, isMethod = false) {
    this.parseFunctionBody(node, false, isMethod);
    return this.finishNode(node, type);
  }

  parseFunctionBody(node, allowExpression, isMethod = false) {
    const isExpression = allowExpression && !this.match(5);
    this.expressionScope.enter(newExpressionScope());
    if (isExpression) {
      node.body = this.parseMaybeAssign();
      this.checkParams(node, false, allowExpression, false);
    } else {
      const oldStrict = this.state.strict;
      const oldLabels = this.state.labels;
      this.state.labels = [];

      this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);
      node.body = this.parseBlock(true, false,
      hasStrictModeDirective => {
        const nonSimple = !this.isSimpleParamList(node.params);
        if (hasStrictModeDirective && nonSimple) {
          this.raise(Errors.IllegalLanguageModeDirective, {
            at:
            (node.kind === "method" || node.kind === "constructor") &&
            !!node.key ?
            node.key.loc.end : node
          });
        }
        const strictModeChanged = !oldStrict && this.state.strict;

        this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged);

        if (this.state.strict && node.id) {
          this.checkIdentifier(node.id, BIND_OUTSIDE, strictModeChanged);
        }
      });
      this.prodParam.exit();
      this.state.labels = oldLabels;
    }
    this.expressionScope.exit();
  }
  isSimpleParameter(node) {
    return node.type === "Identifier";
  }
  isSimpleParamList(params) {
    for (let i = 0, len = params.length; i < len; i++) {
      if (!this.isSimpleParameter(params[i])) return false;
    }
    return true;
  }
  checkParams(node, allowDuplicates,
  isArrowFunction, strictModeChanged = true) {
    const checkClashes = !allowDuplicates && new Set();
    const formalParameters = {
      type: "FormalParameters"
    };
    for (const param of node.params) {
      this.checkLVal(param, {
        in: formalParameters,
        binding: BIND_VAR,
        checkClashes,
        strictModeChanged
      });
    }
  }

  parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) {
    const elts = [];
    let first = true;
    while (!this.eat(close)) {
      if (first) {
        first = false;
      } else {
        this.expect(12);
        if (this.match(close)) {
          if (nodeForExtra) {
            this.addTrailingCommaExtraToNode(nodeForExtra);
          }
          this.next();
          break;
        }
      }
      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));
    }
    return elts;
  }
  parseExprListItem(allowEmpty, refExpressionErrors, allowPlaceholder) {
    let elt;
    if (this.match(12)) {
      if (!allowEmpty) {
        this.raise(Errors.UnexpectedToken, {
          at: this.state.curPosition(),
          unexpected: ","
        });
      }
      elt = null;
    } else if (this.match(21)) {
      const spreadNodeStartLoc = this.state.startLoc;
      elt = this.parseParenItem(this.parseSpread(refExpressionErrors), spreadNodeStartLoc);
    } else if (this.match(17)) {
      this.expectPlugin("partialApplication");
      if (!allowPlaceholder) {
        this.raise(Errors.UnexpectedArgumentPlaceholder, {
          at: this.state.startLoc
        });
      }
      const node = this.startNode();
      this.next();
      elt = this.finishNode(node, "ArgumentPlaceholder");
    } else {
      elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem);
    }
    return elt;
  }

  parseIdentifier(liberal) {
    const node = this.startNode();
    const name = this.parseIdentifierName(liberal);
    return this.createIdentifier(node, name);
  }
  createIdentifier(node, name) {
    node.name = name;
    node.loc.identifierName = name;
    return this.finishNode(node, "Identifier");
  }
  parseIdentifierName(liberal) {
    let name;
    const {
      startLoc,
      type
    } = this.state;
    if (tokenIsKeywordOrIdentifier(type)) {
      name = this.state.value;
    } else {
      throw this.unexpected();
    }
    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);
    if (liberal) {
      if (tokenIsKeyword) {
        this.replaceToken(130);
      }
    } else {
      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);
    }
    this.next();
    return name;
  }
  checkReservedWord(word, startLoc, checkKeywords, isBinding) {
    if (word.length > 10) {
      return;
    }
    if (!canBeReservedWord(word)) {
      return;
    }
    if (word === "yield") {
      if (this.prodParam.hasYield) {
        this.raise(Errors.YieldBindingIdentifier, {
          at: startLoc
        });
        return;
      }
    } else if (word === "await") {
      if (this.prodParam.hasAwait) {
        this.raise(Errors.AwaitBindingIdentifier, {
          at: startLoc
        });
        return;
      }
      if (this.scope.inStaticBlock) {
        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, {
          at: startLoc
        });
        return;
      }
      this.expressionScope.recordAsyncArrowParametersError({
        at: startLoc
      });
    } else if (word === "arguments") {
      if (this.scope.inClassAndNotInNonArrowFunction) {
        this.raise(Errors.ArgumentsInClass, {
          at: startLoc
        });
        return;
      }
    }
    if (checkKeywords && isKeyword(word)) {
      this.raise(Errors.UnexpectedKeyword, {
        at: startLoc,
        keyword: word
      });
      return;
    }
    const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord;
    if (reservedTest(word, this.inModule)) {
      this.raise(Errors.UnexpectedReservedWord, {
        at: startLoc,
        reservedWord: word
      });
    }
  }
  isAwaitAllowed() {
    if (this.prodParam.hasAwait) return true;
    if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {
      return true;
    }
    return false;
  }

  parseAwait(startLoc) {
    const node = this.startNodeAt(startLoc);
    this.expressionScope.recordParameterInitializerError(Errors.AwaitExpressionFormalParameter, {
      at: node
    });
    if (this.eat(55)) {
      this.raise(Errors.ObsoleteAwaitStar, {
        at: node
      });
    }
    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {
      if (this.isAmbiguousAwait()) {
        this.ambiguousScriptDifferentAst = true;
      } else {
        this.sawUnambiguousESM = true;
      }
    }
    if (!this.state.soloAwait) {
      node.argument = this.parseMaybeUnary(null, true);
    }
    return this.finishNode(node, "AwaitExpression");
  }
  isAmbiguousAwait() {
    if (this.hasPrecedingLineBreak()) return true;
    const {
      type
    } = this.state;
    return (
      type === 53 || type === 10 || type === 0 || tokenIsTemplate(type) || type === 101 && !this.state.containsEsc ||
      type === 135 || type === 56 ||
      this.hasPlugin("v8intrinsic") && type === 54
    );
  }

  parseYield() {
    const node = this.startNode();
    this.expressionScope.recordParameterInitializerError(Errors.YieldInParameter, {
      at: node
    });
    this.next();
    let delegating = false;
    let argument = null;
    if (!this.hasPrecedingLineBreak()) {
      delegating = this.eat(55);
      switch (this.state.type) {
        case 13:
        case 137:
        case 8:
        case 11:
        case 3:
        case 9:
        case 14:
        case 12:
          if (!delegating) break;
        default:
          argument = this.parseMaybeAssign();
      }
    }
    node.delegate = delegating;
    node.argument = argument;
    return this.finishNode(node, "YieldExpression");
  }

  checkPipelineAtInfixOperator(left, leftStartLoc) {
    if (this.hasPlugin(["pipelineOperator", {
      proposal: "smart"
    }])) {
      if (left.type === "SequenceExpression") {
        this.raise(Errors.PipelineHeadSequenceExpression, {
          at: leftStartLoc
        });
      }
    }
  }
  parseSmartPipelineBodyInStyle(childExpr, startLoc) {
    if (this.isSimpleReference(childExpr)) {
      const bodyNode = this.startNodeAt(startLoc);
      bodyNode.callee = childExpr;
      return this.finishNode(bodyNode, "PipelineBareFunction");
    } else {
      const bodyNode = this.startNodeAt(startLoc);
      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);
      bodyNode.expression = childExpr;
      return this.finishNode(bodyNode, "PipelineTopicExpression");
    }
  }
  isSimpleReference(expression) {
    switch (expression.type) {
      case "MemberExpression":
        return !expression.computed && this.isSimpleReference(expression.object);
      case "Identifier":
        return true;
      default:
        return false;
    }
  }

  checkSmartPipeTopicBodyEarlyErrors(startLoc) {
    if (this.match(19)) {
      throw this.raise(Errors.PipelineBodyNoArrow, {
        at: this.state.startLoc
      });
    }

    if (!this.topicReferenceWasUsedInCurrentContext()) {
      this.raise(Errors.PipelineTopicUnused, {
        at: startLoc
      });
    }
  }

  withTopicBindingContext(callback) {
    const outerContextTopicState = this.state.topicContext;
    this.state.topicContext = {
      maxNumOfResolvableTopics: 1,
      maxTopicIndex: null
    };
    try {
      return callback();
    } finally {
      this.state.topicContext = outerContextTopicState;
    }
  }

  withSmartMixTopicForbiddingContext(callback) {
    if (this.hasPlugin(["pipelineOperator", {
      proposal: "smart"
    }])) {
      const outerContextTopicState = this.state.topicContext;
      this.state.topicContext = {
        maxNumOfResolvableTopics: 0,
        maxTopicIndex: null
      };
      try {
        return callback();
      } finally {
        this.state.topicContext = outerContextTopicState;
      }
    } else {
      return callback();
    }
  }
  withSoloAwaitPermittingContext(callback) {
    const outerContextSoloAwaitState = this.state.soloAwait;
    this.state.soloAwait = true;
    try {
      return callback();
    } finally {
      this.state.soloAwait = outerContextSoloAwaitState;
    }
  }
  allowInAnd(callback) {
    const flags = this.prodParam.currentFlags();
    const prodParamToSet = PARAM_IN & ~flags;
    if (prodParamToSet) {
      this.prodParam.enter(flags | PARAM_IN);
      try {
        return callback();
      } finally {
        this.prodParam.exit();
      }
    }
    return callback();
  }
  disallowInAnd(callback) {
    const flags = this.prodParam.currentFlags();
    const prodParamToClear = PARAM_IN & flags;
    if (prodParamToClear) {
      this.prodParam.enter(flags & ~PARAM_IN);
      try {
        return callback();
      } finally {
        this.prodParam.exit();
      }
    }
    return callback();
  }

  registerTopicReference() {
    this.state.topicContext.maxTopicIndex = 0;
  }
  topicReferenceIsAllowedInCurrentContext() {
    return this.state.topicContext.maxNumOfResolvableTopics >= 1;
  }
  topicReferenceWasUsedInCurrentContext() {
    return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0;
  }
  parseFSharpPipelineBody(prec) {
    const startLoc = this.state.startLoc;
    this.state.potentialArrowAt = this.state.start;
    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
    this.state.inFSharpPipelineDirectBody = true;
    const ret = this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, prec);
    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
    return ret;
  }

  parseModuleExpression() {
    this.expectPlugin("moduleBlocks");
    const node = this.startNode();
    this.next();
    if (!this.match(5)) {
      this.unexpected(null, 5);
    }
    const program = this.startNodeAt(this.state.endLoc);
    this.next();

    const revertScopes = this.initializeScopes(true);
    this.enterInitialScopes();
    try {
      node.body = this.parseProgram(program, 8, "module");
    } finally {
      revertScopes();
    }
    return this.finishNode(node, "ModuleExpression");
  }

  parsePropertyNamePrefixOperator(
  prop) {}
}

const loopLabel = {
    kind: "loop"
  },
  switchLabel = {
    kind: "switch"
  };
var ParseFunctionFlag = {
  Expression: 0,
  Declaration: 1,
  HangingDeclaration: 2,
  NullableId: 4,
  Async: 8
};
var ParseStatementFlag = {
  StatementOnly: 0,
  AllowImportExport: 1,
  AllowDeclaration: 2,
  AllowFunctionDeclaration: 4,
  AllowLabeledFunction: 8
};
const loneSurrogate = /[\uD800-\uDFFF]/u;
const keywordRelationalOperator = /in(?:stanceof)?/y;

function babel7CompatTokens(tokens, input) {
  for (let i = 0; i < tokens.length; i++) {
    const token = tokens[i];
    const {
      type
    } = token;
    if (typeof type === "number") {
      {
        if (type === 136) {
          const {
            loc,
            start,
            value,
            end
          } = token;
          const hashEndPos = start + 1;
          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);
          tokens.splice(i, 1, new Token({
            type: getExportedToken(27),
            value: "#",
            start: start,
            end: hashEndPos,
            startLoc: loc.start,
            endLoc: hashEndLoc
          }), new Token({
            type: getExportedToken(130),
            value: value,
            start: hashEndPos,
            end: end,
            startLoc: hashEndLoc,
            endLoc: loc.end
          }));
          i++;
          continue;
        }
        if (tokenIsTemplate(type)) {
          const {
            loc,
            start,
            value,
            end
          } = token;
          const backquoteEnd = start + 1;
          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);
          let startToken;
          if (input.charCodeAt(start) === 96) {
            startToken = new Token({
              type: getExportedToken(22),
              value: "`",
              start: start,
              end: backquoteEnd,
              startLoc: loc.start,
              endLoc: backquoteEndLoc
            });
          } else {
            startToken = new Token({
              type: getExportedToken(8),
              value: "}",
              start: start,
              end: backquoteEnd,
              startLoc: loc.start,
              endLoc: backquoteEndLoc
            });
          }
          let templateValue, templateElementEnd, templateElementEndLoc, endToken;
          if (type === 24) {
            templateElementEnd = end - 1;
            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);
            templateValue = value === null ? null : value.slice(1, -1);
            endToken = new Token({
              type: getExportedToken(22),
              value: "`",
              start: templateElementEnd,
              end: end,
              startLoc: templateElementEndLoc,
              endLoc: loc.end
            });
          } else {
            templateElementEnd = end - 2;
            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);
            templateValue = value === null ? null : value.slice(1, -2);
            endToken = new Token({
              type: getExportedToken(23),
              value: "${",
              start: templateElementEnd,
              end: end,
              startLoc: templateElementEndLoc,
              endLoc: loc.end
            });
          }
          tokens.splice(i, 1, startToken, new Token({
            type: getExportedToken(20),
            value: templateValue,
            start: backquoteEnd,
            end: templateElementEnd,
            startLoc: backquoteEndLoc,
            endLoc: templateElementEndLoc
          }), endToken);
          i += 2;
          continue;
        }
      }
      token.type = getExportedToken(type);
    }
  }
  return tokens;
}
class StatementParser extends ExpressionParser {

  parseTopLevel(file, program) {
    file.program = this.parseProgram(program);
    file.comments = this.state.comments;
    if (this.options.tokens) {
      file.tokens = babel7CompatTokens(this.tokens, this.input);
    }
    return this.finishNode(file, "File");
  }
  parseProgram(program, end = 137, sourceType = this.options.sourceType) {
    program.sourceType = sourceType;
    program.interpreter = this.parseInterpreterDirective();
    this.parseBlockBody(program, true, true, end);
    if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) {
      for (const [localName, at] of Array.from(this.scope.undefinedExports)) {
        this.raise(Errors.ModuleExportUndefined, {
          at,
          localName
        });
      }
    }
    let finishedProgram;
    if (end === 137) {
      finishedProgram = this.finishNode(program, "Program");
    } else {
      finishedProgram = this.finishNodeAt(program, "Program", createPositionWithColumnOffset(this.state.startLoc, -1));
    }
    return finishedProgram;
  }

  stmtToDirective(stmt) {
    const directive = stmt;
    directive.type = "Directive";
    directive.value = directive.expression;
    delete directive.expression;
    const directiveLiteral = directive.value;
    const expressionValue = directiveLiteral.value;
    const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);
    const val = directiveLiteral.value = raw.slice(1, -1);

    this.addExtra(directiveLiteral, "raw", raw);
    this.addExtra(directiveLiteral, "rawValue", val);
    this.addExtra(directiveLiteral, "expressionValue", expressionValue);
    directiveLiteral.type = "DirectiveLiteral";
    return directive;
  }
  parseInterpreterDirective() {
    if (!this.match(28)) {
      return null;
    }
    const node = this.startNode();
    node.value = this.state.value;
    this.next();
    return this.finishNode(node, "InterpreterDirective");
  }
  isLet() {
    if (!this.isContextual(99)) {
      return false;
    }
    return this.hasFollowingBindingAtom();
  }
  chStartsBindingIdentifier(ch, pos) {
    if (isIdentifierStart(ch)) {
      keywordRelationalOperator.lastIndex = pos;
      if (keywordRelationalOperator.test(this.input)) {
        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);
        if (!isIdentifierChar(endCh) && endCh !== 92) {
          return false;
        }
      }
      return true;
    } else if (ch === 92) {
      return true;
    } else {
      return false;
    }
  }
  chStartsBindingPattern(ch) {
    return ch === 91 || ch === 123;
  }

  hasFollowingBindingAtom() {
    const next = this.nextTokenStart();
    const nextCh = this.codePointAtPos(next);
    return this.chStartsBindingPattern(nextCh) || this.chStartsBindingIdentifier(nextCh, next);
  }

  hasFollowingBindingIdentifier() {
    const next = this.nextTokenStart();
    const nextCh = this.codePointAtPos(next);
    return this.chStartsBindingIdentifier(nextCh, next);
  }
  startsUsingForOf() {
    const lookahead = this.lookahead();
    if (lookahead.type === 101 && !lookahead.containsEsc) {
      return false;
    } else {
      this.expectPlugin("explicitResourceManagement");
      return true;
    }
  }

  parseModuleItem() {
    return this.parseStatementLike(ParseStatementFlag.AllowImportExport | ParseStatementFlag.AllowDeclaration | ParseStatementFlag.AllowFunctionDeclaration | ParseStatementFlag.AllowLabeledFunction);
  }

  parseStatementListItem() {
    return this.parseStatementLike(ParseStatementFlag.AllowDeclaration | ParseStatementFlag.AllowFunctionDeclaration | ParseStatementFlag.AllowLabeledFunction);
  }
  parseStatementOrFunctionDeclaration(disallowLabeledFunction) {
    return this.parseStatementLike(ParseStatementFlag.AllowFunctionDeclaration | (disallowLabeledFunction ? 0 : ParseStatementFlag.AllowLabeledFunction));
  }

  parseStatement() {
    return this.parseStatementLike(ParseStatementFlag.StatementOnly);
  }

  parseStatementLike(flags) {
    let decorators = null;
    if (this.match(26)) {
      decorators = this.parseDecorators(true);
    }
    return this.parseStatementContent(flags, decorators);
  }
  parseStatementContent(flags, decorators) {
    const starttype = this.state.type;
    const node = this.startNode();
    const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);
    const allowFunctionDeclaration = !!(flags & ParseStatementFlag.AllowFunctionDeclaration);
    const topLevel = flags & ParseStatementFlag.AllowImportExport;

    switch (starttype) {
      case 60:
        return this.parseBreakContinueStatement(node, true);
      case 63:
        return this.parseBreakContinueStatement(node, false);
      case 64:
        return this.parseDebuggerStatement(node);
      case 90:
        return this.parseDoWhileStatement(node);
      case 91:
        return this.parseForStatement(node);
      case 68:
        if (this.lookaheadCharCode() === 46) break;
        if (!allowDeclaration) {
          if (this.state.strict) {
            this.raise(Errors.StrictFunction, {
              at: this.state.startLoc
            });
          } else if (!allowFunctionDeclaration) {
            this.raise(Errors.SloppyFunction, {
              at: this.state.startLoc
            });
          }
        }
        return this.parseFunctionStatement(node, false, !allowDeclaration && allowFunctionDeclaration);
      case 80:
        if (!allowDeclaration) this.unexpected();
        return this.parseClass(this.maybeTakeDecorators(decorators, node), true);
      case 69:
        return this.parseIfStatement(node);
      case 70:
        return this.parseReturnStatement(node);
      case 71:
        return this.parseSwitchStatement(node);
      case 72:
        return this.parseThrowStatement(node);
      case 73:
        return this.parseTryStatement(node);
      case 105:
        if (this.hasFollowingLineBreak() || this.state.containsEsc || !this.hasFollowingBindingIdentifier()) {
          break;
        }
        this.expectPlugin("explicitResourceManagement");
        if (!this.scope.inModule && this.scope.inTopLevel) {
          this.raise(Errors.UnexpectedUsingDeclaration, {
            at: this.state.startLoc
          });
        } else if (!allowDeclaration) {
          this.raise(Errors.UnexpectedLexicalDeclaration, {
            at: this.state.startLoc
          });
        }
        return this.parseVarStatement(node, "using");
      case 99:
        {
          if (this.state.containsEsc) {
            break;
          }
          const next = this.nextTokenStart();
          const nextCh = this.codePointAtPos(next);
          if (nextCh !== 91) {
            if (!allowDeclaration && this.hasFollowingLineBreak()) break;
            if (!this.chStartsBindingIdentifier(nextCh, next) && nextCh !== 123) {
              break;
            }
          }
        }
      case 75:
        {
          if (!allowDeclaration) {
            this.raise(Errors.UnexpectedLexicalDeclaration, {
              at: this.state.startLoc
            });
          }
        }
      case 74:
        {
          const kind = this.state.value;
          return this.parseVarStatement(node, kind);
        }
      case 92:
        return this.parseWhileStatement(node);
      case 76:
        return this.parseWithStatement(node);
      case 5:
        return this.parseBlock();
      case 13:
        return this.parseEmptyStatement(node);
      case 83:
        {
          const nextTokenCharCode = this.lookaheadCharCode();
          if (nextTokenCharCode === 40 ||
          nextTokenCharCode === 46) {
            break;
          }
        }
      case 82:
        {
          if (!this.options.allowImportExportEverywhere && !topLevel) {
            this.raise(Errors.UnexpectedImportExport, {
              at: this.state.startLoc
            });
          }
          this.next();

          let result;
          if (starttype === 83) {
            result = this.parseImport(node);
            if (result.type === "ImportDeclaration" && (!result.importKind || result.importKind === "value")) {
              this.sawUnambiguousESM = true;
            }
          } else {
            result = this.parseExport(node, decorators);
            if (result.type === "ExportNamedDeclaration" && (!result.exportKind || result.exportKind === "value") || result.type === "ExportAllDeclaration" && (!result.exportKind || result.exportKind === "value") || result.type === "ExportDefaultDeclaration") {
              this.sawUnambiguousESM = true;
            }
          }
          this.assertModuleNodeAllowed(result);
          return result;
        }
      default:
        {
          if (this.isAsyncFunction()) {
            if (!allowDeclaration) {
              this.raise(Errors.AsyncFunctionInSingleStatementContext, {
                at: this.state.startLoc
              });
            }
            this.next();
            return this.parseFunctionStatement(node, true, !allowDeclaration && allowFunctionDeclaration);
          }
        }
    }

    const maybeName = this.state.value;
    const expr = this.parseExpression();
    if (tokenIsIdentifier(starttype) && expr.type === "Identifier" && this.eat(14)) {
      return this.parseLabeledStatement(node, maybeName,
      expr, flags);
    } else {
      return this.parseExpressionStatement(node, expr, decorators);
    }
  }
  assertModuleNodeAllowed(node) {
    if (!this.options.allowImportExportEverywhere && !this.inModule) {
      this.raise(Errors.ImportOutsideModule, {
        at: node
      });
    }
  }
  decoratorsEnabledBeforeExport() {
    if (this.hasPlugin("decorators-legacy")) return true;
    return this.hasPlugin("decorators") && !!this.getPluginOption("decorators", "decoratorsBeforeExport");
  }

  maybeTakeDecorators(maybeDecorators, classNode, exportNode) {
    if (maybeDecorators) {
      classNode.decorators = maybeDecorators;
      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);
      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);
    }
    return classNode;
  }
  canHaveLeadingDecorator() {
    return this.match(80);
  }
  parseDecorators(allowExport) {
    const decorators = [];
    do {
      decorators.push(this.parseDecorator());
    } while (this.match(26));
    if (this.match(82)) {
      if (!allowExport) {
        this.unexpected();
      }
      if (!this.decoratorsEnabledBeforeExport()) {
        this.raise(Errors.DecoratorExportClass, {
          at: this.state.startLoc
        });
      }
    } else if (!this.canHaveLeadingDecorator()) {
      throw this.raise(Errors.UnexpectedLeadingDecorator, {
        at: this.state.startLoc
      });
    }
    return decorators;
  }
  parseDecorator() {
    this.expectOnePlugin(["decorators", "decorators-legacy"]);
    const node = this.startNode();
    this.next();
    if (this.hasPlugin("decorators")) {
      const startLoc = this.state.startLoc;
      let expr;
      if (this.match(10)) {
        const startLoc = this.state.startLoc;
        this.next();
        expr = this.parseExpression();
        this.expect(11);
        expr = this.wrapParenthesis(startLoc, expr);
        const paramsStartLoc = this.state.startLoc;
        node.expression = this.parseMaybeDecoratorArguments(expr);
        if (this.getPluginOption("decorators", "allowCallParenthesized") === false && node.expression !== expr) {
          this.raise(Errors.DecoratorArgumentsOutsideParentheses, {
            at: paramsStartLoc
          });
        }
      } else {
        expr = this.parseIdentifier(false);
        while (this.eat(16)) {
          const node = this.startNodeAt(startLoc);
          node.object = expr;
          if (this.match(136)) {
            this.classScope.usePrivateName(this.state.value, this.state.startLoc);
            node.property = this.parsePrivateName();
          } else {
            node.property = this.parseIdentifier(true);
          }
          node.computed = false;
          expr = this.finishNode(node, "MemberExpression");
        }
        node.expression = this.parseMaybeDecoratorArguments(expr);
      }
    } else {
      node.expression = this.parseExprSubscripts();
    }
    return this.finishNode(node, "Decorator");
  }
  parseMaybeDecoratorArguments(expr) {
    if (this.eat(10)) {
      const node = this.startNodeAtNode(expr);
      node.callee = expr;
      node.arguments = this.parseCallExpressionArguments(11, false);
      this.toReferencedList(node.arguments);
      return this.finishNode(node, "CallExpression");
    }
    return expr;
  }
  parseBreakContinueStatement(node, isBreak) {
    this.next();
    if (this.isLineTerminator()) {
      node.label = null;
    } else {
      node.label = this.parseIdentifier();
      this.semicolon();
    }
    this.verifyBreakContinue(node, isBreak);
    return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement");
  }
  verifyBreakContinue(node, isBreak) {
    let i;
    for (i = 0; i < this.state.labels.length; ++i) {
      const lab = this.state.labels[i];
      if (node.label == null || lab.name === node.label.name) {
        if (lab.kind != null && (isBreak || lab.kind === "loop")) break;
        if (node.label && isBreak) break;
      }
    }
    if (i === this.state.labels.length) {
      const type = isBreak ? "BreakStatement" : "ContinueStatement";
      this.raise(Errors.IllegalBreakContinue, {
        at: node,
        type
      });
    }
  }
  parseDebuggerStatement(node) {
    this.next();
    this.semicolon();
    return this.finishNode(node, "DebuggerStatement");
  }
  parseHeaderExpression() {
    this.expect(10);
    const val = this.parseExpression();
    this.expect(11);
    return val;
  }

  parseDoWhileStatement(node) {
    this.next();
    this.state.labels.push(loopLabel);

    node.body =
    this.withSmartMixTopicForbiddingContext(() =>
    this.parseStatement());
    this.state.labels.pop();
    this.expect(92);
    node.test = this.parseHeaderExpression();
    this.eat(13);
    return this.finishNode(node, "DoWhileStatement");
  }

  parseForStatement(node) {
    this.next();
    this.state.labels.push(loopLabel);
    let awaitAt = null;
    if (this.isAwaitAllowed() && this.eatContextual(96)) {
      awaitAt = this.state.lastTokStartLoc;
    }
    this.scope.enter(SCOPE_OTHER);
    this.expect(10);
    if (this.match(13)) {
      if (awaitAt !== null) {
        this.unexpected(awaitAt);
      }
      return this.parseFor(node, null);
    }
    const startsWithLet = this.isContextual(99);
    const startsWithUsing = this.isContextual(105) && !this.hasFollowingLineBreak();
    const isLetOrUsing = startsWithLet && this.hasFollowingBindingAtom() || startsWithUsing && this.hasFollowingBindingIdentifier() && this.startsUsingForOf();
    if (this.match(74) || this.match(75) || isLetOrUsing) {
      const initNode = this.startNode();
      const kind = this.state.value;
      this.next();
      this.parseVar(initNode, true, kind);
      const init = this.finishNode(initNode, "VariableDeclaration");
      const isForIn = this.match(58);
      if (isForIn && startsWithUsing) {
        this.raise(Errors.ForInUsing, {
          at: init
        });
      }
      if ((isForIn || this.isContextual(101)) && init.declarations.length === 1) {
        return this.parseForIn(node, init, awaitAt);
      }
      if (awaitAt !== null) {
        this.unexpected(awaitAt);
      }
      return this.parseFor(node, init);
    }

    const startsWithAsync = this.isContextual(95);
    const refExpressionErrors = new ExpressionErrors();
    const init = this.parseExpression(true, refExpressionErrors);
    const isForOf = this.isContextual(101);
    if (isForOf) {
      if (startsWithLet) {
        this.raise(Errors.ForOfLet, {
          at: init
        });
      }
      if (
      awaitAt === null && startsWithAsync && init.type === "Identifier") {
        this.raise(Errors.ForOfAsync, {
          at: init
        });
      }
    }
    if (isForOf || this.match(58)) {
      this.checkDestructuringPrivate(refExpressionErrors);
      this.toAssignable(init, true);
      const type = isForOf ? "ForOfStatement" : "ForInStatement";
      this.checkLVal(init, {
        in: {
          type
        }
      });
      return this.parseForIn(node,
      init, awaitAt);
    } else {
      this.checkExpressionErrors(refExpressionErrors, true);
    }
    if (awaitAt !== null) {
      this.unexpected(awaitAt);
    }
    return this.parseFor(node, init);
  }

  parseFunctionStatement(node, isAsync, isHangingDeclaration) {
    this.next();
    return this.parseFunction(node, ParseFunctionFlag.Declaration | (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) | (isAsync ? ParseFunctionFlag.Async : 0));
  }

  parseIfStatement(node) {
    this.next();
    node.test = this.parseHeaderExpression();
    node.consequent = this.parseStatementOrFunctionDeclaration(
    true);
    node.alternate = this.eat(66) ? this.parseStatementOrFunctionDeclaration(true) : null;
    return this.finishNode(node, "IfStatement");
  }
  parseReturnStatement(node) {
    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {
      this.raise(Errors.IllegalReturn, {
        at: this.state.startLoc
      });
    }
    this.next();

    if (this.isLineTerminator()) {
      node.argument = null;
    } else {
      node.argument = this.parseExpression();
      this.semicolon();
    }
    return this.finishNode(node, "ReturnStatement");
  }

  parseSwitchStatement(node) {
    this.next();
    node.discriminant = this.parseHeaderExpression();
    const cases = node.cases = [];
    this.expect(5);
    this.state.labels.push(switchLabel);
    this.scope.enter(SCOPE_OTHER);

    let cur;
    for (let sawDefault; !this.match(8);) {
      if (this.match(61) || this.match(65)) {
        const isCase = this.match(61);
        if (cur) this.finishNode(cur, "SwitchCase");
        cases.push(cur = this.startNode());
        cur.consequent = [];
        this.next();
        if (isCase) {
          cur.test = this.parseExpression();
        } else {
          if (sawDefault) {
            this.raise(Errors.MultipleDefaultsInSwitch, {
              at: this.state.lastTokStartLoc
            });
          }
          sawDefault = true;
          cur.test = null;
        }
        this.expect(14);
      } else {
        if (cur) {
          cur.consequent.push(this.parseStatementListItem());
        } else {
          this.unexpected();
        }
      }
    }
    this.scope.exit();
    if (cur) this.finishNode(cur, "SwitchCase");
    this.next();
    this.state.labels.pop();
    return this.finishNode(node, "SwitchStatement");
  }
  parseThrowStatement(node) {
    this.next();
    if (this.hasPrecedingLineBreak()) {
      this.raise(Errors.NewlineAfterThrow, {
        at: this.state.lastTokEndLoc
      });
    }
    node.argument = this.parseExpression();
    this.semicolon();
    return this.finishNode(node, "ThrowStatement");
  }
  parseCatchClauseParam() {
    const param = this.parseBindingAtom();
    const simple = param.type === "Identifier";
    this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);
    this.checkLVal(param, {
      in: {
        type: "CatchClause"
      },
      binding: BIND_LEXICAL,
      allowingSloppyLetBinding: true
    });
    return param;
  }
  parseTryStatement(node) {
    this.next();
    node.block = this.parseBlock();
    node.handler = null;
    if (this.match(62)) {
      const clause = this.startNode();
      this.next();
      if (this.match(10)) {
        this.expect(10);
        clause.param = this.parseCatchClauseParam();
        this.expect(11);
      } else {
        clause.param = null;
        this.scope.enter(SCOPE_OTHER);
      }

      clause.body =
      this.withSmartMixTopicForbiddingContext(() =>
      this.parseBlock(false, false));
      this.scope.exit();
      node.handler = this.finishNode(clause, "CatchClause");
    }
    node.finalizer = this.eat(67) ? this.parseBlock() : null;
    if (!node.handler && !node.finalizer) {
      this.raise(Errors.NoCatchOrFinally, {
        at: node
      });
    }
    return this.finishNode(node, "TryStatement");
  }

  parseVarStatement(node, kind, allowMissingInitializer = false) {
    this.next();
    this.parseVar(node, false, kind, allowMissingInitializer);
    this.semicolon();
    return this.finishNode(node, "VariableDeclaration");
  }

  parseWhileStatement(node) {
    this.next();
    node.test = this.parseHeaderExpression();
    this.state.labels.push(loopLabel);

    node.body =
    this.withSmartMixTopicForbiddingContext(() =>
    this.parseStatement());
    this.state.labels.pop();
    return this.finishNode(node, "WhileStatement");
  }
  parseWithStatement(node) {
    if (this.state.strict) {
      this.raise(Errors.StrictWith, {
        at: this.state.startLoc
      });
    }
    this.next();
    node.object = this.parseHeaderExpression();

    node.body =
    this.withSmartMixTopicForbiddingContext(() =>
    this.parseStatement());
    return this.finishNode(node, "WithStatement");
  }
  parseEmptyStatement(node) {
    this.next();
    return this.finishNode(node, "EmptyStatement");
  }

  parseLabeledStatement(node, maybeName, expr, flags) {
    for (const label of this.state.labels) {
      if (label.name === maybeName) {
        this.raise(Errors.LabelRedeclaration, {
          at: expr,
          labelName: maybeName
        });
      }
    }
    const kind = tokenIsLoop(this.state.type) ? "loop" : this.match(71) ? "switch" : null;
    for (let i = this.state.labels.length - 1; i >= 0; i--) {
      const label = this.state.labels[i];
      if (label.statementStart === node.start) {
        label.statementStart = this.state.start;
        label.kind = kind;
      } else {
        break;
      }
    }
    this.state.labels.push({
      name: maybeName,
      kind: kind,
      statementStart: this.state.start
    });
    node.body = flags & ParseStatementFlag.AllowLabeledFunction ? this.parseStatementOrFunctionDeclaration(false) : this.parseStatement();
    this.state.labels.pop();
    node.label = expr;
    return this.finishNode(node, "LabeledStatement");
  }
  parseExpressionStatement(node, expr,
  decorators) {
    node.expression = expr;
    this.semicolon();
    return this.finishNode(node, "ExpressionStatement");
  }

  parseBlock(allowDirectives = false, createNewLexicalScope = true, afterBlockParse) {
    const node = this.startNode();
    if (allowDirectives) {
      this.state.strictErrors.clear();
    }
    this.expect(5);
    if (createNewLexicalScope) {
      this.scope.enter(SCOPE_OTHER);
    }
    this.parseBlockBody(node, allowDirectives, false, 8, afterBlockParse);
    if (createNewLexicalScope) {
      this.scope.exit();
    }
    return this.finishNode(node, "BlockStatement");
  }
  isValidDirective(stmt) {
    return stmt.type === "ExpressionStatement" && stmt.expression.type === "StringLiteral" && !stmt.expression.extra.parenthesized;
  }
  parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {
    const body = node.body = [];
    const directives = node.directives = [];
    this.parseBlockOrModuleBlockBody(body, allowDirectives ? directives : undefined, topLevel, end, afterBlockParse);
  }

  parseBlockOrModuleBlockBody(body, directives, topLevel, end, afterBlockParse) {
    const oldStrict = this.state.strict;
    let hasStrictModeDirective = false;
    let parsedNonDirective = false;
    while (!this.match(end)) {
      const stmt = topLevel ? this.parseModuleItem() : this.parseStatementListItem();
      if (directives && !parsedNonDirective) {
        if (this.isValidDirective(stmt)) {
          const directive = this.stmtToDirective(stmt);
          directives.push(directive);
          if (!hasStrictModeDirective && directive.value.value === "use strict") {
            hasStrictModeDirective = true;
            this.setStrict(true);
          }
          continue;
        }
        parsedNonDirective = true;
        this.state.strictErrors.clear();
      }
      body.push(stmt);
    }
    if (afterBlockParse) {
      afterBlockParse.call(this, hasStrictModeDirective);
    }
    if (!oldStrict) {
      this.setStrict(false);
    }
    this.next();
  }

  parseFor(node, init) {
    node.init = init;
    this.semicolon(false);
    node.test = this.match(13) ? null : this.parseExpression();
    this.semicolon(false);
    node.update = this.match(11) ? null : this.parseExpression();
    this.expect(11);

    node.body =
    this.withSmartMixTopicForbiddingContext(() =>
    this.parseStatement());
    this.scope.exit();
    this.state.labels.pop();
    return this.finishNode(node, "ForStatement");
  }

  parseForIn(node, init, awaitAt) {
    const isForIn = this.match(58);
    this.next();
    if (isForIn) {
      if (awaitAt !== null) this.unexpected(awaitAt);
    } else {
      node.await = awaitAt !== null;
    }
    if (init.type === "VariableDeclaration" && init.declarations[0].init != null && (!isForIn || this.state.strict || init.kind !== "var" || init.declarations[0].id.type !== "Identifier")) {
      this.raise(Errors.ForInOfLoopInitializer, {
        at: init,
        type: isForIn ? "ForInStatement" : "ForOfStatement"
      });
    }
    if (init.type === "AssignmentPattern") {
      this.raise(Errors.InvalidLhs, {
        at: init,
        ancestor: {
          type: "ForStatement"
        }
      });
    }
    node.left = init;
    node.right = isForIn ? this.parseExpression() : this.parseMaybeAssignAllowIn();
    this.expect(11);

    node.body =
    this.withSmartMixTopicForbiddingContext(() =>
    this.parseStatement());
    this.scope.exit();
    this.state.labels.pop();
    return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement");
  }

  parseVar(node, isFor, kind, allowMissingInitializer = false) {
    const declarations = node.declarations = [];
    node.kind = kind;
    for (;;) {
      const decl = this.startNode();
      this.parseVarId(decl, kind);
      decl.init = !this.eat(29) ? null : isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn();
      if (decl.init === null && !allowMissingInitializer) {
        if (decl.id.type !== "Identifier" && !(isFor && (this.match(58) || this.isContextual(101)))) {
          this.raise(Errors.DeclarationMissingInitializer, {
            at: this.state.lastTokEndLoc,
            kind: "destructuring"
          });
        } else if (kind === "const" && !(this.match(58) || this.isContextual(101))) {
          this.raise(Errors.DeclarationMissingInitializer, {
            at: this.state.lastTokEndLoc,
            kind: "const"
          });
        }
      }
      declarations.push(this.finishNode(decl, "VariableDeclarator"));
      if (!this.eat(12)) break;
    }
    return node;
  }
  parseVarId(decl, kind) {
    const id = this.parseBindingAtom();
    this.checkLVal(id, {
      in: {
        type: "VariableDeclarator"
      },
      binding: kind === "var" ? BIND_VAR : BIND_LEXICAL
    });
    decl.id = id;
  }

  parseAsyncFunctionExpression(node) {
    return this.parseFunction(node, ParseFunctionFlag.Async);
  }

  parseFunction(node, flags = ParseFunctionFlag.Expression) {
    const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;
    const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);
    const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);
    const isAsync = !!(flags & ParseFunctionFlag.Async);
    this.initFunction(node, isAsync);
    if (this.match(55)) {
      if (hangingDeclaration) {
        this.raise(Errors.GeneratorInSingleStatementContext, {
          at: this.state.startLoc
        });
      }
      this.next();
      node.generator = true;
    }
    if (isDeclaration) {
      node.id = this.parseFunctionId(requireId);
    }
    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
    this.state.maybeInArrowParameters = false;
    this.scope.enter(SCOPE_FUNCTION);
    this.prodParam.enter(functionFlags(isAsync, node.generator));
    if (!isDeclaration) {
      node.id = this.parseFunctionId();
    }
    this.parseFunctionParams(node, false);

    this.withSmartMixTopicForbiddingContext(() => {
      this.parseFunctionBodyAndFinish(node, isDeclaration ? "FunctionDeclaration" : "FunctionExpression");
    });
    this.prodParam.exit();
    this.scope.exit();
    if (isDeclaration && !hangingDeclaration) {
      this.registerFunctionStatementId(node);
    }
    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
    return node;
  }
  parseFunctionId(requireId) {
    return requireId || tokenIsIdentifier(this.state.type) ? this.parseIdentifier() : null;
  }
  parseFunctionParams(node, allowModifiers) {
    this.expect(10);
    this.expressionScope.enter(newParameterDeclarationScope());
    node.params = this.parseBindingList(11, 41, false, allowModifiers);
    this.expressionScope.exit();
  }
  registerFunctionStatementId(node) {
    if (!node.id) return;

    this.scope.declareName(node.id.name, this.state.strict || node.generator || node.async ? this.scope.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION, node.id.loc.start);
  }

  parseClass(node, isStatement, optionalId) {
    this.next();

    const oldStrict = this.state.strict;
    this.state.strict = true;
    this.parseClassId(node, isStatement, optionalId);
    this.parseClassSuper(node);
    node.body = this.parseClassBody(!!node.superClass, oldStrict);
    return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression");
  }
  isClassProperty() {
    return this.match(29) || this.match(13) || this.match(8);
  }
  isClassMethod() {
    return this.match(10);
  }
  isNonstaticConstructor(method) {
    return !method.computed && !method.static && (method.key.name === "constructor" ||
    method.key.value === "constructor");
  }

  parseClassBody(hadSuperClass, oldStrict) {
    this.classScope.enter();
    const state = {
      hadConstructor: false,
      hadSuperClass
    };
    let decorators = [];
    const classBody = this.startNode();
    classBody.body = [];
    this.expect(5);

    this.withSmartMixTopicForbiddingContext(() => {
      while (!this.match(8)) {
        if (this.eat(13)) {
          if (decorators.length > 0) {
            throw this.raise(Errors.DecoratorSemicolon, {
              at: this.state.lastTokEndLoc
            });
          }
          continue;
        }
        if (this.match(26)) {
          decorators.push(this.parseDecorator());
          continue;
        }
        const member = this.startNode();

        if (decorators.length) {
          member.decorators = decorators;
          this.resetStartLocationFromNode(member, decorators[0]);
          decorators = [];
        }
        this.parseClassMember(classBody, member, state);
        if (
        member.kind === "constructor" &&
        member.decorators &&
        member.decorators.length > 0) {
          this.raise(Errors.DecoratorConstructor, {
            at: member
          });
        }
      }
    });
    this.state.strict = oldStrict;
    this.next();

    if (decorators.length) {
      throw this.raise(Errors.TrailingDecorator, {
        at: this.state.startLoc
      });
    }
    this.classScope.exit();
    return this.finishNode(classBody, "ClassBody");
  }

  parseClassMemberFromModifier(classBody, member) {
    const key = this.parseIdentifier(true);

    if (this.isClassMethod()) {
      const method = member;

      method.kind = "method";
      method.computed = false;
      method.key = key;
      method.static = false;
      this.pushClassMethod(classBody, method, false, false, false, false);
      return true;
    } else if (this.isClassProperty()) {
      const prop = member;

      prop.computed = false;
      prop.key = key;
      prop.static = false;
      classBody.body.push(this.parseClassProperty(prop));
      return true;
    }
    this.resetPreviousNodeTrailingComments(key);
    return false;
  }
  parseClassMember(classBody, member, state) {
    const isStatic = this.isContextual(104);
    if (isStatic) {
      if (this.parseClassMemberFromModifier(classBody, member)) {
        return;
      }
      if (this.eat(5)) {
        this.parseClassStaticBlock(classBody, member);
        return;
      }
    }
    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);
  }
  parseClassMemberWithIsStatic(classBody, member, state, isStatic) {
    const publicMethod = member;
    const privateMethod = member;
    const publicProp = member;
    const privateProp = member;
    const accessorProp = member;
    const method = publicMethod;
    const publicMember = publicMethod;
    member.static = isStatic;
    this.parsePropertyNamePrefixOperator(member);
    if (this.eat(55)) {
      method.kind = "method";
      const isPrivateName = this.match(136);
      this.parseClassElementName(method);
      if (isPrivateName) {
        this.pushClassPrivateMethod(classBody, privateMethod, true, false);
        return;
      }
      if (this.isNonstaticConstructor(publicMethod)) {
        this.raise(Errors.ConstructorIsGenerator, {
          at: publicMethod.key
        });
      }
      this.pushClassMethod(classBody, publicMethod, true, false, false, false);
      return;
    }
    const isContextual = tokenIsIdentifier(this.state.type) && !this.state.containsEsc;
    const isPrivate = this.match(136);
    const key = this.parseClassElementName(member);
    const maybeQuestionTokenStartLoc = this.state.startLoc;
    this.parsePostMemberNameModifiers(publicMember);
    if (this.isClassMethod()) {
      method.kind = "method";
      if (isPrivate) {
        this.pushClassPrivateMethod(classBody, privateMethod, false, false);
        return;
      }

      const isConstructor = this.isNonstaticConstructor(publicMethod);
      let allowsDirectSuper = false;
      if (isConstructor) {
        publicMethod.kind = "constructor";

        if (state.hadConstructor && !this.hasPlugin("typescript")) {
          this.raise(Errors.DuplicateConstructor, {
            at: key
          });
        }
        if (isConstructor && this.hasPlugin("typescript") && member.override) {
          this.raise(Errors.OverrideOnConstructor, {
            at: key
          });
        }
        state.hadConstructor = true;
        allowsDirectSuper = state.hadSuperClass;
      }
      this.pushClassMethod(classBody, publicMethod, false, false, isConstructor, allowsDirectSuper);
    } else if (this.isClassProperty()) {
      if (isPrivate) {
        this.pushClassPrivateProperty(classBody, privateProp);
      } else {
        this.pushClassProperty(classBody, publicProp);
      }
    } else if (isContextual && key.name === "async" && !this.isLineTerminator()) {
      this.resetPreviousNodeTrailingComments(key);
      const isGenerator = this.eat(55);
      if (publicMember.optional) {
        this.unexpected(maybeQuestionTokenStartLoc);
      }
      method.kind = "method";
      const isPrivate = this.match(136);
      this.parseClassElementName(method);
      this.parsePostMemberNameModifiers(publicMember);
      if (isPrivate) {
        this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true);
      } else {
        if (this.isNonstaticConstructor(publicMethod)) {
          this.raise(Errors.ConstructorIsAsync, {
            at: publicMethod.key
          });
        }
        this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false);
      }
    } else if (isContextual && (key.name === "get" || key.name === "set") && !(this.match(55) && this.isLineTerminator())) {
      this.resetPreviousNodeTrailingComments(key);
      method.kind = key.name;
      const isPrivate = this.match(136);
      this.parseClassElementName(publicMethod);
      if (isPrivate) {
        this.pushClassPrivateMethod(classBody, privateMethod, false, false);
      } else {
        if (this.isNonstaticConstructor(publicMethod)) {
          this.raise(Errors.ConstructorIsAccessor, {
            at: publicMethod.key
          });
        }
        this.pushClassMethod(classBody, publicMethod, false, false, false, false);
      }
      this.checkGetterSetterParams(publicMethod);
    } else if (isContextual && key.name === "accessor" && !this.isLineTerminator()) {
      this.expectPlugin("decoratorAutoAccessors");
      this.resetPreviousNodeTrailingComments(key);

      const isPrivate = this.match(136);
      this.parseClassElementName(publicProp);
      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);
    } else if (this.isLineTerminator()) {
      if (isPrivate) {
        this.pushClassPrivateProperty(classBody, privateProp);
      } else {
        this.pushClassProperty(classBody, publicProp);
      }
    } else {
      this.unexpected();
    }
  }

  parseClassElementName(member) {
    const {
      type,
      value
    } = this.state;
    if ((type === 130 || type === 131) && member.static && value === "prototype") {
      this.raise(Errors.StaticPrototype, {
        at: this.state.startLoc
      });
    }
    if (type === 136) {
      if (value === "constructor") {
        this.raise(Errors.ConstructorClassPrivateField, {
          at: this.state.startLoc
        });
      }
      const key = this.parsePrivateName();
      member.key = key;
      return key;
    }
    return this.parsePropertyName(member);
  }
  parseClassStaticBlock(classBody, member) {
    var _member$decorators;
    this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER);
    const oldLabels = this.state.labels;
    this.state.labels = [];
    this.prodParam.enter(PARAM);
    const body = member.body = [];
    this.parseBlockOrModuleBlockBody(body, undefined, false, 8);
    this.prodParam.exit();
    this.scope.exit();
    this.state.labels = oldLabels;
    classBody.body.push(this.finishNode(member, "StaticBlock"));
    if ((_member$decorators = member.decorators) != null && _member$decorators.length) {
      this.raise(Errors.DecoratorStaticBlock, {
        at: member
      });
    }
  }
  pushClassProperty(classBody, prop) {
    if (!prop.computed && (prop.key.name === "constructor" || prop.key.value === "constructor")) {
      this.raise(Errors.ConstructorClassField, {
        at: prop.key
      });
    }
    classBody.body.push(this.parseClassProperty(prop));
  }
  pushClassPrivateProperty(classBody, prop) {
    const node = this.parseClassPrivateProperty(prop);
    classBody.body.push(node);
    this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.loc.start);
  }
  pushClassAccessorProperty(classBody, prop, isPrivate) {
    if (!isPrivate && !prop.computed) {
      const key = prop.key;
      if (key.name === "constructor" || key.value === "constructor") {
        this.raise(Errors.ConstructorClassField, {
          at: key
        });
      }
    }
    const node = this.parseClassAccessorProperty(prop);
    classBody.body.push(node);
    if (isPrivate) {
      this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), CLASS_ELEMENT_OTHER, node.key.loc.start);
    }
  }
  pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
    classBody.body.push(this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, "ClassMethod", true));
  }
  pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {
    const node = this.parseMethod(method, isGenerator, isAsync, false, false, "ClassPrivateMethod", true);
    classBody.body.push(node);
    const kind = node.kind === "get" ? node.static ? CLASS_ELEMENT_STATIC_GETTER : CLASS_ELEMENT_INSTANCE_GETTER : node.kind === "set" ? node.static ? CLASS_ELEMENT_STATIC_SETTER : CLASS_ELEMENT_INSTANCE_SETTER : CLASS_ELEMENT_OTHER;
    this.declareClassPrivateMethodInScope(node, kind);
  }
  declareClassPrivateMethodInScope(node, kind) {
    this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), kind, node.key.loc.start);
  }

  parsePostMemberNameModifiers(
  methodOrProp) {}

  parseClassPrivateProperty(node) {
    this.parseInitializer(node);
    this.semicolon();
    return this.finishNode(node, "ClassPrivateProperty");
  }

  parseClassProperty(node) {
    this.parseInitializer(node);
    this.semicolon();
    return this.finishNode(node, "ClassProperty");
  }
  parseClassAccessorProperty(node) {
    this.parseInitializer(node);
    this.semicolon();
    return this.finishNode(node, "ClassAccessorProperty");
  }

  parseInitializer(node) {
    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);
    this.expressionScope.enter(newExpressionScope());
    this.prodParam.enter(PARAM);
    node.value = this.eat(29) ? this.parseMaybeAssignAllowIn() : null;
    this.expressionScope.exit();
    this.prodParam.exit();
    this.scope.exit();
  }
  parseClassId(node, isStatement, optionalId, bindingType = BIND_CLASS) {
    if (tokenIsIdentifier(this.state.type)) {
      node.id = this.parseIdentifier();
      if (isStatement) {
        this.declareNameFromIdentifier(node.id, bindingType);
      }
    } else {
      if (optionalId || !isStatement) {
        node.id = null;
      } else {
        throw this.raise(Errors.MissingClassName, {
          at: this.state.startLoc
        });
      }
    }
  }

  parseClassSuper(node) {
    node.superClass = this.eat(81) ? this.parseExprSubscripts() : null;
  }

  parseExport(node, decorators) {
    const hasDefault = this.maybeParseExportDefaultSpecifier(
    node);
    const parseAfterDefault = !hasDefault || this.eat(12);
    const hasStar = parseAfterDefault && this.eatExportStar(
    node);
    const hasNamespace = hasStar && this.maybeParseExportNamespaceSpecifier(
    node);
    const parseAfterNamespace = parseAfterDefault && (!hasNamespace || this.eat(12));
    const isFromRequired = hasDefault || hasStar;
    if (hasStar && !hasNamespace) {
      if (hasDefault) this.unexpected();
      if (decorators) {
        throw this.raise(Errors.UnsupportedDecoratorExport, {
          at: node
        });
      }
      this.parseExportFrom(node, true);
      return this.finishNode(node, "ExportAllDeclaration");
    }
    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(
    node);
    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers || hasNamespace && parseAfterNamespace && !hasSpecifiers) {
      throw this.unexpected(null, 5);
    }
    let hasDeclaration;
    if (isFromRequired || hasSpecifiers) {
      hasDeclaration = false;
      if (decorators) {
        throw this.raise(Errors.UnsupportedDecoratorExport, {
          at: node
        });
      }
      this.parseExportFrom(node, isFromRequired);
    } else {
      hasDeclaration = this.maybeParseExportDeclaration(node);
    }
    if (isFromRequired || hasSpecifiers || hasDeclaration) {
      var _node2$declaration;
      const node2 = node;
      this.checkExport(node2, true, false, !!node2.source);
      if (((_node2$declaration = node2.declaration) == null ? void 0 : _node2$declaration.type) === "ClassDeclaration") {
        this.maybeTakeDecorators(decorators, node2.declaration, node2);
      } else if (decorators) {
        throw this.raise(Errors.UnsupportedDecoratorExport, {
          at: node
        });
      }
      return this.finishNode(node2, "ExportNamedDeclaration");
    }
    if (this.eat(65)) {
      const node2 = node;
      const decl = this.parseExportDefaultExpression();
      node2.declaration = decl;
      if (decl.type === "ClassDeclaration") {
        this.maybeTakeDecorators(decorators, decl, node2);
      } else if (decorators) {
        throw this.raise(Errors.UnsupportedDecoratorExport, {
          at: node
        });
      }
      this.checkExport(node2, true, true);
      return this.finishNode(node2, "ExportDefaultDeclaration");
    }
    throw this.unexpected(null, 5);
  }

  eatExportStar(node) {
    return this.eat(55);
  }
  maybeParseExportDefaultSpecifier(node) {
    if (this.isExportDefaultSpecifier()) {
      this.expectPlugin("exportDefaultFrom");
      const specifier = this.startNode();
      specifier.exported = this.parseIdentifier(true);
      node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
      return true;
    }
    return false;
  }
  maybeParseExportNamespaceSpecifier(node) {
    if (this.isContextual(93)) {
      if (!node.specifiers) node.specifiers = [];
      const specifier = this.startNodeAt(this.state.lastTokStartLoc);
      this.next();
      specifier.exported = this.parseModuleExportName();
      node.specifiers.push(this.finishNode(specifier, "ExportNamespaceSpecifier"));
      return true;
    }
    return false;
  }
  maybeParseExportNamedSpecifiers(node) {
    if (this.match(5)) {
      if (!node.specifiers) node.specifiers = [];
      const isTypeExport = node.exportKind === "type";
      node.specifiers.push(...this.parseExportSpecifiers(isTypeExport));
      node.source = null;
      node.declaration = null;
      if (this.hasPlugin("importAssertions")) {
        node.assertions = [];
      }
      return true;
    }
    return false;
  }
  maybeParseExportDeclaration(node) {
    if (this.shouldParseExportDeclaration()) {
      node.specifiers = [];
      node.source = null;
      if (this.hasPlugin("importAssertions")) {
        node.assertions = [];
      }
      node.declaration = this.parseExportDeclaration(node);
      return true;
    }
    return false;
  }
  isAsyncFunction() {
    if (!this.isContextual(95)) return false;
    const next = this.nextTokenStart();
    return !lineBreak.test(this.input.slice(this.state.pos, next)) && this.isUnparsedContextual(next, "function");
  }
  parseExportDefaultExpression() {
    const expr = this.startNode();
    if (this.match(68)) {
      this.next();
      return this.parseFunction(expr, ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId);
    } else if (this.isAsyncFunction()) {
      this.next();
      this.next();
      return this.parseFunction(expr, ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId | ParseFunctionFlag.Async);
    }
    if (this.match(80)) {
      return this.parseClass(expr, true, true);
    }
    if (this.match(26)) {
      if (this.hasPlugin("decorators") && this.getPluginOption("decorators", "decoratorsBeforeExport")) {
        this.raise(Errors.DecoratorBeforeExport, {
          at: this.state.startLoc
        });
      }
      return this.parseClass(this.maybeTakeDecorators(this.parseDecorators(false), this.startNode()), true, true);
    }
    if (this.match(75) || this.match(74) || this.isLet()) {
      throw this.raise(Errors.UnsupportedDefaultExport, {
        at: this.state.startLoc
      });
    }
    const res = this.parseMaybeAssignAllowIn();
    this.semicolon();
    return res;
  }

  parseExportDeclaration(
  node) {
    if (this.match(80)) {
      const node = this.parseClass(this.startNode(), true, false);
      return node;
    }
    return this.parseStatementListItem();
  }
  isExportDefaultSpecifier() {
    const {
      type
    } = this.state;
    if (tokenIsIdentifier(type)) {
      if (type === 95 && !this.state.containsEsc || type === 99) {
        return false;
      }
      if ((type === 128 || type === 127) && !this.state.containsEsc) {
        const {
          type: nextType
        } = this.lookahead();
        if (tokenIsIdentifier(nextType) && nextType !== 97 || nextType === 5) {
          this.expectOnePlugin(["flow", "typescript"]);
          return false;
        }
      }
    } else if (!this.match(65)) {
      return false;
    }
    const next = this.nextTokenStart();
    const hasFrom = this.isUnparsedContextual(next, "from");
    if (this.input.charCodeAt(next) === 44 || tokenIsIdentifier(this.state.type) && hasFrom) {
      return true;
    }
    if (this.match(65) && hasFrom) {
      const nextAfterFrom = this.input.charCodeAt(this.nextTokenStartSince(next + 4));
      return nextAfterFrom === 34 || nextAfterFrom === 39;
    }
    return false;
  }
  parseExportFrom(node, expect) {
    if (this.eatContextual(97)) {
      node.source = this.parseImportSource();
      this.checkExport(node);
      const assertions = this.maybeParseImportAssertions();
      if (assertions) {
        node.assertions = assertions;
        this.checkJSONModuleImport(node);
      }
    } else if (expect) {
      this.unexpected();
    }
    this.semicolon();
  }
  shouldParseExportDeclaration() {
    const {
      type
    } = this.state;
    if (type === 26) {
      this.expectOnePlugin(["decorators", "decorators-legacy"]);
      if (this.hasPlugin("decorators")) {
        if (this.getPluginOption("decorators", "decoratorsBeforeExport")) {
          throw this.raise(Errors.DecoratorBeforeExport, {
            at: this.state.startLoc
          });
        }
        return true;
      }
    }
    return type === 74 || type === 75 || type === 68 || type === 80 || this.isLet() || this.isAsyncFunction();
  }
  checkExport(node, checkNames, isDefault, isFrom) {
    if (checkNames) {
      if (isDefault) {
        this.checkDuplicateExports(node, "default");
        if (this.hasPlugin("exportDefaultFrom")) {
          var _declaration$extra;
          const declaration = node.declaration;
          if (declaration.type === "Identifier" && declaration.name === "from" && declaration.end - declaration.start === 4 &&
          !((_declaration$extra = declaration.extra) != null && _declaration$extra.parenthesized)) {
            this.raise(Errors.ExportDefaultFromAsIdentifier, {
              at: declaration
            });
          }
        }
      } else if (node.specifiers && node.specifiers.length) {
        for (const specifier of node.specifiers) {
          const {
            exported
          } = specifier;
          const exportName = exported.type === "Identifier" ? exported.name : exported.value;
          this.checkDuplicateExports(specifier, exportName);
          if (!isFrom && specifier.local) {
            const {
              local
            } = specifier;
            if (local.type !== "Identifier") {
              this.raise(Errors.ExportBindingIsString, {
                at: specifier,
                localName: local.value,
                exportName
              });
            } else {
              this.checkReservedWord(local.name, local.loc.start, true, false);
              this.scope.checkLocalExport(local);
            }
          }
        }
      } else if (node.declaration) {
        if (node.declaration.type === "FunctionDeclaration" || node.declaration.type === "ClassDeclaration") {
          const id = node.declaration.id;
          if (!id) throw new Error("Assertion failure");
          this.checkDuplicateExports(node, id.name);
        } else if (node.declaration.type === "VariableDeclaration") {
          for (const declaration of node.declaration.declarations) {
            this.checkDeclaration(declaration.id);
          }
        }
      }
    }
  }
  checkDeclaration(node) {
    if (node.type === "Identifier") {
      this.checkDuplicateExports(node, node.name);
    } else if (node.type === "ObjectPattern") {
      for (const prop of node.properties) {
        this.checkDeclaration(prop);
      }
    } else if (node.type === "ArrayPattern") {
      for (const elem of node.elements) {
        if (elem) {
          this.checkDeclaration(elem);
        }
      }
    } else if (node.type === "ObjectProperty") {
      this.checkDeclaration(node.value);
    } else if (node.type === "RestElement") {
      this.checkDeclaration(node.argument);
    } else if (node.type === "AssignmentPattern") {
      this.checkDeclaration(node.left);
    }
  }
  checkDuplicateExports(node, exportName) {
    if (this.exportedIdentifiers.has(exportName)) {
      if (exportName === "default") {
        this.raise(Errors.DuplicateDefaultExport, {
          at: node
        });
      } else {
        this.raise(Errors.DuplicateExport, {
          at: node,
          exportName
        });
      }
    }
    this.exportedIdentifiers.add(exportName);
  }

  parseExportSpecifiers(isInTypeExport) {
    const nodes = [];
    let first = true;

    this.expect(5);
    while (!this.eat(8)) {
      if (first) {
        first = false;
      } else {
        this.expect(12);
        if (this.eat(8)) break;
      }
      const isMaybeTypeOnly = this.isContextual(128);
      const isString = this.match(131);
      const node = this.startNode();
      node.local = this.parseModuleExportName();
      nodes.push(this.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly));
    }
    return nodes;
  }
  parseExportSpecifier(node, isString,
  isInTypeExport, isMaybeTypeOnly
  ) {
    if (this.eatContextual(93)) {
      node.exported = this.parseModuleExportName();
    } else if (isString) {
      node.exported = cloneStringLiteral(node.local);
    } else if (!node.exported) {
      node.exported = cloneIdentifier(node.local);
    }
    return this.finishNode(node, "ExportSpecifier");
  }

  parseModuleExportName() {
    if (this.match(131)) {
      const result = this.parseStringLiteral(this.state.value);
      const surrogate = result.value.match(loneSurrogate);
      if (surrogate) {
        this.raise(Errors.ModuleExportNameHasLoneSurrogate, {
          at: result,
          surrogateCharCode: surrogate[0].charCodeAt(0)
        });
      }
      return result;
    }
    return this.parseIdentifier(true);
  }
  isJSONModuleImport(node) {
    if (node.assertions != null) {
      return node.assertions.some(({
        key,
        value
      }) => {
        return value.value === "json" && (key.type === "Identifier" ? key.name === "type" : key.value === "type");
      });
    }
    return false;
  }
  checkImportReflection(node) {
    if (node.module) {
      var _node$assertions;
      if (node.specifiers.length !== 1 || node.specifiers[0].type !== "ImportDefaultSpecifier") {
        this.raise(Errors.ImportReflectionNotBinding, {
          at: node.specifiers[0].loc.start
        });
      }
      if (((_node$assertions = node.assertions) == null ? void 0 : _node$assertions.length) > 0) {
        this.raise(Errors.ImportReflectionHasAssertion, {
          at: node.specifiers[0].loc.start
        });
      }
    }
  }
  checkJSONModuleImport(node) {
    if (this.isJSONModuleImport(node) && node.type !== "ExportAllDeclaration") {
      const {
        specifiers
      } = node;
      if (specifiers != null) {
        const nonDefaultNamedSpecifier = specifiers.find(specifier => {
          let imported;
          if (specifier.type === "ExportSpecifier") {
            imported = specifier.local;
          } else if (specifier.type === "ImportSpecifier") {
            imported = specifier.imported;
          }
          if (imported !== undefined) {
            return imported.type === "Identifier" ? imported.name !== "default" : imported.value !== "default";
          }
        });
        if (nonDefaultNamedSpecifier !== undefined) {
          this.raise(Errors.ImportJSONBindingNotDefault, {
            at: nonDefaultNamedSpecifier.loc.start
          });
        }
      }
    }
  }
  parseMaybeImportReflection(node) {
    let isImportReflection = false;
    if (this.isContextual(125)) {
      const lookahead = this.lookahead();
      const nextType = lookahead.type;
      if (tokenIsIdentifier(nextType)) {
        if (nextType !== 97) {
          isImportReflection = true;
        } else {
          const nextNextTokenFirstChar = this.input.charCodeAt(this.nextTokenStartSince(lookahead.end));
          if (nextNextTokenFirstChar === 102) {
            isImportReflection = true;
          }
        }
      } else if (nextType !== 12) {
        isImportReflection = true;
      }
    }
    if (isImportReflection) {
      this.expectPlugin("importReflection");
      this.next();
      node.module = true;
    } else if (this.hasPlugin("importReflection")) {
      node.module = false;
    }
  }

  parseImport(node) {
    node.specifiers = [];
    if (!this.match(131)) {
      this.parseMaybeImportReflection(node);
      const hasDefault = this.maybeParseDefaultImportSpecifier(node);
      const parseNext = !hasDefault || this.eat(12);
      const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);
      if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);
      this.expectContextual(97);
    }
    node.source = this.parseImportSource();
    const assertions = this.maybeParseImportAssertions();
    if (assertions) {
      node.assertions = assertions;
    } else {
      const attributes = this.maybeParseModuleAttributes();
      if (attributes) {
        node.attributes = attributes;
      }
    }
    this.checkImportReflection(node);
    this.checkJSONModuleImport(node);
    this.semicolon();
    return this.finishNode(node, "ImportDeclaration");
  }
  parseImportSource() {
    if (!this.match(131)) this.unexpected();
    return this.parseExprAtom();
  }

  shouldParseDefaultImport(node) {
    return tokenIsIdentifier(this.state.type);
  }
  parseImportSpecifierLocal(node, specifier, type) {
    specifier.local = this.parseIdentifier();
    node.specifiers.push(this.finishImportSpecifier(specifier, type));
  }
  finishImportSpecifier(specifier, type, bindingType = BIND_LEXICAL) {
    this.checkLVal(specifier.local, {
      in: specifier,
      binding: bindingType
    });
    return this.finishNode(specifier, type);
  }

  parseAssertEntries() {
    const attrs = [];
    const attrNames = new Set();
    do {
      if (this.match(8)) {
        break;
      }
      const node = this.startNode();

      const keyName = this.state.value;
      if (attrNames.has(keyName)) {
        this.raise(Errors.ModuleAttributesWithDuplicateKeys, {
          at: this.state.startLoc,
          key: keyName
        });
      }
      attrNames.add(keyName);
      if (this.match(131)) {
        node.key = this.parseStringLiteral(keyName);
      } else {
        node.key = this.parseIdentifier(true);
      }
      this.expect(14);
      if (!this.match(131)) {
        throw this.raise(Errors.ModuleAttributeInvalidValue, {
          at: this.state.startLoc
        });
      }
      node.value = this.parseStringLiteral(this.state.value);
      attrs.push(this.finishNode(node, "ImportAttribute"));
    } while (this.eat(12));
    return attrs;
  }

  maybeParseModuleAttributes() {
    if (this.match(76) && !this.hasPrecedingLineBreak()) {
      this.expectPlugin("moduleAttributes");
      this.next();
    } else {
      if (this.hasPlugin("moduleAttributes")) return [];
      return null;
    }
    const attrs = [];
    const attributes = new Set();
    do {
      const node = this.startNode();
      node.key = this.parseIdentifier(true);
      if (node.key.name !== "type") {
        this.raise(Errors.ModuleAttributeDifferentFromType, {
          at: node.key
        });
      }
      if (attributes.has(node.key.name)) {
        this.raise(Errors.ModuleAttributesWithDuplicateKeys, {
          at: node.key,
          key: node.key.name
        });
      }
      attributes.add(node.key.name);
      this.expect(14);
      if (!this.match(131)) {
        throw this.raise(Errors.ModuleAttributeInvalidValue, {
          at: this.state.startLoc
        });
      }
      node.value = this.parseStringLiteral(this.state.value);
      this.finishNode(node, "ImportAttribute");
      attrs.push(node);
    } while (this.eat(12));
    return attrs;
  }
  maybeParseImportAssertions() {
    if (this.isContextual(94) && !this.hasPrecedingLineBreak()) {
      this.expectPlugin("importAssertions");
      this.next();
    } else {
      if (this.hasPlugin("importAssertions")) return [];
      return null;
    }
    this.eat(5);
    const attrs = this.parseAssertEntries();
    this.eat(8);
    return attrs;
  }
  maybeParseDefaultImportSpecifier(node) {
    if (this.shouldParseDefaultImport(node)) {
      this.parseImportSpecifierLocal(node, this.startNode(), "ImportDefaultSpecifier");
      return true;
    }
    return false;
  }
  maybeParseStarImportSpecifier(node) {
    if (this.match(55)) {
      const specifier = this.startNode();
      this.next();
      this.expectContextual(93);
      this.parseImportSpecifierLocal(node, specifier, "ImportNamespaceSpecifier");
      return true;
    }
    return false;
  }
  parseNamedImportSpecifiers(node) {
    let first = true;
    this.expect(5);
    while (!this.eat(8)) {
      if (first) {
        first = false;
      } else {
        if (this.eat(14)) {
          throw this.raise(Errors.DestructureNamedImport, {
            at: this.state.startLoc
          });
        }
        this.expect(12);
        if (this.eat(8)) break;
      }
      const specifier = this.startNode();
      const importedIsString = this.match(131);
      const isMaybeTypeOnly = this.isContextual(128);
      specifier.imported = this.parseModuleExportName();
      const importSpecifier = this.parseImportSpecifier(specifier, importedIsString, node.importKind === "type" || node.importKind === "typeof", isMaybeTypeOnly, undefined);
      node.specifiers.push(importSpecifier);
    }
  }

  parseImportSpecifier(specifier, importedIsString,
  isInTypeOnlyImport, isMaybeTypeOnly, bindingType
  ) {
    if (this.eatContextual(93)) {
      specifier.local = this.parseIdentifier();
    } else {
      const {
        imported
      } = specifier;
      if (importedIsString) {
        throw this.raise(Errors.ImportBindingIsString, {
          at: specifier,
          importName: imported.value
        });
      }
      this.checkReservedWord(imported.name, specifier.loc.start, true, true);
      if (!specifier.local) {
        specifier.local = cloneIdentifier(imported);
      }
    }
    return this.finishImportSpecifier(specifier, "ImportSpecifier", bindingType);
  }

  isThisParam(param) {
    return param.type === "Identifier" && param.name === "this";
  }
}

class Parser extends StatementParser {

  constructor(options, input) {
    options = getOptions(options);
    super(options, input);
    this.options = options;
    this.initializeScopes();
    this.plugins = pluginsMap(this.options.plugins);
    this.filename = options.sourceFilename;
  }

  getScopeHandler() {
    return ScopeHandler;
  }
  parse() {
    this.enterInitialScopes();
    const file = this.startNode();
    const program = this.startNode();
    this.nextToken();
    file.errors = null;
    this.parseTopLevel(file, program);
    file.errors = this.state.errors;
    return file;
  }
}
function pluginsMap(plugins) {
  const pluginMap = new Map();
  for (const plugin of plugins) {
    const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];
    if (!pluginMap.has(name)) pluginMap.set(name, options || {});
  }
  return pluginMap;
}

function parse(input, options) {
  var _options;
  if (((_options = options) == null ? void 0 : _options.sourceType) === "unambiguous") {
    options = Object.assign({}, options);
    try {
      options.sourceType = "module";
      const parser = getParser(options, input);
      const ast = parser.parse();
      if (parser.sawUnambiguousESM) {
        return ast;
      }
      if (parser.ambiguousScriptDifferentAst) {
        try {
          options.sourceType = "script";
          return getParser(options, input).parse();
        } catch (_unused) {}
      } else {
        ast.program.sourceType = "script";
      }
      return ast;
    } catch (moduleError) {
      try {
        options.sourceType = "script";
        return getParser(options, input).parse();
      } catch (_unused2) {}
      throw moduleError;
    }
  } else {
    return getParser(options, input).parse();
  }
}
function parseExpression(input, options) {
  const parser = getParser(options, input);
  if (parser.options.strictMode) {
    parser.state.strict = true;
  }
  return parser.getExpression();
}
function generateExportedTokenTypes(internalTokenTypes) {
  const tokenTypes = {};
  for (const typeName of Object.keys(internalTokenTypes)) {
    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);
  }
  return tokenTypes;
}
const tokTypes = generateExportedTokenTypes(tt);
function getParser(options, input) {
  let cls = Parser;
  if (options != null && options.plugins) {
    validatePlugins(options.plugins);
    cls = getParserClass(options.plugins);
  }
  return new cls(options, input);
}
const parserClassCache = {};

function getParserClass(pluginsFromOptions) {
  const pluginList = mixinPluginNames.filter(name => hasPlugin(pluginsFromOptions, name));
  const key = pluginList.join("/");
  let cls = parserClassCache[key];
  if (!cls) {
    cls = Parser;
    for (const plugin of pluginList) {
      cls = mixinPlugins[plugin](cls);
    }
    parserClassCache[key] = cls;
  }
  return cls;
}

exports.parse = parse;
exports.parseExpression = parseExpression;
exports.tokTypes = tokTypes;
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sources":["../src/util/location.ts","../src/parse-error/credentials.ts","../src/parse-error/module-errors.ts","../src/parse-error/to-node-description.ts","../src/parse-error/standard-errors.ts","../src/parse-error/strict-mode-errors.ts","../src/parse-error/pipeline-operator-errors.ts","../src/parse-error.ts","../src/plugins/estree.ts","../src/tokenizer/context.ts","../src/tokenizer/types.ts","../../babel-helper-validator-identifier/src/identifier.ts","../../babel-helper-validator-identifier/src/keyword.ts","../src/util/identifier.ts","../src/util/scopeflags.ts","../src/util/scope.ts","../src/plugins/flow/scope.ts","../src/parser/base.ts","../src/parser/comments.ts","../src/util/whitespace.ts","../src/tokenizer/state.ts","../../babel-helper-string-parser/src/index.ts","../src/tokenizer/index.ts","../src/util/class-scope.ts","../src/util/expression-scope.ts","../src/util/production-parameter.ts","../src/parser/util.ts","../src/parser/node.ts","../src/plugins/flow/index.ts","../src/plugins/jsx/xhtml.ts","../src/plugins/jsx/index.ts","../src/plugins/typescript/scope.ts","../src/plugins/typescript/index.ts","../src/plugins/placeholders.ts","../src/plugins/v8intrinsic.ts","../src/plugin-utils.ts","../src/options.ts","../src/parser/lval.ts","../src/parser/expression.ts","../src/parser/statement.ts","../src/parser/index.ts","../src/index.ts"],"sourcesContent":["export type Pos = {\n  start: number;\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  line: number;\n  column: number;\n  index: number;\n\n  constructor(line: number, col: number, index: number) {\n    this.line = line;\n    this.column = col;\n    this.index = index;\n  }\n}\n\nexport class SourceLocation {\n  start: Position;\n  end: Position;\n  filename: string;\n  identifierName: string | undefined | null;\n\n  constructor(start: Position, end?: Position) {\n    this.start = start;\n    // (may start as null, but initialized later)\n    this.end = end;\n  }\n}\n\n/**\n * creates a new position with a non-zero column offset from the given position.\n * This function should be only be used when we create AST node out of the token\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\n * function does not skip whitespaces.\n */\nexport function createPositionWithColumnOffset(\n  position: Position,\n  columnOffset: number,\n) {\n  const { line, column, index } = position;\n  return new Position(line, column + columnOffset, index + columnOffset);\n}\n","export const enum ParseErrorCode {\n  SyntaxError = \"BABEL_PARSER_SYNTAX_ERROR\",\n  SourceTypeModuleError = \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\",\n}\n\nexport type SyntaxPlugin =\n  | \"flow\"\n  | \"typescript\"\n  | \"jsx\"\n  | \"pipelineOperator\"\n  | \"placeholders\";\n\nexport type ToMessage<ErrorDetails> = (self: ErrorDetails) => string;\n\nexport type ParseErrorCredentials<ErrorDetails> = {\n  code: ParseErrorCode;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  toMessage: ToMessage<ErrorDetails>;\n};\n\nconst reflect = (keys: string[], last = keys.length - 1) => ({\n  get(this: unknown): unknown {\n    return keys.reduce(\n      (object, key) =>\n        // @ts-expect-error key should index object\n        object[key],\n      this,\n    );\n  },\n  set(this: unknown, value: unknown) {\n    keys.reduce(\n      // @ts-expect-error key should index item\n      (item, key, i) => (i === last ? (item[key] = value) : item[key]),\n      this,\n    );\n  },\n});\n\nconst instantiate = <T>(\n  constructor: new () => T,\n  properties: any,\n  descriptors: any,\n) =>\n  Object.keys(descriptors)\n    .map(key => [key, descriptors[key]])\n    .filter(([, descriptor]) => !!descriptor)\n    .map(([key, descriptor]) => [\n      key,\n      typeof descriptor === \"function\"\n        ? { value: descriptor, enumerable: false }\n        : typeof descriptor.reflect === \"string\"\n        ? { ...descriptor, ...reflect(descriptor.reflect.split(\".\")) }\n        : descriptor,\n    ])\n    .reduce(\n      (instance, [key, descriptor]) =>\n        Object.defineProperty(instance, key, {\n          configurable: true,\n          ...descriptor,\n        }),\n      Object.assign(new constructor(), properties),\n    );\n\nexport { instantiate };\n","import { ParseErrorCode } from \"../parse-error\";\n\nexport default {\n  ImportMetaOutsideModule: {\n    message: `import.meta may appear only with 'sourceType: \"module\"'`,\n    code: ParseErrorCode.SourceTypeModuleError,\n  },\n  ImportOutsideModule: {\n    message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n    code: ParseErrorCode.SourceTypeModuleError,\n  },\n};\n","const NodeDescriptions = {\n  ArrayPattern: \"array destructuring pattern\",\n  AssignmentExpression: \"assignment expression\",\n  AssignmentPattern: \"assignment expression\",\n  ArrowFunctionExpression: \"arrow function expression\",\n  ConditionalExpression: \"conditional expression\",\n  CatchClause: \"catch clause\",\n  ForOfStatement: \"for-of statement\",\n  ForInStatement: \"for-in statement\",\n  ForStatement: \"for-loop\",\n  FormalParameters: \"function parameter list\",\n  Identifier: \"identifier\",\n  ImportSpecifier: \"import specifier\",\n  ImportDefaultSpecifier: \"import default specifier\",\n  ImportNamespaceSpecifier: \"import namespace specifier\",\n  ObjectPattern: \"object destructuring pattern\",\n  ParenthesizedExpression: \"parenthesized expression\",\n  RestElement: \"rest element\",\n  UpdateExpression: {\n    true: \"prefix operation\",\n    false: \"postfix operation\",\n  },\n  VariableDeclarator: \"variable declaration\",\n  YieldExpression: \"yield expression\",\n};\n\ntype NodeTypesWithDescriptions = keyof Omit<\n  typeof NodeDescriptions,\n  \"UpdateExpression\"\n>;\n\ntype NodeWithDescription =\n  | {\n      type: \"UpdateExpression\";\n      prefix: boolean;\n    }\n  | {\n      type: NodeTypesWithDescriptions;\n    };\n\n// @ts-expect-error prefix is specified only when type is UpdateExpression\n// eslint-disable-next-line no-confusing-arrow\nconst toNodeDescription = ({ type, prefix }: NodeWithDescription) =>\n  type === \"UpdateExpression\"\n    ? NodeDescriptions.UpdateExpression[String(prefix) as \"true\" | \"false\"]\n    : NodeDescriptions[type];\n\nexport default toNodeDescription;\n","import toNodeDescription from \"./to-node-description\";\n\nexport type LValAncestor =\n  | { type: \"UpdateExpression\"; prefix: boolean }\n  | {\n      type:\n        | \"ArrayPattern\"\n        | \"AssignmentExpression\"\n        | \"CatchClause\"\n        | \"ForOfStatement\"\n        | \"FormalParameters\"\n        | \"ForInStatement\"\n        | \"ForStatement\"\n        | \"ImportSpecifier\"\n        | \"ImportNamespaceSpecifier\"\n        | \"ImportDefaultSpecifier\"\n        | \"ObjectPattern\"\n        | \"RestElement\"\n        | \"VariableDeclarator\";\n    };\n\nexport default {\n  AccessorIsGenerator: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `A ${kind}ter cannot be a generator.`,\n  ArgumentsInClass:\n    \"'arguments' is only allowed in functions and class methods.\",\n  AsyncFunctionInSingleStatementContext:\n    \"Async functions can only be declared at the top level or inside a block.\",\n  AwaitBindingIdentifier:\n    \"Can not use 'await' as identifier inside an async function.\",\n  AwaitBindingIdentifierInStaticBlock:\n    \"Can not use 'await' as identifier inside a static block.\",\n  AwaitExpressionFormalParameter:\n    \"'await' is not allowed in async function parameters.\",\n  AwaitNotInAsyncContext:\n    \"'await' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n  BadGetterArity: \"A 'get' accessor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n  BadSetterRestParameter:\n    \"A 'set' accessor function argument must not be a rest parameter.\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n  ConstructorClassPrivateField:\n    \"Classes may not have a private field named '#constructor'.\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n  ConstructorIsAsync: \"Constructor can't be an async function.\",\n  ConstructorIsGenerator: \"Constructor can't be a generator.\",\n  DeclarationMissingInitializer: ({\n    kind,\n  }: {\n    kind: \"const\" | \"destructuring\";\n  }) => `Missing initializer in ${kind} declaration.`,\n  DecoratorArgumentsOutsideParentheses:\n    \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n  DecoratorBeforeExport:\n    \"Decorators must be placed *before* the 'export' keyword. You can set the 'decoratorsBeforeExport' option to false to use the 'export @decorator class {}' syntax.\",\n  DecoratorConstructor:\n    \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass:\n    \"Using the export keyword between a decorator and a class is not allowed. Please use `export @dec class` instead.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeletePrivateField: \"Deleting a private field is not allowed.\",\n  DestructureNamedImport:\n    \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class.\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: ({ exportName }: { exportName: string }) =>\n    `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: ({\n    localName,\n    exportName,\n  }: {\n    localName: string;\n    exportName: string;\n  }) =>\n    `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n  ExportDefaultFromAsIdentifier:\n    \"'from' is not allowed as an identifier after 'export default'.\",\n\n  ForInOfLoopInitializer: ({\n    type,\n  }: {\n    type: \"ForInStatement\" | \"ForOfStatement\";\n  }) =>\n    `'${\n      type === \"ForInStatement\" ? \"for-in\" : \"for-of\"\n    }' loop variable declaration may not have an initializer.`,\n  ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n\n  ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n  ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n  GeneratorInSingleStatementContext:\n    \"Generators can only be declared at the top level or inside a block.\",\n\n  IllegalBreakContinue: ({\n    type,\n  }: {\n    type: \"BreakStatement\" | \"ContinueStatement\";\n  }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n\n  IllegalLanguageModeDirective:\n    \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportBindingIsString: ({ importName }: { importName: string }) =>\n    `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n  ImportCallArgumentTrailingComma:\n    \"Trailing comma is disallowed inside import(...) arguments.\",\n  ImportCallArity: ({ maxArgumentCount }: { maxArgumentCount: 1 | 2 }) =>\n    `\\`import()\\` requires exactly ${\n      maxArgumentCount === 1 ? \"one argument\" : \"one or two arguments\"\n    }.`,\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  ImportJSONBindingNotDefault:\n    \"A JSON module can only be imported with `default`.\",\n  ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n  ImportReflectionNotBinding:\n    'Only `import module x from \"./module\"` is valid.',\n  IncompatibleRegExpUVFlags:\n    \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: ({ radix }: { radix: number }) =>\n    `Expected number in radix ${radix}.`,\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Escape sequence in keyword ${reservedWord}.`,\n  InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\n    `Invalid identifier ${identifierName}.`,\n  InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent:\n    \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\n    `Unexpected character '${unexpected}'.`,\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: ({\n    identifierName,\n  }: {\n    identifierName: string;\n  }) => `Private name #${identifierName} is not defined.`,\n  InvalidPropertyBindingPattern: \"Binding member expression.\",\n  InvalidRecordProperty:\n    \"Only properties and spread elements are allowed in record definitions.\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n  LabelRedeclaration: ({ labelName }: { labelName: string }) =>\n    `Label '${labelName}' is already declared.`,\n  LetInLexicalBinding:\n    \"'let' is not allowed to be used as a name in 'let' or 'const' declarations.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n  MalformedRegExpFlags: \"Invalid regular expression flag.\",\n  MissingClassName: \"A class name is required.\",\n  MissingEqInAssignment:\n    \"Only '=' operator can be used for specifying default value.\",\n  MissingSemicolon: \"Missing semicolon.\",\n  MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\n    `This experimental syntax requires enabling the parser plugin: ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  // FIXME: Would be nice to make this \"missingPlugins\" instead.\n  // Also, seems like we can drop the \"(s)\" from the message and just make it \"s\".\n  MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\n    `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n  MixingCoalesceWithLogical:\n    \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n  ModuleAttributeDifferentFromType:\n    \"The only accepted module attribute is `type`.\",\n  ModuleAttributeInvalidValue:\n    \"Only string literals are allowed as module attribute values.\",\n  ModuleAttributesWithDuplicateKeys: ({ key }: { key: string }) =>\n    `Duplicate key \"${key}\" is not allowed in module attributes.`,\n  ModuleExportNameHasLoneSurrogate: ({\n    surrogateCharCode,\n  }: {\n    surrogateCharCode: number;\n  }) =>\n    `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(\n      16,\n    )}'.`,\n  ModuleExportUndefined: ({ localName }: { localName: string }) =>\n    `Export '${localName}' is not defined.`,\n  MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n  NewlineAfterThrow: \"Illegal newline after throw.\",\n  NoCatchOrFinally: \"Missing catch or finally clause.\",\n  NumberIdentifier: \"Identifier directly after number.\",\n  NumericSeparatorInEscapeSequence:\n    \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n  ObsoleteAwaitStar:\n    \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew:\n    \"Constructors in/after an Optional Chain are not allowed.\",\n  OptionalChainingNoTemplate:\n    \"Tagged Template Literals are not allowed in optionalChain.\",\n  OverrideOnConstructor:\n    \"'override' modifier cannot appear on a constructor declaration.\",\n  ParamDupe: \"Argument name clash.\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n  PatternHasMethod: \"Object pattern can't contain methods.\",\n  PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\n    `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n  PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Duplicate private name #${identifierName}.`,\n  RecordExpressionBarIncorrectEndSyntaxType:\n    \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionBarIncorrectStartSyntaxType:\n    \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionHashIncorrectStartSyntaxType:\n    \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n  SloppyFunction:\n    \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n  StaticPrototype: \"Classes may not have static property named prototype.\",\n  SuperNotAllowed:\n    \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super.\",\n  TrailingDecorator: \"Decorators must be attached to a class element.\",\n  TupleExpressionBarIncorrectEndSyntaxType:\n    \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionBarIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionHashIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n  UnexpectedAwaitAfterPipelineBody:\n    'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n  UnexpectedImportExport:\n    \"'import' and 'export' may only appear at the top level.\",\n  UnexpectedKeyword: ({ keyword }: { keyword: string }) =>\n    `Unexpected keyword '${keyword}'.`,\n  UnexpectedLeadingDecorator:\n    \"Leading decorators must be attached to a class declaration.\",\n  UnexpectedLexicalDeclaration:\n    \"Lexical declaration cannot appear in a single-statement context.\",\n  UnexpectedNewTarget:\n    \"`new.target` can only be used in functions or class properties.\",\n  UnexpectedNumericSeparator:\n    \"A numeric separator is only allowed between two digits.\",\n  UnexpectedPrivateField: \"Unexpected private name.\",\n  UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Unexpected reserved word '${reservedWord}'.`,\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: ({\n    expected,\n    unexpected,\n  }: {\n    expected?: string | null;\n    unexpected?: string | null;\n  }) =>\n    `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${\n      expected ? `, expected \"${expected}\"` : \"\"\n    }`,\n  UnexpectedTokenUnaryExponentiation:\n    \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnexpectedUsingDeclaration:\n    \"Using declaration cannot appear in the top level when source type is `script`.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport:\n    \"A decorated export must export a class declaration.\",\n  UnsupportedDefaultExport:\n    \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport:\n    \"`import` can only be used in `import()` or `import.meta`.\",\n  UnsupportedMetaProperty: ({\n    target,\n    onlyValidPropertyName,\n  }: {\n    target: string;\n    onlyValidPropertyName: string;\n  }) =>\n    `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\n  UnsupportedParameterDecorator:\n    \"Decorators cannot be used to decorate parameters.\",\n  UnsupportedPropertyDecorator:\n    \"Decorators cannot be used to decorate object literal properties.\",\n  UnsupportedSuper:\n    \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n  UnterminatedComment: \"Unterminated comment.\",\n  UnterminatedRegExp: \"Unterminated regular expression.\",\n  UnterminatedString: \"Unterminated string constant.\",\n  UnterminatedTemplate: \"Unterminated template.\",\n  UsingDeclarationHasBindingPattern:\n    \"Using declaration cannot have destructuring patterns.\",\n  VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Identifier '${identifierName}' has already been declared.`,\n  YieldBindingIdentifier:\n    \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  ZeroDigitNumericSeparator:\n    \"Numeric separator can not be used after leading 0.\",\n};\n","export default {\n  StrictDelete: \"Deleting local variable in strict mode.\",\n\n  // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\n  // is represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-IdentifierReference\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\n    `Assigning to '${referenceName}' in strict mode.`,\n\n  // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\n  // represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\n    `Binding '${bindingName}' in strict mode.`,\n\n  StrictFunction:\n    \"In strict mode code, functions can only be declared at top level or inside a block.\",\n\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n\n  StrictWith: \"'with' in strict mode.\",\n};\n","import toNodeDescription from \"./to-node-description\";\n\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\n  \"ArrowFunctionExpression\",\n  \"AssignmentExpression\",\n  \"ConditionalExpression\",\n  \"YieldExpression\",\n] as const);\n\ntype GetSetMemberType<T extends Set<any>> = T extends Set<infer M>\n  ? M\n  : unknown;\n\ntype UnparanthesizedPipeBodyTypes = GetSetMemberType<\n  typeof UnparenthesizedPipeBodyDescriptions\n>;\n\nexport default {\n  // This error is only used by the smart-mix proposal\n  PipeBodyIsTighter:\n    \"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n  PipeTopicRequiresHackPipes:\n    'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PipeTopicUnbound:\n    \"Topic reference is unbound; it must be inside a pipe body.\",\n  PipeTopicUnconfiguredToken: ({ token }: { token: string }) =>\n    `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n  PipeTopicUnused:\n    \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipeUnparenthesizedBody: ({ type }: { type: UnparanthesizedPipeBodyTypes }) =>\n    `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n      type,\n    })}; please wrap it in parentheses.`,\n\n  // Messages whose codes start with â€œPipelineâ€ or â€œPrimaryTopicâ€\n  // are retained for backwards compatibility\n  // with the deprecated smart-mix pipe operator proposal plugin.\n  // They are subject to removal in a future major version.\n  PipelineBodyNoArrow:\n    'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n  PipelineBodySequenceExpression:\n    \"Pipeline body may not be a comma-separated sequence expression.\",\n  PipelineHeadSequenceExpression:\n    \"Pipeline head should not be a comma-separated sequence expression.\",\n  PipelineTopicUnused:\n    \"Pipeline is in topic style but does not use topic reference.\",\n  PrimaryTopicNotAllowed:\n    \"Topic reference was used in a lexical context without topic binding.\",\n  PrimaryTopicRequiresSmartPipeline:\n    'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n};\n","import { Position } from \"./util/location\";\nimport {\n  instantiate,\n  ParseErrorCode,\n  type ParseErrorCredentials,\n  type ToMessage,\n  type SyntaxPlugin,\n} from \"./parse-error/credentials\";\nimport type { Undone } from \"./parser/node\";\nimport type { Node } from \"./types\";\n\n// Babel uses \"normal\" SyntaxErrors for it's errors, but adds some extra\n// functionality. This functionality is defined in the\n// `ParseErrorSpecification` interface below. We may choose to change to someday\n// give our errors their own full-blown class, but until then this allow us to\n// keep all the desirable properties of SyntaxErrors (like their name in stack\n// traces, etc.), and also allows us to punt on any publicly facing\n// class-hierarchy decisions until Babel 8.\ninterface ParseErrorSpecification<ErrorDetails> {\n  // Look, these *could* be readonly, but then Flow complains when we initially\n  // set them. We could do a whole dance and make a special interface that's not\n  // readonly for when we create the error, then cast it to the readonly\n  // interface for public use, but the previous implementation didn't have them\n  // as readonly, so let's just not worry about it for now.\n  code: ParseErrorCode;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  missingPlugin?: string | string[];\n  loc: Position;\n  details: ErrorDetails;\n\n  // We should consider removing this as it now just contains the same\n  // information as `loc.index`.\n  // pos: number;\n}\n\nexport type ParseError<ErrorDetails> = SyntaxError &\n  ParseErrorSpecification<ErrorDetails>;\n\n// By `ParseErrorConstructor`, we mean something like the new-less style\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\n// separate classes from `SyntaxError`'s.\n//\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\nexport type ParseErrorConstructor<ErrorDetails> = (a: {\n  loc: Position;\n  details: ErrorDetails;\n}) => ParseError<ErrorDetails>;\n\nfunction toParseErrorConstructor<ErrorDetails extends object>({\n  toMessage,\n  ...properties\n}: ParseErrorCredentials<ErrorDetails>): ParseErrorConstructor<ErrorDetails> {\n  type ConstructorArgument = {\n    loc: Position;\n    details: ErrorDetails;\n  };\n\n  return function constructor({ loc, details }: ConstructorArgument) {\n    return instantiate(\n      SyntaxError,\n      { ...properties, loc },\n      {\n        clone(\n          overrides: {\n            loc?: Position;\n            details?: ErrorDetails;\n          } = {},\n        ) {\n          const loc = (overrides.loc || {}) as Partial<Position>;\n          return constructor({\n            loc: new Position(\n              \"line\" in loc ? loc.line : this.loc.line,\n              \"column\" in loc ? loc.column : this.loc.column,\n              \"index\" in loc ? loc.index : this.loc.index,\n            ),\n            details: { ...this.details, ...overrides.details },\n          });\n        },\n        details: { value: details, enumerable: false },\n        message: {\n          get(this: ConstructorArgument): string {\n            return `${toMessage(this.details)} (${this.loc.line}:${\n              this.loc.column\n            })`;\n          },\n          set(value: string) {\n            Object.defineProperty(this, \"message\", { value });\n          },\n        },\n        pos: { reflect: \"loc.index\", enumerable: true },\n        missingPlugin: \"missingPlugin\" in details && {\n          reflect: \"details.missingPlugin\",\n          enumerable: true,\n        },\n      },\n    ) as ParseError<ErrorDetails>;\n  };\n}\n\ntype ParseErrorTemplate =\n  | string\n  | ToMessage<any>\n  | { message: string | ToMessage<any> };\n\ntype ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\n\n// This is the templated form of `ParseErrorEnum`.\n//\n// Note: We could factor out the return type calculation into something like\n// `ParseErrorConstructor<T extends ParseErrorTemplates>`, and then we could\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\n// doesn't seem to drill down that far when showing you the computed type of\n// an object in an editor, so we'll leave it inlined for now.\nexport function ParseErrorEnum(a: TemplateStringsArray): <\n  T extends ParseErrorTemplates,\n>(\n  parseErrorTemplates: T,\n) => {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : {}\n      : T[K] extends ToMessage<any>\n      ? Parameters<T[K]>[0]\n      : {}\n  >;\n};\n\nexport function ParseErrorEnum<T extends ParseErrorTemplates>(\n  parseErrorTemplates: T,\n  syntaxPlugin?: SyntaxPlugin,\n): {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : {}\n      : T[K] extends ToMessage<any>\n      ? Parameters<T[K]>[0]\n      : {}\n  >;\n};\n\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\n//\n// 1. a static error message,\n// 2. `toMessage` functions that define additional necessary `details` needed by\n//    the `ParseError`, or\n// 3. Objects that contain a `message` of one of the above and overridden `code`\n//    and/or `reasonCode`:\n//\n// ParseErrorEnum `optionalSyntaxPlugin` ({\n//   ErrorWithStaticMessage: \"message\",\n//   ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\n//   ErrorWithOverriddenCodeAndOrReasonCode: {\n//     message: ({ type }: { type: string }) => `${type}`),\n//     code: ParseErrorCode.SourceTypeModuleError,\n//     ...(BABEL_8_BREAKING ? { } : { reasonCode: \"CustomErrorReasonCode\" })\n//   }\n// });\n//\nexport function ParseErrorEnum(\n  argument: TemplateStringsArray | ParseErrorTemplates,\n  syntaxPlugin?: SyntaxPlugin,\n) {\n  // If the first parameter is an array, that means we were called with a tagged\n  // template literal. Extract the syntaxPlugin from this, and call again in\n  // the \"normalized\" form.\n  if (Array.isArray(argument)) {\n    return (parseErrorTemplates: ParseErrorTemplates) =>\n      ParseErrorEnum(parseErrorTemplates, argument[0]);\n  }\n\n  const ParseErrorConstructors = {} as Record<\n    string,\n    ParseErrorConstructor<unknown>\n  >;\n\n  for (const reasonCode of Object.keys(argument)) {\n    const template = (argument as ParseErrorTemplates)[reasonCode];\n    const { message, ...rest } =\n      typeof template === \"string\"\n        ? { message: () => template }\n        : typeof template === \"function\"\n        ? { message: template }\n        : template;\n    const toMessage = typeof message === \"string\" ? () => message : message;\n\n    ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\n      code: ParseErrorCode.SyntaxError,\n      reasonCode,\n      toMessage,\n      ...(syntaxPlugin ? { syntaxPlugin } : {}),\n      ...rest,\n    });\n  }\n\n  return ParseErrorConstructors;\n}\n\nexport type RaiseProperties<ErrorDetails> = {\n  at: Position | Undone<Node>;\n} & ErrorDetails;\n\nimport ModuleErrors from \"./parse-error/module-errors\";\nimport StandardErrors from \"./parse-error/standard-errors\";\nimport StrictModeErrors from \"./parse-error/strict-mode-errors\";\nimport PipelineOperatorErrors from \"./parse-error/pipeline-operator-errors\";\n\nexport const Errors = {\n  ...ParseErrorEnum(ModuleErrors),\n  ...ParseErrorEnum(StandardErrors),\n  ...ParseErrorEnum(StrictModeErrors),\n  ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors\";\n\nexport * from \"./parse-error/credentials\";\n","import { type TokenType } from \"../tokenizer/types\";\nimport type Parser from \"../parser\";\nimport type { ExpressionErrors } from \"../parser/util\";\nimport type * as N from \"../types\";\nimport type { Node as NodeType, NodeBase, File } from \"../types\";\nimport type { Position } from \"../util/location\";\nimport { Errors } from \"../parse-error\";\nimport type { Undone } from \"../parser/node\";\nimport type { BindingTypes } from \"../util/scopeflags\";\n\nconst { defineProperty } = Object;\nconst toUnenumerable = (object: any, key: string) =>\n  defineProperty(object, key, { enumerable: false, value: object[key] });\n\nfunction toESTreeLocation(node: any) {\n  node.loc.start && toUnenumerable(node.loc.start, \"index\");\n  node.loc.end && toUnenumerable(node.loc.end, \"index\");\n\n  return node;\n}\n\nexport default (superClass: typeof Parser) =>\n  class ESTreeParserMixin extends superClass implements Parser {\n    parse(): File {\n      const file = toESTreeLocation(super.parse());\n\n      if (this.options.tokens) {\n        file.tokens = file.tokens.map(toESTreeLocation);\n      }\n\n      return file;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\n      let regex: RegExp | null = null;\n      try {\n        regex = new RegExp(pattern, flags);\n      } catch (e) {\n        // In environments that don't support these flags value will\n        // be null as the regex can't be represented natively.\n      }\n      const node = this.estreeParseLiteral<N.EstreeRegExpLiteral>(regex);\n      node.regex = { pattern, flags };\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseBigIntLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n      let bigInt: BigInt | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        bigInt = null;\n      }\n      const node = this.estreeParseLiteral<N.EstreeBigIntLiteral>(bigInt);\n      node.bigint = String(node.value || value);\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseDecimalLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/experimental/decimal.md\n      // todo: use BigDecimal when node supports it.\n      const decimal: null = null;\n      const node = this.estreeParseLiteral(decimal);\n      node.decimal = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseLiteral<T extends N.Node>(value: any) {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.parseLiteral<T>(value, \"Literal\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseStringLiteral(value: any): N.Node {\n      return this.estreeParseLiteral(value);\n    }\n\n    parseNumericLiteral(value: any): any {\n      return this.estreeParseLiteral(value);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseNullLiteral(): N.Node {\n      return this.estreeParseLiteral(null);\n    }\n\n    parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n      return this.estreeParseLiteral(value);\n    }\n\n    // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n      const expression = directive.value as any as N.EstreeLiteral;\n      delete directive.value;\n\n      expression.type = \"Literal\";\n      // @ts-expect-error N.EstreeLiteral.raw is not defined.\n      expression.raw = expression.extra.raw;\n      expression.value = expression.extra.expressionValue;\n\n      const stmt = directive as any as N.ExpressionStatement;\n      stmt.type = \"ExpressionStatement\";\n      stmt.expression = expression;\n      // @ts-expect-error N.ExpressionStatement.directive is not defined\n      stmt.directive = expression.extra.rawValue;\n\n      delete expression.extra;\n\n      return stmt;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n      super.initFunction(node, isAsync);\n      node.expression = false;\n    }\n\n    checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n      if (node != null && this.isObjectProperty(node)) {\n        // @ts-expect-error plugin typings\n        this.checkDeclaration((node as unknown as N.EstreeProperty).value);\n      } else {\n        super.checkDeclaration(node);\n      }\n    }\n\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n      return (method as any as N.EstreeProperty | N.EstreeMethodDefinition)\n        .value.params;\n    }\n\n    isValidDirective(stmt: N.Statement): boolean {\n      return (\n        stmt.type === \"ExpressionStatement\" &&\n        stmt.expression.type === \"Literal\" &&\n        typeof stmt.expression.value === \"string\" &&\n        !stmt.expression.extra?.parenthesized\n      );\n    }\n\n    parseBlockBody(\n      node: N.BlockStatementLike,\n      allowDirectives: boolean | undefined | null,\n      topLevel: boolean,\n      end: TokenType,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): void {\n      super.parseBlockBody(\n        node,\n        allowDirectives,\n        topLevel,\n        end,\n        afterBlockParse,\n      );\n\n      const directiveStatements = node.directives.map(d =>\n        this.directiveToStmt(d),\n      );\n      // @ts-expect-error estree plugin typings\n      node.body = directiveStatements.concat(node.body);\n      delete node.directives;\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      );\n      if (method.typeParameters) {\n        // @ts-expect-error mutate AST types\n        method.value.typeParameters = method.typeParameters;\n        delete method.typeParameters;\n      }\n      classBody.body.push(method);\n    }\n\n    parsePrivateName(): any {\n      const node = super.parsePrivateName();\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return node;\n        }\n      }\n      return this.convertPrivateNameToPrivateIdentifier(node);\n    }\n\n    convertPrivateNameToPrivateIdentifier(\n      node: N.PrivateName,\n    ): N.EstreePrivateIdentifier {\n      const name = super.getPrivateNameSV(node);\n      node = node as any;\n      delete node.id;\n      // @ts-expect-error mutate AST types\n      node.name = name;\n      // @ts-expect-error mutate AST types\n      node.type = \"PrivateIdentifier\";\n      return node as unknown as N.EstreePrivateIdentifier;\n    }\n\n    isPrivateName(node: N.Node): boolean {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.isPrivateName(node);\n        }\n      }\n      return node.type === \"PrivateIdentifier\";\n    }\n\n    getPrivateNameSV(node: N.Node): string {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.getPrivateNameSV(node);\n        }\n      }\n      return node.name;\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseLiteral<T extends N.Literal>(value: any, type: T[\"type\"]): T {\n      const node = super.parseLiteral<T>(value, type);\n      // @ts-expect-error mutating AST types\n      node.raw = node.extra.raw;\n      delete node.extra;\n\n      return node;\n    }\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpression?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      super.parseFunctionBody(node, allowExpression, isMethod);\n      node.expression = node.body.type !== \"BlockStatement\";\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseMethod<\n      T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope: boolean = false,\n    ): N.EstreeMethodDefinition {\n      let funcNode = this.startNode<N.MethodLike>();\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n      funcNode = super.parseMethod(\n        // @ts-expect-error todo(flow->ts)\n        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error mutate AST types\n      funcNode.type = \"FunctionExpression\";\n      delete funcNode.kind;\n      // @ts-expect-error mutate AST types\n      node.value = funcNode;\n      if (type === \"ClassPrivateMethod\") {\n        node.computed = false;\n      }\n      return this.finishNode(\n        // @ts-expect-error cast methods to estree types\n        node as Undone<N.EstreeMethodDefinition>,\n        \"MethodDefinition\",\n      );\n    }\n\n    parseClassProperty(...args: [N.ClassProperty]): any {\n      const propertyNode = super.parseClassProperty(...args) as any;\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as N.EstreePropertyDefinition;\n        }\n      }\n      propertyNode.type = \"PropertyDefinition\";\n      return propertyNode as N.EstreePropertyDefinition;\n    }\n\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n      const propertyNode = super.parseClassPrivateProperty(...args) as any;\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as N.EstreePropertyDefinition;\n        }\n      }\n      propertyNode.type = \"PropertyDefinition\";\n      propertyNode.computed = false;\n      return propertyNode as N.EstreePropertyDefinition;\n    }\n\n    parseObjectMethod(\n      prop: N.ObjectMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n    ): N.ObjectMethod | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n      ) as any;\n\n      if (node) {\n        node.type = \"Property\";\n        if ((node as any as N.ClassMethod).kind === \"method\") {\n          node.kind = \"init\";\n        }\n        node.shorthand = false;\n      }\n\n      return node as any;\n    }\n\n    parseObjectProperty(\n      prop: N.ObjectProperty,\n      startLoc: Position | undefined | null,\n      isPattern: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ObjectProperty | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectProperty(\n        prop,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      ) as any;\n\n      if (node) {\n        node.kind = \"init\";\n        node.type = \"Property\";\n      }\n\n      return node as any;\n    }\n\n    isValidLVal(\n      type: string,\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingTypes,\n    ) {\n      return type === \"Property\"\n        ? \"value\"\n        : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node != null && this.isObjectProperty(node)) {\n        return this.isAssignable(node.value, isBinding);\n      }\n      return super.isAssignable(node, isBinding);\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (node != null && this.isObjectProperty(node)) {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableObjectExpressionProp(\n      prop: N.Node,\n      isLast: boolean,\n      isLHS: boolean,\n    ) {\n      if (prop.kind === \"get\" || prop.kind === \"set\") {\n        this.raise(Errors.PatternHasAccessor, { at: prop.key });\n      } else if (prop.method) {\n        this.raise(Errors.PatternHasMethod, { at: prop.key });\n      } else {\n        super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n      }\n    }\n\n    finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n      unfinished: Undone<T>,\n      optional: boolean,\n    ): T {\n      const node = super.finishCallExpression(unfinished, optional);\n\n      if (node.callee.type === \"Import\") {\n        (node as N.Node as N.EstreeImportExpression).type = \"ImportExpression\";\n        (node as N.Node as N.EstreeImportExpression).source = node.arguments[0];\n        if (this.hasPlugin(\"importAssertions\")) {\n          (node as N.Node as N.EstreeImportExpression).attributes =\n            node.arguments[1] ?? null;\n        }\n        // arguments isn't optional in the type definition\n        delete node.arguments;\n        // callee isn't optional in the type definition\n        delete node.callee;\n      }\n\n      return node;\n    }\n\n    toReferencedArguments(\n      node:\n        | N.CallExpression\n        | N.OptionalCallExpression\n        | N.EstreeImportExpression,\n      /* isParenthesizedExpr?: boolean, */\n    ) {\n      // ImportExpressions do not have an arguments array.\n      if (node.type === \"ImportExpression\") {\n        return;\n      }\n\n      super.toReferencedArguments(node);\n    }\n\n    parseExport(\n      unfinished: Undone<N.AnyExport>,\n      decorators: N.Decorator[] | null,\n    ) {\n      const exportStartLoc = this.state.lastTokStartLoc;\n      const node = super.parseExport(unfinished, decorators);\n\n      switch (node.type) {\n        case \"ExportAllDeclaration\":\n          // @ts-expect-error mutating AST types\n          node.exported = null;\n          break;\n\n        case \"ExportNamedDeclaration\":\n          if (\n            node.specifiers.length === 1 &&\n            // @ts-expect-error mutating AST types\n            node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n          ) {\n            // @ts-expect-error mutating AST types\n            node.type = \"ExportAllDeclaration\";\n            // @ts-expect-error mutating AST types\n            node.exported = node.specifiers[0].exported;\n            delete node.specifiers;\n          }\n\n        // fallthrough\n        case \"ExportDefaultDeclaration\":\n          {\n            const { declaration } = node;\n            if (\n              declaration?.type === \"ClassDeclaration\" &&\n              declaration.decorators?.length > 0 &&\n              // decorator comes before export\n              declaration.start === node.start\n            ) {\n              this.resetStartLocation(\n                node,\n                // For compatibility with ESLint's keyword-spacing rule, which assumes that an\n                // export declaration must start with export.\n                // https://github.com/babel/babel/issues/15085\n                // Here we reset export declaration's start to be the start of the export token\n                exportStartLoc,\n              );\n            }\n          }\n\n          break;\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ) {\n      const node = super.parseSubscript(base, startLoc, noCalls, state);\n\n      if (state.optionalChainMember) {\n        // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n        if (\n          node.type === \"OptionalMemberExpression\" ||\n          node.type === \"OptionalCallExpression\"\n        ) {\n          node.type = node.type.substring(8); // strip Optional prefix\n        }\n        if (state.stop) {\n          const chain = this.startNodeAtNode(node);\n          chain.expression = node;\n          return this.finishNode(chain, \"ChainExpression\");\n        }\n      } else if (\n        node.type === \"MemberExpression\" ||\n        node.type === \"CallExpression\"\n      ) {\n        node.optional = false;\n      }\n\n      return node;\n    }\n\n    hasPropertyAsPrivateName(node: N.Node): boolean {\n      if (node.type === \"ChainExpression\") {\n        node = node.expression;\n      }\n      return super.hasPropertyAsPrivateName(node);\n    }\n\n    isOptionalChain(node: N.Node): boolean {\n      return node.type === \"ChainExpression\";\n    }\n\n    // @ts-expect-error override interfaces\n    isObjectProperty(node: N.Node): boolean {\n      return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n    }\n\n    isObjectMethod(node: N.Node): boolean {\n      return node.method || node.kind === \"get\" || node.kind === \"set\";\n    }\n\n    finishNodeAt<T extends NodeType>(\n      node: Undone<T>,\n      type: T[\"type\"],\n      endLoc: Position,\n    ): T {\n      return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n    }\n\n    resetStartLocation(node: N.Node, startLoc: Position) {\n      super.resetStartLocation(node, startLoc);\n      toESTreeLocation(node);\n    }\n\n    resetEndLocation(\n      node: NodeBase,\n      endLoc: Position = this.state.lastTokEndLoc,\n    ): void {\n      super.resetEndLocation(node, endLoc);\n      toESTreeLocation(node);\n    }\n  };\n","// The token context is used in JSX plugin to track\n// jsx tag / jsx text / normal JavaScript expression\n\nexport class TokContext {\n  constructor(token: string, preserveSpace?: boolean) {\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n\n  token: string;\n  preserveSpace: boolean;\n}\n\nconst types: {\n  [key: string]: TokContext;\n} = {\n  brace: new TokContext(\"{\"), // normal JavaScript expression\n  j_oTag: new TokContext(\"<tag\"), // JSX opening tag\n  j_cTag: new TokContext(\"</tag\"), // JSX closing tag\n  j_expr: new TokContext(\"<tag>...</tag>\", true), // JSX expressions\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n  types.template = new TokContext(\"`\", true);\n}\n\nexport { types };\n","import { types as tc, type TokContext } from \"./context\";\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between 1) binary\n// expression (<) and JSX Tag start (<name>); 2) object literal and JSX\n// texts. It is set on the `updateContext` function in the JSX plugin.\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the â€œargumentâ€ subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n  keyword?: string;\n  beforeExpr?: boolean;\n  startsExpr?: boolean;\n  rightAssociative?: boolean;\n  isLoop?: boolean;\n  isAssign?: boolean;\n  prefix?: boolean;\n  postfix?: boolean;\n  binop?: number | null;\n};\n\n// Internally the tokenizer stores token as a number\nexport type TokenType = number;\n\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\n// when `tokens: true` is enabled. Unlike internal token type, it provides\n// metadata of the tokens.\nexport class ExportedTokenType {\n  label: string;\n  keyword: string | undefined | null;\n  beforeExpr: boolean;\n  startsExpr: boolean;\n  rightAssociative: boolean;\n  isLoop: boolean;\n  isAssign: boolean;\n  prefix: boolean;\n  postfix: boolean;\n  binop: number | undefined | null;\n  // todo(Babel 8): remove updateContext from exposed token layout\n  declare updateContext:\n    | ((context: Array<TokContext>) => void)\n    | undefined\n    | null;\n\n  constructor(label: string, conf: TokenOptions = {}) {\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    if (!process.env.BABEL_8_BREAKING) {\n      this.updateContext = null;\n    }\n  }\n}\n\n// A map from keyword/keyword-like string value to the token type\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n  options.keyword = name;\n  const token = createToken(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n  return createToken(name, { beforeExpr, binop });\n}\n\nlet tokenTypeCounter = -1;\nexport const tokenTypes: ExportedTokenType[] = [];\nconst tokenLabels: string[] = [];\nconst tokenBinops: number[] = [];\nconst tokenBeforeExprs: boolean[] = [];\nconst tokenStartsExprs: boolean[] = [];\nconst tokenPrefixes: boolean[] = [];\n\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\n  ++tokenTypeCounter;\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  tokenTypes.push(new ExportedTokenType(name, options));\n\n  return tokenTypeCounter;\n}\n\nfunction createKeywordLike(\n  name: string,\n  options: TokenOptions = {},\n): TokenType {\n  ++tokenTypeCounter;\n  keywords.set(name, tokenTypeCounter);\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  // In the exported token type, we set the label as \"name\" for backward compatibility with Babel 7\n  tokenTypes.push(new ExportedTokenType(\"name\", options));\n\n  return tokenTypeCounter;\n}\n\n// For performance the token type helpers depend on the following declarations order.\n// When adding new token types, please also check if the token helpers need update.\n\nexport type InternalTokenTypes = typeof tt;\n\nexport const tt = {\n  // Punctuation token types.\n  bracketL: createToken(\"[\", { beforeExpr, startsExpr }),\n  bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n  bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: createToken(\"]\"),\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n  braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n  braceHashL: createToken(\"#{\", { beforeExpr, startsExpr }),\n  braceR: createToken(\"}\"),\n  braceBarR: createToken(\"|}\"),\n  parenL: createToken(\"(\", { beforeExpr, startsExpr }),\n  parenR: createToken(\")\"),\n  comma: createToken(\",\", { beforeExpr }),\n  semi: createToken(\";\", { beforeExpr }),\n  colon: createToken(\":\", { beforeExpr }),\n  doubleColon: createToken(\"::\", { beforeExpr }),\n  dot: createToken(\".\"),\n  question: createToken(\"?\", { beforeExpr }),\n  questionDot: createToken(\"?.\"),\n  arrow: createToken(\"=>\", { beforeExpr }),\n  template: createToken(\"template\"),\n  ellipsis: createToken(\"...\", { beforeExpr }),\n  backQuote: createToken(\"`\", { startsExpr }),\n  dollarBraceL: createToken(\"${\", { beforeExpr, startsExpr }),\n  // start: isTemplate\n  templateTail: createToken(\"...`\", { startsExpr }),\n  templateNonTail: createToken(\"...${\", { beforeExpr, startsExpr }),\n  // end: isTemplate\n  at: createToken(\"@\"),\n  hash: createToken(\"#\", { startsExpr }),\n\n  // Special hashbang token.\n  interpreterDirective: createToken(\"#!...\"),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  // start: isAssign\n  eq: createToken(\"=\", { beforeExpr, isAssign }),\n  assign: createToken(\"_=\", { beforeExpr, isAssign }),\n  slashAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // These are only needed to support % and ^ as a Hack-pipe topic token.\n  // When the proposal settles on a token, the others can be merged with\n  // tt.assign.\n  xorAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  moduloAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // end: isAssign\n\n  incDec: createToken(\"++/--\", { prefix, postfix, startsExpr }),\n  bang: createToken(\"!\", { beforeExpr, prefix, startsExpr }),\n  tilde: createToken(\"~\", { beforeExpr, prefix, startsExpr }),\n\n  // More possible topic tokens.\n  // When the proposal settles on a token, at least one of these may be removed.\n  doubleCaret: createToken(\"^^\", { startsExpr }),\n  doubleAt: createToken(\"@@\", { startsExpr }),\n\n  // start: isBinop\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  lt: createBinop(\"</>/<=/>=\", 7),\n  gt: createBinop(\"</>/<=/>=\", 7),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  bitShiftL: createBinop(\"<</>>/>>>\", 8),\n  bitShiftR: createBinop(\"<</>>/>>>\", 8),\n  plusMin: createToken(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n  // startsExpr: required by v8intrinsic plugin\n  modulo: createToken(\"%\", { binop: 10, startsExpr }),\n  // unset `beforeExpr` as it can be `function *`\n  star: createToken(\"*\", { binop: 10 }),\n  slash: createBinop(\"/\", 10),\n  exponent: createToken(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true,\n  }),\n\n  // Keywords\n  // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n  // when new keywords are added\n  // start: isLiteralPropertyName\n  // start: isKeyword\n  _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n  _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n  // end: isBinop\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", { beforeExpr }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", { beforeExpr }),\n  _else: createKeyword(\"else\", { beforeExpr }),\n  _finally: createKeyword(\"finally\"),\n  _function: createKeyword(\"function\", { startsExpr }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", { beforeExpr }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n  _this: createKeyword(\"this\", { startsExpr }),\n  _super: createKeyword(\"super\", { startsExpr }),\n  _class: createKeyword(\"class\", { startsExpr }),\n  _extends: createKeyword(\"extends\", { beforeExpr }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", { startsExpr }),\n  _null: createKeyword(\"null\", { startsExpr }),\n  _true: createKeyword(\"true\", { startsExpr }),\n  _false: createKeyword(\"false\", { startsExpr }),\n  _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n  _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n  _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n  // start: isLoop\n  _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n  _for: createKeyword(\"for\", { isLoop }),\n  _while: createKeyword(\"while\", { isLoop }),\n  // end: isLoop\n  // end: isKeyword\n\n  // Primary literals\n  // start: isIdentifier\n  _as: createKeywordLike(\"as\", { startsExpr }),\n  _assert: createKeywordLike(\"assert\", { startsExpr }),\n  _async: createKeywordLike(\"async\", { startsExpr }),\n  _await: createKeywordLike(\"await\", { startsExpr }),\n  _from: createKeywordLike(\"from\", { startsExpr }),\n  _get: createKeywordLike(\"get\", { startsExpr }),\n  _let: createKeywordLike(\"let\", { startsExpr }),\n  _meta: createKeywordLike(\"meta\", { startsExpr }),\n  _of: createKeywordLike(\"of\", { startsExpr }),\n  _sent: createKeywordLike(\"sent\", { startsExpr }),\n  _set: createKeywordLike(\"set\", { startsExpr }),\n  _static: createKeywordLike(\"static\", { startsExpr }),\n  _using: createKeywordLike(\"using\", { startsExpr }),\n  _yield: createKeywordLike(\"yield\", { startsExpr }),\n\n  // Flow and TypeScript Keywordlike\n  _asserts: createKeywordLike(\"asserts\", { startsExpr }),\n  _checks: createKeywordLike(\"checks\", { startsExpr }),\n  _exports: createKeywordLike(\"exports\", { startsExpr }),\n  _global: createKeywordLike(\"global\", { startsExpr }),\n  _implements: createKeywordLike(\"implements\", { startsExpr }),\n  _intrinsic: createKeywordLike(\"intrinsic\", { startsExpr }),\n  _infer: createKeywordLike(\"infer\", { startsExpr }),\n  _is: createKeywordLike(\"is\", { startsExpr }),\n  _mixins: createKeywordLike(\"mixins\", { startsExpr }),\n  _proto: createKeywordLike(\"proto\", { startsExpr }),\n  _require: createKeywordLike(\"require\", { startsExpr }),\n  _satisfies: createKeywordLike(\"satisfies\", { startsExpr }),\n  // start: isTSTypeOperator\n  _keyof: createKeywordLike(\"keyof\", { startsExpr }),\n  _readonly: createKeywordLike(\"readonly\", { startsExpr }),\n  _unique: createKeywordLike(\"unique\", { startsExpr }),\n  // end: isTSTypeOperator\n  // start: isTSDeclarationStart\n  _abstract: createKeywordLike(\"abstract\", { startsExpr }),\n  _declare: createKeywordLike(\"declare\", { startsExpr }),\n  _enum: createKeywordLike(\"enum\", { startsExpr }),\n  _module: createKeywordLike(\"module\", { startsExpr }),\n  _namespace: createKeywordLike(\"namespace\", { startsExpr }),\n  // start: isFlowInterfaceOrTypeOrOpaque\n  _interface: createKeywordLike(\"interface\", { startsExpr }),\n  _type: createKeywordLike(\"type\", { startsExpr }),\n  // end: isTSDeclarationStart\n  _opaque: createKeywordLike(\"opaque\", { startsExpr }),\n  // end: isFlowInterfaceOrTypeOrOpaque\n  name: createToken(\"name\", { startsExpr }),\n  // end: isIdentifier\n\n  string: createToken(\"string\", { startsExpr }),\n  num: createToken(\"num\", { startsExpr }),\n  bigint: createToken(\"bigint\", { startsExpr }),\n  decimal: createToken(\"decimal\", { startsExpr }),\n  // end: isLiteralPropertyName\n  regexp: createToken(\"regexp\", { startsExpr }),\n  privateName: createToken(\"#name\", { startsExpr }),\n  eof: createToken(\"eof\"),\n\n  // jsx plugin\n  jsxName: createToken(\"jsxName\"),\n  jsxText: createToken(\"jsxText\", { beforeExpr: true }),\n  jsxTagStart: createToken(\"jsxTagStart\", { startsExpr: true }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n\n  // placeholder plugin\n  placeholder: createToken(\"%%\", { startsExpr: true }),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n  return token >= tt._as && token <= tt.name;\n}\n\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\n  // we can remove the token >= tt._in check when we\n  // know a token is either keyword or identifier\n  return token <= tt._while;\n}\n\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.name;\n}\n\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.decimal;\n}\n\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\n  return tokenBeforeExprs[token];\n}\n\nexport function tokenCanStartExpression(token: TokenType): boolean {\n  return tokenStartsExprs[token];\n}\n\nexport function tokenIsAssignment(token: TokenType): boolean {\n  return token >= tt.eq && token <= tt.moduloAssign;\n}\n\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\n  return token >= tt._interface && token <= tt._opaque;\n}\n\nexport function tokenIsLoop(token: TokenType): boolean {\n  return token >= tt._do && token <= tt._while;\n}\n\nexport function tokenIsKeyword(token: TokenType): boolean {\n  return token >= tt._in && token <= tt._while;\n}\n\nexport function tokenIsOperator(token: TokenType): boolean {\n  return token >= tt.pipeline && token <= tt._instanceof;\n}\n\nexport function tokenIsPostfix(token: TokenType): boolean {\n  return token === tt.incDec;\n}\n\nexport function tokenIsPrefix(token: TokenType): boolean {\n  return tokenPrefixes[token];\n}\n\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\n  return token >= tt._keyof && token <= tt._unique;\n}\n\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\n  return token >= tt._abstract && token <= tt._type;\n}\n\nexport function tokenLabelName(token: TokenType): string {\n  return tokenLabels[token];\n}\n\nexport function tokenOperatorPrecedence(token: TokenType): number {\n  return tokenBinops[token];\n}\n\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\n  return tokenBinops[token] !== -1;\n}\n\nexport function tokenIsRightAssociative(token: TokenType): boolean {\n  return token === tt.exponent;\n}\n\nexport function tokenIsTemplate(token: TokenType): boolean {\n  return token >= tt.templateTail && token <= tt.templateNonTail;\n}\n\nexport function getExportedToken(token: TokenType): ExportedTokenType {\n  return tokenTypes[token];\n}\n\nexport function isTokenType(obj: any): boolean {\n  return typeof obj === \"number\";\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n  tokenTypes[tt.braceR].updateContext = context => {\n    context.pop();\n  };\n\n  tokenTypes[tt.braceL].updateContext =\n    tokenTypes[tt.braceHashL].updateContext =\n    tokenTypes[tt.dollarBraceL].updateContext =\n      context => {\n        context.push(tc.brace);\n      };\n\n  tokenTypes[tt.backQuote].updateContext = context => {\n    if (context[context.length - 1] === tc.template) {\n      context.pop();\n    } else {\n      context.push(tc.template);\n    }\n  };\n\n  tokenTypes[tt.jsxTagStart].updateContext = context => {\n    context.push(tc.j_expr, tc.j_oTag);\n  };\n}\n","import * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\nconst nonASCIIidentifierStart = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,3104,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n  let pos = 0x10000;\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n  return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return (\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n    );\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\n  if (code < charCodes.colon) return true;\n  if (code < charCodes.uppercaseA) return false;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n  return (\n    isInAstralSet(code, astralIdentifierStartCodes) ||\n    isInAstralSet(code, astralIdentifierCodes)\n  );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n  let isFirst = true;\n  for (let i = 0; i < name.length; i++) {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = name.charCodeAt(i);\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n      const trail = name.charCodeAt(++i);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    if (isFirst) {\n      isFirst = false;\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n  return !isFirst;\n}\n","const reservedWords = {\n  keyword: [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"return\",\n    \"switch\",\n    \"throw\",\n    \"try\",\n    \"var\",\n    \"const\",\n    \"while\",\n    \"with\",\n    \"new\",\n    \"this\",\n    \"super\",\n    \"class\",\n    \"extends\",\n    \"export\",\n    \"import\",\n    \"null\",\n    \"true\",\n    \"false\",\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"void\",\n    \"delete\",\n  ],\n  strict: [\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n  ],\n  strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n  return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n  return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n  word: string,\n  inModule: boolean,\n): boolean {\n  return (\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n  );\n}\n\nexport function isKeyword(word: string): boolean {\n  return keywords.has(word);\n}\n","/* eslint max-len: 0 */\n\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart } from \"@babel/helper-validator-identifier\";\n\nexport {\n  isIdentifierStart,\n  isIdentifierChar,\n  isReservedWord,\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n  isStrictReservedWord,\n  isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(\n  current: number,\n  next: number,\n  next2: number,\n): boolean {\n  return (\n    current === charCodes.atSign &&\n    next === charCodes.atSign &&\n    isIdentifierStart(next2)\n  );\n}\n\n// This is the comprehensive set of JavaScript reserved words\n// If a word is in this set, it could be a reserved word,\n// depending on sourceType/strictMode/binding info. In other words\n// if a word is not in this set, it is not a reserved word under\n// any circumstance.\nconst reservedWordLikeSet = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"do\",\n  \"else\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"return\",\n  \"switch\",\n  \"throw\",\n  \"try\",\n  \"var\",\n  \"const\",\n  \"while\",\n  \"with\",\n  \"new\",\n  \"this\",\n  \"super\",\n  \"class\",\n  \"extends\",\n  \"export\",\n  \"import\",\n  \"null\",\n  \"true\",\n  \"false\",\n  \"in\",\n  \"instanceof\",\n  \"typeof\",\n  \"void\",\n  \"delete\",\n  // strict\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  // strictBind\n  \"eval\",\n  \"arguments\",\n  // reservedWorkLike\n  \"enum\",\n  \"await\",\n]);\n\nexport function canBeReservedWord(word: string): boolean {\n  return reservedWordLikeSet.has(word);\n}\n","// Each scope gets a bitset that may contain these flags\n// prettier-ignore\nexport const SCOPE_OTHER        = 0b000000000,\n             SCOPE_PROGRAM      = 0b000000001,\n             SCOPE_FUNCTION     = 0b000000010,\n             SCOPE_ARROW        = 0b000000100,\n             SCOPE_SIMPLE_CATCH = 0b000001000,\n             SCOPE_SUPER        = 0b000010000,\n             SCOPE_DIRECT_SUPER = 0b000100000,\n             SCOPE_CLASS        = 0b001000000,\n             SCOPE_STATIC_BLOCK = 0b010000000,\n             SCOPE_TS_MODULE    = 0b100000000,\n             SCOPE_VAR = SCOPE_PROGRAM | SCOPE_FUNCTION | SCOPE_STATIC_BLOCK | SCOPE_TS_MODULE;\n\nexport type ScopeFlags =\n  | typeof SCOPE_OTHER\n  | typeof SCOPE_PROGRAM\n  | typeof SCOPE_FUNCTION\n  | typeof SCOPE_VAR\n  | typeof SCOPE_ARROW\n  | typeof SCOPE_SIMPLE_CATCH\n  | typeof SCOPE_SUPER\n  | typeof SCOPE_DIRECT_SUPER\n  | typeof SCOPE_CLASS\n  | typeof SCOPE_STATIC_BLOCK;\n\n// These flags are meant to be _only_ used inside the Scope class (or subclasses).\n// prettier-ignore\nexport const BIND_KIND_VALUE            = 0b000000_0000_01,\n             BIND_KIND_TYPE             = 0b000000_0000_10,\n             // Used in checkLVal and declareName to determine the type of a binding\n             BIND_SCOPE_VAR             = 0b000000_0001_00, // Var-style binding\n             BIND_SCOPE_LEXICAL         = 0b000000_0010_00, // Let- or const-style binding\n             BIND_SCOPE_FUNCTION        = 0b000000_0100_00, // Function declaration\n             BIND_SCOPE_OUTSIDE         = 0b000000_1000_00, // Special case for function names as\n                                                   // bound inside the function\n             // Misc flags\n             BIND_FLAGS_NONE            = 0b0000001_0000_00,\n             BIND_FLAGS_CLASS           = 0b0000010_0000_00,\n             BIND_FLAGS_TS_ENUM         = 0b0000100_0000_00,\n             BIND_FLAGS_TS_CONST_ENUM   = 0b0001000_0000_00,\n             BIND_FLAGS_TS_EXPORT_ONLY  = 0b0010000_0000_00,\n             BIND_FLAGS_FLOW_DECLARE_FN = 0b0100000_0000_00,\n             BIND_FLAGS_TS_IMPORT       = 0b1000000_0000_00;\n\n// These flags are meant to be _only_ used by Scope consumers\n// prettier-ignore\n/*                              =    is value?    |    is type?    |      scope          |    misc flags    */\nexport const BIND_CLASS         = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL  | BIND_FLAGS_CLASS  ,\n             BIND_LEXICAL       = BIND_KIND_VALUE | 0              | BIND_SCOPE_LEXICAL  | 0                 ,\n             BIND_VAR           = BIND_KIND_VALUE | 0              | BIND_SCOPE_VAR      | 0                 ,\n             BIND_FUNCTION      = BIND_KIND_VALUE | 0              | BIND_SCOPE_FUNCTION | 0                 ,\n             BIND_TS_INTERFACE  = 0               | BIND_KIND_TYPE | 0                   | BIND_FLAGS_CLASS  ,\n             BIND_TS_TYPE       = 0               | BIND_KIND_TYPE | 0                   | 0                 ,\n             BIND_TS_ENUM       = BIND_KIND_VALUE | BIND_KIND_TYPE | BIND_SCOPE_LEXICAL  | BIND_FLAGS_TS_ENUM,\n             BIND_TS_AMBIENT    = 0               | 0              | 0            | BIND_FLAGS_TS_EXPORT_ONLY,\n             // These bindings don't introduce anything in the scope. They are used for assignments and\n             // function expressions IDs.\n             BIND_NONE          = 0               | 0              | 0                   | BIND_FLAGS_NONE   ,\n             BIND_OUTSIDE       = BIND_KIND_VALUE | 0              | 0                   | BIND_FLAGS_NONE   ,\n\n             BIND_TS_CONST_ENUM = BIND_TS_ENUM    | BIND_FLAGS_TS_CONST_ENUM                                 ,\n             BIND_TS_NAMESPACE  = 0               | 0              | 0                   | BIND_FLAGS_TS_EXPORT_ONLY,\n             BIND_TS_TYPE_IMPORT= 0               | BIND_KIND_TYPE | 0                   | BIND_FLAGS_TS_IMPORT,\n\n             BIND_FLOW_DECLARE_FN = BIND_FLAGS_FLOW_DECLARE_FN;\n\nexport type BindingTypes =\n  | typeof BIND_NONE\n  | typeof BIND_OUTSIDE\n  | typeof BIND_VAR\n  | typeof BIND_LEXICAL\n  | typeof BIND_CLASS\n  | typeof BIND_FUNCTION\n  | typeof BIND_TS_INTERFACE\n  | typeof BIND_TS_TYPE\n  | typeof BIND_TS_ENUM\n  | typeof BIND_TS_AMBIENT\n  | typeof BIND_TS_NAMESPACE;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_FLAG_STATIC = 0b1_00,\n             CLASS_ELEMENT_KIND_GETTER = 0b0_10,\n             CLASS_ELEMENT_KIND_SETTER = 0b0_01,\n             CLASS_ELEMENT_KIND_ACCESSOR = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_KIND_SETTER;\n\n// prettier-ignore\nexport const CLASS_ELEMENT_STATIC_GETTER   = CLASS_ELEMENT_KIND_GETTER | CLASS_ELEMENT_FLAG_STATIC,\n             CLASS_ELEMENT_STATIC_SETTER   = CLASS_ELEMENT_KIND_SETTER | CLASS_ELEMENT_FLAG_STATIC,\n             CLASS_ELEMENT_INSTANCE_GETTER = CLASS_ELEMENT_KIND_GETTER,\n             CLASS_ELEMENT_INSTANCE_SETTER = CLASS_ELEMENT_KIND_SETTER,\n             CLASS_ELEMENT_OTHER           = 0;\n\nexport type ClassElementTypes =\n  | typeof CLASS_ELEMENT_STATIC_GETTER\n  | typeof CLASS_ELEMENT_STATIC_SETTER\n  | typeof CLASS_ELEMENT_INSTANCE_GETTER\n  | typeof CLASS_ELEMENT_INSTANCE_SETTER\n  | typeof CLASS_ELEMENT_OTHER;\n","import {\n  SCOPE_ARROW,\n  SCOPE_DIRECT_SUPER,\n  SCOPE_FUNCTION,\n  SCOPE_SIMPLE_CATCH,\n  SCOPE_SUPER,\n  SCOPE_PROGRAM,\n  SCOPE_VAR,\n  SCOPE_CLASS,\n  SCOPE_STATIC_BLOCK,\n  BIND_SCOPE_FUNCTION,\n  BIND_SCOPE_VAR,\n  BIND_SCOPE_LEXICAL,\n  BIND_KIND_VALUE,\n  type ScopeFlags,\n  type BindingTypes,\n} from \"./scopeflags\";\nimport type { Position } from \"./location\";\nimport type * as N from \"../types\";\nimport { Errors } from \"../parse-error\";\nimport type Tokenizer from \"../tokenizer\";\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n  declare flags: ScopeFlags;\n  // A set of var-declared names in the current lexical scope\n  var: Set<string> = new Set();\n  // A set of lexically-declared names in the current lexical scope\n  lexical: Set<string> = new Set();\n  // A set of lexically-declared FunctionDeclaration names in the current lexical scope\n  functions: Set<string> = new Set();\n\n  constructor(flags: ScopeFlags) {\n    this.flags = flags;\n  }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope extends Scope = Scope> {\n  parser: Tokenizer;\n  scopeStack: Array<IScope> = [];\n  inModule: boolean;\n  undefinedExports: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer, inModule: boolean) {\n    this.parser = parser;\n    this.inModule = inModule;\n  }\n\n  get inTopLevel() {\n    return (this.currentScope().flags & SCOPE_PROGRAM) > 0;\n  }\n  get inFunction() {\n    return (this.currentVarScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & SCOPE_DIRECT_SUPER) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & SCOPE_CLASS) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (flags & SCOPE_CLASS) > 0 && (flags & SCOPE_FUNCTION) === 0;\n  }\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & SCOPE_STATIC_BLOCK) {\n        return true;\n      }\n      if (flags & (SCOPE_VAR | SCOPE_CLASS)) {\n        // function body, module body, class property initializers\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & SCOPE_FUNCTION) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags: ScopeFlags): Scope {\n    return new Scope(flags);\n  }\n\n  enter(flags: ScopeFlags) {\n    /*:: +createScope: (flags: ScopeFlags) => IScope; */\n    // @ts-expect-error This method will be overwritten by subclasses\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit(): ScopeFlags {\n    const scope = this.scopeStack.pop();\n    return scope.flags;\n  }\n\n  // The spec says:\n  // > At the top level of a function, or script, function declarations are\n  // > treated like var declarations rather than like lexical declarations.\n  treatFunctionsAsVarInScope(scope: IScope): boolean {\n    return !!(\n      scope.flags & (SCOPE_FUNCTION | SCOPE_STATIC_BLOCK) ||\n      (!this.parser.inModule && scope.flags & SCOPE_PROGRAM)\n    );\n  }\n\n  declareName(name: string, bindingType: BindingTypes, loc: Position) {\n    let scope = this.currentScope();\n    if (bindingType & BIND_SCOPE_LEXICAL || bindingType & BIND_SCOPE_FUNCTION) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n      if (bindingType & BIND_SCOPE_FUNCTION) {\n        scope.functions.add(name);\n      } else {\n        scope.lexical.add(name);\n      }\n\n      if (bindingType & BIND_SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BIND_SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        scope.var.add(name);\n        this.maybeExportDefined(scope, name);\n\n        if (scope.flags & SCOPE_VAR) break;\n      }\n    }\n    if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope: IScope, name: string) {\n    if (this.parser.inModule && scope.flags & SCOPE_PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingTypes,\n    loc: Position,\n  ) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.parser.raise(Errors.VarRedeclaration, {\n        at: loc,\n        identifierName: name,\n      });\n    }\n  }\n\n  isRedeclaredInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingTypes,\n  ): boolean {\n    if (!(bindingType & BIND_KIND_VALUE)) return false;\n\n    if (bindingType & BIND_SCOPE_LEXICAL) {\n      return (\n        scope.lexical.has(name) ||\n        scope.functions.has(name) ||\n        scope.var.has(name)\n      );\n    }\n\n    if (bindingType & BIND_SCOPE_FUNCTION) {\n      return (\n        scope.lexical.has(name) ||\n        (!this.treatFunctionsAsVarInScope(scope) && scope.var.has(name))\n      );\n    }\n\n    return (\n      (scope.lexical.has(name) &&\n        !(\n          scope.flags & SCOPE_SIMPLE_CATCH &&\n          scope.lexical.values().next().value === name\n        )) ||\n      (!this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name))\n    );\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n    const topLevelScope = this.scopeStack[0];\n    if (\n      !topLevelScope.lexical.has(name) &&\n      !topLevelScope.var.has(name) &&\n      // In strict mode, scope.functions will always be empty.\n      // Modules are strict by default, but the `scriptMode` option\n      // can overwrite this behavior.\n      !topLevelScope.functions.has(name)\n    ) {\n      this.undefinedExports.set(name, id.loc.start);\n    }\n  }\n\n  currentScope(): IScope {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScopeFlags(): ScopeFlags {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & SCOPE_VAR) {\n        return flags;\n      }\n    }\n  }\n\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  currentThisScopeFlags(): ScopeFlags {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & (SCOPE_VAR | SCOPE_CLASS) && !(flags & SCOPE_ARROW)) {\n        return flags;\n      }\n    }\n  }\n}\n","import type { Position } from \"../../util/location\";\nimport ScopeHandler, { Scope } from \"../../util/scope\";\nimport {\n  BIND_FLAGS_FLOW_DECLARE_FN,\n  type ScopeFlags,\n  type BindingTypes,\n} from \"../../util/scopeflags\";\nimport type * as N from \"../../types\";\n\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\nclass FlowScope extends Scope {\n  // declare function foo(): type;\n  declareFunctions: Set<string> = new Set();\n}\n\nexport default class FlowScopeHandler extends ScopeHandler<FlowScope> {\n  createScope(flags: ScopeFlags): FlowScope {\n    return new FlowScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingTypes, loc: Position) {\n    const scope = this.currentScope();\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n  }\n\n  isRedeclaredInScope(\n    scope: FlowScope,\n    name: string,\n    bindingType: BindingTypes,\n  ): boolean {\n    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n\n    if (bindingType & BIND_FLAGS_FLOW_DECLARE_FN) {\n      return (\n        !scope.declareFunctions.has(name) &&\n        (scope.lexical.has(name) || scope.functions.has(name))\n      );\n    }\n\n    return false;\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n}\n","import type { Options } from \"../options\";\nimport type State from \"../tokenizer/state\";\nimport type { PluginsMap } from \"./index\";\nimport type ScopeHandler from \"../util/scope\";\nimport type ExpressionScopeHandler from \"../util/expression-scope\";\nimport type ClassScopeHandler from \"../util/class-scope\";\nimport type ProductionParameterHandler from \"../util/production-parameter\";\nimport type {\n  ParserPluginWithOptions,\n  PluginConfig,\n  PluginOptions,\n} from \"../typings\";\n\nexport default class BaseParser {\n  // Properties set by constructor in index.js\n  declare options: Options;\n  declare inModule: boolean;\n  declare scope: ScopeHandler<any>;\n  declare classScope: ClassScopeHandler;\n  declare prodParam: ProductionParameterHandler;\n  declare expressionScope: ExpressionScopeHandler;\n  declare plugins: PluginsMap;\n  declare filename: string | undefined | null;\n  // Names of exports store. `default` is stored as a name for both\n  // `export default foo;` and `export { foo as default };`.\n  declare exportedIdentifiers: Set<string>;\n  sawUnambiguousESM: boolean = false;\n  ambiguousScriptDifferentAst: boolean = false;\n\n  // Initialized by Tokenizer\n  declare state: State;\n  // input and length are not in state as they are constant and we do\n  // not want to ever copy them, which happens if state gets cloned\n  declare input: string;\n  declare length: number;\n\n  // This method accepts either a string (plugin name) or an array pair\n  // (plugin name and options object). If an options object is given,\n  // then each value is non-recursively checked for identity with that\n  // pluginâ€™s actual option value.\n  hasPlugin(pluginConfig: PluginConfig): boolean {\n    if (typeof pluginConfig === \"string\") {\n      return this.plugins.has(pluginConfig);\n    } else {\n      const [pluginName, pluginOptions] = pluginConfig;\n      if (!this.hasPlugin(pluginName)) {\n        return false;\n      }\n      const actualOptions = this.plugins.get(pluginName);\n      for (const key of Object.keys(\n        pluginOptions,\n      ) as (keyof typeof pluginOptions)[]) {\n        if (actualOptions?.[key] !== pluginOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n\n  getPluginOption<\n    PluginName extends ParserPluginWithOptions[0],\n    OptionName extends keyof PluginOptions<PluginName>,\n  >(plugin: PluginName, name: OptionName) {\n    return (this.plugins.get(plugin) as null | PluginOptions<PluginName>)?.[\n      name\n    ];\n  }\n}\n","/*:: declare var invariant; */\n\nimport BaseParser from \"./base\";\nimport type { Comment, Node } from \"../types\";\nimport * as charCodes from \"charcodes\";\nimport type { Undone } from \"./node\";\n\n/**\n * A whitespace token containing comments\n */\nexport type CommentWhitespace = {\n  /**\n   * the start of the whitespace token.\n   */\n  start: number;\n  /**\n   * the end of the whitespace token.\n   */\n  end: number;\n  /**\n   * the containing comments\n   */\n  comments: Array<Comment>;\n  /**\n   * the immediately preceding AST node of the whitespace token\n   */\n  leadingNode: Node | null;\n  /**\n   * the immediately following AST node of the whitespace token\n   */\n  trailingNode: Node | null;\n  /**\n   * the innermost AST node containing the whitespace with minimal size (|end - start|)\n   */\n  containingNode: Node | null;\n};\n\n/**\n * Merge comments with node's trailingComments or assign comments to be\n * trailingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setTrailingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's leadingComments or assign comments to be\n * leadingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setLeadingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.leadingComments === undefined) {\n    node.leadingComments = comments;\n  } else {\n    node.leadingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's innerComments or assign comments to be\n * innerComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nexport function setInnerComments(\n  node: Undone<Node>,\n  comments?: Array<Comment>,\n) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else {\n    node.innerComments.unshift(...comments);\n  }\n}\n\n/**\n * Given node and elements array, if elements has non-null element,\n * merge comments to its trailingComments, otherwise merge comments\n * to node's innerComments\n */\nfunction adjustInnerComments(\n  node: Undone<Node>,\n  elements: Array<Node>,\n  commentWS: CommentWhitespace,\n) {\n  let lastElement = null;\n  let i = elements.length;\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\n\nexport default class CommentsParser extends BaseParser {\n  addComment(comment: Comment): void {\n    if (this.filename) comment.loc.filename = this.filename;\n    this.state.comments.push(comment);\n  }\n\n  /**\n   * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\n   * {@see {@link CommentWhitespace}}\n   */\n  processComment(node: Node): void {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n\n    const { start: nodeStart } = node;\n    // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      if (commentEnd > nodeStart) {\n        // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\n        // so node can be a containingNode candidate. At this time we can finalize the comment\n        // whitespace, because\n        // 1) its leadingNode or trailingNode, if exists, will not change\n        // 2) its containingNode have been assigned and will not change because it is the\n        //    innermost minimal-sized AST node\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n        // stop the loop when commentEnd <= nodeStart\n        break;\n      }\n    }\n  }\n\n  /**\n   * Assign the comments of comment whitespaces to related AST nodes.\n   * Also adjust innerComments following trailing comma.\n   */\n  finalizeComment(commentWS: CommentWhitespace) {\n    const { comments } = commentWS;\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n      if (commentWS.trailingNode !== null) {\n        setLeadingComments(commentWS.trailingNode, comments);\n      }\n    } else {\n      /*:: invariant(commentWS.containingNode !== null) */\n      const { containingNode: node, start: commentStart } = commentWS;\n      if (this.input.charCodeAt(commentStart - 1) === charCodes.comma) {\n        // If a commentWhitespace follows a comma and the containingNode allows\n        // list structures with trailing comma, merge it to the trailingComment\n        // of the last non-null list element\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n          default: {\n            setInnerComments(node, comments);\n          }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n\n  /**\n   * Drains remaining commentStack and applies finalizeComment\n   * to each comment whitespace. Used only in parseExpression\n   * where the top level AST node is _not_ Program\n   * {@see {@link CommentsParser#finalizeComment}}\n   */\n  finalizeRemainingComments() {\n    const { commentStack } = this.state;\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n    this.state.commentStack = [];\n  }\n\n  /* eslint-disable no-irregular-whitespace */\n  /**\n   * Reset previous node trailing comments. Used in object / class\n   * property parsing. We parse `async`, `static`, `set` and `get`\n   * as an identifier but may reinterpret it into an async/static/accessor\n   * method later. In this case the identifier is not part of the AST and we\n   * should sync the knowledge to commentStacks\n   *\n   * For example, when parsing\n   * ```\n   * async /* 1 *â€‹/ function f() {}\n   * ```\n   * the comment whitespace `/* 1 *â€‹/` has leading node Identifier(async). When\n   * we see the function token, we create a Function node and mark `/* 1 *â€‹/` as\n   * inner comments. So `/* 1 *â€‹/` should be detached from the Identifier node.\n   *\n   * @param node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\n  resetPreviousNodeTrailingComments(node: Node) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n\n  /**\n   * Attach a node to the comment whitespaces right before/after\n   * the given range.\n   *\n   * This is used to properly attach comments around parenthesized\n   * expressions as leading/trailing comments of the inner expression.\n   */\n  takeSurroundingComments(node: Node, start: number, end: number) {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      const commentStart = commentWS.start;\n\n      if (commentStart === end) {\n        commentWS.leadingNode = node;\n      } else if (commentEnd === start) {\n        commentWS.trailingNode = node;\n      } else if (commentEnd < start) {\n        break;\n      }\n    }\n  }\n}\n","import * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n?|[\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n  switch (code) {\n    case charCodes.lineFeed:\n    case charCodes.carriageReturn:\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const skipWhiteSpaceInLine =\n  /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/y;\n\n// Skip whitespace and single-line comments, including /* no newline here */.\n// After this RegExp matches, its lastIndex points to a line terminator, or\n// the start of multi-line comment (which is effectively a line terminator),\n// or the end of string.\nexport const skipWhiteSpaceToLineBreak = new RegExp(\n  // Unfortunately JS doesn't support Perl's atomic /(?>pattern)/ or\n  // possessive quantifiers, so we use a trick to prevent backtracking\n  // when the look-ahead for line terminator fails.\n  \"(?=(\" +\n    // Capture the whitespace and comments that should be skipped inside\n    // a look-ahead assertion, and then re-match the group as a unit.\n    skipWhiteSpaceInLine.source +\n    \"))\\\\1\" +\n    // Look-ahead for either line terminator, start of multi-line comment,\n    // or end of string.\n    /(?=[\\n\\r\\u2028\\u2029]|\\/\\*(?!.*?\\*\\/)|$)/.source,\n  \"y\", // sticky\n);\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n  switch (code) {\n    case 0x0009: // CHARACTER TABULATION\n    case 0x000b: // LINE TABULATION\n    case 0x000c: // FORM FEED\n    case charCodes.space:\n    case charCodes.nonBreakingSpace:\n    case charCodes.oghamSpaceMark:\n    case 0x2000: // EN QUAD\n    case 0x2001: // EM QUAD\n    case 0x2002: // EN SPACE\n    case 0x2003: // EM SPACE\n    case 0x2004: // THREE-PER-EM SPACE\n    case 0x2005: // FOUR-PER-EM SPACE\n    case 0x2006: // SIX-PER-EM SPACE\n    case 0x2007: // FIGURE SPACE\n    case 0x2008: // PUNCTUATION SPACE\n    case 0x2009: // THIN SPACE\n    case 0x200a: // HAIR SPACE\n    case 0x202f: // NARROW NO-BREAK SPACE\n    case 0x205f: // MEDIUM MATHEMATICAL SPACE\n    case 0x3000: // IDEOGRAPHIC SPACE\n    case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n      return true;\n\n    default:\n      return false;\n  }\n}\n","import type { Options } from \"../options\";\nimport type * as N from \"../types\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location\";\n\nimport { types as ct, type TokContext } from \"./context\";\nimport { tt, type TokenType } from \"./types\";\nimport type { Errors } from \"../parse-error\";\nimport { type ParseError } from \"../parse-error\";\n\nexport type DeferredStrictError =\n  | typeof Errors.StrictNumericEscape\n  | typeof Errors.StrictOctalLiteral;\n\ntype TopicContextState = {\n  // When a topic binding has been currently established,\n  // then this is 1. Otherwise, it is 0. This is forwards compatible\n  // with a future plugin for multiple lexical topics.\n  maxNumOfResolvableTopics: number;\n  // When a topic binding has been currently established, and if that binding\n  // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n  // `null`. This is forwards compatible with a future plugin for multiple\n  // lexical topics.\n  maxTopicIndex: null | 0;\n};\n\nexport default class State {\n  strict: boolean;\n  curLine: number;\n  lineStart: number;\n\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  startLoc: Position;\n  endLoc: Position;\n\n  init({ strictMode, sourceType, startLine, startColumn }: Options): void {\n    this.strict =\n      strictMode === false\n        ? false\n        : strictMode === true\n        ? true\n        : sourceType === \"module\";\n\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);\n  }\n\n  errors: ParseError<any>[] = [];\n\n  // Used to signify the start of a potential arrow function\n  potentialArrowAt: number = -1;\n\n  // Used to signify the start of an expression which looks like a\n  // typed arrow function, but it isn't\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowAt: number[] = [];\n\n  // Used to signify the start of an expression whose params, if it looks like\n  // an arrow function, shouldn't be converted to assignable nodes.\n  // This is used to defer the validation of typed arrow functions inside\n  // conditional expressions.\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowParamsConversionAt: number[] = [];\n\n  // Flags to track\n  maybeInArrowParameters: boolean = false;\n  inType: boolean = false;\n  noAnonFunctionType: boolean = false;\n  hasFlowComment: boolean = false;\n  isAmbientContext: boolean = false;\n  inAbstractClass: boolean = false;\n  inDisallowConditionalTypesContext: boolean = false;\n\n  // For the Hack-style pipelines plugin\n  topicContext: TopicContextState = {\n    maxNumOfResolvableTopics: 0,\n    maxTopicIndex: null,\n  };\n\n  // For the F#-style pipelines plugin\n  soloAwait: boolean = false;\n  inFSharpPipelineDirectBody: boolean = false;\n\n  // Labels in scope.\n  labels: Array<{\n    kind: \"loop\" | \"switch\" | undefined | null;\n    name?: string | null;\n    statementStart?: number;\n  }> = [];\n\n  // Comment store for Program.comments\n  comments: Array<N.Comment> = [];\n\n  // Comment attachment store\n  commentStack: Array<CommentWhitespace> = [];\n\n  // The current position of the tokenizer in the input.\n  pos: number = 0;\n\n  // Properties of the current token:\n  // Its type\n  type: TokenType = tt.eof;\n\n  // For tokens that include more information than their type, the value\n  value: any = null;\n\n  // Its start and end offset\n  start: number = 0;\n  end: number = 0;\n\n  // Position information for the previous token\n  // this is initialized when generating the second token.\n  lastTokEndLoc: Position = null;\n  // this is initialized when generating the second token.\n  lastTokStartLoc: Position = null;\n  lastTokStart: number = 0;\n\n  // The context stack is used to track whether the apostrophe \"`\" starts\n  // or ends a string template\n  context: Array<TokContext> = [ct.brace];\n  // Used to track whether a JSX element is allowed to form\n  canStartJSXElement: boolean = true;\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  containsEsc: boolean = false;\n\n  // Used to track invalid escape sequences in template literals,\n  // that must be reported if the template is not tagged.\n  firstInvalidTemplateEscapePos: null | Position = null;\n\n  // This property is used to track the following errors\n  // - StrictNumericEscape\n  // - StrictOctalLiteral\n  //\n  // in a literal that occurs prior to/immediately after a \"use strict\" directive.\n\n  // todo(JLHwung): set strictErrors to null and avoid recording string errors\n  // after a non-directive is parsed\n  strictErrors: Map<number, [DeferredStrictError, Position]> = new Map();\n\n  // Tokens length in token store\n  tokensLength: number = 0;\n\n  curPosition(): Position {\n    return new Position(this.curLine, this.pos - this.lineStart, this.pos);\n  }\n\n  clone(skipArrays?: boolean): State {\n    const state = new State();\n    const keys = Object.keys(this) as (keyof State)[];\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      let val = this[key];\n\n      if (!skipArrays && Array.isArray(val)) {\n        val = val.slice();\n      }\n\n      // @ts-expect-error val must conform to S[key]\n      state[key] = val;\n    }\n\n    return state;\n  }\n}\n\nexport type LookaheadState = {\n  pos: number;\n  value: any;\n  type: TokenType;\n  start: number;\n  end: number;\n  context: TokContext[];\n  startLoc: Position;\n  lastTokEndLoc: Position;\n  curLine: number;\n  lineStart: number;\n  curPosition: () => Position;\n  /* Used only in readToken_mult_modulo */\n  inType: boolean;\n  // These boolean properties are not initialized in createLookaheadState()\n  // instead they will only be set by the tokenizer\n  containsEsc?: boolean;\n};\n","import * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseB,\n    charCodes.uppercaseE,\n    charCodes.uppercaseO,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseB,\n    charCodes.lowercaseE,\n    charCodes.lowercaseO,\n  ]),\n  hex: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseX,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseX,\n  ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n  // 0 - 1\n  bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n  // 0 - 7\n  oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n  // 0 - 9\n  dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n  // 0 - 9, A - F, a - f,\n  hex: (ch: number) =>\n    (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n    (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n    (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n  unterminated(\n    initialPos: number,\n    initialLineStart: number,\n    initialCurLine: number,\n  ): void;\n};\n\nexport function readStringContents(\n  type: \"single\" | \"double\" | \"template\",\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  errors: StringContentsErrorHandlers,\n) {\n  const initialPos = pos;\n  const initialLineStart = lineStart;\n  const initialCurLine = curLine;\n\n  let out = \"\";\n  let firstInvalidLoc = null;\n  let chunkStart = pos;\n  const { length } = input;\n  for (;;) {\n    if (pos >= length) {\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    const ch = input.charCodeAt(pos);\n    if (isStringEnd(type, ch, input, pos)) {\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    if (ch === charCodes.backslash) {\n      out += input.slice(chunkStart, pos);\n      const res = readEscapedChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        type === \"template\",\n        errors,\n      );\n      if (res.ch === null && !firstInvalidLoc) {\n        firstInvalidLoc = { pos, lineStart, curLine };\n      } else {\n        out += res.ch;\n      }\n      ({ pos, lineStart, curLine } = res);\n      chunkStart = pos;\n    } else if (\n      ch === charCodes.lineSeparator ||\n      ch === charCodes.paragraphSeparator\n    ) {\n      ++pos;\n      ++curLine;\n      lineStart = pos;\n    } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n      if (type === \"template\") {\n        out += input.slice(chunkStart, pos) + \"\\n\";\n        ++pos;\n        if (\n          ch === charCodes.carriageReturn &&\n          input.charCodeAt(pos) === charCodes.lineFeed\n        ) {\n          ++pos;\n        }\n        ++curLine;\n        chunkStart = lineStart = pos;\n      } else {\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      }\n    } else {\n      ++pos;\n    }\n  }\n  return {\n    pos,\n    str: out,\n    firstInvalidLoc,\n    lineStart,\n    curLine,\n\n    // TODO(Babel 8): This is only needed for backwards compatibility,\n    // we can remove it.\n    containsInvalid: !!firstInvalidLoc,\n  };\n}\n\nfunction isStringEnd(\n  type: \"single\" | \"double\" | \"template\",\n  ch: number,\n  input: string,\n  pos: number,\n) {\n  if (type === \"template\") {\n    return (\n      ch === charCodes.graveAccent ||\n      (ch === charCodes.dollarSign &&\n        input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n    );\n  }\n  return (\n    ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n  );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n  CodePointErrorHandlers & {\n    strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n  };\n\nfunction readEscapedChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  inTemplate: boolean,\n  errors: EscapedCharErrorHandlers,\n) {\n  const throwOnInvalid = !inTemplate;\n  pos++; // skip '\\'\n\n  const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n  const ch = input.charCodeAt(pos++);\n  switch (ch) {\n    case charCodes.lowercaseN:\n      return res(\"\\n\");\n    case charCodes.lowercaseR:\n      return res(\"\\r\");\n    case charCodes.lowercaseX: {\n      let code;\n      ({ code, pos } = readHexChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        2,\n        false,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCharCode(code));\n    }\n    case charCodes.lowercaseU: {\n      let code;\n      ({ code, pos } = readCodePoint(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCodePoint(code));\n    }\n    case charCodes.lowercaseT:\n      return res(\"\\t\");\n    case charCodes.lowercaseB:\n      return res(\"\\b\");\n    case charCodes.lowercaseV:\n      return res(\"\\u000b\");\n    case charCodes.lowercaseF:\n      return res(\"\\f\");\n    case charCodes.carriageReturn:\n      if (input.charCodeAt(pos) === charCodes.lineFeed) {\n        ++pos;\n      }\n    // fall through\n    case charCodes.lineFeed:\n      lineStart = pos;\n      ++curLine;\n    // fall through\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return res(\"\");\n    case charCodes.digit8:\n    case charCodes.digit9:\n      if (inTemplate) {\n        return res(null);\n      } else {\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\n      }\n    // fall through\n    default:\n      if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n        const startPos = pos - 1;\n        const match = input.slice(startPos, pos + 2).match(/^[0-7]+/)!;\n\n        let octalStr = match[0];\n\n        let octal = parseInt(octalStr, 8);\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n        pos += octalStr.length - 1;\n        const next = input.charCodeAt(pos);\n        if (\n          octalStr !== \"0\" ||\n          next === charCodes.digit8 ||\n          next === charCodes.digit9\n        ) {\n          if (inTemplate) {\n            return res(null);\n          } else {\n            errors.strictNumericEscape(startPos, lineStart, curLine);\n          }\n        }\n\n        return res(String.fromCharCode(octal));\n      }\n\n      return res(String.fromCharCode(ch));\n  }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n  invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  len: number,\n  forceLen: boolean,\n  throwOnInvalid: boolean,\n  errors: HexCharErrorHandlers,\n) {\n  const initialPos = pos;\n  let n;\n  ({ n, pos } = readInt(\n    input,\n    pos,\n    lineStart,\n    curLine,\n    16,\n    len,\n    forceLen,\n    false,\n    errors,\n    /* bailOnError */ !throwOnInvalid,\n  ));\n  if (n === null) {\n    if (throwOnInvalid) {\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n    } else {\n      pos = initialPos - 1;\n    }\n  }\n  return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n  numericSeparatorInEscapeSequence(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  unexpectedNumericSeparator(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  // It can return \"true\" to indicate that the error was handled\n  // and the int parsing should continue.\n  invalidDigit(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n    radix: number,\n  ): boolean;\n};\n\nexport function readInt(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  radix: number,\n  len: number | undefined,\n  forceLen: boolean,\n  allowNumSeparator: boolean | \"bail\",\n  errors: IntErrorHandlers,\n  bailOnError: boolean,\n) {\n  const start = pos;\n  const forbiddenSiblings =\n    radix === 16\n      ? forbiddenNumericSeparatorSiblings.hex\n      : forbiddenNumericSeparatorSiblings.decBinOct;\n  const isAllowedSibling =\n    radix === 16\n      ? isAllowedNumericSeparatorSibling.hex\n      : radix === 10\n      ? isAllowedNumericSeparatorSibling.dec\n      : radix === 8\n      ? isAllowedNumericSeparatorSibling.oct\n      : isAllowedNumericSeparatorSibling.bin;\n\n  let invalid = false;\n  let total = 0;\n\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    const code = input.charCodeAt(pos);\n    let val;\n\n    if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n      const prev = input.charCodeAt(pos - 1);\n      const next = input.charCodeAt(pos + 1);\n\n      if (!allowNumSeparator) {\n        if (bailOnError) return { n: null, pos };\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n      } else if (\n        Number.isNaN(next) ||\n        !isAllowedSibling(next) ||\n        forbiddenSiblings.has(prev) ||\n        forbiddenSiblings.has(next)\n      ) {\n        if (bailOnError) return { n: null, pos };\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n      }\n\n      // Ignore this _ character\n      ++pos;\n      continue;\n    }\n\n    if (code >= charCodes.lowercaseA) {\n      val = code - charCodes.lowercaseA + charCodes.lineFeed;\n    } else if (code >= charCodes.uppercaseA) {\n      val = code - charCodes.uppercaseA + charCodes.lineFeed;\n    } else if (charCodes.isDigit(code)) {\n      val = code - charCodes.digit0; // 0-9\n    } else {\n      val = Infinity;\n    }\n    if (val >= radix) {\n      // If we found a digit which is too big, errors.invalidDigit can return true to avoid\n      // breaking the loop (this is used for error recovery).\n      if (val <= 9 && bailOnError) {\n        return { n: null, pos };\n      } else if (\n        val <= 9 &&\n        errors.invalidDigit(pos, lineStart, curLine, radix)\n      ) {\n        val = 0;\n      } else if (forceLen) {\n        val = 0;\n        invalid = true;\n      } else {\n        break;\n      }\n    }\n    ++pos;\n    total = total * radix + val;\n  }\n  if (pos === start || (len != null && pos - start !== len) || invalid) {\n    return { n: null, pos };\n  }\n\n  return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n  invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  throwOnInvalid: boolean,\n  errors: CodePointErrorHandlers,\n) {\n  const ch = input.charCodeAt(pos);\n  let code;\n\n  if (ch === charCodes.leftCurlyBrace) {\n    ++pos;\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      input.indexOf(\"}\", pos) - pos,\n      true,\n      throwOnInvalid,\n      errors,\n    ));\n    ++pos;\n    if (code !== null && code > 0x10ffff) {\n      if (throwOnInvalid) {\n        errors.invalidCodePoint(pos, lineStart, curLine);\n      } else {\n        return { code: null, pos };\n      }\n    }\n  } else {\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      4,\n      false,\n      throwOnInvalid,\n      errors,\n    ));\n  }\n  return { code, pos };\n}\n","/*:: declare var invariant; */\n\nimport type { Options } from \"../options\";\nimport {\n  Position,\n  SourceLocation,\n  createPositionWithColumnOffset,\n} from \"../util/location\";\nimport CommentsParser, { type CommentWhitespace } from \"../parser/comments\";\nimport type * as N from \"../types\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier\";\nimport {\n  tokenIsKeyword,\n  tokenLabelName,\n  tt,\n  keywords as keywordTypes,\n  type TokenType,\n} from \"./types\";\nimport { type TokContext } from \"./context\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n  type RaiseProperties,\n} from \"../parse-error\";\nimport {\n  lineBreakG,\n  isNewLine,\n  isWhitespace,\n  skipWhiteSpace,\n} from \"../util/whitespace\";\nimport State from \"./state\";\nimport type { LookaheadState, DeferredStrictError } from \"./state\";\n\nimport {\n  readInt,\n  readCodePoint,\n  readStringContents,\n  type IntErrorHandlers,\n  type CodePointErrorHandlers,\n  type StringContentsErrorHandlers,\n} from \"@babel/helper-string-parser\";\n\nimport type { Plugin } from \"../typings\";\n\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\n  return new Position(curLine, pos - lineStart, pos);\n}\n\nconst VALID_REGEX_FLAGS = new Set([\n  charCodes.lowercaseG,\n  charCodes.lowercaseM,\n  charCodes.lowercaseS,\n  charCodes.lowercaseI,\n  charCodes.lowercaseY,\n  charCodes.lowercaseU,\n  charCodes.lowercaseD,\n  // This is only valid when using the regexpUnicodeSets plugin\n  charCodes.lowercaseV,\n]);\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n  constructor(state: State) {\n    this.type = state.type;\n    this.value = state.value;\n    this.start = state.start;\n    this.end = state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n  declare type: TokenType;\n  declare value: any;\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default abstract class Tokenizer extends CommentsParser {\n  isLookahead: boolean;\n\n  // Token store.\n  tokens: Array<Token | N.Comment> = [];\n\n  constructor(options: Options, input: string) {\n    super();\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.isLookahead = false;\n  }\n\n  pushToken(token: Token | N.Comment) {\n    // Pop out invalid tokens trapped by try-catch parsing.\n    // Those parsing branches are mainly created by typescript and flow plugins.\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  // Move to the next token\n\n  next(): void {\n    this.checkKeywordEscapes();\n    if (this.options.tokens) {\n      this.pushToken(new Token(this.state));\n    }\n\n    this.state.lastTokStart = this.state.start;\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  eat(type: TokenType): boolean {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Whether current token matches given type\n   */\n  match(type: TokenType): boolean {\n    return this.state.type === type;\n  }\n\n  /**\n   * Create a LookaheadState from current parser state\n   */\n  createLookaheadState(state: State): LookaheadState {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      context: [this.curContext()],\n      inType: state.inType,\n      startLoc: state.startLoc,\n      lastTokEndLoc: state.lastTokEndLoc,\n      curLine: state.curLine,\n      lineStart: state.lineStart,\n      curPosition: state.curPosition,\n    };\n  }\n\n  /**\n   * lookahead peeks the next token, skipping changes to token context and\n   * comment stack. For performance it returns a limited LookaheadState\n   * instead of full parser state.\n   *\n   * The { column, line } Loc info is not included in lookahead since such usage\n   * is rare. Although it may return other location properties e.g. `curLine` and\n   * `lineStart`, these properties are not listed in the LookaheadState interface\n   * and thus the returned value is _NOT_ reliable.\n   *\n   * The tokenizer should make best efforts to avoid using any parser state\n   * other than those defined in LookaheadState\n   */\n  lookahead(): LookaheadState {\n    const old = this.state;\n    // @ts-expect-error For performance we use a simplified tokenizer state structure\n    this.state = this.createLookaheadState(old);\n\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart(): number {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos: number): number {\n    skipWhiteSpace.lastIndex = pos;\n    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n  }\n\n  lookaheadCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n\n  codePointAtPos(pos: number): number {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = this.input.charCodeAt(pos);\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    return cp;\n  }\n\n  // Toggle strict mode. Re-reads the next number or string to please\n  // pedantic tests (`\"use strict\"; 010;` should fail).\n\n  setStrict(strict: boolean): void {\n    this.state.strict = strict;\n    if (strict) {\n      // Throw an error for any string decimal escape found before/immediately\n      // after a \"use strict\" directive. Strict mode will be set at parse\n      // time for any literals that occur after the next node of the strict\n      // directive.\n      this.state.strictErrors.forEach(([toParseError, at]) =>\n        this.raise(toParseError, { at }),\n      );\n      this.state.strictErrors.clear();\n    }\n  }\n\n  curContext(): TokContext {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  // Read a single token, updating the parser object's token-related\n  // properties.\n\n  nextToken(): void {\n    this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n    if (this.state.pos >= this.length) {\n      this.finishToken(tt.eof);\n      return;\n    }\n\n    this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n  }\n\n  // Skips a block comment, whose end is marked by commentEnd.\n  // *-/ is used by the Flow plugin, when parsing block comments nested\n  // inside Flow comments.\n  skipBlockComment(commentEnd: \"*/\" | \"*-/\"): N.CommentBlock | undefined {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(commentEnd, start + 2);\n    if (end === -1) {\n      // We have to call this again here because startLoc may not be set...\n      // This seems to be for performance reasons:\n      // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\n      throw this.raise(Errors.UnterminatedComment, {\n        at: this.state.curPosition(),\n      });\n    }\n\n    this.state.pos = end + commentEnd.length;\n    lineBreakG.lastIndex = start + 2;\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n      ++this.state.curLine;\n      this.state.lineStart = lineBreakG.lastIndex;\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n    /*:: invariant(startLoc) */\n\n    const comment: N.CommentBlock = {\n      type: \"CommentBlock\",\n      value: this.input.slice(start + 2, end),\n      start,\n      end: end + commentEnd.length,\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipLineComment(startSkip: number): N.CommentLine | undefined {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt((this.state.pos += startSkip));\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n    /*:: invariant(startLoc) */\n\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n\n    const comment: N.CommentLine = {\n      type: \"CommentLine\",\n      value,\n      start,\n      end,\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  // Called at the start of the parse and after every token. Skips\n  // whitespace and comments, and.\n\n  skipSpace(): void {\n    const spaceStart = this.state.pos;\n    const comments = [];\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case charCodes.space:\n        case charCodes.nonBreakingSpace:\n        case charCodes.tab:\n          ++this.state.pos;\n          break;\n        case charCodes.carriageReturn:\n          if (\n            this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n          ) {\n            ++this.state.pos;\n          }\n        // fall through\n        case charCodes.lineFeed:\n        case charCodes.lineSeparator:\n        case charCodes.paragraphSeparator:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case charCodes.slash:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case charCodes.asterisk: {\n              const comment = this.skipBlockComment(\"*/\");\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n              break;\n            }\n\n            case charCodes.slash: {\n              const comment = this.skipLineComment(2);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n              break;\n            }\n\n            default:\n              break loop;\n          }\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (ch === charCodes.dash && !this.inModule) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.dash &&\n              this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\n              (spaceStart === 0 || this.state.lineStart > spaceStart)\n            ) {\n              // A `-->` line comment\n              const comment = this.skipLineComment(3);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (ch === charCodes.lessThan && !this.inModule) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n              this.input.charCodeAt(pos + 2) === charCodes.dash &&\n              this.input.charCodeAt(pos + 3) === charCodes.dash\n            ) {\n              // `<!--`, an XML-style comment that should be interpreted as a line comment\n              const comment = this.skipLineComment(4);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n      }\n    }\n\n    if (comments.length > 0) {\n      const end = this.state.pos;\n      const commentWhitespace: CommentWhitespace = {\n        start: spaceStart,\n        end,\n        comments,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null,\n      };\n      this.state.commentStack.push(commentWhitespace);\n    }\n  }\n\n  // Called at the end of every token. Sets `end`, `val`, and\n  // maintains `context` and `canStartJSXElement`, and skips the space after\n  // the token, so that the next one's `start` will point at the\n  // right position.\n\n  finishToken(type: TokenType, val?: any): void {\n    this.state.end = this.state.pos;\n    this.state.endLoc = this.state.curPosition();\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) {\n      this.updateContext(prevType);\n    }\n  }\n\n  replaceToken(type: TokenType): void {\n    this.state.type = type;\n    // @ts-expect-error the prevType of updateContext is required\n    // only when the new type is tt.slash/tt.jsxTagEnd\n    this.updateContext();\n  }\n\n  // ### Token reading\n\n  // This is the function that is called to fetch the next token. It\n  // is somewhat obscure, because it works in character codes rather\n  // than characters, and because operator parsing has been inlined\n  // into it.\n  //\n  // All in the name of speed.\n\n  // number sign is \"#\"\n  readToken_numberSign(): void {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      throw this.raise(Errors.UnexpectedDigitAfterHash, {\n        at: this.state.curPosition(),\n      });\n    }\n\n    if (\n      next === charCodes.leftCurlyBrace ||\n      (next === charCodes.leftSquareBracket && this.hasPlugin(\"recordAndTuple\"))\n    ) {\n      // When we see `#{`, it is likely to be a hash record.\n      // However we don't yell at `#[` since users may intend to use \"computed private fields\",\n      // which is not allowed in the spec. Throwing expecting recordAndTuple is\n      // misleading\n      this.expectPlugin(\"recordAndTuple\");\n      if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") === \"bar\") {\n        throw this.raise(\n          next === charCodes.leftCurlyBrace\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n          { at: this.state.curPosition() },\n        );\n      }\n\n      this.state.pos += 2;\n      if (next === charCodes.leftCurlyBrace) {\n        // #{\n        this.finishToken(tt.braceHashL);\n      } else {\n        // #[\n        this.finishToken(tt.bracketHashL);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1(next));\n    } else if (next === charCodes.backslash) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1());\n    } else {\n      this.finishOp(tt.hash, 1);\n    }\n  }\n\n  readToken_dot(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (\n      next === charCodes.dot &&\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n    ) {\n      this.state.pos += 3;\n      this.finishToken(tt.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.dot);\n    }\n  }\n\n  readToken_slash(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.slashAssign, 2);\n    } else {\n      this.finishOp(tt.slash, 1);\n    }\n  }\n\n  readToken_interpreter(): boolean {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== charCodes.exclamationMark) return false;\n\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n\n    this.finishToken(tt.interpreterDirective, value);\n\n    return true;\n  }\n\n  readToken_mult_modulo(code: number): void {\n    // '%' or '*'\n    let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n\n    // Exponentiation operator '**'\n    if (code === charCodes.asterisk && next === charCodes.asterisk) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = tt.exponent;\n    }\n\n    // '%=' or '*='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      width++;\n      // `tt.moduloAssign` is only needed to support % as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      type = code === charCodes.percentSign ? tt.moduloAssign : tt.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code: number): void {\n    // '||' '&&' '||=' '&&='\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n      } else {\n        this.finishOp(\n          code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n          2,\n        );\n      }\n      return;\n    }\n\n    if (code === charCodes.verticalBar) {\n      // '|>'\n      if (next === charCodes.greaterThan) {\n        this.finishOp(tt.pipeline, 2);\n        return;\n      }\n      // '|}'\n      if (\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(Errors.RecordExpressionBarIncorrectEndSyntaxType, {\n            at: this.state.curPosition(),\n          });\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.braceBarR);\n        return;\n      }\n\n      // '|]'\n      if (\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightSquareBracket\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(Errors.TupleExpressionBarIncorrectEndSyntaxType, {\n            at: this.state.curPosition(),\n          });\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.bracketBarR);\n        return;\n      }\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n      return;\n    }\n\n    this.finishOp(\n      code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n      1,\n    );\n  }\n\n  readToken_caret(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '^='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      // `tt.xorAssign` is only needed to support ^ as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      this.finishOp(tt.xorAssign, 2);\n    }\n    // '^^'\n    else if (\n      next === charCodes.caret &&\n      // If the ^^ token is not enabled, we don't throw but parse two single ^s\n      // because it could be a ^ hack token followed by a ^ binary operator.\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"^^\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleCaret, 2);\n\n      // `^^^` is forbidden and must be separated by a space.\n      const lookaheadCh = this.input.codePointAt(this.state.pos);\n      if (lookaheadCh === charCodes.caret) {\n        throw this.unexpected();\n      }\n    }\n    // '^'\n    else {\n      this.finishOp(tt.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_atSign(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '@@'\n    if (\n      next === charCodes.atSign &&\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"@@\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleAt, 2);\n    }\n    // '@'\n    else {\n      this.finishOp(tt.at, 1);\n    }\n  }\n\n  readToken_plus_min(code: number): void {\n    // '+-'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      this.finishOp(tt.incDec, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.plusMin, 1);\n    }\n  }\n\n  readToken_lt(): void {\n    // '<'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.lessThan) {\n      if (this.input.charCodeAt(pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n        return;\n      }\n      this.finishOp(tt.bitShiftL, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.lt, 1);\n  }\n\n  readToken_gt(): void {\n    // '>'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.greaterThan) {\n      const size =\n        this.input.charCodeAt(pos + 2) === charCodes.greaterThan ? 3 : 2;\n      if (this.input.charCodeAt(pos + size) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, size + 1);\n        return;\n      }\n      this.finishOp(tt.bitShiftR, size);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <= | >=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.gt, 1);\n  }\n\n  readToken_eq_excl(code: number): void {\n    // '=!'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(\n        tt.equality,\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n          ? 3\n          : 2,\n      );\n      return;\n    }\n    if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n      // '=>'\n      this.state.pos += 2;\n      this.finishToken(tt.arrow);\n      return;\n    }\n    this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n  }\n\n  readToken_question(): void {\n    // '?'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n    if (next === charCodes.questionMark) {\n      if (next2 === charCodes.equalsTo) {\n        // '??='\n        this.finishOp(tt.assign, 3);\n      } else {\n        // '??'\n        this.finishOp(tt.nullishCoalescing, 2);\n      }\n    } else if (\n      next === charCodes.dot &&\n      !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n    ) {\n      // '.' not followed by a number\n      this.state.pos += 2;\n      this.finishToken(tt.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.question);\n    }\n  }\n\n  getTokenFromCode(code: number): void {\n    switch (code) {\n      // The interpretation of a dot depends on whether it is followed\n      // by a digit or another two dots.\n\n      case charCodes.dot:\n        this.readToken_dot();\n        return;\n\n      // Punctuation tokens.\n      case charCodes.leftParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenL);\n        return;\n      case charCodes.rightParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenR);\n        return;\n      case charCodes.semicolon:\n        ++this.state.pos;\n        this.finishToken(tt.semi);\n        return;\n      case charCodes.comma:\n        ++this.state.pos;\n        this.finishToken(tt.comma);\n        return;\n      case charCodes.leftSquareBracket:\n        if (\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.TupleExpressionBarIncorrectStartSyntaxType,\n              { at: this.state.curPosition() },\n            );\n          }\n\n          // [|\n          this.state.pos += 2;\n          this.finishToken(tt.bracketBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.bracketL);\n        }\n        return;\n      case charCodes.rightSquareBracket:\n        ++this.state.pos;\n        this.finishToken(tt.bracketR);\n        return;\n      case charCodes.leftCurlyBrace:\n        if (\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.RecordExpressionBarIncorrectStartSyntaxType,\n              { at: this.state.curPosition() },\n            );\n          }\n\n          // {|\n          this.state.pos += 2;\n          this.finishToken(tt.braceBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.braceL);\n        }\n        return;\n      case charCodes.rightCurlyBrace:\n        ++this.state.pos;\n        this.finishToken(tt.braceR);\n        return;\n\n      case charCodes.colon:\n        if (\n          this.hasPlugin(\"functionBind\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n        ) {\n          this.finishOp(tt.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.colon);\n        }\n        return;\n\n      case charCodes.questionMark:\n        this.readToken_question();\n        return;\n\n      case charCodes.graveAccent:\n        this.readTemplateToken();\n        return;\n\n      case charCodes.digit0: {\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        // '0x', '0X' - hex number\n        if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n          this.readRadixNumber(16);\n          return;\n        }\n        // '0o', '0O' - octal number\n        if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n          this.readRadixNumber(8);\n          return;\n        }\n        // '0b', '0B' - binary number\n        if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n          this.readRadixNumber(2);\n          return;\n        }\n      }\n      // Anything else beginning with a digit is an integer, octal\n      // number, or float. (fall through)\n      case charCodes.digit1:\n      case charCodes.digit2:\n      case charCodes.digit3:\n      case charCodes.digit4:\n      case charCodes.digit5:\n      case charCodes.digit6:\n      case charCodes.digit7:\n      case charCodes.digit8:\n      case charCodes.digit9:\n        this.readNumber(false);\n        return;\n\n      // Quotes produce strings.\n      case charCodes.quotationMark:\n      case charCodes.apostrophe:\n        this.readString(code);\n        return;\n\n      // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n      // often referred to. `finishOp` simply skips the amount of\n      // characters it is given as second argument, and returns a token\n      // of the type given by its first argument.\n\n      case charCodes.slash:\n        this.readToken_slash();\n        return;\n\n      case charCodes.percentSign:\n      case charCodes.asterisk:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case charCodes.verticalBar:\n      case charCodes.ampersand:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case charCodes.caret:\n        this.readToken_caret();\n        return;\n\n      case charCodes.plusSign:\n      case charCodes.dash:\n        this.readToken_plus_min(code);\n        return;\n\n      case charCodes.lessThan:\n        this.readToken_lt();\n        return;\n\n      case charCodes.greaterThan:\n        this.readToken_gt();\n        return;\n\n      case charCodes.equalsTo:\n      case charCodes.exclamationMark:\n        this.readToken_eq_excl(code);\n        return;\n\n      case charCodes.tilde:\n        this.finishOp(tt.tilde, 1);\n        return;\n\n      case charCodes.atSign:\n        this.readToken_atSign();\n        return;\n\n      case charCodes.numberSign:\n        this.readToken_numberSign();\n        return;\n\n      case charCodes.backslash:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n    }\n\n    throw this.raise(Errors.InvalidOrUnexpectedToken, {\n      at: this.state.curPosition(),\n      unexpected: String.fromCodePoint(code),\n    });\n  }\n\n  finishOp(type: TokenType, size: number): void {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp(): void {\n    const startLoc = this.state.startLoc;\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let { pos } = this.state;\n    for (; ; ++pos) {\n      if (pos >= this.length) {\n        // FIXME: explain\n        throw this.raise(Errors.UnterminatedRegExp, {\n          at: createPositionWithColumnOffset(startLoc, 1),\n        });\n      }\n      const ch = this.input.charCodeAt(pos);\n      if (isNewLine(ch)) {\n        throw this.raise(Errors.UnterminatedRegExp, {\n          at: createPositionWithColumnOffset(startLoc, 1),\n        });\n      }\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === charCodes.leftSquareBracket) {\n          inClass = true;\n        } else if (ch === charCodes.rightSquareBracket && inClass) {\n          inClass = false;\n        } else if (ch === charCodes.slash && !inClass) {\n          break;\n        }\n        escaped = ch === charCodes.backslash;\n      }\n    }\n    const content = this.input.slice(start, pos);\n    ++pos;\n\n    let mods = \"\";\n\n    const nextPos = () =>\n      // (pos + 1) + 1 - start\n      createPositionWithColumnOffset(startLoc, pos + 2 - start);\n\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      // It doesn't matter if cp > 0xffff, the loop will either throw or break because we check on cp\n      const char = String.fromCharCode(cp);\n\n      // @ts-expect-error VALID_REGEX_FLAGS.has should accept expanded type: number\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (cp === charCodes.lowercaseV) {\n          this.expectPlugin(\"regexpUnicodeSets\", nextPos());\n\n          if (mods.includes(\"u\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, { at: nextPos() });\n          }\n        } else if (cp === charCodes.lowercaseU) {\n          if (mods.includes(\"v\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, { at: nextPos() });\n          }\n        }\n        if (mods.includes(char)) {\n          this.raise(Errors.DuplicateRegExpFlags, { at: nextPos() });\n        }\n      } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\n        this.raise(Errors.MalformedRegExpFlags, { at: nextPos() });\n      } else {\n        break;\n      }\n\n      ++pos;\n      mods += char;\n    }\n    this.state.pos = pos;\n\n    this.finishToken(tt.regexp, {\n      pattern: content,\n      flags: mods,\n    });\n  }\n\n  // Read an integer in the given radix. Return null if zero digits\n  // were read, the integer value otherwise. When `len` is given, this\n  // will return `null` unless the integer has exactly `len` digits.\n  // When `forceLen` is `true`, it means that we already know that in case\n  // of a malformed number we have to skip `len` characters anyway, instead\n  // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n  // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n  // characters (and thus the closing quote).\n\n  readInt(\n    radix: number,\n    len?: number,\n    forceLen: boolean = false,\n    allowNumSeparator: boolean | \"bail\" = true,\n  ): number | null {\n    const { n, pos } = readInt(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      radix,\n      len,\n      forceLen,\n      allowNumSeparator,\n      this.errorHandlers_readInt,\n      /* bailOnError */ false,\n    );\n    this.state.pos = pos;\n    return n;\n  }\n\n  readRadixNumber(radix: number): void {\n    const startLoc = this.state.curPosition();\n    let isBigInt = false;\n\n    this.state.pos += 2; // 0x\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(Errors.InvalidDigit, {\n        // Numeric literals can't have newlines, so this is safe to do.\n        at: createPositionWithColumnOffset(startLoc, 2),\n        radix,\n      });\n    }\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === charCodes.lowercaseN) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === charCodes.lowercaseM) {\n      throw this.raise(Errors.InvalidDecimal, { at: startLoc });\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, {\n        at: this.state.curPosition(),\n      });\n    }\n\n    if (isBigInt) {\n      const str = this.input\n        .slice(startLoc.index, this.state.pos)\n        .replace(/[_n]/g, \"\");\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    this.finishToken(tt.num, val);\n  }\n\n  // Read an integer, octal integer, or floating-point number.\n\n  readNumber(startsWithDot: boolean): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isFloat = false;\n    let isBigInt = false;\n    let isDecimal = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(Errors.InvalidNumber, { at: this.state.curPosition() });\n    }\n    const hasLeadingZero =\n      this.state.pos - start >= 2 &&\n      this.input.charCodeAt(start) === charCodes.digit0;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(Errors.StrictOctalLiteral, { at: startLoc });\n      if (!this.state.strict) {\n        // disallow numeric separators in non octal decimals and legacy octal likes\n        const underscorePos = integer.indexOf(\"_\");\n        if (underscorePos > 0) {\n          // Numeric literals can't have newlines, so this is safe to do.\n          this.raise(Errors.ZeroDigitNumericSeparator, {\n            at: createPositionWithColumnOffset(startLoc, underscorePos),\n          });\n        }\n      }\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n    if (next === charCodes.dot && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (\n      (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n      !isOctal\n    ) {\n      next = this.input.charCodeAt(++this.state.pos);\n      if (next === charCodes.plusSign || next === charCodes.dash) {\n        ++this.state.pos;\n      }\n      if (this.readInt(10) === null) {\n        this.raise(Errors.InvalidOrMissingExponent, { at: startLoc });\n      }\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === charCodes.lowercaseN) {\n      // disallow floats, legacy octal syntax and non octal decimals\n      // new style octal (\"0o\") is handled in this.readRadixNumber\n      if (isFloat || hasLeadingZero) {\n        this.raise(Errors.InvalidBigIntLiteral, { at: startLoc });\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (next === charCodes.lowercaseM) {\n      this.expectPlugin(\"decimal\", this.state.curPosition());\n      if (hasExponent || hasLeadingZero) {\n        this.raise(Errors.InvalidDecimal, { at: startLoc });\n      }\n      ++this.state.pos;\n      isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, {\n        at: this.state.curPosition(),\n      });\n    }\n\n    // remove \"_\" for numeric literal separator, and trailing `m` or `n`\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    if (isDecimal) {\n      this.finishToken(tt.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(tt.num, val);\n  }\n\n  // Read a string value, interpreting backslash-escapes.\n\n  readCodePoint(throwOnInvalid: boolean): number | null {\n    const { code, pos } = readCodePoint(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      throwOnInvalid,\n      this.errorHandlers_readCodePoint,\n    );\n    this.state.pos = pos;\n    return code;\n  }\n\n  readString(quote: number): void {\n    const { str, pos, curLine, lineStart } = readStringContents(\n      quote === charCodes.quotationMark ? \"double\" : \"single\",\n      this.input,\n      this.state.pos + 1, // skip the quote\n      this.state.lineStart,\n      this.state.curLine,\n      this.errorHandlers_readStringContents_string,\n    );\n    this.state.pos = pos + 1; // skip the quote\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n    this.finishToken(tt.string, str);\n  }\n\n  // Reads template continuation `}...`\n  readTemplateContinuation(): void {\n    if (!this.match(tt.braceR)) {\n      this.unexpected(null, tt.braceR);\n    }\n    // rewind pos to `}`\n    this.state.pos--;\n    this.readTemplateToken();\n  }\n\n  // Reads template string tokens.\n  readTemplateToken(): void {\n    const opening = this.input[this.state.pos];\n    const { str, firstInvalidLoc, pos, curLine, lineStart } =\n      readStringContents(\n        \"template\",\n        this.input,\n        this.state.pos + 1, // skip '`' or `}`\n        this.state.lineStart,\n        this.state.curLine,\n        this.errorHandlers_readStringContents_template,\n      );\n    this.state.pos = pos + 1; // skip '`' or `$`\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n\n    if (firstInvalidLoc) {\n      this.state.firstInvalidTemplateEscapePos = new Position(\n        firstInvalidLoc.curLine,\n        firstInvalidLoc.pos - firstInvalidLoc.lineStart,\n        firstInvalidLoc.pos,\n      );\n    }\n\n    if (this.input.codePointAt(pos) === charCodes.graveAccent) {\n      this.finishToken(\n        tt.templateTail,\n        firstInvalidLoc ? null : opening + str + \"`\",\n      );\n    } else {\n      this.state.pos++; // skip '{'\n      this.finishToken(\n        tt.templateNonTail,\n        firstInvalidLoc ? null : opening + str + \"${\",\n      );\n    }\n  }\n\n  recordStrictModeErrors(\n    toParseError: DeferredStrictError,\n    { at }: { at: Position },\n  ) {\n    const index = at.index;\n\n    if (this.state.strict && !this.state.strictErrors.has(index)) {\n      this.raise(toParseError, { at });\n    } else {\n      this.state.strictErrors.set(index, [toParseError, at]);\n    }\n  }\n\n  // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n  // to whether the word contained a '\\u' escape.\n  //\n  // Incrementally adds only escaped chars, adding other chunks as-is\n  // as a micro-optimization.\n  //\n  // When `firstCode` is given, it assumes it is always an identifier start and\n  // will skip reading start position again\n\n  readWord1(firstCode?: number): string {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === charCodes.backslash) {\n        this.state.containsEsc = true;\n\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.curPosition();\n        const identifierCheck =\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n          this.raise(Errors.MissingUnicodeEscape, {\n            at: this.state.curPosition(),\n          });\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(Errors.EscapedCharNotAnIdentifier, { at: escStart });\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  // Read an identifier or keyword token. Will check for reserved\n  // words when necessary.\n\n  readWord(firstCode?: number): void {\n    const word = this.readWord1(firstCode);\n    const type = keywordTypes.get(word);\n    if (type !== undefined) {\n      // We don't use word as state.value here because word is a dynamic string\n      // while token label is a shared constant string\n      this.finishToken(type, tokenLabelName(type));\n    } else {\n      this.finishToken(tt.name, word);\n    }\n  }\n\n  checkKeywordEscapes(): void {\n    const { type } = this.state;\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\n      this.raise(Errors.InvalidEscapedReservedWord, {\n        at: this.state.startLoc,\n        reservedWord: tokenLabelName(type),\n      });\n    }\n  }\n\n  /**\n   * Raise a `ParseError` given the appropriate properties. If passed a\n   * `Position` for the `at` property, raises the `ParseError` at that location.\n   * Otherwise, if passed a `Node`, raises the `ParseError` at the start\n   * location of that `Node`.\n   *\n   * If `errorRecovery` is `true`, the error is pushed to the errors array and\n   * returned. If `errorRecovery` is `false`, the error is instead thrown.\n   */\n  raise<ErrorDetails>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    raiseProperties: RaiseProperties<ErrorDetails>,\n  ): ParseError<ErrorDetails> {\n    const { at, ...details } = raiseProperties;\n    const loc = at instanceof Position ? at : at.loc.start;\n    // @ts-expect-error: refine details typing\n    const error = toParseError({ loc, details });\n\n    if (!this.options.errorRecovery) throw error;\n    if (!this.isLookahead) this.state.errors.push(error);\n\n    return error;\n  }\n\n  /**\n   * If `errorRecovery` is `false`, this method behaves identically to `raise`.\n   * If `errorRecovery` is `true`, this method will first see if there is\n   * already an error stored at the same `Position`, and replaces it with the\n   * one generated here.\n   */\n  raiseOverwrite<ErrorDetails>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    raiseProperties: RaiseProperties<ErrorDetails>,\n  ): ParseError<ErrorDetails> | never {\n    const { at, ...details } = raiseProperties;\n    const loc = at instanceof Position ? at : at.loc.start;\n    const pos = loc.index;\n    const errors = this.state.errors;\n\n    for (let i = errors.length - 1; i >= 0; i--) {\n      const error = errors[i];\n      if (error.loc.index === pos) {\n        // @ts-expect-error: refine details typing\n        return (errors[i] = toParseError({ loc, details }));\n      }\n      if (error.loc.index < pos) break;\n    }\n\n    return this.raise(toParseError, raiseProperties);\n  }\n\n  // updateContext is used by the jsx plugin\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  updateContext(prevType: TokenType): void {}\n\n  // Raise an unexpected token error. Can take the expected token type.\n  unexpected(loc?: Position | null, type?: TokenType): void {\n    throw this.raise(Errors.UnexpectedToken, {\n      expected: type ? tokenLabelName(type) : null,\n      at: loc != null ? loc : this.state.startLoc,\n    });\n  }\n\n  expectPlugin(pluginName: Plugin, loc?: Position): true {\n    if (this.hasPlugin(pluginName)) {\n      return true;\n    }\n\n    throw this.raise(Errors.MissingPlugin, {\n      at: loc != null ? loc : this.state.startLoc,\n      missingPlugin: [pluginName],\n    });\n  }\n\n  expectOnePlugin(pluginNames: Plugin[]): void {\n    if (!pluginNames.some(name => this.hasPlugin(name))) {\n      throw this.raise(Errors.MissingOneOfPlugins, {\n        at: this.state.startLoc,\n        missingPlugin: pluginNames,\n      });\n    }\n  }\n\n  errorBuilder(error: ParseErrorConstructor<{}>) {\n    return (pos: number, lineStart: number, curLine: number) => {\n      this.raise(error, {\n        at: buildPosition(pos, lineStart, curLine),\n      });\n    };\n  }\n\n  errorHandlers_readInt: IntErrorHandlers = {\n    invalidDigit: (pos, lineStart, curLine, radix) => {\n      if (!this.options.errorRecovery) return false;\n\n      this.raise(Errors.InvalidDigit, {\n        at: buildPosition(pos, lineStart, curLine),\n        radix,\n      });\n      // Continue parsing the number as if there was no invalid digit.\n      return true;\n    },\n    numericSeparatorInEscapeSequence: this.errorBuilder(\n      Errors.NumericSeparatorInEscapeSequence,\n    ),\n    unexpectedNumericSeparator: this.errorBuilder(\n      Errors.UnexpectedNumericSeparator,\n    ),\n  };\n\n  errorHandlers_readCodePoint: CodePointErrorHandlers = {\n    ...this.errorHandlers_readInt,\n    invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\n    invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint),\n  };\n\n  errorHandlers_readStringContents_string: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: (pos, lineStart, curLine) => {\n      this.recordStrictModeErrors(Errors.StrictNumericEscape, {\n        at: buildPosition(pos, lineStart, curLine),\n      });\n    },\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(Errors.UnterminatedString, {\n        // Report the error at the string quote\n        at: buildPosition(pos - 1, lineStart, curLine),\n      });\n    },\n  };\n\n  errorHandlers_readStringContents_template: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(Errors.UnterminatedTemplate, {\n        at: buildPosition(pos, lineStart, curLine),\n      });\n    },\n  };\n}\n","import {\n  CLASS_ELEMENT_KIND_ACCESSOR,\n  CLASS_ELEMENT_FLAG_STATIC,\n  type ClassElementTypes,\n} from \"./scopeflags\";\nimport type { Position } from \"./location\";\nimport { Errors } from \"../parse-error\";\nimport type Tokenizer from \"../tokenizer\";\n\nexport class ClassScope {\n  // A list of private named declared in the current class\n  privateNames: Set<string> = new Set();\n\n  // A list of private getters of setters without their counterpart\n  loneAccessors: Map<string, ClassElementTypes> = new Map();\n\n  // A list of private names used before being defined, mapping to\n  // their position.\n  undefinedPrivateNames: Map<string, Position> = new Map();\n}\n\nexport default class ClassScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ClassScope> = [];\n  undefinedPrivateNames: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n\n  current(): ClassScope {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n\n    // Migrate the usage of not yet defined private names to the outer\n    // class scope, or raise an error if we reached the top-level scope.\n\n    const current = this.current();\n\n    // Array.from is needed because this is compiled to an array-like for loop\n    for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, loc);\n        }\n      } else {\n        this.parser.raise(Errors.InvalidPrivateFieldResolution, {\n          at: loc,\n          identifierName: name,\n        });\n      }\n    }\n  }\n\n  declarePrivateName(\n    name: string,\n    elementType: ClassElementTypes,\n    loc: Position,\n  ) {\n    const { privateNames, loneAccessors, undefinedPrivateNames } =\n      this.current();\n    let redefined = privateNames.has(name);\n\n    if (elementType & CLASS_ELEMENT_KIND_ACCESSOR) {\n      const accessor = redefined && loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & CLASS_ELEMENT_FLAG_STATIC;\n        const newStatic = elementType & CLASS_ELEMENT_FLAG_STATIC;\n\n        const oldKind = accessor & CLASS_ELEMENT_KIND_ACCESSOR;\n        const newKind = elementType & CLASS_ELEMENT_KIND_ACCESSOR;\n\n        // The private name can be duplicated only if it is used by\n        // two accessors with different kind (get and set), and if\n        // they have the same placement (static or not).\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n\n        if (!redefined) loneAccessors.delete(name);\n      } else if (!redefined) {\n        loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.parser.raise(Errors.PrivateNameRedeclaration, {\n        at: loc,\n        identifierName: name,\n      });\n    }\n\n    privateNames.add(name);\n    undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name: string, loc: Position) {\n    let classScope;\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, loc);\n    } else {\n      // top-level\n      this.parser.raise(Errors.InvalidPrivateFieldResolution, {\n        at: loc,\n        identifierName: name,\n      });\n    }\n  }\n}\n","import { Errors, type ParseErrorConstructor } from \"../parse-error\";\nimport type { Position } from \"./location\";\nimport type { Node } from \"../types\";\nimport type Tokenizer from \"../tokenizer\";\n\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n  e.g. we don't know if `({ x })` is an parenthesized expression or an\n  arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n  e.g. we don't know if `async({ x })` is a call expression or an async arrow\n  function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n  A general scope that represents program / function body / static block. No errors\n  will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n  A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n  alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n  is called.\n\n- MaybeAsyncArrowParameterDeclaration\n  A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n  be recorded alongside parent scopes and thrown when\n  `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n  A scope that represents unambiguous function parameters `function(x)`. Errors\n  recorded in this scope will be thrown immediately. No errors will be recorded in\n  this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M|V8 Expression Scope design docs}\n */\n\nconst kExpression = 0,\n  kMaybeArrowParameterDeclaration = 1,\n  kMaybeAsyncArrowParameterDeclaration = 2,\n  kParameterDeclaration = 3;\n\ntype ExpressionScopeType = 0 | 1 | 2 | 3;\n\nclass ExpressionScope {\n  type: ExpressionScopeType;\n\n  constructor(type: ExpressionScopeType = kExpression) {\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n    return (\n      this.type === kMaybeAsyncArrowParameterDeclaration ||\n      this.type === kMaybeArrowParameterDeclaration\n    );\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === kParameterDeclaration;\n  }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n  | typeof Errors.AwaitExpressionFormalParameter\n  | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n  | ArrowHeadParsingParameterInitializerError\n  | typeof Errors.InvalidParenthesizedAssignment\n  | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  declarationErrors: Map<number, [ParseErrorConstructor<{}>, Position]> =\n    new Map();\n  constructor(type: 1 | 2) {\n    super(type);\n  }\n  recordDeclarationError(\n    ParsingErrorClass: ParseErrorConstructor<{}>,\n    {\n      at,\n    }: {\n      at: Position;\n    },\n  ) {\n    const index = at.index;\n\n    this.declarationErrors.set(index, [ParsingErrorClass, at]);\n  }\n  clearDeclarationError(index: number) {\n    this.declarationErrors.delete(index);\n  }\n  iterateErrors(\n    iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n  ) {\n    this.declarationErrors.forEach(iterator);\n  }\n}\n\nexport default class ExpressionScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n  enter(scope: ExpressionScope) {\n    this.stack.push(scope);\n  }\n\n  exit() {\n    this.stack.pop();\n  }\n\n  /**\n   * Record likely parameter initializer errors\n   *\n   * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n   * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n   * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n   */\n  recordParameterInitializerError(\n    toParseError: ArrowHeadParsingParameterInitializerError,\n    {\n      at: node,\n    }: {\n      at: Node;\n    },\n  ): void {\n    const origin = { at: node.loc.start };\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        scope.recordDeclarationError(toParseError, origin);\n      } else {\n        /*:: invariant(scope.type == kExpression) */\n        // Type-Expression is the boundary where initializer error can populate to\n        return;\n      }\n      scope = stack[--i];\n    }\n    this.parser.raise(toParseError, origin);\n  }\n\n  /**\n   * Record errors that must be thrown if the current pattern ends up being an arrow\n   * function parameter. This is used to record parenthesized identifiers, and to record\n   * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n   *\n   * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\n   * can be transformed to an assignable later, but not vice versa:\n   * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n   * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n   * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n   * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n   * and MaybeAsyncArrowParameterDeclaration\n   *\n   * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n   * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n   * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n   * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n   * expression and can not be cast to pattern\n   */\n  recordArrowParameterBindingError(\n    error: ParseErrorConstructor<{}>,\n    {\n      at: node,\n    }: {\n      at: Node;\n    },\n  ): void {\n    const { stack } = this;\n    const scope: ExpressionScope = stack[stack.length - 1];\n    const origin = { at: node.loc.start };\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.parser.raise(error, origin);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(error, origin);\n    } else {\n      return;\n    }\n  }\n\n  /**\n   * Record likely async arrow parameter errors\n   *\n   * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n   * scope until an Expression scope is seen.\n   */\n  recordAsyncArrowParametersError({ at }: { at: Position }): void {\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (scope.type === kMaybeAsyncArrowParameterDeclaration) {\n        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, { at });\n      }\n      scope = stack[--i];\n    }\n  }\n\n  validateAsPattern(): void {\n    const { stack } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    currentScope.iterateErrors(([toParseError, loc]) => {\n      this.parser.raise(toParseError, { at: loc });\n      // iterate from parent scope\n      let i = stack.length - 2;\n      let scope = stack[i];\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(loc.index);\n        scope = stack[--i];\n      }\n    });\n  }\n}\n\nexport function newParameterDeclarationScope() {\n  return new ExpressionScope(kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n  return new ArrowHeadParsingScope(kMaybeArrowParameterDeclaration);\n}\n\nexport function newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(kMaybeAsyncArrowParameterDeclaration);\n}\n\nexport function newExpressionScope() {\n  return new ExpressionScope();\n}\n","export const // Initial Parameter flags\n  PARAM = 0b0000,\n  // track [Yield] production parameter\n  PARAM_YIELD = 0b0001,\n  // track [Await] production parameter\n  PARAM_AWAIT = 0b0010,\n  // track [Return] production parameter\n  PARAM_RETURN = 0b0100,\n  PARAM_IN = 0b1000; // track [In] production parameter\n\n// ProductionParameterHandler is a stack fashioned production parameter tracker\n// https://tc39.es/ecma262/#sec-grammar-notation\n// The tracked parameters are defined above.\n//\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\n// we must enter a new tracking stack. For example when parsing\n//\n// AsyncFunctionDeclaration [Yield, Await]:\n//   async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\n//     ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\n//\n// we must follow such process:\n//\n// 1. parse async keyword\n// 2. parse function keyword\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\n// 4. enter new stack with (PARAM_AWAIT)\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\n// 6. parse function body\n// 7. exit current stack\n\nexport type ParamKind = number;\n\n// todo(flow->ts) - check if more granular type can be used,\n//  type below is not good because things like PARAM_AWAIT|PARAM_YIELD are not included\n// export type ParamKind =\n//   | typeof PARAM\n//   | typeof PARAM_AWAIT\n//   | typeof PARAM_IN\n//   | typeof PARAM_RETURN\n//   | typeof PARAM_YIELD;\n\nexport default class ProductionParameterHandler {\n  stacks: Array<number> = [];\n  enter(flags: number) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags(): number {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait(): boolean {\n    return (this.currentFlags() & PARAM_AWAIT) > 0;\n  }\n\n  get hasYield(): boolean {\n    return (this.currentFlags() & PARAM_YIELD) > 0;\n  }\n\n  get hasReturn(): boolean {\n    return (this.currentFlags() & PARAM_RETURN) > 0;\n  }\n\n  get hasIn(): boolean {\n    return (this.currentFlags() & PARAM_IN) > 0;\n  }\n}\n\nexport function functionFlags(\n  isAsync: boolean,\n  isGenerator: boolean,\n): ParamKind {\n  return (isAsync ? PARAM_AWAIT : 0) | (isGenerator ? PARAM_YIELD : 0);\n}\n","import { type Position } from \"../util/location\";\nimport {\n  tokenIsLiteralPropertyName,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types\";\nimport Tokenizer from \"../tokenizer\";\nimport type State from \"../tokenizer/state\";\nimport type { EstreePropertyDefinition, Node, ObjectProperty } from \"../types\";\nimport { lineBreak, skipWhiteSpaceToLineBreak } from \"../util/whitespace\";\nimport { isIdentifierChar } from \"../util/identifier\";\nimport ClassScopeHandler from \"../util/class-scope\";\nimport ExpressionScopeHandler from \"../util/expression-scope\";\nimport { SCOPE_PROGRAM } from \"../util/scopeflags\";\nimport ProductionParameterHandler, {\n  PARAM_AWAIT,\n  PARAM,\n} from \"../util/production-parameter\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error\";\nimport type Parser from \".\";\n\nimport type ScopeHandler from \"../util/scope\";\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n  node: Node;\n  error: Error;\n  thrown: Thrown;\n  aborted: Aborted;\n  failState: FailState;\n};\n\n// ## Parser utilities\n\nexport default abstract class UtilParser extends Tokenizer {\n  // Forward-declaration: defined in parser/index.js\n  abstract getScopeHandler(): { new (...args: any): ScopeHandler };\n\n  addExtra(\n    node: Partial<Node>,\n    key: string,\n    value: any,\n    enumerable: boolean = true,\n  ): void {\n    if (!node) return;\n\n    const extra = (node.extra = node.extra || {});\n    if (enumerable) {\n      extra[key] = value;\n    } else {\n      Object.defineProperty(extra, key, { enumerable, value });\n    }\n  }\n\n  // Tests whether parsed token is a contextual keyword.\n\n  isContextual(token: TokenType): boolean {\n    return this.state.type === token && !this.state.containsEsc;\n  }\n\n  isUnparsedContextual(nameStart: number, name: string): boolean {\n    const nameEnd = nameStart + name.length;\n    if (this.input.slice(nameStart, nameEnd) === name) {\n      const nextCh = this.input.charCodeAt(nameEnd);\n      return !(\n        isIdentifierChar(nextCh) ||\n        // check if `nextCh is between 0xd800 - 0xdbff,\n        // if `nextCh` is NaN, `NaN & 0xfc00` is 0, the function\n        // returns true\n        (nextCh & 0xfc00) === 0xd800\n      );\n    }\n    return false;\n  }\n\n  isLookaheadContextual(name: string): boolean {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  // Consumes contextual keyword if possible.\n\n  eatContextual(token: TokenType): boolean {\n    if (this.isContextual(token)) {\n      this.next();\n      return true;\n    }\n    return false;\n  }\n\n  // Asserts that following token is given contextual keyword.\n\n  expectContextual(\n    token: TokenType,\n    toParseError?: ParseErrorConstructor<any>,\n  ): void {\n    if (!this.eatContextual(token)) {\n      if (toParseError != null) {\n        throw this.raise(toParseError, { at: this.state.startLoc });\n      }\n      throw this.unexpected(null, token);\n    }\n  }\n\n  // Test whether a semicolon can be inserted at the current position.\n\n  canInsertSemicolon(): boolean {\n    return (\n      this.match(tt.eof) ||\n      this.match(tt.braceR) ||\n      this.hasPrecedingLineBreak()\n    );\n  }\n\n  hasPrecedingLineBreak(): boolean {\n    return lineBreak.test(\n      this.input.slice(this.state.lastTokEndLoc.index, this.state.start),\n    );\n  }\n\n  hasFollowingLineBreak(): boolean {\n    skipWhiteSpaceToLineBreak.lastIndex = this.state.end;\n    return skipWhiteSpaceToLineBreak.test(this.input);\n  }\n\n  isLineTerminator(): boolean {\n    return this.eat(tt.semi) || this.canInsertSemicolon();\n  }\n\n  // Consume a semicolon, or, failing that, see if we are allowed to\n  // pretend that there is a semicolon at this position.\n\n  semicolon(allowAsi: boolean = true): void {\n    if (allowAsi ? this.isLineTerminator() : this.eat(tt.semi)) return;\n    this.raise(Errors.MissingSemicolon, { at: this.state.lastTokEndLoc });\n  }\n\n  // Expect a token of a given type. If found, consume it, otherwise,\n  // raise an unexpected token error at given pos.\n\n  expect(type: TokenType, loc?: Position | null): void {\n    this.eat(type) || this.unexpected(loc, type);\n  }\n\n  // tryParse will clone parser state.\n  // It is expensive and should be used with cautions\n  tryParse<T extends Node | ReadonlyArray<Node>>(\n    fn: (abort: (node?: T) => never) => T,\n    oldState: State = this.state.clone(),\n  ):\n    | TryParse<T, null, false, false, null>\n    | TryParse<T | null, ParseError<any>, boolean, false, State>\n    | TryParse<T | null, null, false, true, State> {\n    const abortSignal: {\n      node: T | null;\n    } = { node: null };\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        throw abortSignal;\n      });\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        // tokensLength should be preserved during error recovery mode\n        // since the parser does not halt and will instead parse the\n        // remaining tokens\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState,\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null,\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n      if (error instanceof SyntaxError) {\n        // @ts-expect-error casting general syntax error to parse error\n        return { node: null, error, thrown: true, aborted: false, failState };\n      }\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState,\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(\n    refExpressionErrors: ExpressionErrors | undefined | null,\n    andThrow: boolean,\n  ) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssignLoc,\n      doubleProtoLoc,\n      privateKeyLoc,\n      optionalParametersLoc,\n    } = refExpressionErrors;\n\n    const hasErrors =\n      !!shorthandAssignLoc ||\n      !!doubleProtoLoc ||\n      !!optionalParametersLoc ||\n      !!privateKeyLoc;\n\n    if (!andThrow) {\n      return hasErrors;\n    }\n\n    if (shorthandAssignLoc != null) {\n      this.raise(Errors.InvalidCoverInitializedName, {\n        at: shorthandAssignLoc,\n      });\n    }\n\n    if (doubleProtoLoc != null) {\n      this.raise(Errors.DuplicateProto, { at: doubleProtoLoc });\n    }\n\n    if (privateKeyLoc != null) {\n      this.raise(Errors.UnexpectedPrivateField, { at: privateKeyLoc });\n    }\n\n    if (optionalParametersLoc != null) {\n      this.unexpected(optionalParametersLoc);\n    }\n  }\n\n  /**\n   * Test if current token is a literal property name\n   * https://tc39.es/ecma262/#prod-LiteralPropertyName\n   * LiteralPropertyName:\n   *   IdentifierName\n   *   StringLiteral\n   *   NumericLiteral\n   *   BigIntLiteral\n   */\n  isLiteralPropertyName(): boolean {\n    return tokenIsLiteralPropertyName(this.state.type);\n  }\n\n  /**\n   * Test if given node is a PrivateName\n   * will be overridden in ESTree plugin\n   */\n  isPrivateName(node: Node): boolean {\n    return node.type === \"PrivateName\";\n  }\n\n  /**\n   * Return the string value of a given private name\n   * WITHOUT `#`\n   * @see {@link https://tc39.es/ecma262/#sec-static-semantics-stringvalue}\n   */\n  getPrivateNameSV(node: Node): string {\n    return node.id.name;\n  }\n\n  /**\n   * Return whether the given node is a member/optional chain that\n   * contains a private name as its property\n   * It is overridden in ESTree plugin\n   */\n  hasPropertyAsPrivateName(node: Node): boolean {\n    return (\n      (node.type === \"MemberExpression\" ||\n        node.type === \"OptionalMemberExpression\") &&\n      this.isPrivateName(node.property)\n    );\n  }\n\n  isOptionalChain(node: Node): boolean {\n    return (\n      node.type === \"OptionalMemberExpression\" ||\n      node.type === \"OptionalCallExpression\"\n    );\n  }\n\n  isObjectProperty(\n    node: Node,\n  ): node is ObjectProperty | EstreePropertyDefinition {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node: Node): boolean {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(\n    this: Parser,\n    inModule: boolean = this.options.sourceType === \"module\",\n  ): () => void {\n    // Initialize state\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n\n    // initialize scopes\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this, inModule);\n\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this);\n\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this);\n\n    return () => {\n      // Revert state\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n\n      // Revert scopes\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n\n  enterInitialScopes() {\n    let paramFlags = PARAM;\n    if (this.inModule) {\n      paramFlags |= PARAM_AWAIT;\n    }\n    this.scope.enter(SCOPE_PROGRAM);\n    this.prodParam.enter(paramFlags);\n  }\n\n  checkDestructuringPrivate(refExpressionErrors: ExpressionErrors) {\n    const { privateKeyLoc } = refExpressionErrors;\n    if (privateKeyLoc !== null) {\n      this.expectPlugin(\"destructuringPrivate\", privateKeyLoc);\n    }\n  }\n}\n\n/**\n * The ExpressionErrors is a context struct used to track ambiguous patterns\n * When we are sure the parsed pattern is a RHS, which means it is not a pattern,\n * we will throw on this position on invalid assign syntax, otherwise it will be reset to -1\n *\n * Types of ExpressionErrors:\n *\n * - **shorthandAssignLoc**: track initializer `=` position\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\n * - **privateKey**: track private key `#p` position\n * - **optionalParametersLoc**: track the optional parameter (`?`).\n * It's only used by typescript and flow plugins\n */\nexport class ExpressionErrors {\n  shorthandAssignLoc: Position | undefined | null = null;\n  doubleProtoLoc: Position | undefined | null = null;\n  privateKeyLoc: Position | undefined | null = null;\n  optionalParametersLoc: Position | undefined | null = null;\n}\n","import type Parser from \"./index\";\nimport UtilParser from \"./util\";\nimport { SourceLocation, type Position } from \"../util/location\";\nimport type { Comment, Node as NodeType, NodeBase } from \"../types\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n  constructor(parser: Parser, pos: number, loc: Position) {\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser?.options.ranges) this.range = [pos, 0];\n    if (parser?.filename) this.loc.filename = parser.filename;\n  }\n\n  type: string = \"\";\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n  declare range: [number, number];\n  declare leadingComments: Array<Comment>;\n  declare trailingComments: Array<Comment>;\n  declare innerComments: Array<Comment>;\n  declare extra: {\n    [key: string]: any;\n  };\n}\nconst NodePrototype = Node.prototype;\n\nif (!process.env.BABEL_8_BREAKING) {\n  // @ts-expect-error __clone is not defined in Node prototype\n  NodePrototype.__clone = function (): Node {\n    const newNode = new Node(undefined, this.start, this.loc.start);\n    const keys = Object.keys(this) as (keyof Node)[];\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // Do not clone comments that are already attached to the node\n      if (\n        key !== \"leadingComments\" &&\n        key !== \"trailingComments\" &&\n        key !== \"innerComments\"\n      ) {\n        // @ts-expect-error cloning this to newNode\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  };\n}\n\nfunction clonePlaceholder(node: any): any {\n  return cloneIdentifier(node);\n}\n\nexport function cloneIdentifier(node: any): any {\n  // We don't need to clone `typeAnnotations` and `optional`: because\n  // cloneIdentifier is only used in object shorthand and named import/export.\n  // Neither of them allow type annotations after the identifier or optional identifier\n  const { type, start, end, loc, range, extra, name } = node;\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.name = name;\n  if (type === \"Placeholder\") {\n    cloned.expectedNode = node.expectedNode;\n  }\n  return cloned;\n}\n\nexport function cloneStringLiteral(node: any): any {\n  const { type, start, end, loc, range, extra } = node;\n  if (type === \"Placeholder\") {\n    return clonePlaceholder(node);\n  }\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  if (node.raw !== undefined) {\n    // estree set node.raw instead of node.extra\n    cloned.raw = node.raw;\n  } else {\n    cloned.extra = extra;\n  }\n  cloned.value = node.value;\n  return cloned;\n}\n\nexport type Undone<T extends NodeType> = Omit<T, \"type\">;\n\nexport abstract class NodeUtils extends UtilParser {\n  startNode<T extends NodeType>(): Undone<T> {\n    // @ts-expect-error cast Node as Undone<T>\n    return new Node(this, this.state.start, this.state.startLoc);\n  }\n\n  startNodeAt<T extends NodeType>(loc: Position): Undone<T> {\n    // @ts-expect-error cast Node as Undone<T>\n    return new Node(this, loc.index, loc);\n  }\n\n  /** Start a new node with a previous node's location. */\n  startNodeAtNode<T extends NodeType>(type: Undone<NodeType>): Undone<T> {\n    return this.startNodeAt(type.loc.start);\n  }\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n    return this.finishNodeAt(node, type, this.state.lastTokEndLoc);\n  }\n\n  // Finish node at given position\n\n  finishNodeAt<T extends NodeType>(\n    node: Omit<T, \"type\">,\n    type: T[\"type\"],\n    endLoc: Position,\n  ): T {\n    if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n      throw new Error(\n        \"Do not call finishNode*() twice on the same node.\" +\n          \" Instead use resetEndLocation() or change type directly.\",\n      );\n    }\n    // @ts-expect-error migrate to Babel types AST typings\n    node.type = type;\n    // @ts-expect-error migrate to Babel types AST typings\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\n    if (this.options.attachComment) this.processComment(node as T);\n    return node as T;\n  }\n\n  resetStartLocation(node: NodeBase, startLoc: Position): void {\n    node.start = startLoc.index;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = startLoc.index;\n  }\n\n  resetEndLocation(\n    node: NodeBase,\n    endLoc: Position = this.state.lastTokEndLoc,\n  ): void {\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\n  }\n\n  /**\n   * Reset the start location of node to the start location of locationNode\n   */\n  resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n    this.resetStartLocation(node, locationNode.loc.start);\n  }\n}\n","/*:: declare var invariant; */\n\nimport type Parser from \"../../parser\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeyword,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLiteralPropertyName,\n  tokenLabelName,\n  tt,\n  type TokenType,\n  tokenIsFlowInterfaceOrTypeOrOpaque,\n} from \"../../tokenizer/types\";\nimport type * as N from \"../../types\";\nimport type { Position } from \"../../util/location\";\nimport { types as tc } from \"../../tokenizer/context\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../../util/identifier\";\nimport FlowScopeHandler from \"./scope\";\nimport {\n  BIND_LEXICAL,\n  BIND_VAR,\n  BIND_FUNCTION,\n  BIND_FLOW_DECLARE_FN,\n  SCOPE_ARROW,\n  SCOPE_FUNCTION,\n  SCOPE_OTHER,\n  type BindingTypes,\n} from \"../../util/scopeflags\";\nimport type { ExpressionErrors } from \"../../parser/util\";\nimport type { ParseStatementFlag } from \"../../parser/statement\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node\";\n\nconst reservedTypes = new Set([\n  \"_\",\n  \"any\",\n  \"bool\",\n  \"boolean\",\n  \"empty\",\n  \"extends\",\n  \"false\",\n  \"interface\",\n  \"mixed\",\n  \"null\",\n  \"number\",\n  \"static\",\n  \"string\",\n  \"true\",\n  \"typeof\",\n  \"void\",\n]);\n\n/* eslint sort-keys: \"error\" */\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\nconst FlowErrors = ParseErrorEnum`flow`({\n  AmbiguousConditionalArrow:\n    \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind:\n    \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n  // TODO: When we get proper string enums in typescript make this ReservedType.\n  // Not really worth it to do the whole $Values dance with reservedTypes set.\n  AssignReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Cannot overwrite reserved type ${reservedType}.`,\n  DeclareClassElement:\n    \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer:\n    \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports:\n    \"Duplicate `declare module.exports` statement.\",\n  EnumBooleanMemberNotInitialized: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n  EnumDuplicateMemberName: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used before in enum \\`${enumName}\\`.`,\n  EnumInconsistentMemberValues: ({ enumName }: { enumName: string }) =>\n    `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n  EnumInvalidExplicitType: ({\n    invalidEnumType,\n    enumName,\n  }: {\n    invalidEnumType: string;\n    enumName: string;\n  }) =>\n    `Enum type \\`${invalidEnumType}\\` is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidExplicitTypeUnknownSupplied: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `Supplied enum type is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n\n  // TODO: When moving to typescript, we should either have each of the\n  // following errors only accept the specific strings they want:\n  //\n  // ...PrimaryType: explicitType: \"string\" | \"number\" | \"boolean\"\n  // ...SymbolType: explicitType: \"symbol\"\n  // ...UnknownType: explicitType: null\n  //\n  // Or, alternatively, merge these three errors together into one\n  // `EnumInvalidMemberInitializer` error that can accept `EnumExplicitType`\n  // without alteration, and then just have its message change based on the\n  // explicitType.\n  EnumInvalidMemberInitializerPrimaryType: ({\n    enumName,\n    memberName,\n    explicitType,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of \\`${memberName}\\` needs to be a ${explicitType} literal.`,\n  EnumInvalidMemberInitializerSymbolType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberInitializerUnknownType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `The enum member initializer for \\`${memberName}\\` needs to be a literal (either a boolean, number, or string) in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberName: ({\n    enumName,\n    memberName,\n    suggestion,\n  }: {\n    enumName: string;\n    memberName: string;\n    suggestion: string;\n  }) =>\n    `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n  EnumNumberMemberNotInitialized: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n  }) =>\n    `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n  EnumStringMemberInconsistentlyInitailized: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `String enum members need to consistently either all use initializers, or use no initializers, in enum \\`${enumName}\\`.`,\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` or `typeof` keyword.\",\n  ImportTypeShorthandOnlyInPureImport:\n    \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n  InexactInsideExact:\n    \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n  InexactInsideNonObject:\n    \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n  InvalidNonTypeImportInDeclareModule:\n    \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n  MissingTypeParamDefault:\n    \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule:\n    \"`declare module` cannot be used inside another `declare module`.\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n  PatternIsOptional: {\n    message:\n      \"A binding pattern parameter cannot be optional in an implementation signature.\",\n    // For consistency in TypeScript and Flow error codes\n    ...(!process.env.BABEL_8_BREAKING\n      ? { reasonCode: \"OptionalBindingPattern\" }\n      : {}),\n  },\n  SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n  SpreadVariance: \"Spread properties cannot have variance.\",\n  ThisParamAnnotationRequired:\n    \"A type annotation is required for the `this` parameter.\",\n  ThisParamBannedInConstructor:\n    \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n  ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n  ThisParamMustBeFirst:\n    \"The `this` parameter must be the first function parameter.\",\n  ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n  TypeBeforeInitializer:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeCastInPattern:\n    \"The type cast expression is expected to be wrapped with parenthesis.\",\n  UnexpectedExplicitInexactInObject:\n    \"Explicit inexact syntax must appear at the end of an inexact object.\",\n  UnexpectedReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Unexpected reserved type ${reservedType}.`,\n  UnexpectedReservedUnderscore:\n    \"`_` is only allowed as a type argument to call or new.\",\n  UnexpectedSpaceBetweenModuloChecks:\n    \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType:\n    \"Spread operator cannot appear in class or interface definitions.\",\n  UnexpectedSubtractionOperand:\n    'Unexpected token, expected \"number\" or \"bigint\".',\n  UnexpectedTokenAfterTypeParameter:\n    \"Expected an arrow function after this type parameter declaration.\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction:\n    \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n  UnsupportedDeclareExportKind: ({\n    unsupportedExportKind,\n    suggestion,\n  }: {\n    unsupportedExportKind: string;\n    suggestion: string;\n  }) =>\n    `\\`declare export ${unsupportedExportKind}\\` is not supported. Use \\`${suggestion}\\` instead.`,\n  UnsupportedStatementInDeclareModule:\n    \"Only declares and type imports are allowed inside declare module.\",\n  UnterminatedFlowComment: \"Unterminated flow-comment.\",\n});\n/* eslint-disable sort-keys */\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n  return (\n    bodyElement.type === \"DeclareExportAllDeclaration\" ||\n    (bodyElement.type === \"DeclareExportDeclaration\" &&\n      (!bodyElement.declaration ||\n        (bodyElement.declaration.type !== \"TypeAlias\" &&\n          bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n  );\n}\n\nfunction hasTypeImportKind(node: N.Node): boolean {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nfunction isMaybeDefaultImport(type: TokenType): boolean {\n  return tokenIsKeywordOrIdentifier(type) && type !== tt._from;\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition<T>(\n  list: T[],\n  test: (c: T, b: number, a: T[]) => boolean | undefined | null,\n): [T[], T[]] {\n  const list1: T[] = [];\n  const list2: T[] = [];\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\n\ntype EnumContext = {\n  enumName: string;\n  explicitType: EnumExplicitType;\n  memberName: string;\n};\n\ntype EnumMemberInit =\n  | {\n      type: \"number\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"string\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"boolean\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"invalid\";\n      loc: Position;\n    }\n  | {\n      type: \"none\";\n      loc: Position;\n    };\n\nexport default (superClass: typeof Parser) =>\n  class FlowParserMixin extends superClass implements Parser {\n    // The value of the @flow/@noflow pragma. Initially undefined, transitions\n    // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n    // past the initial comment.\n    flowPragma: void | null | \"flow\" | \"noflow\" = undefined;\n\n    getScopeHandler(): {\n      new (...args: any): FlowScopeHandler;\n    } {\n      return FlowScopeHandler;\n    }\n\n    shouldParseTypes(): boolean {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n    }\n\n    shouldParseEnums(): boolean {\n      return !!this.getPluginOption(\"flow\", \"enums\");\n    }\n\n    finishToken(type: TokenType, val: any): void {\n      if (\n        type !== tt.string &&\n        type !== tt.semi &&\n        type !== tt.interpreterDirective\n      ) {\n        if (this.flowPragma === undefined) {\n          this.flowPragma = null;\n        }\n      }\n      return super.finishToken(type, val);\n    }\n\n    addComment(comment: N.Comment): void {\n      if (this.flowPragma === undefined) {\n        // Try to parse a flow pragma.\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n        if (!matches) {\n          // do nothing\n        } else if (matches[1] === \"flow\") {\n          this.flowPragma = \"flow\";\n        } else if (matches[1] === \"noflow\") {\n          this.flowPragma = \"noflow\";\n        } else {\n          throw new Error(\"Unexpected flow pragma\");\n        }\n      }\n      return super.addComment(comment);\n    }\n\n    flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tok || tt.colon);\n\n      const type = this.flowParseType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParsePredicate(): N.FlowPredicate {\n      const node = this.startNode();\n      const moduloLoc = this.state.startLoc;\n      this.next(); // eat `%`\n      this.expectContextual(tt._checks);\n      // Force '%' and 'checks' to be adjacent\n      if (this.state.lastTokStart > moduloLoc.index + 1) {\n        this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, {\n          at: moduloLoc,\n        });\n      }\n      if (this.eat(tt.parenL)) {\n        node.value = super.parseExpression();\n        this.expect(tt.parenR);\n        return this.finishNode(node, \"DeclaredPredicate\");\n      } else {\n        return this.finishNode(node, \"InferredPredicate\");\n      }\n    }\n\n    flowParseTypeAndPredicateInitialiser(): [\n      N.FlowType | undefined | null,\n      N.FlowPredicate | undefined | null,\n    ] {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tt.colon);\n      let type = null;\n      let predicate = null;\n      if (this.match(tt.modulo)) {\n        this.state.inType = oldInType;\n        predicate = this.flowParsePredicate();\n      } else {\n        type = this.flowParseType();\n        this.state.inType = oldInType;\n        if (this.match(tt.modulo)) {\n          predicate = this.flowParsePredicate();\n        }\n      }\n      return [type, predicate];\n    }\n\n    flowParseDeclareClass(\n      node: Undone<N.FlowDeclareClass>,\n    ): N.FlowDeclareClass {\n      this.next();\n      this.flowParseInterfaceish(node, /*isClass*/ true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(\n      node: Undone<N.FlowDeclareFunction>,\n    ): N.FlowDeclareFunction {\n      this.next();\n\n      const id = (node.id = this.parseIdentifier());\n\n      const typeNode = this.startNode();\n      const typeContainer = this.startNode<N.TypeAnnotation>();\n\n      if (this.match(tt.lt)) {\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        typeNode.typeParameters = null;\n      }\n\n      this.expect(tt.parenL);\n      const tmp = this.flowParseFunctionTypeParams();\n      typeNode.params = tmp.params;\n      typeNode.rest = tmp.rest;\n      typeNode.this = tmp._this;\n      this.expect(tt.parenR);\n\n      [typeNode.returnType, node.predicate] =\n        this.flowParseTypeAndPredicateInitialiser();\n\n      typeContainer.typeAnnotation = this.finishNode(\n        typeNode,\n        \"FunctionTypeAnnotation\",\n      );\n\n      id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n      this.resetEndLocation(id);\n      this.semicolon();\n\n      this.scope.declareName(\n        node.id.name,\n        BIND_FLOW_DECLARE_FN,\n        node.id.loc.start,\n      );\n\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(\n      node: Undone<N.FlowDeclare>,\n      insideModule?: boolean,\n    ): N.FlowDeclare {\n      if (this.match(tt._class)) {\n        return this.flowParseDeclareClass(node);\n      } else if (this.match(tt._function)) {\n        return this.flowParseDeclareFunction(node);\n      } else if (this.match(tt._var)) {\n        return this.flowParseDeclareVariable(node);\n      } else if (this.eatContextual(tt._module)) {\n        if (this.match(tt.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(FlowErrors.NestedDeclareModule, {\n              at: this.state.lastTokStartLoc,\n            });\n          }\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(tt._type)) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(tt._opaque)) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(tt._interface)) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(tt._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      } else {\n        throw this.unexpected();\n      }\n    }\n\n    flowParseDeclareVariable(\n      node: Undone<N.FlowDeclareVariable>,\n    ): N.FlowDeclareVariable {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(\n        /*allowPrimitiveOverride*/ true,\n      );\n      this.scope.declareName(node.id.name, BIND_VAR, node.id.loc.start);\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(\n      node: Undone<N.FlowDeclareModule>,\n    ): N.FlowDeclareModule {\n      this.scope.enter(SCOPE_OTHER);\n\n      if (this.match(tt.string)) {\n        node.id = super.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = (node.body = this.startNode());\n      // @ts-expect-error refine typings\n      const body = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        let bodyNode = this.startNode<N.ImportDeclaration>();\n\n        if (this.match(tt._import)) {\n          this.next();\n          if (!this.isContextual(tt._type) && !this.match(tt._typeof)) {\n            this.raise(FlowErrors.InvalidNonTypeImportInDeclareModule, {\n              at: this.state.lastTokStartLoc,\n            });\n          }\n          super.parseImport(bodyNode);\n        } else {\n          this.expectContextual(\n            tt._declare,\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n          // @ts-expect-error refine typings\n          bodyNode = this.flowParseDeclare(bodyNode, true);\n        }\n\n        body.push(bodyNode);\n      }\n\n      this.scope.exit();\n\n      this.expect(tt.braceR);\n\n      this.finishNode(bodyNode, \"BlockStatement\");\n\n      let kind: \"CommonJS\" | \"ES\" | null = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, {\n              at: bodyElement,\n            });\n          }\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(FlowErrors.DuplicateDeclareModuleExports, {\n              at: bodyElement,\n            });\n          }\n          if (kind === \"ES\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, {\n              at: bodyElement,\n            });\n          }\n          kind = \"CommonJS\";\n          hasModuleExport = true;\n        }\n      });\n\n      node.kind = kind || \"CommonJS\";\n      return this.finishNode(node, \"DeclareModule\");\n    }\n\n    flowParseDeclareExportDeclaration(\n      node: Undone<N.FlowDeclareExportDeclaration>,\n      insideModule?: boolean | null,\n    ): N.FlowDeclareExportDeclaration {\n      this.expect(tt._export);\n\n      if (this.eat(tt._default)) {\n        if (this.match(tt._function) || this.match(tt._class)) {\n          // declare export default class ...\n          // declare export default function ...\n          node.declaration = this.flowParseDeclare(this.startNode());\n        } else {\n          // declare export default [type];\n          node.declaration = this.flowParseType();\n          this.semicolon();\n        }\n        node.default = true;\n\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else {\n        if (\n          this.match(tt._const) ||\n          this.isLet() ||\n          ((this.isContextual(tt._type) || this.isContextual(tt._interface)) &&\n            !insideModule)\n        ) {\n          const label = this.state.value as\n            | \"const\"\n            | \"let\"\n            | \"type\"\n            | \"interface\";\n          throw this.raise(FlowErrors.UnsupportedDeclareExportKind, {\n            at: this.state.startLoc,\n            unsupportedExportKind: label,\n            suggestion: exportSuggestions[label],\n          });\n        }\n\n        if (\n          this.match(tt._var) || // declare export var ...\n          this.match(tt._function) || // declare export function ...\n          this.match(tt._class) || // declare export class ...\n          this.isContextual(tt._opaque) // declare export opaque ..\n        ) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n          node.default = false;\n\n          return this.finishNode(node, \"DeclareExportDeclaration\");\n        } else if (\n          this.match(tt.star) || // declare export * from ''\n          this.match(tt.braceL) || // declare export {} ...\n          this.isContextual(tt._interface) || // declare export interface ...\n          this.isContextual(tt._type) || // declare export type ...\n          this.isContextual(tt._opaque) // declare export opaque type ...\n        ) {\n          node = this.parseExport(\n            node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n            /* decorators */ null,\n          );\n          if (node.type === \"ExportNamedDeclaration\") {\n            node.type = \"ExportDeclaration\";\n            node.default = false;\n            delete node.exportKind;\n          }\n\n          node.type = \"Declare\" + node.type;\n\n          return node as N.Node;\n        }\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(\n      node: Undone<N.FlowDeclareModuleExports>,\n    ): N.FlowDeclareModuleExports {\n      this.next();\n      this.expectContextual(tt._exports);\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(\n      node: Undone<N.FlowDeclareTypeAlias>,\n    ): N.FlowDeclareTypeAlias {\n      this.next();\n      const finished = this.flowParseTypeAlias(node);\n      // Don't do finishNode as we don't want to process comments twice\n      finished.type = \"DeclareTypeAlias\";\n      return finished;\n    }\n\n    flowParseDeclareOpaqueType(\n      node: Undone<N.FlowDeclareOpaqueType>,\n    ): N.FlowDeclareOpaqueType {\n      this.next();\n      const finished = this.flowParseOpaqueType(node, true);\n      // Don't do finishNode as we don't want to process comments twice\n      finished.type = \"DeclareOpaqueType\";\n      return finished;\n    }\n\n    flowParseDeclareInterface(\n      node: Undone<N.FlowDeclareInterface>,\n    ): N.FlowDeclareInterface {\n      this.next();\n      this.flowParseInterfaceish(node);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    // Interfaces\n\n    flowParseInterfaceish(\n      node: Undone<N.FlowDeclare>,\n      isClass: boolean = false,\n    ): void {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ !isClass,\n        /* declaration */ true,\n      );\n\n      this.scope.declareName(\n        node.id.name,\n        isClass ? BIND_FUNCTION : BIND_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\n      node.implements = [];\n      node.mixins = [];\n\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (!isClass && this.eat(tt.comma));\n      }\n\n      if (this.isContextual(tt._mixins)) {\n        this.next();\n        do {\n          node.mixins.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      if (this.isContextual(tt._implements)) {\n        this.next();\n        do {\n          node.implements.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: isClass,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: isClass,\n        allowInexact: false,\n      });\n    }\n\n    flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n      const node = this.startNode();\n\n      node.id = this.flowParseQualifiedTypeIdentifier();\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node: Undone<N.FlowInterface>): N.FlowInterface {\n      this.flowParseInterfaceish(node);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word: string) {\n      if (word === \"_\") {\n        this.raise(FlowErrors.UnexpectedReservedUnderscore, {\n          at: this.state.startLoc,\n        });\n      }\n    }\n\n    checkReservedType(word: string, startLoc: Position, declaration?: boolean) {\n      if (!reservedTypes.has(word)) return;\n\n      this.raise(\n        declaration\n          ? FlowErrors.AssignReservedType\n          : FlowErrors.UnexpectedReservedType,\n        {\n          at: startLoc,\n          reservedType: word,\n        },\n      );\n    }\n\n    flowParseRestrictedIdentifier(\n      liberal?: boolean,\n      declaration?: boolean,\n    ): N.Identifier {\n      this.checkReservedType(\n        this.state.value,\n        this.state.startLoc,\n        declaration,\n      );\n      return this.parseIdentifier(liberal);\n    }\n\n    // Type aliases\n\n    flowParseTypeAlias(node: Undone<N.FlowTypeAlias>): N.FlowTypeAlias {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ false,\n        /* declaration */ true,\n      );\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.right = this.flowParseTypeInitialiser(tt.eq);\n      this.semicolon();\n\n      return this.finishNode(node, \"TypeAlias\");\n    }\n\n    flowParseOpaqueType(\n      node: Undone<N.FlowOpaqueType>,\n      declare: boolean,\n    ): N.FlowOpaqueType {\n      this.expectContextual(tt._type);\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ true,\n        /* declaration */ true,\n      );\n      this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.loc.start);\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      // Parse the supertype\n      node.supertype = null;\n      if (this.match(tt.colon)) {\n        node.supertype = this.flowParseTypeInitialiser(tt.colon);\n      }\n\n      node.impltype = null;\n      if (!declare) {\n        node.impltype = this.flowParseTypeInitialiser(tt.eq);\n      }\n      this.semicolon();\n\n      return this.finishNode(node, \"OpaqueType\");\n    }\n\n    // Type annotations\n\n    flowParseTypeParameter(requireDefault: boolean = false): N.TypeParameter {\n      const nodeStartLoc = this.state.startLoc;\n\n      const node = this.startNode<N.TypeParameter>();\n\n      const variance = this.flowParseVariance();\n\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      // @ts-expect-error migrate to Babel types\n      node.variance = variance;\n      // @ts-expect-error migrate to Babel types\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(tt.eq)) {\n        this.eat(tt.eq);\n        // @ts-expect-error migrate to Babel types\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(FlowErrors.MissingTypeParamDefault, { at: nodeStartLoc });\n        }\n      }\n\n      return this.finishNode(node, \"TypeParameter\");\n    }\n\n    flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n      const oldInType = this.state.inType;\n      const node = this.startNode<N.TypeParameterDeclaration>();\n      node.params = [];\n\n      this.state.inType = true;\n\n      // istanbul ignore else: this condition is already checked at all call sites\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      let defaultRequired = false;\n\n      do {\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n        node.params.push(typeParameter);\n\n        if (typeParameter.default) {\n          defaultRequired = true;\n        }\n\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      } while (!this.match(tt.gt));\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterDeclaration\");\n    }\n\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = false;\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseType());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseInterfaceType(): N.FlowInterfaceType {\n      const node = this.startNode<N.FlowInterfaceType>();\n      this.expectContextual(tt._interface);\n\n      node.extends = [];\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: false,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: false,\n        allowInexact: false,\n      });\n\n      return this.finishNode(node, \"InterfaceTypeAnnotation\");\n    }\n\n    flowParseObjectPropertyKey(): N.Expression {\n      return this.match(tt.num) || this.match(tt.string)\n        ? super.parseExprAtom()\n        : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(\n      node: Undone<N.FlowObjectTypeIndexer>,\n      isStatic: boolean,\n      variance?: N.FlowVariance | null,\n    ): N.FlowObjectTypeIndexer {\n      node.static = isStatic;\n\n      // Note: bracketL has already been consumed\n      if (this.lookahead().type === tt.colon) {\n        node.id = this.flowParseObjectPropertyKey();\n        node.key = this.flowParseTypeInitialiser();\n      } else {\n        node.id = null;\n        node.key = this.flowParseType();\n      }\n      this.expect(tt.bracketR);\n      node.value = this.flowParseTypeInitialiser();\n      node.variance = variance;\n\n      return this.finishNode(node, \"ObjectTypeIndexer\");\n    }\n\n    flowParseObjectTypeInternalSlot(\n      node: Undone<N.FlowObjectTypeInternalSlot>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeInternalSlot {\n      node.static = isStatic;\n      // Note: both bracketL have already been consumed\n      node.id = this.flowParseObjectPropertyKey();\n      this.expect(tt.bracketR);\n      this.expect(tt.bracketR);\n      if (this.match(tt.lt) || this.match(tt.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(\n          this.startNodeAt(node.loc.start),\n        );\n      } else {\n        node.method = false;\n        if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n        node.value = this.flowParseTypeInitialiser();\n      }\n      return this.finishNode(node, \"ObjectTypeInternalSlot\");\n    }\n\n    flowParseObjectTypeMethodish(\n      node: Undone<N.FlowFunctionTypeAnnotation>,\n    ): N.FlowFunctionTypeAnnotation {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n      node.this = null;\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      this.expect(tt.parenL);\n      if (this.match(tt._this)) {\n        node.this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        node.this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        node.params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n\n      if (this.eat(tt.ellipsis)) {\n        node.rest = this.flowParseFunctionTypeParam(false);\n      }\n      this.expect(tt.parenR);\n      node.returnType = this.flowParseTypeInitialiser();\n\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    flowParseObjectTypeCallProperty(\n      node: Undone<N.FlowObjectTypeCallProperty>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeCallProperty {\n      const valueNode = this.startNode();\n      node.static = isStatic;\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\n      return this.finishNode(node, \"ObjectTypeCallProperty\");\n    }\n\n    flowParseObjectType({\n      allowStatic,\n      allowExact,\n      allowSpread,\n      allowProto,\n      allowInexact,\n    }: {\n      allowStatic: boolean;\n      allowExact: boolean;\n      allowSpread: boolean;\n      allowProto: boolean;\n      allowInexact: boolean;\n    }): N.FlowObjectTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n\n      const nodeStart = this.startNode();\n\n      nodeStart.callProperties = [];\n      nodeStart.properties = [];\n      nodeStart.indexers = [];\n      nodeStart.internalSlots = [];\n\n      let endDelim;\n      let exact;\n      let inexact = false;\n      if (allowExact && this.match(tt.braceBarL)) {\n        this.expect(tt.braceBarL);\n        endDelim = tt.braceBarR;\n        exact = true;\n      } else {\n        this.expect(tt.braceL);\n        endDelim = tt.braceR;\n        exact = false;\n      }\n\n      nodeStart.exact = exact;\n\n      while (!this.match(endDelim)) {\n        let isStatic = false;\n        let protoStartLoc: Position | undefined | null = null;\n        let inexactStartLoc: Position | undefined | null = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(tt._proto)) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            protoStartLoc = this.state.startLoc;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(tt._static)) {\n          const lookahead = this.lookahead();\n\n          // static is a valid identifier name\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            isStatic = true;\n          }\n        }\n\n        const variance = this.flowParseVariance();\n\n        if (this.eat(tt.bracketL)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (this.eat(tt.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.loc.start);\n            }\n            nodeStart.internalSlots.push(\n              this.flowParseObjectTypeInternalSlot(node, isStatic),\n            );\n          } else {\n            nodeStart.indexers.push(\n              this.flowParseObjectTypeIndexer(node, isStatic, variance),\n            );\n          }\n        } else if (this.match(tt.parenL) || this.match(tt.lt)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n          nodeStart.callProperties.push(\n            this.flowParseObjectTypeCallProperty(node, isStatic),\n          );\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(tt._get) || this.isContextual(tt._set)) {\n            const lookahead = this.lookahead();\n            if (tokenIsLiteralPropertyName(lookahead.type)) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(\n            node,\n            isStatic,\n            protoStartLoc,\n            variance,\n            kind,\n            allowSpread,\n            allowInexact ?? !exact,\n          );\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStartLoc = this.state.lastTokStartLoc;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (\n          inexactStartLoc &&\n          !this.match(tt.braceR) &&\n          !this.match(tt.braceBarR)\n        ) {\n          this.raise(FlowErrors.UnexpectedExplicitInexactInObject, {\n            at: inexactStartLoc,\n          });\n        }\n      }\n\n      this.expect(endDelim);\n\n      /* The inexact flag should only be added on ObjectTypeAnnotations that\n       * are not the body of an interface, declare interface, or declare class.\n       * Since spreads are only allowed in object types, checking that is\n       * sufficient here.\n       */\n      if (allowSpread) {\n        nodeStart.inexact = inexact;\n      }\n\n      const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n      this.state.inType = oldInType;\n\n      return out;\n    }\n\n    flowParseObjectTypeProperty(\n      node: Undone<N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty>,\n      isStatic: boolean,\n      protoStartLoc: Position | undefined | null,\n      variance: N.FlowVariance | undefined | null,\n      kind: string,\n      allowSpread: boolean,\n      allowInexact: boolean,\n    ): N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty | null {\n      if (this.eat(tt.ellipsis)) {\n        const isInexactToken =\n          this.match(tt.comma) ||\n          this.match(tt.semi) ||\n          this.match(tt.braceR) ||\n          this.match(tt.braceBarR);\n\n        if (isInexactToken) {\n          if (!allowSpread) {\n            this.raise(FlowErrors.InexactInsideNonObject, {\n              at: this.state.lastTokStartLoc,\n            });\n          } else if (!allowInexact) {\n            this.raise(FlowErrors.InexactInsideExact, {\n              at: this.state.lastTokStartLoc,\n            });\n          }\n          if (variance) {\n            this.raise(FlowErrors.InexactVariance, { at: variance });\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(FlowErrors.UnexpectedSpreadType, {\n            at: this.state.lastTokStartLoc,\n          });\n        }\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (variance) {\n          this.raise(FlowErrors.SpreadVariance, { at: variance });\n        }\n\n        node.argument = this.flowParseType();\n        return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n      } else {\n        node.key = this.flowParseObjectPropertyKey();\n        node.static = isStatic;\n        node.proto = protoStartLoc != null;\n        node.kind = kind;\n\n        let optional = false;\n        if (this.match(tt.lt) || this.match(tt.parenL)) {\n          // This is a method property\n          node.method = true;\n\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(\n            this.startNodeAt(node.loc.start),\n          );\n          if (kind === \"get\" || kind === \"set\") {\n            this.flowCheckGetterSetterParams(node);\n          }\n          /** Declared classes/interfaces do not allow spread */\n          if (\n            !allowSpread &&\n            node.key.name === \"constructor\" &&\n            node.value.this\n          ) {\n            this.raise(FlowErrors.ThisParamBannedInConstructor, {\n              at: node.value.this,\n            });\n          }\n        } else {\n          if (kind !== \"init\") this.unexpected();\n\n          node.method = false;\n\n          if (this.eat(tt.question)) {\n            optional = true;\n          }\n          node.value = this.flowParseTypeInitialiser();\n          node.variance = variance;\n        }\n\n        node.optional = optional;\n\n        return this.finishNode(node, \"ObjectTypeProperty\");\n      }\n    }\n\n    // This is similar to checkGetterSetterParams, but as\n    // @babel/parser uses non estree properties we cannot reuse it here\n    flowCheckGetterSetterParams(\n      property: Undone<\n        N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty\n      >,\n    ): void {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const length =\n        property.value.params.length + (property.value.rest ? 1 : 0);\n\n      if (property.value.this) {\n        this.raise(\n          property.kind === \"get\"\n            ? FlowErrors.GetterMayNotHaveThisParam\n            : FlowErrors.SetterMayNotHaveThisParam,\n          { at: property.value.this },\n        );\n      }\n\n      if (length !== paramCount) {\n        this.raise(\n          property.kind === \"get\"\n            ? Errors.BadGetterArity\n            : Errors.BadSetterArity,\n          { at: property },\n        );\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(Errors.BadSetterRestParameter, { at: property });\n      }\n    }\n\n    flowObjectTypeSemicolon(): void {\n      if (\n        !this.eat(tt.semi) &&\n        !this.eat(tt.comma) &&\n        !this.match(tt.braceR) &&\n        !this.match(tt.braceBarR)\n      ) {\n        this.unexpected();\n      }\n    }\n\n    flowParseQualifiedTypeIdentifier(\n      startLoc?: Position,\n      id?: N.Identifier,\n    ): N.FlowQualifiedTypeIdentifier {\n      startLoc ??= this.state.startLoc;\n      let node: N.Identifier | N.FlowQualifiedTypeIdentifier =\n        id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(tt.dot)) {\n        const node2 = this.startNodeAt<N.FlowQualifiedTypeIdentifier>(startLoc);\n        node2.qualification = node;\n        node2.id = this.flowParseRestrictedIdentifier(true);\n        node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n      }\n\n      return node;\n    }\n\n    flowParseGenericType(\n      startLoc: Position,\n      id: N.Identifier,\n    ): N.FlowGenericTypeAnnotation {\n      const node = this.startNodeAt(startLoc);\n\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      return this.finishNode(node, \"GenericTypeAnnotation\");\n    }\n\n    flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n      const node = this.startNode();\n      this.expect(tt._typeof);\n      node.argument = this.flowParsePrimaryType();\n      return this.finishNode(node, \"TypeofTypeAnnotation\");\n    }\n\n    flowParseTupleType(): N.FlowTupleTypeAnnotation {\n      const node = this.startNode();\n      node.types = [];\n      this.expect(tt.bracketL);\n      // We allow trailing commas\n      while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n        node.types.push(this.flowParseType());\n        if (this.match(tt.bracketR)) break;\n        this.expect(tt.comma);\n      }\n      this.expect(tt.bracketR);\n      return this.finishNode(node, \"TupleTypeAnnotation\");\n    }\n\n    flowParseFunctionTypeParam(first: boolean): N.FlowFunctionTypeParam {\n      let name = null;\n      let optional = false;\n      let typeAnnotation = null;\n      const node = this.startNode<N.FlowFunctionTypeParam>();\n      const lh = this.lookahead();\n      const isThis = this.state.type === tt._this;\n\n      if (lh.type === tt.colon || lh.type === tt.question) {\n        if (isThis && !first) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, { at: node });\n        }\n        name = this.parseIdentifier(isThis);\n        if (this.eat(tt.question)) {\n          optional = true;\n          if (isThis) {\n            this.raise(FlowErrors.ThisParamMayNotBeOptional, { at: node });\n          }\n        }\n        typeAnnotation = this.flowParseTypeInitialiser();\n      } else {\n        typeAnnotation = this.flowParseType();\n      }\n      node.name = name;\n      node.optional = optional;\n      node.typeAnnotation = typeAnnotation;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    reinterpretTypeAsFunctionTypeParam(\n      type: N.FlowType,\n    ): N.FlowFunctionTypeParam {\n      const node = this.startNodeAt(type.loc.start);\n      node.name = null;\n      node.optional = false;\n      node.typeAnnotation = type;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    flowParseFunctionTypeParams(params: N.FlowFunctionTypeParam[] = []): {\n      params: N.FlowFunctionTypeParam[];\n      rest: N.FlowFunctionTypeParam | undefined | null;\n      _this: N.FlowFunctionTypeParam | undefined | null;\n    } {\n      let rest: N.FlowFunctionTypeParam | undefined | null = null;\n      let _this: N.FlowFunctionTypeParam | undefined | null = null;\n      if (this.match(tt._this)) {\n        _this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        _this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      if (this.eat(tt.ellipsis)) {\n        rest = this.flowParseFunctionTypeParam(false);\n      }\n      return { params, rest, _this };\n    }\n\n    flowIdentToTypeAnnotation(\n      startLoc: Position,\n      node: Undone<N.FlowTypeAnnotation>,\n      id: N.Identifier,\n    ): N.FlowTypeAnnotation {\n      switch (id.name) {\n        case \"any\":\n          return this.finishNode(node, \"AnyTypeAnnotation\");\n\n        case \"bool\":\n        case \"boolean\":\n          return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n        case \"mixed\":\n          return this.finishNode(node, \"MixedTypeAnnotation\");\n\n        case \"empty\":\n          return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n        case \"number\":\n          return this.finishNode(node, \"NumberTypeAnnotation\");\n\n        case \"string\":\n          return this.finishNode(node, \"StringTypeAnnotation\");\n\n        case \"symbol\":\n          return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n        default:\n          this.checkNotUnderscore(id.name);\n          return this.flowParseGenericType(startLoc, id);\n      }\n    }\n\n    // The parsing of types roughly parallels the parsing of expressions, and\n    // primary types are kind of like primary expressions...they're the\n    // primitives with which other types are constructed.\n    flowParsePrimaryType(): N.FlowTypeAnnotation {\n      const startLoc = this.state.startLoc;\n      const node = this.startNode();\n      let tmp;\n      let type;\n      let isGroupedType = false;\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n      switch (this.state.type) {\n        case tt.braceL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: false,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: true,\n          });\n\n        case tt.braceBarL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: true,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: false,\n          });\n\n        case tt.bracketL:\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseTupleType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          return type;\n\n        case tt.lt:\n          node.typeParameters = this.flowParseTypeParameterDeclaration();\n          this.expect(tt.parenL);\n          tmp = this.flowParseFunctionTypeParams();\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n        case tt.parenL:\n          this.next();\n\n          // Check to see if this is actually a grouped type\n          if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n            if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n              const token = this.lookahead().type;\n              isGroupedType = token !== tt.question && token !== tt.colon;\n            } else {\n              isGroupedType = true;\n            }\n          }\n\n          if (isGroupedType) {\n            this.state.noAnonFunctionType = false;\n            type = this.flowParseType();\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n            // A `,` or a `) =>` means this is an anonymous function type\n            if (\n              this.state.noAnonFunctionType ||\n              !(\n                this.match(tt.comma) ||\n                (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n              )\n            ) {\n              this.expect(tt.parenR);\n              return type;\n            } else {\n              // Eat a comma if there is one\n              this.eat(tt.comma);\n            }\n          }\n\n          if (type) {\n            tmp = this.flowParseFunctionTypeParams([\n              this.reinterpretTypeAsFunctionTypeParam(type),\n            ]);\n          } else {\n            tmp = this.flowParseFunctionTypeParams();\n          }\n\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          node.typeParameters = null;\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n\n        case tt.string:\n          return this.parseLiteral<N.StringLiteralTypeAnnotation>(\n            this.state.value,\n            \"StringLiteralTypeAnnotation\",\n          );\n\n        case tt._true:\n        case tt._false:\n          node.value = this.match(tt._true);\n          this.next();\n          return this.finishNode(\n            node as Undone<N.BooleanLiteralTypeAnnotation>,\n            \"BooleanLiteralTypeAnnotation\",\n          );\n\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            this.next();\n            if (this.match(tt.num)) {\n              return this.parseLiteralAtNode<N.NumberLiteralTypeAnnotation>(\n                -this.state.value,\n                \"NumberLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            if (this.match(tt.bigint)) {\n              return this.parseLiteralAtNode<N.BigIntLiteralTypeAnnotation>(\n                -this.state.value,\n                \"BigIntLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            throw this.raise(FlowErrors.UnexpectedSubtractionOperand, {\n              at: this.state.startLoc,\n            });\n          }\n\n          throw this.unexpected();\n        case tt.num:\n          return this.parseLiteral(\n            this.state.value,\n            \"NumberLiteralTypeAnnotation\",\n          );\n\n        case tt.bigint:\n          return this.parseLiteral(\n            this.state.value,\n            \"BigIntLiteralTypeAnnotation\",\n          );\n\n        case tt._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case tt._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case tt._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case tt.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        case tt._typeof:\n          return this.flowParseTypeofType();\n\n        default:\n          if (tokenIsKeyword(this.state.type)) {\n            const label = tokenLabelName(this.state.type);\n            this.next();\n            return super.createIdentifier(node as Undone<N.Identifier>, label);\n          } else if (tokenIsIdentifier(this.state.type)) {\n            if (this.isContextual(tt._interface)) {\n              return this.flowParseInterfaceType();\n            }\n\n            return this.flowIdentToTypeAnnotation(\n              startLoc,\n              node,\n              this.parseIdentifier(),\n            );\n          }\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParsePostfixType(): N.FlowTypeAnnotation {\n      const startLoc = this.state.startLoc;\n      let type = this.flowParsePrimaryType();\n      let seenOptionalIndexedAccess = false;\n      while (\n        (this.match(tt.bracketL) || this.match(tt.questionDot)) &&\n        !this.canInsertSemicolon()\n      ) {\n        const node = this.startNodeAt(startLoc);\n        const optional = this.eat(tt.questionDot);\n        seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n        this.expect(tt.bracketL);\n        if (!optional && this.match(tt.bracketR)) {\n          node.elementType = type;\n          this.next(); // eat `]`\n          type = this.finishNode(node, \"ArrayTypeAnnotation\");\n        } else {\n          node.objectType = type;\n          node.indexType = this.flowParseType();\n          this.expect(tt.bracketR);\n          if (seenOptionalIndexedAccess) {\n            node.optional = optional;\n            type = this.finishNode<N.FlowOptionalIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"OptionalIndexedAccessType\",\n            );\n          } else {\n            type = this.finishNode<N.FlowIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"IndexedAccessType\",\n            );\n          }\n        }\n      }\n      return type;\n    }\n\n    flowParsePrefixType(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      if (this.eat(tt.question)) {\n        node.typeAnnotation = this.flowParsePrefixType();\n        return this.finishNode(node, \"NullableTypeAnnotation\");\n      } else {\n        return this.flowParsePostfixType();\n      }\n    }\n\n    flowParseAnonFunctionWithoutParens(): N.FlowTypeAnnotation {\n      const param = this.flowParsePrefixType();\n      if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n        // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n        const node = this.startNodeAt(param.loc.start);\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n        node.rest = null;\n        node.this = null;\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      }\n      return param;\n    }\n\n    flowParseIntersectionType(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      this.eat(tt.bitwiseAND);\n      const type = this.flowParseAnonFunctionWithoutParens();\n      node.types = [type];\n      while (this.eat(tt.bitwiseAND)) {\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"IntersectionTypeAnnotation\");\n    }\n\n    flowParseUnionType(): N.FlowTypeAnnotation {\n      const node = this.startNode();\n      this.eat(tt.bitwiseOR);\n      const type = this.flowParseIntersectionType();\n      node.types = [type];\n      while (this.eat(tt.bitwiseOR)) {\n        node.types.push(this.flowParseIntersectionType());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"UnionTypeAnnotation\");\n    }\n\n    flowParseType(): N.FlowTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const type = this.flowParseUnionType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParseTypeOrImplicitInstantiation(): N.FlowTypeAnnotation {\n      if (this.state.type === tt.name && this.state.value === \"_\") {\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation(): N.FlowTypeAnnotation {\n      const node = this.startNode<N.FlowTypeAnnotation>();\n      node.typeAnnotation = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"TypeAnnotation\");\n    }\n\n    flowParseTypeAnnotatableIdentifier(\n      allowPrimitiveOverride?: boolean,\n    ): N.Identifier {\n      const ident = allowPrimitiveOverride\n        ? this.parseIdentifier()\n        : this.flowParseRestrictedIdentifier();\n      if (this.match(tt.colon)) {\n        // @ts-expect-error: refine typings\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(ident);\n      }\n      return ident;\n    }\n\n    typeCastToParameter(node: N.Node): N.Node {\n      node.expression.typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    flowParseVariance(): N.FlowVariance | undefined | null {\n      let variance = null;\n      if (this.match(tt.plusMin)) {\n        variance = this.startNode<N.FlowVariance>();\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n        this.next();\n        return this.finishNode(variance, \"Variance\");\n      }\n      return variance;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpressionBody?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      if (allowExpressionBody) {\n        return this.forwardNoArrowParamsConversionAt(node, () =>\n          super.parseFunctionBody(node, true, isMethod),\n        );\n      }\n\n      return super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        const typeNode = this.startNode<N.TypeAnnotation>();\n\n        [\n          typeNode.typeAnnotation,\n          // @ts-expect-error predicate may not exist\n          node.predicate,\n        ] = this.flowParseTypeAndPredicateInitialiser();\n\n        node.returnType = typeNode.typeAnnotation\n          ? this.finishNode(typeNode, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    // interfaces and enums\n    parseStatementLike(flags: ParseStatementFlag): N.Statement {\n      // strict mode handling of `interface` since it's a reserved word\n      if (this.state.strict && this.isContextual(tt._interface)) {\n        const lookahead = this.lookahead();\n        if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n          const node = this.startNode<N.FlowInterface>();\n          this.next();\n          return this.flowParseInterface(node);\n        }\n      } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      const stmt = super.parseStatementLike(flags);\n      // We will parse a flow pragma in any comment before the first statement.\n      if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n        this.flowPragma = null;\n      }\n      return stmt;\n    }\n\n    // declares, interfaces and type aliases\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.ExpressionStatement {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (\n            this.match(tt._class) ||\n            tokenIsIdentifier(this.state.type) ||\n            this.match(tt._function) ||\n            this.match(tt._var) ||\n            this.match(tt._export)\n          ) {\n            // @ts-expect-error: refine typings\n            return this.flowParseDeclare(node);\n          }\n        } else if (tokenIsIdentifier(this.state.type)) {\n          if (expr.name === \"interface\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    shouldParseExportDeclaration(): boolean {\n      const { type } = this.state;\n      if (\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n        (this.shouldParseEnums() && type === tt._enum)\n      ) {\n        return !this.state.containsEsc;\n      }\n      return super.shouldParseExportDeclaration();\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      const { type } = this.state;\n      if (\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n        (this.shouldParseEnums() && type === tt._enum)\n      ) {\n        return this.state.containsEsc;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression(): N.Expression | N.Declaration {\n      if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors);\n          return expr;\n        }\n      }\n\n      this.expect(tt.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt(startLoc);\n      let { consequent, failed } = this.tryParseConditionalConsequent();\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n      if (failed || invalid.length > 0) {\n        const noArrowAt = [...originalNoArrowAt];\n\n        if (invalid.length > 0) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt;\n\n          for (let i = 0; i < invalid.length; i++) {\n            noArrowAt.push(invalid[i].start);\n          }\n\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\n        }\n\n        if (failed && valid.length > 1) {\n          // if there are two or more possible correct ways of parsing, throw an\n          // error.\n          // e.g.   Source: a ? (b): c => (d): e => f\n          //      Result 1: a ? b : (c => ((d): e => f))\n          //      Result 2: a ? ((b): c => d) : (e => f)\n          this.raise(FlowErrors.AmbiguousConditionalArrow, {\n            at: state.startLoc,\n          });\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          noArrowAt.push(valid[0].start);\n          this.state.noArrowAt = noArrowAt;\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n        }\n      }\n\n      this.getArrowLikeExpressions(consequent, true);\n\n      this.state.noArrowAt = originalNoArrowAt;\n      this.expect(tt.colon);\n\n      node.test = expr;\n      node.consequent = consequent;\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n        this.parseMaybeAssign(undefined, undefined),\n      );\n\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    tryParseConditionalConsequent(): {\n      consequent: N.Expression;\n      failed: boolean;\n    } {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n\n      const consequent = this.parseMaybeAssignAllowIn();\n      const failed = !this.match(tt.colon);\n\n      this.state.noArrowParamsConversionAt.pop();\n\n      return { consequent, failed };\n    }\n\n    // Given an expression, walks through out its arrow functions whose body is\n    // an expression and through out conditional expressions. It returns every\n    // function which has been parsed with a return type but could have been\n    // parenthesized expressions.\n    // These functions are separated into two arrays: one containing the ones\n    // whose parameters can be converted to assignable lists, one containing the\n    // others.\n    getArrowLikeExpressions(\n      node: N.Expression,\n      disallowInvalid?: boolean,\n    ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n      const stack = [node];\n      const arrows: N.ArrowFunctionExpression[] = [];\n\n      while (stack.length !== 0) {\n        const node = stack.pop();\n        if (node.type === \"ArrowFunctionExpression\") {\n          if (node.typeParameters || !node.returnType) {\n            // This is an arrow expression without ambiguity, so check its parameters\n            // @ts-expect-error: refine typings\n            this.finishArrowValidation(node);\n          } else {\n            // @ts-expect-error: refine typings\n            arrows.push(node);\n          }\n          stack.push(node.body);\n        } else if (node.type === \"ConditionalExpression\") {\n          stack.push(node.consequent);\n          stack.push(node.alternate);\n        }\n      }\n\n      if (disallowInvalid) {\n        arrows.forEach(node => this.finishArrowValidation(node));\n        return [arrows, []];\n      }\n\n      return partition(arrows, node =>\n        node.params.every(param => this.isAssignable(param, true)),\n      );\n    }\n\n    finishArrowValidation(node: N.ArrowFunctionExpression) {\n      this.toAssignableList(\n        // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\n        // has not been converted yet.\n        node.params as any as N.Expression[],\n        node.extra?.trailingCommaLoc,\n        /* isLHS */ false,\n      );\n      // Enter scope, as checkParams defines bindings\n      this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n      // Use super's method to force the parameters to be checked\n      super.checkParams(node, false, true);\n      this.scope.exit();\n    }\n\n    forwardNoArrowParamsConversionAt<T>(\n      node: Undone<N.Node>,\n      parse: () => T,\n    ): T {\n      let result: T;\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n        this.state.noArrowParamsConversionAt.push(this.state.start);\n        result = parse();\n        this.state.noArrowParamsConversionAt.pop();\n      } else {\n        result = parse();\n      }\n\n      return result;\n    }\n\n    parseParenItem(\n      node: N.Expression,\n\n      startLoc: Position,\n    ): N.Expression {\n      node = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        node.optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt(startLoc);\n        typeCastNode.expression = node;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    assertModuleNodeAllowed(node: N.Node) {\n      if (\n        (node.type === \"ImportDeclaration\" &&\n          (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n        (node.type === \"ExportNamedDeclaration\" &&\n          node.exportKind === \"type\") ||\n        (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n      ) {\n        // Allow Flowtype imports and exports in all conditions because\n        // Flow itself does not care about 'sourceType'.\n        return;\n      }\n\n      super.assertModuleNodeAllowed(node);\n    }\n\n    parseExport(\n      node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      const decl = super.parseExport(node, decorators);\n      if (\n        decl.type === \"ExportNamedDeclaration\" ||\n        decl.type === \"ExportAllDeclaration\"\n      ) {\n        decl.exportKind = decl.exportKind || \"value\";\n      }\n      return decl;\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (this.isContextual(tt._type)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n\n        if (this.match(tt.braceL)) {\n          // export type { foo, bar };\n          node.specifiers = this.parseExportSpecifiers(\n            /* isInTypeExport */ true,\n          );\n          super.parseExportFrom(node);\n          return null;\n        } else {\n          // export type Foo = Bar;\n          // @ts-expect-error: refine typings\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(tt._opaque)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n        // export opaque type Foo = Bar;\n        // @ts-expect-error: refine typings\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(tt._interface)) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseInterface(declarationNode);\n      } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(node: N.Node): boolean {\n      if (super.eatExportStar(node)) return true;\n\n      if (this.isContextual(tt._type) && this.lookahead().type === tt.star) {\n        node.exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n      const { startLoc } = this.state;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(startLoc);\n      }\n      return hasNamespace;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n    ) {\n      super.parseClassId(node, isStatement, optionalId);\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const { startLoc } = this.state;\n      if (this.isContextual(tt._declare)) {\n        if (super.parseClassMemberFromModifier(classBody, member)) {\n          // 'declare' is a class element name\n          return;\n        }\n\n        member.declare = true;\n      }\n\n      super.parseClassMember(classBody, member, state);\n\n      if (member.declare) {\n        if (\n          member.type !== \"ClassProperty\" &&\n          member.type !== \"ClassPrivateProperty\" &&\n          member.type !== \"PropertyDefinition\" // Used by estree plugin\n        ) {\n          this.raise(FlowErrors.DeclareClassElement, { at: startLoc });\n        } else if (member.value) {\n          this.raise(FlowErrors.DeclareClassFieldInitializer, {\n            at: member.value,\n          });\n        }\n      }\n    }\n\n    isIterator(word: string): boolean {\n      return word === \"iterator\" || word === \"asyncIterator\";\n    }\n\n    readIterator(): void {\n      const word = super.readWord1();\n      const fullWord = \"@@\" + word;\n\n      // Allow @@iterator and @@asyncIterator as a identifier only inside type\n      if (!this.isIterator(word) || !this.state.inType) {\n        this.raise(Errors.InvalidIdentifier, {\n          at: this.state.curPosition(),\n          identifierName: fullWord,\n        });\n      }\n\n      this.finishToken(tt.name, fullWord);\n    }\n\n    // ensure that inside flow types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n        return this.finishOp(tt.braceBarL, 2);\n      } else if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        return this.finishOp(code === charCodes.greaterThan ? tt.gt : tt.lt, 1);\n      } else if (this.state.inType && code === charCodes.questionMark) {\n        if (next === charCodes.dot) {\n          return this.finishOp(tt.questionDot, 2);\n        }\n        // allow double nullable types in Flow: ??string\n        return this.finishOp(tt.question, 1);\n      } else if (\n        isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))\n      ) {\n        this.state.pos += 2; // eat \"@@\"\n        return this.readIterator();\n      } else {\n        return super.getTokenFromCode(code);\n      }\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node.type === \"TypeCastExpression\") {\n        return this.isAssignable(node.expression, isBinding);\n      } else {\n        return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (\n        !isLHS &&\n        node.type === \"AssignmentExpression\" &&\n        node.left.type === \"TypeCastExpression\"\n      ) {\n        node.left = this.typeCastToParameter(node.left);\n      }\n      super.toAssignable(node, isLHS);\n    }\n\n    // turn type casts that we found in function parameter head into type annotated params\n    toAssignableList(\n      exprList: N.Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    // this is a list of nodes, from something like a call expression, we need to filter the\n    // type casts that we've found that are illegal in this context\n    toReferencedList(\n      exprList: ReadonlyArray<N.Expression | undefined | null>,\n      isParenthesizedExpr?: boolean,\n    ): ReadonlyArray<N.Expression | undefined | null> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (\n          expr &&\n          expr.type === \"TypeCastExpression\" &&\n          !expr.extra?.parenthesized &&\n          (exprList.length > 1 || !isParenthesizedExpr)\n        ) {\n          this.raise(FlowErrors.TypeCastInPattern, {\n            at: expr.typeAnnotation,\n          });\n        }\n      }\n\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      // This could be an array pattern:\n      //   ([a: string, b: string]) => {}\n      // In this case, we don't have to call toReferencedList. We will\n      // call it, if needed, when we are sure that it is a parenthesized\n      // expression by calling toReferencedListDeep.\n      if (canBePattern && !this.state.maybeInArrowParameters) {\n        this.toReferencedList(node.elements);\n      }\n\n      return node;\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingTypes) {\n      return (\n        type === \"TypeCastExpression\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    // parse class property type annotations\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      if (this.match(tt.colon)) {\n        // @ts-expect-error refine typings\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (this.match(tt.colon)) {\n        // @ts-expect-error refine typings\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassPrivateProperty(node);\n    }\n\n    // determine whether or not we're currently in the position where a class method would appear\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    // determine whether or not we're currently in the position where a class property would appear\n    isClassProperty(): boolean {\n      return this.match(tt.colon) || super.isClassProperty();\n    }\n\n    isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n      return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n    }\n\n    // parse type parameters for class methods\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n\n      if (method.params && isConstructor) {\n        const params = method.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, { at: method });\n        }\n        // estree support\n      } else if (\n        // @ts-expect-error TS does not know about the face that estree can replace ClassMethod with MethodDefinition\n        method.type === \"MethodDefinition\" &&\n        isConstructor &&\n        // @ts-expect-error estree\n        method.value.params\n      ) {\n        // @ts-expect-error estree\n        const params = method.value.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, { at: method });\n        }\n      }\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    // parse a the super class type parameters and implements\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (node.superClass && this.match(tt.lt)) {\n        node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n      }\n      if (this.isContextual(tt._implements)) {\n        this.next();\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\n        do {\n          const node = this.startNode();\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\n          } else {\n            node.typeParameters = null;\n          }\n          implemented.push(this.finishNode(node, \"ClassImplements\"));\n        } while (this.eat(tt.comma));\n      }\n    }\n\n    checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n      super.checkGetterSetterParams(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      if (params.length > 0) {\n        const param = params[0];\n        if (this.isThisParam(param) && method.kind === \"get\") {\n          this.raise(FlowErrors.GetterMayNotHaveThisParam, { at: param });\n        } else if (this.isThisParam(param)) {\n          this.raise(FlowErrors.SetterMayNotHaveThisParam, { at: param });\n        }\n      }\n    }\n\n    parsePropertyNamePrefixOperator(\n      node: N.ObjectOrClassMember | N.ClassMember,\n    ): void {\n      node.variance = this.flowParseVariance();\n    }\n\n    // parse type parameters for object method shorthand\n    parseObjPropValue(\n      prop: Undone<N.ObjectMethod | N.ObjectProperty>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ObjectMethod | N.ObjectProperty {\n      if ((prop as any).variance) {\n        this.unexpected((prop as any).variance.loc.start);\n      }\n      delete (prop as any).variance;\n\n      let typeParameters;\n\n      // method shorthand\n      if (this.match(tt.lt) && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(tt.parenL)) this.unexpected();\n      }\n\n      const result = super.parseObjPropValue(\n        prop,\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n\n      // add typeParameters if we found them\n      if (typeParameters) {\n        (result.value || result).typeParameters = typeParameters;\n      }\n      return result;\n    }\n\n    parseAssignableListItemTypes(param: N.Pattern): N.Pattern {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(FlowErrors.PatternIsOptional, { at: param });\n        }\n        if (this.isThisParam(param)) {\n          this.raise(FlowErrors.ThisParamMayNotBeOptional, { at: param });\n        }\n\n        (param as any as N.Identifier).optional = true;\n      }\n      if (this.match(tt.colon)) {\n        // @ts-expect-error: refine typings\n        param.typeAnnotation = this.flowParseTypeAnnotation();\n      } else if (this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamAnnotationRequired, { at: param });\n      }\n\n      if (this.match(tt.eq) && this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamNoDefault, { at: param });\n      }\n\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault(\n      startLoc?: Position | null,\n      left?: N.Pattern | null,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(FlowErrors.TypeBeforeInitializer, {\n          at: node.typeAnnotation,\n        });\n      }\n\n      return node;\n    }\n\n    shouldParseDefaultImport(node: N.ImportDeclaration): boolean {\n      if (!hasTypeImportKind(node)) {\n        return super.shouldParseDefaultImport(node);\n      }\n\n      return isMaybeDefaultImport(this.state.type);\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(FlowErrors.ImportReflectionHasImportType, {\n          at: node.specifiers[0].loc.start,\n        });\n      }\n    }\n\n    parseImportSpecifierLocal<\n      T extends\n        | N.ImportSpecifier\n        | N.ImportDefaultSpecifier\n        | N.ImportNamespaceSpecifier,\n    >(node: N.ImportDeclaration, specifier: Undone<T>, type: T[\"type\"]): void {\n      specifier.local = hasTypeImportKind(node)\n        ? this.flowParseRestrictedIdentifier(\n            /* liberal */ true,\n            /* declaration */ true,\n          )\n        : this.parseIdentifier();\n\n      node.specifiers.push(this.finishImportSpecifier(specifier, type));\n    }\n\n    // parse typeof and type imports\n    maybeParseDefaultImportSpecifier(node: N.ImportDeclaration): boolean {\n      node.importKind = \"value\";\n\n      let kind = null;\n      if (this.match(tt._typeof)) {\n        kind = \"typeof\" as const;\n      } else if (this.isContextual(tt._type)) {\n        kind = \"type\" as const;\n      }\n      if (kind) {\n        const lh = this.lookahead();\n        const { type } = lh;\n\n        // import type * is not allowed\n        if (kind === \"type\" && type === tt.star) {\n          // FIXME: lh.start?\n          this.unexpected(null, lh.type);\n        }\n\n        if (\n          isMaybeDefaultImport(type) ||\n          type === tt.braceL ||\n          type === tt.star\n        ) {\n          this.next();\n          node.importKind = kind;\n        }\n      }\n\n      return super.maybeParseDefaultImportSpecifier(node);\n    }\n\n    // parse import-type/typeof shorthand\n    parseImportSpecifier(\n      specifier: any,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingTypes | undefined,\n    ): N.ImportSpecifier {\n      const firstIdent = specifier.imported;\n\n      let specifierTypeKind = null;\n      if (firstIdent.type === \"Identifier\") {\n        if (firstIdent.name === \"type\") {\n          specifierTypeKind = \"type\";\n        } else if (firstIdent.name === \"typeof\") {\n          specifierTypeKind = \"typeof\";\n        }\n      }\n\n      let isBinding = false;\n      if (this.isContextual(tt._as) && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n        if (\n          specifierTypeKind !== null &&\n          !tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type as ,` or `import {type as }`\n          specifier.imported = as_ident;\n          specifier.importKind = specifierTypeKind;\n          specifier.local = cloneIdentifier(as_ident);\n        } else {\n          // `import {type as foo`\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n          specifier.local = this.parseIdentifier();\n        }\n      } else {\n        if (\n          specifierTypeKind !== null &&\n          tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type foo`\n          specifier.imported = this.parseIdentifier(true);\n          specifier.importKind = specifierTypeKind;\n        } else {\n          if (importedIsString) {\n            /*:: invariant(firstIdent instanceof N.StringLiteral) */\n            throw this.raise(Errors.ImportBindingIsString, {\n              at: specifier,\n              importName: firstIdent.value,\n            });\n          }\n          /*:: invariant(firstIdent instanceof N.Node) */\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n        }\n\n        if (this.eatContextual(tt._as)) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = cloneIdentifier(specifier.imported);\n        }\n      }\n\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (isInTypeOnlyImport && specifierIsTypeImport) {\n        this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, {\n          at: specifier,\n        });\n      }\n\n      if (isInTypeOnlyImport || specifierIsTypeImport) {\n        this.checkReservedType(\n          specifier.local.name,\n          specifier.local.loc.start,\n          /* declaration */ true,\n        );\n      }\n\n      if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n        this.checkReservedWord(\n          specifier.local.name,\n          specifier.loc.start,\n          true,\n          true,\n        );\n      }\n\n      return this.finishImportSpecifier(specifier, \"ImportSpecifier\");\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    // parse function type parameters - function foo<T>() {}\n    parseFunctionParams(\n      node: Undone<N.Function>,\n      allowModifiers?: boolean,\n    ): void {\n      // @ts-expect-error kind may not index node\n      const kind = node.kind;\n      if (kind !== \"get\" && kind !== \"set\" && this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n      super.parseFunctionParams(node, allowModifiers);\n    }\n\n    // parse flow type annotations on variable declarator heads - let foo: string = bar\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (this.match(tt.colon)) {\n        // @ts-expect-error: refine typings\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        // @ts-expect-error refine typings\n        node.returnType = this.flowParseTypeAnnotation();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      }\n\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    // todo description\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    // We need to support type parameter declarations for arrow functions. This\n    // is tricky. There are three situations we need to handle\n    //\n    // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n    //    fails, we'll try an arrow function. If that fails, we'll throw the JSX\n    //    error.\n    // 2. This is an arrow function. We'll parse the type parameter declaration,\n    //    parse the rest, make sure the rest is an arrow function, and go from\n    //    there\n    // 3. This is neither. Just call the super method\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      let state = null;\n\n      let jsx;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (jsx?.error || this.match(tt.lt)) {\n        state = state || this.state.clone();\n\n        let typeParameters: N.TypeParameterDeclaration;\n\n        const arrow = this.tryParse(abort => {\n          typeParameters = this.flowParseTypeParameterDeclaration();\n\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(\n            typeParameters,\n            () => {\n              const result = super.parseMaybeAssign(\n                refExpressionErrors,\n                afterLeftParse,\n              );\n\n              this.resetStartLocationFromNode(result, typeParameters);\n\n              return result;\n            },\n          );\n\n          // <T>(() => {});\n          // <T>(() => {}: any);\n          if (arrowExpression.extra?.parenthesized) abort();\n\n          // The above can return a TypeCastExpression when the arrow\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\n          // (<T>() => {}: any);\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n\n          if (expr.type !== \"ArrowFunctionExpression\") abort();\n\n          expr.typeParameters = typeParameters;\n          this.resetStartLocationFromNode(expr, typeParameters);\n\n          return arrowExpression;\n        }, state);\n\n        let arrowExpression:\n          | N.ArrowFunctionExpression\n          | N.TypeCastExpression\n          | undefined\n          | null = null;\n\n        if (\n          arrow.node &&\n          // @ts-expect-error: refine tryParse typings\n          this.maybeUnwrapTypeCastExpression(arrow.node).type ===\n            \"ArrowFunctionExpression\"\n        ) {\n          if (!arrow.error && !arrow.aborted) {\n            // <T> async () => {}\n            // @ts-expect-error: refine tryParse typings\n            if (arrow.node.async) {\n              /*:: invariant(typeParameters) */\n              this.raise(\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n                { at: typeParameters },\n              );\n            }\n            // @ts-expect-error: refine tryParse typings\n            return arrow.node;\n          }\n\n          // @ts-expect-error: refine typings\n          arrowExpression = arrow.node;\n        }\n\n        // If we are here, both JSX and Flow parsing attempts failed.\n        // Give the precedence to the JSX error, except if JSX had an\n        // unrecoverable error while Flow didn't.\n        // If the error is recoverable, we can only re-report it if there is\n        // a node we can return.\n\n        if (jsx?.node) {\n          /*:: invariant(jsx.failState) */\n          this.state = jsx.failState;\n          return jsx.node;\n        }\n\n        if (arrowExpression) {\n          /*:: invariant(arrow.failState) */\n          this.state = arrow.failState;\n          return arrowExpression;\n        }\n\n        if (jsx?.thrown) throw jsx.error;\n        if (arrow.thrown) throw arrow.error;\n\n        /*:: invariant(typeParameters) */\n        throw this.raise(FlowErrors.UnexpectedTokenAfterTypeParameter, {\n          at: typeParameters,\n        });\n      }\n\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n    }\n\n    // handle return types for arrow functions\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // @ts-expect-error todo(flow->ts)\n        const result = this.tryParse(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n\n          const typeNode = this.startNode<N.TypeAnnotation>();\n\n          [\n            typeNode.typeAnnotation,\n            // @ts-expect-error (destructuring not supported yet)\n            node.predicate,\n          ] = this.flowParseTypeAndPredicateInitialiser();\n\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.canInsertSemicolon()) this.unexpected();\n          if (!this.match(tt.arrow)) this.unexpected();\n\n          return typeNode;\n        });\n\n        if (result.thrown) return null;\n        /*:: invariant(result.node) */\n\n        if (result.error) this.state = result.failState;\n\n        // assign after it is clear it is an arrow\n        // @ts-expect-error todo(flow->ts)\n        node.returnType = result.node.typeAnnotation\n          ? this.finishNode(result.node, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseArrow(node);\n    }\n\n    shouldParseArrow(params: Array<N.Node>): boolean {\n      return this.match(tt.colon) || super.shouldParseArrow(params);\n    }\n\n    setArrowFunctionParameters(\n      node: N.ArrowFunctionExpression,\n      params: N.Pattern[],\n    ): void {\n      if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {\n        node.params = params;\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(\n      node: N.Function,\n      allowDuplicates: boolean,\n      isArrowFunction?: boolean | null,\n      strictModeChanged: boolean = true,\n    ): void {\n      if (\n        isArrowFunction &&\n        this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1\n      ) {\n        return;\n      }\n\n      // ensure the `this` param is first, if it exists\n      for (let i = 0; i < node.params.length; i++) {\n        if (this.isThisParam(node.params[i]) && i > 0) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, { at: node.params[i] });\n        }\n      }\n\n      return super.checkParams(\n        node,\n        allowDuplicates,\n        isArrowFunction,\n        strictModeChanged,\n      );\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n      return super.parseParenAndDistinguishExpression(\n        canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1,\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls?: boolean | null,\n    ): N.Expression {\n      if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.state.noArrowAt.indexOf(startLoc.index) !== -1\n      ) {\n        this.next();\n\n        const node = this.startNodeAt(startLoc);\n        node.callee = base;\n        node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.match(tt.lt)\n      ) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(\n          abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(),\n          state,\n        );\n\n        /*:: invariant(arrow.node != null) */\n        // @ts-expect-error: refine tryParse typings\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n\n        const result = this.tryParse(\n          () => super.parseSubscripts(base, startLoc, noCalls),\n          state,\n        );\n\n        if (result.node && !result.error) return result.node;\n\n        if (arrow.node) {\n          this.state = arrow.failState;\n          // @ts-expect-error: refine tryParse typings\n          return arrow.node;\n        }\n\n        if (result.node) {\n          this.state = result.failState;\n          return result.node;\n        }\n\n        throw arrow.error || result.error;\n      }\n\n      return super.parseSubscripts(base, startLoc, noCalls);\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      subscriptState: N.ParseSubscriptState,\n    ): N.Expression {\n      if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\n        subscriptState.optionalChainMember = true;\n        if (noCalls) {\n          subscriptState.stop = true;\n          return base;\n        }\n        this.next();\n        const node = this.startNodeAt<N.OptionalCallExpression>(startLoc);\n        node.callee = base;\n        node.typeArguments = this.flowParseTypeParameterInstantiation();\n        this.expect(tt.parenL);\n        node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (!noCalls && this.shouldParseTypes() && this.match(tt.lt)) {\n        const node = this.startNodeAt<\n          N.OptionalCallExpression | N.CallExpression\n        >(startLoc);\n        node.callee = base;\n\n        const result = this.tryParse(() => {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationCallOrNew();\n          this.expect(tt.parenL);\n          node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\n          if (subscriptState.optionalChainMember) {\n            (node as Undone<N.OptionalCallExpression>).optional = false;\n          }\n          return this.finishCallExpression(\n            node,\n            subscriptState.optionalChainMember,\n          );\n        });\n\n        if (result.node) {\n          if (result.error) this.state = result.failState;\n          return result.node;\n        }\n      }\n\n      return super.parseSubscript(\n        base,\n\n        startLoc,\n        noCalls,\n        subscriptState,\n      );\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      let targs = null;\n      if (this.shouldParseTypes() && this.match(tt.lt)) {\n        targs = this.tryParse(() =>\n          this.flowParseTypeParameterInstantiationCallOrNew(),\n        ).node;\n      }\n      node.typeArguments = targs;\n    }\n\n    parseAsyncArrowWithTypeParameters(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined | null {\n      const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n      this.parseFunctionParams(node);\n      if (!this.parseArrow(node)) return;\n      return super.parseArrowExpression(\n        node,\n        /* params */ undefined,\n        /* isAsync */ true,\n      );\n    }\n\n    readToken_mult_modulo(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.asterisk &&\n        next === charCodes.slash &&\n        this.state.hasFlowComment\n      ) {\n        this.state.hasFlowComment = false;\n        this.state.pos += 2;\n        this.nextToken();\n        return;\n      }\n\n      super.readToken_mult_modulo(code);\n    }\n\n    readToken_pipe_amp(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.verticalBar &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        // '|}'\n        this.finishOp(tt.braceBarR, 2);\n        return;\n      }\n\n      super.readToken_pipe_amp(code);\n    }\n\n    parseTopLevel(file: N.File, program: N.Program): N.File {\n      const fileNode = super.parseTopLevel(file, program);\n      if (this.state.hasFlowComment) {\n        this.raise(FlowErrors.UnterminatedFlowComment, {\n          at: this.state.curPosition(),\n        });\n      }\n      return fileNode;\n    }\n\n    skipBlockComment(): N.CommentBlock | undefined {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          throw this.raise(FlowErrors.NestedFlowComment, {\n            at: this.state.startLoc,\n          });\n        }\n        this.hasFlowCommentCompletion();\n        const commentSkip = this.skipFlowComment();\n        if (commentSkip) {\n          this.state.pos += commentSkip;\n          this.state.hasFlowComment = true;\n        }\n        return;\n      }\n\n      return super.skipBlockComment(this.state.hasFlowComment ? \"*-/\" : \"*/\");\n    }\n\n    skipFlowComment(): number | false {\n      const { pos } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n      while (\n        [charCodes.space, charCodes.tab].includes(\n          // @ts-expect-error testing whether a number is included\n          this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n        )\n      ) {\n        shiftToFirstNonWhiteSpace++;\n      }\n\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n      if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n        return shiftToFirstNonWhiteSpace + 2; // check for /*::\n      }\n      if (\n        this.input.slice(\n          shiftToFirstNonWhiteSpace + pos,\n          shiftToFirstNonWhiteSpace + pos + 12,\n        ) === \"flow-include\"\n      ) {\n        return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n      }\n      if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n        return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n      }\n      return false;\n    }\n\n    hasFlowCommentCompletion(): void {\n      const end = this.input.indexOf(\"*/\", this.state.pos);\n      if (end === -1) {\n        throw this.raise(Errors.UnterminatedComment, {\n          at: this.state.curPosition(),\n        });\n      }\n    }\n\n    // Flow enum parsing\n\n    flowEnumErrorBooleanMemberNotInitialized(\n      loc: Position,\n      {\n        enumName,\n        memberName,\n      }: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumBooleanMemberNotInitialized, {\n        at: loc,\n        memberName,\n        enumName,\n      });\n    }\n\n    flowEnumErrorInvalidMemberInitializer(\n      loc: Position,\n      enumContext: EnumContext,\n    ) {\n      return this.raise(\n        !enumContext.explicitType\n          ? FlowErrors.EnumInvalidMemberInitializerUnknownType\n          : enumContext.explicitType === \"symbol\"\n          ? FlowErrors.EnumInvalidMemberInitializerSymbolType\n          : FlowErrors.EnumInvalidMemberInitializerPrimaryType,\n        {\n          at: loc,\n          ...enumContext,\n        },\n      );\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(\n      loc: Position,\n      {\n        enumName,\n        memberName,\n      }: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumNumberMemberNotInitialized, {\n        at: loc,\n        enumName,\n        memberName,\n      });\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitailized(\n      node: N.Node,\n      {\n        enumName,\n      }: {\n        enumName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumStringMemberInconsistentlyInitailized, {\n        at: node,\n        enumName,\n      });\n    }\n\n    flowEnumMemberInit(): EnumMemberInit {\n      const startLoc = this.state.startLoc;\n      const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n      switch (this.state.type) {\n        case tt.num: {\n          const literal = this.parseNumericLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"number\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt.string: {\n          const literal = this.parseStringLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"string\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt._true:\n        case tt._false: {\n          const literal = this.parseBooleanLiteral(this.match(tt._true));\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              loc: literal.loc.start,\n              value: literal,\n            };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        default:\n          return { type: \"invalid\", loc: startLoc };\n      }\n    }\n\n    flowEnumMemberRaw(): {\n      id: N.Node;\n      init: EnumMemberInit;\n    } {\n      const loc = this.state.startLoc;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(tt.eq)\n        ? this.flowEnumMemberInit()\n        : { type: \"none\" as const, loc };\n      return { id, init };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(\n      loc: Position,\n      context: EnumContext,\n      expectedType: EnumExplicitType,\n    ): void {\n      const { explicitType } = context;\n      if (explicitType === null) {\n        return;\n      }\n      if (explicitType !== expectedType) {\n        this.flowEnumErrorInvalidMemberInitializer(loc, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType,\n    }: {\n      enumName: string;\n      explicitType: EnumExplicitType;\n    }): {\n      members: {\n        booleanMembers: Array<N.Node>;\n        numberMembers: Array<N.Node>;\n        stringMembers: Array<N.Node>;\n        defaultedMembers: Array<N.Node>;\n      };\n      hasUnknownMembers: boolean;\n    } {\n      const seenNames = new Set();\n      const members = {\n        // @ts-expect-error: migrate to Babel types\n        booleanMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        numberMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        stringMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        defaultedMembers: [],\n      };\n      let hasUnknownMembers = false;\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.ellipsis)) {\n          hasUnknownMembers = true;\n          break;\n        }\n        const memberNode = this.startNode();\n        const { id, init } = this.flowEnumMemberRaw();\n        const memberName = id.name;\n        if (memberName === \"\") {\n          continue;\n        }\n        if (/^[a-z]/.test(memberName)) {\n          this.raise(FlowErrors.EnumInvalidMemberName, {\n            at: id,\n            memberName,\n            suggestion: memberName[0].toUpperCase() + memberName.slice(1),\n            enumName,\n          });\n        }\n        if (seenNames.has(memberName)) {\n          this.raise(FlowErrors.EnumDuplicateMemberName, {\n            at: id,\n            memberName,\n            enumName,\n          });\n        }\n        seenNames.add(memberName);\n        const context = { enumName, explicitType, memberName };\n        memberNode.id = id;\n        switch (init.type) {\n          case \"boolean\": {\n            this.flowEnumCheckExplicitTypeMismatch(\n              init.loc,\n              context,\n              \"boolean\",\n            );\n            memberNode.init = init.value;\n            members.booleanMembers.push(\n              this.finishNode(memberNode, \"EnumBooleanMember\"),\n            );\n            break;\n          }\n          case \"number\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(\n              this.finishNode(memberNode, \"EnumNumberMember\"),\n            );\n            break;\n          }\n          case \"string\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(\n              this.finishNode(memberNode, \"EnumStringMember\"),\n            );\n            break;\n          }\n          case \"invalid\": {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);\n          }\n          case \"none\": {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(\n                  init.loc,\n                  context,\n                );\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);\n                break;\n              default:\n                members.defaultedMembers.push(\n                  this.finishNode(memberNode, \"EnumDefaultedMember\"),\n                );\n            }\n          }\n        }\n\n        if (!this.match(tt.braceR)) {\n          this.expect(tt.comma);\n        }\n      }\n      return { members, hasUnknownMembers };\n    }\n\n    flowEnumStringMembers(\n      initializedMembers: Array<N.Node>,\n      defaultedMembers: Array<N.Node>,\n      {\n        enumName,\n      }: {\n        enumName: string;\n      },\n    ): Array<N.Node> {\n      if (initializedMembers.length === 0) {\n        return defaultedMembers;\n      } else if (defaultedMembers.length === 0) {\n        return initializedMembers;\n      } else if (defaultedMembers.length > initializedMembers.length) {\n        for (const member of initializedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {\n            enumName,\n          });\n        }\n        return defaultedMembers;\n      } else {\n        for (const member of defaultedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitailized(member, {\n            enumName,\n          });\n        }\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName,\n    }: {\n      enumName: string;\n    }): EnumExplicitType {\n      if (!this.eatContextual(tt._of)) return null;\n\n      if (!tokenIsIdentifier(this.state.type)) {\n        throw this.raise(FlowErrors.EnumInvalidExplicitTypeUnknownSupplied, {\n          at: this.state.startLoc,\n          enumName,\n        });\n      }\n\n      const { value } = this.state;\n      this.next();\n\n      if (\n        value !== \"boolean\" &&\n        value !== \"number\" &&\n        value !== \"string\" &&\n        value !== \"symbol\"\n      ) {\n        this.raise(FlowErrors.EnumInvalidExplicitType, {\n          at: this.state.startLoc,\n          enumName,\n          invalidEnumType: value,\n        });\n      }\n\n      return value;\n    }\n\n    flowEnumBody(node: Undone<N.Node>, id: N.Node): N.Node {\n      const enumName = id.name;\n      const nameLoc = id.loc.start;\n      const explicitType = this.flowEnumParseExplicitType({ enumName });\n      this.expect(tt.braceL);\n      const { members, hasUnknownMembers } = this.flowEnumMembers({\n        enumName,\n        explicitType,\n      });\n      node.hasUnknownMembers = hasUnknownMembers;\n\n      switch (explicitType) {\n        case \"boolean\":\n          node.explicitType = true;\n          node.members = members.booleanMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumBooleanBody\");\n        case \"number\":\n          node.explicitType = true;\n          node.members = members.numberMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumNumberBody\");\n        case \"string\":\n          node.explicitType = true;\n          node.members = this.flowEnumStringMembers(\n            members.stringMembers,\n            members.defaultedMembers,\n            { enumName },\n          );\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumStringBody\");\n        case \"symbol\":\n          node.members = members.defaultedMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumSymbolBody\");\n        default: {\n          // `explicitType` is `null`\n          const empty = () => {\n            node.members = [];\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n          node.explicitType = false;\n\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(\n              members.stringMembers,\n              members.defaultedMembers,\n              { enumName },\n            );\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.booleanMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.numberMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.raise(FlowErrors.EnumInconsistentMemberValues, {\n              at: nameLoc,\n              enumName,\n            });\n            return empty();\n          }\n        }\n      }\n    }\n\n    flowParseEnumDeclaration(node: Undone<N.Node>): N.Node {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), id);\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    // check if the next token is a tt.lt\n    isLookaheadToken_lt(): boolean {\n      const next = this.nextTokenStart();\n      if (this.input.charCodeAt(next) === charCodes.lessThan) {\n        const afterNext = this.input.charCodeAt(next + 1);\n        return (\n          afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\n        );\n      }\n      return false;\n    }\n\n    maybeUnwrapTypeCastExpression(node: N.Node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n  };\n","const entities: {\n  __proto__: null;\n  [name: string]: string;\n} = {\n  __proto__: null,\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n} as const;\nexport default entities;\n","import * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml\";\nimport type Parser from \"../../parser\";\nimport type { ExpressionErrors } from \"../../parser/util\";\nimport {\n  tokenComesBeforeExpression,\n  tokenIsKeyword,\n  tokenLabelName,\n  type TokenType,\n  tt,\n} from \"../../tokenizer/types\";\nimport type { TokContext } from \"../../tokenizer/context\";\nimport { types as tc } from \"../../tokenizer/context\";\nimport type * as N from \"../../types\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier\";\nimport type { Position } from \"../../util/location\";\nimport { isNewLine } from \"../../util/whitespace\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error\";\nimport { type Undone } from \"../../parser/node\";\n\n/* eslint sort-keys: \"error\" */\nconst JsxErrors = ParseErrorEnum`jsx`({\n  AttributeIsEmpty:\n    \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: ({ openingTagName }: { openingTagName: string }) =>\n    `Expected corresponding JSX closing tag for <${openingTagName}>.`,\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n  UnexpectedSequenceExpression:\n    \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n  // FIXME: Unify with Errors.UnexpectedToken\n  UnexpectedToken: ({\n    unexpected,\n    HTMLEntity,\n  }: {\n    unexpected: string;\n    HTMLEntity: string;\n  }) =>\n    `Unexpected token \\`${unexpected}\\`. Did you mean \\`${HTMLEntity}\\` or \\`{'${unexpected}'}\\`?`,\n  UnsupportedJsxValue:\n    \"JSX value should be either an expression or a quoted JSX text.\",\n  UnterminatedJsxContent: \"Unterminated JSX contents.\",\n  UnwrappedAdjacentJSXElements:\n    \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\",\n});\n\n/* eslint-disable sort-keys */\n\nfunction isFragment(object?: N.JSXElement | null): boolean {\n  return object\n    ? object.type === \"JSXOpeningFragment\" ||\n        object.type === \"JSXClosingFragment\"\n    : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n  object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return (\n      getQualifiedJSXName(object.object) +\n      \".\" +\n      getQualifiedJSXName(object.property)\n    );\n  }\n\n  // istanbul ignore next\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport interface IJSXParserMixin {\n  jsxParseOpeningElementAfterName(\n    node: N.JSXOpeningElement,\n  ): N.JSXOpeningElement;\n}\n\nexport default (superClass: typeof Parser) =>\n  class JSXParserMixin extends superClass implements Parser, IJSXParserMixin {\n    // Reads inline JSX contents token.\n\n    jsxReadToken(): void {\n      let out = \"\";\n      let chunkStart = this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(JsxErrors.UnterminatedJsxContent, {\n            at: this.state.startLoc,\n          });\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n\n        switch (ch) {\n          case charCodes.lessThan:\n          case charCodes.leftCurlyBrace:\n            if (this.state.pos === this.state.start) {\n              if (ch === charCodes.lessThan && this.state.canStartJSXElement) {\n                ++this.state.pos;\n                return this.finishToken(tt.jsxTagStart);\n              }\n              return super.getTokenFromCode(ch);\n            }\n            out += this.input.slice(chunkStart, this.state.pos);\n            return this.finishToken(tt.jsxText, out);\n\n          case charCodes.ampersand:\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadEntity();\n            chunkStart = this.state.pos;\n            break;\n\n          case charCodes.greaterThan:\n          case charCodes.rightCurlyBrace:\n            if (process.env.BABEL_8_BREAKING) {\n              this.raise(JsxErrors.UnexpectedToken, {\n                at: this.state.curPosition(),\n                unexpected: this.input[this.state.pos],\n                HTMLEntity:\n                  ch === charCodes.rightCurlyBrace ? \"&rbrace;\" : \"&gt;\",\n              });\n            }\n          /* falls through */\n\n          default:\n            if (isNewLine(ch)) {\n              out += this.input.slice(chunkStart, this.state.pos);\n              out += this.jsxReadNewLine(true);\n              chunkStart = this.state.pos;\n            } else {\n              ++this.state.pos;\n            }\n        }\n      }\n    }\n\n    jsxReadNewLine(normalizeCRLF: boolean): string {\n      const ch = this.input.charCodeAt(this.state.pos);\n      let out;\n      ++this.state.pos;\n      if (\n        ch === charCodes.carriageReturn &&\n        this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n      ) {\n        ++this.state.pos;\n        out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n      } else {\n        out = String.fromCharCode(ch);\n      }\n      ++this.state.curLine;\n      this.state.lineStart = this.state.pos;\n\n      return out;\n    }\n\n    jsxReadString(quote: number): void {\n      let out = \"\";\n      let chunkStart = ++this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(Errors.UnterminatedString, {\n            at: this.state.startLoc,\n          });\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n        if (ch === quote) break;\n        if (ch === charCodes.ampersand) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n        } else if (isNewLine(ch)) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadNewLine(false);\n          chunkStart = this.state.pos;\n        } else {\n          ++this.state.pos;\n        }\n      }\n      out += this.input.slice(chunkStart, this.state.pos++);\n      return this.finishToken(tt.string, out);\n    }\n\n    jsxReadEntity(): string {\n      const startPos = ++this.state.pos;\n      if (this.codePointAtPos(this.state.pos) === charCodes.numberSign) {\n        ++this.state.pos;\n\n        let radix = 10;\n        if (this.codePointAtPos(this.state.pos) === charCodes.lowercaseX) {\n          radix = 16;\n          ++this.state.pos;\n        }\n\n        const codePoint = this.readInt(\n          radix,\n          /* len */ undefined,\n          /* forceLen */ false,\n          /* allowNumSeparator */ \"bail\",\n        );\n        if (\n          codePoint !== null &&\n          this.codePointAtPos(this.state.pos) === charCodes.semicolon\n        ) {\n          ++this.state.pos;\n          return String.fromCodePoint(codePoint);\n        }\n      } else {\n        let count = 0;\n        let semi = false;\n        while (\n          count++ < 10 &&\n          this.state.pos < this.length &&\n          !(semi = this.codePointAtPos(this.state.pos) == charCodes.semicolon)\n        ) {\n          ++this.state.pos;\n        }\n\n        if (semi) {\n          const desc = this.input.slice(startPos, this.state.pos);\n          const entity = XHTMLEntities[desc];\n          ++this.state.pos;\n\n          if (entity) {\n            return entity;\n          }\n        }\n      }\n\n      // Not a valid entity\n      this.state.pos = startPos;\n      return \"&\";\n    }\n\n    // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can\"t contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n    jsxReadWord(): void {\n      let ch;\n      const start = this.state.pos;\n      do {\n        ch = this.input.charCodeAt(++this.state.pos);\n      } while (isIdentifierChar(ch) || ch === charCodes.dash);\n      return this.finishToken(\n        tt.jsxName,\n        this.input.slice(start, this.state.pos),\n      );\n    }\n\n    // Parse next token as JSX identifier\n\n    jsxParseIdentifier(): N.JSXIdentifier {\n      const node = this.startNode();\n      if (this.match(tt.jsxName)) {\n        node.name = this.state.value;\n      } else if (tokenIsKeyword(this.state.type)) {\n        node.name = tokenLabelName(this.state.type);\n      } else {\n        this.unexpected();\n      }\n      this.next();\n      return this.finishNode(node, \"JSXIdentifier\");\n    }\n\n    // Parse namespaced identifier.\n\n    jsxParseNamespacedName(): N.JSXNamespacedName {\n      const startLoc = this.state.startLoc;\n      const name = this.jsxParseIdentifier();\n      if (!this.eat(tt.colon)) return name;\n\n      const node = this.startNodeAt(startLoc);\n      node.namespace = name;\n      node.name = this.jsxParseIdentifier();\n      return this.finishNode(node, \"JSXNamespacedName\");\n    }\n\n    // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n    jsxParseElementName():\n      | N.JSXIdentifier\n      | N.JSXNamespacedName\n      | N.JSXMemberExpression {\n      const startLoc = this.state.startLoc;\n      let node = this.jsxParseNamespacedName();\n      if (node.type === \"JSXNamespacedName\") {\n        return node;\n      }\n      while (this.eat(tt.dot)) {\n        const newNode = this.startNodeAt(startLoc);\n        newNode.object = node;\n        newNode.property = this.jsxParseIdentifier();\n        node = this.finishNode(newNode, \"JSXMemberExpression\");\n      }\n      return node;\n    }\n\n    // Parses any type of JSX attribute value.\n\n    jsxParseAttributeValue(): N.Expression {\n      let node;\n      switch (this.state.type) {\n        case tt.braceL:\n          node = this.startNode();\n          this.setContext(tc.brace);\n          this.next();\n          node = this.jsxParseExpressionContainer(node, tc.j_oTag);\n          if (node.expression.type === \"JSXEmptyExpression\") {\n            this.raise(JsxErrors.AttributeIsEmpty, { at: node });\n          }\n          return node;\n\n        case tt.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom();\n\n        default:\n          throw this.raise(JsxErrors.UnsupportedJsxValue, {\n            at: this.state.startLoc,\n          });\n      }\n    }\n\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n    jsxParseEmptyExpression(): N.JSXEmptyExpression {\n      const node = this.startNodeAt(this.state.lastTokEndLoc);\n      return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.startLoc);\n    }\n\n    // Parse JSX spread child\n\n    jsxParseSpreadChild(node: Undone<N.JSXSpreadChild>): N.JSXSpreadChild {\n      this.next(); // ellipsis\n      node.expression = this.parseExpression();\n      this.setContext(tc.j_expr);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXSpreadChild\");\n    }\n\n    // Parses JSX expression enclosed into curly brackets.\n\n    jsxParseExpressionContainer(\n      node: Undone<N.JSXExpressionContainer>,\n      previousContext: TokContext,\n    ): N.JSXExpressionContainer {\n      if (this.match(tt.braceR)) {\n        node.expression = this.jsxParseEmptyExpression();\n      } else {\n        const expression = this.parseExpression();\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            expression.type === \"SequenceExpression\" &&\n            !expression.extra?.parenthesized\n          ) {\n            this.raise(JsxErrors.UnexpectedSequenceExpression, {\n              at: expression.expressions[1],\n            });\n          }\n        }\n\n        node.expression = expression;\n      }\n      this.setContext(previousContext);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXExpressionContainer\");\n    }\n\n    // Parses following JSX attribute name-value pair.\n\n    jsxParseAttribute(): N.JSXAttribute {\n      const node = this.startNode();\n      if (this.match(tt.braceL)) {\n        this.setContext(tc.brace);\n        this.next();\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssignAllowIn();\n        this.setContext(tc.j_oTag);\n        this.state.canStartJSXElement = true;\n        this.expect(tt.braceR);\n        return this.finishNode(node, \"JSXSpreadAttribute\");\n      }\n      node.name = this.jsxParseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n      return this.finishNode(node, \"JSXAttribute\");\n    }\n\n    // Parses JSX opening tag starting after \"<\".\n\n    jsxParseOpeningElementAt(startLoc: Position): N.JSXOpeningElement {\n      const node = this.startNodeAt<N.JSXOpeningElement | N.JSXOpeningFragment>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        // @ts-expect-error migrate to Babel types\n        return this.finishNode(node, \"JSXOpeningFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      return this.jsxParseOpeningElementAfterName(\n        node as Undone<N.JSXOpeningElement>,\n      );\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: Undone<N.JSXOpeningElement>,\n    ): N.JSXOpeningElement {\n      const attributes: N.JSXAttribute[] = [];\n      while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n        attributes.push(this.jsxParseAttribute());\n      }\n      node.attributes = attributes;\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningElement\");\n    }\n\n    // Parses JSX closing tag starting after \"</\".\n\n    jsxParseClosingElementAt(startLoc: Position): N.JSXClosingElement {\n      const node = this.startNodeAt(startLoc);\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXClosingFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingElement\");\n    }\n\n    // Parses entire JSX element, including it\"s opening tag\n    // (starting after \"<\"), attributes, contents and closing tag.\n\n    jsxParseElementAt(startLoc: Position): N.JSXElement {\n      const node = this.startNodeAt(startLoc);\n      const children = [];\n      const openingElement = this.jsxParseOpeningElementAt(startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.state.type) {\n            case tt.jsxTagStart:\n              startLoc = this.state.startLoc;\n              this.next();\n              if (this.eat(tt.slash)) {\n                closingElement = this.jsxParseClosingElementAt(startLoc);\n                break contents;\n              }\n              children.push(this.jsxParseElementAt(startLoc));\n              break;\n\n            case tt.jsxText:\n              children.push(this.parseExprAtom());\n              break;\n\n            case tt.braceL: {\n              const node = this.startNode<\n                N.JSXSpreadChild | N.JSXExpressionContainer\n              >();\n              this.setContext(tc.brace);\n              this.next();\n              if (this.match(tt.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(\n                  this.jsxParseExpressionContainer(node, tc.j_expr),\n                );\n              }\n\n              break;\n            }\n            // istanbul ignore next - should never happen\n            default:\n              throw this.unexpected();\n          }\n        }\n\n        if (\n          isFragment(openingElement) &&\n          !isFragment(closingElement) &&\n          closingElement !== null\n        ) {\n          this.raise(JsxErrors.MissingClosingTagFragment, {\n            at: closingElement,\n          });\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n          this.raise(JsxErrors.MissingClosingTagElement, {\n            at: closingElement,\n            openingTagName: getQualifiedJSXName(openingElement.name),\n          });\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n          if (\n            getQualifiedJSXName(closingElement.name) !==\n            getQualifiedJSXName(openingElement.name)\n          ) {\n            this.raise(JsxErrors.MissingClosingTagElement, {\n              at: closingElement,\n              openingTagName: getQualifiedJSXName(openingElement.name),\n            });\n          }\n        }\n      }\n\n      if (isFragment(openingElement)) {\n        node.openingFragment = openingElement;\n        node.closingFragment = closingElement;\n      } else {\n        node.openingElement = openingElement;\n        node.closingElement = closingElement;\n      }\n      node.children = children;\n      if (this.match(tt.lt)) {\n        throw this.raise(JsxErrors.UnwrappedAdjacentJSXElements, {\n          at: this.state.startLoc,\n        });\n      }\n\n      return isFragment(openingElement)\n        ? this.finishNode(node, \"JSXFragment\")\n        : this.finishNode(node, \"JSXElement\");\n    }\n\n    // Parses entire JSX element from current position.\n\n    jsxParseElement(): N.JSXElement {\n      const startLoc = this.state.startLoc;\n      this.next();\n      return this.jsxParseElementAt(startLoc);\n    }\n\n    setContext(newContext: TokContext) {\n      const { context } = this.state;\n      context[context.length - 1] = newContext;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      if (this.match(tt.jsxText)) {\n        return this.parseLiteral(this.state.value, \"JSXText\");\n      } else if (this.match(tt.jsxTagStart)) {\n        return this.jsxParseElement();\n      } else if (\n        this.match(tt.lt) &&\n        this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n      ) {\n        // In case we encounter an lt token here it will always be the start of\n        // jsx as the lt sign is not allowed in places that expect an expression\n        this.replaceToken(tt.jsxTagStart);\n        return this.jsxParseElement();\n      } else {\n        return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    skipSpace() {\n      const curContext = this.curContext();\n      if (!curContext.preserveSpace) super.skipSpace();\n    }\n\n    getTokenFromCode(code: number): void {\n      const context = this.curContext();\n\n      if (context === tc.j_expr) {\n        return this.jsxReadToken();\n      }\n\n      if (context === tc.j_oTag || context === tc.j_cTag) {\n        if (isIdentifierStart(code)) {\n          return this.jsxReadWord();\n        }\n\n        if (code === charCodes.greaterThan) {\n          ++this.state.pos;\n          return this.finishToken(tt.jsxTagEnd);\n        }\n\n        if (\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n          context === tc.j_oTag\n        ) {\n          return this.jsxReadString(code);\n        }\n      }\n\n      if (\n        code === charCodes.lessThan &&\n        this.state.canStartJSXElement &&\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n      ) {\n        ++this.state.pos;\n        return this.finishToken(tt.jsxTagStart);\n      }\n\n      return super.getTokenFromCode(code);\n    }\n\n    updateContext(prevType: TokenType): void {\n      const { context, type } = this.state;\n      if (type === tt.slash && prevType === tt.jsxTagStart) {\n        // do not consider JSX expr -> JSX open tag -> ... anymore\n        // reconsider as closing tag context\n        context.splice(-2, 2, tc.j_cTag);\n        this.state.canStartJSXElement = false;\n      } else if (type === tt.jsxTagStart) {\n        // start opening tag context\n        context.push(tc.j_oTag);\n      } else if (type === tt.jsxTagEnd) {\n        const out = context[context.length - 1];\n        if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n          context.pop();\n          this.state.canStartJSXElement =\n            context[context.length - 1] === tc.j_expr;\n        } else {\n          this.setContext(tc.j_expr);\n          this.state.canStartJSXElement = true;\n        }\n      } else {\n        this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n      }\n    }\n  };\n","import type { Position } from \"../../util/location\";\nimport ScopeHandler, { Scope } from \"../../util/scope\";\nimport {\n  BIND_KIND_TYPE,\n  BIND_FLAGS_TS_ENUM,\n  BIND_FLAGS_TS_CONST_ENUM,\n  BIND_FLAGS_TS_EXPORT_ONLY,\n  BIND_KIND_VALUE,\n  BIND_FLAGS_CLASS,\n  type ScopeFlags,\n  type BindingTypes,\n  BIND_FLAGS_TS_IMPORT,\n  SCOPE_TS_MODULE,\n} from \"../../util/scopeflags\";\nimport type * as N from \"../../types\";\nimport { Errors } from \"../../parse-error\";\n\nclass TypeScriptScope extends Scope {\n  types: Set<string> = new Set();\n\n  // enums (which are also in .types)\n  enums: Set<string> = new Set();\n\n  // const enums (which are also in .enums and .types)\n  constEnums: Set<string> = new Set();\n\n  // classes (which are also in .lexical) and interface (which are also in .types)\n  classes: Set<string> = new Set();\n\n  // namespaces and ambient functions (or classes) are too difficult to track,\n  // especially without type analysis.\n  // We need to track them anyway, to avoid \"X is not defined\" errors\n  // when exporting them.\n  exportOnlyBindings: Set<string> = new Set();\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n  importsStack: Set<string>[] = [];\n\n  createScope(flags: ScopeFlags): TypeScriptScope {\n    this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\n\n    return new TypeScriptScope(flags);\n  }\n\n  enter(flags: number): void {\n    if (flags == SCOPE_TS_MODULE) {\n      this.importsStack.push(new Set());\n    }\n\n    super.enter(flags);\n  }\n\n  exit() {\n    const flags = super.exit();\n\n    if (flags == SCOPE_TS_MODULE) {\n      this.importsStack.pop();\n    }\n\n    return flags;\n  }\n\n  hasImport(name: string, allowShadow?: boolean) {\n    const len = this.importsStack.length;\n    if (this.importsStack[len - 1].has(name)) {\n      return true;\n    }\n    if (!allowShadow && len > 1) {\n      for (let i = 0; i < len - 1; i++) {\n        if (this.importsStack[i].has(name)) return true;\n      }\n    }\n    return false;\n  }\n\n  declareName(name: string, bindingType: BindingTypes, loc: Position) {\n    if (bindingType & BIND_FLAGS_TS_IMPORT) {\n      if (this.hasImport(name, true)) {\n        this.parser.raise(Errors.VarRedeclaration, {\n          at: loc,\n          identifierName: name,\n        });\n      }\n      this.importsStack[this.importsStack.length - 1].add(name);\n      return;\n    }\n\n    const scope = this.currentScope();\n    if (bindingType & BIND_FLAGS_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.exportOnlyBindings.add(name);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n\n    if (bindingType & BIND_KIND_TYPE) {\n      if (!(bindingType & BIND_KIND_VALUE)) {\n        // \"Value\" bindings have already been registered by the superclass.\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        this.maybeExportDefined(scope, name);\n      }\n      scope.types.add(name);\n    }\n    if (bindingType & BIND_FLAGS_TS_ENUM) scope.enums.add(name);\n    if (bindingType & BIND_FLAGS_TS_CONST_ENUM) scope.constEnums.add(name);\n    if (bindingType & BIND_FLAGS_CLASS) scope.classes.add(name);\n  }\n\n  isRedeclaredInScope(\n    scope: TypeScriptScope,\n    name: string,\n    bindingType: BindingTypes,\n  ): boolean {\n    if (scope.enums.has(name)) {\n      if (bindingType & BIND_FLAGS_TS_ENUM) {\n        // Enums can be merged with other enums if they are both\n        //  const or both non-const.\n        const isConst = !!(bindingType & BIND_FLAGS_TS_CONST_ENUM);\n        const wasConst = scope.constEnums.has(name);\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (bindingType & BIND_FLAGS_CLASS && scope.classes.has(name)) {\n      if (scope.lexical.has(name)) {\n        // Classes can be merged with interfaces\n        return !!(bindingType & BIND_KIND_VALUE);\n      } else {\n        // Interface can be merged with other classes or interfaces\n        return false;\n      }\n    }\n    if (bindingType & BIND_KIND_TYPE && scope.types.has(name)) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(scope, name, bindingType);\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n\n    if (this.hasImport(name)) return;\n\n    const len = this.scopeStack.length;\n    for (let i = len - 1; i >= 0; i--) {\n      const scope = this.scopeStack[i];\n      if (scope.types.has(name) || scope.exportOnlyBindings.has(name)) return;\n    }\n\n    super.checkLocalExport(id);\n  }\n}\n","/*:: declare var invariant; */\n\nimport type State from \"../../tokenizer/state\";\nimport {\n  tokenIsIdentifier,\n  tokenIsTSDeclarationStart,\n  tokenIsTSTypeOperator,\n  tokenOperatorPrecedence,\n  tokenIsKeywordOrIdentifier,\n  tt,\n  type TokenType,\n  tokenIsTemplate,\n  tokenCanStartExpression,\n} from \"../../tokenizer/types\";\nimport { types as tc } from \"../../tokenizer/context\";\nimport type * as N from \"../../types\";\nimport type { Position } from \"../../util/location\";\nimport { createPositionWithColumnOffset } from \"../../util/location\";\nimport type Parser from \"../../parser\";\nimport {\n  type BindingTypes,\n  SCOPE_TS_MODULE,\n  SCOPE_OTHER,\n  BIND_TS_ENUM,\n  BIND_TS_CONST_ENUM,\n  BIND_TS_TYPE,\n  BIND_TS_INTERFACE,\n  BIND_TS_AMBIENT,\n  BIND_TS_NAMESPACE,\n  BIND_TS_TYPE_IMPORT,\n  BIND_CLASS,\n  BIND_NONE,\n  BIND_FLAGS_TS_IMPORT,\n} from \"../../util/scopeflags\";\nimport TypeScriptScopeHandler from \"./scope\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util\";\nimport type { ParseStatementFlag } from \"../../parser/statement\";\nimport { PARAM } from \"../../util/production-parameter\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node\";\nimport type { Pattern } from \"../../types\";\nimport type { Expression } from \"../../types\";\nimport type { IJSXParserMixin } from \"../jsx\";\n\nconst getOwn = <T extends {}>(object: T, key: keyof T) =>\n  Object.hasOwnProperty.call(object, key) && object[key];\n\ntype TsModifier =\n  | \"readonly\"\n  | \"abstract\"\n  | \"declare\"\n  | \"static\"\n  | \"override\"\n  | N.Accessibility\n  | N.VarianceAnnotations;\n\nfunction nonNull<T>(x?: T | null): T {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n  return x;\n}\n\nfunction assert(x: boolean): void {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\ntype ParsingContext =\n  | \"EnumMembers\"\n  | \"HeritageClauseElement\"\n  | \"TupleElementTypes\"\n  | \"TypeMembers\"\n  | \"TypeParametersOrArguments\";\n\ntype ModifierBase = {\n  accessibility?: N.Accessibility;\n} & {\n  [key in TsModifier]?: boolean | undefined | null;\n};\n\n/* eslint sort-keys: \"error\" */\nconst TSErrors = ParseErrorEnum`typescript`({\n  AbstractMethodHasImplementation: ({ methodName }: { methodName: string }) =>\n    `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\n  AbstractPropertyHasInitializer: ({\n    propertyName,\n  }: {\n    propertyName: string;\n  }) =>\n    `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\n  AccesorCannotDeclareThisParameter:\n    \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccesorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n  AccessorCannotBeOptional:\n    \"An 'accessor' property cannot be declared optional.\",\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n  ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n    \"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\",\n  ConstructorHasTypeParameters:\n    \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `'declare' is not allowed in ${kind}ters.`,\n  DeclareClassFieldHasInitializer:\n    \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation:\n    \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier:\n    // `Accessibility modifier already seen: ${modifier}` would be more helpful.\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ({ modifier }: { modifier: N.Accessibility }) =>\n      `Accessibility modifier already seen.`,\n  DuplicateModifier: ({ modifier }: { modifier: TsModifier }) =>\n    `Duplicate modifier: '${modifier}'.`,\n  // `token` matches the terminology used by typescript:\n  // https://github.com/microsoft/TypeScript/blob/main/src/compiler/types.ts#L2915\n  EmptyHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list cannot be empty.`,\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  ExpectedAmbientAfterExportDeclare:\n    \"'export declare' must be followed by an ambient declaration.\",\n  ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` modifier\",\n  IncompatibleModifiers: ({\n    modifiers,\n  }: {\n    modifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\n  IndexSignatureHasAbstract:\n    \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Index signatures cannot have an accessibility modifier ('${modifier}').`,\n  IndexSignatureHasDeclare:\n    \"Index signatures cannot have the 'declare' modifier.\",\n  IndexSignatureHasOverride:\n    \"'override' modifier cannot appear on an index signature.\",\n  IndexSignatureHasStatic:\n    \"Index signatures cannot have the 'static' modifier.\",\n  InitializerNotAllowedInAmbientContext:\n    \"Initializers are not allowed in ambient contexts.\",\n  InvalidModifierOnTypeMember: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type member.`,\n  InvalidModifierOnTypeParameter: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type parameter.`,\n  InvalidModifierOnTypeParameterPositions: ({\n    modifier,\n  }: {\n    modifier: TsModifier;\n  }) =>\n    `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\n  InvalidModifiersOrder: ({\n    orderedModifiers,\n  }: {\n    orderedModifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\n  InvalidPropertyAccessAfterInstantiationExpression:\n    \"Invalid property access after an instantiation expression. \" +\n    \"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\",\n  InvalidTupleMemberLabel:\n    \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName:\n    \"'interface' declarations must be followed by an identifier.\",\n  MixedLabeledAndUnlabeledElements:\n    \"Tuple members must all have names or all not have names.\",\n  NonAbstractClassHasAbstractMethod:\n    \"Abstract methods can only appear within an abstract class.\",\n  NonClassMethodPropertyHasAbstractModifer:\n    \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n  OptionalTypeBeforeRequired:\n    \"A required element cannot follow an optional element.\",\n  OverrideNotInSubClass:\n    \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n  PatternIsOptional:\n    \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract:\n    \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Private elements cannot have an accessibility modifier ('${modifier}').`,\n  ReadonlyForMethodSignature:\n    \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  ReservedArrowTypeParam:\n    \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n  ReservedTypeAssertion:\n    \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n  // TODO: Accesor -> Accessor\n  SetAccesorCannotHaveOptionalParameter:\n    \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccesorCannotHaveRestParameter:\n    \"A 'set' accessor cannot have rest parameter.\",\n  SetAccesorCannotHaveReturnType:\n    \"A 'set' accessor cannot have a return type annotation.\",\n  SingleTypeParameterWithoutTrailingComma: ({\n    typeParameterName,\n  }: {\n    typeParameterName: string;\n  }) =>\n    `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\n  StaticBlockCannotHaveModifier:\n    \"Static class blocks cannot have any modifier.\",\n  TypeAnnotationAfterAssign:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeImportCannotSpecifyDefaultAndNamed:\n    \"A type-only import can specify a default import or named bindings, but not both.\",\n  TypeModifierIsUsedInTypeExports:\n    \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n  TypeModifierIsUsedInTypeImports:\n    \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\n  UnexpectedParameterModifier:\n    \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly:\n    \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument:\n    \"Argument in a type import must be a string literal.\",\n  UnsupportedParameterPropertyKind:\n    \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: ({ type }: { type: string }) =>\n    `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`,\n});\n\n/* eslint-disable sort-keys */\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\n// It also doesn't handle \"intrinsic\", since usually it's not a keyword.\nfunction keywordTypeFromName(\n  value: string,\n): N.TsKeywordTypeType | typeof undefined {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n    case \"never\":\n      return \"TSNeverKeyword\";\n    case \"number\":\n      return \"TSNumberKeyword\";\n    case \"object\":\n      return \"TSObjectKeyword\";\n    case \"string\":\n      return \"TSStringKeyword\";\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n    default:\n      return undefined;\n  }\n}\n\nfunction tsIsAccessModifier(modifier: string): modifier is N.Accessibility {\n  return (\n    modifier === \"private\" || modifier === \"public\" || modifier === \"protected\"\n  );\n}\n\nfunction tsIsVarianceAnnotations(\n  modifier: string,\n): modifier is N.VarianceAnnotations {\n  return modifier === \"in\" || modifier === \"out\";\n}\n\ntype ClassWithMixin<\n  T extends new (...args: any) => any,\n  M extends object,\n> = T extends new (...args: infer P) => infer I\n  ? new (...args: P) => I & M\n  : never;\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class TypeScriptParserMixin extends superClass implements Parser {\n    getScopeHandler(): {\n      new (...args: any): TypeScriptScopeHandler;\n    } {\n      return TypeScriptScopeHandler;\n    }\n\n    tsIsIdentifier(): boolean {\n      // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n      // See https://github.com/Microsoft/TypeScript/issues/15008\n      return tokenIsIdentifier(this.state.type);\n    }\n\n    tsTokenCanFollowModifier() {\n      return (\n        (this.match(tt.bracketL) ||\n          this.match(tt.braceL) ||\n          this.match(tt.star) ||\n          this.match(tt.ellipsis) ||\n          this.match(tt.privateName) ||\n          this.isLiteralPropertyName()) &&\n        !this.hasPrecedingLineBreak()\n      );\n    }\n\n    tsNextTokenCanFollowModifier() {\n      // Note: TypeScript's implementation is much more complicated because\n      // more things are considered modifiers there.\n      // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n      // TODO: Would be nice to avoid lookahead. Want a hasLineBreakUpNext() method...\n      this.next();\n      return this.tsTokenCanFollowModifier();\n    }\n\n    /** Parses a modifier matching one the given modifier names. */\n    tsParseModifier<T extends TsModifier>(\n      allowedModifiers: T[],\n      stopOnStartOfClassStaticBlock?: boolean,\n    ): T | undefined | null {\n      if (!tokenIsIdentifier(this.state.type) && this.state.type !== tt._in) {\n        return undefined;\n      }\n\n      const modifier = this.state.value;\n      if (allowedModifiers.indexOf(modifier) !== -1) {\n        if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n          return undefined;\n        }\n        if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n          return modifier;\n        }\n      }\n      return undefined;\n    }\n\n    /** Parses a list of modifiers, in any order.\n     *  If you need a specific order, you must call this function multiple times:\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"public\"] });\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"abstract\", \"readonly\"] });\n     */\n    tsParseModifiers({\n      modified,\n      allowedModifiers,\n      disallowedModifiers,\n      stopOnStartOfClassStaticBlock,\n      errorTemplate = TSErrors.InvalidModifierOnTypeMember,\n    }: {\n      modified: ModifierBase;\n      allowedModifiers: readonly TsModifier[];\n      disallowedModifiers?: TsModifier[];\n      stopOnStartOfClassStaticBlock?: boolean;\n      // FIXME: make sure errorTemplate can receive `modifier`\n      errorTemplate?: any;\n    }): void {\n      const enforceOrder = (\n        loc: Position,\n        modifier: TsModifier,\n        before: TsModifier,\n        after: TsModifier,\n      ) => {\n        if (modifier === before && modified[after]) {\n          this.raise(TSErrors.InvalidModifiersOrder, {\n            at: loc,\n            orderedModifiers: [before, after],\n          });\n        }\n      };\n      const incompatible = (\n        loc: Position,\n        modifier: TsModifier,\n        mod1: TsModifier,\n        mod2: TsModifier,\n      ) => {\n        if (\n          (modified[mod1] && modifier === mod2) ||\n          (modified[mod2] && modifier === mod1)\n        ) {\n          this.raise(TSErrors.IncompatibleModifiers, {\n            at: loc,\n            modifiers: [mod1, mod2],\n          });\n        }\n      };\n\n      for (;;) {\n        const { startLoc } = this.state;\n        const modifier: TsModifier | undefined | null = this.tsParseModifier(\n          allowedModifiers.concat(disallowedModifiers ?? []),\n          stopOnStartOfClassStaticBlock,\n        );\n\n        if (!modifier) break;\n\n        if (tsIsAccessModifier(modifier)) {\n          if (modified.accessibility) {\n            this.raise(TSErrors.DuplicateAccessibilityModifier, {\n              at: startLoc,\n              modifier,\n            });\n          } else {\n            enforceOrder(startLoc, modifier, modifier, \"override\");\n            enforceOrder(startLoc, modifier, modifier, \"static\");\n            enforceOrder(startLoc, modifier, modifier, \"readonly\");\n\n            modified.accessibility = modifier;\n          }\n        } else if (tsIsVarianceAnnotations(modifier)) {\n          if (modified[modifier]) {\n            this.raise(TSErrors.DuplicateModifier, { at: startLoc, modifier });\n          }\n          modified[modifier] = true;\n\n          enforceOrder(startLoc, modifier, \"in\", \"out\");\n        } else {\n          if (Object.hasOwnProperty.call(modified, modifier)) {\n            this.raise(TSErrors.DuplicateModifier, { at: startLoc, modifier });\n          } else {\n            enforceOrder(startLoc, modifier, \"static\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"static\", \"override\");\n            enforceOrder(startLoc, modifier, \"override\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"abstract\", \"override\");\n\n            incompatible(startLoc, modifier, \"declare\", \"override\");\n            incompatible(startLoc, modifier, \"static\", \"abstract\");\n          }\n          modified[modifier] = true;\n        }\n\n        if (disallowedModifiers?.includes(modifier)) {\n          this.raise(errorTemplate, {\n            at: startLoc,\n            modifier,\n          });\n        }\n      }\n    }\n\n    tsIsListTerminator(kind: ParsingContext): boolean {\n      switch (kind) {\n        case \"EnumMembers\":\n        case \"TypeMembers\":\n          return this.match(tt.braceR);\n        case \"HeritageClauseElement\":\n          return this.match(tt.braceL);\n        case \"TupleElementTypes\":\n          return this.match(tt.bracketR);\n        case \"TypeParametersOrArguments\":\n          return this.match(tt.gt);\n      }\n\n      throw new Error(\"Unreachable\");\n    }\n\n    tsParseList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n    ): T[] {\n      const result: T[] = [];\n      while (!this.tsIsListTerminator(kind)) {\n        // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n        result.push(parseElement());\n      }\n      return result;\n    }\n\n    tsParseDelimitedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      return nonNull(\n        this.tsParseDelimitedListWorker(\n          kind,\n          parseElement,\n          /* expectSuccess */ true,\n          refTrailingCommaPos,\n        ),\n      );\n    }\n\n    /**\n     * If !expectSuccess, returns undefined instead of failing to parse.\n     * If expectSuccess, parseElement should always return a defined value.\n     */\n    tsParseDelimitedListWorker<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T | undefined | null,\n      expectSuccess: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] | undefined | null {\n      const result = [];\n      let trailingCommaPos = -1;\n\n      for (;;) {\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n        trailingCommaPos = -1;\n\n        const element = parseElement();\n        if (element == null) {\n          return undefined;\n        }\n        result.push(element);\n\n        if (this.eat(tt.comma)) {\n          trailingCommaPos = this.state.lastTokStart;\n          continue;\n        }\n\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        if (expectSuccess) {\n          // This will fail with an error about a missing comma\n          this.expect(tt.comma);\n        }\n        return undefined;\n      }\n\n      if (refTrailingCommaPos) {\n        refTrailingCommaPos.value = trailingCommaPos;\n      }\n\n      return result;\n    }\n\n    tsParseBracketedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      bracket: boolean,\n      skipFirstToken: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      if (!skipFirstToken) {\n        if (bracket) {\n          this.expect(tt.bracketL);\n        } else {\n          this.expect(tt.lt);\n        }\n      }\n\n      const result = this.tsParseDelimitedList(\n        kind,\n        parseElement,\n        refTrailingCommaPos,\n      );\n\n      if (bracket) {\n        this.expect(tt.bracketR);\n      } else {\n        this.expect(tt.gt);\n      }\n\n      return result;\n    }\n\n    tsParseImportType(): N.TsImportType {\n      const node = this.startNode<N.TsImportType>();\n      this.expect(tt._import);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.raise(TSErrors.UnsupportedImportTypeArgument, {\n          at: this.state.startLoc,\n        });\n      }\n\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.argument = super.parseExprAtom() as N.StringLiteral;\n      this.expect(tt.parenR);\n\n      if (this.eat(tt.dot)) {\n        // In this instance, the entity name will actually itself be a\n        // qualifier, so allow it to be a reserved word as well.\n        node.qualifier = this.tsParseEntityName();\n      }\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseEntityName(allowReservedWords: boolean = true): N.TsEntityName {\n      let entity: N.TsEntityName = this.parseIdentifier(allowReservedWords);\n      while (this.eat(tt.dot)) {\n        const node: Undone<N.TsQualifiedName> =\n          this.startNodeAtNode<N.TsQualifiedName>(entity);\n        node.left = entity;\n        node.right = this.parseIdentifier(allowReservedWords);\n        entity = this.finishNode(node, \"TSQualifiedName\");\n      }\n      return entity;\n    }\n\n    tsParseTypeReference(): N.TsTypeReference {\n      const node = this.startNode<N.TsTypeReference>();\n      node.typeName = this.tsParseEntityName();\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSTypeReference\");\n    }\n\n    tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n      this.next();\n      const node = this.startNodeAtNode<N.TsTypePredicate>(lhs);\n      node.parameterName = lhs;\n      node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n      node.asserts = false;\n      return this.finishNode(node, \"TSTypePredicate\");\n    }\n\n    tsParseThisTypeNode(): N.TsThisType {\n      const node = this.startNode<N.TsThisType>();\n      this.next();\n      return this.finishNode(node, \"TSThisType\");\n    }\n\n    tsParseTypeQuery(): N.TsTypeQuery {\n      const node = this.startNode<N.TsTypeQuery>();\n      this.expect(tt._typeof);\n      if (this.match(tt._import)) {\n        node.exprName = this.tsParseImportType();\n      } else {\n        node.exprName = this.tsParseEntityName();\n      }\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSTypeQuery\");\n    }\n\n    tsParseInOutModifiers(node: N.TsTypeParameter) {\n      this.tsParseModifiers({\n        modified: node,\n        allowedModifiers: [\"in\", \"out\"],\n        disallowedModifiers: [\n          \"public\",\n          \"private\",\n          \"protected\",\n          \"readonly\",\n          \"declare\",\n          \"abstract\",\n          \"override\",\n        ],\n        errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n      });\n    }\n\n    // for better error recover\n    tsParseNoneModifiers(node: N.TsTypeParameter) {\n      this.tsParseModifiers({\n        modified: node,\n        allowedModifiers: [],\n        disallowedModifiers: [\"in\", \"out\"],\n        errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n      });\n    }\n\n    tsParseTypeParameter(\n      parseModifiers: (\n        node: Undone<N.TsTypeParameter>,\n      ) => void = this.tsParseNoneModifiers.bind(this),\n    ): N.TsTypeParameter {\n      const node = this.startNode<N.TsTypeParameter>();\n\n      parseModifiers(node);\n\n      node.name = this.tsParseTypeParameterName();\n      node.constraint = this.tsEatThenParseType(tt._extends);\n      node.default = this.tsEatThenParseType(tt.eq);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsTryParseTypeParameters(\n      parseModifiers?: ((node: N.TsTypeParameter) => void) | null,\n    ): N.TsTypeParameterDeclaration | undefined | null {\n      if (this.match(tt.lt)) {\n        return this.tsParseTypeParameters(parseModifiers);\n      }\n    }\n\n    tsParseTypeParameters(\n      parseModifiers?: ((node: N.TsTypeParameter) => void) | null,\n    ) {\n      const node = this.startNode<N.TsTypeParameterDeclaration>();\n\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      const refTrailingCommaPos = { value: -1 };\n\n      node.params = this.tsParseBracketedList(\n        \"TypeParametersOrArguments\",\n        // @ts-expect-error refine typings\n        this.tsParseTypeParameter.bind(this, parseModifiers),\n        /* bracket */ false,\n        /* skipFirstToken */ true,\n        refTrailingCommaPos,\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeParameters, { at: node });\n      }\n      if (refTrailingCommaPos.value !== -1) {\n        this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n      }\n      return this.finishNode(node, \"TSTypeParameterDeclaration\");\n    }\n\n    // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n    // but here it's always false, because this is only used for types.\n    tsFillSignature(\n      returnToken: TokenType,\n      signature: Undone<N.TsSignatureDeclaration>,\n    ): void {\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n      const returnTokenRequired = returnToken === tt.arrow;\n\n      // https://github.com/babel/babel/issues/9231\n      const paramsKey = process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\";\n      const returnTypeKey = process.env.BABEL_8_BREAKING\n        ? \"returnType\"\n        : \"typeAnnotation\";\n\n      signature.typeParameters = this.tsTryParseTypeParameters();\n      this.expect(tt.parenL);\n      signature[paramsKey] = this.tsParseBindingListForSignature();\n      if (returnTokenRequired) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      } else if (this.match(returnToken)) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      }\n    }\n\n    tsParseBindingListForSignature(): Array<\n      N.Identifier | N.RestElement | N.ObjectPattern | N.ArrayPattern\n    > {\n      return super\n        .parseBindingList(tt.parenR, charCodes.rightParenthesis)\n        .map(pattern => {\n          if (\n            pattern.type !== \"Identifier\" &&\n            pattern.type !== \"RestElement\" &&\n            pattern.type !== \"ObjectPattern\" &&\n            pattern.type !== \"ArrayPattern\"\n          ) {\n            this.raise(TSErrors.UnsupportedSignatureParameterKind, {\n              at: pattern,\n              type: pattern.type,\n            });\n          }\n          return pattern as any;\n        });\n    }\n\n    tsParseTypeMemberSemicolon(): void {\n      if (!this.eat(tt.comma) && !this.isLineTerminator()) {\n        this.expect(tt.semi);\n      }\n    }\n\n    tsParseSignatureMember(\n      kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n      node: Undone<\n        N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration\n      >,\n    ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n      this.tsFillSignature(tt.colon, node);\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, kind);\n    }\n\n    tsIsUnambiguouslyIndexSignature() {\n      this.next(); // Skip '{'\n      if (tokenIsIdentifier(this.state.type)) {\n        this.next();\n        return this.match(tt.colon);\n      }\n      return false;\n    }\n\n    tsTryParseIndexSignature(\n      node: Undone<N.TsIndexSignature>,\n    ): N.TsIndexSignature | undefined | null {\n      if (\n        !(\n          this.match(tt.bracketL) &&\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n        )\n      ) {\n        return undefined;\n      }\n\n      this.expect(tt.bracketL);\n      const id = this.parseIdentifier();\n      id.typeAnnotation = this.tsParseTypeAnnotation();\n      this.resetEndLocation(id); // set end position to end of type\n\n      this.expect(tt.bracketR);\n      node.parameters = [id];\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, \"TSIndexSignature\");\n    }\n\n    tsParsePropertyOrMethodSignature(\n      node: N.TsPropertySignature | N.TsMethodSignature,\n      readonly: boolean,\n    ): N.TsPropertySignature | N.TsMethodSignature {\n      if (this.eat(tt.question)) node.optional = true;\n      const nodeAny: any = node;\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        if (readonly) {\n          this.raise(TSErrors.ReadonlyForMethodSignature, { at: node });\n        }\n        const method: N.TsMethodSignature = nodeAny;\n        if (method.kind && this.match(tt.lt)) {\n          this.raise(TSErrors.AccesorCannotHaveTypeParameters, {\n            at: this.state.curPosition(),\n          });\n        }\n        this.tsFillSignature(tt.colon, method);\n        this.tsParseTypeMemberSemicolon();\n        const paramsKey = process.env.BABEL_8_BREAKING\n          ? \"params\"\n          : \"parameters\";\n        const returnTypeKey = process.env.BABEL_8_BREAKING\n          ? \"returnType\"\n          : \"typeAnnotation\";\n        if (method.kind === \"get\") {\n          if (method[paramsKey].length > 0) {\n            this.raise(Errors.BadGetterArity, { at: this.state.curPosition() });\n            if (this.isThisParam(method[paramsKey][0])) {\n              this.raise(TSErrors.AccesorCannotDeclareThisParameter, {\n                at: this.state.curPosition(),\n              });\n            }\n          }\n        } else if (method.kind === \"set\") {\n          if (method[paramsKey].length !== 1) {\n            this.raise(Errors.BadSetterArity, { at: this.state.curPosition() });\n          } else {\n            const firstParameter = method[paramsKey][0];\n            if (this.isThisParam(firstParameter)) {\n              this.raise(TSErrors.AccesorCannotDeclareThisParameter, {\n                at: this.state.curPosition(),\n              });\n            }\n            if (\n              firstParameter.type === \"Identifier\" &&\n              firstParameter.optional\n            ) {\n              this.raise(TSErrors.SetAccesorCannotHaveOptionalParameter, {\n                at: this.state.curPosition(),\n              });\n            }\n            if (firstParameter.type === \"RestElement\") {\n              this.raise(TSErrors.SetAccesorCannotHaveRestParameter, {\n                at: this.state.curPosition(),\n              });\n            }\n          }\n          if (method[returnTypeKey]) {\n            this.raise(TSErrors.SetAccesorCannotHaveReturnType, {\n              at: method[returnTypeKey],\n            });\n          }\n        } else {\n          method.kind = \"method\";\n        }\n        return this.finishNode(method, \"TSMethodSignature\");\n      } else {\n        const property: N.TsPropertySignature = nodeAny;\n        if (readonly) property.readonly = true;\n        const type = this.tsTryParseTypeAnnotation();\n        if (type) property.typeAnnotation = type;\n        this.tsParseTypeMemberSemicolon();\n        return this.finishNode(property, \"TSPropertySignature\");\n      }\n    }\n\n    tsParseTypeMember(): N.TsTypeElement {\n      const node: any = this.startNode();\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n      }\n\n      if (this.match(tt._new)) {\n        const id = this.startNode<N.Identifier>();\n        this.next();\n        if (this.match(tt.parenL) || this.match(tt.lt)) {\n          return this.tsParseSignatureMember(\n            \"TSConstructSignatureDeclaration\",\n            node,\n          );\n        } else {\n          node.key = this.createIdentifier(id, \"new\");\n          return this.tsParsePropertyOrMethodSignature(node, false);\n        }\n      }\n\n      this.tsParseModifiers({\n        modified: node,\n        allowedModifiers: [\"readonly\"],\n        disallowedModifiers: [\n          \"declare\",\n          \"abstract\",\n          \"private\",\n          \"protected\",\n          \"public\",\n          \"static\",\n          \"override\",\n        ],\n      });\n\n      const idx = this.tsTryParseIndexSignature(node);\n      if (idx) {\n        return idx;\n      }\n\n      super.parsePropertyName(node);\n      if (\n        !node.computed &&\n        node.key.type === \"Identifier\" &&\n        (node.key.name === \"get\" || node.key.name === \"set\") &&\n        this.tsTokenCanFollowModifier()\n      ) {\n        node.kind = node.key.name;\n        super.parsePropertyName(node);\n      }\n      return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n    }\n\n    tsParseTypeLiteral(): N.TsTypeLiteral {\n      const node = this.startNode<N.TsTypeLiteral>();\n      node.members = this.tsParseObjectTypeMembers();\n      return this.finishNode(node, \"TSTypeLiteral\");\n    }\n\n    tsParseObjectTypeMembers(): Array<N.TsTypeElement> {\n      this.expect(tt.braceL);\n      const members = this.tsParseList(\n        \"TypeMembers\",\n        this.tsParseTypeMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return members;\n    }\n\n    tsIsStartOfMappedType(): boolean {\n      this.next();\n      if (this.eat(tt.plusMin)) {\n        return this.isContextual(tt._readonly);\n      }\n      if (this.isContextual(tt._readonly)) {\n        this.next();\n      }\n      if (!this.match(tt.bracketL)) {\n        return false;\n      }\n      this.next();\n      if (!this.tsIsIdentifier()) {\n        return false;\n      }\n      this.next();\n      return this.match(tt._in);\n    }\n\n    tsParseMappedTypeParameter(): N.TsTypeParameter {\n      const node = this.startNode<N.TsTypeParameter>();\n      node.name = this.tsParseTypeParameterName();\n      node.constraint = this.tsExpectThenParseType(tt._in);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsParseMappedType(): N.TsMappedType {\n      const node = this.startNode<N.TsMappedType>();\n\n      this.expect(tt.braceL);\n\n      if (this.match(tt.plusMin)) {\n        node.readonly = this.state.value;\n        this.next();\n        this.expectContextual(tt._readonly);\n      } else if (this.eatContextual(tt._readonly)) {\n        node.readonly = true;\n      }\n\n      this.expect(tt.bracketL);\n      node.typeParameter = this.tsParseMappedTypeParameter();\n      node.nameType = this.eatContextual(tt._as) ? this.tsParseType() : null;\n\n      this.expect(tt.bracketR);\n\n      if (this.match(tt.plusMin)) {\n        node.optional = this.state.value;\n        this.next();\n        this.expect(tt.question);\n      } else if (this.eat(tt.question)) {\n        node.optional = true;\n      }\n\n      node.typeAnnotation = this.tsTryParseType();\n      this.semicolon();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"TSMappedType\");\n    }\n\n    tsParseTupleType(): N.TsTupleType {\n      const node = this.startNode<N.TsTupleType>();\n      node.elementTypes = this.tsParseBracketedList(\n        \"TupleElementTypes\",\n        this.tsParseTupleElementType.bind(this),\n        /* bracket */ true,\n        /* skipFirstToken */ false,\n      );\n\n      // Validate the elementTypes to ensure that no mandatory elements\n      // follow optional elements\n      let seenOptionalElement = false;\n      let labeledElements: boolean | null = null;\n      node.elementTypes.forEach(elementNode => {\n        const { type } = elementNode;\n\n        if (\n          seenOptionalElement &&\n          type !== \"TSRestType\" &&\n          type !== \"TSOptionalType\" &&\n          !(type === \"TSNamedTupleMember\" && elementNode.optional)\n        ) {\n          this.raise(TSErrors.OptionalTypeBeforeRequired, {\n            at: elementNode,\n          });\n        }\n\n        seenOptionalElement ||=\n          (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n          type === \"TSOptionalType\";\n\n        // When checking labels, check the argument of the spread operator\n        let checkType = type;\n        if (type === \"TSRestType\") {\n          elementNode = elementNode.typeAnnotation;\n          checkType = elementNode.type;\n        }\n\n        const isLabeled = checkType === \"TSNamedTupleMember\";\n        labeledElements ??= isLabeled;\n        if (labeledElements !== isLabeled) {\n          this.raise(TSErrors.MixedLabeledAndUnlabeledElements, {\n            at: elementNode,\n          });\n        }\n      });\n\n      return this.finishNode(node, \"TSTupleType\");\n    }\n\n    tsParseTupleElementType(): N.TsType | N.TsNamedTupleMember {\n      // parses `...TsType[]`\n\n      const { startLoc } = this.state;\n\n      const rest = this.eat(tt.ellipsis);\n      let type: N.TsType | N.TsNamedTupleMember = this.tsParseType();\n      const optional = this.eat(tt.question);\n      const labeled = this.eat(tt.colon);\n\n      if (labeled) {\n        const labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(type);\n        labeledNode.optional = optional;\n\n        if (\n          type.type === \"TSTypeReference\" &&\n          !type.typeParameters &&\n          type.typeName.type === \"Identifier\"\n        ) {\n          labeledNode.label = type.typeName;\n        } else {\n          this.raise(TSErrors.InvalidTupleMemberLabel, { at: type });\n          // @ts-expect-error This produces an invalid AST, but at least we don't drop\n          // nodes representing the invalid source.\n          labeledNode.label = type;\n        }\n\n        labeledNode.elementType = this.tsParseType();\n        type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n      } else if (optional) {\n        const optionalTypeNode = this.startNodeAtNode<N.TsOptionalType>(type);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode = this.startNodeAt<N.TsRestType>(startLoc);\n        restNode.typeAnnotation = type;\n        type = this.finishNode(restNode, \"TSRestType\");\n      }\n\n      return type;\n    }\n\n    tsParseParenthesizedType(): N.TsParenthesizedType {\n      const node = this.startNode<N.TsParenthesizedType>();\n      this.expect(tt.parenL);\n      node.typeAnnotation = this.tsParseType();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSParenthesizedType\");\n    }\n\n    tsParseFunctionOrConstructorType(\n      type: \"TSFunctionType\" | \"TSConstructorType\",\n      abstract?: boolean,\n    ): N.TsFunctionOrConstructorType {\n      const node = this.startNode<\n        N.TsFunctionOrConstructorType | N.TsConstructorType\n      >();\n      if (type === \"TSConstructorType\") {\n        (node as Undone<N.TsConstructorType>).abstract = !!abstract;\n        if (abstract) this.next();\n        this.next(); // eat `new`\n      }\n      this.tsInAllowConditionalTypesContext(() =>\n        this.tsFillSignature(tt.arrow, node),\n      );\n      return this.finishNode(node, type);\n    }\n\n    tsParseLiteralTypeNode(): N.TsLiteralType {\n      const node = this.startNode<N.TsLiteralType>();\n      // @ts-expect-error refine typings\n      node.literal = (() => {\n        switch (this.state.type) {\n          case tt.num:\n          case tt.bigint:\n          case tt.string:\n          case tt._true:\n          case tt._false:\n            // For compatibility to estree we cannot call parseLiteral directly here\n            return super.parseExprAtom();\n          default:\n            throw this.unexpected();\n        }\n      })();\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    tsParseTemplateLiteralType(): N.TsType {\n      const node = this.startNode<N.TsLiteralType>();\n      node.literal = super.parseTemplate(false);\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    parseTemplateSubstitution(): N.TsType | N.Node {\n      if (this.state.inType) return this.tsParseType();\n      return super.parseTemplateSubstitution();\n    }\n\n    tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n      const thisKeyword = this.tsParseThisTypeNode();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        return this.tsParseThisTypePredicate(thisKeyword);\n      } else {\n        return thisKeyword;\n      }\n    }\n\n    tsParseNonArrayType(): N.TsType {\n      switch (this.state.type) {\n        case tt.string:\n        case tt.num:\n        case tt.bigint:\n        case tt._true:\n        case tt._false:\n          return this.tsParseLiteralTypeNode();\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            const node = this.startNode<N.TsLiteralType>();\n            const nextToken = this.lookahead();\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n              throw this.unexpected();\n            }\n            // @ts-expect-error: parseMaybeUnary must returns unary expression\n            node.literal = this.parseMaybeUnary();\n            return this.finishNode(node, \"TSLiteralType\");\n          }\n          break;\n        case tt._this:\n          return this.tsParseThisTypeOrThisTypePredicate();\n        case tt._typeof:\n          return this.tsParseTypeQuery();\n        case tt._import:\n          return this.tsParseImportType();\n        case tt.braceL:\n          return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n            ? this.tsParseMappedType()\n            : this.tsParseTypeLiteral();\n        case tt.bracketL:\n          return this.tsParseTupleType();\n        case tt.parenL:\n          if (process.env.BABEL_8_BREAKING) {\n            if (!this.options.createParenthesizedExpressions) {\n              const startLoc = this.state.startLoc;\n              this.next();\n              const type = this.tsParseType();\n              this.expect(tt.parenR);\n              this.addExtra(type, \"parenthesized\", true);\n              this.addExtra(type, \"parenStart\", startLoc.index);\n              return type;\n            }\n          }\n\n          return this.tsParseParenthesizedType();\n        case tt.templateNonTail:\n        case tt.templateTail:\n          return this.tsParseTemplateLiteralType();\n        default: {\n          const { type } = this.state;\n          if (\n            tokenIsIdentifier(type) ||\n            type === tt._void ||\n            type === tt._null\n          ) {\n            const nodeType =\n              type === tt._void\n                ? \"TSVoidKeyword\"\n                : type === tt._null\n                ? \"TSNullKeyword\"\n                : keywordTypeFromName(this.state.value);\n            if (\n              nodeType !== undefined &&\n              this.lookaheadCharCode() !== charCodes.dot\n            ) {\n              const node = this.startNode<N.TsKeywordType>();\n              this.next();\n              return this.finishNode(node, nodeType);\n            }\n            return this.tsParseTypeReference();\n          }\n        }\n      }\n\n      throw this.unexpected();\n    }\n\n    tsParseArrayTypeOrHigher(): N.TsType {\n      let type = this.tsParseNonArrayType();\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n        if (this.match(tt.bracketR)) {\n          const node = this.startNodeAtNode<N.TsArrayType>(type);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node = this.startNodeAtNode<N.TsIndexedAccessType>(type);\n          node.objectType = type;\n          node.indexType = this.tsParseType();\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSIndexedAccessType\");\n        }\n      }\n      return type;\n    }\n\n    tsParseTypeOperator(): N.TsTypeOperator {\n      const node = this.startNode<N.TsTypeOperator>();\n      const operator = this.state.value;\n      this.next(); // eat operator\n      node.operator = operator;\n      node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n      if (operator === \"readonly\") {\n        this.tsCheckTypeAnnotationForReadOnly(\n          // @ts-expect-error todo(flow->ts)\n          node,\n        );\n      }\n\n      return this.finishNode(node, \"TSTypeOperator\");\n    }\n\n    tsCheckTypeAnnotationForReadOnly(node: N.Node) {\n      switch (node.typeAnnotation.type) {\n        case \"TSTupleType\":\n        case \"TSArrayType\":\n          return;\n        default:\n          this.raise(TSErrors.UnexpectedReadonly, { at: node });\n      }\n    }\n\n    tsParseInferType(): N.TsInferType {\n      const node = this.startNode<N.TsInferType>();\n      this.expectContextual(tt._infer);\n      const typeParameter = this.startNode<N.TsTypeParameter>();\n      typeParameter.name = this.tsParseTypeParameterName();\n      typeParameter.constraint = this.tsTryParse(() =>\n        this.tsParseConstraintForInferType(),\n      );\n      node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      return this.finishNode(node, \"TSInferType\");\n    }\n\n    tsParseConstraintForInferType() {\n      if (this.eat(tt._extends)) {\n        const constraint = this.tsInDisallowConditionalTypesContext(() =>\n          this.tsParseType(),\n        );\n        if (\n          this.state.inDisallowConditionalTypesContext ||\n          !this.match(tt.question)\n        ) {\n          return constraint;\n        }\n      }\n    }\n\n    tsParseTypeOperatorOrHigher(): N.TsType {\n      const isTypeOperator =\n        tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n      return isTypeOperator\n        ? this.tsParseTypeOperator()\n        : this.isContextual(tt._infer)\n        ? this.tsParseInferType()\n        : this.tsInAllowConditionalTypesContext(() =>\n            this.tsParseArrayTypeOrHigher(),\n          );\n    }\n\n    tsParseUnionOrIntersectionType(\n      kind: \"TSUnionType\" | \"TSIntersectionType\",\n      parseConstituentType: () => N.TsType,\n      operator: TokenType,\n    ): N.TsType {\n      const node = this.startNode<N.TsUnionType | N.TsIntersectionType>();\n      const hasLeadingOperator = this.eat(operator);\n      const types = [];\n      do {\n        types.push(parseConstituentType());\n      } while (this.eat(operator));\n      if (types.length === 1 && !hasLeadingOperator) {\n        return types[0];\n      }\n      node.types = types;\n      return this.finishNode(node, kind);\n    }\n\n    tsParseIntersectionTypeOrHigher(): N.TsType {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSIntersectionType\",\n        this.tsParseTypeOperatorOrHigher.bind(this),\n        tt.bitwiseAND,\n      );\n    }\n\n    tsParseUnionTypeOrHigher() {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSUnionType\",\n        this.tsParseIntersectionTypeOrHigher.bind(this),\n        tt.bitwiseOR,\n      );\n    }\n\n    tsIsStartOfFunctionType() {\n      if (this.match(tt.lt)) {\n        return true;\n      }\n      return (\n        this.match(tt.parenL) &&\n        this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n      );\n    }\n\n    tsSkipParameterStart(): boolean {\n      if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n        this.next();\n        return true;\n      }\n\n      if (this.match(tt.braceL)) {\n        // Return true if we can parse an object pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          this.parseObjectLike(tt.braceR, true);\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      if (this.match(tt.bracketL)) {\n        this.next();\n        // Return true if we can parse an array pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          super.parseBindingList(\n            tt.bracketR,\n            charCodes.rightSquareBracket,\n            true,\n          );\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      return false;\n    }\n\n    tsIsUnambiguouslyStartOfFunctionType(): boolean {\n      this.next();\n      if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n        // ( )\n        // ( ...\n        return true;\n      }\n      if (this.tsSkipParameterStart()) {\n        if (\n          this.match(tt.colon) ||\n          this.match(tt.comma) ||\n          this.match(tt.question) ||\n          this.match(tt.eq)\n        ) {\n          // ( xxx :\n          // ( xxx ,\n          // ( xxx ?\n          // ( xxx =\n          return true;\n        }\n        if (this.match(tt.parenR)) {\n          this.next();\n          if (this.match(tt.arrow)) {\n            // ( xxx ) =>\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    tsParseTypeOrTypePredicateAnnotation(\n      returnToken: TokenType,\n    ): N.TsTypeAnnotation {\n      return this.tsInType(() => {\n        const t = this.startNode<N.TsTypeAnnotation>();\n        this.expect(returnToken);\n\n        const node = this.startNode<N.TsTypePredicate>();\n\n        const asserts = !!this.tsTryParse(\n          this.tsParseTypePredicateAsserts.bind(this),\n        );\n\n        if (asserts && this.match(tt._this)) {\n          // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n          // : asserts this is type\n          let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n          // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n          // : asserts this\n          if (thisTypePredicate.type === \"TSThisType\") {\n            node.parameterName = thisTypePredicate;\n            node.asserts = true;\n            (node as N.TsTypePredicate).typeAnnotation = null;\n            thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n          } else {\n            this.resetStartLocationFromNode(thisTypePredicate, node);\n            thisTypePredicate.asserts = true;\n          }\n          t.typeAnnotation = thisTypePredicate;\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        const typePredicateVariable =\n          this.tsIsIdentifier() &&\n          this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n        if (!typePredicateVariable) {\n          if (!asserts) {\n            // : type\n            return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n          }\n\n          // : asserts foo\n          node.parameterName = this.parseIdentifier();\n          node.asserts = asserts;\n          (node as N.TsTypePredicate).typeAnnotation = null;\n          t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        // : asserts foo is type\n        const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n        node.parameterName = typePredicateVariable;\n        node.typeAnnotation = type;\n        node.asserts = asserts;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      });\n    }\n\n    tsTryParseTypeOrTypePredicateAnnotation():\n      | N.TsTypeAnnotation\n      | undefined\n      | null {\n      return this.match(tt.colon)\n        ? this.tsParseTypeOrTypePredicateAnnotation(tt.colon)\n        : undefined;\n    }\n\n    tsTryParseTypeAnnotation(): N.TsTypeAnnotation | undefined | null {\n      return this.match(tt.colon) ? this.tsParseTypeAnnotation() : undefined;\n    }\n\n    tsTryParseType(): N.TsType | undefined | null {\n      return this.tsEatThenParseType(tt.colon);\n    }\n\n    tsParseTypePredicatePrefix(): N.Identifier | undefined | null {\n      const id = this.parseIdentifier();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        this.next();\n        return id;\n      }\n    }\n\n    tsParseTypePredicateAsserts(): boolean {\n      if (this.state.type !== tt._asserts) {\n        return false;\n      }\n      const containsEsc = this.state.containsEsc;\n      this.next();\n      if (!tokenIsIdentifier(this.state.type) && !this.match(tt._this)) {\n        return false;\n      }\n\n      if (containsEsc) {\n        this.raise(Errors.InvalidEscapedReservedWord, {\n          at: this.state.lastTokStartLoc,\n          reservedWord: \"asserts\",\n        });\n      }\n\n      return true;\n    }\n\n    tsParseTypeAnnotation(\n      eatColon = true,\n      t: Undone<N.TsTypeAnnotation> = this.startNode<N.TsTypeAnnotation>(),\n    ): N.TsTypeAnnotation {\n      this.tsInType(() => {\n        if (eatColon) this.expect(tt.colon);\n        t.typeAnnotation = this.tsParseType();\n      });\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    }\n\n    /** Be sure to be in a type context before calling this, using `tsInType`. */\n    tsParseType(): N.TsType {\n      // Need to set `state.inType` so that we don't parse JSX in a type context.\n      assert(this.state.inType);\n      const type = this.tsParseNonConditionalType();\n\n      if (\n        this.state.inDisallowConditionalTypesContext ||\n        this.hasPrecedingLineBreak() ||\n        !this.eat(tt._extends)\n      ) {\n        return type;\n      }\n      const node = this.startNodeAtNode<N.TsConditionalType>(type);\n      node.checkType = type;\n\n      node.extendsType = this.tsInDisallowConditionalTypesContext(() =>\n        this.tsParseNonConditionalType(),\n      );\n\n      this.expect(tt.question);\n      node.trueType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      this.expect(tt.colon);\n      node.falseType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      return this.finishNode(node, \"TSConditionalType\");\n    }\n\n    isAbstractConstructorSignature(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._new\n      );\n    }\n\n    tsParseNonConditionalType(): N.TsType {\n      if (this.tsIsStartOfFunctionType()) {\n        return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n      }\n      if (this.match(tt._new)) {\n        // As in `new () => Date`\n        return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n      } else if (this.isAbstractConstructorSignature()) {\n        // As in `abstract new () => Date`\n        return this.tsParseFunctionOrConstructorType(\n          \"TSConstructorType\",\n          /* abstract */ true,\n        );\n      }\n      return this.tsParseUnionTypeOrHigher();\n    }\n\n    tsParseTypeAssertion(): N.TsTypeAssertion {\n      if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n        this.raise(TSErrors.ReservedTypeAssertion, { at: this.state.startLoc });\n      }\n\n      const node = this.startNode<N.TsTypeAssertion>();\n      node.typeAnnotation = this.tsInType(() => {\n        this.next(); // \"<\"\n        return this.match(tt._const)\n          ? this.tsParseTypeReference()\n          : this.tsParseType();\n      });\n      this.expect(tt.gt);\n      node.expression = this.parseMaybeUnary();\n      return this.finishNode(node, \"TSTypeAssertion\");\n    }\n\n    tsParseHeritageClause(\n      token: \"extends\" | \"implements\",\n    ): Array<N.TsExpressionWithTypeArguments> {\n      const originalStartLoc = this.state.startLoc;\n\n      const delimitedList = this.tsParseDelimitedList(\n        \"HeritageClauseElement\",\n        () => {\n          const node = this.startNode<N.TsExpressionWithTypeArguments>();\n          node.expression = this.tsParseEntityName();\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.tsParseTypeArguments();\n          }\n\n          return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n        },\n      );\n\n      if (!delimitedList.length) {\n        this.raise(TSErrors.EmptyHeritageClauseType, {\n          at: originalStartLoc,\n          token,\n        });\n      }\n\n      return delimitedList;\n    }\n\n    tsParseInterfaceDeclaration(\n      node: Undone<N.TsInterfaceDeclaration>,\n      properties: {\n        declare?: true;\n      } = {},\n    ): N.TsInterfaceDeclaration | undefined | null {\n      if (this.hasFollowingLineBreak()) return null;\n      this.expectContextual(tt._interface);\n      if (properties.declare) node.declare = true;\n      if (tokenIsIdentifier(this.state.type)) {\n        node.id = this.parseIdentifier();\n        this.checkIdentifier(node.id, BIND_TS_INTERFACE);\n      } else {\n        node.id = null;\n        this.raise(TSErrors.MissingInterfaceName, { at: this.state.startLoc });\n      }\n\n      node.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutModifiers.bind(this),\n      );\n      if (this.eat(tt._extends)) {\n        node.extends = this.tsParseHeritageClause(\"extends\");\n      }\n      const body = this.startNode<N.TSInterfaceBody>();\n      body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n      node.body = this.finishNode(body, \"TSInterfaceBody\");\n      return this.finishNode(node, \"TSInterfaceDeclaration\");\n    }\n\n    tsParseTypeAliasDeclaration(\n      node: N.TsTypeAliasDeclaration,\n    ): N.TsTypeAliasDeclaration {\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(node.id, BIND_TS_TYPE);\n\n      node.typeAnnotation = this.tsInType(() => {\n        node.typeParameters = this.tsTryParseTypeParameters(\n          this.tsParseInOutModifiers.bind(this),\n        );\n\n        this.expect(tt.eq);\n\n        if (\n          this.isContextual(tt._intrinsic) &&\n          this.lookahead().type !== tt.dot\n        ) {\n          const node = this.startNode<N.TsKeywordType>();\n          this.next();\n          return this.finishNode(node, \"TSIntrinsicKeyword\");\n        }\n\n        return this.tsParseType();\n      });\n\n      this.semicolon();\n      return this.finishNode(node, \"TSTypeAliasDeclaration\");\n    }\n\n    tsInNoContext<T>(cb: () => T): T {\n      const oldContext = this.state.context;\n      this.state.context = [oldContext[0]];\n      try {\n        return cb();\n      } finally {\n        this.state.context = oldContext;\n      }\n    }\n\n    /**\n     * Runs `cb` in a type context.\n     * This should be called one token *before* the first type token,\n     * so that the call to `next()` is run in type context.\n     */\n    tsInType<T>(cb: () => T): T {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inType = oldInType;\n      }\n    }\n\n    tsInDisallowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsInAllowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = false;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsEatThenParseType(token: TokenType): N.TsType | typeof undefined {\n      return !this.match(token) ? undefined : this.tsNextThenParseType();\n    }\n\n    tsExpectThenParseType(token: TokenType): N.TsType {\n      return this.tsDoThenParseType(() => this.expect(token));\n    }\n\n    tsNextThenParseType(): N.TsType {\n      return this.tsDoThenParseType(() => this.next());\n    }\n\n    tsDoThenParseType(cb: () => void): N.TsType {\n      return this.tsInType(() => {\n        cb();\n        return this.tsParseType();\n      });\n    }\n\n    tsParseEnumMember(): N.TsEnumMember {\n      const node = this.startNode<N.TsEnumMember>();\n      // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n      node.id = this.match(tt.string)\n        ? super.parseStringLiteral(this.state.value)\n        : this.parseIdentifier(/* liberal */ true);\n      if (this.eat(tt.eq)) {\n        node.initializer = super.parseMaybeAssignAllowIn();\n      }\n      return this.finishNode(node, \"TSEnumMember\");\n    }\n\n    tsParseEnumDeclaration(\n      node: Undone<N.TsEnumDeclaration>,\n      properties: {\n        const?: true;\n        declare?: true;\n      } = {},\n    ): N.TsEnumDeclaration {\n      if (properties.const) node.const = true;\n      if (properties.declare) node.declare = true;\n      this.expectContextual(tt._enum);\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(\n        node.id,\n        node.const ? BIND_TS_CONST_ENUM : BIND_TS_ENUM,\n      );\n\n      this.expect(tt.braceL);\n      node.members = this.tsParseDelimitedList(\n        \"EnumMembers\",\n        this.tsParseEnumMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"TSEnumDeclaration\");\n    }\n\n    tsParseModuleBlock(): N.TsModuleBlock {\n      const node = this.startNode<N.TsModuleBlock>();\n      this.scope.enter(SCOPE_OTHER);\n\n      this.expect(tt.braceL);\n      // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n      super.parseBlockOrModuleBlockBody(\n        (node.body = []),\n        /* directives */ undefined,\n        /* topLevel */ true,\n        /* end */ tt.braceR,\n      );\n      this.scope.exit();\n      return this.finishNode(node, \"TSModuleBlock\");\n    }\n\n    tsParseModuleOrNamespaceDeclaration(\n      node: Undone<N.TsModuleDeclaration>,\n      nested: boolean = false,\n    ): N.TsModuleDeclaration {\n      node.id = this.parseIdentifier();\n\n      if (!nested) {\n        this.checkIdentifier(node.id, BIND_TS_NAMESPACE);\n      }\n\n      if (this.eat(tt.dot)) {\n        const inner = this.startNode<N.TsModuleDeclaration>();\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\n        // @ts-expect-error Fixme: refine typings\n        node.body = inner;\n      } else {\n        this.scope.enter(SCOPE_TS_MODULE);\n        this.prodParam.enter(PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      }\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseAmbientExternalModuleDeclaration(\n      node: N.TsModuleDeclaration,\n    ): N.TsModuleDeclaration {\n      if (this.isContextual(tt._global)) {\n        node.global = true;\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.id = super.parseStringLiteral(this.state.value);\n      } else {\n        this.unexpected();\n      }\n      if (this.match(tt.braceL)) {\n        this.scope.enter(SCOPE_TS_MODULE);\n        this.prodParam.enter(PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      } else {\n        this.semicolon();\n      }\n\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseImportEqualsDeclaration(\n      node: Undone<N.TsImportEqualsDeclaration>,\n      isExport?: boolean,\n    ): N.TsImportEqualsDeclaration {\n      node.isExport = isExport || false;\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(node.id, BIND_FLAGS_TS_IMPORT);\n      this.expect(tt.eq);\n      const moduleReference = this.tsParseModuleReference();\n      if (\n        node.importKind === \"type\" &&\n        moduleReference.type !== \"TSExternalModuleReference\"\n      ) {\n        this.raise(TSErrors.ImportAliasHasImportType, {\n          at: moduleReference,\n        });\n      }\n      node.moduleReference = moduleReference;\n      this.semicolon();\n      return this.finishNode(node, \"TSImportEqualsDeclaration\");\n    }\n\n    tsIsExternalModuleReference(): boolean {\n      return (\n        this.isContextual(tt._require) &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      );\n    }\n\n    tsParseModuleReference(): N.TsModuleReference {\n      return this.tsIsExternalModuleReference()\n        ? this.tsParseExternalModuleReference()\n        : this.tsParseEntityName(/* allowReservedWords */ false);\n    }\n\n    tsParseExternalModuleReference(): N.TsExternalModuleReference {\n      const node = this.startNode<N.TsExternalModuleReference>();\n      this.expectContextual(tt._require);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        throw this.unexpected();\n      }\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.expression = super.parseExprAtom() as N.StringLiteral;\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSExternalModuleReference\");\n    }\n\n    // Utilities\n\n    tsLookAhead<T>(f: () => T): T {\n      const state = this.state.clone();\n      const res = f();\n      this.state = state;\n      return res;\n    }\n\n    tsTryParseAndCatch<T extends N.NodeBase | undefined | null>(\n      f: () => T,\n    ): T | undefined | null {\n      const result = this.tryParse(\n        abort =>\n          // @ts-expect-error todo(flow->ts)\n          f() || abort(),\n      );\n\n      if (result.aborted || !result.node) return undefined;\n      if (result.error) this.state = result.failState;\n      // @ts-expect-error refine typings\n      return result.node;\n    }\n\n    tsTryParse<T>(f: () => T | undefined | false): T | undefined {\n      const state = this.state.clone();\n      const result = f();\n      if (result !== undefined && result !== false) {\n        return result;\n      } else {\n        this.state = state;\n        return undefined;\n      }\n    }\n\n    tsTryParseDeclare(nany: any): N.Declaration | undefined | null {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      let starttype = this.state.type;\n      let kind: \"let\" | null;\n\n      if (this.isContextual(tt._let)) {\n        starttype = tt._var;\n        kind = \"let\" as const;\n      }\n\n      // @ts-expect-error refine typings\n      return this.tsInAmbientContext(() => {\n        if (starttype === tt._function) {\n          nany.declare = true;\n          return super.parseFunctionStatement(\n            nany,\n            /* async */ false,\n            /* isHangingDeclaration */ false,\n          );\n        }\n\n        if (starttype === tt._class) {\n          // While this is also set by tsParseExpressionStatement, we need to set it\n          // before parsing the class declaration to know how to register it in the scope.\n          nany.declare = true;\n          return this.parseClass(\n            nany,\n            /* isStatement */ true,\n            /* optionalId */ false,\n          );\n        }\n\n        if (starttype === tt._enum) {\n          return this.tsParseEnumDeclaration(nany, { declare: true });\n        }\n\n        if (starttype === tt._global) {\n          return this.tsParseAmbientExternalModuleDeclaration(nany);\n        }\n\n        if (starttype === tt._const || starttype === tt._var) {\n          if (!this.match(tt._const) || !this.isLookaheadContextual(\"enum\")) {\n            nany.declare = true;\n            return this.parseVarStatement(nany, kind || this.state.value, true);\n          }\n\n          // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n          this.expect(tt._const);\n          return this.tsParseEnumDeclaration(nany, {\n            const: true,\n            declare: true,\n          });\n        }\n\n        if (starttype === tt._interface) {\n          const result = this.tsParseInterfaceDeclaration(nany, {\n            declare: true,\n          });\n          if (result) return result;\n        }\n\n        if (tokenIsIdentifier(starttype)) {\n          return this.tsParseDeclaration(\n            nany,\n            this.state.value,\n            /* next */ true,\n            /* decorators */ null,\n          );\n        }\n      });\n    }\n\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n    tsTryParseExportDeclaration(): N.Declaration | undefined | null {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.value,\n        /* next */ true,\n        /* decorators */ null,\n      );\n    }\n\n    tsParseExpressionStatement(\n      node: Undone<N.TsModuleDeclaration>,\n      expr: N.Identifier,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined | null {\n      switch (expr.name) {\n        case \"declare\": {\n          const declaration = this.tsTryParseDeclare(node);\n          if (declaration) {\n            declaration.declare = true;\n            return declaration;\n          }\n          break;\n        }\n        case \"global\":\n          // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n          // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n          if (this.match(tt.braceL)) {\n            this.scope.enter(SCOPE_TS_MODULE);\n            this.prodParam.enter(PARAM);\n            const mod = node;\n            mod.global = true;\n            mod.id = expr;\n            mod.body = this.tsParseModuleBlock();\n            this.scope.exit();\n            this.prodParam.exit();\n            return this.finishNode(mod, \"TSModuleDeclaration\");\n          }\n          break;\n\n        default:\n          return this.tsParseDeclaration(\n            node,\n            expr.name,\n            /* next */ false,\n            decorators,\n          );\n      }\n    }\n\n    // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n    tsParseDeclaration(\n      node: any,\n      value: string,\n      next: boolean,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined | null {\n      // no declaration apart from enum can be followed by a line break.\n      switch (value) {\n        case \"abstract\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            (this.match(tt._class) || tokenIsIdentifier(this.state.type))\n          ) {\n            return this.tsParseAbstractDeclaration(node, decorators);\n          }\n          break;\n\n        case \"module\":\n          if (this.tsCheckLineTerminator(next)) {\n            if (this.match(tt.string)) {\n              return this.tsParseAmbientExternalModuleDeclaration(node);\n            } else if (tokenIsIdentifier(this.state.type)) {\n              return this.tsParseModuleOrNamespaceDeclaration(node);\n            }\n          }\n          break;\n\n        case \"namespace\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case \"type\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseTypeAliasDeclaration(node);\n          }\n          break;\n      }\n    }\n\n    tsCheckLineTerminator(next: boolean) {\n      if (next) {\n        if (this.hasFollowingLineBreak()) return false;\n        this.next();\n        return true;\n      }\n      return !this.isLineTerminator();\n    }\n\n    tsTryParseGenericAsyncArrowFunction(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined | null {\n      if (!this.match(tt.lt)) {\n        return undefined;\n      }\n\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n      this.state.maybeInArrowParameters = true;\n\n      const res: Undone<N.ArrowFunctionExpression> | undefined | null =\n        this.tsTryParseAndCatch(() => {\n          const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n          node.typeParameters = this.tsParseTypeParameters();\n          // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n          super.parseFunctionParams(node);\n          node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n          this.expect(tt.arrow);\n          return node;\n        });\n\n      this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n      if (!res) {\n        return undefined;\n      }\n\n      return super.parseArrowExpression(\n        res,\n        /* params are already set */ null,\n        /* async */ true,\n      );\n    }\n\n    // Used when parsing type arguments from ES productions, where the first token\n    // has been created without state.inType. Thus we need to rescan the lt token.\n    tsParseTypeArgumentsInExpression(): N.TsTypeParameterInstantiation | void {\n      if (this.reScan_lt() !== tt.lt) {\n        return undefined;\n      }\n      return this.tsParseTypeArguments();\n    }\n\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n      const node = this.startNode<N.TsTypeParameterInstantiation>();\n      node.params = this.tsInType(() =>\n        // Temporarily remove a JSX parsing context, which makes us scan different tokens.\n        this.tsInNoContext(() => {\n          this.expect(tt.lt);\n          return this.tsParseDelimitedList(\n            \"TypeParametersOrArguments\",\n            this.tsParseType.bind(this),\n          );\n        }),\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeArguments, { at: node });\n      }\n      this.expect(tt.gt);\n      return this.finishNode(node, \"TSTypeParameterInstantiation\");\n    }\n\n    tsIsDeclarationStart(): boolean {\n      return tokenIsTSDeclarationStart(this.state.type);\n    }\n\n    // ======================================================\n    // OVERRIDES\n    // ======================================================\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.tsIsDeclarationStart()) return false;\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseAssignableListItem(\n      allowModifiers: boolean | undefined | null,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location to include modifiers in range\n      const startLoc = this.state.startLoc;\n\n      let accessibility: N.Accessibility | undefined | null;\n      let readonly = false;\n      let override = false;\n      if (allowModifiers !== undefined) {\n        const modified: ModifierBase = {};\n        this.tsParseModifiers({\n          modified,\n          allowedModifiers: [\n            \"public\",\n            \"private\",\n            \"protected\",\n            \"override\",\n            \"readonly\",\n          ],\n        });\n        accessibility = modified.accessibility;\n        override = modified.override;\n        readonly = modified.readonly;\n        if (\n          allowModifiers === false &&\n          (accessibility || readonly || override)\n        ) {\n          this.raise(TSErrors.UnexpectedParameterModifier, { at: startLoc });\n        }\n      }\n\n      const left = this.parseMaybeDefault();\n      this.parseAssignableListItemTypes(left);\n      const elt = this.parseMaybeDefault(left.loc.start, left);\n      if (accessibility || readonly || override) {\n        const pp = this.startNodeAt<N.TSParameterProperty>(startLoc);\n        if (decorators.length) {\n          pp.decorators = decorators;\n        }\n        if (accessibility) pp.accessibility = accessibility;\n        if (readonly) pp.readonly = readonly;\n        if (override) pp.override = override;\n        if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n          this.raise(TSErrors.UnsupportedParameterPropertyKind, { at: pp });\n        }\n        pp.parameter = elt as any as N.Identifier | N.AssignmentPattern;\n        return this.finishNode(pp, \"TSParameterProperty\");\n      }\n\n      if (decorators.length) {\n        left.decorators = decorators;\n      }\n\n      return elt;\n    }\n\n    isSimpleParameter(node: N.Pattern | N.TSParameterProperty) {\n      return (\n        (node.type === \"TSParameterProperty\" &&\n          super.isSimpleParameter(node.parameter)) ||\n        super.isSimpleParameter(node)\n      );\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n\n      const bodilessType =\n        type === \"FunctionDeclaration\"\n          ? \"TSDeclareFunction\"\n          : type === \"ClassMethod\" || type === \"ClassPrivateMethod\"\n          ? \"TSDeclareMethod\"\n          : undefined;\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n        return this.finishNode(node, bodilessType);\n      }\n      if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n        this.raise(TSErrors.DeclareFunctionHasImplementation, { at: node });\n        if ((node as Undone<N.FunctionDeclaration>).declare) {\n          return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        }\n      }\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    registerFunctionStatementId(node: N.Function): void {\n      if (!node.body && node.id) {\n        // Function ids are validated after parsing their body.\n        // For bodyless function, we need to do it here.\n        this.checkIdentifier(node.id, BIND_TS_AMBIENT);\n      } else {\n        super.registerFunctionStatementId(node);\n      }\n    }\n\n    tsCheckForInvalidTypeCasts(items: Array<N.Expression | undefined | null>) {\n      items.forEach(node => {\n        if (node?.type === \"TSTypeCastExpression\") {\n          this.raise(TSErrors.UnexpectedTypeAnnotation, {\n            at: node.typeAnnotation,\n          });\n        }\n      });\n    }\n\n    toReferencedList(\n      exprList: Array<N.Expression | undefined | null>,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isInParens?: boolean,\n    ): Array<N.Expression | undefined | null> {\n      // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\n      //\n      // Note that `f<T>(a:b)` goes through a different path and is handled\n      // in `parseSubscript` directly.\n      this.tsCheckForInvalidTypeCasts(exprList);\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      if (node.type === \"ArrayExpression\") {\n        this.tsCheckForInvalidTypeCasts(node.elements);\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n        // When ! is consumed as a postfix operator (non-null assertion),\n        // disallow JSX tag forming after. e.g. When parsing `p! < n.p!`\n        // `<n.p` can not be a start of JSX tag\n        this.state.canStartJSXElement = false;\n        this.next();\n\n        const nonNullExpression =\n          this.startNodeAt<N.TsNonNullExpression>(startLoc);\n        nonNullExpression.expression = base;\n        return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n      }\n\n      let isOptionalCall = false;\n      if (\n        this.match(tt.questionDot) &&\n        this.lookaheadCharCode() === charCodes.lessThan\n      ) {\n        if (noCalls) {\n          state.stop = true;\n          return base;\n        }\n        state.optionalChainMember = isOptionalCall = true;\n        this.next();\n      }\n\n      // handles 'f<<T>'\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        let missingParenErrorLoc;\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // There are number of things we are going to \"maybe\" parse, like type arguments on\n        // tagged template expressions. If any of them fail, walk it back and continue.\n        const result = this.tsTryParseAndCatch(() => {\n          if (!noCalls && this.atPossibleAsyncArrow(base)) {\n            // Almost certainly this is a generic async function `async <T>() => ...\n            // But it might be a call with a type argument `async<T>();`\n            const asyncArrowFn =\n              this.tsTryParseGenericAsyncArrowFunction(startLoc);\n            if (asyncArrowFn) {\n              return asyncArrowFn;\n            }\n          }\n\n          const typeArguments = this.tsParseTypeArgumentsInExpression();\n          if (!typeArguments) return;\n\n          if (isOptionalCall && !this.match(tt.parenL)) {\n            missingParenErrorLoc = this.state.curPosition();\n            return;\n          }\n\n          if (tokenIsTemplate(this.state.type)) {\n            const result = super.parseTaggedTemplateExpression(\n              base,\n\n              startLoc,\n              state,\n            );\n            result.typeParameters = typeArguments;\n            return result;\n          }\n\n          if (!noCalls && this.eat(tt.parenL)) {\n            const node = this.startNodeAt<\n              N.CallExpression | N.OptionalCallExpression\n            >(startLoc);\n            node.callee = base;\n            // possibleAsync always false here, because we would have handled it above.\n            // @ts-expect-error (won't be any undefined arguments)\n            node.arguments = this.parseCallExpressionArguments(\n              tt.parenR,\n              /* possibleAsync */ false,\n            );\n\n            // Handles invalid case: `f<T>(a:b)`\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n\n            node.typeParameters = typeArguments;\n            if (state.optionalChainMember) {\n              (node as Undone<N.OptionalCallExpression>).optional =\n                isOptionalCall;\n            }\n\n            return this.finishCallExpression(node, state.optionalChainMember);\n          }\n\n          const tokenType = this.state.type;\n          if (\n            // a<b>>c is not (a<b>)>c, but a<(b>>c)\n            tokenType === tt.gt ||\n            // a<b>>>c is not (a<b>)>>c, but a<(b>>>c)\n            tokenType === tt.bitShiftR ||\n            // a<b>c is (a<b)>c\n            (tokenType !== tt.parenL &&\n              tokenCanStartExpression(tokenType) &&\n              !this.hasPrecedingLineBreak())\n          ) {\n            // Bail out.\n            return;\n          }\n\n          const node = this.startNodeAt<N.TsInstantiationExpression>(startLoc);\n          node.expression = base;\n          node.typeParameters = typeArguments;\n          return this.finishNode(node, \"TSInstantiationExpression\");\n        });\n\n        if (missingParenErrorLoc) {\n          this.unexpected(missingParenErrorLoc, tt.parenL);\n        }\n\n        if (result) {\n          if (\n            result.type === \"TSInstantiationExpression\" &&\n            (this.match(tt.dot) ||\n              (this.match(tt.questionDot) &&\n                this.lookaheadCharCode() !== charCodes.leftParenthesis))\n          ) {\n            this.raise(\n              TSErrors.InvalidPropertyAccessAfterInstantiationExpression,\n              { at: this.state.startLoc },\n            );\n          }\n          return result;\n        }\n      }\n\n      return super.parseSubscript(base, startLoc, noCalls, state);\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      const { callee } = node;\n      if (\n        callee.type === \"TSInstantiationExpression\" &&\n        !callee.extra?.parenthesized\n      ) {\n        node.typeParameters = callee.typeParameters;\n        node.callee = callee.expression;\n      }\n    }\n\n    parseExprOp(\n      left: N.Expression,\n      leftStartLoc: Position,\n      minPrec: number,\n    ): N.Expression {\n      let isSatisfies: boolean;\n      if (\n        tokenOperatorPrecedence(tt._in) > minPrec &&\n        !this.hasPrecedingLineBreak() &&\n        (this.isContextual(tt._as) ||\n          (isSatisfies = this.isContextual(tt._satisfies)))\n      ) {\n        const node = this.startNodeAt<\n          N.TsAsExpression | N.TsSatisfiesExpression\n        >(leftStartLoc);\n        node.expression = left;\n        node.typeAnnotation = this.tsInType(() => {\n          this.next(); // \"as\" or \"satisfies\"\n          if (this.match(tt._const)) {\n            if (isSatisfies) {\n              this.raise(Errors.UnexpectedKeyword, {\n                at: this.state.startLoc,\n                keyword: \"const\",\n              });\n            }\n            return this.tsParseTypeReference();\n          }\n\n          return this.tsParseType();\n        });\n        this.finishNode(\n          node,\n          isSatisfies ? \"TSSatisfiesExpression\" : \"TSAsExpression\",\n        );\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\n        this.reScan_lt_gt();\n        return this.parseExprOp(\n          // @ts-expect-error todo(flow->ts)\n          node,\n          leftStartLoc,\n          minPrec,\n        );\n      }\n\n      return super.parseExprOp(left, leftStartLoc, minPrec);\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ): void {\n      // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n      // And we have a type checker anyway, so don't bother having the parser do it.\n      if (!this.state.isAmbientContext) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(TSErrors.ImportReflectionHasImportType, {\n          at: node.specifiers[0].loc.start,\n        });\n      }\n    }\n\n    /*\n    Don't bother doing this check in TypeScript code because:\n    1. We may have a nested export statement with the same name:\n      export const x = 0;\n      export namespace N {\n        export const x = 1;\n      }\n    2. We have a type checker to warn us about this sort of thing.\n    */\n    checkDuplicateExports() {}\n\n    parseImport(\n      node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    ): N.AnyImport {\n      node.importKind = \"value\";\n      if (\n        tokenIsIdentifier(this.state.type) ||\n        this.match(tt.star) ||\n        this.match(tt.braceL)\n      ) {\n        let ahead = this.lookahead();\n\n        if (\n          this.isContextual(tt._type) &&\n          // import type, { a } from \"b\";\n          ahead.type !== tt.comma &&\n          // import type from \"a\";\n          ahead.type !== tt._from &&\n          // import type = require(\"a\");\n          ahead.type !== tt.eq\n        ) {\n          node.importKind = \"type\";\n          this.next();\n          ahead = this.lookahead();\n        }\n\n        if (tokenIsIdentifier(this.state.type) && ahead.type === tt.eq) {\n          return this.tsParseImportEqualsDeclaration(\n            node as Undone<N.TsImportEqualsDeclaration>,\n          );\n        }\n      }\n\n      const importNode = super.parseImport(node as Undone<N.ImportDeclaration>);\n      /*:: invariant(importNode.type !== \"TSImportEqualsDeclaration\") */\n\n      // `import type` can only be used on imports with named imports or with a\n      // default import - but not both\n      if (\n        importNode.importKind === \"type\" &&\n        // @ts-expect-error refine typings\n        importNode.specifiers.length > 1 &&\n        // @ts-expect-error refine typings\n        importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, {\n          at: importNode,\n        });\n      }\n\n      return importNode;\n    }\n\n    parseExport(\n      node: Undone<N.Node>,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      if (this.match(tt._import)) {\n        // `export import A = B;`\n        this.next(); // eat `tt._import`\n        if (\n          this.isContextual(tt._type) &&\n          this.lookaheadCharCode() !== charCodes.equalsTo\n        ) {\n          node.importKind = \"type\";\n          this.next(); // eat \"type\"\n        } else {\n          node.importKind = \"value\";\n        }\n        return this.tsParseImportEqualsDeclaration(\n          node as Undone<N.TsImportEqualsDeclaration>,\n          /* isExport */ true,\n        );\n      } else if (this.eat(tt.eq)) {\n        // `export = x;`\n        const assign = node as Undone<N.TsExportAssignment>;\n        assign.expression = super.parseExpression();\n        this.semicolon();\n        return this.finishNode(assign, \"TSExportAssignment\");\n      } else if (this.eatContextual(tt._as)) {\n        // `export as namespace A;`\n        const decl = node as Undone<N.TsNamespaceExportDeclaration>;\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n        this.expectContextual(tt._namespace);\n        decl.id = this.parseIdentifier();\n        this.semicolon();\n        return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n      } else {\n        if (\n          this.isContextual(tt._type) &&\n          this.lookahead().type === tt.braceL\n        ) {\n          this.next();\n          node.exportKind = \"type\";\n        } else {\n          node.exportKind = \"value\";\n        }\n\n        return super.parseExport(\n          node as Undone<N.ExportAllDeclaration | N.ExportDefaultDeclaration>,\n          decorators,\n        );\n      }\n    }\n\n    isAbstractClass(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._class\n      );\n    }\n\n    parseExportDefaultExpression(): N.Expression | N.Declaration {\n      if (this.isAbstractClass()) {\n        const cls = this.startNode<N.Class>();\n        this.next(); // Skip \"abstract\"\n        cls.abstract = true;\n        return this.parseClass(cls, true, true);\n      }\n\n      // export default interface allowed in:\n      // https://github.com/Microsoft/TypeScript/pull/16040\n      if (this.match(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(\n          this.startNode<N.TsInterfaceDeclaration>(),\n        );\n        if (result) return result;\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseVarStatement(\n      node: N.VariableDeclaration,\n      kind: \"var\" | \"let\" | \"const\" | \"using\",\n      allowMissingInitializer: boolean = false,\n    ) {\n      const { isAmbientContext } = this.state;\n      const declaration = super.parseVarStatement(\n        node,\n        kind,\n        allowMissingInitializer || isAmbientContext,\n      );\n\n      if (!isAmbientContext) return declaration;\n\n      for (const { id, init } of declaration.declarations) {\n        // Empty initializer is the easy case that we want.\n        if (!init) continue;\n\n        // var and let aren't ever allowed initializers.\n        //\n        // If a const declaration has no type annotation and is initiailized to\n        // a string literal, numeric literal, or enum reference, then it is\n        // allowed. In an ideal world, we'd check whether init was *actually* an\n        // enum reference, but we allow anything that \"could be\" a literal enum\n        // in `isPossiblyLiteralEnum` since we don't have all the information\n        // that the typescript compiler has.\n        if (kind !== \"const\" || !!id.typeAnnotation) {\n          this.raise(TSErrors.InitializerNotAllowedInAmbientContext, {\n            at: init,\n          });\n        } else if (\n          init.type !== \"StringLiteral\" &&\n          init.type !== \"BooleanLiteral\" &&\n          init.type !== \"NumericLiteral\" &&\n          init.type !== \"BigIntLiteral\" &&\n          (init.type !== \"TemplateLiteral\" || init.expressions.length > 0) &&\n          !isPossiblyLiteralEnum(init)\n        ) {\n          this.raise(\n            TSErrors.ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference,\n            { at: init },\n          );\n        }\n      }\n\n      return declaration;\n    }\n\n    parseStatementContent(\n      flags: ParseStatementFlag,\n      decorators?: N.Decorator[] | null,\n    ): N.Statement {\n      if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n        const node = this.startNode<N.TsEnumDeclaration>();\n        this.expect(tt._const); // eat 'const'\n        return this.tsParseEnumDeclaration(node, { const: true });\n      }\n\n      if (this.isContextual(tt._enum)) {\n        return this.tsParseEnumDeclaration(\n          this.startNode<N.TsEnumDeclaration>(),\n        );\n      }\n\n      if (this.isContextual(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(this.startNode());\n        if (result) return result;\n      }\n\n      return super.parseStatementContent(flags, decorators);\n    }\n\n    parseAccessModifier(): N.Accessibility | undefined | null {\n      return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n    }\n\n    tsHasSomeModifiers(member: any, modifiers: readonly TsModifier[]): boolean {\n      return modifiers.some(modifier => {\n        if (tsIsAccessModifier(modifier)) {\n          return member.accessibility === modifier;\n        }\n        return !!member[modifier];\n      });\n    }\n\n    tsIsStartOfStaticBlocks() {\n      return (\n        this.isContextual(tt._static) &&\n        this.lookaheadCharCode() === charCodes.leftCurlyBrace\n      );\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const modifiers = [\n        \"declare\",\n        \"private\",\n        \"public\",\n        \"protected\",\n        \"override\",\n        \"abstract\",\n        \"readonly\",\n        \"static\",\n      ] as const;\n      this.tsParseModifiers({\n        modified: member,\n        allowedModifiers: modifiers,\n        disallowedModifiers: [\"in\", \"out\"],\n        stopOnStartOfClassStaticBlock: true,\n        errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n      });\n\n      const callParseClassMemberWithIsStatic = () => {\n        if (this.tsIsStartOfStaticBlocks()) {\n          this.next(); // eat \"static\"\n          this.next(); // eat \"{\"\n          if (this.tsHasSomeModifiers(member, modifiers)) {\n            this.raise(TSErrors.StaticBlockCannotHaveModifier, {\n              at: this.state.curPosition(),\n            });\n          }\n          super.parseClassStaticBlock(classBody, member as N.StaticBlock);\n        } else {\n          this.parseClassMemberWithIsStatic(\n            classBody,\n            member,\n            state,\n            !!member.static,\n          );\n        }\n      };\n      if (member.declare) {\n        this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n      } else {\n        callParseClassMemberWithIsStatic();\n      }\n    }\n\n    parseClassMemberWithIsStatic(\n      classBody: N.ClassBody,\n      member: Undone<N.ClassMember | N.TsIndexSignature>,\n      state: N.ParseClassMemberState,\n      isStatic: boolean,\n    ): void {\n      const idx = this.tsTryParseIndexSignature(\n        member as Undone<N.TsIndexSignature>,\n      );\n      if (idx) {\n        classBody.body.push(idx);\n\n        if ((member as any).abstract) {\n          this.raise(TSErrors.IndexSignatureHasAbstract, { at: member });\n        }\n        if ((member as any).accessibility) {\n          this.raise(TSErrors.IndexSignatureHasAccessibility, {\n            at: member,\n            modifier: (member as any).accessibility,\n          });\n        }\n        if ((member as any).declare) {\n          this.raise(TSErrors.IndexSignatureHasDeclare, { at: member });\n        }\n        if ((member as any).override) {\n          this.raise(TSErrors.IndexSignatureHasOverride, { at: member });\n        }\n\n        return;\n      }\n\n      if (!this.state.inAbstractClass && (member as any).abstract) {\n        this.raise(TSErrors.NonAbstractClassHasAbstractMethod, {\n          at: member,\n        });\n      }\n\n      if ((member as any).override) {\n        if (!state.hadSuperClass) {\n          this.raise(TSErrors.OverrideNotInSubClass, { at: member });\n        }\n      }\n\n      /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n      super.parseClassMemberWithIsStatic(\n        classBody,\n        member as Undone<N.ClassMember>,\n        state,\n        isStatic,\n      );\n    }\n\n    parsePostMemberNameModifiers(\n      methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      const optional = this.eat(tt.question);\n      if (optional) methodOrProp.optional = true;\n\n      if ((methodOrProp as any).readonly && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasReadonly, { at: methodOrProp });\n      }\n\n      if ((methodOrProp as any).declare && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasDeclare, { at: methodOrProp });\n      }\n    }\n\n    // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\n    // is that e.g. `type()` is valid JS, so we must try parsing that first.\n    // If it's really a type, we will parse `type` as the statement, and can correct it here\n    // by parsing the rest.\n    // @ts-expect-error plugin overrides interfaces\n    parseExpressionStatement(\n      node: Undone<N.ExpressionStatement>,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.Statement {\n      const decl =\n        expr.type === \"Identifier\"\n          ? // @ts-expect-error refine typings\n            this.tsParseExpressionStatement(node, expr, decorators)\n          : undefined;\n      return decl || super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n    shouldParseExportDeclaration(): boolean {\n      if (this.tsIsDeclarationStart()) return true;\n      return super.shouldParseExportDeclaration();\n    }\n\n    // An apparent conditional expression could actually be an optional parameter in an arrow function.\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      // only do the expensive clone if there is a question mark\n      // and if we come from inside parens\n      if (!this.state.maybeInArrowParameters || !this.match(tt.question)) {\n        return super.parseConditional(\n          expr,\n\n          startLoc,\n          refExpressionErrors,\n        );\n      }\n\n      const result = this.tryParse(() =>\n        super.parseConditional(expr, startLoc),\n      );\n\n      if (!result.node) {\n        if (result.error) {\n          /*:: invariant(refExpressionErrors != null) */\n          super.setOptionalParametersError(refExpressionErrors, result.error);\n        }\n\n        return expr;\n      }\n      if (result.error) this.state = result.failState;\n      return result.node;\n    }\n\n    // Note: These \"type casts\" are *not* valid TS expressions.\n    // But we parse them here and change them when completing the arrow function.\n    parseParenItem(\n      node: N.Expression,\n\n      startLoc: Position,\n    ): N.Expression {\n      node = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        node.optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TsTypeCastExpression>(startLoc);\n        typeCastNode.expression = node;\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (!this.state.isAmbientContext && this.isContextual(tt._declare)) {\n        return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\n      }\n\n      // Store original location\n      const startLoc = this.state.startLoc;\n\n      const isDeclare = this.eatContextual(tt._declare);\n\n      if (\n        isDeclare &&\n        (this.isContextual(tt._declare) || !this.shouldParseExportDeclaration())\n      ) {\n        throw this.raise(TSErrors.ExpectedAmbientAfterExportDeclare, {\n          at: this.state.startLoc,\n        });\n      }\n\n      const isIdentifier = tokenIsIdentifier(this.state.type);\n      const declaration: N.Declaration | undefined | null =\n        (isIdentifier && this.tsTryParseExportDeclaration()) ||\n        super.parseExportDeclaration(node);\n\n      if (!declaration) return null;\n\n      if (\n        declaration.type === \"TSInterfaceDeclaration\" ||\n        declaration.type === \"TSTypeAliasDeclaration\" ||\n        isDeclare\n      ) {\n        node.exportKind = \"type\";\n      }\n\n      if (isDeclare) {\n        // Reset location to include `declare` in range\n        this.resetStartLocation(declaration, startLoc);\n\n        declaration.declare = true;\n      }\n\n      return declaration;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType?: BindingTypes,\n    ): void {\n      if ((!isStatement || optionalId) && this.isContextual(tt._implements)) {\n        return;\n      }\n\n      super.parseClassId(\n        node,\n        isStatement,\n        optionalId,\n        (node as any).declare ? BIND_TS_AMBIENT : BIND_CLASS,\n      );\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutModifiers.bind(this),\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n    }\n\n    parseClassPropertyAnnotation(\n      node: N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty,\n    ): void {\n      if (!node.optional) {\n        if (this.eat(tt.bang)) {\n          node.definite = true;\n        } else if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n    }\n\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      this.parseClassPropertyAnnotation(node);\n\n      if (\n        this.state.isAmbientContext &&\n        !(node.readonly && !node.typeAnnotation) &&\n        this.match(tt.eq)\n      ) {\n        this.raise(TSErrors.DeclareClassFieldHasInitializer, {\n          at: this.state.startLoc,\n        });\n      }\n      if (node.abstract && this.match(tt.eq)) {\n        const { key } = node;\n        this.raise(TSErrors.AbstractPropertyHasInitializer, {\n          at: this.state.startLoc,\n          propertyName:\n            key.type === \"Identifier\" && !node.computed\n              ? key.name\n              : `[${this.input.slice(key.start, key.end)}]`,\n        });\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      // @ts-expect-error abstract may not index node\n      if (node.abstract) {\n        this.raise(TSErrors.PrivateElementHasAbstract, { at: node });\n      }\n\n      // @ts-expect-error accessibility may not index node\n      if (node.accessibility) {\n        this.raise(TSErrors.PrivateElementHasAccessibility, {\n          at: node,\n          // @ts-expect-error refine typings\n          modifier: node.accessibility,\n        });\n      }\n\n      this.parseClassPropertyAnnotation(node);\n      return super.parseClassPrivateProperty(node);\n    }\n\n    parseClassAccessorProperty(\n      node: N.ClassAccessorProperty,\n    ): N.ClassAccessorProperty {\n      this.parseClassPropertyAnnotation(node);\n      if (node.optional) {\n        this.raise(TSErrors.AccessorCannotBeOptional, { at: node });\n      }\n      return super.parseClassAccessorProperty(node);\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters && isConstructor) {\n        this.raise(TSErrors.ConstructorHasTypeParameters, {\n          at: typeParameters,\n        });\n      }\n\n      // @ts-expect-error declare does not exist in ClassMethod\n      const { declare = false, kind } = method;\n\n      if (declare && (kind === \"get\" || kind === \"set\")) {\n        this.raise(TSErrors.DeclareAccessor, { at: method, kind });\n      }\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    declareClassPrivateMethodInScope(\n      node: N.ClassPrivateMethod | N.EstreeMethodDefinition | N.TSDeclareMethod,\n      kind: number,\n    ) {\n      if (node.type === \"TSDeclareMethod\") return;\n      // This happens when using the \"estree\" plugin.\n      if (node.type === \"MethodDefinition\" && !node.value.body) return;\n\n      super.declareClassPrivateMethodInScope(node, kind);\n    }\n\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      // handle `extends f<<T>\n      if (node.superClass && (this.match(tt.lt) || this.match(tt.bitShiftL))) {\n        // @ts-expect-error refine typings\n        node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n      }\n      if (this.eatContextual(tt._implements)) {\n        node.implements = this.tsParseHeritageClause(\"implements\");\n      }\n    }\n\n    parseObjPropValue(\n      prop: Undone<N.ObjectMethod | N.ObjectProperty>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ) {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) prop.typeParameters = typeParameters;\n\n      return super.parseObjPropValue(\n        prop,\n\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n    }\n\n    parseFunctionParams(node: N.Function, allowModifiers?: boolean): void {\n      const typeParameters = this.tsTryParseTypeParameters();\n      if (typeParameters) node.typeParameters = typeParameters;\n      super.parseFunctionParams(node, allowModifiers);\n    }\n\n    // `let x: number;`\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (\n        decl.id.type === \"Identifier\" &&\n        !this.hasPrecedingLineBreak() &&\n        this.eat(tt.bang)\n      ) {\n        decl.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) {\n        decl.id.typeAnnotation = type;\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeAnnotation();\n      }\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n      let state: State | undefined | null;\n      let jsx;\n      let typeCast;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        // Prefer to parse JSX if possible. But may be an arrow fn.\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` or `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (!jsx?.error && !this.match(tt.lt)) {\n        return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n      }\n\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n      // If the state was cloned in the JSX parsing branch above but there\n      // have been any error in the tryParse call, this.state is set to state\n      // so we still need to clone it.\n      if (!state || state === this.state) state = this.state.clone();\n\n      let typeParameters: N.TsTypeParameterDeclaration | undefined | null;\n      const arrow = this.tryParse(abort => {\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n        typeParameters = this.tsParseTypeParameters();\n        const expr = super.parseMaybeAssign(\n          refExpressionErrors,\n          afterLeftParse,\n        );\n\n        if (\n          expr.type !== \"ArrowFunctionExpression\" ||\n          expr.extra?.parenthesized\n        ) {\n          abort();\n        }\n\n        // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n        if (typeParameters?.params.length !== 0) {\n          this.resetStartLocationFromNode(expr, typeParameters);\n        }\n        expr.typeParameters = typeParameters;\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            this.hasPlugin(\"jsx\") &&\n            expr.typeParameters.params.length === 1 &&\n            !expr.typeParameters.extra?.trailingComma\n          ) {\n            // report error if single type parameter used without trailing comma.\n            const parameter = expr.typeParameters.params[0];\n            if (!parameter.constraint) {\n              // A single type parameter must either have constraints\n              // or a trailing comma, otherwise it's ambiguous with JSX.\n              this.raise(TSErrors.SingleTypeParameterWithoutTrailingComma, {\n                at: createPositionWithColumnOffset(parameter.loc.end, 1),\n                typeParameterName: parameter.name.name,\n              });\n            }\n          }\n        }\n\n        return expr;\n      }, state);\n\n      /*:: invariant(arrow.node != null) */\n      if (!arrow.error && !arrow.aborted) {\n        // This error is reported outside of the this.tryParse call so that\n        // in case of <T>(x) => 2, we don't consider <T>(x) as a type assertion\n        // because of this error.\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        // @ts-expect-error refine typings\n        return arrow.node;\n      }\n\n      if (!jsx) {\n        // Try parsing a type cast instead of an arrow function.\n        // This will never happen outside of JSX.\n        // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n        assert(!this.hasPlugin(\"jsx\"));\n\n        // This will start with a type assertion (via parseMaybeUnary).\n        // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n        typeCast = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n        /*:: invariant(!typeCast.aborted) */\n        /*:: invariant(typeCast.node != null) */\n        if (!typeCast.error) return typeCast.node;\n      }\n\n      if (jsx?.node) {\n        /*:: invariant(jsx.failState) */\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrow.node) {\n        /*:: invariant(arrow.failState) */\n        this.state = arrow.failState;\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        // @ts-expect-error refine typings\n        return arrow.node;\n      }\n\n      if (typeCast?.node) {\n        /*:: invariant(typeCast.failState) */\n        this.state = typeCast.failState;\n        return typeCast.node;\n      }\n\n      if (jsx?.thrown) throw jsx.error;\n      if (arrow.thrown) throw arrow.error;\n      if (typeCast?.thrown) throw typeCast.error;\n\n      throw jsx?.error || arrow.error || typeCast?.error;\n    }\n\n    reportReservedArrowTypeParam(node: any) {\n      if (\n        node.params.length === 1 &&\n        !node.extra?.trailingComma &&\n        this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")\n      ) {\n        this.raise(TSErrors.ReservedArrowTypeParam, { at: node });\n      }\n    }\n\n    // Handle type assertions\n    parseMaybeUnary(\n      refExpressionErrors?: ExpressionErrors | null,\n      sawUnary?: boolean,\n    ): N.Expression {\n      if (!this.hasPlugin(\"jsx\") && this.match(tt.lt)) {\n        return this.tsParseTypeAssertion();\n      } else {\n        return super.parseMaybeUnary(refExpressionErrors, sawUnary);\n      }\n    }\n\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // This is different from how the TS parser does it.\n        // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n        const result = this.tryParse(abort => {\n          const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n            tt.colon,\n          );\n          if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n          return returnType;\n        });\n\n        if (result.aborted) return;\n\n        if (!result.thrown) {\n          if (result.error) this.state = result.failState;\n          // @ts-expect-error refine typings\n          node.returnType = result.node;\n        }\n      }\n\n      return super.parseArrow(node);\n    }\n\n    // Allow type annotations inside of a parameter list.\n    parseAssignableListItemTypes(param: N.Pattern) {\n      if (this.eat(tt.question)) {\n        if (\n          param.type !== \"Identifier\" &&\n          !this.state.isAmbientContext &&\n          !this.state.inType\n        ) {\n          this.raise(TSErrors.PatternIsOptional, { at: param });\n        }\n\n        (param as any as N.Identifier).optional = true;\n      }\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) param.typeAnnotation = type;\n      this.resetEndLocation(param);\n\n      return param;\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      switch (node.type) {\n        case \"TSTypeCastExpression\":\n          return this.isAssignable(node.expression, isBinding);\n        case \"TSParameterProperty\":\n          return true;\n        default:\n          return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      switch (node.type) {\n        case \"ParenthesizedExpression\":\n          this.toAssignableParenthesizedExpression(node, isLHS);\n          break;\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          if (isLHS) {\n            this.expressionScope.recordArrowParameterBindingError(\n              TSErrors.UnexpectedTypeCastInParameter,\n              { at: node },\n            );\n          } else {\n            this.raise(TSErrors.UnexpectedTypeCastInParameter, { at: node });\n          }\n          this.toAssignable(node.expression, isLHS);\n          break;\n        case \"AssignmentExpression\":\n          if (!isLHS && node.left.type === \"TSTypeCastExpression\") {\n            node.left = this.typeCastToParameter(node.left);\n          }\n        /* fall through */\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableParenthesizedExpression(node: N.Node, isLHS: boolean): void {\n      switch (node.expression.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n        case \"ParenthesizedExpression\":\n          this.toAssignable(node.expression, isLHS);\n          break;\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    checkToRestConversion(node: N.Node, allowPattern: boolean): void {\n      switch (node.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n        case \"TSNonNullExpression\":\n          this.checkToRestConversion(node.expression, false);\n          break;\n        default:\n          super.checkToRestConversion(node, allowPattern);\n      }\n    }\n\n    // @ts-expect-error plugin overrides interfaces\n    isValidLVal(\n      type:\n        | \"TSTypeCastExpression\"\n        | \"TSParameterProperty\"\n        | \"TSNonNullExpression\"\n        | \"TSAsExpression\"\n        | \"TSSatisfiesExpression\"\n        | \"TSTypeAssertion\",\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingTypes,\n    ) {\n      return (\n        getOwn(\n          {\n            // Allow \"typecasts\" to appear on the left of assignment expressions,\n            // because it may be in an arrow function.\n            // e.g. `const f = (foo: number = 0) => foo;`\n            TSTypeCastExpression: true,\n            TSParameterProperty: \"parameter\",\n            TSNonNullExpression: \"expression\",\n            TSAsExpression: (binding !== BIND_NONE ||\n              !isUnparenthesizedInAssign) && [\"expression\", true],\n            TSSatisfiesExpression: (binding !== BIND_NONE ||\n              !isUnparenthesizedInAssign) && [\"expression\", true],\n            TSTypeAssertion: (binding !== BIND_NONE ||\n              !isUnparenthesizedInAssign) && [\"expression\", true],\n          },\n          type,\n        ) || super.isValidLVal(type, isUnparenthesizedInAssign, binding)\n      );\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n      // handles `@f<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsParseTypeArgumentsInExpression();\n\n        if (this.match(tt.parenL)) {\n          const call = super.parseMaybeDecoratorArguments(expr);\n          call.typeParameters = typeArguments;\n          return call;\n        }\n\n        this.unexpected(null, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr);\n    }\n\n    checkCommaAfterRest(\n      close: typeof charCodes[keyof typeof charCodes],\n    ): boolean {\n      if (\n        this.state.isAmbientContext &&\n        this.match(tt.comma) &&\n        this.lookaheadCharCode() === close\n      ) {\n        this.next();\n        return false;\n      } else {\n        return super.checkCommaAfterRest(close);\n      }\n    }\n\n    // === === === === === === === === === === === === === === === ===\n    // Note: All below methods are duplicates of something in flow.js.\n    // Not sure what the best way to combine these is.\n    // === === === === === === === === === === === === === === === ===\n\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    isClassProperty(): boolean {\n      return (\n        this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n      );\n    }\n\n    parseMaybeDefault(\n      startLoc?: Position | null,\n      left?: Pattern | null,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(TSErrors.TypeAnnotationAfterAssign, {\n          at: node.typeAnnotation,\n        });\n      }\n\n      return node;\n    }\n\n    // ensure that inside types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      if (this.state.inType) {\n        if (code === charCodes.greaterThan) {\n          return this.finishOp(tt.gt, 1);\n        }\n        if (code === charCodes.lessThan) {\n          return this.finishOp(tt.lt, 1);\n        }\n      }\n      return super.getTokenFromCode(code);\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    toAssignableList(\n      exprList: Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TSTypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(\n            expr as N.TsTypeCastExpression,\n          );\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Node {\n      node.expression.typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    shouldParseArrow(params: Array<N.Node>) {\n      if (this.match(tt.colon)) {\n        return params.every(expr => this.isAssignable(expr, true));\n      }\n      return super.shouldParseArrow(params);\n    }\n\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    canHaveLeadingDecorator() {\n      // Avoid unnecessary lookahead in checking for abstract class unless needed!\n      return super.canHaveLeadingDecorator() || this.isAbstractClass();\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      // handles `<Component<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsTryParseAndCatch(() =>\n          // @ts-expect-error: refine typings\n          this.tsParseTypeArgumentsInExpression(),\n        );\n        // @ts-expect-error: refine typings\n        if (typeArguments) node.typeParameters = typeArguments;\n      }\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    getGetterSetterExpectedParamCount(\n      method: N.ObjectMethod | N.ClassMethod,\n    ): number {\n      const baseCount = super.getGetterSetterExpectedParamCount(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      const firstParam = params[0];\n      const hasContextParam = firstParam && this.isThisParam(firstParam);\n\n      return hasContextParam ? baseCount + 1 : baseCount;\n    }\n\n    parseCatchClauseParam(): N.Pattern {\n      const param = super.parseCatchClauseParam();\n      const type = this.tsTryParseTypeAnnotation();\n\n      if (type) {\n        param.typeAnnotation = type;\n        this.resetEndLocation(param);\n      }\n\n      return param;\n    }\n\n    tsInAmbientContext<T>(cb: () => T): T {\n      const oldIsAmbientContext = this.state.isAmbientContext;\n      this.state.isAmbientContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.isAmbientContext = oldIsAmbientContext;\n      }\n    }\n\n    parseClass<T extends N.Class>(\n      node: Undone<T>,\n      isStatement: boolean,\n      optionalId?: boolean,\n    ): T {\n      const oldInAbstractClass = this.state.inAbstractClass;\n      this.state.inAbstractClass = !!(node as any).abstract;\n      try {\n        return super.parseClass(node, isStatement, optionalId);\n      } finally {\n        this.state.inAbstractClass = oldInAbstractClass;\n      }\n    }\n\n    tsParseAbstractDeclaration(\n      node: any,\n      decorators: N.Decorator[] | null,\n    ): N.ClassDeclaration | N.TsInterfaceDeclaration | undefined | null {\n      if (this.match(tt._class)) {\n        node.abstract = true;\n        return this.maybeTakeDecorators(\n          decorators,\n          this.parseClass<N.ClassDeclaration>(\n            node as N.ClassDeclaration,\n            /* isStatement */ true,\n            /* optionalId */ false,\n          ),\n        );\n      } else if (this.isContextual(tt._interface)) {\n        // for invalid abstract interface\n\n        // To avoid\n        //   abstract interface\n        //   Foo {}\n        if (!this.hasFollowingLineBreak()) {\n          node.abstract = true;\n          this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, {\n            at: node,\n          });\n          return this.tsParseInterfaceDeclaration(\n            node as N.TsInterfaceDeclaration,\n          );\n        }\n      } else {\n        this.unexpected(null, tt._class);\n      }\n    }\n\n    parseMethod<\n      T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope?: boolean,\n    ) {\n      const method = super.parseMethod<T>(\n        node,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error todo(flow->ts) property not defined for all types in union\n      if (method.abstract) {\n        const hasBody = this.hasPlugin(\"estree\")\n          ? // @ts-expect-error estree typings\n            !!method.value.body\n          : !!method.body;\n        if (hasBody) {\n          const { key } = method;\n          this.raise(TSErrors.AbstractMethodHasImplementation, {\n            at: method,\n            methodName:\n              key.type === \"Identifier\" && !method.computed\n                ? key.name\n                : `[${this.input.slice(key.start, key.end)}]`,\n          });\n        }\n      }\n      return method;\n    }\n\n    tsParseTypeParameterName(): N.Identifier | string {\n      const typeName: N.Identifier = this.parseIdentifier();\n      return process.env.BABEL_8_BREAKING ? typeName : typeName.name;\n    }\n\n    shouldParseAsAmbientContext(): boolean {\n      return !!this.getPluginOption(\"typescript\", \"dts\");\n    }\n\n    parse() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.parse();\n    }\n\n    getExpression() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.getExpression();\n    }\n\n    parseExportSpecifier(\n      node: Undone<N.ExportSpecifier>,\n      isString: boolean,\n      isInTypeExport: boolean,\n      isMaybeTypeOnly: boolean,\n    ) {\n      if (!isString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          node,\n          /* isImport */ false,\n          isInTypeExport,\n        );\n        return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n      }\n      node.exportKind = \"value\";\n      return super.parseExportSpecifier(\n        node,\n        isString,\n        isInTypeExport,\n        isMaybeTypeOnly,\n      );\n    }\n\n    parseImportSpecifier(\n      specifier: Undone<N.ImportSpecifier>,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingTypes | undefined,\n    ): N.ImportSpecifier {\n      if (!importedIsString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          specifier,\n          /* isImport */ true,\n          isInTypeOnlyImport,\n        );\n        return this.finishNode<N.ImportSpecifier>(specifier, \"ImportSpecifier\");\n      }\n      specifier.importKind = \"value\";\n      return super.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        isInTypeOnlyImport,\n        isMaybeTypeOnly,\n        isInTypeOnlyImport ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT,\n      );\n    }\n\n    parseTypeOnlyImportExportSpecifier(\n      node: any,\n      isImport: boolean,\n      isInTypeOnlyImportExport: boolean,\n    ): void {\n      const leftOfAsKey = isImport ? \"imported\" : \"local\";\n      const rightOfAsKey = isImport ? \"local\" : \"exported\";\n\n      let leftOfAs = node[leftOfAsKey];\n      let rightOfAs;\n\n      let hasTypeSpecifier = false;\n      let canParseAsKeyword = true;\n\n      const loc = leftOfAs.loc.start;\n\n      // https://github.com/microsoft/TypeScript/blob/fc4f9d83d5939047aa6bb2a43965c6e9bbfbc35b/src/compiler/parser.ts#L7411-L7456\n      // import { type } from \"mod\";          - hasTypeSpecifier: false, leftOfAs: type\n      // import { type as } from \"mod\";       - hasTypeSpecifier: true,  leftOfAs: as\n      // import { type as as } from \"mod\";    - hasTypeSpecifier: false, leftOfAs: type, rightOfAs: as\n      // import { type as as as } from \"mod\"; - hasTypeSpecifier: true,  leftOfAs: as,   rightOfAs: as\n      if (this.isContextual(tt._as)) {\n        // { type as ...? }\n        const firstAs = this.parseIdentifier();\n        if (this.isContextual(tt._as)) {\n          // { type as as ...? }\n          const secondAs = this.parseIdentifier();\n          if (tokenIsKeywordOrIdentifier(this.state.type)) {\n            // { type as as something }\n            hasTypeSpecifier = true;\n            leftOfAs = firstAs;\n            rightOfAs = isImport\n              ? this.parseIdentifier()\n              : this.parseModuleExportName();\n            canParseAsKeyword = false;\n          } else {\n            // { type as as }\n            rightOfAs = secondAs;\n            canParseAsKeyword = false;\n          }\n        } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n          // { type as something }\n          canParseAsKeyword = false;\n          rightOfAs = isImport\n            ? this.parseIdentifier()\n            : this.parseModuleExportName();\n        } else {\n          // { type as }\n          hasTypeSpecifier = true;\n          leftOfAs = firstAs;\n        }\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n        // { type something ...? }\n        hasTypeSpecifier = true;\n        if (isImport) {\n          leftOfAs = this.parseIdentifier(true);\n          if (!this.isContextual(tt._as)) {\n            this.checkReservedWord(\n              leftOfAs.name,\n              leftOfAs.loc.start,\n              true,\n              true,\n            );\n          }\n        } else {\n          leftOfAs = this.parseModuleExportName();\n        }\n      }\n      if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n        this.raise(\n          isImport\n            ? TSErrors.TypeModifierIsUsedInTypeImports\n            : TSErrors.TypeModifierIsUsedInTypeExports,\n          { at: loc },\n        );\n      }\n\n      node[leftOfAsKey] = leftOfAs;\n      node[rightOfAsKey] = rightOfAs;\n\n      const kindKey = isImport ? \"importKind\" : \"exportKind\";\n      node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n\n      if (canParseAsKeyword && this.eatContextual(tt._as)) {\n        node[rightOfAsKey] = isImport\n          ? this.parseIdentifier()\n          : this.parseModuleExportName();\n      }\n      if (!node[rightOfAsKey]) {\n        node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);\n      }\n      if (isImport) {\n        this.checkIdentifier(\n          node[rightOfAsKey],\n          hasTypeSpecifier ? BIND_TS_TYPE_IMPORT : BIND_FLAGS_TS_IMPORT,\n        );\n      }\n    }\n  };\n\nfunction isPossiblyLiteralEnum(expression: N.Expression): boolean {\n  if (expression.type !== \"MemberExpression\") return false;\n\n  const { computed, property } = expression;\n\n  if (\n    computed &&\n    property.type !== \"StringLiteral\" &&\n    (property.type !== \"TemplateLiteral\" || property.expressions.length > 0)\n  ) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n\nfunction isUncomputedMemberExpressionChain(expression: N.Expression): boolean {\n  if (expression.type === \"Identifier\") return true;\n  if (expression.type !== \"MemberExpression\") return false;\n  if (expression.computed) return false;\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n","import * as charCodes from \"charcodes\";\n\nimport { tokenLabelName, tt } from \"../tokenizer/types\";\nimport type Parser from \"../parser\";\nimport type * as N from \"../types\";\nimport { ParseErrorEnum } from \"../parse-error\";\nimport type { Undone } from \"../parser/node\";\nimport type { ExpressionErrors } from \"../parser/util\";\nimport type { BindingTypes } from \"../util/scopeflags\";\nimport type { Position } from \"../util/location\";\n\ntype PossiblePlaceholders = {\n  Identifier: N.Identifier;\n  StringLiteral: N.StringLiteral;\n  Expression: N.Expression;\n  Statement: N.Statement;\n  Declaration: N.Declaration;\n  BlockStatement: N.BlockStatement;\n  ClassBody: N.ClassBody;\n  Pattern: N.Pattern;\n};\nexport type PlaceholderTypes = keyof PossiblePlaceholders;\n\ntype NodeOf<T extends keyof PossiblePlaceholders> = PossiblePlaceholders[T];\n// todo: when there  is proper union type for Node\n// type NodeOf<T extends PlaceholderTypes> = Extract<N.Node, { type: T }>;\n\n// todo: Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T extends PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\n/* eslint sort-keys: \"error\" */\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\n  ClassNameIsRequired: \"A class name is required.\",\n  UnexpectedSpace: \"Unexpected space in placeholder.\",\n});\n\n/* eslint-disable sort-keys */\n\nexport default (superClass: typeof Parser) =>\n  class PlaceholdersParserMixin extends superClass implements Parser {\n    parsePlaceholder<T extends PlaceholderTypes>(\n      expectedNode: T,\n    ): /*?N.Placeholder<T>*/ MaybePlaceholder<T> | undefined | null {\n      if (this.match(tt.placeholder)) {\n        const node = this.startNode();\n        this.next();\n        this.assertNoSpace();\n\n        // We can't use this.parseIdentifier because\n        // we don't want nested placeholders.\n        node.name = super.parseIdentifier(/* liberal */ true);\n\n        this.assertNoSpace();\n        this.expect(tt.placeholder);\n        // @ts-expect-error placeholder typings\n        return this.finishPlaceholder(node, expectedNode);\n      }\n    }\n\n    finishPlaceholder<T extends PlaceholderTypes>(\n      node: N.Node,\n      expectedNode: T,\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n      const isFinished = !!(node.expectedNode && node.type === \"Placeholder\");\n      node.expectedNode = expectedNode;\n\n      // @ts-expect-error todo(flow->ts)\n      return isFinished ? node : this.finishNode(node, \"Placeholder\");\n    }\n\n    /* ============================================================ *\n     * tokenizer/index.js                                           *\n     * ============================================================ */\n\n    getTokenFromCode(code: number) {\n      if (\n        code === charCodes.percentSign &&\n        this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n      ) {\n        return this.finishOp(tt.placeholder, 2);\n      }\n\n      return super.getTokenFromCode(code);\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(\n      refExpressionErrors?: ExpressionErrors | null,\n    ): MaybePlaceholder<\"Expression\"> {\n      return (\n        this.parsePlaceholder(\"Expression\") ||\n        super.parseExprAtom(refExpressionErrors)\n      );\n    }\n\n    parseIdentifier(liberal?: boolean): MaybePlaceholder<\"Identifier\"> {\n      // NOTE: This function only handles identifiers outside of\n      // expressions and binding patterns, since they are already\n      // handled by the parseExprAtom and parseBindingAtom functions.\n      // This is needed, for example, to parse \"class %%NAME%% {}\".\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(liberal)\n      );\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ) {\n      // Sometimes we call #checkReservedWord(node.name), expecting\n      // that node is an Identifier. If it is a Placeholder, name\n      // will be undefined.\n      if (word !== undefined) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/lval.js                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingTypes) {\n      return (\n        type === \"Placeholder\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean): void {\n      if (\n        node &&\n        node.type === \"Placeholder\" &&\n        node.expectedNode === \"Expression\"\n      ) {\n        node.expectedNode = \"Pattern\";\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/statement.js                                          *\n     * ============================================================ */\n\n    chStartsBindingIdentifier(ch: number, pos: number): boolean {\n      if (super.chStartsBindingIdentifier(ch, pos)) {\n        return true;\n      }\n\n      // Accept \"let %%\" as the start of \"let %%placeholder%%\", as though the\n      // placeholder were an identifier.\n      const nextToken = this.lookahead();\n      if (nextToken.type === tt.placeholder) {\n        return true;\n      }\n\n      return false;\n    }\n\n    verifyBreakContinue(\n      node: N.BreakStatement | N.ContinueStatement,\n      isBreak: boolean,\n    ) {\n      // @ts-expect-error: node.label could be Placeholder\n      if (node.label && node.label.type === \"Placeholder\") return;\n      super.verifyBreakContinue(node, isBreak);\n    }\n\n    // @ts-expect-error Plugin will override parser interface\n    parseExpressionStatement(\n      node: MaybePlaceholder<\"Statement\">,\n      expr: N.Expression,\n    ): MaybePlaceholder<\"Statement\"> {\n      if (\n        expr.type !== \"Placeholder\" ||\n        (expr.extra && expr.extra.parenthesized)\n      ) {\n        // @ts-expect-error placeholder typings\n        return super.parseExpressionStatement(node, expr);\n      }\n\n      if (this.match(tt.colon)) {\n        // @ts-expect-error placeholder typings\n        const stmt: N.LabeledStatement = node;\n        stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n        this.next();\n        stmt.body = super.parseStatementOrFunctionDeclaration(false);\n        return this.finishNode(stmt, \"LabeledStatement\");\n      }\n\n      this.semicolon();\n      node.name = expr.name;\n      return this.finishPlaceholder(node, \"Statement\");\n    }\n\n    parseBlock(\n      allowDirectives?: boolean,\n      createNewLexicalScope?: boolean,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): MaybePlaceholder<\"BlockStatement\"> {\n      return (\n        this.parsePlaceholder(\"BlockStatement\") ||\n        super.parseBlock(\n          allowDirectives,\n          createNewLexicalScope,\n          afterBlockParse,\n        )\n      );\n    }\n\n    parseFunctionId(\n      requireId?: boolean,\n    ): MaybePlaceholder<\"Identifier\"> | undefined | null {\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(requireId)\n      );\n    }\n    // @ts-expect-error Plugin will override parser interface\n    parseClass<T extends N.Class>(\n      node: T,\n      isStatement: /* T === ClassDeclaration */ boolean,\n      optionalId?: boolean,\n    ): T {\n      const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n      this.next();\n      const oldStrict = this.state.strict;\n\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (placeholder) {\n        if (\n          this.match(tt._extends) ||\n          this.match(tt.placeholder) ||\n          this.match(tt.braceL)\n        ) {\n          node.id = placeholder;\n        } else if (optionalId || !isStatement) {\n          node.id = null;\n          node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n          return this.finishNode(node, type);\n        } else {\n          throw this.raise(PlaceholderErrors.ClassNameIsRequired, {\n            at: this.state.startLoc,\n          });\n        }\n      } else {\n        this.parseClassId(node, isStatement, optionalId);\n      }\n\n      super.parseClassSuper(node);\n      node.body =\n        this.parsePlaceholder(\"ClassBody\") ||\n        super.parseClassBody(!!node.superClass, oldStrict);\n      return this.finishNode(node, type);\n    }\n\n    parseExport(node: N.Node, decorators: N.Decorator[] | null): N.AnyExport {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseExport(node, decorators);\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // export %%DECL%%;\n        node.specifiers = [];\n        node.source = null;\n        node.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n        return this.finishNode(node, \"ExportNamedDeclaration\");\n      }\n\n      // export %%NAME%% from \"foo\";\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = placeholder;\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n      return super.parseExport(node, decorators);\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.match(tt._default)) {\n        const next = this.nextTokenStart();\n        if (this.isUnparsedContextual(next, \"from\")) {\n          if (\n            this.input.startsWith(\n              tokenLabelName(tt.placeholder),\n              this.nextTokenStartSince(next + 4),\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n      return super.isExportDefaultSpecifier();\n    }\n\n    maybeParseExportDefaultSpecifier(node: N.Node): boolean {\n      if (node.specifiers && node.specifiers.length > 0) {\n        // \"export %%NAME%%\" has already been parsed by #parseExport.\n        return true;\n      }\n      return super.maybeParseExportDefaultSpecifier(node);\n    }\n\n    checkExport(node: N.ExportNamedDeclaration): void {\n      const { specifiers } = node;\n      if (specifiers?.length) {\n        node.specifiers = specifiers.filter(\n          // @ts-expect-error placeholder typings\n          node => node.exported.type === \"Placeholder\",\n        );\n      }\n      super.checkExport(node);\n      node.specifiers = specifiers;\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration>,\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseImport(node);\n\n      node.specifiers = [];\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // import %%STRING%%;\n        node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n        this.semicolon();\n        return this.finishNode(node, \"ImportDeclaration\");\n      }\n\n      // import %%DEFAULT%% ...\n      const specifier =\n        this.startNodeAtNode<N.ImportDefaultSpecifier>(placeholder);\n      specifier.local = placeholder;\n      node.specifiers.push(\n        this.finishNode(specifier, \"ImportDefaultSpecifier\"),\n      );\n\n      if (this.eat(tt.comma)) {\n        // import %%DEFAULT%%, * as ...\n        const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n        // import %%DEFAULT%%, { ...\n        if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n      }\n\n      this.expectContextual(tt._from);\n      node.source = this.parseImportSource();\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n      // import ... from %%STRING%%;\n\n      return (\n        this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource()\n      );\n    }\n\n    // Throws if the current token and the prev one are separated by a space.\n    assertNoSpace(): void {\n      if (this.state.start > this.state.lastTokEndLoc.index) {\n        this.raise(PlaceholderErrors.UnexpectedSpace, {\n          at: this.state.lastTokEndLoc,\n        });\n      }\n    }\n  };\n","import type Parser from \"../parser\";\nimport { tokenIsIdentifier, tt } from \"../tokenizer/types\";\nimport type * as N from \"../types\";\nimport type { ExpressionErrors } from \"../parser/util\";\n\nexport default (superClass: typeof Parser) =>\n  class V8IntrinsicMixin extends superClass implements Parser {\n    parseV8Intrinsic(): N.Expression {\n      if (this.match(tt.modulo)) {\n        const v8IntrinsicStartLoc = this.state.startLoc;\n        // let the `loc` of Identifier starts from `%`\n        const node = this.startNode<N.Identifier>();\n        this.next(); // eat '%'\n        if (tokenIsIdentifier(this.state.type)) {\n          const name = this.parseIdentifierName();\n          const identifier = this.createIdentifier(node, name);\n          // @ts-expect-error: avoid mutating AST types\n          identifier.type = \"V8IntrinsicIdentifier\";\n          if (this.match(tt.parenL)) {\n            return identifier;\n          }\n        }\n        this.unexpected(v8IntrinsicStartLoc);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      return (\n        this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors)\n      );\n    }\n  };\n","import type Parser from \"./parser\";\nimport type {\n  ParserPluginWithOptions,\n  PluginConfig,\n  PluginOptions,\n} from \"./typings\";\n\nexport type Plugin = PluginConfig;\n\nexport type PluginList = PluginConfig[];\n\nexport type MixinPlugin = (superClass: { new (...args: any): Parser }) => {\n  new (...args: any): Parser;\n};\n\n// This functionâ€™s second parameter accepts either a string (plugin name) or an\n// array pair (plugin name and options object). If an options object is given,\n// then each value is non-recursively checked for identity with the actual\n// option value of each plugin in the first argument (which is an array of\n// plugin names or array pairs).\nexport function hasPlugin(\n  plugins: PluginList,\n  expectedConfig: PluginConfig,\n): boolean {\n  // The expectedOptions object is by default an empty object if the given\n  // expectedConfig argument does not give an options object (i.e., if it is a\n  // string).\n  const [expectedName, expectedOptions] =\n    typeof expectedConfig === \"string\" ? [expectedConfig, {}] : expectedConfig;\n\n  const expectedKeys = Object.keys(expectedOptions);\n\n  const expectedOptionsIsEmpty = expectedKeys.length === 0;\n\n  return plugins.some(p => {\n    if (typeof p === \"string\") {\n      return expectedOptionsIsEmpty && p === expectedName;\n    } else {\n      const [pluginName, pluginOptions] = p;\n      if (pluginName !== expectedName) {\n        return false;\n      }\n      for (const key of expectedKeys) {\n        // @ts-expect-error key may not exist in plugin options\n        if (pluginOptions[key] !== expectedOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  });\n}\n\nexport function getPluginOption<\n  PluginName extends ParserPluginWithOptions[0],\n  OptionName extends keyof PluginOptions<PluginName>,\n>(plugins: PluginList, name: PluginName, option: OptionName) {\n  const plugin = plugins.find(plugin => {\n    if (Array.isArray(plugin)) {\n      return plugin[0] === name;\n    } else {\n      return plugin === name;\n    }\n  });\n\n  if (plugin && Array.isArray(plugin) && plugin.length > 1) {\n    return (plugin[1] as PluginOptions<PluginName>)[option];\n  }\n\n  return null;\n}\n\nconst PIPELINE_PROPOSALS = [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^^\", \"@@\", \"^\", \"%\", \"#\"];\nconst RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n\nexport function validatePlugins(plugins: PluginList) {\n  if (hasPlugin(plugins, \"decorators\")) {\n    if (hasPlugin(plugins, \"decorators-legacy\")) {\n      throw new Error(\n        \"Cannot use the decorators and decorators-legacy plugin together\",\n      );\n    }\n\n    const decoratorsBeforeExport = getPluginOption(\n      plugins,\n      \"decorators\",\n      \"decoratorsBeforeExport\",\n    );\n    if (\n      decoratorsBeforeExport != null &&\n      typeof decoratorsBeforeExport !== \"boolean\"\n    ) {\n      throw new Error(\"'decoratorsBeforeExport' must be a boolean.\");\n    }\n\n    const allowCallParenthesized = getPluginOption(\n      plugins,\n      \"decorators\",\n      \"allowCallParenthesized\",\n    );\n    if (\n      allowCallParenthesized != null &&\n      typeof allowCallParenthesized !== \"boolean\"\n    ) {\n      throw new Error(\"'allowCallParenthesized' must be a boolean.\");\n    }\n  }\n\n  if (hasPlugin(plugins, \"flow\") && hasPlugin(plugins, \"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"placeholders\") && hasPlugin(plugins, \"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (hasPlugin(plugins, \"pipelineOperator\")) {\n    const proposal = getPluginOption(plugins, \"pipelineOperator\", \"proposal\");\n\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(\n        `\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`,\n      );\n    }\n\n    const tupleSyntaxIsHash = hasPlugin(plugins, [\n      \"recordAndTuple\",\n      { syntaxType: \"hash\" },\n    ]);\n\n    if (proposal === \"hack\") {\n      if (hasPlugin(plugins, \"placeholders\")) {\n        throw new Error(\n          \"Cannot combine placeholders plugin and Hack-style pipes.\",\n        );\n      }\n\n      if (hasPlugin(plugins, \"v8intrinsic\")) {\n        throw new Error(\n          \"Cannot combine v8intrinsic plugin and Hack-style pipes.\",\n        );\n      }\n\n      const topicToken = getPluginOption(\n        plugins,\n        \"pipelineOperator\",\n        \"topicToken\",\n      );\n\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n\n        throw new Error(\n          `\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`,\n        );\n      }\n\n      if (topicToken === \"#\" && tupleSyntaxIsHash) {\n        throw new Error(\n          'Plugin conflict between `[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.',\n        );\n      }\n    } else if (proposal === \"smart\" && tupleSyntaxIsHash) {\n      throw new Error(\n        'Plugin conflict between `[\"pipelineOperator\", { proposal: \"smart\" }]` and `[\"recordAndtuple\", { syntaxType: \"hash\"}]`.',\n      );\n    }\n  }\n\n  if (hasPlugin(plugins, \"moduleAttributes\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`moduleAttributes` has been removed in Babel 8, please use `importAssertions` parser plugin, or `@babel/plugin-syntax-import-assertions`.\",\n      );\n    } else {\n      if (hasPlugin(plugins, \"importAssertions\")) {\n        throw new Error(\n          \"Cannot combine importAssertions and moduleAttributes plugins.\",\n        );\n      }\n      const moduleAttributesVersionPluginOption = getPluginOption(\n        plugins,\n        \"moduleAttributes\",\n        \"version\",\n      );\n      if (moduleAttributesVersionPluginOption !== \"may-2020\") {\n        throw new Error(\n          \"The 'moduleAttributes' plugin requires a 'version' option,\" +\n            \" representing the last proposal update. Currently, the\" +\n            \" only supported value is 'may-2020'.\",\n        );\n      }\n    }\n  }\n\n  if (\n    hasPlugin(plugins, \"recordAndTuple\") &&\n    getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\") != null &&\n    !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(\n      getPluginOption(plugins, \"recordAndTuple\", \"syntaxType\"),\n    )\n  ) {\n    throw new Error(\n      \"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \" +\n        RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n    );\n  }\n\n  if (\n    hasPlugin(plugins, \"asyncDoExpressions\") &&\n    !hasPlugin(plugins, \"doExpressions\")\n  ) {\n    const error = new Error(\n      \"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\",\n    );\n    // @ts-expect-error so @babel/core can provide better error message\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree\";\nimport flow from \"./plugins/flow\";\nimport jsx from \"./plugins/jsx\";\nimport typescript from \"./plugins/typescript\";\nimport placeholders from \"./plugins/placeholders\";\nimport v8intrinsic from \"./plugins/v8intrinsic\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders,\n};\n\nexport const mixinPluginNames = Object.keys(mixinPlugins) as ReadonlyArray<\n  \"estree\" | \"jsx\" | \"flow\" | \"typescript\" | \"v8intrinsic\" | \"placeholders\"\n>;\n","import type { PluginList } from \"./plugin-utils\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"module\" | \"unambiguous\";\n\nexport type Options = {\n  sourceType: SourceType;\n  sourceFilename?: string;\n  startColumn: number;\n  startLine: number;\n  allowAwaitOutsideFunction: boolean;\n  allowReturnOutsideFunction: boolean;\n  allowImportExportEverywhere: boolean;\n  allowSuperOutsideMethod: boolean;\n  allowUndeclaredExports: boolean;\n  plugins: PluginList;\n  strictMode: boolean | undefined | null;\n  ranges: boolean;\n  tokens: boolean;\n  createParenthesizedExpressions: boolean;\n  errorRecovery: boolean;\n  attachComment: boolean;\n};\n\nexport const defaultOptions: Options = {\n  // Source type (\"script\" or \"module\") for different semantics\n  sourceType: \"script\",\n  // Source filename.\n  sourceFilename: undefined,\n  // Column (0-based) from which to start counting source. Useful for\n  // integration with other tools.\n  startColumn: 0,\n  // Line (1-based) from which to start counting source. Useful for\n  // integration with other tools.\n  startLine: 1,\n  // When enabled, await at the top level is not considered an\n  // error.\n  allowAwaitOutsideFunction: false,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program.\n  allowImportExportEverywhere: false,\n  // TODO\n  allowSuperOutsideMethod: false,\n  // When enabled, export statements can reference undeclared variables.\n  allowUndeclaredExports: false,\n  // An array of plugins to enable\n  plugins: [],\n  // TODO\n  strictMode: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // Adds all parsed tokens to a `tokens` property on the `File` node\n  tokens: false,\n  // Whether to create ParenthesizedExpression AST nodes (if false\n  // the parser sets extra.parenthesized on the expression nodes instead).\n  createParenthesizedExpressions: false,\n  // When enabled, errors are attached to the AST instead of being directly thrown.\n  // Some errors will still throw, because @babel/parser can't always recover.\n  errorRecovery: false,\n  // When enabled, comments will be attached to adjacent AST nodes as one of\n  // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\n  // is vital to preserve comments after transform. If you don't print AST back,\n  // consider set this option to `false` for performance\n  attachComment: true,\n};\n\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): Options {\n  const options: any = {};\n  for (const key of Object.keys(defaultOptions)) {\n    // @ts-expect-error key may not exist in opts\n    options[key] = opts && opts[key] != null ? opts[key] : defaultOptions[key];\n  }\n  return options;\n}\n","import * as charCodes from \"charcodes\";\nimport { tt, type TokenType } from \"../tokenizer/types\";\nimport type {\n  AssignmentPattern,\n  TSParameterProperty,\n  Decorator,\n  Expression,\n  Identifier,\n  Node,\n  Pattern,\n  RestElement,\n  SpreadElement,\n  ObjectOrClassMember,\n  ClassMember,\n  ObjectMember,\n  TsNamedTypeElementBase,\n  PrivateName,\n  ObjectExpression,\n  ObjectPattern,\n  ArrayExpression,\n  ArrayPattern,\n} from \"../types\";\nimport type { Pos, Position } from \"../util/location\";\nimport {\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n} from \"../util/identifier\";\nimport { NodeUtils, type Undone } from \"./node\";\nimport {\n  type BindingTypes,\n  BIND_NONE,\n  BIND_SCOPE_LEXICAL,\n} from \"../util/scopeflags\";\nimport type { ExpressionErrors } from \"./util\";\nimport { Errors, type LValAncestor } from \"../parse-error\";\nimport type Parser from \"./index\";\n\nconst getOwn = <T extends {}>(object: T, key: keyof T) =>\n  Object.hasOwnProperty.call(object, key) && object[key];\n\nconst unwrapParenthesizedExpression = (node: Node): Node => {\n  return node.type === \"ParenthesizedExpression\"\n    ? unwrapParenthesizedExpression(node.expression)\n    : node;\n};\n\nexport default abstract class LValParser extends NodeUtils {\n  // Forward-declaration: defined in expression.js\n  abstract parseIdentifier(liberal?: boolean): Identifier;\n  abstract parseMaybeAssign(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: Pos | null,\n  ): Expression;\n\n  abstract parseMaybeAssignAllowIn(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: Pos | null,\n  ): Expression;\n\n  abstract parseObjectLike<T extends ObjectPattern | ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): T;\n  abstract parseObjPropValue(\n    prop: any,\n    startLoc: Position | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void;\n  abstract parsePropertyName(\n    prop: ObjectOrClassMember | ClassMember | TsNamedTypeElementBase,\n  ): Expression | Identifier;\n  abstract parsePrivateName(): PrivateName;\n  // Forward-declaration: defined in statement.js\n  abstract parseDecorator(): Decorator;\n\n  /**\n   * Convert existing expression atom to assignable pattern\n   * if possible. Also checks invalid destructuring targets:\n   *\n   * - Parenthesized Destructuring patterns\n   * - RestElement is not the last element\n   * - Missing `=` in assignment pattern\n   *\n   * NOTE: There is a corresponding \"isAssignable\" method.\n   * When this one is updated, please check if also that one needs to be updated.\n   *\n   * @param node The expression atom\n   * @param isLHS Whether we are parsing a LeftHandSideExpression.\n   *              If isLHS is `true`, the following cases are allowed: `[(a)] = [0]`, `[(a.b)] = [0]`\n   *              If isLHS is `false`, we are in an arrow function parameters list.\n   */\n  toAssignable(node: Node, isLHS: boolean = false): void {\n    let parenthesized = undefined;\n    if (node.type === \"ParenthesizedExpression\" || node.extra?.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n      if (isLHS) {\n        // an LHS can be reinterpreted to a binding pattern but not vice versa.\n        // therefore a parenthesized identifier is ambiguous until we are sure it is an assignment expression\n        // i.e. `([(a) = []] = []) => {}`\n        // see also `recordArrowParemeterBindingError` signature in packages/babel-parser/src/util/expression-scope.js\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordArrowParameterBindingError(\n            Errors.InvalidParenthesizedAssignment,\n            { at: node },\n          );\n        } else if (parenthesized.type !== \"MemberExpression\") {\n          // A parenthesized member expression can be in LHS but not in pattern.\n          // If the LHS is later interpreted as a pattern, `checkLVal` will throw for member expression binding\n          // i.e. `([(a.b) = []] = []) => {}`\n          this.raise(Errors.InvalidParenthesizedAssignment, { at: node });\n        }\n      } else {\n        this.raise(Errors.InvalidParenthesizedAssignment, { at: node });\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        break;\n\n      case \"ObjectExpression\":\n        node.type = \"ObjectPattern\";\n        for (\n          let i = 0, length = node.properties.length, last = length - 1;\n          i < length;\n          i++\n        ) {\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n          if (\n            isLast &&\n            prop.type === \"RestElement\" &&\n            node.extra?.trailingCommaLoc\n          ) {\n            this.raise(Errors.RestTrailingComma, {\n              at: node.extra.trailingCommaLoc,\n            });\n          }\n        }\n        break;\n\n      case \"ObjectProperty\": {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n        break;\n      }\n\n      case \"SpreadElement\": {\n        throw new Error(\n          \"Internal @babel/parser error (this is a bug, please report it).\" +\n            \" SpreadElement should be converted by .toAssignable's caller.\",\n        );\n      }\n\n      case \"ArrayExpression\":\n        node.type = \"ArrayPattern\";\n        this.toAssignableList(\n          node.elements,\n          node.extra?.trailingCommaLoc,\n          isLHS,\n        );\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(Errors.MissingEqInAssignment, { at: node.left.loc.end });\n        }\n\n        node.type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        /*::invariant (parenthesized !== undefined) */\n        this.toAssignable(parenthesized, isLHS);\n        break;\n\n      default:\n      // We don't know how to deal with this node. It will\n      // be reported by a later call to checkLVal\n    }\n  }\n\n  toAssignableObjectExpressionProp(\n    prop: Node,\n    isLast: boolean,\n    isLHS: boolean,\n  ) {\n    if (prop.type === \"ObjectMethod\") {\n      this.raise(\n        prop.kind === \"get\" || prop.kind === \"set\"\n          ? Errors.PatternHasAccessor\n          : Errors.PatternHasMethod,\n        { at: prop.key },\n      );\n    } else if (prop.type === \"SpreadElement\") {\n      prop.type = \"RestElement\";\n      const arg = prop.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ false);\n      this.toAssignable(arg, isLHS);\n\n      if (!isLast) {\n        this.raise(Errors.RestTrailingComma, { at: prop });\n      }\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n\n  // Convert list of expression atoms to binding list.\n\n  toAssignableList(\n    exprList: Expression[],\n    trailingCommaLoc: Position | undefined | null,\n    isLHS: boolean,\n  ): void {\n    const end = exprList.length - 1;\n\n    for (let i = 0; i <= end; i++) {\n      const elt = exprList[i];\n      if (!elt) continue;\n\n      if (elt.type === \"SpreadElement\") {\n        elt.type = \"RestElement\";\n        const arg = elt.argument;\n        this.checkToRestConversion(arg, /* allowPattern */ true);\n        this.toAssignable(arg, isLHS);\n      } else {\n        this.toAssignable(elt, isLHS);\n      }\n\n      if (elt.type === \"RestElement\") {\n        if (i < end) {\n          this.raise(Errors.RestTrailingComma, { at: elt });\n        } else if (trailingCommaLoc) {\n          this.raise(Errors.RestTrailingComma, { at: trailingCommaLoc });\n        }\n      }\n    }\n  }\n\n  isAssignable(node: Node, isBinding?: boolean): boolean {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        return true;\n\n      case \"ObjectExpression\": {\n        const last = node.properties.length - 1;\n        return (node.properties as ObjectExpression[\"properties\"]).every(\n          (prop, i) => {\n            return (\n              prop.type !== \"ObjectMethod\" &&\n              (i === last || prop.type !== \"SpreadElement\") &&\n              this.isAssignable(prop)\n            );\n          },\n        );\n      }\n\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n\n      case \"ArrayExpression\":\n        return (node as ArrayExpression).elements.every(\n          element => element === null || this.isAssignable(element),\n        );\n\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n\n      default:\n        return false;\n    }\n  }\n\n  // Convert list of expression atoms to a list of\n\n  toReferencedList(\n    exprList: ReadonlyArray<Expression | undefined | null>,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isParenthesizedExpr?: boolean,\n  ): ReadonlyArray<Expression | undefined | null> {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList: ReadonlyArray<Expression | undefined | null>,\n    isParenthesizedExpr?: boolean,\n  ): void {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if (expr?.type === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  // Parses spread element.\n\n  parseSpread(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): SpreadElement {\n    const node = this.startNode<SpreadElement>();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(\n      refExpressionErrors,\n      undefined,\n    );\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  // https://tc39.es/ecma262/#prod-BindingRestElement\n  parseRestBinding(this: Parser): RestElement {\n    const node = this.startNode<RestElement>();\n    this.next(); // eat `...`\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  // Parses lvalue (assignable) atom.\n  parseBindingAtom(this: Parser): Pattern {\n    // https://tc39.es/ecma262/#prod-BindingPattern\n    switch (this.state.type) {\n      case tt.bracketL: {\n        const node = this.startNode<ArrayPattern>();\n        this.next();\n        // @ts-expect-error: Fixme: TSParameterProperty can not be assigned to node.elements\n        node.elements = this.parseBindingList(\n          tt.bracketR,\n          charCodes.rightSquareBracket,\n          true,\n        );\n        return this.finishNode(node, \"ArrayPattern\");\n      }\n\n      case tt.braceL:\n        return this.parseObjectLike(tt.braceR, true);\n    }\n\n    // https://tc39.es/ecma262/#prod-BindingIdentifier\n    return this.parseIdentifier();\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElementList\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: typeof charCodes[keyof typeof charCodes],\n    allowEmpty?: boolean,\n    allowModifiers?: boolean,\n  ): Array<Pattern | TSParameterProperty> {\n    const elts: Array<Pattern | TSParameterProperty> = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n      }\n      if (allowEmpty && this.match(tt.comma)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(tt.ellipsis)) {\n        elts.push(this.parseAssignableListItemTypes(this.parseRestBinding()));\n        if (!this.checkCommaAfterRest(closeCharCode)) {\n          this.expect(close);\n          break;\n        }\n      } else {\n        const decorators = [];\n        if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n          this.raise(Errors.UnsupportedParameterDecorator, {\n            at: this.state.startLoc,\n          });\n        }\n        // invariant: hasPlugin(\"decorators-legacy\")\n        while (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n        }\n        elts.push(this.parseAssignableListItem(allowModifiers, decorators));\n      }\n    }\n    return elts;\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  parseBindingRestProperty(\n    this: Parser,\n    prop: Undone<RestElement>,\n  ): RestElement {\n    this.next(); // eat '...'\n    // Don't use parseRestBinding() as we only allow Identifier here.\n    prop.argument = this.parseIdentifier();\n    this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n    return this.finishNode(prop, \"RestElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingProperty\n  parseBindingProperty(this: Parser): ObjectMember | RestElement {\n    const prop = this.startNode<ObjectMember | RestElement>();\n    const { type, startLoc } = this.state;\n    if (type === tt.ellipsis) {\n      return this.parseBindingRestProperty(prop as Undone<RestElement>);\n    } else if (type === tt.privateName) {\n      this.expectPlugin(\"destructuringPrivate\", startLoc);\n      this.classScope.usePrivateName(this.state.value, startLoc);\n      (prop as Undone<ObjectMember>).key = this.parsePrivateName();\n    } else {\n      this.parsePropertyName(prop as Undone<ObjectMember>);\n    }\n    (prop as Undone<ObjectMember>).method = false;\n    return this.parseObjPropValue(\n      prop as Undone<ObjectMember>,\n      startLoc,\n      false /* isGenerator */,\n      false /* isAsync */,\n      true /* isPattern */,\n      false /* isAccessor */,\n    );\n  }\n\n  parseAssignableListItem(\n    this: Parser,\n    allowModifiers: boolean | undefined | null,\n    decorators: Decorator[],\n  ): Pattern | TSParameterProperty {\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left);\n    const elt = this.parseMaybeDefault(left.loc.start, left);\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n    return elt;\n  }\n\n  // Used by flow/typescript plugin to add type annotations to binding elements\n  parseAssignableListItemTypes(param: Pattern): Pattern {\n    return param;\n  }\n\n  // Parses assignment pattern around given atom if possible.\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseMaybeDefault(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: Pattern | null,\n  ): Pattern {\n    startLoc ??= this.state.startLoc;\n    left = left ?? this.parseBindingAtom();\n    if (!this.eat(tt.eq)) return left;\n\n    const node = this.startNodeAt<AssignmentPattern>(startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n  /**\n   * Return information use in determining whether a Node of a given type is an LVal,\n   * possibly given certain additional context information.\n   *\n   * Subclasser notes: This method has kind of a lot of mixed, but related,\n   * responsibilities. If we can definitively determine with the information\n   * provided that this either *is* or *isn't* a valid `LVal`, then the return\n   * value is easy: just return `true` or `false`. However, if it is a valid\n   * LVal *ancestor*, and thus it's descendents must be subsquently visited to\n   * continue the \"investigation\", then this method should return the relevant\n   * child key as a `string`. In some special cases, you additionally want to\n   * convey that this node should be treated as if it were parenthesized. In\n   * that case, a tuple of [key: string, parenthesized: boolean] is returned.\n   * The `string`-only return option is actually just a shorthand for:\n   * `[key: string, parenthesized: false]`.\n   *\n   * @param type A Node `type` string\n   * @param isUnparenthesizedInAssign\n   *        Whether the node in question is unparenthesized and its parent\n   *        is either an assignment pattern or an assignment expression.\n   * @param binding\n   *        The binding operation that is being considered for this potential\n   *        LVal.\n   * @returns `true` or `false` if we can immediately determine whether the node\n   *          type in question can be treated as an `LVal`.\n   *          A `string` key to traverse if we must check this child.\n   *          A `[string, boolean]` tuple if we need to check this child and\n   *          treat is as parenthesized.\n   */\n  isValidLVal(\n    type: string,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isUnparenthesizedInAssign: boolean,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    binding: BindingTypes,\n  ): string | boolean {\n    return getOwn(\n      {\n        AssignmentPattern: \"left\",\n        RestElement: \"argument\",\n        ObjectProperty: \"value\",\n        ParenthesizedExpression: \"expression\",\n        ArrayPattern: \"elements\",\n        ObjectPattern: \"properties\",\n      },\n      // @ts-expect-error refine string to enum\n      type,\n    );\n  }\n\n  /**\n   * Verify that a target expression is an lval (something that can be assigned to).\n   *\n   * @param expression The expression in question to check.\n   * @param options A set of options described below.\n   * @param options.in\n   *        The relevant ancestor to provide context information for the error\n   *        if the check fails.\n   * @param options.binding\n   *        The desired binding type. If the given expression is an identifier\n   *        and `binding` is not `BIND_NONE`, `checkLVal` will register binding\n   *        to the parser scope See also `src/util/scopeflags.js`\n   * @param options.checkClashes\n   *        An optional string set to check if an identifier name is included.\n   *        `checkLVal` will add checked identifier name to `checkClashes` It is\n   *        used in tracking duplicates in function parameter lists. If it is\n   *        false, `checkLVal` will skip duplicate checks\n   * @param options.allowingSloppyLetBinding\n   *        Whether an identifier named \"let\" should be allowed in sloppy mode.\n   *        Defaults to `true` unless lexical scope its being used. This property\n   *        is only relevant if the parser's state is in sloppy mode.\n   * @param options.strictModeChanged\n   *        Whether an identifier has been parsed in a sloppy context but should\n   *        be reinterpreted as strict-mode. e.g. `(arguments) => { \"use strict \"}`\n   * @param options.hasParenthesizedAncestor\n   *        This is only used internally during recursive calls, and you should\n   *        not have to set it yourself.\n   */\n\n  checkLVal(\n    expression: Expression | ObjectMember | RestElement,\n    {\n      in: ancestor,\n      binding = BIND_NONE,\n      checkClashes = false,\n      strictModeChanged = false,\n      allowingSloppyLetBinding = !(binding & BIND_SCOPE_LEXICAL),\n      hasParenthesizedAncestor = false,\n    }: {\n      in: LValAncestor;\n      binding?: BindingTypes;\n      checkClashes?: Set<string> | false;\n      strictModeChanged?: boolean;\n      allowingSloppyLetBinding?: boolean;\n      hasParenthesizedAncestor?: boolean;\n    },\n  ): void {\n    const type = expression.type;\n\n    // If we find here an ObjectMethod, it's because this was originally\n    // an ObjectExpression which has then been converted.\n    // toAssignable already reported this error with a nicer message.\n    if (this.isObjectMethod(expression)) return;\n\n    if (type === \"MemberExpression\") {\n      if (binding !== BIND_NONE) {\n        this.raise(Errors.InvalidPropertyBindingPattern, { at: expression });\n      }\n      return;\n    }\n\n    if (expression.type === \"Identifier\") {\n      this.checkIdentifier(\n        expression as Identifier,\n        binding,\n        strictModeChanged,\n        allowingSloppyLetBinding,\n      );\n\n      const { name } = expression as Identifier;\n\n      if (checkClashes) {\n        if (checkClashes.has(name)) {\n          this.raise(Errors.ParamDupe, { at: expression });\n        } else {\n          checkClashes.add(name);\n        }\n      }\n\n      return;\n    }\n\n    const validity = this.isValidLVal(\n      expression.type,\n      !(hasParenthesizedAncestor || expression.extra?.parenthesized) &&\n        ancestor.type === \"AssignmentExpression\",\n      binding,\n    );\n\n    if (validity === true) return;\n    if (validity === false) {\n      const ParseErrorClass =\n        binding === BIND_NONE ? Errors.InvalidLhs : Errors.InvalidLhsBinding;\n\n      this.raise(ParseErrorClass, {\n        at: expression,\n        ancestor:\n          ancestor.type === \"UpdateExpression\"\n            ? { type: \"UpdateExpression\", prefix: ancestor.prefix }\n            : { type: ancestor.type },\n      });\n      return;\n    }\n\n    const [key, isParenthesizedExpression] = Array.isArray(validity)\n      ? validity\n      : [validity, type === \"ParenthesizedExpression\"];\n    const nextAncestor =\n      expression.type === \"ArrayPattern\" ||\n      expression.type === \"ObjectPattern\" ||\n      expression.type === \"ParenthesizedExpression\"\n        ? expression\n        : ancestor;\n\n    // @ts-expect-error key may not index expression.\n    for (const child of [].concat(expression[key])) {\n      if (child) {\n        this.checkLVal(child, {\n          // @ts-expect-error: refine types\n          in: nextAncestor,\n          binding,\n          checkClashes,\n          allowingSloppyLetBinding,\n          strictModeChanged,\n          hasParenthesizedAncestor: isParenthesizedExpression,\n        });\n      }\n    }\n  }\n\n  checkIdentifier(\n    at: Identifier,\n    bindingType: BindingTypes,\n    strictModeChanged: boolean = false,\n    allowLetBinding: boolean = !(bindingType & BIND_SCOPE_LEXICAL),\n  ) {\n    if (\n      this.state.strict &&\n      (strictModeChanged\n        ? isStrictBindReservedWord(at.name, this.inModule)\n        : isStrictBindOnlyReservedWord(at.name))\n    ) {\n      if (bindingType === BIND_NONE) {\n        this.raise(Errors.StrictEvalArguments, { at, referenceName: at.name });\n      } else {\n        this.raise(Errors.StrictEvalArgumentsBinding, {\n          at,\n          bindingName: at.name,\n        });\n      }\n    }\n\n    if (!allowLetBinding && at.name === \"let\") {\n      this.raise(Errors.LetInLexicalBinding, { at });\n    }\n\n    if (!(bindingType & BIND_NONE)) {\n      this.declareNameFromIdentifier(at, bindingType);\n    }\n  }\n\n  declareNameFromIdentifier(identifier: Identifier, binding: BindingTypes) {\n    this.scope.declareName(identifier.name, binding, identifier.loc.start);\n  }\n\n  checkToRestConversion(node: Node, allowPattern: boolean): void {\n    switch (node.type) {\n      case \"ParenthesizedExpression\":\n        this.checkToRestConversion(node.expression, allowPattern);\n        break;\n      case \"Identifier\":\n      case \"MemberExpression\":\n        break;\n      case \"ArrayExpression\":\n      case \"ObjectExpression\":\n        if (allowPattern) break;\n      /* falls through */\n      default:\n        this.raise(Errors.InvalidRestAssignmentPattern, { at: node });\n    }\n  }\n\n  checkCommaAfterRest(\n    close: typeof charCodes[keyof typeof charCodes],\n  ): boolean {\n    if (!this.match(tt.comma)) {\n      return false;\n    }\n\n    this.raise(\n      this.lookaheadCharCode() === close\n        ? Errors.RestTrailingComma\n        : Errors.ElementAfterRest,\n      { at: this.state.startLoc },\n    );\n\n    return true;\n  }\n}\n","// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts â€” that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {\n  tokenCanStartExpression,\n  tokenIsAssignment,\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsOperator,\n  tokenIsPostfix,\n  tokenIsPrefix,\n  tokenIsRightAssociative,\n  tokenIsTemplate,\n  tokenKeywordOrIdentifierIsKeyword,\n  tokenLabelName,\n  tokenOperatorPrecedence,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types\";\nimport type * as N from \"../types\";\nimport LValParser from \"./lval\";\nimport {\n  isKeyword,\n  isReservedWord,\n  isStrictReservedWord,\n  isStrictBindReservedWord,\n  isIdentifierStart,\n  canBeReservedWord,\n} from \"../util/identifier\";\nimport {\n  type Position,\n  createPositionWithColumnOffset,\n} from \"../util/location\";\nimport * as charCodes from \"charcodes\";\nimport {\n  BIND_OUTSIDE,\n  BIND_VAR,\n  SCOPE_ARROW,\n  SCOPE_CLASS,\n  SCOPE_DIRECT_SUPER,\n  SCOPE_FUNCTION,\n  SCOPE_SUPER,\n} from \"../util/scopeflags\";\nimport { ExpressionErrors } from \"./util\";\nimport {\n  PARAM_AWAIT,\n  PARAM_IN,\n  PARAM_RETURN,\n  functionFlags,\n} from \"../util/production-parameter\";\nimport {\n  newArrowHeadScope,\n  newAsyncArrowScope,\n  newExpressionScope,\n} from \"../util/expression-scope\";\nimport { Errors, type ParseError } from \"../parse-error\";\nimport { UnparenthesizedPipeBodyDescriptions } from \"../parse-error/pipeline-operator-errors\";\nimport { setInnerComments } from \"./comments\";\nimport { cloneIdentifier, type Undone } from \"./node\";\nimport type Parser from \".\";\n\nimport type { SourceType } from \"../options\";\n\nexport default abstract class ExpressionParser extends LValParser {\n  // Forward-declaration: defined in statement.js\n  abstract parseBlock(\n    allowDirectives?: boolean,\n    createNewLexicalScope?: boolean,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement;\n  abstract parseClass(\n    node: N.Class,\n    isStatement: boolean,\n    optionalId?: boolean,\n  ): N.Class;\n  abstract parseDecorators(allowExport?: boolean): void;\n  abstract parseFunction<T extends N.NormalFunction>(\n    node: T,\n    statement?: number,\n    allowExpressionBody?: boolean,\n    isAsync?: boolean,\n  ): T;\n  abstract parseFunctionParams(\n    node: N.Function,\n    allowModifiers?: boolean,\n  ): void;\n  abstract parseBlockOrModuleBlockBody(\n    body: N.Statement[],\n    directives: N.Directive[] | null | undefined,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void;\n  abstract parseProgram(\n    program: N.Program,\n    end: TokenType,\n    sourceType?: SourceType,\n  ): N.Program;\n\n  // For object literal, check if property __proto__ has been used more than once.\n  // If the expression is a destructuring assignment, then __proto__ may appear\n  // multiple times. Otherwise, __proto__ is a duplicated key.\n\n  // For record expression, check if property __proto__ exists\n\n  checkProto(\n    prop: N.ObjectMember | N.SpreadElement,\n    isRecord: boolean | undefined | null,\n    protoRef: {\n      used: boolean;\n    },\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (\n      prop.type === \"SpreadElement\" ||\n      this.isObjectMethod(prop) ||\n      prop.computed ||\n      // @ts-expect-error prop must be an ObjectProperty\n      prop.shorthand\n    ) {\n      return;\n    }\n\n    const key = prop.key;\n    // It is either an Identifier or a String/NumericLiteral\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(Errors.RecordNoProto, { at: key });\n        return;\n      }\n      if (protoRef.used) {\n        if (refExpressionErrors) {\n          // Store the first redefinition's position, otherwise ignore because\n          // we are parsing ambiguous pattern\n          if (refExpressionErrors.doubleProtoLoc === null) {\n            refExpressionErrors.doubleProtoLoc = key.loc.start;\n          }\n        } else {\n          this.raise(Errors.DuplicateProto, { at: key });\n        }\n      }\n\n      protoRef.used = true;\n    }\n  }\n\n  shouldExitDescending(expr: N.Expression, potentialArrowAt: number): boolean {\n    return (\n      expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt\n    );\n  }\n\n  // Convenience method to parse an Expression only\n  getExpression(this: Parser): N.Expression & N.ParserOutput {\n    this.enterInitialScopes();\n    this.nextToken();\n    const expr = this.parseExpression();\n    if (!this.match(tt.eof)) {\n      this.unexpected();\n    }\n    // Unlike parseTopLevel, we need to drain remaining commentStacks\n    // because the top level node is _not_ Program.\n    this.finalizeRemainingComments();\n    expr.comments = this.state.comments;\n    expr.errors = this.state.errors;\n    if (this.options.tokens) {\n      expr.tokens = this.tokens;\n    }\n    // @ts-expect-error fixme: refine types\n    return expr;\n  }\n\n  // ### Expression parsing\n\n  // These nest, from the most general expression type at the top to\n  // 'atomic', nondivisible expression types at the bottom. Most of\n  // the functions will simply let the function (s) below them parse,\n  // and, *if* the syntactic construct they handle is present, wrap\n  // the AST node that the inner parser gave them in another node.\n\n  // Parse a full expression.\n  // - `disallowIn`\n  //   is used to forbid the `in` operator (in for loops initialization expressions)\n  //   When `disallowIn` is true, the production parameter [In] is not present.\n\n  // - `refExpressionErrors `\n  //   provides reference for storing '=' operator inside shorthand\n  //   property assignment in contexts where both object expression\n  //   and object pattern might appear (so it's possible to raise\n  //   delayed syntax error at correct position).\n\n  parseExpression(\n    this: Parser,\n    disallowIn?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    if (disallowIn) {\n      return this.disallowInAnd(() =>\n        this.parseExpressionBase(refExpressionErrors),\n      );\n    }\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  // https://tc39.es/ecma262/#prod-Expression\n  parseExpressionBase(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(tt.comma)) {\n      const node = this.startNodeAt(startLoc);\n      node.expressions = [expr];\n      while (this.eat(tt.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n    return expr;\n  }\n\n  // Set [~In] parameter for assignment expression\n  parseMaybeAssignDisallowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.disallowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // Set [+In] parameter for assignment expression\n  parseMaybeAssignAllowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.allowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // This method is only used by\n  // the typescript and flow plugins.\n  setOptionalParametersError(\n    refExpressionErrors: ExpressionErrors,\n    resultError?: ParseError<any>,\n  ) {\n    refExpressionErrors.optionalParametersLoc =\n      resultError?.loc ?? this.state.startLoc;\n  }\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\n  parseMaybeAssign(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    if (this.isContextual(tt._yield)) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startLoc);\n        }\n        return left;\n      }\n    }\n\n    let ownExpressionErrors;\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n    const { type } = this.state;\n\n    if (type === tt.parenL || tokenIsIdentifier(type)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startLoc);\n    }\n    if (tokenIsAssignment(this.state.type)) {\n      const node = this.startNodeAt<N.AssignmentExpression>(startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      if (this.match(tt.eq)) {\n        this.toAssignable(left, /* isLHS */ true);\n        node.left = left;\n\n        const startIndex = startLoc.index;\n        if (\n          refExpressionErrors.doubleProtoLoc != null &&\n          refExpressionErrors.doubleProtoLoc.index >= startIndex\n        ) {\n          refExpressionErrors.doubleProtoLoc = null; // reset because double __proto__ is valid in assignment expression\n        }\n        if (\n          refExpressionErrors.shorthandAssignLoc != null &&\n          refExpressionErrors.shorthandAssignLoc.index >= startIndex\n        ) {\n          refExpressionErrors.shorthandAssignLoc = null; // reset because shorthand default was used correctly\n        }\n        if (\n          refExpressionErrors.privateKeyLoc != null &&\n          refExpressionErrors.privateKeyLoc.index >= startIndex\n        ) {\n          this.checkDestructuringPrivate(refExpressionErrors);\n          refExpressionErrors.privateKeyLoc = null; // reset because `({ #x: x })` is an assignable pattern\n        }\n      } else {\n        node.left = left;\n      }\n\n      this.next();\n      node.right = this.parseMaybeAssign();\n      this.checkLVal(left, {\n        in: this.finishNode(node, \"AssignmentExpression\"),\n      });\n      // @ts-expect-error todo(flow->ts) improve node types\n      return node;\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    return left;\n  }\n\n  // Parse a ternary conditional (`?:`) operator.\n  // https://tc39.es/ecma262/#prod-ConditionalExpression\n\n  parseMaybeConditional(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (this.eat(tt.question)) {\n      const node = this.startNodeAt(startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(tt.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n    return expr;\n  }\n\n  parseMaybeUnaryOrPrivate(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression | N.PrivateName {\n    return this.match(tt.privateName)\n      ? this.parsePrivateName()\n      : this.parseMaybeUnary(refExpressionErrors);\n  }\n\n  // Start the precedence parser.\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n  parseExprOps(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startLoc, -1);\n  }\n\n  // Parse binary operators with the operator precedence parsing\n  // algorithm. `left` is the left-hand side of the operator.\n  // `minPrec` provides context that allows the function to stop and\n  // defer further parser to one of its callers when it encounters an\n  // operator that has a lower precedence than the set it is parsing.\n\n  parseExprOp(\n    this: Parser,\n    left: N.Expression | N.PrivateName,\n    leftStartLoc: Position,\n    minPrec: number,\n  ): N.Expression {\n    if (this.isPrivateName(left)) {\n      // https://tc39.es/ecma262/#prod-RelationalExpression\n      // RelationalExpression [In, Yield, Await]\n      //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n\n      const value = this.getPrivateNameSV(left);\n\n      if (\n        minPrec >= tokenOperatorPrecedence(tt._in) ||\n        !this.prodParam.hasIn ||\n        !this.match(tt._in)\n      ) {\n        this.raise(Errors.PrivateInExpectedIn, {\n          at: left,\n          identifierName: value,\n        });\n      }\n\n      this.classScope.usePrivateName(value, left.loc.start);\n    }\n\n    const op = this.state.type;\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(tt._in))) {\n      let prec = tokenOperatorPrecedence(op);\n      if (prec > minPrec) {\n        if (op === tt.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            return left;\n          }\n          this.checkPipelineAtInfixOperator(left, leftStartLoc);\n        }\n        const node = this.startNodeAt<N.LogicalExpression | N.BinaryExpression>(\n          leftStartLoc,\n        );\n        node.left = left;\n        node.operator = this.state.value;\n\n        const logical = op === tt.logicalOR || op === tt.logicalAND;\n        const coalesce = op === tt.nullishCoalescing;\n\n        if (coalesce) {\n          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n          prec = tokenOperatorPrecedence(tt.logicalAND);\n        }\n\n        this.next();\n\n        if (\n          op === tt.pipeline &&\n          this.hasPlugin([\"pipelineOperator\", { proposal: \"minimal\" }])\n        ) {\n          if (this.state.type === tt._await && this.prodParam.hasAwait) {\n            throw this.raise(Errors.UnexpectedAwaitAfterPipelineBody, {\n              at: this.state.startLoc,\n            });\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        const finishedNode = this.finishNode(\n          node,\n          logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\",\n        );\n        /* this check is for all ?? operators\n         * a ?? b && c for this example\n         * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\n         * Symmetrically it also throws when op is logical and nextOp is coalesce\n         */\n        const nextOp = this.state.type;\n        if (\n          (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\n          (logical && nextOp === tt.nullishCoalescing)\n        ) {\n          throw this.raise(Errors.MixingCoalesceWithLogical, {\n            at: this.state.startLoc,\n          });\n        }\n\n        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\n      }\n    }\n    return left;\n  }\n\n  // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n  // operator expressions, then apply any operator-specific functions.\n\n  parseExprOpRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    switch (op) {\n      case tt.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              return this.parseHackPipeBody();\n            });\n\n          case \"smart\":\n            return this.withTopicBindingContext(() => {\n              if (this.prodParam.hasYield && this.isContextual(tt._yield)) {\n                throw this.raise(Errors.PipeBodyIsTighter, {\n                  at: this.state.startLoc,\n                });\n              }\n              return this.parseSmartPipelineBodyInStyle(\n                this.parseExprOpBaseRightExpr(op, prec),\n                startLoc,\n              );\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n      // Falls through.\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n  // binary-operator expressions without applying any operator-specific functions.\n\n  parseExprOpBaseRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    return this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      tokenIsRightAssociative(op) ? prec - 1 : prec,\n    );\n  }\n\n  parseHackPipeBody(this: Parser): N.Expression {\n    const { startLoc } = this.state;\n    const body = this.parseMaybeAssign();\n    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(\n      // @ts-expect-error TS2345: Argument of type 'string' is not assignable to parameter of type '\"ArrowFunctionExpression\" | \"YieldExpression\" | \"AssignmentExpression\" | \"ConditionalExpression\"'.\n      body.type,\n    );\n\n    // TODO: Check how to handle type casts in Flow and TS once they are supported\n    if (requiredParentheses && !body.extra?.parenthesized) {\n      this.raise(Errors.PipeUnparenthesizedBody, {\n        at: startLoc,\n        // @ts-expect-error TS2322: Type 'string' is not assignable to type '\"AssignmentExpression\" | \"ArrowFunctionExpression\" | \"ConditionalExpression\" | \"YieldExpression\"'.\n        type: body.type,\n      });\n    }\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      // A Hack pipe body must use the topic reference at least once.\n      this.raise(Errors.PipeTopicUnused, { at: startLoc });\n    }\n\n    return body;\n  }\n\n  checkExponentialAfterUnary(\n    node: N.AwaitExpression | Undone<N.UnaryExpression>,\n  ) {\n    if (this.match(tt.exponent)) {\n      this.raise(Errors.UnexpectedTokenUnaryExponentiation, {\n        at: node.argument,\n      });\n    }\n  }\n\n  // Parse unary operators, both prefix and postfix.\n  // https://tc39.es/ecma262/#prod-UnaryExpression\n  parseMaybeUnary(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    sawUnary?: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(tt._await);\n\n    if (isAwait && this.isAwaitAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n    const update = this.match(tt.incDec);\n    const node = this.startNode<N.UnaryExpression | N.UpdateExpression>();\n    if (tokenIsPrefix(this.state.type)) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(tt._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n      const isDelete = this.match(tt._delete);\n      this.next();\n\n      node.argument = this.parseMaybeUnary(null, true);\n\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(Errors.StrictDelete, { at: node });\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(Errors.DeletePrivateField, { at: node });\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) {\n          this.checkExponentialAfterUnary(node as Undone<N.UnaryExpression>);\n        }\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(\n      // @ts-expect-error using \"Undone\" node as \"done\"\n      node,\n      update,\n      refExpressionErrors,\n    );\n\n    if (isAwait) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousAwait()) {\n        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, { at: startLoc });\n        return this.parseAwait(startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  // https://tc39.es/ecma262/#prod-UpdateExpression\n  parseUpdate(\n    this: Parser,\n    node: N.Expression,\n    update: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (update) {\n      // @ts-expect-error Type 'Node' is missing the following properties from type 'Undone<UpdateExpression>': prefix, operator, argument\n      const updateExpressionNode = node as Undone<N.UpdateExpression>;\n      this.checkLVal(updateExpressionNode.argument, {\n        in: this.finishNode(updateExpressionNode, \"UpdateExpression\"),\n      });\n      return node;\n    }\n\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt<N.UpdateExpression>(startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.next();\n      this.checkLVal(expr, {\n        in: (expr = this.finishNode(node, \"UpdateExpression\")),\n      });\n    }\n    return expr;\n  }\n\n  // Parse call, dot, and `[]`-subscript expressions.\n  // https://tc39.es/ecma262/#prod-LeftHandSideExpression\n  parseExprSubscripts(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startLoc);\n  }\n\n  parseSubscripts(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls?: boolean | null,\n  ): N.Expression {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false,\n    };\n    do {\n      base = this.parseSubscript(base, startLoc, noCalls, state);\n\n      // After parsing a subscript, this isn't \"async\" for sure.\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n    return base;\n  }\n\n  /**\n   * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n   *   state.optionalChainMember to indicate that the member is currently in OptionalChain\n   */\n  parseSubscript(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const { type } = this.state;\n    if (!noCalls && type === tt.doubleColon) {\n      return this.parseBind(base, startLoc, noCalls, state);\n    } else if (tokenIsTemplate(type)) {\n      return this.parseTaggedTemplateExpression(base, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (type === tt.questionDot) {\n      if (noCalls && this.lookaheadCharCode() === charCodes.leftParenthesis) {\n        // stop at `?.` when parsing `new a?.()`\n        state.stop = true;\n        return base;\n      }\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n\n    if (!noCalls && this.match(tt.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(\n        base,\n        startLoc,\n        state,\n        optional,\n      );\n    } else {\n      const computed = this.eat(tt.bracketL);\n      if (computed || optional || this.eat(tt.dot)) {\n        return this.parseMember(base, startLoc, state, computed, optional);\n      } else {\n        state.stop = true;\n        return base;\n      }\n    }\n  }\n\n  // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\n  // base[?Yield, ?Await] . IdentifierName\n  // base[?Yield, ?Await] . PrivateIdentifier\n  //   where `base` is one of CallExpression, MemberExpression and OptionalChain\n  parseMember(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    computed: boolean,\n    optional: boolean,\n  ): N.OptionalMemberExpression | N.MemberExpression {\n    const node = this.startNodeAt<\n      N.OptionalMemberExpression | N.MemberExpression\n    >(startLoc);\n    node.object = base;\n    node.computed = computed;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(tt.bracketR);\n    } else if (this.match(tt.privateName)) {\n      if (base.type === \"Super\") {\n        this.raise(Errors.SuperPrivateField, { at: startLoc });\n      }\n      this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n      node.property = this.parsePrivateName();\n    } else {\n      node.property = this.parseIdentifier(true);\n    }\n\n    if (state.optionalChainMember) {\n      (node as N.OptionalMemberExpression).optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  // https://github.com/tc39/proposal-bind-operator#syntax\n  parseBind(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const node = this.startNodeAt(startLoc);\n    node.object = base;\n    this.next(); // eat '::'\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(\n      this.finishNode(node, \"BindExpression\"),\n      startLoc,\n      noCalls,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\n  // CoverCallExpressionAndAsyncArrowHead\n  // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\n  // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\n  parseCoverCallAndAsyncArrowHead(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.Expression {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors: ExpressionErrors | null = null;\n\n    this.state.maybeInArrowParameters = true;\n    this.next(); // eat `(`\n\n    const node = this.startNodeAt<N.CallExpression | N.OptionalCallExpression>(\n      startLoc,\n    );\n    node.callee = base;\n    const { maybeAsyncArrow, optionalChainMember } = state;\n\n    if (maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (optionalChainMember) {\n      // @ts-expect-error when optionalChainMember is true, node must be an optional call\n      node.optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments(tt.parenR);\n    } else {\n      node.arguments = this.parseCallExpressionArguments(\n        tt.parenR,\n        base.type === \"Import\",\n        base.type !== \"Super\",\n        // @ts-expect-error todo(flow->ts)\n        node,\n        refExpressionErrors,\n      );\n    }\n    let finishedNode:\n      | N.CallExpression\n      | N.OptionalCallExpression\n      | N.ArrowFunctionExpression = this.finishCallExpression(\n      node,\n      optionalChainMember,\n    );\n\n    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      /*:: invariant(refExpressionErrors != null) */\n      state.stop = true;\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      finishedNode = this.parseAsyncArrowFromCallExpression(\n        this.startNodeAt<N.ArrowFunctionExpression>(startLoc),\n        finishedNode as N.CallExpression,\n      );\n    } else {\n      if (maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n      this.toReferencedArguments(finishedNode);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return finishedNode;\n  }\n\n  toReferencedArguments(\n    node: N.CallExpression | N.OptionalCallExpression,\n    isParenthesizedExpr?: boolean,\n  ) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n\n  // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  parseTaggedTemplateExpression(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n  ): N.TaggedTemplateExpression {\n    const node = this.startNodeAt<N.TaggedTemplateExpression>(startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(Errors.OptionalChainingNoTemplate, { at: startLoc });\n    }\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base: N.Expression): boolean {\n    return (\n      base.type === \"Identifier\" &&\n      base.name === \"async\" &&\n      this.state.lastTokEndLoc.index === base.end &&\n      !this.canInsertSemicolon() &&\n      // check there are no escape sequences, such as \\u{61}sync\n      base.end - base.start === 5 &&\n      base.start === this.state.potentialArrowAt\n    );\n  }\n\n  finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n    node: Undone<T>,\n    optional: boolean,\n  ): T {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        if (process.env.BABEL_8_BREAKING) {\n          this.expectPlugin(\"importAssertions\");\n        } else {\n          if (!this.hasPlugin(\"moduleAttributes\")) {\n            this.expectPlugin(\"importAssertions\");\n          }\n        }\n      }\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(Errors.ImportCallArity, {\n          at: node,\n          maxArgumentCount:\n            this.hasPlugin(\"importAssertions\") ||\n            this.hasPlugin(\"moduleAttributes\")\n              ? 2\n              : 1,\n        });\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(Errors.ImportCallSpreadArgument, { at: arg });\n          }\n        }\n      }\n    }\n    return this.finishNode(\n      node,\n      optional ? \"OptionalCallExpression\" : \"CallExpression\",\n    );\n  }\n\n  parseCallExpressionArguments(\n    this: Parser,\n    close: TokenType,\n    dynamicImport?: boolean,\n    allowPlaceholder?: boolean,\n    nodeForExtra?: N.Node | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): Array<N.Expression | undefined | null> {\n    const elts: N.Expression[] = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (\n            dynamicImport &&\n            !this.hasPlugin(\"importAssertions\") &&\n            !this.hasPlugin(\"moduleAttributes\")\n          ) {\n            this.raise(Errors.ImportCallArgumentTrailingComma, {\n              at: this.state.lastTokStartLoc,\n            });\n          }\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(\n        this.parseExprListItem(false, refExpressionErrors, allowPlaceholder),\n      );\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return elts;\n  }\n\n  shouldParseAsyncArrow(): boolean {\n    return this.match(tt.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    call: N.CallExpression,\n  ): N.ArrowFunctionExpression {\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(tt.arrow);\n    this.parseArrowExpression(\n      node,\n      call.arguments,\n      true,\n      call.extra?.trailingCommaLoc,\n    );\n    // mark inner comments of `async()` as inner comments of `async () =>`\n    if (call.innerComments) {\n      setInnerComments(node, call.innerComments);\n    }\n    // mark trailing comments of `async` to be inner comments\n    if (call.callee.trailingComments) {\n      setInnerComments(node, call.callee.trailingComments);\n    }\n    return node as N.ArrowFunctionExpression;\n  }\n\n  // Parse a no-call expression (like argument of `new` or `::` operators).\n  // https://tc39.es/ecma262/#prod-MemberExpression\n  parseNoCallExpr(this: Parser): N.Expression {\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\n  }\n\n  // Parse an atomic expression â€” either a single token that is an\n  // expression, an expression started by a keyword like `function` or\n  // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n  // or `{}`.\n\n  // https://tc39.es/ecma262/#prod-PrimaryExpression\n  // https://tc39.es/ecma262/#prod-AsyncArrowFunction\n  // PrimaryExpression\n  // Super\n  // Import\n  // AsyncArrowFunction\n\n  parseExprAtom(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    let node;\n    let decorators: N.Decorator[] | null = null;\n\n    const { type } = this.state;\n    switch (type) {\n      case tt._super:\n        return this.parseSuper();\n\n      case tt._import:\n        node = this.startNode<N.MetaProperty | N.Import>();\n        this.next();\n\n        if (this.match(tt.dot)) {\n          return this.parseImportMetaProperty(node as Undone<N.MetaProperty>);\n        }\n\n        if (!this.match(tt.parenL)) {\n          this.raise(Errors.UnsupportedImport, {\n            at: this.state.lastTokStartLoc,\n          });\n        }\n        return this.finishNode(node, \"Import\");\n      case tt._this:\n        node = this.startNode();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case tt._do: {\n        return this.parseDo(this.startNode(), false);\n      }\n\n      case tt.slash:\n      case tt.slashAssign: {\n        this.readRegexp();\n        return this.parseRegExpLiteral(this.state.value);\n      }\n\n      case tt.num:\n        return this.parseNumericLiteral(this.state.value);\n\n      case tt.bigint:\n        return this.parseBigIntLiteral(this.state.value);\n\n      case tt.decimal:\n        return this.parseDecimalLiteral(this.state.value);\n\n      case tt.string:\n        return this.parseStringLiteral(this.state.value);\n\n      case tt._null:\n        return this.parseNullLiteral();\n\n      case tt._true:\n        return this.parseBooleanLiteral(true);\n      case tt._false:\n        return this.parseBooleanLiteral(false);\n\n      case tt.parenL: {\n        const canBeArrow = this.state.potentialArrowAt === this.state.start;\n        return this.parseParenAndDistinguishExpression(canBeArrow);\n      }\n\n      case tt.bracketBarL:\n      case tt.bracketHashL: {\n        return this.parseArrayLike(\n          this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n          /* canBePattern */ false,\n          /* isTuple */ true,\n        );\n      }\n      case tt.bracketL: {\n        return this.parseArrayLike(\n          tt.bracketR,\n          /* canBePattern */ true,\n          /* isTuple */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceBarL:\n      case tt.braceHashL: {\n        return this.parseObjectLike(\n          this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ true,\n        );\n      }\n      case tt.braceL: {\n        return this.parseObjectLike(\n          tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case tt.at:\n        decorators = this.parseDecorators();\n      // fall through\n      case tt._class:\n        return this.parseClass(\n          this.maybeTakeDecorators(decorators, this.startNode()),\n          false,\n        );\n\n      case tt._new:\n        return this.parseNewOrNewTarget();\n\n      case tt.templateNonTail:\n      case tt.templateTail:\n        return this.parseTemplate(false);\n\n      // BindExpression[Yield]\n      //   :: MemberExpression[?Yield]\n      case tt.doubleColon: {\n        node = this.startNode();\n        this.next();\n        node.object = null;\n        const callee = (node.callee = this.parseNoCallExpr());\n        if (callee.type === \"MemberExpression\") {\n          return this.finishNode(node, \"BindExpression\");\n        } else {\n          throw this.raise(Errors.UnsupportedBind, { at: callee });\n        }\n      }\n\n      case tt.privateName: {\n        // Standalone private names are only allowed in \"#x in obj\"\n        // expressions, and they are directly handled by callers of\n        // parseExprOp. If we reach this, the input is always invalid.\n        // We can throw a better error message and recover, rather than\n        // just throwing \"Unexpected token\" (which is the default\n        // behavior of this big switch statement).\n        this.raise(Errors.PrivateInExpectedIn, {\n          at: this.state.startLoc,\n          identifierName: this.state.value,\n        });\n        return this.parsePrivateName();\n      }\n\n      case tt.moduloAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.modulo, \"%\");\n      }\n\n      case tt.xorAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.bitwiseXOR, \"^\");\n      }\n\n      case tt.doubleCaret:\n      case tt.doubleAt: {\n        return this.parseTopicReference(\"hack\");\n      }\n\n      case tt.bitwiseXOR:\n      case tt.modulo:\n      case tt.hash: {\n        const pipeProposal = this.getPluginOption(\n          \"pipelineOperator\",\n          \"proposal\",\n        );\n\n        if (pipeProposal) {\n          return this.parseTopicReference(pipeProposal);\n        } else {\n          throw this.unexpected();\n        }\n      }\n\n      case tt.lt: {\n        const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n        if (\n          isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\n          lookaheadCh === charCodes.greaterThan // Fragment <>\n        ) {\n          this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n          break;\n        } else {\n          throw this.unexpected();\n        }\n      }\n\n      default:\n        if (tokenIsIdentifier(type)) {\n          if (\n            this.isContextual(tt._module) &&\n            this.lookaheadCharCode() === charCodes.leftCurlyBrace &&\n            !this.hasFollowingLineBreak()\n          ) {\n            return this.parseModuleExpression();\n          }\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n\n          if (\n            !containsEsc &&\n            id.name === \"async\" &&\n            !this.canInsertSemicolon()\n          ) {\n            const { type } = this.state;\n            if (type === tt._function) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseAsyncFunctionExpression(\n                this.startNodeAtNode(id),\n              );\n            } else if (tokenIsIdentifier(type)) {\n              // If the next token begins with \"=\", commit to parsing an async\n              // arrow function. (Peeking ahead for \"=\" lets us avoid a more\n              // expensive full-token lookahead on this common path.)\n              if (this.lookaheadCharCode() === charCodes.equalsTo) {\n                // although `id` is not used in async arrow unary function,\n                // we don't need to reset `async`'s trailing comments because\n                // it will be attached to the upcoming async arrow binding identifier\n                return this.parseAsyncArrowUnaryFunction(\n                  this.startNodeAtNode(id),\n                );\n              } else {\n                // Otherwise, treat \"async\" as an identifier and let calling code\n                // deal with the current tt.name token.\n                return id;\n              }\n            } else if (type === tt._do) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n\n          if (\n            canBeArrow &&\n            this.match(tt.arrow) &&\n            !this.canInsertSemicolon()\n          ) {\n            this.next();\n            return this.parseArrowExpression(\n              this.startNodeAtNode(id),\n              [id],\n              false,\n            );\n          }\n\n          return id;\n        } else {\n          throw this.unexpected();\n        }\n    }\n  }\n\n  // This helper method should only be called\n  // when the parser has reached a potential Hack pipe topic token\n  // that is followed by an equals sign.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  // If we find ^= or %= in an expression position\n  // (i.e., the tt.moduloAssign or tt.xorAssign token types), and if the\n  // Hack-pipes proposal is active with ^ or % as its topicToken, then the ^ or\n  // % could be the topic token (e.g., in x |> ^==y or x |> ^===y), and so we\n  // reparse the current token as ^ or %.\n  // Otherwise, this throws an unexpected-token error.\n  parseTopicReferenceThenEqualsSign(\n    topicTokenType: TokenType,\n    topicTokenValue: string,\n  ): N.Expression {\n    const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (pipeProposal) {\n      // Set the most-recent token to be a topic token\n      // given by the tokenType and tokenValue.\n      // Now the next readToken() call (in parseTopicReference)\n      // will consume that â€œtopic tokenâ€.\n      this.state.type = topicTokenType;\n      this.state.value = topicTokenValue;\n      // Rewind the tokenizer to the end of the â€œtopic tokenâ€, so that the\n      // following token starts at the equals sign after that topic token.\n      this.state.pos--;\n      this.state.end--;\n      // This is safe to do since the preceding character was either ^ or %, and\n      // thus not a newline.\n      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\n      // Now actually consume the topic token.\n      return this.parseTopicReference(pipeProposal);\n    } else {\n      throw this.unexpected();\n    }\n  }\n\n  // This helper method should only be called\n  // when the proposal-pipeline-operator plugin is active,\n  // and when the parser has reached a potential Hack pipe topic token.\n  // Although a pipe-operator proposal is assumed to be active,\n  // its configuration might not match the current tokenâ€™s type.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  parseTopicReference(pipeProposal: string): N.Expression {\n    const node = this.startNode<N.TopicReference>();\n    const startLoc = this.state.startLoc;\n    const tokenType = this.state.type;\n\n    // Consume the current token.\n    this.next();\n\n    // If the pipe-operator pluginâ€™s configuration matches the current tokenâ€™s type,\n    // then this will return `node`, will have been finished as a topic reference.\n    // Otherwise, this will throw a `PipeTopicUnconfiguredToken` error.\n    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);\n  }\n\n  // This helper method attempts to finish the given `node`\n  // into a topic-reference node for the given `pipeProposal`.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  //\n  // The method assumes that any topic token was consumed before it was called.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // and if the given `tokenType` matches the pluginâ€™s configuration,\n  // then this method will return the finished `node`.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // but if the given `tokenType` does not match the pluginâ€™s configuration,\n  // then this method will throw a `PipeTopicUnconfiguredToken` error.\n  finishTopicReference(\n    node: Undone<N.Node>,\n    startLoc: Position,\n    pipeProposal: string,\n    tokenType: TokenType,\n  ): N.Expression {\n    if (\n      this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)\n    ) {\n      // The token matches the pluginâ€™s configuration.\n      // The token is therefore a topic reference.\n\n      // Determine the node type for the topic reference\n      // that is appropriate for the active pipe-operator proposal.\n      const nodeType =\n        pipeProposal === \"smart\"\n          ? \"PipelinePrimaryTopicReference\"\n          : // The proposal must otherwise be \"hack\",\n            // as enforced by testTopicReferenceConfiguration.\n            \"TopicReference\";\n\n      if (!this.topicReferenceIsAllowedInCurrentContext()) {\n        this.raise(\n          // The topic reference is not allowed in the current context:\n          // it is outside of a pipe body.\n          // Raise recoverable errors.\n          pipeProposal === \"smart\"\n            ? Errors.PrimaryTopicNotAllowed\n            : // In this case, `pipeProposal === \"hack\"` is true.\n              Errors.PipeTopicUnbound,\n          { at: startLoc },\n        );\n      }\n\n      // Register the topic reference so that its pipe body knows\n      // that its topic was used at least once.\n      this.registerTopicReference();\n\n      return this.finishNode(node, nodeType);\n    } else {\n      // The token does not match the pluginâ€™s configuration.\n      throw this.raise(Errors.PipeTopicUnconfiguredToken, {\n        at: startLoc,\n        token: tokenLabelName(tokenType),\n      });\n    }\n  }\n\n  // This helper method tests whether the given token type\n  // matches the pipelineOperator parser pluginâ€™s configuration.\n  // If the active pipe proposal is Hack style,\n  // and if the given token is the same as the plugin configurationâ€™s `topicToken`,\n  // then this is a valid topic reference.\n  // If the active pipe proposal is smart mix,\n  // then the topic token must always be `#`.\n  // If the active pipe proposal is neither (e.g., \"minimal\" or \"fsharp\"),\n  // then an error is thrown.\n  testTopicReferenceConfiguration(\n    pipeProposal: string,\n    startLoc: Position,\n    tokenType: TokenType,\n  ): boolean {\n    switch (pipeProposal) {\n      case \"hack\": {\n        return this.hasPlugin([\n          \"pipelineOperator\",\n          {\n            // @ts-expect-error token must have a label\n            topicToken: tokenLabelName(tokenType),\n          },\n        ]);\n      }\n      case \"smart\":\n        return tokenType === tt.hash;\n      default:\n        throw this.raise(Errors.PipeTopicRequiresHackPipes, { at: startLoc });\n    }\n  }\n\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n  parseAsyncArrowUnaryFunction(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n  ): N.ArrowFunctionExpression {\n    // We don't need to push a new ParameterDeclarationScope here since we are sure\n    // 1) it is an async arrow, 2) no biding pattern is allowed in params\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.LineTerminatorBeforeArrow, {\n        at: this.state.curPosition(),\n      });\n    }\n    this.expect(tt.arrow);\n    // let foo = async bar => {};\n    return this.parseArrowExpression(node, params, true);\n  }\n\n  // https://github.com/tc39/proposal-do-expressions\n  // https://github.com/tc39/proposal-async-do-expressions\n  parseDo(\n    this: Parser,\n    node: Undone<N.DoExpression>,\n    isAsync: boolean,\n  ): N.DoExpression {\n    this.expectPlugin(\"doExpressions\");\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n    node.async = isAsync;\n    this.next(); // eat `do`\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    if (isAsync) {\n      // AsyncDoExpression :\n      // async [no LineTerminator here] do Block[~Yield, +Await, ~Return]\n      this.prodParam.enter(PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  // Parse the `super` keyword\n  parseSuper(): N.Super {\n    const node = this.startNode<N.Super>();\n    this.next(); // eat `super`\n    if (\n      this.match(tt.parenL) &&\n      !this.scope.allowDirectSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(Errors.SuperNotAllowed, { at: node });\n    } else if (\n      !this.scope.allowSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(Errors.UnexpectedSuper, { at: node });\n    }\n\n    if (\n      !this.match(tt.parenL) &&\n      !this.match(tt.bracketL) &&\n      !this.match(tt.dot)\n    ) {\n      this.raise(Errors.UnsupportedSuper, { at: node });\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parsePrivateName(): N.PrivateName {\n    const node = this.startNode<N.PrivateName>();\n    const id = this.startNodeAt<N.Identifier>(\n      // The position is hardcoded because we merge `#` and name into a single\n      // tt.privateName token\n      createPositionWithColumnOffset(this.state.startLoc, 1),\n    );\n    const name = this.state.value;\n    this.next(); // eat #name;\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n\n  parseFunctionOrFunctionSent(\n    this: Parser,\n  ): N.FunctionExpression | N.MetaProperty {\n    const node = this.startNode<N.FunctionExpression | N.MetaProperty>();\n\n    // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\n    // is called we already know that the current token is a \"name\" with the value \"function\"\n    // This will improve perf a tiny little bit as we do not do validation but more importantly\n    // here is that parseIdentifier will remove an item from the expression stack\n    // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n    this.next(); // eat `function`\n\n    if (this.prodParam.hasYield && this.match(tt.dot)) {\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"function\",\n      );\n      this.next(); // eat `.`\n      // https://github.com/tc39/proposal-function.sent#syntax-1\n      if (this.match(tt._sent)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n        this.unexpected();\n      }\n      return this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"sent\",\n      );\n    }\n    return this.parseFunction(node as Undone<N.FunctionExpression>);\n  }\n\n  parseMetaProperty(\n    node: Undone<N.MetaProperty>,\n    meta: N.Identifier,\n    propertyName: string,\n  ): N.MetaProperty {\n    node.meta = meta;\n\n    const containsEsc = this.state.containsEsc;\n\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(Errors.UnsupportedMetaProperty, {\n        at: node.property,\n        target: meta.name,\n        onlyValidPropertyName: propertyName,\n      });\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportMeta\n  parseImportMetaProperty(node: Undone<N.MetaProperty>): N.MetaProperty {\n    const id = this.createIdentifier(\n      this.startNodeAtNode<N.Identifier>(node),\n      \"import\",\n    );\n    this.next(); // eat `.`\n\n    if (this.isContextual(tt._meta)) {\n      if (!this.inModule) {\n        this.raise(Errors.ImportMetaOutsideModule, { at: id });\n      }\n      this.sawUnambiguousESM = true;\n    }\n\n    return this.parseMetaProperty(node, id, \"meta\");\n  }\n\n  parseLiteralAtNode<T extends N.Node>(\n    value: any,\n    type: T[\"type\"],\n    node: any,\n  ): T {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.value = value;\n    this.next();\n    return this.finishNode<T>(node, type);\n  }\n\n  parseLiteral<T extends N.Node>(value: any, type: T[\"type\"]): T {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n\n  parseStringLiteral(value: any) {\n    return this.parseLiteral<N.StringLiteral>(value, \"StringLiteral\");\n  }\n\n  parseNumericLiteral(value: any) {\n    return this.parseLiteral<N.NumericLiteral>(value, \"NumericLiteral\");\n  }\n\n  parseBigIntLiteral(value: any) {\n    return this.parseLiteral<N.BigIntLiteral>(value, \"BigIntLiteral\");\n  }\n\n  parseDecimalLiteral(value: any) {\n    return this.parseLiteral<N.DecimalLiteral>(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value: {\n    value: any;\n    pattern: string;\n    flags: N.RegExpLiteral[\"flags\"];\n  }) {\n    const node = this.parseLiteral<N.RegExpLiteral>(\n      value.value,\n      \"RegExpLiteral\",\n    );\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    return node;\n  }\n\n  parseBooleanLiteral(value: boolean) {\n    const node = this.startNode<N.BooleanLiteral>();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode<N.NullLiteral>();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n  parseParenAndDistinguishExpression(\n    this: Parser,\n    canBeArrow: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    let val;\n    this.next(); // eat `(`\n    this.expressionScope.enter(newArrowHeadScope());\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    const innerStartLoc = this.state.startLoc;\n    const exprList: N.Expression[] = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStartLoc;\n    let optionalCommaStartLoc;\n\n    while (!this.match(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(\n          tt.comma,\n          refExpressionErrors.optionalParametersLoc === null\n            ? null\n            : refExpressionErrors.optionalParametersLoc,\n        );\n        if (this.match(tt.parenR)) {\n          optionalCommaStartLoc = this.state.startLoc;\n          break;\n        }\n      }\n\n      if (this.match(tt.ellipsis)) {\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStartLoc = this.state.startLoc;\n        exprList.push(\n          this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc),\n        );\n\n        if (!this.checkCommaAfterRest(charCodes.rightParenthesis)) {\n          break;\n        }\n      } else {\n        exprList.push(\n          this.parseMaybeAssignAllowIn(\n            refExpressionErrors,\n            this.parseParenItem,\n          ),\n        );\n      }\n    }\n\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(tt.parenR);\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    let arrowNode = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n    if (\n      canBeArrow &&\n      this.shouldParseArrow(exprList) &&\n      (arrowNode = this.parseArrow(arrowNode))\n    ) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      // @ts-expect-error todo(flow->ts) improve node types\n      return arrowNode;\n    }\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStartLoc);\n    }\n    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\n    if (spreadStartLoc) this.unexpected(spreadStartLoc);\n    this.checkExpressionErrors(refExpressionErrors, true);\n\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt<N.SequenceExpression>(innerStartLoc);\n      val.expressions = exprList;\n      // finish node at current location so it can pick up comments after `)`\n      this.finishNode(val, \"SequenceExpression\");\n      this.resetEndLocation(val, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    return this.wrapParenthesis(\n      startLoc,\n      // @ts-expect-error todo(flow->ts)\n      val,\n    );\n  }\n\n  wrapParenthesis(startLoc: Position, expression: N.Expression): N.Expression {\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(expression, \"parenthesized\", true);\n      this.addExtra(expression, \"parenStart\", startLoc.index);\n\n      this.takeSurroundingComments(\n        expression,\n        startLoc.index,\n        this.state.lastTokEndLoc.index,\n      );\n\n      return expression;\n    }\n\n    const parenExpression =\n      this.startNodeAt<N.ParenthesizedExpression>(startLoc);\n    parenExpression.expression = expression;\n    return this.finishNode(parenExpression, \"ParenthesizedExpression\");\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `params` is used in typescript plugin\n  shouldParseArrow(params: Array<N.Node>): boolean {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(\n    node: Undone<N.ArrowFunctionExpression>,\n  ): Undone<N.ArrowFunctionExpression> | undefined {\n    if (this.eat(tt.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem(\n    node: N.Expression,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    startLoc: Position,\n  ): N.Expression {\n    return node;\n  }\n\n  parseNewOrNewTarget(this: Parser): N.NewExpression | N.MetaProperty {\n    const node = this.startNode<N.NewExpression | N.MetaProperty>();\n    this.next();\n    if (this.match(tt.dot)) {\n      // https://tc39.es/ecma262/#prod-NewTarget\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"new\",\n      );\n      this.next();\n      const metaProp = this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"target\",\n      );\n\n      if (!this.scope.inNonArrowFunction && !this.scope.inClass) {\n        this.raise(Errors.UnexpectedNewTarget, { at: metaProp });\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node as Undone<N.NewExpression>);\n  }\n\n  // New's precedence is slightly tricky. It must allow its argument to\n  // be a `[]` or dot subscript expression, but not a call â€” at least,\n  // not without wrapping it in parentheses. Thus, it uses the noCalls\n  // argument to parseSubscripts to prevent it from consuming the\n  // argument list.\n  // https://tc39.es/ecma262/#prod-NewExpression\n  parseNew(this: Parser, node: Undone<N.NewExpression>): N.NewExpression {\n    this.parseNewCallee(node);\n\n    if (this.eat(tt.parenL)) {\n      const args = this.parseExprList(tt.parenR);\n      this.toReferencedList(args);\n      // (parseExprList should be all non-null in this case)\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewCallee(this: Parser, node: Undone<N.NewExpression>): void {\n    node.callee = this.parseNoCallExpr();\n    if (node.callee.type === \"Import\") {\n      this.raise(Errors.ImportCallNotNewExpression, { at: node.callee });\n    } else if (this.isOptionalChain(node.callee)) {\n      this.raise(Errors.OptionalChainingNoNew, {\n        at: this.state.lastTokEndLoc,\n      });\n    } else if (this.eat(tt.questionDot)) {\n      this.raise(Errors.OptionalChainingNoNew, {\n        at: this.state.startLoc,\n      });\n    }\n  }\n\n  // Parse template expression.\n\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\n    const { start, startLoc, end, value } = this.state;\n    const elemStart = start + 1;\n    const elem = this.startNodeAt<N.TemplateElement>(\n      createPositionWithColumnOffset(startLoc, 1),\n    );\n    if (value === null) {\n      if (!isTagged) {\n        this.raise(Errors.InvalidEscapeSequenceTemplate, {\n          // FIXME: Adding 1 is probably wrong.\n          at: createPositionWithColumnOffset(\n            this.state.firstInvalidTemplateEscapePos,\n            1,\n          ),\n        });\n      }\n    }\n\n    const isTail = this.match(tt.templateTail);\n    const endOffset = isTail ? -1 : -2;\n    const elemEnd = end + endOffset;\n    elem.value = {\n      raw: this.input.slice(elemStart, elemEnd).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: value === null ? null : value.slice(1, endOffset),\n    };\n    elem.tail = isTail;\n    this.next();\n    const finishedNode = this.finishNode(elem, \"TemplateElement\");\n    this.resetEndLocation(\n      finishedNode,\n      createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset),\n    );\n    return finishedNode;\n  }\n\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\n  parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {\n    const node = this.startNode<N.TemplateLiteral>();\n    node.expressions = [];\n    let curElt = this.parseTemplateElement(isTagged);\n    node.quasis = [curElt];\n    while (!curElt.tail) {\n      node.expressions.push(this.parseTemplateSubstitution());\n      this.readTemplateContinuation();\n      node.quasis.push((curElt = this.parseTemplateElement(isTagged)));\n    }\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  // This is overwritten by the TypeScript plugin to parse template types\n  parseTemplateSubstitution(this: Parser): N.Expression {\n    return this.parseExpression();\n  }\n\n  // Parse an object literal, binding pattern, or record.\n\n  parseObjectLike(\n    close: TokenType,\n    isPattern: true,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectPattern;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: false | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectExpression;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: true,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.RecordExpression;\n  parseObjectLike<T extends N.ObjectPattern | N.ObjectExpression>(\n    this: Parser,\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const propHash: any = Object.create(null);\n    let first = true;\n    const node = this.startNode<\n      N.ObjectExpression | N.ObjectPattern | N.RecordExpression\n    >();\n\n    node.properties = [];\n    this.next();\n\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          this.addTrailingCommaExtraToNode(\n            // @ts-expect-error todo(flow->ts) improve node types\n            node,\n          );\n          break;\n        }\n      }\n\n      let prop;\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n      }\n\n      if (\n        isRecord &&\n        !this.isObjectProperty(prop) &&\n        prop.type !== \"SpreadElement\"\n      ) {\n        this.raise(Errors.InvalidRecordProperty, { at: prop });\n      }\n\n      // @ts-expect-error shorthand may not index prop\n      if (prop.shorthand) {\n        this.addExtra(prop, \"shorthand\", true);\n      }\n\n      // @ts-expect-error Fixme: refine typings\n      node.properties.push(prop);\n    }\n\n    this.next();\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n    // @ts-expect-error type is well defined\n    return this.finishNode(node, type);\n  }\n\n  addTrailingCommaExtraToNode(node: N.Node): void {\n    this.addExtra(node, \"trailingComma\", this.state.lastTokStart);\n    this.addExtra(node, \"trailingCommaLoc\", this.state.lastTokStartLoc, false);\n  }\n\n  // Check grammar production:\n  //   IdentifierName *_opt PropertyName\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n  maybeAsyncOrAccessorProp(prop: Undone<N.ObjectProperty>): boolean {\n    return (\n      !prop.computed &&\n      prop.key.type === \"Identifier\" &&\n      (this.isLiteralPropertyName() ||\n        this.match(tt.bracketL) ||\n        this.match(tt.star))\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyDefinition\n  parsePropertyDefinition(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectMember | N.SpreadElement {\n    let decorators = [];\n    if (this.match(tt.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(Errors.UnsupportedPropertyDecorator, {\n          at: this.state.startLoc,\n        });\n      }\n\n      // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n      // the call to this.parseDecorator\n      while (this.match(tt.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode<N.ObjectProperty>();\n    let isAsync = false;\n    let isAccessor = false;\n    let startLoc;\n\n    if (this.match(tt.ellipsis)) {\n      if (decorators.length) this.unexpected();\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (refExpressionErrors) {\n      startLoc = this.state.startLoc;\n    }\n\n    let isGenerator = this.eat(tt.star);\n    this.parsePropertyNamePrefixOperator(prop);\n    const containsEsc = this.state.containsEsc;\n    const key = this.parsePropertyName(prop, refExpressionErrors);\n\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const keyName = key.name;\n      // https://tc39.es/ecma262/#prod-AsyncMethod\n      // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(tt.star);\n        this.parsePropertyName(prop);\n      }\n      // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\n      // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n        if (this.match(tt.star)) {\n          isGenerator = true;\n          this.raise(Errors.AccessorIsGenerator, {\n            at: this.state.curPosition(),\n            kind: keyName,\n          });\n          this.next();\n        }\n        this.parsePropertyName(prop);\n      }\n    }\n\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      isGenerator,\n      isAsync,\n      false /* isPattern */,\n      isAccessor,\n      refExpressionErrors,\n    );\n  }\n\n  getGetterSetterExpectedParamCount(\n    method: N.ObjectMethod | N.ClassMethod,\n  ): number {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  // This exists so we can override within the ESTree plugin\n  getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n    return method.params;\n  }\n\n  // get methods aren't allowed to have any parameters\n  // set methods must have exactly 1 parameter which is not a rest parameter\n  checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    if (params.length !== paramCount) {\n      this.raise(\n        method.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity,\n        { at: method },\n      );\n    }\n\n    if (\n      method.kind === \"set\" &&\n      params[params.length - 1]?.type === \"RestElement\"\n    ) {\n      this.raise(Errors.BadSetterRestParameter, { at: method });\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-MethodDefinition\n  parseObjectMethod(\n    this: Parser,\n    prop: Undone<N.ObjectMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n  ): N.ObjectMethod | undefined | null {\n    if (isAccessor) {\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n      const finishedProp = this.parseMethod(\n        prop,\n        // This _should_ be false, but with error recovery, we allow it to be\n        // set for informational purposes\n        isGenerator,\n        /* isAsync */ false,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n      this.checkGetterSetterParams(finishedProp);\n      return finishedProp;\n    }\n\n    if (isAsync || isGenerator || this.match(tt.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n    }\n  }\n\n  // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\n  // else https://tc39.es/ecma262/#prod-PropertyDefinition\n  parseObjectProperty(\n    this: Parser,\n    prop: Undone<N.ObjectProperty>,\n    startLoc: Position | undefined | null,\n    isPattern: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectProperty | undefined | null {\n    prop.shorthand = false;\n\n    if (this.eat(tt.colon)) {\n      prop.value = isPattern\n        ? this.parseMaybeDefault(this.state.startLoc)\n        : this.parseMaybeAssignAllowIn(refExpressionErrors);\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      // PropertyDefinition:\n      //   IdentifierReference\n      //   CoverInitializedName\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          cloneIdentifier(prop.key),\n        );\n      } else if (this.match(tt.eq)) {\n        const shorthandAssignLoc = this.state.startLoc;\n        if (refExpressionErrors != null) {\n          if (refExpressionErrors.shorthandAssignLoc === null) {\n            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\n          }\n        } else {\n          this.raise(Errors.InvalidCoverInitializedName, {\n            at: shorthandAssignLoc,\n          });\n        }\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          cloneIdentifier(prop.key),\n        );\n      } else {\n        prop.value = cloneIdentifier(prop.key);\n      }\n      prop.shorthand = true;\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n  }\n\n  parseObjPropValue(\n    this: Parser,\n    prop: Undone<N.ObjectMethod | N.ObjectProperty>,\n    startLoc: Position | undefined | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectMethod | N.ObjectProperty {\n    const node =\n      this.parseObjectMethod(\n        prop as Undone<N.ObjectMethod>,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n      ) ||\n      this.parseObjectProperty(\n        prop as Undone<N.ObjectProperty>,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      );\n\n    if (!node) this.unexpected();\n\n    return node;\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyName\n  // when refExpressionErrors presents, it will parse private name\n  // and record the position of the first private name\n  parsePropertyName(\n    this: Parser,\n    prop:\n      | Undone<N.ObjectOrClassMember | N.ClassMember>\n      | N.TsNamedTypeElementBase,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression | N.Identifier {\n    if (this.eat(tt.bracketL)) {\n      (prop as Undone<N.ObjectOrClassMember>).computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(tt.bracketR);\n    } else {\n      // We check if it's valid for it to be a private name when we push it.\n      const { type, value } = this.state;\n      let key;\n      // most un-computed property names are identifiers\n      if (tokenIsKeywordOrIdentifier(type)) {\n        key = this.parseIdentifier(true);\n      } else {\n        switch (type) {\n          case tt.num:\n            key = this.parseNumericLiteral(value);\n            break;\n          case tt.string:\n            key = this.parseStringLiteral(value);\n            break;\n          case tt.bigint:\n            key = this.parseBigIntLiteral(value);\n            break;\n          case tt.decimal:\n            key = this.parseDecimalLiteral(value);\n            break;\n          case tt.privateName: {\n            // the class private key has been handled in parseClassElementName\n            const privateKeyLoc = this.state.startLoc;\n            if (refExpressionErrors != null) {\n              if (refExpressionErrors.privateKeyLoc === null) {\n                refExpressionErrors.privateKeyLoc = privateKeyLoc;\n              }\n            } else {\n              this.raise(Errors.UnexpectedPrivateField, {\n                at: privateKeyLoc,\n              });\n            }\n            key = this.parsePrivateName();\n            break;\n          }\n          default:\n            throw this.unexpected();\n        }\n      }\n      (prop as any).key = key;\n      if (type !== tt.privateName) {\n        // ClassPrivateProperty is never computed, so we don't assign in that case.\n        prop.computed = false;\n      }\n    }\n\n    return prop.key;\n  }\n\n  // Initialize empty function node.\n\n  initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n    node.id = null;\n    node.generator = false;\n    node.async = isAsync;\n  }\n\n  // Parse object or class method.\n\n  parseMethod<T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod>(\n    this: Parser,\n    node: Undone<T>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowDirectSuper: boolean,\n    type: T[\"type\"],\n    inClassScope: boolean = false,\n  ): T {\n    this.initFunction(node, isAsync);\n    node.generator = isGenerator;\n    const allowModifiers = isConstructor; // For TypeScript parameter properties\n    this.scope.enter(\n      SCOPE_FUNCTION |\n        SCOPE_SUPER |\n        (inClassScope ? SCOPE_CLASS : 0) |\n        (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0),\n    );\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, allowModifiers);\n    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n\n    return finishedNode;\n  }\n\n  // parse an array literal or tuple literal\n  // https://tc39.es/ecma262/#prod-ArrayLiteral\n  // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\n  parseArrayLike(\n    this: Parser,\n    close: TokenType,\n    canBePattern: boolean,\n    isTuple: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ArrayExpression | N.TupleExpression {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode<N.ArrayExpression | N.TupleExpression>();\n    this.next();\n    node.elements = this.parseExprList(\n      close,\n      /* allowEmpty */ !isTuple,\n      refExpressionErrors,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(\n      node,\n      isTuple ? \"TupleExpression\" : \"ArrayExpression\",\n    );\n  }\n\n  // Parse arrow function expression.\n  // If the parameters are provided, they will be converted to an\n  // assignable list.\n  parseArrowExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    params: N.Expression[] | undefined | null,\n    isAsync: boolean,\n    trailingCommaLoc?: Position | null,\n  ): N.ArrowFunctionExpression {\n    this.scope.enter(SCOPE_FUNCTION | SCOPE_ARROW);\n    let flags = functionFlags(isAsync, false);\n    // ConciseBody[In] :\n    //   [lookahead â‰  {] ExpressionBody[?In, ~Await]\n    //   { FunctionBody[~Yield, ~Await] }\n    if (!this.match(tt.braceL) && this.prodParam.hasIn) {\n      flags |= PARAM_IN;\n    }\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaLoc);\n    }\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(\n    node: Undone<N.ArrowFunctionExpression>,\n    params: N.Expression[],\n    trailingCommaLoc?: Position | null,\n  ): void {\n    this.toAssignableList(params, trailingCommaLoc, false);\n    node.params = params as (N.Pattern | N.TSParameterProperty)[];\n  }\n\n  parseFunctionBodyAndFinish<\n    T extends\n      | N.Function\n      | N.TSDeclareMethod\n      | N.TSDeclareFunction\n      | N.ClassPrivateMethod,\n  >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n    // @ts-expect-error (node is not bodiless if we get here)\n    this.parseFunctionBody(node, false, isMethod);\n    return this.finishNode(node, type);\n  }\n\n  // Parse function body and check parameters.\n  parseFunctionBody(\n    this: Parser,\n    node: Undone<N.Function>,\n    allowExpression?: boolean | null,\n    isMethod: boolean = false,\n  ): void {\n    const isExpression = allowExpression && !this.match(tt.braceL);\n    this.expressionScope.enter(newExpressionScope());\n\n    if (isExpression) {\n      // https://tc39.es/ecma262/#prod-ExpressionBody\n      (node as Undone<N.ArrowFunctionExpression>).body =\n        this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      // Start a new scope with regard to labels\n      // flag (restore them to their old value afterwards).\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n\n      // FunctionBody[Yield, Await]:\n      //   StatementList[?Yield, ?Await, +Return] opt\n      this.prodParam.enter(this.prodParam.currentFlags() | PARAM_RETURN);\n      node.body = this.parseBlock(\n        true,\n        false,\n        // Strict mode function checks after we parse the statements in the function body.\n        (hasStrictModeDirective: boolean) => {\n          const nonSimple = !this.isSimpleParamList(node.params);\n\n          if (hasStrictModeDirective && nonSimple) {\n            // This logic is here to align the error location with the ESTree plugin.\n            this.raise(Errors.IllegalLanguageModeDirective, {\n              at:\n                // @ts-expect-error kind may not index node\n                (node.kind === \"method\" || node.kind === \"constructor\") &&\n                // @ts-expect-error key may not index node\n                !!node.key\n                  ? // @ts-expect-error node.key has been gaurded\n                    node.key.loc.end\n                  : node,\n            });\n          }\n\n          const strictModeChanged = !oldStrict && this.state.strict;\n\n          // Add the params to varDeclaredNames to ensure that an error is thrown\n          // if a let/const declaration in the function clashes with one of the params.\n          this.checkParams(\n            node,\n            !this.state.strict && !allowExpression && !isMethod && !nonSimple,\n            allowExpression,\n            strictModeChanged,\n          );\n\n          // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n          if (this.state.strict && node.id) {\n            this.checkIdentifier(node.id, BIND_OUTSIDE, strictModeChanged);\n          }\n        },\n      );\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n    this.expressionScope.exit();\n  }\n\n  isSimpleParameter(node: N.Pattern | N.TSParameterProperty) {\n    return node.type === \"Identifier\";\n  }\n\n  isSimpleParamList(\n    params: ReadonlyArray<N.Pattern | N.TSParameterProperty>,\n  ): boolean {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (!this.isSimpleParameter(params[i])) return false;\n    }\n    return true;\n  }\n\n  checkParams(\n    node: Undone<N.Function>,\n    allowDuplicates: boolean,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isArrowFunction?: boolean | null,\n    strictModeChanged: boolean = true,\n  ): void {\n    const checkClashes = !allowDuplicates && new Set<string>();\n    // We create a fake node with the \"ephemeral\" type `FormalParameters`[1]\n    // since we just store an array of parameters. Perhaps someday we can have\n    // something like class FormalParameters extends Array { ... }, which would\n    // also be helpful when traversing this node.\n    //\n    // 1. https://tc39.es/ecma262/#prod-FormalParameters\n    const formalParameters = { type: \"FormalParameters\" } as const;\n    for (const param of node.params) {\n      this.checkLVal(param, {\n        in: formalParameters,\n        binding: BIND_VAR,\n        checkClashes,\n        strictModeChanged,\n      });\n    }\n  }\n\n  // Parses a comma-separated list of expressions, and returns them as\n  // an array. `close` is the token type that ends the list, and\n  // `allowEmpty` can be turned on to allow subsequent commas with\n  // nothing in between them to be parsed as `null` (which is needed\n  // for array literals).\n\n  parseExprList(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    nodeForExtra?: N.Node | null,\n  ): (N.Expression | null)[] {\n    const elts: (N.Expression | null)[] = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | null;\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: false,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression;\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | null {\n    let elt;\n    if (this.match(tt.comma)) {\n      if (!allowEmpty) {\n        this.raise(Errors.UnexpectedToken, {\n          at: this.state.curPosition(),\n          unexpected: \",\",\n        });\n      }\n      elt = null;\n    } else if (this.match(tt.ellipsis)) {\n      const spreadNodeStartLoc = this.state.startLoc;\n\n      elt = this.parseParenItem(\n        this.parseSpread(refExpressionErrors),\n        spreadNodeStartLoc,\n      );\n    } else if (this.match(tt.question)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(Errors.UnexpectedArgumentPlaceholder, {\n          at: this.state.startLoc,\n        });\n      }\n      const node = this.startNode();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowIn(\n        refExpressionErrors,\n        this.parseParenItem,\n      );\n    }\n    return elt;\n  }\n\n  // Parse the next token as an identifier. If `liberal` is true (used\n  // when parsing properties), it will also convert keywords into\n  // identifiers.\n  // This shouldn't be used to parse the keywords of meta properties, since they\n  // are not identifiers and cannot contain escape sequences.\n\n  parseIdentifier(liberal?: boolean): N.Identifier {\n    const node = this.startNode<N.Identifier>();\n    const name = this.parseIdentifierName(liberal);\n\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(\n    node: Omit<N.Identifier, \"type\">,\n    name: string,\n  ): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  parseIdentifierName(liberal?: boolean): string {\n    let name: string;\n\n    const { startLoc, type } = this.state;\n\n    if (tokenIsKeywordOrIdentifier(type)) {\n      name = this.state.value;\n    } else {\n      throw this.unexpected();\n    }\n\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\n\n    if (liberal) {\n      // If the current token is not used as a keyword, set its type to \"tt.name\".\n      // This will prevent this.next() from throwing about unexpected escapes.\n      if (tokenIsKeyword) {\n        this.replaceToken(tt.name);\n      }\n    } else {\n      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);\n    }\n\n    this.next();\n\n    return name;\n  }\n\n  checkReservedWord(\n    word: string,\n    startLoc: Position,\n    checkKeywords: boolean,\n    isBinding: boolean,\n  ): void {\n    // Every JavaScript reserved word is 10 characters or less.\n    if (word.length > 10) {\n      return;\n    }\n    // Most identifiers are not reservedWord-like, they don't need special\n    // treatments afterward, which very likely ends up throwing errors\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n\n    if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(Errors.YieldBindingIdentifier, { at: startLoc });\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(Errors.AwaitBindingIdentifier, { at: startLoc });\n        return;\n      }\n\n      if (this.scope.inStaticBlock) {\n        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, {\n          at: startLoc,\n        });\n        return;\n      }\n\n      this.expressionScope.recordAsyncArrowParametersError({ at: startLoc });\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(Errors.ArgumentsInClass, { at: startLoc });\n        return;\n      }\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(Errors.UnexpectedKeyword, {\n        at: startLoc,\n        keyword: word,\n      });\n      return;\n    }\n\n    const reservedTest = !this.state.strict\n      ? isReservedWord\n      : isBinding\n      ? isStrictBindReservedWord\n      : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      this.raise(Errors.UnexpectedReservedWord, {\n        at: startLoc,\n        reservedWord: word,\n      });\n    }\n  }\n\n  isAwaitAllowed(): boolean {\n    if (this.prodParam.hasAwait) return true;\n    if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {\n      return true;\n    }\n    return false;\n  }\n\n  // Parses await expression inside async function.\n\n  parseAwait(this: Parser, startLoc: Position): N.AwaitExpression {\n    const node = this.startNodeAt<N.AwaitExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.AwaitExpressionFormalParameter,\n      {\n        // @ts-expect-error todo(flow->ts)\n        at: node,\n      },\n    );\n\n    if (this.eat(tt.star)) {\n      this.raise(Errors.ObsoleteAwaitStar, { at: node });\n    }\n\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n      if (this.isAmbiguousAwait()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  isAmbiguousAwait(): boolean {\n    if (this.hasPrecedingLineBreak()) return true;\n    const { type } = this.state;\n    return (\n      // All the following expressions are ambiguous:\n      //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``, await of []\n      type === tt.plusMin ||\n      type === tt.parenL ||\n      type === tt.bracketL ||\n      tokenIsTemplate(type) ||\n      (type === tt._of && !this.state.containsEsc) ||\n      // Sometimes the tokenizer generates tt.slash for regexps, and this is\n      // handler by parseExprAtom\n      type === tt.regexp ||\n      type === tt.slash ||\n      // This code could be parsed both as a modulo operator or as an intrinsic:\n      //   await %x(0)\n      (this.hasPlugin(\"v8intrinsic\") && type === tt.modulo)\n    );\n  }\n\n  // Parses yield expression inside generator.\n\n  parseYield(this: Parser): N.YieldExpression {\n    const node = this.startNode<N.YieldExpression>();\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.YieldInParameter,\n      {\n        // @ts-expect-error todo(flow->ts)\n        at: node,\n      },\n    );\n\n    this.next();\n    let delegating = false;\n    let argument: N.Expression | null = null;\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(tt.star);\n      switch (this.state.type) {\n        case tt.semi:\n        case tt.eof:\n        case tt.braceR:\n        case tt.parenR:\n        case tt.bracketR:\n        case tt.braceBarR:\n        case tt.colon:\n        case tt.comma:\n          // The above is the complete set of tokens that can\n          // follow an AssignmentExpression, and none of them\n          // can start an AssignmentExpression\n          if (!delegating) break;\n        /* fallthrough */\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n  // of the infix operator `|>`.\n\n  checkPipelineAtInfixOperator(left: N.Expression, leftStartLoc: Position) {\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      if (left.type === \"SequenceExpression\") {\n        // Ensure that the pipeline head is not a comma-delimited\n        // sequence expression.\n        this.raise(Errors.PipelineHeadSequenceExpression, {\n          at: leftStartLoc,\n        });\n      }\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpr: N.Expression, startLoc: Position) {\n    if (this.isSimpleReference(childExpr)) {\n      const bodyNode = this.startNodeAt<N.PipelineBareFunction>(startLoc);\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      const bodyNode = this.startNodeAt<N.PipelineTopicExpression>(startLoc);\n      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n\n  isSimpleReference(expression: N.Expression): boolean {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return (\n          !expression.computed && this.isSimpleReference(expression.object)\n        );\n      case \"Identifier\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  // This helper method is to be called immediately\n  // after a topic-style smart-mix pipe body is parsed.\n  // The `startLoc` is the starting position of the pipe body.\n\n  checkSmartPipeTopicBodyEarlyErrors(startLoc: Position): void {\n    // If the following token is invalidly `=>`, then throw a human-friendly error\n    // instead of something like 'Unexpected token, expected \";\"'.\n    // For example, `x => x |> y => #` (assuming `#` is the topic reference)\n    // groups into `x => (x |> y) => #`,\n    // and `(x |> y) => #` is an invalid arrow function.\n    // This is because smart-mix `|>` has tighter precedence than `=>`.\n    if (this.match(tt.arrow)) {\n      throw this.raise(Errors.PipelineBodyNoArrow, { at: this.state.startLoc });\n    }\n\n    // A topic-style smart-mix pipe body must use the topic reference at least once.\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(Errors.PipelineTopicUnused, { at: startLoc });\n    }\n  }\n\n  // Enable topic references from outer contexts within Hack-style pipe bodies.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references.\n  // The function then calls a callback, then resets the parser\n  // to the old topic-context state that it had before the function was called.\n\n  withTopicBindingContext<T>(callback: () => T): T {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      // Enable the use of the primary topic reference.\n      maxNumOfResolvableTopics: 1,\n      // Hide the use of any topic references from outer contexts.\n      maxTopicIndex: null,\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  // This helper method is used only with the deprecated smart-mix pipe proposal.\n  // Disables topic references from outer contexts within syntax constructs\n  // such as the bodies of iteration statements.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references with the smartPipelines plugin. They then run a\n  // callback, then they reset the parser to the old topic-context state that it\n  // had before the function was called.\n\n  withSmartMixTopicForbiddingContext<T>(callback: () => T): T {\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      // Reset the parserâ€™s topic context only if the smart-mix pipe proposal is active.\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        // Disable the use of the primary topic reference.\n        maxNumOfResolvableTopics: 0,\n        // Hide the use of any topic references from outer contexts.\n        maxTopicIndex: null,\n      };\n\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      // If the pipe proposal is \"minimal\", \"fsharp\", or \"hack\",\n      // or if no pipe proposal is active,\n      // then the callback result is returned\n      // without touching any extra parser state.\n      return callback();\n    }\n  }\n\n  withSoloAwaitPermittingContext<T>(callback: () => T): T {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  disallowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  // Register the use of a topic reference within the current\n  // topic-binding context.\n  registerTopicReference(): void {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  topicReferenceIsAllowedInCurrentContext(): boolean {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentContext(): boolean {\n    return (\n      this.state.topicContext.maxTopicIndex != null &&\n      this.state.topicContext.maxTopicIndex >= 0\n    );\n  }\n\n  parseFSharpPipelineBody(this: Parser, prec: number): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n\n    const ret = this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      prec,\n    );\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return ret;\n  }\n\n  // https://github.com/tc39/proposal-js-module-blocks\n  parseModuleExpression(this: Parser): N.ModuleExpression {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode<N.ModuleExpression>();\n    this.next(); // eat \"module\"\n    if (!this.match(tt.braceL)) {\n      this.unexpected(null, tt.braceL);\n    }\n    // start program node immediately after `{`\n    const program = this.startNodeAt<N.Program>(this.state.endLoc);\n    this.next(); // eat `{`\n\n    const revertScopes = this.initializeScopes(/** inModule */ true);\n    this.enterInitialScopes();\n\n    try {\n      node.body = this.parseProgram(program, tt.braceR, \"module\");\n    } finally {\n      revertScopes();\n    }\n    return this.finishNode<N.ModuleExpression>(node, \"ModuleExpression\");\n  }\n\n  // Used in Flow plugin\n  parsePropertyNamePrefixOperator(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    prop: Undone<N.ObjectOrClassMember | N.ClassMember>,\n  ): void {}\n}\n","import type * as N from \"../types\";\nimport {\n  tokenIsIdentifier,\n  tokenIsLoop,\n  tokenIsTemplate,\n  tt,\n  type TokenType,\n  getExportedToken,\n} from \"../tokenizer/types\";\nimport ExpressionParser from \"./expression\";\nimport { Errors } from \"../parse-error\";\nimport { isIdentifierChar, isIdentifierStart } from \"../util/identifier\";\nimport { lineBreak } from \"../util/whitespace\";\nimport * as charCodes from \"charcodes\";\nimport {\n  BIND_CLASS,\n  BIND_LEXICAL,\n  BIND_VAR,\n  BIND_FUNCTION,\n  SCOPE_CLASS,\n  SCOPE_FUNCTION,\n  SCOPE_OTHER,\n  SCOPE_SIMPLE_CATCH,\n  SCOPE_STATIC_BLOCK,\n  SCOPE_SUPER,\n  CLASS_ELEMENT_OTHER,\n  CLASS_ELEMENT_INSTANCE_GETTER,\n  CLASS_ELEMENT_INSTANCE_SETTER,\n  CLASS_ELEMENT_STATIC_GETTER,\n  CLASS_ELEMENT_STATIC_SETTER,\n  type BindingTypes,\n} from \"../util/scopeflags\";\nimport { ExpressionErrors } from \"./util\";\nimport { PARAM, functionFlags } from \"../util/production-parameter\";\nimport {\n  newExpressionScope,\n  newParameterDeclarationScope,\n} from \"../util/expression-scope\";\nimport type { SourceType } from \"../options\";\nimport { Token } from \"../tokenizer\";\nimport type { Position } from \"../util/location\";\nimport { createPositionWithColumnOffset } from \"../util/location\";\nimport { cloneStringLiteral, cloneIdentifier, type Undone } from \"./node\";\nimport type Parser from \"./index\";\n\nconst loopLabel = { kind: \"loop\" } as const,\n  switchLabel = { kind: \"switch\" } as const;\n\nexport const enum ParseFunctionFlag {\n  Expression = 0b0000,\n  Declaration = 0b0001,\n  HangingDeclaration = 0b0010,\n  NullableId = 0b0100,\n  Async = 0b1000,\n}\n\nexport const enum ParseStatementFlag {\n  StatementOnly = 0b0000,\n  AllowImportExport = 0b0001,\n  AllowDeclaration = 0b0010,\n  AllowFunctionDeclaration = 0b0100,\n  AllowLabeledFunction = 0b1000,\n}\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\n/**\n * Convert tokens for backward Babel 7 compat.\n * tt.privateName => tt.hash + tt.name\n * tt.templateTail => tt.backquote/tt.braceR + tt.template + tt.backquote\n * tt.templateNonTail => tt.backquote/tt.braceR + tt.template + tt.dollarBraceL\n * For performance reasons this routine mutates `tokens`, it is okay\n * here since we execute `parseTopLevel` once for every file.\n */\nfunction babel7CompatTokens(tokens: (Token | N.Comment)[], input: string) {\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const { type } = token;\n    if (typeof type === \"number\") {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (type === tt.privateName) {\n          const { loc, start, value, end } = token;\n          const hashEndPos = start + 1;\n          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          tokens.splice(\n            i,\n            1,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.hash),\n              value: \"#\",\n              start: start,\n              end: hashEndPos,\n              startLoc: loc.start,\n              endLoc: hashEndLoc,\n            }),\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.name),\n              value: value,\n              start: hashEndPos,\n              end: end,\n              startLoc: hashEndLoc,\n              endLoc: loc.end,\n            }),\n          );\n          i++;\n          continue;\n        }\n\n        if (tokenIsTemplate(type)) {\n          const { loc, start, value, end } = token;\n          const backquoteEnd = start + 1;\n          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          let startToken;\n          if (input.charCodeAt(start) === charCodes.graveAccent) {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          } else {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.braceR),\n              value: \"}\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          }\n          let templateValue,\n            templateElementEnd,\n            templateElementEndLoc,\n            endToken;\n          if (type === tt.templateTail) {\n            // ends with '`'\n            templateElementEnd = end - 1;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\n            templateValue = value === null ? null : value.slice(1, -1);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          } else {\n            // ends with `${`\n            templateElementEnd = end - 2;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\n            templateValue = value === null ? null : value.slice(1, -2);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.dollarBraceL),\n              value: \"${\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          }\n          tokens.splice(\n            i,\n            1,\n            startToken,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.template),\n              value: templateValue,\n              start: backquoteEnd,\n              end: templateElementEnd,\n              startLoc: backquoteEndLoc,\n              endLoc: templateElementEndLoc,\n            }),\n            endToken,\n          );\n          i += 2;\n          continue;\n        }\n      }\n      // @ts-expect-error: we manipulate `token` for performance reasons\n      token.type = getExportedToken(type);\n    }\n  }\n  return tokens;\n}\nexport default abstract class StatementParser extends ExpressionParser {\n  // ### Statement parsing\n\n  // Parse a program. Initializes the parser, reads any number of\n  // statements, and wraps them in a Program node.  Optionally takes a\n  // `program` argument.  If present, the statements will be appended\n  // to its body instead of creating a new node.\n\n  parseTopLevel(this: Parser, file: N.File, program: N.Program): N.File {\n    file.program = this.parseProgram(program);\n    file.comments = this.state.comments;\n\n    if (this.options.tokens) {\n      file.tokens = babel7CompatTokens(this.tokens, this.input);\n    }\n\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(\n    this: Parser,\n    program: Undone<N.Program>,\n    end: TokenType = tt.eof,\n    sourceType: SourceType = this.options.sourceType,\n  ): N.Program {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n    if (\n      this.inModule &&\n      !this.options.allowUndeclaredExports &&\n      this.scope.undefinedExports.size > 0\n    ) {\n      for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\n        this.raise(Errors.ModuleExportUndefined, { at, localName });\n      }\n    }\n    let finishedProgram: N.Program;\n    if (end === tt.eof) {\n      // finish at eof for top level program\n      finishedProgram = this.finishNode(program, \"Program\");\n    } else {\n      // finish immediately before the end token\n      finishedProgram = this.finishNodeAt(\n        program,\n        \"Program\",\n        createPositionWithColumnOffset(this.state.startLoc, -1),\n      );\n    }\n    return finishedProgram;\n  }\n\n  /**\n   * cast a Statement to a Directive. This method mutates input statement.\n   */\n  stmtToDirective(stmt: N.Statement): N.Directive {\n    const directive = stmt as any;\n    directive.type = \"Directive\";\n    directive.value = directive.expression;\n    delete directive.expression;\n\n    const directiveLiteral = directive.value;\n    const expressionValue = directiveLiteral.value;\n    const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);\n    const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n\n    directiveLiteral.type = \"DirectiveLiteral\";\n\n    return directive;\n  }\n\n  parseInterpreterDirective(): N.InterpreterDirective | null {\n    if (!this.match(tt.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode<N.InterpreterDirective>();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(): boolean {\n    if (!this.isContextual(tt._let)) {\n      return false;\n    }\n    return this.hasFollowingBindingAtom();\n  }\n\n  chStartsBindingIdentifier(ch: number, pos: number) {\n    if (isIdentifierStart(ch)) {\n      keywordRelationalOperator.lastIndex = pos;\n      if (keywordRelationalOperator.test(this.input)) {\n        // We have seen `in` or `instanceof` so far, now check if the identfier\n        // ends here\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n        if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n          return false;\n        }\n      }\n      return true;\n    } else if (ch === charCodes.backslash) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  chStartsBindingPattern(ch: number) {\n    return (\n      ch === charCodes.leftSquareBracket || ch === charCodes.leftCurlyBrace\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `let` and declaration is allowed, check if it\n   * starts a variable declaration so that it should be interpreted as a keyword.\n   */\n  hasFollowingBindingAtom(): boolean {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      this.chStartsBindingPattern(nextCh) ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `using` and declaration is allowed, check if it\n   * starts a variable declaration so that it should be interpreted as a keyword.\n   */\n  hasFollowingBindingIdentifier(): boolean {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return this.chStartsBindingIdentifier(nextCh, next);\n  }\n\n  startsUsingForOf(): boolean {\n    const lookahead = this.lookahead();\n    if (lookahead.type === tt._of && !lookahead.containsEsc) {\n      // `using of` must start a for-lhs-of statement\n      return false;\n    } else {\n      this.expectPlugin(\"explicitResourceManagement\");\n      return true;\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleItem\n  parseModuleItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowImportExport |\n        ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        ParseStatementFlag.AllowLabeledFunction,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-StatementListItem\n  parseStatementListItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        ParseStatementFlag.AllowLabeledFunction,\n    );\n  }\n\n  parseStatementOrFunctionDeclaration(\n    this: Parser,\n    disallowLabeledFunction: boolean,\n  ) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowFunctionDeclaration |\n        (disallowLabeledFunction ? 0 : ParseStatementFlag.AllowLabeledFunction),\n    );\n  }\n\n  // Parse a single statement.\n  //\n  // If expecting a statement and finding a slash operator, parse a\n  // regular expression literal. This is to handle cases like\n  // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n  // does not help.\n  // https://tc39.es/ecma262/#prod-Statement\n  parseStatement(this: Parser) {\n    return this.parseStatementLike(ParseStatementFlag.StatementOnly);\n  }\n\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n  // when they are not at the top level\n  parseStatementLike(\n    this: Parser,\n    flags: ParseStatementFlag,\n  ):\n    | N.Statement\n    | N.Declaration\n    | N.ImportDeclaration\n    | N.ExportDefaultDeclaration\n    | N.ExportNamedDeclaration\n    | N.ExportAllDeclaration {\n    let decorators: N.Decorator[] | null = null;\n\n    if (this.match(tt.at)) {\n      decorators = this.parseDecorators(true);\n    }\n    return this.parseStatementContent(flags, decorators);\n  }\n\n  parseStatementContent(\n    this: Parser,\n    flags: ParseStatementFlag,\n    decorators?: N.Decorator[] | null,\n  ): N.Statement {\n    const starttype = this.state.type;\n    const node = this.startNode();\n    const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);\n    const allowFunctionDeclaration = !!(\n      flags & ParseStatementFlag.AllowFunctionDeclaration\n    );\n    const topLevel = flags & ParseStatementFlag.AllowImportExport;\n\n    // Most types of statements are recognized by the keyword they\n    // start with. Many are trivial to parse, some require a bit of\n    // complexity.\n\n    switch (starttype) {\n      case tt._break:\n        return this.parseBreakContinueStatement(node, /* isBreak */ true);\n      case tt._continue:\n        return this.parseBreakContinueStatement(node, /* isBreak */ false);\n      case tt._debugger:\n        return this.parseDebuggerStatement(node as Undone<N.DebuggerStatement>);\n      case tt._do:\n        return this.parseDoWhileStatement(node as Undone<N.DoWhileStatement>);\n      case tt._for:\n        return this.parseForStatement(node as Undone<N.ForStatement>);\n      case tt._function:\n        if (this.lookaheadCharCode() === charCodes.dot) break;\n        if (!allowDeclaration) {\n          if (this.state.strict) {\n            this.raise(Errors.StrictFunction, { at: this.state.startLoc });\n          } else if (!allowFunctionDeclaration) {\n            this.raise(Errors.SloppyFunction, { at: this.state.startLoc });\n          }\n        }\n        return this.parseFunctionStatement(\n          node as Undone<N.FunctionDeclaration>,\n          false,\n          !allowDeclaration && allowFunctionDeclaration,\n        );\n      case tt._class:\n        if (!allowDeclaration) this.unexpected();\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            node as Undone<N.ClassDeclaration>,\n          ),\n          true,\n        );\n\n      case tt._if:\n        return this.parseIfStatement(node as Undone<N.IfStatement>);\n      case tt._return:\n        return this.parseReturnStatement(node as Undone<N.ReturnStatement>);\n      case tt._switch:\n        return this.parseSwitchStatement(node as Undone<N.SwitchStatement>);\n      case tt._throw:\n        return this.parseThrowStatement(node as Undone<N.ThrowStatement>);\n      case tt._try:\n        return this.parseTryStatement(node as Undone<N.TryStatement>);\n\n      case tt._using:\n        // using [no LineTerminator here] BindingList[+Using]\n        if (\n          this.hasFollowingLineBreak() ||\n          this.state.containsEsc ||\n          !this.hasFollowingBindingIdentifier()\n        ) {\n          break;\n        }\n        this.expectPlugin(\"explicitResourceManagement\");\n        if (!this.scope.inModule && this.scope.inTopLevel) {\n          this.raise(Errors.UnexpectedUsingDeclaration, {\n            at: this.state.startLoc,\n          });\n        } else if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, {\n            at: this.state.startLoc,\n          });\n        }\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          \"using\",\n        );\n      case tt._let: {\n        if (this.state.containsEsc) {\n          break;\n        }\n        // `let [` is an explicit negative lookahead for\n        // ExpressionStatement, so special-case it first.\n        const next = this.nextTokenStart();\n        const nextCh = this.codePointAtPos(next);\n        if (nextCh !== charCodes.leftSquareBracket) {\n          if (!allowDeclaration && this.hasFollowingLineBreak()) break;\n          if (\n            !this.chStartsBindingIdentifier(nextCh, next) &&\n            nextCh !== charCodes.leftCurlyBrace\n          ) {\n            break;\n          }\n        }\n      }\n      // fall through\n      case tt._const: {\n        if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, {\n            at: this.state.startLoc,\n          });\n        }\n      }\n      // fall through\n      case tt._var: {\n        const kind = this.state.value;\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          kind,\n        );\n      }\n      case tt._while:\n        return this.parseWhileStatement(node as Undone<N.WhileStatement>);\n      case tt._with:\n        return this.parseWithStatement(node as Undone<N.WithStatement>);\n      case tt.braceL:\n        return this.parseBlock();\n      case tt.semi:\n        return this.parseEmptyStatement(node as Undone<N.EmptyStatement>);\n      case tt._import: {\n        const nextTokenCharCode = this.lookaheadCharCode();\n        if (\n          nextTokenCharCode === charCodes.leftParenthesis || // import()\n          nextTokenCharCode === charCodes.dot // import.meta\n        ) {\n          break;\n        }\n      }\n      // fall through\n      case tt._export: {\n        if (!this.options.allowImportExportEverywhere && !topLevel) {\n          this.raise(Errors.UnexpectedImportExport, {\n            at: this.state.startLoc,\n          });\n        }\n\n        this.next(); // eat `import`/`export`\n\n        let result;\n        if (starttype === tt._import) {\n          result = this.parseImport(node as Undone<N.ImportDeclaration>);\n\n          if (\n            result.type === \"ImportDeclaration\" &&\n            (!result.importKind || result.importKind === \"value\")\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        } else {\n          result = this.parseExport(\n            node as Undone<\n              | N.ExportAllDeclaration\n              | N.ExportDefaultDeclaration\n              | N.ExportDefaultDeclaration\n            >,\n            decorators,\n          );\n\n          if (\n            (result.type === \"ExportNamedDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            (result.type === \"ExportAllDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            result.type === \"ExportDefaultDeclaration\"\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        }\n\n        this.assertModuleNodeAllowed(result);\n\n        return result;\n      }\n\n      default: {\n        if (this.isAsyncFunction()) {\n          if (!allowDeclaration) {\n            this.raise(Errors.AsyncFunctionInSingleStatementContext, {\n              at: this.state.startLoc,\n            });\n          }\n          this.next(); // eat 'async'\n          return this.parseFunctionStatement(\n            node as Undone<N.FunctionDeclaration>,\n            true,\n            !allowDeclaration && allowFunctionDeclaration,\n          );\n        }\n      }\n    }\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (\n      tokenIsIdentifier(starttype) &&\n      expr.type === \"Identifier\" &&\n      this.eat(tt.colon)\n    ) {\n      return this.parseLabeledStatement(\n        node as Undone<N.LabeledStatement>,\n        maybeName,\n        // @ts-expect-error migrate to Babel types\n        expr,\n        flags,\n      );\n    } else {\n      return this.parseExpressionStatement(\n        node as Undone<N.ExpressionStatement>,\n        expr,\n        decorators,\n      );\n    }\n  }\n\n  assertModuleNodeAllowed(node: N.Node): void {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raise(Errors.ImportOutsideModule, { at: node });\n    }\n  }\n\n  decoratorsEnabledBeforeExport(): boolean {\n    if (this.hasPlugin(\"decorators-legacy\")) return true;\n    return (\n      this.hasPlugin(\"decorators\") &&\n      !!this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")\n    );\n  }\n\n  // Attach the decorators to the given class.\n  // NOTE: This method changes the .start location of the class, and thus\n  // can affect comment attachment. Calling it before or after finalizing\n  // the class node (and thus finalizing its comments) changes how comments\n  // before the `class` keyword or before the final .start location of the\n  // class are attached.\n  maybeTakeDecorators<T extends Undone<N.Class>>(\n    maybeDecorators: N.Decorator[] | null,\n    classNode: T,\n    exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\n  ): T {\n    if (maybeDecorators) {\n      classNode.decorators = maybeDecorators;\n      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\n      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\n    }\n    return classNode;\n  }\n\n  canHaveLeadingDecorator(): boolean {\n    return this.match(tt._class);\n  }\n\n  parseDecorators(this: Parser, allowExport?: boolean): N.Decorator[] {\n    const decorators = [];\n    do {\n      decorators.push(this.parseDecorator());\n    } while (this.match(tt.at));\n\n    if (this.match(tt._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (!this.decoratorsEnabledBeforeExport()) {\n        this.raise(Errors.DecoratorExportClass, { at: this.state.startLoc });\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(Errors.UnexpectedLeadingDecorator, {\n        at: this.state.startLoc,\n      });\n    }\n\n    return decorators;\n  }\n\n  parseDecorator(this: Parser): N.Decorator {\n    this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n    const node = this.startNode<N.Decorator>();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      const startLoc = this.state.startLoc;\n      let expr: N.Expression;\n\n      if (this.match(tt.parenL)) {\n        const startLoc = this.state.startLoc;\n        this.next(); // eat '('\n        expr = this.parseExpression();\n        this.expect(tt.parenR);\n        expr = this.wrapParenthesis(startLoc, expr);\n\n        const paramsStartLoc = this.state.startLoc;\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n        if (\n          this.getPluginOption(\"decorators\", \"allowCallParenthesized\") ===\n            false &&\n          node.expression !== expr\n        ) {\n          this.raise(Errors.DecoratorArgumentsOutsideParentheses, {\n            at: paramsStartLoc,\n          });\n        }\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(tt.dot)) {\n          const node = this.startNodeAt(startLoc);\n          node.object = expr;\n          if (this.match(tt.privateName)) {\n            this.classScope.usePrivateName(\n              this.state.value,\n              this.state.startLoc,\n            );\n            node.property = this.parsePrivateName();\n          } else {\n            node.property = this.parseIdentifier(true);\n          }\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n      }\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(this: Parser, expr: N.Expression): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAtNode(expr);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: true,\n  ): N.BreakStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: false,\n  ): N.ContinueStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ): N.BreakStatement | N.ContinueStatement {\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, isBreak);\n\n    return this.finishNode(\n      node,\n      isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n    );\n  }\n\n  verifyBreakContinue(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ) {\n    let i;\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      const type = isBreak ? \"BreakStatement\" : \"ContinueStatement\";\n      this.raise(Errors.IllegalBreakContinue, { at: node, type });\n    }\n  }\n\n  parseDebuggerStatement(\n    node: Undone<N.DebuggerStatement>,\n  ): N.DebuggerStatement {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression(this: Parser): N.Expression {\n    this.expect(tt.parenL);\n    const val = this.parseExpression();\n    this.expect(tt.parenR);\n    return val;\n  }\n\n  // https://tc39.es/ecma262/#prod-DoWhileStatement\n  parseDoWhileStatement(\n    this: Parser,\n    node: Undone<N.DoWhileStatement>,\n  ): N.DoWhileStatement {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body's body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body's body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    this.expect(tt._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(tt.semi);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n  // loop is non-trivial. Basically, we have to parse the init `var`\n  // statement or expression, disallowing the `in` operator (see\n  // the second parameter to `parseExpression`), and then check\n  // whether the next token is `in` or `of`. When there is no init\n  // part (semicolon immediately after the opening parenthesis), it\n  // is a regular `for` loop.\n\n  parseForStatement(\n    this: Parser,\n    node: Undone<N.ForStatement | N.ForInOf>,\n  ): N.ForLike {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    let awaitAt = null;\n\n    if (this.isAwaitAllowed() && this.eatContextual(tt._await)) {\n      awaitAt = this.state.lastTokStartLoc;\n    }\n    this.scope.enter(SCOPE_OTHER);\n    this.expect(tt.parenL);\n\n    if (this.match(tt.semi)) {\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node as Undone<N.ForStatement>, null);\n    }\n\n    const startsWithLet = this.isContextual(tt._let);\n    const startsWithUsing =\n      this.isContextual(tt._using) && !this.hasFollowingLineBreak();\n    const isLetOrUsing =\n      (startsWithLet && this.hasFollowingBindingAtom()) ||\n      (startsWithUsing &&\n        this.hasFollowingBindingIdentifier() &&\n        this.startsUsingForOf());\n    if (this.match(tt._var) || this.match(tt._const) || isLetOrUsing) {\n      const initNode = this.startNode<N.VariableDeclaration>();\n      const kind = this.state.value;\n      this.next();\n      this.parseVar(initNode, true, kind);\n      const init = this.finishNode(initNode, \"VariableDeclaration\");\n\n      const isForIn = this.match(tt._in);\n      if (isForIn && startsWithUsing) {\n        this.raise(Errors.ForInUsing, { at: init });\n      }\n      if (\n        (isForIn || this.isContextual(tt._of)) &&\n        init.declarations.length === 1\n      ) {\n        return this.parseForIn(node as Undone<N.ForInOf>, init, awaitAt);\n      }\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node as Undone<N.ForStatement>, init);\n    }\n\n    // Check whether the first token is possibly a contextual keyword, so that\n    // we can forbid `for (async of` if this turns out to be a for-of loop.\n    const startsWithAsync = this.isContextual(tt._async);\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(tt._of);\n    if (isForOf) {\n      // Check for leading tokens that are forbidden in for-of loops:\n      if (startsWithLet) {\n        this.raise(Errors.ForOfLet, { at: init });\n      }\n\n      if (\n        // `for await (async of []);` is allowed.\n        awaitAt === null &&\n        startsWithAsync &&\n        init.type === \"Identifier\"\n      ) {\n        // This catches the case where the `async` in `for (async of` was\n        // parsed as an identifier. If it was parsed as the start of an async\n        // arrow function (e.g. `for (async of => {} of []);`), the LVal check\n        // further down will raise a more appropriate error.\n        this.raise(Errors.ForOfAsync, { at: init });\n      }\n    }\n    if (isForOf || this.match(tt._in)) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.toAssignable(init, /* isLHS */ true);\n      const type = isForOf ? \"ForOfStatement\" : \"ForInStatement\";\n      this.checkLVal(init, { in: { type } });\n      return this.parseForIn(\n        node as Undone<N.ForInStatement | N.ForOfStatement>,\n        // @ts-expect-error init has been transformed to an assignable\n        init,\n        awaitAt,\n      );\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt !== null) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node as Undone<N.ForStatement>, init);\n  }\n\n  // https://tc39.es/ecma262/#prod-HoistableDeclaration\n  parseFunctionStatement(\n    this: Parser,\n    node: Undone<N.FunctionDeclaration>,\n    isAsync: boolean,\n    isHangingDeclaration: boolean,\n  ): N.FunctionDeclaration {\n    this.next(); // eat 'function'\n    return this.parseFunction(\n      node,\n      ParseFunctionFlag.Declaration |\n        (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) |\n        (isAsync ? ParseFunctionFlag.Async : 0),\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-IfStatement\n  parseIfStatement(this: Parser, node: Undone<N.IfStatement>) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    // Annex B.3.3\n    // https://tc39.es/ecma262/#sec-functiondeclarations-in-ifstatement-statement-clauses\n    node.consequent = this.parseStatementOrFunctionDeclaration(\n      // https://tc39.es/ecma262/#sec-if-statement-static-semantics-early-errors\n      true,\n    );\n    node.alternate = this.eat(tt._else)\n      ? this.parseStatementOrFunctionDeclaration(true)\n      : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(this: Parser, node: Undone<N.ReturnStatement>) {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(Errors.IllegalReturn, { at: this.state.startLoc });\n    }\n\n    this.next();\n\n    // In `return` (and `break`/`continue`), the keywords with\n    // optional arguments, we eagerly look for a semicolon or the\n    // possibility to insert one.\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-SwitchStatement\n  parseSwitchStatement(this: Parser, node: Undone<N.SwitchStatement>) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases: N.SwitchStatement[\"cases\"] = (node.cases = []);\n    this.expect(tt.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(SCOPE_OTHER);\n\n    // Statements under must be grouped (by label) in SwitchCase\n    // nodes. `cur` is used to keep the node that we are currently\n    // adding statements to.\n\n    let cur;\n    for (let sawDefault; !this.match(tt.braceR); ) {\n      if (this.match(tt._case) || this.match(tt._default)) {\n        const isCase = this.match(tt._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        // @ts-expect-error Fixme\n        cases.push((cur = this.startNode()));\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(Errors.MultipleDefaultsInSwitch, {\n              at: this.state.lastTokStartLoc,\n            });\n          }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(tt.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatementListItem());\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next(); // Closing brace\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(this: Parser, node: Undone<N.ThrowStatement>) {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.NewlineAfterThrow, { at: this.state.lastTokEndLoc });\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam(this: Parser): N.Pattern {\n    const param = this.parseBindingAtom();\n\n    const simple = param.type === \"Identifier\";\n    this.scope.enter(simple ? SCOPE_SIMPLE_CATCH : 0);\n    this.checkLVal(param, {\n      in: { type: \"CatchClause\" },\n      binding: BIND_LEXICAL,\n      allowingSloppyLetBinding: true,\n    });\n\n    return param;\n  }\n\n  parseTryStatement(\n    this: Parser,\n    node: Undone<N.TryStatement>,\n  ): N.TryStatement {\n    this.next();\n\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(tt._catch)) {\n      const clause = this.startNode<N.CatchClause>();\n      this.next();\n      if (this.match(tt.parenL)) {\n        this.expect(tt.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(tt.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(SCOPE_OTHER);\n      }\n\n      // Parse the catch clause's body.\n      clause.body =\n        // For the smartPipelines plugin: Disable topic references from outer\n        // contexts within the catch clause's body.\n        this.withSmartMixTopicForbiddingContext(() =>\n          // Parse the catch clause's body.\n          this.parseBlock(false, false),\n        );\n\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(Errors.NoCatchOrFinally, { at: node });\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-VariableStatement\n  // https://tc39.es/ecma262/#prod-LexicalDeclaration\n  parseVarStatement(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\",\n    allowMissingInitializer: boolean = false,\n  ): N.VariableDeclaration {\n    this.next();\n    this.parseVar(node, false, kind, allowMissingInitializer);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  // https://tc39.es/ecma262/#prod-WhileStatement\n  parseWhileStatement(\n    this: Parser,\n    node: Undone<N.WhileStatement>,\n  ): N.WhileStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(\n    this: Parser,\n    node: Undone<N.WithStatement>,\n  ): N.WithStatement {\n    if (this.state.strict) {\n      this.raise(Errors.StrictWith, { at: this.state.startLoc });\n    }\n    this.next();\n    node.object = this.parseHeaderExpression();\n\n    // Parse the statement body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the with statement's body.\n      // They are permitted in function default-parameter expressions, which are\n      // part of the outer context, outside of the with statement's body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the statement body.\n        this.parseStatement(),\n      );\n\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node: Undone<N.EmptyStatement>): N.EmptyStatement {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-LabelledStatement\n  parseLabeledStatement(\n    this: Parser,\n    node: Undone<N.LabeledStatement>,\n    maybeName: string,\n    expr: N.Identifier,\n    flags: ParseStatementFlag,\n  ): N.LabeledStatement {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(Errors.LabelRedeclaration, {\n          at: expr,\n          labelName: maybeName,\n        });\n      }\n    }\n\n    const kind = tokenIsLoop(this.state.type)\n      ? \"loop\"\n      : this.match(tt._switch)\n      ? \"switch\"\n      : null;\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n      if (label.statementStart === node.start) {\n        label.statementStart = this.state.start;\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.state.start,\n    });\n    // https://tc39.es/ecma262/#prod-LabelledItem\n    node.body =\n      flags & ParseStatementFlag.AllowLabeledFunction\n        ? this.parseStatementOrFunctionDeclaration(false)\n        : this.parseStatement();\n\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(\n    node: Undone<N.ExpressionStatement>,\n    expr: N.Expression,\n    /* eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    decorators: N.Decorator[] | null,\n  ) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  // Parse a semicolon-enclosed block of statements, handling `\"use\n  // strict\"` declarations when `allowDirectives` is true (used for\n  // function bodies).\n\n  parseBlock(\n    this: Parser,\n    allowDirectives: boolean = false,\n    createNewLexicalScope: boolean = true,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement {\n    const node = this.startNode<N.BlockStatement>();\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n    this.expect(tt.braceL);\n    if (createNewLexicalScope) {\n      this.scope.enter(SCOPE_OTHER);\n    }\n    this.parseBlockBody(\n      node,\n      allowDirectives,\n      false,\n      tt.braceR,\n      afterBlockParse,\n    );\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt: N.Statement): boolean {\n    return (\n      stmt.type === \"ExpressionStatement\" &&\n      stmt.expression.type === \"StringLiteral\" &&\n      !stmt.expression.extra.parenthesized\n    );\n  }\n\n  parseBlockBody(\n    this: Parser,\n    node: Undone<N.BlockStatementLike>,\n    allowDirectives: boolean | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const body: N.BlockStatementLike[\"body\"] = (node.body = []);\n    const directives: N.BlockStatementLike[\"directives\"] = (node.directives =\n      []);\n    this.parseBlockOrModuleBlockBody(\n      body,\n      allowDirectives ? directives : undefined,\n      topLevel,\n      end,\n      afterBlockParse,\n    );\n  }\n\n  // Undefined directives means that directives are not allowed.\n  // https://tc39.es/ecma262/#prod-Block\n  // https://tc39.es/ecma262/#prod-ModuleBody\n  parseBlockOrModuleBlockBody(\n    this: Parser,\n    body: N.Statement[],\n    directives: N.Directive[] | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      const stmt = topLevel\n        ? this.parseModuleItem()\n        : this.parseStatementListItem();\n\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n\n          if (\n            !hasStrictModeDirective &&\n            directive.value.value === \"use strict\"\n          ) {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n\n          continue;\n        }\n        parsedNonDirective = true;\n        // clear strict errors since the strict mode will not change within the block\n        this.state.strictErrors.clear();\n      }\n      body.push(stmt);\n    }\n\n    if (afterBlockParse) {\n      afterBlockParse.call(this, hasStrictModeDirective);\n    }\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  // Parse a regular `for` loop. The disambiguation code in\n  // `parseStatement` will already have parsed the init statement or\n  // expression.\n\n  parseFor(\n    this: Parser,\n    node: Undone<N.ForStatement>,\n    init?: N.VariableDeclaration | N.Expression | null,\n  ): N.ForStatement {\n    node.init = init;\n    this.semicolon(/* allowAsi */ false);\n    node.test = this.match(tt.semi) ? null : this.parseExpression();\n    this.semicolon(/* allowAsi */ false);\n    node.update = this.match(tt.parenR) ? null : this.parseExpression();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  // Parse a `for`/`in` and `for`/`of` loop, which are almost\n  // same from parser's perspective.\n\n  parseForIn(\n    this: Parser,\n    node: Undone<N.ForInOf>,\n    init: N.VariableDeclaration | N.AssignmentPattern,\n    awaitAt?: Position | null,\n  ): N.ForInOf {\n    const isForIn = this.match(tt._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt !== null) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt !== null;\n    }\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (!isForIn ||\n        this.state.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\")\n    ) {\n      this.raise(Errors.ForInOfLoopInitializer, {\n        at: init,\n        type: isForIn ? \"ForInStatement\" : \"ForOfStatement\",\n      });\n    }\n\n    if (init.type === \"AssignmentPattern\") {\n      this.raise(Errors.InvalidLhs, {\n        at: init,\n        ancestor: { type: \"ForStatement\" },\n      });\n    }\n\n    node.left = init;\n    node.right = isForIn\n      ? this.parseExpression()\n      : this.parseMaybeAssignAllowIn();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  // Parse a list of variable declarations.\n\n  parseVar(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    isFor: boolean,\n    kind: \"var\" | \"let\" | \"const\" | \"using\",\n    allowMissingInitializer: boolean = false,\n  ): Undone<N.VariableDeclaration> {\n    const declarations: N.VariableDeclarator[] = (node.declarations = []);\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode<N.VariableDeclarator>();\n      this.parseVarId(decl, kind);\n      decl.init = !this.eat(tt.eq)\n        ? null\n        : isFor\n        ? this.parseMaybeAssignDisallowIn()\n        : this.parseMaybeAssignAllowIn();\n\n      if (decl.init === null && !allowMissingInitializer) {\n        if (\n          decl.id.type !== \"Identifier\" &&\n          !(isFor && (this.match(tt._in) || this.isContextual(tt._of)))\n        ) {\n          this.raise(Errors.DeclarationMissingInitializer, {\n            at: this.state.lastTokEndLoc,\n            kind: \"destructuring\",\n          });\n        } else if (\n          kind === \"const\" &&\n          !(this.match(tt._in) || this.isContextual(tt._of))\n        ) {\n          this.raise(Errors.DeclarationMissingInitializer, {\n            at: this.state.lastTokEndLoc,\n            kind: \"const\",\n          });\n        }\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(tt.comma)) break;\n    }\n    return node;\n  }\n\n  parseVarId(\n    this: Parser,\n    decl: Undone<N.VariableDeclarator>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\",\n  ): void {\n    const id = this.parseBindingAtom();\n    this.checkLVal(id, {\n      in: { type: \"VariableDeclarator\" },\n      binding: kind === \"var\" ? BIND_VAR : BIND_LEXICAL,\n    });\n    decl.id = id;\n  }\n\n  // https://tc39.es/ecma262/#prod-AsyncFunctionExpression\n  parseAsyncFunctionExpression(\n    this: Parser,\n    node: Undone<N.FunctionExpression>,\n  ): N.FunctionExpression {\n    return this.parseFunction(node, ParseFunctionFlag.Async);\n  }\n\n  // Parse a function declaration or expression (depending on the\n  // ParseFunctionFlag.Declaration flag).\n\n  parseFunction<T extends N.NormalFunction>(\n    this: Parser,\n    node: Undone<T>,\n    flags: ParseFunctionFlag = ParseFunctionFlag.Expression,\n  ): T {\n    const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;\n    const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);\n    const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);\n    const isAsync = !!(flags & ParseFunctionFlag.Async);\n\n    this.initFunction(node, isAsync);\n\n    if (this.match(tt.star)) {\n      if (hangingDeclaration) {\n        this.raise(Errors.GeneratorInSingleStatementContext, {\n          at: this.state.startLoc,\n        });\n      }\n      this.next(); // eat *\n      node.generator = true;\n    }\n\n    if (isDeclaration) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(SCOPE_FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isDeclaration) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, /* allowModifiers */ false);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the function body. They are permitted in function\n    // default-parameter expressions, outside of the function body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the function body.\n      this.parseFunctionBodyAndFinish(\n        node,\n        isDeclaration ? \"FunctionDeclaration\" : \"FunctionExpression\",\n      );\n    });\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isDeclaration && !hangingDeclaration) {\n      // We need to register this _after_ parsing the function body\n      // because of TypeScript body-less function declarations,\n      // which shouldn't be added to the scope.\n      this.registerFunctionStatementId(node as T);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node as T;\n  }\n\n  parseFunctionId(requireId?: boolean): N.Identifier | undefined | null {\n    return requireId || tokenIsIdentifier(this.state.type)\n      ? this.parseIdentifier()\n      : null;\n  }\n\n  parseFunctionParams(\n    this: Parser,\n    node: Undone<N.Function>,\n    allowModifiers?: boolean,\n  ): void {\n    this.expect(tt.parenL);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(\n      tt.parenR,\n      charCodes.rightParenthesis,\n      /* allowEmpty */ false,\n      allowModifiers,\n    );\n\n    this.expressionScope.exit();\n  }\n\n  registerFunctionStatementId(node: N.Function): void {\n    if (!node.id) return;\n\n    // If it is a regular function declaration in sloppy mode, then it is\n    // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n    // mode depends on properties of the current scope (see\n    // treatFunctionsAsVar).\n    this.scope.declareName(\n      node.id.name,\n      this.state.strict || node.generator || node.async\n        ? this.scope.treatFunctionsAsVar\n          ? BIND_VAR\n          : BIND_LEXICAL\n        : BIND_FUNCTION,\n      node.id.loc.start,\n    );\n  }\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseClass<T extends N.Class>(\n    this: Parser,\n    node: Undone<T>,\n    isStatement: /* T === ClassDeclaration */ boolean,\n    optionalId?: boolean,\n  ): T {\n    this.next(); // 'class'\n\n    // A class definition is always strict mode code.\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    // this.state.strict is restored in parseClassBody\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n\n    return this.finishNode(\n      node,\n      isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n    );\n  }\n\n  isClassProperty(): boolean {\n    return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n  }\n\n  isClassMethod(): boolean {\n    return this.match(tt.parenL);\n  }\n\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n    return (\n      !method.computed &&\n      !method.static &&\n      (method.key.name === \"constructor\" || // Identifier\n        method.key.value === \"constructor\") // String literal\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassBody\n  parseClassBody(\n    this: Parser,\n    hadSuperClass: boolean,\n    oldStrict: boolean,\n  ): N.ClassBody {\n    this.classScope.enter();\n\n    const state: N.ParseClassMemberState = {\n      hadConstructor: false,\n      hadSuperClass,\n    };\n    let decorators: N.Decorator[] = [];\n    const classBody = this.startNode<N.ClassBody>();\n    classBody.body = [];\n\n    this.expect(tt.braceL);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the class body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the contents within the braces.\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(Errors.DecoratorSemicolon, {\n              at: this.state.lastTokEndLoc,\n            });\n          }\n          continue;\n        }\n\n        if (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode<N.ClassMember>();\n\n        // steal the decorators if there are any\n        if (decorators.length) {\n          // @ts-expect-error Fixme\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (\n          // @ts-expect-error Fixme\n          member.kind === \"constructor\" &&\n          // @ts-expect-error Fixme\n          member.decorators &&\n          // @ts-expect-error Fixme\n          member.decorators.length > 0\n        ) {\n          this.raise(Errors.DecoratorConstructor, { at: member });\n        }\n      }\n    });\n\n    this.state.strict = oldStrict;\n\n    this.next(); // eat `}`\n\n    if (decorators.length) {\n      throw this.raise(Errors.TrailingDecorator, { at: this.state.startLoc });\n    }\n\n    this.classScope.exit();\n\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  // returns true if the current identifier is a method/field name,\n  // false if it is a modifier\n  parseClassMemberFromModifier(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n  ): boolean {\n    const key = this.parseIdentifier(true); // eats the modifier\n\n    if (this.isClassMethod()) {\n      const method: N.ClassMethod = member as any;\n\n      // a method named like the modifier\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(\n        classBody,\n        method,\n        false,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop: N.ClassProperty = member as any;\n\n      // a property named like the modifier\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n\n  parseClassMember(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n  ): void {\n    const isStatic = this.isContextual(tt._static);\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        // a class element named 'static'\n        return;\n      }\n      if (this.eat(tt.braceL)) {\n        this.parseClassStaticBlock(classBody, member as any as N.StaticBlock);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n    isStatic: boolean,\n  ) {\n    const publicMethod = member as N.ClassMethod;\n    const privateMethod = member as N.ClassPrivateMethod;\n    const publicProp = member as N.ClassProperty;\n    const privateProp = member as N.ClassPrivateProperty;\n    const accessorProp = member as N.ClassAccessorProperty;\n\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n    member.static = isStatic;\n    this.parsePropertyNamePrefixOperator(member);\n\n    if (this.eat(tt.star)) {\n      // a generator\n      method.kind = \"method\";\n      const isPrivateName = this.match(tt.privateName);\n      this.parseClassElementName(method);\n\n      if (isPrivateName) {\n        // Private generator method\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(Errors.ConstructorIsGenerator, {\n          at: publicMethod.key,\n        });\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        true,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n\n      return;\n    }\n\n    const isContextual =\n      tokenIsIdentifier(this.state.type) && !this.state.containsEsc;\n    const isPrivate = this.match(tt.privateName);\n    const key = this.parseClassElementName(member);\n    const maybeQuestionTokenStartLoc = this.state.startLoc;\n\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      // a normal method\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        // TypeScript allows multiple overloaded constructor declarations.\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(Errors.DuplicateConstructor, { at: key });\n        }\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(Errors.OverrideOnConstructor, { at: key });\n        }\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        false,\n        false,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (\n      isContextual &&\n      key.name === \"async\" &&\n      !this.isLineTerminator()\n    ) {\n      // an async method\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(tt.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStartLoc);\n      }\n\n      method.kind = \"method\";\n      // The so-called parsed name would have been \"async\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (isPrivate) {\n        // private async method\n        this.pushClassPrivateMethod(\n          classBody,\n          privateMethod,\n          isGenerator,\n          true,\n        );\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAsync, { at: publicMethod.key });\n        }\n\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          isGenerator,\n          true,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n    } else if (\n      isContextual &&\n      (key.name === \"get\" || key.name === \"set\") &&\n      !(this.match(tt.star) && this.isLineTerminator())\n    ) {\n      // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n      // a getter or setter\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = key.name;\n      // The so-called parsed name would have been \"get/set\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicMethod);\n\n      if (isPrivate) {\n        // private getter/setter\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAccessor, { at: publicMethod.key });\n        }\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          false,\n          false,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (\n      isContextual &&\n      key.name === \"accessor\" &&\n      !this.isLineTerminator()\n    ) {\n      this.expectPlugin(\"decoratorAutoAccessors\");\n      this.resetPreviousNodeTrailingComments(key);\n\n      // The so-called parsed name would have been \"accessor\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicProp);\n      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\n    } else if (this.isLineTerminator()) {\n      // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassElementName\n  parseClassElementName(\n    this: Parser,\n    member: Undone<N.ClassMember>,\n  ): N.Expression | N.Identifier {\n    const { type, value } = this.state;\n    if (\n      (type === tt.name || type === tt.string) &&\n      member.static &&\n      value === \"prototype\"\n    ) {\n      this.raise(Errors.StaticPrototype, { at: this.state.startLoc });\n    }\n\n    if (type === tt.privateName) {\n      if (value === \"constructor\") {\n        this.raise(Errors.ConstructorClassPrivateField, {\n          at: this.state.startLoc,\n        });\n      }\n      const key = this.parsePrivateName();\n      member.key = key;\n      return key;\n    }\n\n    return this.parsePropertyName(member);\n  }\n\n  parseClassStaticBlock(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<\n      N.StaticBlock & {\n        decorators?: Array<N.Decorator>;\n      }\n    >,\n  ) {\n    // Start a new lexical scope\n    this.scope.enter(SCOPE_CLASS | SCOPE_STATIC_BLOCK | SCOPE_SUPER);\n    // Start a new scope with regard to loop labels\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    // ClassStaticBlockStatementList:\n    //   StatementList[~Yield, ~Await, ~Return] opt\n    this.prodParam.enter(PARAM);\n    const body: N.Node[] = (member.body = []);\n    this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode<N.StaticBlock>(member, \"StaticBlock\"));\n    if (member.decorators?.length) {\n      this.raise(Errors.DecoratorStaticBlock, { at: member });\n    }\n  }\n\n  pushClassProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassProperty,\n  ) {\n    if (\n      !prop.computed &&\n      (prop.key.name === \"constructor\" || prop.key.value === \"constructor\")\n    ) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, { at: prop.key });\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: Undone<N.ClassPrivateProperty>,\n  ) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key),\n      CLASS_ELEMENT_OTHER,\n      node.key.loc.start,\n    );\n  }\n\n  pushClassAccessorProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassAccessorProperty,\n    isPrivate: boolean,\n  ) {\n    if (!isPrivate && !prop.computed) {\n      // Not private, so not node is not a PrivateName and we can safely cast\n      const key = prop.key as N.Expression;\n\n      if (key.name === \"constructor\" || key.value === \"constructor\") {\n        // Non-computed field, which is either an identifier named \"constructor\"\n        // or a string literal named \"constructor\"\n        this.raise(Errors.ConstructorClassField, { at: key });\n      }\n    }\n\n    const node = this.parseClassAccessorProperty(prop);\n    classBody.body.push(node);\n\n    if (isPrivate) {\n      this.classScope.declarePrivateName(\n        this.getPrivateNameSV(node.key),\n        CLASS_ELEMENT_OTHER,\n        node.key.loc.start,\n      );\n    }\n  }\n\n  pushClassMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowsDirectSuper: boolean,\n  ): void {\n    classBody.body.push(\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      ),\n    );\n  }\n\n  pushClassPrivateMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassPrivateMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n  ): void {\n    const node = this.parseMethod(\n      method,\n      isGenerator,\n      isAsync,\n      /* isConstructor */ false,\n      false,\n      \"ClassPrivateMethod\",\n      true,\n    );\n    classBody.body.push(node);\n\n    const kind =\n      node.kind === \"get\"\n        ? node.static\n          ? CLASS_ELEMENT_STATIC_GETTER\n          : CLASS_ELEMENT_INSTANCE_GETTER\n        : node.kind === \"set\"\n        ? node.static\n          ? CLASS_ELEMENT_STATIC_SETTER\n          : CLASS_ELEMENT_INSTANCE_SETTER\n        : CLASS_ELEMENT_OTHER;\n    this.declareClassPrivateMethodInScope(node, kind);\n  }\n\n  declareClassPrivateMethodInScope(\n    node: Undone<\n      N.ClassPrivateMethod | N.EstreeMethodDefinition | N.TSDeclareMethod\n    >,\n    kind: number,\n  ) {\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key),\n      kind,\n      node.key.loc.start,\n    );\n  }\n\n  // Overridden in typescript.js\n  parsePostMemberNameModifiers(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    methodOrProp: Undone<N.ClassMethod | N.ClassProperty>,\n  ): void {}\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassPrivateProperty(\n    this: Parser,\n    node: Undone<N.ClassPrivateProperty>,\n  ): N.ClassPrivateProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassProperty(this: Parser, node: N.ClassProperty): N.ClassProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseClassAccessorProperty(\n    this: Parser,\n    node: N.ClassAccessorProperty,\n  ): N.ClassAccessorProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassAccessorProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-Initializer\n  parseInitializer(\n    this: Parser,\n    node: Undone<\n      N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty\n    >,\n  ): void {\n    this.scope.enter(SCOPE_CLASS | SCOPE_SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(PARAM);\n    node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n\n  parseClassId(\n    node: Undone<N.Class>,\n    isStatement: boolean,\n    optionalId?: boolean | null,\n    bindingType: BindingTypes = BIND_CLASS,\n  ): void {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.declareNameFromIdentifier(node.id, bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        throw this.raise(Errors.MissingClassName, { at: this.state.startLoc });\n      }\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassHeritage\n  parseClassSuper(this: Parser, node: Undone<N.Class>): void {\n    node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  // Parses module export declaration.\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n\n  parseExport(\n    this: Parser,\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    decorators: N.Decorator[] | null,\n  ): N.AnyExport {\n    const hasDefault = this.maybeParseExportDefaultSpecifier(\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n    const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n    const hasStar =\n      parseAfterDefault &&\n      this.eatExportStar(\n        // @ts-expect-error todo(flow->ts)\n        node,\n      );\n    const hasNamespace =\n      hasStar &&\n      this.maybeParseExportNamespaceSpecifier(\n        // @ts-expect-error todo(flow->ts)\n        node,\n      );\n    const parseAfterNamespace =\n      parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\n      }\n      this.parseExportFrom(node as Undone<N.ExportNamedDeclaration>, true);\n\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n\n    if (\n      (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) ||\n      (hasNamespace && parseAfterNamespace && !hasSpecifiers)\n    ) {\n      throw this.unexpected(null, tt.braceL);\n    }\n\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\n      }\n      this.parseExportFrom(\n        node as Undone<N.ExportNamedDeclaration>,\n        isFromRequired,\n      );\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(\n        node as Undone<N.ExportNamedDeclaration>,\n      );\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n      this.checkExport(node2, true, false, !!node2.source);\n      if (node2.declaration?.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, node2.declaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\n      }\n      return this.finishNode(node2, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(tt._default)) {\n      const node2 = node as Undone<N.ExportDefaultDeclaration>;\n      // export default ...\n      const decl = this.parseExportDefaultExpression();\n      node2.declaration = decl;\n\n      if (decl.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, decl as N.ClassDeclaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, { at: node });\n      }\n\n      this.checkExport(node2, true, true);\n\n      return this.finishNode(node2, \"ExportDefaultDeclaration\");\n    }\n\n    throw this.unexpected(null, tt.braceL);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  eatExportStar(node: N.Node): boolean {\n    return this.eat(tt.star);\n  }\n\n  maybeParseExportDefaultSpecifier(node: N.Node): boolean {\n    if (this.isExportDefaultSpecifier()) {\n      // export defaultObj ...\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode();\n      specifier.exported = this.parseIdentifier(true);\n      node.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(node: N.Node): boolean {\n    if (this.isContextual(tt._as)) {\n      if (!node.specifiers) node.specifiers = [];\n\n      const specifier = this.startNodeAt(this.state.lastTokStartLoc);\n\n      this.next();\n\n      specifier.exported = this.parseModuleExportName();\n      node.specifiers.push(\n        this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(node: N.Node): boolean {\n    if (this.match(tt.braceL)) {\n      if (!node.specifiers) node.specifiers = [];\n      const isTypeExport = node.exportKind === \"type\";\n      node.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n\n      node.source = null;\n      node.declaration = null;\n      if (this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      }\n\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportDeclaration(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration>,\n  ): boolean {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      if (this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      }\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n\n  isAsyncFunction(): boolean {\n    if (!this.isContextual(tt._async)) return false;\n    const next = this.nextTokenStart();\n    return (\n      !lineBreak.test(this.input.slice(this.state.pos, next)) &&\n      this.isUnparsedContextual(next, \"function\")\n    );\n  }\n\n  parseExportDefaultExpression(this: Parser): N.Expression | N.Declaration {\n    const expr = this.startNode();\n\n    if (this.match(tt._function)) {\n      this.next();\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId,\n      );\n    } else if (this.isAsyncFunction()) {\n      this.next(); // eat 'async'\n      this.next(); // eat 'function'\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration |\n          ParseFunctionFlag.NullableId |\n          ParseFunctionFlag.Async,\n      );\n    }\n\n    if (this.match(tt._class)) {\n      return this.parseClass(expr as Undone<N.ClassExpression>, true, true);\n    }\n\n    if (this.match(tt.at)) {\n      if (\n        this.hasPlugin(\"decorators\") &&\n        this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")\n      ) {\n        this.raise(Errors.DecoratorBeforeExport, { at: this.state.startLoc });\n      }\n      return this.parseClass(\n        this.maybeTakeDecorators(\n          this.parseDecorators(false),\n          this.startNode<N.ClassDeclaration>(),\n        ),\n        true,\n        true,\n      );\n    }\n\n    if (this.match(tt._const) || this.match(tt._var) || this.isLet()) {\n      throw this.raise(Errors.UnsupportedDefaultExport, {\n        at: this.state.startLoc,\n      });\n    }\n\n    const res = this.parseMaybeAssignAllowIn();\n    this.semicolon();\n    return res;\n  }\n\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n  parseExportDeclaration(\n    this: Parser,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    node: Undone<N.ExportNamedDeclaration>,\n  ): N.Declaration | undefined | null {\n    if (this.match(tt._class)) {\n      const node = this.parseClass(\n        this.startNode<N.ClassDeclaration>(),\n        true,\n        false,\n      );\n      return node;\n    }\n    return this.parseStatementListItem() as N.Declaration;\n  }\n\n  isExportDefaultSpecifier(): boolean {\n    const { type } = this.state;\n    if (tokenIsIdentifier(type)) {\n      if ((type === tt._async && !this.state.containsEsc) || type === tt._let) {\n        return false;\n      }\n      if (\n        (type === tt._type || type === tt._interface) &&\n        !this.state.containsEsc\n      ) {\n        const { type: nextType } = this.lookahead();\n        // If we see any variable name other than `from` after `type` keyword,\n        // we consider it as flow/typescript type exports\n        // note that this approach may fail on some pedantic cases\n        // export type from = number\n        if (\n          (tokenIsIdentifier(nextType) && nextType !== tt._from) ||\n          nextType === tt.braceL\n        ) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(tt._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n    if (\n      this.input.charCodeAt(next) === charCodes.comma ||\n      (tokenIsIdentifier(this.state.type) && hasFrom)\n    ) {\n      return true;\n    }\n    // lookahead again when `export default from` is seen\n    if (this.match(tt._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(\n        this.nextTokenStartSince(next + 4),\n      );\n      return (\n        nextAfterFrom === charCodes.quotationMark ||\n        nextAfterFrom === charCodes.apostrophe\n      );\n    }\n    return false;\n  }\n\n  parseExportFrom(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration>,\n    expect?: boolean,\n  ): void {\n    if (this.eatContextual(tt._from)) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      const assertions = this.maybeParseImportAssertions();\n      if (assertions) {\n        node.assertions = assertions;\n        this.checkJSONModuleImport(node);\n      }\n    } else if (expect) {\n      this.unexpected();\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration(): boolean {\n    const { type } = this.state;\n    if (type === tt.at) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\")) {\n          throw this.raise(Errors.DecoratorBeforeExport, {\n            at: this.state.startLoc,\n          });\n        }\n\n        return true;\n      }\n    }\n\n    return (\n      type === tt._var ||\n      type === tt._const ||\n      type === tt._function ||\n      type === tt._class ||\n      this.isLet() ||\n      this.isAsyncFunction()\n    );\n  }\n\n  checkExport(\n    node: Undone<N.ExportNamedDeclaration | N.ExportDefaultDeclaration>,\n    checkNames?: boolean,\n    isDefault?: boolean,\n    isFrom?: boolean,\n  ): void {\n    if (checkNames) {\n      // Check for duplicate exports\n      if (isDefault) {\n        // Default exports\n        this.checkDuplicateExports(node, \"default\");\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          const declaration = (node as any as N.ExportDefaultDeclaration)\n            .declaration;\n          if (\n            declaration.type === \"Identifier\" &&\n            declaration.name === \"from\" &&\n            declaration.end - declaration.start === 4 && // does not contain escape\n            !declaration.extra?.parenthesized\n          ) {\n            this.raise(Errors.ExportDefaultFromAsIdentifier, {\n              at: declaration,\n            });\n          }\n        }\n        // @ts-expect-error node.specifiers may not exist\n      } else if (node.specifiers && node.specifiers.length) {\n        // Named exports\n        // @ts-expect-error node.specifiers may not exist\n        for (const specifier of node.specifiers) {\n          const { exported } = specifier;\n          const exportName =\n            exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportName);\n          if (!isFrom && specifier.local) {\n            const { local } = specifier;\n            if (local.type !== \"Identifier\") {\n              this.raise(Errors.ExportBindingIsString, {\n                at: specifier,\n                localName: local.value,\n                exportName,\n              });\n            } else {\n              // check for keywords used as local names\n              this.checkReservedWord(local.name, local.loc.start, true, false);\n              // check if export is defined\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if (node.declaration) {\n        // Exported declarations\n        if (\n          node.declaration.type === \"FunctionDeclaration\" ||\n          node.declaration.type === \"ClassDeclaration\"\n        ) {\n          const id = node.declaration.id;\n          if (!id) throw new Error(\"Assertion failure\");\n\n          this.checkDuplicateExports(node, id.name);\n        } else if (node.declaration.type === \"VariableDeclaration\") {\n          for (const declaration of node.declaration.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n  }\n\n  checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      // @ts-expect-error migrate to Babel types\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(\n    node: Undone<\n      | N.Identifier\n      | N.StringLiteral\n      | N.ExportNamedDeclaration\n      | N.ExportSpecifier\n      | N.ExportDefaultSpecifier\n    >,\n    exportName: string,\n  ): void {\n    if (this.exportedIdentifiers.has(exportName)) {\n      if (exportName === \"default\") {\n        this.raise(Errors.DuplicateDefaultExport, { at: node });\n      } else {\n        this.raise(Errors.DuplicateExport, { at: node, exportName });\n      }\n    }\n    this.exportedIdentifiers.add(exportName);\n  }\n\n  // Parses a comma-separated list of module exports.\n\n  parseExportSpecifiers(isInTypeExport: boolean): Array<N.ExportSpecifier> {\n    const nodes = [];\n    let first = true;\n\n    // export { x, y as z } [from '...']\n    this.expect(tt.braceL);\n\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      const isString = this.match(tt.string);\n      const node = this.startNode();\n      node.local = this.parseModuleExportName();\n      nodes.push(\n        this.parseExportSpecifier(\n          node,\n          isString,\n          isInTypeExport,\n          isMaybeTypeOnly,\n        ),\n      );\n    }\n\n    return nodes;\n  }\n\n  parseExportSpecifier(\n    node: any,\n    isString: boolean,\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    isInTypeExport: boolean,\n    isMaybeTypeOnly: boolean,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): N.ExportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      node.exported = this.parseModuleExportName();\n    } else if (isString) {\n      node.exported = cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = cloneIdentifier(node.local);\n    }\n    return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleExportName\n  parseModuleExportName(): N.StringLiteral | N.Identifier {\n    if (this.match(tt.string)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = result.value.match(loneSurrogate);\n      if (surrogate) {\n        this.raise(Errors.ModuleExportNameHasLoneSurrogate, {\n          at: result,\n          surrogateCharCode: surrogate[0].charCodeAt(0),\n        });\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n\n  isJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ): boolean {\n    if (node.assertions != null) {\n      return node.assertions.some(({ key, value }) => {\n        return (\n          value.value === \"json\" &&\n          (key.type === \"Identifier\"\n            ? key.name === \"type\"\n            : key.value === \"type\")\n        );\n      });\n    }\n    return false;\n  }\n\n  checkImportReflection(node: Undone<N.ImportDeclaration>) {\n    if (node.module) {\n      if (\n        node.specifiers.length !== 1 ||\n        node.specifiers[0].type !== \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(Errors.ImportReflectionNotBinding, {\n          at: node.specifiers[0].loc.start,\n        });\n      }\n      if (node.assertions?.length > 0) {\n        this.raise(Errors.ImportReflectionHasAssertion, {\n          at: node.specifiers[0].loc.start,\n        });\n      }\n    }\n  }\n\n  checkJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ) {\n    // @ts-expect-error Fixme: node.type must be undefined because they are undone\n    if (this.isJSONModuleImport(node) && node.type !== \"ExportAllDeclaration\") {\n      // @ts-expect-error specifiers may not index node\n      const { specifiers } = node;\n      if (specifiers != null) {\n        // @ts-expect-error refine specifier types\n        const nonDefaultNamedSpecifier = specifiers.find(specifier => {\n          let imported;\n          if (specifier.type === \"ExportSpecifier\") {\n            imported = specifier.local;\n          } else if (specifier.type === \"ImportSpecifier\") {\n            imported = specifier.imported;\n          }\n          if (imported !== undefined) {\n            return imported.type === \"Identifier\"\n              ? imported.name !== \"default\"\n              : imported.value !== \"default\";\n          }\n        });\n        if (nonDefaultNamedSpecifier !== undefined) {\n          this.raise(Errors.ImportJSONBindingNotDefault, {\n            at: nonDefaultNamedSpecifier.loc.start,\n          });\n        }\n      }\n    }\n  }\n\n  parseMaybeImportReflection(node: Undone<N.ImportDeclaration>) {\n    let isImportReflection = false;\n    if (this.isContextual(tt._module)) {\n      const lookahead = this.lookahead();\n      const nextType = lookahead.type;\n      if (tokenIsIdentifier(nextType)) {\n        if (nextType !== tt._from) {\n          // import module x\n          isImportReflection = true;\n        } else {\n          const nextNextTokenFirstChar = this.input.charCodeAt(\n            this.nextTokenStartSince(lookahead.end),\n          );\n          if (nextNextTokenFirstChar === charCodes.lowercaseF) {\n            // import module from from ...\n            isImportReflection = true;\n          }\n        }\n      } else if (nextType !== tt.comma) {\n        // import module { x } ...\n        // import module \"foo\"\n        // They are invalid, we will continue parsing and throw\n        // a recoverable error later\n        isImportReflection = true;\n      }\n    }\n    if (isImportReflection) {\n      this.expectPlugin(\"importReflection\");\n      this.next(); // eat tt._module;\n      node.module = true;\n    } else if (this.hasPlugin(\"importReflection\")) {\n      node.module = false;\n    }\n  }\n\n  // Parses import declaration.\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n  parseImport(this: Parser, node: Undone<N.ImportDeclaration>): N.AnyImport {\n    // import '...'\n    node.specifiers = [];\n    if (!this.match(tt.string)) {\n      this.parseMaybeImportReflection(node);\n      // check if we have a default import like\n      // import React from \"react\";\n      const hasDefault = this.maybeParseDefaultImportSpecifier(node);\n      /* we are checking if we do not have a default import, then it is obvious that we need named imports\n       * import { get } from \"axios\";\n       * but if we do have a default import\n       * we need to check if we have a comma after that and\n       * that is where this `|| this.eat` condition comes into play\n       */\n      const parseNext = !hasDefault || this.eat(tt.comma);\n      // if we do have to parse the next set of specifiers, we first check for star imports\n      // import React, * from \"react\";\n      const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n      // now we check if we need to parse the next imports\n      // but only if they are not importing * (everything)\n      if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n      this.expectContextual(tt._from);\n    }\n    node.source = this.parseImportSource();\n    // https://github.com/tc39/proposal-import-assertions\n    // parse module import assertions if the next token is `assert` or ignore\n    // and finish the ImportDeclaration node.\n    const assertions = this.maybeParseImportAssertions();\n    if (assertions) {\n      node.assertions = assertions;\n    } else if (!process.env.BABEL_8_BREAKING) {\n      const attributes = this.maybeParseModuleAttributes();\n      if (attributes) {\n        // @ts-expect-error attributes have been deprecated\n        node.attributes = attributes;\n      }\n    }\n    this.checkImportReflection(node);\n    this.checkJSONModuleImport(node);\n\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource(this: Parser): N.StringLiteral {\n    if (!this.match(tt.string)) this.unexpected();\n    return this.parseExprAtom() as N.StringLiteral;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  shouldParseDefaultImport(node: Undone<N.ImportDeclaration>): boolean {\n    return tokenIsIdentifier(this.state.type);\n  }\n\n  parseImportSpecifierLocal<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    node: Undone<N.ImportDeclaration>,\n    specifier: Undone<T>,\n    type: T[\"type\"],\n  ): void {\n    specifier.local = this.parseIdentifier();\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\n  }\n\n  finishImportSpecifier<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(specifier: Undone<T>, type: T[\"type\"], bindingType = BIND_LEXICAL) {\n    this.checkLVal(specifier.local, {\n      // @ts-expect-error refine types\n      in: specifier,\n      binding: bindingType,\n    });\n    return this.finishNode(specifier, type);\n  }\n\n  /**\n   * parse assert entries\n   *\n   * @see {@link https://tc39.es/proposal-import-assertions/#prod-AssertEntries AssertEntries}\n   */\n  parseAssertEntries(): N.ImportAttribute[] {\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(tt.braceR)) {\n        break;\n      }\n\n      const node = this.startNode<N.ImportAttribute>();\n\n      // parse AssertionKey : IdentifierName, StringLiteral\n      const keyName = this.state.value;\n      // check if we already have an entry for an attribute\n      // if a duplicate entry is found, throw an error\n      // for now this logic will come into play only when someone declares `type` twice\n      if (attrNames.has(keyName)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, {\n          at: this.state.startLoc,\n          key: keyName,\n        });\n      }\n      attrNames.add(keyName);\n      if (this.match(tt.string)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n      this.expect(tt.colon);\n\n      if (!this.match(tt.string)) {\n        throw this.raise(Errors.ModuleAttributeInvalidValue, {\n          at: this.state.startLoc,\n        });\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  /**\n   * parse module attributes\n   * @deprecated It will be removed in Babel 8\n   */\n  maybeParseModuleAttributes() {\n    if (this.match(tt._with) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"moduleAttributes\");\n      this.next();\n    } else {\n      if (this.hasPlugin(\"moduleAttributes\")) return [];\n      return null;\n    }\n    const attrs = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(Errors.ModuleAttributeDifferentFromType, {\n          at: node.key,\n        });\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, {\n          at: node.key,\n          key: node.key.name,\n        });\n      }\n      attributes.add(node.key.name);\n      this.expect(tt.colon);\n      if (!this.match(tt.string)) {\n        throw this.raise(Errors.ModuleAttributeInvalidValue, {\n          at: this.state.startLoc,\n        });\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      this.finishNode(node, \"ImportAttribute\");\n      attrs.push(node);\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAssertions() {\n    // [no LineTerminator here] AssertClause\n    if (this.isContextual(tt._assert) && !this.hasPrecedingLineBreak()) {\n      this.expectPlugin(\"importAssertions\");\n      this.next(); // eat `assert`\n    } else {\n      if (this.hasPlugin(\"importAssertions\")) return [];\n      return null;\n    }\n    // https://tc39.es/proposal-import-assertions/#prod-AssertClause\n    this.eat(tt.braceL);\n    const attrs = this.parseAssertEntries();\n    this.eat(tt.braceR);\n\n    return attrs;\n  }\n\n  maybeParseDefaultImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\n    if (this.shouldParseDefaultImport(node)) {\n      // import defaultObj, { x, y as z } from '...'\n      this.parseImportSpecifierLocal(\n        node,\n        this.startNode<N.ImportDefaultSpecifier>(),\n        \"ImportDefaultSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\n    if (this.match(tt.star)) {\n      const specifier = this.startNode<N.ImportNamespaceSpecifier>();\n      this.next();\n      this.expectContextual(tt._as);\n\n      this.parseImportSpecifierLocal(\n        node,\n        specifier,\n        \"ImportNamespaceSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node: Undone<N.ImportDeclaration>) {\n    let first = true;\n    this.expect(tt.braceL);\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        // Detect an attempt to deep destructure\n        if (this.eat(tt.colon)) {\n          throw this.raise(Errors.DestructureNamedImport, {\n            at: this.state.startLoc,\n          });\n        }\n\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      const specifier = this.startNode<N.ImportSpecifier>();\n      const importedIsString = this.match(tt.string);\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      specifier.imported = this.parseModuleExportName();\n      const importSpecifier = this.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        node.importKind === \"type\" || node.importKind === \"typeof\",\n        isMaybeTypeOnly,\n        undefined,\n      );\n      node.specifiers.push(importSpecifier);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\n  parseImportSpecifier(\n    specifier: Undone<N.ImportSpecifier>,\n    importedIsString: boolean,\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript and Flow parser */\n    isInTypeOnlyImport: boolean,\n    isMaybeTypeOnly: boolean,\n    bindingType: BindingTypes | undefined,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): N.ImportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const { imported } = specifier;\n      if (importedIsString) {\n        throw this.raise(Errors.ImportBindingIsString, {\n          at: specifier,\n          importName: (imported as N.StringLiteral).value,\n        });\n      }\n      this.checkReservedWord(\n        (imported as N.Identifier).name,\n        specifier.loc.start,\n        true,\n        true,\n      );\n      if (!specifier.local) {\n        specifier.local = cloneIdentifier(imported);\n      }\n    }\n    return this.finishImportSpecifier(\n      specifier,\n      \"ImportSpecifier\",\n      bindingType,\n    );\n  }\n\n  // This is used in flow and typescript plugin\n  // Determine whether a parameter is a this param\n  isThisParam(\n    param: N.Pattern | N.Identifier | N.TSParameterProperty,\n  ): boolean {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n}\n","import type { Options } from \"../options\";\nimport type * as N from \"../types\";\nimport type { PluginList } from \"../plugin-utils\";\nimport { getOptions } from \"../options\";\nimport StatementParser from \"./statement\";\nimport ScopeHandler from \"../util/scope\";\n\nexport type PluginsMap = Map<\n  string,\n  {\n    [x: string]: any;\n  }\n>;\n\nexport default class Parser extends StatementParser {\n  // Forward-declaration so typescript plugin can override jsx plugin\n  // todo(flow->ts) - this probably can be removed\n  // abstract jsxParseOpeningElementAfterName(\n  //   node: N.JSXOpeningElement,\n  // ): N.JSXOpeningElement;\n\n  constructor(options: Options | undefined | null, input: string) {\n    options = getOptions(options);\n    super(options, input);\n\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap(this.options.plugins);\n    this.filename = options.sourceFilename;\n  }\n\n  // This can be overwritten, for example, by the TypeScript plugin.\n  getScopeHandler(): {\n    new (...args: any): ScopeHandler;\n  } {\n    return ScopeHandler;\n  }\n\n  parse(): N.File {\n    this.enterInitialScopes();\n    const file = this.startNode() as N.File;\n    const program = this.startNode() as N.Program;\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    return file;\n  }\n}\n\nfunction pluginsMap(plugins: PluginList): PluginsMap {\n  const pluginMap: PluginsMap = new Map();\n  for (const plugin of plugins) {\n    const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];\n    if (!pluginMap.has(name)) pluginMap.set(name, options || {});\n  }\n  return pluginMap;\n}\n","import { type Options } from \"./options\";\nimport {\n  hasPlugin,\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n  type PluginList,\n} from \"./plugin-utils\";\nimport type {\n  PluginConfig as ParserPlugin,\n  FlowPluginOptions,\n  RecordAndTuplePluginOptions,\n  PipelineOperatorPluginOptions,\n} from \"./typings\";\nimport Parser from \"./parser\";\n\nimport type { ExportedTokenType } from \"./tokenizer/types\";\nimport {\n  getExportedToken,\n  tt as internalTokenTypes,\n  type InternalTokenTypes,\n} from \"./tokenizer/types\";\nimport \"./tokenizer/context\";\n\nimport type { Expression, File } from \"./types\";\n\nexport function parse(input: string, options?: Options): File {\n  if (options?.sourceType === \"unambiguous\") {\n    options = {\n      ...options,\n    };\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        // Top level await introduces code which can be both a valid script and\n        // a valid module, but which produces different ASTs:\n        //    await\n        //    0\n        // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch {}\n      } else {\n        // This is both a valid module and a valid script, but\n        // we parse it as a script by default\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\n\nexport function parseExpression(input: string, options?: Options): Expression {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression();\n}\n\nfunction generateExportedTokenTypes(\n  internalTokenTypes: InternalTokenTypes,\n): Record<string, ExportedTokenType> {\n  const tokenTypes: Record<string, ExportedTokenType> = {};\n  for (const typeName of Object.keys(\n    internalTokenTypes,\n  ) as (keyof InternalTokenTypes)[]) {\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n  }\n  return tokenTypes;\n}\n\nexport const tokTypes = generateExportedTokenTypes(internalTokenTypes);\n\nfunction getParser(options: Options | undefined | null, input: string): Parser {\n  let cls = Parser;\n  if (options?.plugins) {\n    validatePlugins(options.plugins);\n    cls = getParserClass(options.plugins);\n  }\n\n  return new cls(options, input);\n}\n\nconst parserClassCache: { [key: string]: { new (...args: any): Parser } } = {};\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(pluginsFromOptions: PluginList): {\n  new (...args: any): Parser;\n} {\n  const pluginList = mixinPluginNames.filter(name =>\n    hasPlugin(pluginsFromOptions, name),\n  );\n\n  const key = pluginList.join(\"/\");\n  let cls = parserClassCache[key];\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      // @ts-expect-error todo(flow->ts)\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache[key] = cls;\n  }\n  return cls;\n}\n\nexport type {\n  FlowPluginOptions,\n  ParserPlugin,\n  PipelineOperatorPluginOptions,\n  RecordAndTuplePluginOptions,\n};\nexport type ParserOptions = Partial<Options>;\n"],"names":["Position","constructor","line","col","index","column","SourceLocation","start","end","filename","identifierName","createPositionWithColumnOffset","position","columnOffset","ParseErrorCode","reflect","keys","last","length","get","reduce","object","key","set","value","item","i","instantiate","properties","descriptors","Object","map","filter","descriptor","enumerable","split","instance","defineProperty","configurable","assign","ImportMetaOutsideModule","message","code","SourceTypeModuleError","ImportOutsideModule","NodeDescriptions","ArrayPattern","AssignmentExpression","AssignmentPattern","ArrowFunctionExpression","ConditionalExpression","CatchClause","ForOfStatement","ForInStatement","ForStatement","FormalParameters","Identifier","ImportSpecifier","ImportDefaultSpecifier","ImportNamespaceSpecifier","ObjectPattern","ParenthesizedExpression","RestElement","UpdateExpression","true","false","VariableDeclarator","YieldExpression","toNodeDescription","type","prefix","String","AccessorIsGenerator","kind","ArgumentsInClass","AsyncFunctionInSingleStatementContext","AwaitBindingIdentifier","AwaitBindingIdentifierInStaticBlock","AwaitExpressionFormalParameter","AwaitNotInAsyncContext","AwaitNotInAsyncFunction","BadGetterArity","BadSetterArity","BadSetterRestParameter","ConstructorClassField","ConstructorClassPrivateField","ConstructorIsAccessor","ConstructorIsAsync","ConstructorIsGenerator","DeclarationMissingInitializer","DecoratorArgumentsOutsideParentheses","DecoratorBeforeExport","DecoratorConstructor","DecoratorExportClass","DecoratorSemicolon","DecoratorStaticBlock","DeletePrivateField","DestructureNamedImport","DuplicateConstructor","DuplicateDefaultExport","DuplicateExport","exportName","DuplicateProto","DuplicateRegExpFlags","ElementAfterRest","EscapedCharNotAnIdentifier","ExportBindingIsString","localName","ExportDefaultFromAsIdentifier","ForInOfLoopInitializer","ForInUsing","ForOfAsync","ForOfLet","GeneratorInSingleStatementContext","IllegalBreakContinue","IllegalLanguageModeDirective","IllegalReturn","ImportBindingIsString","importName","ImportCallArgumentTrailingComma","ImportCallArity","maxArgumentCount","ImportCallNotNewExpression","ImportCallSpreadArgument","ImportJSONBindingNotDefault","ImportReflectionHasAssertion","ImportReflectionNotBinding","IncompatibleRegExpUVFlags","InvalidBigIntLiteral","InvalidCodePoint","InvalidCoverInitializedName","InvalidDecimal","InvalidDigit","radix","InvalidEscapeSequence","InvalidEscapeSequenceTemplate","InvalidEscapedReservedWord","reservedWord","InvalidIdentifier","InvalidLhs","ancestor","InvalidLhsBinding","InvalidNumber","InvalidOrMissingExponent","InvalidOrUnexpectedToken","unexpected","InvalidParenthesizedAssignment","InvalidPrivateFieldResolution","InvalidPropertyBindingPattern","InvalidRecordProperty","InvalidRestAssignmentPattern","LabelRedeclaration","labelName","LetInLexicalBinding","LineTerminatorBeforeArrow","MalformedRegExpFlags","MissingClassName","MissingEqInAssignment","MissingSemicolon","MissingPlugin","missingPlugin","name","JSON","stringify","join","MissingOneOfPlugins","MissingUnicodeEscape","MixingCoalesceWithLogical","ModuleAttributeDifferentFromType","ModuleAttributeInvalidValue","ModuleAttributesWithDuplicateKeys","ModuleExportNameHasLoneSurrogate","surrogateCharCode","toString","ModuleExportUndefined","MultipleDefaultsInSwitch","NewlineAfterThrow","NoCatchOrFinally","NumberIdentifier","NumericSeparatorInEscapeSequence","ObsoleteAwaitStar","OptionalChainingNoNew","OptionalChainingNoTemplate","OverrideOnConstructor","ParamDupe","PatternHasAccessor","PatternHasMethod","PrivateInExpectedIn","PrivateNameRedeclaration","RecordExpressionBarIncorrectEndSyntaxType","RecordExpressionBarIncorrectStartSyntaxType","RecordExpressionHashIncorrectStartSyntaxType","RecordNoProto","RestTrailingComma","SloppyFunction","StaticPrototype","SuperNotAllowed","SuperPrivateField","TrailingDecorator","TupleExpressionBarIncorrectEndSyntaxType","TupleExpressionBarIncorrectStartSyntaxType","TupleExpressionHashIncorrectStartSyntaxType","UnexpectedArgumentPlaceholder","UnexpectedAwaitAfterPipelineBody","UnexpectedDigitAfterHash","UnexpectedImportExport","UnexpectedKeyword","keyword","UnexpectedLeadingDecorator","UnexpectedLexicalDeclaration","UnexpectedNewTarget","UnexpectedNumericSeparator","UnexpectedPrivateField","UnexpectedReservedWord","UnexpectedSuper","UnexpectedToken","expected","UnexpectedTokenUnaryExponentiation","UnexpectedUsingDeclaration","UnsupportedBind","UnsupportedDecoratorExport","UnsupportedDefaultExport","UnsupportedImport","UnsupportedMetaProperty","target","onlyValidPropertyName","UnsupportedParameterDecorator","UnsupportedPropertyDecorator","UnsupportedSuper","UnterminatedComment","UnterminatedRegExp","UnterminatedString","UnterminatedTemplate","UsingDeclarationHasBindingPattern","VarRedeclaration","YieldBindingIdentifier","YieldInParameter","ZeroDigitNumericSeparator","StrictDelete","StrictEvalArguments","referenceName","StrictEvalArgumentsBinding","bindingName","StrictFunction","StrictNumericEscape","StrictOctalLiteral","StrictWith","UnparenthesizedPipeBodyDescriptions","Set","PipeBodyIsTighter","PipeTopicRequiresHackPipes","PipeTopicUnbound","PipeTopicUnconfiguredToken","token","PipeTopicUnused","PipeUnparenthesizedBody","PipelineBodyNoArrow","PipelineBodySequenceExpression","PipelineHeadSequenceExpression","PipelineTopicUnused","PrimaryTopicNotAllowed","PrimaryTopicRequiresSmartPipeline","toParseErrorConstructor","toMessage","_excluded","loc","details","SyntaxError","clone","overrides","pos","ParseErrorEnum","argument","syntaxPlugin","Array","isArray","parseErrorTemplates","ParseErrorConstructors","reasonCode","template","rest","_excluded2","Errors","ModuleErrors","StandardErrors","StrictModeErrors","PipelineOperatorErrors","toUnenumerable","toESTreeLocation","node","superClass","ESTreeParserMixin","parse","file","options","tokens","parseRegExpLiteral","pattern","flags","regex","RegExp","e","estreeParseLiteral","parseBigIntLiteral","bigInt","BigInt","bigint","parseDecimalLiteral","decimal","parseLiteral","parseStringLiteral","parseNumericLiteral","parseNullLiteral","parseBooleanLiteral","directiveToStmt","directive","expression","raw","extra","expressionValue","stmt","rawValue","initFunction","isAsync","checkDeclaration","isObjectProperty","getObjectOrClassMethodParams","method","params","isValidDirective","parenthesized","parseBlockBody","allowDirectives","topLevel","afterBlockParse","directiveStatements","directives","d","body","concat","pushClassMethod","classBody","isGenerator","isConstructor","allowsDirectSuper","parseMethod","typeParameters","push","parsePrivateName","getPluginOption","convertPrivateNameToPrivateIdentifier","getPrivateNameSV","id","isPrivateName","parseFunctionBody","allowExpression","isMethod","allowDirectSuper","inClassScope","funcNode","startNode","computed","finishNode","parseClassProperty","args","propertyNode","parseClassPrivateProperty","parseObjectMethod","prop","isPattern","isAccessor","shorthand","parseObjectProperty","startLoc","refExpressionErrors","isValidLVal","isUnparenthesizedInAssign","binding","isAssignable","isBinding","toAssignable","isLHS","classScope","usePrivateName","toAssignableObjectExpressionProp","isLast","raise","at","finishCallExpression","unfinished","optional","callee","source","arguments","hasPlugin","attributes","toReferencedArguments","parseExport","decorators","exportStartLoc","state","lastTokStartLoc","exported","specifiers","declaration","resetStartLocation","parseSubscript","base","noCalls","optionalChainMember","substring","stop","chain","startNodeAtNode","hasPropertyAsPrivateName","isOptionalChain","isObjectMethod","finishNodeAt","endLoc","resetEndLocation","lastTokEndLoc","TokContext","preserveSpace","types","brace","j_oTag","j_cTag","j_expr","beforeExpr","startsExpr","isLoop","isAssign","postfix","ExportedTokenType","label","conf","rightAssociative","binop","updateContext","keywords","Map","createKeyword","createToken","createBinop","tokenTypeCounter","tokenTypes","tokenLabels","tokenBinops","tokenBeforeExprs","tokenStartsExprs","tokenPrefixes","createKeywordLike","tt","bracketL","bracketHashL","bracketBarL","bracketR","bracketBarR","braceL","braceBarL","braceHashL","braceR","braceBarR","parenL","parenR","comma","semi","colon","doubleColon","dot","question","questionDot","arrow","ellipsis","backQuote","dollarBraceL","templateTail","templateNonTail","hash","interpreterDirective","eq","slashAssign","xorAssign","moduloAssign","incDec","bang","tilde","doubleCaret","doubleAt","pipeline","nullishCoalescing","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","lt","gt","relational","bitShift","bitShiftL","bitShiftR","plusMin","modulo","star","slash","exponent","_in","_instanceof","_break","_case","_catch","_continue","_debugger","_default","_else","_finally","_function","_if","_return","_switch","_throw","_try","_var","_const","_with","_new","_this","_super","_class","_extends","_export","_import","_null","_true","_false","_typeof","_void","_delete","_do","_for","_while","_as","_assert","_async","_await","_from","_get","_let","_meta","_of","_sent","_set","_static","_using","_yield","_asserts","_checks","_exports","_global","_implements","_intrinsic","_infer","_is","_mixins","_proto","_require","_satisfies","_keyof","_readonly","_unique","_abstract","_declare","_enum","_module","_namespace","_interface","_type","_opaque","string","num","regexp","privateName","eof","jsxName","jsxText","jsxTagStart","jsxTagEnd","placeholder","tokenIsIdentifier","tokenKeywordOrIdentifierIsKeyword","tokenIsKeywordOrIdentifier","tokenIsLiteralPropertyName","tokenComesBeforeExpression","tokenCanStartExpression","tokenIsAssignment","tokenIsFlowInterfaceOrTypeOrOpaque","tokenIsLoop","tokenIsKeyword","tokenIsOperator","tokenIsPostfix","tokenIsPrefix","tokenIsTSTypeOperator","tokenIsTSDeclarationStart","tokenLabelName","tokenOperatorPrecedence","tokenIsRightAssociative","tokenIsTemplate","getExportedToken","context","pop","tc","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","isIdentifierStart","test","fromCharCode","isIdentifierChar","reservedWords","strict","strictBind","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword","isIteratorStart","current","next","next2","reservedWordLikeSet","canBeReservedWord","SCOPE_OTHER","SCOPE_PROGRAM","SCOPE_FUNCTION","SCOPE_ARROW","SCOPE_SIMPLE_CATCH","SCOPE_SUPER","SCOPE_DIRECT_SUPER","SCOPE_CLASS","SCOPE_STATIC_BLOCK","SCOPE_TS_MODULE","SCOPE_VAR","BIND_KIND_VALUE","BIND_KIND_TYPE","BIND_SCOPE_VAR","BIND_SCOPE_LEXICAL","BIND_SCOPE_FUNCTION","BIND_SCOPE_OUTSIDE","BIND_FLAGS_NONE","BIND_FLAGS_CLASS","BIND_FLAGS_TS_ENUM","BIND_FLAGS_TS_CONST_ENUM","BIND_FLAGS_TS_EXPORT_ONLY","BIND_FLAGS_FLOW_DECLARE_FN","BIND_FLAGS_TS_IMPORT","BIND_CLASS","BIND_LEXICAL","BIND_VAR","BIND_FUNCTION","BIND_TS_INTERFACE","BIND_TS_TYPE","BIND_TS_ENUM","BIND_TS_AMBIENT","BIND_NONE","BIND_OUTSIDE","BIND_TS_CONST_ENUM","BIND_TS_NAMESPACE","BIND_TS_TYPE_IMPORT","BIND_FLOW_DECLARE_FN","CLASS_ELEMENT_FLAG_STATIC","CLASS_ELEMENT_KIND_GETTER","CLASS_ELEMENT_KIND_SETTER","CLASS_ELEMENT_KIND_ACCESSOR","CLASS_ELEMENT_STATIC_GETTER","CLASS_ELEMENT_STATIC_SETTER","CLASS_ELEMENT_INSTANCE_GETTER","CLASS_ELEMENT_INSTANCE_SETTER","CLASS_ELEMENT_OTHER","Scope","var","lexical","functions","ScopeHandler","parser","scopeStack","undefinedExports","inTopLevel","currentScope","inFunction","currentVarScopeFlags","allowSuper","currentThisScopeFlags","inClass","inClassAndNotInNonArrowFunction","inStaticBlock","inNonArrowFunction","treatFunctionsAsVar","treatFunctionsAsVarInScope","createScope","enter","exit","scope","declareName","bindingType","checkRedeclarationInScope","add","maybeExportDefined","delete","isRedeclaredInScope","values","checkLocalExport","topLevelScope","FlowScope","declareFunctions","FlowScopeHandler","BaseParser","sawUnambiguousESM","ambiguousScriptDifferentAst","pluginConfig","plugins","pluginName","pluginOptions","actualOptions","plugin","setTrailingComments","comments","trailingComments","undefined","unshift","setLeadingComments","leadingComments","setInnerComments","innerComments","adjustInnerComments","elements","commentWS","lastElement","CommentsParser","addComment","comment","processComment","commentStack","commentStackLength","lastCommentWS","leadingNode","nodeStart","commentEnd","containingNode","finalizeComment","splice","trailingNode","commentStart","input","charCodeAt","finalizeRemainingComments","resetPreviousNodeTrailingComments","takeSurroundingComments","lineBreak","lineBreakG","isNewLine","skipWhiteSpace","skipWhiteSpaceInLine","skipWhiteSpaceToLineBreak","isWhitespace","State","curLine","lineStart","errors","potentialArrowAt","noArrowAt","noArrowParamsConversionAt","maybeInArrowParameters","inType","noAnonFunctionType","hasFlowComment","isAmbientContext","inAbstractClass","inDisallowConditionalTypesContext","topicContext","maxNumOfResolvableTopics","maxTopicIndex","soloAwait","inFSharpPipelineDirectBody","labels","lastTokStart","ct","canStartJSXElement","containsEsc","firstInvalidTemplateEscapePos","strictErrors","tokensLength","init","strictMode","sourceType","startLine","startColumn","curPosition","skipArrays","val","slice","isDigit","forbiddenNumericSeparatorSiblings","decBinOct","hex","isAllowedNumericSeparatorSibling","bin","ch","oct","dec","readStringContents","initialPos","initialLineStart","initialCurLine","out","firstInvalidLoc","chunkStart","unterminated","isStringEnd","res","readEscapedChar","str","containsInvalid","inTemplate","throwOnInvalid","readHexChar","readCodePoint","fromCodePoint","strictNumericEscape","startPos","match","octalStr","octal","parseInt","len","forceLen","n","readInt","invalidEscapeSequence","allowNumSeparator","bailOnError","forbiddenSiblings","isAllowedSibling","invalid","total","Infinity","prev","numericSeparatorInEscapeSequence","Number","isNaN","unexpectedNumericSeparator","invalidDigit","indexOf","invalidCodePoint","buildPosition","VALID_REGEX_FLAGS","Token","Tokenizer","isLookahead","errorHandlers_readInt","errorRecovery","errorBuilder","errorHandlers_readCodePoint","errorHandlers_readStringContents_string","recordStrictModeErrors","errorHandlers_readStringContents_template","pushToken","checkKeywordEscapes","nextToken","eat","createLookaheadState","curContext","lookahead","old","curr","nextTokenStart","nextTokenStartSince","lastIndex","lookaheadCharCode","codePointAtPos","cp","trail","setStrict","forEach","toParseError","clear","skipSpace","finishToken","getTokenFromCode","skipBlockComment","skipLineComment","startSkip","spaceStart","loop","attachComment","commentWhitespace","prevType","replaceToken","readToken_numberSign","readToken_interpreter","nextPos","expectPlugin","readWord1","finishOp","readToken_dot","readNumber","readToken_slash","readToken_mult_modulo","width","readToken_pipe_amp","readToken_caret","proposal","topicToken","lookaheadCh","codePointAt","readToken_atSign","readToken_plus_min","readToken_lt","readToken_gt","size","readToken_eq_excl","readToken_question","readTemplateToken","readRadixNumber","readString","readWord","readRegexp","escaped","content","mods","char","includes","isBigInt","replace","startsWithDot","isFloat","isDecimal","hasExponent","isOctal","hasLeadingZero","integer","underscorePos","parseFloat","quote","readTemplateContinuation","opening","firstCode","escStart","identifierCheck","esc","keywordTypes","raiseProperties","error","raiseOverwrite","expectOnePlugin","pluginNames","some","ClassScope","privateNames","loneAccessors","undefinedPrivateNames","ClassScopeHandler","stack","oldClassScope","from","declarePrivateName","elementType","redefined","accessor","oldStatic","newStatic","oldKind","newKind","kExpression","kMaybeArrowParameterDeclaration","kMaybeAsyncArrowParameterDeclaration","kParameterDeclaration","ExpressionScope","canBeArrowParameterDeclaration","isCertainlyParameterDeclaration","ArrowHeadParsingScope","declarationErrors","recordDeclarationError","ParsingErrorClass","clearDeclarationError","iterateErrors","iterator","ExpressionScopeHandler","recordParameterInitializerError","origin","recordArrowParameterBindingError","recordAsyncArrowParametersError","validateAsPattern","newParameterDeclarationScope","newArrowHeadScope","newAsyncArrowScope","newExpressionScope","PARAM","PARAM_YIELD","PARAM_AWAIT","PARAM_RETURN","PARAM_IN","ProductionParameterHandler","stacks","currentFlags","hasAwait","hasYield","hasReturn","hasIn","functionFlags","UtilParser","addExtra","isContextual","isUnparsedContextual","nameStart","nameEnd","nextCh","isLookaheadContextual","eatContextual","expectContextual","canInsertSemicolon","hasPrecedingLineBreak","hasFollowingLineBreak","isLineTerminator","semicolon","allowAsi","expect","tryParse","fn","oldState","abortSignal","failState","thrown","aborted","checkExpressionErrors","andThrow","shorthandAssignLoc","doubleProtoLoc","privateKeyLoc","optionalParametersLoc","hasErrors","isLiteralPropertyName","property","initializeScopes","oldLabels","oldExportedIdentifiers","exportedIdentifiers","oldInModule","oldScope","getScopeHandler","oldProdParam","prodParam","oldExpressionScope","expressionScope","enterInitialScopes","paramFlags","checkDestructuringPrivate","ExpressionErrors","Node","ranges","range","NodePrototype","prototype","__clone","newNode","clonePlaceholder","cloneIdentifier","cloned","create","expectedNode","cloneStringLiteral","NodeUtils","startNodeAt","resetStartLocationFromNode","locationNode","reservedTypes","FlowErrors","AmbiguousConditionalArrow","AmbiguousDeclareModuleKind","AssignReservedType","reservedType","DeclareClassElement","DeclareClassFieldInitializer","DuplicateDeclareModuleExports","EnumBooleanMemberNotInitialized","memberName","enumName","EnumDuplicateMemberName","EnumInconsistentMemberValues","EnumInvalidExplicitType","invalidEnumType","EnumInvalidExplicitTypeUnknownSupplied","EnumInvalidMemberInitializerPrimaryType","explicitType","EnumInvalidMemberInitializerSymbolType","EnumInvalidMemberInitializerUnknownType","EnumInvalidMemberName","suggestion","EnumNumberMemberNotInitialized","EnumStringMemberInconsistentlyInitailized","GetterMayNotHaveThisParam","ImportReflectionHasImportType","ImportTypeShorthandOnlyInPureImport","InexactInsideExact","InexactInsideNonObject","InexactVariance","InvalidNonTypeImportInDeclareModule","MissingTypeParamDefault","NestedDeclareModule","NestedFlowComment","PatternIsOptional","SetterMayNotHaveThisParam","SpreadVariance","ThisParamAnnotationRequired","ThisParamBannedInConstructor","ThisParamMayNotBeOptional","ThisParamMustBeFirst","ThisParamNoDefault","TypeBeforeInitializer","TypeCastInPattern","UnexpectedExplicitInexactInObject","UnexpectedReservedType","UnexpectedReservedUnderscore","UnexpectedSpaceBetweenModuloChecks","UnexpectedSpreadType","UnexpectedSubtractionOperand","UnexpectedTokenAfterTypeParameter","UnexpectedTypeParameterBeforeAsyncArrowFunction","UnsupportedDeclareExportKind","unsupportedExportKind","UnsupportedStatementInDeclareModule","UnterminatedFlowComment","isEsModuleType","bodyElement","hasTypeImportKind","importKind","isMaybeDefaultImport","exportSuggestions","const","let","interface","partition","list","list1","list2","FLOW_PRAGMA_REGEX","FlowParserMixin","flowPragma","shouldParseTypes","shouldParseEnums","matches","exec","Error","flowParseTypeInitialiser","tok","oldInType","flowParseType","flowParsePredicate","moduloLoc","parseExpression","flowParseTypeAndPredicateInitialiser","predicate","flowParseDeclareClass","flowParseInterfaceish","flowParseDeclareFunction","parseIdentifier","typeNode","typeContainer","flowParseTypeParameterDeclaration","tmp","flowParseFunctionTypeParams","this","returnType","typeAnnotation","flowParseDeclare","insideModule","flowParseDeclareVariable","flowParseDeclareModuleExports","flowParseDeclareModule","flowParseDeclareTypeAlias","flowParseDeclareOpaqueType","flowParseDeclareInterface","flowParseDeclareExportDeclaration","flowParseTypeAnnotatableIdentifier","parseExprAtom","bodyNode","parseImport","hasModuleExport","default","isLet","exportKind","flowParseTypeAnnotation","finished","flowParseTypeAlias","flowParseOpaqueType","isClass","flowParseRestrictedIdentifier","extends","implements","mixins","flowParseInterfaceExtends","flowParseObjectType","allowStatic","allowExact","allowSpread","allowProto","allowInexact","flowParseQualifiedTypeIdentifier","flowParseTypeParameterInstantiation","flowParseInterface","checkNotUnderscore","checkReservedType","liberal","right","declare","supertype","impltype","flowParseTypeParameter","requireDefault","nodeStartLoc","variance","flowParseVariance","ident","bound","defaultRequired","typeParameter","oldNoAnonFunctionType","flowParseTypeParameterInstantiationCallOrNew","flowParseTypeOrImplicitInstantiation","flowParseInterfaceType","flowParseObjectPropertyKey","flowParseObjectTypeIndexer","isStatic","static","flowParseObjectTypeInternalSlot","flowParseObjectTypeMethodish","flowParseFunctionTypeParam","flowParseObjectTypeCallProperty","valueNode","callProperties","indexers","internalSlots","endDelim","exact","inexact","protoStartLoc","inexactStartLoc","propOrInexact","flowParseObjectTypeProperty","flowObjectTypeSemicolon","isInexactToken","proto","flowCheckGetterSetterParams","paramCount","node2","qualification","flowParseGenericType","flowParseTypeofType","flowParsePrimaryType","flowParseTupleType","first","lh","isThis","reinterpretTypeAsFunctionTypeParam","flowIdentToTypeAnnotation","isGroupedType","parseLiteralAtNode","createIdentifier","flowParsePostfixType","seenOptionalIndexedAccess","objectType","indexType","flowParsePrefixType","flowParseAnonFunctionWithoutParens","param","flowParseIntersectionType","flowParseUnionType","allowPrimitiveOverride","typeCastToParameter","allowExpressionBody","forwardNoArrowParamsConversionAt","parseFunctionBodyAndFinish","parseStatementLike","flowParseEnumDeclaration","parseExpressionStatement","expr","shouldParseExportDeclaration","isExportDefaultSpecifier","parseExportDefaultExpression","parseConditional","setOptionalParametersError","originalNoArrowAt","consequent","failed","tryParseConditionalConsequent","valid","getArrowLikeExpressions","alternate","parseMaybeAssign","parseMaybeAssignAllowIn","disallowInvalid","arrows","finishArrowValidation","every","toAssignableList","trailingCommaLoc","checkParams","result","parseParenItem","typeCastNode","assertModuleNodeAllowed","decl","parseExportDeclaration","declarationNode","parseExportSpecifiers","parseExportFrom","eatExportStar","maybeParseExportNamespaceSpecifier","hasNamespace","parseClassId","isStatement","optionalId","parseClassMember","member","parseClassMemberFromModifier","isIterator","readIterator","fullWord","left","exprList","toReferencedList","isParenthesizedExpr","parseArrayLike","close","canBePattern","isTuple","isParenthesized","isClassMethod","isClassProperty","isNonstaticConstructor","isThisParam","pushClassPrivateMethod","parseClassSuper","superTypeParameters","implemented","checkGetterSetterParams","parsePropertyNamePrefixOperator","parseObjPropValue","parseAssignableListItemTypes","parseMaybeDefault","shouldParseDefaultImport","checkImportReflection","module","parseImportSpecifierLocal","specifier","local","finishImportSpecifier","maybeParseDefaultImportSpecifier","parseImportSpecifier","importedIsString","isInTypeOnlyImport","isMaybeTypeOnly","firstIdent","imported","specifierTypeKind","as_ident","specifierIsTypeImport","checkReservedWord","parseBindingAtom","parseFunctionParams","allowModifiers","parseVarId","parseAsyncArrowFromCallExpression","call","shouldParseAsyncArrow","afterLeftParse","jsx","currentContext","abort","arrowExpression","maybeUnwrapTypeCastExpression","async","parseArrow","shouldParseArrow","setArrowFunctionParameters","allowDuplicates","isArrowFunction","strictModeChanged","parseParenAndDistinguishExpression","canBeArrow","parseSubscripts","parseCallExpressionArguments","parseAsyncArrowWithTypeParameters","subscriptState","isLookaheadToken_lt","typeArguments","parseNewCallee","targs","parseArrowExpression","parseTopLevel","program","fileNode","skipFlowComment","hasFlowCommentCompletion","commentSkip","shiftToFirstNonWhiteSpace","ch2","ch3","flowEnumErrorBooleanMemberNotInitialized","flowEnumErrorInvalidMemberInitializer","enumContext","flowEnumErrorNumberMemberNotInitialized","flowEnumErrorStringMemberInconsistentlyInitailized","flowEnumMemberInit","endOfInit","literal","flowEnumMemberRaw","flowEnumCheckExplicitTypeMismatch","expectedType","flowEnumMembers","seenNames","members","booleanMembers","numberMembers","stringMembers","defaultedMembers","hasUnknownMembers","memberNode","toUpperCase","flowEnumStringMembers","initializedMembers","flowEnumParseExplicitType","flowEnumBody","nameLoc","empty","boolsLen","numsLen","strsLen","defaultedLen","afterNext","entities","__proto__","quot","amp","apos","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","copy","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","image","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","part","exist","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","sub","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","JsxErrors","AttributeIsEmpty","MissingClosingTagElement","openingTagName","MissingClosingTagFragment","UnexpectedSequenceExpression","HTMLEntity","UnsupportedJsxValue","UnterminatedJsxContent","UnwrappedAdjacentJSXElements","isFragment","getQualifiedJSXName","namespace","JSXParserMixin","jsxReadToken","jsxReadEntity","jsxReadNewLine","normalizeCRLF","jsxReadString","codePoint","count","desc","entity","XHTMLEntities","jsxReadWord","jsxParseIdentifier","jsxParseNamespacedName","jsxParseElementName","jsxParseAttributeValue","setContext","jsxParseExpressionContainer","jsxParseEmptyExpression","jsxParseSpreadChild","previousContext","jsxParseAttribute","jsxParseOpeningElementAt","jsxParseOpeningElementAfterName","selfClosing","jsxParseClosingElementAt","jsxParseElementAt","children","openingElement","closingElement","contents","openingFragment","closingFragment","jsxParseElement","newContext","TypeScriptScope","enums","constEnums","classes","exportOnlyBindings","TypeScriptScopeHandler","importsStack","hasImport","allowShadow","isConst","wasConst","getOwn","hasOwnProperty","nonNull","x","assert","TSErrors","AbstractMethodHasImplementation","methodName","AbstractPropertyHasInitializer","propertyName","AccesorCannotDeclareThisParameter","AccesorCannotHaveTypeParameters","AccessorCannotBeOptional","ClassMethodHasDeclare","ClassMethodHasReadonly","ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference","ConstructorHasTypeParameters","DeclareAccessor","DeclareClassFieldHasInitializer","DeclareFunctionHasImplementation","DuplicateAccessibilityModifier","modifier","DuplicateModifier","EmptyHeritageClauseType","EmptyTypeArguments","EmptyTypeParameters","ExpectedAmbientAfterExportDeclare","ImportAliasHasImportType","IncompatibleModifiers","modifiers","IndexSignatureHasAbstract","IndexSignatureHasAccessibility","IndexSignatureHasDeclare","IndexSignatureHasOverride","IndexSignatureHasStatic","InitializerNotAllowedInAmbientContext","InvalidModifierOnTypeMember","InvalidModifierOnTypeParameter","InvalidModifierOnTypeParameterPositions","InvalidModifiersOrder","orderedModifiers","InvalidPropertyAccessAfterInstantiationExpression","InvalidTupleMemberLabel","MissingInterfaceName","MixedLabeledAndUnlabeledElements","NonAbstractClassHasAbstractMethod","NonClassMethodPropertyHasAbstractModifer","OptionalTypeBeforeRequired","OverrideNotInSubClass","PrivateElementHasAbstract","PrivateElementHasAccessibility","ReadonlyForMethodSignature","ReservedArrowTypeParam","ReservedTypeAssertion","SetAccesorCannotHaveOptionalParameter","SetAccesorCannotHaveRestParameter","SetAccesorCannotHaveReturnType","SingleTypeParameterWithoutTrailingComma","typeParameterName","StaticBlockCannotHaveModifier","TypeAnnotationAfterAssign","TypeImportCannotSpecifyDefaultAndNamed","TypeModifierIsUsedInTypeExports","TypeModifierIsUsedInTypeImports","UnexpectedParameterModifier","UnexpectedReadonly","UnexpectedTypeAnnotation","UnexpectedTypeCastInParameter","UnsupportedImportTypeArgument","UnsupportedParameterPropertyKind","UnsupportedSignatureParameterKind","keywordTypeFromName","tsIsAccessModifier","tsIsVarianceAnnotations","TypeScriptParserMixin","tsIsIdentifier","tsTokenCanFollowModifier","tsNextTokenCanFollowModifier","tsParseModifier","allowedModifiers","stopOnStartOfClassStaticBlock","tsIsStartOfStaticBlocks","tsTryParse","bind","tsParseModifiers","modified","disallowedModifiers","errorTemplate","enforceOrder","before","after","incompatible","mod1","mod2","accessibility","tsIsListTerminator","tsParseList","parseElement","tsParseDelimitedList","refTrailingCommaPos","tsParseDelimitedListWorker","expectSuccess","trailingCommaPos","element","tsParseBracketedList","bracket","skipFirstToken","tsParseImportType","qualifier","tsParseEntityName","tsParseTypeArguments","allowReservedWords","tsParseTypeReference","typeName","tsParseThisTypePredicate","lhs","parameterName","tsParseTypeAnnotation","asserts","tsParseThisTypeNode","tsParseTypeQuery","exprName","tsParseInOutModifiers","tsParseNoneModifiers","tsParseTypeParameter","parseModifiers","tsParseTypeParameterName","constraint","tsEatThenParseType","tsTryParseTypeParameters","tsParseTypeParameters","tsFillSignature","returnToken","signature","returnTokenRequired","paramsKey","returnTypeKey","tsParseBindingListForSignature","tsParseTypeOrTypePredicateAnnotation","parseBindingList","tsParseTypeMemberSemicolon","tsParseSignatureMember","tsIsUnambiguouslyIndexSignature","tsTryParseIndexSignature","tsLookAhead","parameters","tsTryParseTypeAnnotation","tsParsePropertyOrMethodSignature","readonly","nodeAny","firstParameter","tsParseTypeMember","idx","parsePropertyName","tsParseTypeLiteral","tsParseObjectTypeMembers","tsIsStartOfMappedType","tsParseMappedTypeParameter","tsExpectThenParseType","tsParseMappedType","nameType","tsParseType","tsTryParseType","tsParseTupleType","elementTypes","tsParseTupleElementType","seenOptionalElement","labeledElements","elementNode","checkType","isLabeled","labeled","labeledNode","optionalTypeNode","restNode","tsParseParenthesizedType","tsParseFunctionOrConstructorType","abstract","tsInAllowConditionalTypesContext","tsParseLiteralTypeNode","tsParseTemplateLiteralType","parseTemplate","parseTemplateSubstitution","tsParseThisTypeOrThisTypePredicate","thisKeyword","tsParseNonArrayType","parseMaybeUnary","nodeType","tsParseArrayTypeOrHigher","tsParseTypeOperator","operator","tsParseTypeOperatorOrHigher","tsCheckTypeAnnotationForReadOnly","tsParseInferType","tsParseConstraintForInferType","tsInDisallowConditionalTypesContext","isTypeOperator","tsParseUnionOrIntersectionType","parseConstituentType","hasLeadingOperator","tsParseIntersectionTypeOrHigher","tsParseUnionTypeOrHigher","tsIsStartOfFunctionType","tsIsUnambiguouslyStartOfFunctionType","tsSkipParameterStart","previousErrorCount","parseObjectLike","tsInType","t","tsParseTypePredicateAsserts","thisTypePredicate","typePredicateVariable","tsParseTypePredicatePrefix","tsTryParseTypeOrTypePredicateAnnotation","eatColon","tsParseNonConditionalType","extendsType","trueType","falseType","isAbstractConstructorSignature","tsParseTypeAssertion","tsParseHeritageClause","originalStartLoc","delimitedList","tsParseInterfaceDeclaration","checkIdentifier","tsParseTypeAliasDeclaration","tsInNoContext","cb","oldContext","oldInDisallowConditionalTypesContext","tsNextThenParseType","tsDoThenParseType","tsParseEnumMember","initializer","tsParseEnumDeclaration","tsParseModuleBlock","parseBlockOrModuleBlockBody","tsParseModuleOrNamespaceDeclaration","nested","inner","tsParseAmbientExternalModuleDeclaration","global","tsParseImportEqualsDeclaration","isExport","moduleReference","tsParseModuleReference","tsIsExternalModuleReference","tsParseExternalModuleReference","f","tsTryParseAndCatch","tsTryParseDeclare","nany","starttype","tsInAmbientContext","parseFunctionStatement","parseClass","parseVarStatement","tsParseDeclaration","tsTryParseExportDeclaration","tsParseExpressionStatement","mod","tsCheckLineTerminator","tsParseAbstractDeclaration","tsTryParseGenericAsyncArrowFunction","oldMaybeInArrowParameters","tsParseTypeArgumentsInExpression","reScan_lt","tsIsDeclarationStart","parseAssignableListItem","override","elt","pp","parameter","isSimpleParameter","bodilessType","registerFunctionStatementId","tsCheckForInvalidTypeCasts","items","isInParens","nonNullExpression","isOptionalCall","missingParenErrorLoc","atPossibleAsyncArrow","asyncArrowFn","parseTaggedTemplateExpression","tokenType","parseExprOp","leftStartLoc","minPrec","isSatisfies","reScan_lt_gt","checkKeywords","checkDuplicateExports","ahead","importNode","isAbstractClass","cls","allowMissingInitializer","declarations","expressions","isPossiblyLiteralEnum","parseStatementContent","parseAccessModifier","tsHasSomeModifiers","callParseClassMemberWithIsStatic","parseClassStaticBlock","parseClassMemberWithIsStatic","hadSuperClass","parsePostMemberNameModifiers","methodOrProp","isDeclare","isIdentifier","parseClassPropertyAnnotation","definite","parseClassAccessorProperty","declareClassPrivateMethodInScope","typeCast","reportReservedArrowTypeParam","trailingComma","sawUnary","toAssignableParenthesizedExpression","checkToRestConversion","allowPattern","TSTypeCastExpression","TSParameterProperty","TSNonNullExpression","TSAsExpression","TSSatisfiesExpression","TSTypeAssertion","parseMaybeDecoratorArguments","checkCommaAfterRest","canHaveLeadingDecorator","getGetterSetterExpectedParamCount","baseCount","firstParam","hasContextParam","parseCatchClauseParam","oldIsAmbientContext","oldInAbstractClass","maybeTakeDecorators","hasBody","shouldParseAsAmbientContext","getExpression","parseExportSpecifier","isString","isInTypeExport","parseTypeOnlyImportExportSpecifier","isImport","isInTypeOnlyImportExport","leftOfAsKey","rightOfAsKey","leftOfAs","rightOfAs","hasTypeSpecifier","canParseAsKeyword","firstAs","secondAs","parseModuleExportName","kindKey","isUncomputedMemberExpressionChain","PlaceholderErrors","ClassNameIsRequired","UnexpectedSpace","PlaceholdersParserMixin","parsePlaceholder","assertNoSpace","finishPlaceholder","isFinished","chStartsBindingIdentifier","verifyBreakContinue","isBreak","parseStatementOrFunctionDeclaration","parseBlock","createNewLexicalScope","parseFunctionId","requireId","oldStrict","parseClassBody","startsWith","maybeParseExportDefaultSpecifier","checkExport","hasStarImport","maybeParseStarImportSpecifier","parseNamedImportSpecifiers","parseImportSource","V8IntrinsicMixin","parseV8Intrinsic","v8IntrinsicStartLoc","parseIdentifierName","identifier","expectedConfig","expectedName","expectedOptions","expectedKeys","expectedOptionsIsEmpty","p","option","find","PIPELINE_PROPOSALS","TOPIC_TOKENS","RECORD_AND_TUPLE_SYNTAX_TYPES","validatePlugins","decoratorsBeforeExport","allowCallParenthesized","proposalList","tupleSyntaxIsHash","syntaxType","tokenList","moduleAttributesVersionPluginOption","missingPlugins","mixinPlugins","estree","flow","typescript","v8intrinsic","placeholders","mixinPluginNames","defaultOptions","sourceFilename","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowImportExportEverywhere","allowSuperOutsideMethod","allowUndeclaredExports","createParenthesizedExpressions","getOptions","opts","unwrapParenthesizedExpression","LValParser","arg","toReferencedListDeep","parseSpread","parseRestBinding","closeCharCode","allowEmpty","elts","parseDecorator","parseBindingRestProperty","parseBindingProperty","ObjectProperty","checkLVal","in","checkClashes","allowingSloppyLetBinding","hasParenthesizedAncestor","validity","ParseErrorClass","isParenthesizedExpression","nextAncestor","child","allowLetBinding","declareNameFromIdentifier","ExpressionParser","checkProto","isRecord","protoRef","used","shouldExitDescending","disallowIn","disallowInAnd","parseExpressionBase","allowInAnd","parseMaybeAssignDisallowIn","resultError","parseYield","ownExpressionErrors","parseMaybeConditional","startIndex","parseExprOps","parseMaybeUnaryOrPrivate","op","prec","checkPipelineAtInfixOperator","logical","coalesce","parseExprOpRightExpr","finishedNode","nextOp","withTopicBindingContext","parseHackPipeBody","parseSmartPipelineBodyInStyle","parseExprOpBaseRightExpr","withSoloAwaitPermittingContext","parseFSharpPipelineBody","requiredParentheses","topicReferenceWasUsedInCurrentContext","checkExponentialAfterUnary","isAwait","isAwaitAllowed","parseAwait","update","isDelete","parseUpdate","isAmbiguousAwait","updateExpressionNode","parseExprSubscripts","maybeAsyncArrow","parseBind","parseCoverCallAndAsyncArrowHead","parseMember","parseNoCallExpr","tag","quasi","dynamicImport","allowPlaceholder","nodeForExtra","oldInFSharpPipelineDirectBody","addTrailingCommaExtraToNode","parseExprListItem","parseSuper","parseImportMetaProperty","parseDo","parseFunctionOrFunctionSent","parseDecorators","parseNewOrNewTarget","parseTopicReferenceThenEqualsSign","parseTopicReference","pipeProposal","parseModuleExpression","parseAsyncFunctionExpression","parseAsyncArrowUnaryFunction","topicTokenType","topicTokenValue","finishTopicReference","testTopicReferenceConfiguration","topicReferenceIsAllowedInCurrentContext","registerTopicReference","meta","parseMetaProperty","parseFunction","innerStartLoc","spreadStartLoc","optionalCommaStartLoc","spreadNodeStartLoc","innerEndLoc","arrowNode","wrapParenthesis","parenExpression","metaProp","parseNew","parseExprList","parseTemplateElement","isTagged","elemStart","elem","isTail","endOffset","elemEnd","cooked","tail","curElt","quasis","propHash","parsePropertyDefinition","maybeAsyncOrAccessorProp","keyName","finishedProp","generator","isExpression","hasStrictModeDirective","nonSimple","isSimpleParamList","formalParameters","reservedTest","delegating","delegate","childExpr","isSimpleReference","checkSmartPipeTopicBodyEarlyErrors","callback","outerContextTopicState","withSmartMixTopicForbiddingContext","outerContextSoloAwaitState","prodParamToSet","prodParamToClear","ret","revertScopes","parseProgram","loopLabel","switchLabel","ParseFunctionFlag","ParseStatementFlag","loneSurrogate","keywordRelationalOperator","babel7CompatTokens","hashEndPos","hashEndLoc","backquoteEnd","backquoteEndLoc","startToken","templateValue","templateElementEnd","templateElementEndLoc","endToken","StatementParser","interpreter","parseInterpreterDirective","finishedProgram","stmtToDirective","directiveLiteral","hasFollowingBindingAtom","endCh","chStartsBindingPattern","hasFollowingBindingIdentifier","startsUsingForOf","parseModuleItem","AllowImportExport","AllowDeclaration","AllowFunctionDeclaration","AllowLabeledFunction","parseStatementListItem","disallowLabeledFunction","parseStatement","StatementOnly","allowDeclaration","allowFunctionDeclaration","parseBreakContinueStatement","parseDebuggerStatement","parseDoWhileStatement","parseForStatement","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","nextTokenCharCode","isAsyncFunction","maybeName","parseLabeledStatement","decoratorsEnabledBeforeExport","maybeDecorators","classNode","exportNode","allowExport","paramsStartLoc","lab","parseHeaderExpression","awaitAt","parseFor","startsWithLet","startsWithUsing","isLetOrUsing","initNode","parseVar","isForIn","parseForIn","startsWithAsync","isForOf","isHangingDeclaration","Declaration","HangingDeclaration","Async","discriminant","cases","cur","sawDefault","isCase","simple","block","handler","clause","finalizer","statementStart","parsedNonDirective","await","isFor","Expression","hangingDeclaration","isDeclaration","NullableId","hadConstructor","publicMethod","privateMethod","publicProp","privateProp","accessorProp","publicMember","parseClassElementName","isPrivate","maybeQuestionTokenStartLoc","pushClassPrivateProperty","pushClassProperty","pushClassAccessorProperty","parseInitializer","hasDefault","parseAfterDefault","hasStar","parseAfterNamespace","isFromRequired","hasSpecifiers","maybeParseExportNamedSpecifiers","hasDeclaration","maybeParseExportDeclaration","isTypeExport","assertions","nextType","hasFrom","nextAfterFrom","maybeParseImportAssertions","checkJSONModuleImport","checkNames","isDefault","isFrom","nodes","surrogate","isJSONModuleImport","nonDefaultNamedSpecifier","parseMaybeImportReflection","isImportReflection","nextNextTokenFirstChar","parseNext","maybeParseModuleAttributes","parseAssertEntries","attrs","attrNames","importSpecifier","Parser","pluginsMap","pluginMap","getParser","ast","moduleError","generateExportedTokenTypes","internalTokenTypes","tokTypes","getParserClass","parserClassCache","pluginsFromOptions","pluginList"],"mappings":";;;;;;;;;;;;;;;;;AAOO,MAAMA,QAAQ,CAAC;AAKpBC,EAAAA,WAAW,CAACC,IAAY,EAAEC,GAAW,EAAEC,KAAa,EAAE;AAAA,IAAA,IAAA,CAJtDF,IAAI,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACJG,MAAM,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACND,KAAK,GAAA,KAAA,CAAA,CAAA;IAGH,IAAI,CAACF,IAAI,GAAGA,IAAI,CAAA;IAChB,IAAI,CAACG,MAAM,GAAGF,GAAG,CAAA;IACjB,IAAI,CAACC,KAAK,GAAGA,KAAK,CAAA;AACpB,GAAA;AACF,CAAA;AAEO,MAAME,cAAc,CAAC;AAM1BL,EAAAA,WAAW,CAACM,KAAe,EAAEC,GAAc,EAAE;AAAA,IAAA,IAAA,CAL7CD,KAAK,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACLC,GAAG,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACHC,QAAQ,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACRC,cAAc,GAAA,KAAA,CAAA,CAAA;IAGZ,IAAI,CAACH,KAAK,GAAGA,KAAK,CAAA;IAElB,IAAI,CAACC,GAAG,GAAGA,GAAG,CAAA;AAChB,GAAA;AACF,CAAA;;AAQO,SAASG,8BAA8B,CAC5CC,QAAkB,EAClBC,YAAoB,EACpB;EACA,MAAM;IAAEX,IAAI;IAAEG,MAAM;AAAED,IAAAA,KAAAA;AAAM,GAAC,GAAGQ,QAAQ,CAAA;AACxC,EAAA,OAAO,IAAIZ,QAAQ,CAACE,IAAI,EAAEG,MAAM,GAAGQ,YAAY,EAAET,KAAK,GAAGS,YAAY,CAAC,CAAA;AACxE;;AC5CA,IAAkBC,cAAc,GAAA;AAAA,EAAA,WAAA,EAAA,2BAAA;AAAA,EAAA,qBAAA,EAAA,yCAAA;AAAA,CAAA,CAAA;AAqBhC,MAAMC,OAAO,GAAG,CAACC,IAAc,EAAEC,IAAI,GAAGD,IAAI,CAACE,MAAM,GAAG,CAAC,MAAM;AAC3DC,EAAAA,GAAG,GAAyB;AAC1B,IAAA,OAAOH,IAAI,CAACI,MAAM,CAChB,CAACC,MAAM,EAAEC,GAAG;AAEVD,IAAAA,MAAM,CAACC,GAAG,CAAC,EACb,IAAI,CACL,CAAA;GACF;EACDC,GAAG,CAAgBC,KAAc,EAAE;AACjCR,IAAAA,IAAI,CAACI,MAAM;IAET,CAACK,IAAI,EAAEH,GAAG,EAAEI,CAAC,KAAMA,CAAC,KAAKT,IAAI,GAAIQ,IAAI,CAACH,GAAG,CAAC,GAAGE,KAAK,GAAIC,IAAI,CAACH,GAAG,CAAE,EAChE,IAAI,CACL,CAAA;AACH,GAAA;AACF,CAAC,CAAC,CAAA;AAEF,MAAMK,WAAW,GAAG,CAClB1B,WAAwB,EACxB2B,UAAe,EACfC,WAAgB,KAEhBC,MAAM,CAACd,IAAI,CAACa,WAAW,CAAC,CACrBE,GAAG,CAACT,GAAG,IAAI,CAACA,GAAG,EAAEO,WAAW,CAACP,GAAG,CAAC,CAAC,CAAC,CACnCU,MAAM,CAAC,CAAC,GAAGC,UAAU,CAAC,KAAK,CAAC,CAACA,UAAU,CAAC,CACxCF,GAAG,CAAC,CAAC,CAACT,GAAG,EAAEW,UAAU,CAAC,KAAK,CAC1BX,GAAG,EACH,OAAOW,UAAU,KAAK,UAAU,GAC5B;AAAET,EAAAA,KAAK,EAAES,UAAU;AAAEC,EAAAA,UAAU,EAAE,KAAA;AAAM,CAAC,GACxC,OAAOD,UAAU,CAAClB,OAAO,KAAK,QAAQ,GACjCkB,MAAAA,CAAAA,MAAAA,CAAAA,EAAAA,EAAAA,UAAU,EAAKlB,OAAO,CAACkB,UAAU,CAAClB,OAAO,CAACoB,KAAK,CAAC,GAAG,CAAC,CAAC,IAC1DF,UAAU,CACf,CAAC,CACDb,MAAM,CACL,CAACgB,QAAQ,EAAE,CAACd,GAAG,EAAEW,UAAU,CAAC,KAC1BH,MAAM,CAACO,cAAc,CAACD,QAAQ,EAAEd,GAAG,EAAA,MAAA,CAAA,MAAA,CAAA;AACjCgB,EAAAA,YAAY,EAAE,IAAA;AAAI,CAAA,EACfL,UAAU,CAAA,CACb,EACJH,MAAM,CAACS,MAAM,CAAC,IAAItC,WAAW,EAAE,EAAE2B,UAAU,CAAC,CAC7C;;AC5DL,mBAAe;AACbY,EAAAA,uBAAuB,EAAE;AACvBC,IAAAA,OAAO,EAAG,CAAwD,uDAAA,CAAA;IAClEC,IAAI,EAAE5B,cAAc,CAAC6B,qBAAAA;GACtB;AACDC,EAAAA,mBAAmB,EAAE;AACnBH,IAAAA,OAAO,EAAG,CAAkE,iEAAA,CAAA;IAC5EC,IAAI,EAAE5B,cAAc,CAAC6B,qBAAAA;AACvB,GAAA;AACF,CAAC;;ACXD,MAAME,gBAAgB,GAAG;AACvBC,EAAAA,YAAY,EAAE,6BAA6B;AAC3CC,EAAAA,oBAAoB,EAAE,uBAAuB;AAC7CC,EAAAA,iBAAiB,EAAE,uBAAuB;AAC1CC,EAAAA,uBAAuB,EAAE,2BAA2B;AACpDC,EAAAA,qBAAqB,EAAE,wBAAwB;AAC/CC,EAAAA,WAAW,EAAE,cAAc;AAC3BC,EAAAA,cAAc,EAAE,kBAAkB;AAClCC,EAAAA,cAAc,EAAE,kBAAkB;AAClCC,EAAAA,YAAY,EAAE,UAAU;AACxBC,EAAAA,gBAAgB,EAAE,yBAAyB;AAC3CC,EAAAA,UAAU,EAAE,YAAY;AACxBC,EAAAA,eAAe,EAAE,kBAAkB;AACnCC,EAAAA,sBAAsB,EAAE,0BAA0B;AAClDC,EAAAA,wBAAwB,EAAE,4BAA4B;AACtDC,EAAAA,aAAa,EAAE,8BAA8B;AAC7CC,EAAAA,uBAAuB,EAAE,0BAA0B;AACnDC,EAAAA,WAAW,EAAE,cAAc;AAC3BC,EAAAA,gBAAgB,EAAE;AAChBC,IAAAA,IAAI,EAAE,kBAAkB;AACxBC,IAAAA,KAAK,EAAE,mBAAA;GACR;AACDC,EAAAA,kBAAkB,EAAE,sBAAsB;AAC1CC,EAAAA,eAAe,EAAE,kBAAA;AACnB,CAAC,CAAA;AAkBD,MAAMC,iBAAiB,GAAG,CAAC;EAAEC,IAAI;AAAEC,EAAAA,MAAAA;AAA4B,CAAC,KAC9DD,IAAI,KAAK,kBAAkB,GACvBxB,gBAAgB,CAACkB,gBAAgB,CAACQ,MAAM,CAACD,MAAM,CAAC,CAAqB,GACrEzB,gBAAgB,CAACwB,IAAI,CAAC;;ACxB5B,qBAAe;AACbG,EAAAA,mBAAmB,EAAE,CAAC;AAAEC,IAAAA,IAAAA;GAA+B,KACpD,CAAIA,EAAAA,EAAAA,IAAK,CAA2B,0BAAA,CAAA;AACvCC,EAAAA,gBAAgB,EACd,6DAA6D;AAC/DC,EAAAA,qCAAqC,EACnC,0EAA0E;AAC5EC,EAAAA,sBAAsB,EACpB,6DAA6D;AAC/DC,EAAAA,mCAAmC,EACjC,0DAA0D;AAC5DC,EAAAA,8BAA8B,EAC5B,sDAAsD;AACxDC,EAAAA,sBAAsB,EACpB,kFAAkF;AACpFC,EAAAA,uBAAuB,EAAE,iDAAiD;AAC1EC,EAAAA,cAAc,EAAE,uDAAuD;AACvEC,EAAAA,cAAc,EAAE,0DAA0D;AAC1EC,EAAAA,sBAAsB,EACpB,kEAAkE;AACpEC,EAAAA,qBAAqB,EAAE,mDAAmD;AAC1EC,EAAAA,4BAA4B,EAC1B,4DAA4D;AAC9DC,EAAAA,qBAAqB,EAAE,2CAA2C;AAClEC,EAAAA,kBAAkB,EAAE,yCAAyC;AAC7DC,EAAAA,sBAAsB,EAAE,mCAAmC;AAC3DC,EAAAA,6BAA6B,EAAE,CAAC;AAC9BhB,IAAAA,IAAAA;GAGD,KAAM,CAAyBA,uBAAAA,EAAAA,IAAK,CAAc,aAAA,CAAA;AACnDiB,EAAAA,oCAAoC,EAClC,iHAAiH;AACnHC,EAAAA,qBAAqB,EACnB,mKAAmK;AACrKC,EAAAA,oBAAoB,EAClB,iFAAiF;AACnFC,EAAAA,oBAAoB,EAClB,kHAAkH;AACpHC,EAAAA,kBAAkB,EAAE,iDAAiD;AACrEC,EAAAA,oBAAoB,EAAE,+CAA+C;AACrEC,EAAAA,kBAAkB,EAAE,0CAA0C;AAC9DC,EAAAA,sBAAsB,EACpB,oGAAoG;AACtGC,EAAAA,oBAAoB,EAAE,0CAA0C;AAChEC,EAAAA,sBAAsB,EAAE,6CAA6C;AACrEC,EAAAA,eAAe,EAAE,CAAC;AAAEC,IAAAA,UAAAA;GAAoC,KACrD,CAAIA,EAAAA,EAAAA,UAAW,CAAmE,kEAAA,CAAA;AACrFC,EAAAA,cAAc,EAAE,qCAAqC;AACrDC,EAAAA,oBAAoB,EAAE,oCAAoC;AAC1DC,EAAAA,gBAAgB,EAAE,oCAAoC;AACtDC,EAAAA,0BAA0B,EAAE,yBAAyB;AACrDC,EAAAA,qBAAqB,EAAE,CAAC;IACtBC,SAAS;AACTN,IAAAA,UAAAA;AAIF,GAAC,KACE,CAAA,qGAAA,EAAuGM,SAAU,CAAA,MAAA,EAAQN,UAAW,CAA0B,yBAAA,CAAA;AACjKO,EAAAA,6BAA6B,EAC3B,gEAAgE;AAElEC,EAAAA,sBAAsB,EAAE,CAAC;AACvBxC,IAAAA,IAAAA;GAGD,KACE,IACCA,IAAI,KAAK,gBAAgB,GAAG,QAAQ,GAAG,QACxC,CAAyD,wDAAA,CAAA;AAC5DyC,EAAAA,UAAU,EAAE,qDAAqD;AAEjEC,EAAAA,UAAU,EAAE,yDAAyD;AACrEC,EAAAA,QAAQ,EAAE,+DAA+D;AACzEC,EAAAA,iCAAiC,EAC/B,qEAAqE;AAEvEC,EAAAA,oBAAoB,EAAE,CAAC;AACrB7C,IAAAA,IAAAA;GAGD,KAAM,eAAcA,IAAI,KAAK,gBAAgB,GAAG,OAAO,GAAG,UAAW,CAAE,CAAA,CAAA;AAExE8C,EAAAA,4BAA4B,EAC1B,4EAA4E;AAC9EC,EAAAA,aAAa,EAAE,+BAA+B;AAC9CC,EAAAA,qBAAqB,EAAE,CAAC;AAAEC,IAAAA,UAAAA;GAAoC,KAC3D,CAAsFA,oFAAAA,EAAAA,UAAW,CAAc,aAAA,CAAA;AAClHC,EAAAA,+BAA+B,EAC7B,4DAA4D;AAC9DC,EAAAA,eAAe,EAAE,CAAC;AAAEC,IAAAA,gBAAAA;GAA+C,KAChE,iCACCA,gBAAgB,KAAK,CAAC,GAAG,cAAc,GAAG,sBAC3C,CAAE,CAAA,CAAA;AACLC,EAAAA,0BAA0B,EAAE,kCAAkC;AAC9DC,EAAAA,wBAAwB,EAAE,qCAAqC;AAC/DC,EAAAA,2BAA2B,EACzB,oDAAoD;AACtDC,EAAAA,4BAA4B,EAAE,2CAA2C;AACzEC,EAAAA,0BAA0B,EACxB,kDAAkD;AACpDC,EAAAA,yBAAyB,EACvB,8EAA8E;AAChFC,EAAAA,oBAAoB,EAAE,wBAAwB;AAC9CC,EAAAA,gBAAgB,EAAE,2BAA2B;AAC7CC,EAAAA,2BAA2B,EAAE,yCAAyC;AACtEC,EAAAA,cAAc,EAAE,kBAAkB;AAClCC,EAAAA,YAAY,EAAE,CAAC;AAAEC,IAAAA,KAAAA;GAA0B,KACxC,CAA2BA,yBAAAA,EAAAA,KAAM,CAAE,CAAA,CAAA;AACtCC,EAAAA,qBAAqB,EAAE,gCAAgC;AACvDC,EAAAA,6BAA6B,EAAE,sCAAsC;AACrEC,EAAAA,0BAA0B,EAAE,CAAC;AAAEC,IAAAA,YAAAA;GAAwC,KACpE,CAA6BA,2BAAAA,EAAAA,YAAa,CAAE,CAAA,CAAA;AAC/CC,EAAAA,iBAAiB,EAAE,CAAC;AAAEhI,IAAAA,cAAAA;GAA4C,KAC/D,CAAqBA,mBAAAA,EAAAA,cAAe,CAAE,CAAA,CAAA;AACzCiI,EAAAA,UAAU,EAAE,CAAC;AAAEC,IAAAA,QAAAA;AAAqC,GAAC,KAClD,CAA4BxE,0BAAAA,EAAAA,iBAAiB,CAACwE,QAAQ,CAAE,CAAE,CAAA,CAAA;AAC7DC,EAAAA,iBAAiB,EAAE,CAAC;AAAED,IAAAA,QAAAA;AAAqC,GAAC,KACzD,CAAoCxE,kCAAAA,EAAAA,iBAAiB,CAACwE,QAAQ,CAAE,CAAE,CAAA,CAAA;AACrEE,EAAAA,aAAa,EAAE,iBAAiB;AAChCC,EAAAA,wBAAwB,EACtB,gEAAgE;AAClEC,EAAAA,wBAAwB,EAAE,CAAC;AAAEC,IAAAA,UAAAA;GAAoC,KAC9D,CAAwBA,sBAAAA,EAAAA,UAAW,CAAG,EAAA,CAAA;AACzCC,EAAAA,8BAA8B,EAAE,2CAA2C;AAC3EC,EAAAA,6BAA6B,EAAE,CAAC;AAC9BzI,IAAAA,cAAAA;GAGD,KAAM,CAAgBA,cAAAA,EAAAA,cAAe,CAAiB,gBAAA,CAAA;AACvD0I,EAAAA,6BAA6B,EAAE,4BAA4B;AAC3DC,EAAAA,qBAAqB,EACnB,wEAAwE;AAC1EC,EAAAA,4BAA4B,EAAE,mCAAmC;AACjEC,EAAAA,kBAAkB,EAAE,CAAC;AAAEC,IAAAA,SAAAA;GAAkC,KACtD,CAASA,OAAAA,EAAAA,SAAU,CAAuB,sBAAA,CAAA;AAC7CC,EAAAA,mBAAmB,EACjB,6EAA6E;AAC/EC,EAAAA,yBAAyB,EAAE,uCAAuC;AAClEC,EAAAA,oBAAoB,EAAE,kCAAkC;AACxDC,EAAAA,gBAAgB,EAAE,2BAA2B;AAC7CC,EAAAA,qBAAqB,EACnB,6DAA6D;AAC/DC,EAAAA,gBAAgB,EAAE,oBAAoB;AACtCC,EAAAA,aAAa,EAAE,CAAC;AAAEC,IAAAA,aAAAA;GAA4C,KAC3D,iEAAgEA,aAAa,CAC3EjI,GAAG,CAACkI,IAAI,IAAIC,IAAI,CAACC,SAAS,CAACF,IAAI,CAAC,CAAC,CACjCG,IAAI,CAAC,IAAI,CAAE,CAAE,CAAA,CAAA;AAGlBC,EAAAA,mBAAmB,EAAE,CAAC;AAAEL,IAAAA,aAAAA;GAA4C,KACjE,qFAAoFA,aAAa,CAC/FjI,GAAG,CAACkI,IAAI,IAAIC,IAAI,CAACC,SAAS,CAACF,IAAI,CAAC,CAAC,CACjCG,IAAI,CAAC,IAAI,CAAE,CAAE,CAAA,CAAA;AAClBE,EAAAA,oBAAoB,EAAE,4CAA4C;AAClEC,EAAAA,yBAAyB,EACvB,qFAAqF;AACvFC,EAAAA,gCAAgC,EAC9B,+CAA+C;AACjDC,EAAAA,2BAA2B,EACzB,8DAA8D;AAChEC,EAAAA,iCAAiC,EAAE,CAAC;AAAEpJ,IAAAA,GAAAA;GAAsB,KACzD,CAAiBA,eAAAA,EAAAA,GAAI,CAAuC,sCAAA,CAAA;AAC/DqJ,EAAAA,gCAAgC,EAAE,CAAC;AACjCC,IAAAA,iBAAAA;GAGD,KACE,6DAA4DA,iBAAiB,CAACC,QAAQ,CACrF,EAAE,CACF,CAAG,EAAA,CAAA;AACPC,EAAAA,qBAAqB,EAAE,CAAC;AAAEnE,IAAAA,SAAAA;GAAkC,KACzD,CAAUA,QAAAA,EAAAA,SAAU,CAAkB,iBAAA,CAAA;AACzCoE,EAAAA,wBAAwB,EAAE,2BAA2B;AACrDC,EAAAA,iBAAiB,EAAE,8BAA8B;AACjDC,EAAAA,gBAAgB,EAAE,kCAAkC;AACpDC,EAAAA,gBAAgB,EAAE,mCAAmC;AACrDC,EAAAA,gCAAgC,EAC9B,6FAA6F;AAC/FC,EAAAA,iBAAiB,EACf,yFAAyF;AAC3FC,EAAAA,qBAAqB,EACnB,0DAA0D;AAC5DC,EAAAA,0BAA0B,EACxB,4DAA4D;AAC9DC,EAAAA,qBAAqB,EACnB,iEAAiE;AACnEC,EAAAA,SAAS,EAAE,sBAAsB;AACjCC,EAAAA,kBAAkB,EAAE,gDAAgD;AACpEC,EAAAA,gBAAgB,EAAE,uCAAuC;AACzDC,EAAAA,mBAAmB,EAAE,CAAC;AAAEjL,IAAAA,cAAAA;AAA2C,GAAC,KACjE,CAAA,4DAAA,EAA8DA,cAAe,CAAA,iCAAA,EAAmCA,cAAe,CAAY,WAAA,CAAA;AAC9IkL,EAAAA,wBAAwB,EAAE,CAAC;AAAElL,IAAAA,cAAAA;GAA4C,KACtE,CAA0BA,wBAAAA,EAAAA,cAAe,CAAE,CAAA,CAAA;AAC9CmL,EAAAA,yCAAyC,EACvC,mIAAmI;AACrIC,EAAAA,2CAA2C,EACzC,qIAAqI;AACvIC,EAAAA,4CAA4C,EAC1C,sIAAsI;AACxIC,EAAAA,aAAa,EAAE,mDAAmD;AAClEC,EAAAA,iBAAiB,EAAE,+CAA+C;AAClEC,EAAAA,cAAc,EACZ,0HAA0H;AAC5HC,EAAAA,eAAe,EAAE,uDAAuD;AACxEC,EAAAA,eAAe,EACb,mJAAmJ;AACrJC,EAAAA,iBAAiB,EAAE,4CAA4C;AAC/DC,EAAAA,iBAAiB,EAAE,iDAAiD;AACpEC,EAAAA,wCAAwC,EACtC,kIAAkI;AACpIC,EAAAA,0CAA0C,EACxC,oIAAoI;AACtIC,EAAAA,2CAA2C,EACzC,qIAAqI;AACvIC,EAAAA,6BAA6B,EAAE,kCAAkC;AACjEC,EAAAA,gCAAgC,EAC9B,0FAA0F;AAC5FC,EAAAA,wBAAwB,EAAE,oCAAoC;AAC9DC,EAAAA,sBAAsB,EACpB,yDAAyD;AAC3DC,EAAAA,iBAAiB,EAAE,CAAC;AAAEC,IAAAA,OAAAA;GAA8B,KACjD,CAAsBA,oBAAAA,EAAAA,OAAQ,CAAG,EAAA,CAAA;AACpCC,EAAAA,0BAA0B,EACxB,6DAA6D;AAC/DC,EAAAA,4BAA4B,EAC1B,kEAAkE;AACpEC,EAAAA,mBAAmB,EACjB,iEAAiE;AACnEC,EAAAA,0BAA0B,EACxB,yDAAyD;AAC3DC,EAAAA,sBAAsB,EAAE,0BAA0B;AAClDC,EAAAA,sBAAsB,EAAE,CAAC;AAAE5E,IAAAA,YAAAA;GAAwC,KAChE,CAA4BA,0BAAAA,EAAAA,YAAa,CAAG,EAAA,CAAA;AAC/C6E,EAAAA,eAAe,EAAE,wDAAwD;AACzEC,EAAAA,eAAe,EAAE,CAAC;IAChBC,QAAQ;AACRvE,IAAAA,UAAAA;AAIF,GAAC,KACE,CAAkBA,gBAAAA,EAAAA,UAAU,GAAI,CAAA,EAAA,EAAIA,UAAW,CAAG,EAAA,CAAA,GAAG,EAAG,CAAA,EACvDuE,QAAQ,GAAI,CAAA,YAAA,EAAcA,QAAS,CAAE,CAAA,CAAA,GAAG,EACzC,CAAC,CAAA;AACJC,EAAAA,kCAAkC,EAChC,kFAAkF;AACpFC,EAAAA,0BAA0B,EACxB,gFAAgF;AAClFC,EAAAA,eAAe,EAAE,iDAAiD;AAClEC,EAAAA,0BAA0B,EACxB,qDAAqD;AACvDC,EAAAA,wBAAwB,EACtB,6EAA6E;AAC/EC,EAAAA,iBAAiB,EACf,2DAA2D;AAC7DC,EAAAA,uBAAuB,EAAE,CAAC;IACxBC,MAAM;AACNC,IAAAA,qBAAAA;AAIF,GAAC,KACE,CAAmCD,iCAAAA,EAAAA,MAAO,OAAMA,MAAO,CAAA,CAAA,EAAGC,qBAAsB,CAAE,CAAA,CAAA;AACrFC,EAAAA,6BAA6B,EAC3B,mDAAmD;AACrDC,EAAAA,4BAA4B,EAC1B,kEAAkE;AACpEC,EAAAA,gBAAgB,EACd,uHAAuH;AACzHC,EAAAA,mBAAmB,EAAE,uBAAuB;AAC5CC,EAAAA,kBAAkB,EAAE,kCAAkC;AACtDC,EAAAA,kBAAkB,EAAE,+BAA+B;AACnDC,EAAAA,oBAAoB,EAAE,wBAAwB;AAC9CC,EAAAA,iCAAiC,EAC/B,uDAAuD;AACzDC,EAAAA,gBAAgB,EAAE,CAAC;AAAEhO,IAAAA,cAAAA;GAA4C,KAC9D,CAAcA,YAAAA,EAAAA,cAAe,CAA6B,4BAAA,CAAA;AAC7DiO,EAAAA,sBAAsB,EACpB,uDAAuD;AACzDC,EAAAA,gBAAgB,EAAE,uDAAuD;AACzEC,EAAAA,yBAAyB,EACvB,oDAAA;AACJ,CAAC;;ACjTD,uBAAe;AACbC,EAAAA,YAAY,EAAE,yCAAyC;AAOvDC,EAAAA,mBAAmB,EAAE,CAAC;AAAEC,IAAAA,aAAAA;GAA0C,KAC/D,CAAgBA,cAAAA,EAAAA,aAAc,CAAkB,iBAAA,CAAA;AAOnDC,EAAAA,0BAA0B,EAAE,CAAC;AAAEC,IAAAA,WAAAA;GAAsC,KAClE,CAAWA,SAAAA,EAAAA,WAAY,CAAkB,iBAAA,CAAA;AAE5CC,EAAAA,cAAc,EACZ,qFAAqF;AAEvFC,EAAAA,mBAAmB,EAAE,wDAAwD;AAE7EC,EAAAA,kBAAkB,EAAE,uDAAuD;AAE3EC,EAAAA,UAAU,EAAE,wBAAA;AACd,CAAC;;ACzBM,MAAMC,mCAAmC,GAAG,IAAIC,GAAG,CAAC,CACzD,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,CAClB,CAAU,CAAA;AAUX,6BAAe;AAEbC,EAAAA,iBAAiB,EACf,uJAAuJ;AACzJC,EAAAA,0BAA0B,EACxB,iHAAiH;AACnHC,EAAAA,gBAAgB,EACd,4DAA4D;AAC9DC,EAAAA,0BAA0B,EAAE,CAAC;AAAEC,IAAAA,KAAAA;AAAyB,GAAC,KACtD,CAAsBA,oBAAAA,EAAAA,KAAM,qBAAoBA,KAAM,CAAA,gHAAA,EAAkHA,KAAM,CAAK,IAAA,CAAA;AACtLC,EAAAA,eAAe,EACb,yGAAyG;AAC3GC,EAAAA,uBAAuB,EAAE,CAAC;AAAE1L,IAAAA,IAAAA;GAA8C,KACvE,CAAoDD,kDAAAA,EAAAA,iBAAiB,CAAC;AACrEC,IAAAA,IAAAA;AACF,GAAC,CAAE,CAAiC,gCAAA,CAAA;AAMtC2L,EAAAA,mBAAmB,EACjB,mGAAmG;AACrGC,EAAAA,8BAA8B,EAC5B,iEAAiE;AACnEC,EAAAA,8BAA8B,EAC5B,oEAAoE;AACtEC,EAAAA,mBAAmB,EACjB,8DAA8D;AAChEC,EAAAA,sBAAsB,EACpB,sEAAsE;AACxEC,EAAAA,iCAAiC,EAC/B,iHAAA;AACJ,CAAC;;;;ACDD,SAASC,uBAAuB,CAG6C,IAAA,EAAA;EAAA,IAHf;AAC5DC,MAAAA,SAAAA;KAEoC,GAAA,IAAA;IADjC3O,UAAU,GAAA,6BAAA,CAAA,IAAA,EAAA4O,WAAA,CAAA,CAAA;EAOb,OAAO,SAASvQ,WAAW,CAAC;IAAEwQ,GAAG;AAAEC,IAAAA,OAAAA;AAA6B,GAAC,EAAE;AACjE,IAAA,OAAO/O,WAAW,CAChBgP,WAAW,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACN/O,UAAU,EAAA;AAAE6O,MAAAA,GAAAA;KACjB,CAAA,EAAA;AACEG,MAAAA,KAAK,CACHC,SAGC,GAAG,EAAE,EACN;AACA,QAAA,MAAMJ,GAAG,GAAII,SAAS,CAACJ,GAAG,IAAI,EAAwB,CAAA;AACtD,QAAA,OAAOxQ,WAAW,CAAC;UACjBwQ,GAAG,EAAE,IAAIzQ,QAAQ,CACf,MAAM,IAAIyQ,GAAG,GAAGA,GAAG,CAACvQ,IAAI,GAAG,IAAI,CAACuQ,GAAG,CAACvQ,IAAI,EACxC,QAAQ,IAAIuQ,GAAG,GAAGA,GAAG,CAACpQ,MAAM,GAAG,IAAI,CAACoQ,GAAG,CAACpQ,MAAM,EAC9C,OAAO,IAAIoQ,GAAG,GAAGA,GAAG,CAACrQ,KAAK,GAAG,IAAI,CAACqQ,GAAG,CAACrQ,KAAK,CAC5C;AACDsQ,UAAAA,OAAO,oBAAO,IAAI,CAACA,OAAO,EAAKG,SAAS,CAACH,OAAO,CAAA;AAClD,SAAC,CAAC,CAAA;OACH;AACDA,MAAAA,OAAO,EAAE;AAAElP,QAAAA,KAAK,EAAEkP,OAAO;AAAExO,QAAAA,UAAU,EAAE,KAAA;OAAO;AAC9CO,MAAAA,OAAO,EAAE;AACPtB,QAAAA,GAAG,GAAoC;AACrC,UAAA,OAAQ,GAAEoP,SAAS,CAAC,IAAI,CAACG,OAAO,CAAE,CAAI,EAAA,EAAA,IAAI,CAACD,GAAG,CAACvQ,IAAK,CAClD,CAAA,EAAA,IAAI,CAACuQ,GAAG,CAACpQ,MACV,CAAE,CAAA,CAAA,CAAA;SACJ;QACDkB,GAAG,CAACC,KAAa,EAAE;AACjBM,UAAAA,MAAM,CAACO,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE;AAAEb,YAAAA,KAAAA;AAAM,WAAC,CAAC,CAAA;AACnD,SAAA;OACD;AACDsP,MAAAA,GAAG,EAAE;AAAE/P,QAAAA,OAAO,EAAE,WAAW;AAAEmB,QAAAA,UAAU,EAAE,IAAA;OAAM;AAC/C8H,MAAAA,aAAa,EAAE,eAAe,IAAI0G,OAAO,IAAI;AAC3C3P,QAAAA,OAAO,EAAE,uBAAuB;AAChCmB,QAAAA,UAAU,EAAE,IAAA;AACd,OAAA;AACF,KAAC,CACF,CAAA;GACF,CAAA;AACH,CAAA;AAiEO,SAAS6O,cAAc,CAC5BC,QAAoD,EACpDC,YAA2B,EAC3B;AAIA,EAAA,IAAIC,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,EAAE;IAC3B,OAAQI,mBAAwC,IAC9CL,cAAc,CAACK,mBAAmB,EAAEJ,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AACpD,GAAA;EAEA,MAAMK,sBAAsB,GAAG,EAG9B,CAAA;EAED,KAAK,MAAMC,UAAU,IAAIxP,MAAM,CAACd,IAAI,CAACgQ,QAAQ,CAAC,EAAE;AAC9C,IAAA,MAAMO,QAAQ,GAAIP,QAAQ,CAAyBM,UAAU,CAAC,CAAA;AAC9D,IAAA,MAAA,KAAA,GACE,OAAOC,QAAQ,KAAK,QAAQ,GACxB;AAAE9O,QAAAA,OAAO,EAAE,MAAM8O,QAAAA;AAAS,OAAC,GAC3B,OAAOA,QAAQ,KAAK,UAAU,GAC9B;AAAE9O,QAAAA,OAAO,EAAE8O,QAAAA;AAAS,OAAC,GACrBA,QAAQ;AALR,MAAA;AAAE9O,QAAAA,OAAAA;OAAkB,GAAA,KAAA;MAAN+O,IAAI,GAAA,6BAAA,CAAA,KAAA,EAAAC,YAAA,CAAA,CAAA;IAMxB,MAAMlB,SAAS,GAAG,OAAO9N,OAAO,KAAK,QAAQ,GAAG,MAAMA,OAAO,GAAGA,OAAO,CAAA;AAEvE4O,IAAAA,sBAAsB,CAACC,UAAU,CAAC,GAAGhB,uBAAuB,CAAA,MAAA,CAAA,MAAA,CAAA;MAC1D5N,IAAI,EAAE5B,cAAc,CAAC6P,WAAW;MAChCW,UAAU;AACVf,MAAAA,SAAAA;AAAS,KAAA,EACLU,YAAY,GAAG;AAAEA,MAAAA,YAAAA;AAAa,KAAC,GAAG,EAAE,EACrCO,IAAI,CACP,CAAA,CAAA;AACJ,GAAA;AAEA,EAAA,OAAOH,sBAAsB,CAAA;AAC/B,CAAA;AAWO,MAAMK,MAAM,GACdX,MAAAA,CAAAA,MAAAA,CAAAA,EAAAA,EAAAA,cAAc,CAACY,YAAY,CAAC,EAC5BZ,cAAc,CAACa,cAAc,CAAC,EAC9Bb,cAAc,CAACc,gBAAgB,CAAC,EAChCd,cAAe,CAAiB,gBAAA,CAAA,CAACe,sBAAsB,CAAC,CAC5D;;AC9MD,MAAM;AAAEzP,EAAAA,cAAAA;AAAe,CAAC,GAAGP,MAAM,CAAA;AACjC,MAAMiQ,cAAc,GAAG,CAAC1Q,MAAW,EAAEC,GAAW,KAC9Ce,cAAc,CAAChB,MAAM,EAAEC,GAAG,EAAE;AAAEY,EAAAA,UAAU,EAAE,KAAK;EAAEV,KAAK,EAAEH,MAAM,CAACC,GAAG,CAAA;AAAE,CAAC,CAAC,CAAA;AAExE,SAAS0Q,gBAAgB,CAACC,IAAS,EAAE;AACnCA,EAAAA,IAAI,CAACxB,GAAG,CAAClQ,KAAK,IAAIwR,cAAc,CAACE,IAAI,CAACxB,GAAG,CAAClQ,KAAK,EAAE,OAAO,CAAC,CAAA;AACzD0R,EAAAA,IAAI,CAACxB,GAAG,CAACjQ,GAAG,IAAIuR,cAAc,CAACE,IAAI,CAACxB,GAAG,CAACjQ,GAAG,EAAE,OAAO,CAAC,CAAA;AAErD,EAAA,OAAOyR,IAAI,CAAA;AACb,CAAA;AAEA,aAAA,CAAgBC,UAAyB,IACvC,MAAMC,iBAAiB,SAASD,UAAU,CAAmB;AAC3DE,EAAAA,KAAK,GAAS;IACZ,MAAMC,IAAI,GAAGL,gBAAgB,CAAC,KAAK,CAACI,KAAK,EAAE,CAAC,CAAA;AAE5C,IAAA,IAAI,IAAI,CAACE,OAAO,CAACC,MAAM,EAAE;MACvBF,IAAI,CAACE,MAAM,GAAGF,IAAI,CAACE,MAAM,CAACxQ,GAAG,CAACiQ,gBAAgB,CAAC,CAAA;AACjD,KAAA;AAEA,IAAA,OAAOK,IAAI,CAAA;AACb,GAAA;;AAGAG,EAAAA,kBAAkB,CAAC;IAAEC,OAAO;AAAEC,IAAAA,KAAAA;AAAM,GAAC,EAAyB;IAC5D,IAAIC,KAAoB,GAAG,IAAI,CAAA;IAC/B,IAAI;AACFA,MAAAA,KAAK,GAAG,IAAIC,MAAM,CAACH,OAAO,EAAEC,KAAK,CAAC,CAAA;KACnC,CAAC,OAAOG,CAAC,EAAE;AAGZ,KAAA;;AACA,IAAA,MAAMZ,IAAI,GAAG,IAAI,CAACa,kBAAkB,CAAwBH,KAAK,CAAC,CAAA;IAClEV,IAAI,CAACU,KAAK,GAAG;MAAEF,OAAO;AAAEC,MAAAA,KAAAA;KAAO,CAAA;AAE/B,IAAA,OAAOT,IAAI,CAAA;AACb,GAAA;;EAGAc,kBAAkB,CAACvR,KAAU,EAAU;AAErC,IAAA,IAAIwR,MAAqB,CAAA;IACzB,IAAI;AACFA,MAAAA,MAAM,GAAGC,MAAM,CAACzR,KAAK,CAAC,CAAA;AACxB,KAAC,CAAC,OAAM,OAAA,EAAA;AACNwR,MAAAA,MAAM,GAAG,IAAI,CAAA;AACf,KAAA;AACA,IAAA,MAAMf,IAAI,GAAG,IAAI,CAACa,kBAAkB,CAAwBE,MAAM,CAAC,CAAA;IACnEf,IAAI,CAACiB,MAAM,GAAG3O,MAAM,CAAC0N,IAAI,CAACzQ,KAAK,IAAIA,KAAK,CAAC,CAAA;AAEzC,IAAA,OAAOyQ,IAAI,CAAA;AACb,GAAA;;EAGAkB,mBAAmB,CAAC3R,KAAU,EAAU;IAGtC,MAAM4R,OAAa,GAAG,IAAI,CAAA;AAC1B,IAAA,MAAMnB,IAAI,GAAG,IAAI,CAACa,kBAAkB,CAACM,OAAO,CAAC,CAAA;IAC7CnB,IAAI,CAACmB,OAAO,GAAG7O,MAAM,CAAC0N,IAAI,CAACzQ,KAAK,IAAIA,KAAK,CAAC,CAAA;AAE1C,IAAA,OAAOyQ,IAAI,CAAA;AACb,GAAA;EAEAa,kBAAkB,CAAmBtR,KAAU,EAAE;AAE/C,IAAA,OAAO,IAAI,CAAC6R,YAAY,CAAI7R,KAAK,EAAE,SAAS,CAAC,CAAA;AAC/C,GAAA;;EAGA8R,kBAAkB,CAAC9R,KAAU,EAAU;AACrC,IAAA,OAAO,IAAI,CAACsR,kBAAkB,CAACtR,KAAK,CAAC,CAAA;AACvC,GAAA;EAEA+R,mBAAmB,CAAC/R,KAAU,EAAO;AACnC,IAAA,OAAO,IAAI,CAACsR,kBAAkB,CAACtR,KAAK,CAAC,CAAA;AACvC,GAAA;;AAGAgS,EAAAA,gBAAgB,GAAW;AACzB,IAAA,OAAO,IAAI,CAACV,kBAAkB,CAAC,IAAI,CAAC,CAAA;AACtC,GAAA;EAEAW,mBAAmB,CAACjS,KAAc,EAAoB;AACpD,IAAA,OAAO,IAAI,CAACsR,kBAAkB,CAACtR,KAAK,CAAC,CAAA;AACvC,GAAA;;EAGAkS,eAAe,CAACC,SAAsB,EAAyB;AAC7D,IAAA,MAAMC,UAAU,GAAGD,SAAS,CAACnS,KAA+B,CAAA;IAC5D,OAAOmS,SAAS,CAACnS,KAAK,CAAA;IAEtBoS,UAAU,CAACvP,IAAI,GAAG,SAAS,CAAA;AAE3BuP,IAAAA,UAAU,CAACC,GAAG,GAAGD,UAAU,CAACE,KAAK,CAACD,GAAG,CAAA;AACrCD,IAAAA,UAAU,CAACpS,KAAK,GAAGoS,UAAU,CAACE,KAAK,CAACC,eAAe,CAAA;IAEnD,MAAMC,IAAI,GAAGL,SAAyC,CAAA;IACtDK,IAAI,CAAC3P,IAAI,GAAG,qBAAqB,CAAA;IACjC2P,IAAI,CAACJ,UAAU,GAAGA,UAAU,CAAA;AAE5BI,IAAAA,IAAI,CAACL,SAAS,GAAGC,UAAU,CAACE,KAAK,CAACG,QAAQ,CAAA;IAE1C,OAAOL,UAAU,CAACE,KAAK,CAAA;AAEvB,IAAA,OAAOE,IAAI,CAAA;AACb,GAAA;;AAMAE,EAAAA,YAAY,CAACjC,IAAoC,EAAEkC,OAAgB,EAAQ;AACzE,IAAA,KAAK,CAACD,YAAY,CAACjC,IAAI,EAAEkC,OAAO,CAAC,CAAA;IACjClC,IAAI,CAAC2B,UAAU,GAAG,KAAK,CAAA;AACzB,GAAA;EAEAQ,gBAAgB,CAACnC,IAAkC,EAAQ;IACzD,IAAIA,IAAI,IAAI,IAAI,IAAI,IAAI,CAACoC,gBAAgB,CAACpC,IAAI,CAAC,EAAE;AAE/C,MAAA,IAAI,CAACmC,gBAAgB,CAAEnC,IAAI,CAAiCzQ,KAAK,CAAC,CAAA;AACpE,KAAC,MAAM;AACL,MAAA,KAAK,CAAC4S,gBAAgB,CAACnC,IAAI,CAAC,CAAA;AAC9B,KAAA;AACF,GAAA;EAEAqC,4BAA4B,CAACC,MAAsC,EAAE;AACnE,IAAA,OAAQA,MAAM,CACX/S,KAAK,CAACgT,MAAM,CAAA;AACjB,GAAA;EAEAC,gBAAgB,CAACT,IAAiB,EAAW;AAAA,IAAA,IAAA,qBAAA,CAAA;AAC3C,IAAA,OACEA,IAAI,CAAC3P,IAAI,KAAK,qBAAqB,IACnC2P,IAAI,CAACJ,UAAU,CAACvP,IAAI,KAAK,SAAS,IAClC,OAAO2P,IAAI,CAACJ,UAAU,CAACpS,KAAK,KAAK,QAAQ,IACzC,EAAA,CAAA,qBAAA,GAACwS,IAAI,CAACJ,UAAU,CAACE,KAAK,KAAA,IAAA,IAArB,sBAAuBY,aAAa,CAAA,CAAA;AAEzC,GAAA;EAEAC,cAAc,CACZ1C,IAA0B,EAC1B2C,eAA2C,EAC3CC,QAAiB,EACjBrU,GAAc,EACdsU,eAA2D,EACrD;AACN,IAAA,KAAK,CAACH,cAAc,CAClB1C,IAAI,EACJ2C,eAAe,EACfC,QAAQ,EACRrU,GAAG,EACHsU,eAAe,CAChB,CAAA;AAED,IAAA,MAAMC,mBAAmB,GAAG9C,IAAI,CAAC+C,UAAU,CAACjT,GAAG,CAACkT,CAAC,IAC/C,IAAI,CAACvB,eAAe,CAACuB,CAAC,CAAC,CACxB,CAAA;IAEDhD,IAAI,CAACiD,IAAI,GAAGH,mBAAmB,CAACI,MAAM,CAAClD,IAAI,CAACiD,IAAI,CAAC,CAAA;IACjD,OAAOjD,IAAI,CAAC+C,UAAU,CAAA;AACxB,GAAA;AAEAI,EAAAA,eAAe,CACbC,SAAsB,EACtBd,MAAqB,EACrBe,WAAoB,EACpBnB,OAAgB,EAChBoB,aAAsB,EACtBC,iBAA0B,EACpB;AACN,IAAA,IAAI,CAACC,WAAW,CACdlB,MAAM,EACNe,WAAW,EACXnB,OAAO,EACPoB,aAAa,EACbC,iBAAiB,EACjB,aAAa,EACb,IAAI,CACL,CAAA;IACD,IAAIjB,MAAM,CAACmB,cAAc,EAAE;AAEzBnB,MAAAA,MAAM,CAAC/S,KAAK,CAACkU,cAAc,GAAGnB,MAAM,CAACmB,cAAc,CAAA;MACnD,OAAOnB,MAAM,CAACmB,cAAc,CAAA;AAC9B,KAAA;AACAL,IAAAA,SAAS,CAACH,IAAI,CAACS,IAAI,CAACpB,MAAM,CAAC,CAAA;AAC7B,GAAA;AAEAqB,EAAAA,gBAAgB,GAAQ;AACtB,IAAA,MAAM3D,IAAI,GAAG,KAAK,CAAC2D,gBAAgB,EAAE,CAAA;AACF,IAAA;MACjC,IAAI,CAAC,IAAI,CAACC,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;AACpD,QAAA,OAAO5D,IAAI,CAAA;AACb,OAAA;AACF,KAAA;AACA,IAAA,OAAO,IAAI,CAAC6D,qCAAqC,CAAC7D,IAAI,CAAC,CAAA;AACzD,GAAA;EAEA6D,qCAAqC,CACnC7D,IAAmB,EACQ;AAC3B,IAAA,MAAMhI,IAAI,GAAG,KAAK,CAAC8L,gBAAgB,CAAC9D,IAAI,CAAC,CAAA;AACzCA,IAAAA,IAAI,GAAGA,IAAW,CAAA;IAClB,OAAOA,IAAI,CAAC+D,EAAE,CAAA;IAEd/D,IAAI,CAAChI,IAAI,GAAGA,IAAI,CAAA;IAEhBgI,IAAI,CAAC5N,IAAI,GAAG,mBAAmB,CAAA;AAC/B,IAAA,OAAO4N,IAAI,CAAA;AACb,GAAA;EAEAgE,aAAa,CAAChE,IAAY,EAAW;AACA,IAAA;MACjC,IAAI,CAAC,IAAI,CAAC4D,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;AACpD,QAAA,OAAO,KAAK,CAACI,aAAa,CAAChE,IAAI,CAAC,CAAA;AAClC,OAAA;AACF,KAAA;AACA,IAAA,OAAOA,IAAI,CAAC5N,IAAI,KAAK,mBAAmB,CAAA;AAC1C,GAAA;EAEA0R,gBAAgB,CAAC9D,IAAY,EAAU;AACF,IAAA;MACjC,IAAI,CAAC,IAAI,CAAC4D,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;AACpD,QAAA,OAAO,KAAK,CAACE,gBAAgB,CAAC9D,IAAI,CAAC,CAAA;AACrC,OAAA;AACF,KAAA;IACA,OAAOA,IAAI,CAAChI,IAAI,CAAA;AAClB,GAAA;;AAGAoJ,EAAAA,YAAY,CAAsB7R,KAAU,EAAE6C,IAAe,EAAK;IAChE,MAAM4N,IAAI,GAAG,KAAK,CAACoB,YAAY,CAAI7R,KAAK,EAAE6C,IAAI,CAAC,CAAA;AAE/C4N,IAAAA,IAAI,CAAC4B,GAAG,GAAG5B,IAAI,CAAC6B,KAAK,CAACD,GAAG,CAAA;IACzB,OAAO5B,IAAI,CAAC6B,KAAK,CAAA;AAEjB,IAAA,OAAO7B,IAAI,CAAA;AACb,GAAA;EAEAiE,iBAAiB,CACfjE,IAAgB,EAChBkE,eAAgC,EAChCC,QAAiB,GAAG,KAAK,EACnB;IACN,KAAK,CAACF,iBAAiB,CAACjE,IAAI,EAAEkE,eAAe,EAAEC,QAAQ,CAAC,CAAA;IACxDnE,IAAI,CAAC2B,UAAU,GAAG3B,IAAI,CAACiD,IAAI,CAAC7Q,IAAI,KAAK,gBAAgB,CAAA;AACvD,GAAA;;AAGAoR,EAAAA,WAAW,CAGTxD,IAAe,EACfqD,WAAoB,EACpBnB,OAAgB,EAChBoB,aAAsB,EACtBc,gBAAyB,EACzBhS,IAAe,EACfiS,YAAqB,GAAG,KAAK,EACH;AAC1B,IAAA,IAAIC,QAAQ,GAAG,IAAI,CAACC,SAAS,EAAgB,CAAA;AAC7CD,IAAAA,QAAQ,CAAC9R,IAAI,GAAGwN,IAAI,CAACxN,IAAI,CAAA;IACzB8R,QAAQ,GAAG,KAAK,CAACd,WAAW;AAE1Bc,IAAAA,QAAQ,EACRjB,WAAW,EACXnB,OAAO,EACPoB,aAAa,EACbc,gBAAgB,EAChBhS,IAAI,EACJiS,YAAY,CACb,CAAA;IAEDC,QAAQ,CAAClS,IAAI,GAAG,oBAAoB,CAAA;IACpC,OAAOkS,QAAQ,CAAC9R,IAAI,CAAA;IAEpBwN,IAAI,CAACzQ,KAAK,GAAG+U,QAAQ,CAAA;IACrB,IAAIlS,IAAI,KAAK,oBAAoB,EAAE;MACjC4N,IAAI,CAACwE,QAAQ,GAAG,KAAK,CAAA;AACvB,KAAA;IACA,OAAO,IAAI,CAACC,UAAU;IAEpBzE,IAAI,EACJ,kBAAkB,CACnB,CAAA;AACH,GAAA;EAEA0E,kBAAkB,CAAC,GAAGC,IAAuB,EAAO;IAClD,MAAMC,YAAY,GAAG,KAAK,CAACF,kBAAkB,CAAC,GAAGC,IAAI,CAAQ,CAAA;AAC1B,IAAA;MACjC,IAAI,CAAC,IAAI,CAACf,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;AACpD,QAAA,OAAOgB,YAAY,CAAA;AACrB,OAAA;AACF,KAAA;IACAA,YAAY,CAACxS,IAAI,GAAG,oBAAoB,CAAA;AACxC,IAAA,OAAOwS,YAAY,CAAA;AACrB,GAAA;EAEAC,yBAAyB,CAAC,GAAGF,IAA8B,EAAO;IAChE,MAAMC,YAAY,GAAG,KAAK,CAACC,yBAAyB,CAAC,GAAGF,IAAI,CAAQ,CAAA;AACjC,IAAA;MACjC,IAAI,CAAC,IAAI,CAACf,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;AACpD,QAAA,OAAOgB,YAAY,CAAA;AACrB,OAAA;AACF,KAAA;IACAA,YAAY,CAACxS,IAAI,GAAG,oBAAoB,CAAA;IACxCwS,YAAY,CAACJ,QAAQ,GAAG,KAAK,CAAA;AAC7B,IAAA,OAAOI,YAAY,CAAA;AACrB,GAAA;EAEAE,iBAAiB,CACfC,IAAoB,EACpB1B,WAAoB,EACpBnB,OAAgB,EAChB8C,SAAkB,EAClBC,UAAmB,EACgB;AACnC,IAAA,MAAMjF,IAAsB,GAAG,KAAK,CAAC8E,iBAAiB,CACpDC,IAAI,EACJ1B,WAAW,EACXnB,OAAO,EACP8C,SAAS,EACTC,UAAU,CACJ,CAAA;AAER,IAAA,IAAIjF,IAAI,EAAE;MACRA,IAAI,CAAC5N,IAAI,GAAG,UAAU,CAAA;AACtB,MAAA,IAAK4N,IAAI,CAA0BxN,IAAI,KAAK,QAAQ,EAAE;QACpDwN,IAAI,CAACxN,IAAI,GAAG,MAAM,CAAA;AACpB,OAAA;MACAwN,IAAI,CAACkF,SAAS,GAAG,KAAK,CAAA;AACxB,KAAA;AAEA,IAAA,OAAOlF,IAAI,CAAA;AACb,GAAA;EAEAmF,mBAAmB,CACjBJ,IAAsB,EACtBK,QAAqC,EACrCJ,SAAkB,EAClBK,mBAA6C,EACR;AACrC,IAAA,MAAMrF,IAAsB,GAAG,KAAK,CAACmF,mBAAmB,CACtDJ,IAAI,EACJK,QAAQ,EACRJ,SAAS,EACTK,mBAAmB,CACb,CAAA;AAER,IAAA,IAAIrF,IAAI,EAAE;MACRA,IAAI,CAACxN,IAAI,GAAG,MAAM,CAAA;MAClBwN,IAAI,CAAC5N,IAAI,GAAG,UAAU,CAAA;AACxB,KAAA;AAEA,IAAA,OAAO4N,IAAI,CAAA;AACb,GAAA;AAEAsF,EAAAA,WAAW,CACTlT,IAAY,EACZmT,yBAAkC,EAClCC,OAAqB,EACrB;AACA,IAAA,OAAOpT,IAAI,KAAK,UAAU,GACtB,OAAO,GACP,KAAK,CAACkT,WAAW,CAAClT,IAAI,EAAEmT,yBAAyB,EAAEC,OAAO,CAAC,CAAA;AACjE,GAAA;AAEAC,EAAAA,YAAY,CAACzF,IAAY,EAAE0F,SAAmB,EAAW;IACvD,IAAI1F,IAAI,IAAI,IAAI,IAAI,IAAI,CAACoC,gBAAgB,CAACpC,IAAI,CAAC,EAAE;MAC/C,OAAO,IAAI,CAACyF,YAAY,CAACzF,IAAI,CAACzQ,KAAK,EAAEmW,SAAS,CAAC,CAAA;AACjD,KAAA;AACA,IAAA,OAAO,KAAK,CAACD,YAAY,CAACzF,IAAI,EAAE0F,SAAS,CAAC,CAAA;AAC5C,GAAA;AAEAC,EAAAA,YAAY,CAAC3F,IAAY,EAAE4F,KAAc,GAAG,KAAK,EAAQ;IACvD,IAAI5F,IAAI,IAAI,IAAI,IAAI,IAAI,CAACoC,gBAAgB,CAACpC,IAAI,CAAC,EAAE;MAC/C,MAAM;QAAE3Q,GAAG;AAAEE,QAAAA,KAAAA;AAAM,OAAC,GAAGyQ,IAAI,CAAA;AAC3B,MAAA,IAAI,IAAI,CAACgE,aAAa,CAAC3U,GAAG,CAAC,EAAE;AAC3B,QAAA,IAAI,CAACwW,UAAU,CAACC,cAAc,CAC5B,IAAI,CAAChC,gBAAgB,CAACzU,GAAG,CAAC,EAC1BA,GAAG,CAACmP,GAAG,CAAClQ,KAAK,CACd,CAAA;AACH,OAAA;AACA,MAAA,IAAI,CAACqX,YAAY,CAACpW,KAAK,EAAEqW,KAAK,CAAC,CAAA;AACjC,KAAC,MAAM;AACL,MAAA,KAAK,CAACD,YAAY,CAAC3F,IAAI,EAAE4F,KAAK,CAAC,CAAA;AACjC,KAAA;AACF,GAAA;AAEAG,EAAAA,gCAAgC,CAC9BhB,IAAY,EACZiB,MAAe,EACfJ,KAAc,EACd;IACA,IAAIb,IAAI,CAACvS,IAAI,KAAK,KAAK,IAAIuS,IAAI,CAACvS,IAAI,KAAK,KAAK,EAAE;AAC9C,MAAA,IAAI,CAACyT,KAAK,CAACxG,MAAM,CAACjG,kBAAkB,EAAE;QAAE0M,EAAE,EAAEnB,IAAI,CAAC1V,GAAAA;AAAI,OAAC,CAAC,CAAA;AACzD,KAAC,MAAM,IAAI0V,IAAI,CAACzC,MAAM,EAAE;AACtB,MAAA,IAAI,CAAC2D,KAAK,CAACxG,MAAM,CAAChG,gBAAgB,EAAE;QAAEyM,EAAE,EAAEnB,IAAI,CAAC1V,GAAAA;AAAI,OAAC,CAAC,CAAA;AACvD,KAAC,MAAM;MACL,KAAK,CAAC0W,gCAAgC,CAAChB,IAAI,EAAEiB,MAAM,EAAEJ,KAAK,CAAC,CAAA;AAC7D,KAAA;AACF,GAAA;AAEAO,EAAAA,oBAAoB,CAClBC,UAAqB,EACrBC,QAAiB,EACd;IACH,MAAMrG,IAAI,GAAG,KAAK,CAACmG,oBAAoB,CAACC,UAAU,EAAEC,QAAQ,CAAC,CAAA;AAE7D,IAAA,IAAIrG,IAAI,CAACsG,MAAM,CAAClU,IAAI,KAAK,QAAQ,EAAE;MAChC4N,IAAI,CAAwC5N,IAAI,GAAG,kBAAkB,CAAA;MACrE4N,IAAI,CAAwCuG,MAAM,GAAGvG,IAAI,CAACwG,SAAS,CAAC,CAAC,CAAC,CAAA;AACvE,MAAA,IAAI,IAAI,CAACC,SAAS,CAAC,kBAAkB,CAAC,EAAE;AAAA,QAAA,IAAA,gBAAA,CAAA;QACrCzG,IAAI,CAAwC0G,UAAU,GAAA,CAAA,gBAAA,GACrD1G,IAAI,CAACwG,SAAS,CAAC,CAAC,CAAC,KAAA,IAAA,GAAA,gBAAA,GAAI,IAAI,CAAA;AAC7B,OAAA;MAEA,OAAOxG,IAAI,CAACwG,SAAS,CAAA;MAErB,OAAOxG,IAAI,CAACsG,MAAM,CAAA;AACpB,KAAA;AAEA,IAAA,OAAOtG,IAAI,CAAA;AACb,GAAA;AAEA2G,EAAAA,qBAAqB,CACnB3G,IAAAA;IAKA;AAEA,IAAA,IAAIA,IAAI,CAAC5N,IAAI,KAAK,kBAAkB,EAAE;AACpC,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,KAAK,CAACuU,qBAAqB,CAAC3G,IAAI,CAAC,CAAA;AACnC,GAAA;AAEA4G,EAAAA,WAAW,CACTR,UAA+B,EAC/BS,UAAgC,EAChC;AACA,IAAA,MAAMC,cAAc,GAAG,IAAI,CAACC,KAAK,CAACC,eAAe,CAAA;IACjD,MAAMhH,IAAI,GAAG,KAAK,CAAC4G,WAAW,CAACR,UAAU,EAAES,UAAU,CAAC,CAAA;IAEtD,QAAQ7G,IAAI,CAAC5N,IAAI;AACf,MAAA,KAAK,sBAAsB;QAEzB4N,IAAI,CAACiH,QAAQ,GAAG,IAAI,CAAA;AACpB,QAAA,MAAA;AAEF,MAAA,KAAK,wBAAwB;AAC3B,QAAA,IACEjH,IAAI,CAACkH,UAAU,CAACjY,MAAM,KAAK,CAAC;QAE5B+Q,IAAI,CAACkH,UAAU,CAAC,CAAC,CAAC,CAAC9U,IAAI,KAAK,0BAA0B,EACtD;UAEA4N,IAAI,CAAC5N,IAAI,GAAG,sBAAsB,CAAA;UAElC4N,IAAI,CAACiH,QAAQ,GAAGjH,IAAI,CAACkH,UAAU,CAAC,CAAC,CAAC,CAACD,QAAQ,CAAA;UAC3C,OAAOjH,IAAI,CAACkH,UAAU,CAAA;AACxB,SAAA;;AAGF,MAAA,KAAK,0BAA0B;AAC7B,QAAA;AAAA,UAAA,IAAA,qBAAA,CAAA;UACE,MAAM;AAAEC,YAAAA,WAAAA;AAAY,WAAC,GAAGnH,IAAI,CAAA;AAC5B,UAAA,IACE,CAAAmH,WAAW,IAAA,IAAA,GAAA,KAAA,CAAA,GAAXA,WAAW,CAAE/U,IAAI,MAAK,kBAAkB,IACxC,CAAA,CAAA,qBAAA,GAAA+U,WAAW,CAACN,UAAU,qBAAtB,qBAAwB5X,CAAAA,MAAM,IAAG,CAAC;AAElCkY,UAAAA,WAAW,CAAC7Y,KAAK,KAAK0R,IAAI,CAAC1R,KAAK,EAChC;YACA,IAAI,CAAC8Y,kBAAkB,CACrBpH,IAAI;AAKJ8G,YAAAA,cAAc,CACf,CAAA;AACH,WAAA;AACF,SAAA;AAEA,QAAA,MAAA;AAAM,KAAA;AAGV,IAAA,OAAO9G,IAAI,CAAA;AACb,GAAA;EAEAqH,cAAc,CACZC,IAAkB,EAClBlC,QAAkB,EAClBmC,OAAmC,EACnCR,KAA4B,EAC5B;AACA,IAAA,MAAM/G,IAAI,GAAG,KAAK,CAACqH,cAAc,CAACC,IAAI,EAAElC,QAAQ,EAAEmC,OAAO,EAAER,KAAK,CAAC,CAAA;IAEjE,IAAIA,KAAK,CAACS,mBAAmB,EAAE;MAE7B,IACExH,IAAI,CAAC5N,IAAI,KAAK,0BAA0B,IACxC4N,IAAI,CAAC5N,IAAI,KAAK,wBAAwB,EACtC;QACA4N,IAAI,CAAC5N,IAAI,GAAG4N,IAAI,CAAC5N,IAAI,CAACqV,SAAS,CAAC,CAAC,CAAC,CAAA;AACpC,OAAA;;MACA,IAAIV,KAAK,CAACW,IAAI,EAAE;AACd,QAAA,MAAMC,KAAK,GAAG,IAAI,CAACC,eAAe,CAAC5H,IAAI,CAAC,CAAA;QACxC2H,KAAK,CAAChG,UAAU,GAAG3B,IAAI,CAAA;AACvB,QAAA,OAAO,IAAI,CAACyE,UAAU,CAACkD,KAAK,EAAE,iBAAiB,CAAC,CAAA;AAClD,OAAA;AACF,KAAC,MAAM,IACL3H,IAAI,CAAC5N,IAAI,KAAK,kBAAkB,IAChC4N,IAAI,CAAC5N,IAAI,KAAK,gBAAgB,EAC9B;MACA4N,IAAI,CAACqG,QAAQ,GAAG,KAAK,CAAA;AACvB,KAAA;AAEA,IAAA,OAAOrG,IAAI,CAAA;AACb,GAAA;EAEA6H,wBAAwB,CAAC7H,IAAY,EAAW;AAC9C,IAAA,IAAIA,IAAI,CAAC5N,IAAI,KAAK,iBAAiB,EAAE;MACnC4N,IAAI,GAAGA,IAAI,CAAC2B,UAAU,CAAA;AACxB,KAAA;AACA,IAAA,OAAO,KAAK,CAACkG,wBAAwB,CAAC7H,IAAI,CAAC,CAAA;AAC7C,GAAA;EAEA8H,eAAe,CAAC9H,IAAY,EAAW;AACrC,IAAA,OAAOA,IAAI,CAAC5N,IAAI,KAAK,iBAAiB,CAAA;AACxC,GAAA;;EAGAgQ,gBAAgB,CAACpC,IAAY,EAAW;AACtC,IAAA,OAAOA,IAAI,CAAC5N,IAAI,KAAK,UAAU,IAAI4N,IAAI,CAACxN,IAAI,KAAK,MAAM,IAAI,CAACwN,IAAI,CAACsC,MAAM,CAAA;AACzE,GAAA;EAEAyF,cAAc,CAAC/H,IAAY,EAAW;AACpC,IAAA,OAAOA,IAAI,CAACsC,MAAM,IAAItC,IAAI,CAACxN,IAAI,KAAK,KAAK,IAAIwN,IAAI,CAACxN,IAAI,KAAK,KAAK,CAAA;AAClE,GAAA;AAEAwV,EAAAA,YAAY,CACVhI,IAAe,EACf5N,IAAe,EACf6V,MAAgB,EACb;AACH,IAAA,OAAOlI,gBAAgB,CAAC,KAAK,CAACiI,YAAY,CAAChI,IAAI,EAAE5N,IAAI,EAAE6V,MAAM,CAAC,CAAC,CAAA;AACjE,GAAA;AAEAb,EAAAA,kBAAkB,CAACpH,IAAY,EAAEoF,QAAkB,EAAE;AACnD,IAAA,KAAK,CAACgC,kBAAkB,CAACpH,IAAI,EAAEoF,QAAQ,CAAC,CAAA;IACxCrF,gBAAgB,CAACC,IAAI,CAAC,CAAA;AACxB,GAAA;EAEAkI,gBAAgB,CACdlI,IAAc,EACdiI,MAAgB,GAAG,IAAI,CAAClB,KAAK,CAACoB,aAAa,EACrC;AACN,IAAA,KAAK,CAACD,gBAAgB,CAAClI,IAAI,EAAEiI,MAAM,CAAC,CAAA;IACpClI,gBAAgB,CAACC,IAAI,CAAC,CAAA;AACxB,GAAA;AACF,CAAC;;AC3jBI,MAAMoI,UAAU,CAAC;AACtBpa,EAAAA,WAAW,CAAC4P,KAAa,EAAEyK,aAAuB,EAAE;AAAA,IAAA,IAAA,CAKpDzK,KAAK,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACLyK,aAAa,GAAA,KAAA,CAAA,CAAA;IALX,IAAI,CAACzK,KAAK,GAAGA,KAAK,CAAA;AAClB,IAAA,IAAI,CAACyK,aAAa,GAAG,CAAC,CAACA,aAAa,CAAA;AACtC,GAAA;AAIF,CAAA;AAEA,MAAMC,KAEL,GAAG;AACFC,EAAAA,KAAK,EAAE,IAAIH,UAAU,CAAC,GAAG,CAAC;AAC1BI,EAAAA,MAAM,EAAE,IAAIJ,UAAU,CAAC,MAAM,CAAC;AAC9BK,EAAAA,MAAM,EAAE,IAAIL,UAAU,CAAC,OAAO,CAAC;AAC/BM,EAAAA,MAAM,EAAE,IAAIN,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAA;AAC/C,CAAC,CAAA;;AAEkC;EACjCE,KAAK,CAAChJ,QAAQ,GAAG,IAAI8I,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AAC5C;;ACDA,MAAMO,UAAU,GAAG,IAAI,CAAA;AACvB,MAAMC,UAAU,GAAG,IAAI,CAAA;AACvB,MAAMC,MAAM,GAAG,IAAI,CAAA;AACnB,MAAMC,QAAQ,GAAG,IAAI,CAAA;AACrB,MAAMzW,MAAM,GAAG,IAAI,CAAA;AACnB,MAAM0W,OAAO,GAAG,IAAI,CAAA;AAoBb,MAAMC,iBAAiB,CAAC;AAiB7Bhb,EAAAA,WAAW,CAACib,KAAa,EAAEC,IAAkB,GAAG,EAAE,EAAE;AAAA,IAAA,IAAA,CAhBpDD,KAAK,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACLnO,OAAO,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACP6N,UAAU,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACVC,UAAU,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACVO,gBAAgB,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CAChBN,MAAM,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACNC,QAAQ,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACRzW,MAAM,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACN0W,OAAO,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACPK,KAAK,GAAA,KAAA,CAAA,CAAA;IAQH,IAAI,CAACH,KAAK,GAAGA,KAAK,CAAA;AAClB,IAAA,IAAI,CAACnO,OAAO,GAAGoO,IAAI,CAACpO,OAAO,CAAA;AAC3B,IAAA,IAAI,CAAC6N,UAAU,GAAG,CAAC,CAACO,IAAI,CAACP,UAAU,CAAA;AACnC,IAAA,IAAI,CAACC,UAAU,GAAG,CAAC,CAACM,IAAI,CAACN,UAAU,CAAA;AACnC,IAAA,IAAI,CAACO,gBAAgB,GAAG,CAAC,CAACD,IAAI,CAACC,gBAAgB,CAAA;AAC/C,IAAA,IAAI,CAACN,MAAM,GAAG,CAAC,CAACK,IAAI,CAACL,MAAM,CAAA;AAC3B,IAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,CAACI,IAAI,CAACJ,QAAQ,CAAA;AAC/B,IAAA,IAAI,CAACzW,MAAM,GAAG,CAAC,CAAC6W,IAAI,CAAC7W,MAAM,CAAA;AAC3B,IAAA,IAAI,CAAC0W,OAAO,GAAG,CAAC,CAACG,IAAI,CAACH,OAAO,CAAA;AAC7B,IAAA,IAAI,CAACK,KAAK,GAAGF,IAAI,CAACE,KAAK,IAAI,IAAI,GAAGF,IAAI,CAACE,KAAK,GAAG,IAAI,CAAA;AAChB,IAAA;MACjC,IAAI,CAACC,aAAa,GAAG,IAAI,CAAA;AAC3B,KAAA;AACF,GAAA;AACF,CAAA;;AAGO,MAAMC,UAAQ,GAAG,IAAIC,GAAG,EAAqB,CAAA;AAEpD,SAASC,aAAa,CAACxR,IAAY,EAAEqI,OAAqB,GAAG,EAAE,EAAa;EAC1EA,OAAO,CAACvF,OAAO,GAAG9C,IAAI,CAAA;AACtB,EAAA,MAAM4F,KAAK,GAAG6L,WAAW,CAACzR,IAAI,EAAEqI,OAAO,CAAC,CAAA;AACxCiJ,EAAAA,UAAQ,CAACha,GAAG,CAAC0I,IAAI,EAAE4F,KAAK,CAAC,CAAA;AACzB,EAAA,OAAOA,KAAK,CAAA;AACd,CAAA;AAEA,SAAS8L,WAAW,CAAC1R,IAAY,EAAEoR,KAAa,EAAE;EAChD,OAAOK,WAAW,CAACzR,IAAI,EAAE;IAAE2Q,UAAU;AAAES,IAAAA,KAAAA;AAAM,GAAC,CAAC,CAAA;AACjD,CAAA;AAEA,IAAIO,gBAAgB,GAAG,CAAC,CAAC,CAAA;AAClB,MAAMC,UAA+B,GAAG,EAAE,CAAA;AACjD,MAAMC,WAAqB,GAAG,EAAE,CAAA;AAChC,MAAMC,WAAqB,GAAG,EAAE,CAAA;AAChC,MAAMC,gBAA2B,GAAG,EAAE,CAAA;AACtC,MAAMC,gBAA2B,GAAG,EAAE,CAAA;AACtC,MAAMC,aAAwB,GAAG,EAAE,CAAA;AAEnC,SAASR,WAAW,CAACzR,IAAY,EAAEqI,OAAqB,GAAG,EAAE,EAAa;AAAA,EAAA,IAAA,cAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,eAAA,CAAA;AACxE,EAAA,EAAEsJ,gBAAgB,CAAA;AAClBE,EAAAA,WAAW,CAACnG,IAAI,CAAC1L,IAAI,CAAC,CAAA;EACtB8R,WAAW,CAACpG,IAAI,CAACrD,CAAAA,cAAAA,GAAAA,OAAO,CAAC+I,KAAK,KAAA,IAAA,GAAA,cAAA,GAAI,CAAC,CAAC,CAAC,CAAA;EACrCW,gBAAgB,CAACrG,IAAI,CAACrD,CAAAA,mBAAAA,GAAAA,OAAO,CAACsI,UAAU,KAAA,IAAA,GAAA,mBAAA,GAAI,KAAK,CAAC,CAAA;EAClDqB,gBAAgB,CAACtG,IAAI,CAACrD,CAAAA,mBAAAA,GAAAA,OAAO,CAACuI,UAAU,KAAA,IAAA,GAAA,mBAAA,GAAI,KAAK,CAAC,CAAA;EAClDqB,aAAa,CAACvG,IAAI,CAACrD,CAAAA,eAAAA,GAAAA,OAAO,CAAChO,MAAM,KAAA,IAAA,GAAA,eAAA,GAAI,KAAK,CAAC,CAAA;EAC3CuX,UAAU,CAAClG,IAAI,CAAC,IAAIsF,iBAAiB,CAAChR,IAAI,EAAEqI,OAAO,CAAC,CAAC,CAAA;AAErD,EAAA,OAAOsJ,gBAAgB,CAAA;AACzB,CAAA;AAEA,SAASO,iBAAiB,CACxBlS,IAAY,EACZqI,OAAqB,GAAG,EAAE,EACf;AAAA,EAAA,IAAA,eAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,gBAAA,CAAA;AACX,EAAA,EAAEsJ,gBAAgB,CAAA;AAClBL,EAAAA,UAAQ,CAACha,GAAG,CAAC0I,IAAI,EAAE2R,gBAAgB,CAAC,CAAA;AACpCE,EAAAA,WAAW,CAACnG,IAAI,CAAC1L,IAAI,CAAC,CAAA;EACtB8R,WAAW,CAACpG,IAAI,CAACrD,CAAAA,eAAAA,GAAAA,OAAO,CAAC+I,KAAK,KAAA,IAAA,GAAA,eAAA,GAAI,CAAC,CAAC,CAAC,CAAA;EACrCW,gBAAgB,CAACrG,IAAI,CAACrD,CAAAA,oBAAAA,GAAAA,OAAO,CAACsI,UAAU,KAAA,IAAA,GAAA,oBAAA,GAAI,KAAK,CAAC,CAAA;EAClDqB,gBAAgB,CAACtG,IAAI,CAACrD,CAAAA,oBAAAA,GAAAA,OAAO,CAACuI,UAAU,KAAA,IAAA,GAAA,oBAAA,GAAI,KAAK,CAAC,CAAA;EAClDqB,aAAa,CAACvG,IAAI,CAACrD,CAAAA,gBAAAA,GAAAA,OAAO,CAAChO,MAAM,KAAA,IAAA,GAAA,gBAAA,GAAI,KAAK,CAAC,CAAA;EAE3CuX,UAAU,CAAClG,IAAI,CAAC,IAAIsF,iBAAiB,CAAC,MAAM,EAAE3I,OAAO,CAAC,CAAC,CAAA;AAEvD,EAAA,OAAOsJ,gBAAgB,CAAA;AACzB,CAAA;;AAOO,MAAMQ,EAAE,GAAG;AAEhBC,EAAAA,QAAQ,EAAEX,WAAW,CAAC,GAAG,EAAE;IAAEd,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACtDyB,EAAAA,YAAY,EAAEZ,WAAW,CAAC,IAAI,EAAE;IAAEd,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC3D0B,EAAAA,WAAW,EAAEb,WAAW,CAAC,IAAI,EAAE;IAAEd,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC1D2B,EAAAA,QAAQ,EAAEd,WAAW,CAAC,GAAG,CAAC;AAC1Be,EAAAA,WAAW,EAAEf,WAAW,CAAC,IAAI,CAAC;AAC9BgB,EAAAA,MAAM,EAAEhB,WAAW,CAAC,GAAG,EAAE;IAAEd,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpD8B,EAAAA,SAAS,EAAEjB,WAAW,CAAC,IAAI,EAAE;IAAEd,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACxD+B,EAAAA,UAAU,EAAElB,WAAW,CAAC,IAAI,EAAE;IAAEd,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACzDgC,EAAAA,MAAM,EAAEnB,WAAW,CAAC,GAAG,CAAC;AACxBoB,EAAAA,SAAS,EAAEpB,WAAW,CAAC,IAAI,CAAC;AAC5BqB,EAAAA,MAAM,EAAErB,WAAW,CAAC,GAAG,EAAE;IAAEd,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpDmC,EAAAA,MAAM,EAAEtB,WAAW,CAAC,GAAG,CAAC;AACxBuB,EAAAA,KAAK,EAAEvB,WAAW,CAAC,GAAG,EAAE;AAAEd,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACvCsC,EAAAA,IAAI,EAAExB,WAAW,CAAC,GAAG,EAAE;AAAEd,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACtCuC,EAAAA,KAAK,EAAEzB,WAAW,CAAC,GAAG,EAAE;AAAEd,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACvCwC,EAAAA,WAAW,EAAE1B,WAAW,CAAC,IAAI,EAAE;AAAEd,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC9CyC,EAAAA,GAAG,EAAE3B,WAAW,CAAC,GAAG,CAAC;AACrB4B,EAAAA,QAAQ,EAAE5B,WAAW,CAAC,GAAG,EAAE;AAAEd,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC1C2C,EAAAA,WAAW,EAAE7B,WAAW,CAAC,IAAI,CAAC;AAC9B8B,EAAAA,KAAK,EAAE9B,WAAW,CAAC,IAAI,EAAE;AAAEd,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACxCrJ,EAAAA,QAAQ,EAAEmK,WAAW,CAAC,UAAU,CAAC;AACjC+B,EAAAA,QAAQ,EAAE/B,WAAW,CAAC,KAAK,EAAE;AAAEd,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5C8C,EAAAA,SAAS,EAAEhC,WAAW,CAAC,GAAG,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC3C8C,EAAAA,YAAY,EAAEjC,WAAW,CAAC,IAAI,EAAE;IAAEd,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAE3D+C,EAAAA,YAAY,EAAElC,WAAW,CAAC,MAAM,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACjDgD,EAAAA,eAAe,EAAEnC,WAAW,CAAC,OAAO,EAAE;IAAEd,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAEjE1C,EAAAA,EAAE,EAAEuD,WAAW,CAAC,GAAG,CAAC;AACpBoC,EAAAA,IAAI,EAAEpC,WAAW,CAAC,GAAG,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAGtCkD,EAAAA,oBAAoB,EAAErC,WAAW,CAAC,OAAO,CAAC;;AAiB1CsC,EAAAA,EAAE,EAAEtC,WAAW,CAAC,GAAG,EAAE;IAAEd,UAAU;AAAEG,IAAAA,QAAAA;AAAS,GAAC,CAAC;AAC9CxY,EAAAA,MAAM,EAAEmZ,WAAW,CAAC,IAAI,EAAE;IAAEd,UAAU;AAAEG,IAAAA,QAAAA;AAAS,GAAC,CAAC;AACnDkD,EAAAA,WAAW,EAAEvC,WAAW,CAAC,IAAI,EAAE;IAAEd,UAAU;AAAEG,IAAAA,QAAAA;AAAS,GAAC,CAAC;AAIxDmD,EAAAA,SAAS,EAAExC,WAAW,CAAC,IAAI,EAAE;IAAEd,UAAU;AAAEG,IAAAA,QAAAA;AAAS,GAAC,CAAC;AACtDoD,EAAAA,YAAY,EAAEzC,WAAW,CAAC,IAAI,EAAE;IAAEd,UAAU;AAAEG,IAAAA,QAAAA;AAAS,GAAC,CAAC;;AAGzDqD,EAAAA,MAAM,EAAE1C,WAAW,CAAC,OAAO,EAAE;IAAEpX,MAAM;IAAE0W,OAAO;AAAEH,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC7DwD,EAAAA,IAAI,EAAE3C,WAAW,CAAC,GAAG,EAAE;IAAEd,UAAU;IAAEtW,MAAM;AAAEuW,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC1DyD,EAAAA,KAAK,EAAE5C,WAAW,CAAC,GAAG,EAAE;IAAEd,UAAU;IAAEtW,MAAM;AAAEuW,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAI3D0D,EAAAA,WAAW,EAAE7C,WAAW,CAAC,IAAI,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC9C2D,EAAAA,QAAQ,EAAE9C,WAAW,CAAC,IAAI,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAG3C4D,EAAAA,QAAQ,EAAE9C,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9B+C,EAAAA,iBAAiB,EAAE/C,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AACvCgD,EAAAA,SAAS,EAAEhD,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/BiD,EAAAA,UAAU,EAAEjD,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AAChCkD,EAAAA,SAAS,EAAElD,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9BmD,EAAAA,UAAU,EAAEnD,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/BoD,EAAAA,UAAU,EAAEpD,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/BqD,EAAAA,QAAQ,EAAErD,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;AACzCsD,EAAAA,EAAE,EAAEtD,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/BuD,EAAAA,EAAE,EAAEvD,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/BwD,EAAAA,UAAU,EAAExD,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACvCyD,EAAAA,QAAQ,EAAEzD,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACrC0D,EAAAA,SAAS,EAAE1D,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACtC2D,EAAAA,SAAS,EAAE3D,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AACtC4D,EAAAA,OAAO,EAAE7D,WAAW,CAAC,KAAK,EAAE;IAAEd,UAAU;AAAES,IAAAA,KAAK,EAAE,CAAC;IAAE/W,MAAM;AAAEuW,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAEzE2E,EAAAA,MAAM,EAAE9D,WAAW,CAAC,GAAG,EAAE;AAAEL,IAAAA,KAAK,EAAE,EAAE;AAAER,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAEnD4E,EAAAA,IAAI,EAAE/D,WAAW,CAAC,GAAG,EAAE;AAAEL,IAAAA,KAAK,EAAE,EAAA;AAAG,GAAC,CAAC;AACrCqE,EAAAA,KAAK,EAAE/D,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC;AAC3BgE,EAAAA,QAAQ,EAAEjE,WAAW,CAAC,IAAI,EAAE;IAC1Bd,UAAU;AACVS,IAAAA,KAAK,EAAE,EAAE;AACTD,IAAAA,gBAAgB,EAAE,IAAA;AACpB,GAAC,CAAC;AAOFwE,EAAAA,GAAG,EAAEnE,aAAa,CAAC,IAAI,EAAE;IAAEb,UAAU;AAAES,IAAAA,KAAK,EAAE,CAAA;AAAE,GAAC,CAAC;AAClDwE,EAAAA,WAAW,EAAEpE,aAAa,CAAC,YAAY,EAAE;IAAEb,UAAU;AAAES,IAAAA,KAAK,EAAE,CAAA;AAAE,GAAC,CAAC;AAElEyE,EAAAA,MAAM,EAAErE,aAAa,CAAC,OAAO,CAAC;AAC9BsE,EAAAA,KAAK,EAAEtE,aAAa,CAAC,MAAM,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5CoF,EAAAA,MAAM,EAAEvE,aAAa,CAAC,OAAO,CAAC;AAC9BwE,EAAAA,SAAS,EAAExE,aAAa,CAAC,UAAU,CAAC;AACpCyE,EAAAA,SAAS,EAAEzE,aAAa,CAAC,UAAU,CAAC;AACpC0E,EAAAA,QAAQ,EAAE1E,aAAa,CAAC,SAAS,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAClDwF,EAAAA,KAAK,EAAE3E,aAAa,CAAC,MAAM,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5CyF,EAAAA,QAAQ,EAAE5E,aAAa,CAAC,SAAS,CAAC;AAClC6E,EAAAA,SAAS,EAAE7E,aAAa,CAAC,UAAU,EAAE;AAAEZ,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpD0F,EAAAA,GAAG,EAAE9E,aAAa,CAAC,IAAI,CAAC;AACxB+E,EAAAA,OAAO,EAAE/E,aAAa,CAAC,QAAQ,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAChD6F,EAAAA,OAAO,EAAEhF,aAAa,CAAC,QAAQ,CAAC;AAChCiF,EAAAA,MAAM,EAAEjF,aAAa,CAAC,OAAO,EAAE;IAAEb,UAAU;IAAEtW,MAAM;AAAEuW,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAClE8F,EAAAA,IAAI,EAAElF,aAAa,CAAC,KAAK,CAAC;AAC1BmF,EAAAA,IAAI,EAAEnF,aAAa,CAAC,KAAK,CAAC;AAC1BoF,EAAAA,MAAM,EAAEpF,aAAa,CAAC,OAAO,CAAC;AAC9BqF,EAAAA,KAAK,EAAErF,aAAa,CAAC,MAAM,CAAC;AAC5BsF,EAAAA,IAAI,EAAEtF,aAAa,CAAC,KAAK,EAAE;IAAEb,UAAU;AAAEC,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACtDmG,EAAAA,KAAK,EAAEvF,aAAa,CAAC,MAAM,EAAE;AAAEZ,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5CoG,EAAAA,MAAM,EAAExF,aAAa,CAAC,OAAO,EAAE;AAAEZ,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC9CqG,EAAAA,MAAM,EAAEzF,aAAa,CAAC,OAAO,EAAE;AAAEZ,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC9CsG,EAAAA,QAAQ,EAAE1F,aAAa,CAAC,SAAS,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAClDwG,EAAAA,OAAO,EAAE3F,aAAa,CAAC,QAAQ,CAAC;AAChC4F,EAAAA,OAAO,EAAE5F,aAAa,CAAC,QAAQ,EAAE;AAAEZ,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAChDyG,EAAAA,KAAK,EAAE7F,aAAa,CAAC,MAAM,EAAE;AAAEZ,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5C0G,EAAAA,KAAK,EAAE9F,aAAa,CAAC,MAAM,EAAE;AAAEZ,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5C2G,EAAAA,MAAM,EAAE/F,aAAa,CAAC,OAAO,EAAE;AAAEZ,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC9C4G,EAAAA,OAAO,EAAEhG,aAAa,CAAC,QAAQ,EAAE;IAAEb,UAAU;IAAEtW,MAAM;AAAEuW,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpE6G,EAAAA,KAAK,EAAEjG,aAAa,CAAC,MAAM,EAAE;IAAEb,UAAU;IAAEtW,MAAM;AAAEuW,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAChE8G,EAAAA,OAAO,EAAElG,aAAa,CAAC,QAAQ,EAAE;IAAEb,UAAU;IAAEtW,MAAM;AAAEuW,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAEpE+G,EAAAA,GAAG,EAAEnG,aAAa,CAAC,IAAI,EAAE;IAAEX,MAAM;AAAEF,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAChDiH,EAAAA,IAAI,EAAEpG,aAAa,CAAC,KAAK,EAAE;AAAEX,IAAAA,MAAAA;AAAO,GAAC,CAAC;AACtCgH,EAAAA,MAAM,EAAErG,aAAa,CAAC,OAAO,EAAE;AAAEX,IAAAA,MAAAA;AAAO,GAAC,CAAC;;AAM1CiH,EAAAA,GAAG,EAAE5F,iBAAiB,CAAC,IAAI,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5CmH,EAAAA,OAAO,EAAE7F,iBAAiB,CAAC,QAAQ,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpDoH,EAAAA,MAAM,EAAE9F,iBAAiB,CAAC,OAAO,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAClDqH,EAAAA,MAAM,EAAE/F,iBAAiB,CAAC,OAAO,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAClDsH,EAAAA,KAAK,EAAEhG,iBAAiB,CAAC,MAAM,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAChDuH,EAAAA,IAAI,EAAEjG,iBAAiB,CAAC,KAAK,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC9CwH,EAAAA,IAAI,EAAElG,iBAAiB,CAAC,KAAK,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC9CyH,EAAAA,KAAK,EAAEnG,iBAAiB,CAAC,MAAM,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAChD0H,EAAAA,GAAG,EAAEpG,iBAAiB,CAAC,IAAI,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5C2H,EAAAA,KAAK,EAAErG,iBAAiB,CAAC,MAAM,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAChD4H,EAAAA,IAAI,EAAEtG,iBAAiB,CAAC,KAAK,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC9C6H,EAAAA,OAAO,EAAEvG,iBAAiB,CAAC,QAAQ,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpD8H,EAAAA,MAAM,EAAExG,iBAAiB,CAAC,OAAO,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAClD+H,EAAAA,MAAM,EAAEzG,iBAAiB,CAAC,OAAO,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAGlDgI,EAAAA,QAAQ,EAAE1G,iBAAiB,CAAC,SAAS,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACtDiI,EAAAA,OAAO,EAAE3G,iBAAiB,CAAC,QAAQ,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpDkI,EAAAA,QAAQ,EAAE5G,iBAAiB,CAAC,SAAS,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACtDmI,EAAAA,OAAO,EAAE7G,iBAAiB,CAAC,QAAQ,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpDoI,EAAAA,WAAW,EAAE9G,iBAAiB,CAAC,YAAY,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5DqI,EAAAA,UAAU,EAAE/G,iBAAiB,CAAC,WAAW,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC1DsI,EAAAA,MAAM,EAAEhH,iBAAiB,CAAC,OAAO,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAClDuI,EAAAA,GAAG,EAAEjH,iBAAiB,CAAC,IAAI,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC5CwI,EAAAA,OAAO,EAAElH,iBAAiB,CAAC,QAAQ,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpDyI,EAAAA,MAAM,EAAEnH,iBAAiB,CAAC,OAAO,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAClD0I,EAAAA,QAAQ,EAAEpH,iBAAiB,CAAC,SAAS,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACtD2I,EAAAA,UAAU,EAAErH,iBAAiB,CAAC,WAAW,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAE1D4I,EAAAA,MAAM,EAAEtH,iBAAiB,CAAC,OAAO,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAClD6I,EAAAA,SAAS,EAAEvH,iBAAiB,CAAC,UAAU,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACxD8I,EAAAA,OAAO,EAAExH,iBAAiB,CAAC,QAAQ,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAGpD+I,EAAAA,SAAS,EAAEzH,iBAAiB,CAAC,UAAU,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACxDgJ,EAAAA,QAAQ,EAAE1H,iBAAiB,CAAC,SAAS,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACtDiJ,EAAAA,KAAK,EAAE3H,iBAAiB,CAAC,MAAM,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAChDkJ,EAAAA,OAAO,EAAE5H,iBAAiB,CAAC,QAAQ,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACpDmJ,EAAAA,UAAU,EAAE7H,iBAAiB,CAAC,WAAW,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAE1DoJ,EAAAA,UAAU,EAAE9H,iBAAiB,CAAC,WAAW,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC1DqJ,EAAAA,KAAK,EAAE/H,iBAAiB,CAAC,MAAM,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAEhDsJ,EAAAA,OAAO,EAAEhI,iBAAiB,CAAC,QAAQ,EAAE;AAAEtB,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAEpD5Q,EAAAA,IAAI,EAAEyR,WAAW,CAAC,MAAM,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;;AAGzCuJ,EAAAA,MAAM,EAAE1I,WAAW,CAAC,QAAQ,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC7CwJ,EAAAA,GAAG,EAAE3I,WAAW,CAAC,KAAK,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACvC3H,EAAAA,MAAM,EAAEwI,WAAW,CAAC,QAAQ,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC7CzH,EAAAA,OAAO,EAAEsI,WAAW,CAAC,SAAS,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAE/CyJ,EAAAA,MAAM,EAAE5I,WAAW,CAAC,QAAQ,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AAC7C0J,EAAAA,WAAW,EAAE7I,WAAW,CAAC,OAAO,EAAE;AAAEb,IAAAA,UAAAA;AAAW,GAAC,CAAC;AACjD2J,EAAAA,GAAG,EAAE9I,WAAW,CAAC,KAAK,CAAC;AAGvB+I,EAAAA,OAAO,EAAE/I,WAAW,CAAC,SAAS,CAAC;AAC/BgJ,EAAAA,OAAO,EAAEhJ,WAAW,CAAC,SAAS,EAAE;AAAEd,IAAAA,UAAU,EAAE,IAAA;AAAK,GAAC,CAAC;AACrD+J,EAAAA,WAAW,EAAEjJ,WAAW,CAAC,aAAa,EAAE;AAAEb,IAAAA,UAAU,EAAE,IAAA;AAAK,GAAC,CAAC;AAC7D+J,EAAAA,SAAS,EAAElJ,WAAW,CAAC,WAAW,CAAC;AAGnCmJ,EAAAA,WAAW,EAAEnJ,WAAW,CAAC,IAAI,EAAE;AAAEb,IAAAA,UAAU,EAAE,IAAA;GAAM,CAAA;AACrD,CAAU,CAAA;AAEH,SAASiK,iBAAiB,CAACjV,KAAgB,EAAW;AAC3D,EAAA,OAAOA,KAAK,IAAA,EAAU,IAAIA,KAAK,IAAW,GAAA,CAAA;AAC5C,CAAA;AAEO,SAASkV,iCAAiC,CAAClV,KAAgB,EAAW;AAG3E,EAAA,OAAOA,KAAK,IAAa,EAAA,CAAA;AAC3B,CAAA;AAEO,SAASmV,0BAA0B,CAACnV,KAAgB,EAAW;AACpE,EAAA,OAAOA,KAAK,IAAA,EAAU,IAAIA,KAAK,IAAW,GAAA,CAAA;AAC5C,CAAA;AAEO,SAASoV,0BAA0B,CAACpV,KAAgB,EAAW;AACpE,EAAA,OAAOA,KAAK,IAAA,EAAU,IAAIA,KAAK,IAAc,GAAA,CAAA;AAC/C,CAAA;AAEO,SAASqV,0BAA0B,CAACrV,KAAgB,EAAW;EACpE,OAAOmM,gBAAgB,CAACnM,KAAK,CAAC,CAAA;AAChC,CAAA;AAEO,SAASsV,uBAAuB,CAACtV,KAAgB,EAAW;EACjE,OAAOoM,gBAAgB,CAACpM,KAAK,CAAC,CAAA;AAChC,CAAA;AAEO,SAASuV,iBAAiB,CAACvV,KAAgB,EAAW;AAC3D,EAAA,OAAOA,KAAK,IAAA,EAAS,IAAIA,KAAK,IAAmB,EAAA,CAAA;AACnD,CAAA;AAEO,SAASwV,kCAAkC,CAACxV,KAAgB,EAAW;AAC5E,EAAA,OAAOA,KAAK,IAAA,GAAiB,IAAIA,KAAK,IAAc,GAAA,CAAA;AACtD,CAAA;AAEO,SAASyV,WAAW,CAACzV,KAAgB,EAAW;AACrD,EAAA,OAAOA,KAAK,IAAA,EAAU,IAAIA,KAAK,IAAa,EAAA,CAAA;AAC9C,CAAA;AAEO,SAAS0V,cAAc,CAAC1V,KAAgB,EAAW;AACxD,EAAA,OAAOA,KAAK,IAAA,EAAU,IAAIA,KAAK,IAAa,EAAA,CAAA;AAC9C,CAAA;AAEO,SAAS2V,eAAe,CAAC3V,KAAgB,EAAW;AACzD,EAAA,OAAOA,KAAK,IAAA,EAAe,IAAIA,KAAK,IAAkB,EAAA,CAAA;AACxD,CAAA;AAEO,SAAS4V,cAAc,CAAC5V,KAAgB,EAAW;AACxD,EAAA,OAAOA,KAAK,KAAc,EAAA,CAAA;AAC5B,CAAA;AAEO,SAAS6V,aAAa,CAAC7V,KAAgB,EAAW;EACvD,OAAOqM,aAAa,CAACrM,KAAK,CAAC,CAAA;AAC7B,CAAA;AAEO,SAAS8V,qBAAqB,CAAC9V,KAAgB,EAAW;AAC/D,EAAA,OAAOA,KAAK,IAAA,GAAa,IAAIA,KAAK,IAAc,GAAA,CAAA;AAClD,CAAA;AAEO,SAAS+V,yBAAyB,CAAC/V,KAAgB,EAAW;AACnE,EAAA,OAAOA,KAAK,IAAA,GAAgB,IAAIA,KAAK,IAAY,GAAA,CAAA;AACnD,CAAA;AAEO,SAASgW,cAAc,CAAChW,KAAgB,EAAU;EACvD,OAAOiM,WAAW,CAACjM,KAAK,CAAC,CAAA;AAC3B,CAAA;AAEO,SAASiW,uBAAuB,CAACjW,KAAgB,EAAU;EAChE,OAAOkM,WAAW,CAAClM,KAAK,CAAC,CAAA;AAC3B,CAAA;AAMO,SAASkW,uBAAuB,CAAClW,KAAgB,EAAW;AACjE,EAAA,OAAOA,KAAK,KAAgB,EAAA,CAAA;AAC9B,CAAA;AAEO,SAASmW,eAAe,CAACnW,KAAgB,EAAW;AACzD,EAAA,OAAOA,KAAK,IAAA,EAAmB,IAAIA,KAAK,IAAsB,EAAA,CAAA;AAChE,CAAA;AAEO,SAASoW,gBAAgB,CAACpW,KAAgB,EAAqB;EACpE,OAAOgM,UAAU,CAAChM,KAAK,CAAC,CAAA;AAC1B,CAAA;AAMmC;AACjCgM,EAAAA,UAAU,CAAW,CAAA,CAAA,CAACP,aAAa,GAAG4K,OAAO,IAAI;IAC/CA,OAAO,CAACC,GAAG,EAAE,CAAA;GACd,CAAA;AAEDtK,EAAAA,UAAU,CAAW,CAAA,CAAA,CAACP,aAAa,GACjCO,UAAU,CAAe,CAAA,CAAA,CAACP,aAAa,GACvCO,UAAU,CAAiB,EAAA,CAAA,CAACP,aAAa,GACvC4K,OAAO,IAAI;AACTA,IAAAA,OAAO,CAACvQ,IAAI,CAACyQ,KAAE,CAAC5L,KAAK,CAAC,CAAA;GACvB,CAAA;AAELqB,EAAAA,UAAU,CAAc,EAAA,CAAA,CAACP,aAAa,GAAG4K,OAAO,IAAI;AAClD,IAAA,IAAIA,OAAO,CAACA,OAAO,CAAChlB,MAAM,GAAG,CAAC,CAAC,KAAKklB,KAAE,CAAC7U,QAAQ,EAAE;MAC/C2U,OAAO,CAACC,GAAG,EAAE,CAAA;AACf,KAAC,MAAM;AACLD,MAAAA,OAAO,CAACvQ,IAAI,CAACyQ,KAAE,CAAC7U,QAAQ,CAAC,CAAA;AAC3B,KAAA;GACD,CAAA;AAEDsK,EAAAA,UAAU,CAAgB,GAAA,CAAA,CAACP,aAAa,GAAG4K,OAAO,IAAI;IACpDA,OAAO,CAACvQ,IAAI,CAACyQ,KAAE,CAACzL,MAAM,EAAEyL,KAAE,CAAC3L,MAAM,CAAC,CAAA;GACnC,CAAA;AACH;;ACncA,IAAI4L,4BAA4B,GAAG,8qIAA8qI,CAAA;AAEjtI,IAAIC,uBAAuB,GAAG,mkFAAmkF,CAAA;AAEjmF,MAAMC,uBAAuB,GAAG,IAAI3T,MAAM,CACxC,GAAG,GAAGyT,4BAA4B,GAAG,GAAG,CACzC,CAAA;AACD,MAAMG,kBAAkB,GAAG,IAAI5T,MAAM,CACnC,GAAG,GAAGyT,4BAA4B,GAAGC,uBAAuB,GAAG,GAAG,CACnE,CAAA;AAEDD,4BAA4B,GAAGC,uBAAuB,GAAG,IAAI,CAAA;;AAQ7D,MAAMG,0BAA0B,GAAG,CAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,CAAC,CAAA;AAEj+C,MAAMC,qBAAqB,GAAG,CAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,KAAK,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,MAAM,EAAC,GAAG,CAAC,CAAA;;AAKjwB,SAASC,aAAa,CAACjkB,IAAY,EAAEnB,GAAsB,EAAW;EACpE,IAAIuP,GAAG,GAAG,OAAO,CAAA;AACjB,EAAA,KAAK,IAAIpP,CAAC,GAAG,CAAC,EAAER,MAAM,GAAGK,GAAG,CAACL,MAAM,EAAEQ,CAAC,GAAGR,MAAM,EAAEQ,CAAC,IAAI,CAAC,EAAE;AACvDoP,IAAAA,GAAG,IAAIvP,GAAG,CAACG,CAAC,CAAC,CAAA;AACb,IAAA,IAAIoP,GAAG,GAAGpO,IAAI,EAAE,OAAO,KAAK,CAAA;AAE5BoO,IAAAA,GAAG,IAAIvP,GAAG,CAACG,CAAC,GAAG,CAAC,CAAC,CAAA;AACjB,IAAA,IAAIoP,GAAG,IAAIpO,IAAI,EAAE,OAAO,IAAI,CAAA;AAC9B,GAAA;AACA,EAAA,OAAO,KAAK,CAAA;AACd,CAAA;;AAIO,SAASkkB,iBAAiB,CAAClkB,IAAY,EAAW;AACvD,EAAA,IAAIA,IAAI,GAAA,EAAuB,EAAE,OAAOA,IAAI,KAAyB,EAAA,CAAA;AACrE,EAAA,IAAIA,IAAI,IAAA,EAAwB,EAAE,OAAO,IAAI,CAAA;AAC7C,EAAA,IAAIA,IAAI,GAAA,EAAuB,EAAE,OAAOA,IAAI,KAAyB,EAAA,CAAA;AACrE,EAAA,IAAIA,IAAI,IAAA,GAAwB,EAAE,OAAO,IAAI,CAAA;EAC7C,IAAIA,IAAI,IAAI,MAAM,EAAE;AAClB,IAAA,OACEA,IAAI,IAAI,IAAI,IAAI6jB,uBAAuB,CAACM,IAAI,CAACtiB,MAAM,CAACuiB,YAAY,CAACpkB,IAAI,CAAC,CAAC,CAAA;AAE3E,GAAA;AACA,EAAA,OAAOikB,aAAa,CAACjkB,IAAI,EAAE+jB,0BAA0B,CAAC,CAAA;AACxD,CAAA;;AAIO,SAASM,gBAAgB,CAACrkB,IAAY,EAAW;AACtD,EAAA,IAAIA,IAAI,GAAA,EAAmB,EAAE,OAAOA,IAAI,KAAyB,EAAA,CAAA;AACjE,EAAA,IAAIA,IAAI,GAAA,EAAkB,EAAE,OAAO,IAAI,CAAA;AACvC,EAAA,IAAIA,IAAI,GAAA,EAAuB,EAAE,OAAO,KAAK,CAAA;AAC7C,EAAA,IAAIA,IAAI,IAAA,EAAwB,EAAE,OAAO,IAAI,CAAA;AAC7C,EAAA,IAAIA,IAAI,GAAA,EAAuB,EAAE,OAAOA,IAAI,KAAyB,EAAA,CAAA;AACrE,EAAA,IAAIA,IAAI,IAAA,GAAwB,EAAE,OAAO,IAAI,CAAA;EAC7C,IAAIA,IAAI,IAAI,MAAM,EAAE;AAClB,IAAA,OAAOA,IAAI,IAAI,IAAI,IAAI8jB,kBAAkB,CAACK,IAAI,CAACtiB,MAAM,CAACuiB,YAAY,CAACpkB,IAAI,CAAC,CAAC,CAAA;AAC3E,GAAA;AACA,EAAA,OACEikB,aAAa,CAACjkB,IAAI,EAAE+jB,0BAA0B,CAAC,IAC/CE,aAAa,CAACjkB,IAAI,EAAEgkB,qBAAqB,CAAC,CAAA;AAE9C;;AChFA,MAAMM,aAAa,GAAG;AACpBja,EAAAA,OAAO,EAAE,CACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ,CACT;AACDka,EAAAA,MAAM,EAAE,CACN,YAAY,EACZ,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,CACR;AACDC,EAAAA,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,CAAA;AAClC,CAAC,CAAA;AACD,MAAM3L,QAAQ,GAAG,IAAI/L,GAAG,CAACwX,aAAa,CAACja,OAAO,CAAC,CAAA;AAC/C,MAAMoa,sBAAsB,GAAG,IAAI3X,GAAG,CAACwX,aAAa,CAACC,MAAM,CAAC,CAAA;AAC5D,MAAMG,0BAA0B,GAAG,IAAI5X,GAAG,CAACwX,aAAa,CAACE,UAAU,CAAC,CAAA;;AAK7D,SAASG,cAAc,CAACC,IAAY,EAAEC,QAAiB,EAAW;EACvE,OAAQA,QAAQ,IAAID,IAAI,KAAK,OAAO,IAAKA,IAAI,KAAK,MAAM,CAAA;AAC1D,CAAA;;AAOO,SAASE,oBAAoB,CAACF,IAAY,EAAEC,QAAiB,EAAW;AAC7E,EAAA,OAAOF,cAAc,CAACC,IAAI,EAAEC,QAAQ,CAAC,IAAIJ,sBAAsB,CAACM,GAAG,CAACH,IAAI,CAAC,CAAA;AAC3E,CAAA;;AAMO,SAASI,4BAA4B,CAACJ,IAAY,EAAW;AAClE,EAAA,OAAOF,0BAA0B,CAACK,GAAG,CAACH,IAAI,CAAC,CAAA;AAC7C,CAAA;;AAOO,SAASK,wBAAwB,CACtCL,IAAY,EACZC,QAAiB,EACR;EACT,OACEC,oBAAoB,CAACF,IAAI,EAAEC,QAAQ,CAAC,IAAIG,4BAA4B,CAACJ,IAAI,CAAC,CAAA;AAE9E,CAAA;AAEO,SAASM,SAAS,CAACN,IAAY,EAAW;AAC/C,EAAA,OAAO/L,QAAQ,CAACkM,GAAG,CAACH,IAAI,CAAC,CAAA;AAC3B;;AC5EO,SAASO,eAAe,CAC7BC,OAAe,EACfC,IAAY,EACZC,KAAa,EACJ;EACT,OACEF,OAAO,OAAqB,IAC5BC,IAAI,OAAqB,IACzBnB,iBAAiB,CAACoB,KAAK,CAAC,CAAA;AAE5B,CAAA;;AAOA,MAAMC,mBAAmB,GAAG,IAAIzY,GAAG,CAAC,CAClC,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ;AAER,YAAY,EACZ,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO;AAEP,MAAM,EACN,WAAW;AAEX,MAAM,EACN,OAAO,CACR,CAAC,CAAA;AAEK,SAAS0Y,iBAAiB,CAACZ,IAAY,EAAW;AACvD,EAAA,OAAOW,mBAAmB,CAACR,GAAG,CAACH,IAAI,CAAC,CAAA;AACtC;;AC1FO,MAAMa,WAAW,GAAU,WAAW;AAChCC,EAAAA,aAAa,GAAQ,WAAW;AAChCC,EAAAA,cAAc,GAAO,WAAW;AAChCC,EAAAA,WAAW,GAAU,WAAW;AAChCC,EAAAA,kBAAkB,GAAG,WAAW;AAChCC,EAAAA,WAAW,GAAU,WAAW;AAChCC,EAAAA,kBAAkB,GAAG,WAAW;AAChCC,EAAAA,WAAW,GAAU,WAAW;AAChCC,EAAAA,kBAAkB,GAAG,WAAW;AAChCC,EAAAA,eAAe,GAAM,WAAW;AAChCC,EAAAA,SAAS,GAAGT,aAAa,GAAGC,cAAc,GAAGM,kBAAkB,GAAGC,eAAe,CAAA;AAgBvF,MAAME,eAAe,GAAc,cAAgB,CAAA;AAC7CC,EAAAA,cAAc,GAAe,cAAgB,CAAA;AAE7CC,EAAAA,cAAc,GAAe,cAAgB,CAAA;AAC7CC,EAAAA,kBAAkB,GAAW,cAAgB,CAAA;AAC7CC,EAAAA,mBAAmB,GAAU,cAAgB,CAAA;AAC7CC,EAGAC,eAAe,GAAc,eAAiB,CAAA;AAC9CC,EAAAA,gBAAgB,GAAa,eAAiB,CAAA;AAC9CC,EAAAA,kBAAkB,GAAW,eAAiB,CAAA;AAC9CC,EAAAA,wBAAwB,GAAK,eAAiB,CAAA;AAC9CC,EAAAA,yBAAyB,GAAI,eAAiB,CAAA;AAC9CC,EAAAA,0BAA0B,GAAG,eAAiB,CAAA;AAC9CC,EAAAA,oBAAoB,GAAS,gBAAiB;;AAKpD,MAAMC,UAAU,GAAWb,eAAe,GAAGC,cAAc,GAAGE,kBAAkB,GAAII,gBAAgB;AAC9FO,EAAAA,YAAY,GAASd,eAAe,GAAG,CAAC,GAAgBG,kBAAkB,GAAI,CAAC;AAC/EY,EAAAA,QAAQ,GAAaf,eAAe,GAAG,CAAC,GAAgBE,cAAc,GAAQ,CAAC;AAC/Ec,EAAAA,aAAa,GAAQhB,eAAe,GAAG,CAAC,GAAgBI,mBAAmB,GAAG,CAAC;AAC/Ea,EAAAA,iBAAiB,GAAI,CAAC,GAAiBhB,cAAc,GAAG,CAAC,GAAqBM,gBAAgB;AAC9FW,EAAAA,YAAY,GAAS,CAAC,GAAiBjB,cAAc,GAAG,CAAC,GAAqB,CAAC;AAC/EkB,EAAAA,YAAY,GAASnB,eAAe,GAAGC,cAAc,GAAGE,kBAAkB,GAAIK,kBAAkB;AAChGY,EAAAA,eAAe,GAAM,CAAC,GAAiB,CAAC,GAAgB,CAAC,GAAcV,yBAAyB;AAGhGW,EAAAA,SAAS,GAAY,CAAC,GAAiB,CAAC,GAAgB,CAAC,GAAqBf,eAAe;AAC7FgB,EAAAA,YAAY,GAAStB,eAAe,GAAG,CAAC,GAAgB,CAAC,GAAqBM,eAAe;EAE7FiB,kBAAkB,GAAGJ,YAAY,GAAMV,wBAAwB;AAC/De,EAAAA,iBAAiB,GAAI,CAAC,GAAiB,CAAC,GAAgB,CAAC,GAAqBd,yBAAyB;AACvGe,EAAAA,mBAAmB,GAAE,CAAC,GAAiBxB,cAAc,GAAG,CAAC,GAAqBW,oBAAoB;AAElGc,EAAAA,oBAAoB,GAAGf,0BAA0B,CAAA;AAgBvD,MAAMgB,yBAAyB,GAAG,KAAM;AAClCC,EAAAA,yBAAyB,GAAG,KAAM;AAClCC,EAAAA,yBAAyB,GAAG,KAAM;EAClCC,2BAA2B,GAAGF,yBAAyB,GAAGC,yBAAyB,CAAA;;AAGzF,MAAME,2BAA2B,GAAKH,yBAAyB,GAAGD,yBAAyB;EACrFK,2BAA2B,GAAKH,yBAAyB,GAAGF,yBAAyB;AACrFM,EAAAA,6BAA6B,GAAGL,yBAAyB;AACzDM,EAAAA,6BAA6B,GAAGL,yBAAyB;AACzDM,EAAAA,mBAAmB,GAAa,CAAC;;ACpEvC,MAAMC,KAAK,CAAC;;EASjBjrB,WAAW,CAACyS,KAAiB,EAAE;AAAA,IAAA,IAAA,CAN/ByY,GAAG,GAAgB,IAAI3b,GAAG,EAAE,CAAA;AAAA,IAAA,IAAA,CAE5B4b,OAAO,GAAgB,IAAI5b,GAAG,EAAE,CAAA;AAAA,IAAA,IAAA,CAEhC6b,SAAS,GAAgB,IAAI7b,GAAG,EAAE,CAAA;IAGhC,IAAI,CAACkD,KAAK,GAAGA,KAAK,CAAA;AACpB,GAAA;AACF,CAAA;;AAIe,MAAM4Y,YAAY,CAA+B;AAM9DrrB,EAAAA,WAAW,CAACsrB,MAAiB,EAAEhE,QAAiB,EAAE;AAAA,IAAA,IAAA,CALlDgE,MAAM,GAAA,KAAA,CAAA,CAAA;IAAA,IACNC,CAAAA,UAAU,GAAkB,EAAE,CAAA;AAAA,IAAA,IAAA,CAC9BjE,QAAQ,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACRkE,gBAAgB,GAA0B,IAAIjQ,GAAG,EAAE,CAAA;IAGjD,IAAI,CAAC+P,MAAM,GAAGA,MAAM,CAAA;IACpB,IAAI,CAAChE,QAAQ,GAAGA,QAAQ,CAAA;AAC1B,GAAA;AAEA,EAAA,IAAImE,UAAU,GAAG;IACf,OAAO,CAAC,IAAI,CAACC,YAAY,EAAE,CAACjZ,KAAK,GAAG0V,aAAa,IAAI,CAAC,CAAA;AACxD,GAAA;AACA,EAAA,IAAIwD,UAAU,GAAG;IACf,OAAO,CAAC,IAAI,CAACC,oBAAoB,EAAE,GAAGxD,cAAc,IAAI,CAAC,CAAA;AAC3D,GAAA;AACA,EAAA,IAAIyD,UAAU,GAAG;IACf,OAAO,CAAC,IAAI,CAACC,qBAAqB,EAAE,GAAGvD,WAAW,IAAI,CAAC,CAAA;AACzD,GAAA;AACA,EAAA,IAAInS,gBAAgB,GAAG;IACrB,OAAO,CAAC,IAAI,CAAC0V,qBAAqB,EAAE,GAAGtD,kBAAkB,IAAI,CAAC,CAAA;AAChE,GAAA;AACA,EAAA,IAAIuD,OAAO,GAAG;IACZ,OAAO,CAAC,IAAI,CAACD,qBAAqB,EAAE,GAAGrD,WAAW,IAAI,CAAC,CAAA;AACzD,GAAA;AACA,EAAA,IAAIuD,+BAA+B,GAAG;AACpC,IAAA,MAAMvZ,KAAK,GAAG,IAAI,CAACqZ,qBAAqB,EAAE,CAAA;AAC1C,IAAA,OAAO,CAACrZ,KAAK,GAAGgW,WAAW,IAAI,CAAC,IAAI,CAAChW,KAAK,GAAG2V,cAAc,MAAM,CAAC,CAAA;AACpE,GAAA;AACA,EAAA,IAAI6D,aAAa,GAAG;AAClB,IAAA,KAAK,IAAIxqB,CAAC,GAAG,IAAI,CAAC8pB,UAAU,CAACtqB,MAAM,GAAG,CAAC,GAAIQ,CAAC,EAAE,EAAE;MAC9C,MAAM;AAAEgR,QAAAA,KAAAA;AAAM,OAAC,GAAG,IAAI,CAAC8Y,UAAU,CAAC9pB,CAAC,CAAC,CAAA;MACpC,IAAIgR,KAAK,GAAGiW,kBAAkB,EAAE;AAC9B,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;AACA,MAAA,IAAIjW,KAAK,IAAImW,SAAS,GAAGH,WAAW,CAAC,EAAE;AAErC,QAAA,OAAO,KAAK,CAAA;AACd,OAAA;AACF,KAAA;AACF,GAAA;AACA,EAAA,IAAIyD,kBAAkB,GAAG;IACvB,OAAO,CAAC,IAAI,CAACJ,qBAAqB,EAAE,GAAG1D,cAAc,IAAI,CAAC,CAAA;AAC5D,GAAA;AACA,EAAA,IAAI+D,mBAAmB,GAAG;IACxB,OAAO,IAAI,CAACC,0BAA0B,CAAC,IAAI,CAACV,YAAY,EAAE,CAAC,CAAA;AAC7D,GAAA;EAEAW,WAAW,CAAC5Z,KAAiB,EAAS;AACpC,IAAA,OAAO,IAAIwY,KAAK,CAACxY,KAAK,CAAC,CAAA;AACzB,GAAA;EAEA6Z,KAAK,CAAC7Z,KAAiB,EAAE;IAGvB,IAAI,CAAC8Y,UAAU,CAAC7V,IAAI,CAAC,IAAI,CAAC2W,WAAW,CAAC5Z,KAAK,CAAC,CAAC,CAAA;AAC/C,GAAA;AAEA8Z,EAAAA,IAAI,GAAe;AACjB,IAAA,MAAMC,KAAK,GAAG,IAAI,CAACjB,UAAU,CAACrF,GAAG,EAAE,CAAA;IACnC,OAAOsG,KAAK,CAAC/Z,KAAK,CAAA;AACpB,GAAA;;EAKA2Z,0BAA0B,CAACI,KAAa,EAAW;IACjD,OAAO,CAAC,EACNA,KAAK,CAAC/Z,KAAK,IAAI2V,cAAc,GAAGM,kBAAkB,CAAC,IAClD,CAAC,IAAI,CAAC4C,MAAM,CAAChE,QAAQ,IAAIkF,KAAK,CAAC/Z,KAAK,GAAG0V,aAAc,CACvD,CAAA;AACH,GAAA;AAEAsE,EAAAA,WAAW,CAACziB,IAAY,EAAE0iB,WAAyB,EAAElc,GAAa,EAAE;AAClE,IAAA,IAAIgc,KAAK,GAAG,IAAI,CAACd,YAAY,EAAE,CAAA;AAC/B,IAAA,IAAIgB,WAAW,GAAG1D,kBAAkB,IAAI0D,WAAW,GAAGzD,mBAAmB,EAAE;MACzE,IAAI,CAAC0D,yBAAyB,CAACH,KAAK,EAAExiB,IAAI,EAAE0iB,WAAW,EAAElc,GAAG,CAAC,CAAA;MAE7D,IAAIkc,WAAW,GAAGzD,mBAAmB,EAAE;AACrCuD,QAAAA,KAAK,CAACpB,SAAS,CAACwB,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AAC3B,OAAC,MAAM;AACLwiB,QAAAA,KAAK,CAACrB,OAAO,CAACyB,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AACzB,OAAA;MAEA,IAAI0iB,WAAW,GAAG1D,kBAAkB,EAAE;AACpC,QAAA,IAAI,CAAC6D,kBAAkB,CAACL,KAAK,EAAExiB,IAAI,CAAC,CAAA;AACtC,OAAA;AACF,KAAC,MAAM,IAAI0iB,WAAW,GAAG3D,cAAc,EAAE;AACvC,MAAA,KAAK,IAAItnB,CAAC,GAAG,IAAI,CAAC8pB,UAAU,CAACtqB,MAAM,GAAG,CAAC,EAAEQ,CAAC,IAAI,CAAC,EAAE,EAAEA,CAAC,EAAE;AACpD+qB,QAAAA,KAAK,GAAG,IAAI,CAACjB,UAAU,CAAC9pB,CAAC,CAAC,CAAA;QAC1B,IAAI,CAACkrB,yBAAyB,CAACH,KAAK,EAAExiB,IAAI,EAAE0iB,WAAW,EAAElc,GAAG,CAAC,CAAA;AAC7Dgc,QAAAA,KAAK,CAACtB,GAAG,CAAC0B,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AACnB,QAAA,IAAI,CAAC6iB,kBAAkB,CAACL,KAAK,EAAExiB,IAAI,CAAC,CAAA;AAEpC,QAAA,IAAIwiB,KAAK,CAAC/Z,KAAK,GAAGmW,SAAS,EAAE,MAAA;AAC/B,OAAA;AACF,KAAA;IACA,IAAI,IAAI,CAAC0C,MAAM,CAAChE,QAAQ,IAAIkF,KAAK,CAAC/Z,KAAK,GAAG0V,aAAa,EAAE;AACvD,MAAA,IAAI,CAACqD,gBAAgB,CAACsB,MAAM,CAAC9iB,IAAI,CAAC,CAAA;AACpC,KAAA;AACF,GAAA;AAEA6iB,EAAAA,kBAAkB,CAACL,KAAa,EAAExiB,IAAY,EAAE;IAC9C,IAAI,IAAI,CAACshB,MAAM,CAAChE,QAAQ,IAAIkF,KAAK,CAAC/Z,KAAK,GAAG0V,aAAa,EAAE;AACvD,MAAA,IAAI,CAACqD,gBAAgB,CAACsB,MAAM,CAAC9iB,IAAI,CAAC,CAAA;AACpC,KAAA;AACF,GAAA;EAEA2iB,yBAAyB,CACvBH,KAAa,EACbxiB,IAAY,EACZ0iB,WAAyB,EACzBlc,GAAa,EACb;IACA,IAAI,IAAI,CAACuc,mBAAmB,CAACP,KAAK,EAAExiB,IAAI,EAAE0iB,WAAW,CAAC,EAAE;MACtD,IAAI,CAACpB,MAAM,CAACrT,KAAK,CAACxG,MAAM,CAAChD,gBAAgB,EAAE;AACzCyJ,QAAAA,EAAE,EAAE1H,GAAG;AACP/P,QAAAA,cAAc,EAAEuJ,IAAAA;AAClB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AAEA+iB,EAAAA,mBAAmB,CACjBP,KAAa,EACbxiB,IAAY,EACZ0iB,WAAyB,EAChB;AACT,IAAA,IAAI,EAAEA,WAAW,GAAG7D,eAAe,CAAC,EAAE,OAAO,KAAK,CAAA;IAElD,IAAI6D,WAAW,GAAG1D,kBAAkB,EAAE;MACpC,OACEwD,KAAK,CAACrB,OAAO,CAAC3D,GAAG,CAACxd,IAAI,CAAC,IACvBwiB,KAAK,CAACpB,SAAS,CAAC5D,GAAG,CAACxd,IAAI,CAAC,IACzBwiB,KAAK,CAACtB,GAAG,CAAC1D,GAAG,CAACxd,IAAI,CAAC,CAAA;AAEvB,KAAA;IAEA,IAAI0iB,WAAW,GAAGzD,mBAAmB,EAAE;MACrC,OACEuD,KAAK,CAACrB,OAAO,CAAC3D,GAAG,CAACxd,IAAI,CAAC,IACtB,CAAC,IAAI,CAACoiB,0BAA0B,CAACI,KAAK,CAAC,IAAIA,KAAK,CAACtB,GAAG,CAAC1D,GAAG,CAACxd,IAAI,CAAE,CAAA;AAEpE,KAAA;IAEA,OACGwiB,KAAK,CAACrB,OAAO,CAAC3D,GAAG,CAACxd,IAAI,CAAC,IACtB,EACEwiB,KAAK,CAAC/Z,KAAK,GAAG6V,kBAAkB,IAChCkE,KAAK,CAACrB,OAAO,CAAC6B,MAAM,EAAE,CAAClF,IAAI,EAAE,CAACvmB,KAAK,KAAKyI,IAAI,CAC7C,IACF,CAAC,IAAI,CAACoiB,0BAA0B,CAACI,KAAK,CAAC,IAAIA,KAAK,CAACpB,SAAS,CAAC5D,GAAG,CAACxd,IAAI,CAAE,CAAA;AAE1E,GAAA;EAEAijB,gBAAgB,CAAClX,EAAgB,EAAE;IACjC,MAAM;AAAE/L,MAAAA,IAAAA;AAAK,KAAC,GAAG+L,EAAE,CAAA;AACnB,IAAA,MAAMmX,aAAa,GAAG,IAAI,CAAC3B,UAAU,CAAC,CAAC,CAAC,CAAA;AACxC,IAAA,IACE,CAAC2B,aAAa,CAAC/B,OAAO,CAAC3D,GAAG,CAACxd,IAAI,CAAC,IAChC,CAACkjB,aAAa,CAAChC,GAAG,CAAC1D,GAAG,CAACxd,IAAI,CAAC;IAI5B,CAACkjB,aAAa,CAAC9B,SAAS,CAAC5D,GAAG,CAACxd,IAAI,CAAC,EAClC;AACA,MAAA,IAAI,CAACwhB,gBAAgB,CAAClqB,GAAG,CAAC0I,IAAI,EAAE+L,EAAE,CAACvF,GAAG,CAAClQ,KAAK,CAAC,CAAA;AAC/C,KAAA;AACF,GAAA;AAEAorB,EAAAA,YAAY,GAAW;IACrB,OAAO,IAAI,CAACH,UAAU,CAAC,IAAI,CAACA,UAAU,CAACtqB,MAAM,GAAG,CAAC,CAAC,CAAA;AACpD,GAAA;AAEA2qB,EAAAA,oBAAoB,GAAe;AACjC,IAAA,KAAK,IAAInqB,CAAC,GAAG,IAAI,CAAC8pB,UAAU,CAACtqB,MAAM,GAAG,CAAC,GAAIQ,CAAC,EAAE,EAAE;MAC9C,MAAM;AAAEgR,QAAAA,KAAAA;AAAM,OAAC,GAAG,IAAI,CAAC8Y,UAAU,CAAC9pB,CAAC,CAAC,CAAA;MACpC,IAAIgR,KAAK,GAAGmW,SAAS,EAAE;AACrB,QAAA,OAAOnW,KAAK,CAAA;AACd,OAAA;AACF,KAAA;AACF,GAAA;;AAGAqZ,EAAAA,qBAAqB,GAAe;AAClC,IAAA,KAAK,IAAIrqB,CAAC,GAAG,IAAI,CAAC8pB,UAAU,CAACtqB,MAAM,GAAG,CAAC,GAAIQ,CAAC,EAAE,EAAE;MAC9C,MAAM;AAAEgR,QAAAA,KAAAA;AAAM,OAAC,GAAG,IAAI,CAAC8Y,UAAU,CAAC9pB,CAAC,CAAC,CAAA;AACpC,MAAA,IAAIgR,KAAK,IAAImW,SAAS,GAAGH,WAAW,CAAC,IAAI,EAAEhW,KAAK,GAAG4V,WAAW,CAAC,EAAE;AAC/D,QAAA,OAAO5V,KAAK,CAAA;AACd,OAAA;AACF,KAAA;AACF,GAAA;AACF;;AC7NA,MAAM0a,SAAS,SAASlC,KAAK,CAAC;AAAA,EAAA,WAAA,CAAA,GAAA,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CAE5BmC,gBAAgB,GAAgB,IAAI7d,GAAG,EAAE,CAAA;AAAA,GAAA;AAC3C,CAAA;AAEe,MAAM8d,gBAAgB,SAAShC,YAAY,CAAY;EACpEgB,WAAW,CAAC5Z,KAAiB,EAAa;AACxC,IAAA,OAAO,IAAI0a,SAAS,CAAC1a,KAAK,CAAC,CAAA;AAC7B,GAAA;AAEAga,EAAAA,WAAW,CAACziB,IAAY,EAAE0iB,WAAyB,EAAElc,GAAa,EAAE;AAClE,IAAA,MAAMgc,KAAK,GAAG,IAAI,CAACd,YAAY,EAAE,CAAA;IACjC,IAAIgB,WAAW,GAAGlD,0BAA0B,EAAE;MAC5C,IAAI,CAACmD,yBAAyB,CAACH,KAAK,EAAExiB,IAAI,EAAE0iB,WAAW,EAAElc,GAAG,CAAC,CAAA;AAC7D,MAAA,IAAI,CAACqc,kBAAkB,CAACL,KAAK,EAAExiB,IAAI,CAAC,CAAA;AACpCwiB,MAAAA,KAAK,CAACY,gBAAgB,CAACR,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AAChC,MAAA,OAAA;AACF,KAAA;IAEA,KAAK,CAACyiB,WAAW,CAACziB,IAAI,EAAE0iB,WAAW,EAAElc,GAAG,CAAC,CAAA;AAC3C,GAAA;AAEAuc,EAAAA,mBAAmB,CACjBP,KAAgB,EAChBxiB,IAAY,EACZ0iB,WAAyB,EAChB;AACT,IAAA,IAAI,KAAK,CAACK,mBAAmB,CAACP,KAAK,EAAExiB,IAAI,EAAE0iB,WAAW,CAAC,EAAE,OAAO,IAAI,CAAA;IAEpE,IAAIA,WAAW,GAAGlD,0BAA0B,EAAE;MAC5C,OACE,CAACgD,KAAK,CAACY,gBAAgB,CAAC5F,GAAG,CAACxd,IAAI,CAAC,KAChCwiB,KAAK,CAACrB,OAAO,CAAC3D,GAAG,CAACxd,IAAI,CAAC,IAAIwiB,KAAK,CAACpB,SAAS,CAAC5D,GAAG,CAACxd,IAAI,CAAC,CAAC,CAAA;AAE1D,KAAA;AAEA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEAijB,gBAAgB,CAAClX,EAAgB,EAAE;AACjC,IAAA,IAAI,CAAC,IAAI,CAACwV,UAAU,CAAC,CAAC,CAAC,CAAC6B,gBAAgB,CAAC5F,GAAG,CAACzR,EAAE,CAAC/L,IAAI,CAAC,EAAE;AACrD,MAAA,KAAK,CAACijB,gBAAgB,CAAClX,EAAE,CAAC,CAAA;AAC5B,KAAA;AACF,GAAA;AACF;;ACzCe,MAAMuX,UAAU,CAAC;AAAA,EAAA,WAAA,GAAA;IAAA,IAa9BC,CAAAA,iBAAiB,GAAY,KAAK,CAAA;IAAA,IAClCC,CAAAA,2BAA2B,GAAY,KAAK,CAAA;AAAA,GAAA;EAa5C/U,SAAS,CAACgV,YAA0B,EAAW;AAC7C,IAAA,IAAI,OAAOA,YAAY,KAAK,QAAQ,EAAE;AACpC,MAAA,OAAO,IAAI,CAACC,OAAO,CAAClG,GAAG,CAACiG,YAAY,CAAC,CAAA;AACvC,KAAC,MAAM;AACL,MAAA,MAAM,CAACE,UAAU,EAAEC,aAAa,CAAC,GAAGH,YAAY,CAAA;AAChD,MAAA,IAAI,CAAC,IAAI,CAAChV,SAAS,CAACkV,UAAU,CAAC,EAAE;AAC/B,QAAA,OAAO,KAAK,CAAA;AACd,OAAA;MACA,MAAME,aAAa,GAAG,IAAI,CAACH,OAAO,CAACxsB,GAAG,CAACysB,UAAU,CAAC,CAAA;MAClD,KAAK,MAAMtsB,GAAG,IAAIQ,MAAM,CAACd,IAAI,CAC3B6sB,aAAa,CACd,EAAoC;AACnC,QAAA,IAAI,CAAAC,aAAa,IAAbA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,aAAa,CAAGxsB,GAAG,CAAC,MAAKusB,aAAa,CAACvsB,GAAG,CAAC,EAAE;AAC/C,UAAA,OAAO,KAAK,CAAA;AACd,SAAA;AACF,OAAA;AACA,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACF,GAAA;AAEAuU,EAAAA,eAAe,CAGbkY,MAAkB,EAAE9jB,IAAgB,EAAE;AAAA,IAAA,IAAA,iBAAA,CAAA;IACtC,OAAQ,CAAA,iBAAA,GAAA,IAAI,CAAC0jB,OAAO,CAACxsB,GAAG,CAAC4sB,MAAM,CAAC,KAAA,IAAA,GAAA,KAAA,CAAA,GAAzB,iBACL9jB,CAAAA,IAAI,CACL,CAAA;AACH,GAAA;AACF;;AC1BA,SAAS+jB,mBAAmB,CAAC/b,IAAkB,EAAEgc,QAAwB,EAAE;AACzE,EAAA,IAAIhc,IAAI,CAACic,gBAAgB,KAAKC,SAAS,EAAE;IACvClc,IAAI,CAACic,gBAAgB,GAAGD,QAAQ,CAAA;AAClC,GAAC,MAAM;AACLhc,IAAAA,IAAI,CAACic,gBAAgB,CAACE,OAAO,CAAC,GAAGH,QAAQ,CAAC,CAAA;AAC5C,GAAA;AACF,CAAA;;AAOA,SAASI,kBAAkB,CAACpc,IAAkB,EAAEgc,QAAwB,EAAE;AACxE,EAAA,IAAIhc,IAAI,CAACqc,eAAe,KAAKH,SAAS,EAAE;IACtClc,IAAI,CAACqc,eAAe,GAAGL,QAAQ,CAAA;AACjC,GAAC,MAAM;AACLhc,IAAAA,IAAI,CAACqc,eAAe,CAACF,OAAO,CAAC,GAAGH,QAAQ,CAAC,CAAA;AAC3C,GAAA;AACF,CAAA;;AAOO,SAASM,gBAAgB,CAC9Btc,IAAkB,EAClBgc,QAAyB,EACzB;AACA,EAAA,IAAIhc,IAAI,CAACuc,aAAa,KAAKL,SAAS,EAAE;IACpClc,IAAI,CAACuc,aAAa,GAAGP,QAAQ,CAAA;AAC/B,GAAC,MAAM;AACLhc,IAAAA,IAAI,CAACuc,aAAa,CAACJ,OAAO,CAAC,GAAGH,QAAQ,CAAC,CAAA;AACzC,GAAA;AACF,CAAA;;AAOA,SAASQ,mBAAmB,CAC1Bxc,IAAkB,EAClByc,QAAqB,EACrBC,SAA4B,EAC5B;EACA,IAAIC,WAAW,GAAG,IAAI,CAAA;AACtB,EAAA,IAAIltB,CAAC,GAAGgtB,QAAQ,CAACxtB,MAAM,CAAA;AACvB,EAAA,OAAO0tB,WAAW,KAAK,IAAI,IAAIltB,CAAC,GAAG,CAAC,EAAE;AACpCktB,IAAAA,WAAW,GAAGF,QAAQ,CAAC,EAAEhtB,CAAC,CAAC,CAAA;AAC7B,GAAA;EACA,IAAIktB,WAAW,KAAK,IAAI,IAAIA,WAAW,CAACruB,KAAK,GAAGouB,SAAS,CAACpuB,KAAK,EAAE;AAC/DguB,IAAAA,gBAAgB,CAACtc,IAAI,EAAE0c,SAAS,CAACV,QAAQ,CAAC,CAAA;AAC5C,GAAC,MAAM;AACLD,IAAAA,mBAAmB,CAACY,WAAW,EAAED,SAAS,CAACV,QAAQ,CAAC,CAAA;AACtD,GAAA;AACF,CAAA;AAEe,MAAMY,cAAc,SAAStB,UAAU,CAAC;EACrDuB,UAAU,CAACC,OAAgB,EAAQ;AACjC,IAAA,IAAI,IAAI,CAACtuB,QAAQ,EAAEsuB,OAAO,CAACte,GAAG,CAAChQ,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAAA;IACvD,IAAI,CAACuY,KAAK,CAACiV,QAAQ,CAACtY,IAAI,CAACoZ,OAAO,CAAC,CAAA;AACnC,GAAA;;EAMAC,cAAc,CAAC/c,IAAU,EAAQ;IAC/B,MAAM;AAAEgd,MAAAA,YAAAA;KAAc,GAAG,IAAI,CAACjW,KAAK,CAAA;AACnC,IAAA,MAAMkW,kBAAkB,GAAGD,YAAY,CAAC/tB,MAAM,CAAA;IAC9C,IAAIguB,kBAAkB,KAAK,CAAC,EAAE,OAAA;AAC9B,IAAA,IAAIxtB,CAAC,GAAGwtB,kBAAkB,GAAG,CAAC,CAAA;AAC9B,IAAA,MAAMC,aAAa,GAAGF,YAAY,CAACvtB,CAAC,CAAC,CAAA;AAErC,IAAA,IAAIytB,aAAa,CAAC5uB,KAAK,KAAK0R,IAAI,CAACzR,GAAG,EAAE;MACpC2uB,aAAa,CAACC,WAAW,GAAGnd,IAAI,CAAA;AAChCvQ,MAAAA,CAAC,EAAE,CAAA;AACL,KAAA;IAEA,MAAM;AAAEnB,MAAAA,KAAK,EAAE8uB,SAAAA;AAAU,KAAC,GAAGpd,IAAI,CAAA;AAEjC,IAAA,OAAOvQ,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AAClB,MAAA,MAAMitB,SAAS,GAAGM,YAAY,CAACvtB,CAAC,CAAC,CAAA;AACjC,MAAA,MAAM4tB,UAAU,GAAGX,SAAS,CAACnuB,GAAG,CAAA;MAChC,IAAI8uB,UAAU,GAAGD,SAAS,EAAE;QAO1BV,SAAS,CAACY,cAAc,GAAGtd,IAAI,CAAA;AAC/B,QAAA,IAAI,CAACud,eAAe,CAACb,SAAS,CAAC,CAAA;AAC/BM,QAAAA,YAAY,CAACQ,MAAM,CAAC/tB,CAAC,EAAE,CAAC,CAAC,CAAA;AAC3B,OAAC,MAAM;QACL,IAAI4tB,UAAU,KAAKD,SAAS,EAAE;UAC5BV,SAAS,CAACe,YAAY,GAAGzd,IAAI,CAAA;AAC/B,SAAA;AAEA,QAAA,MAAA;AACF,OAAA;AACF,KAAA;AACF,GAAA;;EAMAud,eAAe,CAACb,SAA4B,EAAE;IAC5C,MAAM;AAAEV,MAAAA,QAAAA;AAAS,KAAC,GAAGU,SAAS,CAAA;IAC9B,IAAIA,SAAS,CAACS,WAAW,KAAK,IAAI,IAAIT,SAAS,CAACe,YAAY,KAAK,IAAI,EAAE;AACrE,MAAA,IAAIf,SAAS,CAACS,WAAW,KAAK,IAAI,EAAE;AAClCpB,QAAAA,mBAAmB,CAACW,SAAS,CAACS,WAAW,EAAEnB,QAAQ,CAAC,CAAA;AACtD,OAAA;AACA,MAAA,IAAIU,SAAS,CAACe,YAAY,KAAK,IAAI,EAAE;AACnCrB,QAAAA,kBAAkB,CAACM,SAAS,CAACe,YAAY,EAAEzB,QAAQ,CAAC,CAAA;AACtD,OAAA;AACF,KAAC,MAAM;MAEL,MAAM;AAAEsB,QAAAA,cAAc,EAAEtd,IAAI;AAAE1R,QAAAA,KAAK,EAAEovB,YAAAA;AAAa,OAAC,GAAGhB,SAAS,CAAA;MAC/D,IAAI,IAAI,CAACiB,KAAK,CAACC,UAAU,CAACF,YAAY,GAAG,CAAC,CAAC,KAAA,EAAoB,EAAE;QAI/D,QAAQ1d,IAAI,CAAC5N,IAAI;AACf,UAAA,KAAK,kBAAkB,CAAA;AACvB,UAAA,KAAK,eAAe,CAAA;AACpB,UAAA,KAAK,kBAAkB;YACrBoqB,mBAAmB,CAACxc,IAAI,EAAEA,IAAI,CAACrQ,UAAU,EAAE+sB,SAAS,CAAC,CAAA;AACrD,YAAA,MAAA;AACF,UAAA,KAAK,gBAAgB,CAAA;AACrB,UAAA,KAAK,wBAAwB;YAC3BF,mBAAmB,CAACxc,IAAI,EAAEA,IAAI,CAACwG,SAAS,EAAEkW,SAAS,CAAC,CAAA;AACpD,YAAA,MAAA;AACF,UAAA,KAAK,qBAAqB,CAAA;AAC1B,UAAA,KAAK,oBAAoB,CAAA;AACzB,UAAA,KAAK,yBAAyB,CAAA;AAC9B,UAAA,KAAK,cAAc,CAAA;AACnB,UAAA,KAAK,aAAa,CAAA;AAClB,UAAA,KAAK,oBAAoB;YACvBF,mBAAmB,CAACxc,IAAI,EAAEA,IAAI,CAACuC,MAAM,EAAEma,SAAS,CAAC,CAAA;AACjD,YAAA,MAAA;AACF,UAAA,KAAK,iBAAiB,CAAA;AACtB,UAAA,KAAK,cAAc,CAAA;AACnB,UAAA,KAAK,iBAAiB;YACpBF,mBAAmB,CAACxc,IAAI,EAAEA,IAAI,CAACyc,QAAQ,EAAEC,SAAS,CAAC,CAAA;AACnD,YAAA,MAAA;AACF,UAAA,KAAK,wBAAwB,CAAA;AAC7B,UAAA,KAAK,mBAAmB;YACtBF,mBAAmB,CAACxc,IAAI,EAAEA,IAAI,CAACkH,UAAU,EAAEwV,SAAS,CAAC,CAAA;AACrD,YAAA,MAAA;AACF,UAAA;AAAS,YAAA;AACPJ,cAAAA,gBAAgB,CAACtc,IAAI,EAAEgc,QAAQ,CAAC,CAAA;AAClC,aAAA;AAAC,SAAA;AAEL,OAAC,MAAM;AACLM,QAAAA,gBAAgB,CAACtc,IAAI,EAAEgc,QAAQ,CAAC,CAAA;AAClC,OAAA;AACF,KAAA;AACF,GAAA;;AAQA6B,EAAAA,yBAAyB,GAAG;IAC1B,MAAM;AAAEb,MAAAA,YAAAA;KAAc,GAAG,IAAI,CAACjW,KAAK,CAAA;AACnC,IAAA,KAAK,IAAItX,CAAC,GAAGutB,YAAY,CAAC/tB,MAAM,GAAG,CAAC,EAAEQ,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AACjD,MAAA,IAAI,CAAC8tB,eAAe,CAACP,YAAY,CAACvtB,CAAC,CAAC,CAAC,CAAA;AACvC,KAAA;AACA,IAAA,IAAI,CAACsX,KAAK,CAACiW,YAAY,GAAG,EAAE,CAAA;AAC9B,GAAA;;EAqBAc,iCAAiC,CAAC9d,IAAU,EAAE;IAC5C,MAAM;AAAEgd,MAAAA,YAAAA;KAAc,GAAG,IAAI,CAACjW,KAAK,CAAA;IACnC,MAAM;AAAE9X,MAAAA,MAAAA;AAAO,KAAC,GAAG+tB,YAAY,CAAA;IAC/B,IAAI/tB,MAAM,KAAK,CAAC,EAAE,OAAA;AAClB,IAAA,MAAMytB,SAAS,GAAGM,YAAY,CAAC/tB,MAAM,GAAG,CAAC,CAAC,CAAA;AAC1C,IAAA,IAAIytB,SAAS,CAACS,WAAW,KAAKnd,IAAI,EAAE;MAClC0c,SAAS,CAACS,WAAW,GAAG,IAAI,CAAA;AAC9B,KAAA;AACF,GAAA;;AASAY,EAAAA,uBAAuB,CAAC/d,IAAU,EAAE1R,KAAa,EAAEC,GAAW,EAAE;IAC9D,MAAM;AAAEyuB,MAAAA,YAAAA;KAAc,GAAG,IAAI,CAACjW,KAAK,CAAA;AACnC,IAAA,MAAMkW,kBAAkB,GAAGD,YAAY,CAAC/tB,MAAM,CAAA;IAC9C,IAAIguB,kBAAkB,KAAK,CAAC,EAAE,OAAA;AAC9B,IAAA,IAAIxtB,CAAC,GAAGwtB,kBAAkB,GAAG,CAAC,CAAA;AAE9B,IAAA,OAAOxtB,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AAClB,MAAA,MAAMitB,SAAS,GAAGM,YAAY,CAACvtB,CAAC,CAAC,CAAA;AACjC,MAAA,MAAM4tB,UAAU,GAAGX,SAAS,CAACnuB,GAAG,CAAA;AAChC,MAAA,MAAMmvB,YAAY,GAAGhB,SAAS,CAACpuB,KAAK,CAAA;MAEpC,IAAIovB,YAAY,KAAKnvB,GAAG,EAAE;QACxBmuB,SAAS,CAACS,WAAW,GAAGnd,IAAI,CAAA;AAC9B,OAAC,MAAM,IAAIqd,UAAU,KAAK/uB,KAAK,EAAE;QAC/BouB,SAAS,CAACe,YAAY,GAAGzd,IAAI,CAAA;AAC/B,OAAC,MAAM,IAAIqd,UAAU,GAAG/uB,KAAK,EAAE;AAC7B,QAAA,MAAA;AACF,OAAA;AACF,KAAA;AACF,GAAA;AACF;;AC/QO,MAAM0vB,SAAS,GAAG,wBAAwB,CAAA;AAC1C,MAAMC,UAAU,GAAG,IAAItd,MAAM,CAACqd,SAAS,CAACzX,MAAM,EAAE,GAAG,CAAC,CAAA;;AAGpD,SAAS2X,SAAS,CAACztB,IAAY,EAAW;AAC/C,EAAA,QAAQA,IAAI;AACV,IAAA,KAAA,EAAA,CAAA;AACA,IAAA,KAAA,EAAA,CAAA;AACA,IAAA,KAAA,IAAA,CAAA;AACA,IAAA,KAAA,IAAA;AACE,MAAA,OAAO,IAAI,CAAA;AAEb,IAAA;AACE,MAAA,OAAO,KAAK,CAAA;AAAC,GAAA;AAEnB,CAAA;AAEO,MAAM0tB,cAAc,GAAG,+BAA+B,CAAA;AAEtD,MAAMC,oBAAoB,GAC/B,gDAAgD,CAAA;;AAM3C,MAAMC,yBAAyB,GAAG,IAAI1d,MAAM;AAIjD,MAAM;AAGJyd,oBAAoB,CAAC7X,MAAM,GAC3B,OAAO;AAGP,0CAA0C,CAACA,MAAM,EACnD,GAAG,CACJ,CAAA;;AAGM,SAAS+X,YAAY,CAAC7tB,IAAY,EAAW;AAClD,EAAA,QAAQA,IAAI;AACV,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAA,EAAA,CAAA;AACA,IAAA,KAAA,GAAA,CAAA;AACA,IAAA,KAAA,IAAA,CAAA;AACA,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM,CAAA;AACX,IAAA,KAAK,MAAM;AACT,MAAA,OAAO,IAAI,CAAA;AAEb,IAAA;AACE,MAAA,OAAO,KAAK,CAAA;AAAC,GAAA;AAEnB;;AChDe,MAAM8tB,KAAK,CAAC;AAAA,EAAA,WAAA,GAAA;AAAA,IAAA,IAAA,CACzBvJ,MAAM,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACNwJ,OAAO,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACPC,SAAS,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CAITrZ,QAAQ,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACR6C,MAAM,GAAA,KAAA,CAAA,CAAA;IAAA,IAeNyW,CAAAA,MAAM,GAAsB,EAAE,CAAA;IAAA,IAG9BC,CAAAA,gBAAgB,GAAW,CAAC,CAAC,CAAA;IAAA,IAM7BC,CAAAA,SAAS,GAAa,EAAE,CAAA;IAAA,IAQxBC,CAAAA,yBAAyB,GAAa,EAAE,CAAA;IAAA,IAGxCC,CAAAA,sBAAsB,GAAY,KAAK,CAAA;IAAA,IACvCC,CAAAA,MAAM,GAAY,KAAK,CAAA;IAAA,IACvBC,CAAAA,kBAAkB,GAAY,KAAK,CAAA;IAAA,IACnCC,CAAAA,cAAc,GAAY,KAAK,CAAA;IAAA,IAC/BC,CAAAA,gBAAgB,GAAY,KAAK,CAAA;IAAA,IACjCC,CAAAA,eAAe,GAAY,KAAK,CAAA;IAAA,IAChCC,CAAAA,iCAAiC,GAAY,KAAK,CAAA;AAAA,IAAA,IAAA,CAGlDC,YAAY,GAAsB;AAChCC,MAAAA,wBAAwB,EAAE,CAAC;AAC3BC,MAAAA,aAAa,EAAE,IAAA;KAChB,CAAA;IAAA,IAGDC,CAAAA,SAAS,GAAY,KAAK,CAAA;IAAA,IAC1BC,CAAAA,0BAA0B,GAAY,KAAK,CAAA;IAAA,IAG3CC,CAAAA,MAAM,GAID,EAAE,CAAA;IAAA,IAGP1D,CAAAA,QAAQ,GAAqB,EAAE,CAAA;IAAA,IAG/BgB,CAAAA,YAAY,GAA6B,EAAE,CAAA;IAAA,IAG3Cne,CAAAA,GAAG,GAAW,CAAC,CAAA;AAAA,IAAA,IAAA,CAIfzM,IAAI,GAAA,GAAA,CAAA;IAAA,IAGJ7C,CAAAA,KAAK,GAAQ,IAAI,CAAA;IAAA,IAGjBjB,CAAAA,KAAK,GAAW,CAAC,CAAA;IAAA,IACjBC,CAAAA,GAAG,GAAW,CAAC,CAAA;IAAA,IAIf4Z,CAAAA,aAAa,GAAa,IAAI,CAAA;IAAA,IAE9BnB,CAAAA,eAAe,GAAa,IAAI,CAAA;IAAA,IAChC2Y,CAAAA,YAAY,GAAW,CAAC,CAAA;AAAA,IAAA,IAAA,CAIxB1L,OAAO,GAAsB,CAAC2L,KAAE,CAACrX,KAAK,CAAC,CAAA;IAAA,IAEvCsX,CAAAA,kBAAkB,GAAY,IAAI,CAAA;IAAA,IAKlCC,CAAAA,WAAW,GAAY,KAAK,CAAA;IAAA,IAI5BC,CAAAA,6BAA6B,GAAoB,IAAI,CAAA;AAAA,IAAA,IAAA,CAUrDC,YAAY,GAAiD,IAAIzW,GAAG,EAAE,CAAA;IAAA,IAGtE0W,CAAAA,YAAY,GAAW,CAAC,CAAA;AAAA,GAAA;AA/GxBC,EAAAA,IAAI,CAAC;IAAEC,UAAU;IAAEC,UAAU;IAAEC,SAAS;AAAEC,IAAAA,WAAAA;AAAqB,GAAC,EAAQ;AACtE,IAAA,IAAI,CAACtL,MAAM,GACTmL,UAAU,KAAK,KAAK,GAChB,KAAK,GACLA,UAAU,KAAK,IAAI,GACnB,IAAI,GACJC,UAAU,KAAK,QAAQ,CAAA;IAE7B,IAAI,CAAC5B,OAAO,GAAG6B,SAAS,CAAA;AACxB,IAAA,IAAI,CAAC5B,SAAS,GAAG,CAAC6B,WAAW,CAAA;AAC7B,IAAA,IAAI,CAAClb,QAAQ,GAAG,IAAI,CAAC6C,MAAM,GAAG,IAAIla,QAAQ,CAACsyB,SAAS,EAAEC,WAAW,EAAE,CAAC,CAAC,CAAA;AACvE,GAAA;AAsGAC,EAAAA,WAAW,GAAa;AACtB,IAAA,OAAO,IAAIxyB,QAAQ,CAAC,IAAI,CAACywB,OAAO,EAAE,IAAI,CAAC3f,GAAG,GAAG,IAAI,CAAC4f,SAAS,EAAE,IAAI,CAAC5f,GAAG,CAAC,CAAA;AACxE,GAAA;EAEAF,KAAK,CAAC6hB,UAAoB,EAAS;AACjC,IAAA,MAAMzZ,KAAK,GAAG,IAAIwX,KAAK,EAAE,CAAA;AACzB,IAAA,MAAMxvB,IAAI,GAAGc,MAAM,CAACd,IAAI,CAAC,IAAI,CAAoB,CAAA;AACjD,IAAA,KAAK,IAAIU,CAAC,GAAG,CAAC,EAAER,MAAM,GAAGF,IAAI,CAACE,MAAM,EAAEQ,CAAC,GAAGR,MAAM,EAAEQ,CAAC,EAAE,EAAE;AACrD,MAAA,MAAMJ,GAAG,GAAGN,IAAI,CAACU,CAAC,CAAC,CAAA;AACnB,MAAA,IAAIgxB,GAAG,GAAG,IAAI,CAACpxB,GAAG,CAAC,CAAA;MAEnB,IAAI,CAACmxB,UAAU,IAAIvhB,KAAK,CAACC,OAAO,CAACuhB,GAAG,CAAC,EAAE;AACrCA,QAAAA,GAAG,GAAGA,GAAG,CAACC,KAAK,EAAE,CAAA;AACnB,OAAA;;AAGA3Z,MAAAA,KAAK,CAAC1X,GAAG,CAAC,GAAGoxB,GAAG,CAAA;AAClB,KAAA;AAEA,IAAA,OAAO1Z,KAAK,CAAA;AACd,GAAA;AACF;;eC1KA,SAAS4Z,OAAO,CAAClwB,IAAI,EAAE;AACrB,EAAA,OAAOA,IAAI,IAAA,EAAU,IAAIA,IAAI,IAAU,EAAA,CAAA;AACzC,CAAC,CAAA;AAED,MAAMmwB,iCAAiC,GAAG;AACxCC,EAAAA,SAAS,EAAE,IAAItjB,GAAG,CAAS,kCAS1B,CAAC;AACFujB,EAAAA,GAAG,EAAE,IAAIvjB,GAAG,CAAS,CAKpB,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,CAAA,CAAA;AACH,CAAC,CAAA;AAED,MAAMwjB,gCAAgC,GAAG;AAEvCC,EAAAA,GAAG,EAAGC,EAAU,IAAKA,EAAE,KAAqB,EAAA,IAAIA,EAAE,KAAqB,EAAA;AAGvEC,EAAAA,GAAG,EAAGD,EAAU,IAAKA,EAAE,IAAoB,EAAA,IAAIA,EAAE,IAAoB,EAAA;AAGrEE,EAAAA,GAAG,EAAGF,EAAU,IAAKA,EAAE,IAAoB,EAAA,IAAIA,EAAE,IAAoB,EAAA;AAGrEH,EAAAA,GAAG,EAAGG,EAAU,IACbA,EAAE,IAAoB,EAAA,IAAIA,EAAE,IAAoB,EAAA,IAChDA,EAAE,IAAA,EAAwB,IAAIA,EAAE,IAAA,EAAyB,IACzDA,EAAE,IAAA,EAAwB,IAAIA,EAAE,IAAA,GAAA;AACrC,CAAC,CAAA;AAUM,SAASG,kBAAkB,CAChChvB,IAAsC,EACtCurB,KAAa,EACb9e,GAAW,EACX4f,SAAiB,EACjBD,OAAe,EACfE,MAAmC,EACnC;EACA,MAAM2C,UAAU,GAAGxiB,GAAG,CAAA;EACtB,MAAMyiB,gBAAgB,GAAG7C,SAAS,CAAA;EAClC,MAAM8C,cAAc,GAAG/C,OAAO,CAAA;EAE9B,IAAIgD,GAAG,GAAG,EAAE,CAAA;EACZ,IAAIC,eAAe,GAAG,IAAI,CAAA;EAC1B,IAAIC,UAAU,GAAG7iB,GAAG,CAAA;EACpB,MAAM;AAAE5P,IAAAA,MAAAA;AAAO,GAAC,GAAG0uB,KAAK,CAAA;EACxB,SAAS;IACP,IAAI9e,GAAG,IAAI5P,MAAM,EAAE;MACjByvB,MAAM,CAACiD,YAAY,CAACN,UAAU,EAAEC,gBAAgB,EAAEC,cAAc,CAAC,CAAA;MACjEC,GAAG,IAAI7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE7iB,GAAG,CAAC,CAAA;AACnC,MAAA,MAAA;AACF,KAAA;AACA,IAAA,MAAMoiB,EAAE,GAAGtD,KAAK,CAACC,UAAU,CAAC/e,GAAG,CAAC,CAAA;IAChC,IAAI+iB,WAAW,CAACxvB,IAAI,EAAE6uB,EAAE,EAAEtD,KAAK,EAAE9e,GAAG,CAAC,EAAE;MACrC2iB,GAAG,IAAI7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE7iB,GAAG,CAAC,CAAA;AACnC,MAAA,MAAA;AACF,KAAA;IACA,IAAIoiB,EAAE,OAAwB,EAAE;MAC9BO,GAAG,IAAI7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE7iB,GAAG,CAAC,CAAA;AACnC,MAAA,MAAMgjB,GAAG,GAAGC,eAAe,CACzBnE,KAAK,EACL9e,GAAG,EACH4f,SAAS,EACTD,OAAO,EACPpsB,IAAI,KAAK,UAAU,EACnBssB,MAAM,CACP,CAAA;MACD,IAAImD,GAAG,CAACZ,EAAE,KAAK,IAAI,IAAI,CAACQ,eAAe,EAAE;AACvCA,QAAAA,eAAe,GAAG;UAAE5iB,GAAG;UAAE4f,SAAS;AAAED,UAAAA,OAAAA;SAAS,CAAA;AAC/C,OAAC,MAAM;QACLgD,GAAG,IAAIK,GAAG,CAACZ,EAAE,CAAA;AACf,OAAA;MACA,CAAC;QAAEpiB,GAAG;QAAE4f,SAAS;AAAED,QAAAA,OAAAA;AAAQ,OAAC,GAAGqD,GAAG,EAAA;AAClCH,MAAAA,UAAU,GAAG7iB,GAAG,CAAA;AAClB,KAAC,MAAM,IACLoiB,EAAE,SAA4B,IAC9BA,EAAE,SAAiC,EACnC;AACA,MAAA,EAAEpiB,GAAG,CAAA;AACL,MAAA,EAAE2f,OAAO,CAAA;AACTC,MAAAA,SAAS,GAAG5f,GAAG,CAAA;AACjB,KAAC,MAAM,IAAIoiB,EAAE,OAAuB,IAAIA,EAAE,OAA6B,EAAE;MACvE,IAAI7uB,IAAI,KAAK,UAAU,EAAE;QACvBovB,GAAG,IAAI7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE7iB,GAAG,CAAC,GAAG,IAAI,CAAA;AAC1C,QAAA,EAAEA,GAAG,CAAA;QACL,IACEoiB,EAAE,KAA6B,EAAA,IAC/BtD,KAAK,CAACC,UAAU,CAAC/e,GAAG,CAAC,KAAA,EAAuB,EAC5C;AACA,UAAA,EAAEA,GAAG,CAAA;AACP,SAAA;AACA,QAAA,EAAE2f,OAAO,CAAA;QACTkD,UAAU,GAAGjD,SAAS,GAAG5f,GAAG,CAAA;AAC9B,OAAC,MAAM;QACL6f,MAAM,CAACiD,YAAY,CAACN,UAAU,EAAEC,gBAAgB,EAAEC,cAAc,CAAC,CAAA;AACnE,OAAA;AACF,KAAC,MAAM;AACL,MAAA,EAAE1iB,GAAG,CAAA;AACP,KAAA;AACF,GAAA;EACA,OAAO;IACLA,GAAG;AACHkjB,IAAAA,GAAG,EAAEP,GAAG;IACRC,eAAe;IACfhD,SAAS;IACTD,OAAO;IAIPwD,eAAe,EAAE,CAAC,CAACP,eAAAA;GACpB,CAAA;AACH,CAAA;AAEA,SAASG,WAAW,CAClBxvB,IAAsC,EACtC6uB,EAAU,EACVtD,KAAa,EACb9e,GAAW,EACX;EACA,IAAIzM,IAAI,KAAK,UAAU,EAAE;AACvB,IAAA,OACE6uB,EAAE,KAAA,EAA0B,IAC3BA,EAAE,OAAyB,IAC1BtD,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,KAA8B,GAAA,CAAA;AAE7D,GAAA;AACA,EAAA,OACEoiB,EAAE,MAAM7uB,IAAI,KAAK,QAAQ,UAAiD,CAAC,CAAA;AAE/E,CAAA;AAOA,SAAS0vB,eAAe,CACtBnE,KAAa,EACb9e,GAAW,EACX4f,SAAiB,EACjBD,OAAe,EACfyD,UAAmB,EACnBvD,MAAgC,EAChC;EACA,MAAMwD,cAAc,GAAG,CAACD,UAAU,CAAA;AAClCpjB,EAAAA,GAAG,EAAE,CAAA;;EAEL,MAAMgjB,GAAG,GAAIZ,EAAiB,KAAM;IAAEpiB,GAAG;IAAEoiB,EAAE;IAAExC,SAAS;AAAED,IAAAA,OAAAA;AAAQ,GAAC,CAAC,CAAA;EAEpE,MAAMyC,EAAE,GAAGtD,KAAK,CAACC,UAAU,CAAC/e,GAAG,EAAE,CAAC,CAAA;AAClC,EAAA,QAAQoiB,EAAE;AACR,IAAA,KAAA,GAAA;MACE,OAAOY,GAAG,CAAC,IAAI,CAAC,CAAA;AAClB,IAAA,KAAA,GAAA;MACE,OAAOA,GAAG,CAAC,IAAI,CAAC,CAAA;AAClB,IAAA,KAAA,GAAA;AAA2B,MAAA;AACzB,QAAA,IAAIpxB,IAAI,CAAA;QACR,CAAC;UAAEA,IAAI;AAAEoO,UAAAA,GAAAA;AAAI,SAAC,GAAGsjB,WAAW,CAC1BxE,KAAK,EACL9e,GAAG,EACH4f,SAAS,EACTD,OAAO,EACP,CAAC,EACD,KAAK,EACL0D,cAAc,EACdxD,MAAM,CACP,EAAA;AACD,QAAA,OAAOmD,GAAG,CAACpxB,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG6B,MAAM,CAACuiB,YAAY,CAACpkB,IAAI,CAAC,CAAC,CAAA;AAC9D,OAAA;AACA,IAAA,KAAA,GAAA;AAA2B,MAAA;AACzB,QAAA,IAAIA,IAAI,CAAA;QACR,CAAC;UAAEA,IAAI;AAAEoO,UAAAA,GAAAA;AAAI,SAAC,GAAGujB,aAAa,CAC5BzE,KAAK,EACL9e,GAAG,EACH4f,SAAS,EACTD,OAAO,EACP0D,cAAc,EACdxD,MAAM,CACP,EAAA;AACD,QAAA,OAAOmD,GAAG,CAACpxB,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG6B,MAAM,CAAC+vB,aAAa,CAAC5xB,IAAI,CAAC,CAAC,CAAA;AAC/D,OAAA;AACA,IAAA,KAAA,GAAA;MACE,OAAOoxB,GAAG,CAAC,IAAI,CAAC,CAAA;AAClB,IAAA,KAAA,EAAA;MACE,OAAOA,GAAG,CAAC,IAAI,CAAC,CAAA;AAClB,IAAA,KAAA,GAAA;MACE,OAAOA,GAAG,CAAC,QAAQ,CAAC,CAAA;AACtB,IAAA,KAAA,GAAA;MACE,OAAOA,GAAG,CAAC,IAAI,CAAC,CAAA;AAClB,IAAA,KAAA,EAAA;AACE,MAAA,IAAIlE,KAAK,CAACC,UAAU,CAAC/e,GAAG,CAAC,OAAuB,EAAE;AAChD,QAAA,EAAEA,GAAG,CAAA;AACP,OAAA;AAEF,IAAA,KAAA,EAAA;AACE4f,MAAAA,SAAS,GAAG5f,GAAG,CAAA;AACf,MAAA,EAAE2f,OAAO,CAAA;AAEX,IAAA,KAAA,IAAA,CAAA;AACA,IAAA,KAAA,IAAA;MACE,OAAOqD,GAAG,CAAC,EAAE,CAAC,CAAA;AAChB,IAAA,KAAA,EAAA,CAAA;AACA,IAAA,KAAA,EAAA;AACE,MAAA,IAAII,UAAU,EAAE;QACd,OAAOJ,GAAG,CAAC,IAAI,CAAC,CAAA;AAClB,OAAC,MAAM;QACLnD,MAAM,CAAC4D,mBAAmB,CAACzjB,GAAG,GAAG,CAAC,EAAE4f,SAAS,EAAED,OAAO,CAAC,CAAA;AACzD,OAAA;AAEF,IAAA;AACE,MAAA,IAAIyC,EAAE,IAAA,EAAoB,IAAIA,EAAE,MAAoB,EAAE;AACpD,QAAA,MAAMsB,QAAQ,GAAG1jB,GAAG,GAAG,CAAC,CAAA;AACxB,QAAA,MAAM2jB,KAAK,GAAG7E,KAAK,CAAC+C,KAAK,CAAC6B,QAAQ,EAAE1jB,GAAG,GAAG,CAAC,CAAC,CAAC2jB,KAAK,CAAC,SAAS,CAAE,CAAA;AAE9D,QAAA,IAAIC,QAAQ,GAAGD,KAAK,CAAC,CAAC,CAAC,CAAA;AAEvB,QAAA,IAAIE,KAAK,GAAGC,QAAQ,CAACF,QAAQ,EAAE,CAAC,CAAC,CAAA;QACjC,IAAIC,KAAK,GAAG,GAAG,EAAE;UACfD,QAAQ,GAAGA,QAAQ,CAAC/B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAChCgC,UAAAA,KAAK,GAAGC,QAAQ,CAACF,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC/B,SAAA;AACA5jB,QAAAA,GAAG,IAAI4jB,QAAQ,CAACxzB,MAAM,GAAG,CAAC,CAAA;AAC1B,QAAA,MAAM6mB,IAAI,GAAG6H,KAAK,CAACC,UAAU,CAAC/e,GAAG,CAAC,CAAA;QAClC,IACE4jB,QAAQ,KAAK,GAAG,IAChB3M,IAAI,KAAqB,EAAA,IACzBA,IAAI,KAAA,EAAqB,EACzB;AACA,UAAA,IAAImM,UAAU,EAAE;YACd,OAAOJ,GAAG,CAAC,IAAI,CAAC,CAAA;AAClB,WAAC,MAAM;YACLnD,MAAM,CAAC4D,mBAAmB,CAACC,QAAQ,EAAE9D,SAAS,EAAED,OAAO,CAAC,CAAA;AAC1D,WAAA;AACF,SAAA;QAEA,OAAOqD,GAAG,CAACvvB,MAAM,CAACuiB,YAAY,CAAC6N,KAAK,CAAC,CAAC,CAAA;AACxC,OAAA;MAEA,OAAOb,GAAG,CAACvvB,MAAM,CAACuiB,YAAY,CAACoM,EAAE,CAAC,CAAC,CAAA;AAAC,GAAA;AAE1C,CAAA;AAOA,SAASkB,WAAW,CAClBxE,KAAa,EACb9e,GAAW,EACX4f,SAAiB,EACjBD,OAAe,EACfoE,GAAW,EACXC,QAAiB,EACjBX,cAAuB,EACvBxD,MAA4B,EAC5B;EACA,MAAM2C,UAAU,GAAGxiB,GAAG,CAAA;AACtB,EAAA,IAAIikB,CAAC,CAAA;EACL,CAAC;IAAEA,CAAC;AAAEjkB,IAAAA,GAAAA;GAAK,GAAGkkB,OAAO,CACnBpF,KAAK,EACL9e,GAAG,EACH4f,SAAS,EACTD,OAAO,EACP,EAAE,EACFoE,GAAG,EACHC,QAAQ,EACR,KAAK,EACLnE,MAAM,EACY,CAACwD,cAAc,CAClC,EAAA;EACD,IAAIY,CAAC,KAAK,IAAI,EAAE;AACd,IAAA,IAAIZ,cAAc,EAAE;MAClBxD,MAAM,CAACsE,qBAAqB,CAAC3B,UAAU,EAAE5C,SAAS,EAAED,OAAO,CAAC,CAAA;AAC9D,KAAC,MAAM;MACL3f,GAAG,GAAGwiB,UAAU,GAAG,CAAC,CAAA;AACtB,KAAA;AACF,GAAA;EACA,OAAO;AAAE5wB,IAAAA,IAAI,EAAEqyB,CAAC;AAAEjkB,IAAAA,GAAAA;GAAK,CAAA;AACzB,CAAA;AAuBO,SAASkkB,OAAO,CACrBpF,KAAa,EACb9e,GAAW,EACX4f,SAAiB,EACjBD,OAAe,EACfpoB,KAAa,EACbwsB,GAAuB,EACvBC,QAAiB,EACjBI,iBAAmC,EACnCvE,MAAwB,EACxBwE,WAAoB,EACpB;EACA,MAAM50B,KAAK,GAAGuQ,GAAG,CAAA;AACjB,EAAA,MAAMskB,iBAAiB,GACrB/sB,KAAK,KAAK,EAAE,GACRwqB,iCAAiC,CAACE,GAAG,GACrCF,iCAAiC,CAACC,SAAS,CAAA;AACjD,EAAA,MAAMuC,gBAAgB,GACpBhtB,KAAK,KAAK,EAAE,GACR2qB,gCAAgC,CAACD,GAAG,GACpC1qB,KAAK,KAAK,EAAE,GACZ2qB,gCAAgC,CAACI,GAAG,GACpC/qB,KAAK,KAAK,CAAC,GACX2qB,gCAAgC,CAACG,GAAG,GACpCH,gCAAgC,CAACC,GAAG,CAAA;EAE1C,IAAIqC,OAAO,GAAG,KAAK,CAAA;EACnB,IAAIC,KAAK,GAAG,CAAC,CAAA;EAEb,KAAK,IAAI7zB,CAAC,GAAG,CAAC,EAAEmR,CAAC,GAAGgiB,GAAG,IAAI,IAAI,GAAGW,QAAQ,GAAGX,GAAG,EAAEnzB,CAAC,GAAGmR,CAAC,EAAE,EAAEnR,CAAC,EAAE;AAC5D,IAAA,MAAMgB,IAAI,GAAGktB,KAAK,CAACC,UAAU,CAAC/e,GAAG,CAAC,CAAA;AAClC,IAAA,IAAI4hB,GAAG,CAAA;AAEP,IAAA,IAAIhwB,IAAI,KAAyB,EAAA,IAAIwyB,iBAAiB,KAAK,MAAM,EAAE;MACjE,MAAMO,IAAI,GAAG7F,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,CAAA;MACtC,MAAMiX,IAAI,GAAG6H,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,CAAA;MAEtC,IAAI,CAACokB,iBAAiB,EAAE;QACtB,IAAIC,WAAW,EAAE,OAAO;AAAEJ,UAAAA,CAAC,EAAE,IAAI;AAAEjkB,UAAAA,GAAAA;SAAK,CAAA;QACxC6f,MAAM,CAAC+E,gCAAgC,CAAC5kB,GAAG,EAAE4f,SAAS,EAAED,OAAO,CAAC,CAAA;AAClE,OAAC,MAAM,IACLkF,MAAM,CAACC,KAAK,CAAC7N,IAAI,CAAC,IAClB,CAACsN,gBAAgB,CAACtN,IAAI,CAAC,IACvBqN,iBAAiB,CAAC3N,GAAG,CAACgO,IAAI,CAAC,IAC3BL,iBAAiB,CAAC3N,GAAG,CAACM,IAAI,CAAC,EAC3B;QACA,IAAIoN,WAAW,EAAE,OAAO;AAAEJ,UAAAA,CAAC,EAAE,IAAI;AAAEjkB,UAAAA,GAAAA;SAAK,CAAA;QACxC6f,MAAM,CAACkF,0BAA0B,CAAC/kB,GAAG,EAAE4f,SAAS,EAAED,OAAO,CAAC,CAAA;AAC5D,OAAA;;AAGA,MAAA,EAAE3f,GAAG,CAAA;AACL,MAAA,SAAA;AACF,KAAA;IAEA,IAAIpO,IAAI,MAAwB,EAAE;MAChCgwB,GAAG,GAAGhwB,IAAI,GAAA,EAAuB,GAAqB,EAAA,CAAA;AACxD,KAAC,MAAM,IAAIA,IAAI,IAAA,EAAwB,EAAE;MACvCgwB,GAAG,GAAGhwB,IAAI,GAAA,EAAuB,GAAqB,EAAA,CAAA;AACxD,KAAC,MAAM,IAAI,QAAkBA,CAAAA,IAAI,CAAC,EAAE;MAClCgwB,GAAG,GAAGhwB,IAAI,GAAmB,EAAA,CAAA;AAC/B,KAAC,MAAM;AACLgwB,MAAAA,GAAG,GAAG8C,QAAQ,CAAA;AAChB,KAAA;IACA,IAAI9C,GAAG,IAAIrqB,KAAK,EAAE;AAGhB,MAAA,IAAIqqB,GAAG,IAAI,CAAC,IAAIyC,WAAW,EAAE;QAC3B,OAAO;AAAEJ,UAAAA,CAAC,EAAE,IAAI;AAAEjkB,UAAAA,GAAAA;SAAK,CAAA;AACzB,OAAC,MAAM,IACL4hB,GAAG,IAAI,CAAC,IACR/B,MAAM,CAACmF,YAAY,CAAChlB,GAAG,EAAE4f,SAAS,EAAED,OAAO,EAAEpoB,KAAK,CAAC,EACnD;AACAqqB,QAAAA,GAAG,GAAG,CAAC,CAAA;OACR,MAAM,IAAIoC,QAAQ,EAAE;AACnBpC,QAAAA,GAAG,GAAG,CAAC,CAAA;AACP4C,QAAAA,OAAO,GAAG,IAAI,CAAA;AAChB,OAAC,MAAM;AACL,QAAA,MAAA;AACF,OAAA;AACF,KAAA;AACA,IAAA,EAAExkB,GAAG,CAAA;AACLykB,IAAAA,KAAK,GAAGA,KAAK,GAAGltB,KAAK,GAAGqqB,GAAG,CAAA;AAC7B,GAAA;AACA,EAAA,IAAI5hB,GAAG,KAAKvQ,KAAK,IAAKs0B,GAAG,IAAI,IAAI,IAAI/jB,GAAG,GAAGvQ,KAAK,KAAKs0B,GAAI,IAAIS,OAAO,EAAE;IACpE,OAAO;AAAEP,MAAAA,CAAC,EAAE,IAAI;AAAEjkB,MAAAA,GAAAA;KAAK,CAAA;AACzB,GAAA;EAEA,OAAO;AAAEikB,IAAAA,CAAC,EAAEQ,KAAK;AAAEzkB,IAAAA,GAAAA;GAAK,CAAA;AAC1B,CAAA;AAMO,SAASujB,aAAa,CAC3BzE,KAAa,EACb9e,GAAW,EACX4f,SAAiB,EACjBD,OAAe,EACf0D,cAAuB,EACvBxD,MAA8B,EAC9B;AACA,EAAA,MAAMuC,EAAE,GAAGtD,KAAK,CAACC,UAAU,CAAC/e,GAAG,CAAC,CAAA;AAChC,EAAA,IAAIpO,IAAI,CAAA;EAER,IAAIwwB,EAAE,QAA6B,EAAE;AACnC,IAAA,EAAEpiB,GAAG,CAAA;IACL,CAAC;MAAEpO,IAAI;AAAEoO,MAAAA,GAAAA;KAAK,GAAGsjB,WAAW,CAC1BxE,KAAK,EACL9e,GAAG,EACH4f,SAAS,EACTD,OAAO,EACPb,KAAK,CAACmG,OAAO,CAAC,GAAG,EAAEjlB,GAAG,CAAC,GAAGA,GAAG,EAC7B,IAAI,EACJqjB,cAAc,EACdxD,MAAM,CACP,EAAA;AACD,IAAA,EAAE7f,GAAG,CAAA;AACL,IAAA,IAAIpO,IAAI,KAAK,IAAI,IAAIA,IAAI,GAAG,QAAQ,EAAE;AACpC,MAAA,IAAIyxB,cAAc,EAAE;QAClBxD,MAAM,CAACqF,gBAAgB,CAACllB,GAAG,EAAE4f,SAAS,EAAED,OAAO,CAAC,CAAA;AAClD,OAAC,MAAM;QACL,OAAO;AAAE/tB,UAAAA,IAAI,EAAE,IAAI;AAAEoO,UAAAA,GAAAA;SAAK,CAAA;AAC5B,OAAA;AACF,KAAA;AACF,GAAC,MAAM;IACL,CAAC;MAAEpO,IAAI;AAAEoO,MAAAA,GAAAA;AAAI,KAAC,GAAGsjB,WAAW,CAC1BxE,KAAK,EACL9e,GAAG,EACH4f,SAAS,EACTD,OAAO,EACP,CAAC,EACD,KAAK,EACL0D,cAAc,EACdxD,MAAM,CACP,EAAA;AACH,GAAA;EACA,OAAO;IAAEjuB,IAAI;AAAEoO,IAAAA,GAAAA;GAAK,CAAA;AACtB;;;;AC7ZA,SAASmlB,aAAa,CAACnlB,GAAW,EAAE4f,SAAiB,EAAED,OAAe,EAAE;EACtE,OAAO,IAAIzwB,QAAQ,CAACywB,OAAO,EAAE3f,GAAG,GAAG4f,SAAS,EAAE5f,GAAG,CAAC,CAAA;AACpD,CAAA;AAEA,MAAMolB,iBAAiB,GAAG,IAAI1mB,GAAG,CAAC,wCAUjC,CAAC,CAAA;;AAMK,MAAM2mB,KAAK,CAAC;EACjBl2B,WAAW,CAAC+Y,KAAY,EAAE;AACxB,IAAA,IAAI,CAAC3U,IAAI,GAAG2U,KAAK,CAAC3U,IAAI,CAAA;AACtB,IAAA,IAAI,CAAC7C,KAAK,GAAGwX,KAAK,CAACxX,KAAK,CAAA;AACxB,IAAA,IAAI,CAACjB,KAAK,GAAGyY,KAAK,CAACzY,KAAK,CAAA;AACxB,IAAA,IAAI,CAACC,GAAG,GAAGwY,KAAK,CAACxY,GAAG,CAAA;AACpB,IAAA,IAAI,CAACiQ,GAAG,GAAG,IAAInQ,cAAc,CAAC0Y,KAAK,CAAC3B,QAAQ,EAAE2B,KAAK,CAACkB,MAAM,CAAC,CAAA;AAC7D,GAAA;AAOF,CAAA;;AAIe,MAAekc,SAAS,SAASvH,cAAc,CAAC;;AAM7D5uB,EAAAA,WAAW,CAACqS,OAAgB,EAAEsd,KAAa,EAAE;AAC3C,IAAA,KAAK,EAAE,CAAA;AAAC,IAAA,IAAA,CANVyG,WAAW,GAAA,KAAA,CAAA,CAAA;IAAA,IAGX9jB,CAAAA,MAAM,GAA6B,EAAE,CAAA;AAAA,IAAA,IAAA,CAk6CrC+jB,qBAAqB,GAAqB;MACxCR,YAAY,EAAE,CAAChlB,GAAG,EAAE4f,SAAS,EAAED,OAAO,EAAEpoB,KAAK,KAAK;QAChD,IAAI,CAAC,IAAI,CAACiK,OAAO,CAACikB,aAAa,EAAE,OAAO,KAAK,CAAA;AAE7C,QAAA,IAAI,CAACre,KAAK,CAACxG,MAAM,CAACtJ,YAAY,EAAE;UAC9B+P,EAAE,EAAE8d,aAAa,CAACnlB,GAAG,EAAE4f,SAAS,EAAED,OAAO,CAAC;AAC1CpoB,UAAAA,KAAAA;AACF,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,IAAI,CAAA;OACZ;MACDqtB,gCAAgC,EAAE,IAAI,CAACc,YAAY,CACjD9kB,MAAM,CAACvG,gCAAgC,CACxC;AACD0qB,MAAAA,0BAA0B,EAAE,IAAI,CAACW,YAAY,CAC3C9kB,MAAM,CAACvE,0BAA0B,CAAA;KAEpC,CAAA;AAAA,IAAA,IAAA,CAEDspB,2BAA2B,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACtB,IAAI,CAACH,qBAAqB,EAAA;MAC7BrB,qBAAqB,EAAE,IAAI,CAACuB,YAAY,CAAC9kB,MAAM,CAACpJ,qBAAqB,CAAC;AACtE0tB,MAAAA,gBAAgB,EAAE,IAAI,CAACQ,YAAY,CAAC9kB,MAAM,CAACzJ,gBAAgB,CAAA;AAAC,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CAG9DyuB,uCAAuC,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAClC,IAAI,CAACD,2BAA2B,EAAA;AACnClC,MAAAA,mBAAmB,EAAE,CAACzjB,GAAG,EAAE4f,SAAS,EAAED,OAAO,KAAK;AAChD,QAAA,IAAI,CAACkG,sBAAsB,CAACjlB,MAAM,CAACtC,mBAAmB,EAAE;AACtD+I,UAAAA,EAAE,EAAE8d,aAAa,CAACnlB,GAAG,EAAE4f,SAAS,EAAED,OAAO,CAAA;AAC3C,SAAC,CAAC,CAAA;OACH;AACDmD,MAAAA,YAAY,EAAE,CAAC9iB,GAAG,EAAE4f,SAAS,EAAED,OAAO,KAAK;AACzC,QAAA,MAAM,IAAI,CAACvY,KAAK,CAACxG,MAAM,CAACnD,kBAAkB,EAAE;UAE1C4J,EAAE,EAAE8d,aAAa,CAACnlB,GAAG,GAAG,CAAC,EAAE4f,SAAS,EAAED,OAAO,CAAA;AAC/C,SAAC,CAAC,CAAA;AACJ,OAAA;AAAC,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CAGHmG,yCAAyC,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACpC,IAAI,CAACH,2BAA2B,EAAA;MACnClC,mBAAmB,EAAE,IAAI,CAACiC,YAAY,CAAC9kB,MAAM,CAACtC,mBAAmB,CAAC;AAClEwkB,MAAAA,YAAY,EAAE,CAAC9iB,GAAG,EAAE4f,SAAS,EAAED,OAAO,KAAK;AACzC,QAAA,MAAM,IAAI,CAACvY,KAAK,CAACxG,MAAM,CAAClD,oBAAoB,EAAE;AAC5C2J,UAAAA,EAAE,EAAE8d,aAAa,CAACnlB,GAAG,EAAE4f,SAAS,EAAED,OAAO,CAAA;AAC3C,SAAC,CAAC,CAAA;AACJ,OAAA;AAAC,KAAA,CAAA,CAAA;AA78CD,IAAA,IAAI,CAACzX,KAAK,GAAG,IAAIwX,KAAK,EAAE,CAAA;AACxB,IAAA,IAAI,CAACxX,KAAK,CAACmZ,IAAI,CAAC7f,OAAO,CAAC,CAAA;IACxB,IAAI,CAACsd,KAAK,GAAGA,KAAK,CAAA;AAClB,IAAA,IAAI,CAAC1uB,MAAM,GAAG0uB,KAAK,CAAC1uB,MAAM,CAAA;IAC1B,IAAI,CAACm1B,WAAW,GAAG,KAAK,CAAA;AAC1B,GAAA;EAEAQ,SAAS,CAAChnB,KAAwB,EAAE;IAGlC,IAAI,CAAC0C,MAAM,CAACrR,MAAM,GAAG,IAAI,CAAC8X,KAAK,CAACkZ,YAAY,CAAA;AAC5C,IAAA,IAAI,CAAC3f,MAAM,CAACoD,IAAI,CAAC9F,KAAK,CAAC,CAAA;AACvB,IAAA,EAAE,IAAI,CAACmJ,KAAK,CAACkZ,YAAY,CAAA;AAC3B,GAAA;;AAIAnK,EAAAA,IAAI,GAAS;IACX,IAAI,CAAC+O,mBAAmB,EAAE,CAAA;AAC1B,IAAA,IAAI,IAAI,CAACxkB,OAAO,CAACC,MAAM,EAAE;MACvB,IAAI,CAACskB,SAAS,CAAC,IAAIV,KAAK,CAAC,IAAI,CAACnd,KAAK,CAAC,CAAC,CAAA;AACvC,KAAA;IAEA,IAAI,CAACA,KAAK,CAAC4Y,YAAY,GAAG,IAAI,CAAC5Y,KAAK,CAACzY,KAAK,CAAA;IAC1C,IAAI,CAACyY,KAAK,CAACoB,aAAa,GAAG,IAAI,CAACpB,KAAK,CAACkB,MAAM,CAAA;IAC5C,IAAI,CAAClB,KAAK,CAACC,eAAe,GAAG,IAAI,CAACD,KAAK,CAAC3B,QAAQ,CAAA;IAChD,IAAI,CAAC0f,SAAS,EAAE,CAAA;AAClB,GAAA;EAEAC,GAAG,CAAC3yB,IAAe,EAAW;AAC5B,IAAA,IAAI,IAAI,CAACowB,KAAK,CAACpwB,IAAI,CAAC,EAAE;MACpB,IAAI,CAAC0jB,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAAA;AACb,KAAC,MAAM;AACL,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AACF,GAAA;;EAKA0M,KAAK,CAACpwB,IAAe,EAAW;AAC9B,IAAA,OAAO,IAAI,CAAC2U,KAAK,CAAC3U,IAAI,KAAKA,IAAI,CAAA;AACjC,GAAA;;EAKA4yB,oBAAoB,CAACje,KAAY,EAAkB;IACjD,OAAO;MACLlI,GAAG,EAAEkI,KAAK,CAAClI,GAAG;AACdtP,MAAAA,KAAK,EAAE,IAAI;MACX6C,IAAI,EAAE2U,KAAK,CAAC3U,IAAI;MAChB9D,KAAK,EAAEyY,KAAK,CAACzY,KAAK;MAClBC,GAAG,EAAEwY,KAAK,CAACxY,GAAG;AACd0lB,MAAAA,OAAO,EAAE,CAAC,IAAI,CAACgR,UAAU,EAAE,CAAC;MAC5BlG,MAAM,EAAEhY,KAAK,CAACgY,MAAM;MACpB3Z,QAAQ,EAAE2B,KAAK,CAAC3B,QAAQ;MACxB+C,aAAa,EAAEpB,KAAK,CAACoB,aAAa;MAClCqW,OAAO,EAAEzX,KAAK,CAACyX,OAAO;MACtBC,SAAS,EAAE1X,KAAK,CAAC0X,SAAS;MAC1B8B,WAAW,EAAExZ,KAAK,CAACwZ,WAAAA;KACpB,CAAA;AACH,GAAA;;AAeA2E,EAAAA,SAAS,GAAmB;AAC1B,IAAA,MAAMC,GAAG,GAAG,IAAI,CAACpe,KAAK,CAAA;IAEtB,IAAI,CAACA,KAAK,GAAG,IAAI,CAACie,oBAAoB,CAACG,GAAG,CAAC,CAAA;IAE3C,IAAI,CAACf,WAAW,GAAG,IAAI,CAAA;IACvB,IAAI,CAACU,SAAS,EAAE,CAAA;IAChB,IAAI,CAACV,WAAW,GAAG,KAAK,CAAA;AAExB,IAAA,MAAMgB,IAAI,GAAG,IAAI,CAACre,KAAK,CAAA;IACvB,IAAI,CAACA,KAAK,GAAGoe,GAAG,CAAA;AAChB,IAAA,OAAOC,IAAI,CAAA;AACb,GAAA;AAEAC,EAAAA,cAAc,GAAW;IACvB,OAAO,IAAI,CAACC,mBAAmB,CAAC,IAAI,CAACve,KAAK,CAAClI,GAAG,CAAC,CAAA;AACjD,GAAA;EAEAymB,mBAAmB,CAACzmB,GAAW,EAAU;IACvCsf,cAAc,CAACoH,SAAS,GAAG1mB,GAAG,CAAA;AAC9B,IAAA,OAAOsf,cAAc,CAACvJ,IAAI,CAAC,IAAI,CAAC+I,KAAK,CAAC,GAAGQ,cAAc,CAACoH,SAAS,GAAG1mB,GAAG,CAAA;AACzE,GAAA;AAEA2mB,EAAAA,iBAAiB,GAAW;IAC1B,OAAO,IAAI,CAAC7H,KAAK,CAACC,UAAU,CAAC,IAAI,CAACyH,cAAc,EAAE,CAAC,CAAA;AACrD,GAAA;EAEAI,cAAc,CAAC5mB,GAAW,EAAU;IAKlC,IAAI6mB,EAAE,GAAG,IAAI,CAAC/H,KAAK,CAACC,UAAU,CAAC/e,GAAG,CAAC,CAAA;AACnC,IAAA,IAAI,CAAC6mB,EAAE,GAAG,MAAM,MAAM,MAAM,IAAI,EAAE7mB,GAAG,GAAG,IAAI,CAAC8e,KAAK,CAAC1uB,MAAM,EAAE;MACzD,MAAM02B,KAAK,GAAG,IAAI,CAAChI,KAAK,CAACC,UAAU,CAAC/e,GAAG,CAAC,CAAA;AACxC,MAAA,IAAI,CAAC8mB,KAAK,GAAG,MAAM,MAAM,MAAM,EAAE;AAC/BD,QAAAA,EAAE,GAAG,OAAO,IAAI,CAACA,EAAE,GAAG,KAAK,KAAK,EAAE,CAAC,IAAIC,KAAK,GAAG,KAAK,CAAC,CAAA;AACvD,OAAA;AACF,KAAA;AACA,IAAA,OAAOD,EAAE,CAAA;AACX,GAAA;;EAKAE,SAAS,CAAC5Q,MAAe,EAAQ;AAC/B,IAAA,IAAI,CAACjO,KAAK,CAACiO,MAAM,GAAGA,MAAM,CAAA;AAC1B,IAAA,IAAIA,MAAM,EAAE;AAKV,MAAA,IAAI,CAACjO,KAAK,CAACiZ,YAAY,CAAC6F,OAAO,CAAC,CAAC,CAACC,YAAY,EAAE5f,EAAE,CAAC,KACjD,IAAI,CAACD,KAAK,CAAC6f,YAAY,EAAE;AAAE5f,QAAAA,EAAAA;AAAG,OAAC,CAAC,CACjC,CAAA;AACD,MAAA,IAAI,CAACa,KAAK,CAACiZ,YAAY,CAAC+F,KAAK,EAAE,CAAA;AACjC,KAAA;AACF,GAAA;AAEAd,EAAAA,UAAU,GAAe;AACvB,IAAA,OAAO,IAAI,CAACle,KAAK,CAACkN,OAAO,CAAC,IAAI,CAAClN,KAAK,CAACkN,OAAO,CAAChlB,MAAM,GAAG,CAAC,CAAC,CAAA;AAC1D,GAAA;;AAKA61B,EAAAA,SAAS,GAAS;IAChB,IAAI,CAACkB,SAAS,EAAE,CAAA;IAChB,IAAI,CAACjf,KAAK,CAACzY,KAAK,GAAG,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAA;AACjC,IAAA,IAAI,CAAC,IAAI,CAACulB,WAAW,EAAE,IAAI,CAACrd,KAAK,CAAC3B,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAACwZ,WAAW,EAAE,CAAA;IACrE,IAAI,IAAI,CAACxZ,KAAK,CAAClI,GAAG,IAAI,IAAI,CAAC5P,MAAM,EAAE;MACjC,IAAI,CAACg3B,WAAW,CAAQ,GAAA,CAAA,CAAA;AACxB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAACC,gBAAgB,CAAC,IAAI,CAACT,cAAc,CAAC,IAAI,CAAC1e,KAAK,CAAClI,GAAG,CAAC,CAAC,CAAA;AAC5D,GAAA;;EAKAsnB,gBAAgB,CAAC9I,UAAwB,EAA8B;AACrE,IAAA,IAAIjY,QAAQ,CAAA;AACZ,IAAA,IAAI,CAAC,IAAI,CAACgf,WAAW,EAAEhf,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAACwZ,WAAW,EAAE,CAAA;AAC1D,IAAA,MAAMjyB,KAAK,GAAG,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAA;AAC5B,IAAA,MAAMtQ,GAAG,GAAG,IAAI,CAACovB,KAAK,CAACmG,OAAO,CAACzG,UAAU,EAAE/uB,KAAK,GAAG,CAAC,CAAC,CAAA;AACrD,IAAA,IAAIC,GAAG,KAAK,CAAC,CAAC,EAAE;AAId,MAAA,MAAM,IAAI,CAAC0X,KAAK,CAACxG,MAAM,CAACrD,mBAAmB,EAAE;AAC3C8J,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,IAAI,CAACxZ,KAAK,CAAClI,GAAG,GAAGtQ,GAAG,GAAG8uB,UAAU,CAACpuB,MAAM,CAAA;AACxCgvB,IAAAA,UAAU,CAACsH,SAAS,GAAGj3B,KAAK,GAAG,CAAC,CAAA;AAChC,IAAA,OAAO2vB,UAAU,CAACrJ,IAAI,CAAC,IAAI,CAAC+I,KAAK,CAAC,IAAIM,UAAU,CAACsH,SAAS,IAAIh3B,GAAG,EAAE;AACjE,MAAA,EAAE,IAAI,CAACwY,KAAK,CAACyX,OAAO,CAAA;AACpB,MAAA,IAAI,CAACzX,KAAK,CAAC0X,SAAS,GAAGR,UAAU,CAACsH,SAAS,CAAA;AAC7C,KAAA;;IAIA,IAAI,IAAI,CAACnB,WAAW,EAAE,OAAA;;AAGtB,IAAA,MAAMtH,OAAuB,GAAG;AAC9B1qB,MAAAA,IAAI,EAAE,cAAc;AACpB7C,MAAAA,KAAK,EAAE,IAAI,CAACouB,KAAK,CAAC+C,KAAK,CAACpyB,KAAK,GAAG,CAAC,EAAEC,GAAG,CAAC;MACvCD,KAAK;AACLC,MAAAA,GAAG,EAAEA,GAAG,GAAG8uB,UAAU,CAACpuB,MAAM;MAC5BuP,GAAG,EAAE,IAAInQ,cAAc,CAAC+W,QAAQ,EAAE,IAAI,CAAC2B,KAAK,CAACwZ,WAAW,EAAE,CAAA;KAC3D,CAAA;IACD,IAAI,IAAI,CAAClgB,OAAO,CAACC,MAAM,EAAE,IAAI,CAACskB,SAAS,CAAC9H,OAAO,CAAC,CAAA;AAChD,IAAA,OAAOA,OAAO,CAAA;AAChB,GAAA;EAEAsJ,eAAe,CAACC,SAAiB,EAA6B;AAC5D,IAAA,MAAM/3B,KAAK,GAAG,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAA;AAC5B,IAAA,IAAIuG,QAAQ,CAAA;AACZ,IAAA,IAAI,CAAC,IAAI,CAACgf,WAAW,EAAEhf,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAACwZ,WAAW,EAAE,CAAA;AAC1D,IAAA,IAAIU,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAE,IAAI,CAAC7W,KAAK,CAAClI,GAAG,IAAIwnB,SAAS,CAAE,CAAA;IAC7D,IAAI,IAAI,CAACtf,KAAK,CAAClI,GAAG,GAAG,IAAI,CAAC5P,MAAM,EAAE;AAChC,MAAA,OAAO,CAACivB,SAAS,CAAC+C,EAAE,CAAC,IAAI,EAAE,IAAI,CAACla,KAAK,CAAClI,GAAG,GAAG,IAAI,CAAC5P,MAAM,EAAE;AACvDgyB,QAAAA,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAC5C,OAAA;AACF,KAAA;;IAIA,IAAI,IAAI,CAACulB,WAAW,EAAE,OAAA;;AAGtB,IAAA,MAAM71B,GAAG,GAAG,IAAI,CAACwY,KAAK,CAAClI,GAAG,CAAA;AAC1B,IAAA,MAAMtP,KAAK,GAAG,IAAI,CAACouB,KAAK,CAAC+C,KAAK,CAACpyB,KAAK,GAAG+3B,SAAS,EAAE93B,GAAG,CAAC,CAAA;AAEtD,IAAA,MAAMuuB,OAAsB,GAAG;AAC7B1qB,MAAAA,IAAI,EAAE,aAAa;MACnB7C,KAAK;MACLjB,KAAK;MACLC,GAAG;MACHiQ,GAAG,EAAE,IAAInQ,cAAc,CAAC+W,QAAQ,EAAE,IAAI,CAAC2B,KAAK,CAACwZ,WAAW,EAAE,CAAA;KAC3D,CAAA;IACD,IAAI,IAAI,CAAClgB,OAAO,CAACC,MAAM,EAAE,IAAI,CAACskB,SAAS,CAAC9H,OAAO,CAAC,CAAA;AAChD,IAAA,OAAOA,OAAO,CAAA;AAChB,GAAA;;AAKAkJ,EAAAA,SAAS,GAAS;AAChB,IAAA,MAAMM,UAAU,GAAG,IAAI,CAACvf,KAAK,CAAClI,GAAG,CAAA;IACjC,MAAMmd,QAAQ,GAAG,EAAE,CAAA;IACnBuK,IAAI,EAAE,OAAO,IAAI,CAACxf,KAAK,CAAClI,GAAG,GAAG,IAAI,CAAC5P,MAAM,EAAE;AACzC,MAAA,MAAMgyB,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAChD,MAAA,QAAQoiB,EAAE;AACR,QAAA,KAAA,EAAA,CAAA;AACA,QAAA,KAAA,GAAA,CAAA;AACA,QAAA,KAAA,CAAA;AACE,UAAA,EAAE,IAAI,CAACla,KAAK,CAAClI,GAAG,CAAA;AAChB,UAAA,MAAA;AACF,QAAA,KAAA,EAAA;AACE,UAAA,IACE,IAAI,CAAC8e,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,OAAuB,EAChE;AACA,YAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAClB,WAAA;AAEF,QAAA,KAAA,EAAA,CAAA;AACA,QAAA,KAAA,IAAA,CAAA;AACA,QAAA,KAAA,IAAA;AACE,UAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAChB,UAAA,EAAE,IAAI,CAACkI,KAAK,CAACyX,OAAO,CAAA;UACpB,IAAI,CAACzX,KAAK,CAAC0X,SAAS,GAAG,IAAI,CAAC1X,KAAK,CAAClI,GAAG,CAAA;AACrC,UAAA,MAAA;AAEF,QAAA,KAAA,EAAA;AACE,UAAA,QAAQ,IAAI,CAAC8e,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC;AAC/C,YAAA,KAAA,EAAA;AAAyB,cAAA;AACvB,gBAAA,MAAMie,OAAO,GAAG,IAAI,CAACqJ,gBAAgB,CAAC,IAAI,CAAC,CAAA;gBAC3C,IAAIrJ,OAAO,KAAKZ,SAAS,EAAE;AACzB,kBAAA,IAAI,CAACW,UAAU,CAACC,OAAO,CAAC,CAAA;kBACxB,IAAI,IAAI,CAACzc,OAAO,CAACmmB,aAAa,EAAExK,QAAQ,CAACtY,IAAI,CAACoZ,OAAO,CAAC,CAAA;AACxD,iBAAA;AACA,gBAAA,MAAA;AACF,eAAA;AAEA,YAAA,KAAA,EAAA;AAAsB,cAAA;AACpB,gBAAA,MAAMA,OAAO,GAAG,IAAI,CAACsJ,eAAe,CAAC,CAAC,CAAC,CAAA;gBACvC,IAAItJ,OAAO,KAAKZ,SAAS,EAAE;AACzB,kBAAA,IAAI,CAACW,UAAU,CAACC,OAAO,CAAC,CAAA;kBACxB,IAAI,IAAI,CAACzc,OAAO,CAACmmB,aAAa,EAAExK,QAAQ,CAACtY,IAAI,CAACoZ,OAAO,CAAC,CAAA;AACxD,iBAAA;AACA,gBAAA,MAAA;AACF,eAAA;AAEA,YAAA;AACE,cAAA,MAAMyJ,IAAI,CAAA;AAAC,WAAA;AAEf,UAAA,MAAA;AAEF,QAAA;AACE,UAAA,IAAIjI,YAAY,CAAC2C,EAAE,CAAC,EAAE;AACpB,YAAA,EAAE,IAAI,CAACla,KAAK,CAAClI,GAAG,CAAA;WACjB,MAAM,IAAIoiB,EAAE,KAAA,EAAmB,IAAI,CAAC,IAAI,CAAC3L,QAAQ,EAAE;AAClD,YAAA,MAAMzW,GAAG,GAAG,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAC1B,YAAA,IACE,IAAI,CAAC8e,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,OAAmB,IACjD,IAAI,CAAC8e,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,KAAA,EAA0B,KACvDynB,UAAU,KAAK,CAAC,IAAI,IAAI,CAACvf,KAAK,CAAC0X,SAAS,GAAG6H,UAAU,CAAC,EACvD;AAEA,cAAA,MAAMxJ,OAAO,GAAG,IAAI,CAACsJ,eAAe,CAAC,CAAC,CAAC,CAAA;cACvC,IAAItJ,OAAO,KAAKZ,SAAS,EAAE;AACzB,gBAAA,IAAI,CAACW,UAAU,CAACC,OAAO,CAAC,CAAA;gBACxB,IAAI,IAAI,CAACzc,OAAO,CAACmmB,aAAa,EAAExK,QAAQ,CAACtY,IAAI,CAACoZ,OAAO,CAAC,CAAA;AACxD,eAAA;AACF,aAAC,MAAM;AACL,cAAA,MAAMyJ,IAAI,CAAA;AACZ,aAAA;WACD,MAAM,IAAItF,EAAE,KAAA,EAAuB,IAAI,CAAC,IAAI,CAAC3L,QAAQ,EAAE;AACtD,YAAA,MAAMzW,GAAG,GAAG,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAC1B,YAAA,IACE,IAAI,CAAC8e,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,KAA8B,EAAA,IAC5D,IAAI,CAAC8e,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,KAAmB,EAAA,IACjD,IAAI,CAAC8e,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,OAAmB,EACjD;AAEA,cAAA,MAAMie,OAAO,GAAG,IAAI,CAACsJ,eAAe,CAAC,CAAC,CAAC,CAAA;cACvC,IAAItJ,OAAO,KAAKZ,SAAS,EAAE;AACzB,gBAAA,IAAI,CAACW,UAAU,CAACC,OAAO,CAAC,CAAA;gBACxB,IAAI,IAAI,CAACzc,OAAO,CAACmmB,aAAa,EAAExK,QAAQ,CAACtY,IAAI,CAACoZ,OAAO,CAAC,CAAA;AACxD,eAAA;AACF,aAAC,MAAM;AACL,cAAA,MAAMyJ,IAAI,CAAA;AACZ,aAAA;AACF,WAAC,MAAM;AACL,YAAA,MAAMA,IAAI,CAAA;AACZ,WAAA;AAAC,OAAA;AAEP,KAAA;AAEA,IAAA,IAAIvK,QAAQ,CAAC/sB,MAAM,GAAG,CAAC,EAAE;AACvB,MAAA,MAAMV,GAAG,GAAG,IAAI,CAACwY,KAAK,CAAClI,GAAG,CAAA;AAC1B,MAAA,MAAM4nB,iBAAoC,GAAG;AAC3Cn4B,QAAAA,KAAK,EAAEg4B,UAAU;QACjB/3B,GAAG;QACHytB,QAAQ;AACRmB,QAAAA,WAAW,EAAE,IAAI;AACjBM,QAAAA,YAAY,EAAE,IAAI;AAClBH,QAAAA,cAAc,EAAE,IAAA;OACjB,CAAA;MACD,IAAI,CAACvW,KAAK,CAACiW,YAAY,CAACtZ,IAAI,CAAC+iB,iBAAiB,CAAC,CAAA;AACjD,KAAA;AACF,GAAA;;AAOAR,EAAAA,WAAW,CAAC7zB,IAAe,EAAEquB,GAAS,EAAQ;IAC5C,IAAI,CAAC1Z,KAAK,CAACxY,GAAG,GAAG,IAAI,CAACwY,KAAK,CAAClI,GAAG,CAAA;IAC/B,IAAI,CAACkI,KAAK,CAACkB,MAAM,GAAG,IAAI,CAAClB,KAAK,CAACwZ,WAAW,EAAE,CAAA;AAC5C,IAAA,MAAMmG,QAAQ,GAAG,IAAI,CAAC3f,KAAK,CAAC3U,IAAI,CAAA;AAChC,IAAA,IAAI,CAAC2U,KAAK,CAAC3U,IAAI,GAAGA,IAAI,CAAA;AACtB,IAAA,IAAI,CAAC2U,KAAK,CAACxX,KAAK,GAAGkxB,GAAG,CAAA;AAEtB,IAAA,IAAI,CAAC,IAAI,CAAC2D,WAAW,EAAE;AACrB,MAAA,IAAI,CAAC/a,aAAa,CAACqd,QAAQ,CAAC,CAAA;AAC9B,KAAA;AACF,GAAA;EAEAC,YAAY,CAACv0B,IAAe,EAAQ;AAClC,IAAA,IAAI,CAAC2U,KAAK,CAAC3U,IAAI,GAAGA,IAAI,CAAA;IAGtB,IAAI,CAACiX,aAAa,EAAE,CAAA;AACtB,GAAA;;AAYAud,EAAAA,oBAAoB,GAAS;AAC3B,IAAA,IAAI,IAAI,CAAC7f,KAAK,CAAClI,GAAG,KAAK,CAAC,IAAI,IAAI,CAACgoB,qBAAqB,EAAE,EAAE;AACxD,MAAA,OAAA;AACF,KAAA;IAEA,MAAMC,OAAO,GAAG,IAAI,CAAC/f,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAA;AAClC,IAAA,MAAMiX,IAAI,GAAG,IAAI,CAAC2P,cAAc,CAACqB,OAAO,CAAC,CAAA;AACzC,IAAA,IAAIhR,IAAI,IAAA,EAAoB,IAAIA,IAAI,MAAoB,EAAE;AACxD,MAAA,MAAM,IAAI,CAAC7P,KAAK,CAACxG,MAAM,CAAC9E,wBAAwB,EAAE;AAChDuL,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,IACEzK,IAAI,KAAA,GAA6B,IAChCA,IAAI,KAAgC,EAAA,IAAI,IAAI,CAACrP,SAAS,CAAC,gBAAgB,CAAE,EAC1E;AAKA,MAAA,IAAI,CAACsgB,YAAY,CAAC,gBAAgB,CAAC,CAAA;MACnC,IAAI,IAAI,CAACnjB,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,KAAK,KAAK,EAAE;AAClE,QAAA,MAAM,IAAI,CAACqC,KAAK,CACd6P,IAAI,KAA6B,GAAA,GAC7BrW,MAAM,CAAC3F,4CAA4C,GACnD2F,MAAM,CAACjF,2CAA2C,EACtD;AAAE0L,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAAG,SAAC,CACjC,CAAA;AACH,OAAA;AAEA,MAAA,IAAI,CAACxZ,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;MACnB,IAAIiX,IAAI,QAA6B,EAAE;QAErC,IAAI,CAACmQ,WAAW,CAAe,CAAA,CAAA,CAAA;AACjC,OAAC,MAAM;QAEL,IAAI,CAACA,WAAW,CAAiB,CAAA,CAAA,CAAA;AACnC,OAAA;AACF,KAAC,MAAM,IAAItR,iBAAiB,CAACmB,IAAI,CAAC,EAAE;AAClC,MAAA,EAAE,IAAI,CAAC/O,KAAK,CAAClI,GAAG,CAAA;MAChB,IAAI,CAAConB,WAAW,CAAiB,GAAA,EAAA,IAAI,CAACe,SAAS,CAAClR,IAAI,CAAC,CAAC,CAAA;AACxD,KAAC,MAAM,IAAIA,IAAI,KAAA,EAAwB,EAAE;AACvC,MAAA,EAAE,IAAI,CAAC/O,KAAK,CAAClI,GAAG,CAAA;AAChB,MAAA,IAAI,CAAConB,WAAW,CAAA,GAAA,EAAiB,IAAI,CAACe,SAAS,EAAE,CAAC,CAAA;AACpD,KAAC,MAAM;AACL,MAAA,IAAI,CAACC,QAAQ,CAAU,EAAA,EAAA,CAAC,CAAC,CAAA;AAC3B,KAAA;AACF,GAAA;AAEAC,EAAAA,aAAa,GAAS;AACpB,IAAA,MAAMpR,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;AACtD,IAAA,IAAIiX,IAAI,IAAA,EAAoB,IAAIA,IAAI,MAAoB,EAAE;AACxD,MAAA,IAAI,CAACqR,UAAU,CAAC,IAAI,CAAC,CAAA;AACrB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IACErR,IAAI,KAAkB,EAAA,IACtB,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,OAAkB,EAC3D;AACA,MAAA,IAAI,CAACkI,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;MACnB,IAAI,CAAConB,WAAW,CAAa,EAAA,CAAA,CAAA;AAC/B,KAAC,MAAM;AACL,MAAA,EAAE,IAAI,CAAClf,KAAK,CAAClI,GAAG,CAAA;MAChB,IAAI,CAAConB,WAAW,CAAQ,EAAA,CAAA,CAAA;AAC1B,KAAA;AACF,GAAA;AAEAmB,EAAAA,eAAe,GAAS;AACtB,IAAA,MAAMtR,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;IACtD,IAAIiX,IAAI,OAAuB,EAAE;AAC/B,MAAA,IAAI,CAACmR,QAAQ,CAAiB,EAAA,EAAA,CAAC,CAAC,CAAA;AAClC,KAAC,MAAM;AACL,MAAA,IAAI,CAACA,QAAQ,CAAW,EAAA,EAAA,CAAC,CAAC,CAAA;AAC5B,KAAA;AACF,GAAA;AAEAJ,EAAAA,qBAAqB,GAAY;AAC/B,IAAA,IAAI,IAAI,CAAC9f,KAAK,CAAClI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC5P,MAAM,GAAG,CAAC,EAAE,OAAO,KAAK,CAAA;AAEzD,IAAA,IAAIgyB,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;AAClD,IAAA,IAAIoiB,EAAE,KAAA,EAA8B,EAAE,OAAO,KAAK,CAAA;AAElD,IAAA,MAAM3yB,KAAK,GAAG,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAA;AAC5B,IAAA,IAAI,CAACkI,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;AAEnB,IAAA,OAAO,CAACqf,SAAS,CAAC+C,EAAE,CAAC,IAAI,EAAE,IAAI,CAACla,KAAK,CAAClI,GAAG,GAAG,IAAI,CAAC5P,MAAM,EAAE;AACvDgyB,MAAAA,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAC5C,KAAA;AAEA,IAAA,MAAMtP,KAAK,GAAG,IAAI,CAACouB,KAAK,CAAC+C,KAAK,CAACpyB,KAAK,GAAG,CAAC,EAAE,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAC,CAAA;AAEzD,IAAA,IAAI,CAAConB,WAAW,CAA0B12B,EAAAA,EAAAA,KAAK,CAAC,CAAA;AAEhD,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEA83B,qBAAqB,CAAC52B,IAAY,EAAQ;AAExC,IAAA,IAAI2B,IAAI,GAAG3B,IAAI,KAAA,EAAuB,GAAsB,EAAA,GAAA,EAAA,CAAA;IAC5D,IAAI62B,KAAK,GAAG,CAAC,CAAA;AACb,IAAA,IAAIxR,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;;AAGpD,IAAA,IAAIpO,IAAI,KAAA,EAAuB,IAAIqlB,IAAI,OAAuB,EAAE;AAC9DwR,MAAAA,KAAK,EAAE,CAAA;AACPxR,MAAAA,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;AAChDzM,MAAAA,IAAI,GAAc,EAAA,CAAA;AACpB,KAAA;;IAGA,IAAI0jB,IAAI,OAAuB,IAAI,CAAC,IAAI,CAAC/O,KAAK,CAACgY,MAAM,EAAE;AACrDuI,MAAAA,KAAK,EAAE,CAAA;MAIPl1B,IAAI,GAAG3B,IAAI,KAAA,EAA0B,GAA8B,EAAA,GAAA,EAAA,CAAA;AACrE,KAAA;AAEA,IAAA,IAAI,CAACw2B,QAAQ,CAAC70B,IAAI,EAAEk1B,KAAK,CAAC,CAAA;AAC5B,GAAA;EAEAC,kBAAkB,CAAC92B,IAAY,EAAQ;AAErC,IAAA,MAAMqlB,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;IAEtD,IAAIiX,IAAI,KAAKrlB,IAAI,EAAE;AACjB,MAAA,IAAI,IAAI,CAACktB,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,OAAuB,EAAE;AACpE,QAAA,IAAI,CAACooB,QAAQ,CAAY,EAAA,EAAA,CAAC,CAAC,CAAA;AAC7B,OAAC,MAAM;QACL,IAAI,CAACA,QAAQ,CACXx2B,IAAI,QAA0B,GAA+B,EAAA,GAAA,EAAA,EAC7D,CAAC,CACF,CAAA;AACH,OAAA;AACA,MAAA,OAAA;AACF,KAAA;IAEA,IAAIA,IAAI,QAA0B,EAAE;MAElC,IAAIqlB,IAAI,OAA0B,EAAE;AAClC,QAAA,IAAI,CAACmR,QAAQ,CAAc,EAAA,EAAA,CAAC,CAAC,CAAA;AAC7B,QAAA,OAAA;AACF,OAAA;MAEA,IACE,IAAI,CAACxgB,SAAS,CAAC,gBAAgB,CAAC,IAChCqP,IAAI,KAAA,GAA8B,EAClC;QACA,IAAI,IAAI,CAAClS,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,KAAK,KAAK,EAAE;AAClE,UAAA,MAAM,IAAI,CAACqC,KAAK,CAACxG,MAAM,CAAC7F,yCAAyC,EAAE;AACjEsM,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,IAAI,CAACxZ,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;QACnB,IAAI,CAAConB,WAAW,CAAc,CAAA,CAAA,CAAA;AAC9B,QAAA,OAAA;AACF,OAAA;;MAGA,IACE,IAAI,CAACxf,SAAS,CAAC,gBAAgB,CAAC,IAChCqP,IAAI,KAAA,EAAiC,EACrC;QACA,IAAI,IAAI,CAAClS,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,KAAK,KAAK,EAAE;AAClE,UAAA,MAAM,IAAI,CAACqC,KAAK,CAACxG,MAAM,CAACnF,wCAAwC,EAAE;AAChE4L,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,IAAI,CAACxZ,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;QACnB,IAAI,CAAConB,WAAW,CAAgB,CAAA,CAAA,CAAA;AAChC,QAAA,OAAA;AACF,OAAA;AACF,KAAA;IAEA,IAAInQ,IAAI,OAAuB,EAAE;AAC/B,MAAA,IAAI,CAACmR,QAAQ,CAAY,EAAA,EAAA,CAAC,CAAC,CAAA;AAC3B,MAAA,OAAA;AACF,KAAA;IAEA,IAAI,CAACA,QAAQ,CACXx2B,IAAI,QAA0B,GAA+B,EAAA,GAAA,EAAA,EAC7D,CAAC,CACF,CAAA;AACH,GAAA;AAEA+2B,EAAAA,eAAe,GAAS;AACtB,IAAA,MAAM1R,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;;IAGtD,IAAIiX,IAAI,OAAuB,IAAI,CAAC,IAAI,CAAC/O,KAAK,CAACgY,MAAM,EAAE;AAIrD,MAAA,IAAI,CAACkI,QAAQ,CAAe,EAAA,EAAA,CAAC,CAAC,CAAA;AAChC,KAAA;SAEK,IACHnR,IAAI,KAAoB,EAAA;AAGxB,IAAA,IAAI,CAACrP,SAAS,CAAC,CACb,kBAAkB,EAClB;AAAEghB,MAAAA,QAAQ,EAAE,MAAM;AAAEC,MAAAA,UAAU,EAAE,IAAA;KAAM,CACvC,CAAC,EACF;AACA,MAAA,IAAI,CAACT,QAAQ,CAAiB,EAAA,EAAA,CAAC,CAAC,CAAA;;AAGhC,MAAA,MAAMU,WAAW,GAAG,IAAI,CAAChK,KAAK,CAACiK,WAAW,CAAC,IAAI,CAAC7gB,KAAK,CAAClI,GAAG,CAAC,CAAA;MAC1D,IAAI8oB,WAAW,OAAoB,EAAE;QACnC,MAAM,IAAI,CAAC3wB,UAAU,EAAE,CAAA;AACzB,OAAA;AACF,KAAA;SAEK;AACH,MAAA,IAAI,CAACiwB,QAAQ,CAAgB,EAAA,EAAA,CAAC,CAAC,CAAA;AACjC,KAAA;AACF,GAAA;AAEAY,EAAAA,gBAAgB,GAAS;AACvB,IAAA,MAAM/R,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;;IAGtD,IACEiX,IAAI,OAAqB,IACzB,IAAI,CAACrP,SAAS,CAAC,CACb,kBAAkB,EAClB;AAAEghB,MAAAA,QAAQ,EAAE,MAAM;AAAEC,MAAAA,UAAU,EAAE,IAAA;KAAM,CACvC,CAAC,EACF;AACA,MAAA,IAAI,CAACT,QAAQ,CAAc,EAAA,EAAA,CAAC,CAAC,CAAA;AAC/B,KAAA;SAEK;AACH,MAAA,IAAI,CAACA,QAAQ,CAAQ,EAAA,EAAA,CAAC,CAAC,CAAA;AACzB,KAAA;AACF,GAAA;EAEAa,kBAAkB,CAACr3B,IAAY,EAAQ;AAErC,IAAA,MAAMqlB,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;IAEtD,IAAIiX,IAAI,KAAKrlB,IAAI,EAAE;AACjB,MAAA,IAAI,CAACw2B,QAAQ,CAAY,EAAA,EAAA,CAAC,CAAC,CAAA;AAC3B,MAAA,OAAA;AACF,KAAA;IAEA,IAAInR,IAAI,OAAuB,EAAE;AAC/B,MAAA,IAAI,CAACmR,QAAQ,CAAY,EAAA,EAAA,CAAC,CAAC,CAAA;AAC7B,KAAC,MAAM;AACL,MAAA,IAAI,CAACA,QAAQ,CAAa,EAAA,EAAA,CAAC,CAAC,CAAA;AAC9B,KAAA;AACF,GAAA;AAEAc,EAAAA,YAAY,GAAS;IAEnB,MAAM;AAAElpB,MAAAA,GAAAA;KAAK,GAAG,IAAI,CAACkI,KAAK,CAAA;IAC1B,MAAM+O,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,CAAA;IAE3C,IAAIiX,IAAI,OAAuB,EAAE;MAC/B,IAAI,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,KAAA,EAAuB,EAAE;AACzD,QAAA,IAAI,CAACooB,QAAQ,CAAY,EAAA,EAAA,CAAC,CAAC,CAAA;AAC3B,QAAA,OAAA;AACF,OAAA;AACA,MAAA,IAAI,CAACA,QAAQ,CAAe,EAAA,EAAA,CAAC,CAAC,CAAA;AAC9B,MAAA,OAAA;AACF,KAAA;IAEA,IAAInR,IAAI,OAAuB,EAAE;AAE/B,MAAA,IAAI,CAACmR,QAAQ,CAAgB,EAAA,EAAA,CAAC,CAAC,CAAA;AAC/B,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAACA,QAAQ,CAAQ,EAAA,EAAA,CAAC,CAAC,CAAA;AACzB,GAAA;AAEAe,EAAAA,YAAY,GAAS;IAEnB,MAAM;AAAEnpB,MAAAA,GAAAA;KAAK,GAAG,IAAI,CAACkI,KAAK,CAAA;IAC1B,MAAM+O,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,CAAA;IAE3C,IAAIiX,IAAI,OAA0B,EAAE;AAClC,MAAA,MAAMmS,IAAI,GACR,IAAI,CAACtK,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG,CAAC,CAAC,KAAA,EAA0B,GAAG,CAAC,GAAG,CAAC,CAAA;MAClE,IAAI,IAAI,CAAC8e,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAGopB,IAAI,CAAC,KAAA,EAAuB,EAAE;AAC5D,QAAA,IAAI,CAAChB,QAAQ,CAAA,EAAA,EAAYgB,IAAI,GAAG,CAAC,CAAC,CAAA;AAClC,QAAA,OAAA;AACF,OAAA;AACA,MAAA,IAAI,CAAChB,QAAQ,CAAegB,EAAAA,EAAAA,IAAI,CAAC,CAAA;AACjC,MAAA,OAAA;AACF,KAAA;IAEA,IAAInS,IAAI,OAAuB,EAAE;AAE/B,MAAA,IAAI,CAACmR,QAAQ,CAAgB,EAAA,EAAA,CAAC,CAAC,CAAA;AAC/B,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAACA,QAAQ,CAAQ,EAAA,EAAA,CAAC,CAAC,CAAA;AACzB,GAAA;EAEAiB,iBAAiB,CAACz3B,IAAY,EAAQ;AAEpC,IAAA,MAAMqlB,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;IACtD,IAAIiX,IAAI,OAAuB,EAAE;MAC/B,IAAI,CAACmR,QAAQ,CAEX,EAAA,EAAA,IAAI,CAACtJ,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,OAAuB,GAC5D,CAAC,GACD,CAAC,CACN,CAAA;AACD,MAAA,OAAA;AACF,KAAA;AACA,IAAA,IAAIpO,IAAI,KAAA,EAAuB,IAAIqlB,IAAI,OAA0B,EAAE;AAEjE,MAAA,IAAI,CAAC/O,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;MACnB,IAAI,CAAConB,WAAW,CAAU,EAAA,CAAA,CAAA;AAC1B,MAAA,OAAA;AACF,KAAA;IACA,IAAI,CAACgB,QAAQ,CAACx2B,IAAI,OAAuB,GAAkB,EAAA,GAAA,EAAA,EAAE,CAAC,CAAC,CAAA;AACjE,GAAA;AAEA03B,EAAAA,kBAAkB,GAAS;AAEzB,IAAA,MAAMrS,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;AACtD,IAAA,MAAMkX,KAAK,GAAG,IAAI,CAAC4H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;IACvD,IAAIiX,IAAI,OAA2B,EAAE;MACnC,IAAIC,KAAK,OAAuB,EAAE;AAEhC,QAAA,IAAI,CAACkR,QAAQ,CAAY,EAAA,EAAA,CAAC,CAAC,CAAA;AAC7B,OAAC,MAAM;AAEL,QAAA,IAAI,CAACA,QAAQ,CAAuB,EAAA,EAAA,CAAC,CAAC,CAAA;AACxC,OAAA;AACF,KAAC,MAAM,IACLnR,IAAI,KAAA,EAAkB,IACtB,EAAEC,KAAK,IAAA,EAAoB,IAAIA,KAAK,IAAoB,EAAA,CAAC,EACzD;AAEA,MAAA,IAAI,CAAChP,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;MACnB,IAAI,CAAConB,WAAW,CAAgB,EAAA,CAAA,CAAA;AAClC,KAAC,MAAM;AACL,MAAA,EAAE,IAAI,CAAClf,KAAK,CAAClI,GAAG,CAAA;MAChB,IAAI,CAAConB,WAAW,CAAa,EAAA,CAAA,CAAA;AAC/B,KAAA;AACF,GAAA;EAEAC,gBAAgB,CAACz1B,IAAY,EAAQ;AACnC,IAAA,QAAQA,IAAI;;AAIV,MAAA,KAAA,EAAA;QACE,IAAI,CAACy2B,aAAa,EAAE,CAAA;AACpB,QAAA,OAAA;;AAGF,MAAA,KAAA,EAAA;AACE,QAAA,EAAE,IAAI,CAACngB,KAAK,CAAClI,GAAG,CAAA;QAChB,IAAI,CAAConB,WAAW,CAAW,EAAA,CAAA,CAAA;AAC3B,QAAA,OAAA;AACF,MAAA,KAAA,EAAA;AACE,QAAA,EAAE,IAAI,CAAClf,KAAK,CAAClI,GAAG,CAAA;QAChB,IAAI,CAAConB,WAAW,CAAW,EAAA,CAAA,CAAA;AAC3B,QAAA,OAAA;AACF,MAAA,KAAA,EAAA;AACE,QAAA,EAAE,IAAI,CAAClf,KAAK,CAAClI,GAAG,CAAA;QAChB,IAAI,CAAConB,WAAW,CAAS,EAAA,CAAA,CAAA;AACzB,QAAA,OAAA;AACF,MAAA,KAAA,EAAA;AACE,QAAA,EAAE,IAAI,CAAClf,KAAK,CAAClI,GAAG,CAAA;QAChB,IAAI,CAAConB,WAAW,CAAU,EAAA,CAAA,CAAA;AAC1B,QAAA,OAAA;AACF,MAAA,KAAA,EAAA;QACE,IACE,IAAI,CAACxf,SAAS,CAAC,gBAAgB,CAAC,IAChC,IAAI,CAACkX,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,KAAA,GAA0B,EACnE;UACA,IAAI,IAAI,CAAC+E,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,KAAK,KAAK,EAAE;AAClE,YAAA,MAAM,IAAI,CAACqC,KAAK,CACdxG,MAAM,CAAClF,0CAA0C,EACjD;AAAE2L,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAAG,aAAC,CACjC,CAAA;AACH,WAAA;;AAGA,UAAA,IAAI,CAACxZ,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;UACnB,IAAI,CAAConB,WAAW,CAAgB,CAAA,CAAA,CAAA;AAClC,SAAC,MAAM;AACL,UAAA,EAAE,IAAI,CAAClf,KAAK,CAAClI,GAAG,CAAA;UAChB,IAAI,CAAConB,WAAW,CAAa,CAAA,CAAA,CAAA;AAC/B,SAAA;AACA,QAAA,OAAA;AACF,MAAA,KAAA,EAAA;AACE,QAAA,EAAE,IAAI,CAAClf,KAAK,CAAClI,GAAG,CAAA;QAChB,IAAI,CAAConB,WAAW,CAAa,CAAA,CAAA,CAAA;AAC7B,QAAA,OAAA;AACF,MAAA,KAAA,GAAA;QACE,IACE,IAAI,CAACxf,SAAS,CAAC,gBAAgB,CAAC,IAChC,IAAI,CAACkX,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,KAAA,GAA0B,EACnE;UACA,IAAI,IAAI,CAAC+E,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,KAAK,KAAK,EAAE;AAClE,YAAA,MAAM,IAAI,CAACqC,KAAK,CACdxG,MAAM,CAAC5F,2CAA2C,EAClD;AAAEqM,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAAG,aAAC,CACjC,CAAA;AACH,WAAA;;AAGA,UAAA,IAAI,CAACxZ,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;UACnB,IAAI,CAAConB,WAAW,CAAc,CAAA,CAAA,CAAA;AAChC,SAAC,MAAM;AACL,UAAA,EAAE,IAAI,CAAClf,KAAK,CAAClI,GAAG,CAAA;UAChB,IAAI,CAAConB,WAAW,CAAW,CAAA,CAAA,CAAA;AAC7B,SAAA;AACA,QAAA,OAAA;AACF,MAAA,KAAA,GAAA;AACE,QAAA,EAAE,IAAI,CAAClf,KAAK,CAAClI,GAAG,CAAA;QAChB,IAAI,CAAConB,WAAW,CAAW,CAAA,CAAA,CAAA;AAC3B,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;QACE,IACE,IAAI,CAACxf,SAAS,CAAC,cAAc,CAAC,IAC9B,IAAI,CAACkX,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,KAAA,EAAoB,EAC7D;AACA,UAAA,IAAI,CAACooB,QAAQ,CAAiB,EAAA,EAAA,CAAC,CAAC,CAAA;AAClC,SAAC,MAAM;AACL,UAAA,EAAE,IAAI,CAAClgB,KAAK,CAAClI,GAAG,CAAA;UAChB,IAAI,CAAConB,WAAW,CAAU,EAAA,CAAA,CAAA;AAC5B,SAAA;AACA,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;QACE,IAAI,CAACkC,kBAAkB,EAAE,CAAA;AACzB,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;QACE,IAAI,CAACC,iBAAiB,EAAE,CAAA;AACxB,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;AAAuB,QAAA;AACrB,UAAA,MAAMtS,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;AAEtD,UAAA,IAAIiX,IAAI,KAAA,GAAyB,IAAIA,IAAI,OAAyB,EAAE;AAClE,YAAA,IAAI,CAACuS,eAAe,CAAC,EAAE,CAAC,CAAA;AACxB,YAAA,OAAA;AACF,WAAA;AAEA,UAAA,IAAIvS,IAAI,KAAA,GAAyB,IAAIA,IAAI,OAAyB,EAAE;AAClE,YAAA,IAAI,CAACuS,eAAe,CAAC,CAAC,CAAC,CAAA;AACvB,YAAA,OAAA;AACF,WAAA;AAEA,UAAA,IAAIvS,IAAI,KAAA,EAAyB,IAAIA,IAAI,OAAyB,EAAE;AAClE,YAAA,IAAI,CAACuS,eAAe,CAAC,CAAC,CAAC,CAAA;AACvB,YAAA,OAAA;AACF,WAAA;AACF,SAAA;AAGA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,CAAClB,UAAU,CAAC,KAAK,CAAC,CAAA;AACtB,QAAA,OAAA;;AAGF,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,CAACmB,UAAU,CAAC73B,IAAI,CAAC,CAAA;AACrB,QAAA,OAAA;;AAOF,MAAA,KAAA,EAAA;QACE,IAAI,CAAC22B,eAAe,EAAE,CAAA;AACtB,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,CAACC,qBAAqB,CAAC52B,IAAI,CAAC,CAAA;AAChC,QAAA,OAAA;AAEF,MAAA,KAAA,GAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,CAAC82B,kBAAkB,CAAC92B,IAAI,CAAC,CAAA;AAC7B,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;QACE,IAAI,CAAC+2B,eAAe,EAAE,CAAA;AACtB,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,CAACM,kBAAkB,CAACr3B,IAAI,CAAC,CAAA;AAC7B,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;QACE,IAAI,CAACs3B,YAAY,EAAE,CAAA;AACnB,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;QACE,IAAI,CAACC,YAAY,EAAE,CAAA;AACnB,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,CAACE,iBAAiB,CAACz3B,IAAI,CAAC,CAAA;AAC5B,QAAA,OAAA;AAEF,MAAA,KAAA,GAAA;AACE,QAAA,IAAI,CAACw2B,QAAQ,CAAW,EAAA,EAAA,CAAC,CAAC,CAAA;AAC1B,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;QACE,IAAI,CAACY,gBAAgB,EAAE,CAAA;AACvB,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;QACE,IAAI,CAACjB,oBAAoB,EAAE,CAAA;AAC3B,QAAA,OAAA;AAEF,MAAA,KAAA,EAAA;QACE,IAAI,CAAC2B,QAAQ,EAAE,CAAA;AACf,QAAA,OAAA;AAEF,MAAA;AACE,QAAA,IAAI5T,iBAAiB,CAAClkB,IAAI,CAAC,EAAE;AAC3B,UAAA,IAAI,CAAC83B,QAAQ,CAAC93B,IAAI,CAAC,CAAA;AACnB,UAAA,OAAA;AACF,SAAA;AAAC,KAAA;AAGL,IAAA,MAAM,IAAI,CAACwV,KAAK,CAACxG,MAAM,CAAC1I,wBAAwB,EAAE;AAChDmP,MAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAE;AAC5BvpB,MAAAA,UAAU,EAAE1E,MAAM,CAAC+vB,aAAa,CAAC5xB,IAAI,CAAA;AACvC,KAAC,CAAC,CAAA;AACJ,GAAA;AAEAw2B,EAAAA,QAAQ,CAAC70B,IAAe,EAAE61B,IAAY,EAAQ;IAC5C,MAAMlG,GAAG,GAAG,IAAI,CAACpE,KAAK,CAAC+C,KAAK,CAAC,IAAI,CAAC3Z,KAAK,CAAClI,GAAG,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,GAAGopB,IAAI,CAAC,CAAA;AACnE,IAAA,IAAI,CAAClhB,KAAK,CAAClI,GAAG,IAAIopB,IAAI,CAAA;AACtB,IAAA,IAAI,CAAChC,WAAW,CAAC7zB,IAAI,EAAE2vB,GAAG,CAAC,CAAA;AAC7B,GAAA;AAEAyG,EAAAA,UAAU,GAAS;AACjB,IAAA,MAAMpjB,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;IACpC,MAAM9W,KAAK,GAAG,IAAI,CAACyY,KAAK,CAACzY,KAAK,GAAG,CAAC,CAAA;IAClC,IAAIm6B,OAAO,EAAE1O,OAAO,CAAA;IACpB,IAAI;AAAElb,MAAAA,GAAAA;KAAK,GAAG,IAAI,CAACkI,KAAK,CAAA;IACxB,QAAS,EAAElI,GAAG,EAAE;AACd,MAAA,IAAIA,GAAG,IAAI,IAAI,CAAC5P,MAAM,EAAE;AAEtB,QAAA,MAAM,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAACpD,kBAAkB,EAAE;AAC1C6J,UAAAA,EAAE,EAAExX,8BAA8B,CAAC0W,QAAQ,EAAE,CAAC,CAAA;AAChD,SAAC,CAAC,CAAA;AACJ,OAAA;MACA,MAAM6b,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC/e,GAAG,CAAC,CAAA;AACrC,MAAA,IAAIqf,SAAS,CAAC+C,EAAE,CAAC,EAAE;AACjB,QAAA,MAAM,IAAI,CAAChb,KAAK,CAACxG,MAAM,CAACpD,kBAAkB,EAAE;AAC1C6J,UAAAA,EAAE,EAAExX,8BAA8B,CAAC0W,QAAQ,EAAE,CAAC,CAAA;AAChD,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,IAAIqjB,OAAO,EAAE;AACXA,QAAAA,OAAO,GAAG,KAAK,CAAA;AACjB,OAAC,MAAM;QACL,IAAIxH,EAAE,OAAgC,EAAE;AACtClH,UAAAA,OAAO,GAAG,IAAI,CAAA;AAChB,SAAC,MAAM,IAAIkH,EAAE,KAAiC,EAAA,IAAIlH,OAAO,EAAE;AACzDA,UAAAA,OAAO,GAAG,KAAK,CAAA;AACjB,SAAC,MAAM,IAAIkH,EAAE,OAAoB,IAAI,CAAClH,OAAO,EAAE;AAC7C,UAAA,MAAA;AACF,SAAA;QACA0O,OAAO,GAAGxH,EAAE,KAAwB,EAAA,CAAA;AACtC,OAAA;AACF,KAAA;IACA,MAAMyH,OAAO,GAAG,IAAI,CAAC/K,KAAK,CAAC+C,KAAK,CAACpyB,KAAK,EAAEuQ,GAAG,CAAC,CAAA;AAC5C,IAAA,EAAEA,GAAG,CAAA;IAEL,IAAI8pB,IAAI,GAAG,EAAE,CAAA;AAEb,IAAA,MAAM7B,OAAO,GAAG;IAEdp4B,8BAA8B,CAAC0W,QAAQ,EAAEvG,GAAG,GAAG,CAAC,GAAGvQ,KAAK,CAAC,CAAA;AAE3D,IAAA,OAAOuQ,GAAG,GAAG,IAAI,CAAC5P,MAAM,EAAE;AACxB,MAAA,MAAMy2B,EAAE,GAAG,IAAI,CAACD,cAAc,CAAC5mB,GAAG,CAAC,CAAA;AAEnC,MAAA,MAAM+pB,IAAI,GAAGt2B,MAAM,CAACuiB,YAAY,CAAC6Q,EAAE,CAAC,CAAA;;AAGpC,MAAA,IAAIzB,iBAAiB,CAACzO,GAAG,CAACkQ,EAAE,CAAC,EAAE;QAC7B,IAAIA,EAAE,QAAyB,EAAE;AAC/B,UAAA,IAAI,CAACqB,YAAY,CAAC,mBAAmB,EAAED,OAAO,EAAE,CAAC,CAAA;AAEjD,UAAA,IAAI6B,IAAI,CAACE,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC5iB,KAAK,CAACxG,MAAM,CAAC3J,yBAAyB,EAAE;AAAEoQ,cAAAA,EAAE,EAAE4gB,OAAO,EAAA;AAAG,aAAC,CAAC,CAAA;AACjE,WAAA;AACF,SAAC,MAAM,IAAIpB,EAAE,KAAA,GAAyB,EAAE;AACtC,UAAA,IAAIiD,IAAI,CAACE,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC5iB,KAAK,CAACxG,MAAM,CAAC3J,yBAAyB,EAAE;AAAEoQ,cAAAA,EAAE,EAAE4gB,OAAO,EAAA;AAAG,aAAC,CAAC,CAAA;AACjE,WAAA;AACF,SAAA;AACA,QAAA,IAAI6B,IAAI,CAACE,QAAQ,CAACD,IAAI,CAAC,EAAE;AACvB,UAAA,IAAI,CAAC3iB,KAAK,CAACxG,MAAM,CAACnL,oBAAoB,EAAE;AAAE4R,YAAAA,EAAE,EAAE4gB,OAAO,EAAA;AAAG,WAAC,CAAC,CAAA;AAC5D,SAAA;OACD,MAAM,IAAIhS,gBAAgB,CAAC4Q,EAAE,CAAC,IAAIA,EAAE,KAAA,EAAwB,EAAE;AAC7D,QAAA,IAAI,CAACzf,KAAK,CAACxG,MAAM,CAAC/H,oBAAoB,EAAE;AAAEwO,UAAAA,EAAE,EAAE4gB,OAAO,EAAA;AAAG,SAAC,CAAC,CAAA;AAC5D,OAAC,MAAM;AACL,QAAA,MAAA;AACF,OAAA;AAEA,MAAA,EAAEjoB,GAAG,CAAA;AACL8pB,MAAAA,IAAI,IAAIC,IAAI,CAAA;AACd,KAAA;AACA,IAAA,IAAI,CAAC7hB,KAAK,CAAClI,GAAG,GAAGA,GAAG,CAAA;IAEpB,IAAI,CAAConB,WAAW,CAAY,GAAA,EAAA;AAC1BzlB,MAAAA,OAAO,EAAEkoB,OAAO;AAChBjoB,MAAAA,KAAK,EAAEkoB,IAAAA;AACT,KAAC,CAAC,CAAA;AACJ,GAAA;;AAWA5F,EAAAA,OAAO,CACL3sB,KAAa,EACbwsB,GAAY,EACZC,QAAiB,GAAG,KAAK,EACzBI,iBAAmC,GAAG,IAAI,EAC3B;IACf,MAAM;MAAEH,CAAC;AAAEjkB,MAAAA,GAAAA;AAAI,KAAC,GAAGkkB,OAAO,CACxB,IAAI,CAACpF,KAAK,EACV,IAAI,CAAC5W,KAAK,CAAClI,GAAG,EACd,IAAI,CAACkI,KAAK,CAAC0X,SAAS,EACpB,IAAI,CAAC1X,KAAK,CAACyX,OAAO,EAClBpoB,KAAK,EACLwsB,GAAG,EACHC,QAAQ,EACRI,iBAAiB,EACjB,IAAI,CAACoB,qBAAqB,EACR,KAAK,CACxB,CAAA;AACD,IAAA,IAAI,CAACtd,KAAK,CAAClI,GAAG,GAAGA,GAAG,CAAA;AACpB,IAAA,OAAOikB,CAAC,CAAA;AACV,GAAA;EAEAuF,eAAe,CAACjyB,KAAa,EAAQ;AACnC,IAAA,MAAMgP,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAACwZ,WAAW,EAAE,CAAA;IACzC,IAAIuI,QAAQ,GAAG,KAAK,CAAA;AAEpB,IAAA,IAAI,CAAC/hB,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;AACnB,IAAA,MAAM4hB,GAAG,GAAG,IAAI,CAACsC,OAAO,CAAC3sB,KAAK,CAAC,CAAA;IAC/B,IAAIqqB,GAAG,IAAI,IAAI,EAAE;AACf,MAAA,IAAI,CAACxa,KAAK,CAACxG,MAAM,CAACtJ,YAAY,EAAE;AAE9B+P,QAAAA,EAAE,EAAExX,8BAA8B,CAAC0W,QAAQ,EAAE,CAAC,CAAC;AAC/ChP,QAAAA,KAAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;AACA,IAAA,MAAM0f,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;IAElD,IAAIiX,IAAI,QAAyB,EAAE;AACjC,MAAA,EAAE,IAAI,CAAC/O,KAAK,CAAClI,GAAG,CAAA;AAChBiqB,MAAAA,QAAQ,GAAG,IAAI,CAAA;AACjB,KAAC,MAAM,IAAIhT,IAAI,KAAA,GAAyB,EAAE;AACxC,MAAA,MAAM,IAAI,CAAC7P,KAAK,CAACxG,MAAM,CAACvJ,cAAc,EAAE;AAAEgQ,QAAAA,EAAE,EAAEd,QAAAA;AAAS,OAAC,CAAC,CAAA;AAC3D,KAAA;AAEA,IAAA,IAAIuP,iBAAiB,CAAC,IAAI,CAAC8Q,cAAc,CAAC,IAAI,CAAC1e,KAAK,CAAClI,GAAG,CAAC,CAAC,EAAE;AAC1D,MAAA,MAAM,IAAI,CAACoH,KAAK,CAACxG,MAAM,CAACxG,gBAAgB,EAAE;AACxCiN,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,IAAIuI,QAAQ,EAAE;MACZ,MAAM/G,GAAG,GAAG,IAAI,CAACpE,KAAK,CACnB+C,KAAK,CAACtb,QAAQ,CAACjX,KAAK,EAAE,IAAI,CAAC4Y,KAAK,CAAClI,GAAG,CAAC,CACrCkqB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;AACvB,MAAA,IAAI,CAAC9C,WAAW,CAAYlE,GAAAA,EAAAA,GAAG,CAAC,CAAA;AAChC,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAACkE,WAAW,CAASxF,GAAAA,EAAAA,GAAG,CAAC,CAAA;AAC/B,GAAA;;EAIA0G,UAAU,CAAC6B,aAAsB,EAAQ;AACvC,IAAA,MAAM16B,KAAK,GAAG,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAA;AAC5B,IAAA,MAAMuG,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAACwZ,WAAW,EAAE,CAAA;IACzC,IAAI0I,OAAO,GAAG,KAAK,CAAA;IACnB,IAAIH,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAII,SAAS,GAAG,KAAK,CAAA;IACrB,IAAIC,WAAW,GAAG,KAAK,CAAA;IACvB,IAAIC,OAAO,GAAG,KAAK,CAAA;IAEnB,IAAI,CAACJ,aAAa,IAAI,IAAI,CAACjG,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;AAC/C,MAAA,IAAI,CAAC9c,KAAK,CAACxG,MAAM,CAAC5I,aAAa,EAAE;AAAEqP,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAAG,OAAC,CAAC,CAAA;AACpE,KAAA;IACA,MAAM8I,cAAc,GAClB,IAAI,CAACtiB,KAAK,CAAClI,GAAG,GAAGvQ,KAAK,IAAI,CAAC,IAC3B,IAAI,CAACqvB,KAAK,CAACC,UAAU,CAACtvB,KAAK,CAAC,KAAqB,EAAA,CAAA;AAEnD,IAAA,IAAI+6B,cAAc,EAAE;AAClB,MAAA,MAAMC,OAAO,GAAG,IAAI,CAAC3L,KAAK,CAAC+C,KAAK,CAACpyB,KAAK,EAAE,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAC,CAAA;AACvD,MAAA,IAAI,CAAC6lB,sBAAsB,CAACjlB,MAAM,CAACrC,kBAAkB,EAAE;AAAE8I,QAAAA,EAAE,EAAEd,QAAAA;AAAS,OAAC,CAAC,CAAA;AACxE,MAAA,IAAI,CAAC,IAAI,CAAC2B,KAAK,CAACiO,MAAM,EAAE;AAEtB,QAAA,MAAMuU,aAAa,GAAGD,OAAO,CAACxF,OAAO,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAIyF,aAAa,GAAG,CAAC,EAAE;AAErB,UAAA,IAAI,CAACtjB,KAAK,CAACxG,MAAM,CAAC7C,yBAAyB,EAAE;AAC3CsJ,YAAAA,EAAE,EAAExX,8BAA8B,CAAC0W,QAAQ,EAAEmkB,aAAa,CAAA;AAC5D,WAAC,CAAC,CAAA;AACJ,SAAA;AACF,OAAA;MACAH,OAAO,GAAGC,cAAc,IAAI,CAAC,MAAM,CAACzU,IAAI,CAAC0U,OAAO,CAAC,CAAA;AACnD,KAAA;AAEA,IAAA,IAAIxT,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAChD,IAAA,IAAIiX,IAAI,KAAA,EAAkB,IAAI,CAACsT,OAAO,EAAE;AACtC,MAAA,EAAE,IAAI,CAACriB,KAAK,CAAClI,GAAG,CAAA;AAChB,MAAA,IAAI,CAACkkB,OAAO,CAAC,EAAE,CAAC,CAAA;AAChBkG,MAAAA,OAAO,GAAG,IAAI,CAAA;AACdnT,MAAAA,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAC9C,KAAA;IAEA,IACE,CAACiX,IAAI,KAAyB,EAAA,IAAIA,IAAI,KAAyB,GAAA,KAC/D,CAACsT,OAAO,EACR;AACAtT,MAAAA,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,EAAE,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAC9C,MAAA,IAAIiX,IAAI,KAAA,EAAuB,IAAIA,IAAI,OAAmB,EAAE;AAC1D,QAAA,EAAE,IAAI,CAAC/O,KAAK,CAAClI,GAAG,CAAA;AAClB,OAAA;MACA,IAAI,IAAI,CAACkkB,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;AAC7B,QAAA,IAAI,CAAC9c,KAAK,CAACxG,MAAM,CAAC3I,wBAAwB,EAAE;AAAEoP,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AAC/D,OAAA;AACA6jB,MAAAA,OAAO,GAAG,IAAI,CAAA;AACdE,MAAAA,WAAW,GAAG,IAAI,CAAA;AAClBrT,MAAAA,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAC9C,KAAA;IAEA,IAAIiX,IAAI,QAAyB,EAAE;MAGjC,IAAImT,OAAO,IAAII,cAAc,EAAE;AAC7B,QAAA,IAAI,CAACpjB,KAAK,CAACxG,MAAM,CAAC1J,oBAAoB,EAAE;AAAEmQ,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AAC3D,OAAA;AACA,MAAA,EAAE,IAAI,CAAC2B,KAAK,CAAClI,GAAG,CAAA;AAChBiqB,MAAAA,QAAQ,GAAG,IAAI,CAAA;AACjB,KAAA;IAEA,IAAIhT,IAAI,QAAyB,EAAE;MACjC,IAAI,CAACiR,YAAY,CAAC,SAAS,EAAE,IAAI,CAAChgB,KAAK,CAACwZ,WAAW,EAAE,CAAC,CAAA;MACtD,IAAI4I,WAAW,IAAIE,cAAc,EAAE;AACjC,QAAA,IAAI,CAACpjB,KAAK,CAACxG,MAAM,CAACvJ,cAAc,EAAE;AAAEgQ,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AACrD,OAAA;AACA,MAAA,EAAE,IAAI,CAAC2B,KAAK,CAAClI,GAAG,CAAA;AAChBqqB,MAAAA,SAAS,GAAG,IAAI,CAAA;AAClB,KAAA;AAEA,IAAA,IAAIvU,iBAAiB,CAAC,IAAI,CAAC8Q,cAAc,CAAC,IAAI,CAAC1e,KAAK,CAAClI,GAAG,CAAC,CAAC,EAAE;AAC1D,MAAA,MAAM,IAAI,CAACoH,KAAK,CAACxG,MAAM,CAACxG,gBAAgB,EAAE;AACxCiN,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,OAAC,CAAC,CAAA;AACJ,KAAA;;IAGA,MAAMwB,GAAG,GAAG,IAAI,CAACpE,KAAK,CAAC+C,KAAK,CAACpyB,KAAK,EAAE,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAC,CAACkqB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AAEzE,IAAA,IAAID,QAAQ,EAAE;AACZ,MAAA,IAAI,CAAC7C,WAAW,CAAYlE,GAAAA,EAAAA,GAAG,CAAC,CAAA;AAChC,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAImH,SAAS,EAAE;AACb,MAAA,IAAI,CAACjD,WAAW,CAAalE,GAAAA,EAAAA,GAAG,CAAC,CAAA;AACjC,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMtB,GAAG,GAAG2I,OAAO,GAAGzG,QAAQ,CAACZ,GAAG,EAAE,CAAC,CAAC,GAAGyH,UAAU,CAACzH,GAAG,CAAC,CAAA;AACxD,IAAA,IAAI,CAACkE,WAAW,CAASxF,GAAAA,EAAAA,GAAG,CAAC,CAAA;AAC/B,GAAA;;EAIA2B,aAAa,CAACF,cAAuB,EAAiB;IACpD,MAAM;MAAEzxB,IAAI;AAAEoO,MAAAA,GAAAA;AAAI,KAAC,GAAGujB,aAAa,CACjC,IAAI,CAACzE,KAAK,EACV,IAAI,CAAC5W,KAAK,CAAClI,GAAG,EACd,IAAI,CAACkI,KAAK,CAAC0X,SAAS,EACpB,IAAI,CAAC1X,KAAK,CAACyX,OAAO,EAClB0D,cAAc,EACd,IAAI,CAACsC,2BAA2B,CACjC,CAAA;AACD,IAAA,IAAI,CAACzd,KAAK,CAAClI,GAAG,GAAGA,GAAG,CAAA;AACpB,IAAA,OAAOpO,IAAI,CAAA;AACb,GAAA;EAEA63B,UAAU,CAACmB,KAAa,EAAQ;IAC9B,MAAM;MAAE1H,GAAG;MAAEljB,GAAG;MAAE2f,OAAO;AAAEC,MAAAA,SAAAA;KAAW,GAAG2C,kBAAkB,CACzDqI,KAAK,OAA4B,GAAG,QAAQ,GAAG,QAAQ,EACvD,IAAI,CAAC9L,KAAK,EACV,IAAI,CAAC5W,KAAK,CAAClI,GAAG,GAAG,CAAC;AAClB,IAAA,IAAI,CAACkI,KAAK,CAAC0X,SAAS,EACpB,IAAI,CAAC1X,KAAK,CAACyX,OAAO,EAClB,IAAI,CAACiG,uCAAuC,CAC7C,CAAA;AACD,IAAA,IAAI,CAAC1d,KAAK,CAAClI,GAAG,GAAGA,GAAG,GAAG,CAAC,CAAA;AACxB,IAAA,IAAI,CAACkI,KAAK,CAAC0X,SAAS,GAAGA,SAAS,CAAA;AAChC,IAAA,IAAI,CAAC1X,KAAK,CAACyX,OAAO,GAAGA,OAAO,CAAA;AAC5B,IAAA,IAAI,CAACyH,WAAW,CAAYlE,GAAAA,EAAAA,GAAG,CAAC,CAAA;AAClC,GAAA;;AAGA2H,EAAAA,wBAAwB,GAAS;AAC/B,IAAA,IAAI,CAAC,IAAI,CAAClH,KAAK,GAAW,EAAE;AAC1B,MAAA,IAAI,CAACxrB,UAAU,CAAC,IAAI,EAAY,CAAA,CAAA,CAAA;AAClC,KAAA;AAEA,IAAA,IAAI,CAAC+P,KAAK,CAAClI,GAAG,EAAE,CAAA;IAChB,IAAI,CAACupB,iBAAiB,EAAE,CAAA;AAC1B,GAAA;;AAGAA,EAAAA,iBAAiB,GAAS;IACxB,MAAMuB,OAAO,GAAG,IAAI,CAAChM,KAAK,CAAC,IAAI,CAAC5W,KAAK,CAAClI,GAAG,CAAC,CAAA;IAC1C,MAAM;MAAEkjB,GAAG;MAAEN,eAAe;MAAE5iB,GAAG;MAAE2f,OAAO;AAAEC,MAAAA,SAAAA;AAAU,KAAC,GACrD2C,kBAAkB,CAChB,UAAU,EACV,IAAI,CAACzD,KAAK,EACV,IAAI,CAAC5W,KAAK,CAAClI,GAAG,GAAG,CAAC;AAClB,IAAA,IAAI,CAACkI,KAAK,CAAC0X,SAAS,EACpB,IAAI,CAAC1X,KAAK,CAACyX,OAAO,EAClB,IAAI,CAACmG,yCAAyC,CAC/C,CAAA;AACH,IAAA,IAAI,CAAC5d,KAAK,CAAClI,GAAG,GAAGA,GAAG,GAAG,CAAC,CAAA;AACxB,IAAA,IAAI,CAACkI,KAAK,CAAC0X,SAAS,GAAGA,SAAS,CAAA;AAChC,IAAA,IAAI,CAAC1X,KAAK,CAACyX,OAAO,GAAGA,OAAO,CAAA;AAE5B,IAAA,IAAIiD,eAAe,EAAE;MACnB,IAAI,CAAC1a,KAAK,CAACgZ,6BAA6B,GAAG,IAAIhyB,QAAQ,CACrD0zB,eAAe,CAACjD,OAAO,EACvBiD,eAAe,CAAC5iB,GAAG,GAAG4iB,eAAe,CAAChD,SAAS,EAC/CgD,eAAe,CAAC5iB,GAAG,CACpB,CAAA;AACH,KAAA;IAEA,IAAI,IAAI,CAAC8e,KAAK,CAACiK,WAAW,CAAC/oB,GAAG,CAAC,KAAA,EAA0B,EAAE;AACzD,MAAA,IAAI,CAAConB,WAAW,CAEdxE,EAAAA,EAAAA,eAAe,GAAG,IAAI,GAAGkI,OAAO,GAAG5H,GAAG,GAAG,GAAG,CAC7C,CAAA;AACH,KAAC,MAAM;AACL,MAAA,IAAI,CAAChb,KAAK,CAAClI,GAAG,EAAE,CAAA;AAChB,MAAA,IAAI,CAAConB,WAAW,CAEdxE,EAAAA,EAAAA,eAAe,GAAG,IAAI,GAAGkI,OAAO,GAAG5H,GAAG,GAAG,IAAI,CAC9C,CAAA;AACH,KAAA;AACF,GAAA;EAEA2C,sBAAsB,CACpBoB,YAAiC,EACjC;AAAE5f,IAAAA,EAAAA;AAAqB,GAAC,EACxB;AACA,IAAA,MAAM/X,KAAK,GAAG+X,EAAE,CAAC/X,KAAK,CAAA;AAEtB,IAAA,IAAI,IAAI,CAAC4Y,KAAK,CAACiO,MAAM,IAAI,CAAC,IAAI,CAACjO,KAAK,CAACiZ,YAAY,CAACxK,GAAG,CAACrnB,KAAK,CAAC,EAAE;AAC5D,MAAA,IAAI,CAAC8X,KAAK,CAAC6f,YAAY,EAAE;AAAE5f,QAAAA,EAAAA;AAAG,OAAC,CAAC,CAAA;AAClC,KAAC,MAAM;AACL,MAAA,IAAI,CAACa,KAAK,CAACiZ,YAAY,CAAC1wB,GAAG,CAACnB,KAAK,EAAE,CAAC23B,YAAY,EAAE5f,EAAE,CAAC,CAAC,CAAA;AACxD,KAAA;AACF,GAAA;;EAWA8gB,SAAS,CAAC4C,SAAkB,EAAU;AACpC,IAAA,IAAI,CAAC7iB,KAAK,CAAC+Y,WAAW,GAAG,KAAK,CAAA;IAC9B,IAAIzK,IAAI,GAAG,EAAE,CAAA;AACb,IAAA,MAAM/mB,KAAK,GAAG,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAA;AAC5B,IAAA,IAAI6iB,UAAU,GAAG,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAA;IAC/B,IAAI+qB,SAAS,KAAK1N,SAAS,EAAE;MAC3B,IAAI,CAACnV,KAAK,CAAClI,GAAG,IAAI+qB,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA;AAC/C,KAAA;IAEA,OAAO,IAAI,CAAC7iB,KAAK,CAAClI,GAAG,GAAG,IAAI,CAAC5P,MAAM,EAAE;MACnC,MAAMgyB,EAAE,GAAG,IAAI,CAACwE,cAAc,CAAC,IAAI,CAAC1e,KAAK,CAAClI,GAAG,CAAC,CAAA;AAC9C,MAAA,IAAIiW,gBAAgB,CAACmM,EAAE,CAAC,EAAE;QACxB,IAAI,CAACla,KAAK,CAAClI,GAAG,IAAIoiB,EAAE,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA;AACxC,OAAC,MAAM,IAAIA,EAAE,KAAA,EAAwB,EAAE;AACrC,QAAA,IAAI,CAACla,KAAK,CAAC+Y,WAAW,GAAG,IAAI,CAAA;AAE7BzK,QAAAA,IAAI,IAAI,IAAI,CAACsI,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAC,CAAA;AACpD,QAAA,MAAMgrB,QAAQ,GAAG,IAAI,CAAC9iB,KAAK,CAACwZ,WAAW,EAAE,CAAA;AACzC,QAAA,MAAMuJ,eAAe,GACnB,IAAI,CAAC/iB,KAAK,CAAClI,GAAG,KAAKvQ,KAAK,GAAGqmB,iBAAiB,GAAGG,gBAAgB,CAAA;AAEjE,QAAA,IAAI,IAAI,CAAC6I,KAAK,CAACC,UAAU,CAAC,EAAE,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,QAAyB,EAAE;AACpE,UAAA,IAAI,CAACoH,KAAK,CAACxG,MAAM,CAACpH,oBAAoB,EAAE;AACtC6N,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,WAAC,CAAC,CAAA;AACFmB,UAAAA,UAAU,GAAG,IAAI,CAAC3a,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAA;AAC/B,UAAA,SAAA;AACF,SAAA;AAEA,QAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAChB,QAAA,MAAMkrB,GAAG,GAAG,IAAI,CAAC3H,aAAa,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI2H,GAAG,KAAK,IAAI,EAAE;AAChB,UAAA,IAAI,CAACD,eAAe,CAACC,GAAG,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC9jB,KAAK,CAACxG,MAAM,CAACjL,0BAA0B,EAAE;AAAE0R,cAAAA,EAAE,EAAE2jB,QAAAA;AAAS,aAAC,CAAC,CAAA;AACjE,WAAA;AAEAxU,UAAAA,IAAI,IAAI/iB,MAAM,CAAC+vB,aAAa,CAAC0H,GAAG,CAAC,CAAA;AACnC,SAAA;AACArI,QAAAA,UAAU,GAAG,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAA;AAC7B,OAAC,MAAM;AACL,QAAA,MAAA;AACF,OAAA;AACF,KAAA;AACA,IAAA,OAAOwW,IAAI,GAAG,IAAI,CAACsI,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAC,CAAA;AAC5D,GAAA;;EAKA0pB,QAAQ,CAACqB,SAAkB,EAAQ;AACjC,IAAA,MAAMvU,IAAI,GAAG,IAAI,CAAC2R,SAAS,CAAC4C,SAAS,CAAC,CAAA;AACtC,IAAA,MAAMx3B,IAAI,GAAG43B,UAAY,CAAC96B,GAAG,CAACmmB,IAAI,CAAC,CAAA;IACnC,IAAIjjB,IAAI,KAAK8pB,SAAS,EAAE;MAGtB,IAAI,CAAC+J,WAAW,CAAC7zB,IAAI,EAAEwhB,cAAc,CAACxhB,IAAI,CAAC,CAAC,CAAA;AAC9C,KAAC,MAAM;AACL,MAAA,IAAI,CAAC6zB,WAAW,CAAU5Q,GAAAA,EAAAA,IAAI,CAAC,CAAA;AACjC,KAAA;AACF,GAAA;AAEAwP,EAAAA,mBAAmB,GAAS;IAC1B,MAAM;AAAEzyB,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;IAC3B,IAAIuM,cAAc,CAAClhB,IAAI,CAAC,IAAI,IAAI,CAAC2U,KAAK,CAAC+Y,WAAW,EAAE;AAClD,MAAA,IAAI,CAAC7Z,KAAK,CAACxG,MAAM,CAAClJ,0BAA0B,EAAE;AAC5C2P,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAQ;QACvB5O,YAAY,EAAEod,cAAc,CAACxhB,IAAI,CAAA;AACnC,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;AAWA6T,EAAAA,KAAK,CACH6f,YAAiD,EACjDmE,eAA8C,EACpB;IAC1B,MAAM;AAAE/jB,QAAAA,EAAAA;AAAe,OAAC,GAAG+jB,eAAe;AAA3BxrB,MAAAA,OAAO,iCAAKwrB,eAAe,EAAA,SAAA,CAAA,CAAA;AAC1C,IAAA,MAAMzrB,GAAG,GAAG0H,EAAE,YAAYnY,QAAQ,GAAGmY,EAAE,GAAGA,EAAE,CAAC1H,GAAG,CAAClQ,KAAK,CAAA;IAEtD,MAAM47B,KAAK,GAAGpE,YAAY,CAAC;MAAEtnB,GAAG;AAAEC,MAAAA,OAAAA;AAAQ,KAAC,CAAC,CAAA;IAE5C,IAAI,CAAC,IAAI,CAAC4B,OAAO,CAACikB,aAAa,EAAE,MAAM4F,KAAK,CAAA;AAC5C,IAAA,IAAI,CAAC,IAAI,CAAC9F,WAAW,EAAE,IAAI,CAACrd,KAAK,CAAC2X,MAAM,CAAChb,IAAI,CAACwmB,KAAK,CAAC,CAAA;AAEpD,IAAA,OAAOA,KAAK,CAAA;AACd,GAAA;;AAQAC,EAAAA,cAAc,CACZrE,YAAiD,EACjDmE,eAA8C,EACZ;IAClC,MAAM;AAAE/jB,QAAAA,EAAAA;AAAe,OAAC,GAAG+jB,eAAe;AAA3BxrB,MAAAA,OAAO,iCAAKwrB,eAAe,EAAA,UAAA,CAAA,CAAA;AAC1C,IAAA,MAAMzrB,GAAG,GAAG0H,EAAE,YAAYnY,QAAQ,GAAGmY,EAAE,GAAGA,EAAE,CAAC1H,GAAG,CAAClQ,KAAK,CAAA;AACtD,IAAA,MAAMuQ,GAAG,GAAGL,GAAG,CAACrQ,KAAK,CAAA;AACrB,IAAA,MAAMuwB,MAAM,GAAG,IAAI,CAAC3X,KAAK,CAAC2X,MAAM,CAAA;AAEhC,IAAA,KAAK,IAAIjvB,CAAC,GAAGivB,MAAM,CAACzvB,MAAM,GAAG,CAAC,EAAEQ,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AAC3C,MAAA,MAAMy6B,KAAK,GAAGxL,MAAM,CAACjvB,CAAC,CAAC,CAAA;AACvB,MAAA,IAAIy6B,KAAK,CAAC1rB,GAAG,CAACrQ,KAAK,KAAK0Q,GAAG,EAAE;AAE3B,QAAA,OAAQ6f,MAAM,CAACjvB,CAAC,CAAC,GAAGq2B,YAAY,CAAC;UAAEtnB,GAAG;AAAEC,UAAAA,OAAAA;AAAQ,SAAC,CAAC,CAAA;AACpD,OAAA;AACA,MAAA,IAAIyrB,KAAK,CAAC1rB,GAAG,CAACrQ,KAAK,GAAG0Q,GAAG,EAAE,MAAA;AAC7B,KAAA;AAEA,IAAA,OAAO,IAAI,CAACoH,KAAK,CAAC6f,YAAY,EAAEmE,eAAe,CAAC,CAAA;AAClD,GAAA;;EAIA5gB,aAAa,CAACqd,QAAmB,EAAQ,EAAC;;AAG1C1vB,EAAAA,UAAU,CAACwH,GAAqB,EAAEpM,IAAgB,EAAQ;AACxD,IAAA,MAAM,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAACnE,eAAe,EAAE;MACvCC,QAAQ,EAAEnJ,IAAI,GAAGwhB,cAAc,CAACxhB,IAAI,CAAC,GAAG,IAAI;MAC5C8T,EAAE,EAAE1H,GAAG,IAAI,IAAI,GAAGA,GAAG,GAAG,IAAI,CAACuI,KAAK,CAAC3B,QAAAA;AACrC,KAAC,CAAC,CAAA;AACJ,GAAA;AAEA2hB,EAAAA,YAAY,CAACpL,UAAkB,EAAEnd,GAAc,EAAQ;AACrD,IAAA,IAAI,IAAI,CAACiI,SAAS,CAACkV,UAAU,CAAC,EAAE;AAC9B,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AAEA,IAAA,MAAM,IAAI,CAAC1V,KAAK,CAACxG,MAAM,CAAC3H,aAAa,EAAE;MACrCoO,EAAE,EAAE1H,GAAG,IAAI,IAAI,GAAGA,GAAG,GAAG,IAAI,CAACuI,KAAK,CAAC3B,QAAQ;MAC3CrN,aAAa,EAAE,CAAC4jB,UAAU,CAAA;AAC5B,KAAC,CAAC,CAAA;AACJ,GAAA;EAEAyO,eAAe,CAACC,WAAqB,EAAQ;AAC3C,IAAA,IAAI,CAACA,WAAW,CAACC,IAAI,CAACtyB,IAAI,IAAI,IAAI,CAACyO,SAAS,CAACzO,IAAI,CAAC,CAAC,EAAE;AACnD,MAAA,MAAM,IAAI,CAACiO,KAAK,CAACxG,MAAM,CAACrH,mBAAmB,EAAE;AAC3C8N,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAQ;AACvBrN,QAAAA,aAAa,EAAEsyB,WAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;EAEA9F,YAAY,CAAC2F,KAAgC,EAAE;AAC7C,IAAA,OAAO,CAACrrB,GAAW,EAAE4f,SAAiB,EAAED,OAAe,KAAK;AAC1D,MAAA,IAAI,CAACvY,KAAK,CAACikB,KAAK,EAAE;AAChBhkB,QAAAA,EAAE,EAAE8d,aAAa,CAACnlB,GAAG,EAAE4f,SAAS,EAAED,OAAO,CAAA;AAC3C,OAAC,CAAC,CAAA;KACH,CAAA;AACH,GAAA;AAmDF;;ACliDO,MAAM+L,UAAU,CAAC;AAAA,EAAA,WAAA,GAAA;AAAA,IAAA,IAAA,CAEtBC,YAAY,GAAgB,IAAIjtB,GAAG,EAAE,CAAA;AAAA,IAAA,IAAA,CAGrCktB,aAAa,GAAmC,IAAIlhB,GAAG,EAAE,CAAA;AAAA,IAAA,IAAA,CAIzDmhB,qBAAqB,GAA0B,IAAInhB,GAAG,EAAE,CAAA;AAAA,GAAA;AAC1D,CAAA;AAEe,MAAMohB,iBAAiB,CAAC;EAKrC38B,WAAW,CAACsrB,MAAiB,EAAE;AAAA,IAAA,IAAA,CAJ/BA,MAAM,GAAA,KAAA,CAAA,CAAA;IAAA,IACNsR,CAAAA,KAAK,GAAsB,EAAE,CAAA;AAAA,IAAA,IAAA,CAC7BF,qBAAqB,GAA0B,IAAInhB,GAAG,EAAE,CAAA;IAGtD,IAAI,CAAC+P,MAAM,GAAGA,MAAM,CAAA;AACtB,GAAA;AAEAzD,EAAAA,OAAO,GAAe;IACpB,OAAO,IAAI,CAAC+U,KAAK,CAAC,IAAI,CAACA,KAAK,CAAC37B,MAAM,GAAG,CAAC,CAAC,CAAA;AAC1C,GAAA;AAEAqrB,EAAAA,KAAK,GAAG;IACN,IAAI,CAACsQ,KAAK,CAAClnB,IAAI,CAAC,IAAI6mB,UAAU,EAAE,CAAC,CAAA;AACnC,GAAA;AAEAhQ,EAAAA,IAAI,GAAG;AACL,IAAA,MAAMsQ,aAAa,GAAG,IAAI,CAACD,KAAK,CAAC1W,GAAG,EAAE,CAAA;;AAKtC,IAAA,MAAM2B,OAAO,GAAG,IAAI,CAACA,OAAO,EAAE,CAAA;;AAG9B,IAAA,KAAK,MAAM,CAAC7d,IAAI,EAAEwG,GAAG,CAAC,IAAIS,KAAK,CAAC6rB,IAAI,CAACD,aAAa,CAACH,qBAAqB,CAAC,EAAE;AACzE,MAAA,IAAI7U,OAAO,EAAE;QACX,IAAI,CAACA,OAAO,CAAC6U,qBAAqB,CAAClV,GAAG,CAACxd,IAAI,CAAC,EAAE;UAC5C6d,OAAO,CAAC6U,qBAAqB,CAACp7B,GAAG,CAAC0I,IAAI,EAAEwG,GAAG,CAAC,CAAA;AAC9C,SAAA;AACF,OAAC,MAAM;QACL,IAAI,CAAC8a,MAAM,CAACrT,KAAK,CAACxG,MAAM,CAACvI,6BAA6B,EAAE;AACtDgP,UAAAA,EAAE,EAAE1H,GAAG;AACP/P,UAAAA,cAAc,EAAEuJ,IAAAA;AAClB,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AACF,GAAA;AAEA+yB,EAAAA,kBAAkB,CAChB/yB,IAAY,EACZgzB,WAA8B,EAC9BxsB,GAAa,EACb;IACA,MAAM;MAAEgsB,YAAY;MAAEC,aAAa;AAAEC,MAAAA,qBAAAA;AAAsB,KAAC,GAC1D,IAAI,CAAC7U,OAAO,EAAE,CAAA;AAChB,IAAA,IAAIoV,SAAS,GAAGT,YAAY,CAAChV,GAAG,CAACxd,IAAI,CAAC,CAAA;IAEtC,IAAIgzB,WAAW,GAAGrS,2BAA2B,EAAE;MAC7C,MAAMuS,QAAQ,GAAGD,SAAS,IAAIR,aAAa,CAACv7B,GAAG,CAAC8I,IAAI,CAAC,CAAA;AACrD,MAAA,IAAIkzB,QAAQ,EAAE;AACZ,QAAA,MAAMC,SAAS,GAAGD,QAAQ,GAAG1S,yBAAyB,CAAA;AACtD,QAAA,MAAM4S,SAAS,GAAGJ,WAAW,GAAGxS,yBAAyB,CAAA;AAEzD,QAAA,MAAM6S,OAAO,GAAGH,QAAQ,GAAGvS,2BAA2B,CAAA;AACtD,QAAA,MAAM2S,OAAO,GAAGN,WAAW,GAAGrS,2BAA2B,CAAA;;AAKzDsS,QAAAA,SAAS,GAAGI,OAAO,KAAKC,OAAO,IAAIH,SAAS,KAAKC,SAAS,CAAA;QAE1D,IAAI,CAACH,SAAS,EAAER,aAAa,CAAC3P,MAAM,CAAC9iB,IAAI,CAAC,CAAA;AAC5C,OAAC,MAAM,IAAI,CAACizB,SAAS,EAAE;AACrBR,QAAAA,aAAa,CAACn7B,GAAG,CAAC0I,IAAI,EAAEgzB,WAAW,CAAC,CAAA;AACtC,OAAA;AACF,KAAA;AAEA,IAAA,IAAIC,SAAS,EAAE;MACb,IAAI,CAAC3R,MAAM,CAACrT,KAAK,CAACxG,MAAM,CAAC9F,wBAAwB,EAAE;AACjDuM,QAAAA,EAAE,EAAE1H,GAAG;AACP/P,QAAAA,cAAc,EAAEuJ,IAAAA;AAClB,OAAC,CAAC,CAAA;AACJ,KAAA;AAEAwyB,IAAAA,YAAY,CAAC5P,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AACtB0yB,IAAAA,qBAAqB,CAAC5P,MAAM,CAAC9iB,IAAI,CAAC,CAAA;AACpC,GAAA;AAEA8N,EAAAA,cAAc,CAAC9N,IAAY,EAAEwG,GAAa,EAAE;AAC1C,IAAA,IAAIqH,UAAU,CAAA;AACd,IAAA,KAAKA,UAAU,IAAI,IAAI,CAAC+kB,KAAK,EAAE;MAC7B,IAAI/kB,UAAU,CAAC2kB,YAAY,CAAChV,GAAG,CAACxd,IAAI,CAAC,EAAE,OAAA;AACzC,KAAA;AAEA,IAAA,IAAI6N,UAAU,EAAE;MACdA,UAAU,CAAC6kB,qBAAqB,CAACp7B,GAAG,CAAC0I,IAAI,EAAEwG,GAAG,CAAC,CAAA;AACjD,KAAC,MAAM;MAEL,IAAI,CAAC8a,MAAM,CAACrT,KAAK,CAACxG,MAAM,CAACvI,6BAA6B,EAAE;AACtDgP,QAAAA,EAAE,EAAE1H,GAAG;AACP/P,QAAAA,cAAc,EAAEuJ,IAAAA;AAClB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AACF;;ACpEA,MAAMuzB,WAAW,GAAG,CAAC;AACnBC,EAAAA,+BAA+B,GAAG,CAAC;AACnCC,EAAAA,oCAAoC,GAAG,CAAC;AACxCC,EAAAA,qBAAqB,GAAG,CAAC,CAAA;AAI3B,MAAMC,eAAe,CAAC;AAGpB39B,EAAAA,WAAW,CAACoE,IAAyB,GAAGm5B,WAAW,EAAE;AAAA,IAAA,IAAA,CAFrDn5B,IAAI,GAAA,KAAA,CAAA,CAAA;IAGF,IAAI,CAACA,IAAI,GAAGA,IAAI,CAAA;AAClB,GAAA;AAEAw5B,EAAAA,8BAA8B,GAAkC;IAC9D,OACE,IAAI,CAACx5B,IAAI,KAAKq5B,oCAAoC,IAClD,IAAI,CAACr5B,IAAI,KAAKo5B,+BAA+B,CAAA;AAEjD,GAAA;AAEAK,EAAAA,+BAA+B,GAAG;AAChC,IAAA,OAAO,IAAI,CAACz5B,IAAI,KAAKs5B,qBAAqB,CAAA;AAC5C,GAAA;AACF,CAAA;AAUA,MAAMI,qBAAqB,SAASH,eAAe,CAAC;EAGlD39B,WAAW,CAACoE,IAAW,EAAE;IACvB,KAAK,CAACA,IAAI,CAAC,CAAA;AAAC,IAAA,IAAA,CAHd25B,iBAAiB,GACf,IAAIxiB,GAAG,EAAE,CAAA;AAGX,GAAA;EACAyiB,sBAAsB,CACpBC,iBAA4C,EAC5C;AACE/lB,IAAAA,EAAAA;AAGF,GAAC,EACD;AACA,IAAA,MAAM/X,KAAK,GAAG+X,EAAE,CAAC/X,KAAK,CAAA;AAEtB,IAAA,IAAI,CAAC49B,iBAAiB,CAACz8B,GAAG,CAACnB,KAAK,EAAE,CAAC89B,iBAAiB,EAAE/lB,EAAE,CAAC,CAAC,CAAA;AAC5D,GAAA;EACAgmB,qBAAqB,CAAC/9B,KAAa,EAAE;AACnC,IAAA,IAAI,CAAC49B,iBAAiB,CAACjR,MAAM,CAAC3sB,KAAK,CAAC,CAAA;AACtC,GAAA;EACAg+B,aAAa,CACXC,QAAmE,EACnE;AACA,IAAA,IAAI,CAACL,iBAAiB,CAAClG,OAAO,CAACuG,QAAQ,CAAC,CAAA;AAC1C,GAAA;AACF,CAAA;AAEe,MAAMC,sBAAsB,CAAC;EAI1Cr+B,WAAW,CAACsrB,MAAiB,EAAE;AAAA,IAAA,IAAA,CAH/BA,MAAM,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CACNsR,KAAK,GAA2B,CAAC,IAAIe,eAAe,EAAE,CAAC,CAAA;IAGrD,IAAI,CAACrS,MAAM,GAAGA,MAAM,CAAA;AACtB,GAAA;EACAgB,KAAK,CAACE,KAAsB,EAAE;AAC5B,IAAA,IAAI,CAACoQ,KAAK,CAAClnB,IAAI,CAAC8W,KAAK,CAAC,CAAA;AACxB,GAAA;AAEAD,EAAAA,IAAI,GAAG;AACL,IAAA,IAAI,CAACqQ,KAAK,CAAC1W,GAAG,EAAE,CAAA;AAClB,GAAA;;EASAoY,+BAA+B,CAC7BxG,YAAuD,EACvD;AACE5f,IAAAA,EAAE,EAAElG,IAAAA;AAGN,GAAC,EACK;AACN,IAAA,MAAMusB,MAAM,GAAG;AAAErmB,MAAAA,EAAE,EAAElG,IAAI,CAACxB,GAAG,CAAClQ,KAAAA;KAAO,CAAA;IACrC,MAAM;AAAEs8B,MAAAA,KAAAA;AAAM,KAAC,GAAG,IAAI,CAAA;AACtB,IAAA,IAAIn7B,CAAC,GAAGm7B,KAAK,CAAC37B,MAAM,GAAG,CAAC,CAAA;AACxB,IAAA,IAAIurB,KAAsB,GAAGoQ,KAAK,CAACn7B,CAAC,CAAC,CAAA;AACrC,IAAA,OAAO,CAAC+qB,KAAK,CAACqR,+BAA+B,EAAE,EAAE;AAC/C,MAAA,IAAIrR,KAAK,CAACoR,8BAA8B,EAAE,EAAE;AAC1CpR,QAAAA,KAAK,CAACwR,sBAAsB,CAAClG,YAAY,EAAEyG,MAAM,CAAC,CAAA;AACpD,OAAC,MAAM;AAGL,QAAA,OAAA;AACF,OAAA;AACA/R,MAAAA,KAAK,GAAGoQ,KAAK,CAAC,EAAEn7B,CAAC,CAAC,CAAA;AACpB,KAAA;IACA,IAAI,CAAC6pB,MAAM,CAACrT,KAAK,CAAC6f,YAAY,EAAEyG,MAAM,CAAC,CAAA;AACzC,GAAA;;EAqBAC,gCAAgC,CAC9BtC,KAAgC,EAChC;AACEhkB,IAAAA,EAAE,EAAElG,IAAAA;AAGN,GAAC,EACK;IACN,MAAM;AAAE4qB,MAAAA,KAAAA;AAAM,KAAC,GAAG,IAAI,CAAA;IACtB,MAAMpQ,KAAsB,GAAGoQ,KAAK,CAACA,KAAK,CAAC37B,MAAM,GAAG,CAAC,CAAC,CAAA;AACtD,IAAA,MAAMs9B,MAAM,GAAG;AAAErmB,MAAAA,EAAE,EAAElG,IAAI,CAACxB,GAAG,CAAClQ,KAAAA;KAAO,CAAA;AACrC,IAAA,IAAIksB,KAAK,CAACqR,+BAA+B,EAAE,EAAE;MAC3C,IAAI,CAACvS,MAAM,CAACrT,KAAK,CAACikB,KAAK,EAAEqC,MAAM,CAAC,CAAA;AAClC,KAAC,MAAM,IAAI/R,KAAK,CAACoR,8BAA8B,EAAE,EAAE;AACjDpR,MAAAA,KAAK,CAACwR,sBAAsB,CAAC9B,KAAK,EAAEqC,MAAM,CAAC,CAAA;AAC7C,KAAC,MAAM;AACL,MAAA,OAAA;AACF,KAAA;AACF,GAAA;;AAQAE,EAAAA,+BAA+B,CAAC;AAAEvmB,IAAAA,EAAAA;AAAqB,GAAC,EAAQ;IAC9D,MAAM;AAAE0kB,MAAAA,KAAAA;AAAM,KAAC,GAAG,IAAI,CAAA;AACtB,IAAA,IAAIn7B,CAAC,GAAGm7B,KAAK,CAAC37B,MAAM,GAAG,CAAC,CAAA;AACxB,IAAA,IAAIurB,KAAsB,GAAGoQ,KAAK,CAACn7B,CAAC,CAAC,CAAA;AACrC,IAAA,OAAO+qB,KAAK,CAACoR,8BAA8B,EAAE,EAAE;AAC7C,MAAA,IAAIpR,KAAK,CAACpoB,IAAI,KAAKq5B,oCAAoC,EAAE;AACvDjR,QAAAA,KAAK,CAACwR,sBAAsB,CAACvsB,MAAM,CAAC9M,sBAAsB,EAAE;AAAEuT,UAAAA,EAAAA;AAAG,SAAC,CAAC,CAAA;AACrE,OAAA;AACAsU,MAAAA,KAAK,GAAGoQ,KAAK,CAAC,EAAEn7B,CAAC,CAAC,CAAA;AACpB,KAAA;AACF,GAAA;AAEAi9B,EAAAA,iBAAiB,GAAS;IACxB,MAAM;AAAE9B,MAAAA,KAAAA;AAAM,KAAC,GAAG,IAAI,CAAA;IACtB,MAAMlR,YAAY,GAAGkR,KAAK,CAACA,KAAK,CAAC37B,MAAM,GAAG,CAAC,CAAC,CAAA;AAC5C,IAAA,IAAI,CAACyqB,YAAY,CAACkS,8BAA8B,EAAE,EAAE,OAAA;IACpDlS,YAAY,CAACyS,aAAa,CAAC,CAAC,CAACrG,YAAY,EAAEtnB,GAAG,CAAC,KAAK;AAClD,MAAA,IAAI,CAAC8a,MAAM,CAACrT,KAAK,CAAC6f,YAAY,EAAE;AAAE5f,QAAAA,EAAE,EAAE1H,GAAAA;AAAI,OAAC,CAAC,CAAA;AAE5C,MAAA,IAAI/O,CAAC,GAAGm7B,KAAK,CAAC37B,MAAM,GAAG,CAAC,CAAA;AACxB,MAAA,IAAIurB,KAAK,GAAGoQ,KAAK,CAACn7B,CAAC,CAAC,CAAA;AACpB,MAAA,OAAO+qB,KAAK,CAACoR,8BAA8B,EAAE,EAAE;AAC7CpR,QAAAA,KAAK,CAAC0R,qBAAqB,CAAC1tB,GAAG,CAACrQ,KAAK,CAAC,CAAA;AACtCqsB,QAAAA,KAAK,GAAGoQ,KAAK,CAAC,EAAEn7B,CAAC,CAAC,CAAA;AACpB,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;AACF,CAAA;AAEO,SAASk9B,4BAA4B,GAAG;AAC7C,EAAA,OAAO,IAAIhB,eAAe,CAACD,qBAAqB,CAAC,CAAA;AACnD,CAAA;AAEO,SAASkB,iBAAiB,GAAG;AAClC,EAAA,OAAO,IAAId,qBAAqB,CAACN,+BAA+B,CAAC,CAAA;AACnE,CAAA;AAEO,SAASqB,kBAAkB,GAAG;AACnC,EAAA,OAAO,IAAIf,qBAAqB,CAACL,oCAAoC,CAAC,CAAA;AACxE,CAAA;AAEO,SAASqB,kBAAkB,GAAG;EACnC,OAAO,IAAInB,eAAe,EAAE,CAAA;AAC9B;;ACtPO;AACLoB,EAAAA,KAAK,GAAG,MAAM;AAEdC,EAAAA,WAAW,GAAG,MAAM;AAEpBC,EAAAA,WAAW,GAAG,MAAM;AAEpBC,EAAAA,YAAY,GAAG,MAAM;AACrBC,EAAAA,QAAQ,GAAG,MAAM,CAAA;;AAkCJ,MAAMC,0BAA0B,CAAC;AAAA,EAAA,WAAA,GAAA;IAAA,IAC9CC,CAAAA,MAAM,GAAkB,EAAE,CAAA;AAAA,GAAA;EAC1B/S,KAAK,CAAC7Z,KAAa,EAAE;AACnB,IAAA,IAAI,CAAC4sB,MAAM,CAAC3pB,IAAI,CAACjD,KAAK,CAAC,CAAA;AACzB,GAAA;AAEA8Z,EAAAA,IAAI,GAAG;AACL,IAAA,IAAI,CAAC8S,MAAM,CAACnZ,GAAG,EAAE,CAAA;AACnB,GAAA;AAEAoZ,EAAAA,YAAY,GAAW;IACrB,OAAO,IAAI,CAACD,MAAM,CAAC,IAAI,CAACA,MAAM,CAACp+B,MAAM,GAAG,CAAC,CAAC,CAAA;AAC5C,GAAA;AAEA,EAAA,IAAIs+B,QAAQ,GAAY;IACtB,OAAO,CAAC,IAAI,CAACD,YAAY,EAAE,GAAGL,WAAW,IAAI,CAAC,CAAA;AAChD,GAAA;AAEA,EAAA,IAAIO,QAAQ,GAAY;IACtB,OAAO,CAAC,IAAI,CAACF,YAAY,EAAE,GAAGN,WAAW,IAAI,CAAC,CAAA;AAChD,GAAA;AAEA,EAAA,IAAIS,SAAS,GAAY;IACvB,OAAO,CAAC,IAAI,CAACH,YAAY,EAAE,GAAGJ,YAAY,IAAI,CAAC,CAAA;AACjD,GAAA;AAEA,EAAA,IAAIQ,KAAK,GAAY;IACnB,OAAO,CAAC,IAAI,CAACJ,YAAY,EAAE,GAAGH,QAAQ,IAAI,CAAC,CAAA;AAC7C,GAAA;AACF,CAAA;AAEO,SAASQ,aAAa,CAC3BzrB,OAAgB,EAChBmB,WAAoB,EACT;AACX,EAAA,OAAO,CAACnB,OAAO,GAAG+qB,WAAW,GAAG,CAAC,KAAK5pB,WAAW,GAAG2pB,WAAW,GAAG,CAAC,CAAC,CAAA;AACtE;;ACzCe,MAAeY,UAAU,SAASzJ,SAAS,CAAC;;EAIzD0J,QAAQ,CACN7tB,IAAmB,EACnB3Q,GAAW,EACXE,KAAU,EACVU,UAAmB,GAAG,IAAI,EACpB;IACN,IAAI,CAAC+P,IAAI,EAAE,OAAA;IAEX,MAAM6B,KAAK,GAAI7B,IAAI,CAAC6B,KAAK,GAAG7B,IAAI,CAAC6B,KAAK,IAAI,EAAG,CAAA;AAC7C,IAAA,IAAI5R,UAAU,EAAE;AACd4R,MAAAA,KAAK,CAACxS,GAAG,CAAC,GAAGE,KAAK,CAAA;AACpB,KAAC,MAAM;AACLM,MAAAA,MAAM,CAACO,cAAc,CAACyR,KAAK,EAAExS,GAAG,EAAE;QAAEY,UAAU;AAAEV,QAAAA,KAAAA;AAAM,OAAC,CAAC,CAAA;AAC1D,KAAA;AACF,GAAA;;EAIAu+B,YAAY,CAAClwB,KAAgB,EAAW;AACtC,IAAA,OAAO,IAAI,CAACmJ,KAAK,CAAC3U,IAAI,KAAKwL,KAAK,IAAI,CAAC,IAAI,CAACmJ,KAAK,CAAC+Y,WAAW,CAAA;AAC7D,GAAA;AAEAiO,EAAAA,oBAAoB,CAACC,SAAiB,EAAEh2B,IAAY,EAAW;AAC7D,IAAA,MAAMi2B,OAAO,GAAGD,SAAS,GAAGh2B,IAAI,CAAC/I,MAAM,CAAA;AACvC,IAAA,IAAI,IAAI,CAAC0uB,KAAK,CAAC+C,KAAK,CAACsN,SAAS,EAAEC,OAAO,CAAC,KAAKj2B,IAAI,EAAE;MACjD,MAAMk2B,MAAM,GAAG,IAAI,CAACvQ,KAAK,CAACC,UAAU,CAACqQ,OAAO,CAAC,CAAA;AAC7C,MAAA,OAAO,EACLnZ,gBAAgB,CAACoZ,MAAM,CAAC;AAIxB,MAAA,CAACA,MAAM,GAAG,MAAM,MAAM,MAAM,CAC7B,CAAA;AACH,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEAC,qBAAqB,CAACn2B,IAAY,EAAW;AAC3C,IAAA,MAAM8d,IAAI,GAAG,IAAI,CAACuP,cAAc,EAAE,CAAA;AAClC,IAAA,OAAO,IAAI,CAAC0I,oBAAoB,CAACjY,IAAI,EAAE9d,IAAI,CAAC,CAAA;AAC9C,GAAA;;EAIAo2B,aAAa,CAACxwB,KAAgB,EAAW;AACvC,IAAA,IAAI,IAAI,CAACkwB,YAAY,CAAClwB,KAAK,CAAC,EAAE;MAC5B,IAAI,CAACkY,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;AAIAuY,EAAAA,gBAAgB,CACdzwB,KAAgB,EAChBkoB,YAAyC,EACnC;AACN,IAAA,IAAI,CAAC,IAAI,CAACsI,aAAa,CAACxwB,KAAK,CAAC,EAAE;MAC9B,IAAIkoB,YAAY,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,IAAI,CAAC7f,KAAK,CAAC6f,YAAY,EAAE;AAAE5f,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,SAAC,CAAC,CAAA;AAC7D,OAAA;AACA,MAAA,MAAM,IAAI,CAACpO,UAAU,CAAC,IAAI,EAAE4G,KAAK,CAAC,CAAA;AACpC,KAAA;AACF,GAAA;;AAIA0wB,EAAAA,kBAAkB,GAAY;AAC5B,IAAA,OACE,IAAI,CAAC9L,KAAK,CAAA,GAAA,CAAQ,IAClB,IAAI,CAACA,KAAK,CAAW,CAAA,CAAA,IACrB,IAAI,CAAC+L,qBAAqB,EAAE,CAAA;AAEhC,GAAA;AAEAA,EAAAA,qBAAqB,GAAY;IAC/B,OAAOvQ,SAAS,CAACpJ,IAAI,CACnB,IAAI,CAAC+I,KAAK,CAAC+C,KAAK,CAAC,IAAI,CAAC3Z,KAAK,CAACoB,aAAa,CAACha,KAAK,EAAE,IAAI,CAAC4Y,KAAK,CAACzY,KAAK,CAAC,CACnE,CAAA;AACH,GAAA;AAEAkgC,EAAAA,qBAAqB,GAAY;AAC/BnQ,IAAAA,yBAAyB,CAACkH,SAAS,GAAG,IAAI,CAACxe,KAAK,CAACxY,GAAG,CAAA;AACpD,IAAA,OAAO8vB,yBAAyB,CAACzJ,IAAI,CAAC,IAAI,CAAC+I,KAAK,CAAC,CAAA;AACnD,GAAA;AAEA8Q,EAAAA,gBAAgB,GAAY;IAC1B,OAAO,IAAI,CAAC1J,GAAG,CAAA,EAAA,CAAS,IAAI,IAAI,CAACuJ,kBAAkB,EAAE,CAAA;AACvD,GAAA;;AAKAI,EAAAA,SAAS,CAACC,QAAiB,GAAG,IAAI,EAAQ;IACxC,IAAIA,QAAQ,GAAG,IAAI,CAACF,gBAAgB,EAAE,GAAG,IAAI,CAAC1J,GAAG,CAAA,EAAA,CAAS,EAAE,OAAA;AAC5D,IAAA,IAAI,CAAC9e,KAAK,CAACxG,MAAM,CAAC5H,gBAAgB,EAAE;AAAEqO,MAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACoB,aAAAA;AAAc,KAAC,CAAC,CAAA;AACvE,GAAA;;AAKAymB,EAAAA,MAAM,CAACx8B,IAAe,EAAEoM,GAAqB,EAAQ;AACnD,IAAA,IAAI,CAACumB,GAAG,CAAC3yB,IAAI,CAAC,IAAI,IAAI,CAAC4E,UAAU,CAACwH,GAAG,EAAEpM,IAAI,CAAC,CAAA;AAC9C,GAAA;;EAIAy8B,QAAQ,CACNC,EAAqC,EACrCC,QAAe,GAAG,IAAI,CAAChoB,KAAK,CAACpI,KAAK,EAAE,EAIW;AAC/C,IAAA,MAAMqwB,WAEL,GAAG;AAAEhvB,MAAAA,IAAI,EAAE,IAAA;KAAM,CAAA;IAClB,IAAI;MACF,MAAMA,IAAI,GAAG8uB,EAAE,CAAC,CAAC9uB,IAAI,GAAG,IAAI,KAAK;QAC/BgvB,WAAW,CAAChvB,IAAI,GAAGA,IAAI,CAAA;AACvB,QAAA,MAAMgvB,WAAW,CAAA;AACnB,OAAC,CAAC,CAAA;AACF,MAAA,IAAI,IAAI,CAACjoB,KAAK,CAAC2X,MAAM,CAACzvB,MAAM,GAAG8/B,QAAQ,CAACrQ,MAAM,CAACzvB,MAAM,EAAE;AACrD,QAAA,MAAMggC,SAAS,GAAG,IAAI,CAACloB,KAAK,CAAA;QAC5B,IAAI,CAACA,KAAK,GAAGgoB,QAAQ,CAAA;AAIrB,QAAA,IAAI,CAAChoB,KAAK,CAACkZ,YAAY,GAAGgP,SAAS,CAAChP,YAAY,CAAA;QAChD,OAAO;UACLjgB,IAAI;UACJkqB,KAAK,EAAE+E,SAAS,CAACvQ,MAAM,CAACqQ,QAAQ,CAACrQ,MAAM,CAACzvB,MAAM,CAAC;AAC/CigC,UAAAA,MAAM,EAAE,KAAK;AACbC,UAAAA,OAAO,EAAE,KAAK;AACdF,UAAAA,SAAAA;SACD,CAAA;AACH,OAAA;MAEA,OAAO;QACLjvB,IAAI;AACJkqB,QAAAA,KAAK,EAAE,IAAI;AACXgF,QAAAA,MAAM,EAAE,KAAK;AACbC,QAAAA,OAAO,EAAE,KAAK;AACdF,QAAAA,SAAS,EAAE,IAAA;OACZ,CAAA;KACF,CAAC,OAAO/E,KAAK,EAAE;AACd,MAAA,MAAM+E,SAAS,GAAG,IAAI,CAACloB,KAAK,CAAA;MAC5B,IAAI,CAACA,KAAK,GAAGgoB,QAAQ,CAAA;MACrB,IAAI7E,KAAK,YAAYxrB,WAAW,EAAE;QAEhC,OAAO;AAAEsB,UAAAA,IAAI,EAAE,IAAI;UAAEkqB,KAAK;AAAEgF,UAAAA,MAAM,EAAE,IAAI;AAAEC,UAAAA,OAAO,EAAE,KAAK;AAAEF,UAAAA,SAAAA;SAAW,CAAA;AACvE,OAAA;MACA,IAAI/E,KAAK,KAAK8E,WAAW,EAAE;QACzB,OAAO;UACLhvB,IAAI,EAAEgvB,WAAW,CAAChvB,IAAI;AACtBkqB,UAAAA,KAAK,EAAE,IAAI;AACXgF,UAAAA,MAAM,EAAE,KAAK;AACbC,UAAAA,OAAO,EAAE,IAAI;AACbF,UAAAA,SAAAA;SACD,CAAA;AACH,OAAA;AAEA,MAAA,MAAM/E,KAAK,CAAA;AACb,KAAA;AACF,GAAA;AAEAkF,EAAAA,qBAAqB,CACnB/pB,mBAAwD,EACxDgqB,QAAiB,EACjB;AACA,IAAA,IAAI,CAAChqB,mBAAmB,EAAE,OAAO,KAAK,CAAA;IACtC,MAAM;MACJiqB,kBAAkB;MAClBC,cAAc;MACdC,aAAa;AACbC,MAAAA,qBAAAA;AACF,KAAC,GAAGpqB,mBAAmB,CAAA;AAEvB,IAAA,MAAMqqB,SAAS,GACb,CAAC,CAACJ,kBAAkB,IACpB,CAAC,CAACC,cAAc,IAChB,CAAC,CAACE,qBAAqB,IACvB,CAAC,CAACD,aAAa,CAAA;IAEjB,IAAI,CAACH,QAAQ,EAAE;AACb,MAAA,OAAOK,SAAS,CAAA;AAClB,KAAA;IAEA,IAAIJ,kBAAkB,IAAI,IAAI,EAAE;AAC9B,MAAA,IAAI,CAACrpB,KAAK,CAACxG,MAAM,CAACxJ,2BAA2B,EAAE;AAC7CiQ,QAAAA,EAAE,EAAEopB,kBAAAA;AACN,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,IAAIC,cAAc,IAAI,IAAI,EAAE;AAC1B,MAAA,IAAI,CAACtpB,KAAK,CAACxG,MAAM,CAACpL,cAAc,EAAE;AAAE6R,QAAAA,EAAE,EAAEqpB,cAAAA;AAAe,OAAC,CAAC,CAAA;AAC3D,KAAA;IAEA,IAAIC,aAAa,IAAI,IAAI,EAAE;AACzB,MAAA,IAAI,CAACvpB,KAAK,CAACxG,MAAM,CAACtE,sBAAsB,EAAE;AAAE+K,QAAAA,EAAE,EAAEspB,aAAAA;AAAc,OAAC,CAAC,CAAA;AAClE,KAAA;IAEA,IAAIC,qBAAqB,IAAI,IAAI,EAAE;AACjC,MAAA,IAAI,CAACz4B,UAAU,CAACy4B,qBAAqB,CAAC,CAAA;AACxC,KAAA;AACF,GAAA;;AAWAE,EAAAA,qBAAqB,GAAY;AAC/B,IAAA,OAAO3c,0BAA0B,CAAC,IAAI,CAACjM,KAAK,CAAC3U,IAAI,CAAC,CAAA;AACpD,GAAA;;EAMA4R,aAAa,CAAChE,IAAU,EAAW;AACjC,IAAA,OAAOA,IAAI,CAAC5N,IAAI,KAAK,aAAa,CAAA;AACpC,GAAA;;EAOA0R,gBAAgB,CAAC9D,IAAU,EAAU;AACnC,IAAA,OAAOA,IAAI,CAAC+D,EAAE,CAAC/L,IAAI,CAAA;AACrB,GAAA;;EAOA6P,wBAAwB,CAAC7H,IAAU,EAAW;IAC5C,OACE,CAACA,IAAI,CAAC5N,IAAI,KAAK,kBAAkB,IAC/B4N,IAAI,CAAC5N,IAAI,KAAK,0BAA0B,KAC1C,IAAI,CAAC4R,aAAa,CAAChE,IAAI,CAAC4vB,QAAQ,CAAC,CAAA;AAErC,GAAA;EAEA9nB,eAAe,CAAC9H,IAAU,EAAW;IACnC,OACEA,IAAI,CAAC5N,IAAI,KAAK,0BAA0B,IACxC4N,IAAI,CAAC5N,IAAI,KAAK,wBAAwB,CAAA;AAE1C,GAAA;EAEAgQ,gBAAgB,CACdpC,IAAU,EACyC;AACnD,IAAA,OAAOA,IAAI,CAAC5N,IAAI,KAAK,gBAAgB,CAAA;AACvC,GAAA;EAEA2V,cAAc,CAAC/H,IAAU,EAAW;AAClC,IAAA,OAAOA,IAAI,CAAC5N,IAAI,KAAK,cAAc,CAAA;AACrC,GAAA;EAEAy9B,gBAAgB,CAEdva,QAAiB,GAAG,IAAI,CAACjV,OAAO,CAAC+f,UAAU,KAAK,QAAQ,EAC5C;AAEZ,IAAA,MAAM0P,SAAS,GAAG,IAAI,CAAC/oB,KAAK,CAAC2Y,MAAM,CAAA;AACnC,IAAA,IAAI,CAAC3Y,KAAK,CAAC2Y,MAAM,GAAG,EAAE,CAAA;AAEtB,IAAA,MAAMqQ,sBAAsB,GAAG,IAAI,CAACC,mBAAmB,CAAA;AACvD,IAAA,IAAI,CAACA,mBAAmB,GAAG,IAAIzyB,GAAG,EAAE,CAAA;;AAGpC,IAAA,MAAM0yB,WAAW,GAAG,IAAI,CAAC3a,QAAQ,CAAA;IACjC,IAAI,CAACA,QAAQ,GAAGA,QAAQ,CAAA;AAExB,IAAA,MAAM4a,QAAQ,GAAG,IAAI,CAAC1V,KAAK,CAAA;AAC3B,IAAA,MAAMnB,YAAY,GAAG,IAAI,CAAC8W,eAAe,EAAE,CAAA;IAC3C,IAAI,CAAC3V,KAAK,GAAG,IAAInB,YAAY,CAAC,IAAI,EAAE/D,QAAQ,CAAC,CAAA;AAE7C,IAAA,MAAM8a,YAAY,GAAG,IAAI,CAACC,SAAS,CAAA;AACnC,IAAA,IAAI,CAACA,SAAS,GAAG,IAAIjD,0BAA0B,EAAE,CAAA;AAEjD,IAAA,MAAMvC,aAAa,GAAG,IAAI,CAAChlB,UAAU,CAAA;AACrC,IAAA,IAAI,CAACA,UAAU,GAAG,IAAI8kB,iBAAiB,CAAC,IAAI,CAAC,CAAA;AAE7C,IAAA,MAAM2F,kBAAkB,GAAG,IAAI,CAACC,eAAe,CAAA;AAC/C,IAAA,IAAI,CAACA,eAAe,GAAG,IAAIlE,sBAAsB,CAAC,IAAI,CAAC,CAAA;AAEvD,IAAA,OAAO,MAAM;AAEX,MAAA,IAAI,CAACtlB,KAAK,CAAC2Y,MAAM,GAAGoQ,SAAS,CAAA;MAC7B,IAAI,CAACE,mBAAmB,GAAGD,sBAAsB,CAAA;;MAGjD,IAAI,CAACza,QAAQ,GAAG2a,WAAW,CAAA;MAC3B,IAAI,CAACzV,KAAK,GAAG0V,QAAQ,CAAA;MACrB,IAAI,CAACG,SAAS,GAAGD,YAAY,CAAA;MAC7B,IAAI,CAACvqB,UAAU,GAAGglB,aAAa,CAAA;MAC/B,IAAI,CAAC0F,eAAe,GAAGD,kBAAkB,CAAA;KAC1C,CAAA;AACH,GAAA;AAEAE,EAAAA,kBAAkB,GAAG;IACnB,IAAIC,UAAU,GAAG1D,KAAK,CAAA;IACtB,IAAI,IAAI,CAACzX,QAAQ,EAAE;AACjBmb,MAAAA,UAAU,IAAIxD,WAAW,CAAA;AAC3B,KAAA;AACA,IAAA,IAAI,CAACzS,KAAK,CAACF,KAAK,CAACnE,aAAa,CAAC,CAAA;AAC/B,IAAA,IAAI,CAACka,SAAS,CAAC/V,KAAK,CAACmW,UAAU,CAAC,CAAA;AAClC,GAAA;EAEAC,yBAAyB,CAACrrB,mBAAqC,EAAE;IAC/D,MAAM;AAAEmqB,MAAAA,aAAAA;AAAc,KAAC,GAAGnqB,mBAAmB,CAAA;IAC7C,IAAImqB,aAAa,KAAK,IAAI,EAAE;AAC1B,MAAA,IAAI,CAACzI,YAAY,CAAC,sBAAsB,EAAEyI,aAAa,CAAC,CAAA;AAC1D,KAAA;AACF,GAAA;AACF,CAAA;;AAeO,MAAMmB,gBAAgB,CAAC;AAAA,EAAA,WAAA,GAAA;IAAA,IAC5BrB,CAAAA,kBAAkB,GAAgC,IAAI,CAAA;IAAA,IACtDC,CAAAA,cAAc,GAAgC,IAAI,CAAA;IAAA,IAClDC,CAAAA,aAAa,GAAgC,IAAI,CAAA;IAAA,IACjDC,CAAAA,qBAAqB,GAAgC,IAAI,CAAA;AAAA,GAAA;AAC3D;;AC3XA,MAAMmB,IAAI,CAAqB;AAC7B5iC,EAAAA,WAAW,CAACsrB,MAAc,EAAEza,GAAW,EAAEL,GAAa,EAAE;IAAA,IAQxDpM,CAAAA,IAAI,GAAW,EAAE,CAAA;IAPf,IAAI,CAAC9D,KAAK,GAAGuQ,GAAG,CAAA;IAChB,IAAI,CAACtQ,GAAG,GAAG,CAAC,CAAA;AACZ,IAAA,IAAI,CAACiQ,GAAG,GAAG,IAAInQ,cAAc,CAACmQ,GAAG,CAAC,CAAA;AAClC,IAAA,IAAI8a,MAAM,IAANA,IAAAA,IAAAA,MAAM,CAAEjZ,OAAO,CAACwwB,MAAM,EAAE,IAAI,CAACC,KAAK,GAAG,CAACjyB,GAAG,EAAE,CAAC,CAAC,CAAA;AACjD,IAAA,IAAIya,MAAM,IAAA,IAAA,IAANA,MAAM,CAAE9qB,QAAQ,EAAE,IAAI,CAACgQ,GAAG,CAAChQ,QAAQ,GAAG8qB,MAAM,CAAC9qB,QAAQ,CAAA;AAC3D,GAAA;AAaF,CAAA;AACA,MAAMuiC,aAAa,GAAGH,IAAI,CAACI,SAAS,CAAA;AAED;EAEjCD,aAAa,CAACE,OAAO,GAAG,YAAkB;AACxC,IAAA,MAAMC,OAAO,GAAG,IAAIN,IAAI,CAAC1U,SAAS,EAAE,IAAI,CAAC5tB,KAAK,EAAE,IAAI,CAACkQ,GAAG,CAAClQ,KAAK,CAAC,CAAA;AAC/D,IAAA,MAAMS,IAAI,GAAGc,MAAM,CAACd,IAAI,CAAC,IAAI,CAAmB,CAAA;AAChD,IAAA,KAAK,IAAIU,CAAC,GAAG,CAAC,EAAER,MAAM,GAAGF,IAAI,CAACE,MAAM,EAAEQ,CAAC,GAAGR,MAAM,EAAEQ,CAAC,EAAE,EAAE;AACrD,MAAA,MAAMJ,GAAG,GAAGN,IAAI,CAACU,CAAC,CAAC,CAAA;MAEnB,IACEJ,GAAG,KAAK,iBAAiB,IACzBA,GAAG,KAAK,kBAAkB,IAC1BA,GAAG,KAAK,eAAe,EACvB;AAEA6hC,QAAAA,OAAO,CAAC7hC,GAAG,CAAC,GAAG,IAAI,CAACA,GAAG,CAAC,CAAA;AAC1B,OAAA;AACF,KAAA;AAEA,IAAA,OAAO6hC,OAAO,CAAA;GACf,CAAA;AACH,CAAA;AAEA,SAASC,gBAAgB,CAACnxB,IAAS,EAAO;EACxC,OAAOoxB,eAAe,CAACpxB,IAAI,CAAC,CAAA;AAC9B,CAAA;AAEO,SAASoxB,eAAe,CAACpxB,IAAS,EAAO;EAI9C,MAAM;IAAE5N,IAAI;IAAE9D,KAAK;IAAEC,GAAG;IAAEiQ,GAAG;IAAEsyB,KAAK;IAAEjvB,KAAK;AAAE7J,IAAAA,IAAAA;AAAK,GAAC,GAAGgI,IAAI,CAAA;AAC1D,EAAA,MAAMqxB,MAAM,GAAGxhC,MAAM,CAACyhC,MAAM,CAACP,aAAa,CAAC,CAAA;EAC3CM,MAAM,CAACj/B,IAAI,GAAGA,IAAI,CAAA;EAClBi/B,MAAM,CAAC/iC,KAAK,GAAGA,KAAK,CAAA;EACpB+iC,MAAM,CAAC9iC,GAAG,GAAGA,GAAG,CAAA;EAChB8iC,MAAM,CAAC7yB,GAAG,GAAGA,GAAG,CAAA;EAChB6yB,MAAM,CAACP,KAAK,GAAGA,KAAK,CAAA;EACpBO,MAAM,CAACxvB,KAAK,GAAGA,KAAK,CAAA;EACpBwvB,MAAM,CAACr5B,IAAI,GAAGA,IAAI,CAAA;EAClB,IAAI5F,IAAI,KAAK,aAAa,EAAE;AAC1Bi/B,IAAAA,MAAM,CAACE,YAAY,GAAGvxB,IAAI,CAACuxB,YAAY,CAAA;AACzC,GAAA;AACA,EAAA,OAAOF,MAAM,CAAA;AACf,CAAA;AAEO,SAASG,kBAAkB,CAACxxB,IAAS,EAAO;EACjD,MAAM;IAAE5N,IAAI;IAAE9D,KAAK;IAAEC,GAAG;IAAEiQ,GAAG;IAAEsyB,KAAK;AAAEjvB,IAAAA,KAAAA;AAAM,GAAC,GAAG7B,IAAI,CAAA;EACpD,IAAI5N,IAAI,KAAK,aAAa,EAAE;IAC1B,OAAO++B,gBAAgB,CAACnxB,IAAI,CAAC,CAAA;AAC/B,GAAA;AACA,EAAA,MAAMqxB,MAAM,GAAGxhC,MAAM,CAACyhC,MAAM,CAACP,aAAa,CAAC,CAAA;EAC3CM,MAAM,CAACj/B,IAAI,GAAGA,IAAI,CAAA;EAClBi/B,MAAM,CAAC/iC,KAAK,GAAGA,KAAK,CAAA;EACpB+iC,MAAM,CAAC9iC,GAAG,GAAGA,GAAG,CAAA;EAChB8iC,MAAM,CAAC7yB,GAAG,GAAGA,GAAG,CAAA;EAChB6yB,MAAM,CAACP,KAAK,GAAGA,KAAK,CAAA;AACpB,EAAA,IAAI9wB,IAAI,CAAC4B,GAAG,KAAKsa,SAAS,EAAE;AAE1BmV,IAAAA,MAAM,CAACzvB,GAAG,GAAG5B,IAAI,CAAC4B,GAAG,CAAA;AACvB,GAAC,MAAM;IACLyvB,MAAM,CAACxvB,KAAK,GAAGA,KAAK,CAAA;AACtB,GAAA;AACAwvB,EAAAA,MAAM,CAAC9hC,KAAK,GAAGyQ,IAAI,CAACzQ,KAAK,CAAA;AACzB,EAAA,OAAO8hC,MAAM,CAAA;AACf,CAAA;AAIO,MAAeI,SAAS,SAAS7D,UAAU,CAAC;AACjDrpB,EAAAA,SAAS,GAAkC;AAEzC,IAAA,OAAO,IAAIqsB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC7pB,KAAK,CAACzY,KAAK,EAAE,IAAI,CAACyY,KAAK,CAAC3B,QAAQ,CAAC,CAAA;AAC9D,GAAA;EAEAssB,WAAW,CAAqBlzB,GAAa,EAAa;IAExD,OAAO,IAAIoyB,IAAI,CAAC,IAAI,EAAEpyB,GAAG,CAACrQ,KAAK,EAAEqQ,GAAG,CAAC,CAAA;AACvC,GAAA;;EAGAoJ,eAAe,CAAqBxV,IAAsB,EAAa;IACrE,OAAO,IAAI,CAACs/B,WAAW,CAACt/B,IAAI,CAACoM,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACzC,GAAA;;AAIAmW,EAAAA,UAAU,CAAqBzE,IAAe,EAAE5N,IAAe,EAAK;AAClE,IAAA,OAAO,IAAI,CAAC4V,YAAY,CAAChI,IAAI,EAAE5N,IAAI,EAAE,IAAI,CAAC2U,KAAK,CAACoB,aAAa,CAAC,CAAA;AAChE,GAAA;;AAIAH,EAAAA,YAAY,CACVhI,IAAqB,EACrB5N,IAAe,EACf6V,MAAgB,EACb;IAQHjI,IAAI,CAAC5N,IAAI,GAAGA,IAAI,CAAA;AAEhB4N,IAAAA,IAAI,CAACzR,GAAG,GAAG0Z,MAAM,CAAC9Z,KAAK,CAAA;AACvB6R,IAAAA,IAAI,CAACxB,GAAG,CAACjQ,GAAG,GAAG0Z,MAAM,CAAA;AACrB,IAAA,IAAI,IAAI,CAAC5H,OAAO,CAACwwB,MAAM,EAAE7wB,IAAI,CAAC8wB,KAAK,CAAC,CAAC,CAAC,GAAG7oB,MAAM,CAAC9Z,KAAK,CAAA;IACrD,IAAI,IAAI,CAACkS,OAAO,CAACmmB,aAAa,EAAE,IAAI,CAACzJ,cAAc,CAAC/c,IAAI,CAAM,CAAA;AAC9D,IAAA,OAAOA,IAAI,CAAA;AACb,GAAA;AAEAoH,EAAAA,kBAAkB,CAACpH,IAAc,EAAEoF,QAAkB,EAAQ;AAC3DpF,IAAAA,IAAI,CAAC1R,KAAK,GAAG8W,QAAQ,CAACjX,KAAK,CAAA;AAC3B6R,IAAAA,IAAI,CAACxB,GAAG,CAAClQ,KAAK,GAAG8W,QAAQ,CAAA;AACzB,IAAA,IAAI,IAAI,CAAC/E,OAAO,CAACwwB,MAAM,EAAE7wB,IAAI,CAAC8wB,KAAK,CAAC,CAAC,CAAC,GAAG1rB,QAAQ,CAACjX,KAAK,CAAA;AACzD,GAAA;EAEA+Z,gBAAgB,CACdlI,IAAc,EACdiI,MAAgB,GAAG,IAAI,CAAClB,KAAK,CAACoB,aAAa,EACrC;AACNnI,IAAAA,IAAI,CAACzR,GAAG,GAAG0Z,MAAM,CAAC9Z,KAAK,CAAA;AACvB6R,IAAAA,IAAI,CAACxB,GAAG,CAACjQ,GAAG,GAAG0Z,MAAM,CAAA;AACrB,IAAA,IAAI,IAAI,CAAC5H,OAAO,CAACwwB,MAAM,EAAE7wB,IAAI,CAAC8wB,KAAK,CAAC,CAAC,CAAC,GAAG7oB,MAAM,CAAC9Z,KAAK,CAAA;AACvD,GAAA;;AAKAwjC,EAAAA,0BAA0B,CAAC3xB,IAAc,EAAE4xB,YAAsB,EAAQ;IACvE,IAAI,CAACxqB,kBAAkB,CAACpH,IAAI,EAAE4xB,YAAY,CAACpzB,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACvD,GAAA;AACF;;AClIA,MAAMujC,aAAa,GAAG,IAAIt0B,GAAG,CAAC,CAC5B,GAAG,EACH,KAAK,EACL,MAAM,EACN,SAAS,EACT,OAAO,EACP,SAAS,EACT,OAAO,EACP,WAAW,EACX,OAAO,EACP,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,MAAM,CACP,CAAC,CAAA;;AAIF,MAAMu0B,UAAU,GAAGhzB,cAAe,CAAA,IAAA,CAAK,CAAC;AACtCizB,EAAAA,yBAAyB,EACvB,gFAAgF;AAClFC,EAAAA,0BAA0B,EACxB,wKAAwK;AAG1KC,EAAAA,kBAAkB,EAAE,CAAC;AAAEC,IAAAA,YAAAA;GAAwC,KAC5D,CAAiCA,+BAAAA,EAAAA,YAAa,CAAE,CAAA,CAAA;AACnDC,EAAAA,mBAAmB,EACjB,yDAAyD;AAC3DC,EAAAA,4BAA4B,EAC1B,qEAAqE;AACvEC,EAAAA,6BAA6B,EAC3B,+CAA+C;AACjDC,EAAAA,+BAA+B,EAAE,CAAC;IAChCC,UAAU;AACVC,IAAAA,QAAAA;AAIF,GAAC,KACE,CAA4DD,0DAAAA,EAAAA,UAAW,mBAAkBA,UAAW,CAAA,sBAAA,EAAwBC,QAAS,CAAI,GAAA,CAAA;AAC5IC,EAAAA,uBAAuB,EAAE,CAAC;IACxBF,UAAU;AACVC,IAAAA,QAAAA;AAIF,GAAC,KACE,CAAA,oDAAA,EAAsDD,UAAW,CAAA,0CAAA,EAA4CC,QAAS,CAAI,GAAA,CAAA;AAC7HE,EAAAA,4BAA4B,EAAE,CAAC;AAAEF,IAAAA,QAAAA;GAAgC,KAC9D,CAASA,OAAAA,EAAAA,QAAS,CAAsK,qKAAA,CAAA;AAC3LG,EAAAA,uBAAuB,EAAE,CAAC;IACxBC,eAAe;AACfJ,IAAAA,QAAAA;AAIF,GAAC,KACE,CAAA,YAAA,EAAcI,eAAgB,CAAA,yFAAA,EAA2FJ,QAAS,CAAI,GAAA,CAAA;AACzIK,EAAAA,sCAAsC,EAAE,CAAC;AACvCL,IAAAA,QAAAA;GAGD,KACE,CAA2GA,yGAAAA,EAAAA,QAAS,CAAI,GAAA,CAAA;AAa3HM,EAAAA,uCAAuC,EAAE,CAAC;IACxCN,QAAQ;IACRD,UAAU;AACVQ,IAAAA,YAAAA;GAKD,KACE,UAASP,QAAS,CAAA,cAAA,EAAgBO,YAAa,CAA8BR,4BAAAA,EAAAA,UAAW,CAAmBQ,iBAAAA,EAAAA,YAAa,CAAU,SAAA,CAAA;AACrIC,EAAAA,sCAAsC,EAAE,CAAC;IACvCR,QAAQ;AACRD,IAAAA,UAAAA;AAKF,GAAC,KACE,CAAA,iDAAA,EAAmDA,UAAW,CAAA,cAAA,EAAgBC,QAAS,CAAI,GAAA,CAAA;AAC9FS,EAAAA,uCAAuC,EAAE,CAAC;IACxCT,QAAQ;AACRD,IAAAA,UAAAA;AAKF,GAAC,KACE,CAAA,kCAAA,EAAoCA,UAAW,CAAA,yEAAA,EAA2EC,QAAS,CAAI,GAAA,CAAA;AAC1IU,EAAAA,qBAAqB,EAAE,CAAC;IACtBV,QAAQ;IACRD,UAAU;AACVY,IAAAA,UAAAA;AAKF,GAAC,KACE,CAAoFZ,kFAAAA,EAAAA,UAAW,wBAAuBY,UAAW,CAAA,cAAA,EAAgBX,QAAS,CAAI,GAAA,CAAA;AACjKY,EAAAA,8BAA8B,EAAE,CAAC;IAC/BZ,QAAQ;AACRD,IAAAA,UAAAA;AAIF,GAAC,KACE,CAAA,mDAAA,EAAqDA,UAAW,CAAA,iBAAA,EAAmBC,QAAS,CAAI,GAAA,CAAA;AACnGa,EAAAA,yCAAyC,EAAE,CAAC;AAC1Cb,IAAAA,QAAAA;GAGD,KACE,CAA0GA,wGAAAA,EAAAA,QAAS,CAAI,GAAA,CAAA;AAC1Hc,EAAAA,yBAAyB,EAAE,0CAA0C;AACrEC,EAAAA,6BAA6B,EAC3B,wEAAwE;AAC1EC,EAAAA,mCAAmC,EACjC,wKAAwK;AAC1KC,EAAAA,kBAAkB,EAChB,6EAA6E;AAC/EC,EAAAA,sBAAsB,EACpB,0EAA0E;AAC5EC,EAAAA,eAAe,EAAE,+CAA+C;AAChEC,EAAAA,mCAAmC,EACjC,yFAAyF;AAC3FC,EAAAA,uBAAuB,EACrB,yGAAyG;AAC3GC,EAAAA,mBAAmB,EACjB,kEAAkE;AACpEC,EAAAA,iBAAiB,EAAE,yDAAyD;EAC5EC,iBAAiB,EAAA,MAAA,CAAA,MAAA,CAAA;AACfxjC,IAAAA,OAAO,EACL,gFAAA;GAGE,EAAA;AAAE6O,IAAAA,UAAU,EAAE,wBAAA;AAAyB,GAAC,CAE7C;AACD40B,EAAAA,yBAAyB,EAAE,0CAA0C;AACrEC,EAAAA,cAAc,EAAE,yCAAyC;AACzDC,EAAAA,2BAA2B,EACzB,yDAAyD;AAC3DC,EAAAA,4BAA4B,EAC1B,mGAAmG;AACrGC,EAAAA,yBAAyB,EAAE,0CAA0C;AACrEC,EAAAA,oBAAoB,EAClB,4DAA4D;AAC9DC,EAAAA,kBAAkB,EAAE,oDAAoD;AACxEC,EAAAA,qBAAqB,EACnB,mHAAmH;AACrHC,EAAAA,iBAAiB,EACf,sEAAsE;AACxEC,EAAAA,iCAAiC,EAC/B,sEAAsE;AACxEC,EAAAA,sBAAsB,EAAE,CAAC;AAAEzC,IAAAA,YAAAA;GAAwC,KAChE,CAA2BA,yBAAAA,EAAAA,YAAa,CAAE,CAAA,CAAA;AAC7C0C,EAAAA,4BAA4B,EAC1B,wDAAwD;AAC1DC,EAAAA,kCAAkC,EAChC,uDAAuD;AACzDC,EAAAA,oBAAoB,EAClB,kEAAkE;AACpEC,EAAAA,4BAA4B,EAC1B,kDAAkD;AACpDC,EAAAA,iCAAiC,EAC/B,mEAAmE;AACrEC,EAAAA,+CAA+C,EAC7C,mHAAmH;AACrHC,EAAAA,4BAA4B,EAAE,CAAC;IAC7BC,qBAAqB;AACrBhC,IAAAA,UAAAA;AAIF,GAAC,KACE,CAAA,iBAAA,EAAmBgC,qBAAsB,CAAA,2BAAA,EAA6BhC,UAAW,CAAY,WAAA,CAAA;AAChGiC,EAAAA,mCAAmC,EACjC,mEAAmE;AACrEC,EAAAA,uBAAuB,EAAE,4BAAA;AAC3B,CAAC,CAAC,CAAA;;AAGF,SAASC,cAAc,CAACC,WAAmB,EAAW;AACpD,EAAA,OACEA,WAAW,CAACnjC,IAAI,KAAK,6BAA6B,IACjDmjC,WAAW,CAACnjC,IAAI,KAAK,0BAA0B,KAC7C,CAACmjC,WAAW,CAACpuB,WAAW,IACtBouB,WAAW,CAACpuB,WAAW,CAAC/U,IAAI,KAAK,WAAW,IAC3CmjC,WAAW,CAACpuB,WAAW,CAAC/U,IAAI,KAAK,sBAAuB,CAAE,CAAA;AAEpE,CAAA;AAEA,SAASojC,iBAAiB,CAACx1B,IAAY,EAAW;EAChD,OAAOA,IAAI,CAACy1B,UAAU,KAAK,MAAM,IAAIz1B,IAAI,CAACy1B,UAAU,KAAK,QAAQ,CAAA;AACnE,CAAA;AAEA,SAASC,oBAAoB,CAACtjC,IAAe,EAAW;AACtD,EAAA,OAAO2gB,0BAA0B,CAAC3gB,IAAI,CAAC,IAAIA,IAAI,KAAa,EAAA,CAAA;AAC9D,CAAA;AAEA,MAAMujC,iBAAiB,GAAG;AACxBC,EAAAA,KAAK,EAAE,oBAAoB;AAC3BC,EAAAA,GAAG,EAAE,oBAAoB;AACzBzjC,EAAAA,IAAI,EAAE,aAAa;AACnB0jC,EAAAA,SAAS,EAAE,kBAAA;AACb,CAAC,CAAA;;AAGD,SAASC,SAAS,CAChBC,IAAS,EACTphB,IAA6D,EACjD;EACZ,MAAMqhB,KAAU,GAAG,EAAE,CAAA;EACrB,MAAMC,KAAU,GAAG,EAAE,CAAA;AACrB,EAAA,KAAK,IAAIzmC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGumC,IAAI,CAAC/mC,MAAM,EAAEQ,CAAC,EAAE,EAAE;IACpC,CAACmlB,IAAI,CAACohB,IAAI,CAACvmC,CAAC,CAAC,EAAEA,CAAC,EAAEumC,IAAI,CAAC,GAAGC,KAAK,GAAGC,KAAK,EAAExyB,IAAI,CAACsyB,IAAI,CAACvmC,CAAC,CAAC,CAAC,CAAA;AACxD,GAAA;AACA,EAAA,OAAO,CAACwmC,KAAK,EAAEC,KAAK,CAAC,CAAA;AACvB,CAAA;AAEA,MAAMC,iBAAiB,GAAG,wBAAwB,CAAA;;AAoClD,WAAA,CAAgBl2B,UAAyB,IACvC,MAAMm2B,eAAe,SAASn2B,UAAU,CAAmB;AAAA,EAAA,WAAA,CAAA,GAAA,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAA,IAAA,CAAA,CAAA;IAAA,IAIzDo2B,CAAAA,UAAU,GAAoCna,SAAS,CAAA;AAAA,GAAA;AAEvDiU,EAAAA,eAAe,GAEb;AACA,IAAA,OAAO9U,gBAAgB,CAAA;AACzB,GAAA;AAEAib,EAAAA,gBAAgB,GAAY;AAC1B,IAAA,OAAO,IAAI,CAAC1yB,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAACyyB,UAAU,KAAK,MAAM,CAAA;AAC1E,GAAA;AAEAE,EAAAA,gBAAgB,GAAY;IAC1B,OAAO,CAAC,CAAC,IAAI,CAAC3yB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAChD,GAAA;AAEAqiB,EAAAA,WAAW,CAAC7zB,IAAe,EAAEquB,GAAQ,EAAQ;IAC3C,IACEruB,IAAI,QAAc,IAClBA,IAAI,OAAY,IAChBA,IAAI,OAA4B,EAChC;AACA,MAAA,IAAI,IAAI,CAACikC,UAAU,KAAKna,SAAS,EAAE;QACjC,IAAI,CAACma,UAAU,GAAG,IAAI,CAAA;AACxB,OAAA;AACF,KAAA;AACA,IAAA,OAAO,KAAK,CAACpQ,WAAW,CAAC7zB,IAAI,EAAEquB,GAAG,CAAC,CAAA;AACrC,GAAA;EAEA5D,UAAU,CAACC,OAAkB,EAAQ;AACnC,IAAA,IAAI,IAAI,CAACuZ,UAAU,KAAKna,SAAS,EAAE;MAEjC,MAAMsa,OAAO,GAAGL,iBAAiB,CAACM,IAAI,CAAC3Z,OAAO,CAACvtB,KAAK,CAAC,CAAA;MACrD,IAAI,CAACinC,OAAO,EAAE,CAEb,MAAM,IAAIA,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;QAChC,IAAI,CAACH,UAAU,GAAG,MAAM,CAAA;OACzB,MAAM,IAAIG,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;QAClC,IAAI,CAACH,UAAU,GAAG,QAAQ,CAAA;AAC5B,OAAC,MAAM;AACL,QAAA,MAAM,IAAIK,KAAK,CAAC,wBAAwB,CAAC,CAAA;AAC3C,OAAA;AACF,KAAA;AACA,IAAA,OAAO,KAAK,CAAC7Z,UAAU,CAACC,OAAO,CAAC,CAAA;AAClC,GAAA;EAEA6Z,wBAAwB,CAACC,GAAe,EAAc;AACpD,IAAA,MAAMC,SAAS,GAAG,IAAI,CAAC9vB,KAAK,CAACgY,MAAM,CAAA;AACnC,IAAA,IAAI,CAAChY,KAAK,CAACgY,MAAM,GAAG,IAAI,CAAA;AACxB,IAAA,IAAI,CAAC6P,MAAM,CAACgI,GAAG,MAAY,CAAC,CAAA;AAE5B,IAAA,MAAMxkC,IAAI,GAAG,IAAI,CAAC0kC,aAAa,EAAE,CAAA;AACjC,IAAA,IAAI,CAAC/vB,KAAK,CAACgY,MAAM,GAAG8X,SAAS,CAAA;AAC7B,IAAA,OAAOzkC,IAAI,CAAA;AACb,GAAA;AAEA2kC,EAAAA,kBAAkB,GAAoB;AACpC,IAAA,MAAM/2B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;AAC7B,IAAA,MAAMyyB,SAAS,GAAG,IAAI,CAACjwB,KAAK,CAAC3B,QAAQ,CAAA;IACrC,IAAI,CAAC0Q,IAAI,EAAE,CAAA;IACX,IAAI,CAACuY,gBAAgB,CAAY,GAAA,CAAA,CAAA;IAEjC,IAAI,IAAI,CAACtnB,KAAK,CAAC4Y,YAAY,GAAGqX,SAAS,CAAC7oC,KAAK,GAAG,CAAC,EAAE;AACjD,MAAA,IAAI,CAAC8X,KAAK,CAAC6rB,UAAU,CAAC+C,kCAAkC,EAAE;AACxD3uB,QAAAA,EAAE,EAAE8wB,SAAAA;AACN,OAAC,CAAC,CAAA;AACJ,KAAA;AACA,IAAA,IAAI,IAAI,CAACjS,GAAG,CAAA,EAAA,CAAW,EAAE;AACvB/kB,MAAAA,IAAI,CAACzQ,KAAK,GAAG,KAAK,CAAC0nC,eAAe,EAAE,CAAA;MACpC,IAAI,CAACrI,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,MAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,KAAC,MAAM;AACL,MAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,KAAA;AACF,GAAA;AAEAk3B,EAAAA,oCAAoC,GAGlC;AACA,IAAA,MAAML,SAAS,GAAG,IAAI,CAAC9vB,KAAK,CAACgY,MAAM,CAAA;AACnC,IAAA,IAAI,CAAChY,KAAK,CAACgY,MAAM,GAAG,IAAI,CAAA;IACxB,IAAI,CAAC6P,MAAM,CAAU,EAAA,CAAA,CAAA;IACrB,IAAIx8B,IAAI,GAAG,IAAI,CAAA;IACf,IAAI+kC,SAAS,GAAG,IAAI,CAAA;AACpB,IAAA,IAAI,IAAI,CAAC3U,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,MAAA,IAAI,CAACzb,KAAK,CAACgY,MAAM,GAAG8X,SAAS,CAAA;AAC7BM,MAAAA,SAAS,GAAG,IAAI,CAACJ,kBAAkB,EAAE,CAAA;AACvC,KAAC,MAAM;AACL3kC,MAAAA,IAAI,GAAG,IAAI,CAAC0kC,aAAa,EAAE,CAAA;AAC3B,MAAA,IAAI,CAAC/vB,KAAK,CAACgY,MAAM,GAAG8X,SAAS,CAAA;AAC7B,MAAA,IAAI,IAAI,CAACrU,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB2U,QAAAA,SAAS,GAAG,IAAI,CAACJ,kBAAkB,EAAE,CAAA;AACvC,OAAA;AACF,KAAA;AACA,IAAA,OAAO,CAAC3kC,IAAI,EAAE+kC,SAAS,CAAC,CAAA;AAC1B,GAAA;EAEAC,qBAAqB,CACnBp3B,IAAgC,EACZ;IACpB,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,CAACuhB,qBAAqB,CAACr3B,IAAI,EAAc,IAAI,CAAC,CAAA;AAClD,IAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,GAAA;EAEAs3B,wBAAwB,CACtBt3B,IAAmC,EACZ;IACvB,IAAI,CAAC8V,IAAI,EAAE,CAAA;IAEX,MAAM/R,EAAE,GAAI/D,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAG,CAAA;AAE7C,IAAA,MAAMC,QAAQ,GAAG,IAAI,CAACjzB,SAAS,EAAE,CAAA;AACjC,IAAA,MAAMkzB,aAAa,GAAG,IAAI,CAAClzB,SAAS,EAAoB,CAAA;AAExD,IAAA,IAAI,IAAI,CAACie,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBgV,MAAAA,QAAQ,CAAC/zB,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;AACpE,KAAC,MAAM;MACLF,QAAQ,CAAC/zB,cAAc,GAAG,IAAI,CAAA;AAChC,KAAA;IAEA,IAAI,CAACmrB,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,IAAA,MAAM+I,GAAG,GAAG,IAAI,CAACC,2BAA2B,EAAE,CAAA;AAC9CJ,IAAAA,QAAQ,CAACj1B,MAAM,GAAGo1B,GAAG,CAACp1B,MAAM,CAAA;AAC5Bi1B,IAAAA,QAAQ,CAACj4B,IAAI,GAAGo4B,GAAG,CAACp4B,IAAI,CAAA;AACxBi4B,IAAAA,QAAQ,CAACK,IAAI,GAAGF,GAAG,CAAC5oB,KAAK,CAAA;IACzB,IAAI,CAAC6f,MAAM,CAAW,EAAA,CAAA,CAAA;AAEtB,IAAA,CAAC4I,QAAQ,CAACM,UAAU,EAAE93B,IAAI,CAACm3B,SAAS,CAAC,GACnC,IAAI,CAACD,oCAAoC,EAAE,CAAA;IAE7CO,aAAa,CAACM,cAAc,GAAG,IAAI,CAACtzB,UAAU,CAC5C+yB,QAAQ,EACR,wBAAwB,CACzB,CAAA;IAEDzzB,EAAE,CAACg0B,cAAc,GAAG,IAAI,CAACtzB,UAAU,CAACgzB,aAAa,EAAE,gBAAgB,CAAC,CAAA;AAEpE,IAAA,IAAI,CAACvvB,gBAAgB,CAACnE,EAAE,CAAC,CAAA;IACzB,IAAI,CAAC2qB,SAAS,EAAE,CAAA;IAEhB,IAAI,CAAClU,KAAK,CAACC,WAAW,CACpBza,IAAI,CAAC+D,EAAE,CAAC/L,IAAI,EACZugB,oBAAoB,EACpBvY,IAAI,CAAC+D,EAAE,CAACvF,GAAG,CAAClQ,KAAK,CAClB,CAAA;AAED,IAAA,OAAO,IAAI,CAACmW,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;AAEAg4B,EAAAA,gBAAgB,CACdh4B,IAA2B,EAC3Bi4B,YAAsB,EACP;AACf,IAAA,IAAI,IAAI,CAACzV,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,MAAA,OAAO,IAAI,CAAC4U,qBAAqB,CAACp3B,IAAI,CAAC,CAAA;AACzC,KAAC,MAAM,IAAI,IAAI,CAACwiB,KAAK,IAAc,EAAE;AACnC,MAAA,OAAO,IAAI,CAAC8U,wBAAwB,CAACt3B,IAAI,CAAC,CAAA;AAC5C,KAAC,MAAM,IAAI,IAAI,CAACwiB,KAAK,IAAS,EAAE;AAC9B,MAAA,OAAO,IAAI,CAAC0V,wBAAwB,CAACl4B,IAAI,CAAC,CAAA;AAC5C,KAAC,MAAM,IAAI,IAAI,CAACouB,aAAa,KAAY,EAAE;AACzC,MAAA,IAAI,IAAI,CAAC5L,KAAK,CAAA,EAAA,CAAQ,EAAE;AACtB,QAAA,OAAO,IAAI,CAAC2V,6BAA6B,CAACn4B,IAAI,CAAC,CAAA;AACjD,OAAC,MAAM;AACL,QAAA,IAAIi4B,YAAY,EAAE;AAChB,UAAA,IAAI,CAAChyB,KAAK,CAAC6rB,UAAU,CAACgC,mBAAmB,EAAE;AACzC5tB,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACC,eAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,OAAO,IAAI,CAACoxB,sBAAsB,CAACp4B,IAAI,CAAC,CAAA;AAC1C,OAAA;AACF,KAAC,MAAM,IAAI,IAAI,CAAC8tB,YAAY,KAAU,EAAE;AACtC,MAAA,OAAO,IAAI,CAACuK,yBAAyB,CAACr4B,IAAI,CAAC,CAAA;AAC7C,KAAC,MAAM,IAAI,IAAI,CAAC8tB,YAAY,KAAY,EAAE;AACxC,MAAA,OAAO,IAAI,CAACwK,0BAA0B,CAACt4B,IAAI,CAAC,CAAA;AAC9C,KAAC,MAAM,IAAI,IAAI,CAAC8tB,YAAY,KAAe,EAAE;AAC3C,MAAA,OAAO,IAAI,CAACyK,yBAAyB,CAACv4B,IAAI,CAAC,CAAA;AAC7C,KAAC,MAAM,IAAI,IAAI,CAACwiB,KAAK,IAAY,EAAE;AACjC,MAAA,OAAO,IAAI,CAACgW,iCAAiC,CAACx4B,IAAI,EAAEi4B,YAAY,CAAC,CAAA;AACnE,KAAC,MAAM;MACL,MAAM,IAAI,CAACjhC,UAAU,EAAE,CAAA;AACzB,KAAA;AACF,GAAA;EAEAkhC,wBAAwB,CACtBl4B,IAAmC,EACZ;IACvB,IAAI,CAAC8V,IAAI,EAAE,CAAA;IACX9V,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAAC00B,kCAAkC,CACpB,IAAI,CAChC,CAAA;IACD,IAAI,CAACje,KAAK,CAACC,WAAW,CAACza,IAAI,CAAC+D,EAAE,CAAC/L,IAAI,EAAE4f,QAAQ,EAAE5X,IAAI,CAAC+D,EAAE,CAACvF,GAAG,CAAClQ,KAAK,CAAC,CAAA;IACjE,IAAI,CAACogC,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;EAEAo4B,sBAAsB,CACpBp4B,IAAiC,EACZ;AACrB,IAAA,IAAI,CAACwa,KAAK,CAACF,KAAK,CAACpE,WAAW,CAAC,CAAA;AAE7B,IAAA,IAAI,IAAI,CAACsM,KAAK,CAAA,GAAA,CAAW,EAAE;AACzBxiB,MAAAA,IAAI,CAAC+D,EAAE,GAAG,KAAK,CAAC20B,aAAa,EAAE,CAAA;AACjC,KAAC,MAAM;AACL14B,MAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;AAClC,KAAA;IAEA,MAAMoB,QAAQ,GAAI34B,IAAI,CAACiD,IAAI,GAAG,IAAI,CAACsB,SAAS,EAAG,CAAA;AAE/C,IAAA,MAAMtB,IAAI,GAAI01B,QAAQ,CAAC11B,IAAI,GAAG,EAAG,CAAA;IACjC,IAAI,CAAC2rB,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,IAAA,OAAO,CAAC,IAAI,CAACpM,KAAK,GAAW,EAAE;AAC7B,MAAA,IAAImW,QAAQ,GAAG,IAAI,CAACp0B,SAAS,EAAuB,CAAA;AAEpD,MAAA,IAAI,IAAI,CAACie,KAAK,CAAA,EAAA,CAAY,EAAE;QAC1B,IAAI,CAAC1M,IAAI,EAAE,CAAA;QACX,IAAI,CAAC,IAAI,CAACgY,YAAY,CAAA,GAAA,CAAU,IAAI,CAAC,IAAI,CAACtL,KAAK,CAAA,EAAA,CAAY,EAAE;AAC3D,UAAA,IAAI,CAACvc,KAAK,CAAC6rB,UAAU,CAAC8B,mCAAmC,EAAE;AACzD1tB,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACC,eAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,KAAK,CAAC4xB,WAAW,CAACD,QAAQ,CAAC,CAAA;AAC7B,OAAC,MAAM;AACL,QAAA,IAAI,CAACtK,gBAAgB,CAAA,GAAA,EAEnByD,UAAU,CAACsD,mCAAmC,CAC/C,CAAA;QAEDuD,QAAQ,GAAG,IAAI,CAACX,gBAAgB,CAACW,QAAQ,EAAE,IAAI,CAAC,CAAA;AAClD,OAAA;AAEA11B,MAAAA,IAAI,CAACS,IAAI,CAACi1B,QAAQ,CAAC,CAAA;AACrB,KAAA;AAEA,IAAA,IAAI,CAACne,KAAK,CAACD,IAAI,EAAE,CAAA;IAEjB,IAAI,CAACqU,MAAM,CAAW,CAAA,CAAA,CAAA;AAEtB,IAAA,IAAI,CAACnqB,UAAU,CAACk0B,QAAQ,EAAE,gBAAgB,CAAC,CAAA;IAE3C,IAAInmC,IAA8B,GAAG,IAAI,CAAA;IACzC,IAAIqmC,eAAe,GAAG,KAAK,CAAA;AAC3B51B,IAAAA,IAAI,CAAC4iB,OAAO,CAAC0P,WAAW,IAAI;AAC1B,MAAA,IAAID,cAAc,CAACC,WAAW,CAAC,EAAE;QAC/B,IAAI/iC,IAAI,KAAK,UAAU,EAAE;AACvB,UAAA,IAAI,CAACyT,KAAK,CAAC6rB,UAAU,CAACE,0BAA0B,EAAE;AAChD9rB,YAAAA,EAAE,EAAEqvB,WAAAA;AACN,WAAC,CAAC,CAAA;AACJ,SAAA;AACA/iC,QAAAA,IAAI,GAAG,IAAI,CAAA;AACb,OAAC,MAAM,IAAI+iC,WAAW,CAACnjC,IAAI,KAAK,sBAAsB,EAAE;AACtD,QAAA,IAAIymC,eAAe,EAAE;AACnB,UAAA,IAAI,CAAC5yB,KAAK,CAAC6rB,UAAU,CAACO,6BAA6B,EAAE;AACnDnsB,YAAAA,EAAE,EAAEqvB,WAAAA;AACN,WAAC,CAAC,CAAA;AACJ,SAAA;QACA,IAAI/iC,IAAI,KAAK,IAAI,EAAE;AACjB,UAAA,IAAI,CAACyT,KAAK,CAAC6rB,UAAU,CAACE,0BAA0B,EAAE;AAChD9rB,YAAAA,EAAE,EAAEqvB,WAAAA;AACN,WAAC,CAAC,CAAA;AACJ,SAAA;AACA/iC,QAAAA,IAAI,GAAG,UAAU,CAAA;AACjBqmC,QAAAA,eAAe,GAAG,IAAI,CAAA;AACxB,OAAA;AACF,KAAC,CAAC,CAAA;AAEF74B,IAAAA,IAAI,CAACxN,IAAI,GAAGA,IAAI,IAAI,UAAU,CAAA;AAC9B,IAAA,OAAO,IAAI,CAACiS,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;AAEAw4B,EAAAA,iCAAiC,CAC/Bx4B,IAA4C,EAC5Ci4B,YAA6B,EACG;IAChC,IAAI,CAACrJ,MAAM,CAAY,EAAA,CAAA,CAAA;AAEvB,IAAA,IAAI,IAAI,CAAC7J,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB,IAAI,IAAI,CAACvC,KAAK,CAAA,EAAA,CAAc,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAW,EAAE;QAGrDxiB,IAAI,CAACmH,WAAW,GAAG,IAAI,CAAC6wB,gBAAgB,CAAC,IAAI,CAACzzB,SAAS,EAAE,CAAC,CAAA;AAC5D,OAAC,MAAM;AAELvE,QAAAA,IAAI,CAACmH,WAAW,GAAG,IAAI,CAAC2vB,aAAa,EAAE,CAAA;QACvC,IAAI,CAACpI,SAAS,EAAE,CAAA;AAClB,OAAA;MACA1uB,IAAI,CAAC84B,OAAO,GAAG,IAAI,CAAA;AAEnB,MAAA,OAAO,IAAI,CAACr0B,UAAU,CAACzE,IAAI,EAAE,0BAA0B,CAAC,CAAA;AAC1D,KAAC,MAAM;MACL,IACE,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAW,IACrB,IAAI,CAACuW,KAAK,EAAE,IACX,CAAC,IAAI,CAACjL,YAAY,CAAU,GAAA,CAAA,IAAI,IAAI,CAACA,YAAY,CAAe,GAAA,CAAA,KAC/D,CAACmK,YAAa,EAChB;AACA,QAAA,MAAMhvB,KAAK,GAAG,IAAI,CAAClC,KAAK,CAACxX,KAIV,CAAA;AACf,QAAA,MAAM,IAAI,CAAC0W,KAAK,CAAC6rB,UAAU,CAACoD,4BAA4B,EAAE;AACxDhvB,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAQ;AACvB+vB,UAAAA,qBAAqB,EAAElsB,KAAK;UAC5BkqB,UAAU,EAAEwC,iBAAiB,CAAC1sB,KAAK,CAAA;AACrC,SAAC,CAAC,CAAA;AACJ,OAAA;MAEA,IACE,IAAI,CAACuZ,KAAK,CAAS,EAAA,CAAA;MACnB,IAAI,CAACA,KAAK,CAAc,EAAA,CAAA;MACxB,IAAI,CAACA,KAAK,CAAW,EAAA,CAAA;MACrB,IAAI,CAACsL,YAAY,CAAA,GAAA,CAAY,EAC7B;QACA9tB,IAAI,CAACmH,WAAW,GAAG,IAAI,CAAC6wB,gBAAgB,CAAC,IAAI,CAACzzB,SAAS,EAAE,CAAC,CAAA;QAC1DvE,IAAI,CAAC84B,OAAO,GAAG,KAAK,CAAA;AAEpB,QAAA,OAAO,IAAI,CAACr0B,UAAU,CAACzE,IAAI,EAAE,0BAA0B,CAAC,CAAA;AAC1D,OAAC,MAAM,IACL,IAAI,CAACwiB,KAAK,CAAS,EAAA,CAAA;MACnB,IAAI,CAACA,KAAK,CAAW,CAAA,CAAA;MACrB,IAAI,CAACsL,YAAY,CAAe,GAAA,CAAA;MAChC,IAAI,CAACA,YAAY,CAAU,GAAA,CAAA;MAC3B,IAAI,CAACA,YAAY,CAAA,GAAA,CAAY,EAC7B;QACA9tB,IAAI,GAAG,IAAI,CAAC4G,WAAW,CACrB5G,IAAI,EACa,IAAI,CACtB,CAAA;AACD,QAAA,IAAIA,IAAI,CAAC5N,IAAI,KAAK,wBAAwB,EAAE;UAC1C4N,IAAI,CAAC5N,IAAI,GAAG,mBAAmB,CAAA;UAC/B4N,IAAI,CAAC84B,OAAO,GAAG,KAAK,CAAA;UACpB,OAAO94B,IAAI,CAACg5B,UAAU,CAAA;AACxB,SAAA;AAEAh5B,QAAAA,IAAI,CAAC5N,IAAI,GAAG,SAAS,GAAG4N,IAAI,CAAC5N,IAAI,CAAA;AAEjC,QAAA,OAAO4N,IAAI,CAAA;AACb,OAAA;AACF,KAAA;IAEA,MAAM,IAAI,CAAChJ,UAAU,EAAE,CAAA;AACzB,GAAA;EAEAmhC,6BAA6B,CAC3Bn4B,IAAwC,EACZ;IAC5B,IAAI,CAAC8V,IAAI,EAAE,CAAA;IACX,IAAI,CAACuY,gBAAgB,CAAa,GAAA,CAAA,CAAA;AAClCruB,IAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAACkB,uBAAuB,EAAE,CAAA;IACpD,IAAI,CAACvK,SAAS,EAAE,CAAA;AAEhB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AACtD,GAAA;EAEAq4B,yBAAyB,CACvBr4B,IAAoC,EACZ;IACxB,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX,IAAA,MAAMojB,QAAQ,GAAG,IAAI,CAACC,kBAAkB,CAACn5B,IAAI,CAAC,CAAA;IAE9Ck5B,QAAQ,CAAC9mC,IAAI,GAAG,kBAAkB,CAAA;AAClC,IAAA,OAAO8mC,QAAQ,CAAA;AACjB,GAAA;EAEAZ,0BAA0B,CACxBt4B,IAAqC,EACZ;IACzB,IAAI,CAAC8V,IAAI,EAAE,CAAA;IACX,MAAMojB,QAAQ,GAAG,IAAI,CAACE,mBAAmB,CAACp5B,IAAI,EAAE,IAAI,CAAC,CAAA;IAErDk5B,QAAQ,CAAC9mC,IAAI,GAAG,mBAAmB,CAAA;AACnC,IAAA,OAAO8mC,QAAQ,CAAA;AACjB,GAAA;EAEAX,yBAAyB,CACvBv4B,IAAoC,EACZ;IACxB,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,CAACuhB,qBAAqB,CAACr3B,IAAI,CAAC,CAAA;AAChC,IAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,kBAAkB,CAAC,CAAA;AAClD,GAAA;;AAIAq3B,EAAAA,qBAAqB,CACnBr3B,IAA2B,EAC3Bq5B,OAAgB,GAAG,KAAK,EAClB;IACNr5B,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACu1B,6BAA6B,CAC5B,CAACD,OAAO,EACJ,IAAI,CACvB,CAAA;IAED,IAAI,CAAC7e,KAAK,CAACC,WAAW,CACpBza,IAAI,CAAC+D,EAAE,CAAC/L,IAAI,EACZqhC,OAAO,GAAGxhB,aAAa,GAAGF,YAAY,EACtC3X,IAAI,CAAC+D,EAAE,CAACvF,GAAG,CAAClQ,KAAK,CAClB,CAAA;AAED,IAAA,IAAI,IAAI,CAACk0B,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;AAChE,KAAC,MAAM;MACL13B,IAAI,CAACyD,cAAc,GAAG,IAAI,CAAA;AAC5B,KAAA;IAEAzD,IAAI,CAACu5B,OAAO,GAAG,EAAE,CAAA;IACjBv5B,IAAI,CAACw5B,UAAU,GAAG,EAAE,CAAA;IACpBx5B,IAAI,CAACy5B,MAAM,GAAG,EAAE,CAAA;AAEhB,IAAA,IAAI,IAAI,CAAC1U,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB,GAAG;QACD/kB,IAAI,CAACu5B,OAAO,CAAC71B,IAAI,CAAC,IAAI,CAACg2B,yBAAyB,EAAE,CAAC,CAAA;AACrD,OAAC,QAAQ,CAACL,OAAO,IAAI,IAAI,CAACtU,GAAG,CAAU,EAAA,CAAA,EAAA;AACzC,KAAA;AAEA,IAAA,IAAI,IAAI,CAAC+I,YAAY,CAAA,GAAA,CAAY,EAAE;MACjC,IAAI,CAAChY,IAAI,EAAE,CAAA;MACX,GAAG;QACD9V,IAAI,CAACy5B,MAAM,CAAC/1B,IAAI,CAAC,IAAI,CAACg2B,yBAAyB,EAAE,CAAC,CAAA;AACpD,OAAC,QAAQ,IAAI,CAAC3U,GAAG,CAAU,EAAA,CAAA,EAAA;AAC7B,KAAA;AAEA,IAAA,IAAI,IAAI,CAAC+I,YAAY,CAAA,GAAA,CAAgB,EAAE;MACrC,IAAI,CAAChY,IAAI,EAAE,CAAA;MACX,GAAG;QACD9V,IAAI,CAACw5B,UAAU,CAAC91B,IAAI,CAAC,IAAI,CAACg2B,yBAAyB,EAAE,CAAC,CAAA;AACxD,OAAC,QAAQ,IAAI,CAAC3U,GAAG,CAAU,EAAA,CAAA,EAAA;AAC7B,KAAA;AAEA/kB,IAAAA,IAAI,CAACiD,IAAI,GAAG,IAAI,CAAC02B,mBAAmB,CAAC;AACnCC,MAAAA,WAAW,EAAEP,OAAO;AACpBQ,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,UAAU,EAAEV,OAAO;AACnBW,MAAAA,YAAY,EAAE,KAAA;AAChB,KAAC,CAAC,CAAA;AACJ,GAAA;AAEAN,EAAAA,yBAAyB,GAA2B;AAClD,IAAA,MAAM15B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;AAE7BvE,IAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACk2B,gCAAgC,EAAE,CAAA;AACjD,IAAA,IAAI,IAAI,CAACzX,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACy2B,mCAAmC,EAAE,CAAA;AAClE,KAAC,MAAM;MACLl6B,IAAI,CAACyD,cAAc,GAAG,IAAI,CAAA;AAC5B,KAAA;AAEA,IAAA,OAAO,IAAI,CAACgB,UAAU,CAACzE,IAAI,EAAE,kBAAkB,CAAC,CAAA;AAClD,GAAA;EAEAm6B,kBAAkB,CAACn6B,IAA6B,EAAmB;AACjE,IAAA,IAAI,CAACq3B,qBAAqB,CAACr3B,IAAI,CAAC,CAAA;AAChC,IAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AACtD,GAAA;EAEAo6B,kBAAkB,CAAC/kB,IAAY,EAAE;IAC/B,IAAIA,IAAI,KAAK,GAAG,EAAE;AAChB,MAAA,IAAI,CAACpP,KAAK,CAAC6rB,UAAU,CAAC8C,4BAA4B,EAAE;AAClD1uB,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AAEAi1B,EAAAA,iBAAiB,CAAChlB,IAAY,EAAEjQ,QAAkB,EAAE+B,WAAqB,EAAE;AACzE,IAAA,IAAI,CAAC0qB,aAAa,CAACrc,GAAG,CAACH,IAAI,CAAC,EAAE,OAAA;AAE9B,IAAA,IAAI,CAACpP,KAAK,CACRkB,WAAW,GACP2qB,UAAU,CAACG,kBAAkB,GAC7BH,UAAU,CAAC6C,sBAAsB,EACrC;AACEzuB,MAAAA,EAAE,EAAEd,QAAQ;AACZ8sB,MAAAA,YAAY,EAAE7c,IAAAA;AAChB,KAAC,CACF,CAAA;AACH,GAAA;AAEAikB,EAAAA,6BAA6B,CAC3BgB,OAAiB,EACjBnzB,WAAqB,EACP;AACd,IAAA,IAAI,CAACkzB,iBAAiB,CACpB,IAAI,CAACtzB,KAAK,CAACxX,KAAK,EAChB,IAAI,CAACwX,KAAK,CAAC3B,QAAQ,EACnB+B,WAAW,CACZ,CAAA;AACD,IAAA,OAAO,IAAI,CAACowB,eAAe,CAAC+C,OAAO,CAAC,CAAA;AACtC,GAAA;;EAIAnB,kBAAkB,CAACn5B,IAA6B,EAAmB;IACjEA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACu1B,6BAA6B,CAC5B,KAAK,EACD,IAAI,CACvB,CAAA;IACD,IAAI,CAAC9e,KAAK,CAACC,WAAW,CAACza,IAAI,CAAC+D,EAAE,CAAC/L,IAAI,EAAE2f,YAAY,EAAE3X,IAAI,CAAC+D,EAAE,CAACvF,GAAG,CAAClQ,KAAK,CAAC,CAAA;AAErE,IAAA,IAAI,IAAI,CAACk0B,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;AAChE,KAAC,MAAM;MACL13B,IAAI,CAACyD,cAAc,GAAG,IAAI,CAAA;AAC5B,KAAA;AAEAzD,IAAAA,IAAI,CAACu6B,KAAK,GAAG,IAAI,CAAC5D,wBAAwB,CAAO,EAAA,CAAA,CAAA;IACjD,IAAI,CAACjI,SAAS,EAAE,CAAA;AAEhB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,WAAW,CAAC,CAAA;AAC3C,GAAA;AAEAo5B,EAAAA,mBAAmB,CACjBp5B,IAA8B,EAC9Bw6B,OAAgB,EACE;IAClB,IAAI,CAACnM,gBAAgB,CAAU,GAAA,CAAA,CAAA;IAC/BruB,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACu1B,6BAA6B,CAC5B,IAAI,EACA,IAAI,CACvB,CAAA;IACD,IAAI,CAAC9e,KAAK,CAACC,WAAW,CAACza,IAAI,CAAC+D,EAAE,CAAC/L,IAAI,EAAE2f,YAAY,EAAE3X,IAAI,CAAC+D,EAAE,CAACvF,GAAG,CAAClQ,KAAK,CAAC,CAAA;AAErE,IAAA,IAAI,IAAI,CAACk0B,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;AAChE,KAAC,MAAM;MACL13B,IAAI,CAACyD,cAAc,GAAG,IAAI,CAAA;AAC5B,KAAA;;IAGAzD,IAAI,CAACy6B,SAAS,GAAG,IAAI,CAAA;AACrB,IAAA,IAAI,IAAI,CAACjY,KAAK,CAAA,EAAA,CAAU,EAAE;AACxBxiB,MAAAA,IAAI,CAACy6B,SAAS,GAAG,IAAI,CAAC9D,wBAAwB,CAAU,EAAA,CAAA,CAAA;AAC1D,KAAA;IAEA32B,IAAI,CAAC06B,QAAQ,GAAG,IAAI,CAAA;IACpB,IAAI,CAACF,OAAO,EAAE;AACZx6B,MAAAA,IAAI,CAAC06B,QAAQ,GAAG,IAAI,CAAC/D,wBAAwB,CAAO,EAAA,CAAA,CAAA;AACtD,KAAA;IACA,IAAI,CAACjI,SAAS,EAAE,CAAA;AAEhB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,YAAY,CAAC,CAAA;AAC5C,GAAA;;AAIA26B,EAAAA,sBAAsB,CAACC,cAAuB,GAAG,KAAK,EAAmB;AACvE,IAAA,MAAMC,YAAY,GAAG,IAAI,CAAC9zB,KAAK,CAAC3B,QAAQ,CAAA;AAExC,IAAA,MAAMpF,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmB,CAAA;AAE9C,IAAA,MAAMu2B,QAAQ,GAAG,IAAI,CAACC,iBAAiB,EAAE,CAAA;AAEzC,IAAA,MAAMC,KAAK,GAAG,IAAI,CAACvC,kCAAkC,EAAE,CAAA;AACvDz4B,IAAAA,IAAI,CAAChI,IAAI,GAAGgjC,KAAK,CAAChjC,IAAI,CAAA;IAEtBgI,IAAI,CAAC86B,QAAQ,GAAGA,QAAQ,CAAA;AAExB96B,IAAAA,IAAI,CAACi7B,KAAK,GAAGD,KAAK,CAACjD,cAAc,CAAA;AAEjC,IAAA,IAAI,IAAI,CAACvV,KAAK,CAAA,EAAA,CAAO,EAAE;MACrB,IAAI,CAACuC,GAAG,CAAO,EAAA,CAAA,CAAA;AAEf/kB,MAAAA,IAAI,CAAC84B,OAAO,GAAG,IAAI,CAAChC,aAAa,EAAE,CAAA;AACrC,KAAC,MAAM;AACL,MAAA,IAAI8D,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC30B,KAAK,CAAC6rB,UAAU,CAAC+B,uBAAuB,EAAE;AAAE3tB,UAAAA,EAAE,EAAE20B,YAAAA;AAAa,SAAC,CAAC,CAAA;AACtE,OAAA;AACF,KAAA;AAEA,IAAA,OAAO,IAAI,CAACp2B,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;AAEA03B,EAAAA,iCAAiC,GAA+B;AAC9D,IAAA,MAAMb,SAAS,GAAG,IAAI,CAAC9vB,KAAK,CAACgY,MAAM,CAAA;AACnC,IAAA,MAAM/e,IAAI,GAAG,IAAI,CAACuE,SAAS,EAA8B,CAAA;IACzDvE,IAAI,CAACuC,MAAM,GAAG,EAAE,CAAA;AAEhB,IAAA,IAAI,CAACwE,KAAK,CAACgY,MAAM,GAAG,IAAI,CAAA;;IAGxB,IAAI,IAAI,CAACyD,KAAK,CAAA,EAAA,CAAO,IAAI,IAAI,CAACA,KAAK,CAAA,GAAA,CAAgB,EAAE;MACnD,IAAI,CAAC1M,IAAI,EAAE,CAAA;AACb,KAAC,MAAM;MACL,IAAI,CAAC9e,UAAU,EAAE,CAAA;AACnB,KAAA;IAEA,IAAIkkC,eAAe,GAAG,KAAK,CAAA;IAE3B,GAAG;AACD,MAAA,MAAMC,aAAa,GAAG,IAAI,CAACR,sBAAsB,CAACO,eAAe,CAAC,CAAA;AAElEl7B,MAAAA,IAAI,CAACuC,MAAM,CAACmB,IAAI,CAACy3B,aAAa,CAAC,CAAA;MAE/B,IAAIA,aAAa,CAACrC,OAAO,EAAE;AACzBoC,QAAAA,eAAe,GAAG,IAAI,CAAA;AACxB,OAAA;AAEA,MAAA,IAAI,CAAC,IAAI,CAAC1Y,KAAK,IAAO,EAAE;QACtB,IAAI,CAACoM,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACF,KAAC,QAAQ,CAAC,IAAI,CAACpM,KAAK,CAAO,EAAA,CAAA,EAAA;IAC3B,IAAI,CAACoM,MAAM,CAAO,EAAA,CAAA,CAAA;AAElB,IAAA,IAAI,CAAC7nB,KAAK,CAACgY,MAAM,GAAG8X,SAAS,CAAA;AAE7B,IAAA,OAAO,IAAI,CAACpyB,UAAU,CAACzE,IAAI,EAAE,0BAA0B,CAAC,CAAA;AAC1D,GAAA;AAEAk6B,EAAAA,mCAAmC,GAAiC;AAClE,IAAA,MAAMl6B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAgC,CAAA;AAC3D,IAAA,MAAMsyB,SAAS,GAAG,IAAI,CAAC9vB,KAAK,CAACgY,MAAM,CAAA;IACnC/e,IAAI,CAACuC,MAAM,GAAG,EAAE,CAAA;AAEhB,IAAA,IAAI,CAACwE,KAAK,CAACgY,MAAM,GAAG,IAAI,CAAA;IAExB,IAAI,CAAC6P,MAAM,CAAO,EAAA,CAAA,CAAA;AAClB,IAAA,MAAMwM,qBAAqB,GAAG,IAAI,CAACr0B,KAAK,CAACiY,kBAAkB,CAAA;AAC3D,IAAA,IAAI,CAACjY,KAAK,CAACiY,kBAAkB,GAAG,KAAK,CAAA;AACrC,IAAA,OAAO,CAAC,IAAI,CAACwD,KAAK,IAAO,EAAE;MACzBxiB,IAAI,CAACuC,MAAM,CAACmB,IAAI,CAAC,IAAI,CAACozB,aAAa,EAAE,CAAC,CAAA;AACtC,MAAA,IAAI,CAAC,IAAI,CAACtU,KAAK,IAAO,EAAE;QACtB,IAAI,CAACoM,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACF,KAAA;AACA,IAAA,IAAI,CAAC7nB,KAAK,CAACiY,kBAAkB,GAAGoc,qBAAqB,CAAA;IACrD,IAAI,CAACxM,MAAM,CAAO,EAAA,CAAA,CAAA;AAElB,IAAA,IAAI,CAAC7nB,KAAK,CAACgY,MAAM,GAAG8X,SAAS,CAAA;AAE7B,IAAA,OAAO,IAAI,CAACpyB,UAAU,CAACzE,IAAI,EAAE,4BAA4B,CAAC,CAAA;AAC5D,GAAA;AAEAq7B,EAAAA,4CAA4C,GAAiC;AAC3E,IAAA,MAAMr7B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAgC,CAAA;AAC3D,IAAA,MAAMsyB,SAAS,GAAG,IAAI,CAAC9vB,KAAK,CAACgY,MAAM,CAAA;IACnC/e,IAAI,CAACuC,MAAM,GAAG,EAAE,CAAA;AAEhB,IAAA,IAAI,CAACwE,KAAK,CAACgY,MAAM,GAAG,IAAI,CAAA;IAExB,IAAI,CAAC6P,MAAM,CAAO,EAAA,CAAA,CAAA;AAClB,IAAA,OAAO,CAAC,IAAI,CAACpM,KAAK,IAAO,EAAE;MACzBxiB,IAAI,CAACuC,MAAM,CAACmB,IAAI,CAAC,IAAI,CAAC43B,oCAAoC,EAAE,CAAC,CAAA;AAC7D,MAAA,IAAI,CAAC,IAAI,CAAC9Y,KAAK,IAAO,EAAE;QACtB,IAAI,CAACoM,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACF,KAAA;IACA,IAAI,CAACA,MAAM,CAAO,EAAA,CAAA,CAAA;AAElB,IAAA,IAAI,CAAC7nB,KAAK,CAACgY,MAAM,GAAG8X,SAAS,CAAA;AAE7B,IAAA,OAAO,IAAI,CAACpyB,UAAU,CAACzE,IAAI,EAAE,4BAA4B,CAAC,CAAA;AAC5D,GAAA;AAEAu7B,EAAAA,sBAAsB,GAAwB;AAC5C,IAAA,MAAMv7B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAuB,CAAA;IAClD,IAAI,CAAC8pB,gBAAgB,CAAe,GAAA,CAAA,CAAA;IAEpCruB,IAAI,CAACu5B,OAAO,GAAG,EAAE,CAAA;AACjB,IAAA,IAAI,IAAI,CAACxU,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB,GAAG;QACD/kB,IAAI,CAACu5B,OAAO,CAAC71B,IAAI,CAAC,IAAI,CAACg2B,yBAAyB,EAAE,CAAC,CAAA;AACrD,OAAC,QAAQ,IAAI,CAAC3U,GAAG,CAAU,EAAA,CAAA,EAAA;AAC7B,KAAA;AAEA/kB,IAAAA,IAAI,CAACiD,IAAI,GAAG,IAAI,CAAC02B,mBAAmB,CAAC;AACnCC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,YAAY,EAAE,KAAA;AAChB,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO,IAAI,CAACv1B,UAAU,CAACzE,IAAI,EAAE,yBAAyB,CAAC,CAAA;AACzD,GAAA;AAEAw7B,EAAAA,0BAA0B,GAAiB;IACzC,OAAO,IAAI,CAAChZ,KAAK,CAAA,GAAA,CAAQ,IAAI,IAAI,CAACA,KAAK,CAAW,GAAA,CAAA,GAC9C,KAAK,CAACkW,aAAa,EAAE,GACrB,IAAI,CAACnB,eAAe,CAAC,IAAI,CAAC,CAAA;AAChC,GAAA;AAEAkE,EAAAA,0BAA0B,CACxBz7B,IAAqC,EACrC07B,QAAiB,EACjBZ,QAAgC,EACP;IACzB96B,IAAI,CAAC27B,MAAM,GAAGD,QAAQ,CAAA;;AAGtB,IAAA,IAAI,IAAI,CAACxW,SAAS,EAAE,CAAC9yB,IAAI,OAAa,EAAE;AACtC4N,MAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACy3B,0BAA0B,EAAE,CAAA;AAC3Cx7B,MAAAA,IAAI,CAAC3Q,GAAG,GAAG,IAAI,CAACsnC,wBAAwB,EAAE,CAAA;AAC5C,KAAC,MAAM;MACL32B,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAAA;AACd/D,MAAAA,IAAI,CAAC3Q,GAAG,GAAG,IAAI,CAACynC,aAAa,EAAE,CAAA;AACjC,KAAA;IACA,IAAI,CAAClI,MAAM,CAAa,CAAA,CAAA,CAAA;AACxB5uB,IAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAAConC,wBAAwB,EAAE,CAAA;IAC5C32B,IAAI,CAAC86B,QAAQ,GAAGA,QAAQ,CAAA;AAExB,IAAA,OAAO,IAAI,CAACr2B,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;AAEA47B,EAAAA,+BAA+B,CAC7B57B,IAA0C,EAC1C07B,QAAiB,EACa;IAC9B17B,IAAI,CAAC27B,MAAM,GAAGD,QAAQ,CAAA;AAEtB17B,IAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACy3B,0BAA0B,EAAE,CAAA;IAC3C,IAAI,CAAC5M,MAAM,CAAa,CAAA,CAAA,CAAA;IACxB,IAAI,CAACA,MAAM,CAAa,CAAA,CAAA,CAAA;IACxB,IAAI,IAAI,CAACpM,KAAK,CAAA,EAAA,CAAO,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAW,EAAE;MAC9CxiB,IAAI,CAACsC,MAAM,GAAG,IAAI,CAAA;MAClBtC,IAAI,CAACqG,QAAQ,GAAG,KAAK,CAAA;AACrBrG,MAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAACssC,4BAA4B,CAC5C,IAAI,CAACnK,WAAW,CAAC1xB,IAAI,CAACxB,GAAG,CAAClQ,KAAK,CAAC,CACjC,CAAA;AACH,KAAC,MAAM;MACL0R,IAAI,CAACsC,MAAM,GAAG,KAAK,CAAA;AACnB,MAAA,IAAI,IAAI,CAACyiB,GAAG,CAAA,EAAA,CAAa,EAAE;QACzB/kB,IAAI,CAACqG,QAAQ,GAAG,IAAI,CAAA;AACtB,OAAA;AACArG,MAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAAConC,wBAAwB,EAAE,CAAA;AAC9C,KAAA;AACA,IAAA,OAAO,IAAI,CAAClyB,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AACxD,GAAA;EAEA67B,4BAA4B,CAC1B77B,IAA0C,EACZ;IAC9BA,IAAI,CAACuC,MAAM,GAAG,EAAE,CAAA;IAChBvC,IAAI,CAACT,IAAI,GAAG,IAAI,CAAA;IAChBS,IAAI,CAACyD,cAAc,GAAG,IAAI,CAAA;IAC1BzD,IAAI,CAAC63B,IAAI,GAAG,IAAI,CAAA;AAEhB,IAAA,IAAI,IAAI,CAACrV,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;AAChE,KAAA;IAEA,IAAI,CAAC9I,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,IAAA,IAAI,IAAI,CAACpM,KAAK,CAAA,EAAA,CAAU,EAAE;MACxBxiB,IAAI,CAAC63B,IAAI,GAAG,IAAI,CAACiE,0BAA0B,CAAa,IAAI,CAAC,CAAA;AAE7D97B,MAAAA,IAAI,CAAC63B,IAAI,CAAC7/B,IAAI,GAAG,IAAI,CAAA;AACrB,MAAA,IAAI,CAAC,IAAI,CAACwqB,KAAK,IAAW,EAAE;QAC1B,IAAI,CAACoM,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACF,KAAA;IACA,OAAO,CAAC,IAAI,CAACpM,KAAK,CAAA,EAAA,CAAW,IAAI,CAAC,IAAI,CAACA,KAAK,CAAA,EAAA,CAAa,EAAE;MACzDxiB,IAAI,CAACuC,MAAM,CAACmB,IAAI,CAAC,IAAI,CAACo4B,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAA;AACxD,MAAA,IAAI,CAAC,IAAI,CAACtZ,KAAK,IAAW,EAAE;QAC1B,IAAI,CAACoM,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,IAAI,CAAC7J,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB/kB,IAAI,CAACT,IAAI,GAAG,IAAI,CAACu8B,0BAA0B,CAAC,KAAK,CAAC,CAAA;AACpD,KAAA;IACA,IAAI,CAAClN,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB5uB,IAAAA,IAAI,CAAC83B,UAAU,GAAG,IAAI,CAACnB,wBAAwB,EAAE,CAAA;AAEjD,IAAA,OAAO,IAAI,CAAClyB,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AACxD,GAAA;AAEA+7B,EAAAA,+BAA+B,CAC7B/7B,IAA0C,EAC1C07B,QAAiB,EACa;AAC9B,IAAA,MAAMM,SAAS,GAAG,IAAI,CAACz3B,SAAS,EAAE,CAAA;IAClCvE,IAAI,CAAC27B,MAAM,GAAGD,QAAQ,CAAA;IACtB17B,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAACssC,4BAA4B,CAACG,SAAS,CAAC,CAAA;AACzD,IAAA,OAAO,IAAI,CAACv3B,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AACxD,GAAA;AAEA25B,EAAAA,mBAAmB,CAAC;IAClBC,WAAW;IACXC,UAAU;IACVC,WAAW;IACXC,UAAU;AACVC,IAAAA,YAAAA;AAOF,GAAC,EAA8B;AAC7B,IAAA,MAAMnD,SAAS,GAAG,IAAI,CAAC9vB,KAAK,CAACgY,MAAM,CAAA;AACnC,IAAA,IAAI,CAAChY,KAAK,CAACgY,MAAM,GAAG,IAAI,CAAA;AAExB,IAAA,MAAM3B,SAAS,GAAG,IAAI,CAAC7Y,SAAS,EAAE,CAAA;IAElC6Y,SAAS,CAAC6e,cAAc,GAAG,EAAE,CAAA;IAC7B7e,SAAS,CAACztB,UAAU,GAAG,EAAE,CAAA;IACzBytB,SAAS,CAAC8e,QAAQ,GAAG,EAAE,CAAA;IACvB9e,SAAS,CAAC+e,aAAa,GAAG,EAAE,CAAA;AAE5B,IAAA,IAAIC,QAAQ,CAAA;AACZ,IAAA,IAAIC,KAAK,CAAA;IACT,IAAIC,OAAO,GAAG,KAAK,CAAA;AACnB,IAAA,IAAIzC,UAAU,IAAI,IAAI,CAACrX,KAAK,GAAc,EAAE;MAC1C,IAAI,CAACoM,MAAM,CAAc,CAAA,CAAA,CAAA;AACzBwN,MAAAA,QAAQ,GAAe,CAAA,CAAA;AACvBC,MAAAA,KAAK,GAAG,IAAI,CAAA;AACd,KAAC,MAAM;MACL,IAAI,CAACzN,MAAM,CAAW,CAAA,CAAA,CAAA;AACtBwN,MAAAA,QAAQ,GAAY,CAAA,CAAA;AACpBC,MAAAA,KAAK,GAAG,KAAK,CAAA;AACf,KAAA;IAEAjf,SAAS,CAACif,KAAK,GAAGA,KAAK,CAAA;AAEvB,IAAA,OAAO,CAAC,IAAI,CAAC7Z,KAAK,CAAC4Z,QAAQ,CAAC,EAAE;MAC5B,IAAIV,QAAQ,GAAG,KAAK,CAAA;MACpB,IAAIa,aAA0C,GAAG,IAAI,CAAA;MACrD,IAAIC,eAA4C,GAAG,IAAI,CAAA;AACvD,MAAA,MAAMx8B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;AAE7B,MAAA,IAAIw1B,UAAU,IAAI,IAAI,CAACjM,YAAY,KAAW,EAAE;AAC9C,QAAA,MAAM5I,SAAS,GAAG,IAAI,CAACA,SAAS,EAAE,CAAA;QAElC,IAAIA,SAAS,CAAC9yB,IAAI,KAAA,EAAa,IAAI8yB,SAAS,CAAC9yB,IAAI,KAAA,EAAgB,EAAE;UACjE,IAAI,CAAC0jB,IAAI,EAAE,CAAA;AACXymB,UAAAA,aAAa,GAAG,IAAI,CAACx1B,KAAK,CAAC3B,QAAQ,CAAA;AACnCw0B,UAAAA,WAAW,GAAG,KAAK,CAAA;AACrB,SAAA;AACF,OAAA;AAEA,MAAA,IAAIA,WAAW,IAAI,IAAI,CAAC9L,YAAY,KAAY,EAAE;AAChD,QAAA,MAAM5I,SAAS,GAAG,IAAI,CAACA,SAAS,EAAE,CAAA;;QAGlC,IAAIA,SAAS,CAAC9yB,IAAI,KAAA,EAAa,IAAI8yB,SAAS,CAAC9yB,IAAI,KAAA,EAAgB,EAAE;UACjE,IAAI,CAAC0jB,IAAI,EAAE,CAAA;AACX4lB,UAAAA,QAAQ,GAAG,IAAI,CAAA;AACjB,SAAA;AACF,OAAA;AAEA,MAAA,MAAMZ,QAAQ,GAAG,IAAI,CAACC,iBAAiB,EAAE,CAAA;AAEzC,MAAA,IAAI,IAAI,CAAChW,GAAG,CAAA,CAAA,CAAa,EAAE;QACzB,IAAIwX,aAAa,IAAI,IAAI,EAAE;AACzB,UAAA,IAAI,CAACvlC,UAAU,CAACulC,aAAa,CAAC,CAAA;AAChC,SAAA;AACA,QAAA,IAAI,IAAI,CAACxX,GAAG,CAAA,CAAA,CAAa,EAAE;AACzB,UAAA,IAAI+V,QAAQ,EAAE;YACZ,IAAI,CAAC9jC,UAAU,CAAC8jC,QAAQ,CAACt8B,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACrC,WAAA;AACA8uB,UAAAA,SAAS,CAAC+e,aAAa,CAACz4B,IAAI,CAC1B,IAAI,CAACk4B,+BAA+B,CAAC57B,IAAI,EAAE07B,QAAQ,CAAC,CACrD,CAAA;AACH,SAAC,MAAM;AACLte,UAAAA,SAAS,CAAC8e,QAAQ,CAACx4B,IAAI,CACrB,IAAI,CAAC+3B,0BAA0B,CAACz7B,IAAI,EAAE07B,QAAQ,EAAEZ,QAAQ,CAAC,CAC1D,CAAA;AACH,SAAA;OACD,MAAM,IAAI,IAAI,CAACtY,KAAK,CAAW,EAAA,CAAA,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAO,EAAE;QACrD,IAAI+Z,aAAa,IAAI,IAAI,EAAE;AACzB,UAAA,IAAI,CAACvlC,UAAU,CAACulC,aAAa,CAAC,CAAA;AAChC,SAAA;AACA,QAAA,IAAIzB,QAAQ,EAAE;UACZ,IAAI,CAAC9jC,UAAU,CAAC8jC,QAAQ,CAACt8B,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACrC,SAAA;AACA8uB,QAAAA,SAAS,CAAC6e,cAAc,CAACv4B,IAAI,CAC3B,IAAI,CAACq4B,+BAA+B,CAAC/7B,IAAI,EAAE07B,QAAQ,CAAC,CACrD,CAAA;AACH,OAAC,MAAM;QACL,IAAIlpC,IAAI,GAAG,MAAM,CAAA;QAEjB,IAAI,IAAI,CAACs7B,YAAY,CAAA,EAAA,CAAS,IAAI,IAAI,CAACA,YAAY,CAAA,GAAA,CAAS,EAAE;AAC5D,UAAA,MAAM5I,SAAS,GAAG,IAAI,CAACA,SAAS,EAAE,CAAA;AAClC,UAAA,IAAIlS,0BAA0B,CAACkS,SAAS,CAAC9yB,IAAI,CAAC,EAAE;AAC9CI,YAAAA,IAAI,GAAG,IAAI,CAACuU,KAAK,CAACxX,KAAK,CAAA;YACvB,IAAI,CAACumB,IAAI,EAAE,CAAA;AACb,WAAA;AACF,SAAA;QAEA,MAAM2mB,aAAa,GAAG,IAAI,CAACC,2BAA2B,CACpD18B,IAAI,EACJ07B,QAAQ,EACRa,aAAa,EACbzB,QAAQ,EACRtoC,IAAI,EACJsnC,WAAW,EACXE,YAAY,WAAZA,YAAY,GAAI,CAACqC,KAAK,CACvB,CAAA;QAED,IAAII,aAAa,KAAK,IAAI,EAAE;AAC1BH,UAAAA,OAAO,GAAG,IAAI,CAAA;AACdE,UAAAA,eAAe,GAAG,IAAI,CAACz1B,KAAK,CAACC,eAAe,CAAA;AAC9C,SAAC,MAAM;AACLoW,UAAAA,SAAS,CAACztB,UAAU,CAAC+T,IAAI,CAAC+4B,aAAa,CAAC,CAAA;AAC1C,SAAA;AACF,OAAA;MAEA,IAAI,CAACE,uBAAuB,EAAE,CAAA;AAE9B,MAAA,IACEH,eAAe,IACf,CAAC,IAAI,CAACha,KAAK,CAAW,CAAA,CAAA,IACtB,CAAC,IAAI,CAACA,KAAK,GAAc,EACzB;AACA,QAAA,IAAI,CAACvc,KAAK,CAAC6rB,UAAU,CAAC4C,iCAAiC,EAAE;AACvDxuB,UAAAA,EAAE,EAAEs2B,eAAAA;AACN,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAAC5N,MAAM,CAACwN,QAAQ,CAAC,CAAA;;AAOrB,IAAA,IAAItC,WAAW,EAAE;MACf1c,SAAS,CAACkf,OAAO,GAAGA,OAAO,CAAA;AAC7B,KAAA;IAEA,MAAM9a,GAAG,GAAG,IAAI,CAAC/c,UAAU,CAAC2Y,SAAS,EAAE,sBAAsB,CAAC,CAAA;AAE9D,IAAA,IAAI,CAACrW,KAAK,CAACgY,MAAM,GAAG8X,SAAS,CAAA;AAE7B,IAAA,OAAOrV,GAAG,CAAA;AACZ,GAAA;AAEAkb,EAAAA,2BAA2B,CACzB18B,IAAuE,EACvE07B,QAAiB,EACjBa,aAA0C,EAC1CzB,QAA2C,EAC3CtoC,IAAY,EACZsnC,WAAoB,EACpBE,YAAqB,EAC6C;AAClE,IAAA,IAAI,IAAI,CAACjV,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB,MAAM6X,cAAc,GAClB,IAAI,CAACpa,KAAK,CAAU,EAAA,CAAA,IACpB,IAAI,CAACA,KAAK,IAAS,IACnB,IAAI,CAACA,KAAK,CAAA,CAAA,CAAW,IACrB,IAAI,CAACA,KAAK,CAAc,CAAA,CAAA,CAAA;AAE1B,MAAA,IAAIoa,cAAc,EAAE;QAClB,IAAI,CAAC9C,WAAW,EAAE;AAChB,UAAA,IAAI,CAAC7zB,KAAK,CAAC6rB,UAAU,CAAC4B,sBAAsB,EAAE;AAC5CxtB,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACC,eAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAC,MAAM,IAAI,CAACgzB,YAAY,EAAE;AACxB,UAAA,IAAI,CAAC/zB,KAAK,CAAC6rB,UAAU,CAAC2B,kBAAkB,EAAE;AACxCvtB,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACC,eAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,IAAI8zB,QAAQ,EAAE;AACZ,UAAA,IAAI,CAAC70B,KAAK,CAAC6rB,UAAU,CAAC6B,eAAe,EAAE;AAAEztB,YAAAA,EAAE,EAAE40B,QAAAA;AAAS,WAAC,CAAC,CAAA;AAC1D,SAAA;AAEA,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;MAEA,IAAI,CAAChB,WAAW,EAAE;AAChB,QAAA,IAAI,CAAC7zB,KAAK,CAAC6rB,UAAU,CAACgD,oBAAoB,EAAE;AAC1C5uB,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACC,eAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;MACA,IAAIu1B,aAAa,IAAI,IAAI,EAAE;AACzB,QAAA,IAAI,CAACvlC,UAAU,CAACulC,aAAa,CAAC,CAAA;AAChC,OAAA;AACA,MAAA,IAAIzB,QAAQ,EAAE;AACZ,QAAA,IAAI,CAAC70B,KAAK,CAAC6rB,UAAU,CAACoC,cAAc,EAAE;AAAEhuB,UAAAA,EAAE,EAAE40B,QAAAA;AAAS,SAAC,CAAC,CAAA;AACzD,OAAA;AAEA96B,MAAAA,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAAC+3B,aAAa,EAAE,CAAA;AACpC,MAAA,OAAO,IAAI,CAACryB,UAAU,CAACzE,IAAI,EAAE,0BAA0B,CAAC,CAAA;AAC1D,KAAC,MAAM;AACLA,MAAAA,IAAI,CAAC3Q,GAAG,GAAG,IAAI,CAACmsC,0BAA0B,EAAE,CAAA;MAC5Cx7B,IAAI,CAAC27B,MAAM,GAAGD,QAAQ,CAAA;AACtB17B,MAAAA,IAAI,CAAC68B,KAAK,GAAGN,aAAa,IAAI,IAAI,CAAA;MAClCv8B,IAAI,CAACxN,IAAI,GAAGA,IAAI,CAAA;MAEhB,IAAI6T,QAAQ,GAAG,KAAK,CAAA;MACpB,IAAI,IAAI,CAACmc,KAAK,CAAA,EAAA,CAAO,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAW,EAAE;QAE9CxiB,IAAI,CAACsC,MAAM,GAAG,IAAI,CAAA;QAElB,IAAIi6B,aAAa,IAAI,IAAI,EAAE;AACzB,UAAA,IAAI,CAACvlC,UAAU,CAACulC,aAAa,CAAC,CAAA;AAChC,SAAA;AACA,QAAA,IAAIzB,QAAQ,EAAE;UACZ,IAAI,CAAC9jC,UAAU,CAAC8jC,QAAQ,CAACt8B,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACrC,SAAA;AAEA0R,QAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAACssC,4BAA4B,CAC5C,IAAI,CAACnK,WAAW,CAAC1xB,IAAI,CAACxB,GAAG,CAAClQ,KAAK,CAAC,CACjC,CAAA;AACD,QAAA,IAAIkE,IAAI,KAAK,KAAK,IAAIA,IAAI,KAAK,KAAK,EAAE;AACpC,UAAA,IAAI,CAACsqC,2BAA2B,CAAC98B,IAAI,CAAC,CAAA;AACxC,SAAA;AAEA,QAAA,IACE,CAAC85B,WAAW,IACZ95B,IAAI,CAAC3Q,GAAG,CAAC2I,IAAI,KAAK,aAAa,IAC/BgI,IAAI,CAACzQ,KAAK,CAACsoC,IAAI,EACf;AACA,UAAA,IAAI,CAAC5xB,KAAK,CAAC6rB,UAAU,CAACsC,4BAA4B,EAAE;AAClDluB,YAAAA,EAAE,EAAElG,IAAI,CAACzQ,KAAK,CAACsoC,IAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;AACF,OAAC,MAAM;AACL,QAAA,IAAIrlC,IAAI,KAAK,MAAM,EAAE,IAAI,CAACwE,UAAU,EAAE,CAAA;QAEtCgJ,IAAI,CAACsC,MAAM,GAAG,KAAK,CAAA;AAEnB,QAAA,IAAI,IAAI,CAACyiB,GAAG,CAAA,EAAA,CAAa,EAAE;AACzB1e,UAAAA,QAAQ,GAAG,IAAI,CAAA;AACjB,SAAA;AACArG,QAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAAConC,wBAAwB,EAAE,CAAA;QAC5C32B,IAAI,CAAC86B,QAAQ,GAAGA,QAAQ,CAAA;AAC1B,OAAA;MAEA96B,IAAI,CAACqG,QAAQ,GAAGA,QAAQ,CAAA;AAExB,MAAA,OAAO,IAAI,CAAC5B,UAAU,CAACzE,IAAI,EAAE,oBAAoB,CAAC,CAAA;AACpD,KAAA;AACF,GAAA;;EAIA88B,2BAA2B,CACzBlN,QAEC,EACK;IACN,MAAMmN,UAAU,GAAGnN,QAAQ,CAACp9B,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA;AAClD,IAAA,MAAMvD,MAAM,GACV2gC,QAAQ,CAACrgC,KAAK,CAACgT,MAAM,CAACtT,MAAM,IAAI2gC,QAAQ,CAACrgC,KAAK,CAACgQ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAE9D,IAAA,IAAIqwB,QAAQ,CAACrgC,KAAK,CAACsoC,IAAI,EAAE;AACvB,MAAA,IAAI,CAAC5xB,KAAK,CACR2pB,QAAQ,CAACp9B,IAAI,KAAK,KAAK,GACnBs/B,UAAU,CAACwB,yBAAyB,GACpCxB,UAAU,CAACmC,yBAAyB,EACxC;AAAE/tB,QAAAA,EAAE,EAAE0pB,QAAQ,CAACrgC,KAAK,CAACsoC,IAAAA;AAAK,OAAC,CAC5B,CAAA;AACH,KAAA;IAEA,IAAI5oC,MAAM,KAAK8tC,UAAU,EAAE;AACzB,MAAA,IAAI,CAAC92B,KAAK,CACR2pB,QAAQ,CAACp9B,IAAI,KAAK,KAAK,GACnBiN,MAAM,CAACzM,cAAc,GACrByM,MAAM,CAACxM,cAAc,EACzB;AAAEiT,QAAAA,EAAE,EAAE0pB,QAAAA;AAAS,OAAC,CACjB,CAAA;AACH,KAAA;IAEA,IAAIA,QAAQ,CAACp9B,IAAI,KAAK,KAAK,IAAIo9B,QAAQ,CAACrgC,KAAK,CAACgQ,IAAI,EAAE;AAClD,MAAA,IAAI,CAAC0G,KAAK,CAACxG,MAAM,CAACvM,sBAAsB,EAAE;AAAEgT,QAAAA,EAAE,EAAE0pB,QAAAA;AAAS,OAAC,CAAC,CAAA;AAC7D,KAAA;AACF,GAAA;AAEA+M,EAAAA,uBAAuB,GAAS;IAC9B,IACE,CAAC,IAAI,CAAC5X,GAAG,IAAS,IAClB,CAAC,IAAI,CAACA,GAAG,CAAA,EAAA,CAAU,IACnB,CAAC,IAAI,CAACvC,KAAK,CAAW,CAAA,CAAA,IACtB,CAAC,IAAI,CAACA,KAAK,CAAA,CAAA,CAAc,EACzB;MACA,IAAI,CAACxrB,UAAU,EAAE,CAAA;AACnB,KAAA;AACF,GAAA;AAEAijC,EAAAA,gCAAgC,CAC9B70B,QAAmB,EACnBrB,EAAiB,EACc;AAAA,IAAA,IAAA,SAAA,CAAA;IAC/B,CAAAqB,SAAAA,GAAAA,QAAQ,wBAARA,QAAQ,GAAK,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;IAChC,IAAIpF,IAAkD,GACpD+D,EAAE,IAAI,IAAI,CAACu1B,6BAA6B,CAAC,IAAI,CAAC,CAAA;AAEhD,IAAA,OAAO,IAAI,CAACvU,GAAG,CAAA,EAAA,CAAQ,EAAE;AACvB,MAAA,MAAMiY,KAAK,GAAG,IAAI,CAACtL,WAAW,CAAgCtsB,QAAQ,CAAC,CAAA;MACvE43B,KAAK,CAACC,aAAa,GAAGj9B,IAAI,CAAA;MAC1Bg9B,KAAK,CAACj5B,EAAE,GAAG,IAAI,CAACu1B,6BAA6B,CAAC,IAAI,CAAC,CAAA;MACnDt5B,IAAI,GAAG,IAAI,CAACyE,UAAU,CAACu4B,KAAK,EAAE,yBAAyB,CAAC,CAAA;AAC1D,KAAA;AAEA,IAAA,OAAOh9B,IAAI,CAAA;AACb,GAAA;AAEAk9B,EAAAA,oBAAoB,CAClB93B,QAAkB,EAClBrB,EAAgB,EACa;AAC7B,IAAA,MAAM/D,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;IAEvCpF,IAAI,CAACyD,cAAc,GAAG,IAAI,CAAA;IAC1BzD,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACk2B,gCAAgC,CAAC70B,QAAQ,EAAErB,EAAE,CAAC,CAAA;AAE7D,IAAA,IAAI,IAAI,CAACye,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACy2B,mCAAmC,EAAE,CAAA;AAClE,KAAA;AAEA,IAAA,OAAO,IAAI,CAACz1B,UAAU,CAACzE,IAAI,EAAE,uBAAuB,CAAC,CAAA;AACvD,GAAA;AAEAm9B,EAAAA,mBAAmB,GAA+B;AAChD,IAAA,MAAMn9B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;IAC7B,IAAI,CAACqqB,MAAM,CAAY,EAAA,CAAA,CAAA;AACvB5uB,IAAAA,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAACq+B,oBAAoB,EAAE,CAAA;AAC3C,IAAA,OAAO,IAAI,CAAC34B,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AACtD,GAAA;AAEAq9B,EAAAA,kBAAkB,GAA8B;AAC9C,IAAA,MAAMr9B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;IAC7BvE,IAAI,CAACsI,KAAK,GAAG,EAAE,CAAA;IACf,IAAI,CAACsmB,MAAM,CAAa,CAAA,CAAA,CAAA;AAExB,IAAA,OAAO,IAAI,CAAC7nB,KAAK,CAAClI,GAAG,GAAG,IAAI,CAAC5P,MAAM,IAAI,CAAC,IAAI,CAACuzB,KAAK,GAAa,EAAE;MAC/DxiB,IAAI,CAACsI,KAAK,CAAC5E,IAAI,CAAC,IAAI,CAACozB,aAAa,EAAE,CAAC,CAAA;AACrC,MAAA,IAAI,IAAI,CAACtU,KAAK,CAAA,CAAA,CAAa,EAAE,MAAA;MAC7B,IAAI,CAACoM,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,KAAA;IACA,IAAI,CAACA,MAAM,CAAa,CAAA,CAAA,CAAA;AACxB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACrD,GAAA;EAEA87B,0BAA0B,CAACwB,KAAc,EAA2B;IAClE,IAAItlC,IAAI,GAAG,IAAI,CAAA;IACf,IAAIqO,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI0xB,cAAc,GAAG,IAAI,CAAA;AACzB,IAAA,MAAM/3B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAA2B,CAAA;AACtD,IAAA,MAAMg5B,EAAE,GAAG,IAAI,CAACrY,SAAS,EAAE,CAAA;AAC3B,IAAA,MAAMsY,MAAM,GAAG,IAAI,CAACz2B,KAAK,CAAC3U,IAAI,KAAa,EAAA,CAAA;IAE3C,IAAImrC,EAAE,CAACnrC,IAAI,KAAA,EAAa,IAAImrC,EAAE,CAACnrC,IAAI,KAAA,EAAgB,EAAE;AACnD,MAAA,IAAIorC,MAAM,IAAI,CAACF,KAAK,EAAE;AACpB,QAAA,IAAI,CAACr3B,KAAK,CAAC6rB,UAAU,CAACwC,oBAAoB,EAAE;AAAEpuB,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AAC3D,OAAA;AACAhI,MAAAA,IAAI,GAAG,IAAI,CAACu/B,eAAe,CAACiG,MAAM,CAAC,CAAA;AACnC,MAAA,IAAI,IAAI,CAACzY,GAAG,CAAA,EAAA,CAAa,EAAE;AACzB1e,QAAAA,QAAQ,GAAG,IAAI,CAAA;AACf,QAAA,IAAIm3B,MAAM,EAAE;AACV,UAAA,IAAI,CAACv3B,KAAK,CAAC6rB,UAAU,CAACuC,yBAAyB,EAAE;AAAEnuB,YAAAA,EAAE,EAAElG,IAAAA;AAAK,WAAC,CAAC,CAAA;AAChE,SAAA;AACF,OAAA;AACA+3B,MAAAA,cAAc,GAAG,IAAI,CAACpB,wBAAwB,EAAE,CAAA;AAClD,KAAC,MAAM;AACLoB,MAAAA,cAAc,GAAG,IAAI,CAACjB,aAAa,EAAE,CAAA;AACvC,KAAA;IACA92B,IAAI,CAAChI,IAAI,GAAGA,IAAI,CAAA;IAChBgI,IAAI,CAACqG,QAAQ,GAAGA,QAAQ,CAAA;IACxBrG,IAAI,CAAC+3B,cAAc,GAAGA,cAAc,CAAA;AACpC,IAAA,OAAO,IAAI,CAACtzB,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;EAEAy9B,kCAAkC,CAChCrrC,IAAgB,EACS;IACzB,MAAM4N,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACt/B,IAAI,CAACoM,GAAG,CAAClQ,KAAK,CAAC,CAAA;IAC7C0R,IAAI,CAAChI,IAAI,GAAG,IAAI,CAAA;IAChBgI,IAAI,CAACqG,QAAQ,GAAG,KAAK,CAAA;IACrBrG,IAAI,CAAC+3B,cAAc,GAAG3lC,IAAI,CAAA;AAC1B,IAAA,OAAO,IAAI,CAACqS,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;AAEA43B,EAAAA,2BAA2B,CAACr1B,MAAiC,GAAG,EAAE,EAIhE;IACA,IAAIhD,IAAgD,GAAG,IAAI,CAAA;IAC3D,IAAIwP,KAAiD,GAAG,IAAI,CAAA;AAC5D,IAAA,IAAI,IAAI,CAACyT,KAAK,CAAA,EAAA,CAAU,EAAE;AACxBzT,MAAAA,KAAK,GAAG,IAAI,CAAC+sB,0BAA0B,CAAa,IAAI,CAAC,CAAA;MAEzD/sB,KAAK,CAAC/W,IAAI,GAAG,IAAI,CAAA;AACjB,MAAA,IAAI,CAAC,IAAI,CAACwqB,KAAK,IAAW,EAAE;QAC1B,IAAI,CAACoM,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACF,KAAA;IACA,OAAO,CAAC,IAAI,CAACpM,KAAK,CAAA,EAAA,CAAW,IAAI,CAAC,IAAI,CAACA,KAAK,CAAA,EAAA,CAAa,EAAE;MACzDjgB,MAAM,CAACmB,IAAI,CAAC,IAAI,CAACo4B,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAA;AACnD,MAAA,IAAI,CAAC,IAAI,CAACtZ,KAAK,IAAW,EAAE;QAC1B,IAAI,CAACoM,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACF,KAAA;AACA,IAAA,IAAI,IAAI,CAAC7J,GAAG,CAAA,EAAA,CAAa,EAAE;AACzBxlB,MAAAA,IAAI,GAAG,IAAI,CAACu8B,0BAA0B,CAAC,KAAK,CAAC,CAAA;AAC/C,KAAA;IACA,OAAO;MAAEv5B,MAAM;MAAEhD,IAAI;AAAEwP,MAAAA,KAAAA;KAAO,CAAA;AAChC,GAAA;AAEA2uB,EAAAA,yBAAyB,CACvBt4B,QAAkB,EAClBpF,IAAkC,EAClC+D,EAAgB,EACM;IACtB,QAAQA,EAAE,CAAC/L,IAAI;AACb,MAAA,KAAK,KAAK;AACR,QAAA,OAAO,IAAI,CAACyM,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AAEnD,MAAA,KAAK,MAAM,CAAA;AACX,MAAA,KAAK,SAAS;AACZ,QAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,uBAAuB,CAAC,CAAA;AAEvD,MAAA,KAAK,OAAO;AACV,QAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AAErD,MAAA,KAAK,OAAO;AACV,QAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AAErD,MAAA,KAAK,QAAQ;AACX,QAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AAEtD,MAAA,KAAK,QAAQ;AACX,QAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AAEtD,MAAA,KAAK,QAAQ;AACX,QAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AAEtD,MAAA;AACE,QAAA,IAAI,CAACo6B,kBAAkB,CAACr2B,EAAE,CAAC/L,IAAI,CAAC,CAAA;AAChC,QAAA,OAAO,IAAI,CAACklC,oBAAoB,CAAC93B,QAAQ,EAAErB,EAAE,CAAC,CAAA;AAAC,KAAA;AAErD,GAAA;;AAKAq5B,EAAAA,oBAAoB,GAAyB;AAC3C,IAAA,MAAMh4B,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,MAAMpF,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;AAC7B,IAAA,IAAIozB,GAAG,CAAA;AACP,IAAA,IAAIvlC,IAAI,CAAA;IACR,IAAIurC,aAAa,GAAG,KAAK,CAAA;AACzB,IAAA,MAAMvC,qBAAqB,GAAG,IAAI,CAACr0B,KAAK,CAACiY,kBAAkB,CAAA;AAE3D,IAAA,QAAQ,IAAI,CAACjY,KAAK,CAAC3U,IAAI;AACrB,MAAA,KAAA,CAAA;QACE,OAAO,IAAI,CAACunC,mBAAmB,CAAC;AAC9BC,UAAAA,WAAW,EAAE,KAAK;AAClBC,UAAAA,UAAU,EAAE,KAAK;AACjBC,UAAAA,WAAW,EAAE,IAAI;AACjBC,UAAAA,UAAU,EAAE,KAAK;AACjBC,UAAAA,YAAY,EAAE,IAAA;AAChB,SAAC,CAAC,CAAA;AAEJ,MAAA,KAAA,CAAA;QACE,OAAO,IAAI,CAACL,mBAAmB,CAAC;AAC9BC,UAAAA,WAAW,EAAE,KAAK;AAClBC,UAAAA,UAAU,EAAE,IAAI;AAChBC,UAAAA,WAAW,EAAE,IAAI;AACjBC,UAAAA,UAAU,EAAE,KAAK;AACjBC,UAAAA,YAAY,EAAE,KAAA;AAChB,SAAC,CAAC,CAAA;AAEJ,MAAA,KAAA,CAAA;AACE,QAAA,IAAI,CAACjzB,KAAK,CAACiY,kBAAkB,GAAG,KAAK,CAAA;AACrC5sB,QAAAA,IAAI,GAAG,IAAI,CAACirC,kBAAkB,EAAE,CAAA;AAChC,QAAA,IAAI,CAACt2B,KAAK,CAACiY,kBAAkB,GAAGoc,qBAAqB,CAAA;AACrD,QAAA,OAAOhpC,IAAI,CAAA;AAEb,MAAA,KAAA,EAAA;AACE4N,QAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;QAC9D,IAAI,CAAC9I,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB+I,QAAAA,GAAG,GAAG,IAAI,CAACC,2BAA2B,EAAE,CAAA;AACxC53B,QAAAA,IAAI,CAACuC,MAAM,GAAGo1B,GAAG,CAACp1B,MAAM,CAAA;AACxBvC,QAAAA,IAAI,CAACT,IAAI,GAAGo4B,GAAG,CAACp4B,IAAI,CAAA;AACpBS,QAAAA,IAAI,CAAC63B,IAAI,GAAGF,GAAG,CAAC5oB,KAAK,CAAA;QACrB,IAAI,CAAC6f,MAAM,CAAW,EAAA,CAAA,CAAA;QAEtB,IAAI,CAACA,MAAM,CAAU,EAAA,CAAA,CAAA;AAErB5uB,QAAAA,IAAI,CAAC83B,UAAU,GAAG,IAAI,CAAChB,aAAa,EAAE,CAAA;AAEtC,QAAA,OAAO,IAAI,CAACryB,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AAExD,MAAA,KAAA,EAAA;QACE,IAAI,CAAC8V,IAAI,EAAE,CAAA;;QAGX,IAAI,CAAC,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAW,IAAI,CAAC,IAAI,CAACA,KAAK,CAAA,EAAA,CAAa,EAAE;AACtD,UAAA,IAAI3P,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,IAAI,IAAI,CAACowB,KAAK,IAAU,EAAE;AAC9D,YAAA,MAAM5kB,KAAK,GAAG,IAAI,CAACsnB,SAAS,EAAE,CAAC9yB,IAAI,CAAA;AACnCurC,YAAAA,aAAa,GAAG//B,KAAK,KAAgB,EAAA,IAAIA,KAAK,KAAa,EAAA,CAAA;AAC7D,WAAC,MAAM;AACL+/B,YAAAA,aAAa,GAAG,IAAI,CAAA;AACtB,WAAA;AACF,SAAA;AAEA,QAAA,IAAIA,aAAa,EAAE;AACjB,UAAA,IAAI,CAAC52B,KAAK,CAACiY,kBAAkB,GAAG,KAAK,CAAA;AACrC5sB,UAAAA,IAAI,GAAG,IAAI,CAAC0kC,aAAa,EAAE,CAAA;AAC3B,UAAA,IAAI,CAAC/vB,KAAK,CAACiY,kBAAkB,GAAGoc,qBAAqB,CAAA;;UAGrD,IACE,IAAI,CAACr0B,KAAK,CAACiY,kBAAkB,IAC7B,EACE,IAAI,CAACwD,KAAK,CAAU,EAAA,CAAA,IACnB,IAAI,CAACA,KAAK,CAAW,EAAA,CAAA,IAAI,IAAI,CAAC0C,SAAS,EAAE,CAAC9yB,IAAI,KAAc,EAAA,CAC9D,EACD;YACA,IAAI,CAACw8B,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,YAAA,OAAOx8B,IAAI,CAAA;AACb,WAAC,MAAM;YAEL,IAAI,CAAC2yB,GAAG,CAAU,EAAA,CAAA,CAAA;AACpB,WAAA;AACF,SAAA;AAEA,QAAA,IAAI3yB,IAAI,EAAE;AACRulC,UAAAA,GAAG,GAAG,IAAI,CAACC,2BAA2B,CAAC,CACrC,IAAI,CAAC6F,kCAAkC,CAACrrC,IAAI,CAAC,CAC9C,CAAC,CAAA;AACJ,SAAC,MAAM;AACLulC,UAAAA,GAAG,GAAG,IAAI,CAACC,2BAA2B,EAAE,CAAA;AAC1C,SAAA;AAEA53B,QAAAA,IAAI,CAACuC,MAAM,GAAGo1B,GAAG,CAACp1B,MAAM,CAAA;AACxBvC,QAAAA,IAAI,CAACT,IAAI,GAAGo4B,GAAG,CAACp4B,IAAI,CAAA;AACpBS,QAAAA,IAAI,CAAC63B,IAAI,GAAGF,GAAG,CAAC5oB,KAAK,CAAA;QAErB,IAAI,CAAC6f,MAAM,CAAW,EAAA,CAAA,CAAA;QAEtB,IAAI,CAACA,MAAM,CAAU,EAAA,CAAA,CAAA;AAErB5uB,QAAAA,IAAI,CAAC83B,UAAU,GAAG,IAAI,CAAChB,aAAa,EAAE,CAAA;QAEtC92B,IAAI,CAACyD,cAAc,GAAG,IAAI,CAAA;AAE1B,QAAA,OAAO,IAAI,CAACgB,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AAExD,MAAA,KAAA,GAAA;QACE,OAAO,IAAI,CAACoB,YAAY,CACtB,IAAI,CAAC2F,KAAK,CAACxX,KAAK,EAChB,6BAA6B,CAC9B,CAAA;AAEH,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACEyQ,QAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAACizB,KAAK,CAAU,EAAA,CAAA,CAAA;QACjC,IAAI,CAAC1M,IAAI,EAAE,CAAA;AACX,QAAA,OAAO,IAAI,CAACrR,UAAU,CACpBzE,IAAI,EACJ,8BAA8B,CAC/B,CAAA;AAEH,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,IAAI,CAAC+G,KAAK,CAACxX,KAAK,KAAK,GAAG,EAAE;UAC5B,IAAI,CAACumB,IAAI,EAAE,CAAA;AACX,UAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,GAAA,CAAQ,EAAE;AACtB,YAAA,OAAO,IAAI,CAACob,kBAAkB,CAC5B,CAAC,IAAI,CAAC72B,KAAK,CAACxX,KAAK,EACjB,6BAA6B,EAC7ByQ,IAAI,CACL,CAAA;AACH,WAAA;AAEA,UAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,GAAA,CAAW,EAAE;AACzB,YAAA,OAAO,IAAI,CAACob,kBAAkB,CAC5B,CAAC,IAAI,CAAC72B,KAAK,CAACxX,KAAK,EACjB,6BAA6B,EAC7ByQ,IAAI,CACL,CAAA;AACH,WAAA;AAEA,UAAA,MAAM,IAAI,CAACiG,KAAK,CAAC6rB,UAAU,CAACiD,4BAA4B,EAAE;AACxD7uB,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;QAEA,MAAM,IAAI,CAACpO,UAAU,EAAE,CAAA;AACzB,MAAA,KAAA,GAAA;QACE,OAAO,IAAI,CAACoK,YAAY,CACtB,IAAI,CAAC2F,KAAK,CAACxX,KAAK,EAChB,6BAA6B,CAC9B,CAAA;AAEH,MAAA,KAAA,GAAA;QACE,OAAO,IAAI,CAAC6R,YAAY,CACtB,IAAI,CAAC2F,KAAK,CAACxX,KAAK,EAChB,6BAA6B,CAC9B,CAAA;AAEH,MAAA,KAAA,EAAA;QACE,IAAI,CAACumB,IAAI,EAAE,CAAA;AACX,QAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,oBAAoB,CAAC,CAAA;AAEpD,MAAA,KAAA,EAAA;QACE,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX,QAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,2BAA2B,CAAC,CAAA;AAE3D,MAAA,KAAA,EAAA;QACE,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX,QAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,oBAAoB,CAAC,CAAA;AAEpD,MAAA,KAAA,EAAA;QACE,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX,QAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AAEtD,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAACm9B,mBAAmB,EAAE,CAAA;AAEnC,MAAA;QACE,IAAI7pB,cAAc,CAAC,IAAI,CAACvM,KAAK,CAAC3U,IAAI,CAAC,EAAE;UACnC,MAAM6W,KAAK,GAAG2K,cAAc,CAAC,IAAI,CAAC7M,KAAK,CAAC3U,IAAI,CAAC,CAAA;UAC7C,IAAI,CAAC0jB,IAAI,EAAE,CAAA;AACX,UAAA,OAAO,KAAK,CAAC+nB,gBAAgB,CAAC79B,IAAI,EAA0BiJ,KAAK,CAAC,CAAA;SACnE,MAAM,IAAI4J,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAAE;AAC7C,UAAA,IAAI,IAAI,CAAC07B,YAAY,CAAA,GAAA,CAAe,EAAE;YACpC,OAAO,IAAI,CAACyN,sBAAsB,EAAE,CAAA;AACtC,WAAA;AAEA,UAAA,OAAO,IAAI,CAACmC,yBAAyB,CACnCt4B,QAAQ,EACRpF,IAAI,EACJ,IAAI,CAACu3B,eAAe,EAAE,CACvB,CAAA;AACH,SAAA;AAAC,KAAA;IAGL,MAAM,IAAI,CAACvgC,UAAU,EAAE,CAAA;AACzB,GAAA;AAEA8mC,EAAAA,oBAAoB,GAAyB;AAC3C,IAAA,MAAM14B,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,IAAIhT,IAAI,GAAG,IAAI,CAACgrC,oBAAoB,EAAE,CAAA;IACtC,IAAIW,yBAAyB,GAAG,KAAK,CAAA;AACrC,IAAA,OACE,CAAC,IAAI,CAACvb,KAAK,CAAA,CAAA,CAAa,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAgB,KACtD,CAAC,IAAI,CAAC8L,kBAAkB,EAAE,EAC1B;AACA,MAAA,MAAMtuB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;AACvC,MAAA,MAAMiB,QAAQ,GAAG,IAAI,CAAC0e,GAAG,CAAgB,EAAA,CAAA,CAAA;MACzCgZ,yBAAyB,GAAGA,yBAAyB,IAAI13B,QAAQ,CAAA;MACjE,IAAI,CAACuoB,MAAM,CAAa,CAAA,CAAA,CAAA;AACxB,MAAA,IAAI,CAACvoB,QAAQ,IAAI,IAAI,CAACmc,KAAK,GAAa,EAAE;QACxCxiB,IAAI,CAACgrB,WAAW,GAAG54B,IAAI,CAAA;QACvB,IAAI,CAAC0jB,IAAI,EAAE,CAAA;QACX1jB,IAAI,GAAG,IAAI,CAACqS,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACrD,OAAC,MAAM;QACLA,IAAI,CAACg+B,UAAU,GAAG5rC,IAAI,CAAA;AACtB4N,QAAAA,IAAI,CAACi+B,SAAS,GAAG,IAAI,CAACnH,aAAa,EAAE,CAAA;QACrC,IAAI,CAAClI,MAAM,CAAa,CAAA,CAAA,CAAA;AACxB,QAAA,IAAImP,yBAAyB,EAAE;UAC7B/9B,IAAI,CAACqG,QAAQ,GAAGA,QAAQ,CAAA;UACxBjU,IAAI,GAAG,IAAI,CAACqS,UAAU;UAEpBzE,IAAI,EACJ,2BAA2B,CAC5B,CAAA;AACH,SAAC,MAAM;UACL5N,IAAI,GAAG,IAAI,CAACqS,UAAU;UAEpBzE,IAAI,EACJ,mBAAmB,CACpB,CAAA;AACH,SAAA;AACF,OAAA;AACF,KAAA;AACA,IAAA,OAAO5N,IAAI,CAAA;AACb,GAAA;AAEA8rC,EAAAA,mBAAmB,GAAyB;AAC1C,IAAA,MAAMl+B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;AAC7B,IAAA,IAAI,IAAI,CAACwgB,GAAG,CAAA,EAAA,CAAa,EAAE;AACzB/kB,MAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAACmG,mBAAmB,EAAE,CAAA;AAChD,MAAA,OAAO,IAAI,CAACz5B,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AACxD,KAAC,MAAM;MACL,OAAO,IAAI,CAAC89B,oBAAoB,EAAE,CAAA;AACpC,KAAA;AACF,GAAA;AAEAK,EAAAA,kCAAkC,GAAyB;AACzD,IAAA,MAAMC,KAAK,GAAG,IAAI,CAACF,mBAAmB,EAAE,CAAA;IACxC,IAAI,CAAC,IAAI,CAACn3B,KAAK,CAACiY,kBAAkB,IAAI,IAAI,CAAC+F,GAAG,CAAA,EAAA,CAAU,EAAE;MAExD,MAAM/kB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAAC0M,KAAK,CAAC5/B,GAAG,CAAClQ,KAAK,CAAC,CAAA;MAC9C0R,IAAI,CAACuC,MAAM,GAAG,CAAC,IAAI,CAACk7B,kCAAkC,CAACW,KAAK,CAAC,CAAC,CAAA;MAC9Dp+B,IAAI,CAACT,IAAI,GAAG,IAAI,CAAA;MAChBS,IAAI,CAAC63B,IAAI,GAAG,IAAI,CAAA;AAChB73B,MAAAA,IAAI,CAAC83B,UAAU,GAAG,IAAI,CAAChB,aAAa,EAAE,CAAA;MACtC92B,IAAI,CAACyD,cAAc,GAAG,IAAI,CAAA;AAC1B,MAAA,OAAO,IAAI,CAACgB,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AACxD,KAAA;AACA,IAAA,OAAOo+B,KAAK,CAAA;AACd,GAAA;AAEAC,EAAAA,yBAAyB,GAAyB;AAChD,IAAA,MAAMr+B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;IAC7B,IAAI,CAACwgB,GAAG,CAAe,EAAA,CAAA,CAAA;AACvB,IAAA,MAAM3yB,IAAI,GAAG,IAAI,CAAC+rC,kCAAkC,EAAE,CAAA;AACtDn+B,IAAAA,IAAI,CAACsI,KAAK,GAAG,CAAClW,IAAI,CAAC,CAAA;AACnB,IAAA,OAAO,IAAI,CAAC2yB,GAAG,CAAA,EAAA,CAAe,EAAE;MAC9B/kB,IAAI,CAACsI,KAAK,CAAC5E,IAAI,CAAC,IAAI,CAACy6B,kCAAkC,EAAE,CAAC,CAAA;AAC5D,KAAA;AACA,IAAA,OAAOn+B,IAAI,CAACsI,KAAK,CAACrZ,MAAM,KAAK,CAAC,GAC1BmD,IAAI,GACJ,IAAI,CAACqS,UAAU,CAACzE,IAAI,EAAE,4BAA4B,CAAC,CAAA;AACzD,GAAA;AAEAs+B,EAAAA,kBAAkB,GAAyB;AACzC,IAAA,MAAMt+B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;IAC7B,IAAI,CAACwgB,GAAG,CAAc,EAAA,CAAA,CAAA;AACtB,IAAA,MAAM3yB,IAAI,GAAG,IAAI,CAACisC,yBAAyB,EAAE,CAAA;AAC7Cr+B,IAAAA,IAAI,CAACsI,KAAK,GAAG,CAAClW,IAAI,CAAC,CAAA;AACnB,IAAA,OAAO,IAAI,CAAC2yB,GAAG,CAAA,EAAA,CAAc,EAAE;MAC7B/kB,IAAI,CAACsI,KAAK,CAAC5E,IAAI,CAAC,IAAI,CAAC26B,yBAAyB,EAAE,CAAC,CAAA;AACnD,KAAA;AACA,IAAA,OAAOr+B,IAAI,CAACsI,KAAK,CAACrZ,MAAM,KAAK,CAAC,GAC1BmD,IAAI,GACJ,IAAI,CAACqS,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AAClD,GAAA;AAEA82B,EAAAA,aAAa,GAAyB;AACpC,IAAA,MAAMD,SAAS,GAAG,IAAI,CAAC9vB,KAAK,CAACgY,MAAM,CAAA;AACnC,IAAA,IAAI,CAAChY,KAAK,CAACgY,MAAM,GAAG,IAAI,CAAA;AACxB,IAAA,MAAM3sB,IAAI,GAAG,IAAI,CAACksC,kBAAkB,EAAE,CAAA;AACtC,IAAA,IAAI,CAACv3B,KAAK,CAACgY,MAAM,GAAG8X,SAAS,CAAA;AAC7B,IAAA,OAAOzkC,IAAI,CAAA;AACb,GAAA;AAEAkpC,EAAAA,oCAAoC,GAAyB;AAC3D,IAAA,IAAI,IAAI,CAACv0B,KAAK,CAAC3U,IAAI,KAAY,GAAA,IAAI,IAAI,CAAC2U,KAAK,CAACxX,KAAK,KAAK,GAAG,EAAE;AAC3D,MAAA,MAAM6V,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,MAAA,MAAMpF,IAAI,GAAG,IAAI,CAACu3B,eAAe,EAAE,CAAA;AACnC,MAAA,OAAO,IAAI,CAAC2F,oBAAoB,CAAC93B,QAAQ,EAAEpF,IAAI,CAAC,CAAA;AAClD,KAAC,MAAM;MACL,OAAO,IAAI,CAAC82B,aAAa,EAAE,CAAA;AAC7B,KAAA;AACF,GAAA;AAEAmC,EAAAA,uBAAuB,GAAyB;AAC9C,IAAA,MAAMj5B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAwB,CAAA;AACnDvE,IAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAACpB,wBAAwB,EAAE,CAAA;AACrD,IAAA,OAAO,IAAI,CAAClyB,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,GAAA;EAEAy4B,kCAAkC,CAChC8F,sBAAgC,EAClB;AACd,IAAA,MAAMvD,KAAK,GAAGuD,sBAAsB,GAChC,IAAI,CAAChH,eAAe,EAAE,GACtB,IAAI,CAAC+B,6BAA6B,EAAE,CAAA;AACxC,IAAA,IAAI,IAAI,CAAC9W,KAAK,CAAA,EAAA,CAAU,EAAE;AAExBwY,MAAAA,KAAK,CAACjD,cAAc,GAAG,IAAI,CAACkB,uBAAuB,EAAE,CAAA;AACrD,MAAA,IAAI,CAAC/wB,gBAAgB,CAAC8yB,KAAK,CAAC,CAAA;AAC9B,KAAA;AACA,IAAA,OAAOA,KAAK,CAAA;AACd,GAAA;EAEAwD,mBAAmB,CAACx+B,IAAY,EAAU;AACxCA,IAAAA,IAAI,CAAC2B,UAAU,CAACo2B,cAAc,GAAG/3B,IAAI,CAAC+3B,cAAc,CAAA;AAEpD,IAAA,IAAI,CAAC7vB,gBAAgB,CAAClI,IAAI,CAAC2B,UAAU,EAAE3B,IAAI,CAAC+3B,cAAc,CAACv5B,GAAG,CAACjQ,GAAG,CAAC,CAAA;IAEnE,OAAOyR,IAAI,CAAC2B,UAAU,CAAA;AACxB,GAAA;AAEAo5B,EAAAA,iBAAiB,GAAsC;IACrD,IAAID,QAAQ,GAAG,IAAI,CAAA;AACnB,IAAA,IAAI,IAAI,CAACtY,KAAK,CAAA,EAAA,CAAY,EAAE;AAC1BsY,MAAAA,QAAQ,GAAG,IAAI,CAACv2B,SAAS,EAAkB,CAAA;AAC3C,MAAA,IAAI,IAAI,CAACwC,KAAK,CAACxX,KAAK,KAAK,GAAG,EAAE;QAC5BurC,QAAQ,CAACtoC,IAAI,GAAG,MAAM,CAAA;AACxB,OAAC,MAAM;QACLsoC,QAAQ,CAACtoC,IAAI,GAAG,OAAO,CAAA;AACzB,OAAA;MACA,IAAI,CAACsjB,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAACrR,UAAU,CAACq2B,QAAQ,EAAE,UAAU,CAAC,CAAA;AAC9C,KAAA;AACA,IAAA,OAAOA,QAAQ,CAAA;AACjB,GAAA;;EAMA72B,iBAAiB,CACfjE,IAAgB,EAChBy+B,mBAAoC,EACpCt6B,QAAiB,GAAG,KAAK,EACnB;AACN,IAAA,IAAIs6B,mBAAmB,EAAE;AACvB,MAAA,OAAO,IAAI,CAACC,gCAAgC,CAAC1+B,IAAI,EAAE,MACjD,KAAK,CAACiE,iBAAiB,CAACjE,IAAI,EAAE,IAAI,EAAEmE,QAAQ,CAAC,CAC9C,CAAA;AACH,KAAA;IAEA,OAAO,KAAK,CAACF,iBAAiB,CAACjE,IAAI,EAAE,KAAK,EAAEmE,QAAQ,CAAC,CAAA;AACvD,GAAA;EAEAw6B,0BAA0B,CAMxB3+B,IAAe,EAAE5N,IAAe,EAAE+R,QAAiB,GAAG,KAAK,EAAK;AAChE,IAAA,IAAI,IAAI,CAACqe,KAAK,CAAA,EAAA,CAAU,EAAE;AACxB,MAAA,MAAMgV,QAAQ,GAAG,IAAI,CAACjzB,SAAS,EAAoB,CAAA;MAEnD,CACEizB,QAAQ,CAACO,cAAc;AAEvB/3B,MAAAA,IAAI,CAACm3B,SAAS,CACf,GAAG,IAAI,CAACD,oCAAoC,EAAE,CAAA;AAE/Cl3B,MAAAA,IAAI,CAAC83B,UAAU,GAAGN,QAAQ,CAACO,cAAc,GACrC,IAAI,CAACtzB,UAAU,CAAC+yB,QAAQ,EAAE,gBAAgB,CAAC,GAC3C,IAAI,CAAA;AACV,KAAA;IAEA,OAAO,KAAK,CAACmH,0BAA0B,CAAC3+B,IAAI,EAAE5N,IAAI,EAAE+R,QAAQ,CAAC,CAAA;AAC/D,GAAA;;EAGAy6B,kBAAkB,CAACn+B,KAAyB,EAAe;IAEzD,IAAI,IAAI,CAACsG,KAAK,CAACiO,MAAM,IAAI,IAAI,CAAC8Y,YAAY,CAAA,GAAA,CAAe,EAAE;AACzD,MAAA,MAAM5I,SAAS,GAAG,IAAI,CAACA,SAAS,EAAE,CAAA;AAClC,MAAA,IAAInS,0BAA0B,CAACmS,SAAS,CAAC9yB,IAAI,CAAC,EAAE;AAC9C,QAAA,MAAM4N,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmB,CAAA;QAC9C,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,QAAA,OAAO,IAAI,CAACqkB,kBAAkB,CAACn6B,IAAI,CAAC,CAAA;AACtC,OAAA;KACD,MAAM,IAAI,IAAI,CAACu2B,gBAAgB,EAAE,IAAI,IAAI,CAACzI,YAAY,CAAA,GAAA,CAAU,EAAE;AACjE,MAAA,MAAM9tB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;MAC7B,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAAC+oB,wBAAwB,CAAC7+B,IAAI,CAAC,CAAA;AAC5C,KAAA;AACA,IAAA,MAAM+B,IAAI,GAAG,KAAK,CAAC68B,kBAAkB,CAACn+B,KAAK,CAAC,CAAA;AAE5C,IAAA,IAAI,IAAI,CAAC41B,UAAU,KAAKna,SAAS,IAAI,CAAC,IAAI,CAAC1Z,gBAAgB,CAACT,IAAI,CAAC,EAAE;MACjE,IAAI,CAACs0B,UAAU,GAAG,IAAI,CAAA;AACxB,KAAA;AACA,IAAA,OAAOt0B,IAAI,CAAA;AACb,GAAA;;AAGA+8B,EAAAA,wBAAwB,CACtB9+B,IAA2B,EAC3B++B,IAAkB,EAClBl4B,UAAgC,EACT;AACvB,IAAA,IAAIk4B,IAAI,CAAC3sC,IAAI,KAAK,YAAY,EAAE;AAC9B,MAAA,IAAI2sC,IAAI,CAAC/mC,IAAI,KAAK,SAAS,EAAE;AAC3B,QAAA,IACE,IAAI,CAACwqB,KAAK,CAAA,EAAA,CAAW,IACrB3P,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,IAClC,IAAI,CAACowB,KAAK,CAAA,EAAA,CAAc,IACxB,IAAI,CAACA,KAAK,CAAS,EAAA,CAAA,IACnB,IAAI,CAACA,KAAK,CAAA,EAAA,CAAY,EACtB;AAEA,UAAA,OAAO,IAAI,CAACwV,gBAAgB,CAACh4B,IAAI,CAAC,CAAA;AACpC,SAAA;OACD,MAAM,IAAI6S,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAAE;AAC7C,QAAA,IAAI2sC,IAAI,CAAC/mC,IAAI,KAAK,WAAW,EAAE;AAE7B,UAAA,OAAO,IAAI,CAACmiC,kBAAkB,CAACn6B,IAAI,CAAC,CAAA;AACtC,SAAC,MAAM,IAAI++B,IAAI,CAAC/mC,IAAI,KAAK,MAAM,EAAE;AAE/B,UAAA,OAAO,IAAI,CAACmhC,kBAAkB,CAACn5B,IAAI,CAAC,CAAA;AACtC,SAAC,MAAM,IAAI++B,IAAI,CAAC/mC,IAAI,KAAK,QAAQ,EAAE;AAEjC,UAAA,OAAO,IAAI,CAACohC,mBAAmB,CAACp5B,IAAI,EAAE,KAAK,CAAC,CAAA;AAC9C,SAAA;AACF,OAAA;AACF,KAAA;IAEA,OAAO,KAAK,CAAC8+B,wBAAwB,CAAC9+B,IAAI,EAAE++B,IAAI,EAAEl4B,UAAU,CAAC,CAAA;AAC/D,GAAA;;AAGAm4B,EAAAA,4BAA4B,GAAY;IACtC,MAAM;AAAE5sC,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;AAC3B,IAAA,IACEqM,kCAAkC,CAAChhB,IAAI,CAAC,IACvC,IAAI,CAACmkC,gBAAgB,EAAE,IAAInkC,IAAI,KAAA,GAAc,EAC9C;AACA,MAAA,OAAO,CAAC,IAAI,CAAC2U,KAAK,CAAC+Y,WAAW,CAAA;AAChC,KAAA;IACA,OAAO,KAAK,CAACkf,4BAA4B,EAAE,CAAA;AAC7C,GAAA;AAEAC,EAAAA,wBAAwB,GAAY;IAClC,MAAM;AAAE7sC,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;AAC3B,IAAA,IACEqM,kCAAkC,CAAChhB,IAAI,CAAC,IACvC,IAAI,CAACmkC,gBAAgB,EAAE,IAAInkC,IAAI,KAAA,GAAc,EAC9C;AACA,MAAA,OAAO,IAAI,CAAC2U,KAAK,CAAC+Y,WAAW,CAAA;AAC/B,KAAA;IAEA,OAAO,KAAK,CAACmf,wBAAwB,EAAE,CAAA;AACzC,GAAA;AAEAC,EAAAA,4BAA4B,GAAiC;IAC3D,IAAI,IAAI,CAAC3I,gBAAgB,EAAE,IAAI,IAAI,CAACzI,YAAY,CAAA,GAAA,CAAU,EAAE;AAC1D,MAAA,MAAM9tB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;MAC7B,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAAC+oB,wBAAwB,CAAC7+B,IAAI,CAAC,CAAA;AAC5C,KAAA;IACA,OAAO,KAAK,CAACk/B,4BAA4B,EAAE,CAAA;AAC7C,GAAA;AAEAC,EAAAA,gBAAgB,CACdJ,IAAkB,EAElB35B,QAAkB,EAClBC,mBAA6C,EAC/B;AACd,IAAA,IAAI,CAAC,IAAI,CAACmd,KAAK,CAAa,EAAA,CAAA,EAAE,OAAOuc,IAAI,CAAA;AAEzC,IAAA,IAAI,IAAI,CAACh4B,KAAK,CAAC+X,sBAAsB,EAAE;AACrC,MAAA,MAAMoP,MAAM,GAAG,IAAI,CAAC1I,iBAAiB,EAAE,CAAA;AAIvC,MAAA,IACE0I,MAAM,KAAoB,EAAA;AAC1BA,MAAAA,MAAM,KAAuB,EAAA;AAC7BA,MAAAA,MAAM,KAAoB,EAAA;AAC1BA,MAAAA,MAAM,OAA+B,EACrC;AAEA,QAAA,IAAI,CAACkR,0BAA0B,CAAC/5B,mBAAmB,CAAC,CAAA;AACpD,QAAA,OAAO05B,IAAI,CAAA;AACb,OAAA;AACF,KAAA;IAEA,IAAI,CAACnQ,MAAM,CAAa,EAAA,CAAA,CAAA;AACxB,IAAA,MAAM7nB,KAAK,GAAG,IAAI,CAACA,KAAK,CAACpI,KAAK,EAAE,CAAA;AAChC,IAAA,MAAM0gC,iBAAiB,GAAG,IAAI,CAACt4B,KAAK,CAAC6X,SAAS,CAAA;AAC9C,IAAA,MAAM5e,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;IACvC,IAAI;MAAEk6B,UAAU;AAAEC,MAAAA,MAAAA;AAAO,KAAC,GAAG,IAAI,CAACC,6BAA6B,EAAE,CAAA;IACjE,IAAI,CAACC,KAAK,EAAEpc,OAAO,CAAC,GAAG,IAAI,CAACqc,uBAAuB,CAACJ,UAAU,CAAC,CAAA;AAE/D,IAAA,IAAIC,MAAM,IAAIlc,OAAO,CAACp0B,MAAM,GAAG,CAAC,EAAE;AAChC,MAAA,MAAM2vB,SAAS,GAAG,CAAC,GAAGygB,iBAAiB,CAAC,CAAA;AAExC,MAAA,IAAIhc,OAAO,CAACp0B,MAAM,GAAG,CAAC,EAAE;QACtB,IAAI,CAAC8X,KAAK,GAAGA,KAAK,CAAA;AAClB,QAAA,IAAI,CAACA,KAAK,CAAC6X,SAAS,GAAGA,SAAS,CAAA;AAEhC,QAAA,KAAK,IAAInvB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4zB,OAAO,CAACp0B,MAAM,EAAEQ,CAAC,EAAE,EAAE;UACvCmvB,SAAS,CAAClb,IAAI,CAAC2f,OAAO,CAAC5zB,CAAC,CAAC,CAACnB,KAAK,CAAC,CAAA;AAClC,SAAA;QAEA,CAAC;UAAEgxC,UAAU;AAAEC,UAAAA,MAAAA;AAAO,SAAC,GAAG,IAAI,CAACC,6BAA6B,EAAE,EAAA;QAC9D,CAACC,KAAK,EAAEpc,OAAO,CAAC,GAAG,IAAI,CAACqc,uBAAuB,CAACJ,UAAU,CAAC,CAAA;AAC7D,OAAA;AAEA,MAAA,IAAIC,MAAM,IAAIE,KAAK,CAACxwC,MAAM,GAAG,CAAC,EAAE;AAM9B,QAAA,IAAI,CAACgX,KAAK,CAAC6rB,UAAU,CAACC,yBAAyB,EAAE;UAC/C7rB,EAAE,EAAEa,KAAK,CAAC3B,QAAAA;AACZ,SAAC,CAAC,CAAA;AACJ,OAAA;AAEA,MAAA,IAAIm6B,MAAM,IAAIE,KAAK,CAACxwC,MAAM,KAAK,CAAC,EAAE;QAChC,IAAI,CAAC8X,KAAK,GAAGA,KAAK,CAAA;QAClB6X,SAAS,CAAClb,IAAI,CAAC+7B,KAAK,CAAC,CAAC,CAAC,CAACnxC,KAAK,CAAC,CAAA;AAC9B,QAAA,IAAI,CAACyY,KAAK,CAAC6X,SAAS,GAAGA,SAAS,CAAA;QAChC,CAAC;UAAE0gB,UAAU;AAAEC,UAAAA,MAAAA;AAAO,SAAC,GAAG,IAAI,CAACC,6BAA6B,EAAE,EAAA;AAChE,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAACE,uBAAuB,CAACJ,UAAU,EAAE,IAAI,CAAC,CAAA;AAE9C,IAAA,IAAI,CAACv4B,KAAK,CAAC6X,SAAS,GAAGygB,iBAAiB,CAAA;IACxC,IAAI,CAACzQ,MAAM,CAAU,EAAA,CAAA,CAAA;IAErB5uB,IAAI,CAAC4U,IAAI,GAAGmqB,IAAI,CAAA;IAChB/+B,IAAI,CAACs/B,UAAU,GAAGA,UAAU,CAAA;AAC5Bt/B,IAAAA,IAAI,CAAC2/B,SAAS,GAAG,IAAI,CAACjB,gCAAgC,CAAC1+B,IAAI,EAAE,MAC3D,IAAI,CAAC4/B,gBAAgB,CAAC1jB,SAAS,EAAEA,SAAS,CAAC,CAC5C,CAAA;AAED,IAAA,OAAO,IAAI,CAACzX,UAAU,CAACzE,IAAI,EAAE,uBAAuB,CAAC,CAAA;AACvD,GAAA;AAEAw/B,EAAAA,6BAA6B,GAG3B;AACA,IAAA,IAAI,CAACz4B,KAAK,CAAC8X,yBAAyB,CAACnb,IAAI,CAAC,IAAI,CAACqD,KAAK,CAACzY,KAAK,CAAC,CAAA;AAE3D,IAAA,MAAMgxC,UAAU,GAAG,IAAI,CAACO,uBAAuB,EAAE,CAAA;AACjD,IAAA,MAAMN,MAAM,GAAG,CAAC,IAAI,CAAC/c,KAAK,CAAU,EAAA,CAAA,CAAA;AAEpC,IAAA,IAAI,CAACzb,KAAK,CAAC8X,yBAAyB,CAAC3K,GAAG,EAAE,CAAA;IAE1C,OAAO;MAAEorB,UAAU;AAAEC,MAAAA,MAAAA;KAAQ,CAAA;AAC/B,GAAA;;AASAG,EAAAA,uBAAuB,CACrB1/B,IAAkB,EAClB8/B,eAAyB,EACmC;AAC5D,IAAA,MAAMlV,KAAK,GAAG,CAAC5qB,IAAI,CAAC,CAAA;IACpB,MAAM+/B,MAAmC,GAAG,EAAE,CAAA;AAE9C,IAAA,OAAOnV,KAAK,CAAC37B,MAAM,KAAK,CAAC,EAAE;AACzB,MAAA,MAAM+Q,IAAI,GAAG4qB,KAAK,CAAC1W,GAAG,EAAE,CAAA;AACxB,MAAA,IAAIlU,IAAI,CAAC5N,IAAI,KAAK,yBAAyB,EAAE;QAC3C,IAAI4N,IAAI,CAACyD,cAAc,IAAI,CAACzD,IAAI,CAAC83B,UAAU,EAAE;AAG3C,UAAA,IAAI,CAACkI,qBAAqB,CAAChgC,IAAI,CAAC,CAAA;AAClC,SAAC,MAAM;AAEL+/B,UAAAA,MAAM,CAACr8B,IAAI,CAAC1D,IAAI,CAAC,CAAA;AACnB,SAAA;AACA4qB,QAAAA,KAAK,CAAClnB,IAAI,CAAC1D,IAAI,CAACiD,IAAI,CAAC,CAAA;AACvB,OAAC,MAAM,IAAIjD,IAAI,CAAC5N,IAAI,KAAK,uBAAuB,EAAE;AAChDw4B,QAAAA,KAAK,CAAClnB,IAAI,CAAC1D,IAAI,CAACs/B,UAAU,CAAC,CAAA;AAC3B1U,QAAAA,KAAK,CAAClnB,IAAI,CAAC1D,IAAI,CAAC2/B,SAAS,CAAC,CAAA;AAC5B,OAAA;AACF,KAAA;AAEA,IAAA,IAAIG,eAAe,EAAE;MACnBC,MAAM,CAACla,OAAO,CAAC7lB,IAAI,IAAI,IAAI,CAACggC,qBAAqB,CAAChgC,IAAI,CAAC,CAAC,CAAA;AACxD,MAAA,OAAO,CAAC+/B,MAAM,EAAE,EAAE,CAAC,CAAA;AACrB,KAAA;IAEA,OAAOhK,SAAS,CAACgK,MAAM,EAAE//B,IAAI,IAC3BA,IAAI,CAACuC,MAAM,CAAC09B,KAAK,CAAC7B,KAAK,IAAI,IAAI,CAAC34B,YAAY,CAAC24B,KAAK,EAAE,IAAI,CAAC,CAAC,CAC3D,CAAA;AACH,GAAA;EAEA4B,qBAAqB,CAAChgC,IAA+B,EAAE;AAAA,IAAA,IAAA,WAAA,CAAA;AACrD,IAAA,IAAI,CAACkgC,gBAAgB;IAGnBlgC,IAAI,CAACuC,MAAM,EAAA,CAAA,WAAA,GACXvC,IAAI,CAAC6B,KAAK,KAAA,IAAA,GAAA,KAAA,CAAA,GAAV,WAAYs+B,CAAAA,gBAAgB,EAChB,KAAK,CAClB,CAAA;IAED,IAAI,CAAC3lB,KAAK,CAACF,KAAK,CAAClE,cAAc,GAAGC,WAAW,CAAC,CAAA;IAE9C,KAAK,CAAC+pB,WAAW,CAACpgC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;AACpC,IAAA,IAAI,CAACwa,KAAK,CAACD,IAAI,EAAE,CAAA;AACnB,GAAA;AAEAmkB,EAAAA,gCAAgC,CAC9B1+B,IAAoB,EACpBG,KAAc,EACX;AACH,IAAA,IAAIkgC,MAAS,CAAA;AACb,IAAA,IAAI,IAAI,CAACt5B,KAAK,CAAC8X,yBAAyB,CAACiF,OAAO,CAAC9jB,IAAI,CAAC1R,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AACnE,MAAA,IAAI,CAACyY,KAAK,CAAC8X,yBAAyB,CAACnb,IAAI,CAAC,IAAI,CAACqD,KAAK,CAACzY,KAAK,CAAC,CAAA;MAC3D+xC,MAAM,GAAGlgC,KAAK,EAAE,CAAA;AAChB,MAAA,IAAI,CAAC4G,KAAK,CAAC8X,yBAAyB,CAAC3K,GAAG,EAAE,CAAA;AAC5C,KAAC,MAAM;MACLmsB,MAAM,GAAGlgC,KAAK,EAAE,CAAA;AAClB,KAAA;AAEA,IAAA,OAAOkgC,MAAM,CAAA;AACf,GAAA;AAEAC,EAAAA,cAAc,CACZtgC,IAAkB,EAElBoF,QAAkB,EACJ;IACdpF,IAAI,GAAG,KAAK,CAACsgC,cAAc,CAACtgC,IAAI,EAAEoF,QAAQ,CAAC,CAAA;AAC3C,IAAA,IAAI,IAAI,CAAC2f,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB/kB,IAAI,CAACqG,QAAQ,GAAG,IAAI,CAAA;AAIpB,MAAA,IAAI,CAAC6B,gBAAgB,CAAClI,IAAI,CAAC,CAAA;AAC7B,KAAA;AAEA,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAU,EAAE;AACxB,MAAA,MAAM+d,YAAY,GAAG,IAAI,CAAC7O,WAAW,CAACtsB,QAAQ,CAAC,CAAA;MAC/Cm7B,YAAY,CAAC5+B,UAAU,GAAG3B,IAAI,CAAA;AAC9BugC,MAAAA,YAAY,CAACxI,cAAc,GAAG,IAAI,CAACkB,uBAAuB,EAAE,CAAA;AAE5D,MAAA,OAAO,IAAI,CAACx0B,UAAU,CAAC87B,YAAY,EAAE,oBAAoB,CAAC,CAAA;AAC5D,KAAA;AAEA,IAAA,OAAOvgC,IAAI,CAAA;AACb,GAAA;EAEAwgC,uBAAuB,CAACxgC,IAAY,EAAE;AACpC,IAAA,IACGA,IAAI,CAAC5N,IAAI,KAAK,mBAAmB,KAC/B4N,IAAI,CAACy1B,UAAU,KAAK,MAAM,IAAIz1B,IAAI,CAACy1B,UAAU,KAAK,QAAQ,CAAC,IAC7Dz1B,IAAI,CAAC5N,IAAI,KAAK,wBAAwB,IACrC4N,IAAI,CAACg5B,UAAU,KAAK,MAAO,IAC5Bh5B,IAAI,CAAC5N,IAAI,KAAK,sBAAsB,IAAI4N,IAAI,CAACg5B,UAAU,KAAK,MAAO,EACpE;AAGA,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,KAAK,CAACwH,uBAAuB,CAACxgC,IAAI,CAAC,CAAA;AACrC,GAAA;AAEA4G,EAAAA,WAAW,CACT5G,IAA+D,EAC/D6G,UAAgC,EACnB;IACb,MAAM45B,IAAI,GAAG,KAAK,CAAC75B,WAAW,CAAC5G,IAAI,EAAE6G,UAAU,CAAC,CAAA;IAChD,IACE45B,IAAI,CAACruC,IAAI,KAAK,wBAAwB,IACtCquC,IAAI,CAACruC,IAAI,KAAK,sBAAsB,EACpC;AACAquC,MAAAA,IAAI,CAACzH,UAAU,GAAGyH,IAAI,CAACzH,UAAU,IAAI,OAAO,CAAA;AAC9C,KAAA;AACA,IAAA,OAAOyH,IAAI,CAAA;AACb,GAAA;EAEAC,sBAAsB,CACpB1gC,IAA8B,EACI;AAClC,IAAA,IAAI,IAAI,CAAC8tB,YAAY,CAAA,GAAA,CAAU,EAAE;MAC/B9tB,IAAI,CAACg5B,UAAU,GAAG,MAAM,CAAA;AAExB,MAAA,MAAM2H,eAAe,GAAG,IAAI,CAACp8B,SAAS,EAAE,CAAA;MACxC,IAAI,CAACuR,IAAI,EAAE,CAAA;AAEX,MAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,CAAA,CAAW,EAAE;QAEzBxiB,IAAI,CAACkH,UAAU,GAAG,IAAI,CAAC05B,qBAAqB,CACrB,IAAI,CAC1B,CAAA;AACD,QAAA,KAAK,CAACC,eAAe,CAAC7gC,IAAI,CAAC,CAAA;AAC3B,QAAA,OAAO,IAAI,CAAA;AACb,OAAC,MAAM;AAGL,QAAA,OAAO,IAAI,CAACm5B,kBAAkB,CAACwH,eAAe,CAAC,CAAA;AACjD,OAAA;AACF,KAAC,MAAM,IAAI,IAAI,CAAC7S,YAAY,KAAY,EAAE;MACxC9tB,IAAI,CAACg5B,UAAU,GAAG,MAAM,CAAA;AAExB,MAAA,MAAM2H,eAAe,GAAG,IAAI,CAACp8B,SAAS,EAAE,CAAA;MACxC,IAAI,CAACuR,IAAI,EAAE,CAAA;AAGX,MAAA,OAAO,IAAI,CAACsjB,mBAAmB,CAACuH,eAAe,EAAE,KAAK,CAAC,CAAA;AACzD,KAAC,MAAM,IAAI,IAAI,CAAC7S,YAAY,KAAe,EAAE;MAC3C9tB,IAAI,CAACg5B,UAAU,GAAG,MAAM,CAAA;AACxB,MAAA,MAAM2H,eAAe,GAAG,IAAI,CAACp8B,SAAS,EAAE,CAAA;MACxC,IAAI,CAACuR,IAAI,EAAE,CAAA;AAEX,MAAA,OAAO,IAAI,CAACqkB,kBAAkB,CAACwG,eAAe,CAAC,CAAA;KAChD,MAAM,IAAI,IAAI,CAACpK,gBAAgB,EAAE,IAAI,IAAI,CAACzI,YAAY,CAAA,GAAA,CAAU,EAAE;MACjE9tB,IAAI,CAACg5B,UAAU,GAAG,OAAO,CAAA;AACzB,MAAA,MAAM2H,eAAe,GAAG,IAAI,CAACp8B,SAAS,EAAE,CAAA;MACxC,IAAI,CAACuR,IAAI,EAAE,CAAA;AAEX,MAAA,OAAO,IAAI,CAAC+oB,wBAAwB,CAAC8B,eAAe,CAAC,CAAA;AACvD,KAAC,MAAM;AACL,MAAA,OAAO,KAAK,CAACD,sBAAsB,CAAC1gC,IAAI,CAAC,CAAA;AAC3C,KAAA;AACF,GAAA;EAEA8gC,aAAa,CAAC9gC,IAAY,EAAW;IACnC,IAAI,KAAK,CAAC8gC,aAAa,CAAC9gC,IAAI,CAAC,EAAE,OAAO,IAAI,CAAA;AAE1C,IAAA,IAAI,IAAI,CAAC8tB,YAAY,CAAA,GAAA,CAAU,IAAI,IAAI,CAAC5I,SAAS,EAAE,CAAC9yB,IAAI,KAAA,EAAY,EAAE;MACpE4N,IAAI,CAACg5B,UAAU,GAAG,MAAM,CAAA;MACxB,IAAI,CAACljB,IAAI,EAAE,CAAA;MACX,IAAI,CAACA,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AAEA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEAirB,kCAAkC,CAAC/gC,IAAY,EAAW;IACxD,MAAM;AAAEoF,MAAAA,QAAAA;KAAU,GAAG,IAAI,CAAC2B,KAAK,CAAA;AAC/B,IAAA,MAAMi6B,YAAY,GAAG,KAAK,CAACD,kCAAkC,CAAC/gC,IAAI,CAAC,CAAA;AACnE,IAAA,IAAIghC,YAAY,IAAIhhC,IAAI,CAACg5B,UAAU,KAAK,MAAM,EAAE;AAC9C,MAAA,IAAI,CAAChiC,UAAU,CAACoO,QAAQ,CAAC,CAAA;AAC3B,KAAA;AACA,IAAA,OAAO47B,YAAY,CAAA;AACrB,GAAA;AAEAC,EAAAA,YAAY,CACVjhC,IAAa,EACbkhC,WAAoB,EACpBC,UAA2B,EAC3B;IACA,KAAK,CAACF,YAAY,CAACjhC,IAAI,EAAEkhC,WAAW,EAAEC,UAAU,CAAC,CAAA;AACjD,IAAA,IAAI,IAAI,CAAC3e,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;AAChE,KAAA;AACF,GAAA;AAEA0J,EAAAA,gBAAgB,CACdh+B,SAAsB,EACtBi+B,MAAW,EACXt6B,KAA8B,EACxB;IACN,MAAM;AAAE3B,MAAAA,QAAAA;KAAU,GAAG,IAAI,CAAC2B,KAAK,CAAA;AAC/B,IAAA,IAAI,IAAI,CAAC+mB,YAAY,CAAA,GAAA,CAAa,EAAE;MAClC,IAAI,KAAK,CAACwT,4BAA4B,CAACl+B,SAAS,EAAEi+B,MAAM,CAAC,EAAE;AAEzD,QAAA,OAAA;AACF,OAAA;MAEAA,MAAM,CAAC7G,OAAO,GAAG,IAAI,CAAA;AACvB,KAAA;IAEA,KAAK,CAAC4G,gBAAgB,CAACh+B,SAAS,EAAEi+B,MAAM,EAAEt6B,KAAK,CAAC,CAAA;IAEhD,IAAIs6B,MAAM,CAAC7G,OAAO,EAAE;AAClB,MAAA,IACE6G,MAAM,CAACjvC,IAAI,KAAK,eAAe,IAC/BivC,MAAM,CAACjvC,IAAI,KAAK,sBAAsB,IACtCivC,MAAM,CAACjvC,IAAI,KAAK,oBAAoB,EACpC;AACA,QAAA,IAAI,CAAC6T,KAAK,CAAC6rB,UAAU,CAACK,mBAAmB,EAAE;AAAEjsB,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AAC9D,OAAC,MAAM,IAAIi8B,MAAM,CAAC9xC,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC0W,KAAK,CAAC6rB,UAAU,CAACM,4BAA4B,EAAE;UAClDlsB,EAAE,EAAEm7B,MAAM,CAAC9xC,KAAAA;AACb,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AACF,GAAA;EAEAgyC,UAAU,CAAClsB,IAAY,EAAW;AAChC,IAAA,OAAOA,IAAI,KAAK,UAAU,IAAIA,IAAI,KAAK,eAAe,CAAA;AACxD,GAAA;AAEAmsB,EAAAA,YAAY,GAAS;AACnB,IAAA,MAAMnsB,IAAI,GAAG,KAAK,CAAC2R,SAAS,EAAE,CAAA;AAC9B,IAAA,MAAMya,QAAQ,GAAG,IAAI,GAAGpsB,IAAI,CAAA;;AAG5B,IAAA,IAAI,CAAC,IAAI,CAACksB,UAAU,CAAClsB,IAAI,CAAC,IAAI,CAAC,IAAI,CAACtO,KAAK,CAACgY,MAAM,EAAE;AAChD,MAAA,IAAI,CAAC9Y,KAAK,CAACxG,MAAM,CAAChJ,iBAAiB,EAAE;AACnCyP,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAE;AAC5B9xB,QAAAA,cAAc,EAAEgzC,QAAAA;AAClB,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,IAAI,CAACxb,WAAW,CAAUwb,GAAAA,EAAAA,QAAQ,CAAC,CAAA;AACrC,GAAA;;EAGAvb,gBAAgB,CAACz1B,IAAY,EAAQ;AACnC,IAAA,MAAMqlB,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;AACtD,IAAA,IAAIpO,IAAI,KAAA,GAA6B,IAAIqlB,IAAI,QAA0B,EAAE;AACvE,MAAA,OAAO,IAAI,CAACmR,QAAQ,CAAA,CAAA,EAAe,CAAC,CAAC,CAAA;AACvC,KAAC,MAAM,IACL,IAAI,CAAClgB,KAAK,CAACgY,MAAM,KAChBtuB,IAAI,KAA0B,EAAA,IAAIA,IAAI,KAAA,EAAuB,CAAC,EAC/D;MACA,OAAO,IAAI,CAACw2B,QAAQ,CAACx2B,IAAI,KAA0B,EAAA,GAAA,EAAA,GAAA,EAAgB,EAAE,CAAC,CAAC,CAAA;KACxE,MAAM,IAAI,IAAI,CAACsW,KAAK,CAACgY,MAAM,IAAItuB,IAAI,KAAA,EAA2B,EAAE;MAC/D,IAAIqlB,IAAI,OAAkB,EAAE;AAC1B,QAAA,OAAO,IAAI,CAACmR,QAAQ,CAAA,EAAA,EAAiB,CAAC,CAAC,CAAA;AACzC,OAAA;AAEA,MAAA,OAAO,IAAI,CAACA,QAAQ,CAAA,EAAA,EAAc,CAAC,CAAC,CAAA;KACrC,MAAM,IACLrR,eAAe,CAACnlB,IAAI,EAAEqlB,IAAI,EAAE,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAC,EACtE;AACA,MAAA,IAAI,CAACkI,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;MACnB,OAAO,IAAI,CAAC2iC,YAAY,EAAE,CAAA;AAC5B,KAAC,MAAM;AACL,MAAA,OAAO,KAAK,CAACtb,gBAAgB,CAACz1B,IAAI,CAAC,CAAA;AACrC,KAAA;AACF,GAAA;AAEAgV,EAAAA,YAAY,CAACzF,IAAY,EAAE0F,SAAmB,EAAW;AACvD,IAAA,IAAI1F,IAAI,CAAC5N,IAAI,KAAK,oBAAoB,EAAE;MACtC,OAAO,IAAI,CAACqT,YAAY,CAACzF,IAAI,CAAC2B,UAAU,EAAE+D,SAAS,CAAC,CAAA;AACtD,KAAC,MAAM;AACL,MAAA,OAAO,KAAK,CAACD,YAAY,CAACzF,IAAI,EAAE0F,SAAS,CAAC,CAAA;AAC5C,KAAA;AACF,GAAA;AAEAC,EAAAA,YAAY,CAAC3F,IAAY,EAAE4F,KAAc,GAAG,KAAK,EAAQ;AACvD,IAAA,IACE,CAACA,KAAK,IACN5F,IAAI,CAAC5N,IAAI,KAAK,sBAAsB,IACpC4N,IAAI,CAAC0hC,IAAI,CAACtvC,IAAI,KAAK,oBAAoB,EACvC;MACA4N,IAAI,CAAC0hC,IAAI,GAAG,IAAI,CAAClD,mBAAmB,CAACx+B,IAAI,CAAC0hC,IAAI,CAAC,CAAA;AACjD,KAAA;AACA,IAAA,KAAK,CAAC/7B,YAAY,CAAC3F,IAAI,EAAE4F,KAAK,CAAC,CAAA;AACjC,GAAA;;AAGAs6B,EAAAA,gBAAgB,CACdyB,QAAwB,EACxBxB,gBAA6C,EAC7Cv6B,KAAc,EACR;AACN,IAAA,KAAK,IAAInW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkyC,QAAQ,CAAC1yC,MAAM,EAAEQ,CAAC,EAAE,EAAE;AACxC,MAAA,MAAMsvC,IAAI,GAAG4C,QAAQ,CAAClyC,CAAC,CAAC,CAAA;MACxB,IAAI,CAAAsvC,IAAI,IAAJA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAE3sC,IAAI,MAAK,oBAAoB,EAAE;QACvCuvC,QAAQ,CAAClyC,CAAC,CAAC,GAAG,IAAI,CAAC+uC,mBAAmB,CAACO,IAAI,CAAC,CAAA;AAC9C,OAAA;AACF,KAAA;IACA,KAAK,CAACmB,gBAAgB,CAACyB,QAAQ,EAAExB,gBAAgB,EAAEv6B,KAAK,CAAC,CAAA;AAC3D,GAAA;;AAIAg8B,EAAAA,gBAAgB,CACdD,QAAwD,EACxDE,mBAA6B,EACmB;AAChD,IAAA,KAAK,IAAIpyC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkyC,QAAQ,CAAC1yC,MAAM,EAAEQ,CAAC,EAAE,EAAE;AAAA,MAAA,IAAA,WAAA,CAAA;AACxC,MAAA,MAAMsvC,IAAI,GAAG4C,QAAQ,CAAClyC,CAAC,CAAC,CAAA;MACxB,IACEsvC,IAAI,IACJA,IAAI,CAAC3sC,IAAI,KAAK,oBAAoB,IAClC,EAAC2sC,CAAAA,WAAAA,GAAAA,IAAI,CAACl9B,KAAK,aAAV,WAAYY,CAAAA,aAAa,CACzBk/B,KAAAA,QAAQ,CAAC1yC,MAAM,GAAG,CAAC,IAAI,CAAC4yC,mBAAmB,CAAC,EAC7C;AACA,QAAA,IAAI,CAAC57B,KAAK,CAAC6rB,UAAU,CAAC2C,iBAAiB,EAAE;UACvCvuB,EAAE,EAAE64B,IAAI,CAAChH,cAAAA;AACX,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AAEA,IAAA,OAAO4J,QAAQ,CAAA;AACjB,GAAA;EAEAG,cAAc,CACZC,KAAgB,EAChBC,YAAqB,EACrBC,OAAgB,EAChB58B,mBAA6C,EACN;AACvC,IAAA,MAAMrF,IAAI,GAAG,KAAK,CAAC8hC,cAAc,CAC/BC,KAAK,EACLC,YAAY,EACZC,OAAO,EACP58B,mBAAmB,CACpB,CAAA;;IAOD,IAAI28B,YAAY,IAAI,CAAC,IAAI,CAACj7B,KAAK,CAAC+X,sBAAsB,EAAE;AACtD,MAAA,IAAI,CAAC8iB,gBAAgB,CAAC5hC,IAAI,CAACyc,QAAQ,CAAC,CAAA;AACtC,KAAA;AAEA,IAAA,OAAOzc,IAAI,CAAA;AACb,GAAA;AAEAsF,EAAAA,WAAW,CAAClT,IAAY,EAAE8vC,eAAwB,EAAE18B,OAAqB,EAAE;AACzE,IAAA,OACEpT,IAAI,KAAK,oBAAoB,IAC7B,KAAK,CAACkT,WAAW,CAAClT,IAAI,EAAE8vC,eAAe,EAAE18B,OAAO,CAAC,CAAA;AAErD,GAAA;;EAGAd,kBAAkB,CAAC1E,IAAqB,EAAmB;AACzD,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAU,EAAE;AAExBxiB,MAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAACkB,uBAAuB,EAAE,CAAA;AACtD,KAAA;AACA,IAAA,OAAO,KAAK,CAACv0B,kBAAkB,CAAC1E,IAAI,CAAC,CAAA;AACvC,GAAA;EAEA6E,yBAAyB,CACvB7E,IAA4B,EACJ;AACxB,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAU,EAAE;AAExBxiB,MAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAACkB,uBAAuB,EAAE,CAAA;AACtD,KAAA;AACA,IAAA,OAAO,KAAK,CAACp0B,yBAAyB,CAAC7E,IAAI,CAAC,CAAA;AAC9C,GAAA;;AAGAmiC,EAAAA,aAAa,GAAY;IACvB,OAAO,IAAI,CAAC3f,KAAK,CAAA,EAAA,CAAO,IAAI,KAAK,CAAC2f,aAAa,EAAE,CAAA;AACnD,GAAA;;AAGAC,EAAAA,eAAe,GAAY;IACzB,OAAO,IAAI,CAAC5f,KAAK,CAAA,EAAA,CAAU,IAAI,KAAK,CAAC4f,eAAe,EAAE,CAAA;AACxD,GAAA;EAEAC,sBAAsB,CAAC//B,MAAuC,EAAW;IACvE,OAAO,CAAC,IAAI,CAACkgB,KAAK,CAAA,EAAA,CAAU,IAAI,KAAK,CAAC6f,sBAAsB,CAAC//B,MAAM,CAAC,CAAA;AACtE,GAAA;;AAGAa,EAAAA,eAAe,CACbC,SAAsB,EACtBd,MAAqB,EACrBe,WAAoB,EACpBnB,OAAgB,EAChBoB,aAAsB,EACtBC,iBAA0B,EACpB;IACN,IAAKjB,MAAM,CAASw4B,QAAQ,EAAE;MAC5B,IAAI,CAAC9jC,UAAU,CAAEsL,MAAM,CAASw4B,QAAQ,CAACt8B,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACrD,KAAA;IACA,OAAQgU,MAAM,CAASw4B,QAAQ,CAAA;AAC/B,IAAA,IAAI,IAAI,CAACtY,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBlgB,MAAAA,MAAM,CAACmB,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;AAClE,KAAA;AAEA,IAAA,KAAK,CAACv0B,eAAe,CACnBC,SAAS,EACTd,MAAM,EACNe,WAAW,EACXnB,OAAO,EACPoB,aAAa,EACbC,iBAAiB,CAClB,CAAA;AAED,IAAA,IAAIjB,MAAM,CAACC,MAAM,IAAIe,aAAa,EAAE;AAClC,MAAA,MAAMf,MAAM,GAAGD,MAAM,CAACC,MAAM,CAAA;AAC5B,MAAA,IAAIA,MAAM,CAACtT,MAAM,GAAG,CAAC,IAAI,IAAI,CAACqzC,WAAW,CAAC//B,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACpD,QAAA,IAAI,CAAC0D,KAAK,CAAC6rB,UAAU,CAACsC,4BAA4B,EAAE;AAAEluB,UAAAA,EAAE,EAAE5D,MAAAA;AAAO,SAAC,CAAC,CAAA;AACrE,OAAA;AAEF,KAAC,MAAM;AAELA,IAAAA,MAAM,CAAClQ,IAAI,KAAK,kBAAkB,IAClCkR,aAAa;AAEbhB,IAAAA,MAAM,CAAC/S,KAAK,CAACgT,MAAM,EACnB;AAEA,MAAA,MAAMA,MAAM,GAAGD,MAAM,CAAC/S,KAAK,CAACgT,MAAM,CAAA;AAClC,MAAA,IAAIA,MAAM,CAACtT,MAAM,GAAG,CAAC,IAAI,IAAI,CAACqzC,WAAW,CAAC//B,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACpD,QAAA,IAAI,CAAC0D,KAAK,CAAC6rB,UAAU,CAACsC,4BAA4B,EAAE;AAAEluB,UAAAA,EAAE,EAAE5D,MAAAA;AAAO,SAAC,CAAC,CAAA;AACrE,OAAA;AACF,KAAA;AACF,GAAA;EAEAigC,sBAAsB,CACpBn/B,SAAsB,EACtBd,MAA4B,EAC5Be,WAAoB,EACpBnB,OAAgB,EACV;IACN,IAAKI,MAAM,CAASw4B,QAAQ,EAAE;MAC5B,IAAI,CAAC9jC,UAAU,CAAEsL,MAAM,CAASw4B,QAAQ,CAACt8B,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACrD,KAAA;IACA,OAAQgU,MAAM,CAASw4B,QAAQ,CAAA;AAC/B,IAAA,IAAI,IAAI,CAACtY,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBlgB,MAAAA,MAAM,CAACmB,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;AAClE,KAAA;IAEA,KAAK,CAAC6K,sBAAsB,CAACn/B,SAAS,EAAEd,MAAM,EAAEe,WAAW,EAAEnB,OAAO,CAAC,CAAA;AACvE,GAAA;;EAGAsgC,eAAe,CAACxiC,IAAa,EAAQ;AACnC,IAAA,KAAK,CAACwiC,eAAe,CAACxiC,IAAI,CAAC,CAAA;IAC3B,IAAIA,IAAI,CAACC,UAAU,IAAI,IAAI,CAACuiB,KAAK,IAAO,EAAE;AACxCxiB,MAAAA,IAAI,CAACyiC,mBAAmB,GAAG,IAAI,CAACvI,mCAAmC,EAAE,CAAA;AACvE,KAAA;AACA,IAAA,IAAI,IAAI,CAACpM,YAAY,CAAA,GAAA,CAAgB,EAAE;MACrC,IAAI,CAAChY,IAAI,EAAE,CAAA;AACX,MAAA,MAAM4sB,WAAoC,GAAI1iC,IAAI,CAACw5B,UAAU,GAAG,EAAG,CAAA;MACnE,GAAG;AACD,QAAA,MAAMx5B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;QAC7BvE,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACu1B,6BAA6B,CAAa,IAAI,CAAC,CAAA;AAC9D,QAAA,IAAI,IAAI,CAAC9W,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,UAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACy2B,mCAAmC,EAAE,CAAA;AAClE,SAAC,MAAM;UACLl6B,IAAI,CAACyD,cAAc,GAAG,IAAI,CAAA;AAC5B,SAAA;QACAi/B,WAAW,CAACh/B,IAAI,CAAC,IAAI,CAACe,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAA;AAC5D,OAAC,QAAQ,IAAI,CAAC+kB,GAAG,CAAU,EAAA,CAAA,EAAA;AAC7B,KAAA;AACF,GAAA;EAEA4d,uBAAuB,CAACrgC,MAAsC,EAAQ;AACpE,IAAA,KAAK,CAACqgC,uBAAuB,CAACrgC,MAAM,CAAC,CAAA;AACrC,IAAA,MAAMC,MAAM,GAAG,IAAI,CAACF,4BAA4B,CAACC,MAAM,CAAC,CAAA;AACxD,IAAA,IAAIC,MAAM,CAACtT,MAAM,GAAG,CAAC,EAAE;AACrB,MAAA,MAAMmvC,KAAK,GAAG77B,MAAM,CAAC,CAAC,CAAC,CAAA;AACvB,MAAA,IAAI,IAAI,CAAC+/B,WAAW,CAAClE,KAAK,CAAC,IAAI97B,MAAM,CAAC9P,IAAI,KAAK,KAAK,EAAE;AACpD,QAAA,IAAI,CAACyT,KAAK,CAAC6rB,UAAU,CAACwB,yBAAyB,EAAE;AAAEptB,UAAAA,EAAE,EAAEk4B,KAAAA;AAAM,SAAC,CAAC,CAAA;OAChE,MAAM,IAAI,IAAI,CAACkE,WAAW,CAAClE,KAAK,CAAC,EAAE;AAClC,QAAA,IAAI,CAACn4B,KAAK,CAAC6rB,UAAU,CAACmC,yBAAyB,EAAE;AAAE/tB,UAAAA,EAAE,EAAEk4B,KAAAA;AAAM,SAAC,CAAC,CAAA;AACjE,OAAA;AACF,KAAA;AACF,GAAA;EAEAwE,+BAA+B,CAC7B5iC,IAA2C,EACrC;AACNA,IAAAA,IAAI,CAAC86B,QAAQ,GAAG,IAAI,CAACC,iBAAiB,EAAE,CAAA;AAC1C,GAAA;;AAGA8H,EAAAA,iBAAiB,CACf99B,IAA+C,EAC/CK,QAAqC,EACrC/B,WAAoB,EACpBnB,OAAgB,EAChB8C,SAAkB,EAClBC,UAAmB,EACnBI,mBAA6C,EACV;IACnC,IAAKN,IAAI,CAAS+1B,QAAQ,EAAE;MAC1B,IAAI,CAAC9jC,UAAU,CAAE+N,IAAI,CAAS+1B,QAAQ,CAACt8B,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACnD,KAAA;IACA,OAAQyW,IAAI,CAAS+1B,QAAQ,CAAA;AAE7B,IAAA,IAAIr3B,cAAc,CAAA;;AAGlB,IAAA,IAAI,IAAI,CAAC+e,KAAK,IAAO,IAAI,CAACvd,UAAU,EAAE;AACpCxB,MAAAA,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;MACzD,IAAI,CAAC,IAAI,CAAClV,KAAK,IAAW,EAAE,IAAI,CAACxrB,UAAU,EAAE,CAAA;AAC/C,KAAA;AAEA,IAAA,MAAMqpC,MAAM,GAAG,KAAK,CAACwC,iBAAiB,CACpC99B,IAAI,EACJK,QAAQ,EACR/B,WAAW,EACXnB,OAAO,EACP8C,SAAS,EACTC,UAAU,EACVI,mBAAmB,CACpB,CAAA;;AAGD,IAAA,IAAI5B,cAAc,EAAE;MAClB,CAAC48B,MAAM,CAAC9wC,KAAK,IAAI8wC,MAAM,EAAE58B,cAAc,GAAGA,cAAc,CAAA;AAC1D,KAAA;AACA,IAAA,OAAO48B,MAAM,CAAA;AACf,GAAA;EAEAyC,4BAA4B,CAAC1E,KAAgB,EAAa;AACxD,IAAA,IAAI,IAAI,CAACrZ,GAAG,CAAA,EAAA,CAAa,EAAE;AACzB,MAAA,IAAIqZ,KAAK,CAAChsC,IAAI,KAAK,YAAY,EAAE;AAC/B,QAAA,IAAI,CAAC6T,KAAK,CAAC6rB,UAAU,CAACkC,iBAAiB,EAAE;AAAE9tB,UAAAA,EAAE,EAAEk4B,KAAAA;AAAM,SAAC,CAAC,CAAA;AACzD,OAAA;AACA,MAAA,IAAI,IAAI,CAACkE,WAAW,CAAClE,KAAK,CAAC,EAAE;AAC3B,QAAA,IAAI,CAACn4B,KAAK,CAAC6rB,UAAU,CAACuC,yBAAyB,EAAE;AAAEnuB,UAAAA,EAAE,EAAEk4B,KAAAA;AAAM,SAAC,CAAC,CAAA;AACjE,OAAA;MAECA,KAAK,CAAyB/3B,QAAQ,GAAG,IAAI,CAAA;AAChD,KAAA;AACA,IAAA,IAAI,IAAI,CAACmc,KAAK,CAAA,EAAA,CAAU,EAAE;AAExB4b,MAAAA,KAAK,CAACrG,cAAc,GAAG,IAAI,CAACkB,uBAAuB,EAAE,CAAA;KACtD,MAAM,IAAI,IAAI,CAACqJ,WAAW,CAAClE,KAAK,CAAC,EAAE;AAClC,MAAA,IAAI,CAACn4B,KAAK,CAAC6rB,UAAU,CAACqC,2BAA2B,EAAE;AAAEjuB,QAAAA,EAAE,EAAEk4B,KAAAA;AAAM,OAAC,CAAC,CAAA;AACnE,KAAA;IAEA,IAAI,IAAI,CAAC5b,KAAK,CAAO,EAAA,CAAA,IAAI,IAAI,CAAC8f,WAAW,CAAClE,KAAK,CAAC,EAAE;AAChD,MAAA,IAAI,CAACn4B,KAAK,CAAC6rB,UAAU,CAACyC,kBAAkB,EAAE;AAAEruB,QAAAA,EAAE,EAAEk4B,KAAAA;AAAM,OAAC,CAAC,CAAA;AAC1D,KAAA;AAEA,IAAA,IAAI,CAACl2B,gBAAgB,CAACk2B,KAAK,CAAC,CAAA;AAC5B,IAAA,OAAOA,KAAK,CAAA;AACd,GAAA;AAEA2E,EAAAA,iBAAiB,CACf39B,QAA0B,EAC1Bs8B,IAAuB,EACZ;IACX,MAAM1hC,IAAI,GAAG,KAAK,CAAC+iC,iBAAiB,CAAC39B,QAAQ,EAAEs8B,IAAI,CAAC,CAAA;IAEpD,IACE1hC,IAAI,CAAC5N,IAAI,KAAK,mBAAmB,IACjC4N,IAAI,CAAC+3B,cAAc,IACnB/3B,IAAI,CAACu6B,KAAK,CAACjsC,KAAK,GAAG0R,IAAI,CAAC+3B,cAAc,CAACzpC,KAAK,EAC5C;AACA,MAAA,IAAI,CAAC2X,KAAK,CAAC6rB,UAAU,CAAC0C,qBAAqB,EAAE;QAC3CtuB,EAAE,EAAElG,IAAI,CAAC+3B,cAAAA;AACX,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAO/3B,IAAI,CAAA;AACb,GAAA;EAEAgjC,wBAAwB,CAAChjC,IAAyB,EAAW;AAC3D,IAAA,IAAI,CAACw1B,iBAAiB,CAACx1B,IAAI,CAAC,EAAE;AAC5B,MAAA,OAAO,KAAK,CAACgjC,wBAAwB,CAAChjC,IAAI,CAAC,CAAA;AAC7C,KAAA;AAEA,IAAA,OAAO01B,oBAAoB,CAAC,IAAI,CAAC3uB,KAAK,CAAC3U,IAAI,CAAC,CAAA;AAC9C,GAAA;EAEA6wC,qBAAqB,CAACjjC,IAAiC,EAAE;AACvD,IAAA,KAAK,CAACijC,qBAAqB,CAACjjC,IAAI,CAAC,CAAA;IACjC,IAAIA,IAAI,CAACkjC,MAAM,IAAIljC,IAAI,CAACy1B,UAAU,KAAK,OAAO,EAAE;AAC9C,MAAA,IAAI,CAACxvB,KAAK,CAAC6rB,UAAU,CAACyB,6BAA6B,EAAE;QACnDrtB,EAAE,EAAElG,IAAI,CAACkH,UAAU,CAAC,CAAC,CAAC,CAAC1I,GAAG,CAAClQ,KAAAA;AAC7B,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AAEA60C,EAAAA,yBAAyB,CAKvBnjC,IAAyB,EAAEojC,SAAoB,EAAEhxC,IAAe,EAAQ;IACxEgxC,SAAS,CAACC,KAAK,GAAG7N,iBAAiB,CAACx1B,IAAI,CAAC,GACrC,IAAI,CAACs5B,6BAA6B,CAClB,IAAI,EACA,IAAI,CACvB,GACD,IAAI,CAAC/B,eAAe,EAAE,CAAA;AAE1Bv3B,IAAAA,IAAI,CAACkH,UAAU,CAACxD,IAAI,CAAC,IAAI,CAAC4/B,qBAAqB,CAACF,SAAS,EAAEhxC,IAAI,CAAC,CAAC,CAAA;AACnE,GAAA;;EAGAmxC,gCAAgC,CAACvjC,IAAyB,EAAW;IACnEA,IAAI,CAACy1B,UAAU,GAAG,OAAO,CAAA;IAEzB,IAAIjjC,IAAI,GAAG,IAAI,CAAA;AACf,IAAA,IAAI,IAAI,CAACgwB,KAAK,CAAA,EAAA,CAAY,EAAE;AAC1BhwB,MAAAA,IAAI,GAAG,QAAiB,CAAA;AAC1B,KAAC,MAAM,IAAI,IAAI,CAACs7B,YAAY,KAAU,EAAE;AACtCt7B,MAAAA,IAAI,GAAG,MAAe,CAAA;AACxB,KAAA;AACA,IAAA,IAAIA,IAAI,EAAE;AACR,MAAA,MAAM+qC,EAAE,GAAG,IAAI,CAACrY,SAAS,EAAE,CAAA;MAC3B,MAAM;AAAE9yB,QAAAA,IAAAA;AAAK,OAAC,GAAGmrC,EAAE,CAAA;;AAGnB,MAAA,IAAI/qC,IAAI,KAAK,MAAM,IAAIJ,IAAI,OAAY,EAAE;QAEvC,IAAI,CAAC4E,UAAU,CAAC,IAAI,EAAEumC,EAAE,CAACnrC,IAAI,CAAC,CAAA;AAChC,OAAA;MAEA,IACEsjC,oBAAoB,CAACtjC,IAAI,CAAC,IAC1BA,IAAI,KAAc,CAAA,IAClBA,IAAI,KAAA,EAAY,EAChB;QACA,IAAI,CAAC0jB,IAAI,EAAE,CAAA;QACX9V,IAAI,CAACy1B,UAAU,GAAGjjC,IAAI,CAAA;AACxB,OAAA;AACF,KAAA;AAEA,IAAA,OAAO,KAAK,CAAC+wC,gCAAgC,CAACvjC,IAAI,CAAC,CAAA;AACrD,GAAA;;AAGAwjC,EAAAA,oBAAoB,CAClBJ,SAAc,EACdK,gBAAyB,EACzBC,kBAA2B;EAE3BC,eAAwB;AAExBjpB,EAAAA,WAAqC,EAClB;AACnB,IAAA,MAAMkpB,UAAU,GAAGR,SAAS,CAACS,QAAQ,CAAA;IAErC,IAAIC,iBAAiB,GAAG,IAAI,CAAA;AAC5B,IAAA,IAAIF,UAAU,CAACxxC,IAAI,KAAK,YAAY,EAAE;AACpC,MAAA,IAAIwxC,UAAU,CAAC5rC,IAAI,KAAK,MAAM,EAAE;AAC9B8rC,QAAAA,iBAAiB,GAAG,MAAM,CAAA;AAC5B,OAAC,MAAM,IAAIF,UAAU,CAAC5rC,IAAI,KAAK,QAAQ,EAAE;AACvC8rC,QAAAA,iBAAiB,GAAG,QAAQ,CAAA;AAC9B,OAAA;AACF,KAAA;IAEA,IAAIp+B,SAAS,GAAG,KAAK,CAAA;AACrB,IAAA,IAAI,IAAI,CAACooB,YAAY,CAAA,EAAA,CAAQ,IAAI,CAAC,IAAI,CAACK,qBAAqB,CAAC,IAAI,CAAC,EAAE;AAClE,MAAA,MAAM4V,QAAQ,GAAG,IAAI,CAACxM,eAAe,CAAC,IAAI,CAAC,CAAA;AAC3C,MAAA,IACEuM,iBAAiB,KAAK,IAAI,IAC1B,CAAC/wB,0BAA0B,CAAC,IAAI,CAAChM,KAAK,CAAC3U,IAAI,CAAC,EAC5C;QAEAgxC,SAAS,CAACS,QAAQ,GAAGE,QAAQ,CAAA;QAC7BX,SAAS,CAAC3N,UAAU,GAAGqO,iBAAiB,CAAA;AACxCV,QAAAA,SAAS,CAACC,KAAK,GAAGjS,eAAe,CAAC2S,QAAQ,CAAC,CAAA;AAC7C,OAAC,MAAM;QAELX,SAAS,CAACS,QAAQ,GAAGD,UAAU,CAAA;QAC/BR,SAAS,CAAC3N,UAAU,GAAG,IAAI,CAAA;AAC3B2N,QAAAA,SAAS,CAACC,KAAK,GAAG,IAAI,CAAC9L,eAAe,EAAE,CAAA;AAC1C,OAAA;AACF,KAAC,MAAM;AACL,MAAA,IACEuM,iBAAiB,KAAK,IAAI,IAC1B/wB,0BAA0B,CAAC,IAAI,CAAChM,KAAK,CAAC3U,IAAI,CAAC,EAC3C;QAEAgxC,SAAS,CAACS,QAAQ,GAAG,IAAI,CAACtM,eAAe,CAAC,IAAI,CAAC,CAAA;QAC/C6L,SAAS,CAAC3N,UAAU,GAAGqO,iBAAiB,CAAA;AAC1C,OAAC,MAAM;AACL,QAAA,IAAIL,gBAAgB,EAAE;AAEpB,UAAA,MAAM,IAAI,CAACx9B,KAAK,CAACxG,MAAM,CAACrK,qBAAqB,EAAE;AAC7C8Q,YAAAA,EAAE,EAAEk9B,SAAS;YACb/tC,UAAU,EAAEuuC,UAAU,CAACr0C,KAAAA;AACzB,WAAC,CAAC,CAAA;AACJ,SAAA;QAEA6zC,SAAS,CAACS,QAAQ,GAAGD,UAAU,CAAA;QAC/BR,SAAS,CAAC3N,UAAU,GAAG,IAAI,CAAA;AAC7B,OAAA;AAEA,MAAA,IAAI,IAAI,CAACrH,aAAa,CAAA,EAAA,CAAQ,EAAE;AAC9BgV,QAAAA,SAAS,CAACC,KAAK,GAAG,IAAI,CAAC9L,eAAe,EAAE,CAAA;AAC1C,OAAC,MAAM;AACL7xB,QAAAA,SAAS,GAAG,IAAI,CAAA;QAChB09B,SAAS,CAACC,KAAK,GAAGjS,eAAe,CAACgS,SAAS,CAACS,QAAQ,CAAC,CAAA;AACvD,OAAA;AACF,KAAA;AAEA,IAAA,MAAMG,qBAAqB,GAAGxO,iBAAiB,CAAC4N,SAAS,CAAC,CAAA;IAE1D,IAAIM,kBAAkB,IAAIM,qBAAqB,EAAE;AAC/C,MAAA,IAAI,CAAC/9B,KAAK,CAAC6rB,UAAU,CAAC0B,mCAAmC,EAAE;AACzDttB,QAAAA,EAAE,EAAEk9B,SAAAA;AACN,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,IAAIM,kBAAkB,IAAIM,qBAAqB,EAAE;AAC/C,MAAA,IAAI,CAAC3J,iBAAiB,CACpB+I,SAAS,CAACC,KAAK,CAACrrC,IAAI,EACpBorC,SAAS,CAACC,KAAK,CAAC7kC,GAAG,CAAClQ,KAAK,EACP,IAAI,CACvB,CAAA;AACH,KAAA;AAEA,IAAA,IAAIoX,SAAS,IAAI,CAACg+B,kBAAkB,IAAI,CAACM,qBAAqB,EAAE;AAC9D,MAAA,IAAI,CAACC,iBAAiB,CACpBb,SAAS,CAACC,KAAK,CAACrrC,IAAI,EACpBorC,SAAS,CAAC5kC,GAAG,CAAClQ,KAAK,EACnB,IAAI,EACJ,IAAI,CACL,CAAA;AACH,KAAA;AAEA,IAAA,OAAO,IAAI,CAACg1C,qBAAqB,CAACF,SAAS,EAAE,iBAAiB,CAAC,CAAA;AACjE,GAAA;AAEAc,EAAAA,gBAAgB,GAAc;AAC5B,IAAA,QAAQ,IAAI,CAACn9B,KAAK,CAAC3U,IAAI;AACrB,MAAA,KAAA,EAAA;AAEE,QAAA,OAAO,IAAI,CAACmlC,eAAe,CAAe,IAAI,CAAC,CAAA;AACjD,MAAA;QACE,OAAO,KAAK,CAAC2M,gBAAgB,EAAE,CAAA;AAAC,KAAA;AAEtC,GAAA;;AAGAC,EAAAA,mBAAmB,CACjBnkC,IAAwB,EACxBokC,cAAwB,EAClB;AAEN,IAAA,MAAM5xC,IAAI,GAAGwN,IAAI,CAACxN,IAAI,CAAA;AACtB,IAAA,IAAIA,IAAI,KAAK,KAAK,IAAIA,IAAI,KAAK,KAAK,IAAI,IAAI,CAACgwB,KAAK,CAAA,EAAA,CAAO,EAAE;AACzDxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;AAChE,KAAA;AACA,IAAA,KAAK,CAACyM,mBAAmB,CAACnkC,IAAI,EAAEokC,cAAc,CAAC,CAAA;AACjD,GAAA;;AAGAC,EAAAA,UAAU,CACR5D,IAA0B,EAC1BjuC,IAA6B,EACvB;AACN,IAAA,KAAK,CAAC6xC,UAAU,CAAC5D,IAAI,EAAEjuC,IAAI,CAAC,CAAA;AAC5B,IAAA,IAAI,IAAI,CAACgwB,KAAK,CAAA,EAAA,CAAU,EAAE;MAExBie,IAAI,CAAC18B,EAAE,CAACg0B,cAAc,GAAG,IAAI,CAACkB,uBAAuB,EAAE,CAAA;AACvD,MAAA,IAAI,CAAC/wB,gBAAgB,CAACu4B,IAAI,CAAC18B,EAAE,CAAC,CAAA;AAChC,KAAA;AACF,GAAA;;AAGAugC,EAAAA,iCAAiC,CAC/BtkC,IAA+B,EAC/BukC,IAAsB,EACK;AAC3B,IAAA,IAAI,IAAI,CAAC/hB,KAAK,CAAA,EAAA,CAAU,EAAE;AACxB,MAAA,MAAM4Y,qBAAqB,GAAG,IAAI,CAACr0B,KAAK,CAACiY,kBAAkB,CAAA;AAC3D,MAAA,IAAI,CAACjY,KAAK,CAACiY,kBAAkB,GAAG,IAAI,CAAA;AAEpChf,MAAAA,IAAI,CAAC83B,UAAU,GAAG,IAAI,CAACmB,uBAAuB,EAAE,CAAA;AAChD,MAAA,IAAI,CAAClyB,KAAK,CAACiY,kBAAkB,GAAGoc,qBAAqB,CAAA;AACvD,KAAA;AAEA,IAAA,OAAO,KAAK,CAACkJ,iCAAiC,CAACtkC,IAAI,EAAEukC,IAAI,CAAC,CAAA;AAC5D,GAAA;;AAGAC,EAAAA,qBAAqB,GAAY;IAC/B,OAAO,IAAI,CAAChiB,KAAK,CAAA,EAAA,CAAU,IAAI,KAAK,CAACgiB,qBAAqB,EAAE,CAAA;AAC9D,GAAA;;AAYA5E,EAAAA,gBAAgB,CACdv6B,mBAA6C,EAC7Co/B,cAAyB,EACX;AAAA,IAAA,IAAA,IAAA,CAAA;IACd,IAAI19B,KAAK,GAAG,IAAI,CAAA;AAEhB,IAAA,IAAI29B,GAAG,CAAA;AAEP,IAAA,IACE,IAAI,CAACj+B,SAAS,CAAC,KAAK,CAAC,KACpB,IAAI,CAAC+b,KAAK,KAAgB,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAO,CAAC,EACjD;AACAzb,MAAAA,KAAK,GAAG,IAAI,CAACA,KAAK,CAACpI,KAAK,EAAE,CAAA;AAE1B+lC,MAAAA,GAAG,GAAG,IAAI,CAAC7V,QAAQ,CACjB,MAAM,KAAK,CAAC+Q,gBAAgB,CAACv6B,mBAAmB,EAAEo/B,cAAc,CAAC,EACjE19B,KAAK,CACN,CAAA;;MAID,IAAI,CAAC29B,GAAG,CAACxa,KAAK,EAAE,OAAOwa,GAAG,CAAC1kC,IAAI,CAAA;;MAK/B,MAAM;AAAEiU,QAAAA,OAAAA;OAAS,GAAG,IAAI,CAAClN,KAAK,CAAA;MAC9B,MAAM49B,cAAc,GAAG1wB,OAAO,CAACA,OAAO,CAAChlB,MAAM,GAAG,CAAC,CAAC,CAAA;MAClD,IAAI01C,cAAc,KAAKxwB,KAAE,CAAC3L,MAAM,IAAIm8B,cAAc,KAAKxwB,KAAE,CAACzL,MAAM,EAAE;QAChEuL,OAAO,CAACC,GAAG,EAAE,CAAA;AACf,OAAA;AACF,KAAA;IAEA,IAAI,CAAA,IAAA,GAAAwwB,GAAG,KAAA,IAAA,IAAH,IAAKxa,CAAAA,KAAK,IAAI,IAAI,CAAC1H,KAAK,CAAA,EAAA,CAAO,EAAE;AAAA,MAAA,IAAA,KAAA,EAAA,KAAA,CAAA;MACnCzb,KAAK,GAAGA,KAAK,IAAI,IAAI,CAACA,KAAK,CAACpI,KAAK,EAAE,CAAA;AAEnC,MAAA,IAAI8E,cAA0C,CAAA;AAE9C,MAAA,MAAM8H,KAAK,GAAG,IAAI,CAACsjB,QAAQ,CAAC+V,KAAK,IAAI;AAAA,QAAA,IAAA,qBAAA,CAAA;AACnCnhC,QAAAA,cAAc,GAAG,IAAI,CAACi0B,iCAAiC,EAAE,CAAA;QAEzD,MAAMmN,eAAe,GAAG,IAAI,CAACnG,gCAAgC,CAC3Dj7B,cAAc,EACd,MAAM;UACJ,MAAM48B,MAAM,GAAG,KAAK,CAACT,gBAAgB,CACnCv6B,mBAAmB,EACnBo/B,cAAc,CACf,CAAA;AAED,UAAA,IAAI,CAAC9S,0BAA0B,CAAC0O,MAAM,EAAE58B,cAAc,CAAC,CAAA;AAEvD,UAAA,OAAO48B,MAAM,CAAA;AACf,SAAC,CACF,CAAA;;QAID,IAAIwE,CAAAA,qBAAAA,GAAAA,eAAe,CAAChjC,KAAK,KAAA,IAAA,IAArB,sBAAuBY,aAAa,EAAEmiC,KAAK,EAAE,CAAA;;AAKjD,QAAA,MAAM7F,IAAI,GAAG,IAAI,CAAC+F,6BAA6B,CAACD,eAAe,CAAC,CAAA;AAEhE,QAAA,IAAI9F,IAAI,CAAC3sC,IAAI,KAAK,yBAAyB,EAAEwyC,KAAK,EAAE,CAAA;QAEpD7F,IAAI,CAACt7B,cAAc,GAAGA,cAAc,CAAA;AACpC,QAAA,IAAI,CAACkuB,0BAA0B,CAACoN,IAAI,EAAEt7B,cAAc,CAAC,CAAA;AAErD,QAAA,OAAOohC,eAAe,CAAA;OACvB,EAAE99B,KAAK,CAAC,CAAA;MAET,IAAI89B,eAII,GAAG,IAAI,CAAA;MAEf,IACEt5B,KAAK,CAACvL,IAAI;MAEV,IAAI,CAAC8kC,6BAA6B,CAACv5B,KAAK,CAACvL,IAAI,CAAC,CAAC5N,IAAI,KACjD,yBAAyB,EAC3B;QACA,IAAI,CAACmZ,KAAK,CAAC2e,KAAK,IAAI,CAAC3e,KAAK,CAAC4jB,OAAO,EAAE;AAGlC,UAAA,IAAI5jB,KAAK,CAACvL,IAAI,CAAC+kC,KAAK,EAAE;AAEpB,YAAA,IAAI,CAAC9+B,KAAK,CACR6rB,UAAU,CAACmD,+CAA+C,EAC1D;AAAE/uB,cAAAA,EAAE,EAAEzC,cAAAA;AAAe,aAAC,CACvB,CAAA;AACH,WAAA;UAEA,OAAO8H,KAAK,CAACvL,IAAI,CAAA;AACnB,SAAA;;QAGA6kC,eAAe,GAAGt5B,KAAK,CAACvL,IAAI,CAAA;AAC9B,OAAA;;AAQA,MAAA,IAAA,CAAA,KAAA,GAAI0kC,GAAG,KAAA,IAAA,IAAH,KAAK1kC,CAAAA,IAAI,EAAE;AAEb,QAAA,IAAI,CAAC+G,KAAK,GAAG29B,GAAG,CAACzV,SAAS,CAAA;QAC1B,OAAOyV,GAAG,CAAC1kC,IAAI,CAAA;AACjB,OAAA;AAEA,MAAA,IAAI6kC,eAAe,EAAE;AAEnB,QAAA,IAAI,CAAC99B,KAAK,GAAGwE,KAAK,CAAC0jB,SAAS,CAAA;AAC5B,QAAA,OAAO4V,eAAe,CAAA;AACxB,OAAA;MAEA,IAAIH,CAAAA,KAAAA,GAAAA,GAAG,aAAH,KAAKxV,CAAAA,MAAM,EAAE,MAAMwV,GAAG,CAACxa,KAAK,CAAA;AAChC,MAAA,IAAI3e,KAAK,CAAC2jB,MAAM,EAAE,MAAM3jB,KAAK,CAAC2e,KAAK,CAAA;;AAGnC,MAAA,MAAM,IAAI,CAACjkB,KAAK,CAAC6rB,UAAU,CAACkD,iCAAiC,EAAE;AAC7D9uB,QAAAA,EAAE,EAAEzC,cAAAA;AACN,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAO,KAAK,CAACm8B,gBAAgB,CAACv6B,mBAAmB,EAAEo/B,cAAc,CAAC,CAAA;AACpE,GAAA;;EAGAO,UAAU,CACRhlC,IAAuC,EACe;AACtD,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAU,EAAE;AAExB,MAAA,MAAM6d,MAAM,GAAG,IAAI,CAACxR,QAAQ,CAAC,MAAM;AACjC,QAAA,MAAMuM,qBAAqB,GAAG,IAAI,CAACr0B,KAAK,CAACiY,kBAAkB,CAAA;AAC3D,QAAA,IAAI,CAACjY,KAAK,CAACiY,kBAAkB,GAAG,IAAI,CAAA;AAEpC,QAAA,MAAMwY,QAAQ,GAAG,IAAI,CAACjzB,SAAS,EAAoB,CAAA;QAEnD,CACEizB,QAAQ,CAACO,cAAc;AAEvB/3B,QAAAA,IAAI,CAACm3B,SAAS,CACf,GAAG,IAAI,CAACD,oCAAoC,EAAE,CAAA;AAE/C,QAAA,IAAI,CAACnwB,KAAK,CAACiY,kBAAkB,GAAGoc,qBAAqB,CAAA;QAErD,IAAI,IAAI,CAAC9M,kBAAkB,EAAE,EAAE,IAAI,CAACt3B,UAAU,EAAE,CAAA;QAChD,IAAI,CAAC,IAAI,CAACwrB,KAAK,IAAU,EAAE,IAAI,CAACxrB,UAAU,EAAE,CAAA;AAE5C,QAAA,OAAOwgC,QAAQ,CAAA;AACjB,OAAC,CAAC,CAAA;AAEF,MAAA,IAAI6I,MAAM,CAACnR,MAAM,EAAE,OAAO,IAAI,CAAA;;MAG9B,IAAImR,MAAM,CAACnW,KAAK,EAAE,IAAI,CAACnjB,KAAK,GAAGs5B,MAAM,CAACpR,SAAS,CAAA;;MAI/CjvB,IAAI,CAAC83B,UAAU,GAAGuI,MAAM,CAACrgC,IAAI,CAAC+3B,cAAc,GACxC,IAAI,CAACtzB,UAAU,CAAC47B,MAAM,CAACrgC,IAAI,EAAE,gBAAgB,CAAC,GAC9C,IAAI,CAAA;AACV,KAAA;AAEA,IAAA,OAAO,KAAK,CAACglC,UAAU,CAAChlC,IAAI,CAAC,CAAA;AAC/B,GAAA;EAEAilC,gBAAgB,CAAC1iC,MAAqB,EAAW;IAC/C,OAAO,IAAI,CAACigB,KAAK,CAAU,EAAA,CAAA,IAAI,KAAK,CAACyiB,gBAAgB,CAAC1iC,MAAM,CAAC,CAAA;AAC/D,GAAA;AAEA2iC,EAAAA,0BAA0B,CACxBllC,IAA+B,EAC/BuC,MAAmB,EACb;AACN,IAAA,IAAI,IAAI,CAACwE,KAAK,CAAC8X,yBAAyB,CAACiF,OAAO,CAAC9jB,IAAI,CAAC1R,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;MACnE0R,IAAI,CAACuC,MAAM,GAAGA,MAAM,CAAA;AACtB,KAAC,MAAM;AACL,MAAA,KAAK,CAAC2iC,0BAA0B,CAACllC,IAAI,EAAEuC,MAAM,CAAC,CAAA;AAChD,KAAA;AACF,GAAA;EAEA69B,WAAW,CACTpgC,IAAgB,EAChBmlC,eAAwB,EACxBC,eAAgC,EAChCC,iBAA0B,GAAG,IAAI,EAC3B;AACN,IAAA,IACED,eAAe,IACf,IAAI,CAACr+B,KAAK,CAAC8X,yBAAyB,CAACiF,OAAO,CAAC9jB,IAAI,CAAC1R,KAAK,CAAC,KAAK,CAAC,CAAC,EAC/D;AACA,MAAA,OAAA;AACF,KAAA;;AAGA,IAAA,KAAK,IAAImB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuQ,IAAI,CAACuC,MAAM,CAACtT,MAAM,EAAEQ,CAAC,EAAE,EAAE;AAC3C,MAAA,IAAI,IAAI,CAAC6yC,WAAW,CAACtiC,IAAI,CAACuC,MAAM,CAAC9S,CAAC,CAAC,CAAC,IAAIA,CAAC,GAAG,CAAC,EAAE;AAC7C,QAAA,IAAI,CAACwW,KAAK,CAAC6rB,UAAU,CAACwC,oBAAoB,EAAE;AAAEpuB,UAAAA,EAAE,EAAElG,IAAI,CAACuC,MAAM,CAAC9S,CAAC,CAAA;AAAE,SAAC,CAAC,CAAA;AACrE,OAAA;AACF,KAAA;IAEA,OAAO,KAAK,CAAC2wC,WAAW,CACtBpgC,IAAI,EACJmlC,eAAe,EACfC,eAAe,EACfC,iBAAiB,CAClB,CAAA;AACH,GAAA;EAEAC,kCAAkC,CAACC,UAAmB,EAAgB;IACpE,OAAO,KAAK,CAACD,kCAAkC,CAC7CC,UAAU,IAAI,IAAI,CAACx+B,KAAK,CAAC6X,SAAS,CAACkF,OAAO,CAAC,IAAI,CAAC/c,KAAK,CAACzY,KAAK,CAAC,KAAK,CAAC,CAAC,CACpE,CAAA;AACH,GAAA;AAEAk3C,EAAAA,eAAe,CACbl+B,IAAkB,EAElBlC,QAAkB,EAClBmC,OAAwB,EACV;IACd,IACED,IAAI,CAAClV,IAAI,KAAK,YAAY,IAC1BkV,IAAI,CAACtP,IAAI,KAAK,OAAO,IACrB,IAAI,CAAC+O,KAAK,CAAC6X,SAAS,CAACkF,OAAO,CAAC1e,QAAQ,CAACjX,KAAK,CAAC,KAAK,CAAC,CAAC,EACnD;MACA,IAAI,CAAC2nB,IAAI,EAAE,CAAA;AAEX,MAAA,MAAM9V,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;MACvCpF,IAAI,CAACsG,MAAM,GAAGgB,IAAI,CAAA;MAClBtH,IAAI,CAACwG,SAAS,GAAG,KAAK,CAACi/B,4BAA4B,CAAA,EAAA,EAAY,KAAK,CAAC,CAAA;MACrEn+B,IAAI,GAAG,IAAI,CAAC7C,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,KAAC,MAAM,IACLsH,IAAI,CAAClV,IAAI,KAAK,YAAY,IAC1BkV,IAAI,CAACtP,IAAI,KAAK,OAAO,IACrB,IAAI,CAACwqB,KAAK,IAAO,EACjB;AACA,MAAA,MAAMzb,KAAK,GAAG,IAAI,CAACA,KAAK,CAACpI,KAAK,EAAE,CAAA;AAChC,MAAA,MAAM4M,KAAK,GAAG,IAAI,CAACsjB,QAAQ,CACzB+V,KAAK,IAAI,IAAI,CAACc,iCAAiC,CAACtgC,QAAQ,CAAC,IAAIw/B,KAAK,EAAE,EACpE79B,KAAK,CACN,CAAA;;AAID,MAAA,IAAI,CAACwE,KAAK,CAAC2e,KAAK,IAAI,CAAC3e,KAAK,CAAC4jB,OAAO,EAAE,OAAO5jB,KAAK,CAACvL,IAAI,CAAA;AAErD,MAAA,MAAMqgC,MAAM,GAAG,IAAI,CAACxR,QAAQ,CAC1B,MAAM,KAAK,CAAC2W,eAAe,CAACl+B,IAAI,EAAElC,QAAQ,EAAEmC,OAAO,CAAC,EACpDR,KAAK,CACN,CAAA;AAED,MAAA,IAAIs5B,MAAM,CAACrgC,IAAI,IAAI,CAACqgC,MAAM,CAACnW,KAAK,EAAE,OAAOmW,MAAM,CAACrgC,IAAI,CAAA;MAEpD,IAAIuL,KAAK,CAACvL,IAAI,EAAE;AACd,QAAA,IAAI,CAAC+G,KAAK,GAAGwE,KAAK,CAAC0jB,SAAS,CAAA;QAE5B,OAAO1jB,KAAK,CAACvL,IAAI,CAAA;AACnB,OAAA;MAEA,IAAIqgC,MAAM,CAACrgC,IAAI,EAAE;AACf,QAAA,IAAI,CAAC+G,KAAK,GAAGs5B,MAAM,CAACpR,SAAS,CAAA;QAC7B,OAAOoR,MAAM,CAACrgC,IAAI,CAAA;AACpB,OAAA;AAEA,MAAA,MAAMuL,KAAK,CAAC2e,KAAK,IAAImW,MAAM,CAACnW,KAAK,CAAA;AACnC,KAAA;IAEA,OAAO,KAAK,CAACsb,eAAe,CAACl+B,IAAI,EAAElC,QAAQ,EAAEmC,OAAO,CAAC,CAAA;AACvD,GAAA;EAEAF,cAAc,CACZC,IAAkB,EAElBlC,QAAkB,EAClBmC,OAAmC,EACnCo+B,cAAqC,EACvB;IACd,IAAI,IAAI,CAACnjB,KAAK,CAAA,EAAA,CAAgB,IAAI,IAAI,CAACojB,mBAAmB,EAAE,EAAE;MAC5DD,cAAc,CAACn+B,mBAAmB,GAAG,IAAI,CAAA;AACzC,MAAA,IAAID,OAAO,EAAE;QACXo+B,cAAc,CAACj+B,IAAI,GAAG,IAAI,CAAA;AAC1B,QAAA,OAAOJ,IAAI,CAAA;AACb,OAAA;MACA,IAAI,CAACwO,IAAI,EAAE,CAAA;AACX,MAAA,MAAM9V,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAA2BtsB,QAAQ,CAAC,CAAA;MACjEpF,IAAI,CAACsG,MAAM,GAAGgB,IAAI,CAAA;AAClBtH,MAAAA,IAAI,CAAC6lC,aAAa,GAAG,IAAI,CAAC3L,mCAAmC,EAAE,CAAA;MAC/D,IAAI,CAACtL,MAAM,CAAW,EAAA,CAAA,CAAA;MACtB5uB,IAAI,CAACwG,SAAS,GAAG,IAAI,CAACi/B,4BAA4B,CAAA,EAAA,EAAY,KAAK,CAAC,CAAA;MACpEzlC,IAAI,CAACqG,QAAQ,GAAG,IAAI,CAAA;AACpB,MAAA,OAAO,IAAI,CAACF,oBAAoB,CAACnG,IAAI,EAAiB,IAAI,CAAC,CAAA;AAC7D,KAAC,MAAM,IAAI,CAACuH,OAAO,IAAI,IAAI,CAAC+uB,gBAAgB,EAAE,IAAI,IAAI,CAAC9T,KAAK,IAAO,EAAE;AACnE,MAAA,MAAMxiB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAE3BtsB,QAAQ,CAAC,CAAA;MACXpF,IAAI,CAACsG,MAAM,GAAGgB,IAAI,CAAA;AAElB,MAAA,MAAM+4B,MAAM,GAAG,IAAI,CAACxR,QAAQ,CAAC,MAAM;AACjC7uB,QAAAA,IAAI,CAAC6lC,aAAa,GAChB,IAAI,CAACxK,4CAA4C,EAAE,CAAA;QACrD,IAAI,CAACzM,MAAM,CAAW,EAAA,CAAA,CAAA;QACtB5uB,IAAI,CAACwG,SAAS,GAAG,KAAK,CAACi/B,4BAA4B,CAAA,EAAA,EAAY,KAAK,CAAC,CAAA;QACrE,IAAIE,cAAc,CAACn+B,mBAAmB,EAAE;UACrCxH,IAAI,CAAsCqG,QAAQ,GAAG,KAAK,CAAA;AAC7D,SAAA;QACA,OAAO,IAAI,CAACF,oBAAoB,CAC9BnG,IAAI,EACJ2lC,cAAc,CAACn+B,mBAAmB,CACnC,CAAA;AACH,OAAC,CAAC,CAAA;MAEF,IAAI64B,MAAM,CAACrgC,IAAI,EAAE;QACf,IAAIqgC,MAAM,CAACnW,KAAK,EAAE,IAAI,CAACnjB,KAAK,GAAGs5B,MAAM,CAACpR,SAAS,CAAA;QAC/C,OAAOoR,MAAM,CAACrgC,IAAI,CAAA;AACpB,OAAA;AACF,KAAA;IAEA,OAAO,KAAK,CAACqH,cAAc,CACzBC,IAAI,EAEJlC,QAAQ,EACRmC,OAAO,EACPo+B,cAAc,CACf,CAAA;AACH,GAAA;EAEAG,cAAc,CAAC9lC,IAAqB,EAAQ;AAC1C,IAAA,KAAK,CAAC8lC,cAAc,CAAC9lC,IAAI,CAAC,CAAA;IAE1B,IAAI+lC,KAAK,GAAG,IAAI,CAAA;IAChB,IAAI,IAAI,CAACzP,gBAAgB,EAAE,IAAI,IAAI,CAAC9T,KAAK,CAAA,EAAA,CAAO,EAAE;AAChDujB,MAAAA,KAAK,GAAG,IAAI,CAAClX,QAAQ,CAAC,MACpB,IAAI,CAACwM,4CAA4C,EAAE,CACpD,CAACr7B,IAAI,CAAA;AACR,KAAA;IACAA,IAAI,CAAC6lC,aAAa,GAAGE,KAAK,CAAA;AAC5B,GAAA;EAEAL,iCAAiC,CAC/BtgC,QAAkB,EAC4B;AAC9C,IAAA,MAAMpF,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAA4BtsB,QAAQ,CAAC,CAAA;AAClE,IAAA,IAAI,CAAC++B,mBAAmB,CAACnkC,IAAI,CAAC,CAAA;AAC9B,IAAA,IAAI,CAAC,IAAI,CAACglC,UAAU,CAAChlC,IAAI,CAAC,EAAE,OAAA;IAC5B,OAAO,KAAK,CAACgmC,oBAAoB,CAC/BhmC,IAAI,EACSkc,SAAS,EACR,IAAI,CACnB,CAAA;AACH,GAAA;EAEAmL,qBAAqB,CAAC52B,IAAY,EAAQ;AACxC,IAAA,MAAMqlB,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;IACtD,IACEpO,IAAI,KAAuB,EAAA,IAC3BqlB,IAAI,KAAA,EAAoB,IACxB,IAAI,CAAC/O,KAAK,CAACkY,cAAc,EACzB;AACA,MAAA,IAAI,CAAClY,KAAK,CAACkY,cAAc,GAAG,KAAK,CAAA;AACjC,MAAA,IAAI,CAAClY,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;MACnB,IAAI,CAACimB,SAAS,EAAE,CAAA;AAChB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,KAAK,CAACuC,qBAAqB,CAAC52B,IAAI,CAAC,CAAA;AACnC,GAAA;EAEA82B,kBAAkB,CAAC92B,IAAY,EAAQ;AACrC,IAAA,MAAMqlB,IAAI,GAAG,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,CAAA;AACtD,IAAA,IACEpO,IAAI,KAAA,GAA0B,IAC9BqlB,IAAI,QAA8B,EAClC;AAEA,MAAA,IAAI,CAACmR,QAAQ,CAAe,CAAA,EAAA,CAAC,CAAC,CAAA;AAC9B,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,KAAK,CAACM,kBAAkB,CAAC92B,IAAI,CAAC,CAAA;AAChC,GAAA;AAEAw1C,EAAAA,aAAa,CAAC7lC,IAAY,EAAE8lC,OAAkB,EAAU;IACtD,MAAMC,QAAQ,GAAG,KAAK,CAACF,aAAa,CAAC7lC,IAAI,EAAE8lC,OAAO,CAAC,CAAA;AACnD,IAAA,IAAI,IAAI,CAACn/B,KAAK,CAACkY,cAAc,EAAE;AAC7B,MAAA,IAAI,CAAChZ,KAAK,CAAC6rB,UAAU,CAACuD,uBAAuB,EAAE;AAC7CnvB,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,OAAC,CAAC,CAAA;AACJ,KAAA;AACA,IAAA,OAAO4lB,QAAQ,CAAA;AACjB,GAAA;AAEAhgB,EAAAA,gBAAgB,GAA+B;IAC7C,IAAI,IAAI,CAAC1f,SAAS,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC2/B,eAAe,EAAE,EAAE;AAC5D,MAAA,IAAI,IAAI,CAACr/B,KAAK,CAACkY,cAAc,EAAE;AAC7B,QAAA,MAAM,IAAI,CAAChZ,KAAK,CAAC6rB,UAAU,CAACiC,iBAAiB,EAAE;AAC7C7tB,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;MACA,IAAI,CAACihC,wBAAwB,EAAE,CAAA;AAC/B,MAAA,MAAMC,WAAW,GAAG,IAAI,CAACF,eAAe,EAAE,CAAA;AAC1C,MAAA,IAAIE,WAAW,EAAE;AACf,QAAA,IAAI,CAACv/B,KAAK,CAAClI,GAAG,IAAIynC,WAAW,CAAA;AAC7B,QAAA,IAAI,CAACv/B,KAAK,CAACkY,cAAc,GAAG,IAAI,CAAA;AAClC,OAAA;AACA,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,OAAO,KAAK,CAACkH,gBAAgB,CAAC,IAAI,CAACpf,KAAK,CAACkY,cAAc,GAAG,KAAK,GAAG,IAAI,CAAC,CAAA;AACzE,GAAA;AAEAmnB,EAAAA,eAAe,GAAmB;IAChC,MAAM;AAAEvnC,MAAAA,GAAAA;KAAK,GAAG,IAAI,CAACkI,KAAK,CAAA;IAC1B,IAAIw/B,yBAAyB,GAAG,CAAC,CAAA;IACjC,OACE,CAAA,EAAA,EAAA,CAAA,CAAgC,CAAC1d,QAAQ;IAEvC,IAAI,CAAClL,KAAK,CAACC,UAAU,CAAC/e,GAAG,GAAG0nC,yBAAyB,CAAC,CACvD,EACD;AACAA,MAAAA,yBAAyB,EAAE,CAAA;AAC7B,KAAA;IAEA,MAAMC,GAAG,GAAG,IAAI,CAAC7oB,KAAK,CAACC,UAAU,CAAC2oB,yBAAyB,GAAG1nC,GAAG,CAAC,CAAA;AAClE,IAAA,MAAM4nC,GAAG,GAAG,IAAI,CAAC9oB,KAAK,CAACC,UAAU,CAAC2oB,yBAAyB,GAAG1nC,GAAG,GAAG,CAAC,CAAC,CAAA;AAEtE,IAAA,IAAI2nC,GAAG,KAAA,EAAoB,IAAIC,GAAG,OAAoB,EAAE;MACtD,OAAOF,yBAAyB,GAAG,CAAC,CAAA;AACtC,KAAA;;AACA,IAAA,IACE,IAAI,CAAC5oB,KAAK,CAAC+C,KAAK,CACd6lB,yBAAyB,GAAG1nC,GAAG,EAC/B0nC,yBAAyB,GAAG1nC,GAAG,GAAG,EAAE,CACrC,KAAK,cAAc,EACpB;MACA,OAAO0nC,yBAAyB,GAAG,EAAE,CAAA;AACvC,KAAA;;AACA,IAAA,IAAIC,GAAG,KAAA,EAAoB,IAAIC,GAAG,OAAoB,EAAE;AACtD,MAAA,OAAOF,yBAAyB,CAAA;AAClC,KAAA;;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEAF,EAAAA,wBAAwB,GAAS;AAC/B,IAAA,MAAM93C,GAAG,GAAG,IAAI,CAACovB,KAAK,CAACmG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC/c,KAAK,CAAClI,GAAG,CAAC,CAAA;AACpD,IAAA,IAAItQ,GAAG,KAAK,CAAC,CAAC,EAAE;AACd,MAAA,MAAM,IAAI,CAAC0X,KAAK,CAACxG,MAAM,CAACrD,mBAAmB,EAAE;AAC3C8J,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;EAIAmmB,wCAAwC,CACtCloC,GAAa,EACb;IACEg0B,QAAQ;AACRD,IAAAA,UAAAA;AAIF,GAAC,EACK;AACN,IAAA,IAAI,CAACtsB,KAAK,CAAC6rB,UAAU,CAACQ,+BAA+B,EAAE;AACrDpsB,MAAAA,EAAE,EAAE1H,GAAG;MACP+zB,UAAU;AACVC,MAAAA,QAAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;AAEAmU,EAAAA,qCAAqC,CACnCnoC,GAAa,EACbooC,WAAwB,EACxB;IACA,OAAO,IAAI,CAAC3gC,KAAK,CACf,CAAC2gC,WAAW,CAAC7T,YAAY,GACrBjB,UAAU,CAACmB,uCAAuC,GAClD2T,WAAW,CAAC7T,YAAY,KAAK,QAAQ,GACrCjB,UAAU,CAACkB,sCAAsC,GACjDlB,UAAU,CAACgB,uCAAuC,EAAA,MAAA,CAAA,MAAA,CAAA;AAEpD5sB,MAAAA,EAAE,EAAE1H,GAAAA;AAAG,KAAA,EACJooC,WAAW,CAEjB,CAAA,CAAA;AACH,GAAA;EAEAC,uCAAuC,CACrCroC,GAAa,EACb;IACEg0B,QAAQ;AACRD,IAAAA,UAAAA;AAIF,GAAC,EACK;AACN,IAAA,IAAI,CAACtsB,KAAK,CAAC6rB,UAAU,CAACsB,8BAA8B,EAAE;AACpDltB,MAAAA,EAAE,EAAE1H,GAAG;MACPg0B,QAAQ;AACRD,MAAAA,UAAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;EAEAuU,kDAAkD,CAChD9mC,IAAY,EACZ;AACEwyB,IAAAA,QAAAA;AAGF,GAAC,EACK;AACN,IAAA,IAAI,CAACvsB,KAAK,CAAC6rB,UAAU,CAACuB,yCAAyC,EAAE;AAC/DntB,MAAAA,EAAE,EAAElG,IAAI;AACRwyB,MAAAA,QAAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;AAEAuU,EAAAA,kBAAkB,GAAmB;AACnC,IAAA,MAAM3hC,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;IACpC,MAAM4hC,SAAS,GAAG,MAAM,IAAI,CAACxkB,KAAK,CAAA,EAAA,CAAU,IAAI,IAAI,CAACA,KAAK,CAAW,CAAA,CAAA,CAAA;AACrE,IAAA,QAAQ,IAAI,CAACzb,KAAK,CAAC3U,IAAI;AACrB,MAAA,KAAA,GAAA;AAAa,QAAA;UACX,MAAM60C,OAAO,GAAG,IAAI,CAAC3lC,mBAAmB,CAAC,IAAI,CAACyF,KAAK,CAACxX,KAAK,CAAC,CAAA;UAC1D,IAAIy3C,SAAS,EAAE,EAAE;YACf,OAAO;AAAE50C,cAAAA,IAAI,EAAE,QAAQ;AAAEoM,cAAAA,GAAG,EAAEyoC,OAAO,CAACzoC,GAAG,CAAClQ,KAAK;AAAEiB,cAAAA,KAAK,EAAE03C,OAAAA;aAAS,CAAA;AACnE,WAAA;UACA,OAAO;AAAE70C,YAAAA,IAAI,EAAE,SAAS;AAAEoM,YAAAA,GAAG,EAAE4G,QAAAA;WAAU,CAAA;AAC3C,SAAA;AACA,MAAA,KAAA,GAAA;AAAgB,QAAA;UACd,MAAM6hC,OAAO,GAAG,IAAI,CAAC5lC,kBAAkB,CAAC,IAAI,CAAC0F,KAAK,CAACxX,KAAK,CAAC,CAAA;UACzD,IAAIy3C,SAAS,EAAE,EAAE;YACf,OAAO;AAAE50C,cAAAA,IAAI,EAAE,QAAQ;AAAEoM,cAAAA,GAAG,EAAEyoC,OAAO,CAACzoC,GAAG,CAAClQ,KAAK;AAAEiB,cAAAA,KAAK,EAAE03C,OAAAA;aAAS,CAAA;AACnE,WAAA;UACA,OAAO;AAAE70C,YAAAA,IAAI,EAAE,SAAS;AAAEoM,YAAAA,GAAG,EAAE4G,QAAAA;WAAU,CAAA;AAC3C,SAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AAAgB,QAAA;UACd,MAAM6hC,OAAO,GAAG,IAAI,CAACzlC,mBAAmB,CAAC,IAAI,CAACghB,KAAK,CAAA,EAAA,CAAU,CAAC,CAAA;UAC9D,IAAIwkB,SAAS,EAAE,EAAE;YACf,OAAO;AACL50C,cAAAA,IAAI,EAAE,SAAS;AACfoM,cAAAA,GAAG,EAAEyoC,OAAO,CAACzoC,GAAG,CAAClQ,KAAK;AACtBiB,cAAAA,KAAK,EAAE03C,OAAAA;aACR,CAAA;AACH,WAAA;UACA,OAAO;AAAE70C,YAAAA,IAAI,EAAE,SAAS;AAAEoM,YAAAA,GAAG,EAAE4G,QAAAA;WAAU,CAAA;AAC3C,SAAA;AACA,MAAA;QACE,OAAO;AAAEhT,UAAAA,IAAI,EAAE,SAAS;AAAEoM,UAAAA,GAAG,EAAE4G,QAAAA;SAAU,CAAA;AAAC,KAAA;AAEhD,GAAA;AAEA8hC,EAAAA,iBAAiB,GAGf;AACA,IAAA,MAAM1oC,GAAG,GAAG,IAAI,CAACuI,KAAK,CAAC3B,QAAQ,CAAA;AAC/B,IAAA,MAAMrB,EAAE,GAAG,IAAI,CAACwzB,eAAe,CAAC,IAAI,CAAC,CAAA;IACrC,MAAMrX,IAAI,GAAG,IAAI,CAAC6E,GAAG,CAAO,EAAA,CAAA,GACxB,IAAI,CAACgiB,kBAAkB,EAAE,GACzB;AAAE30C,MAAAA,IAAI,EAAE,MAAe;AAAEoM,MAAAA,GAAAA;KAAK,CAAA;IAClC,OAAO;MAAEuF,EAAE;AAAEmc,MAAAA,IAAAA;KAAM,CAAA;AACrB,GAAA;AAEAinB,EAAAA,iCAAiC,CAC/B3oC,GAAa,EACbyV,OAAoB,EACpBmzB,YAA8B,EACxB;IACN,MAAM;AAAErU,MAAAA,YAAAA;AAAa,KAAC,GAAG9e,OAAO,CAAA;IAChC,IAAI8e,YAAY,KAAK,IAAI,EAAE;AACzB,MAAA,OAAA;AACF,KAAA;IACA,IAAIA,YAAY,KAAKqU,YAAY,EAAE;AACjC,MAAA,IAAI,CAACT,qCAAqC,CAACnoC,GAAG,EAAEyV,OAAO,CAAC,CAAA;AAC1D,KAAA;AACF,GAAA;AAEAozB,EAAAA,eAAe,CAAC;IACd7U,QAAQ;AACRO,IAAAA,YAAAA;AAIF,GAAC,EAQC;AACA,IAAA,MAAMuU,SAAS,GAAG,IAAI/pC,GAAG,EAAE,CAAA;AAC3B,IAAA,MAAMgqC,OAAO,GAAG;AAEdC,MAAAA,cAAc,EAAE,EAAE;AAElBC,MAAAA,aAAa,EAAE,EAAE;AAEjBC,MAAAA,aAAa,EAAE,EAAE;AAEjBC,MAAAA,gBAAgB,EAAE,EAAA;KACnB,CAAA;IACD,IAAIC,iBAAiB,GAAG,KAAK,CAAA;AAC7B,IAAA,OAAO,CAAC,IAAI,CAACplB,KAAK,GAAW,EAAE;AAC7B,MAAA,IAAI,IAAI,CAACuC,GAAG,CAAA,EAAA,CAAa,EAAE;AACzB6iB,QAAAA,iBAAiB,GAAG,IAAI,CAAA;AACxB,QAAA,MAAA;AACF,OAAA;AACA,MAAA,MAAMC,UAAU,GAAG,IAAI,CAACtjC,SAAS,EAAE,CAAA;MACnC,MAAM;QAAER,EAAE;AAAEmc,QAAAA,IAAAA;AAAK,OAAC,GAAG,IAAI,CAACgnB,iBAAiB,EAAE,CAAA;AAC7C,MAAA,MAAM3U,UAAU,GAAGxuB,EAAE,CAAC/L,IAAI,CAAA;MAC1B,IAAIu6B,UAAU,KAAK,EAAE,EAAE;AACrB,QAAA,SAAA;AACF,OAAA;AACA,MAAA,IAAI,QAAQ,CAAC3d,IAAI,CAAC2d,UAAU,CAAC,EAAE;AAC7B,QAAA,IAAI,CAACtsB,KAAK,CAAC6rB,UAAU,CAACoB,qBAAqB,EAAE;AAC3ChtB,UAAAA,EAAE,EAAEnC,EAAE;UACNwuB,UAAU;AACVY,UAAAA,UAAU,EAAEZ,UAAU,CAAC,CAAC,CAAC,CAACuV,WAAW,EAAE,GAAGvV,UAAU,CAAC7R,KAAK,CAAC,CAAC,CAAC;AAC7D8R,UAAAA,QAAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,IAAI8U,SAAS,CAAC9xB,GAAG,CAAC+c,UAAU,CAAC,EAAE;AAC7B,QAAA,IAAI,CAACtsB,KAAK,CAAC6rB,UAAU,CAACW,uBAAuB,EAAE;AAC7CvsB,UAAAA,EAAE,EAAEnC,EAAE;UACNwuB,UAAU;AACVC,UAAAA,QAAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;AACA8U,MAAAA,SAAS,CAAC1sB,GAAG,CAAC2X,UAAU,CAAC,CAAA;AACzB,MAAA,MAAMte,OAAO,GAAG;QAAEue,QAAQ;QAAEO,YAAY;AAAER,QAAAA,UAAAA;OAAY,CAAA;MACtDsV,UAAU,CAAC9jC,EAAE,GAAGA,EAAE,CAAA;MAClB,QAAQmc,IAAI,CAAC9tB,IAAI;AACf,QAAA,KAAK,SAAS;AAAE,UAAA;YACd,IAAI,CAAC+0C,iCAAiC,CACpCjnB,IAAI,CAAC1hB,GAAG,EACRyV,OAAO,EACP,SAAS,CACV,CAAA;AACD4zB,YAAAA,UAAU,CAAC3nB,IAAI,GAAGA,IAAI,CAAC3wB,KAAK,CAAA;AAC5Bg4C,YAAAA,OAAO,CAACC,cAAc,CAAC9jC,IAAI,CACzB,IAAI,CAACe,UAAU,CAACojC,UAAU,EAAE,mBAAmB,CAAC,CACjD,CAAA;AACD,YAAA,MAAA;AACF,WAAA;AACA,QAAA,KAAK,QAAQ;AAAE,UAAA;YACb,IAAI,CAACV,iCAAiC,CAACjnB,IAAI,CAAC1hB,GAAG,EAAEyV,OAAO,EAAE,QAAQ,CAAC,CAAA;AACnE4zB,YAAAA,UAAU,CAAC3nB,IAAI,GAAGA,IAAI,CAAC3wB,KAAK,CAAA;AAC5Bg4C,YAAAA,OAAO,CAACE,aAAa,CAAC/jC,IAAI,CACxB,IAAI,CAACe,UAAU,CAACojC,UAAU,EAAE,kBAAkB,CAAC,CAChD,CAAA;AACD,YAAA,MAAA;AACF,WAAA;AACA,QAAA,KAAK,QAAQ;AAAE,UAAA;YACb,IAAI,CAACV,iCAAiC,CAACjnB,IAAI,CAAC1hB,GAAG,EAAEyV,OAAO,EAAE,QAAQ,CAAC,CAAA;AACnE4zB,YAAAA,UAAU,CAAC3nB,IAAI,GAAGA,IAAI,CAAC3wB,KAAK,CAAA;AAC5Bg4C,YAAAA,OAAO,CAACG,aAAa,CAAChkC,IAAI,CACxB,IAAI,CAACe,UAAU,CAACojC,UAAU,EAAE,kBAAkB,CAAC,CAChD,CAAA;AACD,YAAA,MAAA;AACF,WAAA;AACA,QAAA,KAAK,SAAS;AAAE,UAAA;YACd,MAAM,IAAI,CAAClB,qCAAqC,CAACzmB,IAAI,CAAC1hB,GAAG,EAAEyV,OAAO,CAAC,CAAA;AACrE,WAAA;AACA,QAAA,KAAK,MAAM;AAAE,UAAA;AACX,YAAA,QAAQ8e,YAAY;AAClB,cAAA,KAAK,SAAS;gBACZ,IAAI,CAAC2T,wCAAwC,CAC3CxmB,IAAI,CAAC1hB,GAAG,EACRyV,OAAO,CACR,CAAA;AACD,gBAAA,MAAA;AACF,cAAA,KAAK,QAAQ;gBACX,IAAI,CAAC4yB,uCAAuC,CAAC3mB,IAAI,CAAC1hB,GAAG,EAAEyV,OAAO,CAAC,CAAA;AAC/D,gBAAA,MAAA;AACF,cAAA;AACEszB,gBAAAA,OAAO,CAACI,gBAAgB,CAACjkC,IAAI,CAC3B,IAAI,CAACe,UAAU,CAACojC,UAAU,EAAE,qBAAqB,CAAC,CACnD,CAAA;AAAC,aAAA;AAER,WAAA;AAAC,OAAA;AAGH,MAAA,IAAI,CAAC,IAAI,CAACrlB,KAAK,GAAW,EAAE;QAC1B,IAAI,CAACoM,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACF,KAAA;IACA,OAAO;MAAE2Y,OAAO;AAAEK,MAAAA,iBAAAA;KAAmB,CAAA;AACvC,GAAA;AAEAG,EAAAA,qBAAqB,CACnBC,kBAAiC,EACjCL,gBAA+B,EAC/B;AACEnV,IAAAA,QAAAA;AAGF,GAAC,EACc;AACf,IAAA,IAAIwV,kBAAkB,CAAC/4C,MAAM,KAAK,CAAC,EAAE;AACnC,MAAA,OAAO04C,gBAAgB,CAAA;AACzB,KAAC,MAAM,IAAIA,gBAAgB,CAAC14C,MAAM,KAAK,CAAC,EAAE;AACxC,MAAA,OAAO+4C,kBAAkB,CAAA;KAC1B,MAAM,IAAIL,gBAAgB,CAAC14C,MAAM,GAAG+4C,kBAAkB,CAAC/4C,MAAM,EAAE;AAC9D,MAAA,KAAK,MAAMoyC,MAAM,IAAI2G,kBAAkB,EAAE;AACvC,QAAA,IAAI,CAAClB,kDAAkD,CAACzF,MAAM,EAAE;AAC9D7O,UAAAA,QAAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,OAAOmV,gBAAgB,CAAA;AACzB,KAAC,MAAM;AACL,MAAA,KAAK,MAAMtG,MAAM,IAAIsG,gBAAgB,EAAE;AACrC,QAAA,IAAI,CAACb,kDAAkD,CAACzF,MAAM,EAAE;AAC9D7O,UAAAA,QAAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,OAAOwV,kBAAkB,CAAA;AAC3B,KAAA;AACF,GAAA;AAEAC,EAAAA,yBAAyB,CAAC;AACxBzV,IAAAA,QAAAA;AAGF,GAAC,EAAoB;AACnB,IAAA,IAAI,CAAC,IAAI,CAACpE,aAAa,CAAQ,GAAA,CAAA,EAAE,OAAO,IAAI,CAAA;IAE5C,IAAI,CAACvb,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAAE;AACvC,MAAA,MAAM,IAAI,CAAC6T,KAAK,CAAC6rB,UAAU,CAACe,sCAAsC,EAAE;AAClE3sB,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAQ;AACvBotB,QAAAA,QAAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,MAAM;AAAEjjC,MAAAA,KAAAA;KAAO,GAAG,IAAI,CAACwX,KAAK,CAAA;IAC5B,IAAI,CAAC+O,IAAI,EAAE,CAAA;AAEX,IAAA,IACEvmB,KAAK,KAAK,SAAS,IACnBA,KAAK,KAAK,QAAQ,IAClBA,KAAK,KAAK,QAAQ,IAClBA,KAAK,KAAK,QAAQ,EAClB;AACA,MAAA,IAAI,CAAC0W,KAAK,CAAC6rB,UAAU,CAACa,uBAAuB,EAAE;AAC7CzsB,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAQ;QACvBotB,QAAQ;AACRI,QAAAA,eAAe,EAAErjC,KAAAA;AACnB,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAOA,KAAK,CAAA;AACd,GAAA;AAEA24C,EAAAA,YAAY,CAACloC,IAAoB,EAAE+D,EAAU,EAAU;AACrD,IAAA,MAAMyuB,QAAQ,GAAGzuB,EAAE,CAAC/L,IAAI,CAAA;AACxB,IAAA,MAAMmwC,OAAO,GAAGpkC,EAAE,CAACvF,GAAG,CAAClQ,KAAK,CAAA;AAC5B,IAAA,MAAMykC,YAAY,GAAG,IAAI,CAACkV,yBAAyB,CAAC;AAAEzV,MAAAA,QAAAA;AAAS,KAAC,CAAC,CAAA;IACjE,IAAI,CAAC5D,MAAM,CAAW,CAAA,CAAA,CAAA;IACtB,MAAM;MAAE2Y,OAAO;AAAEK,MAAAA,iBAAAA;AAAkB,KAAC,GAAG,IAAI,CAACP,eAAe,CAAC;MAC1D7U,QAAQ;AACRO,MAAAA,YAAAA;AACF,KAAC,CAAC,CAAA;IACF/yB,IAAI,CAAC4nC,iBAAiB,GAAGA,iBAAiB,CAAA;AAE1C,IAAA,QAAQ7U,YAAY;AAClB,MAAA,KAAK,SAAS;QACZ/yB,IAAI,CAAC+yB,YAAY,GAAG,IAAI,CAAA;AACxB/yB,QAAAA,IAAI,CAACunC,OAAO,GAAGA,OAAO,CAACC,cAAc,CAAA;QACrC,IAAI,CAAC5Y,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,QAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,MAAA,KAAK,QAAQ;QACXA,IAAI,CAAC+yB,YAAY,GAAG,IAAI,CAAA;AACxB/yB,QAAAA,IAAI,CAACunC,OAAO,GAAGA,OAAO,CAACE,aAAa,CAAA;QACpC,IAAI,CAAC7Y,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,QAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,MAAA,KAAK,QAAQ;QACXA,IAAI,CAAC+yB,YAAY,GAAG,IAAI,CAAA;AACxB/yB,QAAAA,IAAI,CAACunC,OAAO,GAAG,IAAI,CAACQ,qBAAqB,CACvCR,OAAO,CAACG,aAAa,EACrBH,OAAO,CAACI,gBAAgB,EACxB;AAAEnV,UAAAA,QAAAA;AAAS,SAAC,CACb,CAAA;QACD,IAAI,CAAC5D,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,QAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,MAAA,KAAK,QAAQ;AACXA,QAAAA,IAAI,CAACunC,OAAO,GAAGA,OAAO,CAACI,gBAAgB,CAAA;QACvC,IAAI,CAAC/Y,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,QAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,MAAA;AAAS,QAAA;UAEP,MAAMooC,KAAK,GAAG,MAAM;YAClBpoC,IAAI,CAACunC,OAAO,GAAG,EAAE,CAAA;YACjB,IAAI,CAAC3Y,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,YAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;WAC/C,CAAA;UACDA,IAAI,CAAC+yB,YAAY,GAAG,KAAK,CAAA;AAEzB,UAAA,MAAMsV,QAAQ,GAAGd,OAAO,CAACC,cAAc,CAACv4C,MAAM,CAAA;AAC9C,UAAA,MAAMq5C,OAAO,GAAGf,OAAO,CAACE,aAAa,CAACx4C,MAAM,CAAA;AAC5C,UAAA,MAAMs5C,OAAO,GAAGhB,OAAO,CAACG,aAAa,CAACz4C,MAAM,CAAA;AAC5C,UAAA,MAAMu5C,YAAY,GAAGjB,OAAO,CAACI,gBAAgB,CAAC14C,MAAM,CAAA;UAEpD,IAAI,CAACo5C,QAAQ,IAAI,CAACC,OAAO,IAAI,CAACC,OAAO,IAAI,CAACC,YAAY,EAAE;AACtD,YAAA,OAAOJ,KAAK,EAAE,CAAA;AAChB,WAAC,MAAM,IAAI,CAACC,QAAQ,IAAI,CAACC,OAAO,EAAE;AAChCtoC,YAAAA,IAAI,CAACunC,OAAO,GAAG,IAAI,CAACQ,qBAAqB,CACvCR,OAAO,CAACG,aAAa,EACrBH,OAAO,CAACI,gBAAgB,EACxB;AAAEnV,cAAAA,QAAAA;AAAS,aAAC,CACb,CAAA;YACD,IAAI,CAAC5D,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,YAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;WAC/C,MAAM,IAAI,CAACsoC,OAAO,IAAI,CAACC,OAAO,IAAIF,QAAQ,IAAIG,YAAY,EAAE;AAC3D,YAAA,KAAK,MAAMnH,MAAM,IAAIkG,OAAO,CAACI,gBAAgB,EAAE;cAC7C,IAAI,CAACjB,wCAAwC,CAACrF,MAAM,CAAC7iC,GAAG,CAAClQ,KAAK,EAAE;gBAC9DkkC,QAAQ;AACRD,gBAAAA,UAAU,EAAE8O,MAAM,CAACt9B,EAAE,CAAC/L,IAAAA;AACxB,eAAC,CAAC,CAAA;AACJ,aAAA;AACAgI,YAAAA,IAAI,CAACunC,OAAO,GAAGA,OAAO,CAACC,cAAc,CAAA;YACrC,IAAI,CAAC5Y,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,YAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;WAChD,MAAM,IAAI,CAACqoC,QAAQ,IAAI,CAACE,OAAO,IAAID,OAAO,IAAIE,YAAY,EAAE;AAC3D,YAAA,KAAK,MAAMnH,MAAM,IAAIkG,OAAO,CAACI,gBAAgB,EAAE;cAC7C,IAAI,CAACd,uCAAuC,CAACxF,MAAM,CAAC7iC,GAAG,CAAClQ,KAAK,EAAE;gBAC7DkkC,QAAQ;AACRD,gBAAAA,UAAU,EAAE8O,MAAM,CAACt9B,EAAE,CAAC/L,IAAAA;AACxB,eAAC,CAAC,CAAA;AACJ,aAAA;AACAgI,YAAAA,IAAI,CAACunC,OAAO,GAAGA,OAAO,CAACE,aAAa,CAAA;YACpC,IAAI,CAAC7Y,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,YAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,WAAC,MAAM;AACL,YAAA,IAAI,CAACiG,KAAK,CAAC6rB,UAAU,CAACY,4BAA4B,EAAE;AAClDxsB,cAAAA,EAAE,EAAEiiC,OAAO;AACX3V,cAAAA,QAAAA;AACF,aAAC,CAAC,CAAA;AACF,YAAA,OAAO4V,KAAK,EAAE,CAAA;AAChB,WAAA;AACF,SAAA;AAAC,KAAA;AAEL,GAAA;EAEAvJ,wBAAwB,CAAC7+B,IAAoB,EAAU;AACrD,IAAA,MAAM+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;IACjCv3B,IAAI,CAAC+D,EAAE,GAAGA,EAAE,CAAA;AACZ/D,IAAAA,IAAI,CAACiD,IAAI,GAAG,IAAI,CAACilC,YAAY,CAAC,IAAI,CAAC3jC,SAAS,EAAE,EAAER,EAAE,CAAC,CAAA;AACnD,IAAA,OAAO,IAAI,CAACU,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;;AAGA4lC,EAAAA,mBAAmB,GAAY;AAC7B,IAAA,MAAM9vB,IAAI,GAAG,IAAI,CAACuP,cAAc,EAAE,CAAA;IAClC,IAAI,IAAI,CAAC1H,KAAK,CAACC,UAAU,CAAC9H,IAAI,CAAC,KAAA,EAAuB,EAAE;MACtD,MAAM2yB,SAAS,GAAG,IAAI,CAAC9qB,KAAK,CAACC,UAAU,CAAC9H,IAAI,GAAG,CAAC,CAAC,CAAA;AACjD,MAAA,OACE2yB,SAAS,KAAA,EAAuB,IAAIA,SAAS,KAAuB,EAAA,CAAA;AAExE,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEA3D,6BAA6B,CAAC9kC,IAAY,EAAE;IAC1C,OAAOA,IAAI,CAAC5N,IAAI,KAAK,oBAAoB,GAAG4N,IAAI,CAAC2B,UAAU,GAAG3B,IAAI,CAAA;AACpE,GAAA;AACF,CAAC;;AC3uHH,MAAM0oC,QAGL,GAAG;AACFC,EAAAA,SAAS,EAAE,IAAI;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,GAAG;AACRC,EAAAA,IAAI,EAAE,QAAQ;AACd97B,EAAAA,EAAE,EAAE,GAAG;AACPC,EAAAA,EAAE,EAAE,GAAG;AACP87B,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdhjC,EAAAA,KAAK,EAAE,QAAQ;AACfijC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,OAAO,EAAE,QAAQ;AACjBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,OAAO,EAAE,QAAQ;AACjBC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,OAAO,EAAE,QAAQ;AACjBC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,OAAO,EAAE,QAAQ;AACjBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,OAAO,EAAE,QAAQ;AACjBC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,OAAO,EAAE,QAAQ;AACjBC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,QAAQ,EAAE,QAAQ;AAClBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,OAAO,EAAE,QAAQ;AACjBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfnN,EAAAA,KAAK,EAAE,QAAQ;AACfoN,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfjxC,EAAAA,IAAI,EAAE,QAAQ;AACdkxC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,EAAE,EAAE,QAAQ;AACZC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,IAAI,EAAE,QAAQ;AACdC,EAAAA,GAAG,EAAE,QAAQ;AACbC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAQ;AACfC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,QAAA;AACT,CAAU;;AC5OV,MAAMC,SAAS,GAAGt5C,cAAe,CAAA,GAAA,CAAI,CAAC;AACpCu5C,EAAAA,gBAAgB,EACd,8DAA8D;AAChEC,EAAAA,wBAAwB,EAAE,CAAC;AAAEC,IAAAA,cAAAA;GAA4C,KACtE,CAA8CA,4CAAAA,EAAAA,cAAe,CAAG,EAAA,CAAA;AACnEC,EAAAA,yBAAyB,EAAE,gDAAgD;AAC3EC,EAAAA,4BAA4B,EAC1B,0GAA0G;AAE5Gn9C,EAAAA,eAAe,EAAE,CAAC;IAChBtE,UAAU;AACV0hD,IAAAA,UAAAA;AAIF,GAAC,KACE,CAAqB1hD,mBAAAA,EAAAA,UAAW,sBAAqB0hD,UAAW,CAAA,UAAA,EAAY1hD,UAAW,CAAM,KAAA,CAAA;AAChG2hD,EAAAA,mBAAmB,EACjB,gEAAgE;AAClEC,EAAAA,sBAAsB,EAAE,4BAA4B;AACpDC,EAAAA,4BAA4B,EAC1B,kGAAA;AACJ,CAAC,CAAC,CAAA;;AAIF,SAASC,UAAU,CAAC1pD,MAA4B,EAAW;AACzD,EAAA,OAAOA,MAAM,GACTA,MAAM,CAACgD,IAAI,KAAK,oBAAoB,IAClChD,MAAM,CAACgD,IAAI,KAAK,oBAAoB,GACtC,KAAK,CAAA;AACX,CAAA;;AAIA,SAAS2mD,mBAAmB,CAC1B3pD,MAAqE,EAC7D;AACR,EAAA,IAAIA,MAAM,CAACgD,IAAI,KAAK,eAAe,EAAE;IACnC,OAAOhD,MAAM,CAAC4I,IAAI,CAAA;AACpB,GAAA;AAEA,EAAA,IAAI5I,MAAM,CAACgD,IAAI,KAAK,mBAAmB,EAAE;AACvC,IAAA,OAAOhD,MAAM,CAAC4pD,SAAS,CAAChhD,IAAI,GAAG,GAAG,GAAG5I,MAAM,CAAC4I,IAAI,CAACA,IAAI,CAAA;AACvD,GAAA;AAEA,EAAA,IAAI5I,MAAM,CAACgD,IAAI,KAAK,qBAAqB,EAAE;AACzC,IAAA,OACE2mD,mBAAmB,CAAC3pD,MAAM,CAACA,MAAM,CAAC,GAClC,GAAG,GACH2pD,mBAAmB,CAAC3pD,MAAM,CAACwgC,QAAQ,CAAC,CAAA;AAExC,GAAA;;EAGA,MAAM,IAAI8G,KAAK,CAAC,4BAA4B,GAAGtnC,MAAM,CAACgD,IAAI,CAAC,CAAA;AAC7D,CAAA;AAQA,UAAA,CAAgB6N,UAAyB,IACvC,MAAMg5C,cAAc,SAASh5C,UAAU,CAAoC;;AAGzEi5C,EAAAA,YAAY,GAAS;IACnB,IAAI13B,GAAG,GAAG,EAAE,CAAA;AACZ,IAAA,IAAIE,UAAU,GAAG,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAA;IAC/B,SAAS;MACP,IAAI,IAAI,CAACkI,KAAK,CAAClI,GAAG,IAAI,IAAI,CAAC5P,MAAM,EAAE;AACjC,QAAA,MAAM,IAAI,CAACgX,KAAK,CAACmyC,SAAS,CAACQ,sBAAsB,EAAE;AACjD1yC,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;AAEA,MAAA,MAAM6b,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAEhD,MAAA,QAAQoiB,EAAE;AACR,QAAA,KAAA,EAAA,CAAA;AACA,QAAA,KAAA,GAAA;UACE,IAAI,IAAI,CAACla,KAAK,CAAClI,GAAG,KAAK,IAAI,CAACkI,KAAK,CAACzY,KAAK,EAAE;YACvC,IAAI2yB,EAAE,OAAuB,IAAI,IAAI,CAACla,KAAK,CAAC8Y,kBAAkB,EAAE;AAC9D,cAAA,EAAE,IAAI,CAAC9Y,KAAK,CAAClI,GAAG,CAAA;cAChB,OAAO,IAAI,CAAConB,WAAW,CAAgB,GAAA,CAAA,CAAA;AACzC,aAAA;AACA,YAAA,OAAO,KAAK,CAACC,gBAAgB,CAACjF,EAAE,CAAC,CAAA;AACnC,WAAA;AACAO,UAAAA,GAAG,IAAI,IAAI,CAAC7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAC,CAAA;AACnD,UAAA,OAAO,IAAI,CAAConB,WAAW,CAAA,GAAA,EAAazE,GAAG,CAAC,CAAA;AAE1C,QAAA,KAAA,EAAA;AACEA,UAAAA,GAAG,IAAI,IAAI,CAAC7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAC,CAAA;AACnD2iB,UAAAA,GAAG,IAAI,IAAI,CAAC23B,aAAa,EAAE,CAAA;AAC3Bz3B,UAAAA,UAAU,GAAG,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAA;AAC3B,UAAA,MAAA;AAEF,QAAA,KAAA,EAAA,CAAA;AACA,QAAA,KAAA,GAAA;;AAWA,QAAA;AACE,UAAA,IAAIqf,SAAS,CAAC+C,EAAE,CAAC,EAAE;AACjBO,YAAAA,GAAG,IAAI,IAAI,CAAC7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAC,CAAA;AACnD2iB,YAAAA,GAAG,IAAI,IAAI,CAAC43B,cAAc,CAAC,IAAI,CAAC,CAAA;AAChC13B,YAAAA,UAAU,GAAG,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAA;AAC7B,WAAC,MAAM;AACL,YAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAClB,WAAA;AAAC,OAAA;AAEP,KAAA;AACF,GAAA;EAEAu6C,cAAc,CAACC,aAAsB,EAAU;AAC7C,IAAA,MAAMp4B,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAChD,IAAA,IAAI2iB,GAAG,CAAA;AACP,IAAA,EAAE,IAAI,CAACza,KAAK,CAAClI,GAAG,CAAA;AAChB,IAAA,IACEoiB,EAAE,KAA6B,EAAA,IAC/B,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,OAAuB,EAC5D;AACA,MAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAChB2iB,MAAAA,GAAG,GAAG63B,aAAa,GAAG,IAAI,GAAG,MAAM,CAAA;AACrC,KAAC,MAAM;AACL73B,MAAAA,GAAG,GAAGlvB,MAAM,CAACuiB,YAAY,CAACoM,EAAE,CAAC,CAAA;AAC/B,KAAA;AACA,IAAA,EAAE,IAAI,CAACla,KAAK,CAACyX,OAAO,CAAA;IACpB,IAAI,CAACzX,KAAK,CAAC0X,SAAS,GAAG,IAAI,CAAC1X,KAAK,CAAClI,GAAG,CAAA;AAErC,IAAA,OAAO2iB,GAAG,CAAA;AACZ,GAAA;EAEA83B,aAAa,CAAC7vB,KAAa,EAAQ;IACjC,IAAIjI,GAAG,GAAG,EAAE,CAAA;AACZ,IAAA,IAAIE,UAAU,GAAG,EAAE,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAA;IACjC,SAAS;MACP,IAAI,IAAI,CAACkI,KAAK,CAAClI,GAAG,IAAI,IAAI,CAAC5P,MAAM,EAAE;AACjC,QAAA,MAAM,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAACnD,kBAAkB,EAAE;AAC1C4J,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;AAEA,MAAA,MAAM6b,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;MAChD,IAAIoiB,EAAE,KAAKwI,KAAK,EAAE,MAAA;MAClB,IAAIxI,EAAE,OAAwB,EAAE;AAC9BO,QAAAA,GAAG,IAAI,IAAI,CAAC7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAC,CAAA;AACnD2iB,QAAAA,GAAG,IAAI,IAAI,CAAC23B,aAAa,EAAE,CAAA;AAC3Bz3B,QAAAA,UAAU,GAAG,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAA;AAC7B,OAAC,MAAM,IAAIqf,SAAS,CAAC+C,EAAE,CAAC,EAAE;AACxBO,QAAAA,GAAG,IAAI,IAAI,CAAC7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAC,CAAA;AACnD2iB,QAAAA,GAAG,IAAI,IAAI,CAAC43B,cAAc,CAAC,KAAK,CAAC,CAAA;AACjC13B,QAAAA,UAAU,GAAG,IAAI,CAAC3a,KAAK,CAAClI,GAAG,CAAA;AAC7B,OAAC,MAAM;AACL,QAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAClB,OAAA;AACF,KAAA;AACA2iB,IAAAA,GAAG,IAAI,IAAI,CAAC7D,KAAK,CAAC+C,KAAK,CAACgB,UAAU,EAAE,IAAI,CAAC3a,KAAK,CAAClI,GAAG,EAAE,CAAC,CAAA;AACrD,IAAA,OAAO,IAAI,CAAConB,WAAW,CAAA,GAAA,EAAYzE,GAAG,CAAC,CAAA;AACzC,GAAA;AAEA23B,EAAAA,aAAa,GAAW;AACtB,IAAA,MAAM52B,QAAQ,GAAG,EAAE,IAAI,CAACxb,KAAK,CAAClI,GAAG,CAAA;IACjC,IAAI,IAAI,CAAC4mB,cAAc,CAAC,IAAI,CAAC1e,KAAK,CAAClI,GAAG,CAAC,KAAA,EAAyB,EAAE;AAChE,MAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;MAEhB,IAAIzI,KAAK,GAAG,EAAE,CAAA;MACd,IAAI,IAAI,CAACqvB,cAAc,CAAC,IAAI,CAAC1e,KAAK,CAAClI,GAAG,CAAC,KAAA,GAAyB,EAAE;AAChEzI,QAAAA,KAAK,GAAG,EAAE,CAAA;AACV,QAAA,EAAE,IAAI,CAAC2Q,KAAK,CAAClI,GAAG,CAAA;AAClB,OAAA;AAEA,MAAA,MAAM06C,SAAS,GAAG,IAAI,CAACx2B,OAAO,CAC5B3sB,KAAK,EACK8lB,SAAS,EACJ,KAAK,EACI,MAAM,CAC/B,CAAA;AACD,MAAA,IACEq9B,SAAS,KAAK,IAAI,IAClB,IAAI,CAAC9zB,cAAc,CAAC,IAAI,CAAC1e,KAAK,CAAClI,GAAG,CAAC,OAAwB,EAC3D;AACA,QAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAChB,QAAA,OAAOvM,MAAM,CAAC+vB,aAAa,CAACk3B,SAAS,CAAC,CAAA;AACxC,OAAA;AACF,KAAC,MAAM;MACL,IAAIC,KAAK,GAAG,CAAC,CAAA;MACb,IAAIvuC,IAAI,GAAG,KAAK,CAAA;AAChB,MAAA,OACEuuC,KAAK,EAAE,GAAG,EAAE,IACZ,IAAI,CAACzyC,KAAK,CAAClI,GAAG,GAAG,IAAI,CAAC5P,MAAM,IAC5B,EAAEgc,IAAI,GAAG,IAAI,CAACwa,cAAc,CAAC,IAAI,CAAC1e,KAAK,CAAClI,GAAG,CAAC,IAAA,EAAuB,CAAC,EACpE;AACA,QAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;AAClB,OAAA;AAEA,MAAA,IAAIoM,IAAI,EAAE;AACR,QAAA,MAAMwuC,IAAI,GAAG,IAAI,CAAC97B,KAAK,CAAC+C,KAAK,CAAC6B,QAAQ,EAAE,IAAI,CAACxb,KAAK,CAAClI,GAAG,CAAC,CAAA;AACvD,QAAA,MAAM66C,MAAM,GAAGC,QAAa,CAACF,IAAI,CAAC,CAAA;AAClC,QAAA,EAAE,IAAI,CAAC1yC,KAAK,CAAClI,GAAG,CAAA;AAEhB,QAAA,IAAI66C,MAAM,EAAE;AACV,UAAA,OAAOA,MAAM,CAAA;AACf,SAAA;AACF,OAAA;AACF,KAAA;;AAGA,IAAA,IAAI,CAAC3yC,KAAK,CAAClI,GAAG,GAAG0jB,QAAQ,CAAA;AACzB,IAAA,OAAO,GAAG,CAAA;AACZ,GAAA;;AASAq3B,EAAAA,WAAW,GAAS;AAClB,IAAA,IAAI34B,EAAE,CAAA;AACN,IAAA,MAAM3yB,KAAK,GAAG,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAA;IAC5B,GAAG;AACDoiB,MAAAA,EAAE,GAAG,IAAI,CAACtD,KAAK,CAACC,UAAU,CAAC,EAAE,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,CAAA;AAC9C,KAAC,QAAQiW,gBAAgB,CAACmM,EAAE,CAAC,IAAIA,EAAE,KAAmB,EAAA,EAAA;AACtD,IAAA,OAAO,IAAI,CAACgF,WAAW,MAErB,IAAI,CAACtI,KAAK,CAAC+C,KAAK,CAACpyB,KAAK,EAAE,IAAI,CAACyY,KAAK,CAAClI,GAAG,CAAC,CACxC,CAAA;AACH,GAAA;;AAIAg7C,EAAAA,kBAAkB,GAAoB;AACpC,IAAA,MAAM75C,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;AAC7B,IAAA,IAAI,IAAI,CAACie,KAAK,CAAA,GAAA,CAAY,EAAE;AAC1BxiB,MAAAA,IAAI,CAAChI,IAAI,GAAG,IAAI,CAAC+O,KAAK,CAACxX,KAAK,CAAA;KAC7B,MAAM,IAAI+jB,cAAc,CAAC,IAAI,CAACvM,KAAK,CAAC3U,IAAI,CAAC,EAAE;MAC1C4N,IAAI,CAAChI,IAAI,GAAG4b,cAAc,CAAC,IAAI,CAAC7M,KAAK,CAAC3U,IAAI,CAAC,CAAA;AAC7C,KAAC,MAAM;MACL,IAAI,CAAC4E,UAAU,EAAE,CAAA;AACnB,KAAA;IACA,IAAI,CAAC8e,IAAI,EAAE,CAAA;AACX,IAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;;AAIA85C,EAAAA,sBAAsB,GAAwB;AAC5C,IAAA,MAAM10C,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,MAAMpN,IAAI,GAAG,IAAI,CAAC6hD,kBAAkB,EAAE,CAAA;AACtC,IAAA,IAAI,CAAC,IAAI,CAAC90B,GAAG,CAAU,EAAA,CAAA,EAAE,OAAO/sB,IAAI,CAAA;AAEpC,IAAA,MAAMgI,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;IACvCpF,IAAI,CAACg5C,SAAS,GAAGhhD,IAAI,CAAA;AACrBgI,IAAAA,IAAI,CAAChI,IAAI,GAAG,IAAI,CAAC6hD,kBAAkB,EAAE,CAAA;AACrC,IAAA,OAAO,IAAI,CAACp1C,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;;AAKA+5C,EAAAA,mBAAmB,GAGO;AACxB,IAAA,MAAM30C,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,IAAIpF,IAAI,GAAG,IAAI,CAAC85C,sBAAsB,EAAE,CAAA;AACxC,IAAA,IAAI95C,IAAI,CAAC5N,IAAI,KAAK,mBAAmB,EAAE;AACrC,MAAA,OAAO4N,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,IAAI,CAAC+kB,GAAG,CAAA,EAAA,CAAQ,EAAE;AACvB,MAAA,MAAMmM,OAAO,GAAG,IAAI,CAACQ,WAAW,CAACtsB,QAAQ,CAAC,CAAA;MAC1C8rB,OAAO,CAAC9hC,MAAM,GAAG4Q,IAAI,CAAA;AACrBkxB,MAAAA,OAAO,CAACtB,QAAQ,GAAG,IAAI,CAACiqB,kBAAkB,EAAE,CAAA;MAC5C75C,IAAI,GAAG,IAAI,CAACyE,UAAU,CAACysB,OAAO,EAAE,qBAAqB,CAAC,CAAA;AACxD,KAAA;AACA,IAAA,OAAOlxB,IAAI,CAAA;AACb,GAAA;;AAIAg6C,EAAAA,sBAAsB,GAAiB;AACrC,IAAA,IAAIh6C,IAAI,CAAA;AACR,IAAA,QAAQ,IAAI,CAAC+G,KAAK,CAAC3U,IAAI;AACrB,MAAA,KAAA,CAAA;AACE4N,QAAAA,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;AACvB,QAAA,IAAI,CAAC01C,UAAU,CAAC9lC,KAAE,CAAC5L,KAAK,CAAC,CAAA;QACzB,IAAI,CAACuN,IAAI,EAAE,CAAA;QACX9V,IAAI,GAAG,IAAI,CAACk6C,2BAA2B,CAACl6C,IAAI,EAAEmU,KAAE,CAAC3L,MAAM,CAAC,CAAA;AACxD,QAAA,IAAIxI,IAAI,CAAC2B,UAAU,CAACvP,IAAI,KAAK,oBAAoB,EAAE;AACjD,UAAA,IAAI,CAAC6T,KAAK,CAACmyC,SAAS,CAACC,gBAAgB,EAAE;AAAEnyC,YAAAA,EAAE,EAAElG,IAAAA;AAAK,WAAC,CAAC,CAAA;AACtD,SAAA;AACA,QAAA,OAAOA,IAAI,CAAA;AAEb,MAAA,KAAA,GAAA,CAAA;AACA,MAAA,KAAA,GAAA;QACE,OAAO,IAAI,CAAC04B,aAAa,EAAE,CAAA;AAE7B,MAAA;AACE,QAAA,MAAM,IAAI,CAACzyB,KAAK,CAACmyC,SAAS,CAACO,mBAAmB,EAAE;AAC9CzyC,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AAAC,KAAA;AAET,GAAA;;AAMA+0C,EAAAA,uBAAuB,GAAyB;IAC9C,MAAMn6C,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAAC,IAAI,CAAC3qB,KAAK,CAACoB,aAAa,CAAC,CAAA;AACvD,IAAA,OAAO,IAAI,CAACH,YAAY,CAAChI,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC+G,KAAK,CAAC3B,QAAQ,CAAC,CAAA;AAC3E,GAAA;;EAIAg1C,mBAAmB,CAACp6C,IAA8B,EAAoB;IACpE,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX9V,IAAAA,IAAI,CAAC2B,UAAU,GAAG,IAAI,CAACs1B,eAAe,EAAE,CAAA;AACxC,IAAA,IAAI,CAACgjB,UAAU,CAAC9lC,KAAE,CAACzL,MAAM,CAAC,CAAA;AAC1B,IAAA,IAAI,CAAC3B,KAAK,CAAC8Y,kBAAkB,GAAG,IAAI,CAAA;IACpC,IAAI,CAAC+O,MAAM,CAAW,CAAA,CAAA,CAAA;AAEtB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,GAAA;;AAIAk6C,EAAAA,2BAA2B,CACzBl6C,IAAsC,EACtCq6C,eAA2B,EACD;AAC1B,IAAA,IAAI,IAAI,CAAC73B,KAAK,CAAA,CAAA,CAAW,EAAE;AACzBxiB,MAAAA,IAAI,CAAC2B,UAAU,GAAG,IAAI,CAACw4C,uBAAuB,EAAE,CAAA;AAClD,KAAC,MAAM;AACL,MAAA,MAAMx4C,UAAU,GAAG,IAAI,CAACs1B,eAAe,EAAE,CAAA;MAazCj3B,IAAI,CAAC2B,UAAU,GAAGA,UAAU,CAAA;AAC9B,KAAA;AACA,IAAA,IAAI,CAACs4C,UAAU,CAACI,eAAe,CAAC,CAAA;AAChC,IAAA,IAAI,CAACtzC,KAAK,CAAC8Y,kBAAkB,GAAG,IAAI,CAAA;IACpC,IAAI,CAAC+O,MAAM,CAAW,CAAA,CAAA,CAAA;AAEtB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AACxD,GAAA;;AAIAs6C,EAAAA,iBAAiB,GAAmB;AAClC,IAAA,MAAMt6C,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;AAC7B,IAAA,IAAI,IAAI,CAACie,KAAK,CAAA,CAAA,CAAW,EAAE;AACzB,MAAA,IAAI,CAACy3B,UAAU,CAAC9lC,KAAE,CAAC5L,KAAK,CAAC,CAAA;MACzB,IAAI,CAACuN,IAAI,EAAE,CAAA;MACX,IAAI,CAAC8Y,MAAM,CAAa,EAAA,CAAA,CAAA;AACxB5uB,MAAAA,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAAC8gC,uBAAuB,EAAE,CAAA;AAC9C,MAAA,IAAI,CAACoa,UAAU,CAAC9lC,KAAE,CAAC3L,MAAM,CAAC,CAAA;AAC1B,MAAA,IAAI,CAACzB,KAAK,CAAC8Y,kBAAkB,GAAG,IAAI,CAAA;MACpC,IAAI,CAAC+O,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,MAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,oBAAoB,CAAC,CAAA;AACpD,KAAA;AACAA,IAAAA,IAAI,CAAChI,IAAI,GAAG,IAAI,CAAC8hD,sBAAsB,EAAE,CAAA;AACzC95C,IAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAACw1B,GAAG,CAAO,EAAA,CAAA,GAAG,IAAI,CAACi1B,sBAAsB,EAAE,GAAG,IAAI,CAAA;AACnE,IAAA,OAAO,IAAI,CAACv1C,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,GAAA;;EAIAu6C,wBAAwB,CAACn1C,QAAkB,EAAuB;AAChE,IAAA,MAAMpF,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAC3BtsB,QAAQ,CACT,CAAA;AACD,IAAA,IAAI,IAAI,CAAC2f,GAAG,CAAA,GAAA,CAAc,EAAE;AAE1B,MAAA,OAAO,IAAI,CAACtgB,UAAU,CAACzE,IAAI,EAAE,oBAAoB,CAAC,CAAA;AACpD,KAAA;AACAA,IAAAA,IAAI,CAAChI,IAAI,GAAG,IAAI,CAAC+hD,mBAAmB,EAAE,CAAA;AACtC,IAAA,OAAO,IAAI,CAACS,+BAA+B,CACzCx6C,IAAI,CACL,CAAA;AACH,GAAA;EAEAw6C,+BAA+B,CAC7Bx6C,IAAiC,EACZ;IACrB,MAAM0G,UAA4B,GAAG,EAAE,CAAA;IACvC,OAAO,CAAC,IAAI,CAAC8b,KAAK,CAAA,EAAA,CAAU,IAAI,CAAC,IAAI,CAACA,KAAK,CAAA,GAAA,CAAc,EAAE;AACzD9b,MAAAA,UAAU,CAAChD,IAAI,CAAC,IAAI,CAAC42C,iBAAiB,EAAE,CAAC,CAAA;AAC3C,KAAA;IACAt6C,IAAI,CAAC0G,UAAU,GAAGA,UAAU,CAAA;AAC5B1G,IAAAA,IAAI,CAACy6C,WAAW,GAAG,IAAI,CAAC11B,GAAG,CAAU,EAAA,CAAA,CAAA;IACrC,IAAI,CAAC6J,MAAM,CAAc,GAAA,CAAA,CAAA;AACzB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;;EAIA06C,wBAAwB,CAACt1C,QAAkB,EAAuB;AAChE,IAAA,MAAMpF,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;AACvC,IAAA,IAAI,IAAI,CAAC2f,GAAG,CAAA,GAAA,CAAc,EAAE;AAC1B,MAAA,OAAO,IAAI,CAACtgB,UAAU,CAACzE,IAAI,EAAE,oBAAoB,CAAC,CAAA;AACpD,KAAA;AACAA,IAAAA,IAAI,CAAChI,IAAI,GAAG,IAAI,CAAC+hD,mBAAmB,EAAE,CAAA;IACtC,IAAI,CAACnrB,MAAM,CAAc,GAAA,CAAA,CAAA;AACzB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;;EAKA26C,iBAAiB,CAACv1C,QAAkB,EAAgB;AAClD,IAAA,MAAMpF,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;IACvC,MAAMw1C,QAAQ,GAAG,EAAE,CAAA;AACnB,IAAA,MAAMC,cAAc,GAAG,IAAI,CAACN,wBAAwB,CAACn1C,QAAQ,CAAC,CAAA;IAC9D,IAAI01C,cAAc,GAAG,IAAI,CAAA;AAEzB,IAAA,IAAI,CAACD,cAAc,CAACJ,WAAW,EAAE;AAC/BM,MAAAA,QAAQ,EAAE,SAAS;AACjB,QAAA,QAAQ,IAAI,CAACh0C,KAAK,CAAC3U,IAAI;AACrB,UAAA,KAAA,GAAA;AACEgT,YAAAA,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;YAC9B,IAAI,CAAC0Q,IAAI,EAAE,CAAA;AACX,YAAA,IAAI,IAAI,CAACiP,GAAG,CAAA,EAAA,CAAU,EAAE;AACtB+1B,cAAAA,cAAc,GAAG,IAAI,CAACJ,wBAAwB,CAACt1C,QAAQ,CAAC,CAAA;AACxD,cAAA,MAAM21C,QAAQ,CAAA;AAChB,aAAA;YACAH,QAAQ,CAACl3C,IAAI,CAAC,IAAI,CAACi3C,iBAAiB,CAACv1C,QAAQ,CAAC,CAAC,CAAA;AAC/C,YAAA,MAAA;AAEF,UAAA,KAAA,GAAA;AACEw1C,YAAAA,QAAQ,CAACl3C,IAAI,CAAC,IAAI,CAACg1B,aAAa,EAAE,CAAC,CAAA;AACnC,YAAA,MAAA;AAEF,UAAA,KAAA,CAAA;AAAgB,YAAA;AACd,cAAA,MAAM14B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAExB,CAAA;AACH,cAAA,IAAI,CAAC01C,UAAU,CAAC9lC,KAAE,CAAC5L,KAAK,CAAC,CAAA;cACzB,IAAI,CAACuN,IAAI,EAAE,CAAA;AACX,cAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAa,EAAE;gBAC3Bo4B,QAAQ,CAACl3C,IAAI,CAAC,IAAI,CAAC02C,mBAAmB,CAACp6C,IAAI,CAAC,CAAC,CAAA;AAC/C,eAAC,MAAM;AACL46C,gBAAAA,QAAQ,CAACl3C,IAAI,CACX,IAAI,CAACw2C,2BAA2B,CAACl6C,IAAI,EAAEmU,KAAE,CAACzL,MAAM,CAAC,CAClD,CAAA;AACH,eAAA;AAEA,cAAA,MAAA;AACF,aAAA;AAEA,UAAA;YACE,MAAM,IAAI,CAAC1R,UAAU,EAAE,CAAA;AAAC,SAAA;AAE9B,OAAA;AAEA,MAAA,IACE8hD,UAAU,CAAC+B,cAAc,CAAC,IAC1B,CAAC/B,UAAU,CAACgC,cAAc,CAAC,IAC3BA,cAAc,KAAK,IAAI,EACvB;AACA,QAAA,IAAI,CAAC70C,KAAK,CAACmyC,SAAS,CAACI,yBAAyB,EAAE;AAC9CtyC,UAAAA,EAAE,EAAE40C,cAAAA;AACN,SAAC,CAAC,CAAA;AACJ,OAAC,MAAM,IAAI,CAAChC,UAAU,CAAC+B,cAAc,CAAC,IAAI/B,UAAU,CAACgC,cAAc,CAAC,EAAE;AACpE,QAAA,IAAI,CAAC70C,KAAK,CAACmyC,SAAS,CAACE,wBAAwB,EAAE;AAC7CpyC,UAAAA,EAAE,EAAE40C,cAAc;AAClBvC,UAAAA,cAAc,EAAEQ,mBAAmB,CAAC8B,cAAc,CAAC7iD,IAAI,CAAA;AACzD,SAAC,CAAC,CAAA;AACJ,OAAC,MAAM,IAAI,CAAC8gD,UAAU,CAAC+B,cAAc,CAAC,IAAI,CAAC/B,UAAU,CAACgC,cAAc,CAAC,EAAE;AACrE,QAAA,IACE/B,mBAAmB,CAAC+B,cAAc,CAAC9iD,IAAI,CAAC,KACxC+gD,mBAAmB,CAAC8B,cAAc,CAAC7iD,IAAI,CAAC,EACxC;AACA,UAAA,IAAI,CAACiO,KAAK,CAACmyC,SAAS,CAACE,wBAAwB,EAAE;AAC7CpyC,YAAAA,EAAE,EAAE40C,cAAc;AAClBvC,YAAAA,cAAc,EAAEQ,mBAAmB,CAAC8B,cAAc,CAAC7iD,IAAI,CAAA;AACzD,WAAC,CAAC,CAAA;AACJ,SAAA;AACF,OAAA;AACF,KAAA;AAEA,IAAA,IAAI8gD,UAAU,CAAC+B,cAAc,CAAC,EAAE;MAC9B76C,IAAI,CAACg7C,eAAe,GAAGH,cAAc,CAAA;MACrC76C,IAAI,CAACi7C,eAAe,GAAGH,cAAc,CAAA;AACvC,KAAC,MAAM;MACL96C,IAAI,CAAC66C,cAAc,GAAGA,cAAc,CAAA;MACpC76C,IAAI,CAAC86C,cAAc,GAAGA,cAAc,CAAA;AACtC,KAAA;IACA96C,IAAI,CAAC46C,QAAQ,GAAGA,QAAQ,CAAA;AACxB,IAAA,IAAI,IAAI,CAACp4B,KAAK,CAAA,EAAA,CAAO,EAAE;AACrB,MAAA,MAAM,IAAI,CAACvc,KAAK,CAACmyC,SAAS,CAACS,4BAA4B,EAAE;AACvD3yC,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,OAAO0zC,UAAU,CAAC+B,cAAc,CAAC,GAC7B,IAAI,CAACp2C,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,GACpC,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,YAAY,CAAC,CAAA;AACzC,GAAA;;AAIAk7C,EAAAA,eAAe,GAAiB;AAC9B,IAAA,MAAM91C,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;IACpC,IAAI,CAAC0Q,IAAI,EAAE,CAAA;AACX,IAAA,OAAO,IAAI,CAAC6kC,iBAAiB,CAACv1C,QAAQ,CAAC,CAAA;AACzC,GAAA;EAEA60C,UAAU,CAACkB,UAAsB,EAAE;IACjC,MAAM;AAAElnC,MAAAA,OAAAA;KAAS,GAAG,IAAI,CAAClN,KAAK,CAAA;IAC9BkN,OAAO,CAACA,OAAO,CAAChlB,MAAM,GAAG,CAAC,CAAC,GAAGksD,UAAU,CAAA;AAC1C,GAAA;;EAMAziB,aAAa,CAACrzB,mBAA6C,EAAgB;AACzE,IAAA,IAAI,IAAI,CAACmd,KAAK,CAAA,GAAA,CAAY,EAAE;MAC1B,OAAO,IAAI,CAACphB,YAAY,CAAC,IAAI,CAAC2F,KAAK,CAACxX,KAAK,EAAE,SAAS,CAAC,CAAA;AACvD,KAAC,MAAM,IAAI,IAAI,CAACizB,KAAK,KAAgB,EAAE;MACrC,OAAO,IAAI,CAAC04B,eAAe,EAAE,CAAA;KAC9B,MAAM,IACL,IAAI,CAAC14B,KAAK,CAAO,EAAA,CAAA,IACjB,IAAI,CAAC7E,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,CAAC,OAA8B,EACnE;MAGA,IAAI,CAAC8nB,YAAY,CAAgB,GAAA,CAAA,CAAA;MACjC,OAAO,IAAI,CAACu0B,eAAe,EAAE,CAAA;AAC/B,KAAC,MAAM;AACL,MAAA,OAAO,KAAK,CAACxiB,aAAa,CAACrzB,mBAAmB,CAAC,CAAA;AACjD,KAAA;AACF,GAAA;AAEA2gB,EAAAA,SAAS,GAAG;AACV,IAAA,MAAMf,UAAU,GAAG,IAAI,CAACA,UAAU,EAAE,CAAA;IACpC,IAAI,CAACA,UAAU,CAAC5c,aAAa,EAAE,KAAK,CAAC2d,SAAS,EAAE,CAAA;AAClD,GAAA;EAEAE,gBAAgB,CAACz1B,IAAY,EAAQ;AACnC,IAAA,MAAMwjB,OAAO,GAAG,IAAI,CAACgR,UAAU,EAAE,CAAA;AAEjC,IAAA,IAAIhR,OAAO,KAAKE,KAAE,CAACzL,MAAM,EAAE;MACzB,OAAO,IAAI,CAACwwC,YAAY,EAAE,CAAA;AAC5B,KAAA;IAEA,IAAIjlC,OAAO,KAAKE,KAAE,CAAC3L,MAAM,IAAIyL,OAAO,KAAKE,KAAE,CAAC1L,MAAM,EAAE;AAClD,MAAA,IAAIkM,iBAAiB,CAAClkB,IAAI,CAAC,EAAE;QAC3B,OAAO,IAAI,CAACmpD,WAAW,EAAE,CAAA;AAC3B,OAAA;MAEA,IAAInpD,IAAI,OAA0B,EAAE;AAClC,QAAA,EAAE,IAAI,CAACsW,KAAK,CAAClI,GAAG,CAAA;QAChB,OAAO,IAAI,CAAConB,WAAW,CAAc,GAAA,CAAA,CAAA;AACvC,OAAA;AAEA,MAAA,IACE,CAACx1B,IAAI,KAA4B,EAAA,IAAIA,IAAI,KAAA,EAAyB,KAClEwjB,OAAO,KAAKE,KAAE,CAAC3L,MAAM,EACrB;AACA,QAAA,OAAO,IAAI,CAAC8wC,aAAa,CAAC7oD,IAAI,CAAC,CAAA;AACjC,OAAA;AACF,KAAA;IAEA,IACEA,IAAI,KAAuB,EAAA,IAC3B,IAAI,CAACsW,KAAK,CAAC8Y,kBAAkB,IAC7B,IAAI,CAAClC,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,KAAA,EAA8B,EACvE;AACA,MAAA,EAAE,IAAI,CAACkI,KAAK,CAAClI,GAAG,CAAA;MAChB,OAAO,IAAI,CAAConB,WAAW,CAAgB,GAAA,CAAA,CAAA;AACzC,KAAA;AAEA,IAAA,OAAO,KAAK,CAACC,gBAAgB,CAACz1B,IAAI,CAAC,CAAA;AACrC,GAAA;EAEA4Y,aAAa,CAACqd,QAAmB,EAAQ;IACvC,MAAM;MAAEzS,OAAO;AAAE7hB,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;AACpC,IAAA,IAAI3U,IAAI,KAAA,EAAa,IAAIs0B,QAAQ,QAAmB,EAAE;MAGpDzS,OAAO,CAACuJ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAErJ,KAAE,CAAC1L,MAAM,CAAC,CAAA;AAChC,MAAA,IAAI,CAAC1B,KAAK,CAAC8Y,kBAAkB,GAAG,KAAK,CAAA;AACvC,KAAC,MAAM,IAAIztB,IAAI,KAAA,GAAmB,EAAE;AAElC6hB,MAAAA,OAAO,CAACvQ,IAAI,CAACyQ,KAAE,CAAC3L,MAAM,CAAC,CAAA;AACzB,KAAC,MAAM,IAAIpW,IAAI,KAAA,GAAiB,EAAE;MAChC,MAAMovB,GAAG,GAAGvN,OAAO,CAACA,OAAO,CAAChlB,MAAM,GAAG,CAAC,CAAC,CAAA;AACvC,MAAA,IAAKuyB,GAAG,KAAKrN,KAAE,CAAC3L,MAAM,IAAIke,QAAQ,KAAa,EAAA,IAAKlF,GAAG,KAAKrN,KAAE,CAAC1L,MAAM,EAAE;QACrEwL,OAAO,CAACC,GAAG,EAAE,CAAA;AACb,QAAA,IAAI,CAACnN,KAAK,CAAC8Y,kBAAkB,GAC3B5L,OAAO,CAACA,OAAO,CAAChlB,MAAM,GAAG,CAAC,CAAC,KAAKklB,KAAE,CAACzL,MAAM,CAAA;AAC7C,OAAC,MAAM;AACL,QAAA,IAAI,CAACuxC,UAAU,CAAC9lC,KAAE,CAACzL,MAAM,CAAC,CAAA;AAC1B,QAAA,IAAI,CAAC3B,KAAK,CAAC8Y,kBAAkB,GAAG,IAAI,CAAA;AACtC,OAAA;AACF,KAAC,MAAM;MACL,IAAI,CAAC9Y,KAAK,CAAC8Y,kBAAkB,GAAG5M,0BAA0B,CAAC7gB,IAAI,CAAC,CAAA;AAClE,KAAA;AACF,GAAA;AACF,CAAC;;AClnBH,MAAMgpD,eAAe,SAASniC,KAAK,CAAC;AAAA,EAAA,WAAA,CAAA,GAAA,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,IAAA,IAAA,CAClC3Q,KAAK,GAAgB,IAAI/K,GAAG,EAAE,CAAA;AAAA,IAAA,IAAA,CAG9B89C,KAAK,GAAgB,IAAI99C,GAAG,EAAE,CAAA;AAAA,IAAA,IAAA,CAG9B+9C,UAAU,GAAgB,IAAI/9C,GAAG,EAAE,CAAA;AAAA,IAAA,IAAA,CAGnCg+C,OAAO,GAAgB,IAAIh+C,GAAG,EAAE,CAAA;AAAA,IAAA,IAAA,CAMhCi+C,kBAAkB,GAAgB,IAAIj+C,GAAG,EAAE,CAAA;AAAA,GAAA;AAC7C,CAAA;;AAKe,MAAMk+C,sBAAsB,SAASpiC,YAAY,CAAkB;AAAA,EAAA,WAAA,CAAA,GAAA,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAA,IAAA,CAAA,CAAA;IAAA,IAChFqiC,CAAAA,YAAY,GAAkB,EAAE,CAAA;AAAA,GAAA;EAEhCrhC,WAAW,CAAC5Z,KAAiB,EAAmB;IAC9C,IAAI,CAACi7C,YAAY,CAACh4C,IAAI,CAAC,IAAInG,GAAG,EAAE,CAAC,CAAA;;AAEjC,IAAA,OAAO,IAAI69C,eAAe,CAAC36C,KAAK,CAAC,CAAA;AACnC,GAAA;EAEA6Z,KAAK,CAAC7Z,KAAa,EAAQ;IACzB,IAAIA,KAAK,IAAIkW,eAAe,EAAE;MAC5B,IAAI,CAAC+kC,YAAY,CAACh4C,IAAI,CAAC,IAAInG,GAAG,EAAE,CAAC,CAAA;AACnC,KAAA;AAEA,IAAA,KAAK,CAAC+c,KAAK,CAAC7Z,KAAK,CAAC,CAAA;AACpB,GAAA;AAEA8Z,EAAAA,IAAI,GAAG;AACL,IAAA,MAAM9Z,KAAK,GAAG,KAAK,CAAC8Z,IAAI,EAAE,CAAA;IAE1B,IAAI9Z,KAAK,IAAIkW,eAAe,EAAE;AAC5B,MAAA,IAAI,CAAC+kC,YAAY,CAACxnC,GAAG,EAAE,CAAA;AACzB,KAAA;AAEA,IAAA,OAAOzT,KAAK,CAAA;AACd,GAAA;AAEAk7C,EAAAA,SAAS,CAAC3jD,IAAY,EAAE4jD,WAAqB,EAAE;AAC7C,IAAA,MAAMh5B,GAAG,GAAG,IAAI,CAAC84B,YAAY,CAACzsD,MAAM,CAAA;AACpC,IAAA,IAAI,IAAI,CAACysD,YAAY,CAAC94B,GAAG,GAAG,CAAC,CAAC,CAACpN,GAAG,CAACxd,IAAI,CAAC,EAAE;AACxC,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,IAAI,CAAC4jD,WAAW,IAAIh5B,GAAG,GAAG,CAAC,EAAE;AAC3B,MAAA,KAAK,IAAInzB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmzB,GAAG,GAAG,CAAC,EAAEnzB,CAAC,EAAE,EAAE;AAChC,QAAA,IAAI,IAAI,CAACisD,YAAY,CAACjsD,CAAC,CAAC,CAAC+lB,GAAG,CAACxd,IAAI,CAAC,EAAE,OAAO,IAAI,CAAA;AACjD,OAAA;AACF,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEAyiB,EAAAA,WAAW,CAACziB,IAAY,EAAE0iB,WAAyB,EAAElc,GAAa,EAAE;IAClE,IAAIkc,WAAW,GAAGjD,oBAAoB,EAAE;MACtC,IAAI,IAAI,CAACkkC,SAAS,CAAC3jD,IAAI,EAAE,IAAI,CAAC,EAAE;QAC9B,IAAI,CAACshB,MAAM,CAACrT,KAAK,CAACxG,MAAM,CAAChD,gBAAgB,EAAE;AACzCyJ,UAAAA,EAAE,EAAE1H,GAAG;AACP/P,UAAAA,cAAc,EAAEuJ,IAAAA;AAClB,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,IAAI,CAAC0jD,YAAY,CAAC,IAAI,CAACA,YAAY,CAACzsD,MAAM,GAAG,CAAC,CAAC,CAAC2rB,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AACzD,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMwiB,KAAK,GAAG,IAAI,CAACd,YAAY,EAAE,CAAA;IACjC,IAAIgB,WAAW,GAAGnD,yBAAyB,EAAE;AAC3C,MAAA,IAAI,CAACsD,kBAAkB,CAACL,KAAK,EAAExiB,IAAI,CAAC,CAAA;AACpCwiB,MAAAA,KAAK,CAACghC,kBAAkB,CAAC5gC,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AAClC,MAAA,OAAA;AACF,KAAA;IAEA,KAAK,CAACyiB,WAAW,CAACziB,IAAI,EAAE0iB,WAAW,EAAElc,GAAG,CAAC,CAAA;IAEzC,IAAIkc,WAAW,GAAG5D,cAAc,EAAE;AAChC,MAAA,IAAI,EAAE4D,WAAW,GAAG7D,eAAe,CAAC,EAAE;QAEpC,IAAI,CAAC8D,yBAAyB,CAACH,KAAK,EAAExiB,IAAI,EAAE0iB,WAAW,EAAElc,GAAG,CAAC,CAAA;AAC7D,QAAA,IAAI,CAACqc,kBAAkB,CAACL,KAAK,EAAExiB,IAAI,CAAC,CAAA;AACtC,OAAA;AACAwiB,MAAAA,KAAK,CAAClS,KAAK,CAACsS,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AACvB,KAAA;IACA,IAAI0iB,WAAW,GAAGrD,kBAAkB,EAAEmD,KAAK,CAAC6gC,KAAK,CAACzgC,GAAG,CAAC5iB,IAAI,CAAC,CAAA;IAC3D,IAAI0iB,WAAW,GAAGpD,wBAAwB,EAAEkD,KAAK,CAAC8gC,UAAU,CAAC1gC,GAAG,CAAC5iB,IAAI,CAAC,CAAA;IACtE,IAAI0iB,WAAW,GAAGtD,gBAAgB,EAAEoD,KAAK,CAAC+gC,OAAO,CAAC3gC,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AAC7D,GAAA;AAEA+iB,EAAAA,mBAAmB,CACjBP,KAAsB,EACtBxiB,IAAY,EACZ0iB,WAAyB,EAChB;IACT,IAAIF,KAAK,CAAC6gC,KAAK,CAAC7lC,GAAG,CAACxd,IAAI,CAAC,EAAE;MACzB,IAAI0iB,WAAW,GAAGrD,kBAAkB,EAAE;AAGpC,QAAA,MAAMwkC,OAAO,GAAG,CAAC,EAAEnhC,WAAW,GAAGpD,wBAAwB,CAAC,CAAA;QAC1D,MAAMwkC,QAAQ,GAAGthC,KAAK,CAAC8gC,UAAU,CAAC9lC,GAAG,CAACxd,IAAI,CAAC,CAAA;QAC3C,OAAO6jD,OAAO,KAAKC,QAAQ,CAAA;AAC7B,OAAA;AACA,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,IAAIphC,WAAW,GAAGtD,gBAAgB,IAAIoD,KAAK,CAAC+gC,OAAO,CAAC/lC,GAAG,CAACxd,IAAI,CAAC,EAAE;MAC7D,IAAIwiB,KAAK,CAACrB,OAAO,CAAC3D,GAAG,CAACxd,IAAI,CAAC,EAAE;AAE3B,QAAA,OAAO,CAAC,EAAE0iB,WAAW,GAAG7D,eAAe,CAAC,CAAA;AAC1C,OAAC,MAAM;AAEL,QAAA,OAAO,KAAK,CAAA;AACd,OAAA;AACF,KAAA;AACA,IAAA,IAAI6D,WAAW,GAAG5D,cAAc,IAAI0D,KAAK,CAAClS,KAAK,CAACkN,GAAG,CAACxd,IAAI,CAAC,EAAE;AACzD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;IAEA,OAAO,KAAK,CAAC+iB,mBAAmB,CAACP,KAAK,EAAExiB,IAAI,EAAE0iB,WAAW,CAAC,CAAA;AAC5D,GAAA;EAEAO,gBAAgB,CAAClX,EAAgB,EAAE;IACjC,MAAM;AAAE/L,MAAAA,IAAAA;AAAK,KAAC,GAAG+L,EAAE,CAAA;AAEnB,IAAA,IAAI,IAAI,CAAC43C,SAAS,CAAC3jD,IAAI,CAAC,EAAE,OAAA;AAE1B,IAAA,MAAM4qB,GAAG,GAAG,IAAI,CAACrJ,UAAU,CAACtqB,MAAM,CAAA;AAClC,IAAA,KAAK,IAAIQ,CAAC,GAAGmzB,GAAG,GAAG,CAAC,EAAEnzB,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AACjC,MAAA,MAAM+qB,KAAK,GAAG,IAAI,CAACjB,UAAU,CAAC9pB,CAAC,CAAC,CAAA;AAChC,MAAA,IAAI+qB,KAAK,CAAClS,KAAK,CAACkN,GAAG,CAACxd,IAAI,CAAC,IAAIwiB,KAAK,CAACghC,kBAAkB,CAAChmC,GAAG,CAACxd,IAAI,CAAC,EAAE,OAAA;AACnE,KAAA;AAEA,IAAA,KAAK,CAACijB,gBAAgB,CAAClX,EAAE,CAAC,CAAA;AAC5B,GAAA;AACF;;AChHA,MAAMg4C,QAAM,GAAG,CAAe3sD,MAAS,EAAEC,GAAY,KACnDQ,MAAM,CAACmsD,cAAc,CAACzX,IAAI,CAACn1C,MAAM,EAAEC,GAAG,CAAC,IAAID,MAAM,CAACC,GAAG,CAAC,CAAA;AAWxD,SAAS4sD,OAAO,CAAIC,CAAY,EAAK;EACnC,IAAIA,CAAC,IAAI,IAAI,EAAE;AACb,IAAA,MAAM,IAAIxlB,KAAK,CAAE,CAAawlB,WAAAA,EAAAA,CAAE,SAAQ,CAAC,CAAA;AAC3C,GAAA;AACA,EAAA,OAAOA,CAAC,CAAA;AACV,CAAA;AAEA,SAASC,MAAM,CAACD,CAAU,EAAQ;EAChC,IAAI,CAACA,CAAC,EAAE;AACN,IAAA,MAAM,IAAIxlB,KAAK,CAAC,aAAa,CAAC,CAAA;AAChC,GAAA;AACF,CAAA;AAgBA,MAAM0lB,QAAQ,GAAGt9C,cAAe,CAAA,UAAA,CAAW,CAAC;AAC1Cu9C,EAAAA,+BAA+B,EAAE,CAAC;AAAEC,IAAAA,UAAAA;GAAoC,KACrE,CAAUA,QAAAA,EAAAA,UAAW,CAA+D,8DAAA,CAAA;AACvFC,EAAAA,8BAA8B,EAAE,CAAC;AAC/BC,IAAAA,YAAAA;GAGD,KACE,CAAYA,UAAAA,EAAAA,YAAa,CAA4D,2DAAA,CAAA;AACxFC,EAAAA,iCAAiC,EAC/B,6DAA6D;AAC/DC,EAAAA,+BAA+B,EAAE,0CAA0C;AAC3EC,EAAAA,wBAAwB,EACtB,qDAAqD;AACvDC,EAAAA,qBAAqB,EAAE,mDAAmD;AAC1EC,EAAAA,sBAAsB,EAAE,oDAAoD;AAC5EC,EAAAA,mEAAmE,EACjE,4GAA4G;AAC9GC,EAAAA,4BAA4B,EAC1B,6DAA6D;AAC/DC,EAAAA,eAAe,EAAE,CAAC;AAAExqD,IAAAA,IAAAA;GAA+B,KAChD,CAA8BA,4BAAAA,EAAAA,IAAK,CAAM,KAAA,CAAA;AAC5CyqD,EAAAA,+BAA+B,EAC7B,mDAAmD;AACrDC,EAAAA,gCAAgC,EAC9B,2DAA2D;EAC7DC,8BAA8B;EAG5B,CAAC;AAAEC,IAAAA,QAAAA;AAAwC,GAAC,KACzC,CAAqC,oCAAA,CAAA;AAC1CC,EAAAA,iBAAiB,EAAE,CAAC;AAAED,IAAAA,QAAAA;GAAoC,KACvD,CAAuBA,qBAAAA,EAAAA,QAAS,CAAG,EAAA,CAAA;AAGtCE,EAAAA,uBAAuB,EAAE,CAAC;AAAE1/C,IAAAA,KAAAA;GAA4C,KACrE,CAAGA,CAAAA,EAAAA,KAAM,CAAwB,uBAAA,CAAA;AACpC2/C,EAAAA,kBAAkB,EAAE,qCAAqC;AACzDC,EAAAA,mBAAmB,EAAE,sCAAsC;AAC3DC,EAAAA,iCAAiC,EAC/B,8DAA8D;AAChEC,EAAAA,wBAAwB,EAAE,4CAA4C;AACtEnqB,EAAAA,6BAA6B,EAC3B,4DAA4D;AAC9DoqB,EAAAA,qBAAqB,EAAE,CAAC;AACtBC,IAAAA,SAAAA;GAGD,KACE,CAAGA,CAAAA,EAAAA,SAAS,CAAC,CAAC,CAAE,CAAA,gCAAA,EAAkCA,SAAS,CAAC,CAAC,CAAE,CAAY,WAAA,CAAA;AAC9EC,EAAAA,yBAAyB,EACvB,uDAAuD;AACzDC,EAAAA,8BAA8B,EAAE,CAAC;AAC/BV,IAAAA,QAAAA;GAGD,KACE,CAA2DA,yDAAAA,EAAAA,QAAS,CAAI,GAAA,CAAA;AAC3EW,EAAAA,wBAAwB,EACtB,sDAAsD;AACxDC,EAAAA,yBAAyB,EACvB,0DAA0D;AAC5DC,EAAAA,uBAAuB,EACrB,qDAAqD;AACvDC,EAAAA,qCAAqC,EACnC,mDAAmD;AACrDC,EAAAA,2BAA2B,EAAE,CAAC;AAAEf,IAAAA,QAAAA;GAAoC,KACjE,CAAGA,CAAAA,EAAAA,QAAS,CAA2C,0CAAA,CAAA;AAC1DgB,EAAAA,8BAA8B,EAAE,CAAC;AAAEhB,IAAAA,QAAAA;GAAoC,KACpE,CAAGA,CAAAA,EAAAA,QAAS,CAA8C,6CAAA,CAAA;AAC7DiB,EAAAA,uCAAuC,EAAE,CAAC;AACxCjB,IAAAA,QAAAA;GAGD,KACE,CAAGA,CAAAA,EAAAA,QAAS,CAAoF,mFAAA,CAAA;AACnGkB,EAAAA,qBAAqB,EAAE,CAAC;AACtBC,IAAAA,gBAAAA;GAGD,KACE,CAAGA,CAAAA,EAAAA,gBAAgB,CAAC,CAAC,CAAE,CAAA,yBAAA,EAA2BA,gBAAgB,CAAC,CAAC,CAAE,CAAY,WAAA,CAAA;EACrFC,iDAAiD,EAC/C,6DAA6D,GAC7D,gGAAgG;AAClGC,EAAAA,uBAAuB,EACrB,yDAAyD;AAC3DC,EAAAA,oBAAoB,EAClB,6DAA6D;AAC/DC,EAAAA,gCAAgC,EAC9B,0DAA0D;AAC5DC,EAAAA,iCAAiC,EAC/B,4DAA4D;AAC9DC,EAAAA,wCAAwC,EACtC,kFAAkF;AACpFC,EAAAA,0BAA0B,EACxB,uDAAuD;AACzDC,EAAAA,qBAAqB,EACnB,4GAA4G;AAC9G/qB,EAAAA,iBAAiB,EACf,gFAAgF;AAClFgrB,EAAAA,yBAAyB,EACvB,uDAAuD;AACzDC,EAAAA,8BAA8B,EAAE,CAAC;AAC/B7B,IAAAA,QAAAA;GAGD,KACE,CAA2DA,yDAAAA,EAAAA,QAAS,CAAI,GAAA,CAAA;AAC3E8B,EAAAA,0BAA0B,EACxB,mFAAmF;AACrFC,EAAAA,sBAAsB,EACpB,gHAAgH;AAClHC,EAAAA,qBAAqB,EACnB,mGAAmG;AAErGC,EAAAA,qCAAqC,EACnC,qDAAqD;AACvDC,EAAAA,iCAAiC,EAC/B,8CAA8C;AAChDC,EAAAA,8BAA8B,EAC5B,wDAAwD;AAC1DC,EAAAA,uCAAuC,EAAE,CAAC;AACxCC,IAAAA,iBAAAA;AAGF,GAAC,KACE,CAAA,sBAAA,EAAwBA,iBAAkB,CAAA,+CAAA,EAAiDA,iBAAkB,CAAI,GAAA,CAAA;AACpHC,EAAAA,6BAA6B,EAC3B,+CAA+C;AACjDC,EAAAA,yBAAyB,EACvB,mHAAmH;AACrHC,EAAAA,sCAAsC,EACpC,kFAAkF;AACpFC,EAAAA,+BAA+B,EAC7B,0GAA0G;AAC5GC,EAAAA,+BAA+B,EAC7B,0GAA0G;AAC5GC,EAAAA,2BAA2B,EACzB,uEAAuE;AACzEC,EAAAA,kBAAkB,EAChB,8EAA8E;AAChFC,EAAAA,wBAAwB,EAAE,wCAAwC;AAClEC,EAAAA,6BAA6B,EAAE,6CAA6C;AAC5EC,EAAAA,6BAA6B,EAC3B,qDAAqD;AACvDC,EAAAA,gCAAgC,EAC9B,mEAAmE;AACrEC,EAAAA,iCAAiC,EAAE,CAAC;AAAEjuD,IAAAA,IAAAA;GAAwB,KAC3D,yFAAwFA,IAAK,CAAA,CAAA,CAAA;AAClG,CAAC,CAAC,CAAA;;AAMF,SAASkuD,mBAAmB,CAC1B/wD,KAAa,EAC2B;AACxC,EAAA,QAAQA,KAAK;AACX,IAAA,KAAK,KAAK;AACR,MAAA,OAAO,cAAc,CAAA;AACvB,IAAA,KAAK,SAAS;AACZ,MAAA,OAAO,kBAAkB,CAAA;AAC3B,IAAA,KAAK,QAAQ;AACX,MAAA,OAAO,iBAAiB,CAAA;AAC1B,IAAA,KAAK,OAAO;AACV,MAAA,OAAO,gBAAgB,CAAA;AACzB,IAAA,KAAK,QAAQ;AACX,MAAA,OAAO,iBAAiB,CAAA;AAC1B,IAAA,KAAK,QAAQ;AACX,MAAA,OAAO,iBAAiB,CAAA;AAC1B,IAAA,KAAK,QAAQ;AACX,MAAA,OAAO,iBAAiB,CAAA;AAC1B,IAAA,KAAK,QAAQ;AACX,MAAA,OAAO,iBAAiB,CAAA;AAC1B,IAAA,KAAK,WAAW;AACd,MAAA,OAAO,oBAAoB,CAAA;AAC7B,IAAA,KAAK,SAAS;AACZ,MAAA,OAAO,kBAAkB,CAAA;AAC3B,IAAA;AACE,MAAA,OAAO2sB,SAAS,CAAA;AAAC,GAAA;AAEvB,CAAA;AAEA,SAASqkC,kBAAkB,CAACnD,QAAgB,EAA+B;EACzE,OACEA,QAAQ,KAAK,SAAS,IAAIA,QAAQ,KAAK,QAAQ,IAAIA,QAAQ,KAAK,WAAW,CAAA;AAE/E,CAAA;AAEA,SAASoD,uBAAuB,CAC9BpD,QAAgB,EACmB;AACnC,EAAA,OAAOA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAK,KAAK,CAAA;AAChD,CAAA;AASA,iBAAA,CAAgBn9C,UAA0D,IACxE,MAAMwgD,qBAAqB,SAASxgD,UAAU,CAAmB;AAC/DkwB,EAAAA,eAAe,GAEb;AACA,IAAA,OAAOsrB,sBAAsB,CAAA;AAC/B,GAAA;AAEAiF,EAAAA,cAAc,GAAY;AAGxB,IAAA,OAAO7tC,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,CAAA;AAC3C,GAAA;AAEAuuD,EAAAA,wBAAwB,GAAG;AACzB,IAAA,OACE,CAAC,IAAI,CAACn+B,KAAK,GAAa,IACtB,IAAI,CAACA,KAAK,GAAW,IACrB,IAAI,CAACA,KAAK,IAAS,IACnB,IAAI,CAACA,KAAK,IAAa,IACvB,IAAI,CAACA,KAAK,KAAgB,IAC1B,IAAI,CAACmN,qBAAqB,EAAE,KAC9B,CAAC,IAAI,CAACpB,qBAAqB,EAAE,CAAA;AAEjC,GAAA;AAEAqyB,EAAAA,4BAA4B,GAAG;IAK7B,IAAI,CAAC9qC,IAAI,EAAE,CAAA;IACX,OAAO,IAAI,CAAC6qC,wBAAwB,EAAE,CAAA;AACxC,GAAA;;AAGAE,EAAAA,eAAe,CACbC,gBAAqB,EACrBC,6BAAuC,EACjB;AACtB,IAAA,IAAI,CAACluC,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,IAAI,IAAI,CAAC2U,KAAK,CAAC3U,IAAI,OAAW,EAAE;AACrE,MAAA,OAAO8pB,SAAS,CAAA;AAClB,KAAA;AAEA,IAAA,MAAMkhC,QAAQ,GAAG,IAAI,CAACr2C,KAAK,CAACxX,KAAK,CAAA;IACjC,IAAIuxD,gBAAgB,CAACh9B,OAAO,CAACs5B,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AAC7C,MAAA,IAAI2D,6BAA6B,IAAI,IAAI,CAACC,uBAAuB,EAAE,EAAE;AACnE,QAAA,OAAO9kC,SAAS,CAAA;AAClB,OAAA;AACA,MAAA,IAAI,IAAI,CAAC+kC,UAAU,CAAC,IAAI,CAACL,4BAA4B,CAACM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AACjE,QAAA,OAAO9D,QAAQ,CAAA;AACjB,OAAA;AACF,KAAA;AACA,IAAA,OAAOlhC,SAAS,CAAA;AAClB,GAAA;;AAOAilC,EAAAA,gBAAgB,CAAC;IACfC,QAAQ;IACRN,gBAAgB;IAChBO,mBAAmB;IACnBN,6BAA6B;IAC7BO,aAAa,GAAGlF,QAAQ,CAAC+B,2BAAAA;AAQ3B,GAAC,EAAQ;IACP,MAAMoD,YAAY,GAAG,CACnB/iD,GAAa,EACb4+C,QAAoB,EACpBoE,MAAkB,EAClBC,KAAiB,KACd;MACH,IAAIrE,QAAQ,KAAKoE,MAAM,IAAIJ,QAAQ,CAACK,KAAK,CAAC,EAAE;AAC1C,QAAA,IAAI,CAACx7C,KAAK,CAACm2C,QAAQ,CAACkC,qBAAqB,EAAE;AACzCp4C,UAAAA,EAAE,EAAE1H,GAAG;AACP+/C,UAAAA,gBAAgB,EAAE,CAACiD,MAAM,EAAEC,KAAK,CAAA;AAClC,SAAC,CAAC,CAAA;AACJ,OAAA;KACD,CAAA;IACD,MAAMC,YAAY,GAAG,CACnBljD,GAAa,EACb4+C,QAAoB,EACpBuE,IAAgB,EAChBC,IAAgB,KACb;AACH,MAAA,IACGR,QAAQ,CAACO,IAAI,CAAC,IAAIvE,QAAQ,KAAKwE,IAAI,IACnCR,QAAQ,CAACQ,IAAI,CAAC,IAAIxE,QAAQ,KAAKuE,IAAK,EACrC;AACA,QAAA,IAAI,CAAC17C,KAAK,CAACm2C,QAAQ,CAACuB,qBAAqB,EAAE;AACzCz3C,UAAAA,EAAE,EAAE1H,GAAG;AACPo/C,UAAAA,SAAS,EAAE,CAAC+D,IAAI,EAAEC,IAAI,CAAA;AACxB,SAAC,CAAC,CAAA;AACJ,OAAA;KACD,CAAA;IAED,SAAS;MACP,MAAM;AAAEx8C,QAAAA,QAAAA;OAAU,GAAG,IAAI,CAAC2B,KAAK,CAAA;AAC/B,MAAA,MAAMq2C,QAAuC,GAAG,IAAI,CAACyD,eAAe,CAClEC,gBAAgB,CAAC59C,MAAM,CAACm+C,mBAAmB,WAAnBA,mBAAmB,GAAI,EAAE,CAAC,EAClDN,6BAA6B,CAC9B,CAAA;MAED,IAAI,CAAC3D,QAAQ,EAAE,MAAA;AAEf,MAAA,IAAImD,kBAAkB,CAACnD,QAAQ,CAAC,EAAE;QAChC,IAAIgE,QAAQ,CAACS,aAAa,EAAE;AAC1B,UAAA,IAAI,CAAC57C,KAAK,CAACm2C,QAAQ,CAACe,8BAA8B,EAAE;AAClDj3C,YAAAA,EAAE,EAAEd,QAAQ;AACZg4C,YAAAA,QAAAA;AACF,WAAC,CAAC,CAAA;AACJ,SAAC,MAAM;UACLmE,YAAY,CAACn8C,QAAQ,EAAEg4C,QAAQ,EAAEA,QAAQ,EAAE,UAAU,CAAC,CAAA;UACtDmE,YAAY,CAACn8C,QAAQ,EAAEg4C,QAAQ,EAAEA,QAAQ,EAAE,QAAQ,CAAC,CAAA;UACpDmE,YAAY,CAACn8C,QAAQ,EAAEg4C,QAAQ,EAAEA,QAAQ,EAAE,UAAU,CAAC,CAAA;UAEtDgE,QAAQ,CAACS,aAAa,GAAGzE,QAAQ,CAAA;AACnC,SAAA;AACF,OAAC,MAAM,IAAIoD,uBAAuB,CAACpD,QAAQ,CAAC,EAAE;AAC5C,QAAA,IAAIgE,QAAQ,CAAChE,QAAQ,CAAC,EAAE;AACtB,UAAA,IAAI,CAACn3C,KAAK,CAACm2C,QAAQ,CAACiB,iBAAiB,EAAE;AAAEn3C,YAAAA,EAAE,EAAEd,QAAQ;AAAEg4C,YAAAA,QAAAA;AAAS,WAAC,CAAC,CAAA;AACpE,SAAA;AACAgE,QAAAA,QAAQ,CAAChE,QAAQ,CAAC,GAAG,IAAI,CAAA;QAEzBmE,YAAY,CAACn8C,QAAQ,EAAEg4C,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAC/C,OAAC,MAAM;QACL,IAAIvtD,MAAM,CAACmsD,cAAc,CAACzX,IAAI,CAAC6c,QAAQ,EAAEhE,QAAQ,CAAC,EAAE;AAClD,UAAA,IAAI,CAACn3C,KAAK,CAACm2C,QAAQ,CAACiB,iBAAiB,EAAE;AAAEn3C,YAAAA,EAAE,EAAEd,QAAQ;AAAEg4C,YAAAA,QAAAA;AAAS,WAAC,CAAC,CAAA;AACpE,SAAC,MAAM;UACLmE,YAAY,CAACn8C,QAAQ,EAAEg4C,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;UACtDmE,YAAY,CAACn8C,QAAQ,EAAEg4C,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;UACtDmE,YAAY,CAACn8C,QAAQ,EAAEg4C,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;UACxDmE,YAAY,CAACn8C,QAAQ,EAAEg4C,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;UAExDsE,YAAY,CAACt8C,QAAQ,EAAEg4C,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;UACvDsE,YAAY,CAACt8C,QAAQ,EAAEg4C,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;AACxD,SAAA;AACAgE,QAAAA,QAAQ,CAAChE,QAAQ,CAAC,GAAG,IAAI,CAAA;AAC3B,OAAA;MAEA,IAAIiE,mBAAmB,YAAnBA,mBAAmB,CAAEx4B,QAAQ,CAACu0B,QAAQ,CAAC,EAAE;AAC3C,QAAA,IAAI,CAACn3C,KAAK,CAACq7C,aAAa,EAAE;AACxBp7C,UAAAA,EAAE,EAAEd,QAAQ;AACZg4C,UAAAA,QAAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AACF,GAAA;EAEA0E,kBAAkB,CAACtvD,IAAoB,EAAW;AAChD,IAAA,QAAQA,IAAI;AACV,MAAA,KAAK,aAAa,CAAA;AAClB,MAAA,KAAK,aAAa;QAChB,OAAO,IAAI,CAACgwB,KAAK,CAAW,CAAA,CAAA,CAAA;AAC9B,MAAA,KAAK,uBAAuB;QAC1B,OAAO,IAAI,CAACA,KAAK,CAAW,CAAA,CAAA,CAAA;AAC9B,MAAA,KAAK,mBAAmB;QACtB,OAAO,IAAI,CAACA,KAAK,CAAa,CAAA,CAAA,CAAA;AAChC,MAAA,KAAK,2BAA2B;QAC9B,OAAO,IAAI,CAACA,KAAK,CAAO,EAAA,CAAA,CAAA;AAAC,KAAA;AAG7B,IAAA,MAAM,IAAIkU,KAAK,CAAC,aAAa,CAAC,CAAA;AAChC,GAAA;AAEAqrB,EAAAA,WAAW,CACTvvD,IAAoB,EACpBwvD,YAAqB,EAChB;IACL,MAAM3hB,MAAW,GAAG,EAAE,CAAA;AACtB,IAAA,OAAO,CAAC,IAAI,CAACyhB,kBAAkB,CAACtvD,IAAI,CAAC,EAAE;AAErC6tC,MAAAA,MAAM,CAAC38B,IAAI,CAACs+C,YAAY,EAAE,CAAC,CAAA;AAC7B,KAAA;AACA,IAAA,OAAO3hB,MAAM,CAAA;AACf,GAAA;AAEA4hB,EAAAA,oBAAoB,CAClBzvD,IAAoB,EACpBwvD,YAAqB,EACrBE,mBAEC,EACI;AACL,IAAA,OAAOjG,OAAO,CACZ,IAAI,CAACkG,0BAA0B,CAC7B3vD,IAAI,EACJwvD,YAAY,EACQ,IAAI,EACxBE,mBAAmB,CACpB,CACF,CAAA;AACH,GAAA;;EAMAC,0BAA0B,CACxB3vD,IAAoB,EACpBwvD,YAAwC,EACxCI,aAAsB,EACtBF,mBAEC,EACuB;IACxB,MAAM7hB,MAAM,GAAG,EAAE,CAAA;IACjB,IAAIgiB,gBAAgB,GAAG,CAAC,CAAC,CAAA;IAEzB,SAAS;AACP,MAAA,IAAI,IAAI,CAACP,kBAAkB,CAACtvD,IAAI,CAAC,EAAE;AACjC,QAAA,MAAA;AACF,OAAA;MACA6vD,gBAAgB,GAAG,CAAC,CAAC,CAAA;MAErB,MAAMC,OAAO,GAAGN,YAAY,EAAE,CAAA;MAC9B,IAAIM,OAAO,IAAI,IAAI,EAAE;AACnB,QAAA,OAAOpmC,SAAS,CAAA;AAClB,OAAA;AACAmkB,MAAAA,MAAM,CAAC38B,IAAI,CAAC4+C,OAAO,CAAC,CAAA;AAEpB,MAAA,IAAI,IAAI,CAACv9B,GAAG,CAAA,EAAA,CAAU,EAAE;AACtBs9B,QAAAA,gBAAgB,GAAG,IAAI,CAACt7C,KAAK,CAAC4Y,YAAY,CAAA;AAC1C,QAAA,SAAA;AACF,OAAA;AAEA,MAAA,IAAI,IAAI,CAACmiC,kBAAkB,CAACtvD,IAAI,CAAC,EAAE;AACjC,QAAA,MAAA;AACF,OAAA;AAEA,MAAA,IAAI4vD,aAAa,EAAE;QAEjB,IAAI,CAACxzB,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACA,MAAA,OAAO1S,SAAS,CAAA;AAClB,KAAA;AAEA,IAAA,IAAIgmC,mBAAmB,EAAE;MACvBA,mBAAmB,CAAC3yD,KAAK,GAAG8yD,gBAAgB,CAAA;AAC9C,KAAA;AAEA,IAAA,OAAOhiB,MAAM,CAAA;AACf,GAAA;EAEAkiB,oBAAoB,CAClB/vD,IAAoB,EACpBwvD,YAAqB,EACrBQ,OAAgB,EAChBC,cAAuB,EACvBP,mBAEC,EACI;IACL,IAAI,CAACO,cAAc,EAAE;AACnB,MAAA,IAAID,OAAO,EAAE;QACX,IAAI,CAAC5zB,MAAM,CAAa,CAAA,CAAA,CAAA;AAC1B,OAAC,MAAM;QACL,IAAI,CAACA,MAAM,CAAO,EAAA,CAAA,CAAA;AACpB,OAAA;AACF,KAAA;IAEA,MAAMyR,MAAM,GAAG,IAAI,CAAC4hB,oBAAoB,CACtCzvD,IAAI,EACJwvD,YAAY,EACZE,mBAAmB,CACpB,CAAA;AAED,IAAA,IAAIM,OAAO,EAAE;MACX,IAAI,CAAC5zB,MAAM,CAAa,CAAA,CAAA,CAAA;AAC1B,KAAC,MAAM;MACL,IAAI,CAACA,MAAM,CAAO,EAAA,CAAA,CAAA;AACpB,KAAA;AAEA,IAAA,OAAOyR,MAAM,CAAA;AACf,GAAA;AAEAqiB,EAAAA,iBAAiB,GAAmB;AAClC,IAAA,MAAM1iD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAkB,CAAA;IAC7C,IAAI,CAACqqB,MAAM,CAAY,EAAA,CAAA,CAAA;IACvB,IAAI,CAACA,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,IAAA,IAAI,CAAC,IAAI,CAACpM,KAAK,KAAW,EAAE;AAC1B,MAAA,IAAI,CAACvc,KAAK,CAACm2C,QAAQ,CAAC+D,6BAA6B,EAAE;AACjDj6C,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;;AAGApF,IAAAA,IAAI,CAACjB,QAAQ,GAAG,KAAK,CAAC25B,aAAa,EAAqB,CAAA;IACxD,IAAI,CAAC9J,MAAM,CAAW,EAAA,CAAA,CAAA;AAEtB,IAAA,IAAI,IAAI,CAAC7J,GAAG,CAAA,EAAA,CAAQ,EAAE;AAGpB/kB,MAAAA,IAAI,CAAC2iD,SAAS,GAAG,IAAI,CAACC,iBAAiB,EAAE,CAAA;AAC3C,KAAA;AACA,IAAA,IAAI,IAAI,CAACpgC,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACo/C,oBAAoB,EAAE,CAAA;AACnD,KAAA;AACA,IAAA,OAAO,IAAI,CAACp+C,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,GAAA;AAEA4iD,EAAAA,iBAAiB,CAACE,kBAA2B,GAAG,IAAI,EAAkB;AACpE,IAAA,IAAIpJ,MAAsB,GAAG,IAAI,CAACniB,eAAe,CAACurB,kBAAkB,CAAC,CAAA;AACrE,IAAA,OAAO,IAAI,CAAC/9B,GAAG,CAAA,EAAA,CAAQ,EAAE;AACvB,MAAA,MAAM/kB,IAA+B,GACnC,IAAI,CAAC4H,eAAe,CAAoB8xC,MAAM,CAAC,CAAA;MACjD15C,IAAI,CAAC0hC,IAAI,GAAGgY,MAAM,CAAA;MAClB15C,IAAI,CAACu6B,KAAK,GAAG,IAAI,CAAChD,eAAe,CAACurB,kBAAkB,CAAC,CAAA;MACrDpJ,MAAM,GAAG,IAAI,CAACj1C,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACnD,KAAA;AACA,IAAA,OAAO05C,MAAM,CAAA;AACf,GAAA;AAEAqJ,EAAAA,oBAAoB,GAAsB;AACxC,IAAA,MAAM/iD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAqB,CAAA;AAChDvE,IAAAA,IAAI,CAACgjD,QAAQ,GAAG,IAAI,CAACJ,iBAAiB,EAAE,CAAA;IACxC,IAAI,CAAC,IAAI,CAACr0B,qBAAqB,EAAE,IAAI,IAAI,CAAC/L,KAAK,CAAA,EAAA,CAAO,EAAE;AACtDxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACo/C,oBAAoB,EAAE,CAAA;AACnD,KAAA;AACA,IAAA,OAAO,IAAI,CAACp+C,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;EAEAijD,wBAAwB,CAACC,GAAiB,EAAqB;IAC7D,IAAI,CAACptC,IAAI,EAAE,CAAA;AACX,IAAA,MAAM9V,IAAI,GAAG,IAAI,CAAC4H,eAAe,CAAoBs7C,GAAG,CAAC,CAAA;IACzDljD,IAAI,CAACmjD,aAAa,GAAGD,GAAG,CAAA;IACxBljD,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAACqrB,qBAAqB,CAAgB,KAAK,CAAC,CAAA;IACtEpjD,IAAI,CAACqjD,OAAO,GAAG,KAAK,CAAA;AACpB,IAAA,OAAO,IAAI,CAAC5+C,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;AAEAsjD,EAAAA,mBAAmB,GAAiB;AAClC,IAAA,MAAMtjD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAgB,CAAA;IAC3C,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,IAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,YAAY,CAAC,CAAA;AAC5C,GAAA;AAEAujD,EAAAA,gBAAgB,GAAkB;AAChC,IAAA,MAAMvjD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAiB,CAAA;IAC5C,IAAI,CAACqqB,MAAM,CAAY,EAAA,CAAA,CAAA;AACvB,IAAA,IAAI,IAAI,CAACpM,KAAK,CAAA,EAAA,CAAY,EAAE;AAC1BxiB,MAAAA,IAAI,CAACwjD,QAAQ,GAAG,IAAI,CAACd,iBAAiB,EAAE,CAAA;AAC1C,KAAC,MAAM;AACL1iD,MAAAA,IAAI,CAACwjD,QAAQ,GAAG,IAAI,CAACZ,iBAAiB,EAAE,CAAA;AAC1C,KAAA;IACA,IAAI,CAAC,IAAI,CAACr0B,qBAAqB,EAAE,IAAI,IAAI,CAAC/L,KAAK,CAAA,EAAA,CAAO,EAAE;AACtDxiB,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACo/C,oBAAoB,EAAE,CAAA;AACnD,KAAA;AACA,IAAA,OAAO,IAAI,CAACp+C,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,CAAA;AAC7C,GAAA;EAEAyjD,qBAAqB,CAACzjD,IAAuB,EAAE;IAC7C,IAAI,CAACmhD,gBAAgB,CAAC;AACpBC,MAAAA,QAAQ,EAAEphD,IAAI;AACd8gD,MAAAA,gBAAgB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;AAC/BO,MAAAA,mBAAmB,EAAE,CACnB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,CACX;MACDC,aAAa,EAAElF,QAAQ,CAACgC,8BAAAA;AAC1B,KAAC,CAAC,CAAA;AACJ,GAAA;;EAGAsF,oBAAoB,CAAC1jD,IAAuB,EAAE;IAC5C,IAAI,CAACmhD,gBAAgB,CAAC;AACpBC,MAAAA,QAAQ,EAAEphD,IAAI;AACd8gD,MAAAA,gBAAgB,EAAE,EAAE;AACpBO,MAAAA,mBAAmB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;MAClCC,aAAa,EAAElF,QAAQ,CAACiC,uCAAAA;AAC1B,KAAC,CAAC,CAAA;AACJ,GAAA;EAEAsF,oBAAoB,CAClBC,cAES,GAAG,IAAI,CAACF,oBAAoB,CAACxC,IAAI,CAAC,IAAI,CAAC,EAC7B;AACnB,IAAA,MAAMlhD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAqB,CAAA;IAEhDq/C,cAAc,CAAC5jD,IAAI,CAAC,CAAA;AAEpBA,IAAAA,IAAI,CAAChI,IAAI,GAAG,IAAI,CAAC6rD,wBAAwB,EAAE,CAAA;AAC3C7jD,IAAAA,IAAI,CAAC8jD,UAAU,GAAG,IAAI,CAACC,kBAAkB,CAAa,EAAA,CAAA,CAAA;AACtD/jD,IAAAA,IAAI,CAAC84B,OAAO,GAAG,IAAI,CAACirB,kBAAkB,CAAO,EAAA,CAAA,CAAA;AAC7C,IAAA,OAAO,IAAI,CAACt/C,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;EAEAgkD,wBAAwB,CACtBJ,cAA2D,EACV;AACjD,IAAA,IAAI,IAAI,CAACphC,KAAK,CAAA,EAAA,CAAO,EAAE;AACrB,MAAA,OAAO,IAAI,CAACyhC,qBAAqB,CAACL,cAAc,CAAC,CAAA;AACnD,KAAA;AACF,GAAA;EAEAK,qBAAqB,CACnBL,cAA2D,EAC3D;AACA,IAAA,MAAM5jD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAgC,CAAA;IAE3D,IAAI,IAAI,CAACie,KAAK,CAAA,EAAA,CAAO,IAAI,IAAI,CAACA,KAAK,CAAA,GAAA,CAAgB,EAAE;MACnD,IAAI,CAAC1M,IAAI,EAAE,CAAA;AACb,KAAC,MAAM;MACL,IAAI,CAAC9e,UAAU,EAAE,CAAA;AACnB,KAAA;AAEA,IAAA,MAAMkrD,mBAAmB,GAAG;AAAE3yD,MAAAA,KAAK,EAAE,CAAC,CAAA;KAAG,CAAA;AAEzCyQ,IAAAA,IAAI,CAACuC,MAAM,GAAG,IAAI,CAACggD,oBAAoB,CACrC,2BAA2B;AAE3B,IAAA,IAAI,CAACoB,oBAAoB,CAACzC,IAAI,CAAC,IAAI,EAAE0C,cAAc,CAAC,EACtC,KAAK,EACE,IAAI,EACzB1B,mBAAmB,CACpB,CAAA;AACD,IAAA,IAAIliD,IAAI,CAACuC,MAAM,CAACtT,MAAM,KAAK,CAAC,EAAE;AAC5B,MAAA,IAAI,CAACgX,KAAK,CAACm2C,QAAQ,CAACoB,mBAAmB,EAAE;AAAEt3C,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AACxD,KAAA;AACA,IAAA,IAAIkiD,mBAAmB,CAAC3yD,KAAK,KAAK,CAAC,CAAC,EAAE;MACpC,IAAI,CAACs+B,QAAQ,CAAC7tB,IAAI,EAAE,eAAe,EAAEkiD,mBAAmB,CAAC3yD,KAAK,CAAC,CAAA;AACjE,KAAA;AACA,IAAA,OAAO,IAAI,CAACkV,UAAU,CAACzE,IAAI,EAAE,4BAA4B,CAAC,CAAA;AAC5D,GAAA;;AAIAkkD,EAAAA,eAAe,CACbC,WAAsB,EACtBC,SAA2C,EACrC;IAEN,MAAMC,mBAAmB,GAAGF,WAAW,KAAa,EAAA,CAAA;;IAGpD,MAAMG,SAAS,GAA6C,YAAY,CAAA;IACxE,MAAMC,aAAa,GAEf,gBAAgB,CAAA;AAEpBH,IAAAA,SAAS,CAAC3gD,cAAc,GAAG,IAAI,CAACugD,wBAAwB,EAAE,CAAA;IAC1D,IAAI,CAACp1B,MAAM,CAAW,EAAA,CAAA,CAAA;AACtBw1B,IAAAA,SAAS,CAACE,SAAS,CAAC,GAAG,IAAI,CAACE,8BAA8B,EAAE,CAAA;AAC5D,IAAA,IAAIH,mBAAmB,EAAE;MACvBD,SAAS,CAACG,aAAa,CAAC,GACtB,IAAI,CAACE,oCAAoC,CAACN,WAAW,CAAC,CAAA;KACzD,MAAM,IAAI,IAAI,CAAC3hC,KAAK,CAAC2hC,WAAW,CAAC,EAAE;MAClCC,SAAS,CAACG,aAAa,CAAC,GACtB,IAAI,CAACE,oCAAoC,CAACN,WAAW,CAAC,CAAA;AAC1D,KAAA;AACF,GAAA;AAEAK,EAAAA,8BAA8B,GAE5B;IACA,OAAO,KAAK,CACTE,gBAAgB,CAAA,EAAA,EAAA,EAAA,CAAuC,CACvD50D,GAAG,CAAC0Q,OAAO,IAAI;MACd,IACEA,OAAO,CAACpO,IAAI,KAAK,YAAY,IAC7BoO,OAAO,CAACpO,IAAI,KAAK,aAAa,IAC9BoO,OAAO,CAACpO,IAAI,KAAK,eAAe,IAChCoO,OAAO,CAACpO,IAAI,KAAK,cAAc,EAC/B;AACA,QAAA,IAAI,CAAC6T,KAAK,CAACm2C,QAAQ,CAACiE,iCAAiC,EAAE;AACrDn6C,UAAAA,EAAE,EAAE1F,OAAO;UACXpO,IAAI,EAAEoO,OAAO,CAACpO,IAAAA;AAChB,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,OAAOoO,OAAO,CAAA;AAChB,KAAC,CAAC,CAAA;AACN,GAAA;AAEAmkD,EAAAA,0BAA0B,GAAS;IACjC,IAAI,CAAC,IAAI,CAAC5/B,GAAG,CAAA,EAAA,CAAU,IAAI,CAAC,IAAI,CAAC0J,gBAAgB,EAAE,EAAE;MACnD,IAAI,CAACG,MAAM,CAAS,EAAA,CAAA,CAAA;AACtB,KAAA;AACF,GAAA;AAEAg2B,EAAAA,sBAAsB,CACpBpyD,IAAsE,EACtEwN,IAEC,EACiE;AAClE,IAAA,IAAI,CAACkkD,eAAe,CAAWlkD,EAAAA,EAAAA,IAAI,CAAC,CAAA;IACpC,IAAI,CAAC2kD,0BAA0B,EAAE,CAAA;AACjC,IAAA,OAAO,IAAI,CAAClgD,UAAU,CAACzE,IAAI,EAAExN,IAAI,CAAC,CAAA;AACpC,GAAA;AAEAqyD,EAAAA,+BAA+B,GAAG;IAChC,IAAI,CAAC/uC,IAAI,EAAE,CAAA;IACX,IAAIjD,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAAE;MACtC,IAAI,CAAC0jB,IAAI,EAAE,CAAA;MACX,OAAO,IAAI,CAAC0M,KAAK,CAAU,EAAA,CAAA,CAAA;AAC7B,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEAsiC,wBAAwB,CACtB9kD,IAAgC,EACO;IACvC,IACE,EACE,IAAI,CAACwiB,KAAK,GAAa,IACvB,IAAI,CAACuiC,WAAW,CAAC,IAAI,CAACF,+BAA+B,CAAC3D,IAAI,CAAC,IAAI,CAAC,CAAC,CAClE,EACD;AACA,MAAA,OAAOhlC,SAAS,CAAA;AAClB,KAAA;IAEA,IAAI,CAAC0S,MAAM,CAAa,CAAA,CAAA,CAAA;AACxB,IAAA,MAAM7qB,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;AACjCxzB,IAAAA,EAAE,CAACg0B,cAAc,GAAG,IAAI,CAACqrB,qBAAqB,EAAE,CAAA;AAChD,IAAA,IAAI,CAACl7C,gBAAgB,CAACnE,EAAE,CAAC,CAAA;;IAEzB,IAAI,CAAC6qB,MAAM,CAAa,CAAA,CAAA,CAAA;AACxB5uB,IAAAA,IAAI,CAACglD,UAAU,GAAG,CAACjhD,EAAE,CAAC,CAAA;AAEtB,IAAA,MAAM3R,IAAI,GAAG,IAAI,CAAC6yD,wBAAwB,EAAE,CAAA;AAC5C,IAAA,IAAI7yD,IAAI,EAAE4N,IAAI,CAAC+3B,cAAc,GAAG3lC,IAAI,CAAA;IACpC,IAAI,CAACuyD,0BAA0B,EAAE,CAAA;AACjC,IAAA,OAAO,IAAI,CAAClgD,UAAU,CAACzE,IAAI,EAAE,kBAAkB,CAAC,CAAA;AAClD,GAAA;AAEAklD,EAAAA,gCAAgC,CAC9BllD,IAAiD,EACjDmlD,QAAiB,EAC4B;IAC7C,IAAI,IAAI,CAACpgC,GAAG,CAAA,EAAA,CAAa,EAAE/kB,IAAI,CAACqG,QAAQ,GAAG,IAAI,CAAA;IAC/C,MAAM++C,OAAY,GAAGplD,IAAI,CAAA;IAEzB,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAW,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAO,EAAE;AAC9C,MAAA,IAAI2iC,QAAQ,EAAE;AACZ,QAAA,IAAI,CAACl/C,KAAK,CAACm2C,QAAQ,CAAC8C,0BAA0B,EAAE;AAAEh5C,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AAC/D,OAAA;MACA,MAAMsC,MAA2B,GAAG8iD,OAAO,CAAA;MAC3C,IAAI9iD,MAAM,CAAC9P,IAAI,IAAI,IAAI,CAACgwB,KAAK,IAAO,EAAE;AACpC,QAAA,IAAI,CAACvc,KAAK,CAACm2C,QAAQ,CAACM,+BAA+B,EAAE;AACnDx2C,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,IAAI,CAAC2jC,eAAe,CAAW5hD,EAAAA,EAAAA,MAAM,CAAC,CAAA;MACtC,IAAI,CAACqiD,0BAA0B,EAAE,CAAA;MACjC,MAAML,SAAS,GAEX,YAAY,CAAA;MAChB,MAAMC,aAAa,GAEf,gBAAgB,CAAA;AACpB,MAAA,IAAIjiD,MAAM,CAAC9P,IAAI,KAAK,KAAK,EAAE;QACzB,IAAI8P,MAAM,CAACgiD,SAAS,CAAC,CAACr1D,MAAM,GAAG,CAAC,EAAE;AAChC,UAAA,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAACzM,cAAc,EAAE;AAAEkT,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAAG,WAAC,CAAC,CAAA;AACnE,UAAA,IAAI,IAAI,CAAC+hB,WAAW,CAAChgC,MAAM,CAACgiD,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAC1C,YAAA,IAAI,CAACr+C,KAAK,CAACm2C,QAAQ,CAACK,iCAAiC,EAAE;AACrDv2C,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,aAAC,CAAC,CAAA;AACJ,WAAA;AACF,SAAA;AACF,OAAC,MAAM,IAAIje,MAAM,CAAC9P,IAAI,KAAK,KAAK,EAAE;QAChC,IAAI8P,MAAM,CAACgiD,SAAS,CAAC,CAACr1D,MAAM,KAAK,CAAC,EAAE;AAClC,UAAA,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAACxM,cAAc,EAAE;AAAEiT,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAAG,WAAC,CAAC,CAAA;AACrE,SAAC,MAAM;UACL,MAAM8kC,cAAc,GAAG/iD,MAAM,CAACgiD,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3C,UAAA,IAAI,IAAI,CAAChiB,WAAW,CAAC+iB,cAAc,CAAC,EAAE;AACpC,YAAA,IAAI,CAACp/C,KAAK,CAACm2C,QAAQ,CAACK,iCAAiC,EAAE;AACrDv2C,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,aAAC,CAAC,CAAA;AACJ,WAAA;UACA,IACE8kC,cAAc,CAACjzD,IAAI,KAAK,YAAY,IACpCizD,cAAc,CAACh/C,QAAQ,EACvB;AACA,YAAA,IAAI,CAACJ,KAAK,CAACm2C,QAAQ,CAACiD,qCAAqC,EAAE;AACzDn5C,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,aAAC,CAAC,CAAA;AACJ,WAAA;AACA,UAAA,IAAI8kC,cAAc,CAACjzD,IAAI,KAAK,aAAa,EAAE;AACzC,YAAA,IAAI,CAAC6T,KAAK,CAACm2C,QAAQ,CAACkD,iCAAiC,EAAE;AACrDp5C,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,aAAC,CAAC,CAAA;AACJ,WAAA;AACF,SAAA;AACA,QAAA,IAAIje,MAAM,CAACiiD,aAAa,CAAC,EAAE;AACzB,UAAA,IAAI,CAACt+C,KAAK,CAACm2C,QAAQ,CAACmD,8BAA8B,EAAE;YAClDr5C,EAAE,EAAE5D,MAAM,CAACiiD,aAAa,CAAA;AAC1B,WAAC,CAAC,CAAA;AACJ,SAAA;AACF,OAAC,MAAM;QACLjiD,MAAM,CAAC9P,IAAI,GAAG,QAAQ,CAAA;AACxB,OAAA;AACA,MAAA,OAAO,IAAI,CAACiS,UAAU,CAACnC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AACrD,KAAC,MAAM;MACL,MAAMstB,QAA+B,GAAGw1B,OAAO,CAAA;AAC/C,MAAA,IAAID,QAAQ,EAAEv1B,QAAQ,CAACu1B,QAAQ,GAAG,IAAI,CAAA;AACtC,MAAA,MAAM/yD,IAAI,GAAG,IAAI,CAAC6yD,wBAAwB,EAAE,CAAA;AAC5C,MAAA,IAAI7yD,IAAI,EAAEw9B,QAAQ,CAACmI,cAAc,GAAG3lC,IAAI,CAAA;MACxC,IAAI,CAACuyD,0BAA0B,EAAE,CAAA;AACjC,MAAA,OAAO,IAAI,CAAClgD,UAAU,CAACmrB,QAAQ,EAAE,qBAAqB,CAAC,CAAA;AACzD,KAAA;AACF,GAAA;AAEA01B,EAAAA,iBAAiB,GAAoB;AACnC,IAAA,MAAMtlD,IAAS,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;IAElC,IAAI,IAAI,CAACie,KAAK,CAAA,EAAA,CAAW,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAO,EAAE;AAC9C,MAAA,OAAO,IAAI,CAACoiC,sBAAsB,CAAC,4BAA4B,EAAE5kD,IAAI,CAAC,CAAA;AACxE,KAAA;AAEA,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAS,EAAE;AACvB,MAAA,MAAMze,EAAE,GAAG,IAAI,CAACQ,SAAS,EAAgB,CAAA;MACzC,IAAI,CAACuR,IAAI,EAAE,CAAA;MACX,IAAI,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAW,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAO,EAAE;AAC9C,QAAA,OAAO,IAAI,CAACoiC,sBAAsB,CAChC,iCAAiC,EACjC5kD,IAAI,CACL,CAAA;AACH,OAAC,MAAM;QACLA,IAAI,CAAC3Q,GAAG,GAAG,IAAI,CAACwuC,gBAAgB,CAAC95B,EAAE,EAAE,KAAK,CAAC,CAAA;AAC3C,QAAA,OAAO,IAAI,CAACmhD,gCAAgC,CAACllD,IAAI,EAAE,KAAK,CAAC,CAAA;AAC3D,OAAA;AACF,KAAA;IAEA,IAAI,CAACmhD,gBAAgB,CAAC;AACpBC,MAAAA,QAAQ,EAAEphD,IAAI;MACd8gD,gBAAgB,EAAE,CAAC,UAAU,CAAC;AAC9BO,MAAAA,mBAAmB,EAAE,CACnB,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,CAAA;AAEd,KAAC,CAAC,CAAA;AAEF,IAAA,MAAMkE,GAAG,GAAG,IAAI,CAACT,wBAAwB,CAAC9kD,IAAI,CAAC,CAAA;AAC/C,IAAA,IAAIulD,GAAG,EAAE;AACP,MAAA,OAAOA,GAAG,CAAA;AACZ,KAAA;AAEA,IAAA,KAAK,CAACC,iBAAiB,CAACxlD,IAAI,CAAC,CAAA;AAC7B,IAAA,IACE,CAACA,IAAI,CAACwE,QAAQ,IACdxE,IAAI,CAAC3Q,GAAG,CAAC+C,IAAI,KAAK,YAAY,KAC7B4N,IAAI,CAAC3Q,GAAG,CAAC2I,IAAI,KAAK,KAAK,IAAIgI,IAAI,CAAC3Q,GAAG,CAAC2I,IAAI,KAAK,KAAK,CAAC,IACpD,IAAI,CAAC2oD,wBAAwB,EAAE,EAC/B;AACA3gD,MAAAA,IAAI,CAACxN,IAAI,GAAGwN,IAAI,CAAC3Q,GAAG,CAAC2I,IAAI,CAAA;AACzB,MAAA,KAAK,CAACwtD,iBAAiB,CAACxlD,IAAI,CAAC,CAAA;AAC/B,KAAA;IACA,OAAO,IAAI,CAACklD,gCAAgC,CAACllD,IAAI,EAAE,CAAC,CAACA,IAAI,CAACmlD,QAAQ,CAAC,CAAA;AACrE,GAAA;AAEAM,EAAAA,kBAAkB,GAAoB;AACpC,IAAA,MAAMzlD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmB,CAAA;AAC9CvE,IAAAA,IAAI,CAACunC,OAAO,GAAG,IAAI,CAACme,wBAAwB,EAAE,CAAA;AAC9C,IAAA,OAAO,IAAI,CAACjhD,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;AAEA0lD,EAAAA,wBAAwB,GAA2B;IACjD,IAAI,CAAC92B,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,IAAA,MAAM2Y,OAAO,GAAG,IAAI,CAACwa,WAAW,CAC9B,aAAa,EACb,IAAI,CAACuD,iBAAiB,CAACpE,IAAI,CAAC,IAAI,CAAC,CAClC,CAAA;IACD,IAAI,CAACtyB,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,IAAA,OAAO2Y,OAAO,CAAA;AAChB,GAAA;AAEAoe,EAAAA,qBAAqB,GAAY;IAC/B,IAAI,CAAC7vC,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,IAAI,CAACiP,GAAG,CAAA,EAAA,CAAY,EAAE;MACxB,OAAO,IAAI,CAAC+I,YAAY,CAAc,GAAA,CAAA,CAAA;AACxC,KAAA;AACA,IAAA,IAAI,IAAI,CAACA,YAAY,CAAA,GAAA,CAAc,EAAE;MACnC,IAAI,CAAChY,IAAI,EAAE,CAAA;AACb,KAAA;AACA,IAAA,IAAI,CAAC,IAAI,CAAC0M,KAAK,GAAa,EAAE;AAC5B,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;IACA,IAAI,CAAC1M,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,CAAC,IAAI,CAAC4qC,cAAc,EAAE,EAAE;AAC1B,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;IACA,IAAI,CAAC5qC,IAAI,EAAE,CAAA;IACX,OAAO,IAAI,CAAC0M,KAAK,CAAQ,EAAA,CAAA,CAAA;AAC3B,GAAA;AAEAojC,EAAAA,0BAA0B,GAAsB;AAC9C,IAAA,MAAM5lD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAqB,CAAA;AAChDvE,IAAAA,IAAI,CAAChI,IAAI,GAAG,IAAI,CAAC6rD,wBAAwB,EAAE,CAAA;AAC3C7jD,IAAAA,IAAI,CAAC8jD,UAAU,GAAG,IAAI,CAAC+B,qBAAqB,CAAQ,EAAA,CAAA,CAAA;AACpD,IAAA,OAAO,IAAI,CAACphD,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;AAEA8lD,EAAAA,iBAAiB,GAAmB;AAClC,IAAA,MAAM9lD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAkB,CAAA;IAE7C,IAAI,CAACqqB,MAAM,CAAW,CAAA,CAAA,CAAA;AAEtB,IAAA,IAAI,IAAI,CAACpM,KAAK,CAAA,EAAA,CAAY,EAAE;AAC1BxiB,MAAAA,IAAI,CAACmlD,QAAQ,GAAG,IAAI,CAACp+C,KAAK,CAACxX,KAAK,CAAA;MAChC,IAAI,CAACumB,IAAI,EAAE,CAAA;MACX,IAAI,CAACuY,gBAAgB,CAAc,GAAA,CAAA,CAAA;AACrC,KAAC,MAAM,IAAI,IAAI,CAACD,aAAa,KAAc,EAAE;MAC3CpuB,IAAI,CAACmlD,QAAQ,GAAG,IAAI,CAAA;AACtB,KAAA;IAEA,IAAI,CAACv2B,MAAM,CAAa,CAAA,CAAA,CAAA;AACxB5uB,IAAAA,IAAI,CAACm7B,aAAa,GAAG,IAAI,CAACyqB,0BAA0B,EAAE,CAAA;AACtD5lD,IAAAA,IAAI,CAAC+lD,QAAQ,GAAG,IAAI,CAAC33B,aAAa,CAAQ,EAAA,CAAA,GAAG,IAAI,CAAC43B,WAAW,EAAE,GAAG,IAAI,CAAA;IAEtE,IAAI,CAACp3B,MAAM,CAAa,CAAA,CAAA,CAAA;AAExB,IAAA,IAAI,IAAI,CAACpM,KAAK,CAAA,EAAA,CAAY,EAAE;AAC1BxiB,MAAAA,IAAI,CAACqG,QAAQ,GAAG,IAAI,CAACU,KAAK,CAACxX,KAAK,CAAA;MAChC,IAAI,CAACumB,IAAI,EAAE,CAAA;MACX,IAAI,CAAC8Y,MAAM,CAAa,EAAA,CAAA,CAAA;AAC1B,KAAC,MAAM,IAAI,IAAI,CAAC7J,GAAG,IAAa,EAAE;MAChC/kB,IAAI,CAACqG,QAAQ,GAAG,IAAI,CAAA;AACtB,KAAA;AAEArG,IAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAACkuB,cAAc,EAAE,CAAA;IAC3C,IAAI,CAACv3B,SAAS,EAAE,CAAA;IAChB,IAAI,CAACE,MAAM,CAAW,CAAA,CAAA,CAAA;AAEtB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,GAAA;AAEAkmD,EAAAA,gBAAgB,GAAkB;AAChC,IAAA,MAAMlmD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAiB,CAAA;IAC5CvE,IAAI,CAACmmD,YAAY,GAAG,IAAI,CAAC5D,oBAAoB,CAC3C,mBAAmB,EACnB,IAAI,CAAC6D,uBAAuB,CAAClF,IAAI,CAAC,IAAI,CAAC,EACzB,IAAI,EACG,KAAK,CAC3B,CAAA;;IAID,IAAImF,mBAAmB,GAAG,KAAK,CAAA;IAC/B,IAAIC,eAA+B,GAAG,IAAI,CAAA;AAC1CtmD,IAAAA,IAAI,CAACmmD,YAAY,CAACtgC,OAAO,CAAC0gC,WAAW,IAAI;AAAA,MAAA,IAAA,gBAAA,CAAA;MACvC,MAAM;AAAEn0D,QAAAA,IAAAA;AAAK,OAAC,GAAGm0D,WAAW,CAAA;AAE5B,MAAA,IACEF,mBAAmB,IACnBj0D,IAAI,KAAK,YAAY,IACrBA,IAAI,KAAK,gBAAgB,IACzB,EAAEA,IAAI,KAAK,oBAAoB,IAAIm0D,WAAW,CAAClgD,QAAQ,CAAC,EACxD;AACA,QAAA,IAAI,CAACJ,KAAK,CAACm2C,QAAQ,CAAC0C,0BAA0B,EAAE;AAC9C54C,UAAAA,EAAE,EAAEqgD,WAAAA;AACN,SAAC,CAAC,CAAA;AACJ,OAAA;AAEAF,MAAAA,mBAAmB,KAAnBA,mBAAmB,GAChBj0D,IAAI,KAAK,oBAAoB,IAAIm0D,WAAW,CAAClgD,QAAQ,IACtDjU,IAAI,KAAK,gBAAgB,CAAA,CAAA;;MAG3B,IAAIo0D,SAAS,GAAGp0D,IAAI,CAAA;MACpB,IAAIA,IAAI,KAAK,YAAY,EAAE;QACzBm0D,WAAW,GAAGA,WAAW,CAACxuB,cAAc,CAAA;QACxCyuB,SAAS,GAAGD,WAAW,CAACn0D,IAAI,CAAA;AAC9B,OAAA;AAEA,MAAA,MAAMq0D,SAAS,GAAGD,SAAS,KAAK,oBAAoB,CAAA;AACpD,MAAA,CAAA,gBAAA,GAAAF,eAAe,KAAA,IAAA,GAAA,gBAAA,GAAfA,eAAe,GAAKG,SAAS,CAAA;MAC7B,IAAIH,eAAe,KAAKG,SAAS,EAAE;AACjC,QAAA,IAAI,CAACxgD,KAAK,CAACm2C,QAAQ,CAACuC,gCAAgC,EAAE;AACpDz4C,UAAAA,EAAE,EAAEqgD,WAAAA;AACN,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO,IAAI,CAAC9hD,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,CAAA;AAC7C,GAAA;AAEAomD,EAAAA,uBAAuB,GAAoC;;IAGzD,MAAM;AAAEhhD,MAAAA,QAAAA;KAAU,GAAG,IAAI,CAAC2B,KAAK,CAAA;AAE/B,IAAA,MAAMxH,IAAI,GAAG,IAAI,CAACwlB,GAAG,CAAa,EAAA,CAAA,CAAA;AAClC,IAAA,IAAI3yB,IAAqC,GAAG,IAAI,CAAC4zD,WAAW,EAAE,CAAA;AAC9D,IAAA,MAAM3/C,QAAQ,GAAG,IAAI,CAAC0e,GAAG,CAAa,EAAA,CAAA,CAAA;AACtC,IAAA,MAAM2hC,OAAO,GAAG,IAAI,CAAC3hC,GAAG,CAAU,EAAA,CAAA,CAAA;AAElC,IAAA,IAAI2hC,OAAO,EAAE;AACX,MAAA,MAAMC,WAAW,GAAG,IAAI,CAAC/+C,eAAe,CAAuBxV,IAAI,CAAC,CAAA;MACpEu0D,WAAW,CAACtgD,QAAQ,GAAGA,QAAQ,CAAA;AAE/B,MAAA,IACEjU,IAAI,CAACA,IAAI,KAAK,iBAAiB,IAC/B,CAACA,IAAI,CAACqR,cAAc,IACpBrR,IAAI,CAAC4wD,QAAQ,CAAC5wD,IAAI,KAAK,YAAY,EACnC;AACAu0D,QAAAA,WAAW,CAAC19C,KAAK,GAAG7W,IAAI,CAAC4wD,QAAQ,CAAA;AACnC,OAAC,MAAM;AACL,QAAA,IAAI,CAAC/8C,KAAK,CAACm2C,QAAQ,CAACqC,uBAAuB,EAAE;AAAEv4C,UAAAA,EAAE,EAAE9T,IAAAA;AAAK,SAAC,CAAC,CAAA;QAG1Du0D,WAAW,CAAC19C,KAAK,GAAG7W,IAAI,CAAA;AAC1B,OAAA;AAEAu0D,MAAAA,WAAW,CAAC37B,WAAW,GAAG,IAAI,CAACg7B,WAAW,EAAE,CAAA;MAC5C5zD,IAAI,GAAG,IAAI,CAACqS,UAAU,CAACkiD,WAAW,EAAE,oBAAoB,CAAC,CAAA;KAC1D,MAAM,IAAItgD,QAAQ,EAAE;AACnB,MAAA,MAAMugD,gBAAgB,GAAG,IAAI,CAACh/C,eAAe,CAAmBxV,IAAI,CAAC,CAAA;MACrEw0D,gBAAgB,CAAC7uB,cAAc,GAAG3lC,IAAI,CAAA;MACtCA,IAAI,GAAG,IAAI,CAACqS,UAAU,CAACmiD,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;AAC5D,KAAA;AAEA,IAAA,IAAIrnD,IAAI,EAAE;AACR,MAAA,MAAMsnD,QAAQ,GAAG,IAAI,CAACn1B,WAAW,CAAetsB,QAAQ,CAAC,CAAA;MACzDyhD,QAAQ,CAAC9uB,cAAc,GAAG3lC,IAAI,CAAA;MAC9BA,IAAI,GAAG,IAAI,CAACqS,UAAU,CAACoiD,QAAQ,EAAE,YAAY,CAAC,CAAA;AAChD,KAAA;AAEA,IAAA,OAAOz0D,IAAI,CAAA;AACb,GAAA;AAEA00D,EAAAA,wBAAwB,GAA0B;AAChD,IAAA,MAAM9mD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAyB,CAAA;IACpD,IAAI,CAACqqB,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB5uB,IAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAACiuB,WAAW,EAAE,CAAA;IACxC,IAAI,CAACp3B,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACrD,GAAA;AAEA+mD,EAAAA,gCAAgC,CAC9B30D,IAA4C,EAC5C40D,QAAkB,EACa;AAC/B,IAAA,MAAMhnD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAExB,CAAA;IACH,IAAInS,IAAI,KAAK,mBAAmB,EAAE;AAC/B4N,MAAAA,IAAI,CAAiCgnD,QAAQ,GAAG,CAAC,CAACA,QAAQ,CAAA;AAC3D,MAAA,IAAIA,QAAQ,EAAE,IAAI,CAAClxC,IAAI,EAAE,CAAA;MACzB,IAAI,CAACA,IAAI,EAAE,CAAA;AACb,KAAA;;IACA,IAAI,CAACmxC,gCAAgC,CAAC,MACpC,IAAI,CAAC/C,eAAe,CAAA,EAAA,EAAWlkD,IAAI,CAAC,CACrC,CAAA;AACD,IAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE5N,IAAI,CAAC,CAAA;AACpC,GAAA;AAEA80D,EAAAA,sBAAsB,GAAoB;AACxC,IAAA,MAAMlnD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmB,CAAA;AAE9CvE,IAAAA,IAAI,CAACinC,OAAO,GAAG,CAAC,MAAM;AACpB,MAAA,QAAQ,IAAI,CAAClgC,KAAK,CAAC3U,IAAI;AACrB,QAAA,KAAA,GAAA,CAAA;AACA,QAAA,KAAA,GAAA,CAAA;AACA,QAAA,KAAA,GAAA,CAAA;AACA,QAAA,KAAA,EAAA,CAAA;AACA,QAAA,KAAA,EAAA;UAEE,OAAO,KAAK,CAACsmC,aAAa,EAAE,CAAA;AAC9B,QAAA;UACE,MAAM,IAAI,CAAC1hC,UAAU,EAAE,CAAA;AAAC,OAAA;AAE9B,KAAC,GAAG,CAAA;AACJ,IAAA,OAAO,IAAI,CAACyN,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;AAEAmnD,EAAAA,0BAA0B,GAAa;AACrC,IAAA,MAAMnnD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmB,CAAA;IAC9CvE,IAAI,CAACinC,OAAO,GAAG,KAAK,CAACmgB,aAAa,CAAC,KAAK,CAAC,CAAA;AACzC,IAAA,OAAO,IAAI,CAAC3iD,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;AAEAqnD,EAAAA,yBAAyB,GAAsB;IAC7C,IAAI,IAAI,CAACtgD,KAAK,CAACgY,MAAM,EAAE,OAAO,IAAI,CAACinC,WAAW,EAAE,CAAA;IAChD,OAAO,KAAK,CAACqB,yBAAyB,EAAE,CAAA;AAC1C,GAAA;AAEAC,EAAAA,kCAAkC,GAAqC;AACrE,IAAA,MAAMC,WAAW,GAAG,IAAI,CAACjE,mBAAmB,EAAE,CAAA;IAC9C,IAAI,IAAI,CAACx1B,YAAY,CAAQ,GAAA,CAAA,IAAI,CAAC,IAAI,CAACS,qBAAqB,EAAE,EAAE;AAC9D,MAAA,OAAO,IAAI,CAAC00B,wBAAwB,CAACsE,WAAW,CAAC,CAAA;AACnD,KAAC,MAAM;AACL,MAAA,OAAOA,WAAW,CAAA;AACpB,KAAA;AACF,GAAA;AAEAC,EAAAA,mBAAmB,GAAa;AAC9B,IAAA,QAAQ,IAAI,CAACzgD,KAAK,CAAC3U,IAAI;AACrB,MAAA,KAAA,GAAA,CAAA;AACA,MAAA,KAAA,GAAA,CAAA;AACA,MAAA,KAAA,GAAA,CAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAAC80D,sBAAsB,EAAE,CAAA;AACtC,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,IAAI,CAACngD,KAAK,CAACxX,KAAK,KAAK,GAAG,EAAE;AAC5B,UAAA,MAAMyQ,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmB,CAAA;AAC9C,UAAA,MAAMugB,SAAS,GAAG,IAAI,CAACI,SAAS,EAAE,CAAA;UAClC,IAAIJ,SAAS,CAAC1yB,IAAI,KAAA,GAAW,IAAI0yB,SAAS,CAAC1yB,IAAI,KAAA,GAAc,EAAE;YAC7D,MAAM,IAAI,CAAC4E,UAAU,EAAE,CAAA;AACzB,WAAA;AAEAgJ,UAAAA,IAAI,CAACinC,OAAO,GAAG,IAAI,CAACwgB,eAAe,EAAE,CAAA;AACrC,UAAA,OAAO,IAAI,CAAChjD,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,SAAA;AACA,QAAA,MAAA;AACF,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAACsnD,kCAAkC,EAAE,CAAA;AAClD,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAAC/D,gBAAgB,EAAE,CAAA;AAChC,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAACb,iBAAiB,EAAE,CAAA;AACjC,MAAA,KAAA,CAAA;QACE,OAAO,IAAI,CAACqC,WAAW,CAAC,IAAI,CAACY,qBAAqB,CAACzE,IAAI,CAAC,IAAI,CAAC,CAAC,GAC1D,IAAI,CAAC4E,iBAAiB,EAAE,GACxB,IAAI,CAACL,kBAAkB,EAAE,CAAA;AAC/B,MAAA,KAAA,CAAA;QACE,OAAO,IAAI,CAACS,gBAAgB,EAAE,CAAA;AAChC,MAAA,KAAA,EAAA;QAaE,OAAO,IAAI,CAACY,wBAAwB,EAAE,CAAA;AACxC,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAACK,0BAA0B,EAAE,CAAA;AAC1C,MAAA;AAAS,QAAA;UACP,MAAM;AAAE/0D,YAAAA,IAAAA;WAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;UAC3B,IACE8L,iBAAiB,CAACzgB,IAAI,CAAC,IACvBA,IAAI,KAAa,EAAA,IACjBA,IAAI,KAAA,EAAa,EACjB;AACA,YAAA,MAAMs1D,QAAQ,GACZt1D,IAAI,OAAa,GACb,eAAe,GACfA,IAAI,KAAA,EAAa,GACjB,eAAe,GACfkuD,mBAAmB,CAAC,IAAI,CAACv5C,KAAK,CAACxX,KAAK,CAAC,CAAA;YAC3C,IACEm4D,QAAQ,KAAKxrC,SAAS,IACtB,IAAI,CAACsJ,iBAAiB,EAAE,KAAA,EAAkB,EAC1C;AACA,cAAA,MAAMxlB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmB,CAAA;cAC9C,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,cAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE0nD,QAAQ,CAAC,CAAA;AACxC,aAAA;YACA,OAAO,IAAI,CAAC3E,oBAAoB,EAAE,CAAA;AACpC,WAAA;AACF,SAAA;AAAC,KAAA;IAGH,MAAM,IAAI,CAAC/rD,UAAU,EAAE,CAAA;AACzB,GAAA;AAEA2wD,EAAAA,wBAAwB,GAAa;AACnC,IAAA,IAAIv1D,IAAI,GAAG,IAAI,CAACo1D,mBAAmB,EAAE,CAAA;IACrC,OAAO,CAAC,IAAI,CAACj5B,qBAAqB,EAAE,IAAI,IAAI,CAACxJ,GAAG,CAAA,CAAA,CAAa,EAAE;AAC7D,MAAA,IAAI,IAAI,CAACvC,KAAK,CAAA,CAAA,CAAa,EAAE;AAC3B,QAAA,MAAMxiB,IAAI,GAAG,IAAI,CAAC4H,eAAe,CAAgBxV,IAAI,CAAC,CAAA;QACtD4N,IAAI,CAACgrB,WAAW,GAAG54B,IAAI,CAAA;QACvB,IAAI,CAACw8B,MAAM,CAAa,CAAA,CAAA,CAAA;QACxBx8B,IAAI,GAAG,IAAI,CAACqS,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,CAAA;AAC7C,OAAC,MAAM;AACL,QAAA,MAAMA,IAAI,GAAG,IAAI,CAAC4H,eAAe,CAAwBxV,IAAI,CAAC,CAAA;QAC9D4N,IAAI,CAACg+B,UAAU,GAAG5rC,IAAI,CAAA;AACtB4N,QAAAA,IAAI,CAACi+B,SAAS,GAAG,IAAI,CAAC+nB,WAAW,EAAE,CAAA;QACnC,IAAI,CAACp3B,MAAM,CAAa,CAAA,CAAA,CAAA;QACxBx8B,IAAI,GAAG,IAAI,CAACqS,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACrD,OAAA;AACF,KAAA;AACA,IAAA,OAAO5N,IAAI,CAAA;AACb,GAAA;AAEAw1D,EAAAA,mBAAmB,GAAqB;AACtC,IAAA,MAAM5nD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAoB,CAAA;AAC/C,IAAA,MAAMsjD,QAAQ,GAAG,IAAI,CAAC9gD,KAAK,CAACxX,KAAK,CAAA;IACjC,IAAI,CAACumB,IAAI,EAAE,CAAA;IACX9V,IAAI,CAAC6nD,QAAQ,GAAGA,QAAQ,CAAA;AACxB7nD,IAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAAC+vB,2BAA2B,EAAE,CAAA;IAExD,IAAID,QAAQ,KAAK,UAAU,EAAE;AAC3B,MAAA,IAAI,CAACE,gCAAgC;AAEnC/nD,MAAAA,IAAI,CACL,CAAA;AACH,KAAA;AAEA,IAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,GAAA;EAEA+nD,gCAAgC,CAAC/nD,IAAY,EAAE;AAC7C,IAAA,QAAQA,IAAI,CAAC+3B,cAAc,CAAC3lC,IAAI;AAC9B,MAAA,KAAK,aAAa,CAAA;AAClB,MAAA,KAAK,aAAa;AAChB,QAAA,OAAA;AACF,MAAA;AACE,QAAA,IAAI,CAAC6T,KAAK,CAACm2C,QAAQ,CAAC4D,kBAAkB,EAAE;AAAE95C,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AAAC,KAAA;AAE5D,GAAA;AAEAgoD,EAAAA,gBAAgB,GAAkB;AAChC,IAAA,MAAMhoD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAiB,CAAA;IAC5C,IAAI,CAAC8pB,gBAAgB,CAAW,GAAA,CAAA,CAAA;AAChC,IAAA,MAAM8M,aAAa,GAAG,IAAI,CAAC52B,SAAS,EAAqB,CAAA;AACzD42B,IAAAA,aAAa,CAACnjC,IAAI,GAAG,IAAI,CAAC6rD,wBAAwB,EAAE,CAAA;AACpD1oB,IAAAA,aAAa,CAAC2oB,UAAU,GAAG,IAAI,CAAC7C,UAAU,CAAC,MACzC,IAAI,CAACgH,6BAA6B,EAAE,CACrC,CAAA;IACDjoD,IAAI,CAACm7B,aAAa,GAAG,IAAI,CAAC12B,UAAU,CAAC02B,aAAa,EAAE,iBAAiB,CAAC,CAAA;AACtE,IAAA,OAAO,IAAI,CAAC12B,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,CAAA;AAC7C,GAAA;AAEAioD,EAAAA,6BAA6B,GAAG;AAC9B,IAAA,IAAI,IAAI,CAACljC,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB,MAAM++B,UAAU,GAAG,IAAI,CAACoE,mCAAmC,CAAC,MAC1D,IAAI,CAAClC,WAAW,EAAE,CACnB,CAAA;MACD,IACE,IAAI,CAACj/C,KAAK,CAACqY,iCAAiC,IAC5C,CAAC,IAAI,CAACoD,KAAK,CAAA,EAAA,CAAa,EACxB;AACA,QAAA,OAAOshC,UAAU,CAAA;AACnB,OAAA;AACF,KAAA;AACF,GAAA;AAEAgE,EAAAA,2BAA2B,GAAa;AACtC,IAAA,MAAMK,cAAc,GAClBz0C,qBAAqB,CAAC,IAAI,CAAC3M,KAAK,CAAC3U,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC2U,KAAK,CAAC+Y,WAAW,CAAA;IACnE,OAAOqoC,cAAc,GACjB,IAAI,CAACP,mBAAmB,EAAE,GAC1B,IAAI,CAAC95B,YAAY,CAAA,GAAA,CAAW,GAC5B,IAAI,CAACk6B,gBAAgB,EAAE,GACvB,IAAI,CAACf,gCAAgC,CAAC,MACpC,IAAI,CAACU,wBAAwB,EAAE,CAChC,CAAA;AACP,GAAA;AAEAS,EAAAA,8BAA8B,CAC5B51D,IAA0C,EAC1C61D,oBAAoC,EACpCR,QAAmB,EACT;AACV,IAAA,MAAM7nD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAwC,CAAA;AACnE,IAAA,MAAM+jD,kBAAkB,GAAG,IAAI,CAACvjC,GAAG,CAAC8iC,QAAQ,CAAC,CAAA;IAC7C,MAAMv/C,KAAK,GAAG,EAAE,CAAA;IAChB,GAAG;AACDA,MAAAA,KAAK,CAAC5E,IAAI,CAAC2kD,oBAAoB,EAAE,CAAC,CAAA;AACpC,KAAC,QAAQ,IAAI,CAACtjC,GAAG,CAAC8iC,QAAQ,CAAC,EAAA;IAC3B,IAAIv/C,KAAK,CAACrZ,MAAM,KAAK,CAAC,IAAI,CAACq5D,kBAAkB,EAAE;MAC7C,OAAOhgD,KAAK,CAAC,CAAC,CAAC,CAAA;AACjB,KAAA;IACAtI,IAAI,CAACsI,KAAK,GAAGA,KAAK,CAAA;AAClB,IAAA,OAAO,IAAI,CAAC7D,UAAU,CAACzE,IAAI,EAAExN,IAAI,CAAC,CAAA;AACpC,GAAA;AAEA+1D,EAAAA,+BAA+B,GAAa;AAC1C,IAAA,OAAO,IAAI,CAACH,8BAA8B,CACxC,oBAAoB,EACpB,IAAI,CAACN,2BAA2B,CAAC5G,IAAI,CAAC,IAAI,CAAC,EAE5C,EAAA,CAAA,CAAA;AACH,GAAA;AAEAsH,EAAAA,wBAAwB,GAAG;AACzB,IAAA,OAAO,IAAI,CAACJ,8BAA8B,CACxC,aAAa,EACb,IAAI,CAACG,+BAA+B,CAACrH,IAAI,CAAC,IAAI,CAAC,EAEhD,EAAA,CAAA,CAAA;AACH,GAAA;AAEAuH,EAAAA,uBAAuB,GAAG;AACxB,IAAA,IAAI,IAAI,CAACjmC,KAAK,CAAA,EAAA,CAAO,EAAE;AACrB,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OACE,IAAI,CAACA,KAAK,CAAW,EAAA,CAAA,IACrB,IAAI,CAACuiC,WAAW,CAAC,IAAI,CAAC2D,oCAAoC,CAACxH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAE1E,GAAA;AAEAyH,EAAAA,oBAAoB,GAAY;AAC9B,IAAA,IAAI91C,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,IAAI,IAAI,CAACowB,KAAK,IAAU,EAAE;MAC9D,IAAI,CAAC1M,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AAEA,IAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,CAAA,CAAW,EAAE;MAEzB,MAAM;AAAE9D,QAAAA,MAAAA;OAAQ,GAAG,IAAI,CAAC3X,KAAK,CAAA;AAC7B,MAAA,MAAM6hD,kBAAkB,GAAGlqC,MAAM,CAACzvB,MAAM,CAAA;MACxC,IAAI;AACF,QAAA,IAAI,CAAC45D,eAAe,CAAY,CAAA,EAAA,IAAI,CAAC,CAAA;AACrC,QAAA,OAAOnqC,MAAM,CAACzvB,MAAM,KAAK25D,kBAAkB,CAAA;AAC7C,OAAC,CAAC,OAAM,OAAA,EAAA;AACN,QAAA,OAAO,KAAK,CAAA;AACd,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,IAAI,CAACpmC,KAAK,CAAA,CAAA,CAAa,EAAE;MAC3B,IAAI,CAAC1M,IAAI,EAAE,CAAA;MAEX,MAAM;AAAE4I,QAAAA,MAAAA;OAAQ,GAAG,IAAI,CAAC3X,KAAK,CAAA;AAC7B,MAAA,MAAM6hD,kBAAkB,GAAGlqC,MAAM,CAACzvB,MAAM,CAAA;MACxC,IAAI;AACF,QAAA,KAAK,CAACy1D,gBAAgB,CAGpB,CAAA,EAAA,EAAA,EAAA,IAAI,CACL,CAAA;AACD,QAAA,OAAOhmC,MAAM,CAACzvB,MAAM,KAAK25D,kBAAkB,CAAA;AAC7C,OAAC,CAAC,OAAM,QAAA,EAAA;AACN,QAAA,OAAO,KAAK,CAAA;AACd,OAAA;AACF,KAAA;AAEA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEAF,EAAAA,oCAAoC,GAAY;IAC9C,IAAI,CAAC5yC,IAAI,EAAE,CAAA;IACX,IAAI,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAW,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAa,EAAE;AAGpD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,IAAI,IAAI,CAACmmC,oBAAoB,EAAE,EAAE;AAC/B,MAAA,IACE,IAAI,CAACnmC,KAAK,IAAU,IACpB,IAAI,CAACA,KAAK,CAAA,EAAA,CAAU,IACpB,IAAI,CAACA,KAAK,CAAa,EAAA,CAAA,IACvB,IAAI,CAACA,KAAK,IAAO,EACjB;AAKA,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;AACA,MAAA,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAW,EAAE;QACzB,IAAI,CAAC1M,IAAI,EAAE,CAAA;AACX,QAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAU,EAAE;AAExB,UAAA,OAAO,IAAI,CAAA;AACb,SAAA;AACF,OAAA;AACF,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEAiiC,oCAAoC,CAClCN,WAAsB,EACF;AACpB,IAAA,OAAO,IAAI,CAAC2E,QAAQ,CAAC,MAAM;AACzB,MAAA,MAAMC,CAAC,GAAG,IAAI,CAACxkD,SAAS,EAAsB,CAAA;AAC9C,MAAA,IAAI,CAACqqB,MAAM,CAACu1B,WAAW,CAAC,CAAA;AAExB,MAAA,MAAMnkD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAqB,CAAA;AAEhD,MAAA,MAAM8+C,OAAO,GAAG,CAAC,CAAC,IAAI,CAACpC,UAAU,CAC/B,IAAI,CAAC+H,2BAA2B,CAAC9H,IAAI,CAAC,IAAI,CAAC,CAC5C,CAAA;AAED,MAAA,IAAImC,OAAO,IAAI,IAAI,CAAC7gC,KAAK,IAAU,EAAE;AAGnC,QAAA,IAAIymC,iBAAiB,GAAG,IAAI,CAAC3B,kCAAkC,EAAE,CAAA;AAGjE,QAAA,IAAI2B,iBAAiB,CAAC72D,IAAI,KAAK,YAAY,EAAE;UAC3C4N,IAAI,CAACmjD,aAAa,GAAG8F,iBAAiB,CAAA;UACtCjpD,IAAI,CAACqjD,OAAO,GAAG,IAAI,CAAA;UAClBrjD,IAAI,CAAuB+3B,cAAc,GAAG,IAAI,CAAA;UACjDkxB,iBAAiB,GAAG,IAAI,CAACxkD,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AAC9D,SAAC,MAAM;AACL,UAAA,IAAI,CAAC2xB,0BAA0B,CAACs3B,iBAAiB,EAAEjpD,IAAI,CAAC,CAAA;UACxDipD,iBAAiB,CAAC5F,OAAO,GAAG,IAAI,CAAA;AAClC,SAAA;QACA0F,CAAC,CAAChxB,cAAc,GAAGkxB,iBAAiB,CAAA;AACpC,QAAA,OAAO,IAAI,CAACxkD,UAAU,CAACskD,CAAC,EAAE,kBAAkB,CAAC,CAAA;AAC/C,OAAA;AAEA,MAAA,MAAMG,qBAAqB,GACzB,IAAI,CAACxI,cAAc,EAAE,IACrB,IAAI,CAACO,UAAU,CAAC,IAAI,CAACkI,0BAA0B,CAACjI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;MAE7D,IAAI,CAACgI,qBAAqB,EAAE;QAC1B,IAAI,CAAC7F,OAAO,EAAE;AAEZ,UAAA,OAAO,IAAI,CAACD,qBAAqB,CAAgB,KAAK,EAAE2F,CAAC,CAAC,CAAA;AAC5D,SAAA;;AAGA/oD,QAAAA,IAAI,CAACmjD,aAAa,GAAG,IAAI,CAAC5rB,eAAe,EAAE,CAAA;QAC3Cv3B,IAAI,CAACqjD,OAAO,GAAGA,OAAO,CAAA;QACrBrjD,IAAI,CAAuB+3B,cAAc,GAAG,IAAI,CAAA;QACjDgxB,CAAC,CAAChxB,cAAc,GAAG,IAAI,CAACtzB,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AAC3D,QAAA,OAAO,IAAI,CAACyE,UAAU,CAACskD,CAAC,EAAE,kBAAkB,CAAC,CAAA;AAC/C,OAAA;;AAGA,MAAA,MAAM32D,IAAI,GAAG,IAAI,CAACgxD,qBAAqB,CAAgB,KAAK,CAAC,CAAA;MAC7DpjD,IAAI,CAACmjD,aAAa,GAAG+F,qBAAqB,CAAA;MAC1ClpD,IAAI,CAAC+3B,cAAc,GAAG3lC,IAAI,CAAA;MAC1B4N,IAAI,CAACqjD,OAAO,GAAGA,OAAO,CAAA;MACtB0F,CAAC,CAAChxB,cAAc,GAAG,IAAI,CAACtzB,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AAC3D,MAAA,OAAO,IAAI,CAACyE,UAAU,CAACskD,CAAC,EAAE,kBAAkB,CAAC,CAAA;AAC/C,KAAC,CAAC,CAAA;AACJ,GAAA;AAEAK,EAAAA,uCAAuC,GAG9B;IACP,OAAO,IAAI,CAAC5mC,KAAK,CAAU,EAAA,CAAA,GACvB,IAAI,CAACiiC,oCAAoC,CAAU,EAAA,CAAA,GACnDvoC,SAAS,CAAA;AACf,GAAA;AAEA+oC,EAAAA,wBAAwB,GAA0C;IAChE,OAAO,IAAI,CAACziC,KAAK,CAAU,EAAA,CAAA,GAAG,IAAI,CAAC4gC,qBAAqB,EAAE,GAAGlnC,SAAS,CAAA;AACxE,GAAA;AAEA+pC,EAAAA,cAAc,GAAgC;IAC5C,OAAO,IAAI,CAAClC,kBAAkB,CAAU,EAAA,CAAA,CAAA;AAC1C,GAAA;AAEAoF,EAAAA,0BAA0B,GAAoC;AAC5D,IAAA,MAAMplD,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;IACjC,IAAI,IAAI,CAACzJ,YAAY,CAAQ,GAAA,CAAA,IAAI,CAAC,IAAI,CAACS,qBAAqB,EAAE,EAAE;MAC9D,IAAI,CAACzY,IAAI,EAAE,CAAA;AACX,MAAA,OAAO/R,EAAE,CAAA;AACX,KAAA;AACF,GAAA;AAEAilD,EAAAA,2BAA2B,GAAY;AACrC,IAAA,IAAI,IAAI,CAACjiD,KAAK,CAAC3U,IAAI,QAAgB,EAAE;AACnC,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AACA,IAAA,MAAM0tB,WAAW,GAAG,IAAI,CAAC/Y,KAAK,CAAC+Y,WAAW,CAAA;IAC1C,IAAI,CAAChK,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,CAACjD,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,IAAI,CAAC,IAAI,CAACowB,KAAK,IAAU,EAAE;AAChE,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AAEA,IAAA,IAAI1C,WAAW,EAAE;AACf,MAAA,IAAI,CAAC7Z,KAAK,CAACxG,MAAM,CAAClJ,0BAA0B,EAAE;AAC5C2P,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACC,eAAe;AAC9BxQ,QAAAA,YAAY,EAAE,SAAA;AAChB,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEA4sD,qBAAqB,CACnBiG,QAAQ,GAAG,IAAI,EACfN,CAA6B,GAAG,IAAI,CAACxkD,SAAS,EAAsB,EAChD;IACpB,IAAI,CAACukD,QAAQ,CAAC,MAAM;AAClB,MAAA,IAAIO,QAAQ,EAAE,IAAI,CAACz6B,MAAM,CAAU,EAAA,CAAA,CAAA;AACnCm6B,MAAAA,CAAC,CAAChxB,cAAc,GAAG,IAAI,CAACiuB,WAAW,EAAE,CAAA;AACvC,KAAC,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAACvhD,UAAU,CAACskD,CAAC,EAAE,kBAAkB,CAAC,CAAA;AAC/C,GAAA;;AAGA/C,EAAAA,WAAW,GAAa;AAEtB7J,IAAAA,MAAM,CAAC,IAAI,CAACp1C,KAAK,CAACgY,MAAM,CAAC,CAAA;AACzB,IAAA,MAAM3sB,IAAI,GAAG,IAAI,CAACk3D,yBAAyB,EAAE,CAAA;AAE7C,IAAA,IACE,IAAI,CAACviD,KAAK,CAACqY,iCAAiC,IAC5C,IAAI,CAACmP,qBAAqB,EAAE,IAC5B,CAAC,IAAI,CAACxJ,GAAG,IAAa,EACtB;AACA,MAAA,OAAO3yB,IAAI,CAAA;AACb,KAAA;AACA,IAAA,MAAM4N,IAAI,GAAG,IAAI,CAAC4H,eAAe,CAAsBxV,IAAI,CAAC,CAAA;IAC5D4N,IAAI,CAACwmD,SAAS,GAAGp0D,IAAI,CAAA;AAErB4N,IAAAA,IAAI,CAACupD,WAAW,GAAG,IAAI,CAACrB,mCAAmC,CAAC,MAC1D,IAAI,CAACoB,yBAAyB,EAAE,CACjC,CAAA;IAED,IAAI,CAAC16B,MAAM,CAAa,EAAA,CAAA,CAAA;AACxB5uB,IAAAA,IAAI,CAACwpD,QAAQ,GAAG,IAAI,CAACvC,gCAAgC,CAAC,MACpD,IAAI,CAACjB,WAAW,EAAE,CACnB,CAAA;IAED,IAAI,CAACp3B,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB5uB,IAAAA,IAAI,CAACypD,SAAS,GAAG,IAAI,CAACxC,gCAAgC,CAAC,MACrD,IAAI,CAACjB,WAAW,EAAE,CACnB,CAAA;AAED,IAAA,OAAO,IAAI,CAACvhD,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;AAEA0pD,EAAAA,8BAA8B,GAAY;IACxC,OACE,IAAI,CAAC57B,YAAY,CAAc,GAAA,CAAA,IAAI,IAAI,CAAC5I,SAAS,EAAE,CAAC9yB,IAAI,KAAY,EAAA,CAAA;AAExE,GAAA;AAEAk3D,EAAAA,yBAAyB,GAAa;AACpC,IAAA,IAAI,IAAI,CAACb,uBAAuB,EAAE,EAAE;AAClC,MAAA,OAAO,IAAI,CAAC1B,gCAAgC,CAAC,gBAAgB,CAAC,CAAA;AAChE,KAAA;AACA,IAAA,IAAI,IAAI,CAACvkC,KAAK,CAAA,EAAA,CAAS,EAAE;AAEvB,MAAA,OAAO,IAAI,CAACukC,gCAAgC,CAAC,mBAAmB,CAAC,CAAA;AACnE,KAAC,MAAM,IAAI,IAAI,CAAC2C,8BAA8B,EAAE,EAAE;AAEhD,MAAA,OAAO,IAAI,CAAC3C,gCAAgC,CAC1C,mBAAmB,EACJ,IAAI,CACpB,CAAA;AACH,KAAA;IACA,OAAO,IAAI,CAACyB,wBAAwB,EAAE,CAAA;AACxC,GAAA;AAEAmB,EAAAA,oBAAoB,GAAsB;IACxC,IAAI,IAAI,CAAC/lD,eAAe,CAAC,YAAY,EAAE,0BAA0B,CAAC,EAAE;AAClE,MAAA,IAAI,CAACqC,KAAK,CAACm2C,QAAQ,CAACgD,qBAAqB,EAAE;AAAEl5C,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,OAAC,CAAC,CAAA;AACzE,KAAA;AAEA,IAAA,MAAMpF,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAqB,CAAA;AAChDvE,IAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAAC+wB,QAAQ,CAAC,MAAM;MACxC,IAAI,CAAChzC,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAW,GACxB,IAAI,CAACugC,oBAAoB,EAAE,GAC3B,IAAI,CAACiD,WAAW,EAAE,CAAA;AACxB,KAAC,CAAC,CAAA;IACF,IAAI,CAACp3B,MAAM,CAAO,EAAA,CAAA,CAAA;AAClB5uB,IAAAA,IAAI,CAAC2B,UAAU,GAAG,IAAI,CAAC8lD,eAAe,EAAE,CAAA;AACxC,IAAA,OAAO,IAAI,CAAChjD,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;EAEA4pD,qBAAqB,CACnBhsD,KAA+B,EACS;AACxC,IAAA,MAAMisD,gBAAgB,GAAG,IAAI,CAAC9iD,KAAK,CAAC3B,QAAQ,CAAA;IAE5C,MAAM0kD,aAAa,GAAG,IAAI,CAAC7H,oBAAoB,CAC7C,uBAAuB,EACvB,MAAM;AACJ,MAAA,MAAMjiD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmC,CAAA;AAC9DvE,MAAAA,IAAI,CAAC2B,UAAU,GAAG,IAAI,CAACihD,iBAAiB,EAAE,CAAA;AAC1C,MAAA,IAAI,IAAI,CAACpgC,KAAK,CAAA,EAAA,CAAO,EAAE;AACrBxiB,QAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACo/C,oBAAoB,EAAE,CAAA;AACnD,OAAA;AAEA,MAAA,OAAO,IAAI,CAACp+C,UAAU,CAACzE,IAAI,EAAE,+BAA+B,CAAC,CAAA;AAC/D,KAAC,CACF,CAAA;AAED,IAAA,IAAI,CAAC8pD,aAAa,CAAC76D,MAAM,EAAE;AACzB,MAAA,IAAI,CAACgX,KAAK,CAACm2C,QAAQ,CAACkB,uBAAuB,EAAE;AAC3Cp3C,QAAAA,EAAE,EAAE2jD,gBAAgB;AACpBjsD,QAAAA,KAAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAOksD,aAAa,CAAA;AACtB,GAAA;AAEAC,EAAAA,2BAA2B,CACzB/pD,IAAsC,EACtCrQ,UAEC,GAAG,EAAE,EACuC;AAC7C,IAAA,IAAI,IAAI,CAAC6+B,qBAAqB,EAAE,EAAE,OAAO,IAAI,CAAA;IAC7C,IAAI,CAACH,gBAAgB,CAAe,GAAA,CAAA,CAAA;IACpC,IAAI1+B,UAAU,CAAC6qC,OAAO,EAAEx6B,IAAI,CAACw6B,OAAO,GAAG,IAAI,CAAA;IAC3C,IAAI3nB,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAAE;AACtC4N,MAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;MAChC,IAAI,CAACyyB,eAAe,CAAChqD,IAAI,CAAC+D,EAAE,EAAE+T,iBAAiB,CAAC,CAAA;AAClD,KAAC,MAAM;MACL9X,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAAA;AACd,MAAA,IAAI,CAACkC,KAAK,CAACm2C,QAAQ,CAACsC,oBAAoB,EAAE;AAAEx4C,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,OAAC,CAAC,CAAA;AACxE,KAAA;AAEApF,IAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACugD,wBAAwB,CACjD,IAAI,CAACP,qBAAqB,CAACvC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAA;AACD,IAAA,IAAI,IAAI,CAACn8B,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB/kB,IAAI,CAACu5B,OAAO,GAAG,IAAI,CAACqwB,qBAAqB,CAAC,SAAS,CAAC,CAAA;AACtD,KAAA;AACA,IAAA,MAAM3mD,IAAI,GAAG,IAAI,CAACsB,SAAS,EAAqB,CAAA;AAChDtB,IAAAA,IAAI,CAACA,IAAI,GAAG,IAAI,CAAC6lD,QAAQ,CAAC,IAAI,CAACpD,wBAAwB,CAACxE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACnElhD,IAAI,CAACiD,IAAI,GAAG,IAAI,CAACwB,UAAU,CAACxB,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACpD,IAAA,OAAO,IAAI,CAACwB,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AACxD,GAAA;EAEAiqD,2BAA2B,CACzBjqD,IAA8B,EACJ;AAC1BA,IAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;IAChC,IAAI,CAACyyB,eAAe,CAAChqD,IAAI,CAAC+D,EAAE,EAAEgU,YAAY,CAAC,CAAA;AAE3C/X,IAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAAC+wB,QAAQ,CAAC,MAAM;AACxC9oD,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACugD,wBAAwB,CACjD,IAAI,CAACP,qBAAqB,CAACvC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAA;MAED,IAAI,CAACtyB,MAAM,CAAO,EAAA,CAAA,CAAA;AAElB,MAAA,IACE,IAAI,CAACd,YAAY,CAAA,GAAA,CAAe,IAChC,IAAI,CAAC5I,SAAS,EAAE,CAAC9yB,IAAI,KAAA,EAAW,EAChC;AACA,QAAA,MAAM4N,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmB,CAAA;QAC9C,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,QAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,oBAAoB,CAAC,CAAA;AACpD,OAAA;MAEA,OAAO,IAAI,CAACgmD,WAAW,EAAE,CAAA;AAC3B,KAAC,CAAC,CAAA;IAEF,IAAI,CAACt3B,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AACxD,GAAA;EAEAkqD,aAAa,CAAIC,EAAW,EAAK;AAC/B,IAAA,MAAMC,UAAU,GAAG,IAAI,CAACrjD,KAAK,CAACkN,OAAO,CAAA;IACrC,IAAI,CAAClN,KAAK,CAACkN,OAAO,GAAG,CAACm2C,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,IAAI;AACF,MAAA,OAAOD,EAAE,EAAE,CAAA;AACb,KAAC,SAAS;AACR,MAAA,IAAI,CAACpjD,KAAK,CAACkN,OAAO,GAAGm2C,UAAU,CAAA;AACjC,KAAA;AACF,GAAA;;EAOAtB,QAAQ,CAAIqB,EAAW,EAAK;AAC1B,IAAA,MAAMtzB,SAAS,GAAG,IAAI,CAAC9vB,KAAK,CAACgY,MAAM,CAAA;AACnC,IAAA,IAAI,CAAChY,KAAK,CAACgY,MAAM,GAAG,IAAI,CAAA;IACxB,IAAI;AACF,MAAA,OAAOorC,EAAE,EAAE,CAAA;AACb,KAAC,SAAS;AACR,MAAA,IAAI,CAACpjD,KAAK,CAACgY,MAAM,GAAG8X,SAAS,CAAA;AAC/B,KAAA;AACF,GAAA;EAEAqxB,mCAAmC,CAAIiC,EAAW,EAAK;AACrD,IAAA,MAAME,oCAAoC,GACxC,IAAI,CAACtjD,KAAK,CAACqY,iCAAiC,CAAA;AAC9C,IAAA,IAAI,CAACrY,KAAK,CAACqY,iCAAiC,GAAG,IAAI,CAAA;IACnD,IAAI;AACF,MAAA,OAAO+qC,EAAE,EAAE,CAAA;AACb,KAAC,SAAS;AACR,MAAA,IAAI,CAACpjD,KAAK,CAACqY,iCAAiC,GAC1CirC,oCAAoC,CAAA;AACxC,KAAA;AACF,GAAA;EAEApD,gCAAgC,CAAIkD,EAAW,EAAK;AAClD,IAAA,MAAME,oCAAoC,GACxC,IAAI,CAACtjD,KAAK,CAACqY,iCAAiC,CAAA;AAC9C,IAAA,IAAI,CAACrY,KAAK,CAACqY,iCAAiC,GAAG,KAAK,CAAA;IACpD,IAAI;AACF,MAAA,OAAO+qC,EAAE,EAAE,CAAA;AACb,KAAC,SAAS;AACR,MAAA,IAAI,CAACpjD,KAAK,CAACqY,iCAAiC,GAC1CirC,oCAAoC,CAAA;AACxC,KAAA;AACF,GAAA;EAEAtG,kBAAkB,CAACnmD,KAAgB,EAA+B;AAChE,IAAA,OAAO,CAAC,IAAI,CAAC4kB,KAAK,CAAC5kB,KAAK,CAAC,GAAGse,SAAS,GAAG,IAAI,CAACouC,mBAAmB,EAAE,CAAA;AACpE,GAAA;EAEAzE,qBAAqB,CAACjoD,KAAgB,EAAY;IAChD,OAAO,IAAI,CAAC2sD,iBAAiB,CAAC,MAAM,IAAI,CAAC37B,MAAM,CAAChxB,KAAK,CAAC,CAAC,CAAA;AACzD,GAAA;AAEA0sD,EAAAA,mBAAmB,GAAa;IAC9B,OAAO,IAAI,CAACC,iBAAiB,CAAC,MAAM,IAAI,CAACz0C,IAAI,EAAE,CAAC,CAAA;AAClD,GAAA;EAEAy0C,iBAAiB,CAACJ,EAAc,EAAY;AAC1C,IAAA,OAAO,IAAI,CAACrB,QAAQ,CAAC,MAAM;AACzBqB,MAAAA,EAAE,EAAE,CAAA;MACJ,OAAO,IAAI,CAACnE,WAAW,EAAE,CAAA;AAC3B,KAAC,CAAC,CAAA;AACJ,GAAA;AAEAwE,EAAAA,iBAAiB,GAAmB;AAClC,IAAA,MAAMxqD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAkB,CAAA;IAE7CvE,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACye,KAAK,CAAW,GAAA,CAAA,GAC3B,KAAK,CAACnhB,kBAAkB,CAAC,IAAI,CAAC0F,KAAK,CAACxX,KAAK,CAAC,GAC1C,IAAI,CAACgoC,eAAe,CAAe,IAAI,CAAC,CAAA;AAC5C,IAAA,IAAI,IAAI,CAACxS,GAAG,CAAA,EAAA,CAAO,EAAE;AACnB/kB,MAAAA,IAAI,CAACyqD,WAAW,GAAG,KAAK,CAAC5qB,uBAAuB,EAAE,CAAA;AACpD,KAAA;AACA,IAAA,OAAO,IAAI,CAACp7B,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,GAAA;AAEA0qD,EAAAA,sBAAsB,CACpB1qD,IAAiC,EACjCrQ,UAGC,GAAG,EAAE,EACe;IACrB,IAAIA,UAAU,CAACimC,KAAK,EAAE51B,IAAI,CAAC41B,KAAK,GAAG,IAAI,CAAA;IACvC,IAAIjmC,UAAU,CAAC6qC,OAAO,EAAEx6B,IAAI,CAACw6B,OAAO,GAAG,IAAI,CAAA;IAC3C,IAAI,CAACnM,gBAAgB,CAAU,GAAA,CAAA,CAAA;AAC/BruB,IAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;AAChC,IAAA,IAAI,CAACyyB,eAAe,CAClBhqD,IAAI,CAAC+D,EAAE,EACP/D,IAAI,CAAC41B,KAAK,GAAGxd,kBAAkB,GAAGJ,YAAY,CAC/C,CAAA;IAED,IAAI,CAAC4W,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB5uB,IAAAA,IAAI,CAACunC,OAAO,GAAG,IAAI,CAAC0a,oBAAoB,CACtC,aAAa,EACb,IAAI,CAACuI,iBAAiB,CAACtJ,IAAI,CAAC,IAAI,CAAC,CAClC,CAAA;IACD,IAAI,CAACtyB,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;AAEA2qD,EAAAA,kBAAkB,GAAoB;AACpC,IAAA,MAAM3qD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAmB,CAAA;AAC9C,IAAA,IAAI,CAACiW,KAAK,CAACF,KAAK,CAACpE,WAAW,CAAC,CAAA;IAE7B,IAAI,CAAC0Y,MAAM,CAAW,CAAA,CAAA,CAAA;AAEtB,IAAA,KAAK,CAACg8B,2BAA2B,CAC9B5qD,IAAI,CAACiD,IAAI,GAAG,EAAE,EACEiZ,SAAS,EACX,IAAI,EAEpB,CAAA,CAAA,CAAA;AACD,IAAA,IAAI,CAAC1B,KAAK,CAACD,IAAI,EAAE,CAAA;AACjB,IAAA,OAAO,IAAI,CAAC9V,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;AAEA6qD,EAAAA,mCAAmC,CACjC7qD,IAAmC,EACnC8qD,MAAe,GAAG,KAAK,EACA;AACvB9qD,IAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;IAEhC,IAAI,CAACuzB,MAAM,EAAE;MACX,IAAI,CAACd,eAAe,CAAChqD,IAAI,CAAC+D,EAAE,EAAEsU,iBAAiB,CAAC,CAAA;AAClD,KAAA;AAEA,IAAA,IAAI,IAAI,CAAC0M,GAAG,CAAA,EAAA,CAAQ,EAAE;AACpB,MAAA,MAAMgmC,KAAK,GAAG,IAAI,CAACxmD,SAAS,EAAyB,CAAA;AACrD,MAAA,IAAI,CAACsmD,mCAAmC,CAACE,KAAK,EAAE,IAAI,CAAC,CAAA;MAErD/qD,IAAI,CAACiD,IAAI,GAAG8nD,KAAK,CAAA;AACnB,KAAC,MAAM;AACL,MAAA,IAAI,CAACvwC,KAAK,CAACF,KAAK,CAAC3D,eAAe,CAAC,CAAA;AACjC,MAAA,IAAI,CAAC0Z,SAAS,CAAC/V,KAAK,CAACyS,KAAK,CAAC,CAAA;AAC3B/sB,MAAAA,IAAI,CAACiD,IAAI,GAAG,IAAI,CAAC0nD,kBAAkB,EAAE,CAAA;AACrC,MAAA,IAAI,CAACt6B,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,MAAA,IAAI,CAACC,KAAK,CAACD,IAAI,EAAE,CAAA;AACnB,KAAA;AACA,IAAA,OAAO,IAAI,CAAC9V,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACrD,GAAA;EAEAgrD,uCAAuC,CACrChrD,IAA2B,EACJ;AACvB,IAAA,IAAI,IAAI,CAAC8tB,YAAY,CAAA,GAAA,CAAY,EAAE;MACjC9tB,IAAI,CAACirD,MAAM,GAAG,IAAI,CAAA;AAClBjrD,MAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;AAClC,KAAC,MAAM,IAAI,IAAI,CAAC/U,KAAK,KAAW,EAAE;AAChCxiB,MAAAA,IAAI,CAAC+D,EAAE,GAAG,KAAK,CAAC1C,kBAAkB,CAAC,IAAI,CAAC0F,KAAK,CAACxX,KAAK,CAAC,CAAA;AACtD,KAAC,MAAM;MACL,IAAI,CAACyH,UAAU,EAAE,CAAA;AACnB,KAAA;AACA,IAAA,IAAI,IAAI,CAACwrB,KAAK,CAAA,CAAA,CAAW,EAAE;AACzB,MAAA,IAAI,CAAChI,KAAK,CAACF,KAAK,CAAC3D,eAAe,CAAC,CAAA;AACjC,MAAA,IAAI,CAAC0Z,SAAS,CAAC/V,KAAK,CAACyS,KAAK,CAAC,CAAA;AAC3B/sB,MAAAA,IAAI,CAACiD,IAAI,GAAG,IAAI,CAAC0nD,kBAAkB,EAAE,CAAA;AACrC,MAAA,IAAI,CAACt6B,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,MAAA,IAAI,CAACC,KAAK,CAACD,IAAI,EAAE,CAAA;AACnB,KAAC,MAAM;MACL,IAAI,CAACmU,SAAS,EAAE,CAAA;AAClB,KAAA;AAEA,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACrD,GAAA;AAEAkrD,EAAAA,8BAA8B,CAC5BlrD,IAAyC,EACzCmrD,QAAkB,EACW;AAC7BnrD,IAAAA,IAAI,CAACmrD,QAAQ,GAAGA,QAAQ,IAAI,KAAK,CAAA;AACjCnrD,IAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;IAChC,IAAI,CAACyyB,eAAe,CAAChqD,IAAI,CAAC+D,EAAE,EAAE0T,oBAAoB,CAAC,CAAA;IACnD,IAAI,CAACmX,MAAM,CAAO,EAAA,CAAA,CAAA;AAClB,IAAA,MAAMw8B,eAAe,GAAG,IAAI,CAACC,sBAAsB,EAAE,CAAA;IACrD,IACErrD,IAAI,CAACy1B,UAAU,KAAK,MAAM,IAC1B21B,eAAe,CAACh5D,IAAI,KAAK,2BAA2B,EACpD;AACA,MAAA,IAAI,CAAC6T,KAAK,CAACm2C,QAAQ,CAACsB,wBAAwB,EAAE;AAC5Cx3C,QAAAA,EAAE,EAAEklD,eAAAA;AACN,OAAC,CAAC,CAAA;AACJ,KAAA;IACAprD,IAAI,CAACorD,eAAe,GAAGA,eAAe,CAAA;IACtC,IAAI,CAAC18B,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,2BAA2B,CAAC,CAAA;AAC3D,GAAA;AAEAsrD,EAAAA,2BAA2B,GAAY;IACrC,OACE,IAAI,CAACx9B,YAAY,CAAA,GAAA,CAAa,IAC9B,IAAI,CAACtI,iBAAiB,EAAE,KAA8B,EAAA,CAAA;AAE1D,GAAA;AAEA6lC,EAAAA,sBAAsB,GAAwB;AAC5C,IAAA,OAAO,IAAI,CAACC,2BAA2B,EAAE,GACrC,IAAI,CAACC,8BAA8B,EAAE,GACrC,IAAI,CAAC3I,iBAAiB,CAA0B,KAAK,CAAC,CAAA;AAC5D,GAAA;AAEA2I,EAAAA,8BAA8B,GAAgC;AAC5D,IAAA,MAAMvrD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAA+B,CAAA;IAC1D,IAAI,CAAC8pB,gBAAgB,CAAa,GAAA,CAAA,CAAA;IAClC,IAAI,CAACO,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,IAAA,IAAI,CAAC,IAAI,CAACpM,KAAK,KAAW,EAAE;MAC1B,MAAM,IAAI,CAACxrB,UAAU,EAAE,CAAA;AACzB,KAAA;AAEAgJ,IAAAA,IAAI,CAAC2B,UAAU,GAAG,KAAK,CAAC+2B,aAAa,EAAqB,CAAA;IAC1D,IAAI,CAAC9J,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,2BAA2B,CAAC,CAAA;AAC3D,GAAA;;EAIA+kD,WAAW,CAAIyG,CAAU,EAAK;AAC5B,IAAA,MAAMzkD,KAAK,GAAG,IAAI,CAACA,KAAK,CAACpI,KAAK,EAAE,CAAA;IAChC,MAAMkjB,GAAG,GAAG2pC,CAAC,EAAE,CAAA;IACf,IAAI,CAACzkD,KAAK,GAAGA,KAAK,CAAA;AAClB,IAAA,OAAO8a,GAAG,CAAA;AACZ,GAAA;EAEA4pC,kBAAkB,CAChBD,CAAU,EACY;AACtB,IAAA,MAAMnrB,MAAM,GAAG,IAAI,CAACxR,QAAQ,CAC1B+V,KAAK;AAEH4mB,IAAAA,CAAC,EAAE,IAAI5mB,KAAK,EAAE,CACjB,CAAA;IAED,IAAIvE,MAAM,CAAClR,OAAO,IAAI,CAACkR,MAAM,CAACrgC,IAAI,EAAE,OAAOkc,SAAS,CAAA;IACpD,IAAImkB,MAAM,CAACnW,KAAK,EAAE,IAAI,CAACnjB,KAAK,GAAGs5B,MAAM,CAACpR,SAAS,CAAA;IAE/C,OAAOoR,MAAM,CAACrgC,IAAI,CAAA;AACpB,GAAA;EAEAihD,UAAU,CAAIuK,CAA8B,EAAiB;AAC3D,IAAA,MAAMzkD,KAAK,GAAG,IAAI,CAACA,KAAK,CAACpI,KAAK,EAAE,CAAA;IAChC,MAAM0hC,MAAM,GAAGmrB,CAAC,EAAE,CAAA;AAClB,IAAA,IAAInrB,MAAM,KAAKnkB,SAAS,IAAImkB,MAAM,KAAK,KAAK,EAAE;AAC5C,MAAA,OAAOA,MAAM,CAAA;AACf,KAAC,MAAM;MACL,IAAI,CAACt5B,KAAK,GAAGA,KAAK,CAAA;AAClB,MAAA,OAAOmV,SAAS,CAAA;AAClB,KAAA;AACF,GAAA;EAEAwvC,iBAAiB,CAACC,IAAS,EAAoC;AAC7D,IAAA,IAAI,IAAI,CAACl9B,gBAAgB,EAAE,EAAE;AAC3B,MAAA,OAAA;AACF,KAAA;AACA,IAAA,IAAIm9B,SAAS,GAAG,IAAI,CAAC7kD,KAAK,CAAC3U,IAAI,CAAA;AAC/B,IAAA,IAAII,IAAkB,CAAA;AAEtB,IAAA,IAAI,IAAI,CAACs7B,YAAY,CAAA,EAAA,CAAS,EAAE;AAC9B89B,MAAAA,SAAS,GAAU,EAAA,CAAA;AACnBp5D,MAAAA,IAAI,GAAG,KAAc,CAAA;AACvB,KAAA;;AAGA,IAAA,OAAO,IAAI,CAACq5D,kBAAkB,CAAC,MAAM;MACnC,IAAID,SAAS,OAAiB,EAAE;QAC9BD,IAAI,CAACnxB,OAAO,GAAG,IAAI,CAAA;QACnB,OAAO,KAAK,CAACsxB,sBAAsB,CACjCH,IAAI,EACQ,KAAK,EACU,KAAK,CACjC,CAAA;AACH,OAAA;MAEA,IAAIC,SAAS,OAAc,EAAE;QAG3BD,IAAI,CAACnxB,OAAO,GAAG,IAAI,CAAA;QACnB,OAAO,IAAI,CAACuxB,UAAU,CACpBJ,IAAI,EACc,IAAI,EACL,KAAK,CACvB,CAAA;AACH,OAAA;MAEA,IAAIC,SAAS,QAAa,EAAE;AAC1B,QAAA,OAAO,IAAI,CAAClB,sBAAsB,CAACiB,IAAI,EAAE;AAAEnxB,UAAAA,OAAO,EAAE,IAAA;AAAK,SAAC,CAAC,CAAA;AAC7D,OAAA;MAEA,IAAIoxB,SAAS,QAAe,EAAE;AAC5B,QAAA,OAAO,IAAI,CAACZ,uCAAuC,CAACW,IAAI,CAAC,CAAA;AAC3D,OAAA;AAEA,MAAA,IAAIC,SAAS,KAAA,EAAc,IAAIA,SAAS,OAAY,EAAE;AACpD,QAAA,IAAI,CAAC,IAAI,CAACppC,KAAK,CAAW,EAAA,CAAA,IAAI,CAAC,IAAI,CAAC2L,qBAAqB,CAAC,MAAM,CAAC,EAAE;UACjEw9B,IAAI,CAACnxB,OAAO,GAAG,IAAI,CAAA;AACnB,UAAA,OAAO,IAAI,CAACwxB,iBAAiB,CAACL,IAAI,EAAEn5D,IAAI,IAAI,IAAI,CAACuU,KAAK,CAACxX,KAAK,EAAE,IAAI,CAAC,CAAA;AACrE,SAAA;;QAGA,IAAI,CAACq/B,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,QAAA,OAAO,IAAI,CAAC87B,sBAAsB,CAACiB,IAAI,EAAE;AACvC/1B,UAAAA,KAAK,EAAE,IAAI;AACX4E,UAAAA,OAAO,EAAE,IAAA;AACX,SAAC,CAAC,CAAA;AACJ,OAAA;MAEA,IAAIoxB,SAAS,QAAkB,EAAE;AAC/B,QAAA,MAAMvrB,MAAM,GAAG,IAAI,CAAC0pB,2BAA2B,CAAC4B,IAAI,EAAE;AACpDnxB,UAAAA,OAAO,EAAE,IAAA;AACX,SAAC,CAAC,CAAA;QACF,IAAI6F,MAAM,EAAE,OAAOA,MAAM,CAAA;AAC3B,OAAA;AAEA,MAAA,IAAIxtB,iBAAiB,CAAC+4C,SAAS,CAAC,EAAE;AAChC,QAAA,OAAO,IAAI,CAACK,kBAAkB,CAC5BN,IAAI,EACJ,IAAI,CAAC5kD,KAAK,CAACxX,KAAK,EACL,IAAI,EACE,IAAI,CACtB,CAAA;AACH,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;;AAGA28D,EAAAA,2BAA2B,GAAqC;AAC9D,IAAA,OAAO,IAAI,CAACD,kBAAkB,CAC5B,IAAI,CAAC1nD,SAAS,EAAE,EAChB,IAAI,CAACwC,KAAK,CAACxX,KAAK,EACL,IAAI,EACE,IAAI,CACtB,CAAA;AACH,GAAA;AAEA48D,EAAAA,0BAA0B,CACxBnsD,IAAmC,EACnC++B,IAAkB,EAClBl4B,UAAgC,EACE;IAClC,QAAQk4B,IAAI,CAAC/mC,IAAI;AACf,MAAA,KAAK,SAAS;AAAE,QAAA;AACd,UAAA,MAAMmP,WAAW,GAAG,IAAI,CAACukD,iBAAiB,CAAC1rD,IAAI,CAAC,CAAA;AAChD,UAAA,IAAImH,WAAW,EAAE;YACfA,WAAW,CAACqzB,OAAO,GAAG,IAAI,CAAA;AAC1B,YAAA,OAAOrzB,WAAW,CAAA;AACpB,WAAA;AACA,UAAA,MAAA;AACF,SAAA;AACA,MAAA,KAAK,QAAQ;AAGX,QAAA,IAAI,IAAI,CAACqb,KAAK,CAAA,CAAA,CAAW,EAAE;AACzB,UAAA,IAAI,CAAChI,KAAK,CAACF,KAAK,CAAC3D,eAAe,CAAC,CAAA;AACjC,UAAA,IAAI,CAAC0Z,SAAS,CAAC/V,KAAK,CAACyS,KAAK,CAAC,CAAA;UAC3B,MAAMq/B,GAAG,GAAGpsD,IAAI,CAAA;UAChBosD,GAAG,CAACnB,MAAM,GAAG,IAAI,CAAA;UACjBmB,GAAG,CAACroD,EAAE,GAAGg7B,IAAI,CAAA;AACbqtB,UAAAA,GAAG,CAACnpD,IAAI,GAAG,IAAI,CAAC0nD,kBAAkB,EAAE,CAAA;AACpC,UAAA,IAAI,CAACnwC,KAAK,CAACD,IAAI,EAAE,CAAA;AACjB,UAAA,IAAI,CAAC8V,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,UAAA,OAAO,IAAI,CAAC9V,UAAU,CAAC2nD,GAAG,EAAE,qBAAqB,CAAC,CAAA;AACpD,SAAA;AACA,QAAA,MAAA;AAEF,MAAA;AACE,QAAA,OAAO,IAAI,CAACH,kBAAkB,CAC5BjsD,IAAI,EACJ++B,IAAI,CAAC/mC,IAAI,EACE,KAAK,EAChB6O,UAAU,CACX,CAAA;AAAC,KAAA;AAER,GAAA;;EAGAolD,kBAAkB,CAChBjsD,IAAS,EACTzQ,KAAa,EACbumB,IAAa,EACbjP,UAAgC,EACE;AAElC,IAAA,QAAQtX,KAAK;AACX,MAAA,KAAK,UAAU;QACb,IACE,IAAI,CAAC88D,qBAAqB,CAACv2C,IAAI,CAAC,KAC/B,IAAI,CAAC0M,KAAK,IAAW,IAAI3P,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,CAAC,EAC7D;AACA,UAAA,OAAO,IAAI,CAACk6D,0BAA0B,CAACtsD,IAAI,EAAE6G,UAAU,CAAC,CAAA;AAC1D,SAAA;AACA,QAAA,MAAA;AAEF,MAAA,KAAK,QAAQ;AACX,QAAA,IAAI,IAAI,CAACwlD,qBAAqB,CAACv2C,IAAI,CAAC,EAAE;AACpC,UAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,GAAA,CAAW,EAAE;AACzB,YAAA,OAAO,IAAI,CAACwoC,uCAAuC,CAAChrD,IAAI,CAAC,CAAA;WAC1D,MAAM,IAAI6S,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAAE;AAC7C,YAAA,OAAO,IAAI,CAACy4D,mCAAmC,CAAC7qD,IAAI,CAAC,CAAA;AACvD,WAAA;AACF,SAAA;AACA,QAAA,MAAA;AAEF,MAAA,KAAK,WAAW;AACd,QAAA,IACE,IAAI,CAACqsD,qBAAqB,CAACv2C,IAAI,CAAC,IAChCjD,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAClC;AACA,UAAA,OAAO,IAAI,CAACy4D,mCAAmC,CAAC7qD,IAAI,CAAC,CAAA;AACvD,SAAA;AACA,QAAA,MAAA;AAEF,MAAA,KAAK,MAAM;AACT,QAAA,IACE,IAAI,CAACqsD,qBAAqB,CAACv2C,IAAI,CAAC,IAChCjD,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAClC;AACA,UAAA,OAAO,IAAI,CAAC63D,2BAA2B,CAACjqD,IAAI,CAAC,CAAA;AAC/C,SAAA;AACA,QAAA,MAAA;AAAM,KAAA;AAEZ,GAAA;EAEAqsD,qBAAqB,CAACv2C,IAAa,EAAE;AACnC,IAAA,IAAIA,IAAI,EAAE;AACR,MAAA,IAAI,IAAI,CAAC0Y,qBAAqB,EAAE,EAAE,OAAO,KAAK,CAAA;MAC9C,IAAI,CAAC1Y,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,CAAC,IAAI,CAAC2Y,gBAAgB,EAAE,CAAA;AACjC,GAAA;EAEA89B,mCAAmC,CACjCnnD,QAAkB,EAC4B;AAC9C,IAAA,IAAI,CAAC,IAAI,CAACod,KAAK,IAAO,EAAE;AACtB,MAAA,OAAOtG,SAAS,CAAA;AAClB,KAAA;AAEA,IAAA,MAAMswC,yBAAyB,GAAG,IAAI,CAACzlD,KAAK,CAAC+X,sBAAsB,CAAA;AACnE,IAAA,IAAI,CAAC/X,KAAK,CAAC+X,sBAAsB,GAAG,IAAI,CAAA;AAExC,IAAA,MAAM+C,GAAyD,GAC7D,IAAI,CAAC4pC,kBAAkB,CAAC,MAAM;AAC5B,MAAA,MAAMzrD,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAA4BtsB,QAAQ,CAAC,CAAA;AAClEpF,MAAAA,IAAI,CAACyD,cAAc,GAAG,IAAI,CAACwgD,qBAAqB,EAAE,CAAA;AAElD,MAAA,KAAK,CAAC9f,mBAAmB,CAACnkC,IAAI,CAAC,CAAA;AAC/BA,MAAAA,IAAI,CAAC83B,UAAU,GAAG,IAAI,CAACsxB,uCAAuC,EAAE,CAAA;MAChE,IAAI,CAACx6B,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB,MAAA,OAAO5uB,IAAI,CAAA;AACb,KAAC,CAAC,CAAA;AAEJ,IAAA,IAAI,CAAC+G,KAAK,CAAC+X,sBAAsB,GAAG0tC,yBAAyB,CAAA;IAE7D,IAAI,CAAC3qC,GAAG,EAAE;AACR,MAAA,OAAO3F,SAAS,CAAA;AAClB,KAAA;IAEA,OAAO,KAAK,CAAC8pB,oBAAoB,CAC/BnkB,GAAG,EAC0B,IAAI,EACrB,IAAI,CACjB,CAAA;AACH,GAAA;;AAIA4qC,EAAAA,gCAAgC,GAA0C;AACxE,IAAA,IAAI,IAAI,CAACC,SAAS,EAAE,OAAU,EAAE;AAC9B,MAAA,OAAOxwC,SAAS,CAAA;AAClB,KAAA;IACA,OAAO,IAAI,CAAC2mC,oBAAoB,EAAE,CAAA;AACpC,GAAA;AAEAA,EAAAA,oBAAoB,GAAmC;AACrD,IAAA,MAAM7iD,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAkC,CAAA;AAC7DvE,IAAAA,IAAI,CAACuC,MAAM,GAAG,IAAI,CAACumD,QAAQ,CAAC;IAE1B,IAAI,CAACoB,aAAa,CAAC,MAAM;MACvB,IAAI,CAACt7B,MAAM,CAAO,EAAA,CAAA,CAAA;AAClB,MAAA,OAAO,IAAI,CAACqzB,oBAAoB,CAC9B,2BAA2B,EAC3B,IAAI,CAAC+D,WAAW,CAAC9E,IAAI,CAAC,IAAI,CAAC,CAC5B,CAAA;AACH,KAAC,CAAC,CACH,CAAA;AACD,IAAA,IAAIlhD,IAAI,CAACuC,MAAM,CAACtT,MAAM,KAAK,CAAC,EAAE;AAC5B,MAAA,IAAI,CAACgX,KAAK,CAACm2C,QAAQ,CAACmB,kBAAkB,EAAE;AAAEr3C,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AACvD,KAAA;IACA,IAAI,CAAC4uB,MAAM,CAAO,EAAA,CAAA,CAAA;AAClB,IAAA,OAAO,IAAI,CAACnqB,UAAU,CAACzE,IAAI,EAAE,8BAA8B,CAAC,CAAA;AAC9D,GAAA;AAEA2sD,EAAAA,oBAAoB,GAAY;AAC9B,IAAA,OAAOh5C,yBAAyB,CAAC,IAAI,CAAC5M,KAAK,CAAC3U,IAAI,CAAC,CAAA;AACnD,GAAA;;AAMA6sC,EAAAA,wBAAwB,GAAY;AAClC,IAAA,IAAI,IAAI,CAAC0tB,oBAAoB,EAAE,EAAE,OAAO,KAAK,CAAA;IAC7C,OAAO,KAAK,CAAC1tB,wBAAwB,EAAE,CAAA;AACzC,GAAA;AAEA2tB,EAAAA,uBAAuB,CACrBxoB,cAA0C,EAC1Cv9B,UAAyB,EACU;AAEnC,IAAA,MAAMzB,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AAEpC,IAAA,IAAIy8C,aAAiD,CAAA;IACrD,IAAIsD,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI0H,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAIzoB,cAAc,KAAKloB,SAAS,EAAE;MAChC,MAAMklC,QAAsB,GAAG,EAAE,CAAA;MACjC,IAAI,CAACD,gBAAgB,CAAC;QACpBC,QAAQ;QACRN,gBAAgB,EAAE,CAChB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,CAAA;AAEd,OAAC,CAAC,CAAA;MACFe,aAAa,GAAGT,QAAQ,CAACS,aAAa,CAAA;MACtCgL,QAAQ,GAAGzL,QAAQ,CAACyL,QAAQ,CAAA;MAC5B1H,QAAQ,GAAG/D,QAAQ,CAAC+D,QAAQ,CAAA;MAC5B,IACE/gB,cAAc,KAAK,KAAK,KACvByd,aAAa,IAAIsD,QAAQ,IAAI0H,QAAQ,CAAC,EACvC;AACA,QAAA,IAAI,CAAC5mD,KAAK,CAACm2C,QAAQ,CAAC2D,2BAA2B,EAAE;AAAE75C,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AACpE,OAAA;AACF,KAAA;AAEA,IAAA,MAAMs8B,IAAI,GAAG,IAAI,CAACqB,iBAAiB,EAAE,CAAA;AACrC,IAAA,IAAI,CAACD,4BAA4B,CAACpB,IAAI,CAAC,CAAA;AACvC,IAAA,MAAMorB,GAAG,GAAG,IAAI,CAAC/pB,iBAAiB,CAACrB,IAAI,CAACljC,GAAG,CAAClQ,KAAK,EAAEozC,IAAI,CAAC,CAAA;AACxD,IAAA,IAAImgB,aAAa,IAAIsD,QAAQ,IAAI0H,QAAQ,EAAE;AACzC,MAAA,MAAME,EAAE,GAAG,IAAI,CAACr7B,WAAW,CAAwBtsB,QAAQ,CAAC,CAAA;MAC5D,IAAIyB,UAAU,CAAC5X,MAAM,EAAE;QACrB89D,EAAE,CAAClmD,UAAU,GAAGA,UAAU,CAAA;AAC5B,OAAA;AACA,MAAA,IAAIg7C,aAAa,EAAEkL,EAAE,CAAClL,aAAa,GAAGA,aAAa,CAAA;AACnD,MAAA,IAAIsD,QAAQ,EAAE4H,EAAE,CAAC5H,QAAQ,GAAGA,QAAQ,CAAA;AACpC,MAAA,IAAI0H,QAAQ,EAAEE,EAAE,CAACF,QAAQ,GAAGA,QAAQ,CAAA;MACpC,IAAIC,GAAG,CAAC16D,IAAI,KAAK,YAAY,IAAI06D,GAAG,CAAC16D,IAAI,KAAK,mBAAmB,EAAE;AACjE,QAAA,IAAI,CAAC6T,KAAK,CAACm2C,QAAQ,CAACgE,gCAAgC,EAAE;AAAEl6C,UAAAA,EAAE,EAAE6mD,EAAAA;AAAG,SAAC,CAAC,CAAA;AACnE,OAAA;MACAA,EAAE,CAACC,SAAS,GAAGF,GAAgD,CAAA;AAC/D,MAAA,OAAO,IAAI,CAACroD,UAAU,CAACsoD,EAAE,EAAE,qBAAqB,CAAC,CAAA;AACnD,KAAA;IAEA,IAAIlmD,UAAU,CAAC5X,MAAM,EAAE;MACrByyC,IAAI,CAAC76B,UAAU,GAAGA,UAAU,CAAA;AAC9B,KAAA;AAEA,IAAA,OAAOimD,GAAG,CAAA;AACZ,GAAA;EAEAG,iBAAiB,CAACjtD,IAAuC,EAAE;IACzD,OACGA,IAAI,CAAC5N,IAAI,KAAK,qBAAqB,IAClC,KAAK,CAAC66D,iBAAiB,CAACjtD,IAAI,CAACgtD,SAAS,CAAC,IACzC,KAAK,CAACC,iBAAiB,CAACjtD,IAAI,CAAC,CAAA;AAEjC,GAAA;EAEA2+B,0BAA0B,CAMxB3+B,IAAe,EAAE5N,IAAe,EAAE+R,QAAiB,GAAG,KAAK,EAAK;AAChE,IAAA,IAAI,IAAI,CAACqe,KAAK,CAAA,EAAA,CAAU,EAAE;AACxBxiB,MAAAA,IAAI,CAAC83B,UAAU,GAAG,IAAI,CAAC2sB,oCAAoC,CAAU,EAAA,CAAA,CAAA;AACvE,KAAA;AAEA,IAAA,MAAMyI,YAAY,GAChB96D,IAAI,KAAK,qBAAqB,GAC1B,mBAAmB,GACnBA,IAAI,KAAK,aAAa,IAAIA,IAAI,KAAK,oBAAoB,GACvD,iBAAiB,GACjB8pB,SAAS,CAAA;AACf,IAAA,IAAIgxC,YAAY,IAAI,CAAC,IAAI,CAAC1qC,KAAK,CAAW,CAAA,CAAA,IAAI,IAAI,CAACiM,gBAAgB,EAAE,EAAE;AACrE,MAAA,OAAO,IAAI,CAAChqB,UAAU,CAACzE,IAAI,EAAEktD,YAAY,CAAC,CAAA;AAC5C,KAAA;IACA,IAAIA,YAAY,KAAK,mBAAmB,IAAI,IAAI,CAACnmD,KAAK,CAACmY,gBAAgB,EAAE;AACvE,MAAA,IAAI,CAACjZ,KAAK,CAACm2C,QAAQ,CAACc,gCAAgC,EAAE;AAAEh3C,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;MACnE,IAAKA,IAAI,CAAmCw6B,OAAO,EAAE;QACnD,OAAO,KAAK,CAACmE,0BAA0B,CAAC3+B,IAAI,EAAEktD,YAAY,EAAE/oD,QAAQ,CAAC,CAAA;AACvE,OAAA;AACF,KAAA;IAEA,OAAO,KAAK,CAACw6B,0BAA0B,CAAC3+B,IAAI,EAAE5N,IAAI,EAAE+R,QAAQ,CAAC,CAAA;AAC/D,GAAA;EAEAgpD,2BAA2B,CAACntD,IAAgB,EAAQ;IAClD,IAAI,CAACA,IAAI,CAACiD,IAAI,IAAIjD,IAAI,CAAC+D,EAAE,EAAE;MAGzB,IAAI,CAACimD,eAAe,CAAChqD,IAAI,CAAC+D,EAAE,EAAEkU,eAAe,CAAC,CAAA;AAChD,KAAC,MAAM;AACL,MAAA,KAAK,CAACk1C,2BAA2B,CAACntD,IAAI,CAAC,CAAA;AACzC,KAAA;AACF,GAAA;EAEAotD,0BAA0B,CAACC,KAA6C,EAAE;AACxEA,IAAAA,KAAK,CAACxnC,OAAO,CAAC7lB,IAAI,IAAI;MACpB,IAAI,CAAAA,IAAI,IAAJA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAE5N,IAAI,MAAK,sBAAsB,EAAE;AACzC,QAAA,IAAI,CAAC6T,KAAK,CAACm2C,QAAQ,CAAC6D,wBAAwB,EAAE;UAC5C/5C,EAAE,EAAElG,IAAI,CAAC+3B,cAAAA;AACX,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;AAEA6J,EAAAA,gBAAgB,CACdD,QAAgD;AAEhD2rB,EAAAA,UAAoB,EACoB;AAKxC,IAAA,IAAI,CAACF,0BAA0B,CAACzrB,QAAQ,CAAC,CAAA;AACzC,IAAA,OAAOA,QAAQ,CAAA;AACjB,GAAA;EAEAG,cAAc,CACZC,KAAgB,EAChBC,YAAqB,EACrBC,OAAgB,EAChB58B,mBAA6C,EACN;AACvC,IAAA,MAAMrF,IAAI,GAAG,KAAK,CAAC8hC,cAAc,CAC/BC,KAAK,EACLC,YAAY,EACZC,OAAO,EACP58B,mBAAmB,CACpB,CAAA;AAED,IAAA,IAAIrF,IAAI,CAAC5N,IAAI,KAAK,iBAAiB,EAAE;AACnC,MAAA,IAAI,CAACg7D,0BAA0B,CAACptD,IAAI,CAACyc,QAAQ,CAAC,CAAA;AAChD,KAAA;AAEA,IAAA,OAAOzc,IAAI,CAAA;AACb,GAAA;EAEAqH,cAAc,CACZC,IAAkB,EAElBlC,QAAkB,EAClBmC,OAAmC,EACnCR,KAA4B,EACd;IACd,IAAI,CAAC,IAAI,CAACwnB,qBAAqB,EAAE,IAAI,IAAI,CAAC/L,KAAK,CAAA,EAAA,CAAS,EAAE;AAIxD,MAAA,IAAI,CAACzb,KAAK,CAAC8Y,kBAAkB,GAAG,KAAK,CAAA;MACrC,IAAI,CAAC/J,IAAI,EAAE,CAAA;AAEX,MAAA,MAAMy3C,iBAAiB,GACrB,IAAI,CAAC77B,WAAW,CAAwBtsB,QAAQ,CAAC,CAAA;MACnDmoD,iBAAiB,CAAC5rD,UAAU,GAAG2F,IAAI,CAAA;AACnC,MAAA,OAAO,IAAI,CAAC7C,UAAU,CAAC8oD,iBAAiB,EAAE,qBAAqB,CAAC,CAAA;AAClE,KAAA;IAEA,IAAIC,cAAc,GAAG,KAAK,CAAA;IAC1B,IACE,IAAI,CAAChrC,KAAK,CAAgB,EAAA,CAAA,IAC1B,IAAI,CAACgD,iBAAiB,EAAE,KAAA,EAAuB,EAC/C;AACA,MAAA,IAAIje,OAAO,EAAE;QACXR,KAAK,CAACW,IAAI,GAAG,IAAI,CAAA;AACjB,QAAA,OAAOJ,IAAI,CAAA;AACb,OAAA;AACAP,MAAAA,KAAK,CAACS,mBAAmB,GAAGgmD,cAAc,GAAG,IAAI,CAAA;MACjD,IAAI,CAAC13C,IAAI,EAAE,CAAA;AACb,KAAA;;IAGA,IAAI,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAO,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAc,EAAE;AACjD,MAAA,IAAIirC,oBAAoB,CAAA;AAIxB,MAAA,MAAMptB,MAAM,GAAG,IAAI,CAACorB,kBAAkB,CAAC,MAAM;QAC3C,IAAI,CAAClkD,OAAO,IAAI,IAAI,CAACmmD,oBAAoB,CAACpmD,IAAI,CAAC,EAAE;AAG/C,UAAA,MAAMqmD,YAAY,GAChB,IAAI,CAACpB,mCAAmC,CAACnnD,QAAQ,CAAC,CAAA;AACpD,UAAA,IAAIuoD,YAAY,EAAE;AAChB,YAAA,OAAOA,YAAY,CAAA;AACrB,WAAA;AACF,SAAA;AAEA,QAAA,MAAM9nB,aAAa,GAAG,IAAI,CAAC4mB,gCAAgC,EAAE,CAAA;QAC7D,IAAI,CAAC5mB,aAAa,EAAE,OAAA;AAEpB,QAAA,IAAI2nB,cAAc,IAAI,CAAC,IAAI,CAAChrC,KAAK,IAAW,EAAE;AAC5CirC,UAAAA,oBAAoB,GAAG,IAAI,CAAC1mD,KAAK,CAACwZ,WAAW,EAAE,CAAA;AAC/C,UAAA,OAAA;AACF,SAAA;QAEA,IAAIxM,eAAe,CAAC,IAAI,CAAChN,KAAK,CAAC3U,IAAI,CAAC,EAAE;UACpC,MAAMiuC,MAAM,GAAG,KAAK,CAACutB,6BAA6B,CAChDtmD,IAAI,EAEJlC,QAAQ,EACR2B,KAAK,CACN,CAAA;UACDs5B,MAAM,CAAC58B,cAAc,GAAGoiC,aAAa,CAAA;AACrC,UAAA,OAAOxF,MAAM,CAAA;AACf,SAAA;AAEA,QAAA,IAAI,CAAC94B,OAAO,IAAI,IAAI,CAACwd,GAAG,IAAW,EAAE;AACnC,UAAA,MAAM/kB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAE3BtsB,QAAQ,CAAC,CAAA;UACXpF,IAAI,CAACsG,MAAM,GAAGgB,IAAI,CAAA;UAGlBtH,IAAI,CAACwG,SAAS,GAAG,IAAI,CAACi/B,4BAA4B,CAAA,EAAA,EAE5B,KAAK,CAC1B,CAAA;;AAGD,UAAA,IAAI,CAAC2nB,0BAA0B,CAACptD,IAAI,CAACwG,SAAS,CAAC,CAAA;UAE/CxG,IAAI,CAACyD,cAAc,GAAGoiC,aAAa,CAAA;UACnC,IAAI9+B,KAAK,CAACS,mBAAmB,EAAE;YAC5BxH,IAAI,CAAsCqG,QAAQ,GACjDmnD,cAAc,CAAA;AAClB,WAAA;UAEA,OAAO,IAAI,CAACrnD,oBAAoB,CAACnG,IAAI,EAAE+G,KAAK,CAACS,mBAAmB,CAAC,CAAA;AACnE,SAAA;AAEA,QAAA,MAAMqmD,SAAS,GAAG,IAAI,CAAC9mD,KAAK,CAAC3U,IAAI,CAAA;AACjC,QAAA;AAEEy7D,QAAAA,SAAS,KAAU,EAAA;AAEnBA,QAAAA,SAAS,KAAiB,EAAA;AAEzBA,QAAAA,SAAS,KAAc,EAAA,IACtB36C,uBAAuB,CAAC26C,SAAS,CAAC,IAClC,CAAC,IAAI,CAACt/B,qBAAqB,EAAG,EAChC;AAEA,UAAA,OAAA;AACF,SAAA;AAEA,QAAA,MAAMvuB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAA8BtsB,QAAQ,CAAC,CAAA;QACpEpF,IAAI,CAAC2B,UAAU,GAAG2F,IAAI,CAAA;QACtBtH,IAAI,CAACyD,cAAc,GAAGoiC,aAAa,CAAA;AACnC,QAAA,OAAO,IAAI,CAACphC,UAAU,CAACzE,IAAI,EAAE,2BAA2B,CAAC,CAAA;AAC3D,OAAC,CAAC,CAAA;AAEF,MAAA,IAAIytD,oBAAoB,EAAE;AACxB,QAAA,IAAI,CAACz2D,UAAU,CAACy2D,oBAAoB,EAAY,EAAA,CAAA,CAAA;AAClD,OAAA;AAEA,MAAA,IAAIptB,MAAM,EAAE;QACV,IACEA,MAAM,CAACjuC,IAAI,KAAK,2BAA2B,KAC1C,IAAI,CAACowB,KAAK,CAAQ,EAAA,CAAA,IAChB,IAAI,CAACA,KAAK,IAAgB,IACzB,IAAI,CAACgD,iBAAiB,EAAE,KAA+B,EAAA,CAAC,EAC5D;AACA,UAAA,IAAI,CAACvf,KAAK,CACRm2C,QAAQ,CAACoC,iDAAiD,EAC1D;AAAEt4C,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,WAAC,CAC5B,CAAA;AACH,SAAA;AACA,QAAA,OAAOi7B,MAAM,CAAA;AACf,OAAA;AACF,KAAA;IAEA,OAAO,KAAK,CAACh5B,cAAc,CAACC,IAAI,EAAElC,QAAQ,EAAEmC,OAAO,EAAER,KAAK,CAAC,CAAA;AAC7D,GAAA;EAEA++B,cAAc,CAAC9lC,IAAqB,EAAQ;AAAA,IAAA,IAAA,aAAA,CAAA;AAC1C,IAAA,KAAK,CAAC8lC,cAAc,CAAC9lC,IAAI,CAAC,CAAA;IAE1B,MAAM;AAAEsG,MAAAA,MAAAA;AAAO,KAAC,GAAGtG,IAAI,CAAA;AACvB,IAAA,IACEsG,MAAM,CAAClU,IAAI,KAAK,2BAA2B,IAC3C,EAACkU,CAAAA,aAAAA,GAAAA,MAAM,CAACzE,KAAK,KAAZ,IAAA,IAAA,aAAA,CAAcY,aAAa,CAC5B,EAAA;AACAzC,MAAAA,IAAI,CAACyD,cAAc,GAAG6C,MAAM,CAAC7C,cAAc,CAAA;AAC3CzD,MAAAA,IAAI,CAACsG,MAAM,GAAGA,MAAM,CAAC3E,UAAU,CAAA;AACjC,KAAA;AACF,GAAA;AAEAmsD,EAAAA,WAAW,CACTpsB,IAAkB,EAClBqsB,YAAsB,EACtBC,OAAe,EACD;AACd,IAAA,IAAIC,WAAoB,CAAA;IACxB,IACEp6C,uBAAuB,CAAQ,EAAA,CAAA,GAAGm6C,OAAO,IACzC,CAAC,IAAI,CAACz/B,qBAAqB,EAAE,KAC5B,IAAI,CAACT,YAAY,CAAA,EAAA,CAAQ,KACvBmgC,WAAW,GAAG,IAAI,CAACngC,YAAY,CAAA,GAAA,CAAe,CAAC,CAAC,EACnD;AACA,MAAA,MAAM9tB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAE3Bq8B,YAAY,CAAC,CAAA;MACf/tD,IAAI,CAAC2B,UAAU,GAAG+/B,IAAI,CAAA;AACtB1hC,MAAAA,IAAI,CAAC+3B,cAAc,GAAG,IAAI,CAAC+wB,QAAQ,CAAC,MAAM;QACxC,IAAI,CAAChzC,IAAI,EAAE,CAAA;AACX,QAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,UAAA,IAAIyrC,WAAW,EAAE;AACf,YAAA,IAAI,CAAChoD,KAAK,CAACxG,MAAM,CAAC5E,iBAAiB,EAAE;AACnCqL,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAQ;AACvBtK,cAAAA,OAAO,EAAE,OAAA;AACX,aAAC,CAAC,CAAA;AACJ,WAAA;UACA,OAAO,IAAI,CAACioD,oBAAoB,EAAE,CAAA;AACpC,SAAA;QAEA,OAAO,IAAI,CAACiD,WAAW,EAAE,CAAA;AAC3B,OAAC,CAAC,CAAA;MACF,IAAI,CAACvhD,UAAU,CACbzE,IAAI,EACJiuD,WAAW,GAAG,uBAAuB,GAAG,gBAAgB,CACzD,CAAA;MAED,IAAI,CAACC,YAAY,EAAE,CAAA;MACnB,OAAO,IAAI,CAACJ,WAAW;AAErB9tD,MAAAA,IAAI,EACJ+tD,YAAY,EACZC,OAAO,CACR,CAAA;AACH,KAAA;IAEA,OAAO,KAAK,CAACF,WAAW,CAACpsB,IAAI,EAAEqsB,YAAY,EAAEC,OAAO,CAAC,CAAA;AACvD,GAAA;EAEA/pB,iBAAiB,CACf5uB,IAAY,EACZjQ,QAAkB,EAClB+oD,aAAsB,EACtBzoD,SAAkB,EACZ;AAGN,IAAA,IAAI,CAAC,IAAI,CAACqB,KAAK,CAACmY,gBAAgB,EAAE;MAChC,KAAK,CAAC+kB,iBAAiB,CAAC5uB,IAAI,EAAEjQ,QAAQ,EAAE+oD,aAAa,EAAEzoD,SAAS,CAAC,CAAA;AACnE,KAAA;AACF,GAAA;EAEAu9B,qBAAqB,CAACjjC,IAAiC,EAAE;AACvD,IAAA,KAAK,CAACijC,qBAAqB,CAACjjC,IAAI,CAAC,CAAA;IACjC,IAAIA,IAAI,CAACkjC,MAAM,IAAIljC,IAAI,CAACy1B,UAAU,KAAK,OAAO,EAAE;AAC9C,MAAA,IAAI,CAACxvB,KAAK,CAACm2C,QAAQ,CAAC7oB,6BAA6B,EAAE;QACjDrtB,EAAE,EAAElG,IAAI,CAACkH,UAAU,CAAC,CAAC,CAAC,CAAC1I,GAAG,CAAClQ,KAAAA;AAC7B,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;AAWA8/D,EAAAA,qBAAqB,GAAG,EAAC;EAEzBx1B,WAAW,CACT54B,IAA+D,EAClD;IACbA,IAAI,CAACy1B,UAAU,GAAG,OAAO,CAAA;AACzB,IAAA,IACE5iB,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,IAClC,IAAI,CAACowB,KAAK,CAAS,EAAA,CAAA,IACnB,IAAI,CAACA,KAAK,GAAW,EACrB;AACA,MAAA,IAAI6rC,KAAK,GAAG,IAAI,CAACnpC,SAAS,EAAE,CAAA;MAE5B,IACE,IAAI,CAAC4I,YAAY,CAAU,GAAA,CAAA;MAE3BugC,KAAK,CAACj8D,IAAI,KAAa,EAAA;MAEvBi8D,KAAK,CAACj8D,IAAI,KAAa,EAAA;MAEvBi8D,KAAK,CAACj8D,IAAI,KAAA,EAAU,EACpB;QACA4N,IAAI,CAACy1B,UAAU,GAAG,MAAM,CAAA;QACxB,IAAI,CAAC3f,IAAI,EAAE,CAAA;AACXu4C,QAAAA,KAAK,GAAG,IAAI,CAACnpC,SAAS,EAAE,CAAA;AAC1B,OAAA;AAEA,MAAA,IAAIrS,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,IAAIi8D,KAAK,CAACj8D,IAAI,OAAU,EAAE;AAC9D,QAAA,OAAO,IAAI,CAAC84D,8BAA8B,CACxClrD,IAAI,CACL,CAAA;AACH,OAAA;AACF,KAAA;AAEA,IAAA,MAAMsuD,UAAU,GAAG,KAAK,CAAC11B,WAAW,CAAC54B,IAAI,CAAgC,CAAA;;AAKzE,IAAA,IACEsuD,UAAU,CAAC74B,UAAU,KAAK,MAAM;AAEhC64B,IAAAA,UAAU,CAACpnD,UAAU,CAACjY,MAAM,GAAG,CAAC;IAEhCq/D,UAAU,CAACpnD,UAAU,CAAC,CAAC,CAAC,CAAC9U,IAAI,KAAK,wBAAwB,EAC1D;AACA,MAAA,IAAI,CAAC6T,KAAK,CAACm2C,QAAQ,CAACwD,sCAAsC,EAAE;AAC1D15C,QAAAA,EAAE,EAAEooD,UAAAA;AACN,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAOA,UAAU,CAAA;AACnB,GAAA;AAEA1nD,EAAAA,WAAW,CACT5G,IAAoB,EACpB6G,UAAgC,EACnB;AACb,IAAA,IAAI,IAAI,CAAC2b,KAAK,CAAA,EAAA,CAAY,EAAE;MAE1B,IAAI,CAAC1M,IAAI,EAAE,CAAA;MACX,IACE,IAAI,CAACgY,YAAY,CAAU,GAAA,CAAA,IAC3B,IAAI,CAACtI,iBAAiB,EAAE,KAAA,EAAuB,EAC/C;QACAxlB,IAAI,CAACy1B,UAAU,GAAG,MAAM,CAAA;QACxB,IAAI,CAAC3f,IAAI,EAAE,CAAA;AACb,OAAC,MAAM;QACL9V,IAAI,CAACy1B,UAAU,GAAG,OAAO,CAAA;AAC3B,OAAA;AACA,MAAA,OAAO,IAAI,CAACy1B,8BAA8B,CACxClrD,IAAI,EACW,IAAI,CACpB,CAAA;AACH,KAAC,MAAM,IAAI,IAAI,CAAC+kB,GAAG,IAAO,EAAE;MAE1B,MAAMz0B,MAAM,GAAG0P,IAAoC,CAAA;AACnD1P,MAAAA,MAAM,CAACqR,UAAU,GAAG,KAAK,CAACs1B,eAAe,EAAE,CAAA;MAC3C,IAAI,CAACvI,SAAS,EAAE,CAAA;AAChB,MAAA,OAAO,IAAI,CAACjqB,UAAU,CAACnU,MAAM,EAAE,oBAAoB,CAAC,CAAA;AACtD,KAAC,MAAM,IAAI,IAAI,CAAC89B,aAAa,IAAQ,EAAE;MAErC,MAAMqS,IAAI,GAAGzgC,IAA8C,CAAA;MAE3D,IAAI,CAACquB,gBAAgB,CAAe,GAAA,CAAA,CAAA;AACpCoS,MAAAA,IAAI,CAAC18B,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;MAChC,IAAI,CAAC7I,SAAS,EAAE,CAAA;AAChB,MAAA,OAAO,IAAI,CAACjqB,UAAU,CAACg8B,IAAI,EAAE,8BAA8B,CAAC,CAAA;AAC9D,KAAC,MAAM;AACL,MAAA,IACE,IAAI,CAAC3S,YAAY,CAAA,GAAA,CAAU,IAC3B,IAAI,CAAC5I,SAAS,EAAE,CAAC9yB,IAAI,KAAA,CAAc,EACnC;QACA,IAAI,CAAC0jB,IAAI,EAAE,CAAA;QACX9V,IAAI,CAACg5B,UAAU,GAAG,MAAM,CAAA;AAC1B,OAAC,MAAM;QACLh5B,IAAI,CAACg5B,UAAU,GAAG,OAAO,CAAA;AAC3B,OAAA;AAEA,MAAA,OAAO,KAAK,CAACpyB,WAAW,CACtB5G,IAAI,EACJ6G,UAAU,CACX,CAAA;AACH,KAAA;AACF,GAAA;AAEA0nD,EAAAA,eAAe,GAAY;IACzB,OACE,IAAI,CAACzgC,YAAY,CAAc,GAAA,CAAA,IAAI,IAAI,CAAC5I,SAAS,EAAE,CAAC9yB,IAAI,KAAc,EAAA,CAAA;AAE1E,GAAA;AAEA8sC,EAAAA,4BAA4B,GAAiC;AAC3D,IAAA,IAAI,IAAI,CAACqvB,eAAe,EAAE,EAAE;AAC1B,MAAA,MAAMC,GAAG,GAAG,IAAI,CAACjqD,SAAS,EAAW,CAAA;MACrC,IAAI,CAACuR,IAAI,EAAE,CAAA;MACX04C,GAAG,CAACxH,QAAQ,GAAG,IAAI,CAAA;MACnB,OAAO,IAAI,CAAC+E,UAAU,CAACyC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACzC,KAAA;;AAIA,IAAA,IAAI,IAAI,CAAChsC,KAAK,CAAA,GAAA,CAAe,EAAE;MAC7B,MAAM6d,MAAM,GAAG,IAAI,CAAC0pB,2BAA2B,CAC7C,IAAI,CAACxlD,SAAS,EAA4B,CAC3C,CAAA;MACD,IAAI87B,MAAM,EAAE,OAAOA,MAAM,CAAA;AAC3B,KAAA;IAEA,OAAO,KAAK,CAACnB,4BAA4B,EAAE,CAAA;AAC7C,GAAA;EAEA8sB,iBAAiB,CACfhsD,IAA2B,EAC3BxN,IAAuC,EACvCi8D,uBAAgC,GAAG,KAAK,EACxC;IACA,MAAM;AAAEvvC,MAAAA,gBAAAA;KAAkB,GAAG,IAAI,CAACnY,KAAK,CAAA;AACvC,IAAA,MAAMI,WAAW,GAAG,KAAK,CAAC6kD,iBAAiB,CACzChsD,IAAI,EACJxN,IAAI,EACJi8D,uBAAuB,IAAIvvC,gBAAgB,CAC5C,CAAA;AAED,IAAA,IAAI,CAACA,gBAAgB,EAAE,OAAO/X,WAAW,CAAA;AAEzC,IAAA,KAAK,MAAM;MAAEpD,EAAE;AAAEmc,MAAAA,IAAAA;AAAK,KAAC,IAAI/Y,WAAW,CAACunD,YAAY,EAAE;MAEnD,IAAI,CAACxuC,IAAI,EAAE,SAAA;;MAUX,IAAI1tB,IAAI,KAAK,OAAO,IAAI,CAAC,CAACuR,EAAE,CAACg0B,cAAc,EAAE;AAC3C,QAAA,IAAI,CAAC9xB,KAAK,CAACm2C,QAAQ,CAAC8B,qCAAqC,EAAE;AACzDh4C,UAAAA,EAAE,EAAEga,IAAAA;AACN,SAAC,CAAC,CAAA;OACH,MAAM,IACLA,IAAI,CAAC9tB,IAAI,KAAK,eAAe,IAC7B8tB,IAAI,CAAC9tB,IAAI,KAAK,gBAAgB,IAC9B8tB,IAAI,CAAC9tB,IAAI,KAAK,gBAAgB,IAC9B8tB,IAAI,CAAC9tB,IAAI,KAAK,eAAe,KAC5B8tB,IAAI,CAAC9tB,IAAI,KAAK,iBAAiB,IAAI8tB,IAAI,CAACyuC,WAAW,CAAC1/D,MAAM,GAAG,CAAC,CAAC,IAChE,CAAC2/D,qBAAqB,CAAC1uC,IAAI,CAAC,EAC5B;AACA,QAAA,IAAI,CAACja,KAAK,CACRm2C,QAAQ,CAACU,mEAAmE,EAC5E;AAAE52C,UAAAA,EAAE,EAAEga,IAAAA;AAAK,SAAC,CACb,CAAA;AACH,OAAA;AACF,KAAA;AAEA,IAAA,OAAO/Y,WAAW,CAAA;AACpB,GAAA;AAEA0nD,EAAAA,qBAAqB,CACnBpuD,KAAyB,EACzBoG,UAAiC,EACpB;IACb,IAAI,IAAI,CAAC2b,KAAK,CAAW,EAAA,CAAA,IAAI,IAAI,CAAC2L,qBAAqB,CAAC,MAAM,CAAC,EAAE;AAC/D,MAAA,MAAMnuB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAuB,CAAA;MAClD,IAAI,CAACqqB,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,MAAA,OAAO,IAAI,CAAC87B,sBAAsB,CAAC1qD,IAAI,EAAE;AAAE41B,QAAAA,KAAK,EAAE,IAAA;AAAK,OAAC,CAAC,CAAA;AAC3D,KAAA;AAEA,IAAA,IAAI,IAAI,CAAC9H,YAAY,CAAA,GAAA,CAAU,EAAE;MAC/B,OAAO,IAAI,CAAC48B,sBAAsB,CAChC,IAAI,CAACnmD,SAAS,EAAuB,CACtC,CAAA;AACH,KAAA;AAEA,IAAA,IAAI,IAAI,CAACupB,YAAY,CAAA,GAAA,CAAe,EAAE;MACpC,MAAMuS,MAAM,GAAG,IAAI,CAAC0pB,2BAA2B,CAAC,IAAI,CAACxlD,SAAS,EAAE,CAAC,CAAA;MACjE,IAAI87B,MAAM,EAAE,OAAOA,MAAM,CAAA;AAC3B,KAAA;AAEA,IAAA,OAAO,KAAK,CAACwuB,qBAAqB,CAACpuD,KAAK,EAAEoG,UAAU,CAAC,CAAA;AACvD,GAAA;AAEAioD,EAAAA,mBAAmB,GAAuC;IACxD,OAAO,IAAI,CAACjO,eAAe,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAA;AACjE,GAAA;AAEAkO,EAAAA,kBAAkB,CAAC1tB,MAAW,EAAEuc,SAAgC,EAAW;AACzE,IAAA,OAAOA,SAAS,CAACtzB,IAAI,CAAC8yB,QAAQ,IAAI;AAChC,MAAA,IAAImD,kBAAkB,CAACnD,QAAQ,CAAC,EAAE;AAChC,QAAA,OAAO/b,MAAM,CAACwgB,aAAa,KAAKzE,QAAQ,CAAA;AAC1C,OAAA;AACA,MAAA,OAAO,CAAC,CAAC/b,MAAM,CAAC+b,QAAQ,CAAC,CAAA;AAC3B,KAAC,CAAC,CAAA;AACJ,GAAA;AAEA4D,EAAAA,uBAAuB,GAAG;IACxB,OACE,IAAI,CAAClzB,YAAY,CAAA,GAAA,CAAY,IAC7B,IAAI,CAACtI,iBAAiB,EAAE,KAA6B,GAAA,CAAA;AAEzD,GAAA;AAEA4b,EAAAA,gBAAgB,CACdh+B,SAAsB,EACtBi+B,MAAW,EACXt6B,KAA8B,EACxB;AACN,IAAA,MAAM62C,SAAS,GAAG,CAChB,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,CACA,CAAA;IACV,IAAI,CAACuD,gBAAgB,CAAC;AACpBC,MAAAA,QAAQ,EAAE/f,MAAM;AAChByf,MAAAA,gBAAgB,EAAElD,SAAS;AAC3ByD,MAAAA,mBAAmB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;AAClCN,MAAAA,6BAA6B,EAAE,IAAI;MACnCO,aAAa,EAAElF,QAAQ,CAACiC,uCAAAA;AAC1B,KAAC,CAAC,CAAA;IAEF,MAAM2Q,gCAAgC,GAAG,MAAM;AAC7C,MAAA,IAAI,IAAI,CAAChO,uBAAuB,EAAE,EAAE;QAClC,IAAI,CAAClrC,IAAI,EAAE,CAAA;QACX,IAAI,CAACA,IAAI,EAAE,CAAA;QACX,IAAI,IAAI,CAACi5C,kBAAkB,CAAC1tB,MAAM,EAAEuc,SAAS,CAAC,EAAE;AAC9C,UAAA,IAAI,CAAC33C,KAAK,CAACm2C,QAAQ,CAACsD,6BAA6B,EAAE;AACjDx5C,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,KAAK,CAAC0uC,qBAAqB,CAAC7rD,SAAS,EAAEi+B,MAAM,CAAkB,CAAA;AACjE,OAAC,MAAM;AACL,QAAA,IAAI,CAAC6tB,4BAA4B,CAC/B9rD,SAAS,EACTi+B,MAAM,EACNt6B,KAAK,EACL,CAAC,CAACs6B,MAAM,CAAC1F,MAAM,CAChB,CAAA;AACH,OAAA;KACD,CAAA;IACD,IAAI0F,MAAM,CAAC7G,OAAO,EAAE;AAClB,MAAA,IAAI,CAACqxB,kBAAkB,CAACmD,gCAAgC,CAAC,CAAA;AAC3D,KAAC,MAAM;AACLA,MAAAA,gCAAgC,EAAE,CAAA;AACpC,KAAA;AACF,GAAA;EAEAE,4BAA4B,CAC1B9rD,SAAsB,EACtBi+B,MAAkD,EAClDt6B,KAA8B,EAC9B20B,QAAiB,EACX;AACN,IAAA,MAAM6pB,GAAG,GAAG,IAAI,CAACT,wBAAwB,CACvCzjB,MAAM,CACP,CAAA;AACD,IAAA,IAAIkkB,GAAG,EAAE;AACPniD,MAAAA,SAAS,CAACH,IAAI,CAACS,IAAI,CAAC6hD,GAAG,CAAC,CAAA;MAExB,IAAKlkB,MAAM,CAAS2lB,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC/gD,KAAK,CAACm2C,QAAQ,CAACyB,yBAAyB,EAAE;AAAE33C,UAAAA,EAAE,EAAEm7B,MAAAA;AAAO,SAAC,CAAC,CAAA;AAChE,OAAA;MACA,IAAKA,MAAM,CAASwgB,aAAa,EAAE;AACjC,QAAA,IAAI,CAAC57C,KAAK,CAACm2C,QAAQ,CAAC0B,8BAA8B,EAAE;AAClD53C,UAAAA,EAAE,EAAEm7B,MAAM;UACV+b,QAAQ,EAAG/b,MAAM,CAASwgB,aAAAA;AAC5B,SAAC,CAAC,CAAA;AACJ,OAAA;MACA,IAAKxgB,MAAM,CAAS7G,OAAO,EAAE;AAC3B,QAAA,IAAI,CAACv0B,KAAK,CAACm2C,QAAQ,CAAC2B,wBAAwB,EAAE;AAAE73C,UAAAA,EAAE,EAAEm7B,MAAAA;AAAO,SAAC,CAAC,CAAA;AAC/D,OAAA;MACA,IAAKA,MAAM,CAASwrB,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC5mD,KAAK,CAACm2C,QAAQ,CAAC4B,yBAAyB,EAAE;AAAE93C,UAAAA,EAAE,EAAEm7B,MAAAA;AAAO,SAAC,CAAC,CAAA;AAChE,OAAA;AAEA,MAAA,OAAA;AACF,KAAA;IAEA,IAAI,CAAC,IAAI,CAACt6B,KAAK,CAACoY,eAAe,IAAKkiB,MAAM,CAAS2lB,QAAQ,EAAE;AAC3D,MAAA,IAAI,CAAC/gD,KAAK,CAACm2C,QAAQ,CAACwC,iCAAiC,EAAE;AACrD14C,QAAAA,EAAE,EAAEm7B,MAAAA;AACN,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,IAAKA,MAAM,CAASwrB,QAAQ,EAAE;AAC5B,MAAA,IAAI,CAAC9lD,KAAK,CAACooD,aAAa,EAAE;AACxB,QAAA,IAAI,CAAClpD,KAAK,CAACm2C,QAAQ,CAAC2C,qBAAqB,EAAE;AAAE74C,UAAAA,EAAE,EAAEm7B,MAAAA;AAAO,SAAC,CAAC,CAAA;AAC5D,OAAA;AACF,KAAA;;IAIA,KAAK,CAAC6tB,4BAA4B,CAChC9rD,SAAS,EACTi+B,MAAM,EACNt6B,KAAK,EACL20B,QAAQ,CACT,CAAA;AACH,GAAA;EAEA0zB,4BAA4B,CAC1BC,YAAsE,EAChE;AACN,IAAA,MAAMhpD,QAAQ,GAAG,IAAI,CAAC0e,GAAG,CAAa,EAAA,CAAA,CAAA;AACtC,IAAA,IAAI1e,QAAQ,EAAEgpD,YAAY,CAAChpD,QAAQ,GAAG,IAAI,CAAA;IAE1C,IAAKgpD,YAAY,CAASlK,QAAQ,IAAI,IAAI,CAAC3iC,KAAK,IAAW,EAAE;AAC3D,MAAA,IAAI,CAACvc,KAAK,CAACm2C,QAAQ,CAACS,sBAAsB,EAAE;AAAE32C,QAAAA,EAAE,EAAEmpD,YAAAA;AAAa,OAAC,CAAC,CAAA;AACnE,KAAA;IAEA,IAAKA,YAAY,CAAS70B,OAAO,IAAI,IAAI,CAAChY,KAAK,IAAW,EAAE;AAC1D,MAAA,IAAI,CAACvc,KAAK,CAACm2C,QAAQ,CAACQ,qBAAqB,EAAE;AAAE12C,QAAAA,EAAE,EAAEmpD,YAAAA;AAAa,OAAC,CAAC,CAAA;AAClE,KAAA;AACF,GAAA;;AAOAvwB,EAAAA,wBAAwB,CACtB9+B,IAAmC,EACnC++B,IAAkB,EAClBl4B,UAAgC,EACnB;AACb,IAAA,MAAM45B,IAAI,GACR1B,IAAI,CAAC3sC,IAAI,KAAK,YAAY;IAEtB,IAAI,CAAC+5D,0BAA0B,CAACnsD,IAAI,EAAE++B,IAAI,EAAEl4B,UAAU,CAAC,GACvDqV,SAAS,CAAA;IACf,OAAOukB,IAAI,IAAI,KAAK,CAAC3B,wBAAwB,CAAC9+B,IAAI,EAAE++B,IAAI,EAAEl4B,UAAU,CAAC,CAAA;AACvE,GAAA;;AAIAm4B,EAAAA,4BAA4B,GAAY;AACtC,IAAA,IAAI,IAAI,CAAC2tB,oBAAoB,EAAE,EAAE,OAAO,IAAI,CAAA;IAC5C,OAAO,KAAK,CAAC3tB,4BAA4B,EAAE,CAAA;AAC7C,GAAA;;AAGAG,EAAAA,gBAAgB,CACdJ,IAAkB,EAElB35B,QAAkB,EAClBC,mBAA6C,EAC/B;AAGd,IAAA,IAAI,CAAC,IAAI,CAAC0B,KAAK,CAAC+X,sBAAsB,IAAI,CAAC,IAAI,CAAC0D,KAAK,CAAA,EAAA,CAAa,EAAE;MAClE,OAAO,KAAK,CAAC2c,gBAAgB,CAC3BJ,IAAI,EAEJ35B,QAAQ,EACRC,mBAAmB,CACpB,CAAA;AACH,KAAA;AAEA,IAAA,MAAMg7B,MAAM,GAAG,IAAI,CAACxR,QAAQ,CAAC,MAC3B,KAAK,CAACsQ,gBAAgB,CAACJ,IAAI,EAAE35B,QAAQ,CAAC,CACvC,CAAA;AAED,IAAA,IAAI,CAACi7B,MAAM,CAACrgC,IAAI,EAAE;MAChB,IAAIqgC,MAAM,CAACnW,KAAK,EAAE;QAEhB,KAAK,CAACkV,0BAA0B,CAAC/5B,mBAAmB,EAAEg7B,MAAM,CAACnW,KAAK,CAAC,CAAA;AACrE,OAAA;AAEA,MAAA,OAAO6U,IAAI,CAAA;AACb,KAAA;IACA,IAAIsB,MAAM,CAACnW,KAAK,EAAE,IAAI,CAACnjB,KAAK,GAAGs5B,MAAM,CAACpR,SAAS,CAAA;IAC/C,OAAOoR,MAAM,CAACrgC,IAAI,CAAA;AACpB,GAAA;;AAIAsgC,EAAAA,cAAc,CACZtgC,IAAkB,EAElBoF,QAAkB,EACJ;IACdpF,IAAI,GAAG,KAAK,CAACsgC,cAAc,CAACtgC,IAAI,EAAEoF,QAAQ,CAAC,CAAA;AAC3C,IAAA,IAAI,IAAI,CAAC2f,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB/kB,IAAI,CAACqG,QAAQ,GAAG,IAAI,CAAA;AAIpB,MAAA,IAAI,CAAC6B,gBAAgB,CAAClI,IAAI,CAAC,CAAA;AAC7B,KAAA;AAEA,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAU,EAAE;AACxB,MAAA,MAAM+d,YAAY,GAAG,IAAI,CAAC7O,WAAW,CAAyBtsB,QAAQ,CAAC,CAAA;MACvEm7B,YAAY,CAAC5+B,UAAU,GAAG3B,IAAI,CAAA;AAC9BugC,MAAAA,YAAY,CAACxI,cAAc,GAAG,IAAI,CAACqrB,qBAAqB,EAAE,CAAA;AAE1D,MAAA,OAAO,IAAI,CAAC3+C,UAAU,CAAC87B,YAAY,EAAE,sBAAsB,CAAC,CAAA;AAC9D,KAAA;AAEA,IAAA,OAAOvgC,IAAI,CAAA;AACb,GAAA;EAEA0gC,sBAAsB,CACpB1gC,IAA8B,EACI;IAClC,IAAI,CAAC,IAAI,CAAC+G,KAAK,CAACmY,gBAAgB,IAAI,IAAI,CAAC4O,YAAY,CAAA,GAAA,CAAa,EAAE;MAClE,OAAO,IAAI,CAAC+9B,kBAAkB,CAAC,MAAM,IAAI,CAACnrB,sBAAsB,CAAC1gC,IAAI,CAAC,CAAC,CAAA;AACzE,KAAA;;AAGA,IAAA,MAAMoF,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AAEpC,IAAA,MAAMkqD,SAAS,GAAG,IAAI,CAAClhC,aAAa,CAAa,GAAA,CAAA,CAAA;AAEjD,IAAA,IACEkhC,SAAS,KACR,IAAI,CAACxhC,YAAY,CAAA,GAAA,CAAa,IAAI,CAAC,IAAI,CAACkR,4BAA4B,EAAE,CAAC,EACxE;AACA,MAAA,MAAM,IAAI,CAAC/4B,KAAK,CAACm2C,QAAQ,CAACqB,iCAAiC,EAAE;AAC3Dv3C,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,MAAMmqD,YAAY,GAAG18C,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,CAAA;AACvD,IAAA,MAAM+U,WAA6C,GAChDooD,YAAY,IAAI,IAAI,CAACrD,2BAA2B,EAAE,IACnD,KAAK,CAACxrB,sBAAsB,CAAC1gC,IAAI,CAAC,CAAA;AAEpC,IAAA,IAAI,CAACmH,WAAW,EAAE,OAAO,IAAI,CAAA;AAE7B,IAAA,IACEA,WAAW,CAAC/U,IAAI,KAAK,wBAAwB,IAC7C+U,WAAW,CAAC/U,IAAI,KAAK,wBAAwB,IAC7Ck9D,SAAS,EACT;MACAtvD,IAAI,CAACg5B,UAAU,GAAG,MAAM,CAAA;AAC1B,KAAA;AAEA,IAAA,IAAIs2B,SAAS,EAAE;AAEb,MAAA,IAAI,CAACloD,kBAAkB,CAACD,WAAW,EAAE/B,QAAQ,CAAC,CAAA;MAE9C+B,WAAW,CAACqzB,OAAO,GAAG,IAAI,CAAA;AAC5B,KAAA;AAEA,IAAA,OAAOrzB,WAAW,CAAA;AACpB,GAAA;AAEA85B,EAAAA,YAAY,CACVjhC,IAAa,EACbkhC,WAAoB,EACpBC,UAA2B;AAE3BzmB,EAAAA,WAA0B,EACpB;IACN,IAAI,CAAC,CAACwmB,WAAW,IAAIC,UAAU,KAAK,IAAI,CAACrT,YAAY,CAAA,GAAA,CAAgB,EAAE;AACrE,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,KAAK,CAACmT,YAAY,CAChBjhC,IAAI,EACJkhC,WAAW,EACXC,UAAU,EACTnhC,IAAI,CAASw6B,OAAO,GAAGviB,eAAe,GAAGP,UAAU,CACrD,CAAA;AACD,IAAA,MAAMjU,cAAc,GAAG,IAAI,CAACugD,wBAAwB,CAClD,IAAI,CAACP,qBAAqB,CAACvC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAA;AACD,IAAA,IAAIz9C,cAAc,EAAEzD,IAAI,CAACyD,cAAc,GAAGA,cAAc,CAAA;AAC1D,GAAA;EAEA+rD,4BAA4B,CAC1BxvD,IAAwE,EAClE;AACN,IAAA,IAAI,CAACA,IAAI,CAACqG,QAAQ,EAAE;AAClB,MAAA,IAAI,IAAI,CAAC0e,GAAG,CAAA,EAAA,CAAS,EAAE;QACrB/kB,IAAI,CAACyvD,QAAQ,GAAG,IAAI,CAAA;AACtB,OAAC,MAAM,IAAI,IAAI,CAAC1qC,GAAG,IAAa,EAAE;QAChC/kB,IAAI,CAACqG,QAAQ,GAAG,IAAI,CAAA;AACtB,OAAA;AACF,KAAA;AAEA,IAAA,MAAMjU,IAAI,GAAG,IAAI,CAAC6yD,wBAAwB,EAAE,CAAA;AAC5C,IAAA,IAAI7yD,IAAI,EAAE4N,IAAI,CAAC+3B,cAAc,GAAG3lC,IAAI,CAAA;AACtC,GAAA;EAEAsS,kBAAkB,CAAC1E,IAAqB,EAAmB;AACzD,IAAA,IAAI,CAACwvD,4BAA4B,CAACxvD,IAAI,CAAC,CAAA;IAEvC,IACE,IAAI,CAAC+G,KAAK,CAACmY,gBAAgB,IAC3B,EAAElf,IAAI,CAACmlD,QAAQ,IAAI,CAACnlD,IAAI,CAAC+3B,cAAc,CAAC,IACxC,IAAI,CAACvV,KAAK,CAAA,EAAA,CAAO,EACjB;AACA,MAAA,IAAI,CAACvc,KAAK,CAACm2C,QAAQ,CAACa,+BAA+B,EAAE;AACnD/2C,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;IACA,IAAIpF,IAAI,CAACgnD,QAAQ,IAAI,IAAI,CAACxkC,KAAK,IAAO,EAAE;MACtC,MAAM;AAAEnzB,QAAAA,GAAAA;AAAI,OAAC,GAAG2Q,IAAI,CAAA;AACpB,MAAA,IAAI,CAACiG,KAAK,CAACm2C,QAAQ,CAACG,8BAA8B,EAAE;AAClDr2C,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAQ;AACvBo3C,QAAAA,YAAY,EACVntD,GAAG,CAAC+C,IAAI,KAAK,YAAY,IAAI,CAAC4N,IAAI,CAACwE,QAAQ,GACvCnV,GAAG,CAAC2I,IAAI,GACP,CAAA,CAAA,EAAG,IAAI,CAAC2lB,KAAK,CAAC+C,KAAK,CAACrxB,GAAG,CAACf,KAAK,EAAEe,GAAG,CAACd,GAAG,CAAE,CAAA,CAAA,CAAA;AACjD,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAO,KAAK,CAACmW,kBAAkB,CAAC1E,IAAI,CAAC,CAAA;AACvC,GAAA;EAEA6E,yBAAyB,CACvB7E,IAA4B,EACJ;IAExB,IAAIA,IAAI,CAACgnD,QAAQ,EAAE;AACjB,MAAA,IAAI,CAAC/gD,KAAK,CAACm2C,QAAQ,CAAC4C,yBAAyB,EAAE;AAAE94C,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AAC9D,KAAA;;IAGA,IAAIA,IAAI,CAAC6hD,aAAa,EAAE;AACtB,MAAA,IAAI,CAAC57C,KAAK,CAACm2C,QAAQ,CAAC6C,8BAA8B,EAAE;AAClD/4C,QAAAA,EAAE,EAAElG,IAAI;QAERo9C,QAAQ,EAAEp9C,IAAI,CAAC6hD,aAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,IAAI,CAAC2N,4BAA4B,CAACxvD,IAAI,CAAC,CAAA;AACvC,IAAA,OAAO,KAAK,CAAC6E,yBAAyB,CAAC7E,IAAI,CAAC,CAAA;AAC9C,GAAA;EAEA0vD,0BAA0B,CACxB1vD,IAA6B,EACJ;AACzB,IAAA,IAAI,CAACwvD,4BAA4B,CAACxvD,IAAI,CAAC,CAAA;IACvC,IAAIA,IAAI,CAACqG,QAAQ,EAAE;AACjB,MAAA,IAAI,CAACJ,KAAK,CAACm2C,QAAQ,CAACO,wBAAwB,EAAE;AAAEz2C,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AAC7D,KAAA;AACA,IAAA,OAAO,KAAK,CAAC0vD,0BAA0B,CAAC1vD,IAAI,CAAC,CAAA;AAC/C,GAAA;AAEAmD,EAAAA,eAAe,CACbC,SAAsB,EACtBd,MAAqB,EACrBe,WAAoB,EACpBnB,OAAgB,EAChBoB,aAAsB,EACtBC,iBAA0B,EACpB;AACN,IAAA,MAAME,cAAc,GAAG,IAAI,CAACugD,wBAAwB,EAAE,CAAA;IACtD,IAAIvgD,cAAc,IAAIH,aAAa,EAAE;AACnC,MAAA,IAAI,CAAC2C,KAAK,CAACm2C,QAAQ,CAACW,4BAA4B,EAAE;AAChD72C,QAAAA,EAAE,EAAEzC,cAAAA;AACN,OAAC,CAAC,CAAA;AACJ,KAAA;;IAGA,MAAM;AAAE+2B,MAAAA,OAAO,GAAG,KAAK;AAAEhoC,MAAAA,IAAAA;AAAK,KAAC,GAAG8P,MAAM,CAAA;IAExC,IAAIk4B,OAAO,KAAKhoC,IAAI,KAAK,KAAK,IAAIA,IAAI,KAAK,KAAK,CAAC,EAAE;AACjD,MAAA,IAAI,CAACyT,KAAK,CAACm2C,QAAQ,CAACY,eAAe,EAAE;AAAE92C,QAAAA,EAAE,EAAE5D,MAAM;AAAE9P,QAAAA,IAAAA;AAAK,OAAC,CAAC,CAAA;AAC5D,KAAA;AACA,IAAA,IAAIiR,cAAc,EAAEnB,MAAM,CAACmB,cAAc,GAAGA,cAAc,CAAA;AAC1D,IAAA,KAAK,CAACN,eAAe,CACnBC,SAAS,EACTd,MAAM,EACNe,WAAW,EACXnB,OAAO,EACPoB,aAAa,EACbC,iBAAiB,CAClB,CAAA;AACH,GAAA;EAEAg/B,sBAAsB,CACpBn/B,SAAsB,EACtBd,MAA4B,EAC5Be,WAAoB,EACpBnB,OAAgB,EACV;AACN,IAAA,MAAMuB,cAAc,GAAG,IAAI,CAACugD,wBAAwB,EAAE,CAAA;AACtD,IAAA,IAAIvgD,cAAc,EAAEnB,MAAM,CAACmB,cAAc,GAAGA,cAAc,CAAA;IAC1D,KAAK,CAAC8+B,sBAAsB,CAACn/B,SAAS,EAAEd,MAAM,EAAEe,WAAW,EAAEnB,OAAO,CAAC,CAAA;AACvE,GAAA;AAEAytD,EAAAA,gCAAgC,CAC9B3vD,IAAyE,EACzExN,IAAY,EACZ;AACA,IAAA,IAAIwN,IAAI,CAAC5N,IAAI,KAAK,iBAAiB,EAAE,OAAA;AAErC,IAAA,IAAI4N,IAAI,CAAC5N,IAAI,KAAK,kBAAkB,IAAI,CAAC4N,IAAI,CAACzQ,KAAK,CAAC0T,IAAI,EAAE,OAAA;AAE1D,IAAA,KAAK,CAAC0sD,gCAAgC,CAAC3vD,IAAI,EAAExN,IAAI,CAAC,CAAA;AACpD,GAAA;EAEAgwC,eAAe,CAACxiC,IAAa,EAAQ;AACnC,IAAA,KAAK,CAACwiC,eAAe,CAACxiC,IAAI,CAAC,CAAA;AAE3B,IAAA,IAAIA,IAAI,CAACC,UAAU,KAAK,IAAI,CAACuiB,KAAK,CAAO,EAAA,CAAA,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAc,CAAC,EAAE;AAEtExiB,MAAAA,IAAI,CAACyiC,mBAAmB,GAAG,IAAI,CAACgqB,gCAAgC,EAAE,CAAA;AACpE,KAAA;AACA,IAAA,IAAI,IAAI,CAACr+B,aAAa,CAAA,GAAA,CAAgB,EAAE;MACtCpuB,IAAI,CAACw5B,UAAU,GAAG,IAAI,CAACowB,qBAAqB,CAAC,YAAY,CAAC,CAAA;AAC5D,KAAA;AACF,GAAA;AAEA/mB,EAAAA,iBAAiB,CACf99B,IAA+C,EAC/CK,QAAqC,EACrC/B,WAAoB,EACpBnB,OAAgB,EAChB8C,SAAkB,EAClBC,UAAmB,EACnBI,mBAA6C,EAC7C;AACA,IAAA,MAAM5B,cAAc,GAAG,IAAI,CAACugD,wBAAwB,EAAE,CAAA;AACtD,IAAA,IAAIvgD,cAAc,EAAEsB,IAAI,CAACtB,cAAc,GAAGA,cAAc,CAAA;AAExD,IAAA,OAAO,KAAK,CAACo/B,iBAAiB,CAC5B99B,IAAI,EAEJK,QAAQ,EACR/B,WAAW,EACXnB,OAAO,EACP8C,SAAS,EACTC,UAAU,EACVI,mBAAmB,CACpB,CAAA;AACH,GAAA;AAEA8+B,EAAAA,mBAAmB,CAACnkC,IAAgB,EAAEokC,cAAwB,EAAQ;AACpE,IAAA,MAAM3gC,cAAc,GAAG,IAAI,CAACugD,wBAAwB,EAAE,CAAA;AACtD,IAAA,IAAIvgD,cAAc,EAAEzD,IAAI,CAACyD,cAAc,GAAGA,cAAc,CAAA;AACxD,IAAA,KAAK,CAAC0gC,mBAAmB,CAACnkC,IAAI,EAAEokC,cAAc,CAAC,CAAA;AACjD,GAAA;;AAGAC,EAAAA,UAAU,CACR5D,IAA0B,EAC1BjuC,IAAuC,EACjC;AACN,IAAA,KAAK,CAAC6xC,UAAU,CAAC5D,IAAI,EAAEjuC,IAAI,CAAC,CAAA;AAC5B,IAAA,IACEiuC,IAAI,CAAC18B,EAAE,CAAC3R,IAAI,KAAK,YAAY,IAC7B,CAAC,IAAI,CAACm8B,qBAAqB,EAAE,IAC7B,IAAI,CAACxJ,GAAG,IAAS,EACjB;MACA0b,IAAI,CAACgvB,QAAQ,GAAG,IAAI,CAAA;AACtB,KAAA;AAEA,IAAA,MAAMr9D,IAAI,GAAG,IAAI,CAAC6yD,wBAAwB,EAAE,CAAA;AAC5C,IAAA,IAAI7yD,IAAI,EAAE;AACRquC,MAAAA,IAAI,CAAC18B,EAAE,CAACg0B,cAAc,GAAG3lC,IAAI,CAAA;AAC7B,MAAA,IAAI,CAAC8V,gBAAgB,CAACu4B,IAAI,CAAC18B,EAAE,CAAC,CAAA;AAChC,KAAA;AACF,GAAA;;AAGAugC,EAAAA,iCAAiC,CAC/BtkC,IAA+B,EAC/BukC,IAAsB,EACK;AAC3B,IAAA,IAAI,IAAI,CAAC/hB,KAAK,CAAA,EAAA,CAAU,EAAE;AACxBxiB,MAAAA,IAAI,CAAC83B,UAAU,GAAG,IAAI,CAACsrB,qBAAqB,EAAE,CAAA;AAChD,KAAA;AACA,IAAA,OAAO,KAAK,CAAC9e,iCAAiC,CAACtkC,IAAI,EAAEukC,IAAI,CAAC,CAAA;AAC5D,GAAA;AAEA3E,EAAAA,gBAAgB,CACdv6B,mBAA6C,EAC7Co/B,cAAyB,EACX;AAAA,IAAA,IAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,UAAA,CAAA;;AAGd,IAAA,IAAI19B,KAA+B,CAAA;AACnC,IAAA,IAAI29B,GAAG,CAAA;AACP,IAAA,IAAIkrB,QAAQ,CAAA;AAEZ,IAAA,IACE,IAAI,CAACnpD,SAAS,CAAC,KAAK,CAAC,KACpB,IAAI,CAAC+b,KAAK,KAAgB,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAO,CAAC,EACjD;AAEAzb,MAAAA,KAAK,GAAG,IAAI,CAACA,KAAK,CAACpI,KAAK,EAAE,CAAA;AAE1B+lC,MAAAA,GAAG,GAAG,IAAI,CAAC7V,QAAQ,CACjB,MAAM,KAAK,CAAC+Q,gBAAgB,CAACv6B,mBAAmB,EAAEo/B,cAAc,CAAC,EACjE19B,KAAK,CACN,CAAA;;MAID,IAAI,CAAC29B,GAAG,CAACxa,KAAK,EAAE,OAAOwa,GAAG,CAAC1kC,IAAI,CAAA;;MAK/B,MAAM;AAAEiU,QAAAA,OAAAA;OAAS,GAAG,IAAI,CAAClN,KAAK,CAAA;MAC9B,MAAM49B,cAAc,GAAG1wB,OAAO,CAACA,OAAO,CAAChlB,MAAM,GAAG,CAAC,CAAC,CAAA;MAClD,IAAI01C,cAAc,KAAKxwB,KAAE,CAAC3L,MAAM,IAAIm8B,cAAc,KAAKxwB,KAAE,CAACzL,MAAM,EAAE;QAChEuL,OAAO,CAACC,GAAG,EAAE,CAAA;AACf,OAAA;AACF,KAAA;IAEA,IAAI,EAAA,CAAA,IAAA,GAACwwB,GAAG,KAAA,IAAA,IAAH,IAAKxa,CAAAA,KAAK,CAAI,IAAA,CAAC,IAAI,CAAC1H,KAAK,CAAA,EAAA,CAAO,EAAE;AACrC,MAAA,OAAO,KAAK,CAACod,gBAAgB,CAACv6B,mBAAmB,EAAEo/B,cAAc,CAAC,CAAA;AACpE,KAAA;;AAOA,IAAA,IAAI,CAAC19B,KAAK,IAAIA,KAAK,KAAK,IAAI,CAACA,KAAK,EAAEA,KAAK,GAAG,IAAI,CAACA,KAAK,CAACpI,KAAK,EAAE,CAAA;AAE9D,IAAA,IAAI8E,cAA+D,CAAA;AACnE,IAAA,MAAM8H,KAAK,GAAG,IAAI,CAACsjB,QAAQ,CAAC+V,KAAK,IAAI;AAAA,MAAA,IAAA,WAAA,EAAA,eAAA,CAAA;AAEnCnhC,MAAAA,cAAc,GAAG,IAAI,CAACwgD,qBAAqB,EAAE,CAAA;MAC7C,MAAMllB,IAAI,GAAG,KAAK,CAACa,gBAAgB,CACjCv6B,mBAAmB,EACnBo/B,cAAc,CACf,CAAA;AAED,MAAA,IACE1F,IAAI,CAAC3sC,IAAI,KAAK,yBAAyB,IAAA,CAAA,WAAA,GACvC2sC,IAAI,CAACl9B,KAAK,KAAA,IAAA,IAAV,WAAYY,CAAAA,aAAa,EACzB;AACAmiC,QAAAA,KAAK,EAAE,CAAA;AACT,OAAA;;MAGA,IAAI,CAAA,CAAA,eAAA,GAAAnhC,cAAc,KAAd,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAgBlB,MAAM,CAACtT,MAAM,MAAK,CAAC,EAAE;AACvC,QAAA,IAAI,CAAC0iC,0BAA0B,CAACoN,IAAI,EAAEt7B,cAAc,CAAC,CAAA;AACvD,OAAA;MACAs7B,IAAI,CAACt7B,cAAc,GAAGA,cAAc,CAAA;AAqBpC,MAAA,OAAOs7B,IAAI,CAAA;KACZ,EAAEh4B,KAAK,CAAC,CAAA;;IAGT,IAAI,CAACwE,KAAK,CAAC2e,KAAK,IAAI,CAAC3e,KAAK,CAAC4jB,OAAO,EAAE;AAIlC,MAAA,IAAI1rB,cAAc,EAAE,IAAI,CAACosD,4BAA4B,CAACpsD,cAAc,CAAC,CAAA;MAErE,OAAO8H,KAAK,CAACvL,IAAI,CAAA;AACnB,KAAA;IAEA,IAAI,CAAC0kC,GAAG,EAAE;MAIRyX,MAAM,CAAC,CAAC,IAAI,CAAC11C,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;;AAI9BmpD,MAAAA,QAAQ,GAAG,IAAI,CAAC/gC,QAAQ,CACtB,MAAM,KAAK,CAAC+Q,gBAAgB,CAACv6B,mBAAmB,EAAEo/B,cAAc,CAAC,EACjE19B,KAAK,CACN,CAAA;MAGD,IAAI,CAAC6oD,QAAQ,CAAC1lC,KAAK,EAAE,OAAO0lC,QAAQ,CAAC5vD,IAAI,CAAA;AAC3C,KAAA;AAEA,IAAA,IAAA,CAAA,KAAA,GAAI0kC,GAAG,KAAA,IAAA,IAAH,KAAK1kC,CAAAA,IAAI,EAAE;AAEb,MAAA,IAAI,CAAC+G,KAAK,GAAG29B,GAAG,CAACzV,SAAS,CAAA;MAC1B,OAAOyV,GAAG,CAAC1kC,IAAI,CAAA;AACjB,KAAA;IAEA,IAAIuL,KAAK,CAACvL,IAAI,EAAE;AAEd,MAAA,IAAI,CAAC+G,KAAK,GAAGwE,KAAK,CAAC0jB,SAAS,CAAA;AAC5B,MAAA,IAAIxrB,cAAc,EAAE,IAAI,CAACosD,4BAA4B,CAACpsD,cAAc,CAAC,CAAA;MAErE,OAAO8H,KAAK,CAACvL,IAAI,CAAA;AACnB,KAAA;AAEA,IAAA,IAAA,CAAA,SAAA,GAAI4vD,QAAQ,KAAA,IAAA,IAAR,SAAU5vD,CAAAA,IAAI,EAAE;AAElB,MAAA,IAAI,CAAC+G,KAAK,GAAG6oD,QAAQ,CAAC3gC,SAAS,CAAA;MAC/B,OAAO2gC,QAAQ,CAAC5vD,IAAI,CAAA;AACtB,KAAA;IAEA,IAAI0kC,CAAAA,KAAAA,GAAAA,GAAG,aAAH,KAAKxV,CAAAA,MAAM,EAAE,MAAMwV,GAAG,CAACxa,KAAK,CAAA;AAChC,IAAA,IAAI3e,KAAK,CAAC2jB,MAAM,EAAE,MAAM3jB,KAAK,CAAC2e,KAAK,CAAA;IACnC,IAAI0lC,CAAAA,UAAAA,GAAAA,QAAQ,aAAR,UAAU1gC,CAAAA,MAAM,EAAE,MAAM0gC,QAAQ,CAAC1lC,KAAK,CAAA;AAE1C,IAAA,MAAM,CAAAwa,CAAAA,KAAAA,GAAAA,GAAG,KAAH,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAKxa,KAAK,KAAI3e,KAAK,CAAC2e,KAAK,KAAA,CAAA,UAAA,GAAI0lC,QAAQ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAR,WAAU1lC,KAAK,CAAA,CAAA;AACpD,GAAA;EAEA2lC,4BAA4B,CAAC7vD,IAAS,EAAE;AAAA,IAAA,IAAA,WAAA,CAAA;IACtC,IACEA,IAAI,CAACuC,MAAM,CAACtT,MAAM,KAAK,CAAC,IACxB,EAAC+Q,CAAAA,WAAAA,GAAAA,IAAI,CAAC6B,KAAK,aAAV,WAAYiuD,CAAAA,aAAa,CAC1B,IAAA,IAAI,CAAClsD,eAAe,CAAC,YAAY,EAAE,0BAA0B,CAAC,EAC9D;AACA,MAAA,IAAI,CAACqC,KAAK,CAACm2C,QAAQ,CAAC+C,sBAAsB,EAAE;AAAEj5C,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AAC3D,KAAA;AACF,GAAA;;AAGAynD,EAAAA,eAAe,CACbpiD,mBAA6C,EAC7C0qD,QAAkB,EACJ;AACd,IAAA,IAAI,CAAC,IAAI,CAACtpD,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC+b,KAAK,CAAA,EAAA,CAAO,EAAE;MAC/C,OAAO,IAAI,CAACmnC,oBAAoB,EAAE,CAAA;AACpC,KAAC,MAAM;AACL,MAAA,OAAO,KAAK,CAAClC,eAAe,CAACpiD,mBAAmB,EAAE0qD,QAAQ,CAAC,CAAA;AAC7D,KAAA;AACF,GAAA;EAEA/qB,UAAU,CACRhlC,IAAuC,EACe;AACtD,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAU,EAAE;;AAIxB,MAAA,MAAM6d,MAAM,GAAG,IAAI,CAACxR,QAAQ,CAAC+V,KAAK,IAAI;AACpC,QAAA,MAAM9M,UAAU,GAAG,IAAI,CAAC2sB,oCAAoC,CAE3D,EAAA,CAAA,CAAA;AACD,QAAA,IAAI,IAAI,CAACn2B,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC9L,KAAK,CAAA,EAAA,CAAU,EAAEoiB,KAAK,EAAE,CAAA;AAC/D,QAAA,OAAO9M,UAAU,CAAA;AACnB,OAAC,CAAC,CAAA;MAEF,IAAIuI,MAAM,CAAClR,OAAO,EAAE,OAAA;AAEpB,MAAA,IAAI,CAACkR,MAAM,CAACnR,MAAM,EAAE;QAClB,IAAImR,MAAM,CAACnW,KAAK,EAAE,IAAI,CAACnjB,KAAK,GAAGs5B,MAAM,CAACpR,SAAS,CAAA;AAE/CjvB,QAAAA,IAAI,CAAC83B,UAAU,GAAGuI,MAAM,CAACrgC,IAAI,CAAA;AAC/B,OAAA;AACF,KAAA;AAEA,IAAA,OAAO,KAAK,CAACglC,UAAU,CAAChlC,IAAI,CAAC,CAAA;AAC/B,GAAA;;EAGA8iC,4BAA4B,CAAC1E,KAAgB,EAAE;AAC7C,IAAA,IAAI,IAAI,CAACrZ,GAAG,CAAA,EAAA,CAAa,EAAE;AACzB,MAAA,IACEqZ,KAAK,CAAChsC,IAAI,KAAK,YAAY,IAC3B,CAAC,IAAI,CAAC2U,KAAK,CAACmY,gBAAgB,IAC5B,CAAC,IAAI,CAACnY,KAAK,CAACgY,MAAM,EAClB;AACA,QAAA,IAAI,CAAC9Y,KAAK,CAACm2C,QAAQ,CAACpoB,iBAAiB,EAAE;AAAE9tB,UAAAA,EAAE,EAAEk4B,KAAAA;AAAM,SAAC,CAAC,CAAA;AACvD,OAAA;MAECA,KAAK,CAAyB/3B,QAAQ,GAAG,IAAI,CAAA;AAChD,KAAA;AACA,IAAA,MAAMjU,IAAI,GAAG,IAAI,CAAC6yD,wBAAwB,EAAE,CAAA;AAC5C,IAAA,IAAI7yD,IAAI,EAAEgsC,KAAK,CAACrG,cAAc,GAAG3lC,IAAI,CAAA;AACrC,IAAA,IAAI,CAAC8V,gBAAgB,CAACk2B,KAAK,CAAC,CAAA;AAE5B,IAAA,OAAOA,KAAK,CAAA;AACd,GAAA;AAEA34B,EAAAA,YAAY,CAACzF,IAAY,EAAE0F,SAAmB,EAAW;IACvD,QAAQ1F,IAAI,CAAC5N,IAAI;AACf,MAAA,KAAK,sBAAsB;QACzB,OAAO,IAAI,CAACqT,YAAY,CAACzF,IAAI,CAAC2B,UAAU,EAAE+D,SAAS,CAAC,CAAA;AACtD,MAAA,KAAK,qBAAqB;AACxB,QAAA,OAAO,IAAI,CAAA;AACb,MAAA;AACE,QAAA,OAAO,KAAK,CAACD,YAAY,CAACzF,IAAI,EAAE0F,SAAS,CAAC,CAAA;AAAC,KAAA;AAEjD,GAAA;AAEAC,EAAAA,YAAY,CAAC3F,IAAY,EAAE4F,KAAc,GAAG,KAAK,EAAQ;IACvD,QAAQ5F,IAAI,CAAC5N,IAAI;AACf,MAAA,KAAK,yBAAyB;AAC5B,QAAA,IAAI,CAAC49D,mCAAmC,CAAChwD,IAAI,EAAE4F,KAAK,CAAC,CAAA;AACrD,QAAA,MAAA;AACF,MAAA,KAAK,gBAAgB,CAAA;AACrB,MAAA,KAAK,uBAAuB,CAAA;AAC5B,MAAA,KAAK,qBAAqB,CAAA;AAC1B,MAAA,KAAK,iBAAiB;AACpB,QAAA,IAAIA,KAAK,EAAE;UACT,IAAI,CAAC2qB,eAAe,CAAC/D,gCAAgC,CACnD4vB,QAAQ,CAAC8D,6BAA6B,EACtC;AAAEh6C,YAAAA,EAAE,EAAElG,IAAAA;AAAK,WAAC,CACb,CAAA;AACH,SAAC,MAAM;AACL,UAAA,IAAI,CAACiG,KAAK,CAACm2C,QAAQ,CAAC8D,6BAA6B,EAAE;AAAEh6C,YAAAA,EAAE,EAAElG,IAAAA;AAAK,WAAC,CAAC,CAAA;AAClE,SAAA;QACA,IAAI,CAAC2F,YAAY,CAAC3F,IAAI,CAAC2B,UAAU,EAAEiE,KAAK,CAAC,CAAA;AACzC,QAAA,MAAA;AACF,MAAA,KAAK,sBAAsB;QACzB,IAAI,CAACA,KAAK,IAAI5F,IAAI,CAAC0hC,IAAI,CAACtvC,IAAI,KAAK,sBAAsB,EAAE;UACvD4N,IAAI,CAAC0hC,IAAI,GAAG,IAAI,CAAClD,mBAAmB,CAACx+B,IAAI,CAAC0hC,IAAI,CAAC,CAAA;AACjD,SAAA;AAEF,MAAA;AACE,QAAA,KAAK,CAAC/7B,YAAY,CAAC3F,IAAI,EAAE4F,KAAK,CAAC,CAAA;AAAC,KAAA;AAEtC,GAAA;AAEAoqD,EAAAA,mCAAmC,CAAChwD,IAAY,EAAE4F,KAAc,EAAQ;AACtE,IAAA,QAAQ5F,IAAI,CAAC2B,UAAU,CAACvP,IAAI;AAC1B,MAAA,KAAK,gBAAgB,CAAA;AACrB,MAAA,KAAK,uBAAuB,CAAA;AAC5B,MAAA,KAAK,qBAAqB,CAAA;AAC1B,MAAA,KAAK,iBAAiB,CAAA;AACtB,MAAA,KAAK,yBAAyB;QAC5B,IAAI,CAACuT,YAAY,CAAC3F,IAAI,CAAC2B,UAAU,EAAEiE,KAAK,CAAC,CAAA;AACzC,QAAA,MAAA;AACF,MAAA;AACE,QAAA,KAAK,CAACD,YAAY,CAAC3F,IAAI,EAAE4F,KAAK,CAAC,CAAA;AAAC,KAAA;AAEtC,GAAA;AAEAqqD,EAAAA,qBAAqB,CAACjwD,IAAY,EAAEkwD,YAAqB,EAAQ;IAC/D,QAAQlwD,IAAI,CAAC5N,IAAI;AACf,MAAA,KAAK,gBAAgB,CAAA;AACrB,MAAA,KAAK,uBAAuB,CAAA;AAC5B,MAAA,KAAK,iBAAiB,CAAA;AACtB,MAAA,KAAK,qBAAqB;QACxB,IAAI,CAAC69D,qBAAqB,CAACjwD,IAAI,CAAC2B,UAAU,EAAE,KAAK,CAAC,CAAA;AAClD,QAAA,MAAA;AACF,MAAA;AACE,QAAA,KAAK,CAACsuD,qBAAqB,CAACjwD,IAAI,EAAEkwD,YAAY,CAAC,CAAA;AAAC,KAAA;AAEtD,GAAA;;AAGA5qD,EAAAA,WAAW,CACTlT,IAMqB,EACrBmT,yBAAkC,EAClCC,OAAqB,EACrB;AACA,IAAA,OACEu2C,QAAM,CACJ;AAIEoU,MAAAA,oBAAoB,EAAE,IAAI;AAC1BC,MAAAA,mBAAmB,EAAE,WAAW;AAChCC,MAAAA,mBAAmB,EAAE,YAAY;AACjCC,MAAAA,cAAc,EAAE,CAAC9qD,OAAO,KAAK0S,SAAS,IACpC,CAAC3S,yBAAyB,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC;AACrDgrD,MAAAA,qBAAqB,EAAE,CAAC/qD,OAAO,KAAK0S,SAAS,IAC3C,CAAC3S,yBAAyB,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC;AACrDirD,MAAAA,eAAe,EAAE,CAAChrD,OAAO,KAAK0S,SAAS,IACrC,CAAC3S,yBAAyB,KAAK,CAAC,YAAY,EAAE,IAAI,CAAA;AACtD,KAAC,EACDnT,IAAI,CACL,IAAI,KAAK,CAACkT,WAAW,CAAClT,IAAI,EAAEmT,yBAAyB,EAAEC,OAAO,CAAC,CAAA;AAEpE,GAAA;AAEA0+B,EAAAA,gBAAgB,GAAc;AAC5B,IAAA,QAAQ,IAAI,CAACn9B,KAAK,CAAC3U,IAAI;AACrB,MAAA,KAAA,EAAA;AAEE,QAAA,OAAO,IAAI,CAACmlC,eAAe,CAAe,IAAI,CAAC,CAAA;AACjD,MAAA;QACE,OAAO,KAAK,CAAC2M,gBAAgB,EAAE,CAAA;AAAC,KAAA;AAEtC,GAAA;EAEAusB,4BAA4B,CAAC1xB,IAAkB,EAAgB;IAE7D,IAAI,IAAI,CAACvc,KAAK,CAAA,EAAA,CAAO,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAc,EAAE;AACjD,MAAA,MAAMqjB,aAAa,GAAG,IAAI,CAAC4mB,gCAAgC,EAAE,CAAA;AAE7D,MAAA,IAAI,IAAI,CAACjqC,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,QAAA,MAAM+hB,IAAI,GAAG,KAAK,CAACksB,4BAA4B,CAAC1xB,IAAI,CAAC,CAAA;QACrDwF,IAAI,CAAC9gC,cAAc,GAAGoiC,aAAa,CAAA;AACnC,QAAA,OAAOtB,IAAI,CAAA;AACb,OAAA;AAEA,MAAA,IAAI,CAACvtC,UAAU,CAAC,IAAI,EAAY,EAAA,CAAA,CAAA;AAClC,KAAA;AAEA,IAAA,OAAO,KAAK,CAACy5D,4BAA4B,CAAC1xB,IAAI,CAAC,CAAA;AACjD,GAAA;EAEA2xB,mBAAmB,CACjB3uB,KAA+C,EACtC;AACT,IAAA,IACE,IAAI,CAACh7B,KAAK,CAACmY,gBAAgB,IAC3B,IAAI,CAACsD,KAAK,CAAA,EAAA,CAAU,IACpB,IAAI,CAACgD,iBAAiB,EAAE,KAAKuc,KAAK,EAClC;MACA,IAAI,CAACjsB,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,KAAK,CAAA;AACd,KAAC,MAAM;AACL,MAAA,OAAO,KAAK,CAAC46C,mBAAmB,CAAC3uB,KAAK,CAAC,CAAA;AACzC,KAAA;AACF,GAAA;;AAOAI,EAAAA,aAAa,GAAY;IACvB,OAAO,IAAI,CAAC3f,KAAK,CAAA,EAAA,CAAO,IAAI,KAAK,CAAC2f,aAAa,EAAE,CAAA;AACnD,GAAA;AAEAC,EAAAA,eAAe,GAAY;AACzB,IAAA,OACE,IAAI,CAAC5f,KAAK,CAAA,EAAA,CAAS,IAAI,IAAI,CAACA,KAAK,CAAU,EAAA,CAAA,IAAI,KAAK,CAAC4f,eAAe,EAAE,CAAA;AAE1E,GAAA;AAEAW,EAAAA,iBAAiB,CACf39B,QAA0B,EAC1Bs8B,IAAqB,EACV;IACX,MAAM1hC,IAAI,GAAG,KAAK,CAAC+iC,iBAAiB,CAAC39B,QAAQ,EAAEs8B,IAAI,CAAC,CAAA;IAEpD,IACE1hC,IAAI,CAAC5N,IAAI,KAAK,mBAAmB,IACjC4N,IAAI,CAAC+3B,cAAc,IACnB/3B,IAAI,CAACu6B,KAAK,CAACjsC,KAAK,GAAG0R,IAAI,CAAC+3B,cAAc,CAACzpC,KAAK,EAC5C;AACA,MAAA,IAAI,CAAC2X,KAAK,CAACm2C,QAAQ,CAACuD,yBAAyB,EAAE;QAC7Cz5C,EAAE,EAAElG,IAAI,CAAC+3B,cAAAA;AACX,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAO/3B,IAAI,CAAA;AACb,GAAA;;EAGAkmB,gBAAgB,CAACz1B,IAAY,EAAQ;AACnC,IAAA,IAAI,IAAI,CAACsW,KAAK,CAACgY,MAAM,EAAE;MACrB,IAAItuB,IAAI,OAA0B,EAAE;AAClC,QAAA,OAAO,IAAI,CAACw2B,QAAQ,CAAA,EAAA,EAAQ,CAAC,CAAC,CAAA;AAChC,OAAA;MACA,IAAIx2B,IAAI,OAAuB,EAAE;AAC/B,QAAA,OAAO,IAAI,CAACw2B,QAAQ,CAAA,EAAA,EAAQ,CAAC,CAAC,CAAA;AAChC,OAAA;AACF,KAAA;AACA,IAAA,OAAO,KAAK,CAACf,gBAAgB,CAACz1B,IAAI,CAAC,CAAA;AACrC,GAAA;;AAGAy9D,EAAAA,YAAY,GAAG;IACb,MAAM;AAAE97D,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;IAC3B,IAAI3U,IAAI,OAAU,EAAE;AAClB,MAAA,IAAI,CAAC2U,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;MACnB,IAAI,CAACkpB,YAAY,EAAE,CAAA;AACrB,KAAC,MAAM,IAAI31B,IAAI,KAAA,EAAU,EAAE;AACzB,MAAA,IAAI,CAAC2U,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;MACnB,IAAI,CAACmpB,YAAY,EAAE,CAAA;AACrB,KAAA;AACF,GAAA;AAEA0kC,EAAAA,SAAS,GAAG;IACV,MAAM;AAAEt6D,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;IAC3B,IAAI3U,IAAI,OAAiB,EAAE;AACzB,MAAA,IAAI,CAAC2U,KAAK,CAAClI,GAAG,IAAI,CAAC,CAAA;AACnB,MAAA,IAAI,CAACooB,QAAQ,CAAQ,EAAA,EAAA,CAAC,CAAC,CAAA;AACvB,MAAA,OAAA,EAAA,CAAA;AACF,KAAA;AACA,IAAA,OAAO70B,IAAI,CAAA;AACb,GAAA;AAEA8tC,EAAAA,gBAAgB,CACdyB,QAAsB,EACtBxB,gBAA6C,EAC7Cv6B,KAAc,EACR;AACN,IAAA,KAAK,IAAInW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkyC,QAAQ,CAAC1yC,MAAM,EAAEQ,CAAC,EAAE,EAAE;AACxC,MAAA,MAAMsvC,IAAI,GAAG4C,QAAQ,CAAClyC,CAAC,CAAC,CAAA;MACxB,IAAI,CAAAsvC,IAAI,IAAJA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAE3sC,IAAI,MAAK,sBAAsB,EAAE;QACzCuvC,QAAQ,CAAClyC,CAAC,CAAC,GAAG,IAAI,CAAC+uC,mBAAmB,CACpCO,IAAI,CACL,CAAA;AACH,OAAA;AACF,KAAA;IACA,KAAK,CAACmB,gBAAgB,CAACyB,QAAQ,EAAExB,gBAAgB,EAAEv6B,KAAK,CAAC,CAAA;AAC3D,GAAA;EAEA44B,mBAAmB,CAACx+B,IAA4B,EAAU;AACxDA,IAAAA,IAAI,CAAC2B,UAAU,CAACo2B,cAAc,GAAG/3B,IAAI,CAAC+3B,cAAc,CAAA;AAEpD,IAAA,IAAI,CAAC7vB,gBAAgB,CAAClI,IAAI,CAAC2B,UAAU,EAAE3B,IAAI,CAAC+3B,cAAc,CAACv5B,GAAG,CAACjQ,GAAG,CAAC,CAAA;IAEnE,OAAOyR,IAAI,CAAC2B,UAAU,CAAA;AACxB,GAAA;EAEAsjC,gBAAgB,CAAC1iC,MAAqB,EAAE;AACtC,IAAA,IAAI,IAAI,CAACigB,KAAK,CAAA,EAAA,CAAU,EAAE;AACxB,MAAA,OAAOjgB,MAAM,CAAC09B,KAAK,CAAClB,IAAI,IAAI,IAAI,CAACt5B,YAAY,CAACs5B,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAC5D,KAAA;AACA,IAAA,OAAO,KAAK,CAACkG,gBAAgB,CAAC1iC,MAAM,CAAC,CAAA;AACvC,GAAA;AAEAiiC,EAAAA,qBAAqB,GAAY;IAC/B,OAAO,IAAI,CAAChiB,KAAK,CAAA,EAAA,CAAU,IAAI,KAAK,CAACgiB,qBAAqB,EAAE,CAAA;AAC9D,GAAA;AAEAmsB,EAAAA,uBAAuB,GAAG;IAExB,OAAO,KAAK,CAACA,uBAAuB,EAAE,IAAI,IAAI,CAACpC,eAAe,EAAE,CAAA;AAClE,GAAA;EAEA/T,+BAA+B,CAC7Bx6C,IAAyB,EACJ;IAErB,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAO,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAc,EAAE;AACjD,MAAA,MAAMqjB,aAAa,GAAG,IAAI,CAAC4lB,kBAAkB,CAAC;MAE5C,IAAI,CAACgB,gCAAgC,EAAE,CACxC,CAAA;AAED,MAAA,IAAI5mB,aAAa,EAAE7lC,IAAI,CAACyD,cAAc,GAAGoiC,aAAa,CAAA;AACxD,KAAA;AACA,IAAA,OAAO,KAAK,CAAC2U,+BAA+B,CAACx6C,IAAI,CAAC,CAAA;AACpD,GAAA;EAEA4wD,iCAAiC,CAC/BtuD,MAAsC,EAC9B;AACR,IAAA,MAAMuuD,SAAS,GAAG,KAAK,CAACD,iCAAiC,CAACtuD,MAAM,CAAC,CAAA;AACjE,IAAA,MAAMC,MAAM,GAAG,IAAI,CAACF,4BAA4B,CAACC,MAAM,CAAC,CAAA;AACxD,IAAA,MAAMwuD,UAAU,GAAGvuD,MAAM,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAMwuD,eAAe,GAAGD,UAAU,IAAI,IAAI,CAACxuB,WAAW,CAACwuB,UAAU,CAAC,CAAA;AAElE,IAAA,OAAOC,eAAe,GAAGF,SAAS,GAAG,CAAC,GAAGA,SAAS,CAAA;AACpD,GAAA;AAEAG,EAAAA,qBAAqB,GAAc;AACjC,IAAA,MAAM5yB,KAAK,GAAG,KAAK,CAAC4yB,qBAAqB,EAAE,CAAA;AAC3C,IAAA,MAAM5+D,IAAI,GAAG,IAAI,CAAC6yD,wBAAwB,EAAE,CAAA;AAE5C,IAAA,IAAI7yD,IAAI,EAAE;MACRgsC,KAAK,CAACrG,cAAc,GAAG3lC,IAAI,CAAA;AAC3B,MAAA,IAAI,CAAC8V,gBAAgB,CAACk2B,KAAK,CAAC,CAAA;AAC9B,KAAA;AAEA,IAAA,OAAOA,KAAK,CAAA;AACd,GAAA;EAEAytB,kBAAkB,CAAI1B,EAAW,EAAK;AACpC,IAAA,MAAM8G,mBAAmB,GAAG,IAAI,CAAClqD,KAAK,CAACmY,gBAAgB,CAAA;AACvD,IAAA,IAAI,CAACnY,KAAK,CAACmY,gBAAgB,GAAG,IAAI,CAAA;IAClC,IAAI;AACF,MAAA,OAAOirC,EAAE,EAAE,CAAA;AACb,KAAC,SAAS;AACR,MAAA,IAAI,CAACpjD,KAAK,CAACmY,gBAAgB,GAAG+xC,mBAAmB,CAAA;AACnD,KAAA;AACF,GAAA;AAEAlF,EAAAA,UAAU,CACR/rD,IAAe,EACfkhC,WAAoB,EACpBC,UAAoB,EACjB;AACH,IAAA,MAAM+vB,kBAAkB,GAAG,IAAI,CAACnqD,KAAK,CAACoY,eAAe,CAAA;IACrD,IAAI,CAACpY,KAAK,CAACoY,eAAe,GAAG,CAAC,CAAEnf,IAAI,CAASgnD,QAAQ,CAAA;IACrD,IAAI;MACF,OAAO,KAAK,CAAC+E,UAAU,CAAC/rD,IAAI,EAAEkhC,WAAW,EAAEC,UAAU,CAAC,CAAA;AACxD,KAAC,SAAS;AACR,MAAA,IAAI,CAACp6B,KAAK,CAACoY,eAAe,GAAG+xC,kBAAkB,CAAA;AACjD,KAAA;AACF,GAAA;AAEA5E,EAAAA,0BAA0B,CACxBtsD,IAAS,EACT6G,UAAgC,EACkC;AAClE,IAAA,IAAI,IAAI,CAAC2b,KAAK,CAAA,EAAA,CAAW,EAAE;MACzBxiB,IAAI,CAACgnD,QAAQ,GAAG,IAAI,CAAA;AACpB,MAAA,OAAO,IAAI,CAACmK,mBAAmB,CAC7BtqD,UAAU,EACV,IAAI,CAACklD,UAAU,CACb/rD,IAAI,EACc,IAAI,EACL,KAAK,CACvB,CACF,CAAA;AACH,KAAC,MAAM,IAAI,IAAI,CAAC8tB,YAAY,KAAe,EAAE;;AAM3C,MAAA,IAAI,CAAC,IAAI,CAACU,qBAAqB,EAAE,EAAE;QACjCxuB,IAAI,CAACgnD,QAAQ,GAAG,IAAI,CAAA;AACpB,QAAA,IAAI,CAAC/gD,KAAK,CAACm2C,QAAQ,CAACyC,wCAAwC,EAAE;AAC5D34C,UAAAA,EAAE,EAAElG,IAAAA;AACN,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,IAAI,CAAC+pD,2BAA2B,CACrC/pD,IAAI,CACL,CAAA;AACH,OAAA;AACF,KAAC,MAAM;AACL,MAAA,IAAI,CAAChJ,UAAU,CAAC,IAAI,EAAY,EAAA,CAAA,CAAA;AAClC,KAAA;AACF,GAAA;AAEAwM,EAAAA,WAAW,CAGTxD,IAAe,EACfqD,WAAoB,EACpBnB,OAAgB,EAChBoB,aAAsB,EACtBc,gBAAyB,EACzBhS,IAAe,EACfiS,YAAsB,EACtB;AACA,IAAA,MAAM/B,MAAM,GAAG,KAAK,CAACkB,WAAW,CAC9BxD,IAAI,EACJqD,WAAW,EACXnB,OAAO,EACPoB,aAAa,EACbc,gBAAgB,EAChBhS,IAAI,EACJiS,YAAY,CACb,CAAA;IAED,IAAI/B,MAAM,CAAC0kD,QAAQ,EAAE;AACnB,MAAA,MAAMoK,OAAO,GAAG,IAAI,CAAC3qD,SAAS,CAAC,QAAQ,CAAC;MAEpC,CAAC,CAACnE,MAAM,CAAC/S,KAAK,CAAC0T,IAAI,GACnB,CAAC,CAACX,MAAM,CAACW,IAAI,CAAA;AACjB,MAAA,IAAImuD,OAAO,EAAE;QACX,MAAM;AAAE/hE,UAAAA,GAAAA;AAAI,SAAC,GAAGiT,MAAM,CAAA;AACtB,QAAA,IAAI,CAAC2D,KAAK,CAACm2C,QAAQ,CAACC,+BAA+B,EAAE;AACnDn2C,UAAAA,EAAE,EAAE5D,MAAM;AACVg6C,UAAAA,UAAU,EACRjtD,GAAG,CAAC+C,IAAI,KAAK,YAAY,IAAI,CAACkQ,MAAM,CAACkC,QAAQ,GACzCnV,GAAG,CAAC2I,IAAI,GACP,CAAA,CAAA,EAAG,IAAI,CAAC2lB,KAAK,CAAC+C,KAAK,CAACrxB,GAAG,CAACf,KAAK,EAAEe,GAAG,CAACd,GAAG,CAAE,CAAA,CAAA,CAAA;AACjD,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AACA,IAAA,OAAO+T,MAAM,CAAA;AACf,GAAA;AAEAuhD,EAAAA,wBAAwB,GAA0B;AAChD,IAAA,MAAMb,QAAsB,GAAG,IAAI,CAACzrB,eAAe,EAAE,CAAA;IACrD,OAAiDyrB,QAAQ,CAAChrD,IAAI,CAAA;AAChE,GAAA;AAEAq5D,EAAAA,2BAA2B,GAAY;IACrC,OAAO,CAAC,CAAC,IAAI,CAACztD,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;AACpD,GAAA;AAEAzD,EAAAA,KAAK,GAAG;AACN,IAAA,IAAI,IAAI,CAACkxD,2BAA2B,EAAE,EAAE;AACtC,MAAA,IAAI,CAACtqD,KAAK,CAACmY,gBAAgB,GAAG,IAAI,CAAA;AACpC,KAAA;IACA,OAAO,KAAK,CAAC/e,KAAK,EAAE,CAAA;AACtB,GAAA;AAEAmxD,EAAAA,aAAa,GAAG;AACd,IAAA,IAAI,IAAI,CAACD,2BAA2B,EAAE,EAAE;AACtC,MAAA,IAAI,CAACtqD,KAAK,CAACmY,gBAAgB,GAAG,IAAI,CAAA;AACpC,KAAA;IACA,OAAO,KAAK,CAACoyC,aAAa,EAAE,CAAA;AAC9B,GAAA;EAEAC,oBAAoB,CAClBvxD,IAA+B,EAC/BwxD,QAAiB,EACjBC,cAAuB,EACvB9tB,eAAwB,EACxB;AACA,IAAA,IAAI,CAAC6tB,QAAQ,IAAI7tB,eAAe,EAAE;MAChC,IAAI,CAAC+tB,kCAAkC,CACrC1xD,IAAI,EACW,KAAK,EACpByxD,cAAc,CACf,CAAA;AACD,MAAA,OAAO,IAAI,CAAChtD,UAAU,CAAoBzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACpE,KAAA;IACAA,IAAI,CAACg5B,UAAU,GAAG,OAAO,CAAA;IACzB,OAAO,KAAK,CAACu4B,oBAAoB,CAC/BvxD,IAAI,EACJwxD,QAAQ,EACRC,cAAc,EACd9tB,eAAe,CAChB,CAAA;AACH,GAAA;AAEAH,EAAAA,oBAAoB,CAClBJ,SAAoC,EACpCK,gBAAyB,EACzBC,kBAA2B,EAC3BC,eAAwB;AAExBjpB,EAAAA,WAAqC,EAClB;AACnB,IAAA,IAAI,CAAC+oB,gBAAgB,IAAIE,eAAe,EAAE;MACxC,IAAI,CAAC+tB,kCAAkC,CACrCtuB,SAAS,EACM,IAAI,EACnBM,kBAAkB,CACnB,CAAA;AACD,MAAA,OAAO,IAAI,CAACj/B,UAAU,CAAoB2+B,SAAS,EAAE,iBAAiB,CAAC,CAAA;AACzE,KAAA;IACAA,SAAS,CAAC3N,UAAU,GAAG,OAAO,CAAA;AAC9B,IAAA,OAAO,KAAK,CAAC+N,oBAAoB,CAC/BJ,SAAS,EACTK,gBAAgB,EAChBC,kBAAkB,EAClBC,eAAe,EACfD,kBAAkB,GAAGprB,mBAAmB,GAAGb,oBAAoB,CAChE,CAAA;AACH,GAAA;AAEAi6C,EAAAA,kCAAkC,CAChC1xD,IAAS,EACT2xD,QAAiB,EACjBC,wBAAiC,EAC3B;AACN,IAAA,MAAMC,WAAW,GAAGF,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAA;AACnD,IAAA,MAAMG,YAAY,GAAGH,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAA;AAEpD,IAAA,IAAII,QAAQ,GAAG/xD,IAAI,CAAC6xD,WAAW,CAAC,CAAA;AAChC,IAAA,IAAIG,SAAS,CAAA;IAEb,IAAIC,gBAAgB,GAAG,KAAK,CAAA;IAC5B,IAAIC,iBAAiB,GAAG,IAAI,CAAA;AAE5B,IAAA,MAAM1zD,GAAG,GAAGuzD,QAAQ,CAACvzD,GAAG,CAAClQ,KAAK,CAAA;;AAO9B,IAAA,IAAI,IAAI,CAACw/B,YAAY,CAAA,EAAA,CAAQ,EAAE;AAE7B,MAAA,MAAMqkC,OAAO,GAAG,IAAI,CAAC56B,eAAe,EAAE,CAAA;AACtC,MAAA,IAAI,IAAI,CAACzJ,YAAY,CAAA,EAAA,CAAQ,EAAE;AAE7B,QAAA,MAAMskC,QAAQ,GAAG,IAAI,CAAC76B,eAAe,EAAE,CAAA;QACvC,IAAIxkB,0BAA0B,CAAC,IAAI,CAAChM,KAAK,CAAC3U,IAAI,CAAC,EAAE;AAE/C6/D,UAAAA,gBAAgB,GAAG,IAAI,CAAA;AACvBF,UAAAA,QAAQ,GAAGI,OAAO,CAAA;UAClBH,SAAS,GAAGL,QAAQ,GAChB,IAAI,CAACp6B,eAAe,EAAE,GACtB,IAAI,CAAC86B,qBAAqB,EAAE,CAAA;AAChCH,UAAAA,iBAAiB,GAAG,KAAK,CAAA;AAC3B,SAAC,MAAM;AAELF,UAAAA,SAAS,GAAGI,QAAQ,CAAA;AACpBF,UAAAA,iBAAiB,GAAG,KAAK,CAAA;AAC3B,SAAA;OACD,MAAM,IAAIn/C,0BAA0B,CAAC,IAAI,CAAChM,KAAK,CAAC3U,IAAI,CAAC,EAAE;AAEtD8/D,QAAAA,iBAAiB,GAAG,KAAK,CAAA;QACzBF,SAAS,GAAGL,QAAQ,GAChB,IAAI,CAACp6B,eAAe,EAAE,GACtB,IAAI,CAAC86B,qBAAqB,EAAE,CAAA;AAClC,OAAC,MAAM;AAELJ,QAAAA,gBAAgB,GAAG,IAAI,CAAA;AACvBF,QAAAA,QAAQ,GAAGI,OAAO,CAAA;AACpB,OAAA;KACD,MAAM,IAAIp/C,0BAA0B,CAAC,IAAI,CAAChM,KAAK,CAAC3U,IAAI,CAAC,EAAE;AAEtD6/D,MAAAA,gBAAgB,GAAG,IAAI,CAAA;AACvB,MAAA,IAAIN,QAAQ,EAAE;AACZI,QAAAA,QAAQ,GAAG,IAAI,CAACx6B,eAAe,CAAC,IAAI,CAAC,CAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAACzJ,YAAY,IAAQ,EAAE;AAC9B,UAAA,IAAI,CAACmW,iBAAiB,CACpB8tB,QAAQ,CAAC/5D,IAAI,EACb+5D,QAAQ,CAACvzD,GAAG,CAAClQ,KAAK,EAClB,IAAI,EACJ,IAAI,CACL,CAAA;AACH,SAAA;AACF,OAAC,MAAM;AACLyjE,QAAAA,QAAQ,GAAG,IAAI,CAACM,qBAAqB,EAAE,CAAA;AACzC,OAAA;AACF,KAAA;IACA,IAAIJ,gBAAgB,IAAIL,wBAAwB,EAAE;AAChD,MAAA,IAAI,CAAC3rD,KAAK,CACR0rD,QAAQ,GACJvV,QAAQ,CAAC0D,+BAA+B,GACxC1D,QAAQ,CAACyD,+BAA+B,EAC5C;AAAE35C,QAAAA,EAAE,EAAE1H,GAAAA;AAAI,OAAC,CACZ,CAAA;AACH,KAAA;AAEAwB,IAAAA,IAAI,CAAC6xD,WAAW,CAAC,GAAGE,QAAQ,CAAA;AAC5B/xD,IAAAA,IAAI,CAAC8xD,YAAY,CAAC,GAAGE,SAAS,CAAA;AAE9B,IAAA,MAAMM,OAAO,GAAGX,QAAQ,GAAG,YAAY,GAAG,YAAY,CAAA;IACtD3xD,IAAI,CAACsyD,OAAO,CAAC,GAAGL,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAA;AAEnD,IAAA,IAAIC,iBAAiB,IAAI,IAAI,CAAC9jC,aAAa,IAAQ,EAAE;AACnDpuB,MAAAA,IAAI,CAAC8xD,YAAY,CAAC,GAAGH,QAAQ,GACzB,IAAI,CAACp6B,eAAe,EAAE,GACtB,IAAI,CAAC86B,qBAAqB,EAAE,CAAA;AAClC,KAAA;AACA,IAAA,IAAI,CAACryD,IAAI,CAAC8xD,YAAY,CAAC,EAAE;MACvB9xD,IAAI,CAAC8xD,YAAY,CAAC,GAAG1gC,eAAe,CAACpxB,IAAI,CAAC6xD,WAAW,CAAC,CAAC,CAAA;AACzD,KAAA;AACA,IAAA,IAAIF,QAAQ,EAAE;AACZ,MAAA,IAAI,CAAC3H,eAAe,CAClBhqD,IAAI,CAAC8xD,YAAY,CAAC,EAClBG,gBAAgB,GAAG35C,mBAAmB,GAAGb,oBAAoB,CAC9D,CAAA;AACH,KAAA;AACF,GAAA;AACF,CAAC,EAAA;AAEH,SAASm3C,qBAAqB,CAACjtD,UAAwB,EAAW;AAChE,EAAA,IAAIA,UAAU,CAACvP,IAAI,KAAK,kBAAkB,EAAE,OAAO,KAAK,CAAA;EAExD,MAAM;IAAEoS,QAAQ;AAAEorB,IAAAA,QAAAA;AAAS,GAAC,GAAGjuB,UAAU,CAAA;EAEzC,IACE6C,QAAQ,IACRorB,QAAQ,CAACx9B,IAAI,KAAK,eAAe,KAChCw9B,QAAQ,CAACx9B,IAAI,KAAK,iBAAiB,IAAIw9B,QAAQ,CAAC++B,WAAW,CAAC1/D,MAAM,GAAG,CAAC,CAAC,EACxE;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA,EAAA,OAAOsjE,iCAAiC,CAAC5wD,UAAU,CAACvS,MAAM,CAAC,CAAA;AAC7D,CAAA;AAEA,SAASmjE,iCAAiC,CAAC5wD,UAAwB,EAAW;AAC5E,EAAA,IAAIA,UAAU,CAACvP,IAAI,KAAK,YAAY,EAAE,OAAO,IAAI,CAAA;AACjD,EAAA,IAAIuP,UAAU,CAACvP,IAAI,KAAK,kBAAkB,EAAE,OAAO,KAAK,CAAA;AACxD,EAAA,IAAIuP,UAAU,CAAC6C,QAAQ,EAAE,OAAO,KAAK,CAAA;AAErC,EAAA,OAAO+tD,iCAAiC,CAAC5wD,UAAU,CAACvS,MAAM,CAAC,CAAA;AAC7D;;ACx/HA,MAAMojE,iBAAiB,GAAG1zD,cAAe,CAAA,YAAA,CAAa,CAAC;AACrD2zD,EAAAA,mBAAmB,EAAE,2BAA2B;AAChDC,EAAAA,eAAe,EAAE,kCAAA;AACnB,CAAC,CAAC,CAAA;;AAIF,mBAAA,CAAgBzyD,UAAyB,IACvC,MAAM0yD,uBAAuB,SAAS1yD,UAAU,CAAmB;EACjE2yD,gBAAgB,CACdrhC,YAAe,EAC+C;AAC9D,IAAA,IAAI,IAAI,CAAC/O,KAAK,CAAA,GAAA,CAAgB,EAAE;AAC9B,MAAA,MAAMxiB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;MAC7B,IAAI,CAACuR,IAAI,EAAE,CAAA;MACX,IAAI,CAAC+8C,aAAa,EAAE,CAAA;;MAIpB7yD,IAAI,CAAChI,IAAI,GAAG,KAAK,CAACu/B,eAAe,CAAe,IAAI,CAAC,CAAA;MAErD,IAAI,CAACs7B,aAAa,EAAE,CAAA;MACpB,IAAI,CAACjkC,MAAM,CAAgB,GAAA,CAAA,CAAA;AAE3B,MAAA,OAAO,IAAI,CAACkkC,iBAAiB,CAAC9yD,IAAI,EAAEuxB,YAAY,CAAC,CAAA;AACnD,KAAA;AACF,GAAA;AAEAuhC,EAAAA,iBAAiB,CACf9yD,IAAY,EACZuxB,YAAe,EAC2B;AAC1C,IAAA,MAAMwhC,UAAU,GAAG,CAAC,EAAE/yD,IAAI,CAACuxB,YAAY,IAAIvxB,IAAI,CAAC5N,IAAI,KAAK,aAAa,CAAC,CAAA;IACvE4N,IAAI,CAACuxB,YAAY,GAAGA,YAAY,CAAA;;IAGhC,OAAOwhC,UAAU,GAAG/yD,IAAI,GAAG,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,CAAA;AACjE,GAAA;;EAMAkmB,gBAAgB,CAACz1B,IAAY,EAAE;AAC7B,IAAA,IACEA,IAAI,KAA0B,EAAA,IAC9B,IAAI,CAACktB,KAAK,CAACC,UAAU,CAAC,IAAI,CAAC7W,KAAK,CAAClI,GAAG,GAAG,CAAC,CAAC,OAA0B,EACnE;AACA,MAAA,OAAO,IAAI,CAACooB,QAAQ,CAAA,GAAA,EAAiB,CAAC,CAAC,CAAA;AACzC,KAAA;AAEA,IAAA,OAAO,KAAK,CAACf,gBAAgB,CAACz1B,IAAI,CAAC,CAAA;AACrC,GAAA;;EAMAioC,aAAa,CACXrzB,mBAA6C,EACb;AAChC,IAAA,OACE,IAAI,CAACutD,gBAAgB,CAAC,YAAY,CAAC,IACnC,KAAK,CAACl6B,aAAa,CAACrzB,mBAAmB,CAAC,CAAA;AAE5C,GAAA;EAEAkyB,eAAe,CAAC+C,OAAiB,EAAkC;AAKjE,IAAA,OACE,IAAI,CAACs4B,gBAAgB,CAAC,YAAY,CAAC,IAAI,KAAK,CAACr7B,eAAe,CAAC+C,OAAO,CAAC,CAAA;AAEzE,GAAA;EAEA2J,iBAAiB,CACf5uB,IAAY,EACZjQ,QAAkB,EAClB+oD,aAAsB,EACtBzoD,SAAkB,EAClB;IAIA,IAAI2P,IAAI,KAAK6G,SAAS,EAAE;MACtB,KAAK,CAAC+nB,iBAAiB,CAAC5uB,IAAI,EAAEjQ,QAAQ,EAAE+oD,aAAa,EAAEzoD,SAAS,CAAC,CAAA;AACnE,KAAA;AACF,GAAA;;AAMAw+B,EAAAA,gBAAgB,GAAgC;IAC9C,OAAO,IAAI,CAAC0uB,gBAAgB,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC1uB,gBAAgB,EAAE,CAAA;AACrE,GAAA;AAEA5+B,EAAAA,WAAW,CAAClT,IAAY,EAAE8vC,eAAwB,EAAE18B,OAAqB,EAAE;AACzE,IAAA,OACEpT,IAAI,KAAK,aAAa,IACtB,KAAK,CAACkT,WAAW,CAAClT,IAAI,EAAE8vC,eAAe,EAAE18B,OAAO,CAAC,CAAA;AAErD,GAAA;AAEAG,EAAAA,YAAY,CAAC3F,IAAY,EAAE4F,KAAc,EAAQ;AAC/C,IAAA,IACE5F,IAAI,IACJA,IAAI,CAAC5N,IAAI,KAAK,aAAa,IAC3B4N,IAAI,CAACuxB,YAAY,KAAK,YAAY,EAClC;MACAvxB,IAAI,CAACuxB,YAAY,GAAG,SAAS,CAAA;AAC/B,KAAC,MAAM;AACL,MAAA,KAAK,CAAC5rB,YAAY,CAAC3F,IAAI,EAAE4F,KAAK,CAAC,CAAA;AACjC,KAAA;AACF,GAAA;;AAMAotD,EAAAA,yBAAyB,CAAC/xC,EAAU,EAAEpiB,GAAW,EAAW;IAC1D,IAAI,KAAK,CAACm0D,yBAAyB,CAAC/xC,EAAE,EAAEpiB,GAAG,CAAC,EAAE;AAC5C,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;;AAIA,IAAA,MAAMimB,SAAS,GAAG,IAAI,CAACI,SAAS,EAAE,CAAA;AAClC,IAAA,IAAIJ,SAAS,CAAC1yB,IAAI,KAAA,GAAmB,EAAE;AACrC,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AAEA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA6gE,EAAAA,mBAAmB,CACjBjzD,IAA4C,EAC5CkzD,OAAgB,EAChB;IAEA,IAAIlzD,IAAI,CAACiJ,KAAK,IAAIjJ,IAAI,CAACiJ,KAAK,CAAC7W,IAAI,KAAK,aAAa,EAAE,OAAA;AACrD,IAAA,KAAK,CAAC6gE,mBAAmB,CAACjzD,IAAI,EAAEkzD,OAAO,CAAC,CAAA;AAC1C,GAAA;;AAGAp0B,EAAAA,wBAAwB,CACtB9+B,IAAmC,EACnC++B,IAAkB,EACa;AAC/B,IAAA,IACEA,IAAI,CAAC3sC,IAAI,KAAK,aAAa,IAC1B2sC,IAAI,CAACl9B,KAAK,IAAIk9B,IAAI,CAACl9B,KAAK,CAACY,aAAc,EACxC;AAEA,MAAA,OAAO,KAAK,CAACq8B,wBAAwB,CAAC9+B,IAAI,EAAE++B,IAAI,CAAC,CAAA;AACnD,KAAA;AAEA,IAAA,IAAI,IAAI,CAACvc,KAAK,CAAA,EAAA,CAAU,EAAE;MAExB,MAAMzgB,IAAwB,GAAG/B,IAAI,CAAA;MACrC+B,IAAI,CAACkH,KAAK,GAAG,IAAI,CAAC6pD,iBAAiB,CAAC/zB,IAAI,EAAE,YAAY,CAAC,CAAA;MACvD,IAAI,CAACjpB,IAAI,EAAE,CAAA;MACX/T,IAAI,CAACkB,IAAI,GAAG,KAAK,CAACkwD,mCAAmC,CAAC,KAAK,CAAC,CAAA;AAC5D,MAAA,OAAO,IAAI,CAAC1uD,UAAU,CAAC1C,IAAI,EAAE,kBAAkB,CAAC,CAAA;AAClD,KAAA;IAEA,IAAI,CAAC2sB,SAAS,EAAE,CAAA;AAChB1uB,IAAAA,IAAI,CAAChI,IAAI,GAAG+mC,IAAI,CAAC/mC,IAAI,CAAA;AACrB,IAAA,OAAO,IAAI,CAAC86D,iBAAiB,CAAC9yD,IAAI,EAAE,WAAW,CAAC,CAAA;AAClD,GAAA;AAEAozD,EAAAA,UAAU,CACRzwD,eAAyB,EACzB0wD,qBAA+B,EAC/BxwD,eAA2D,EACvB;AACpC,IAAA,OACE,IAAI,CAAC+vD,gBAAgB,CAAC,gBAAgB,CAAC,IACvC,KAAK,CAACQ,UAAU,CACdzwD,eAAe,EACf0wD,qBAAqB,EACrBxwD,eAAe,CAChB,CAAA;AAEL,GAAA;EAEAywD,eAAe,CACbC,SAAmB,EACgC;AACnD,IAAA,OACE,IAAI,CAACX,gBAAgB,CAAC,YAAY,CAAC,IAAI,KAAK,CAACU,eAAe,CAACC,SAAS,CAAC,CAAA;AAE3E,GAAA;AAEAxH,EAAAA,UAAU,CACR/rD,IAAO,EACPkhC,WAAiD,EACjDC,UAAoB,EACjB;AACH,IAAA,MAAM/uC,IAAI,GAAG8uC,WAAW,GAAG,kBAAkB,GAAG,iBAAiB,CAAA;IAEjE,IAAI,CAACprB,IAAI,EAAE,CAAA;AACX,IAAA,MAAM09C,SAAS,GAAG,IAAI,CAACzsD,KAAK,CAACiO,MAAM,CAAA;AAEnC,IAAA,MAAMpC,WAAW,GAAG,IAAI,CAACggD,gBAAgB,CAAC,YAAY,CAAC,CAAA;AACvD,IAAA,IAAIhgD,WAAW,EAAE;AACf,MAAA,IACE,IAAI,CAAC4P,KAAK,CAAA,EAAA,CAAa,IACvB,IAAI,CAACA,KAAK,CAAA,GAAA,CAAgB,IAC1B,IAAI,CAACA,KAAK,GAAW,EACrB;QACAxiB,IAAI,CAAC+D,EAAE,GAAG6O,WAAW,CAAA;AACvB,OAAC,MAAM,IAAIuuB,UAAU,IAAI,CAACD,WAAW,EAAE;QACrClhC,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAAA;QACd/D,IAAI,CAACiD,IAAI,GAAG,IAAI,CAAC6vD,iBAAiB,CAAClgD,WAAW,EAAE,WAAW,CAAC,CAAA;AAC5D,QAAA,OAAO,IAAI,CAACnO,UAAU,CAACzE,IAAI,EAAE5N,IAAI,CAAC,CAAA;AACpC,OAAC,MAAM;AACL,QAAA,MAAM,IAAI,CAAC6T,KAAK,CAACusD,iBAAiB,CAACC,mBAAmB,EAAE;AACtDvsD,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAC,MAAM;MACL,IAAI,CAAC67B,YAAY,CAACjhC,IAAI,EAAEkhC,WAAW,EAAEC,UAAU,CAAC,CAAA;AAClD,KAAA;AAEA,IAAA,KAAK,CAACqB,eAAe,CAACxiC,IAAI,CAAC,CAAA;IAC3BA,IAAI,CAACiD,IAAI,GACP,IAAI,CAAC2vD,gBAAgB,CAAC,WAAW,CAAC,IAClC,KAAK,CAACa,cAAc,CAAC,CAAC,CAACzzD,IAAI,CAACC,UAAU,EAAEuzD,SAAS,CAAC,CAAA;AACpD,IAAA,OAAO,IAAI,CAAC/uD,UAAU,CAACzE,IAAI,EAAE5N,IAAI,CAAC,CAAA;AACpC,GAAA;AAEAwU,EAAAA,WAAW,CAAC5G,IAAY,EAAE6G,UAAgC,EAAe;AACvE,IAAA,MAAM+L,WAAW,GAAG,IAAI,CAACggD,gBAAgB,CAAC,YAAY,CAAC,CAAA;IACvD,IAAI,CAAChgD,WAAW,EAAE,OAAO,KAAK,CAAChM,WAAW,CAAC5G,IAAI,EAAE6G,UAAU,CAAC,CAAA;IAE5D,IAAI,CAAC,IAAI,CAACinB,YAAY,CAAA,EAAA,CAAU,IAAI,CAAC,IAAI,CAACtL,KAAK,CAAA,EAAA,CAAU,EAAE;MAEzDxiB,IAAI,CAACkH,UAAU,GAAG,EAAE,CAAA;MACpBlH,IAAI,CAACuG,MAAM,GAAG,IAAI,CAAA;MAClBvG,IAAI,CAACmH,WAAW,GAAG,IAAI,CAAC2rD,iBAAiB,CAAClgD,WAAW,EAAE,aAAa,CAAC,CAAA;AACrE,MAAA,OAAO,IAAI,CAACnO,UAAU,CAACzE,IAAI,EAAE,wBAAwB,CAAC,CAAA;AACxD,KAAA;;AAGA,IAAA,IAAI,CAAC+mB,YAAY,CAAC,mBAAmB,CAAC,CAAA;AACtC,IAAA,MAAMqc,SAAS,GAAG,IAAI,CAAC7+B,SAAS,EAAE,CAAA;IAClC6+B,SAAS,CAACn8B,QAAQ,GAAG2L,WAAW,CAAA;AAChC5S,IAAAA,IAAI,CAACkH,UAAU,GAAG,CAAC,IAAI,CAACzC,UAAU,CAAC2+B,SAAS,EAAE,wBAAwB,CAAC,CAAC,CAAA;AAExE,IAAA,OAAO,KAAK,CAACx8B,WAAW,CAAC5G,IAAI,EAAE6G,UAAU,CAAC,CAAA;AAC5C,GAAA;AAEAo4B,EAAAA,wBAAwB,GAAY;AAClC,IAAA,IAAI,IAAI,CAACzc,KAAK,CAAA,EAAA,CAAa,EAAE;AAC3B,MAAA,MAAM1M,IAAI,GAAG,IAAI,CAACuP,cAAc,EAAE,CAAA;MAClC,IAAI,IAAI,CAAC0I,oBAAoB,CAACjY,IAAI,EAAE,MAAM,CAAC,EAAE;AAC3C,QAAA,IACE,IAAI,CAAC6H,KAAK,CAAC+1C,UAAU,CACnB9/C,cAAc,CAAgB,GAAA,CAAA,EAC9B,IAAI,CAAC0R,mBAAmB,CAACxP,IAAI,GAAG,CAAC,CAAC,CACnC,EACD;AACA,UAAA,OAAO,IAAI,CAAA;AACb,SAAA;AACF,OAAA;AACF,KAAA;IACA,OAAO,KAAK,CAACmpB,wBAAwB,EAAE,CAAA;AACzC,GAAA;EAEA00B,gCAAgC,CAAC3zD,IAAY,EAAW;IACtD,IAAIA,IAAI,CAACkH,UAAU,IAAIlH,IAAI,CAACkH,UAAU,CAACjY,MAAM,GAAG,CAAC,EAAE;AAEjD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,KAAK,CAAC0kE,gCAAgC,CAAC3zD,IAAI,CAAC,CAAA;AACrD,GAAA;EAEA4zD,WAAW,CAAC5zD,IAA8B,EAAQ;IAChD,MAAM;AAAEkH,MAAAA,UAAAA;AAAW,KAAC,GAAGlH,IAAI,CAAA;AAC3B,IAAA,IAAIkH,UAAU,IAAA,IAAA,IAAVA,UAAU,CAAEjY,MAAM,EAAE;AACtB+Q,MAAAA,IAAI,CAACkH,UAAU,GAAGA,UAAU,CAACnX,MAAM;MAEjCiQ,IAAI,IAAIA,IAAI,CAACiH,QAAQ,CAAC7U,IAAI,KAAK,aAAa,CAC7C,CAAA;AACH,KAAA;AACA,IAAA,KAAK,CAACwhE,WAAW,CAAC5zD,IAAI,CAAC,CAAA;IACvBA,IAAI,CAACkH,UAAU,GAAGA,UAAU,CAAA;AAC9B,GAAA;EAEA0xB,WAAW,CACT54B,IAAiC,EACkB;AACnD,IAAA,MAAM4S,WAAW,GAAG,IAAI,CAACggD,gBAAgB,CAAC,YAAY,CAAC,CAAA;IACvD,IAAI,CAAChgD,WAAW,EAAE,OAAO,KAAK,CAACgmB,WAAW,CAAC54B,IAAI,CAAC,CAAA;IAEhDA,IAAI,CAACkH,UAAU,GAAG,EAAE,CAAA;IAEpB,IAAI,CAAC,IAAI,CAAC4mB,YAAY,CAAA,EAAA,CAAU,IAAI,CAAC,IAAI,CAACtL,KAAK,CAAA,EAAA,CAAU,EAAE;MAEzDxiB,IAAI,CAACuG,MAAM,GAAG,IAAI,CAACusD,iBAAiB,CAAClgD,WAAW,EAAE,eAAe,CAAC,CAAA;MAClE,IAAI,CAAC8b,SAAS,EAAE,CAAA;AAChB,MAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,KAAA;;AAGA,IAAA,MAAMojC,SAAS,GACb,IAAI,CAACx7B,eAAe,CAA2BgL,WAAW,CAAC,CAAA;IAC7DwwB,SAAS,CAACC,KAAK,GAAGzwB,WAAW,CAAA;AAC7B5S,IAAAA,IAAI,CAACkH,UAAU,CAACxD,IAAI,CAClB,IAAI,CAACe,UAAU,CAAC2+B,SAAS,EAAE,wBAAwB,CAAC,CACrD,CAAA;AAED,IAAA,IAAI,IAAI,CAACre,GAAG,CAAA,EAAA,CAAU,EAAE;AAEtB,MAAA,MAAM8uC,aAAa,GAAG,IAAI,CAACC,6BAA6B,CAAC9zD,IAAI,CAAC,CAAA;;MAG9D,IAAI,CAAC6zD,aAAa,EAAE,IAAI,CAACE,0BAA0B,CAAC/zD,IAAI,CAAC,CAAA;AAC3D,KAAA;IAEA,IAAI,CAACquB,gBAAgB,CAAU,EAAA,CAAA,CAAA;AAC/BruB,IAAAA,IAAI,CAACuG,MAAM,GAAG,IAAI,CAACytD,iBAAiB,EAAE,CAAA;IACtC,IAAI,CAACtlC,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;AAEAg0D,EAAAA,iBAAiB,GAAsC;;IAGrD,OACE,IAAI,CAACpB,gBAAgB,CAAC,eAAe,CAAC,IAAI,KAAK,CAACoB,iBAAiB,EAAE,CAAA;AAEvE,GAAA;;AAGAnB,EAAAA,aAAa,GAAS;AACpB,IAAA,IAAI,IAAI,CAAC9rD,KAAK,CAACzY,KAAK,GAAG,IAAI,CAACyY,KAAK,CAACoB,aAAa,CAACha,KAAK,EAAE;AACrD,MAAA,IAAI,CAAC8X,KAAK,CAACusD,iBAAiB,CAACE,eAAe,EAAE;AAC5CxsD,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACoB,aAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AACF,CAAC;;ACpXH,kBAAA,CAAgBlI,UAAyB,IACvC,MAAMg0D,gBAAgB,SAASh0D,UAAU,CAAmB;AAC1Di0D,EAAAA,gBAAgB,GAAiB;AAC/B,IAAA,IAAI,IAAI,CAAC1xC,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,MAAA,MAAM2xC,mBAAmB,GAAG,IAAI,CAACptD,KAAK,CAAC3B,QAAQ,CAAA;AAE/C,MAAA,MAAMpF,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAgB,CAAA;MAC3C,IAAI,CAACuR,IAAI,EAAE,CAAA;MACX,IAAIjD,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAAE;AACtC,QAAA,MAAM4F,IAAI,GAAG,IAAI,CAACo8D,mBAAmB,EAAE,CAAA;QACvC,MAAMC,UAAU,GAAG,IAAI,CAACx2B,gBAAgB,CAAC79B,IAAI,EAAEhI,IAAI,CAAC,CAAA;QAEpDq8D,UAAU,CAACjiE,IAAI,GAAG,uBAAuB,CAAA;AACzC,QAAA,IAAI,IAAI,CAACowB,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,UAAA,OAAO6xC,UAAU,CAAA;AACnB,SAAA;AACF,OAAA;AACA,MAAA,IAAI,CAACr9D,UAAU,CAACm9D,mBAAmB,CAAC,CAAA;AACtC,KAAA;AACF,GAAA;;EAMAz7B,aAAa,CAACrzB,mBAA6C,EAAgB;IACzE,OACE,IAAI,CAAC6uD,gBAAgB,EAAE,IAAI,KAAK,CAACx7B,aAAa,CAACrzB,mBAAmB,CAAC,CAAA;AAEvE,GAAA;AACF,CAAC;;ACfI,SAASoB,SAAS,CACvBiV,OAAmB,EACnB44C,cAA4B,EACnB;AAIT,EAAA,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GACnC,OAAOF,cAAc,KAAK,QAAQ,GAAG,CAACA,cAAc,EAAE,EAAE,CAAC,GAAGA,cAAc,CAAA;AAE5E,EAAA,MAAMG,YAAY,GAAG5kE,MAAM,CAACd,IAAI,CAACylE,eAAe,CAAC,CAAA;AAEjD,EAAA,MAAME,sBAAsB,GAAGD,YAAY,CAACxlE,MAAM,KAAK,CAAC,CAAA;AAExD,EAAA,OAAOysB,OAAO,CAAC4O,IAAI,CAACqqC,CAAC,IAAI;AACvB,IAAA,IAAI,OAAOA,CAAC,KAAK,QAAQ,EAAE;AACzB,MAAA,OAAOD,sBAAsB,IAAIC,CAAC,KAAKJ,YAAY,CAAA;AACrD,KAAC,MAAM;AACL,MAAA,MAAM,CAAC54C,UAAU,EAAEC,aAAa,CAAC,GAAG+4C,CAAC,CAAA;MACrC,IAAIh5C,UAAU,KAAK44C,YAAY,EAAE;AAC/B,QAAA,OAAO,KAAK,CAAA;AACd,OAAA;AACA,MAAA,KAAK,MAAMllE,GAAG,IAAIolE,YAAY,EAAE;QAE9B,IAAI74C,aAAa,CAACvsB,GAAG,CAAC,KAAKmlE,eAAe,CAACnlE,GAAG,CAAC,EAAE;AAC/C,UAAA,OAAO,KAAK,CAAA;AACd,SAAA;AACF,OAAA;AACA,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACF,GAAC,CAAC,CAAA;AACJ,CAAA;AAEO,SAASuU,eAAe,CAG7B8X,OAAmB,EAAE1jB,IAAgB,EAAE48D,MAAkB,EAAE;AAC3D,EAAA,MAAM94C,MAAM,GAAGJ,OAAO,CAACm5C,IAAI,CAAC/4C,MAAM,IAAI;AACpC,IAAA,IAAI7c,KAAK,CAACC,OAAO,CAAC4c,MAAM,CAAC,EAAE;AACzB,MAAA,OAAOA,MAAM,CAAC,CAAC,CAAC,KAAK9jB,IAAI,CAAA;AAC3B,KAAC,MAAM;MACL,OAAO8jB,MAAM,KAAK9jB,IAAI,CAAA;AACxB,KAAA;AACF,GAAC,CAAC,CAAA;AAEF,EAAA,IAAI8jB,MAAM,IAAI7c,KAAK,CAACC,OAAO,CAAC4c,MAAM,CAAC,IAAIA,MAAM,CAAC7sB,MAAM,GAAG,CAAC,EAAE;AACxD,IAAA,OAAQ6sB,MAAM,CAAC,CAAC,CAAC,CAA+B84C,MAAM,CAAC,CAAA;AACzD,GAAA;AAEA,EAAA,OAAO,IAAI,CAAA;AACb,CAAA;AAEA,MAAME,kBAAkB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AACjE,MAAMC,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAChD,MAAMC,6BAA6B,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAE9C,SAASC,eAAe,CAACv5C,OAAmB,EAAE;AACnD,EAAA,IAAIjV,SAAS,CAACiV,OAAO,EAAE,YAAY,CAAC,EAAE;AACpC,IAAA,IAAIjV,SAAS,CAACiV,OAAO,EAAE,mBAAmB,CAAC,EAAE;AAC3C,MAAA,MAAM,IAAIgb,KAAK,CACb,iEAAiE,CAClE,CAAA;AACH,KAAA;IAEA,MAAMw+B,sBAAsB,GAAGtxD,eAAe,CAC5C8X,OAAO,EACP,YAAY,EACZ,wBAAwB,CACzB,CAAA;IACD,IACEw5C,sBAAsB,IAAI,IAAI,IAC9B,OAAOA,sBAAsB,KAAK,SAAS,EAC3C;AACA,MAAA,MAAM,IAAIx+B,KAAK,CAAC,6CAA6C,CAAC,CAAA;AAChE,KAAA;IAEA,MAAMy+B,sBAAsB,GAAGvxD,eAAe,CAC5C8X,OAAO,EACP,YAAY,EACZ,wBAAwB,CACzB,CAAA;IACD,IACEy5C,sBAAsB,IAAI,IAAI,IAC9B,OAAOA,sBAAsB,KAAK,SAAS,EAC3C;AACA,MAAA,MAAM,IAAIz+B,KAAK,CAAC,6CAA6C,CAAC,CAAA;AAChE,KAAA;AACF,GAAA;AAEA,EAAA,IAAIjwB,SAAS,CAACiV,OAAO,EAAE,MAAM,CAAC,IAAIjV,SAAS,CAACiV,OAAO,EAAE,YAAY,CAAC,EAAE;AAClE,IAAA,MAAM,IAAIgb,KAAK,CAAC,6CAA6C,CAAC,CAAA;AAChE,GAAA;AAEA,EAAA,IAAIjwB,SAAS,CAACiV,OAAO,EAAE,cAAc,CAAC,IAAIjV,SAAS,CAACiV,OAAO,EAAE,aAAa,CAAC,EAAE;AAC3E,IAAA,MAAM,IAAIgb,KAAK,CAAC,sDAAsD,CAAC,CAAA;AACzE,GAAA;AAEA,EAAA,IAAIjwB,SAAS,CAACiV,OAAO,EAAE,kBAAkB,CAAC,EAAE;IAC1C,MAAM+L,QAAQ,GAAG7jB,eAAe,CAAC8X,OAAO,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAA;AAEzE,IAAA,IAAI,CAACo5C,kBAAkB,CAACjsC,QAAQ,CAACpB,QAAQ,CAAC,EAAE;AAC1C,MAAA,MAAM2tC,YAAY,GAAGN,kBAAkB,CAAChlE,GAAG,CAAC6kE,CAAC,IAAK,CAAGA,CAAAA,EAAAA,CAAE,GAAE,CAAC,CAACx8D,IAAI,CAAC,IAAI,CAAC,CAAA;AACrE,MAAA,MAAM,IAAIu+B,KAAK,CACZ,CAA4E0+B,0EAAAA,EAAAA,YAAa,GAAE,CAC7F,CAAA;AACH,KAAA;IAEA,MAAMC,iBAAiB,GAAG5uD,SAAS,CAACiV,OAAO,EAAE,CAC3C,gBAAgB,EAChB;AAAE45C,MAAAA,UAAU,EAAE,MAAA;AAAO,KAAC,CACvB,CAAC,CAAA;IAEF,IAAI7tC,QAAQ,KAAK,MAAM,EAAE;AACvB,MAAA,IAAIhhB,SAAS,CAACiV,OAAO,EAAE,cAAc,CAAC,EAAE;AACtC,QAAA,MAAM,IAAIgb,KAAK,CACb,0DAA0D,CAC3D,CAAA;AACH,OAAA;AAEA,MAAA,IAAIjwB,SAAS,CAACiV,OAAO,EAAE,aAAa,CAAC,EAAE;AACrC,QAAA,MAAM,IAAIgb,KAAK,CACb,yDAAyD,CAC1D,CAAA;AACH,OAAA;MAEA,MAAMhP,UAAU,GAAG9jB,eAAe,CAChC8X,OAAO,EACP,kBAAkB,EAClB,YAAY,CACb,CAAA;AAED,MAAA,IAAI,CAACq5C,YAAY,CAAClsC,QAAQ,CAACnB,UAAU,CAAC,EAAE;AACtC,QAAA,MAAM6tC,SAAS,GAAGR,YAAY,CAACjlE,GAAG,CAACi5D,CAAC,IAAK,CAAGA,CAAAA,EAAAA,CAAE,GAAE,CAAC,CAAC5wD,IAAI,CAAC,IAAI,CAAC,CAAA;AAE5D,QAAA,MAAM,IAAIu+B,KAAK,CACZ,CAAgH6+B,8GAAAA,EAAAA,SAAU,GAAE,CAC9H,CAAA;AACH,OAAA;AAEA,MAAA,IAAI7tC,UAAU,KAAK,GAAG,IAAI2tC,iBAAiB,EAAE;AAC3C,QAAA,MAAM,IAAI3+B,KAAK,CACb,wIAAwI,CACzI,CAAA;AACH,OAAA;AACF,KAAC,MAAM,IAAIjP,QAAQ,KAAK,OAAO,IAAI4tC,iBAAiB,EAAE;AACpD,MAAA,MAAM,IAAI3+B,KAAK,CACb,wHAAwH,CACzH,CAAA;AACH,KAAA;AACF,GAAA;AAEA,EAAA,IAAIjwB,SAAS,CAACiV,OAAO,EAAE,kBAAkB,CAAC,EAAE;AAKnC,IAAA;AACL,MAAA,IAAIjV,SAAS,CAACiV,OAAO,EAAE,kBAAkB,CAAC,EAAE;AAC1C,QAAA,MAAM,IAAIgb,KAAK,CACb,+DAA+D,CAChE,CAAA;AACH,OAAA;MACA,MAAM8+B,mCAAmC,GAAG5xD,eAAe,CACzD8X,OAAO,EACP,kBAAkB,EAClB,SAAS,CACV,CAAA;MACD,IAAI85C,mCAAmC,KAAK,UAAU,EAAE;QACtD,MAAM,IAAI9+B,KAAK,CACb,4DAA4D,GAC1D,wDAAwD,GACxD,sCAAsC,CACzC,CAAA;AACH,OAAA;AACF,KAAA;AACF,GAAA;AAEA,EAAA,IACEjwB,SAAS,CAACiV,OAAO,EAAE,gBAAgB,CAAC,IACpC9X,eAAe,CAAC8X,OAAO,EAAE,gBAAgB,EAAE,YAAY,CAAC,IAAI,IAAI,IAChE,CAACs5C,6BAA6B,CAACnsC,QAAQ,CACrCjlB,eAAe,CAAC8X,OAAO,EAAE,gBAAgB,EAAE,YAAY,CAAC,CACzD,EACD;IACA,MAAM,IAAIgb,KAAK,CACb,yEAAyE,GACvEs+B,6BAA6B,CAACllE,GAAG,CAAC6kE,CAAC,IAAK,CAAGA,CAAAA,EAAAA,CAAE,GAAE,CAAC,CAACx8D,IAAI,CAAC,IAAI,CAAC,CAC9D,CAAA;AACH,GAAA;AAEA,EAAA,IACEsO,SAAS,CAACiV,OAAO,EAAE,oBAAoB,CAAC,IACxC,CAACjV,SAAS,CAACiV,OAAO,EAAE,eAAe,CAAC,EACpC;AACA,IAAA,MAAMwO,KAAK,GAAG,IAAIwM,KAAK,CACrB,8FAA8F,CAC/F,CAAA;IAEDxM,KAAK,CAACurC,cAAc,GAAG,eAAe,CAAA;AACtC,IAAA,MAAMvrC,KAAK,CAAA;AACb,GAAA;AACF,CAAA;;AAYO,MAAMwrC,YAAY,GAAG;EAC1BC,MAAM;EACNjxB,GAAG;EACHkxB,IAAI;EACJC,UAAU;EACVC,WAAW;AACXC,EAAAA,YAAAA;AACF,CAAC,CAAA;AAEM,MAAMC,gBAAgB,GAAGnmE,MAAM,CAACd,IAAI,CAAC2mE,YAAY,CAEvD;;AC1NM,MAAMO,cAAuB,GAAG;AAErC71C,EAAAA,UAAU,EAAE,QAAQ;AAEpB81C,EAAAA,cAAc,EAAEh6C,SAAS;AAGzBoE,EAAAA,WAAW,EAAE,CAAC;AAGdD,EAAAA,SAAS,EAAE,CAAC;AAGZ81C,EAAAA,yBAAyB,EAAE,KAAK;AAGhCC,EAAAA,0BAA0B,EAAE,KAAK;AAGjCC,EAAAA,2BAA2B,EAAE,KAAK;AAElCC,EAAAA,uBAAuB,EAAE,KAAK;AAE9BC,EAAAA,sBAAsB,EAAE,KAAK;AAE7B76C,EAAAA,OAAO,EAAE,EAAE;AAEXyE,EAAAA,UAAU,EAAE,IAAI;AAShB0Q,EAAAA,MAAM,EAAE,KAAK;AAEbvwB,EAAAA,MAAM,EAAE,KAAK;AAGbk2D,EAAAA,8BAA8B,EAAE,KAAK;AAGrClyC,EAAAA,aAAa,EAAE,KAAK;AAKpBkC,EAAAA,aAAa,EAAE,IAAA;AACjB,CAAC,CAAA;;AAIM,SAASiwC,UAAU,CAACC,IAAqB,EAAW;EACzD,MAAMr2D,OAAY,GAAG,EAAE,CAAA;EACvB,KAAK,MAAMhR,GAAG,IAAIQ,MAAM,CAACd,IAAI,CAACknE,cAAc,CAAC,EAAE;IAE7C51D,OAAO,CAAChR,GAAG,CAAC,GAAGqnE,IAAI,IAAIA,IAAI,CAACrnE,GAAG,CAAC,IAAI,IAAI,GAAGqnE,IAAI,CAACrnE,GAAG,CAAC,GAAG4mE,cAAc,CAAC5mE,GAAG,CAAC,CAAA;AAC5E,GAAA;AACA,EAAA,OAAOgR,OAAO,CAAA;AAChB;;AClDA,MAAM07C,MAAM,GAAG,CAAe3sD,MAAS,EAAEC,GAAY,KACnDQ,MAAM,CAACmsD,cAAc,CAACzX,IAAI,CAACn1C,MAAM,EAAEC,GAAG,CAAC,IAAID,MAAM,CAACC,GAAG,CAAC,CAAA;AAExD,MAAMsnE,6BAA6B,GAAI32D,IAAU,IAAW;AAC1D,EAAA,OAAOA,IAAI,CAAC5N,IAAI,KAAK,yBAAyB,GAC1CukE,6BAA6B,CAAC32D,IAAI,CAAC2B,UAAU,CAAC,GAC9C3B,IAAI,CAAA;AACV,CAAC,CAAA;AAEc,MAAe42D,UAAU,SAASnlC,SAAS,CAAC;;AAqDzD9rB,EAAAA,YAAY,CAAC3F,IAAU,EAAE4F,KAAc,GAAG,KAAK,EAAQ;AAAA,IAAA,IAAA,WAAA,EAAA,YAAA,CAAA;IACrD,IAAInD,aAAa,GAAGyZ,SAAS,CAAA;AAC7B,IAAA,IAAIlc,IAAI,CAAC5N,IAAI,KAAK,yBAAyB,IAAA,CAAA,WAAA,GAAI4N,IAAI,CAAC6B,KAAK,KAAA,IAAA,IAAV,WAAYY,CAAAA,aAAa,EAAE;AACxEA,MAAAA,aAAa,GAAGk0D,6BAA6B,CAAC32D,IAAI,CAAC,CAAA;AACnD,MAAA,IAAI4F,KAAK,EAAE;AAKT,QAAA,IAAInD,aAAa,CAACrQ,IAAI,KAAK,YAAY,EAAE;UACvC,IAAI,CAACm+B,eAAe,CAAC/D,gCAAgC,CACnD/sB,MAAM,CAACxI,8BAA8B,EACrC;AAAEiP,YAAAA,EAAE,EAAElG,IAAAA;AAAK,WAAC,CACb,CAAA;AACH,SAAC,MAAM,IAAIyC,aAAa,CAACrQ,IAAI,KAAK,kBAAkB,EAAE;AAIpD,UAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAACxI,8BAA8B,EAAE;AAAEiP,YAAAA,EAAE,EAAElG,IAAAA;AAAK,WAAC,CAAC,CAAA;AACjE,SAAA;AACF,OAAC,MAAM;AACL,QAAA,IAAI,CAACiG,KAAK,CAACxG,MAAM,CAACxI,8BAA8B,EAAE;AAAEiP,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AACjE,OAAA;AACF,KAAA;IAEA,QAAQA,IAAI,CAAC5N,IAAI;AACf,MAAA,KAAK,YAAY,CAAA;AACjB,MAAA,KAAK,eAAe,CAAA;AACpB,MAAA,KAAK,cAAc,CAAA;AACnB,MAAA,KAAK,mBAAmB,CAAA;AACxB,MAAA,KAAK,aAAa;AAChB,QAAA,MAAA;AAEF,MAAA,KAAK,kBAAkB;QACrB4N,IAAI,CAAC5N,IAAI,GAAG,eAAe,CAAA;QAC3B,KACE,IAAI3C,CAAC,GAAG,CAAC,EAAER,MAAM,GAAG+Q,IAAI,CAACrQ,UAAU,CAACV,MAAM,EAAED,IAAI,GAAGC,MAAM,GAAG,CAAC,EAC7DQ,CAAC,GAAGR,MAAM,EACVQ,CAAC,EAAE,EACH;AAAA,UAAA,IAAA,YAAA,CAAA;AACA,UAAA,MAAMsV,IAAI,GAAG/E,IAAI,CAACrQ,UAAU,CAACF,CAAC,CAAC,CAAA;AAC/B,UAAA,MAAMuW,MAAM,GAAGvW,CAAC,KAAKT,IAAI,CAAA;UACzB,IAAI,CAAC+W,gCAAgC,CAAChB,IAAI,EAAEiB,MAAM,EAAEJ,KAAK,CAAC,CAAA;AAE1D,UAAA,IACEI,MAAM,IACNjB,IAAI,CAAC3S,IAAI,KAAK,aAAa,IAC3B4N,CAAAA,YAAAA,GAAAA,IAAI,CAAC6B,KAAK,KAAV,IAAA,IAAA,YAAA,CAAYs+B,gBAAgB,EAC5B;AACA,YAAA,IAAI,CAACl6B,KAAK,CAACxG,MAAM,CAACzF,iBAAiB,EAAE;AACnCkM,cAAAA,EAAE,EAAElG,IAAI,CAAC6B,KAAK,CAACs+B,gBAAAA;AACjB,aAAC,CAAC,CAAA;AACJ,WAAA;AACF,SAAA;AACA,QAAA,MAAA;AAEF,MAAA,KAAK,gBAAgB;AAAE,QAAA;UACrB,MAAM;YAAE9wC,GAAG;AAAEE,YAAAA,KAAAA;AAAM,WAAC,GAAGyQ,IAAI,CAAA;AAC3B,UAAA,IAAI,IAAI,CAACgE,aAAa,CAAC3U,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAACwW,UAAU,CAACC,cAAc,CAC5B,IAAI,CAAChC,gBAAgB,CAACzU,GAAG,CAAC,EAC1BA,GAAG,CAACmP,GAAG,CAAClQ,KAAK,CACd,CAAA;AACH,WAAA;AACA,UAAA,IAAI,CAACqX,YAAY,CAACpW,KAAK,EAAEqW,KAAK,CAAC,CAAA;AAC/B,UAAA,MAAA;AACF,SAAA;AAEA,MAAA,KAAK,eAAe;AAAE,QAAA;AACpB,UAAA,MAAM,IAAI8wB,KAAK,CACb,iEAAiE,GAC/D,+DAA+D,CAClE,CAAA;AACH,SAAA;AAEA,MAAA,KAAK,iBAAiB;QACpB12B,IAAI,CAAC5N,IAAI,GAAG,cAAc,CAAA;AAC1B,QAAA,IAAI,CAAC8tC,gBAAgB,CACnBlgC,IAAI,CAACyc,QAAQ,EAAA,CAAA,YAAA,GACbzc,IAAI,CAAC6B,KAAK,KAAV,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAYs+B,gBAAgB,EAC5Bv6B,KAAK,CACN,CAAA;AACD,QAAA,MAAA;AAEF,MAAA,KAAK,sBAAsB;AACzB,QAAA,IAAI5F,IAAI,CAAC6nD,QAAQ,KAAK,GAAG,EAAE;AACzB,UAAA,IAAI,CAAC5hD,KAAK,CAACxG,MAAM,CAAC7H,qBAAqB,EAAE;AAAEsO,YAAAA,EAAE,EAAElG,IAAI,CAAC0hC,IAAI,CAACljC,GAAG,CAACjQ,GAAAA;AAAI,WAAC,CAAC,CAAA;AACrE,SAAA;QAEAyR,IAAI,CAAC5N,IAAI,GAAG,mBAAmB,CAAA;QAC/B,OAAO4N,IAAI,CAAC6nD,QAAQ,CAAA;QACpB,IAAI,CAACliD,YAAY,CAAC3F,IAAI,CAAC0hC,IAAI,EAAE97B,KAAK,CAAC,CAAA;AACnC,QAAA,MAAA;AAEF,MAAA,KAAK,yBAAyB;AAE5B,QAAA,IAAI,CAACD,YAAY,CAAClD,aAAa,EAAEmD,KAAK,CAAC,CAAA;AACvC,QAAA,MAAA;AAEM,KAAA;AAIZ,GAAA;;AAEAG,EAAAA,gCAAgC,CAC9BhB,IAAU,EACViB,MAAe,EACfJ,KAAc,EACd;AACA,IAAA,IAAIb,IAAI,CAAC3S,IAAI,KAAK,cAAc,EAAE;MAChC,IAAI,CAAC6T,KAAK,CACRlB,IAAI,CAACvS,IAAI,KAAK,KAAK,IAAIuS,IAAI,CAACvS,IAAI,KAAK,KAAK,GACtCiN,MAAM,CAACjG,kBAAkB,GACzBiG,MAAM,CAAChG,gBAAgB,EAC3B;QAAEyM,EAAE,EAAEnB,IAAI,CAAC1V,GAAAA;AAAI,OAAC,CACjB,CAAA;AACH,KAAC,MAAM,IAAI0V,IAAI,CAAC3S,IAAI,KAAK,eAAe,EAAE;MACxC2S,IAAI,CAAC3S,IAAI,GAAG,aAAa,CAAA;AACzB,MAAA,MAAMykE,GAAG,GAAG9xD,IAAI,CAAChG,QAAQ,CAAA;AACzB,MAAA,IAAI,CAACkxD,qBAAqB,CAAC4G,GAAG,EAAqB,KAAK,CAAC,CAAA;AACzD,MAAA,IAAI,CAAClxD,YAAY,CAACkxD,GAAG,EAAEjxD,KAAK,CAAC,CAAA;MAE7B,IAAI,CAACI,MAAM,EAAE;AACX,QAAA,IAAI,CAACC,KAAK,CAACxG,MAAM,CAACzF,iBAAiB,EAAE;AAAEkM,UAAAA,EAAE,EAAEnB,IAAAA;AAAK,SAAC,CAAC,CAAA;AACpD,OAAA;AACF,KAAC,MAAM;AACL,MAAA,IAAI,CAACY,YAAY,CAACZ,IAAI,EAAEa,KAAK,CAAC,CAAA;AAChC,KAAA;AACF,GAAA;;AAIAs6B,EAAAA,gBAAgB,CACdyB,QAAsB,EACtBxB,gBAA6C,EAC7Cv6B,KAAc,EACR;AACN,IAAA,MAAMrX,GAAG,GAAGozC,QAAQ,CAAC1yC,MAAM,GAAG,CAAC,CAAA;IAE/B,KAAK,IAAIQ,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIlB,GAAG,EAAEkB,CAAC,EAAE,EAAE;AAC7B,MAAA,MAAMq9D,GAAG,GAAGnrB,QAAQ,CAAClyC,CAAC,CAAC,CAAA;MACvB,IAAI,CAACq9D,GAAG,EAAE,SAAA;AAEV,MAAA,IAAIA,GAAG,CAAC16D,IAAI,KAAK,eAAe,EAAE;QAChC06D,GAAG,CAAC16D,IAAI,GAAG,aAAa,CAAA;AACxB,QAAA,MAAMykE,GAAG,GAAG/J,GAAG,CAAC/tD,QAAQ,CAAA;AACxB,QAAA,IAAI,CAACkxD,qBAAqB,CAAC4G,GAAG,EAAqB,IAAI,CAAC,CAAA;AACxD,QAAA,IAAI,CAAClxD,YAAY,CAACkxD,GAAG,EAAEjxD,KAAK,CAAC,CAAA;AAC/B,OAAC,MAAM;AACL,QAAA,IAAI,CAACD,YAAY,CAACmnD,GAAG,EAAElnD,KAAK,CAAC,CAAA;AAC/B,OAAA;AAEA,MAAA,IAAIknD,GAAG,CAAC16D,IAAI,KAAK,aAAa,EAAE;QAC9B,IAAI3C,CAAC,GAAGlB,GAAG,EAAE;AACX,UAAA,IAAI,CAAC0X,KAAK,CAACxG,MAAM,CAACzF,iBAAiB,EAAE;AAAEkM,YAAAA,EAAE,EAAE4mD,GAAAA;AAAI,WAAC,CAAC,CAAA;SAClD,MAAM,IAAI3sB,gBAAgB,EAAE;AAC3B,UAAA,IAAI,CAACl6B,KAAK,CAACxG,MAAM,CAACzF,iBAAiB,EAAE;AAAEkM,YAAAA,EAAE,EAAEi6B,gBAAAA;AAAiB,WAAC,CAAC,CAAA;AAChE,SAAA;AACF,OAAA;AACF,KAAA;AACF,GAAA;AAEA16B,EAAAA,YAAY,CAACzF,IAAU,EAAE0F,SAAmB,EAAW;IACrD,QAAQ1F,IAAI,CAAC5N,IAAI;AACf,MAAA,KAAK,YAAY,CAAA;AACjB,MAAA,KAAK,eAAe,CAAA;AACpB,MAAA,KAAK,cAAc,CAAA;AACnB,MAAA,KAAK,mBAAmB,CAAA;AACxB,MAAA,KAAK,aAAa;AAChB,QAAA,OAAO,IAAI,CAAA;AAEb,MAAA,KAAK,kBAAkB;AAAE,QAAA;UACvB,MAAMpD,IAAI,GAAGgR,IAAI,CAACrQ,UAAU,CAACV,MAAM,GAAG,CAAC,CAAA;UACvC,OAAQ+Q,IAAI,CAACrQ,UAAU,CAAoCswC,KAAK,CAC9D,CAACl7B,IAAI,EAAEtV,CAAC,KAAK;YACX,OACEsV,IAAI,CAAC3S,IAAI,KAAK,cAAc,KAC3B3C,CAAC,KAAKT,IAAI,IAAI+V,IAAI,CAAC3S,IAAI,KAAK,eAAe,CAAC,IAC7C,IAAI,CAACqT,YAAY,CAACV,IAAI,CAAC,CAAA;AAE3B,WAAC,CACF,CAAA;AACH,SAAA;AAEA,MAAA,KAAK,gBAAgB;AACnB,QAAA,OAAO,IAAI,CAACU,YAAY,CAACzF,IAAI,CAACzQ,KAAK,CAAC,CAAA;AAEtC,MAAA,KAAK,eAAe;AAClB,QAAA,OAAO,IAAI,CAACkW,YAAY,CAACzF,IAAI,CAACjB,QAAQ,CAAC,CAAA;AAEzC,MAAA,KAAK,iBAAiB;AACpB,QAAA,OAAQiB,IAAI,CAAqByc,QAAQ,CAACwjB,KAAK,CAC7CqiB,OAAO,IAAIA,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC78C,YAAY,CAAC68C,OAAO,CAAC,CAC1D,CAAA;AAEH,MAAA,KAAK,sBAAsB;AACzB,QAAA,OAAOtiD,IAAI,CAAC6nD,QAAQ,KAAK,GAAG,CAAA;AAE9B,MAAA,KAAK,yBAAyB;AAC5B,QAAA,OAAO,IAAI,CAACpiD,YAAY,CAACzF,IAAI,CAAC2B,UAAU,CAAC,CAAA;AAE3C,MAAA,KAAK,kBAAkB,CAAA;AACvB,MAAA,KAAK,0BAA0B;AAC7B,QAAA,OAAO,CAAC+D,SAAS,CAAA;AAEnB,MAAA;AACE,QAAA,OAAO,KAAK,CAAA;AAAC,KAAA;AAEnB,GAAA;;AAIAk8B,EAAAA,gBAAgB,CACdD,QAAsD;AAEtDE,EAAAA,mBAA6B,EACiB;AAC9C,IAAA,OAAOF,QAAQ,CAAA;AACjB,GAAA;AAEAm1B,EAAAA,oBAAoB,CAClBn1B,QAAsD,EACtDE,mBAA6B,EACvB;AACN,IAAA,IAAI,CAACD,gBAAgB,CAACD,QAAQ,EAAEE,mBAAmB,CAAC,CAAA;AAEpD,IAAA,KAAK,MAAM9C,IAAI,IAAI4C,QAAQ,EAAE;MAC3B,IAAI,CAAA5C,IAAI,IAAJA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAE3sC,IAAI,MAAK,iBAAiB,EAAE;AACpC,QAAA,IAAI,CAAC0kE,oBAAoB,CAAC/3B,IAAI,CAACtiB,QAAQ,CAAC,CAAA;AAC1C,OAAA;AACF,KAAA;AACF,GAAA;;EAIAs6C,WAAW,CAET1xD,mBAA6C,EAC9B;AACf,IAAA,MAAMrF,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAiB,CAAA;IAC5C,IAAI,CAACuR,IAAI,EAAE,CAAA;IACX9V,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAAC8gC,uBAAuB,CAC1Cx6B,mBAAmB,EACnB6W,SAAS,CACV,CAAA;AACD,IAAA,OAAO,IAAI,CAACzX,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;;AAIAg3D,EAAAA,gBAAgB,GAA4B;AAC1C,IAAA,MAAMh3D,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAe,CAAA;IAC1C,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX9V,IAAAA,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAACmlC,gBAAgB,EAAE,CAAA;AACvC,IAAA,OAAO,IAAI,CAACz/B,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,CAAA;AAC7C,GAAA;;AAGAkkC,EAAAA,gBAAgB,GAAwB;AAEtC,IAAA,QAAQ,IAAI,CAACn9B,KAAK,CAAC3U,IAAI;AACrB,MAAA,KAAA,CAAA;AAAkB,QAAA;AAChB,UAAA,MAAM4N,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAgB,CAAA;UAC3C,IAAI,CAACuR,IAAI,EAAE,CAAA;UAEX9V,IAAI,CAACyc,QAAQ,GAAG,IAAI,CAACioC,gBAAgB,CAAA,CAAA,EAAA,EAAA,EAGnC,IAAI,CACL,CAAA;AACD,UAAA,OAAO,IAAI,CAACjgD,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,SAAA;AAEA,MAAA,KAAA,CAAA;AACE,QAAA,OAAO,IAAI,CAAC6oD,eAAe,CAAA,CAAA,EAAY,IAAI,CAAC,CAAA;AAAC,KAAA;;IAIjD,OAAO,IAAI,CAACtxB,eAAe,EAAE,CAAA;AAC/B,GAAA;;EAGAmtB,gBAAgB,CAEd3iB,KAAgB,EAChBk1B,aAAuD,EACvDC,UAAoB,EACpB9yB,cAAwB,EACc;IACtC,MAAM+yB,IAA0C,GAAG,EAAE,CAAA;IACrD,IAAI75B,KAAK,GAAG,IAAI,CAAA;AAChB,IAAA,OAAO,CAAC,IAAI,CAACvY,GAAG,CAACgd,KAAK,CAAC,EAAE;AACvB,MAAA,IAAIzE,KAAK,EAAE;AACTA,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;QACL,IAAI,CAAC1O,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAA;AACA,MAAA,IAAIsoC,UAAU,IAAI,IAAI,CAAC10C,KAAK,IAAU,EAAE;AACtC20C,QAAAA,IAAI,CAACzzD,IAAI,CAAC,IAAI,CAAC,CAAA;OAChB,MAAM,IAAI,IAAI,CAACqhB,GAAG,CAACgd,KAAK,CAAC,EAAE;AAC1B,QAAA,MAAA;AACF,OAAC,MAAM,IAAI,IAAI,CAACvf,KAAK,IAAa,EAAE;AAClC20C,QAAAA,IAAI,CAACzzD,IAAI,CAAC,IAAI,CAACo/B,4BAA4B,CAAC,IAAI,CAACk0B,gBAAgB,EAAE,CAAC,CAAC,CAAA;AACrE,QAAA,IAAI,CAAC,IAAI,CAACtG,mBAAmB,CAACuG,aAAa,CAAC,EAAE;AAC5C,UAAA,IAAI,CAACroC,MAAM,CAACmT,KAAK,CAAC,CAAA;AAClB,UAAA,MAAA;AACF,SAAA;AACF,OAAC,MAAM;QACL,MAAMl7B,UAAU,GAAG,EAAE,CAAA;QACrB,IAAI,IAAI,CAAC2b,KAAK,CAAO,EAAA,CAAA,IAAI,IAAI,CAAC/b,SAAS,CAAC,YAAY,CAAC,EAAE;AACrD,UAAA,IAAI,CAACR,KAAK,CAACxG,MAAM,CAACxD,6BAA6B,EAAE;AAC/CiK,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;AAEA,QAAA,OAAO,IAAI,CAACod,KAAK,CAAA,EAAA,CAAO,EAAE;AACxB3b,UAAAA,UAAU,CAACnD,IAAI,CAAC,IAAI,CAAC0zD,cAAc,EAAE,CAAC,CAAA;AACxC,SAAA;QACAD,IAAI,CAACzzD,IAAI,CAAC,IAAI,CAACkpD,uBAAuB,CAACxoB,cAAc,EAAEv9B,UAAU,CAAC,CAAC,CAAA;AACrE,OAAA;AACF,KAAA;AACA,IAAA,OAAOswD,IAAI,CAAA;AACb,GAAA;;EAGAE,wBAAwB,CAEtBtyD,IAAyB,EACZ;IACb,IAAI,CAAC+Q,IAAI,EAAE,CAAA;AAEX/Q,IAAAA,IAAI,CAAChG,QAAQ,GAAG,IAAI,CAACw4B,eAAe,EAAE,CAAA;IACtC,IAAI,CAACm5B,mBAAmB,CAA2B,GAAA,CAAA,CAAA;AACnD,IAAA,OAAO,IAAI,CAACjsD,UAAU,CAACM,IAAI,EAAE,aAAa,CAAC,CAAA;AAC7C,GAAA;;AAGAuyD,EAAAA,oBAAoB,GAA2C;AAC7D,IAAA,MAAMvyD,IAAI,GAAG,IAAI,CAACR,SAAS,EAA8B,CAAA;IACzD,MAAM;MAAEnS,IAAI;AAAEgT,MAAAA,QAAAA;KAAU,GAAG,IAAI,CAAC2B,KAAK,CAAA;IACrC,IAAI3U,IAAI,OAAgB,EAAE;AACxB,MAAA,OAAO,IAAI,CAACilE,wBAAwB,CAACtyD,IAAI,CAAwB,CAAA;AACnE,KAAC,MAAM,IAAI3S,IAAI,KAAA,GAAmB,EAAE;AAClC,MAAA,IAAI,CAAC20B,YAAY,CAAC,sBAAsB,EAAE3hB,QAAQ,CAAC,CAAA;AACnD,MAAA,IAAI,CAACS,UAAU,CAACC,cAAc,CAAC,IAAI,CAACiB,KAAK,CAACxX,KAAK,EAAE6V,QAAQ,CAAC,CAAA;AACzDL,MAAAA,IAAI,CAA0B1V,GAAG,GAAG,IAAI,CAACsU,gBAAgB,EAAE,CAAA;AAC9D,KAAC,MAAM;AACL,MAAA,IAAI,CAAC6hD,iBAAiB,CAACzgD,IAAI,CAAyB,CAAA;AACtD,KAAA;IACCA,IAAI,CAA0BzC,MAAM,GAAG,KAAK,CAAA;AAC7C,IAAA,OAAO,IAAI,CAACugC,iBAAiB,CAC3B99B,IAAI,EACJK,QAAQ,EACR,KAAK,EACL,KAAK,EACL,IAAI,EACJ,KAAK,CACN,CAAA;AACH,GAAA;;AAEAwnD,EAAAA,uBAAuB,CAErBxoB,cAA0C,EAC1Cv9B,UAAuB,EACQ;AAC/B,IAAA,MAAM66B,IAAI,GAAG,IAAI,CAACqB,iBAAiB,EAAE,CAAA;AACrC,IAAA,IAAI,CAACD,4BAA4B,CAACpB,IAAI,CAAC,CAAA;AACvC,IAAA,MAAMorB,GAAG,GAAG,IAAI,CAAC/pB,iBAAiB,CAACrB,IAAI,CAACljC,GAAG,CAAClQ,KAAK,EAAEozC,IAAI,CAAC,CAAA;IACxD,IAAI76B,UAAU,CAAC5X,MAAM,EAAE;MACrByyC,IAAI,CAAC76B,UAAU,GAAGA,UAAU,CAAA;AAC9B,KAAA;AACA,IAAA,OAAOimD,GAAG,CAAA;AACZ,GAAA;;EAGAhqB,4BAA4B,CAAC1E,KAAc,EAAW;AACpD,IAAA,OAAOA,KAAK,CAAA;AACd,GAAA;;AAIA2E,EAAAA,iBAAiB,CAEf39B,QAA0B,EAC1Bs8B,IAAqB,EACZ;AAAA,IAAA,IAAA,SAAA,EAAA,KAAA,CAAA;IACT,CAAAt8B,SAAAA,GAAAA,QAAQ,wBAARA,QAAQ,GAAK,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AAChCs8B,IAAAA,IAAI,YAAGA,IAAI,KAAA,IAAA,GAAA,KAAA,GAAI,IAAI,CAACwC,gBAAgB,EAAE,CAAA;AACtC,IAAA,IAAI,CAAC,IAAI,CAACnf,GAAG,CAAO,EAAA,CAAA,EAAE,OAAO2c,IAAI,CAAA;AAEjC,IAAA,MAAM1hC,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAAoBtsB,QAAQ,CAAC,CAAA;IAC1DpF,IAAI,CAAC0hC,IAAI,GAAGA,IAAI,CAAA;AAChB1hC,IAAAA,IAAI,CAACu6B,KAAK,GAAG,IAAI,CAACsF,uBAAuB,EAAE,CAAA;AAC3C,IAAA,OAAO,IAAI,CAACp7B,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;AA8BAsF,EAAAA,WAAW,CACTlT,IAAY;EAEZmT,yBAAkC;AAElCC,EAAAA,OAAqB,EACH;AAClB,IAAA,OAAOu2C,MAAM,CACX;AACEhrD,MAAAA,iBAAiB,EAAE,MAAM;AACzBc,MAAAA,WAAW,EAAE,UAAU;AACvB0lE,MAAAA,cAAc,EAAE,OAAO;AACvB3lE,MAAAA,uBAAuB,EAAE,YAAY;AACrCf,MAAAA,YAAY,EAAE,UAAU;AACxBc,MAAAA,aAAa,EAAE,YAAA;KAChB;AAEDS,IAAAA,IAAI,CACL,CAAA;AACH,GAAA;;EA+BAolE,SAAS,CACP71D,UAAmD,EACnD;AACE81D,IAAAA,EAAE,EAAE9gE,QAAQ;AACZ6O,IAAAA,OAAO,GAAG0S,SAAS;AACnBw/C,IAAAA,YAAY,GAAG,KAAK;AACpBryB,IAAAA,iBAAiB,GAAG,KAAK;AACzBsyB,IAAAA,wBAAwB,GAAG,EAAEnyD,OAAO,GAAGwR,kBAAkB,CAAC;AAC1D4gD,IAAAA,wBAAwB,GAAG,KAAA;AAQ7B,GAAC,EACK;AAAA,IAAA,IAAA,iBAAA,CAAA;AACN,IAAA,MAAMxlE,IAAI,GAAGuP,UAAU,CAACvP,IAAI,CAAA;;AAK5B,IAAA,IAAI,IAAI,CAAC2V,cAAc,CAACpG,UAAU,CAAC,EAAE,OAAA;IAErC,IAAIvP,IAAI,KAAK,kBAAkB,EAAE;MAC/B,IAAIoT,OAAO,KAAK0S,SAAS,EAAE;AACzB,QAAA,IAAI,CAACjS,KAAK,CAACxG,MAAM,CAACtI,6BAA6B,EAAE;AAAE+O,UAAAA,EAAE,EAAEvE,UAAAA;AAAW,SAAC,CAAC,CAAA;AACtE,OAAA;AACA,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAIA,UAAU,CAACvP,IAAI,KAAK,YAAY,EAAE;MACpC,IAAI,CAAC43D,eAAe,CAClBroD,UAAU,EACV6D,OAAO,EACP6/B,iBAAiB,EACjBsyB,wBAAwB,CACzB,CAAA;MAED,MAAM;AAAE3/D,QAAAA,IAAAA;AAAK,OAAC,GAAG2J,UAAwB,CAAA;AAEzC,MAAA,IAAI+1D,YAAY,EAAE;AAChB,QAAA,IAAIA,YAAY,CAACliD,GAAG,CAACxd,IAAI,CAAC,EAAE;AAC1B,UAAA,IAAI,CAACiO,KAAK,CAACxG,MAAM,CAAClG,SAAS,EAAE;AAAE2M,YAAAA,EAAE,EAAEvE,UAAAA;AAAW,WAAC,CAAC,CAAA;AAClD,SAAC,MAAM;AACL+1D,UAAAA,YAAY,CAAC98C,GAAG,CAAC5iB,IAAI,CAAC,CAAA;AACxB,SAAA;AACF,OAAA;AAEA,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAM6/D,QAAQ,GAAG,IAAI,CAACvyD,WAAW,CAC/B3D,UAAU,CAACvP,IAAI,EACf,EAAEwlE,wBAAwB,IAAIj2D,CAAAA,iBAAAA,GAAAA,UAAU,CAACE,KAAK,KAAhB,IAAA,IAAA,iBAAA,CAAkBY,aAAa,CAAC,IAC5D9L,QAAQ,CAACvE,IAAI,KAAK,sBAAsB,EAC1CoT,OAAO,CACR,CAAA;IAED,IAAIqyD,QAAQ,KAAK,IAAI,EAAE,OAAA;IACvB,IAAIA,QAAQ,KAAK,KAAK,EAAE;AACtB,MAAA,MAAMC,eAAe,GACnBtyD,OAAO,KAAK0S,SAAS,GAAGzY,MAAM,CAAC/I,UAAU,GAAG+I,MAAM,CAAC7I,iBAAiB,CAAA;AAEtE,MAAA,IAAI,CAACqP,KAAK,CAAC6xD,eAAe,EAAE;AAC1B5xD,QAAAA,EAAE,EAAEvE,UAAU;AACdhL,QAAAA,QAAQ,EACNA,QAAQ,CAACvE,IAAI,KAAK,kBAAkB,GAChC;AAAEA,UAAAA,IAAI,EAAE,kBAAkB;UAAEC,MAAM,EAAEsE,QAAQ,CAACtE,MAAAA;AAAO,SAAC,GACrD;UAAED,IAAI,EAAEuE,QAAQ,CAACvE,IAAAA;AAAK,SAAA;AAC9B,OAAC,CAAC,CAAA;AACF,MAAA,OAAA;AACF,KAAA;IAEA,MAAM,CAAC/C,GAAG,EAAE0oE,yBAAyB,CAAC,GAAG94D,KAAK,CAACC,OAAO,CAAC24D,QAAQ,CAAC,GAC5DA,QAAQ,GACR,CAACA,QAAQ,EAAEzlE,IAAI,KAAK,yBAAyB,CAAC,CAAA;IAClD,MAAM4lE,YAAY,GAChBr2D,UAAU,CAACvP,IAAI,KAAK,cAAc,IAClCuP,UAAU,CAACvP,IAAI,KAAK,eAAe,IACnCuP,UAAU,CAACvP,IAAI,KAAK,yBAAyB,GACzCuP,UAAU,GACVhL,QAAQ,CAAA;;AAGd,IAAA,KAAK,MAAMshE,KAAK,IAAI,EAAE,CAAC/0D,MAAM,CAACvB,UAAU,CAACtS,GAAG,CAAC,CAAC,EAAE;AAC9C,MAAA,IAAI4oE,KAAK,EAAE;AACT,QAAA,IAAI,CAACT,SAAS,CAACS,KAAK,EAAE;AAEpBR,UAAAA,EAAE,EAAEO,YAAY;UAChBxyD,OAAO;UACPkyD,YAAY;UACZC,wBAAwB;UACxBtyB,iBAAiB;AACjBuyB,UAAAA,wBAAwB,EAAEG,yBAAAA;AAC5B,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AACF,GAAA;AAEA/N,EAAAA,eAAe,CACb9jD,EAAc,EACdwU,WAAyB,EACzB2qB,iBAA0B,GAAG,KAAK,EAClC6yB,eAAwB,GAAG,EAAEx9C,WAAW,GAAG1D,kBAAkB,CAAC,EAC9D;IACA,IACE,IAAI,CAACjQ,KAAK,CAACiO,MAAM,KAChBqwB,iBAAiB,GACd3vB,wBAAwB,CAACxP,EAAE,CAAClO,IAAI,EAAE,IAAI,CAACsd,QAAQ,CAAC,GAChDG,4BAA4B,CAACvP,EAAE,CAAClO,IAAI,CAAC,CAAC,EAC1C;MACA,IAAI0iB,WAAW,KAAKxC,SAAS,EAAE;AAC7B,QAAA,IAAI,CAACjS,KAAK,CAACxG,MAAM,CAAC3C,mBAAmB,EAAE;UAAEoJ,EAAE;UAAEnJ,aAAa,EAAEmJ,EAAE,CAAClO,IAAAA;AAAK,SAAC,CAAC,CAAA;AACxE,OAAC,MAAM;AACL,QAAA,IAAI,CAACiO,KAAK,CAACxG,MAAM,CAACzC,0BAA0B,EAAE;UAC5CkJ,EAAE;UACFjJ,WAAW,EAAEiJ,EAAE,CAAClO,IAAAA;AAClB,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;IAEA,IAAI,CAACkgE,eAAe,IAAIhyD,EAAE,CAAClO,IAAI,KAAK,KAAK,EAAE;AACzC,MAAA,IAAI,CAACiO,KAAK,CAACxG,MAAM,CAACjI,mBAAmB,EAAE;AAAE0O,QAAAA,EAAAA;AAAG,OAAC,CAAC,CAAA;AAChD,KAAA;AAEA,IAAA,IAAI,EAAEwU,WAAW,GAAGxC,SAAS,CAAC,EAAE;AAC9B,MAAA,IAAI,CAACigD,yBAAyB,CAACjyD,EAAE,EAAEwU,WAAW,CAAC,CAAA;AACjD,KAAA;AACF,GAAA;AAEAy9C,EAAAA,yBAAyB,CAAC9D,UAAsB,EAAE7uD,OAAqB,EAAE;AACvE,IAAA,IAAI,CAACgV,KAAK,CAACC,WAAW,CAAC45C,UAAU,CAACr8D,IAAI,EAAEwN,OAAO,EAAE6uD,UAAU,CAAC71D,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACxE,GAAA;AAEA2hE,EAAAA,qBAAqB,CAACjwD,IAAU,EAAEkwD,YAAqB,EAAQ;IAC7D,QAAQlwD,IAAI,CAAC5N,IAAI;AACf,MAAA,KAAK,yBAAyB;QAC5B,IAAI,CAAC69D,qBAAqB,CAACjwD,IAAI,CAAC2B,UAAU,EAAEuuD,YAAY,CAAC,CAAA;AACzD,QAAA,MAAA;AACF,MAAA,KAAK,YAAY,CAAA;AACjB,MAAA,KAAK,kBAAkB;AACrB,QAAA,MAAA;AACF,MAAA,KAAK,iBAAiB,CAAA;AACtB,MAAA,KAAK,kBAAkB;AACrB,QAAA,IAAIA,YAAY,EAAE,MAAA;AAEpB,MAAA;AACE,QAAA,IAAI,CAACjqD,KAAK,CAACxG,MAAM,CAACpI,4BAA4B,EAAE;AAAE6O,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AAAC,KAAA;AAEpE,GAAA;EAEA0wD,mBAAmB,CACjB3uB,KAA+C,EACtC;AACT,IAAA,IAAI,CAAC,IAAI,CAACvf,KAAK,IAAU,EAAE;AACzB,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AAEA,IAAA,IAAI,CAACvc,KAAK,CACR,IAAI,CAACuf,iBAAiB,EAAE,KAAKuc,KAAK,GAC9BtiC,MAAM,CAACzF,iBAAiB,GACxByF,MAAM,CAAClL,gBAAgB,EAC3B;AAAE2R,MAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,KAAC,CAC5B,CAAA;AAED,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AACF;;ACzpBe,MAAegzD,gBAAgB,SAASxB,UAAU,CAAC;;EA0ChEyB,UAAU,CACRtzD,IAAsC,EACtCuzD,QAAoC,EACpCC,QAEC,EACDlzD,mBAA6C,EACvC;AACN,IAAA,IACEN,IAAI,CAAC3S,IAAI,KAAK,eAAe,IAC7B,IAAI,CAAC2V,cAAc,CAAChD,IAAI,CAAC,IACzBA,IAAI,CAACP,QAAQ;IAEbO,IAAI,CAACG,SAAS,EACd;AACA,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAM7V,GAAG,GAAG0V,IAAI,CAAC1V,GAAG,CAAA;AAEpB,IAAA,MAAM2I,IAAI,GAAG3I,GAAG,CAAC+C,IAAI,KAAK,YAAY,GAAG/C,GAAG,CAAC2I,IAAI,GAAG3I,GAAG,CAACE,KAAK,CAAA;IAE7D,IAAIyI,IAAI,KAAK,WAAW,EAAE;AACxB,MAAA,IAAIsgE,QAAQ,EAAE;AACZ,QAAA,IAAI,CAACryD,KAAK,CAACxG,MAAM,CAAC1F,aAAa,EAAE;AAAEmM,UAAAA,EAAE,EAAE7W,GAAAA;AAAI,SAAC,CAAC,CAAA;AAC7C,QAAA,OAAA;AACF,OAAA;MACA,IAAIkpE,QAAQ,CAACC,IAAI,EAAE;AACjB,QAAA,IAAInzD,mBAAmB,EAAE;AAGvB,UAAA,IAAIA,mBAAmB,CAACkqB,cAAc,KAAK,IAAI,EAAE;AAC/ClqB,YAAAA,mBAAmB,CAACkqB,cAAc,GAAGlgC,GAAG,CAACmP,GAAG,CAAClQ,KAAK,CAAA;AACpD,WAAA;AACF,SAAC,MAAM;AACL,UAAA,IAAI,CAAC2X,KAAK,CAACxG,MAAM,CAACpL,cAAc,EAAE;AAAE6R,YAAAA,EAAE,EAAE7W,GAAAA;AAAI,WAAC,CAAC,CAAA;AAChD,SAAA;AACF,OAAA;MAEAkpE,QAAQ,CAACC,IAAI,GAAG,IAAI,CAAA;AACtB,KAAA;AACF,GAAA;AAEAC,EAAAA,oBAAoB,CAAC15B,IAAkB,EAAEpgB,gBAAwB,EAAW;IAC1E,OACEogB,IAAI,CAAC3sC,IAAI,KAAK,yBAAyB,IAAI2sC,IAAI,CAACzwC,KAAK,KAAKqwB,gBAAgB,CAAA;AAE9E,GAAA;;AAGA2yC,EAAAA,aAAa,GAA8C;IACzD,IAAI,CAAC9gC,kBAAkB,EAAE,CAAA;IACzB,IAAI,CAAC1L,SAAS,EAAE,CAAA;AAChB,IAAA,MAAMia,IAAI,GAAG,IAAI,CAAC9H,eAAe,EAAE,CAAA;AACnC,IAAA,IAAI,CAAC,IAAI,CAACzU,KAAK,KAAQ,EAAE;MACvB,IAAI,CAACxrB,UAAU,EAAE,CAAA;AACnB,KAAA;IAGA,IAAI,CAAC6mB,yBAAyB,EAAE,CAAA;AAChCkhB,IAAAA,IAAI,CAAC/iB,QAAQ,GAAG,IAAI,CAACjV,KAAK,CAACiV,QAAQ,CAAA;AACnC+iB,IAAAA,IAAI,CAACrgB,MAAM,GAAG,IAAI,CAAC3X,KAAK,CAAC2X,MAAM,CAAA;AAC/B,IAAA,IAAI,IAAI,CAACre,OAAO,CAACC,MAAM,EAAE;AACvBy+B,MAAAA,IAAI,CAACz+B,MAAM,GAAG,IAAI,CAACA,MAAM,CAAA;AAC3B,KAAA;AAEA,IAAA,OAAOy+B,IAAI,CAAA;AACb,GAAA;;AAqBA9H,EAAAA,eAAe,CAEbyhC,UAAoB,EACpBrzD,mBAAsC,EACxB;AACd,IAAA,IAAIqzD,UAAU,EAAE;MACd,OAAO,IAAI,CAACC,aAAa,CAAC,MACxB,IAAI,CAACC,mBAAmB,CAACvzD,mBAAmB,CAAC,CAC9C,CAAA;AACH,KAAA;IACA,OAAO,IAAI,CAACwzD,UAAU,CAAC,MAAM,IAAI,CAACD,mBAAmB,CAACvzD,mBAAmB,CAAC,CAAC,CAAA;AAC7E,GAAA;;EAGAuzD,mBAAmB,CAEjBvzD,mBAAsC,EACxB;AACd,IAAA,MAAMD,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,MAAM25B,IAAI,GAAG,IAAI,CAACa,gBAAgB,CAACv6B,mBAAmB,CAAC,CAAA;AACvD,IAAA,IAAI,IAAI,CAACmd,KAAK,CAAA,EAAA,CAAU,EAAE;AACxB,MAAA,MAAMxiB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;AACvCpF,MAAAA,IAAI,CAAC2uD,WAAW,GAAG,CAAC5vB,IAAI,CAAC,CAAA;AACzB,MAAA,OAAO,IAAI,CAACha,GAAG,CAAA,EAAA,CAAU,EAAE;QACzB/kB,IAAI,CAAC2uD,WAAW,CAACjrD,IAAI,CAAC,IAAI,CAACk8B,gBAAgB,CAACv6B,mBAAmB,CAAC,CAAC,CAAA;AACnE,OAAA;AACA,MAAA,IAAI,CAACu8B,gBAAgB,CAAC5hC,IAAI,CAAC2uD,WAAW,CAAC,CAAA;AACvC,MAAA,OAAO,IAAI,CAAClqD,UAAU,CAACzE,IAAI,EAAE,oBAAoB,CAAC,CAAA;AACpD,KAAA;AACA,IAAA,OAAO++B,IAAI,CAAA;AACb,GAAA;;AAGA+5B,EAAAA,0BAA0B,CAExBzzD,mBAA6C,EAC7Co/B,cAAyB,EACzB;AACA,IAAA,OAAO,IAAI,CAACk0B,aAAa,CAAC,MACxB,IAAI,CAAC/4B,gBAAgB,CAACv6B,mBAAmB,EAAEo/B,cAAc,CAAC,CAC3D,CAAA;AACH,GAAA;;AAGA5E,EAAAA,uBAAuB,CAErBx6B,mBAA6C,EAC7Co/B,cAAyB,EACzB;AACA,IAAA,OAAO,IAAI,CAACo0B,UAAU,CAAC,MACrB,IAAI,CAACj5B,gBAAgB,CAACv6B,mBAAmB,EAAEo/B,cAAc,CAAC,CAC3D,CAAA;AACH,GAAA;;AAIArF,EAAAA,0BAA0B,CACxB/5B,mBAAqC,EACrC0zD,WAA6B,EAC7B;AAAA,IAAA,IAAA,gBAAA,CAAA;AACA1zD,IAAAA,mBAAmB,CAACoqB,qBAAqB,GACvCspC,CAAAA,gBAAAA,GAAAA,WAAW,IAAXA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,WAAW,CAAEv6D,GAAG,KAAI,IAAA,GAAA,gBAAA,GAAA,IAAI,CAACuI,KAAK,CAAC3B,QAAQ,CAAA;AAC3C,GAAA;;AAKAw6B,EAAAA,gBAAgB,CAEdv6B,mBAA6C,EAC7Co/B,cAAyB,EACX;AACd,IAAA,MAAMr/B,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,IAAI,IAAI,CAAC0oB,YAAY,CAAA,GAAA,CAAW,EAAE;AAChC,MAAA,IAAI,IAAI,CAACuC,SAAS,CAAC7C,QAAQ,EAAE;AAC3B,QAAA,IAAIkU,IAAI,GAAG,IAAI,CAACs3B,UAAU,EAAE,CAAA;AAC5B,QAAA,IAAIv0B,cAAc,EAAE;UAClB/C,IAAI,GAAG+C,cAAc,CAACF,IAAI,CAAC,IAAI,EAAE7C,IAAI,EAAEt8B,QAAQ,CAAC,CAAA;AAClD,SAAA;AACA,QAAA,OAAOs8B,IAAI,CAAA;AACb,OAAA;AACF,KAAA;AAEA,IAAA,IAAIu3B,mBAAmB,CAAA;AACvB,IAAA,IAAI5zD,mBAAmB,EAAE;AACvB4zD,MAAAA,mBAAmB,GAAG,KAAK,CAAA;AAC7B,KAAC,MAAM;MACL5zD,mBAAmB,GAAG,IAAIsrB,gBAAgB,EAAE,CAAA;AAC5CsoC,MAAAA,mBAAmB,GAAG,IAAI,CAAA;AAC5B,KAAA;IACA,MAAM;AAAE7mE,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;AAE3B,IAAA,IAAI3U,IAAI,KAAc,EAAA,IAAIygB,iBAAiB,CAACzgB,IAAI,CAAC,EAAE;MACjD,IAAI,CAAC2U,KAAK,CAAC4X,gBAAgB,GAAG,IAAI,CAAC5X,KAAK,CAACzY,KAAK,CAAA;AAChD,KAAA;AAEA,IAAA,IAAIozC,IAAI,GAAG,IAAI,CAACw3B,qBAAqB,CAAC7zD,mBAAmB,CAAC,CAAA;AAC1D,IAAA,IAAIo/B,cAAc,EAAE;MAClB/C,IAAI,GAAG+C,cAAc,CAACF,IAAI,CAAC,IAAI,EAAE7C,IAAI,EAAEt8B,QAAQ,CAAC,CAAA;AAClD,KAAA;IACA,IAAI+N,iBAAiB,CAAC,IAAI,CAACpM,KAAK,CAAC3U,IAAI,CAAC,EAAE;AACtC,MAAA,MAAM4N,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAAyBtsB,QAAQ,CAAC,CAAA;AAC/D,MAAA,MAAMyiD,QAAQ,GAAG,IAAI,CAAC9gD,KAAK,CAACxX,KAAK,CAAA;MACjCyQ,IAAI,CAAC6nD,QAAQ,GAAGA,QAAQ,CAAA;AAExB,MAAA,IAAI,IAAI,CAACrlC,KAAK,CAAA,EAAA,CAAO,EAAE;AACrB,QAAA,IAAI,CAAC7c,YAAY,CAAC+7B,IAAI,EAAc,IAAI,CAAC,CAAA;QACzC1hC,IAAI,CAAC0hC,IAAI,GAAGA,IAAI,CAAA;AAEhB,QAAA,MAAMy3B,UAAU,GAAG/zD,QAAQ,CAACjX,KAAK,CAAA;AACjC,QAAA,IACEkX,mBAAmB,CAACkqB,cAAc,IAAI,IAAI,IAC1ClqB,mBAAmB,CAACkqB,cAAc,CAACphC,KAAK,IAAIgrE,UAAU,EACtD;UACA9zD,mBAAmB,CAACkqB,cAAc,GAAG,IAAI,CAAA;AAC3C,SAAA;;AACA,QAAA,IACElqB,mBAAmB,CAACiqB,kBAAkB,IAAI,IAAI,IAC9CjqB,mBAAmB,CAACiqB,kBAAkB,CAACnhC,KAAK,IAAIgrE,UAAU,EAC1D;UACA9zD,mBAAmB,CAACiqB,kBAAkB,GAAG,IAAI,CAAA;AAC/C,SAAA;;AACA,QAAA,IACEjqB,mBAAmB,CAACmqB,aAAa,IAAI,IAAI,IACzCnqB,mBAAmB,CAACmqB,aAAa,CAACrhC,KAAK,IAAIgrE,UAAU,EACrD;AACA,UAAA,IAAI,CAACzoC,yBAAyB,CAACrrB,mBAAmB,CAAC,CAAA;UACnDA,mBAAmB,CAACmqB,aAAa,GAAG,IAAI,CAAA;AAC1C,SAAA;AACF,OAAC,MAAM;QACLxvB,IAAI,CAAC0hC,IAAI,GAAGA,IAAI,CAAA;AAClB,OAAA;MAEA,IAAI,CAAC5rB,IAAI,EAAE,CAAA;AACX9V,MAAAA,IAAI,CAACu6B,KAAK,GAAG,IAAI,CAACqF,gBAAgB,EAAE,CAAA;AACpC,MAAA,IAAI,CAAC43B,SAAS,CAAC91B,IAAI,EAAE;AACnB+1B,QAAAA,EAAE,EAAE,IAAI,CAAChzD,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAA;AAClD,OAAC,CAAC,CAAA;AAEF,MAAA,OAAOA,IAAI,CAAA;KACZ,MAAM,IAAIi5D,mBAAmB,EAAE;AAC9B,MAAA,IAAI,CAAC7pC,qBAAqB,CAAC/pB,mBAAmB,EAAE,IAAI,CAAC,CAAA;AACvD,KAAA;AAEA,IAAA,OAAOq8B,IAAI,CAAA;AACb,GAAA;;EAKAw3B,qBAAqB,CAEnB7zD,mBAAqC,EACvB;AACd,IAAA,MAAMD,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,MAAMuZ,gBAAgB,GAAG,IAAI,CAAC5X,KAAK,CAAC4X,gBAAgB,CAAA;AACpD,IAAA,MAAMogB,IAAI,GAAG,IAAI,CAACq6B,YAAY,CAAC/zD,mBAAmB,CAAC,CAAA;IAEnD,IAAI,IAAI,CAACozD,oBAAoB,CAAC15B,IAAI,EAAEpgB,gBAAgB,CAAC,EAAE;AACrD,MAAA,OAAOogB,IAAI,CAAA;AACb,KAAA;IAEA,OAAO,IAAI,CAACI,gBAAgB,CAACJ,IAAI,EAAE35B,QAAQ,EAAEC,mBAAmB,CAAC,CAAA;AACnE,GAAA;EAEA85B,gBAAgB,CAEdJ,IAAkB,EAClB35B,QAAkB;AAElBC,EAAAA,mBAA6C,EAC/B;AACd,IAAA,IAAI,IAAI,CAAC0f,GAAG,CAAA,EAAA,CAAa,EAAE;AACzB,MAAA,MAAM/kB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;MACvCpF,IAAI,CAAC4U,IAAI,GAAGmqB,IAAI,CAAA;AAChB/+B,MAAAA,IAAI,CAACs/B,UAAU,GAAG,IAAI,CAACO,uBAAuB,EAAE,CAAA;MAChD,IAAI,CAACjR,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB5uB,MAAAA,IAAI,CAAC2/B,SAAS,GAAG,IAAI,CAACC,gBAAgB,EAAE,CAAA;AACxC,MAAA,OAAO,IAAI,CAACn7B,UAAU,CAACzE,IAAI,EAAE,uBAAuB,CAAC,CAAA;AACvD,KAAA;AACA,IAAA,OAAO++B,IAAI,CAAA;AACb,GAAA;EAEAs6B,wBAAwB,CAEtBh0D,mBAAsC,EACR;AAC9B,IAAA,OAAO,IAAI,CAACmd,KAAK,CAAA,GAAA,CAAgB,GAC7B,IAAI,CAAC7e,gBAAgB,EAAE,GACvB,IAAI,CAAC8jD,eAAe,CAACpiD,mBAAmB,CAAC,CAAA;AAC/C,GAAA;;EAKA+zD,YAAY,CAEV/zD,mBAAqC,EACvB;AACd,IAAA,MAAMD,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,MAAMuZ,gBAAgB,GAAG,IAAI,CAAC5X,KAAK,CAAC4X,gBAAgB,CAAA;AACpD,IAAA,MAAMogB,IAAI,GAAG,IAAI,CAACs6B,wBAAwB,CAACh0D,mBAAmB,CAAC,CAAA;IAE/D,IAAI,IAAI,CAACozD,oBAAoB,CAAC15B,IAAI,EAAEpgB,gBAAgB,CAAC,EAAE;AACrD,MAAA,OAAOogB,IAAI,CAAA;AACb,KAAA;IAEA,OAAO,IAAI,CAAC+uB,WAAW,CAAC/uB,IAAI,EAAE35B,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7C,GAAA;;AAQA0oD,EAAAA,WAAW,CAETpsB,IAAkC,EAClCqsB,YAAsB,EACtBC,OAAe,EACD;AACd,IAAA,IAAI,IAAI,CAAChqD,aAAa,CAAC09B,IAAI,CAAC,EAAE;;AAK5B,MAAA,MAAMnyC,KAAK,GAAG,IAAI,CAACuU,gBAAgB,CAAC49B,IAAI,CAAC,CAAA;AAEzC,MAAA,IACEssB,OAAO,IAAIn6C,uBAAuB,CAAQ,EAAA,CAAA,IAC1C,CAAC,IAAI,CAACwc,SAAS,CAAC3C,KAAK,IACrB,CAAC,IAAI,CAAClL,KAAK,IAAQ,EACnB;AACA,QAAA,IAAI,CAACvc,KAAK,CAACxG,MAAM,CAAC/F,mBAAmB,EAAE;AACrCwM,UAAAA,EAAE,EAAEw7B,IAAI;AACRjzC,UAAAA,cAAc,EAAEc,KAAAA;AAClB,SAAC,CAAC,CAAA;AACJ,OAAA;AAEA,MAAA,IAAI,CAACsW,UAAU,CAACC,cAAc,CAACvW,KAAK,EAAEmyC,IAAI,CAACljC,GAAG,CAAClQ,KAAK,CAAC,CAAA;AACvD,KAAA;AAEA,IAAA,MAAMgrE,EAAE,GAAG,IAAI,CAACvyD,KAAK,CAAC3U,IAAI,CAAA;AAC1B,IAAA,IAAImhB,eAAe,CAAC+lD,EAAE,CAAC,KAAK,IAAI,CAACjpC,SAAS,CAAC3C,KAAK,IAAI,CAAC,IAAI,CAAClL,KAAK,CAAA,EAAA,CAAQ,CAAC,EAAE;AACxE,MAAA,IAAI+2C,IAAI,GAAG1lD,uBAAuB,CAACylD,EAAE,CAAC,CAAA;MACtC,IAAIC,IAAI,GAAGvL,OAAO,EAAE;QAClB,IAAIsL,EAAE,OAAgB,EAAE;AACtB,UAAA,IAAI,CAACvyC,YAAY,CAAC,kBAAkB,CAAC,CAAA;AACrC,UAAA,IAAI,IAAI,CAAChgB,KAAK,CAAC0Y,0BAA0B,EAAE;AACzC,YAAA,OAAOiiB,IAAI,CAAA;AACb,WAAA;AACA,UAAA,IAAI,CAAC83B,4BAA4B,CAAC93B,IAAI,EAAEqsB,YAAY,CAAC,CAAA;AACvD,SAAA;AACA,QAAA,MAAM/tD,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAC3Bq8B,YAAY,CACb,CAAA;QACD/tD,IAAI,CAAC0hC,IAAI,GAAGA,IAAI,CAAA;AAChB1hC,QAAAA,IAAI,CAAC6nD,QAAQ,GAAG,IAAI,CAAC9gD,KAAK,CAACxX,KAAK,CAAA;AAEhC,QAAA,MAAMkqE,OAAO,GAAGH,EAAE,KAAiB,EAAA,IAAIA,EAAE,KAAkB,EAAA,CAAA;QAC3D,MAAMI,QAAQ,GAAGJ,EAAE,KAAyB,EAAA,CAAA;AAE5C,QAAA,IAAII,QAAQ,EAAE;UAGZH,IAAI,GAAG1lD,uBAAuB,CAAe,EAAA,CAAA,CAAA;AAC/C,SAAA;QAEA,IAAI,CAACiC,IAAI,EAAE,CAAA;QAEX,IACEwjD,EAAE,OAAgB,IAClB,IAAI,CAAC7yD,SAAS,CAAC,CAAC,kBAAkB,EAAE;AAAEghB,UAAAA,QAAQ,EAAE,SAAA;SAAW,CAAC,CAAC,EAC7D;AACA,UAAA,IAAI,IAAI,CAAC1gB,KAAK,CAAC3U,IAAI,KAAA,EAAc,IAAI,IAAI,CAACi+B,SAAS,CAAC9C,QAAQ,EAAE;AAC5D,YAAA,MAAM,IAAI,CAACtnB,KAAK,CAACxG,MAAM,CAAC/E,gCAAgC,EAAE;AACxDwL,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,aAAC,CAAC,CAAA;AACJ,WAAA;AACF,SAAA;QAEApF,IAAI,CAACu6B,KAAK,GAAG,IAAI,CAACo/B,oBAAoB,CAACL,EAAE,EAAEC,IAAI,CAAC,CAAA;AAChD,QAAA,MAAMK,YAAY,GAAG,IAAI,CAACn1D,UAAU,CAClCzE,IAAI,EACJy5D,OAAO,IAAIC,QAAQ,GAAG,mBAAmB,GAAG,kBAAkB,CAC/D,CAAA;AAMD,QAAA,MAAMG,MAAM,GAAG,IAAI,CAAC9yD,KAAK,CAAC3U,IAAI,CAAA;AAC9B,QAAA,IACGsnE,QAAQ,KAAKG,MAAM,KAAA,EAAiB,IAAIA,MAAM,KAAkB,EAAA,CAAC,IACjEJ,OAAO,IAAII,MAAM,OAA0B,EAC5C;AACA,UAAA,MAAM,IAAI,CAAC5zD,KAAK,CAACxG,MAAM,CAACnH,yBAAyB,EAAE;AACjD4N,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;QAEA,OAAO,IAAI,CAAC0oD,WAAW,CAAC8L,YAAY,EAAE7L,YAAY,EAAEC,OAAO,CAAC,CAAA;AAC9D,OAAA;AACF,KAAA;AACA,IAAA,OAAOtsB,IAAI,CAAA;AACb,GAAA;;AAKAi4B,EAAAA,oBAAoB,CAElBL,EAAa,EACbC,IAAY,EACE;AACd,IAAA,MAAMn0D,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,QAAQk0D,EAAE;AACR,MAAA,KAAA,EAAA;AACE,QAAA,QAAQ,IAAI,CAAC11D,eAAe,CAAC,kBAAkB,EAAE,UAAU,CAAC;AAC1D,UAAA,KAAK,MAAM;AACT,YAAA,OAAO,IAAI,CAACk2D,uBAAuB,CAAC,MAAM;cACxC,OAAO,IAAI,CAACC,iBAAiB,EAAE,CAAA;AACjC,aAAC,CAAC,CAAA;AAEJ,UAAA,KAAK,OAAO;AACV,YAAA,OAAO,IAAI,CAACD,uBAAuB,CAAC,MAAM;cACxC,IAAI,IAAI,CAACzpC,SAAS,CAAC7C,QAAQ,IAAI,IAAI,CAACM,YAAY,CAAA,GAAA,CAAW,EAAE;AAC3D,gBAAA,MAAM,IAAI,CAAC7nB,KAAK,CAACxG,MAAM,CAACjC,iBAAiB,EAAE;AACzC0I,kBAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,iBAAC,CAAC,CAAA;AACJ,eAAA;AACA,cAAA,OAAO,IAAI,CAAC40D,6BAA6B,CACvC,IAAI,CAACC,wBAAwB,CAACX,EAAE,EAAEC,IAAI,CAAC,EACvCn0D,QAAQ,CACT,CAAA;AACH,aAAC,CAAC,CAAA;AAEJ,UAAA,KAAK,QAAQ;AACX,YAAA,OAAO,IAAI,CAAC80D,8BAA8B,CAAC,MAAM;AAC/C,cAAA,OAAO,IAAI,CAACC,uBAAuB,CAACZ,IAAI,CAAC,CAAA;AAC3C,aAAC,CAAC,CAAA;AAAC,SAAA;;AAIT,MAAA;AACE,QAAA,OAAO,IAAI,CAACU,wBAAwB,CAACX,EAAE,EAAEC,IAAI,CAAC,CAAA;AAAC,KAAA;AAErD,GAAA;;AAKAU,EAAAA,wBAAwB,CAEtBX,EAAa,EACbC,IAAY,EACE;AACd,IAAA,MAAMn0D,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;IAEpC,OAAO,IAAI,CAAC0oD,WAAW,CACrB,IAAI,CAACuL,wBAAwB,EAAE,EAC/Bj0D,QAAQ,EACR0O,uBAAuB,CAACwlD,EAAE,CAAC,GAAGC,IAAI,GAAG,CAAC,GAAGA,IAAI,CAC9C,CAAA;AACH,GAAA;AAEAQ,EAAAA,iBAAiB,GAA6B;AAAA,IAAA,IAAA,WAAA,CAAA;IAC5C,MAAM;AAAE30D,MAAAA,QAAAA;KAAU,GAAG,IAAI,CAAC2B,KAAK,CAAA;AAC/B,IAAA,MAAM9D,IAAI,GAAG,IAAI,CAAC28B,gBAAgB,EAAE,CAAA;AACpC,IAAA,MAAMw6B,mBAAmB,GAAG98D,mCAAmC,CAACkY,GAAG;IAEjEvS,IAAI,CAAC7Q,IAAI,CACV,CAAA;;IAGD,IAAIgoE,mBAAmB,IAAI,EAACn3D,CAAAA,WAAAA,GAAAA,IAAI,CAACpB,KAAK,KAAA,IAAA,IAAV,WAAYY,CAAAA,aAAa,CAAE,EAAA;AACrD,MAAA,IAAI,CAACwD,KAAK,CAACxG,MAAM,CAAC3B,uBAAuB,EAAE;AACzCoI,QAAAA,EAAE,EAAEd,QAAQ;QAEZhT,IAAI,EAAE6Q,IAAI,CAAC7Q,IAAAA;AACb,OAAC,CAAC,CAAA;AACJ,KAAA;AACA,IAAA,IAAI,CAAC,IAAI,CAACioE,qCAAqC,EAAE,EAAE;AAEjD,MAAA,IAAI,CAACp0D,KAAK,CAACxG,MAAM,CAAC5B,eAAe,EAAE;AAAEqI,QAAAA,EAAE,EAAEd,QAAAA;AAAS,OAAC,CAAC,CAAA;AACtD,KAAA;AAEA,IAAA,OAAOnC,IAAI,CAAA;AACb,GAAA;EAEAq3D,0BAA0B,CACxBt6D,IAAmD,EACnD;AACA,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAa,EAAE;AAC3B,MAAA,IAAI,CAACvc,KAAK,CAACxG,MAAM,CAACjE,kCAAkC,EAAE;QACpD0K,EAAE,EAAElG,IAAI,CAACjB,QAAAA;AACX,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;AAIA0oD,EAAAA,eAAe,CAEbpiD,mBAA6C,EAC7C0qD,QAAkB,EACJ;AACd,IAAA,MAAM3qD,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,MAAMm1D,OAAO,GAAG,IAAI,CAACzsC,YAAY,CAAW,EAAA,CAAA,CAAA;AAE5C,IAAA,IAAIysC,OAAO,IAAI,IAAI,CAACC,cAAc,EAAE,EAAE;MACpC,IAAI,CAAC1kD,IAAI,EAAE,CAAA;AACX,MAAA,MAAMipB,IAAI,GAAG,IAAI,CAAC07B,UAAU,CAACr1D,QAAQ,CAAC,CAAA;MACtC,IAAI,CAAC2qD,QAAQ,EAAE,IAAI,CAACuK,0BAA0B,CAACv7B,IAAI,CAAC,CAAA;AACpD,MAAA,OAAOA,IAAI,CAAA;AACb,KAAA;AACA,IAAA,MAAM27B,MAAM,GAAG,IAAI,CAACl4C,KAAK,CAAW,EAAA,CAAA,CAAA;AACpC,IAAA,MAAMxiB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAA0C,CAAA;IACrE,IAAIkP,aAAa,CAAC,IAAI,CAAC1M,KAAK,CAAC3U,IAAI,CAAC,EAAE;AAClC4N,MAAAA,IAAI,CAAC6nD,QAAQ,GAAG,IAAI,CAAC9gD,KAAK,CAACxX,KAAK,CAAA;MAChCyQ,IAAI,CAAC3N,MAAM,GAAG,IAAI,CAAA;AAElB,MAAA,IAAI,IAAI,CAACmwB,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,QAAA,IAAI,CAACuE,YAAY,CAAC,kBAAkB,CAAC,CAAA;AACvC,OAAA;AACA,MAAA,MAAM4zC,QAAQ,GAAG,IAAI,CAACn4C,KAAK,CAAY,EAAA,CAAA,CAAA;MACvC,IAAI,CAAC1M,IAAI,EAAE,CAAA;MAEX9V,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAAC0oD,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAEhD,MAAA,IAAI,CAACr4B,qBAAqB,CAAC/pB,mBAAmB,EAAE,IAAI,CAAC,CAAA;AAErD,MAAA,IAAI,IAAI,CAAC0B,KAAK,CAACiO,MAAM,IAAI2lD,QAAQ,EAAE;AACjC,QAAA,MAAM9D,GAAG,GAAG72D,IAAI,CAACjB,QAAQ,CAAA;AAEzB,QAAA,IAAI83D,GAAG,CAACzkE,IAAI,KAAK,YAAY,EAAE;AAC7B,UAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAAC5C,YAAY,EAAE;AAAEqJ,YAAAA,EAAE,EAAElG,IAAAA;AAAK,WAAC,CAAC,CAAA;SAC9C,MAAM,IAAI,IAAI,CAAC6H,wBAAwB,CAACgvD,GAAG,CAAC,EAAE;AAC7C,UAAA,IAAI,CAAC5wD,KAAK,CAACxG,MAAM,CAAC1L,kBAAkB,EAAE;AAAEmS,YAAAA,EAAE,EAAElG,IAAAA;AAAK,WAAC,CAAC,CAAA;AACrD,SAAA;AACF,OAAA;MAEA,IAAI,CAAC06D,MAAM,EAAE;QACX,IAAI,CAAC3K,QAAQ,EAAE;AACb,UAAA,IAAI,CAACuK,0BAA0B,CAACt6D,IAAI,CAA8B,CAAA;AACpE,SAAA;AACA,QAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,OAAA;AACF,KAAA;AAEA,IAAA,MAAM++B,IAAI,GAAG,IAAI,CAAC67B,WAAW;AAE3B56D,IAAAA,IAAI,EACJ06D,MAAM,EACNr1D,mBAAmB,CACpB,CAAA;AAED,IAAA,IAAIk1D,OAAO,EAAE;MACX,MAAM;AAAEnoE,QAAAA,IAAAA;OAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;MAC3B,MAAM6B,UAAU,GAAG,IAAI,CAACnC,SAAS,CAAC,aAAa,CAAC,GAC5CyM,uBAAuB,CAAC9gB,IAAI,CAAC,GAC7B8gB,uBAAuB,CAAC9gB,IAAI,CAAC,IAAI,CAAC,IAAI,CAACowB,KAAK,CAAW,EAAA,CAAA,CAAA;AAC3D,MAAA,IAAI5Z,UAAU,IAAI,CAAC,IAAI,CAACiyD,gBAAgB,EAAE,EAAE;AAC1C,QAAA,IAAI,CAAC1wC,cAAc,CAAC1qB,MAAM,CAAC3M,sBAAsB,EAAE;AAAEoT,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AACpE,QAAA,OAAO,IAAI,CAACq1D,UAAU,CAACr1D,QAAQ,CAAC,CAAA;AAClC,OAAA;AACF,KAAA;AAEA,IAAA,OAAO25B,IAAI,CAAA;AACb,GAAA;;AAGA67B,EAAAA,WAAW,CAET56D,IAAkB,EAClB06D,MAAe,EACfr1D,mBAA6C,EAC/B;AACd,IAAA,IAAIq1D,MAAM,EAAE;MAEV,MAAMI,oBAAoB,GAAG96D,IAAkC,CAAA;AAC/D,MAAA,IAAI,CAACw3D,SAAS,CAACsD,oBAAoB,CAAC/7D,QAAQ,EAAE;AAC5C04D,QAAAA,EAAE,EAAE,IAAI,CAAChzD,UAAU,CAACq2D,oBAAoB,EAAE,kBAAkB,CAAA;AAC9D,OAAC,CAAC,CAAA;AACF,MAAA,OAAO96D,IAAI,CAAA;AACb,KAAA;AAEA,IAAA,MAAMoF,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,IAAI25B,IAAI,GAAG,IAAI,CAACg8B,mBAAmB,CAAC11D,mBAAmB,CAAC,CAAA;IACxD,IAAI,IAAI,CAAC+pB,qBAAqB,CAAC/pB,mBAAmB,EAAE,KAAK,CAAC,EAAE,OAAO05B,IAAI,CAAA;AACvE,IAAA,OAAOvrB,cAAc,CAAC,IAAI,CAACzM,KAAK,CAAC3U,IAAI,CAAC,IAAI,CAAC,IAAI,CAACk8B,kBAAkB,EAAE,EAAE;AACpE,MAAA,MAAMtuB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAAqBtsB,QAAQ,CAAC,CAAA;AAC3DpF,MAAAA,IAAI,CAAC6nD,QAAQ,GAAG,IAAI,CAAC9gD,KAAK,CAACxX,KAAK,CAAA;MAChCyQ,IAAI,CAAC3N,MAAM,GAAG,KAAK,CAAA;MACnB2N,IAAI,CAACjB,QAAQ,GAAGggC,IAAI,CAAA;MACpB,IAAI,CAACjpB,IAAI,EAAE,CAAA;AACX,MAAA,IAAI,CAAC0hD,SAAS,CAACz4B,IAAI,EAAE;QACnB04B,EAAE,EAAG14B,IAAI,GAAG,IAAI,CAACt6B,UAAU,CAACzE,IAAI,EAAE,kBAAkB,CAAA;AACtD,OAAC,CAAC,CAAA;AACJ,KAAA;AACA,IAAA,OAAO++B,IAAI,CAAA;AACb,GAAA;;EAIAg8B,mBAAmB,CAEjB11D,mBAA6C,EAC/B;AACd,IAAA,MAAMD,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,MAAMuZ,gBAAgB,GAAG,IAAI,CAAC5X,KAAK,CAAC4X,gBAAgB,CAAA;AACpD,IAAA,MAAMogB,IAAI,GAAG,IAAI,CAACrG,aAAa,CAACrzB,mBAAmB,CAAC,CAAA;IAEpD,IAAI,IAAI,CAACozD,oBAAoB,CAAC15B,IAAI,EAAEpgB,gBAAgB,CAAC,EAAE;AACrD,MAAA,OAAOogB,IAAI,CAAA;AACb,KAAA;AAEA,IAAA,OAAO,IAAI,CAACyG,eAAe,CAACzG,IAAI,EAAE35B,QAAQ,CAAC,CAAA;AAC7C,GAAA;AAEAogC,EAAAA,eAAe,CAEbl+B,IAAkB,EAClBlC,QAAkB,EAClBmC,OAAwB,EACV;AACd,IAAA,MAAMR,KAAK,GAAG;AACZS,MAAAA,mBAAmB,EAAE,KAAK;AAC1BwzD,MAAAA,eAAe,EAAE,IAAI,CAACtN,oBAAoB,CAACpmD,IAAI,CAAC;AAChDI,MAAAA,IAAI,EAAE,KAAA;KACP,CAAA;IACD,GAAG;AACDJ,MAAAA,IAAI,GAAG,IAAI,CAACD,cAAc,CAACC,IAAI,EAAElC,QAAQ,EAAEmC,OAAO,EAAER,KAAK,CAAC,CAAA;;MAG1DA,KAAK,CAACi0D,eAAe,GAAG,KAAK,CAAA;AAC/B,KAAC,QAAQ,CAACj0D,KAAK,CAACW,IAAI,EAAA;AACpB,IAAA,OAAOJ,IAAI,CAAA;AACb,GAAA;;EAMAD,cAAc,CAEZC,IAAkB,EAClBlC,QAAkB,EAClBmC,OAAmC,EACnCR,KAA4B,EACd;IACd,MAAM;AAAE3U,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;AAC3B,IAAA,IAAI,CAACQ,OAAO,IAAInV,IAAI,OAAmB,EAAE;MACvC,OAAO,IAAI,CAAC6oE,SAAS,CAAC3zD,IAAI,EAAElC,QAAQ,EAAEmC,OAAO,EAAER,KAAK,CAAC,CAAA;AACvD,KAAC,MAAM,IAAIgN,eAAe,CAAC3hB,IAAI,CAAC,EAAE;MAChC,OAAO,IAAI,CAACw7D,6BAA6B,CAACtmD,IAAI,EAAElC,QAAQ,EAAE2B,KAAK,CAAC,CAAA;AAClE,KAAA;IAEA,IAAIV,QAAQ,GAAG,KAAK,CAAA;IAEpB,IAAIjU,IAAI,OAAmB,EAAE;AAC3B,MAAA,IAAImV,OAAO,IAAI,IAAI,CAACie,iBAAiB,EAAE,OAA8B,EAAE;QAErEze,KAAK,CAACW,IAAI,GAAG,IAAI,CAAA;AACjB,QAAA,OAAOJ,IAAI,CAAA;AACb,OAAA;AACAP,MAAAA,KAAK,CAACS,mBAAmB,GAAGnB,QAAQ,GAAG,IAAI,CAAA;MAC3C,IAAI,CAACyP,IAAI,EAAE,CAAA;AACb,KAAA;AAEA,IAAA,IAAI,CAACvO,OAAO,IAAI,IAAI,CAACib,KAAK,IAAW,EAAE;MACrC,OAAO,IAAI,CAAC04C,+BAA+B,CACzC5zD,IAAI,EACJlC,QAAQ,EACR2B,KAAK,EACLV,QAAQ,CACT,CAAA;AACH,KAAC,MAAM;AACL,MAAA,MAAM7B,QAAQ,GAAG,IAAI,CAACugB,GAAG,CAAa,CAAA,CAAA,CAAA;MACtC,IAAIvgB,QAAQ,IAAI6B,QAAQ,IAAI,IAAI,CAAC0e,GAAG,IAAQ,EAAE;AAC5C,QAAA,OAAO,IAAI,CAACo2C,WAAW,CAAC7zD,IAAI,EAAElC,QAAQ,EAAE2B,KAAK,EAAEvC,QAAQ,EAAE6B,QAAQ,CAAC,CAAA;AACpE,OAAC,MAAM;QACLU,KAAK,CAACW,IAAI,GAAG,IAAI,CAAA;AACjB,QAAA,OAAOJ,IAAI,CAAA;AACb,OAAA;AACF,KAAA;AACF,GAAA;;EAMA6zD,WAAW,CAET7zD,IAAkB,EAClBlC,QAAkB,EAClB2B,KAA4B,EAC5BvC,QAAiB,EACjB6B,QAAiB,EACgC;AACjD,IAAA,MAAMrG,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAE3BtsB,QAAQ,CAAC,CAAA;IACXpF,IAAI,CAAC5Q,MAAM,GAAGkY,IAAI,CAAA;IAClBtH,IAAI,CAACwE,QAAQ,GAAGA,QAAQ,CAAA;AACxB,IAAA,IAAIA,QAAQ,EAAE;AACZxE,MAAAA,IAAI,CAAC4vB,QAAQ,GAAG,IAAI,CAACqH,eAAe,EAAE,CAAA;MACtC,IAAI,CAACrI,MAAM,CAAa,CAAA,CAAA,CAAA;AAC1B,KAAC,MAAM,IAAI,IAAI,CAACpM,KAAK,KAAgB,EAAE;AACrC,MAAA,IAAIlb,IAAI,CAAClV,IAAI,KAAK,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAACrF,iBAAiB,EAAE;AAAE8L,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AACxD,OAAA;AACA,MAAA,IAAI,CAACS,UAAU,CAACC,cAAc,CAAC,IAAI,CAACiB,KAAK,CAACxX,KAAK,EAAE,IAAI,CAACwX,KAAK,CAAC3B,QAAQ,CAAC,CAAA;AACrEpF,MAAAA,IAAI,CAAC4vB,QAAQ,GAAG,IAAI,CAACjsB,gBAAgB,EAAE,CAAA;AACzC,KAAC,MAAM;MACL3D,IAAI,CAAC4vB,QAAQ,GAAG,IAAI,CAAC2H,eAAe,CAAC,IAAI,CAAC,CAAA;AAC5C,KAAA;IAEA,IAAIxwB,KAAK,CAACS,mBAAmB,EAAE;MAC5BxH,IAAI,CAAgCqG,QAAQ,GAAGA,QAAQ,CAAA;AACxD,MAAA,OAAO,IAAI,CAAC5B,UAAU,CAACzE,IAAI,EAAE,0BAA0B,CAAC,CAAA;AAC1D,KAAC,MAAM;AACL,MAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,kBAAkB,CAAC,CAAA;AAClD,KAAA;AACF,GAAA;;EAGAi7D,SAAS,CAEP3zD,IAAkB,EAClBlC,QAAkB,EAClBmC,OAAmC,EACnCR,KAA4B,EACd;AACd,IAAA,MAAM/G,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;IACvCpF,IAAI,CAAC5Q,MAAM,GAAGkY,IAAI,CAAA;IAClB,IAAI,CAACwO,IAAI,EAAE,CAAA;AACX9V,IAAAA,IAAI,CAACsG,MAAM,GAAG,IAAI,CAAC80D,eAAe,EAAE,CAAA;IACpCr0D,KAAK,CAACW,IAAI,GAAG,IAAI,CAAA;AACjB,IAAA,OAAO,IAAI,CAAC89B,eAAe,CACzB,IAAI,CAAC/gC,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,EACvCoF,QAAQ,EACRmC,OAAO,CACR,CAAA;AACH,GAAA;;EAMA2zD,+BAA+B,CAE7B5zD,IAAkB,EAClBlC,QAAkB,EAClB2B,KAA4B,EAC5BV,QAAiB,EACH;AACd,IAAA,MAAMmmD,yBAAyB,GAAG,IAAI,CAACzlD,KAAK,CAAC+X,sBAAsB,CAAA;IACnE,IAAIzZ,mBAA4C,GAAG,IAAI,CAAA;AAEvD,IAAA,IAAI,CAAC0B,KAAK,CAAC+X,sBAAsB,GAAG,IAAI,CAAA;IACxC,IAAI,CAAChJ,IAAI,EAAE,CAAA;;AAEX,IAAA,MAAM9V,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAC3BtsB,QAAQ,CACT,CAAA;IACDpF,IAAI,CAACsG,MAAM,GAAGgB,IAAI,CAAA;IAClB,MAAM;MAAE0zD,eAAe;AAAExzD,MAAAA,mBAAAA;AAAoB,KAAC,GAAGT,KAAK,CAAA;AAEtD,IAAA,IAAIi0D,eAAe,EAAE;AACnB,MAAA,IAAI,CAACzqC,eAAe,CAACjW,KAAK,CAACuS,kBAAkB,EAAE,CAAC,CAAA;MAChDxnB,mBAAmB,GAAG,IAAIsrB,gBAAgB,EAAE,CAAA;AAC9C,KAAA;AAEA,IAAA,IAAInpB,mBAAmB,EAAE;MAEvBxH,IAAI,CAACqG,QAAQ,GAAGA,QAAQ,CAAA;AAC1B,KAAA;AAEA,IAAA,IAAIA,QAAQ,EAAE;AACZrG,MAAAA,IAAI,CAACwG,SAAS,GAAG,IAAI,CAACi/B,4BAA4B,CAAW,EAAA,CAAA,CAAA;AAC/D,KAAC,MAAM;AACLzlC,MAAAA,IAAI,CAACwG,SAAS,GAAG,IAAI,CAACi/B,4BAA4B,CAEhDn+B,EAAAA,EAAAA,IAAI,CAAClV,IAAI,KAAK,QAAQ,EACtBkV,IAAI,CAAClV,IAAI,KAAK,OAAO;MAErB4N,IAAI,EACJqF,mBAAmB,CACpB,CAAA;AACH,KAAA;IACA,IAAIu0D,YAGyB,GAAG,IAAI,CAACzzD,oBAAoB,CACvDnG,IAAI,EACJwH,mBAAmB,CACpB,CAAA;IAED,IAAIwzD,eAAe,IAAI,IAAI,CAACx2B,qBAAqB,EAAE,IAAI,CAACn+B,QAAQ,EAAE;MAEhEU,KAAK,CAACW,IAAI,GAAG,IAAI,CAAA;AACjB,MAAA,IAAI,CAACgpB,yBAAyB,CAACrrB,mBAAmB,CAAC,CAAA;AACnD,MAAA,IAAI,CAACkrB,eAAe,CAAC7D,iBAAiB,EAAE,CAAA;AACxC,MAAA,IAAI,CAAC6D,eAAe,CAAChW,IAAI,EAAE,CAAA;AAC3Bq/C,MAAAA,YAAY,GAAG,IAAI,CAACt1B,iCAAiC,CACnD,IAAI,CAAC5S,WAAW,CAA4BtsB,QAAQ,CAAC,EACrDw0D,YAAY,CACb,CAAA;AACH,KAAC,MAAM;AACL,MAAA,IAAIoB,eAAe,EAAE;AACnB,QAAA,IAAI,CAAC5rC,qBAAqB,CAAC/pB,mBAAmB,EAAE,IAAI,CAAC,CAAA;AACrD,QAAA,IAAI,CAACkrB,eAAe,CAAChW,IAAI,EAAE,CAAA;AAC7B,OAAA;AACA,MAAA,IAAI,CAAC5T,qBAAqB,CAACizD,YAAY,CAAC,CAAA;AAC1C,KAAA;AAEA,IAAA,IAAI,CAAC7yD,KAAK,CAAC+X,sBAAsB,GAAG0tC,yBAAyB,CAAA;AAE7D,IAAA,OAAOoN,YAAY,CAAA;AACrB,GAAA;AAEAjzD,EAAAA,qBAAqB,CACnB3G,IAAiD,EACjD6hC,mBAA6B,EAC7B;IACA,IAAI,CAACi1B,oBAAoB,CAAC92D,IAAI,CAACwG,SAAS,EAAEq7B,mBAAmB,CAAC,CAAA;AAChE,GAAA;;AAIA+rB,EAAAA,6BAA6B,CAE3BtmD,IAAkB,EAClBlC,QAAkB,EAClB2B,KAA4B,EACA;AAC5B,IAAA,MAAM/G,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAA6BtsB,QAAQ,CAAC,CAAA;IACnEpF,IAAI,CAACq7D,GAAG,GAAG/zD,IAAI,CAAA;IACftH,IAAI,CAACs7D,KAAK,GAAG,IAAI,CAAClU,aAAa,CAAC,IAAI,CAAC,CAAA;IACrC,IAAIrgD,KAAK,CAACS,mBAAmB,EAAE;AAC7B,MAAA,IAAI,CAACvB,KAAK,CAACxG,MAAM,CAACpG,0BAA0B,EAAE;AAAE6M,QAAAA,EAAE,EAAEd,QAAAA;AAAS,OAAC,CAAC,CAAA;AACjE,KAAA;AACA,IAAA,OAAO,IAAI,CAACX,UAAU,CAACzE,IAAI,EAAE,0BAA0B,CAAC,CAAA;AAC1D,GAAA;EAEA0tD,oBAAoB,CAACpmD,IAAkB,EAAW;AAChD,IAAA,OACEA,IAAI,CAAClV,IAAI,KAAK,YAAY,IAC1BkV,IAAI,CAACtP,IAAI,KAAK,OAAO,IACrB,IAAI,CAAC+O,KAAK,CAACoB,aAAa,CAACha,KAAK,KAAKmZ,IAAI,CAAC/Y,GAAG,IAC3C,CAAC,IAAI,CAAC+/B,kBAAkB,EAAE;AAE1BhnB,IAAAA,IAAI,CAAC/Y,GAAG,GAAG+Y,IAAI,CAAChZ,KAAK,KAAK,CAAC,IAC3BgZ,IAAI,CAAChZ,KAAK,KAAK,IAAI,CAACyY,KAAK,CAAC4X,gBAAgB,CAAA;AAE9C,GAAA;AAEAxY,EAAAA,oBAAoB,CAClBnG,IAAe,EACfqG,QAAiB,EACd;AACH,IAAA,IAAIrG,IAAI,CAACsG,MAAM,CAAClU,IAAI,KAAK,QAAQ,EAAE;AACjC,MAAA,IAAI4N,IAAI,CAACwG,SAAS,CAACvX,MAAM,KAAK,CAAC,EAAE;AAGxB,QAAA;AACL,UAAA,IAAI,CAAC,IAAI,CAACwX,SAAS,CAAC,kBAAkB,CAAC,EAAE;AACvC,YAAA,IAAI,CAACsgB,YAAY,CAAC,kBAAkB,CAAC,CAAA;AACvC,WAAA;AACF,SAAA;AACF,OAAA;AACA,MAAA,IAAI/mB,IAAI,CAACwG,SAAS,CAACvX,MAAM,KAAK,CAAC,IAAI+Q,IAAI,CAACwG,SAAS,CAACvX,MAAM,GAAG,CAAC,EAAE;AAC5D,QAAA,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAAClK,eAAe,EAAE;AACjC2Q,UAAAA,EAAE,EAAElG,IAAI;AACRxK,UAAAA,gBAAgB,EACd,IAAI,CAACiR,SAAS,CAAC,kBAAkB,CAAC,IAClC,IAAI,CAACA,SAAS,CAAC,kBAAkB,CAAC,GAC9B,CAAC,GACD,CAAA;AACR,SAAC,CAAC,CAAA;AACJ,OAAC,MAAM;AACL,QAAA,KAAK,MAAMowD,GAAG,IAAI72D,IAAI,CAACwG,SAAS,EAAE;AAChC,UAAA,IAAIqwD,GAAG,CAACzkE,IAAI,KAAK,eAAe,EAAE;AAChC,YAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAAC/J,wBAAwB,EAAE;AAAEwQ,cAAAA,EAAE,EAAE2wD,GAAAA;AAAI,aAAC,CAAC,CAAA;AAC1D,WAAA;AACF,SAAA;AACF,OAAA;AACF,KAAA;IACA,OAAO,IAAI,CAACpyD,UAAU,CACpBzE,IAAI,EACJqG,QAAQ,GAAG,wBAAwB,GAAG,gBAAgB,CACvD,CAAA;AACH,GAAA;EAEAo/B,4BAA4B,CAE1B1D,KAAgB,EAChBw5B,aAAuB,EACvBC,gBAA0B,EAC1BC,YAA4B,EAC5Bp2D,mBAA6C,EACL;IACxC,MAAM8xD,IAAoB,GAAG,EAAE,CAAA;IAC/B,IAAI75B,KAAK,GAAG,IAAI,CAAA;AAChB,IAAA,MAAMo+B,6BAA6B,GAAG,IAAI,CAAC30D,KAAK,CAAC0Y,0BAA0B,CAAA;AAC3E,IAAA,IAAI,CAAC1Y,KAAK,CAAC0Y,0BAA0B,GAAG,KAAK,CAAA;AAE7C,IAAA,OAAO,CAAC,IAAI,CAACsF,GAAG,CAACgd,KAAK,CAAC,EAAE;AACvB,MAAA,IAAIzE,KAAK,EAAE;AACTA,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;QACL,IAAI,CAAC1O,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB,QAAA,IAAI,IAAI,CAACpM,KAAK,CAACuf,KAAK,CAAC,EAAE;AACrB,UAAA,IACEw5B,aAAa,IACb,CAAC,IAAI,CAAC90D,SAAS,CAAC,kBAAkB,CAAC,IACnC,CAAC,IAAI,CAACA,SAAS,CAAC,kBAAkB,CAAC,EACnC;AACA,YAAA,IAAI,CAACR,KAAK,CAACxG,MAAM,CAACnK,+BAA+B,EAAE;AACjD4Q,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACC,eAAAA;AACjB,aAAC,CAAC,CAAA;AACJ,WAAA;AACA,UAAA,IAAIy0D,YAAY,EAAE;AAChB,YAAA,IAAI,CAACE,2BAA2B,CAACF,YAAY,CAAC,CAAA;AAChD,WAAA;UACA,IAAI,CAAC3lD,IAAI,EAAE,CAAA;AACX,UAAA,MAAA;AACF,SAAA;AACF,OAAA;AAEAqhD,MAAAA,IAAI,CAACzzD,IAAI,CACP,IAAI,CAACk4D,iBAAiB,CAAC,KAAK,EAAEv2D,mBAAmB,EAAEm2D,gBAAgB,CAAC,CACrE,CAAA;AACH,KAAA;AAEA,IAAA,IAAI,CAACz0D,KAAK,CAAC0Y,0BAA0B,GAAGi8C,6BAA6B,CAAA;AAErE,IAAA,OAAOvE,IAAI,CAAA;AACb,GAAA;AAEA3yB,EAAAA,qBAAqB,GAAY;IAC/B,OAAO,IAAI,CAAChiB,KAAK,CAAA,EAAA,CAAU,IAAI,CAAC,IAAI,CAAC8L,kBAAkB,EAAE,CAAA;AAC3D,GAAA;AAEAgW,EAAAA,iCAAiC,CAE/BtkC,IAAuC,EACvCukC,IAAsB,EACK;AAAA,IAAA,IAAA,WAAA,CAAA;AAC3B,IAAA,IAAI,CAACzmB,iCAAiC,CAACymB,IAAI,CAAC,CAAA;IAC5C,IAAI,CAAC3V,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB,IAAA,IAAI,CAACoX,oBAAoB,CACvBhmC,IAAI,EACJukC,IAAI,CAAC/9B,SAAS,EACd,IAAI,iBACJ+9B,IAAI,CAAC1iC,KAAK,KAAV,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAYs+B,gBAAgB,CAC7B,CAAA;IAED,IAAIoE,IAAI,CAAChoB,aAAa,EAAE;AACtBD,MAAAA,gBAAgB,CAACtc,IAAI,EAAEukC,IAAI,CAAChoB,aAAa,CAAC,CAAA;AAC5C,KAAA;AAEA,IAAA,IAAIgoB,IAAI,CAACj+B,MAAM,CAAC2V,gBAAgB,EAAE;MAChCK,gBAAgB,CAACtc,IAAI,EAAEukC,IAAI,CAACj+B,MAAM,CAAC2V,gBAAgB,CAAC,CAAA;AACtD,KAAA;AACA,IAAA,OAAOjc,IAAI,CAAA;AACb,GAAA;;AAIAo7D,EAAAA,eAAe,GAA6B;AAC1C,IAAA,MAAMh2D,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,OAAO,IAAI,CAACogC,eAAe,CAAC,IAAI,CAAC9M,aAAa,EAAE,EAAEtzB,QAAQ,EAAE,IAAI,CAAC,CAAA;AACnE,GAAA;;EAcAszB,aAAa,CAEXrzB,mBAA6C,EAC/B;AACd,IAAA,IAAIrF,IAAI,CAAA;IACR,IAAI6G,UAAgC,GAAG,IAAI,CAAA;IAE3C,MAAM;AAAEzU,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;AAC3B,IAAA,QAAQ3U,IAAI;AACV,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAACypE,UAAU,EAAE,CAAA;AAE1B,MAAA,KAAA,EAAA;AACE77D,QAAAA,IAAI,GAAG,IAAI,CAACuE,SAAS,EAA6B,CAAA;QAClD,IAAI,CAACuR,IAAI,EAAE,CAAA;AAEX,QAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAQ,EAAE;AACtB,UAAA,OAAO,IAAI,CAACs5C,uBAAuB,CAAC97D,IAAI,CAA2B,CAAA;AACrE,SAAA;AAEA,QAAA,IAAI,CAAC,IAAI,CAACwiB,KAAK,IAAW,EAAE;AAC1B,UAAA,IAAI,CAACvc,KAAK,CAACxG,MAAM,CAAC5D,iBAAiB,EAAE;AACnCqK,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACC,eAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,OAAO,IAAI,CAACvC,UAAU,CAACzE,IAAI,EAAE,QAAQ,CAAC,CAAA;AACxC,MAAA,KAAA,EAAA;AACEA,QAAAA,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;QACvB,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,QAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAEhD,MAAA,KAAA,EAAA;AAAa,QAAA;UACX,OAAO,IAAI,CAAC+7D,OAAO,CAAC,IAAI,CAACx3D,SAAS,EAAE,EAAE,KAAK,CAAC,CAAA;AAC9C,SAAA;AAEA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AAAqB,QAAA;UACnB,IAAI,CAACikB,UAAU,EAAE,CAAA;UACjB,OAAO,IAAI,CAACjoB,kBAAkB,CAAC,IAAI,CAACwG,KAAK,CAACxX,KAAK,CAAC,CAAA;AAClD,SAAA;AAEA,MAAA,KAAA,GAAA;QACE,OAAO,IAAI,CAAC+R,mBAAmB,CAAC,IAAI,CAACyF,KAAK,CAACxX,KAAK,CAAC,CAAA;AAEnD,MAAA,KAAA,GAAA;QACE,OAAO,IAAI,CAACuR,kBAAkB,CAAC,IAAI,CAACiG,KAAK,CAACxX,KAAK,CAAC,CAAA;AAElD,MAAA,KAAA,GAAA;QACE,OAAO,IAAI,CAAC2R,mBAAmB,CAAC,IAAI,CAAC6F,KAAK,CAACxX,KAAK,CAAC,CAAA;AAEnD,MAAA,KAAA,GAAA;QACE,OAAO,IAAI,CAAC8R,kBAAkB,CAAC,IAAI,CAAC0F,KAAK,CAACxX,KAAK,CAAC,CAAA;AAElD,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAACgS,gBAAgB,EAAE,CAAA;AAEhC,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAACC,mBAAmB,CAAC,IAAI,CAAC,CAAA;AACvC,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAACA,mBAAmB,CAAC,KAAK,CAAC,CAAA;AAExC,MAAA,KAAA,EAAA;AAAgB,QAAA;AACd,UAAA,MAAM+jC,UAAU,GAAG,IAAI,CAACx+B,KAAK,CAAC4X,gBAAgB,KAAK,IAAI,CAAC5X,KAAK,CAACzY,KAAK,CAAA;AACnE,UAAA,OAAO,IAAI,CAACg3C,kCAAkC,CAACC,UAAU,CAAC,CAAA;AAC5D,SAAA;AAEA,MAAA,KAAA,CAAA,CAAA;AACA,MAAA,KAAA,CAAA;AAAsB,QAAA;AACpB,UAAA,OAAO,IAAI,CAACzD,cAAc,CACxB,IAAI,CAAC/6B,KAAK,CAAC3U,IAAI,MAAmB,GAA+B,CAAA,GAAA,CAAA,EAC9C,KAAK,EACV,IAAI,CACnB,CAAA;AACH,SAAA;AACA,MAAA,KAAA,CAAA;AAAkB,QAAA;UAChB,OAAO,IAAI,CAAC0vC,cAAc,CAAA,CAAA,EAEL,IAAI,EACT,KAAK,EACnBz8B,mBAAmB,CACpB,CAAA;AACH,SAAA;AACA,MAAA,KAAA,CAAA,CAAA;AACA,MAAA,KAAA,CAAA;AAAoB,QAAA;AAClB,UAAA,OAAO,IAAI,CAACwjD,eAAe,CACzB,IAAI,CAAC9hD,KAAK,CAAC3U,IAAI,MAAiB,GAA2B,CAAA,GAAA,CAAA,EAC3C,KAAK,EACN,IAAI,CACpB,CAAA;AACH,SAAA;AACA,MAAA,KAAA,CAAA;AAAgB,QAAA;UACd,OAAO,IAAI,CAACy2D,eAAe,CAAA,CAAA,EAET,KAAK,EACN,KAAK,EACpBxjD,mBAAmB,CACpB,CAAA;AACH,SAAA;AACA,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAAC22D,2BAA2B,EAAE,CAAA;AAE3C,MAAA,KAAA,EAAA;AACEn1D,QAAAA,UAAU,GAAG,IAAI,CAACo1D,eAAe,EAAE,CAAA;AAErC,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAClQ,UAAU,CACpB,IAAI,CAACoF,mBAAmB,CAACtqD,UAAU,EAAE,IAAI,CAACtC,SAAS,EAAE,CAAC,EACtD,KAAK,CACN,CAAA;AAEH,MAAA,KAAA,EAAA;QACE,OAAO,IAAI,CAAC23D,mBAAmB,EAAE,CAAA;AAEnC,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAC9U,aAAa,CAAC,KAAK,CAAC,CAAA;;AAIlC,MAAA,KAAA,EAAA;AAAqB,QAAA;AACnBpnD,UAAAA,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;UACvB,IAAI,CAACuR,IAAI,EAAE,CAAA;UACX9V,IAAI,CAAC5Q,MAAM,GAAG,IAAI,CAAA;UAClB,MAAMkX,MAAM,GAAItG,IAAI,CAACsG,MAAM,GAAG,IAAI,CAAC80D,eAAe,EAAG,CAAA;AACrD,UAAA,IAAI90D,MAAM,CAAClU,IAAI,KAAK,kBAAkB,EAAE;AACtC,YAAA,OAAO,IAAI,CAACqS,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,WAAC,MAAM;AACL,YAAA,MAAM,IAAI,CAACiG,KAAK,CAACxG,MAAM,CAAC/D,eAAe,EAAE;AAAEwK,cAAAA,EAAE,EAAEI,MAAAA;AAAO,aAAC,CAAC,CAAA;AAC1D,WAAA;AACF,SAAA;AAEA,MAAA,KAAA,GAAA;AAAqB,QAAA;AAOnB,UAAA,IAAI,CAACL,KAAK,CAACxG,MAAM,CAAC/F,mBAAmB,EAAE;AACrCwM,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAQ;AACvB3W,YAAAA,cAAc,EAAE,IAAI,CAACsY,KAAK,CAACxX,KAAAA;AAC7B,WAAC,CAAC,CAAA;UACF,OAAO,IAAI,CAACoU,gBAAgB,EAAE,CAAA;AAChC,SAAA;AAEA,MAAA,KAAA,EAAA;AAAsB,QAAA;AACpB,UAAA,OAAO,IAAI,CAACw4D,iCAAiC,CAAA,EAAA,EAAY,GAAG,CAAC,CAAA;AAC/D,SAAA;AAEA,MAAA,KAAA,EAAA;AAAmB,QAAA;AACjB,UAAA,OAAO,IAAI,CAACA,iCAAiC,CAAA,EAAA,EAAgB,GAAG,CAAC,CAAA;AACnE,SAAA;AAEA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AAAkB,QAAA;AAChB,UAAA,OAAO,IAAI,CAACC,mBAAmB,CAAC,MAAM,CAAC,CAAA;AACzC,SAAA;AAEA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA,CAAA;AACA,MAAA,KAAA,EAAA;AAAc,QAAA;UACZ,MAAMC,YAAY,GAAG,IAAI,CAACz4D,eAAe,CACvC,kBAAkB,EAClB,UAAU,CACX,CAAA;AAED,UAAA,IAAIy4D,YAAY,EAAE;AAChB,YAAA,OAAO,IAAI,CAACD,mBAAmB,CAACC,YAAY,CAAC,CAAA;AAC/C,WAAC,MAAM;YACL,MAAM,IAAI,CAACrlE,UAAU,EAAE,CAAA;AACzB,WAAA;AACF,SAAA;AAEA,MAAA,KAAA,EAAA;AAAY,QAAA;AACV,UAAA,MAAM2wB,WAAW,GAAG,IAAI,CAAChK,KAAK,CAACiK,WAAW,CAAC,IAAI,CAACvC,cAAc,EAAE,CAAC,CAAA;UACjE,IACE1Q,iBAAiB,CAACgT,WAAW,CAAC;AAC9BA,UAAAA,WAAW,OAA0B,EACrC;YACA,IAAI,CAACyC,eAAe,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;AACnD,YAAA,MAAA;AACF,WAAC,MAAM;YACL,MAAM,IAAI,CAACpzB,UAAU,EAAE,CAAA;AACzB,WAAA;AACF,SAAA;AAEA,MAAA;AACE,QAAA,IAAI6b,iBAAiB,CAACzgB,IAAI,CAAC,EAAE;AAC3B,UAAA,IACE,IAAI,CAAC07B,YAAY,CAAY,GAAA,CAAA,IAC7B,IAAI,CAACtI,iBAAiB,EAAE,KAAA,GAA6B,IACrD,CAAC,IAAI,CAACgJ,qBAAqB,EAAE,EAC7B;YACA,OAAO,IAAI,CAAC8tC,qBAAqB,EAAE,CAAA;AACrC,WAAA;AACA,UAAA,MAAM/2B,UAAU,GAAG,IAAI,CAACx+B,KAAK,CAAC4X,gBAAgB,KAAK,IAAI,CAAC5X,KAAK,CAACzY,KAAK,CAAA;AACnE,UAAA,MAAMwxB,WAAW,GAAG,IAAI,CAAC/Y,KAAK,CAAC+Y,WAAW,CAAA;AAC1C,UAAA,MAAM/b,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;AAEjC,UAAA,IACE,CAACzX,WAAW,IACZ/b,EAAE,CAAC/L,IAAI,KAAK,OAAO,IACnB,CAAC,IAAI,CAACs2B,kBAAkB,EAAE,EAC1B;YACA,MAAM;AAAEl8B,cAAAA,IAAAA;aAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;YAC3B,IAAI3U,IAAI,OAAiB,EAAE;AACzB,cAAA,IAAI,CAAC0rB,iCAAiC,CAAC/Z,EAAE,CAAC,CAAA;cAC1C,IAAI,CAAC+R,IAAI,EAAE,CAAA;cACX,OAAO,IAAI,CAACymD,4BAA4B,CACtC,IAAI,CAAC30D,eAAe,CAAC7D,EAAE,CAAC,CACzB,CAAA;AACH,aAAC,MAAM,IAAI8O,iBAAiB,CAACzgB,IAAI,CAAC,EAAE;AAIlC,cAAA,IAAI,IAAI,CAACozB,iBAAiB,EAAE,OAAuB,EAAE;gBAInD,OAAO,IAAI,CAACg3C,4BAA4B,CACtC,IAAI,CAAC50D,eAAe,CAAC7D,EAAE,CAAC,CACzB,CAAA;AACH,eAAC,MAAM;AAGL,gBAAA,OAAOA,EAAE,CAAA;AACX,eAAA;AACF,aAAC,MAAM,IAAI3R,IAAI,KAAA,EAAW,EAAE;AAC1B,cAAA,IAAI,CAAC0rB,iCAAiC,CAAC/Z,EAAE,CAAC,CAAA;AAC1C,cAAA,OAAO,IAAI,CAACg4D,OAAO,CAAC,IAAI,CAACn0D,eAAe,CAAC7D,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;AACrD,aAAA;AACF,WAAA;AAEA,UAAA,IACEwhC,UAAU,IACV,IAAI,CAAC/iB,KAAK,CAAA,EAAA,CAAU,IACpB,CAAC,IAAI,CAAC8L,kBAAkB,EAAE,EAC1B;YACA,IAAI,CAACxY,IAAI,EAAE,CAAA;AACX,YAAA,OAAO,IAAI,CAACkwB,oBAAoB,CAC9B,IAAI,CAACp+B,eAAe,CAAC7D,EAAE,CAAC,EACxB,CAACA,EAAE,CAAC,EACJ,KAAK,CACN,CAAA;AACH,WAAA;AAEA,UAAA,OAAOA,EAAE,CAAA;AACX,SAAC,MAAM;UACL,MAAM,IAAI,CAAC/M,UAAU,EAAE,CAAA;AACzB,SAAA;AAAC,KAAA;AAEP,GAAA;;AAYAmlE,EAAAA,iCAAiC,CAC/BM,cAAyB,EACzBC,eAAuB,EACT;IACd,MAAML,YAAY,GAAG,IAAI,CAACz4D,eAAe,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAA;AAEzE,IAAA,IAAIy4D,YAAY,EAAE;AAKhB,MAAA,IAAI,CAACt1D,KAAK,CAAC3U,IAAI,GAAGqqE,cAAc,CAAA;AAChC,MAAA,IAAI,CAAC11D,KAAK,CAACxX,KAAK,GAAGmtE,eAAe,CAAA;AAGlC,MAAA,IAAI,CAAC31D,KAAK,CAAClI,GAAG,EAAE,CAAA;AAChB,MAAA,IAAI,CAACkI,KAAK,CAACxY,GAAG,EAAE,CAAA;AAGhB,MAAA,IAAI,CAACwY,KAAK,CAACkB,MAAM,GAAGvZ,8BAA8B,CAAC,IAAI,CAACqY,KAAK,CAACkB,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;AAEzE,MAAA,OAAO,IAAI,CAACm0D,mBAAmB,CAACC,YAAY,CAAC,CAAA;AAC/C,KAAC,MAAM;MACL,MAAM,IAAI,CAACrlE,UAAU,EAAE,CAAA;AACzB,KAAA;AACF,GAAA;;EAQAolE,mBAAmB,CAACC,YAAoB,EAAgB;AACtD,IAAA,MAAMr8D,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAoB,CAAA;AAC/C,IAAA,MAAMa,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,IAAA,MAAMyoD,SAAS,GAAG,IAAI,CAAC9mD,KAAK,CAAC3U,IAAI,CAAA;;IAGjC,IAAI,CAAC0jB,IAAI,EAAE,CAAA;;IAKX,OAAO,IAAI,CAAC6mD,oBAAoB,CAAC38D,IAAI,EAAEoF,QAAQ,EAAEi3D,YAAY,EAAExO,SAAS,CAAC,CAAA;AAC3E,GAAA;;EAeA8O,oBAAoB,CAClB38D,IAAoB,EACpBoF,QAAkB,EAClBi3D,YAAoB,EACpBxO,SAAoB,EACN;IACd,IACE,IAAI,CAAC+O,+BAA+B,CAACP,YAAY,EAAEj3D,QAAQ,EAAEyoD,SAAS,CAAC,EACvE;;AAMA,MAAA,MAAMnG,QAAQ,GACZ2U,YAAY,KAAK,OAAO,GACpB,+BAA+B;MAG/B,gBAAgB,CAAA;AAEtB,MAAA,IAAI,CAAC,IAAI,CAACQ,uCAAuC,EAAE,EAAE;AACnD,QAAA,IAAI,CAAC52D,KAAK;AAIRo2D,QAAAA,YAAY,KAAK,OAAO,GACpB58D,MAAM,CAACtB,sBAAsB;QAE7BsB,MAAM,CAAC/B,gBAAgB,EAC3B;AAAEwI,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CACjB,CAAA;AACH,OAAA;;MAIA,IAAI,CAAC03D,sBAAsB,EAAE,CAAA;AAE7B,MAAA,OAAO,IAAI,CAACr4D,UAAU,CAACzE,IAAI,EAAE0nD,QAAQ,CAAC,CAAA;AACxC,KAAC,MAAM;AAEL,MAAA,MAAM,IAAI,CAACzhD,KAAK,CAACxG,MAAM,CAAC9B,0BAA0B,EAAE;AAClDuI,QAAAA,EAAE,EAAEd,QAAQ;QACZxH,KAAK,EAAEgW,cAAc,CAACi6C,SAAS,CAAA;AACjC,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;AAWA+O,EAAAA,+BAA+B,CAC7BP,YAAoB,EACpBj3D,QAAkB,EAClByoD,SAAoB,EACX;AACT,IAAA,QAAQwO,YAAY;AAClB,MAAA,KAAK,MAAM;AAAE,QAAA;AACX,UAAA,OAAO,IAAI,CAAC51D,SAAS,CAAC,CACpB,kBAAkB,EAClB;YAEEihB,UAAU,EAAE9T,cAAc,CAACi6C,SAAS,CAAA;AACtC,WAAC,CACF,CAAC,CAAA;AACJ,SAAA;AACA,MAAA,KAAK,OAAO;AACV,QAAA,OAAOA,SAAS,KAAY,EAAA,CAAA;AAC9B,MAAA;AACE,QAAA,MAAM,IAAI,CAAC5nD,KAAK,CAACxG,MAAM,CAAChC,0BAA0B,EAAE;AAAEyI,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AAAC,KAAA;AAE5E,GAAA;;EAGAo3D,4BAA4B,CAE1Bx8D,IAAuC,EACZ;AAG3B,IAAA,IAAI,CAACqwB,SAAS,CAAC/V,KAAK,CAACqT,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC0C,SAAS,CAAC7C,QAAQ,CAAC,CAAC,CAAA;AAClE,IAAA,MAAMjrB,MAAM,GAAG,CAAC,IAAI,CAACg1B,eAAe,EAAE,CAAC,CAAA;AACvC,IAAA,IAAI,CAAClH,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,IAAA,IAAI,IAAI,CAACgU,qBAAqB,EAAE,EAAE;AAChC,MAAA,IAAI,CAACtoB,KAAK,CAACxG,MAAM,CAAChI,yBAAyB,EAAE;AAC3CyO,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAA;AAC5B,OAAC,CAAC,CAAA;AACJ,KAAA;IACA,IAAI,CAACqO,MAAM,CAAU,EAAA,CAAA,CAAA;IAErB,OAAO,IAAI,CAACoX,oBAAoB,CAAChmC,IAAI,EAAEuC,MAAM,EAAE,IAAI,CAAC,CAAA;AACtD,GAAA;;AAIAw5D,EAAAA,OAAO,CAEL/7D,IAA4B,EAC5BkC,OAAgB,EACA;AAChB,IAAA,IAAI,CAAC6kB,YAAY,CAAC,eAAe,CAAC,CAAA;AAClC,IAAA,IAAI7kB,OAAO,EAAE;AACX,MAAA,IAAI,CAAC6kB,YAAY,CAAC,oBAAoB,CAAC,CAAA;AACzC,KAAA;IACA/mB,IAAI,CAAC+kC,KAAK,GAAG7iC,OAAO,CAAA;IACpB,IAAI,CAAC4T,IAAI,EAAE,CAAA;AACX,IAAA,MAAMga,SAAS,GAAG,IAAI,CAAC/oB,KAAK,CAAC2Y,MAAM,CAAA;AACnC,IAAA,IAAI,CAAC3Y,KAAK,CAAC2Y,MAAM,GAAG,EAAE,CAAA;AACtB,IAAA,IAAIxd,OAAO,EAAE;AAGX,MAAA,IAAI,CAACmuB,SAAS,CAAC/V,KAAK,CAAC2S,WAAW,CAAC,CAAA;AACjCjtB,MAAAA,IAAI,CAACiD,IAAI,GAAG,IAAI,CAACmwD,UAAU,EAAE,CAAA;AAC7B,MAAA,IAAI,CAAC/iC,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACvB,KAAC,MAAM;AACLva,MAAAA,IAAI,CAACiD,IAAI,GAAG,IAAI,CAACmwD,UAAU,EAAE,CAAA;AAC/B,KAAA;AAEA,IAAA,IAAI,CAACrsD,KAAK,CAAC2Y,MAAM,GAAGoQ,SAAS,CAAA;AAC7B,IAAA,OAAO,IAAI,CAACrrB,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,GAAA;;AAGA67D,EAAAA,UAAU,GAAY;AACpB,IAAA,MAAM77D,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAW,CAAA;IACtC,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,IAAA,IACE,IAAI,CAAC0M,KAAK,IAAW,IACrB,CAAC,IAAI,CAAChI,KAAK,CAACpW,gBAAgB,IAC5B,CAAC,IAAI,CAAC/D,OAAO,CAACi2D,uBAAuB,EACrC;AACA,MAAA,IAAI,CAACrwD,KAAK,CAACxG,MAAM,CAACtF,eAAe,EAAE;AAAE+L,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AAClD,KAAC,MAAM,IACL,CAAC,IAAI,CAACwa,KAAK,CAACX,UAAU,IACtB,CAAC,IAAI,CAACxZ,OAAO,CAACi2D,uBAAuB,EACrC;AACA,MAAA,IAAI,CAACrwD,KAAK,CAACxG,MAAM,CAACpE,eAAe,EAAE;AAAE6K,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AAClD,KAAA;AAEA,IAAA,IACE,CAAC,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAW,IACtB,CAAC,IAAI,CAACA,KAAK,GAAa,IACxB,CAAC,IAAI,CAACA,KAAK,IAAQ,EACnB;AACA,MAAA,IAAI,CAACvc,KAAK,CAACxG,MAAM,CAACtD,gBAAgB,EAAE;AAAE+J,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AACnD,KAAA;AAEA,IAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,OAAO,CAAC,CAAA;AACvC,GAAA;AAEA2D,EAAAA,gBAAgB,GAAkB;AAChC,IAAA,MAAM3D,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAiB,CAAA;AAC5C,IAAA,MAAMR,EAAE,GAAG,IAAI,CAAC2tB,WAAW;IAGzBhjC,8BAA8B,CAAC,IAAI,CAACqY,KAAK,CAAC3B,QAAQ,EAAE,CAAC,CAAC,CACvD,CAAA;AACD,IAAA,MAAMpN,IAAI,GAAG,IAAI,CAAC+O,KAAK,CAACxX,KAAK,CAAA;IAC7B,IAAI,CAACumB,IAAI,EAAE,CAAA;IACX9V,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAAC85B,gBAAgB,CAAC95B,EAAE,EAAE/L,IAAI,CAAC,CAAA;AACzC,IAAA,OAAO,IAAI,CAACyM,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,CAAA;AAC7C,GAAA;AAEAg8D,EAAAA,2BAA2B,GAEc;AACvC,IAAA,MAAMh8D,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAyC,CAAA;;IAOpE,IAAI,CAACuR,IAAI,EAAE,CAAA;;IAEX,IAAI,IAAI,CAACua,SAAS,CAAC7C,QAAQ,IAAI,IAAI,CAAChL,KAAK,CAAA,EAAA,CAAQ,EAAE;AACjD,MAAA,MAAMu6C,IAAI,GAAG,IAAI,CAACl/B,gBAAgB,CAChC,IAAI,CAACj2B,eAAe,CAAe5H,IAAI,CAAC,EACxC,UAAU,CACX,CAAA;MACD,IAAI,CAAC8V,IAAI,EAAE,CAAA;AAEX,MAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,GAAA,CAAU,EAAE;AACxB,QAAA,IAAI,CAACuE,YAAY,CAAC,cAAc,CAAC,CAAA;OAClC,MAAM,IAAI,CAAC,IAAI,CAACtgB,SAAS,CAAC,cAAc,CAAC,EAAE;QAE1C,IAAI,CAACzP,UAAU,EAAE,CAAA;AACnB,OAAA;MACA,OAAO,IAAI,CAACgmE,iBAAiB,CAC3Bh9D,IAAI,EACJ+8D,IAAI,EACJ,MAAM,CACP,CAAA;AACH,KAAA;AACA,IAAA,OAAO,IAAI,CAACE,aAAa,CAACj9D,IAAI,CAAiC,CAAA;AACjE,GAAA;AAEAg9D,EAAAA,iBAAiB,CACfh9D,IAA4B,EAC5B+8D,IAAkB,EAClBvgB,YAAoB,EACJ;IAChBx8C,IAAI,CAAC+8D,IAAI,GAAGA,IAAI,CAAA;AAEhB,IAAA,MAAMj9C,WAAW,GAAG,IAAI,CAAC/Y,KAAK,CAAC+Y,WAAW,CAAA;IAE1C9f,IAAI,CAAC4vB,QAAQ,GAAG,IAAI,CAAC2H,eAAe,CAAC,IAAI,CAAC,CAAA;IAE1C,IAAIv3B,IAAI,CAAC4vB,QAAQ,CAAC53B,IAAI,KAAKwkD,YAAY,IAAI18B,WAAW,EAAE;AACtD,MAAA,IAAI,CAAC7Z,KAAK,CAACxG,MAAM,CAAC3D,uBAAuB,EAAE;QACzCoK,EAAE,EAAElG,IAAI,CAAC4vB,QAAQ;QACjB7zB,MAAM,EAAEghE,IAAI,CAAC/kE,IAAI;AACjBgE,QAAAA,qBAAqB,EAAEwgD,YAAAA;AACzB,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAO,IAAI,CAAC/3C,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,GAAA;;EAGA87D,uBAAuB,CAAC97D,IAA4B,EAAkB;AACpE,IAAA,MAAM+D,EAAE,GAAG,IAAI,CAAC85B,gBAAgB,CAC9B,IAAI,CAACj2B,eAAe,CAAe5H,IAAI,CAAC,EACxC,QAAQ,CACT,CAAA;IACD,IAAI,CAAC8V,IAAI,EAAE,CAAA;;AAEX,IAAA,IAAI,IAAI,CAACgY,YAAY,CAAA,GAAA,CAAU,EAAE;AAC/B,MAAA,IAAI,CAAC,IAAI,CAACxY,QAAQ,EAAE;AAClB,QAAA,IAAI,CAACrP,KAAK,CAACxG,MAAM,CAAClP,uBAAuB,EAAE;AAAE2V,UAAAA,EAAE,EAAEnC,EAAAA;AAAG,SAAC,CAAC,CAAA;AACxD,OAAA;MACA,IAAI,CAACwX,iBAAiB,GAAG,IAAI,CAAA;AAC/B,KAAA;IAEA,OAAO,IAAI,CAACyhD,iBAAiB,CAACh9D,IAAI,EAAE+D,EAAE,EAAE,MAAM,CAAC,CAAA;AACjD,GAAA;AAEA65B,EAAAA,kBAAkB,CAChBruC,KAAU,EACV6C,IAAe,EACf4N,IAAS,EACN;IACH,IAAI,CAAC6tB,QAAQ,CAAC7tB,IAAI,EAAE,UAAU,EAAEzQ,KAAK,CAAC,CAAA;IACtC,IAAI,CAACs+B,QAAQ,CAAC7tB,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC2d,KAAK,CAAC+C,KAAK,CAAC1gB,IAAI,CAAC1R,KAAK,EAAE,IAAI,CAACyY,KAAK,CAACxY,GAAG,CAAC,CAAC,CAAA;IACxEyR,IAAI,CAACzQ,KAAK,GAAGA,KAAK,CAAA;IAClB,IAAI,CAACumB,IAAI,EAAE,CAAA;AACX,IAAA,OAAO,IAAI,CAACrR,UAAU,CAAIzE,IAAI,EAAE5N,IAAI,CAAC,CAAA;AACvC,GAAA;AAEAgP,EAAAA,YAAY,CAAmB7R,KAAU,EAAE6C,IAAe,EAAK;AAC7D,IAAA,MAAM4N,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;IAC7B,OAAO,IAAI,CAACq5B,kBAAkB,CAACruC,KAAK,EAAE6C,IAAI,EAAE4N,IAAI,CAAC,CAAA;AACnD,GAAA;EAEAqB,kBAAkB,CAAC9R,KAAU,EAAE;AAC7B,IAAA,OAAO,IAAI,CAAC6R,YAAY,CAAkB7R,KAAK,EAAE,eAAe,CAAC,CAAA;AACnE,GAAA;EAEA+R,mBAAmB,CAAC/R,KAAU,EAAE;AAC9B,IAAA,OAAO,IAAI,CAAC6R,YAAY,CAAmB7R,KAAK,EAAE,gBAAgB,CAAC,CAAA;AACrE,GAAA;EAEAuR,kBAAkB,CAACvR,KAAU,EAAE;AAC7B,IAAA,OAAO,IAAI,CAAC6R,YAAY,CAAkB7R,KAAK,EAAE,eAAe,CAAC,CAAA;AACnE,GAAA;EAEA2R,mBAAmB,CAAC3R,KAAU,EAAE;AAC9B,IAAA,OAAO,IAAI,CAAC6R,YAAY,CAAmB7R,KAAK,EAAE,gBAAgB,CAAC,CAAA;AACrE,GAAA;EAEAgR,kBAAkB,CAAChR,KAIlB,EAAE;IACD,MAAMyQ,IAAI,GAAG,IAAI,CAACoB,YAAY,CAC5B7R,KAAK,CAACA,KAAK,EACX,eAAe,CAChB,CAAA;AACDyQ,IAAAA,IAAI,CAACQ,OAAO,GAAGjR,KAAK,CAACiR,OAAO,CAAA;AAC5BR,IAAAA,IAAI,CAACS,KAAK,GAAGlR,KAAK,CAACkR,KAAK,CAAA;AACxB,IAAA,OAAOT,IAAI,CAAA;AACb,GAAA;EAEAwB,mBAAmB,CAACjS,KAAc,EAAE;AAClC,IAAA,MAAMyQ,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAoB,CAAA;IAC/CvE,IAAI,CAACzQ,KAAK,GAAGA,KAAK,CAAA;IAClB,IAAI,CAACumB,IAAI,EAAE,CAAA;AACX,IAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,GAAA;AAEAuB,EAAAA,gBAAgB,GAAG;AACjB,IAAA,MAAMvB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAiB,CAAA;IAC5C,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,IAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,CAAA;AAC7C,GAAA;;EAGAslC,kCAAkC,CAEhCC,UAAmB,EACL;AACd,IAAA,MAAMngC,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AAEpC,IAAA,IAAIqb,GAAG,CAAA;IACP,IAAI,CAAC3K,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,CAACya,eAAe,CAACjW,KAAK,CAACsS,iBAAiB,EAAE,CAAC,CAAA;AAE/C,IAAA,MAAM4/B,yBAAyB,GAAG,IAAI,CAACzlD,KAAK,CAAC+X,sBAAsB,CAAA;AACnE,IAAA,MAAM48C,6BAA6B,GAAG,IAAI,CAAC30D,KAAK,CAAC0Y,0BAA0B,CAAA;AAC3E,IAAA,IAAI,CAAC1Y,KAAK,CAAC+X,sBAAsB,GAAG,IAAI,CAAA;AACxC,IAAA,IAAI,CAAC/X,KAAK,CAAC0Y,0BAA0B,GAAG,KAAK,CAAA;AAE7C,IAAA,MAAMy9C,aAAa,GAAG,IAAI,CAACn2D,KAAK,CAAC3B,QAAQ,CAAA;IACzC,MAAMu8B,QAAwB,GAAG,EAAE,CAAA;AACnC,IAAA,MAAMt8B,mBAAmB,GAAG,IAAIsrB,gBAAgB,EAAE,CAAA;IAClD,IAAI2M,KAAK,GAAG,IAAI,CAAA;AAChB,IAAA,IAAI6/B,cAAc,CAAA;AAClB,IAAA,IAAIC,qBAAqB,CAAA;AAEzB,IAAA,OAAO,CAAC,IAAI,CAAC56C,KAAK,IAAW,EAAE;AAC7B,MAAA,IAAI8a,KAAK,EAAE;AACTA,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;AACL,QAAA,IAAI,CAAC1O,MAAM,CAETvpB,EAAAA,EAAAA,mBAAmB,CAACoqB,qBAAqB,KAAK,IAAI,GAC9C,IAAI,GACJpqB,mBAAmB,CAACoqB,qBAAqB,CAC9C,CAAA;AACD,QAAA,IAAI,IAAI,CAACjN,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB46C,UAAAA,qBAAqB,GAAG,IAAI,CAACr2D,KAAK,CAAC3B,QAAQ,CAAA;AAC3C,UAAA,MAAA;AACF,SAAA;AACF,OAAA;AAEA,MAAA,IAAI,IAAI,CAACod,KAAK,CAAA,EAAA,CAAa,EAAE;AAC3B,QAAA,MAAM66C,kBAAkB,GAAG,IAAI,CAACt2D,KAAK,CAAC3B,QAAQ,CAAA;AAC9C+3D,QAAAA,cAAc,GAAG,IAAI,CAACp2D,KAAK,CAAC3B,QAAQ,CAAA;AACpCu8B,QAAAA,QAAQ,CAACj+B,IAAI,CACX,IAAI,CAAC48B,cAAc,CAAC,IAAI,CAAC02B,gBAAgB,EAAE,EAAEqG,kBAAkB,CAAC,CACjE,CAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC3M,mBAAmB,IAA4B,EAAE;AACzD,UAAA,MAAA;AACF,SAAA;AACF,OAAC,MAAM;AACL/uB,QAAAA,QAAQ,CAACj+B,IAAI,CACX,IAAI,CAACm8B,uBAAuB,CAC1Bx6B,mBAAmB,EACnB,IAAI,CAACi7B,cAAc,CACpB,CACF,CAAA;AACH,OAAA;AACF,KAAA;AAEA,IAAA,MAAMg9B,WAAW,GAAG,IAAI,CAACv2D,KAAK,CAACoB,aAAa,CAAA;IAC5C,IAAI,CAACymB,MAAM,CAAW,EAAA,CAAA,CAAA;AAEtB,IAAA,IAAI,CAAC7nB,KAAK,CAAC+X,sBAAsB,GAAG0tC,yBAAyB,CAAA;AAC7D,IAAA,IAAI,CAACzlD,KAAK,CAAC0Y,0BAA0B,GAAGi8C,6BAA6B,CAAA;AAErE,IAAA,IAAI6B,SAAS,GAAG,IAAI,CAAC7rC,WAAW,CAA4BtsB,QAAQ,CAAC,CAAA;AACrE,IAAA,IACEmgC,UAAU,IACV,IAAI,CAACN,gBAAgB,CAACtD,QAAQ,CAAC,KAC9B47B,SAAS,GAAG,IAAI,CAACv4B,UAAU,CAACu4B,SAAS,CAAC,CAAC,EACxC;AACA,MAAA,IAAI,CAAC7sC,yBAAyB,CAACrrB,mBAAmB,CAAC,CAAA;AACnD,MAAA,IAAI,CAACkrB,eAAe,CAAC7D,iBAAiB,EAAE,CAAA;AACxC,MAAA,IAAI,CAAC6D,eAAe,CAAChW,IAAI,EAAE,CAAA;MAC3B,IAAI,CAACyrB,oBAAoB,CAACu3B,SAAS,EAAE57B,QAAQ,EAAE,KAAK,CAAC,CAAA;AAErD,MAAA,OAAO47B,SAAS,CAAA;AAClB,KAAA;AACA,IAAA,IAAI,CAAChtC,eAAe,CAAChW,IAAI,EAAE,CAAA;AAE3B,IAAA,IAAI,CAAConB,QAAQ,CAAC1yC,MAAM,EAAE;MACpB,IAAI,CAAC+H,UAAU,CAAC,IAAI,CAAC+P,KAAK,CAACC,eAAe,CAAC,CAAA;AAC7C,KAAA;AACA,IAAA,IAAIo2D,qBAAqB,EAAE,IAAI,CAACpmE,UAAU,CAAComE,qBAAqB,CAAC,CAAA;AACjE,IAAA,IAAID,cAAc,EAAE,IAAI,CAACnmE,UAAU,CAACmmE,cAAc,CAAC,CAAA;AACnD,IAAA,IAAI,CAAC/tC,qBAAqB,CAAC/pB,mBAAmB,EAAE,IAAI,CAAC,CAAA;AAErD,IAAA,IAAI,CAACyxD,oBAAoB,CAACn1B,QAAQ,EAA4B,IAAI,CAAC,CAAA;AACnE,IAAA,IAAIA,QAAQ,CAAC1yC,MAAM,GAAG,CAAC,EAAE;AACvBwxB,MAAAA,GAAG,GAAG,IAAI,CAACiR,WAAW,CAAuBwrC,aAAa,CAAC,CAAA;MAC3Dz8C,GAAG,CAACkuC,WAAW,GAAGhtB,QAAQ,CAAA;AAE1B,MAAA,IAAI,CAACl9B,UAAU,CAACgc,GAAG,EAAE,oBAAoB,CAAC,CAAA;AAC1C,MAAA,IAAI,CAACvY,gBAAgB,CAACuY,GAAG,EAAE68C,WAAW,CAAC,CAAA;AACzC,KAAC,MAAM;AACL78C,MAAAA,GAAG,GAAGkhB,QAAQ,CAAC,CAAC,CAAC,CAAA;AACnB,KAAA;AAEA,IAAA,OAAO,IAAI,CAAC67B,eAAe,CACzBp4D,QAAQ;AAERqb,IAAAA,GAAG,CACJ,CAAA;AACH,GAAA;AAEA+8C,EAAAA,eAAe,CAACp4D,QAAkB,EAAEzD,UAAwB,EAAgB;AAC1E,IAAA,IAAI,CAAC,IAAI,CAACtB,OAAO,CAACm2D,8BAA8B,EAAE;MAChD,IAAI,CAAC3oC,QAAQ,CAAClsB,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC,CAAA;MAChD,IAAI,CAACksB,QAAQ,CAAClsB,UAAU,EAAE,YAAY,EAAEyD,QAAQ,CAACjX,KAAK,CAAC,CAAA;AAEvD,MAAA,IAAI,CAAC4vB,uBAAuB,CAC1Bpc,UAAU,EACVyD,QAAQ,CAACjX,KAAK,EACd,IAAI,CAAC4Y,KAAK,CAACoB,aAAa,CAACha,KAAK,CAC/B,CAAA;AAED,MAAA,OAAOwT,UAAU,CAAA;AACnB,KAAA;AAEA,IAAA,MAAM87D,eAAe,GACnB,IAAI,CAAC/rC,WAAW,CAA4BtsB,QAAQ,CAAC,CAAA;IACvDq4D,eAAe,CAAC97D,UAAU,GAAGA,UAAU,CAAA;AACvC,IAAA,OAAO,IAAI,CAAC8C,UAAU,CAACg5D,eAAe,EAAE,yBAAyB,CAAC,CAAA;AACpE,GAAA;;EAGAx4B,gBAAgB,CAAC1iC,MAAqB,EAAW;AAC/C,IAAA,OAAO,CAAC,IAAI,CAAC+rB,kBAAkB,EAAE,CAAA;AACnC,GAAA;EAEA0W,UAAU,CACRhlC,IAAuC,EACQ;AAC/C,IAAA,IAAI,IAAI,CAAC+kB,GAAG,CAAA,EAAA,CAAU,EAAE;AACtB,MAAA,OAAO/kB,IAAI,CAAA;AACb,KAAA;AACF,GAAA;AAEAsgC,EAAAA,cAAc,CACZtgC,IAAkB;AAElBoF,EAAAA,QAAkB,EACJ;AACd,IAAA,OAAOpF,IAAI,CAAA;AACb,GAAA;AAEAk8D,EAAAA,mBAAmB,GAAiD;AAClE,IAAA,MAAMl8D,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAoC,CAAA;IAC/D,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAQ,EAAE;AAEtB,MAAA,MAAMu6C,IAAI,GAAG,IAAI,CAACl/B,gBAAgB,CAChC,IAAI,CAACj2B,eAAe,CAAe5H,IAAI,CAAC,EACxC,KAAK,CACN,CAAA;MACD,IAAI,CAAC8V,IAAI,EAAE,CAAA;MACX,MAAM4nD,QAAQ,GAAG,IAAI,CAACV,iBAAiB,CACrCh9D,IAAI,EACJ+8D,IAAI,EACJ,QAAQ,CACT,CAAA;AAED,MAAA,IAAI,CAAC,IAAI,CAACviD,KAAK,CAACN,kBAAkB,IAAI,CAAC,IAAI,CAACM,KAAK,CAACT,OAAO,EAAE;AACzD,QAAA,IAAI,CAAC9T,KAAK,CAACxG,MAAM,CAACxE,mBAAmB,EAAE;AAAEiL,UAAAA,EAAE,EAAEw3D,QAAAA;AAAS,SAAC,CAAC,CAAA;AAC1D,OAAA;AAEA,MAAA,OAAOA,QAAQ,CAAA;AACjB,KAAA;AAEA,IAAA,OAAO,IAAI,CAACC,QAAQ,CAAC39D,IAAI,CAA4B,CAAA;AACvD,GAAA;;EAQA29D,QAAQ,CAAe39D,IAA6B,EAAmB;AACrE,IAAA,IAAI,CAAC8lC,cAAc,CAAC9lC,IAAI,CAAC,CAAA;AAEzB,IAAA,IAAI,IAAI,CAAC+kB,GAAG,CAAA,EAAA,CAAW,EAAE;AACvB,MAAA,MAAMpgB,IAAI,GAAG,IAAI,CAACi5D,aAAa,CAAW,EAAA,CAAA,CAAA;AAC1C,MAAA,IAAI,CAACh8B,gBAAgB,CAACj9B,IAAI,CAAC,CAAA;MAE3B3E,IAAI,CAACwG,SAAS,GAAG7B,IAAI,CAAA;AACvB,KAAC,MAAM;MACL3E,IAAI,CAACwG,SAAS,GAAG,EAAE,CAAA;AACrB,KAAA;AAEA,IAAA,OAAO,IAAI,CAAC/B,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;EAEA8lC,cAAc,CAAe9lC,IAA6B,EAAQ;AAChEA,IAAAA,IAAI,CAACsG,MAAM,GAAG,IAAI,CAAC80D,eAAe,EAAE,CAAA;AACpC,IAAA,IAAIp7D,IAAI,CAACsG,MAAM,CAAClU,IAAI,KAAK,QAAQ,EAAE;AACjC,MAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAAChK,0BAA0B,EAAE;QAAEyQ,EAAE,EAAElG,IAAI,CAACsG,MAAAA;AAAO,OAAC,CAAC,CAAA;KACnE,MAAM,IAAI,IAAI,CAACwB,eAAe,CAAC9H,IAAI,CAACsG,MAAM,CAAC,EAAE;AAC5C,MAAA,IAAI,CAACL,KAAK,CAACxG,MAAM,CAACrG,qBAAqB,EAAE;AACvC8M,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACoB,aAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAC,MAAM,IAAI,IAAI,CAAC4c,GAAG,IAAgB,EAAE;AACnC,MAAA,IAAI,CAAC9e,KAAK,CAACxG,MAAM,CAACrG,qBAAqB,EAAE;AACvC8M,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;EAIAy4D,oBAAoB,CAACC,QAAiB,EAAqB;IACzD,MAAM;MAAExvE,KAAK;MAAE8W,QAAQ;MAAE7W,GAAG;AAAEgB,MAAAA,KAAAA;KAAO,GAAG,IAAI,CAACwX,KAAK,CAAA;AAClD,IAAA,MAAMg3D,SAAS,GAAGzvE,KAAK,GAAG,CAAC,CAAA;AAC3B,IAAA,MAAM0vE,IAAI,GAAG,IAAI,CAACtsC,WAAW,CAC3BhjC,8BAA8B,CAAC0W,QAAQ,EAAE,CAAC,CAAC,CAC5C,CAAA;IACD,IAAI7V,KAAK,KAAK,IAAI,EAAE;MAClB,IAAI,CAACuuE,QAAQ,EAAE;AACb,QAAA,IAAI,CAAC73D,KAAK,CAACxG,MAAM,CAACnJ,6BAA6B,EAAE;UAE/C4P,EAAE,EAAExX,8BAA8B,CAChC,IAAI,CAACqY,KAAK,CAACgZ,6BAA6B,EACxC,CAAC,CAAA;AAEL,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AAEA,IAAA,MAAMk+C,MAAM,GAAG,IAAI,CAACz7C,KAAK,CAAiB,EAAA,CAAA,CAAA;IAC1C,MAAM07C,SAAS,GAAGD,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AAClC,IAAA,MAAME,OAAO,GAAG5vE,GAAG,GAAG2vE,SAAS,CAAA;IAC/BF,IAAI,CAACzuE,KAAK,GAAG;AACXqS,MAAAA,GAAG,EAAE,IAAI,CAAC+b,KAAK,CAAC+C,KAAK,CAACq9C,SAAS,EAAEI,OAAO,CAAC,CAACp1C,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AACjEq1C,MAAAA,MAAM,EAAE7uE,KAAK,KAAK,IAAI,GAAG,IAAI,GAAGA,KAAK,CAACmxB,KAAK,CAAC,CAAC,EAAEw9C,SAAS,CAAA;KACzD,CAAA;IACDF,IAAI,CAACK,IAAI,GAAGJ,MAAM,CAAA;IAClB,IAAI,CAACnoD,IAAI,EAAE,CAAA;IACX,MAAM8jD,YAAY,GAAG,IAAI,CAACn1D,UAAU,CAACu5D,IAAI,EAAE,iBAAiB,CAAC,CAAA;AAC7D,IAAA,IAAI,CAAC91D,gBAAgB,CACnB0xD,YAAY,EACZlrE,8BAA8B,CAAC,IAAI,CAACqY,KAAK,CAACoB,aAAa,EAAE+1D,SAAS,CAAC,CACpE,CAAA;AACD,IAAA,OAAOtE,YAAY,CAAA;AACrB,GAAA;;EAGAxS,aAAa,CAAe0W,QAAiB,EAAqB;AAChE,IAAA,MAAM99D,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAqB,CAAA;IAChDvE,IAAI,CAAC2uD,WAAW,GAAG,EAAE,CAAA;AACrB,IAAA,IAAI2P,MAAM,GAAG,IAAI,CAACT,oBAAoB,CAACC,QAAQ,CAAC,CAAA;AAChD99D,IAAAA,IAAI,CAACu+D,MAAM,GAAG,CAACD,MAAM,CAAC,CAAA;AACtB,IAAA,OAAO,CAACA,MAAM,CAACD,IAAI,EAAE;MACnBr+D,IAAI,CAAC2uD,WAAW,CAACjrD,IAAI,CAAC,IAAI,CAAC2jD,yBAAyB,EAAE,CAAC,CAAA;MACvD,IAAI,CAAC39B,wBAAwB,EAAE,CAAA;AAC/B1pB,MAAAA,IAAI,CAACu+D,MAAM,CAAC76D,IAAI,CAAE46D,MAAM,GAAG,IAAI,CAACT,oBAAoB,CAACC,QAAQ,CAAC,CAAE,CAAA;AAClE,KAAA;AACA,IAAA,OAAO,IAAI,CAACr5D,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;;AAGAqnD,EAAAA,yBAAyB,GAA6B;IACpD,OAAO,IAAI,CAACpwB,eAAe,EAAE,CAAA;AAC/B,GAAA;;EAsBA4xB,eAAe,CAEb9mB,KAAgB,EAChB/8B,SAAkB,EAClBszD,QAAyB,EACzBjzD,mBAA6C,EAC1C;AACH,IAAA,IAAIizD,QAAQ,EAAE;AACZ,MAAA,IAAI,CAACvxC,YAAY,CAAC,gBAAgB,CAAC,CAAA;AACrC,KAAA;AACA,IAAA,MAAM20C,6BAA6B,GAAG,IAAI,CAAC30D,KAAK,CAAC0Y,0BAA0B,CAAA;AAC3E,IAAA,IAAI,CAAC1Y,KAAK,CAAC0Y,0BAA0B,GAAG,KAAK,CAAA;AAC7C,IAAA,MAAM++C,QAAa,GAAG3uE,MAAM,CAACyhC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzC,IAAIgM,KAAK,GAAG,IAAI,CAAA;AAChB,IAAA,MAAMt9B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAExB,CAAA;IAEHvE,IAAI,CAACrQ,UAAU,GAAG,EAAE,CAAA;IACpB,IAAI,CAACmmB,IAAI,EAAE,CAAA;AAEX,IAAA,OAAO,CAAC,IAAI,CAAC0M,KAAK,CAACuf,KAAK,CAAC,EAAE;AACzB,MAAA,IAAIzE,KAAK,EAAE;AACTA,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;QACL,IAAI,CAAC1O,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB,QAAA,IAAI,IAAI,CAACpM,KAAK,CAACuf,KAAK,CAAC,EAAE;AACrB,UAAA,IAAI,CAAC45B,2BAA2B;AAE9B37D,UAAAA,IAAI,CACL,CAAA;AACD,UAAA,MAAA;AACF,SAAA;AACF,OAAA;AAEA,MAAA,IAAI+E,IAAI,CAAA;AACR,MAAA,IAAIC,SAAS,EAAE;AACbD,QAAAA,IAAI,GAAG,IAAI,CAACuyD,oBAAoB,EAAE,CAAA;AACpC,OAAC,MAAM;AACLvyD,QAAAA,IAAI,GAAG,IAAI,CAAC05D,uBAAuB,CAACp5D,mBAAmB,CAAC,CAAA;QACxD,IAAI,CAACgzD,UAAU,CAACtzD,IAAI,EAAEuzD,QAAQ,EAAEkG,QAAQ,EAAEn5D,mBAAmB,CAAC,CAAA;AAChE,OAAA;AAEA,MAAA,IACEizD,QAAQ,IACR,CAAC,IAAI,CAACl2D,gBAAgB,CAAC2C,IAAI,CAAC,IAC5BA,IAAI,CAAC3S,IAAI,KAAK,eAAe,EAC7B;AACA,QAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAACrI,qBAAqB,EAAE;AAAE8O,UAAAA,EAAE,EAAEnB,IAAAA;AAAK,SAAC,CAAC,CAAA;AACxD,OAAA;;MAGA,IAAIA,IAAI,CAACG,SAAS,EAAE;QAClB,IAAI,CAAC2oB,QAAQ,CAAC9oB,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;AACxC,OAAA;;AAGA/E,MAAAA,IAAI,CAACrQ,UAAU,CAAC+T,IAAI,CAACqB,IAAI,CAAC,CAAA;AAC5B,KAAA;IAEA,IAAI,CAAC+Q,IAAI,EAAE,CAAA;AAEX,IAAA,IAAI,CAAC/O,KAAK,CAAC0Y,0BAA0B,GAAGi8C,6BAA6B,CAAA;IACrE,IAAItpE,IAAI,GAAG,kBAAkB,CAAA;AAC7B,IAAA,IAAI4S,SAAS,EAAE;AACb5S,MAAAA,IAAI,GAAG,eAAe,CAAA;KACvB,MAAM,IAAIkmE,QAAQ,EAAE;AACnBlmE,MAAAA,IAAI,GAAG,kBAAkB,CAAA;AAC3B,KAAA;AAEA,IAAA,OAAO,IAAI,CAACqS,UAAU,CAACzE,IAAI,EAAE5N,IAAI,CAAC,CAAA;AACpC,GAAA;EAEAupE,2BAA2B,CAAC37D,IAAY,EAAQ;AAC9C,IAAA,IAAI,CAAC6tB,QAAQ,CAAC7tB,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC+G,KAAK,CAAC4Y,YAAY,CAAC,CAAA;AAC7D,IAAA,IAAI,CAACkO,QAAQ,CAAC7tB,IAAI,EAAE,kBAAkB,EAAE,IAAI,CAAC+G,KAAK,CAACC,eAAe,EAAE,KAAK,CAAC,CAAA;AAC5E,GAAA;;EAKA03D,wBAAwB,CAAC35D,IAA8B,EAAW;IAChE,OACE,CAACA,IAAI,CAACP,QAAQ,IACdO,IAAI,CAAC1V,GAAG,CAAC+C,IAAI,KAAK,YAAY,KAC7B,IAAI,CAACu9B,qBAAqB,EAAE,IAC3B,IAAI,CAACnN,KAAK,CAAa,CAAA,CAAA,IACvB,IAAI,CAACA,KAAK,CAAA,EAAA,CAAS,CAAC,CAAA;AAE1B,GAAA;;EAGAi8C,uBAAuB,CAErBp5D,mBAA6C,EACX;IAClC,IAAIwB,UAAU,GAAG,EAAE,CAAA;AACnB,IAAA,IAAI,IAAI,CAAC2b,KAAK,CAAA,EAAA,CAAO,EAAE;AACrB,MAAA,IAAI,IAAI,CAAC/b,SAAS,CAAC,YAAY,CAAC,EAAE;AAChC,QAAA,IAAI,CAACR,KAAK,CAACxG,MAAM,CAACvD,4BAA4B,EAAE;AAC9CgK,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;;AAIA,MAAA,OAAO,IAAI,CAACod,KAAK,CAAA,EAAA,CAAO,EAAE;AACxB3b,QAAAA,UAAU,CAACnD,IAAI,CAAC,IAAI,CAAC0zD,cAAc,EAAE,CAAC,CAAA;AACxC,OAAA;AACF,KAAA;AAEA,IAAA,MAAMryD,IAAI,GAAG,IAAI,CAACR,SAAS,EAAoB,CAAA;IAC/C,IAAIrC,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI+C,UAAU,GAAG,KAAK,CAAA;AACtB,IAAA,IAAIG,QAAQ,CAAA;AAEZ,IAAA,IAAI,IAAI,CAACod,KAAK,CAAA,EAAA,CAAa,EAAE;AAC3B,MAAA,IAAI3b,UAAU,CAAC5X,MAAM,EAAE,IAAI,CAAC+H,UAAU,EAAE,CAAA;MACxC,OAAO,IAAI,CAAC+/D,WAAW,EAAE,CAAA;AAC3B,KAAA;IAEA,IAAIlwD,UAAU,CAAC5X,MAAM,EAAE;MACrB8V,IAAI,CAAC8B,UAAU,GAAGA,UAAU,CAAA;AAC5BA,MAAAA,UAAU,GAAG,EAAE,CAAA;AACjB,KAAA;IAEA9B,IAAI,CAACzC,MAAM,GAAG,KAAK,CAAA;AAEnB,IAAA,IAAI+C,mBAAmB,EAAE;AACvBD,MAAAA,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AAChC,KAAA;AAEA,IAAA,IAAI/B,WAAW,GAAG,IAAI,CAAC0hB,GAAG,CAAS,EAAA,CAAA,CAAA;AACnC,IAAA,IAAI,CAAC6d,+BAA+B,CAAC79B,IAAI,CAAC,CAAA;AAC1C,IAAA,MAAM+a,WAAW,GAAG,IAAI,CAAC/Y,KAAK,CAAC+Y,WAAW,CAAA;IAC1C,MAAMzwB,GAAG,GAAG,IAAI,CAACm2D,iBAAiB,CAACzgD,IAAI,EAAEM,mBAAmB,CAAC,CAAA;AAE7D,IAAA,IAAI,CAAChC,WAAW,IAAI,CAACyc,WAAW,IAAI,IAAI,CAAC4+C,wBAAwB,CAAC35D,IAAI,CAAC,EAAE;AACvE,MAAA,MAAM45D,OAAO,GAAGtvE,GAAG,CAAC2I,IAAI,CAAA;MAGxB,IAAI2mE,OAAO,KAAK,OAAO,IAAI,CAAC,IAAI,CAACpwC,qBAAqB,EAAE,EAAE;AACxDrsB,QAAAA,OAAO,GAAG,IAAI,CAAA;AACd,QAAA,IAAI,CAAC4b,iCAAiC,CAACzuB,GAAG,CAAC,CAAA;AAC3CgU,QAAAA,WAAW,GAAG,IAAI,CAAC0hB,GAAG,CAAS,EAAA,CAAA,CAAA;AAC/B,QAAA,IAAI,CAACygC,iBAAiB,CAACzgD,IAAI,CAAC,CAAA;AAC9B,OAAA;AAGA,MAAA,IAAI45D,OAAO,KAAK,KAAK,IAAIA,OAAO,KAAK,KAAK,EAAE;AAC1C15D,QAAAA,UAAU,GAAG,IAAI,CAAA;AACjB,QAAA,IAAI,CAAC6Y,iCAAiC,CAACzuB,GAAG,CAAC,CAAA;QAC3C0V,IAAI,CAACvS,IAAI,GAAGmsE,OAAO,CAAA;AACnB,QAAA,IAAI,IAAI,CAACn8C,KAAK,CAAA,EAAA,CAAS,EAAE;AACvBnf,UAAAA,WAAW,GAAG,IAAI,CAAA;AAClB,UAAA,IAAI,CAAC4C,KAAK,CAACxG,MAAM,CAAClN,mBAAmB,EAAE;AACrC2T,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAE;AAC5B/tB,YAAAA,IAAI,EAAEmsE,OAAAA;AACR,WAAC,CAAC,CAAA;UACF,IAAI,CAAC7oD,IAAI,EAAE,CAAA;AACb,SAAA;AACA,QAAA,IAAI,CAAC0vC,iBAAiB,CAACzgD,IAAI,CAAC,CAAA;AAC9B,OAAA;AACF,KAAA;AAEA,IAAA,OAAO,IAAI,CAAC89B,iBAAiB,CAC3B99B,IAAI,EACJK,QAAQ,EACR/B,WAAW,EACXnB,OAAO,EACP,KAAK,EACL+C,UAAU,EACVI,mBAAmB,CACpB,CAAA;AACH,GAAA;EAEAurD,iCAAiC,CAC/BtuD,MAAsC,EAC9B;IACR,OAAOA,MAAM,CAAC9P,IAAI,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA;AACtC,GAAA;;EAGA6P,4BAA4B,CAACC,MAAsC,EAAE;IACnE,OAAOA,MAAM,CAACC,MAAM,CAAA;AACtB,GAAA;;EAIAogC,uBAAuB,CAACrgC,MAAsC,EAAQ;AAAA,IAAA,IAAA,OAAA,CAAA;AACpE,IAAA,MAAMy6B,UAAU,GAAG,IAAI,CAAC6zB,iCAAiC,CAACtuD,MAAM,CAAC,CAAA;AACjE,IAAA,MAAMC,MAAM,GAAG,IAAI,CAACF,4BAA4B,CAACC,MAAM,CAAC,CAAA;AAExD,IAAA,IAAIC,MAAM,CAACtT,MAAM,KAAK8tC,UAAU,EAAE;AAChC,MAAA,IAAI,CAAC92B,KAAK,CACR3D,MAAM,CAAC9P,IAAI,KAAK,KAAK,GAAGiN,MAAM,CAACzM,cAAc,GAAGyM,MAAM,CAACxM,cAAc,EACrE;AAAEiT,QAAAA,EAAE,EAAE5D,MAAAA;AAAO,OAAC,CACf,CAAA;AACH,KAAA;IAEA,IACEA,MAAM,CAAC9P,IAAI,KAAK,KAAK,IACrB,CAAA,CAAA,OAAA,GAAA+P,MAAM,CAACA,MAAM,CAACtT,MAAM,GAAG,CAAC,CAAC,KAAA,IAAA,GAAA,KAAA,CAAA,GAAzB,QAA2BmD,IAAI,MAAK,aAAa,EACjD;AACA,MAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAACvM,sBAAsB,EAAE;AAAEgT,QAAAA,EAAE,EAAE5D,MAAAA;AAAO,OAAC,CAAC,CAAA;AAC3D,KAAA;AACF,GAAA;;EAGAwC,iBAAiB,CAEfC,IAA4B,EAC5B1B,WAAoB,EACpBnB,OAAgB,EAChB8C,SAAkB,EAClBC,UAAmB,EACgB;AACnC,IAAA,IAAIA,UAAU,EAAE;AAEd,MAAA,MAAM25D,YAAY,GAAG,IAAI,CAACp7D,WAAW,CACnCuB,IAAI;MAGJ1B,WAAW,EACG,KAAK,EACC,KAAK,EACzB,KAAK,EACL,cAAc,CACf,CAAA;AACD,MAAA,IAAI,CAACs/B,uBAAuB,CAACi8B,YAAY,CAAC,CAAA;AAC1C,MAAA,OAAOA,YAAY,CAAA;AACrB,KAAA;IAEA,IAAI18D,OAAO,IAAImB,WAAW,IAAI,IAAI,CAACmf,KAAK,IAAW,EAAE;AACnD,MAAA,IAAIxd,SAAS,EAAE,IAAI,CAAChO,UAAU,EAAE,CAAA;MAChC+N,IAAI,CAACvS,IAAI,GAAG,QAAQ,CAAA;MACpBuS,IAAI,CAACzC,MAAM,GAAG,IAAI,CAAA;AAClB,MAAA,OAAO,IAAI,CAACkB,WAAW,CACrBuB,IAAI,EACJ1B,WAAW,EACXnB,OAAO,EACa,KAAK,EACzB,KAAK,EACL,cAAc,CACf,CAAA;AACH,KAAA;AACF,GAAA;;EAIAiD,mBAAmB,CAEjBJ,IAA8B,EAC9BK,QAAqC,EACrCJ,SAAkB,EAClBK,mBAA6C,EACR;IACrCN,IAAI,CAACG,SAAS,GAAG,KAAK,CAAA;AAEtB,IAAA,IAAI,IAAI,CAAC6f,GAAG,CAAA,EAAA,CAAU,EAAE;MACtBhgB,IAAI,CAACxV,KAAK,GAAGyV,SAAS,GAClB,IAAI,CAAC+9B,iBAAiB,CAAC,IAAI,CAACh8B,KAAK,CAAC3B,QAAQ,CAAC,GAC3C,IAAI,CAACy6B,uBAAuB,CAACx6B,mBAAmB,CAAC,CAAA;AAErD,MAAA,OAAO,IAAI,CAACZ,UAAU,CAACM,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,KAAA;AAEA,IAAA,IAAI,CAACA,IAAI,CAACP,QAAQ,IAAIO,IAAI,CAAC1V,GAAG,CAAC+C,IAAI,KAAK,YAAY,EAAE;MAKpD,IAAI,CAAC6xC,iBAAiB,CAACl/B,IAAI,CAAC1V,GAAG,CAAC2I,IAAI,EAAE+M,IAAI,CAAC1V,GAAG,CAACmP,GAAG,CAAClQ,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAEtE,MAAA,IAAI0W,SAAS,EAAE;AACbD,QAAAA,IAAI,CAACxV,KAAK,GAAG,IAAI,CAACwzC,iBAAiB,CACjC39B,QAAQ,EACRgsB,eAAe,CAACrsB,IAAI,CAAC1V,GAAG,CAAC,CAC1B,CAAA;AACH,OAAC,MAAM,IAAI,IAAI,CAACmzB,KAAK,IAAO,EAAE;AAC5B,QAAA,MAAM8M,kBAAkB,GAAG,IAAI,CAACvoB,KAAK,CAAC3B,QAAQ,CAAA;QAC9C,IAAIC,mBAAmB,IAAI,IAAI,EAAE;AAC/B,UAAA,IAAIA,mBAAmB,CAACiqB,kBAAkB,KAAK,IAAI,EAAE;YACnDjqB,mBAAmB,CAACiqB,kBAAkB,GAAGA,kBAAkB,CAAA;AAC7D,WAAA;AACF,SAAC,MAAM;AACL,UAAA,IAAI,CAACrpB,KAAK,CAACxG,MAAM,CAACxJ,2BAA2B,EAAE;AAC7CiQ,YAAAA,EAAE,EAAEopB,kBAAAA;AACN,WAAC,CAAC,CAAA;AACJ,SAAA;AACAvqB,QAAAA,IAAI,CAACxV,KAAK,GAAG,IAAI,CAACwzC,iBAAiB,CACjC39B,QAAQ,EACRgsB,eAAe,CAACrsB,IAAI,CAAC1V,GAAG,CAAC,CAC1B,CAAA;AACH,OAAC,MAAM;QACL0V,IAAI,CAACxV,KAAK,GAAG6hC,eAAe,CAACrsB,IAAI,CAAC1V,GAAG,CAAC,CAAA;AACxC,OAAA;MACA0V,IAAI,CAACG,SAAS,GAAG,IAAI,CAAA;AAErB,MAAA,OAAO,IAAI,CAACT,UAAU,CAACM,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,KAAA;AACF,GAAA;AAEA89B,EAAAA,iBAAiB,CAEf99B,IAA+C,EAC/CK,QAAqC,EACrC/B,WAAoB,EACpBnB,OAAgB,EAChB8C,SAAkB,EAClBC,UAAmB,EACnBI,mBAA6C,EACV;AACnC,IAAA,MAAMrF,IAAI,GACR,IAAI,CAAC8E,iBAAiB,CACpBC,IAAI,EACJ1B,WAAW,EACXnB,OAAO,EACP8C,SAAS,EACTC,UAAU,CACX,IACD,IAAI,CAACE,mBAAmB,CACtBJ,IAAI,EACJK,QAAQ,EACRJ,SAAS,EACTK,mBAAmB,CACpB,CAAA;AAEH,IAAA,IAAI,CAACrF,IAAI,EAAE,IAAI,CAAChJ,UAAU,EAAE,CAAA;AAE5B,IAAA,OAAOgJ,IAAI,CAAA;AACb,GAAA;;AAKAwlD,EAAAA,iBAAiB,CAEfzgD,IAE4B,EAC5BM,mBAA6C,EAChB;AAC7B,IAAA,IAAI,IAAI,CAAC0f,GAAG,CAAA,CAAA,CAAa,EAAE;MACxBhgB,IAAI,CAAmCP,QAAQ,GAAG,IAAI,CAAA;AACvDO,MAAAA,IAAI,CAAC1V,GAAG,GAAG,IAAI,CAACwwC,uBAAuB,EAAE,CAAA;MACzC,IAAI,CAACjR,MAAM,CAAa,CAAA,CAAA,CAAA;AAC1B,KAAC,MAAM;MAEL,MAAM;QAAEx8B,IAAI;AAAE7C,QAAAA,KAAAA;OAAO,GAAG,IAAI,CAACwX,KAAK,CAAA;AAClC,MAAA,IAAI1X,GAAG,CAAA;AAEP,MAAA,IAAI0jB,0BAA0B,CAAC3gB,IAAI,CAAC,EAAE;AACpC/C,QAAAA,GAAG,GAAG,IAAI,CAACkoC,eAAe,CAAC,IAAI,CAAC,CAAA;AAClC,OAAC,MAAM;AACL,QAAA,QAAQnlC,IAAI;AACV,UAAA,KAAA,GAAA;AACE/C,YAAAA,GAAG,GAAG,IAAI,CAACiS,mBAAmB,CAAC/R,KAAK,CAAC,CAAA;AACrC,YAAA,MAAA;AACF,UAAA,KAAA,GAAA;AACEF,YAAAA,GAAG,GAAG,IAAI,CAACgS,kBAAkB,CAAC9R,KAAK,CAAC,CAAA;AACpC,YAAA,MAAA;AACF,UAAA,KAAA,GAAA;AACEF,YAAAA,GAAG,GAAG,IAAI,CAACyR,kBAAkB,CAACvR,KAAK,CAAC,CAAA;AACpC,YAAA,MAAA;AACF,UAAA,KAAA,GAAA;AACEF,YAAAA,GAAG,GAAG,IAAI,CAAC6R,mBAAmB,CAAC3R,KAAK,CAAC,CAAA;AACrC,YAAA,MAAA;AACF,UAAA,KAAA,GAAA;AAAqB,YAAA;AAEnB,cAAA,MAAMigC,aAAa,GAAG,IAAI,CAACzoB,KAAK,CAAC3B,QAAQ,CAAA;cACzC,IAAIC,mBAAmB,IAAI,IAAI,EAAE;AAC/B,gBAAA,IAAIA,mBAAmB,CAACmqB,aAAa,KAAK,IAAI,EAAE;kBAC9CnqB,mBAAmB,CAACmqB,aAAa,GAAGA,aAAa,CAAA;AACnD,iBAAA;AACF,eAAC,MAAM;AACL,gBAAA,IAAI,CAACvpB,KAAK,CAACxG,MAAM,CAACtE,sBAAsB,EAAE;AACxC+K,kBAAAA,EAAE,EAAEspB,aAAAA;AACN,iBAAC,CAAC,CAAA;AACJ,eAAA;AACAngC,cAAAA,GAAG,GAAG,IAAI,CAACsU,gBAAgB,EAAE,CAAA;AAC7B,cAAA,MAAA;AACF,aAAA;AACA,UAAA;YACE,MAAM,IAAI,CAAC3M,UAAU,EAAE,CAAA;AAAC,SAAA;AAE9B,OAAA;MACC+N,IAAI,CAAS1V,GAAG,GAAGA,GAAG,CAAA;MACvB,IAAI+C,IAAI,QAAmB,EAAE;QAE3B2S,IAAI,CAACP,QAAQ,GAAG,KAAK,CAAA;AACvB,OAAA;AACF,KAAA;IAEA,OAAOO,IAAI,CAAC1V,GAAG,CAAA;AACjB,GAAA;;AAIA4S,EAAAA,YAAY,CAACjC,IAAoC,EAAEkC,OAAgB,EAAQ;IACzElC,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAAA;IACd/D,IAAI,CAAC6+D,SAAS,GAAG,KAAK,CAAA;IACtB7+D,IAAI,CAAC+kC,KAAK,GAAG7iC,OAAO,CAAA;AACtB,GAAA;;AAIAsB,EAAAA,WAAW,CAETxD,IAAe,EACfqD,WAAoB,EACpBnB,OAAgB,EAChBoB,aAAsB,EACtBc,gBAAyB,EACzBhS,IAAe,EACfiS,YAAqB,GAAG,KAAK,EAC1B;AACH,IAAA,IAAI,CAACpC,YAAY,CAACjC,IAAI,EAAEkC,OAAO,CAAC,CAAA;IAChClC,IAAI,CAAC6+D,SAAS,GAAGx7D,WAAW,CAAA;IAC5B,MAAM+gC,cAAc,GAAG9gC,aAAa,CAAA;IACpC,IAAI,CAACkX,KAAK,CAACF,KAAK,CACdlE,cAAc,GACZG,WAAW,IACVlS,YAAY,GAAGoS,WAAW,GAAG,CAAC,CAAC,IAC/BrS,gBAAgB,GAAGoS,kBAAkB,GAAG,CAAC,CAAC,CAC9C,CAAA;AACD,IAAA,IAAI,CAAC6Z,SAAS,CAAC/V,KAAK,CAACqT,aAAa,CAACzrB,OAAO,EAAElC,IAAI,CAAC6+D,SAAS,CAAC,CAAC,CAAA;AAC5D,IAAA,IAAI,CAAC16B,mBAAmB,CAACnkC,IAAI,EAAEokC,cAAc,CAAC,CAAA;IAC9C,MAAMw1B,YAAY,GAAG,IAAI,CAACj7B,0BAA0B,CAAC3+B,IAAI,EAAE5N,IAAI,EAAE,IAAI,CAAC,CAAA;AACtE,IAAA,IAAI,CAACi+B,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,IAAA,IAAI,CAACC,KAAK,CAACD,IAAI,EAAE,CAAA;AAEjB,IAAA,OAAOq/C,YAAY,CAAA;AACrB,GAAA;;EAKA93B,cAAc,CAEZC,KAAgB,EAChBC,YAAqB,EACrBC,OAAgB,EAChB58B,mBAA6C,EACN;AACvC,IAAA,IAAI48B,OAAO,EAAE;AACX,MAAA,IAAI,CAAClb,YAAY,CAAC,gBAAgB,CAAC,CAAA;AACrC,KAAA;AACA,IAAA,MAAM20C,6BAA6B,GAAG,IAAI,CAAC30D,KAAK,CAAC0Y,0BAA0B,CAAA;AAC3E,IAAA,IAAI,CAAC1Y,KAAK,CAAC0Y,0BAA0B,GAAG,KAAK,CAAA;AAC7C,IAAA,MAAMzf,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAyC,CAAA;IACpE,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX9V,IAAAA,IAAI,CAACyc,QAAQ,GAAG,IAAI,CAACmhD,aAAa,CAChC77B,KAAK,EACY,CAACE,OAAO,EACzB58B,mBAAmB;AAEnBrF,IAAAA,IAAI,CACL,CAAA;AACD,IAAA,IAAI,CAAC+G,KAAK,CAAC0Y,0BAA0B,GAAGi8C,6BAA6B,CAAA;IACrE,OAAO,IAAI,CAACj3D,UAAU,CACpBzE,IAAI,EACJiiC,OAAO,GAAG,iBAAiB,GAAG,iBAAiB,CAChD,CAAA;AACH,GAAA;;EAKA+D,oBAAoB,CAElBhmC,IAAuC,EACvCuC,MAAyC,EACzCL,OAAgB,EAChBi+B,gBAAkC,EACP;IAC3B,IAAI,CAAC3lB,KAAK,CAACF,KAAK,CAAClE,cAAc,GAAGC,WAAW,CAAC,CAAA;AAC9C,IAAA,IAAI5V,KAAK,GAAGktB,aAAa,CAACzrB,OAAO,EAAE,KAAK,CAAC,CAAA;IAIzC,IAAI,CAAC,IAAI,CAACsgB,KAAK,CAAA,CAAA,CAAW,IAAI,IAAI,CAAC6N,SAAS,CAAC3C,KAAK,EAAE;AAClDjtB,MAAAA,KAAK,IAAI0sB,QAAQ,CAAA;AACnB,KAAA;AACA,IAAA,IAAI,CAACkD,SAAS,CAAC/V,KAAK,CAAC7Z,KAAK,CAAC,CAAA;AAC3B,IAAA,IAAI,CAACwB,YAAY,CAACjC,IAAI,EAAEkC,OAAO,CAAC,CAAA;AAChC,IAAA,MAAMsqD,yBAAyB,GAAG,IAAI,CAACzlD,KAAK,CAAC+X,sBAAsB,CAAA;AAEnE,IAAA,IAAIvc,MAAM,EAAE;AACV,MAAA,IAAI,CAACwE,KAAK,CAAC+X,sBAAsB,GAAG,IAAI,CAAA;MACxC,IAAI,CAAComB,0BAA0B,CAACllC,IAAI,EAAEuC,MAAM,EAAE49B,gBAAgB,CAAC,CAAA;AACjE,KAAA;AACA,IAAA,IAAI,CAACp5B,KAAK,CAAC+X,sBAAsB,GAAG,KAAK,CAAA;AACzC,IAAA,IAAI,CAAC7a,iBAAiB,CAACjE,IAAI,EAAE,IAAI,CAAC,CAAA;AAElC,IAAA,IAAI,CAACqwB,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,IAAA,IAAI,CAACC,KAAK,CAACD,IAAI,EAAE,CAAA;AACjB,IAAA,IAAI,CAACxT,KAAK,CAAC+X,sBAAsB,GAAG0tC,yBAAyB,CAAA;AAE7D,IAAA,OAAO,IAAI,CAAC/nD,UAAU,CAACzE,IAAI,EAAE,yBAAyB,CAAC,CAAA;AACzD,GAAA;AAEAklC,EAAAA,0BAA0B,CACxBllC,IAAuC,EACvCuC,MAAsB,EACtB49B,gBAAkC,EAC5B;IACN,IAAI,CAACD,gBAAgB,CAAC39B,MAAM,EAAE49B,gBAAgB,EAAE,KAAK,CAAC,CAAA;IACtDngC,IAAI,CAACuC,MAAM,GAAGA,MAA+C,CAAA;AAC/D,GAAA;EAEAo8B,0BAA0B,CAMxB3+B,IAAe,EAAE5N,IAAe,EAAE+R,QAAiB,GAAG,KAAK,EAAK;IAEhE,IAAI,CAACF,iBAAiB,CAACjE,IAAI,EAAE,KAAK,EAAEmE,QAAQ,CAAC,CAAA;AAC7C,IAAA,OAAO,IAAI,CAACM,UAAU,CAACzE,IAAI,EAAE5N,IAAI,CAAC,CAAA;AACpC,GAAA;;EAGA6R,iBAAiB,CAEfjE,IAAwB,EACxBkE,eAAgC,EAChCC,QAAiB,GAAG,KAAK,EACnB;IACN,MAAM26D,YAAY,GAAG56D,eAAe,IAAI,CAAC,IAAI,CAACse,KAAK,CAAW,CAAA,CAAA,CAAA;AAC9D,IAAA,IAAI,CAAC+N,eAAe,CAACjW,KAAK,CAACwS,kBAAkB,EAAE,CAAC,CAAA;AAEhD,IAAA,IAAIgyC,YAAY,EAAE;AAEf9+D,MAAAA,IAAI,CAAuCiD,IAAI,GAC9C,IAAI,CAAC28B,gBAAgB,EAAE,CAAA;MACzB,IAAI,CAACQ,WAAW,CAACpgC,IAAI,EAAE,KAAK,EAAEkE,eAAe,EAAE,KAAK,CAAC,CAAA;AACvD,KAAC,MAAM;AACL,MAAA,MAAMsvD,SAAS,GAAG,IAAI,CAACzsD,KAAK,CAACiO,MAAM,CAAA;AAGnC,MAAA,MAAM8a,SAAS,GAAG,IAAI,CAAC/oB,KAAK,CAAC2Y,MAAM,CAAA;AACnC,MAAA,IAAI,CAAC3Y,KAAK,CAAC2Y,MAAM,GAAG,EAAE,CAAA;;AAItB,MAAA,IAAI,CAAC2Q,SAAS,CAAC/V,KAAK,CAAC,IAAI,CAAC+V,SAAS,CAAC/C,YAAY,EAAE,GAAGJ,YAAY,CAAC,CAAA;MAClEltB,IAAI,CAACiD,IAAI,GAAG,IAAI,CAACmwD,UAAU,CACzB,IAAI,EACJ,KAAK;AAEJ2L,MAAAA,sBAA+B,IAAK;QACnC,MAAMC,SAAS,GAAG,CAAC,IAAI,CAACC,iBAAiB,CAACj/D,IAAI,CAACuC,MAAM,CAAC,CAAA;QAEtD,IAAIw8D,sBAAsB,IAAIC,SAAS,EAAE;AAEvC,UAAA,IAAI,CAAC/4D,KAAK,CAACxG,MAAM,CAACvK,4BAA4B,EAAE;YAC9CgR,EAAE;YAEA,CAAClG,IAAI,CAACxN,IAAI,KAAK,QAAQ,IAAIwN,IAAI,CAACxN,IAAI,KAAK,aAAa;YAEtD,CAAC,CAACwN,IAAI,CAAC3Q,GAAG;AAEN2Q,YAAAA,IAAI,CAAC3Q,GAAG,CAACmP,GAAG,CAACjQ,GAAG,GAChByR,IAAAA;AACR,WAAC,CAAC,CAAA;AACJ,SAAA;QAEA,MAAMqlC,iBAAiB,GAAG,CAACmuB,SAAS,IAAI,IAAI,CAACzsD,KAAK,CAACiO,MAAM,CAAA;;QAIzD,IAAI,CAACorB,WAAW,CACdpgC,IAAI,EACJ,CAAC,IAAI,CAAC+G,KAAK,CAACiO,MAAM,IAAI,CAAC9Q,eAAe,IAAI,CAACC,QAAQ,IAAI,CAAC66D,SAAS,EACjE96D,eAAe,EACfmhC,iBAAiB,CAClB,CAAA;;QAGD,IAAI,IAAI,CAACt+B,KAAK,CAACiO,MAAM,IAAIhV,IAAI,CAAC+D,EAAE,EAAE;UAChC,IAAI,CAACimD,eAAe,CAAChqD,IAAI,CAAC+D,EAAE,EAAEoU,YAAY,EAAEktB,iBAAiB,CAAC,CAAA;AAChE,SAAA;AACF,OAAC,CACF,CAAA;AACD,MAAA,IAAI,CAAChV,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,MAAA,IAAI,CAACxT,KAAK,CAAC2Y,MAAM,GAAGoQ,SAAS,CAAA;AAC/B,KAAA;AACA,IAAA,IAAI,CAACS,eAAe,CAAChW,IAAI,EAAE,CAAA;AAC7B,GAAA;EAEA0yC,iBAAiB,CAACjtD,IAAuC,EAAE;AACzD,IAAA,OAAOA,IAAI,CAAC5N,IAAI,KAAK,YAAY,CAAA;AACnC,GAAA;EAEA6sE,iBAAiB,CACf18D,MAAwD,EAC/C;AACT,IAAA,KAAK,IAAI9S,CAAC,GAAG,CAAC,EAAEmzB,GAAG,GAAGrgB,MAAM,CAACtT,MAAM,EAAEQ,CAAC,GAAGmzB,GAAG,EAAEnzB,CAAC,EAAE,EAAE;AACjD,MAAA,IAAI,CAAC,IAAI,CAACw9D,iBAAiB,CAAC1qD,MAAM,CAAC9S,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAA;AACtD,KAAA;AACA,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEA2wC,WAAW,CACTpgC,IAAwB,EACxBmlC,eAAwB;AAExBC,EAAAA,eAAgC,EAChCC,iBAA0B,GAAG,IAAI,EAC3B;AACN,IAAA,MAAMqyB,YAAY,GAAG,CAACvyB,eAAe,IAAI,IAAI5nC,GAAG,EAAU,CAAA;AAO1D,IAAA,MAAM2hE,gBAAgB,GAAG;AAAE9sE,MAAAA,IAAI,EAAE,kBAAA;KAA6B,CAAA;AAC9D,IAAA,KAAK,MAAMgsC,KAAK,IAAIp+B,IAAI,CAACuC,MAAM,EAAE;AAC/B,MAAA,IAAI,CAACi1D,SAAS,CAACp5B,KAAK,EAAE;AACpBq5B,QAAAA,EAAE,EAAEyH,gBAAgB;AACpB15D,QAAAA,OAAO,EAAEoS,QAAQ;QACjB8/C,YAAY;AACZryB,QAAAA,iBAAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;EAQAu4B,aAAa,CAEX77B,KAAgB,EAChBm1B,UAAoB,EACpB7xD,mBAA6C,EAC7Co2D,YAA4B,EACH;IACzB,MAAMtE,IAA6B,GAAG,EAAE,CAAA;IACxC,IAAI75B,KAAK,GAAG,IAAI,CAAA;AAEhB,IAAA,OAAO,CAAC,IAAI,CAACvY,GAAG,CAACgd,KAAK,CAAC,EAAE;AACvB,MAAA,IAAIzE,KAAK,EAAE;AACTA,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;QACL,IAAI,CAAC1O,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB,QAAA,IAAI,IAAI,CAACpM,KAAK,CAACuf,KAAK,CAAC,EAAE;AACrB,UAAA,IAAI05B,YAAY,EAAE;AAChB,YAAA,IAAI,CAACE,2BAA2B,CAACF,YAAY,CAAC,CAAA;AAChD,WAAA;UACA,IAAI,CAAC3lD,IAAI,EAAE,CAAA;AACX,UAAA,MAAA;AACF,SAAA;AACF,OAAA;MAEAqhD,IAAI,CAACzzD,IAAI,CAAC,IAAI,CAACk4D,iBAAiB,CAAC1E,UAAU,EAAE7xD,mBAAmB,CAAC,CAAC,CAAA;AACpE,KAAA;AACA,IAAA,OAAO8xD,IAAI,CAAA;AACb,GAAA;AAcAyE,EAAAA,iBAAiB,CAEf1E,UAA2B,EAC3B7xD,mBAA6C,EAC7Cm2D,gBAAiC,EACZ;AACrB,IAAA,IAAI1O,GAAG,CAAA;AACP,IAAA,IAAI,IAAI,CAACtqC,KAAK,CAAA,EAAA,CAAU,EAAE;MACxB,IAAI,CAAC00C,UAAU,EAAE;AACf,QAAA,IAAI,CAACjxD,KAAK,CAACxG,MAAM,CAACnE,eAAe,EAAE;AACjC4K,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACwZ,WAAW,EAAE;AAC5BvpB,UAAAA,UAAU,EAAE,GAAA;AACd,SAAC,CAAC,CAAA;AACJ,OAAA;AACA81D,MAAAA,GAAG,GAAG,IAAI,CAAA;AACZ,KAAC,MAAM,IAAI,IAAI,CAACtqC,KAAK,IAAa,EAAE;AAClC,MAAA,MAAM66C,kBAAkB,GAAG,IAAI,CAACt2D,KAAK,CAAC3B,QAAQ,CAAA;AAE9C0nD,MAAAA,GAAG,GAAG,IAAI,CAACxsB,cAAc,CACvB,IAAI,CAACy2B,WAAW,CAAC1xD,mBAAmB,CAAC,EACrCg4D,kBAAkB,CACnB,CAAA;AACH,KAAC,MAAM,IAAI,IAAI,CAAC76C,KAAK,IAAa,EAAE;AAClC,MAAA,IAAI,CAACuE,YAAY,CAAC,oBAAoB,CAAC,CAAA;MACvC,IAAI,CAACy0C,gBAAgB,EAAE;AACrB,QAAA,IAAI,CAACv1D,KAAK,CAACxG,MAAM,CAAChF,6BAA6B,EAAE;AAC/CyL,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,MAAMpF,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;MAC7B,IAAI,CAACuR,IAAI,EAAE,CAAA;MACXg3C,GAAG,GAAG,IAAI,CAACroD,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACpD,KAAC,MAAM;MACL8sD,GAAG,GAAG,IAAI,CAACjtB,uBAAuB,CAChCx6B,mBAAmB,EACnB,IAAI,CAACi7B,cAAc,CACpB,CAAA;AACH,KAAA;AACA,IAAA,OAAOwsB,GAAG,CAAA;AACZ,GAAA;;EAQAv1B,eAAe,CAAC+C,OAAiB,EAAgB;AAC/C,IAAA,MAAMt6B,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAgB,CAAA;AAC3C,IAAA,MAAMvM,IAAI,GAAG,IAAI,CAACo8D,mBAAmB,CAAC95B,OAAO,CAAC,CAAA;AAE9C,IAAA,OAAO,IAAI,CAACuD,gBAAgB,CAAC79B,IAAI,EAAEhI,IAAI,CAAC,CAAA;AAC1C,GAAA;AAEA6lC,EAAAA,gBAAgB,CACd79B,IAAgC,EAChChI,IAAY,EACE;IACdgI,IAAI,CAAChI,IAAI,GAAGA,IAAI,CAAA;AAChBgI,IAAAA,IAAI,CAACxB,GAAG,CAAC/P,cAAc,GAAGuJ,IAAI,CAAA;AAE9B,IAAA,OAAO,IAAI,CAACyM,UAAU,CAACzE,IAAI,EAAE,YAAY,CAAC,CAAA;AAC5C,GAAA;EAEAo0D,mBAAmB,CAAC95B,OAAiB,EAAU;AAC7C,IAAA,IAAItiC,IAAY,CAAA;IAEhB,MAAM;MAAEoN,QAAQ;AAAEhT,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;AAErC,IAAA,IAAIgM,0BAA0B,CAAC3gB,IAAI,CAAC,EAAE;AACpC4F,MAAAA,IAAI,GAAG,IAAI,CAAC+O,KAAK,CAACxX,KAAK,CAAA;AACzB,KAAC,MAAM;MACL,MAAM,IAAI,CAACyH,UAAU,EAAE,CAAA;AACzB,KAAA;AAEA,IAAA,MAAMsc,cAAc,GAAGR,iCAAiC,CAAC1gB,IAAI,CAAC,CAAA;AAE9D,IAAA,IAAIkoC,OAAO,EAAE;AAGX,MAAA,IAAIhnB,cAAc,EAAE;QAClB,IAAI,CAACqT,YAAY,CAAS,GAAA,CAAA,CAAA;AAC5B,OAAA;AACF,KAAC,MAAM;MACL,IAAI,CAACsd,iBAAiB,CAACjsC,IAAI,EAAEoN,QAAQ,EAAEkO,cAAc,EAAE,KAAK,CAAC,CAAA;AAC/D,KAAA;IAEA,IAAI,CAACwC,IAAI,EAAE,CAAA;AAEX,IAAA,OAAO9d,IAAI,CAAA;AACb,GAAA;EAEAisC,iBAAiB,CACf5uB,IAAY,EACZjQ,QAAkB,EAClB+oD,aAAsB,EACtBzoD,SAAkB,EACZ;AAEN,IAAA,IAAI2P,IAAI,CAACpmB,MAAM,GAAG,EAAE,EAAE;AACpB,MAAA,OAAA;AACF,KAAA;AAGA,IAAA,IAAI,CAACgnB,iBAAiB,CAACZ,IAAI,CAAC,EAAE;AAC5B,MAAA,OAAA;AACF,KAAA;IAEA,IAAIA,IAAI,KAAK,OAAO,EAAE;AACpB,MAAA,IAAI,IAAI,CAACgb,SAAS,CAAC7C,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAACvnB,KAAK,CAACxG,MAAM,CAAC/C,sBAAsB,EAAE;AAAEwJ,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AAC3D,QAAA,OAAA;AACF,OAAA;AACF,KAAC,MAAM,IAAIiQ,IAAI,KAAK,OAAO,EAAE;AAC3B,MAAA,IAAI,IAAI,CAACgb,SAAS,CAAC9C,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAACtnB,KAAK,CAACxG,MAAM,CAAC9M,sBAAsB,EAAE;AAAEuT,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AAC3D,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,IAAI,IAAI,CAACoV,KAAK,CAACP,aAAa,EAAE;AAC5B,QAAA,IAAI,CAAChU,KAAK,CAACxG,MAAM,CAAC7M,mCAAmC,EAAE;AACrDsT,UAAAA,EAAE,EAAEd,QAAAA;AACN,SAAC,CAAC,CAAA;AACF,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,IAAI,CAACmrB,eAAe,CAAC9D,+BAA+B,CAAC;AAAEvmB,QAAAA,EAAE,EAAEd,QAAAA;AAAS,OAAC,CAAC,CAAA;AACxE,KAAC,MAAM,IAAIiQ,IAAI,KAAK,WAAW,EAAE;AAC/B,MAAA,IAAI,IAAI,CAACmF,KAAK,CAACR,+BAA+B,EAAE;AAC9C,QAAA,IAAI,CAAC/T,KAAK,CAACxG,MAAM,CAAChN,gBAAgB,EAAE;AAAEyT,UAAAA,EAAE,EAAEd,QAAAA;AAAS,SAAC,CAAC,CAAA;AACrD,QAAA,OAAA;AACF,OAAA;AACF,KAAA;AAEA,IAAA,IAAI+oD,aAAa,IAAIx4C,SAAS,CAACN,IAAI,CAAC,EAAE;AACpC,MAAA,IAAI,CAACpP,KAAK,CAACxG,MAAM,CAAC5E,iBAAiB,EAAE;AACnCqL,QAAAA,EAAE,EAAEd,QAAQ;AACZtK,QAAAA,OAAO,EAAEua,IAAAA;AACX,OAAC,CAAC,CAAA;AACF,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAM8pD,YAAY,GAAG,CAAC,IAAI,CAACp4D,KAAK,CAACiO,MAAM,GACnCI,cAAc,GACd1P,SAAS,GACTgQ,wBAAwB,GACxBH,oBAAoB,CAAA;IAExB,IAAI4pD,YAAY,CAAC9pD,IAAI,EAAE,IAAI,CAACC,QAAQ,CAAC,EAAE;AACrC,MAAA,IAAI,CAACrP,KAAK,CAACxG,MAAM,CAACrE,sBAAsB,EAAE;AACxC8K,QAAAA,EAAE,EAAEd,QAAQ;AACZ5O,QAAAA,YAAY,EAAE6e,IAAAA;AAChB,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AAEAmlD,EAAAA,cAAc,GAAY;AACxB,IAAA,IAAI,IAAI,CAACnqC,SAAS,CAAC9C,QAAQ,EAAE,OAAO,IAAI,CAAA;AACxC,IAAA,IAAI,IAAI,CAACltB,OAAO,CAAC81D,yBAAyB,IAAI,CAAC,IAAI,CAAC37C,KAAK,CAACb,UAAU,EAAE;AACpE,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;EAIA8gD,UAAU,CAAer1D,QAAkB,EAAqB;AAC9D,IAAA,MAAMpF,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAAoBtsB,QAAQ,CAAC,CAAA;IAE1D,IAAI,CAACmrB,eAAe,CAACjE,+BAA+B,CAClD7sB,MAAM,CAAC5M,8BAA8B,EACrC;AAEEqT,MAAAA,EAAE,EAAElG,IAAAA;AACN,KAAC,CACF,CAAA;AAED,IAAA,IAAI,IAAI,CAAC+kB,GAAG,CAAA,EAAA,CAAS,EAAE;AACrB,MAAA,IAAI,CAAC9e,KAAK,CAACxG,MAAM,CAACtG,iBAAiB,EAAE;AAAE+M,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AACpD,KAAA;AAEA,IAAA,IAAI,CAAC,IAAI,CAACwa,KAAK,CAACb,UAAU,IAAI,CAAC,IAAI,CAACtZ,OAAO,CAAC81D,yBAAyB,EAAE;AACrE,MAAA,IAAI,IAAI,CAAC0E,gBAAgB,EAAE,EAAE;QAC3B,IAAI,CAACr/C,2BAA2B,GAAG,IAAI,CAAA;AACzC,OAAC,MAAM;QACL,IAAI,CAACD,iBAAiB,GAAG,IAAI,CAAA;AAC/B,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAAC,IAAI,CAACxU,KAAK,CAACyY,SAAS,EAAE;MACzBxf,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAAC0oD,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAClD,KAAA;AAEA,IAAA,OAAO,IAAI,CAAChjD,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;AAEA66D,EAAAA,gBAAgB,GAAY;AAC1B,IAAA,IAAI,IAAI,CAACtsC,qBAAqB,EAAE,EAAE,OAAO,IAAI,CAAA;IAC7C,MAAM;AAAEn8B,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;AAC3B,IAAA;MAGE3U,IAAI,KAAA,EAAe,IACnBA,IAAI,KAAA,EAAc,IAClBA,IAAI,KAAA,CAAgB,IACpB2hB,eAAe,CAAC3hB,IAAI,CAAC,IACpBA,IAAI,KAAW,GAAA,IAAI,CAAC,IAAI,CAAC2U,KAAK,CAAC+Y,WAAY;MAG5C1tB,IAAI,KAAA,GAAc,IAClBA,IAAI,KAAa,EAAA;AAGhB,MAAA,IAAI,CAACqU,SAAS,CAAC,aAAa,CAAC,IAAIrU,IAAI,KAAA,EAAA;AAAe,MAAA;AAEzD,GAAA;;AAIA4mE,EAAAA,UAAU,GAAkC;AAC1C,IAAA,MAAMh5D,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAqB,CAAA;IAEhD,IAAI,CAACgsB,eAAe,CAACjE,+BAA+B,CAClD7sB,MAAM,CAAC9C,gBAAgB,EACvB;AAEEuJ,MAAAA,EAAE,EAAElG,IAAAA;AACN,KAAC,CACF,CAAA;IAED,IAAI,CAAC8V,IAAI,EAAE,CAAA;IACX,IAAIspD,UAAU,GAAG,KAAK,CAAA;IACtB,IAAIrgE,QAA6B,GAAG,IAAI,CAAA;AACxC,IAAA,IAAI,CAAC,IAAI,CAACwvB,qBAAqB,EAAE,EAAE;AACjC6wC,MAAAA,UAAU,GAAG,IAAI,CAACr6C,GAAG,CAAS,EAAA,CAAA,CAAA;AAC9B,MAAA,QAAQ,IAAI,CAAChe,KAAK,CAAC3U,IAAI;AACrB,QAAA,KAAA,EAAA,CAAA;AACA,QAAA,KAAA,GAAA,CAAA;AACA,QAAA,KAAA,CAAA,CAAA;AACA,QAAA,KAAA,EAAA,CAAA;AACA,QAAA,KAAA,CAAA,CAAA;AACA,QAAA,KAAA,CAAA,CAAA;AACA,QAAA,KAAA,EAAA,CAAA;AACA,QAAA,KAAA,EAAA;UAIE,IAAI,CAACgtE,UAAU,EAAE,MAAA;AAEnB,QAAA;AACErgE,UAAAA,QAAQ,GAAG,IAAI,CAAC6gC,gBAAgB,EAAE,CAAA;AAAC,OAAA;AAEzC,KAAA;IACA5/B,IAAI,CAACq/D,QAAQ,GAAGD,UAAU,CAAA;IAC1Bp/D,IAAI,CAACjB,QAAQ,GAAGA,QAAQ,CAAA;AACxB,IAAA,OAAO,IAAI,CAAC0F,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;;AAKAw5D,EAAAA,4BAA4B,CAAC93B,IAAkB,EAAEqsB,YAAsB,EAAE;AACvE,IAAA,IAAI,IAAI,CAACtnD,SAAS,CAAC,CAAC,kBAAkB,EAAE;AAAEghB,MAAAA,QAAQ,EAAE,OAAA;KAAS,CAAC,CAAC,EAAE;AAC/D,MAAA,IAAIia,IAAI,CAACtvC,IAAI,KAAK,oBAAoB,EAAE;AAGtC,QAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAACxB,8BAA8B,EAAE;AAChDiI,UAAAA,EAAE,EAAE6nD,YAAAA;AACN,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AACF,GAAA;AAEAiM,EAAAA,6BAA6B,CAACsF,SAAuB,EAAEl6D,QAAkB,EAAE;AACzE,IAAA,IAAI,IAAI,CAACm6D,iBAAiB,CAACD,SAAS,CAAC,EAAE;AACrC,MAAA,MAAM3mC,QAAQ,GAAG,IAAI,CAACjH,WAAW,CAAyBtsB,QAAQ,CAAC,CAAA;MACnEuzB,QAAQ,CAACryB,MAAM,GAAGg5D,SAAS,CAAA;AAC3B,MAAA,OAAO,IAAI,CAAC76D,UAAU,CAACk0B,QAAQ,EAAE,sBAAsB,CAAC,CAAA;AAC1D,KAAC,MAAM;AACL,MAAA,MAAMA,QAAQ,GAAG,IAAI,CAACjH,WAAW,CAA4BtsB,QAAQ,CAAC,CAAA;AACtE,MAAA,IAAI,CAACo6D,kCAAkC,CAACp6D,QAAQ,CAAC,CAAA;MACjDuzB,QAAQ,CAACh3B,UAAU,GAAG29D,SAAS,CAAA;AAC/B,MAAA,OAAO,IAAI,CAAC76D,UAAU,CAACk0B,QAAQ,EAAE,yBAAyB,CAAC,CAAA;AAC7D,KAAA;AACF,GAAA;EAEA4mC,iBAAiB,CAAC59D,UAAwB,EAAW;IACnD,QAAQA,UAAU,CAACvP,IAAI;AACrB,MAAA,KAAK,kBAAkB;AACrB,QAAA,OACE,CAACuP,UAAU,CAAC6C,QAAQ,IAAI,IAAI,CAAC+6D,iBAAiB,CAAC59D,UAAU,CAACvS,MAAM,CAAC,CAAA;AAErE,MAAA,KAAK,YAAY;AACf,QAAA,OAAO,IAAI,CAAA;AACb,MAAA;AACE,QAAA,OAAO,KAAK,CAAA;AAAC,KAAA;AAEnB,GAAA;;EAMAowE,kCAAkC,CAACp6D,QAAkB,EAAQ;AAO3D,IAAA,IAAI,IAAI,CAACod,KAAK,CAAA,EAAA,CAAU,EAAE;AACxB,MAAA,MAAM,IAAI,CAACvc,KAAK,CAACxG,MAAM,CAAC1B,mBAAmB,EAAE;AAAEmI,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,OAAC,CAAC,CAAA;AAC3E,KAAA;;AAGA,IAAA,IAAI,CAAC,IAAI,CAACi1D,qCAAqC,EAAE,EAAE;AACjD,MAAA,IAAI,CAACp0D,KAAK,CAACxG,MAAM,CAACvB,mBAAmB,EAAE;AAAEgI,QAAAA,EAAE,EAAEd,QAAAA;AAAS,OAAC,CAAC,CAAA;AAC1D,KAAA;AACF,GAAA;;EAQA00D,uBAAuB,CAAI2F,QAAiB,EAAK;AAC/C,IAAA,MAAMC,sBAAsB,GAAG,IAAI,CAAC34D,KAAK,CAACsY,YAAY,CAAA;AACtD,IAAA,IAAI,CAACtY,KAAK,CAACsY,YAAY,GAAG;AAExBC,MAAAA,wBAAwB,EAAE,CAAC;AAE3BC,MAAAA,aAAa,EAAE,IAAA;KAChB,CAAA;IAED,IAAI;AACF,MAAA,OAAOkgD,QAAQ,EAAE,CAAA;AACnB,KAAC,SAAS;AACR,MAAA,IAAI,CAAC14D,KAAK,CAACsY,YAAY,GAAGqgD,sBAAsB,CAAA;AAClD,KAAA;AACF,GAAA;;EAUAC,kCAAkC,CAAIF,QAAiB,EAAK;AAC1D,IAAA,IAAI,IAAI,CAACh5D,SAAS,CAAC,CAAC,kBAAkB,EAAE;AAAEghB,MAAAA,QAAQ,EAAE,OAAA;KAAS,CAAC,CAAC,EAAE;AAE/D,MAAA,MAAMi4C,sBAAsB,GAAG,IAAI,CAAC34D,KAAK,CAACsY,YAAY,CAAA;AACtD,MAAA,IAAI,CAACtY,KAAK,CAACsY,YAAY,GAAG;AAExBC,QAAAA,wBAAwB,EAAE,CAAC;AAE3BC,QAAAA,aAAa,EAAE,IAAA;OAChB,CAAA;MAED,IAAI;AACF,QAAA,OAAOkgD,QAAQ,EAAE,CAAA;AACnB,OAAC,SAAS;AACR,QAAA,IAAI,CAAC14D,KAAK,CAACsY,YAAY,GAAGqgD,sBAAsB,CAAA;AAClD,OAAA;AACF,KAAC,MAAM;AAKL,MAAA,OAAOD,QAAQ,EAAE,CAAA;AACnB,KAAA;AACF,GAAA;EAEAvF,8BAA8B,CAAIuF,QAAiB,EAAK;AACtD,IAAA,MAAMG,0BAA0B,GAAG,IAAI,CAAC74D,KAAK,CAACyY,SAAS,CAAA;AACvD,IAAA,IAAI,CAACzY,KAAK,CAACyY,SAAS,GAAG,IAAI,CAAA;IAE3B,IAAI;AACF,MAAA,OAAOigD,QAAQ,EAAE,CAAA;AACnB,KAAC,SAAS;AACR,MAAA,IAAI,CAAC14D,KAAK,CAACyY,SAAS,GAAGogD,0BAA0B,CAAA;AACnD,KAAA;AACF,GAAA;EAEA/G,UAAU,CAAI4G,QAAiB,EAAK;AAClC,IAAA,MAAMh/D,KAAK,GAAG,IAAI,CAAC4vB,SAAS,CAAC/C,YAAY,EAAE,CAAA;AAC3C,IAAA,MAAMuyC,cAAc,GAAG1yC,QAAQ,GAAG,CAAC1sB,KAAK,CAAA;AACxC,IAAA,IAAIo/D,cAAc,EAAE;MAClB,IAAI,CAACxvC,SAAS,CAAC/V,KAAK,CAAC7Z,KAAK,GAAG0sB,QAAQ,CAAC,CAAA;MACtC,IAAI;AACF,QAAA,OAAOsyC,QAAQ,EAAE,CAAA;AACnB,OAAC,SAAS;AACR,QAAA,IAAI,CAACpvC,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACvB,OAAA;AACF,KAAA;AACA,IAAA,OAAOklD,QAAQ,EAAE,CAAA;AACnB,GAAA;EAEA9G,aAAa,CAAI8G,QAAiB,EAAK;AACrC,IAAA,MAAMh/D,KAAK,GAAG,IAAI,CAAC4vB,SAAS,CAAC/C,YAAY,EAAE,CAAA;AAC3C,IAAA,MAAMwyC,gBAAgB,GAAG3yC,QAAQ,GAAG1sB,KAAK,CAAA;AACzC,IAAA,IAAIq/D,gBAAgB,EAAE;MACpB,IAAI,CAACzvC,SAAS,CAAC/V,KAAK,CAAC7Z,KAAK,GAAG,CAAC0sB,QAAQ,CAAC,CAAA;MACvC,IAAI;AACF,QAAA,OAAOsyC,QAAQ,EAAE,CAAA;AACnB,OAAC,SAAS;AACR,QAAA,IAAI,CAACpvC,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACvB,OAAA;AACF,KAAA;AACA,IAAA,OAAOklD,QAAQ,EAAE,CAAA;AACnB,GAAA;;AAIA3C,EAAAA,sBAAsB,GAAS;AAC7B,IAAA,IAAI,CAAC/1D,KAAK,CAACsY,YAAY,CAACE,aAAa,GAAG,CAAC,CAAA;AAC3C,GAAA;AAEAs9C,EAAAA,uCAAuC,GAAY;IACjD,OAAO,IAAI,CAAC91D,KAAK,CAACsY,YAAY,CAACC,wBAAwB,IAAI,CAAC,CAAA;AAC9D,GAAA;AAEA+6C,EAAAA,qCAAqC,GAAY;AAC/C,IAAA,OACE,IAAI,CAACtzD,KAAK,CAACsY,YAAY,CAACE,aAAa,IAAI,IAAI,IAC7C,IAAI,CAACxY,KAAK,CAACsY,YAAY,CAACE,aAAa,IAAI,CAAC,CAAA;AAE9C,GAAA;EAEA46C,uBAAuB,CAAeZ,IAAY,EAAgB;AAChE,IAAA,MAAMn0D,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;IAEpC,IAAI,CAAC2B,KAAK,CAAC4X,gBAAgB,GAAG,IAAI,CAAC5X,KAAK,CAACzY,KAAK,CAAA;AAC9C,IAAA,MAAMotE,6BAA6B,GAAG,IAAI,CAAC30D,KAAK,CAAC0Y,0BAA0B,CAAA;AAC3E,IAAA,IAAI,CAAC1Y,KAAK,CAAC0Y,0BAA0B,GAAG,IAAI,CAAA;AAE5C,IAAA,MAAMsgD,GAAG,GAAG,IAAI,CAACjS,WAAW,CAC1B,IAAI,CAACuL,wBAAwB,EAAE,EAC/Bj0D,QAAQ,EACRm0D,IAAI,CACL,CAAA;AAED,IAAA,IAAI,CAACxyD,KAAK,CAAC0Y,0BAA0B,GAAGi8C,6BAA6B,CAAA;AAErE,IAAA,OAAOqE,GAAG,CAAA;AACZ,GAAA;;AAGAzD,EAAAA,qBAAqB,GAAmC;AACtD,IAAA,IAAI,CAACv1C,YAAY,CAAC,cAAc,CAAC,CAAA;AACjC,IAAA,MAAM/mB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAsB,CAAA;IACjD,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,CAAC,IAAI,CAAC0M,KAAK,GAAW,EAAE;AAC1B,MAAA,IAAI,CAACxrB,UAAU,CAAC,IAAI,EAAY,CAAA,CAAA,CAAA;AAClC,KAAA;IAEA,MAAMkvC,OAAO,GAAG,IAAI,CAACxU,WAAW,CAAY,IAAI,CAAC3qB,KAAK,CAACkB,MAAM,CAAC,CAAA;IAC9D,IAAI,CAAC6N,IAAI,EAAE,CAAA;;AAEX,IAAA,MAAMkqD,YAAY,GAAG,IAAI,CAACnwC,gBAAgB,CAAiB,IAAI,CAAC,CAAA;IAChE,IAAI,CAACW,kBAAkB,EAAE,CAAA;IAEzB,IAAI;MACFxwB,IAAI,CAACiD,IAAI,GAAG,IAAI,CAACg9D,YAAY,CAAC/5B,OAAO,EAAa,CAAA,EAAA,QAAQ,CAAC,CAAA;AAC7D,KAAC,SAAS;AACR85B,MAAAA,YAAY,EAAE,CAAA;AAChB,KAAA;AACA,IAAA,OAAO,IAAI,CAACv7D,UAAU,CAAqBzE,IAAI,EAAE,kBAAkB,CAAC,CAAA;AACtE,GAAA;;EAGA4iC,+BAA+B;AAE7B79B,EAAAA,IAAmD,EAC7C,EAAC;AACX;;AC5iGA,MAAMm7D,SAAS,GAAG;AAAE1tE,IAAAA,IAAI,EAAE,MAAA;GAAiB;AACzC2tE,EAAAA,WAAW,GAAG;AAAE3tE,IAAAA,IAAI,EAAE,QAAA;GAAmB,CAAA;AAE3C,IAAkB4tE,iBAAiB,GAAA;AAAA,EAAA,UAAA,EAAA,CAAA;AAAA,EAAA,WAAA,EAAA,CAAA;AAAA,EAAA,kBAAA,EAAA,CAAA;AAAA,EAAA,UAAA,EAAA,CAAA;AAAA,EAAA,KAAA,EAAA,CAAA;AAAA,CAAA,CAAA;AAQnC,IAAkBC,kBAAkB,GAAA;AAAA,EAAA,aAAA,EAAA,CAAA;AAAA,EAAA,iBAAA,EAAA,CAAA;AAAA,EAAA,gBAAA,EAAA,CAAA;AAAA,EAAA,wBAAA,EAAA,CAAA;AAAA,EAAA,oBAAA,EAAA,CAAA;AAAA,CAAA,CAAA;AAQpC,MAAMC,aAAa,GAAG,kBAAkB,CAAA;AAExC,MAAMC,yBAAyB,GAAG,kBAAkB,CAAA;;AAUpD,SAASC,kBAAkB,CAAClgE,MAA6B,EAAEqd,KAAa,EAAE;AACxE,EAAA,KAAK,IAAIluB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6Q,MAAM,CAACrR,MAAM,EAAEQ,CAAC,EAAE,EAAE;AACtC,IAAA,MAAMmO,KAAK,GAAG0C,MAAM,CAAC7Q,CAAC,CAAC,CAAA;IACvB,MAAM;AAAE2C,MAAAA,IAAAA;AAAK,KAAC,GAAGwL,KAAK,CAAA;AACtB,IAAA,IAAI,OAAOxL,IAAI,KAAK,QAAQ,EAAE;AACO,MAAA;QACjC,IAAIA,IAAI,QAAmB,EAAE;UAC3B,MAAM;YAAEoM,GAAG;YAAElQ,KAAK;YAAEiB,KAAK;AAAEhB,YAAAA,GAAAA;AAAI,WAAC,GAAGqP,KAAK,CAAA;AACxC,UAAA,MAAM6iE,UAAU,GAAGnyE,KAAK,GAAG,CAAC,CAAA;UAC5B,MAAMoyE,UAAU,GAAGhyE,8BAA8B,CAAC8P,GAAG,CAAClQ,KAAK,EAAE,CAAC,CAAC,CAAA;UAC/DgS,MAAM,CAACkd,MAAM,CACX/tB,CAAC,EACD,CAAC,EACD,IAAIy0B,KAAK,CAAC;YAER9xB,IAAI,EAAE4hB,gBAAgB,CAAS,EAAA,CAAA;AAC/BzkB,YAAAA,KAAK,EAAE,GAAG;AACVjB,YAAAA,KAAK,EAAEA,KAAK;AACZC,YAAAA,GAAG,EAAEkyE,UAAU;YACfr7D,QAAQ,EAAE5G,GAAG,CAAClQ,KAAK;AACnB2Z,YAAAA,MAAM,EAAEy4D,UAAAA;AACV,WAAC,CAAC,EACF,IAAIx8C,KAAK,CAAC;YAER9xB,IAAI,EAAE4hB,gBAAgB,CAAS,GAAA,CAAA;AAC/BzkB,YAAAA,KAAK,EAAEA,KAAK;AACZjB,YAAAA,KAAK,EAAEmyE,UAAU;AACjBlyE,YAAAA,GAAG,EAAEA,GAAG;AACR6W,YAAAA,QAAQ,EAAEs7D,UAAU;YACpBz4D,MAAM,EAAEzJ,GAAG,CAACjQ,GAAAA;AACd,WAAC,CAAC,CACH,CAAA;AACDkB,UAAAA,CAAC,EAAE,CAAA;AACH,UAAA,SAAA;AACF,SAAA;AAEA,QAAA,IAAIskB,eAAe,CAAC3hB,IAAI,CAAC,EAAE;UACzB,MAAM;YAAEoM,GAAG;YAAElQ,KAAK;YAAEiB,KAAK;AAAEhB,YAAAA,GAAAA;AAAI,WAAC,GAAGqP,KAAK,CAAA;AACxC,UAAA,MAAM+iE,YAAY,GAAGryE,KAAK,GAAG,CAAC,CAAA;UAC9B,MAAMsyE,eAAe,GAAGlyE,8BAA8B,CAAC8P,GAAG,CAAClQ,KAAK,EAAE,CAAC,CAAC,CAAA;AACpE,UAAA,IAAIuyE,UAAU,CAAA;AACd,UAAA,IAAIljD,KAAK,CAACC,UAAU,CAACtvB,KAAK,CAAC,OAA0B,EAAE;YACrDuyE,UAAU,GAAG,IAAI38C,KAAK,CAAC;cAErB9xB,IAAI,EAAE4hB,gBAAgB,CAAc,EAAA,CAAA;AACpCzkB,cAAAA,KAAK,EAAE,GAAG;AACVjB,cAAAA,KAAK,EAAEA,KAAK;AACZC,cAAAA,GAAG,EAAEoyE,YAAY;cACjBv7D,QAAQ,EAAE5G,GAAG,CAAClQ,KAAK;AACnB2Z,cAAAA,MAAM,EAAE24D,eAAAA;AACV,aAAC,CAAC,CAAA;AACJ,WAAC,MAAM;YACLC,UAAU,GAAG,IAAI38C,KAAK,CAAC;cAErB9xB,IAAI,EAAE4hB,gBAAgB,CAAW,CAAA,CAAA;AACjCzkB,cAAAA,KAAK,EAAE,GAAG;AACVjB,cAAAA,KAAK,EAAEA,KAAK;AACZC,cAAAA,GAAG,EAAEoyE,YAAY;cACjBv7D,QAAQ,EAAE5G,GAAG,CAAClQ,KAAK;AACnB2Z,cAAAA,MAAM,EAAE24D,eAAAA;AACV,aAAC,CAAC,CAAA;AACJ,WAAA;AACA,UAAA,IAAIE,aAAa,EACfC,kBAAkB,EAClBC,qBAAqB,EACrBC,QAAQ,CAAA;UACV,IAAI7uE,IAAI,OAAoB,EAAE;YAE5B2uE,kBAAkB,GAAGxyE,GAAG,GAAG,CAAC,CAAA;YAC5ByyE,qBAAqB,GAAGtyE,8BAA8B,CAAC8P,GAAG,CAACjQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;AACnEuyE,YAAAA,aAAa,GAAGvxE,KAAK,KAAK,IAAI,GAAG,IAAI,GAAGA,KAAK,CAACmxB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC1DugD,QAAQ,GAAG,IAAI/8C,KAAK,CAAC;cAEnB9xB,IAAI,EAAE4hB,gBAAgB,CAAc,EAAA,CAAA;AACpCzkB,cAAAA,KAAK,EAAE,GAAG;AACVjB,cAAAA,KAAK,EAAEyyE,kBAAkB;AACzBxyE,cAAAA,GAAG,EAAEA,GAAG;AACR6W,cAAAA,QAAQ,EAAE47D,qBAAqB;cAC/B/4D,MAAM,EAAEzJ,GAAG,CAACjQ,GAAAA;AACd,aAAC,CAAC,CAAA;AACJ,WAAC,MAAM;YAELwyE,kBAAkB,GAAGxyE,GAAG,GAAG,CAAC,CAAA;YAC5ByyE,qBAAqB,GAAGtyE,8BAA8B,CAAC8P,GAAG,CAACjQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;AACnEuyE,YAAAA,aAAa,GAAGvxE,KAAK,KAAK,IAAI,GAAG,IAAI,GAAGA,KAAK,CAACmxB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC1DugD,QAAQ,GAAG,IAAI/8C,KAAK,CAAC;cAEnB9xB,IAAI,EAAE4hB,gBAAgB,CAAiB,EAAA,CAAA;AACvCzkB,cAAAA,KAAK,EAAE,IAAI;AACXjB,cAAAA,KAAK,EAAEyyE,kBAAkB;AACzBxyE,cAAAA,GAAG,EAAEA,GAAG;AACR6W,cAAAA,QAAQ,EAAE47D,qBAAqB;cAC/B/4D,MAAM,EAAEzJ,GAAG,CAACjQ,GAAAA;AACd,aAAC,CAAC,CAAA;AACJ,WAAA;UACA+R,MAAM,CAACkd,MAAM,CACX/tB,CAAC,EACD,CAAC,EACDoxE,UAAU,EACV,IAAI38C,KAAK,CAAC;YAER9xB,IAAI,EAAE4hB,gBAAgB,CAAa,EAAA,CAAA;AACnCzkB,YAAAA,KAAK,EAAEuxE,aAAa;AACpBxyE,YAAAA,KAAK,EAAEqyE,YAAY;AACnBpyE,YAAAA,GAAG,EAAEwyE,kBAAkB;AACvB37D,YAAAA,QAAQ,EAAEw7D,eAAe;AACzB34D,YAAAA,MAAM,EAAE+4D,qBAAAA;WACT,CAAC,EACFC,QAAQ,CACT,CAAA;AACDxxE,UAAAA,CAAC,IAAI,CAAC,CAAA;AACN,UAAA,SAAA;AACF,SAAA;AACF,OAAA;AAEAmO,MAAAA,KAAK,CAACxL,IAAI,GAAG4hB,gBAAgB,CAAC5hB,IAAI,CAAC,CAAA;AACrC,KAAA;AACF,GAAA;AACA,EAAA,OAAOkO,MAAM,CAAA;AACf,CAAA;AACe,MAAe4gE,eAAe,SAAS9I,gBAAgB,CAAC;;AAQrEnyB,EAAAA,aAAa,CAAe7lC,IAAY,EAAE8lC,OAAkB,EAAU;IACpE9lC,IAAI,CAAC8lC,OAAO,GAAG,IAAI,CAAC+5B,YAAY,CAAC/5B,OAAO,CAAC,CAAA;AACzC9lC,IAAAA,IAAI,CAAC4b,QAAQ,GAAG,IAAI,CAACjV,KAAK,CAACiV,QAAQ,CAAA;AAEnC,IAAA,IAAI,IAAI,CAAC3b,OAAO,CAACC,MAAM,EAAE;AACvBF,MAAAA,IAAI,CAACE,MAAM,GAAGkgE,kBAAkB,CAAC,IAAI,CAAClgE,MAAM,EAAE,IAAI,CAACqd,KAAK,CAAC,CAAA;AAC3D,KAAA;AAEA,IAAA,OAAO,IAAI,CAAClZ,UAAU,CAACrE,IAAI,EAAE,MAAM,CAAC,CAAA;AACtC,GAAA;AAEA6/D,EAAAA,YAAY,CAEV/5B,OAA0B,EAC1B33C,GAAc,GAAS,GAAA,EACvB6xB,UAAsB,GAAG,IAAI,CAAC/f,OAAO,CAAC+f,UAAU,EACrC;IACX8lB,OAAO,CAAC9lB,UAAU,GAAGA,UAAU,CAAA;AAC/B8lB,IAAAA,OAAO,CAACi7B,WAAW,GAAG,IAAI,CAACC,yBAAyB,EAAE,CAAA;IACtD,IAAI,CAAC1+D,cAAc,CAACwjC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE33C,GAAG,CAAC,CAAA;IAC7C,IACE,IAAI,CAAC+mB,QAAQ,IACb,CAAC,IAAI,CAACjV,OAAO,CAACk2D,sBAAsB,IACpC,IAAI,CAAC/7C,KAAK,CAAChB,gBAAgB,CAACyO,IAAI,GAAG,CAAC,EACpC;AACA,MAAA,KAAK,MAAM,CAACvzB,SAAS,EAAEwR,EAAE,CAAC,IAAIjH,KAAK,CAAC6rB,IAAI,CAAC,IAAI,CAACtQ,KAAK,CAAChB,gBAAgB,CAAC,EAAE;AACrE,QAAA,IAAI,CAACvT,KAAK,CAACxG,MAAM,CAAC5G,qBAAqB,EAAE;UAAEqN,EAAE;AAAExR,UAAAA,SAAAA;AAAU,SAAC,CAAC,CAAA;AAC7D,OAAA;AACF,KAAA;AACA,IAAA,IAAI2sE,eAA0B,CAAA;IAC9B,IAAI9yE,GAAG,QAAW,EAAE;MAElB8yE,eAAe,GAAG,IAAI,CAAC58D,UAAU,CAACyhC,OAAO,EAAE,SAAS,CAAC,CAAA;AACvD,KAAC,MAAM;MAELm7B,eAAe,GAAG,IAAI,CAACr5D,YAAY,CACjCk+B,OAAO,EACP,SAAS,EACTx3C,8BAA8B,CAAC,IAAI,CAACqY,KAAK,CAAC3B,QAAQ,EAAE,CAAC,CAAC,CAAC,CACxD,CAAA;AACH,KAAA;AACA,IAAA,OAAOi8D,eAAe,CAAA;AACxB,GAAA;;EAKAC,eAAe,CAACv/D,IAAiB,EAAe;IAC9C,MAAML,SAAS,GAAGK,IAAW,CAAA;IAC7BL,SAAS,CAACtP,IAAI,GAAG,WAAW,CAAA;AAC5BsP,IAAAA,SAAS,CAACnS,KAAK,GAAGmS,SAAS,CAACC,UAAU,CAAA;IACtC,OAAOD,SAAS,CAACC,UAAU,CAAA;AAE3B,IAAA,MAAM4/D,gBAAgB,GAAG7/D,SAAS,CAACnS,KAAK,CAAA;AACxC,IAAA,MAAMuS,eAAe,GAAGy/D,gBAAgB,CAAChyE,KAAK,CAAA;AAC9C,IAAA,MAAMqS,GAAG,GAAG,IAAI,CAAC+b,KAAK,CAAC+C,KAAK,CAAC6gD,gBAAgB,CAACjzE,KAAK,EAAEizE,gBAAgB,CAAChzE,GAAG,CAAC,CAAA;AAC1E,IAAA,MAAMkyB,GAAG,GAAI8gD,gBAAgB,CAAChyE,KAAK,GAAGqS,GAAG,CAAC8e,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAA;;IAEvD,IAAI,CAACmN,QAAQ,CAAC0zC,gBAAgB,EAAE,KAAK,EAAE3/D,GAAG,CAAC,CAAA;IAC3C,IAAI,CAACisB,QAAQ,CAAC0zC,gBAAgB,EAAE,UAAU,EAAE9gD,GAAG,CAAC,CAAA;IAChD,IAAI,CAACoN,QAAQ,CAAC0zC,gBAAgB,EAAE,iBAAiB,EAAEz/D,eAAe,CAAC,CAAA;IAEnEy/D,gBAAgB,CAACnvE,IAAI,GAAG,kBAAkB,CAAA;AAE1C,IAAA,OAAOsP,SAAS,CAAA;AAClB,GAAA;AAEA0/D,EAAAA,yBAAyB,GAAkC;AACzD,IAAA,IAAI,CAAC,IAAI,CAAC5+C,KAAK,IAAyB,EAAE;AACxC,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AAEA,IAAA,MAAMxiB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAA0B,CAAA;AACrDvE,IAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAACwX,KAAK,CAACxX,KAAK,CAAA;IAC7B,IAAI,CAACumB,IAAI,EAAE,CAAA;AACX,IAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AACtD,GAAA;AAEA+4B,EAAAA,KAAK,GAAY;AACf,IAAA,IAAI,CAAC,IAAI,CAACjL,YAAY,IAAS,EAAE;AAC/B,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;IACA,OAAO,IAAI,CAAC0zC,uBAAuB,EAAE,CAAA;AACvC,GAAA;AAEAxO,EAAAA,yBAAyB,CAAC/xC,EAAU,EAAEpiB,GAAW,EAAE;AACjD,IAAA,IAAI8V,iBAAiB,CAACsM,EAAE,CAAC,EAAE;MACzBs/C,yBAAyB,CAACh7C,SAAS,GAAG1mB,GAAG,CAAA;MACzC,IAAI0hE,yBAAyB,CAAC3rD,IAAI,CAAC,IAAI,CAAC+I,KAAK,CAAC,EAAE;QAG9C,MAAM8jD,KAAK,GAAG,IAAI,CAACh8C,cAAc,CAAC86C,yBAAyB,CAACh7C,SAAS,CAAC,CAAA;QACtE,IAAI,CAACzQ,gBAAgB,CAAC2sD,KAAK,CAAC,IAAIA,KAAK,OAAwB,EAAE;AAC7D,UAAA,OAAO,KAAK,CAAA;AACd,SAAA;AACF,OAAA;AACA,MAAA,OAAO,IAAI,CAAA;AACb,KAAC,MAAM,IAAIxgD,EAAE,KAAA,EAAwB,EAAE;AACrC,MAAA,OAAO,IAAI,CAAA;AACb,KAAC,MAAM;AACL,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AACF,GAAA;EAEAygD,sBAAsB,CAACzgD,EAAU,EAAE;AACjC,IAAA,OACEA,EAAE,KAAA,EAAgC,IAAIA,EAAE,KAA6B,GAAA,CAAA;AAEzE,GAAA;;AAMAugD,EAAAA,uBAAuB,GAAY;AACjC,IAAA,MAAM1rD,IAAI,GAAG,IAAI,CAACuP,cAAc,EAAE,CAAA;AAClC,IAAA,MAAM6I,MAAM,GAAG,IAAI,CAACzI,cAAc,CAAC3P,IAAI,CAAC,CAAA;AACxC,IAAA,OACE,IAAI,CAAC4rD,sBAAsB,CAACxzC,MAAM,CAAC,IACnC,IAAI,CAAC8kC,yBAAyB,CAAC9kC,MAAM,EAAEpY,IAAI,CAAC,CAAA;AAEhD,GAAA;;AAMA6rD,EAAAA,6BAA6B,GAAY;AACvC,IAAA,MAAM7rD,IAAI,GAAG,IAAI,CAACuP,cAAc,EAAE,CAAA;AAClC,IAAA,MAAM6I,MAAM,GAAG,IAAI,CAACzI,cAAc,CAAC3P,IAAI,CAAC,CAAA;AACxC,IAAA,OAAO,IAAI,CAACk9C,yBAAyB,CAAC9kC,MAAM,EAAEpY,IAAI,CAAC,CAAA;AACrD,GAAA;AAEA8rD,EAAAA,gBAAgB,GAAY;AAC1B,IAAA,MAAM18C,SAAS,GAAG,IAAI,CAACA,SAAS,EAAE,CAAA;IAClC,IAAIA,SAAS,CAAC9yB,IAAI,KAAA,GAAW,IAAI,CAAC8yB,SAAS,CAACpF,WAAW,EAAE;AAEvD,MAAA,OAAO,KAAK,CAAA;AACd,KAAC,MAAM;AACL,MAAA,IAAI,CAACiH,YAAY,CAAC,4BAA4B,CAAC,CAAA;AAC/C,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACF,GAAA;;AAGA86C,EAAAA,eAAe,GAAe;AAC5B,IAAA,OAAO,IAAI,CAACjjC,kBAAkB,CAC5ByhC,kBAAkB,CAACyB,iBAAiB,GAClCzB,kBAAkB,CAAC0B,gBAAgB,GACnC1B,kBAAkB,CAAC2B,wBAAwB,GAC3C3B,kBAAkB,CAAC4B,oBAAoB,CAC1C,CAAA;AACH,GAAA;;AAGAC,EAAAA,sBAAsB,GAAe;AACnC,IAAA,OAAO,IAAI,CAACtjC,kBAAkB,CAC5ByhC,kBAAkB,CAAC0B,gBAAgB,GACjC1B,kBAAkB,CAAC2B,wBAAwB,GAC3C3B,kBAAkB,CAAC4B,oBAAoB,CAC1C,CAAA;AACH,GAAA;EAEA9O,mCAAmC,CAEjCgP,uBAAgC,EAChC;AACA,IAAA,OAAO,IAAI,CAACvjC,kBAAkB,CAC5ByhC,kBAAkB,CAAC2B,wBAAwB,IACxCG,uBAAuB,GAAG,CAAC,GAAG9B,kBAAkB,CAAC4B,oBAAoB,CAAC,CAC1E,CAAA;AACH,GAAA;;AASAG,EAAAA,cAAc,GAAe;AAC3B,IAAA,OAAO,IAAI,CAACxjC,kBAAkB,CAACyhC,kBAAkB,CAACgC,aAAa,CAAC,CAAA;AAClE,GAAA;;EAIAzjC,kBAAkB,CAEhBn+B,KAAyB,EAOA;IACzB,IAAIoG,UAAgC,GAAG,IAAI,CAAA;AAE3C,IAAA,IAAI,IAAI,CAAC2b,KAAK,CAAA,EAAA,CAAO,EAAE;AACrB3b,MAAAA,UAAU,GAAG,IAAI,CAACo1D,eAAe,CAAC,IAAI,CAAC,CAAA;AACzC,KAAA;AACA,IAAA,OAAO,IAAI,CAACpN,qBAAqB,CAACpuD,KAAK,EAAEoG,UAAU,CAAC,CAAA;AACtD,GAAA;AAEAgoD,EAAAA,qBAAqB,CAEnBpuD,KAAyB,EACzBoG,UAAiC,EACpB;AACb,IAAA,MAAM+kD,SAAS,GAAG,IAAI,CAAC7kD,KAAK,CAAC3U,IAAI,CAAA;AACjC,IAAA,MAAM4N,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;IAC7B,MAAM+9D,gBAAgB,GAAG,CAAC,EAAE7hE,KAAK,GAAG4/D,kBAAkB,CAAC0B,gBAAgB,CAAC,CAAA;IACxE,MAAMQ,wBAAwB,GAAG,CAAC,EAChC9hE,KAAK,GAAG4/D,kBAAkB,CAAC2B,wBAAwB,CACpD,CAAA;AACD,IAAA,MAAMp/D,QAAQ,GAAGnC,KAAK,GAAG4/D,kBAAkB,CAACyB,iBAAiB,CAAA;;AAM7D,IAAA,QAAQlW,SAAS;AACf,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAC4W,2BAA2B,CAACxiE,IAAI,EAAgB,IAAI,CAAC,CAAA;AACnE,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAACwiE,2BAA2B,CAACxiE,IAAI,EAAgB,KAAK,CAAC,CAAA;AACpE,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAACyiE,sBAAsB,CAACziE,IAAI,CAAgC,CAAA;AACzE,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAC0iE,qBAAqB,CAAC1iE,IAAI,CAA+B,CAAA;AACvE,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAC2iE,iBAAiB,CAAC3iE,IAAI,CAA2B,CAAA;AAC/D,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,IAAI,CAACwlB,iBAAiB,EAAE,OAAkB,EAAE,MAAA;QAChD,IAAI,CAAC88C,gBAAgB,EAAE;AACrB,UAAA,IAAI,IAAI,CAACv7D,KAAK,CAACiO,MAAM,EAAE;AACrB,YAAA,IAAI,CAAC/O,KAAK,CAACxG,MAAM,CAACvC,cAAc,EAAE;AAAEgJ,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,aAAC,CAAC,CAAA;AAChE,WAAC,MAAM,IAAI,CAACm9D,wBAAwB,EAAE;AACpC,YAAA,IAAI,CAACt8D,KAAK,CAACxG,MAAM,CAACxF,cAAc,EAAE;AAAEiM,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,aAAC,CAAC,CAAA;AAChE,WAAA;AACF,SAAA;AACA,QAAA,OAAO,IAAI,CAAC0mD,sBAAsB,CAChC9rD,IAAI,EACJ,KAAK,EACL,CAACsiE,gBAAgB,IAAIC,wBAAwB,CAC9C,CAAA;AACH,MAAA,KAAA,EAAA;AACE,QAAA,IAAI,CAACD,gBAAgB,EAAE,IAAI,CAACtrE,UAAU,EAAE,CAAA;AACxC,QAAA,OAAO,IAAI,CAAC+0D,UAAU,CACpB,IAAI,CAACoF,mBAAmB,CACtBtqD,UAAU,EACV7G,IAAI,CACL,EACD,IAAI,CACL,CAAA;AAEH,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAC4iE,gBAAgB,CAAC5iE,IAAI,CAA0B,CAAA;AAC7D,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAC6iE,oBAAoB,CAAC7iE,IAAI,CAA8B,CAAA;AACrE,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAC8iE,oBAAoB,CAAC9iE,IAAI,CAA8B,CAAA;AACrE,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAC+iE,mBAAmB,CAAC/iE,IAAI,CAA6B,CAAA;AACnE,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAACgjE,iBAAiB,CAAChjE,IAAI,CAA2B,CAAA;AAE/D,MAAA,KAAA,GAAA;AAEE,QAAA,IACE,IAAI,CAACwuB,qBAAqB,EAAE,IAC5B,IAAI,CAACznB,KAAK,CAAC+Y,WAAW,IACtB,CAAC,IAAI,CAAC6hD,6BAA6B,EAAE,EACrC;AACA,UAAA,MAAA;AACF,SAAA;AACA,QAAA,IAAI,CAAC56C,YAAY,CAAC,4BAA4B,CAAC,CAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAACvM,KAAK,CAAClF,QAAQ,IAAI,IAAI,CAACkF,KAAK,CAACf,UAAU,EAAE;AACjD,UAAA,IAAI,CAACxT,KAAK,CAACxG,MAAM,CAAChE,0BAA0B,EAAE;AAC5CyK,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAC,MAAM,IAAI,CAACk9D,gBAAgB,EAAE;AAC5B,UAAA,IAAI,CAACr8D,KAAK,CAACxG,MAAM,CAACzE,4BAA4B,EAAE;AAC9CkL,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;AACA,QAAA,OAAO,IAAI,CAAC4mD,iBAAiB,CAC3BhsD,IAAI,EACJ,OAAO,CACR,CAAA;AACH,MAAA,KAAA,EAAA;AAAc,QAAA;AACZ,UAAA,IAAI,IAAI,CAAC+G,KAAK,CAAC+Y,WAAW,EAAE;AAC1B,YAAA,MAAA;AACF,WAAA;AAGA,UAAA,MAAMhK,IAAI,GAAG,IAAI,CAACuP,cAAc,EAAE,CAAA;AAClC,UAAA,MAAM6I,MAAM,GAAG,IAAI,CAACzI,cAAc,CAAC3P,IAAI,CAAC,CAAA;UACxC,IAAIoY,MAAM,OAAgC,EAAE;AAC1C,YAAA,IAAI,CAACo0C,gBAAgB,IAAI,IAAI,CAAC9zC,qBAAqB,EAAE,EAAE,MAAA;AACvD,YAAA,IACE,CAAC,IAAI,CAACwkC,yBAAyB,CAAC9kC,MAAM,EAAEpY,IAAI,CAAC,IAC7CoY,MAAM,KAAA,GAA6B,EACnC;AACA,cAAA,MAAA;AACF,aAAA;AACF,WAAA;AACF,SAAA;AAEA,MAAA,KAAA,EAAA;AAAgB,QAAA;UACd,IAAI,CAACo0C,gBAAgB,EAAE;AACrB,YAAA,IAAI,CAACr8D,KAAK,CAACxG,MAAM,CAACzE,4BAA4B,EAAE;AAC9CkL,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,aAAC,CAAC,CAAA;AACJ,WAAA;AACF,SAAA;AAEA,MAAA,KAAA,EAAA;AAAc,QAAA;AACZ,UAAA,MAAM5S,IAAI,GAAG,IAAI,CAACuU,KAAK,CAACxX,KAAK,CAAA;AAC7B,UAAA,OAAO,IAAI,CAACy8D,iBAAiB,CAC3BhsD,IAAI,EACJxN,IAAI,CACL,CAAA;AACH,SAAA;AACA,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAACywE,mBAAmB,CAACjjE,IAAI,CAA6B,CAAA;AACnE,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAACkjE,kBAAkB,CAACljE,IAAI,CAA4B,CAAA;AACjE,MAAA,KAAA,CAAA;QACE,OAAO,IAAI,CAACozD,UAAU,EAAE,CAAA;AAC1B,MAAA,KAAA,EAAA;AACE,QAAA,OAAO,IAAI,CAAC+P,mBAAmB,CAACnjE,IAAI,CAA6B,CAAA;AACnE,MAAA,KAAA,EAAA;AAAiB,QAAA;AACf,UAAA,MAAMojE,iBAAiB,GAAG,IAAI,CAAC59C,iBAAiB,EAAE,CAAA;AAClD,UAAA,IACE49C,iBAAiB,KAA8B,EAAA;AAC/CA,UAAAA,iBAAiB,OAAkB,EACnC;AACA,YAAA,MAAA;AACF,WAAA;AACF,SAAA;AAEA,MAAA,KAAA,EAAA;AAAiB,QAAA;UACf,IAAI,CAAC,IAAI,CAAC/iE,OAAO,CAACg2D,2BAA2B,IAAI,CAACzzD,QAAQ,EAAE;AAC1D,YAAA,IAAI,CAACqD,KAAK,CAACxG,MAAM,CAAC7E,sBAAsB,EAAE;AACxCsL,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,aAAC,CAAC,CAAA;AACJ,WAAA;UAEA,IAAI,CAAC0Q,IAAI,EAAE,CAAA;;AAEX,UAAA,IAAIuqB,MAAM,CAAA;UACV,IAAIurB,SAAS,OAAe,EAAE;AAC5BvrB,YAAAA,MAAM,GAAG,IAAI,CAACzH,WAAW,CAAC54B,IAAI,CAAgC,CAAA;AAE9D,YAAA,IACEqgC,MAAM,CAACjuC,IAAI,KAAK,mBAAmB,KAClC,CAACiuC,MAAM,CAAC5K,UAAU,IAAI4K,MAAM,CAAC5K,UAAU,KAAK,OAAO,CAAC,EACrD;cACA,IAAI,CAACla,iBAAiB,GAAG,IAAI,CAAA;AAC/B,aAAA;AACF,WAAC,MAAM;YACL8kB,MAAM,GAAG,IAAI,CAACz5B,WAAW,CACvB5G,IAAI,EAKJ6G,UAAU,CACX,CAAA;AAED,YAAA,IACGw5B,MAAM,CAACjuC,IAAI,KAAK,wBAAwB,KACtC,CAACiuC,MAAM,CAACrH,UAAU,IAAIqH,MAAM,CAACrH,UAAU,KAAK,OAAO,CAAC,IACtDqH,MAAM,CAACjuC,IAAI,KAAK,sBAAsB,KACpC,CAACiuC,MAAM,CAACrH,UAAU,IAAIqH,MAAM,CAACrH,UAAU,KAAK,OAAO,CAAE,IACxDqH,MAAM,CAACjuC,IAAI,KAAK,0BAA0B,EAC1C;cACA,IAAI,CAACmpB,iBAAiB,GAAG,IAAI,CAAA;AAC/B,aAAA;AACF,WAAA;AAEA,UAAA,IAAI,CAACilB,uBAAuB,CAACH,MAAM,CAAC,CAAA;AAEpC,UAAA,OAAOA,MAAM,CAAA;AACf,SAAA;AAEA,MAAA;AAAS,QAAA;AACP,UAAA,IAAI,IAAI,CAACgjC,eAAe,EAAE,EAAE;YAC1B,IAAI,CAACf,gBAAgB,EAAE;AACrB,cAAA,IAAI,CAACr8D,KAAK,CAACxG,MAAM,CAAC/M,qCAAqC,EAAE;AACvDwT,gBAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,eAAC,CAAC,CAAA;AACJ,aAAA;YACA,IAAI,CAAC0Q,IAAI,EAAE,CAAA;AACX,YAAA,OAAO,IAAI,CAACg2C,sBAAsB,CAChC9rD,IAAI,EACJ,IAAI,EACJ,CAACsiE,gBAAgB,IAAIC,wBAAwB,CAC9C,CAAA;AACH,WAAA;AACF,SAAA;AAAC,KAAA;;AAQH,IAAA,MAAMe,SAAS,GAAG,IAAI,CAACv8D,KAAK,CAACxX,KAAK,CAAA;AAClC,IAAA,MAAMwvC,IAAI,GAAG,IAAI,CAAC9H,eAAe,EAAE,CAAA;AAEnC,IAAA,IACEpkB,iBAAiB,CAAC+4C,SAAS,CAAC,IAC5B7sB,IAAI,CAAC3sC,IAAI,KAAK,YAAY,IAC1B,IAAI,CAAC2yB,GAAG,IAAU,EAClB;AACA,MAAA,OAAO,IAAI,CAACw+C,qBAAqB,CAC/BvjE,IAAI,EACJsjE,SAAS;MAETvkC,IAAI,EACJt+B,KAAK,CACN,CAAA;AACH,KAAC,MAAM;MACL,OAAO,IAAI,CAACq+B,wBAAwB,CAClC9+B,IAAI,EACJ++B,IAAI,EACJl4B,UAAU,CACX,CAAA;AACH,KAAA;AACF,GAAA;EAEA25B,uBAAuB,CAACxgC,IAAY,EAAQ;IAC1C,IAAI,CAAC,IAAI,CAACK,OAAO,CAACg2D,2BAA2B,IAAI,CAAC,IAAI,CAAC/gD,QAAQ,EAAE;AAC/D,MAAA,IAAI,CAACrP,KAAK,CAACxG,MAAM,CAAC9O,mBAAmB,EAAE;AAAEuV,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AACtD,KAAA;AACF,GAAA;AAEAwjE,EAAAA,6BAA6B,GAAY;IACvC,IAAI,IAAI,CAAC/8D,SAAS,CAAC,mBAAmB,CAAC,EAAE,OAAO,IAAI,CAAA;AACpD,IAAA,OACE,IAAI,CAACA,SAAS,CAAC,YAAY,CAAC,IAC5B,CAAC,CAAC,IAAI,CAAC7C,eAAe,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAA;AAElE,GAAA;;AAQAutD,EAAAA,mBAAmB,CACjBsS,eAAqC,EACrCC,SAAY,EACZC,UAA0E,EACvE;AACH,IAAA,IAAIF,eAAe,EAAE;MACnBC,SAAS,CAAC78D,UAAU,GAAG48D,eAAe,CAAA;MACtC,IAAI,CAAC9xC,0BAA0B,CAAC+xC,SAAS,EAAED,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;MAC9D,IAAIE,UAAU,EAAE,IAAI,CAAChyC,0BAA0B,CAACgyC,UAAU,EAAED,SAAS,CAAC,CAAA;AACxE,KAAA;AACA,IAAA,OAAOA,SAAS,CAAA;AAClB,GAAA;AAEA/S,EAAAA,uBAAuB,GAAY;IACjC,OAAO,IAAI,CAACnuC,KAAK,CAAW,EAAA,CAAA,CAAA;AAC9B,GAAA;EAEAy5C,eAAe,CAAe2H,WAAqB,EAAiB;IAClE,MAAM/8D,UAAU,GAAG,EAAE,CAAA;IACrB,GAAG;AACDA,MAAAA,UAAU,CAACnD,IAAI,CAAC,IAAI,CAAC0zD,cAAc,EAAE,CAAC,CAAA;AACxC,KAAC,QAAQ,IAAI,CAAC50C,KAAK,CAAO,EAAA,CAAA,EAAA;AAE1B,IAAA,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAY,EAAE;MAC1B,IAAI,CAACohD,WAAW,EAAE;QAChB,IAAI,CAAC5sE,UAAU,EAAE,CAAA;AACnB,OAAA;AAEA,MAAA,IAAI,CAAC,IAAI,CAACwsE,6BAA6B,EAAE,EAAE;AACzC,QAAA,IAAI,CAACv9D,KAAK,CAACxG,MAAM,CAAC7L,oBAAoB,EAAE;AAAEsS,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,SAAC,CAAC,CAAA;AACtE,OAAA;AACF,KAAC,MAAM,IAAI,CAAC,IAAI,CAACurD,uBAAuB,EAAE,EAAE;AAC1C,MAAA,MAAM,IAAI,CAAC1qD,KAAK,CAACxG,MAAM,CAAC1E,0BAA0B,EAAE;AAClDmL,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,OAAOyB,UAAU,CAAA;AACnB,GAAA;AAEAuwD,EAAAA,cAAc,GAA4B;IACxC,IAAI,CAAChtC,eAAe,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAA;AAEzD,IAAA,MAAMpqB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAe,CAAA;IAC1C,IAAI,CAACuR,IAAI,EAAE,CAAA;AAEX,IAAA,IAAI,IAAI,CAACrP,SAAS,CAAC,YAAY,CAAC,EAAE;AAChC,MAAA,MAAMrB,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;AACpC,MAAA,IAAI25B,IAAkB,CAAA;AAEtB,MAAA,IAAI,IAAI,CAACvc,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,QAAA,MAAMpd,QAAQ,GAAG,IAAI,CAAC2B,KAAK,CAAC3B,QAAQ,CAAA;QACpC,IAAI,CAAC0Q,IAAI,EAAE,CAAA;AACXipB,QAAAA,IAAI,GAAG,IAAI,CAAC9H,eAAe,EAAE,CAAA;QAC7B,IAAI,CAACrI,MAAM,CAAW,EAAA,CAAA,CAAA;QACtBmQ,IAAI,GAAG,IAAI,CAACy+B,eAAe,CAACp4D,QAAQ,EAAE25B,IAAI,CAAC,CAAA;AAE3C,QAAA,MAAM8kC,cAAc,GAAG,IAAI,CAAC98D,KAAK,CAAC3B,QAAQ,CAAA;QAC1CpF,IAAI,CAAC2B,UAAU,GAAG,IAAI,CAAC8uD,4BAA4B,CAAC1xB,IAAI,CAAC,CAAA;AACzD,QAAA,IACE,IAAI,CAACn7B,eAAe,CAAC,YAAY,EAAE,wBAAwB,CAAC,KAC1D,KAAK,IACP5D,IAAI,CAAC2B,UAAU,KAAKo9B,IAAI,EACxB;AACA,UAAA,IAAI,CAAC94B,KAAK,CAACxG,MAAM,CAAChM,oCAAoC,EAAE;AACtDyS,YAAAA,EAAE,EAAE29D,cAAAA;AACN,WAAC,CAAC,CAAA;AACJ,SAAA;AACF,OAAC,MAAM;AACL9kC,QAAAA,IAAI,GAAG,IAAI,CAACxH,eAAe,CAAC,KAAK,CAAC,CAAA;AAElC,QAAA,OAAO,IAAI,CAACxS,GAAG,CAAA,EAAA,CAAQ,EAAE;AACvB,UAAA,MAAM/kB,IAAI,GAAG,IAAI,CAAC0xB,WAAW,CAACtsB,QAAQ,CAAC,CAAA;UACvCpF,IAAI,CAAC5Q,MAAM,GAAG2vC,IAAI,CAAA;AAClB,UAAA,IAAI,IAAI,CAACvc,KAAK,CAAA,GAAA,CAAgB,EAAE;AAC9B,YAAA,IAAI,CAAC3c,UAAU,CAACC,cAAc,CAC5B,IAAI,CAACiB,KAAK,CAACxX,KAAK,EAChB,IAAI,CAACwX,KAAK,CAAC3B,QAAQ,CACpB,CAAA;AACDpF,YAAAA,IAAI,CAAC4vB,QAAQ,GAAG,IAAI,CAACjsB,gBAAgB,EAAE,CAAA;AACzC,WAAC,MAAM;YACL3D,IAAI,CAAC4vB,QAAQ,GAAG,IAAI,CAAC2H,eAAe,CAAC,IAAI,CAAC,CAAA;AAC5C,WAAA;UACAv3B,IAAI,CAACwE,QAAQ,GAAG,KAAK,CAAA;UACrBu6B,IAAI,GAAG,IAAI,CAACt6B,UAAU,CAACzE,IAAI,EAAE,kBAAkB,CAAC,CAAA;AAClD,SAAA;QAEAA,IAAI,CAAC2B,UAAU,GAAG,IAAI,CAAC8uD,4BAA4B,CAAC1xB,IAAI,CAAC,CAAA;AAC3D,OAAA;AACF,KAAC,MAAM;AACL/+B,MAAAA,IAAI,CAAC2B,UAAU,GAAG,IAAI,CAACo5D,mBAAmB,EAAE,CAAA;AAC9C,KAAA;AACA,IAAA,OAAO,IAAI,CAACt2D,UAAU,CAACzE,IAAI,EAAE,WAAW,CAAC,CAAA;AAC3C,GAAA;EAEAywD,4BAA4B,CAAe1xB,IAAkB,EAAgB;AAC3E,IAAA,IAAI,IAAI,CAACha,GAAG,CAAA,EAAA,CAAW,EAAE;AACvB,MAAA,MAAM/kB,IAAI,GAAG,IAAI,CAAC4H,eAAe,CAACm3B,IAAI,CAAC,CAAA;MACvC/+B,IAAI,CAACsG,MAAM,GAAGy4B,IAAI,CAAA;MAClB/+B,IAAI,CAACwG,SAAS,GAAG,IAAI,CAACi/B,4BAA4B,CAAA,EAAA,EAAY,KAAK,CAAC,CAAA;AACpE,MAAA,IAAI,CAAC7D,gBAAgB,CAAC5hC,IAAI,CAACwG,SAAS,CAAC,CAAA;AACrC,MAAA,OAAO,IAAI,CAAC/B,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,KAAA;AAEA,IAAA,OAAO++B,IAAI,CAAA;AACb,GAAA;AAUAyjC,EAAAA,2BAA2B,CACzBxiE,IAAoD,EACpDkzD,OAAgB,EACwB;IACxC,IAAI,CAACp9C,IAAI,EAAE,CAAA;AAEX,IAAA,IAAI,IAAI,CAAC2Y,gBAAgB,EAAE,EAAE;MAC3BzuB,IAAI,CAACiJ,KAAK,GAAG,IAAI,CAAA;AACnB,KAAC,MAAM;AACLjJ,MAAAA,IAAI,CAACiJ,KAAK,GAAG,IAAI,CAACsuB,eAAe,EAAE,CAAA;MACnC,IAAI,CAAC7I,SAAS,EAAE,CAAA;AAClB,KAAA;AAEA,IAAA,IAAI,CAACukC,mBAAmB,CAACjzD,IAAI,EAAEkzD,OAAO,CAAC,CAAA;IAEvC,OAAO,IAAI,CAACzuD,UAAU,CACpBzE,IAAI,EACJkzD,OAAO,GAAG,gBAAgB,GAAG,mBAAmB,CACjD,CAAA;AACH,GAAA;AAEAD,EAAAA,mBAAmB,CACjBjzD,IAAoD,EACpDkzD,OAAgB,EAChB;AACA,IAAA,IAAIzjE,CAAC,CAAA;AACL,IAAA,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACsX,KAAK,CAAC2Y,MAAM,CAACzwB,MAAM,EAAE,EAAEQ,CAAC,EAAE;MAC7C,MAAMq0E,GAAG,GAAG,IAAI,CAAC/8D,KAAK,CAAC2Y,MAAM,CAACjwB,CAAC,CAAC,CAAA;AAChC,MAAA,IAAIuQ,IAAI,CAACiJ,KAAK,IAAI,IAAI,IAAI66D,GAAG,CAAC9rE,IAAI,KAAKgI,IAAI,CAACiJ,KAAK,CAACjR,IAAI,EAAE;AACtD,QAAA,IAAI8rE,GAAG,CAACtxE,IAAI,IAAI,IAAI,KAAK0gE,OAAO,IAAI4Q,GAAG,CAACtxE,IAAI,KAAK,MAAM,CAAC,EAAE,MAAA;AAC1D,QAAA,IAAIwN,IAAI,CAACiJ,KAAK,IAAIiqD,OAAO,EAAE,MAAA;AAC7B,OAAA;AACF,KAAA;IACA,IAAIzjE,CAAC,KAAK,IAAI,CAACsX,KAAK,CAAC2Y,MAAM,CAACzwB,MAAM,EAAE;AAClC,MAAA,MAAMmD,IAAI,GAAG8gE,OAAO,GAAG,gBAAgB,GAAG,mBAAmB,CAAA;AAC7D,MAAA,IAAI,CAACjtD,KAAK,CAACxG,MAAM,CAACxK,oBAAoB,EAAE;AAAEiR,QAAAA,EAAE,EAAElG,IAAI;AAAE5N,QAAAA,IAAAA;AAAK,OAAC,CAAC,CAAA;AAC7D,KAAA;AACF,GAAA;EAEAqwE,sBAAsB,CACpBziE,IAAiC,EACZ;IACrB,IAAI,CAAC8V,IAAI,EAAE,CAAA;IACX,IAAI,CAAC4Y,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;AAEA+jE,EAAAA,qBAAqB,GAA6B;IAChD,IAAI,CAACn1C,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,IAAA,MAAMnO,GAAG,GAAG,IAAI,CAACwW,eAAe,EAAE,CAAA;IAClC,IAAI,CAACrI,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,IAAA,OAAOnO,GAAG,CAAA;AACZ,GAAA;;EAGAiiD,qBAAqB,CAEnB1iE,IAAgC,EACZ;IACpB,IAAI,CAAC8V,IAAI,EAAE,CAAA;IACX,IAAI,CAAC/O,KAAK,CAAC2Y,MAAM,CAAChc,IAAI,CAACw8D,SAAS,CAAC,CAAA;;AAGjClgE,IAAAA,IAAI,CAACiD,IAAI;IAIP,IAAI,CAAC08D,kCAAkC,CAAC;IAEtC,IAAI,CAACyC,cAAc,EAAE,CACtB,CAAA;AAEH,IAAA,IAAI,CAACr7D,KAAK,CAAC2Y,MAAM,CAACxL,GAAG,EAAE,CAAA;IAEvB,IAAI,CAAC0a,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB5uB,IAAAA,IAAI,CAAC4U,IAAI,GAAG,IAAI,CAACmvD,qBAAqB,EAAE,CAAA;IACxC,IAAI,CAACh/C,GAAG,CAAS,EAAA,CAAA,CAAA;AACjB,IAAA,OAAO,IAAI,CAACtgB,UAAU,CAACzE,IAAI,EAAE,kBAAkB,CAAC,CAAA;AAClD,GAAA;;EAUA2iE,iBAAiB,CAEf3iE,IAAwC,EAC7B;IACX,IAAI,CAAC8V,IAAI,EAAE,CAAA;IACX,IAAI,CAAC/O,KAAK,CAAC2Y,MAAM,CAAChc,IAAI,CAACw8D,SAAS,CAAC,CAAA;IAEjC,IAAI8D,OAAO,GAAG,IAAI,CAAA;IAElB,IAAI,IAAI,CAACxJ,cAAc,EAAE,IAAI,IAAI,CAACpsC,aAAa,CAAA,EAAA,CAAW,EAAE;AAC1D41C,MAAAA,OAAO,GAAG,IAAI,CAACj9D,KAAK,CAACC,eAAe,CAAA;AACtC,KAAA;AACA,IAAA,IAAI,CAACwT,KAAK,CAACF,KAAK,CAACpE,WAAW,CAAC,CAAA;IAC7B,IAAI,CAAC0Y,MAAM,CAAW,EAAA,CAAA,CAAA;AAEtB,IAAA,IAAI,IAAI,CAACpM,KAAK,CAAA,EAAA,CAAS,EAAE;MACvB,IAAIwhD,OAAO,KAAK,IAAI,EAAE;AACpB,QAAA,IAAI,CAAChtE,UAAU,CAACgtE,OAAO,CAAC,CAAA;AAC1B,OAAA;AACA,MAAA,OAAO,IAAI,CAACC,QAAQ,CAACjkE,IAAI,EAA4B,IAAI,CAAC,CAAA;AAC5D,KAAA;AAEA,IAAA,MAAMkkE,aAAa,GAAG,IAAI,CAACp2C,YAAY,CAAS,EAAA,CAAA,CAAA;IAChD,MAAMq2C,eAAe,GACnB,IAAI,CAACr2C,YAAY,CAAW,GAAA,CAAA,IAAI,CAAC,IAAI,CAACU,qBAAqB,EAAE,CAAA;AAC/D,IAAA,MAAM41C,YAAY,GACfF,aAAa,IAAI,IAAI,CAAC1C,uBAAuB,EAAE,IAC/C2C,eAAe,IACd,IAAI,CAACxC,6BAA6B,EAAE,IACpC,IAAI,CAACC,gBAAgB,EAAG,CAAA;IAC5B,IAAI,IAAI,CAACp/C,KAAK,CAAS,EAAA,CAAA,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAW,IAAI4hD,YAAY,EAAE;AAChE,MAAA,MAAMC,QAAQ,GAAG,IAAI,CAAC9/D,SAAS,EAAyB,CAAA;AACxD,MAAA,MAAM/R,IAAI,GAAG,IAAI,CAACuU,KAAK,CAACxX,KAAK,CAAA;MAC7B,IAAI,CAACumB,IAAI,EAAE,CAAA;MACX,IAAI,CAACwuD,QAAQ,CAACD,QAAQ,EAAE,IAAI,EAAE7xE,IAAI,CAAC,CAAA;MACnC,MAAM0tB,IAAI,GAAG,IAAI,CAACzb,UAAU,CAAC4/D,QAAQ,EAAE,qBAAqB,CAAC,CAAA;AAE7D,MAAA,MAAME,OAAO,GAAG,IAAI,CAAC/hD,KAAK,CAAQ,EAAA,CAAA,CAAA;MAClC,IAAI+hD,OAAO,IAAIJ,eAAe,EAAE;AAC9B,QAAA,IAAI,CAACl+D,KAAK,CAACxG,MAAM,CAAC5K,UAAU,EAAE;AAAEqR,UAAAA,EAAE,EAAEga,IAAAA;AAAK,SAAC,CAAC,CAAA;AAC7C,OAAA;AACA,MAAA,IACE,CAACqkD,OAAO,IAAI,IAAI,CAACz2C,YAAY,CAAA,GAAA,CAAQ,KACrC5N,IAAI,CAACwuC,YAAY,CAACz/D,MAAM,KAAK,CAAC,EAC9B;QACA,OAAO,IAAI,CAACu1E,UAAU,CAACxkE,IAAI,EAAuBkgB,IAAI,EAAE8jD,OAAO,CAAC,CAAA;AAClE,OAAA;MACA,IAAIA,OAAO,KAAK,IAAI,EAAE;AACpB,QAAA,IAAI,CAAChtE,UAAU,CAACgtE,OAAO,CAAC,CAAA;AAC1B,OAAA;AACA,MAAA,OAAO,IAAI,CAACC,QAAQ,CAACjkE,IAAI,EAA4BkgB,IAAI,CAAC,CAAA;AAC5D,KAAA;;AAIA,IAAA,MAAMukD,eAAe,GAAG,IAAI,CAAC32C,YAAY,CAAW,EAAA,CAAA,CAAA;AAEpD,IAAA,MAAMzoB,mBAAmB,GAAG,IAAIsrB,gBAAgB,EAAE,CAAA;IAClD,MAAMzQ,IAAI,GAAG,IAAI,CAAC+W,eAAe,CAAC,IAAI,EAAE5xB,mBAAmB,CAAC,CAAA;AAC5D,IAAA,MAAMq/D,OAAO,GAAG,IAAI,CAAC52C,YAAY,CAAQ,GAAA,CAAA,CAAA;AACzC,IAAA,IAAI42C,OAAO,EAAE;AAEX,MAAA,IAAIR,aAAa,EAAE;AACjB,QAAA,IAAI,CAACj+D,KAAK,CAACxG,MAAM,CAAC1K,QAAQ,EAAE;AAAEmR,UAAAA,EAAE,EAAEga,IAAAA;AAAK,SAAC,CAAC,CAAA;AAC3C,OAAA;AAEA,MAAA;MAEE8jD,OAAO,KAAK,IAAI,IAChBS,eAAe,IACfvkD,IAAI,CAAC9tB,IAAI,KAAK,YAAY,EAC1B;AAKA,QAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAAC3K,UAAU,EAAE;AAAEoR,UAAAA,EAAE,EAAEga,IAAAA;AAAK,SAAC,CAAC,CAAA;AAC7C,OAAA;AACF,KAAA;AACA,IAAA,IAAIwkD,OAAO,IAAI,IAAI,CAACliD,KAAK,IAAQ,EAAE;AACjC,MAAA,IAAI,CAACkO,yBAAyB,CAACrrB,mBAAmB,CAAC,CAAA;AACnD,MAAA,IAAI,CAACM,YAAY,CAACua,IAAI,EAAc,IAAI,CAAC,CAAA;AACzC,MAAA,MAAM9tB,IAAI,GAAGsyE,OAAO,GAAG,gBAAgB,GAAG,gBAAgB,CAAA;AAC1D,MAAA,IAAI,CAAClN,SAAS,CAACt3C,IAAI,EAAE;AAAEu3C,QAAAA,EAAE,EAAE;AAAErlE,UAAAA,IAAAA;AAAK,SAAA;AAAE,OAAC,CAAC,CAAA;AACtC,MAAA,OAAO,IAAI,CAACoyE,UAAU,CACpBxkE,IAAI;MAEJkgB,IAAI,EACJ8jD,OAAO,CACR,CAAA;AACH,KAAC,MAAM;AACL,MAAA,IAAI,CAAC50C,qBAAqB,CAAC/pB,mBAAmB,EAAE,IAAI,CAAC,CAAA;AACvD,KAAA;IACA,IAAI2+D,OAAO,KAAK,IAAI,EAAE;AACpB,MAAA,IAAI,CAAChtE,UAAU,CAACgtE,OAAO,CAAC,CAAA;AAC1B,KAAA;AACA,IAAA,OAAO,IAAI,CAACC,QAAQ,CAACjkE,IAAI,EAA4BkgB,IAAI,CAAC,CAAA;AAC5D,GAAA;;AAGA4rC,EAAAA,sBAAsB,CAEpB9rD,IAAmC,EACnCkC,OAAgB,EAChByiE,oBAA6B,EACN;IACvB,IAAI,CAAC7uD,IAAI,EAAE,CAAA;IACX,OAAO,IAAI,CAACmnD,aAAa,CACvBj9D,IAAI,EACJogE,iBAAiB,CAACwE,WAAW,IAC1BD,oBAAoB,GAAGvE,iBAAiB,CAACyE,kBAAkB,GAAG,CAAC,CAAC,IAChE3iE,OAAO,GAAGk+D,iBAAiB,CAAC0E,KAAK,GAAG,CAAC,CAAC,CAC1C,CAAA;AACH,GAAA;;EAGAlC,gBAAgB,CAAe5iE,IAA2B,EAAE;IAC1D,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX9V,IAAAA,IAAI,CAAC4U,IAAI,GAAG,IAAI,CAACmvD,qBAAqB,EAAE,CAAA;AAGxC/jE,IAAAA,IAAI,CAACs/B,UAAU,GAAG,IAAI,CAAC6zB,mCAAmC;AAExD,IAAA,IAAI,CACL,CAAA;AACDnzD,IAAAA,IAAI,CAAC2/B,SAAS,GAAG,IAAI,CAAC5a,GAAG,CAAA,EAAA,CAAU,GAC/B,IAAI,CAACouC,mCAAmC,CAAC,IAAI,CAAC,GAC9C,IAAI,CAAA;AACR,IAAA,OAAO,IAAI,CAAC1uD,UAAU,CAACzE,IAAI,EAAE,aAAa,CAAC,CAAA;AAC7C,GAAA;EAEA6iE,oBAAoB,CAAe7iE,IAA+B,EAAE;AAClE,IAAA,IAAI,CAAC,IAAI,CAACqwB,SAAS,CAAC5C,SAAS,IAAI,CAAC,IAAI,CAACptB,OAAO,CAAC+1D,0BAA0B,EAAE;AACzE,MAAA,IAAI,CAACnwD,KAAK,CAACxG,MAAM,CAACtK,aAAa,EAAE;AAAE+Q,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,OAAC,CAAC,CAAA;AAC/D,KAAA;IAEA,IAAI,CAAC0Q,IAAI,EAAE,CAAA;;AAMX,IAAA,IAAI,IAAI,CAAC2Y,gBAAgB,EAAE,EAAE;MAC3BzuB,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAAA;AACtB,KAAC,MAAM;AACLiB,MAAAA,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAACk4B,eAAe,EAAE,CAAA;MACtC,IAAI,CAACvI,SAAS,EAAE,CAAA;AAClB,KAAA;AAEA,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;;EAGA8iE,oBAAoB,CAAe9iE,IAA+B,EAAE;IAClE,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX9V,IAAAA,IAAI,CAAC+kE,YAAY,GAAG,IAAI,CAAChB,qBAAqB,EAAE,CAAA;AAChD,IAAA,MAAMiB,KAAiC,GAAIhlE,IAAI,CAACglE,KAAK,GAAG,EAAG,CAAA;IAC3D,IAAI,CAACp2C,MAAM,CAAW,CAAA,CAAA,CAAA;IACtB,IAAI,CAAC7nB,KAAK,CAAC2Y,MAAM,CAAChc,IAAI,CAACy8D,WAAW,CAAC,CAAA;AACnC,IAAA,IAAI,CAAC3lD,KAAK,CAACF,KAAK,CAACpE,WAAW,CAAC,CAAA;;AAM7B,IAAA,IAAI+uD,GAAG,CAAA;IACP,KAAK,IAAIC,UAAU,EAAE,CAAC,IAAI,CAAC1iD,KAAK,GAAW,GAAI;MAC7C,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAU,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAa,EAAE;AACnD,QAAA,MAAM2iD,MAAM,GAAG,IAAI,CAAC3iD,KAAK,CAAU,EAAA,CAAA,CAAA;QACnC,IAAIyiD,GAAG,EAAE,IAAI,CAACxgE,UAAU,CAACwgE,GAAG,EAAE,YAAY,CAAC,CAAA;QAE3CD,KAAK,CAACthE,IAAI,CAAEuhE,GAAG,GAAG,IAAI,CAAC1gE,SAAS,EAAE,CAAE,CAAA;QACpC0gE,GAAG,CAAC3lC,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,CAACxpB,IAAI,EAAE,CAAA;AACX,QAAA,IAAIqvD,MAAM,EAAE;AACVF,UAAAA,GAAG,CAACrwD,IAAI,GAAG,IAAI,CAACqiB,eAAe,EAAE,CAAA;AACnC,SAAC,MAAM;AACL,UAAA,IAAIiuC,UAAU,EAAE;AACd,YAAA,IAAI,CAACj/D,KAAK,CAACxG,MAAM,CAAC3G,wBAAwB,EAAE;AAC1CoN,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACC,eAAAA;AACjB,aAAC,CAAC,CAAA;AACJ,WAAA;AACAk+D,UAAAA,UAAU,GAAG,IAAI,CAAA;UACjBD,GAAG,CAACrwD,IAAI,GAAG,IAAI,CAAA;AACjB,SAAA;QACA,IAAI,CAACga,MAAM,CAAU,EAAA,CAAA,CAAA;AACvB,OAAC,MAAM;AACL,QAAA,IAAIq2C,GAAG,EAAE;UACPA,GAAG,CAAC3lC,UAAU,CAAC57B,IAAI,CAAC,IAAI,CAACw+D,sBAAsB,EAAE,CAAC,CAAA;AACpD,SAAC,MAAM;UACL,IAAI,CAAClrE,UAAU,EAAE,CAAA;AACnB,SAAA;AACF,OAAA;AACF,KAAA;AACA,IAAA,IAAI,CAACwjB,KAAK,CAACD,IAAI,EAAE,CAAA;IACjB,IAAI0qD,GAAG,EAAE,IAAI,CAACxgE,UAAU,CAACwgE,GAAG,EAAE,YAAY,CAAC,CAAA;IAC3C,IAAI,CAACnvD,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,CAAC/O,KAAK,CAAC2Y,MAAM,CAACxL,GAAG,EAAE,CAAA;AACvB,IAAA,OAAO,IAAI,CAACzP,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACjD,GAAA;EAEA+iE,mBAAmB,CAAe/iE,IAA8B,EAAE;IAChE,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX,IAAA,IAAI,IAAI,CAACyY,qBAAqB,EAAE,EAAE;AAChC,MAAA,IAAI,CAACtoB,KAAK,CAACxG,MAAM,CAAC1G,iBAAiB,EAAE;AAAEmN,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACoB,aAAAA;AAAc,OAAC,CAAC,CAAA;AACxE,KAAA;AACAnI,IAAAA,IAAI,CAACjB,QAAQ,GAAG,IAAI,CAACk4B,eAAe,EAAE,CAAA;IACtC,IAAI,CAACvI,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,GAAA;AAEAgxD,EAAAA,qBAAqB,GAA0B;AAC7C,IAAA,MAAM5yB,KAAK,GAAG,IAAI,CAAC8F,gBAAgB,EAAE,CAAA;AAErC,IAAA,MAAMkhC,MAAM,GAAGhnC,KAAK,CAAChsC,IAAI,KAAK,YAAY,CAAA;IAC1C,IAAI,CAACooB,KAAK,CAACF,KAAK,CAAC8qD,MAAM,GAAG9uD,kBAAkB,GAAG,CAAC,CAAC,CAAA;AACjD,IAAA,IAAI,CAACkhD,SAAS,CAACp5B,KAAK,EAAE;AACpBq5B,MAAAA,EAAE,EAAE;AAAErlE,QAAAA,IAAI,EAAE,aAAA;OAAe;AAC3BoT,MAAAA,OAAO,EAAEmS,YAAY;AACrBggD,MAAAA,wBAAwB,EAAE,IAAA;AAC5B,KAAC,CAAC,CAAA;AAEF,IAAA,OAAOv5B,KAAK,CAAA;AACd,GAAA;EAEA4kC,iBAAiB,CAEfhjE,IAA4B,EACZ;IAChB,IAAI,CAAC8V,IAAI,EAAE,CAAA;AAEX9V,IAAAA,IAAI,CAACqlE,KAAK,GAAG,IAAI,CAACjS,UAAU,EAAE,CAAA;IAC9BpzD,IAAI,CAACslE,OAAO,GAAG,IAAI,CAAA;AAEnB,IAAA,IAAI,IAAI,CAAC9iD,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,MAAA,MAAM+iD,MAAM,GAAG,IAAI,CAAChhE,SAAS,EAAiB,CAAA;MAC9C,IAAI,CAACuR,IAAI,EAAE,CAAA;AACX,MAAA,IAAI,IAAI,CAAC0M,KAAK,CAAA,EAAA,CAAW,EAAE;QACzB,IAAI,CAACoM,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB22C,QAAAA,MAAM,CAACnnC,KAAK,GAAG,IAAI,CAAC4yB,qBAAqB,EAAE,CAAA;QAC3C,IAAI,CAACpiC,MAAM,CAAW,EAAA,CAAA,CAAA;AACxB,OAAC,MAAM;QACL22C,MAAM,CAACnnC,KAAK,GAAG,IAAI,CAAA;AACnB,QAAA,IAAI,CAAC5jB,KAAK,CAACF,KAAK,CAACpE,WAAW,CAAC,CAAA;AAC/B,OAAA;;AAGAqvD,MAAAA,MAAM,CAACtiE,IAAI;MAGT,IAAI,CAAC08D,kCAAkC,CAAC;AAEtC,MAAA,IAAI,CAACvM,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAC9B,CAAA;AAEH,MAAA,IAAI,CAAC54C,KAAK,CAACD,IAAI,EAAE,CAAA;MACjBva,IAAI,CAACslE,OAAO,GAAG,IAAI,CAAC7gE,UAAU,CAAC8gE,MAAM,EAAE,aAAa,CAAC,CAAA;AACvD,KAAA;AAEAvlE,IAAAA,IAAI,CAACwlE,SAAS,GAAG,IAAI,CAACzgD,GAAG,CAAa,EAAA,CAAA,GAAG,IAAI,CAACquC,UAAU,EAAE,GAAG,IAAI,CAAA;IAEjE,IAAI,CAACpzD,IAAI,CAACslE,OAAO,IAAI,CAACtlE,IAAI,CAACwlE,SAAS,EAAE;AACpC,MAAA,IAAI,CAACv/D,KAAK,CAACxG,MAAM,CAACzG,gBAAgB,EAAE;AAAEkN,QAAAA,EAAE,EAAElG,IAAAA;AAAK,OAAC,CAAC,CAAA;AACnD,KAAA;AAEA,IAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,GAAA;;EAIAgsD,iBAAiB,CAEfhsD,IAAmC,EACnCxN,IAAuC,EACvCi8D,uBAAgC,GAAG,KAAK,EACjB;IACvB,IAAI,CAAC34C,IAAI,EAAE,CAAA;IACX,IAAI,CAACwuD,QAAQ,CAACtkE,IAAI,EAAE,KAAK,EAAExN,IAAI,EAAEi8D,uBAAuB,CAAC,CAAA;IACzD,IAAI,CAAC//B,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACrD,GAAA;;EAGAijE,mBAAmB,CAEjBjjE,IAA8B,EACZ;IAClB,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX9V,IAAAA,IAAI,CAAC4U,IAAI,GAAG,IAAI,CAACmvD,qBAAqB,EAAE,CAAA;IACxC,IAAI,CAACh9D,KAAK,CAAC2Y,MAAM,CAAChc,IAAI,CAACw8D,SAAS,CAAC,CAAA;;AAGjClgE,IAAAA,IAAI,CAACiD,IAAI;IAIP,IAAI,CAAC08D,kCAAkC,CAAC;IAEtC,IAAI,CAACyC,cAAc,EAAE,CACtB,CAAA;AAEH,IAAA,IAAI,CAACr7D,KAAK,CAAC2Y,MAAM,CAACxL,GAAG,EAAE,CAAA;AAEvB,IAAA,OAAO,IAAI,CAACzP,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,GAAA;EAEAkjE,kBAAkB,CAEhBljE,IAA6B,EACZ;AACjB,IAAA,IAAI,IAAI,CAAC+G,KAAK,CAACiO,MAAM,EAAE;AACrB,MAAA,IAAI,CAAC/O,KAAK,CAACxG,MAAM,CAACpC,UAAU,EAAE;AAAE6I,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,OAAC,CAAC,CAAA;AAC5D,KAAA;IACA,IAAI,CAAC0Q,IAAI,EAAE,CAAA;AACX9V,IAAAA,IAAI,CAAC5Q,MAAM,GAAG,IAAI,CAAC20E,qBAAqB,EAAE,CAAA;;AAG1C/jE,IAAAA,IAAI,CAACiD,IAAI;IAKP,IAAI,CAAC08D,kCAAkC,CAAC;IAEtC,IAAI,CAACyC,cAAc,EAAE,CACtB,CAAA;AAEH,IAAA,OAAO,IAAI,CAAC39D,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;EAEAmjE,mBAAmB,CAACnjE,IAA8B,EAAoB;IACpE,IAAI,CAAC8V,IAAI,EAAE,CAAA;AACX,IAAA,OAAO,IAAI,CAACrR,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,GAAA;;EAGAujE,qBAAqB,CAEnBvjE,IAAgC,EAChCsjE,SAAiB,EACjBvkC,IAAkB,EAClBt+B,KAAyB,EACL;IACpB,KAAK,MAAMwI,KAAK,IAAI,IAAI,CAAClC,KAAK,CAAC2Y,MAAM,EAAE;AACrC,MAAA,IAAIzW,KAAK,CAACjR,IAAI,KAAKsrE,SAAS,EAAE;AAC5B,QAAA,IAAI,CAACr9D,KAAK,CAACxG,MAAM,CAACnI,kBAAkB,EAAE;AACpC4O,UAAAA,EAAE,EAAE64B,IAAI;AACRxnC,UAAAA,SAAS,EAAE+rE,SAAAA;AACb,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;IAEA,MAAM9wE,IAAI,GAAG6gB,WAAW,CAAC,IAAI,CAACtM,KAAK,CAAC3U,IAAI,CAAC,GACrC,MAAM,GACN,IAAI,CAACowB,KAAK,IAAY,GACtB,QAAQ,GACR,IAAI,CAAA;AACR,IAAA,KAAK,IAAI/yB,CAAC,GAAG,IAAI,CAACsX,KAAK,CAAC2Y,MAAM,CAACzwB,MAAM,GAAG,CAAC,EAAEQ,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;MACtD,MAAMwZ,KAAK,GAAG,IAAI,CAAClC,KAAK,CAAC2Y,MAAM,CAACjwB,CAAC,CAAC,CAAA;AAClC,MAAA,IAAIwZ,KAAK,CAACw8D,cAAc,KAAKzlE,IAAI,CAAC1R,KAAK,EAAE;AACvC2a,QAAAA,KAAK,CAACw8D,cAAc,GAAG,IAAI,CAAC1+D,KAAK,CAACzY,KAAK,CAAA;QACvC2a,KAAK,CAACzW,IAAI,GAAGA,IAAI,CAAA;AACnB,OAAC,MAAM;AACL,QAAA,MAAA;AACF,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAACuU,KAAK,CAAC2Y,MAAM,CAAChc,IAAI,CAAC;AACrB1L,MAAAA,IAAI,EAAEsrE,SAAS;AACf9wE,MAAAA,IAAI,EAAEA,IAAI;AACVizE,MAAAA,cAAc,EAAE,IAAI,CAAC1+D,KAAK,CAACzY,KAAAA;AAC7B,KAAC,CAAC,CAAA;AAEF0R,IAAAA,IAAI,CAACiD,IAAI,GACPxC,KAAK,GAAG4/D,kBAAkB,CAAC4B,oBAAoB,GAC3C,IAAI,CAAC9O,mCAAmC,CAAC,KAAK,CAAC,GAC/C,IAAI,CAACiP,cAAc,EAAE,CAAA;AAE3B,IAAA,IAAI,CAACr7D,KAAK,CAAC2Y,MAAM,CAACxL,GAAG,EAAE,CAAA;IACvBlU,IAAI,CAACiJ,KAAK,GAAG81B,IAAI,CAAA;AACjB,IAAA,OAAO,IAAI,CAACt6B,UAAU,CAACzE,IAAI,EAAE,kBAAkB,CAAC,CAAA;AAClD,GAAA;EAEA8+B,wBAAwB,CACtB9+B,IAAmC,EACnC++B,IAAkB;AAElBl4B,EAAAA,UAAgC,EAChC;IACA7G,IAAI,CAAC2B,UAAU,GAAGo9B,IAAI,CAAA;IACtB,IAAI,CAACrQ,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACrD,GAAA;;EAMAozD,UAAU,CAERzwD,eAAwB,GAAG,KAAK,EAChC0wD,qBAA8B,GAAG,IAAI,EACrCxwD,eAA2D,EACzC;AAClB,IAAA,MAAM7C,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAoB,CAAA;AAC/C,IAAA,IAAI5B,eAAe,EAAE;AACnB,MAAA,IAAI,CAACoE,KAAK,CAACiZ,YAAY,CAAC+F,KAAK,EAAE,CAAA;AACjC,KAAA;IACA,IAAI,CAAC6I,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,IAAA,IAAIykC,qBAAqB,EAAE;AACzB,MAAA,IAAI,CAAC74C,KAAK,CAACF,KAAK,CAACpE,WAAW,CAAC,CAAA;AAC/B,KAAA;IACA,IAAI,CAACxT,cAAc,CACjB1C,IAAI,EACJ2C,eAAe,EACf,KAAK,EAELE,CAAAA,EAAAA,eAAe,CAChB,CAAA;AACD,IAAA,IAAIwwD,qBAAqB,EAAE;AACzB,MAAA,IAAI,CAAC74C,KAAK,CAACD,IAAI,EAAE,CAAA;AACnB,KAAA;AACA,IAAA,OAAO,IAAI,CAAC9V,UAAU,CAACzE,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAChD,GAAA;EAEAwC,gBAAgB,CAACT,IAAiB,EAAW;IAC3C,OACEA,IAAI,CAAC3P,IAAI,KAAK,qBAAqB,IACnC2P,IAAI,CAACJ,UAAU,CAACvP,IAAI,KAAK,eAAe,IACxC,CAAC2P,IAAI,CAACJ,UAAU,CAACE,KAAK,CAACY,aAAa,CAAA;AAExC,GAAA;EAEAC,cAAc,CAEZ1C,IAAkC,EAClC2C,eAA2C,EAC3CC,QAAiB,EACjBrU,GAAc,EACdsU,eAA2D,EACrD;AACN,IAAA,MAAMI,IAAkC,GAAIjD,IAAI,CAACiD,IAAI,GAAG,EAAG,CAAA;AAC3D,IAAA,MAAMF,UAA8C,GAAI/C,IAAI,CAAC+C,UAAU,GACrE,EAAG,CAAA;AACL,IAAA,IAAI,CAAC6nD,2BAA2B,CAC9B3nD,IAAI,EACJN,eAAe,GAAGI,UAAU,GAAGmZ,SAAS,EACxCtZ,QAAQ,EACRrU,GAAG,EACHsU,eAAe,CAChB,CAAA;AACH,GAAA;;EAKA+nD,2BAA2B,CAEzB3nD,IAAmB,EACnBF,UAA4C,EAC5CH,QAAiB,EACjBrU,GAAc,EACdsU,eAA2D,EACrD;AACN,IAAA,MAAM2wD,SAAS,GAAG,IAAI,CAACzsD,KAAK,CAACiO,MAAM,CAAA;IACnC,IAAI+pD,sBAAsB,GAAG,KAAK,CAAA;IAClC,IAAI2G,kBAAkB,GAAG,KAAK,CAAA;AAE9B,IAAA,OAAO,CAAC,IAAI,CAACljD,KAAK,CAACj0B,GAAG,CAAC,EAAE;AACvB,MAAA,MAAMwT,IAAI,GAAGa,QAAQ,GACjB,IAAI,CAACi/D,eAAe,EAAE,GACtB,IAAI,CAACK,sBAAsB,EAAE,CAAA;AAEjC,MAAA,IAAIn/D,UAAU,IAAI,CAAC2iE,kBAAkB,EAAE;AACrC,QAAA,IAAI,IAAI,CAACljE,gBAAgB,CAACT,IAAI,CAAC,EAAE;AAC/B,UAAA,MAAML,SAAS,GAAG,IAAI,CAAC4/D,eAAe,CAACv/D,IAAI,CAAC,CAAA;AAC5CgB,UAAAA,UAAU,CAACW,IAAI,CAAChC,SAAS,CAAC,CAAA;UAE1B,IACE,CAACq9D,sBAAsB,IACvBr9D,SAAS,CAACnS,KAAK,CAACA,KAAK,KAAK,YAAY,EACtC;AACAwvE,YAAAA,sBAAsB,GAAG,IAAI,CAAA;AAC7B,YAAA,IAAI,CAACn5C,SAAS,CAAC,IAAI,CAAC,CAAA;AACtB,WAAA;AAEA,UAAA,SAAA;AACF,SAAA;AACA8/C,QAAAA,kBAAkB,GAAG,IAAI,CAAA;AAEzB,QAAA,IAAI,CAAC3+D,KAAK,CAACiZ,YAAY,CAAC+F,KAAK,EAAE,CAAA;AACjC,OAAA;AACA9iB,MAAAA,IAAI,CAACS,IAAI,CAAC3B,IAAI,CAAC,CAAA;AACjB,KAAA;AAEA,IAAA,IAAIc,eAAe,EAAE;AACnBA,MAAAA,eAAe,CAAC0hC,IAAI,CAAC,IAAI,EAAEw6B,sBAAsB,CAAC,CAAA;AACpD,KAAA;IAEA,IAAI,CAACvL,SAAS,EAAE;AACd,MAAA,IAAI,CAAC5tC,SAAS,CAAC,KAAK,CAAC,CAAA;AACvB,KAAA;IAEA,IAAI,CAAC9P,IAAI,EAAE,CAAA;AACb,GAAA;;AAMAmuD,EAAAA,QAAQ,CAENjkE,IAA4B,EAC5BkgB,IAAkD,EAClC;IAChBlgB,IAAI,CAACkgB,IAAI,GAAGA,IAAI,CAAA;AAChB,IAAA,IAAI,CAACwO,SAAS,CAAgB,KAAK,CAAC,CAAA;AACpC1uB,IAAAA,IAAI,CAAC4U,IAAI,GAAG,IAAI,CAAC4N,KAAK,CAAS,EAAA,CAAA,GAAG,IAAI,GAAG,IAAI,CAACyU,eAAe,EAAE,CAAA;AAC/D,IAAA,IAAI,CAACvI,SAAS,CAAgB,KAAK,CAAC,CAAA;AACpC1uB,IAAAA,IAAI,CAAC06D,MAAM,GAAG,IAAI,CAACl4C,KAAK,CAAW,EAAA,CAAA,GAAG,IAAI,GAAG,IAAI,CAACyU,eAAe,EAAE,CAAA;IACnE,IAAI,CAACrI,MAAM,CAAW,EAAA,CAAA,CAAA;;AAGtB5uB,IAAAA,IAAI,CAACiD,IAAI;IAIP,IAAI,CAAC08D,kCAAkC,CAAC;IAEtC,IAAI,CAACyC,cAAc,EAAE,CACtB,CAAA;AAEH,IAAA,IAAI,CAAC5nD,KAAK,CAACD,IAAI,EAAE,CAAA;AACjB,IAAA,IAAI,CAACxT,KAAK,CAAC2Y,MAAM,CAACxL,GAAG,EAAE,CAAA;AAEvB,IAAA,OAAO,IAAI,CAACzP,UAAU,CAACzE,IAAI,EAAE,cAAc,CAAC,CAAA;AAC9C,GAAA;;AAKAwkE,EAAAA,UAAU,CAERxkE,IAAuB,EACvBkgB,IAAiD,EACjD8jD,OAAyB,EACd;AACX,IAAA,MAAMO,OAAO,GAAG,IAAI,CAAC/hD,KAAK,CAAQ,EAAA,CAAA,CAAA;IAClC,IAAI,CAAC1M,IAAI,EAAE,CAAA;AAEX,IAAA,IAAIyuD,OAAO,EAAE;MACX,IAAIP,OAAO,KAAK,IAAI,EAAE,IAAI,CAAChtE,UAAU,CAACgtE,OAAO,CAAC,CAAA;AAChD,KAAC,MAAM;AACLhkE,MAAAA,IAAI,CAAC2lE,KAAK,GAAG3B,OAAO,KAAK,IAAI,CAAA;AAC/B,KAAA;IAEA,IACE9jD,IAAI,CAAC9tB,IAAI,KAAK,qBAAqB,IACnC8tB,IAAI,CAACwuC,YAAY,CAAC,CAAC,CAAC,CAACxuC,IAAI,IAAI,IAAI,KAChC,CAACqkD,OAAO,IACP,IAAI,CAACx9D,KAAK,CAACiO,MAAM,IACjBkL,IAAI,CAAC1tB,IAAI,KAAK,KAAK,IACnB0tB,IAAI,CAACwuC,YAAY,CAAC,CAAC,CAAC,CAAC3qD,EAAE,CAAC3R,IAAI,KAAK,YAAY,CAAC,EAChD;AACA,MAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAAC7K,sBAAsB,EAAE;AACxCsR,QAAAA,EAAE,EAAEga,IAAI;AACR9tB,QAAAA,IAAI,EAAEmyE,OAAO,GAAG,gBAAgB,GAAG,gBAAA;AACrC,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,IAAIrkD,IAAI,CAAC9tB,IAAI,KAAK,mBAAmB,EAAE;AACrC,MAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAAC/I,UAAU,EAAE;AAC5BwP,QAAAA,EAAE,EAAEga,IAAI;AACRvpB,QAAAA,QAAQ,EAAE;AAAEvE,UAAAA,IAAI,EAAE,cAAA;AAAe,SAAA;AACnC,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA4N,IAAI,CAAC0hC,IAAI,GAAGxhB,IAAI,CAAA;AAChBlgB,IAAAA,IAAI,CAACu6B,KAAK,GAAGgqC,OAAO,GAChB,IAAI,CAACttC,eAAe,EAAE,GACtB,IAAI,CAAC4I,uBAAuB,EAAE,CAAA;IAClC,IAAI,CAACjR,MAAM,CAAW,EAAA,CAAA,CAAA;;AAGtB5uB,IAAAA,IAAI,CAACiD,IAAI;IAIP,IAAI,CAAC08D,kCAAkC,CAAC;IAEtC,IAAI,CAACyC,cAAc,EAAE,CACtB,CAAA;AAEH,IAAA,IAAI,CAAC5nD,KAAK,CAACD,IAAI,EAAE,CAAA;AACjB,IAAA,IAAI,CAACxT,KAAK,CAAC2Y,MAAM,CAACxL,GAAG,EAAE,CAAA;IAEvB,OAAO,IAAI,CAACzP,UAAU,CAACzE,IAAI,EAAEukE,OAAO,GAAG,gBAAgB,GAAG,gBAAgB,CAAC,CAAA;AAC7E,GAAA;;EAIAD,QAAQ,CAENtkE,IAAmC,EACnC4lE,KAAc,EACdpzE,IAAuC,EACvCi8D,uBAAgC,GAAG,KAAK,EACT;AAC/B,IAAA,MAAMC,YAAoC,GAAI1uD,IAAI,CAAC0uD,YAAY,GAAG,EAAG,CAAA;IACrE1uD,IAAI,CAACxN,IAAI,GAAGA,IAAI,CAAA;IAChB,SAAS;AACP,MAAA,MAAMiuC,IAAI,GAAG,IAAI,CAACl8B,SAAS,EAAwB,CAAA;AACnD,MAAA,IAAI,CAAC8/B,UAAU,CAAC5D,IAAI,EAAEjuC,IAAI,CAAC,CAAA;MAC3BiuC,IAAI,CAACvgB,IAAI,GAAG,CAAC,IAAI,CAAC6E,GAAG,IAAO,GACxB,IAAI,GACJ6gD,KAAK,GACL,IAAI,CAAC9M,0BAA0B,EAAE,GACjC,IAAI,CAACj5B,uBAAuB,EAAE,CAAA;MAElC,IAAIY,IAAI,CAACvgB,IAAI,KAAK,IAAI,IAAI,CAACuuC,uBAAuB,EAAE;QAClD,IACEhuB,IAAI,CAAC18B,EAAE,CAAC3R,IAAI,KAAK,YAAY,IAC7B,EAAEwzE,KAAK,KAAK,IAAI,CAACpjD,KAAK,IAAQ,IAAI,IAAI,CAACsL,YAAY,CAAA,GAAA,CAAQ,CAAC,CAAC,EAC7D;AACA,UAAA,IAAI,CAAC7nB,KAAK,CAACxG,MAAM,CAACjM,6BAA6B,EAAE;AAC/C0S,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACoB,aAAa;AAC5B3V,YAAAA,IAAI,EAAE,eAAA;AACR,WAAC,CAAC,CAAA;AACJ,SAAC,MAAM,IACLA,IAAI,KAAK,OAAO,IAChB,EAAE,IAAI,CAACgwB,KAAK,IAAQ,IAAI,IAAI,CAACsL,YAAY,CAAA,GAAA,CAAQ,CAAC,EAClD;AACA,UAAA,IAAI,CAAC7nB,KAAK,CAACxG,MAAM,CAACjM,6BAA6B,EAAE;AAC/C0S,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACoB,aAAa;AAC5B3V,YAAAA,IAAI,EAAE,OAAA;AACR,WAAC,CAAC,CAAA;AACJ,SAAA;AACF,OAAA;MACAk8D,YAAY,CAAChrD,IAAI,CAAC,IAAI,CAACe,UAAU,CAACg8B,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAA;AAC9D,MAAA,IAAI,CAAC,IAAI,CAAC1b,GAAG,IAAU,EAAE,MAAA;AAC3B,KAAA;AACA,IAAA,OAAO/kB,IAAI,CAAA;AACb,GAAA;AAEAqkC,EAAAA,UAAU,CAER5D,IAAkC,EAClCjuC,IAAuC,EACjC;AACN,IAAA,MAAMuR,EAAE,GAAG,IAAI,CAACmgC,gBAAgB,EAAE,CAAA;AAClC,IAAA,IAAI,CAACszB,SAAS,CAACzzD,EAAE,EAAE;AACjB0zD,MAAAA,EAAE,EAAE;AAAErlE,QAAAA,IAAI,EAAE,oBAAA;OAAsB;AAClCoT,MAAAA,OAAO,EAAEhT,IAAI,KAAK,KAAK,GAAGolB,QAAQ,GAAGD,YAAAA;AACvC,KAAC,CAAC,CAAA;IACF8oB,IAAI,CAAC18B,EAAE,GAAGA,EAAE,CAAA;AACd,GAAA;;EAGAw4D,4BAA4B,CAE1Bv8D,IAAkC,EACZ;IACtB,OAAO,IAAI,CAACi9D,aAAa,CAACj9D,IAAI,EAAEogE,iBAAiB,CAAC0E,KAAK,CAAC,CAAA;AAC1D,GAAA;;EAKA7H,aAAa,CAEXj9D,IAAe,EACfS,KAAwB,GAAG2/D,iBAAiB,CAACyF,UAAU,EACpD;AACH,IAAA,MAAMC,kBAAkB,GAAGrlE,KAAK,GAAG2/D,iBAAiB,CAACyE,kBAAkB,CAAA;IACvE,MAAMkB,aAAa,GAAG,CAAC,EAAEtlE,KAAK,GAAG2/D,iBAAiB,CAACwE,WAAW,CAAC,CAAA;IAC/D,MAAMrR,SAAS,GAAGwS,aAAa,IAAI,EAAEtlE,KAAK,GAAG2/D,iBAAiB,CAAC4F,UAAU,CAAC,CAAA;IAC1E,MAAM9jE,OAAO,GAAG,CAAC,EAAEzB,KAAK,GAAG2/D,iBAAiB,CAAC0E,KAAK,CAAC,CAAA;AAEnD,IAAA,IAAI,CAAC7iE,YAAY,CAACjC,IAAI,EAAEkC,OAAO,CAAC,CAAA;AAEhC,IAAA,IAAI,IAAI,CAACsgB,KAAK,CAAA,EAAA,CAAS,EAAE;AACvB,MAAA,IAAIsjD,kBAAkB,EAAE;AACtB,QAAA,IAAI,CAAC7/D,KAAK,CAACxG,MAAM,CAACzK,iCAAiC,EAAE;AACnDkR,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;MACA,IAAI,CAAC0Q,IAAI,EAAE,CAAA;MACX9V,IAAI,CAAC6+D,SAAS,GAAG,IAAI,CAAA;AACvB,KAAA;AAEA,IAAA,IAAIkH,aAAa,EAAE;MACjB/lE,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACuvD,eAAe,CAACC,SAAS,CAAC,CAAA;AAC3C,KAAA;AAEA,IAAA,MAAM/G,yBAAyB,GAAG,IAAI,CAACzlD,KAAK,CAAC+X,sBAAsB,CAAA;AACnE,IAAA,IAAI,CAAC/X,KAAK,CAAC+X,sBAAsB,GAAG,KAAK,CAAA;AACzC,IAAA,IAAI,CAACtE,KAAK,CAACF,KAAK,CAAClE,cAAc,CAAC,CAAA;AAChC,IAAA,IAAI,CAACia,SAAS,CAAC/V,KAAK,CAACqT,aAAa,CAACzrB,OAAO,EAAElC,IAAI,CAAC6+D,SAAS,CAAC,CAAC,CAAA;IAE5D,IAAI,CAACkH,aAAa,EAAE;AAClB/lE,MAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACuvD,eAAe,EAAE,CAAA;AAClC,KAAA;AAEA,IAAA,IAAI,CAACnvB,mBAAmB,CAACnkC,IAAI,EAAuB,KAAK,CAAC,CAAA;;IAK1D,IAAI,CAAC2/D,kCAAkC,CAAC,MAAM;MAE5C,IAAI,CAAChhC,0BAA0B,CAC7B3+B,IAAI,EACJ+lE,aAAa,GAAG,qBAAqB,GAAG,oBAAoB,CAC7D,CAAA;AACH,KAAC,CAAC,CAAA;AAEF,IAAA,IAAI,CAAC11C,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,IAAA,IAAI,CAACC,KAAK,CAACD,IAAI,EAAE,CAAA;AAEjB,IAAA,IAAIwrD,aAAa,IAAI,CAACD,kBAAkB,EAAE;AAIxC,MAAA,IAAI,CAAC3Y,2BAA2B,CAACntD,IAAI,CAAM,CAAA;AAC7C,KAAA;AAEA,IAAA,IAAI,CAAC+G,KAAK,CAAC+X,sBAAsB,GAAG0tC,yBAAyB,CAAA;AAC7D,IAAA,OAAOxsD,IAAI,CAAA;AACb,GAAA;EAEAszD,eAAe,CAACC,SAAmB,EAAmC;AACpE,IAAA,OAAOA,SAAS,IAAI1gD,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,GAClD,IAAI,CAACmlC,eAAe,EAAE,GACtB,IAAI,CAAA;AACV,GAAA;AAEA4M,EAAAA,mBAAmB,CAEjBnkC,IAAwB,EACxBokC,cAAwB,EAClB;IACN,IAAI,CAACxV,MAAM,CAAW,EAAA,CAAA,CAAA;AACtB,IAAA,IAAI,CAAC2B,eAAe,CAACjW,KAAK,CAACqS,4BAA4B,EAAE,CAAC,CAAA;IAC1D3sB,IAAI,CAACuC,MAAM,GAAG,IAAI,CAACmiD,gBAAgB,CAGhB,EAAA,EAAA,EAAA,EAAA,KAAK,EACtBtgB,cAAc,CACf,CAAA;AAED,IAAA,IAAI,CAAC7T,eAAe,CAAChW,IAAI,EAAE,CAAA;AAC7B,GAAA;EAEA4yC,2BAA2B,CAACntD,IAAgB,EAAQ;AAClD,IAAA,IAAI,CAACA,IAAI,CAAC+D,EAAE,EAAE,OAAA;;IAMd,IAAI,CAACyW,KAAK,CAACC,WAAW,CACpBza,IAAI,CAAC+D,EAAE,CAAC/L,IAAI,EACZ,IAAI,CAAC+O,KAAK,CAACiO,MAAM,IAAIhV,IAAI,CAAC6+D,SAAS,IAAI7+D,IAAI,CAAC+kC,KAAK,GAC7C,IAAI,CAACvqB,KAAK,CAACL,mBAAmB,GAC5BvC,QAAQ,GACRD,YAAY,GACdE,aAAa,EACjB7X,IAAI,CAAC+D,EAAE,CAACvF,GAAG,CAAClQ,KAAK,CAClB,CAAA;AACH,GAAA;;AAKAy9D,EAAAA,UAAU,CAER/rD,IAAe,EACfkhC,WAAiD,EACjDC,UAAoB,EACjB;IACH,IAAI,CAACrrB,IAAI,EAAE,CAAA;;AAGX,IAAA,MAAM09C,SAAS,GAAG,IAAI,CAACzsD,KAAK,CAACiO,MAAM,CAAA;AACnC,IAAA,IAAI,CAACjO,KAAK,CAACiO,MAAM,GAAG,IAAI,CAAA;IAExB,IAAI,CAACisB,YAAY,CAACjhC,IAAI,EAAEkhC,WAAW,EAAEC,UAAU,CAAC,CAAA;AAChD,IAAA,IAAI,CAACqB,eAAe,CAACxiC,IAAI,CAAC,CAAA;AAE1BA,IAAAA,IAAI,CAACiD,IAAI,GAAG,IAAI,CAACwwD,cAAc,CAAC,CAAC,CAACzzD,IAAI,CAACC,UAAU,EAAEuzD,SAAS,CAAC,CAAA;IAE7D,OAAO,IAAI,CAAC/uD,UAAU,CACpBzE,IAAI,EACJkhC,WAAW,GAAG,kBAAkB,GAAG,iBAAiB,CACrD,CAAA;AACH,GAAA;AAEAkB,EAAAA,eAAe,GAAY;AACzB,IAAA,OAAO,IAAI,CAAC5f,KAAK,CAAA,EAAA,CAAO,IAAI,IAAI,CAACA,KAAK,CAAS,EAAA,CAAA,IAAI,IAAI,CAACA,KAAK,CAAW,CAAA,CAAA,CAAA;AAC1E,GAAA;AAEA2f,EAAAA,aAAa,GAAY;IACvB,OAAO,IAAI,CAAC3f,KAAK,CAAW,EAAA,CAAA,CAAA;AAC9B,GAAA;EAEA6f,sBAAsB,CAAC//B,MAAuC,EAAW;AACvE,IAAA,OACE,CAACA,MAAM,CAACkC,QAAQ,IAChB,CAAClC,MAAM,CAACq5B,MAAM,KACbr5B,MAAM,CAACjT,GAAG,CAAC2I,IAAI,KAAK,aAAa;AAChCsK,IAAAA,MAAM,CAACjT,GAAG,CAACE,KAAK,KAAK,aAAa,CAAC,CAAA;AAEzC,GAAA;;AAGAkkE,EAAAA,cAAc,CAEZtE,aAAsB,EACtBqE,SAAkB,EACL;AACb,IAAA,IAAI,CAAC3tD,UAAU,CAACyU,KAAK,EAAE,CAAA;AAEvB,IAAA,MAAMvT,KAA8B,GAAG;AACrCk/D,MAAAA,cAAc,EAAE,KAAK;AACrB9W,MAAAA,aAAAA;KACD,CAAA;IACD,IAAItoD,UAAyB,GAAG,EAAE,CAAA;AAClC,IAAA,MAAMzD,SAAS,GAAG,IAAI,CAACmB,SAAS,EAAe,CAAA;IAC/CnB,SAAS,CAACH,IAAI,GAAG,EAAE,CAAA;IAEnB,IAAI,CAAC2rB,MAAM,CAAW,CAAA,CAAA,CAAA;;IAItB,IAAI,CAAC+wC,kCAAkC,CAAC,MAAM;AAE5C,MAAA,OAAO,CAAC,IAAI,CAACn9C,KAAK,GAAW,EAAE;AAC7B,QAAA,IAAI,IAAI,CAACuC,GAAG,CAAA,EAAA,CAAS,EAAE;AACrB,UAAA,IAAIle,UAAU,CAAC5X,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,MAAM,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAAC5L,kBAAkB,EAAE;AAC1CqS,cAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAACoB,aAAAA;AACjB,aAAC,CAAC,CAAA;AACJ,WAAA;AACA,UAAA,SAAA;AACF,SAAA;AAEA,QAAA,IAAI,IAAI,CAACqa,KAAK,CAAA,EAAA,CAAO,EAAE;AACrB3b,UAAAA,UAAU,CAACnD,IAAI,CAAC,IAAI,CAAC0zD,cAAc,EAAE,CAAC,CAAA;AACtC,UAAA,SAAA;AACF,SAAA;AAEA,QAAA,MAAM/1B,MAAM,GAAG,IAAI,CAAC98B,SAAS,EAAiB,CAAA;;QAG9C,IAAIsC,UAAU,CAAC5X,MAAM,EAAE;UAErBoyC,MAAM,CAACx6B,UAAU,GAAGA,UAAU,CAAA;UAC9B,IAAI,CAAC8qB,0BAA0B,CAAC0P,MAAM,EAAEx6B,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AACtDA,UAAAA,UAAU,GAAG,EAAE,CAAA;AACjB,SAAA;QAEA,IAAI,CAACu6B,gBAAgB,CAACh+B,SAAS,EAAEi+B,MAAM,EAAEt6B,KAAK,CAAC,CAAA;AAE/C,QAAA;QAEEs6B,MAAM,CAAC7uC,IAAI,KAAK,aAAa;AAE7B6uC,QAAAA,MAAM,CAACx6B,UAAU;AAEjBw6B,QAAAA,MAAM,CAACx6B,UAAU,CAAC5X,MAAM,GAAG,CAAC,EAC5B;AACA,UAAA,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAAC9L,oBAAoB,EAAE;AAAEuS,YAAAA,EAAE,EAAEm7B,MAAAA;AAAO,WAAC,CAAC,CAAA;AACzD,SAAA;AACF,OAAA;AACF,KAAC,CAAC,CAAA;AAEF,IAAA,IAAI,CAACt6B,KAAK,CAACiO,MAAM,GAAGw+C,SAAS,CAAA;IAE7B,IAAI,CAAC19C,IAAI,EAAE,CAAA;;IAEX,IAAIjP,UAAU,CAAC5X,MAAM,EAAE;AACrB,MAAA,MAAM,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAACpF,iBAAiB,EAAE;AAAE6L,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,OAAC,CAAC,CAAA;AACzE,KAAA;AAEA,IAAA,IAAI,CAACS,UAAU,CAAC0U,IAAI,EAAE,CAAA;AAEtB,IAAA,OAAO,IAAI,CAAC9V,UAAU,CAACrB,SAAS,EAAE,WAAW,CAAC,CAAA;AAChD,GAAA;;AAIAk+B,EAAAA,4BAA4B,CAE1Bl+B,SAA8B,EAC9Bi+B,MAA6B,EACpB;AACT,IAAA,MAAMhyC,GAAG,GAAG,IAAI,CAACkoC,eAAe,CAAC,IAAI,CAAC,CAAA;;AAEtC,IAAA,IAAI,IAAI,CAAC4K,aAAa,EAAE,EAAE;MACxB,MAAM7/B,MAAqB,GAAG++B,MAAa,CAAA;;MAG3C/+B,MAAM,CAAC9P,IAAI,GAAG,QAAQ,CAAA;MACtB8P,MAAM,CAACkC,QAAQ,GAAG,KAAK,CAAA;MACvBlC,MAAM,CAACjT,GAAG,GAAGA,GAAG,CAAA;MAChBiT,MAAM,CAACq5B,MAAM,GAAG,KAAK,CAAA;AACrB,MAAA,IAAI,CAACx4B,eAAe,CAClBC,SAAS,EACTd,MAAM,EACN,KAAK,EACL,KAAK,EACe,KAAK,EACzB,KAAK,CACN,CAAA;AACD,MAAA,OAAO,IAAI,CAAA;AACb,KAAC,MAAM,IAAI,IAAI,CAAC8/B,eAAe,EAAE,EAAE;MACjC,MAAMr9B,IAAqB,GAAGs8B,MAAa,CAAA;;MAG3Ct8B,IAAI,CAACP,QAAQ,GAAG,KAAK,CAAA;MACrBO,IAAI,CAAC1V,GAAG,GAAGA,GAAG,CAAA;MACd0V,IAAI,CAAC42B,MAAM,GAAG,KAAK,CAAA;MACnBv4B,SAAS,CAACH,IAAI,CAACS,IAAI,CAAC,IAAI,CAACgB,kBAAkB,CAACK,IAAI,CAAC,CAAC,CAAA;AAClD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,IAAI,CAAC+Y,iCAAiC,CAACzuB,GAAG,CAAC,CAAA;AAC3C,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA+xC,EAAAA,gBAAgB,CAEdh+B,SAA8B,EAC9Bi+B,MAA6B,EAC7Bt6B,KAA8B,EACxB;AACN,IAAA,MAAM20B,QAAQ,GAAG,IAAI,CAAC5N,YAAY,CAAY,GAAA,CAAA,CAAA;AAE9C,IAAA,IAAI4N,QAAQ,EAAE;MACZ,IAAI,IAAI,CAAC4F,4BAA4B,CAACl+B,SAAS,EAAEi+B,MAAM,CAAC,EAAE;AAExD,QAAA,OAAA;AACF,OAAA;AACA,MAAA,IAAI,IAAI,CAACtc,GAAG,CAAA,CAAA,CAAW,EAAE;AACvB,QAAA,IAAI,CAACkqC,qBAAqB,CAAC7rD,SAAS,EAAEi+B,MAAM,CAAyB,CAAA;AACrE,QAAA,OAAA;AACF,OAAA;AACF,KAAA;IAEA,IAAI,CAAC6tB,4BAA4B,CAAC9rD,SAAS,EAAEi+B,MAAM,EAAEt6B,KAAK,EAAE20B,QAAQ,CAAC,CAAA;AACvE,GAAA;EAEAwzB,4BAA4B,CAE1B9rD,SAA8B,EAC9Bi+B,MAA6B,EAC7Bt6B,KAA8B,EAC9B20B,QAAiB,EACjB;IACA,MAAMwqC,YAAY,GAAG7kC,MAAuB,CAAA;IAC5C,MAAM8kC,aAAa,GAAG9kC,MAA8B,CAAA;IACpD,MAAM+kC,UAAU,GAAG/kC,MAAyB,CAAA;IAC5C,MAAMglC,WAAW,GAAGhlC,MAAgC,CAAA;IACpD,MAAMilC,YAAY,GAAGjlC,MAAiC,CAAA;IAEtD,MAAM/+B,MAAkD,GAAG4jE,YAAY,CAAA;IACvE,MAAMK,YAAqD,GAAGL,YAAY,CAAA;IAE1E7kC,MAAM,CAAC1F,MAAM,GAAGD,QAAQ,CAAA;AACxB,IAAA,IAAI,CAACkH,+BAA+B,CAACvB,MAAM,CAAC,CAAA;AAE5C,IAAA,IAAI,IAAI,CAACtc,GAAG,CAAA,EAAA,CAAS,EAAE;MAErBziB,MAAM,CAAC9P,IAAI,GAAG,QAAQ,CAAA;AACtB,MAAA,MAAMwR,aAAa,GAAG,IAAI,CAACwe,KAAK,CAAgB,GAAA,CAAA,CAAA;AAChD,MAAA,IAAI,CAACgkD,qBAAqB,CAAClkE,MAAM,CAAC,CAAA;AAElC,MAAA,IAAI0B,aAAa,EAAE;QAEjB,IAAI,CAACu+B,sBAAsB,CAACn/B,SAAS,EAAE+iE,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAClE,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,IAAI,IAAI,CAAC9jC,sBAAsB,CAAC6jC,YAAY,CAAC,EAAE;AAC7C,QAAA,IAAI,CAACjgE,KAAK,CAACxG,MAAM,CAAClM,sBAAsB,EAAE;UACxC2S,EAAE,EAAEggE,YAAY,CAAC72E,GAAAA;AACnB,SAAC,CAAC,CAAA;AACJ,OAAA;AAEA,MAAA,IAAI,CAAC8T,eAAe,CAClBC,SAAS,EACT8iE,YAAY,EACZ,IAAI,EACJ,KAAK,EACe,KAAK,EACzB,KAAK,CACN,CAAA;AAED,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,MAAMp4C,YAAY,GAChBjb,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC2U,KAAK,CAAC+Y,WAAW,CAAA;AAC/D,IAAA,MAAM2mD,SAAS,GAAG,IAAI,CAACjkD,KAAK,CAAgB,GAAA,CAAA,CAAA;AAC5C,IAAA,MAAMnzB,GAAG,GAAG,IAAI,CAACm3E,qBAAqB,CAACnlC,MAAM,CAAC,CAAA;AAC9C,IAAA,MAAMqlC,0BAA0B,GAAG,IAAI,CAAC3/D,KAAK,CAAC3B,QAAQ,CAAA;AAEtD,IAAA,IAAI,CAACgqD,4BAA4B,CAACmX,YAAY,CAAC,CAAA;AAE/C,IAAA,IAAI,IAAI,CAACpkC,aAAa,EAAE,EAAE;MACxB7/B,MAAM,CAAC9P,IAAI,GAAG,QAAQ,CAAA;AAEtB,MAAA,IAAIi0E,SAAS,EAAE;QACb,IAAI,CAAClkC,sBAAsB,CAACn/B,SAAS,EAAE+iE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AACnE,QAAA,OAAA;AACF,OAAA;;AAGA,MAAA,MAAM7iE,aAAa,GAAG,IAAI,CAAC++B,sBAAsB,CAAC6jC,YAAY,CAAC,CAAA;MAC/D,IAAI3iE,iBAAiB,GAAG,KAAK,CAAA;AAC7B,MAAA,IAAID,aAAa,EAAE;QACjB4iE,YAAY,CAAC1zE,IAAI,GAAG,aAAa,CAAA;;QAGjC,IAAIuU,KAAK,CAACk/D,cAAc,IAAI,CAAC,IAAI,CAACx/D,SAAS,CAAC,YAAY,CAAC,EAAE;AACzD,UAAA,IAAI,CAACR,KAAK,CAACxG,MAAM,CAACxL,oBAAoB,EAAE;AAAEiS,YAAAA,EAAE,EAAE7W,GAAAA;AAAI,WAAC,CAAC,CAAA;AACtD,SAAA;AACA,QAAA,IAAIiU,aAAa,IAAI,IAAI,CAACmD,SAAS,CAAC,YAAY,CAAC,IAAI46B,MAAM,CAACwrB,QAAQ,EAAE;AACpE,UAAA,IAAI,CAAC5mD,KAAK,CAACxG,MAAM,CAACnG,qBAAqB,EAAE;AAAE4M,YAAAA,EAAE,EAAE7W,GAAAA;AAAI,WAAC,CAAC,CAAA;AACvD,SAAA;QACA0X,KAAK,CAACk/D,cAAc,GAAG,IAAI,CAAA;QAC3B1iE,iBAAiB,GAAGwD,KAAK,CAACooD,aAAa,CAAA;AACzC,OAAA;AAEA,MAAA,IAAI,CAAChsD,eAAe,CAClBC,SAAS,EACT8iE,YAAY,EACZ,KAAK,EACL,KAAK,EACL5iE,aAAa,EACbC,iBAAiB,CAClB,CAAA;AACH,KAAC,MAAM,IAAI,IAAI,CAAC6+B,eAAe,EAAE,EAAE;AACjC,MAAA,IAAIqkC,SAAS,EAAE;AACb,QAAA,IAAI,CAACE,wBAAwB,CAACvjE,SAAS,EAAEijE,WAAW,CAAC,CAAA;AACvD,OAAC,MAAM;AACL,QAAA,IAAI,CAACO,iBAAiB,CAACxjE,SAAS,EAAEgjE,UAAU,CAAC,CAAA;AAC/C,OAAA;AACF,KAAC,MAAM,IACLt4C,YAAY,IACZz+B,GAAG,CAAC2I,IAAI,KAAK,OAAO,IACpB,CAAC,IAAI,CAACy2B,gBAAgB,EAAE,EACxB;AAEA,MAAA,IAAI,CAAC3Q,iCAAiC,CAACzuB,GAAG,CAAC,CAAA;AAC3C,MAAA,MAAMgU,WAAW,GAAG,IAAI,CAAC0hB,GAAG,CAAS,EAAA,CAAA,CAAA;MAErC,IAAIwhD,YAAY,CAAClgE,QAAQ,EAAE;AACzB,QAAA,IAAI,CAACrP,UAAU,CAAC0vE,0BAA0B,CAAC,CAAA;AAC7C,OAAA;MAEApkE,MAAM,CAAC9P,IAAI,GAAG,QAAQ,CAAA;AAEtB,MAAA,MAAMi0E,SAAS,GAAG,IAAI,CAACjkD,KAAK,CAAgB,GAAA,CAAA,CAAA;AAC5C,MAAA,IAAI,CAACgkD,qBAAqB,CAAClkE,MAAM,CAAC,CAAA;AAClC,MAAA,IAAI,CAAC8sD,4BAA4B,CAACmX,YAAY,CAAC,CAAA;AAE/C,MAAA,IAAIE,SAAS,EAAE;QAEb,IAAI,CAAClkC,sBAAsB,CACzBn/B,SAAS,EACT+iE,aAAa,EACb9iE,WAAW,EACX,IAAI,CACL,CAAA;AACH,OAAC,MAAM;AACL,QAAA,IAAI,IAAI,CAACg/B,sBAAsB,CAAC6jC,YAAY,CAAC,EAAE;AAC7C,UAAA,IAAI,CAACjgE,KAAK,CAACxG,MAAM,CAACnM,kBAAkB,EAAE;YAAE4S,EAAE,EAAEggE,YAAY,CAAC72E,GAAAA;AAAI,WAAC,CAAC,CAAA;AACjE,SAAA;AAEA,QAAA,IAAI,CAAC8T,eAAe,CAClBC,SAAS,EACT8iE,YAAY,EACZ7iE,WAAW,EACX,IAAI,EACgB,KAAK,EACzB,KAAK,CACN,CAAA;AACH,OAAA;AACF,KAAC,MAAM,IACLyqB,YAAY,KACXz+B,GAAG,CAAC2I,IAAI,KAAK,KAAK,IAAI3I,GAAG,CAAC2I,IAAI,KAAK,KAAK,CAAC,IAC1C,EAAE,IAAI,CAACwqB,KAAK,CAAA,EAAA,CAAS,IAAI,IAAI,CAACiM,gBAAgB,EAAE,CAAC,EACjD;AAGA,MAAA,IAAI,CAAC3Q,iCAAiC,CAACzuB,GAAG,CAAC,CAAA;AAC3CiT,MAAAA,MAAM,CAAC9P,IAAI,GAAGnD,GAAG,CAAC2I,IAAI,CAAA;AAEtB,MAAA,MAAMyuE,SAAS,GAAG,IAAI,CAACjkD,KAAK,CAAgB,GAAA,CAAA,CAAA;AAC5C,MAAA,IAAI,CAACgkD,qBAAqB,CAACN,YAAY,CAAC,CAAA;AAExC,MAAA,IAAIO,SAAS,EAAE;QAEb,IAAI,CAAClkC,sBAAsB,CAACn/B,SAAS,EAAE+iE,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AACrE,OAAC,MAAM;AACL,QAAA,IAAI,IAAI,CAAC9jC,sBAAsB,CAAC6jC,YAAY,CAAC,EAAE;AAC7C,UAAA,IAAI,CAACjgE,KAAK,CAACxG,MAAM,CAACpM,qBAAqB,EAAE;YAAE6S,EAAE,EAAEggE,YAAY,CAAC72E,GAAAA;AAAI,WAAC,CAAC,CAAA;AACpE,SAAA;AACA,QAAA,IAAI,CAAC8T,eAAe,CAClBC,SAAS,EACT8iE,YAAY,EACZ,KAAK,EACL,KAAK,EACe,KAAK,EACzB,KAAK,CACN,CAAA;AACH,OAAA;AAEA,MAAA,IAAI,CAACvjC,uBAAuB,CAACujC,YAAY,CAAC,CAAA;AAC5C,KAAC,MAAM,IACLp4C,YAAY,IACZz+B,GAAG,CAAC2I,IAAI,KAAK,UAAU,IACvB,CAAC,IAAI,CAACy2B,gBAAgB,EAAE,EACxB;AACA,MAAA,IAAI,CAAC1H,YAAY,CAAC,wBAAwB,CAAC,CAAA;AAC3C,MAAA,IAAI,CAACjJ,iCAAiC,CAACzuB,GAAG,CAAC,CAAA;;AAG3C,MAAA,MAAMo3E,SAAS,GAAG,IAAI,CAACjkD,KAAK,CAAgB,GAAA,CAAA,CAAA;AAC5C,MAAA,IAAI,CAACgkD,qBAAqB,CAACJ,UAAU,CAAC,CAAA;MACtC,IAAI,CAACS,yBAAyB,CAACzjE,SAAS,EAAEkjE,YAAY,EAAEG,SAAS,CAAC,CAAA;AACpE,KAAC,MAAM,IAAI,IAAI,CAACh4C,gBAAgB,EAAE,EAAE;AAElC,MAAA,IAAIg4C,SAAS,EAAE;AACb,QAAA,IAAI,CAACE,wBAAwB,CAACvjE,SAAS,EAAEijE,WAAW,CAAC,CAAA;AACvD,OAAC,MAAM;AACL,QAAA,IAAI,CAACO,iBAAiB,CAACxjE,SAAS,EAAEgjE,UAAU,CAAC,CAAA;AAC/C,OAAA;AACF,KAAC,MAAM;MACL,IAAI,CAACpvE,UAAU,EAAE,CAAA;AACnB,KAAA;AACF,GAAA;;EAGAwvE,qBAAqB,CAEnBnlC,MAA6B,EACA;IAC7B,MAAM;MAAEjvC,IAAI;AAAE7C,MAAAA,KAAAA;KAAO,GAAG,IAAI,CAACwX,KAAK,CAAA;AAClC,IAAA,IACE,CAAC3U,IAAI,KAAY,GAAA,IAAIA,IAAI,KAAc,GAAA,KACvCivC,MAAM,CAAC1F,MAAM,IACbpsC,KAAK,KAAK,WAAW,EACrB;AACA,MAAA,IAAI,CAAC0W,KAAK,CAACxG,MAAM,CAACvF,eAAe,EAAE;AAAEgM,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,OAAC,CAAC,CAAA;AACjE,KAAA;IAEA,IAAIhT,IAAI,QAAmB,EAAE;MAC3B,IAAI7C,KAAK,KAAK,aAAa,EAAE;AAC3B,QAAA,IAAI,CAAC0W,KAAK,CAACxG,MAAM,CAACrM,4BAA4B,EAAE;AAC9C8S,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,MAAM/V,GAAG,GAAG,IAAI,CAACsU,gBAAgB,EAAE,CAAA;MACnC09B,MAAM,CAAChyC,GAAG,GAAGA,GAAG,CAAA;AAChB,MAAA,OAAOA,GAAG,CAAA;AACZ,KAAA;AAEA,IAAA,OAAO,IAAI,CAACm2D,iBAAiB,CAACnkB,MAAM,CAAC,CAAA;AACvC,GAAA;AAEA4tB,EAAAA,qBAAqB,CAEnB7rD,SAA8B,EAC9Bi+B,MAIC,EACD;AAAA,IAAA,IAAA,kBAAA,CAAA;IAEA,IAAI,CAAC7mB,KAAK,CAACF,KAAK,CAAC7D,WAAW,GAAGC,kBAAkB,GAAGH,WAAW,CAAC,CAAA;AAEhE,IAAA,MAAMuZ,SAAS,GAAG,IAAI,CAAC/oB,KAAK,CAAC2Y,MAAM,CAAA;AACnC,IAAA,IAAI,CAAC3Y,KAAK,CAAC2Y,MAAM,GAAG,EAAE,CAAA;AAGtB,IAAA,IAAI,CAAC2Q,SAAS,CAAC/V,KAAK,CAACyS,KAAK,CAAC,CAAA;AAC3B,IAAA,MAAM9pB,IAAc,GAAIo+B,MAAM,CAACp+B,IAAI,GAAG,EAAG,CAAA;IACzC,IAAI,CAAC2nD,2BAA2B,CAAC3nD,IAAI,EAAEiZ,SAAS,EAAE,KAAK,EAAY,CAAA,CAAA,CAAA;AACnE,IAAA,IAAI,CAACmU,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,IAAA,IAAI,CAACC,KAAK,CAACD,IAAI,EAAE,CAAA;AACjB,IAAA,IAAI,CAACxT,KAAK,CAAC2Y,MAAM,GAAGoQ,SAAS,CAAA;AAC7B1sB,IAAAA,SAAS,CAACH,IAAI,CAACS,IAAI,CAAC,IAAI,CAACe,UAAU,CAAgB48B,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;AAC1E,IAAA,IAAA,CAAA,kBAAA,GAAIA,MAAM,CAACx6B,UAAU,KAAjB,IAAA,IAAA,kBAAA,CAAmB5X,MAAM,EAAE;AAC7B,MAAA,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAAC3L,oBAAoB,EAAE;AAAEoS,QAAAA,EAAE,EAAEm7B,MAAAA;AAAO,OAAC,CAAC,CAAA;AACzD,KAAA;AACF,GAAA;AAEAulC,EAAAA,iBAAiB,CAEfxjE,SAA8B,EAC9B2B,IAAqB,EACrB;IACA,IACE,CAACA,IAAI,CAACP,QAAQ,KACbO,IAAI,CAAC1V,GAAG,CAAC2I,IAAI,KAAK,aAAa,IAAI+M,IAAI,CAAC1V,GAAG,CAACE,KAAK,KAAK,aAAa,CAAC,EACrE;AAGA,MAAA,IAAI,CAAC0W,KAAK,CAACxG,MAAM,CAACtM,qBAAqB,EAAE;QAAE+S,EAAE,EAAEnB,IAAI,CAAC1V,GAAAA;AAAI,OAAC,CAAC,CAAA;AAC5D,KAAA;IAEA+T,SAAS,CAACH,IAAI,CAACS,IAAI,CAAC,IAAI,CAACgB,kBAAkB,CAACK,IAAI,CAAC,CAAC,CAAA;AACpD,GAAA;AAEA4hE,EAAAA,wBAAwB,CAEtBvjE,SAA8B,EAC9B2B,IAAoC,EACpC;AACA,IAAA,MAAM/E,IAAI,GAAG,IAAI,CAAC6E,yBAAyB,CAACE,IAAI,CAAC,CAAA;AACjD3B,IAAAA,SAAS,CAACH,IAAI,CAACS,IAAI,CAAC1D,IAAI,CAAC,CAAA;IAEzB,IAAI,CAAC6F,UAAU,CAACklB,kBAAkB,CAChC,IAAI,CAACjnB,gBAAgB,CAAC9D,IAAI,CAAC3Q,GAAG,CAAC,EAC/B2pB,mBAAmB,EACnBhZ,IAAI,CAAC3Q,GAAG,CAACmP,GAAG,CAAClQ,KAAK,CACnB,CAAA;AACH,GAAA;AAEAu4E,EAAAA,yBAAyB,CAEvBzjE,SAA8B,EAC9B2B,IAA6B,EAC7B0hE,SAAkB,EAClB;AACA,IAAA,IAAI,CAACA,SAAS,IAAI,CAAC1hE,IAAI,CAACP,QAAQ,EAAE;AAEhC,MAAA,MAAMnV,GAAG,GAAG0V,IAAI,CAAC1V,GAAmB,CAAA;MAEpC,IAAIA,GAAG,CAAC2I,IAAI,KAAK,aAAa,IAAI3I,GAAG,CAACE,KAAK,KAAK,aAAa,EAAE;AAG7D,QAAA,IAAI,CAAC0W,KAAK,CAACxG,MAAM,CAACtM,qBAAqB,EAAE;AAAE+S,UAAAA,EAAE,EAAE7W,GAAAA;AAAI,SAAC,CAAC,CAAA;AACvD,OAAA;AACF,KAAA;AAEA,IAAA,MAAM2Q,IAAI,GAAG,IAAI,CAAC0vD,0BAA0B,CAAC3qD,IAAI,CAAC,CAAA;AAClD3B,IAAAA,SAAS,CAACH,IAAI,CAACS,IAAI,CAAC1D,IAAI,CAAC,CAAA;AAEzB,IAAA,IAAIymE,SAAS,EAAE;MACb,IAAI,CAAC5gE,UAAU,CAACklB,kBAAkB,CAChC,IAAI,CAACjnB,gBAAgB,CAAC9D,IAAI,CAAC3Q,GAAG,CAAC,EAC/B2pB,mBAAmB,EACnBhZ,IAAI,CAAC3Q,GAAG,CAACmP,GAAG,CAAClQ,KAAK,CACnB,CAAA;AACH,KAAA;AACF,GAAA;AAEA6U,EAAAA,eAAe,CAEbC,SAA8B,EAC9Bd,MAA6B,EAC7Be,WAAoB,EACpBnB,OAAgB,EAChBoB,aAAsB,EACtBC,iBAA0B,EACpB;IACNH,SAAS,CAACH,IAAI,CAACS,IAAI,CACjB,IAAI,CAACF,WAAW,CACdlB,MAAM,EACNe,WAAW,EACXnB,OAAO,EACPoB,aAAa,EACbC,iBAAiB,EACjB,aAAa,EACb,IAAI,CACL,CACF,CAAA;AACH,GAAA;EAEAg/B,sBAAsB,CAEpBn/B,SAA8B,EAC9Bd,MAAoC,EACpCe,WAAoB,EACpBnB,OAAgB,EACV;AACN,IAAA,MAAMlC,IAAI,GAAG,IAAI,CAACwD,WAAW,CAC3BlB,MAAM,EACNe,WAAW,EACXnB,OAAO,EACa,KAAK,EACzB,KAAK,EACL,oBAAoB,EACpB,IAAI,CACL,CAAA;AACDkB,IAAAA,SAAS,CAACH,IAAI,CAACS,IAAI,CAAC1D,IAAI,CAAC,CAAA;AAEzB,IAAA,MAAMxN,IAAI,GACRwN,IAAI,CAACxN,IAAI,KAAK,KAAK,GACfwN,IAAI,CAAC27B,MAAM,GACT/iB,2BAA2B,GAC3BE,6BAA6B,GAC/B9Y,IAAI,CAACxN,IAAI,KAAK,KAAK,GACnBwN,IAAI,CAAC27B,MAAM,GACT9iB,2BAA2B,GAC3BE,6BAA6B,GAC/BC,mBAAmB,CAAA;AACzB,IAAA,IAAI,CAAC22C,gCAAgC,CAAC3vD,IAAI,EAAExN,IAAI,CAAC,CAAA;AACnD,GAAA;AAEAm9D,EAAAA,gCAAgC,CAC9B3vD,IAEC,EACDxN,IAAY,EACZ;IACA,IAAI,CAACqT,UAAU,CAACklB,kBAAkB,CAChC,IAAI,CAACjnB,gBAAgB,CAAC9D,IAAI,CAAC3Q,GAAG,CAAC,EAC/BmD,IAAI,EACJwN,IAAI,CAAC3Q,GAAG,CAACmP,GAAG,CAAClQ,KAAK,CACnB,CAAA;AACH,GAAA;;EAGA8gE,4BAA4B;AAE1BC,EAAAA,YAAqD,EAC/C,EAAC;;EAGTxqD,yBAAyB,CAEvB7E,IAAoC,EACZ;AACxB,IAAA,IAAI,CAAC8mE,gBAAgB,CAAC9mE,IAAI,CAAC,CAAA;IAC3B,IAAI,CAAC0uB,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AACtD,GAAA;;EAGA0E,kBAAkB,CAAe1E,IAAqB,EAAmB;AACvE,IAAA,IAAI,CAAC8mE,gBAAgB,CAAC9mE,IAAI,CAAC,CAAA;IAC3B,IAAI,CAAC0uB,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,eAAe,CAAC,CAAA;AAC/C,GAAA;EAEA0vD,0BAA0B,CAExB1vD,IAA6B,EACJ;AACzB,IAAA,IAAI,CAAC8mE,gBAAgB,CAAC9mE,IAAI,CAAC,CAAA;IAC3B,IAAI,CAAC0uB,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,uBAAuB,CAAC,CAAA;AACvD,GAAA;;EAGA8mE,gBAAgB,CAEd9mE,IAEC,EACK;IACN,IAAI,CAACwa,KAAK,CAACF,KAAK,CAAC7D,WAAW,GAAGF,WAAW,CAAC,CAAA;AAC3C,IAAA,IAAI,CAACga,eAAe,CAACjW,KAAK,CAACwS,kBAAkB,EAAE,CAAC,CAAA;AAChD,IAAA,IAAI,CAACuD,SAAS,CAAC/V,KAAK,CAACyS,KAAK,CAAC,CAAA;AAC3B/sB,IAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAACw1B,GAAG,CAAO,EAAA,CAAA,GAAG,IAAI,CAAC8a,uBAAuB,EAAE,GAAG,IAAI,CAAA;AACpE,IAAA,IAAI,CAACtP,eAAe,CAAChW,IAAI,EAAE,CAAA;AAC3B,IAAA,IAAI,CAAC8V,SAAS,CAAC9V,IAAI,EAAE,CAAA;AACrB,IAAA,IAAI,CAACC,KAAK,CAACD,IAAI,EAAE,CAAA;AACnB,GAAA;EAEA0mB,YAAY,CACVjhC,IAAqB,EACrBkhC,WAAoB,EACpBC,UAA2B,EAC3BzmB,WAAyB,GAAGhD,UAAU,EAChC;IACN,IAAI7E,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,EAAE;AACtC4N,MAAAA,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAACwzB,eAAe,EAAE,CAAA;AAChC,MAAA,IAAI2J,WAAW,EAAE;QACf,IAAI,CAACi3B,yBAAyB,CAACn4D,IAAI,CAAC+D,EAAE,EAAE2W,WAAW,CAAC,CAAA;AACtD,OAAA;AACF,KAAC,MAAM;AACL,MAAA,IAAIymB,UAAU,IAAI,CAACD,WAAW,EAAE;QAC9BlhC,IAAI,CAAC+D,EAAE,GAAG,IAAI,CAAA;AAChB,OAAC,MAAM;AACL,QAAA,MAAM,IAAI,CAACkC,KAAK,CAACxG,MAAM,CAAC9H,gBAAgB,EAAE;AAAEuO,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,SAAC,CAAC,CAAA;AACxE,OAAA;AACF,KAAA;AACF,GAAA;;EAGAo9B,eAAe,CAAexiC,IAAqB,EAAQ;AACzDA,IAAAA,IAAI,CAACC,UAAU,GAAG,IAAI,CAAC8kB,GAAG,CAAa,EAAA,CAAA,GAAG,IAAI,CAACg2C,mBAAmB,EAAE,GAAG,IAAI,CAAA;AAC7E,GAAA;;AAKAn0D,EAAAA,WAAW,CAET5G,IAIC,EACD6G,UAAgC,EACnB;AACb,IAAA,MAAMkgE,UAAU,GAAG,IAAI,CAACpT,gCAAgC;AAEtD3zD,IAAAA,IAAI,CACL,CAAA;IACD,MAAMgnE,iBAAiB,GAAG,CAACD,UAAU,IAAI,IAAI,CAAChiD,GAAG,CAAU,EAAA,CAAA,CAAA;AAC3D,IAAA,MAAMkiD,OAAO,GACXD,iBAAiB,IACjB,IAAI,CAAClmC,aAAa;AAEhB9gC,IAAAA,IAAI,CACL,CAAA;AACH,IAAA,MAAMghC,YAAY,GAChBimC,OAAO,IACP,IAAI,CAAClmC,kCAAkC;AAErC/gC,IAAAA,IAAI,CACL,CAAA;IACH,MAAMknE,mBAAmB,GACvBF,iBAAiB,KAAK,CAAChmC,YAAY,IAAI,IAAI,CAACjc,GAAG,CAAA,EAAA,CAAU,CAAC,CAAA;AAC5D,IAAA,MAAMoiD,cAAc,GAAGJ,UAAU,IAAIE,OAAO,CAAA;AAE5C,IAAA,IAAIA,OAAO,IAAI,CAACjmC,YAAY,EAAE;AAC5B,MAAA,IAAI+lC,UAAU,EAAE,IAAI,CAAC/vE,UAAU,EAAE,CAAA;AACjC,MAAA,IAAI6P,UAAU,EAAE;AACd,QAAA,MAAM,IAAI,CAACZ,KAAK,CAACxG,MAAM,CAAC9D,0BAA0B,EAAE;AAAEuK,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AACnE,OAAA;AACA,MAAA,IAAI,CAAC6gC,eAAe,CAAC7gC,IAAI,EAAsC,IAAI,CAAC,CAAA;AAEpE,MAAA,OAAO,IAAI,CAACyE,UAAU,CAACzE,IAAI,EAAE,sBAAsB,CAAC,CAAA;AACtD,KAAA;AAEA,IAAA,MAAMonE,aAAa,GAAG,IAAI,CAACC,+BAA+B;AAExDrnE,IAAAA,IAAI,CACL,CAAA;AAED,IAAA,IACG+mE,UAAU,IAAIC,iBAAiB,IAAI,CAACC,OAAO,IAAI,CAACG,aAAa,IAC7DpmC,YAAY,IAAIkmC,mBAAmB,IAAI,CAACE,aAAc,EACvD;AACA,MAAA,MAAM,IAAI,CAACpwE,UAAU,CAAC,IAAI,EAAY,CAAA,CAAA,CAAA;AACxC,KAAA;AAEA,IAAA,IAAIswE,cAAc,CAAA;IAClB,IAAIH,cAAc,IAAIC,aAAa,EAAE;AACnCE,MAAAA,cAAc,GAAG,KAAK,CAAA;AACtB,MAAA,IAAIzgE,UAAU,EAAE;AACd,QAAA,MAAM,IAAI,CAACZ,KAAK,CAACxG,MAAM,CAAC9D,0BAA0B,EAAE;AAAEuK,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AACnE,OAAA;AACA,MAAA,IAAI,CAAC6gC,eAAe,CAClB7gC,IAAI,EACJmnE,cAAc,CACf,CAAA;AACH,KAAC,MAAM;AACLG,MAAAA,cAAc,GAAG,IAAI,CAACC,2BAA2B,CAC/CvnE,IAAI,CACL,CAAA;AACH,KAAA;AAEA,IAAA,IAAImnE,cAAc,IAAIC,aAAa,IAAIE,cAAc,EAAE;AAAA,MAAA,IAAA,kBAAA,CAAA;MACrD,MAAMtqC,KAAK,GAAGh9B,IAAwC,CAAA;AACtD,MAAA,IAAI,CAAC4zD,WAAW,CAAC52B,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAACA,KAAK,CAACz2B,MAAM,CAAC,CAAA;MACpD,IAAI,CAAA,CAAA,kBAAA,GAAAy2B,KAAK,CAAC71B,WAAW,qBAAjB,kBAAmB/U,CAAAA,IAAI,MAAK,kBAAkB,EAAE;QAClD,IAAI,CAAC++D,mBAAmB,CAACtqD,UAAU,EAAEm2B,KAAK,CAAC71B,WAAW,EAAE61B,KAAK,CAAC,CAAA;OAC/D,MAAM,IAAIn2B,UAAU,EAAE;AACrB,QAAA,MAAM,IAAI,CAACZ,KAAK,CAACxG,MAAM,CAAC9D,0BAA0B,EAAE;AAAEuK,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AACnE,OAAA;AACA,MAAA,OAAO,IAAI,CAACyE,UAAU,CAACu4B,KAAK,EAAE,wBAAwB,CAAC,CAAA;AACzD,KAAA;AAEA,IAAA,IAAI,IAAI,CAACjY,GAAG,CAAA,EAAA,CAAa,EAAE;MACzB,MAAMiY,KAAK,GAAGh9B,IAA0C,CAAA;AAExD,MAAA,MAAMygC,IAAI,GAAG,IAAI,CAACvB,4BAA4B,EAAE,CAAA;MAChDlC,KAAK,CAAC71B,WAAW,GAAGs5B,IAAI,CAAA;AAExB,MAAA,IAAIA,IAAI,CAACruC,IAAI,KAAK,kBAAkB,EAAE;QACpC,IAAI,CAAC++D,mBAAmB,CAACtqD,UAAU,EAAE45B,IAAI,EAAwBzD,KAAK,CAAC,CAAA;OACxE,MAAM,IAAIn2B,UAAU,EAAE;AACrB,QAAA,MAAM,IAAI,CAACZ,KAAK,CAACxG,MAAM,CAAC9D,0BAA0B,EAAE;AAAEuK,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AACnE,OAAA;MAEA,IAAI,CAAC4zD,WAAW,CAAC52B,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAEnC,MAAA,OAAO,IAAI,CAACv4B,UAAU,CAACu4B,KAAK,EAAE,0BAA0B,CAAC,CAAA;AAC3D,KAAA;AAEA,IAAA,MAAM,IAAI,CAAChmC,UAAU,CAAC,IAAI,EAAY,CAAA,CAAA,CAAA;AACxC,GAAA;;EAGA8pC,aAAa,CAAC9gC,IAAY,EAAW;IACnC,OAAO,IAAI,CAAC+kB,GAAG,CAAS,EAAA,CAAA,CAAA;AAC1B,GAAA;EAEA4uC,gCAAgC,CAAC3zD,IAAY,EAAW;AACtD,IAAA,IAAI,IAAI,CAACi/B,wBAAwB,EAAE,EAAE;AAEnC,MAAA,IAAI,CAAClY,YAAY,CAAC,mBAAmB,CAAC,CAAA;AACtC,MAAA,MAAMqc,SAAS,GAAG,IAAI,CAAC7+B,SAAS,EAAE,CAAA;MAClC6+B,SAAS,CAACn8B,QAAQ,GAAG,IAAI,CAACswB,eAAe,CAAC,IAAI,CAAC,CAAA;AAC/Cv3B,MAAAA,IAAI,CAACkH,UAAU,GAAG,CAAC,IAAI,CAACzC,UAAU,CAAC2+B,SAAS,EAAE,wBAAwB,CAAC,CAAC,CAAA;AACxE,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEArC,kCAAkC,CAAC/gC,IAAY,EAAW;AACxD,IAAA,IAAI,IAAI,CAAC8tB,YAAY,CAAA,EAAA,CAAQ,EAAE;MAC7B,IAAI,CAAC9tB,IAAI,CAACkH,UAAU,EAAElH,IAAI,CAACkH,UAAU,GAAG,EAAE,CAAA;MAE1C,MAAMk8B,SAAS,GAAG,IAAI,CAAC1R,WAAW,CAAC,IAAI,CAAC3qB,KAAK,CAACC,eAAe,CAAC,CAAA;MAE9D,IAAI,CAAC8O,IAAI,EAAE,CAAA;AAEXstB,MAAAA,SAAS,CAACn8B,QAAQ,GAAG,IAAI,CAACorD,qBAAqB,EAAE,CAAA;AACjDryD,MAAAA,IAAI,CAACkH,UAAU,CAACxD,IAAI,CAClB,IAAI,CAACe,UAAU,CAAC2+B,SAAS,EAAE,0BAA0B,CAAC,CACvD,CAAA;AACD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEAikC,+BAA+B,CAACrnE,IAAY,EAAW;AACrD,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,CAAA,CAAW,EAAE;MACzB,IAAI,CAACxiB,IAAI,CAACkH,UAAU,EAAElH,IAAI,CAACkH,UAAU,GAAG,EAAE,CAAA;AAC1C,MAAA,MAAMsgE,YAAY,GAAGxnE,IAAI,CAACg5B,UAAU,KAAK,MAAM,CAAA;AAC/Ch5B,MAAAA,IAAI,CAACkH,UAAU,CAACxD,IAAI,CAAC,GAAG,IAAI,CAACk9B,qBAAqB,CAAC4mC,YAAY,CAAC,CAAC,CAAA;MAEjExnE,IAAI,CAACuG,MAAM,GAAG,IAAI,CAAA;MAClBvG,IAAI,CAACmH,WAAW,GAAG,IAAI,CAAA;AACvB,MAAA,IAAI,IAAI,CAACV,SAAS,CAAC,kBAAkB,CAAC,EAAE;QACtCzG,IAAI,CAACynE,UAAU,GAAG,EAAE,CAAA;AACtB,OAAA;AAEA,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEAF,2BAA2B,CAEzBvnE,IAAsC,EAC7B;AACT,IAAA,IAAI,IAAI,CAACg/B,4BAA4B,EAAE,EAAE;MACvCh/B,IAAI,CAACkH,UAAU,GAAG,EAAE,CAAA;MACpBlH,IAAI,CAACuG,MAAM,GAAG,IAAI,CAAA;AAClB,MAAA,IAAI,IAAI,CAACE,SAAS,CAAC,kBAAkB,CAAC,EAAE;QACtCzG,IAAI,CAACynE,UAAU,GAAG,EAAE,CAAA;AACtB,OAAA;MACAznE,IAAI,CAACmH,WAAW,GAAG,IAAI,CAACu5B,sBAAsB,CAAC1gC,IAAI,CAAC,CAAA;AACpD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEAqjE,EAAAA,eAAe,GAAY;AACzB,IAAA,IAAI,CAAC,IAAI,CAACv1C,YAAY,CAAW,EAAA,CAAA,EAAE,OAAO,KAAK,CAAA;AAC/C,IAAA,MAAMhY,IAAI,GAAG,IAAI,CAACuP,cAAc,EAAE,CAAA;AAClC,IAAA,OACE,CAACrH,SAAS,CAACpJ,IAAI,CAAC,IAAI,CAAC+I,KAAK,CAAC+C,KAAK,CAAC,IAAI,CAAC3Z,KAAK,CAAClI,GAAG,EAAEiX,IAAI,CAAC,CAAC,IACvD,IAAI,CAACiY,oBAAoB,CAACjY,IAAI,EAAE,UAAU,CAAC,CAAA;AAE/C,GAAA;AAEAopB,EAAAA,4BAA4B,GAA6C;AACvE,IAAA,MAAMH,IAAI,GAAG,IAAI,CAACx6B,SAAS,EAAE,CAAA;AAE7B,IAAA,IAAI,IAAI,CAACie,KAAK,CAAA,EAAA,CAAc,EAAE;MAC5B,IAAI,CAAC1M,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAACmnD,aAAa,CACvBl+B,IAAI,EACJqhC,iBAAiB,CAACwE,WAAW,GAAGxE,iBAAiB,CAAC4F,UAAU,CAC7D,CAAA;AACH,KAAC,MAAM,IAAI,IAAI,CAAC3C,eAAe,EAAE,EAAE;MACjC,IAAI,CAACvtD,IAAI,EAAE,CAAA;MACX,IAAI,CAACA,IAAI,EAAE,CAAA;AACX,MAAA,OAAO,IAAI,CAACmnD,aAAa,CACvBl+B,IAAI,EACJqhC,iBAAiB,CAACwE,WAAW,GAC3BxE,iBAAiB,CAAC4F,UAAU,GAC5B5F,iBAAiB,CAAC0E,KAAK,CAC1B,CAAA;AACH,KAAA;AAEA,IAAA,IAAI,IAAI,CAACtiD,KAAK,CAAA,EAAA,CAAW,EAAE;MACzB,OAAO,IAAI,CAACupC,UAAU,CAAChtB,IAAI,EAA+B,IAAI,EAAE,IAAI,CAAC,CAAA;AACvE,KAAA;AAEA,IAAA,IAAI,IAAI,CAACvc,KAAK,CAAA,EAAA,CAAO,EAAE;AACrB,MAAA,IACE,IAAI,CAAC/b,SAAS,CAAC,YAAY,CAAC,IAC5B,IAAI,CAAC7C,eAAe,CAAC,YAAY,EAAE,wBAAwB,CAAC,EAC5D;AACA,QAAA,IAAI,CAACqC,KAAK,CAACxG,MAAM,CAAC/L,qBAAqB,EAAE;AAAEwS,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AAAS,SAAC,CAAC,CAAA;AACvE,OAAA;MACA,OAAO,IAAI,CAAC2mD,UAAU,CACpB,IAAI,CAACoF,mBAAmB,CACtB,IAAI,CAAC8K,eAAe,CAAC,KAAK,CAAC,EAC3B,IAAI,CAAC13D,SAAS,EAAsB,CACrC,EACD,IAAI,EACJ,IAAI,CACL,CAAA;AACH,KAAA;AAEA,IAAA,IAAI,IAAI,CAACie,KAAK,CAAA,EAAA,CAAW,IAAI,IAAI,CAACA,KAAK,CAAA,EAAA,CAAS,IAAI,IAAI,CAACuW,KAAK,EAAE,EAAE;AAChE,MAAA,MAAM,IAAI,CAAC9yB,KAAK,CAACxG,MAAM,CAAC7D,wBAAwB,EAAE;AAChDsK,QAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,MAAMyc,GAAG,GAAG,IAAI,CAACge,uBAAuB,EAAE,CAAA;IAC1C,IAAI,CAACnR,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO7M,GAAG,CAAA;AACZ,GAAA;;EAGA6e,sBAAsB;AAGpB1gC,EAAAA,IAAsC,EACJ;AAClC,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAW,EAAE;AACzB,MAAA,MAAMxiB,IAAI,GAAG,IAAI,CAAC+rD,UAAU,CAC1B,IAAI,CAACxnD,SAAS,EAAsB,EACpC,IAAI,EACJ,KAAK,CACN,CAAA;AACD,MAAA,OAAOvE,IAAI,CAAA;AACb,KAAA;IACA,OAAO,IAAI,CAACkiE,sBAAsB,EAAE,CAAA;AACtC,GAAA;AAEAjjC,EAAAA,wBAAwB,GAAY;IAClC,MAAM;AAAE7sC,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;AAC3B,IAAA,IAAI8L,iBAAiB,CAACzgB,IAAI,CAAC,EAAE;AAC3B,MAAA,IAAKA,IAAI,KAAA,EAAc,IAAI,CAAC,IAAI,CAAC2U,KAAK,CAAC+Y,WAAW,IAAK1tB,IAAI,KAAA,EAAY,EAAE;AACvE,QAAA,OAAO,KAAK,CAAA;AACd,OAAA;AACA,MAAA,IACE,CAACA,IAAI,KAAa,GAAA,IAAIA,IAAI,KAAA,GAAkB,KAC5C,CAAC,IAAI,CAAC2U,KAAK,CAAC+Y,WAAW,EACvB;QACA,MAAM;AAAE1tB,UAAAA,IAAI,EAAEs1E,QAAAA;AAAS,SAAC,GAAG,IAAI,CAACxiD,SAAS,EAAE,CAAA;QAK3C,IACGrS,iBAAiB,CAAC60D,QAAQ,CAAC,IAAIA,QAAQ,KAAa,EAAA,IACrDA,QAAQ,KAAA,CAAc,EACtB;UACA,IAAI,CAACt9C,eAAe,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;AAC5C,UAAA,OAAO,KAAK,CAAA;AACd,SAAA;AACF,OAAA;AACF,KAAC,MAAM,IAAI,CAAC,IAAI,CAAC5H,KAAK,IAAa,EAAE;AACnC,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AAEA,IAAA,MAAM1M,IAAI,GAAG,IAAI,CAACuP,cAAc,EAAE,CAAA;IAClC,MAAMsiD,OAAO,GAAG,IAAI,CAAC55C,oBAAoB,CAACjY,IAAI,EAAE,MAAM,CAAC,CAAA;IACvD,IACE,IAAI,CAAC6H,KAAK,CAACC,UAAU,CAAC9H,IAAI,CAAC,KAAoB,EAAA,IAC9CjD,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,IAAIu1E,OAAQ,EAC/C;AACA,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AAEA,IAAA,IAAI,IAAI,CAACnlD,KAAK,CAAa,EAAA,CAAA,IAAImlD,OAAO,EAAE;AACtC,MAAA,MAAMC,aAAa,GAAG,IAAI,CAACjqD,KAAK,CAACC,UAAU,CACzC,IAAI,CAAC0H,mBAAmB,CAACxP,IAAI,GAAG,CAAC,CAAC,CACnC,CAAA;AACD,MAAA,OACE8xD,aAAa,KAAA,EAA4B,IACzCA,aAAa,KAAyB,EAAA,CAAA;AAE1C,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA/mC,EAAAA,eAAe,CAEb7gC,IAAsC,EACtC4uB,MAAgB,EACV;AACN,IAAA,IAAI,IAAI,CAACR,aAAa,CAAA,EAAA,CAAU,EAAE;AAChCpuB,MAAAA,IAAI,CAACuG,MAAM,GAAG,IAAI,CAACytD,iBAAiB,EAAE,CAAA;AACtC,MAAA,IAAI,CAACJ,WAAW,CAAC5zD,IAAI,CAAC,CAAA;AACtB,MAAA,MAAMynE,UAAU,GAAG,IAAI,CAACI,0BAA0B,EAAE,CAAA;AACpD,MAAA,IAAIJ,UAAU,EAAE;QACdznE,IAAI,CAACynE,UAAU,GAAGA,UAAU,CAAA;AAC5B,QAAA,IAAI,CAACK,qBAAqB,CAAC9nE,IAAI,CAAC,CAAA;AAClC,OAAA;KACD,MAAM,IAAI4uB,MAAM,EAAE;MACjB,IAAI,CAAC53B,UAAU,EAAE,CAAA;AACnB,KAAA;IAEA,IAAI,CAAC03B,SAAS,EAAE,CAAA;AAClB,GAAA;AAEAsQ,EAAAA,4BAA4B,GAAY;IACtC,MAAM;AAAE5sC,MAAAA,IAAAA;KAAM,GAAG,IAAI,CAAC2U,KAAK,CAAA;IAC3B,IAAI3U,IAAI,OAAU,EAAE;MAClB,IAAI,CAACg4B,eAAe,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAA;AACzD,MAAA,IAAI,IAAI,CAAC3jB,SAAS,CAAC,YAAY,CAAC,EAAE;QAChC,IAAI,IAAI,CAAC7C,eAAe,CAAC,YAAY,EAAE,wBAAwB,CAAC,EAAE;AAChE,UAAA,MAAM,IAAI,CAACqC,KAAK,CAACxG,MAAM,CAAC/L,qBAAqB,EAAE;AAC7CwS,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;AAEA,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;AACF,KAAA;IAEA,OACEhT,IAAI,OAAY,IAChBA,IAAI,OAAc,IAClBA,IAAI,OAAiB,IACrBA,IAAI,OAAc,IAClB,IAAI,CAAC2mC,KAAK,EAAE,IACZ,IAAI,CAACsqC,eAAe,EAAE,CAAA;AAE1B,GAAA;EAEAzP,WAAW,CACT5zD,IAAmE,EACnE+nE,UAAoB,EACpBC,SAAmB,EACnBC,MAAgB,EACV;AACN,IAAA,IAAIF,UAAU,EAAE;AAEd,MAAA,IAAIC,SAAS,EAAE;AAEb,QAAA,IAAI,CAAC5Z,qBAAqB,CAACpuD,IAAI,EAAE,SAAS,CAAC,CAAA;AAC3C,QAAA,IAAI,IAAI,CAACyG,SAAS,CAAC,mBAAmB,CAAC,EAAE;AAAA,UAAA,IAAA,kBAAA,CAAA;AACvC,UAAA,MAAMU,WAAW,GAAInH,IAAI,CACtBmH,WAAW,CAAA;UACd,IACEA,WAAW,CAAC/U,IAAI,KAAK,YAAY,IACjC+U,WAAW,CAACnP,IAAI,KAAK,MAAM,IAC3BmP,WAAW,CAAC5Y,GAAG,GAAG4Y,WAAW,CAAC7Y,KAAK,KAAK,CAAC;AACzC,UAAA,EAAA,CAAA,kBAAA,GAAC6Y,WAAW,CAACtF,KAAK,KAAjB,IAAA,IAAA,kBAAA,CAAmBY,aAAa,CACjC,EAAA;AACA,YAAA,IAAI,CAACwD,KAAK,CAACxG,MAAM,CAAC9K,6BAA6B,EAAE;AAC/CuR,cAAAA,EAAE,EAAEiB,WAAAA;AACN,aAAC,CAAC,CAAA;AACJ,WAAA;AACF,SAAA;OAED,MAAM,IAAInH,IAAI,CAACkH,UAAU,IAAIlH,IAAI,CAACkH,UAAU,CAACjY,MAAM,EAAE;AAGpD,QAAA,KAAK,MAAMm0C,SAAS,IAAIpjC,IAAI,CAACkH,UAAU,EAAE;UACvC,MAAM;AAAED,YAAAA,QAAAA;AAAS,WAAC,GAAGm8B,SAAS,CAAA;AAC9B,UAAA,MAAMhvC,UAAU,GACd6S,QAAQ,CAAC7U,IAAI,KAAK,YAAY,GAAG6U,QAAQ,CAACjP,IAAI,GAAGiP,QAAQ,CAAC1X,KAAK,CAAA;AACjE,UAAA,IAAI,CAAC6+D,qBAAqB,CAAChrB,SAAS,EAAEhvC,UAAU,CAAC,CAAA;AACjD,UAAA,IAAI,CAAC6zE,MAAM,IAAI7kC,SAAS,CAACC,KAAK,EAAE;YAC9B,MAAM;AAAEA,cAAAA,KAAAA;AAAM,aAAC,GAAGD,SAAS,CAAA;AAC3B,YAAA,IAAIC,KAAK,CAACjxC,IAAI,KAAK,YAAY,EAAE;AAC/B,cAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAAChL,qBAAqB,EAAE;AACvCyR,gBAAAA,EAAE,EAAEk9B,SAAS;gBACb1uC,SAAS,EAAE2uC,KAAK,CAAC9zC,KAAK;AACtB6E,gBAAAA,UAAAA;AACF,eAAC,CAAC,CAAA;AACJ,aAAC,MAAM;AAEL,cAAA,IAAI,CAAC6vC,iBAAiB,CAACZ,KAAK,CAACrrC,IAAI,EAAEqrC,KAAK,CAAC7kC,GAAG,CAAClQ,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAEhE,cAAA,IAAI,CAACksB,KAAK,CAACS,gBAAgB,CAACooB,KAAK,CAAC,CAAA;AACpC,aAAA;AACF,WAAA;AACF,SAAA;AACF,OAAC,MAAM,IAAIrjC,IAAI,CAACmH,WAAW,EAAE;AAE3B,QAAA,IACEnH,IAAI,CAACmH,WAAW,CAAC/U,IAAI,KAAK,qBAAqB,IAC/C4N,IAAI,CAACmH,WAAW,CAAC/U,IAAI,KAAK,kBAAkB,EAC5C;AACA,UAAA,MAAM2R,EAAE,GAAG/D,IAAI,CAACmH,WAAW,CAACpD,EAAE,CAAA;UAC9B,IAAI,CAACA,EAAE,EAAE,MAAM,IAAI2yB,KAAK,CAAC,mBAAmB,CAAC,CAAA;UAE7C,IAAI,CAAC03B,qBAAqB,CAACpuD,IAAI,EAAE+D,EAAE,CAAC/L,IAAI,CAAC,CAAA;SAC1C,MAAM,IAAIgI,IAAI,CAACmH,WAAW,CAAC/U,IAAI,KAAK,qBAAqB,EAAE;UAC1D,KAAK,MAAM+U,WAAW,IAAInH,IAAI,CAACmH,WAAW,CAACunD,YAAY,EAAE;AACvD,YAAA,IAAI,CAACvsD,gBAAgB,CAACgF,WAAW,CAACpD,EAAE,CAAC,CAAA;AACvC,WAAA;AACF,SAAA;AACF,OAAA;AACF,KAAA;AACF,GAAA;EAEA5B,gBAAgB,CAACnC,IAAkC,EAAQ;AACzD,IAAA,IAAIA,IAAI,CAAC5N,IAAI,KAAK,YAAY,EAAE;MAC9B,IAAI,CAACg8D,qBAAqB,CAACpuD,IAAI,EAAEA,IAAI,CAAChI,IAAI,CAAC,CAAA;AAC7C,KAAC,MAAM,IAAIgI,IAAI,CAAC5N,IAAI,KAAK,eAAe,EAAE;AACxC,MAAA,KAAK,MAAM2S,IAAI,IAAI/E,IAAI,CAACrQ,UAAU,EAAE;AAClC,QAAA,IAAI,CAACwS,gBAAgB,CAAC4C,IAAI,CAAC,CAAA;AAC7B,OAAA;AACF,KAAC,MAAM,IAAI/E,IAAI,CAAC5N,IAAI,KAAK,cAAc,EAAE;AACvC,MAAA,KAAK,MAAM4rE,IAAI,IAAIh+D,IAAI,CAACyc,QAAQ,EAAE;AAChC,QAAA,IAAIuhD,IAAI,EAAE;AACR,UAAA,IAAI,CAAC77D,gBAAgB,CAAC67D,IAAI,CAAC,CAAA;AAC7B,SAAA;AACF,OAAA;AACF,KAAC,MAAM,IAAIh+D,IAAI,CAAC5N,IAAI,KAAK,gBAAgB,EAAE;AAEzC,MAAA,IAAI,CAAC+P,gBAAgB,CAACnC,IAAI,CAACzQ,KAAK,CAAC,CAAA;AACnC,KAAC,MAAM,IAAIyQ,IAAI,CAAC5N,IAAI,KAAK,aAAa,EAAE;AACtC,MAAA,IAAI,CAAC+P,gBAAgB,CAACnC,IAAI,CAACjB,QAAQ,CAAC,CAAA;AACtC,KAAC,MAAM,IAAIiB,IAAI,CAAC5N,IAAI,KAAK,mBAAmB,EAAE;AAC5C,MAAA,IAAI,CAAC+P,gBAAgB,CAACnC,IAAI,CAAC0hC,IAAI,CAAC,CAAA;AAClC,KAAA;AACF,GAAA;AAEA0sB,EAAAA,qBAAqB,CACnBpuD,IAMC,EACD5L,UAAkB,EACZ;IACN,IAAI,IAAI,CAAC47B,mBAAmB,CAACxa,GAAG,CAACphB,UAAU,CAAC,EAAE;MAC5C,IAAIA,UAAU,KAAK,SAAS,EAAE;AAC5B,QAAA,IAAI,CAAC6R,KAAK,CAACxG,MAAM,CAACvL,sBAAsB,EAAE;AAAEgS,UAAAA,EAAE,EAAElG,IAAAA;AAAK,SAAC,CAAC,CAAA;AACzD,OAAC,MAAM;AACL,QAAA,IAAI,CAACiG,KAAK,CAACxG,MAAM,CAACtL,eAAe,EAAE;AAAE+R,UAAAA,EAAE,EAAElG,IAAI;AAAE5L,UAAAA,UAAAA;AAAW,SAAC,CAAC,CAAA;AAC9D,OAAA;AACF,KAAA;AACA,IAAA,IAAI,CAAC47B,mBAAmB,CAACpV,GAAG,CAACxmB,UAAU,CAAC,CAAA;AAC1C,GAAA;;EAIAwsC,qBAAqB,CAAC6wB,cAAuB,EAA4B;IACvE,MAAMyW,KAAK,GAAG,EAAE,CAAA;IAChB,IAAI5qC,KAAK,GAAG,IAAI,CAAA;;IAGhB,IAAI,CAAC1O,MAAM,CAAW,CAAA,CAAA,CAAA;AAEtB,IAAA,OAAO,CAAC,IAAI,CAAC7J,GAAG,GAAW,EAAE;AAC3B,MAAA,IAAIuY,KAAK,EAAE;AACTA,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;QACL,IAAI,CAAC1O,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB,QAAA,IAAI,IAAI,CAAC7J,GAAG,CAAA,CAAA,CAAW,EAAE,MAAA;AAC3B,OAAA;AACA,MAAA,MAAM4e,eAAe,GAAG,IAAI,CAAC7V,YAAY,CAAU,GAAA,CAAA,CAAA;AACnD,MAAA,MAAM0jC,QAAQ,GAAG,IAAI,CAAChvC,KAAK,CAAW,GAAA,CAAA,CAAA;AACtC,MAAA,MAAMxiB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;AAC7BvE,MAAAA,IAAI,CAACqjC,KAAK,GAAG,IAAI,CAACgvB,qBAAqB,EAAE,CAAA;AACzC6V,MAAAA,KAAK,CAACxkE,IAAI,CACR,IAAI,CAAC6tD,oBAAoB,CACvBvxD,IAAI,EACJwxD,QAAQ,EACRC,cAAc,EACd9tB,eAAe,CAChB,CACF,CAAA;AACH,KAAA;AAEA,IAAA,OAAOukC,KAAK,CAAA;AACd,GAAA;EAEA3W,oBAAoB,CAClBvxD,IAAS,EACTwxD,QAAiB;AAEjBC,EAAAA,cAAuB,EACvB9tB,eAAAA;IAEmB;AACnB,IAAA,IAAI,IAAI,CAACvV,aAAa,CAAA,EAAA,CAAQ,EAAE;AAC9BpuB,MAAAA,IAAI,CAACiH,QAAQ,GAAG,IAAI,CAACorD,qBAAqB,EAAE,CAAA;KAC7C,MAAM,IAAIb,QAAQ,EAAE;MACnBxxD,IAAI,CAACiH,QAAQ,GAAGuqB,kBAAkB,CAACxxB,IAAI,CAACqjC,KAAK,CAAC,CAAA;AAChD,KAAC,MAAM,IAAI,CAACrjC,IAAI,CAACiH,QAAQ,EAAE;MACzBjH,IAAI,CAACiH,QAAQ,GAAGmqB,eAAe,CAACpxB,IAAI,CAACqjC,KAAK,CAAC,CAAA;AAC7C,KAAA;AACA,IAAA,OAAO,IAAI,CAAC5+B,UAAU,CAAoBzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACpE,GAAA;;AAGAqyD,EAAAA,qBAAqB,GAAmC;AACtD,IAAA,IAAI,IAAI,CAAC7vC,KAAK,CAAA,GAAA,CAAW,EAAE;MACzB,MAAM6d,MAAM,GAAG,IAAI,CAACh/B,kBAAkB,CAAC,IAAI,CAAC0F,KAAK,CAACxX,KAAK,CAAC,CAAA;MACxD,MAAM44E,SAAS,GAAG9nC,MAAM,CAAC9wC,KAAK,CAACizB,KAAK,CAAC89C,aAAa,CAAC,CAAA;AACnD,MAAA,IAAI6H,SAAS,EAAE;AACb,QAAA,IAAI,CAACliE,KAAK,CAACxG,MAAM,CAAC/G,gCAAgC,EAAE;AAClDwN,UAAAA,EAAE,EAAEm6B,MAAM;UACV1nC,iBAAiB,EAAEwvE,SAAS,CAAC,CAAC,CAAC,CAACvqD,UAAU,CAAC,CAAC,CAAA;AAC9C,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,OAAOyiB,MAAM,CAAA;AACf,KAAA;AACA,IAAA,OAAO,IAAI,CAAC9I,eAAe,CAAC,IAAI,CAAC,CAAA;AACnC,GAAA;EAEA6wC,kBAAkB,CAChBpoE,IAEC,EACQ;AACT,IAAA,IAAIA,IAAI,CAACynE,UAAU,IAAI,IAAI,EAAE;AAC3B,MAAA,OAAOznE,IAAI,CAACynE,UAAU,CAACn9C,IAAI,CAAC,CAAC;QAAEj7B,GAAG;AAAEE,QAAAA,KAAAA;AAAM,OAAC,KAAK;QAC9C,OACEA,KAAK,CAACA,KAAK,KAAK,MAAM,KACrBF,GAAG,CAAC+C,IAAI,KAAK,YAAY,GACtB/C,GAAG,CAAC2I,IAAI,KAAK,MAAM,GACnB3I,GAAG,CAACE,KAAK,KAAK,MAAM,CAAC,CAAA;AAE7B,OAAC,CAAC,CAAA;AACJ,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEA0zC,qBAAqB,CAACjjC,IAAiC,EAAE;IACvD,IAAIA,IAAI,CAACkjC,MAAM,EAAE;AAAA,MAAA,IAAA,gBAAA,CAAA;AACf,MAAA,IACEljC,IAAI,CAACkH,UAAU,CAACjY,MAAM,KAAK,CAAC,IAC5B+Q,IAAI,CAACkH,UAAU,CAAC,CAAC,CAAC,CAAC9U,IAAI,KAAK,wBAAwB,EACpD;AACA,QAAA,IAAI,CAAC6T,KAAK,CAACxG,MAAM,CAAC5J,0BAA0B,EAAE;UAC5CqQ,EAAE,EAAElG,IAAI,CAACkH,UAAU,CAAC,CAAC,CAAC,CAAC1I,GAAG,CAAClQ,KAAAA;AAC7B,SAAC,CAAC,CAAA;AACJ,OAAA;MACA,IAAI,CAAA,CAAA,gBAAA,GAAA0R,IAAI,CAACynE,UAAU,qBAAf,gBAAiBx4E,CAAAA,MAAM,IAAG,CAAC,EAAE;AAC/B,QAAA,IAAI,CAACgX,KAAK,CAACxG,MAAM,CAAC7J,4BAA4B,EAAE;UAC9CsQ,EAAE,EAAElG,IAAI,CAACkH,UAAU,CAAC,CAAC,CAAC,CAAC1I,GAAG,CAAClQ,KAAAA;AAC7B,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;AACF,GAAA;EAEAw5E,qBAAqB,CACnB9nE,IAEC,EACD;AAEA,IAAA,IAAI,IAAI,CAACooE,kBAAkB,CAACpoE,IAAI,CAAC,IAAIA,IAAI,CAAC5N,IAAI,KAAK,sBAAsB,EAAE;MAEzE,MAAM;AAAE8U,QAAAA,UAAAA;AAAW,OAAC,GAAGlH,IAAI,CAAA;MAC3B,IAAIkH,UAAU,IAAI,IAAI,EAAE;AAEtB,QAAA,MAAMmhE,wBAAwB,GAAGnhE,UAAU,CAAC2tD,IAAI,CAACzxB,SAAS,IAAI;AAC5D,UAAA,IAAIS,QAAQ,CAAA;AACZ,UAAA,IAAIT,SAAS,CAAChxC,IAAI,KAAK,iBAAiB,EAAE;YACxCyxC,QAAQ,GAAGT,SAAS,CAACC,KAAK,CAAA;AAC5B,WAAC,MAAM,IAAID,SAAS,CAAChxC,IAAI,KAAK,iBAAiB,EAAE;YAC/CyxC,QAAQ,GAAGT,SAAS,CAACS,QAAQ,CAAA;AAC/B,WAAA;UACA,IAAIA,QAAQ,KAAK3nB,SAAS,EAAE;AAC1B,YAAA,OAAO2nB,QAAQ,CAACzxC,IAAI,KAAK,YAAY,GACjCyxC,QAAQ,CAAC7rC,IAAI,KAAK,SAAS,GAC3B6rC,QAAQ,CAACt0C,KAAK,KAAK,SAAS,CAAA;AAClC,WAAA;AACF,SAAC,CAAC,CAAA;QACF,IAAI84E,wBAAwB,KAAKnsD,SAAS,EAAE;AAC1C,UAAA,IAAI,CAACjW,KAAK,CAACxG,MAAM,CAAC9J,2BAA2B,EAAE;AAC7CuQ,YAAAA,EAAE,EAAEmiE,wBAAwB,CAAC7pE,GAAG,CAAClQ,KAAAA;AACnC,WAAC,CAAC,CAAA;AACJ,SAAA;AACF,OAAA;AACF,KAAA;AACF,GAAA;EAEAg6E,0BAA0B,CAACtoE,IAAiC,EAAE;IAC5D,IAAIuoE,kBAAkB,GAAG,KAAK,CAAA;AAC9B,IAAA,IAAI,IAAI,CAACz6C,YAAY,CAAA,GAAA,CAAY,EAAE;AACjC,MAAA,MAAM5I,SAAS,GAAG,IAAI,CAACA,SAAS,EAAE,CAAA;AAClC,MAAA,MAAMwiD,QAAQ,GAAGxiD,SAAS,CAAC9yB,IAAI,CAAA;AAC/B,MAAA,IAAIygB,iBAAiB,CAAC60D,QAAQ,CAAC,EAAE;QAC/B,IAAIA,QAAQ,OAAa,EAAE;AAEzBa,UAAAA,kBAAkB,GAAG,IAAI,CAAA;AAC3B,SAAC,MAAM;AACL,UAAA,MAAMC,sBAAsB,GAAG,IAAI,CAAC7qD,KAAK,CAACC,UAAU,CAClD,IAAI,CAAC0H,mBAAmB,CAACJ,SAAS,CAAC32B,GAAG,CAAC,CACxC,CAAA;UACD,IAAIi6E,sBAAsB,QAAyB,EAAE;AAEnDD,YAAAA,kBAAkB,GAAG,IAAI,CAAA;AAC3B,WAAA;AACF,SAAA;AACF,OAAC,MAAM,IAAIb,QAAQ,KAAA,EAAa,EAAE;AAKhCa,QAAAA,kBAAkB,GAAG,IAAI,CAAA;AAC3B,OAAA;AACF,KAAA;AACA,IAAA,IAAIA,kBAAkB,EAAE;AACtB,MAAA,IAAI,CAACxhD,YAAY,CAAC,kBAAkB,CAAC,CAAA;MACrC,IAAI,CAACjR,IAAI,EAAE,CAAA;MACX9V,IAAI,CAACkjC,MAAM,GAAG,IAAI,CAAA;KACnB,MAAM,IAAI,IAAI,CAACz8B,SAAS,CAAC,kBAAkB,CAAC,EAAE;MAC7CzG,IAAI,CAACkjC,MAAM,GAAG,KAAK,CAAA;AACrB,KAAA;AACF,GAAA;;EAKAtK,WAAW,CAAe54B,IAAiC,EAAe;IAExEA,IAAI,CAACkH,UAAU,GAAG,EAAE,CAAA;AACpB,IAAA,IAAI,CAAC,IAAI,CAACsb,KAAK,KAAW,EAAE;AAC1B,MAAA,IAAI,CAAC8lD,0BAA0B,CAACtoE,IAAI,CAAC,CAAA;AAGrC,MAAA,MAAM+mE,UAAU,GAAG,IAAI,CAACxjC,gCAAgC,CAACvjC,IAAI,CAAC,CAAA;MAO9D,MAAMyoE,SAAS,GAAG,CAAC1B,UAAU,IAAI,IAAI,CAAChiD,GAAG,CAAU,EAAA,CAAA,CAAA;MAGnD,MAAMkiD,OAAO,GAAGwB,SAAS,IAAI,IAAI,CAAC3U,6BAA6B,CAAC9zD,IAAI,CAAC,CAAA;MAGrE,IAAIyoE,SAAS,IAAI,CAACxB,OAAO,EAAE,IAAI,CAAClT,0BAA0B,CAAC/zD,IAAI,CAAC,CAAA;MAChE,IAAI,CAACquB,gBAAgB,CAAU,EAAA,CAAA,CAAA;AACjC,KAAA;AACAruB,IAAAA,IAAI,CAACuG,MAAM,GAAG,IAAI,CAACytD,iBAAiB,EAAE,CAAA;AAItC,IAAA,MAAMyT,UAAU,GAAG,IAAI,CAACI,0BAA0B,EAAE,CAAA;AACpD,IAAA,IAAIJ,UAAU,EAAE;MACdznE,IAAI,CAACynE,UAAU,GAAGA,UAAU,CAAA;AAC9B,KAAC,MAAyC;AACxC,MAAA,MAAM/gE,UAAU,GAAG,IAAI,CAACgiE,0BAA0B,EAAE,CAAA;AACpD,MAAA,IAAIhiE,UAAU,EAAE;QAEd1G,IAAI,CAAC0G,UAAU,GAAGA,UAAU,CAAA;AAC9B,OAAA;AACF,KAAA;AACA,IAAA,IAAI,CAACu8B,qBAAqB,CAACjjC,IAAI,CAAC,CAAA;AAChC,IAAA,IAAI,CAAC8nE,qBAAqB,CAAC9nE,IAAI,CAAC,CAAA;IAEhC,IAAI,CAAC0uB,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,IAAI,CAACjqB,UAAU,CAACzE,IAAI,EAAE,mBAAmB,CAAC,CAAA;AACnD,GAAA;AAEAg0D,EAAAA,iBAAiB,GAAgC;IAC/C,IAAI,CAAC,IAAI,CAACxxC,KAAK,KAAW,EAAE,IAAI,CAACxrB,UAAU,EAAE,CAAA;IAC7C,OAAO,IAAI,CAAC0hC,aAAa,EAAE,CAAA;AAC7B,GAAA;;EAGAsK,wBAAwB,CAAChjC,IAAiC,EAAW;AACnE,IAAA,OAAO6S,iBAAiB,CAAC,IAAI,CAAC9L,KAAK,CAAC3U,IAAI,CAAC,CAAA;AAC3C,GAAA;AAEA+wC,EAAAA,yBAAyB,CAMvBnjC,IAAiC,EACjCojC,SAAoB,EACpBhxC,IAAe,EACT;AACNgxC,IAAAA,SAAS,CAACC,KAAK,GAAG,IAAI,CAAC9L,eAAe,EAAE,CAAA;AACxCv3B,IAAAA,IAAI,CAACkH,UAAU,CAACxD,IAAI,CAAC,IAAI,CAAC4/B,qBAAqB,CAACF,SAAS,EAAEhxC,IAAI,CAAC,CAAC,CAAA;AACnE,GAAA;EAEAkxC,qBAAqB,CAKnBF,SAAoB,EAAEhxC,IAAe,EAAEsoB,WAAW,GAAG/C,YAAY,EAAE;AACnE,IAAA,IAAI,CAAC6/C,SAAS,CAACp0B,SAAS,CAACC,KAAK,EAAE;AAE9Bo0B,MAAAA,EAAE,EAAEr0B,SAAS;AACb59B,MAAAA,OAAO,EAAEkV,WAAAA;AACX,KAAC,CAAC,CAAA;AACF,IAAA,OAAO,IAAI,CAACjW,UAAU,CAAC2+B,SAAS,EAAEhxC,IAAI,CAAC,CAAA;AACzC,GAAA;;AAOAu2E,EAAAA,kBAAkB,GAAwB;IACxC,MAAMC,KAAK,GAAG,EAAE,CAAA;AAChB,IAAA,MAAMC,SAAS,GAAG,IAAItrE,GAAG,EAAE,CAAA;IAE3B,GAAG;AACD,MAAA,IAAI,IAAI,CAACilB,KAAK,CAAA,CAAA,CAAW,EAAE;AACzB,QAAA,MAAA;AACF,OAAA;AAEA,MAAA,MAAMxiB,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAqB,CAAA;;AAGhD,MAAA,MAAMo6D,OAAO,GAAG,IAAI,CAAC53D,KAAK,CAACxX,KAAK,CAAA;AAIhC,MAAA,IAAIs5E,SAAS,CAACrzD,GAAG,CAACmpD,OAAO,CAAC,EAAE;AAC1B,QAAA,IAAI,CAAC14D,KAAK,CAACxG,MAAM,CAAChH,iCAAiC,EAAE;AACnDyN,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAQ;AACvB/V,UAAAA,GAAG,EAAEsvE,OAAAA;AACP,SAAC,CAAC,CAAA;AACJ,OAAA;AACAkK,MAAAA,SAAS,CAACjuD,GAAG,CAAC+jD,OAAO,CAAC,CAAA;AACtB,MAAA,IAAI,IAAI,CAACn8C,KAAK,CAAA,GAAA,CAAW,EAAE;QACzBxiB,IAAI,CAAC3Q,GAAG,GAAG,IAAI,CAACgS,kBAAkB,CAACs9D,OAAO,CAAC,CAAA;AAC7C,OAAC,MAAM;QACL3+D,IAAI,CAAC3Q,GAAG,GAAG,IAAI,CAACkoC,eAAe,CAAC,IAAI,CAAC,CAAA;AACvC,OAAA;MACA,IAAI,CAAC3I,MAAM,CAAU,EAAA,CAAA,CAAA;AAErB,MAAA,IAAI,CAAC,IAAI,CAACpM,KAAK,KAAW,EAAE;AAC1B,QAAA,MAAM,IAAI,CAACvc,KAAK,CAACxG,MAAM,CAACjH,2BAA2B,EAAE;AACnD0N,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;AACApF,MAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAAC8R,kBAAkB,CAAC,IAAI,CAAC0F,KAAK,CAACxX,KAAK,CAAC,CAAA;MACtDq5E,KAAK,CAACllE,IAAI,CAAC,IAAI,CAACe,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAA;AACtD,KAAC,QAAQ,IAAI,CAAC+kB,GAAG,CAAU,EAAA,CAAA,EAAA;AAE3B,IAAA,OAAO6jD,KAAK,CAAA;AACd,GAAA;;AAMAF,EAAAA,0BAA0B,GAAG;IAC3B,IAAI,IAAI,CAAClmD,KAAK,CAAU,EAAA,CAAA,IAAI,CAAC,IAAI,CAAC+L,qBAAqB,EAAE,EAAE;AACzD,MAAA,IAAI,CAACxH,YAAY,CAAC,kBAAkB,CAAC,CAAA;MACrC,IAAI,CAACjR,IAAI,EAAE,CAAA;AACb,KAAC,MAAM;MACL,IAAI,IAAI,CAACrP,SAAS,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAA;AACjD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;IACA,MAAMmiE,KAAK,GAAG,EAAE,CAAA;AAChB,IAAA,MAAMliE,UAAU,GAAG,IAAInJ,GAAG,EAAE,CAAA;IAC5B,GAAG;AACD,MAAA,MAAMyC,IAAI,GAAG,IAAI,CAACuE,SAAS,EAAE,CAAA;MAC7BvE,IAAI,CAAC3Q,GAAG,GAAG,IAAI,CAACkoC,eAAe,CAAC,IAAI,CAAC,CAAA;AAErC,MAAA,IAAIv3B,IAAI,CAAC3Q,GAAG,CAAC2I,IAAI,KAAK,MAAM,EAAE;AAC5B,QAAA,IAAI,CAACiO,KAAK,CAACxG,MAAM,CAAClH,gCAAgC,EAAE;UAClD2N,EAAE,EAAElG,IAAI,CAAC3Q,GAAAA;AACX,SAAC,CAAC,CAAA;AACJ,OAAA;MAEA,IAAIqX,UAAU,CAAC8O,GAAG,CAACxV,IAAI,CAAC3Q,GAAG,CAAC2I,IAAI,CAAC,EAAE;AACjC,QAAA,IAAI,CAACiO,KAAK,CAACxG,MAAM,CAAChH,iCAAiC,EAAE;UACnDyN,EAAE,EAAElG,IAAI,CAAC3Q,GAAG;AACZA,UAAAA,GAAG,EAAE2Q,IAAI,CAAC3Q,GAAG,CAAC2I,IAAAA;AAChB,SAAC,CAAC,CAAA;AACJ,OAAA;MACA0O,UAAU,CAACkU,GAAG,CAAC5a,IAAI,CAAC3Q,GAAG,CAAC2I,IAAI,CAAC,CAAA;MAC7B,IAAI,CAAC42B,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB,MAAA,IAAI,CAAC,IAAI,CAACpM,KAAK,KAAW,EAAE;AAC1B,QAAA,MAAM,IAAI,CAACvc,KAAK,CAACxG,MAAM,CAACjH,2BAA2B,EAAE;AACnD0N,UAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,SAAC,CAAC,CAAA;AACJ,OAAA;AACApF,MAAAA,IAAI,CAACzQ,KAAK,GAAG,IAAI,CAAC8R,kBAAkB,CAAC,IAAI,CAAC0F,KAAK,CAACxX,KAAK,CAAC,CAAA;AACtD,MAAA,IAAI,CAACkV,UAAU,CAACzE,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACxC4oE,MAAAA,KAAK,CAACllE,IAAI,CAAC1D,IAAI,CAAC,CAAA;AAClB,KAAC,QAAQ,IAAI,CAAC+kB,GAAG,CAAU,EAAA,CAAA,EAAA;AAE3B,IAAA,OAAO6jD,KAAK,CAAA;AACd,GAAA;AAEAf,EAAAA,0BAA0B,GAAG;IAE3B,IAAI,IAAI,CAAC/5C,YAAY,CAAY,EAAA,CAAA,IAAI,CAAC,IAAI,CAACS,qBAAqB,EAAE,EAAE;AAClE,MAAA,IAAI,CAACxH,YAAY,CAAC,kBAAkB,CAAC,CAAA;MACrC,IAAI,CAACjR,IAAI,EAAE,CAAA;AACb,KAAC,MAAM;MACL,IAAI,IAAI,CAACrP,SAAS,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAA;AACjD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;IAEA,IAAI,CAACse,GAAG,CAAW,CAAA,CAAA,CAAA;AACnB,IAAA,MAAM6jD,KAAK,GAAG,IAAI,CAACD,kBAAkB,EAAE,CAAA;IACvC,IAAI,CAAC5jD,GAAG,CAAW,CAAA,CAAA,CAAA;AAEnB,IAAA,OAAO6jD,KAAK,CAAA;AACd,GAAA;EAEArlC,gCAAgC,CAACvjC,IAAiC,EAAW;AAC3E,IAAA,IAAI,IAAI,CAACgjC,wBAAwB,CAAChjC,IAAI,CAAC,EAAE;MAEvC,IAAI,CAACmjC,yBAAyB,CAC5BnjC,IAAI,EACJ,IAAI,CAACuE,SAAS,EAA4B,EAC1C,wBAAwB,CACzB,CAAA;AACD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEAuvD,6BAA6B,CAAC9zD,IAAiC,EAAW;AACxE,IAAA,IAAI,IAAI,CAACwiB,KAAK,CAAA,EAAA,CAAS,EAAE;AACvB,MAAA,MAAM4gB,SAAS,GAAG,IAAI,CAAC7+B,SAAS,EAA8B,CAAA;MAC9D,IAAI,CAACuR,IAAI,EAAE,CAAA;MACX,IAAI,CAACuY,gBAAgB,CAAQ,EAAA,CAAA,CAAA;MAE7B,IAAI,CAAC8U,yBAAyB,CAC5BnjC,IAAI,EACJojC,SAAS,EACT,0BAA0B,CAC3B,CAAA;AACD,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEA2wB,0BAA0B,CAAC/zD,IAAiC,EAAE;IAC5D,IAAIs9B,KAAK,GAAG,IAAI,CAAA;IAChB,IAAI,CAAC1O,MAAM,CAAW,CAAA,CAAA,CAAA;AACtB,IAAA,OAAO,CAAC,IAAI,CAAC7J,GAAG,GAAW,EAAE;AAC3B,MAAA,IAAIuY,KAAK,EAAE;AACTA,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;AAEL,QAAA,IAAI,IAAI,CAACvY,GAAG,CAAA,EAAA,CAAU,EAAE;AACtB,UAAA,MAAM,IAAI,CAAC9e,KAAK,CAACxG,MAAM,CAACzL,sBAAsB,EAAE;AAC9CkS,YAAAA,EAAE,EAAE,IAAI,CAACa,KAAK,CAAC3B,QAAAA;AACjB,WAAC,CAAC,CAAA;AACJ,SAAA;QAEA,IAAI,CAACwpB,MAAM,CAAU,EAAA,CAAA,CAAA;AACrB,QAAA,IAAI,IAAI,CAAC7J,GAAG,CAAA,CAAA,CAAW,EAAE,MAAA;AAC3B,OAAA;AAEA,MAAA,MAAMqe,SAAS,GAAG,IAAI,CAAC7+B,SAAS,EAAqB,CAAA;AACrD,MAAA,MAAMk/B,gBAAgB,GAAG,IAAI,CAACjhB,KAAK,CAAW,GAAA,CAAA,CAAA;AAC9C,MAAA,MAAMmhB,eAAe,GAAG,IAAI,CAAC7V,YAAY,CAAU,GAAA,CAAA,CAAA;AACnDsV,MAAAA,SAAS,CAACS,QAAQ,GAAG,IAAI,CAACwuB,qBAAqB,EAAE,CAAA;MACjD,MAAMyW,eAAe,GAAG,IAAI,CAACtlC,oBAAoB,CAC/CJ,SAAS,EACTK,gBAAgB,EAChBzjC,IAAI,CAACy1B,UAAU,KAAK,MAAM,IAAIz1B,IAAI,CAACy1B,UAAU,KAAK,QAAQ,EAC1DkO,eAAe,EACfznB,SAAS,CACV,CAAA;AACDlc,MAAAA,IAAI,CAACkH,UAAU,CAACxD,IAAI,CAAColE,eAAe,CAAC,CAAA;AACvC,KAAA;AACF,GAAA;;EAGAtlC,oBAAoB,CAClBJ,SAAoC,EACpCK,gBAAyB;EAEzBC,kBAA2B,EAC3BC,eAAwB,EACxBjpB,WAAAA;IAEmB;AACnB,IAAA,IAAI,IAAI,CAAC0T,aAAa,CAAA,EAAA,CAAQ,EAAE;AAC9BgV,MAAAA,SAAS,CAACC,KAAK,GAAG,IAAI,CAAC9L,eAAe,EAAE,CAAA;AAC1C,KAAC,MAAM;MACL,MAAM;AAAEsM,QAAAA,QAAAA;AAAS,OAAC,GAAGT,SAAS,CAAA;AAC9B,MAAA,IAAIK,gBAAgB,EAAE;AACpB,QAAA,MAAM,IAAI,CAACx9B,KAAK,CAACxG,MAAM,CAACrK,qBAAqB,EAAE;AAC7C8Q,UAAAA,EAAE,EAAEk9B,SAAS;UACb/tC,UAAU,EAAGwuC,QAAQ,CAAqBt0C,KAAAA;AAC5C,SAAC,CAAC,CAAA;AACJ,OAAA;AACA,MAAA,IAAI,CAAC00C,iBAAiB,CACnBJ,QAAQ,CAAkB7rC,IAAI,EAC/BorC,SAAS,CAAC5kC,GAAG,CAAClQ,KAAK,EACnB,IAAI,EACJ,IAAI,CACL,CAAA;AACD,MAAA,IAAI,CAAC80C,SAAS,CAACC,KAAK,EAAE;AACpBD,QAAAA,SAAS,CAACC,KAAK,GAAGjS,eAAe,CAACyS,QAAQ,CAAC,CAAA;AAC7C,OAAA;AACF,KAAA;IACA,OAAO,IAAI,CAACP,qBAAqB,CAC/BF,SAAS,EACT,iBAAiB,EACjB1oB,WAAW,CACZ,CAAA;AACH,GAAA;;EAIA4nB,WAAW,CACTlE,KAAuD,EAC9C;IACT,OAAOA,KAAK,CAAChsC,IAAI,KAAK,YAAY,IAAIgsC,KAAK,CAACpmC,IAAI,KAAK,MAAM,CAAA;AAC7D,GAAA;AACF;;AChmGe,MAAM+wE,MAAM,SAAS7H,eAAe,CAAC;;AAOlDlzE,EAAAA,WAAW,CAACqS,OAAmC,EAAEsd,KAAa,EAAE;AAC9Dtd,IAAAA,OAAO,GAAGo2D,UAAU,CAACp2D,OAAO,CAAC,CAAA;AAC7B,IAAA,KAAK,CAACA,OAAO,EAAEsd,KAAK,CAAC,CAAA;IAErB,IAAI,CAACtd,OAAO,GAAGA,OAAO,CAAA;IACtB,IAAI,CAACwvB,gBAAgB,EAAE,CAAA;IACvB,IAAI,CAACnU,OAAO,GAAGstD,UAAU,CAAC,IAAI,CAAC3oE,OAAO,CAACqb,OAAO,CAAC,CAAA;AAC/C,IAAA,IAAI,CAACltB,QAAQ,GAAG6R,OAAO,CAAC61D,cAAc,CAAA;AACxC,GAAA;;AAGA/lC,EAAAA,eAAe,GAEb;AACA,IAAA,OAAO9W,YAAY,CAAA;AACrB,GAAA;AAEAlZ,EAAAA,KAAK,GAAW;IACd,IAAI,CAACqwB,kBAAkB,EAAE,CAAA;AACzB,IAAA,MAAMpwB,IAAI,GAAG,IAAI,CAACmE,SAAS,EAAY,CAAA;AACvC,IAAA,MAAM2hC,OAAO,GAAG,IAAI,CAAC3hC,SAAS,EAAe,CAAA;IAC7C,IAAI,CAACugB,SAAS,EAAE,CAAA;IAChB1kB,IAAI,CAACse,MAAM,GAAG,IAAI,CAAA;AAClB,IAAA,IAAI,CAACunB,aAAa,CAAC7lC,IAAI,EAAE8lC,OAAO,CAAC,CAAA;AACjC9lC,IAAAA,IAAI,CAACse,MAAM,GAAG,IAAI,CAAC3X,KAAK,CAAC2X,MAAM,CAAA;AAC/B,IAAA,OAAOte,IAAI,CAAA;AACb,GAAA;AACF,CAAA;AAEA,SAAS4oE,UAAU,CAACttD,OAAmB,EAAc;AACnD,EAAA,MAAMutD,SAAqB,GAAG,IAAI1/D,GAAG,EAAE,CAAA;AACvC,EAAA,KAAK,MAAMuS,MAAM,IAAIJ,OAAO,EAAE;IAC5B,MAAM,CAAC1jB,IAAI,EAAEqI,OAAO,CAAC,GAAGpB,KAAK,CAACC,OAAO,CAAC4c,MAAM,CAAC,GAAGA,MAAM,GAAG,CAACA,MAAM,EAAE,EAAE,CAAC,CAAA;AACrE,IAAA,IAAI,CAACmtD,SAAS,CAACzzD,GAAG,CAACxd,IAAI,CAAC,EAAEixE,SAAS,CAAC35E,GAAG,CAAC0I,IAAI,EAAEqI,OAAO,IAAI,EAAE,CAAC,CAAA;AAC9D,GAAA;AACA,EAAA,OAAO4oE,SAAS,CAAA;AAClB;;AC/BO,SAAS9oE,KAAK,CAACwd,KAAa,EAAEtd,OAAiB,EAAQ;AAAA,EAAA,IAAA,QAAA,CAAA;AAC5D,EAAA,IAAI,aAAAA,OAAO,KAAA,IAAA,GAAA,KAAA,CAAA,GAAP,SAAS+f,UAAU,MAAK,aAAa,EAAE;IACzC/f,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACFA,OAAO,CACX,CAAA;IACD,IAAI;MACFA,OAAO,CAAC+f,UAAU,GAAG,QAAQ,CAAA;AAC7B,MAAA,MAAM9G,MAAM,GAAG4vD,SAAS,CAAC7oE,OAAO,EAAEsd,KAAK,CAAC,CAAA;AACxC,MAAA,MAAMwrD,GAAG,GAAG7vD,MAAM,CAACnZ,KAAK,EAAE,CAAA;MAE1B,IAAImZ,MAAM,CAACiC,iBAAiB,EAAE;AAC5B,QAAA,OAAO4tD,GAAG,CAAA;AACZ,OAAA;MAEA,IAAI7vD,MAAM,CAACkC,2BAA2B,EAAE;QAMtC,IAAI;UACFnb,OAAO,CAAC+f,UAAU,GAAG,QAAQ,CAAA;UAC7B,OAAO8oD,SAAS,CAAC7oE,OAAO,EAAEsd,KAAK,CAAC,CAACxd,KAAK,EAAE,CAAA;SACzC,CAAC,gBAAM,EAAC;AACX,OAAC,MAAM;AAGLgpE,QAAAA,GAAG,CAACjjC,OAAO,CAAC9lB,UAAU,GAAG,QAAQ,CAAA;AACnC,OAAA;AAEA,MAAA,OAAO+oD,GAAG,CAAA;KACX,CAAC,OAAOC,WAAW,EAAE;MACpB,IAAI;QACF/oE,OAAO,CAAC+f,UAAU,GAAG,QAAQ,CAAA;QAC7B,OAAO8oD,SAAS,CAAC7oE,OAAO,EAAEsd,KAAK,CAAC,CAACxd,KAAK,EAAE,CAAA;OACzC,CAAC,iBAAM,EAAC;AAET,MAAA,MAAMipE,WAAW,CAAA;AACnB,KAAA;AACF,GAAC,MAAM;IACL,OAAOF,SAAS,CAAC7oE,OAAO,EAAEsd,KAAK,CAAC,CAACxd,KAAK,EAAE,CAAA;AAC1C,GAAA;AACF,CAAA;AAEO,SAAS82B,eAAe,CAACtZ,KAAa,EAAEtd,OAAiB,EAAc;AAC5E,EAAA,MAAMiZ,MAAM,GAAG4vD,SAAS,CAAC7oE,OAAO,EAAEsd,KAAK,CAAC,CAAA;AACxC,EAAA,IAAIrE,MAAM,CAACjZ,OAAO,CAAC8f,UAAU,EAAE;AAC7B7G,IAAAA,MAAM,CAACvS,KAAK,CAACiO,MAAM,GAAG,IAAI,CAAA;AAC5B,GAAA;EACA,OAAOsE,MAAM,CAACg4C,aAAa,EAAE,CAAA;AAC/B,CAAA;AAEA,SAAS+X,0BAA0B,CACjCC,kBAAsC,EACH;EACnC,MAAM1/D,UAA6C,GAAG,EAAE,CAAA;EACxD,KAAK,MAAMo5C,QAAQ,IAAInzD,MAAM,CAACd,IAAI,CAChCu6E,kBAAkB,CACnB,EAAkC;IACjC1/D,UAAU,CAACo5C,QAAQ,CAAC,GAAGhvC,gBAAgB,CAACs1D,kBAAkB,CAACtmB,QAAQ,CAAC,CAAC,CAAA;AACvE,GAAA;AACA,EAAA,OAAOp5C,UAAU,CAAA;AACnB,CAAA;MAEa2/D,QAAQ,GAAGF,0BAA0B,CAACC,EAAkB,EAAC;AAEtE,SAASJ,SAAS,CAAC7oE,OAAmC,EAAEsd,KAAa,EAAU;EAC7E,IAAI6wC,GAAG,GAAGua,MAAM,CAAA;AAChB,EAAA,IAAI1oE,OAAO,IAAA,IAAA,IAAPA,OAAO,CAAEqb,OAAO,EAAE;AACpBu5C,IAAAA,eAAe,CAAC50D,OAAO,CAACqb,OAAO,CAAC,CAAA;AAChC8yC,IAAAA,GAAG,GAAGgb,cAAc,CAACnpE,OAAO,CAACqb,OAAO,CAAC,CAAA;AACvC,GAAA;AAEA,EAAA,OAAO,IAAI8yC,GAAG,CAACnuD,OAAO,EAAEsd,KAAK,CAAC,CAAA;AAChC,CAAA;AAEA,MAAM8rD,gBAAmE,GAAG,EAAE,CAAA;;AAG9E,SAASD,cAAc,CAACE,kBAA8B,EAEpD;AACA,EAAA,MAAMC,UAAU,GAAG3T,gBAAgB,CAACjmE,MAAM,CAACiI,IAAI,IAC7CyO,SAAS,CAACijE,kBAAkB,EAAE1xE,IAAI,CAAC,CACpC,CAAA;AAED,EAAA,MAAM3I,GAAG,GAAGs6E,UAAU,CAACxxE,IAAI,CAAC,GAAG,CAAC,CAAA;AAChC,EAAA,IAAIq2D,GAAG,GAAGib,gBAAgB,CAACp6E,GAAG,CAAC,CAAA;EAC/B,IAAI,CAACm/D,GAAG,EAAE;AACRA,IAAAA,GAAG,GAAGua,MAAM,CAAA;AACZ,IAAA,KAAK,MAAMjtD,MAAM,IAAI6tD,UAAU,EAAE;AAE/Bnb,MAAAA,GAAG,GAAGkH,YAAY,CAAC55C,MAAM,CAAC,CAAC0yC,GAAG,CAAC,CAAA;AACjC,KAAA;AACAib,IAAAA,gBAAgB,CAACp6E,GAAG,CAAC,GAAGm/D,GAAG,CAAA;AAC7B,GAAA;AACA,EAAA,OAAOA,GAAG,CAAA;AACZ;;;;;;"}Copyright (C) 2012-2014 by various contributors (see AUTHORS)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "@babel/parser",
  "version": "7.20.7",
  "description": "A JavaScript parser",
  "author": "The Babel Team (https://babel.dev/team)",
  "homepage": "https://babel.dev/docs/en/next/babel-parser",
  "license": "MIT",
  "publishConfig": {
    "access": "public"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/babel/babel.git",
    "directory": "packages/babel-parser"
  },
  "main": "./lib/index.js",
  "types": "./typings/babel-parser.d.ts",
  "files": [
    "bin",
    "lib",
    "typings/babel-parser.d.ts",
    "index.cjs"
  ],
  "engines": {
    "node": ">=6.0.0"
  },
  "devDependencies": {
    "@babel/code-frame": "^7.18.6",
    "@babel/helper-check-duplicate-nodes": "^7.18.6",
    "@babel/helper-fixtures": "^7.19.4",
    "@babel/helper-string-parser": "^7.19.4",
    "@babel/helper-validator-identifier": "^7.19.1",
    "charcodes": "^0.2.0"
  },
  "bin": "./bin/babel-parser.js",
  "type": "commonjs"
}let random = async bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customAlphabet = (alphabet, defaultSize = 21) => {
  let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
  let step = -~((1.6 * mask * defaultSize) / alphabet.length)
  return async (size = defaultSize) => {
    let id = ''
    while (true) {
      let bytes = crypto.getRandomValues(new Uint8Array(step))
      let i = step
      while (i--) {
        id += alphabet[bytes[i] & mask] || ''
        if (id.length === size) return id
      }
    }
  }
}
let nanoid = async (size = 21) => {
  let id = ''
  let bytes = crypto.getRandomValues(new Uint8Array(size))
  while (size--) {
    let byte = bytes[size] & 63
    if (byte < 36) {
      id += byte.toString(36)
    } else if (byte < 62) {
      id += (byte - 26).toString(36).toUpperCase()
    } else if (byte < 63) {
      id += '_'
    } else {
      id += '-'
    }
  }
  return id
}
module.exports = { nanoid, customAlphabet, random }
let random = async bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customAlphabet = (alphabet, defaultSize = 21) => {
  let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
  let step = -~((1.6 * mask * defaultSize) / alphabet.length)
  return async (size = defaultSize) => {
    let id = ''
    while (true) {
      let bytes = crypto.getRandomValues(new Uint8Array(step))
      let i = step
      while (i--) {
        id += alphabet[bytes[i] & mask] || ''
        if (id.length === size) return id
      }
    }
  }
}
let nanoid = async (size = 21) => {
  let id = ''
  let bytes = crypto.getRandomValues(new Uint8Array(size))
  while (size--) {
    let byte = bytes[size] & 63
    if (byte < 36) {
      id += byte.toString(36)
    } else if (byte < 62) {
      id += (byte - 26).toString(36).toUpperCase()
    } else if (byte < 63) {
      id += '_'
    } else {
      id += '-'
    }
  }
  return id
}
export { nanoid, customAlphabet, random }
let crypto = require('crypto')
let { urlAlphabet } = require('../url-alphabet/index.cjs')
let random = bytes =>
  new Promise((resolve, reject) => {
    crypto.randomFill(Buffer.allocUnsafe(bytes), (err, buf) => {
      if (err) {
        reject(err)
      } else {
        resolve(buf)
      }
    })
  })
let customAlphabet = (alphabet, defaultSize = 21) => {
  let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1
  let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)
  let tick = (id, size = defaultSize) =>
    random(step).then(bytes => {
      let i = step
      while (i--) {
        id += alphabet[bytes[i] & mask] || ''
        if (id.length === size) return id
      }
      return tick(id, size)
    })
  return size => tick('', size)
}
let nanoid = (size = 21) =>
  random(size).then(bytes => {
    let id = ''
    while (size--) {
      id += urlAlphabet[bytes[size] & 63]
    }
    return id
  })
module.exports = { nanoid, customAlphabet, random }
import crypto from 'crypto'
import { urlAlphabet } from '../url-alphabet/index.js'
let random = bytes =>
  new Promise((resolve, reject) => {
    crypto.randomFill(Buffer.allocUnsafe(bytes), (err, buf) => {
      if (err) {
        reject(err)
      } else {
        resolve(buf)
      }
    })
  })
let customAlphabet = (alphabet, defaultSize = 21) => {
  let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1
  let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)
  let tick = (id, size = defaultSize) =>
    random(step).then(bytes => {
      let i = step
      while (i--) {
        id += alphabet[bytes[i] & mask] || ''
        if (id.length === size) return id
      }
      return tick(id, size)
    })
  return size => tick('', size)
}
let nanoid = (size = 21) =>
  random(size).then(bytes => {
    let id = ''
    while (size--) {
      id += urlAlphabet[bytes[size] & 63]
    }
    return id
  })
export { nanoid, customAlphabet, random }
import { getRandomBytesAsync } from 'expo-random'
import { urlAlphabet } from '../url-alphabet/index.js'
let random = getRandomBytesAsync
let customAlphabet = (alphabet, defaultSize = 21) => {
  let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1
  let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)
  let tick = (id, size = defaultSize) =>
    random(step).then(bytes => {
      let i = step
      while (i--) {
        id += alphabet[bytes[i] & mask] || ''
        if (id.length === size) return id
      }
      return tick(id, size)
    })
  return size => tick('', size)
}
let nanoid = (size = 21) =>
  random(size).then(bytes => {
    let id = ''
    while (size--) {
      id += urlAlphabet[bytes[size] & 63]
    }
    return id
  })
export { nanoid, customAlphabet, random }
{
  "type": "module",
  "main": "index.cjs",
  "module": "index.js",
  "react-native": {
    "./index.js": "./index.native.js"
  },
  "browser": {
    "./index.js": "./index.browser.js",
    "./index.cjs": "./index.browser.cjs"
  }
}#!/usr/bin/env node

let { nanoid, customAlphabet } = require('..')

function print(msg) {
  process.stdout.write(msg + '\n')
}

function error(msg) {
  process.stderr.write(msg + '\n')
  process.exit(1)
}

if (process.argv.includes('--help') || process.argv.includes('-h')) {
  print(`
  Usage
    $ nanoid [options]

  Options
    -s, --size       Generated ID size
    -a, --alphabet   Alphabet to use
    -h, --help       Show this help

  Examples
    $ nanoid --s 15
    S9sBF77U6sDB8Yg

    $ nanoid --size 10 --alphabet abc
    bcabababca`)
  process.exit()
}

let alphabet, size
for (let i = 2; i < process.argv.length; i++) {
  let arg = process.argv[i]
  if (arg === '--size' || arg === '-s') {
    size = Number(process.argv[i + 1])
    i += 1
    if (Number.isNaN(size) || size <= 0) {
      error('Size must be positive integer')
    }
  } else if (arg === '--alphabet' || arg === '-a') {
    alphabet = process.argv[i + 1]
    i += 1
  } else {
    error('Unknown argument ' + arg)
  }
}

if (alphabet) {
  let customNanoid = customAlphabet(alphabet, size)
  print(customNanoid())
} else {
  print(nanoid(size))
}
let { urlAlphabet } = require('./url-alphabet/index.cjs')
let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customRandom = (alphabet, defaultSize, getRandom) => {
  let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
  let step = -~((1.6 * mask * defaultSize) / alphabet.length)
  return (size = defaultSize) => {
    let id = ''
    while (true) {
      let bytes = getRandom(step)
      let j = step
      while (j--) {
        id += alphabet[bytes[j] & mask] || ''
        if (id.length === size) return id
      }
    }
  }
}
let customAlphabet = (alphabet, size = 21) =>
  customRandom(alphabet, size, random)
let nanoid = (size = 21) =>
  crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {
    byte &= 63
    if (byte < 36) {
      id += byte.toString(36)
    } else if (byte < 62) {
      id += (byte - 26).toString(36).toUpperCase()
    } else if (byte > 62) {
      id += '-'
    } else {
      id += '_'
    }
    return id
  }, '')
module.exports = { nanoid, customAlphabet, customRandom, urlAlphabet, random }
import { urlAlphabet } from './url-alphabet/index.js'
let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customRandom = (alphabet, defaultSize, getRandom) => {
  let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
  let step = -~((1.6 * mask * defaultSize) / alphabet.length)
  return (size = defaultSize) => {
    let id = ''
    while (true) {
      let bytes = getRandom(step)
      let j = step
      while (j--) {
        id += alphabet[bytes[j] & mask] || ''
        if (id.length === size) return id
      }
    }
  }
}
let customAlphabet = (alphabet, size = 21) =>
  customRandom(alphabet, size, random)
let nanoid = (size = 21) =>
  crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {
    byte &= 63
    if (byte < 36) {
      id += byte.toString(36)
    } else if (byte < 62) {
      id += (byte - 26).toString(36).toUpperCase()
    } else if (byte > 62) {
      id += '-'
    } else {
      id += '_'
    }
    return id
  }, '')
export { nanoid, customAlphabet, customRandom, urlAlphabet, random }
let crypto = require('crypto')
let { urlAlphabet } = require('./url-alphabet/index.cjs')
const POOL_SIZE_MULTIPLIER = 128
let pool, poolOffset
let fillPool = bytes => {
  if (!pool || pool.length < bytes) {
    pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)
    crypto.randomFillSync(pool)
    poolOffset = 0
  } else if (poolOffset + bytes > pool.length) {
    crypto.randomFillSync(pool)
    poolOffset = 0
  }
  poolOffset += bytes
}
let random = bytes => {
  fillPool((bytes -= 0))
  return pool.subarray(poolOffset - bytes, poolOffset)
}
let customRandom = (alphabet, defaultSize, getRandom) => {
  let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1
  let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)
  return (size = defaultSize) => {
    let id = ''
    while (true) {
      let bytes = getRandom(step)
      let i = step
      while (i--) {
        id += alphabet[bytes[i] & mask] || ''
        if (id.length === size) return id
      }
    }
  }
}
let customAlphabet = (alphabet, size = 21) =>
  customRandom(alphabet, size, random)
let nanoid = (size = 21) => {
  fillPool((size -= 0))
  let id = ''
  for (let i = poolOffset - size; i < poolOffset; i++) {
    id += urlAlphabet[pool[i] & 63]
  }
  return id
}
module.exports = { nanoid, customAlphabet, customRandom, urlAlphabet, random }
import crypto from 'crypto'
import { urlAlphabet } from './url-alphabet/index.js'
const POOL_SIZE_MULTIPLIER = 128
let pool, poolOffset
let fillPool = bytes => {
  if (!pool || pool.length < bytes) {
    pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)
    crypto.randomFillSync(pool)
    poolOffset = 0
  } else if (poolOffset + bytes > pool.length) {
    crypto.randomFillSync(pool)
    poolOffset = 0
  }
  poolOffset += bytes
}
let random = bytes => {
  fillPool((bytes -= 0))
  return pool.subarray(poolOffset - bytes, poolOffset)
}
let customRandom = (alphabet, defaultSize, getRandom) => {
  let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1
  let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)
  return (size = defaultSize) => {
    let id = ''
    while (true) {
      let bytes = getRandom(step)
      let i = step
      while (i--) {
        id += alphabet[bytes[i] & mask] || ''
        if (id.length === size) return id
      }
    }
  }
}
let customAlphabet = (alphabet, size = 21) =>
  customRandom(alphabet, size, random)
let nanoid = (size = 21) => {
  fillPool((size -= 0))
  let id = ''
  for (let i = poolOffset - size; i < poolOffset; i++) {
    id += urlAlphabet[pool[i] & 63]
  }
  return id
}
export { nanoid, customAlphabet, customRandom, urlAlphabet, random }
The MIT License (MIT)

Copyright 2017 Andrey Sitnik <andrey@sitnik.ru>

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
export let nanoid=(t=21)=>crypto.getRandomValues(new Uint8Array(t)).reduce(((t,e)=>t+=(e&=63)<36?e.toString(36):e<62?(e-26).toString(36).toUpperCase():e<63?"_":"-"),"");let urlAlphabet =
  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
let customAlphabet = (alphabet, defaultSize = 21) => {
  return (size = defaultSize) => {
    let id = ''
    let i = size
    while (i--) {
      id += alphabet[(Math.random() * alphabet.length) | 0]
    }
    return id
  }
}
let nanoid = (size = 21) => {
  let id = ''
  let i = size
  while (i--) {
    id += urlAlphabet[(Math.random() * 64) | 0]
  }
  return id
}
module.exports = { nanoid, customAlphabet }
let urlAlphabet =
  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
let customAlphabet = (alphabet, defaultSize = 21) => {
  return (size = defaultSize) => {
    let id = ''
    let i = size
    while (i--) {
      id += alphabet[(Math.random() * alphabet.length) | 0]
    }
    return id
  }
}
let nanoid = (size = 21) => {
  let id = ''
  let i = size
  while (i--) {
    id += urlAlphabet[(Math.random() * 64) | 0]
  }
  return id
}
export { nanoid, customAlphabet }
{
  "type": "module",
  "main": "index.cjs",
  "module": "index.js",
  "react-native": "index.js"
}{
  "name": "nanoid",
  "version": "3.3.4",
  "description": "A tiny (116 bytes), secure URL-friendly unique string ID generator",
  "engines": {
    "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
  },
  "author": "Andrey Sitnik <andrey@sitnik.ru>",
  "license": "MIT",
  "repository": "ai/nanoid",
  "browser": {
    "./index.js": "./index.browser.js",
    "./async/index.js": "./async/index.browser.js",
    "./async/index.cjs": "./async/index.browser.cjs",
    "./index.cjs": "./index.browser.cjs"
  },
  "react-native": "index.js",
  "bin": "./bin/nanoid.cjs",
  "sideEffects": false,
  "types": "./index.d.ts",
  "type": "module",
  "main": "index.cjs",
  "module": "index.js",
  "exports": {
    ".": {
      "types": "./index.d.ts",
      "browser": "./index.browser.js",
      "require": "./index.cjs",
      "import": "./index.js",
      "default": "./index.js"
    },
    "./index.d.ts": "./index.d.ts",
    "./package.json": "./package.json",
    "./async/package.json": "./async/package.json",
    "./async": {
      "browser": "./async/index.browser.js",
      "require": "./async/index.cjs",
      "import": "./async/index.js",
      "default": "./async/index.js"
    },
    "./non-secure/package.json": "./non-secure/package.json",
    "./non-secure": {
      "require": "./non-secure/index.cjs",
      "import": "./non-secure/index.js",
      "default": "./non-secure/index.js"
    },
    "./url-alphabet/package.json": "./url-alphabet/package.json",
    "./url-alphabet": {
      "require": "./url-alphabet/index.cjs",
      "import": "./url-alphabet/index.js",
      "default": "./url-alphabet/index.js"
    }
  }
}let urlAlphabet =
  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
module.exports = { urlAlphabet }
let urlAlphabet =
  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
export { urlAlphabet }
{
  "type": "module",
  "main": "index.cjs",
  "module": "index.js",
  "react-native": "index.js"
}'use strict'

let Container = require('./container')

class AtRule extends Container {
  constructor(defaults) {
    super(defaults)
    this.type = 'atrule'
  }

  append(...children) {
    if (!this.proxyOf.nodes) this.nodes = []
    return super.append(...children)
  }

  prepend(...children) {
    if (!this.proxyOf.nodes) this.nodes = []
    return super.prepend(...children)
  }
}

module.exports = AtRule
AtRule.default = AtRule

Container.registerAtRule(AtRule)
'use strict'

let Node = require('./node')

class Comment extends Node {
  constructor(defaults) {
    super(defaults)
    this.type = 'comment'
  }
}

module.exports = Comment
Comment.default = Comment
'use strict'

let { isClean, my } = require('./symbols')
let Declaration = require('./declaration')
let Comment = require('./comment')
let Node = require('./node')

let parse, Rule, AtRule, Root

function cleanSource(nodes) {
  return nodes.map(i => {
    if (i.nodes) i.nodes = cleanSource(i.nodes)
    delete i.source
    return i
  })
}

function markDirtyUp(node) {
  node[isClean] = false
  if (node.proxyOf.nodes) {
    for (let i of node.proxyOf.nodes) {
      markDirtyUp(i)
    }
  }
}

class Container extends Node {
  push(child) {
    child.parent = this
    this.proxyOf.nodes.push(child)
    return this
  }

  each(callback) {
    if (!this.proxyOf.nodes) return undefined
    let iterator = this.getIterator()

    let index, result
    while (this.indexes[iterator] < this.proxyOf.nodes.length) {
      index = this.indexes[iterator]
      result = callback(this.proxyOf.nodes[index], index)
      if (result === false) break

      this.indexes[iterator] += 1
    }

    delete this.indexes[iterator]
    return result
  }

  walk(callback) {
    return this.each((child, i) => {
      let result
      try {
        result = callback(child, i)
      } catch (e) {
        throw child.addToError(e)
      }
      if (result !== false && child.walk) {
        result = child.walk(callback)
      }

      return result
    })
  }

  walkDecls(prop, callback) {
    if (!callback) {
      callback = prop
      return this.walk((child, i) => {
        if (child.type === 'decl') {
          return callback(child, i)
        }
      })
    }
    if (prop instanceof RegExp) {
      return this.walk((child, i) => {
        if (child.type === 'decl' && prop.test(child.prop)) {
          return callback(child, i)
        }
      })
    }
    return this.walk((child, i) => {
      if (child.type === 'decl' && child.prop === prop) {
        return callback(child, i)
      }
    })
  }

  walkRules(selector, callback) {
    if (!callback) {
      callback = selector

      return this.walk((child, i) => {
        if (child.type === 'rule') {
          return callback(child, i)
        }
      })
    }
    if (selector instanceof RegExp) {
      return this.walk((child, i) => {
        if (child.type === 'rule' && selector.test(child.selector)) {
          return callback(child, i)
        }
      })
    }
    return this.walk((child, i) => {
      if (child.type === 'rule' && child.selector === selector) {
        return callback(child, i)
      }
    })
  }

  walkAtRules(name, callback) {
    if (!callback) {
      callback = name
      return this.walk((child, i) => {
        if (child.type === 'atrule') {
          return callback(child, i)
        }
      })
    }
    if (name instanceof RegExp) {
      return this.walk((child, i) => {
        if (child.type === 'atrule' && name.test(child.name)) {
          return callback(child, i)
        }
      })
    }
    return this.walk((child, i) => {
      if (child.type === 'atrule' && child.name === name) {
        return callback(child, i)
      }
    })
  }

  walkComments(callback) {
    return this.walk((child, i) => {
      if (child.type === 'comment') {
        return callback(child, i)
      }
    })
  }

  append(...children) {
    for (let child of children) {
      let nodes = this.normalize(child, this.last)
      for (let node of nodes) this.proxyOf.nodes.push(node)
    }

    this.markDirty()

    return this
  }

  prepend(...children) {
    children = children.reverse()
    for (let child of children) {
      let nodes = this.normalize(child, this.first, 'prepend').reverse()
      for (let node of nodes) this.proxyOf.nodes.unshift(node)
      for (let id in this.indexes) {
        this.indexes[id] = this.indexes[id] + nodes.length
      }
    }

    this.markDirty()

    return this
  }

  cleanRaws(keepBetween) {
    super.cleanRaws(keepBetween)
    if (this.nodes) {
      for (let node of this.nodes) node.cleanRaws(keepBetween)
    }
  }

  insertBefore(exist, add) {
    let existIndex = this.index(exist)
    let type = existIndex === 0 ? 'prepend' : false
    let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()
    existIndex = this.index(exist)
    for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)

    let index
    for (let id in this.indexes) {
      index = this.indexes[id]
      if (existIndex <= index) {
        this.indexes[id] = index + nodes.length
      }
    }

    this.markDirty()

    return this
  }

  insertAfter(exist, add) {
    let existIndex = this.index(exist)
    let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()
    existIndex = this.index(exist)
    for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)

    let index
    for (let id in this.indexes) {
      index = this.indexes[id]
      if (existIndex < index) {
        this.indexes[id] = index + nodes.length
      }
    }

    this.markDirty()

    return this
  }

  removeChild(child) {
    child = this.index(child)
    this.proxyOf.nodes[child].parent = undefined
    this.proxyOf.nodes.splice(child, 1)

    let index
    for (let id in this.indexes) {
      index = this.indexes[id]
      if (index >= child) {
        this.indexes[id] = index - 1
      }
    }

    this.markDirty()

    return this
  }

  removeAll() {
    for (let node of this.proxyOf.nodes) node.parent = undefined
    this.proxyOf.nodes = []

    this.markDirty()

    return this
  }

  replaceValues(pattern, opts, callback) {
    if (!callback) {
      callback = opts
      opts = {}
    }

    this.walkDecls(decl => {
      if (opts.props && !opts.props.includes(decl.prop)) return
      if (opts.fast && !decl.value.includes(opts.fast)) return

      decl.value = decl.value.replace(pattern, callback)
    })

    this.markDirty()

    return this
  }

  every(condition) {
    return this.nodes.every(condition)
  }

  some(condition) {
    return this.nodes.some(condition)
  }

  index(child) {
    if (typeof child === 'number') return child
    if (child.proxyOf) child = child.proxyOf
    return this.proxyOf.nodes.indexOf(child)
  }

  get first() {
    if (!this.proxyOf.nodes) return undefined
    return this.proxyOf.nodes[0]
  }

  get last() {
    if (!this.proxyOf.nodes) return undefined
    return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]
  }

  normalize(nodes, sample) {
    if (typeof nodes === 'string') {
      nodes = cleanSource(parse(nodes).nodes)
    } else if (Array.isArray(nodes)) {
      nodes = nodes.slice(0)
      for (let i of nodes) {
        if (i.parent) i.parent.removeChild(i, 'ignore')
      }
    } else if (nodes.type === 'root' && this.type !== 'document') {
      nodes = nodes.nodes.slice(0)
      for (let i of nodes) {
        if (i.parent) i.parent.removeChild(i, 'ignore')
      }
    } else if (nodes.type) {
      nodes = [nodes]
    } else if (nodes.prop) {
      if (typeof nodes.value === 'undefined') {
        throw new Error('Value field is missed in node creation')
      } else if (typeof nodes.value !== 'string') {
        nodes.value = String(nodes.value)
      }
      nodes = [new Declaration(nodes)]
    } else if (nodes.selector) {
      nodes = [new Rule(nodes)]
    } else if (nodes.name) {
      nodes = [new AtRule(nodes)]
    } else if (nodes.text) {
      nodes = [new Comment(nodes)]
    } else {
      throw new Error('Unknown node type in node creation')
    }

    let processed = nodes.map(i => {
      /* c8 ignore next */
      if (!i[my]) Container.rebuild(i)
      i = i.proxyOf
      if (i.parent) i.parent.removeChild(i)
      if (i[isClean]) markDirtyUp(i)
      if (typeof i.raws.before === 'undefined') {
        if (sample && typeof sample.raws.before !== 'undefined') {
          i.raws.before = sample.raws.before.replace(/\S/g, '')
        }
      }
      i.parent = this.proxyOf
      return i
    })

    return processed
  }

  getProxyProcessor() {
    return {
      set(node, prop, value) {
        if (node[prop] === value) return true
        node[prop] = value
        if (prop === 'name' || prop === 'params' || prop === 'selector') {
          node.markDirty()
        }
        return true
      },

      get(node, prop) {
        if (prop === 'proxyOf') {
          return node
        } else if (!node[prop]) {
          return node[prop]
        } else if (
          prop === 'each' ||
          (typeof prop === 'string' && prop.startsWith('walk'))
        ) {
          return (...args) => {
            return node[prop](
              ...args.map(i => {
                if (typeof i === 'function') {
                  return (child, index) => i(child.toProxy(), index)
                } else {
                  return i
                }
              })
            )
          }
        } else if (prop === 'every' || prop === 'some') {
          return cb => {
            return node[prop]((child, ...other) =>
              cb(child.toProxy(), ...other)
            )
          }
        } else if (prop === 'root') {
          return () => node.root().toProxy()
        } else if (prop === 'nodes') {
          return node.nodes.map(i => i.toProxy())
        } else if (prop === 'first' || prop === 'last') {
          return node[prop].toProxy()
        } else {
          return node[prop]
        }
      }
    }
  }

  getIterator() {
    if (!this.lastEach) this.lastEach = 0
    if (!this.indexes) this.indexes = {}

    this.lastEach += 1
    let iterator = this.lastEach
    this.indexes[iterator] = 0

    return iterator
  }
}

Container.registerParse = dependant => {
  parse = dependant
}

Container.registerRule = dependant => {
  Rule = dependant
}

Container.registerAtRule = dependant => {
  AtRule = dependant
}

Container.registerRoot = dependant => {
  Root = dependant
}

module.exports = Container
Container.default = Container

/* c8 ignore start */
Container.rebuild = node => {
  if (node.type === 'atrule') {
    Object.setPrototypeOf(node, AtRule.prototype)
  } else if (node.type === 'rule') {
    Object.setPrototypeOf(node, Rule.prototype)
  } else if (node.type === 'decl') {
    Object.setPrototypeOf(node, Declaration.prototype)
  } else if (node.type === 'comment') {
    Object.setPrototypeOf(node, Comment.prototype)
  } else if (node.type === 'root') {
    Object.setPrototypeOf(node, Root.prototype)
  }

  node[my] = true

  if (node.nodes) {
    node.nodes.forEach(child => {
      Container.rebuild(child)
    })
  }
}
/* c8 ignore stop */
'use strict'

let pico = require('picocolors')

let terminalHighlight = require('./terminal-highlight')

class CssSyntaxError extends Error {
  constructor(message, line, column, source, file, plugin) {
    super(message)
    this.name = 'CssSyntaxError'
    this.reason = message

    if (file) {
      this.file = file
    }
    if (source) {
      this.source = source
    }
    if (plugin) {
      this.plugin = plugin
    }
    if (typeof line !== 'undefined' && typeof column !== 'undefined') {
      if (typeof line === 'number') {
        this.line = line
        this.column = column
      } else {
        this.line = line.line
        this.column = line.column
        this.endLine = column.line
        this.endColumn = column.column
      }
    }

    this.setMessage()

    if (Error.captureStackTrace) {
      Error.captureStackTrace(this, CssSyntaxError)
    }
  }

  setMessage() {
    this.message = this.plugin ? this.plugin + ': ' : ''
    this.message += this.file ? this.file : '<css input>'
    if (typeof this.line !== 'undefined') {
      this.message += ':' + this.line + ':' + this.column
    }
    this.message += ': ' + this.reason
  }

  showSourceCode(color) {
    if (!this.source) return ''

    let css = this.source
    if (color == null) color = pico.isColorSupported
    if (terminalHighlight) {
      if (color) css = terminalHighlight(css)
    }

    let lines = css.split(/\r?\n/)
    let start = Math.max(this.line - 3, 0)
    let end = Math.min(this.line + 2, lines.length)

    let maxWidth = String(end).length

    let mark, aside
    if (color) {
      let { bold, red, gray } = pico.createColors(true)
      mark = text => bold(red(text))
      aside = text => gray(text)
    } else {
      mark = aside = str => str
    }

    return lines
      .slice(start, end)
      .map((line, index) => {
        let number = start + 1 + index
        let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '
        if (number === this.line) {
          let spacing =
            aside(gutter.replace(/\d/g, ' ')) +
            line.slice(0, this.column - 1).replace(/[^\t]/g, ' ')
          return mark('>') + aside(gutter) + line + '\n ' + spacing + mark('^')
        }
        return ' ' + aside(gutter) + line
      })
      .join('\n')
  }

  toString() {
    let code = this.showSourceCode()
    if (code) {
      code = '\n\n' + code + '\n'
    }
    return this.name + ': ' + this.message + code
  }
}

module.exports = CssSyntaxError
CssSyntaxError.default = CssSyntaxError
'use strict'

let Node = require('./node')

class Declaration extends Node {
  constructor(defaults) {
    if (
      defaults &&
      typeof defaults.value !== 'undefined' &&
      typeof defaults.value !== 'string'
    ) {
      defaults = { ...defaults, value: String(defaults.value) }
    }
    super(defaults)
    this.type = 'decl'
  }

  get variable() {
    return this.prop.startsWith('--') || this.prop[0] === '$'
  }
}

module.exports = Declaration
Declaration.default = Declaration
'use strict'

let Container = require('./container')

let LazyResult, Processor

class Document extends Container {
  constructor(defaults) {
    // type needs to be passed to super, otherwise child roots won't be normalized correctly
    super({ type: 'document', ...defaults })

    if (!this.nodes) {
      this.nodes = []
    }
  }

  toResult(opts = {}) {
    let lazy = new LazyResult(new Processor(), this, opts)

    return lazy.stringify()
  }
}

Document.registerLazyResult = dependant => {
  LazyResult = dependant
}

Document.registerProcessor = dependant => {
  Processor = dependant
}

module.exports = Document
Document.default = Document
'use strict'

let Declaration = require('./declaration')
let PreviousMap = require('./previous-map')
let Comment = require('./comment')
let AtRule = require('./at-rule')
let Input = require('./input')
let Root = require('./root')
let Rule = require('./rule')

function fromJSON(json, inputs) {
  if (Array.isArray(json)) return json.map(n => fromJSON(n))

  let { inputs: ownInputs, ...defaults } = json
  if (ownInputs) {
    inputs = []
    for (let input of ownInputs) {
      let inputHydrated = { ...input, __proto__: Input.prototype }
      if (inputHydrated.map) {
        inputHydrated.map = {
          ...inputHydrated.map,
          __proto__: PreviousMap.prototype
        }
      }
      inputs.push(inputHydrated)
    }
  }
  if (defaults.nodes) {
    defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))
  }
  if (defaults.source) {
    let { inputId, ...source } = defaults.source
    defaults.source = source
    if (inputId != null) {
      defaults.source.input = inputs[inputId]
    }
  }
  if (defaults.type === 'root') {
    return new Root(defaults)
  } else if (defaults.type === 'decl') {
    return new Declaration(defaults)
  } else if (defaults.type === 'rule') {
    return new Rule(defaults)
  } else if (defaults.type === 'comment') {
    return new Comment(defaults)
  } else if (defaults.type === 'atrule') {
    return new AtRule(defaults)
  } else {
    throw new Error('Unknown node type: ' + json.type)
  }
}

module.exports = fromJSON
fromJSON.default = fromJSON
'use strict'

let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
let { fileURLToPath, pathToFileURL } = require('url')
let { resolve, isAbsolute } = require('path')
let { nanoid } = require('nanoid/non-secure')

let terminalHighlight = require('./terminal-highlight')
let CssSyntaxError = require('./css-syntax-error')
let PreviousMap = require('./previous-map')

let fromOffsetCache = Symbol('fromOffsetCache')

let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)
let pathAvailable = Boolean(resolve && isAbsolute)

class Input {
  constructor(css, opts = {}) {
    if (
      css === null ||
      typeof css === 'undefined' ||
      (typeof css === 'object' && !css.toString)
    ) {
      throw new Error(`PostCSS received ${css} instead of CSS string`)
    }

    this.css = css.toString()

    if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') {
      this.hasBOM = true
      this.css = this.css.slice(1)
    } else {
      this.hasBOM = false
    }

    if (opts.from) {
      if (
        !pathAvailable ||
        /^\w+:\/\//.test(opts.from) ||
        isAbsolute(opts.from)
      ) {
        this.file = opts.from
      } else {
        this.file = resolve(opts.from)
      }
    }

    if (pathAvailable && sourceMapAvailable) {
      let map = new PreviousMap(this.css, opts)
      if (map.text) {
        this.map = map
        let file = map.consumer().file
        if (!this.file && file) this.file = this.mapResolve(file)
      }
    }

    if (!this.file) {
      this.id = '<input css ' + nanoid(6) + '>'
    }
    if (this.map) this.map.file = this.from
  }

  fromOffset(offset) {
    let lastLine, lineToIndex
    if (!this[fromOffsetCache]) {
      let lines = this.css.split('\n')
      lineToIndex = new Array(lines.length)
      let prevIndex = 0

      for (let i = 0, l = lines.length; i < l; i++) {
        lineToIndex[i] = prevIndex
        prevIndex += lines[i].length + 1
      }

      this[fromOffsetCache] = lineToIndex
    } else {
      lineToIndex = this[fromOffsetCache]
    }
    lastLine = lineToIndex[lineToIndex.length - 1]

    let min = 0
    if (offset >= lastLine) {
      min = lineToIndex.length - 1
    } else {
      let max = lineToIndex.length - 2
      let mid
      while (min < max) {
        mid = min + ((max - min) >> 1)
        if (offset < lineToIndex[mid]) {
          max = mid - 1
        } else if (offset >= lineToIndex[mid + 1]) {
          min = mid + 1
        } else {
          min = mid
          break
        }
      }
    }
    return {
      line: min + 1,
      col: offset - lineToIndex[min] + 1
    }
  }

  error(message, line, column, opts = {}) {
    let result, endLine, endColumn

    if (line && typeof line === 'object') {
      let start = line
      let end = column
      if (typeof line.offset === 'number') {
        let pos = this.fromOffset(start.offset)
        line = pos.line
        column = pos.col
      } else {
        line = start.line
        column = start.column
      }
      if (typeof end.offset === 'number') {
        let pos = this.fromOffset(end.offset)
        endLine = pos.line
        endColumn = pos.col
      } else {
        endLine = end.line
        endColumn = end.column
      }
    } else if (!column) {
      let pos = this.fromOffset(line)
      line = pos.line
      column = pos.col
    }

    let origin = this.origin(line, column, endLine, endColumn)
    if (origin) {
      result = new CssSyntaxError(
        message,
        origin.endLine === undefined
          ? origin.line
          : { line: origin.line, column: origin.column },
        origin.endLine === undefined
          ? origin.column
          : { line: origin.endLine, column: origin.endColumn },
        origin.source,
        origin.file,
        opts.plugin
      )
    } else {
      result = new CssSyntaxError(
        message,
        endLine === undefined ? line : { line, column },
        endLine === undefined ? column : { line: endLine, column: endColumn },
        this.css,
        this.file,
        opts.plugin
      )
    }

    result.input = { line, column, endLine, endColumn, source: this.css }
    if (this.file) {
      if (pathToFileURL) {
        result.input.url = pathToFileURL(this.file).toString()
      }
      result.input.file = this.file
    }

    return result
  }

  origin(line, column, endLine, endColumn) {
    if (!this.map) return false
    let consumer = this.map.consumer()

    let from = consumer.originalPositionFor({ line, column })
    if (!from.source) return false

    let to
    if (typeof endLine === 'number') {
      to = consumer.originalPositionFor({ line: endLine, column: endColumn })
    }

    let fromUrl

    if (isAbsolute(from.source)) {
      fromUrl = pathToFileURL(from.source)
    } else {
      fromUrl = new URL(
        from.source,
        this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)
      )
    }

    let result = {
      url: fromUrl.toString(),
      line: from.line,
      column: from.column,
      endLine: to && to.line,
      endColumn: to && to.column
    }

    if (fromUrl.protocol === 'file:') {
      if (fileURLToPath) {
        result.file = fileURLToPath(fromUrl)
      } else {
        /* c8 ignore next 2 */
        throw new Error(`file: protocol is not available in this PostCSS build`)
      }
    }

    let source = consumer.sourceContentFor(from.source)
    if (source) result.source = source

    return result
  }

  mapResolve(file) {
    if (/^\w+:\/\//.test(file)) {
      return file
    }
    return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)
  }

  get from() {
    return this.file || this.id
  }

  toJSON() {
    let json = {}
    for (let name of ['hasBOM', 'css', 'file', 'id']) {
      if (this[name] != null) {
        json[name] = this[name]
      }
    }
    if (this.map) {
      json.map = { ...this.map }
      if (json.map.consumerCache) {
        json.map.consumerCache = undefined
      }
    }
    return json
  }
}

module.exports = Input
Input.default = Input

if (terminalHighlight && terminalHighlight.registerInput) {
  terminalHighlight.registerInput(Input)
}
'use strict'

let { isClean, my } = require('./symbols')
let MapGenerator = require('./map-generator')
let stringify = require('./stringify')
let Container = require('./container')
let Document = require('./document')
let warnOnce = require('./warn-once')
let Result = require('./result')
let parse = require('./parse')
let Root = require('./root')

const TYPE_TO_CLASS_NAME = {
  document: 'Document',
  root: 'Root',
  atrule: 'AtRule',
  rule: 'Rule',
  decl: 'Declaration',
  comment: 'Comment'
}

const PLUGIN_PROPS = {
  postcssPlugin: true,
  prepare: true,
  Once: true,
  Document: true,
  Root: true,
  Declaration: true,
  Rule: true,
  AtRule: true,
  Comment: true,
  DeclarationExit: true,
  RuleExit: true,
  AtRuleExit: true,
  CommentExit: true,
  RootExit: true,
  DocumentExit: true,
  OnceExit: true
}

const NOT_VISITORS = {
  postcssPlugin: true,
  prepare: true,
  Once: true
}

const CHILDREN = 0

function isPromise(obj) {
  return typeof obj === 'object' && typeof obj.then === 'function'
}

function getEvents(node) {
  let key = false
  let type = TYPE_TO_CLASS_NAME[node.type]
  if (node.type === 'decl') {
    key = node.prop.toLowerCase()
  } else if (node.type === 'atrule') {
    key = node.name.toLowerCase()
  }

  if (key && node.append) {
    return [
      type,
      type + '-' + key,
      CHILDREN,
      type + 'Exit',
      type + 'Exit-' + key
    ]
  } else if (key) {
    return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]
  } else if (node.append) {
    return [type, CHILDREN, type + 'Exit']
  } else {
    return [type, type + 'Exit']
  }
}

function toStack(node) {
  let events
  if (node.type === 'document') {
    events = ['Document', CHILDREN, 'DocumentExit']
  } else if (node.type === 'root') {
    events = ['Root', CHILDREN, 'RootExit']
  } else {
    events = getEvents(node)
  }

  return {
    node,
    events,
    eventIndex: 0,
    visitors: [],
    visitorIndex: 0,
    iterator: 0
  }
}

function cleanMarks(node) {
  node[isClean] = false
  if (node.nodes) node.nodes.forEach(i => cleanMarks(i))
  return node
}

let postcss = {}

class LazyResult {
  constructor(processor, css, opts) {
    this.stringified = false
    this.processed = false

    let root
    if (
      typeof css === 'object' &&
      css !== null &&
      (css.type === 'root' || css.type === 'document')
    ) {
      root = cleanMarks(css)
    } else if (css instanceof LazyResult || css instanceof Result) {
      root = cleanMarks(css.root)
      if (css.map) {
        if (typeof opts.map === 'undefined') opts.map = {}
        if (!opts.map.inline) opts.map.inline = false
        opts.map.prev = css.map
      }
    } else {
      let parser = parse
      if (opts.syntax) parser = opts.syntax.parse
      if (opts.parser) parser = opts.parser
      if (parser.parse) parser = parser.parse

      try {
        root = parser(css, opts)
      } catch (error) {
        this.processed = true
        this.error = error
      }

      if (root && !root[my]) {
        /* c8 ignore next 2 */
        Container.rebuild(root)
      }
    }

    this.result = new Result(processor, root, opts)
    this.helpers = { ...postcss, result: this.result, postcss }
    this.plugins = this.processor.plugins.map(plugin => {
      if (typeof plugin === 'object' && plugin.prepare) {
        return { ...plugin, ...plugin.prepare(this.result) }
      } else {
        return plugin
      }
    })
  }

  get [Symbol.toStringTag]() {
    return 'LazyResult'
  }

  get processor() {
    return this.result.processor
  }

  get opts() {
    return this.result.opts
  }

  get css() {
    return this.stringify().css
  }

  get content() {
    return this.stringify().content
  }

  get map() {
    return this.stringify().map
  }

  get root() {
    return this.sync().root
  }

  get messages() {
    return this.sync().messages
  }

  warnings() {
    return this.sync().warnings()
  }

  toString() {
    return this.css
  }

  then(onFulfilled, onRejected) {
    if (process.env.NODE_ENV !== 'production') {
      if (!('from' in this.opts)) {
        warnOnce(
          'Without `from` option PostCSS could generate wrong source map ' +
            'and will not find Browserslist config. Set it to CSS file path ' +
            'or to `undefined` to prevent this warning.'
        )
      }
    }
    return this.async().then(onFulfilled, onRejected)
  }

  catch(onRejected) {
    return this.async().catch(onRejected)
  }

  finally(onFinally) {
    return this.async().then(onFinally, onFinally)
  }

  async() {
    if (this.error) return Promise.reject(this.error)
    if (this.processed) return Promise.resolve(this.result)
    if (!this.processing) {
      this.processing = this.runAsync()
    }
    return this.processing
  }

  sync() {
    if (this.error) throw this.error
    if (this.processed) return this.result
    this.processed = true

    if (this.processing) {
      throw this.getAsyncError()
    }

    for (let plugin of this.plugins) {
      let promise = this.runOnRoot(plugin)
      if (isPromise(promise)) {
        throw this.getAsyncError()
      }
    }

    this.prepareVisitors()
    if (this.hasListener) {
      let root = this.result.root
      while (!root[isClean]) {
        root[isClean] = true
        this.walkSync(root)
      }
      if (this.listeners.OnceExit) {
        if (root.type === 'document') {
          for (let subRoot of root.nodes) {
            this.visitSync(this.listeners.OnceExit, subRoot)
          }
        } else {
          this.visitSync(this.listeners.OnceExit, root)
        }
      }
    }

    return this.result
  }

  stringify() {
    if (this.error) throw this.error
    if (this.stringified) return this.result
    this.stringified = true

    this.sync()

    let opts = this.result.opts
    let str = stringify
    if (opts.syntax) str = opts.syntax.stringify
    if (opts.stringifier) str = opts.stringifier
    if (str.stringify) str = str.stringify

    let map = new MapGenerator(str, this.result.root, this.result.opts)
    let data = map.generate()
    this.result.css = data[0]
    this.result.map = data[1]

    return this.result
  }

  walkSync(node) {
    node[isClean] = true
    let events = getEvents(node)
    for (let event of events) {
      if (event === CHILDREN) {
        if (node.nodes) {
          node.each(child => {
            if (!child[isClean]) this.walkSync(child)
          })
        }
      } else {
        let visitors = this.listeners[event]
        if (visitors) {
          if (this.visitSync(visitors, node.toProxy())) return
        }
      }
    }
  }

  visitSync(visitors, node) {
    for (let [plugin, visitor] of visitors) {
      this.result.lastPlugin = plugin
      let promise
      try {
        promise = visitor(node, this.helpers)
      } catch (e) {
        throw this.handleError(e, node.proxyOf)
      }
      if (node.type !== 'root' && node.type !== 'document' && !node.parent) {
        return true
      }
      if (isPromise(promise)) {
        throw this.getAsyncError()
      }
    }
  }

  runOnRoot(plugin) {
    this.result.lastPlugin = plugin
    try {
      if (typeof plugin === 'object' && plugin.Once) {
        if (this.result.root.type === 'document') {
          let roots = this.result.root.nodes.map(root =>
            plugin.Once(root, this.helpers)
          )

          if (isPromise(roots[0])) {
            return Promise.all(roots)
          }

          return roots
        }

        return plugin.Once(this.result.root, this.helpers)
      } else if (typeof plugin === 'function') {
        return plugin(this.result.root, this.result)
      }
    } catch (error) {
      throw this.handleError(error)
    }
  }

  getAsyncError() {
    throw new Error('Use process(css).then(cb) to work with async plugins')
  }

  handleError(error, node) {
    let plugin = this.result.lastPlugin
    try {
      if (node) node.addToError(error)
      this.error = error
      if (error.name === 'CssSyntaxError' && !error.plugin) {
        error.plugin = plugin.postcssPlugin
        error.setMessage()
      } else if (plugin.postcssVersion) {
        if (process.env.NODE_ENV !== 'production') {
          let pluginName = plugin.postcssPlugin
          let pluginVer = plugin.postcssVersion
          let runtimeVer = this.result.processor.version
          let a = pluginVer.split('.')
          let b = runtimeVer.split('.')

          if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
            // eslint-disable-next-line no-console
            console.error(
              'Unknown error from PostCSS plugin. Your current PostCSS ' +
                'version is ' +
                runtimeVer +
                ', but ' +
                pluginName +
                ' uses ' +
                pluginVer +
                '. Perhaps this is the source of the error below.'
            )
          }
        }
      }
    } catch (err) {
      /* c8 ignore next 3 */
      // eslint-disable-next-line no-console
      if (console && console.error) console.error(err)
    }
    return error
  }

  async runAsync() {
    this.plugin = 0
    for (let i = 0; i < this.plugins.length; i++) {
      let plugin = this.plugins[i]
      let promise = this.runOnRoot(plugin)
      if (isPromise(promise)) {
        try {
          await promise
        } catch (error) {
          throw this.handleError(error)
        }
      }
    }

    this.prepareVisitors()
    if (this.hasListener) {
      let root = this.result.root
      while (!root[isClean]) {
        root[isClean] = true
        let stack = [toStack(root)]
        while (stack.length > 0) {
          let promise = this.visitTick(stack)
          if (isPromise(promise)) {
            try {
              await promise
            } catch (e) {
              let node = stack[stack.length - 1].node
              throw this.handleError(e, node)
            }
          }
        }
      }

      if (this.listeners.OnceExit) {
        for (let [plugin, visitor] of this.listeners.OnceExit) {
          this.result.lastPlugin = plugin
          try {
            if (root.type === 'document') {
              let roots = root.nodes.map(subRoot =>
                visitor(subRoot, this.helpers)
              )

              await Promise.all(roots)
            } else {
              await visitor(root, this.helpers)
            }
          } catch (e) {
            throw this.handleError(e)
          }
        }
      }
    }

    this.processed = true
    return this.stringify()
  }

  prepareVisitors() {
    this.listeners = {}
    let add = (plugin, type, cb) => {
      if (!this.listeners[type]) this.listeners[type] = []
      this.listeners[type].push([plugin, cb])
    }
    for (let plugin of this.plugins) {
      if (typeof plugin === 'object') {
        for (let event in plugin) {
          if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {
            throw new Error(
              `Unknown event ${event} in ${plugin.postcssPlugin}. ` +
                `Try to update PostCSS (${this.processor.version} now).`
            )
          }
          if (!NOT_VISITORS[event]) {
            if (typeof plugin[event] === 'object') {
              for (let filter in plugin[event]) {
                if (filter === '*') {
                  add(plugin, event, plugin[event][filter])
                } else {
                  add(
                    plugin,
                    event + '-' + filter.toLowerCase(),
                    plugin[event][filter]
                  )
                }
              }
            } else if (typeof plugin[event] === 'function') {
              add(plugin, event, plugin[event])
            }
          }
        }
      }
    }
    this.hasListener = Object.keys(this.listeners).length > 0
  }

  visitTick(stack) {
    let visit = stack[stack.length - 1]
    let { node, visitors } = visit

    if (node.type !== 'root' && node.type !== 'document' && !node.parent) {
      stack.pop()
      return
    }

    if (visitors.length > 0 && visit.visitorIndex < visitors.length) {
      let [plugin, visitor] = visitors[visit.visitorIndex]
      visit.visitorIndex += 1
      if (visit.visitorIndex === visitors.length) {
        visit.visitors = []
        visit.visitorIndex = 0
      }
      this.result.lastPlugin = plugin
      try {
        return visitor(node.toProxy(), this.helpers)
      } catch (e) {
        throw this.handleError(e, node)
      }
    }

    if (visit.iterator !== 0) {
      let iterator = visit.iterator
      let child
      while ((child = node.nodes[node.indexes[iterator]])) {
        node.indexes[iterator] += 1
        if (!child[isClean]) {
          child[isClean] = true
          stack.push(toStack(child))
          return
        }
      }
      visit.iterator = 0
      delete node.indexes[iterator]
    }

    let events = visit.events
    while (visit.eventIndex < events.length) {
      let event = events[visit.eventIndex]
      visit.eventIndex += 1
      if (event === CHILDREN) {
        if (node.nodes && node.nodes.length) {
          node[isClean] = true
          visit.iterator = node.getIterator()
        }
        return
      } else if (this.listeners[event]) {
        visit.visitors = this.listeners[event]
        return
      }
    }
    stack.pop()
  }
}

LazyResult.registerPostcss = dependant => {
  postcss = dependant
}

module.exports = LazyResult
LazyResult.default = LazyResult

Root.registerLazyResult(LazyResult)
Document.registerLazyResult(LazyResult)
'use strict'

let list = {
  split(string, separators, last) {
    let array = []
    let current = ''
    let split = false

    let func = 0
    let inQuote = false
    let prevQuote = ''
    let escape = false

    for (let letter of string) {
      if (escape) {
        escape = false
      } else if (letter === '\\') {
        escape = true
      } else if (inQuote) {
        if (letter === prevQuote) {
          inQuote = false
        }
      } else if (letter === '"' || letter === "'") {
        inQuote = true
        prevQuote = letter
      } else if (letter === '(') {
        func += 1
      } else if (letter === ')') {
        if (func > 0) func -= 1
      } else if (func === 0) {
        if (separators.includes(letter)) split = true
      }

      if (split) {
        if (current !== '') array.push(current.trim())
        current = ''
        split = false
      } else {
        current += letter
      }
    }

    if (last || current !== '') array.push(current.trim())
    return array
  },

  space(string) {
    let spaces = [' ', '\n', '\t']
    return list.split(string, spaces)
  },

  comma(string) {
    return list.split(string, [','], true)
  }
}

module.exports = list
list.default = list
'use strict'

let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
let { dirname, resolve, relative, sep } = require('path')
let { pathToFileURL } = require('url')

let Input = require('./input')

let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)
let pathAvailable = Boolean(dirname && resolve && relative && sep)

class MapGenerator {
  constructor(stringify, root, opts, cssString) {
    this.stringify = stringify
    this.mapOpts = opts.map || {}
    this.root = root
    this.opts = opts
    this.css = cssString
    this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute
  }

  isMap() {
    if (typeof this.opts.map !== 'undefined') {
      return !!this.opts.map
    }
    return this.previous().length > 0
  }

  previous() {
    if (!this.previousMaps) {
      this.previousMaps = []
      if (this.root) {
        this.root.walk(node => {
          if (node.source && node.source.input.map) {
            let map = node.source.input.map
            if (!this.previousMaps.includes(map)) {
              this.previousMaps.push(map)
            }
          }
        })
      } else {
        let input = new Input(this.css, this.opts)
        if (input.map) this.previousMaps.push(input.map)
      }
    }

    return this.previousMaps
  }

  isInline() {
    if (typeof this.mapOpts.inline !== 'undefined') {
      return this.mapOpts.inline
    }

    let annotation = this.mapOpts.annotation
    if (typeof annotation !== 'undefined' && annotation !== true) {
      return false
    }

    if (this.previous().length) {
      return this.previous().some(i => i.inline)
    }
    return true
  }

  isSourcesContent() {
    if (typeof this.mapOpts.sourcesContent !== 'undefined') {
      return this.mapOpts.sourcesContent
    }
    if (this.previous().length) {
      return this.previous().some(i => i.withContent())
    }
    return true
  }

  clearAnnotation() {
    if (this.mapOpts.annotation === false) return

    if (this.root) {
      let node
      for (let i = this.root.nodes.length - 1; i >= 0; i--) {
        node = this.root.nodes[i]
        if (node.type !== 'comment') continue
        if (node.text.indexOf('# sourceMappingURL=') === 0) {
          this.root.removeChild(i)
        }
      }
    } else if (this.css) {
      this.css = this.css.replace(/(\n)?\/\*#[\S\s]*?\*\/$/gm, '')
    }
  }

  setSourcesContent() {
    let already = {}
    if (this.root) {
      this.root.walk(node => {
        if (node.source) {
          let from = node.source.input.from
          if (from && !already[from]) {
            already[from] = true
            let fromUrl = this.usesFileUrls
              ? this.toFileUrl(from)
              : this.toUrl(this.path(from))
            this.map.setSourceContent(fromUrl, node.source.input.css)
          }
        }
      })
    } else if (this.css) {
      let from = this.opts.from
        ? this.toUrl(this.path(this.opts.from))
        : '<no source>'
      this.map.setSourceContent(from, this.css)
    }
  }

  applyPrevMaps() {
    for (let prev of this.previous()) {
      let from = this.toUrl(this.path(prev.file))
      let root = prev.root || dirname(prev.file)
      let map

      if (this.mapOpts.sourcesContent === false) {
        map = new SourceMapConsumer(prev.text)
        if (map.sourcesContent) {
          map.sourcesContent = map.sourcesContent.map(() => null)
        }
      } else {
        map = prev.consumer()
      }

      this.map.applySourceMap(map, from, this.toUrl(this.path(root)))
    }
  }

  isAnnotation() {
    if (this.isInline()) {
      return true
    }
    if (typeof this.mapOpts.annotation !== 'undefined') {
      return this.mapOpts.annotation
    }
    if (this.previous().length) {
      return this.previous().some(i => i.annotation)
    }
    return true
  }

  toBase64(str) {
    if (Buffer) {
      return Buffer.from(str).toString('base64')
    } else {
      return window.btoa(unescape(encodeURIComponent(str)))
    }
  }

  addAnnotation() {
    let content

    if (this.isInline()) {
      content =
        'data:application/json;base64,' + this.toBase64(this.map.toString())
    } else if (typeof this.mapOpts.annotation === 'string') {
      content = this.mapOpts.annotation
    } else if (typeof this.mapOpts.annotation === 'function') {
      content = this.mapOpts.annotation(this.opts.to, this.root)
    } else {
      content = this.outputFile() + '.map'
    }
    let eol = '\n'
    if (this.css.includes('\r\n')) eol = '\r\n'

    this.css += eol + '/*# sourceMappingURL=' + content + ' */'
  }

  outputFile() {
    if (this.opts.to) {
      return this.path(this.opts.to)
    } else if (this.opts.from) {
      return this.path(this.opts.from)
    } else {
      return 'to.css'
    }
  }

  generateMap() {
    if (this.root) {
      this.generateString()
    } else if (this.previous().length === 1) {
      let prev = this.previous()[0].consumer()
      prev.file = this.outputFile()
      this.map = SourceMapGenerator.fromSourceMap(prev)
    } else {
      this.map = new SourceMapGenerator({ file: this.outputFile() })
      this.map.addMapping({
        source: this.opts.from
          ? this.toUrl(this.path(this.opts.from))
          : '<no source>',
        generated: { line: 1, column: 0 },
        original: { line: 1, column: 0 }
      })
    }

    if (this.isSourcesContent()) this.setSourcesContent()
    if (this.root && this.previous().length > 0) this.applyPrevMaps()
    if (this.isAnnotation()) this.addAnnotation()

    if (this.isInline()) {
      return [this.css]
    } else {
      return [this.css, this.map]
    }
  }

  path(file) {
    if (file.indexOf('<') === 0) return file
    if (/^\w+:\/\//.test(file)) return file
    if (this.mapOpts.absolute) return file

    let from = this.opts.to ? dirname(this.opts.to) : '.'

    if (typeof this.mapOpts.annotation === 'string') {
      from = dirname(resolve(from, this.mapOpts.annotation))
    }

    file = relative(from, file)
    return file
  }

  toUrl(path) {
    if (sep === '\\') {
      path = path.replace(/\\/g, '/')
    }
    return encodeURI(path).replace(/[#?]/g, encodeURIComponent)
  }

  toFileUrl(path) {
    if (pathToFileURL) {
      return pathToFileURL(path).toString()
    } else {
      throw new Error(
        '`map.absolute` option is not available in this PostCSS build'
      )
    }
  }

  sourcePath(node) {
    if (this.mapOpts.from) {
      return this.toUrl(this.mapOpts.from)
    } else if (this.usesFileUrls) {
      return this.toFileUrl(node.source.input.from)
    } else {
      return this.toUrl(this.path(node.source.input.from))
    }
  }

  generateString() {
    this.css = ''
    this.map = new SourceMapGenerator({ file: this.outputFile() })

    let line = 1
    let column = 1

    let noSource = '<no source>'
    let mapping = {
      source: '',
      generated: { line: 0, column: 0 },
      original: { line: 0, column: 0 }
    }

    let lines, last
    this.stringify(this.root, (str, node, type) => {
      this.css += str

      if (node && type !== 'end') {
        mapping.generated.line = line
        mapping.generated.column = column - 1
        if (node.source && node.source.start) {
          mapping.source = this.sourcePath(node)
          mapping.original.line = node.source.start.line
          mapping.original.column = node.source.start.column - 1
          this.map.addMapping(mapping)
        } else {
          mapping.source = noSource
          mapping.original.line = 1
          mapping.original.column = 0
          this.map.addMapping(mapping)
        }
      }

      lines = str.match(/\n/g)
      if (lines) {
        line += lines.length
        last = str.lastIndexOf('\n')
        column = str.length - last
      } else {
        column += str.length
      }

      if (node && type !== 'start') {
        let p = node.parent || { raws: {} }
        let childless =
          node.type === 'decl' || (node.type === 'atrule' && !node.nodes)
        if (!childless || node !== p.last || p.raws.semicolon) {
          if (node.source && node.source.end) {
            mapping.source = this.sourcePath(node)
            mapping.original.line = node.source.end.line
            mapping.original.column = node.source.end.column - 1
            mapping.generated.line = line
            mapping.generated.column = column - 2
            this.map.addMapping(mapping)
          } else {
            mapping.source = noSource
            mapping.original.line = 1
            mapping.original.column = 0
            mapping.generated.line = line
            mapping.generated.column = column - 1
            this.map.addMapping(mapping)
          }
        }
      }
    })
  }

  generate() {
    this.clearAnnotation()
    if (pathAvailable && sourceMapAvailable && this.isMap()) {
      return this.generateMap()
    } else {
      let result = ''
      this.stringify(this.root, i => {
        result += i
      })
      return [result]
    }
  }
}

module.exports = MapGenerator
'use strict'

let MapGenerator = require('./map-generator')
let stringify = require('./stringify')
let warnOnce = require('./warn-once')
let parse = require('./parse')
const Result = require('./result')

class NoWorkResult {
  constructor(processor, css, opts) {
    css = css.toString()
    this.stringified = false

    this._processor = processor
    this._css = css
    this._opts = opts
    this._map = undefined
    let root

    let str = stringify
    this.result = new Result(this._processor, root, this._opts)
    this.result.css = css

    let self = this
    Object.defineProperty(this.result, 'root', {
      get() {
        return self.root
      }
    })

    let map = new MapGenerator(str, root, this._opts, css)
    if (map.isMap()) {
      let [generatedCSS, generatedMap] = map.generate()
      if (generatedCSS) {
        this.result.css = generatedCSS
      }
      if (generatedMap) {
        this.result.map = generatedMap
      }
    }
  }

  get [Symbol.toStringTag]() {
    return 'NoWorkResult'
  }

  get processor() {
    return this.result.processor
  }

  get opts() {
    return this.result.opts
  }

  get css() {
    return this.result.css
  }

  get content() {
    return this.result.css
  }

  get map() {
    return this.result.map
  }

  get root() {
    if (this._root) {
      return this._root
    }

    let root
    let parser = parse

    try {
      root = parser(this._css, this._opts)
    } catch (error) {
      this.error = error
    }

    if (this.error) {
      throw this.error
    } else {
      this._root = root
      return root
    }
  }

  get messages() {
    return []
  }

  warnings() {
    return []
  }

  toString() {
    return this._css
  }

  then(onFulfilled, onRejected) {
    if (process.env.NODE_ENV !== 'production') {
      if (!('from' in this._opts)) {
        warnOnce(
          'Without `from` option PostCSS could generate wrong source map ' +
            'and will not find Browserslist config. Set it to CSS file path ' +
            'or to `undefined` to prevent this warning.'
        )
      }
    }

    return this.async().then(onFulfilled, onRejected)
  }

  catch(onRejected) {
    return this.async().catch(onRejected)
  }

  finally(onFinally) {
    return this.async().then(onFinally, onFinally)
  }

  async() {
    if (this.error) return Promise.reject(this.error)
    return Promise.resolve(this.result)
  }

  sync() {
    if (this.error) throw this.error
    return this.result
  }
}

module.exports = NoWorkResult
NoWorkResult.default = NoWorkResult
'use strict'

let { isClean, my } = require('./symbols')
let CssSyntaxError = require('./css-syntax-error')
let Stringifier = require('./stringifier')
let stringify = require('./stringify')

function cloneNode(obj, parent) {
  let cloned = new obj.constructor()

  for (let i in obj) {
    if (!Object.prototype.hasOwnProperty.call(obj, i)) {
      /* c8 ignore next 2 */
      continue
    }
    if (i === 'proxyCache') continue
    let value = obj[i]
    let type = typeof value

    if (i === 'parent' && type === 'object') {
      if (parent) cloned[i] = parent
    } else if (i === 'source') {
      cloned[i] = value
    } else if (Array.isArray(value)) {
      cloned[i] = value.map(j => cloneNode(j, cloned))
    } else {
      if (type === 'object' && value !== null) value = cloneNode(value)
      cloned[i] = value
    }
  }

  return cloned
}

class Node {
  constructor(defaults = {}) {
    this.raws = {}
    this[isClean] = false
    this[my] = true

    for (let name in defaults) {
      if (name === 'nodes') {
        this.nodes = []
        for (let node of defaults[name]) {
          if (typeof node.clone === 'function') {
            this.append(node.clone())
          } else {
            this.append(node)
          }
        }
      } else {
        this[name] = defaults[name]
      }
    }
  }

  error(message, opts = {}) {
    if (this.source) {
      let { start, end } = this.rangeBy(opts)
      return this.source.input.error(
        message,
        { line: start.line, column: start.column },
        { line: end.line, column: end.column },
        opts
      )
    }
    return new CssSyntaxError(message)
  }

  warn(result, text, opts) {
    let data = { node: this }
    for (let i in opts) data[i] = opts[i]
    return result.warn(text, data)
  }

  remove() {
    if (this.parent) {
      this.parent.removeChild(this)
    }
    this.parent = undefined
    return this
  }

  toString(stringifier = stringify) {
    if (stringifier.stringify) stringifier = stringifier.stringify
    let result = ''
    stringifier(this, i => {
      result += i
    })
    return result
  }

  assign(overrides = {}) {
    for (let name in overrides) {
      this[name] = overrides[name]
    }
    return this
  }

  clone(overrides = {}) {
    let cloned = cloneNode(this)
    for (let name in overrides) {
      cloned[name] = overrides[name]
    }
    return cloned
  }

  cloneBefore(overrides = {}) {
    let cloned = this.clone(overrides)
    this.parent.insertBefore(this, cloned)
    return cloned
  }

  cloneAfter(overrides = {}) {
    let cloned = this.clone(overrides)
    this.parent.insertAfter(this, cloned)
    return cloned
  }

  replaceWith(...nodes) {
    if (this.parent) {
      let bookmark = this
      let foundSelf = false
      for (let node of nodes) {
        if (node === this) {
          foundSelf = true
        } else if (foundSelf) {
          this.parent.insertAfter(bookmark, node)
          bookmark = node
        } else {
          this.parent.insertBefore(bookmark, node)
        }
      }

      if (!foundSelf) {
        this.remove()
      }
    }

    return this
  }

  next() {
    if (!this.parent) return undefined
    let index = this.parent.index(this)
    return this.parent.nodes[index + 1]
  }

  prev() {
    if (!this.parent) return undefined
    let index = this.parent.index(this)
    return this.parent.nodes[index - 1]
  }

  before(add) {
    this.parent.insertBefore(this, add)
    return this
  }

  after(add) {
    this.parent.insertAfter(this, add)
    return this
  }

  root() {
    let result = this
    while (result.parent && result.parent.type !== 'document') {
      result = result.parent
    }
    return result
  }

  raw(prop, defaultType) {
    let str = new Stringifier()
    return str.raw(this, prop, defaultType)
  }

  cleanRaws(keepBetween) {
    delete this.raws.before
    delete this.raws.after
    if (!keepBetween) delete this.raws.between
  }

  toJSON(_, inputs) {
    let fixed = {}
    let emitInputs = inputs == null
    inputs = inputs || new Map()
    let inputsNextIndex = 0

    for (let name in this) {
      if (!Object.prototype.hasOwnProperty.call(this, name)) {
        /* c8 ignore next 2 */
        continue
      }
      if (name === 'parent' || name === 'proxyCache') continue
      let value = this[name]

      if (Array.isArray(value)) {
        fixed[name] = value.map(i => {
          if (typeof i === 'object' && i.toJSON) {
            return i.toJSON(null, inputs)
          } else {
            return i
          }
        })
      } else if (typeof value === 'object' && value.toJSON) {
        fixed[name] = value.toJSON(null, inputs)
      } else if (name === 'source') {
        let inputId = inputs.get(value.input)
        if (inputId == null) {
          inputId = inputsNextIndex
          inputs.set(value.input, inputsNextIndex)
          inputsNextIndex++
        }
        fixed[name] = {
          inputId,
          start: value.start,
          end: value.end
        }
      } else {
        fixed[name] = value
      }
    }

    if (emitInputs) {
      fixed.inputs = [...inputs.keys()].map(input => input.toJSON())
    }

    return fixed
  }

  positionInside(index) {
    let string = this.toString()
    let column = this.source.start.column
    let line = this.source.start.line

    for (let i = 0; i < index; i++) {
      if (string[i] === '\n') {
        column = 1
        line += 1
      } else {
        column += 1
      }
    }

    return { line, column }
  }

  positionBy(opts) {
    let pos = this.source.start
    if (opts.index) {
      pos = this.positionInside(opts.index)
    } else if (opts.word) {
      let index = this.toString().indexOf(opts.word)
      if (index !== -1) pos = this.positionInside(index)
    }
    return pos
  }

  rangeBy(opts) {
    let start = {
      line: this.source.start.line,
      column: this.source.start.column
    }
    let end = this.source.end
      ? {
          line: this.source.end.line,
          column: this.source.end.column + 1
        }
      : {
          line: start.line,
          column: start.column + 1
        }

    if (opts.word) {
      let index = this.toString().indexOf(opts.word)
      if (index !== -1) {
        start = this.positionInside(index)
        end = this.positionInside(index + opts.word.length)
      }
    } else {
      if (opts.start) {
        start = {
          line: opts.start.line,
          column: opts.start.column
        }
      } else if (opts.index) {
        start = this.positionInside(opts.index)
      }

      if (opts.end) {
        end = {
          line: opts.end.line,
          column: opts.end.column
        }
      } else if (opts.endIndex) {
        end = this.positionInside(opts.endIndex)
      } else if (opts.index) {
        end = this.positionInside(opts.index + 1)
      }
    }

    if (
      end.line < start.line ||
      (end.line === start.line && end.column <= start.column)
    ) {
      end = { line: start.line, column: start.column + 1 }
    }

    return { start, end }
  }

  getProxyProcessor() {
    return {
      set(node, prop, value) {
        if (node[prop] === value) return true
        node[prop] = value
        if (
          prop === 'prop' ||
          prop === 'value' ||
          prop === 'name' ||
          prop === 'params' ||
          prop === 'important' ||
          /* c8 ignore next */
          prop === 'text'
        ) {
          node.markDirty()
        }
        return true
      },

      get(node, prop) {
        if (prop === 'proxyOf') {
          return node
        } else if (prop === 'root') {
          return () => node.root().toProxy()
        } else {
          return node[prop]
        }
      }
    }
  }

  toProxy() {
    if (!this.proxyCache) {
      this.proxyCache = new Proxy(this, this.getProxyProcessor())
    }
    return this.proxyCache
  }

  addToError(error) {
    error.postcssNode = this
    if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) {
      let s = this.source
      error.stack = error.stack.replace(
        /\n\s{4}at /,
        `$&${s.input.from}:${s.start.line}:${s.start.column}$&`
      )
    }
    return error
  }

  markDirty() {
    if (this[isClean]) {
      this[isClean] = false
      let next = this
      while ((next = next.parent)) {
        next[isClean] = false
      }
    }
  }

  get proxyOf() {
    return this
  }
}

module.exports = Node
Node.default = Node
'use strict'

let Container = require('./container')
let Parser = require('./parser')
let Input = require('./input')

function parse(css, opts) {
  let input = new Input(css, opts)
  let parser = new Parser(input)
  try {
    parser.parse()
  } catch (e) {
    if (process.env.NODE_ENV !== 'production') {
      if (e.name === 'CssSyntaxError' && opts && opts.from) {
        if (/\.scss$/i.test(opts.from)) {
          e.message +=
            '\nYou tried to parse SCSS with ' +
            'the standard CSS parser; ' +
            'try again with the postcss-scss parser'
        } else if (/\.sass/i.test(opts.from)) {
          e.message +=
            '\nYou tried to parse Sass with ' +
            'the standard CSS parser; ' +
            'try again with the postcss-sass parser'
        } else if (/\.less$/i.test(opts.from)) {
          e.message +=
            '\nYou tried to parse Less with ' +
            'the standard CSS parser; ' +
            'try again with the postcss-less parser'
        }
      }
    }
    throw e
  }

  return parser.root
}

module.exports = parse
parse.default = parse

Container.registerParse(parse)
'use strict'

let Declaration = require('./declaration')
let tokenizer = require('./tokenize')
let Comment = require('./comment')
let AtRule = require('./at-rule')
let Root = require('./root')
let Rule = require('./rule')

const SAFE_COMMENT_NEIGHBOR = {
  empty: true,
  space: true
}

function findLastWithPosition(tokens) {
  for (let i = tokens.length - 1; i >= 0; i--) {
    let token = tokens[i]
    let pos = token[3] || token[2]
    if (pos) return pos
  }
}

class Parser {
  constructor(input) {
    this.input = input

    this.root = new Root()
    this.current = this.root
    this.spaces = ''
    this.semicolon = false
    this.customProperty = false

    this.createTokenizer()
    this.root.source = { input, start: { offset: 0, line: 1, column: 1 } }
  }

  createTokenizer() {
    this.tokenizer = tokenizer(this.input)
  }

  parse() {
    let token
    while (!this.tokenizer.endOfFile()) {
      token = this.tokenizer.nextToken()

      switch (token[0]) {
        case 'space':
          this.spaces += token[1]
          break

        case ';':
          this.freeSemicolon(token)
          break

        case '}':
          this.end(token)
          break

        case 'comment':
          this.comment(token)
          break

        case 'at-word':
          this.atrule(token)
          break

        case '{':
          this.emptyRule(token)
          break

        default:
          this.other(token)
          break
      }
    }
    this.endFile()
  }

  comment(token) {
    let node = new Comment()
    this.init(node, token[2])
    node.source.end = this.getPosition(token[3] || token[2])

    let text = token[1].slice(2, -2)
    if (/^\s*$/.test(text)) {
      node.text = ''
      node.raws.left = text
      node.raws.right = ''
    } else {
      let match = text.match(/^(\s*)([^]*\S)(\s*)$/)
      node.text = match[2]
      node.raws.left = match[1]
      node.raws.right = match[3]
    }
  }

  emptyRule(token) {
    let node = new Rule()
    this.init(node, token[2])
    node.selector = ''
    node.raws.between = ''
    this.current = node
  }

  other(start) {
    let end = false
    let type = null
    let colon = false
    let bracket = null
    let brackets = []
    let customProperty = start[1].startsWith('--')

    let tokens = []
    let token = start
    while (token) {
      type = token[0]
      tokens.push(token)

      if (type === '(' || type === '[') {
        if (!bracket) bracket = token
        brackets.push(type === '(' ? ')' : ']')
      } else if (customProperty && colon && type === '{') {
        if (!bracket) bracket = token
        brackets.push('}')
      } else if (brackets.length === 0) {
        if (type === ';') {
          if (colon) {
            this.decl(tokens, customProperty)
            return
          } else {
            break
          }
        } else if (type === '{') {
          this.rule(tokens)
          return
        } else if (type === '}') {
          this.tokenizer.back(tokens.pop())
          end = true
          break
        } else if (type === ':') {
          colon = true
        }
      } else if (type === brackets[brackets.length - 1]) {
        brackets.pop()
        if (brackets.length === 0) bracket = null
      }

      token = this.tokenizer.nextToken()
    }

    if (this.tokenizer.endOfFile()) end = true
    if (brackets.length > 0) this.unclosedBracket(bracket)

    if (end && colon) {
      if (!customProperty) {
        while (tokens.length) {
          token = tokens[tokens.length - 1][0]
          if (token !== 'space' && token !== 'comment') break
          this.tokenizer.back(tokens.pop())
        }
      }
      this.decl(tokens, customProperty)
    } else {
      this.unknownWord(tokens)
    }
  }

  rule(tokens) {
    tokens.pop()

    let node = new Rule()
    this.init(node, tokens[0][2])

    node.raws.between = this.spacesAndCommentsFromEnd(tokens)
    this.raw(node, 'selector', tokens)
    this.current = node
  }

  decl(tokens, customProperty) {
    let node = new Declaration()
    this.init(node, tokens[0][2])

    let last = tokens[tokens.length - 1]
    if (last[0] === ';') {
      this.semicolon = true
      tokens.pop()
    }

    node.source.end = this.getPosition(
      last[3] || last[2] || findLastWithPosition(tokens)
    )

    while (tokens[0][0] !== 'word') {
      if (tokens.length === 1) this.unknownWord(tokens)
      node.raws.before += tokens.shift()[1]
    }
    node.source.start = this.getPosition(tokens[0][2])

    node.prop = ''
    while (tokens.length) {
      let type = tokens[0][0]
      if (type === ':' || type === 'space' || type === 'comment') {
        break
      }
      node.prop += tokens.shift()[1]
    }

    node.raws.between = ''

    let token
    while (tokens.length) {
      token = tokens.shift()

      if (token[0] === ':') {
        node.raws.between += token[1]
        break
      } else {
        if (token[0] === 'word' && /\w/.test(token[1])) {
          this.unknownWord([token])
        }
        node.raws.between += token[1]
      }
    }

    if (node.prop[0] === '_' || node.prop[0] === '*') {
      node.raws.before += node.prop[0]
      node.prop = node.prop.slice(1)
    }

    let firstSpaces = []
    let next
    while (tokens.length) {
      next = tokens[0][0]
      if (next !== 'space' && next !== 'comment') break
      firstSpaces.push(tokens.shift())
    }

    this.precheckMissedSemicolon(tokens)

    for (let i = tokens.length - 1; i >= 0; i--) {
      token = tokens[i]
      if (token[1].toLowerCase() === '!important') {
        node.important = true
        let string = this.stringFrom(tokens, i)
        string = this.spacesFromEnd(tokens) + string
        if (string !== ' !important') node.raws.important = string
        break
      } else if (token[1].toLowerCase() === 'important') {
        let cache = tokens.slice(0)
        let str = ''
        for (let j = i; j > 0; j--) {
          let type = cache[j][0]
          if (str.trim().indexOf('!') === 0 && type !== 'space') {
            break
          }
          str = cache.pop()[1] + str
        }
        if (str.trim().indexOf('!') === 0) {
          node.important = true
          node.raws.important = str
          tokens = cache
        }
      }

      if (token[0] !== 'space' && token[0] !== 'comment') {
        break
      }
    }

    let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment')

    if (hasWord) {
      node.raws.between += firstSpaces.map(i => i[1]).join('')
      firstSpaces = []
    }
    this.raw(node, 'value', firstSpaces.concat(tokens), customProperty)

    if (node.value.includes(':') && !customProperty) {
      this.checkMissedSemicolon(tokens)
    }
  }

  atrule(token) {
    let node = new AtRule()
    node.name = token[1].slice(1)
    if (node.name === '') {
      this.unnamedAtrule(node, token)
    }
    this.init(node, token[2])

    let type
    let prev
    let shift
    let last = false
    let open = false
    let params = []
    let brackets = []

    while (!this.tokenizer.endOfFile()) {
      token = this.tokenizer.nextToken()
      type = token[0]

      if (type === '(' || type === '[') {
        brackets.push(type === '(' ? ')' : ']')
      } else if (type === '{' && brackets.length > 0) {
        brackets.push('}')
      } else if (type === brackets[brackets.length - 1]) {
        brackets.pop()
      }

      if (brackets.length === 0) {
        if (type === ';') {
          node.source.end = this.getPosition(token[2])
          this.semicolon = true
          break
        } else if (type === '{') {
          open = true
          break
        } else if (type === '}') {
          if (params.length > 0) {
            shift = params.length - 1
            prev = params[shift]
            while (prev && prev[0] === 'space') {
              prev = params[--shift]
            }
            if (prev) {
              node.source.end = this.getPosition(prev[3] || prev[2])
            }
          }
          this.end(token)
          break
        } else {
          params.push(token)
        }
      } else {
        params.push(token)
      }

      if (this.tokenizer.endOfFile()) {
        last = true
        break
      }
    }

    node.raws.between = this.spacesAndCommentsFromEnd(params)
    if (params.length) {
      node.raws.afterName = this.spacesAndCommentsFromStart(params)
      this.raw(node, 'params', params)
      if (last) {
        token = params[params.length - 1]
        node.source.end = this.getPosition(token[3] || token[2])
        this.spaces = node.raws.between
        node.raws.between = ''
      }
    } else {
      node.raws.afterName = ''
      node.params = ''
    }

    if (open) {
      node.nodes = []
      this.current = node
    }
  }

  end(token) {
    if (this.current.nodes && this.current.nodes.length) {
      this.current.raws.semicolon = this.semicolon
    }
    this.semicolon = false

    this.current.raws.after = (this.current.raws.after || '') + this.spaces
    this.spaces = ''

    if (this.current.parent) {
      this.current.source.end = this.getPosition(token[2])
      this.current = this.current.parent
    } else {
      this.unexpectedClose(token)
    }
  }

  endFile() {
    if (this.current.parent) this.unclosedBlock()
    if (this.current.nodes && this.current.nodes.length) {
      this.current.raws.semicolon = this.semicolon
    }
    this.current.raws.after = (this.current.raws.after || '') + this.spaces
  }

  freeSemicolon(token) {
    this.spaces += token[1]
    if (this.current.nodes) {
      let prev = this.current.nodes[this.current.nodes.length - 1]
      if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {
        prev.raws.ownSemicolon = this.spaces
        this.spaces = ''
      }
    }
  }

  // Helpers

  getPosition(offset) {
    let pos = this.input.fromOffset(offset)
    return {
      offset,
      line: pos.line,
      column: pos.col
    }
  }

  init(node, offset) {
    this.current.push(node)
    node.source = {
      start: this.getPosition(offset),
      input: this.input
    }
    node.raws.before = this.spaces
    this.spaces = ''
    if (node.type !== 'comment') this.semicolon = false
  }

  raw(node, prop, tokens, customProperty) {
    let token, type
    let length = tokens.length
    let value = ''
    let clean = true
    let next, prev

    for (let i = 0; i < length; i += 1) {
      token = tokens[i]
      type = token[0]
      if (type === 'space' && i === length - 1 && !customProperty) {
        clean = false
      } else if (type === 'comment') {
        prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'
        next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'
        if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {
          if (value.slice(-1) === ',') {
            clean = false
          } else {
            value += token[1]
          }
        } else {
          clean = false
        }
      } else {
        value += token[1]
      }
    }
    if (!clean) {
      let raw = tokens.reduce((all, i) => all + i[1], '')
      node.raws[prop] = { value, raw }
    }
    node[prop] = value
  }

  spacesAndCommentsFromEnd(tokens) {
    let lastTokenType
    let spaces = ''
    while (tokens.length) {
      lastTokenType = tokens[tokens.length - 1][0]
      if (lastTokenType !== 'space' && lastTokenType !== 'comment') break
      spaces = tokens.pop()[1] + spaces
    }
    return spaces
  }

  spacesAndCommentsFromStart(tokens) {
    let next
    let spaces = ''
    while (tokens.length) {
      next = tokens[0][0]
      if (next !== 'space' && next !== 'comment') break
      spaces += tokens.shift()[1]
    }
    return spaces
  }

  spacesFromEnd(tokens) {
    let lastTokenType
    let spaces = ''
    while (tokens.length) {
      lastTokenType = tokens[tokens.length - 1][0]
      if (lastTokenType !== 'space') break
      spaces = tokens.pop()[1] + spaces
    }
    return spaces
  }

  stringFrom(tokens, from) {
    let result = ''
    for (let i = from; i < tokens.length; i++) {
      result += tokens[i][1]
    }
    tokens.splice(from, tokens.length - from)
    return result
  }

  colon(tokens) {
    let brackets = 0
    let token, type, prev
    for (let [i, element] of tokens.entries()) {
      token = element
      type = token[0]

      if (type === '(') {
        brackets += 1
      }
      if (type === ')') {
        brackets -= 1
      }
      if (brackets === 0 && type === ':') {
        if (!prev) {
          this.doubleColon(token)
        } else if (prev[0] === 'word' && prev[1] === 'progid') {
          continue
        } else {
          return i
        }
      }

      prev = token
    }
    return false
  }

  // Errors

  unclosedBracket(bracket) {
    throw this.input.error(
      'Unclosed bracket',
      { offset: bracket[2] },
      { offset: bracket[2] + 1 }
    )
  }

  unknownWord(tokens) {
    throw this.input.error(
      'Unknown word',
      { offset: tokens[0][2] },
      { offset: tokens[0][2] + tokens[0][1].length }
    )
  }

  unexpectedClose(token) {
    throw this.input.error(
      'Unexpected }',
      { offset: token[2] },
      { offset: token[2] + 1 }
    )
  }

  unclosedBlock() {
    let pos = this.current.source.start
    throw this.input.error('Unclosed block', pos.line, pos.column)
  }

  doubleColon(token) {
    throw this.input.error(
      'Double colon',
      { offset: token[2] },
      { offset: token[2] + token[1].length }
    )
  }

  unnamedAtrule(node, token) {
    throw this.input.error(
      'At-rule without name',
      { offset: token[2] },
      { offset: token[2] + token[1].length }
    )
  }

  precheckMissedSemicolon(/* tokens */) {
    // Hook for Safe Parser
  }

  checkMissedSemicolon(tokens) {
    let colon = this.colon(tokens)
    if (colon === false) return

    let founded = 0
    let token
    for (let j = colon - 1; j >= 0; j--) {
      token = tokens[j]
      if (token[0] !== 'space') {
        founded += 1
        if (founded === 2) break
      }
    }
    // If the token is a word, e.g. `!important`, `red` or any other valid property's value.
    // Then we need to return the colon after that word token. [3] is the "end" colon of that word.
    // And because we need it after that one we do +1 to get the next one.
    throw this.input.error(
      'Missed semicolon',
      token[0] === 'word' ? token[3] + 1 : token[2]
    )
  }
}

module.exports = Parser
'use strict'

let CssSyntaxError = require('./css-syntax-error')
let Declaration = require('./declaration')
let LazyResult = require('./lazy-result')
let Container = require('./container')
let Processor = require('./processor')
let stringify = require('./stringify')
let fromJSON = require('./fromJSON')
let Document = require('./document')
let Warning = require('./warning')
let Comment = require('./comment')
let AtRule = require('./at-rule')
let Result = require('./result.js')
let Input = require('./input')
let parse = require('./parse')
let list = require('./list')
let Rule = require('./rule')
let Root = require('./root')
let Node = require('./node')

function postcss(...plugins) {
  if (plugins.length === 1 && Array.isArray(plugins[0])) {
    plugins = plugins[0]
  }
  return new Processor(plugins)
}

postcss.plugin = function plugin(name, initializer) {
  let warningPrinted = false
  function creator(...args) {
    // eslint-disable-next-line no-console
    if (console && console.warn && !warningPrinted) {
      warningPrinted = true
      // eslint-disable-next-line no-console
      console.warn(
        name +
          ': postcss.plugin was deprecated. Migration guide:\n' +
          'https://evilmartians.com/chronicles/postcss-8-plugin-migration'
      )
      if (process.env.LANG && process.env.LANG.startsWith('cn')) {
        /* c8 ignore next 7 */
        // eslint-disable-next-line no-console
        console.warn(
          name +
            ': é‡Œé¢ postcss.plugin è¢«å¼ƒç”¨. è¿ç§»æŒ‡å—:\n' +
            'https://www.w3ctech.com/topic/2226'
        )
      }
    }
    let transformer = initializer(...args)
    transformer.postcssPlugin = name
    transformer.postcssVersion = new Processor().version
    return transformer
  }

  let cache
  Object.defineProperty(creator, 'postcss', {
    get() {
      if (!cache) cache = creator()
      return cache
    }
  })

  creator.process = function (css, processOpts, pluginOpts) {
    return postcss([creator(pluginOpts)]).process(css, processOpts)
  }

  return creator
}

postcss.stringify = stringify
postcss.parse = parse
postcss.fromJSON = fromJSON
postcss.list = list

postcss.comment = defaults => new Comment(defaults)
postcss.atRule = defaults => new AtRule(defaults)
postcss.decl = defaults => new Declaration(defaults)
postcss.rule = defaults => new Rule(defaults)
postcss.root = defaults => new Root(defaults)
postcss.document = defaults => new Document(defaults)

postcss.CssSyntaxError = CssSyntaxError
postcss.Declaration = Declaration
postcss.Container = Container
postcss.Processor = Processor
postcss.Document = Document
postcss.Comment = Comment
postcss.Warning = Warning
postcss.AtRule = AtRule
postcss.Result = Result
postcss.Input = Input
postcss.Rule = Rule
postcss.Root = Root
postcss.Node = Node

LazyResult.registerPostcss(postcss)

module.exports = postcss
postcss.default = postcss
import postcss from './postcss.js'

export default postcss

export const stringify = postcss.stringify
export const fromJSON = postcss.fromJSON
export const plugin = postcss.plugin
export const parse = postcss.parse
export const list = postcss.list

export const document = postcss.document
export const comment = postcss.comment
export const atRule = postcss.atRule
export const rule = postcss.rule
export const decl = postcss.decl
export const root = postcss.root

export const CssSyntaxError = postcss.CssSyntaxError
export const Declaration = postcss.Declaration
export const Container = postcss.Container
export const Processor = postcss.Processor
export const Document = postcss.Document
export const Comment = postcss.Comment
export const Warning = postcss.Warning
export const AtRule = postcss.AtRule
export const Result = postcss.Result
export const Input = postcss.Input
export const Rule = postcss.Rule
export const Root = postcss.Root
export const Node = postcss.Node
'use strict'

let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')
let { existsSync, readFileSync } = require('fs')
let { dirname, join } = require('path')

function fromBase64(str) {
  if (Buffer) {
    return Buffer.from(str, 'base64').toString()
  } else {
    /* c8 ignore next 2 */
    return window.atob(str)
  }
}

class PreviousMap {
  constructor(css, opts) {
    if (opts.map === false) return
    this.loadAnnotation(css)
    this.inline = this.startWith(this.annotation, 'data:')

    let prev = opts.map ? opts.map.prev : undefined
    let text = this.loadMap(opts.from, prev)
    if (!this.mapFile && opts.from) {
      this.mapFile = opts.from
    }
    if (this.mapFile) this.root = dirname(this.mapFile)
    if (text) this.text = text
  }

  consumer() {
    if (!this.consumerCache) {
      this.consumerCache = new SourceMapConsumer(this.text)
    }
    return this.consumerCache
  }

  withContent() {
    return !!(
      this.consumer().sourcesContent &&
      this.consumer().sourcesContent.length > 0
    )
  }

  startWith(string, start) {
    if (!string) return false
    return string.substr(0, start.length) === start
  }

  getAnnotationURL(sourceMapString) {
    return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, '').trim()
  }

  loadAnnotation(css) {
    let comments = css.match(/\/\*\s*# sourceMappingURL=/gm)
    if (!comments) return

    // sourceMappingURLs from comments, strings, etc.
    let start = css.lastIndexOf(comments.pop())
    let end = css.indexOf('*/', start)

    if (start > -1 && end > -1) {
      // Locate the last sourceMappingURL to avoid pickin
      this.annotation = this.getAnnotationURL(css.substring(start, end))
    }
  }

  decodeInline(text) {
    let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/
    let baseUri = /^data:application\/json;base64,/
    let charsetUri = /^data:application\/json;charset=utf-?8,/
    let uri = /^data:application\/json,/

    if (charsetUri.test(text) || uri.test(text)) {
      return decodeURIComponent(text.substr(RegExp.lastMatch.length))
    }

    if (baseCharsetUri.test(text) || baseUri.test(text)) {
      return fromBase64(text.substr(RegExp.lastMatch.length))
    }

    let encoding = text.match(/data:application\/json;([^,]+),/)[1]
    throw new Error('Unsupported source map encoding ' + encoding)
  }

  loadFile(path) {
    this.root = dirname(path)
    if (existsSync(path)) {
      this.mapFile = path
      return readFileSync(path, 'utf-8').toString().trim()
    }
  }

  loadMap(file, prev) {
    if (prev === false) return false

    if (prev) {
      if (typeof prev === 'string') {
        return prev
      } else if (typeof prev === 'function') {
        let prevPath = prev(file)
        if (prevPath) {
          let map = this.loadFile(prevPath)
          if (!map) {
            throw new Error(
              'Unable to load previous source map: ' + prevPath.toString()
            )
          }
          return map
        }
      } else if (prev instanceof SourceMapConsumer) {
        return SourceMapGenerator.fromSourceMap(prev).toString()
      } else if (prev instanceof SourceMapGenerator) {
        return prev.toString()
      } else if (this.isMap(prev)) {
        return JSON.stringify(prev)
      } else {
        throw new Error(
          'Unsupported previous source map format: ' + prev.toString()
        )
      }
    } else if (this.inline) {
      return this.decodeInline(this.annotation)
    } else if (this.annotation) {
      let map = this.annotation
      if (file) map = join(dirname(file), map)
      return this.loadFile(map)
    }
  }

  isMap(map) {
    if (typeof map !== 'object') return false
    return (
      typeof map.mappings === 'string' ||
      typeof map._mappings === 'string' ||
      Array.isArray(map.sections)
    )
  }
}

module.exports = PreviousMap
PreviousMap.default = PreviousMap
'use strict'

let NoWorkResult = require('./no-work-result')
let LazyResult = require('./lazy-result')
let Document = require('./document')
let Root = require('./root')

class Processor {
  constructor(plugins = []) {
    this.version = '8.4.20'
    this.plugins = this.normalize(plugins)
  }

  use(plugin) {
    this.plugins = this.plugins.concat(this.normalize([plugin]))
    return this
  }

  process(css, opts = {}) {
    if (
      this.plugins.length === 0 &&
      typeof opts.parser === 'undefined' &&
      typeof opts.stringifier === 'undefined' &&
      typeof opts.syntax === 'undefined'
    ) {
      return new NoWorkResult(this, css, opts)
    } else {
      return new LazyResult(this, css, opts)
    }
  }

  normalize(plugins) {
    let normalized = []
    for (let i of plugins) {
      if (i.postcss === true) {
        i = i()
      } else if (i.postcss) {
        i = i.postcss
      }

      if (typeof i === 'object' && Array.isArray(i.plugins)) {
        normalized = normalized.concat(i.plugins)
      } else if (typeof i === 'object' && i.postcssPlugin) {
        normalized.push(i)
      } else if (typeof i === 'function') {
        normalized.push(i)
      } else if (typeof i === 'object' && (i.parse || i.stringify)) {
        if (process.env.NODE_ENV !== 'production') {
          throw new Error(
            'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +
              'one of the syntax/parser/stringifier options as outlined ' +
              'in your PostCSS runner documentation.'
          )
        }
      } else {
        throw new Error(i + ' is not a PostCSS plugin')
      }
    }
    return normalized
  }
}

module.exports = Processor
Processor.default = Processor

Root.registerProcessor(Processor)
Document.registerProcessor(Processor)
'use strict'

let Warning = require('./warning')

class Result {
  constructor(processor, root, opts) {
    this.processor = processor
    this.messages = []
    this.root = root
    this.opts = opts
    this.css = undefined
    this.map = undefined
  }

  toString() {
    return this.css
  }

  warn(text, opts = {}) {
    if (!opts.plugin) {
      if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
        opts.plugin = this.lastPlugin.postcssPlugin
      }
    }

    let warning = new Warning(text, opts)
    this.messages.push(warning)

    return warning
  }

  warnings() {
    return this.messages.filter(i => i.type === 'warning')
  }

  get content() {
    return this.css
  }
}

module.exports = Result
Result.default = Result
'use strict'

let Container = require('./container')

let LazyResult, Processor

class Root extends Container {
  constructor(defaults) {
    super(defaults)
    this.type = 'root'
    if (!this.nodes) this.nodes = []
  }

  removeChild(child, ignore) {
    let index = this.index(child)

    if (!ignore && index === 0 && this.nodes.length > 1) {
      this.nodes[1].raws.before = this.nodes[index].raws.before
    }

    return super.removeChild(child)
  }

  normalize(child, sample, type) {
    let nodes = super.normalize(child)

    if (sample) {
      if (type === 'prepend') {
        if (this.nodes.length > 1) {
          sample.raws.before = this.nodes[1].raws.before
        } else {
          delete sample.raws.before
        }
      } else if (this.first !== sample) {
        for (let node of nodes) {
          node.raws.before = sample.raws.before
        }
      }
    }

    return nodes
  }

  toResult(opts = {}) {
    let lazy = new LazyResult(new Processor(), this, opts)
    return lazy.stringify()
  }
}

Root.registerLazyResult = dependant => {
  LazyResult = dependant
}

Root.registerProcessor = dependant => {
  Processor = dependant
}

module.exports = Root
Root.default = Root

Container.registerRoot(Root)
'use strict'

let Container = require('./container')
let list = require('./list')

class Rule extends Container {
  constructor(defaults) {
    super(defaults)
    this.type = 'rule'
    if (!this.nodes) this.nodes = []
  }

  get selectors() {
    return list.comma(this.selector)
  }

  set selectors(values) {
    let match = this.selector ? this.selector.match(/,\s*/) : null
    let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')
    this.selector = values.join(sep)
  }
}

module.exports = Rule
Rule.default = Rule

Container.registerRule(Rule)
'use strict'

const DEFAULT_RAW = {
  colon: ': ',
  indent: '    ',
  beforeDecl: '\n',
  beforeRule: '\n',
  beforeOpen: ' ',
  beforeClose: '\n',
  beforeComment: '\n',
  after: '\n',
  emptyBody: '',
  commentLeft: ' ',
  commentRight: ' ',
  semicolon: false
}

function capitalize(str) {
  return str[0].toUpperCase() + str.slice(1)
}

class Stringifier {
  constructor(builder) {
    this.builder = builder
  }

  stringify(node, semicolon) {
    /* c8 ignore start */
    if (!this[node.type]) {
      throw new Error(
        'Unknown AST node type ' +
          node.type +
          '. ' +
          'Maybe you need to change PostCSS stringifier.'
      )
    }
    /* c8 ignore stop */
    this[node.type](node, semicolon)
  }

  document(node) {
    this.body(node)
  }

  root(node) {
    this.body(node)
    if (node.raws.after) this.builder(node.raws.after)
  }

  comment(node) {
    let left = this.raw(node, 'left', 'commentLeft')
    let right = this.raw(node, 'right', 'commentRight')
    this.builder('/*' + left + node.text + right + '*/', node)
  }

  decl(node, semicolon) {
    let between = this.raw(node, 'between', 'colon')
    let string = node.prop + between + this.rawValue(node, 'value')

    if (node.important) {
      string += node.raws.important || ' !important'
    }

    if (semicolon) string += ';'
    this.builder(string, node)
  }

  rule(node) {
    this.block(node, this.rawValue(node, 'selector'))
    if (node.raws.ownSemicolon) {
      this.builder(node.raws.ownSemicolon, node, 'end')
    }
  }

  atrule(node, semicolon) {
    let name = '@' + node.name
    let params = node.params ? this.rawValue(node, 'params') : ''

    if (typeof node.raws.afterName !== 'undefined') {
      name += node.raws.afterName
    } else if (params) {
      name += ' '
    }

    if (node.nodes) {
      this.block(node, name + params)
    } else {
      let end = (node.raws.between || '') + (semicolon ? ';' : '')
      this.builder(name + params + end, node)
    }
  }

  body(node) {
    let last = node.nodes.length - 1
    while (last > 0) {
      if (node.nodes[last].type !== 'comment') break
      last -= 1
    }

    let semicolon = this.raw(node, 'semicolon')
    for (let i = 0; i < node.nodes.length; i++) {
      let child = node.nodes[i]
      let before = this.raw(child, 'before')
      if (before) this.builder(before)
      this.stringify(child, last !== i || semicolon)
    }
  }

  block(node, start) {
    let between = this.raw(node, 'between', 'beforeOpen')
    this.builder(start + between + '{', node, 'start')

    let after
    if (node.nodes && node.nodes.length) {
      this.body(node)
      after = this.raw(node, 'after')
    } else {
      after = this.raw(node, 'after', 'emptyBody')
    }

    if (after) this.builder(after)
    this.builder('}', node, 'end')
  }

  raw(node, own, detect) {
    let value
    if (!detect) detect = own

    // Already had
    if (own) {
      value = node.raws[own]
      if (typeof value !== 'undefined') return value
    }

    let parent = node.parent

    if (detect === 'before') {
      // Hack for first rule in CSS
      if (!parent || (parent.type === 'root' && parent.first === node)) {
        return ''
      }

      // `root` nodes in `document` should use only their own raws
      if (parent && parent.type === 'document') {
        return ''
      }
    }

    // Floating child without parent
    if (!parent) return DEFAULT_RAW[detect]

    // Detect style by other nodes
    let root = node.root()
    if (!root.rawCache) root.rawCache = {}
    if (typeof root.rawCache[detect] !== 'undefined') {
      return root.rawCache[detect]
    }

    if (detect === 'before' || detect === 'after') {
      return this.beforeAfter(node, detect)
    } else {
      let method = 'raw' + capitalize(detect)
      if (this[method]) {
        value = this[method](root, node)
      } else {
        root.walk(i => {
          value = i.raws[own]
          if (typeof value !== 'undefined') return false
        })
      }
    }

    if (typeof value === 'undefined') value = DEFAULT_RAW[detect]

    root.rawCache[detect] = value
    return value
  }

  rawSemicolon(root) {
    let value
    root.walk(i => {
      if (i.nodes && i.nodes.length && i.last.type === 'decl') {
        value = i.raws.semicolon
        if (typeof value !== 'undefined') return false
      }
    })
    return value
  }

  rawEmptyBody(root) {
    let value
    root.walk(i => {
      if (i.nodes && i.nodes.length === 0) {
        value = i.raws.after
        if (typeof value !== 'undefined') return false
      }
    })
    return value
  }

  rawIndent(root) {
    if (root.raws.indent) return root.raws.indent
    let value
    root.walk(i => {
      let p = i.parent
      if (p && p !== root && p.parent && p.parent === root) {
        if (typeof i.raws.before !== 'undefined') {
          let parts = i.raws.before.split('\n')
          value = parts[parts.length - 1]
          value = value.replace(/\S/g, '')
          return false
        }
      }
    })
    return value
  }

  rawBeforeComment(root, node) {
    let value
    root.walkComments(i => {
      if (typeof i.raws.before !== 'undefined') {
        value = i.raws.before
        if (value.includes('\n')) {
          value = value.replace(/[^\n]+$/, '')
        }
        return false
      }
    })
    if (typeof value === 'undefined') {
      value = this.raw(node, null, 'beforeDecl')
    } else if (value) {
      value = value.replace(/\S/g, '')
    }
    return value
  }

  rawBeforeDecl(root, node) {
    let value
    root.walkDecls(i => {
      if (typeof i.raws.before !== 'undefined') {
        value = i.raws.before
        if (value.includes('\n')) {
          value = value.replace(/[^\n]+$/, '')
        }
        return false
      }
    })
    if (typeof value === 'undefined') {
      value = this.raw(node, null, 'beforeRule')
    } else if (value) {
      value = value.replace(/\S/g, '')
    }
    return value
  }

  rawBeforeRule(root) {
    let value
    root.walk(i => {
      if (i.nodes && (i.parent !== root || root.first !== i)) {
        if (typeof i.raws.before !== 'undefined') {
          value = i.raws.before
          if (value.includes('\n')) {
            value = value.replace(/[^\n]+$/, '')
          }
          return false
        }
      }
    })
    if (value) value = value.replace(/\S/g, '')
    return value
  }

  rawBeforeClose(root) {
    let value
    root.walk(i => {
      if (i.nodes && i.nodes.length > 0) {
        if (typeof i.raws.after !== 'undefined') {
          value = i.raws.after
          if (value.includes('\n')) {
            value = value.replace(/[^\n]+$/, '')
          }
          return false
        }
      }
    })
    if (value) value = value.replace(/\S/g, '')
    return value
  }

  rawBeforeOpen(root) {
    let value
    root.walk(i => {
      if (i.type !== 'decl') {
        value = i.raws.between
        if (typeof value !== 'undefined') return false
      }
    })
    return value
  }

  rawColon(root) {
    let value
    root.walkDecls(i => {
      if (typeof i.raws.between !== 'undefined') {
        value = i.raws.between.replace(/[^\s:]/g, '')
        return false
      }
    })
    return value
  }

  beforeAfter(node, detect) {
    let value
    if (node.type === 'decl') {
      value = this.raw(node, null, 'beforeDecl')
    } else if (node.type === 'comment') {
      value = this.raw(node, null, 'beforeComment')
    } else if (detect === 'before') {
      value = this.raw(node, null, 'beforeRule')
    } else {
      value = this.raw(node, null, 'beforeClose')
    }

    let buf = node.parent
    let depth = 0
    while (buf && buf.type !== 'root') {
      depth += 1
      buf = buf.parent
    }

    if (value.includes('\n')) {
      let indent = this.raw(node, null, 'indent')
      if (indent.length) {
        for (let step = 0; step < depth; step++) value += indent
      }
    }

    return value
  }

  rawValue(node, prop) {
    let value = node[prop]
    let raw = node.raws[prop]
    if (raw && raw.value === value) {
      return raw.raw
    }

    return value
  }
}

module.exports = Stringifier
Stringifier.default = Stringifier
'use strict'

let Stringifier = require('./stringifier')

function stringify(node, builder) {
  let str = new Stringifier(builder)
  str.stringify(node)
}

module.exports = stringify
stringify.default = stringify
'use strict'

module.exports.isClean = Symbol('isClean')

module.exports.my = Symbol('my')
'use strict'

let pico = require('picocolors')

let tokenizer = require('./tokenize')

let Input

function registerInput(dependant) {
  Input = dependant
}

const HIGHLIGHT_THEME = {
  'brackets': pico.cyan,
  'at-word': pico.cyan,
  'comment': pico.gray,
  'string': pico.green,
  'class': pico.yellow,
  'hash': pico.magenta,
  'call': pico.cyan,
  '(': pico.cyan,
  ')': pico.cyan,
  '{': pico.yellow,
  '}': pico.yellow,
  '[': pico.yellow,
  ']': pico.yellow,
  ':': pico.yellow,
  ';': pico.yellow
}

function getTokenType([type, value], processor) {
  if (type === 'word') {
    if (value[0] === '.') {
      return 'class'
    }
    if (value[0] === '#') {
      return 'hash'
    }
  }

  if (!processor.endOfFile()) {
    let next = processor.nextToken()
    processor.back(next)
    if (next[0] === 'brackets' || next[0] === '(') return 'call'
  }

  return type
}

function terminalHighlight(css) {
  let processor = tokenizer(new Input(css), { ignoreErrors: true })
  let result = ''
  while (!processor.endOfFile()) {
    let token = processor.nextToken()
    let color = HIGHLIGHT_THEME[getTokenType(token, processor)]
    if (color) {
      result += token[1]
        .split(/\r?\n/)
        .map(i => color(i))
        .join('\n')
    } else {
      result += token[1]
    }
  }
  return result
}

terminalHighlight.registerInput = registerInput

module.exports = terminalHighlight
'use strict'

const SINGLE_QUOTE = "'".charCodeAt(0)
const DOUBLE_QUOTE = '"'.charCodeAt(0)
const BACKSLASH = '\\'.charCodeAt(0)
const SLASH = '/'.charCodeAt(0)
const NEWLINE = '\n'.charCodeAt(0)
const SPACE = ' '.charCodeAt(0)
const FEED = '\f'.charCodeAt(0)
const TAB = '\t'.charCodeAt(0)
const CR = '\r'.charCodeAt(0)
const OPEN_SQUARE = '['.charCodeAt(0)
const CLOSE_SQUARE = ']'.charCodeAt(0)
const OPEN_PARENTHESES = '('.charCodeAt(0)
const CLOSE_PARENTHESES = ')'.charCodeAt(0)
const OPEN_CURLY = '{'.charCodeAt(0)
const CLOSE_CURLY = '}'.charCodeAt(0)
const SEMICOLON = ';'.charCodeAt(0)
const ASTERISK = '*'.charCodeAt(0)
const COLON = ':'.charCodeAt(0)
const AT = '@'.charCodeAt(0)

const RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g
const RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g
const RE_BAD_BRACKET = /.[\n"'(/\\]/
const RE_HEX_ESCAPE = /[\da-f]/i

module.exports = function tokenizer(input, options = {}) {
  let css = input.css.valueOf()
  let ignore = options.ignoreErrors

  let code, next, quote, content, escape
  let escaped, escapePos, prev, n, currentToken

  let length = css.length
  let pos = 0
  let buffer = []
  let returned = []

  function position() {
    return pos
  }

  function unclosed(what) {
    throw input.error('Unclosed ' + what, pos)
  }

  function endOfFile() {
    return returned.length === 0 && pos >= length
  }

  function nextToken(opts) {
    if (returned.length) return returned.pop()
    if (pos >= length) return

    let ignoreUnclosed = opts ? opts.ignoreUnclosed : false

    code = css.charCodeAt(pos)

    switch (code) {
      case NEWLINE:
      case SPACE:
      case TAB:
      case CR:
      case FEED: {
        next = pos
        do {
          next += 1
          code = css.charCodeAt(next)
        } while (
          code === SPACE ||
          code === NEWLINE ||
          code === TAB ||
          code === CR ||
          code === FEED
        )

        currentToken = ['space', css.slice(pos, next)]
        pos = next - 1
        break
      }

      case OPEN_SQUARE:
      case CLOSE_SQUARE:
      case OPEN_CURLY:
      case CLOSE_CURLY:
      case COLON:
      case SEMICOLON:
      case CLOSE_PARENTHESES: {
        let controlChar = String.fromCharCode(code)
        currentToken = [controlChar, controlChar, pos]
        break
      }

      case OPEN_PARENTHESES: {
        prev = buffer.length ? buffer.pop()[1] : ''
        n = css.charCodeAt(pos + 1)
        if (
          prev === 'url' &&
          n !== SINGLE_QUOTE &&
          n !== DOUBLE_QUOTE &&
          n !== SPACE &&
          n !== NEWLINE &&
          n !== TAB &&
          n !== FEED &&
          n !== CR
        ) {
          next = pos
          do {
            escaped = false
            next = css.indexOf(')', next + 1)
            if (next === -1) {
              if (ignore || ignoreUnclosed) {
                next = pos
                break
              } else {
                unclosed('bracket')
              }
            }
            escapePos = next
            while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
              escapePos -= 1
              escaped = !escaped
            }
          } while (escaped)

          currentToken = ['brackets', css.slice(pos, next + 1), pos, next]

          pos = next
        } else {
          next = css.indexOf(')', pos + 1)
          content = css.slice(pos, next + 1)

          if (next === -1 || RE_BAD_BRACKET.test(content)) {
            currentToken = ['(', '(', pos]
          } else {
            currentToken = ['brackets', content, pos, next]
            pos = next
          }
        }

        break
      }

      case SINGLE_QUOTE:
      case DOUBLE_QUOTE: {
        quote = code === SINGLE_QUOTE ? "'" : '"'
        next = pos
        do {
          escaped = false
          next = css.indexOf(quote, next + 1)
          if (next === -1) {
            if (ignore || ignoreUnclosed) {
              next = pos + 1
              break
            } else {
              unclosed('string')
            }
          }
          escapePos = next
          while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
            escapePos -= 1
            escaped = !escaped
          }
        } while (escaped)

        currentToken = ['string', css.slice(pos, next + 1), pos, next]
        pos = next
        break
      }

      case AT: {
        RE_AT_END.lastIndex = pos + 1
        RE_AT_END.test(css)
        if (RE_AT_END.lastIndex === 0) {
          next = css.length - 1
        } else {
          next = RE_AT_END.lastIndex - 2
        }

        currentToken = ['at-word', css.slice(pos, next + 1), pos, next]

        pos = next
        break
      }

      case BACKSLASH: {
        next = pos
        escape = true
        while (css.charCodeAt(next + 1) === BACKSLASH) {
          next += 1
          escape = !escape
        }
        code = css.charCodeAt(next + 1)
        if (
          escape &&
          code !== SLASH &&
          code !== SPACE &&
          code !== NEWLINE &&
          code !== TAB &&
          code !== CR &&
          code !== FEED
        ) {
          next += 1
          if (RE_HEX_ESCAPE.test(css.charAt(next))) {
            while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
              next += 1
            }
            if (css.charCodeAt(next + 1) === SPACE) {
              next += 1
            }
          }
        }

        currentToken = ['word', css.slice(pos, next + 1), pos, next]

        pos = next
        break
      }

      default: {
        if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
          next = css.indexOf('*/', pos + 2) + 1
          if (next === 0) {
            if (ignore || ignoreUnclosed) {
              next = css.length
            } else {
              unclosed('comment')
            }
          }

          currentToken = ['comment', css.slice(pos, next + 1), pos, next]
          pos = next
        } else {
          RE_WORD_END.lastIndex = pos + 1
          RE_WORD_END.test(css)
          if (RE_WORD_END.lastIndex === 0) {
            next = css.length - 1
          } else {
            next = RE_WORD_END.lastIndex - 2
          }

          currentToken = ['word', css.slice(pos, next + 1), pos, next]
          buffer.push(currentToken)
          pos = next
        }

        break
      }
    }

    pos++
    return currentToken
  }

  function back(token) {
    returned.push(token)
  }

  return {
    back,
    nextToken,
    endOfFile,
    position
  }
}
/* eslint-disable no-console */
'use strict'

let printed = {}

module.exports = function warnOnce(message) {
  if (printed[message]) return
  printed[message] = true

  if (typeof console !== 'undefined' && console.warn) {
    console.warn(message)
  }
}
'use strict'

class Warning {
  constructor(text, opts = {}) {
    this.type = 'warning'
    this.text = text

    if (opts.node && opts.node.source) {
      let range = opts.node.rangeBy(opts)
      this.line = range.start.line
      this.column = range.start.column
      this.endLine = range.end.line
      this.endColumn = range.end.column
    }

    for (let opt in opts) this[opt] = opts[opt]
  }

  toString() {
    if (this.node) {
      return this.node.error(this.text, {
        plugin: this.plugin,
        index: this.index,
        word: this.word
      }).message
    }

    if (this.plugin) {
      return this.plugin + ': ' + this.text
    }

    return this.text
  }
}

module.exports = Warning
Warning.default = Warning
The MIT License (MIT)

Copyright 2013 Andrey Sitnik <andrey@sitnik.ru>

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "postcss",
  "version": "8.4.20",
  "description": "Tool for transforming styles with JS plugins",
  "engines": {
    "node": "^10 || ^12 || >=14"
  },
  "exports": {
    ".": {
      "require": "./lib/postcss.js",
      "import": "./lib/postcss.mjs",
      "types": "./lib/postcss.d.ts"
    },
    "./lib/at-rule": "./lib/at-rule.js",
    "./lib/comment": "./lib/comment.js",
    "./lib/container": "./lib/container.js",
    "./lib/css-syntax-error": "./lib/css-syntax-error.js",
    "./lib/declaration": "./lib/declaration.js",
    "./lib/fromJSON": "./lib/fromJSON.js",
    "./lib/input": "./lib/input.js",
    "./lib/lazy-result": "./lib/lazy-result.js",
    "./lib/no-work-result": "./lib/no-work-result.js",
    "./lib/list": "./lib/list.js",
    "./lib/map-generator": "./lib/map-generator.js",
    "./lib/node": "./lib/node.js",
    "./lib/parse": "./lib/parse.js",
    "./lib/parser": "./lib/parser.js",
    "./lib/postcss": "./lib/postcss.js",
    "./lib/previous-map": "./lib/previous-map.js",
    "./lib/processor": "./lib/processor.js",
    "./lib/result": "./lib/result.js",
    "./lib/root": "./lib/root.js",
    "./lib/rule": "./lib/rule.js",
    "./lib/stringifier": "./lib/stringifier.js",
    "./lib/stringify": "./lib/stringify.js",
    "./lib/symbols": "./lib/symbols.js",
    "./lib/terminal-highlight": "./lib/terminal-highlight.js",
    "./lib/tokenize": "./lib/tokenize.js",
    "./lib/warn-once": "./lib/warn-once.js",
    "./lib/warning": "./lib/warning.js",
    "./package.json": "./package.json"
  },
  "main": "./lib/postcss.js",
  "types": "./lib/postcss.d.ts",
  "funding": [
    {
      "type": "opencollective",
      "url": "https://opencollective.com/postcss/"
    },
    {
      "type": "tidelift",
      "url": "https://tidelift.com/funding/github/npm/postcss"
    }
  ],
  "author": "Andrey Sitnik <andrey@sitnik.ru>",
  "license": "MIT",
  "homepage": "https://postcss.org/",
  "repository": "postcss/postcss",
  "dependencies": {
    "nanoid": "^3.3.4",
    "picocolors": "^1.0.0",
    "source-map-js": "^1.0.2"
  },
  "browser": {
    "./lib/terminal-highlight": false,
    "source-map-js": false,
    "path": false,
    "url": false,
    "fs": false
  }
}(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else if(typeof exports === 'object')
		exports["sourceMap"] = factory();
	else
		root["sourceMap"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;
/******/
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

	/*
	 * Copyright 2009-2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE.txt or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
	exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;
	exports.SourceNode = __webpack_require__(10).SourceNode;


/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	
	var base64VLQ = __webpack_require__(2);
	var util = __webpack_require__(4);
	var ArraySet = __webpack_require__(5).ArraySet;
	var MappingList = __webpack_require__(6).MappingList;
	
	/**
	 * An instance of the SourceMapGenerator represents a source map which is
	 * being built incrementally. You may pass an object with the following
	 * properties:
	 *
	 *   - file: The filename of the generated source.
	 *   - sourceRoot: A root for all relative URLs in this source map.
	 */
	function SourceMapGenerator(aArgs) {
	  if (!aArgs) {
	    aArgs = {};
	  }
	  this._file = util.getArg(aArgs, 'file', null);
	  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
	  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
	  this._sources = new ArraySet();
	  this._names = new ArraySet();
	  this._mappings = new MappingList();
	  this._sourcesContents = null;
	}
	
	SourceMapGenerator.prototype._version = 3;
	
	/**
	 * Creates a new SourceMapGenerator based on a SourceMapConsumer
	 *
	 * @param aSourceMapConsumer The SourceMap.
	 */
	SourceMapGenerator.fromSourceMap =
	  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
	    var sourceRoot = aSourceMapConsumer.sourceRoot;
	    var generator = new SourceMapGenerator({
	      file: aSourceMapConsumer.file,
	      sourceRoot: sourceRoot
	    });
	    aSourceMapConsumer.eachMapping(function (mapping) {
	      var newMapping = {
	        generated: {
	          line: mapping.generatedLine,
	          column: mapping.generatedColumn
	        }
	      };
	
	      if (mapping.source != null) {
	        newMapping.source = mapping.source;
	        if (sourceRoot != null) {
	          newMapping.source = util.relative(sourceRoot, newMapping.source);
	        }
	
	        newMapping.original = {
	          line: mapping.originalLine,
	          column: mapping.originalColumn
	        };
	
	        if (mapping.name != null) {
	          newMapping.name = mapping.name;
	        }
	      }
	
	      generator.addMapping(newMapping);
	    });
	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
	      var sourceRelative = sourceFile;
	      if (sourceRoot !== null) {
	        sourceRelative = util.relative(sourceRoot, sourceFile);
	      }
	
	      if (!generator._sources.has(sourceRelative)) {
	        generator._sources.add(sourceRelative);
	      }
	
	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
	      if (content != null) {
	        generator.setSourceContent(sourceFile, content);
	      }
	    });
	    return generator;
	  };
	
	/**
	 * Add a single mapping from original source line and column to the generated
	 * source's line and column for this source map being created. The mapping
	 * object should have the following properties:
	 *
	 *   - generated: An object with the generated line and column positions.
	 *   - original: An object with the original line and column positions.
	 *   - source: The original source file (relative to the sourceRoot).
	 *   - name: An optional original token name for this mapping.
	 */
	SourceMapGenerator.prototype.addMapping =
	  function SourceMapGenerator_addMapping(aArgs) {
	    var generated = util.getArg(aArgs, 'generated');
	    var original = util.getArg(aArgs, 'original', null);
	    var source = util.getArg(aArgs, 'source', null);
	    var name = util.getArg(aArgs, 'name', null);
	
	    if (!this._skipValidation) {
	      this._validateMapping(generated, original, source, name);
	    }
	
	    if (source != null) {
	      source = String(source);
	      if (!this._sources.has(source)) {
	        this._sources.add(source);
	      }
	    }
	
	    if (name != null) {
	      name = String(name);
	      if (!this._names.has(name)) {
	        this._names.add(name);
	      }
	    }
	
	    this._mappings.add({
	      generatedLine: generated.line,
	      generatedColumn: generated.column,
	      originalLine: original != null && original.line,
	      originalColumn: original != null && original.column,
	      source: source,
	      name: name
	    });
	  };
	
	/**
	 * Set the source content for a source file.
	 */
	SourceMapGenerator.prototype.setSourceContent =
	  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
	    var source = aSourceFile;
	    if (this._sourceRoot != null) {
	      source = util.relative(this._sourceRoot, source);
	    }
	
	    if (aSourceContent != null) {
	      // Add the source content to the _sourcesContents map.
	      // Create a new _sourcesContents map if the property is null.
	      if (!this._sourcesContents) {
	        this._sourcesContents = Object.create(null);
	      }
	      this._sourcesContents[util.toSetString(source)] = aSourceContent;
	    } else if (this._sourcesContents) {
	      // Remove the source file from the _sourcesContents map.
	      // If the _sourcesContents map is empty, set the property to null.
	      delete this._sourcesContents[util.toSetString(source)];
	      if (Object.keys(this._sourcesContents).length === 0) {
	        this._sourcesContents = null;
	      }
	    }
	  };
	
	/**
	 * Applies the mappings of a sub-source-map for a specific source file to the
	 * source map being generated. Each mapping to the supplied source file is
	 * rewritten using the supplied source map. Note: The resolution for the
	 * resulting mappings is the minimium of this map and the supplied map.
	 *
	 * @param aSourceMapConsumer The source map to be applied.
	 * @param aSourceFile Optional. The filename of the source file.
	 *        If omitted, SourceMapConsumer's file property will be used.
	 * @param aSourceMapPath Optional. The dirname of the path to the source map
	 *        to be applied. If relative, it is relative to the SourceMapConsumer.
	 *        This parameter is needed when the two source maps aren't in the same
	 *        directory, and the source map to be applied contains relative source
	 *        paths. If so, those relative source paths need to be rewritten
	 *        relative to the SourceMapGenerator.
	 */
	SourceMapGenerator.prototype.applySourceMap =
	  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
	    var sourceFile = aSourceFile;
	    // If aSourceFile is omitted, we will use the file property of the SourceMap
	    if (aSourceFile == null) {
	      if (aSourceMapConsumer.file == null) {
	        throw new Error(
	          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
	          'or the source map\'s "file" property. Both were omitted.'
	        );
	      }
	      sourceFile = aSourceMapConsumer.file;
	    }
	    var sourceRoot = this._sourceRoot;
	    // Make "sourceFile" relative if an absolute Url is passed.
	    if (sourceRoot != null) {
	      sourceFile = util.relative(sourceRoot, sourceFile);
	    }
	    // Applying the SourceMap can add and remove items from the sources and
	    // the names array.
	    var newSources = new ArraySet();
	    var newNames = new ArraySet();
	
	    // Find mappings for the "sourceFile"
	    this._mappings.unsortedForEach(function (mapping) {
	      if (mapping.source === sourceFile && mapping.originalLine != null) {
	        // Check if it can be mapped by the source map, then update the mapping.
	        var original = aSourceMapConsumer.originalPositionFor({
	          line: mapping.originalLine,
	          column: mapping.originalColumn
	        });
	        if (original.source != null) {
	          // Copy mapping
	          mapping.source = original.source;
	          if (aSourceMapPath != null) {
	            mapping.source = util.join(aSourceMapPath, mapping.source)
	          }
	          if (sourceRoot != null) {
	            mapping.source = util.relative(sourceRoot, mapping.source);
	          }
	          mapping.originalLine = original.line;
	          mapping.originalColumn = original.column;
	          if (original.name != null) {
	            mapping.name = original.name;
	          }
	        }
	      }
	
	      var source = mapping.source;
	      if (source != null && !newSources.has(source)) {
	        newSources.add(source);
	      }
	
	      var name = mapping.name;
	      if (name != null && !newNames.has(name)) {
	        newNames.add(name);
	      }
	
	    }, this);
	    this._sources = newSources;
	    this._names = newNames;
	
	    // Copy sourcesContents of applied map.
	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
	      if (content != null) {
	        if (aSourceMapPath != null) {
	          sourceFile = util.join(aSourceMapPath, sourceFile);
	        }
	        if (sourceRoot != null) {
	          sourceFile = util.relative(sourceRoot, sourceFile);
	        }
	        this.setSourceContent(sourceFile, content);
	      }
	    }, this);
	  };
	
	/**
	 * A mapping can have one of the three levels of data:
	 *
	 *   1. Just the generated position.
	 *   2. The Generated position, original position, and original source.
	 *   3. Generated and original position, original source, as well as a name
	 *      token.
	 *
	 * To maintain consistency, we validate that any new mapping being added falls
	 * in to one of these categories.
	 */
	SourceMapGenerator.prototype._validateMapping =
	  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
	                                              aName) {
	    // When aOriginal is truthy but has empty values for .line and .column,
	    // it is most likely a programmer error. In this case we throw a very
	    // specific error message to try to guide them the right way.
	    // For example: https://github.com/Polymer/polymer-bundler/pull/519
	    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
	        throw new Error(
	            'original.line and original.column are not numbers -- you probably meant to omit ' +
	            'the original mapping entirely and only map the generated position. If so, pass ' +
	            'null for the original mapping instead of an object with empty or null values.'
	        );
	    }
	
	    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
	        && aGenerated.line > 0 && aGenerated.column >= 0
	        && !aOriginal && !aSource && !aName) {
	      // Case 1.
	      return;
	    }
	    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
	             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
	             && aGenerated.line > 0 && aGenerated.column >= 0
	             && aOriginal.line > 0 && aOriginal.column >= 0
	             && aSource) {
	      // Cases 2 and 3.
	      return;
	    }
	    else {
	      throw new Error('Invalid mapping: ' + JSON.stringify({
	        generated: aGenerated,
	        source: aSource,
	        original: aOriginal,
	        name: aName
	      }));
	    }
	  };
	
	/**
	 * Serialize the accumulated mappings in to the stream of base 64 VLQs
	 * specified by the source map format.
	 */
	SourceMapGenerator.prototype._serializeMappings =
	  function SourceMapGenerator_serializeMappings() {
	    var previousGeneratedColumn = 0;
	    var previousGeneratedLine = 1;
	    var previousOriginalColumn = 0;
	    var previousOriginalLine = 0;
	    var previousName = 0;
	    var previousSource = 0;
	    var result = '';
	    var next;
	    var mapping;
	    var nameIdx;
	    var sourceIdx;
	
	    var mappings = this._mappings.toArray();
	    for (var i = 0, len = mappings.length; i < len; i++) {
	      mapping = mappings[i];
	      next = ''
	
	      if (mapping.generatedLine !== previousGeneratedLine) {
	        previousGeneratedColumn = 0;
	        while (mapping.generatedLine !== previousGeneratedLine) {
	          next += ';';
	          previousGeneratedLine++;
	        }
	      }
	      else {
	        if (i > 0) {
	          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
	            continue;
	          }
	          next += ',';
	        }
	      }
	
	      next += base64VLQ.encode(mapping.generatedColumn
	                                 - previousGeneratedColumn);
	      previousGeneratedColumn = mapping.generatedColumn;
	
	      if (mapping.source != null) {
	        sourceIdx = this._sources.indexOf(mapping.source);
	        next += base64VLQ.encode(sourceIdx - previousSource);
	        previousSource = sourceIdx;
	
	        // lines are stored 0-based in SourceMap spec version 3
	        next += base64VLQ.encode(mapping.originalLine - 1
	                                   - previousOriginalLine);
	        previousOriginalLine = mapping.originalLine - 1;
	
	        next += base64VLQ.encode(mapping.originalColumn
	                                   - previousOriginalColumn);
	        previousOriginalColumn = mapping.originalColumn;
	
	        if (mapping.name != null) {
	          nameIdx = this._names.indexOf(mapping.name);
	          next += base64VLQ.encode(nameIdx - previousName);
	          previousName = nameIdx;
	        }
	      }
	
	      result += next;
	    }
	
	    return result;
	  };
	
	SourceMapGenerator.prototype._generateSourcesContent =
	  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
	    return aSources.map(function (source) {
	      if (!this._sourcesContents) {
	        return null;
	      }
	      if (aSourceRoot != null) {
	        source = util.relative(aSourceRoot, source);
	      }
	      var key = util.toSetString(source);
	      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
	        ? this._sourcesContents[key]
	        : null;
	    }, this);
	  };
	
	/**
	 * Externalize the source map.
	 */
	SourceMapGenerator.prototype.toJSON =
	  function SourceMapGenerator_toJSON() {
	    var map = {
	      version: this._version,
	      sources: this._sources.toArray(),
	      names: this._names.toArray(),
	      mappings: this._serializeMappings()
	    };
	    if (this._file != null) {
	      map.file = this._file;
	    }
	    if (this._sourceRoot != null) {
	      map.sourceRoot = this._sourceRoot;
	    }
	    if (this._sourcesContents) {
	      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
	    }
	
	    return map;
	  };
	
	/**
	 * Render the source map being generated to a string.
	 */
	SourceMapGenerator.prototype.toString =
	  function SourceMapGenerator_toString() {
	    return JSON.stringify(this.toJSON());
	  };
	
	exports.SourceMapGenerator = SourceMapGenerator;


/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 *
	 * Based on the Base 64 VLQ implementation in Closure Compiler:
	 * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
	 *
	 * Copyright 2011 The Closure Compiler Authors. All rights reserved.
	 * Redistribution and use in source and binary forms, with or without
	 * modification, are permitted provided that the following conditions are
	 * met:
	 *
	 *  * Redistributions of source code must retain the above copyright
	 *    notice, this list of conditions and the following disclaimer.
	 *  * Redistributions in binary form must reproduce the above
	 *    copyright notice, this list of conditions and the following
	 *    disclaimer in the documentation and/or other materials provided
	 *    with the distribution.
	 *  * Neither the name of Google Inc. nor the names of its
	 *    contributors may be used to endorse or promote products derived
	 *    from this software without specific prior written permission.
	 *
	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
	 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
	 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
	 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
	 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
	 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
	 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
	 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
	 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
	 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
	 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
	 */
	
	var base64 = __webpack_require__(3);
	
	// A single base 64 digit can contain 6 bits of data. For the base 64 variable
	// length quantities we use in the source map spec, the first bit is the sign,
	// the next four bits are the actual value, and the 6th bit is the
	// continuation bit. The continuation bit tells us whether there are more
	// digits in this value following this digit.
	//
	//   Continuation
	//   |    Sign
	//   |    |
	//   V    V
	//   101011
	
	var VLQ_BASE_SHIFT = 5;
	
	// binary: 100000
	var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
	
	// binary: 011111
	var VLQ_BASE_MASK = VLQ_BASE - 1;
	
	// binary: 100000
	var VLQ_CONTINUATION_BIT = VLQ_BASE;
	
	/**
	 * Converts from a two-complement value to a value where the sign bit is
	 * placed in the least significant bit.  For example, as decimals:
	 *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
	 *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
	 */
	function toVLQSigned(aValue) {
	  return aValue < 0
	    ? ((-aValue) << 1) + 1
	    : (aValue << 1) + 0;
	}
	
	/**
	 * Converts to a two-complement value from a value where the sign bit is
	 * placed in the least significant bit.  For example, as decimals:
	 *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
	 *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
	 */
	function fromVLQSigned(aValue) {
	  var isNegative = (aValue & 1) === 1;
	  var shifted = aValue >> 1;
	  return isNegative
	    ? -shifted
	    : shifted;
	}
	
	/**
	 * Returns the base 64 VLQ encoded value.
	 */
	exports.encode = function base64VLQ_encode(aValue) {
	  var encoded = "";
	  var digit;
	
	  var vlq = toVLQSigned(aValue);
	
	  do {
	    digit = vlq & VLQ_BASE_MASK;
	    vlq >>>= VLQ_BASE_SHIFT;
	    if (vlq > 0) {
	      // There are still more digits in this value, so we must make sure the
	      // continuation bit is marked.
	      digit |= VLQ_CONTINUATION_BIT;
	    }
	    encoded += base64.encode(digit);
	  } while (vlq > 0);
	
	  return encoded;
	};
	
	/**
	 * Decodes the next base 64 VLQ value from the given string and returns the
	 * value and the rest of the string via the out parameter.
	 */
	exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
	  var strLen = aStr.length;
	  var result = 0;
	  var shift = 0;
	  var continuation, digit;
	
	  do {
	    if (aIndex >= strLen) {
	      throw new Error("Expected more digits in base 64 VLQ value.");
	    }
	
	    digit = base64.decode(aStr.charCodeAt(aIndex++));
	    if (digit === -1) {
	      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
	    }
	
	    continuation = !!(digit & VLQ_CONTINUATION_BIT);
	    digit &= VLQ_BASE_MASK;
	    result = result + (digit << shift);
	    shift += VLQ_BASE_SHIFT;
	  } while (continuation);
	
	  aOutParam.value = fromVLQSigned(result);
	  aOutParam.rest = aIndex;
	};


/***/ }),
/* 3 */
/***/ (function(module, exports) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	
	var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
	
	/**
	 * Encode an integer in the range of 0 to 63 to a single base 64 digit.
	 */
	exports.encode = function (number) {
	  if (0 <= number && number < intToCharMap.length) {
	    return intToCharMap[number];
	  }
	  throw new TypeError("Must be between 0 and 63: " + number);
	};
	
	/**
	 * Decode a single base 64 character code digit to an integer. Returns -1 on
	 * failure.
	 */
	exports.decode = function (charCode) {
	  var bigA = 65;     // 'A'
	  var bigZ = 90;     // 'Z'
	
	  var littleA = 97;  // 'a'
	  var littleZ = 122; // 'z'
	
	  var zero = 48;     // '0'
	  var nine = 57;     // '9'
	
	  var plus = 43;     // '+'
	  var slash = 47;    // '/'
	
	  var littleOffset = 26;
	  var numberOffset = 52;
	
	  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
	  if (bigA <= charCode && charCode <= bigZ) {
	    return (charCode - bigA);
	  }
	
	  // 26 - 51: abcdefghijklmnopqrstuvwxyz
	  if (littleA <= charCode && charCode <= littleZ) {
	    return (charCode - littleA + littleOffset);
	  }
	
	  // 52 - 61: 0123456789
	  if (zero <= charCode && charCode <= nine) {
	    return (charCode - zero + numberOffset);
	  }
	
	  // 62: +
	  if (charCode == plus) {
	    return 62;
	  }
	
	  // 63: /
	  if (charCode == slash) {
	    return 63;
	  }
	
	  // Invalid base64 digit.
	  return -1;
	};


/***/ }),
/* 4 */
/***/ (function(module, exports) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	
	/**
	 * This is a helper function for getting values from parameter/options
	 * objects.
	 *
	 * @param args The object we are extracting values from
	 * @param name The name of the property we are getting.
	 * @param defaultValue An optional value to return if the property is missing
	 * from the object. If this is not specified and the property is missing, an
	 * error will be thrown.
	 */
	function getArg(aArgs, aName, aDefaultValue) {
	  if (aName in aArgs) {
	    return aArgs[aName];
	  } else if (arguments.length === 3) {
	    return aDefaultValue;
	  } else {
	    throw new Error('"' + aName + '" is a required argument.');
	  }
	}
	exports.getArg = getArg;
	
	var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
	var dataUrlRegexp = /^data:.+\,.+$/;
	
	function urlParse(aUrl) {
	  var match = aUrl.match(urlRegexp);
	  if (!match) {
	    return null;
	  }
	  return {
	    scheme: match[1],
	    auth: match[2],
	    host: match[3],
	    port: match[4],
	    path: match[5]
	  };
	}
	exports.urlParse = urlParse;
	
	function urlGenerate(aParsedUrl) {
	  var url = '';
	  if (aParsedUrl.scheme) {
	    url += aParsedUrl.scheme + ':';
	  }
	  url += '//';
	  if (aParsedUrl.auth) {
	    url += aParsedUrl.auth + '@';
	  }
	  if (aParsedUrl.host) {
	    url += aParsedUrl.host;
	  }
	  if (aParsedUrl.port) {
	    url += ":" + aParsedUrl.port
	  }
	  if (aParsedUrl.path) {
	    url += aParsedUrl.path;
	  }
	  return url;
	}
	exports.urlGenerate = urlGenerate;
	
	/**
	 * Normalizes a path, or the path portion of a URL:
	 *
	 * - Replaces consecutive slashes with one slash.
	 * - Removes unnecessary '.' parts.
	 * - Removes unnecessary '<dir>/..' parts.
	 *
	 * Based on code in the Node.js 'path' core module.
	 *
	 * @param aPath The path or url to normalize.
	 */
	function normalize(aPath) {
	  var path = aPath;
	  var url = urlParse(aPath);
	  if (url) {
	    if (!url.path) {
	      return aPath;
	    }
	    path = url.path;
	  }
	  var isAbsolute = exports.isAbsolute(path);
	
	  var parts = path.split(/\/+/);
	  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
	    part = parts[i];
	    if (part === '.') {
	      parts.splice(i, 1);
	    } else if (part === '..') {
	      up++;
	    } else if (up > 0) {
	      if (part === '') {
	        // The first part is blank if the path is absolute. Trying to go
	        // above the root is a no-op. Therefore we can remove all '..' parts
	        // directly after the root.
	        parts.splice(i + 1, up);
	        up = 0;
	      } else {
	        parts.splice(i, 2);
	        up--;
	      }
	    }
	  }
	  path = parts.join('/');
	
	  if (path === '') {
	    path = isAbsolute ? '/' : '.';
	  }
	
	  if (url) {
	    url.path = path;
	    return urlGenerate(url);
	  }
	  return path;
	}
	exports.normalize = normalize;
	
	/**
	 * Joins two paths/URLs.
	 *
	 * @param aRoot The root path or URL.
	 * @param aPath The path or URL to be joined with the root.
	 *
	 * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
	 *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
	 *   first.
	 * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
	 *   is updated with the result and aRoot is returned. Otherwise the result
	 *   is returned.
	 *   - If aPath is absolute, the result is aPath.
	 *   - Otherwise the two paths are joined with a slash.
	 * - Joining for example 'http://' and 'www.example.com' is also supported.
	 */
	function join(aRoot, aPath) {
	  if (aRoot === "") {
	    aRoot = ".";
	  }
	  if (aPath === "") {
	    aPath = ".";
	  }
	  var aPathUrl = urlParse(aPath);
	  var aRootUrl = urlParse(aRoot);
	  if (aRootUrl) {
	    aRoot = aRootUrl.path || '/';
	  }
	
	  // `join(foo, '//www.example.org')`
	  if (aPathUrl && !aPathUrl.scheme) {
	    if (aRootUrl) {
	      aPathUrl.scheme = aRootUrl.scheme;
	    }
	    return urlGenerate(aPathUrl);
	  }
	
	  if (aPathUrl || aPath.match(dataUrlRegexp)) {
	    return aPath;
	  }
	
	  // `join('http://', 'www.example.com')`
	  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
	    aRootUrl.host = aPath;
	    return urlGenerate(aRootUrl);
	  }
	
	  var joined = aPath.charAt(0) === '/'
	    ? aPath
	    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
	
	  if (aRootUrl) {
	    aRootUrl.path = joined;
	    return urlGenerate(aRootUrl);
	  }
	  return joined;
	}
	exports.join = join;
	
	exports.isAbsolute = function (aPath) {
	  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
	};
	
	/**
	 * Make a path relative to a URL or another path.
	 *
	 * @param aRoot The root path or URL.
	 * @param aPath The path or URL to be made relative to aRoot.
	 */
	function relative(aRoot, aPath) {
	  if (aRoot === "") {
	    aRoot = ".";
	  }
	
	  aRoot = aRoot.replace(/\/$/, '');
	
	  // It is possible for the path to be above the root. In this case, simply
	  // checking whether the root is a prefix of the path won't work. Instead, we
	  // need to remove components from the root one by one, until either we find
	  // a prefix that fits, or we run out of components to remove.
	  var level = 0;
	  while (aPath.indexOf(aRoot + '/') !== 0) {
	    var index = aRoot.lastIndexOf("/");
	    if (index < 0) {
	      return aPath;
	    }
	
	    // If the only part of the root that is left is the scheme (i.e. http://,
	    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
	    // have exhausted all components, so the path is not relative to the root.
	    aRoot = aRoot.slice(0, index);
	    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
	      return aPath;
	    }
	
	    ++level;
	  }
	
	  // Make sure we add a "../" for each component we removed from the root.
	  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
	}
	exports.relative = relative;
	
	var supportsNullProto = (function () {
	  var obj = Object.create(null);
	  return !('__proto__' in obj);
	}());
	
	function identity (s) {
	  return s;
	}
	
	/**
	 * Because behavior goes wacky when you set `__proto__` on objects, we
	 * have to prefix all the strings in our set with an arbitrary character.
	 *
	 * See https://github.com/mozilla/source-map/pull/31 and
	 * https://github.com/mozilla/source-map/issues/30
	 *
	 * @param String aStr
	 */
	function toSetString(aStr) {
	  if (isProtoString(aStr)) {
	    return '$' + aStr;
	  }
	
	  return aStr;
	}
	exports.toSetString = supportsNullProto ? identity : toSetString;
	
	function fromSetString(aStr) {
	  if (isProtoString(aStr)) {
	    return aStr.slice(1);
	  }
	
	  return aStr;
	}
	exports.fromSetString = supportsNullProto ? identity : fromSetString;
	
	function isProtoString(s) {
	  if (!s) {
	    return false;
	  }
	
	  var length = s.length;
	
	  if (length < 9 /* "__proto__".length */) {
	    return false;
	  }
	
	  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
	      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
	      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
	      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
	      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
	      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
	      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
	      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
	      s.charCodeAt(length - 9) !== 95  /* '_' */) {
	    return false;
	  }
	
	  for (var i = length - 10; i >= 0; i--) {
	    if (s.charCodeAt(i) !== 36 /* '$' */) {
	      return false;
	    }
	  }
	
	  return true;
	}
	
	/**
	 * Comparator between two mappings where the original positions are compared.
	 *
	 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
	 * mappings with the same original source/line/column, but different generated
	 * line and column the same. Useful when searching for a mapping with a
	 * stubbed out mapping.
	 */
	function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
	  var cmp = strcmp(mappingA.source, mappingB.source);
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = mappingA.originalLine - mappingB.originalLine;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = mappingA.originalColumn - mappingB.originalColumn;
	  if (cmp !== 0 || onlyCompareOriginal) {
	    return cmp;
	  }
	
	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = mappingA.generatedLine - mappingB.generatedLine;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  return strcmp(mappingA.name, mappingB.name);
	}
	exports.compareByOriginalPositions = compareByOriginalPositions;
	
	/**
	 * Comparator between two mappings with deflated source and name indices where
	 * the generated positions are compared.
	 *
	 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
	 * mappings with the same generated line and column, but different
	 * source/name/original line and column the same. Useful when searching for a
	 * mapping with a stubbed out mapping.
	 */
	function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
	  var cmp = mappingA.generatedLine - mappingB.generatedLine;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
	  if (cmp !== 0 || onlyCompareGenerated) {
	    return cmp;
	  }
	
	  cmp = strcmp(mappingA.source, mappingB.source);
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = mappingA.originalLine - mappingB.originalLine;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = mappingA.originalColumn - mappingB.originalColumn;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  return strcmp(mappingA.name, mappingB.name);
	}
	exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
	
	function strcmp(aStr1, aStr2) {
	  if (aStr1 === aStr2) {
	    return 0;
	  }
	
	  if (aStr1 === null) {
	    return 1; // aStr2 !== null
	  }
	
	  if (aStr2 === null) {
	    return -1; // aStr1 !== null
	  }
	
	  if (aStr1 > aStr2) {
	    return 1;
	  }
	
	  return -1;
	}
	
	/**
	 * Comparator between two mappings with inflated source and name strings where
	 * the generated positions are compared.
	 */
	function compareByGeneratedPositionsInflated(mappingA, mappingB) {
	  var cmp = mappingA.generatedLine - mappingB.generatedLine;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = strcmp(mappingA.source, mappingB.source);
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = mappingA.originalLine - mappingB.originalLine;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  cmp = mappingA.originalColumn - mappingB.originalColumn;
	  if (cmp !== 0) {
	    return cmp;
	  }
	
	  return strcmp(mappingA.name, mappingB.name);
	}
	exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
	
	/**
	 * Strip any JSON XSSI avoidance prefix from the string (as documented
	 * in the source maps specification), and then parse the string as
	 * JSON.
	 */
	function parseSourceMapInput(str) {
	  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
	}
	exports.parseSourceMapInput = parseSourceMapInput;
	
	/**
	 * Compute the URL of a source given the the source root, the source's
	 * URL, and the source map's URL.
	 */
	function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
	  sourceURL = sourceURL || '';
	
	  if (sourceRoot) {
	    // This follows what Chrome does.
	    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
	      sourceRoot += '/';
	    }
	    // The spec says:
	    //   Line 4: An optional source root, useful for relocating source
	    //   files on a server or removing repeated values in the
	    //   â€œsourcesâ€ entry.  This value is prepended to the individual
	    //   entries in the â€œsourceâ€ field.
	    sourceURL = sourceRoot + sourceURL;
	  }
	
	  // Historically, SourceMapConsumer did not take the sourceMapURL as
	  // a parameter.  This mode is still somewhat supported, which is why
	  // this code block is conditional.  However, it's preferable to pass
	  // the source map URL to SourceMapConsumer, so that this function
	  // can implement the source URL resolution algorithm as outlined in
	  // the spec.  This block is basically the equivalent of:
	  //    new URL(sourceURL, sourceMapURL).toString()
	  // ... except it avoids using URL, which wasn't available in the
	  // older releases of node still supported by this library.
	  //
	  // The spec says:
	  //   If the sources are not absolute URLs after prepending of the
	  //   â€œsourceRootâ€, the sources are resolved relative to the
	  //   SourceMap (like resolving script src in a html document).
	  if (sourceMapURL) {
	    var parsed = urlParse(sourceMapURL);
	    if (!parsed) {
	      throw new Error("sourceMapURL could not be parsed");
	    }
	    if (parsed.path) {
	      // Strip the last path component, but keep the "/".
	      var index = parsed.path.lastIndexOf('/');
	      if (index >= 0) {
	        parsed.path = parsed.path.substring(0, index + 1);
	      }
	    }
	    sourceURL = join(urlGenerate(parsed), sourceURL);
	  }
	
	  return normalize(sourceURL);
	}
	exports.computeSourceURL = computeSourceURL;


/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	
	var util = __webpack_require__(4);
	var has = Object.prototype.hasOwnProperty;
	var hasNativeMap = typeof Map !== "undefined";
	
	/**
	 * A data structure which is a combination of an array and a set. Adding a new
	 * member is O(1), testing for membership is O(1), and finding the index of an
	 * element is O(1). Removing elements from the set is not supported. Only
	 * strings are supported for membership.
	 */
	function ArraySet() {
	  this._array = [];
	  this._set = hasNativeMap ? new Map() : Object.create(null);
	}
	
	/**
	 * Static method for creating ArraySet instances from an existing array.
	 */
	ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
	  var set = new ArraySet();
	  for (var i = 0, len = aArray.length; i < len; i++) {
	    set.add(aArray[i], aAllowDuplicates);
	  }
	  return set;
	};
	
	/**
	 * Return how many unique items are in this ArraySet. If duplicates have been
	 * added, than those do not count towards the size.
	 *
	 * @returns Number
	 */
	ArraySet.prototype.size = function ArraySet_size() {
	  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
	};
	
	/**
	 * Add the given string to this set.
	 *
	 * @param String aStr
	 */
	ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
	  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
	  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
	  var idx = this._array.length;
	  if (!isDuplicate || aAllowDuplicates) {
	    this._array.push(aStr);
	  }
	  if (!isDuplicate) {
	    if (hasNativeMap) {
	      this._set.set(aStr, idx);
	    } else {
	      this._set[sStr] = idx;
	    }
	  }
	};
	
	/**
	 * Is the given string a member of this set?
	 *
	 * @param String aStr
	 */
	ArraySet.prototype.has = function ArraySet_has(aStr) {
	  if (hasNativeMap) {
	    return this._set.has(aStr);
	  } else {
	    var sStr = util.toSetString(aStr);
	    return has.call(this._set, sStr);
	  }
	};
	
	/**
	 * What is the index of the given string in the array?
	 *
	 * @param String aStr
	 */
	ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
	  if (hasNativeMap) {
	    var idx = this._set.get(aStr);
	    if (idx >= 0) {
	        return idx;
	    }
	  } else {
	    var sStr = util.toSetString(aStr);
	    if (has.call(this._set, sStr)) {
	      return this._set[sStr];
	    }
	  }
	
	  throw new Error('"' + aStr + '" is not in the set.');
	};
	
	/**
	 * What is the element at the given index?
	 *
	 * @param Number aIdx
	 */
	ArraySet.prototype.at = function ArraySet_at(aIdx) {
	  if (aIdx >= 0 && aIdx < this._array.length) {
	    return this._array[aIdx];
	  }
	  throw new Error('No element indexed by ' + aIdx);
	};
	
	/**
	 * Returns the array representation of this set (which has the proper indices
	 * indicated by indexOf). Note that this is a copy of the internal array used
	 * for storing the members so that no one can mess with internal state.
	 */
	ArraySet.prototype.toArray = function ArraySet_toArray() {
	  return this._array.slice();
	};
	
	exports.ArraySet = ArraySet;


/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2014 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	
	var util = __webpack_require__(4);
	
	/**
	 * Determine whether mappingB is after mappingA with respect to generated
	 * position.
	 */
	function generatedPositionAfter(mappingA, mappingB) {
	  // Optimized for most common case
	  var lineA = mappingA.generatedLine;
	  var lineB = mappingB.generatedLine;
	  var columnA = mappingA.generatedColumn;
	  var columnB = mappingB.generatedColumn;
	  return lineB > lineA || lineB == lineA && columnB >= columnA ||
	         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
	}
	
	/**
	 * A data structure to provide a sorted view of accumulated mappings in a
	 * performance conscious manner. It trades a neglibable overhead in general
	 * case for a large speedup in case of mappings being added in order.
	 */
	function MappingList() {
	  this._array = [];
	  this._sorted = true;
	  // Serves as infimum
	  this._last = {generatedLine: -1, generatedColumn: 0};
	}
	
	/**
	 * Iterate through internal items. This method takes the same arguments that
	 * `Array.prototype.forEach` takes.
	 *
	 * NOTE: The order of the mappings is NOT guaranteed.
	 */
	MappingList.prototype.unsortedForEach =
	  function MappingList_forEach(aCallback, aThisArg) {
	    this._array.forEach(aCallback, aThisArg);
	  };
	
	/**
	 * Add the given source mapping.
	 *
	 * @param Object aMapping
	 */
	MappingList.prototype.add = function MappingList_add(aMapping) {
	  if (generatedPositionAfter(this._last, aMapping)) {
	    this._last = aMapping;
	    this._array.push(aMapping);
	  } else {
	    this._sorted = false;
	    this._array.push(aMapping);
	  }
	};
	
	/**
	 * Returns the flat, sorted array of mappings. The mappings are sorted by
	 * generated position.
	 *
	 * WARNING: This method returns internal data without copying, for
	 * performance. The return value must NOT be mutated, and should be treated as
	 * an immutable borrow. If you want to take ownership, you must make your own
	 * copy.
	 */
	MappingList.prototype.toArray = function MappingList_toArray() {
	  if (!this._sorted) {
	    this._array.sort(util.compareByGeneratedPositionsInflated);
	    this._sorted = true;
	  }
	  return this._array;
	};
	
	exports.MappingList = MappingList;


/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	
	var util = __webpack_require__(4);
	var binarySearch = __webpack_require__(8);
	var ArraySet = __webpack_require__(5).ArraySet;
	var base64VLQ = __webpack_require__(2);
	var quickSort = __webpack_require__(9).quickSort;
	
	function SourceMapConsumer(aSourceMap, aSourceMapURL) {
	  var sourceMap = aSourceMap;
	  if (typeof aSourceMap === 'string') {
	    sourceMap = util.parseSourceMapInput(aSourceMap);
	  }
	
	  return sourceMap.sections != null
	    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
	    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
	}
	
	SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
	  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
	}
	
	/**
	 * The version of the source mapping spec that we are consuming.
	 */
	SourceMapConsumer.prototype._version = 3;
	
	// `__generatedMappings` and `__originalMappings` are arrays that hold the
	// parsed mapping coordinates from the source map's "mappings" attribute. They
	// are lazily instantiated, accessed via the `_generatedMappings` and
	// `_originalMappings` getters respectively, and we only parse the mappings
	// and create these arrays once queried for a source location. We jump through
	// these hoops because there can be many thousands of mappings, and parsing
	// them is expensive, so we only want to do it if we must.
	//
	// Each object in the arrays is of the form:
	//
	//     {
	//       generatedLine: The line number in the generated code,
	//       generatedColumn: The column number in the generated code,
	//       source: The path to the original source file that generated this
	//               chunk of code,
	//       originalLine: The line number in the original source that
	//                     corresponds to this chunk of generated code,
	//       originalColumn: The column number in the original source that
	//                       corresponds to this chunk of generated code,
	//       name: The name of the original symbol which generated this chunk of
	//             code.
	//     }
	//
	// All properties except for `generatedLine` and `generatedColumn` can be
	// `null`.
	//
	// `_generatedMappings` is ordered by the generated positions.
	//
	// `_originalMappings` is ordered by the original positions.
	
	SourceMapConsumer.prototype.__generatedMappings = null;
	Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
	  configurable: true,
	  enumerable: true,
	  get: function () {
	    if (!this.__generatedMappings) {
	      this._parseMappings(this._mappings, this.sourceRoot);
	    }
	
	    return this.__generatedMappings;
	  }
	});
	
	SourceMapConsumer.prototype.__originalMappings = null;
	Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
	  configurable: true,
	  enumerable: true,
	  get: function () {
	    if (!this.__originalMappings) {
	      this._parseMappings(this._mappings, this.sourceRoot);
	    }
	
	    return this.__originalMappings;
	  }
	});
	
	SourceMapConsumer.prototype._charIsMappingSeparator =
	  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
	    var c = aStr.charAt(index);
	    return c === ";" || c === ",";
	  };
	
	/**
	 * Parse the mappings in a string in to a data structure which we can easily
	 * query (the ordered arrays in the `this.__generatedMappings` and
	 * `this.__originalMappings` properties).
	 */
	SourceMapConsumer.prototype._parseMappings =
	  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
	    throw new Error("Subclasses must implement _parseMappings");
	  };
	
	SourceMapConsumer.GENERATED_ORDER = 1;
	SourceMapConsumer.ORIGINAL_ORDER = 2;
	
	SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
	SourceMapConsumer.LEAST_UPPER_BOUND = 2;
	
	/**
	 * Iterate over each mapping between an original source/line/column and a
	 * generated line/column in this source map.
	 *
	 * @param Function aCallback
	 *        The function that is called with each mapping.
	 * @param Object aContext
	 *        Optional. If specified, this object will be the value of `this` every
	 *        time that `aCallback` is called.
	 * @param aOrder
	 *        Either `SourceMapConsumer.GENERATED_ORDER` or
	 *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
	 *        iterate over the mappings sorted by the generated file's line/column
	 *        order or the original's source/line/column order, respectively. Defaults to
	 *        `SourceMapConsumer.GENERATED_ORDER`.
	 */
	SourceMapConsumer.prototype.eachMapping =
	  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
	    var context = aContext || null;
	    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
	
	    var mappings;
	    switch (order) {
	    case SourceMapConsumer.GENERATED_ORDER:
	      mappings = this._generatedMappings;
	      break;
	    case SourceMapConsumer.ORIGINAL_ORDER:
	      mappings = this._originalMappings;
	      break;
	    default:
	      throw new Error("Unknown order of iteration.");
	    }
	
	    var sourceRoot = this.sourceRoot;
	    mappings.map(function (mapping) {
	      var source = mapping.source === null ? null : this._sources.at(mapping.source);
	      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
	      return {
	        source: source,
	        generatedLine: mapping.generatedLine,
	        generatedColumn: mapping.generatedColumn,
	        originalLine: mapping.originalLine,
	        originalColumn: mapping.originalColumn,
	        name: mapping.name === null ? null : this._names.at(mapping.name)
	      };
	    }, this).forEach(aCallback, context);
	  };
	
	/**
	 * Returns all generated line and column information for the original source,
	 * line, and column provided. If no column is provided, returns all mappings
	 * corresponding to a either the line we are searching for or the next
	 * closest line that has any mappings. Otherwise, returns all mappings
	 * corresponding to the given line and either the column we are searching for
	 * or the next closest column that has any offsets.
	 *
	 * The only argument is an object with the following properties:
	 *
	 *   - source: The filename of the original source.
	 *   - line: The line number in the original source.  The line number is 1-based.
	 *   - column: Optional. the column number in the original source.
	 *    The column number is 0-based.
	 *
	 * and an array of objects is returned, each with the following properties:
	 *
	 *   - line: The line number in the generated source, or null.  The
	 *    line number is 1-based.
	 *   - column: The column number in the generated source, or null.
	 *    The column number is 0-based.
	 */
	SourceMapConsumer.prototype.allGeneratedPositionsFor =
	  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
	    var line = util.getArg(aArgs, 'line');
	
	    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
	    // returns the index of the closest mapping less than the needle. By
	    // setting needle.originalColumn to 0, we thus find the last mapping for
	    // the given line, provided such a mapping exists.
	    var needle = {
	      source: util.getArg(aArgs, 'source'),
	      originalLine: line,
	      originalColumn: util.getArg(aArgs, 'column', 0)
	    };
	
	    needle.source = this._findSourceIndex(needle.source);
	    if (needle.source < 0) {
	      return [];
	    }
	
	    var mappings = [];
	
	    var index = this._findMapping(needle,
	                                  this._originalMappings,
	                                  "originalLine",
	                                  "originalColumn",
	                                  util.compareByOriginalPositions,
	                                  binarySearch.LEAST_UPPER_BOUND);
	    if (index >= 0) {
	      var mapping = this._originalMappings[index];
	
	      if (aArgs.column === undefined) {
	        var originalLine = mapping.originalLine;
	
	        // Iterate until either we run out of mappings, or we run into
	        // a mapping for a different line than the one we found. Since
	        // mappings are sorted, this is guaranteed to find all mappings for
	        // the line we found.
	        while (mapping && mapping.originalLine === originalLine) {
	          mappings.push({
	            line: util.getArg(mapping, 'generatedLine', null),
	            column: util.getArg(mapping, 'generatedColumn', null),
	            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
	          });
	
	          mapping = this._originalMappings[++index];
	        }
	      } else {
	        var originalColumn = mapping.originalColumn;
	
	        // Iterate until either we run out of mappings, or we run into
	        // a mapping for a different line than the one we were searching for.
	        // Since mappings are sorted, this is guaranteed to find all mappings for
	        // the line we are searching for.
	        while (mapping &&
	               mapping.originalLine === line &&
	               mapping.originalColumn == originalColumn) {
	          mappings.push({
	            line: util.getArg(mapping, 'generatedLine', null),
	            column: util.getArg(mapping, 'generatedColumn', null),
	            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
	          });
	
	          mapping = this._originalMappings[++index];
	        }
	      }
	    }
	
	    return mappings;
	  };
	
	exports.SourceMapConsumer = SourceMapConsumer;
	
	/**
	 * A BasicSourceMapConsumer instance represents a parsed source map which we can
	 * query for information about the original file positions by giving it a file
	 * position in the generated source.
	 *
	 * The first parameter is the raw source map (either as a JSON string, or
	 * already parsed to an object). According to the spec, source maps have the
	 * following attributes:
	 *
	 *   - version: Which version of the source map spec this map is following.
	 *   - sources: An array of URLs to the original source files.
	 *   - names: An array of identifiers which can be referrenced by individual mappings.
	 *   - sourceRoot: Optional. The URL root from which all sources are relative.
	 *   - sourcesContent: Optional. An array of contents of the original source files.
	 *   - mappings: A string of base64 VLQs which contain the actual mappings.
	 *   - file: Optional. The generated file this source map is associated with.
	 *
	 * Here is an example source map, taken from the source map spec[0]:
	 *
	 *     {
	 *       version : 3,
	 *       file: "out.js",
	 *       sourceRoot : "",
	 *       sources: ["foo.js", "bar.js"],
	 *       names: ["src", "maps", "are", "fun"],
	 *       mappings: "AA,AB;;ABCDE;"
	 *     }
	 *
	 * The second parameter, if given, is a string whose value is the URL
	 * at which the source map was found.  This URL is used to compute the
	 * sources array.
	 *
	 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
	 */
	function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
	  var sourceMap = aSourceMap;
	  if (typeof aSourceMap === 'string') {
	    sourceMap = util.parseSourceMapInput(aSourceMap);
	  }
	
	  var version = util.getArg(sourceMap, 'version');
	  var sources = util.getArg(sourceMap, 'sources');
	  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
	  // requires the array) to play nice here.
	  var names = util.getArg(sourceMap, 'names', []);
	  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
	  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
	  var mappings = util.getArg(sourceMap, 'mappings');
	  var file = util.getArg(sourceMap, 'file', null);
	
	  // Once again, Sass deviates from the spec and supplies the version as a
	  // string rather than a number, so we use loose equality checking here.
	  if (version != this._version) {
	    throw new Error('Unsupported version: ' + version);
	  }
	
	  if (sourceRoot) {
	    sourceRoot = util.normalize(sourceRoot);
	  }
	
	  sources = sources
	    .map(String)
	    // Some source maps produce relative source paths like "./foo.js" instead of
	    // "foo.js".  Normalize these first so that future comparisons will succeed.
	    // See bugzil.la/1090768.
	    .map(util.normalize)
	    // Always ensure that absolute sources are internally stored relative to
	    // the source root, if the source root is absolute. Not doing this would
	    // be particularly problematic when the source root is a prefix of the
	    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
	    .map(function (source) {
	      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
	        ? util.relative(sourceRoot, source)
	        : source;
	    });
	
	  // Pass `true` below to allow duplicate names and sources. While source maps
	  // are intended to be compressed and deduplicated, the TypeScript compiler
	  // sometimes generates source maps with duplicates in them. See Github issue
	  // #72 and bugzil.la/889492.
	  this._names = ArraySet.fromArray(names.map(String), true);
	  this._sources = ArraySet.fromArray(sources, true);
	
	  this._absoluteSources = this._sources.toArray().map(function (s) {
	    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
	  });
	
	  this.sourceRoot = sourceRoot;
	  this.sourcesContent = sourcesContent;
	  this._mappings = mappings;
	  this._sourceMapURL = aSourceMapURL;
	  this.file = file;
	}
	
	BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
	BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
	
	/**
	 * Utility function to find the index of a source.  Returns -1 if not
	 * found.
	 */
	BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
	  var relativeSource = aSource;
	  if (this.sourceRoot != null) {
	    relativeSource = util.relative(this.sourceRoot, relativeSource);
	  }
	
	  if (this._sources.has(relativeSource)) {
	    return this._sources.indexOf(relativeSource);
	  }
	
	  // Maybe aSource is an absolute URL as returned by |sources|.  In
	  // this case we can't simply undo the transform.
	  var i;
	  for (i = 0; i < this._absoluteSources.length; ++i) {
	    if (this._absoluteSources[i] == aSource) {
	      return i;
	    }
	  }
	
	  return -1;
	};
	
	/**
	 * Create a BasicSourceMapConsumer from a SourceMapGenerator.
	 *
	 * @param SourceMapGenerator aSourceMap
	 *        The source map that will be consumed.
	 * @param String aSourceMapURL
	 *        The URL at which the source map can be found (optional)
	 * @returns BasicSourceMapConsumer
	 */
	BasicSourceMapConsumer.fromSourceMap =
	  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
	    var smc = Object.create(BasicSourceMapConsumer.prototype);
	
	    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
	    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
	    smc.sourceRoot = aSourceMap._sourceRoot;
	    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
	                                                            smc.sourceRoot);
	    smc.file = aSourceMap._file;
	    smc._sourceMapURL = aSourceMapURL;
	    smc._absoluteSources = smc._sources.toArray().map(function (s) {
	      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
	    });
	
	    // Because we are modifying the entries (by converting string sources and
	    // names to indices into the sources and names ArraySets), we have to make
	    // a copy of the entry or else bad things happen. Shared mutable state
	    // strikes again! See github issue #191.
	
	    var generatedMappings = aSourceMap._mappings.toArray().slice();
	    var destGeneratedMappings = smc.__generatedMappings = [];
	    var destOriginalMappings = smc.__originalMappings = [];
	
	    for (var i = 0, length = generatedMappings.length; i < length; i++) {
	      var srcMapping = generatedMappings[i];
	      var destMapping = new Mapping;
	      destMapping.generatedLine = srcMapping.generatedLine;
	      destMapping.generatedColumn = srcMapping.generatedColumn;
	
	      if (srcMapping.source) {
	        destMapping.source = sources.indexOf(srcMapping.source);
	        destMapping.originalLine = srcMapping.originalLine;
	        destMapping.originalColumn = srcMapping.originalColumn;
	
	        if (srcMapping.name) {
	          destMapping.name = names.indexOf(srcMapping.name);
	        }
	
	        destOriginalMappings.push(destMapping);
	      }
	
	      destGeneratedMappings.push(destMapping);
	    }
	
	    quickSort(smc.__originalMappings, util.compareByOriginalPositions);
	
	    return smc;
	  };
	
	/**
	 * The version of the source mapping spec that we are consuming.
	 */
	BasicSourceMapConsumer.prototype._version = 3;
	
	/**
	 * The list of original sources.
	 */
	Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
	  get: function () {
	    return this._absoluteSources.slice();
	  }
	});
	
	/**
	 * Provide the JIT with a nice shape / hidden class.
	 */
	function Mapping() {
	  this.generatedLine = 0;
	  this.generatedColumn = 0;
	  this.source = null;
	  this.originalLine = null;
	  this.originalColumn = null;
	  this.name = null;
	}
	
	/**
	 * Parse the mappings in a string in to a data structure which we can easily
	 * query (the ordered arrays in the `this.__generatedMappings` and
	 * `this.__originalMappings` properties).
	 */
	BasicSourceMapConsumer.prototype._parseMappings =
	  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
	    var generatedLine = 1;
	    var previousGeneratedColumn = 0;
	    var previousOriginalLine = 0;
	    var previousOriginalColumn = 0;
	    var previousSource = 0;
	    var previousName = 0;
	    var length = aStr.length;
	    var index = 0;
	    var cachedSegments = {};
	    var temp = {};
	    var originalMappings = [];
	    var generatedMappings = [];
	    var mapping, str, segment, end, value;
	
	    while (index < length) {
	      if (aStr.charAt(index) === ';') {
	        generatedLine++;
	        index++;
	        previousGeneratedColumn = 0;
	      }
	      else if (aStr.charAt(index) === ',') {
	        index++;
	      }
	      else {
	        mapping = new Mapping();
	        mapping.generatedLine = generatedLine;
	
	        // Because each offset is encoded relative to the previous one,
	        // many segments often have the same encoding. We can exploit this
	        // fact by caching the parsed variable length fields of each segment,
	        // allowing us to avoid a second parse if we encounter the same
	        // segment again.
	        for (end = index; end < length; end++) {
	          if (this._charIsMappingSeparator(aStr, end)) {
	            break;
	          }
	        }
	        str = aStr.slice(index, end);
	
	        segment = cachedSegments[str];
	        if (segment) {
	          index += str.length;
	        } else {
	          segment = [];
	          while (index < end) {
	            base64VLQ.decode(aStr, index, temp);
	            value = temp.value;
	            index = temp.rest;
	            segment.push(value);
	          }
	
	          if (segment.length === 2) {
	            throw new Error('Found a source, but no line and column');
	          }
	
	          if (segment.length === 3) {
	            throw new Error('Found a source and line, but no column');
	          }
	
	          cachedSegments[str] = segment;
	        }
	
	        // Generated column.
	        mapping.generatedColumn = previousGeneratedColumn + segment[0];
	        previousGeneratedColumn = mapping.generatedColumn;
	
	        if (segment.length > 1) {
	          // Original source.
	          mapping.source = previousSource + segment[1];
	          previousSource += segment[1];
	
	          // Original line.
	          mapping.originalLine = previousOriginalLine + segment[2];
	          previousOriginalLine = mapping.originalLine;
	          // Lines are stored 0-based
	          mapping.originalLine += 1;
	
	          // Original column.
	          mapping.originalColumn = previousOriginalColumn + segment[3];
	          previousOriginalColumn = mapping.originalColumn;
	
	          if (segment.length > 4) {
	            // Original name.
	            mapping.name = previousName + segment[4];
	            previousName += segment[4];
	          }
	        }
	
	        generatedMappings.push(mapping);
	        if (typeof mapping.originalLine === 'number') {
	          originalMappings.push(mapping);
	        }
	      }
	    }
	
	    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
	    this.__generatedMappings = generatedMappings;
	
	    quickSort(originalMappings, util.compareByOriginalPositions);
	    this.__originalMappings = originalMappings;
	  };
	
	/**
	 * Find the mapping that best matches the hypothetical "needle" mapping that
	 * we are searching for in the given "haystack" of mappings.
	 */
	BasicSourceMapConsumer.prototype._findMapping =
	  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
	                                         aColumnName, aComparator, aBias) {
	    // To return the position we are searching for, we must first find the
	    // mapping for the given position and then return the opposite position it
	    // points to. Because the mappings are sorted, we can use binary search to
	    // find the best mapping.
	
	    if (aNeedle[aLineName] <= 0) {
	      throw new TypeError('Line must be greater than or equal to 1, got '
	                          + aNeedle[aLineName]);
	    }
	    if (aNeedle[aColumnName] < 0) {
	      throw new TypeError('Column must be greater than or equal to 0, got '
	                          + aNeedle[aColumnName]);
	    }
	
	    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
	  };
	
	/**
	 * Compute the last column for each generated mapping. The last column is
	 * inclusive.
	 */
	BasicSourceMapConsumer.prototype.computeColumnSpans =
	  function SourceMapConsumer_computeColumnSpans() {
	    for (var index = 0; index < this._generatedMappings.length; ++index) {
	      var mapping = this._generatedMappings[index];
	
	      // Mappings do not contain a field for the last generated columnt. We
	      // can come up with an optimistic estimate, however, by assuming that
	      // mappings are contiguous (i.e. given two consecutive mappings, the
	      // first mapping ends where the second one starts).
	      if (index + 1 < this._generatedMappings.length) {
	        var nextMapping = this._generatedMappings[index + 1];
	
	        if (mapping.generatedLine === nextMapping.generatedLine) {
	          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
	          continue;
	        }
	      }
	
	      // The last mapping for each line spans the entire line.
	      mapping.lastGeneratedColumn = Infinity;
	    }
	  };
	
	/**
	 * Returns the original source, line, and column information for the generated
	 * source's line and column positions provided. The only argument is an object
	 * with the following properties:
	 *
	 *   - line: The line number in the generated source.  The line number
	 *     is 1-based.
	 *   - column: The column number in the generated source.  The column
	 *     number is 0-based.
	 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
	 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
	 *     closest element that is smaller than or greater than the one we are
	 *     searching for, respectively, if the exact element cannot be found.
	 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
	 *
	 * and an object is returned with the following properties:
	 *
	 *   - source: The original source file, or null.
	 *   - line: The line number in the original source, or null.  The
	 *     line number is 1-based.
	 *   - column: The column number in the original source, or null.  The
	 *     column number is 0-based.
	 *   - name: The original identifier, or null.
	 */
	BasicSourceMapConsumer.prototype.originalPositionFor =
	  function SourceMapConsumer_originalPositionFor(aArgs) {
	    var needle = {
	      generatedLine: util.getArg(aArgs, 'line'),
	      generatedColumn: util.getArg(aArgs, 'column')
	    };
	
	    var index = this._findMapping(
	      needle,
	      this._generatedMappings,
	      "generatedLine",
	      "generatedColumn",
	      util.compareByGeneratedPositionsDeflated,
	      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
	    );
	
	    if (index >= 0) {
	      var mapping = this._generatedMappings[index];
	
	      if (mapping.generatedLine === needle.generatedLine) {
	        var source = util.getArg(mapping, 'source', null);
	        if (source !== null) {
	          source = this._sources.at(source);
	          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
	        }
	        var name = util.getArg(mapping, 'name', null);
	        if (name !== null) {
	          name = this._names.at(name);
	        }
	        return {
	          source: source,
	          line: util.getArg(mapping, 'originalLine', null),
	          column: util.getArg(mapping, 'originalColumn', null),
	          name: name
	        };
	      }
	    }
	
	    return {
	      source: null,
	      line: null,
	      column: null,
	      name: null
	    };
	  };
	
	/**
	 * Return true if we have the source content for every source in the source
	 * map, false otherwise.
	 */
	BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
	  function BasicSourceMapConsumer_hasContentsOfAllSources() {
	    if (!this.sourcesContent) {
	      return false;
	    }
	    return this.sourcesContent.length >= this._sources.size() &&
	      !this.sourcesContent.some(function (sc) { return sc == null; });
	  };
	
	/**
	 * Returns the original source content. The only argument is the url of the
	 * original source file. Returns null if no original source content is
	 * available.
	 */
	BasicSourceMapConsumer.prototype.sourceContentFor =
	  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
	    if (!this.sourcesContent) {
	      return null;
	    }
	
	    var index = this._findSourceIndex(aSource);
	    if (index >= 0) {
	      return this.sourcesContent[index];
	    }
	
	    var relativeSource = aSource;
	    if (this.sourceRoot != null) {
	      relativeSource = util.relative(this.sourceRoot, relativeSource);
	    }
	
	    var url;
	    if (this.sourceRoot != null
	        && (url = util.urlParse(this.sourceRoot))) {
	      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
	      // many users. We can help them out when they expect file:// URIs to
	      // behave like it would if they were running a local HTTP server. See
	      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
	      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
	      if (url.scheme == "file"
	          && this._sources.has(fileUriAbsPath)) {
	        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
	      }
	
	      if ((!url.path || url.path == "/")
	          && this._sources.has("/" + relativeSource)) {
	        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
	      }
	    }
	
	    // This function is used recursively from
	    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
	    // don't want to throw if we can't find the source - we just want to
	    // return null, so we provide a flag to exit gracefully.
	    if (nullOnMissing) {
	      return null;
	    }
	    else {
	      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
	    }
	  };
	
	/**
	 * Returns the generated line and column information for the original source,
	 * line, and column positions provided. The only argument is an object with
	 * the following properties:
	 *
	 *   - source: The filename of the original source.
	 *   - line: The line number in the original source.  The line number
	 *     is 1-based.
	 *   - column: The column number in the original source.  The column
	 *     number is 0-based.
	 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
	 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
	 *     closest element that is smaller than or greater than the one we are
	 *     searching for, respectively, if the exact element cannot be found.
	 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
	 *
	 * and an object is returned with the following properties:
	 *
	 *   - line: The line number in the generated source, or null.  The
	 *     line number is 1-based.
	 *   - column: The column number in the generated source, or null.
	 *     The column number is 0-based.
	 */
	BasicSourceMapConsumer.prototype.generatedPositionFor =
	  function SourceMapConsumer_generatedPositionFor(aArgs) {
	    var source = util.getArg(aArgs, 'source');
	    source = this._findSourceIndex(source);
	    if (source < 0) {
	      return {
	        line: null,
	        column: null,
	        lastColumn: null
	      };
	    }
	
	    var needle = {
	      source: source,
	      originalLine: util.getArg(aArgs, 'line'),
	      originalColumn: util.getArg(aArgs, 'column')
	    };
	
	    var index = this._findMapping(
	      needle,
	      this._originalMappings,
	      "originalLine",
	      "originalColumn",
	      util.compareByOriginalPositions,
	      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
	    );
	
	    if (index >= 0) {
	      var mapping = this._originalMappings[index];
	
	      if (mapping.source === needle.source) {
	        return {
	          line: util.getArg(mapping, 'generatedLine', null),
	          column: util.getArg(mapping, 'generatedColumn', null),
	          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
	        };
	      }
	    }
	
	    return {
	      line: null,
	      column: null,
	      lastColumn: null
	    };
	  };
	
	exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
	
	/**
	 * An IndexedSourceMapConsumer instance represents a parsed source map which
	 * we can query for information. It differs from BasicSourceMapConsumer in
	 * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
	 * input.
	 *
	 * The first parameter is a raw source map (either as a JSON string, or already
	 * parsed to an object). According to the spec for indexed source maps, they
	 * have the following attributes:
	 *
	 *   - version: Which version of the source map spec this map is following.
	 *   - file: Optional. The generated file this source map is associated with.
	 *   - sections: A list of section definitions.
	 *
	 * Each value under the "sections" field has two fields:
	 *   - offset: The offset into the original specified at which this section
	 *       begins to apply, defined as an object with a "line" and "column"
	 *       field.
	 *   - map: A source map definition. This source map could also be indexed,
	 *       but doesn't have to be.
	 *
	 * Instead of the "map" field, it's also possible to have a "url" field
	 * specifying a URL to retrieve a source map from, but that's currently
	 * unsupported.
	 *
	 * Here's an example source map, taken from the source map spec[0], but
	 * modified to omit a section which uses the "url" field.
	 *
	 *  {
	 *    version : 3,
	 *    file: "app.js",
	 *    sections: [{
	 *      offset: {line:100, column:10},
	 *      map: {
	 *        version : 3,
	 *        file: "section.js",
	 *        sources: ["foo.js", "bar.js"],
	 *        names: ["src", "maps", "are", "fun"],
	 *        mappings: "AAAA,E;;ABCDE;"
	 *      }
	 *    }],
	 *  }
	 *
	 * The second parameter, if given, is a string whose value is the URL
	 * at which the source map was found.  This URL is used to compute the
	 * sources array.
	 *
	 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
	 */
	function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
	  var sourceMap = aSourceMap;
	  if (typeof aSourceMap === 'string') {
	    sourceMap = util.parseSourceMapInput(aSourceMap);
	  }
	
	  var version = util.getArg(sourceMap, 'version');
	  var sections = util.getArg(sourceMap, 'sections');
	
	  if (version != this._version) {
	    throw new Error('Unsupported version: ' + version);
	  }
	
	  this._sources = new ArraySet();
	  this._names = new ArraySet();
	
	  var lastOffset = {
	    line: -1,
	    column: 0
	  };
	  this._sections = sections.map(function (s) {
	    if (s.url) {
	      // The url field will require support for asynchronicity.
	      // See https://github.com/mozilla/source-map/issues/16
	      throw new Error('Support for url field in sections not implemented.');
	    }
	    var offset = util.getArg(s, 'offset');
	    var offsetLine = util.getArg(offset, 'line');
	    var offsetColumn = util.getArg(offset, 'column');
	
	    if (offsetLine < lastOffset.line ||
	        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
	      throw new Error('Section offsets must be ordered and non-overlapping.');
	    }
	    lastOffset = offset;
	
	    return {
	      generatedOffset: {
	        // The offset fields are 0-based, but we use 1-based indices when
	        // encoding/decoding from VLQ.
	        generatedLine: offsetLine + 1,
	        generatedColumn: offsetColumn + 1
	      },
	      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
	    }
	  });
	}
	
	IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
	IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
	
	/**
	 * The version of the source mapping spec that we are consuming.
	 */
	IndexedSourceMapConsumer.prototype._version = 3;
	
	/**
	 * The list of original sources.
	 */
	Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
	  get: function () {
	    var sources = [];
	    for (var i = 0; i < this._sections.length; i++) {
	      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
	        sources.push(this._sections[i].consumer.sources[j]);
	      }
	    }
	    return sources;
	  }
	});
	
	/**
	 * Returns the original source, line, and column information for the generated
	 * source's line and column positions provided. The only argument is an object
	 * with the following properties:
	 *
	 *   - line: The line number in the generated source.  The line number
	 *     is 1-based.
	 *   - column: The column number in the generated source.  The column
	 *     number is 0-based.
	 *
	 * and an object is returned with the following properties:
	 *
	 *   - source: The original source file, or null.
	 *   - line: The line number in the original source, or null.  The
	 *     line number is 1-based.
	 *   - column: The column number in the original source, or null.  The
	 *     column number is 0-based.
	 *   - name: The original identifier, or null.
	 */
	IndexedSourceMapConsumer.prototype.originalPositionFor =
	  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
	    var needle = {
	      generatedLine: util.getArg(aArgs, 'line'),
	      generatedColumn: util.getArg(aArgs, 'column')
	    };
	
	    // Find the section containing the generated position we're trying to map
	    // to an original position.
	    var sectionIndex = binarySearch.search(needle, this._sections,
	      function(needle, section) {
	        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
	        if (cmp) {
	          return cmp;
	        }
	
	        return (needle.generatedColumn -
	                section.generatedOffset.generatedColumn);
	      });
	    var section = this._sections[sectionIndex];
	
	    if (!section) {
	      return {
	        source: null,
	        line: null,
	        column: null,
	        name: null
	      };
	    }
	
	    return section.consumer.originalPositionFor({
	      line: needle.generatedLine -
	        (section.generatedOffset.generatedLine - 1),
	      column: needle.generatedColumn -
	        (section.generatedOffset.generatedLine === needle.generatedLine
	         ? section.generatedOffset.generatedColumn - 1
	         : 0),
	      bias: aArgs.bias
	    });
	  };
	
	/**
	 * Return true if we have the source content for every source in the source
	 * map, false otherwise.
	 */
	IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
	  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
	    return this._sections.every(function (s) {
	      return s.consumer.hasContentsOfAllSources();
	    });
	  };
	
	/**
	 * Returns the original source content. The only argument is the url of the
	 * original source file. Returns null if no original source content is
	 * available.
	 */
	IndexedSourceMapConsumer.prototype.sourceContentFor =
	  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
	    for (var i = 0; i < this._sections.length; i++) {
	      var section = this._sections[i];
	
	      var content = section.consumer.sourceContentFor(aSource, true);
	      if (content) {
	        return content;
	      }
	    }
	    if (nullOnMissing) {
	      return null;
	    }
	    else {
	      throw new Error('"' + aSource + '" is not in the SourceMap.');
	    }
	  };
	
	/**
	 * Returns the generated line and column information for the original source,
	 * line, and column positions provided. The only argument is an object with
	 * the following properties:
	 *
	 *   - source: The filename of the original source.
	 *   - line: The line number in the original source.  The line number
	 *     is 1-based.
	 *   - column: The column number in the original source.  The column
	 *     number is 0-based.
	 *
	 * and an object is returned with the following properties:
	 *
	 *   - line: The line number in the generated source, or null.  The
	 *     line number is 1-based. 
	 *   - column: The column number in the generated source, or null.
	 *     The column number is 0-based.
	 */
	IndexedSourceMapConsumer.prototype.generatedPositionFor =
	  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
	    for (var i = 0; i < this._sections.length; i++) {
	      var section = this._sections[i];
	
	      // Only consider this section if the requested source is in the list of
	      // sources of the consumer.
	      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
	        continue;
	      }
	      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
	      if (generatedPosition) {
	        var ret = {
	          line: generatedPosition.line +
	            (section.generatedOffset.generatedLine - 1),
	          column: generatedPosition.column +
	            (section.generatedOffset.generatedLine === generatedPosition.line
	             ? section.generatedOffset.generatedColumn - 1
	             : 0)
	        };
	        return ret;
	      }
	    }
	
	    return {
	      line: null,
	      column: null
	    };
	  };
	
	/**
	 * Parse the mappings in a string in to a data structure which we can easily
	 * query (the ordered arrays in the `this.__generatedMappings` and
	 * `this.__originalMappings` properties).
	 */
	IndexedSourceMapConsumer.prototype._parseMappings =
	  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
	    this.__generatedMappings = [];
	    this.__originalMappings = [];
	    for (var i = 0; i < this._sections.length; i++) {
	      var section = this._sections[i];
	      var sectionMappings = section.consumer._generatedMappings;
	      for (var j = 0; j < sectionMappings.length; j++) {
	        var mapping = sectionMappings[j];
	
	        var source = section.consumer._sources.at(mapping.source);
	        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
	        this._sources.add(source);
	        source = this._sources.indexOf(source);
	
	        var name = null;
	        if (mapping.name) {
	          name = section.consumer._names.at(mapping.name);
	          this._names.add(name);
	          name = this._names.indexOf(name);
	        }
	
	        // The mappings coming from the consumer for the section have
	        // generated positions relative to the start of the section, so we
	        // need to offset them to be relative to the start of the concatenated
	        // generated file.
	        var adjustedMapping = {
	          source: source,
	          generatedLine: mapping.generatedLine +
	            (section.generatedOffset.generatedLine - 1),
	          generatedColumn: mapping.generatedColumn +
	            (section.generatedOffset.generatedLine === mapping.generatedLine
	            ? section.generatedOffset.generatedColumn - 1
	            : 0),
	          originalLine: mapping.originalLine,
	          originalColumn: mapping.originalColumn,
	          name: name
	        };
	
	        this.__generatedMappings.push(adjustedMapping);
	        if (typeof adjustedMapping.originalLine === 'number') {
	          this.__originalMappings.push(adjustedMapping);
	        }
	      }
	    }
	
	    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
	    quickSort(this.__originalMappings, util.compareByOriginalPositions);
	  };
	
	exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;


/***/ }),
/* 8 */
/***/ (function(module, exports) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	
	exports.GREATEST_LOWER_BOUND = 1;
	exports.LEAST_UPPER_BOUND = 2;
	
	/**
	 * Recursive implementation of binary search.
	 *
	 * @param aLow Indices here and lower do not contain the needle.
	 * @param aHigh Indices here and higher do not contain the needle.
	 * @param aNeedle The element being searched for.
	 * @param aHaystack The non-empty array being searched.
	 * @param aCompare Function which takes two elements and returns -1, 0, or 1.
	 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
	 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
	 *     closest element that is smaller than or greater than the one we are
	 *     searching for, respectively, if the exact element cannot be found.
	 */
	function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
	  // This function terminates when one of the following is true:
	  //
	  //   1. We find the exact element we are looking for.
	  //
	  //   2. We did not find the exact element, but we can return the index of
	  //      the next-closest element.
	  //
	  //   3. We did not find the exact element, and there is no next-closest
	  //      element than the one we are searching for, so we return -1.
	  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
	  var cmp = aCompare(aNeedle, aHaystack[mid], true);
	  if (cmp === 0) {
	    // Found the element we are looking for.
	    return mid;
	  }
	  else if (cmp > 0) {
	    // Our needle is greater than aHaystack[mid].
	    if (aHigh - mid > 1) {
	      // The element is in the upper half.
	      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
	    }
	
	    // The exact needle element was not found in this haystack. Determine if
	    // we are in termination case (3) or (2) and return the appropriate thing.
	    if (aBias == exports.LEAST_UPPER_BOUND) {
	      return aHigh < aHaystack.length ? aHigh : -1;
	    } else {
	      return mid;
	    }
	  }
	  else {
	    // Our needle is less than aHaystack[mid].
	    if (mid - aLow > 1) {
	      // The element is in the lower half.
	      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
	    }
	
	    // we are in termination case (3) or (2) and return the appropriate thing.
	    if (aBias == exports.LEAST_UPPER_BOUND) {
	      return mid;
	    } else {
	      return aLow < 0 ? -1 : aLow;
	    }
	  }
	}
	
	/**
	 * This is an implementation of binary search which will always try and return
	 * the index of the closest element if there is no exact hit. This is because
	 * mappings between original and generated line/col pairs are single points,
	 * and there is an implicit region between each of them, so a miss just means
	 * that you aren't on the very start of a region.
	 *
	 * @param aNeedle The element you are looking for.
	 * @param aHaystack The array that is being searched.
	 * @param aCompare A function which takes the needle and an element in the
	 *     array and returns -1, 0, or 1 depending on whether the needle is less
	 *     than, equal to, or greater than the element, respectively.
	 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
	 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
	 *     closest element that is smaller than or greater than the one we are
	 *     searching for, respectively, if the exact element cannot be found.
	 *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
	 */
	exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
	  if (aHaystack.length === 0) {
	    return -1;
	  }
	
	  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
	                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
	  if (index < 0) {
	    return -1;
	  }
	
	  // We have found either the exact element, or the next-closest element than
	  // the one we are searching for. However, there may be more than one such
	  // element. Make sure we always return the smallest of these.
	  while (index - 1 >= 0) {
	    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
	      break;
	    }
	    --index;
	  }
	
	  return index;
	};


/***/ }),
/* 9 */
/***/ (function(module, exports) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	
	// It turns out that some (most?) JavaScript engines don't self-host
	// `Array.prototype.sort`. This makes sense because C++ will likely remain
	// faster than JS when doing raw CPU-intensive sorting. However, when using a
	// custom comparator function, calling back and forth between the VM's C++ and
	// JIT'd JS is rather slow *and* loses JIT type information, resulting in
	// worse generated code for the comparator function than would be optimal. In
	// fact, when sorting with a comparator, these costs outweigh the benefits of
	// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
	// a ~3500ms mean speed-up in `bench/bench.html`.
	
	/**
	 * Swap the elements indexed by `x` and `y` in the array `ary`.
	 *
	 * @param {Array} ary
	 *        The array.
	 * @param {Number} x
	 *        The index of the first item.
	 * @param {Number} y
	 *        The index of the second item.
	 */
	function swap(ary, x, y) {
	  var temp = ary[x];
	  ary[x] = ary[y];
	  ary[y] = temp;
	}
	
	/**
	 * Returns a random integer within the range `low .. high` inclusive.
	 *
	 * @param {Number} low
	 *        The lower bound on the range.
	 * @param {Number} high
	 *        The upper bound on the range.
	 */
	function randomIntInRange(low, high) {
	  return Math.round(low + (Math.random() * (high - low)));
	}
	
	/**
	 * The Quick Sort algorithm.
	 *
	 * @param {Array} ary
	 *        An array to sort.
	 * @param {function} comparator
	 *        Function to use to compare two items.
	 * @param {Number} p
	 *        Start index of the array
	 * @param {Number} r
	 *        End index of the array
	 */
	function doQuickSort(ary, comparator, p, r) {
	  // If our lower bound is less than our upper bound, we (1) partition the
	  // array into two pieces and (2) recurse on each half. If it is not, this is
	  // the empty array and our base case.
	
	  if (p < r) {
	    // (1) Partitioning.
	    //
	    // The partitioning chooses a pivot between `p` and `r` and moves all
	    // elements that are less than or equal to the pivot to the before it, and
	    // all the elements that are greater than it after it. The effect is that
	    // once partition is done, the pivot is in the exact place it will be when
	    // the array is put in sorted order, and it will not need to be moved
	    // again. This runs in O(n) time.
	
	    // Always choose a random pivot so that an input array which is reverse
	    // sorted does not cause O(n^2) running time.
	    var pivotIndex = randomIntInRange(p, r);
	    var i = p - 1;
	
	    swap(ary, pivotIndex, r);
	    var pivot = ary[r];
	
	    // Immediately after `j` is incremented in this loop, the following hold
	    // true:
	    //
	    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
	    //
	    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
	    for (var j = p; j < r; j++) {
	      if (comparator(ary[j], pivot) <= 0) {
	        i += 1;
	        swap(ary, i, j);
	      }
	    }
	
	    swap(ary, i + 1, j);
	    var q = i + 1;
	
	    // (2) Recurse on each half.
	
	    doQuickSort(ary, comparator, p, q - 1);
	    doQuickSort(ary, comparator, q + 1, r);
	  }
	}
	
	/**
	 * Sort the given array in-place with the given comparator function.
	 *
	 * @param {Array} ary
	 *        An array to sort.
	 * @param {function} comparator
	 *        Function to use to compare two items.
	 */
	exports.quickSort = function (ary, comparator) {
	  doQuickSort(ary, comparator, 0, ary.length - 1);
	};


/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	
	var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
	var util = __webpack_require__(4);
	
	// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
	// operating systems these days (capturing the result).
	var REGEX_NEWLINE = /(\r?\n)/;
	
	// Newline character code for charCodeAt() comparisons
	var NEWLINE_CODE = 10;
	
	// Private symbol for identifying `SourceNode`s when multiple versions of
	// the source-map library are loaded. This MUST NOT CHANGE across
	// versions!
	var isSourceNode = "$$$isSourceNode$$$";
	
	/**
	 * SourceNodes provide a way to abstract over interpolating/concatenating
	 * snippets of generated JavaScript source code while maintaining the line and
	 * column information associated with the original source code.
	 *
	 * @param aLine The original line number.
	 * @param aColumn The original column number.
	 * @param aSource The original source's filename.
	 * @param aChunks Optional. An array of strings which are snippets of
	 *        generated JS, or other SourceNodes.
	 * @param aName The original identifier.
	 */
	function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
	  this.children = [];
	  this.sourceContents = {};
	  this.line = aLine == null ? null : aLine;
	  this.column = aColumn == null ? null : aColumn;
	  this.source = aSource == null ? null : aSource;
	  this.name = aName == null ? null : aName;
	  this[isSourceNode] = true;
	  if (aChunks != null) this.add(aChunks);
	}
	
	/**
	 * Creates a SourceNode from generated code and a SourceMapConsumer.
	 *
	 * @param aGeneratedCode The generated code
	 * @param aSourceMapConsumer The SourceMap for the generated code
	 * @param aRelativePath Optional. The path that relative sources in the
	 *        SourceMapConsumer should be relative to.
	 */
	SourceNode.fromStringWithSourceMap =
	  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
	    // The SourceNode we want to fill with the generated code
	    // and the SourceMap
	    var node = new SourceNode();
	
	    // All even indices of this array are one line of the generated code,
	    // while all odd indices are the newlines between two adjacent lines
	    // (since `REGEX_NEWLINE` captures its match).
	    // Processed fragments are accessed by calling `shiftNextLine`.
	    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
	    var remainingLinesIndex = 0;
	    var shiftNextLine = function() {
	      var lineContents = getNextLine();
	      // The last line of a file might not have a newline.
	      var newLine = getNextLine() || "";
	      return lineContents + newLine;
	
	      function getNextLine() {
	        return remainingLinesIndex < remainingLines.length ?
	            remainingLines[remainingLinesIndex++] : undefined;
	      }
	    };
	
	    // We need to remember the position of "remainingLines"
	    var lastGeneratedLine = 1, lastGeneratedColumn = 0;
	
	    // The generate SourceNodes we need a code range.
	    // To extract it current and last mapping is used.
	    // Here we store the last mapping.
	    var lastMapping = null;
	
	    aSourceMapConsumer.eachMapping(function (mapping) {
	      if (lastMapping !== null) {
	        // We add the code from "lastMapping" to "mapping":
	        // First check if there is a new line in between.
	        if (lastGeneratedLine < mapping.generatedLine) {
	          // Associate first line with "lastMapping"
	          addMappingWithCode(lastMapping, shiftNextLine());
	          lastGeneratedLine++;
	          lastGeneratedColumn = 0;
	          // The remaining code is added without mapping
	        } else {
	          // There is no new line in between.
	          // Associate the code between "lastGeneratedColumn" and
	          // "mapping.generatedColumn" with "lastMapping"
	          var nextLine = remainingLines[remainingLinesIndex] || '';
	          var code = nextLine.substr(0, mapping.generatedColumn -
	                                        lastGeneratedColumn);
	          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
	                                              lastGeneratedColumn);
	          lastGeneratedColumn = mapping.generatedColumn;
	          addMappingWithCode(lastMapping, code);
	          // No more remaining code, continue
	          lastMapping = mapping;
	          return;
	        }
	      }
	      // We add the generated code until the first mapping
	      // to the SourceNode without any mapping.
	      // Each line is added as separate string.
	      while (lastGeneratedLine < mapping.generatedLine) {
	        node.add(shiftNextLine());
	        lastGeneratedLine++;
	      }
	      if (lastGeneratedColumn < mapping.generatedColumn) {
	        var nextLine = remainingLines[remainingLinesIndex] || '';
	        node.add(nextLine.substr(0, mapping.generatedColumn));
	        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
	        lastGeneratedColumn = mapping.generatedColumn;
	      }
	      lastMapping = mapping;
	    }, this);
	    // We have processed all mappings.
	    if (remainingLinesIndex < remainingLines.length) {
	      if (lastMapping) {
	        // Associate the remaining code in the current line with "lastMapping"
	        addMappingWithCode(lastMapping, shiftNextLine());
	      }
	      // and add the remaining lines without any mapping
	      node.add(remainingLines.splice(remainingLinesIndex).join(""));
	    }
	
	    // Copy sourcesContent into SourceNode
	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
	      if (content != null) {
	        if (aRelativePath != null) {
	          sourceFile = util.join(aRelativePath, sourceFile);
	        }
	        node.setSourceContent(sourceFile, content);
	      }
	    });
	
	    return node;
	
	    function addMappingWithCode(mapping, code) {
	      if (mapping === null || mapping.source === undefined) {
	        node.add(code);
	      } else {
	        var source = aRelativePath
	          ? util.join(aRelativePath, mapping.source)
	          : mapping.source;
	        node.add(new SourceNode(mapping.originalLine,
	                                mapping.originalColumn,
	                                source,
	                                code,
	                                mapping.name));
	      }
	    }
	  };
	
	/**
	 * Add a chunk of generated JS to this source node.
	 *
	 * @param aChunk A string snippet of generated JS code, another instance of
	 *        SourceNode, or an array where each member is one of those things.
	 */
	SourceNode.prototype.add = function SourceNode_add(aChunk) {
	  if (Array.isArray(aChunk)) {
	    aChunk.forEach(function (chunk) {
	      this.add(chunk);
	    }, this);
	  }
	  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
	    if (aChunk) {
	      this.children.push(aChunk);
	    }
	  }
	  else {
	    throw new TypeError(
	      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
	    );
	  }
	  return this;
	};
	
	/**
	 * Add a chunk of generated JS to the beginning of this source node.
	 *
	 * @param aChunk A string snippet of generated JS code, another instance of
	 *        SourceNode, or an array where each member is one of those things.
	 */
	SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
	  if (Array.isArray(aChunk)) {
	    for (var i = aChunk.length-1; i >= 0; i--) {
	      this.prepend(aChunk[i]);
	    }
	  }
	  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
	    this.children.unshift(aChunk);
	  }
	  else {
	    throw new TypeError(
	      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
	    );
	  }
	  return this;
	};
	
	/**
	 * Walk over the tree of JS snippets in this node and its children. The
	 * walking function is called once for each snippet of JS and is passed that
	 * snippet and the its original associated source's line/column location.
	 *
	 * @param aFn The traversal function.
	 */
	SourceNode.prototype.walk = function SourceNode_walk(aFn) {
	  var chunk;
	  for (var i = 0, len = this.children.length; i < len; i++) {
	    chunk = this.children[i];
	    if (chunk[isSourceNode]) {
	      chunk.walk(aFn);
	    }
	    else {
	      if (chunk !== '') {
	        aFn(chunk, { source: this.source,
	                     line: this.line,
	                     column: this.column,
	                     name: this.name });
	      }
	    }
	  }
	};
	
	/**
	 * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
	 * each of `this.children`.
	 *
	 * @param aSep The separator.
	 */
	SourceNode.prototype.join = function SourceNode_join(aSep) {
	  var newChildren;
	  var i;
	  var len = this.children.length;
	  if (len > 0) {
	    newChildren = [];
	    for (i = 0; i < len-1; i++) {
	      newChildren.push(this.children[i]);
	      newChildren.push(aSep);
	    }
	    newChildren.push(this.children[i]);
	    this.children = newChildren;
	  }
	  return this;
	};
	
	/**
	 * Call String.prototype.replace on the very right-most source snippet. Useful
	 * for trimming whitespace from the end of a source node, etc.
	 *
	 * @param aPattern The pattern to replace.
	 * @param aReplacement The thing to replace the pattern with.
	 */
	SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
	  var lastChild = this.children[this.children.length - 1];
	  if (lastChild[isSourceNode]) {
	    lastChild.replaceRight(aPattern, aReplacement);
	  }
	  else if (typeof lastChild === 'string') {
	    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
	  }
	  else {
	    this.children.push(''.replace(aPattern, aReplacement));
	  }
	  return this;
	};
	
	/**
	 * Set the source content for a source file. This will be added to the SourceMapGenerator
	 * in the sourcesContent field.
	 *
	 * @param aSourceFile The filename of the source file
	 * @param aSourceContent The content of the source file
	 */
	SourceNode.prototype.setSourceContent =
	  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
	    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
	  };
	
	/**
	 * Walk over the tree of SourceNodes. The walking function is called for each
	 * source file content and is passed the filename and source content.
	 *
	 * @param aFn The traversal function.
	 */
	SourceNode.prototype.walkSourceContents =
	  function SourceNode_walkSourceContents(aFn) {
	    for (var i = 0, len = this.children.length; i < len; i++) {
	      if (this.children[i][isSourceNode]) {
	        this.children[i].walkSourceContents(aFn);
	      }
	    }
	
	    var sources = Object.keys(this.sourceContents);
	    for (var i = 0, len = sources.length; i < len; i++) {
	      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
	    }
	  };
	
	/**
	 * Return the string representation of this source node. Walks over the tree
	 * and concatenates all the various snippets together to one string.
	 */
	SourceNode.prototype.toString = function SourceNode_toString() {
	  var str = "";
	  this.walk(function (chunk) {
	    str += chunk;
	  });
	  return str;
	};
	
	/**
	 * Returns the string representation of this source node along with a source
	 * map.
	 */
	SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
	  var generated = {
	    code: "",
	    line: 1,
	    column: 0
	  };
	  var map = new SourceMapGenerator(aArgs);
	  var sourceMappingActive = false;
	  var lastOriginalSource = null;
	  var lastOriginalLine = null;
	  var lastOriginalColumn = null;
	  var lastOriginalName = null;
	  this.walk(function (chunk, original) {
	    generated.code += chunk;
	    if (original.source !== null
	        && original.line !== null
	        && original.column !== null) {
	      if(lastOriginalSource !== original.source
	         || lastOriginalLine !== original.line
	         || lastOriginalColumn !== original.column
	         || lastOriginalName !== original.name) {
	        map.addMapping({
	          source: original.source,
	          original: {
	            line: original.line,
	            column: original.column
	          },
	          generated: {
	            line: generated.line,
	            column: generated.column
	          },
	          name: original.name
	        });
	      }
	      lastOriginalSource = original.source;
	      lastOriginalLine = original.line;
	      lastOriginalColumn = original.column;
	      lastOriginalName = original.name;
	      sourceMappingActive = true;
	    } else if (sourceMappingActive) {
	      map.addMapping({
	        generated: {
	          line: generated.line,
	          column: generated.column
	        }
	      });
	      lastOriginalSource = null;
	      sourceMappingActive = false;
	    }
	    for (var idx = 0, length = chunk.length; idx < length; idx++) {
	      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
	        generated.line++;
	        generated.column = 0;
	        // Mappings end at eol
	        if (idx + 1 === length) {
	          lastOriginalSource = null;
	          sourceMappingActive = false;
	        } else if (sourceMappingActive) {
	          map.addMapping({
	            source: original.source,
	            original: {
	              line: original.line,
	              column: original.column
	            },
	            generated: {
	              line: generated.line,
	              column: generated.column
	            },
	            name: original.name
	          });
	        }
	      } else {
	        generated.column++;
	      }
	    }
	  });
	  this.walkSourceContents(function (sourceFile, sourceContent) {
	    map.setSourceContent(sourceFile, sourceContent);
	  });
	
	  return { code: generated.code, map: map };
	};
	
	exports.SourceNode = SourceNode;


/***/ })
/******/ ])
});
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCAxNjI0YzcyOTliODg3ZjdiZGY2NCIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEwQyxTQUFTO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hhQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBMkQ7QUFDM0QscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7O0FBRUg7QUFDQTtBQUNBOzs7Ozs7O0FDM0lBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFnQjtBQUNoQixpQkFBZ0I7O0FBRWhCLG9CQUFtQjtBQUNuQixxQkFBb0I7O0FBRXBCLGlCQUFnQjtBQUNoQixpQkFBZ0I7O0FBRWhCLGlCQUFnQjtBQUNoQixrQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDbEVBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBMkIsUUFBUTtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWE7QUFDYjs7QUFFQTtBQUNBLGVBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7O0FDdmVBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUFzQyxTQUFTO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7QUN4SEEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFnQjtBQUNoQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7QUM5RUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWEsa0NBQWtDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLHdDQUF3QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUErQyxtQkFBbUIsRUFBRTtBQUNwRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBNkIsTUFBTTtBQUNuQztBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsMkJBQTJCO0FBQzlDLHNCQUFxQiwrQ0FBK0M7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0Esc0JBQXFCLDRCQUE0QjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3huQ0EsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7QUM5R0EsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBVyxTQUFTO0FBQ3BCO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0EsWUFBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBVyxNQUFNO0FBQ2pCO0FBQ0EsWUFBVyxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNqSEEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWlDLFFBQVE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQW9CO0FBQ3BCO0FBQ0E7QUFDQSx1Q0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLFNBQVM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBeUMsU0FBUztBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxZQUFXO0FBQ1g7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsNkNBQTRDLGNBQWM7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxjQUFhO0FBQ2I7QUFDQSxZQUFXO0FBQ1g7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQSxJQUFHOztBQUVILFdBQVU7QUFDVjs7QUFFQSIsImZpbGUiOiJzb3VyY2UtbWFwLmRlYnVnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInNvdXJjZU1hcFwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0ZXhwb3J0czoge30sXG4gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuIFx0XHRcdGxvYWRlZDogZmFsc2VcbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCAxNjI0YzcyOTliODg3ZjdiZGY2NCIsIi8qXG4gKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRS50eHQgb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmV4cG9ydHMuU291cmNlTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW1hcC1nZW5lcmF0b3InKS5Tb3VyY2VNYXBHZW5lcmF0b3I7XG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLlNvdXJjZU1hcENvbnN1bWVyO1xuZXhwb3J0cy5Tb3VyY2VOb2RlID0gcmVxdWlyZSgnLi9saWIvc291cmNlLW5vZGUnKS5Tb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zb3VyY2UtbWFwLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgTWFwcGluZ0xpc3QgPSByZXF1aXJlKCcuL21hcHBpbmctbGlzdCcpLk1hcHBpbmdMaXN0O1xuXG4vKipcbiAqIEFuIGluc3RhbmNlIG9mIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IgcmVwcmVzZW50cyBhIHNvdXJjZSBtYXAgd2hpY2ggaXNcbiAqIGJlaW5nIGJ1aWx0IGluY3JlbWVudGFsbHkuIFlvdSBtYXkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nXG4gKiBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBmaWxlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gc291cmNlUm9vdDogQSByb290IGZvciBhbGwgcmVsYXRpdmUgVVJMcyBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcihhQXJncykge1xuICBpZiAoIWFBcmdzKSB7XG4gICAgYUFyZ3MgPSB7fTtcbiAgfVxuICB0aGlzLl9maWxlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdmaWxlJywgbnVsbCk7XG4gIHRoaXMuX3NvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdGhpcy5fc2tpcFZhbGlkYXRpb24gPSB1dGlsLmdldEFyZyhhQXJncywgJ3NraXBWYWxpZGF0aW9uJywgZmFsc2UpO1xuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX21hcHBpbmdzID0gbmV3IE1hcHBpbmdMaXN0KCk7XG4gIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG59XG5cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU291cmNlTWFwR2VuZXJhdG9yIGJhc2VkIG9uIGEgU291cmNlTWFwQ29uc3VtZXJcbiAqXG4gKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgdmFyIHNvdXJjZVJvb3QgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlUm9vdDtcbiAgICB2YXIgZ2VuZXJhdG9yID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcih7XG4gICAgICBmaWxlOiBhU291cmNlTWFwQ29uc3VtZXIuZmlsZSxcbiAgICAgIHNvdXJjZVJvb3Q6IHNvdXJjZVJvb3RcbiAgICB9KTtcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuZWFjaE1hcHBpbmcoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBuZXdNYXBwaW5nID0ge1xuICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIG5ld01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld01hcHBpbmcub3JpZ2luYWwgPSB7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5uYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGdlbmVyYXRvci5hZGRNYXBwaW5nKG5ld01hcHBpbmcpO1xuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBzb3VyY2VSZWxhdGl2ZSA9IHNvdXJjZUZpbGU7XG4gICAgICBpZiAoc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VSZWxhdGl2ZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ2VuZXJhdG9yLl9zb3VyY2VzLmhhcyhzb3VyY2VSZWxhdGl2ZSkpIHtcbiAgICAgICAgZ2VuZXJhdG9yLl9zb3VyY2VzLmFkZChzb3VyY2VSZWxhdGl2ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGdlbmVyYXRvci5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH07XG5cbi8qKlxuICogQWRkIGEgc2luZ2xlIG1hcHBpbmcgZnJvbSBvcmlnaW5hbCBzb3VyY2UgbGluZSBhbmQgY29sdW1uIHRvIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBmb3IgdGhpcyBzb3VyY2UgbWFwIGJlaW5nIGNyZWF0ZWQuIFRoZSBtYXBwaW5nXG4gKiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBnZW5lcmF0ZWQ6IEFuIG9iamVjdCB3aXRoIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBvcmlnaW5hbDogQW4gb2JqZWN0IHdpdGggdGhlIG9yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUgKHJlbGF0aXZlIHRvIHRoZSBzb3VyY2VSb290KS5cbiAqICAgLSBuYW1lOiBBbiBvcHRpb25hbCBvcmlnaW5hbCB0b2tlbiBuYW1lIGZvciB0aGlzIG1hcHBpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYWRkTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hZGRNYXBwaW5nKGFBcmdzKSB7XG4gICAgdmFyIGdlbmVyYXRlZCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnZ2VuZXJhdGVkJyk7XG4gICAgdmFyIG9yaWdpbmFsID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdvcmlnaW5hbCcsIG51bGwpO1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScsIG51bGwpO1xuICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICduYW1lJywgbnVsbCk7XG5cbiAgICBpZiAoIXRoaXMuX3NraXBWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZU1hcHBpbmcoZ2VuZXJhdGVkLCBvcmlnaW5hbCwgc291cmNlLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IFN0cmluZyhzb3VyY2UpO1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKTtcbiAgICAgIGlmICghdGhpcy5fbmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9tYXBwaW5ncy5hZGQoe1xuICAgICAgZ2VuZXJhdGVkTGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IGdlbmVyYXRlZC5jb2x1bW4sXG4gICAgICBvcmlnaW5hbExpbmU6IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwubGluZSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiBvcmlnaW5hbCAhPSBudWxsICYmIG9yaWdpbmFsLmNvbHVtbixcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgbmFtZTogbmFtZVxuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFNldCB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGEgc291cmNlIGZpbGUuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHZhciBzb3VyY2UgPSBhU291cmNlRmlsZTtcbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuX3NvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKGFTb3VyY2VDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIC8vIEFkZCB0aGUgc291cmNlIGNvbnRlbnQgdG8gdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwLlxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IF9zb3VyY2VzQ29udGVudHMgbWFwIGlmIHRoZSBwcm9wZXJ0eSBpcyBudWxsLlxuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgc291cmNlIGZpbGUgZnJvbSB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBJZiB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAgaXMgZW1wdHksIHNldCB0aGUgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9zb3VyY2VzQ29udGVudHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBBcHBsaWVzIHRoZSBtYXBwaW5ncyBvZiBhIHN1Yi1zb3VyY2UtbWFwIGZvciBhIHNwZWNpZmljIHNvdXJjZSBmaWxlIHRvIHRoZVxuICogc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQuIEVhY2ggbWFwcGluZyB0byB0aGUgc3VwcGxpZWQgc291cmNlIGZpbGUgaXNcbiAqIHJld3JpdHRlbiB1c2luZyB0aGUgc3VwcGxpZWQgc291cmNlIG1hcC4gTm90ZTogVGhlIHJlc29sdXRpb24gZm9yIHRoZVxuICogcmVzdWx0aW5nIG1hcHBpbmdzIGlzIHRoZSBtaW5pbWl1bSBvZiB0aGlzIG1hcCBhbmQgdGhlIHN1cHBsaWVkIG1hcC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBzb3VyY2UgbWFwIHRvIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgT3B0aW9uYWwuIFRoZSBmaWxlbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuXG4gKiAgICAgICAgSWYgb21pdHRlZCwgU291cmNlTWFwQ29uc3VtZXIncyBmaWxlIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAqIEBwYXJhbSBhU291cmNlTWFwUGF0aCBPcHRpb25hbC4gVGhlIGRpcm5hbWUgb2YgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBtYXBcbiAqICAgICAgICB0byBiZSBhcHBsaWVkLiBJZiByZWxhdGl2ZSwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcENvbnN1bWVyLlxuICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG5lZWRlZCB3aGVuIHRoZSB0d28gc291cmNlIG1hcHMgYXJlbid0IGluIHRoZSBzYW1lXG4gKiAgICAgICAgZGlyZWN0b3J5LCBhbmQgdGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZCBjb250YWlucyByZWxhdGl2ZSBzb3VyY2VcbiAqICAgICAgICBwYXRocy4gSWYgc28sIHRob3NlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBuZWVkIHRvIGJlIHJld3JpdHRlblxuICogICAgICAgIHJlbGF0aXZlIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYXBwbHlTb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyLCBhU291cmNlRmlsZSwgYVNvdXJjZU1hcFBhdGgpIHtcbiAgICB2YXIgc291cmNlRmlsZSA9IGFTb3VyY2VGaWxlO1xuICAgIC8vIElmIGFTb3VyY2VGaWxlIGlzIG9taXR0ZWQsIHdlIHdpbGwgdXNlIHRoZSBmaWxlIHByb3BlcnR5IG9mIHRoZSBTb3VyY2VNYXBcbiAgICBpZiAoYVNvdXJjZUZpbGUgPT0gbnVsbCkge1xuICAgICAgaWYgKGFTb3VyY2VNYXBDb25zdW1lci5maWxlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgJyArXG4gICAgICAgICAgJ29yIHRoZSBzb3VyY2UgbWFwXFwncyBcImZpbGVcIiBwcm9wZXJ0eS4gQm90aCB3ZXJlIG9taXR0ZWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc291cmNlRmlsZSA9IGFTb3VyY2VNYXBDb25zdW1lci5maWxlO1xuICAgIH1cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgLy8gTWFrZSBcInNvdXJjZUZpbGVcIiByZWxhdGl2ZSBpZiBhbiBhYnNvbHV0ZSBVcmwgaXMgcGFzc2VkLlxuICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgIH1cbiAgICAvLyBBcHBseWluZyB0aGUgU291cmNlTWFwIGNhbiBhZGQgYW5kIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBzb3VyY2VzIGFuZFxuICAgIC8vIHRoZSBuYW1lcyBhcnJheS5cbiAgICB2YXIgbmV3U291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICAgIHZhciBuZXdOYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gICAgLy8gRmluZCBtYXBwaW5ncyBmb3IgdGhlIFwic291cmNlRmlsZVwiXG4gICAgdGhpcy5fbWFwcGluZ3MudW5zb3J0ZWRGb3JFYWNoKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IHNvdXJjZUZpbGUgJiYgbWFwcGluZy5vcmlnaW5hbExpbmUgIT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCBjYW4gYmUgbWFwcGVkIGJ5IHRoZSBzb3VyY2UgbWFwLCB0aGVuIHVwZGF0ZSB0aGUgbWFwcGluZy5cbiAgICAgICAgdmFyIG9yaWdpbmFsID0gYVNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9yaWdpbmFsLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ29weSBtYXBwaW5nXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICAgICAgaWYgKGFTb3VyY2VNYXBQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gdXRpbC5qb2luKGFTb3VyY2VNYXBQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBvcmlnaW5hbC5saW5lO1xuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBvcmlnaW5hbC5jb2x1bW47XG4gICAgICAgICAgaWYgKG9yaWdpbmFsLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gb3JpZ2luYWwubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmICFuZXdTb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIG5ld1NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiAhbmV3TmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgIG5ld05hbWVzLmFkZChuYW1lKTtcbiAgICAgIH1cblxuICAgIH0sIHRoaXMpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBuZXdTb3VyY2VzO1xuICAgIHRoaXMuX25hbWVzID0gbmV3TmFtZXM7XG5cbiAgICAvLyBDb3B5IHNvdXJjZXNDb250ZW50cyBvZiBhcHBsaWVkIG1hcC5cbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gIH07XG5cbi8qKlxuICogQSBtYXBwaW5nIGNhbiBoYXZlIG9uZSBvZiB0aGUgdGhyZWUgbGV2ZWxzIG9mIGRhdGE6XG4gKlxuICogICAxLiBKdXN0IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gKiAgIDIuIFRoZSBHZW5lcmF0ZWQgcG9zaXRpb24sIG9yaWdpbmFsIHBvc2l0aW9uLCBhbmQgb3JpZ2luYWwgc291cmNlLlxuICogICAzLiBHZW5lcmF0ZWQgYW5kIG9yaWdpbmFsIHBvc2l0aW9uLCBvcmlnaW5hbCBzb3VyY2UsIGFzIHdlbGwgYXMgYSBuYW1lXG4gKiAgICAgIHRva2VuLlxuICpcbiAqIFRvIG1haW50YWluIGNvbnNpc3RlbmN5LCB3ZSB2YWxpZGF0ZSB0aGF0IGFueSBuZXcgbWFwcGluZyBiZWluZyBhZGRlZCBmYWxsc1xuICogaW4gdG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRlTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl92YWxpZGF0ZU1hcHBpbmcoYUdlbmVyYXRlZCwgYU9yaWdpbmFsLCBhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOYW1lKSB7XG4gICAgLy8gV2hlbiBhT3JpZ2luYWwgaXMgdHJ1dGh5IGJ1dCBoYXMgZW1wdHkgdmFsdWVzIGZvciAubGluZSBhbmQgLmNvbHVtbixcbiAgICAvLyBpdCBpcyBtb3N0IGxpa2VseSBhIHByb2dyYW1tZXIgZXJyb3IuIEluIHRoaXMgY2FzZSB3ZSB0aHJvdyBhIHZlcnlcbiAgICAvLyBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIHRvIHRyeSB0byBndWlkZSB0aGVtIHRoZSByaWdodCB3YXkuXG4gICAgLy8gRm9yIGV4YW1wbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qb2x5bWVyL3BvbHltZXItYnVuZGxlci9wdWxsLzUxOVxuICAgIGlmIChhT3JpZ2luYWwgJiYgdHlwZW9mIGFPcmlnaW5hbC5saW5lICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgYU9yaWdpbmFsLmNvbHVtbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ29yaWdpbmFsLmxpbmUgYW5kIG9yaWdpbmFsLmNvbHVtbiBhcmUgbm90IG51bWJlcnMgLS0geW91IHByb2JhYmx5IG1lYW50IHRvIG9taXQgJyArXG4gICAgICAgICAgICAndGhlIG9yaWdpbmFsIG1hcHBpbmcgZW50aXJlbHkgYW5kIG9ubHkgbWFwIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uIElmIHNvLCBwYXNzICcgK1xuICAgICAgICAgICAgJ251bGwgZm9yIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGluc3RlYWQgb2YgYW4gb2JqZWN0IHdpdGggZW1wdHkgb3IgbnVsbCB2YWx1ZXMuJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhR2VuZXJhdGVkICYmICdsaW5lJyBpbiBhR2VuZXJhdGVkICYmICdjb2x1bW4nIGluIGFHZW5lcmF0ZWRcbiAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICYmICFhT3JpZ2luYWwgJiYgIWFTb3VyY2UgJiYgIWFOYW1lKSB7XG4gICAgICAvLyBDYXNlIDEuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAgICAgICYmIGFPcmlnaW5hbCAmJiAnbGluZScgaW4gYU9yaWdpbmFsICYmICdjb2x1bW4nIGluIGFPcmlnaW5hbFxuICAgICAgICAgICAgICYmIGFHZW5lcmF0ZWQubGluZSA+IDAgJiYgYUdlbmVyYXRlZC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFPcmlnaW5hbC5saW5lID4gMCAmJiBhT3JpZ2luYWwuY29sdW1uID49IDBcbiAgICAgICAgICAgICAmJiBhU291cmNlKSB7XG4gICAgICAvLyBDYXNlcyAyIGFuZCAzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXBwaW5nOiAnICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBnZW5lcmF0ZWQ6IGFHZW5lcmF0ZWQsXG4gICAgICAgIHNvdXJjZTogYVNvdXJjZSxcbiAgICAgICAgb3JpZ2luYWw6IGFPcmlnaW5hbCxcbiAgICAgICAgbmFtZTogYU5hbWVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiB0byB0aGUgc3RyZWFtIG9mIGJhc2UgNjQgVkxRc1xuICogc3BlY2lmaWVkIGJ5IHRoZSBzb3VyY2UgbWFwIGZvcm1hdC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fc2VyaWFsaXplTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3Jfc2VyaWFsaXplTWFwcGluZ3MoKSB7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbmV4dDtcbiAgICB2YXIgbWFwcGluZztcbiAgICB2YXIgbmFtZUlkeDtcbiAgICB2YXIgc291cmNlSWR4O1xuXG4gICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fbWFwcGluZ3MudG9BcnJheSgpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBtYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgbWFwcGluZyA9IG1hcHBpbmdzW2ldO1xuICAgICAgbmV4dCA9ICcnXG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgIHdoaWxlIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG5leHQgKz0gJzsnO1xuICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkTGluZSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgaWYgKCF1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmcsIG1hcHBpbmdzW2kgLSAxXSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0ICs9ICcsJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlSWR4ID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKHNvdXJjZUlkeCAtIHByZXZpb3VzU291cmNlKTtcbiAgICAgICAgcHJldmlvdXNTb3VyY2UgPSBzb3VyY2VJZHg7XG5cbiAgICAgICAgLy8gbGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkIGluIFNvdXJjZU1hcCBzcGVjIHZlcnNpb24gM1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbExpbmUgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbExpbmUpO1xuICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lIC0gMTtcblxuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4pO1xuICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuYW1lSWR4ID0gdGhpcy5fbmFtZXMuaW5kZXhPZihtYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShuYW1lSWR4IC0gcHJldmlvdXNOYW1lKTtcbiAgICAgICAgICBwcmV2aW91c05hbWUgPSBuYW1lSWR4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCArPSBuZXh0O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZ2VuZXJhdGVTb3VyY2VzQ29udGVudChhU291cmNlcywgYVNvdXJjZVJvb3QpIHtcbiAgICByZXR1cm4gYVNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIGlmICghdGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGFTb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZShhU291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHZhciBrZXkgPSB1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSk7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NvdXJjZXNDb250ZW50cywga2V5KVxuICAgICAgICA/IHRoaXMuX3NvdXJjZXNDb250ZW50c1trZXldXG4gICAgICAgIDogbnVsbDtcbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBFeHRlcm5hbGl6ZSB0aGUgc291cmNlIG1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50b0pTT04gPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9KU09OKCkge1xuICAgIHZhciBtYXAgPSB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLl92ZXJzaW9uLFxuICAgICAgc291cmNlczogdGhpcy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICBuYW1lczogdGhpcy5fbmFtZXMudG9BcnJheSgpLFxuICAgICAgbWFwcGluZ3M6IHRoaXMuX3NlcmlhbGl6ZU1hcHBpbmdzKClcbiAgICB9O1xuICAgIGlmICh0aGlzLl9maWxlICE9IG51bGwpIHtcbiAgICAgIG1hcC5maWxlID0gdGhpcy5fZmlsZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgbWFwLnNvdXJjZVJvb3QgPSB0aGlzLl9zb3VyY2VSb290O1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICBtYXAuc291cmNlc0NvbnRlbnQgPSB0aGlzLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KG1hcC5zb3VyY2VzLCBtYXAuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbiAgfTtcblxuLyoqXG4gKiBSZW5kZXIgdGhlIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkIHRvIGEgc3RyaW5nLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvU3RyaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvU3RyaW5nKCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpKTtcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSBTb3VyY2VNYXBHZW5lcmF0b3I7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqIEJhc2VkIG9uIHRoZSBCYXNlIDY0IFZMUSBpbXBsZW1lbnRhdGlvbiBpbiBDbG9zdXJlIENvbXBpbGVyOlxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3NvdXJjZS9icm93c2UvdHJ1bmsvc3JjL2NvbS9nb29nbGUvZGVidWdnaW5nL3NvdXJjZW1hcC9CYXNlNjRWTFEuamF2YVxuICpcbiAqIENvcHlyaWdodCAyMDExIFRoZSBDbG9zdXJlIENvbXBpbGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbiAqIG1ldDpcbiAqXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkXG4gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuICogXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCcuL2Jhc2U2NCcpO1xuXG4vLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbi8vIGxlbmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBzaWduLFxuLy8gdGhlIG5leHQgZm91ciBiaXRzIGFyZSB0aGUgYWN0dWFsIHZhbHVlLCBhbmQgdGhlIDZ0aCBiaXQgaXMgdGhlXG4vLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4vLyBkaWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC5cbi8vXG4vLyAgIENvbnRpbnVhdGlvblxuLy8gICB8ICAgIFNpZ25cbi8vICAgfCAgICB8XG4vLyAgIFYgICAgVlxuLy8gICAxMDEwMTFcblxudmFyIFZMUV9CQVNFX1NISUZUID0gNTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7XG5cbi8vIGJpbmFyeTogMDExMTExXG52YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQ09OVElOVUFUSU9OX0JJVCA9IFZMUV9CQVNFO1xuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAqICAgMiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpXG4gKi9cbmZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICByZXR1cm4gYVZhbHVlIDwgMFxuICAgID8gKCgtYVZhbHVlKSA8PCAxKSArIDFcbiAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDIgKDEwIGJpbmFyeSkgYmVjb21lcyAxLCAzICgxMSBiaW5hcnkpIGJlY29tZXMgLTFcbiAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gKi9cbmZ1bmN0aW9uIGZyb21WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAxO1xuICByZXR1cm4gaXNOZWdhdGl2ZVxuICAgID8gLXNoaWZ0ZWRcbiAgICA6IHNoaWZ0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICB2YXIgZW5jb2RlZCA9IFwiXCI7XG4gIHZhciBkaWdpdDtcblxuICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICBkbyB7XG4gICAgZGlnaXQgPSB2bHEgJiBWTFFfQkFTRV9NQVNLO1xuICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgIGlmICh2bHEgPiAwKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgc3RpbGwgbW9yZSBkaWdpdHMgaW4gdGhpcyB2YWx1ZSwgc28gd2UgbXVzdCBtYWtlIHN1cmUgdGhlXG4gICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUO1xuICAgIH1cbiAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICB9IHdoaWxlICh2bHEgPiAwKTtcblxuICByZXR1cm4gZW5jb2RlZDtcbn07XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgbmV4dCBiYXNlIDY0IFZMUSB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2RlY29kZShhU3RyLCBhSW5kZXgsIGFPdXRQYXJhbSkge1xuICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAwO1xuICB2YXIgc2hpZnQgPSAwO1xuICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICBkbyB7XG4gICAgaWYgKGFJbmRleCA+PSBzdHJMZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICB9XG5cbiAgICBkaWdpdCA9IGJhc2U2NC5kZWNvZGUoYVN0ci5jaGFyQ29kZUF0KGFJbmRleCsrKSk7XG4gICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgZGlnaXQ6IFwiICsgYVN0ci5jaGFyQXQoYUluZGV4IC0gMSkpO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICsgKGRpZ2l0IDw8IHNoaWZ0KTtcbiAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgfSB3aGlsZSAoY29udGludWF0aW9uKTtcblxuICBhT3V0UGFyYW0udmFsdWUgPSBmcm9tVkxRU2lnbmVkKHJlc3VsdCk7XG4gIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2Jhc2U2NC12bHEuanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2Jhc2U2NC5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICogb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2UgYXJlIGdldHRpbmcuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEFuIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgaXMgbWlzc2luZ1xuICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICogZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGFOYW1lIGluIGFBcmdzKSB7XG4gICAgcmV0dXJuIGFBcmdzW2FOYW1lXTtcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGFEZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICB9XG59XG5leHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxudmFyIHVybFJlZ2V4cCA9IC9eKD86KFtcXHcrXFwtLl0rKTopP1xcL1xcLyg/OihcXHcrOlxcdyspQCk/KFtcXHcuLV0qKSg/OjooXFxkKykpPyguKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgdXJsUmVnZXhwLnRlc3QoYVBhdGgpO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZDtcblxuZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICBpZiAoYVN0cjEgPT09IGFTdHIyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYVN0cjEgPT09IG51bGwpIHtcbiAgICByZXR1cm4gMTsgLy8gYVN0cjIgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAtMTsgLy8gYVN0cjEgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuLyoqXG4gKiBTdHJpcCBhbnkgSlNPTiBYU1NJIGF2b2lkYW5jZSBwcmVmaXggZnJvbSB0aGUgc3RyaW5nIChhcyBkb2N1bWVudGVkXG4gKiBpbiB0aGUgc291cmNlIG1hcHMgc3BlY2lmaWNhdGlvbiksIGFuZCB0aGVuIHBhcnNlIHRoZSBzdHJpbmcgYXNcbiAqIEpTT04uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU291cmNlTWFwSW5wdXQoc3RyKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHN0ci5yZXBsYWNlKC9eXFwpXX0nW15cXG5dKlxcbi8sICcnKSk7XG59XG5leHBvcnRzLnBhcnNlU291cmNlTWFwSW5wdXQgPSBwYXJzZVNvdXJjZU1hcElucHV0O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIFVSTCBvZiBhIHNvdXJjZSBnaXZlbiB0aGUgdGhlIHNvdXJjZSByb290LCB0aGUgc291cmNlJ3NcbiAqIFVSTCwgYW5kIHRoZSBzb3VyY2UgbWFwJ3MgVVJMLlxuICovXG5mdW5jdGlvbiBjb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHNvdXJjZVVSTCwgc291cmNlTWFwVVJMKSB7XG4gIHNvdXJjZVVSTCA9IHNvdXJjZVVSTCB8fCAnJztcblxuICBpZiAoc291cmNlUm9vdCkge1xuICAgIC8vIFRoaXMgZm9sbG93cyB3aGF0IENocm9tZSBkb2VzLlxuICAgIGlmIChzb3VyY2VSb290W3NvdXJjZVJvb3QubGVuZ3RoIC0gMV0gIT09ICcvJyAmJiBzb3VyY2VVUkxbMF0gIT09ICcvJykge1xuICAgICAgc291cmNlUm9vdCArPSAnLyc7XG4gICAgfVxuICAgIC8vIFRoZSBzcGVjIHNheXM6XG4gICAgLy8gICBMaW5lIDQ6IEFuIG9wdGlvbmFsIHNvdXJjZSByb290LCB1c2VmdWwgZm9yIHJlbG9jYXRpbmcgc291cmNlXG4gICAgLy8gICBmaWxlcyBvbiBhIHNlcnZlciBvciByZW1vdmluZyByZXBlYXRlZCB2YWx1ZXMgaW4gdGhlXG4gICAgLy8gICDigJxzb3VyY2Vz4oCdIGVudHJ5LiAgVGhpcyB2YWx1ZSBpcyBwcmVwZW5kZWQgdG8gdGhlIGluZGl2aWR1YWxcbiAgICAvLyAgIGVudHJpZXMgaW4gdGhlIOKAnHNvdXJjZeKAnSBmaWVsZC5cbiAgICBzb3VyY2VVUkwgPSBzb3VyY2VSb290ICsgc291cmNlVVJMO1xuICB9XG5cbiAgLy8gSGlzdG9yaWNhbGx5LCBTb3VyY2VNYXBDb25zdW1lciBkaWQgbm90IHRha2UgdGhlIHNvdXJjZU1hcFVSTCBhc1xuICAvLyBhIHBhcmFtZXRlci4gIFRoaXMgbW9kZSBpcyBzdGlsbCBzb21ld2hhdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeVxuICAvLyB0aGlzIGNvZGUgYmxvY2sgaXMgY29uZGl0aW9uYWwuICBIb3dldmVyLCBpdCdzIHByZWZlcmFibGUgdG8gcGFzc1xuICAvLyB0aGUgc291cmNlIG1hcCBVUkwgdG8gU291cmNlTWFwQ29uc3VtZXIsIHNvIHRoYXQgdGhpcyBmdW5jdGlvblxuICAvLyBjYW4gaW1wbGVtZW50IHRoZSBzb3VyY2UgVVJMIHJlc29sdXRpb24gYWxnb3JpdGhtIGFzIG91dGxpbmVkIGluXG4gIC8vIHRoZSBzcGVjLiAgVGhpcyBibG9jayBpcyBiYXNpY2FsbHkgdGhlIGVxdWl2YWxlbnQgb2Y6XG4gIC8vICAgIG5ldyBVUkwoc291cmNlVVJMLCBzb3VyY2VNYXBVUkwpLnRvU3RyaW5nKClcbiAgLy8gLi4uIGV4Y2VwdCBpdCBhdm9pZHMgdXNpbmcgVVJMLCB3aGljaCB3YXNuJ3QgYXZhaWxhYmxlIGluIHRoZVxuICAvLyBvbGRlciByZWxlYXNlcyBvZiBub2RlIHN0aWxsIHN1cHBvcnRlZCBieSB0aGlzIGxpYnJhcnkuXG4gIC8vXG4gIC8vIFRoZSBzcGVjIHNheXM6XG4gIC8vICAgSWYgdGhlIHNvdXJjZXMgYXJlIG5vdCBhYnNvbHV0ZSBVUkxzIGFmdGVyIHByZXBlbmRpbmcgb2YgdGhlXG4gIC8vICAg4oCcc291cmNlUm9vdOKAnSwgdGhlIHNvdXJjZXMgYXJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZVxuICAvLyAgIFNvdXJjZU1hcCAobGlrZSByZXNvbHZpbmcgc2NyaXB0IHNyYyBpbiBhIGh0bWwgZG9jdW1lbnQpLlxuICBpZiAoc291cmNlTWFwVVJMKSB7XG4gICAgdmFyIHBhcnNlZCA9IHVybFBhcnNlKHNvdXJjZU1hcFVSTCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNvdXJjZU1hcFVSTCBjb3VsZCBub3QgYmUgcGFyc2VkXCIpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkLnBhdGgpIHtcbiAgICAgIC8vIFN0cmlwIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LCBidXQga2VlcCB0aGUgXCIvXCIuXG4gICAgICB2YXIgaW5kZXggPSBwYXJzZWQucGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgcGFyc2VkLnBhdGggPSBwYXJzZWQucGF0aC5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlVVJMID0gam9pbih1cmxHZW5lcmF0ZShwYXJzZWQpLCBzb3VyY2VVUkwpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShzb3VyY2VVUkwpO1xufVxuZXhwb3J0cy5jb21wdXRlU291cmNlVVJMID0gY29tcHV0ZVNvdXJjZVVSTDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSB1dGlsLnBhcnNlU291cmNlTWFwSW5wdXQoYVNvdXJjZU1hcCk7XG4gIH1cblxuICByZXR1cm4gc291cmNlTWFwLnNlY3Rpb25zICE9IG51bGxcbiAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwLCBhU291cmNlTWFwVVJMKVxuICAgIDogbmV3IEJhc2ljU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwLCBhU291cmNlTWFwVVJMKTtcbn1cblxuU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgcmV0dXJuIEJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcChhU291cmNlTWFwLCBhU291cmNlTWFwVVJMKTtcbn1cblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8vIGBfX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYF9fb3JpZ2luYWxNYXBwaW5nc2AgYXJlIGFycmF5cyB0aGF0IGhvbGQgdGhlXG4vLyBwYXJzZWQgbWFwcGluZyBjb29yZGluYXRlcyBmcm9tIHRoZSBzb3VyY2UgbWFwJ3MgXCJtYXBwaW5nc1wiIGF0dHJpYnV0ZS4gVGhleVxuLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGdldHRlcnMgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBwYXJzZSB0aGUgbWFwcGluZ3Ncbi8vIGFuZCBjcmVhdGUgdGhlc2UgYXJyYXlzIG9uY2UgcXVlcmllZCBmb3IgYSBzb3VyY2UgbG9jYXRpb24uIFdlIGp1bXAgdGhyb3VnaFxuLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4vLyB0aGVtIGlzIGV4cGVuc2l2ZSwgc28gd2Ugb25seSB3YW50IHRvIGRvIGl0IGlmIHdlIG11c3QuXG4vL1xuLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbi8vXG4vLyAgICAge1xuLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgc291cmNlOiBUaGUgcGF0aCB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhhdCBnZW5lcmF0ZWQgdGhpc1xuLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBzeW1ib2wgd2hpY2ggZ2VuZXJhdGVkIHRoaXMgY2h1bmsgb2Zcbi8vICAgICAgICAgICAgIGNvZGUuXG4vLyAgICAgfVxuLy9cbi8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbi8vIGBudWxsYC5cbi8vXG4vLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuLy9cbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zLlxuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX2dlbmVyYXRlZE1hcHBpbmdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgc291cmNlID0gdXRpbC5jb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHNvdXJjZSwgdGhpcy5fc291cmNlTWFwVVJMKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IE9wdGlvbmFsLiB0aGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAgVGhlIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICBsaW5lIG51bWJlciBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgdmFyIGxpbmUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKTtcblxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gMCwgd2UgdGh1cyBmaW5kIHRoZSBsYXN0IG1hcHBpbmcgZm9yXG4gICAgLy8gdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgb3JpZ2luYWxMaW5lOiBsaW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICB9O1xuXG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX2ZpbmRTb3VyY2VJbmRleChuZWVkbGUuc291cmNlKTtcbiAgICBpZiAobmVlZGxlLnNvdXJjZSA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGZvdW5kLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIHdlcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID09IG9yaWdpbmFsQ29sdW1uKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5ncztcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAqIHBvc2l0aW9uIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3JcbiAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBuYW1lczogQW4gYXJyYXkgb2YgaWRlbnRpZmllcnMgd2hpY2ggY2FuIGJlIHJlZmVycmVuY2VkIGJ5IGluZGl2aWR1YWwgbWFwcGluZ3MuXG4gKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbWFwcGluZ3M6IEEgc3RyaW5nIG9mIGJhc2U2NCBWTFFzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBtYXBwaW5ncy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKlxuICogSGVyZSBpcyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXTpcbiAqXG4gKiAgICAge1xuICogICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICogICAgICAgc291cmNlUm9vdCA6IFwiXCIsXG4gKiAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgIG1hcHBpbmdzOiBcIkFBLEFCOztBQkNERTtcIlxuICogICAgIH1cbiAqXG4gKiBUaGUgc2Vjb25kIHBhcmFtZXRlciwgaWYgZ2l2ZW4sIGlzIGEgc3RyaW5nIHdob3NlIHZhbHVlIGlzIHRoZSBVUkxcbiAqIGF0IHdoaWNoIHRoZSBzb3VyY2UgbWFwIHdhcyBmb3VuZC4gIFRoaXMgVVJMIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGVcbiAqIHNvdXJjZXMgYXJyYXkuXG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IHV0aWwucGFyc2VTb3VyY2VNYXBJbnB1dChhU291cmNlTWFwKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgLy8gU2FzcyAzLjMgbGVhdmVzIG91dCB0aGUgJ25hbWVzJyBhcnJheSwgc28gd2UgZGV2aWF0ZSBmcm9tIHRoZSBzcGVjICh3aGljaFxuICAvLyByZXF1aXJlcyB0aGUgYXJyYXkpIHRvIHBsYXkgbmljZSBoZXJlLlxuICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgdmFyIHNvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VSb290JywgbnVsbCk7XG4gIHZhciBzb3VyY2VzQ29udGVudCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXNDb250ZW50JywgbnVsbCk7XG4gIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gIHZhciBmaWxlID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnZmlsZScsIG51bGwpO1xuXG4gIC8vIE9uY2UgYWdhaW4sIFNhc3MgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYyBhbmQgc3VwcGxpZXMgdGhlIHZlcnNpb24gYXMgYVxuICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICBpZiAoc291cmNlUm9vdCkge1xuICAgIHNvdXJjZVJvb3QgPSB1dGlsLm5vcm1hbGl6ZShzb3VyY2VSb290KTtcbiAgfVxuXG4gIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLy8gU29tZSBzb3VyY2UgbWFwcyBwcm9kdWNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBsaWtlIFwiLi9mb28uanNcIiBpbnN0ZWFkIG9mXG4gICAgLy8gXCJmb28uanNcIi4gIE5vcm1hbGl6ZSB0aGVzZSBmaXJzdCBzbyB0aGF0IGZ1dHVyZSBjb21wYXJpc29ucyB3aWxsIHN1Y2NlZWQuXG4gICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgIC5tYXAodXRpbC5ub3JtYWxpemUpXG4gICAgLy8gQWx3YXlzIGVuc3VyZSB0aGF0IGFic29sdXRlIHNvdXJjZXMgYXJlIGludGVybmFsbHkgc3RvcmVkIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgLy8gYmUgcGFydGljdWxhcmx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZSByb290IGlzIGEgcHJlZml4IG9mIHRoZVxuICAgIC8vIHNvdXJjZSAodmFsaWQsIGJ1dCB3aHk/PykuIFNlZSBnaXRodWIgaXNzdWUgIzE5OSBhbmQgYnVnemlsLmxhLzExODg5ODIuXG4gICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlUm9vdCAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlUm9vdCkgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZSlcbiAgICAgICAgPyB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZSlcbiAgICAgICAgOiBzb3VyY2U7XG4gICAgfSk7XG5cbiAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAvLyBzb21ldGltZXMgZ2VuZXJhdGVzIHNvdXJjZSBtYXBzIHdpdGggZHVwbGljYXRlcyBpbiB0aGVtLiBTZWUgR2l0aHViIGlzc3VlXG4gIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMubWFwKFN0cmluZyksIHRydWUpO1xuICB0aGlzLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KHNvdXJjZXMsIHRydWUpO1xuXG4gIHRoaXMuX2Fic29sdXRlU291cmNlcyA9IHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgIHJldHVybiB1dGlsLmNvbXB1dGVTb3VyY2VVUkwoc291cmNlUm9vdCwgcywgYVNvdXJjZU1hcFVSTCk7XG4gIH0pO1xuXG4gIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgdGhpcy5fbWFwcGluZ3MgPSBtYXBwaW5ncztcbiAgdGhpcy5fc291cmNlTWFwVVJMID0gYVNvdXJjZU1hcFVSTDtcbiAgdGhpcy5maWxlID0gZmlsZTtcbn1cblxuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZmluZCB0aGUgaW5kZXggb2YgYSBzb3VyY2UuICBSZXR1cm5zIC0xIGlmIG5vdFxuICogZm91bmQuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kU291cmNlSW5kZXggPSBmdW5jdGlvbihhU291cmNlKSB7XG4gIHZhciByZWxhdGl2ZVNvdXJjZSA9IGFTb3VyY2U7XG4gIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgIHJlbGF0aXZlU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHJlbGF0aXZlU291cmNlKTtcbiAgfVxuXG4gIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhyZWxhdGl2ZVNvdXJjZSkpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlcy5pbmRleE9mKHJlbGF0aXZlU291cmNlKTtcbiAgfVxuXG4gIC8vIE1heWJlIGFTb3VyY2UgaXMgYW4gYWJzb2x1dGUgVVJMIGFzIHJldHVybmVkIGJ5IHxzb3VyY2VzfC4gIEluXG4gIC8vIHRoaXMgY2FzZSB3ZSBjYW4ndCBzaW1wbHkgdW5kbyB0aGUgdHJhbnNmb3JtLlxuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IHRoaXMuX2Fic29sdXRlU291cmNlcy5sZW5ndGg7ICsraSkge1xuICAgIGlmICh0aGlzLl9hYnNvbHV0ZVNvdXJjZXNbaV0gPT0gYVNvdXJjZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGZyb20gYSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKlxuICogQHBhcmFtIFNvdXJjZU1hcEdlbmVyYXRvciBhU291cmNlTWFwXG4gKiAgICAgICAgVGhlIHNvdXJjZSBtYXAgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuICogQHBhcmFtIFN0cmluZyBhU291cmNlTWFwVVJMXG4gKiAgICAgICAgVGhlIFVSTCBhdCB3aGljaCB0aGUgc291cmNlIG1hcCBjYW4gYmUgZm91bmQgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgICB2YXIgc21jID0gT2JqZWN0LmNyZWF0ZShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5cbiAgICB2YXIgbmFtZXMgPSBzbWMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX25hbWVzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgIHNtYy5zb3VyY2VSb290ID0gYVNvdXJjZU1hcC5fc291cmNlUm9vdDtcbiAgICBzbWMuc291cmNlc0NvbnRlbnQgPSBhU291cmNlTWFwLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHNtYy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgc21jLmZpbGUgPSBhU291cmNlTWFwLl9maWxlO1xuICAgIHNtYy5fc291cmNlTWFwVVJMID0gYVNvdXJjZU1hcFVSTDtcbiAgICBzbWMuX2Fic29sdXRlU291cmNlcyA9IHNtYy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gdXRpbC5jb21wdXRlU291cmNlVVJMKHNtYy5zb3VyY2VSb290LCBzLCBhU291cmNlTWFwVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlU291cmNlcy5zbGljZSgpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyXG4gKiAgICAgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICBcImdlbmVyYXRlZExpbmVcIixcbiAgICAgIFwiZ2VuZXJhdGVkQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuYXQoc291cmNlKTtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmNvbXB1dGVTb3VyY2VVUkwodGhpcy5zb3VyY2VSb290LCBzb3VyY2UsIHRoaXMuX3NvdXJjZU1hcFVSTCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5hdChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIG5hbWU6IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoID49IHRoaXMuX3NvdXJjZXMuc2l6ZSgpICYmXG4gICAgICAhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uIChzYykgeyByZXR1cm4gc2MgPT0gbnVsbDsgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRTb3VyY2VJbmRleChhU291cmNlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbaW5kZXhdO1xuICAgIH1cblxuICAgIHZhciByZWxhdGl2ZVNvdXJjZSA9IGFTb3VyY2U7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICByZWxhdGl2ZVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCByZWxhdGl2ZVNvdXJjZSk7XG4gICAgfVxuXG4gICAgdmFyIHVybDtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgJiYgKHVybCA9IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHtcbiAgICAgIC8vIFhYWDogZmlsZTovLyBVUklzIGFuZCBhYnNvbHV0ZSBwYXRocyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZm9yXG4gICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODU1OTcuXG4gICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSByZWxhdGl2ZVNvdXJjZS5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKTtcbiAgICAgIGlmICh1cmwuc2NoZW1lID09IFwiZmlsZVwiXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihmaWxlVXJpQWJzUGF0aCldXG4gICAgICB9XG5cbiAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKFwiL1wiICsgcmVsYXRpdmVTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIHJlbGF0aXZlU291cmNlKV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IGZyb21cbiAgICAvLyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IuIEluIHRoYXQgY2FzZSwgd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgIC8vIHJldHVybiBudWxsLCBzbyB3ZSBwcm92aWRlIGEgZmxhZyB0byBleGl0IGdyYWNlZnVsbHkuXG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgcmVsYXRpdmVTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgc291cmNlID0gdGhpcy5fZmluZFNvdXJjZUluZGV4KHNvdXJjZSk7XG4gICAgaWYgKHNvdXJjZSA8IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gbmVlZGxlLnNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbmV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQW4gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaFxuICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAqIHRoYXQgaXQgdGFrZXMgXCJpbmRleGVkXCIgc291cmNlIG1hcHMgKGkuZS4gb25lcyB3aXRoIGEgXCJzZWN0aW9uc1wiIGZpZWxkKSBhc1xuICogaW5wdXQuXG4gKlxuICogVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogVGhlIHNlY29uZCBwYXJhbWV0ZXIsIGlmIGdpdmVuLCBpcyBhIHN0cmluZyB3aG9zZSB2YWx1ZSBpcyB0aGUgVVJMXG4gKiBhdCB3aGljaCB0aGUgc291cmNlIG1hcCB3YXMgZm91bmQuICBUaGlzIFVSTCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlXG4gKiBzb3VyY2VzIGFycmF5LlxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0I2hlYWRpbmc9aC41MzVlczN4ZXByZ3RcbiAqL1xuZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSB1dGlsLnBhcnNlU291cmNlTWFwSW5wdXQoYVNvdXJjZU1hcCk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSwgYVNvdXJjZU1hcFVSTClcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS4gIFRoZSBjb2x1bW5cbiAqICAgICBudW1iZXIgaXMgMC1iYXNlZC5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICAvLyBGaW5kIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwXG4gICAgLy8gdG8gYW4gb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IGJpbmFyeVNlYXJjaC5zZWFyY2gobmVlZGxlLCB0aGlzLl9zZWN0aW9ucyxcbiAgICAgIGZ1bmN0aW9uKG5lZWRsZSwgc2VjdGlvbikge1xuICAgICAgICB2YXIgY21wID0gbmVlZGxlLmdlbmVyYXRlZExpbmUgLSBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO1xuICAgICAgICBpZiAoY21wKSB7XG4gICAgICAgICAgcmV0dXJuIGNtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAobmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgIH0pO1xuICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIG5hbWU6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlY3Rpb24uY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICBjb2x1bW46IG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmVcbiAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgOiAwKSxcbiAgICAgIGJpYXM6IGFBcmdzLmJpYXNcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN0aW9ucy5ldmVyeShmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKTtcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlclxuICogICAgIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuIFxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgICAgVGhlIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIC8vIE9ubHkgY29uc2lkZXIgdGhpcyBzZWN0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgc291cmNlIGlzIGluIHRoZSBsaXN0IG9mXG4gICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLl9maW5kU291cmNlSW5kZXgodXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGdlbmVyYXRlZFBvc2l0aW9uID0gc2VjdGlvbi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncyk7XG4gICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWRQb3NpdGlvbi5jb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmVcbiAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICA6IDApXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgdmFyIHNlY3Rpb25NYXBwaW5ncyA9IHNlY3Rpb24uY29uc3VtZXIuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWN0aW9uTWFwcGluZ3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3Nbal07XG5cbiAgICAgICAgdmFyIHNvdXJjZSA9IHNlY3Rpb24uY29uc3VtZXIuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmNvbXB1dGVTb3VyY2VVUkwoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290LCBzb3VyY2UsIHRoaXMuX3NvdXJjZU1hcFVSTCk7XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgICAgIHZhciBuYW1lID0gbnVsbDtcbiAgICAgICAgaWYgKG1hcHBpbmcubmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvcXVpY2stc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gfHwgJyc7XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdIHx8ICcnO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW5vZGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else if(typeof exports === 'object')
		exports["sourceMap"] = factory();
	else
		root["sourceMap"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};

/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {

/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;

/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};

/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;

/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}


/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;

/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;

/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";

/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

	/*
	 * Copyright 2009-2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE.txt or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */
	exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
	exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;
	exports.SourceNode = __webpack_require__(10).SourceNode;


/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */

	var base64VLQ = __webpack_require__(2);
	var util = __webpack_require__(4);
	var ArraySet = __webpack_require__(5).ArraySet;
	var MappingList = __webpack_require__(6).MappingList;

	/**
	 * An instance of the SourceMapGenerator represents a source map which is
	 * being built incrementally. You may pass an object with the following
	 * properties:
	 *
	 *   - file: The filename of the generated source.
	 *   - sourceRoot: A root for all relative URLs in this source map.
	 */
	function SourceMapGenerator(aArgs) {
	  if (!aArgs) {
	    aArgs = {};
	  }
	  this._file = util.getArg(aArgs, 'file', null);
	  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
	  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
	  this._sources = new ArraySet();
	  this._names = new ArraySet();
	  this._mappings = new MappingList();
	  this._sourcesContents = null;
	}

	SourceMapGenerator.prototype._version = 3;

	/**
	 * Creates a new SourceMapGenerator based on a SourceMapConsumer
	 *
	 * @param aSourceMapConsumer The SourceMap.
	 */
	SourceMapGenerator.fromSourceMap =
	  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
	    var sourceRoot = aSourceMapConsumer.sourceRoot;
	    var generator = new SourceMapGenerator({
	      file: aSourceMapConsumer.file,
	      sourceRoot: sourceRoot
	    });
	    aSourceMapConsumer.eachMapping(function (mapping) {
	      var newMapping = {
	        generated: {
	          line: mapping.generatedLine,
	          column: mapping.generatedColumn
	        }
	      };

	      if (mapping.source != null) {
	        newMapping.source = mapping.source;
	        if (sourceRoot != null) {
	          newMapping.source = util.relative(sourceRoot, newMapping.source);
	        }

	        newMapping.original = {
	          line: mapping.originalLine,
	          column: mapping.originalColumn
	        };

	        if (mapping.name != null) {
	          newMapping.name = mapping.name;
	        }
	      }

	      generator.addMapping(newMapping);
	    });
	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
	      var sourceRelative = sourceFile;
	      if (sourceRoot !== null) {
	        sourceRelative = util.relative(sourceRoot, sourceFile);
	      }

	      if (!generator._sources.has(sourceRelative)) {
	        generator._sources.add(sourceRelative);
	      }

	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
	      if (content != null) {
	        generator.setSourceContent(sourceFile, content);
	      }
	    });
	    return generator;
	  };

	/**
	 * Add a single mapping from original source line and column to the generated
	 * source's line and column for this source map being created. The mapping
	 * object should have the following properties:
	 *
	 *   - generated: An object with the generated line and column positions.
	 *   - original: An object with the original line and column positions.
	 *   - source: The original source file (relative to the sourceRoot).
	 *   - name: An optional original token name for this mapping.
	 */
	SourceMapGenerator.prototype.addMapping =
	  function SourceMapGenerator_addMapping(aArgs) {
	    var generated = util.getArg(aArgs, 'generated');
	    var original = util.getArg(aArgs, 'original', null);
	    var source = util.getArg(aArgs, 'source', null);
	    var name = util.getArg(aArgs, 'name', null);

	    if (!this._skipValidation) {
	      this._validateMapping(generated, original, source, name);
	    }

	    if (source != null) {
	      source = String(source);
	      if (!this._sources.has(source)) {
	        this._sources.add(source);
	      }
	    }

	    if (name != null) {
	      name = String(name);
	      if (!this._names.has(name)) {
	        this._names.add(name);
	      }
	    }

	    this._mappings.add({
	      generatedLine: generated.line,
	      generatedColumn: generated.column,
	      originalLine: original != null && original.line,
	      originalColumn: original != null && original.column,
	      source: source,
	      name: name
	    });
	  };

	/**
	 * Set the source content for a source file.
	 */
	SourceMapGenerator.prototype.setSourceContent =
	  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
	    var source = aSourceFile;
	    if (this._sourceRoot != null) {
	      source = util.relative(this._sourceRoot, source);
	    }

	    if (aSourceContent != null) {
	      // Add the source content to the _sourcesContents map.
	      // Create a new _sourcesContents map if the property is null.
	      if (!this._sourcesContents) {
	        this._sourcesContents = Object.create(null);
	      }
	      this._sourcesContents[util.toSetString(source)] = aSourceContent;
	    } else if (this._sourcesContents) {
	      // Remove the source file from the _sourcesContents map.
	      // If the _sourcesContents map is empty, set the property to null.
	      delete this._sourcesContents[util.toSetString(source)];
	      if (Object.keys(this._sourcesContents).length === 0) {
	        this._sourcesContents = null;
	      }
	    }
	  };

	/**
	 * Applies the mappings of a sub-source-map for a specific source file to the
	 * source map being generated. Each mapping to the supplied source file is
	 * rewritten using the supplied source map. Note: The resolution for the
	 * resulting mappings is the minimium of this map and the supplied map.
	 *
	 * @param aSourceMapConsumer The source map to be applied.
	 * @param aSourceFile Optional. The filename of the source file.
	 *        If omitted, SourceMapConsumer's file property will be used.
	 * @param aSourceMapPath Optional. The dirname of the path to the source map
	 *        to be applied. If relative, it is relative to the SourceMapConsumer.
	 *        This parameter is needed when the two source maps aren't in the same
	 *        directory, and the source map to be applied contains relative source
	 *        paths. If so, those relative source paths need to be rewritten
	 *        relative to the SourceMapGenerator.
	 */
	SourceMapGenerator.prototype.applySourceMap =
	  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
	    var sourceFile = aSourceFile;
	    // If aSourceFile is omitted, we will use the file property of the SourceMap
	    if (aSourceFile == null) {
	      if (aSourceMapConsumer.file == null) {
	        throw new Error(
	          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
	          'or the source map\'s "file" property. Both were omitted.'
	        );
	      }
	      sourceFile = aSourceMapConsumer.file;
	    }
	    var sourceRoot = this._sourceRoot;
	    // Make "sourceFile" relative if an absolute Url is passed.
	    if (sourceRoot != null) {
	      sourceFile = util.relative(sourceRoot, sourceFile);
	    }
	    // Applying the SourceMap can add and remove items from the sources and
	    // the names array.
	    var newSources = new ArraySet();
	    var newNames = new ArraySet();

	    // Find mappings for the "sourceFile"
	    this._mappings.unsortedForEach(function (mapping) {
	      if (mapping.source === sourceFile && mapping.originalLine != null) {
	        // Check if it can be mapped by the source map, then update the mapping.
	        var original = aSourceMapConsumer.originalPositionFor({
	          line: mapping.originalLine,
	          column: mapping.originalColumn
	        });
	        if (original.source != null) {
	          // Copy mapping
	          mapping.source = original.source;
	          if (aSourceMapPath != null) {
	            mapping.source = util.join(aSourceMapPath, mapping.source)
	          }
	          if (sourceRoot != null) {
	            mapping.source = util.relative(sourceRoot, mapping.source);
	          }
	          mapping.originalLine = original.line;
	          mapping.originalColumn = original.column;
	          if (original.name != null) {
	            mapping.name = original.name;
	          }
	        }
	      }

	      var source = mapping.source;
	      if (source != null && !newSources.has(source)) {
	        newSources.add(source);
	      }

	      var name = mapping.name;
	      if (name != null && !newNames.has(name)) {
	        newNames.add(name);
	      }

	    }, this);
	    this._sources = newSources;
	    this._names = newNames;

	    // Copy sourcesContents of applied map.
	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
	      if (content != null) {
	        if (aSourceMapPath != null) {
	          sourceFile = util.join(aSourceMapPath, sourceFile);
	        }
	        if (sourceRoot != null) {
	          sourceFile = util.relative(sourceRoot, sourceFile);
	        }
	        this.setSourceContent(sourceFile, content);
	      }
	    }, this);
	  };

	/**
	 * A mapping can have one of the three levels of data:
	 *
	 *   1. Just the generated position.
	 *   2. The Generated position, original position, and original source.
	 *   3. Generated and original position, original source, as well as a name
	 *      token.
	 *
	 * To maintain consistency, we validate that any new mapping being added falls
	 * in to one of these categories.
	 */
	SourceMapGenerator.prototype._validateMapping =
	  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
	                                              aName) {
	    // When aOriginal is truthy but has empty values for .line and .column,
	    // it is most likely a programmer error. In this case we throw a very
	    // specific error message to try to guide them the right way.
	    // For example: https://github.com/Polymer/polymer-bundler/pull/519
	    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
	        throw new Error(
	            'original.line and original.column are not numbers -- you probably meant to omit ' +
	            'the original mapping entirely and only map the generated position. If so, pass ' +
	            'null for the original mapping instead of an object with empty or null values.'
	        );
	    }

	    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
	        && aGenerated.line > 0 && aGenerated.column >= 0
	        && !aOriginal && !aSource && !aName) {
	      // Case 1.
	      return;
	    }
	    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
	             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
	             && aGenerated.line > 0 && aGenerated.column >= 0
	             && aOriginal.line > 0 && aOriginal.column >= 0
	             && aSource) {
	      // Cases 2 and 3.
	      return;
	    }
	    else {
	      throw new Error('Invalid mapping: ' + JSON.stringify({
	        generated: aGenerated,
	        source: aSource,
	        original: aOriginal,
	        name: aName
	      }));
	    }
	  };

	/**
	 * Serialize the accumulated mappings in to the stream of base 64 VLQs
	 * specified by the source map format.
	 */
	SourceMapGenerator.prototype._serializeMappings =
	  function SourceMapGenerator_serializeMappings() {
	    var previousGeneratedColumn = 0;
	    var previousGeneratedLine = 1;
	    var previousOriginalColumn = 0;
	    var previousOriginalLine = 0;
	    var previousName = 0;
	    var previousSource = 0;
	    var result = '';
	    var next;
	    var mapping;
	    var nameIdx;
	    var sourceIdx;

	    var mappings = this._mappings.toArray();
	    for (var i = 0, len = mappings.length; i < len; i++) {
	      mapping = mappings[i];
	      next = ''

	      if (mapping.generatedLine !== previousGeneratedLine) {
	        previousGeneratedColumn = 0;
	        while (mapping.generatedLine !== previousGeneratedLine) {
	          next += ';';
	          previousGeneratedLine++;
	        }
	      }
	      else {
	        if (i > 0) {
	          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
	            continue;
	          }
	          next += ',';
	        }
	      }

	      next += base64VLQ.encode(mapping.generatedColumn
	                                 - previousGeneratedColumn);
	      previousGeneratedColumn = mapping.generatedColumn;

	      if (mapping.source != null) {
	        sourceIdx = this._sources.indexOf(mapping.source);
	        next += base64VLQ.encode(sourceIdx - previousSource);
	        previousSource = sourceIdx;

	        // lines are stored 0-based in SourceMap spec version 3
	        next += base64VLQ.encode(mapping.originalLine - 1
	                                   - previousOriginalLine);
	        previousOriginalLine = mapping.originalLine - 1;

	        next += base64VLQ.encode(mapping.originalColumn
	                                   - previousOriginalColumn);
	        previousOriginalColumn = mapping.originalColumn;

	        if (mapping.name != null) {
	          nameIdx = this._names.indexOf(mapping.name);
	          next += base64VLQ.encode(nameIdx - previousName);
	          previousName = nameIdx;
	        }
	      }

	      result += next;
	    }

	    return result;
	  };

	SourceMapGenerator.prototype._generateSourcesContent =
	  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
	    return aSources.map(function (source) {
	      if (!this._sourcesContents) {
	        return null;
	      }
	      if (aSourceRoot != null) {
	        source = util.relative(aSourceRoot, source);
	      }
	      var key = util.toSetString(source);
	      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
	        ? this._sourcesContents[key]
	        : null;
	    }, this);
	  };

	/**
	 * Externalize the source map.
	 */
	SourceMapGenerator.prototype.toJSON =
	  function SourceMapGenerator_toJSON() {
	    var map = {
	      version: this._version,
	      sources: this._sources.toArray(),
	      names: this._names.toArray(),
	      mappings: this._serializeMappings()
	    };
	    if (this._file != null) {
	      map.file = this._file;
	    }
	    if (this._sourceRoot != null) {
	      map.sourceRoot = this._sourceRoot;
	    }
	    if (this._sourcesContents) {
	      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
	    }

	    return map;
	  };

	/**
	 * Render the source map being generated to a string.
	 */
	SourceMapGenerator.prototype.toString =
	  function SourceMapGenerator_toString() {
	    return JSON.stringify(this.toJSON());
	  };

	exports.SourceMapGenerator = SourceMapGenerator;


/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 *
	 * Based on the Base 64 VLQ implementation in Closure Compiler:
	 * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
	 *
	 * Copyright 2011 The Closure Compiler Authors. All rights reserved.
	 * Redistribution and use in source and binary forms, with or without
	 * modification, are permitted provided that the following conditions are
	 * met:
	 *
	 *  * Redistributions of source code must retain the above copyright
	 *    notice, this list of conditions and the following disclaimer.
	 *  * Redistributions in binary form must reproduce the above
	 *    copyright notice, this list of conditions and the following
	 *    disclaimer in the documentation and/or other materials provided
	 *    with the distribution.
	 *  * Neither the name of Google Inc. nor the names of its
	 *    contributors may be used to endorse or promote products derived
	 *    from this software without specific prior written permission.
	 *
	 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
	 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
	 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
	 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
	 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
	 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
	 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
	 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
	 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
	 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
	 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
	 */

	var base64 = __webpack_require__(3);

	// A single base 64 digit can contain 6 bits of data. For the base 64 variable
	// length quantities we use in the source map spec, the first bit is the sign,
	// the next four bits are the actual value, and the 6th bit is the
	// continuation bit. The continuation bit tells us whether there are more
	// digits in this value following this digit.
	//
	//   Continuation
	//   |    Sign
	//   |    |
	//   V    V
	//   101011

	var VLQ_BASE_SHIFT = 5;

	// binary: 100000
	var VLQ_BASE = 1 << VLQ_BASE_SHIFT;

	// binary: 011111
	var VLQ_BASE_MASK = VLQ_BASE - 1;

	// binary: 100000
	var VLQ_CONTINUATION_BIT = VLQ_BASE;

	/**
	 * Converts from a two-complement value to a value where the sign bit is
	 * placed in the least significant bit.  For example, as decimals:
	 *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
	 *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
	 */
	function toVLQSigned(aValue) {
	  return aValue < 0
	    ? ((-aValue) << 1) + 1
	    : (aValue << 1) + 0;
	}

	/**
	 * Converts to a two-complement value from a value where the sign bit is
	 * placed in the least significant bit.  For example, as decimals:
	 *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
	 *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
	 */
	function fromVLQSigned(aValue) {
	  var isNegative = (aValue & 1) === 1;
	  var shifted = aValue >> 1;
	  return isNegative
	    ? -shifted
	    : shifted;
	}

	/**
	 * Returns the base 64 VLQ encoded value.
	 */
	exports.encode = function base64VLQ_encode(aValue) {
	  var encoded = "";
	  var digit;

	  var vlq = toVLQSigned(aValue);

	  do {
	    digit = vlq & VLQ_BASE_MASK;
	    vlq >>>= VLQ_BASE_SHIFT;
	    if (vlq > 0) {
	      // There are still more digits in this value, so we must make sure the
	      // continuation bit is marked.
	      digit |= VLQ_CONTINUATION_BIT;
	    }
	    encoded += base64.encode(digit);
	  } while (vlq > 0);

	  return encoded;
	};

	/**
	 * Decodes the next base 64 VLQ value from the given string and returns the
	 * value and the rest of the string via the out parameter.
	 */
	exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
	  var strLen = aStr.length;
	  var result = 0;
	  var shift = 0;
	  var continuation, digit;

	  do {
	    if (aIndex >= strLen) {
	      throw new Error("Expected more digits in base 64 VLQ value.");
	    }

	    digit = base64.decode(aStr.charCodeAt(aIndex++));
	    if (digit === -1) {
	      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
	    }

	    continuation = !!(digit & VLQ_CONTINUATION_BIT);
	    digit &= VLQ_BASE_MASK;
	    result = result + (digit << shift);
	    shift += VLQ_BASE_SHIFT;
	  } while (continuation);

	  aOutParam.value = fromVLQSigned(result);
	  aOutParam.rest = aIndex;
	};


/***/ }),
/* 3 */
/***/ (function(module, exports) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */

	var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');

	/**
	 * Encode an integer in the range of 0 to 63 to a single base 64 digit.
	 */
	exports.encode = function (number) {
	  if (0 <= number && number < intToCharMap.length) {
	    return intToCharMap[number];
	  }
	  throw new TypeError("Must be between 0 and 63: " + number);
	};

	/**
	 * Decode a single base 64 character code digit to an integer. Returns -1 on
	 * failure.
	 */
	exports.decode = function (charCode) {
	  var bigA = 65;     // 'A'
	  var bigZ = 90;     // 'Z'

	  var littleA = 97;  // 'a'
	  var littleZ = 122; // 'z'

	  var zero = 48;     // '0'
	  var nine = 57;     // '9'

	  var plus = 43;     // '+'
	  var slash = 47;    // '/'

	  var littleOffset = 26;
	  var numberOffset = 52;

	  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
	  if (bigA <= charCode && charCode <= bigZ) {
	    return (charCode - bigA);
	  }

	  // 26 - 51: abcdefghijklmnopqrstuvwxyz
	  if (littleA <= charCode && charCode <= littleZ) {
	    return (charCode - littleA + littleOffset);
	  }

	  // 52 - 61: 0123456789
	  if (zero <= charCode && charCode <= nine) {
	    return (charCode - zero + numberOffset);
	  }

	  // 62: +
	  if (charCode == plus) {
	    return 62;
	  }

	  // 63: /
	  if (charCode == slash) {
	    return 63;
	  }

	  // Invalid base64 digit.
	  return -1;
	};


/***/ }),
/* 4 */
/***/ (function(module, exports) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */

	/**
	 * This is a helper function for getting values from parameter/options
	 * objects.
	 *
	 * @param args The object we are extracting values from
	 * @param name The name of the property we are getting.
	 * @param defaultValue An optional value to return if the property is missing
	 * from the object. If this is not specified and the property is missing, an
	 * error will be thrown.
	 */
	function getArg(aArgs, aName, aDefaultValue) {
	  if (aName in aArgs) {
	    return aArgs[aName];
	  } else if (arguments.length === 3) {
	    return aDefaultValue;
	  } else {
	    throw new Error('"' + aName + '" is a required argument.');
	  }
	}
	exports.getArg = getArg;

	var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
	var dataUrlRegexp = /^data:.+\,.+$/;

	function urlParse(aUrl) {
	  var match = aUrl.match(urlRegexp);
	  if (!match) {
	    return null;
	  }
	  return {
	    scheme: match[1],
	    auth: match[2],
	    host: match[3],
	    port: match[4],
	    path: match[5]
	  };
	}
	exports.urlParse = urlParse;

	function urlGenerate(aParsedUrl) {
	  var url = '';
	  if (aParsedUrl.scheme) {
	    url += aParsedUrl.scheme + ':';
	  }
	  url += '//';
	  if (aParsedUrl.auth) {
	    url += aParsedUrl.auth + '@';
	  }
	  if (aParsedUrl.host) {
	    url += aParsedUrl.host;
	  }
	  if (aParsedUrl.port) {
	    url += ":" + aParsedUrl.port
	  }
	  if (aParsedUrl.path) {
	    url += aParsedUrl.path;
	  }
	  return url;
	}
	exports.urlGenerate = urlGenerate;

	/**
	 * Normalizes a path, or the path portion of a URL:
	 *
	 * - Replaces consecutive slashes with one slash.
	 * - Removes unnecessary '.' parts.
	 * - Removes unnecessary '<dir>/..' parts.
	 *
	 * Based on code in the Node.js 'path' core module.
	 *
	 * @param aPath The path or url to normalize.
	 */
	function normalize(aPath) {
	  var path = aPath;
	  var url = urlParse(aPath);
	  if (url) {
	    if (!url.path) {
	      return aPath;
	    }
	    path = url.path;
	  }
	  var isAbsolute = exports.isAbsolute(path);

	  var parts = path.split(/\/+/);
	  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
	    part = parts[i];
	    if (part === '.') {
	      parts.splice(i, 1);
	    } else if (part === '..') {
	      up++;
	    } else if (up > 0) {
	      if (part === '') {
	        // The first part is blank if the path is absolute. Trying to go
	        // above the root is a no-op. Therefore we can remove all '..' parts
	        // directly after the root.
	        parts.splice(i + 1, up);
	        up = 0;
	      } else {
	        parts.splice(i, 2);
	        up--;
	      }
	    }
	  }
	  path = parts.join('/');

	  if (path === '') {
	    path = isAbsolute ? '/' : '.';
	  }

	  if (url) {
	    url.path = path;
	    return urlGenerate(url);
	  }
	  return path;
	}
	exports.normalize = normalize;

	/**
	 * Joins two paths/URLs.
	 *
	 * @param aRoot The root path or URL.
	 * @param aPath The path or URL to be joined with the root.
	 *
	 * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
	 *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
	 *   first.
	 * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
	 *   is updated with the result and aRoot is returned. Otherwise the result
	 *   is returned.
	 *   - If aPath is absolute, the result is aPath.
	 *   - Otherwise the two paths are joined with a slash.
	 * - Joining for example 'http://' and 'www.example.com' is also supported.
	 */
	function join(aRoot, aPath) {
	  if (aRoot === "") {
	    aRoot = ".";
	  }
	  if (aPath === "") {
	    aPath = ".";
	  }
	  var aPathUrl = urlParse(aPath);
	  var aRootUrl = urlParse(aRoot);
	  if (aRootUrl) {
	    aRoot = aRootUrl.path || '/';
	  }

	  // `join(foo, '//www.example.org')`
	  if (aPathUrl && !aPathUrl.scheme) {
	    if (aRootUrl) {
	      aPathUrl.scheme = aRootUrl.scheme;
	    }
	    return urlGenerate(aPathUrl);
	  }

	  if (aPathUrl || aPath.match(dataUrlRegexp)) {
	    return aPath;
	  }

	  // `join('http://', 'www.example.com')`
	  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
	    aRootUrl.host = aPath;
	    return urlGenerate(aRootUrl);
	  }

	  var joined = aPath.charAt(0) === '/'
	    ? aPath
	    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);

	  if (aRootUrl) {
	    aRootUrl.path = joined;
	    return urlGenerate(aRootUrl);
	  }
	  return joined;
	}
	exports.join = join;

	exports.isAbsolute = function (aPath) {
	  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
	};

	/**
	 * Make a path relative to a URL or another path.
	 *
	 * @param aRoot The root path or URL.
	 * @param aPath The path or URL to be made relative to aRoot.
	 */
	function relative(aRoot, aPath) {
	  if (aRoot === "") {
	    aRoot = ".";
	  }

	  aRoot = aRoot.replace(/\/$/, '');

	  // It is possible for the path to be above the root. In this case, simply
	  // checking whether the root is a prefix of the path won't work. Instead, we
	  // need to remove components from the root one by one, until either we find
	  // a prefix that fits, or we run out of components to remove.
	  var level = 0;
	  while (aPath.indexOf(aRoot + '/') !== 0) {
	    var index = aRoot.lastIndexOf("/");
	    if (index < 0) {
	      return aPath;
	    }

	    // If the only part of the root that is left is the scheme (i.e. http://,
	    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
	    // have exhausted all components, so the path is not relative to the root.
	    aRoot = aRoot.slice(0, index);
	    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
	      return aPath;
	    }

	    ++level;
	  }

	  // Make sure we add a "../" for each component we removed from the root.
	  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
	}
	exports.relative = relative;

	var supportsNullProto = (function () {
	  var obj = Object.create(null);
	  return !('__proto__' in obj);
	}());

	function identity (s) {
	  return s;
	}

	/**
	 * Because behavior goes wacky when you set `__proto__` on objects, we
	 * have to prefix all the strings in our set with an arbitrary character.
	 *
	 * See https://github.com/mozilla/source-map/pull/31 and
	 * https://github.com/mozilla/source-map/issues/30
	 *
	 * @param String aStr
	 */
	function toSetString(aStr) {
	  if (isProtoString(aStr)) {
	    return '$' + aStr;
	  }

	  return aStr;
	}
	exports.toSetString = supportsNullProto ? identity : toSetString;

	function fromSetString(aStr) {
	  if (isProtoString(aStr)) {
	    return aStr.slice(1);
	  }

	  return aStr;
	}
	exports.fromSetString = supportsNullProto ? identity : fromSetString;

	function isProtoString(s) {
	  if (!s) {
	    return false;
	  }

	  var length = s.length;

	  if (length < 9 /* "__proto__".length */) {
	    return false;
	  }

	  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
	      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
	      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
	      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
	      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
	      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
	      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
	      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
	      s.charCodeAt(length - 9) !== 95  /* '_' */) {
	    return false;
	  }

	  for (var i = length - 10; i >= 0; i--) {
	    if (s.charCodeAt(i) !== 36 /* '$' */) {
	      return false;
	    }
	  }

	  return true;
	}

	/**
	 * Comparator between two mappings where the original positions are compared.
	 *
	 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
	 * mappings with the same original source/line/column, but different generated
	 * line and column the same. Useful when searching for a mapping with a
	 * stubbed out mapping.
	 */
	function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
	  var cmp = strcmp(mappingA.source, mappingB.source);
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = mappingA.originalLine - mappingB.originalLine;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = mappingA.originalColumn - mappingB.originalColumn;
	  if (cmp !== 0 || onlyCompareOriginal) {
	    return cmp;
	  }

	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = mappingA.generatedLine - mappingB.generatedLine;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  return strcmp(mappingA.name, mappingB.name);
	}
	exports.compareByOriginalPositions = compareByOriginalPositions;

	/**
	 * Comparator between two mappings with deflated source and name indices where
	 * the generated positions are compared.
	 *
	 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
	 * mappings with the same generated line and column, but different
	 * source/name/original line and column the same. Useful when searching for a
	 * mapping with a stubbed out mapping.
	 */
	function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
	  var cmp = mappingA.generatedLine - mappingB.generatedLine;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
	  if (cmp !== 0 || onlyCompareGenerated) {
	    return cmp;
	  }

	  cmp = strcmp(mappingA.source, mappingB.source);
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = mappingA.originalLine - mappingB.originalLine;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = mappingA.originalColumn - mappingB.originalColumn;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  return strcmp(mappingA.name, mappingB.name);
	}
	exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;

	function strcmp(aStr1, aStr2) {
	  if (aStr1 === aStr2) {
	    return 0;
	  }

	  if (aStr1 === null) {
	    return 1; // aStr2 !== null
	  }

	  if (aStr2 === null) {
	    return -1; // aStr1 !== null
	  }

	  if (aStr1 > aStr2) {
	    return 1;
	  }

	  return -1;
	}

	/**
	 * Comparator between two mappings with inflated source and name strings where
	 * the generated positions are compared.
	 */
	function compareByGeneratedPositionsInflated(mappingA, mappingB) {
	  var cmp = mappingA.generatedLine - mappingB.generatedLine;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = strcmp(mappingA.source, mappingB.source);
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = mappingA.originalLine - mappingB.originalLine;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  cmp = mappingA.originalColumn - mappingB.originalColumn;
	  if (cmp !== 0) {
	    return cmp;
	  }

	  return strcmp(mappingA.name, mappingB.name);
	}
	exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;

	/**
	 * Strip any JSON XSSI avoidance prefix from the string (as documented
	 * in the source maps specification), and then parse the string as
	 * JSON.
	 */
	function parseSourceMapInput(str) {
	  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
	}
	exports.parseSourceMapInput = parseSourceMapInput;

	/**
	 * Compute the URL of a source given the the source root, the source's
	 * URL, and the source map's URL.
	 */
	function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
	  sourceURL = sourceURL || '';

	  if (sourceRoot) {
	    // This follows what Chrome does.
	    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
	      sourceRoot += '/';
	    }
	    // The spec says:
	    //   Line 4: An optional source root, useful for relocating source
	    //   files on a server or removing repeated values in the
	    //   â€œsourcesâ€ entry.  This value is prepended to the individual
	    //   entries in the â€œsourceâ€ field.
	    sourceURL = sourceRoot + sourceURL;
	  }

	  // Historically, SourceMapConsumer did not take the sourceMapURL as
	  // a parameter.  This mode is still somewhat supported, which is why
	  // this code block is conditional.  However, it's preferable to pass
	  // the source map URL to SourceMapConsumer, so that this function
	  // can implement the source URL resolution algorithm as outlined in
	  // the spec.  This block is basically the equivalent of:
	  //    new URL(sourceURL, sourceMapURL).toString()
	  // ... except it avoids using URL, which wasn't available in the
	  // older releases of node still supported by this library.
	  //
	  // The spec says:
	  //   If the sources are not absolute URLs after prepending of the
	  //   â€œsourceRootâ€, the sources are resolved relative to the
	  //   SourceMap (like resolving script src in a html document).
	  if (sourceMapURL) {
	    var parsed = urlParse(sourceMapURL);
	    if (!parsed) {
	      throw new Error("sourceMapURL could not be parsed");
	    }
	    if (parsed.path) {
	      // Strip the last path component, but keep the "/".
	      var index = parsed.path.lastIndexOf('/');
	      if (index >= 0) {
	        parsed.path = parsed.path.substring(0, index + 1);
	      }
	    }
	    sourceURL = join(urlGenerate(parsed), sourceURL);
	  }

	  return normalize(sourceURL);
	}
	exports.computeSourceURL = computeSourceURL;


/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */

	var util = __webpack_require__(4);
	var has = Object.prototype.hasOwnProperty;
	var hasNativeMap = typeof Map !== "undefined";

	/**
	 * A data structure which is a combination of an array and a set. Adding a new
	 * member is O(1), testing for membership is O(1), and finding the index of an
	 * element is O(1). Removing elements from the set is not supported. Only
	 * strings are supported for membership.
	 */
	function ArraySet() {
	  this._array = [];
	  this._set = hasNativeMap ? new Map() : Object.create(null);
	}

	/**
	 * Static method for creating ArraySet instances from an existing array.
	 */
	ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
	  var set = new ArraySet();
	  for (var i = 0, len = aArray.length; i < len; i++) {
	    set.add(aArray[i], aAllowDuplicates);
	  }
	  return set;
	};

	/**
	 * Return how many unique items are in this ArraySet. If duplicates have been
	 * added, than those do not count towards the size.
	 *
	 * @returns Number
	 */
	ArraySet.prototype.size = function ArraySet_size() {
	  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
	};

	/**
	 * Add the given string to this set.
	 *
	 * @param String aStr
	 */
	ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
	  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
	  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
	  var idx = this._array.length;
	  if (!isDuplicate || aAllowDuplicates) {
	    this._array.push(aStr);
	  }
	  if (!isDuplicate) {
	    if (hasNativeMap) {
	      this._set.set(aStr, idx);
	    } else {
	      this._set[sStr] = idx;
	    }
	  }
	};

	/**
	 * Is the given string a member of this set?
	 *
	 * @param String aStr
	 */
	ArraySet.prototype.has = function ArraySet_has(aStr) {
	  if (hasNativeMap) {
	    return this._set.has(aStr);
	  } else {
	    var sStr = util.toSetString(aStr);
	    return has.call(this._set, sStr);
	  }
	};

	/**
	 * What is the index of the given string in the array?
	 *
	 * @param String aStr
	 */
	ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
	  if (hasNativeMap) {
	    var idx = this._set.get(aStr);
	    if (idx >= 0) {
	        return idx;
	    }
	  } else {
	    var sStr = util.toSetString(aStr);
	    if (has.call(this._set, sStr)) {
	      return this._set[sStr];
	    }
	  }

	  throw new Error('"' + aStr + '" is not in the set.');
	};

	/**
	 * What is the element at the given index?
	 *
	 * @param Number aIdx
	 */
	ArraySet.prototype.at = function ArraySet_at(aIdx) {
	  if (aIdx >= 0 && aIdx < this._array.length) {
	    return this._array[aIdx];
	  }
	  throw new Error('No element indexed by ' + aIdx);
	};

	/**
	 * Returns the array representation of this set (which has the proper indices
	 * indicated by indexOf). Note that this is a copy of the internal array used
	 * for storing the members so that no one can mess with internal state.
	 */
	ArraySet.prototype.toArray = function ArraySet_toArray() {
	  return this._array.slice();
	};

	exports.ArraySet = ArraySet;


/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2014 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */

	var util = __webpack_require__(4);

	/**
	 * Determine whether mappingB is after mappingA with respect to generated
	 * position.
	 */
	function generatedPositionAfter(mappingA, mappingB) {
	  // Optimized for most common case
	  var lineA = mappingA.generatedLine;
	  var lineB = mappingB.generatedLine;
	  var columnA = mappingA.generatedColumn;
	  var columnB = mappingB.generatedColumn;
	  return lineB > lineA || lineB == lineA && columnB >= columnA ||
	         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
	}

	/**
	 * A data structure to provide a sorted view of accumulated mappings in a
	 * performance conscious manner. It trades a neglibable overhead in general
	 * case for a large speedup in case of mappings being added in order.
	 */
	function MappingList() {
	  this._array = [];
	  this._sorted = true;
	  // Serves as infimum
	  this._last = {generatedLine: -1, generatedColumn: 0};
	}

	/**
	 * Iterate through internal items. This method takes the same arguments that
	 * `Array.prototype.forEach` takes.
	 *
	 * NOTE: The order of the mappings is NOT guaranteed.
	 */
	MappingList.prototype.unsortedForEach =
	  function MappingList_forEach(aCallback, aThisArg) {
	    this._array.forEach(aCallback, aThisArg);
	  };

	/**
	 * Add the given source mapping.
	 *
	 * @param Object aMapping
	 */
	MappingList.prototype.add = function MappingList_add(aMapping) {
	  if (generatedPositionAfter(this._last, aMapping)) {
	    this._last = aMapping;
	    this._array.push(aMapping);
	  } else {
	    this._sorted = false;
	    this._array.push(aMapping);
	  }
	};

	/**
	 * Returns the flat, sorted array of mappings. The mappings are sorted by
	 * generated position.
	 *
	 * WARNING: This method returns internal data without copying, for
	 * performance. The return value must NOT be mutated, and should be treated as
	 * an immutable borrow. If you want to take ownership, you must make your own
	 * copy.
	 */
	MappingList.prototype.toArray = function MappingList_toArray() {
	  if (!this._sorted) {
	    this._array.sort(util.compareByGeneratedPositionsInflated);
	    this._sorted = true;
	  }
	  return this._array;
	};

	exports.MappingList = MappingList;


/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */

	var util = __webpack_require__(4);
	var binarySearch = __webpack_require__(8);
	var ArraySet = __webpack_require__(5).ArraySet;
	var base64VLQ = __webpack_require__(2);
	var quickSort = __webpack_require__(9).quickSort;

	function SourceMapConsumer(aSourceMap, aSourceMapURL) {
	  var sourceMap = aSourceMap;
	  if (typeof aSourceMap === 'string') {
	    sourceMap = util.parseSourceMapInput(aSourceMap);
	  }

	  return sourceMap.sections != null
	    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
	    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
	}

	SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
	  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
	}

	/**
	 * The version of the source mapping spec that we are consuming.
	 */
	SourceMapConsumer.prototype._version = 3;

	// `__generatedMappings` and `__originalMappings` are arrays that hold the
	// parsed mapping coordinates from the source map's "mappings" attribute. They
	// are lazily instantiated, accessed via the `_generatedMappings` and
	// `_originalMappings` getters respectively, and we only parse the mappings
	// and create these arrays once queried for a source location. We jump through
	// these hoops because there can be many thousands of mappings, and parsing
	// them is expensive, so we only want to do it if we must.
	//
	// Each object in the arrays is of the form:
	//
	//     {
	//       generatedLine: The line number in the generated code,
	//       generatedColumn: The column number in the generated code,
	//       source: The path to the original source file that generated this
	//               chunk of code,
	//       originalLine: The line number in the original source that
	//                     corresponds to this chunk of generated code,
	//       originalColumn: The column number in the original source that
	//                       corresponds to this chunk of generated code,
	//       name: The name of the original symbol which generated this chunk of
	//             code.
	//     }
	//
	// All properties except for `generatedLine` and `generatedColumn` can be
	// `null`.
	//
	// `_generatedMappings` is ordered by the generated positions.
	//
	// `_originalMappings` is ordered by the original positions.

	SourceMapConsumer.prototype.__generatedMappings = null;
	Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
	  configurable: true,
	  enumerable: true,
	  get: function () {
	    if (!this.__generatedMappings) {
	      this._parseMappings(this._mappings, this.sourceRoot);
	    }

	    return this.__generatedMappings;
	  }
	});

	SourceMapConsumer.prototype.__originalMappings = null;
	Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
	  configurable: true,
	  enumerable: true,
	  get: function () {
	    if (!this.__originalMappings) {
	      this._parseMappings(this._mappings, this.sourceRoot);
	    }

	    return this.__originalMappings;
	  }
	});

	SourceMapConsumer.prototype._charIsMappingSeparator =
	  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
	    var c = aStr.charAt(index);
	    return c === ";" || c === ",";
	  };

	/**
	 * Parse the mappings in a string in to a data structure which we can easily
	 * query (the ordered arrays in the `this.__generatedMappings` and
	 * `this.__originalMappings` properties).
	 */
	SourceMapConsumer.prototype._parseMappings =
	  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
	    throw new Error("Subclasses must implement _parseMappings");
	  };

	SourceMapConsumer.GENERATED_ORDER = 1;
	SourceMapConsumer.ORIGINAL_ORDER = 2;

	SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
	SourceMapConsumer.LEAST_UPPER_BOUND = 2;

	/**
	 * Iterate over each mapping between an original source/line/column and a
	 * generated line/column in this source map.
	 *
	 * @param Function aCallback
	 *        The function that is called with each mapping.
	 * @param Object aContext
	 *        Optional. If specified, this object will be the value of `this` every
	 *        time that `aCallback` is called.
	 * @param aOrder
	 *        Either `SourceMapConsumer.GENERATED_ORDER` or
	 *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
	 *        iterate over the mappings sorted by the generated file's line/column
	 *        order or the original's source/line/column order, respectively. Defaults to
	 *        `SourceMapConsumer.GENERATED_ORDER`.
	 */
	SourceMapConsumer.prototype.eachMapping =
	  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
	    var context = aContext || null;
	    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;

	    var mappings;
	    switch (order) {
	    case SourceMapConsumer.GENERATED_ORDER:
	      mappings = this._generatedMappings;
	      break;
	    case SourceMapConsumer.ORIGINAL_ORDER:
	      mappings = this._originalMappings;
	      break;
	    default:
	      throw new Error("Unknown order of iteration.");
	    }

	    var sourceRoot = this.sourceRoot;
	    mappings.map(function (mapping) {
	      var source = mapping.source === null ? null : this._sources.at(mapping.source);
	      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
	      return {
	        source: source,
	        generatedLine: mapping.generatedLine,
	        generatedColumn: mapping.generatedColumn,
	        originalLine: mapping.originalLine,
	        originalColumn: mapping.originalColumn,
	        name: mapping.name === null ? null : this._names.at(mapping.name)
	      };
	    }, this).forEach(aCallback, context);
	  };

	/**
	 * Returns all generated line and column information for the original source,
	 * line, and column provided. If no column is provided, returns all mappings
	 * corresponding to a either the line we are searching for or the next
	 * closest line that has any mappings. Otherwise, returns all mappings
	 * corresponding to the given line and either the column we are searching for
	 * or the next closest column that has any offsets.
	 *
	 * The only argument is an object with the following properties:
	 *
	 *   - source: The filename of the original source.
	 *   - line: The line number in the original source.  The line number is 1-based.
	 *   - column: Optional. the column number in the original source.
	 *    The column number is 0-based.
	 *
	 * and an array of objects is returned, each with the following properties:
	 *
	 *   - line: The line number in the generated source, or null.  The
	 *    line number is 1-based.
	 *   - column: The column number in the generated source, or null.
	 *    The column number is 0-based.
	 */
	SourceMapConsumer.prototype.allGeneratedPositionsFor =
	  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
	    var line = util.getArg(aArgs, 'line');

	    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
	    // returns the index of the closest mapping less than the needle. By
	    // setting needle.originalColumn to 0, we thus find the last mapping for
	    // the given line, provided such a mapping exists.
	    var needle = {
	      source: util.getArg(aArgs, 'source'),
	      originalLine: line,
	      originalColumn: util.getArg(aArgs, 'column', 0)
	    };

	    needle.source = this._findSourceIndex(needle.source);
	    if (needle.source < 0) {
	      return [];
	    }

	    var mappings = [];

	    var index = this._findMapping(needle,
	                                  this._originalMappings,
	                                  "originalLine",
	                                  "originalColumn",
	                                  util.compareByOriginalPositions,
	                                  binarySearch.LEAST_UPPER_BOUND);
	    if (index >= 0) {
	      var mapping = this._originalMappings[index];

	      if (aArgs.column === undefined) {
	        var originalLine = mapping.originalLine;

	        // Iterate until either we run out of mappings, or we run into
	        // a mapping for a different line than the one we found. Since
	        // mappings are sorted, this is guaranteed to find all mappings for
	        // the line we found.
	        while (mapping && mapping.originalLine === originalLine) {
	          mappings.push({
	            line: util.getArg(mapping, 'generatedLine', null),
	            column: util.getArg(mapping, 'generatedColumn', null),
	            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
	          });

	          mapping = this._originalMappings[++index];
	        }
	      } else {
	        var originalColumn = mapping.originalColumn;

	        // Iterate until either we run out of mappings, or we run into
	        // a mapping for a different line than the one we were searching for.
	        // Since mappings are sorted, this is guaranteed to find all mappings for
	        // the line we are searching for.
	        while (mapping &&
	               mapping.originalLine === line &&
	               mapping.originalColumn == originalColumn) {
	          mappings.push({
	            line: util.getArg(mapping, 'generatedLine', null),
	            column: util.getArg(mapping, 'generatedColumn', null),
	            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
	          });

	          mapping = this._originalMappings[++index];
	        }
	      }
	    }

	    return mappings;
	  };

	exports.SourceMapConsumer = SourceMapConsumer;

	/**
	 * A BasicSourceMapConsumer instance represents a parsed source map which we can
	 * query for information about the original file positions by giving it a file
	 * position in the generated source.
	 *
	 * The first parameter is the raw source map (either as a JSON string, or
	 * already parsed to an object). According to the spec, source maps have the
	 * following attributes:
	 *
	 *   - version: Which version of the source map spec this map is following.
	 *   - sources: An array of URLs to the original source files.
	 *   - names: An array of identifiers which can be referrenced by individual mappings.
	 *   - sourceRoot: Optional. The URL root from which all sources are relative.
	 *   - sourcesContent: Optional. An array of contents of the original source files.
	 *   - mappings: A string of base64 VLQs which contain the actual mappings.
	 *   - file: Optional. The generated file this source map is associated with.
	 *
	 * Here is an example source map, taken from the source map spec[0]:
	 *
	 *     {
	 *       version : 3,
	 *       file: "out.js",
	 *       sourceRoot : "",
	 *       sources: ["foo.js", "bar.js"],
	 *       names: ["src", "maps", "are", "fun"],
	 *       mappings: "AA,AB;;ABCDE;"
	 *     }
	 *
	 * The second parameter, if given, is a string whose value is the URL
	 * at which the source map was found.  This URL is used to compute the
	 * sources array.
	 *
	 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
	 */
	function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
	  var sourceMap = aSourceMap;
	  if (typeof aSourceMap === 'string') {
	    sourceMap = util.parseSourceMapInput(aSourceMap);
	  }

	  var version = util.getArg(sourceMap, 'version');
	  var sources = util.getArg(sourceMap, 'sources');
	  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
	  // requires the array) to play nice here.
	  var names = util.getArg(sourceMap, 'names', []);
	  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
	  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
	  var mappings = util.getArg(sourceMap, 'mappings');
	  var file = util.getArg(sourceMap, 'file', null);

	  // Once again, Sass deviates from the spec and supplies the version as a
	  // string rather than a number, so we use loose equality checking here.
	  if (version != this._version) {
	    throw new Error('Unsupported version: ' + version);
	  }

	  if (sourceRoot) {
	    sourceRoot = util.normalize(sourceRoot);
	  }

	  sources = sources
	    .map(String)
	    // Some source maps produce relative source paths like "./foo.js" instead of
	    // "foo.js".  Normalize these first so that future comparisons will succeed.
	    // See bugzil.la/1090768.
	    .map(util.normalize)
	    // Always ensure that absolute sources are internally stored relative to
	    // the source root, if the source root is absolute. Not doing this would
	    // be particularly problematic when the source root is a prefix of the
	    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
	    .map(function (source) {
	      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
	        ? util.relative(sourceRoot, source)
	        : source;
	    });

	  // Pass `true` below to allow duplicate names and sources. While source maps
	  // are intended to be compressed and deduplicated, the TypeScript compiler
	  // sometimes generates source maps with duplicates in them. See Github issue
	  // #72 and bugzil.la/889492.
	  this._names = ArraySet.fromArray(names.map(String), true);
	  this._sources = ArraySet.fromArray(sources, true);

	  this._absoluteSources = this._sources.toArray().map(function (s) {
	    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
	  });

	  this.sourceRoot = sourceRoot;
	  this.sourcesContent = sourcesContent;
	  this._mappings = mappings;
	  this._sourceMapURL = aSourceMapURL;
	  this.file = file;
	}

	BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
	BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;

	/**
	 * Utility function to find the index of a source.  Returns -1 if not
	 * found.
	 */
	BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
	  var relativeSource = aSource;
	  if (this.sourceRoot != null) {
	    relativeSource = util.relative(this.sourceRoot, relativeSource);
	  }

	  if (this._sources.has(relativeSource)) {
	    return this._sources.indexOf(relativeSource);
	  }

	  // Maybe aSource is an absolute URL as returned by |sources|.  In
	  // this case we can't simply undo the transform.
	  var i;
	  for (i = 0; i < this._absoluteSources.length; ++i) {
	    if (this._absoluteSources[i] == aSource) {
	      return i;
	    }
	  }

	  return -1;
	};

	/**
	 * Create a BasicSourceMapConsumer from a SourceMapGenerator.
	 *
	 * @param SourceMapGenerator aSourceMap
	 *        The source map that will be consumed.
	 * @param String aSourceMapURL
	 *        The URL at which the source map can be found (optional)
	 * @returns BasicSourceMapConsumer
	 */
	BasicSourceMapConsumer.fromSourceMap =
	  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
	    var smc = Object.create(BasicSourceMapConsumer.prototype);

	    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
	    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
	    smc.sourceRoot = aSourceMap._sourceRoot;
	    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
	                                                            smc.sourceRoot);
	    smc.file = aSourceMap._file;
	    smc._sourceMapURL = aSourceMapURL;
	    smc._absoluteSources = smc._sources.toArray().map(function (s) {
	      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
	    });

	    // Because we are modifying the entries (by converting string sources and
	    // names to indices into the sources and names ArraySets), we have to make
	    // a copy of the entry or else bad things happen. Shared mutable state
	    // strikes again! See github issue #191.

	    var generatedMappings = aSourceMap._mappings.toArray().slice();
	    var destGeneratedMappings = smc.__generatedMappings = [];
	    var destOriginalMappings = smc.__originalMappings = [];

	    for (var i = 0, length = generatedMappings.length; i < length; i++) {
	      var srcMapping = generatedMappings[i];
	      var destMapping = new Mapping;
	      destMapping.generatedLine = srcMapping.generatedLine;
	      destMapping.generatedColumn = srcMapping.generatedColumn;

	      if (srcMapping.source) {
	        destMapping.source = sources.indexOf(srcMapping.source);
	        destMapping.originalLine = srcMapping.originalLine;
	        destMapping.originalColumn = srcMapping.originalColumn;

	        if (srcMapping.name) {
	          destMapping.name = names.indexOf(srcMapping.name);
	        }

	        destOriginalMappings.push(destMapping);
	      }

	      destGeneratedMappings.push(destMapping);
	    }

	    quickSort(smc.__originalMappings, util.compareByOriginalPositions);

	    return smc;
	  };

	/**
	 * The version of the source mapping spec that we are consuming.
	 */
	BasicSourceMapConsumer.prototype._version = 3;

	/**
	 * The list of original sources.
	 */
	Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
	  get: function () {
	    return this._absoluteSources.slice();
	  }
	});

	/**
	 * Provide the JIT with a nice shape / hidden class.
	 */
	function Mapping() {
	  this.generatedLine = 0;
	  this.generatedColumn = 0;
	  this.source = null;
	  this.originalLine = null;
	  this.originalColumn = null;
	  this.name = null;
	}

	/**
	 * Parse the mappings in a string in to a data structure which we can easily
	 * query (the ordered arrays in the `this.__generatedMappings` and
	 * `this.__originalMappings` properties).
	 */
	BasicSourceMapConsumer.prototype._parseMappings =
	  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
	    var generatedLine = 1;
	    var previousGeneratedColumn = 0;
	    var previousOriginalLine = 0;
	    var previousOriginalColumn = 0;
	    var previousSource = 0;
	    var previousName = 0;
	    var length = aStr.length;
	    var index = 0;
	    var cachedSegments = {};
	    var temp = {};
	    var originalMappings = [];
	    var generatedMappings = [];
	    var mapping, str, segment, end, value;

	    while (index < length) {
	      if (aStr.charAt(index) === ';') {
	        generatedLine++;
	        index++;
	        previousGeneratedColumn = 0;
	      }
	      else if (aStr.charAt(index) === ',') {
	        index++;
	      }
	      else {
	        mapping = new Mapping();
	        mapping.generatedLine = generatedLine;

	        // Because each offset is encoded relative to the previous one,
	        // many segments often have the same encoding. We can exploit this
	        // fact by caching the parsed variable length fields of each segment,
	        // allowing us to avoid a second parse if we encounter the same
	        // segment again.
	        for (end = index; end < length; end++) {
	          if (this._charIsMappingSeparator(aStr, end)) {
	            break;
	          }
	        }
	        str = aStr.slice(index, end);

	        segment = cachedSegments[str];
	        if (segment) {
	          index += str.length;
	        } else {
	          segment = [];
	          while (index < end) {
	            base64VLQ.decode(aStr, index, temp);
	            value = temp.value;
	            index = temp.rest;
	            segment.push(value);
	          }

	          if (segment.length === 2) {
	            throw new Error('Found a source, but no line and column');
	          }

	          if (segment.length === 3) {
	            throw new Error('Found a source and line, but no column');
	          }

	          cachedSegments[str] = segment;
	        }

	        // Generated column.
	        mapping.generatedColumn = previousGeneratedColumn + segment[0];
	        previousGeneratedColumn = mapping.generatedColumn;

	        if (segment.length > 1) {
	          // Original source.
	          mapping.source = previousSource + segment[1];
	          previousSource += segment[1];

	          // Original line.
	          mapping.originalLine = previousOriginalLine + segment[2];
	          previousOriginalLine = mapping.originalLine;
	          // Lines are stored 0-based
	          mapping.originalLine += 1;

	          // Original column.
	          mapping.originalColumn = previousOriginalColumn + segment[3];
	          previousOriginalColumn = mapping.originalColumn;

	          if (segment.length > 4) {
	            // Original name.
	            mapping.name = previousName + segment[4];
	            previousName += segment[4];
	          }
	        }

	        generatedMappings.push(mapping);
	        if (typeof mapping.originalLine === 'number') {
	          originalMappings.push(mapping);
	        }
	      }
	    }

	    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
	    this.__generatedMappings = generatedMappings;

	    quickSort(originalMappings, util.compareByOriginalPositions);
	    this.__originalMappings = originalMappings;
	  };

	/**
	 * Find the mapping that best matches the hypothetical "needle" mapping that
	 * we are searching for in the given "haystack" of mappings.
	 */
	BasicSourceMapConsumer.prototype._findMapping =
	  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
	                                         aColumnName, aComparator, aBias) {
	    // To return the position we are searching for, we must first find the
	    // mapping for the given position and then return the opposite position it
	    // points to. Because the mappings are sorted, we can use binary search to
	    // find the best mapping.

	    if (aNeedle[aLineName] <= 0) {
	      throw new TypeError('Line must be greater than or equal to 1, got '
	                          + aNeedle[aLineName]);
	    }
	    if (aNeedle[aColumnName] < 0) {
	      throw new TypeError('Column must be greater than or equal to 0, got '
	                          + aNeedle[aColumnName]);
	    }

	    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
	  };

	/**
	 * Compute the last column for each generated mapping. The last column is
	 * inclusive.
	 */
	BasicSourceMapConsumer.prototype.computeColumnSpans =
	  function SourceMapConsumer_computeColumnSpans() {
	    for (var index = 0; index < this._generatedMappings.length; ++index) {
	      var mapping = this._generatedMappings[index];

	      // Mappings do not contain a field for the last generated columnt. We
	      // can come up with an optimistic estimate, however, by assuming that
	      // mappings are contiguous (i.e. given two consecutive mappings, the
	      // first mapping ends where the second one starts).
	      if (index + 1 < this._generatedMappings.length) {
	        var nextMapping = this._generatedMappings[index + 1];

	        if (mapping.generatedLine === nextMapping.generatedLine) {
	          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
	          continue;
	        }
	      }

	      // The last mapping for each line spans the entire line.
	      mapping.lastGeneratedColumn = Infinity;
	    }
	  };

	/**
	 * Returns the original source, line, and column information for the generated
	 * source's line and column positions provided. The only argument is an object
	 * with the following properties:
	 *
	 *   - line: The line number in the generated source.  The line number
	 *     is 1-based.
	 *   - column: The column number in the generated source.  The column
	 *     number is 0-based.
	 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
	 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
	 *     closest element that is smaller than or greater than the one we are
	 *     searching for, respectively, if the exact element cannot be found.
	 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
	 *
	 * and an object is returned with the following properties:
	 *
	 *   - source: The original source file, or null.
	 *   - line: The line number in the original source, or null.  The
	 *     line number is 1-based.
	 *   - column: The column number in the original source, or null.  The
	 *     column number is 0-based.
	 *   - name: The original identifier, or null.
	 */
	BasicSourceMapConsumer.prototype.originalPositionFor =
	  function SourceMapConsumer_originalPositionFor(aArgs) {
	    var needle = {
	      generatedLine: util.getArg(aArgs, 'line'),
	      generatedColumn: util.getArg(aArgs, 'column')
	    };

	    var index = this._findMapping(
	      needle,
	      this._generatedMappings,
	      "generatedLine",
	      "generatedColumn",
	      util.compareByGeneratedPositionsDeflated,
	      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
	    );

	    if (index >= 0) {
	      var mapping = this._generatedMappings[index];

	      if (mapping.generatedLine === needle.generatedLine) {
	        var source = util.getArg(mapping, 'source', null);
	        if (source !== null) {
	          source = this._sources.at(source);
	          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
	        }
	        var name = util.getArg(mapping, 'name', null);
	        if (name !== null) {
	          name = this._names.at(name);
	        }
	        return {
	          source: source,
	          line: util.getArg(mapping, 'originalLine', null),
	          column: util.getArg(mapping, 'originalColumn', null),
	          name: name
	        };
	      }
	    }

	    return {
	      source: null,
	      line: null,
	      column: null,
	      name: null
	    };
	  };

	/**
	 * Return true if we have the source content for every source in the source
	 * map, false otherwise.
	 */
	BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
	  function BasicSourceMapConsumer_hasContentsOfAllSources() {
	    if (!this.sourcesContent) {
	      return false;
	    }
	    return this.sourcesContent.length >= this._sources.size() &&
	      !this.sourcesContent.some(function (sc) { return sc == null; });
	  };

	/**
	 * Returns the original source content. The only argument is the url of the
	 * original source file. Returns null if no original source content is
	 * available.
	 */
	BasicSourceMapConsumer.prototype.sourceContentFor =
	  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
	    if (!this.sourcesContent) {
	      return null;
	    }

	    var index = this._findSourceIndex(aSource);
	    if (index >= 0) {
	      return this.sourcesContent[index];
	    }

	    var relativeSource = aSource;
	    if (this.sourceRoot != null) {
	      relativeSource = util.relative(this.sourceRoot, relativeSource);
	    }

	    var url;
	    if (this.sourceRoot != null
	        && (url = util.urlParse(this.sourceRoot))) {
	      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
	      // many users. We can help them out when they expect file:// URIs to
	      // behave like it would if they were running a local HTTP server. See
	      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
	      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
	      if (url.scheme == "file"
	          && this._sources.has(fileUriAbsPath)) {
	        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
	      }

	      if ((!url.path || url.path == "/")
	          && this._sources.has("/" + relativeSource)) {
	        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
	      }
	    }

	    // This function is used recursively from
	    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
	    // don't want to throw if we can't find the source - we just want to
	    // return null, so we provide a flag to exit gracefully.
	    if (nullOnMissing) {
	      return null;
	    }
	    else {
	      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
	    }
	  };

	/**
	 * Returns the generated line and column information for the original source,
	 * line, and column positions provided. The only argument is an object with
	 * the following properties:
	 *
	 *   - source: The filename of the original source.
	 *   - line: The line number in the original source.  The line number
	 *     is 1-based.
	 *   - column: The column number in the original source.  The column
	 *     number is 0-based.
	 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
	 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
	 *     closest element that is smaller than or greater than the one we are
	 *     searching for, respectively, if the exact element cannot be found.
	 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
	 *
	 * and an object is returned with the following properties:
	 *
	 *   - line: The line number in the generated source, or null.  The
	 *     line number is 1-based.
	 *   - column: The column number in the generated source, or null.
	 *     The column number is 0-based.
	 */
	BasicSourceMapConsumer.prototype.generatedPositionFor =
	  function SourceMapConsumer_generatedPositionFor(aArgs) {
	    var source = util.getArg(aArgs, 'source');
	    source = this._findSourceIndex(source);
	    if (source < 0) {
	      return {
	        line: null,
	        column: null,
	        lastColumn: null
	      };
	    }

	    var needle = {
	      source: source,
	      originalLine: util.getArg(aArgs, 'line'),
	      originalColumn: util.getArg(aArgs, 'column')
	    };

	    var index = this._findMapping(
	      needle,
	      this._originalMappings,
	      "originalLine",
	      "originalColumn",
	      util.compareByOriginalPositions,
	      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
	    );

	    if (index >= 0) {
	      var mapping = this._originalMappings[index];

	      if (mapping.source === needle.source) {
	        return {
	          line: util.getArg(mapping, 'generatedLine', null),
	          column: util.getArg(mapping, 'generatedColumn', null),
	          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
	        };
	      }
	    }

	    return {
	      line: null,
	      column: null,
	      lastColumn: null
	    };
	  };

	exports.BasicSourceMapConsumer = BasicSourceMapConsumer;

	/**
	 * An IndexedSourceMapConsumer instance represents a parsed source map which
	 * we can query for information. It differs from BasicSourceMapConsumer in
	 * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
	 * input.
	 *
	 * The first parameter is a raw source map (either as a JSON string, or already
	 * parsed to an object). According to the spec for indexed source maps, they
	 * have the following attributes:
	 *
	 *   - version: Which version of the source map spec this map is following.
	 *   - file: Optional. The generated file this source map is associated with.
	 *   - sections: A list of section definitions.
	 *
	 * Each value under the "sections" field has two fields:
	 *   - offset: The offset into the original specified at which this section
	 *       begins to apply, defined as an object with a "line" and "column"
	 *       field.
	 *   - map: A source map definition. This source map could also be indexed,
	 *       but doesn't have to be.
	 *
	 * Instead of the "map" field, it's also possible to have a "url" field
	 * specifying a URL to retrieve a source map from, but that's currently
	 * unsupported.
	 *
	 * Here's an example source map, taken from the source map spec[0], but
	 * modified to omit a section which uses the "url" field.
	 *
	 *  {
	 *    version : 3,
	 *    file: "app.js",
	 *    sections: [{
	 *      offset: {line:100, column:10},
	 *      map: {
	 *        version : 3,
	 *        file: "section.js",
	 *        sources: ["foo.js", "bar.js"],
	 *        names: ["src", "maps", "are", "fun"],
	 *        mappings: "AAAA,E;;ABCDE;"
	 *      }
	 *    }],
	 *  }
	 *
	 * The second parameter, if given, is a string whose value is the URL
	 * at which the source map was found.  This URL is used to compute the
	 * sources array.
	 *
	 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
	 */
	function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
	  var sourceMap = aSourceMap;
	  if (typeof aSourceMap === 'string') {
	    sourceMap = util.parseSourceMapInput(aSourceMap);
	  }

	  var version = util.getArg(sourceMap, 'version');
	  var sections = util.getArg(sourceMap, 'sections');

	  if (version != this._version) {
	    throw new Error('Unsupported version: ' + version);
	  }

	  this._sources = new ArraySet();
	  this._names = new ArraySet();

	  var lastOffset = {
	    line: -1,
	    column: 0
	  };
	  this._sections = sections.map(function (s) {
	    if (s.url) {
	      // The url field will require support for asynchronicity.
	      // See https://github.com/mozilla/source-map/issues/16
	      throw new Error('Support for url field in sections not implemented.');
	    }
	    var offset = util.getArg(s, 'offset');
	    var offsetLine = util.getArg(offset, 'line');
	    var offsetColumn = util.getArg(offset, 'column');

	    if (offsetLine < lastOffset.line ||
	        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
	      throw new Error('Section offsets must be ordered and non-overlapping.');
	    }
	    lastOffset = offset;

	    return {
	      generatedOffset: {
	        // The offset fields are 0-based, but we use 1-based indices when
	        // encoding/decoding from VLQ.
	        generatedLine: offsetLine + 1,
	        generatedColumn: offsetColumn + 1
	      },
	      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
	    }
	  });
	}

	IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
	IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;

	/**
	 * The version of the source mapping spec that we are consuming.
	 */
	IndexedSourceMapConsumer.prototype._version = 3;

	/**
	 * The list of original sources.
	 */
	Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
	  get: function () {
	    var sources = [];
	    for (var i = 0; i < this._sections.length; i++) {
	      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
	        sources.push(this._sections[i].consumer.sources[j]);
	      }
	    }
	    return sources;
	  }
	});

	/**
	 * Returns the original source, line, and column information for the generated
	 * source's line and column positions provided. The only argument is an object
	 * with the following properties:
	 *
	 *   - line: The line number in the generated source.  The line number
	 *     is 1-based.
	 *   - column: The column number in the generated source.  The column
	 *     number is 0-based.
	 *
	 * and an object is returned with the following properties:
	 *
	 *   - source: The original source file, or null.
	 *   - line: The line number in the original source, or null.  The
	 *     line number is 1-based.
	 *   - column: The column number in the original source, or null.  The
	 *     column number is 0-based.
	 *   - name: The original identifier, or null.
	 */
	IndexedSourceMapConsumer.prototype.originalPositionFor =
	  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
	    var needle = {
	      generatedLine: util.getArg(aArgs, 'line'),
	      generatedColumn: util.getArg(aArgs, 'column')
	    };

	    // Find the section containing the generated position we're trying to map
	    // to an original position.
	    var sectionIndex = binarySearch.search(needle, this._sections,
	      function(needle, section) {
	        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
	        if (cmp) {
	          return cmp;
	        }

	        return (needle.generatedColumn -
	                section.generatedOffset.generatedColumn);
	      });
	    var section = this._sections[sectionIndex];

	    if (!section) {
	      return {
	        source: null,
	        line: null,
	        column: null,
	        name: null
	      };
	    }

	    return section.consumer.originalPositionFor({
	      line: needle.generatedLine -
	        (section.generatedOffset.generatedLine - 1),
	      column: needle.generatedColumn -
	        (section.generatedOffset.generatedLine === needle.generatedLine
	         ? section.generatedOffset.generatedColumn - 1
	         : 0),
	      bias: aArgs.bias
	    });
	  };

	/**
	 * Return true if we have the source content for every source in the source
	 * map, false otherwise.
	 */
	IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
	  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
	    return this._sections.every(function (s) {
	      return s.consumer.hasContentsOfAllSources();
	    });
	  };

	/**
	 * Returns the original source content. The only argument is the url of the
	 * original source file. Returns null if no original source content is
	 * available.
	 */
	IndexedSourceMapConsumer.prototype.sourceContentFor =
	  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
	    for (var i = 0; i < this._sections.length; i++) {
	      var section = this._sections[i];

	      var content = section.consumer.sourceContentFor(aSource, true);
	      if (content) {
	        return content;
	      }
	    }
	    if (nullOnMissing) {
	      return null;
	    }
	    else {
	      throw new Error('"' + aSource + '" is not in the SourceMap.');
	    }
	  };

	/**
	 * Returns the generated line and column information for the original source,
	 * line, and column positions provided. The only argument is an object with
	 * the following properties:
	 *
	 *   - source: The filename of the original source.
	 *   - line: The line number in the original source.  The line number
	 *     is 1-based.
	 *   - column: The column number in the original source.  The column
	 *     number is 0-based.
	 *
	 * and an object is returned with the following properties:
	 *
	 *   - line: The line number in the generated source, or null.  The
	 *     line number is 1-based. 
	 *   - column: The column number in the generated source, or null.
	 *     The column number is 0-based.
	 */
	IndexedSourceMapConsumer.prototype.generatedPositionFor =
	  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
	    for (var i = 0; i < this._sections.length; i++) {
	      var section = this._sections[i];

	      // Only consider this section if the requested source is in the list of
	      // sources of the consumer.
	      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
	        continue;
	      }
	      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
	      if (generatedPosition) {
	        var ret = {
	          line: generatedPosition.line +
	            (section.generatedOffset.generatedLine - 1),
	          column: generatedPosition.column +
	            (section.generatedOffset.generatedLine === generatedPosition.line
	             ? section.generatedOffset.generatedColumn - 1
	             : 0)
	        };
	        return ret;
	      }
	    }

	    return {
	      line: null,
	      column: null
	    };
	  };

	/**
	 * Parse the mappings in a string in to a data structure which we can easily
	 * query (the ordered arrays in the `this.__generatedMappings` and
	 * `this.__originalMappings` properties).
	 */
	IndexedSourceMapConsumer.prototype._parseMappings =
	  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
	    this.__generatedMappings = [];
	    this.__originalMappings = [];
	    for (var i = 0; i < this._sections.length; i++) {
	      var section = this._sections[i];
	      var sectionMappings = section.consumer._generatedMappings;
	      for (var j = 0; j < sectionMappings.length; j++) {
	        var mapping = sectionMappings[j];

	        var source = section.consumer._sources.at(mapping.source);
	        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
	        this._sources.add(source);
	        source = this._sources.indexOf(source);

	        var name = null;
	        if (mapping.name) {
	          name = section.consumer._names.at(mapping.name);
	          this._names.add(name);
	          name = this._names.indexOf(name);
	        }

	        // The mappings coming from the consumer for the section have
	        // generated positions relative to the start of the section, so we
	        // need to offset them to be relative to the start of the concatenated
	        // generated file.
	        var adjustedMapping = {
	          source: source,
	          generatedLine: mapping.generatedLine +
	            (section.generatedOffset.generatedLine - 1),
	          generatedColumn: mapping.generatedColumn +
	            (section.generatedOffset.generatedLine === mapping.generatedLine
	            ? section.generatedOffset.generatedColumn - 1
	            : 0),
	          originalLine: mapping.originalLine,
	          originalColumn: mapping.originalColumn,
	          name: name
	        };

	        this.__generatedMappings.push(adjustedMapping);
	        if (typeof adjustedMapping.originalLine === 'number') {
	          this.__originalMappings.push(adjustedMapping);
	        }
	      }
	    }

	    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
	    quickSort(this.__originalMappings, util.compareByOriginalPositions);
	  };

	exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;


/***/ }),
/* 8 */
/***/ (function(module, exports) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */

	exports.GREATEST_LOWER_BOUND = 1;
	exports.LEAST_UPPER_BOUND = 2;

	/**
	 * Recursive implementation of binary search.
	 *
	 * @param aLow Indices here and lower do not contain the needle.
	 * @param aHigh Indices here and higher do not contain the needle.
	 * @param aNeedle The element being searched for.
	 * @param aHaystack The non-empty array being searched.
	 * @param aCompare Function which takes two elements and returns -1, 0, or 1.
	 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
	 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
	 *     closest element that is smaller than or greater than the one we are
	 *     searching for, respectively, if the exact element cannot be found.
	 */
	function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
	  // This function terminates when one of the following is true:
	  //
	  //   1. We find the exact element we are looking for.
	  //
	  //   2. We did not find the exact element, but we can return the index of
	  //      the next-closest element.
	  //
	  //   3. We did not find the exact element, and there is no next-closest
	  //      element than the one we are searching for, so we return -1.
	  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
	  var cmp = aCompare(aNeedle, aHaystack[mid], true);
	  if (cmp === 0) {
	    // Found the element we are looking for.
	    return mid;
	  }
	  else if (cmp > 0) {
	    // Our needle is greater than aHaystack[mid].
	    if (aHigh - mid > 1) {
	      // The element is in the upper half.
	      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
	    }

	    // The exact needle element was not found in this haystack. Determine if
	    // we are in termination case (3) or (2) and return the appropriate thing.
	    if (aBias == exports.LEAST_UPPER_BOUND) {
	      return aHigh < aHaystack.length ? aHigh : -1;
	    } else {
	      return mid;
	    }
	  }
	  else {
	    // Our needle is less than aHaystack[mid].
	    if (mid - aLow > 1) {
	      // The element is in the lower half.
	      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
	    }

	    // we are in termination case (3) or (2) and return the appropriate thing.
	    if (aBias == exports.LEAST_UPPER_BOUND) {
	      return mid;
	    } else {
	      return aLow < 0 ? -1 : aLow;
	    }
	  }
	}

	/**
	 * This is an implementation of binary search which will always try and return
	 * the index of the closest element if there is no exact hit. This is because
	 * mappings between original and generated line/col pairs are single points,
	 * and there is an implicit region between each of them, so a miss just means
	 * that you aren't on the very start of a region.
	 *
	 * @param aNeedle The element you are looking for.
	 * @param aHaystack The array that is being searched.
	 * @param aCompare A function which takes the needle and an element in the
	 *     array and returns -1, 0, or 1 depending on whether the needle is less
	 *     than, equal to, or greater than the element, respectively.
	 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
	 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
	 *     closest element that is smaller than or greater than the one we are
	 *     searching for, respectively, if the exact element cannot be found.
	 *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
	 */
	exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
	  if (aHaystack.length === 0) {
	    return -1;
	  }

	  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
	                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
	  if (index < 0) {
	    return -1;
	  }

	  // We have found either the exact element, or the next-closest element than
	  // the one we are searching for. However, there may be more than one such
	  // element. Make sure we always return the smallest of these.
	  while (index - 1 >= 0) {
	    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
	      break;
	    }
	    --index;
	  }

	  return index;
	};


/***/ }),
/* 9 */
/***/ (function(module, exports) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */

	// It turns out that some (most?) JavaScript engines don't self-host
	// `Array.prototype.sort`. This makes sense because C++ will likely remain
	// faster than JS when doing raw CPU-intensive sorting. However, when using a
	// custom comparator function, calling back and forth between the VM's C++ and
	// JIT'd JS is rather slow *and* loses JIT type information, resulting in
	// worse generated code for the comparator function than would be optimal. In
	// fact, when sorting with a comparator, these costs outweigh the benefits of
	// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
	// a ~3500ms mean speed-up in `bench/bench.html`.

	/**
	 * Swap the elements indexed by `x` and `y` in the array `ary`.
	 *
	 * @param {Array} ary
	 *        The array.
	 * @param {Number} x
	 *        The index of the first item.
	 * @param {Number} y
	 *        The index of the second item.
	 */
	function swap(ary, x, y) {
	  var temp = ary[x];
	  ary[x] = ary[y];
	  ary[y] = temp;
	}

	/**
	 * Returns a random integer within the range `low .. high` inclusive.
	 *
	 * @param {Number} low
	 *        The lower bound on the range.
	 * @param {Number} high
	 *        The upper bound on the range.
	 */
	function randomIntInRange(low, high) {
	  return Math.round(low + (Math.random() * (high - low)));
	}

	/**
	 * The Quick Sort algorithm.
	 *
	 * @param {Array} ary
	 *        An array to sort.
	 * @param {function} comparator
	 *        Function to use to compare two items.
	 * @param {Number} p
	 *        Start index of the array
	 * @param {Number} r
	 *        End index of the array
	 */
	function doQuickSort(ary, comparator, p, r) {
	  // If our lower bound is less than our upper bound, we (1) partition the
	  // array into two pieces and (2) recurse on each half. If it is not, this is
	  // the empty array and our base case.

	  if (p < r) {
	    // (1) Partitioning.
	    //
	    // The partitioning chooses a pivot between `p` and `r` and moves all
	    // elements that are less than or equal to the pivot to the before it, and
	    // all the elements that are greater than it after it. The effect is that
	    // once partition is done, the pivot is in the exact place it will be when
	    // the array is put in sorted order, and it will not need to be moved
	    // again. This runs in O(n) time.

	    // Always choose a random pivot so that an input array which is reverse
	    // sorted does not cause O(n^2) running time.
	    var pivotIndex = randomIntInRange(p, r);
	    var i = p - 1;

	    swap(ary, pivotIndex, r);
	    var pivot = ary[r];

	    // Immediately after `j` is incremented in this loop, the following hold
	    // true:
	    //
	    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
	    //
	    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
	    for (var j = p; j < r; j++) {
	      if (comparator(ary[j], pivot) <= 0) {
	        i += 1;
	        swap(ary, i, j);
	      }
	    }

	    swap(ary, i + 1, j);
	    var q = i + 1;

	    // (2) Recurse on each half.

	    doQuickSort(ary, comparator, p, q - 1);
	    doQuickSort(ary, comparator, q + 1, r);
	  }
	}

	/**
	 * Sort the given array in-place with the given comparator function.
	 *
	 * @param {Array} ary
	 *        An array to sort.
	 * @param {function} comparator
	 *        Function to use to compare two items.
	 */
	exports.quickSort = function (ary, comparator) {
	  doQuickSort(ary, comparator, 0, ary.length - 1);
	};


/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

	/* -*- Mode: js; js-indent-level: 2; -*- */
	/*
	 * Copyright 2011 Mozilla Foundation and contributors
	 * Licensed under the New BSD license. See LICENSE or:
	 * http://opensource.org/licenses/BSD-3-Clause
	 */

	var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
	var util = __webpack_require__(4);

	// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
	// operating systems these days (capturing the result).
	var REGEX_NEWLINE = /(\r?\n)/;

	// Newline character code for charCodeAt() comparisons
	var NEWLINE_CODE = 10;

	// Private symbol for identifying `SourceNode`s when multiple versions of
	// the source-map library are loaded. This MUST NOT CHANGE across
	// versions!
	var isSourceNode = "$$$isSourceNode$$$";

	/**
	 * SourceNodes provide a way to abstract over interpolating/concatenating
	 * snippets of generated JavaScript source code while maintaining the line and
	 * column information associated with the original source code.
	 *
	 * @param aLine The original line number.
	 * @param aColumn The original column number.
	 * @param aSource The original source's filename.
	 * @param aChunks Optional. An array of strings which are snippets of
	 *        generated JS, or other SourceNodes.
	 * @param aName The original identifier.
	 */
	function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
	  this.children = [];
	  this.sourceContents = {};
	  this.line = aLine == null ? null : aLine;
	  this.column = aColumn == null ? null : aColumn;
	  this.source = aSource == null ? null : aSource;
	  this.name = aName == null ? null : aName;
	  this[isSourceNode] = true;
	  if (aChunks != null) this.add(aChunks);
	}

	/**
	 * Creates a SourceNode from generated code and a SourceMapConsumer.
	 *
	 * @param aGeneratedCode The generated code
	 * @param aSourceMapConsumer The SourceMap for the generated code
	 * @param aRelativePath Optional. The path that relative sources in the
	 *        SourceMapConsumer should be relative to.
	 */
	SourceNode.fromStringWithSourceMap =
	  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
	    // The SourceNode we want to fill with the generated code
	    // and the SourceMap
	    var node = new SourceNode();

	    // All even indices of this array are one line of the generated code,
	    // while all odd indices are the newlines between two adjacent lines
	    // (since `REGEX_NEWLINE` captures its match).
	    // Processed fragments are accessed by calling `shiftNextLine`.
	    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
	    var remainingLinesIndex = 0;
	    var shiftNextLine = function() {
	      var lineContents = getNextLine();
	      // The last line of a file might not have a newline.
	      var newLine = getNextLine() || "";
	      return lineContents + newLine;

	      function getNextLine() {
	        return remainingLinesIndex < remainingLines.length ?
	            remainingLines[remainingLinesIndex++] : undefined;
	      }
	    };

	    // We need to remember the position of "remainingLines"
	    var lastGeneratedLine = 1, lastGeneratedColumn = 0;

	    // The generate SourceNodes we need a code range.
	    // To extract it current and last mapping is used.
	    // Here we store the last mapping.
	    var lastMapping = null;

	    aSourceMapConsumer.eachMapping(function (mapping) {
	      if (lastMapping !== null) {
	        // We add the code from "lastMapping" to "mapping":
	        // First check if there is a new line in between.
	        if (lastGeneratedLine < mapping.generatedLine) {
	          // Associate first line with "lastMapping"
	          addMappingWithCode(lastMapping, shiftNextLine());
	          lastGeneratedLine++;
	          lastGeneratedColumn = 0;
	          // The remaining code is added without mapping
	        } else {
	          // There is no new line in between.
	          // Associate the code between "lastGeneratedColumn" and
	          // "mapping.generatedColumn" with "lastMapping"
	          var nextLine = remainingLines[remainingLinesIndex] || '';
	          var code = nextLine.substr(0, mapping.generatedColumn -
	                                        lastGeneratedColumn);
	          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
	                                              lastGeneratedColumn);
	          lastGeneratedColumn = mapping.generatedColumn;
	          addMappingWithCode(lastMapping, code);
	          // No more remaining code, continue
	          lastMapping = mapping;
	          return;
	        }
	      }
	      // We add the generated code until the first mapping
	      // to the SourceNode without any mapping.
	      // Each line is added as separate string.
	      while (lastGeneratedLine < mapping.generatedLine) {
	        node.add(shiftNextLine());
	        lastGeneratedLine++;
	      }
	      if (lastGeneratedColumn < mapping.generatedColumn) {
	        var nextLine = remainingLines[remainingLinesIndex] || '';
	        node.add(nextLine.substr(0, mapping.generatedColumn));
	        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
	        lastGeneratedColumn = mapping.generatedColumn;
	      }
	      lastMapping = mapping;
	    }, this);
	    // We have processed all mappings.
	    if (remainingLinesIndex < remainingLines.length) {
	      if (lastMapping) {
	        // Associate the remaining code in the current line with "lastMapping"
	        addMappingWithCode(lastMapping, shiftNextLine());
	      }
	      // and add the remaining lines without any mapping
	      node.add(remainingLines.splice(remainingLinesIndex).join(""));
	    }

	    // Copy sourcesContent into SourceNode
	    aSourceMapConsumer.sources.forEach(function (sourceFile) {
	      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
	      if (content != null) {
	        if (aRelativePath != null) {
	          sourceFile = util.join(aRelativePath, sourceFile);
	        }
	        node.setSourceContent(sourceFile, content);
	      }
	    });

	    return node;

	    function addMappingWithCode(mapping, code) {
	      if (mapping === null || mapping.source === undefined) {
	        node.add(code);
	      } else {
	        var source = aRelativePath
	          ? util.join(aRelativePath, mapping.source)
	          : mapping.source;
	        node.add(new SourceNode(mapping.originalLine,
	                                mapping.originalColumn,
	                                source,
	                                code,
	                                mapping.name));
	      }
	    }
	  };

	/**
	 * Add a chunk of generated JS to this source node.
	 *
	 * @param aChunk A string snippet of generated JS code, another instance of
	 *        SourceNode, or an array where each member is one of those things.
	 */
	SourceNode.prototype.add = function SourceNode_add(aChunk) {
	  if (Array.isArray(aChunk)) {
	    aChunk.forEach(function (chunk) {
	      this.add(chunk);
	    }, this);
	  }
	  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
	    if (aChunk) {
	      this.children.push(aChunk);
	    }
	  }
	  else {
	    throw new TypeError(
	      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
	    );
	  }
	  return this;
	};

	/**
	 * Add a chunk of generated JS to the beginning of this source node.
	 *
	 * @param aChunk A string snippet of generated JS code, another instance of
	 *        SourceNode, or an array where each member is one of those things.
	 */
	SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
	  if (Array.isArray(aChunk)) {
	    for (var i = aChunk.length-1; i >= 0; i--) {
	      this.prepend(aChunk[i]);
	    }
	  }
	  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
	    this.children.unshift(aChunk);
	  }
	  else {
	    throw new TypeError(
	      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
	    );
	  }
	  return this;
	};

	/**
	 * Walk over the tree of JS snippets in this node and its children. The
	 * walking function is called once for each snippet of JS and is passed that
	 * snippet and the its original associated source's line/column location.
	 *
	 * @param aFn The traversal function.
	 */
	SourceNode.prototype.walk = function SourceNode_walk(aFn) {
	  var chunk;
	  for (var i = 0, len = this.children.length; i < len; i++) {
	    chunk = this.children[i];
	    if (chunk[isSourceNode]) {
	      chunk.walk(aFn);
	    }
	    else {
	      if (chunk !== '') {
	        aFn(chunk, { source: this.source,
	                     line: this.line,
	                     column: this.column,
	                     name: this.name });
	      }
	    }
	  }
	};

	/**
	 * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
	 * each of `this.children`.
	 *
	 * @param aSep The separator.
	 */
	SourceNode.prototype.join = function SourceNode_join(aSep) {
	  var newChildren;
	  var i;
	  var len = this.children.length;
	  if (len > 0) {
	    newChildren = [];
	    for (i = 0; i < len-1; i++) {
	      newChildren.push(this.children[i]);
	      newChildren.push(aSep);
	    }
	    newChildren.push(this.children[i]);
	    this.children = newChildren;
	  }
	  return this;
	};

	/**
	 * Call String.prototype.replace on the very right-most source snippet. Useful
	 * for trimming whitespace from the end of a source node, etc.
	 *
	 * @param aPattern The pattern to replace.
	 * @param aReplacement The thing to replace the pattern with.
	 */
	SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
	  var lastChild = this.children[this.children.length - 1];
	  if (lastChild[isSourceNode]) {
	    lastChild.replaceRight(aPattern, aReplacement);
	  }
	  else if (typeof lastChild === 'string') {
	    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
	  }
	  else {
	    this.children.push(''.replace(aPattern, aReplacement));
	  }
	  return this;
	};

	/**
	 * Set the source content for a source file. This will be added to the SourceMapGenerator
	 * in the sourcesContent field.
	 *
	 * @param aSourceFile The filename of the source file
	 * @param aSourceContent The content of the source file
	 */
	SourceNode.prototype.setSourceContent =
	  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
	    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
	  };

	/**
	 * Walk over the tree of SourceNodes. The walking function is called for each
	 * source file content and is passed the filename and source content.
	 *
	 * @param aFn The traversal function.
	 */
	SourceNode.prototype.walkSourceContents =
	  function SourceNode_walkSourceContents(aFn) {
	    for (var i = 0, len = this.children.length; i < len; i++) {
	      if (this.children[i][isSourceNode]) {
	        this.children[i].walkSourceContents(aFn);
	      }
	    }

	    var sources = Object.keys(this.sourceContents);
	    for (var i = 0, len = sources.length; i < len; i++) {
	      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
	    }
	  };

	/**
	 * Return the string representation of this source node. Walks over the tree
	 * and concatenates all the various snippets together to one string.
	 */
	SourceNode.prototype.toString = function SourceNode_toString() {
	  var str = "";
	  this.walk(function (chunk) {
	    str += chunk;
	  });
	  return str;
	};

	/**
	 * Returns the string representation of this source node along with a source
	 * map.
	 */
	SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
	  var generated = {
	    code: "",
	    line: 1,
	    column: 0
	  };
	  var map = new SourceMapGenerator(aArgs);
	  var sourceMappingActive = false;
	  var lastOriginalSource = null;
	  var lastOriginalLine = null;
	  var lastOriginalColumn = null;
	  var lastOriginalName = null;
	  this.walk(function (chunk, original) {
	    generated.code += chunk;
	    if (original.source !== null
	        && original.line !== null
	        && original.column !== null) {
	      if(lastOriginalSource !== original.source
	         || lastOriginalLine !== original.line
	         || lastOriginalColumn !== original.column
	         || lastOriginalName !== original.name) {
	        map.addMapping({
	          source: original.source,
	          original: {
	            line: original.line,
	            column: original.column
	          },
	          generated: {
	            line: generated.line,
	            column: generated.column
	          },
	          name: original.name
	        });
	      }
	      lastOriginalSource = original.source;
	      lastOriginalLine = original.line;
	      lastOriginalColumn = original.column;
	      lastOriginalName = original.name;
	      sourceMappingActive = true;
	    } else if (sourceMappingActive) {
	      map.addMapping({
	        generated: {
	          line: generated.line,
	          column: generated.column
	        }
	      });
	      lastOriginalSource = null;
	      sourceMappingActive = false;
	    }
	    for (var idx = 0, length = chunk.length; idx < length; idx++) {
	      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
	        generated.line++;
	        generated.column = 0;
	        // Mappings end at eol
	        if (idx + 1 === length) {
	          lastOriginalSource = null;
	          sourceMappingActive = false;
	        } else if (sourceMappingActive) {
	          map.addMapping({
	            source: original.source,
	            original: {
	              line: original.line,
	              column: original.column
	            },
	            generated: {
	              line: generated.line,
	              column: generated.column
	            },
	            name: original.name
	          });
	        }
	      } else {
	        generated.column++;
	      }
	    }
	  });
	  this.walkSourceContents(function (sourceFile, sourceContent) {
	    map.setSourceContent(sourceFile, sourceContent);
	  });

	  return { code: generated.code, map: map };
	};

	exports.SourceNode = SourceNode;


/***/ })
/******/ ])
});
;!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.sourceMap=n():e.sourceMap=n()}(this,function(){return function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){n.SourceMapGenerator=r(1).SourceMapGenerator,n.SourceMapConsumer=r(7).SourceMapConsumer,n.SourceNode=r(10).SourceNode},function(e,n,r){function t(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new s,this._names=new s,this._mappings=new a,this._sourcesContents=null}var o=r(2),i=r(4),s=r(5).ArraySet,a=r(6).MappingList;t.prototype._version=3,t.fromSourceMap=function(e){var n=e.sourceRoot,r=new t({file:e.file,sourceRoot:n});return e.eachMapping(function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(t.source=e.source,null!=n&&(t.source=i.relative(n,t.source)),t.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(t.name=e.name)),r.addMapping(t)}),e.sources.forEach(function(t){var o=t;null!==n&&(o=i.relative(n,t)),r._sources.has(o)||r._sources.add(o);var s=e.sourceContentFor(t);null!=s&&r.setSourceContent(t,s)}),r},t.prototype.addMapping=function(e){var n=i.getArg(e,"generated"),r=i.getArg(e,"original",null),t=i.getArg(e,"source",null),o=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(n,r,t,o),null!=t&&(t=String(t),this._sources.has(t)||this._sources.add(t)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:t,name:o})},t.prototype.setSourceContent=function(e,n){var r=e;null!=this._sourceRoot&&(r=i.relative(this._sourceRoot,r)),null!=n?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(r)]=n):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},t.prototype.applySourceMap=function(e,n,r){var t=n;if(null==n){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');t=e.file}var o=this._sourceRoot;null!=o&&(t=i.relative(o,t));var a=new s,u=new s;this._mappings.unsortedForEach(function(n){if(n.source===t&&null!=n.originalLine){var s=e.originalPositionFor({line:n.originalLine,column:n.originalColumn});null!=s.source&&(n.source=s.source,null!=r&&(n.source=i.join(r,n.source)),null!=o&&(n.source=i.relative(o,n.source)),n.originalLine=s.line,n.originalColumn=s.column,null!=s.name&&(n.name=s.name))}var l=n.source;null==l||a.has(l)||a.add(l);var c=n.name;null==c||u.has(c)||u.add(c)},this),this._sources=a,this._names=u,e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&(null!=r&&(n=i.join(r,n)),null!=o&&(n=i.relative(o,n)),this.setSourceContent(n,t))},this)},t.prototype._validateMapping=function(e,n,r,t){if(n&&"number"!=typeof n.line&&"number"!=typeof n.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||n||r||t)&&!(e&&"line"in e&&"column"in e&&n&&"line"in n&&"column"in n&&e.line>0&&e.column>=0&&n.line>0&&n.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:n,name:t}))},t.prototype._serializeMappings=function(){for(var e,n,r,t,s=0,a=1,u=0,l=0,c=0,g=0,p="",h=this._mappings.toArray(),f=0,d=h.length;f<d;f++){if(n=h[f],e="",n.generatedLine!==a)for(s=0;n.generatedLine!==a;)e+=";",a++;else if(f>0){if(!i.compareByGeneratedPositionsInflated(n,h[f-1]))continue;e+=","}e+=o.encode(n.generatedColumn-s),s=n.generatedColumn,null!=n.source&&(t=this._sources.indexOf(n.source),e+=o.encode(t-g),g=t,e+=o.encode(n.originalLine-1-l),l=n.originalLine-1,e+=o.encode(n.originalColumn-u),u=n.originalColumn,null!=n.name&&(r=this._names.indexOf(n.name),e+=o.encode(r-c),c=r)),p+=e}return p},t.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=i.relative(n,e));var r=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},t.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},t.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=t},function(e,n,r){function t(e){return e<0?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(3),s=5,a=1<<s,u=a-1,l=a;n.encode=function(e){var n,r="",o=t(e);do n=o&u,o>>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),a===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<<p,p+=s}while(t);r.value=o(g),r.rest=n}},function(e,n){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");n.encode=function(e){if(0<=e&&e<r.length)return r[e];throw new TypeError("Must be between 0 and 63: "+e)},n.decode=function(e){var n=65,r=90,t=97,o=122,i=48,s=57,a=43,u=47,l=26,c=52;return n<=e&&e<=r?e-n:t<=e&&e<=o?e-t+l:i<=e&&e<=s?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){if(n in e)return e[n];if(3===arguments.length)return r;throw new Error('"'+n+'" is a required argument.')}function t(e){var n=e.match(v);return n?{scheme:n[1],auth:n[2],host:n[3],port:n[4],path:n[5]}:null}function o(e){var n="";return e.scheme&&(n+=e.scheme+":"),n+="//",e.auth&&(n+=e.auth+"@"),e.host&&(n+=e.host),e.port&&(n+=":"+e.port),e.path&&(n+=e.path),n}function i(e){var r=e,i=t(e);if(i){if(!i.path)return e;r=i.path}for(var s,a=n.isAbsolute(r),u=r.split(/\/+/),l=0,c=u.length-1;c>=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(y))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=f(e.source,n.source);return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:f(e.name,n.name)))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=f(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:f(e.name,n.name)))))}function f(e,n){return e===n?0:null===e?1:null===n?-1:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=f(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:f(e.name,n.name)))))}function m(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}function _(e,n,r){if(n=n||"",e&&("/"!==e[e.length-1]&&"/"!==n[0]&&(e+="/"),n=e+n),r){var a=t(r);if(!a)throw new Error("sourceMapURL could not be parsed");if(a.path){var u=a.path.lastIndexOf("/");u>=0&&(a.path=a.path.substring(0,u+1))}n=s(o(a),n)}return i(n)}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,y=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||v.test(e)},n.relative=a;var C=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=C?u:l,n.fromSetString=C?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=h,n.compareByGeneratedPositionsInflated=d,n.parseSourceMapInput=m,n.computeSourceURL=_},function(e,n,r){function t(){this._array=[],this._set=s?new Map:Object.create(null)}var o=r(4),i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Map;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o<i;o++)r.add(e[o],n);return r},t.prototype.size=function(){return s?this._set.size:Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=s?e:o.toSetString(e),t=s?this.has(e):i.call(this._set,r),a=this._array.length;t&&!n||this._array.push(e),t||(s?this._set.set(e,a):this._set[r]=a)},t.prototype.has=function(e){if(s)return this._set.has(e);var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){if(s){var n=this._set.get(e);if(n>=0)return n}else{var r=o.toSetString(e);if(i.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)},t.prototype.toArray=function(){return this._array.slice()},n.ArraySet=t},function(e,n,r){function t(e,n){var r=e.generatedLine,t=n.generatedLine,o=e.generatedColumn,s=n.generatedColumn;return t>r||t==r&&s>=o||i.compareByGeneratedPositionsInflated(e,n)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=r(4);o.prototype.unsortedForEach=function(e,n){this._array.forEach(e,n)},o.prototype.add=function(e){t(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},function(e,n,r){function t(e,n){var r=e;return"string"==typeof e&&(r=a.parseSourceMapInput(e)),null!=r.sections?new s(r,n):new o(r,n)}function o(e,n){var r=e;"string"==typeof e&&(r=a.parseSourceMapInput(e));var t=a.getArg(r,"version"),o=a.getArg(r,"sources"),i=a.getArg(r,"names",[]),s=a.getArg(r,"sourceRoot",null),u=a.getArg(r,"sourcesContent",null),c=a.getArg(r,"mappings"),g=a.getArg(r,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);s&&(s=a.normalize(s)),o=o.map(String).map(a.normalize).map(function(e){return s&&a.isAbsolute(s)&&a.isAbsolute(e)?a.relative(s,e):e}),this._names=l.fromArray(i.map(String),!0),this._sources=l.fromArray(o,!0),this._absoluteSources=this._sources.toArray().map(function(e){return a.computeSourceURL(s,e,n)}),this.sourceRoot=s,this.sourcesContent=u,this._mappings=c,this._sourceMapURL=n,this.file=g}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e,n){var r=e;"string"==typeof e&&(r=a.parseSourceMapInput(e));var o=a.getArg(r,"version"),i=a.getArg(r,"sections");if(o!=this._version)throw new Error("Unsupported version: "+o);this._sources=new l,this._names=new l;var s={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var r=a.getArg(e,"offset"),o=a.getArg(r,"line"),i=a.getArg(r,"column");if(o<s.line||o===s.line&&i<s.column)throw new Error("Section offsets must be ordered and non-overlapping.");return s=r,{generatedOffset:{generatedLine:o+1,generatedColumn:i+1},consumer:new t(a.getArg(e,"map"),n)}})}var a=r(4),u=r(8),l=r(5).ArraySet,c=r(2),g=r(9).quickSort;t.fromSourceMap=function(e,n){return o.fromSourceMap(e,n)},t.prototype._version=3,t.prototype.__generatedMappings=null,Object.defineProperty(t.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),t.prototype.__originalMappings=null,Object.defineProperty(t.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),t.prototype._charIsMappingSeparator=function(e,n){var r=e.charAt(n);return";"===r||","===r},t.prototype._parseMappings=function(e,n){throw new Error("Subclasses must implement _parseMappings")},t.GENERATED_ORDER=1,t.ORIGINAL_ORDER=2,t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.prototype.eachMapping=function(e,n,r){var o,i=n||null,s=r||t.GENERATED_ORDER;switch(s){case t.GENERATED_ORDER:o=this._generatedMappings;break;case t.ORIGINAL_ORDER:o=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;o.map(function(e){var n=null===e.source?null:this._sources.at(e.source);return n=a.computeSourceURL(u,n,this._sourceMapURL),{source:n,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:null===e.name?null:this._names.at(e.name)}},this).forEach(e,i)},t.prototype.allGeneratedPositionsFor=function(e){var n=a.getArg(e,"line"),r={source:a.getArg(e,"source"),originalLine:n,originalColumn:a.getArg(e,"column",0)};if(r.source=this._findSourceIndex(r.source),r.source<0)return[];var t=[],o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,u.LEAST_UPPER_BOUND);if(o>=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.prototype._findSourceIndex=function(e){var n=e;if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),this._sources.has(n))return this._sources.indexOf(n);var r;for(r=0;r<this._absoluteSources.length;++r)if(this._absoluteSources[r]==e)return r;return-1},o.fromSourceMap=function(e,n){var r=Object.create(o.prototype),t=r._names=l.fromArray(e._names.toArray(),!0),s=r._sources=l.fromArray(e._sources.toArray(),!0);r.sourceRoot=e._sourceRoot,r.sourcesContent=e._generateSourcesContent(r._sources.toArray(),r.sourceRoot),r.file=e._file,r._sourceMapURL=n,r._absoluteSources=r._sources.toArray().map(function(e){return a.computeSourceURL(r.sourceRoot,e,n)});for(var u=e._mappings.toArray().slice(),c=r.__generatedMappings=[],p=r.__originalMappings=[],h=0,f=u.length;h<f;h++){var d=u[h],m=new i;m.generatedLine=d.generatedLine,m.generatedColumn=d.generatedColumn,d.source&&(m.source=s.indexOf(d.source),m.originalLine=d.originalLine,m.originalColumn=d.originalColumn,d.name&&(m.name=t.indexOf(d.name)),p.push(m)),c.push(m)}return g(r.__originalMappings,a.compareByOriginalPositions),r},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._absoluteSources.slice()}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,d=0,m=0,_=e.length,v=0,y={},C={},S=[],A=[];v<_;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;s<_&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];v<s;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=d+o[1],d+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=m+o[4],m+=o[4])),A.push(r),"number"==typeof r.originalLine&&S.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(S,a.compareByOriginalPositions),this.__originalMappings=S},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var n=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var r=this._generatedMappings[e+1];if(n.generatedLine===r.generatedLine){n.lastGeneratedColumn=r.generatedColumn-1;continue}}n.lastGeneratedColumn=1/0}},o.prototype.originalPositionFor=function(e){var n={generatedLine:a.getArg(e,"line"),generatedColumn:a.getArg(e,"column")},r=this._findMapping(n,this._generatedMappings,"generatedLine","generatedColumn",a.compareByGeneratedPositionsDeflated,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(r>=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),i=a.computeSourceURL(this.sourceRoot,i,this._sourceMapURL));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;var r=this._findSourceIndex(e);if(r>=0)return this.sourcesContent[r];var t=e;null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t));var o;if(null!=this.sourceRoot&&(o=a.urlParse(this.sourceRoot))){var i=t.replace(/^file:\/\//,"");if("file"==o.scheme&&this._sources.has(i))return this.sourcesContent[this._sources.indexOf(i)];if((!o.path||"/"==o.path)&&this._sources.has("/"+t))return this.sourcesContent[this._sources.indexOf("/"+t)]}if(n)return null;throw new Error('"'+t+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(n=this._findSourceIndex(n),n<0)return{line:null,column:null,lastColumn:null};var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n<this._sections.length;n++)for(var r=0;r<this._sections[n].consumer.sources.length;r++)e.push(this._sections[n].consumer.sources[r]);return e}}),s.prototype.originalPositionFor=function(e){var n={generatedLine:a.getArg(e,"line"),generatedColumn:a.getArg(e,"column")},r=u.search(n,this._sections,function(e,n){var r=e.generatedLine-n.generatedOffset.generatedLine;return r?r:e.generatedColumn-n.generatedOffset.generatedColumn}),t=this._sections[r];return t?t.consumer.originalPositionFor({line:n.generatedLine-(t.generatedOffset.generatedLine-1),column:n.generatedColumn-(t.generatedOffset.generatedLine===n.generatedLine?t.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}},s.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})},s.prototype.sourceContentFor=function(e,n){for(var r=0;r<this._sections.length;r++){var t=this._sections[r],o=t.consumer.sourceContentFor(e,!0);if(o)return o}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},s.prototype.generatedPositionFor=function(e){for(var n=0;n<this._sections.length;n++){var r=this._sections[n];if(r.consumer._findSourceIndex(a.getArg(e,"source"))!==-1){var t=r.consumer.generatedPositionFor(e);if(t){var o={line:t.line+(r.generatedOffset.generatedLine-1),column:t.column+(r.generatedOffset.generatedLine===t.line?r.generatedOffset.generatedColumn-1:0)};return o}}}return{line:null,column:null}},s.prototype._parseMappings=function(e,n){this.__generatedMappings=[],this.__originalMappings=[];for(var r=0;r<this._sections.length;r++)for(var t=this._sections[r],o=t.consumer._generatedMappings,i=0;i<o.length;i++){var s=o[i],u=t.consumer._sources.at(s.source);u=a.computeSourceURL(t.consumer.sourceRoot,u,this._sourceMapURL),this._sources.add(u),u=this._sources.indexOf(u);var l=null;s.name&&(l=t.consumer._names.at(s.name),this._names.add(l),l=this._names.indexOf(l));var c={source:u,generatedLine:s.generatedLine+(t.generatedOffset.generatedLine-1),generatedColumn:s.generatedColumn+(t.generatedOffset.generatedLine===s.generatedLine?t.generatedOffset.generatedColumn-1:0),originalLine:s.originalLine,originalColumn:s.originalColumn,name:l};this.__generatedMappings.push(c),"number"==typeof c.originalLine&&this.__originalMappings.push(c)}g(this.__generatedMappings,a.compareByGeneratedPositionsDeflated),g(this.__originalMappings,a.compareByOriginalPositions)},n.IndexedSourceMapConsumer=s},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t<i.length?t:-1:u:u-e>1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(i<s){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;c<s;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}},function(e,n,r){function t(e,n,r,t,o){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==n?null:n,this.source=null==r?null:r,this.name=null==o?null:o,this[u]=!0,null!=t&&this.add(t)}var o=r(1).SourceMapGenerator,i=r(4),s=/(\r?\n)/,a=10,u="$$$isSourceNode$$$";t.fromStringWithSourceMap=function(e,n,r){function o(e,n){if(null===e||void 0===e.source)a.add(n);else{var o=r?i.join(r,e.source):e.source;a.add(new t(e.originalLine,e.originalColumn,o,n,e.name))}}var a=new t,u=e.split(s),l=0,c=function(){function e(){return l<u.length?u[l++]:void 0}var n=e(),r=e()||"";return n+r},g=1,p=0,h=null;return n.eachMapping(function(e){if(null!==h){if(!(g<e.generatedLine)){var n=u[l]||"",r=n.substr(0,e.generatedColumn-p);return u[l]=n.substr(e.generatedColumn-p),p=e.generatedColumn,o(h,r),void(h=e)}o(h,c()),g++,p=0}for(;g<e.generatedLine;)a.add(c()),g++;if(p<e.generatedColumn){var n=u[l]||"";a.add(n.substr(0,e.generatedColumn)),u[l]=n.substr(e.generatedColumn),p=e.generatedColumn}h=e},this),l<u.length&&(h&&o(h,c()),a.add(u.splice(l).join(""))),n.sources.forEach(function(e){var t=n.sourceContentFor(e);null!=t&&(null!=r&&(e=i.join(r,e)),a.setSourceContent(e,t))}),a},t.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(e){this.add(e)},this);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},t.prototype.prepend=function(e){if(Array.isArray(e))for(var n=e.length-1;n>=0;n--)this.prepend(e[n]);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},t.prototype.walk=function(e){for(var n,r=0,t=this.children.length;r<t;r++)n=this.children[r],n[u]?n.walk(e):""!==n&&e(n,{source:this.source,line:this.line,column:this.column,name:this.name})},t.prototype.join=function(e){var n,r,t=this.children.length;if(t>0){for(n=[],r=0;r<t-1;r++)n.push(this.children[r]),n.push(e);n.push(this.children[r]),this.children=n}return this},t.prototype.replaceRight=function(e,n){var r=this.children[this.children.length-1];return r[u]?r.replaceRight(e,n):"string"==typeof r?this.children[this.children.length-1]=r.replace(e,n):this.children.push("".replace(e,n)),this},t.prototype.setSourceContent=function(e,n){this.sourceContents[i.toSetString(e)]=n},t.prototype.walkSourceContents=function(e){for(var n=0,r=this.children.length;n<r;n++)this.children[n][u]&&this.children[n].walkSourceContents(e);for(var t=Object.keys(this.sourceContents),n=0,r=t.length;n<r;n++)e(i.fromSetString(t[n]),this.sourceContents[t[n]])},t.prototype.toString=function(){var e="";return this.walk(function(n){e+=n}),e},t.prototype.toStringWithSourceMap=function(e){var n={code:"",line:1,column:0},r=new o(e),t=!1,i=null,s=null,u=null,l=null;return this.walk(function(e,o){n.code+=e,null!==o.source&&null!==o.line&&null!==o.column?(i===o.source&&s===o.line&&u===o.column&&l===o.name||r.addMapping({source:o.source,original:{line:o.line,column:o.column},generated:{line:n.line,column:n.column},name:o.name}),i=o.source,s=o.line,u=o.column,l=o.name,t=!0):t&&(r.addMapping({generated:{line:n.line,column:n.column}}),i=null,t=!1);for(var c=0,g=e.length;c<g;c++)e.charCodeAt(c)===a?(n.line++,n.column=0,c+1===g?(i=null,t=!1):t&&r.addMapping({source:o.source,original:{line:o.line,column:o.column},generated:{line:n.line,column:n.column},name:o.name})):n.column++}),this.walkSourceContents(function(e,n){r.setSourceContent(e,n)}),{code:n.code,map:r}},n.SourceNode=t}])});
//# sourceMappingURL=source-map.min.js.map{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///source-map.min.js","webpack:///webpack/bootstrap 0fd5815da764db5fb9fe","webpack:///./source-map.js","webpack:///./lib/source-map-generator.js","webpack:///./lib/base64-vlq.js","webpack:///./lib/base64.js","webpack:///./lib/util.js","webpack:///./lib/array-set.js","webpack:///./lib/mapping-list.js","webpack:///./lib/source-map-consumer.js","webpack:///./lib/binary-search.js","webpack:///./lib/quick-sort.js","webpack:///./lib/source-node.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","SourceMapGenerator","SourceMapConsumer","SourceNode","aArgs","_file","util","getArg","_sourceRoot","_skipValidation","_sources","ArraySet","_names","_mappings","MappingList","_sourcesContents","base64VLQ","prototype","_version","fromSourceMap","aSourceMapConsumer","sourceRoot","generator","file","eachMapping","mapping","newMapping","generated","line","generatedLine","column","generatedColumn","source","relative","original","originalLine","originalColumn","name","addMapping","sources","forEach","sourceFile","sourceRelative","has","add","content","sourceContentFor","setSourceContent","_validateMapping","String","aSourceFile","aSourceContent","Object","create","toSetString","keys","length","applySourceMap","aSourceMapPath","Error","newSources","newNames","unsortedForEach","originalPositionFor","join","aGenerated","aOriginal","aSource","aName","JSON","stringify","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","result","mappings","toArray","i","len","compareByGeneratedPositionsInflated","encode","indexOf","_generateSourcesContent","aSources","aSourceRoot","map","key","hasOwnProperty","toJSON","version","names","sourcesContent","toString","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","base64","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","digit","encoded","vlq","decode","aStr","aIndex","aOutParam","continuation","strLen","shift","charCodeAt","charAt","value","rest","intToCharMap","split","number","TypeError","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","aDefaultValue","arguments","urlParse","aUrl","match","urlRegexp","scheme","auth","host","port","path","urlGenerate","aParsedUrl","url","normalize","aPath","part","isAbsolute","parts","up","splice","aRoot","aPathUrl","aRootUrl","dataUrlRegexp","joined","replace","level","index","lastIndexOf","slice","Array","substr","identity","s","isProtoString","fromSetString","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","strcmp","compareByGeneratedPositionsDeflated","onlyCompareGenerated","aStr1","aStr2","parseSourceMapInput","str","parse","computeSourceURL","sourceURL","sourceMapURL","parsed","substring","test","supportsNullProto","obj","_array","_set","hasNativeMap","Map","fromArray","aArray","aAllowDuplicates","set","size","getOwnPropertyNames","sStr","isDuplicate","idx","push","get","at","aIdx","generatedPositionAfter","lineA","lineB","columnA","columnB","_sorted","_last","aCallback","aThisArg","aMapping","sort","aSourceMap","aSourceMapURL","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","_absoluteSources","_sourceMapURL","Mapping","lastOffset","_sections","offset","offsetLine","offsetColumn","generatedOffset","consumer","binarySearch","quickSort","__generatedMappings","defineProperty","configurable","enumerable","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","aContext","aOrder","context","order","_generatedMappings","_originalMappings","allGeneratedPositionsFor","needle","_findSourceIndex","_findMapping","undefined","lastColumn","relativeSource","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","segment","end","cachedSegments","temp","originalMappings","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","search","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","some","sc","nullOnMissing","fileUriAbsPath","generatedPositionFor","constructor","j","sectionIndex","section","bias","every","generatedPosition","ret","sectionMappings","adjustedMapping","recursiveSearch","aLow","aHigh","aHaystack","aCompare","mid","Math","floor","swap","ary","x","y","randomIntInRange","low","high","round","random","doQuickSort","comparator","r","pivotIndex","pivot","q","aLine","aColumn","aChunks","children","sourceContents","isSourceNode","REGEX_NEWLINE","NEWLINE_CODE","fromStringWithSourceMap","aGeneratedCode","aRelativePath","addMappingWithCode","code","node","remainingLines","remainingLinesIndex","shiftNextLine","getNextLine","lineContents","newLine","lastGeneratedLine","lastMapping","nextLine","aChunk","isArray","chunk","prepend","unshift","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","walkSourceContents","toStringWithSourceMap","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,UAAAH,GACA,gBAAAC,SACAA,QAAA,UAAAD,IAEAD,EAAA,UAAAC,KACCK,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAP,OAGA,IAAAC,GAAAO,EAAAD,IACAP,WACAS,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAS,QAAA,EAGAT,EAAAD,QAvBA,GAAAQ,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDgBM,SAAUL,EAAQD,EAASM,GEjDjCN,EAAAe,mBAAAT,EAAA,GAAAS,mBACAf,EAAAgB,kBAAAV,EAAA,GAAAU,kBACAhB,EAAAiB,WAAAX,EAAA,IAAAW,YF6DM,SAAUhB,EAAQD,EAASM,GGhDjC,QAAAS,GAAAG,GACAA,IACAA,MAEAd,KAAAe,MAAAC,EAAAC,OAAAH,EAAA,aACAd,KAAAkB,YAAAF,EAAAC,OAAAH,EAAA,mBACAd,KAAAmB,gBAAAH,EAAAC,OAAAH,EAAA,qBACAd,KAAAoB,SAAA,GAAAC,GACArB,KAAAsB,OAAA,GAAAD,GACArB,KAAAuB,UAAA,GAAAC,GACAxB,KAAAyB,iBAAA,KAvBA,GAAAC,GAAAxB,EAAA,GACAc,EAAAd,EAAA,GACAmB,EAAAnB,EAAA,GAAAmB,SACAG,EAAAtB,EAAA,GAAAsB,WAuBAb,GAAAgB,UAAAC,SAAA,EAOAjB,EAAAkB,cACA,SAAAC,GACA,GAAAC,GAAAD,EAAAC,WACAC,EAAA,GAAArB,IACAsB,KAAAH,EAAAG,KACAF,cA2CA,OAzCAD,GAAAI,YAAA,SAAAC,GACA,GAAAC,IACAC,WACAC,KAAAH,EAAAI,cACAC,OAAAL,EAAAM,iBAIA,OAAAN,EAAAO,SACAN,EAAAM,OAAAP,EAAAO,OACA,MAAAX,IACAK,EAAAM,OAAA1B,EAAA2B,SAAAZ,EAAAK,EAAAM,SAGAN,EAAAQ,UACAN,KAAAH,EAAAU,aACAL,OAAAL,EAAAW,gBAGA,MAAAX,EAAAY,OACAX,EAAAW,KAAAZ,EAAAY,OAIAf,EAAAgB,WAAAZ,KAEAN,EAAAmB,QAAAC,QAAA,SAAAC,GACA,GAAAC,GAAAD,CACA,QAAApB,IACAqB,EAAApC,EAAA2B,SAAAZ,EAAAoB,IAGAnB,EAAAZ,SAAAiC,IAAAD,IACApB,EAAAZ,SAAAkC,IAAAF,EAGA,IAAAG,GAAAzB,EAAA0B,iBAAAL,EACA,OAAAI,GACAvB,EAAAyB,iBAAAN,EAAAI,KAGAvB,GAaArB,EAAAgB,UAAAqB,WACA,SAAAlC,GACA,GAAAuB,GAAArB,EAAAC,OAAAH,EAAA,aACA8B,EAAA5B,EAAAC,OAAAH,EAAA,iBACA4B,EAAA1B,EAAAC,OAAAH,EAAA,eACAiC,EAAA/B,EAAAC,OAAAH,EAAA,YAEAd,MAAAmB,iBACAnB,KAAA0D,iBAAArB,EAAAO,EAAAF,EAAAK,GAGA,MAAAL,IACAA,EAAAiB,OAAAjB,GACA1C,KAAAoB,SAAAiC,IAAAX,IACA1C,KAAAoB,SAAAkC,IAAAZ,IAIA,MAAAK,IACAA,EAAAY,OAAAZ,GACA/C,KAAAsB,OAAA+B,IAAAN,IACA/C,KAAAsB,OAAAgC,IAAAP,IAIA/C,KAAAuB,UAAA+B,KACAf,cAAAF,EAAAC,KACAG,gBAAAJ,EAAAG,OACAK,aAAA,MAAAD,KAAAN,KACAQ,eAAA,MAAAF,KAAAJ,OACAE,SACAK,UAOApC,EAAAgB,UAAA8B,iBACA,SAAAG,EAAAC,GACA,GAAAnB,GAAAkB,CACA,OAAA5D,KAAAkB,cACAwB,EAAA1B,EAAA2B,SAAA3C,KAAAkB,YAAAwB,IAGA,MAAAmB,GAGA7D,KAAAyB,mBACAzB,KAAAyB,iBAAAqC,OAAAC,OAAA,OAEA/D,KAAAyB,iBAAAT,EAAAgD,YAAAtB,IAAAmB,GACK7D,KAAAyB,yBAGLzB,MAAAyB,iBAAAT,EAAAgD,YAAAtB,IACA,IAAAoB,OAAAG,KAAAjE,KAAAyB,kBAAAyC,SACAlE,KAAAyB,iBAAA,QAqBAd,EAAAgB,UAAAwC,eACA,SAAArC,EAAA8B,EAAAQ,GACA,GAAAjB,GAAAS,CAEA,UAAAA,EAAA,CACA,SAAA9B,EAAAG,KACA,SAAAoC,OACA,gJAIAlB,GAAArB,EAAAG,KAEA,GAAAF,GAAA/B,KAAAkB,WAEA,OAAAa,IACAoB,EAAAnC,EAAA2B,SAAAZ,EAAAoB,GAIA,IAAAmB,GAAA,GAAAjD,GACAkD,EAAA,GAAAlD,EAGArB,MAAAuB,UAAAiD,gBAAA,SAAArC,GACA,GAAAA,EAAAO,SAAAS,GAAA,MAAAhB,EAAAU,aAAA,CAEA,GAAAD,GAAAd,EAAA2C,qBACAnC,KAAAH,EAAAU,aACAL,OAAAL,EAAAW,gBAEA,OAAAF,EAAAF,SAEAP,EAAAO,OAAAE,EAAAF,OACA,MAAA0B,IACAjC,EAAAO,OAAA1B,EAAA0D,KAAAN,EAAAjC,EAAAO,SAEA,MAAAX,IACAI,EAAAO,OAAA1B,EAAA2B,SAAAZ,EAAAI,EAAAO,SAEAP,EAAAU,aAAAD,EAAAN,KACAH,EAAAW,eAAAF,EAAAJ,OACA,MAAAI,EAAAG,OACAZ,EAAAY,KAAAH,EAAAG,OAKA,GAAAL,GAAAP,EAAAO,MACA,OAAAA,GAAA4B,EAAAjB,IAAAX,IACA4B,EAAAhB,IAAAZ,EAGA,IAAAK,GAAAZ,EAAAY,IACA,OAAAA,GAAAwB,EAAAlB,IAAAN,IACAwB,EAAAjB,IAAAP,IAGK/C,MACLA,KAAAoB,SAAAkD,EACAtE,KAAAsB,OAAAiD,EAGAzC,EAAAmB,QAAAC,QAAA,SAAAC,GACA,GAAAI,GAAAzB,EAAA0B,iBAAAL,EACA,OAAAI,IACA,MAAAa,IACAjB,EAAAnC,EAAA0D,KAAAN,EAAAjB,IAEA,MAAApB,IACAoB,EAAAnC,EAAA2B,SAAAZ,EAAAoB,IAEAnD,KAAAyD,iBAAAN,EAAAI,KAEKvD,OAcLW,EAAAgB,UAAA+B,iBACA,SAAAiB,EAAAC,EAAAC,EACAC,GAKA,GAAAF,GAAA,gBAAAA,GAAAtC,MAAA,gBAAAsC,GAAApC,OACA,SAAA6B,OACA,+OAMA,OAAAM,GAAA,QAAAA,IAAA,UAAAA,IACAA,EAAArC,KAAA,GAAAqC,EAAAnC,QAAA,IACAoC,GAAAC,GAAAC,MAIAH,GAAA,QAAAA,IAAA,UAAAA,IACAC,GAAA,QAAAA,IAAA,UAAAA,IACAD,EAAArC,KAAA,GAAAqC,EAAAnC,QAAA,GACAoC,EAAAtC,KAAA,GAAAsC,EAAApC,QAAA,GACAqC,GAKA,SAAAR,OAAA,oBAAAU,KAAAC,WACA3C,UAAAsC,EACAjC,OAAAmC,EACAjC,SAAAgC,EACA7B,KAAA+B,MASAnE,EAAAgB,UAAAsD,mBACA,WAcA,OANAC,GACA/C,EACAgD,EACAC,EAVAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GAMAC,EAAA5F,KAAAuB,UAAAsE,UACAC,EAAA,EAAAC,EAAAH,EAAA1B,OAA0C4B,EAAAC,EAASD,IAAA,CAInD,GAHA3D,EAAAyD,EAAAE,GACAZ,EAAA,GAEA/C,EAAAI,gBAAA+C,EAEA,IADAD,EAAA,EACAlD,EAAAI,gBAAA+C,GACAJ,GAAA,IACAI,QAIA,IAAAQ,EAAA,GACA,IAAA9E,EAAAgF,oCAAA7D,EAAAyD,EAAAE,EAAA,IACA,QAEAZ,IAAA,IAIAA,GAAAxD,EAAAuE,OAAA9D,EAAAM,gBACA4C,GACAA,EAAAlD,EAAAM,gBAEA,MAAAN,EAAAO,SACA0C,EAAApF,KAAAoB,SAAA8E,QAAA/D,EAAAO,QACAwC,GAAAxD,EAAAuE,OAAAb,EAAAM,GACAA,EAAAN,EAGAF,GAAAxD,EAAAuE,OAAA9D,EAAAU,aAAA,EACA2C,GACAA,EAAArD,EAAAU,aAAA,EAEAqC,GAAAxD,EAAAuE,OAAA9D,EAAAW,eACAyC,GACAA,EAAApD,EAAAW,eAEA,MAAAX,EAAAY,OACAoC,EAAAnF,KAAAsB,OAAA4E,QAAA/D,EAAAY,MACAmC,GAAAxD,EAAAuE,OAAAd,EAAAM,GACAA,EAAAN,IAIAQ,GAAAT,EAGA,MAAAS,IAGAhF,EAAAgB,UAAAwE,wBACA,SAAAC,EAAAC,GACA,MAAAD,GAAAE,IAAA,SAAA5D,GACA,IAAA1C,KAAAyB,iBACA,WAEA,OAAA4E,IACA3D,EAAA1B,EAAA2B,SAAA0D,EAAA3D,GAEA,IAAA6D,GAAAvF,EAAAgD,YAAAtB,EACA,OAAAoB,QAAAnC,UAAA6E,eAAAjG,KAAAP,KAAAyB,iBAAA8E,GACAvG,KAAAyB,iBAAA8E,GACA,MACKvG,OAMLW,EAAAgB,UAAA8E,OACA,WACA,GAAAH,IACAI,QAAA1G,KAAA4B,SACAqB,QAAAjD,KAAAoB,SAAAyE,UACAc,MAAA3G,KAAAsB,OAAAuE,UACAD,SAAA5F,KAAAiF,qBAYA,OAVA,OAAAjF,KAAAe,QACAuF,EAAArE,KAAAjC,KAAAe,OAEA,MAAAf,KAAAkB,cACAoF,EAAAvE,WAAA/B,KAAAkB,aAEAlB,KAAAyB,mBACA6E,EAAAM,eAAA5G,KAAAmG,wBAAAG,EAAArD,QAAAqD,EAAAvE,aAGAuE,GAMA3F,EAAAgB,UAAAkF,SACA,WACA,MAAA9B,MAAAC,UAAAhF,KAAAyG,WAGA7G,EAAAe,sBH2EM,SAAUd,EAAQD,EAASM,GI/ajC,QAAA4G,GAAAC,GACA,MAAAA,GAAA,IACAA,GAAA,MACAA,GAAA,KASA,QAAAC,GAAAD,GACA,GAAAE,GAAA,OAAAF,GACAG,EAAAH,GAAA,CACA,OAAAE,IACAC,EACAA,EAhDA,GAAAC,GAAAjH,EAAA,GAcAkH,EAAA,EAGAC,EAAA,GAAAD,EAGAE,EAAAD,EAAA,EAGAE,EAAAF,CA+BAzH,GAAAqG,OAAA,SAAAc,GACA,GACAS,GADAC,EAAA,GAGAC,EAAAZ,EAAAC,EAEA,GACAS,GAAAE,EAAAJ,EACAI,KAAAN,EACAM,EAAA,IAGAF,GAAAD,GAEAE,GAAAN,EAAAlB,OAAAuB,SACGE,EAAA,EAEH,OAAAD,IAOA7H,EAAA+H,OAAA,SAAAC,EAAAC,EAAAC,GACA,GAGAC,GAAAP,EAHAQ,EAAAJ,EAAA1D,OACAyB,EAAA,EACAsC,EAAA,CAGA,IACA,GAAAJ,GAAAG,EACA,SAAA3D,OAAA,6CAIA,IADAmD,EAAAL,EAAAQ,OAAAC,EAAAM,WAAAL,MACAL,KAAA,EACA,SAAAnD,OAAA,yBAAAuD,EAAAO,OAAAN,EAAA,GAGAE,MAAAP,EAAAD,GACAC,GAAAF,EACA3B,GAAA6B,GAAAS,EACAA,GAAAb,QACGW,EAEHD,GAAAM,MAAApB,EAAArB,GACAmC,EAAAO,KAAAR,IJ2fM,SAAUhI,EAAQD,GK9nBxB,GAAA0I,GAAA,mEAAAC,MAAA,GAKA3I,GAAAqG,OAAA,SAAAuC,GACA,MAAAA,KAAAF,EAAApE,OACA,MAAAoE,GAAAE,EAEA,UAAAC,WAAA,6BAAAD,IAOA5I,EAAA+H,OAAA,SAAAe,GACA,GAAAC,GAAA,GACAC,EAAA,GAEAC,EAAA,GACAC,EAAA,IAEAC,EAAA,GACAC,EAAA,GAEAC,EAAA,GACAC,EAAA,GAEAC,EAAA,GACAC,EAAA,EAGA,OAAAT,IAAAD,MAAAE,EACAF,EAAAC,EAIAE,GAAAH,MAAAI,EACAJ,EAAAG,EAAAM,EAIAJ,GAAAL,MAAAM,EACAN,EAAAK,EAAAK,EAIAV,GAAAO,EACA,GAIAP,GAAAQ,EACA,IAIA,IL6oBM,SAAUrJ,EAAQD,GM7rBxB,QAAAqB,GAAAH,EAAAgE,EAAAuE,GACA,GAAAvE,IAAAhE,GACA,MAAAA,GAAAgE,EACG,QAAAwE,UAAApF,OACH,MAAAmF,EAEA,UAAAhF,OAAA,IAAAS,EAAA,6BAQA,QAAAyE,GAAAC,GACA,GAAAC,GAAAD,EAAAC,MAAAC,EACA,OAAAD,IAIAE,OAAAF,EAAA,GACAG,KAAAH,EAAA,GACAI,KAAAJ,EAAA,GACAK,KAAAL,EAAA,GACAM,KAAAN,EAAA,IAPA,KAYA,QAAAO,GAAAC,GACA,GAAAC,GAAA,EAiBA,OAhBAD,GAAAN,SACAO,GAAAD,EAAAN,OAAA,KAEAO,GAAA,KACAD,EAAAL,OACAM,GAAAD,EAAAL,KAAA,KAEAK,EAAAJ,OACAK,GAAAD,EAAAJ,MAEAI,EAAAH,OACAI,GAAA,IAAAD,EAAAH,MAEAG,EAAAF,OACAG,GAAAD,EAAAF,MAEAG,EAeA,QAAAC,GAAAC,GACA,GAAAL,GAAAK,EACAF,EAAAX,EAAAa,EACA,IAAAF,EAAA,CACA,IAAAA,EAAAH,KACA,MAAAK,EAEAL,GAAAG,EAAAH,KAKA,OAAAM,GAHAC,EAAA1K,EAAA0K,WAAAP,GAEAQ,EAAAR,EAAAxB,MAAA,OACAiC,EAAA,EAAA1E,EAAAyE,EAAArG,OAAA,EAA8C4B,GAAA,EAAQA,IACtDuE,EAAAE,EAAAzE,GACA,MAAAuE,EACAE,EAAAE,OAAA3E,EAAA,GACK,OAAAuE,EACLG,IACKA,EAAA,IACL,KAAAH,GAIAE,EAAAE,OAAA3E,EAAA,EAAA0E,GACAA,EAAA,IAEAD,EAAAE,OAAA3E,EAAA,GACA0E,KAUA,OANAT,GAAAQ,EAAA7F,KAAA,KAEA,KAAAqF,IACAA,EAAAO,EAAA,SAGAJ,GACAA,EAAAH,OACAC,EAAAE,IAEAH,EAoBA,QAAArF,GAAAgG,EAAAN,GACA,KAAAM,IACAA,EAAA,KAEA,KAAAN,IACAA,EAAA,IAEA,IAAAO,GAAApB,EAAAa,GACAQ,EAAArB,EAAAmB,EAMA,IALAE,IACAF,EAAAE,EAAAb,MAAA,KAIAY,MAAAhB,OAIA,MAHAiB,KACAD,EAAAhB,OAAAiB,EAAAjB,QAEAK,EAAAW,EAGA,IAAAA,GAAAP,EAAAX,MAAAoB,GACA,MAAAT,EAIA,IAAAQ,MAAAf,OAAAe,EAAAb,KAEA,MADAa,GAAAf,KAAAO,EACAJ,EAAAY,EAGA,IAAAE,GAAA,MAAAV,EAAAjC,OAAA,GACAiC,EACAD,EAAAO,EAAAK,QAAA,eAAAX,EAEA,OAAAQ,IACAA,EAAAb,KAAAe,EACAd,EAAAY,IAEAE,EAcA,QAAAnI,GAAA+H,EAAAN,GACA,KAAAM,IACAA,EAAA,KAGAA,IAAAK,QAAA,SAOA,KADA,GAAAC,GAAA,EACA,IAAAZ,EAAAlE,QAAAwE,EAAA,OACA,GAAAO,GAAAP,EAAAQ,YAAA,IACA,IAAAD,EAAA,EACA,MAAAb,EAOA,IADAM,IAAAS,MAAA,EAAAF,GACAP,EAAAjB,MAAA,qBACA,MAAAW,KAGAY,EAIA,MAAAI,OAAAJ,EAAA,GAAAtG,KAAA,OAAA0F,EAAAiB,OAAAX,EAAAxG,OAAA,GASA,QAAAoH,GAAAC,GACA,MAAAA,GAYA,QAAAvH,GAAA4D,GACA,MAAA4D,GAAA5D,GACA,IAAAA,EAGAA,EAIA,QAAA6D,GAAA7D,GACA,MAAA4D,GAAA5D,GACAA,EAAAuD,MAAA,GAGAvD,EAIA,QAAA4D,GAAAD,GACA,IAAAA,EACA,QAGA,IAAArH,GAAAqH,EAAArH,MAEA,IAAAA,EAAA,EACA,QAGA,SAAAqH,EAAArD,WAAAhE,EAAA,IACA,KAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,KAAAqH,EAAArD,WAAAhE,EAAA,IACA,KAAAqH,EAAArD,WAAAhE,EAAA,GACA,QAGA,QAAA4B,GAAA5B,EAAA,GAA2B4B,GAAA,EAAQA,IACnC,QAAAyF,EAAArD,WAAApC,GACA,QAIA,UAWA,QAAA4F,GAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAC,EAAAJ,EAAAjJ,OAAAkJ,EAAAlJ,OACA,YAAAoJ,EACAA,GAGAA,EAAAH,EAAA9I,aAAA+I,EAAA/I,aACA,IAAAiJ,EACAA,GAGAA,EAAAH,EAAA7I,eAAA8I,EAAA9I,eACA,IAAAgJ,GAAAD,EACAC,GAGAA,EAAAH,EAAAlJ,gBAAAmJ,EAAAnJ,gBACA,IAAAqJ,EACAA,GAGAA,EAAAH,EAAApJ,cAAAqJ,EAAArJ,cACA,IAAAuJ,EACAA,EAGAC,EAAAJ,EAAA5I,KAAA6I,EAAA7I,UAaA,QAAAiJ,GAAAL,EAAAC,EAAAK,GACA,GAAAH,GAAAH,EAAApJ,cAAAqJ,EAAArJ,aACA,YAAAuJ,EACAA,GAGAA,EAAAH,EAAAlJ,gBAAAmJ,EAAAnJ,gBACA,IAAAqJ,GAAAG,EACAH,GAGAA,EAAAC,EAAAJ,EAAAjJ,OAAAkJ,EAAAlJ,QACA,IAAAoJ,EACAA,GAGAA,EAAAH,EAAA9I,aAAA+I,EAAA/I,aACA,IAAAiJ,EACAA,GAGAA,EAAAH,EAAA7I,eAAA8I,EAAA9I,eACA,IAAAgJ,EACAA,EAGAC,EAAAJ,EAAA5I,KAAA6I,EAAA7I,UAIA,QAAAgJ,GAAAG,EAAAC,GACA,MAAAD,KAAAC,EACA,EAGA,OAAAD,EACA,EAGA,OAAAC,GACA,EAGAD,EAAAC,EACA,GAGA,EAOA,QAAAnG,GAAA2F,EAAAC,GACA,GAAAE,GAAAH,EAAApJ,cAAAqJ,EAAArJ,aACA,YAAAuJ,EACAA,GAGAA,EAAAH,EAAAlJ,gBAAAmJ,EAAAnJ,gBACA,IAAAqJ,EACAA,GAGAA,EAAAC,EAAAJ,EAAAjJ,OAAAkJ,EAAAlJ,QACA,IAAAoJ,EACAA,GAGAA,EAAAH,EAAA9I,aAAA+I,EAAA/I,aACA,IAAAiJ,EACAA,GAGAA,EAAAH,EAAA7I,eAAA8I,EAAA9I,eACA,IAAAgJ,EACAA,EAGAC,EAAAJ,EAAA5I,KAAA6I,EAAA7I,UASA,QAAAqJ,GAAAC,GACA,MAAAtH,MAAAuH,MAAAD,EAAAtB,QAAA,iBAAsC,KAQtC,QAAAwB,GAAAxK,EAAAyK,EAAAC,GA8BA,GA7BAD,KAAA,GAEAzK,IAEA,MAAAA,IAAAmC,OAAA,UAAAsI,EAAA,KACAzK,GAAA,KAOAyK,EAAAzK,EAAAyK,GAiBAC,EAAA,CACA,GAAAC,GAAAnD,EAAAkD,EACA,KAAAC,EACA,SAAArI,OAAA,mCAEA,IAAAqI,EAAA3C,KAAA,CAEA,GAAAkB,GAAAyB,EAAA3C,KAAAmB,YAAA,IACAD,IAAA,IACAyB,EAAA3C,KAAA2C,EAAA3C,KAAA4C,UAAA,EAAA1B,EAAA,IAGAuB,EAAA9H,EAAAsF,EAAA0C,GAAAF,GAGA,MAAArC,GAAAqC,GA3cA5M,EAAAqB,QAEA,IAAAyI,GAAA,iEACAmB,EAAA,eAeAjL,GAAA2J,WAsBA3J,EAAAoK,cAwDApK,EAAAuK,YA2DAvK,EAAA8E,OAEA9E,EAAA0K,WAAA,SAAAF,GACA,YAAAA,EAAAjC,OAAA,IAAAuB,EAAAkD,KAAAxC,IAyCAxK,EAAA+C,UAEA,IAAAkK,GAAA,WACA,GAAAC,GAAAhJ,OAAAC,OAAA,KACA,sBAAA+I,MAuBAlN,GAAAoE,YAAA6I,EAAAvB,EAAAtH,EASApE,EAAA6L,cAAAoB,EAAAvB,EAAAG,EAsEA7L,EAAA8L,6BAuCA9L,EAAAoM,sCAsDApM,EAAAoG,sCAUApG,EAAAwM,sBAqDAxM,EAAA2M,oBNqtBM,SAAU1M,EAAQD,EAASM,GO3qCjC,QAAAmB,KACArB,KAAA+M,UACA/M,KAAAgN,KAAAC,EAAA,GAAAC,KAAApJ,OAAAC,OAAA,MAZA,GAAA/C,GAAAd,EAAA,GACAmD,EAAAS,OAAAnC,UAAA6E,eACAyG,EAAA,mBAAAC,IAgBA7L,GAAA8L,UAAA,SAAAC,EAAAC,GAEA,OADAC,GAAA,GAAAjM,GACAyE,EAAA,EAAAC,EAAAqH,EAAAlJ,OAAsC4B,EAAAC,EAASD,IAC/CwH,EAAAhK,IAAA8J,EAAAtH,GAAAuH,EAEA,OAAAC,IASAjM,EAAAM,UAAA4L,KAAA,WACA,MAAAN,GAAAjN,KAAAgN,KAAAO,KAAAzJ,OAAA0J,oBAAAxN,KAAAgN,MAAA9I,QAQA7C,EAAAM,UAAA2B,IAAA,SAAAsE,EAAAyF,GACA,GAAAI,GAAAR,EAAArF,EAAA5G,EAAAgD,YAAA4D,GACA8F,EAAAT,EAAAjN,KAAAqD,IAAAuE,GAAAvE,EAAA9C,KAAAP,KAAAgN,KAAAS,GACAE,EAAA3N,KAAA+M,OAAA7I,MACAwJ,KAAAL,GACArN,KAAA+M,OAAAa,KAAAhG,GAEA8F,IACAT,EACAjN,KAAAgN,KAAAM,IAAA1F,EAAA+F,GAEA3N,KAAAgN,KAAAS,GAAAE,IAUAtM,EAAAM,UAAA0B,IAAA,SAAAuE,GACA,GAAAqF,EACA,MAAAjN,MAAAgN,KAAA3J,IAAAuE,EAEA,IAAA6F,GAAAzM,EAAAgD,YAAA4D,EACA,OAAAvE,GAAA9C,KAAAP,KAAAgN,KAAAS,IASApM,EAAAM,UAAAuE,QAAA,SAAA0B,GACA,GAAAqF,EAAA,CACA,GAAAU,GAAA3N,KAAAgN,KAAAa,IAAAjG,EACA,IAAA+F,GAAA,EACA,MAAAA,OAEG,CACH,GAAAF,GAAAzM,EAAAgD,YAAA4D,EACA,IAAAvE,EAAA9C,KAAAP,KAAAgN,KAAAS,GACA,MAAAzN,MAAAgN,KAAAS,GAIA,SAAApJ,OAAA,IAAAuD,EAAA,yBAQAvG,EAAAM,UAAAmM,GAAA,SAAAC,GACA,GAAAA,GAAA,GAAAA,EAAA/N,KAAA+M,OAAA7I,OACA,MAAAlE,MAAA+M,OAAAgB,EAEA,UAAA1J,OAAA,yBAAA0J,IAQA1M,EAAAM,UAAAkE,QAAA,WACA,MAAA7F,MAAA+M,OAAA5B,SAGAvL,EAAAyB,YPmsCM,SAAUxB,EAAQD,EAASM,GQ9yCjC,QAAA8N,GAAArC,EAAAC,GAEA,GAAAqC,GAAAtC,EAAApJ,cACA2L,EAAAtC,EAAArJ,cACA4L,EAAAxC,EAAAlJ,gBACA2L,EAAAxC,EAAAnJ,eACA,OAAAyL,GAAAD,GAAAC,GAAAD,GAAAG,GAAAD,GACAnN,EAAAgF,oCAAA2F,EAAAC,IAAA,EAQA,QAAApK,KACAxB,KAAA+M,UACA/M,KAAAqO,SAAA,EAEArO,KAAAsO,OAAgB/L,eAAA,EAAAE,gBAAA,GAzBhB,GAAAzB,GAAAd,EAAA,EAkCAsB,GAAAG,UAAA6C,gBACA,SAAA+J,EAAAC,GACAxO,KAAA+M,OAAA7J,QAAAqL,EAAAC,IAQAhN,EAAAG,UAAA2B,IAAA,SAAAmL,GACAT,EAAAhO,KAAAsO,MAAAG,IACAzO,KAAAsO,MAAAG,EACAzO,KAAA+M,OAAAa,KAAAa,KAEAzO,KAAAqO,SAAA,EACArO,KAAA+M,OAAAa,KAAAa,KAaAjN,EAAAG,UAAAkE,QAAA,WAKA,MAJA7F,MAAAqO,UACArO,KAAA+M,OAAA2B,KAAA1N,EAAAgF,qCACAhG,KAAAqO,SAAA,GAEArO,KAAA+M,QAGAnN,EAAA4B,eRk0CM,SAAU3B,EAAQD,EAASM,GSn4CjC,QAAAU,GAAA+N,EAAAC,GACA,GAAAC,GAAAF,CAKA,OAJA,gBAAAA,KACAE,EAAA7N,EAAAoL,oBAAAuC,IAGA,MAAAE,EAAAC,SACA,GAAAC,GAAAF,EAAAD,GACA,GAAAI,GAAAH,EAAAD,GA0QA,QAAAI,GAAAL,EAAAC,GACA,GAAAC,GAAAF,CACA,iBAAAA,KACAE,EAAA7N,EAAAoL,oBAAAuC,GAGA,IAAAjI,GAAA1F,EAAAC,OAAA4N,EAAA,WACA5L,EAAAjC,EAAAC,OAAA4N,EAAA,WAGAlI,EAAA3F,EAAAC,OAAA4N,EAAA,YACA9M,EAAAf,EAAAC,OAAA4N,EAAA,mBACAjI,EAAA5F,EAAAC,OAAA4N,EAAA,uBACAjJ,EAAA5E,EAAAC,OAAA4N,EAAA,YACA5M,EAAAjB,EAAAC,OAAA4N,EAAA,YAIA,IAAAnI,GAAA1G,KAAA4B,SACA,SAAAyC,OAAA,wBAAAqC,EAGA3E,KACAA,EAAAf,EAAAmJ,UAAApI,IAGAkB,IACAqD,IAAA3C,QAIA2C,IAAAtF,EAAAmJ,WAKA7D,IAAA,SAAA5D,GACA,MAAAX,IAAAf,EAAAsJ,WAAAvI,IAAAf,EAAAsJ,WAAA5H,GACA1B,EAAA2B,SAAAZ,EAAAW,GACAA,IAOA1C,KAAAsB,OAAAD,EAAA8L,UAAAxG,EAAAL,IAAA3C,SAAA,GACA3D,KAAAoB,SAAAC,EAAA8L,UAAAlK,GAAA,GAEAjD,KAAAiP,iBAAAjP,KAAAoB,SAAAyE,UAAAS,IAAA,SAAAiF,GACA,MAAAvK,GAAAuL,iBAAAxK,EAAAwJ,EAAAqD,KAGA5O,KAAA+B,aACA/B,KAAA4G,iBACA5G,KAAAuB,UAAAqE,EACA5F,KAAAkP,cAAAN,EACA5O,KAAAiC,OA4GA,QAAAkN,KACAnP,KAAAuC,cAAA,EACAvC,KAAAyC,gBAAA,EACAzC,KAAA0C,OAAA,KACA1C,KAAA6C,aAAA,KACA7C,KAAA8C,eAAA,KACA9C,KAAA+C,KAAA,KAkaA,QAAAgM,GAAAJ,EAAAC,GACA,GAAAC,GAAAF,CACA,iBAAAA,KACAE,EAAA7N,EAAAoL,oBAAAuC,GAGA,IAAAjI,GAAA1F,EAAAC,OAAA4N,EAAA,WACAC,EAAA9N,EAAAC,OAAA4N,EAAA,WAEA,IAAAnI,GAAA1G,KAAA4B,SACA,SAAAyC,OAAA,wBAAAqC,EAGA1G,MAAAoB,SAAA,GAAAC,GACArB,KAAAsB,OAAA,GAAAD,EAEA,IAAA+N,IACA9M,MAAA,EACAE,OAAA,EAEAxC,MAAAqP,UAAAP,EAAAxI,IAAA,SAAAiF,GACA,GAAAA,EAAArB,IAGA,SAAA7F,OAAA,qDAEA,IAAAiL,GAAAtO,EAAAC,OAAAsK,EAAA,UACAgE,EAAAvO,EAAAC,OAAAqO,EAAA,QACAE,EAAAxO,EAAAC,OAAAqO,EAAA,SAEA,IAAAC,EAAAH,EAAA9M,MACAiN,IAAAH,EAAA9M,MAAAkN,EAAAJ,EAAA5M,OACA,SAAA6B,OAAA,uDAIA,OAFA+K,GAAAE,GAGAG,iBAGAlN,cAAAgN,EAAA,EACA9M,gBAAA+M,EAAA,GAEAE,SAAA,GAAA9O,GAAAI,EAAAC,OAAAsK,EAAA,OAAAqD,MAh5BA,GAAA5N,GAAAd,EAAA,GACAyP,EAAAzP,EAAA,GACAmB,EAAAnB,EAAA,GAAAmB,SACAK,EAAAxB,EAAA,GACA0P,EAAA1P,EAAA,GAAA0P,SAaAhP,GAAAiB,cAAA,SAAA8M,EAAAC,GACA,MAAAI,GAAAnN,cAAA8M,EAAAC,IAMAhO,EAAAe,UAAAC,SAAA,EAgCAhB,EAAAe,UAAAkO,oBAAA,KACA/L,OAAAgM,eAAAlP,EAAAe,UAAA,sBACAoO,cAAA,EACAC,YAAA,EACAnC,IAAA,WAKA,MAJA7N,MAAA6P,qBACA7P,KAAAiQ,eAAAjQ,KAAAuB,UAAAvB,KAAA+B,YAGA/B,KAAA6P,uBAIAjP,EAAAe,UAAAuO,mBAAA,KACApM,OAAAgM,eAAAlP,EAAAe,UAAA,qBACAoO,cAAA,EACAC,YAAA,EACAnC,IAAA,WAKA,MAJA7N,MAAAkQ,oBACAlQ,KAAAiQ,eAAAjQ,KAAAuB,UAAAvB,KAAA+B,YAGA/B,KAAAkQ,sBAIAtP,EAAAe,UAAAwO,wBACA,SAAAvI,EAAAqD,GACA,GAAAxK,GAAAmH,EAAAO,OAAA8C,EACA,aAAAxK,GAAmB,MAAAA,GAQnBG,EAAAe,UAAAsO,eACA,SAAArI,EAAAvB,GACA,SAAAhC,OAAA,6CAGAzD,EAAAwP,gBAAA,EACAxP,EAAAyP,eAAA,EAEAzP,EAAA0P,qBAAA,EACA1P,EAAA2P,kBAAA,EAkBA3P,EAAAe,UAAAO,YACA,SAAAqM,EAAAiC,EAAAC,GACA,GAGA7K,GAHA8K,EAAAF,GAAA,KACAG,EAAAF,GAAA7P,EAAAwP,eAGA,QAAAO,GACA,IAAA/P,GAAAwP,gBACAxK,EAAA5F,KAAA4Q,kBACA,MACA,KAAAhQ,GAAAyP,eACAzK,EAAA5F,KAAA6Q,iBACA,MACA,SACA,SAAAxM,OAAA,+BAGA,GAAAtC,GAAA/B,KAAA+B,UACA6D,GAAAU,IAAA,SAAAnE,GACA,GAAAO,GAAA,OAAAP,EAAAO,OAAA,KAAA1C,KAAAoB,SAAA0M,GAAA3L,EAAAO,OAEA,OADAA,GAAA1B,EAAAuL,iBAAAxK,EAAAW,EAAA1C,KAAAkP,gBAEAxM,SACAH,cAAAJ,EAAAI,cACAE,gBAAAN,EAAAM,gBACAI,aAAAV,EAAAU,aACAC,eAAAX,EAAAW,eACAC,KAAA,OAAAZ,EAAAY,KAAA,KAAA/C,KAAAsB,OAAAwM,GAAA3L,EAAAY,QAEK/C,MAAAkD,QAAAqL,EAAAmC,IAyBL9P,EAAAe,UAAAmP,yBACA,SAAAhQ,GACA,GAAAwB,GAAAtB,EAAAC,OAAAH,EAAA,QAMAiQ,GACArO,OAAA1B,EAAAC,OAAAH,EAAA,UACA+B,aAAAP,EACAQ,eAAA9B,EAAAC,OAAAH,EAAA,YAIA,IADAiQ,EAAArO,OAAA1C,KAAAgR,iBAAAD,EAAArO,QACAqO,EAAArO,OAAA,EACA,QAGA,IAAAkD,MAEAqF,EAAAjL,KAAAiR,aAAAF,EACA/Q,KAAA6Q,kBACA,eACA,iBACA7P,EAAA0K,2BACAiE,EAAAY,kBACA,IAAAtF,GAAA,GACA,GAAA9I,GAAAnC,KAAA6Q,kBAAA5F,EAEA,IAAAiG,SAAApQ,EAAA0B,OAOA,IANA,GAAAK,GAAAV,EAAAU,aAMAV,KAAAU,kBACA+C,EAAAgI,MACAtL,KAAAtB,EAAAC,OAAAkB,EAAA,sBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,wBACAgP,WAAAnQ,EAAAC,OAAAkB,EAAA,8BAGAA,EAAAnC,KAAA6Q,oBAAA5F,OASA,KANA,GAAAnI,GAAAX,EAAAW,eAMAX,GACAA,EAAAU,eAAAP,GACAH,EAAAW,mBACA8C,EAAAgI,MACAtL,KAAAtB,EAAAC,OAAAkB,EAAA,sBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,wBACAgP,WAAAnQ,EAAAC,OAAAkB,EAAA,8BAGAA,EAAAnC,KAAA6Q,oBAAA5F,GAKA,MAAArF,IAGAhG,EAAAgB,oBAgGAoO,EAAArN,UAAAmC,OAAAC,OAAAnD,EAAAe,WACAqN,EAAArN,UAAA+N,SAAA9O,EAMAoO,EAAArN,UAAAqP,iBAAA,SAAAnM,GACA,GAAAuM,GAAAvM,CAKA,IAJA,MAAA7E,KAAA+B,aACAqP,EAAApQ,EAAA2B,SAAA3C,KAAA+B,WAAAqP,IAGApR,KAAAoB,SAAAiC,IAAA+N,GACA,MAAApR,MAAAoB,SAAA8E,QAAAkL,EAKA,IAAAtL,EACA,KAAAA,EAAA,EAAaA,EAAA9F,KAAAiP,iBAAA/K,SAAkC4B,EAC/C,GAAA9F,KAAAiP,iBAAAnJ,IAAAjB,EACA,MAAAiB,EAIA,WAYAkJ,EAAAnN,cACA,SAAA8M,EAAAC,GACA,GAAAyC,GAAAvN,OAAAC,OAAAiL,EAAArN,WAEAgF,EAAA0K,EAAA/P,OAAAD,EAAA8L,UAAAwB,EAAArN,OAAAuE,WAAA,GACA5C,EAAAoO,EAAAjQ,SAAAC,EAAA8L,UAAAwB,EAAAvN,SAAAyE,WAAA,EACAwL,GAAAtP,WAAA4M,EAAAzN,YACAmQ,EAAAzK,eAAA+H,EAAAxI,wBAAAkL,EAAAjQ,SAAAyE,UACAwL,EAAAtP,YACAsP,EAAApP,KAAA0M,EAAA5N,MACAsQ,EAAAnC,cAAAN,EACAyC,EAAApC,iBAAAoC,EAAAjQ,SAAAyE,UAAAS,IAAA,SAAAiF,GACA,MAAAvK,GAAAuL,iBAAA8E,EAAAtP,WAAAwJ,EAAAqD,IAYA,QAJA0C,GAAA3C,EAAApN,UAAAsE,UAAAsF,QACAoG,EAAAF,EAAAxB,uBACA2B,EAAAH,EAAAnB,sBAEApK,EAAA,EAAA5B,EAAAoN,EAAApN,OAAsD4B,EAAA5B,EAAY4B,IAAA,CAClE,GAAA2L,GAAAH,EAAAxL,GACA4L,EAAA,GAAAvC,EACAuC,GAAAnP,cAAAkP,EAAAlP,cACAmP,EAAAjP,gBAAAgP,EAAAhP,gBAEAgP,EAAA/O,SACAgP,EAAAhP,OAAAO,EAAAiD,QAAAuL,EAAA/O,QACAgP,EAAA7O,aAAA4O,EAAA5O,aACA6O,EAAA5O,eAAA2O,EAAA3O,eAEA2O,EAAA1O,OACA2O,EAAA3O,KAAA4D,EAAAT,QAAAuL,EAAA1O,OAGAyO,EAAA5D,KAAA8D,IAGAH,EAAA3D,KAAA8D,GAKA,MAFA9B,GAAAyB,EAAAnB,mBAAAlP,EAAA0K,4BAEA2F,GAMArC,EAAArN,UAAAC,SAAA,EAKAkC,OAAAgM,eAAAd,EAAArN,UAAA,WACAkM,IAAA,WACA,MAAA7N,MAAAiP,iBAAA9D,WAqBA6D,EAAArN,UAAAsO,eACA,SAAArI,EAAAvB,GAeA,IAdA,GAYAlE,GAAAkK,EAAAsF,EAAAC,EAAAxJ,EAZA7F,EAAA,EACA8C,EAAA,EACAG,EAAA,EACAD,EAAA,EACAG,EAAA,EACAD,EAAA,EACAvB,EAAA0D,EAAA1D,OACA+G,EAAA,EACA4G,KACAC,KACAC,KACAT,KAGArG,EAAA/G,GACA,SAAA0D,EAAAO,OAAA8C,GACA1I,IACA0I,IACA5F,EAAA,MAEA,UAAAuC,EAAAO,OAAA8C,GACAA,QAEA,CASA,IARA9I,EAAA,GAAAgN,GACAhN,EAAAI,gBAOAqP,EAAA3G,EAAyB2G,EAAA1N,IACzBlE,KAAAmQ,wBAAAvI,EAAAgK,GADuCA,KAQvC,GAHAvF,EAAAzE,EAAAuD,MAAAF,EAAA2G,GAEAD,EAAAE,EAAAxF,GAEApB,GAAAoB,EAAAnI,WACS,CAET,IADAyN,KACA1G,EAAA2G,GACAlQ,EAAAiG,OAAAC,EAAAqD,EAAA6G,GACA1J,EAAA0J,EAAA1J,MACA6C,EAAA6G,EAAAzJ,KACAsJ,EAAA/D,KAAAxF,EAGA,QAAAuJ,EAAAzN,OACA,SAAAG,OAAA,yCAGA,QAAAsN,EAAAzN,OACA,SAAAG,OAAA,yCAGAwN,GAAAxF,GAAAsF,EAIAxP,EAAAM,gBAAA4C,EAAAsM,EAAA,GACAtM,EAAAlD,EAAAM,gBAEAkP,EAAAzN,OAAA,IAEA/B,EAAAO,OAAAgD,EAAAiM,EAAA,GACAjM,GAAAiM,EAAA,GAGAxP,EAAAU,aAAA2C,EAAAmM,EAAA,GACAnM,EAAArD,EAAAU,aAEAV,EAAAU,cAAA,EAGAV,EAAAW,eAAAyC,EAAAoM,EAAA,GACApM,EAAApD,EAAAW,eAEA6O,EAAAzN,OAAA,IAEA/B,EAAAY,KAAA0C,EAAAkM,EAAA,GACAlM,GAAAkM,EAAA,KAIAL,EAAA1D,KAAAzL,GACA,gBAAAA,GAAAU,cACAkP,EAAAnE,KAAAzL,GAKAyN,EAAA0B,EAAAtQ,EAAAgL,qCACAhM,KAAA6P,oBAAAyB,EAEA1B,EAAAmC,EAAA/Q,EAAA0K,4BACA1L,KAAAkQ,mBAAA6B,GAOA/C,EAAArN,UAAAsP,aACA,SAAAe,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,GAMA,GAAAL,EAAAE,IAAA,EACA,SAAAzJ,WAAA,gDACAuJ,EAAAE,GAEA,IAAAF,EAAAG,GAAA,EACA,SAAA1J,WAAA,kDACAuJ,EAAAG,GAGA,OAAAxC,GAAA2C,OAAAN,EAAAC,EAAAG,EAAAC,IAOArD,EAAArN,UAAA4Q,mBACA,WACA,OAAAtH,GAAA,EAAuBA,EAAAjL,KAAA4Q,mBAAA1M,SAAwC+G,EAAA,CAC/D,GAAA9I,GAAAnC,KAAA4Q,mBAAA3F,EAMA,IAAAA,EAAA,EAAAjL,KAAA4Q,mBAAA1M,OAAA,CACA,GAAAsO,GAAAxS,KAAA4Q,mBAAA3F,EAAA,EAEA,IAAA9I,EAAAI,gBAAAiQ,EAAAjQ,cAAA,CACAJ,EAAAsQ,oBAAAD,EAAA/P,gBAAA,CACA,WAKAN,EAAAsQ,oBAAAC,MA4BA1D,EAAArN,UAAA8C,oBACA,SAAA3D,GACA,GAAAiQ,IACAxO,cAAAvB,EAAAC,OAAAH,EAAA,QACA2B,gBAAAzB,EAAAC,OAAAH,EAAA,WAGAmK,EAAAjL,KAAAiR,aACAF,EACA/Q,KAAA4Q,mBACA,gBACA,kBACA5P,EAAAgL,oCACAhL,EAAAC,OAAAH,EAAA,OAAAF,EAAA0P,sBAGA,IAAArF,GAAA,GACA,GAAA9I,GAAAnC,KAAA4Q,mBAAA3F,EAEA,IAAA9I,EAAAI,gBAAAwO,EAAAxO,cAAA,CACA,GAAAG,GAAA1B,EAAAC,OAAAkB,EAAA,cACA,QAAAO,IACAA,EAAA1C,KAAAoB,SAAA0M,GAAApL,GACAA,EAAA1B,EAAAuL,iBAAAvM,KAAA+B,WAAAW,EAAA1C,KAAAkP,eAEA,IAAAnM,GAAA/B,EAAAC,OAAAkB,EAAA,YAIA,OAHA,QAAAY,IACAA,EAAA/C,KAAAsB,OAAAwM,GAAA/K,KAGAL,SACAJ,KAAAtB,EAAAC,OAAAkB,EAAA,qBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,uBACAY,SAKA,OACAL,OAAA,KACAJ,KAAA,KACAE,OAAA,KACAO,KAAA,OAQAiM,EAAArN,UAAAgR,wBACA,WACA,QAAA3S,KAAA4G,iBAGA5G,KAAA4G,eAAA1C,QAAAlE,KAAAoB,SAAAmM,SACAvN,KAAA4G,eAAAgM,KAAA,SAAAC,GAA+C,aAAAA,MAQ/C7D,EAAArN,UAAA6B,iBACA,SAAAqB,EAAAiO,GACA,IAAA9S,KAAA4G,eACA,WAGA,IAAAqE,GAAAjL,KAAAgR,iBAAAnM,EACA,IAAAoG,GAAA,EACA,MAAAjL,MAAA4G,eAAAqE,EAGA,IAAAmG,GAAAvM,CACA,OAAA7E,KAAA+B,aACAqP,EAAApQ,EAAA2B,SAAA3C,KAAA+B,WAAAqP,GAGA,IAAAlH,EACA,UAAAlK,KAAA+B,aACAmI,EAAAlJ,EAAAuI,SAAAvJ,KAAA+B,aAAA,CAKA,GAAAgR,GAAA3B,EAAArG,QAAA,gBACA,YAAAb,EAAAP,QACA3J,KAAAoB,SAAAiC,IAAA0P,GACA,MAAA/S,MAAA4G,eAAA5G,KAAAoB,SAAA8E,QAAA6M,GAGA,MAAA7I,EAAAH,MAAA,KAAAG,EAAAH,OACA/J,KAAAoB,SAAAiC,IAAA,IAAA+N,GACA,MAAApR,MAAA4G,eAAA5G,KAAAoB,SAAA8E,QAAA,IAAAkL,IAQA,GAAA0B,EACA,WAGA,UAAAzO,OAAA,IAAA+M,EAAA,+BA2BApC,EAAArN,UAAAqR,qBACA,SAAAlS,GACA,GAAA4B,GAAA1B,EAAAC,OAAAH,EAAA,SAEA,IADA4B,EAAA1C,KAAAgR,iBAAAtO,GACAA,EAAA,EACA,OACAJ,KAAA,KACAE,OAAA,KACA2O,WAAA,KAIA,IAAAJ,IACArO,SACAG,aAAA7B,EAAAC,OAAAH,EAAA,QACAgC,eAAA9B,EAAAC,OAAAH,EAAA,WAGAmK,EAAAjL,KAAAiR,aACAF,EACA/Q,KAAA6Q,kBACA,eACA,iBACA7P,EAAA0K,2BACA1K,EAAAC,OAAAH,EAAA,OAAAF,EAAA0P,sBAGA,IAAArF,GAAA,GACA,GAAA9I,GAAAnC,KAAA6Q,kBAAA5F,EAEA,IAAA9I,EAAAO,SAAAqO,EAAArO,OACA,OACAJ,KAAAtB,EAAAC,OAAAkB,EAAA,sBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,wBACAgP,WAAAnQ,EAAAC,OAAAkB,EAAA,6BAKA,OACAG,KAAA,KACAE,OAAA,KACA2O,WAAA,OAIAvR,EAAAoP,yBAmGAD,EAAApN,UAAAmC,OAAAC,OAAAnD,EAAAe,WACAoN,EAAApN,UAAAsR,YAAArS,EAKAmO,EAAApN,UAAAC,SAAA,EAKAkC,OAAAgM,eAAAf,EAAApN,UAAA,WACAkM,IAAA,WAEA,OADA5K,MACA6C,EAAA,EAAmBA,EAAA9F,KAAAqP,UAAAnL,OAA2B4B,IAC9C,OAAAoN,GAAA,EAAqBA,EAAAlT,KAAAqP,UAAAvJ,GAAA4J,SAAAzM,QAAAiB,OAA+CgP,IACpEjQ,EAAA2K,KAAA5N,KAAAqP,UAAAvJ,GAAA4J,SAAAzM,QAAAiQ,GAGA,OAAAjQ,MAuBA8L,EAAApN,UAAA8C,oBACA,SAAA3D,GACA,GAAAiQ,IACAxO,cAAAvB,EAAAC,OAAAH,EAAA,QACA2B,gBAAAzB,EAAAC,OAAAH,EAAA,WAKAqS,EAAAxD,EAAA2C,OAAAvB,EAAA/Q,KAAAqP,UACA,SAAA0B,EAAAqC,GACA,GAAAtH,GAAAiF,EAAAxO,cAAA6Q,EAAA3D,gBAAAlN,aACA,OAAAuJ,GACAA,EAGAiF,EAAAtO,gBACA2Q,EAAA3D,gBAAAhN,kBAEA2Q,EAAApT,KAAAqP,UAAA8D,EAEA,OAAAC,GASAA,EAAA1D,SAAAjL,qBACAnC,KAAAyO,EAAAxO,eACA6Q,EAAA3D,gBAAAlN,cAAA,GACAC,OAAAuO,EAAAtO,iBACA2Q,EAAA3D,gBAAAlN,gBAAAwO,EAAAxO,cACA6Q,EAAA3D,gBAAAhN,gBAAA,EACA,GACA4Q,KAAAvS,EAAAuS,QAdA3Q,OAAA,KACAJ,KAAA,KACAE,OAAA,KACAO,KAAA,OAmBAgM,EAAApN,UAAAgR,wBACA,WACA,MAAA3S,MAAAqP,UAAAiE,MAAA,SAAA/H,GACA,MAAAA,GAAAmE,SAAAiD,6BASA5D,EAAApN,UAAA6B,iBACA,SAAAqB,EAAAiO,GACA,OAAAhN,GAAA,EAAmBA,EAAA9F,KAAAqP,UAAAnL,OAA2B4B,IAAA,CAC9C,GAAAsN,GAAApT,KAAAqP,UAAAvJ,GAEAvC,EAAA6P,EAAA1D,SAAAlM,iBAAAqB,GAAA,EACA,IAAAtB,EACA,MAAAA,GAGA,GAAAuP,EACA,WAGA,UAAAzO,OAAA,IAAAQ,EAAA,+BAsBAkK,EAAApN,UAAAqR,qBACA,SAAAlS,GACA,OAAAgF,GAAA,EAAmBA,EAAA9F,KAAAqP,UAAAnL,OAA2B4B,IAAA,CAC9C,GAAAsN,GAAApT,KAAAqP,UAAAvJ,EAIA,IAAAsN,EAAA1D,SAAAsB,iBAAAhQ,EAAAC,OAAAH,EAAA,iBAGA,GAAAyS,GAAAH,EAAA1D,SAAAsD,qBAAAlS,EACA,IAAAyS,EAAA,CACA,GAAAC,IACAlR,KAAAiR,EAAAjR,MACA8Q,EAAA3D,gBAAAlN,cAAA,GACAC,OAAA+Q,EAAA/Q,QACA4Q,EAAA3D,gBAAAlN,gBAAAgR,EAAAjR,KACA8Q,EAAA3D,gBAAAhN,gBAAA,EACA,GAEA,OAAA+Q,KAIA,OACAlR,KAAA,KACAE,OAAA,OASAuM,EAAApN,UAAAsO,eACA,SAAArI,EAAAvB,GACArG,KAAA6P,uBACA7P,KAAAkQ,qBACA,QAAApK,GAAA,EAAmBA,EAAA9F,KAAAqP,UAAAnL,OAA2B4B,IAG9C,OAFAsN,GAAApT,KAAAqP,UAAAvJ,GACA2N,EAAAL,EAAA1D,SAAAkB,mBACAsC,EAAA,EAAqBA,EAAAO,EAAAvP,OAA4BgP,IAAA,CACjD,GAAA/Q,GAAAsR,EAAAP,GAEAxQ,EAAA0Q,EAAA1D,SAAAtO,SAAA0M,GAAA3L,EAAAO,OACAA,GAAA1B,EAAAuL,iBAAA6G,EAAA1D,SAAA3N,WAAAW,EAAA1C,KAAAkP,eACAlP,KAAAoB,SAAAkC,IAAAZ,GACAA,EAAA1C,KAAAoB,SAAA8E,QAAAxD,EAEA,IAAAK,GAAA,IACAZ,GAAAY,OACAA,EAAAqQ,EAAA1D,SAAApO,OAAAwM,GAAA3L,EAAAY,MACA/C,KAAAsB,OAAAgC,IAAAP,GACAA,EAAA/C,KAAAsB,OAAA4E,QAAAnD,GAOA,IAAA2Q,IACAhR,SACAH,cAAAJ,EAAAI,eACA6Q,EAAA3D,gBAAAlN,cAAA,GACAE,gBAAAN,EAAAM,iBACA2Q,EAAA3D,gBAAAlN,gBAAAJ,EAAAI,cACA6Q,EAAA3D,gBAAAhN,gBAAA,EACA,GACAI,aAAAV,EAAAU,aACAC,eAAAX,EAAAW,eACAC,OAGA/C,MAAA6P,oBAAAjC,KAAA8F,GACA,gBAAAA,GAAA7Q,cACA7C,KAAAkQ,mBAAAtC,KAAA8F,GAKA9D,EAAA5P,KAAA6P,oBAAA7O,EAAAgL,qCACA4D,EAAA5P,KAAAkQ,mBAAAlP,EAAA0K,6BAGA9L,EAAAmP,4BTu5CM,SAAUlP,EAAQD,GUx/ExB,QAAA+T,GAAAC,EAAAC,EAAA7B,EAAA8B,EAAAC,EAAA1B,GAUA,GAAA2B,GAAAC,KAAAC,OAAAL,EAAAD,GAAA,GAAAA,EACA9H,EAAAiI,EAAA/B,EAAA8B,EAAAE,IAAA,EACA,YAAAlI,EAEAkI,EAEAlI,EAAA,EAEA+H,EAAAG,EAAA,EAEAL,EAAAK,EAAAH,EAAA7B,EAAA8B,EAAAC,EAAA1B,GAKAA,GAAAzS,EAAA2Q,kBACAsD,EAAAC,EAAA5P,OAAA2P,GAAA,EAEAG,EAKAA,EAAAJ,EAAA,EAEAD,EAAAC,EAAAI,EAAAhC,EAAA8B,EAAAC,EAAA1B,GAIAA,GAAAzS,EAAA2Q,kBACAyD,EAEAJ,EAAA,KAAAA,EA1DAhU,EAAA0Q,qBAAA,EACA1Q,EAAA2Q,kBAAA,EAgFA3Q,EAAA0S,OAAA,SAAAN,EAAA8B,EAAAC,EAAA1B,GACA,OAAAyB,EAAA5P,OACA,QAGA,IAAA+G,GAAA0I,GAAA,EAAAG,EAAA5P,OAAA8N,EAAA8B,EACAC,EAAA1B,GAAAzS,EAAA0Q,qBACA,IAAArF,EAAA,EACA,QAMA,MAAAA,EAAA,MACA,IAAA8I,EAAAD,EAAA7I,GAAA6I,EAAA7I,EAAA,UAGAA,CAGA,OAAAA,KVuhFM,SAAUpL,EAAQD,GWzmFxB,QAAAuU,GAAAC,EAAAC,EAAAC,GACA,GAAAxC,GAAAsC,EAAAC,EACAD,GAAAC,GAAAD,EAAAE,GACAF,EAAAE,GAAAxC,EAWA,QAAAyC,GAAAC,EAAAC,GACA,MAAAR,MAAAS,MAAAF,EAAAP,KAAAU,UAAAF,EAAAD,IAeA,QAAAI,GAAAR,EAAAS,EAAAnU,EAAAoU,GAKA,GAAApU,EAAAoU,EAAA,CAYA,GAAAC,GAAAR,EAAA7T,EAAAoU,GACAhP,EAAApF,EAAA,CAEAyT,GAAAC,EAAAW,EAAAD,EASA,QARAE,GAAAZ,EAAAU,GAQA5B,EAAAxS,EAAmBwS,EAAA4B,EAAO5B,IAC1B2B,EAAAT,EAAAlB,GAAA8B,IAAA,IACAlP,GAAA,EACAqO,EAAAC,EAAAtO,EAAAoN,GAIAiB,GAAAC,EAAAtO,EAAA,EAAAoN,EACA,IAAA+B,GAAAnP,EAAA,CAIA8O,GAAAR,EAAAS,EAAAnU,EAAAuU,EAAA,GACAL,EAAAR,EAAAS,EAAAI,EAAA,EAAAH,IAYAlV,EAAAgQ,UAAA,SAAAwE,EAAAS,GACAD,EAAAR,EAAAS,EAAA,EAAAT,EAAAlQ,OAAA,KX4oFM,SAAUrE,EAAQD,EAASM,GY1tFjC,QAAAW,GAAAqU,EAAAC,EAAAtQ,EAAAuQ,EAAAtQ,GACA9E,KAAAqV,YACArV,KAAAsV,kBACAtV,KAAAsC,KAAA,MAAA4S,EAAA,KAAAA,EACAlV,KAAAwC,OAAA,MAAA2S,EAAA,KAAAA,EACAnV,KAAA0C,OAAA,MAAAmC,EAAA,KAAAA,EACA7E,KAAA+C,KAAA,MAAA+B,EAAA,KAAAA,EACA9E,KAAAuV,IAAA,EACA,MAAAH,GAAApV,KAAAsD,IAAA8R,GAnCA,GAAAzU,GAAAT,EAAA,GAAAS,mBACAK,EAAAd,EAAA,GAIAsV,EAAA,UAGAC,EAAA,GAKAF,EAAA,oBAiCA1U,GAAA6U,wBACA,SAAAC,EAAA7T,EAAA8T,GA+FA,QAAAC,GAAA1T,EAAA2T,GACA,UAAA3T,GAAA+O,SAAA/O,EAAAO,OACAqT,EAAAzS,IAAAwS,OACO,CACP,GAAApT,GAAAkT,EACA5U,EAAA0D,KAAAkR,EAAAzT,EAAAO,QACAP,EAAAO,MACAqT,GAAAzS,IAAA,GAAAzC,GAAAsB,EAAAU,aACAV,EAAAW,eACAJ,EACAoT,EACA3T,EAAAY,QAvGA,GAAAgT,GAAA,GAAAlV,GAMAmV,EAAAL,EAAApN,MAAAiN,GACAS,EAAA,EACAC,EAAA,WAMA,QAAAC,KACA,MAAAF,GAAAD,EAAA9R,OACA8R,EAAAC,KAAA/E,OAPA,GAAAkF,GAAAD,IAEAE,EAAAF,KAAA,EACA,OAAAC,GAAAC,GASAC,EAAA,EAAA7D,EAAA,EAKA8D,EAAA,IAgEA,OA9DAzU,GAAAI,YAAA,SAAAC,GACA,UAAAoU,EAAA,CAGA,KAAAD,EAAAnU,EAAAI,eAMS,CAIT,GAAAiU,GAAAR,EAAAC,IAAA,GACAH,EAAAU,EAAAnL,OAAA,EAAAlJ,EAAAM,gBACAgQ,EAOA,OANAuD,GAAAC,GAAAO,EAAAnL,OAAAlJ,EAAAM,gBACAgQ,GACAA,EAAAtQ,EAAAM,gBACAoT,EAAAU,EAAAT,QAEAS,EAAApU,GAhBA0T,EAAAU,EAAAL,KACAI,IACA7D,EAAA,EAqBA,KAAA6D,EAAAnU,EAAAI,eACAwT,EAAAzS,IAAA4S,KACAI,GAEA,IAAA7D,EAAAtQ,EAAAM,gBAAA,CACA,GAAA+T,GAAAR,EAAAC,IAAA,EACAF,GAAAzS,IAAAkT,EAAAnL,OAAA,EAAAlJ,EAAAM,kBACAuT,EAAAC,GAAAO,EAAAnL,OAAAlJ,EAAAM,iBACAgQ,EAAAtQ,EAAAM,gBAEA8T,EAAApU,GACKnC,MAELiW,EAAAD,EAAA9R,SACAqS,GAEAV,EAAAU,EAAAL,KAGAH,EAAAzS,IAAA0S,EAAAvL,OAAAwL,GAAAvR,KAAA,MAIA5C,EAAAmB,QAAAC,QAAA,SAAAC,GACA,GAAAI,GAAAzB,EAAA0B,iBAAAL,EACA,OAAAI,IACA,MAAAqS,IACAzS,EAAAnC,EAAA0D,KAAAkR,EAAAzS,IAEA4S,EAAAtS,iBAAAN,EAAAI,MAIAwS,GAwBAlV,EAAAc,UAAA2B,IAAA,SAAAmT,GACA,GAAArL,MAAAsL,QAAAD,GACAA,EAAAvT,QAAA,SAAAyT,GACA3W,KAAAsD,IAAAqT,IACK3W,UAEL,KAAAyW,EAAAlB,IAAA,gBAAAkB,GAMA,SAAAhO,WACA,8EAAAgO,EANAA,IACAzW,KAAAqV,SAAAzH,KAAA6I,GAQA,MAAAzW,OASAa,EAAAc,UAAAiV,QAAA,SAAAH,GACA,GAAArL,MAAAsL,QAAAD,GACA,OAAA3Q,GAAA2Q,EAAAvS,OAAA,EAAiC4B,GAAA,EAAQA,IACzC9F,KAAA4W,QAAAH,EAAA3Q,QAGA,KAAA2Q,EAAAlB,IAAA,gBAAAkB,GAIA,SAAAhO,WACA,8EAAAgO,EAJAzW,MAAAqV,SAAAwB,QAAAJ,GAOA,MAAAzW,OAUAa,EAAAc,UAAAmV,KAAA,SAAAC,GAEA,OADAJ,GACA7Q,EAAA,EAAAC,EAAA/F,KAAAqV,SAAAnR,OAA6C4B,EAAAC,EAASD,IACtD6Q,EAAA3W,KAAAqV,SAAAvP,GACA6Q,EAAApB,GACAoB,EAAAG,KAAAC,GAGA,KAAAJ,GACAI,EAAAJ,GAAoBjU,OAAA1C,KAAA0C,OACpBJ,KAAAtC,KAAAsC,KACAE,OAAAxC,KAAAwC,OACAO,KAAA/C,KAAA+C,QAYAlC,EAAAc,UAAA+C,KAAA,SAAAsS,GACA,GAAAC,GACAnR,EACAC,EAAA/F,KAAAqV,SAAAnR,MACA,IAAA6B,EAAA,GAEA,IADAkR,KACAnR,EAAA,EAAeA,EAAAC,EAAA,EAAWD,IAC1BmR,EAAArJ,KAAA5N,KAAAqV,SAAAvP,IACAmR,EAAArJ,KAAAoJ,EAEAC,GAAArJ,KAAA5N,KAAAqV,SAAAvP,IACA9F,KAAAqV,SAAA4B,EAEA,MAAAjX,OAUAa,EAAAc,UAAAuV,aAAA,SAAAC,EAAAC,GACA,GAAAC,GAAArX,KAAAqV,SAAArV,KAAAqV,SAAAnR,OAAA,EAUA,OATAmT,GAAA9B,GACA8B,EAAAH,aAAAC,EAAAC,GAEA,gBAAAC,GACArX,KAAAqV,SAAArV,KAAAqV,SAAAnR,OAAA,GAAAmT,EAAAtM,QAAAoM,EAAAC,GAGApX,KAAAqV,SAAAzH,KAAA,GAAA7C,QAAAoM,EAAAC,IAEApX,MAUAa,EAAAc,UAAA8B,iBACA,SAAAG,EAAAC,GACA7D,KAAAsV,eAAAtU,EAAAgD,YAAAJ,IAAAC,GASAhD,EAAAc,UAAA2V,mBACA,SAAAP,GACA,OAAAjR,GAAA,EAAAC,EAAA/F,KAAAqV,SAAAnR,OAA+C4B,EAAAC,EAASD,IACxD9F,KAAAqV,SAAAvP,GAAAyP,IACAvV,KAAAqV,SAAAvP,GAAAwR,mBAAAP,EAKA,QADA9T,GAAAa,OAAAG,KAAAjE,KAAAsV,gBACAxP,EAAA,EAAAC,EAAA9C,EAAAiB,OAAyC4B,EAAAC,EAASD,IAClDiR,EAAA/V,EAAAyK,cAAAxI,EAAA6C,IAAA9F,KAAAsV,eAAArS,EAAA6C,MAQAjF,EAAAc,UAAAkF,SAAA,WACA,GAAAwF,GAAA,EAIA,OAHArM,MAAA8W,KAAA,SAAAH,GACAtK,GAAAsK,IAEAtK,GAOAxL,EAAAc,UAAA4V,sBAAA,SAAAzW,GACA,GAAAuB,IACAyT,KAAA,GACAxT,KAAA,EACAE,OAAA,GAEA8D,EAAA,GAAA3F,GAAAG,GACA0W,GAAA,EACAC,EAAA,KACAC,EAAA,KACAC,EAAA,KACAC,EAAA,IAqEA,OApEA5X,MAAA8W,KAAA,SAAAH,EAAA/T,GACAP,EAAAyT,MAAAa,EACA,OAAA/T,EAAAF,QACA,OAAAE,EAAAN,MACA,OAAAM,EAAAJ,QACAiV,IAAA7U,EAAAF,QACAgV,IAAA9U,EAAAN,MACAqV,IAAA/U,EAAAJ,QACAoV,IAAAhV,EAAAG,MACAuD,EAAAtD,YACAN,OAAAE,EAAAF,OACAE,UACAN,KAAAM,EAAAN,KACAE,OAAAI,EAAAJ,QAEAH,WACAC,KAAAD,EAAAC,KACAE,OAAAH,EAAAG,QAEAO,KAAAH,EAAAG,OAGA0U,EAAA7U,EAAAF,OACAgV,EAAA9U,EAAAN,KACAqV,EAAA/U,EAAAJ,OACAoV,EAAAhV,EAAAG,KACAyU,GAAA,GACKA,IACLlR,EAAAtD,YACAX,WACAC,KAAAD,EAAAC,KACAE,OAAAH,EAAAG,UAGAiV,EAAA,KACAD,GAAA,EAEA,QAAA7J,GAAA,EAAAzJ,EAAAyS,EAAAzS,OAA4CyJ,EAAAzJ,EAAcyJ,IAC1DgJ,EAAAzO,WAAAyF,KAAA8H,GACApT,EAAAC,OACAD,EAAAG,OAAA,EAEAmL,EAAA,IAAAzJ,GACAuT,EAAA,KACAD,GAAA,GACSA,GACTlR,EAAAtD,YACAN,OAAAE,EAAAF,OACAE,UACAN,KAAAM,EAAAN,KACAE,OAAAI,EAAAJ,QAEAH,WACAC,KAAAD,EAAAC,KACAE,OAAAH,EAAAG,QAEAO,KAAAH,EAAAG,QAIAV,EAAAG,WAIAxC,KAAAsX,mBAAA,SAAAnU,EAAA0U,GACAvR,EAAA7C,iBAAAN,EAAA0U,MAGU/B,KAAAzT,EAAAyT,KAAAxP,QAGV1G,EAAAiB","file":"source-map.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMap\"] = factory();\n\telse\n\t\troot[\"sourceMap\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMap\"] = factory();\n\telse\n\t\troot[\"sourceMap\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t * Copyright 2009-2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE.txt or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\texports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\texports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;\n\texports.SourceNode = __webpack_require__(10).SourceNode;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar base64VLQ = __webpack_require__(2);\n\tvar util = __webpack_require__(4);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar MappingList = __webpack_require__(6).MappingList;\n\t\n\t/**\n\t * An instance of the SourceMapGenerator represents a source map which is\n\t * being built incrementally. You may pass an object with the following\n\t * properties:\n\t *\n\t *   - file: The filename of the generated source.\n\t *   - sourceRoot: A root for all relative URLs in this source map.\n\t */\n\tfunction SourceMapGenerator(aArgs) {\n\t  if (!aArgs) {\n\t    aArgs = {};\n\t  }\n\t  this._file = util.getArg(aArgs, 'file', null);\n\t  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n\t  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n\t  this._sources = new ArraySet();\n\t  this._names = new ArraySet();\n\t  this._mappings = new MappingList();\n\t  this._sourcesContents = null;\n\t}\n\t\n\tSourceMapGenerator.prototype._version = 3;\n\t\n\t/**\n\t * Creates a new SourceMapGenerator based on a SourceMapConsumer\n\t *\n\t * @param aSourceMapConsumer The SourceMap.\n\t */\n\tSourceMapGenerator.fromSourceMap =\n\t  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n\t    var sourceRoot = aSourceMapConsumer.sourceRoot;\n\t    var generator = new SourceMapGenerator({\n\t      file: aSourceMapConsumer.file,\n\t      sourceRoot: sourceRoot\n\t    });\n\t    aSourceMapConsumer.eachMapping(function (mapping) {\n\t      var newMapping = {\n\t        generated: {\n\t          line: mapping.generatedLine,\n\t          column: mapping.generatedColumn\n\t        }\n\t      };\n\t\n\t      if (mapping.source != null) {\n\t        newMapping.source = mapping.source;\n\t        if (sourceRoot != null) {\n\t          newMapping.source = util.relative(sourceRoot, newMapping.source);\n\t        }\n\t\n\t        newMapping.original = {\n\t          line: mapping.originalLine,\n\t          column: mapping.originalColumn\n\t        };\n\t\n\t        if (mapping.name != null) {\n\t          newMapping.name = mapping.name;\n\t        }\n\t      }\n\t\n\t      generator.addMapping(newMapping);\n\t    });\n\t    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t      var sourceRelative = sourceFile;\n\t      if (sourceRoot !== null) {\n\t        sourceRelative = util.relative(sourceRoot, sourceFile);\n\t      }\n\t\n\t      if (!generator._sources.has(sourceRelative)) {\n\t        generator._sources.add(sourceRelative);\n\t      }\n\t\n\t      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t      if (content != null) {\n\t        generator.setSourceContent(sourceFile, content);\n\t      }\n\t    });\n\t    return generator;\n\t  };\n\t\n\t/**\n\t * Add a single mapping from original source line and column to the generated\n\t * source's line and column for this source map being created. The mapping\n\t * object should have the following properties:\n\t *\n\t *   - generated: An object with the generated line and column positions.\n\t *   - original: An object with the original line and column positions.\n\t *   - source: The original source file (relative to the sourceRoot).\n\t *   - name: An optional original token name for this mapping.\n\t */\n\tSourceMapGenerator.prototype.addMapping =\n\t  function SourceMapGenerator_addMapping(aArgs) {\n\t    var generated = util.getArg(aArgs, 'generated');\n\t    var original = util.getArg(aArgs, 'original', null);\n\t    var source = util.getArg(aArgs, 'source', null);\n\t    var name = util.getArg(aArgs, 'name', null);\n\t\n\t    if (!this._skipValidation) {\n\t      this._validateMapping(generated, original, source, name);\n\t    }\n\t\n\t    if (source != null) {\n\t      source = String(source);\n\t      if (!this._sources.has(source)) {\n\t        this._sources.add(source);\n\t      }\n\t    }\n\t\n\t    if (name != null) {\n\t      name = String(name);\n\t      if (!this._names.has(name)) {\n\t        this._names.add(name);\n\t      }\n\t    }\n\t\n\t    this._mappings.add({\n\t      generatedLine: generated.line,\n\t      generatedColumn: generated.column,\n\t      originalLine: original != null && original.line,\n\t      originalColumn: original != null && original.column,\n\t      source: source,\n\t      name: name\n\t    });\n\t  };\n\t\n\t/**\n\t * Set the source content for a source file.\n\t */\n\tSourceMapGenerator.prototype.setSourceContent =\n\t  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n\t    var source = aSourceFile;\n\t    if (this._sourceRoot != null) {\n\t      source = util.relative(this._sourceRoot, source);\n\t    }\n\t\n\t    if (aSourceContent != null) {\n\t      // Add the source content to the _sourcesContents map.\n\t      // Create a new _sourcesContents map if the property is null.\n\t      if (!this._sourcesContents) {\n\t        this._sourcesContents = Object.create(null);\n\t      }\n\t      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n\t    } else if (this._sourcesContents) {\n\t      // Remove the source file from the _sourcesContents map.\n\t      // If the _sourcesContents map is empty, set the property to null.\n\t      delete this._sourcesContents[util.toSetString(source)];\n\t      if (Object.keys(this._sourcesContents).length === 0) {\n\t        this._sourcesContents = null;\n\t      }\n\t    }\n\t  };\n\t\n\t/**\n\t * Applies the mappings of a sub-source-map for a specific source file to the\n\t * source map being generated. Each mapping to the supplied source file is\n\t * rewritten using the supplied source map. Note: The resolution for the\n\t * resulting mappings is the minimium of this map and the supplied map.\n\t *\n\t * @param aSourceMapConsumer The source map to be applied.\n\t * @param aSourceFile Optional. The filename of the source file.\n\t *        If omitted, SourceMapConsumer's file property will be used.\n\t * @param aSourceMapPath Optional. The dirname of the path to the source map\n\t *        to be applied. If relative, it is relative to the SourceMapConsumer.\n\t *        This parameter is needed when the two source maps aren't in the same\n\t *        directory, and the source map to be applied contains relative source\n\t *        paths. If so, those relative source paths need to be rewritten\n\t *        relative to the SourceMapGenerator.\n\t */\n\tSourceMapGenerator.prototype.applySourceMap =\n\t  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n\t    var sourceFile = aSourceFile;\n\t    // If aSourceFile is omitted, we will use the file property of the SourceMap\n\t    if (aSourceFile == null) {\n\t      if (aSourceMapConsumer.file == null) {\n\t        throw new Error(\n\t          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n\t          'or the source map\\'s \"file\" property. Both were omitted.'\n\t        );\n\t      }\n\t      sourceFile = aSourceMapConsumer.file;\n\t    }\n\t    var sourceRoot = this._sourceRoot;\n\t    // Make \"sourceFile\" relative if an absolute Url is passed.\n\t    if (sourceRoot != null) {\n\t      sourceFile = util.relative(sourceRoot, sourceFile);\n\t    }\n\t    // Applying the SourceMap can add and remove items from the sources and\n\t    // the names array.\n\t    var newSources = new ArraySet();\n\t    var newNames = new ArraySet();\n\t\n\t    // Find mappings for the \"sourceFile\"\n\t    this._mappings.unsortedForEach(function (mapping) {\n\t      if (mapping.source === sourceFile && mapping.originalLine != null) {\n\t        // Check if it can be mapped by the source map, then update the mapping.\n\t        var original = aSourceMapConsumer.originalPositionFor({\n\t          line: mapping.originalLine,\n\t          column: mapping.originalColumn\n\t        });\n\t        if (original.source != null) {\n\t          // Copy mapping\n\t          mapping.source = original.source;\n\t          if (aSourceMapPath != null) {\n\t            mapping.source = util.join(aSourceMapPath, mapping.source)\n\t          }\n\t          if (sourceRoot != null) {\n\t            mapping.source = util.relative(sourceRoot, mapping.source);\n\t          }\n\t          mapping.originalLine = original.line;\n\t          mapping.originalColumn = original.column;\n\t          if (original.name != null) {\n\t            mapping.name = original.name;\n\t          }\n\t        }\n\t      }\n\t\n\t      var source = mapping.source;\n\t      if (source != null && !newSources.has(source)) {\n\t        newSources.add(source);\n\t      }\n\t\n\t      var name = mapping.name;\n\t      if (name != null && !newNames.has(name)) {\n\t        newNames.add(name);\n\t      }\n\t\n\t    }, this);\n\t    this._sources = newSources;\n\t    this._names = newNames;\n\t\n\t    // Copy sourcesContents of applied map.\n\t    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t      if (content != null) {\n\t        if (aSourceMapPath != null) {\n\t          sourceFile = util.join(aSourceMapPath, sourceFile);\n\t        }\n\t        if (sourceRoot != null) {\n\t          sourceFile = util.relative(sourceRoot, sourceFile);\n\t        }\n\t        this.setSourceContent(sourceFile, content);\n\t      }\n\t    }, this);\n\t  };\n\t\n\t/**\n\t * A mapping can have one of the three levels of data:\n\t *\n\t *   1. Just the generated position.\n\t *   2. The Generated position, original position, and original source.\n\t *   3. Generated and original position, original source, as well as a name\n\t *      token.\n\t *\n\t * To maintain consistency, we validate that any new mapping being added falls\n\t * in to one of these categories.\n\t */\n\tSourceMapGenerator.prototype._validateMapping =\n\t  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n\t                                              aName) {\n\t    // When aOriginal is truthy but has empty values for .line and .column,\n\t    // it is most likely a programmer error. In this case we throw a very\n\t    // specific error message to try to guide them the right way.\n\t    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n\t    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n\t        throw new Error(\n\t            'original.line and original.column are not numbers -- you probably meant to omit ' +\n\t            'the original mapping entirely and only map the generated position. If so, pass ' +\n\t            'null for the original mapping instead of an object with empty or null values.'\n\t        );\n\t    }\n\t\n\t    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t        && aGenerated.line > 0 && aGenerated.column >= 0\n\t        && !aOriginal && !aSource && !aName) {\n\t      // Case 1.\n\t      return;\n\t    }\n\t    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n\t             && aGenerated.line > 0 && aGenerated.column >= 0\n\t             && aOriginal.line > 0 && aOriginal.column >= 0\n\t             && aSource) {\n\t      // Cases 2 and 3.\n\t      return;\n\t    }\n\t    else {\n\t      throw new Error('Invalid mapping: ' + JSON.stringify({\n\t        generated: aGenerated,\n\t        source: aSource,\n\t        original: aOriginal,\n\t        name: aName\n\t      }));\n\t    }\n\t  };\n\t\n\t/**\n\t * Serialize the accumulated mappings in to the stream of base 64 VLQs\n\t * specified by the source map format.\n\t */\n\tSourceMapGenerator.prototype._serializeMappings =\n\t  function SourceMapGenerator_serializeMappings() {\n\t    var previousGeneratedColumn = 0;\n\t    var previousGeneratedLine = 1;\n\t    var previousOriginalColumn = 0;\n\t    var previousOriginalLine = 0;\n\t    var previousName = 0;\n\t    var previousSource = 0;\n\t    var result = '';\n\t    var next;\n\t    var mapping;\n\t    var nameIdx;\n\t    var sourceIdx;\n\t\n\t    var mappings = this._mappings.toArray();\n\t    for (var i = 0, len = mappings.length; i < len; i++) {\n\t      mapping = mappings[i];\n\t      next = ''\n\t\n\t      if (mapping.generatedLine !== previousGeneratedLine) {\n\t        previousGeneratedColumn = 0;\n\t        while (mapping.generatedLine !== previousGeneratedLine) {\n\t          next += ';';\n\t          previousGeneratedLine++;\n\t        }\n\t      }\n\t      else {\n\t        if (i > 0) {\n\t          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n\t            continue;\n\t          }\n\t          next += ',';\n\t        }\n\t      }\n\t\n\t      next += base64VLQ.encode(mapping.generatedColumn\n\t                                 - previousGeneratedColumn);\n\t      previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t      if (mapping.source != null) {\n\t        sourceIdx = this._sources.indexOf(mapping.source);\n\t        next += base64VLQ.encode(sourceIdx - previousSource);\n\t        previousSource = sourceIdx;\n\t\n\t        // lines are stored 0-based in SourceMap spec version 3\n\t        next += base64VLQ.encode(mapping.originalLine - 1\n\t                                   - previousOriginalLine);\n\t        previousOriginalLine = mapping.originalLine - 1;\n\t\n\t        next += base64VLQ.encode(mapping.originalColumn\n\t                                   - previousOriginalColumn);\n\t        previousOriginalColumn = mapping.originalColumn;\n\t\n\t        if (mapping.name != null) {\n\t          nameIdx = this._names.indexOf(mapping.name);\n\t          next += base64VLQ.encode(nameIdx - previousName);\n\t          previousName = nameIdx;\n\t        }\n\t      }\n\t\n\t      result += next;\n\t    }\n\t\n\t    return result;\n\t  };\n\t\n\tSourceMapGenerator.prototype._generateSourcesContent =\n\t  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n\t    return aSources.map(function (source) {\n\t      if (!this._sourcesContents) {\n\t        return null;\n\t      }\n\t      if (aSourceRoot != null) {\n\t        source = util.relative(aSourceRoot, source);\n\t      }\n\t      var key = util.toSetString(source);\n\t      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n\t        ? this._sourcesContents[key]\n\t        : null;\n\t    }, this);\n\t  };\n\t\n\t/**\n\t * Externalize the source map.\n\t */\n\tSourceMapGenerator.prototype.toJSON =\n\t  function SourceMapGenerator_toJSON() {\n\t    var map = {\n\t      version: this._version,\n\t      sources: this._sources.toArray(),\n\t      names: this._names.toArray(),\n\t      mappings: this._serializeMappings()\n\t    };\n\t    if (this._file != null) {\n\t      map.file = this._file;\n\t    }\n\t    if (this._sourceRoot != null) {\n\t      map.sourceRoot = this._sourceRoot;\n\t    }\n\t    if (this._sourcesContents) {\n\t      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n\t    }\n\t\n\t    return map;\n\t  };\n\t\n\t/**\n\t * Render the source map being generated to a string.\n\t */\n\tSourceMapGenerator.prototype.toString =\n\t  function SourceMapGenerator_toString() {\n\t    return JSON.stringify(this.toJSON());\n\t  };\n\t\n\texports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t *  * Redistributions of source code must retain the above copyright\n\t *    notice, this list of conditions and the following disclaimer.\n\t *  * Redistributions in binary form must reproduce the above\n\t *    copyright notice, this list of conditions and the following\n\t *    disclaimer in the documentation and/or other materials provided\n\t *    with the distribution.\n\t *  * Neither the name of Google Inc. nor the names of its\n\t *    contributors may be used to endorse or promote products derived\n\t *    from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\t\n\tvar base64 = __webpack_require__(3);\n\t\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t//   Continuation\n\t//   |    Sign\n\t//   |    |\n\t//   V    V\n\t//   101011\n\t\n\tvar VLQ_BASE_SHIFT = 5;\n\t\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\t\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\t\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\t\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit.  For example, as decimals:\n\t *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t  return aValue < 0\n\t    ? ((-aValue) << 1) + 1\n\t    : (aValue << 1) + 0;\n\t}\n\t\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit.  For example, as decimals:\n\t *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t  var isNegative = (aValue & 1) === 1;\n\t  var shifted = aValue >> 1;\n\t  return isNegative\n\t    ? -shifted\n\t    : shifted;\n\t}\n\t\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t  var encoded = \"\";\n\t  var digit;\n\t\n\t  var vlq = toVLQSigned(aValue);\n\t\n\t  do {\n\t    digit = vlq & VLQ_BASE_MASK;\n\t    vlq >>>= VLQ_BASE_SHIFT;\n\t    if (vlq > 0) {\n\t      // There are still more digits in this value, so we must make sure the\n\t      // continuation bit is marked.\n\t      digit |= VLQ_CONTINUATION_BIT;\n\t    }\n\t    encoded += base64.encode(digit);\n\t  } while (vlq > 0);\n\t\n\t  return encoded;\n\t};\n\t\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t  var strLen = aStr.length;\n\t  var result = 0;\n\t  var shift = 0;\n\t  var continuation, digit;\n\t\n\t  do {\n\t    if (aIndex >= strLen) {\n\t      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t    }\n\t\n\t    digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t    if (digit === -1) {\n\t      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t    }\n\t\n\t    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t    digit &= VLQ_BASE_MASK;\n\t    result = result + (digit << shift);\n\t    shift += VLQ_BASE_SHIFT;\n\t  } while (continuation);\n\t\n\t  aOutParam.value = fromVLQSigned(result);\n\t  aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\t\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t  if (0 <= number && number < intToCharMap.length) {\n\t    return intToCharMap[number];\n\t  }\n\t  throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\t\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t  var bigA = 65;     // 'A'\n\t  var bigZ = 90;     // 'Z'\n\t\n\t  var littleA = 97;  // 'a'\n\t  var littleZ = 122; // 'z'\n\t\n\t  var zero = 48;     // '0'\n\t  var nine = 57;     // '9'\n\t\n\t  var plus = 43;     // '+'\n\t  var slash = 47;    // '/'\n\t\n\t  var littleOffset = 26;\n\t  var numberOffset = 52;\n\t\n\t  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t  if (bigA <= charCode && charCode <= bigZ) {\n\t    return (charCode - bigA);\n\t  }\n\t\n\t  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t  if (littleA <= charCode && charCode <= littleZ) {\n\t    return (charCode - littleA + littleOffset);\n\t  }\n\t\n\t  // 52 - 61: 0123456789\n\t  if (zero <= charCode && charCode <= nine) {\n\t    return (charCode - zero + numberOffset);\n\t  }\n\t\n\t  // 62: +\n\t  if (charCode == plus) {\n\t    return 62;\n\t  }\n\t\n\t  // 63: /\n\t  if (charCode == slash) {\n\t    return 63;\n\t  }\n\t\n\t  // Invalid base64 digit.\n\t  return -1;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t  if (aName in aArgs) {\n\t    return aArgs[aName];\n\t  } else if (arguments.length === 3) {\n\t    return aDefaultValue;\n\t  } else {\n\t    throw new Error('\"' + aName + '\" is a required argument.');\n\t  }\n\t}\n\texports.getArg = getArg;\n\t\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\t\n\tfunction urlParse(aUrl) {\n\t  var match = aUrl.match(urlRegexp);\n\t  if (!match) {\n\t    return null;\n\t  }\n\t  return {\n\t    scheme: match[1],\n\t    auth: match[2],\n\t    host: match[3],\n\t    port: match[4],\n\t    path: match[5]\n\t  };\n\t}\n\texports.urlParse = urlParse;\n\t\n\tfunction urlGenerate(aParsedUrl) {\n\t  var url = '';\n\t  if (aParsedUrl.scheme) {\n\t    url += aParsedUrl.scheme + ':';\n\t  }\n\t  url += '//';\n\t  if (aParsedUrl.auth) {\n\t    url += aParsedUrl.auth + '@';\n\t  }\n\t  if (aParsedUrl.host) {\n\t    url += aParsedUrl.host;\n\t  }\n\t  if (aParsedUrl.port) {\n\t    url += \":\" + aParsedUrl.port\n\t  }\n\t  if (aParsedUrl.path) {\n\t    url += aParsedUrl.path;\n\t  }\n\t  return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\t\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '<dir>/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t  var path = aPath;\n\t  var url = urlParse(aPath);\n\t  if (url) {\n\t    if (!url.path) {\n\t      return aPath;\n\t    }\n\t    path = url.path;\n\t  }\n\t  var isAbsolute = exports.isAbsolute(path);\n\t\n\t  var parts = path.split(/\\/+/);\n\t  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t    part = parts[i];\n\t    if (part === '.') {\n\t      parts.splice(i, 1);\n\t    } else if (part === '..') {\n\t      up++;\n\t    } else if (up > 0) {\n\t      if (part === '') {\n\t        // The first part is blank if the path is absolute. Trying to go\n\t        // above the root is a no-op. Therefore we can remove all '..' parts\n\t        // directly after the root.\n\t        parts.splice(i + 1, up);\n\t        up = 0;\n\t      } else {\n\t        parts.splice(i, 2);\n\t        up--;\n\t      }\n\t    }\n\t  }\n\t  path = parts.join('/');\n\t\n\t  if (path === '') {\n\t    path = isAbsolute ? '/' : '.';\n\t  }\n\t\n\t  if (url) {\n\t    url.path = path;\n\t    return urlGenerate(url);\n\t  }\n\t  return path;\n\t}\n\texports.normalize = normalize;\n\t\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t *   first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t *   is updated with the result and aRoot is returned. Otherwise the result\n\t *   is returned.\n\t *   - If aPath is absolute, the result is aPath.\n\t *   - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t  if (aRoot === \"\") {\n\t    aRoot = \".\";\n\t  }\n\t  if (aPath === \"\") {\n\t    aPath = \".\";\n\t  }\n\t  var aPathUrl = urlParse(aPath);\n\t  var aRootUrl = urlParse(aRoot);\n\t  if (aRootUrl) {\n\t    aRoot = aRootUrl.path || '/';\n\t  }\n\t\n\t  // `join(foo, '//www.example.org')`\n\t  if (aPathUrl && !aPathUrl.scheme) {\n\t    if (aRootUrl) {\n\t      aPathUrl.scheme = aRootUrl.scheme;\n\t    }\n\t    return urlGenerate(aPathUrl);\n\t  }\n\t\n\t  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t    return aPath;\n\t  }\n\t\n\t  // `join('http://', 'www.example.com')`\n\t  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t    aRootUrl.host = aPath;\n\t    return urlGenerate(aRootUrl);\n\t  }\n\t\n\t  var joined = aPath.charAt(0) === '/'\n\t    ? aPath\n\t    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\t\n\t  if (aRootUrl) {\n\t    aRootUrl.path = joined;\n\t    return urlGenerate(aRootUrl);\n\t  }\n\t  return joined;\n\t}\n\texports.join = join;\n\t\n\texports.isAbsolute = function (aPath) {\n\t  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n\t};\n\t\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t  if (aRoot === \"\") {\n\t    aRoot = \".\";\n\t  }\n\t\n\t  aRoot = aRoot.replace(/\\/$/, '');\n\t\n\t  // It is possible for the path to be above the root. In this case, simply\n\t  // checking whether the root is a prefix of the path won't work. Instead, we\n\t  // need to remove components from the root one by one, until either we find\n\t  // a prefix that fits, or we run out of components to remove.\n\t  var level = 0;\n\t  while (aPath.indexOf(aRoot + '/') !== 0) {\n\t    var index = aRoot.lastIndexOf(\"/\");\n\t    if (index < 0) {\n\t      return aPath;\n\t    }\n\t\n\t    // If the only part of the root that is left is the scheme (i.e. http://,\n\t    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t    // have exhausted all components, so the path is not relative to the root.\n\t    aRoot = aRoot.slice(0, index);\n\t    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t      return aPath;\n\t    }\n\t\n\t    ++level;\n\t  }\n\t\n\t  // Make sure we add a \"../\" for each component we removed from the root.\n\t  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\t\n\tvar supportsNullProto = (function () {\n\t  var obj = Object.create(null);\n\t  return !('__proto__' in obj);\n\t}());\n\t\n\tfunction identity (s) {\n\t  return s;\n\t}\n\t\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t  if (isProtoString(aStr)) {\n\t    return '$' + aStr;\n\t  }\n\t\n\t  return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\t\n\tfunction fromSetString(aStr) {\n\t  if (isProtoString(aStr)) {\n\t    return aStr.slice(1);\n\t  }\n\t\n\t  return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\t\n\tfunction isProtoString(s) {\n\t  if (!s) {\n\t    return false;\n\t  }\n\t\n\t  var length = s.length;\n\t\n\t  if (length < 9 /* \"__proto__\".length */) {\n\t    return false;\n\t  }\n\t\n\t  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n\t      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n\t    return false;\n\t  }\n\t\n\t  for (var i = length - 10; i >= 0; i--) {\n\t    if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t      return false;\n\t    }\n\t  }\n\t\n\t  return true;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t  var cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0 || onlyCompareOriginal) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\t\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0 || onlyCompareGenerated) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\t\n\tfunction strcmp(aStr1, aStr2) {\n\t  if (aStr1 === aStr2) {\n\t    return 0;\n\t  }\n\t\n\t  if (aStr1 === null) {\n\t    return 1; // aStr2 !== null\n\t  }\n\t\n\t  if (aStr2 === null) {\n\t    return -1; // aStr1 !== null\n\t  }\n\t\n\t  if (aStr1 > aStr2) {\n\t    return 1;\n\t  }\n\t\n\t  return -1;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = strcmp(mappingA.source, mappingB.source);\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalLine - mappingB.originalLine;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t  if (cmp !== 0) {\n\t    return cmp;\n\t  }\n\t\n\t  return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\t\n\t/**\n\t * Strip any JSON XSSI avoidance prefix from the string (as documented\n\t * in the source maps specification), and then parse the string as\n\t * JSON.\n\t */\n\tfunction parseSourceMapInput(str) {\n\t  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n\t}\n\texports.parseSourceMapInput = parseSourceMapInput;\n\t\n\t/**\n\t * Compute the URL of a source given the the source root, the source's\n\t * URL, and the source map's URL.\n\t */\n\tfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n\t  sourceURL = sourceURL || '';\n\t\n\t  if (sourceRoot) {\n\t    // This follows what Chrome does.\n\t    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n\t      sourceRoot += '/';\n\t    }\n\t    // The spec says:\n\t    //   Line 4: An optional source root, useful for relocating source\n\t    //   files on a server or removing repeated values in the\n\t    //   â€œsourcesâ€ entry.  This value is prepended to the individual\n\t    //   entries in the â€œsourceâ€ field.\n\t    sourceURL = sourceRoot + sourceURL;\n\t  }\n\t\n\t  // Historically, SourceMapConsumer did not take the sourceMapURL as\n\t  // a parameter.  This mode is still somewhat supported, which is why\n\t  // this code block is conditional.  However, it's preferable to pass\n\t  // the source map URL to SourceMapConsumer, so that this function\n\t  // can implement the source URL resolution algorithm as outlined in\n\t  // the spec.  This block is basically the equivalent of:\n\t  //    new URL(sourceURL, sourceMapURL).toString()\n\t  // ... except it avoids using URL, which wasn't available in the\n\t  // older releases of node still supported by this library.\n\t  //\n\t  // The spec says:\n\t  //   If the sources are not absolute URLs after prepending of the\n\t  //   â€œsourceRootâ€, the sources are resolved relative to the\n\t  //   SourceMap (like resolving script src in a html document).\n\t  if (sourceMapURL) {\n\t    var parsed = urlParse(sourceMapURL);\n\t    if (!parsed) {\n\t      throw new Error(\"sourceMapURL could not be parsed\");\n\t    }\n\t    if (parsed.path) {\n\t      // Strip the last path component, but keep the \"/\".\n\t      var index = parsed.path.lastIndexOf('/');\n\t      if (index >= 0) {\n\t        parsed.path = parsed.path.substring(0, index + 1);\n\t      }\n\t    }\n\t    sourceURL = join(urlGenerate(parsed), sourceURL);\n\t  }\n\t\n\t  return normalize(sourceURL);\n\t}\n\texports.computeSourceURL = computeSourceURL;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar hasNativeMap = typeof Map !== \"undefined\";\n\t\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t  this._array = [];\n\t  this._set = hasNativeMap ? new Map() : Object.create(null);\n\t}\n\t\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t  var set = new ArraySet();\n\t  for (var i = 0, len = aArray.length; i < len; i++) {\n\t    set.add(aArray[i], aAllowDuplicates);\n\t  }\n\t  return set;\n\t};\n\t\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n\t};\n\t\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n\t  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n\t  var idx = this._array.length;\n\t  if (!isDuplicate || aAllowDuplicates) {\n\t    this._array.push(aStr);\n\t  }\n\t  if (!isDuplicate) {\n\t    if (hasNativeMap) {\n\t      this._set.set(aStr, idx);\n\t    } else {\n\t      this._set[sStr] = idx;\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t  if (hasNativeMap) {\n\t    return this._set.has(aStr);\n\t  } else {\n\t    var sStr = util.toSetString(aStr);\n\t    return has.call(this._set, sStr);\n\t  }\n\t};\n\t\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t  if (hasNativeMap) {\n\t    var idx = this._set.get(aStr);\n\t    if (idx >= 0) {\n\t        return idx;\n\t    }\n\t  } else {\n\t    var sStr = util.toSetString(aStr);\n\t    if (has.call(this._set, sStr)) {\n\t      return this._set[sStr];\n\t    }\n\t  }\n\t\n\t  throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\t\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t  if (aIdx >= 0 && aIdx < this._array.length) {\n\t    return this._array[aIdx];\n\t  }\n\t  throw new Error('No element indexed by ' + aIdx);\n\t};\n\t\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t  return this._array.slice();\n\t};\n\t\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2014 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\t\n\t/**\n\t * Determine whether mappingB is after mappingA with respect to generated\n\t * position.\n\t */\n\tfunction generatedPositionAfter(mappingA, mappingB) {\n\t  // Optimized for most common case\n\t  var lineA = mappingA.generatedLine;\n\t  var lineB = mappingB.generatedLine;\n\t  var columnA = mappingA.generatedColumn;\n\t  var columnB = mappingB.generatedColumn;\n\t  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n\t         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n\t}\n\t\n\t/**\n\t * A data structure to provide a sorted view of accumulated mappings in a\n\t * performance conscious manner. It trades a neglibable overhead in general\n\t * case for a large speedup in case of mappings being added in order.\n\t */\n\tfunction MappingList() {\n\t  this._array = [];\n\t  this._sorted = true;\n\t  // Serves as infimum\n\t  this._last = {generatedLine: -1, generatedColumn: 0};\n\t}\n\t\n\t/**\n\t * Iterate through internal items. This method takes the same arguments that\n\t * `Array.prototype.forEach` takes.\n\t *\n\t * NOTE: The order of the mappings is NOT guaranteed.\n\t */\n\tMappingList.prototype.unsortedForEach =\n\t  function MappingList_forEach(aCallback, aThisArg) {\n\t    this._array.forEach(aCallback, aThisArg);\n\t  };\n\t\n\t/**\n\t * Add the given source mapping.\n\t *\n\t * @param Object aMapping\n\t */\n\tMappingList.prototype.add = function MappingList_add(aMapping) {\n\t  if (generatedPositionAfter(this._last, aMapping)) {\n\t    this._last = aMapping;\n\t    this._array.push(aMapping);\n\t  } else {\n\t    this._sorted = false;\n\t    this._array.push(aMapping);\n\t  }\n\t};\n\t\n\t/**\n\t * Returns the flat, sorted array of mappings. The mappings are sorted by\n\t * generated position.\n\t *\n\t * WARNING: This method returns internal data without copying, for\n\t * performance. The return value must NOT be mutated, and should be treated as\n\t * an immutable borrow. If you want to take ownership, you must make your own\n\t * copy.\n\t */\n\tMappingList.prototype.toArray = function MappingList_toArray() {\n\t  if (!this._sorted) {\n\t    this._array.sort(util.compareByGeneratedPositionsInflated);\n\t    this._sorted = true;\n\t  }\n\t  return this._array;\n\t};\n\t\n\texports.MappingList = MappingList;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar binarySearch = __webpack_require__(8);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar base64VLQ = __webpack_require__(2);\n\tvar quickSort = __webpack_require__(9).quickSort;\n\t\n\tfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t  var sourceMap = aSourceMap;\n\t  if (typeof aSourceMap === 'string') {\n\t    sourceMap = util.parseSourceMapInput(aSourceMap);\n\t  }\n\t\n\t  return sourceMap.sections != null\n\t    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n\t    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n\t}\n\t\n\tSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n\t  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n\t}\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tSourceMapConsumer.prototype._version = 3;\n\t\n\t// `__generatedMappings` and `__originalMappings` are arrays that hold the\n\t// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n\t// are lazily instantiated, accessed via the `_generatedMappings` and\n\t// `_originalMappings` getters respectively, and we only parse the mappings\n\t// and create these arrays once queried for a source location. We jump through\n\t// these hoops because there can be many thousands of mappings, and parsing\n\t// them is expensive, so we only want to do it if we must.\n\t//\n\t// Each object in the arrays is of the form:\n\t//\n\t//     {\n\t//       generatedLine: The line number in the generated code,\n\t//       generatedColumn: The column number in the generated code,\n\t//       source: The path to the original source file that generated this\n\t//               chunk of code,\n\t//       originalLine: The line number in the original source that\n\t//                     corresponds to this chunk of generated code,\n\t//       originalColumn: The column number in the original source that\n\t//                       corresponds to this chunk of generated code,\n\t//       name: The name of the original symbol which generated this chunk of\n\t//             code.\n\t//     }\n\t//\n\t// All properties except for `generatedLine` and `generatedColumn` can be\n\t// `null`.\n\t//\n\t// `_generatedMappings` is ordered by the generated positions.\n\t//\n\t// `_originalMappings` is ordered by the original positions.\n\t\n\tSourceMapConsumer.prototype.__generatedMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n\t  configurable: true,\n\t  enumerable: true,\n\t  get: function () {\n\t    if (!this.__generatedMappings) {\n\t      this._parseMappings(this._mappings, this.sourceRoot);\n\t    }\n\t\n\t    return this.__generatedMappings;\n\t  }\n\t});\n\t\n\tSourceMapConsumer.prototype.__originalMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n\t  configurable: true,\n\t  enumerable: true,\n\t  get: function () {\n\t    if (!this.__originalMappings) {\n\t      this._parseMappings(this._mappings, this.sourceRoot);\n\t    }\n\t\n\t    return this.__originalMappings;\n\t  }\n\t});\n\t\n\tSourceMapConsumer.prototype._charIsMappingSeparator =\n\t  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n\t    var c = aStr.charAt(index);\n\t    return c === \";\" || c === \",\";\n\t  };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tSourceMapConsumer.prototype._parseMappings =\n\t  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t    throw new Error(\"Subclasses must implement _parseMappings\");\n\t  };\n\t\n\tSourceMapConsumer.GENERATED_ORDER = 1;\n\tSourceMapConsumer.ORIGINAL_ORDER = 2;\n\t\n\tSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\n\tSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Iterate over each mapping between an original source/line/column and a\n\t * generated line/column in this source map.\n\t *\n\t * @param Function aCallback\n\t *        The function that is called with each mapping.\n\t * @param Object aContext\n\t *        Optional. If specified, this object will be the value of `this` every\n\t *        time that `aCallback` is called.\n\t * @param aOrder\n\t *        Either `SourceMapConsumer.GENERATED_ORDER` or\n\t *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n\t *        iterate over the mappings sorted by the generated file's line/column\n\t *        order or the original's source/line/column order, respectively. Defaults to\n\t *        `SourceMapConsumer.GENERATED_ORDER`.\n\t */\n\tSourceMapConsumer.prototype.eachMapping =\n\t  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n\t    var context = aContext || null;\n\t    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\t\n\t    var mappings;\n\t    switch (order) {\n\t    case SourceMapConsumer.GENERATED_ORDER:\n\t      mappings = this._generatedMappings;\n\t      break;\n\t    case SourceMapConsumer.ORIGINAL_ORDER:\n\t      mappings = this._originalMappings;\n\t      break;\n\t    default:\n\t      throw new Error(\"Unknown order of iteration.\");\n\t    }\n\t\n\t    var sourceRoot = this.sourceRoot;\n\t    mappings.map(function (mapping) {\n\t      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n\t      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n\t      return {\n\t        source: source,\n\t        generatedLine: mapping.generatedLine,\n\t        generatedColumn: mapping.generatedColumn,\n\t        originalLine: mapping.originalLine,\n\t        originalColumn: mapping.originalColumn,\n\t        name: mapping.name === null ? null : this._names.at(mapping.name)\n\t      };\n\t    }, this).forEach(aCallback, context);\n\t  };\n\t\n\t/**\n\t * Returns all generated line and column information for the original source,\n\t * line, and column provided. If no column is provided, returns all mappings\n\t * corresponding to a either the line we are searching for or the next\n\t * closest line that has any mappings. Otherwise, returns all mappings\n\t * corresponding to the given line and either the column we are searching for\n\t * or the next closest column that has any offsets.\n\t *\n\t * The only argument is an object with the following properties:\n\t *\n\t *   - source: The filename of the original source.\n\t *   - line: The line number in the original source.  The line number is 1-based.\n\t *   - column: Optional. the column number in the original source.\n\t *    The column number is 0-based.\n\t *\n\t * and an array of objects is returned, each with the following properties:\n\t *\n\t *   - line: The line number in the generated source, or null.  The\n\t *    line number is 1-based.\n\t *   - column: The column number in the generated source, or null.\n\t *    The column number is 0-based.\n\t */\n\tSourceMapConsumer.prototype.allGeneratedPositionsFor =\n\t  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n\t    var line = util.getArg(aArgs, 'line');\n\t\n\t    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n\t    // returns the index of the closest mapping less than the needle. By\n\t    // setting needle.originalColumn to 0, we thus find the last mapping for\n\t    // the given line, provided such a mapping exists.\n\t    var needle = {\n\t      source: util.getArg(aArgs, 'source'),\n\t      originalLine: line,\n\t      originalColumn: util.getArg(aArgs, 'column', 0)\n\t    };\n\t\n\t    needle.source = this._findSourceIndex(needle.source);\n\t    if (needle.source < 0) {\n\t      return [];\n\t    }\n\t\n\t    var mappings = [];\n\t\n\t    var index = this._findMapping(needle,\n\t                                  this._originalMappings,\n\t                                  \"originalLine\",\n\t                                  \"originalColumn\",\n\t                                  util.compareByOriginalPositions,\n\t                                  binarySearch.LEAST_UPPER_BOUND);\n\t    if (index >= 0) {\n\t      var mapping = this._originalMappings[index];\n\t\n\t      if (aArgs.column === undefined) {\n\t        var originalLine = mapping.originalLine;\n\t\n\t        // Iterate until either we run out of mappings, or we run into\n\t        // a mapping for a different line than the one we found. Since\n\t        // mappings are sorted, this is guaranteed to find all mappings for\n\t        // the line we found.\n\t        while (mapping && mapping.originalLine === originalLine) {\n\t          mappings.push({\n\t            line: util.getArg(mapping, 'generatedLine', null),\n\t            column: util.getArg(mapping, 'generatedColumn', null),\n\t            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t          });\n\t\n\t          mapping = this._originalMappings[++index];\n\t        }\n\t      } else {\n\t        var originalColumn = mapping.originalColumn;\n\t\n\t        // Iterate until either we run out of mappings, or we run into\n\t        // a mapping for a different line than the one we were searching for.\n\t        // Since mappings are sorted, this is guaranteed to find all mappings for\n\t        // the line we are searching for.\n\t        while (mapping &&\n\t               mapping.originalLine === line &&\n\t               mapping.originalColumn == originalColumn) {\n\t          mappings.push({\n\t            line: util.getArg(mapping, 'generatedLine', null),\n\t            column: util.getArg(mapping, 'generatedColumn', null),\n\t            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t          });\n\t\n\t          mapping = this._originalMappings[++index];\n\t        }\n\t      }\n\t    }\n\t\n\t    return mappings;\n\t  };\n\t\n\texports.SourceMapConsumer = SourceMapConsumer;\n\t\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The first parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t *   - version: Which version of the source map spec this map is following.\n\t *   - sources: An array of URLs to the original source files.\n\t *   - names: An array of identifiers which can be referrenced by individual mappings.\n\t *   - sourceRoot: Optional. The URL root from which all sources are relative.\n\t *   - sourcesContent: Optional. An array of contents of the original source files.\n\t *   - mappings: A string of base64 VLQs which contain the actual mappings.\n\t *   - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t *     {\n\t *       version : 3,\n\t *       file: \"out.js\",\n\t *       sourceRoot : \"\",\n\t *       sources: [\"foo.js\", \"bar.js\"],\n\t *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t *       mappings: \"AA,AB;;ABCDE;\"\n\t *     }\n\t *\n\t * The second parameter, if given, is a string whose value is the URL\n\t * at which the source map was found.  This URL is used to compute the\n\t * sources array.\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t  var sourceMap = aSourceMap;\n\t  if (typeof aSourceMap === 'string') {\n\t    sourceMap = util.parseSourceMapInput(aSourceMap);\n\t  }\n\t\n\t  var version = util.getArg(sourceMap, 'version');\n\t  var sources = util.getArg(sourceMap, 'sources');\n\t  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t  // requires the array) to play nice here.\n\t  var names = util.getArg(sourceMap, 'names', []);\n\t  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t  var mappings = util.getArg(sourceMap, 'mappings');\n\t  var file = util.getArg(sourceMap, 'file', null);\n\t\n\t  // Once again, Sass deviates from the spec and supplies the version as a\n\t  // string rather than a number, so we use loose equality checking here.\n\t  if (version != this._version) {\n\t    throw new Error('Unsupported version: ' + version);\n\t  }\n\t\n\t  if (sourceRoot) {\n\t    sourceRoot = util.normalize(sourceRoot);\n\t  }\n\t\n\t  sources = sources\n\t    .map(String)\n\t    // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n\t    // See bugzil.la/1090768.\n\t    .map(util.normalize)\n\t    // Always ensure that absolute sources are internally stored relative to\n\t    // the source root, if the source root is absolute. Not doing this would\n\t    // be particularly problematic when the source root is a prefix of the\n\t    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t    .map(function (source) {\n\t      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t        ? util.relative(sourceRoot, source)\n\t        : source;\n\t    });\n\t\n\t  // Pass `true` below to allow duplicate names and sources. While source maps\n\t  // are intended to be compressed and deduplicated, the TypeScript compiler\n\t  // sometimes generates source maps with duplicates in them. See Github issue\n\t  // #72 and bugzil.la/889492.\n\t  this._names = ArraySet.fromArray(names.map(String), true);\n\t  this._sources = ArraySet.fromArray(sources, true);\n\t\n\t  this._absoluteSources = this._sources.toArray().map(function (s) {\n\t    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n\t  });\n\t\n\t  this.sourceRoot = sourceRoot;\n\t  this.sourcesContent = sourcesContent;\n\t  this._mappings = mappings;\n\t  this._sourceMapURL = aSourceMapURL;\n\t  this.file = file;\n\t}\n\t\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\t\n\t/**\n\t * Utility function to find the index of a source.  Returns -1 if not\n\t * found.\n\t */\n\tBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n\t  var relativeSource = aSource;\n\t  if (this.sourceRoot != null) {\n\t    relativeSource = util.relative(this.sourceRoot, relativeSource);\n\t  }\n\t\n\t  if (this._sources.has(relativeSource)) {\n\t    return this._sources.indexOf(relativeSource);\n\t  }\n\t\n\t  // Maybe aSource is an absolute URL as returned by |sources|.  In\n\t  // this case we can't simply undo the transform.\n\t  var i;\n\t  for (i = 0; i < this._absoluteSources.length; ++i) {\n\t    if (this._absoluteSources[i] == aSource) {\n\t      return i;\n\t    }\n\t  }\n\t\n\t  return -1;\n\t};\n\t\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t *        The source map that will be consumed.\n\t * @param String aSourceMapURL\n\t *        The URL at which the source map can be found (optional)\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n\t    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\t\n\t    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t    smc.sourceRoot = aSourceMap._sourceRoot;\n\t    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t                                                            smc.sourceRoot);\n\t    smc.file = aSourceMap._file;\n\t    smc._sourceMapURL = aSourceMapURL;\n\t    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n\t      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n\t    });\n\t\n\t    // Because we are modifying the entries (by converting string sources and\n\t    // names to indices into the sources and names ArraySets), we have to make\n\t    // a copy of the entry or else bad things happen. Shared mutable state\n\t    // strikes again! See github issue #191.\n\t\n\t    var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t    var destGeneratedMappings = smc.__generatedMappings = [];\n\t    var destOriginalMappings = smc.__originalMappings = [];\n\t\n\t    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t      var srcMapping = generatedMappings[i];\n\t      var destMapping = new Mapping;\n\t      destMapping.generatedLine = srcMapping.generatedLine;\n\t      destMapping.generatedColumn = srcMapping.generatedColumn;\n\t\n\t      if (srcMapping.source) {\n\t        destMapping.source = sources.indexOf(srcMapping.source);\n\t        destMapping.originalLine = srcMapping.originalLine;\n\t        destMapping.originalColumn = srcMapping.originalColumn;\n\t\n\t        if (srcMapping.name) {\n\t          destMapping.name = names.indexOf(srcMapping.name);\n\t        }\n\t\n\t        destOriginalMappings.push(destMapping);\n\t      }\n\t\n\t      destGeneratedMappings.push(destMapping);\n\t    }\n\t\n\t    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\t\n\t    return smc;\n\t  };\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t  get: function () {\n\t    return this._absoluteSources.slice();\n\t  }\n\t});\n\t\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t  this.generatedLine = 0;\n\t  this.generatedColumn = 0;\n\t  this.source = null;\n\t  this.originalLine = null;\n\t  this.originalColumn = null;\n\t  this.name = null;\n\t}\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t    var generatedLine = 1;\n\t    var previousGeneratedColumn = 0;\n\t    var previousOriginalLine = 0;\n\t    var previousOriginalColumn = 0;\n\t    var previousSource = 0;\n\t    var previousName = 0;\n\t    var length = aStr.length;\n\t    var index = 0;\n\t    var cachedSegments = {};\n\t    var temp = {};\n\t    var originalMappings = [];\n\t    var generatedMappings = [];\n\t    var mapping, str, segment, end, value;\n\t\n\t    while (index < length) {\n\t      if (aStr.charAt(index) === ';') {\n\t        generatedLine++;\n\t        index++;\n\t        previousGeneratedColumn = 0;\n\t      }\n\t      else if (aStr.charAt(index) === ',') {\n\t        index++;\n\t      }\n\t      else {\n\t        mapping = new Mapping();\n\t        mapping.generatedLine = generatedLine;\n\t\n\t        // Because each offset is encoded relative to the previous one,\n\t        // many segments often have the same encoding. We can exploit this\n\t        // fact by caching the parsed variable length fields of each segment,\n\t        // allowing us to avoid a second parse if we encounter the same\n\t        // segment again.\n\t        for (end = index; end < length; end++) {\n\t          if (this._charIsMappingSeparator(aStr, end)) {\n\t            break;\n\t          }\n\t        }\n\t        str = aStr.slice(index, end);\n\t\n\t        segment = cachedSegments[str];\n\t        if (segment) {\n\t          index += str.length;\n\t        } else {\n\t          segment = [];\n\t          while (index < end) {\n\t            base64VLQ.decode(aStr, index, temp);\n\t            value = temp.value;\n\t            index = temp.rest;\n\t            segment.push(value);\n\t          }\n\t\n\t          if (segment.length === 2) {\n\t            throw new Error('Found a source, but no line and column');\n\t          }\n\t\n\t          if (segment.length === 3) {\n\t            throw new Error('Found a source and line, but no column');\n\t          }\n\t\n\t          cachedSegments[str] = segment;\n\t        }\n\t\n\t        // Generated column.\n\t        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t        previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t        if (segment.length > 1) {\n\t          // Original source.\n\t          mapping.source = previousSource + segment[1];\n\t          previousSource += segment[1];\n\t\n\t          // Original line.\n\t          mapping.originalLine = previousOriginalLine + segment[2];\n\t          previousOriginalLine = mapping.originalLine;\n\t          // Lines are stored 0-based\n\t          mapping.originalLine += 1;\n\t\n\t          // Original column.\n\t          mapping.originalColumn = previousOriginalColumn + segment[3];\n\t          previousOriginalColumn = mapping.originalColumn;\n\t\n\t          if (segment.length > 4) {\n\t            // Original name.\n\t            mapping.name = previousName + segment[4];\n\t            previousName += segment[4];\n\t          }\n\t        }\n\t\n\t        generatedMappings.push(mapping);\n\t        if (typeof mapping.originalLine === 'number') {\n\t          originalMappings.push(mapping);\n\t        }\n\t      }\n\t    }\n\t\n\t    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t    this.__generatedMappings = generatedMappings;\n\t\n\t    quickSort(originalMappings, util.compareByOriginalPositions);\n\t    this.__originalMappings = originalMappings;\n\t  };\n\t\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t                                         aColumnName, aComparator, aBias) {\n\t    // To return the position we are searching for, we must first find the\n\t    // mapping for the given position and then return the opposite position it\n\t    // points to. Because the mappings are sorted, we can use binary search to\n\t    // find the best mapping.\n\t\n\t    if (aNeedle[aLineName] <= 0) {\n\t      throw new TypeError('Line must be greater than or equal to 1, got '\n\t                          + aNeedle[aLineName]);\n\t    }\n\t    if (aNeedle[aColumnName] < 0) {\n\t      throw new TypeError('Column must be greater than or equal to 0, got '\n\t                          + aNeedle[aColumnName]);\n\t    }\n\t\n\t    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t  };\n\t\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t  function SourceMapConsumer_computeColumnSpans() {\n\t    for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t      var mapping = this._generatedMappings[index];\n\t\n\t      // Mappings do not contain a field for the last generated columnt. We\n\t      // can come up with an optimistic estimate, however, by assuming that\n\t      // mappings are contiguous (i.e. given two consecutive mappings, the\n\t      // first mapping ends where the second one starts).\n\t      if (index + 1 < this._generatedMappings.length) {\n\t        var nextMapping = this._generatedMappings[index + 1];\n\t\n\t        if (mapping.generatedLine === nextMapping.generatedLine) {\n\t          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t          continue;\n\t        }\n\t      }\n\t\n\t      // The last mapping for each line spans the entire line.\n\t      mapping.lastGeneratedColumn = Infinity;\n\t    }\n\t  };\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t *   - line: The line number in the generated source.  The line number\n\t *     is 1-based.\n\t *   - column: The column number in the generated source.  The column\n\t *     number is 0-based.\n\t *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t *   - source: The original source file, or null.\n\t *   - line: The line number in the original source, or null.  The\n\t *     line number is 1-based.\n\t *   - column: The column number in the original source, or null.  The\n\t *     column number is 0-based.\n\t *   - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t  function SourceMapConsumer_originalPositionFor(aArgs) {\n\t    var needle = {\n\t      generatedLine: util.getArg(aArgs, 'line'),\n\t      generatedColumn: util.getArg(aArgs, 'column')\n\t    };\n\t\n\t    var index = this._findMapping(\n\t      needle,\n\t      this._generatedMappings,\n\t      \"generatedLine\",\n\t      \"generatedColumn\",\n\t      util.compareByGeneratedPositionsDeflated,\n\t      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t    );\n\t\n\t    if (index >= 0) {\n\t      var mapping = this._generatedMappings[index];\n\t\n\t      if (mapping.generatedLine === needle.generatedLine) {\n\t        var source = util.getArg(mapping, 'source', null);\n\t        if (source !== null) {\n\t          source = this._sources.at(source);\n\t          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n\t        }\n\t        var name = util.getArg(mapping, 'name', null);\n\t        if (name !== null) {\n\t          name = this._names.at(name);\n\t        }\n\t        return {\n\t          source: source,\n\t          line: util.getArg(mapping, 'originalLine', null),\n\t          column: util.getArg(mapping, 'originalColumn', null),\n\t          name: name\n\t        };\n\t      }\n\t    }\n\t\n\t    return {\n\t      source: null,\n\t      line: null,\n\t      column: null,\n\t      name: null\n\t    };\n\t  };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t    if (!this.sourcesContent) {\n\t      return false;\n\t    }\n\t    return this.sourcesContent.length >= this._sources.size() &&\n\t      !this.sourcesContent.some(function (sc) { return sc == null; });\n\t  };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t    if (!this.sourcesContent) {\n\t      return null;\n\t    }\n\t\n\t    var index = this._findSourceIndex(aSource);\n\t    if (index >= 0) {\n\t      return this.sourcesContent[index];\n\t    }\n\t\n\t    var relativeSource = aSource;\n\t    if (this.sourceRoot != null) {\n\t      relativeSource = util.relative(this.sourceRoot, relativeSource);\n\t    }\n\t\n\t    var url;\n\t    if (this.sourceRoot != null\n\t        && (url = util.urlParse(this.sourceRoot))) {\n\t      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t      // many users. We can help them out when they expect file:// URIs to\n\t      // behave like it would if they were running a local HTTP server. See\n\t      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n\t      if (url.scheme == \"file\"\n\t          && this._sources.has(fileUriAbsPath)) {\n\t        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t      }\n\t\n\t      if ((!url.path || url.path == \"/\")\n\t          && this._sources.has(\"/\" + relativeSource)) {\n\t        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n\t      }\n\t    }\n\t\n\t    // This function is used recursively from\n\t    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t    // don't want to throw if we can't find the source - we just want to\n\t    // return null, so we provide a flag to exit gracefully.\n\t    if (nullOnMissing) {\n\t      return null;\n\t    }\n\t    else {\n\t      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n\t    }\n\t  };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t *   - source: The filename of the original source.\n\t *   - line: The line number in the original source.  The line number\n\t *     is 1-based.\n\t *   - column: The column number in the original source.  The column\n\t *     number is 0-based.\n\t *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t *   - line: The line number in the generated source, or null.  The\n\t *     line number is 1-based.\n\t *   - column: The column number in the generated source, or null.\n\t *     The column number is 0-based.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t  function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t    var source = util.getArg(aArgs, 'source');\n\t    source = this._findSourceIndex(source);\n\t    if (source < 0) {\n\t      return {\n\t        line: null,\n\t        column: null,\n\t        lastColumn: null\n\t      };\n\t    }\n\t\n\t    var needle = {\n\t      source: source,\n\t      originalLine: util.getArg(aArgs, 'line'),\n\t      originalColumn: util.getArg(aArgs, 'column')\n\t    };\n\t\n\t    var index = this._findMapping(\n\t      needle,\n\t      this._originalMappings,\n\t      \"originalLine\",\n\t      \"originalColumn\",\n\t      util.compareByOriginalPositions,\n\t      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t    );\n\t\n\t    if (index >= 0) {\n\t      var mapping = this._originalMappings[index];\n\t\n\t      if (mapping.source === needle.source) {\n\t        return {\n\t          line: util.getArg(mapping, 'generatedLine', null),\n\t          column: util.getArg(mapping, 'generatedColumn', null),\n\t          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t        };\n\t      }\n\t    }\n\t\n\t    return {\n\t      line: null,\n\t      column: null,\n\t      lastColumn: null\n\t    };\n\t  };\n\t\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\t\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The first parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t *   - version: Which version of the source map spec this map is following.\n\t *   - file: Optional. The generated file this source map is associated with.\n\t *   - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t *   - offset: The offset into the original specified at which this section\n\t *       begins to apply, defined as an object with a \"line\" and \"column\"\n\t *       field.\n\t *   - map: A source map definition. This source map could also be indexed,\n\t *       but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t *  {\n\t *    version : 3,\n\t *    file: \"app.js\",\n\t *    sections: [{\n\t *      offset: {line:100, column:10},\n\t *      map: {\n\t *        version : 3,\n\t *        file: \"section.js\",\n\t *        sources: [\"foo.js\", \"bar.js\"],\n\t *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t *        mappings: \"AAAA,E;;ABCDE;\"\n\t *      }\n\t *    }],\n\t *  }\n\t *\n\t * The second parameter, if given, is a string whose value is the URL\n\t * at which the source map was found.  This URL is used to compute the\n\t * sources array.\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t  var sourceMap = aSourceMap;\n\t  if (typeof aSourceMap === 'string') {\n\t    sourceMap = util.parseSourceMapInput(aSourceMap);\n\t  }\n\t\n\t  var version = util.getArg(sourceMap, 'version');\n\t  var sections = util.getArg(sourceMap, 'sections');\n\t\n\t  if (version != this._version) {\n\t    throw new Error('Unsupported version: ' + version);\n\t  }\n\t\n\t  this._sources = new ArraySet();\n\t  this._names = new ArraySet();\n\t\n\t  var lastOffset = {\n\t    line: -1,\n\t    column: 0\n\t  };\n\t  this._sections = sections.map(function (s) {\n\t    if (s.url) {\n\t      // The url field will require support for asynchronicity.\n\t      // See https://github.com/mozilla/source-map/issues/16\n\t      throw new Error('Support for url field in sections not implemented.');\n\t    }\n\t    var offset = util.getArg(s, 'offset');\n\t    var offsetLine = util.getArg(offset, 'line');\n\t    var offsetColumn = util.getArg(offset, 'column');\n\t\n\t    if (offsetLine < lastOffset.line ||\n\t        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t      throw new Error('Section offsets must be ordered and non-overlapping.');\n\t    }\n\t    lastOffset = offset;\n\t\n\t    return {\n\t      generatedOffset: {\n\t        // The offset fields are 0-based, but we use 1-based indices when\n\t        // encoding/decoding from VLQ.\n\t        generatedLine: offsetLine + 1,\n\t        generatedColumn: offsetColumn + 1\n\t      },\n\t      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n\t    }\n\t  });\n\t}\n\t\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t  get: function () {\n\t    var sources = [];\n\t    for (var i = 0; i < this._sections.length; i++) {\n\t      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t        sources.push(this._sections[i].consumer.sources[j]);\n\t      }\n\t    }\n\t    return sources;\n\t  }\n\t});\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t *   - line: The line number in the generated source.  The line number\n\t *     is 1-based.\n\t *   - column: The column number in the generated source.  The column\n\t *     number is 0-based.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t *   - source: The original source file, or null.\n\t *   - line: The line number in the original source, or null.  The\n\t *     line number is 1-based.\n\t *   - column: The column number in the original source, or null.  The\n\t *     column number is 0-based.\n\t *   - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t    var needle = {\n\t      generatedLine: util.getArg(aArgs, 'line'),\n\t      generatedColumn: util.getArg(aArgs, 'column')\n\t    };\n\t\n\t    // Find the section containing the generated position we're trying to map\n\t    // to an original position.\n\t    var sectionIndex = binarySearch.search(needle, this._sections,\n\t      function(needle, section) {\n\t        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t        if (cmp) {\n\t          return cmp;\n\t        }\n\t\n\t        return (needle.generatedColumn -\n\t                section.generatedOffset.generatedColumn);\n\t      });\n\t    var section = this._sections[sectionIndex];\n\t\n\t    if (!section) {\n\t      return {\n\t        source: null,\n\t        line: null,\n\t        column: null,\n\t        name: null\n\t      };\n\t    }\n\t\n\t    return section.consumer.originalPositionFor({\n\t      line: needle.generatedLine -\n\t        (section.generatedOffset.generatedLine - 1),\n\t      column: needle.generatedColumn -\n\t        (section.generatedOffset.generatedLine === needle.generatedLine\n\t         ? section.generatedOffset.generatedColumn - 1\n\t         : 0),\n\t      bias: aArgs.bias\n\t    });\n\t  };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t    return this._sections.every(function (s) {\n\t      return s.consumer.hasContentsOfAllSources();\n\t    });\n\t  };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t    for (var i = 0; i < this._sections.length; i++) {\n\t      var section = this._sections[i];\n\t\n\t      var content = section.consumer.sourceContentFor(aSource, true);\n\t      if (content) {\n\t        return content;\n\t      }\n\t    }\n\t    if (nullOnMissing) {\n\t      return null;\n\t    }\n\t    else {\n\t      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t    }\n\t  };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t *   - source: The filename of the original source.\n\t *   - line: The line number in the original source.  The line number\n\t *     is 1-based.\n\t *   - column: The column number in the original source.  The column\n\t *     number is 0-based.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t *   - line: The line number in the generated source, or null.  The\n\t *     line number is 1-based. \n\t *   - column: The column number in the generated source, or null.\n\t *     The column number is 0-based.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t    for (var i = 0; i < this._sections.length; i++) {\n\t      var section = this._sections[i];\n\t\n\t      // Only consider this section if the requested source is in the list of\n\t      // sources of the consumer.\n\t      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n\t        continue;\n\t      }\n\t      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t      if (generatedPosition) {\n\t        var ret = {\n\t          line: generatedPosition.line +\n\t            (section.generatedOffset.generatedLine - 1),\n\t          column: generatedPosition.column +\n\t            (section.generatedOffset.generatedLine === generatedPosition.line\n\t             ? section.generatedOffset.generatedColumn - 1\n\t             : 0)\n\t        };\n\t        return ret;\n\t      }\n\t    }\n\t\n\t    return {\n\t      line: null,\n\t      column: null\n\t    };\n\t  };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t    this.__generatedMappings = [];\n\t    this.__originalMappings = [];\n\t    for (var i = 0; i < this._sections.length; i++) {\n\t      var section = this._sections[i];\n\t      var sectionMappings = section.consumer._generatedMappings;\n\t      for (var j = 0; j < sectionMappings.length; j++) {\n\t        var mapping = sectionMappings[j];\n\t\n\t        var source = section.consumer._sources.at(mapping.source);\n\t        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n\t        this._sources.add(source);\n\t        source = this._sources.indexOf(source);\n\t\n\t        var name = null;\n\t        if (mapping.name) {\n\t          name = section.consumer._names.at(mapping.name);\n\t          this._names.add(name);\n\t          name = this._names.indexOf(name);\n\t        }\n\t\n\t        // The mappings coming from the consumer for the section have\n\t        // generated positions relative to the start of the section, so we\n\t        // need to offset them to be relative to the start of the concatenated\n\t        // generated file.\n\t        var adjustedMapping = {\n\t          source: source,\n\t          generatedLine: mapping.generatedLine +\n\t            (section.generatedOffset.generatedLine - 1),\n\t          generatedColumn: mapping.generatedColumn +\n\t            (section.generatedOffset.generatedLine === mapping.generatedLine\n\t            ? section.generatedOffset.generatedColumn - 1\n\t            : 0),\n\t          originalLine: mapping.originalLine,\n\t          originalColumn: mapping.originalColumn,\n\t          name: name\n\t        };\n\t\n\t        this.__generatedMappings.push(adjustedMapping);\n\t        if (typeof adjustedMapping.originalLine === 'number') {\n\t          this.__originalMappings.push(adjustedMapping);\n\t        }\n\t      }\n\t    }\n\t\n\t    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t  };\n\t\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t  // This function terminates when one of the following is true:\n\t  //\n\t  //   1. We find the exact element we are looking for.\n\t  //\n\t  //   2. We did not find the exact element, but we can return the index of\n\t  //      the next-closest element.\n\t  //\n\t  //   3. We did not find the exact element, and there is no next-closest\n\t  //      element than the one we are searching for, so we return -1.\n\t  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t  if (cmp === 0) {\n\t    // Found the element we are looking for.\n\t    return mid;\n\t  }\n\t  else if (cmp > 0) {\n\t    // Our needle is greater than aHaystack[mid].\n\t    if (aHigh - mid > 1) {\n\t      // The element is in the upper half.\n\t      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t    }\n\t\n\t    // The exact needle element was not found in this haystack. Determine if\n\t    // we are in termination case (3) or (2) and return the appropriate thing.\n\t    if (aBias == exports.LEAST_UPPER_BOUND) {\n\t      return aHigh < aHaystack.length ? aHigh : -1;\n\t    } else {\n\t      return mid;\n\t    }\n\t  }\n\t  else {\n\t    // Our needle is less than aHaystack[mid].\n\t    if (mid - aLow > 1) {\n\t      // The element is in the lower half.\n\t      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t    }\n\t\n\t    // we are in termination case (3) or (2) and return the appropriate thing.\n\t    if (aBias == exports.LEAST_UPPER_BOUND) {\n\t      return mid;\n\t    } else {\n\t      return aLow < 0 ? -1 : aLow;\n\t    }\n\t  }\n\t}\n\t\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t *     array and returns -1, 0, or 1 depending on whether the needle is less\n\t *     than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t *     closest element that is smaller than or greater than the one we are\n\t *     searching for, respectively, if the exact element cannot be found.\n\t *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t  if (aHaystack.length === 0) {\n\t    return -1;\n\t  }\n\t\n\t  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t  if (index < 0) {\n\t    return -1;\n\t  }\n\t\n\t  // We have found either the exact element, or the next-closest element than\n\t  // the one we are searching for. However, there may be more than one such\n\t  // element. Make sure we always return the smallest of these.\n\t  while (index - 1 >= 0) {\n\t    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t      break;\n\t    }\n\t    --index;\n\t  }\n\t\n\t  return index;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\t\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t *        The array.\n\t * @param {Number} x\n\t *        The index of the first item.\n\t * @param {Number} y\n\t *        The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t  var temp = ary[x];\n\t  ary[x] = ary[y];\n\t  ary[y] = temp;\n\t}\n\t\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t *        The lower bound on the range.\n\t * @param {Number} high\n\t *        The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t  return Math.round(low + (Math.random() * (high - low)));\n\t}\n\t\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t *        An array to sort.\n\t * @param {function} comparator\n\t *        Function to use to compare two items.\n\t * @param {Number} p\n\t *        Start index of the array\n\t * @param {Number} r\n\t *        End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t  // If our lower bound is less than our upper bound, we (1) partition the\n\t  // array into two pieces and (2) recurse on each half. If it is not, this is\n\t  // the empty array and our base case.\n\t\n\t  if (p < r) {\n\t    // (1) Partitioning.\n\t    //\n\t    // The partitioning chooses a pivot between `p` and `r` and moves all\n\t    // elements that are less than or equal to the pivot to the before it, and\n\t    // all the elements that are greater than it after it. The effect is that\n\t    // once partition is done, the pivot is in the exact place it will be when\n\t    // the array is put in sorted order, and it will not need to be moved\n\t    // again. This runs in O(n) time.\n\t\n\t    // Always choose a random pivot so that an input array which is reverse\n\t    // sorted does not cause O(n^2) running time.\n\t    var pivotIndex = randomIntInRange(p, r);\n\t    var i = p - 1;\n\t\n\t    swap(ary, pivotIndex, r);\n\t    var pivot = ary[r];\n\t\n\t    // Immediately after `j` is incremented in this loop, the following hold\n\t    // true:\n\t    //\n\t    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t    //\n\t    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t    for (var j = p; j < r; j++) {\n\t      if (comparator(ary[j], pivot) <= 0) {\n\t        i += 1;\n\t        swap(ary, i, j);\n\t      }\n\t    }\n\t\n\t    swap(ary, i + 1, j);\n\t    var q = i + 1;\n\t\n\t    // (2) Recurse on each half.\n\t\n\t    doQuickSort(ary, comparator, p, q - 1);\n\t    doQuickSort(ary, comparator, q + 1, r);\n\t  }\n\t}\n\t\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t *        An array to sort.\n\t * @param {function} comparator\n\t *        Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t  doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\tvar util = __webpack_require__(4);\n\t\n\t// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n\t// operating systems these days (capturing the result).\n\tvar REGEX_NEWLINE = /(\\r?\\n)/;\n\t\n\t// Newline character code for charCodeAt() comparisons\n\tvar NEWLINE_CODE = 10;\n\t\n\t// Private symbol for identifying `SourceNode`s when multiple versions of\n\t// the source-map library are loaded. This MUST NOT CHANGE across\n\t// versions!\n\tvar isSourceNode = \"$$$isSourceNode$$$\";\n\t\n\t/**\n\t * SourceNodes provide a way to abstract over interpolating/concatenating\n\t * snippets of generated JavaScript source code while maintaining the line and\n\t * column information associated with the original source code.\n\t *\n\t * @param aLine The original line number.\n\t * @param aColumn The original column number.\n\t * @param aSource The original source's filename.\n\t * @param aChunks Optional. An array of strings which are snippets of\n\t *        generated JS, or other SourceNodes.\n\t * @param aName The original identifier.\n\t */\n\tfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n\t  this.children = [];\n\t  this.sourceContents = {};\n\t  this.line = aLine == null ? null : aLine;\n\t  this.column = aColumn == null ? null : aColumn;\n\t  this.source = aSource == null ? null : aSource;\n\t  this.name = aName == null ? null : aName;\n\t  this[isSourceNode] = true;\n\t  if (aChunks != null) this.add(aChunks);\n\t}\n\t\n\t/**\n\t * Creates a SourceNode from generated code and a SourceMapConsumer.\n\t *\n\t * @param aGeneratedCode The generated code\n\t * @param aSourceMapConsumer The SourceMap for the generated code\n\t * @param aRelativePath Optional. The path that relative sources in the\n\t *        SourceMapConsumer should be relative to.\n\t */\n\tSourceNode.fromStringWithSourceMap =\n\t  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n\t    // The SourceNode we want to fill with the generated code\n\t    // and the SourceMap\n\t    var node = new SourceNode();\n\t\n\t    // All even indices of this array are one line of the generated code,\n\t    // while all odd indices are the newlines between two adjacent lines\n\t    // (since `REGEX_NEWLINE` captures its match).\n\t    // Processed fragments are accessed by calling `shiftNextLine`.\n\t    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n\t    var remainingLinesIndex = 0;\n\t    var shiftNextLine = function() {\n\t      var lineContents = getNextLine();\n\t      // The last line of a file might not have a newline.\n\t      var newLine = getNextLine() || \"\";\n\t      return lineContents + newLine;\n\t\n\t      function getNextLine() {\n\t        return remainingLinesIndex < remainingLines.length ?\n\t            remainingLines[remainingLinesIndex++] : undefined;\n\t      }\n\t    };\n\t\n\t    // We need to remember the position of \"remainingLines\"\n\t    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\t\n\t    // The generate SourceNodes we need a code range.\n\t    // To extract it current and last mapping is used.\n\t    // Here we store the last mapping.\n\t    var lastMapping = null;\n\t\n\t    aSourceMapConsumer.eachMapping(function (mapping) {\n\t      if (lastMapping !== null) {\n\t        // We add the code from \"lastMapping\" to \"mapping\":\n\t        // First check if there is a new line in between.\n\t        if (lastGeneratedLine < mapping.generatedLine) {\n\t          // Associate first line with \"lastMapping\"\n\t          addMappingWithCode(lastMapping, shiftNextLine());\n\t          lastGeneratedLine++;\n\t          lastGeneratedColumn = 0;\n\t          // The remaining code is added without mapping\n\t        } else {\n\t          // There is no new line in between.\n\t          // Associate the code between \"lastGeneratedColumn\" and\n\t          // \"mapping.generatedColumn\" with \"lastMapping\"\n\t          var nextLine = remainingLines[remainingLinesIndex] || '';\n\t          var code = nextLine.substr(0, mapping.generatedColumn -\n\t                                        lastGeneratedColumn);\n\t          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n\t                                              lastGeneratedColumn);\n\t          lastGeneratedColumn = mapping.generatedColumn;\n\t          addMappingWithCode(lastMapping, code);\n\t          // No more remaining code, continue\n\t          lastMapping = mapping;\n\t          return;\n\t        }\n\t      }\n\t      // We add the generated code until the first mapping\n\t      // to the SourceNode without any mapping.\n\t      // Each line is added as separate string.\n\t      while (lastGeneratedLine < mapping.generatedLine) {\n\t        node.add(shiftNextLine());\n\t        lastGeneratedLine++;\n\t      }\n\t      if (lastGeneratedColumn < mapping.generatedColumn) {\n\t        var nextLine = remainingLines[remainingLinesIndex] || '';\n\t        node.add(nextLine.substr(0, mapping.generatedColumn));\n\t        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n\t        lastGeneratedColumn = mapping.generatedColumn;\n\t      }\n\t      lastMapping = mapping;\n\t    }, this);\n\t    // We have processed all mappings.\n\t    if (remainingLinesIndex < remainingLines.length) {\n\t      if (lastMapping) {\n\t        // Associate the remaining code in the current line with \"lastMapping\"\n\t        addMappingWithCode(lastMapping, shiftNextLine());\n\t      }\n\t      // and add the remaining lines without any mapping\n\t      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n\t    }\n\t\n\t    // Copy sourcesContent into SourceNode\n\t    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t      if (content != null) {\n\t        if (aRelativePath != null) {\n\t          sourceFile = util.join(aRelativePath, sourceFile);\n\t        }\n\t        node.setSourceContent(sourceFile, content);\n\t      }\n\t    });\n\t\n\t    return node;\n\t\n\t    function addMappingWithCode(mapping, code) {\n\t      if (mapping === null || mapping.source === undefined) {\n\t        node.add(code);\n\t      } else {\n\t        var source = aRelativePath\n\t          ? util.join(aRelativePath, mapping.source)\n\t          : mapping.source;\n\t        node.add(new SourceNode(mapping.originalLine,\n\t                                mapping.originalColumn,\n\t                                source,\n\t                                code,\n\t                                mapping.name));\n\t      }\n\t    }\n\t  };\n\t\n\t/**\n\t * Add a chunk of generated JS to this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t *        SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.add = function SourceNode_add(aChunk) {\n\t  if (Array.isArray(aChunk)) {\n\t    aChunk.forEach(function (chunk) {\n\t      this.add(chunk);\n\t    }, this);\n\t  }\n\t  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t    if (aChunk) {\n\t      this.children.push(aChunk);\n\t    }\n\t  }\n\t  else {\n\t    throw new TypeError(\n\t      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t    );\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Add a chunk of generated JS to the beginning of this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t *        SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n\t  if (Array.isArray(aChunk)) {\n\t    for (var i = aChunk.length-1; i >= 0; i--) {\n\t      this.prepend(aChunk[i]);\n\t    }\n\t  }\n\t  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t    this.children.unshift(aChunk);\n\t  }\n\t  else {\n\t    throw new TypeError(\n\t      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t    );\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Walk over the tree of JS snippets in this node and its children. The\n\t * walking function is called once for each snippet of JS and is passed that\n\t * snippet and the its original associated source's line/column location.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n\t  var chunk;\n\t  for (var i = 0, len = this.children.length; i < len; i++) {\n\t    chunk = this.children[i];\n\t    if (chunk[isSourceNode]) {\n\t      chunk.walk(aFn);\n\t    }\n\t    else {\n\t      if (chunk !== '') {\n\t        aFn(chunk, { source: this.source,\n\t                     line: this.line,\n\t                     column: this.column,\n\t                     name: this.name });\n\t      }\n\t    }\n\t  }\n\t};\n\t\n\t/**\n\t * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n\t * each of `this.children`.\n\t *\n\t * @param aSep The separator.\n\t */\n\tSourceNode.prototype.join = function SourceNode_join(aSep) {\n\t  var newChildren;\n\t  var i;\n\t  var len = this.children.length;\n\t  if (len > 0) {\n\t    newChildren = [];\n\t    for (i = 0; i < len-1; i++) {\n\t      newChildren.push(this.children[i]);\n\t      newChildren.push(aSep);\n\t    }\n\t    newChildren.push(this.children[i]);\n\t    this.children = newChildren;\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Call String.prototype.replace on the very right-most source snippet. Useful\n\t * for trimming whitespace from the end of a source node, etc.\n\t *\n\t * @param aPattern The pattern to replace.\n\t * @param aReplacement The thing to replace the pattern with.\n\t */\n\tSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n\t  var lastChild = this.children[this.children.length - 1];\n\t  if (lastChild[isSourceNode]) {\n\t    lastChild.replaceRight(aPattern, aReplacement);\n\t  }\n\t  else if (typeof lastChild === 'string') {\n\t    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n\t  }\n\t  else {\n\t    this.children.push(''.replace(aPattern, aReplacement));\n\t  }\n\t  return this;\n\t};\n\t\n\t/**\n\t * Set the source content for a source file. This will be added to the SourceMapGenerator\n\t * in the sourcesContent field.\n\t *\n\t * @param aSourceFile The filename of the source file\n\t * @param aSourceContent The content of the source file\n\t */\n\tSourceNode.prototype.setSourceContent =\n\t  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n\t    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n\t  };\n\t\n\t/**\n\t * Walk over the tree of SourceNodes. The walking function is called for each\n\t * source file content and is passed the filename and source content.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walkSourceContents =\n\t  function SourceNode_walkSourceContents(aFn) {\n\t    for (var i = 0, len = this.children.length; i < len; i++) {\n\t      if (this.children[i][isSourceNode]) {\n\t        this.children[i].walkSourceContents(aFn);\n\t      }\n\t    }\n\t\n\t    var sources = Object.keys(this.sourceContents);\n\t    for (var i = 0, len = sources.length; i < len; i++) {\n\t      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n\t    }\n\t  };\n\t\n\t/**\n\t * Return the string representation of this source node. Walks over the tree\n\t * and concatenates all the various snippets together to one string.\n\t */\n\tSourceNode.prototype.toString = function SourceNode_toString() {\n\t  var str = \"\";\n\t  this.walk(function (chunk) {\n\t    str += chunk;\n\t  });\n\t  return str;\n\t};\n\t\n\t/**\n\t * Returns the string representation of this source node along with a source\n\t * map.\n\t */\n\tSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n\t  var generated = {\n\t    code: \"\",\n\t    line: 1,\n\t    column: 0\n\t  };\n\t  var map = new SourceMapGenerator(aArgs);\n\t  var sourceMappingActive = false;\n\t  var lastOriginalSource = null;\n\t  var lastOriginalLine = null;\n\t  var lastOriginalColumn = null;\n\t  var lastOriginalName = null;\n\t  this.walk(function (chunk, original) {\n\t    generated.code += chunk;\n\t    if (original.source !== null\n\t        && original.line !== null\n\t        && original.column !== null) {\n\t      if(lastOriginalSource !== original.source\n\t         || lastOriginalLine !== original.line\n\t         || lastOriginalColumn !== original.column\n\t         || lastOriginalName !== original.name) {\n\t        map.addMapping({\n\t          source: original.source,\n\t          original: {\n\t            line: original.line,\n\t            column: original.column\n\t          },\n\t          generated: {\n\t            line: generated.line,\n\t            column: generated.column\n\t          },\n\t          name: original.name\n\t        });\n\t      }\n\t      lastOriginalSource = original.source;\n\t      lastOriginalLine = original.line;\n\t      lastOriginalColumn = original.column;\n\t      lastOriginalName = original.name;\n\t      sourceMappingActive = true;\n\t    } else if (sourceMappingActive) {\n\t      map.addMapping({\n\t        generated: {\n\t          line: generated.line,\n\t          column: generated.column\n\t        }\n\t      });\n\t      lastOriginalSource = null;\n\t      sourceMappingActive = false;\n\t    }\n\t    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n\t      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n\t        generated.line++;\n\t        generated.column = 0;\n\t        // Mappings end at eol\n\t        if (idx + 1 === length) {\n\t          lastOriginalSource = null;\n\t          sourceMappingActive = false;\n\t        } else if (sourceMappingActive) {\n\t          map.addMapping({\n\t            source: original.source,\n\t            original: {\n\t              line: original.line,\n\t              column: original.column\n\t            },\n\t            generated: {\n\t              line: generated.line,\n\t              column: generated.column\n\t            },\n\t            name: original.name\n\t          });\n\t        }\n\t      } else {\n\t        generated.column++;\n\t      }\n\t    }\n\t  });\n\t  this.walkSourceContents(function (sourceFile, sourceContent) {\n\t    map.setSourceContent(sourceFile, sourceContent);\n\t  });\n\t\n\t  return { code: generated.code, map: map };\n\t};\n\t\n\texports.SourceNode = SourceNode;\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// source-map.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0fd5815da764db5fb9fe","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   â€œsourcesâ€ entry.  This value is prepended to the individual\n    //   entries in the â€œsourceâ€ field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   â€œsourceRootâ€, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""}/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var util = require('./util');
var has = Object.prototype.hasOwnProperty;
var hasNativeMap = typeof Map !== "undefined";

/**
 * A data structure which is a combination of an array and a set. Adding a new
 * member is O(1), testing for membership is O(1), and finding the index of an
 * element is O(1). Removing elements from the set is not supported. Only
 * strings are supported for membership.
 */
function ArraySet() {
  this._array = [];
  this._set = hasNativeMap ? new Map() : Object.create(null);
}

/**
 * Static method for creating ArraySet instances from an existing array.
 */
ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
  var set = new ArraySet();
  for (var i = 0, len = aArray.length; i < len; i++) {
    set.add(aArray[i], aAllowDuplicates);
  }
  return set;
};

/**
 * Return how many unique items are in this ArraySet. If duplicates have been
 * added, than those do not count towards the size.
 *
 * @returns Number
 */
ArraySet.prototype.size = function ArraySet_size() {
  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
};

/**
 * Add the given string to this set.
 *
 * @param String aStr
 */
ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
  var idx = this._array.length;
  if (!isDuplicate || aAllowDuplicates) {
    this._array.push(aStr);
  }
  if (!isDuplicate) {
    if (hasNativeMap) {
      this._set.set(aStr, idx);
    } else {
      this._set[sStr] = idx;
    }
  }
};

/**
 * Is the given string a member of this set?
 *
 * @param String aStr
 */
ArraySet.prototype.has = function ArraySet_has(aStr) {
  if (hasNativeMap) {
    return this._set.has(aStr);
  } else {
    var sStr = util.toSetString(aStr);
    return has.call(this._set, sStr);
  }
};

/**
 * What is the index of the given string in the array?
 *
 * @param String aStr
 */
ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
  if (hasNativeMap) {
    var idx = this._set.get(aStr);
    if (idx >= 0) {
        return idx;
    }
  } else {
    var sStr = util.toSetString(aStr);
    if (has.call(this._set, sStr)) {
      return this._set[sStr];
    }
  }

  throw new Error('"' + aStr + '" is not in the set.');
};

/**
 * What is the element at the given index?
 *
 * @param Number aIdx
 */
ArraySet.prototype.at = function ArraySet_at(aIdx) {
  if (aIdx >= 0 && aIdx < this._array.length) {
    return this._array[aIdx];
  }
  throw new Error('No element indexed by ' + aIdx);
};

/**
 * Returns the array representation of this set (which has the proper indices
 * indicated by indexOf). Note that this is a copy of the internal array used
 * for storing the members so that no one can mess with internal state.
 */
ArraySet.prototype.toArray = function ArraySet_toArray() {
  return this._array.slice();
};

exports.ArraySet = ArraySet;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 *
 * Based on the Base 64 VLQ implementation in Closure Compiler:
 * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
 *
 * Copyright 2011 The Closure Compiler Authors. All rights reserved.
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above
 *    copyright notice, this list of conditions and the following
 *    disclaimer in the documentation and/or other materials provided
 *    with the distribution.
 *  * Neither the name of Google Inc. nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

var base64 = require('./base64');

// A single base 64 digit can contain 6 bits of data. For the base 64 variable
// length quantities we use in the source map spec, the first bit is the sign,
// the next four bits are the actual value, and the 6th bit is the
// continuation bit. The continuation bit tells us whether there are more
// digits in this value following this digit.
//
//   Continuation
//   |    Sign
//   |    |
//   V    V
//   101011

var VLQ_BASE_SHIFT = 5;

// binary: 100000
var VLQ_BASE = 1 << VLQ_BASE_SHIFT;

// binary: 011111
var VLQ_BASE_MASK = VLQ_BASE - 1;

// binary: 100000
var VLQ_CONTINUATION_BIT = VLQ_BASE;

/**
 * Converts from a two-complement value to a value where the sign bit is
 * placed in the least significant bit.  For example, as decimals:
 *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
 *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
 */
function toVLQSigned(aValue) {
  return aValue < 0
    ? ((-aValue) << 1) + 1
    : (aValue << 1) + 0;
}

/**
 * Converts to a two-complement value from a value where the sign bit is
 * placed in the least significant bit.  For example, as decimals:
 *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
 *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
 */
function fromVLQSigned(aValue) {
  var isNegative = (aValue & 1) === 1;
  var shifted = aValue >> 1;
  return isNegative
    ? -shifted
    : shifted;
}

/**
 * Returns the base 64 VLQ encoded value.
 */
exports.encode = function base64VLQ_encode(aValue) {
  var encoded = "";
  var digit;

  var vlq = toVLQSigned(aValue);

  do {
    digit = vlq & VLQ_BASE_MASK;
    vlq >>>= VLQ_BASE_SHIFT;
    if (vlq > 0) {
      // There are still more digits in this value, so we must make sure the
      // continuation bit is marked.
      digit |= VLQ_CONTINUATION_BIT;
    }
    encoded += base64.encode(digit);
  } while (vlq > 0);

  return encoded;
};

/**
 * Decodes the next base 64 VLQ value from the given string and returns the
 * value and the rest of the string via the out parameter.
 */
exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
  var strLen = aStr.length;
  var result = 0;
  var shift = 0;
  var continuation, digit;

  do {
    if (aIndex >= strLen) {
      throw new Error("Expected more digits in base 64 VLQ value.");
    }

    digit = base64.decode(aStr.charCodeAt(aIndex++));
    if (digit === -1) {
      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
    }

    continuation = !!(digit & VLQ_CONTINUATION_BIT);
    digit &= VLQ_BASE_MASK;
    result = result + (digit << shift);
    shift += VLQ_BASE_SHIFT;
  } while (continuation);

  aOutParam.value = fromVLQSigned(result);
  aOutParam.rest = aIndex;
};
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');

/**
 * Encode an integer in the range of 0 to 63 to a single base 64 digit.
 */
exports.encode = function (number) {
  if (0 <= number && number < intToCharMap.length) {
    return intToCharMap[number];
  }
  throw new TypeError("Must be between 0 and 63: " + number);
};

/**
 * Decode a single base 64 character code digit to an integer. Returns -1 on
 * failure.
 */
exports.decode = function (charCode) {
  var bigA = 65;     // 'A'
  var bigZ = 90;     // 'Z'

  var littleA = 97;  // 'a'
  var littleZ = 122; // 'z'

  var zero = 48;     // '0'
  var nine = 57;     // '9'

  var plus = 43;     // '+'
  var slash = 47;    // '/'

  var littleOffset = 26;
  var numberOffset = 52;

  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  if (bigA <= charCode && charCode <= bigZ) {
    return (charCode - bigA);
  }

  // 26 - 51: abcdefghijklmnopqrstuvwxyz
  if (littleA <= charCode && charCode <= littleZ) {
    return (charCode - littleA + littleOffset);
  }

  // 52 - 61: 0123456789
  if (zero <= charCode && charCode <= nine) {
    return (charCode - zero + numberOffset);
  }

  // 62: +
  if (charCode == plus) {
    return 62;
  }

  // 63: /
  if (charCode == slash) {
    return 63;
  }

  // Invalid base64 digit.
  return -1;
};
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

exports.GREATEST_LOWER_BOUND = 1;
exports.LEAST_UPPER_BOUND = 2;

/**
 * Recursive implementation of binary search.
 *
 * @param aLow Indices here and lower do not contain the needle.
 * @param aHigh Indices here and higher do not contain the needle.
 * @param aNeedle The element being searched for.
 * @param aHaystack The non-empty array being searched.
 * @param aCompare Function which takes two elements and returns -1, 0, or 1.
 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 */
function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
  // This function terminates when one of the following is true:
  //
  //   1. We find the exact element we are looking for.
  //
  //   2. We did not find the exact element, but we can return the index of
  //      the next-closest element.
  //
  //   3. We did not find the exact element, and there is no next-closest
  //      element than the one we are searching for, so we return -1.
  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
  var cmp = aCompare(aNeedle, aHaystack[mid], true);
  if (cmp === 0) {
    // Found the element we are looking for.
    return mid;
  }
  else if (cmp > 0) {
    // Our needle is greater than aHaystack[mid].
    if (aHigh - mid > 1) {
      // The element is in the upper half.
      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
    }

    // The exact needle element was not found in this haystack. Determine if
    // we are in termination case (3) or (2) and return the appropriate thing.
    if (aBias == exports.LEAST_UPPER_BOUND) {
      return aHigh < aHaystack.length ? aHigh : -1;
    } else {
      return mid;
    }
  }
  else {
    // Our needle is less than aHaystack[mid].
    if (mid - aLow > 1) {
      // The element is in the lower half.
      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
    }

    // we are in termination case (3) or (2) and return the appropriate thing.
    if (aBias == exports.LEAST_UPPER_BOUND) {
      return mid;
    } else {
      return aLow < 0 ? -1 : aLow;
    }
  }
}

/**
 * This is an implementation of binary search which will always try and return
 * the index of the closest element if there is no exact hit. This is because
 * mappings between original and generated line/col pairs are single points,
 * and there is an implicit region between each of them, so a miss just means
 * that you aren't on the very start of a region.
 *
 * @param aNeedle The element you are looking for.
 * @param aHaystack The array that is being searched.
 * @param aCompare A function which takes the needle and an element in the
 *     array and returns -1, 0, or 1 depending on whether the needle is less
 *     than, equal to, or greater than the element, respectively.
 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
 */
exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
  if (aHaystack.length === 0) {
    return -1;
  }

  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
  if (index < 0) {
    return -1;
  }

  // We have found either the exact element, or the next-closest element than
  // the one we are searching for. However, there may be more than one such
  // element. Make sure we always return the smallest of these.
  while (index - 1 >= 0) {
    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
      break;
    }
    --index;
  }

  return index;
};
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2014 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var util = require('./util');

/**
 * Determine whether mappingB is after mappingA with respect to generated
 * position.
 */
function generatedPositionAfter(mappingA, mappingB) {
  // Optimized for most common case
  var lineA = mappingA.generatedLine;
  var lineB = mappingB.generatedLine;
  var columnA = mappingA.generatedColumn;
  var columnB = mappingB.generatedColumn;
  return lineB > lineA || lineB == lineA && columnB >= columnA ||
         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
}

/**
 * A data structure to provide a sorted view of accumulated mappings in a
 * performance conscious manner. It trades a neglibable overhead in general
 * case for a large speedup in case of mappings being added in order.
 */
function MappingList() {
  this._array = [];
  this._sorted = true;
  // Serves as infimum
  this._last = {generatedLine: -1, generatedColumn: 0};
}

/**
 * Iterate through internal items. This method takes the same arguments that
 * `Array.prototype.forEach` takes.
 *
 * NOTE: The order of the mappings is NOT guaranteed.
 */
MappingList.prototype.unsortedForEach =
  function MappingList_forEach(aCallback, aThisArg) {
    this._array.forEach(aCallback, aThisArg);
  };

/**
 * Add the given source mapping.
 *
 * @param Object aMapping
 */
MappingList.prototype.add = function MappingList_add(aMapping) {
  if (generatedPositionAfter(this._last, aMapping)) {
    this._last = aMapping;
    this._array.push(aMapping);
  } else {
    this._sorted = false;
    this._array.push(aMapping);
  }
};

/**
 * Returns the flat, sorted array of mappings. The mappings are sorted by
 * generated position.
 *
 * WARNING: This method returns internal data without copying, for
 * performance. The return value must NOT be mutated, and should be treated as
 * an immutable borrow. If you want to take ownership, you must make your own
 * copy.
 */
MappingList.prototype.toArray = function MappingList_toArray() {
  if (!this._sorted) {
    this._array.sort(util.compareByGeneratedPositionsInflated);
    this._sorted = true;
  }
  return this._array;
};

exports.MappingList = MappingList;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

// It turns out that some (most?) JavaScript engines don't self-host
// `Array.prototype.sort`. This makes sense because C++ will likely remain
// faster than JS when doing raw CPU-intensive sorting. However, when using a
// custom comparator function, calling back and forth between the VM's C++ and
// JIT'd JS is rather slow *and* loses JIT type information, resulting in
// worse generated code for the comparator function than would be optimal. In
// fact, when sorting with a comparator, these costs outweigh the benefits of
// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
// a ~3500ms mean speed-up in `bench/bench.html`.

/**
 * Swap the elements indexed by `x` and `y` in the array `ary`.
 *
 * @param {Array} ary
 *        The array.
 * @param {Number} x
 *        The index of the first item.
 * @param {Number} y
 *        The index of the second item.
 */
function swap(ary, x, y) {
  var temp = ary[x];
  ary[x] = ary[y];
  ary[y] = temp;
}

/**
 * Returns a random integer within the range `low .. high` inclusive.
 *
 * @param {Number} low
 *        The lower bound on the range.
 * @param {Number} high
 *        The upper bound on the range.
 */
function randomIntInRange(low, high) {
  return Math.round(low + (Math.random() * (high - low)));
}

/**
 * The Quick Sort algorithm.
 *
 * @param {Array} ary
 *        An array to sort.
 * @param {function} comparator
 *        Function to use to compare two items.
 * @param {Number} p
 *        Start index of the array
 * @param {Number} r
 *        End index of the array
 */
function doQuickSort(ary, comparator, p, r) {
  // If our lower bound is less than our upper bound, we (1) partition the
  // array into two pieces and (2) recurse on each half. If it is not, this is
  // the empty array and our base case.

  if (p < r) {
    // (1) Partitioning.
    //
    // The partitioning chooses a pivot between `p` and `r` and moves all
    // elements that are less than or equal to the pivot to the before it, and
    // all the elements that are greater than it after it. The effect is that
    // once partition is done, the pivot is in the exact place it will be when
    // the array is put in sorted order, and it will not need to be moved
    // again. This runs in O(n) time.

    // Always choose a random pivot so that an input array which is reverse
    // sorted does not cause O(n^2) running time.
    var pivotIndex = randomIntInRange(p, r);
    var i = p - 1;

    swap(ary, pivotIndex, r);
    var pivot = ary[r];

    // Immediately after `j` is incremented in this loop, the following hold
    // true:
    //
    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
    //
    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
    for (var j = p; j < r; j++) {
      if (comparator(ary[j], pivot) <= 0) {
        i += 1;
        swap(ary, i, j);
      }
    }

    swap(ary, i + 1, j);
    var q = i + 1;

    // (2) Recurse on each half.

    doQuickSort(ary, comparator, p, q - 1);
    doQuickSort(ary, comparator, q + 1, r);
  }
}

/**
 * Sort the given array in-place with the given comparator function.
 *
 * @param {Array} ary
 *        An array to sort.
 * @param {function} comparator
 *        Function to use to compare two items.
 */
exports.quickSort = function (ary, comparator) {
  doQuickSort(ary, comparator, 0, ary.length - 1);
};
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var util = require('./util');
var binarySearch = require('./binary-search');
var ArraySet = require('./array-set').ArraySet;
var base64VLQ = require('./base64-vlq');
var quickSort = require('./quick-sort').quickSort;

function SourceMapConsumer(aSourceMap, aSourceMapURL) {
  var sourceMap = aSourceMap;
  if (typeof aSourceMap === 'string') {
    sourceMap = util.parseSourceMapInput(aSourceMap);
  }

  return sourceMap.sections != null
    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
}

SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
}

/**
 * The version of the source mapping spec that we are consuming.
 */
SourceMapConsumer.prototype._version = 3;

// `__generatedMappings` and `__originalMappings` are arrays that hold the
// parsed mapping coordinates from the source map's "mappings" attribute. They
// are lazily instantiated, accessed via the `_generatedMappings` and
// `_originalMappings` getters respectively, and we only parse the mappings
// and create these arrays once queried for a source location. We jump through
// these hoops because there can be many thousands of mappings, and parsing
// them is expensive, so we only want to do it if we must.
//
// Each object in the arrays is of the form:
//
//     {
//       generatedLine: The line number in the generated code,
//       generatedColumn: The column number in the generated code,
//       source: The path to the original source file that generated this
//               chunk of code,
//       originalLine: The line number in the original source that
//                     corresponds to this chunk of generated code,
//       originalColumn: The column number in the original source that
//                       corresponds to this chunk of generated code,
//       name: The name of the original symbol which generated this chunk of
//             code.
//     }
//
// All properties except for `generatedLine` and `generatedColumn` can be
// `null`.
//
// `_generatedMappings` is ordered by the generated positions.
//
// `_originalMappings` is ordered by the original positions.

SourceMapConsumer.prototype.__generatedMappings = null;
Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
  configurable: true,
  enumerable: true,
  get: function () {
    if (!this.__generatedMappings) {
      this._parseMappings(this._mappings, this.sourceRoot);
    }

    return this.__generatedMappings;
  }
});

SourceMapConsumer.prototype.__originalMappings = null;
Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
  configurable: true,
  enumerable: true,
  get: function () {
    if (!this.__originalMappings) {
      this._parseMappings(this._mappings, this.sourceRoot);
    }

    return this.__originalMappings;
  }
});

SourceMapConsumer.prototype._charIsMappingSeparator =
  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
    var c = aStr.charAt(index);
    return c === ";" || c === ",";
  };

/**
 * Parse the mappings in a string in to a data structure which we can easily
 * query (the ordered arrays in the `this.__generatedMappings` and
 * `this.__originalMappings` properties).
 */
SourceMapConsumer.prototype._parseMappings =
  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
    throw new Error("Subclasses must implement _parseMappings");
  };

SourceMapConsumer.GENERATED_ORDER = 1;
SourceMapConsumer.ORIGINAL_ORDER = 2;

SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
SourceMapConsumer.LEAST_UPPER_BOUND = 2;

/**
 * Iterate over each mapping between an original source/line/column and a
 * generated line/column in this source map.
 *
 * @param Function aCallback
 *        The function that is called with each mapping.
 * @param Object aContext
 *        Optional. If specified, this object will be the value of `this` every
 *        time that `aCallback` is called.
 * @param aOrder
 *        Either `SourceMapConsumer.GENERATED_ORDER` or
 *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
 *        iterate over the mappings sorted by the generated file's line/column
 *        order or the original's source/line/column order, respectively. Defaults to
 *        `SourceMapConsumer.GENERATED_ORDER`.
 */
SourceMapConsumer.prototype.eachMapping =
  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
    var context = aContext || null;
    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;

    var mappings;
    switch (order) {
    case SourceMapConsumer.GENERATED_ORDER:
      mappings = this._generatedMappings;
      break;
    case SourceMapConsumer.ORIGINAL_ORDER:
      mappings = this._originalMappings;
      break;
    default:
      throw new Error("Unknown order of iteration.");
    }

    var sourceRoot = this.sourceRoot;
    mappings.map(function (mapping) {
      var source = mapping.source === null ? null : this._sources.at(mapping.source);
      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
      return {
        source: source,
        generatedLine: mapping.generatedLine,
        generatedColumn: mapping.generatedColumn,
        originalLine: mapping.originalLine,
        originalColumn: mapping.originalColumn,
        name: mapping.name === null ? null : this._names.at(mapping.name)
      };
    }, this).forEach(aCallback, context);
  };

/**
 * Returns all generated line and column information for the original source,
 * line, and column provided. If no column is provided, returns all mappings
 * corresponding to a either the line we are searching for or the next
 * closest line that has any mappings. Otherwise, returns all mappings
 * corresponding to the given line and either the column we are searching for
 * or the next closest column that has any offsets.
 *
 * The only argument is an object with the following properties:
 *
 *   - source: The filename of the original source.
 *   - line: The line number in the original source.  The line number is 1-based.
 *   - column: Optional. the column number in the original source.
 *    The column number is 0-based.
 *
 * and an array of objects is returned, each with the following properties:
 *
 *   - line: The line number in the generated source, or null.  The
 *    line number is 1-based.
 *   - column: The column number in the generated source, or null.
 *    The column number is 0-based.
 */
SourceMapConsumer.prototype.allGeneratedPositionsFor =
  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
    var line = util.getArg(aArgs, 'line');

    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
    // returns the index of the closest mapping less than the needle. By
    // setting needle.originalColumn to 0, we thus find the last mapping for
    // the given line, provided such a mapping exists.
    var needle = {
      source: util.getArg(aArgs, 'source'),
      originalLine: line,
      originalColumn: util.getArg(aArgs, 'column', 0)
    };

    needle.source = this._findSourceIndex(needle.source);
    if (needle.source < 0) {
      return [];
    }

    var mappings = [];

    var index = this._findMapping(needle,
                                  this._originalMappings,
                                  "originalLine",
                                  "originalColumn",
                                  util.compareByOriginalPositions,
                                  binarySearch.LEAST_UPPER_BOUND);
    if (index >= 0) {
      var mapping = this._originalMappings[index];

      if (aArgs.column === undefined) {
        var originalLine = mapping.originalLine;

        // Iterate until either we run out of mappings, or we run into
        // a mapping for a different line than the one we found. Since
        // mappings are sorted, this is guaranteed to find all mappings for
        // the line we found.
        while (mapping && mapping.originalLine === originalLine) {
          mappings.push({
            line: util.getArg(mapping, 'generatedLine', null),
            column: util.getArg(mapping, 'generatedColumn', null),
            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
          });

          mapping = this._originalMappings[++index];
        }
      } else {
        var originalColumn = mapping.originalColumn;

        // Iterate until either we run out of mappings, or we run into
        // a mapping for a different line than the one we were searching for.
        // Since mappings are sorted, this is guaranteed to find all mappings for
        // the line we are searching for.
        while (mapping &&
               mapping.originalLine === line &&
               mapping.originalColumn == originalColumn) {
          mappings.push({
            line: util.getArg(mapping, 'generatedLine', null),
            column: util.getArg(mapping, 'generatedColumn', null),
            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
          });

          mapping = this._originalMappings[++index];
        }
      }
    }

    return mappings;
  };

exports.SourceMapConsumer = SourceMapConsumer;

/**
 * A BasicSourceMapConsumer instance represents a parsed source map which we can
 * query for information about the original file positions by giving it a file
 * position in the generated source.
 *
 * The first parameter is the raw source map (either as a JSON string, or
 * already parsed to an object). According to the spec, source maps have the
 * following attributes:
 *
 *   - version: Which version of the source map spec this map is following.
 *   - sources: An array of URLs to the original source files.
 *   - names: An array of identifiers which can be referrenced by individual mappings.
 *   - sourceRoot: Optional. The URL root from which all sources are relative.
 *   - sourcesContent: Optional. An array of contents of the original source files.
 *   - mappings: A string of base64 VLQs which contain the actual mappings.
 *   - file: Optional. The generated file this source map is associated with.
 *
 * Here is an example source map, taken from the source map spec[0]:
 *
 *     {
 *       version : 3,
 *       file: "out.js",
 *       sourceRoot : "",
 *       sources: ["foo.js", "bar.js"],
 *       names: ["src", "maps", "are", "fun"],
 *       mappings: "AA,AB;;ABCDE;"
 *     }
 *
 * The second parameter, if given, is a string whose value is the URL
 * at which the source map was found.  This URL is used to compute the
 * sources array.
 *
 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
 */
function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
  var sourceMap = aSourceMap;
  if (typeof aSourceMap === 'string') {
    sourceMap = util.parseSourceMapInput(aSourceMap);
  }

  var version = util.getArg(sourceMap, 'version');
  var sources = util.getArg(sourceMap, 'sources');
  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
  // requires the array) to play nice here.
  var names = util.getArg(sourceMap, 'names', []);
  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
  var mappings = util.getArg(sourceMap, 'mappings');
  var file = util.getArg(sourceMap, 'file', null);

  // Once again, Sass deviates from the spec and supplies the version as a
  // string rather than a number, so we use loose equality checking here.
  if (version != this._version) {
    throw new Error('Unsupported version: ' + version);
  }

  if (sourceRoot) {
    sourceRoot = util.normalize(sourceRoot);
  }

  sources = sources
    .map(String)
    // Some source maps produce relative source paths like "./foo.js" instead of
    // "foo.js".  Normalize these first so that future comparisons will succeed.
    // See bugzil.la/1090768.
    .map(util.normalize)
    // Always ensure that absolute sources are internally stored relative to
    // the source root, if the source root is absolute. Not doing this would
    // be particularly problematic when the source root is a prefix of the
    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
    .map(function (source) {
      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
        ? util.relative(sourceRoot, source)
        : source;
    });

  // Pass `true` below to allow duplicate names and sources. While source maps
  // are intended to be compressed and deduplicated, the TypeScript compiler
  // sometimes generates source maps with duplicates in them. See Github issue
  // #72 and bugzil.la/889492.
  this._names = ArraySet.fromArray(names.map(String), true);
  this._sources = ArraySet.fromArray(sources, true);

  this._absoluteSources = this._sources.toArray().map(function (s) {
    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
  });

  this.sourceRoot = sourceRoot;
  this.sourcesContent = sourcesContent;
  this._mappings = mappings;
  this._sourceMapURL = aSourceMapURL;
  this.file = file;
}

BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;

/**
 * Utility function to find the index of a source.  Returns -1 if not
 * found.
 */
BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
  var relativeSource = aSource;
  if (this.sourceRoot != null) {
    relativeSource = util.relative(this.sourceRoot, relativeSource);
  }

  if (this._sources.has(relativeSource)) {
    return this._sources.indexOf(relativeSource);
  }

  // Maybe aSource is an absolute URL as returned by |sources|.  In
  // this case we can't simply undo the transform.
  var i;
  for (i = 0; i < this._absoluteSources.length; ++i) {
    if (this._absoluteSources[i] == aSource) {
      return i;
    }
  }

  return -1;
};

/**
 * Create a BasicSourceMapConsumer from a SourceMapGenerator.
 *
 * @param SourceMapGenerator aSourceMap
 *        The source map that will be consumed.
 * @param String aSourceMapURL
 *        The URL at which the source map can be found (optional)
 * @returns BasicSourceMapConsumer
 */
BasicSourceMapConsumer.fromSourceMap =
  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
    var smc = Object.create(BasicSourceMapConsumer.prototype);

    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
    smc.sourceRoot = aSourceMap._sourceRoot;
    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
                                                            smc.sourceRoot);
    smc.file = aSourceMap._file;
    smc._sourceMapURL = aSourceMapURL;
    smc._absoluteSources = smc._sources.toArray().map(function (s) {
      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
    });

    // Because we are modifying the entries (by converting string sources and
    // names to indices into the sources and names ArraySets), we have to make
    // a copy of the entry or else bad things happen. Shared mutable state
    // strikes again! See github issue #191.

    var generatedMappings = aSourceMap._mappings.toArray().slice();
    var destGeneratedMappings = smc.__generatedMappings = [];
    var destOriginalMappings = smc.__originalMappings = [];

    for (var i = 0, length = generatedMappings.length; i < length; i++) {
      var srcMapping = generatedMappings[i];
      var destMapping = new Mapping;
      destMapping.generatedLine = srcMapping.generatedLine;
      destMapping.generatedColumn = srcMapping.generatedColumn;

      if (srcMapping.source) {
        destMapping.source = sources.indexOf(srcMapping.source);
        destMapping.originalLine = srcMapping.originalLine;
        destMapping.originalColumn = srcMapping.originalColumn;

        if (srcMapping.name) {
          destMapping.name = names.indexOf(srcMapping.name);
        }

        destOriginalMappings.push(destMapping);
      }

      destGeneratedMappings.push(destMapping);
    }

    quickSort(smc.__originalMappings, util.compareByOriginalPositions);

    return smc;
  };

/**
 * The version of the source mapping spec that we are consuming.
 */
BasicSourceMapConsumer.prototype._version = 3;

/**
 * The list of original sources.
 */
Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
  get: function () {
    return this._absoluteSources.slice();
  }
});

/**
 * Provide the JIT with a nice shape / hidden class.
 */
function Mapping() {
  this.generatedLine = 0;
  this.generatedColumn = 0;
  this.source = null;
  this.originalLine = null;
  this.originalColumn = null;
  this.name = null;
}

/**
 * Parse the mappings in a string in to a data structure which we can easily
 * query (the ordered arrays in the `this.__generatedMappings` and
 * `this.__originalMappings` properties).
 */
BasicSourceMapConsumer.prototype._parseMappings =
  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
    var generatedLine = 1;
    var previousGeneratedColumn = 0;
    var previousOriginalLine = 0;
    var previousOriginalColumn = 0;
    var previousSource = 0;
    var previousName = 0;
    var length = aStr.length;
    var index = 0;
    var cachedSegments = {};
    var temp = {};
    var originalMappings = [];
    var generatedMappings = [];
    var mapping, str, segment, end, value;

    while (index < length) {
      if (aStr.charAt(index) === ';') {
        generatedLine++;
        index++;
        previousGeneratedColumn = 0;
      }
      else if (aStr.charAt(index) === ',') {
        index++;
      }
      else {
        mapping = new Mapping();
        mapping.generatedLine = generatedLine;

        // Because each offset is encoded relative to the previous one,
        // many segments often have the same encoding. We can exploit this
        // fact by caching the parsed variable length fields of each segment,
        // allowing us to avoid a second parse if we encounter the same
        // segment again.
        for (end = index; end < length; end++) {
          if (this._charIsMappingSeparator(aStr, end)) {
            break;
          }
        }
        str = aStr.slice(index, end);

        segment = cachedSegments[str];
        if (segment) {
          index += str.length;
        } else {
          segment = [];
          while (index < end) {
            base64VLQ.decode(aStr, index, temp);
            value = temp.value;
            index = temp.rest;
            segment.push(value);
          }

          if (segment.length === 2) {
            throw new Error('Found a source, but no line and column');
          }

          if (segment.length === 3) {
            throw new Error('Found a source and line, but no column');
          }

          cachedSegments[str] = segment;
        }

        // Generated column.
        mapping.generatedColumn = previousGeneratedColumn + segment[0];
        previousGeneratedColumn = mapping.generatedColumn;

        if (segment.length > 1) {
          // Original source.
          mapping.source = previousSource + segment[1];
          previousSource += segment[1];

          // Original line.
          mapping.originalLine = previousOriginalLine + segment[2];
          previousOriginalLine = mapping.originalLine;
          // Lines are stored 0-based
          mapping.originalLine += 1;

          // Original column.
          mapping.originalColumn = previousOriginalColumn + segment[3];
          previousOriginalColumn = mapping.originalColumn;

          if (segment.length > 4) {
            // Original name.
            mapping.name = previousName + segment[4];
            previousName += segment[4];
          }
        }

        generatedMappings.push(mapping);
        if (typeof mapping.originalLine === 'number') {
          originalMappings.push(mapping);
        }
      }
    }

    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
    this.__generatedMappings = generatedMappings;

    quickSort(originalMappings, util.compareByOriginalPositions);
    this.__originalMappings = originalMappings;
  };

/**
 * Find the mapping that best matches the hypothetical "needle" mapping that
 * we are searching for in the given "haystack" of mappings.
 */
BasicSourceMapConsumer.prototype._findMapping =
  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
                                         aColumnName, aComparator, aBias) {
    // To return the position we are searching for, we must first find the
    // mapping for the given position and then return the opposite position it
    // points to. Because the mappings are sorted, we can use binary search to
    // find the best mapping.

    if (aNeedle[aLineName] <= 0) {
      throw new TypeError('Line must be greater than or equal to 1, got '
                          + aNeedle[aLineName]);
    }
    if (aNeedle[aColumnName] < 0) {
      throw new TypeError('Column must be greater than or equal to 0, got '
                          + aNeedle[aColumnName]);
    }

    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
  };

/**
 * Compute the last column for each generated mapping. The last column is
 * inclusive.
 */
BasicSourceMapConsumer.prototype.computeColumnSpans =
  function SourceMapConsumer_computeColumnSpans() {
    for (var index = 0; index < this._generatedMappings.length; ++index) {
      var mapping = this._generatedMappings[index];

      // Mappings do not contain a field for the last generated columnt. We
      // can come up with an optimistic estimate, however, by assuming that
      // mappings are contiguous (i.e. given two consecutive mappings, the
      // first mapping ends where the second one starts).
      if (index + 1 < this._generatedMappings.length) {
        var nextMapping = this._generatedMappings[index + 1];

        if (mapping.generatedLine === nextMapping.generatedLine) {
          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
          continue;
        }
      }

      // The last mapping for each line spans the entire line.
      mapping.lastGeneratedColumn = Infinity;
    }
  };

/**
 * Returns the original source, line, and column information for the generated
 * source's line and column positions provided. The only argument is an object
 * with the following properties:
 *
 *   - line: The line number in the generated source.  The line number
 *     is 1-based.
 *   - column: The column number in the generated source.  The column
 *     number is 0-based.
 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
 *
 * and an object is returned with the following properties:
 *
 *   - source: The original source file, or null.
 *   - line: The line number in the original source, or null.  The
 *     line number is 1-based.
 *   - column: The column number in the original source, or null.  The
 *     column number is 0-based.
 *   - name: The original identifier, or null.
 */
BasicSourceMapConsumer.prototype.originalPositionFor =
  function SourceMapConsumer_originalPositionFor(aArgs) {
    var needle = {
      generatedLine: util.getArg(aArgs, 'line'),
      generatedColumn: util.getArg(aArgs, 'column')
    };

    var index = this._findMapping(
      needle,
      this._generatedMappings,
      "generatedLine",
      "generatedColumn",
      util.compareByGeneratedPositionsDeflated,
      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
    );

    if (index >= 0) {
      var mapping = this._generatedMappings[index];

      if (mapping.generatedLine === needle.generatedLine) {
        var source = util.getArg(mapping, 'source', null);
        if (source !== null) {
          source = this._sources.at(source);
          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
        }
        var name = util.getArg(mapping, 'name', null);
        if (name !== null) {
          name = this._names.at(name);
        }
        return {
          source: source,
          line: util.getArg(mapping, 'originalLine', null),
          column: util.getArg(mapping, 'originalColumn', null),
          name: name
        };
      }
    }

    return {
      source: null,
      line: null,
      column: null,
      name: null
    };
  };

/**
 * Return true if we have the source content for every source in the source
 * map, false otherwise.
 */
BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
  function BasicSourceMapConsumer_hasContentsOfAllSources() {
    if (!this.sourcesContent) {
      return false;
    }
    return this.sourcesContent.length >= this._sources.size() &&
      !this.sourcesContent.some(function (sc) { return sc == null; });
  };

/**
 * Returns the original source content. The only argument is the url of the
 * original source file. Returns null if no original source content is
 * available.
 */
BasicSourceMapConsumer.prototype.sourceContentFor =
  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
    if (!this.sourcesContent) {
      return null;
    }

    var index = this._findSourceIndex(aSource);
    if (index >= 0) {
      return this.sourcesContent[index];
    }

    var relativeSource = aSource;
    if (this.sourceRoot != null) {
      relativeSource = util.relative(this.sourceRoot, relativeSource);
    }

    var url;
    if (this.sourceRoot != null
        && (url = util.urlParse(this.sourceRoot))) {
      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
      // many users. We can help them out when they expect file:// URIs to
      // behave like it would if they were running a local HTTP server. See
      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
      if (url.scheme == "file"
          && this._sources.has(fileUriAbsPath)) {
        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
      }

      if ((!url.path || url.path == "/")
          && this._sources.has("/" + relativeSource)) {
        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
      }
    }

    // This function is used recursively from
    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
    // don't want to throw if we can't find the source - we just want to
    // return null, so we provide a flag to exit gracefully.
    if (nullOnMissing) {
      return null;
    }
    else {
      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
    }
  };

/**
 * Returns the generated line and column information for the original source,
 * line, and column positions provided. The only argument is an object with
 * the following properties:
 *
 *   - source: The filename of the original source.
 *   - line: The line number in the original source.  The line number
 *     is 1-based.
 *   - column: The column number in the original source.  The column
 *     number is 0-based.
 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
 *
 * and an object is returned with the following properties:
 *
 *   - line: The line number in the generated source, or null.  The
 *     line number is 1-based.
 *   - column: The column number in the generated source, or null.
 *     The column number is 0-based.
 */
BasicSourceMapConsumer.prototype.generatedPositionFor =
  function SourceMapConsumer_generatedPositionFor(aArgs) {
    var source = util.getArg(aArgs, 'source');
    source = this._findSourceIndex(source);
    if (source < 0) {
      return {
        line: null,
        column: null,
        lastColumn: null
      };
    }

    var needle = {
      source: source,
      originalLine: util.getArg(aArgs, 'line'),
      originalColumn: util.getArg(aArgs, 'column')
    };

    var index = this._findMapping(
      needle,
      this._originalMappings,
      "originalLine",
      "originalColumn",
      util.compareByOriginalPositions,
      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
    );

    if (index >= 0) {
      var mapping = this._originalMappings[index];

      if (mapping.source === needle.source) {
        return {
          line: util.getArg(mapping, 'generatedLine', null),
          column: util.getArg(mapping, 'generatedColumn', null),
          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
        };
      }
    }

    return {
      line: null,
      column: null,
      lastColumn: null
    };
  };

exports.BasicSourceMapConsumer = BasicSourceMapConsumer;

/**
 * An IndexedSourceMapConsumer instance represents a parsed source map which
 * we can query for information. It differs from BasicSourceMapConsumer in
 * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
 * input.
 *
 * The first parameter is a raw source map (either as a JSON string, or already
 * parsed to an object). According to the spec for indexed source maps, they
 * have the following attributes:
 *
 *   - version: Which version of the source map spec this map is following.
 *   - file: Optional. The generated file this source map is associated with.
 *   - sections: A list of section definitions.
 *
 * Each value under the "sections" field has two fields:
 *   - offset: The offset into the original specified at which this section
 *       begins to apply, defined as an object with a "line" and "column"
 *       field.
 *   - map: A source map definition. This source map could also be indexed,
 *       but doesn't have to be.
 *
 * Instead of the "map" field, it's also possible to have a "url" field
 * specifying a URL to retrieve a source map from, but that's currently
 * unsupported.
 *
 * Here's an example source map, taken from the source map spec[0], but
 * modified to omit a section which uses the "url" field.
 *
 *  {
 *    version : 3,
 *    file: "app.js",
 *    sections: [{
 *      offset: {line:100, column:10},
 *      map: {
 *        version : 3,
 *        file: "section.js",
 *        sources: ["foo.js", "bar.js"],
 *        names: ["src", "maps", "are", "fun"],
 *        mappings: "AAAA,E;;ABCDE;"
 *      }
 *    }],
 *  }
 *
 * The second parameter, if given, is a string whose value is the URL
 * at which the source map was found.  This URL is used to compute the
 * sources array.
 *
 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
 */
function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
  var sourceMap = aSourceMap;
  if (typeof aSourceMap === 'string') {
    sourceMap = util.parseSourceMapInput(aSourceMap);
  }

  var version = util.getArg(sourceMap, 'version');
  var sections = util.getArg(sourceMap, 'sections');

  if (version != this._version) {
    throw new Error('Unsupported version: ' + version);
  }

  this._sources = new ArraySet();
  this._names = new ArraySet();

  var lastOffset = {
    line: -1,
    column: 0
  };
  this._sections = sections.map(function (s) {
    if (s.url) {
      // The url field will require support for asynchronicity.
      // See https://github.com/mozilla/source-map/issues/16
      throw new Error('Support for url field in sections not implemented.');
    }
    var offset = util.getArg(s, 'offset');
    var offsetLine = util.getArg(offset, 'line');
    var offsetColumn = util.getArg(offset, 'column');

    if (offsetLine < lastOffset.line ||
        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
      throw new Error('Section offsets must be ordered and non-overlapping.');
    }
    lastOffset = offset;

    return {
      generatedOffset: {
        // The offset fields are 0-based, but we use 1-based indices when
        // encoding/decoding from VLQ.
        generatedLine: offsetLine + 1,
        generatedColumn: offsetColumn + 1
      },
      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
    }
  });
}

IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;

/**
 * The version of the source mapping spec that we are consuming.
 */
IndexedSourceMapConsumer.prototype._version = 3;

/**
 * The list of original sources.
 */
Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
  get: function () {
    var sources = [];
    for (var i = 0; i < this._sections.length; i++) {
      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
        sources.push(this._sections[i].consumer.sources[j]);
      }
    }
    return sources;
  }
});

/**
 * Returns the original source, line, and column information for the generated
 * source's line and column positions provided. The only argument is an object
 * with the following properties:
 *
 *   - line: The line number in the generated source.  The line number
 *     is 1-based.
 *   - column: The column number in the generated source.  The column
 *     number is 0-based.
 *
 * and an object is returned with the following properties:
 *
 *   - source: The original source file, or null.
 *   - line: The line number in the original source, or null.  The
 *     line number is 1-based.
 *   - column: The column number in the original source, or null.  The
 *     column number is 0-based.
 *   - name: The original identifier, or null.
 */
IndexedSourceMapConsumer.prototype.originalPositionFor =
  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
    var needle = {
      generatedLine: util.getArg(aArgs, 'line'),
      generatedColumn: util.getArg(aArgs, 'column')
    };

    // Find the section containing the generated position we're trying to map
    // to an original position.
    var sectionIndex = binarySearch.search(needle, this._sections,
      function(needle, section) {
        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
        if (cmp) {
          return cmp;
        }

        return (needle.generatedColumn -
                section.generatedOffset.generatedColumn);
      });
    var section = this._sections[sectionIndex];

    if (!section) {
      return {
        source: null,
        line: null,
        column: null,
        name: null
      };
    }

    return section.consumer.originalPositionFor({
      line: needle.generatedLine -
        (section.generatedOffset.generatedLine - 1),
      column: needle.generatedColumn -
        (section.generatedOffset.generatedLine === needle.generatedLine
         ? section.generatedOffset.generatedColumn - 1
         : 0),
      bias: aArgs.bias
    });
  };

/**
 * Return true if we have the source content for every source in the source
 * map, false otherwise.
 */
IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
    return this._sections.every(function (s) {
      return s.consumer.hasContentsOfAllSources();
    });
  };

/**
 * Returns the original source content. The only argument is the url of the
 * original source file. Returns null if no original source content is
 * available.
 */
IndexedSourceMapConsumer.prototype.sourceContentFor =
  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
    for (var i = 0; i < this._sections.length; i++) {
      var section = this._sections[i];

      var content = section.consumer.sourceContentFor(aSource, true);
      if (content) {
        return content;
      }
    }
    if (nullOnMissing) {
      return null;
    }
    else {
      throw new Error('"' + aSource + '" is not in the SourceMap.');
    }
  };

/**
 * Returns the generated line and column information for the original source,
 * line, and column positions provided. The only argument is an object with
 * the following properties:
 *
 *   - source: The filename of the original source.
 *   - line: The line number in the original source.  The line number
 *     is 1-based.
 *   - column: The column number in the original source.  The column
 *     number is 0-based.
 *
 * and an object is returned with the following properties:
 *
 *   - line: The line number in the generated source, or null.  The
 *     line number is 1-based. 
 *   - column: The column number in the generated source, or null.
 *     The column number is 0-based.
 */
IndexedSourceMapConsumer.prototype.generatedPositionFor =
  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
    for (var i = 0; i < this._sections.length; i++) {
      var section = this._sections[i];

      // Only consider this section if the requested source is in the list of
      // sources of the consumer.
      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
        continue;
      }
      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
      if (generatedPosition) {
        var ret = {
          line: generatedPosition.line +
            (section.generatedOffset.generatedLine - 1),
          column: generatedPosition.column +
            (section.generatedOffset.generatedLine === generatedPosition.line
             ? section.generatedOffset.generatedColumn - 1
             : 0)
        };
        return ret;
      }
    }

    return {
      line: null,
      column: null
    };
  };

/**
 * Parse the mappings in a string in to a data structure which we can easily
 * query (the ordered arrays in the `this.__generatedMappings` and
 * `this.__originalMappings` properties).
 */
IndexedSourceMapConsumer.prototype._parseMappings =
  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
    this.__generatedMappings = [];
    this.__originalMappings = [];
    for (var i = 0; i < this._sections.length; i++) {
      var section = this._sections[i];
      var sectionMappings = section.consumer._generatedMappings;
      for (var j = 0; j < sectionMappings.length; j++) {
        var mapping = sectionMappings[j];

        var source = section.consumer._sources.at(mapping.source);
        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
        this._sources.add(source);
        source = this._sources.indexOf(source);

        var name = null;
        if (mapping.name) {
          name = section.consumer._names.at(mapping.name);
          this._names.add(name);
          name = this._names.indexOf(name);
        }

        // The mappings coming from the consumer for the section have
        // generated positions relative to the start of the section, so we
        // need to offset them to be relative to the start of the concatenated
        // generated file.
        var adjustedMapping = {
          source: source,
          generatedLine: mapping.generatedLine +
            (section.generatedOffset.generatedLine - 1),
          generatedColumn: mapping.generatedColumn +
            (section.generatedOffset.generatedLine === mapping.generatedLine
            ? section.generatedOffset.generatedColumn - 1
            : 0),
          originalLine: mapping.originalLine,
          originalColumn: mapping.originalColumn,
          name: name
        };

        this.__generatedMappings.push(adjustedMapping);
        if (typeof adjustedMapping.originalLine === 'number') {
          this.__originalMappings.push(adjustedMapping);
        }
      }
    }

    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
    quickSort(this.__originalMappings, util.compareByOriginalPositions);
  };

exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var base64VLQ = require('./base64-vlq');
var util = require('./util');
var ArraySet = require('./array-set').ArraySet;
var MappingList = require('./mapping-list').MappingList;

/**
 * An instance of the SourceMapGenerator represents a source map which is
 * being built incrementally. You may pass an object with the following
 * properties:
 *
 *   - file: The filename of the generated source.
 *   - sourceRoot: A root for all relative URLs in this source map.
 */
function SourceMapGenerator(aArgs) {
  if (!aArgs) {
    aArgs = {};
  }
  this._file = util.getArg(aArgs, 'file', null);
  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
  this._sources = new ArraySet();
  this._names = new ArraySet();
  this._mappings = new MappingList();
  this._sourcesContents = null;
}

SourceMapGenerator.prototype._version = 3;

/**
 * Creates a new SourceMapGenerator based on a SourceMapConsumer
 *
 * @param aSourceMapConsumer The SourceMap.
 */
SourceMapGenerator.fromSourceMap =
  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
    var sourceRoot = aSourceMapConsumer.sourceRoot;
    var generator = new SourceMapGenerator({
      file: aSourceMapConsumer.file,
      sourceRoot: sourceRoot
    });
    aSourceMapConsumer.eachMapping(function (mapping) {
      var newMapping = {
        generated: {
          line: mapping.generatedLine,
          column: mapping.generatedColumn
        }
      };

      if (mapping.source != null) {
        newMapping.source = mapping.source;
        if (sourceRoot != null) {
          newMapping.source = util.relative(sourceRoot, newMapping.source);
        }

        newMapping.original = {
          line: mapping.originalLine,
          column: mapping.originalColumn
        };

        if (mapping.name != null) {
          newMapping.name = mapping.name;
        }
      }

      generator.addMapping(newMapping);
    });
    aSourceMapConsumer.sources.forEach(function (sourceFile) {
      var sourceRelative = sourceFile;
      if (sourceRoot !== null) {
        sourceRelative = util.relative(sourceRoot, sourceFile);
      }

      if (!generator._sources.has(sourceRelative)) {
        generator._sources.add(sourceRelative);
      }

      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
      if (content != null) {
        generator.setSourceContent(sourceFile, content);
      }
    });
    return generator;
  };

/**
 * Add a single mapping from original source line and column to the generated
 * source's line and column for this source map being created. The mapping
 * object should have the following properties:
 *
 *   - generated: An object with the generated line and column positions.
 *   - original: An object with the original line and column positions.
 *   - source: The original source file (relative to the sourceRoot).
 *   - name: An optional original token name for this mapping.
 */
SourceMapGenerator.prototype.addMapping =
  function SourceMapGenerator_addMapping(aArgs) {
    var generated = util.getArg(aArgs, 'generated');
    var original = util.getArg(aArgs, 'original', null);
    var source = util.getArg(aArgs, 'source', null);
    var name = util.getArg(aArgs, 'name', null);

    if (!this._skipValidation) {
      this._validateMapping(generated, original, source, name);
    }

    if (source != null) {
      source = String(source);
      if (!this._sources.has(source)) {
        this._sources.add(source);
      }
    }

    if (name != null) {
      name = String(name);
      if (!this._names.has(name)) {
        this._names.add(name);
      }
    }

    this._mappings.add({
      generatedLine: generated.line,
      generatedColumn: generated.column,
      originalLine: original != null && original.line,
      originalColumn: original != null && original.column,
      source: source,
      name: name
    });
  };

/**
 * Set the source content for a source file.
 */
SourceMapGenerator.prototype.setSourceContent =
  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
    var source = aSourceFile;
    if (this._sourceRoot != null) {
      source = util.relative(this._sourceRoot, source);
    }

    if (aSourceContent != null) {
      // Add the source content to the _sourcesContents map.
      // Create a new _sourcesContents map if the property is null.
      if (!this._sourcesContents) {
        this._sourcesContents = Object.create(null);
      }
      this._sourcesContents[util.toSetString(source)] = aSourceContent;
    } else if (this._sourcesContents) {
      // Remove the source file from the _sourcesContents map.
      // If the _sourcesContents map is empty, set the property to null.
      delete this._sourcesContents[util.toSetString(source)];
      if (Object.keys(this._sourcesContents).length === 0) {
        this._sourcesContents = null;
      }
    }
  };

/**
 * Applies the mappings of a sub-source-map for a specific source file to the
 * source map being generated. Each mapping to the supplied source file is
 * rewritten using the supplied source map. Note: The resolution for the
 * resulting mappings is the minimium of this map and the supplied map.
 *
 * @param aSourceMapConsumer The source map to be applied.
 * @param aSourceFile Optional. The filename of the source file.
 *        If omitted, SourceMapConsumer's file property will be used.
 * @param aSourceMapPath Optional. The dirname of the path to the source map
 *        to be applied. If relative, it is relative to the SourceMapConsumer.
 *        This parameter is needed when the two source maps aren't in the same
 *        directory, and the source map to be applied contains relative source
 *        paths. If so, those relative source paths need to be rewritten
 *        relative to the SourceMapGenerator.
 */
SourceMapGenerator.prototype.applySourceMap =
  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
    var sourceFile = aSourceFile;
    // If aSourceFile is omitted, we will use the file property of the SourceMap
    if (aSourceFile == null) {
      if (aSourceMapConsumer.file == null) {
        throw new Error(
          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
          'or the source map\'s "file" property. Both were omitted.'
        );
      }
      sourceFile = aSourceMapConsumer.file;
    }
    var sourceRoot = this._sourceRoot;
    // Make "sourceFile" relative if an absolute Url is passed.
    if (sourceRoot != null) {
      sourceFile = util.relative(sourceRoot, sourceFile);
    }
    // Applying the SourceMap can add and remove items from the sources and
    // the names array.
    var newSources = new ArraySet();
    var newNames = new ArraySet();

    // Find mappings for the "sourceFile"
    this._mappings.unsortedForEach(function (mapping) {
      if (mapping.source === sourceFile && mapping.originalLine != null) {
        // Check if it can be mapped by the source map, then update the mapping.
        var original = aSourceMapConsumer.originalPositionFor({
          line: mapping.originalLine,
          column: mapping.originalColumn
        });
        if (original.source != null) {
          // Copy mapping
          mapping.source = original.source;
          if (aSourceMapPath != null) {
            mapping.source = util.join(aSourceMapPath, mapping.source)
          }
          if (sourceRoot != null) {
            mapping.source = util.relative(sourceRoot, mapping.source);
          }
          mapping.originalLine = original.line;
          mapping.originalColumn = original.column;
          if (original.name != null) {
            mapping.name = original.name;
          }
        }
      }

      var source = mapping.source;
      if (source != null && !newSources.has(source)) {
        newSources.add(source);
      }

      var name = mapping.name;
      if (name != null && !newNames.has(name)) {
        newNames.add(name);
      }

    }, this);
    this._sources = newSources;
    this._names = newNames;

    // Copy sourcesContents of applied map.
    aSourceMapConsumer.sources.forEach(function (sourceFile) {
      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
      if (content != null) {
        if (aSourceMapPath != null) {
          sourceFile = util.join(aSourceMapPath, sourceFile);
        }
        if (sourceRoot != null) {
          sourceFile = util.relative(sourceRoot, sourceFile);
        }
        this.setSourceContent(sourceFile, content);
      }
    }, this);
  };

/**
 * A mapping can have one of the three levels of data:
 *
 *   1. Just the generated position.
 *   2. The Generated position, original position, and original source.
 *   3. Generated and original position, original source, as well as a name
 *      token.
 *
 * To maintain consistency, we validate that any new mapping being added falls
 * in to one of these categories.
 */
SourceMapGenerator.prototype._validateMapping =
  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
                                              aName) {
    // When aOriginal is truthy but has empty values for .line and .column,
    // it is most likely a programmer error. In this case we throw a very
    // specific error message to try to guide them the right way.
    // For example: https://github.com/Polymer/polymer-bundler/pull/519
    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
        throw new Error(
            'original.line and original.column are not numbers -- you probably meant to omit ' +
            'the original mapping entirely and only map the generated position. If so, pass ' +
            'null for the original mapping instead of an object with empty or null values.'
        );
    }

    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
        && aGenerated.line > 0 && aGenerated.column >= 0
        && !aOriginal && !aSource && !aName) {
      // Case 1.
      return;
    }
    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
             && aGenerated.line > 0 && aGenerated.column >= 0
             && aOriginal.line > 0 && aOriginal.column >= 0
             && aSource) {
      // Cases 2 and 3.
      return;
    }
    else {
      throw new Error('Invalid mapping: ' + JSON.stringify({
        generated: aGenerated,
        source: aSource,
        original: aOriginal,
        name: aName
      }));
    }
  };

/**
 * Serialize the accumulated mappings in to the stream of base 64 VLQs
 * specified by the source map format.
 */
SourceMapGenerator.prototype._serializeMappings =
  function SourceMapGenerator_serializeMappings() {
    var previousGeneratedColumn = 0;
    var previousGeneratedLine = 1;
    var previousOriginalColumn = 0;
    var previousOriginalLine = 0;
    var previousName = 0;
    var previousSource = 0;
    var result = '';
    var next;
    var mapping;
    var nameIdx;
    var sourceIdx;

    var mappings = this._mappings.toArray();
    for (var i = 0, len = mappings.length; i < len; i++) {
      mapping = mappings[i];
      next = ''

      if (mapping.generatedLine !== previousGeneratedLine) {
        previousGeneratedColumn = 0;
        while (mapping.generatedLine !== previousGeneratedLine) {
          next += ';';
          previousGeneratedLine++;
        }
      }
      else {
        if (i > 0) {
          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
            continue;
          }
          next += ',';
        }
      }

      next += base64VLQ.encode(mapping.generatedColumn
                                 - previousGeneratedColumn);
      previousGeneratedColumn = mapping.generatedColumn;

      if (mapping.source != null) {
        sourceIdx = this._sources.indexOf(mapping.source);
        next += base64VLQ.encode(sourceIdx - previousSource);
        previousSource = sourceIdx;

        // lines are stored 0-based in SourceMap spec version 3
        next += base64VLQ.encode(mapping.originalLine - 1
                                   - previousOriginalLine);
        previousOriginalLine = mapping.originalLine - 1;

        next += base64VLQ.encode(mapping.originalColumn
                                   - previousOriginalColumn);
        previousOriginalColumn = mapping.originalColumn;

        if (mapping.name != null) {
          nameIdx = this._names.indexOf(mapping.name);
          next += base64VLQ.encode(nameIdx - previousName);
          previousName = nameIdx;
        }
      }

      result += next;
    }

    return result;
  };

SourceMapGenerator.prototype._generateSourcesContent =
  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
    return aSources.map(function (source) {
      if (!this._sourcesContents) {
        return null;
      }
      if (aSourceRoot != null) {
        source = util.relative(aSourceRoot, source);
      }
      var key = util.toSetString(source);
      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
        ? this._sourcesContents[key]
        : null;
    }, this);
  };

/**
 * Externalize the source map.
 */
SourceMapGenerator.prototype.toJSON =
  function SourceMapGenerator_toJSON() {
    var map = {
      version: this._version,
      sources: this._sources.toArray(),
      names: this._names.toArray(),
      mappings: this._serializeMappings()
    };
    if (this._file != null) {
      map.file = this._file;
    }
    if (this._sourceRoot != null) {
      map.sourceRoot = this._sourceRoot;
    }
    if (this._sourcesContents) {
      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
    }

    return map;
  };

/**
 * Render the source map being generated to a string.
 */
SourceMapGenerator.prototype.toString =
  function SourceMapGenerator_toString() {
    return JSON.stringify(this.toJSON());
  };

exports.SourceMapGenerator = SourceMapGenerator;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
var util = require('./util');

// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
// operating systems these days (capturing the result).
var REGEX_NEWLINE = /(\r?\n)/;

// Newline character code for charCodeAt() comparisons
var NEWLINE_CODE = 10;

// Private symbol for identifying `SourceNode`s when multiple versions of
// the source-map library are loaded. This MUST NOT CHANGE across
// versions!
var isSourceNode = "$$$isSourceNode$$$";

/**
 * SourceNodes provide a way to abstract over interpolating/concatenating
 * snippets of generated JavaScript source code while maintaining the line and
 * column information associated with the original source code.
 *
 * @param aLine The original line number.
 * @param aColumn The original column number.
 * @param aSource The original source's filename.
 * @param aChunks Optional. An array of strings which are snippets of
 *        generated JS, or other SourceNodes.
 * @param aName The original identifier.
 */
function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
  this.children = [];
  this.sourceContents = {};
  this.line = aLine == null ? null : aLine;
  this.column = aColumn == null ? null : aColumn;
  this.source = aSource == null ? null : aSource;
  this.name = aName == null ? null : aName;
  this[isSourceNode] = true;
  if (aChunks != null) this.add(aChunks);
}

/**
 * Creates a SourceNode from generated code and a SourceMapConsumer.
 *
 * @param aGeneratedCode The generated code
 * @param aSourceMapConsumer The SourceMap for the generated code
 * @param aRelativePath Optional. The path that relative sources in the
 *        SourceMapConsumer should be relative to.
 */
SourceNode.fromStringWithSourceMap =
  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
    // The SourceNode we want to fill with the generated code
    // and the SourceMap
    var node = new SourceNode();

    // All even indices of this array are one line of the generated code,
    // while all odd indices are the newlines between two adjacent lines
    // (since `REGEX_NEWLINE` captures its match).
    // Processed fragments are accessed by calling `shiftNextLine`.
    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
    var remainingLinesIndex = 0;
    var shiftNextLine = function() {
      var lineContents = getNextLine();
      // The last line of a file might not have a newline.
      var newLine = getNextLine() || "";
      return lineContents + newLine;

      function getNextLine() {
        return remainingLinesIndex < remainingLines.length ?
            remainingLines[remainingLinesIndex++] : undefined;
      }
    };

    // We need to remember the position of "remainingLines"
    var lastGeneratedLine = 1, lastGeneratedColumn = 0;

    // The generate SourceNodes we need a code range.
    // To extract it current and last mapping is used.
    // Here we store the last mapping.
    var lastMapping = null;

    aSourceMapConsumer.eachMapping(function (mapping) {
      if (lastMapping !== null) {
        // We add the code from "lastMapping" to "mapping":
        // First check if there is a new line in between.
        if (lastGeneratedLine < mapping.generatedLine) {
          // Associate first line with "lastMapping"
          addMappingWithCode(lastMapping, shiftNextLine());
          lastGeneratedLine++;
          lastGeneratedColumn = 0;
          // The remaining code is added without mapping
        } else {
          // There is no new line in between.
          // Associate the code between "lastGeneratedColumn" and
          // "mapping.generatedColumn" with "lastMapping"
          var nextLine = remainingLines[remainingLinesIndex] || '';
          var code = nextLine.substr(0, mapping.generatedColumn -
                                        lastGeneratedColumn);
          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
                                              lastGeneratedColumn);
          lastGeneratedColumn = mapping.generatedColumn;
          addMappingWithCode(lastMapping, code);
          // No more remaining code, continue
          lastMapping = mapping;
          return;
        }
      }
      // We add the generated code until the first mapping
      // to the SourceNode without any mapping.
      // Each line is added as separate string.
      while (lastGeneratedLine < mapping.generatedLine) {
        node.add(shiftNextLine());
        lastGeneratedLine++;
      }
      if (lastGeneratedColumn < mapping.generatedColumn) {
        var nextLine = remainingLines[remainingLinesIndex] || '';
        node.add(nextLine.substr(0, mapping.generatedColumn));
        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
        lastGeneratedColumn = mapping.generatedColumn;
      }
      lastMapping = mapping;
    }, this);
    // We have processed all mappings.
    if (remainingLinesIndex < remainingLines.length) {
      if (lastMapping) {
        // Associate the remaining code in the current line with "lastMapping"
        addMappingWithCode(lastMapping, shiftNextLine());
      }
      // and add the remaining lines without any mapping
      node.add(remainingLines.splice(remainingLinesIndex).join(""));
    }

    // Copy sourcesContent into SourceNode
    aSourceMapConsumer.sources.forEach(function (sourceFile) {
      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
      if (content != null) {
        if (aRelativePath != null) {
          sourceFile = util.join(aRelativePath, sourceFile);
        }
        node.setSourceContent(sourceFile, content);
      }
    });

    return node;

    function addMappingWithCode(mapping, code) {
      if (mapping === null || mapping.source === undefined) {
        node.add(code);
      } else {
        var source = aRelativePath
          ? util.join(aRelativePath, mapping.source)
          : mapping.source;
        node.add(new SourceNode(mapping.originalLine,
                                mapping.originalColumn,
                                source,
                                code,
                                mapping.name));
      }
    }
  };

/**
 * Add a chunk of generated JS to this source node.
 *
 * @param aChunk A string snippet of generated JS code, another instance of
 *        SourceNode, or an array where each member is one of those things.
 */
SourceNode.prototype.add = function SourceNode_add(aChunk) {
  if (Array.isArray(aChunk)) {
    aChunk.forEach(function (chunk) {
      this.add(chunk);
    }, this);
  }
  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
    if (aChunk) {
      this.children.push(aChunk);
    }
  }
  else {
    throw new TypeError(
      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
    );
  }
  return this;
};

/**
 * Add a chunk of generated JS to the beginning of this source node.
 *
 * @param aChunk A string snippet of generated JS code, another instance of
 *        SourceNode, or an array where each member is one of those things.
 */
SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
  if (Array.isArray(aChunk)) {
    for (var i = aChunk.length-1; i >= 0; i--) {
      this.prepend(aChunk[i]);
    }
  }
  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
    this.children.unshift(aChunk);
  }
  else {
    throw new TypeError(
      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
    );
  }
  return this;
};

/**
 * Walk over the tree of JS snippets in this node and its children. The
 * walking function is called once for each snippet of JS and is passed that
 * snippet and the its original associated source's line/column location.
 *
 * @param aFn The traversal function.
 */
SourceNode.prototype.walk = function SourceNode_walk(aFn) {
  var chunk;
  for (var i = 0, len = this.children.length; i < len; i++) {
    chunk = this.children[i];
    if (chunk[isSourceNode]) {
      chunk.walk(aFn);
    }
    else {
      if (chunk !== '') {
        aFn(chunk, { source: this.source,
                     line: this.line,
                     column: this.column,
                     name: this.name });
      }
    }
  }
};

/**
 * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
 * each of `this.children`.
 *
 * @param aSep The separator.
 */
SourceNode.prototype.join = function SourceNode_join(aSep) {
  var newChildren;
  var i;
  var len = this.children.length;
  if (len > 0) {
    newChildren = [];
    for (i = 0; i < len-1; i++) {
      newChildren.push(this.children[i]);
      newChildren.push(aSep);
    }
    newChildren.push(this.children[i]);
    this.children = newChildren;
  }
  return this;
};

/**
 * Call String.prototype.replace on the very right-most source snippet. Useful
 * for trimming whitespace from the end of a source node, etc.
 *
 * @param aPattern The pattern to replace.
 * @param aReplacement The thing to replace the pattern with.
 */
SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
  var lastChild = this.children[this.children.length - 1];
  if (lastChild[isSourceNode]) {
    lastChild.replaceRight(aPattern, aReplacement);
  }
  else if (typeof lastChild === 'string') {
    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
  }
  else {
    this.children.push(''.replace(aPattern, aReplacement));
  }
  return this;
};

/**
 * Set the source content for a source file. This will be added to the SourceMapGenerator
 * in the sourcesContent field.
 *
 * @param aSourceFile The filename of the source file
 * @param aSourceContent The content of the source file
 */
SourceNode.prototype.setSourceContent =
  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
  };

/**
 * Walk over the tree of SourceNodes. The walking function is called for each
 * source file content and is passed the filename and source content.
 *
 * @param aFn The traversal function.
 */
SourceNode.prototype.walkSourceContents =
  function SourceNode_walkSourceContents(aFn) {
    for (var i = 0, len = this.children.length; i < len; i++) {
      if (this.children[i][isSourceNode]) {
        this.children[i].walkSourceContents(aFn);
      }
    }

    var sources = Object.keys(this.sourceContents);
    for (var i = 0, len = sources.length; i < len; i++) {
      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
    }
  };

/**
 * Return the string representation of this source node. Walks over the tree
 * and concatenates all the various snippets together to one string.
 */
SourceNode.prototype.toString = function SourceNode_toString() {
  var str = "";
  this.walk(function (chunk) {
    str += chunk;
  });
  return str;
};

/**
 * Returns the string representation of this source node along with a source
 * map.
 */
SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
  var generated = {
    code: "",
    line: 1,
    column: 0
  };
  var map = new SourceMapGenerator(aArgs);
  var sourceMappingActive = false;
  var lastOriginalSource = null;
  var lastOriginalLine = null;
  var lastOriginalColumn = null;
  var lastOriginalName = null;
  this.walk(function (chunk, original) {
    generated.code += chunk;
    if (original.source !== null
        && original.line !== null
        && original.column !== null) {
      if(lastOriginalSource !== original.source
         || lastOriginalLine !== original.line
         || lastOriginalColumn !== original.column
         || lastOriginalName !== original.name) {
        map.addMapping({
          source: original.source,
          original: {
            line: original.line,
            column: original.column
          },
          generated: {
            line: generated.line,
            column: generated.column
          },
          name: original.name
        });
      }
      lastOriginalSource = original.source;
      lastOriginalLine = original.line;
      lastOriginalColumn = original.column;
      lastOriginalName = original.name;
      sourceMappingActive = true;
    } else if (sourceMappingActive) {
      map.addMapping({
        generated: {
          line: generated.line,
          column: generated.column
        }
      });
      lastOriginalSource = null;
      sourceMappingActive = false;
    }
    for (var idx = 0, length = chunk.length; idx < length; idx++) {
      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
        generated.line++;
        generated.column = 0;
        // Mappings end at eol
        if (idx + 1 === length) {
          lastOriginalSource = null;
          sourceMappingActive = false;
        } else if (sourceMappingActive) {
          map.addMapping({
            source: original.source,
            original: {
              line: original.line,
              column: original.column
            },
            generated: {
              line: generated.line,
              column: generated.column
            },
            name: original.name
          });
        }
      } else {
        generated.column++;
      }
    }
  });
  this.walkSourceContents(function (sourceFile, sourceContent) {
    map.setSourceContent(sourceFile, sourceContent);
  });

  return { code: generated.code, map: map };
};

exports.SourceNode = SourceNode;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

/**
 * This is a helper function for getting values from parameter/options
 * objects.
 *
 * @param args The object we are extracting values from
 * @param name The name of the property we are getting.
 * @param defaultValue An optional value to return if the property is missing
 * from the object. If this is not specified and the property is missing, an
 * error will be thrown.
 */
function getArg(aArgs, aName, aDefaultValue) {
  if (aName in aArgs) {
    return aArgs[aName];
  } else if (arguments.length === 3) {
    return aDefaultValue;
  } else {
    throw new Error('"' + aName + '" is a required argument.');
  }
}
exports.getArg = getArg;

var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
var dataUrlRegexp = /^data:.+\,.+$/;

function urlParse(aUrl) {
  var match = aUrl.match(urlRegexp);
  if (!match) {
    return null;
  }
  return {
    scheme: match[1],
    auth: match[2],
    host: match[3],
    port: match[4],
    path: match[5]
  };
}
exports.urlParse = urlParse;

function urlGenerate(aParsedUrl) {
  var url = '';
  if (aParsedUrl.scheme) {
    url += aParsedUrl.scheme + ':';
  }
  url += '//';
  if (aParsedUrl.auth) {
    url += aParsedUrl.auth + '@';
  }
  if (aParsedUrl.host) {
    url += aParsedUrl.host;
  }
  if (aParsedUrl.port) {
    url += ":" + aParsedUrl.port
  }
  if (aParsedUrl.path) {
    url += aParsedUrl.path;
  }
  return url;
}
exports.urlGenerate = urlGenerate;

/**
 * Normalizes a path, or the path portion of a URL:
 *
 * - Replaces consecutive slashes with one slash.
 * - Removes unnecessary '.' parts.
 * - Removes unnecessary '<dir>/..' parts.
 *
 * Based on code in the Node.js 'path' core module.
 *
 * @param aPath The path or url to normalize.
 */
function normalize(aPath) {
  var path = aPath;
  var url = urlParse(aPath);
  if (url) {
    if (!url.path) {
      return aPath;
    }
    path = url.path;
  }
  var isAbsolute = exports.isAbsolute(path);

  var parts = path.split(/\/+/);
  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
    part = parts[i];
    if (part === '.') {
      parts.splice(i, 1);
    } else if (part === '..') {
      up++;
    } else if (up > 0) {
      if (part === '') {
        // The first part is blank if the path is absolute. Trying to go
        // above the root is a no-op. Therefore we can remove all '..' parts
        // directly after the root.
        parts.splice(i + 1, up);
        up = 0;
      } else {
        parts.splice(i, 2);
        up--;
      }
    }
  }
  path = parts.join('/');

  if (path === '') {
    path = isAbsolute ? '/' : '.';
  }

  if (url) {
    url.path = path;
    return urlGenerate(url);
  }
  return path;
}
exports.normalize = normalize;

/**
 * Joins two paths/URLs.
 *
 * @param aRoot The root path or URL.
 * @param aPath The path or URL to be joined with the root.
 *
 * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
 *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
 *   first.
 * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
 *   is updated with the result and aRoot is returned. Otherwise the result
 *   is returned.
 *   - If aPath is absolute, the result is aPath.
 *   - Otherwise the two paths are joined with a slash.
 * - Joining for example 'http://' and 'www.example.com' is also supported.
 */
function join(aRoot, aPath) {
  if (aRoot === "") {
    aRoot = ".";
  }
  if (aPath === "") {
    aPath = ".";
  }
  var aPathUrl = urlParse(aPath);
  var aRootUrl = urlParse(aRoot);
  if (aRootUrl) {
    aRoot = aRootUrl.path || '/';
  }

  // `join(foo, '//www.example.org')`
  if (aPathUrl && !aPathUrl.scheme) {
    if (aRootUrl) {
      aPathUrl.scheme = aRootUrl.scheme;
    }
    return urlGenerate(aPathUrl);
  }

  if (aPathUrl || aPath.match(dataUrlRegexp)) {
    return aPath;
  }

  // `join('http://', 'www.example.com')`
  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
    aRootUrl.host = aPath;
    return urlGenerate(aRootUrl);
  }

  var joined = aPath.charAt(0) === '/'
    ? aPath
    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);

  if (aRootUrl) {
    aRootUrl.path = joined;
    return urlGenerate(aRootUrl);
  }
  return joined;
}
exports.join = join;

exports.isAbsolute = function (aPath) {
  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
};

/**
 * Make a path relative to a URL or another path.
 *
 * @param aRoot The root path or URL.
 * @param aPath The path or URL to be made relative to aRoot.
 */
function relative(aRoot, aPath) {
  if (aRoot === "") {
    aRoot = ".";
  }

  aRoot = aRoot.replace(/\/$/, '');

  // It is possible for the path to be above the root. In this case, simply
  // checking whether the root is a prefix of the path won't work. Instead, we
  // need to remove components from the root one by one, until either we find
  // a prefix that fits, or we run out of components to remove.
  var level = 0;
  while (aPath.indexOf(aRoot + '/') !== 0) {
    var index = aRoot.lastIndexOf("/");
    if (index < 0) {
      return aPath;
    }

    // If the only part of the root that is left is the scheme (i.e. http://,
    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
    // have exhausted all components, so the path is not relative to the root.
    aRoot = aRoot.slice(0, index);
    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
      return aPath;
    }

    ++level;
  }

  // Make sure we add a "../" for each component we removed from the root.
  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
}
exports.relative = relative;

var supportsNullProto = (function () {
  var obj = Object.create(null);
  return !('__proto__' in obj);
}());

function identity (s) {
  return s;
}

/**
 * Because behavior goes wacky when you set `__proto__` on objects, we
 * have to prefix all the strings in our set with an arbitrary character.
 *
 * See https://github.com/mozilla/source-map/pull/31 and
 * https://github.com/mozilla/source-map/issues/30
 *
 * @param String aStr
 */
function toSetString(aStr) {
  if (isProtoString(aStr)) {
    return '$' + aStr;
  }

  return aStr;
}
exports.toSetString = supportsNullProto ? identity : toSetString;

function fromSetString(aStr) {
  if (isProtoString(aStr)) {
    return aStr.slice(1);
  }

  return aStr;
}
exports.fromSetString = supportsNullProto ? identity : fromSetString;

function isProtoString(s) {
  if (!s) {
    return false;
  }

  var length = s.length;

  if (length < 9 /* "__proto__".length */) {
    return false;
  }

  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
      s.charCodeAt(length - 9) !== 95  /* '_' */) {
    return false;
  }

  for (var i = length - 10; i >= 0; i--) {
    if (s.charCodeAt(i) !== 36 /* '$' */) {
      return false;
    }
  }

  return true;
}

/**
 * Comparator between two mappings where the original positions are compared.
 *
 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
 * mappings with the same original source/line/column, but different generated
 * line and column the same. Useful when searching for a mapping with a
 * stubbed out mapping.
 */
function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
  var cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0 || onlyCompareOriginal) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByOriginalPositions = compareByOriginalPositions;

/**
 * Comparator between two mappings with deflated source and name indices where
 * the generated positions are compared.
 *
 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
 * mappings with the same generated line and column, but different
 * source/name/original line and column the same. Useful when searching for a
 * mapping with a stubbed out mapping.
 */
function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
  var cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0 || onlyCompareGenerated) {
    return cmp;
  }

  cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;

function strcmp(aStr1, aStr2) {
  if (aStr1 === aStr2) {
    return 0;
  }

  if (aStr1 === null) {
    return 1; // aStr2 !== null
  }

  if (aStr2 === null) {
    return -1; // aStr1 !== null
  }

  if (aStr1 > aStr2) {
    return 1;
  }

  return -1;
}

/**
 * Comparator between two mappings with inflated source and name strings where
 * the generated positions are compared.
 */
function compareByGeneratedPositionsInflated(mappingA, mappingB) {
  var cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;

/**
 * Strip any JSON XSSI avoidance prefix from the string (as documented
 * in the source maps specification), and then parse the string as
 * JSON.
 */
function parseSourceMapInput(str) {
  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
}
exports.parseSourceMapInput = parseSourceMapInput;

/**
 * Compute the URL of a source given the the source root, the source's
 * URL, and the source map's URL.
 */
function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
  sourceURL = sourceURL || '';

  if (sourceRoot) {
    // This follows what Chrome does.
    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
      sourceRoot += '/';
    }
    // The spec says:
    //   Line 4: An optional source root, useful for relocating source
    //   files on a server or removing repeated values in the
    //   â€œsourcesâ€ entry.  This value is prepended to the individual
    //   entries in the â€œsourceâ€ field.
    sourceURL = sourceRoot + sourceURL;
  }

  // Historically, SourceMapConsumer did not take the sourceMapURL as
  // a parameter.  This mode is still somewhat supported, which is why
  // this code block is conditional.  However, it's preferable to pass
  // the source map URL to SourceMapConsumer, so that this function
  // can implement the source URL resolution algorithm as outlined in
  // the spec.  This block is basically the equivalent of:
  //    new URL(sourceURL, sourceMapURL).toString()
  // ... except it avoids using URL, which wasn't available in the
  // older releases of node still supported by this library.
  //
  // The spec says:
  //   If the sources are not absolute URLs after prepending of the
  //   â€œsourceRootâ€, the sources are resolved relative to the
  //   SourceMap (like resolving script src in a html document).
  if (sourceMapURL) {
    var parsed = urlParse(sourceMapURL);
    if (!parsed) {
      throw new Error("sourceMapURL could not be parsed");
    }
    if (parsed.path) {
      // Strip the last path component, but keep the "/".
      var index = parsed.path.lastIndexOf('/');
      if (index >= 0) {
        parsed.path = parsed.path.substring(0, index + 1);
      }
    }
    sourceURL = join(urlGenerate(parsed), sourceURL);
  }

  return normalize(sourceURL);
}
exports.computeSourceURL = computeSourceURL;

Copyright (c) 2009-2011, Mozilla Foundation and contributors
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the names of the Mozilla Foundation nor the names of project
  contributors may be used to endorse or promote products derived from this
  software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
  "name": "source-map",
  "description": "Generates and consumes source maps",
  "version": "0.6.1",
  "homepage": "https://github.com/mozilla/source-map",
  "author": "Nick Fitzgerald <nfitzgerald@mozilla.com>",
  "repository": {
    "type": "git",
    "url": "http://github.com/mozilla/source-map.git"
  },
  "main": "./source-map.js",
  "files": [
    "source-map.js",
    "source-map.d.ts",
    "lib/",
    "dist/source-map.debug.js",
    "dist/source-map.js",
    "dist/source-map.min.js",
    "dist/source-map.min.js.map"
  ],
  "engines": {
    "node": ">=0.10.0"
  },
  "license": "BSD-3-Clause",
  "devDependencies": {
    "doctoc": "^0.15.0",
    "webpack": "^1.12.0"
  },
  "typings": "source-map"
}/*
 * Copyright 2009-2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE.txt or:
 * http://opensource.org/licenses/BSD-3-Clause
 */
exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;
exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;
exports.SourceNode = require('./lib/source-node').SourceNode;
{
  "name": "@vue/compiler-sfc",
  "version": "2.7.14",
  "description": "compiler-sfc for Vue 2",
  "main": "dist/compiler-sfc.js",
  "types": "dist/compiler-sfc.d.ts",
  "files": [
    "dist"
  ],
  "dependencies": {
    "@babel/parser": "^7.18.4",
    "postcss": "^8.4.14",
    "source-map": "^0.6.1"
  },
  "devDependencies": {
    "@babel/types": "^7.19.4",
    "@types/estree": "^0.0.48",
    "@types/hash-sum": "^1.0.0",
    "@types/lru-cache": "^5.1.1",
    "@vue/consolidate": "^0.17.3",
    "de-indent": "^1.0.2",
    "estree-walker": "^2.0.2",
    "hash-sum": "^2.0.0",
    "less": "^4.1.3",
    "lru-cache": "^5.1.1",
    "magic-string": "^0.25.9",
    "merge-source-map": "^1.1.0",
    "postcss-modules": "^4.3.1",
    "postcss-selector-parser": "^6.0.10",
    "pug": "^3.0.2",
    "sass": "^1.52.3",
    "stylus": "^0.58.1"
  }
}'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var shared = require('@vue/shared');

function warn(msg, ...args) {
    console.warn(`[Vue warn] ${msg}`, ...args);
}

let activeEffectScope;
class EffectScope {
    constructor(detached = false) {
        /**
         * @internal
         */
        this.active = true;
        /**
         * @internal
         */
        this.effects = [];
        /**
         * @internal
         */
        this.cleanups = [];
        if (!detached && activeEffectScope) {
            this.parent = activeEffectScope;
            this.index =
                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
        }
    }
    run(fn) {
        if (this.active) {
            const currentEffectScope = activeEffectScope;
            try {
                activeEffectScope = this;
                return fn();
            }
            finally {
                activeEffectScope = currentEffectScope;
            }
        }
        else {
            warn(`cannot run an inactive effect scope.`);
        }
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    on() {
        activeEffectScope = this;
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    off() {
        activeEffectScope = this.parent;
    }
    stop(fromParent) {
        if (this.active) {
            let i, l;
            for (i = 0, l = this.effects.length; i < l; i++) {
                this.effects[i].stop();
            }
            for (i = 0, l = this.cleanups.length; i < l; i++) {
                this.cleanups[i]();
            }
            if (this.scopes) {
                for (i = 0, l = this.scopes.length; i < l; i++) {
                    this.scopes[i].stop(true);
                }
            }
            // nested scope, dereference from parent to avoid memory leaks
            if (this.parent && !fromParent) {
                // optimized O(1) removal
                const last = this.parent.scopes.pop();
                if (last && last !== this) {
                    this.parent.scopes[this.index] = last;
                    last.index = this.index;
                }
            }
            this.active = false;
        }
    }
}
function effectScope(detached) {
    return new EffectScope(detached);
}
function recordEffectScope(effect, scope = activeEffectScope) {
    if (scope && scope.active) {
        scope.effects.push(effect);
    }
}
function getCurrentScope() {
    return activeEffectScope;
}
function onScopeDispose(fn) {
    if (activeEffectScope) {
        activeEffectScope.cleanups.push(fn);
    }
    else {
        warn(`onScopeDispose() is called when there is no active effect scope` +
            ` to be associated with.`);
    }
}

const createDep = (effects) => {
    const dep = new Set(effects);
    dep.w = 0;
    dep.n = 0;
    return dep;
};
const wasTracked = (dep) => (dep.w & trackOpBit) > 0;
const newTracked = (dep) => (dep.n & trackOpBit) > 0;
const initDepMarkers = ({ deps }) => {
    if (deps.length) {
        for (let i = 0; i < deps.length; i++) {
            deps[i].w |= trackOpBit; // set was tracked
        }
    }
};
const finalizeDepMarkers = (effect) => {
    const { deps } = effect;
    if (deps.length) {
        let ptr = 0;
        for (let i = 0; i < deps.length; i++) {
            const dep = deps[i];
            if (wasTracked(dep) && !newTracked(dep)) {
                dep.delete(effect);
            }
            else {
                deps[ptr++] = dep;
            }
            // clear bits
            dep.w &= ~trackOpBit;
            dep.n &= ~trackOpBit;
        }
        deps.length = ptr;
    }
};

const targetMap = new WeakMap();
// The number of effects currently being tracked recursively.
let effectTrackDepth = 0;
let trackOpBit = 1;
/**
 * The bitwise track markers support at most 30 levels of recursion.
 * This value is chosen to enable modern JS engines to use a SMI on all platforms.
 * When recursion depth is greater, fall back to using a full cleanup.
 */
const maxMarkerBits = 30;
let activeEffect;
const ITERATE_KEY = Symbol('iterate' );
const MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );
class ReactiveEffect {
    constructor(fn, scheduler = null, scope) {
        this.fn = fn;
        this.scheduler = scheduler;
        this.active = true;
        this.deps = [];
        this.parent = undefined;
        recordEffectScope(this, scope);
    }
    run() {
        if (!this.active) {
            return this.fn();
        }
        let parent = activeEffect;
        let lastShouldTrack = shouldTrack;
        while (parent) {
            if (parent === this) {
                return;
            }
            parent = parent.parent;
        }
        try {
            this.parent = activeEffect;
            activeEffect = this;
            shouldTrack = true;
            trackOpBit = 1 << ++effectTrackDepth;
            if (effectTrackDepth <= maxMarkerBits) {
                initDepMarkers(this);
            }
            else {
                cleanupEffect(this);
            }
            return this.fn();
        }
        finally {
            if (effectTrackDepth <= maxMarkerBits) {
                finalizeDepMarkers(this);
            }
            trackOpBit = 1 << --effectTrackDepth;
            activeEffect = this.parent;
            shouldTrack = lastShouldTrack;
            this.parent = undefined;
            if (this.deferStop) {
                this.stop();
            }
        }
    }
    stop() {
        // stopped while running itself - defer the cleanup
        if (activeEffect === this) {
            this.deferStop = true;
        }
        else if (this.active) {
            cleanupEffect(this);
            if (this.onStop) {
                this.onStop();
            }
            this.active = false;
        }
    }
}
function cleanupEffect(effect) {
    const { deps } = effect;
    if (deps.length) {
        for (let i = 0; i < deps.length; i++) {
            deps[i].delete(effect);
        }
        deps.length = 0;
    }
}
function effect(fn, options) {
    if (fn.effect) {
        fn = fn.effect.fn;
    }
    const _effect = new ReactiveEffect(fn);
    if (options) {
        shared.extend(_effect, options);
        if (options.scope)
            recordEffectScope(_effect, options.scope);
    }
    if (!options || !options.lazy) {
        _effect.run();
    }
    const runner = _effect.run.bind(_effect);
    runner.effect = _effect;
    return runner;
}
function stop(runner) {
    runner.effect.stop();
}
let shouldTrack = true;
const trackStack = [];
function pauseTracking() {
    trackStack.push(shouldTrack);
    shouldTrack = false;
}
function enableTracking() {
    trackStack.push(shouldTrack);
    shouldTrack = true;
}
function resetTracking() {
    const last = trackStack.pop();
    shouldTrack = last === undefined ? true : last;
}
function track(target, type, key) {
    if (shouldTrack && activeEffect) {
        let depsMap = targetMap.get(target);
        if (!depsMap) {
            targetMap.set(target, (depsMap = new Map()));
        }
        let dep = depsMap.get(key);
        if (!dep) {
            depsMap.set(key, (dep = createDep()));
        }
        const eventInfo = { effect: activeEffect, target, type, key }
            ;
        trackEffects(dep, eventInfo);
    }
}
function trackEffects(dep, debuggerEventExtraInfo) {
    let shouldTrack = false;
    if (effectTrackDepth <= maxMarkerBits) {
        if (!newTracked(dep)) {
            dep.n |= trackOpBit; // set newly tracked
            shouldTrack = !wasTracked(dep);
        }
    }
    else {
        // Full cleanup mode.
        shouldTrack = !dep.has(activeEffect);
    }
    if (shouldTrack) {
        dep.add(activeEffect);
        activeEffect.deps.push(dep);
        if (activeEffect.onTrack) {
            activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));
        }
    }
}
function trigger(target, type, key, newValue, oldValue, oldTarget) {
    const depsMap = targetMap.get(target);
    if (!depsMap) {
        // never been tracked
        return;
    }
    let deps = [];
    if (type === "clear" /* CLEAR */) {
        // collection being cleared
        // trigger all effects for target
        deps = [...depsMap.values()];
    }
    else if (key === 'length' && shared.isArray(target)) {
        depsMap.forEach((dep, key) => {
            if (key === 'length' || key >= newValue) {
                deps.push(dep);
            }
        });
    }
    else {
        // schedule runs for SET | ADD | DELETE
        if (key !== void 0) {
            deps.push(depsMap.get(key));
        }
        // also run for iteration key on ADD | DELETE | Map.SET
        switch (type) {
            case "add" /* ADD */:
                if (!shared.isArray(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                    if (shared.isMap(target)) {
                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                    }
                }
                else if (shared.isIntegerKey(key)) {
                    // new index added to array -> length changes
                    deps.push(depsMap.get('length'));
                }
                break;
            case "delete" /* DELETE */:
                if (!shared.isArray(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                    if (shared.isMap(target)) {
                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                    }
                }
                break;
            case "set" /* SET */:
                if (shared.isMap(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                }
                break;
        }
    }
    const eventInfo = { target, type, key, newValue, oldValue, oldTarget }
        ;
    if (deps.length === 1) {
        if (deps[0]) {
            {
                triggerEffects(deps[0], eventInfo);
            }
        }
    }
    else {
        const effects = [];
        for (const dep of deps) {
            if (dep) {
                effects.push(...dep);
            }
        }
        {
            triggerEffects(createDep(effects), eventInfo);
        }
    }
}
function triggerEffects(dep, debuggerEventExtraInfo) {
    // spread into array for stabilization
    for (const effect of shared.isArray(dep) ? dep : [...dep]) {
        if (effect !== activeEffect || effect.allowRecurse) {
            if (effect.onTrigger) {
                effect.onTrigger(shared.extend({ effect }, debuggerEventExtraInfo));
            }
            if (effect.scheduler) {
                effect.scheduler();
            }
            else {
                effect.run();
            }
        }
    }
}

const isNonTrackableKeys = /*#__PURE__*/ shared.makeMap(`__proto__,__v_isRef,__isVue`);
const builtInSymbols = new Set(
/*#__PURE__*/
Object.getOwnPropertyNames(Symbol)
    .map(key => Symbol[key])
    .filter(shared.isSymbol));
const get = /*#__PURE__*/ createGetter();
const shallowGet = /*#__PURE__*/ createGetter(false, true);
const readonlyGet = /*#__PURE__*/ createGetter(true);
const shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);
const arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();
function createArrayInstrumentations() {
    const instrumentations = {};
    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {
        instrumentations[key] = function (...args) {
            const arr = toRaw(this);
            for (let i = 0, l = this.length; i < l; i++) {
                track(arr, "get" /* GET */, i + '');
            }
            // we run the method using the original args first (which may be reactive)
            const res = arr[key](...args);
            if (res === -1 || res === false) {
                // if that didn't work, run it again using raw values.
                return arr[key](...args.map(toRaw));
            }
            else {
                return res;
            }
        };
    });
    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {
        instrumentations[key] = function (...args) {
            pauseTracking();
            const res = toRaw(this)[key].apply(this, args);
            resetTracking();
            return res;
        };
    });
    return instrumentations;
}
function createGetter(isReadonly = false, shallow = false) {
    return function get(target, key, receiver) {
        if (key === "__v_isReactive" /* IS_REACTIVE */) {
            return !isReadonly;
        }
        else if (key === "__v_isReadonly" /* IS_READONLY */) {
            return isReadonly;
        }
        else if (key === "__v_isShallow" /* IS_SHALLOW */) {
            return shallow;
        }
        else if (key === "__v_raw" /* RAW */ &&
            receiver ===
                (isReadonly
                    ? shallow
                        ? shallowReadonlyMap
                        : readonlyMap
                    : shallow
                        ? shallowReactiveMap
                        : reactiveMap).get(target)) {
            return target;
        }
        const targetIsArray = shared.isArray(target);
        if (!isReadonly && targetIsArray && shared.hasOwn(arrayInstrumentations, key)) {
            return Reflect.get(arrayInstrumentations, key, receiver);
        }
        const res = Reflect.get(target, key, receiver);
        if (shared.isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
            return res;
        }
        if (!isReadonly) {
            track(target, "get" /* GET */, key);
        }
        if (shallow) {
            return res;
        }
        if (isRef(res)) {
            // ref unwrapping - does not apply for Array + integer key.
            const shouldUnwrap = !targetIsArray || !shared.isIntegerKey(key);
            return shouldUnwrap ? res.value : res;
        }
        if (shared.isObject(res)) {
            // Convert returned value into a proxy as well. we do the isObject check
            // here to avoid invalid value warning. Also need to lazy access readonly
            // and reactive here to avoid circular dependency.
            return isReadonly ? readonly(res) : reactive(res);
        }
        return res;
    };
}
const set = /*#__PURE__*/ createSetter();
const shallowSet = /*#__PURE__*/ createSetter(true);
function createSetter(shallow = false) {
    return function set(target, key, value, receiver) {
        let oldValue = target[key];
        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {
            return false;
        }
        if (!shallow && !isReadonly(value)) {
            if (!isShallow(value)) {
                value = toRaw(value);
                oldValue = toRaw(oldValue);
            }
            if (!shared.isArray(target) && isRef(oldValue) && !isRef(value)) {
                oldValue.value = value;
                return true;
            }
        }
        const hadKey = shared.isArray(target) && shared.isIntegerKey(key)
            ? Number(key) < target.length
            : shared.hasOwn(target, key);
        const result = Reflect.set(target, key, value, receiver);
        // don't trigger if target is something up in the prototype chain of original
        if (target === toRaw(receiver)) {
            if (!hadKey) {
                trigger(target, "add" /* ADD */, key, value);
            }
            else if (shared.hasChanged(value, oldValue)) {
                trigger(target, "set" /* SET */, key, value, oldValue);
            }
        }
        return result;
    };
}
function deleteProperty(target, key) {
    const hadKey = shared.hasOwn(target, key);
    const oldValue = target[key];
    const result = Reflect.deleteProperty(target, key);
    if (result && hadKey) {
        trigger(target, "delete" /* DELETE */, key, undefined, oldValue);
    }
    return result;
}
function has(target, key) {
    const result = Reflect.has(target, key);
    if (!shared.isSymbol(key) || !builtInSymbols.has(key)) {
        track(target, "has" /* HAS */, key);
    }
    return result;
}
function ownKeys(target) {
    track(target, "iterate" /* ITERATE */, shared.isArray(target) ? 'length' : ITERATE_KEY);
    return Reflect.ownKeys(target);
}
const mutableHandlers = {
    get,
    set,
    deleteProperty,
    has,
    ownKeys
};
const readonlyHandlers = {
    get: readonlyGet,
    set(target, key) {
        {
            warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target);
        }
        return true;
    },
    deleteProperty(target, key) {
        {
            warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
        }
        return true;
    }
};
const shallowReactiveHandlers = /*#__PURE__*/ shared.extend({}, mutableHandlers, {
    get: shallowGet,
    set: shallowSet
});
// Props handlers are special in the sense that it should not unwrap top-level
// refs (in order to allow refs to be explicitly passed down), but should
// retain the reactivity of the normal readonly object.
const shallowReadonlyHandlers = /*#__PURE__*/ shared.extend({}, readonlyHandlers, {
    get: shallowReadonlyGet
});

const toShallow = (value) => value;
const getProto = (v) => Reflect.getPrototypeOf(v);
function get$1(target, key, isReadonly = false, isShallow = false) {
    // #1772: readonly(reactive(Map)) should return readonly + reactive version
    // of the value
    target = target["__v_raw" /* RAW */];
    const rawTarget = toRaw(target);
    const rawKey = toRaw(key);
    if (key !== rawKey) {
        !isReadonly && track(rawTarget, "get" /* GET */, key);
    }
    !isReadonly && track(rawTarget, "get" /* GET */, rawKey);
    const { has } = getProto(rawTarget);
    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
    if (has.call(rawTarget, key)) {
        return wrap(target.get(key));
    }
    else if (has.call(rawTarget, rawKey)) {
        return wrap(target.get(rawKey));
    }
    else if (target !== rawTarget) {
        // #3602 readonly(reactive(Map))
        // ensure that the nested reactive `Map` can do tracking for itself
        target.get(key);
    }
}
function has$1(key, isReadonly = false) {
    const target = this["__v_raw" /* RAW */];
    const rawTarget = toRaw(target);
    const rawKey = toRaw(key);
    if (key !== rawKey) {
        !isReadonly && track(rawTarget, "has" /* HAS */, key);
    }
    !isReadonly && track(rawTarget, "has" /* HAS */, rawKey);
    return key === rawKey
        ? target.has(key)
        : target.has(key) || target.has(rawKey);
}
function size(target, isReadonly = false) {
    target = target["__v_raw" /* RAW */];
    !isReadonly && track(toRaw(target), "iterate" /* ITERATE */, ITERATE_KEY);
    return Reflect.get(target, 'size', target);
}
function add(value) {
    value = toRaw(value);
    const target = toRaw(this);
    const proto = getProto(target);
    const hadKey = proto.has.call(target, value);
    if (!hadKey) {
        target.add(value);
        trigger(target, "add" /* ADD */, value, value);
    }
    return this;
}
function set$1(key, value) {
    value = toRaw(value);
    const target = toRaw(this);
    const { has, get } = getProto(target);
    let hadKey = has.call(target, key);
    if (!hadKey) {
        key = toRaw(key);
        hadKey = has.call(target, key);
    }
    else {
        checkIdentityKeys(target, has, key);
    }
    const oldValue = get.call(target, key);
    target.set(key, value);
    if (!hadKey) {
        trigger(target, "add" /* ADD */, key, value);
    }
    else if (shared.hasChanged(value, oldValue)) {
        trigger(target, "set" /* SET */, key, value, oldValue);
    }
    return this;
}
function deleteEntry(key) {
    const target = toRaw(this);
    const { has, get } = getProto(target);
    let hadKey = has.call(target, key);
    if (!hadKey) {
        key = toRaw(key);
        hadKey = has.call(target, key);
    }
    else {
        checkIdentityKeys(target, has, key);
    }
    const oldValue = get ? get.call(target, key) : undefined;
    // forward the operation before queueing reactions
    const result = target.delete(key);
    if (hadKey) {
        trigger(target, "delete" /* DELETE */, key, undefined, oldValue);
    }
    return result;
}
function clear() {
    const target = toRaw(this);
    const hadItems = target.size !== 0;
    const oldTarget = shared.isMap(target)
            ? new Map(target)
            : new Set(target)
        ;
    // forward the operation before queueing reactions
    const result = target.clear();
    if (hadItems) {
        trigger(target, "clear" /* CLEAR */, undefined, undefined, oldTarget);
    }
    return result;
}
function createForEach(isReadonly, isShallow) {
    return function forEach(callback, thisArg) {
        const observed = this;
        const target = observed["__v_raw" /* RAW */];
        const rawTarget = toRaw(target);
        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
        !isReadonly && track(rawTarget, "iterate" /* ITERATE */, ITERATE_KEY);
        return target.forEach((value, key) => {
            // important: make sure the callback is
            // 1. invoked with the reactive map as `this` and 3rd arg
            // 2. the value received should be a corresponding reactive/readonly.
            return callback.call(thisArg, wrap(value), wrap(key), observed);
        });
    };
}
function createIterableMethod(method, isReadonly, isShallow) {
    return function (...args) {
        const target = this["__v_raw" /* RAW */];
        const rawTarget = toRaw(target);
        const targetIsMap = shared.isMap(rawTarget);
        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);
        const isKeyOnly = method === 'keys' && targetIsMap;
        const innerIterator = target[method](...args);
        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
        !isReadonly &&
            track(rawTarget, "iterate" /* ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);
        // return a wrapped iterator which returns observed versions of the
        // values emitted from the real iterator
        return {
            // iterator protocol
            next() {
                const { value, done } = innerIterator.next();
                return done
                    ? { value, done }
                    : {
                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
                        done
                    };
            },
            // iterable protocol
            [Symbol.iterator]() {
                return this;
            }
        };
    };
}
function createReadonlyMethod(type) {
    return function (...args) {
        {
            const key = args[0] ? `on key "${args[0]}" ` : ``;
            console.warn(`${shared.capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));
        }
        return type === "delete" /* DELETE */ ? false : this;
    };
}
function createInstrumentations() {
    const mutableInstrumentations = {
        get(key) {
            return get$1(this, key);
        },
        get size() {
            return size(this);
        },
        has: has$1,
        add,
        set: set$1,
        delete: deleteEntry,
        clear,
        forEach: createForEach(false, false)
    };
    const shallowInstrumentations = {
        get(key) {
            return get$1(this, key, false, true);
        },
        get size() {
            return size(this);
        },
        has: has$1,
        add,
        set: set$1,
        delete: deleteEntry,
        clear,
        forEach: createForEach(false, true)
    };
    const readonlyInstrumentations = {
        get(key) {
            return get$1(this, key, true);
        },
        get size() {
            return size(this, true);
        },
        has(key) {
            return has$1.call(this, key, true);
        },
        add: createReadonlyMethod("add" /* ADD */),
        set: createReadonlyMethod("set" /* SET */),
        delete: createReadonlyMethod("delete" /* DELETE */),
        clear: createReadonlyMethod("clear" /* CLEAR */),
        forEach: createForEach(true, false)
    };
    const shallowReadonlyInstrumentations = {
        get(key) {
            return get$1(this, key, true, true);
        },
        get size() {
            return size(this, true);
        },
        has(key) {
            return has$1.call(this, key, true);
        },
        add: createReadonlyMethod("add" /* ADD */),
        set: createReadonlyMethod("set" /* SET */),
        delete: createReadonlyMethod("delete" /* DELETE */),
        clear: createReadonlyMethod("clear" /* CLEAR */),
        forEach: createForEach(true, true)
    };
    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];
    iteratorMethods.forEach(method => {
        mutableInstrumentations[method] = createIterableMethod(method, false, false);
        readonlyInstrumentations[method] = createIterableMethod(method, true, false);
        shallowInstrumentations[method] = createIterableMethod(method, false, true);
        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);
    });
    return [
        mutableInstrumentations,
        readonlyInstrumentations,
        shallowInstrumentations,
        shallowReadonlyInstrumentations
    ];
}
const [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();
function createInstrumentationGetter(isReadonly, shallow) {
    const instrumentations = shallow
        ? isReadonly
            ? shallowReadonlyInstrumentations
            : shallowInstrumentations
        : isReadonly
            ? readonlyInstrumentations
            : mutableInstrumentations;
    return (target, key, receiver) => {
        if (key === "__v_isReactive" /* IS_REACTIVE */) {
            return !isReadonly;
        }
        else if (key === "__v_isReadonly" /* IS_READONLY */) {
            return isReadonly;
        }
        else if (key === "__v_raw" /* RAW */) {
            return target;
        }
        return Reflect.get(shared.hasOwn(instrumentations, key) && key in target
            ? instrumentations
            : target, key, receiver);
    };
}
const mutableCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(false, false)
};
const shallowCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(false, true)
};
const readonlyCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(true, false)
};
const shallowReadonlyCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(true, true)
};
function checkIdentityKeys(target, has, key) {
    const rawKey = toRaw(key);
    if (rawKey !== key && has.call(target, rawKey)) {
        const type = shared.toRawType(target);
        console.warn(`Reactive ${type} contains both the raw and reactive ` +
            `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +
            `which can lead to inconsistencies. ` +
            `Avoid differentiating between the raw and reactive versions ` +
            `of an object and only use the reactive version if possible.`);
    }
}

const reactiveMap = new WeakMap();
const shallowReactiveMap = new WeakMap();
const readonlyMap = new WeakMap();
const shallowReadonlyMap = new WeakMap();
function targetTypeMap(rawType) {
    switch (rawType) {
        case 'Object':
        case 'Array':
            return 1 /* COMMON */;
        case 'Map':
        case 'Set':
        case 'WeakMap':
        case 'WeakSet':
            return 2 /* COLLECTION */;
        default:
            return 0 /* INVALID */;
    }
}
function getTargetType(value) {
    return value["__v_skip" /* SKIP */] || !Object.isExtensible(value)
        ? 0 /* INVALID */
        : targetTypeMap(shared.toRawType(value));
}
function reactive(target) {
    // if trying to observe a readonly proxy, return the readonly version.
    if (isReadonly(target)) {
        return target;
    }
    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);
}
/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
function shallowReactive(target) {
    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);
}
/**
 * Creates a readonly copy of the original object. Note the returned copy is not
 * made reactive, but `readonly` can be called on an already reactive object.
 */
function readonly(target) {
    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);
}
/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
function shallowReadonly(target) {
    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);
}
function createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {
    if (!shared.isObject(target)) {
        {
            console.warn(`value cannot be made reactive: ${String(target)}`);
        }
        return target;
    }
    // target is already a Proxy, return it.
    // exception: calling readonly() on a reactive object
    if (target["__v_raw" /* RAW */] &&
        !(isReadonly && target["__v_isReactive" /* IS_REACTIVE */])) {
        return target;
    }
    // target already has corresponding Proxy
    const existingProxy = proxyMap.get(target);
    if (existingProxy) {
        return existingProxy;
    }
    // only a whitelist of value types can be observed.
    const targetType = getTargetType(target);
    if (targetType === 0 /* INVALID */) {
        return target;
    }
    const proxy = new Proxy(target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers);
    proxyMap.set(target, proxy);
    return proxy;
}
function isReactive(value) {
    if (isReadonly(value)) {
        return isReactive(value["__v_raw" /* RAW */]);
    }
    return !!(value && value["__v_isReactive" /* IS_REACTIVE */]);
}
function isReadonly(value) {
    return !!(value && value["__v_isReadonly" /* IS_READONLY */]);
}
function isShallow(value) {
    return !!(value && value["__v_isShallow" /* IS_SHALLOW */]);
}
function isProxy(value) {
    return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
    const raw = observed && observed["__v_raw" /* RAW */];
    return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
    shared.def(value, "__v_skip" /* SKIP */, true);
    return value;
}
const toReactive = (value) => shared.isObject(value) ? reactive(value) : value;
const toReadonly = (value) => shared.isObject(value) ? readonly(value) : value;

function trackRefValue(ref) {
    if (shouldTrack && activeEffect) {
        ref = toRaw(ref);
        {
            trackEffects(ref.dep || (ref.dep = createDep()), {
                target: ref,
                type: "get" /* GET */,
                key: 'value'
            });
        }
    }
}
function triggerRefValue(ref, newVal) {
    ref = toRaw(ref);
    if (ref.dep) {
        {
            triggerEffects(ref.dep, {
                target: ref,
                type: "set" /* SET */,
                key: 'value',
                newValue: newVal
            });
        }
    }
}
function isRef(r) {
    return !!(r && r.__v_isRef === true);
}
function ref(value) {
    return createRef(value, false);
}
function shallowRef(value) {
    return createRef(value, true);
}
function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    return new RefImpl(rawValue, shallow);
}
class RefImpl {
    constructor(value, __v_isShallow) {
        this.__v_isShallow = __v_isShallow;
        this.dep = undefined;
        this.__v_isRef = true;
        this._rawValue = __v_isShallow ? value : toRaw(value);
        this._value = __v_isShallow ? value : toReactive(value);
    }
    get value() {
        trackRefValue(this);
        return this._value;
    }
    set value(newVal) {
        newVal = this.__v_isShallow ? newVal : toRaw(newVal);
        if (shared.hasChanged(newVal, this._rawValue)) {
            this._rawValue = newVal;
            this._value = this.__v_isShallow ? newVal : toReactive(newVal);
            triggerRefValue(this, newVal);
        }
    }
}
function triggerRef(ref) {
    triggerRefValue(ref, ref.value );
}
function unref(ref) {
    return isRef(ref) ? ref.value : ref;
}
const shallowUnwrapHandlers = {
    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
    set: (target, key, value, receiver) => {
        const oldValue = target[key];
        if (isRef(oldValue) && !isRef(value)) {
            oldValue.value = value;
            return true;
        }
        else {
            return Reflect.set(target, key, value, receiver);
        }
    }
};
function proxyRefs(objectWithRefs) {
    return isReactive(objectWithRefs)
        ? objectWithRefs
        : new Proxy(objectWithRefs, shallowUnwrapHandlers);
}
class CustomRefImpl {
    constructor(factory) {
        this.dep = undefined;
        this.__v_isRef = true;
        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));
        this._get = get;
        this._set = set;
    }
    get value() {
        return this._get();
    }
    set value(newVal) {
        this._set(newVal);
    }
}
function customRef(factory) {
    return new CustomRefImpl(factory);
}
function toRefs(object) {
    if (!isProxy(object)) {
        console.warn(`toRefs() expects a reactive object but received a plain one.`);
    }
    const ret = shared.isArray(object) ? new Array(object.length) : {};
    for (const key in object) {
        ret[key] = toRef(object, key);
    }
    return ret;
}
class ObjectRefImpl {
    constructor(_object, _key, _defaultValue) {
        this._object = _object;
        this._key = _key;
        this._defaultValue = _defaultValue;
        this.__v_isRef = true;
    }
    get value() {
        const val = this._object[this._key];
        return val === undefined ? this._defaultValue : val;
    }
    set value(newVal) {
        this._object[this._key] = newVal;
    }
}
function toRef(object, key, defaultValue) {
    const val = object[key];
    return isRef(val)
        ? val
        : new ObjectRefImpl(object, key, defaultValue);
}

class ComputedRefImpl {
    constructor(getter, _setter, isReadonly, isSSR) {
        this._setter = _setter;
        this.dep = undefined;
        this.__v_isRef = true;
        this._dirty = true;
        this.effect = new ReactiveEffect(getter, () => {
            if (!this._dirty) {
                this._dirty = true;
                triggerRefValue(this);
            }
        });
        this.effect.computed = this;
        this.effect.active = this._cacheable = !isSSR;
        this["__v_isReadonly" /* IS_READONLY */] = isReadonly;
    }
    get value() {
        // the computed ref may get wrapped by other proxies e.g. readonly() #3376
        const self = toRaw(this);
        trackRefValue(self);
        if (self._dirty || !self._cacheable) {
            self._dirty = false;
            self._value = self.effect.run();
        }
        return self._value;
    }
    set value(newValue) {
        this._setter(newValue);
    }
}
function computed(getterOrOptions, debugOptions, isSSR = false) {
    let getter;
    let setter;
    const onlyGetter = shared.isFunction(getterOrOptions);
    if (onlyGetter) {
        getter = getterOrOptions;
        setter = () => {
                console.warn('Write operation failed: computed value is readonly');
            }
            ;
    }
    else {
        getter = getterOrOptions.get;
        setter = getterOrOptions.set;
    }
    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
    if (debugOptions && !isSSR) {
        cRef.effect.onTrack = debugOptions.onTrack;
        cRef.effect.onTrigger = debugOptions.onTrigger;
    }
    return cRef;
}

var _a;
const tick = /*#__PURE__*/ Promise.resolve();
const queue = [];
let queued = false;
const scheduler = (fn) => {
    queue.push(fn);
    if (!queued) {
        queued = true;
        tick.then(flush);
    }
};
const flush = () => {
    for (let i = 0; i < queue.length; i++) {
        queue[i]();
    }
    queue.length = 0;
    queued = false;
};
class DeferredComputedRefImpl {
    constructor(getter) {
        this.dep = undefined;
        this._dirty = true;
        this.__v_isRef = true;
        this[_a] = true;
        let compareTarget;
        let hasCompareTarget = false;
        let scheduled = false;
        this.effect = new ReactiveEffect(getter, (computedTrigger) => {
            if (this.dep) {
                if (computedTrigger) {
                    compareTarget = this._value;
                    hasCompareTarget = true;
                }
                else if (!scheduled) {
                    const valueToCompare = hasCompareTarget ? compareTarget : this._value;
                    scheduled = true;
                    hasCompareTarget = false;
                    scheduler(() => {
                        if (this.effect.active && this._get() !== valueToCompare) {
                            triggerRefValue(this);
                        }
                        scheduled = false;
                    });
                }
                // chained upstream computeds are notified synchronously to ensure
                // value invalidation in case of sync access; normal effects are
                // deferred to be triggered in scheduler.
                for (const e of this.dep) {
                    if (e.computed instanceof DeferredComputedRefImpl) {
                        e.scheduler(true /* computedTrigger */);
                    }
                }
            }
            this._dirty = true;
        });
        this.effect.computed = this;
    }
    _get() {
        if (this._dirty) {
            this._dirty = false;
            return (this._value = this.effect.run());
        }
        return this._value;
    }
    get value() {
        trackRefValue(this);
        // the computed ref may get wrapped by other proxies e.g. readonly() #3376
        return toRaw(this)._get();
    }
}
_a = "__v_isReadonly" /* IS_READONLY */;
function deferredComputed(getter) {
    return new DeferredComputedRefImpl(getter);
}

exports.EffectScope = EffectScope;
exports.ITERATE_KEY = ITERATE_KEY;
exports.ReactiveEffect = ReactiveEffect;
exports.computed = computed;
exports.customRef = customRef;
exports.deferredComputed = deferredComputed;
exports.effect = effect;
exports.effectScope = effectScope;
exports.enableTracking = enableTracking;
exports.getCurrentScope = getCurrentScope;
exports.isProxy = isProxy;
exports.isReactive = isReactive;
exports.isReadonly = isReadonly;
exports.isRef = isRef;
exports.isShallow = isShallow;
exports.markRaw = markRaw;
exports.onScopeDispose = onScopeDispose;
exports.pauseTracking = pauseTracking;
exports.proxyRefs = proxyRefs;
exports.reactive = reactive;
exports.readonly = readonly;
exports.ref = ref;
exports.resetTracking = resetTracking;
exports.shallowReactive = shallowReactive;
exports.shallowReadonly = shallowReadonly;
exports.shallowRef = shallowRef;
exports.stop = stop;
exports.toRaw = toRaw;
exports.toRef = toRef;
exports.toRefs = toRefs;
exports.track = track;
exports.trigger = trigger;
exports.triggerRef = triggerRef;
exports.unref = unref;
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var shared = require('@vue/shared');

let activeEffectScope;
class EffectScope {
    constructor(detached = false) {
        /**
         * @internal
         */
        this.active = true;
        /**
         * @internal
         */
        this.effects = [];
        /**
         * @internal
         */
        this.cleanups = [];
        if (!detached && activeEffectScope) {
            this.parent = activeEffectScope;
            this.index =
                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
        }
    }
    run(fn) {
        if (this.active) {
            const currentEffectScope = activeEffectScope;
            try {
                activeEffectScope = this;
                return fn();
            }
            finally {
                activeEffectScope = currentEffectScope;
            }
        }
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    on() {
        activeEffectScope = this;
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    off() {
        activeEffectScope = this.parent;
    }
    stop(fromParent) {
        if (this.active) {
            let i, l;
            for (i = 0, l = this.effects.length; i < l; i++) {
                this.effects[i].stop();
            }
            for (i = 0, l = this.cleanups.length; i < l; i++) {
                this.cleanups[i]();
            }
            if (this.scopes) {
                for (i = 0, l = this.scopes.length; i < l; i++) {
                    this.scopes[i].stop(true);
                }
            }
            // nested scope, dereference from parent to avoid memory leaks
            if (this.parent && !fromParent) {
                // optimized O(1) removal
                const last = this.parent.scopes.pop();
                if (last && last !== this) {
                    this.parent.scopes[this.index] = last;
                    last.index = this.index;
                }
            }
            this.active = false;
        }
    }
}
function effectScope(detached) {
    return new EffectScope(detached);
}
function recordEffectScope(effect, scope = activeEffectScope) {
    if (scope && scope.active) {
        scope.effects.push(effect);
    }
}
function getCurrentScope() {
    return activeEffectScope;
}
function onScopeDispose(fn) {
    if (activeEffectScope) {
        activeEffectScope.cleanups.push(fn);
    }
}

const createDep = (effects) => {
    const dep = new Set(effects);
    dep.w = 0;
    dep.n = 0;
    return dep;
};
const wasTracked = (dep) => (dep.w & trackOpBit) > 0;
const newTracked = (dep) => (dep.n & trackOpBit) > 0;
const initDepMarkers = ({ deps }) => {
    if (deps.length) {
        for (let i = 0; i < deps.length; i++) {
            deps[i].w |= trackOpBit; // set was tracked
        }
    }
};
const finalizeDepMarkers = (effect) => {
    const { deps } = effect;
    if (deps.length) {
        let ptr = 0;
        for (let i = 0; i < deps.length; i++) {
            const dep = deps[i];
            if (wasTracked(dep) && !newTracked(dep)) {
                dep.delete(effect);
            }
            else {
                deps[ptr++] = dep;
            }
            // clear bits
            dep.w &= ~trackOpBit;
            dep.n &= ~trackOpBit;
        }
        deps.length = ptr;
    }
};

const targetMap = new WeakMap();
// The number of effects currently being tracked recursively.
let effectTrackDepth = 0;
let trackOpBit = 1;
/**
 * The bitwise track markers support at most 30 levels of recursion.
 * This value is chosen to enable modern JS engines to use a SMI on all platforms.
 * When recursion depth is greater, fall back to using a full cleanup.
 */
const maxMarkerBits = 30;
let activeEffect;
const ITERATE_KEY = Symbol('');
const MAP_KEY_ITERATE_KEY = Symbol('');
class ReactiveEffect {
    constructor(fn, scheduler = null, scope) {
        this.fn = fn;
        this.scheduler = scheduler;
        this.active = true;
        this.deps = [];
        this.parent = undefined;
        recordEffectScope(this, scope);
    }
    run() {
        if (!this.active) {
            return this.fn();
        }
        let parent = activeEffect;
        let lastShouldTrack = shouldTrack;
        while (parent) {
            if (parent === this) {
                return;
            }
            parent = parent.parent;
        }
        try {
            this.parent = activeEffect;
            activeEffect = this;
            shouldTrack = true;
            trackOpBit = 1 << ++effectTrackDepth;
            if (effectTrackDepth <= maxMarkerBits) {
                initDepMarkers(this);
            }
            else {
                cleanupEffect(this);
            }
            return this.fn();
        }
        finally {
            if (effectTrackDepth <= maxMarkerBits) {
                finalizeDepMarkers(this);
            }
            trackOpBit = 1 << --effectTrackDepth;
            activeEffect = this.parent;
            shouldTrack = lastShouldTrack;
            this.parent = undefined;
            if (this.deferStop) {
                this.stop();
            }
        }
    }
    stop() {
        // stopped while running itself - defer the cleanup
        if (activeEffect === this) {
            this.deferStop = true;
        }
        else if (this.active) {
            cleanupEffect(this);
            if (this.onStop) {
                this.onStop();
            }
            this.active = false;
        }
    }
}
function cleanupEffect(effect) {
    const { deps } = effect;
    if (deps.length) {
        for (let i = 0; i < deps.length; i++) {
            deps[i].delete(effect);
        }
        deps.length = 0;
    }
}
function effect(fn, options) {
    if (fn.effect) {
        fn = fn.effect.fn;
    }
    const _effect = new ReactiveEffect(fn);
    if (options) {
        shared.extend(_effect, options);
        if (options.scope)
            recordEffectScope(_effect, options.scope);
    }
    if (!options || !options.lazy) {
        _effect.run();
    }
    const runner = _effect.run.bind(_effect);
    runner.effect = _effect;
    return runner;
}
function stop(runner) {
    runner.effect.stop();
}
let shouldTrack = true;
const trackStack = [];
function pauseTracking() {
    trackStack.push(shouldTrack);
    shouldTrack = false;
}
function enableTracking() {
    trackStack.push(shouldTrack);
    shouldTrack = true;
}
function resetTracking() {
    const last = trackStack.pop();
    shouldTrack = last === undefined ? true : last;
}
function track(target, type, key) {
    if (shouldTrack && activeEffect) {
        let depsMap = targetMap.get(target);
        if (!depsMap) {
            targetMap.set(target, (depsMap = new Map()));
        }
        let dep = depsMap.get(key);
        if (!dep) {
            depsMap.set(key, (dep = createDep()));
        }
        trackEffects(dep);
    }
}
function trackEffects(dep, debuggerEventExtraInfo) {
    let shouldTrack = false;
    if (effectTrackDepth <= maxMarkerBits) {
        if (!newTracked(dep)) {
            dep.n |= trackOpBit; // set newly tracked
            shouldTrack = !wasTracked(dep);
        }
    }
    else {
        // Full cleanup mode.
        shouldTrack = !dep.has(activeEffect);
    }
    if (shouldTrack) {
        dep.add(activeEffect);
        activeEffect.deps.push(dep);
    }
}
function trigger(target, type, key, newValue, oldValue, oldTarget) {
    const depsMap = targetMap.get(target);
    if (!depsMap) {
        // never been tracked
        return;
    }
    let deps = [];
    if (type === "clear" /* CLEAR */) {
        // collection being cleared
        // trigger all effects for target
        deps = [...depsMap.values()];
    }
    else if (key === 'length' && shared.isArray(target)) {
        depsMap.forEach((dep, key) => {
            if (key === 'length' || key >= newValue) {
                deps.push(dep);
            }
        });
    }
    else {
        // schedule runs for SET | ADD | DELETE
        if (key !== void 0) {
            deps.push(depsMap.get(key));
        }
        // also run for iteration key on ADD | DELETE | Map.SET
        switch (type) {
            case "add" /* ADD */:
                if (!shared.isArray(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                    if (shared.isMap(target)) {
                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                    }
                }
                else if (shared.isIntegerKey(key)) {
                    // new index added to array -> length changes
                    deps.push(depsMap.get('length'));
                }
                break;
            case "delete" /* DELETE */:
                if (!shared.isArray(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                    if (shared.isMap(target)) {
                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                    }
                }
                break;
            case "set" /* SET */:
                if (shared.isMap(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                }
                break;
        }
    }
    if (deps.length === 1) {
        if (deps[0]) {
            {
                triggerEffects(deps[0]);
            }
        }
    }
    else {
        const effects = [];
        for (const dep of deps) {
            if (dep) {
                effects.push(...dep);
            }
        }
        {
            triggerEffects(createDep(effects));
        }
    }
}
function triggerEffects(dep, debuggerEventExtraInfo) {
    // spread into array for stabilization
    for (const effect of shared.isArray(dep) ? dep : [...dep]) {
        if (effect !== activeEffect || effect.allowRecurse) {
            if (effect.scheduler) {
                effect.scheduler();
            }
            else {
                effect.run();
            }
        }
    }
}

const isNonTrackableKeys = /*#__PURE__*/ shared.makeMap(`__proto__,__v_isRef,__isVue`);
const builtInSymbols = new Set(
/*#__PURE__*/
Object.getOwnPropertyNames(Symbol)
    .map(key => Symbol[key])
    .filter(shared.isSymbol));
const get = /*#__PURE__*/ createGetter();
const shallowGet = /*#__PURE__*/ createGetter(false, true);
const readonlyGet = /*#__PURE__*/ createGetter(true);
const shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);
const arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();
function createArrayInstrumentations() {
    const instrumentations = {};
    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {
        instrumentations[key] = function (...args) {
            const arr = toRaw(this);
            for (let i = 0, l = this.length; i < l; i++) {
                track(arr, "get" /* GET */, i + '');
            }
            // we run the method using the original args first (which may be reactive)
            const res = arr[key](...args);
            if (res === -1 || res === false) {
                // if that didn't work, run it again using raw values.
                return arr[key](...args.map(toRaw));
            }
            else {
                return res;
            }
        };
    });
    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {
        instrumentations[key] = function (...args) {
            pauseTracking();
            const res = toRaw(this)[key].apply(this, args);
            resetTracking();
            return res;
        };
    });
    return instrumentations;
}
function createGetter(isReadonly = false, shallow = false) {
    return function get(target, key, receiver) {
        if (key === "__v_isReactive" /* IS_REACTIVE */) {
            return !isReadonly;
        }
        else if (key === "__v_isReadonly" /* IS_READONLY */) {
            return isReadonly;
        }
        else if (key === "__v_isShallow" /* IS_SHALLOW */) {
            return shallow;
        }
        else if (key === "__v_raw" /* RAW */ &&
            receiver ===
                (isReadonly
                    ? shallow
                        ? shallowReadonlyMap
                        : readonlyMap
                    : shallow
                        ? shallowReactiveMap
                        : reactiveMap).get(target)) {
            return target;
        }
        const targetIsArray = shared.isArray(target);
        if (!isReadonly && targetIsArray && shared.hasOwn(arrayInstrumentations, key)) {
            return Reflect.get(arrayInstrumentations, key, receiver);
        }
        const res = Reflect.get(target, key, receiver);
        if (shared.isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
            return res;
        }
        if (!isReadonly) {
            track(target, "get" /* GET */, key);
        }
        if (shallow) {
            return res;
        }
        if (isRef(res)) {
            // ref unwrapping - does not apply for Array + integer key.
            const shouldUnwrap = !targetIsArray || !shared.isIntegerKey(key);
            return shouldUnwrap ? res.value : res;
        }
        if (shared.isObject(res)) {
            // Convert returned value into a proxy as well. we do the isObject check
            // here to avoid invalid value warning. Also need to lazy access readonly
            // and reactive here to avoid circular dependency.
            return isReadonly ? readonly(res) : reactive(res);
        }
        return res;
    };
}
const set = /*#__PURE__*/ createSetter();
const shallowSet = /*#__PURE__*/ createSetter(true);
function createSetter(shallow = false) {
    return function set(target, key, value, receiver) {
        let oldValue = target[key];
        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {
            return false;
        }
        if (!shallow && !isReadonly(value)) {
            if (!isShallow(value)) {
                value = toRaw(value);
                oldValue = toRaw(oldValue);
            }
            if (!shared.isArray(target) && isRef(oldValue) && !isRef(value)) {
                oldValue.value = value;
                return true;
            }
        }
        const hadKey = shared.isArray(target) && shared.isIntegerKey(key)
            ? Number(key) < target.length
            : shared.hasOwn(target, key);
        const result = Reflect.set(target, key, value, receiver);
        // don't trigger if target is something up in the prototype chain of original
        if (target === toRaw(receiver)) {
            if (!hadKey) {
                trigger(target, "add" /* ADD */, key, value);
            }
            else if (shared.hasChanged(value, oldValue)) {
                trigger(target, "set" /* SET */, key, value);
            }
        }
        return result;
    };
}
function deleteProperty(target, key) {
    const hadKey = shared.hasOwn(target, key);
    target[key];
    const result = Reflect.deleteProperty(target, key);
    if (result && hadKey) {
        trigger(target, "delete" /* DELETE */, key, undefined);
    }
    return result;
}
function has(target, key) {
    const result = Reflect.has(target, key);
    if (!shared.isSymbol(key) || !builtInSymbols.has(key)) {
        track(target, "has" /* HAS */, key);
    }
    return result;
}
function ownKeys(target) {
    track(target, "iterate" /* ITERATE */, shared.isArray(target) ? 'length' : ITERATE_KEY);
    return Reflect.ownKeys(target);
}
const mutableHandlers = {
    get,
    set,
    deleteProperty,
    has,
    ownKeys
};
const readonlyHandlers = {
    get: readonlyGet,
    set(target, key) {
        return true;
    },
    deleteProperty(target, key) {
        return true;
    }
};
const shallowReactiveHandlers = /*#__PURE__*/ shared.extend({}, mutableHandlers, {
    get: shallowGet,
    set: shallowSet
});
// Props handlers are special in the sense that it should not unwrap top-level
// refs (in order to allow refs to be explicitly passed down), but should
// retain the reactivity of the normal readonly object.
const shallowReadonlyHandlers = /*#__PURE__*/ shared.extend({}, readonlyHandlers, {
    get: shallowReadonlyGet
});

const toShallow = (value) => value;
const getProto = (v) => Reflect.getPrototypeOf(v);
function get$1(target, key, isReadonly = false, isShallow = false) {
    // #1772: readonly(reactive(Map)) should return readonly + reactive version
    // of the value
    target = target["__v_raw" /* RAW */];
    const rawTarget = toRaw(target);
    const rawKey = toRaw(key);
    if (key !== rawKey) {
        !isReadonly && track(rawTarget, "get" /* GET */, key);
    }
    !isReadonly && track(rawTarget, "get" /* GET */, rawKey);
    const { has } = getProto(rawTarget);
    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
    if (has.call(rawTarget, key)) {
        return wrap(target.get(key));
    }
    else if (has.call(rawTarget, rawKey)) {
        return wrap(target.get(rawKey));
    }
    else if (target !== rawTarget) {
        // #3602 readonly(reactive(Map))
        // ensure that the nested reactive `Map` can do tracking for itself
        target.get(key);
    }
}
function has$1(key, isReadonly = false) {
    const target = this["__v_raw" /* RAW */];
    const rawTarget = toRaw(target);
    const rawKey = toRaw(key);
    if (key !== rawKey) {
        !isReadonly && track(rawTarget, "has" /* HAS */, key);
    }
    !isReadonly && track(rawTarget, "has" /* HAS */, rawKey);
    return key === rawKey
        ? target.has(key)
        : target.has(key) || target.has(rawKey);
}
function size(target, isReadonly = false) {
    target = target["__v_raw" /* RAW */];
    !isReadonly && track(toRaw(target), "iterate" /* ITERATE */, ITERATE_KEY);
    return Reflect.get(target, 'size', target);
}
function add(value) {
    value = toRaw(value);
    const target = toRaw(this);
    const proto = getProto(target);
    const hadKey = proto.has.call(target, value);
    if (!hadKey) {
        target.add(value);
        trigger(target, "add" /* ADD */, value, value);
    }
    return this;
}
function set$1(key, value) {
    value = toRaw(value);
    const target = toRaw(this);
    const { has, get } = getProto(target);
    let hadKey = has.call(target, key);
    if (!hadKey) {
        key = toRaw(key);
        hadKey = has.call(target, key);
    }
    const oldValue = get.call(target, key);
    target.set(key, value);
    if (!hadKey) {
        trigger(target, "add" /* ADD */, key, value);
    }
    else if (shared.hasChanged(value, oldValue)) {
        trigger(target, "set" /* SET */, key, value);
    }
    return this;
}
function deleteEntry(key) {
    const target = toRaw(this);
    const { has, get } = getProto(target);
    let hadKey = has.call(target, key);
    if (!hadKey) {
        key = toRaw(key);
        hadKey = has.call(target, key);
    }
    get ? get.call(target, key) : undefined;
    // forward the operation before queueing reactions
    const result = target.delete(key);
    if (hadKey) {
        trigger(target, "delete" /* DELETE */, key, undefined);
    }
    return result;
}
function clear() {
    const target = toRaw(this);
    const hadItems = target.size !== 0;
    // forward the operation before queueing reactions
    const result = target.clear();
    if (hadItems) {
        trigger(target, "clear" /* CLEAR */, undefined, undefined);
    }
    return result;
}
function createForEach(isReadonly, isShallow) {
    return function forEach(callback, thisArg) {
        const observed = this;
        const target = observed["__v_raw" /* RAW */];
        const rawTarget = toRaw(target);
        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
        !isReadonly && track(rawTarget, "iterate" /* ITERATE */, ITERATE_KEY);
        return target.forEach((value, key) => {
            // important: make sure the callback is
            // 1. invoked with the reactive map as `this` and 3rd arg
            // 2. the value received should be a corresponding reactive/readonly.
            return callback.call(thisArg, wrap(value), wrap(key), observed);
        });
    };
}
function createIterableMethod(method, isReadonly, isShallow) {
    return function (...args) {
        const target = this["__v_raw" /* RAW */];
        const rawTarget = toRaw(target);
        const targetIsMap = shared.isMap(rawTarget);
        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);
        const isKeyOnly = method === 'keys' && targetIsMap;
        const innerIterator = target[method](...args);
        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
        !isReadonly &&
            track(rawTarget, "iterate" /* ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);
        // return a wrapped iterator which returns observed versions of the
        // values emitted from the real iterator
        return {
            // iterator protocol
            next() {
                const { value, done } = innerIterator.next();
                return done
                    ? { value, done }
                    : {
                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
                        done
                    };
            },
            // iterable protocol
            [Symbol.iterator]() {
                return this;
            }
        };
    };
}
function createReadonlyMethod(type) {
    return function (...args) {
        return type === "delete" /* DELETE */ ? false : this;
    };
}
function createInstrumentations() {
    const mutableInstrumentations = {
        get(key) {
            return get$1(this, key);
        },
        get size() {
            return size(this);
        },
        has: has$1,
        add,
        set: set$1,
        delete: deleteEntry,
        clear,
        forEach: createForEach(false, false)
    };
    const shallowInstrumentations = {
        get(key) {
            return get$1(this, key, false, true);
        },
        get size() {
            return size(this);
        },
        has: has$1,
        add,
        set: set$1,
        delete: deleteEntry,
        clear,
        forEach: createForEach(false, true)
    };
    const readonlyInstrumentations = {
        get(key) {
            return get$1(this, key, true);
        },
        get size() {
            return size(this, true);
        },
        has(key) {
            return has$1.call(this, key, true);
        },
        add: createReadonlyMethod("add" /* ADD */),
        set: createReadonlyMethod("set" /* SET */),
        delete: createReadonlyMethod("delete" /* DELETE */),
        clear: createReadonlyMethod("clear" /* CLEAR */),
        forEach: createForEach(true, false)
    };
    const shallowReadonlyInstrumentations = {
        get(key) {
            return get$1(this, key, true, true);
        },
        get size() {
            return size(this, true);
        },
        has(key) {
            return has$1.call(this, key, true);
        },
        add: createReadonlyMethod("add" /* ADD */),
        set: createReadonlyMethod("set" /* SET */),
        delete: createReadonlyMethod("delete" /* DELETE */),
        clear: createReadonlyMethod("clear" /* CLEAR */),
        forEach: createForEach(true, true)
    };
    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];
    iteratorMethods.forEach(method => {
        mutableInstrumentations[method] = createIterableMethod(method, false, false);
        readonlyInstrumentations[method] = createIterableMethod(method, true, false);
        shallowInstrumentations[method] = createIterableMethod(method, false, true);
        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);
    });
    return [
        mutableInstrumentations,
        readonlyInstrumentations,
        shallowInstrumentations,
        shallowReadonlyInstrumentations
    ];
}
const [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();
function createInstrumentationGetter(isReadonly, shallow) {
    const instrumentations = shallow
        ? isReadonly
            ? shallowReadonlyInstrumentations
            : shallowInstrumentations
        : isReadonly
            ? readonlyInstrumentations
            : mutableInstrumentations;
    return (target, key, receiver) => {
        if (key === "__v_isReactive" /* IS_REACTIVE */) {
            return !isReadonly;
        }
        else if (key === "__v_isReadonly" /* IS_READONLY */) {
            return isReadonly;
        }
        else if (key === "__v_raw" /* RAW */) {
            return target;
        }
        return Reflect.get(shared.hasOwn(instrumentations, key) && key in target
            ? instrumentations
            : target, key, receiver);
    };
}
const mutableCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(false, false)
};
const shallowCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(false, true)
};
const readonlyCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(true, false)
};
const shallowReadonlyCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(true, true)
};

const reactiveMap = new WeakMap();
const shallowReactiveMap = new WeakMap();
const readonlyMap = new WeakMap();
const shallowReadonlyMap = new WeakMap();
function targetTypeMap(rawType) {
    switch (rawType) {
        case 'Object':
        case 'Array':
            return 1 /* COMMON */;
        case 'Map':
        case 'Set':
        case 'WeakMap':
        case 'WeakSet':
            return 2 /* COLLECTION */;
        default:
            return 0 /* INVALID */;
    }
}
function getTargetType(value) {
    return value["__v_skip" /* SKIP */] || !Object.isExtensible(value)
        ? 0 /* INVALID */
        : targetTypeMap(shared.toRawType(value));
}
function reactive(target) {
    // if trying to observe a readonly proxy, return the readonly version.
    if (isReadonly(target)) {
        return target;
    }
    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);
}
/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
function shallowReactive(target) {
    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);
}
/**
 * Creates a readonly copy of the original object. Note the returned copy is not
 * made reactive, but `readonly` can be called on an already reactive object.
 */
function readonly(target) {
    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);
}
/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
function shallowReadonly(target) {
    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);
}
function createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {
    if (!shared.isObject(target)) {
        return target;
    }
    // target is already a Proxy, return it.
    // exception: calling readonly() on a reactive object
    if (target["__v_raw" /* RAW */] &&
        !(isReadonly && target["__v_isReactive" /* IS_REACTIVE */])) {
        return target;
    }
    // target already has corresponding Proxy
    const existingProxy = proxyMap.get(target);
    if (existingProxy) {
        return existingProxy;
    }
    // only a whitelist of value types can be observed.
    const targetType = getTargetType(target);
    if (targetType === 0 /* INVALID */) {
        return target;
    }
    const proxy = new Proxy(target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers);
    proxyMap.set(target, proxy);
    return proxy;
}
function isReactive(value) {
    if (isReadonly(value)) {
        return isReactive(value["__v_raw" /* RAW */]);
    }
    return !!(value && value["__v_isReactive" /* IS_REACTIVE */]);
}
function isReadonly(value) {
    return !!(value && value["__v_isReadonly" /* IS_READONLY */]);
}
function isShallow(value) {
    return !!(value && value["__v_isShallow" /* IS_SHALLOW */]);
}
function isProxy(value) {
    return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
    const raw = observed && observed["__v_raw" /* RAW */];
    return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
    shared.def(value, "__v_skip" /* SKIP */, true);
    return value;
}
const toReactive = (value) => shared.isObject(value) ? reactive(value) : value;
const toReadonly = (value) => shared.isObject(value) ? readonly(value) : value;

function trackRefValue(ref) {
    if (shouldTrack && activeEffect) {
        ref = toRaw(ref);
        {
            trackEffects(ref.dep || (ref.dep = createDep()));
        }
    }
}
function triggerRefValue(ref, newVal) {
    ref = toRaw(ref);
    if (ref.dep) {
        {
            triggerEffects(ref.dep);
        }
    }
}
function isRef(r) {
    return !!(r && r.__v_isRef === true);
}
function ref(value) {
    return createRef(value, false);
}
function shallowRef(value) {
    return createRef(value, true);
}
function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    return new RefImpl(rawValue, shallow);
}
class RefImpl {
    constructor(value, __v_isShallow) {
        this.__v_isShallow = __v_isShallow;
        this.dep = undefined;
        this.__v_isRef = true;
        this._rawValue = __v_isShallow ? value : toRaw(value);
        this._value = __v_isShallow ? value : toReactive(value);
    }
    get value() {
        trackRefValue(this);
        return this._value;
    }
    set value(newVal) {
        newVal = this.__v_isShallow ? newVal : toRaw(newVal);
        if (shared.hasChanged(newVal, this._rawValue)) {
            this._rawValue = newVal;
            this._value = this.__v_isShallow ? newVal : toReactive(newVal);
            triggerRefValue(this);
        }
    }
}
function triggerRef(ref) {
    triggerRefValue(ref);
}
function unref(ref) {
    return isRef(ref) ? ref.value : ref;
}
const shallowUnwrapHandlers = {
    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
    set: (target, key, value, receiver) => {
        const oldValue = target[key];
        if (isRef(oldValue) && !isRef(value)) {
            oldValue.value = value;
            return true;
        }
        else {
            return Reflect.set(target, key, value, receiver);
        }
    }
};
function proxyRefs(objectWithRefs) {
    return isReactive(objectWithRefs)
        ? objectWithRefs
        : new Proxy(objectWithRefs, shallowUnwrapHandlers);
}
class CustomRefImpl {
    constructor(factory) {
        this.dep = undefined;
        this.__v_isRef = true;
        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));
        this._get = get;
        this._set = set;
    }
    get value() {
        return this._get();
    }
    set value(newVal) {
        this._set(newVal);
    }
}
function customRef(factory) {
    return new CustomRefImpl(factory);
}
function toRefs(object) {
    const ret = shared.isArray(object) ? new Array(object.length) : {};
    for (const key in object) {
        ret[key] = toRef(object, key);
    }
    return ret;
}
class ObjectRefImpl {
    constructor(_object, _key, _defaultValue) {
        this._object = _object;
        this._key = _key;
        this._defaultValue = _defaultValue;
        this.__v_isRef = true;
    }
    get value() {
        const val = this._object[this._key];
        return val === undefined ? this._defaultValue : val;
    }
    set value(newVal) {
        this._object[this._key] = newVal;
    }
}
function toRef(object, key, defaultValue) {
    const val = object[key];
    return isRef(val)
        ? val
        : new ObjectRefImpl(object, key, defaultValue);
}

class ComputedRefImpl {
    constructor(getter, _setter, isReadonly, isSSR) {
        this._setter = _setter;
        this.dep = undefined;
        this.__v_isRef = true;
        this._dirty = true;
        this.effect = new ReactiveEffect(getter, () => {
            if (!this._dirty) {
                this._dirty = true;
                triggerRefValue(this);
            }
        });
        this.effect.computed = this;
        this.effect.active = this._cacheable = !isSSR;
        this["__v_isReadonly" /* IS_READONLY */] = isReadonly;
    }
    get value() {
        // the computed ref may get wrapped by other proxies e.g. readonly() #3376
        const self = toRaw(this);
        trackRefValue(self);
        if (self._dirty || !self._cacheable) {
            self._dirty = false;
            self._value = self.effect.run();
        }
        return self._value;
    }
    set value(newValue) {
        this._setter(newValue);
    }
}
function computed(getterOrOptions, debugOptions, isSSR = false) {
    let getter;
    let setter;
    const onlyGetter = shared.isFunction(getterOrOptions);
    if (onlyGetter) {
        getter = getterOrOptions;
        setter = shared.NOOP;
    }
    else {
        getter = getterOrOptions.get;
        setter = getterOrOptions.set;
    }
    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
    return cRef;
}

var _a;
const tick = /*#__PURE__*/ Promise.resolve();
const queue = [];
let queued = false;
const scheduler = (fn) => {
    queue.push(fn);
    if (!queued) {
        queued = true;
        tick.then(flush);
    }
};
const flush = () => {
    for (let i = 0; i < queue.length; i++) {
        queue[i]();
    }
    queue.length = 0;
    queued = false;
};
class DeferredComputedRefImpl {
    constructor(getter) {
        this.dep = undefined;
        this._dirty = true;
        this.__v_isRef = true;
        this[_a] = true;
        let compareTarget;
        let hasCompareTarget = false;
        let scheduled = false;
        this.effect = new ReactiveEffect(getter, (computedTrigger) => {
            if (this.dep) {
                if (computedTrigger) {
                    compareTarget = this._value;
                    hasCompareTarget = true;
                }
                else if (!scheduled) {
                    const valueToCompare = hasCompareTarget ? compareTarget : this._value;
                    scheduled = true;
                    hasCompareTarget = false;
                    scheduler(() => {
                        if (this.effect.active && this._get() !== valueToCompare) {
                            triggerRefValue(this);
                        }
                        scheduled = false;
                    });
                }
                // chained upstream computeds are notified synchronously to ensure
                // value invalidation in case of sync access; normal effects are
                // deferred to be triggered in scheduler.
                for (const e of this.dep) {
                    if (e.computed instanceof DeferredComputedRefImpl) {
                        e.scheduler(true /* computedTrigger */);
                    }
                }
            }
            this._dirty = true;
        });
        this.effect.computed = this;
    }
    _get() {
        if (this._dirty) {
            this._dirty = false;
            return (this._value = this.effect.run());
        }
        return this._value;
    }
    get value() {
        trackRefValue(this);
        // the computed ref may get wrapped by other proxies e.g. readonly() #3376
        return toRaw(this)._get();
    }
}
_a = "__v_isReadonly" /* IS_READONLY */;
function deferredComputed(getter) {
    return new DeferredComputedRefImpl(getter);
}

exports.EffectScope = EffectScope;
exports.ITERATE_KEY = ITERATE_KEY;
exports.ReactiveEffect = ReactiveEffect;
exports.computed = computed;
exports.customRef = customRef;
exports.deferredComputed = deferredComputed;
exports.effect = effect;
exports.effectScope = effectScope;
exports.enableTracking = enableTracking;
exports.getCurrentScope = getCurrentScope;
exports.isProxy = isProxy;
exports.isReactive = isReactive;
exports.isReadonly = isReadonly;
exports.isRef = isRef;
exports.isShallow = isShallow;
exports.markRaw = markRaw;
exports.onScopeDispose = onScopeDispose;
exports.pauseTracking = pauseTracking;
exports.proxyRefs = proxyRefs;
exports.reactive = reactive;
exports.readonly = readonly;
exports.ref = ref;
exports.resetTracking = resetTracking;
exports.shallowReactive = shallowReactive;
exports.shallowReadonly = shallowReadonly;
exports.shallowRef = shallowRef;
exports.stop = stop;
exports.toRaw = toRaw;
exports.toRef = toRef;
exports.toRefs = toRefs;
exports.track = track;
exports.trigger = trigger;
exports.triggerRef = triggerRef;
exports.unref = unref;
/**
 * Make a map and return a function for checking if a key
 * is in that map.
 * IMPORTANT: all calls of this function must be prefixed with
 * \/\*#\_\_PURE\_\_\*\/
 * So that rollup can tree-shake them if necessary.
 */
function makeMap(str, expectsLowerCase) {
    const map = Object.create(null);
    const list = str.split(',');
    for (let i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];
}

Object.freeze({})
    ;
Object.freeze([]) ;
const extend = Object.assign;
const hasOwnProperty = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty.call(val, key);
const isArray = Array.isArray;
const isMap = (val) => toTypeString(val) === '[object Map]';
const isFunction = (val) => typeof val === 'function';
const isString = (val) => typeof val === 'string';
const isSymbol = (val) => typeof val === 'symbol';
const isObject = (val) => val !== null && typeof val === 'object';
const objectToString = Object.prototype.toString;
const toTypeString = (value) => objectToString.call(value);
const toRawType = (value) => {
    // extract "RawType" from strings like "[object RawType]"
    return toTypeString(value).slice(8, -1);
};
const isIntegerKey = (key) => isString(key) &&
    key !== 'NaN' &&
    key[0] !== '-' &&
    '' + parseInt(key, 10) === key;
const cacheStringFunction = (fn) => {
    const cache = Object.create(null);
    return ((str) => {
        const hit = cache[str];
        return hit || (cache[str] = fn(str));
    });
};
/**
 * @private
 */
const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));
// compare whether a value has changed, accounting for NaN.
const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
const def = (obj, key, value) => {
    Object.defineProperty(obj, key, {
        configurable: true,
        enumerable: false,
        value
    });
};

function warn(msg, ...args) {
    console.warn(`[Vue warn] ${msg}`, ...args);
}

let activeEffectScope;
class EffectScope {
    constructor(detached = false) {
        /**
         * @internal
         */
        this.active = true;
        /**
         * @internal
         */
        this.effects = [];
        /**
         * @internal
         */
        this.cleanups = [];
        if (!detached && activeEffectScope) {
            this.parent = activeEffectScope;
            this.index =
                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
        }
    }
    run(fn) {
        if (this.active) {
            const currentEffectScope = activeEffectScope;
            try {
                activeEffectScope = this;
                return fn();
            }
            finally {
                activeEffectScope = currentEffectScope;
            }
        }
        else {
            warn(`cannot run an inactive effect scope.`);
        }
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    on() {
        activeEffectScope = this;
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    off() {
        activeEffectScope = this.parent;
    }
    stop(fromParent) {
        if (this.active) {
            let i, l;
            for (i = 0, l = this.effects.length; i < l; i++) {
                this.effects[i].stop();
            }
            for (i = 0, l = this.cleanups.length; i < l; i++) {
                this.cleanups[i]();
            }
            if (this.scopes) {
                for (i = 0, l = this.scopes.length; i < l; i++) {
                    this.scopes[i].stop(true);
                }
            }
            // nested scope, dereference from parent to avoid memory leaks
            if (this.parent && !fromParent) {
                // optimized O(1) removal
                const last = this.parent.scopes.pop();
                if (last && last !== this) {
                    this.parent.scopes[this.index] = last;
                    last.index = this.index;
                }
            }
            this.active = false;
        }
    }
}
function effectScope(detached) {
    return new EffectScope(detached);
}
function recordEffectScope(effect, scope = activeEffectScope) {
    if (scope && scope.active) {
        scope.effects.push(effect);
    }
}
function getCurrentScope() {
    return activeEffectScope;
}
function onScopeDispose(fn) {
    if (activeEffectScope) {
        activeEffectScope.cleanups.push(fn);
    }
    else {
        warn(`onScopeDispose() is called when there is no active effect scope` +
            ` to be associated with.`);
    }
}

const createDep = (effects) => {
    const dep = new Set(effects);
    dep.w = 0;
    dep.n = 0;
    return dep;
};
const wasTracked = (dep) => (dep.w & trackOpBit) > 0;
const newTracked = (dep) => (dep.n & trackOpBit) > 0;
const initDepMarkers = ({ deps }) => {
    if (deps.length) {
        for (let i = 0; i < deps.length; i++) {
            deps[i].w |= trackOpBit; // set was tracked
        }
    }
};
const finalizeDepMarkers = (effect) => {
    const { deps } = effect;
    if (deps.length) {
        let ptr = 0;
        for (let i = 0; i < deps.length; i++) {
            const dep = deps[i];
            if (wasTracked(dep) && !newTracked(dep)) {
                dep.delete(effect);
            }
            else {
                deps[ptr++] = dep;
            }
            // clear bits
            dep.w &= ~trackOpBit;
            dep.n &= ~trackOpBit;
        }
        deps.length = ptr;
    }
};

const targetMap = new WeakMap();
// The number of effects currently being tracked recursively.
let effectTrackDepth = 0;
let trackOpBit = 1;
/**
 * The bitwise track markers support at most 30 levels of recursion.
 * This value is chosen to enable modern JS engines to use a SMI on all platforms.
 * When recursion depth is greater, fall back to using a full cleanup.
 */
const maxMarkerBits = 30;
let activeEffect;
const ITERATE_KEY = Symbol('iterate' );
const MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );
class ReactiveEffect {
    constructor(fn, scheduler = null, scope) {
        this.fn = fn;
        this.scheduler = scheduler;
        this.active = true;
        this.deps = [];
        this.parent = undefined;
        recordEffectScope(this, scope);
    }
    run() {
        if (!this.active) {
            return this.fn();
        }
        let parent = activeEffect;
        let lastShouldTrack = shouldTrack;
        while (parent) {
            if (parent === this) {
                return;
            }
            parent = parent.parent;
        }
        try {
            this.parent = activeEffect;
            activeEffect = this;
            shouldTrack = true;
            trackOpBit = 1 << ++effectTrackDepth;
            if (effectTrackDepth <= maxMarkerBits) {
                initDepMarkers(this);
            }
            else {
                cleanupEffect(this);
            }
            return this.fn();
        }
        finally {
            if (effectTrackDepth <= maxMarkerBits) {
                finalizeDepMarkers(this);
            }
            trackOpBit = 1 << --effectTrackDepth;
            activeEffect = this.parent;
            shouldTrack = lastShouldTrack;
            this.parent = undefined;
            if (this.deferStop) {
                this.stop();
            }
        }
    }
    stop() {
        // stopped while running itself - defer the cleanup
        if (activeEffect === this) {
            this.deferStop = true;
        }
        else if (this.active) {
            cleanupEffect(this);
            if (this.onStop) {
                this.onStop();
            }
            this.active = false;
        }
    }
}
function cleanupEffect(effect) {
    const { deps } = effect;
    if (deps.length) {
        for (let i = 0; i < deps.length; i++) {
            deps[i].delete(effect);
        }
        deps.length = 0;
    }
}
function effect(fn, options) {
    if (fn.effect) {
        fn = fn.effect.fn;
    }
    const _effect = new ReactiveEffect(fn);
    if (options) {
        extend(_effect, options);
        if (options.scope)
            recordEffectScope(_effect, options.scope);
    }
    if (!options || !options.lazy) {
        _effect.run();
    }
    const runner = _effect.run.bind(_effect);
    runner.effect = _effect;
    return runner;
}
function stop(runner) {
    runner.effect.stop();
}
let shouldTrack = true;
const trackStack = [];
function pauseTracking() {
    trackStack.push(shouldTrack);
    shouldTrack = false;
}
function enableTracking() {
    trackStack.push(shouldTrack);
    shouldTrack = true;
}
function resetTracking() {
    const last = trackStack.pop();
    shouldTrack = last === undefined ? true : last;
}
function track(target, type, key) {
    if (shouldTrack && activeEffect) {
        let depsMap = targetMap.get(target);
        if (!depsMap) {
            targetMap.set(target, (depsMap = new Map()));
        }
        let dep = depsMap.get(key);
        if (!dep) {
            depsMap.set(key, (dep = createDep()));
        }
        const eventInfo = { effect: activeEffect, target, type, key }
            ;
        trackEffects(dep, eventInfo);
    }
}
function trackEffects(dep, debuggerEventExtraInfo) {
    let shouldTrack = false;
    if (effectTrackDepth <= maxMarkerBits) {
        if (!newTracked(dep)) {
            dep.n |= trackOpBit; // set newly tracked
            shouldTrack = !wasTracked(dep);
        }
    }
    else {
        // Full cleanup mode.
        shouldTrack = !dep.has(activeEffect);
    }
    if (shouldTrack) {
        dep.add(activeEffect);
        activeEffect.deps.push(dep);
        if (activeEffect.onTrack) {
            activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));
        }
    }
}
function trigger(target, type, key, newValue, oldValue, oldTarget) {
    const depsMap = targetMap.get(target);
    if (!depsMap) {
        // never been tracked
        return;
    }
    let deps = [];
    if (type === "clear" /* CLEAR */) {
        // collection being cleared
        // trigger all effects for target
        deps = [...depsMap.values()];
    }
    else if (key === 'length' && isArray(target)) {
        depsMap.forEach((dep, key) => {
            if (key === 'length' || key >= newValue) {
                deps.push(dep);
            }
        });
    }
    else {
        // schedule runs for SET | ADD | DELETE
        if (key !== void 0) {
            deps.push(depsMap.get(key));
        }
        // also run for iteration key on ADD | DELETE | Map.SET
        switch (type) {
            case "add" /* ADD */:
                if (!isArray(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                    if (isMap(target)) {
                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                    }
                }
                else if (isIntegerKey(key)) {
                    // new index added to array -> length changes
                    deps.push(depsMap.get('length'));
                }
                break;
            case "delete" /* DELETE */:
                if (!isArray(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                    if (isMap(target)) {
                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                    }
                }
                break;
            case "set" /* SET */:
                if (isMap(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                }
                break;
        }
    }
    const eventInfo = { target, type, key, newValue, oldValue, oldTarget }
        ;
    if (deps.length === 1) {
        if (deps[0]) {
            {
                triggerEffects(deps[0], eventInfo);
            }
        }
    }
    else {
        const effects = [];
        for (const dep of deps) {
            if (dep) {
                effects.push(...dep);
            }
        }
        {
            triggerEffects(createDep(effects), eventInfo);
        }
    }
}
function triggerEffects(dep, debuggerEventExtraInfo) {
    // spread into array for stabilization
    for (const effect of isArray(dep) ? dep : [...dep]) {
        if (effect !== activeEffect || effect.allowRecurse) {
            if (effect.onTrigger) {
                effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));
            }
            if (effect.scheduler) {
                effect.scheduler();
            }
            else {
                effect.run();
            }
        }
    }
}

const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);
const builtInSymbols = new Set(
/*#__PURE__*/
Object.getOwnPropertyNames(Symbol)
    .map(key => Symbol[key])
    .filter(isSymbol));
const get = /*#__PURE__*/ createGetter();
const shallowGet = /*#__PURE__*/ createGetter(false, true);
const readonlyGet = /*#__PURE__*/ createGetter(true);
const shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);
const arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();
function createArrayInstrumentations() {
    const instrumentations = {};
    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {
        instrumentations[key] = function (...args) {
            const arr = toRaw(this);
            for (let i = 0, l = this.length; i < l; i++) {
                track(arr, "get" /* GET */, i + '');
            }
            // we run the method using the original args first (which may be reactive)
            const res = arr[key](...args);
            if (res === -1 || res === false) {
                // if that didn't work, run it again using raw values.
                return arr[key](...args.map(toRaw));
            }
            else {
                return res;
            }
        };
    });
    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {
        instrumentations[key] = function (...args) {
            pauseTracking();
            const res = toRaw(this)[key].apply(this, args);
            resetTracking();
            return res;
        };
    });
    return instrumentations;
}
function createGetter(isReadonly = false, shallow = false) {
    return function get(target, key, receiver) {
        if (key === "__v_isReactive" /* IS_REACTIVE */) {
            return !isReadonly;
        }
        else if (key === "__v_isReadonly" /* IS_READONLY */) {
            return isReadonly;
        }
        else if (key === "__v_isShallow" /* IS_SHALLOW */) {
            return shallow;
        }
        else if (key === "__v_raw" /* RAW */ &&
            receiver ===
                (isReadonly
                    ? shallow
                        ? shallowReadonlyMap
                        : readonlyMap
                    : shallow
                        ? shallowReactiveMap
                        : reactiveMap).get(target)) {
            return target;
        }
        const targetIsArray = isArray(target);
        if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {
            return Reflect.get(arrayInstrumentations, key, receiver);
        }
        const res = Reflect.get(target, key, receiver);
        if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
            return res;
        }
        if (!isReadonly) {
            track(target, "get" /* GET */, key);
        }
        if (shallow) {
            return res;
        }
        if (isRef(res)) {
            // ref unwrapping - does not apply for Array + integer key.
            const shouldUnwrap = !targetIsArray || !isIntegerKey(key);
            return shouldUnwrap ? res.value : res;
        }
        if (isObject(res)) {
            // Convert returned value into a proxy as well. we do the isObject check
            // here to avoid invalid value warning. Also need to lazy access readonly
            // and reactive here to avoid circular dependency.
            return isReadonly ? readonly(res) : reactive(res);
        }
        return res;
    };
}
const set = /*#__PURE__*/ createSetter();
const shallowSet = /*#__PURE__*/ createSetter(true);
function createSetter(shallow = false) {
    return function set(target, key, value, receiver) {
        let oldValue = target[key];
        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {
            return false;
        }
        if (!shallow && !isReadonly(value)) {
            if (!isShallow(value)) {
                value = toRaw(value);
                oldValue = toRaw(oldValue);
            }
            if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
                oldValue.value = value;
                return true;
            }
        }
        const hadKey = isArray(target) && isIntegerKey(key)
            ? Number(key) < target.length
            : hasOwn(target, key);
        const result = Reflect.set(target, key, value, receiver);
        // don't trigger if target is something up in the prototype chain of original
        if (target === toRaw(receiver)) {
            if (!hadKey) {
                trigger(target, "add" /* ADD */, key, value);
            }
            else if (hasChanged(value, oldValue)) {
                trigger(target, "set" /* SET */, key, value, oldValue);
            }
        }
        return result;
    };
}
function deleteProperty(target, key) {
    const hadKey = hasOwn(target, key);
    const oldValue = target[key];
    const result = Reflect.deleteProperty(target, key);
    if (result && hadKey) {
        trigger(target, "delete" /* DELETE */, key, undefined, oldValue);
    }
    return result;
}
function has(target, key) {
    const result = Reflect.has(target, key);
    if (!isSymbol(key) || !builtInSymbols.has(key)) {
        track(target, "has" /* HAS */, key);
    }
    return result;
}
function ownKeys(target) {
    track(target, "iterate" /* ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);
    return Reflect.ownKeys(target);
}
const mutableHandlers = {
    get,
    set,
    deleteProperty,
    has,
    ownKeys
};
const readonlyHandlers = {
    get: readonlyGet,
    set(target, key) {
        {
            warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target);
        }
        return true;
    },
    deleteProperty(target, key) {
        {
            warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
        }
        return true;
    }
};
const shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {
    get: shallowGet,
    set: shallowSet
});
// Props handlers are special in the sense that it should not unwrap top-level
// refs (in order to allow refs to be explicitly passed down), but should
// retain the reactivity of the normal readonly object.
const shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {
    get: shallowReadonlyGet
});

const toShallow = (value) => value;
const getProto = (v) => Reflect.getPrototypeOf(v);
function get$1(target, key, isReadonly = false, isShallow = false) {
    // #1772: readonly(reactive(Map)) should return readonly + reactive version
    // of the value
    target = target["__v_raw" /* RAW */];
    const rawTarget = toRaw(target);
    const rawKey = toRaw(key);
    if (key !== rawKey) {
        !isReadonly && track(rawTarget, "get" /* GET */, key);
    }
    !isReadonly && track(rawTarget, "get" /* GET */, rawKey);
    const { has } = getProto(rawTarget);
    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
    if (has.call(rawTarget, key)) {
        return wrap(target.get(key));
    }
    else if (has.call(rawTarget, rawKey)) {
        return wrap(target.get(rawKey));
    }
    else if (target !== rawTarget) {
        // #3602 readonly(reactive(Map))
        // ensure that the nested reactive `Map` can do tracking for itself
        target.get(key);
    }
}
function has$1(key, isReadonly = false) {
    const target = this["__v_raw" /* RAW */];
    const rawTarget = toRaw(target);
    const rawKey = toRaw(key);
    if (key !== rawKey) {
        !isReadonly && track(rawTarget, "has" /* HAS */, key);
    }
    !isReadonly && track(rawTarget, "has" /* HAS */, rawKey);
    return key === rawKey
        ? target.has(key)
        : target.has(key) || target.has(rawKey);
}
function size(target, isReadonly = false) {
    target = target["__v_raw" /* RAW */];
    !isReadonly && track(toRaw(target), "iterate" /* ITERATE */, ITERATE_KEY);
    return Reflect.get(target, 'size', target);
}
function add(value) {
    value = toRaw(value);
    const target = toRaw(this);
    const proto = getProto(target);
    const hadKey = proto.has.call(target, value);
    if (!hadKey) {
        target.add(value);
        trigger(target, "add" /* ADD */, value, value);
    }
    return this;
}
function set$1(key, value) {
    value = toRaw(value);
    const target = toRaw(this);
    const { has, get } = getProto(target);
    let hadKey = has.call(target, key);
    if (!hadKey) {
        key = toRaw(key);
        hadKey = has.call(target, key);
    }
    else {
        checkIdentityKeys(target, has, key);
    }
    const oldValue = get.call(target, key);
    target.set(key, value);
    if (!hadKey) {
        trigger(target, "add" /* ADD */, key, value);
    }
    else if (hasChanged(value, oldValue)) {
        trigger(target, "set" /* SET */, key, value, oldValue);
    }
    return this;
}
function deleteEntry(key) {
    const target = toRaw(this);
    const { has, get } = getProto(target);
    let hadKey = has.call(target, key);
    if (!hadKey) {
        key = toRaw(key);
        hadKey = has.call(target, key);
    }
    else {
        checkIdentityKeys(target, has, key);
    }
    const oldValue = get ? get.call(target, key) : undefined;
    // forward the operation before queueing reactions
    const result = target.delete(key);
    if (hadKey) {
        trigger(target, "delete" /* DELETE */, key, undefined, oldValue);
    }
    return result;
}
function clear() {
    const target = toRaw(this);
    const hadItems = target.size !== 0;
    const oldTarget = isMap(target)
            ? new Map(target)
            : new Set(target)
        ;
    // forward the operation before queueing reactions
    const result = target.clear();
    if (hadItems) {
        trigger(target, "clear" /* CLEAR */, undefined, undefined, oldTarget);
    }
    return result;
}
function createForEach(isReadonly, isShallow) {
    return function forEach(callback, thisArg) {
        const observed = this;
        const target = observed["__v_raw" /* RAW */];
        const rawTarget = toRaw(target);
        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
        !isReadonly && track(rawTarget, "iterate" /* ITERATE */, ITERATE_KEY);
        return target.forEach((value, key) => {
            // important: make sure the callback is
            // 1. invoked with the reactive map as `this` and 3rd arg
            // 2. the value received should be a corresponding reactive/readonly.
            return callback.call(thisArg, wrap(value), wrap(key), observed);
        });
    };
}
function createIterableMethod(method, isReadonly, isShallow) {
    return function (...args) {
        const target = this["__v_raw" /* RAW */];
        const rawTarget = toRaw(target);
        const targetIsMap = isMap(rawTarget);
        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);
        const isKeyOnly = method === 'keys' && targetIsMap;
        const innerIterator = target[method](...args);
        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
        !isReadonly &&
            track(rawTarget, "iterate" /* ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);
        // return a wrapped iterator which returns observed versions of the
        // values emitted from the real iterator
        return {
            // iterator protocol
            next() {
                const { value, done } = innerIterator.next();
                return done
                    ? { value, done }
                    : {
                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
                        done
                    };
            },
            // iterable protocol
            [Symbol.iterator]() {
                return this;
            }
        };
    };
}
function createReadonlyMethod(type) {
    return function (...args) {
        {
            const key = args[0] ? `on key "${args[0]}" ` : ``;
            console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));
        }
        return type === "delete" /* DELETE */ ? false : this;
    };
}
function createInstrumentations() {
    const mutableInstrumentations = {
        get(key) {
            return get$1(this, key);
        },
        get size() {
            return size(this);
        },
        has: has$1,
        add,
        set: set$1,
        delete: deleteEntry,
        clear,
        forEach: createForEach(false, false)
    };
    const shallowInstrumentations = {
        get(key) {
            return get$1(this, key, false, true);
        },
        get size() {
            return size(this);
        },
        has: has$1,
        add,
        set: set$1,
        delete: deleteEntry,
        clear,
        forEach: createForEach(false, true)
    };
    const readonlyInstrumentations = {
        get(key) {
            return get$1(this, key, true);
        },
        get size() {
            return size(this, true);
        },
        has(key) {
            return has$1.call(this, key, true);
        },
        add: createReadonlyMethod("add" /* ADD */),
        set: createReadonlyMethod("set" /* SET */),
        delete: createReadonlyMethod("delete" /* DELETE */),
        clear: createReadonlyMethod("clear" /* CLEAR */),
        forEach: createForEach(true, false)
    };
    const shallowReadonlyInstrumentations = {
        get(key) {
            return get$1(this, key, true, true);
        },
        get size() {
            return size(this, true);
        },
        has(key) {
            return has$1.call(this, key, true);
        },
        add: createReadonlyMethod("add" /* ADD */),
        set: createReadonlyMethod("set" /* SET */),
        delete: createReadonlyMethod("delete" /* DELETE */),
        clear: createReadonlyMethod("clear" /* CLEAR */),
        forEach: createForEach(true, true)
    };
    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];
    iteratorMethods.forEach(method => {
        mutableInstrumentations[method] = createIterableMethod(method, false, false);
        readonlyInstrumentations[method] = createIterableMethod(method, true, false);
        shallowInstrumentations[method] = createIterableMethod(method, false, true);
        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);
    });
    return [
        mutableInstrumentations,
        readonlyInstrumentations,
        shallowInstrumentations,
        shallowReadonlyInstrumentations
    ];
}
const [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();
function createInstrumentationGetter(isReadonly, shallow) {
    const instrumentations = shallow
        ? isReadonly
            ? shallowReadonlyInstrumentations
            : shallowInstrumentations
        : isReadonly
            ? readonlyInstrumentations
            : mutableInstrumentations;
    return (target, key, receiver) => {
        if (key === "__v_isReactive" /* IS_REACTIVE */) {
            return !isReadonly;
        }
        else if (key === "__v_isReadonly" /* IS_READONLY */) {
            return isReadonly;
        }
        else if (key === "__v_raw" /* RAW */) {
            return target;
        }
        return Reflect.get(hasOwn(instrumentations, key) && key in target
            ? instrumentations
            : target, key, receiver);
    };
}
const mutableCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(false, false)
};
const shallowCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(false, true)
};
const readonlyCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(true, false)
};
const shallowReadonlyCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(true, true)
};
function checkIdentityKeys(target, has, key) {
    const rawKey = toRaw(key);
    if (rawKey !== key && has.call(target, rawKey)) {
        const type = toRawType(target);
        console.warn(`Reactive ${type} contains both the raw and reactive ` +
            `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +
            `which can lead to inconsistencies. ` +
            `Avoid differentiating between the raw and reactive versions ` +
            `of an object and only use the reactive version if possible.`);
    }
}

const reactiveMap = new WeakMap();
const shallowReactiveMap = new WeakMap();
const readonlyMap = new WeakMap();
const shallowReadonlyMap = new WeakMap();
function targetTypeMap(rawType) {
    switch (rawType) {
        case 'Object':
        case 'Array':
            return 1 /* COMMON */;
        case 'Map':
        case 'Set':
        case 'WeakMap':
        case 'WeakSet':
            return 2 /* COLLECTION */;
        default:
            return 0 /* INVALID */;
    }
}
function getTargetType(value) {
    return value["__v_skip" /* SKIP */] || !Object.isExtensible(value)
        ? 0 /* INVALID */
        : targetTypeMap(toRawType(value));
}
function reactive(target) {
    // if trying to observe a readonly proxy, return the readonly version.
    if (isReadonly(target)) {
        return target;
    }
    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);
}
/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
function shallowReactive(target) {
    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);
}
/**
 * Creates a readonly copy of the original object. Note the returned copy is not
 * made reactive, but `readonly` can be called on an already reactive object.
 */
function readonly(target) {
    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);
}
/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
function shallowReadonly(target) {
    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);
}
function createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {
    if (!isObject(target)) {
        {
            console.warn(`value cannot be made reactive: ${String(target)}`);
        }
        return target;
    }
    // target is already a Proxy, return it.
    // exception: calling readonly() on a reactive object
    if (target["__v_raw" /* RAW */] &&
        !(isReadonly && target["__v_isReactive" /* IS_REACTIVE */])) {
        return target;
    }
    // target already has corresponding Proxy
    const existingProxy = proxyMap.get(target);
    if (existingProxy) {
        return existingProxy;
    }
    // only a whitelist of value types can be observed.
    const targetType = getTargetType(target);
    if (targetType === 0 /* INVALID */) {
        return target;
    }
    const proxy = new Proxy(target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers);
    proxyMap.set(target, proxy);
    return proxy;
}
function isReactive(value) {
    if (isReadonly(value)) {
        return isReactive(value["__v_raw" /* RAW */]);
    }
    return !!(value && value["__v_isReactive" /* IS_REACTIVE */]);
}
function isReadonly(value) {
    return !!(value && value["__v_isReadonly" /* IS_READONLY */]);
}
function isShallow(value) {
    return !!(value && value["__v_isShallow" /* IS_SHALLOW */]);
}
function isProxy(value) {
    return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
    const raw = observed && observed["__v_raw" /* RAW */];
    return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
    def(value, "__v_skip" /* SKIP */, true);
    return value;
}
const toReactive = (value) => isObject(value) ? reactive(value) : value;
const toReadonly = (value) => isObject(value) ? readonly(value) : value;

function trackRefValue(ref) {
    if (shouldTrack && activeEffect) {
        ref = toRaw(ref);
        {
            trackEffects(ref.dep || (ref.dep = createDep()), {
                target: ref,
                type: "get" /* GET */,
                key: 'value'
            });
        }
    }
}
function triggerRefValue(ref, newVal) {
    ref = toRaw(ref);
    if (ref.dep) {
        {
            triggerEffects(ref.dep, {
                target: ref,
                type: "set" /* SET */,
                key: 'value',
                newValue: newVal
            });
        }
    }
}
function isRef(r) {
    return !!(r && r.__v_isRef === true);
}
function ref(value) {
    return createRef(value, false);
}
function shallowRef(value) {
    return createRef(value, true);
}
function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    return new RefImpl(rawValue, shallow);
}
class RefImpl {
    constructor(value, __v_isShallow) {
        this.__v_isShallow = __v_isShallow;
        this.dep = undefined;
        this.__v_isRef = true;
        this._rawValue = __v_isShallow ? value : toRaw(value);
        this._value = __v_isShallow ? value : toReactive(value);
    }
    get value() {
        trackRefValue(this);
        return this._value;
    }
    set value(newVal) {
        newVal = this.__v_isShallow ? newVal : toRaw(newVal);
        if (hasChanged(newVal, this._rawValue)) {
            this._rawValue = newVal;
            this._value = this.__v_isShallow ? newVal : toReactive(newVal);
            triggerRefValue(this, newVal);
        }
    }
}
function triggerRef(ref) {
    triggerRefValue(ref, ref.value );
}
function unref(ref) {
    return isRef(ref) ? ref.value : ref;
}
const shallowUnwrapHandlers = {
    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
    set: (target, key, value, receiver) => {
        const oldValue = target[key];
        if (isRef(oldValue) && !isRef(value)) {
            oldValue.value = value;
            return true;
        }
        else {
            return Reflect.set(target, key, value, receiver);
        }
    }
};
function proxyRefs(objectWithRefs) {
    return isReactive(objectWithRefs)
        ? objectWithRefs
        : new Proxy(objectWithRefs, shallowUnwrapHandlers);
}
class CustomRefImpl {
    constructor(factory) {
        this.dep = undefined;
        this.__v_isRef = true;
        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));
        this._get = get;
        this._set = set;
    }
    get value() {
        return this._get();
    }
    set value(newVal) {
        this._set(newVal);
    }
}
function customRef(factory) {
    return new CustomRefImpl(factory);
}
function toRefs(object) {
    if (!isProxy(object)) {
        console.warn(`toRefs() expects a reactive object but received a plain one.`);
    }
    const ret = isArray(object) ? new Array(object.length) : {};
    for (const key in object) {
        ret[key] = toRef(object, key);
    }
    return ret;
}
class ObjectRefImpl {
    constructor(_object, _key, _defaultValue) {
        this._object = _object;
        this._key = _key;
        this._defaultValue = _defaultValue;
        this.__v_isRef = true;
    }
    get value() {
        const val = this._object[this._key];
        return val === undefined ? this._defaultValue : val;
    }
    set value(newVal) {
        this._object[this._key] = newVal;
    }
}
function toRef(object, key, defaultValue) {
    const val = object[key];
    return isRef(val)
        ? val
        : new ObjectRefImpl(object, key, defaultValue);
}

class ComputedRefImpl {
    constructor(getter, _setter, isReadonly, isSSR) {
        this._setter = _setter;
        this.dep = undefined;
        this.__v_isRef = true;
        this._dirty = true;
        this.effect = new ReactiveEffect(getter, () => {
            if (!this._dirty) {
                this._dirty = true;
                triggerRefValue(this);
            }
        });
        this.effect.computed = this;
        this.effect.active = this._cacheable = !isSSR;
        this["__v_isReadonly" /* IS_READONLY */] = isReadonly;
    }
    get value() {
        // the computed ref may get wrapped by other proxies e.g. readonly() #3376
        const self = toRaw(this);
        trackRefValue(self);
        if (self._dirty || !self._cacheable) {
            self._dirty = false;
            self._value = self.effect.run();
        }
        return self._value;
    }
    set value(newValue) {
        this._setter(newValue);
    }
}
function computed(getterOrOptions, debugOptions, isSSR = false) {
    let getter;
    let setter;
    const onlyGetter = isFunction(getterOrOptions);
    if (onlyGetter) {
        getter = getterOrOptions;
        setter = () => {
                console.warn('Write operation failed: computed value is readonly');
            }
            ;
    }
    else {
        getter = getterOrOptions.get;
        setter = getterOrOptions.set;
    }
    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
    if (debugOptions && !isSSR) {
        cRef.effect.onTrack = debugOptions.onTrack;
        cRef.effect.onTrigger = debugOptions.onTrigger;
    }
    return cRef;
}

var _a;
const tick = /*#__PURE__*/ Promise.resolve();
const queue = [];
let queued = false;
const scheduler = (fn) => {
    queue.push(fn);
    if (!queued) {
        queued = true;
        tick.then(flush);
    }
};
const flush = () => {
    for (let i = 0; i < queue.length; i++) {
        queue[i]();
    }
    queue.length = 0;
    queued = false;
};
class DeferredComputedRefImpl {
    constructor(getter) {
        this.dep = undefined;
        this._dirty = true;
        this.__v_isRef = true;
        this[_a] = true;
        let compareTarget;
        let hasCompareTarget = false;
        let scheduled = false;
        this.effect = new ReactiveEffect(getter, (computedTrigger) => {
            if (this.dep) {
                if (computedTrigger) {
                    compareTarget = this._value;
                    hasCompareTarget = true;
                }
                else if (!scheduled) {
                    const valueToCompare = hasCompareTarget ? compareTarget : this._value;
                    scheduled = true;
                    hasCompareTarget = false;
                    scheduler(() => {
                        if (this.effect.active && this._get() !== valueToCompare) {
                            triggerRefValue(this);
                        }
                        scheduled = false;
                    });
                }
                // chained upstream computeds are notified synchronously to ensure
                // value invalidation in case of sync access; normal effects are
                // deferred to be triggered in scheduler.
                for (const e of this.dep) {
                    if (e.computed instanceof DeferredComputedRefImpl) {
                        e.scheduler(true /* computedTrigger */);
                    }
                }
            }
            this._dirty = true;
        });
        this.effect.computed = this;
    }
    _get() {
        if (this._dirty) {
            this._dirty = false;
            return (this._value = this.effect.run());
        }
        return this._value;
    }
    get value() {
        trackRefValue(this);
        // the computed ref may get wrapped by other proxies e.g. readonly() #3376
        return toRaw(this)._get();
    }
}
_a = "__v_isReadonly" /* IS_READONLY */;
function deferredComputed(getter) {
    return new DeferredComputedRefImpl(getter);
}

export { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, track, trigger, triggerRef, unref };
function t(t,e){const n=Object.create(null),s=t.split(",");for(let i=0;i<s.length;i++)n[s[i]]=!0;return e?t=>!!n[t.toLowerCase()]:t=>!!n[t]}const e=()=>{},n=Object.assign,s=Object.prototype.hasOwnProperty,i=(t,e)=>s.call(t,e),r=Array.isArray,c=t=>"[object Map]"===l(t),o=t=>"symbol"==typeof t,u=t=>null!==t&&"object"==typeof t,h=Object.prototype.toString,l=t=>h.call(t),a=t=>"string"==typeof t&&"NaN"!==t&&"-"!==t[0]&&""+parseInt(t,10)===t,f=(t,e)=>!Object.is(t,e);let _;class p{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&_&&(this.parent=_,this.index=(_.scopes||(_.scopes=[])).push(this)-1)}run(t){if(this.active){const e=_;try{return _=this,t()}finally{_=e}}}on(){_=this}off(){_=this.parent}stop(t){if(this.active){let e,n;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].stop();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(this.parent&&!t){const t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.active=!1}}}function d(t){return new p(t)}function v(t,e=_){e&&e.active&&e.effects.push(t)}function g(){return _}function y(t){_&&_.cleanups.push(t)}const w=t=>{const e=new Set(t);return e.w=0,e.n=0,e},b=t=>(t.w&k)>0,R=t=>(t.n&k)>0,S=new WeakMap;let m=0,k=1;let j;const O=Symbol(""),x=Symbol("");class E{constructor(t,e=null,n){this.fn=t,this.scheduler=e,this.active=!0,this.deps=[],this.parent=void 0,v(this,n)}run(){if(!this.active)return this.fn();let t=j,e=W;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=j,j=this,W=!0,k=1<<++m,m<=30?(({deps:t})=>{if(t.length)for(let e=0;e<t.length;e++)t[e].w|=k})(this):P(this),this.fn()}finally{m<=30&&(t=>{const{deps:e}=t;if(e.length){let n=0;for(let s=0;s<e.length;s++){const i=e[s];b(i)&&!R(i)?i.delete(t):e[n++]=i,i.w&=~k,i.n&=~k}e.length=n}})(this),k=1<<--m,j=this.parent,W=e,this.parent=void 0,this.deferStop&&this.stop()}}stop(){j===this?this.deferStop=!0:this.active&&(P(this),this.onStop&&this.onStop(),this.active=!1)}}function P(t){const{deps:e}=t;if(e.length){for(let n=0;n<e.length;n++)e[n].delete(t);e.length=0}}function M(t,e){t.effect&&(t=t.effect.fn);const s=new E(t);e&&(n(s,e),e.scope&&v(s,e.scope)),e&&e.lazy||s.run();const i=s.run.bind(s);return i.effect=s,i}function z(t){t.effect.stop()}let W=!0;const V=[];function A(){V.push(W),W=!1}function N(){V.push(W),W=!0}function I(){const t=V.pop();W=void 0===t||t}function K(t,e,n){if(W&&j){let e=S.get(t);e||S.set(t,e=new Map);let s=e.get(n);s||e.set(n,s=w()),C(s)}}function C(t,e){let n=!1;m<=30?R(t)||(t.n|=k,n=!b(t)):n=!t.has(j),n&&(t.add(j),j.deps.push(t))}function L(t,e,n,s,i,o){const u=S.get(t);if(!u)return;let h=[];if("clear"===e)h=[...u.values()];else if("length"===n&&r(t))u.forEach(((t,e)=>{("length"===e||e>=s)&&h.push(t)}));else switch(void 0!==n&&h.push(u.get(n)),e){case"add":r(t)?a(n)&&h.push(u.get("length")):(h.push(u.get(O)),c(t)&&h.push(u.get(x)));break;case"delete":r(t)||(h.push(u.get(O)),c(t)&&h.push(u.get(x)));break;case"set":c(t)&&h.push(u.get(O))}if(1===h.length)h[0]&&q(h[0]);else{const t=[];for(const e of h)e&&t.push(...e);q(w(t))}}function q(t,e){for(const n of r(t)?t:[...t])(n!==j||n.allowRecurse)&&(n.scheduler?n.scheduler():n.run())}const B=t("__proto__,__v_isRef,__isVue"),D=new Set(Object.getOwnPropertyNames(Symbol).map((t=>Symbol[t])).filter(o)),F=U(),G=U(!1,!0),H=U(!0),J=U(!0,!0),Q=T();function T(){const t={};return["includes","indexOf","lastIndexOf"].forEach((e=>{t[e]=function(...t){const n=Kt(this);for(let e=0,i=this.length;e<i;e++)K(n,0,e+"");const s=n[e](...t);return-1===s||!1===s?n[e](...t.map(Kt)):s}})),["push","pop","shift","unshift","splice"].forEach((e=>{t[e]=function(...t){A();const n=Kt(this)[e].apply(this,t);return I(),n}})),t}function U(t=!1,e=!1){return function(n,s,c){if("__v_isReactive"===s)return!t;if("__v_isReadonly"===s)return t;if("__v_isShallow"===s)return e;if("__v_raw"===s&&c===(t?e?Ot:jt:e?kt:mt).get(n))return n;const h=r(n);if(!t&&h&&i(Q,s))return Reflect.get(Q,s,c);const l=Reflect.get(n,s,c);if(o(s)?D.has(s):B(s))return l;if(t||K(n,0,s),e)return l;if(Ft(l)){return!h||!a(s)?l.value:l}return u(l)?t?Mt(l):Et(l):l}}function X(t=!1){return function(e,n,s,c){let o=e[n];if(At(o)&&Ft(o)&&!Ft(s))return!1;if(!t&&!At(s)&&(Nt(s)||(s=Kt(s),o=Kt(o)),!r(e)&&Ft(o)&&!Ft(s)))return o.value=s,!0;const u=r(e)&&a(n)?Number(n)<e.length:i(e,n),h=Reflect.set(e,n,s,c);return e===Kt(c)&&(u?f(s,o)&&L(e,"set",n,s):L(e,"add",n,s)),h}}const Y={get:F,set:X(),deleteProperty:function(t,e){const n=i(t,e),s=Reflect.deleteProperty(t,e);return s&&n&&L(t,"delete",e,void 0),s},has:function(t,e){const n=Reflect.has(t,e);return o(e)&&D.has(e)||K(t,0,e),n},ownKeys:function(t){return K(t,0,r(t)?"length":O),Reflect.ownKeys(t)}},Z={get:H,set:(t,e)=>!0,deleteProperty:(t,e)=>!0},$=n({},Y,{get:G,set:X(!0)}),tt=n({},Z,{get:J}),et=t=>t,nt=t=>Reflect.getPrototypeOf(t);function st(t,e,n=!1,s=!1){const i=Kt(t=t.__v_raw),r=Kt(e);e!==r&&!n&&K(i,0,e),!n&&K(i,0,r);const{has:c}=nt(i),o=s?et:n?qt:Lt;return c.call(i,e)?o(t.get(e)):c.call(i,r)?o(t.get(r)):void(t!==i&&t.get(e))}function it(t,e=!1){const n=this.__v_raw,s=Kt(n),i=Kt(t);return t!==i&&!e&&K(s,0,t),!e&&K(s,0,i),t===i?n.has(t):n.has(t)||n.has(i)}function rt(t,e=!1){return t=t.__v_raw,!e&&K(Kt(t),0,O),Reflect.get(t,"size",t)}function ct(t){t=Kt(t);const e=Kt(this);return nt(e).has.call(e,t)||(e.add(t),L(e,"add",t,t)),this}function ot(t,e){e=Kt(e);const n=Kt(this),{has:s,get:i}=nt(n);let r=s.call(n,t);r||(t=Kt(t),r=s.call(n,t));const c=i.call(n,t);return n.set(t,e),r?f(e,c)&&L(n,"set",t,e):L(n,"add",t,e),this}function ut(t){const e=Kt(this),{has:n,get:s}=nt(e);let i=n.call(e,t);i||(t=Kt(t),i=n.call(e,t)),s&&s.call(e,t);const r=e.delete(t);return i&&L(e,"delete",t,void 0),r}function ht(){const t=Kt(this),e=0!==t.size,n=t.clear();return e&&L(t,"clear",void 0,void 0),n}function lt(t,e){return function(n,s){const i=this,r=i.__v_raw,c=Kt(r),o=e?et:t?qt:Lt;return!t&&K(c,0,O),r.forEach(((t,e)=>n.call(s,o(t),o(e),i)))}}function at(t,e,n){return function(...s){const i=this.__v_raw,r=Kt(i),o=c(r),u="entries"===t||t===Symbol.iterator&&o,h="keys"===t&&o,l=i[t](...s),a=n?et:e?qt:Lt;return!e&&K(r,0,h?x:O),{next(){const{value:t,done:e}=l.next();return e?{value:t,done:e}:{value:u?[a(t[0]),a(t[1])]:a(t),done:e}},[Symbol.iterator](){return this}}}}function ft(t){return function(...e){return"delete"!==t&&this}}function _t(){const t={get(t){return st(this,t)},get size(){return rt(this)},has:it,add:ct,set:ot,delete:ut,clear:ht,forEach:lt(!1,!1)},e={get(t){return st(this,t,!1,!0)},get size(){return rt(this)},has:it,add:ct,set:ot,delete:ut,clear:ht,forEach:lt(!1,!0)},n={get(t){return st(this,t,!0)},get size(){return rt(this,!0)},has(t){return it.call(this,t,!0)},add:ft("add"),set:ft("set"),delete:ft("delete"),clear:ft("clear"),forEach:lt(!0,!1)},s={get(t){return st(this,t,!0,!0)},get size(){return rt(this,!0)},has(t){return it.call(this,t,!0)},add:ft("add"),set:ft("set"),delete:ft("delete"),clear:ft("clear"),forEach:lt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((i=>{t[i]=at(i,!1,!1),n[i]=at(i,!0,!1),e[i]=at(i,!1,!0),s[i]=at(i,!0,!0)})),[t,n,e,s]}const[pt,dt,vt,gt]=_t();function yt(t,e){const n=e?t?gt:vt:t?dt:pt;return(e,s,r)=>"__v_isReactive"===s?!t:"__v_isReadonly"===s?t:"__v_raw"===s?e:Reflect.get(i(n,s)&&s in e?n:e,s,r)}const wt={get:yt(!1,!1)},bt={get:yt(!1,!0)},Rt={get:yt(!0,!1)},St={get:yt(!0,!0)},mt=new WeakMap,kt=new WeakMap,jt=new WeakMap,Ot=new WeakMap;function xt(t){return t.__v_skip||!Object.isExtensible(t)?0:function(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((t=>l(t).slice(8,-1))(t))}function Et(t){return At(t)?t:Wt(t,!1,Y,wt,mt)}function Pt(t){return Wt(t,!1,$,bt,kt)}function Mt(t){return Wt(t,!0,Z,Rt,jt)}function zt(t){return Wt(t,!0,tt,St,Ot)}function Wt(t,e,n,s,i){if(!u(t))return t;if(t.__v_raw&&(!e||!t.__v_isReactive))return t;const r=i.get(t);if(r)return r;const c=xt(t);if(0===c)return t;const o=new Proxy(t,2===c?s:n);return i.set(t,o),o}function Vt(t){return At(t)?Vt(t.__v_raw):!(!t||!t.__v_isReactive)}function At(t){return!(!t||!t.__v_isReadonly)}function Nt(t){return!(!t||!t.__v_isShallow)}function It(t){return Vt(t)||At(t)}function Kt(t){const e=t&&t.__v_raw;return e?Kt(e):t}function Ct(t){return((t,e,n)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:n})})(t,"__v_skip",!0),t}const Lt=t=>u(t)?Et(t):t,qt=t=>u(t)?Mt(t):t;function Bt(t){W&&j&&C((t=Kt(t)).dep||(t.dep=w()))}function Dt(t,e){(t=Kt(t)).dep&&q(t.dep)}function Ft(t){return!(!t||!0!==t.__v_isRef)}function Gt(t){return Jt(t,!1)}function Ht(t){return Jt(t,!0)}function Jt(t,e){return Ft(t)?t:new Qt(t,e)}class Qt{constructor(t,e){this.__v_isShallow=e,this.dep=void 0,this.__v_isRef=!0,this._rawValue=e?t:Kt(t),this._value=e?t:Lt(t)}get value(){return Bt(this),this._value}set value(t){t=this.__v_isShallow?t:Kt(t),f(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Lt(t),Dt(this))}}function Tt(t){Dt(t)}function Ut(t){return Ft(t)?t.value:t}const Xt={get:(t,e,n)=>Ut(Reflect.get(t,e,n)),set:(t,e,n,s)=>{const i=t[e];return Ft(i)&&!Ft(n)?(i.value=n,!0):Reflect.set(t,e,n,s)}};function Yt(t){return Vt(t)?t:new Proxy(t,Xt)}class Zt{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:e,set:n}=t((()=>Bt(this)),(()=>Dt(this)));this._get=e,this._set=n}get value(){return this._get()}set value(t){this._set(t)}}function $t(t){return new Zt(t)}function te(t){const e=r(t)?new Array(t.length):{};for(const n in t)e[n]=ne(t,n);return e}class ee{constructor(t,e,n){this._object=t,this._key=e,this._defaultValue=n,this.__v_isRef=!0}get value(){const t=this._object[this._key];return void 0===t?this._defaultValue:t}set value(t){this._object[this._key]=t}}function ne(t,e,n){const s=t[e];return Ft(s)?s:new ee(t,e,n)}class se{constructor(t,e,n,s){this._setter=e,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new E(t,(()=>{this._dirty||(this._dirty=!0,Dt(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=n}get value(){const t=Kt(this);return Bt(t),!t._dirty&&t._cacheable||(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function ie(t,n,s=!1){let i,r;const c="function"==typeof t;c?(i=t,r=e):(i=t.get,r=t.set);return new se(i,r,c||!r,s)}var re;const ce=Promise.resolve(),oe=[];let ue=!1;const he=()=>{for(let t=0;t<oe.length;t++)oe[t]();oe.length=0,ue=!1};class le{constructor(t){let e;this.dep=void 0,this._dirty=!0,this.__v_isRef=!0,this[re]=!0;let n=!1,s=!1;this.effect=new E(t,(t=>{if(this.dep){if(t)e=this._value,n=!0;else if(!s){const t=n?e:this._value;s=!0,n=!1,oe.push((()=>{this.effect.active&&this._get()!==t&&Dt(this),s=!1})),ue||(ue=!0,ce.then(he))}for(const t of this.dep)t.computed instanceof le&&t.scheduler(!0)}this._dirty=!0})),this.effect.computed=this}_get(){return this._dirty?(this._dirty=!1,this._value=this.effect.run()):this._value}get value(){return Bt(this),Kt(this)._get()}}function ae(t){return new le(t)}re="__v_isReadonly";export{p as EffectScope,O as ITERATE_KEY,E as ReactiveEffect,ie as computed,$t as customRef,ae as deferredComputed,M as effect,d as effectScope,N as enableTracking,g as getCurrentScope,It as isProxy,Vt as isReactive,At as isReadonly,Ft as isRef,Nt as isShallow,Ct as markRaw,y as onScopeDispose,A as pauseTracking,Yt as proxyRefs,Et as reactive,Mt as readonly,Gt as ref,I as resetTracking,Pt as shallowReactive,zt as shallowReadonly,Ht as shallowRef,z as stop,Kt as toRaw,ne as toRef,te as toRefs,K as track,L as trigger,Tt as triggerRef,Ut as unref};
import { extend, isArray, isMap, isIntegerKey, hasOwn, isSymbol, isObject, hasChanged, makeMap, capitalize, toRawType, def, isFunction, NOOP } from '@vue/shared';

function warn(msg, ...args) {
    console.warn(`[Vue warn] ${msg}`, ...args);
}

let activeEffectScope;
class EffectScope {
    constructor(detached = false) {
        /**
         * @internal
         */
        this.active = true;
        /**
         * @internal
         */
        this.effects = [];
        /**
         * @internal
         */
        this.cleanups = [];
        if (!detached && activeEffectScope) {
            this.parent = activeEffectScope;
            this.index =
                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
        }
    }
    run(fn) {
        if (this.active) {
            const currentEffectScope = activeEffectScope;
            try {
                activeEffectScope = this;
                return fn();
            }
            finally {
                activeEffectScope = currentEffectScope;
            }
        }
        else if ((process.env.NODE_ENV !== 'production')) {
            warn(`cannot run an inactive effect scope.`);
        }
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    on() {
        activeEffectScope = this;
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    off() {
        activeEffectScope = this.parent;
    }
    stop(fromParent) {
        if (this.active) {
            let i, l;
            for (i = 0, l = this.effects.length; i < l; i++) {
                this.effects[i].stop();
            }
            for (i = 0, l = this.cleanups.length; i < l; i++) {
                this.cleanups[i]();
            }
            if (this.scopes) {
                for (i = 0, l = this.scopes.length; i < l; i++) {
                    this.scopes[i].stop(true);
                }
            }
            // nested scope, dereference from parent to avoid memory leaks
            if (this.parent && !fromParent) {
                // optimized O(1) removal
                const last = this.parent.scopes.pop();
                if (last && last !== this) {
                    this.parent.scopes[this.index] = last;
                    last.index = this.index;
                }
            }
            this.active = false;
        }
    }
}
function effectScope(detached) {
    return new EffectScope(detached);
}
function recordEffectScope(effect, scope = activeEffectScope) {
    if (scope && scope.active) {
        scope.effects.push(effect);
    }
}
function getCurrentScope() {
    return activeEffectScope;
}
function onScopeDispose(fn) {
    if (activeEffectScope) {
        activeEffectScope.cleanups.push(fn);
    }
    else if ((process.env.NODE_ENV !== 'production')) {
        warn(`onScopeDispose() is called when there is no active effect scope` +
            ` to be associated with.`);
    }
}

const createDep = (effects) => {
    const dep = new Set(effects);
    dep.w = 0;
    dep.n = 0;
    return dep;
};
const wasTracked = (dep) => (dep.w & trackOpBit) > 0;
const newTracked = (dep) => (dep.n & trackOpBit) > 0;
const initDepMarkers = ({ deps }) => {
    if (deps.length) {
        for (let i = 0; i < deps.length; i++) {
            deps[i].w |= trackOpBit; // set was tracked
        }
    }
};
const finalizeDepMarkers = (effect) => {
    const { deps } = effect;
    if (deps.length) {
        let ptr = 0;
        for (let i = 0; i < deps.length; i++) {
            const dep = deps[i];
            if (wasTracked(dep) && !newTracked(dep)) {
                dep.delete(effect);
            }
            else {
                deps[ptr++] = dep;
            }
            // clear bits
            dep.w &= ~trackOpBit;
            dep.n &= ~trackOpBit;
        }
        deps.length = ptr;
    }
};

const targetMap = new WeakMap();
// The number of effects currently being tracked recursively.
let effectTrackDepth = 0;
let trackOpBit = 1;
/**
 * The bitwise track markers support at most 30 levels of recursion.
 * This value is chosen to enable modern JS engines to use a SMI on all platforms.
 * When recursion depth is greater, fall back to using a full cleanup.
 */
const maxMarkerBits = 30;
let activeEffect;
const ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'iterate' : '');
const MAP_KEY_ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'Map key iterate' : '');
class ReactiveEffect {
    constructor(fn, scheduler = null, scope) {
        this.fn = fn;
        this.scheduler = scheduler;
        this.active = true;
        this.deps = [];
        this.parent = undefined;
        recordEffectScope(this, scope);
    }
    run() {
        if (!this.active) {
            return this.fn();
        }
        let parent = activeEffect;
        let lastShouldTrack = shouldTrack;
        while (parent) {
            if (parent === this) {
                return;
            }
            parent = parent.parent;
        }
        try {
            this.parent = activeEffect;
            activeEffect = this;
            shouldTrack = true;
            trackOpBit = 1 << ++effectTrackDepth;
            if (effectTrackDepth <= maxMarkerBits) {
                initDepMarkers(this);
            }
            else {
                cleanupEffect(this);
            }
            return this.fn();
        }
        finally {
            if (effectTrackDepth <= maxMarkerBits) {
                finalizeDepMarkers(this);
            }
            trackOpBit = 1 << --effectTrackDepth;
            activeEffect = this.parent;
            shouldTrack = lastShouldTrack;
            this.parent = undefined;
            if (this.deferStop) {
                this.stop();
            }
        }
    }
    stop() {
        // stopped while running itself - defer the cleanup
        if (activeEffect === this) {
            this.deferStop = true;
        }
        else if (this.active) {
            cleanupEffect(this);
            if (this.onStop) {
                this.onStop();
            }
            this.active = false;
        }
    }
}
function cleanupEffect(effect) {
    const { deps } = effect;
    if (deps.length) {
        for (let i = 0; i < deps.length; i++) {
            deps[i].delete(effect);
        }
        deps.length = 0;
    }
}
function effect(fn, options) {
    if (fn.effect) {
        fn = fn.effect.fn;
    }
    const _effect = new ReactiveEffect(fn);
    if (options) {
        extend(_effect, options);
        if (options.scope)
            recordEffectScope(_effect, options.scope);
    }
    if (!options || !options.lazy) {
        _effect.run();
    }
    const runner = _effect.run.bind(_effect);
    runner.effect = _effect;
    return runner;
}
function stop(runner) {
    runner.effect.stop();
}
let shouldTrack = true;
const trackStack = [];
function pauseTracking() {
    trackStack.push(shouldTrack);
    shouldTrack = false;
}
function enableTracking() {
    trackStack.push(shouldTrack);
    shouldTrack = true;
}
function resetTracking() {
    const last = trackStack.pop();
    shouldTrack = last === undefined ? true : last;
}
function track(target, type, key) {
    if (shouldTrack && activeEffect) {
        let depsMap = targetMap.get(target);
        if (!depsMap) {
            targetMap.set(target, (depsMap = new Map()));
        }
        let dep = depsMap.get(key);
        if (!dep) {
            depsMap.set(key, (dep = createDep()));
        }
        const eventInfo = (process.env.NODE_ENV !== 'production')
            ? { effect: activeEffect, target, type, key }
            : undefined;
        trackEffects(dep, eventInfo);
    }
}
function trackEffects(dep, debuggerEventExtraInfo) {
    let shouldTrack = false;
    if (effectTrackDepth <= maxMarkerBits) {
        if (!newTracked(dep)) {
            dep.n |= trackOpBit; // set newly tracked
            shouldTrack = !wasTracked(dep);
        }
    }
    else {
        // Full cleanup mode.
        shouldTrack = !dep.has(activeEffect);
    }
    if (shouldTrack) {
        dep.add(activeEffect);
        activeEffect.deps.push(dep);
        if ((process.env.NODE_ENV !== 'production') && activeEffect.onTrack) {
            activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));
        }
    }
}
function trigger(target, type, key, newValue, oldValue, oldTarget) {
    const depsMap = targetMap.get(target);
    if (!depsMap) {
        // never been tracked
        return;
    }
    let deps = [];
    if (type === "clear" /* CLEAR */) {
        // collection being cleared
        // trigger all effects for target
        deps = [...depsMap.values()];
    }
    else if (key === 'length' && isArray(target)) {
        depsMap.forEach((dep, key) => {
            if (key === 'length' || key >= newValue) {
                deps.push(dep);
            }
        });
    }
    else {
        // schedule runs for SET | ADD | DELETE
        if (key !== void 0) {
            deps.push(depsMap.get(key));
        }
        // also run for iteration key on ADD | DELETE | Map.SET
        switch (type) {
            case "add" /* ADD */:
                if (!isArray(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                    if (isMap(target)) {
                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                    }
                }
                else if (isIntegerKey(key)) {
                    // new index added to array -> length changes
                    deps.push(depsMap.get('length'));
                }
                break;
            case "delete" /* DELETE */:
                if (!isArray(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                    if (isMap(target)) {
                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                    }
                }
                break;
            case "set" /* SET */:
                if (isMap(target)) {
                    deps.push(depsMap.get(ITERATE_KEY));
                }
                break;
        }
    }
    const eventInfo = (process.env.NODE_ENV !== 'production')
        ? { target, type, key, newValue, oldValue, oldTarget }
        : undefined;
    if (deps.length === 1) {
        if (deps[0]) {
            if ((process.env.NODE_ENV !== 'production')) {
                triggerEffects(deps[0], eventInfo);
            }
            else {
                triggerEffects(deps[0]);
            }
        }
    }
    else {
        const effects = [];
        for (const dep of deps) {
            if (dep) {
                effects.push(...dep);
            }
        }
        if ((process.env.NODE_ENV !== 'production')) {
            triggerEffects(createDep(effects), eventInfo);
        }
        else {
            triggerEffects(createDep(effects));
        }
    }
}
function triggerEffects(dep, debuggerEventExtraInfo) {
    // spread into array for stabilization
    for (const effect of isArray(dep) ? dep : [...dep]) {
        if (effect !== activeEffect || effect.allowRecurse) {
            if ((process.env.NODE_ENV !== 'production') && effect.onTrigger) {
                effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));
            }
            if (effect.scheduler) {
                effect.scheduler();
            }
            else {
                effect.run();
            }
        }
    }
}

const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);
const builtInSymbols = new Set(
/*#__PURE__*/
Object.getOwnPropertyNames(Symbol)
    .map(key => Symbol[key])
    .filter(isSymbol));
const get = /*#__PURE__*/ createGetter();
const shallowGet = /*#__PURE__*/ createGetter(false, true);
const readonlyGet = /*#__PURE__*/ createGetter(true);
const shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);
const arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();
function createArrayInstrumentations() {
    const instrumentations = {};
    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {
        instrumentations[key] = function (...args) {
            const arr = toRaw(this);
            for (let i = 0, l = this.length; i < l; i++) {
                track(arr, "get" /* GET */, i + '');
            }
            // we run the method using the original args first (which may be reactive)
            const res = arr[key](...args);
            if (res === -1 || res === false) {
                // if that didn't work, run it again using raw values.
                return arr[key](...args.map(toRaw));
            }
            else {
                return res;
            }
        };
    });
    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {
        instrumentations[key] = function (...args) {
            pauseTracking();
            const res = toRaw(this)[key].apply(this, args);
            resetTracking();
            return res;
        };
    });
    return instrumentations;
}
function createGetter(isReadonly = false, shallow = false) {
    return function get(target, key, receiver) {
        if (key === "__v_isReactive" /* IS_REACTIVE */) {
            return !isReadonly;
        }
        else if (key === "__v_isReadonly" /* IS_READONLY */) {
            return isReadonly;
        }
        else if (key === "__v_isShallow" /* IS_SHALLOW */) {
            return shallow;
        }
        else if (key === "__v_raw" /* RAW */ &&
            receiver ===
                (isReadonly
                    ? shallow
                        ? shallowReadonlyMap
                        : readonlyMap
                    : shallow
                        ? shallowReactiveMap
                        : reactiveMap).get(target)) {
            return target;
        }
        const targetIsArray = isArray(target);
        if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {
            return Reflect.get(arrayInstrumentations, key, receiver);
        }
        const res = Reflect.get(target, key, receiver);
        if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
            return res;
        }
        if (!isReadonly) {
            track(target, "get" /* GET */, key);
        }
        if (shallow) {
            return res;
        }
        if (isRef(res)) {
            // ref unwrapping - does not apply for Array + integer key.
            const shouldUnwrap = !targetIsArray || !isIntegerKey(key);
            return shouldUnwrap ? res.value : res;
        }
        if (isObject(res)) {
            // Convert returned value into a proxy as well. we do the isObject check
            // here to avoid invalid value warning. Also need to lazy access readonly
            // and reactive here to avoid circular dependency.
            return isReadonly ? readonly(res) : reactive(res);
        }
        return res;
    };
}
const set = /*#__PURE__*/ createSetter();
const shallowSet = /*#__PURE__*/ createSetter(true);
function createSetter(shallow = false) {
    return function set(target, key, value, receiver) {
        let oldValue = target[key];
        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {
            return false;
        }
        if (!shallow && !isReadonly(value)) {
            if (!isShallow(value)) {
                value = toRaw(value);
                oldValue = toRaw(oldValue);
            }
            if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
                oldValue.value = value;
                return true;
            }
        }
        const hadKey = isArray(target) && isIntegerKey(key)
            ? Number(key) < target.length
            : hasOwn(target, key);
        const result = Reflect.set(target, key, value, receiver);
        // don't trigger if target is something up in the prototype chain of original
        if (target === toRaw(receiver)) {
            if (!hadKey) {
                trigger(target, "add" /* ADD */, key, value);
            }
            else if (hasChanged(value, oldValue)) {
                trigger(target, "set" /* SET */, key, value, oldValue);
            }
        }
        return result;
    };
}
function deleteProperty(target, key) {
    const hadKey = hasOwn(target, key);
    const oldValue = target[key];
    const result = Reflect.deleteProperty(target, key);
    if (result && hadKey) {
        trigger(target, "delete" /* DELETE */, key, undefined, oldValue);
    }
    return result;
}
function has(target, key) {
    const result = Reflect.has(target, key);
    if (!isSymbol(key) || !builtInSymbols.has(key)) {
        track(target, "has" /* HAS */, key);
    }
    return result;
}
function ownKeys(target) {
    track(target, "iterate" /* ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);
    return Reflect.ownKeys(target);
}
const mutableHandlers = {
    get,
    set,
    deleteProperty,
    has,
    ownKeys
};
const readonlyHandlers = {
    get: readonlyGet,
    set(target, key) {
        if ((process.env.NODE_ENV !== 'production')) {
            warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target);
        }
        return true;
    },
    deleteProperty(target, key) {
        if ((process.env.NODE_ENV !== 'production')) {
            warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
        }
        return true;
    }
};
const shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {
    get: shallowGet,
    set: shallowSet
});
// Props handlers are special in the sense that it should not unwrap top-level
// refs (in order to allow refs to be explicitly passed down), but should
// retain the reactivity of the normal readonly object.
const shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {
    get: shallowReadonlyGet
});

const toShallow = (value) => value;
const getProto = (v) => Reflect.getPrototypeOf(v);
function get$1(target, key, isReadonly = false, isShallow = false) {
    // #1772: readonly(reactive(Map)) should return readonly + reactive version
    // of the value
    target = target["__v_raw" /* RAW */];
    const rawTarget = toRaw(target);
    const rawKey = toRaw(key);
    if (key !== rawKey) {
        !isReadonly && track(rawTarget, "get" /* GET */, key);
    }
    !isReadonly && track(rawTarget, "get" /* GET */, rawKey);
    const { has } = getProto(rawTarget);
    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
    if (has.call(rawTarget, key)) {
        return wrap(target.get(key));
    }
    else if (has.call(rawTarget, rawKey)) {
        return wrap(target.get(rawKey));
    }
    else if (target !== rawTarget) {
        // #3602 readonly(reactive(Map))
        // ensure that the nested reactive `Map` can do tracking for itself
        target.get(key);
    }
}
function has$1(key, isReadonly = false) {
    const target = this["__v_raw" /* RAW */];
    const rawTarget = toRaw(target);
    const rawKey = toRaw(key);
    if (key !== rawKey) {
        !isReadonly && track(rawTarget, "has" /* HAS */, key);
    }
    !isReadonly && track(rawTarget, "has" /* HAS */, rawKey);
    return key === rawKey
        ? target.has(key)
        : target.has(key) || target.has(rawKey);
}
function size(target, isReadonly = false) {
    target = target["__v_raw" /* RAW */];
    !isReadonly && track(toRaw(target), "iterate" /* ITERATE */, ITERATE_KEY);
    return Reflect.get(target, 'size', target);
}
function add(value) {
    value = toRaw(value);
    const target = toRaw(this);
    const proto = getProto(target);
    const hadKey = proto.has.call(target, value);
    if (!hadKey) {
        target.add(value);
        trigger(target, "add" /* ADD */, value, value);
    }
    return this;
}
function set$1(key, value) {
    value = toRaw(value);
    const target = toRaw(this);
    const { has, get } = getProto(target);
    let hadKey = has.call(target, key);
    if (!hadKey) {
        key = toRaw(key);
        hadKey = has.call(target, key);
    }
    else if ((process.env.NODE_ENV !== 'production')) {
        checkIdentityKeys(target, has, key);
    }
    const oldValue = get.call(target, key);
    target.set(key, value);
    if (!hadKey) {
        trigger(target, "add" /* ADD */, key, value);
    }
    else if (hasChanged(value, oldValue)) {
        trigger(target, "set" /* SET */, key, value, oldValue);
    }
    return this;
}
function deleteEntry(key) {
    const target = toRaw(this);
    const { has, get } = getProto(target);
    let hadKey = has.call(target, key);
    if (!hadKey) {
        key = toRaw(key);
        hadKey = has.call(target, key);
    }
    else if ((process.env.NODE_ENV !== 'production')) {
        checkIdentityKeys(target, has, key);
    }
    const oldValue = get ? get.call(target, key) : undefined;
    // forward the operation before queueing reactions
    const result = target.delete(key);
    if (hadKey) {
        trigger(target, "delete" /* DELETE */, key, undefined, oldValue);
    }
    return result;
}
function clear() {
    const target = toRaw(this);
    const hadItems = target.size !== 0;
    const oldTarget = (process.env.NODE_ENV !== 'production')
        ? isMap(target)
            ? new Map(target)
            : new Set(target)
        : undefined;
    // forward the operation before queueing reactions
    const result = target.clear();
    if (hadItems) {
        trigger(target, "clear" /* CLEAR */, undefined, undefined, oldTarget);
    }
    return result;
}
function createForEach(isReadonly, isShallow) {
    return function forEach(callback, thisArg) {
        const observed = this;
        const target = observed["__v_raw" /* RAW */];
        const rawTarget = toRaw(target);
        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
        !isReadonly && track(rawTarget, "iterate" /* ITERATE */, ITERATE_KEY);
        return target.forEach((value, key) => {
            // important: make sure the callback is
            // 1. invoked with the reactive map as `this` and 3rd arg
            // 2. the value received should be a corresponding reactive/readonly.
            return callback.call(thisArg, wrap(value), wrap(key), observed);
        });
    };
}
function createIterableMethod(method, isReadonly, isShallow) {
    return function (...args) {
        const target = this["__v_raw" /* RAW */];
        const rawTarget = toRaw(target);
        const targetIsMap = isMap(rawTarget);
        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);
        const isKeyOnly = method === 'keys' && targetIsMap;
        const innerIterator = target[method](...args);
        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
        !isReadonly &&
            track(rawTarget, "iterate" /* ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);
        // return a wrapped iterator which returns observed versions of the
        // values emitted from the real iterator
        return {
            // iterator protocol
            next() {
                const { value, done } = innerIterator.next();
                return done
                    ? { value, done }
                    : {
                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
                        done
                    };
            },
            // iterable protocol
            [Symbol.iterator]() {
                return this;
            }
        };
    };
}
function createReadonlyMethod(type) {
    return function (...args) {
        if ((process.env.NODE_ENV !== 'production')) {
            const key = args[0] ? `on key "${args[0]}" ` : ``;
            console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));
        }
        return type === "delete" /* DELETE */ ? false : this;
    };
}
function createInstrumentations() {
    const mutableInstrumentations = {
        get(key) {
            return get$1(this, key);
        },
        get size() {
            return size(this);
        },
        has: has$1,
        add,
        set: set$1,
        delete: deleteEntry,
        clear,
        forEach: createForEach(false, false)
    };
    const shallowInstrumentations = {
        get(key) {
            return get$1(this, key, false, true);
        },
        get size() {
            return size(this);
        },
        has: has$1,
        add,
        set: set$1,
        delete: deleteEntry,
        clear,
        forEach: createForEach(false, true)
    };
    const readonlyInstrumentations = {
        get(key) {
            return get$1(this, key, true);
        },
        get size() {
            return size(this, true);
        },
        has(key) {
            return has$1.call(this, key, true);
        },
        add: createReadonlyMethod("add" /* ADD */),
        set: createReadonlyMethod("set" /* SET */),
        delete: createReadonlyMethod("delete" /* DELETE */),
        clear: createReadonlyMethod("clear" /* CLEAR */),
        forEach: createForEach(true, false)
    };
    const shallowReadonlyInstrumentations = {
        get(key) {
            return get$1(this, key, true, true);
        },
        get size() {
            return size(this, true);
        },
        has(key) {
            return has$1.call(this, key, true);
        },
        add: createReadonlyMethod("add" /* ADD */),
        set: createReadonlyMethod("set" /* SET */),
        delete: createReadonlyMethod("delete" /* DELETE */),
        clear: createReadonlyMethod("clear" /* CLEAR */),
        forEach: createForEach(true, true)
    };
    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];
    iteratorMethods.forEach(method => {
        mutableInstrumentations[method] = createIterableMethod(method, false, false);
        readonlyInstrumentations[method] = createIterableMethod(method, true, false);
        shallowInstrumentations[method] = createIterableMethod(method, false, true);
        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);
    });
    return [
        mutableInstrumentations,
        readonlyInstrumentations,
        shallowInstrumentations,
        shallowReadonlyInstrumentations
    ];
}
const [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();
function createInstrumentationGetter(isReadonly, shallow) {
    const instrumentations = shallow
        ? isReadonly
            ? shallowReadonlyInstrumentations
            : shallowInstrumentations
        : isReadonly
            ? readonlyInstrumentations
            : mutableInstrumentations;
    return (target, key, receiver) => {
        if (key === "__v_isReactive" /* IS_REACTIVE */) {
            return !isReadonly;
        }
        else if (key === "__v_isReadonly" /* IS_READONLY */) {
            return isReadonly;
        }
        else if (key === "__v_raw" /* RAW */) {
            return target;
        }
        return Reflect.get(hasOwn(instrumentations, key) && key in target
            ? instrumentations
            : target, key, receiver);
    };
}
const mutableCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(false, false)
};
const shallowCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(false, true)
};
const readonlyCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(true, false)
};
const shallowReadonlyCollectionHandlers = {
    get: /*#__PURE__*/ createInstrumentationGetter(true, true)
};
function checkIdentityKeys(target, has, key) {
    const rawKey = toRaw(key);
    if (rawKey !== key && has.call(target, rawKey)) {
        const type = toRawType(target);
        console.warn(`Reactive ${type} contains both the raw and reactive ` +
            `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +
            `which can lead to inconsistencies. ` +
            `Avoid differentiating between the raw and reactive versions ` +
            `of an object and only use the reactive version if possible.`);
    }
}

const reactiveMap = new WeakMap();
const shallowReactiveMap = new WeakMap();
const readonlyMap = new WeakMap();
const shallowReadonlyMap = new WeakMap();
function targetTypeMap(rawType) {
    switch (rawType) {
        case 'Object':
        case 'Array':
            return 1 /* COMMON */;
        case 'Map':
        case 'Set':
        case 'WeakMap':
        case 'WeakSet':
            return 2 /* COLLECTION */;
        default:
            return 0 /* INVALID */;
    }
}
function getTargetType(value) {
    return value["__v_skip" /* SKIP */] || !Object.isExtensible(value)
        ? 0 /* INVALID */
        : targetTypeMap(toRawType(value));
}
function reactive(target) {
    // if trying to observe a readonly proxy, return the readonly version.
    if (isReadonly(target)) {
        return target;
    }
    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);
}
/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
function shallowReactive(target) {
    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);
}
/**
 * Creates a readonly copy of the original object. Note the returned copy is not
 * made reactive, but `readonly` can be called on an already reactive object.
 */
function readonly(target) {
    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);
}
/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
function shallowReadonly(target) {
    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);
}
function createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {
    if (!isObject(target)) {
        if ((process.env.NODE_ENV !== 'production')) {
            console.warn(`value cannot be made reactive: ${String(target)}`);
        }
        return target;
    }
    // target is already a Proxy, return it.
    // exception: calling readonly() on a reactive object
    if (target["__v_raw" /* RAW */] &&
        !(isReadonly && target["__v_isReactive" /* IS_REACTIVE */])) {
        return target;
    }
    // target already has corresponding Proxy
    const existingProxy = proxyMap.get(target);
    if (existingProxy) {
        return existingProxy;
    }
    // only a whitelist of value types can be observed.
    const targetType = getTargetType(target);
    if (targetType === 0 /* INVALID */) {
        return target;
    }
    const proxy = new Proxy(target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers);
    proxyMap.set(target, proxy);
    return proxy;
}
function isReactive(value) {
    if (isReadonly(value)) {
        return isReactive(value["__v_raw" /* RAW */]);
    }
    return !!(value && value["__v_isReactive" /* IS_REACTIVE */]);
}
function isReadonly(value) {
    return !!(value && value["__v_isReadonly" /* IS_READONLY */]);
}
function isShallow(value) {
    return !!(value && value["__v_isShallow" /* IS_SHALLOW */]);
}
function isProxy(value) {
    return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
    const raw = observed && observed["__v_raw" /* RAW */];
    return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
    def(value, "__v_skip" /* SKIP */, true);
    return value;
}
const toReactive = (value) => isObject(value) ? reactive(value) : value;
const toReadonly = (value) => isObject(value) ? readonly(value) : value;

function trackRefValue(ref) {
    if (shouldTrack && activeEffect) {
        ref = toRaw(ref);
        if ((process.env.NODE_ENV !== 'production')) {
            trackEffects(ref.dep || (ref.dep = createDep()), {
                target: ref,
                type: "get" /* GET */,
                key: 'value'
            });
        }
        else {
            trackEffects(ref.dep || (ref.dep = createDep()));
        }
    }
}
function triggerRefValue(ref, newVal) {
    ref = toRaw(ref);
    if (ref.dep) {
        if ((process.env.NODE_ENV !== 'production')) {
            triggerEffects(ref.dep, {
                target: ref,
                type: "set" /* SET */,
                key: 'value',
                newValue: newVal
            });
        }
        else {
            triggerEffects(ref.dep);
        }
    }
}
function isRef(r) {
    return !!(r && r.__v_isRef === true);
}
function ref(value) {
    return createRef(value, false);
}
function shallowRef(value) {
    return createRef(value, true);
}
function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    return new RefImpl(rawValue, shallow);
}
class RefImpl {
    constructor(value, __v_isShallow) {
        this.__v_isShallow = __v_isShallow;
        this.dep = undefined;
        this.__v_isRef = true;
        this._rawValue = __v_isShallow ? value : toRaw(value);
        this._value = __v_isShallow ? value : toReactive(value);
    }
    get value() {
        trackRefValue(this);
        return this._value;
    }
    set value(newVal) {
        newVal = this.__v_isShallow ? newVal : toRaw(newVal);
        if (hasChanged(newVal, this._rawValue)) {
            this._rawValue = newVal;
            this._value = this.__v_isShallow ? newVal : toReactive(newVal);
            triggerRefValue(this, newVal);
        }
    }
}
function triggerRef(ref) {
    triggerRefValue(ref, (process.env.NODE_ENV !== 'production') ? ref.value : void 0);
}
function unref(ref) {
    return isRef(ref) ? ref.value : ref;
}
const shallowUnwrapHandlers = {
    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
    set: (target, key, value, receiver) => {
        const oldValue = target[key];
        if (isRef(oldValue) && !isRef(value)) {
            oldValue.value = value;
            return true;
        }
        else {
            return Reflect.set(target, key, value, receiver);
        }
    }
};
function proxyRefs(objectWithRefs) {
    return isReactive(objectWithRefs)
        ? objectWithRefs
        : new Proxy(objectWithRefs, shallowUnwrapHandlers);
}
class CustomRefImpl {
    constructor(factory) {
        this.dep = undefined;
        this.__v_isRef = true;
        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));
        this._get = get;
        this._set = set;
    }
    get value() {
        return this._get();
    }
    set value(newVal) {
        this._set(newVal);
    }
}
function customRef(factory) {
    return new CustomRefImpl(factory);
}
function toRefs(object) {
    if ((process.env.NODE_ENV !== 'production') && !isProxy(object)) {
        console.warn(`toRefs() expects a reactive object but received a plain one.`);
    }
    const ret = isArray(object) ? new Array(object.length) : {};
    for (const key in object) {
        ret[key] = toRef(object, key);
    }
    return ret;
}
class ObjectRefImpl {
    constructor(_object, _key, _defaultValue) {
        this._object = _object;
        this._key = _key;
        this._defaultValue = _defaultValue;
        this.__v_isRef = true;
    }
    get value() {
        const val = this._object[this._key];
        return val === undefined ? this._defaultValue : val;
    }
    set value(newVal) {
        this._object[this._key] = newVal;
    }
}
function toRef(object, key, defaultValue) {
    const val = object[key];
    return isRef(val)
        ? val
        : new ObjectRefImpl(object, key, defaultValue);
}

class ComputedRefImpl {
    constructor(getter, _setter, isReadonly, isSSR) {
        this._setter = _setter;
        this.dep = undefined;
        this.__v_isRef = true;
        this._dirty = true;
        this.effect = new ReactiveEffect(getter, () => {
            if (!this._dirty) {
                this._dirty = true;
                triggerRefValue(this);
            }
        });
        this.effect.computed = this;
        this.effect.active = this._cacheable = !isSSR;
        this["__v_isReadonly" /* IS_READONLY */] = isReadonly;
    }
    get value() {
        // the computed ref may get wrapped by other proxies e.g. readonly() #3376
        const self = toRaw(this);
        trackRefValue(self);
        if (self._dirty || !self._cacheable) {
            self._dirty = false;
            self._value = self.effect.run();
        }
        return self._value;
    }
    set value(newValue) {
        this._setter(newValue);
    }
}
function computed(getterOrOptions, debugOptions, isSSR = false) {
    let getter;
    let setter;
    const onlyGetter = isFunction(getterOrOptions);
    if (onlyGetter) {
        getter = getterOrOptions;
        setter = (process.env.NODE_ENV !== 'production')
            ? () => {
                console.warn('Write operation failed: computed value is readonly');
            }
            : NOOP;
    }
    else {
        getter = getterOrOptions.get;
        setter = getterOrOptions.set;
    }
    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
    if ((process.env.NODE_ENV !== 'production') && debugOptions && !isSSR) {
        cRef.effect.onTrack = debugOptions.onTrack;
        cRef.effect.onTrigger = debugOptions.onTrigger;
    }
    return cRef;
}

var _a;
const tick = /*#__PURE__*/ Promise.resolve();
const queue = [];
let queued = false;
const scheduler = (fn) => {
    queue.push(fn);
    if (!queued) {
        queued = true;
        tick.then(flush);
    }
};
const flush = () => {
    for (let i = 0; i < queue.length; i++) {
        queue[i]();
    }
    queue.length = 0;
    queued = false;
};
class DeferredComputedRefImpl {
    constructor(getter) {
        this.dep = undefined;
        this._dirty = true;
        this.__v_isRef = true;
        this[_a] = true;
        let compareTarget;
        let hasCompareTarget = false;
        let scheduled = false;
        this.effect = new ReactiveEffect(getter, (computedTrigger) => {
            if (this.dep) {
                if (computedTrigger) {
                    compareTarget = this._value;
                    hasCompareTarget = true;
                }
                else if (!scheduled) {
                    const valueToCompare = hasCompareTarget ? compareTarget : this._value;
                    scheduled = true;
                    hasCompareTarget = false;
                    scheduler(() => {
                        if (this.effect.active && this._get() !== valueToCompare) {
                            triggerRefValue(this);
                        }
                        scheduled = false;
                    });
                }
                // chained upstream computeds are notified synchronously to ensure
                // value invalidation in case of sync access; normal effects are
                // deferred to be triggered in scheduler.
                for (const e of this.dep) {
                    if (e.computed instanceof DeferredComputedRefImpl) {
                        e.scheduler(true /* computedTrigger */);
                    }
                }
            }
            this._dirty = true;
        });
        this.effect.computed = this;
    }
    _get() {
        if (this._dirty) {
            this._dirty = false;
            return (this._value = this.effect.run());
        }
        return this._value;
    }
    get value() {
        trackRefValue(this);
        // the computed ref may get wrapped by other proxies e.g. readonly() #3376
        return toRaw(this)._get();
    }
}
_a = "__v_isReadonly" /* IS_READONLY */;
function deferredComputed(getter) {
    return new DeferredComputedRefImpl(getter);
}

export { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, track, trigger, triggerRef, unref };
var VueReactivity = (function (exports) {
  'use strict';

  /**
   * Make a map and return a function for checking if a key
   * is in that map.
   * IMPORTANT: all calls of this function must be prefixed with
   * \/\*#\_\_PURE\_\_\*\/
   * So that rollup can tree-shake them if necessary.
   */
  function makeMap(str, expectsLowerCase) {
      const map = Object.create(null);
      const list = str.split(',');
      for (let i = 0; i < list.length; i++) {
          map[list[i]] = true;
      }
      return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];
  }

  Object.freeze({})
      ;
  Object.freeze([]) ;
  const extend = Object.assign;
  const hasOwnProperty = Object.prototype.hasOwnProperty;
  const hasOwn = (val, key) => hasOwnProperty.call(val, key);
  const isArray = Array.isArray;
  const isMap = (val) => toTypeString(val) === '[object Map]';
  const isFunction = (val) => typeof val === 'function';
  const isString = (val) => typeof val === 'string';
  const isSymbol = (val) => typeof val === 'symbol';
  const isObject = (val) => val !== null && typeof val === 'object';
  const objectToString = Object.prototype.toString;
  const toTypeString = (value) => objectToString.call(value);
  const toRawType = (value) => {
      // extract "RawType" from strings like "[object RawType]"
      return toTypeString(value).slice(8, -1);
  };
  const isIntegerKey = (key) => isString(key) &&
      key !== 'NaN' &&
      key[0] !== '-' &&
      '' + parseInt(key, 10) === key;
  const cacheStringFunction = (fn) => {
      const cache = Object.create(null);
      return ((str) => {
          const hit = cache[str];
          return hit || (cache[str] = fn(str));
      });
  };
  /**
   * @private
   */
  const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));
  // compare whether a value has changed, accounting for NaN.
  const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
  const def = (obj, key, value) => {
      Object.defineProperty(obj, key, {
          configurable: true,
          enumerable: false,
          value
      });
  };

  function warn(msg, ...args) {
      console.warn(`[Vue warn] ${msg}`, ...args);
  }

  let activeEffectScope;
  class EffectScope {
      constructor(detached = false) {
          /**
           * @internal
           */
          this.active = true;
          /**
           * @internal
           */
          this.effects = [];
          /**
           * @internal
           */
          this.cleanups = [];
          if (!detached && activeEffectScope) {
              this.parent = activeEffectScope;
              this.index =
                  (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
          }
      }
      run(fn) {
          if (this.active) {
              const currentEffectScope = activeEffectScope;
              try {
                  activeEffectScope = this;
                  return fn();
              }
              finally {
                  activeEffectScope = currentEffectScope;
              }
          }
          else {
              warn(`cannot run an inactive effect scope.`);
          }
      }
      /**
       * This should only be called on non-detached scopes
       * @internal
       */
      on() {
          activeEffectScope = this;
      }
      /**
       * This should only be called on non-detached scopes
       * @internal
       */
      off() {
          activeEffectScope = this.parent;
      }
      stop(fromParent) {
          if (this.active) {
              let i, l;
              for (i = 0, l = this.effects.length; i < l; i++) {
                  this.effects[i].stop();
              }
              for (i = 0, l = this.cleanups.length; i < l; i++) {
                  this.cleanups[i]();
              }
              if (this.scopes) {
                  for (i = 0, l = this.scopes.length; i < l; i++) {
                      this.scopes[i].stop(true);
                  }
              }
              // nested scope, dereference from parent to avoid memory leaks
              if (this.parent && !fromParent) {
                  // optimized O(1) removal
                  const last = this.parent.scopes.pop();
                  if (last && last !== this) {
                      this.parent.scopes[this.index] = last;
                      last.index = this.index;
                  }
              }
              this.active = false;
          }
      }
  }
  function effectScope(detached) {
      return new EffectScope(detached);
  }
  function recordEffectScope(effect, scope = activeEffectScope) {
      if (scope && scope.active) {
          scope.effects.push(effect);
      }
  }
  function getCurrentScope() {
      return activeEffectScope;
  }
  function onScopeDispose(fn) {
      if (activeEffectScope) {
          activeEffectScope.cleanups.push(fn);
      }
      else {
          warn(`onScopeDispose() is called when there is no active effect scope` +
              ` to be associated with.`);
      }
  }

  const createDep = (effects) => {
      const dep = new Set(effects);
      dep.w = 0;
      dep.n = 0;
      return dep;
  };
  const wasTracked = (dep) => (dep.w & trackOpBit) > 0;
  const newTracked = (dep) => (dep.n & trackOpBit) > 0;
  const initDepMarkers = ({ deps }) => {
      if (deps.length) {
          for (let i = 0; i < deps.length; i++) {
              deps[i].w |= trackOpBit; // set was tracked
          }
      }
  };
  const finalizeDepMarkers = (effect) => {
      const { deps } = effect;
      if (deps.length) {
          let ptr = 0;
          for (let i = 0; i < deps.length; i++) {
              const dep = deps[i];
              if (wasTracked(dep) && !newTracked(dep)) {
                  dep.delete(effect);
              }
              else {
                  deps[ptr++] = dep;
              }
              // clear bits
              dep.w &= ~trackOpBit;
              dep.n &= ~trackOpBit;
          }
          deps.length = ptr;
      }
  };

  const targetMap = new WeakMap();
  // The number of effects currently being tracked recursively.
  let effectTrackDepth = 0;
  let trackOpBit = 1;
  /**
   * The bitwise track markers support at most 30 levels of recursion.
   * This value is chosen to enable modern JS engines to use a SMI on all platforms.
   * When recursion depth is greater, fall back to using a full cleanup.
   */
  const maxMarkerBits = 30;
  let activeEffect;
  const ITERATE_KEY = Symbol('iterate' );
  const MAP_KEY_ITERATE_KEY = Symbol('Map key iterate' );
  class ReactiveEffect {
      constructor(fn, scheduler = null, scope) {
          this.fn = fn;
          this.scheduler = scheduler;
          this.active = true;
          this.deps = [];
          this.parent = undefined;
          recordEffectScope(this, scope);
      }
      run() {
          if (!this.active) {
              return this.fn();
          }
          let parent = activeEffect;
          let lastShouldTrack = shouldTrack;
          while (parent) {
              if (parent === this) {
                  return;
              }
              parent = parent.parent;
          }
          try {
              this.parent = activeEffect;
              activeEffect = this;
              shouldTrack = true;
              trackOpBit = 1 << ++effectTrackDepth;
              if (effectTrackDepth <= maxMarkerBits) {
                  initDepMarkers(this);
              }
              else {
                  cleanupEffect(this);
              }
              return this.fn();
          }
          finally {
              if (effectTrackDepth <= maxMarkerBits) {
                  finalizeDepMarkers(this);
              }
              trackOpBit = 1 << --effectTrackDepth;
              activeEffect = this.parent;
              shouldTrack = lastShouldTrack;
              this.parent = undefined;
              if (this.deferStop) {
                  this.stop();
              }
          }
      }
      stop() {
          // stopped while running itself - defer the cleanup
          if (activeEffect === this) {
              this.deferStop = true;
          }
          else if (this.active) {
              cleanupEffect(this);
              if (this.onStop) {
                  this.onStop();
              }
              this.active = false;
          }
      }
  }
  function cleanupEffect(effect) {
      const { deps } = effect;
      if (deps.length) {
          for (let i = 0; i < deps.length; i++) {
              deps[i].delete(effect);
          }
          deps.length = 0;
      }
  }
  function effect(fn, options) {
      if (fn.effect) {
          fn = fn.effect.fn;
      }
      const _effect = new ReactiveEffect(fn);
      if (options) {
          extend(_effect, options);
          if (options.scope)
              recordEffectScope(_effect, options.scope);
      }
      if (!options || !options.lazy) {
          _effect.run();
      }
      const runner = _effect.run.bind(_effect);
      runner.effect = _effect;
      return runner;
  }
  function stop(runner) {
      runner.effect.stop();
  }
  let shouldTrack = true;
  const trackStack = [];
  function pauseTracking() {
      trackStack.push(shouldTrack);
      shouldTrack = false;
  }
  function enableTracking() {
      trackStack.push(shouldTrack);
      shouldTrack = true;
  }
  function resetTracking() {
      const last = trackStack.pop();
      shouldTrack = last === undefined ? true : last;
  }
  function track(target, type, key) {
      if (shouldTrack && activeEffect) {
          let depsMap = targetMap.get(target);
          if (!depsMap) {
              targetMap.set(target, (depsMap = new Map()));
          }
          let dep = depsMap.get(key);
          if (!dep) {
              depsMap.set(key, (dep = createDep()));
          }
          const eventInfo = { effect: activeEffect, target, type, key }
              ;
          trackEffects(dep, eventInfo);
      }
  }
  function trackEffects(dep, debuggerEventExtraInfo) {
      let shouldTrack = false;
      if (effectTrackDepth <= maxMarkerBits) {
          if (!newTracked(dep)) {
              dep.n |= trackOpBit; // set newly tracked
              shouldTrack = !wasTracked(dep);
          }
      }
      else {
          // Full cleanup mode.
          shouldTrack = !dep.has(activeEffect);
      }
      if (shouldTrack) {
          dep.add(activeEffect);
          activeEffect.deps.push(dep);
          if (activeEffect.onTrack) {
              activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));
          }
      }
  }
  function trigger(target, type, key, newValue, oldValue, oldTarget) {
      const depsMap = targetMap.get(target);
      if (!depsMap) {
          // never been tracked
          return;
      }
      let deps = [];
      if (type === "clear" /* CLEAR */) {
          // collection being cleared
          // trigger all effects for target
          deps = [...depsMap.values()];
      }
      else if (key === 'length' && isArray(target)) {
          depsMap.forEach((dep, key) => {
              if (key === 'length' || key >= newValue) {
                  deps.push(dep);
              }
          });
      }
      else {
          // schedule runs for SET | ADD | DELETE
          if (key !== void 0) {
              deps.push(depsMap.get(key));
          }
          // also run for iteration key on ADD | DELETE | Map.SET
          switch (type) {
              case "add" /* ADD */:
                  if (!isArray(target)) {
                      deps.push(depsMap.get(ITERATE_KEY));
                      if (isMap(target)) {
                          deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                      }
                  }
                  else if (isIntegerKey(key)) {
                      // new index added to array -> length changes
                      deps.push(depsMap.get('length'));
                  }
                  break;
              case "delete" /* DELETE */:
                  if (!isArray(target)) {
                      deps.push(depsMap.get(ITERATE_KEY));
                      if (isMap(target)) {
                          deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
                      }
                  }
                  break;
              case "set" /* SET */:
                  if (isMap(target)) {
                      deps.push(depsMap.get(ITERATE_KEY));
                  }
                  break;
          }
      }
      const eventInfo = { target, type, key, newValue, oldValue, oldTarget }
          ;
      if (deps.length === 1) {
          if (deps[0]) {
              {
                  triggerEffects(deps[0], eventInfo);
              }
          }
      }
      else {
          const effects = [];
          for (const dep of deps) {
              if (dep) {
                  effects.push(...dep);
              }
          }
          {
              triggerEffects(createDep(effects), eventInfo);
          }
      }
  }
  function triggerEffects(dep, debuggerEventExtraInfo) {
      // spread into array for stabilization
      for (const effect of isArray(dep) ? dep : [...dep]) {
          if (effect !== activeEffect || effect.allowRecurse) {
              if (effect.onTrigger) {
                  effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));
              }
              if (effect.scheduler) {
                  effect.scheduler();
              }
              else {
                  effect.run();
              }
          }
      }
  }

  const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);
  const builtInSymbols = new Set(
  /*#__PURE__*/
  Object.getOwnPropertyNames(Symbol)
      .map(key => Symbol[key])
      .filter(isSymbol));
  const get = /*#__PURE__*/ createGetter();
  const shallowGet = /*#__PURE__*/ createGetter(false, true);
  const readonlyGet = /*#__PURE__*/ createGetter(true);
  const shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);
  const arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();
  function createArrayInstrumentations() {
      const instrumentations = {};
      ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {
          instrumentations[key] = function (...args) {
              const arr = toRaw(this);
              for (let i = 0, l = this.length; i < l; i++) {
                  track(arr, "get" /* GET */, i + '');
              }
              // we run the method using the original args first (which may be reactive)
              const res = arr[key](...args);
              if (res === -1 || res === false) {
                  // if that didn't work, run it again using raw values.
                  return arr[key](...args.map(toRaw));
              }
              else {
                  return res;
              }
          };
      });
      ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {
          instrumentations[key] = function (...args) {
              pauseTracking();
              const res = toRaw(this)[key].apply(this, args);
              resetTracking();
              return res;
          };
      });
      return instrumentations;
  }
  function createGetter(isReadonly = false, shallow = false) {
      return function get(target, key, receiver) {
          if (key === "__v_isReactive" /* IS_REACTIVE */) {
              return !isReadonly;
          }
          else if (key === "__v_isReadonly" /* IS_READONLY */) {
              return isReadonly;
          }
          else if (key === "__v_isShallow" /* IS_SHALLOW */) {
              return shallow;
          }
          else if (key === "__v_raw" /* RAW */ &&
              receiver ===
                  (isReadonly
                      ? shallow
                          ? shallowReadonlyMap
                          : readonlyMap
                      : shallow
                          ? shallowReactiveMap
                          : reactiveMap).get(target)) {
              return target;
          }
          const targetIsArray = isArray(target);
          if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {
              return Reflect.get(arrayInstrumentations, key, receiver);
          }
          const res = Reflect.get(target, key, receiver);
          if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
              return res;
          }
          if (!isReadonly) {
              track(target, "get" /* GET */, key);
          }
          if (shallow) {
              return res;
          }
          if (isRef(res)) {
              // ref unwrapping - does not apply for Array + integer key.
              const shouldUnwrap = !targetIsArray || !isIntegerKey(key);
              return shouldUnwrap ? res.value : res;
          }
          if (isObject(res)) {
              // Convert returned value into a proxy as well. we do the isObject check
              // here to avoid invalid value warning. Also need to lazy access readonly
              // and reactive here to avoid circular dependency.
              return isReadonly ? readonly(res) : reactive(res);
          }
          return res;
      };
  }
  const set = /*#__PURE__*/ createSetter();
  const shallowSet = /*#__PURE__*/ createSetter(true);
  function createSetter(shallow = false) {
      return function set(target, key, value, receiver) {
          let oldValue = target[key];
          if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {
              return false;
          }
          if (!shallow && !isReadonly(value)) {
              if (!isShallow(value)) {
                  value = toRaw(value);
                  oldValue = toRaw(oldValue);
              }
              if (!isArray(target) && isRef(oldValue) && !isRef(value)) {
                  oldValue.value = value;
                  return true;
              }
          }
          const hadKey = isArray(target) && isIntegerKey(key)
              ? Number(key) < target.length
              : hasOwn(target, key);
          const result = Reflect.set(target, key, value, receiver);
          // don't trigger if target is something up in the prototype chain of original
          if (target === toRaw(receiver)) {
              if (!hadKey) {
                  trigger(target, "add" /* ADD */, key, value);
              }
              else if (hasChanged(value, oldValue)) {
                  trigger(target, "set" /* SET */, key, value, oldValue);
              }
          }
          return result;
      };
  }
  function deleteProperty(target, key) {
      const hadKey = hasOwn(target, key);
      const oldValue = target[key];
      const result = Reflect.deleteProperty(target, key);
      if (result && hadKey) {
          trigger(target, "delete" /* DELETE */, key, undefined, oldValue);
      }
      return result;
  }
  function has(target, key) {
      const result = Reflect.has(target, key);
      if (!isSymbol(key) || !builtInSymbols.has(key)) {
          track(target, "has" /* HAS */, key);
      }
      return result;
  }
  function ownKeys(target) {
      track(target, "iterate" /* ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);
      return Reflect.ownKeys(target);
  }
  const mutableHandlers = {
      get,
      set,
      deleteProperty,
      has,
      ownKeys
  };
  const readonlyHandlers = {
      get: readonlyGet,
      set(target, key) {
          {
              warn(`Set operation on key "${String(key)}" failed: target is readonly.`, target);
          }
          return true;
      },
      deleteProperty(target, key) {
          {
              warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
          }
          return true;
      }
  };
  const shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {
      get: shallowGet,
      set: shallowSet
  });
  // Props handlers are special in the sense that it should not unwrap top-level
  // refs (in order to allow refs to be explicitly passed down), but should
  // retain the reactivity of the normal readonly object.
  const shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {
      get: shallowReadonlyGet
  });

  const toShallow = (value) => value;
  const getProto = (v) => Reflect.getPrototypeOf(v);
  function get$1(target, key, isReadonly = false, isShallow = false) {
      // #1772: readonly(reactive(Map)) should return readonly + reactive version
      // of the value
      target = target["__v_raw" /* RAW */];
      const rawTarget = toRaw(target);
      const rawKey = toRaw(key);
      if (key !== rawKey) {
          !isReadonly && track(rawTarget, "get" /* GET */, key);
      }
      !isReadonly && track(rawTarget, "get" /* GET */, rawKey);
      const { has } = getProto(rawTarget);
      const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
      if (has.call(rawTarget, key)) {
          return wrap(target.get(key));
      }
      else if (has.call(rawTarget, rawKey)) {
          return wrap(target.get(rawKey));
      }
      else if (target !== rawTarget) {
          // #3602 readonly(reactive(Map))
          // ensure that the nested reactive `Map` can do tracking for itself
          target.get(key);
      }
  }
  function has$1(key, isReadonly = false) {
      const target = this["__v_raw" /* RAW */];
      const rawTarget = toRaw(target);
      const rawKey = toRaw(key);
      if (key !== rawKey) {
          !isReadonly && track(rawTarget, "has" /* HAS */, key);
      }
      !isReadonly && track(rawTarget, "has" /* HAS */, rawKey);
      return key === rawKey
          ? target.has(key)
          : target.has(key) || target.has(rawKey);
  }
  function size(target, isReadonly = false) {
      target = target["__v_raw" /* RAW */];
      !isReadonly && track(toRaw(target), "iterate" /* ITERATE */, ITERATE_KEY);
      return Reflect.get(target, 'size', target);
  }
  function add(value) {
      value = toRaw(value);
      const target = toRaw(this);
      const proto = getProto(target);
      const hadKey = proto.has.call(target, value);
      if (!hadKey) {
          target.add(value);
          trigger(target, "add" /* ADD */, value, value);
      }
      return this;
  }
  function set$1(key, value) {
      value = toRaw(value);
      const target = toRaw(this);
      const { has, get } = getProto(target);
      let hadKey = has.call(target, key);
      if (!hadKey) {
          key = toRaw(key);
          hadKey = has.call(target, key);
      }
      else {
          checkIdentityKeys(target, has, key);
      }
      const oldValue = get.call(target, key);
      target.set(key, value);
      if (!hadKey) {
          trigger(target, "add" /* ADD */, key, value);
      }
      else if (hasChanged(value, oldValue)) {
          trigger(target, "set" /* SET */, key, value, oldValue);
      }
      return this;
  }
  function deleteEntry(key) {
      const target = toRaw(this);
      const { has, get } = getProto(target);
      let hadKey = has.call(target, key);
      if (!hadKey) {
          key = toRaw(key);
          hadKey = has.call(target, key);
      }
      else {
          checkIdentityKeys(target, has, key);
      }
      const oldValue = get ? get.call(target, key) : undefined;
      // forward the operation before queueing reactions
      const result = target.delete(key);
      if (hadKey) {
          trigger(target, "delete" /* DELETE */, key, undefined, oldValue);
      }
      return result;
  }
  function clear() {
      const target = toRaw(this);
      const hadItems = target.size !== 0;
      const oldTarget = isMap(target)
              ? new Map(target)
              : new Set(target)
          ;
      // forward the operation before queueing reactions
      const result = target.clear();
      if (hadItems) {
          trigger(target, "clear" /* CLEAR */, undefined, undefined, oldTarget);
      }
      return result;
  }
  function createForEach(isReadonly, isShallow) {
      return function forEach(callback, thisArg) {
          const observed = this;
          const target = observed["__v_raw" /* RAW */];
          const rawTarget = toRaw(target);
          const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
          !isReadonly && track(rawTarget, "iterate" /* ITERATE */, ITERATE_KEY);
          return target.forEach((value, key) => {
              // important: make sure the callback is
              // 1. invoked with the reactive map as `this` and 3rd arg
              // 2. the value received should be a corresponding reactive/readonly.
              return callback.call(thisArg, wrap(value), wrap(key), observed);
          });
      };
  }
  function createIterableMethod(method, isReadonly, isShallow) {
      return function (...args) {
          const target = this["__v_raw" /* RAW */];
          const rawTarget = toRaw(target);
          const targetIsMap = isMap(rawTarget);
          const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);
          const isKeyOnly = method === 'keys' && targetIsMap;
          const innerIterator = target[method](...args);
          const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;
          !isReadonly &&
              track(rawTarget, "iterate" /* ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);
          // return a wrapped iterator which returns observed versions of the
          // values emitted from the real iterator
          return {
              // iterator protocol
              next() {
                  const { value, done } = innerIterator.next();
                  return done
                      ? { value, done }
                      : {
                          value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
                          done
                      };
              },
              // iterable protocol
              [Symbol.iterator]() {
                  return this;
              }
          };
      };
  }
  function createReadonlyMethod(type) {
      return function (...args) {
          {
              const key = args[0] ? `on key "${args[0]}" ` : ``;
              console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));
          }
          return type === "delete" /* DELETE */ ? false : this;
      };
  }
  function createInstrumentations() {
      const mutableInstrumentations = {
          get(key) {
              return get$1(this, key);
          },
          get size() {
              return size(this);
          },
          has: has$1,
          add,
          set: set$1,
          delete: deleteEntry,
          clear,
          forEach: createForEach(false, false)
      };
      const shallowInstrumentations = {
          get(key) {
              return get$1(this, key, false, true);
          },
          get size() {
              return size(this);
          },
          has: has$1,
          add,
          set: set$1,
          delete: deleteEntry,
          clear,
          forEach: createForEach(false, true)
      };
      const readonlyInstrumentations = {
          get(key) {
              return get$1(this, key, true);
          },
          get size() {
              return size(this, true);
          },
          has(key) {
              return has$1.call(this, key, true);
          },
          add: createReadonlyMethod("add" /* ADD */),
          set: createReadonlyMethod("set" /* SET */),
          delete: createReadonlyMethod("delete" /* DELETE */),
          clear: createReadonlyMethod("clear" /* CLEAR */),
          forEach: createForEach(true, false)
      };
      const shallowReadonlyInstrumentations = {
          get(key) {
              return get$1(this, key, true, true);
          },
          get size() {
              return size(this, true);
          },
          has(key) {
              return has$1.call(this, key, true);
          },
          add: createReadonlyMethod("add" /* ADD */),
          set: createReadonlyMethod("set" /* SET */),
          delete: createReadonlyMethod("delete" /* DELETE */),
          clear: createReadonlyMethod("clear" /* CLEAR */),
          forEach: createForEach(true, true)
      };
      const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];
      iteratorMethods.forEach(method => {
          mutableInstrumentations[method] = createIterableMethod(method, false, false);
          readonlyInstrumentations[method] = createIterableMethod(method, true, false);
          shallowInstrumentations[method] = createIterableMethod(method, false, true);
          shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);
      });
      return [
          mutableInstrumentations,
          readonlyInstrumentations,
          shallowInstrumentations,
          shallowReadonlyInstrumentations
      ];
  }
  const [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();
  function createInstrumentationGetter(isReadonly, shallow) {
      const instrumentations = shallow
          ? isReadonly
              ? shallowReadonlyInstrumentations
              : shallowInstrumentations
          : isReadonly
              ? readonlyInstrumentations
              : mutableInstrumentations;
      return (target, key, receiver) => {
          if (key === "__v_isReactive" /* IS_REACTIVE */) {
              return !isReadonly;
          }
          else if (key === "__v_isReadonly" /* IS_READONLY */) {
              return isReadonly;
          }
          else if (key === "__v_raw" /* RAW */) {
              return target;
          }
          return Reflect.get(hasOwn(instrumentations, key) && key in target
              ? instrumentations
              : target, key, receiver);
      };
  }
  const mutableCollectionHandlers = {
      get: /*#__PURE__*/ createInstrumentationGetter(false, false)
  };
  const shallowCollectionHandlers = {
      get: /*#__PURE__*/ createInstrumentationGetter(false, true)
  };
  const readonlyCollectionHandlers = {
      get: /*#__PURE__*/ createInstrumentationGetter(true, false)
  };
  const shallowReadonlyCollectionHandlers = {
      get: /*#__PURE__*/ createInstrumentationGetter(true, true)
  };
  function checkIdentityKeys(target, has, key) {
      const rawKey = toRaw(key);
      if (rawKey !== key && has.call(target, rawKey)) {
          const type = toRawType(target);
          console.warn(`Reactive ${type} contains both the raw and reactive ` +
              `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +
              `which can lead to inconsistencies. ` +
              `Avoid differentiating between the raw and reactive versions ` +
              `of an object and only use the reactive version if possible.`);
      }
  }

  const reactiveMap = new WeakMap();
  const shallowReactiveMap = new WeakMap();
  const readonlyMap = new WeakMap();
  const shallowReadonlyMap = new WeakMap();
  function targetTypeMap(rawType) {
      switch (rawType) {
          case 'Object':
          case 'Array':
              return 1 /* COMMON */;
          case 'Map':
          case 'Set':
          case 'WeakMap':
          case 'WeakSet':
              return 2 /* COLLECTION */;
          default:
              return 0 /* INVALID */;
      }
  }
  function getTargetType(value) {
      return value["__v_skip" /* SKIP */] || !Object.isExtensible(value)
          ? 0 /* INVALID */
          : targetTypeMap(toRawType(value));
  }
  function reactive(target) {
      // if trying to observe a readonly proxy, return the readonly version.
      if (isReadonly(target)) {
          return target;
      }
      return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);
  }
  /**
   * Return a shallowly-reactive copy of the original object, where only the root
   * level properties are reactive. It also does not auto-unwrap refs (even at the
   * root level).
   */
  function shallowReactive(target) {
      return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);
  }
  /**
   * Creates a readonly copy of the original object. Note the returned copy is not
   * made reactive, but `readonly` can be called on an already reactive object.
   */
  function readonly(target) {
      return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);
  }
  /**
   * Returns a reactive-copy of the original object, where only the root level
   * properties are readonly, and does NOT unwrap refs nor recursively convert
   * returned properties.
   * This is used for creating the props proxy object for stateful components.
   */
  function shallowReadonly(target) {
      return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);
  }
  function createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {
      if (!isObject(target)) {
          {
              console.warn(`value cannot be made reactive: ${String(target)}`);
          }
          return target;
      }
      // target is already a Proxy, return it.
      // exception: calling readonly() on a reactive object
      if (target["__v_raw" /* RAW */] &&
          !(isReadonly && target["__v_isReactive" /* IS_REACTIVE */])) {
          return target;
      }
      // target already has corresponding Proxy
      const existingProxy = proxyMap.get(target);
      if (existingProxy) {
          return existingProxy;
      }
      // only a whitelist of value types can be observed.
      const targetType = getTargetType(target);
      if (targetType === 0 /* INVALID */) {
          return target;
      }
      const proxy = new Proxy(target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers);
      proxyMap.set(target, proxy);
      return proxy;
  }
  function isReactive(value) {
      if (isReadonly(value)) {
          return isReactive(value["__v_raw" /* RAW */]);
      }
      return !!(value && value["__v_isReactive" /* IS_REACTIVE */]);
  }
  function isReadonly(value) {
      return !!(value && value["__v_isReadonly" /* IS_READONLY */]);
  }
  function isShallow(value) {
      return !!(value && value["__v_isShallow" /* IS_SHALLOW */]);
  }
  function isProxy(value) {
      return isReactive(value) || isReadonly(value);
  }
  function toRaw(observed) {
      const raw = observed && observed["__v_raw" /* RAW */];
      return raw ? toRaw(raw) : observed;
  }
  function markRaw(value) {
      def(value, "__v_skip" /* SKIP */, true);
      return value;
  }
  const toReactive = (value) => isObject(value) ? reactive(value) : value;
  const toReadonly = (value) => isObject(value) ? readonly(value) : value;

  function trackRefValue(ref) {
      if (shouldTrack && activeEffect) {
          ref = toRaw(ref);
          {
              trackEffects(ref.dep || (ref.dep = createDep()), {
                  target: ref,
                  type: "get" /* GET */,
                  key: 'value'
              });
          }
      }
  }
  function triggerRefValue(ref, newVal) {
      ref = toRaw(ref);
      if (ref.dep) {
          {
              triggerEffects(ref.dep, {
                  target: ref,
                  type: "set" /* SET */,
                  key: 'value',
                  newValue: newVal
              });
          }
      }
  }
  function isRef(r) {
      return !!(r && r.__v_isRef === true);
  }
  function ref(value) {
      return createRef(value, false);
  }
  function shallowRef(value) {
      return createRef(value, true);
  }
  function createRef(rawValue, shallow) {
      if (isRef(rawValue)) {
          return rawValue;
      }
      return new RefImpl(rawValue, shallow);
  }
  class RefImpl {
      constructor(value, __v_isShallow) {
          this.__v_isShallow = __v_isShallow;
          this.dep = undefined;
          this.__v_isRef = true;
          this._rawValue = __v_isShallow ? value : toRaw(value);
          this._value = __v_isShallow ? value : toReactive(value);
      }
      get value() {
          trackRefValue(this);
          return this._value;
      }
      set value(newVal) {
          newVal = this.__v_isShallow ? newVal : toRaw(newVal);
          if (hasChanged(newVal, this._rawValue)) {
              this._rawValue = newVal;
              this._value = this.__v_isShallow ? newVal : toReactive(newVal);
              triggerRefValue(this, newVal);
          }
      }
  }
  function triggerRef(ref) {
      triggerRefValue(ref, ref.value );
  }
  function unref(ref) {
      return isRef(ref) ? ref.value : ref;
  }
  const shallowUnwrapHandlers = {
      get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
      set: (target, key, value, receiver) => {
          const oldValue = target[key];
          if (isRef(oldValue) && !isRef(value)) {
              oldValue.value = value;
              return true;
          }
          else {
              return Reflect.set(target, key, value, receiver);
          }
      }
  };
  function proxyRefs(objectWithRefs) {
      return isReactive(objectWithRefs)
          ? objectWithRefs
          : new Proxy(objectWithRefs, shallowUnwrapHandlers);
  }
  class CustomRefImpl {
      constructor(factory) {
          this.dep = undefined;
          this.__v_isRef = true;
          const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));
          this._get = get;
          this._set = set;
      }
      get value() {
          return this._get();
      }
      set value(newVal) {
          this._set(newVal);
      }
  }
  function customRef(factory) {
      return new CustomRefImpl(factory);
  }
  function toRefs(object) {
      if (!isProxy(object)) {
          console.warn(`toRefs() expects a reactive object but received a plain one.`);
      }
      const ret = isArray(object) ? new Array(object.length) : {};
      for (const key in object) {
          ret[key] = toRef(object, key);
      }
      return ret;
  }
  class ObjectRefImpl {
      constructor(_object, _key, _defaultValue) {
          this._object = _object;
          this._key = _key;
          this._defaultValue = _defaultValue;
          this.__v_isRef = true;
      }
      get value() {
          const val = this._object[this._key];
          return val === undefined ? this._defaultValue : val;
      }
      set value(newVal) {
          this._object[this._key] = newVal;
      }
  }
  function toRef(object, key, defaultValue) {
      const val = object[key];
      return isRef(val)
          ? val
          : new ObjectRefImpl(object, key, defaultValue);
  }

  class ComputedRefImpl {
      constructor(getter, _setter, isReadonly, isSSR) {
          this._setter = _setter;
          this.dep = undefined;
          this.__v_isRef = true;
          this._dirty = true;
          this.effect = new ReactiveEffect(getter, () => {
              if (!this._dirty) {
                  this._dirty = true;
                  triggerRefValue(this);
              }
          });
          this.effect.computed = this;
          this.effect.active = this._cacheable = !isSSR;
          this["__v_isReadonly" /* IS_READONLY */] = isReadonly;
      }
      get value() {
          // the computed ref may get wrapped by other proxies e.g. readonly() #3376
          const self = toRaw(this);
          trackRefValue(self);
          if (self._dirty || !self._cacheable) {
              self._dirty = false;
              self._value = self.effect.run();
          }
          return self._value;
      }
      set value(newValue) {
          this._setter(newValue);
      }
  }
  function computed(getterOrOptions, debugOptions, isSSR = false) {
      let getter;
      let setter;
      const onlyGetter = isFunction(getterOrOptions);
      if (onlyGetter) {
          getter = getterOrOptions;
          setter = () => {
                  console.warn('Write operation failed: computed value is readonly');
              }
              ;
      }
      else {
          getter = getterOrOptions.get;
          setter = getterOrOptions.set;
      }
      const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
      if (debugOptions && !isSSR) {
          cRef.effect.onTrack = debugOptions.onTrack;
          cRef.effect.onTrigger = debugOptions.onTrigger;
      }
      return cRef;
  }

  var _a;
  const tick = /*#__PURE__*/ Promise.resolve();
  const queue = [];
  let queued = false;
  const scheduler = (fn) => {
      queue.push(fn);
      if (!queued) {
          queued = true;
          tick.then(flush);
      }
  };
  const flush = () => {
      for (let i = 0; i < queue.length; i++) {
          queue[i]();
      }
      queue.length = 0;
      queued = false;
  };
  class DeferredComputedRefImpl {
      constructor(getter) {
          this.dep = undefined;
          this._dirty = true;
          this.__v_isRef = true;
          this[_a] = true;
          let compareTarget;
          let hasCompareTarget = false;
          let scheduled = false;
          this.effect = new ReactiveEffect(getter, (computedTrigger) => {
              if (this.dep) {
                  if (computedTrigger) {
                      compareTarget = this._value;
                      hasCompareTarget = true;
                  }
                  else if (!scheduled) {
                      const valueToCompare = hasCompareTarget ? compareTarget : this._value;
                      scheduled = true;
                      hasCompareTarget = false;
                      scheduler(() => {
                          if (this.effect.active && this._get() !== valueToCompare) {
                              triggerRefValue(this);
                          }
                          scheduled = false;
                      });
                  }
                  // chained upstream computeds are notified synchronously to ensure
                  // value invalidation in case of sync access; normal effects are
                  // deferred to be triggered in scheduler.
                  for (const e of this.dep) {
                      if (e.computed instanceof DeferredComputedRefImpl) {
                          e.scheduler(true /* computedTrigger */);
                      }
                  }
              }
              this._dirty = true;
          });
          this.effect.computed = this;
      }
      _get() {
          if (this._dirty) {
              this._dirty = false;
              return (this._value = this.effect.run());
          }
          return this._value;
      }
      get value() {
          trackRefValue(this);
          // the computed ref may get wrapped by other proxies e.g. readonly() #3376
          return toRaw(this)._get();
      }
  }
  _a = "__v_isReadonly" /* IS_READONLY */;
  function deferredComputed(getter) {
      return new DeferredComputedRefImpl(getter);
  }

  exports.EffectScope = EffectScope;
  exports.ITERATE_KEY = ITERATE_KEY;
  exports.ReactiveEffect = ReactiveEffect;
  exports.computed = computed;
  exports.customRef = customRef;
  exports.deferredComputed = deferredComputed;
  exports.effect = effect;
  exports.effectScope = effectScope;
  exports.enableTracking = enableTracking;
  exports.getCurrentScope = getCurrentScope;
  exports.isProxy = isProxy;
  exports.isReactive = isReactive;
  exports.isReadonly = isReadonly;
  exports.isRef = isRef;
  exports.isShallow = isShallow;
  exports.markRaw = markRaw;
  exports.onScopeDispose = onScopeDispose;
  exports.pauseTracking = pauseTracking;
  exports.proxyRefs = proxyRefs;
  exports.reactive = reactive;
  exports.readonly = readonly;
  exports.ref = ref;
  exports.resetTracking = resetTracking;
  exports.shallowReactive = shallowReactive;
  exports.shallowReadonly = shallowReadonly;
  exports.shallowRef = shallowRef;
  exports.stop = stop;
  exports.toRaw = toRaw;
  exports.toRef = toRef;
  exports.toRefs = toRefs;
  exports.track = track;
  exports.trigger = trigger;
  exports.triggerRef = triggerRef;
  exports.unref = unref;

  Object.defineProperty(exports, '__esModule', { value: true });

  return exports;

}({}));
var VueReactivity=function(t){"use strict";function e(t,e){const n=Object.create(null),s=t.split(",");for(let i=0;i<s.length;i++)n[s[i]]=!0;return e?t=>!!n[t.toLowerCase()]:t=>!!n[t]}const n=()=>{},s=Object.assign,i=Object.prototype.hasOwnProperty,r=(t,e)=>i.call(t,e),c=Array.isArray,o=t=>"[object Map]"===l(t),u=t=>"symbol"==typeof t,a=t=>null!==t&&"object"==typeof t,h=Object.prototype.toString,l=t=>h.call(t),f=t=>"string"==typeof t&&"NaN"!==t&&"-"!==t[0]&&""+parseInt(t,10)===t,_=(t,e)=>!Object.is(t,e);let p;class d{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&p&&(this.parent=p,this.index=(p.scopes||(p.scopes=[])).push(this)-1)}run(t){if(this.active){const e=p;try{return p=this,t()}finally{p=e}}}on(){p=this}off(){p=this.parent}stop(t){if(this.active){let e,n;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].stop();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(this.parent&&!t){const t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.active=!1}}}function v(t,e=p){e&&e.active&&e.effects.push(t)}const g=t=>{const e=new Set(t);return e.w=0,e.n=0,e},y=t=>(t.w&S)>0,w=t=>(t.n&S)>0,R=new WeakMap;let b=0,S=1;let k;const m=Symbol(""),j=Symbol("");class E{constructor(t,e=null,n){this.fn=t,this.scheduler=e,this.active=!0,this.deps=[],this.parent=void 0,v(this,n)}run(){if(!this.active)return this.fn();let t=k,e=x;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=k,k=this,x=!0,S=1<<++b,b<=30?(({deps:t})=>{if(t.length)for(let e=0;e<t.length;e++)t[e].w|=S})(this):O(this),this.fn()}finally{b<=30&&(t=>{const{deps:e}=t;if(e.length){let n=0;for(let s=0;s<e.length;s++){const i=e[s];y(i)&&!w(i)?i.delete(t):e[n++]=i,i.w&=~S,i.n&=~S}e.length=n}})(this),S=1<<--b,k=this.parent,x=e,this.parent=void 0,this.deferStop&&this.stop()}}stop(){k===this?this.deferStop=!0:this.active&&(O(this),this.onStop&&this.onStop(),this.active=!1)}}function O(t){const{deps:e}=t;if(e.length){for(let n=0;n<e.length;n++)e[n].delete(t);e.length=0}}let x=!0;const P=[];function M(){P.push(x),x=!1}function z(){const t=P.pop();x=void 0===t||t}function V(t,e,n){if(x&&k){let e=R.get(t);e||R.set(t,e=new Map);let s=e.get(n);s||e.set(n,s=g()),W(s)}}function W(t,e){let n=!1;b<=30?w(t)||(t.n|=S,n=!y(t)):n=!t.has(k),n&&(t.add(k),k.deps.push(t))}function A(t,e,n,s,i,r){const u=R.get(t);if(!u)return;let a=[];if("clear"===e)a=[...u.values()];else if("length"===n&&c(t))u.forEach(((t,e)=>{("length"===e||e>=s)&&a.push(t)}));else switch(void 0!==n&&a.push(u.get(n)),e){case"add":c(t)?f(n)&&a.push(u.get("length")):(a.push(u.get(m)),o(t)&&a.push(u.get(j)));break;case"delete":c(t)||(a.push(u.get(m)),o(t)&&a.push(u.get(j)));break;case"set":o(t)&&a.push(u.get(m))}if(1===a.length)a[0]&&T(a[0]);else{const t=[];for(const e of a)e&&t.push(...e);T(g(t))}}function T(t,e){for(const n of c(t)?t:[...t])(n!==k||n.allowRecurse)&&(n.scheduler?n.scheduler():n.run())}const N=e("__proto__,__v_isRef,__isVue"),C=new Set(Object.getOwnPropertyNames(Symbol).map((t=>Symbol[t])).filter(u)),I=B(),K=B(!1,!0),D=B(!0),L=B(!0,!0),Y=q();function q(){const t={};return["includes","indexOf","lastIndexOf"].forEach((e=>{t[e]=function(...t){const n=Pt(this);for(let e=0,i=this.length;e<i;e++)V(n,0,e+"");const s=n[e](...t);return-1===s||!1===s?n[e](...t.map(Pt)):s}})),["push","pop","shift","unshift","splice"].forEach((e=>{t[e]=function(...t){M();const n=Pt(this)[e].apply(this,t);return z(),n}})),t}function B(t=!1,e=!1){return function(n,s,i){if("__v_isReactive"===s)return!t;if("__v_isReadonly"===s)return t;if("__v_isShallow"===s)return e;if("__v_raw"===s&&i===(t?e?bt:Rt:e?wt:yt).get(n))return n;const o=c(n);if(!t&&o&&r(Y,s))return Reflect.get(Y,s,i);const h=Reflect.get(n,s,i);if(u(s)?C.has(s):N(s))return h;if(t||V(n,0,s),e)return h;if(At(h)){return!o||!f(s)?h.value:h}return a(h)?t?mt(h):kt(h):h}}function F(t=!1){return function(e,n,s,i){let o=e[n];if(Ot(o)&&At(o)&&!At(s))return!1;if(!t&&!Ot(s)&&(xt(s)||(s=Pt(s),o=Pt(o)),!c(e)&&At(o)&&!At(s)))return o.value=s,!0;const u=c(e)&&f(n)?Number(n)<e.length:r(e,n),a=Reflect.set(e,n,s,i);return e===Pt(i)&&(u?_(s,o)&&A(e,"set",n,s):A(e,"add",n,s)),a}}const G={get:I,set:F(),deleteProperty:function(t,e){const n=r(t,e),s=Reflect.deleteProperty(t,e);return s&&n&&A(t,"delete",e,void 0),s},has:function(t,e){const n=Reflect.has(t,e);return u(e)&&C.has(e)||V(t,0,e),n},ownKeys:function(t){return V(t,0,c(t)?"length":m),Reflect.ownKeys(t)}},H={get:D,set:(t,e)=>!0,deleteProperty:(t,e)=>!0},J=s({},G,{get:K,set:F(!0)}),Q=s({},H,{get:L}),U=t=>t,X=t=>Reflect.getPrototypeOf(t);function Z(t,e,n=!1,s=!1){const i=Pt(t=t.__v_raw),r=Pt(e);e!==r&&!n&&V(i,0,e),!n&&V(i,0,r);const{has:c}=X(i),o=s?U:n?zt:Mt;return c.call(i,e)?o(t.get(e)):c.call(i,r)?o(t.get(r)):void(t!==i&&t.get(e))}function $(t,e=!1){const n=this.__v_raw,s=Pt(n),i=Pt(t);return t!==i&&!e&&V(s,0,t),!e&&V(s,0,i),t===i?n.has(t):n.has(t)||n.has(i)}function tt(t,e=!1){return t=t.__v_raw,!e&&V(Pt(t),0,m),Reflect.get(t,"size",t)}function et(t){t=Pt(t);const e=Pt(this);return X(e).has.call(e,t)||(e.add(t),A(e,"add",t,t)),this}function nt(t,e){e=Pt(e);const n=Pt(this),{has:s,get:i}=X(n);let r=s.call(n,t);r||(t=Pt(t),r=s.call(n,t));const c=i.call(n,t);return n.set(t,e),r?_(e,c)&&A(n,"set",t,e):A(n,"add",t,e),this}function st(t){const e=Pt(this),{has:n,get:s}=X(e);let i=n.call(e,t);i||(t=Pt(t),i=n.call(e,t)),s&&s.call(e,t);const r=e.delete(t);return i&&A(e,"delete",t,void 0),r}function it(){const t=Pt(this),e=0!==t.size,n=t.clear();return e&&A(t,"clear",void 0,void 0),n}function rt(t,e){return function(n,s){const i=this,r=i.__v_raw,c=Pt(r),o=e?U:t?zt:Mt;return!t&&V(c,0,m),r.forEach(((t,e)=>n.call(s,o(t),o(e),i)))}}function ct(t,e,n){return function(...s){const i=this.__v_raw,r=Pt(i),c=o(r),u="entries"===t||t===Symbol.iterator&&c,a="keys"===t&&c,h=i[t](...s),l=n?U:e?zt:Mt;return!e&&V(r,0,a?j:m),{next(){const{value:t,done:e}=h.next();return e?{value:t,done:e}:{value:u?[l(t[0]),l(t[1])]:l(t),done:e}},[Symbol.iterator](){return this}}}}function ot(t){return function(...e){return"delete"!==t&&this}}function ut(){const t={get(t){return Z(this,t)},get size(){return tt(this)},has:$,add:et,set:nt,delete:st,clear:it,forEach:rt(!1,!1)},e={get(t){return Z(this,t,!1,!0)},get size(){return tt(this)},has:$,add:et,set:nt,delete:st,clear:it,forEach:rt(!1,!0)},n={get(t){return Z(this,t,!0)},get size(){return tt(this,!0)},has(t){return $.call(this,t,!0)},add:ot("add"),set:ot("set"),delete:ot("delete"),clear:ot("clear"),forEach:rt(!0,!1)},s={get(t){return Z(this,t,!0,!0)},get size(){return tt(this,!0)},has(t){return $.call(this,t,!0)},add:ot("add"),set:ot("set"),delete:ot("delete"),clear:ot("clear"),forEach:rt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach((i=>{t[i]=ct(i,!1,!1),n[i]=ct(i,!0,!1),e[i]=ct(i,!1,!0),s[i]=ct(i,!0,!0)})),[t,n,e,s]}const[at,ht,lt,ft]=ut();function _t(t,e){const n=e?t?ft:lt:t?ht:at;return(e,s,i)=>"__v_isReactive"===s?!t:"__v_isReadonly"===s?t:"__v_raw"===s?e:Reflect.get(r(n,s)&&s in e?n:e,s,i)}const pt={get:_t(!1,!1)},dt={get:_t(!1,!0)},vt={get:_t(!0,!1)},gt={get:_t(!0,!0)},yt=new WeakMap,wt=new WeakMap,Rt=new WeakMap,bt=new WeakMap;function St(t){return t.__v_skip||!Object.isExtensible(t)?0:function(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((t=>l(t).slice(8,-1))(t))}function kt(t){return Ot(t)?t:jt(t,!1,G,pt,yt)}function mt(t){return jt(t,!0,H,vt,Rt)}function jt(t,e,n,s,i){if(!a(t))return t;if(t.__v_raw&&(!e||!t.__v_isReactive))return t;const r=i.get(t);if(r)return r;const c=St(t);if(0===c)return t;const o=new Proxy(t,2===c?s:n);return i.set(t,o),o}function Et(t){return Ot(t)?Et(t.__v_raw):!(!t||!t.__v_isReactive)}function Ot(t){return!(!t||!t.__v_isReadonly)}function xt(t){return!(!t||!t.__v_isShallow)}function Pt(t){const e=t&&t.__v_raw;return e?Pt(e):t}const Mt=t=>a(t)?kt(t):t,zt=t=>a(t)?mt(t):t;function Vt(t){x&&k&&W((t=Pt(t)).dep||(t.dep=g()))}function Wt(t,e){(t=Pt(t)).dep&&T(t.dep)}function At(t){return!(!t||!0!==t.__v_isRef)}function Tt(t,e){return At(t)?t:new Nt(t,e)}class Nt{constructor(t,e){this.__v_isShallow=e,this.dep=void 0,this.__v_isRef=!0,this._rawValue=e?t:Pt(t),this._value=e?t:Mt(t)}get value(){return Vt(this),this._value}set value(t){t=this.__v_isShallow?t:Pt(t),_(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Mt(t),Wt(this))}}function Ct(t){return At(t)?t.value:t}const It={get:(t,e,n)=>Ct(Reflect.get(t,e,n)),set:(t,e,n,s)=>{const i=t[e];return At(i)&&!At(n)?(i.value=n,!0):Reflect.set(t,e,n,s)}};class Kt{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:e,set:n}=t((()=>Vt(this)),(()=>Wt(this)));this._get=e,this._set=n}get value(){return this._get()}set value(t){this._set(t)}}class Dt{constructor(t,e,n){this._object=t,this._key=e,this._defaultValue=n,this.__v_isRef=!0}get value(){const t=this._object[this._key];return void 0===t?this._defaultValue:t}set value(t){this._object[this._key]=t}}function Lt(t,e,n){const s=t[e];return At(s)?s:new Dt(t,e,n)}class Yt{constructor(t,e,n,s){this._setter=e,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new E(t,(()=>{this._dirty||(this._dirty=!0,Wt(this))})),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=n}get value(){const t=Pt(this);return Vt(t),!t._dirty&&t._cacheable||(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}var qt;const Bt=Promise.resolve(),Ft=[];let Gt=!1;const Ht=()=>{for(let t=0;t<Ft.length;t++)Ft[t]();Ft.length=0,Gt=!1};class Jt{constructor(t){let e;this.dep=void 0,this._dirty=!0,this.__v_isRef=!0,this[qt]=!0;let n=!1,s=!1;this.effect=new E(t,(t=>{if(this.dep){if(t)e=this._value,n=!0;else if(!s){const t=n?e:this._value;s=!0,n=!1,Ft.push((()=>{this.effect.active&&this._get()!==t&&Wt(this),s=!1})),Gt||(Gt=!0,Bt.then(Ht))}for(const t of this.dep)t.computed instanceof Jt&&t.scheduler(!0)}this._dirty=!0})),this.effect.computed=this}_get(){return this._dirty?(this._dirty=!1,this._value=this.effect.run()):this._value}get value(){return Vt(this),Pt(this)._get()}}return qt="__v_isReadonly",t.EffectScope=d,t.ITERATE_KEY=m,t.ReactiveEffect=E,t.computed=function(t,e,s=!1){let i,r;const c="function"==typeof t;return c?(i=t,r=n):(i=t.get,r=t.set),new Yt(i,r,c||!r,s)},t.customRef=function(t){return new Kt(t)},t.deferredComputed=function(t){return new Jt(t)},t.effect=function(t,e){t.effect&&(t=t.effect.fn);const n=new E(t);e&&(s(n,e),e.scope&&v(n,e.scope)),e&&e.lazy||n.run();const i=n.run.bind(n);return i.effect=n,i},t.effectScope=function(t){return new d(t)},t.enableTracking=function(){P.push(x),x=!0},t.getCurrentScope=function(){return p},t.isProxy=function(t){return Et(t)||Ot(t)},t.isReactive=Et,t.isReadonly=Ot,t.isRef=At,t.isShallow=xt,t.markRaw=function(t){return((t,e,n)=>{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:n})})(t,"__v_skip",!0),t},t.onScopeDispose=function(t){p&&p.cleanups.push(t)},t.pauseTracking=M,t.proxyRefs=function(t){return Et(t)?t:new Proxy(t,It)},t.reactive=kt,t.readonly=mt,t.ref=function(t){return Tt(t,!1)},t.resetTracking=z,t.shallowReactive=function(t){return jt(t,!1,J,dt,wt)},t.shallowReadonly=function(t){return jt(t,!0,Q,gt,bt)},t.shallowRef=function(t){return Tt(t,!0)},t.stop=function(t){t.effect.stop()},t.toRaw=Pt,t.toRef=Lt,t.toRefs=function(t){const e=c(t)?new Array(t.length):{};for(const n in t)e[n]=Lt(t,n);return e},t.track=V,t.trigger=A,t.triggerRef=function(t){Wt(t)},t.unref=Ct,Object.defineProperty(t,"__esModule",{value:!0}),t}({});
'use strict'

if (process.env.NODE_ENV === 'production') {
  module.exports = require('./dist/reactivity.cjs.prod.js')
} else {
  module.exports = require('./dist/reactivity.cjs.js')
}
The MIT License (MIT)

Copyright (c) 2018-present, Yuxi (Evan) You

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "@vue/reactivity",
  "version": "3.2.33",
  "description": "@vue/reactivity",
  "main": "index.js",
  "module": "dist/reactivity.esm-bundler.js",
  "types": "dist/reactivity.d.ts",
  "unpkg": "dist/reactivity.global.js",
  "jsdelivr": "dist/reactivity.global.js",
  "files": [
    "index.js",
    "dist"
  ],
  "sideEffects": false,
  "repository": {
    "type": "git",
    "url": "git+https://github.com/vuejs/core.git",
    "directory": "packages/reactivity"
  },
  "buildOptions": {
    "name": "VueReactivity",
    "formats": [
      "esm-bundler",
      "esm-browser",
      "cjs",
      "global"
    ]
  },
  "author": "Evan You",
  "license": "MIT",
  "homepage": "https://github.com/vuejs/core/tree/main/packages/reactivity#readme",
  "dependencies": {
    "@vue/shared": "3.2.33"
  }
}'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

/**
 * Make a map and return a function for checking if a key
 * is in that map.
 * IMPORTANT: all calls of this function must be prefixed with
 * \/\*#\_\_PURE\_\_\*\/
 * So that rollup can tree-shake them if necessary.
 */
function makeMap(str, expectsLowerCase) {
    const map = Object.create(null);
    const list = str.split(',');
    for (let i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];
}

/**
 * dev only flag -> name mapping
 */
const PatchFlagNames = {
    [1 /* TEXT */]: `TEXT`,
    [2 /* CLASS */]: `CLASS`,
    [4 /* STYLE */]: `STYLE`,
    [8 /* PROPS */]: `PROPS`,
    [16 /* FULL_PROPS */]: `FULL_PROPS`,
    [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,
    [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,
    [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,
    [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,
    [512 /* NEED_PATCH */]: `NEED_PATCH`,
    [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,
    [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,
    [-1 /* HOISTED */]: `HOISTED`,
    [-2 /* BAIL */]: `BAIL`
};

/**
 * Dev only
 */
const slotFlagsText = {
    [1 /* STABLE */]: 'STABLE',
    [2 /* DYNAMIC */]: 'DYNAMIC',
    [3 /* FORWARDED */]: 'FORWARDED'
};

const GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +
    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +
    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';
const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);

const range = 2;
function generateCodeFrame(source, start = 0, end = source.length) {
    // Split the content into individual lines but capture the newline sequence
    // that separated each line. This is important because the actual sequence is
    // needed to properly take into account the full line length for offset
    // comparison
    let lines = source.split(/(\r?\n)/);
    // Separate the lines and newline sequences into separate arrays for easier referencing
    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);
    lines = lines.filter((_, idx) => idx % 2 === 0);
    let count = 0;
    const res = [];
    for (let i = 0; i < lines.length; i++) {
        count +=
            lines[i].length +
                ((newlineSequences[i] && newlineSequences[i].length) || 0);
        if (count >= start) {
            for (let j = i - range; j <= i + range || end > count; j++) {
                if (j < 0 || j >= lines.length)
                    continue;
                const line = j + 1;
                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);
                const lineLength = lines[j].length;
                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;
                if (j === i) {
                    // push underline
                    const pad = start - (count - (lineLength + newLineSeqLength));
                    const length = Math.max(1, end > count ? lineLength - pad : end - start);
                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));
                }
                else if (j > i) {
                    if (end > count) {
                        const length = Math.max(Math.min(end - count, lineLength), 1);
                        res.push(`   |  ` + '^'.repeat(length));
                    }
                    count += lineLength + newLineSeqLength;
                }
            }
            break;
        }
    }
    return res.join('\n');
}

/**
 * On the client we only need to offer special cases for boolean attributes that
 * have different names from their corresponding dom properties:
 * - itemscope -> N/A
 * - allowfullscreen -> allowFullscreen
 * - formnovalidate -> formNoValidate
 * - ismap -> isMap
 * - nomodule -> noModule
 * - novalidate -> noValidate
 * - readonly -> readOnly
 */
const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);
/**
 * The full list is needed during SSR to produce the correct initial markup.
 */
const isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +
    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +
    `loop,open,required,reversed,scoped,seamless,` +
    `checked,muted,multiple,selected`);
/**
 * Boolean attributes should be included if the value is truthy or ''.
 * e.g. `<select multiple>` compiles to `{ multiple: '' }`
 */
function includeBooleanAttr(value) {
    return !!value || value === '';
}
const unsafeAttrCharRE = /[>/="'\u0009\u000a\u000c\u0020]/;
const attrValidationCache = {};
function isSSRSafeAttrName(name) {
    if (attrValidationCache.hasOwnProperty(name)) {
        return attrValidationCache[name];
    }
    const isUnsafe = unsafeAttrCharRE.test(name);
    if (isUnsafe) {
        console.error(`unsafe attribute name: ${name}`);
    }
    return (attrValidationCache[name] = !isUnsafe);
}
const propsToAttrMap = {
    acceptCharset: 'accept-charset',
    className: 'class',
    htmlFor: 'for',
    httpEquiv: 'http-equiv'
};
/**
 * CSS properties that accept plain numbers
 */
const isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +
    `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +
    `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +
    `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +
    `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +
    `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +
    // SVG
    `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +
    `stroke-miterlimit,stroke-opacity,stroke-width`);
/**
 * Known attributes, this is used for stringification of runtime static nodes
 * so that we don't stringify bindings that cannot be set from HTML.
 * Don't also forget to allow `data-*` and `aria-*`!
 * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes
 */
const isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +
    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +
    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +
    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +
    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +
    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +
    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +
    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +
    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +
    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +
    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +
    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +
    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +
    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +
    `value,width,wrap`);
/**
 * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute
 */
const isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +
    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +
    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +
    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +
    `color-interpolation-filters,color-profile,color-rendering,` +
    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +
    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +
    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +
    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +
    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +
    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +
    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +
    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +
    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +
    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +
    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +
    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +
    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +
    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +
    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +
    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +
    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +
    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +
    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +
    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +
    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +
    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +
    `strikethrough-position,strikethrough-thickness,string,stroke,` +
    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +
    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +
    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +
    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +
    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +
    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +
    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +
    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +
    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +
    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +
    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);

function normalizeStyle(value) {
    if (isArray(value)) {
        const res = {};
        for (let i = 0; i < value.length; i++) {
            const item = value[i];
            const normalized = isString(item)
                ? parseStringStyle(item)
                : normalizeStyle(item);
            if (normalized) {
                for (const key in normalized) {
                    res[key] = normalized[key];
                }
            }
        }
        return res;
    }
    else if (isString(value)) {
        return value;
    }
    else if (isObject(value)) {
        return value;
    }
}
const listDelimiterRE = /;(?![^(]*\))/g;
const propertyDelimiterRE = /:(.+)/;
function parseStringStyle(cssText) {
    const ret = {};
    cssText.split(listDelimiterRE).forEach(item => {
        if (item) {
            const tmp = item.split(propertyDelimiterRE);
            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return ret;
}
function stringifyStyle(styles) {
    let ret = '';
    if (!styles || isString(styles)) {
        return ret;
    }
    for (const key in styles) {
        const value = styles[key];
        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);
        if (isString(value) ||
            (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {
            // only render valid values
            ret += `${normalizedKey}:${value};`;
        }
    }
    return ret;
}
function normalizeClass(value) {
    let res = '';
    if (isString(value)) {
        res = value;
    }
    else if (isArray(value)) {
        for (let i = 0; i < value.length; i++) {
            const normalized = normalizeClass(value[i]);
            if (normalized) {
                res += normalized + ' ';
            }
        }
    }
    else if (isObject(value)) {
        for (const name in value) {
            if (value[name]) {
                res += name + ' ';
            }
        }
    }
    return res.trim();
}
function normalizeProps(props) {
    if (!props)
        return null;
    let { class: klass, style } = props;
    if (klass && !isString(klass)) {
        props.class = normalizeClass(klass);
    }
    if (style) {
        props.style = normalizeStyle(style);
    }
    return props;
}

// These tag configs are shared between compiler-dom and runtime-dom, so they
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
const HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +
    'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +
    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +
    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +
    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +
    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +
    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +
    'option,output,progress,select,textarea,details,dialog,menu,' +
    'summary,template,blockquote,iframe,tfoot';
// https://developer.mozilla.org/en-US/docs/Web/SVG/Element
const SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +
    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +
    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +
    'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +
    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +
    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +
    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +
    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +
    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +
    'text,textPath,title,tspan,unknown,use,view';
const VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';
/**
 * Compiler only.
 * Do NOT use in runtime code paths unless behind `true` flag.
 */
const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);
/**
 * Compiler only.
 * Do NOT use in runtime code paths unless behind `true` flag.
 */
const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);
/**
 * Compiler only.
 * Do NOT use in runtime code paths unless behind `true` flag.
 */
const isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);

const escapeRE = /["'&<>]/;
function escapeHtml(string) {
    const str = '' + string;
    const match = escapeRE.exec(str);
    if (!match) {
        return str;
    }
    let html = '';
    let escaped;
    let index;
    let lastIndex = 0;
    for (index = match.index; index < str.length; index++) {
        switch (str.charCodeAt(index)) {
            case 34: // "
                escaped = '&quot;';
                break;
            case 38: // &
                escaped = '&amp;';
                break;
            case 39: // '
                escaped = '&#39;';
                break;
            case 60: // <
                escaped = '&lt;';
                break;
            case 62: // >
                escaped = '&gt;';
                break;
            default:
                continue;
        }
        if (lastIndex !== index) {
            html += str.slice(lastIndex, index);
        }
        lastIndex = index + 1;
        html += escaped;
    }
    return lastIndex !== index ? html + str.slice(lastIndex, index) : html;
}
// https://www.w3.org/TR/html52/syntax.html#comments
const commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;
function escapeHtmlComment(src) {
    return src.replace(commentStripRE, '');
}

function looseCompareArrays(a, b) {
    if (a.length !== b.length)
        return false;
    let equal = true;
    for (let i = 0; equal && i < a.length; i++) {
        equal = looseEqual(a[i], b[i]);
    }
    return equal;
}
function looseEqual(a, b) {
    if (a === b)
        return true;
    let aValidType = isDate(a);
    let bValidType = isDate(b);
    if (aValidType || bValidType) {
        return aValidType && bValidType ? a.getTime() === b.getTime() : false;
    }
    aValidType = isArray(a);
    bValidType = isArray(b);
    if (aValidType || bValidType) {
        return aValidType && bValidType ? looseCompareArrays(a, b) : false;
    }
    aValidType = isObject(a);
    bValidType = isObject(b);
    if (aValidType || bValidType) {
        /* istanbul ignore if: this if will probably never be called */
        if (!aValidType || !bValidType) {
            return false;
        }
        const aKeysCount = Object.keys(a).length;
        const bKeysCount = Object.keys(b).length;
        if (aKeysCount !== bKeysCount) {
            return false;
        }
        for (const key in a) {
            const aHasKey = a.hasOwnProperty(key);
            const bHasKey = b.hasOwnProperty(key);
            if ((aHasKey && !bHasKey) ||
                (!aHasKey && bHasKey) ||
                !looseEqual(a[key], b[key])) {
                return false;
            }
        }
    }
    return String(a) === String(b);
}
function looseIndexOf(arr, val) {
    return arr.findIndex(item => looseEqual(item, val));
}

/**
 * For converting {{ interpolation }} values to displayed strings.
 * @private
 */
const toDisplayString = (val) => {
    return isString(val)
        ? val
        : val == null
            ? ''
            : isArray(val) ||
                (isObject(val) &&
                    (val.toString === objectToString || !isFunction(val.toString)))
                ? JSON.stringify(val, replacer, 2)
                : String(val);
};
const replacer = (_key, val) => {
    // can't use isRef here since @vue/shared has no deps
    if (val && val.__v_isRef) {
        return replacer(_key, val.value);
    }
    else if (isMap(val)) {
        return {
            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {
                entries[`${key} =>`] = val;
                return entries;
            }, {})
        };
    }
    else if (isSet(val)) {
        return {
            [`Set(${val.size})`]: [...val.values()]
        };
    }
    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {
        return String(val);
    }
    return val;
};

const EMPTY_OBJ = Object.freeze({})
    ;
const EMPTY_ARR = Object.freeze([]) ;
const NOOP = () => { };
/**
 * Always return false.
 */
const NO = () => false;
const onRE = /^on[^a-z]/;
const isOn = (key) => onRE.test(key);
const isModelListener = (key) => key.startsWith('onUpdate:');
const extend = Object.assign;
const remove = (arr, el) => {
    const i = arr.indexOf(el);
    if (i > -1) {
        arr.splice(i, 1);
    }
};
const hasOwnProperty = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty.call(val, key);
const isArray = Array.isArray;
const isMap = (val) => toTypeString(val) === '[object Map]';
const isSet = (val) => toTypeString(val) === '[object Set]';
const isDate = (val) => val instanceof Date;
const isFunction = (val) => typeof val === 'function';
const isString = (val) => typeof val === 'string';
const isSymbol = (val) => typeof val === 'symbol';
const isObject = (val) => val !== null && typeof val === 'object';
const isPromise = (val) => {
    return isObject(val) && isFunction(val.then) && isFunction(val.catch);
};
const objectToString = Object.prototype.toString;
const toTypeString = (value) => objectToString.call(value);
const toRawType = (value) => {
    // extract "RawType" from strings like "[object RawType]"
    return toTypeString(value).slice(8, -1);
};
const isPlainObject = (val) => toTypeString(val) === '[object Object]';
const isIntegerKey = (key) => isString(key) &&
    key !== 'NaN' &&
    key[0] !== '-' &&
    '' + parseInt(key, 10) === key;
const isReservedProp = /*#__PURE__*/ makeMap(
// the leading comma is intentional so empty string "" is also included
',key,ref,ref_for,ref_key,' +
    'onVnodeBeforeMount,onVnodeMounted,' +
    'onVnodeBeforeUpdate,onVnodeUpdated,' +
    'onVnodeBeforeUnmount,onVnodeUnmounted');
const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');
const cacheStringFunction = (fn) => {
    const cache = Object.create(null);
    return ((str) => {
        const hit = cache[str];
        return hit || (cache[str] = fn(str));
    });
};
const camelizeRE = /-(\w)/g;
/**
 * @private
 */
const camelize = cacheStringFunction((str) => {
    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
});
const hyphenateRE = /\B([A-Z])/g;
/**
 * @private
 */
const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());
/**
 * @private
 */
const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));
/**
 * @private
 */
const toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);
// compare whether a value has changed, accounting for NaN.
const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
const invokeArrayFns = (fns, arg) => {
    for (let i = 0; i < fns.length; i++) {
        fns[i](arg);
    }
};
const def = (obj, key, value) => {
    Object.defineProperty(obj, key, {
        configurable: true,
        enumerable: false,
        value
    });
};
const toNumber = (val) => {
    const n = parseFloat(val);
    return isNaN(n) ? val : n;
};
let _globalThis;
const getGlobalThis = () => {
    return (_globalThis ||
        (_globalThis =
            typeof globalThis !== 'undefined'
                ? globalThis
                : typeof self !== 'undefined'
                    ? self
                    : typeof window !== 'undefined'
                        ? window
                        : typeof global !== 'undefined'
                            ? global
                            : {}));
};

exports.EMPTY_ARR = EMPTY_ARR;
exports.EMPTY_OBJ = EMPTY_OBJ;
exports.NO = NO;
exports.NOOP = NOOP;
exports.PatchFlagNames = PatchFlagNames;
exports.camelize = camelize;
exports.capitalize = capitalize;
exports.def = def;
exports.escapeHtml = escapeHtml;
exports.escapeHtmlComment = escapeHtmlComment;
exports.extend = extend;
exports.generateCodeFrame = generateCodeFrame;
exports.getGlobalThis = getGlobalThis;
exports.hasChanged = hasChanged;
exports.hasOwn = hasOwn;
exports.hyphenate = hyphenate;
exports.includeBooleanAttr = includeBooleanAttr;
exports.invokeArrayFns = invokeArrayFns;
exports.isArray = isArray;
exports.isBooleanAttr = isBooleanAttr;
exports.isBuiltInDirective = isBuiltInDirective;
exports.isDate = isDate;
exports.isFunction = isFunction;
exports.isGloballyWhitelisted = isGloballyWhitelisted;
exports.isHTMLTag = isHTMLTag;
exports.isIntegerKey = isIntegerKey;
exports.isKnownHtmlAttr = isKnownHtmlAttr;
exports.isKnownSvgAttr = isKnownSvgAttr;
exports.isMap = isMap;
exports.isModelListener = isModelListener;
exports.isNoUnitNumericStyleProp = isNoUnitNumericStyleProp;
exports.isObject = isObject;
exports.isOn = isOn;
exports.isPlainObject = isPlainObject;
exports.isPromise = isPromise;
exports.isReservedProp = isReservedProp;
exports.isSSRSafeAttrName = isSSRSafeAttrName;
exports.isSVGTag = isSVGTag;
exports.isSet = isSet;
exports.isSpecialBooleanAttr = isSpecialBooleanAttr;
exports.isString = isString;
exports.isSymbol = isSymbol;
exports.isVoidTag = isVoidTag;
exports.looseEqual = looseEqual;
exports.looseIndexOf = looseIndexOf;
exports.makeMap = makeMap;
exports.normalizeClass = normalizeClass;
exports.normalizeProps = normalizeProps;
exports.normalizeStyle = normalizeStyle;
exports.objectToString = objectToString;
exports.parseStringStyle = parseStringStyle;
exports.propsToAttrMap = propsToAttrMap;
exports.remove = remove;
exports.slotFlagsText = slotFlagsText;
exports.stringifyStyle = stringifyStyle;
exports.toDisplayString = toDisplayString;
exports.toHandlerKey = toHandlerKey;
exports.toNumber = toNumber;
exports.toRawType = toRawType;
exports.toTypeString = toTypeString;
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

/**
 * Make a map and return a function for checking if a key
 * is in that map.
 * IMPORTANT: all calls of this function must be prefixed with
 * \/\*#\_\_PURE\_\_\*\/
 * So that rollup can tree-shake them if necessary.
 */
function makeMap(str, expectsLowerCase) {
    const map = Object.create(null);
    const list = str.split(',');
    for (let i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];
}

/**
 * dev only flag -> name mapping
 */
const PatchFlagNames = {
    [1 /* TEXT */]: `TEXT`,
    [2 /* CLASS */]: `CLASS`,
    [4 /* STYLE */]: `STYLE`,
    [8 /* PROPS */]: `PROPS`,
    [16 /* FULL_PROPS */]: `FULL_PROPS`,
    [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,
    [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,
    [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,
    [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,
    [512 /* NEED_PATCH */]: `NEED_PATCH`,
    [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,
    [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,
    [-1 /* HOISTED */]: `HOISTED`,
    [-2 /* BAIL */]: `BAIL`
};

/**
 * Dev only
 */
const slotFlagsText = {
    [1 /* STABLE */]: 'STABLE',
    [2 /* DYNAMIC */]: 'DYNAMIC',
    [3 /* FORWARDED */]: 'FORWARDED'
};

const GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +
    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +
    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';
const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);

const range = 2;
function generateCodeFrame(source, start = 0, end = source.length) {
    // Split the content into individual lines but capture the newline sequence
    // that separated each line. This is important because the actual sequence is
    // needed to properly take into account the full line length for offset
    // comparison
    let lines = source.split(/(\r?\n)/);
    // Separate the lines and newline sequences into separate arrays for easier referencing
    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);
    lines = lines.filter((_, idx) => idx % 2 === 0);
    let count = 0;
    const res = [];
    for (let i = 0; i < lines.length; i++) {
        count +=
            lines[i].length +
                ((newlineSequences[i] && newlineSequences[i].length) || 0);
        if (count >= start) {
            for (let j = i - range; j <= i + range || end > count; j++) {
                if (j < 0 || j >= lines.length)
                    continue;
                const line = j + 1;
                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);
                const lineLength = lines[j].length;
                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;
                if (j === i) {
                    // push underline
                    const pad = start - (count - (lineLength + newLineSeqLength));
                    const length = Math.max(1, end > count ? lineLength - pad : end - start);
                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));
                }
                else if (j > i) {
                    if (end > count) {
                        const length = Math.max(Math.min(end - count, lineLength), 1);
                        res.push(`   |  ` + '^'.repeat(length));
                    }
                    count += lineLength + newLineSeqLength;
                }
            }
            break;
        }
    }
    return res.join('\n');
}

/**
 * On the client we only need to offer special cases for boolean attributes that
 * have different names from their corresponding dom properties:
 * - itemscope -> N/A
 * - allowfullscreen -> allowFullscreen
 * - formnovalidate -> formNoValidate
 * - ismap -> isMap
 * - nomodule -> noModule
 * - novalidate -> noValidate
 * - readonly -> readOnly
 */
const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);
/**
 * The full list is needed during SSR to produce the correct initial markup.
 */
const isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +
    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +
    `loop,open,required,reversed,scoped,seamless,` +
    `checked,muted,multiple,selected`);
/**
 * Boolean attributes should be included if the value is truthy or ''.
 * e.g. `<select multiple>` compiles to `{ multiple: '' }`
 */
function includeBooleanAttr(value) {
    return !!value || value === '';
}
const unsafeAttrCharRE = /[>/="'\u0009\u000a\u000c\u0020]/;
const attrValidationCache = {};
function isSSRSafeAttrName(name) {
    if (attrValidationCache.hasOwnProperty(name)) {
        return attrValidationCache[name];
    }
    const isUnsafe = unsafeAttrCharRE.test(name);
    if (isUnsafe) {
        console.error(`unsafe attribute name: ${name}`);
    }
    return (attrValidationCache[name] = !isUnsafe);
}
const propsToAttrMap = {
    acceptCharset: 'accept-charset',
    className: 'class',
    htmlFor: 'for',
    httpEquiv: 'http-equiv'
};
/**
 * CSS properties that accept plain numbers
 */
const isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +
    `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +
    `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +
    `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +
    `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +
    `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +
    // SVG
    `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +
    `stroke-miterlimit,stroke-opacity,stroke-width`);
/**
 * Known attributes, this is used for stringification of runtime static nodes
 * so that we don't stringify bindings that cannot be set from HTML.
 * Don't also forget to allow `data-*` and `aria-*`!
 * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes
 */
const isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +
    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +
    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +
    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +
    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +
    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +
    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +
    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +
    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +
    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +
    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +
    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +
    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +
    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +
    `value,width,wrap`);
/**
 * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute
 */
const isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +
    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +
    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +
    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +
    `color-interpolation-filters,color-profile,color-rendering,` +
    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +
    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +
    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +
    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +
    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +
    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +
    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +
    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +
    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +
    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +
    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +
    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +
    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +
    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +
    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +
    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +
    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +
    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +
    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +
    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +
    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +
    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +
    `strikethrough-position,strikethrough-thickness,string,stroke,` +
    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +
    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +
    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +
    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +
    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +
    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +
    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +
    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +
    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +
    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +
    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);

function normalizeStyle(value) {
    if (isArray(value)) {
        const res = {};
        for (let i = 0; i < value.length; i++) {
            const item = value[i];
            const normalized = isString(item)
                ? parseStringStyle(item)
                : normalizeStyle(item);
            if (normalized) {
                for (const key in normalized) {
                    res[key] = normalized[key];
                }
            }
        }
        return res;
    }
    else if (isString(value)) {
        return value;
    }
    else if (isObject(value)) {
        return value;
    }
}
const listDelimiterRE = /;(?![^(]*\))/g;
const propertyDelimiterRE = /:(.+)/;
function parseStringStyle(cssText) {
    const ret = {};
    cssText.split(listDelimiterRE).forEach(item => {
        if (item) {
            const tmp = item.split(propertyDelimiterRE);
            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return ret;
}
function stringifyStyle(styles) {
    let ret = '';
    if (!styles || isString(styles)) {
        return ret;
    }
    for (const key in styles) {
        const value = styles[key];
        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);
        if (isString(value) ||
            (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {
            // only render valid values
            ret += `${normalizedKey}:${value};`;
        }
    }
    return ret;
}
function normalizeClass(value) {
    let res = '';
    if (isString(value)) {
        res = value;
    }
    else if (isArray(value)) {
        for (let i = 0; i < value.length; i++) {
            const normalized = normalizeClass(value[i]);
            if (normalized) {
                res += normalized + ' ';
            }
        }
    }
    else if (isObject(value)) {
        for (const name in value) {
            if (value[name]) {
                res += name + ' ';
            }
        }
    }
    return res.trim();
}
function normalizeProps(props) {
    if (!props)
        return null;
    let { class: klass, style } = props;
    if (klass && !isString(klass)) {
        props.class = normalizeClass(klass);
    }
    if (style) {
        props.style = normalizeStyle(style);
    }
    return props;
}

// These tag configs are shared between compiler-dom and runtime-dom, so they
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
const HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +
    'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +
    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +
    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +
    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +
    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +
    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +
    'option,output,progress,select,textarea,details,dialog,menu,' +
    'summary,template,blockquote,iframe,tfoot';
// https://developer.mozilla.org/en-US/docs/Web/SVG/Element
const SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +
    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +
    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +
    'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +
    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +
    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +
    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +
    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +
    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +
    'text,textPath,title,tspan,unknown,use,view';
const VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';
/**
 * Compiler only.
 * Do NOT use in runtime code paths unless behind `false` flag.
 */
const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);
/**
 * Compiler only.
 * Do NOT use in runtime code paths unless behind `false` flag.
 */
const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);
/**
 * Compiler only.
 * Do NOT use in runtime code paths unless behind `false` flag.
 */
const isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);

const escapeRE = /["'&<>]/;
function escapeHtml(string) {
    const str = '' + string;
    const match = escapeRE.exec(str);
    if (!match) {
        return str;
    }
    let html = '';
    let escaped;
    let index;
    let lastIndex = 0;
    for (index = match.index; index < str.length; index++) {
        switch (str.charCodeAt(index)) {
            case 34: // "
                escaped = '&quot;';
                break;
            case 38: // &
                escaped = '&amp;';
                break;
            case 39: // '
                escaped = '&#39;';
                break;
            case 60: // <
                escaped = '&lt;';
                break;
            case 62: // >
                escaped = '&gt;';
                break;
            default:
                continue;
        }
        if (lastIndex !== index) {
            html += str.slice(lastIndex, index);
        }
        lastIndex = index + 1;
        html += escaped;
    }
    return lastIndex !== index ? html + str.slice(lastIndex, index) : html;
}
// https://www.w3.org/TR/html52/syntax.html#comments
const commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;
function escapeHtmlComment(src) {
    return src.replace(commentStripRE, '');
}

function looseCompareArrays(a, b) {
    if (a.length !== b.length)
        return false;
    let equal = true;
    for (let i = 0; equal && i < a.length; i++) {
        equal = looseEqual(a[i], b[i]);
    }
    return equal;
}
function looseEqual(a, b) {
    if (a === b)
        return true;
    let aValidType = isDate(a);
    let bValidType = isDate(b);
    if (aValidType || bValidType) {
        return aValidType && bValidType ? a.getTime() === b.getTime() : false;
    }
    aValidType = isArray(a);
    bValidType = isArray(b);
    if (aValidType || bValidType) {
        return aValidType && bValidType ? looseCompareArrays(a, b) : false;
    }
    aValidType = isObject(a);
    bValidType = isObject(b);
    if (aValidType || bValidType) {
        /* istanbul ignore if: this if will probably never be called */
        if (!aValidType || !bValidType) {
            return false;
        }
        const aKeysCount = Object.keys(a).length;
        const bKeysCount = Object.keys(b).length;
        if (aKeysCount !== bKeysCount) {
            return false;
        }
        for (const key in a) {
            const aHasKey = a.hasOwnProperty(key);
            const bHasKey = b.hasOwnProperty(key);
            if ((aHasKey && !bHasKey) ||
                (!aHasKey && bHasKey) ||
                !looseEqual(a[key], b[key])) {
                return false;
            }
        }
    }
    return String(a) === String(b);
}
function looseIndexOf(arr, val) {
    return arr.findIndex(item => looseEqual(item, val));
}

/**
 * For converting {{ interpolation }} values to displayed strings.
 * @private
 */
const toDisplayString = (val) => {
    return isString(val)
        ? val
        : val == null
            ? ''
            : isArray(val) ||
                (isObject(val) &&
                    (val.toString === objectToString || !isFunction(val.toString)))
                ? JSON.stringify(val, replacer, 2)
                : String(val);
};
const replacer = (_key, val) => {
    // can't use isRef here since @vue/shared has no deps
    if (val && val.__v_isRef) {
        return replacer(_key, val.value);
    }
    else if (isMap(val)) {
        return {
            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {
                entries[`${key} =>`] = val;
                return entries;
            }, {})
        };
    }
    else if (isSet(val)) {
        return {
            [`Set(${val.size})`]: [...val.values()]
        };
    }
    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {
        return String(val);
    }
    return val;
};

const EMPTY_OBJ = {};
const EMPTY_ARR = [];
const NOOP = () => { };
/**
 * Always return false.
 */
const NO = () => false;
const onRE = /^on[^a-z]/;
const isOn = (key) => onRE.test(key);
const isModelListener = (key) => key.startsWith('onUpdate:');
const extend = Object.assign;
const remove = (arr, el) => {
    const i = arr.indexOf(el);
    if (i > -1) {
        arr.splice(i, 1);
    }
};
const hasOwnProperty = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty.call(val, key);
const isArray = Array.isArray;
const isMap = (val) => toTypeString(val) === '[object Map]';
const isSet = (val) => toTypeString(val) === '[object Set]';
const isDate = (val) => val instanceof Date;
const isFunction = (val) => typeof val === 'function';
const isString = (val) => typeof val === 'string';
const isSymbol = (val) => typeof val === 'symbol';
const isObject = (val) => val !== null && typeof val === 'object';
const isPromise = (val) => {
    return isObject(val) && isFunction(val.then) && isFunction(val.catch);
};
const objectToString = Object.prototype.toString;
const toTypeString = (value) => objectToString.call(value);
const toRawType = (value) => {
    // extract "RawType" from strings like "[object RawType]"
    return toTypeString(value).slice(8, -1);
};
const isPlainObject = (val) => toTypeString(val) === '[object Object]';
const isIntegerKey = (key) => isString(key) &&
    key !== 'NaN' &&
    key[0] !== '-' &&
    '' + parseInt(key, 10) === key;
const isReservedProp = /*#__PURE__*/ makeMap(
// the leading comma is intentional so empty string "" is also included
',key,ref,ref_for,ref_key,' +
    'onVnodeBeforeMount,onVnodeMounted,' +
    'onVnodeBeforeUpdate,onVnodeUpdated,' +
    'onVnodeBeforeUnmount,onVnodeUnmounted');
const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');
const cacheStringFunction = (fn) => {
    const cache = Object.create(null);
    return ((str) => {
        const hit = cache[str];
        return hit || (cache[str] = fn(str));
    });
};
const camelizeRE = /-(\w)/g;
/**
 * @private
 */
const camelize = cacheStringFunction((str) => {
    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
});
const hyphenateRE = /\B([A-Z])/g;
/**
 * @private
 */
const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());
/**
 * @private
 */
const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));
/**
 * @private
 */
const toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);
// compare whether a value has changed, accounting for NaN.
const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
const invokeArrayFns = (fns, arg) => {
    for (let i = 0; i < fns.length; i++) {
        fns[i](arg);
    }
};
const def = (obj, key, value) => {
    Object.defineProperty(obj, key, {
        configurable: true,
        enumerable: false,
        value
    });
};
const toNumber = (val) => {
    const n = parseFloat(val);
    return isNaN(n) ? val : n;
};
let _globalThis;
const getGlobalThis = () => {
    return (_globalThis ||
        (_globalThis =
            typeof globalThis !== 'undefined'
                ? globalThis
                : typeof self !== 'undefined'
                    ? self
                    : typeof window !== 'undefined'
                        ? window
                        : typeof global !== 'undefined'
                            ? global
                            : {}));
};

exports.EMPTY_ARR = EMPTY_ARR;
exports.EMPTY_OBJ = EMPTY_OBJ;
exports.NO = NO;
exports.NOOP = NOOP;
exports.PatchFlagNames = PatchFlagNames;
exports.camelize = camelize;
exports.capitalize = capitalize;
exports.def = def;
exports.escapeHtml = escapeHtml;
exports.escapeHtmlComment = escapeHtmlComment;
exports.extend = extend;
exports.generateCodeFrame = generateCodeFrame;
exports.getGlobalThis = getGlobalThis;
exports.hasChanged = hasChanged;
exports.hasOwn = hasOwn;
exports.hyphenate = hyphenate;
exports.includeBooleanAttr = includeBooleanAttr;
exports.invokeArrayFns = invokeArrayFns;
exports.isArray = isArray;
exports.isBooleanAttr = isBooleanAttr;
exports.isBuiltInDirective = isBuiltInDirective;
exports.isDate = isDate;
exports.isFunction = isFunction;
exports.isGloballyWhitelisted = isGloballyWhitelisted;
exports.isHTMLTag = isHTMLTag;
exports.isIntegerKey = isIntegerKey;
exports.isKnownHtmlAttr = isKnownHtmlAttr;
exports.isKnownSvgAttr = isKnownSvgAttr;
exports.isMap = isMap;
exports.isModelListener = isModelListener;
exports.isNoUnitNumericStyleProp = isNoUnitNumericStyleProp;
exports.isObject = isObject;
exports.isOn = isOn;
exports.isPlainObject = isPlainObject;
exports.isPromise = isPromise;
exports.isReservedProp = isReservedProp;
exports.isSSRSafeAttrName = isSSRSafeAttrName;
exports.isSVGTag = isSVGTag;
exports.isSet = isSet;
exports.isSpecialBooleanAttr = isSpecialBooleanAttr;
exports.isString = isString;
exports.isSymbol = isSymbol;
exports.isVoidTag = isVoidTag;
exports.looseEqual = looseEqual;
exports.looseIndexOf = looseIndexOf;
exports.makeMap = makeMap;
exports.normalizeClass = normalizeClass;
exports.normalizeProps = normalizeProps;
exports.normalizeStyle = normalizeStyle;
exports.objectToString = objectToString;
exports.parseStringStyle = parseStringStyle;
exports.propsToAttrMap = propsToAttrMap;
exports.remove = remove;
exports.slotFlagsText = slotFlagsText;
exports.stringifyStyle = stringifyStyle;
exports.toDisplayString = toDisplayString;
exports.toHandlerKey = toHandlerKey;
exports.toNumber = toNumber;
exports.toRawType = toRawType;
exports.toTypeString = toTypeString;
/**
 * Make a map and return a function for checking if a key
 * is in that map.
 * IMPORTANT: all calls of this function must be prefixed with
 * \/\*#\_\_PURE\_\_\*\/
 * So that rollup can tree-shake them if necessary.
 */
function makeMap(str, expectsLowerCase) {
    const map = Object.create(null);
    const list = str.split(',');
    for (let i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];
}

/**
 * dev only flag -> name mapping
 */
const PatchFlagNames = {
    [1 /* TEXT */]: `TEXT`,
    [2 /* CLASS */]: `CLASS`,
    [4 /* STYLE */]: `STYLE`,
    [8 /* PROPS */]: `PROPS`,
    [16 /* FULL_PROPS */]: `FULL_PROPS`,
    [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,
    [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,
    [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,
    [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,
    [512 /* NEED_PATCH */]: `NEED_PATCH`,
    [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,
    [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,
    [-1 /* HOISTED */]: `HOISTED`,
    [-2 /* BAIL */]: `BAIL`
};

/**
 * Dev only
 */
const slotFlagsText = {
    [1 /* STABLE */]: 'STABLE',
    [2 /* DYNAMIC */]: 'DYNAMIC',
    [3 /* FORWARDED */]: 'FORWARDED'
};

const GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +
    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +
    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';
const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);

const range = 2;
function generateCodeFrame(source, start = 0, end = source.length) {
    // Split the content into individual lines but capture the newline sequence
    // that separated each line. This is important because the actual sequence is
    // needed to properly take into account the full line length for offset
    // comparison
    let lines = source.split(/(\r?\n)/);
    // Separate the lines and newline sequences into separate arrays for easier referencing
    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);
    lines = lines.filter((_, idx) => idx % 2 === 0);
    let count = 0;
    const res = [];
    for (let i = 0; i < lines.length; i++) {
        count +=
            lines[i].length +
                ((newlineSequences[i] && newlineSequences[i].length) || 0);
        if (count >= start) {
            for (let j = i - range; j <= i + range || end > count; j++) {
                if (j < 0 || j >= lines.length)
                    continue;
                const line = j + 1;
                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);
                const lineLength = lines[j].length;
                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;
                if (j === i) {
                    // push underline
                    const pad = start - (count - (lineLength + newLineSeqLength));
                    const length = Math.max(1, end > count ? lineLength - pad : end - start);
                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));
                }
                else if (j > i) {
                    if (end > count) {
                        const length = Math.max(Math.min(end - count, lineLength), 1);
                        res.push(`   |  ` + '^'.repeat(length));
                    }
                    count += lineLength + newLineSeqLength;
                }
            }
            break;
        }
    }
    return res.join('\n');
}

/**
 * On the client we only need to offer special cases for boolean attributes that
 * have different names from their corresponding dom properties:
 * - itemscope -> N/A
 * - allowfullscreen -> allowFullscreen
 * - formnovalidate -> formNoValidate
 * - ismap -> isMap
 * - nomodule -> noModule
 * - novalidate -> noValidate
 * - readonly -> readOnly
 */
const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);
/**
 * The full list is needed during SSR to produce the correct initial markup.
 */
const isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +
    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +
    `loop,open,required,reversed,scoped,seamless,` +
    `checked,muted,multiple,selected`);
/**
 * Boolean attributes should be included if the value is truthy or ''.
 * e.g. `<select multiple>` compiles to `{ multiple: '' }`
 */
function includeBooleanAttr(value) {
    return !!value || value === '';
}
const unsafeAttrCharRE = /[>/="'\u0009\u000a\u000c\u0020]/;
const attrValidationCache = {};
function isSSRSafeAttrName(name) {
    if (attrValidationCache.hasOwnProperty(name)) {
        return attrValidationCache[name];
    }
    const isUnsafe = unsafeAttrCharRE.test(name);
    if (isUnsafe) {
        console.error(`unsafe attribute name: ${name}`);
    }
    return (attrValidationCache[name] = !isUnsafe);
}
const propsToAttrMap = {
    acceptCharset: 'accept-charset',
    className: 'class',
    htmlFor: 'for',
    httpEquiv: 'http-equiv'
};
/**
 * CSS properties that accept plain numbers
 */
const isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +
    `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +
    `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +
    `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +
    `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +
    `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +
    // SVG
    `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +
    `stroke-miterlimit,stroke-opacity,stroke-width`);
/**
 * Known attributes, this is used for stringification of runtime static nodes
 * so that we don't stringify bindings that cannot be set from HTML.
 * Don't also forget to allow `data-*` and `aria-*`!
 * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes
 */
const isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +
    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +
    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +
    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +
    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +
    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +
    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +
    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +
    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +
    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +
    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +
    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +
    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +
    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +
    `value,width,wrap`);
/**
 * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute
 */
const isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +
    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +
    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +
    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +
    `color-interpolation-filters,color-profile,color-rendering,` +
    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +
    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +
    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +
    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +
    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +
    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +
    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +
    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +
    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +
    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +
    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +
    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +
    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +
    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +
    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +
    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +
    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +
    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +
    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +
    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +
    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +
    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +
    `strikethrough-position,strikethrough-thickness,string,stroke,` +
    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +
    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +
    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +
    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +
    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +
    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +
    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +
    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +
    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +
    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +
    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);

function normalizeStyle(value) {
    if (isArray(value)) {
        const res = {};
        for (let i = 0; i < value.length; i++) {
            const item = value[i];
            const normalized = isString(item)
                ? parseStringStyle(item)
                : normalizeStyle(item);
            if (normalized) {
                for (const key in normalized) {
                    res[key] = normalized[key];
                }
            }
        }
        return res;
    }
    else if (isString(value)) {
        return value;
    }
    else if (isObject(value)) {
        return value;
    }
}
const listDelimiterRE = /;(?![^(]*\))/g;
const propertyDelimiterRE = /:(.+)/;
function parseStringStyle(cssText) {
    const ret = {};
    cssText.split(listDelimiterRE).forEach(item => {
        if (item) {
            const tmp = item.split(propertyDelimiterRE);
            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return ret;
}
function stringifyStyle(styles) {
    let ret = '';
    if (!styles || isString(styles)) {
        return ret;
    }
    for (const key in styles) {
        const value = styles[key];
        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);
        if (isString(value) ||
            (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {
            // only render valid values
            ret += `${normalizedKey}:${value};`;
        }
    }
    return ret;
}
function normalizeClass(value) {
    let res = '';
    if (isString(value)) {
        res = value;
    }
    else if (isArray(value)) {
        for (let i = 0; i < value.length; i++) {
            const normalized = normalizeClass(value[i]);
            if (normalized) {
                res += normalized + ' ';
            }
        }
    }
    else if (isObject(value)) {
        for (const name in value) {
            if (value[name]) {
                res += name + ' ';
            }
        }
    }
    return res.trim();
}
function normalizeProps(props) {
    if (!props)
        return null;
    let { class: klass, style } = props;
    if (klass && !isString(klass)) {
        props.class = normalizeClass(klass);
    }
    if (style) {
        props.style = normalizeStyle(style);
    }
    return props;
}

// These tag configs are shared between compiler-dom and runtime-dom, so they
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
const HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +
    'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +
    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +
    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +
    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +
    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +
    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +
    'option,output,progress,select,textarea,details,dialog,menu,' +
    'summary,template,blockquote,iframe,tfoot';
// https://developer.mozilla.org/en-US/docs/Web/SVG/Element
const SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +
    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +
    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +
    'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +
    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +
    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +
    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +
    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +
    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +
    'text,textPath,title,tspan,unknown,use,view';
const VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';
/**
 * Compiler only.
 * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.
 */
const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);
/**
 * Compiler only.
 * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.
 */
const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);
/**
 * Compiler only.
 * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.
 */
const isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);

const escapeRE = /["'&<>]/;
function escapeHtml(string) {
    const str = '' + string;
    const match = escapeRE.exec(str);
    if (!match) {
        return str;
    }
    let html = '';
    let escaped;
    let index;
    let lastIndex = 0;
    for (index = match.index; index < str.length; index++) {
        switch (str.charCodeAt(index)) {
            case 34: // "
                escaped = '&quot;';
                break;
            case 38: // &
                escaped = '&amp;';
                break;
            case 39: // '
                escaped = '&#39;';
                break;
            case 60: // <
                escaped = '&lt;';
                break;
            case 62: // >
                escaped = '&gt;';
                break;
            default:
                continue;
        }
        if (lastIndex !== index) {
            html += str.slice(lastIndex, index);
        }
        lastIndex = index + 1;
        html += escaped;
    }
    return lastIndex !== index ? html + str.slice(lastIndex, index) : html;
}
// https://www.w3.org/TR/html52/syntax.html#comments
const commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;
function escapeHtmlComment(src) {
    return src.replace(commentStripRE, '');
}

function looseCompareArrays(a, b) {
    if (a.length !== b.length)
        return false;
    let equal = true;
    for (let i = 0; equal && i < a.length; i++) {
        equal = looseEqual(a[i], b[i]);
    }
    return equal;
}
function looseEqual(a, b) {
    if (a === b)
        return true;
    let aValidType = isDate(a);
    let bValidType = isDate(b);
    if (aValidType || bValidType) {
        return aValidType && bValidType ? a.getTime() === b.getTime() : false;
    }
    aValidType = isArray(a);
    bValidType = isArray(b);
    if (aValidType || bValidType) {
        return aValidType && bValidType ? looseCompareArrays(a, b) : false;
    }
    aValidType = isObject(a);
    bValidType = isObject(b);
    if (aValidType || bValidType) {
        /* istanbul ignore if: this if will probably never be called */
        if (!aValidType || !bValidType) {
            return false;
        }
        const aKeysCount = Object.keys(a).length;
        const bKeysCount = Object.keys(b).length;
        if (aKeysCount !== bKeysCount) {
            return false;
        }
        for (const key in a) {
            const aHasKey = a.hasOwnProperty(key);
            const bHasKey = b.hasOwnProperty(key);
            if ((aHasKey && !bHasKey) ||
                (!aHasKey && bHasKey) ||
                !looseEqual(a[key], b[key])) {
                return false;
            }
        }
    }
    return String(a) === String(b);
}
function looseIndexOf(arr, val) {
    return arr.findIndex(item => looseEqual(item, val));
}

/**
 * For converting {{ interpolation }} values to displayed strings.
 * @private
 */
const toDisplayString = (val) => {
    return isString(val)
        ? val
        : val == null
            ? ''
            : isArray(val) ||
                (isObject(val) &&
                    (val.toString === objectToString || !isFunction(val.toString)))
                ? JSON.stringify(val, replacer, 2)
                : String(val);
};
const replacer = (_key, val) => {
    // can't use isRef here since @vue/shared has no deps
    if (val && val.__v_isRef) {
        return replacer(_key, val.value);
    }
    else if (isMap(val)) {
        return {
            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {
                entries[`${key} =>`] = val;
                return entries;
            }, {})
        };
    }
    else if (isSet(val)) {
        return {
            [`Set(${val.size})`]: [...val.values()]
        };
    }
    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {
        return String(val);
    }
    return val;
};

const EMPTY_OBJ = (process.env.NODE_ENV !== 'production')
    ? Object.freeze({})
    : {};
const EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];
const NOOP = () => { };
/**
 * Always return false.
 */
const NO = () => false;
const onRE = /^on[^a-z]/;
const isOn = (key) => onRE.test(key);
const isModelListener = (key) => key.startsWith('onUpdate:');
const extend = Object.assign;
const remove = (arr, el) => {
    const i = arr.indexOf(el);
    if (i > -1) {
        arr.splice(i, 1);
    }
};
const hasOwnProperty = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty.call(val, key);
const isArray = Array.isArray;
const isMap = (val) => toTypeString(val) === '[object Map]';
const isSet = (val) => toTypeString(val) === '[object Set]';
const isDate = (val) => val instanceof Date;
const isFunction = (val) => typeof val === 'function';
const isString = (val) => typeof val === 'string';
const isSymbol = (val) => typeof val === 'symbol';
const isObject = (val) => val !== null && typeof val === 'object';
const isPromise = (val) => {
    return isObject(val) && isFunction(val.then) && isFunction(val.catch);
};
const objectToString = Object.prototype.toString;
const toTypeString = (value) => objectToString.call(value);
const toRawType = (value) => {
    // extract "RawType" from strings like "[object RawType]"
    return toTypeString(value).slice(8, -1);
};
const isPlainObject = (val) => toTypeString(val) === '[object Object]';
const isIntegerKey = (key) => isString(key) &&
    key !== 'NaN' &&
    key[0] !== '-' &&
    '' + parseInt(key, 10) === key;
const isReservedProp = /*#__PURE__*/ makeMap(
// the leading comma is intentional so empty string "" is also included
',key,ref,ref_for,ref_key,' +
    'onVnodeBeforeMount,onVnodeMounted,' +
    'onVnodeBeforeUpdate,onVnodeUpdated,' +
    'onVnodeBeforeUnmount,onVnodeUnmounted');
const isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');
const cacheStringFunction = (fn) => {
    const cache = Object.create(null);
    return ((str) => {
        const hit = cache[str];
        return hit || (cache[str] = fn(str));
    });
};
const camelizeRE = /-(\w)/g;
/**
 * @private
 */
const camelize = cacheStringFunction((str) => {
    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
});
const hyphenateRE = /\B([A-Z])/g;
/**
 * @private
 */
const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());
/**
 * @private
 */
const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));
/**
 * @private
 */
const toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);
// compare whether a value has changed, accounting for NaN.
const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
const invokeArrayFns = (fns, arg) => {
    for (let i = 0; i < fns.length; i++) {
        fns[i](arg);
    }
};
const def = (obj, key, value) => {
    Object.defineProperty(obj, key, {
        configurable: true,
        enumerable: false,
        value
    });
};
const toNumber = (val) => {
    const n = parseFloat(val);
    return isNaN(n) ? val : n;
};
let _globalThis;
const getGlobalThis = () => {
    return (_globalThis ||
        (_globalThis =
            typeof globalThis !== 'undefined'
                ? globalThis
                : typeof self !== 'undefined'
                    ? self
                    : typeof window !== 'undefined'
                        ? window
                        : typeof global !== 'undefined'
                            ? global
                            : {}));
};

export { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isNoUnitNumericStyleProp, isObject, isOn, isPlainObject, isPromise, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };
'use strict'

if (process.env.NODE_ENV === 'production') {
  module.exports = require('./dist/shared.cjs.prod.js')
} else {
  module.exports = require('./dist/shared.cjs.js')
}
The MIT License (MIT)

Copyright (c) 2018-present, Yuxi (Evan) You

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "@vue/shared",
  "version": "3.2.33",
  "description": "internal utils shared across @vue packages",
  "main": "index.js",
  "module": "dist/shared.esm-bundler.js",
  "types": "dist/shared.d.ts",
  "files": [
    "index.js",
    "dist"
  ],
  "sideEffects": false,
  "buildOptions": {
    "formats": [
      "esm-bundler",
      "cjs"
    ]
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/vuejs/core.git",
    "directory": "packages/shared"
  },
  "author": "Evan You",
  "license": "MIT",
  "homepage": "https://github.com/vuejs/core/tree/main/packages/shared#readme"
}1.3.7 / 2019-04-29
==================

  * deps: negotiator@0.6.2
    - Fix sorting charset, encoding, and language with extra parameters

1.3.6 / 2019-04-28
==================

  * deps: mime-types@~2.1.24
    - deps: mime-db@~1.40.0

1.3.5 / 2018-02-28
==================

  * deps: mime-types@~2.1.18
    - deps: mime-db@~1.33.0

1.3.4 / 2017-08-22
==================

  * deps: mime-types@~2.1.16
    - deps: mime-db@~1.29.0

1.3.3 / 2016-05-02
==================

  * deps: mime-types@~2.1.11
    - deps: mime-db@~1.23.0
  * deps: negotiator@0.6.1
    - perf: improve `Accept` parsing speed
    - perf: improve `Accept-Charset` parsing speed
    - perf: improve `Accept-Encoding` parsing speed
    - perf: improve `Accept-Language` parsing speed

1.3.2 / 2016-03-08
==================

  * deps: mime-types@~2.1.10
    - Fix extension of `application/dash+xml`
    - Update primary extension for `audio/mp4`
    - deps: mime-db@~1.22.0

1.3.1 / 2016-01-19
==================

  * deps: mime-types@~2.1.9
    - deps: mime-db@~1.21.0

1.3.0 / 2015-09-29
==================

  * deps: mime-types@~2.1.7
    - deps: mime-db@~1.19.0
  * deps: negotiator@0.6.0
    - Fix including type extensions in parameters in `Accept` parsing
    - Fix parsing `Accept` parameters with quoted equals
    - Fix parsing `Accept` parameters with quoted semicolons
    - Lazy-load modules from main entry point
    - perf: delay type concatenation until needed
    - perf: enable strict mode
    - perf: hoist regular expressions
    - perf: remove closures getting spec properties
    - perf: remove a closure from media type parsing
    - perf: remove property delete from media type parsing

1.2.13 / 2015-09-06
===================

  * deps: mime-types@~2.1.6
    - deps: mime-db@~1.18.0

1.2.12 / 2015-07-30
===================

  * deps: mime-types@~2.1.4
    - deps: mime-db@~1.16.0

1.2.11 / 2015-07-16
===================

  * deps: mime-types@~2.1.3
    - deps: mime-db@~1.15.0

1.2.10 / 2015-07-01
===================

  * deps: mime-types@~2.1.2
    - deps: mime-db@~1.14.0

1.2.9 / 2015-06-08
==================

  * deps: mime-types@~2.1.1
    - perf: fix deopt during mapping

1.2.8 / 2015-06-07
==================

  * deps: mime-types@~2.1.0
    - deps: mime-db@~1.13.0
  * perf: avoid argument reassignment & argument slice
  * perf: avoid negotiator recursive construction
  * perf: enable strict mode
  * perf: remove unnecessary bitwise operator

1.2.7 / 2015-05-10
==================

  * deps: negotiator@0.5.3
    - Fix media type parameter matching to be case-insensitive

1.2.6 / 2015-05-07
==================

  * deps: mime-types@~2.0.11
    - deps: mime-db@~1.9.1
  * deps: negotiator@0.5.2
    - Fix comparing media types with quoted values
    - Fix splitting media types with quoted commas

1.2.5 / 2015-03-13
==================

  * deps: mime-types@~2.0.10
    - deps: mime-db@~1.8.0

1.2.4 / 2015-02-14
==================

  * Support Node.js 0.6
  * deps: mime-types@~2.0.9
    - deps: mime-db@~1.7.0
  * deps: negotiator@0.5.1
    - Fix preference sorting to be stable for long acceptable lists

1.2.3 / 2015-01-31
==================

  * deps: mime-types@~2.0.8
    - deps: mime-db@~1.6.0

1.2.2 / 2014-12-30
==================

  * deps: mime-types@~2.0.7
    - deps: mime-db@~1.5.0

1.2.1 / 2014-12-30
==================

  * deps: mime-types@~2.0.5
    - deps: mime-db@~1.3.1

1.2.0 / 2014-12-19
==================

  * deps: negotiator@0.5.0
    - Fix list return order when large accepted list
    - Fix missing identity encoding when q=0 exists
    - Remove dynamic building of Negotiator class

1.1.4 / 2014-12-10
==================

  * deps: mime-types@~2.0.4
    - deps: mime-db@~1.3.0

1.1.3 / 2014-11-09
==================

  * deps: mime-types@~2.0.3
    - deps: mime-db@~1.2.0

1.1.2 / 2014-10-14
==================

  * deps: negotiator@0.4.9
    - Fix error when media type has invalid parameter

1.1.1 / 2014-09-28
==================

  * deps: mime-types@~2.0.2
    - deps: mime-db@~1.1.0
  * deps: negotiator@0.4.8
    - Fix all negotiations to be case-insensitive
    - Stable sort preferences of same quality according to client order

1.1.0 / 2014-09-02
==================

  * update `mime-types`

1.0.7 / 2014-07-04
==================

  * Fix wrong type returned from `type` when match after unknown extension

1.0.6 / 2014-06-24
==================

  * deps: negotiator@0.4.7

1.0.5 / 2014-06-20
==================

 * fix crash when unknown extension given

1.0.4 / 2014-06-19
==================

  * use `mime-types`

1.0.3 / 2014-06-11
==================

  * deps: negotiator@0.4.6
    - Order by specificity when quality is the same

1.0.2 / 2014-05-29
==================

  * Fix interpretation when header not in request
  * deps: pin negotiator@0.4.5

1.0.1 / 2014-01-18
==================

  * Identity encoding isn't always acceptable
  * deps: negotiator@~0.4.0

1.0.0 / 2013-12-27
==================

  * Genesis
/*!
 * accepts
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var Negotiator = require('negotiator')
var mime = require('mime-types')

/**
 * Module exports.
 * @public
 */

module.exports = Accepts

/**
 * Create a new Accepts object for the given req.
 *
 * @param {object} req
 * @public
 */

function Accepts (req) {
  if (!(this instanceof Accepts)) {
    return new Accepts(req)
  }

  this.headers = req.headers
  this.negotiator = new Negotiator(req)
}

/**
 * Check if the given `type(s)` is acceptable, returning
 * the best match when true, otherwise `undefined`, in which
 * case you should respond with 406 "Not Acceptable".
 *
 * The `type` value may be a single mime type string
 * such as "application/json", the extension name
 * such as "json" or an array `["json", "html", "text/plain"]`. When a list
 * or array is given the _best_ match, if any is returned.
 *
 * Examples:
 *
 *     // Accept: text/html
 *     this.types('html');
 *     // => "html"
 *
 *     // Accept: text/*, application/json
 *     this.types('html');
 *     // => "html"
 *     this.types('text/html');
 *     // => "text/html"
 *     this.types('json', 'text');
 *     // => "json"
 *     this.types('application/json');
 *     // => "application/json"
 *
 *     // Accept: text/*, application/json
 *     this.types('image/png');
 *     this.types('png');
 *     // => undefined
 *
 *     // Accept: text/*;q=.5, application/json
 *     this.types(['html', 'json']);
 *     this.types('html', 'json');
 *     // => "json"
 *
 * @param {String|Array} types...
 * @return {String|Array|Boolean}
 * @public
 */

Accepts.prototype.type =
Accepts.prototype.types = function (types_) {
  var types = types_

  // support flattened arguments
  if (types && !Array.isArray(types)) {
    types = new Array(arguments.length)
    for (var i = 0; i < types.length; i++) {
      types[i] = arguments[i]
    }
  }

  // no types, return all requested types
  if (!types || types.length === 0) {
    return this.negotiator.mediaTypes()
  }

  // no accept header, return first given type
  if (!this.headers.accept) {
    return types[0]
  }

  var mimes = types.map(extToMime)
  var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
  var first = accepts[0]

  return first
    ? types[mimes.indexOf(first)]
    : false
}

/**
 * Return accepted encodings or best fit based on `encodings`.
 *
 * Given `Accept-Encoding: gzip, deflate`
 * an array sorted by quality is returned:
 *
 *     ['gzip', 'deflate']
 *
 * @param {String|Array} encodings...
 * @return {String|Array}
 * @public
 */

Accepts.prototype.encoding =
Accepts.prototype.encodings = function (encodings_) {
  var encodings = encodings_

  // support flattened arguments
  if (encodings && !Array.isArray(encodings)) {
    encodings = new Array(arguments.length)
    for (var i = 0; i < encodings.length; i++) {
      encodings[i] = arguments[i]
    }
  }

  // no encodings, return all requested encodings
  if (!encodings || encodings.length === 0) {
    return this.negotiator.encodings()
  }

  return this.negotiator.encodings(encodings)[0] || false
}

/**
 * Return accepted charsets or best fit based on `charsets`.
 *
 * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
 * an array sorted by quality is returned:
 *
 *     ['utf-8', 'utf-7', 'iso-8859-1']
 *
 * @param {String|Array} charsets...
 * @return {String|Array}
 * @public
 */

Accepts.prototype.charset =
Accepts.prototype.charsets = function (charsets_) {
  var charsets = charsets_

  // support flattened arguments
  if (charsets && !Array.isArray(charsets)) {
    charsets = new Array(arguments.length)
    for (var i = 0; i < charsets.length; i++) {
      charsets[i] = arguments[i]
    }
  }

  // no charsets, return all requested charsets
  if (!charsets || charsets.length === 0) {
    return this.negotiator.charsets()
  }

  return this.negotiator.charsets(charsets)[0] || false
}

/**
 * Return accepted languages or best fit based on `langs`.
 *
 * Given `Accept-Language: en;q=0.8, es, pt`
 * an array sorted by quality is returned:
 *
 *     ['es', 'pt', 'en']
 *
 * @param {String|Array} langs...
 * @return {Array|String}
 * @public
 */

Accepts.prototype.lang =
Accepts.prototype.langs =
Accepts.prototype.language =
Accepts.prototype.languages = function (languages_) {
  var languages = languages_

  // support flattened arguments
  if (languages && !Array.isArray(languages)) {
    languages = new Array(arguments.length)
    for (var i = 0; i < languages.length; i++) {
      languages[i] = arguments[i]
    }
  }

  // no languages, return all requested languages
  if (!languages || languages.length === 0) {
    return this.negotiator.languages()
  }

  return this.negotiator.languages(languages)[0] || false
}

/**
 * Convert extnames to mime.
 *
 * @param {String} type
 * @return {String}
 * @private
 */

function extToMime (type) {
  return type.indexOf('/') === -1
    ? mime.lookup(type)
    : type
}

/**
 * Check if mime is valid.
 *
 * @param {String} type
 * @return {String}
 * @private
 */

function validMime (type) {
  return typeof type === 'string'
}
(The MIT License)

Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "accepts",
  "description": "Higher-level content negotiation",
  "version": "1.3.7",
  "license": "MIT",
  "repository": "jshttp/accepts",
  "dependencies": {
    "mime-types": "~2.1.24",
    "negotiator": "0.6.2"
  },
  "devDependencies": {
    "deep-equal": "1.0.1",
    "eslint": "5.16.0",
    "eslint-config-standard": "12.0.0",
    "eslint-plugin-import": "2.17.2",
    "eslint-plugin-markdown": "1.0.0",
    "eslint-plugin-node": "8.0.1",
    "eslint-plugin-promise": "4.1.1",
    "eslint-plugin-standard": "4.0.0",
    "mocha": "6.1.4",
    "nyc": "14.0.0"
  },
  "files": [
    "LICENSE",
    "HISTORY.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}'use strict';
module.exports = function () {
	return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "ansi-regex",
  "version": "2.1.1",
  "description": "Regular expression for matching ANSI escape codes",
  "license": "MIT",
  "repository": "chalk/ansi-regex",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "maintainers": [
    "Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
    "Joshua Appelman <jappelman@xebia.com> (jbnicolai.com)",
    "JD Ballard <i.am.qix@gmail.com> (github.com/qix-)"
  ],
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "0.17.0",
    "xo": "0.16.0"
  }
}module.exports = require('./register')().implementation
module.exports = require('./register')().Promise
Copyright (C) 2014-2016 Kevin Beaty

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
"use strict"
    // global key for user preferred registration
var REGISTRATION_KEY = '@@any-promise/REGISTRATION',
    // Prior registration (preferred or detected)
    registered = null

/**
 * Registers the given implementation.  An implementation must
 * be registered prior to any call to `require("any-promise")`,
 * typically on application load.
 *
 * If called with no arguments, will return registration in
 * following priority:
 *
 * For Node.js:
 *
 * 1. Previous registration
 * 2. global.Promise if node.js version >= 0.12
 * 3. Auto detected promise based on first sucessful require of
 *    known promise libraries. Note this is a last resort, as the
 *    loaded library is non-deterministic. node.js >= 0.12 will
 *    always use global.Promise over this priority list.
 * 4. Throws error.
 *
 * For Browser:
 *
 * 1. Previous registration
 * 2. window.Promise
 * 3. Throws error.
 *
 * Options:
 *
 * Promise: Desired Promise constructor
 * global: Boolean - Should the registration be cached in a global variable to
 * allow cross dependency/bundle registration?  (default true)
 */
module.exports = function(root, loadImplementation){
  return function register(implementation, opts){
    implementation = implementation || null
    opts = opts || {}
    // global registration unless explicitly  {global: false} in options (default true)
    var registerGlobal = opts.global !== false;

    // load any previous global registration
    if(registered === null && registerGlobal){
      registered = root[REGISTRATION_KEY] || null
    }

    if(registered !== null
        && implementation !== null
        && registered.implementation !== implementation){
      // Throw error if attempting to redefine implementation
      throw new Error('any-promise already defined as "'+registered.implementation+
        '".  You can only register an implementation before the first '+
        ' call to require("any-promise") and an implementation cannot be changed')
    }

    if(registered === null){
      // use provided implementation
      if(implementation !== null && typeof opts.Promise !== 'undefined'){
        registered = {
          Promise: opts.Promise,
          implementation: implementation
        }
      } else {
        // require implementation if implementation is specified but not provided
        registered = loadImplementation(implementation)
      }

      if(registerGlobal){
        // register preference globally in case multiple installations
        root[REGISTRATION_KEY] = registered
      }
    }

    return registered
  }
}
"use strict";
try {
  module.exports = require('./register')().Promise || null
} catch(e) {
  module.exports = null
}
{
  "name": "any-promise",
  "version": "1.3.0",
  "description": "Resolve any installed ES6 compatible promise",
  "main": "index.js",
  "typings": "index.d.ts",
  "browser": {
    "./register.js": "./register-shim.js"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/kevinbeaty/any-promise"
  },
  "author": "Kevin Beaty",
  "license": "MIT",
  "homepage": "http://github.com/kevinbeaty/any-promise",
  "dependencies": {},
  "devDependencies": {
    "ava": "^0.14.0",
    "bluebird": "^3.0.0",
    "es6-promise": "^3.0.0",
    "is-promise": "^2.0.0",
    "lie": "^3.0.0",
    "mocha": "^2.0.0",
    "native-promise-only": "^0.8.0",
    "phantomjs-prebuilt": "^2.0.0",
    "pinkie": "^2.0.0",
    "promise": "^7.0.0",
    "q": "^1.0.0",
    "rsvp": "^3.0.0",
    "vow": "^0.4.0",
    "when": "^3.0.0",
    "zuul": "^3.0.0"
  }
}"use strict";
module.exports = require('./loader')(window, loadImplementation)

/**
 * Browser specific loadImplementation.  Always uses `window.Promise`
 *
 * To register a custom implementation, must register with `Promise` option.
 */
function loadImplementation(){
  if(typeof window.Promise === 'undefined'){
    throw new Error("any-promise browser requires a polyfill or explicit registration"+
      " e.g: require('any-promise/register/bluebird')")
  }
  return {
    Promise: window.Promise,
    implementation: 'window.Promise'
  }
}
"use strict"
module.exports = require('./loader')(global, loadImplementation);

/**
 * Node.js version of loadImplementation.
 *
 * Requires the given implementation and returns the registration
 * containing {Promise, implementation}
 *
 * If implementation is undefined or global.Promise, loads it
 * Otherwise uses require
 */
function loadImplementation(implementation){
  var impl = null

  if(shouldPreferGlobalPromise(implementation)){
    // if no implementation or env specified use global.Promise
    impl = {
      Promise: global.Promise,
      implementation: 'global.Promise'
    }
  } else if(implementation){
    // if implementation specified, require it
    var lib = require(implementation)
    impl = {
      Promise: lib.Promise || lib,
      implementation: implementation
    }
  } else {
    // try to auto detect implementation. This is non-deterministic
    // and should prefer other branches, but this is our last chance
    // to load something without throwing error
    impl = tryAutoDetect()
  }

  if(impl === null){
    throw new Error('Cannot find any-promise implementation nor'+
      ' global.Promise. You must install polyfill or call'+
      ' require("any-promise/register") with your preferred'+
      ' implementation, e.g. require("any-promise/register/bluebird")'+
      ' on application load prior to any require("any-promise").')
  }

  return impl
}

/**
 * Determines if the global.Promise should be preferred if an implementation
 * has not been registered.
 */
function shouldPreferGlobalPromise(implementation){
  if(implementation){
    return implementation === 'global.Promise'
  } else if(typeof global.Promise !== 'undefined'){
    // Load global promise if implementation not specified
    // Versions < 0.11 did not have global Promise
    // Do not use for version < 0.12 as version 0.11 contained buggy versions
    var version = (/v(\d+)\.(\d+)\.(\d+)/).exec(process.version)
    return !(version && +version[1] == 0 && +version[2] < 12)
  }

  // do not have global.Promise or another implementation was specified
  return false
}

/**
 * Look for common libs as last resort there is no guarantee that
 * this will return a desired implementation or even be deterministic.
 * The priority is also nearly arbitrary. We are only doing this
 * for older versions of Node.js <0.12 that do not have a reasonable
 * global.Promise implementation and we the user has not registered
 * the preference. This preserves the behavior of any-promise <= 0.1
 * and may be deprecated or removed in the future
 */
function tryAutoDetect(){
  var libs = [
      "es6-promise",
      "promise",
      "native-promise-only",
      "bluebird",
      "rsvp",
      "when",
      "q",
      "pinkie",
      "lie",
      "vow"]
  var i = 0, len = libs.length
  for(; i < len; i++){
    try {
      return loadImplementation(libs[i])
    } catch(e){}
  }
  return null
}
'use strict';
require('../register')('bluebird', {Promise: require('bluebird')})
'use strict';
require('../register')('es6-promise', {Promise: require('es6-promise').Promise})
'use strict';
require('../register')('lie', {Promise: require('lie')})
'use strict';
require('../register')('native-promise-only', {Promise: require('native-promise-only')})
'use strict';
require('../register')('pinkie', {Promise: require('pinkie')})
'use strict';
require('../register')('promise', {Promise: require('promise')})
'use strict';
require('../register')('q', {Promise: require('q').Promise})
'use strict';
require('../register')('rsvp', {Promise: require('rsvp').Promise})
'use strict';
require('../register')('vow', {Promise: require('vow').Promise})
'use strict';
require('../register')('when', {Promise: require('when').Promise})
/* eslint no-console: "off" */

var asynckit = require('./')
  , async    = require('async')
  , assert   = require('assert')
  , expected = 0
  ;

var Benchmark = require('benchmark');
var suite = new Benchmark.Suite;

var source = [];
for (var z = 1; z < 100; z++)
{
  source.push(z);
  expected += z;
}

suite
// add tests

.add('async.map', function(deferred)
{
  var total = 0;

  async.map(source,
  function(i, cb)
  {
    setImmediate(function()
    {
      total += i;
      cb(null, total);
    });
  },
  function(err, result)
  {
    assert.ifError(err);
    assert.equal(result[result.length - 1], expected);
    deferred.resolve();
  });
}, {'defer': true})


.add('asynckit.parallel', function(deferred)
{
  var total = 0;

  asynckit.parallel(source,
  function(i, cb)
  {
    setImmediate(function()
    {
      total += i;
      cb(null, total);
    });
  },
  function(err, result)
  {
    assert.ifError(err);
    assert.equal(result[result.length - 1], expected);
    deferred.resolve();
  });
}, {'defer': true})


// add listeners
.on('cycle', function(ev)
{
  console.log(String(ev.target));
})
.on('complete', function()
{
  console.log('Fastest is ' + this.filter('fastest').map('name'));
})
// run async
.run({ 'async': true });
module.exports =
{
  parallel      : require('./parallel.js'),
  serial        : require('./serial.js'),
  serialOrdered : require('./serialOrdered.js')
};
// API
module.exports = abort;

/**
 * Aborts leftover active jobs
 *
 * @param {object} state - current state object
 */
function abort(state)
{
  Object.keys(state.jobs).forEach(clean.bind(state));

  // reset leftover jobs
  state.jobs = {};
}

/**
 * Cleans up leftover job by invoking abort function for the provided job id
 *
 * @this  state
 * @param {string|number} key - job id to abort
 */
function clean(key)
{
  if (typeof this.jobs[key] == 'function')
  {
    this.jobs[key]();
  }
}
var defer = require('./defer.js');

// API
module.exports = async;

/**
 * Runs provided callback asynchronously
 * even if callback itself is not
 *
 * @param   {function} callback - callback to invoke
 * @returns {function} - augmented callback
 */
function async(callback)
{
  var isAsync = false;

  // check if async happened
  defer(function() { isAsync = true; });

  return function async_callback(err, result)
  {
    if (isAsync)
    {
      callback(err, result);
    }
    else
    {
      defer(function nextTick_callback()
      {
        callback(err, result);
      });
    }
  };
}
module.exports = defer;

/**
 * Runs provided function on next iteration of the event loop
 *
 * @param {function} fn - function to run
 */
function defer(fn)
{
  var nextTick = typeof setImmediate == 'function'
    ? setImmediate
    : (
      typeof process == 'object' && typeof process.nextTick == 'function'
      ? process.nextTick
      : null
    );

  if (nextTick)
  {
    nextTick(fn);
  }
  else
  {
    setTimeout(fn, 0);
  }
}
var async = require('./async.js')
  , abort = require('./abort.js')
  ;

// API
module.exports = iterate;

/**
 * Iterates over each job object
 *
 * @param {array|object} list - array or object (named list) to iterate over
 * @param {function} iterator - iterator to run
 * @param {object} state - current job status
 * @param {function} callback - invoked when all elements processed
 */
function iterate(list, iterator, state, callback)
{
  // store current index
  var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;

  state.jobs[key] = runJob(iterator, key, list[key], function(error, output)
  {
    // don't repeat yourself
    // skip secondary callbacks
    if (!(key in state.jobs))
    {
      return;
    }

    // clean up jobs
    delete state.jobs[key];

    if (error)
    {
      // don't process rest of the results
      // stop still active jobs
      // and reset the list
      abort(state);
    }
    else
    {
      state.results[key] = output;
    }

    // return salvaged results
    callback(error, state.results);
  });
}

/**
 * Runs iterator over provided job element
 *
 * @param   {function} iterator - iterator to invoke
 * @param   {string|number} key - key/index of the element in the list of jobs
 * @param   {mixed} item - job description
 * @param   {function} callback - invoked after iterator is done with the job
 * @returns {function|mixed} - job abort function or something else
 */
function runJob(iterator, key, item, callback)
{
  var aborter;

  // allow shortcut if iterator expects only two arguments
  if (iterator.length == 2)
  {
    aborter = iterator(item, async(callback));
  }
  // otherwise go with full three arguments
  else
  {
    aborter = iterator(item, key, async(callback));
  }

  return aborter;
}
var streamify = require('./streamify.js')
  , defer     = require('./defer.js')
  ;

// API
module.exports = ReadableAsyncKit;

/**
 * Base constructor for all streams
 * used to hold properties/methods
 */
function ReadableAsyncKit()
{
  ReadableAsyncKit.super_.apply(this, arguments);

  // list of active jobs
  this.jobs = {};

  // add stream methods
  this.destroy = destroy;
  this._start  = _start;
  this._read   = _read;
}

/**
 * Destroys readable stream,
 * by aborting outstanding jobs
 *
 * @returns {void}
 */
function destroy()
{
  if (this.destroyed)
  {
    return;
  }

  this.destroyed = true;

  if (typeof this.terminator == 'function')
  {
    this.terminator();
  }
}

/**
 * Starts provided jobs in async manner
 *
 * @private
 */
function _start()
{
  // first argument â€“ runner function
  var runner = arguments[0]
    // take away first argument
    , args   = Array.prototype.slice.call(arguments, 1)
      // second argument - input data
    , input  = args[0]
      // last argument - result callback
    , endCb  = streamify.callback.call(this, args[args.length - 1])
    ;

  args[args.length - 1] = endCb;
  // third argument - iterator
  args[1] = streamify.iterator.call(this, args[1]);

  // allow time for proper setup
  defer(function()
  {
    if (!this.destroyed)
    {
      this.terminator = runner.apply(null, args);
    }
    else
    {
      endCb(null, Array.isArray(input) ? [] : {});
    }
  }.bind(this));
}


/**
 * Implement _read to comply with Readable streams
 * Doesn't really make sense for flowing object mode
 *
 * @private
 */
function _read()
{

}
var parallel = require('../parallel.js');

// API
module.exports = ReadableParallel;

/**
 * Streaming wrapper to `asynckit.parallel`
 *
 * @param   {array|object} list - array or object (named list) to iterate over
 * @param   {function} iterator - iterator to run
 * @param   {function} callback - invoked when all elements processed
 * @returns {stream.Readable#}
 */
function ReadableParallel(list, iterator, callback)
{
  if (!(this instanceof ReadableParallel))
  {
    return new ReadableParallel(list, iterator, callback);
  }

  // turn on object mode
  ReadableParallel.super_.call(this, {objectMode: true});

  this._start(parallel, list, iterator, callback);
}
var serialOrdered = require('../serialOrdered.js');

// API
module.exports = ReadableSerialOrdered;
// expose sort helpers
module.exports.ascending  = serialOrdered.ascending;
module.exports.descending = serialOrdered.descending;

/**
 * Streaming wrapper to `asynckit.serialOrdered`
 *
 * @param   {array|object} list - array or object (named list) to iterate over
 * @param   {function} iterator - iterator to run
 * @param   {function} sortMethod - custom sort function
 * @param   {function} callback - invoked when all elements processed
 * @returns {stream.Readable#}
 */
function ReadableSerialOrdered(list, iterator, sortMethod, callback)
{
  if (!(this instanceof ReadableSerialOrdered))
  {
    return new ReadableSerialOrdered(list, iterator, sortMethod, callback);
  }

  // turn on object mode
  ReadableSerialOrdered.super_.call(this, {objectMode: true});

  this._start(serialOrdered, list, iterator, sortMethod, callback);
}
var serial = require('../serial.js');

// API
module.exports = ReadableSerial;

/**
 * Streaming wrapper to `asynckit.serial`
 *
 * @param   {array|object} list - array or object (named list) to iterate over
 * @param   {function} iterator - iterator to run
 * @param   {function} callback - invoked when all elements processed
 * @returns {stream.Readable#}
 */
function ReadableSerial(list, iterator, callback)
{
  if (!(this instanceof ReadableSerial))
  {
    return new ReadableSerial(list, iterator, callback);
  }

  // turn on object mode
  ReadableSerial.super_.call(this, {objectMode: true});

  this._start(serial, list, iterator, callback);
}
// API
module.exports = state;

/**
 * Creates initial state object
 * for iteration over list
 *
 * @param   {array|object} list - list to iterate over
 * @param   {function|null} sortMethod - function to use for keys sort,
 *                                     or `null` to keep them as is
 * @returns {object} - initial state object
 */
function state(list, sortMethod)
{
  var isNamedList = !Array.isArray(list)
    , initState =
    {
      index    : 0,
      keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
      jobs     : {},
      results  : isNamedList ? {} : [],
      size     : isNamedList ? Object.keys(list).length : list.length
    }
    ;

  if (sortMethod)
  {
    // sort array keys based on it's values
    // sort object's keys just on own merit
    initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
    {
      return sortMethod(list[a], list[b]);
    });
  }

  return initState;
}
var async = require('./async.js');

// API
module.exports = {
  iterator: wrapIterator,
  callback: wrapCallback
};

/**
 * Wraps iterators with long signature
 *
 * @this    ReadableAsyncKit#
 * @param   {function} iterator - function to wrap
 * @returns {function} - wrapped function
 */
function wrapIterator(iterator)
{
  var stream = this;

  return function(item, key, cb)
  {
    var aborter
      , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key))
      ;

    stream.jobs[key] = wrappedCb;

    // it's either shortcut (item, cb)
    if (iterator.length == 2)
    {
      aborter = iterator(item, wrappedCb);
    }
    // or long format (item, key, cb)
    else
    {
      aborter = iterator(item, key, wrappedCb);
    }

    return aborter;
  };
}

/**
 * Wraps provided callback function
 * allowing to execute snitch function before
 * real callback
 *
 * @this    ReadableAsyncKit#
 * @param   {function} callback - function to wrap
 * @returns {function} - wrapped function
 */
function wrapCallback(callback)
{
  var stream = this;

  var wrapped = function(error, result)
  {
    return finisher.call(stream, error, result, callback);
  };

  return wrapped;
}

/**
 * Wraps provided iterator callback function
 * makes sure snitch only called once,
 * but passes secondary calls to the original callback
 *
 * @this    ReadableAsyncKit#
 * @param   {function} callback - callback to wrap
 * @param   {number|string} key - iteration key
 * @returns {function} wrapped callback
 */
function wrapIteratorCallback(callback, key)
{
  var stream = this;

  return function(error, output)
  {
    // don't repeat yourself
    if (!(key in stream.jobs))
    {
      callback(error, output);
      return;
    }

    // clean up jobs
    delete stream.jobs[key];

    return streamer.call(stream, error, {key: key, value: output}, callback);
  };
}

/**
 * Stream wrapper for iterator callback
 *
 * @this  ReadableAsyncKit#
 * @param {mixed} error - error response
 * @param {mixed} output - iterator output
 * @param {function} callback - callback that expects iterator results
 */
function streamer(error, output, callback)
{
  if (error && !this.error)
  {
    this.error = error;
    this.pause();
    this.emit('error', error);
    // send back value only, as expected
    callback(error, output && output.value);
    return;
  }

  // stream stuff
  this.push(output);

  // back to original track
  // send back value only, as expected
  callback(error, output && output.value);
}

/**
 * Stream wrapper for finishing callback
 *
 * @this  ReadableAsyncKit#
 * @param {mixed} error - error response
 * @param {mixed} output - iterator output
 * @param {function} callback - callback that expects final results
 */
function finisher(error, output, callback)
{
  // signal end of the stream
  // only for successfully finished streams
  if (!error)
  {
    this.push(null);
  }

  // back to original track
  callback(error, output);
}
var abort = require('./abort.js')
  , async = require('./async.js')
  ;

// API
module.exports = terminator;

/**
 * Terminates jobs in the attached state context
 *
 * @this  AsyncKitState#
 * @param {function} callback - final callback to invoke after termination
 */
function terminator(callback)
{
  if (!Object.keys(this.jobs).length)
  {
    return;
  }

  // fast forward iteration index
  this.index = this.size;

  // abort jobs
  abort(this);

  // send back results we have so far
  async(callback)(null, this.results);
}
The MIT License (MIT)

Copyright (c) 2016 Alex Indigo

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "asynckit",
  "version": "0.4.0",
  "description": "Minimal async jobs utility library, with streams support",
  "main": "index.js",
  "pre-commit": [
    "clean",
    "lint",
    "test",
    "browser",
    "report",
    "size"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/alexindigo/asynckit.git"
  },
  "author": "Alex Indigo <iam@alexindigo.com>",
  "license": "MIT",
  "homepage": "https://github.com/alexindigo/asynckit#readme",
  "devDependencies": {
    "browserify": "^13.0.0",
    "browserify-istanbul": "^2.0.0",
    "coveralls": "^2.11.9",
    "eslint": "^2.9.0",
    "istanbul": "^0.4.3",
    "obake": "^0.1.2",
    "phantomjs-prebuilt": "^2.1.7",
    "pre-commit": "^1.1.3",
    "reamde": "^1.1.0",
    "rimraf": "^2.5.2",
    "size-table": "^0.2.0",
    "tap-spec": "^4.1.1",
    "tape": "^4.5.1"
  },
  "dependencies": {}
}var iterate    = require('./lib/iterate.js')
  , initState  = require('./lib/state.js')
  , terminator = require('./lib/terminator.js')
  ;

// Public API
module.exports = parallel;

/**
 * Runs iterator over provided array elements in parallel
 *
 * @param   {array|object} list - array or object (named list) to iterate over
 * @param   {function} iterator - iterator to run
 * @param   {function} callback - invoked when all elements processed
 * @returns {function} - jobs terminator
 */
function parallel(list, iterator, callback)
{
  var state = initState(list);

  while (state.index < (state['keyedList'] || list).length)
  {
    iterate(list, iterator, state, function(error, result)
    {
      if (error)
      {
        callback(error, result);
        return;
      }

      // looks like it's the last one
      if (Object.keys(state.jobs).length === 0)
      {
        callback(null, state.results);
        return;
      }
    });

    state.index++;
  }

  return terminator.bind(state, callback);
}
var serialOrdered = require('./serialOrdered.js');

// Public API
module.exports = serial;

/**
 * Runs iterator over provided array elements in series
 *
 * @param   {array|object} list - array or object (named list) to iterate over
 * @param   {function} iterator - iterator to run
 * @param   {function} callback - invoked when all elements processed
 * @returns {function} - jobs terminator
 */
function serial(list, iterator, callback)
{
  return serialOrdered(list, iterator, null, callback);
}
var iterate    = require('./lib/iterate.js')
  , initState  = require('./lib/state.js')
  , terminator = require('./lib/terminator.js')
  ;

// Public API
module.exports = serialOrdered;
// sorting helpers
module.exports.ascending  = ascending;
module.exports.descending = descending;

/**
 * Runs iterator over provided sorted array elements in series
 *
 * @param   {array|object} list - array or object (named list) to iterate over
 * @param   {function} iterator - iterator to run
 * @param   {function} sortMethod - custom sort function
 * @param   {function} callback - invoked when all elements processed
 * @returns {function} - jobs terminator
 */
function serialOrdered(list, iterator, sortMethod, callback)
{
  var state = initState(list, sortMethod);

  iterate(list, iterator, state, function iteratorHandler(error, result)
  {
    if (error)
    {
      callback(error, result);
      return;
    }

    state.index++;

    // are we there yet?
    if (state.index < (state['keyedList'] || list).length)
    {
      iterate(list, iterator, state, iteratorHandler);
      return;
    }

    // done here
    callback(null, state.results);
  });

  return terminator.bind(state, callback);
}

/*
 * -- Sort methods
 */

/**
 * sort helper to sort array elements in ascending order
 *
 * @param   {mixed} a - an item to compare
 * @param   {mixed} b - an item to compare
 * @returns {number} - comparison result
 */
function ascending(a, b)
{
  return a < b ? -1 : a > b ? 1 : 0;
}

/**
 * sort helper to sort array elements in descending order
 *
 * @param   {mixed} a - an item to compare
 * @param   {mixed} b - an item to compare
 * @returns {number} - comparison result
 */
function descending(a, b)
{
  return -1 * ascending(a, b);
}
var inherits              = require('util').inherits
  , Readable              = require('stream').Readable
  , ReadableAsyncKit      = require('./lib/readable_asynckit.js')
  , ReadableParallel      = require('./lib/readable_parallel.js')
  , ReadableSerial        = require('./lib/readable_serial.js')
  , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js')
  ;

// API
module.exports =
{
  parallel      : ReadableParallel,
  serial        : ReadableSerial,
  serialOrdered : ReadableSerialOrdered, 
};

inherits(ReadableAsyncKit, Readable);

inherits(ReadableParallel, ReadableAsyncKit);
inherits(ReadableSerial, ReadableAsyncKit);
inherits(ReadableSerialOrdered, ReadableAsyncKit);
/* axios v0.27.2 | (c) 2022 by Matt Zabriskie */
(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else if(typeof exports === 'object')
		exports["axios"] = factory();
	else
		root["axios"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = "./index.js");
/******/ })
/************************************************************************/
/******/ ({

/***/ "./index.js":
/*!******************!*\
  !*** ./index.js ***!
  \******************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! ./lib/axios */ "./lib/axios.js");

/***/ }),

/***/ "./lib/adapters/xhr.js":
/*!*****************************!*\
  !*** ./lib/adapters/xhr.js ***!
  \*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
var settle = __webpack_require__(/*! ./../core/settle */ "./lib/core/settle.js");
var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./lib/helpers/cookies.js");
var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./lib/helpers/buildURL.js");
var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./lib/core/buildFullPath.js");
var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./lib/helpers/parseHeaders.js");
var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./lib/helpers/isURLSameOrigin.js");
var transitionalDefaults = __webpack_require__(/*! ../defaults/transitional */ "./lib/defaults/transitional.js");
var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js");
var CanceledError = __webpack_require__(/*! ../cancel/CanceledError */ "./lib/cancel/CanceledError.js");
var parseProtocol = __webpack_require__(/*! ../helpers/parseProtocol */ "./lib/helpers/parseProtocol.js");

module.exports = function xhrAdapter(config) {
  return new Promise(function dispatchXhrRequest(resolve, reject) {
    var requestData = config.data;
    var requestHeaders = config.headers;
    var responseType = config.responseType;
    var onCanceled;
    function done() {
      if (config.cancelToken) {
        config.cancelToken.unsubscribe(onCanceled);
      }

      if (config.signal) {
        config.signal.removeEventListener('abort', onCanceled);
      }
    }

    if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {
      delete requestHeaders['Content-Type']; // Let the browser set it
    }

    var request = new XMLHttpRequest();

    // HTTP basic authentication
    if (config.auth) {
      var username = config.auth.username || '';
      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
    }

    var fullPath = buildFullPath(config.baseURL, config.url);

    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);

    // Set the request timeout in MS
    request.timeout = config.timeout;

    function onloadend() {
      if (!request) {
        return;
      }
      // Prepare the response
      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?
        request.responseText : request.response;
      var response = {
        data: responseData,
        status: request.status,
        statusText: request.statusText,
        headers: responseHeaders,
        config: config,
        request: request
      };

      settle(function _resolve(value) {
        resolve(value);
        done();
      }, function _reject(err) {
        reject(err);
        done();
      }, response);

      // Clean up request
      request = null;
    }

    if ('onloadend' in request) {
      // Use onloadend if available
      request.onloadend = onloadend;
    } else {
      // Listen for ready state to emulate onloadend
      request.onreadystatechange = function handleLoad() {
        if (!request || request.readyState !== 4) {
          return;
        }

        // The request errored out and we didn't get a response, this will be
        // handled by onerror instead
        // With one exception: request that using file: protocol, most browsers
        // will return status as 0 even though it's a successful request
        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
          return;
        }
        // readystate handler is calling before onerror or ontimeout handlers,
        // so we should call onloadend on the next 'tick'
        setTimeout(onloadend);
      };
    }

    // Handle browser request cancellation (as opposed to a manual cancellation)
    request.onabort = function handleAbort() {
      if (!request) {
        return;
      }

      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));

      // Clean up request
      request = null;
    };

    // Handle low level network errors
    request.onerror = function handleError() {
      // Real errors are hidden from us by the browser
      // onerror should only fire if it's a network error
      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));

      // Clean up request
      request = null;
    };

    // Handle timeout
    request.ontimeout = function handleTimeout() {
      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
      var transitional = config.transitional || transitionalDefaults;
      if (config.timeoutErrorMessage) {
        timeoutErrorMessage = config.timeoutErrorMessage;
      }
      reject(new AxiosError(
        timeoutErrorMessage,
        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
        config,
        request));

      // Clean up request
      request = null;
    };

    // Add xsrf header
    // This is only done if running in a standard browser environment.
    // Specifically not if we're in a web worker, or react-native.
    if (utils.isStandardBrowserEnv()) {
      // Add xsrf header
      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
        cookies.read(config.xsrfCookieName) :
        undefined;

      if (xsrfValue) {
        requestHeaders[config.xsrfHeaderName] = xsrfValue;
      }
    }

    // Add headers to the request
    if ('setRequestHeader' in request) {
      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
          // Remove Content-Type if data is undefined
          delete requestHeaders[key];
        } else {
          // Otherwise add header to the request
          request.setRequestHeader(key, val);
        }
      });
    }

    // Add withCredentials to request if needed
    if (!utils.isUndefined(config.withCredentials)) {
      request.withCredentials = !!config.withCredentials;
    }

    // Add responseType to request if needed
    if (responseType && responseType !== 'json') {
      request.responseType = config.responseType;
    }

    // Handle progress if needed
    if (typeof config.onDownloadProgress === 'function') {
      request.addEventListener('progress', config.onDownloadProgress);
    }

    // Not all browsers support upload events
    if (typeof config.onUploadProgress === 'function' && request.upload) {
      request.upload.addEventListener('progress', config.onUploadProgress);
    }

    if (config.cancelToken || config.signal) {
      // Handle cancellation
      // eslint-disable-next-line func-names
      onCanceled = function(cancel) {
        if (!request) {
          return;
        }
        reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);
        request.abort();
        request = null;
      };

      config.cancelToken && config.cancelToken.subscribe(onCanceled);
      if (config.signal) {
        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
      }
    }

    if (!requestData) {
      requestData = null;
    }

    var protocol = parseProtocol(fullPath);

    if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {
      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));
      return;
    }


    // Send the request
    request.send(requestData);
  });
};


/***/ }),

/***/ "./lib/axios.js":
/*!**********************!*\
  !*** ./lib/axios.js ***!
  \**********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./utils */ "./lib/utils.js");
var bind = __webpack_require__(/*! ./helpers/bind */ "./lib/helpers/bind.js");
var Axios = __webpack_require__(/*! ./core/Axios */ "./lib/core/Axios.js");
var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./lib/core/mergeConfig.js");
var defaults = __webpack_require__(/*! ./defaults */ "./lib/defaults/index.js");

/**
 * Create an instance of Axios
 *
 * @param {Object} defaultConfig The default config for the instance
 * @return {Axios} A new instance of Axios
 */
function createInstance(defaultConfig) {
  var context = new Axios(defaultConfig);
  var instance = bind(Axios.prototype.request, context);

  // Copy axios.prototype to instance
  utils.extend(instance, Axios.prototype, context);

  // Copy context to instance
  utils.extend(instance, context);

  // Factory for creating new instances
  instance.create = function create(instanceConfig) {
    return createInstance(mergeConfig(defaultConfig, instanceConfig));
  };

  return instance;
}

// Create the default instance to be exported
var axios = createInstance(defaults);

// Expose Axios class to allow class inheritance
axios.Axios = Axios;

// Expose Cancel & CancelToken
axios.CanceledError = __webpack_require__(/*! ./cancel/CanceledError */ "./lib/cancel/CanceledError.js");
axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./lib/cancel/CancelToken.js");
axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./lib/cancel/isCancel.js");
axios.VERSION = __webpack_require__(/*! ./env/data */ "./lib/env/data.js").version;
axios.toFormData = __webpack_require__(/*! ./helpers/toFormData */ "./lib/helpers/toFormData.js");

// Expose AxiosError class
axios.AxiosError = __webpack_require__(/*! ../lib/core/AxiosError */ "./lib/core/AxiosError.js");

// alias for CanceledError for backward compatibility
axios.Cancel = axios.CanceledError;

// Expose all/spread
axios.all = function all(promises) {
  return Promise.all(promises);
};
axios.spread = __webpack_require__(/*! ./helpers/spread */ "./lib/helpers/spread.js");

// Expose isAxiosError
axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./lib/helpers/isAxiosError.js");

module.exports = axios;

// Allow use of default import syntax in TypeScript
module.exports.default = axios;


/***/ }),

/***/ "./lib/cancel/CancelToken.js":
/*!***********************************!*\
  !*** ./lib/cancel/CancelToken.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var CanceledError = __webpack_require__(/*! ./CanceledError */ "./lib/cancel/CanceledError.js");

/**
 * A `CancelToken` is an object that can be used to request cancellation of an operation.
 *
 * @class
 * @param {Function} executor The executor function.
 */
function CancelToken(executor) {
  if (typeof executor !== 'function') {
    throw new TypeError('executor must be a function.');
  }

  var resolvePromise;

  this.promise = new Promise(function promiseExecutor(resolve) {
    resolvePromise = resolve;
  });

  var token = this;

  // eslint-disable-next-line func-names
  this.promise.then(function(cancel) {
    if (!token._listeners) return;

    var i;
    var l = token._listeners.length;

    for (i = 0; i < l; i++) {
      token._listeners[i](cancel);
    }
    token._listeners = null;
  });

  // eslint-disable-next-line func-names
  this.promise.then = function(onfulfilled) {
    var _resolve;
    // eslint-disable-next-line func-names
    var promise = new Promise(function(resolve) {
      token.subscribe(resolve);
      _resolve = resolve;
    }).then(onfulfilled);

    promise.cancel = function reject() {
      token.unsubscribe(_resolve);
    };

    return promise;
  };

  executor(function cancel(message) {
    if (token.reason) {
      // Cancellation has already been requested
      return;
    }

    token.reason = new CanceledError(message);
    resolvePromise(token.reason);
  });
}

/**
 * Throws a `CanceledError` if cancellation has been requested.
 */
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
  if (this.reason) {
    throw this.reason;
  }
};

/**
 * Subscribe to the cancel signal
 */

CancelToken.prototype.subscribe = function subscribe(listener) {
  if (this.reason) {
    listener(this.reason);
    return;
  }

  if (this._listeners) {
    this._listeners.push(listener);
  } else {
    this._listeners = [listener];
  }
};

/**
 * Unsubscribe from the cancel signal
 */

CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
  if (!this._listeners) {
    return;
  }
  var index = this._listeners.indexOf(listener);
  if (index !== -1) {
    this._listeners.splice(index, 1);
  }
};

/**
 * Returns an object that contains a new `CancelToken` and a function that, when called,
 * cancels the `CancelToken`.
 */
CancelToken.source = function source() {
  var cancel;
  var token = new CancelToken(function executor(c) {
    cancel = c;
  });
  return {
    token: token,
    cancel: cancel
  };
};

module.exports = CancelToken;


/***/ }),

/***/ "./lib/cancel/CanceledError.js":
/*!*************************************!*\
  !*** ./lib/cancel/CanceledError.js ***!
  \*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js");
var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");

/**
 * A `CanceledError` is an object that is thrown when an operation is canceled.
 *
 * @class
 * @param {string=} message The message.
 */
function CanceledError(message) {
  // eslint-disable-next-line no-eq-null,eqeqeq
  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);
  this.name = 'CanceledError';
}

utils.inherits(CanceledError, AxiosError, {
  __CANCEL__: true
});

module.exports = CanceledError;


/***/ }),

/***/ "./lib/cancel/isCancel.js":
/*!********************************!*\
  !*** ./lib/cancel/isCancel.js ***!
  \********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function isCancel(value) {
  return !!(value && value.__CANCEL__);
};


/***/ }),

/***/ "./lib/core/Axios.js":
/*!***************************!*\
  !*** ./lib/core/Axios.js ***!
  \***************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./lib/helpers/buildURL.js");
var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./lib/core/InterceptorManager.js");
var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./lib/core/dispatchRequest.js");
var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./lib/core/mergeConfig.js");
var buildFullPath = __webpack_require__(/*! ./buildFullPath */ "./lib/core/buildFullPath.js");
var validator = __webpack_require__(/*! ../helpers/validator */ "./lib/helpers/validator.js");

var validators = validator.validators;
/**
 * Create a new instance of Axios
 *
 * @param {Object} instanceConfig The default config for the instance
 */
function Axios(instanceConfig) {
  this.defaults = instanceConfig;
  this.interceptors = {
    request: new InterceptorManager(),
    response: new InterceptorManager()
  };
}

/**
 * Dispatch a request
 *
 * @param {Object} config The config specific for this request (merged with this.defaults)
 */
Axios.prototype.request = function request(configOrUrl, config) {
  /*eslint no-param-reassign:0*/
  // Allow for axios('example/url'[, config]) a la fetch API
  if (typeof configOrUrl === 'string') {
    config = config || {};
    config.url = configOrUrl;
  } else {
    config = configOrUrl || {};
  }

  config = mergeConfig(this.defaults, config);

  // Set config.method
  if (config.method) {
    config.method = config.method.toLowerCase();
  } else if (this.defaults.method) {
    config.method = this.defaults.method.toLowerCase();
  } else {
    config.method = 'get';
  }

  var transitional = config.transitional;

  if (transitional !== undefined) {
    validator.assertOptions(transitional, {
      silentJSONParsing: validators.transitional(validators.boolean),
      forcedJSONParsing: validators.transitional(validators.boolean),
      clarifyTimeoutError: validators.transitional(validators.boolean)
    }, false);
  }

  // filter out skipped interceptors
  var requestInterceptorChain = [];
  var synchronousRequestInterceptors = true;
  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
      return;
    }

    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;

    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
  });

  var responseInterceptorChain = [];
  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
  });

  var promise;

  if (!synchronousRequestInterceptors) {
    var chain = [dispatchRequest, undefined];

    Array.prototype.unshift.apply(chain, requestInterceptorChain);
    chain = chain.concat(responseInterceptorChain);

    promise = Promise.resolve(config);
    while (chain.length) {
      promise = promise.then(chain.shift(), chain.shift());
    }

    return promise;
  }


  var newConfig = config;
  while (requestInterceptorChain.length) {
    var onFulfilled = requestInterceptorChain.shift();
    var onRejected = requestInterceptorChain.shift();
    try {
      newConfig = onFulfilled(newConfig);
    } catch (error) {
      onRejected(error);
      break;
    }
  }

  try {
    promise = dispatchRequest(newConfig);
  } catch (error) {
    return Promise.reject(error);
  }

  while (responseInterceptorChain.length) {
    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
  }

  return promise;
};

Axios.prototype.getUri = function getUri(config) {
  config = mergeConfig(this.defaults, config);
  var fullPath = buildFullPath(config.baseURL, config.url);
  return buildURL(fullPath, config.params, config.paramsSerializer);
};

// Provide aliases for supported request methods
utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
  /*eslint func-names:0*/
  Axios.prototype[method] = function(url, config) {
    return this.request(mergeConfig(config || {}, {
      method: method,
      url: url,
      data: (config || {}).data
    }));
  };
});

utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
  /*eslint func-names:0*/

  function generateHTTPMethod(isForm) {
    return function httpMethod(url, data, config) {
      return this.request(mergeConfig(config || {}, {
        method: method,
        headers: isForm ? {
          'Content-Type': 'multipart/form-data'
        } : {},
        url: url,
        data: data
      }));
    };
  }

  Axios.prototype[method] = generateHTTPMethod();

  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
});

module.exports = Axios;


/***/ }),

/***/ "./lib/core/AxiosError.js":
/*!********************************!*\
  !*** ./lib/core/AxiosError.js ***!
  \********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");

/**
 * Create an Error with the specified message, config, error code, request and response.
 *
 * @param {string} message The error message.
 * @param {string} [code] The error code (for example, 'ECONNABORTED').
 * @param {Object} [config] The config.
 * @param {Object} [request] The request.
 * @param {Object} [response] The response.
 * @returns {Error} The created error.
 */
function AxiosError(message, code, config, request, response) {
  Error.call(this);
  this.message = message;
  this.name = 'AxiosError';
  code && (this.code = code);
  config && (this.config = config);
  request && (this.request = request);
  response && (this.response = response);
}

utils.inherits(AxiosError, Error, {
  toJSON: function toJSON() {
    return {
      // Standard
      message: this.message,
      name: this.name,
      // Microsoft
      description: this.description,
      number: this.number,
      // Mozilla
      fileName: this.fileName,
      lineNumber: this.lineNumber,
      columnNumber: this.columnNumber,
      stack: this.stack,
      // Axios
      config: this.config,
      code: this.code,
      status: this.response && this.response.status ? this.response.status : null
    };
  }
});

var prototype = AxiosError.prototype;
var descriptors = {};

[
  'ERR_BAD_OPTION_VALUE',
  'ERR_BAD_OPTION',
  'ECONNABORTED',
  'ETIMEDOUT',
  'ERR_NETWORK',
  'ERR_FR_TOO_MANY_REDIRECTS',
  'ERR_DEPRECATED',
  'ERR_BAD_RESPONSE',
  'ERR_BAD_REQUEST',
  'ERR_CANCELED'
// eslint-disable-next-line func-names
].forEach(function(code) {
  descriptors[code] = {value: code};
});

Object.defineProperties(AxiosError, descriptors);
Object.defineProperty(prototype, 'isAxiosError', {value: true});

// eslint-disable-next-line func-names
AxiosError.from = function(error, code, config, request, response, customProps) {
  var axiosError = Object.create(prototype);

  utils.toFlatObject(error, axiosError, function filter(obj) {
    return obj !== Error.prototype;
  });

  AxiosError.call(axiosError, error.message, code, config, request, response);

  axiosError.name = error.name;

  customProps && Object.assign(axiosError, customProps);

  return axiosError;
};

module.exports = AxiosError;


/***/ }),

/***/ "./lib/core/InterceptorManager.js":
/*!****************************************!*\
  !*** ./lib/core/InterceptorManager.js ***!
  \****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");

function InterceptorManager() {
  this.handlers = [];
}

/**
 * Add a new interceptor to the stack
 *
 * @param {Function} fulfilled The function to handle `then` for a `Promise`
 * @param {Function} rejected The function to handle `reject` for a `Promise`
 *
 * @return {Number} An ID used to remove interceptor later
 */
InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
  this.handlers.push({
    fulfilled: fulfilled,
    rejected: rejected,
    synchronous: options ? options.synchronous : false,
    runWhen: options ? options.runWhen : null
  });
  return this.handlers.length - 1;
};

/**
 * Remove an interceptor from the stack
 *
 * @param {Number} id The ID that was returned by `use`
 */
InterceptorManager.prototype.eject = function eject(id) {
  if (this.handlers[id]) {
    this.handlers[id] = null;
  }
};

/**
 * Iterate over all the registered interceptors
 *
 * This method is particularly useful for skipping over any
 * interceptors that may have become `null` calling `eject`.
 *
 * @param {Function} fn The function to call for each interceptor
 */
InterceptorManager.prototype.forEach = function forEach(fn) {
  utils.forEach(this.handlers, function forEachHandler(h) {
    if (h !== null) {
      fn(h);
    }
  });
};

module.exports = InterceptorManager;


/***/ }),

/***/ "./lib/core/buildFullPath.js":
/*!***********************************!*\
  !*** ./lib/core/buildFullPath.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./lib/helpers/isAbsoluteURL.js");
var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./lib/helpers/combineURLs.js");

/**
 * Creates a new URL by combining the baseURL with the requestedURL,
 * only when the requestedURL is not already an absolute URL.
 * If the requestURL is absolute, this function returns the requestedURL untouched.
 *
 * @param {string} baseURL The base URL
 * @param {string} requestedURL Absolute or relative URL to combine
 * @returns {string} The combined full path
 */
module.exports = function buildFullPath(baseURL, requestedURL) {
  if (baseURL && !isAbsoluteURL(requestedURL)) {
    return combineURLs(baseURL, requestedURL);
  }
  return requestedURL;
};


/***/ }),

/***/ "./lib/core/dispatchRequest.js":
/*!*************************************!*\
  !*** ./lib/core/dispatchRequest.js ***!
  \*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
var transformData = __webpack_require__(/*! ./transformData */ "./lib/core/transformData.js");
var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./lib/cancel/isCancel.js");
var defaults = __webpack_require__(/*! ../defaults */ "./lib/defaults/index.js");
var CanceledError = __webpack_require__(/*! ../cancel/CanceledError */ "./lib/cancel/CanceledError.js");

/**
 * Throws a `CanceledError` if cancellation has been requested.
 */
function throwIfCancellationRequested(config) {
  if (config.cancelToken) {
    config.cancelToken.throwIfRequested();
  }

  if (config.signal && config.signal.aborted) {
    throw new CanceledError();
  }
}

/**
 * Dispatch a request to the server using the configured adapter.
 *
 * @param {object} config The config that is to be used for the request
 * @returns {Promise} The Promise to be fulfilled
 */
module.exports = function dispatchRequest(config) {
  throwIfCancellationRequested(config);

  // Ensure headers exist
  config.headers = config.headers || {};

  // Transform request data
  config.data = transformData.call(
    config,
    config.data,
    config.headers,
    config.transformRequest
  );

  // Flatten headers
  config.headers = utils.merge(
    config.headers.common || {},
    config.headers[config.method] || {},
    config.headers
  );

  utils.forEach(
    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
    function cleanHeaderConfig(method) {
      delete config.headers[method];
    }
  );

  var adapter = config.adapter || defaults.adapter;

  return adapter(config).then(function onAdapterResolution(response) {
    throwIfCancellationRequested(config);

    // Transform response data
    response.data = transformData.call(
      config,
      response.data,
      response.headers,
      config.transformResponse
    );

    return response;
  }, function onAdapterRejection(reason) {
    if (!isCancel(reason)) {
      throwIfCancellationRequested(config);

      // Transform response data
      if (reason && reason.response) {
        reason.response.data = transformData.call(
          config,
          reason.response.data,
          reason.response.headers,
          config.transformResponse
        );
      }
    }

    return Promise.reject(reason);
  });
};


/***/ }),

/***/ "./lib/core/mergeConfig.js":
/*!*********************************!*\
  !*** ./lib/core/mergeConfig.js ***!
  \*********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");

/**
 * Config-specific merge-function which creates a new config-object
 * by merging two configuration objects together.
 *
 * @param {Object} config1
 * @param {Object} config2
 * @returns {Object} New object resulting from merging config2 to config1
 */
module.exports = function mergeConfig(config1, config2) {
  // eslint-disable-next-line no-param-reassign
  config2 = config2 || {};
  var config = {};

  function getMergedValue(target, source) {
    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
      return utils.merge(target, source);
    } else if (utils.isPlainObject(source)) {
      return utils.merge({}, source);
    } else if (utils.isArray(source)) {
      return source.slice();
    }
    return source;
  }

  // eslint-disable-next-line consistent-return
  function mergeDeepProperties(prop) {
    if (!utils.isUndefined(config2[prop])) {
      return getMergedValue(config1[prop], config2[prop]);
    } else if (!utils.isUndefined(config1[prop])) {
      return getMergedValue(undefined, config1[prop]);
    }
  }

  // eslint-disable-next-line consistent-return
  function valueFromConfig2(prop) {
    if (!utils.isUndefined(config2[prop])) {
      return getMergedValue(undefined, config2[prop]);
    }
  }

  // eslint-disable-next-line consistent-return
  function defaultToConfig2(prop) {
    if (!utils.isUndefined(config2[prop])) {
      return getMergedValue(undefined, config2[prop]);
    } else if (!utils.isUndefined(config1[prop])) {
      return getMergedValue(undefined, config1[prop]);
    }
  }

  // eslint-disable-next-line consistent-return
  function mergeDirectKeys(prop) {
    if (prop in config2) {
      return getMergedValue(config1[prop], config2[prop]);
    } else if (prop in config1) {
      return getMergedValue(undefined, config1[prop]);
    }
  }

  var mergeMap = {
    'url': valueFromConfig2,
    'method': valueFromConfig2,
    'data': valueFromConfig2,
    'baseURL': defaultToConfig2,
    'transformRequest': defaultToConfig2,
    'transformResponse': defaultToConfig2,
    'paramsSerializer': defaultToConfig2,
    'timeout': defaultToConfig2,
    'timeoutMessage': defaultToConfig2,
    'withCredentials': defaultToConfig2,
    'adapter': defaultToConfig2,
    'responseType': defaultToConfig2,
    'xsrfCookieName': defaultToConfig2,
    'xsrfHeaderName': defaultToConfig2,
    'onUploadProgress': defaultToConfig2,
    'onDownloadProgress': defaultToConfig2,
    'decompress': defaultToConfig2,
    'maxContentLength': defaultToConfig2,
    'maxBodyLength': defaultToConfig2,
    'beforeRedirect': defaultToConfig2,
    'transport': defaultToConfig2,
    'httpAgent': defaultToConfig2,
    'httpsAgent': defaultToConfig2,
    'cancelToken': defaultToConfig2,
    'socketPath': defaultToConfig2,
    'responseEncoding': defaultToConfig2,
    'validateStatus': mergeDirectKeys
  };

  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
    var merge = mergeMap[prop] || mergeDeepProperties;
    var configValue = merge(prop);
    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
  });

  return config;
};


/***/ }),

/***/ "./lib/core/settle.js":
/*!****************************!*\
  !*** ./lib/core/settle.js ***!
  \****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var AxiosError = __webpack_require__(/*! ./AxiosError */ "./lib/core/AxiosError.js");

/**
 * Resolve or reject a Promise based on response status.
 *
 * @param {Function} resolve A function that resolves the promise.
 * @param {Function} reject A function that rejects the promise.
 * @param {object} response The response.
 */
module.exports = function settle(resolve, reject, response) {
  var validateStatus = response.config.validateStatus;
  if (!response.status || !validateStatus || validateStatus(response.status)) {
    resolve(response);
  } else {
    reject(new AxiosError(
      'Request failed with status code ' + response.status,
      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
      response.config,
      response.request,
      response
    ));
  }
};


/***/ }),

/***/ "./lib/core/transformData.js":
/*!***********************************!*\
  !*** ./lib/core/transformData.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");
var defaults = __webpack_require__(/*! ../defaults */ "./lib/defaults/index.js");

/**
 * Transform the data for a request or a response
 *
 * @param {Object|String} data The data to be transformed
 * @param {Array} headers The headers for the request or response
 * @param {Array|Function} fns A single function or Array of functions
 * @returns {*} The resulting transformed data
 */
module.exports = function transformData(data, headers, fns) {
  var context = this || defaults;
  /*eslint no-param-reassign:0*/
  utils.forEach(fns, function transform(fn) {
    data = fn.call(context, data, headers);
  });

  return data;
};


/***/ }),

/***/ "./lib/defaults/index.js":
/*!*******************************!*\
  !*** ./lib/defaults/index.js ***!
  \*******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");
var normalizeHeaderName = __webpack_require__(/*! ../helpers/normalizeHeaderName */ "./lib/helpers/normalizeHeaderName.js");
var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js");
var transitionalDefaults = __webpack_require__(/*! ./transitional */ "./lib/defaults/transitional.js");
var toFormData = __webpack_require__(/*! ../helpers/toFormData */ "./lib/helpers/toFormData.js");

var DEFAULT_CONTENT_TYPE = {
  'Content-Type': 'application/x-www-form-urlencoded'
};

function setContentTypeIfUnset(headers, value) {
  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
    headers['Content-Type'] = value;
  }
}

function getDefaultAdapter() {
  var adapter;
  if (typeof XMLHttpRequest !== 'undefined') {
    // For browsers use XHR adapter
    adapter = __webpack_require__(/*! ../adapters/xhr */ "./lib/adapters/xhr.js");
  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
    // For node use HTTP adapter
    adapter = __webpack_require__(/*! ../adapters/http */ "./lib/adapters/xhr.js");
  }
  return adapter;
}

function stringifySafely(rawValue, parser, encoder) {
  if (utils.isString(rawValue)) {
    try {
      (parser || JSON.parse)(rawValue);
      return utils.trim(rawValue);
    } catch (e) {
      if (e.name !== 'SyntaxError') {
        throw e;
      }
    }
  }

  return (encoder || JSON.stringify)(rawValue);
}

var defaults = {

  transitional: transitionalDefaults,

  adapter: getDefaultAdapter(),

  transformRequest: [function transformRequest(data, headers) {
    normalizeHeaderName(headers, 'Accept');
    normalizeHeaderName(headers, 'Content-Type');

    if (utils.isFormData(data) ||
      utils.isArrayBuffer(data) ||
      utils.isBuffer(data) ||
      utils.isStream(data) ||
      utils.isFile(data) ||
      utils.isBlob(data)
    ) {
      return data;
    }
    if (utils.isArrayBufferView(data)) {
      return data.buffer;
    }
    if (utils.isURLSearchParams(data)) {
      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
      return data.toString();
    }

    var isObjectPayload = utils.isObject(data);
    var contentType = headers && headers['Content-Type'];

    var isFileList;

    if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {
      var _FormData = this.env && this.env.FormData;
      return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());
    } else if (isObjectPayload || contentType === 'application/json') {
      setContentTypeIfUnset(headers, 'application/json');
      return stringifySafely(data);
    }

    return data;
  }],

  transformResponse: [function transformResponse(data) {
    var transitional = this.transitional || defaults.transitional;
    var silentJSONParsing = transitional && transitional.silentJSONParsing;
    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';

    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
      try {
        return JSON.parse(data);
      } catch (e) {
        if (strictJSONParsing) {
          if (e.name === 'SyntaxError') {
            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);
          }
          throw e;
        }
      }
    }

    return data;
  }],

  /**
   * A timeout in milliseconds to abort a request. If set to 0 (default) a
   * timeout is not created.
   */
  timeout: 0,

  xsrfCookieName: 'XSRF-TOKEN',
  xsrfHeaderName: 'X-XSRF-TOKEN',

  maxContentLength: -1,
  maxBodyLength: -1,

  env: {
    FormData: __webpack_require__(/*! ./env/FormData */ "./lib/helpers/null.js")
  },

  validateStatus: function validateStatus(status) {
    return status >= 200 && status < 300;
  },

  headers: {
    common: {
      'Accept': 'application/json, text/plain, */*'
    }
  }
};

utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
  defaults.headers[method] = {};
});

utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
});

module.exports = defaults;


/***/ }),

/***/ "./lib/defaults/transitional.js":
/*!**************************************!*\
  !*** ./lib/defaults/transitional.js ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = {
  silentJSONParsing: true,
  forcedJSONParsing: true,
  clarifyTimeoutError: false
};


/***/ }),

/***/ "./lib/env/data.js":
/*!*************************!*\
  !*** ./lib/env/data.js ***!
  \*************************/
/*! no static exports found */
/***/ (function(module, exports) {

module.exports = {
  "version": "0.27.2"
};

/***/ }),

/***/ "./lib/helpers/bind.js":
/*!*****************************!*\
  !*** ./lib/helpers/bind.js ***!
  \*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function bind(fn, thisArg) {
  return function wrap() {
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }
    return fn.apply(thisArg, args);
  };
};


/***/ }),

/***/ "./lib/helpers/buildURL.js":
/*!*********************************!*\
  !*** ./lib/helpers/buildURL.js ***!
  \*********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");

function encode(val) {
  return encodeURIComponent(val).
    replace(/%3A/gi, ':').
    replace(/%24/g, '$').
    replace(/%2C/gi, ',').
    replace(/%20/g, '+').
    replace(/%5B/gi, '[').
    replace(/%5D/gi, ']');
}

/**
 * Build a URL by appending params to the end
 *
 * @param {string} url The base of the url (e.g., http://www.google.com)
 * @param {object} [params] The params to be appended
 * @returns {string} The formatted url
 */
module.exports = function buildURL(url, params, paramsSerializer) {
  /*eslint no-param-reassign:0*/
  if (!params) {
    return url;
  }

  var serializedParams;
  if (paramsSerializer) {
    serializedParams = paramsSerializer(params);
  } else if (utils.isURLSearchParams(params)) {
    serializedParams = params.toString();
  } else {
    var parts = [];

    utils.forEach(params, function serialize(val, key) {
      if (val === null || typeof val === 'undefined') {
        return;
      }

      if (utils.isArray(val)) {
        key = key + '[]';
      } else {
        val = [val];
      }

      utils.forEach(val, function parseValue(v) {
        if (utils.isDate(v)) {
          v = v.toISOString();
        } else if (utils.isObject(v)) {
          v = JSON.stringify(v);
        }
        parts.push(encode(key) + '=' + encode(v));
      });
    });

    serializedParams = parts.join('&');
  }

  if (serializedParams) {
    var hashmarkIndex = url.indexOf('#');
    if (hashmarkIndex !== -1) {
      url = url.slice(0, hashmarkIndex);
    }

    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
  }

  return url;
};


/***/ }),

/***/ "./lib/helpers/combineURLs.js":
/*!************************************!*\
  !*** ./lib/helpers/combineURLs.js ***!
  \************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/**
 * Creates a new URL by combining the specified URLs
 *
 * @param {string} baseURL The base URL
 * @param {string} relativeURL The relative URL
 * @returns {string} The combined URL
 */
module.exports = function combineURLs(baseURL, relativeURL) {
  return relativeURL
    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
    : baseURL;
};


/***/ }),

/***/ "./lib/helpers/cookies.js":
/*!********************************!*\
  !*** ./lib/helpers/cookies.js ***!
  \********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");

module.exports = (
  utils.isStandardBrowserEnv() ?

  // Standard browser envs support document.cookie
    (function standardBrowserEnv() {
      return {
        write: function write(name, value, expires, path, domain, secure) {
          var cookie = [];
          cookie.push(name + '=' + encodeURIComponent(value));

          if (utils.isNumber(expires)) {
            cookie.push('expires=' + new Date(expires).toGMTString());
          }

          if (utils.isString(path)) {
            cookie.push('path=' + path);
          }

          if (utils.isString(domain)) {
            cookie.push('domain=' + domain);
          }

          if (secure === true) {
            cookie.push('secure');
          }

          document.cookie = cookie.join('; ');
        },

        read: function read(name) {
          var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
          return (match ? decodeURIComponent(match[3]) : null);
        },

        remove: function remove(name) {
          this.write(name, '', Date.now() - 86400000);
        }
      };
    })() :

  // Non standard browser env (web workers, react-native) lack needed support.
    (function nonStandardBrowserEnv() {
      return {
        write: function write() {},
        read: function read() { return null; },
        remove: function remove() {}
      };
    })()
);


/***/ }),

/***/ "./lib/helpers/isAbsoluteURL.js":
/*!**************************************!*\
  !*** ./lib/helpers/isAbsoluteURL.js ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/**
 * Determines whether the specified URL is absolute
 *
 * @param {string} url The URL to test
 * @returns {boolean} True if the specified URL is absolute, otherwise false
 */
module.exports = function isAbsoluteURL(url) {
  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
  // by any combination of letters, digits, plus, period, or hyphen.
  return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
};


/***/ }),

/***/ "./lib/helpers/isAxiosError.js":
/*!*************************************!*\
  !*** ./lib/helpers/isAxiosError.js ***!
  \*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");

/**
 * Determines whether the payload is an error thrown by Axios
 *
 * @param {*} payload The value to test
 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
 */
module.exports = function isAxiosError(payload) {
  return utils.isObject(payload) && (payload.isAxiosError === true);
};


/***/ }),

/***/ "./lib/helpers/isURLSameOrigin.js":
/*!****************************************!*\
  !*** ./lib/helpers/isURLSameOrigin.js ***!
  \****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");

module.exports = (
  utils.isStandardBrowserEnv() ?

  // Standard browser envs have full support of the APIs needed to test
  // whether the request URL is of the same origin as current location.
    (function standardBrowserEnv() {
      var msie = /(msie|trident)/i.test(navigator.userAgent);
      var urlParsingNode = document.createElement('a');
      var originURL;

      /**
    * Parse a URL to discover it's components
    *
    * @param {String} url The URL to be parsed
    * @returns {Object}
    */
      function resolveURL(url) {
        var href = url;

        if (msie) {
        // IE needs attribute set twice to normalize properties
          urlParsingNode.setAttribute('href', href);
          href = urlParsingNode.href;
        }

        urlParsingNode.setAttribute('href', href);

        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
        return {
          href: urlParsingNode.href,
          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
          host: urlParsingNode.host,
          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
          hostname: urlParsingNode.hostname,
          port: urlParsingNode.port,
          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
            urlParsingNode.pathname :
            '/' + urlParsingNode.pathname
        };
      }

      originURL = resolveURL(window.location.href);

      /**
    * Determine if a URL shares the same origin as the current location
    *
    * @param {String} requestURL The URL to test
    * @returns {boolean} True if URL shares the same origin, otherwise false
    */
      return function isURLSameOrigin(requestURL) {
        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
        return (parsed.protocol === originURL.protocol &&
            parsed.host === originURL.host);
      };
    })() :

  // Non standard browser envs (web workers, react-native) lack needed support.
    (function nonStandardBrowserEnv() {
      return function isURLSameOrigin() {
        return true;
      };
    })()
);


/***/ }),

/***/ "./lib/helpers/normalizeHeaderName.js":
/*!********************************************!*\
  !*** ./lib/helpers/normalizeHeaderName.js ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");

module.exports = function normalizeHeaderName(headers, normalizedName) {
  utils.forEach(headers, function processHeader(value, name) {
    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
      headers[normalizedName] = value;
      delete headers[name];
    }
  });
};


/***/ }),

/***/ "./lib/helpers/null.js":
/*!*****************************!*\
  !*** ./lib/helpers/null.js ***!
  \*****************************/
/*! no static exports found */
/***/ (function(module, exports) {

// eslint-disable-next-line strict
module.exports = null;


/***/ }),

/***/ "./lib/helpers/parseHeaders.js":
/*!*************************************!*\
  !*** ./lib/helpers/parseHeaders.js ***!
  \*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ./../utils */ "./lib/utils.js");

// Headers whose duplicates are ignored by node
// c.f. https://nodejs.org/api/http.html#http_message_headers
var ignoreDuplicateOf = [
  'age', 'authorization', 'content-length', 'content-type', 'etag',
  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
  'last-modified', 'location', 'max-forwards', 'proxy-authorization',
  'referer', 'retry-after', 'user-agent'
];

/**
 * Parse headers into an object
 *
 * ```
 * Date: Wed, 27 Aug 2014 08:58:49 GMT
 * Content-Type: application/json
 * Connection: keep-alive
 * Transfer-Encoding: chunked
 * ```
 *
 * @param {String} headers Headers needing to be parsed
 * @returns {Object} Headers parsed into an object
 */
module.exports = function parseHeaders(headers) {
  var parsed = {};
  var key;
  var val;
  var i;

  if (!headers) { return parsed; }

  utils.forEach(headers.split('\n'), function parser(line) {
    i = line.indexOf(':');
    key = utils.trim(line.substr(0, i)).toLowerCase();
    val = utils.trim(line.substr(i + 1));

    if (key) {
      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
        return;
      }
      if (key === 'set-cookie') {
        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
      } else {
        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
      }
    }
  });

  return parsed;
};


/***/ }),

/***/ "./lib/helpers/parseProtocol.js":
/*!**************************************!*\
  !*** ./lib/helpers/parseProtocol.js ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


module.exports = function parseProtocol(url) {
  var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
  return match && match[1] || '';
};


/***/ }),

/***/ "./lib/helpers/spread.js":
/*!*******************************!*\
  !*** ./lib/helpers/spread.js ***!
  \*******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/**
 * Syntactic sugar for invoking a function and expanding an array for arguments.
 *
 * Common use case would be to use `Function.prototype.apply`.
 *
 *  ```js
 *  function f(x, y, z) {}
 *  var args = [1, 2, 3];
 *  f.apply(null, args);
 *  ```
 *
 * With `spread` this example can be re-written.
 *
 *  ```js
 *  spread(function(x, y, z) {})([1, 2, 3]);
 *  ```
 *
 * @param {Function} callback
 * @returns {Function}
 */
module.exports = function spread(callback) {
  return function wrap(arr) {
    return callback.apply(null, arr);
  };
};


/***/ }),

/***/ "./lib/helpers/toFormData.js":
/*!***********************************!*\
  !*** ./lib/helpers/toFormData.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var utils = __webpack_require__(/*! ../utils */ "./lib/utils.js");

/**
 * Convert a data object to FormData
 * @param {Object} obj
 * @param {?Object} [formData]
 * @returns {Object}
 **/

function toFormData(obj, formData) {
  // eslint-disable-next-line no-param-reassign
  formData = formData || new FormData();

  var stack = [];

  function convertValue(value) {
    if (value === null) return '';

    if (utils.isDate(value)) {
      return value.toISOString();
    }

    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {
      return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
    }

    return value;
  }

  function build(data, parentKey) {
    if (utils.isPlainObject(data) || utils.isArray(data)) {
      if (stack.indexOf(data) !== -1) {
        throw Error('Circular reference detected in ' + parentKey);
      }

      stack.push(data);

      utils.forEach(data, function each(value, key) {
        if (utils.isUndefined(value)) return;
        var fullKey = parentKey ? parentKey + '.' + key : key;
        var arr;

        if (value && !parentKey && typeof value === 'object') {
          if (utils.endsWith(key, '{}')) {
            // eslint-disable-next-line no-param-reassign
            value = JSON.stringify(value);
          } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {
            // eslint-disable-next-line func-names
            arr.forEach(function(el) {
              !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));
            });
            return;
          }
        }

        build(value, fullKey);
      });

      stack.pop();
    } else {
      formData.append(parentKey, convertValue(data));
    }
  }

  build(obj);

  return formData;
}

module.exports = toFormData;


/***/ }),

/***/ "./lib/helpers/validator.js":
/*!**********************************!*\
  !*** ./lib/helpers/validator.js ***!
  \**********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var VERSION = __webpack_require__(/*! ../env/data */ "./lib/env/data.js").version;
var AxiosError = __webpack_require__(/*! ../core/AxiosError */ "./lib/core/AxiosError.js");

var validators = {};

// eslint-disable-next-line func-names
['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
  validators[type] = function validator(thing) {
    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
  };
});

var deprecatedWarnings = {};

/**
 * Transitional option validator
 * @param {function|boolean?} validator - set to false if the transitional option has been removed
 * @param {string?} version - deprecated version / removed since version
 * @param {string?} message - some message with additional info
 * @returns {function}
 */
validators.transitional = function transitional(validator, version, message) {
  function formatMessage(opt, desc) {
    return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
  }

  // eslint-disable-next-line func-names
  return function(value, opt, opts) {
    if (validator === false) {
      throw new AxiosError(
        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
        AxiosError.ERR_DEPRECATED
      );
    }

    if (version && !deprecatedWarnings[opt]) {
      deprecatedWarnings[opt] = true;
      // eslint-disable-next-line no-console
      console.warn(
        formatMessage(
          opt,
          ' has been deprecated since v' + version + ' and will be removed in the near future'
        )
      );
    }

    return validator ? validator(value, opt, opts) : true;
  };
};

/**
 * Assert object's properties type
 * @param {object} options
 * @param {object} schema
 * @param {boolean?} allowUnknown
 */

function assertOptions(options, schema, allowUnknown) {
  if (typeof options !== 'object') {
    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
  }
  var keys = Object.keys(options);
  var i = keys.length;
  while (i-- > 0) {
    var opt = keys[i];
    var validator = schema[opt];
    if (validator) {
      var value = options[opt];
      var result = value === undefined || validator(value, opt, options);
      if (result !== true) {
        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
      }
      continue;
    }
    if (allowUnknown !== true) {
      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
    }
  }
}

module.exports = {
  assertOptions: assertOptions,
  validators: validators
};


/***/ }),

/***/ "./lib/utils.js":
/*!**********************!*\
  !*** ./lib/utils.js ***!
  \**********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var bind = __webpack_require__(/*! ./helpers/bind */ "./lib/helpers/bind.js");

// utils is a library of generic helper functions non-specific to axios

var toString = Object.prototype.toString;

// eslint-disable-next-line func-names
var kindOf = (function(cache) {
  // eslint-disable-next-line func-names
  return function(thing) {
    var str = toString.call(thing);
    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
  };
})(Object.create(null));

function kindOfTest(type) {
  type = type.toLowerCase();
  return function isKindOf(thing) {
    return kindOf(thing) === type;
  };
}

/**
 * Determine if a value is an Array
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is an Array, otherwise false
 */
function isArray(val) {
  return Array.isArray(val);
}

/**
 * Determine if a value is undefined
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if the value is undefined, otherwise false
 */
function isUndefined(val) {
  return typeof val === 'undefined';
}

/**
 * Determine if a value is a Buffer
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Buffer, otherwise false
 */
function isBuffer(val) {
  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
}

/**
 * Determine if a value is an ArrayBuffer
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is an ArrayBuffer, otherwise false
 */
var isArrayBuffer = kindOfTest('ArrayBuffer');


/**
 * Determine if a value is a view on an ArrayBuffer
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
 */
function isArrayBufferView(val) {
  var result;
  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
    result = ArrayBuffer.isView(val);
  } else {
    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
  }
  return result;
}

/**
 * Determine if a value is a String
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a String, otherwise false
 */
function isString(val) {
  return typeof val === 'string';
}

/**
 * Determine if a value is a Number
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Number, otherwise false
 */
function isNumber(val) {
  return typeof val === 'number';
}

/**
 * Determine if a value is an Object
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is an Object, otherwise false
 */
function isObject(val) {
  return val !== null && typeof val === 'object';
}

/**
 * Determine if a value is a plain Object
 *
 * @param {Object} val The value to test
 * @return {boolean} True if value is a plain Object, otherwise false
 */
function isPlainObject(val) {
  if (kindOf(val) !== 'object') {
    return false;
  }

  var prototype = Object.getPrototypeOf(val);
  return prototype === null || prototype === Object.prototype;
}

/**
 * Determine if a value is a Date
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Date, otherwise false
 */
var isDate = kindOfTest('Date');

/**
 * Determine if a value is a File
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a File, otherwise false
 */
var isFile = kindOfTest('File');

/**
 * Determine if a value is a Blob
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Blob, otherwise false
 */
var isBlob = kindOfTest('Blob');

/**
 * Determine if a value is a FileList
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a File, otherwise false
 */
var isFileList = kindOfTest('FileList');

/**
 * Determine if a value is a Function
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Function, otherwise false
 */
function isFunction(val) {
  return toString.call(val) === '[object Function]';
}

/**
 * Determine if a value is a Stream
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Stream, otherwise false
 */
function isStream(val) {
  return isObject(val) && isFunction(val.pipe);
}

/**
 * Determine if a value is a FormData
 *
 * @param {Object} thing The value to test
 * @returns {boolean} True if value is an FormData, otherwise false
 */
function isFormData(thing) {
  var pattern = '[object FormData]';
  return thing && (
    (typeof FormData === 'function' && thing instanceof FormData) ||
    toString.call(thing) === pattern ||
    (isFunction(thing.toString) && thing.toString() === pattern)
  );
}

/**
 * Determine if a value is a URLSearchParams object
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
 */
var isURLSearchParams = kindOfTest('URLSearchParams');

/**
 * Trim excess whitespace off the beginning and end of a string
 *
 * @param {String} str The String to trim
 * @returns {String} The String freed of excess whitespace
 */
function trim(str) {
  return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
}

/**
 * Determine if we're running in a standard browser environment
 *
 * This allows axios to run in a web worker, and react-native.
 * Both environments support XMLHttpRequest, but not fully standard globals.
 *
 * web workers:
 *  typeof window -> undefined
 *  typeof document -> undefined
 *
 * react-native:
 *  navigator.product -> 'ReactNative'
 * nativescript
 *  navigator.product -> 'NativeScript' or 'NS'
 */
function isStandardBrowserEnv() {
  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
                                           navigator.product === 'NativeScript' ||
                                           navigator.product === 'NS')) {
    return false;
  }
  return (
    typeof window !== 'undefined' &&
    typeof document !== 'undefined'
  );
}

/**
 * Iterate over an Array or an Object invoking a function for each item.
 *
 * If `obj` is an Array callback will be called passing
 * the value, index, and complete array for each item.
 *
 * If 'obj' is an Object callback will be called passing
 * the value, key, and complete object for each property.
 *
 * @param {Object|Array} obj The object to iterate
 * @param {Function} fn The callback to invoke for each item
 */
function forEach(obj, fn) {
  // Don't bother if no value provided
  if (obj === null || typeof obj === 'undefined') {
    return;
  }

  // Force an array if not already something iterable
  if (typeof obj !== 'object') {
    /*eslint no-param-reassign:0*/
    obj = [obj];
  }

  if (isArray(obj)) {
    // Iterate over array values
    for (var i = 0, l = obj.length; i < l; i++) {
      fn.call(null, obj[i], i, obj);
    }
  } else {
    // Iterate over object keys
    for (var key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, key)) {
        fn.call(null, obj[key], key, obj);
      }
    }
  }
}

/**
 * Accepts varargs expecting each argument to be an object, then
 * immutably merges the properties of each object and returns result.
 *
 * When multiple objects contain the same key the later object in
 * the arguments list will take precedence.
 *
 * Example:
 *
 * ```js
 * var result = merge({foo: 123}, {foo: 456});
 * console.log(result.foo); // outputs 456
 * ```
 *
 * @param {Object} obj1 Object to merge
 * @returns {Object} Result of all merge properties
 */
function merge(/* obj1, obj2, obj3, ... */) {
  var result = {};
  function assignValue(val, key) {
    if (isPlainObject(result[key]) && isPlainObject(val)) {
      result[key] = merge(result[key], val);
    } else if (isPlainObject(val)) {
      result[key] = merge({}, val);
    } else if (isArray(val)) {
      result[key] = val.slice();
    } else {
      result[key] = val;
    }
  }

  for (var i = 0, l = arguments.length; i < l; i++) {
    forEach(arguments[i], assignValue);
  }
  return result;
}

/**
 * Extends object a by mutably adding to it the properties of object b.
 *
 * @param {Object} a The object to be extended
 * @param {Object} b The object to copy properties from
 * @param {Object} thisArg The object to bind function to
 * @return {Object} The resulting value of object a
 */
function extend(a, b, thisArg) {
  forEach(b, function assignValue(val, key) {
    if (thisArg && typeof val === 'function') {
      a[key] = bind(val, thisArg);
    } else {
      a[key] = val;
    }
  });
  return a;
}

/**
 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
 *
 * @param {string} content with BOM
 * @return {string} content value without BOM
 */
function stripBOM(content) {
  if (content.charCodeAt(0) === 0xFEFF) {
    content = content.slice(1);
  }
  return content;
}

/**
 * Inherit the prototype methods from one constructor into another
 * @param {function} constructor
 * @param {function} superConstructor
 * @param {object} [props]
 * @param {object} [descriptors]
 */

function inherits(constructor, superConstructor, props, descriptors) {
  constructor.prototype = Object.create(superConstructor.prototype, descriptors);
  constructor.prototype.constructor = constructor;
  props && Object.assign(constructor.prototype, props);
}

/**
 * Resolve object with deep prototype chain to a flat object
 * @param {Object} sourceObj source object
 * @param {Object} [destObj]
 * @param {Function} [filter]
 * @returns {Object}
 */

function toFlatObject(sourceObj, destObj, filter) {
  var props;
  var i;
  var prop;
  var merged = {};

  destObj = destObj || {};

  do {
    props = Object.getOwnPropertyNames(sourceObj);
    i = props.length;
    while (i-- > 0) {
      prop = props[i];
      if (!merged[prop]) {
        destObj[prop] = sourceObj[prop];
        merged[prop] = true;
      }
    }
    sourceObj = Object.getPrototypeOf(sourceObj);
  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);

  return destObj;
}

/*
 * determines whether a string ends with the characters of a specified string
 * @param {String} str
 * @param {String} searchString
 * @param {Number} [position= 0]
 * @returns {boolean}
 */
function endsWith(str, searchString, position) {
  str = String(str);
  if (position === undefined || position > str.length) {
    position = str.length;
  }
  position -= searchString.length;
  var lastIndex = str.indexOf(searchString, position);
  return lastIndex !== -1 && lastIndex === position;
}


/**
 * Returns new array from array like object
 * @param {*} [thing]
 * @returns {Array}
 */
function toArray(thing) {
  if (!thing) return null;
  var i = thing.length;
  if (isUndefined(i)) return null;
  var arr = new Array(i);
  while (i-- > 0) {
    arr[i] = thing[i];
  }
  return arr;
}

// eslint-disable-next-line func-names
var isTypedArray = (function(TypedArray) {
  // eslint-disable-next-line func-names
  return function(thing) {
    return TypedArray && thing instanceof TypedArray;
  };
})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));

module.exports = {
  isArray: isArray,
  isArrayBuffer: isArrayBuffer,
  isBuffer: isBuffer,
  isFormData: isFormData,
  isArrayBufferView: isArrayBufferView,
  isString: isString,
  isNumber: isNumber,
  isObject: isObject,
  isPlainObject: isPlainObject,
  isUndefined: isUndefined,
  isDate: isDate,
  isFile: isFile,
  isBlob: isBlob,
  isFunction: isFunction,
  isStream: isStream,
  isURLSearchParams: isURLSearchParams,
  isStandardBrowserEnv: isStandardBrowserEnv,
  forEach: forEach,
  merge: merge,
  extend: extend,
  trim: trim,
  stripBOM: stripBOM,
  inherits: inherits,
  toFlatObject: toFlatObject,
  kindOf: kindOf,
  kindOfTest: kindOfTest,
  endsWith: endsWith,
  toArray: toArray,
  isTypedArray: isTypedArray,
  isFileList: isFileList
};


/***/ })

/******/ });
});
//# sourceMappingURL=axios.map{"version":3,"sources":["webpack://axios/webpack/universalModuleDefinition","webpack://axios/webpack/bootstrap","webpack://axios/./index.js","webpack://axios/./lib/adapters/xhr.js","webpack://axios/./lib/axios.js","webpack://axios/./lib/cancel/CancelToken.js","webpack://axios/./lib/cancel/CanceledError.js","webpack://axios/./lib/cancel/isCancel.js","webpack://axios/./lib/core/Axios.js","webpack://axios/./lib/core/AxiosError.js","webpack://axios/./lib/core/InterceptorManager.js","webpack://axios/./lib/core/buildFullPath.js","webpack://axios/./lib/core/dispatchRequest.js","webpack://axios/./lib/core/mergeConfig.js","webpack://axios/./lib/core/settle.js","webpack://axios/./lib/core/transformData.js","webpack://axios/./lib/defaults/index.js","webpack://axios/./lib/defaults/transitional.js","webpack://axios/./lib/env/data.js","webpack://axios/./lib/helpers/bind.js","webpack://axios/./lib/helpers/buildURL.js","webpack://axios/./lib/helpers/combineURLs.js","webpack://axios/./lib/helpers/cookies.js","webpack://axios/./lib/helpers/isAbsoluteURL.js","webpack://axios/./lib/helpers/isAxiosError.js","webpack://axios/./lib/helpers/isURLSameOrigin.js","webpack://axios/./lib/helpers/normalizeHeaderName.js","webpack://axios/./lib/helpers/null.js","webpack://axios/./lib/helpers/parseHeaders.js","webpack://axios/./lib/helpers/parseProtocol.js","webpack://axios/./lib/helpers/spread.js","webpack://axios/./lib/helpers/toFormData.js","webpack://axios/./lib/helpers/validator.js","webpack://axios/./lib/utils.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;AClFA,iBAAiB,mBAAO,CAAC,mCAAa,E;;;;;;;;;;;;ACAzB;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,aAAa,mBAAO,CAAC,8CAAkB;AACvC,cAAc,mBAAO,CAAC,sDAAsB;AAC5C,eAAe,mBAAO,CAAC,wDAAuB;AAC9C,oBAAoB,mBAAO,CAAC,0DAAuB;AACnD,mBAAmB,mBAAO,CAAC,gEAA2B;AACtD,sBAAsB,mBAAO,CAAC,sEAA8B;AAC5D,2BAA2B,mBAAO,CAAC,gEAA0B;AAC7D,iBAAiB,mBAAO,CAAC,oDAAoB;AAC7C,oBAAoB,mBAAO,CAAC,8DAAyB;AACrD,oBAAoB,mBAAO,CAAC,gEAA0B;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;AC7Na;;AAEb,YAAY,mBAAO,CAAC,+BAAS;AAC7B,WAAW,mBAAO,CAAC,6CAAgB;AACnC,YAAY,mBAAO,CAAC,yCAAc;AAClC,kBAAkB,mBAAO,CAAC,qDAAoB;AAC9C,eAAe,mBAAO,CAAC,2CAAY;;AAEnC;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,mBAAO,CAAC,6DAAwB;AACtD,oBAAoB,mBAAO,CAAC,yDAAsB;AAClD,iBAAiB,mBAAO,CAAC,mDAAmB;AAC5C,gBAAgB,mBAAO,CAAC,qCAAY;AACpC,mBAAmB,mBAAO,CAAC,yDAAsB;;AAEjD;AACA,mBAAmB,mBAAO,CAAC,wDAAwB;;AAEnD;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,iDAAkB;;AAEzC;AACA,qBAAqB,mBAAO,CAAC,6DAAwB;;AAErD;;AAEA;AACA;;;;;;;;;;;;;AC/Da;;AAEb,oBAAoB,mBAAO,CAAC,sDAAiB;;AAE7C;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACtHa;;AAEb,iBAAiB,mBAAO,CAAC,oDAAoB;AAC7C,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;;ACrBa;;AAEb;AACA;AACA;;;;;;;;;;;;;ACJa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,eAAe,mBAAO,CAAC,sDAAqB;AAC5C,yBAAyB,mBAAO,CAAC,8DAAsB;AACvD,sBAAsB,mBAAO,CAAC,wDAAmB;AACjD,kBAAkB,mBAAO,CAAC,gDAAe;AACzC,oBAAoB,mBAAO,CAAC,oDAAiB;AAC7C,gBAAgB,mBAAO,CAAC,wDAAsB;;AAE9C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,SAAS,KAAK;AACd;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;;;AC/Ja;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,CAAC;;AAED;AACA,kDAAkD,YAAY;;AAE9D;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;;;;;;;ACrFa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;;;;;;;ACrDa;;AAEb,oBAAoB,mBAAO,CAAC,gEAA0B;AACtD,kBAAkB,mBAAO,CAAC,4DAAwB;;AAElD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnBa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,oBAAoB,mBAAO,CAAC,oDAAiB;AAC7C,eAAe,mBAAO,CAAC,oDAAoB;AAC3C,eAAe,mBAAO,CAAC,4CAAa;AACpC,oBAAoB,mBAAO,CAAC,8DAAyB;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B,uCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;;;ACtFa;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACnGa;;AAEb,iBAAiB,mBAAO,CAAC,8CAAc;;AAEvC;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxBa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;AAChC,eAAe,mBAAO,CAAC,4CAAa;;AAEpC;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACrBa;;AAEb,YAAY,mBAAO,CAAC,gCAAU;AAC9B,0BAA0B,mBAAO,CAAC,4EAAgC;AAClE,iBAAiB,mBAAO,CAAC,oDAAoB;AAC7C,2BAA2B,mBAAO,CAAC,sDAAgB;AACnD,iBAAiB,mBAAO,CAAC,0DAAuB;;AAEhD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,8CAAiB;AACvC,GAAG;AACH;AACA,cAAc,mBAAO,CAAC,+CAAkB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,sCAAsC,gBAAgB;AACtD,KAAK;AACL;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,mBAAO,CAAC,6CAAgB;AACtC,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;;ACjJa;;AAEb;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA,E;;;;;;;;;;;;ACFa;;AAEb;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACVa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACrEa;;AAEb;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACba;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0CAA0C;AAC1C,SAAS;;AAET;AACA,4DAA4D,wBAAwB;AACpF;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,kCAAkC;AAClC,+BAA+B,aAAa,EAAE;AAC9C;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;ACpDa;;AAEb;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACba;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;;;;;;;;;;;;ACZa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;ACnEa;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;ACXA;AACA;;;;;;;;;;;;;ACDa;;AAEb,YAAY,mBAAO,CAAC,kCAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACpDa;;AAEb;AACA,wBAAwB,KAAK;AAC7B;AACA;;;;;;;;;;;;;ACLa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1Ba;;AAEb,YAAY,mBAAO,CAAC,gCAAU;;AAE9B;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;;;;;;;;;;;;ACvEa;;AAEb,cAAc,mBAAO,CAAC,sCAAa;AACnC,iBAAiB,mBAAO,CAAC,oDAAoB;;AAE7C;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACrFa;;AAEb,WAAW,mBAAO,CAAC,6CAAgB;;AAEnC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;;AAGA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C,2BAA2B;AAC3B;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4BAA4B;AAC5B,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,WAAW,EAAE;AACb,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"axios.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./index.js\");\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n    var responseType = config.responseType;\n    var onCanceled;\n    function done() {\n      if (config.cancelToken) {\n        config.cancelToken.unsubscribe(onCanceled);\n      }\n\n      if (config.signal) {\n        config.signal.removeEventListener('abort', onCanceled);\n      }\n    }\n\n    if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    var fullPath = buildFullPath(config.baseURL, config.url);\n\n    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?\n        request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n      var transitional = config.transitional || transitionalDefaults;\n      if (config.timeoutErrorMessage) {\n        timeoutErrorMessage = config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(config.withCredentials)) {\n      request.withCredentials = !!config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = config.responseType;\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken || config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = function(cancel) {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n        request.abort();\n        request = null;\n      };\n\n      config.cancelToken && config.cancelToken.subscribe(onCanceled);\n      if (config.signal) {\n        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    if (!requestData) {\n      requestData = null;\n    }\n\n    var protocol = parseProtocol(fullPath);\n\n    if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n\n  // eslint-disable-next-line func-names\n  this.promise.then(function(cancel) {\n    if (!token._listeners) return;\n\n    var i;\n    var l = token._listeners.length;\n\n    for (i = 0; i < l; i++) {\n      token._listeners[i](cancel);\n    }\n    token._listeners = null;\n  });\n\n  // eslint-disable-next-line func-names\n  this.promise.then = function(onfulfilled) {\n    var _resolve;\n    // eslint-disable-next-line func-names\n    var promise = new Promise(function(resolve) {\n      token.subscribe(resolve);\n      _resolve = resolve;\n    }).then(onfulfilled);\n\n    promise.cancel = function reject() {\n      token.unsubscribe(_resolve);\n    };\n\n    return promise;\n  };\n\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new CanceledError(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n  if (this.reason) {\n    listener(this.reason);\n    return;\n  }\n\n  if (this._listeners) {\n    this._listeners.push(listener);\n  } else {\n    this._listeners = [listener];\n  }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n  if (!this._listeners) {\n    return;\n  }\n  var index = this._listeners.indexOf(listener);\n  if (index !== -1) {\n    this._listeners.splice(index, 1);\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n  this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n  __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof configOrUrl === 'string') {\n    config = config || {};\n    config.url = configOrUrl;\n  } else {\n    config = configOrUrl || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n\n  // Set config.method\n  if (config.method) {\n    config.method = config.method.toLowerCase();\n  } else if (this.defaults.method) {\n    config.method = this.defaults.method.toLowerCase();\n  } else {\n    config.method = 'get';\n  }\n\n  var transitional = config.transitional;\n\n  if (transitional !== undefined) {\n    validator.assertOptions(transitional, {\n      silentJSONParsing: validators.transitional(validators.boolean),\n      forcedJSONParsing: validators.transitional(validators.boolean),\n      clarifyTimeoutError: validators.transitional(validators.boolean)\n    }, false);\n  }\n\n  // filter out skipped interceptors\n  var requestInterceptorChain = [];\n  var synchronousRequestInterceptors = true;\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n      return;\n    }\n\n    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var responseInterceptorChain = [];\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var promise;\n\n  if (!synchronousRequestInterceptors) {\n    var chain = [dispatchRequest, undefined];\n\n    Array.prototype.unshift.apply(chain, requestInterceptorChain);\n    chain = chain.concat(responseInterceptorChain);\n\n    promise = Promise.resolve(config);\n    while (chain.length) {\n      promise = promise.then(chain.shift(), chain.shift());\n    }\n\n    return promise;\n  }\n\n\n  var newConfig = config;\n  while (requestInterceptorChain.length) {\n    var onFulfilled = requestInterceptorChain.shift();\n    var onRejected = requestInterceptorChain.shift();\n    try {\n      newConfig = onFulfilled(newConfig);\n    } catch (error) {\n      onRejected(error);\n      break;\n    }\n  }\n\n  try {\n    promise = dispatchRequest(newConfig);\n  } catch (error) {\n    return Promise.reject(error);\n  }\n\n  while (responseInterceptorChain.length) {\n    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  var fullPath = buildFullPath(config.baseURL, config.url);\n  return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method: method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url: url,\n        data: data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n  Error.call(this);\n  this.message = message;\n  this.name = 'AxiosError';\n  code && (this.code = code);\n  config && (this.config = config);\n  request && (this.request = request);\n  response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n  toJSON: function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code,\n      status: this.response && this.response.status ? this.response.status : null\n    };\n  }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n  'ERR_BAD_OPTION_VALUE',\n  'ERR_BAD_OPTION',\n  'ECONNABORTED',\n  'ETIMEDOUT',\n  'ERR_NETWORK',\n  'ERR_FR_TOO_MANY_REDIRECTS',\n  'ERR_DEPRECATED',\n  'ERR_BAD_RESPONSE',\n  'ERR_BAD_REQUEST',\n  'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n  descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n  var axiosError = Object.create(prototype);\n\n  utils.toFlatObject(error, axiosError, function filter(obj) {\n    return obj !== Error.prototype;\n  });\n\n  AxiosError.call(axiosError, error.message, code, config, request, response);\n\n  axiosError.name = error.name;\n\n  customProps && Object.assign(axiosError, customProps);\n\n  return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected,\n    synchronous: options ? options.synchronous : false,\n    runWhen: options ? options.runWhen : null\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  function getMergedValue(target, source) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge(target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(prop) {\n    if (prop in config2) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  var mergeMap = {\n    'url': valueFromConfig2,\n    'method': valueFromConfig2,\n    'data': valueFromConfig2,\n    'baseURL': defaultToConfig2,\n    'transformRequest': defaultToConfig2,\n    'transformResponse': defaultToConfig2,\n    'paramsSerializer': defaultToConfig2,\n    'timeout': defaultToConfig2,\n    'timeoutMessage': defaultToConfig2,\n    'withCredentials': defaultToConfig2,\n    'adapter': defaultToConfig2,\n    'responseType': defaultToConfig2,\n    'xsrfCookieName': defaultToConfig2,\n    'xsrfHeaderName': defaultToConfig2,\n    'onUploadProgress': defaultToConfig2,\n    'onDownloadProgress': defaultToConfig2,\n    'decompress': defaultToConfig2,\n    'maxContentLength': defaultToConfig2,\n    'maxBodyLength': defaultToConfig2,\n    'beforeRedirect': defaultToConfig2,\n    'transport': defaultToConfig2,\n    'httpAgent': defaultToConfig2,\n    'httpsAgent': defaultToConfig2,\n    'cancelToken': defaultToConfig2,\n    'socketPath': defaultToConfig2,\n    'responseEncoding': defaultToConfig2,\n    'validateStatus': mergeDirectKeys\n  };\n\n  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n    var merge = mergeMap[prop] || mergeDeepProperties;\n    var configValue = merge(prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  var context = this || defaults;\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(context, data, headers);\n  });\n\n  return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('../adapters/xhr');\n  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('../adapters/http');\n  }\n  return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n\n    var isObjectPayload = utils.isObject(data);\n    var contentType = headers && headers['Content-Type'];\n\n    var isFileList;\n\n    if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n      var _FormData = this.env && this.env.FormData;\n      return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n    } else if (isObjectPayload || contentType === 'application/json') {\n      setContentTypeIfUnset(headers, 'application/json');\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    var transitional = this.transitional || defaults.transitional;\n    var silentJSONParsing = transitional && transitional.silentJSONParsing;\n    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: require('./env/FormData')\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*'\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","module.exports = {\n  \"version\": \"0.27.2\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n  var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new FormData();\n\n  var stack = [];\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  function build(data, parentKey) {\n    if (utils.isPlainObject(data) || utils.isArray(data)) {\n      if (stack.indexOf(data) !== -1) {\n        throw Error('Circular reference detected in ' + parentKey);\n      }\n\n      stack.push(data);\n\n      utils.forEach(data, function each(value, key) {\n        if (utils.isUndefined(value)) return;\n        var fullKey = parentKey ? parentKey + '.' + key : key;\n        var arr;\n\n        if (value && !parentKey && typeof value === 'object') {\n          if (utils.endsWith(key, '{}')) {\n            // eslint-disable-next-line no-param-reassign\n            value = JSON.stringify(value);\n          } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n            // eslint-disable-next-line func-names\n            arr.forEach(function(el) {\n              !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n            });\n            return;\n          }\n        }\n\n        build(value, fullKey);\n      });\n\n      stack.pop();\n    } else {\n      formData.append(parentKey, convertValue(data));\n    }\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return function(value, opt, opts) {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  var keys = Object.keys(options);\n  var i = keys.length;\n  while (i-- > 0) {\n    var opt = keys[i];\n    var validator = schema[opt];\n    if (validator) {\n      var value = options[opt];\n      var result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nmodule.exports = {\n  assertOptions: assertOptions,\n  validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n  // eslint-disable-next-line func-names\n  return function(thing) {\n    var str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n  };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n  type = type.toLowerCase();\n  return function isKindOf(thing) {\n    return kindOf(thing) === type;\n  };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  var prototype = Object.getPrototypeOf(val);\n  return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n  var pattern = '[object FormData]';\n  return thing && (\n    (typeof FormData === 'function' && thing instanceof FormData) ||\n    toString.call(thing) === pattern ||\n    (isFunction(thing.toString) && thing.toString() === pattern)\n  );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (isPlainObject(result[key]) && isPlainObject(val)) {\n      result[key] = merge(result[key], val);\n    } else if (isPlainObject(val)) {\n      result[key] = merge({}, val);\n    } else if (isArray(val)) {\n      result[key] = val.slice();\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  constructor.prototype.constructor = constructor;\n  props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n  var props;\n  var i;\n  var prop;\n  var merged = {};\n\n  destObj = destObj || {};\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if (!merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = Object.getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  var lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n  if (!thing) return null;\n  var i = thing.length;\n  if (isUndefined(i)) return null;\n  var arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n  // eslint-disable-next-line func-names\n  return function(thing) {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isPlainObject: isPlainObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim,\n  stripBOM: stripBOM,\n  inherits: inherits,\n  toFlatObject: toFlatObject,\n  kindOf: kindOf,\n  kindOfTest: kindOfTest,\n  endsWith: endsWith,\n  toArray: toArray,\n  isTypedArray: isTypedArray,\n  isFileList: isFileList\n};\n"],"sourceRoot":""}/* axios v0.27.2 | (c) 2022 by Matt Zabriskie */
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t,n){"use strict";var r,o=n(4),i=Object.prototype.toString,s=(r=Object.create(null),function(e){var t=i.call(e);return r[t]||(r[t]=t.slice(8,-1).toLowerCase())});function a(e){return e=e.toLowerCase(),function(t){return s(t)===e}}function u(e){return Array.isArray(e)}function c(e){return void 0===e}var f=a("ArrayBuffer");function l(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==s(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var d=a("Date"),h=a("File"),m=a("Blob"),v=a("FileList");function y(e){return"[object Function]"===i.call(e)}var g=a("URLSearchParams");function E(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),u(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.call(null,e[o],o,e)}var b,O=(b="undefined"!=typeof Uint8Array&&Object.getPrototypeOf(Uint8Array),function(e){return b&&e instanceof b});e.exports={isArray:u,isArrayBuffer:f,isBuffer:function(e){return null!==e&&!c(e)&&null!==e.constructor&&!c(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},isFormData:function(e){return e&&("function"==typeof FormData&&e instanceof FormData||"[object FormData]"===i.call(e)||y(e.toString)&&"[object FormData]"===e.toString())},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&f(e.buffer)},isString:function(e){return"string"==typeof e},isNumber:function(e){return"number"==typeof e},isObject:l,isPlainObject:p,isUndefined:c,isDate:d,isFile:h,isBlob:m,isFunction:y,isStream:function(e){return l(e)&&y(e.pipe)},isURLSearchParams:g,isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:E,merge:function e(){var t={};function n(n,r){p(t[r])&&p(n)?t[r]=e(t[r],n):p(n)?t[r]=e({},n):u(n)?t[r]=n.slice():t[r]=n}for(var r=0,o=arguments.length;r<o;r++)E(arguments[r],n);return t},extend:function(e,t,n){return E(t,(function(t,r){e[r]=n&&"function"==typeof t?o(t,n):t})),e},trim:function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n){var r,o,i,s={};t=t||{};do{for(o=(r=Object.getOwnPropertyNames(e)).length;o-- >0;)s[i=r[o]]||(t[i]=e[i],s[i]=!0);e=Object.getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:a,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;var t=e.length;if(c(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},isTypedArray:O,isFileList:v}},function(e,t,n){"use strict";var r=n(0);function o(e,t,n,r,o){Error.call(this),this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}r.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var i=o.prototype,s={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED"].forEach((function(e){s[e]={value:e}})),Object.defineProperties(o,s),Object.defineProperty(i,"isAxiosError",{value:!0}),o.from=function(e,t,n,s,a,u){var c=Object.create(i);return r.toFlatObject(e,c,(function(e){return e!==Error.prototype})),o.call(c,e.message,t,n,s,a),c.name=e.name,u&&Object.assign(c,u),c},e.exports=o},function(e,t,n){"use strict";var r=n(1);function o(e){r.call(this,null==e?"canceled":e,r.ERR_CANCELED),this.name="CanceledError"}n(0).inherits(o,r,{__CANCEL__:!0}),e.exports=o},function(e,t,n){"use strict";var r=n(0),o=n(19),i=n(1),s=n(6),a=n(7),u={"Content-Type":"application/x-www-form-urlencoded"};function c(e,t){!r.isUndefined(e)&&r.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var f,l={transitional:s,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(f=n(8)),f),transformRequest:[function(e,t){if(o(t,"Accept"),o(t,"Content-Type"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e))return e;if(r.isArrayBufferView(e))return e.buffer;if(r.isURLSearchParams(e))return c(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();var n,i=r.isObject(e),s=t&&t["Content-Type"];if((n=r.isFileList(e))||i&&"multipart/form-data"===s){var u=this.env&&this.env.FormData;return a(n?{"files[]":e}:e,u&&new u)}return i||"application/json"===s?(c(t,"application/json"),function(e,t,n){if(r.isString(e))try{return(t||JSON.parse)(e),r.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||l.transitional,n=t&&t.silentJSONParsing,o=t&&t.forcedJSONParsing,s=!n&&"json"===this.responseType;if(s||o&&r.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(s){if("SyntaxError"===e.name)throw i.from(e,i.ERR_BAD_RESPONSE,this,null,this.response);throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:n(27)},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){l.headers[e]=r.merge(u)})),e.exports=l},function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},function(e,t,n){"use strict";var r=n(0);function o(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else if(r.isURLSearchParams(t))i=t.toString();else{var s=[];r.forEach(t,(function(e,t){null!=e&&(r.isArray(e)?t+="[]":e=[e],r.forEach(e,(function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),s.push(o(t)+"="+o(e))})))})),i=s.join("&")}if(i){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}},function(e,t,n){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},function(e,t,n){"use strict";var r=n(0);e.exports=function(e,t){t=t||new FormData;var n=[];function o(e){return null===e?"":r.isDate(e)?e.toISOString():r.isArrayBuffer(e)||r.isTypedArray(e)?"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}return function e(i,s){if(r.isPlainObject(i)||r.isArray(i)){if(-1!==n.indexOf(i))throw Error("Circular reference detected in "+s);n.push(i),r.forEach(i,(function(n,i){if(!r.isUndefined(n)){var a,u=s?s+"."+i:i;if(n&&!s&&"object"==typeof n)if(r.endsWith(i,"{}"))n=JSON.stringify(n);else if(r.endsWith(i,"[]")&&(a=r.toArray(n)))return void a.forEach((function(e){!r.isUndefined(e)&&t.append(u,o(e))}));e(n,u)}})),n.pop()}else t.append(s,o(i))}(e),t}},function(e,t,n){"use strict";var r=n(0),o=n(20),i=n(21),s=n(5),a=n(9),u=n(24),c=n(25),f=n(6),l=n(1),p=n(2),d=n(26);e.exports=function(e){return new Promise((function(t,n){var h,m=e.data,v=e.headers,y=e.responseType;function g(){e.cancelToken&&e.cancelToken.unsubscribe(h),e.signal&&e.signal.removeEventListener("abort",h)}r.isFormData(m)&&r.isStandardBrowserEnv()&&delete v["Content-Type"];var E=new XMLHttpRequest;if(e.auth){var b=e.auth.username||"",O=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";v.Authorization="Basic "+btoa(b+":"+O)}var x=a(e.baseURL,e.url);function w(){if(E){var r="getAllResponseHeaders"in E?u(E.getAllResponseHeaders()):null,i={data:y&&"text"!==y&&"json"!==y?E.response:E.responseText,status:E.status,statusText:E.statusText,headers:r,config:e,request:E};o((function(e){t(e),g()}),(function(e){n(e),g()}),i),E=null}}if(E.open(e.method.toUpperCase(),s(x,e.params,e.paramsSerializer),!0),E.timeout=e.timeout,"onloadend"in E?E.onloadend=w:E.onreadystatechange=function(){E&&4===E.readyState&&(0!==E.status||E.responseURL&&0===E.responseURL.indexOf("file:"))&&setTimeout(w)},E.onabort=function(){E&&(n(new l("Request aborted",l.ECONNABORTED,e,E)),E=null)},E.onerror=function(){n(new l("Network Error",l.ERR_NETWORK,e,E,E)),E=null},E.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||f;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new l(t,r.clarifyTimeoutError?l.ETIMEDOUT:l.ECONNABORTED,e,E)),E=null},r.isStandardBrowserEnv()){var R=(e.withCredentials||c(x))&&e.xsrfCookieName?i.read(e.xsrfCookieName):void 0;R&&(v[e.xsrfHeaderName]=R)}"setRequestHeader"in E&&r.forEach(v,(function(e,t){void 0===m&&"content-type"===t.toLowerCase()?delete v[t]:E.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(E.withCredentials=!!e.withCredentials),y&&"json"!==y&&(E.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&E.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&E.upload&&E.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(h=function(e){E&&(n(!e||e&&e.type?new p:e),E.abort(),E=null)},e.cancelToken&&e.cancelToken.subscribe(h),e.signal&&(e.signal.aborted?h():e.signal.addEventListener("abort",h))),m||(m=null);var S=d(x);S&&-1===["http","https","file"].indexOf(S)?n(new l("Unsupported protocol "+S+":",l.ERR_BAD_REQUEST,e)):E.send(m)}))}},function(e,t,n){"use strict";var r=n(22),o=n(23);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},function(e,t,n){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){"use strict";var r=n(0);e.exports=function(e,t){t=t||{};var n={};function o(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function i(n){return r.isUndefined(t[n])?r.isUndefined(e[n])?void 0:o(void 0,e[n]):o(e[n],t[n])}function s(e){if(!r.isUndefined(t[e]))return o(void 0,t[e])}function a(n){return r.isUndefined(t[n])?r.isUndefined(e[n])?void 0:o(void 0,e[n]):o(void 0,t[n])}function u(n){return n in t?o(e[n],t[n]):n in e?o(void 0,e[n]):void 0}var c={url:s,method:s,data:s,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:u};return r.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=c[e]||i,o=t(e);r.isUndefined(o)&&t!==u||(n[e]=o)})),n}},function(e,t){e.exports={version:"0.27.2"}},function(e,t,n){e.exports=n(14)},function(e,t,n){"use strict";var r=n(0),o=n(4),i=n(15),s=n(11);var a=function e(t){var n=new i(t),a=o(i.prototype.request,n);return r.extend(a,i.prototype,n),r.extend(a,n),a.create=function(n){return e(s(t,n))},a}(n(3));a.Axios=i,a.CanceledError=n(2),a.CancelToken=n(29),a.isCancel=n(10),a.VERSION=n(12).version,a.toFormData=n(7),a.AxiosError=n(1),a.Cancel=a.CanceledError,a.all=function(e){return Promise.all(e)},a.spread=n(30),a.isAxiosError=n(31),e.exports=a,e.exports.default=a},function(e,t,n){"use strict";var r=n(0),o=n(5),i=n(16),s=n(17),a=n(11),u=n(9),c=n(28),f=c.validators;function l(e){this.defaults=e,this.interceptors={request:new i,response:new i}}l.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=a(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var n=t.transitional;void 0!==n&&c.assertOptions(n,{silentJSONParsing:f.transitional(f.boolean),forcedJSONParsing:f.transitional(f.boolean),clarifyTimeoutError:f.transitional(f.boolean)},!1);var r=[],o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,r.unshift(e.fulfilled,e.rejected))}));var i,u=[];if(this.interceptors.response.forEach((function(e){u.push(e.fulfilled,e.rejected)})),!o){var l=[s,void 0];for(Array.prototype.unshift.apply(l,r),l=l.concat(u),i=Promise.resolve(t);l.length;)i=i.then(l.shift(),l.shift());return i}for(var p=t;r.length;){var d=r.shift(),h=r.shift();try{p=d(p)}catch(e){h(e);break}}try{i=s(p)}catch(e){return Promise.reject(e)}for(;u.length;)i=i.then(u.shift(),u.shift());return i},l.prototype.getUri=function(e){e=a(this.defaults,e);var t=u(e.baseURL,e.url);return o(t,e.params,e.paramsSerializer)},r.forEach(["delete","get","head","options"],(function(e){l.prototype[e]=function(t,n){return this.request(a(n||{},{method:e,url:t,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(a(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}l.prototype[e]=t(),l.prototype[e+"Form"]=t(!0)})),e.exports=l},function(e,t,n){"use strict";var r=n(0);function o(){this.handlers=[]}o.prototype.use=function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){r.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},function(e,t,n){"use strict";var r=n(0),o=n(18),i=n(10),s=n(3),a=n(2);function u(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new a}e.exports=function(e){return u(e),e.headers=e.headers||{},e.data=o.call(e,e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||s.adapter)(e).then((function(t){return u(e),t.data=o.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return i(t)||(u(e),t&&t.response&&(t.response.data=o.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},function(e,t,n){"use strict";var r=n(0),o=n(3);e.exports=function(e,t,n){var i=this||o;return r.forEach(n,(function(n){e=n.call(i,e,t)})),e}},function(e,t,n){"use strict";var r=n(0);e.exports=function(e,t){r.forEach(e,(function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])}))}},function(e,t,n){"use strict";var r=n(1);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new r("Request failed with status code "+n.status,[r.ERR_BAD_REQUEST,r.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(0);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(e,t,n){"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},function(e,t,n){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(0),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,i,s={};return e?(r.forEach(e.split("\n"),(function(e){if(i=e.indexOf(":"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([n]):s[t]?s[t]+", "+n:n}})),s):s}},function(e,t,n){"use strict";var r=n(0);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},function(e,t,n){"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},function(e,t){e.exports=null},function(e,t,n){"use strict";var r=n(12).version,o=n(1),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var s={};i.transitional=function(e,t,n){function i(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new o(i(r," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!s[r]&&(s[r]=!0,console.warn(i(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:function(e,t,n){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var r=Object.keys(e),i=r.length;i-- >0;){var s=r[i],a=t[s];if(a){var u=e[s],c=void 0===u||a(u,s,e);if(!0!==c)throw new o("option "+s+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new o("Unknown option "+s,o.ERR_BAD_OPTION)}},validators:i}},function(e,t,n){"use strict";var r=n(2);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;this.promise.then((function(e){if(n._listeners){var t,r=n._listeners.length;for(t=0;t<r;t++)n._listeners[t](e);n._listeners=null}})),this.promise.then=function(e){var t,r=new Promise((function(e){n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e){n.reason||(n.reason=new r(e),t(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},o.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},o.source=function(){var e;return{token:new o((function(t){e=t})),cancel:e}},e.exports=o},function(e,t,n){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t,n){"use strict";var r=n(0);e.exports=function(e){return r.isObject(e)&&!0===e.isAxiosError}}])}));
//# sourceMappingURL=axios.min.map{"version":3,"sources":["webpack://axios/webpack/universalModuleDefinition","webpack://axios/webpack/bootstrap","webpack://axios/./lib/utils.js","webpack://axios/./lib/core/AxiosError.js","webpack://axios/./lib/cancel/CanceledError.js","webpack://axios/./lib/defaults/index.js","webpack://axios/./lib/helpers/bind.js","webpack://axios/./lib/helpers/buildURL.js","webpack://axios/./lib/defaults/transitional.js","webpack://axios/./lib/helpers/toFormData.js","webpack://axios/./lib/adapters/xhr.js","webpack://axios/./lib/core/buildFullPath.js","webpack://axios/./lib/cancel/isCancel.js","webpack://axios/./lib/core/mergeConfig.js","webpack://axios/./lib/env/data.js","webpack://axios/./index.js","webpack://axios/./lib/axios.js","webpack://axios/./lib/core/Axios.js","webpack://axios/./lib/core/InterceptorManager.js","webpack://axios/./lib/core/dispatchRequest.js","webpack://axios/./lib/core/transformData.js","webpack://axios/./lib/helpers/normalizeHeaderName.js","webpack://axios/./lib/core/settle.js","webpack://axios/./lib/helpers/cookies.js","webpack://axios/./lib/helpers/isAbsoluteURL.js","webpack://axios/./lib/helpers/combineURLs.js","webpack://axios/./lib/helpers/parseHeaders.js","webpack://axios/./lib/helpers/isURLSameOrigin.js","webpack://axios/./lib/helpers/parseProtocol.js","webpack://axios/./lib/helpers/null.js","webpack://axios/./lib/helpers/validator.js","webpack://axios/./lib/cancel/CancelToken.js","webpack://axios/./lib/helpers/spread.js","webpack://axios/./lib/helpers/isAxiosError.js"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","cache","toString","kindOf","thing","str","slice","toLowerCase","kindOfTest","type","isArray","val","Array","isUndefined","isArrayBuffer","isObject","isPlainObject","getPrototypeOf","isDate","isFile","isBlob","isFileList","isFunction","isURLSearchParams","forEach","obj","fn","length","TypedArray","isTypedArray","Uint8Array","isBuffer","constructor","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isStream","pipe","isStandardBrowserEnv","navigator","product","window","document","merge","result","assignValue","arguments","extend","a","b","thisArg","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","descriptors","assign","toFlatObject","sourceObj","destObj","filter","prop","merged","getOwnPropertyNames","endsWith","searchString","position","String","undefined","lastIndex","indexOf","toArray","arr","utils","AxiosError","message","code","config","request","response","Error","toJSON","description","number","fileName","lineNumber","columnNumber","stack","status","defineProperties","from","error","customProps","axiosError","CanceledError","ERR_CANCELED","__CANCEL__","normalizeHeaderName","transitionalDefaults","toFormData","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","headers","adapter","defaults","transitional","XMLHttpRequest","process","transformRequest","data","isObjectPayload","contentType","_FormData","env","rawValue","parser","encoder","JSON","parse","e","stringify","stringifySafely","transformResponse","silentJSONParsing","forcedJSONParsing","strictJSONParsing","responseType","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","method","args","apply","encode","encodeURIComponent","url","params","paramsSerializer","serializedParams","parts","v","toISOString","push","join","hashmarkIndex","clarifyTimeoutError","formData","convertValue","Blob","Buffer","build","parentKey","fullKey","el","append","pop","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","parseProtocol","Promise","resolve","reject","onCanceled","requestData","requestHeaders","done","cancelToken","unsubscribe","signal","removeEventListener","auth","username","password","unescape","Authorization","btoa","fullPath","baseURL","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","err","open","toUpperCase","onreadystatechange","readyState","responseURL","setTimeout","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","xsrfValue","withCredentials","read","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","abort","subscribe","aborted","protocol","ERR_BAD_REQUEST","send","isAbsoluteURL","combineURLs","requestedURL","config1","config2","getMergedValue","target","source","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","keys","concat","configValue","Axios","mergeConfig","axios","createInstance","defaultConfig","context","instance","instanceConfig","CancelToken","isCancel","VERSION","version","Cancel","all","promises","spread","isAxiosError","default","InterceptorManager","dispatchRequest","validator","validators","interceptors","configOrUrl","assertOptions","boolean","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","unshift","fulfilled","rejected","promise","responseInterceptorChain","chain","then","shift","newConfig","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","handlers","use","options","eject","id","h","transformData","throwIfCancellationRequested","throwIfRequested","reason","fns","normalizedName","Math","floor","write","expires","path","domain","secure","cookie","Date","toGMTString","match","RegExp","decodeURIComponent","remove","now","test","relativeURL","ignoreDuplicateOf","parsed","split","line","substr","originURL","msie","userAgent","urlParsingNode","createElement","resolveURL","href","setAttribute","host","search","hash","hostname","port","pathname","charAt","location","requestURL","exec","deprecatedWarnings","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","executor","TypeError","resolvePromise","token","_listeners","onfulfilled","_resolve","listener","index","splice","callback","payload"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAe,MAAID,IAEnBD,EAAY,MAAIC,IARlB,CASGK,MAAM,WACT,O,YCTE,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUP,QAGnC,IAAIC,EAASI,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHT,QAAS,IAUV,OANAU,EAAQH,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOQ,GAAI,EAGJR,EAAOD,QA0Df,OArDAM,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBQ,EAAI,SAASd,EAASe,EAAMC,GAC3CV,EAAoBW,EAAEjB,EAASe,IAClCG,OAAOC,eAAenB,EAASe,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEV,EAAoBgB,EAAI,SAAStB,GACX,oBAAXuB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAenB,EAASuB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAenB,EAAS,aAAc,CAAEyB,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAShC,GAChC,IAAIe,EAASf,GAAUA,EAAO2B,WAC7B,WAAwB,OAAO3B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAK,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG7B,EAAoBgC,EAAI,GAIjBhC,EAAoBA,EAAoBiC,EAAI,I,+BChFrD,IAOuBC,EAPnBR,EAAO,EAAQ,GAIfS,EAAWvB,OAAOkB,UAAUK,SAG5BC,GAAmBF,EAMpBtB,OAAOY,OAAO,MAJR,SAASa,GACd,IAAIC,EAAMH,EAAS9B,KAAKgC,GACxB,OAAOH,EAAMI,KAASJ,EAAMI,GAAOA,EAAIC,MAAM,GAAI,GAAGC,iBAIxD,SAASC,EAAWC,GAElB,OADAA,EAAOA,EAAKF,cACL,SAAkBH,GACvB,OAAOD,EAAOC,KAAWK,GAU7B,SAASC,EAAQC,GACf,OAAOC,MAAMF,QAAQC,GASvB,SAASE,EAAYF,GACnB,YAAsB,IAARA,EAqBhB,IAAIG,EAAgBN,EAAW,eA6C/B,SAASO,EAASJ,GAChB,OAAe,OAARA,GAA+B,iBAARA,EAShC,SAASK,EAAcL,GACrB,GAAoB,WAAhBR,EAAOQ,GACT,OAAO,EAGT,IAAId,EAAYlB,OAAOsC,eAAeN,GACtC,OAAqB,OAAdd,GAAsBA,IAAclB,OAAOkB,UAUpD,IAAIqB,EAASV,EAAW,QASpBW,EAASX,EAAW,QASpBY,EAASZ,EAAW,QASpBa,EAAab,EAAW,YAQ5B,SAASc,EAAWX,GAClB,MAA8B,sBAAvBT,EAAS9B,KAAKuC,GAkCvB,IAAIY,EAAoBf,EAAW,mBAmDnC,SAASgB,EAAQC,EAAKC,GAEpB,GAAID,QAUJ,GALmB,iBAARA,IAETA,EAAM,CAACA,IAGLf,EAAQe,GAEV,IAAK,IAAIxD,EAAI,EAAGC,EAAIuD,EAAIE,OAAQ1D,EAAIC,EAAGD,IACrCyD,EAAGtD,KAAK,KAAMqD,EAAIxD,GAAIA,EAAGwD,QAI3B,IAAK,IAAIjC,KAAOiC,EACV9C,OAAOkB,UAAUC,eAAe1B,KAAKqD,EAAKjC,IAC5CkC,EAAGtD,KAAK,KAAMqD,EAAIjC,GAAMA,EAAKiC,GA4JrC,IAA6BG,EAAzBC,GAAyBD,EAKJ,oBAAfE,YAA8BnD,OAAOsC,eAAea,YAHrD,SAAS1B,GACd,OAAOwB,GAAcxB,aAAiBwB,IAI1ClE,EAAOD,QAAU,CACfiD,QAASA,EACTI,cAAeA,EACfiB,SAvYF,SAAkBpB,GAChB,OAAe,OAARA,IAAiBE,EAAYF,IAA4B,OAApBA,EAAIqB,cAAyBnB,EAAYF,EAAIqB,cAChD,mBAA7BrB,EAAIqB,YAAYD,UAA2BpB,EAAIqB,YAAYD,SAASpB,IAsYhFsB,WA9PF,SAAoB7B,GAElB,OAAOA,IACgB,mBAAb8B,UAA2B9B,aAAiB8B,UAFxC,sBAGZhC,EAAS9B,KAAKgC,IACbkB,EAAWlB,EAAMF,WAJN,sBAImBE,EAAMF,aA0PvCiC,kBApXF,SAA2BxB,GAOzB,MAL4B,oBAAhByB,aAAiCA,YAAkB,OACpDA,YAAYC,OAAO1B,GAEnB,GAAUA,EAAU,QAAMG,EAAcH,EAAI2B,SAgXvDC,SArWF,SAAkB5B,GAChB,MAAsB,iBAARA,GAqWd6B,SA5VF,SAAkB7B,GAChB,MAAsB,iBAARA,GA4VdI,SAAUA,EACVC,cAAeA,EACfH,YAAaA,EACbK,OAAQA,EACRC,OAAQA,EACRC,OAAQA,EACRE,WAAYA,EACZmB,SAnRF,SAAkB9B,GAChB,OAAOI,EAASJ,IAAQW,EAAWX,EAAI+B,OAmRvCnB,kBAAmBA,EACnBoB,qBAjOF,WACE,OAAyB,oBAAdC,WAAoD,gBAAtBA,UAAUC,SACY,iBAAtBD,UAAUC,SACY,OAAtBD,UAAUC,WAI/B,oBAAXC,QACa,oBAAbC,WA0NTvB,QAASA,EACTwB,MA/JF,SAASA,IACP,IAAIC,EAAS,GACb,SAASC,EAAYvC,EAAKnB,GACpBwB,EAAciC,EAAOzD,KAASwB,EAAcL,GAC9CsC,EAAOzD,GAAOwD,EAAMC,EAAOzD,GAAMmB,GACxBK,EAAcL,GACvBsC,EAAOzD,GAAOwD,EAAM,GAAIrC,GACfD,EAAQC,GACjBsC,EAAOzD,GAAOmB,EAAIL,QAElB2C,EAAOzD,GAAOmB,EAIlB,IAAK,IAAI1C,EAAI,EAAGC,EAAIiF,UAAUxB,OAAQ1D,EAAIC,EAAGD,IAC3CuD,EAAQ2B,UAAUlF,GAAIiF,GAExB,OAAOD,GA+IPG,OApIF,SAAgBC,EAAGC,EAAGC,GAQpB,OAPA/B,EAAQ8B,GAAG,SAAqB3C,EAAKnB,GAEjC6D,EAAE7D,GADA+D,GAA0B,mBAAR5C,EACXlB,EAAKkB,EAAK4C,GAEV5C,KAGN0C,GA6HPG,KAxPF,SAAcnD,GACZ,OAAOA,EAAImD,KAAOnD,EAAImD,OAASnD,EAAIoD,QAAQ,aAAc,KAwPzDC,SArHF,SAAkBC,GAIhB,OAH8B,QAA1BA,EAAQC,WAAW,KACrBD,EAAUA,EAAQrD,MAAM,IAEnBqD,GAkHPE,SAvGF,SAAkB7B,EAAa8B,EAAkBC,EAAOC,GACtDhC,EAAYnC,UAAYlB,OAAOY,OAAOuE,EAAiBjE,UAAWmE,GAClEhC,EAAYnC,UAAUmC,YAAcA,EACpC+B,GAASpF,OAAOsF,OAAOjC,EAAYnC,UAAWkE,IAqG9CG,aA1FF,SAAsBC,EAAWC,EAASC,GACxC,IAAIN,EACA9F,EACAqG,EACAC,EAAS,GAEbH,EAAUA,GAAW,GAErB,EAAG,CAGD,IADAnG,GADA8F,EAAQpF,OAAO6F,oBAAoBL,IACzBxC,OACH1D,KAAM,GAENsG,EADLD,EAAOP,EAAM9F,MAEXmG,EAAQE,GAAQH,EAAUG,GAC1BC,EAAOD,IAAQ,GAGnBH,EAAYxF,OAAOsC,eAAekD,SAC3BA,KAAeE,GAAUA,EAAOF,EAAWC,KAAaD,IAAcxF,OAAOkB,WAEtF,OAAOuE,GAsEPjE,OAAQA,EACRK,WAAYA,EACZiE,SA9DF,SAAkBpE,EAAKqE,EAAcC,GACnCtE,EAAMuE,OAAOvE,SACIwE,IAAbF,GAA0BA,EAAWtE,EAAIsB,UAC3CgD,EAAWtE,EAAIsB,QAEjBgD,GAAYD,EAAa/C,OACzB,IAAImD,EAAYzE,EAAI0E,QAAQL,EAAcC,GAC1C,OAAsB,IAAfG,GAAoBA,IAAcH,GAwDzCK,QA/CF,SAAiB5E,GACf,IAAKA,EAAO,OAAO,KACnB,IAAInC,EAAImC,EAAMuB,OACd,GAAId,EAAY5C,GAAI,OAAO,KAE3B,IADA,IAAIgH,EAAM,IAAIrE,MAAM3C,GACbA,KAAM,GACXgH,EAAIhH,GAAKmC,EAAMnC,GAEjB,OAAOgH,GAwCPpD,aAAcA,EACdR,WAAYA,I,6BCldd,IAAI6D,EAAQ,EAAQ,GAYpB,SAASC,EAAWC,EAASC,EAAMC,EAAQC,EAASC,GAClDC,MAAMrH,KAAKP,MACXA,KAAKuH,QAAUA,EACfvH,KAAKW,KAAO,aACZ6G,IAASxH,KAAKwH,KAAOA,GACrBC,IAAWzH,KAAKyH,OAASA,GACzBC,IAAY1H,KAAK0H,QAAUA,GAC3BC,IAAa3H,KAAK2H,SAAWA,GAG/BN,EAAMrB,SAASsB,EAAYM,MAAO,CAChCC,OAAQ,WACN,MAAO,CAELN,QAASvH,KAAKuH,QACd5G,KAAMX,KAAKW,KAEXmH,YAAa9H,KAAK8H,YAClBC,OAAQ/H,KAAK+H,OAEbC,SAAUhI,KAAKgI,SACfC,WAAYjI,KAAKiI,WACjBC,aAAclI,KAAKkI,aACnBC,MAAOnI,KAAKmI,MAEZV,OAAQzH,KAAKyH,OACbD,KAAMxH,KAAKwH,KACXY,OAAQpI,KAAK2H,UAAY3H,KAAK2H,SAASS,OAASpI,KAAK2H,SAASS,OAAS,SAK7E,IAAIpG,EAAYsF,EAAWtF,UACvBmE,EAAc,GAElB,CACE,uBACA,iBACA,eACA,YACA,cACA,4BACA,iBACA,mBACA,kBACA,gBAEAxC,SAAQ,SAAS6D,GACjBrB,EAAYqB,GAAQ,CAACnG,MAAOmG,MAG9B1G,OAAOuH,iBAAiBf,EAAYnB,GACpCrF,OAAOC,eAAeiB,EAAW,eAAgB,CAACX,OAAO,IAGzDiG,EAAWgB,KAAO,SAASC,EAAOf,EAAMC,EAAQC,EAASC,EAAUa,GACjE,IAAIC,EAAa3H,OAAOY,OAAOM,GAY/B,OAVAqF,EAAMhB,aAAakC,EAAOE,GAAY,SAAgB7E,GACpD,OAAOA,IAAQgE,MAAM5F,aAGvBsF,EAAW/G,KAAKkI,EAAYF,EAAMhB,QAASC,EAAMC,EAAQC,EAASC,GAElEc,EAAW9H,KAAO4H,EAAM5H,KAExB6H,GAAe1H,OAAOsF,OAAOqC,EAAYD,GAElCC,GAGT5I,EAAOD,QAAU0H,G,6BCnFjB,IAAIA,EAAa,EAAQ,GASzB,SAASoB,EAAcnB,GAErBD,EAAW/G,KAAKP,KAAiB,MAAXuH,EAAkB,WAAaA,EAASD,EAAWqB,cACzE3I,KAAKW,KAAO,gBAXF,EAAQ,GAcdqF,SAAS0C,EAAepB,EAAY,CACxCsB,YAAY,IAGd/I,EAAOD,QAAU8I,G,6BCnBjB,IAAIrB,EAAQ,EAAQ,GAChBwB,EAAsB,EAAQ,IAC9BvB,EAAa,EAAQ,GACrBwB,EAAuB,EAAQ,GAC/BC,EAAa,EAAQ,GAErBC,EAAuB,CACzB,eAAgB,qCAGlB,SAASC,EAAsBC,EAAS7H,IACjCgG,EAAMrE,YAAYkG,IAAY7B,EAAMrE,YAAYkG,EAAQ,mBAC3DA,EAAQ,gBAAkB7H,GA+B9B,IA1BM8H,EA0BFC,EAAW,CAEbC,aAAcP,EAEdK,UA7B8B,oBAAnBG,gBAGmB,oBAAZC,SAAuE,qBAA5CzI,OAAOkB,UAAUK,SAAS9B,KAAKgJ,YAD1EJ,EAAU,EAAQ,IAKbA,GAwBPK,iBAAkB,CAAC,SAA0BC,EAAMP,GAIjD,GAHAL,EAAoBK,EAAS,UAC7BL,EAAoBK,EAAS,gBAEzB7B,EAAMjD,WAAWqF,IACnBpC,EAAMpE,cAAcwG,IACpBpC,EAAMnD,SAASuF,IACfpC,EAAMzC,SAAS6E,IACfpC,EAAM/D,OAAOmG,IACbpC,EAAM9D,OAAOkG,GAEb,OAAOA,EAET,GAAIpC,EAAM/C,kBAAkBmF,GAC1B,OAAOA,EAAKhF,OAEd,GAAI4C,EAAM3D,kBAAkB+F,GAE1B,OADAR,EAAsBC,EAAS,mDACxBO,EAAKpH,WAGd,IAGImB,EAHAkG,EAAkBrC,EAAMnE,SAASuG,GACjCE,EAAcT,GAAWA,EAAQ,gBAIrC,IAAK1F,EAAa6D,EAAM7D,WAAWiG,KAAWC,GAAmC,wBAAhBC,EAAwC,CACvG,IAAIC,EAAY5J,KAAK6J,KAAO7J,KAAK6J,IAAIxF,SACrC,OAAO0E,EAAWvF,EAAa,CAAC,UAAWiG,GAAQA,EAAMG,GAAa,IAAIA,GACrE,OAAIF,GAAmC,qBAAhBC,GAC5BV,EAAsBC,EAAS,oBAnDrC,SAAyBY,EAAUC,EAAQC,GACzC,GAAI3C,EAAM3C,SAASoF,GACjB,IAEE,OADCC,GAAUE,KAAKC,OAAOJ,GAChBzC,EAAM1B,KAAKmE,GAClB,MAAOK,GACP,GAAe,gBAAXA,EAAExJ,KACJ,MAAMwJ,EAKZ,OAAQH,GAAWC,KAAKG,WAAWN,GAwCxBO,CAAgBZ,IAGlBA,IAGTa,kBAAmB,CAAC,SAA2Bb,GAC7C,IAAIJ,EAAerJ,KAAKqJ,cAAgBD,EAASC,aAC7CkB,EAAoBlB,GAAgBA,EAAakB,kBACjDC,EAAoBnB,GAAgBA,EAAamB,kBACjDC,GAAqBF,GAA2C,SAAtBvK,KAAK0K,aAEnD,GAAID,GAAsBD,GAAqBnD,EAAM3C,SAAS+E,IAASA,EAAK3F,OAC1E,IACE,OAAOmG,KAAKC,MAAMT,GAClB,MAAOU,GACP,GAAIM,EAAmB,CACrB,GAAe,gBAAXN,EAAExJ,KACJ,MAAM2G,EAAWgB,KAAK6B,EAAG7C,EAAWqD,iBAAkB3K,KAAM,KAAMA,KAAK2H,UAEzE,MAAMwC,GAKZ,OAAOV,IAOTmB,QAAS,EAETC,eAAgB,aAChBC,eAAgB,eAEhBC,kBAAmB,EACnBC,eAAgB,EAEhBnB,IAAK,CACHxF,SAAU,EAAQ,KAGpB4G,eAAgB,SAAwB7C,GACtC,OAAOA,GAAU,KAAOA,EAAS,KAGnCc,QAAS,CACPgC,OAAQ,CACN,OAAU,uCAKhB7D,EAAM1D,QAAQ,CAAC,SAAU,MAAO,SAAS,SAA6BwH,GACpE/B,EAASF,QAAQiC,GAAU,MAG7B9D,EAAM1D,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BwH,GACrE/B,EAASF,QAAQiC,GAAU9D,EAAMlC,MAAM6D,MAGzCnJ,EAAOD,QAAUwJ,G,6BC/IjBvJ,EAAOD,QAAU,SAAciE,EAAI6B,GACjC,OAAO,WAEL,IADA,IAAI0F,EAAO,IAAIrI,MAAMuC,UAAUxB,QACtB1D,EAAI,EAAGA,EAAIgL,EAAKtH,OAAQ1D,IAC/BgL,EAAKhL,GAAKkF,UAAUlF,GAEtB,OAAOyD,EAAGwH,MAAM3F,EAAS0F,M,6BCN7B,IAAI/D,EAAQ,EAAQ,GAEpB,SAASiE,EAAOxI,GACd,OAAOyI,mBAAmBzI,GACxB8C,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KAUrB/F,EAAOD,QAAU,SAAkB4L,EAAKC,EAAQC,GAE9C,IAAKD,EACH,OAAOD,EAGT,IAAIG,EACJ,GAAID,EACFC,EAAmBD,EAAiBD,QAC/B,GAAIpE,EAAM3D,kBAAkB+H,GACjCE,EAAmBF,EAAOpJ,eACrB,CACL,IAAIuJ,EAAQ,GAEZvE,EAAM1D,QAAQ8H,GAAQ,SAAmB3I,EAAKnB,GACxCmB,UAIAuE,EAAMxE,QAAQC,GAChBnB,GAAY,KAEZmB,EAAM,CAACA,GAGTuE,EAAM1D,QAAQb,GAAK,SAAoB+I,GACjCxE,EAAMhE,OAAOwI,GACfA,EAAIA,EAAEC,cACGzE,EAAMnE,SAAS2I,KACxBA,EAAI5B,KAAKG,UAAUyB,IAErBD,EAAMG,KAAKT,EAAO3J,GAAO,IAAM2J,EAAOO,WAI1CF,EAAmBC,EAAMI,KAAK,KAGhC,GAAIL,EAAkB,CACpB,IAAIM,EAAgBT,EAAItE,QAAQ,MACT,IAAnB+E,IACFT,EAAMA,EAAI/I,MAAM,EAAGwJ,IAGrBT,KAA8B,IAAtBA,EAAItE,QAAQ,KAAc,IAAM,KAAOyE,EAGjD,OAAOH,I,6BClET3L,EAAOD,QAAU,CACf2K,mBAAmB,EACnBC,mBAAmB,EACnB0B,qBAAqB,I,6BCHvB,IAAI7E,EAAQ,EAAQ,GAqEpBxH,EAAOD,QA5DP,SAAoBgE,EAAKuI,GAEvBA,EAAWA,GAAY,IAAI9H,SAE3B,IAAI8D,EAAQ,GAEZ,SAASiE,EAAa/K,GACpB,OAAc,OAAVA,EAAuB,GAEvBgG,EAAMhE,OAAOhC,GACRA,EAAMyK,cAGXzE,EAAMpE,cAAc5B,IAAUgG,EAAMrD,aAAa3C,GAC5B,mBAATgL,KAAsB,IAAIA,KAAK,CAAChL,IAAUiL,OAAOhE,KAAKjH,GAG/DA,EAwCT,OArCA,SAASkL,EAAM9C,EAAM+C,GACnB,GAAInF,EAAMlE,cAAcsG,IAASpC,EAAMxE,QAAQ4G,GAAO,CACpD,IAA6B,IAAzBtB,EAAMjB,QAAQuC,GAChB,MAAM7B,MAAM,kCAAoC4E,GAGlDrE,EAAM4D,KAAKtC,GAEXpC,EAAM1D,QAAQ8F,GAAM,SAAcpI,EAAOM,GACvC,IAAI0F,EAAMrE,YAAY3B,GAAtB,CACA,IACI+F,EADAqF,EAAUD,EAAYA,EAAY,IAAM7K,EAAMA,EAGlD,GAAIN,IAAUmL,GAA8B,iBAAVnL,EAChC,GAAIgG,EAAMT,SAASjF,EAAK,MAEtBN,EAAQ4I,KAAKG,UAAU/I,QAClB,GAAIgG,EAAMT,SAASjF,EAAK,QAAUyF,EAAMC,EAAMF,QAAQ9F,IAK3D,YAHA+F,EAAIzD,SAAQ,SAAS+I,IAClBrF,EAAMrE,YAAY0J,IAAOP,EAASQ,OAAOF,EAASL,EAAaM,OAMtEH,EAAMlL,EAAOoL,OAGftE,EAAMyE,WAENT,EAASQ,OAAOH,EAAWJ,EAAa3C,IAI5C8C,CAAM3I,GAECuI,I,6BClET,IAAI9E,EAAQ,EAAQ,GAChBwF,EAAS,EAAQ,IACjBC,EAAU,EAAQ,IAClBC,EAAW,EAAQ,GACnBC,EAAgB,EAAQ,GACxBC,EAAe,EAAQ,IACvBC,EAAkB,EAAQ,IAC1BpE,EAAuB,EAAQ,GAC/BxB,EAAa,EAAQ,GACrBoB,EAAgB,EAAQ,GACxByE,EAAgB,EAAQ,IAE5BtN,EAAOD,QAAU,SAAoB6H,GACnC,OAAO,IAAI2F,SAAQ,SAA4BC,EAASC,GACtD,IAGIC,EAHAC,EAAc/F,EAAOgC,KACrBgE,EAAiBhG,EAAOyB,QACxBwB,EAAejD,EAAOiD,aAE1B,SAASgD,IACHjG,EAAOkG,aACTlG,EAAOkG,YAAYC,YAAYL,GAG7B9F,EAAOoG,QACTpG,EAAOoG,OAAOC,oBAAoB,QAASP,GAI3ClG,EAAMjD,WAAWoJ,IAAgBnG,EAAMvC,+BAClC2I,EAAe,gBAGxB,IAAI/F,EAAU,IAAI4B,eAGlB,GAAI7B,EAAOsG,KAAM,CACf,IAAIC,EAAWvG,EAAOsG,KAAKC,UAAY,GACnCC,EAAWxG,EAAOsG,KAAKE,SAAWC,SAAS3C,mBAAmB9D,EAAOsG,KAAKE,WAAa,GAC3FR,EAAeU,cAAgB,SAAWC,KAAKJ,EAAW,IAAMC,GAGlE,IAAII,EAAWrB,EAAcvF,EAAO6G,QAAS7G,EAAO+D,KAOpD,SAAS+C,IACP,GAAK7G,EAAL,CAIA,IAAI8G,EAAkB,0BAA2B9G,EAAUuF,EAAavF,EAAQ+G,yBAA2B,KAGvG9G,EAAW,CACb8B,KAHkBiB,GAAiC,SAAjBA,GAA6C,SAAjBA,EACvChD,EAAQC,SAA/BD,EAAQgH,aAGRtG,OAAQV,EAAQU,OAChBuG,WAAYjH,EAAQiH,WACpBzF,QAASsF,EACT/G,OAAQA,EACRC,QAASA,GAGXmF,GAAO,SAAkBxL,GACvBgM,EAAQhM,GACRqM,OACC,SAAiBkB,GAClBtB,EAAOsB,GACPlB,MACC/F,GAGHD,EAAU,MAoEZ,GAnGAA,EAAQmH,KAAKpH,EAAO0D,OAAO2D,cAAe/B,EAASsB,EAAU5G,EAAOgE,OAAQhE,EAAOiE,mBAAmB,GAGtGhE,EAAQkD,QAAUnD,EAAOmD,QA+BrB,cAAelD,EAEjBA,EAAQ6G,UAAYA,EAGpB7G,EAAQqH,mBAAqB,WACtBrH,GAAkC,IAAvBA,EAAQsH,aAQD,IAAnBtH,EAAQU,QAAkBV,EAAQuH,aAAwD,IAAzCvH,EAAQuH,YAAY/H,QAAQ,WAKjFgI,WAAWX,IAKf7G,EAAQyH,QAAU,WACXzH,IAIL4F,EAAO,IAAIhG,EAAW,kBAAmBA,EAAW8H,aAAc3H,EAAQC,IAG1EA,EAAU,OAIZA,EAAQ2H,QAAU,WAGhB/B,EAAO,IAAIhG,EAAW,gBAAiBA,EAAWgI,YAAa7H,EAAQC,EAASA,IAGhFA,EAAU,MAIZA,EAAQ6H,UAAY,WAClB,IAAIC,EAAsB/H,EAAOmD,QAAU,cAAgBnD,EAAOmD,QAAU,cAAgB,mBACxFvB,EAAe5B,EAAO4B,cAAgBP,EACtCrB,EAAO+H,sBACTA,EAAsB/H,EAAO+H,qBAE/BlC,EAAO,IAAIhG,EACTkI,EACAnG,EAAa6C,oBAAsB5E,EAAWmI,UAAYnI,EAAW8H,aACrE3H,EACAC,IAGFA,EAAU,MAMRL,EAAMvC,uBAAwB,CAEhC,IAAI4K,GAAajI,EAAOkI,iBAAmBzC,EAAgBmB,KAAc5G,EAAOoD,eAC9EiC,EAAQ8C,KAAKnI,EAAOoD,qBACpB7D,EAEE0I,IACFjC,EAAehG,EAAOqD,gBAAkB4E,GAKxC,qBAAsBhI,GACxBL,EAAM1D,QAAQ8J,GAAgB,SAA0B3K,EAAKnB,QAChC,IAAhB6L,GAAqD,iBAAtB7L,EAAIe,qBAErC+K,EAAe9L,GAGtB+F,EAAQmI,iBAAiBlO,EAAKmB,MAM/BuE,EAAMrE,YAAYyE,EAAOkI,mBAC5BjI,EAAQiI,kBAAoBlI,EAAOkI,iBAIjCjF,GAAiC,SAAjBA,IAClBhD,EAAQgD,aAAejD,EAAOiD,cAIS,mBAA9BjD,EAAOqI,oBAChBpI,EAAQqI,iBAAiB,WAAYtI,EAAOqI,oBAIP,mBAA5BrI,EAAOuI,kBAAmCtI,EAAQuI,QAC3DvI,EAAQuI,OAAOF,iBAAiB,WAAYtI,EAAOuI,mBAGjDvI,EAAOkG,aAAelG,EAAOoG,UAG/BN,EAAa,SAAS2C,GACfxI,IAGL4F,GAAQ4C,GAAWA,GAAUA,EAAOtN,KAAQ,IAAI8F,EAAkBwH,GAClExI,EAAQyI,QACRzI,EAAU,OAGZD,EAAOkG,aAAelG,EAAOkG,YAAYyC,UAAU7C,GAC/C9F,EAAOoG,SACTpG,EAAOoG,OAAOwC,QAAU9C,IAAe9F,EAAOoG,OAAOkC,iBAAiB,QAASxC,KAI9EC,IACHA,EAAc,MAGhB,IAAI8C,EAAWnD,EAAckB,GAEzBiC,IAA+D,IAAnD,CAAE,OAAQ,QAAS,QAASpJ,QAAQoJ,GAClDhD,EAAO,IAAIhG,EAAW,wBAA0BgJ,EAAW,IAAKhJ,EAAWiJ,gBAAiB9I,IAM9FC,EAAQ8I,KAAKhD,Q,6BCzNjB,IAAIiD,EAAgB,EAAQ,IACxBC,EAAc,EAAQ,IAW1B7Q,EAAOD,QAAU,SAAuB0O,EAASqC,GAC/C,OAAIrC,IAAYmC,EAAcE,GACrBD,EAAYpC,EAASqC,GAEvBA,I,6BChBT9Q,EAAOD,QAAU,SAAkByB,GACjC,SAAUA,IAASA,EAAMuH,c,6BCD3B,IAAIvB,EAAQ,EAAQ,GAUpBxH,EAAOD,QAAU,SAAqBgR,EAASC,GAE7CA,EAAUA,GAAW,GACrB,IAAIpJ,EAAS,GAEb,SAASqJ,EAAeC,EAAQC,GAC9B,OAAI3J,EAAMlE,cAAc4N,IAAW1J,EAAMlE,cAAc6N,GAC9C3J,EAAMlC,MAAM4L,EAAQC,GAClB3J,EAAMlE,cAAc6N,GACtB3J,EAAMlC,MAAM,GAAI6L,GACd3J,EAAMxE,QAAQmO,GAChBA,EAAOvO,QAETuO,EAIT,SAASC,EAAoBxK,GAC3B,OAAKY,EAAMrE,YAAY6N,EAAQpK,IAEnBY,EAAMrE,YAAY4N,EAAQnK,SAA/B,EACEqK,OAAe9J,EAAW4J,EAAQnK,IAFlCqK,EAAeF,EAAQnK,GAAOoK,EAAQpK,IAOjD,SAASyK,EAAiBzK,GACxB,IAAKY,EAAMrE,YAAY6N,EAAQpK,IAC7B,OAAOqK,OAAe9J,EAAW6J,EAAQpK,IAK7C,SAAS0K,EAAiB1K,GACxB,OAAKY,EAAMrE,YAAY6N,EAAQpK,IAEnBY,EAAMrE,YAAY4N,EAAQnK,SAA/B,EACEqK,OAAe9J,EAAW4J,EAAQnK,IAFlCqK,OAAe9J,EAAW6J,EAAQpK,IAO7C,SAAS2K,EAAgB3K,GACvB,OAAIA,KAAQoK,EACHC,EAAeF,EAAQnK,GAAOoK,EAAQpK,IACpCA,KAAQmK,EACVE,OAAe9J,EAAW4J,EAAQnK,SADpC,EAKT,IAAI4K,EAAW,CACb,IAAOH,EACP,OAAUA,EACV,KAAQA,EACR,QAAWC,EACX,iBAAoBA,EACpB,kBAAqBA,EACrB,iBAAoBA,EACpB,QAAWA,EACX,eAAkBA,EAClB,gBAAmBA,EACnB,QAAWA,EACX,aAAgBA,EAChB,eAAkBA,EAClB,eAAkBA,EAClB,iBAAoBA,EACpB,mBAAsBA,EACtB,WAAcA,EACd,iBAAoBA,EACpB,cAAiBA,EACjB,eAAkBA,EAClB,UAAaA,EACb,UAAaA,EACb,WAAcA,EACd,YAAeA,EACf,WAAcA,EACd,iBAAoBA,EACpB,eAAkBC,GASpB,OANA/J,EAAM1D,QAAQ7C,OAAOwQ,KAAKV,GAASW,OAAOzQ,OAAOwQ,KAAKT,KAAW,SAA4BpK,GAC3F,IAAItB,EAAQkM,EAAS5K,IAASwK,EAC1BO,EAAcrM,EAAMsB,GACvBY,EAAMrE,YAAYwO,IAAgBrM,IAAUiM,IAAqB3J,EAAOhB,GAAQ+K,MAG5E/J,I,cClGT5H,EAAOD,QAAU,CACf,QAAW,W,gBCDbC,EAAOD,QAAU,EAAQ,K,6BCEzB,IAAIyH,EAAQ,EAAQ,GAChBzF,EAAO,EAAQ,GACf6P,EAAQ,EAAQ,IAChBC,EAAc,EAAQ,IA4B1B,IAAIC,EAnBJ,SAASC,EAAeC,GACtB,IAAIC,EAAU,IAAIL,EAAMI,GACpBE,EAAWnQ,EAAK6P,EAAMzP,UAAU0F,QAASoK,GAa7C,OAVAzK,EAAM9B,OAAOwM,EAAUN,EAAMzP,UAAW8P,GAGxCzK,EAAM9B,OAAOwM,EAAUD,GAGvBC,EAASrQ,OAAS,SAAgBsQ,GAChC,OAAOJ,EAAeF,EAAYG,EAAeG,KAG5CD,EAIGH,CA3BG,EAAQ,IA8BvBD,EAAMF,MAAQA,EAGdE,EAAMjJ,cAAgB,EAAQ,GAC9BiJ,EAAMM,YAAc,EAAQ,IAC5BN,EAAMO,SAAW,EAAQ,IACzBP,EAAMQ,QAAU,EAAQ,IAAcC,QACtCT,EAAM5I,WAAa,EAAQ,GAG3B4I,EAAMrK,WAAa,EAAQ,GAG3BqK,EAAMU,OAASV,EAAMjJ,cAGrBiJ,EAAMW,IAAM,SAAaC,GACvB,OAAOnF,QAAQkF,IAAIC,IAErBZ,EAAMa,OAAS,EAAQ,IAGvBb,EAAMc,aAAe,EAAQ,IAE7B5S,EAAOD,QAAU+R,EAGjB9R,EAAOD,QAAQ8S,QAAUf,G,6BC7DzB,IAAItK,EAAQ,EAAQ,GAChB0F,EAAW,EAAQ,GACnB4F,EAAqB,EAAQ,IAC7BC,EAAkB,EAAQ,IAC1BlB,EAAc,EAAQ,IACtB1E,EAAgB,EAAQ,GACxB6F,EAAY,EAAQ,IAEpBC,EAAaD,EAAUC,WAM3B,SAASrB,EAAMO,GACbhS,KAAKoJ,SAAW4I,EAChBhS,KAAK+S,aAAe,CAClBrL,QAAS,IAAIiL,EACbhL,SAAU,IAAIgL,GASlBlB,EAAMzP,UAAU0F,QAAU,SAAiBsL,EAAavL,GAG3B,iBAAhBuL,GACTvL,EAASA,GAAU,IACZ+D,IAAMwH,EAEbvL,EAASuL,GAAe,IAG1BvL,EAASiK,EAAY1R,KAAKoJ,SAAU3B,IAGzB0D,OACT1D,EAAO0D,OAAS1D,EAAO0D,OAAOzI,cACrB1C,KAAKoJ,SAAS+B,OACvB1D,EAAO0D,OAASnL,KAAKoJ,SAAS+B,OAAOzI,cAErC+E,EAAO0D,OAAS,MAGlB,IAAI9B,EAAe5B,EAAO4B,kBAELrC,IAAjBqC,GACFwJ,EAAUI,cAAc5J,EAAc,CACpCkB,kBAAmBuI,EAAWzJ,aAAayJ,EAAWI,SACtD1I,kBAAmBsI,EAAWzJ,aAAayJ,EAAWI,SACtDhH,oBAAqB4G,EAAWzJ,aAAayJ,EAAWI,WACvD,GAIL,IAAIC,EAA0B,GAC1BC,GAAiC,EACrCpT,KAAK+S,aAAarL,QAAQ/D,SAAQ,SAAoC0P,GACjC,mBAAxBA,EAAYC,UAA0D,IAAhCD,EAAYC,QAAQ7L,KAIrE2L,EAAiCA,GAAkCC,EAAYE,YAE/EJ,EAAwBK,QAAQH,EAAYI,UAAWJ,EAAYK,cAGrE,IAKIC,EALAC,EAA2B,GAO/B,GANA5T,KAAK+S,aAAapL,SAAShE,SAAQ,SAAkC0P,GACnEO,EAAyB7H,KAAKsH,EAAYI,UAAWJ,EAAYK,cAK9DN,EAAgC,CACnC,IAAIS,EAAQ,CAACjB,OAAiB5L,GAM9B,IAJAjE,MAAMf,UAAUwR,QAAQnI,MAAMwI,EAAOV,GACrCU,EAAQA,EAAMtC,OAAOqC,GAErBD,EAAUvG,QAAQC,QAAQ5F,GACnBoM,EAAM/P,QACX6P,EAAUA,EAAQG,KAAKD,EAAME,QAASF,EAAME,SAG9C,OAAOJ,EAKT,IADA,IAAIK,EAAYvM,EACT0L,EAAwBrP,QAAQ,CACrC,IAAImQ,EAAcd,EAAwBY,QACtCG,EAAaf,EAAwBY,QACzC,IACEC,EAAYC,EAAYD,GACxB,MAAOzL,GACP2L,EAAW3L,GACX,OAIJ,IACEoL,EAAUf,EAAgBoB,GAC1B,MAAOzL,GACP,OAAO6E,QAAQE,OAAO/E,GAGxB,KAAOqL,EAAyB9P,QAC9B6P,EAAUA,EAAQG,KAAKF,EAAyBG,QAASH,EAAyBG,SAGpF,OAAOJ,GAGTlC,EAAMzP,UAAUmS,OAAS,SAAgB1M,GACvCA,EAASiK,EAAY1R,KAAKoJ,SAAU3B,GACpC,IAAI4G,EAAWrB,EAAcvF,EAAO6G,QAAS7G,EAAO+D,KACpD,OAAOuB,EAASsB,EAAU5G,EAAOgE,OAAQhE,EAAOiE,mBAIlDrE,EAAM1D,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6BwH,GAE/EsG,EAAMzP,UAAUmJ,GAAU,SAASK,EAAK/D,GACtC,OAAOzH,KAAK0H,QAAQgK,EAAYjK,GAAU,GAAI,CAC5C0D,OAAQA,EACRK,IAAKA,EACL/B,MAAOhC,GAAU,IAAIgC,YAK3BpC,EAAM1D,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BwH,GAGrE,SAASiJ,EAAmBC,GAC1B,OAAO,SAAoB7I,EAAK/B,EAAMhC,GACpC,OAAOzH,KAAK0H,QAAQgK,EAAYjK,GAAU,GAAI,CAC5C0D,OAAQA,EACRjC,QAASmL,EAAS,CAChB,eAAgB,uBACd,GACJ7I,IAAKA,EACL/B,KAAMA,MAKZgI,EAAMzP,UAAUmJ,GAAUiJ,IAE1B3C,EAAMzP,UAAUmJ,EAAS,QAAUiJ,GAAmB,MAGxDvU,EAAOD,QAAU6R,G,6BC7JjB,IAAIpK,EAAQ,EAAQ,GAEpB,SAASsL,IACP3S,KAAKsU,SAAW,GAWlB3B,EAAmB3Q,UAAUuS,IAAM,SAAad,EAAWC,EAAUc,GAOnE,OANAxU,KAAKsU,SAASvI,KAAK,CACjB0H,UAAWA,EACXC,SAAUA,EACVH,cAAaiB,GAAUA,EAAQjB,YAC/BD,QAASkB,EAAUA,EAAQlB,QAAU,OAEhCtT,KAAKsU,SAASxQ,OAAS,GAQhC6O,EAAmB3Q,UAAUyS,MAAQ,SAAeC,GAC9C1U,KAAKsU,SAASI,KAChB1U,KAAKsU,SAASI,GAAM,OAYxB/B,EAAmB3Q,UAAU2B,QAAU,SAAiBE,GACtDwD,EAAM1D,QAAQ3D,KAAKsU,UAAU,SAAwBK,GACzC,OAANA,GACF9Q,EAAG8Q,OAKT9U,EAAOD,QAAU+S,G,6BCnDjB,IAAItL,EAAQ,EAAQ,GAChBuN,EAAgB,EAAQ,IACxB1C,EAAW,EAAQ,IACnB9I,EAAW,EAAQ,GACnBV,EAAgB,EAAQ,GAK5B,SAASmM,EAA6BpN,GAKpC,GAJIA,EAAOkG,aACTlG,EAAOkG,YAAYmH,mBAGjBrN,EAAOoG,QAAUpG,EAAOoG,OAAOwC,QACjC,MAAM,IAAI3H,EAUd7I,EAAOD,QAAU,SAAyB6H,GA8BxC,OA7BAoN,EAA6BpN,GAG7BA,EAAOyB,QAAUzB,EAAOyB,SAAW,GAGnCzB,EAAOgC,KAAOmL,EAAcrU,KAC1BkH,EACAA,EAAOgC,KACPhC,EAAOyB,QACPzB,EAAO+B,kBAIT/B,EAAOyB,QAAU7B,EAAMlC,MACrBsC,EAAOyB,QAAQgC,QAAU,GACzBzD,EAAOyB,QAAQzB,EAAO0D,SAAW,GACjC1D,EAAOyB,SAGT7B,EAAM1D,QACJ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WAClD,SAA2BwH,UAClB1D,EAAOyB,QAAQiC,OAIZ1D,EAAO0B,SAAWC,EAASD,SAE1B1B,GAAQqM,MAAK,SAA6BnM,GAWvD,OAVAkN,EAA6BpN,GAG7BE,EAAS8B,KAAOmL,EAAcrU,KAC5BkH,EACAE,EAAS8B,KACT9B,EAASuB,QACTzB,EAAO6C,mBAGF3C,KACN,SAA4BoN,GAe7B,OAdK7C,EAAS6C,KACZF,EAA6BpN,GAGzBsN,GAAUA,EAAOpN,WACnBoN,EAAOpN,SAAS8B,KAAOmL,EAAcrU,KACnCkH,EACAsN,EAAOpN,SAAS8B,KAChBsL,EAAOpN,SAASuB,QAChBzB,EAAO6C,qBAKN8C,QAAQE,OAAOyH,Q,6BClF1B,IAAI1N,EAAQ,EAAQ,GAChB+B,EAAW,EAAQ,GAUvBvJ,EAAOD,QAAU,SAAuB6J,EAAMP,EAAS8L,GACrD,IAAIlD,EAAU9R,MAAQoJ,EAMtB,OAJA/B,EAAM1D,QAAQqR,GAAK,SAAmBnR,GACpC4F,EAAO5F,EAAGtD,KAAKuR,EAASrI,EAAMP,MAGzBO,I,6BClBT,IAAIpC,EAAQ,EAAQ,GAEpBxH,EAAOD,QAAU,SAA6BsJ,EAAS+L,GACrD5N,EAAM1D,QAAQuF,GAAS,SAAuB7H,EAAOV,GAC/CA,IAASsU,GAAkBtU,EAAKmO,gBAAkBmG,EAAenG,gBACnE5F,EAAQ+L,GAAkB5T,SACnB6H,EAAQvI,S,6BCNrB,IAAI2G,EAAa,EAAQ,GASzBzH,EAAOD,QAAU,SAAgByN,EAASC,EAAQ3F,GAChD,IAAIsD,EAAiBtD,EAASF,OAAOwD,eAChCtD,EAASS,QAAW6C,IAAkBA,EAAetD,EAASS,QAGjEkF,EAAO,IAAIhG,EACT,mCAAqCK,EAASS,OAC9C,CAACd,EAAWiJ,gBAAiBjJ,EAAWqD,kBAAkBuK,KAAKC,MAAMxN,EAASS,OAAS,KAAO,GAC9FT,EAASF,OACTE,EAASD,QACTC,IAPF0F,EAAQ1F,K,6BCZZ,IAAIN,EAAQ,EAAQ,GAEpBxH,EAAOD,QACLyH,EAAMvC,uBAIK,CACLsQ,MAAO,SAAezU,EAAMU,EAAOgU,EAASC,EAAMC,EAAQC,GACxD,IAAIC,EAAS,GACbA,EAAO1J,KAAKpL,EAAO,IAAM4K,mBAAmBlK,IAExCgG,EAAM1C,SAAS0Q,IACjBI,EAAO1J,KAAK,WAAa,IAAI2J,KAAKL,GAASM,eAGzCtO,EAAM3C,SAAS4Q,IACjBG,EAAO1J,KAAK,QAAUuJ,GAGpBjO,EAAM3C,SAAS6Q,IACjBE,EAAO1J,KAAK,UAAYwJ,IAGX,IAAXC,GACFC,EAAO1J,KAAK,UAGd7G,SAASuQ,OAASA,EAAOzJ,KAAK,OAGhC4D,KAAM,SAAcjP,GAClB,IAAIiV,EAAQ1Q,SAASuQ,OAAOG,MAAM,IAAIC,OAAO,aAAelV,EAAO,cACnE,OAAQiV,EAAQE,mBAAmBF,EAAM,IAAM,MAGjDG,OAAQ,SAAgBpV,GACtBX,KAAKoV,MAAMzU,EAAM,GAAI+U,KAAKM,MAAQ,SAO/B,CACLZ,MAAO,aACPxF,KAAM,WAAkB,OAAO,MAC/BmG,OAAQ,e,6BCzChBlW,EAAOD,QAAU,SAAuB4L,GAItC,MAAO,8BAA8ByK,KAAKzK,K,6BCH5C3L,EAAOD,QAAU,SAAqB0O,EAAS4H,GAC7C,OAAOA,EACH5H,EAAQ1I,QAAQ,OAAQ,IAAM,IAAMsQ,EAAYtQ,QAAQ,OAAQ,IAChE0I,I,6BCVN,IAAIjH,EAAQ,EAAQ,GAIhB8O,EAAoB,CACtB,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,cAgB5BtW,EAAOD,QAAU,SAAsBsJ,GACrC,IACIvH,EACAmB,EACA1C,EAHAgW,EAAS,GAKb,OAAKlN,GAEL7B,EAAM1D,QAAQuF,EAAQmN,MAAM,OAAO,SAAgBC,GAKjD,GAJAlW,EAAIkW,EAAKpP,QAAQ,KACjBvF,EAAM0F,EAAM1B,KAAK2Q,EAAKC,OAAO,EAAGnW,IAAIsC,cACpCI,EAAMuE,EAAM1B,KAAK2Q,EAAKC,OAAOnW,EAAI,IAE7BuB,EAAK,CACP,GAAIyU,EAAOzU,IAAQwU,EAAkBjP,QAAQvF,IAAQ,EACnD,OAGAyU,EAAOzU,GADG,eAARA,GACayU,EAAOzU,GAAOyU,EAAOzU,GAAO,IAAI4P,OAAO,CAACzO,IAEzCsT,EAAOzU,GAAOyU,EAAOzU,GAAO,KAAOmB,EAAMA,MAKtDsT,GAnBgBA,I,6BC9BzB,IAAI/O,EAAQ,EAAQ,GAEpBxH,EAAOD,QACLyH,EAAMvC,uBAIJ,WACE,IAEI0R,EAFAC,EAAO,kBAAkBR,KAAKlR,UAAU2R,WACxCC,EAAiBzR,SAAS0R,cAAc,KAS5C,SAASC,EAAWrL,GAClB,IAAIsL,EAAOtL,EAWX,OATIiL,IAEFE,EAAeI,aAAa,OAAQD,GACpCA,EAAOH,EAAeG,MAGxBH,EAAeI,aAAa,OAAQD,GAG7B,CACLA,KAAMH,EAAeG,KACrBxG,SAAUqG,EAAerG,SAAWqG,EAAerG,SAAS1K,QAAQ,KAAM,IAAM,GAChFoR,KAAML,EAAeK,KACrBC,OAAQN,EAAeM,OAASN,EAAeM,OAAOrR,QAAQ,MAAO,IAAM,GAC3EsR,KAAMP,EAAeO,KAAOP,EAAeO,KAAKtR,QAAQ,KAAM,IAAM,GACpEuR,SAAUR,EAAeQ,SACzBC,KAAMT,EAAeS,KACrBC,SAAiD,MAAtCV,EAAeU,SAASC,OAAO,GACxCX,EAAeU,SACf,IAAMV,EAAeU,UAY3B,OARAb,EAAYK,EAAW5R,OAAOsS,SAAST,MAQhC,SAAyBU,GAC9B,IAAIpB,EAAU/O,EAAM3C,SAAS8S,GAAeX,EAAWW,GAAcA,EACrE,OAAQpB,EAAO9F,WAAakG,EAAUlG,UAClC8F,EAAOY,OAASR,EAAUQ,MAhDlC,GAsDS,WACL,OAAO,I,6BC9DfnX,EAAOD,QAAU,SAAuB4L,GACtC,IAAIoK,EAAQ,4BAA4B6B,KAAKjM,GAC7C,OAAOoK,GAASA,EAAM,IAAM,K,cCH9B/V,EAAOD,QAAU,M,6BCCjB,IAAIuS,EAAU,EAAQ,IAAeC,QACjC9K,EAAa,EAAQ,GAErBwL,EAAa,GAGjB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,UAAUnP,SAAQ,SAASf,EAAMxC,GACrF0S,EAAWlQ,GAAQ,SAAmBL,GACpC,cAAcA,IAAUK,GAAQ,KAAOxC,EAAI,EAAI,KAAO,KAAOwC,MAIjE,IAAI8U,EAAqB,GASzB5E,EAAWzJ,aAAe,SAAsBwJ,EAAWT,EAAS7K,GAClE,SAASoQ,EAAcC,EAAKC,GAC1B,MAAO,WAAa1F,EAAU,0BAA6ByF,EAAM,IAAOC,GAAQtQ,EAAU,KAAOA,EAAU,IAI7G,OAAO,SAASlG,EAAOuW,EAAKE,GAC1B,IAAkB,IAAdjF,EACF,MAAM,IAAIvL,EACRqQ,EAAcC,EAAK,qBAAuBxF,EAAU,OAASA,EAAU,KACvE9K,EAAWyQ,gBAef,OAXI3F,IAAYsF,EAAmBE,KACjCF,EAAmBE,IAAO,EAE1BI,QAAQC,KACNN,EACEC,EACA,+BAAiCxF,EAAU,8CAK1CS,GAAYA,EAAUxR,EAAOuW,EAAKE,KAkC7CjY,EAAOD,QAAU,CACfqT,cAxBF,SAAuBuB,EAAS0D,EAAQC,GACtC,GAAuB,iBAAZ3D,EACT,MAAM,IAAIlN,EAAW,4BAA6BA,EAAW8Q,sBAI/D,IAFA,IAAI9G,EAAOxQ,OAAOwQ,KAAKkD,GACnBpU,EAAIkR,EAAKxN,OACN1D,KAAM,GAAG,CACd,IAAIwX,EAAMtG,EAAKlR,GACXyS,EAAYqF,EAAON,GACvB,GAAI/E,EAAJ,CACE,IAAIxR,EAAQmT,EAAQoD,GAChBxS,OAAmB4B,IAAV3F,GAAuBwR,EAAUxR,EAAOuW,EAAKpD,GAC1D,IAAe,IAAXpP,EACF,MAAM,IAAIkC,EAAW,UAAYsQ,EAAM,YAAcxS,EAAQkC,EAAW8Q,2BAI5E,IAAqB,IAAjBD,EACF,MAAM,IAAI7Q,EAAW,kBAAoBsQ,EAAKtQ,EAAW+Q,kBAO7DvF,WAAYA,I,6BClFd,IAAIpK,EAAgB,EAAQ,GAQ5B,SAASuJ,EAAYqG,GACnB,GAAwB,mBAAbA,EACT,MAAM,IAAIC,UAAU,gCAGtB,IAAIC,EAEJxY,KAAK2T,QAAU,IAAIvG,SAAQ,SAAyBC,GAClDmL,EAAiBnL,KAGnB,IAAIoL,EAAQzY,KAGZA,KAAK2T,QAAQG,MAAK,SAAS5D,GACzB,GAAKuI,EAAMC,WAAX,CAEA,IAAItY,EACAC,EAAIoY,EAAMC,WAAW5U,OAEzB,IAAK1D,EAAI,EAAGA,EAAIC,EAAGD,IACjBqY,EAAMC,WAAWtY,GAAG8P,GAEtBuI,EAAMC,WAAa,SAIrB1Y,KAAK2T,QAAQG,KAAO,SAAS6E,GAC3B,IAAIC,EAEAjF,EAAU,IAAIvG,SAAQ,SAASC,GACjCoL,EAAMrI,UAAU/C,GAChBuL,EAAWvL,KACVyG,KAAK6E,GAMR,OAJAhF,EAAQzD,OAAS,WACfuI,EAAM7K,YAAYgL,IAGbjF,GAGT2E,GAAS,SAAgB/Q,GACnBkR,EAAM1D,SAKV0D,EAAM1D,OAAS,IAAIrM,EAAcnB,GACjCiR,EAAeC,EAAM1D,YAOzB9C,EAAYjQ,UAAU8S,iBAAmB,WACvC,GAAI9U,KAAK+U,OACP,MAAM/U,KAAK+U,QAQf9C,EAAYjQ,UAAUoO,UAAY,SAAmByI,GAC/C7Y,KAAK+U,OACP8D,EAAS7Y,KAAK+U,QAIZ/U,KAAK0Y,WACP1Y,KAAK0Y,WAAW3M,KAAK8M,GAErB7Y,KAAK0Y,WAAa,CAACG,IAQvB5G,EAAYjQ,UAAU4L,YAAc,SAAqBiL,GACvD,GAAK7Y,KAAK0Y,WAAV,CAGA,IAAII,EAAQ9Y,KAAK0Y,WAAWxR,QAAQ2R,IACrB,IAAXC,GACF9Y,KAAK0Y,WAAWK,OAAOD,EAAO,KAQlC7G,EAAYjB,OAAS,WACnB,IAAId,EAIJ,MAAO,CACLuI,MAJU,IAAIxG,GAAY,SAAkBxR,GAC5CyP,EAASzP,KAITyP,OAAQA,IAIZrQ,EAAOD,QAAUqS,G,6BChGjBpS,EAAOD,QAAU,SAAgBoZ,GAC/B,OAAO,SAAc5R,GACnB,OAAO4R,EAAS3N,MAAM,KAAMjE,M,6BCtBhC,IAAIC,EAAQ,EAAQ,GAQpBxH,EAAOD,QAAU,SAAsBqZ,GACrC,OAAO5R,EAAMnE,SAAS+V,KAAsC,IAAzBA,EAAQxG","file":"axios.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"axios\"] = factory();\n\telse\n\t\troot[\"axios\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 13);\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n  // eslint-disable-next-line func-names\n  return function(thing) {\n    var str = toString.call(thing);\n    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n  };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n  type = type.toLowerCase();\n  return function isKindOf(thing) {\n    return kindOf(thing) === type;\n  };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n  if (kindOf(val) !== 'object') {\n    return false;\n  }\n\n  var prototype = Object.getPrototypeOf(val);\n  return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n  var pattern = '[object FormData]';\n  return thing && (\n    (typeof FormData === 'function' && thing instanceof FormData) ||\n    toString.call(thing) === pattern ||\n    (isFunction(thing.toString) && thing.toString() === pattern)\n  );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (isPlainObject(result[key]) && isPlainObject(val)) {\n      result[key] = merge(result[key], val);\n    } else if (isPlainObject(val)) {\n      result[key] = merge({}, val);\n    } else if (isArray(val)) {\n      result[key] = val.slice();\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n  if (content.charCodeAt(0) === 0xFEFF) {\n    content = content.slice(1);\n  }\n  return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n  constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n  constructor.prototype.constructor = constructor;\n  props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n  var props;\n  var i;\n  var prop;\n  var merged = {};\n\n  destObj = destObj || {};\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if (!merged[prop]) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = Object.getPrototypeOf(sourceObj);\n  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n  return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  var lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n  if (!thing) return null;\n  var i = thing.length;\n  if (isUndefined(i)) return null;\n  var arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n  // eslint-disable-next-line func-names\n  return function(thing) {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isPlainObject: isPlainObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim,\n  stripBOM: stripBOM,\n  inherits: inherits,\n  toFlatObject: toFlatObject,\n  kindOf: kindOf,\n  kindOfTest: kindOfTest,\n  endsWith: endsWith,\n  toArray: toArray,\n  isTypedArray: isTypedArray,\n  isFileList: isFileList\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n  Error.call(this);\n  this.message = message;\n  this.name = 'AxiosError';\n  code && (this.code = code);\n  config && (this.config = config);\n  request && (this.request = request);\n  response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n  toJSON: function toJSON() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code,\n      status: this.response && this.response.status ? this.response.status : null\n    };\n  }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n  'ERR_BAD_OPTION_VALUE',\n  'ERR_BAD_OPTION',\n  'ECONNABORTED',\n  'ETIMEDOUT',\n  'ERR_NETWORK',\n  'ERR_FR_TOO_MANY_REDIRECTS',\n  'ERR_DEPRECATED',\n  'ERR_BAD_RESPONSE',\n  'ERR_BAD_REQUEST',\n  'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n  descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n  var axiosError = Object.create(prototype);\n\n  utils.toFlatObject(error, axiosError, function filter(obj) {\n    return obj !== Error.prototype;\n  });\n\n  AxiosError.call(axiosError, error.message, code, config, request, response);\n\n  axiosError.name = error.name;\n\n  customProps && Object.assign(axiosError, customProps);\n\n  return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n  this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n  __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('../adapters/xhr');\n  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('../adapters/http');\n  }\n  return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n\n    var isObjectPayload = utils.isObject(data);\n    var contentType = headers && headers['Content-Type'];\n\n    var isFileList;\n\n    if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n      var _FormData = this.env && this.env.FormData;\n      return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n    } else if (isObjectPayload || contentType === 'application/json') {\n      setContentTypeIfUnset(headers, 'application/json');\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    var transitional = this.transitional || defaults.transitional;\n    var silentJSONParsing = transitional && transitional.silentJSONParsing;\n    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n      try {\n        return JSON.parse(data);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: require('./env/FormData')\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*'\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\nmodule.exports = {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new FormData();\n\n  var stack = [];\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  function build(data, parentKey) {\n    if (utils.isPlainObject(data) || utils.isArray(data)) {\n      if (stack.indexOf(data) !== -1) {\n        throw Error('Circular reference detected in ' + parentKey);\n      }\n\n      stack.push(data);\n\n      utils.forEach(data, function each(value, key) {\n        if (utils.isUndefined(value)) return;\n        var fullKey = parentKey ? parentKey + '.' + key : key;\n        var arr;\n\n        if (value && !parentKey && typeof value === 'object') {\n          if (utils.endsWith(key, '{}')) {\n            // eslint-disable-next-line no-param-reassign\n            value = JSON.stringify(value);\n          } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n            // eslint-disable-next-line func-names\n            arr.forEach(function(el) {\n              !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n            });\n            return;\n          }\n        }\n\n        build(value, fullKey);\n      });\n\n      stack.pop();\n    } else {\n      formData.append(parentKey, convertValue(data));\n    }\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n    var responseType = config.responseType;\n    var onCanceled;\n    function done() {\n      if (config.cancelToken) {\n        config.cancelToken.unsubscribe(onCanceled);\n      }\n\n      if (config.signal) {\n        config.signal.removeEventListener('abort', onCanceled);\n      }\n    }\n\n    if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    var fullPath = buildFullPath(config.baseURL, config.url);\n\n    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?\n        request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n      var transitional = config.transitional || transitionalDefaults;\n      if (config.timeoutErrorMessage) {\n        timeoutErrorMessage = config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(config.withCredentials)) {\n      request.withCredentials = !!config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = config.responseType;\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken || config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = function(cancel) {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n        request.abort();\n        request = null;\n      };\n\n      config.cancelToken && config.cancelToken.subscribe(onCanceled);\n      if (config.signal) {\n        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    if (!requestData) {\n      requestData = null;\n    }\n\n    var protocol = parseProtocol(fullPath);\n\n    if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n  if (baseURL && !isAbsoluteURL(requestedURL)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  function getMergedValue(target, source) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge(target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDeepProperties(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(prop) {\n    if (!utils.isUndefined(config2[prop])) {\n      return getMergedValue(undefined, config2[prop]);\n    } else if (!utils.isUndefined(config1[prop])) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(prop) {\n    if (prop in config2) {\n      return getMergedValue(config1[prop], config2[prop]);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, config1[prop]);\n    }\n  }\n\n  var mergeMap = {\n    'url': valueFromConfig2,\n    'method': valueFromConfig2,\n    'data': valueFromConfig2,\n    'baseURL': defaultToConfig2,\n    'transformRequest': defaultToConfig2,\n    'transformResponse': defaultToConfig2,\n    'paramsSerializer': defaultToConfig2,\n    'timeout': defaultToConfig2,\n    'timeoutMessage': defaultToConfig2,\n    'withCredentials': defaultToConfig2,\n    'adapter': defaultToConfig2,\n    'responseType': defaultToConfig2,\n    'xsrfCookieName': defaultToConfig2,\n    'xsrfHeaderName': defaultToConfig2,\n    'onUploadProgress': defaultToConfig2,\n    'onDownloadProgress': defaultToConfig2,\n    'decompress': defaultToConfig2,\n    'maxContentLength': defaultToConfig2,\n    'maxBodyLength': defaultToConfig2,\n    'beforeRedirect': defaultToConfig2,\n    'transport': defaultToConfig2,\n    'httpAgent': defaultToConfig2,\n    'httpsAgent': defaultToConfig2,\n    'cancelToken': defaultToConfig2,\n    'socketPath': defaultToConfig2,\n    'responseEncoding': defaultToConfig2,\n    'validateStatus': mergeDirectKeys\n  };\n\n  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n    var merge = mergeMap[prop] || mergeDeepProperties;\n    var configValue = merge(prop);\n    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n  });\n\n  return config;\n};\n","module.exports = {\n  \"version\": \"0.27.2\"\n};","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof configOrUrl === 'string') {\n    config = config || {};\n    config.url = configOrUrl;\n  } else {\n    config = configOrUrl || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n\n  // Set config.method\n  if (config.method) {\n    config.method = config.method.toLowerCase();\n  } else if (this.defaults.method) {\n    config.method = this.defaults.method.toLowerCase();\n  } else {\n    config.method = 'get';\n  }\n\n  var transitional = config.transitional;\n\n  if (transitional !== undefined) {\n    validator.assertOptions(transitional, {\n      silentJSONParsing: validators.transitional(validators.boolean),\n      forcedJSONParsing: validators.transitional(validators.boolean),\n      clarifyTimeoutError: validators.transitional(validators.boolean)\n    }, false);\n  }\n\n  // filter out skipped interceptors\n  var requestInterceptorChain = [];\n  var synchronousRequestInterceptors = true;\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n      return;\n    }\n\n    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var responseInterceptorChain = [];\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  var promise;\n\n  if (!synchronousRequestInterceptors) {\n    var chain = [dispatchRequest, undefined];\n\n    Array.prototype.unshift.apply(chain, requestInterceptorChain);\n    chain = chain.concat(responseInterceptorChain);\n\n    promise = Promise.resolve(config);\n    while (chain.length) {\n      promise = promise.then(chain.shift(), chain.shift());\n    }\n\n    return promise;\n  }\n\n\n  var newConfig = config;\n  while (requestInterceptorChain.length) {\n    var onFulfilled = requestInterceptorChain.shift();\n    var onRejected = requestInterceptorChain.shift();\n    try {\n      newConfig = onFulfilled(newConfig);\n    } catch (error) {\n      onRejected(error);\n      break;\n    }\n  }\n\n  try {\n    promise = dispatchRequest(newConfig);\n  } catch (error) {\n    return Promise.reject(error);\n  }\n\n  while (responseInterceptorChain.length) {\n    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  var fullPath = buildFullPath(config.baseURL, config.url);\n  return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method: method,\n      url: url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method: method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url: url,\n        data: data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected,\n    synchronous: options ? options.synchronous : false,\n    runWhen: options ? options.runWhen : null\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  var context = this || defaults;\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(context, data, headers);\n  });\n\n  return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n  var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return function(value, opt, opts) {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  var keys = Object.keys(options);\n  var i = keys.length;\n  while (i-- > 0) {\n    var opt = keys[i];\n    var validator = schema[opt];\n    if (validator) {\n      var value = options[opt];\n      var result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nmodule.exports = {\n  assertOptions: assertOptions,\n  validators: validators\n};\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n\n  // eslint-disable-next-line func-names\n  this.promise.then(function(cancel) {\n    if (!token._listeners) return;\n\n    var i;\n    var l = token._listeners.length;\n\n    for (i = 0; i < l; i++) {\n      token._listeners[i](cancel);\n    }\n    token._listeners = null;\n  });\n\n  // eslint-disable-next-line func-names\n  this.promise.then = function(onfulfilled) {\n    var _resolve;\n    // eslint-disable-next-line func-names\n    var promise = new Promise(function(resolve) {\n      token.subscribe(resolve);\n      _resolve = resolve;\n    }).then(onfulfilled);\n\n    promise.cancel = function reject() {\n      token.unsubscribe(_resolve);\n    };\n\n    return promise;\n  };\n\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new CanceledError(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n  if (this.reason) {\n    listener(this.reason);\n    return;\n  }\n\n  if (this._listeners) {\n    this._listeners.push(listener);\n  } else {\n    this._listeners = [listener];\n  }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n  if (!this._listeners) {\n    return;\n  }\n  var index = this._listeners.indexOf(listener);\n  if (index !== -1) {\n    this._listeners.splice(index, 1);\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n"],"sourceRoot":""}module.exports = require('./lib/axios');'use strict';

var utils = require('./../utils');
var settle = require('./../core/settle');
var buildFullPath = require('../core/buildFullPath');
var buildURL = require('./../helpers/buildURL');
var http = require('http');
var https = require('https');
var httpFollow = require('follow-redirects').http;
var httpsFollow = require('follow-redirects').https;
var url = require('url');
var zlib = require('zlib');
var VERSION = require('./../env/data').version;
var transitionalDefaults = require('../defaults/transitional');
var AxiosError = require('../core/AxiosError');
var CanceledError = require('../cancel/CanceledError');

var isHttps = /https:?/;

var supportedProtocols = [ 'http:', 'https:', 'file:' ];

/**
 *
 * @param {http.ClientRequestArgs} options
 * @param {AxiosProxyConfig} proxy
 * @param {string} location
 */
function setProxy(options, proxy, location) {
  options.hostname = proxy.host;
  options.host = proxy.host;
  options.port = proxy.port;
  options.path = location;

  // Basic proxy authorization
  if (proxy.auth) {
    var base64 = Buffer.from(proxy.auth.username + ':' + proxy.auth.password, 'utf8').toString('base64');
    options.headers['Proxy-Authorization'] = 'Basic ' + base64;
  }

  // If a proxy is used, any redirects must also pass through the proxy
  options.beforeRedirect = function beforeRedirect(redirection) {
    redirection.headers.host = redirection.host;
    setProxy(redirection, proxy, redirection.href);
  };
}

/*eslint consistent-return:0*/
module.exports = function httpAdapter(config) {
  return new Promise(function dispatchHttpRequest(resolvePromise, rejectPromise) {
    var onCanceled;
    function done() {
      if (config.cancelToken) {
        config.cancelToken.unsubscribe(onCanceled);
      }

      if (config.signal) {
        config.signal.removeEventListener('abort', onCanceled);
      }
    }
    var resolve = function resolve(value) {
      done();
      resolvePromise(value);
    };
    var rejected = false;
    var reject = function reject(value) {
      done();
      rejected = true;
      rejectPromise(value);
    };
    var data = config.data;
    var headers = config.headers;
    var headerNames = {};

    Object.keys(headers).forEach(function storeLowerName(name) {
      headerNames[name.toLowerCase()] = name;
    });

    // Set User-Agent (required by some servers)
    // See https://github.com/axios/axios/issues/69
    if ('user-agent' in headerNames) {
      // User-Agent is specified; handle case where no UA header is desired
      if (!headers[headerNames['user-agent']]) {
        delete headers[headerNames['user-agent']];
      }
      // Otherwise, use specified value
    } else {
      // Only set header if it hasn't been set in config
      headers['User-Agent'] = 'axios/' + VERSION;
    }

    // support for https://www.npmjs.com/package/form-data api
    if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {
      Object.assign(headers, data.getHeaders());
    } else if (data && !utils.isStream(data)) {
      if (Buffer.isBuffer(data)) {
        // Nothing to do...
      } else if (utils.isArrayBuffer(data)) {
        data = Buffer.from(new Uint8Array(data));
      } else if (utils.isString(data)) {
        data = Buffer.from(data, 'utf-8');
      } else {
        return reject(new AxiosError(
          'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',
          AxiosError.ERR_BAD_REQUEST,
          config
        ));
      }

      if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {
        return reject(new AxiosError(
          'Request body larger than maxBodyLength limit',
          AxiosError.ERR_BAD_REQUEST,
          config
        ));
      }

      // Add Content-Length header if data exists
      if (!headerNames['content-length']) {
        headers['Content-Length'] = data.length;
      }
    }

    // HTTP basic authentication
    var auth = undefined;
    if (config.auth) {
      var username = config.auth.username || '';
      var password = config.auth.password || '';
      auth = username + ':' + password;
    }

    // Parse url
    var fullPath = buildFullPath(config.baseURL, config.url);
    var parsed = url.parse(fullPath);
    var protocol = parsed.protocol || supportedProtocols[0];

    if (supportedProtocols.indexOf(protocol) === -1) {
      return reject(new AxiosError(
        'Unsupported protocol ' + protocol,
        AxiosError.ERR_BAD_REQUEST,
        config
      ));
    }

    if (!auth && parsed.auth) {
      var urlAuth = parsed.auth.split(':');
      var urlUsername = urlAuth[0] || '';
      var urlPassword = urlAuth[1] || '';
      auth = urlUsername + ':' + urlPassword;
    }

    if (auth && headerNames.authorization) {
      delete headers[headerNames.authorization];
    }

    var isHttpsRequest = isHttps.test(protocol);
    var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;

    try {
      buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, '');
    } catch (err) {
      var customErr = new Error(err.message);
      customErr.config = config;
      customErr.url = config.url;
      customErr.exists = true;
      reject(customErr);
    }

    var options = {
      path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''),
      method: config.method.toUpperCase(),
      headers: headers,
      agent: agent,
      agents: { http: config.httpAgent, https: config.httpsAgent },
      auth: auth
    };

    if (config.socketPath) {
      options.socketPath = config.socketPath;
    } else {
      options.hostname = parsed.hostname;
      options.port = parsed.port;
    }

    var proxy = config.proxy;
    if (!proxy && proxy !== false) {
      var proxyEnv = protocol.slice(0, -1) + '_proxy';
      var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()];
      if (proxyUrl) {
        var parsedProxyUrl = url.parse(proxyUrl);
        var noProxyEnv = process.env.no_proxy || process.env.NO_PROXY;
        var shouldProxy = true;

        if (noProxyEnv) {
          var noProxy = noProxyEnv.split(',').map(function trim(s) {
            return s.trim();
          });

          shouldProxy = !noProxy.some(function proxyMatch(proxyElement) {
            if (!proxyElement) {
              return false;
            }
            if (proxyElement === '*') {
              return true;
            }
            if (proxyElement[0] === '.' &&
                parsed.hostname.substr(parsed.hostname.length - proxyElement.length) === proxyElement) {
              return true;
            }

            return parsed.hostname === proxyElement;
          });
        }

        if (shouldProxy) {
          proxy = {
            host: parsedProxyUrl.hostname,
            port: parsedProxyUrl.port,
            protocol: parsedProxyUrl.protocol
          };

          if (parsedProxyUrl.auth) {
            var proxyUrlAuth = parsedProxyUrl.auth.split(':');
            proxy.auth = {
              username: proxyUrlAuth[0],
              password: proxyUrlAuth[1]
            };
          }
        }
      }
    }

    if (proxy) {
      options.headers.host = parsed.hostname + (parsed.port ? ':' + parsed.port : '');
      setProxy(options, proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);
    }

    var transport;
    var isHttpsProxy = isHttpsRequest && (proxy ? isHttps.test(proxy.protocol) : true);
    if (config.transport) {
      transport = config.transport;
    } else if (config.maxRedirects === 0) {
      transport = isHttpsProxy ? https : http;
    } else {
      if (config.maxRedirects) {
        options.maxRedirects = config.maxRedirects;
      }
      if (config.beforeRedirect) {
        options.beforeRedirect = config.beforeRedirect;
      }
      transport = isHttpsProxy ? httpsFollow : httpFollow;
    }

    if (config.maxBodyLength > -1) {
      options.maxBodyLength = config.maxBodyLength;
    }

    if (config.insecureHTTPParser) {
      options.insecureHTTPParser = config.insecureHTTPParser;
    }

    // Create the request
    var req = transport.request(options, function handleResponse(res) {
      if (req.aborted) return;

      // uncompress the response body transparently if required
      var stream = res;

      // return the last request in case of redirects
      var lastRequest = res.req || req;


      // if no content, is HEAD request or decompress disabled we should not decompress
      if (res.statusCode !== 204 && lastRequest.method !== 'HEAD' && config.decompress !== false) {
        switch (res.headers['content-encoding']) {
        /*eslint default-case:0*/
        case 'gzip':
        case 'compress':
        case 'deflate':
        // add the unzipper to the body stream processing pipeline
          stream = stream.pipe(zlib.createUnzip());

          // remove the content-encoding in order to not confuse downstream operations
          delete res.headers['content-encoding'];
          break;
        }
      }

      var response = {
        status: res.statusCode,
        statusText: res.statusMessage,
        headers: res.headers,
        config: config,
        request: lastRequest
      };

      if (config.responseType === 'stream') {
        response.data = stream;
        settle(resolve, reject, response);
      } else {
        var responseBuffer = [];
        var totalResponseBytes = 0;
        stream.on('data', function handleStreamData(chunk) {
          responseBuffer.push(chunk);
          totalResponseBytes += chunk.length;

          // make sure the content length is not over the maxContentLength if specified
          if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {
            // stream.destoy() emit aborted event before calling reject() on Node.js v16
            rejected = true;
            stream.destroy();
            reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',
              AxiosError.ERR_BAD_RESPONSE, config, lastRequest));
          }
        });

        stream.on('aborted', function handlerStreamAborted() {
          if (rejected) {
            return;
          }
          stream.destroy();
          reject(new AxiosError(
            'maxContentLength size of ' + config.maxContentLength + ' exceeded',
            AxiosError.ERR_BAD_RESPONSE,
            config,
            lastRequest
          ));
        });

        stream.on('error', function handleStreamError(err) {
          if (req.aborted) return;
          reject(AxiosError.from(err, null, config, lastRequest));
        });

        stream.on('end', function handleStreamEnd() {
          try {
            var responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);
            if (config.responseType !== 'arraybuffer') {
              responseData = responseData.toString(config.responseEncoding);
              if (!config.responseEncoding || config.responseEncoding === 'utf8') {
                responseData = utils.stripBOM(responseData);
              }
            }
            response.data = responseData;
          } catch (err) {
            reject(AxiosError.from(err, null, config, response.request, response));
          }
          settle(resolve, reject, response);
        });
      }
    });

    // Handle errors
    req.on('error', function handleRequestError(err) {
      // @todo remove
      // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;
      reject(AxiosError.from(err, null, config, req));
    });

    // set tcp keep alive to prevent drop connection by peer
    req.on('socket', function handleRequestSocket(socket) {
      // default interval of sending ack packet is 1 minute
      socket.setKeepAlive(true, 1000 * 60);
    });

    // Handle request timeout
    if (config.timeout) {
      // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.
      var timeout = parseInt(config.timeout, 10);

      if (isNaN(timeout)) {
        reject(new AxiosError(
          'error trying to parse `config.timeout` to int',
          AxiosError.ERR_BAD_OPTION_VALUE,
          config,
          req
        ));

        return;
      }

      // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.
      // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET.
      // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.
      // And then these socket which be hang up will devoring CPU little by little.
      // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.
      req.setTimeout(timeout, function handleRequestTimeout() {
        req.abort();
        var transitional = config.transitional || transitionalDefaults;
        reject(new AxiosError(
          'timeout of ' + timeout + 'ms exceeded',
          transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
          config,
          req
        ));
      });
    }

    if (config.cancelToken || config.signal) {
      // Handle cancellation
      // eslint-disable-next-line func-names
      onCanceled = function(cancel) {
        if (req.aborted) return;

        req.abort();
        reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);
      };

      config.cancelToken && config.cancelToken.subscribe(onCanceled);
      if (config.signal) {
        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
      }
    }


    // Send the request
    if (utils.isStream(data)) {
      data.on('error', function handleStreamError(err) {
        reject(AxiosError.from(err, config, null, req));
      }).pipe(req);
    } else {
      req.end(data);
    }
  });
};
# axios // adapters

The modules under `adapters/` are modules that handle dispatching a request and settling a returned `Promise` once a response is received.

## Example

```js
var settle = require('./../core/settle');

module.exports = function myAdapter(config) {
  // At this point:
  //  - config has been merged with defaults
  //  - request transformers have already run
  //  - request interceptors have already run
  
  // Make the request using config provided
  // Upon response settle the Promise

  return new Promise(function(resolve, reject) {
  
    var response = {
      data: responseData,
      status: request.status,
      statusText: request.statusText,
      headers: responseHeaders,
      config: config,
      request: request
    };

    settle(resolve, reject, response);

    // From here:
    //  - response transformers will run
    //  - response interceptors will run
  });
}
```
'use strict';

var utils = require('./../utils');
var settle = require('./../core/settle');
var cookies = require('./../helpers/cookies');
var buildURL = require('./../helpers/buildURL');
var buildFullPath = require('../core/buildFullPath');
var parseHeaders = require('./../helpers/parseHeaders');
var isURLSameOrigin = require('./../helpers/isURLSameOrigin');
var transitionalDefaults = require('../defaults/transitional');
var AxiosError = require('../core/AxiosError');
var CanceledError = require('../cancel/CanceledError');
var parseProtocol = require('../helpers/parseProtocol');

module.exports = function xhrAdapter(config) {
  return new Promise(function dispatchXhrRequest(resolve, reject) {
    var requestData = config.data;
    var requestHeaders = config.headers;
    var responseType = config.responseType;
    var onCanceled;
    function done() {
      if (config.cancelToken) {
        config.cancelToken.unsubscribe(onCanceled);
      }

      if (config.signal) {
        config.signal.removeEventListener('abort', onCanceled);
      }
    }

    if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {
      delete requestHeaders['Content-Type']; // Let the browser set it
    }

    var request = new XMLHttpRequest();

    // HTTP basic authentication
    if (config.auth) {
      var username = config.auth.username || '';
      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
    }

    var fullPath = buildFullPath(config.baseURL, config.url);

    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);

    // Set the request timeout in MS
    request.timeout = config.timeout;

    function onloadend() {
      if (!request) {
        return;
      }
      // Prepare the response
      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?
        request.responseText : request.response;
      var response = {
        data: responseData,
        status: request.status,
        statusText: request.statusText,
        headers: responseHeaders,
        config: config,
        request: request
      };

      settle(function _resolve(value) {
        resolve(value);
        done();
      }, function _reject(err) {
        reject(err);
        done();
      }, response);

      // Clean up request
      request = null;
    }

    if ('onloadend' in request) {
      // Use onloadend if available
      request.onloadend = onloadend;
    } else {
      // Listen for ready state to emulate onloadend
      request.onreadystatechange = function handleLoad() {
        if (!request || request.readyState !== 4) {
          return;
        }

        // The request errored out and we didn't get a response, this will be
        // handled by onerror instead
        // With one exception: request that using file: protocol, most browsers
        // will return status as 0 even though it's a successful request
        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
          return;
        }
        // readystate handler is calling before onerror or ontimeout handlers,
        // so we should call onloadend on the next 'tick'
        setTimeout(onloadend);
      };
    }

    // Handle browser request cancellation (as opposed to a manual cancellation)
    request.onabort = function handleAbort() {
      if (!request) {
        return;
      }

      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));

      // Clean up request
      request = null;
    };

    // Handle low level network errors
    request.onerror = function handleError() {
      // Real errors are hidden from us by the browser
      // onerror should only fire if it's a network error
      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));

      // Clean up request
      request = null;
    };

    // Handle timeout
    request.ontimeout = function handleTimeout() {
      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
      var transitional = config.transitional || transitionalDefaults;
      if (config.timeoutErrorMessage) {
        timeoutErrorMessage = config.timeoutErrorMessage;
      }
      reject(new AxiosError(
        timeoutErrorMessage,
        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
        config,
        request));

      // Clean up request
      request = null;
    };

    // Add xsrf header
    // This is only done if running in a standard browser environment.
    // Specifically not if we're in a web worker, or react-native.
    if (utils.isStandardBrowserEnv()) {
      // Add xsrf header
      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
        cookies.read(config.xsrfCookieName) :
        undefined;

      if (xsrfValue) {
        requestHeaders[config.xsrfHeaderName] = xsrfValue;
      }
    }

    // Add headers to the request
    if ('setRequestHeader' in request) {
      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
          // Remove Content-Type if data is undefined
          delete requestHeaders[key];
        } else {
          // Otherwise add header to the request
          request.setRequestHeader(key, val);
        }
      });
    }

    // Add withCredentials to request if needed
    if (!utils.isUndefined(config.withCredentials)) {
      request.withCredentials = !!config.withCredentials;
    }

    // Add responseType to request if needed
    if (responseType && responseType !== 'json') {
      request.responseType = config.responseType;
    }

    // Handle progress if needed
    if (typeof config.onDownloadProgress === 'function') {
      request.addEventListener('progress', config.onDownloadProgress);
    }

    // Not all browsers support upload events
    if (typeof config.onUploadProgress === 'function' && request.upload) {
      request.upload.addEventListener('progress', config.onUploadProgress);
    }

    if (config.cancelToken || config.signal) {
      // Handle cancellation
      // eslint-disable-next-line func-names
      onCanceled = function(cancel) {
        if (!request) {
          return;
        }
        reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);
        request.abort();
        request = null;
      };

      config.cancelToken && config.cancelToken.subscribe(onCanceled);
      if (config.signal) {
        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
      }
    }

    if (!requestData) {
      requestData = null;
    }

    var protocol = parseProtocol(fullPath);

    if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {
      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));
      return;
    }


    // Send the request
    request.send(requestData);
  });
};
'use strict';

var utils = require('./utils');
var bind = require('./helpers/bind');
var Axios = require('./core/Axios');
var mergeConfig = require('./core/mergeConfig');
var defaults = require('./defaults');

/**
 * Create an instance of Axios
 *
 * @param {Object} defaultConfig The default config for the instance
 * @return {Axios} A new instance of Axios
 */
function createInstance(defaultConfig) {
  var context = new Axios(defaultConfig);
  var instance = bind(Axios.prototype.request, context);

  // Copy axios.prototype to instance
  utils.extend(instance, Axios.prototype, context);

  // Copy context to instance
  utils.extend(instance, context);

  // Factory for creating new instances
  instance.create = function create(instanceConfig) {
    return createInstance(mergeConfig(defaultConfig, instanceConfig));
  };

  return instance;
}

// Create the default instance to be exported
var axios = createInstance(defaults);

// Expose Axios class to allow class inheritance
axios.Axios = Axios;

// Expose Cancel & CancelToken
axios.CanceledError = require('./cancel/CanceledError');
axios.CancelToken = require('./cancel/CancelToken');
axios.isCancel = require('./cancel/isCancel');
axios.VERSION = require('./env/data').version;
axios.toFormData = require('./helpers/toFormData');

// Expose AxiosError class
axios.AxiosError = require('../lib/core/AxiosError');

// alias for CanceledError for backward compatibility
axios.Cancel = axios.CanceledError;

// Expose all/spread
axios.all = function all(promises) {
  return Promise.all(promises);
};
axios.spread = require('./helpers/spread');

// Expose isAxiosError
axios.isAxiosError = require('./helpers/isAxiosError');

module.exports = axios;

// Allow use of default import syntax in TypeScript
module.exports.default = axios;
'use strict';

var AxiosError = require('../core/AxiosError');
var utils = require('../utils');

/**
 * A `CanceledError` is an object that is thrown when an operation is canceled.
 *
 * @class
 * @param {string=} message The message.
 */
function CanceledError(message) {
  // eslint-disable-next-line no-eq-null,eqeqeq
  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);
  this.name = 'CanceledError';
}

utils.inherits(CanceledError, AxiosError, {
  __CANCEL__: true
});

module.exports = CanceledError;
'use strict';

var CanceledError = require('./CanceledError');

/**
 * A `CancelToken` is an object that can be used to request cancellation of an operation.
 *
 * @class
 * @param {Function} executor The executor function.
 */
function CancelToken(executor) {
  if (typeof executor !== 'function') {
    throw new TypeError('executor must be a function.');
  }

  var resolvePromise;

  this.promise = new Promise(function promiseExecutor(resolve) {
    resolvePromise = resolve;
  });

  var token = this;

  // eslint-disable-next-line func-names
  this.promise.then(function(cancel) {
    if (!token._listeners) return;

    var i;
    var l = token._listeners.length;

    for (i = 0; i < l; i++) {
      token._listeners[i](cancel);
    }
    token._listeners = null;
  });

  // eslint-disable-next-line func-names
  this.promise.then = function(onfulfilled) {
    var _resolve;
    // eslint-disable-next-line func-names
    var promise = new Promise(function(resolve) {
      token.subscribe(resolve);
      _resolve = resolve;
    }).then(onfulfilled);

    promise.cancel = function reject() {
      token.unsubscribe(_resolve);
    };

    return promise;
  };

  executor(function cancel(message) {
    if (token.reason) {
      // Cancellation has already been requested
      return;
    }

    token.reason = new CanceledError(message);
    resolvePromise(token.reason);
  });
}

/**
 * Throws a `CanceledError` if cancellation has been requested.
 */
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
  if (this.reason) {
    throw this.reason;
  }
};

/**
 * Subscribe to the cancel signal
 */

CancelToken.prototype.subscribe = function subscribe(listener) {
  if (this.reason) {
    listener(this.reason);
    return;
  }

  if (this._listeners) {
    this._listeners.push(listener);
  } else {
    this._listeners = [listener];
  }
};

/**
 * Unsubscribe from the cancel signal
 */

CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
  if (!this._listeners) {
    return;
  }
  var index = this._listeners.indexOf(listener);
  if (index !== -1) {
    this._listeners.splice(index, 1);
  }
};

/**
 * Returns an object that contains a new `CancelToken` and a function that, when called,
 * cancels the `CancelToken`.
 */
CancelToken.source = function source() {
  var cancel;
  var token = new CancelToken(function executor(c) {
    cancel = c;
  });
  return {
    token: token,
    cancel: cancel
  };
};

module.exports = CancelToken;
'use strict';

module.exports = function isCancel(value) {
  return !!(value && value.__CANCEL__);
};
'use strict';

var utils = require('./../utils');
var buildURL = require('../helpers/buildURL');
var InterceptorManager = require('./InterceptorManager');
var dispatchRequest = require('./dispatchRequest');
var mergeConfig = require('./mergeConfig');
var buildFullPath = require('./buildFullPath');
var validator = require('../helpers/validator');

var validators = validator.validators;
/**
 * Create a new instance of Axios
 *
 * @param {Object} instanceConfig The default config for the instance
 */
function Axios(instanceConfig) {
  this.defaults = instanceConfig;
  this.interceptors = {
    request: new InterceptorManager(),
    response: new InterceptorManager()
  };
}

/**
 * Dispatch a request
 *
 * @param {Object} config The config specific for this request (merged with this.defaults)
 */
Axios.prototype.request = function request(configOrUrl, config) {
  /*eslint no-param-reassign:0*/
  // Allow for axios('example/url'[, config]) a la fetch API
  if (typeof configOrUrl === 'string') {
    config = config || {};
    config.url = configOrUrl;
  } else {
    config = configOrUrl || {};
  }

  config = mergeConfig(this.defaults, config);

  // Set config.method
  if (config.method) {
    config.method = config.method.toLowerCase();
  } else if (this.defaults.method) {
    config.method = this.defaults.method.toLowerCase();
  } else {
    config.method = 'get';
  }

  var transitional = config.transitional;

  if (transitional !== undefined) {
    validator.assertOptions(transitional, {
      silentJSONParsing: validators.transitional(validators.boolean),
      forcedJSONParsing: validators.transitional(validators.boolean),
      clarifyTimeoutError: validators.transitional(validators.boolean)
    }, false);
  }

  // filter out skipped interceptors
  var requestInterceptorChain = [];
  var synchronousRequestInterceptors = true;
  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
      return;
    }

    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;

    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
  });

  var responseInterceptorChain = [];
  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
  });

  var promise;

  if (!synchronousRequestInterceptors) {
    var chain = [dispatchRequest, undefined];

    Array.prototype.unshift.apply(chain, requestInterceptorChain);
    chain = chain.concat(responseInterceptorChain);

    promise = Promise.resolve(config);
    while (chain.length) {
      promise = promise.then(chain.shift(), chain.shift());
    }

    return promise;
  }


  var newConfig = config;
  while (requestInterceptorChain.length) {
    var onFulfilled = requestInterceptorChain.shift();
    var onRejected = requestInterceptorChain.shift();
    try {
      newConfig = onFulfilled(newConfig);
    } catch (error) {
      onRejected(error);
      break;
    }
  }

  try {
    promise = dispatchRequest(newConfig);
  } catch (error) {
    return Promise.reject(error);
  }

  while (responseInterceptorChain.length) {
    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
  }

  return promise;
};

Axios.prototype.getUri = function getUri(config) {
  config = mergeConfig(this.defaults, config);
  var fullPath = buildFullPath(config.baseURL, config.url);
  return buildURL(fullPath, config.params, config.paramsSerializer);
};

// Provide aliases for supported request methods
utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
  /*eslint func-names:0*/
  Axios.prototype[method] = function(url, config) {
    return this.request(mergeConfig(config || {}, {
      method: method,
      url: url,
      data: (config || {}).data
    }));
  };
});

utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
  /*eslint func-names:0*/

  function generateHTTPMethod(isForm) {
    return function httpMethod(url, data, config) {
      return this.request(mergeConfig(config || {}, {
        method: method,
        headers: isForm ? {
          'Content-Type': 'multipart/form-data'
        } : {},
        url: url,
        data: data
      }));
    };
  }

  Axios.prototype[method] = generateHTTPMethod();

  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
});

module.exports = Axios;
'use strict';

var utils = require('../utils');

/**
 * Create an Error with the specified message, config, error code, request and response.
 *
 * @param {string} message The error message.
 * @param {string} [code] The error code (for example, 'ECONNABORTED').
 * @param {Object} [config] The config.
 * @param {Object} [request] The request.
 * @param {Object} [response] The response.
 * @returns {Error} The created error.
 */
function AxiosError(message, code, config, request, response) {
  Error.call(this);
  this.message = message;
  this.name = 'AxiosError';
  code && (this.code = code);
  config && (this.config = config);
  request && (this.request = request);
  response && (this.response = response);
}

utils.inherits(AxiosError, Error, {
  toJSON: function toJSON() {
    return {
      // Standard
      message: this.message,
      name: this.name,
      // Microsoft
      description: this.description,
      number: this.number,
      // Mozilla
      fileName: this.fileName,
      lineNumber: this.lineNumber,
      columnNumber: this.columnNumber,
      stack: this.stack,
      // Axios
      config: this.config,
      code: this.code,
      status: this.response && this.response.status ? this.response.status : null
    };
  }
});

var prototype = AxiosError.prototype;
var descriptors = {};

[
  'ERR_BAD_OPTION_VALUE',
  'ERR_BAD_OPTION',
  'ECONNABORTED',
  'ETIMEDOUT',
  'ERR_NETWORK',
  'ERR_FR_TOO_MANY_REDIRECTS',
  'ERR_DEPRECATED',
  'ERR_BAD_RESPONSE',
  'ERR_BAD_REQUEST',
  'ERR_CANCELED'
// eslint-disable-next-line func-names
].forEach(function(code) {
  descriptors[code] = {value: code};
});

Object.defineProperties(AxiosError, descriptors);
Object.defineProperty(prototype, 'isAxiosError', {value: true});

// eslint-disable-next-line func-names
AxiosError.from = function(error, code, config, request, response, customProps) {
  var axiosError = Object.create(prototype);

  utils.toFlatObject(error, axiosError, function filter(obj) {
    return obj !== Error.prototype;
  });

  AxiosError.call(axiosError, error.message, code, config, request, response);

  axiosError.name = error.name;

  customProps && Object.assign(axiosError, customProps);

  return axiosError;
};

module.exports = AxiosError;
'use strict';

var isAbsoluteURL = require('../helpers/isAbsoluteURL');
var combineURLs = require('../helpers/combineURLs');

/**
 * Creates a new URL by combining the baseURL with the requestedURL,
 * only when the requestedURL is not already an absolute URL.
 * If the requestURL is absolute, this function returns the requestedURL untouched.
 *
 * @param {string} baseURL The base URL
 * @param {string} requestedURL Absolute or relative URL to combine
 * @returns {string} The combined full path
 */
module.exports = function buildFullPath(baseURL, requestedURL) {
  if (baseURL && !isAbsoluteURL(requestedURL)) {
    return combineURLs(baseURL, requestedURL);
  }
  return requestedURL;
};
'use strict';

var utils = require('./../utils');
var transformData = require('./transformData');
var isCancel = require('../cancel/isCancel');
var defaults = require('../defaults');
var CanceledError = require('../cancel/CanceledError');

/**
 * Throws a `CanceledError` if cancellation has been requested.
 */
function throwIfCancellationRequested(config) {
  if (config.cancelToken) {
    config.cancelToken.throwIfRequested();
  }

  if (config.signal && config.signal.aborted) {
    throw new CanceledError();
  }
}

/**
 * Dispatch a request to the server using the configured adapter.
 *
 * @param {object} config The config that is to be used for the request
 * @returns {Promise} The Promise to be fulfilled
 */
module.exports = function dispatchRequest(config) {
  throwIfCancellationRequested(config);

  // Ensure headers exist
  config.headers = config.headers || {};

  // Transform request data
  config.data = transformData.call(
    config,
    config.data,
    config.headers,
    config.transformRequest
  );

  // Flatten headers
  config.headers = utils.merge(
    config.headers.common || {},
    config.headers[config.method] || {},
    config.headers
  );

  utils.forEach(
    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
    function cleanHeaderConfig(method) {
      delete config.headers[method];
    }
  );

  var adapter = config.adapter || defaults.adapter;

  return adapter(config).then(function onAdapterResolution(response) {
    throwIfCancellationRequested(config);

    // Transform response data
    response.data = transformData.call(
      config,
      response.data,
      response.headers,
      config.transformResponse
    );

    return response;
  }, function onAdapterRejection(reason) {
    if (!isCancel(reason)) {
      throwIfCancellationRequested(config);

      // Transform response data
      if (reason && reason.response) {
        reason.response.data = transformData.call(
          config,
          reason.response.data,
          reason.response.headers,
          config.transformResponse
        );
      }
    }

    return Promise.reject(reason);
  });
};
'use strict';

var utils = require('./../utils');

function InterceptorManager() {
  this.handlers = [];
}

/**
 * Add a new interceptor to the stack
 *
 * @param {Function} fulfilled The function to handle `then` for a `Promise`
 * @param {Function} rejected The function to handle `reject` for a `Promise`
 *
 * @return {Number} An ID used to remove interceptor later
 */
InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
  this.handlers.push({
    fulfilled: fulfilled,
    rejected: rejected,
    synchronous: options ? options.synchronous : false,
    runWhen: options ? options.runWhen : null
  });
  return this.handlers.length - 1;
};

/**
 * Remove an interceptor from the stack
 *
 * @param {Number} id The ID that was returned by `use`
 */
InterceptorManager.prototype.eject = function eject(id) {
  if (this.handlers[id]) {
    this.handlers[id] = null;
  }
};

/**
 * Iterate over all the registered interceptors
 *
 * This method is particularly useful for skipping over any
 * interceptors that may have become `null` calling `eject`.
 *
 * @param {Function} fn The function to call for each interceptor
 */
InterceptorManager.prototype.forEach = function forEach(fn) {
  utils.forEach(this.handlers, function forEachHandler(h) {
    if (h !== null) {
      fn(h);
    }
  });
};

module.exports = InterceptorManager;
'use strict';

var utils = require('../utils');

/**
 * Config-specific merge-function which creates a new config-object
 * by merging two configuration objects together.
 *
 * @param {Object} config1
 * @param {Object} config2
 * @returns {Object} New object resulting from merging config2 to config1
 */
module.exports = function mergeConfig(config1, config2) {
  // eslint-disable-next-line no-param-reassign
  config2 = config2 || {};
  var config = {};

  function getMergedValue(target, source) {
    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
      return utils.merge(target, source);
    } else if (utils.isPlainObject(source)) {
      return utils.merge({}, source);
    } else if (utils.isArray(source)) {
      return source.slice();
    }
    return source;
  }

  // eslint-disable-next-line consistent-return
  function mergeDeepProperties(prop) {
    if (!utils.isUndefined(config2[prop])) {
      return getMergedValue(config1[prop], config2[prop]);
    } else if (!utils.isUndefined(config1[prop])) {
      return getMergedValue(undefined, config1[prop]);
    }
  }

  // eslint-disable-next-line consistent-return
  function valueFromConfig2(prop) {
    if (!utils.isUndefined(config2[prop])) {
      return getMergedValue(undefined, config2[prop]);
    }
  }

  // eslint-disable-next-line consistent-return
  function defaultToConfig2(prop) {
    if (!utils.isUndefined(config2[prop])) {
      return getMergedValue(undefined, config2[prop]);
    } else if (!utils.isUndefined(config1[prop])) {
      return getMergedValue(undefined, config1[prop]);
    }
  }

  // eslint-disable-next-line consistent-return
  function mergeDirectKeys(prop) {
    if (prop in config2) {
      return getMergedValue(config1[prop], config2[prop]);
    } else if (prop in config1) {
      return getMergedValue(undefined, config1[prop]);
    }
  }

  var mergeMap = {
    'url': valueFromConfig2,
    'method': valueFromConfig2,
    'data': valueFromConfig2,
    'baseURL': defaultToConfig2,
    'transformRequest': defaultToConfig2,
    'transformResponse': defaultToConfig2,
    'paramsSerializer': defaultToConfig2,
    'timeout': defaultToConfig2,
    'timeoutMessage': defaultToConfig2,
    'withCredentials': defaultToConfig2,
    'adapter': defaultToConfig2,
    'responseType': defaultToConfig2,
    'xsrfCookieName': defaultToConfig2,
    'xsrfHeaderName': defaultToConfig2,
    'onUploadProgress': defaultToConfig2,
    'onDownloadProgress': defaultToConfig2,
    'decompress': defaultToConfig2,
    'maxContentLength': defaultToConfig2,
    'maxBodyLength': defaultToConfig2,
    'beforeRedirect': defaultToConfig2,
    'transport': defaultToConfig2,
    'httpAgent': defaultToConfig2,
    'httpsAgent': defaultToConfig2,
    'cancelToken': defaultToConfig2,
    'socketPath': defaultToConfig2,
    'responseEncoding': defaultToConfig2,
    'validateStatus': mergeDirectKeys
  };

  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
    var merge = mergeMap[prop] || mergeDeepProperties;
    var configValue = merge(prop);
    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
  });

  return config;
};
# axios // core

The modules found in `core/` should be modules that are specific to the domain logic of axios. These modules would most likely not make sense to be consumed outside of the axios module, as their logic is too specific. Some examples of core modules are:

- Dispatching requests
  - Requests sent via `adapters/` (see lib/adapters/README.md)
- Managing interceptors
- Handling config
'use strict';

var AxiosError = require('./AxiosError');

/**
 * Resolve or reject a Promise based on response status.
 *
 * @param {Function} resolve A function that resolves the promise.
 * @param {Function} reject A function that rejects the promise.
 * @param {object} response The response.
 */
module.exports = function settle(resolve, reject, response) {
  var validateStatus = response.config.validateStatus;
  if (!response.status || !validateStatus || validateStatus(response.status)) {
    resolve(response);
  } else {
    reject(new AxiosError(
      'Request failed with status code ' + response.status,
      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
      response.config,
      response.request,
      response
    ));
  }
};
'use strict';

var utils = require('./../utils');
var defaults = require('../defaults');

/**
 * Transform the data for a request or a response
 *
 * @param {Object|String} data The data to be transformed
 * @param {Array} headers The headers for the request or response
 * @param {Array|Function} fns A single function or Array of functions
 * @returns {*} The resulting transformed data
 */
module.exports = function transformData(data, headers, fns) {
  var context = this || defaults;
  /*eslint no-param-reassign:0*/
  utils.forEach(fns, function transform(fn) {
    data = fn.call(context, data, headers);
  });

  return data;
};
// eslint-disable-next-line strict
module.exports = require('form-data');
'use strict';

var utils = require('../utils');
var normalizeHeaderName = require('../helpers/normalizeHeaderName');
var AxiosError = require('../core/AxiosError');
var transitionalDefaults = require('./transitional');
var toFormData = require('../helpers/toFormData');

var DEFAULT_CONTENT_TYPE = {
  'Content-Type': 'application/x-www-form-urlencoded'
};

function setContentTypeIfUnset(headers, value) {
  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
    headers['Content-Type'] = value;
  }
}

function getDefaultAdapter() {
  var adapter;
  if (typeof XMLHttpRequest !== 'undefined') {
    // For browsers use XHR adapter
    adapter = require('../adapters/xhr');
  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
    // For node use HTTP adapter
    adapter = require('../adapters/http');
  }
  return adapter;
}

function stringifySafely(rawValue, parser, encoder) {
  if (utils.isString(rawValue)) {
    try {
      (parser || JSON.parse)(rawValue);
      return utils.trim(rawValue);
    } catch (e) {
      if (e.name !== 'SyntaxError') {
        throw e;
      }
    }
  }

  return (encoder || JSON.stringify)(rawValue);
}

var defaults = {

  transitional: transitionalDefaults,

  adapter: getDefaultAdapter(),

  transformRequest: [function transformRequest(data, headers) {
    normalizeHeaderName(headers, 'Accept');
    normalizeHeaderName(headers, 'Content-Type');

    if (utils.isFormData(data) ||
      utils.isArrayBuffer(data) ||
      utils.isBuffer(data) ||
      utils.isStream(data) ||
      utils.isFile(data) ||
      utils.isBlob(data)
    ) {
      return data;
    }
    if (utils.isArrayBufferView(data)) {
      return data.buffer;
    }
    if (utils.isURLSearchParams(data)) {
      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
      return data.toString();
    }

    var isObjectPayload = utils.isObject(data);
    var contentType = headers && headers['Content-Type'];

    var isFileList;

    if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {
      var _FormData = this.env && this.env.FormData;
      return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());
    } else if (isObjectPayload || contentType === 'application/json') {
      setContentTypeIfUnset(headers, 'application/json');
      return stringifySafely(data);
    }

    return data;
  }],

  transformResponse: [function transformResponse(data) {
    var transitional = this.transitional || defaults.transitional;
    var silentJSONParsing = transitional && transitional.silentJSONParsing;
    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';

    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
      try {
        return JSON.parse(data);
      } catch (e) {
        if (strictJSONParsing) {
          if (e.name === 'SyntaxError') {
            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);
          }
          throw e;
        }
      }
    }

    return data;
  }],

  /**
   * A timeout in milliseconds to abort a request. If set to 0 (default) a
   * timeout is not created.
   */
  timeout: 0,

  xsrfCookieName: 'XSRF-TOKEN',
  xsrfHeaderName: 'X-XSRF-TOKEN',

  maxContentLength: -1,
  maxBodyLength: -1,

  env: {
    FormData: require('./env/FormData')
  },

  validateStatus: function validateStatus(status) {
    return status >= 200 && status < 300;
  },

  headers: {
    common: {
      'Accept': 'application/json, text/plain, */*'
    }
  }
};

utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
  defaults.headers[method] = {};
});

utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
});

module.exports = defaults;
'use strict';

module.exports = {
  silentJSONParsing: true,
  forcedJSONParsing: true,
  clarifyTimeoutError: false
};
module.exports = {
  "version": "0.27.2"
};# axios // env

The `data.js` file is updated automatically when the package version is upgrading. Please do not edit it manually.
'use strict';

module.exports = function bind(fn, thisArg) {
  return function wrap() {
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }
    return fn.apply(thisArg, args);
  };
};
'use strict';

var utils = require('./../utils');

function encode(val) {
  return encodeURIComponent(val).
    replace(/%3A/gi, ':').
    replace(/%24/g, '$').
    replace(/%2C/gi, ',').
    replace(/%20/g, '+').
    replace(/%5B/gi, '[').
    replace(/%5D/gi, ']');
}

/**
 * Build a URL by appending params to the end
 *
 * @param {string} url The base of the url (e.g., http://www.google.com)
 * @param {object} [params] The params to be appended
 * @returns {string} The formatted url
 */
module.exports = function buildURL(url, params, paramsSerializer) {
  /*eslint no-param-reassign:0*/
  if (!params) {
    return url;
  }

  var serializedParams;
  if (paramsSerializer) {
    serializedParams = paramsSerializer(params);
  } else if (utils.isURLSearchParams(params)) {
    serializedParams = params.toString();
  } else {
    var parts = [];

    utils.forEach(params, function serialize(val, key) {
      if (val === null || typeof val === 'undefined') {
        return;
      }

      if (utils.isArray(val)) {
        key = key + '[]';
      } else {
        val = [val];
      }

      utils.forEach(val, function parseValue(v) {
        if (utils.isDate(v)) {
          v = v.toISOString();
        } else if (utils.isObject(v)) {
          v = JSON.stringify(v);
        }
        parts.push(encode(key) + '=' + encode(v));
      });
    });

    serializedParams = parts.join('&');
  }

  if (serializedParams) {
    var hashmarkIndex = url.indexOf('#');
    if (hashmarkIndex !== -1) {
      url = url.slice(0, hashmarkIndex);
    }

    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
  }

  return url;
};
'use strict';

/**
 * Creates a new URL by combining the specified URLs
 *
 * @param {string} baseURL The base URL
 * @param {string} relativeURL The relative URL
 * @returns {string} The combined URL
 */
module.exports = function combineURLs(baseURL, relativeURL) {
  return relativeURL
    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
    : baseURL;
};
'use strict';

var utils = require('./../utils');

module.exports = (
  utils.isStandardBrowserEnv() ?

  // Standard browser envs support document.cookie
    (function standardBrowserEnv() {
      return {
        write: function write(name, value, expires, path, domain, secure) {
          var cookie = [];
          cookie.push(name + '=' + encodeURIComponent(value));

          if (utils.isNumber(expires)) {
            cookie.push('expires=' + new Date(expires).toGMTString());
          }

          if (utils.isString(path)) {
            cookie.push('path=' + path);
          }

          if (utils.isString(domain)) {
            cookie.push('domain=' + domain);
          }

          if (secure === true) {
            cookie.push('secure');
          }

          document.cookie = cookie.join('; ');
        },

        read: function read(name) {
          var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
          return (match ? decodeURIComponent(match[3]) : null);
        },

        remove: function remove(name) {
          this.write(name, '', Date.now() - 86400000);
        }
      };
    })() :

  // Non standard browser env (web workers, react-native) lack needed support.
    (function nonStandardBrowserEnv() {
      return {
        write: function write() {},
        read: function read() { return null; },
        remove: function remove() {}
      };
    })()
);
'use strict';

/*eslint no-console:0*/

/**
 * Supply a warning to the developer that a method they are using
 * has been deprecated.
 *
 * @param {string} method The name of the deprecated method
 * @param {string} [instead] The alternate method to use if applicable
 * @param {string} [docs] The documentation URL to get further details
 */
module.exports = function deprecatedMethod(method, instead, docs) {
  try {
    console.warn(
      'DEPRECATED method `' + method + '`.' +
      (instead ? ' Use `' + instead + '` instead.' : '') +
      ' This method will be removed in a future release.');

    if (docs) {
      console.warn('For more information about usage see ' + docs);
    }
  } catch (e) { /* Ignore */ }
};
'use strict';

/**
 * Determines whether the specified URL is absolute
 *
 * @param {string} url The URL to test
 * @returns {boolean} True if the specified URL is absolute, otherwise false
 */
module.exports = function isAbsoluteURL(url) {
  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
  // by any combination of letters, digits, plus, period, or hyphen.
  return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
};
'use strict';

var utils = require('./../utils');

/**
 * Determines whether the payload is an error thrown by Axios
 *
 * @param {*} payload The value to test
 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
 */
module.exports = function isAxiosError(payload) {
  return utils.isObject(payload) && (payload.isAxiosError === true);
};
'use strict';

var utils = require('./../utils');

module.exports = (
  utils.isStandardBrowserEnv() ?

  // Standard browser envs have full support of the APIs needed to test
  // whether the request URL is of the same origin as current location.
    (function standardBrowserEnv() {
      var msie = /(msie|trident)/i.test(navigator.userAgent);
      var urlParsingNode = document.createElement('a');
      var originURL;

      /**
    * Parse a URL to discover it's components
    *
    * @param {String} url The URL to be parsed
    * @returns {Object}
    */
      function resolveURL(url) {
        var href = url;

        if (msie) {
        // IE needs attribute set twice to normalize properties
          urlParsingNode.setAttribute('href', href);
          href = urlParsingNode.href;
        }

        urlParsingNode.setAttribute('href', href);

        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
        return {
          href: urlParsingNode.href,
          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
          host: urlParsingNode.host,
          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
          hostname: urlParsingNode.hostname,
          port: urlParsingNode.port,
          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
            urlParsingNode.pathname :
            '/' + urlParsingNode.pathname
        };
      }

      originURL = resolveURL(window.location.href);

      /**
    * Determine if a URL shares the same origin as the current location
    *
    * @param {String} requestURL The URL to test
    * @returns {boolean} True if URL shares the same origin, otherwise false
    */
      return function isURLSameOrigin(requestURL) {
        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
        return (parsed.protocol === originURL.protocol &&
            parsed.host === originURL.host);
      };
    })() :

  // Non standard browser envs (web workers, react-native) lack needed support.
    (function nonStandardBrowserEnv() {
      return function isURLSameOrigin() {
        return true;
      };
    })()
);
'use strict';

var utils = require('../utils');

module.exports = function normalizeHeaderName(headers, normalizedName) {
  utils.forEach(headers, function processHeader(value, name) {
    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
      headers[normalizedName] = value;
      delete headers[name];
    }
  });
};
// eslint-disable-next-line strict
module.exports = null;
'use strict';

var utils = require('./../utils');

// Headers whose duplicates are ignored by node
// c.f. https://nodejs.org/api/http.html#http_message_headers
var ignoreDuplicateOf = [
  'age', 'authorization', 'content-length', 'content-type', 'etag',
  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
  'last-modified', 'location', 'max-forwards', 'proxy-authorization',
  'referer', 'retry-after', 'user-agent'
];

/**
 * Parse headers into an object
 *
 * ```
 * Date: Wed, 27 Aug 2014 08:58:49 GMT
 * Content-Type: application/json
 * Connection: keep-alive
 * Transfer-Encoding: chunked
 * ```
 *
 * @param {String} headers Headers needing to be parsed
 * @returns {Object} Headers parsed into an object
 */
module.exports = function parseHeaders(headers) {
  var parsed = {};
  var key;
  var val;
  var i;

  if (!headers) { return parsed; }

  utils.forEach(headers.split('\n'), function parser(line) {
    i = line.indexOf(':');
    key = utils.trim(line.substr(0, i)).toLowerCase();
    val = utils.trim(line.substr(i + 1));

    if (key) {
      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
        return;
      }
      if (key === 'set-cookie') {
        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
      } else {
        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
      }
    }
  });

  return parsed;
};
'use strict';

module.exports = function parseProtocol(url) {
  var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
  return match && match[1] || '';
};
# axios // helpers

The modules found in `helpers/` should be generic modules that are _not_ specific to the domain logic of axios. These modules could theoretically be published to npm on their own and consumed by other modules or apps. Some examples of generic modules are things like:

- Browser polyfills
- Managing cookies
- Parsing HTTP headers
'use strict';

/**
 * Syntactic sugar for invoking a function and expanding an array for arguments.
 *
 * Common use case would be to use `Function.prototype.apply`.
 *
 *  ```js
 *  function f(x, y, z) {}
 *  var args = [1, 2, 3];
 *  f.apply(null, args);
 *  ```
 *
 * With `spread` this example can be re-written.
 *
 *  ```js
 *  spread(function(x, y, z) {})([1, 2, 3]);
 *  ```
 *
 * @param {Function} callback
 * @returns {Function}
 */
module.exports = function spread(callback) {
  return function wrap(arr) {
    return callback.apply(null, arr);
  };
};
'use strict';

var utils = require('../utils');

/**
 * Convert a data object to FormData
 * @param {Object} obj
 * @param {?Object} [formData]
 * @returns {Object}
 **/

function toFormData(obj, formData) {
  // eslint-disable-next-line no-param-reassign
  formData = formData || new FormData();

  var stack = [];

  function convertValue(value) {
    if (value === null) return '';

    if (utils.isDate(value)) {
      return value.toISOString();
    }

    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {
      return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
    }

    return value;
  }

  function build(data, parentKey) {
    if (utils.isPlainObject(data) || utils.isArray(data)) {
      if (stack.indexOf(data) !== -1) {
        throw Error('Circular reference detected in ' + parentKey);
      }

      stack.push(data);

      utils.forEach(data, function each(value, key) {
        if (utils.isUndefined(value)) return;
        var fullKey = parentKey ? parentKey + '.' + key : key;
        var arr;

        if (value && !parentKey && typeof value === 'object') {
          if (utils.endsWith(key, '{}')) {
            // eslint-disable-next-line no-param-reassign
            value = JSON.stringify(value);
          } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {
            // eslint-disable-next-line func-names
            arr.forEach(function(el) {
              !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));
            });
            return;
          }
        }

        build(value, fullKey);
      });

      stack.pop();
    } else {
      formData.append(parentKey, convertValue(data));
    }
  }

  build(obj);

  return formData;
}

module.exports = toFormData;
'use strict';

var VERSION = require('../env/data').version;
var AxiosError = require('../core/AxiosError');

var validators = {};

// eslint-disable-next-line func-names
['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
  validators[type] = function validator(thing) {
    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
  };
});

var deprecatedWarnings = {};

/**
 * Transitional option validator
 * @param {function|boolean?} validator - set to false if the transitional option has been removed
 * @param {string?} version - deprecated version / removed since version
 * @param {string?} message - some message with additional info
 * @returns {function}
 */
validators.transitional = function transitional(validator, version, message) {
  function formatMessage(opt, desc) {
    return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
  }

  // eslint-disable-next-line func-names
  return function(value, opt, opts) {
    if (validator === false) {
      throw new AxiosError(
        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
        AxiosError.ERR_DEPRECATED
      );
    }

    if (version && !deprecatedWarnings[opt]) {
      deprecatedWarnings[opt] = true;
      // eslint-disable-next-line no-console
      console.warn(
        formatMessage(
          opt,
          ' has been deprecated since v' + version + ' and will be removed in the near future'
        )
      );
    }

    return validator ? validator(value, opt, opts) : true;
  };
};

/**
 * Assert object's properties type
 * @param {object} options
 * @param {object} schema
 * @param {boolean?} allowUnknown
 */

function assertOptions(options, schema, allowUnknown) {
  if (typeof options !== 'object') {
    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
  }
  var keys = Object.keys(options);
  var i = keys.length;
  while (i-- > 0) {
    var opt = keys[i];
    var validator = schema[opt];
    if (validator) {
      var value = options[opt];
      var result = value === undefined || validator(value, opt, options);
      if (result !== true) {
        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
      }
      continue;
    }
    if (allowUnknown !== true) {
      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
    }
  }
}

module.exports = {
  assertOptions: assertOptions,
  validators: validators
};
'use strict';

var bind = require('./helpers/bind');

// utils is a library of generic helper functions non-specific to axios

var toString = Object.prototype.toString;

// eslint-disable-next-line func-names
var kindOf = (function(cache) {
  // eslint-disable-next-line func-names
  return function(thing) {
    var str = toString.call(thing);
    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
  };
})(Object.create(null));

function kindOfTest(type) {
  type = type.toLowerCase();
  return function isKindOf(thing) {
    return kindOf(thing) === type;
  };
}

/**
 * Determine if a value is an Array
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is an Array, otherwise false
 */
function isArray(val) {
  return Array.isArray(val);
}

/**
 * Determine if a value is undefined
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if the value is undefined, otherwise false
 */
function isUndefined(val) {
  return typeof val === 'undefined';
}

/**
 * Determine if a value is a Buffer
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Buffer, otherwise false
 */
function isBuffer(val) {
  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
}

/**
 * Determine if a value is an ArrayBuffer
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is an ArrayBuffer, otherwise false
 */
var isArrayBuffer = kindOfTest('ArrayBuffer');


/**
 * Determine if a value is a view on an ArrayBuffer
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
 */
function isArrayBufferView(val) {
  var result;
  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
    result = ArrayBuffer.isView(val);
  } else {
    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
  }
  return result;
}

/**
 * Determine if a value is a String
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a String, otherwise false
 */
function isString(val) {
  return typeof val === 'string';
}

/**
 * Determine if a value is a Number
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Number, otherwise false
 */
function isNumber(val) {
  return typeof val === 'number';
}

/**
 * Determine if a value is an Object
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is an Object, otherwise false
 */
function isObject(val) {
  return val !== null && typeof val === 'object';
}

/**
 * Determine if a value is a plain Object
 *
 * @param {Object} val The value to test
 * @return {boolean} True if value is a plain Object, otherwise false
 */
function isPlainObject(val) {
  if (kindOf(val) !== 'object') {
    return false;
  }

  var prototype = Object.getPrototypeOf(val);
  return prototype === null || prototype === Object.prototype;
}

/**
 * Determine if a value is a Date
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Date, otherwise false
 */
var isDate = kindOfTest('Date');

/**
 * Determine if a value is a File
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a File, otherwise false
 */
var isFile = kindOfTest('File');

/**
 * Determine if a value is a Blob
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Blob, otherwise false
 */
var isBlob = kindOfTest('Blob');

/**
 * Determine if a value is a FileList
 *
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a File, otherwise false
 */
var isFileList = kindOfTest('FileList');

/**
 * Determine if a value is a Function
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Function, otherwise false
 */
function isFunction(val) {
  return toString.call(val) === '[object Function]';
}

/**
 * Determine if a value is a Stream
 *
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a Stream, otherwise false
 */
function isStream(val) {
  return isObject(val) && isFunction(val.pipe);
}

/**
 * Determine if a value is a FormData
 *
 * @param {Object} thing The value to test
 * @returns {boolean} True if value is an FormData, otherwise false
 */
function isFormData(thing) {
  var pattern = '[object FormData]';
  return thing && (
    (typeof FormData === 'function' && thing instanceof FormData) ||
    toString.call(thing) === pattern ||
    (isFunction(thing.toString) && thing.toString() === pattern)
  );
}

/**
 * Determine if a value is a URLSearchParams object
 * @function
 * @param {Object} val The value to test
 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
 */
var isURLSearchParams = kindOfTest('URLSearchParams');

/**
 * Trim excess whitespace off the beginning and end of a string
 *
 * @param {String} str The String to trim
 * @returns {String} The String freed of excess whitespace
 */
function trim(str) {
  return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
}

/**
 * Determine if we're running in a standard browser environment
 *
 * This allows axios to run in a web worker, and react-native.
 * Both environments support XMLHttpRequest, but not fully standard globals.
 *
 * web workers:
 *  typeof window -> undefined
 *  typeof document -> undefined
 *
 * react-native:
 *  navigator.product -> 'ReactNative'
 * nativescript
 *  navigator.product -> 'NativeScript' or 'NS'
 */
function isStandardBrowserEnv() {
  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
                                           navigator.product === 'NativeScript' ||
                                           navigator.product === 'NS')) {
    return false;
  }
  return (
    typeof window !== 'undefined' &&
    typeof document !== 'undefined'
  );
}

/**
 * Iterate over an Array or an Object invoking a function for each item.
 *
 * If `obj` is an Array callback will be called passing
 * the value, index, and complete array for each item.
 *
 * If 'obj' is an Object callback will be called passing
 * the value, key, and complete object for each property.
 *
 * @param {Object|Array} obj The object to iterate
 * @param {Function} fn The callback to invoke for each item
 */
function forEach(obj, fn) {
  // Don't bother if no value provided
  if (obj === null || typeof obj === 'undefined') {
    return;
  }

  // Force an array if not already something iterable
  if (typeof obj !== 'object') {
    /*eslint no-param-reassign:0*/
    obj = [obj];
  }

  if (isArray(obj)) {
    // Iterate over array values
    for (var i = 0, l = obj.length; i < l; i++) {
      fn.call(null, obj[i], i, obj);
    }
  } else {
    // Iterate over object keys
    for (var key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, key)) {
        fn.call(null, obj[key], key, obj);
      }
    }
  }
}

/**
 * Accepts varargs expecting each argument to be an object, then
 * immutably merges the properties of each object and returns result.
 *
 * When multiple objects contain the same key the later object in
 * the arguments list will take precedence.
 *
 * Example:
 *
 * ```js
 * var result = merge({foo: 123}, {foo: 456});
 * console.log(result.foo); // outputs 456
 * ```
 *
 * @param {Object} obj1 Object to merge
 * @returns {Object} Result of all merge properties
 */
function merge(/* obj1, obj2, obj3, ... */) {
  var result = {};
  function assignValue(val, key) {
    if (isPlainObject(result[key]) && isPlainObject(val)) {
      result[key] = merge(result[key], val);
    } else if (isPlainObject(val)) {
      result[key] = merge({}, val);
    } else if (isArray(val)) {
      result[key] = val.slice();
    } else {
      result[key] = val;
    }
  }

  for (var i = 0, l = arguments.length; i < l; i++) {
    forEach(arguments[i], assignValue);
  }
  return result;
}

/**
 * Extends object a by mutably adding to it the properties of object b.
 *
 * @param {Object} a The object to be extended
 * @param {Object} b The object to copy properties from
 * @param {Object} thisArg The object to bind function to
 * @return {Object} The resulting value of object a
 */
function extend(a, b, thisArg) {
  forEach(b, function assignValue(val, key) {
    if (thisArg && typeof val === 'function') {
      a[key] = bind(val, thisArg);
    } else {
      a[key] = val;
    }
  });
  return a;
}

/**
 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
 *
 * @param {string} content with BOM
 * @return {string} content value without BOM
 */
function stripBOM(content) {
  if (content.charCodeAt(0) === 0xFEFF) {
    content = content.slice(1);
  }
  return content;
}

/**
 * Inherit the prototype methods from one constructor into another
 * @param {function} constructor
 * @param {function} superConstructor
 * @param {object} [props]
 * @param {object} [descriptors]
 */

function inherits(constructor, superConstructor, props, descriptors) {
  constructor.prototype = Object.create(superConstructor.prototype, descriptors);
  constructor.prototype.constructor = constructor;
  props && Object.assign(constructor.prototype, props);
}

/**
 * Resolve object with deep prototype chain to a flat object
 * @param {Object} sourceObj source object
 * @param {Object} [destObj]
 * @param {Function} [filter]
 * @returns {Object}
 */

function toFlatObject(sourceObj, destObj, filter) {
  var props;
  var i;
  var prop;
  var merged = {};

  destObj = destObj || {};

  do {
    props = Object.getOwnPropertyNames(sourceObj);
    i = props.length;
    while (i-- > 0) {
      prop = props[i];
      if (!merged[prop]) {
        destObj[prop] = sourceObj[prop];
        merged[prop] = true;
      }
    }
    sourceObj = Object.getPrototypeOf(sourceObj);
  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);

  return destObj;
}

/*
 * determines whether a string ends with the characters of a specified string
 * @param {String} str
 * @param {String} searchString
 * @param {Number} [position= 0]
 * @returns {boolean}
 */
function endsWith(str, searchString, position) {
  str = String(str);
  if (position === undefined || position > str.length) {
    position = str.length;
  }
  position -= searchString.length;
  var lastIndex = str.indexOf(searchString, position);
  return lastIndex !== -1 && lastIndex === position;
}


/**
 * Returns new array from array like object
 * @param {*} [thing]
 * @returns {Array}
 */
function toArray(thing) {
  if (!thing) return null;
  var i = thing.length;
  if (isUndefined(i)) return null;
  var arr = new Array(i);
  while (i-- > 0) {
    arr[i] = thing[i];
  }
  return arr;
}

// eslint-disable-next-line func-names
var isTypedArray = (function(TypedArray) {
  // eslint-disable-next-line func-names
  return function(thing) {
    return TypedArray && thing instanceof TypedArray;
  };
})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));

module.exports = {
  isArray: isArray,
  isArrayBuffer: isArrayBuffer,
  isBuffer: isBuffer,
  isFormData: isFormData,
  isArrayBufferView: isArrayBufferView,
  isString: isString,
  isNumber: isNumber,
  isObject: isObject,
  isPlainObject: isPlainObject,
  isUndefined: isUndefined,
  isDate: isDate,
  isFile: isFile,
  isBlob: isBlob,
  isFunction: isFunction,
  isStream: isStream,
  isURLSearchParams: isURLSearchParams,
  isStandardBrowserEnv: isStandardBrowserEnv,
  forEach: forEach,
  merge: merge,
  extend: extend,
  trim: trim,
  stripBOM: stripBOM,
  inherits: inherits,
  toFlatObject: toFlatObject,
  kindOf: kindOf,
  kindOfTest: kindOfTest,
  endsWith: endsWith,
  toArray: toArray,
  isTypedArray: isTypedArray,
  isFileList: isFileList
};
Copyright (c) 2014-present Matt Zabriskie

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
/* eslint-env browser */
module.exports = typeof self == 'object' ? self.FormData : window.FormData;
var CombinedStream = require('combined-stream');
var util = require('util');
var path = require('path');
var http = require('http');
var https = require('https');
var parseUrl = require('url').parse;
var fs = require('fs');
var Stream = require('stream').Stream;
var mime = require('mime-types');
var asynckit = require('asynckit');
var populate = require('./populate.js');

// Public API
module.exports = FormData;

// make it a Stream
util.inherits(FormData, CombinedStream);

/**
 * Create readable "multipart/form-data" streams.
 * Can be used to submit forms
 * and file uploads to other web applications.
 *
 * @constructor
 * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream
 */
function FormData(options) {
  if (!(this instanceof FormData)) {
    return new FormData(options);
  }

  this._overheadLength = 0;
  this._valueLength = 0;
  this._valuesToMeasure = [];

  CombinedStream.call(this);

  options = options || {};
  for (var option in options) {
    this[option] = options[option];
  }
}

FormData.LINE_BREAK = '\r\n';
FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';

FormData.prototype.append = function(field, value, options) {

  options = options || {};

  // allow filename as single option
  if (typeof options == 'string') {
    options = {filename: options};
  }

  var append = CombinedStream.prototype.append.bind(this);

  // all that streamy business can't handle numbers
  if (typeof value == 'number') {
    value = '' + value;
  }

  // https://github.com/felixge/node-form-data/issues/38
  if (util.isArray(value)) {
    // Please convert your array into string
    // the way web server expects it
    this._error(new Error('Arrays are not supported.'));
    return;
  }

  var header = this._multiPartHeader(field, value, options);
  var footer = this._multiPartFooter();

  append(header);
  append(value);
  append(footer);

  // pass along options.knownLength
  this._trackLength(header, value, options);
};

FormData.prototype._trackLength = function(header, value, options) {
  var valueLength = 0;

  // used w/ getLengthSync(), when length is known.
  // e.g. for streaming directly from a remote server,
  // w/ a known file a size, and not wanting to wait for
  // incoming file to finish to get its size.
  if (options.knownLength != null) {
    valueLength += +options.knownLength;
  } else if (Buffer.isBuffer(value)) {
    valueLength = value.length;
  } else if (typeof value === 'string') {
    valueLength = Buffer.byteLength(value);
  }

  this._valueLength += valueLength;

  // @check why add CRLF? does this account for custom/multiple CRLFs?
  this._overheadLength +=
    Buffer.byteLength(header) +
    FormData.LINE_BREAK.length;

  // empty or either doesn't have path or not an http response or not a stream
  if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {
    return;
  }

  // no need to bother with the length
  if (!options.knownLength) {
    this._valuesToMeasure.push(value);
  }
};

FormData.prototype._lengthRetriever = function(value, callback) {

  if (value.hasOwnProperty('fd')) {

    // take read range into a account
    // `end` = Infinity â€“> read file till the end
    //
    // TODO: Looks like there is bug in Node fs.createReadStream
    // it doesn't respect `end` options without `start` options
    // Fix it when node fixes it.
    // https://github.com/joyent/node/issues/7819
    if (value.end != undefined && value.end != Infinity && value.start != undefined) {

      // when end specified
      // no need to calculate range
      // inclusive, starts with 0
      callback(null, value.end + 1 - (value.start ? value.start : 0));

    // not that fast snoopy
    } else {
      // still need to fetch file size from fs
      fs.stat(value.path, function(err, stat) {

        var fileSize;

        if (err) {
          callback(err);
          return;
        }

        // update final size based on the range options
        fileSize = stat.size - (value.start ? value.start : 0);
        callback(null, fileSize);
      });
    }

  // or http response
  } else if (value.hasOwnProperty('httpVersion')) {
    callback(null, +value.headers['content-length']);

  // or request stream http://github.com/mikeal/request
  } else if (value.hasOwnProperty('httpModule')) {
    // wait till response come back
    value.on('response', function(response) {
      value.pause();
      callback(null, +response.headers['content-length']);
    });
    value.resume();

  // something else
  } else {
    callback('Unknown stream');
  }
};

FormData.prototype._multiPartHeader = function(field, value, options) {
  // custom header specified (as string)?
  // it becomes responsible for boundary
  // (e.g. to handle extra CRLFs on .NET servers)
  if (typeof options.header == 'string') {
    return options.header;
  }

  var contentDisposition = this._getContentDisposition(value, options);
  var contentType = this._getContentType(value, options);

  var contents = '';
  var headers  = {
    // add custom disposition as third element or keep it two elements if not
    'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []),
    // if no content type. allow it to be empty array
    'Content-Type': [].concat(contentType || [])
  };

  // allow custom headers.
  if (typeof options.header == 'object') {
    populate(headers, options.header);
  }

  var header;
  for (var prop in headers) {
    if (!headers.hasOwnProperty(prop)) continue;
    header = headers[prop];

    // skip nullish headers.
    if (header == null) {
      continue;
    }

    // convert all headers to arrays.
    if (!Array.isArray(header)) {
      header = [header];
    }

    // add non-empty headers.
    if (header.length) {
      contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
    }
  }

  return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
};

FormData.prototype._getContentDisposition = function(value, options) {

  var filename
    , contentDisposition
    ;

  if (typeof options.filepath === 'string') {
    // custom filepath for relative paths
    filename = path.normalize(options.filepath).replace(/\\/g, '/');
  } else if (options.filename || value.name || value.path) {
    // custom filename take precedence
    // formidable and the browser add a name property
    // fs- and request- streams have path property
    filename = path.basename(options.filename || value.name || value.path);
  } else if (value.readable && value.hasOwnProperty('httpVersion')) {
    // or try http response
    filename = path.basename(value.client._httpMessage.path || '');
  }

  if (filename) {
    contentDisposition = 'filename="' + filename + '"';
  }

  return contentDisposition;
};

FormData.prototype._getContentType = function(value, options) {

  // use custom content-type above all
  var contentType = options.contentType;

  // or try `name` from formidable, browser
  if (!contentType && value.name) {
    contentType = mime.lookup(value.name);
  }

  // or try `path` from fs-, request- streams
  if (!contentType && value.path) {
    contentType = mime.lookup(value.path);
  }

  // or if it's http-reponse
  if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {
    contentType = value.headers['content-type'];
  }

  // or guess it from the filepath or filename
  if (!contentType && (options.filepath || options.filename)) {
    contentType = mime.lookup(options.filepath || options.filename);
  }

  // fallback to the default content type if `value` is not simple value
  if (!contentType && typeof value == 'object') {
    contentType = FormData.DEFAULT_CONTENT_TYPE;
  }

  return contentType;
};

FormData.prototype._multiPartFooter = function() {
  return function(next) {
    var footer = FormData.LINE_BREAK;

    var lastPart = (this._streams.length === 0);
    if (lastPart) {
      footer += this._lastBoundary();
    }

    next(footer);
  }.bind(this);
};

FormData.prototype._lastBoundary = function() {
  return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
};

FormData.prototype.getHeaders = function(userHeaders) {
  var header;
  var formHeaders = {
    'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
  };

  for (header in userHeaders) {
    if (userHeaders.hasOwnProperty(header)) {
      formHeaders[header.toLowerCase()] = userHeaders[header];
    }
  }

  return formHeaders;
};

FormData.prototype.setBoundary = function(boundary) {
  this._boundary = boundary;
};

FormData.prototype.getBoundary = function() {
  if (!this._boundary) {
    this._generateBoundary();
  }

  return this._boundary;
};

FormData.prototype.getBuffer = function() {
  var dataBuffer = new Buffer.alloc( 0 );
  var boundary = this.getBoundary();

  // Create the form content. Add Line breaks to the end of data.
  for (var i = 0, len = this._streams.length; i < len; i++) {
    if (typeof this._streams[i] !== 'function') {

      // Add content to the buffer.
      if(Buffer.isBuffer(this._streams[i])) {
        dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);
      }else {
        dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);
      }

      // Add break after content.
      if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {
        dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );
      }
    }
  }

  // Add the footer and return the Buffer object.
  return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );
};

FormData.prototype._generateBoundary = function() {
  // This generates a 50 character boundary similar to those used by Firefox.
  // They are optimized for boyer-moore parsing.
  var boundary = '--------------------------';
  for (var i = 0; i < 24; i++) {
    boundary += Math.floor(Math.random() * 10).toString(16);
  }

  this._boundary = boundary;
};

// Note: getLengthSync DOESN'T calculate streams length
// As workaround one can calculate file size manually
// and add it as knownLength option
FormData.prototype.getLengthSync = function() {
  var knownLength = this._overheadLength + this._valueLength;

  // Don't get confused, there are 3 "internal" streams for each keyval pair
  // so it basically checks if there is any value added to the form
  if (this._streams.length) {
    knownLength += this._lastBoundary().length;
  }

  // https://github.com/form-data/form-data/issues/40
  if (!this.hasKnownLength()) {
    // Some async length retrievers are present
    // therefore synchronous length calculation is false.
    // Please use getLength(callback) to get proper length
    this._error(new Error('Cannot calculate proper length in synchronous way.'));
  }

  return knownLength;
};

// Public API to check if length of added values is known
// https://github.com/form-data/form-data/issues/196
// https://github.com/form-data/form-data/issues/262
FormData.prototype.hasKnownLength = function() {
  var hasKnownLength = true;

  if (this._valuesToMeasure.length) {
    hasKnownLength = false;
  }

  return hasKnownLength;
};

FormData.prototype.getLength = function(cb) {
  var knownLength = this._overheadLength + this._valueLength;

  if (this._streams.length) {
    knownLength += this._lastBoundary().length;
  }

  if (!this._valuesToMeasure.length) {
    process.nextTick(cb.bind(this, null, knownLength));
    return;
  }

  asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
    if (err) {
      cb(err);
      return;
    }

    values.forEach(function(length) {
      knownLength += length;
    });

    cb(null, knownLength);
  });
};

FormData.prototype.submit = function(params, cb) {
  var request
    , options
    , defaults = {method: 'post'}
    ;

  // parse provided url if it's string
  // or treat it as options object
  if (typeof params == 'string') {

    params = parseUrl(params);
    options = populate({
      port: params.port,
      path: params.pathname,
      host: params.hostname,
      protocol: params.protocol
    }, defaults);

  // use custom params
  } else {

    options = populate(params, defaults);
    // if no port provided use default one
    if (!options.port) {
      options.port = options.protocol == 'https:' ? 443 : 80;
    }
  }

  // put that good code in getHeaders to some use
  options.headers = this.getHeaders(params.headers);

  // https if specified, fallback to http in any other case
  if (options.protocol == 'https:') {
    request = https.request(options);
  } else {
    request = http.request(options);
  }

  // get content length and fire away
  this.getLength(function(err, length) {
    if (err && err !== 'Unknown stream') {
      this._error(err);
      return;
    }

    // add content length
    if (length) {
      request.setHeader('Content-Length', length);
    }

    this.pipe(request);
    if (cb) {
      var onResponse;

      var callback = function (error, responce) {
        request.removeListener('error', callback);
        request.removeListener('response', onResponse);

        return cb.call(this, error, responce);
      };

      onResponse = callback.bind(this, null);

      request.on('error', callback);
      request.on('response', onResponse);
    }
  }.bind(this));

  return request;
};

FormData.prototype._error = function(err) {
  if (!this.error) {
    this.error = err;
    this.pause();
    this.emit('error', err);
  }
};

FormData.prototype.toString = function () {
  return '[object FormData]';
};
// populates missing values
module.exports = function(dst, src) {

  Object.keys(src).forEach(function(prop)
  {
    dst[prop] = dst[prop] || src[prop];
  });

  return dst;
};
Copyright (c) 2012 Felix GeisendÃ¶rfer (felix@debuggable.com) and contributors

 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:

 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.

 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
{
  "author": "Felix GeisendÃ¶rfer <felix@debuggable.com> (http://debuggable.com/)",
  "name": "form-data",
  "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.",
  "version": "4.0.0",
  "repository": {
    "type": "git",
    "url": "git://github.com/form-data/form-data.git"
  },
  "main": "./lib/form_data",
  "browser": "./lib/browser",
  "typings": "./index.d.ts",
  "pre-commit": [
    "lint",
    "ci-test",
    "check"
  ],
  "engines": {
    "node": ">= 6"
  },
  "dependencies": {
    "asynckit": "^0.4.0",
    "combined-stream": "^1.0.8",
    "mime-types": "^2.1.12"
  },
  "devDependencies": {
    "@types/node": "^12.0.10",
    "browserify": "^13.1.1",
    "browserify-istanbul": "^2.0.0",
    "coveralls": "^3.0.4",
    "cross-spawn": "^6.0.5",
    "eslint": "^6.0.1",
    "fake": "^0.2.2",
    "far": "^0.0.7",
    "formidable": "^1.0.17",
    "in-publish": "^2.0.0",
    "is-node-modern": "^1.0.0",
    "istanbul": "^0.4.5",
    "obake": "^0.1.2",
    "puppeteer": "^1.19.0",
    "pkgfiles": "^2.3.0",
    "pre-commit": "^1.1.3",
    "request": "^2.88.0",
    "rimraf": "^2.7.1",
    "tape": "^4.6.2",
    "typescript": "^3.5.2"
  },
  "license": "MIT"
}# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data)

A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications.

The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd].

[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface

[![Linux Build](https://img.shields.io/travis/form-data/form-data/v4.0.0.svg?label=linux:6.x-12.x)](https://travis-ci.org/form-data/form-data)
[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v4.0.0.svg?label=macos:6.x-12.x)](https://travis-ci.org/form-data/form-data)
[![Windows Build](https://img.shields.io/travis/form-data/form-data/v4.0.0.svg?label=windows:6.x-12.x)](https://travis-ci.org/form-data/form-data)

[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v4.0.0.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master)
[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data)

## Install

```
npm install --save form-data
```

## Usage

In this example we are constructing a form with 3 fields that contain a string,
a buffer and a file stream.

``` javascript
var FormData = require('form-data');
var fs = require('fs');

var form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
```

Also you can use http-response stream:

``` javascript
var FormData = require('form-data');
var http = require('http');

var form = new FormData();

http.request('http://nodejs.org/images/logo.png', function(response) {
  form.append('my_field', 'my value');
  form.append('my_buffer', new Buffer(10));
  form.append('my_logo', response);
});
```

Or @mikeal's [request](https://github.com/request/request) stream:

``` javascript
var FormData = require('form-data');
var request = require('request');

var form = new FormData();

form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_logo', request('http://nodejs.org/images/logo.png'));
```

In order to submit this form to a web application, call ```submit(url, [callback])``` method:

``` javascript
form.submit('http://example.org/', function(err, res) {
  // res â€“ response object (http.IncomingMessage)  //
  res.resume();
});

```

For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods.

### Custom options

You can provide custom options, such as `maxDataSize`:

``` javascript
var FormData = require('form-data');

var form = new FormData({ maxDataSize: 20971520 });
form.append('my_field', 'my value');
form.append('my_buffer', /* something big */);
```

List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15)

### Alternative submission methods

You can use node's http client interface:

``` javascript
var http = require('http');

var request = http.request({
  method: 'post',
  host: 'example.org',
  path: '/upload',
  headers: form.getHeaders()
});

form.pipe(request);

request.on('response', function(res) {
  console.log(res.statusCode);
});
```

Or if you would prefer the `'Content-Length'` header to be set for you:

``` javascript
form.submit('example.org/upload', function(err, res) {
  console.log(res.statusCode);
});
```

To use custom headers and pre-known length in parts:

``` javascript
var CRLF = '\r\n';
var form = new FormData();

var options = {
  header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF,
  knownLength: 1
};

form.append('my_buffer', buffer, options);

form.submit('http://example.com/', function(err, res) {
  if (err) throw err;
  console.log('Done');
});
```

Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually:

``` javascript
someModule.stream(function(err, stdout, stderr) {
  if (err) throw err;

  var form = new FormData();

  form.append('file', stdout, {
    filename: 'unicycle.jpg', // ... or:
    filepath: 'photos/toys/unicycle.jpg',
    contentType: 'image/jpeg',
    knownLength: 19806
  });

  form.submit('http://example.com/', function(err, res) {
    if (err) throw err;
    console.log('Done');
  });
});
```

The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory).

For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter:

``` javascript
form.submit({
  host: 'example.com',
  path: '/probably.php?extra=params',
  auth: 'username:password'
}, function(err, res) {
  console.log(res.statusCode);
});
```

In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`:

``` javascript
form.submit({
  host: 'example.com',
  path: '/surelynot.php',
  headers: {'x-test-header': 'test-header-value'}
}, function(err, res) {
  console.log(res.statusCode);
});
```

### Methods

- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-).
- [_Headers_ getHeaders( [**Headers** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-)
- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary)
- [_Void_ setBoundary()](https://github.com/form-data/form-data#void-setboundary)
- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer)
- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync)
- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-)
- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength)
- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-)
- [_String_ toString()](https://github.com/form-data/form-data#string-tostring)

#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )
Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user.
```javascript
var form = new FormData();
form.append( 'my_string', 'my value' );
form.append( 'my_integer', 1 );
form.append( 'my_boolean', true );
form.append( 'my_buffer', new Buffer(10) );
form.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) )
```

You may provide a string for options, or an object.
```javascript
// Set filename by providing a string for options
form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' );

// provide an object.
form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} );
```

#### _Headers_ getHeaders( [**Headers** _userHeaders_] )
This method adds the correct `content-type` header to the provided array of `userHeaders`.

#### _String_ getBoundary()
Return the boundary of the formData. By default, the boundary consists of 26 `-` followed by 24 numbers
for example:
```javascript
--------------------------515890814546601021194782
```

#### _Void_ setBoundary(String _boundary_)
Set the boundary string, overriding the default behavior described above.

_Note: The boundary must be unique and may not appear in the data._

#### _Buffer_ getBuffer()
Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data.
```javascript
var form = new FormData();
form.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) );
form.append( 'my_file', fs.readFileSync('/foo/bar.jpg') );

axios.post( 'https://example.com/path/to/api',
            form.getBuffer(),
            form.getHeaders()
          )
```
**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error.

#### _Integer_ getLengthSync()
Same as `getLength` but synchronous.

_Note: getLengthSync __doesn't__ calculate streams length._

#### _Integer_ getLength( **function** _callback_ )
Returns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated
```javascript
this.getLength(function(err, length) {
  if (err) {
    this._error(err);
    return;
  }

  // add content length
  request.setHeader('Content-Length', length);

  ...
}.bind(this));
```

#### _Boolean_ hasKnownLength()
Checks if the length of added values is known.

#### _Request_ submit( _params_, **function** _callback_ )
Submit the form to a web application.
```javascript
var form = new FormData();
form.append( 'my_string', 'Hello World' );

form.submit( 'http://example.com/', function(err, res) {
  // res â€“ response object (http.IncomingMessage)  //
  res.resume();
} );
```

#### _String_ toString()
Returns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead.

### Integration with other libraries

#### Request

Form submission using  [request](https://github.com/request/request):

```javascript
var formData = {
  my_field: 'my_value',
  my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
};

request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) {
  if (err) {
    return console.error('upload failed:', err);
  }
  console.log('Upload successful!  Server responded with:', body);
});
```

For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads).

#### node-fetch

You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch):

```javascript
var form = new FormData();

form.append('a', 1);

fetch('http://example.com', { method: 'POST', body: form })
    .then(function(res) {
        return res.json();
    }).then(function(json) {
        console.log(json);
    });
```

#### axios

In Node.js you can post a file using [axios](https://github.com/axios/axios):
```javascript
const form = new FormData();
const stream = fs.createReadStream(PATH_TO_FILE);

form.append('image', stream);

// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders`
const formHeaders = form.getHeaders();

axios.post('http://example.com', form, {
  headers: {
    ...formHeaders,
  },
})
.then(response => response)
.catch(error => error)
```

## Notes

- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround.
- ```getLength(cb)``` will send an error as first parameter of callback if stream length cannot be calculated (e.g. send in custom streams w/o using ```knownLength```).
- ```submit``` will not add `content-length` if form length is unknown or not calculable.
- Starting version `2.x` FormData has dropped support for `node@0.10.x`.
- Starting version `3.x` FormData has dropped support for `node@4.x`.

## License

Form-Data is released under the [MIT](License) license.
{
  "name": "axios",
  "version": "0.27.2",
  "description": "Promise based HTTP client for the browser and node.js",
  "main": "index.js",
  "types": "index.d.ts",
  "repository": {
    "type": "git",
    "url": "https://github.com/axios/axios.git"
  },
  "author": "Matt Zabriskie",
  "license": "MIT",
  "homepage": "https://axios-http.com",
  "devDependencies": {
    "abortcontroller-polyfill": "^1.7.3",
    "coveralls": "^3.1.1",
    "dtslint": "^4.2.1",
    "es6-promise": "^4.2.8",
    "formidable": "^2.0.1",
    "grunt": "^1.4.1",
    "grunt-banner": "^0.6.0",
    "grunt-cli": "^1.4.3",
    "grunt-contrib-clean": "^2.0.0",
    "grunt-contrib-watch": "^1.1.0",
    "grunt-eslint": "^24.0.0",
    "grunt-karma": "^4.0.2",
    "grunt-mocha-test": "^0.13.3",
    "grunt-webpack": "^5.0.0",
    "istanbul-instrumenter-loader": "^3.0.1",
    "jasmine-core": "^2.4.1",
    "karma": "^6.3.17",
    "karma-chrome-launcher": "^3.1.1",
    "karma-firefox-launcher": "^2.1.2",
    "karma-jasmine": "^1.1.1",
    "karma-jasmine-ajax": "^0.1.13",
    "karma-safari-launcher": "^1.0.0",
    "karma-sauce-launcher": "^4.3.6",
    "karma-sinon": "^1.0.5",
    "karma-sourcemap-loader": "^0.3.8",
    "karma-webpack": "^4.0.2",
    "load-grunt-tasks": "^5.1.0",
    "minimist": "^1.2.6",
    "mocha": "^8.2.1",
    "sinon": "^4.5.0",
    "terser-webpack-plugin": "^4.2.3",
    "typescript": "^4.6.3",
    "url-search-params": "^0.10.0",
    "webpack": "^4.44.2",
    "webpack-dev-server": "^3.11.0"
  },
  "browser": {
    "./lib/adapters/http.js": "./lib/adapters/xhr.js",
    "./lib/defaults/env/FormData.js": "./lib/helpers/null.js"
  },
  "jsdelivr": "dist/axios.min.js",
  "unpkg": "dist/axios.min.js",
  "typings": "./index.d.ts",
  "dependencies": {
    "follow-redirects": "^1.14.9",
    "form-data": "^4.0.0"
  },
  "bundlesize": [
    {
      "path": "./dist/axios.min.js",
      "threshold": "5kB"
    }
  ]
}# Security Policy

## Reporting a Vulnerability

Please report security issues to jasonsaayman@gmail.com
{
  "compilerOptions": {
    "module": "es2015",
    "lib": ["dom", "es2015"],
    "types": [],
    "moduleResolution": "node",
    "strict": true,
    "noEmit": true,
    "baseUrl": ".",
    "paths": {
      "axios": ["."]
    }
  }
}
{ 
  "extends": "dtslint/dtslint.json",
  "rules": {
    "no-unnecessary-generics": false
  }
}
# Upgrade Guide

### 0.18.x -> 0.19.0

#### HTTPS Proxies

Routing through an https proxy now requires setting the `protocol` attribute of the proxy configuration to `https`

### 0.15.x -> 0.16.0

#### `Promise` Type Declarations

The `Promise` type declarations have been removed from the axios typings in favor of the built-in type declarations. If you use axios in a TypeScript project that targets `ES5`, please make sure to include the `es2015.promise` lib. Please see [this post](https://blog.mariusschulz.com/2016/11/25/typescript-2-0-built-in-type-declarations) for details.

### 0.13.x -> 0.14.0

#### TypeScript Definitions

The axios TypeScript definitions have been updated to match the axios API and use the ES2015 module syntax.

Please use the following `import` statement to import axios in TypeScript:

```typescript
import axios from 'axios';

axios.get('/foo')
  .then(response => console.log(response))
  .catch(error => console.log(error));
```

#### `agent` Config Option

The `agent` config option has been replaced with two new options: `httpAgent` and `httpsAgent`. Please use them instead.

```js
{
  // Define a custom agent for HTTP
  httpAgent: new http.Agent({ keepAlive: true }),
  // Define a custom agent for HTTPS
  httpsAgent: new https.Agent({ keepAlive: true })
}
```

#### `progress` Config Option

The `progress` config option has been replaced with the `onUploadProgress` and `onDownloadProgress` options.

```js
{
  // Define a handler for upload progress events
  onUploadProgress: function (progressEvent) {
    // ...
  },

  // Define a handler for download progress events
  onDownloadProgress: function (progressEvent) {
    // ...
  }
}
```

### 0.12.x -> 0.13.0

The `0.13.0` release contains several changes to custom adapters and error handling.

#### Error Handling

Previous to this release an error could either be a server response with bad status code or an actual `Error`. With this release Promise will always reject with an `Error`. In the case that a response was received, the `Error` will also include the response.

```js
axios.get('/user/12345')
  .catch((error) => {
    console.log(error.message);
    console.log(error.code); // Not always specified
    console.log(error.config); // The config that was used to make the request
    console.log(error.response); // Only available if response was received from the server
  });
```

#### Request Adapters

This release changes a few things about how request adapters work. Please take note if you are using your own custom adapter.

1. Response transformer is now called outside of adapter.
2. Request adapter returns a `Promise`.

This means that you no longer need to invoke `transformData` on response data. You will also no longer receive `resolve` and `reject` as arguments in your adapter.

Previous code:

```js
function myAdapter(resolve, reject, config) {
  var response = {
    data: transformData(
      responseData,
      responseHeaders,
      config.transformResponse
    ),
    status: request.status,
    statusText: request.statusText,
    headers: responseHeaders
  };
  settle(resolve, reject, response);
}
```

New code:

```js
function myAdapter(config) {
  return new Promise(function (resolve, reject) {
    var response = {
      data: responseData,
      status: request.status,
      statusText: request.statusText,
      headers: responseHeaders
    };
    settle(resolve, reject, response);
  });
}
```

See the related commits for more details:
- [Response transformers](https://github.com/axios/axios/commit/10eb23865101f9347570552c04e9d6211376e25e)
- [Request adapter Promise](https://github.com/axios/axios/commit/157efd5615890301824e3121cc6c9d2f9b21f94a)

### 0.5.x -> 0.6.0

The `0.6.0` release contains mostly bug fixes, but there are a couple things to be aware of when upgrading.

#### ES6 Promise Polyfill

Up until the `0.6.0` release ES6 `Promise` was being polyfilled using [es6-promise](https://github.com/jakearchibald/es6-promise). With this release, the polyfill has been removed, and you will need to supply it yourself if your environment needs it.

```js
require('es6-promise').polyfill();
var axios = require('axios');
```

This will polyfill the global environment, and only needs to be done once.

#### `axios.success`/`axios.error`

The `success`, and `error` aliases were deprecated in [0.4.0](https://github.com/axios/axios/blob/master/CHANGELOG.md#040-oct-03-2014). As of this release they have been removed entirely. Instead please use `axios.then`, and `axios.catch` respectively.

```js
axios.get('some/url')
  .then(function (res) {
    /* ... */
  })
  .catch(function (err) {
    /* ... */
  });
```

#### UMD

Previous versions of axios shipped with an AMD, CommonJS, and Global build. This has all been rolled into a single UMD build.

```js
// AMD
require(['bower_components/axios/dist/axios'], function (axios) {
  /* ... */
});

// CommonJS
var axios = require('axios/dist/axios');
```
(function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"==typeof window?"undefined"==typeof global?"undefined"==typeof self?this:self:global:window,b.base64js=a()}})(function(){return function(){function b(d,e,g){function a(j,i){if(!e[j]){if(!d[j]){var f="function"==typeof require&&require;if(!i&&f)return f(j,!0);if(h)return h(j,!0);var c=new Error("Cannot find module '"+j+"'");throw c.code="MODULE_NOT_FOUND",c}var k=e[j]={exports:{}};d[j][0].call(k.exports,function(b){var c=d[j][1][b];return a(c||b)},k,k.exports,b,d,e,g)}return e[j].exports}for(var h="function"==typeof require&&require,c=0;c<g.length;c++)a(g[c]);return a}return b}()({"/":[function(a,b,c){'use strict';function d(a){var b=a.length;if(0<b%4)throw new Error("Invalid string. Length must be a multiple of 4");var c=a.indexOf("=");-1===c&&(c=b);var d=c===b?0:4-c%4;return[c,d]}function e(a,b,c){return 3*(b+c)/4-c}function f(a){var b,c,f=d(a),g=f[0],h=f[1],j=new m(e(a,g,h)),k=0,n=0<h?g-4:g;for(c=0;c<n;c+=4)b=l[a.charCodeAt(c)]<<18|l[a.charCodeAt(c+1)]<<12|l[a.charCodeAt(c+2)]<<6|l[a.charCodeAt(c+3)],j[k++]=255&b>>16,j[k++]=255&b>>8,j[k++]=255&b;return 2===h&&(b=l[a.charCodeAt(c)]<<2|l[a.charCodeAt(c+1)]>>4,j[k++]=255&b),1===h&&(b=l[a.charCodeAt(c)]<<10|l[a.charCodeAt(c+1)]<<4|l[a.charCodeAt(c+2)]>>2,j[k++]=255&b>>8,j[k++]=255&b),j}function g(a){return k[63&a>>18]+k[63&a>>12]+k[63&a>>6]+k[63&a]}function h(a,b,c){for(var d,e=[],f=b;f<c;f+=3)d=(16711680&a[f]<<16)+(65280&a[f+1]<<8)+(255&a[f+2]),e.push(g(d));return e.join("")}function j(a){for(var b,c=a.length,d=c%3,e=[],f=16383,g=0,j=c-d;g<j;g+=f)e.push(h(a,g,g+f>j?j:g+f));return 1===d?(b=a[c-1],e.push(k[b>>2]+k[63&b<<4]+"==")):2===d&&(b=(a[c-2]<<8)+a[c-1],e.push(k[b>>10]+k[63&b>>4]+k[63&b<<2]+"=")),e.join("")}c.byteLength=function(a){var b=d(a),c=b[0],e=b[1];return 3*(c+e)/4-e},c.toByteArray=f,c.fromByteArray=j;for(var k=[],l=[],m="undefined"==typeof Uint8Array?Array:Uint8Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,p=n.length;o<p;++o)k[o]=n[o],l[n.charCodeAt(o)]=o;l[45]=62,l[95]=63},{}]},{},[])("/")});'use strict'

exports.byteLength = byteLength
exports.toByteArray = toByteArray
exports.fromByteArray = fromByteArray

var lookup = []
var revLookup = []
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array

var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for (var i = 0, len = code.length; i < len; ++i) {
  lookup[i] = code[i]
  revLookup[code.charCodeAt(i)] = i
}

// Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
revLookup['-'.charCodeAt(0)] = 62
revLookup['_'.charCodeAt(0)] = 63

function getLens (b64) {
  var len = b64.length

  if (len % 4 > 0) {
    throw new Error('Invalid string. Length must be a multiple of 4')
  }

  // Trim off extra bytes after placeholder bytes are found
  // See: https://github.com/beatgammit/base64-js/issues/42
  var validLen = b64.indexOf('=')
  if (validLen === -1) validLen = len

  var placeHoldersLen = validLen === len
    ? 0
    : 4 - (validLen % 4)

  return [validLen, placeHoldersLen]
}

// base64 is 4/3 + up to two characters of the original data
function byteLength (b64) {
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function _byteLength (b64, validLen, placeHoldersLen) {
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function toByteArray (b64) {
  var tmp
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]

  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))

  var curByte = 0

  // if there are placeholders, only get up to the last complete 4 chars
  var len = placeHoldersLen > 0
    ? validLen - 4
    : validLen

  var i
  for (i = 0; i < len; i += 4) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 18) |
      (revLookup[b64.charCodeAt(i + 1)] << 12) |
      (revLookup[b64.charCodeAt(i + 2)] << 6) |
      revLookup[b64.charCodeAt(i + 3)]
    arr[curByte++] = (tmp >> 16) & 0xFF
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 2) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 2) |
      (revLookup[b64.charCodeAt(i + 1)] >> 4)
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 1) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 10) |
      (revLookup[b64.charCodeAt(i + 1)] << 4) |
      (revLookup[b64.charCodeAt(i + 2)] >> 2)
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  return arr
}

function tripletToBase64 (num) {
  return lookup[num >> 18 & 0x3F] +
    lookup[num >> 12 & 0x3F] +
    lookup[num >> 6 & 0x3F] +
    lookup[num & 0x3F]
}

function encodeChunk (uint8, start, end) {
  var tmp
  var output = []
  for (var i = start; i < end; i += 3) {
    tmp =
      ((uint8[i] << 16) & 0xFF0000) +
      ((uint8[i + 1] << 8) & 0xFF00) +
      (uint8[i + 2] & 0xFF)
    output.push(tripletToBase64(tmp))
  }
  return output.join('')
}

function fromByteArray (uint8) {
  var tmp
  var len = uint8.length
  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
  var parts = []
  var maxChunkLength = 16383 // must be multiple of 3

  // go through the array every three bytes, we'll deal with trailing stuff later
  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
  }

  // pad the end with zeros, but make sure to not forget the extra bytes
  if (extraBytes === 1) {
    tmp = uint8[len - 1]
    parts.push(
      lookup[tmp >> 2] +
      lookup[(tmp << 4) & 0x3F] +
      '=='
    )
  } else if (extraBytes === 2) {
    tmp = (uint8[len - 2] << 8) + uint8[len - 1]
    parts.push(
      lookup[tmp >> 10] +
      lookup[(tmp >> 4) & 0x3F] +
      lookup[(tmp << 2) & 0x3F] +
      '='
    )
  }

  return parts.join('')
}
The MIT License (MIT)

Copyright (c) 2014 Jameson Little

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "base64-js",
  "description": "Base64 encoding/decoding in pure JS",
  "version": "1.5.1",
  "author": "T. Jameson Little <t.jameson.little@gmail.com>",
  "typings": "index.d.ts",
  "devDependencies": {
    "babel-minify": "^0.5.1",
    "benchmark": "^2.1.4",
    "browserify": "^16.3.0",
    "standard": "*",
    "tape": "4.x"
  },
  "homepage": "https://github.com/beatgammit/base64-js",
  "license": "MIT",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "git://github.com/beatgammit/base64-js.git"
  },
  "funding": [
    {
      "type": "github",
      "url": "https://github.com/sponsors/feross"
    },
    {
      "type": "patreon",
      "url": "https://www.patreon.com/feross"
    },
    {
      "type": "consulting",
      "url": "https://feross.org/support"
    }
  ]
};(function (globalObject) {
  'use strict';

/*
 *      bignumber.js v9.1.1
 *      A JavaScript library for arbitrary-precision arithmetic.
 *      https://github.com/MikeMcl/bignumber.js
 *      Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>
 *      MIT Licensed.
 *
 *      BigNumber.prototype methods     |  BigNumber methods
 *                                      |
 *      absoluteValue            abs    |  clone
 *      comparedTo                      |  config               set
 *      decimalPlaces            dp     |      DECIMAL_PLACES
 *      dividedBy                div    |      ROUNDING_MODE
 *      dividedToIntegerBy       idiv   |      EXPONENTIAL_AT
 *      exponentiatedBy          pow    |      RANGE
 *      integerValue                    |      CRYPTO
 *      isEqualTo                eq     |      MODULO_MODE
 *      isFinite                        |      POW_PRECISION
 *      isGreaterThan            gt     |      FORMAT
 *      isGreaterThanOrEqualTo   gte    |      ALPHABET
 *      isInteger                       |  isBigNumber
 *      isLessThan               lt     |  maximum              max
 *      isLessThanOrEqualTo      lte    |  minimum              min
 *      isNaN                           |  random
 *      isNegative                      |  sum
 *      isPositive                      |
 *      isZero                          |
 *      minus                           |
 *      modulo                   mod    |
 *      multipliedBy             times  |
 *      negated                         |
 *      plus                            |
 *      precision                sd     |
 *      shiftedBy                       |
 *      squareRoot               sqrt   |
 *      toExponential                   |
 *      toFixed                         |
 *      toFormat                        |
 *      toFraction                      |
 *      toJSON                          |
 *      toNumber                        |
 *      toPrecision                     |
 *      toString                        |
 *      valueOf                         |
 *
 */


  var BigNumber,
    isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,
    mathceil = Math.ceil,
    mathfloor = Math.floor,

    bignumberError = '[BigNumber Error] ',
    tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',

    BASE = 1e14,
    LOG_BASE = 14,
    MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1
    // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1
    POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],
    SQRT_BASE = 1e7,

    // EDITABLE
    // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and
    // the arguments to toExponential, toFixed, toFormat, and toPrecision.
    MAX = 1E9;                                   // 0 to MAX_INT32


  /*
   * Create and return a BigNumber constructor.
   */
  function clone(configObject) {
    var div, convertBase, parseNumeric,
      P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },
      ONE = new BigNumber(1),


      //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------


      // The default values below must be integers within the inclusive ranges stated.
      // The values can also be changed at run-time using BigNumber.set.

      // The maximum number of decimal places for operations involving division.
      DECIMAL_PLACES = 20,                     // 0 to MAX

      // The rounding mode used when rounding to the above decimal places, and when using
      // toExponential, toFixed, toFormat and toPrecision, and round (default value).
      // UP         0 Away from zero.
      // DOWN       1 Towards zero.
      // CEIL       2 Towards +Infinity.
      // FLOOR      3 Towards -Infinity.
      // HALF_UP    4 Towards nearest neighbour. If equidistant, up.
      // HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.
      // HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.
      // HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.
      // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
      ROUNDING_MODE = 4,                       // 0 to 8

      // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]

      // The exponent value at and beneath which toString returns exponential notation.
      // Number type: -7
      TO_EXP_NEG = -7,                         // 0 to -MAX

      // The exponent value at and above which toString returns exponential notation.
      // Number type: 21
      TO_EXP_POS = 21,                         // 0 to MAX

      // RANGE : [MIN_EXP, MAX_EXP]

      // The minimum exponent value, beneath which underflow to zero occurs.
      // Number type: -324  (5e-324)
      MIN_EXP = -1e7,                          // -1 to -MAX

      // The maximum exponent value, above which overflow to Infinity occurs.
      // Number type:  308  (1.7976931348623157e+308)
      // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.
      MAX_EXP = 1e7,                           // 1 to MAX

      // Whether to use cryptographically-secure random number generation, if available.
      CRYPTO = false,                          // true or false

      // The modulo mode used when calculating the modulus: a mod n.
      // The quotient (q = a / n) is calculated according to the corresponding rounding mode.
      // The remainder (r) is calculated as: r = a - n * q.
      //
      // UP        0 The remainder is positive if the dividend is negative, else is negative.
      // DOWN      1 The remainder has the same sign as the dividend.
      //             This modulo mode is commonly known as 'truncated division' and is
      //             equivalent to (a % n) in JavaScript.
      // FLOOR     3 The remainder has the same sign as the divisor (Python %).
      // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.
      // EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).
      //             The remainder is always positive.
      //
      // The truncated division, floored division, Euclidian division and IEEE 754 remainder
      // modes are commonly used for the modulus operation.
      // Although the other rounding modes can also be used, they may not give useful results.
      MODULO_MODE = 1,                         // 0 to 9

      // The maximum number of significant digits of the result of the exponentiatedBy operation.
      // If POW_PRECISION is 0, there will be unlimited significant digits.
      POW_PRECISION = 0,                       // 0 to MAX

      // The format specification used by the BigNumber.prototype.toFormat method.
      FORMAT = {
        prefix: '',
        groupSize: 3,
        secondaryGroupSize: 0,
        groupSeparator: ',',
        decimalSeparator: '.',
        fractionGroupSize: 0,
        fractionGroupSeparator: '\xA0',        // non-breaking space
        suffix: ''
      },

      // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',
      // '-', '.', whitespace, or repeated character.
      // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
      ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',
      alphabetHasNormalDecimalDigits = true;


    //------------------------------------------------------------------------------------------


    // CONSTRUCTOR


    /*
     * The BigNumber constructor and exported function.
     * Create and return a new instance of a BigNumber object.
     *
     * v {number|string|BigNumber} A numeric value.
     * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.
     */
    function BigNumber(v, b) {
      var alphabet, c, caseChanged, e, i, isNum, len, str,
        x = this;

      // Enable constructor call without `new`.
      if (!(x instanceof BigNumber)) return new BigNumber(v, b);

      if (b == null) {

        if (v && v._isBigNumber === true) {
          x.s = v.s;

          if (!v.c || v.e > MAX_EXP) {
            x.c = x.e = null;
          } else if (v.e < MIN_EXP) {
            x.c = [x.e = 0];
          } else {
            x.e = v.e;
            x.c = v.c.slice();
          }

          return;
        }

        if ((isNum = typeof v == 'number') && v * 0 == 0) {

          // Use `1 / n` to handle minus zero also.
          x.s = 1 / v < 0 ? (v = -v, -1) : 1;

          // Fast path for integers, where n < 2147483648 (2**31).
          if (v === ~~v) {
            for (e = 0, i = v; i >= 10; i /= 10, e++);

            if (e > MAX_EXP) {
              x.c = x.e = null;
            } else {
              x.e = e;
              x.c = [v];
            }

            return;
          }

          str = String(v);
        } else {

          if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);

          x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;
        }

        // Decimal point?
        if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');

        // Exponential form?
        if ((i = str.search(/e/i)) > 0) {

          // Determine exponent.
          if (e < 0) e = i;
          e += +str.slice(i + 1);
          str = str.substring(0, i);
        } else if (e < 0) {

          // Integer.
          e = str.length;
        }

      } else {

        // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
        intCheck(b, 2, ALPHABET.length, 'Base');

        // Allow exponential notation to be used with base 10 argument, while
        // also rounding to DECIMAL_PLACES as with other bases.
        if (b == 10 && alphabetHasNormalDecimalDigits) {
          x = new BigNumber(v);
          return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);
        }

        str = String(v);

        if (isNum = typeof v == 'number') {

          // Avoid potential interpretation of Infinity and NaN as base 44+ values.
          if (v * 0 != 0) return parseNumeric(x, str, isNum, b);

          x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;

          // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
          if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) {
            throw Error
             (tooManyDigits + v);
          }
        } else {
          x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;
        }

        alphabet = ALPHABET.slice(0, b);
        e = i = 0;

        // Check that str is a valid base b number.
        // Don't use RegExp, so alphabet can contain special characters.
        for (len = str.length; i < len; i++) {
          if (alphabet.indexOf(c = str.charAt(i)) < 0) {
            if (c == '.') {

              // If '.' is not the first character and it has not be found before.
              if (i > e) {
                e = len;
                continue;
              }
            } else if (!caseChanged) {

              // Allow e.g. hexadecimal 'FF' as well as 'ff'.
              if (str == str.toUpperCase() && (str = str.toLowerCase()) ||
                  str == str.toLowerCase() && (str = str.toUpperCase())) {
                caseChanged = true;
                i = -1;
                e = 0;
                continue;
              }
            }

            return parseNumeric(x, String(v), isNum, b);
          }
        }

        // Prevent later check for length on converted number.
        isNum = false;
        str = convertBase(str, b, 10, x.s);

        // Decimal point?
        if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');
        else e = str.length;
      }

      // Determine leading zeros.
      for (i = 0; str.charCodeAt(i) === 48; i++);

      // Determine trailing zeros.
      for (len = str.length; str.charCodeAt(--len) === 48;);

      if (str = str.slice(i, ++len)) {
        len -= i;

        // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
        if (isNum && BigNumber.DEBUG &&
          len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {
            throw Error
             (tooManyDigits + (x.s * v));
        }

         // Overflow?
        if ((e = e - i - 1) > MAX_EXP) {

          // Infinity.
          x.c = x.e = null;

        // Underflow?
        } else if (e < MIN_EXP) {

          // Zero.
          x.c = [x.e = 0];
        } else {
          x.e = e;
          x.c = [];

          // Transform base

          // e is the base 10 exponent.
          // i is where to slice str to get the first element of the coefficient array.
          i = (e + 1) % LOG_BASE;
          if (e < 0) i += LOG_BASE;  // i < 1

          if (i < len) {
            if (i) x.c.push(+str.slice(0, i));

            for (len -= LOG_BASE; i < len;) {
              x.c.push(+str.slice(i, i += LOG_BASE));
            }

            i = LOG_BASE - (str = str.slice(i)).length;
          } else {
            i -= len;
          }

          for (; i--; str += '0');
          x.c.push(+str);
        }
      } else {

        // Zero.
        x.c = [x.e = 0];
      }
    }


    // CONSTRUCTOR PROPERTIES


    BigNumber.clone = clone;

    BigNumber.ROUND_UP = 0;
    BigNumber.ROUND_DOWN = 1;
    BigNumber.ROUND_CEIL = 2;
    BigNumber.ROUND_FLOOR = 3;
    BigNumber.ROUND_HALF_UP = 4;
    BigNumber.ROUND_HALF_DOWN = 5;
    BigNumber.ROUND_HALF_EVEN = 6;
    BigNumber.ROUND_HALF_CEIL = 7;
    BigNumber.ROUND_HALF_FLOOR = 8;
    BigNumber.EUCLID = 9;


    /*
     * Configure infrequently-changing library-wide settings.
     *
     * Accept an object with the following optional properties (if the value of a property is
     * a number, it must be an integer within the inclusive range stated):
     *
     *   DECIMAL_PLACES   {number}           0 to MAX
     *   ROUNDING_MODE    {number}           0 to 8
     *   EXPONENTIAL_AT   {number|number[]}  -MAX to MAX  or  [-MAX to 0, 0 to MAX]
     *   RANGE            {number|number[]}  -MAX to MAX (not zero)  or  [-MAX to -1, 1 to MAX]
     *   CRYPTO           {boolean}          true or false
     *   MODULO_MODE      {number}           0 to 9
     *   POW_PRECISION       {number}           0 to MAX
     *   ALPHABET         {string}           A string of two or more unique characters which does
     *                                       not contain '.'.
     *   FORMAT           {object}           An object with some of the following properties:
     *     prefix                 {string}
     *     groupSize              {number}
     *     secondaryGroupSize     {number}
     *     groupSeparator         {string}
     *     decimalSeparator       {string}
     *     fractionGroupSize      {number}
     *     fractionGroupSeparator {string}
     *     suffix                 {string}
     *
     * (The values assigned to the above FORMAT object properties are not checked for validity.)
     *
     * E.g.
     * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })
     *
     * Ignore properties/parameters set to null or undefined, except for ALPHABET.
     *
     * Return an object with the properties current values.
     */
    BigNumber.config = BigNumber.set = function (obj) {
      var p, v;

      if (obj != null) {

        if (typeof obj == 'object') {

          // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.
          // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'
          if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {
            v = obj[p];
            intCheck(v, 0, MAX, p);
            DECIMAL_PLACES = v;
          }

          // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.
          // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'
          if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {
            v = obj[p];
            intCheck(v, 0, 8, p);
            ROUNDING_MODE = v;
          }

          // EXPONENTIAL_AT {number|number[]}
          // Integer, -MAX to MAX inclusive or
          // [integer -MAX to 0 inclusive, 0 to MAX inclusive].
          // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'
          if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {
            v = obj[p];
            if (v && v.pop) {
              intCheck(v[0], -MAX, 0, p);
              intCheck(v[1], 0, MAX, p);
              TO_EXP_NEG = v[0];
              TO_EXP_POS = v[1];
            } else {
              intCheck(v, -MAX, MAX, p);
              TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);
            }
          }

          // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
          // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].
          // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'
          if (obj.hasOwnProperty(p = 'RANGE')) {
            v = obj[p];
            if (v && v.pop) {
              intCheck(v[0], -MAX, -1, p);
              intCheck(v[1], 1, MAX, p);
              MIN_EXP = v[0];
              MAX_EXP = v[1];
            } else {
              intCheck(v, -MAX, MAX, p);
              if (v) {
                MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);
              } else {
                throw Error
                 (bignumberError + p + ' cannot be zero: ' + v);
              }
            }
          }

          // CRYPTO {boolean} true or false.
          // '[BigNumber Error] CRYPTO not true or false: {v}'
          // '[BigNumber Error] crypto unavailable'
          if (obj.hasOwnProperty(p = 'CRYPTO')) {
            v = obj[p];
            if (v === !!v) {
              if (v) {
                if (typeof crypto != 'undefined' && crypto &&
                 (crypto.getRandomValues || crypto.randomBytes)) {
                  CRYPTO = v;
                } else {
                  CRYPTO = !v;
                  throw Error
                   (bignumberError + 'crypto unavailable');
                }
              } else {
                CRYPTO = v;
              }
            } else {
              throw Error
               (bignumberError + p + ' not true or false: ' + v);
            }
          }

          // MODULO_MODE {number} Integer, 0 to 9 inclusive.
          // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'
          if (obj.hasOwnProperty(p = 'MODULO_MODE')) {
            v = obj[p];
            intCheck(v, 0, 9, p);
            MODULO_MODE = v;
          }

          // POW_PRECISION {number} Integer, 0 to MAX inclusive.
          // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'
          if (obj.hasOwnProperty(p = 'POW_PRECISION')) {
            v = obj[p];
            intCheck(v, 0, MAX, p);
            POW_PRECISION = v;
          }

          // FORMAT {object}
          // '[BigNumber Error] FORMAT not an object: {v}'
          if (obj.hasOwnProperty(p = 'FORMAT')) {
            v = obj[p];
            if (typeof v == 'object') FORMAT = v;
            else throw Error
             (bignumberError + p + ' not an object: ' + v);
          }

          // ALPHABET {string}
          // '[BigNumber Error] ALPHABET invalid: {v}'
          if (obj.hasOwnProperty(p = 'ALPHABET')) {
            v = obj[p];

            // Disallow if less than two characters,
            // or if it contains '+', '-', '.', whitespace, or a repeated character.
            if (typeof v == 'string' && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) {
              alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';
              ALPHABET = v;
            } else {
              throw Error
               (bignumberError + p + ' invalid: ' + v);
            }
          }

        } else {

          // '[BigNumber Error] Object expected: {v}'
          throw Error
           (bignumberError + 'Object expected: ' + obj);
        }
      }

      return {
        DECIMAL_PLACES: DECIMAL_PLACES,
        ROUNDING_MODE: ROUNDING_MODE,
        EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],
        RANGE: [MIN_EXP, MAX_EXP],
        CRYPTO: CRYPTO,
        MODULO_MODE: MODULO_MODE,
        POW_PRECISION: POW_PRECISION,
        FORMAT: FORMAT,
        ALPHABET: ALPHABET
      };
    };


    /*
     * Return true if v is a BigNumber instance, otherwise return false.
     *
     * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.
     *
     * v {any}
     *
     * '[BigNumber Error] Invalid BigNumber: {v}'
     */
    BigNumber.isBigNumber = function (v) {
      if (!v || v._isBigNumber !== true) return false;
      if (!BigNumber.DEBUG) return true;

      var i, n,
        c = v.c,
        e = v.e,
        s = v.s;

      out: if ({}.toString.call(c) == '[object Array]') {

        if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {

          // If the first element is zero, the BigNumber value must be zero.
          if (c[0] === 0) {
            if (e === 0 && c.length === 1) return true;
            break out;
          }

          // Calculate number of digits that c[0] should have, based on the exponent.
          i = (e + 1) % LOG_BASE;
          if (i < 1) i += LOG_BASE;

          // Calculate number of digits of c[0].
          //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {
          if (String(c[0]).length == i) {

            for (i = 0; i < c.length; i++) {
              n = c[i];
              if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;
            }

            // Last element cannot be zero, unless it is the only element.
            if (n !== 0) return true;
          }
        }

      // Infinity/NaN
      } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {
        return true;
      }

      throw Error
        (bignumberError + 'Invalid BigNumber: ' + v);
    };


    /*
     * Return a new BigNumber whose value is the maximum of the arguments.
     *
     * arguments {number|string|BigNumber}
     */
    BigNumber.maximum = BigNumber.max = function () {
      return maxOrMin(arguments, P.lt);
    };


    /*
     * Return a new BigNumber whose value is the minimum of the arguments.
     *
     * arguments {number|string|BigNumber}
     */
    BigNumber.minimum = BigNumber.min = function () {
      return maxOrMin(arguments, P.gt);
    };


    /*
     * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,
     * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing
     * zeros are produced).
     *
     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
     *
     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'
     * '[BigNumber Error] crypto unavailable'
     */
    BigNumber.random = (function () {
      var pow2_53 = 0x20000000000000;

      // Return a 53 bit integer n, where 0 <= n < 9007199254740992.
      // Check if Math.random() produces more than 32 bits of randomness.
      // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.
      // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.
      var random53bitInt = (Math.random() * pow2_53) & 0x1fffff
       ? function () { return mathfloor(Math.random() * pow2_53); }
       : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +
         (Math.random() * 0x800000 | 0); };

      return function (dp) {
        var a, b, e, k, v,
          i = 0,
          c = [],
          rand = new BigNumber(ONE);

        if (dp == null) dp = DECIMAL_PLACES;
        else intCheck(dp, 0, MAX);

        k = mathceil(dp / LOG_BASE);

        if (CRYPTO) {

          // Browsers supporting crypto.getRandomValues.
          if (crypto.getRandomValues) {

            a = crypto.getRandomValues(new Uint32Array(k *= 2));

            for (; i < k;) {

              // 53 bits:
              // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)
              // 11111 11111111 11111111 11111111 11100000 00000000 00000000
              // ((Math.pow(2, 32) - 1) >>> 11).toString(2)
              //                                     11111 11111111 11111111
              // 0x20000 is 2^21.
              v = a[i] * 0x20000 + (a[i + 1] >>> 11);

              // Rejection sampling:
              // 0 <= v < 9007199254740992
              // Probability that v >= 9e15, is
              // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251
              if (v >= 9e15) {
                b = crypto.getRandomValues(new Uint32Array(2));
                a[i] = b[0];
                a[i + 1] = b[1];
              } else {

                // 0 <= v <= 8999999999999999
                // 0 <= (v % 1e14) <= 99999999999999
                c.push(v % 1e14);
                i += 2;
              }
            }
            i = k / 2;

          // Node.js supporting crypto.randomBytes.
          } else if (crypto.randomBytes) {

            // buffer
            a = crypto.randomBytes(k *= 7);

            for (; i < k;) {

              // 0x1000000000000 is 2^48, 0x10000000000 is 2^40
              // 0x100000000 is 2^32, 0x1000000 is 2^24
              // 11111 11111111 11111111 11111111 11111111 11111111 11111111
              // 0 <= v < 9007199254740992
              v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +
                 (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +
                 (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];

              if (v >= 9e15) {
                crypto.randomBytes(7).copy(a, i);
              } else {

                // 0 <= (v % 1e14) <= 99999999999999
                c.push(v % 1e14);
                i += 7;
              }
            }
            i = k / 7;
          } else {
            CRYPTO = false;
            throw Error
             (bignumberError + 'crypto unavailable');
          }
        }

        // Use Math.random.
        if (!CRYPTO) {

          for (; i < k;) {
            v = random53bitInt();
            if (v < 9e15) c[i++] = v % 1e14;
          }
        }

        k = c[--i];
        dp %= LOG_BASE;

        // Convert trailing digits to zeros according to dp.
        if (k && dp) {
          v = POWS_TEN[LOG_BASE - dp];
          c[i] = mathfloor(k / v) * v;
        }

        // Remove trailing elements which are zero.
        for (; c[i] === 0; c.pop(), i--);

        // Zero?
        if (i < 0) {
          c = [e = 0];
        } else {

          // Remove leading elements which are zero and adjust exponent accordingly.
          for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);

          // Count the digits of the first element of c to determine leading zeros, and...
          for (i = 1, v = c[0]; v >= 10; v /= 10, i++);

          // adjust the exponent accordingly.
          if (i < LOG_BASE) e -= LOG_BASE - i;
        }

        rand.e = e;
        rand.c = c;
        return rand;
      };
    })();


    /*
     * Return a BigNumber whose value is the sum of the arguments.
     *
     * arguments {number|string|BigNumber}
     */
    BigNumber.sum = function () {
      var i = 1,
        args = arguments,
        sum = new BigNumber(args[0]);
      for (; i < args.length;) sum = sum.plus(args[i++]);
      return sum;
    };


    // PRIVATE FUNCTIONS


    // Called by BigNumber and BigNumber.prototype.toString.
    convertBase = (function () {
      var decimal = '0123456789';

      /*
       * Convert string of baseIn to an array of numbers of baseOut.
       * Eg. toBaseOut('255', 10, 16) returns [15, 15].
       * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].
       */
      function toBaseOut(str, baseIn, baseOut, alphabet) {
        var j,
          arr = [0],
          arrL,
          i = 0,
          len = str.length;

        for (; i < len;) {
          for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);

          arr[0] += alphabet.indexOf(str.charAt(i++));

          for (j = 0; j < arr.length; j++) {

            if (arr[j] > baseOut - 1) {
              if (arr[j + 1] == null) arr[j + 1] = 0;
              arr[j + 1] += arr[j] / baseOut | 0;
              arr[j] %= baseOut;
            }
          }
        }

        return arr.reverse();
      }

      // Convert a numeric string of baseIn to a numeric string of baseOut.
      // If the caller is toString, we are converting from base 10 to baseOut.
      // If the caller is BigNumber, we are converting from baseIn to base 10.
      return function (str, baseIn, baseOut, sign, callerIsToString) {
        var alphabet, d, e, k, r, x, xc, y,
          i = str.indexOf('.'),
          dp = DECIMAL_PLACES,
          rm = ROUNDING_MODE;

        // Non-integer.
        if (i >= 0) {
          k = POW_PRECISION;

          // Unlimited precision.
          POW_PRECISION = 0;
          str = str.replace('.', '');
          y = new BigNumber(baseIn);
          x = y.pow(str.length - i);
          POW_PRECISION = k;

          // Convert str as if an integer, then restore the fraction part by dividing the
          // result by its base raised to a power.

          y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),
           10, baseOut, decimal);
          y.e = y.c.length;
        }

        // Convert the number as integer.

        xc = toBaseOut(str, baseIn, baseOut, callerIsToString
         ? (alphabet = ALPHABET, decimal)
         : (alphabet = decimal, ALPHABET));

        // xc now represents str as an integer and converted to baseOut. e is the exponent.
        e = k = xc.length;

        // Remove trailing zeros.
        for (; xc[--k] == 0; xc.pop());

        // Zero?
        if (!xc[0]) return alphabet.charAt(0);

        // Does str represent an integer? If so, no need for the division.
        if (i < 0) {
          --e;
        } else {
          x.c = xc;
          x.e = e;

          // The sign is needed for correct rounding.
          x.s = sign;
          x = div(x, y, dp, rm, baseOut);
          xc = x.c;
          r = x.r;
          e = x.e;
        }

        // xc now represents str converted to baseOut.

        // THe index of the rounding digit.
        d = e + dp + 1;

        // The rounding digit: the digit to the right of the digit that may be rounded up.
        i = xc[d];

        // Look at the rounding digits and mode to determine whether to round up.

        k = baseOut / 2;
        r = r || d < 0 || xc[d + 1] != null;

        r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
              : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||
               rm == (x.s < 0 ? 8 : 7));

        // If the index of the rounding digit is not greater than zero, or xc represents
        // zero, then the result of the base conversion is zero or, if rounding up, a value
        // such as 0.00001.
        if (d < 1 || !xc[0]) {

          // 1^-dp or 0
          str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);
        } else {

          // Truncate xc to the required number of decimal places.
          xc.length = d;

          // Round up?
          if (r) {

            // Rounding up may mean the previous digit has to be rounded up and so on.
            for (--baseOut; ++xc[--d] > baseOut;) {
              xc[d] = 0;

              if (!d) {
                ++e;
                xc = [1].concat(xc);
              }
            }
          }

          // Determine trailing zeros.
          for (k = xc.length; !xc[--k];);

          // E.g. [4, 11, 15] becomes 4bf.
          for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));

          // Add leading zeros, decimal point and trailing zeros as required.
          str = toFixedPoint(str, e, alphabet.charAt(0));
        }

        // The caller will add the sign.
        return str;
      };
    })();


    // Perform division in the specified base. Called by div and convertBase.
    div = (function () {

      // Assume non-zero x and k.
      function multiply(x, k, base) {
        var m, temp, xlo, xhi,
          carry = 0,
          i = x.length,
          klo = k % SQRT_BASE,
          khi = k / SQRT_BASE | 0;

        for (x = x.slice(); i--;) {
          xlo = x[i] % SQRT_BASE;
          xhi = x[i] / SQRT_BASE | 0;
          m = khi * xlo + xhi * klo;
          temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;
          carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;
          x[i] = temp % base;
        }

        if (carry) x = [carry].concat(x);

        return x;
      }

      function compare(a, b, aL, bL) {
        var i, cmp;

        if (aL != bL) {
          cmp = aL > bL ? 1 : -1;
        } else {

          for (i = cmp = 0; i < aL; i++) {

            if (a[i] != b[i]) {
              cmp = a[i] > b[i] ? 1 : -1;
              break;
            }
          }
        }

        return cmp;
      }

      function subtract(a, b, aL, base) {
        var i = 0;

        // Subtract b from a.
        for (; aL--;) {
          a[aL] -= i;
          i = a[aL] < b[aL] ? 1 : 0;
          a[aL] = i * base + a[aL] - b[aL];
        }

        // Remove leading zeros.
        for (; !a[0] && a.length > 1; a.splice(0, 1));
      }

      // x: dividend, y: divisor.
      return function (x, y, dp, rm, base) {
        var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,
          yL, yz,
          s = x.s == y.s ? 1 : -1,
          xc = x.c,
          yc = y.c;

        // Either NaN, Infinity or 0?
        if (!xc || !xc[0] || !yc || !yc[0]) {

          return new BigNumber(

           // Return NaN if either NaN, or both Infinity or 0.
           !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :

            // Return Â±0 if x is Â±0 or y is Â±Infinity, or return Â±Infinity as y is Â±0.
            xc && xc[0] == 0 || !yc ? s * 0 : s / 0
         );
        }

        q = new BigNumber(s);
        qc = q.c = [];
        e = x.e - y.e;
        s = dp + e + 1;

        if (!base) {
          base = BASE;
          e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);
          s = s / LOG_BASE | 0;
        }

        // Result exponent may be one less then the current value of e.
        // The coefficients of the BigNumbers from convertBase may have trailing zeros.
        for (i = 0; yc[i] == (xc[i] || 0); i++);

        if (yc[i] > (xc[i] || 0)) e--;

        if (s < 0) {
          qc.push(1);
          more = true;
        } else {
          xL = xc.length;
          yL = yc.length;
          i = 0;
          s += 2;

          // Normalise xc and yc so highest order digit of yc is >= base / 2.

          n = mathfloor(base / (yc[0] + 1));

          // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.
          // if (n > 1 || n++ == 1 && yc[0] < base / 2) {
          if (n > 1) {
            yc = multiply(yc, n, base);
            xc = multiply(xc, n, base);
            yL = yc.length;
            xL = xc.length;
          }

          xi = yL;
          rem = xc.slice(0, yL);
          remL = rem.length;

          // Add zeros to make remainder as long as divisor.
          for (; remL < yL; rem[remL++] = 0);
          yz = yc.slice();
          yz = [0].concat(yz);
          yc0 = yc[0];
          if (yc[1] >= base / 2) yc0++;
          // Not necessary, but to prevent trial digit n > base, when using base 3.
          // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;

          do {
            n = 0;

            // Compare divisor and remainder.
            cmp = compare(yc, rem, yL, remL);

            // If divisor < remainder.
            if (cmp < 0) {

              // Calculate trial digit, n.

              rem0 = rem[0];
              if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);

              // n is how many times the divisor goes into the current remainder.
              n = mathfloor(rem0 / yc0);

              //  Algorithm:
              //  product = divisor multiplied by trial digit (n).
              //  Compare product and remainder.
              //  If product is greater than remainder:
              //    Subtract divisor from product, decrement trial digit.
              //  Subtract product from remainder.
              //  If product was less than remainder at the last compare:
              //    Compare new remainder and divisor.
              //    If remainder is greater than divisor:
              //      Subtract divisor from remainder, increment trial digit.

              if (n > 1) {

                // n may be > base only when base is 3.
                if (n >= base) n = base - 1;

                // product = divisor * trial digit.
                prod = multiply(yc, n, base);
                prodL = prod.length;
                remL = rem.length;

                // Compare product and remainder.
                // If product > remainder then trial digit n too high.
                // n is 1 too high about 5% of the time, and is not known to have
                // ever been more than 1 too high.
                while (compare(prod, rem, prodL, remL) == 1) {
                  n--;

                  // Subtract divisor from product.
                  subtract(prod, yL < prodL ? yz : yc, prodL, base);
                  prodL = prod.length;
                  cmp = 1;
                }
              } else {

                // n is 0 or 1, cmp is -1.
                // If n is 0, there is no need to compare yc and rem again below,
                // so change cmp to 1 to avoid it.
                // If n is 1, leave cmp as -1, so yc and rem are compared again.
                if (n == 0) {

                  // divisor < remainder, so n must be at least 1.
                  cmp = n = 1;
                }

                // product = divisor
                prod = yc.slice();
                prodL = prod.length;
              }

              if (prodL < remL) prod = [0].concat(prod);

              // Subtract product from remainder.
              subtract(rem, prod, remL, base);
              remL = rem.length;

               // If product was < remainder.
              if (cmp == -1) {

                // Compare divisor and new remainder.
                // If divisor < new remainder, subtract divisor from remainder.
                // Trial digit n too low.
                // n is 1 too low about 5% of the time, and very rarely 2 too low.
                while (compare(yc, rem, yL, remL) < 1) {
                  n++;

                  // Subtract divisor from remainder.
                  subtract(rem, yL < remL ? yz : yc, remL, base);
                  remL = rem.length;
                }
              }
            } else if (cmp === 0) {
              n++;
              rem = [0];
            } // else cmp === 1 and n will be 0

            // Add the next digit, n, to the result array.
            qc[i++] = n;

            // Update the remainder.
            if (rem[0]) {
              rem[remL++] = xc[xi] || 0;
            } else {
              rem = [xc[xi]];
              remL = 1;
            }
          } while ((xi++ < xL || rem[0] != null) && s--);

          more = rem[0] != null;

          // Leading zero?
          if (!qc[0]) qc.splice(0, 1);
        }

        if (base == BASE) {

          // To calculate q.e, first get the number of digits of qc[0].
          for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);

          round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);

        // Caller is convertBase.
        } else {
          q.e = e;
          q.r = +more;
        }

        return q;
      };
    })();


    /*
     * Return a string representing the value of BigNumber n in fixed-point or exponential
     * notation rounded to the specified decimal places or significant digits.
     *
     * n: a BigNumber.
     * i: the index of the last digit required (i.e. the digit that may be rounded up).
     * rm: the rounding mode.
     * id: 1 (toExponential) or 2 (toPrecision).
     */
    function format(n, i, rm, id) {
      var c0, e, ne, len, str;

      if (rm == null) rm = ROUNDING_MODE;
      else intCheck(rm, 0, 8);

      if (!n.c) return n.toString();

      c0 = n.c[0];
      ne = n.e;

      if (i == null) {
        str = coeffToString(n.c);
        str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)
         ? toExponential(str, ne)
         : toFixedPoint(str, ne, '0');
      } else {
        n = round(new BigNumber(n), i, rm);

        // n.e may have changed if the value was rounded up.
        e = n.e;

        str = coeffToString(n.c);
        len = str.length;

        // toPrecision returns exponential notation if the number of significant digits
        // specified is less than the number of digits necessary to represent the integer
        // part of the value in fixed-point notation.

        // Exponential notation.
        if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {

          // Append zeros?
          for (; len < i; str += '0', len++);
          str = toExponential(str, e);

        // Fixed-point notation.
        } else {
          i -= ne;
          str = toFixedPoint(str, e, '0');

          // Append zeros?
          if (e + 1 > len) {
            if (--i > 0) for (str += '.'; i--; str += '0');
          } else {
            i += e - len;
            if (i > 0) {
              if (e + 1 == len) str += '.';
              for (; i--; str += '0');
            }
          }
        }
      }

      return n.s < 0 && c0 ? '-' + str : str;
    }


    // Handle BigNumber.max and BigNumber.min.
    function maxOrMin(args, method) {
      var n,
        i = 1,
        m = new BigNumber(args[0]);

      for (; i < args.length; i++) {
        n = new BigNumber(args[i]);

        // If any number is NaN, return NaN.
        if (!n.s) {
          m = n;
          break;
        } else if (method.call(m, n)) {
          m = n;
        }
      }

      return m;
    }


    /*
     * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.
     * Called by minus, plus and times.
     */
    function normalise(n, c, e) {
      var i = 1,
        j = c.length;

       // Remove trailing zeros.
      for (; !c[--j]; c.pop());

      // Calculate the base 10 exponent. First get the number of digits of c[0].
      for (j = c[0]; j >= 10; j /= 10, i++);

      // Overflow?
      if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {

        // Infinity.
        n.c = n.e = null;

      // Underflow?
      } else if (e < MIN_EXP) {

        // Zero.
        n.c = [n.e = 0];
      } else {
        n.e = e;
        n.c = c;
      }

      return n;
    }


    // Handle values that fail the validity test in BigNumber.
    parseNumeric = (function () {
      var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i,
        dotAfter = /^([^.]+)\.$/,
        dotBefore = /^\.([^.]+)$/,
        isInfinityOrNaN = /^-?(Infinity|NaN)$/,
        whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g;

      return function (x, str, isNum, b) {
        var base,
          s = isNum ? str : str.replace(whitespaceOrPlus, '');

        // No exception on Â±Infinity or NaN.
        if (isInfinityOrNaN.test(s)) {
          x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
        } else {
          if (!isNum) {

            // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i
            s = s.replace(basePrefix, function (m, p1, p2) {
              base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;
              return !b || b == base ? p1 : m;
            });

            if (b) {
              base = b;

              // E.g. '1.' to '1', '.1' to '0.1'
              s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');
            }

            if (str != s) return new BigNumber(s, base);
          }

          // '[BigNumber Error] Not a number: {n}'
          // '[BigNumber Error] Not a base {b} number: {n}'
          if (BigNumber.DEBUG) {
            throw Error
              (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);
          }

          // NaN
          x.s = null;
        }

        x.c = x.e = null;
      }
    })();


    /*
     * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.
     * If r is truthy, it is known that there are more digits after the rounding digit.
     */
    function round(x, sd, rm, r) {
      var d, i, j, k, n, ni, rd,
        xc = x.c,
        pows10 = POWS_TEN;

      // if x is not Infinity or NaN...
      if (xc) {

        // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.
        // n is a base 1e14 number, the value of the element of array x.c containing rd.
        // ni is the index of n within x.c.
        // d is the number of digits of n.
        // i is the index of rd within n including leading zeros.
        // j is the actual index of rd within n (if < 0, rd is a leading zero).
        out: {

          // Get the number of digits of the first element of xc.
          for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);
          i = sd - d;

          // If the rounding digit is in the first element of xc...
          if (i < 0) {
            i += LOG_BASE;
            j = sd;
            n = xc[ni = 0];

            // Get the rounding digit at index j of n.
            rd = n / pows10[d - j - 1] % 10 | 0;
          } else {
            ni = mathceil((i + 1) / LOG_BASE);

            if (ni >= xc.length) {

              if (r) {

                // Needed by sqrt.
                for (; xc.length <= ni; xc.push(0));
                n = rd = 0;
                d = 1;
                i %= LOG_BASE;
                j = i - LOG_BASE + 1;
              } else {
                break out;
              }
            } else {
              n = k = xc[ni];

              // Get the number of digits of n.
              for (d = 1; k >= 10; k /= 10, d++);

              // Get the index of rd within n.
              i %= LOG_BASE;

              // Get the index of rd within n, adjusted for leading zeros.
              // The number of leading zeros of n is given by LOG_BASE - d.
              j = i - LOG_BASE + d;

              // Get the rounding digit at index j of n.
              rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;
            }
          }

          r = r || sd < 0 ||

          // Are there any non-zero digits after the rounding digit?
          // The expression  n % pows10[d - j - 1]  returns all digits of n to the right
          // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
           xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);

          r = rm < 4
           ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
           : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&

            // Check whether the digit to the left of the rounding digit is odd.
            ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||
             rm == (x.s < 0 ? 8 : 7));

          if (sd < 1 || !xc[0]) {
            xc.length = 0;

            if (r) {

              // Convert sd to decimal places.
              sd -= x.e + 1;

              // 1, 0.1, 0.01, 0.001, 0.0001 etc.
              xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];
              x.e = -sd || 0;
            } else {

              // Zero.
              xc[0] = x.e = 0;
            }

            return x;
          }

          // Remove excess digits.
          if (i == 0) {
            xc.length = ni;
            k = 1;
            ni--;
          } else {
            xc.length = ni + 1;
            k = pows10[LOG_BASE - i];

            // E.g. 56700 becomes 56000 if 7 is the rounding digit.
            // j > 0 means i > number of leading zeros of n.
            xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;
          }

          // Round up?
          if (r) {

            for (; ;) {

              // If the digit to be rounded up is in the first element of xc...
              if (ni == 0) {

                // i will be the length of xc[0] before k is added.
                for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);
                j = xc[0] += k;
                for (k = 1; j >= 10; j /= 10, k++);

                // if i != k the length has increased.
                if (i != k) {
                  x.e++;
                  if (xc[0] == BASE) xc[0] = 1;
                }

                break;
              } else {
                xc[ni] += k;
                if (xc[ni] != BASE) break;
                xc[ni--] = 0;
                k = 1;
              }
            }
          }

          // Remove trailing zeros.
          for (i = xc.length; xc[--i] === 0; xc.pop());
        }

        // Overflow? Infinity.
        if (x.e > MAX_EXP) {
          x.c = x.e = null;

        // Underflow? Zero.
        } else if (x.e < MIN_EXP) {
          x.c = [x.e = 0];
        }
      }

      return x;
    }


    function valueOf(n) {
      var str,
        e = n.e;

      if (e === null) return n.toString();

      str = coeffToString(n.c);

      str = e <= TO_EXP_NEG || e >= TO_EXP_POS
        ? toExponential(str, e)
        : toFixedPoint(str, e, '0');

      return n.s < 0 ? '-' + str : str;
    }


    // PROTOTYPE/INSTANCE METHODS


    /*
     * Return a new BigNumber whose value is the absolute value of this BigNumber.
     */
    P.absoluteValue = P.abs = function () {
      var x = new BigNumber(this);
      if (x.s < 0) x.s = 1;
      return x;
    };


    /*
     * Return
     *   1 if the value of this BigNumber is greater than the value of BigNumber(y, b),
     *   -1 if the value of this BigNumber is less than the value of BigNumber(y, b),
     *   0 if they have the same value,
     *   or null if the value of either is NaN.
     */
    P.comparedTo = function (y, b) {
      return compare(this, new BigNumber(y, b));
    };


    /*
     * If dp is undefined or null or true or false, return the number of decimal places of the
     * value of this BigNumber, or null if the value of this BigNumber is Â±Infinity or NaN.
     *
     * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this
     * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or
     * ROUNDING_MODE if rm is omitted.
     *
     * [dp] {number} Decimal places: integer, 0 to MAX inclusive.
     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
     *
     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
     */
    P.decimalPlaces = P.dp = function (dp, rm) {
      var c, n, v,
        x = this;

      if (dp != null) {
        intCheck(dp, 0, MAX);
        if (rm == null) rm = ROUNDING_MODE;
        else intCheck(rm, 0, 8);

        return round(new BigNumber(x), dp + x.e + 1, rm);
      }

      if (!(c = x.c)) return null;
      n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;

      // Subtract the number of trailing zeros of the last number.
      if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);
      if (n < 0) n = 0;

      return n;
    };


    /*
     *  n / 0 = I
     *  n / N = N
     *  n / I = 0
     *  0 / n = 0
     *  0 / 0 = N
     *  0 / N = N
     *  0 / I = 0
     *  N / n = N
     *  N / 0 = N
     *  N / N = N
     *  N / I = N
     *  I / n = I
     *  I / 0 = I
     *  I / N = N
     *  I / I = N
     *
     * Return a new BigNumber whose value is the value of this BigNumber divided by the value of
     * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.
     */
    P.dividedBy = P.div = function (y, b) {
      return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);
    };


    /*
     * Return a new BigNumber whose value is the integer part of dividing the value of this
     * BigNumber by the value of BigNumber(y, b).
     */
    P.dividedToIntegerBy = P.idiv = function (y, b) {
      return div(this, new BigNumber(y, b), 0, 1);
    };


    /*
     * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.
     *
     * If m is present, return the result modulo m.
     * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.
     * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.
     *
     * The modular power operation works efficiently when x, n, and m are integers, otherwise it
     * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.
     *
     * n {number|string|BigNumber} The exponent. An integer.
     * [m] {number|string|BigNumber} The modulus.
     *
     * '[BigNumber Error] Exponent not an integer: {n}'
     */
    P.exponentiatedBy = P.pow = function (n, m) {
      var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,
        x = this;

      n = new BigNumber(n);

      // Allow NaN and Â±Infinity, but not other non-integers.
      if (n.c && !n.isInteger()) {
        throw Error
          (bignumberError + 'Exponent not an integer: ' + valueOf(n));
      }

      if (m != null) m = new BigNumber(m);

      // Exponent of MAX_SAFE_INTEGER is 15.
      nIsBig = n.e > 14;

      // If x is NaN, Â±Infinity, Â±0 or Â±1, or n is Â±Infinity, NaN or Â±0.
      if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {

        // The sign of the result of pow when x is negative depends on the evenness of n.
        // If +n overflows to Â±Infinity, the evenness of n would be not be known.
        y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));
        return m ? y.mod(m) : y;
      }

      nIsNeg = n.s < 0;

      if (m) {

        // x % m returns NaN if abs(m) is zero, or m is NaN.
        if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);

        isModExp = !nIsNeg && x.isInteger() && m.isInteger();

        if (isModExp) x = x.mod(m);

      // Overflow to Â±Infinity: >=2**1e10 or >=1.0000024**1e15.
      // Underflow to Â±0: <=0.79**1e10 or <=0.9999975**1e15.
      } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0
        // [1, 240000000]
        ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7
        // [80000000000000]  [99999750000000]
        : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {

        // If x is negative and n is odd, k = -0, else k = 0.
        k = x.s < 0 && isOdd(n) ? -0 : 0;

        // If x >= 1, k = Â±Infinity.
        if (x.e > -1) k = 1 / k;

        // If n is negative return Â±0, else return Â±Infinity.
        return new BigNumber(nIsNeg ? 1 / k : k);

      } else if (POW_PRECISION) {

        // Truncating each coefficient array to a length of k after each multiplication
        // equates to truncating significant digits to POW_PRECISION + [28, 41],
        // i.e. there will be a minimum of 28 guard digits retained.
        k = mathceil(POW_PRECISION / LOG_BASE + 2);
      }

      if (nIsBig) {
        half = new BigNumber(0.5);
        if (nIsNeg) n.s = 1;
        nIsOdd = isOdd(n);
      } else {
        i = Math.abs(+valueOf(n));
        nIsOdd = i % 2;
      }

      y = new BigNumber(ONE);

      // Performs 54 loop iterations for n of 9007199254740991.
      for (; ;) {

        if (nIsOdd) {
          y = y.times(x);
          if (!y.c) break;

          if (k) {
            if (y.c.length > k) y.c.length = k;
          } else if (isModExp) {
            y = y.mod(m);    //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));
          }
        }

        if (i) {
          i = mathfloor(i / 2);
          if (i === 0) break;
          nIsOdd = i % 2;
        } else {
          n = n.times(half);
          round(n, n.e + 1, 1);

          if (n.e > 14) {
            nIsOdd = isOdd(n);
          } else {
            i = +valueOf(n);
            if (i === 0) break;
            nIsOdd = i % 2;
          }
        }

        x = x.times(x);

        if (k) {
          if (x.c && x.c.length > k) x.c.length = k;
        } else if (isModExp) {
          x = x.mod(m);    //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));
        }
      }

      if (isModExp) return y;
      if (nIsNeg) y = ONE.div(y);

      return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;
    };


    /*
     * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer
     * using rounding mode rm, or ROUNDING_MODE if rm is omitted.
     *
     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
     *
     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'
     */
    P.integerValue = function (rm) {
      var n = new BigNumber(this);
      if (rm == null) rm = ROUNDING_MODE;
      else intCheck(rm, 0, 8);
      return round(n, n.e + 1, rm);
    };


    /*
     * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),
     * otherwise return false.
     */
    P.isEqualTo = P.eq = function (y, b) {
      return compare(this, new BigNumber(y, b)) === 0;
    };


    /*
     * Return true if the value of this BigNumber is a finite number, otherwise return false.
     */
    P.isFinite = function () {
      return !!this.c;
    };


    /*
     * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),
     * otherwise return false.
     */
    P.isGreaterThan = P.gt = function (y, b) {
      return compare(this, new BigNumber(y, b)) > 0;
    };


    /*
     * Return true if the value of this BigNumber is greater than or equal to the value of
     * BigNumber(y, b), otherwise return false.
     */
    P.isGreaterThanOrEqualTo = P.gte = function (y, b) {
      return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;

    };


    /*
     * Return true if the value of this BigNumber is an integer, otherwise return false.
     */
    P.isInteger = function () {
      return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;
    };


    /*
     * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),
     * otherwise return false.
     */
    P.isLessThan = P.lt = function (y, b) {
      return compare(this, new BigNumber(y, b)) < 0;
    };


    /*
     * Return true if the value of this BigNumber is less than or equal to the value of
     * BigNumber(y, b), otherwise return false.
     */
    P.isLessThanOrEqualTo = P.lte = function (y, b) {
      return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;
    };


    /*
     * Return true if the value of this BigNumber is NaN, otherwise return false.
     */
    P.isNaN = function () {
      return !this.s;
    };


    /*
     * Return true if the value of this BigNumber is negative, otherwise return false.
     */
    P.isNegative = function () {
      return this.s < 0;
    };


    /*
     * Return true if the value of this BigNumber is positive, otherwise return false.
     */
    P.isPositive = function () {
      return this.s > 0;
    };


    /*
     * Return true if the value of this BigNumber is 0 or -0, otherwise return false.
     */
    P.isZero = function () {
      return !!this.c && this.c[0] == 0;
    };


    /*
     *  n - 0 = n
     *  n - N = N
     *  n - I = -I
     *  0 - n = -n
     *  0 - 0 = 0
     *  0 - N = N
     *  0 - I = -I
     *  N - n = N
     *  N - 0 = N
     *  N - N = N
     *  N - I = N
     *  I - n = I
     *  I - 0 = I
     *  I - N = N
     *  I - I = N
     *
     * Return a new BigNumber whose value is the value of this BigNumber minus the value of
     * BigNumber(y, b).
     */
    P.minus = function (y, b) {
      var i, j, t, xLTy,
        x = this,
        a = x.s;

      y = new BigNumber(y, b);
      b = y.s;

      // Either NaN?
      if (!a || !b) return new BigNumber(NaN);

      // Signs differ?
      if (a != b) {
        y.s = -b;
        return x.plus(y);
      }

      var xe = x.e / LOG_BASE,
        ye = y.e / LOG_BASE,
        xc = x.c,
        yc = y.c;

      if (!xe || !ye) {

        // Either Infinity?
        if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);

        // Either zero?
        if (!xc[0] || !yc[0]) {

          // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
          return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :

           // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
           ROUNDING_MODE == 3 ? -0 : 0);
        }
      }

      xe = bitFloor(xe);
      ye = bitFloor(ye);
      xc = xc.slice();

      // Determine which is the bigger number.
      if (a = xe - ye) {

        if (xLTy = a < 0) {
          a = -a;
          t = xc;
        } else {
          ye = xe;
          t = yc;
        }

        t.reverse();

        // Prepend zeros to equalise exponents.
        for (b = a; b--; t.push(0));
        t.reverse();
      } else {

        // Exponents equal. Check digit by digit.
        j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;

        for (a = b = 0; b < j; b++) {

          if (xc[b] != yc[b]) {
            xLTy = xc[b] < yc[b];
            break;
          }
        }
      }

      // x < y? Point xc to the array of the bigger number.
      if (xLTy) {
        t = xc;
        xc = yc;
        yc = t;
        y.s = -y.s;
      }

      b = (j = yc.length) - (i = xc.length);

      // Append zeros to xc if shorter.
      // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.
      if (b > 0) for (; b--; xc[i++] = 0);
      b = BASE - 1;

      // Subtract yc from xc.
      for (; j > a;) {

        if (xc[--j] < yc[j]) {
          for (i = j; i && !xc[--i]; xc[i] = b);
          --xc[i];
          xc[j] += BASE;
        }

        xc[j] -= yc[j];
      }

      // Remove leading zeros and adjust exponent accordingly.
      for (; xc[0] == 0; xc.splice(0, 1), --ye);

      // Zero?
      if (!xc[0]) {

        // Following IEEE 754 (2008) 6.3,
        // n - n = +0  but  n - n = -0  when rounding towards -Infinity.
        y.s = ROUNDING_MODE == 3 ? -1 : 1;
        y.c = [y.e = 0];
        return y;
      }

      // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
      // for finite x and y.
      return normalise(y, xc, ye);
    };


    /*
     *   n % 0 =  N
     *   n % N =  N
     *   n % I =  n
     *   0 % n =  0
     *  -0 % n = -0
     *   0 % 0 =  N
     *   0 % N =  N
     *   0 % I =  0
     *   N % n =  N
     *   N % 0 =  N
     *   N % N =  N
     *   N % I =  N
     *   I % n =  N
     *   I % 0 =  N
     *   I % N =  N
     *   I % I =  N
     *
     * Return a new BigNumber whose value is the value of this BigNumber modulo the value of
     * BigNumber(y, b). The result depends on the value of MODULO_MODE.
     */
    P.modulo = P.mod = function (y, b) {
      var q, s,
        x = this;

      y = new BigNumber(y, b);

      // Return NaN if x is Infinity or NaN, or y is NaN or zero.
      if (!x.c || !y.s || y.c && !y.c[0]) {
        return new BigNumber(NaN);

      // Return x if y is Infinity or x is zero.
      } else if (!y.c || x.c && !x.c[0]) {
        return new BigNumber(x);
      }

      if (MODULO_MODE == 9) {

        // Euclidian division: q = sign(y) * floor(x / abs(y))
        // r = x - qy    where  0 <= r < abs(y)
        s = y.s;
        y.s = 1;
        q = div(x, y, 0, 3);
        y.s = s;
        q.s *= s;
      } else {
        q = div(x, y, 0, MODULO_MODE);
      }

      y = x.minus(q.times(y));

      // To match JavaScript %, ensure sign of zero is sign of dividend.
      if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;

      return y;
    };


    /*
     *  n * 0 = 0
     *  n * N = N
     *  n * I = I
     *  0 * n = 0
     *  0 * 0 = 0
     *  0 * N = N
     *  0 * I = N
     *  N * n = N
     *  N * 0 = N
     *  N * N = N
     *  N * I = N
     *  I * n = I
     *  I * 0 = N
     *  I * N = N
     *  I * I = I
     *
     * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value
     * of BigNumber(y, b).
     */
    P.multipliedBy = P.times = function (y, b) {
      var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,
        base, sqrtBase,
        x = this,
        xc = x.c,
        yc = (y = new BigNumber(y, b)).c;

      // Either NaN, Â±Infinity or Â±0?
      if (!xc || !yc || !xc[0] || !yc[0]) {

        // Return NaN if either is NaN, or one is 0 and the other is Infinity.
        if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {
          y.c = y.e = y.s = null;
        } else {
          y.s *= x.s;

          // Return Â±Infinity if either is Â±Infinity.
          if (!xc || !yc) {
            y.c = y.e = null;

          // Return Â±0 if either is Â±0.
          } else {
            y.c = [0];
            y.e = 0;
          }
        }

        return y;
      }

      e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);
      y.s *= x.s;
      xcL = xc.length;
      ycL = yc.length;

      // Ensure xc points to longer array and xcL to its length.
      if (xcL < ycL) {
        zc = xc;
        xc = yc;
        yc = zc;
        i = xcL;
        xcL = ycL;
        ycL = i;
      }

      // Initialise the result array with zeros.
      for (i = xcL + ycL, zc = []; i--; zc.push(0));

      base = BASE;
      sqrtBase = SQRT_BASE;

      for (i = ycL; --i >= 0;) {
        c = 0;
        ylo = yc[i] % sqrtBase;
        yhi = yc[i] / sqrtBase | 0;

        for (k = xcL, j = i + k; j > i;) {
          xlo = xc[--k] % sqrtBase;
          xhi = xc[k] / sqrtBase | 0;
          m = yhi * xlo + xhi * ylo;
          xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;
          c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;
          zc[j--] = xlo % base;
        }

        zc[j] = c;
      }

      if (c) {
        ++e;
      } else {
        zc.splice(0, 1);
      }

      return normalise(y, zc, e);
    };


    /*
     * Return a new BigNumber whose value is the value of this BigNumber negated,
     * i.e. multiplied by -1.
     */
    P.negated = function () {
      var x = new BigNumber(this);
      x.s = -x.s || null;
      return x;
    };


    /*
     *  n + 0 = n
     *  n + N = N
     *  n + I = I
     *  0 + n = n
     *  0 + 0 = 0
     *  0 + N = N
     *  0 + I = I
     *  N + n = N
     *  N + 0 = N
     *  N + N = N
     *  N + I = N
     *  I + n = I
     *  I + 0 = I
     *  I + N = N
     *  I + I = I
     *
     * Return a new BigNumber whose value is the value of this BigNumber plus the value of
     * BigNumber(y, b).
     */
    P.plus = function (y, b) {
      var t,
        x = this,
        a = x.s;

      y = new BigNumber(y, b);
      b = y.s;

      // Either NaN?
      if (!a || !b) return new BigNumber(NaN);

      // Signs differ?
       if (a != b) {
        y.s = -b;
        return x.minus(y);
      }

      var xe = x.e / LOG_BASE,
        ye = y.e / LOG_BASE,
        xc = x.c,
        yc = y.c;

      if (!xe || !ye) {

        // Return Â±Infinity if either Â±Infinity.
        if (!xc || !yc) return new BigNumber(a / 0);

        // Either zero?
        // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
        if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);
      }

      xe = bitFloor(xe);
      ye = bitFloor(ye);
      xc = xc.slice();

      // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.
      if (a = xe - ye) {
        if (a > 0) {
          ye = xe;
          t = yc;
        } else {
          a = -a;
          t = xc;
        }

        t.reverse();
        for (; a--; t.push(0));
        t.reverse();
      }

      a = xc.length;
      b = yc.length;

      // Point xc to the longer array, and b to the shorter length.
      if (a - b < 0) {
        t = yc;
        yc = xc;
        xc = t;
        b = a;
      }

      // Only start adding at yc.length - 1 as the further digits of xc can be ignored.
      for (a = 0; b;) {
        a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;
        xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;
      }

      if (a) {
        xc = [a].concat(xc);
        ++ye;
      }

      // No need to check for zero, as +x + +y != 0 && -x + -y != 0
      // ye = MAX_EXP + 1 possible
      return normalise(y, xc, ye);
    };


    /*
     * If sd is undefined or null or true or false, return the number of significant digits of
     * the value of this BigNumber, or null if the value of this BigNumber is Â±Infinity or NaN.
     * If sd is true include integer-part trailing zeros in the count.
     *
     * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this
     * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or
     * ROUNDING_MODE if rm is omitted.
     *
     * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.
     *                     boolean: whether to count integer-part trailing zeros: true or false.
     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
     *
     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
     */
    P.precision = P.sd = function (sd, rm) {
      var c, n, v,
        x = this;

      if (sd != null && sd !== !!sd) {
        intCheck(sd, 1, MAX);
        if (rm == null) rm = ROUNDING_MODE;
        else intCheck(rm, 0, 8);

        return round(new BigNumber(x), sd, rm);
      }

      if (!(c = x.c)) return null;
      v = c.length - 1;
      n = v * LOG_BASE + 1;

      if (v = c[v]) {

        // Subtract the number of trailing zeros of the last element.
        for (; v % 10 == 0; v /= 10, n--);

        // Add the number of digits of the first element.
        for (v = c[0]; v >= 10; v /= 10, n++);
      }

      if (sd && x.e + 1 > n) n = x.e + 1;

      return n;
    };


    /*
     * Return a new BigNumber whose value is the value of this BigNumber shifted by k places
     * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.
     *
     * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
     *
     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'
     */
    P.shiftedBy = function (k) {
      intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);
      return this.times('1e' + k);
    };


    /*
     *  sqrt(-n) =  N
     *  sqrt(N) =  N
     *  sqrt(-I) =  N
     *  sqrt(I) =  I
     *  sqrt(0) =  0
     *  sqrt(-0) = -0
     *
     * Return a new BigNumber whose value is the square root of the value of this BigNumber,
     * rounded according to DECIMAL_PLACES and ROUNDING_MODE.
     */
    P.squareRoot = P.sqrt = function () {
      var m, n, r, rep, t,
        x = this,
        c = x.c,
        s = x.s,
        e = x.e,
        dp = DECIMAL_PLACES + 4,
        half = new BigNumber('0.5');

      // Negative/NaN/Infinity/zero?
      if (s !== 1 || !c || !c[0]) {
        return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);
      }

      // Initial estimate.
      s = Math.sqrt(+valueOf(x));

      // Math.sqrt underflow/overflow?
      // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
      if (s == 0 || s == 1 / 0) {
        n = coeffToString(c);
        if ((n.length + e) % 2 == 0) n += '0';
        s = Math.sqrt(+n);
        e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);

        if (s == 1 / 0) {
          n = '5e' + e;
        } else {
          n = s.toExponential();
          n = n.slice(0, n.indexOf('e') + 1) + e;
        }

        r = new BigNumber(n);
      } else {
        r = new BigNumber(s + '');
      }

      // Check for zero.
      // r could be zero if MIN_EXP is changed after the this value was created.
      // This would cause a division by zero (x/t) and hence Infinity below, which would cause
      // coeffToString to throw.
      if (r.c[0]) {
        e = r.e;
        s = e + dp;
        if (s < 3) s = 0;

        // Newton-Raphson iteration.
        for (; ;) {
          t = r;
          r = half.times(t.plus(div(x, t, dp, 1)));

          if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {

            // The exponent of r may here be one less than the final result exponent,
            // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits
            // are indexed correctly.
            if (r.e < e) --s;
            n = n.slice(s - 3, s + 1);

            // The 4th rounding digit may be in error by -1 so if the 4 rounding digits
            // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the
            // iteration.
            if (n == '9999' || !rep && n == '4999') {

              // On the first iteration only, check to see if rounding up gives the
              // exact result as the nines may infinitely repeat.
              if (!rep) {
                round(t, t.e + DECIMAL_PLACES + 2, 0);

                if (t.times(t).eq(x)) {
                  r = t;
                  break;
                }
              }

              dp += 4;
              s += 4;
              rep = 1;
            } else {

              // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact
              // result. If not, then there are further digits and m will be truthy.
              if (!+n || !+n.slice(1) && n.charAt(0) == '5') {

                // Truncate to the first rounding digit.
                round(r, r.e + DECIMAL_PLACES + 2, 1);
                m = !r.times(r).eq(x);
              }

              break;
            }
          }
        }
      }

      return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);
    };


    /*
     * Return a string representing the value of this BigNumber in exponential notation and
     * rounded using ROUNDING_MODE to dp fixed decimal places.
     *
     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
     *
     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
     */
    P.toExponential = function (dp, rm) {
      if (dp != null) {
        intCheck(dp, 0, MAX);
        dp++;
      }
      return format(this, dp, rm, 1);
    };


    /*
     * Return a string representing the value of this BigNumber in fixed-point notation rounding
     * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.
     *
     * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',
     * but e.g. (-0.00001).toFixed(0) is '-0'.
     *
     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
     *
     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
     */
    P.toFixed = function (dp, rm) {
      if (dp != null) {
        intCheck(dp, 0, MAX);
        dp = dp + this.e + 1;
      }
      return format(this, dp, rm);
    };


    /*
     * Return a string representing the value of this BigNumber in fixed-point notation rounded
     * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties
     * of the format or FORMAT object (see BigNumber.set).
     *
     * The formatting object may contain some or all of the properties shown below.
     *
     * FORMAT = {
     *   prefix: '',
     *   groupSize: 3,
     *   secondaryGroupSize: 0,
     *   groupSeparator: ',',
     *   decimalSeparator: '.',
     *   fractionGroupSize: 0,
     *   fractionGroupSeparator: '\xA0',      // non-breaking space
     *   suffix: ''
     * };
     *
     * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
     * [format] {object} Formatting options. See FORMAT pbject above.
     *
     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
     * '[BigNumber Error] Argument not an object: {format}'
     */
    P.toFormat = function (dp, rm, format) {
      var str,
        x = this;

      if (format == null) {
        if (dp != null && rm && typeof rm == 'object') {
          format = rm;
          rm = null;
        } else if (dp && typeof dp == 'object') {
          format = dp;
          dp = rm = null;
        } else {
          format = FORMAT;
        }
      } else if (typeof format != 'object') {
        throw Error
          (bignumberError + 'Argument not an object: ' + format);
      }

      str = x.toFixed(dp, rm);

      if (x.c) {
        var i,
          arr = str.split('.'),
          g1 = +format.groupSize,
          g2 = +format.secondaryGroupSize,
          groupSeparator = format.groupSeparator || '',
          intPart = arr[0],
          fractionPart = arr[1],
          isNeg = x.s < 0,
          intDigits = isNeg ? intPart.slice(1) : intPart,
          len = intDigits.length;

        if (g2) {
          i = g1;
          g1 = g2;
          g2 = i;
          len -= i;
        }

        if (g1 > 0 && len > 0) {
          i = len % g1 || g1;
          intPart = intDigits.substr(0, i);
          for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);
          if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);
          if (isNeg) intPart = '-' + intPart;
        }

        str = fractionPart
         ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)
          ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'),
           '$&' + (format.fractionGroupSeparator || ''))
          : fractionPart)
         : intPart;
      }

      return (format.prefix || '') + str + (format.suffix || '');
    };


    /*
     * Return an array of two BigNumbers representing the value of this BigNumber as a simple
     * fraction with an integer numerator and an integer denominator.
     * The denominator will be a positive non-zero value less than or equal to the specified
     * maximum denominator. If a maximum denominator is not specified, the denominator will be
     * the lowest value necessary to represent the number exactly.
     *
     * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.
     *
     * '[BigNumber Error] Argument {not an integer|out of range} : {md}'
     */
    P.toFraction = function (md) {
      var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,
        x = this,
        xc = x.c;

      if (md != null) {
        n = new BigNumber(md);

        // Throw if md is less than one or is not an integer, unless it is Infinity.
        if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {
          throw Error
            (bignumberError + 'Argument ' +
              (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));
        }
      }

      if (!xc) return new BigNumber(x);

      d = new BigNumber(ONE);
      n1 = d0 = new BigNumber(ONE);
      d1 = n0 = new BigNumber(ONE);
      s = coeffToString(xc);

      // Determine initial denominator.
      // d is a power of 10 and the minimum max denominator that specifies the value exactly.
      e = d.e = s.length - x.e - 1;
      d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];
      md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;

      exp = MAX_EXP;
      MAX_EXP = 1 / 0;
      n = new BigNumber(s);

      // n0 = d1 = 0
      n0.c[0] = 0;

      for (; ;)  {
        q = div(n, d, 0, 1);
        d2 = d0.plus(q.times(d1));
        if (d2.comparedTo(md) == 1) break;
        d0 = d1;
        d1 = d2;
        n1 = n0.plus(q.times(d2 = n1));
        n0 = d2;
        d = n.minus(q.times(d2 = d));
        n = d2;
      }

      d2 = div(md.minus(d0), d1, 0, 1);
      n0 = n0.plus(d2.times(n1));
      d0 = d0.plus(d2.times(d1));
      n0.s = n1.s = x.s;
      e = e * 2;

      // Determine which fraction is closer to x, n0/d0 or n1/d1
      r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(
          div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];

      MAX_EXP = exp;

      return r;
    };


    /*
     * Return the value of this BigNumber converted to a number primitive.
     */
    P.toNumber = function () {
      return +valueOf(this);
    };


    /*
     * Return a string representing the value of this BigNumber rounded to sd significant digits
     * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits
     * necessary to represent the integer part of the value in fixed-point notation, then use
     * exponential notation.
     *
     * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
     * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
     *
     * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
     */
    P.toPrecision = function (sd, rm) {
      if (sd != null) intCheck(sd, 1, MAX);
      return format(this, sd, rm, 2);
    };


    /*
     * Return a string representing the value of this BigNumber in base b, or base 10 if b is
     * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and
     * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent
     * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than
     * TO_EXP_NEG, return exponential notation.
     *
     * [b] {number} Integer, 2 to ALPHABET.length inclusive.
     *
     * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
     */
    P.toString = function (b) {
      var str,
        n = this,
        s = n.s,
        e = n.e;

      // Infinity or NaN?
      if (e === null) {
        if (s) {
          str = 'Infinity';
          if (s < 0) str = '-' + str;
        } else {
          str = 'NaN';
        }
      } else {
        if (b == null) {
          str = e <= TO_EXP_NEG || e >= TO_EXP_POS
           ? toExponential(coeffToString(n.c), e)
           : toFixedPoint(coeffToString(n.c), e, '0');
        } else if (b === 10 && alphabetHasNormalDecimalDigits) {
          n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);
          str = toFixedPoint(coeffToString(n.c), n.e, '0');
        } else {
          intCheck(b, 2, ALPHABET.length, 'Base');
          str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);
        }

        if (s < 0 && n.c[0]) str = '-' + str;
      }

      return str;
    };


    /*
     * Return as toString, but do not accept a base argument, and include the minus sign for
     * negative zero.
     */
    P.valueOf = P.toJSON = function () {
      return valueOf(this);
    };


    P._isBigNumber = true;

    if (configObject != null) BigNumber.set(configObject);

    return BigNumber;
  }


  // PRIVATE HELPER FUNCTIONS

  // These functions don't need access to variables,
  // e.g. DECIMAL_PLACES, in the scope of the `clone` function above.


  function bitFloor(n) {
    var i = n | 0;
    return n > 0 || n === i ? i : i - 1;
  }


  // Return a coefficient array as a string of base 10 digits.
  function coeffToString(a) {
    var s, z,
      i = 1,
      j = a.length,
      r = a[0] + '';

    for (; i < j;) {
      s = a[i++] + '';
      z = LOG_BASE - s.length;
      for (; z--; s = '0' + s);
      r += s;
    }

    // Determine trailing zeros.
    for (j = r.length; r.charCodeAt(--j) === 48;);

    return r.slice(0, j + 1 || 1);
  }


  // Compare the value of BigNumbers x and y.
  function compare(x, y) {
    var a, b,
      xc = x.c,
      yc = y.c,
      i = x.s,
      j = y.s,
      k = x.e,
      l = y.e;

    // Either NaN?
    if (!i || !j) return null;

    a = xc && !xc[0];
    b = yc && !yc[0];

    // Either zero?
    if (a || b) return a ? b ? 0 : -j : i;

    // Signs differ?
    if (i != j) return i;

    a = i < 0;
    b = k == l;

    // Either Infinity?
    if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;

    // Compare exponents.
    if (!b) return k > l ^ a ? 1 : -1;

    j = (k = xc.length) < (l = yc.length) ? k : l;

    // Compare digit by digit.
    for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;

    // Compare lengths.
    return k == l ? 0 : k > l ^ a ? 1 : -1;
  }


  /*
   * Check that n is a primitive number, an integer, and in range, otherwise throw.
   */
  function intCheck(n, min, max, name) {
    if (n < min || n > max || n !== mathfloor(n)) {
      throw Error
       (bignumberError + (name || 'Argument') + (typeof n == 'number'
         ? n < min || n > max ? ' out of range: ' : ' not an integer: '
         : ' not a primitive number: ') + String(n));
    }
  }


  // Assumes finite n.
  function isOdd(n) {
    var k = n.c.length - 1;
    return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;
  }


  function toExponential(str, e) {
    return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +
     (e < 0 ? 'e' : 'e+') + e;
  }


  function toFixedPoint(str, e, z) {
    var len, zs;

    // Negative exponent?
    if (e < 0) {

      // Prepend zeros.
      for (zs = z + '.'; ++e; zs += z);
      str = zs + str;

    // Positive exponent
    } else {
      len = str.length;

      // Append zeros.
      if (++e > len) {
        for (zs = z, e -= len; --e; zs += z);
        str += zs;
      } else if (e < len) {
        str = str.slice(0, e) + '.' + str.slice(e);
      }
    }

    return str;
  }


  // EXPORT


  BigNumber = clone();
  BigNumber['default'] = BigNumber.BigNumber = BigNumber;

  // AMD.
  if (typeof define == 'function' && define.amd) {
    define(function () { return BigNumber; });

  // Node.js and other environments that support module.exports.
  } else if (typeof module != 'undefined' && module.exports) {
    module.exports = BigNumber;

  // Browser.
  } else {
    if (!globalObject) {
      globalObject = typeof self != 'undefined' && self ? self : window;
    }

    globalObject.BigNumber = BigNumber;
  }
})(this);
/*
 *      bignumber.js v9.1.1
 *      A JavaScript library for arbitrary-precision arithmetic.
 *      https://github.com/MikeMcl/bignumber.js
 *      Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>
 *      MIT Licensed.
 *
 *      BigNumber.prototype methods     |  BigNumber methods
 *                                      |
 *      absoluteValue            abs    |  clone
 *      comparedTo                      |  config               set
 *      decimalPlaces            dp     |      DECIMAL_PLACES
 *      dividedBy                div    |      ROUNDING_MODE
 *      dividedToIntegerBy       idiv   |      EXPONENTIAL_AT
 *      exponentiatedBy          pow    |      RANGE
 *      integerValue                    |      CRYPTO
 *      isEqualTo                eq     |      MODULO_MODE
 *      isFinite                        |      POW_PRECISION
 *      isGreaterThan            gt     |      FORMAT
 *      isGreaterThanOrEqualTo   gte    |      ALPHABET
 *      isInteger                       |  isBigNumber
 *      isLessThan               lt     |  maximum              max
 *      isLessThanOrEqualTo      lte    |  minimum              min
 *      isNaN                           |  random
 *      isNegative                      |  sum
 *      isPositive                      |
 *      isZero                          |
 *      minus                           |
 *      modulo                   mod    |
 *      multipliedBy             times  |
 *      negated                         |
 *      plus                            |
 *      precision                sd     |
 *      shiftedBy                       |
 *      squareRoot               sqrt   |
 *      toExponential                   |
 *      toFixed                         |
 *      toFormat                        |
 *      toFraction                      |
 *      toJSON                          |
 *      toNumber                        |
 *      toPrecision                     |
 *      toString                        |
 *      valueOf                         |
 *
 */


var
  isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,
  mathceil = Math.ceil,
  mathfloor = Math.floor,

  bignumberError = '[BigNumber Error] ',
  tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',

  BASE = 1e14,
  LOG_BASE = 14,
  MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1
  // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1
  POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],
  SQRT_BASE = 1e7,

  // EDITABLE
  // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and
  // the arguments to toExponential, toFixed, toFormat, and toPrecision.
  MAX = 1E9;                                   // 0 to MAX_INT32


/*
 * Create and return a BigNumber constructor.
 */
function clone(configObject) {
  var div, convertBase, parseNumeric,
    P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },
    ONE = new BigNumber(1),


    //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------


    // The default values below must be integers within the inclusive ranges stated.
    // The values can also be changed at run-time using BigNumber.set.

    // The maximum number of decimal places for operations involving division.
    DECIMAL_PLACES = 20,                     // 0 to MAX

    // The rounding mode used when rounding to the above decimal places, and when using
    // toExponential, toFixed, toFormat and toPrecision, and round (default value).
    // UP         0 Away from zero.
    // DOWN       1 Towards zero.
    // CEIL       2 Towards +Infinity.
    // FLOOR      3 Towards -Infinity.
    // HALF_UP    4 Towards nearest neighbour. If equidistant, up.
    // HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.
    // HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.
    // HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.
    // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
    ROUNDING_MODE = 4,                       // 0 to 8

    // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]

    // The exponent value at and beneath which toString returns exponential notation.
    // Number type: -7
    TO_EXP_NEG = -7,                         // 0 to -MAX

    // The exponent value at and above which toString returns exponential notation.
    // Number type: 21
    TO_EXP_POS = 21,                         // 0 to MAX

    // RANGE : [MIN_EXP, MAX_EXP]

    // The minimum exponent value, beneath which underflow to zero occurs.
    // Number type: -324  (5e-324)
    MIN_EXP = -1e7,                          // -1 to -MAX

    // The maximum exponent value, above which overflow to Infinity occurs.
    // Number type:  308  (1.7976931348623157e+308)
    // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.
    MAX_EXP = 1e7,                           // 1 to MAX

    // Whether to use cryptographically-secure random number generation, if available.
    CRYPTO = false,                          // true or false

    // The modulo mode used when calculating the modulus: a mod n.
    // The quotient (q = a / n) is calculated according to the corresponding rounding mode.
    // The remainder (r) is calculated as: r = a - n * q.
    //
    // UP        0 The remainder is positive if the dividend is negative, else is negative.
    // DOWN      1 The remainder has the same sign as the dividend.
    //             This modulo mode is commonly known as 'truncated division' and is
    //             equivalent to (a % n) in JavaScript.
    // FLOOR     3 The remainder has the same sign as the divisor (Python %).
    // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.
    // EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).
    //             The remainder is always positive.
    //
    // The truncated division, floored division, Euclidian division and IEEE 754 remainder
    // modes are commonly used for the modulus operation.
    // Although the other rounding modes can also be used, they may not give useful results.
    MODULO_MODE = 1,                         // 0 to 9

    // The maximum number of significant digits of the result of the exponentiatedBy operation.
    // If POW_PRECISION is 0, there will be unlimited significant digits.
    POW_PRECISION = 0,                       // 0 to MAX

    // The format specification used by the BigNumber.prototype.toFormat method.
    FORMAT = {
      prefix: '',
      groupSize: 3,
      secondaryGroupSize: 0,
      groupSeparator: ',',
      decimalSeparator: '.',
      fractionGroupSize: 0,
      fractionGroupSeparator: '\xA0',        // non-breaking space
      suffix: ''
    },

    // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',
    // '-', '.', whitespace, or repeated character.
    // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
    ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',
    alphabetHasNormalDecimalDigits = true;


  //------------------------------------------------------------------------------------------


  // CONSTRUCTOR


  /*
   * The BigNumber constructor and exported function.
   * Create and return a new instance of a BigNumber object.
   *
   * v {number|string|BigNumber} A numeric value.
   * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.
   */
  function BigNumber(v, b) {
    var alphabet, c, caseChanged, e, i, isNum, len, str,
      x = this;

    // Enable constructor call without `new`.
    if (!(x instanceof BigNumber)) return new BigNumber(v, b);

    if (b == null) {

      if (v && v._isBigNumber === true) {
        x.s = v.s;

        if (!v.c || v.e > MAX_EXP) {
          x.c = x.e = null;
        } else if (v.e < MIN_EXP) {
          x.c = [x.e = 0];
        } else {
          x.e = v.e;
          x.c = v.c.slice();
        }

        return;
      }

      if ((isNum = typeof v == 'number') && v * 0 == 0) {

        // Use `1 / n` to handle minus zero also.
        x.s = 1 / v < 0 ? (v = -v, -1) : 1;

        // Fast path for integers, where n < 2147483648 (2**31).
        if (v === ~~v) {
          for (e = 0, i = v; i >= 10; i /= 10, e++);

          if (e > MAX_EXP) {
            x.c = x.e = null;
          } else {
            x.e = e;
            x.c = [v];
          }

          return;
        }

        str = String(v);
      } else {

        if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);

        x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;
      }

      // Decimal point?
      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');

      // Exponential form?
      if ((i = str.search(/e/i)) > 0) {

        // Determine exponent.
        if (e < 0) e = i;
        e += +str.slice(i + 1);
        str = str.substring(0, i);
      } else if (e < 0) {

        // Integer.
        e = str.length;
      }

    } else {

      // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
      intCheck(b, 2, ALPHABET.length, 'Base');

      // Allow exponential notation to be used with base 10 argument, while
      // also rounding to DECIMAL_PLACES as with other bases.
      if (b == 10 && alphabetHasNormalDecimalDigits) {
        x = new BigNumber(v);
        return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);
      }

      str = String(v);

      if (isNum = typeof v == 'number') {

        // Avoid potential interpretation of Infinity and NaN as base 44+ values.
        if (v * 0 != 0) return parseNumeric(x, str, isNum, b);

        x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;

        // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
        if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) {
          throw Error
           (tooManyDigits + v);
        }
      } else {
        x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;
      }

      alphabet = ALPHABET.slice(0, b);
      e = i = 0;

      // Check that str is a valid base b number.
      // Don't use RegExp, so alphabet can contain special characters.
      for (len = str.length; i < len; i++) {
        if (alphabet.indexOf(c = str.charAt(i)) < 0) {
          if (c == '.') {

            // If '.' is not the first character and it has not be found before.
            if (i > e) {
              e = len;
              continue;
            }
          } else if (!caseChanged) {

            // Allow e.g. hexadecimal 'FF' as well as 'ff'.
            if (str == str.toUpperCase() && (str = str.toLowerCase()) ||
                str == str.toLowerCase() && (str = str.toUpperCase())) {
              caseChanged = true;
              i = -1;
              e = 0;
              continue;
            }
          }

          return parseNumeric(x, String(v), isNum, b);
        }
      }

      // Prevent later check for length on converted number.
      isNum = false;
      str = convertBase(str, b, 10, x.s);

      // Decimal point?
      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');
      else e = str.length;
    }

    // Determine leading zeros.
    for (i = 0; str.charCodeAt(i) === 48; i++);

    // Determine trailing zeros.
    for (len = str.length; str.charCodeAt(--len) === 48;);

    if (str = str.slice(i, ++len)) {
      len -= i;

      // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
      if (isNum && BigNumber.DEBUG &&
        len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {
          throw Error
           (tooManyDigits + (x.s * v));
      }

       // Overflow?
      if ((e = e - i - 1) > MAX_EXP) {

        // Infinity.
        x.c = x.e = null;

      // Underflow?
      } else if (e < MIN_EXP) {

        // Zero.
        x.c = [x.e = 0];
      } else {
        x.e = e;
        x.c = [];

        // Transform base

        // e is the base 10 exponent.
        // i is where to slice str to get the first element of the coefficient array.
        i = (e + 1) % LOG_BASE;
        if (e < 0) i += LOG_BASE;  // i < 1

        if (i < len) {
          if (i) x.c.push(+str.slice(0, i));

          for (len -= LOG_BASE; i < len;) {
            x.c.push(+str.slice(i, i += LOG_BASE));
          }

          i = LOG_BASE - (str = str.slice(i)).length;
        } else {
          i -= len;
        }

        for (; i--; str += '0');
        x.c.push(+str);
      }
    } else {

      // Zero.
      x.c = [x.e = 0];
    }
  }


  // CONSTRUCTOR PROPERTIES


  BigNumber.clone = clone;

  BigNumber.ROUND_UP = 0;
  BigNumber.ROUND_DOWN = 1;
  BigNumber.ROUND_CEIL = 2;
  BigNumber.ROUND_FLOOR = 3;
  BigNumber.ROUND_HALF_UP = 4;
  BigNumber.ROUND_HALF_DOWN = 5;
  BigNumber.ROUND_HALF_EVEN = 6;
  BigNumber.ROUND_HALF_CEIL = 7;
  BigNumber.ROUND_HALF_FLOOR = 8;
  BigNumber.EUCLID = 9;


  /*
   * Configure infrequently-changing library-wide settings.
   *
   * Accept an object with the following optional properties (if the value of a property is
   * a number, it must be an integer within the inclusive range stated):
   *
   *   DECIMAL_PLACES   {number}           0 to MAX
   *   ROUNDING_MODE    {number}           0 to 8
   *   EXPONENTIAL_AT   {number|number[]}  -MAX to MAX  or  [-MAX to 0, 0 to MAX]
   *   RANGE            {number|number[]}  -MAX to MAX (not zero)  or  [-MAX to -1, 1 to MAX]
   *   CRYPTO           {boolean}          true or false
   *   MODULO_MODE      {number}           0 to 9
   *   POW_PRECISION       {number}           0 to MAX
   *   ALPHABET         {string}           A string of two or more unique characters which does
   *                                       not contain '.'.
   *   FORMAT           {object}           An object with some of the following properties:
   *     prefix                 {string}
   *     groupSize              {number}
   *     secondaryGroupSize     {number}
   *     groupSeparator         {string}
   *     decimalSeparator       {string}
   *     fractionGroupSize      {number}
   *     fractionGroupSeparator {string}
   *     suffix                 {string}
   *
   * (The values assigned to the above FORMAT object properties are not checked for validity.)
   *
   * E.g.
   * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })
   *
   * Ignore properties/parameters set to null or undefined, except for ALPHABET.
   *
   * Return an object with the properties current values.
   */
  BigNumber.config = BigNumber.set = function (obj) {
    var p, v;

    if (obj != null) {

      if (typeof obj == 'object') {

        // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.
        // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {
          v = obj[p];
          intCheck(v, 0, MAX, p);
          DECIMAL_PLACES = v;
        }

        // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.
        // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {
          v = obj[p];
          intCheck(v, 0, 8, p);
          ROUNDING_MODE = v;
        }

        // EXPONENTIAL_AT {number|number[]}
        // Integer, -MAX to MAX inclusive or
        // [integer -MAX to 0 inclusive, 0 to MAX inclusive].
        // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {
          v = obj[p];
          if (v && v.pop) {
            intCheck(v[0], -MAX, 0, p);
            intCheck(v[1], 0, MAX, p);
            TO_EXP_NEG = v[0];
            TO_EXP_POS = v[1];
          } else {
            intCheck(v, -MAX, MAX, p);
            TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);
          }
        }

        // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
        // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].
        // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'
        if (obj.hasOwnProperty(p = 'RANGE')) {
          v = obj[p];
          if (v && v.pop) {
            intCheck(v[0], -MAX, -1, p);
            intCheck(v[1], 1, MAX, p);
            MIN_EXP = v[0];
            MAX_EXP = v[1];
          } else {
            intCheck(v, -MAX, MAX, p);
            if (v) {
              MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);
            } else {
              throw Error
               (bignumberError + p + ' cannot be zero: ' + v);
            }
          }
        }

        // CRYPTO {boolean} true or false.
        // '[BigNumber Error] CRYPTO not true or false: {v}'
        // '[BigNumber Error] crypto unavailable'
        if (obj.hasOwnProperty(p = 'CRYPTO')) {
          v = obj[p];
          if (v === !!v) {
            if (v) {
              if (typeof crypto != 'undefined' && crypto &&
               (crypto.getRandomValues || crypto.randomBytes)) {
                CRYPTO = v;
              } else {
                CRYPTO = !v;
                throw Error
                 (bignumberError + 'crypto unavailable');
              }
            } else {
              CRYPTO = v;
            }
          } else {
            throw Error
             (bignumberError + p + ' not true or false: ' + v);
          }
        }

        // MODULO_MODE {number} Integer, 0 to 9 inclusive.
        // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'MODULO_MODE')) {
          v = obj[p];
          intCheck(v, 0, 9, p);
          MODULO_MODE = v;
        }

        // POW_PRECISION {number} Integer, 0 to MAX inclusive.
        // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'
        if (obj.hasOwnProperty(p = 'POW_PRECISION')) {
          v = obj[p];
          intCheck(v, 0, MAX, p);
          POW_PRECISION = v;
        }

        // FORMAT {object}
        // '[BigNumber Error] FORMAT not an object: {v}'
        if (obj.hasOwnProperty(p = 'FORMAT')) {
          v = obj[p];
          if (typeof v == 'object') FORMAT = v;
          else throw Error
           (bignumberError + p + ' not an object: ' + v);
        }

        // ALPHABET {string}
        // '[BigNumber Error] ALPHABET invalid: {v}'
        if (obj.hasOwnProperty(p = 'ALPHABET')) {
          v = obj[p];

          // Disallow if less than two characters,
          // or if it contains '+', '-', '.', whitespace, or a repeated character.
          if (typeof v == 'string' && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) {
            alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';
            ALPHABET = v;
          } else {
            throw Error
             (bignumberError + p + ' invalid: ' + v);
          }
        }

      } else {

        // '[BigNumber Error] Object expected: {v}'
        throw Error
         (bignumberError + 'Object expected: ' + obj);
      }
    }

    return {
      DECIMAL_PLACES: DECIMAL_PLACES,
      ROUNDING_MODE: ROUNDING_MODE,
      EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],
      RANGE: [MIN_EXP, MAX_EXP],
      CRYPTO: CRYPTO,
      MODULO_MODE: MODULO_MODE,
      POW_PRECISION: POW_PRECISION,
      FORMAT: FORMAT,
      ALPHABET: ALPHABET
    };
  };


  /*
   * Return true if v is a BigNumber instance, otherwise return false.
   *
   * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.
   *
   * v {any}
   *
   * '[BigNumber Error] Invalid BigNumber: {v}'
   */
  BigNumber.isBigNumber = function (v) {
    if (!v || v._isBigNumber !== true) return false;
    if (!BigNumber.DEBUG) return true;

    var i, n,
      c = v.c,
      e = v.e,
      s = v.s;

    out: if ({}.toString.call(c) == '[object Array]') {

      if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {

        // If the first element is zero, the BigNumber value must be zero.
        if (c[0] === 0) {
          if (e === 0 && c.length === 1) return true;
          break out;
        }

        // Calculate number of digits that c[0] should have, based on the exponent.
        i = (e + 1) % LOG_BASE;
        if (i < 1) i += LOG_BASE;

        // Calculate number of digits of c[0].
        //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {
        if (String(c[0]).length == i) {

          for (i = 0; i < c.length; i++) {
            n = c[i];
            if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;
          }

          // Last element cannot be zero, unless it is the only element.
          if (n !== 0) return true;
        }
      }

    // Infinity/NaN
    } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {
      return true;
    }

    throw Error
      (bignumberError + 'Invalid BigNumber: ' + v);
  };


  /*
   * Return a new BigNumber whose value is the maximum of the arguments.
   *
   * arguments {number|string|BigNumber}
   */
  BigNumber.maximum = BigNumber.max = function () {
    return maxOrMin(arguments, P.lt);
  };


  /*
   * Return a new BigNumber whose value is the minimum of the arguments.
   *
   * arguments {number|string|BigNumber}
   */
  BigNumber.minimum = BigNumber.min = function () {
    return maxOrMin(arguments, P.gt);
  };


  /*
   * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,
   * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing
   * zeros are produced).
   *
   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'
   * '[BigNumber Error] crypto unavailable'
   */
  BigNumber.random = (function () {
    var pow2_53 = 0x20000000000000;

    // Return a 53 bit integer n, where 0 <= n < 9007199254740992.
    // Check if Math.random() produces more than 32 bits of randomness.
    // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.
    // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.
    var random53bitInt = (Math.random() * pow2_53) & 0x1fffff
     ? function () { return mathfloor(Math.random() * pow2_53); }
     : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +
       (Math.random() * 0x800000 | 0); };

    return function (dp) {
      var a, b, e, k, v,
        i = 0,
        c = [],
        rand = new BigNumber(ONE);

      if (dp == null) dp = DECIMAL_PLACES;
      else intCheck(dp, 0, MAX);

      k = mathceil(dp / LOG_BASE);

      if (CRYPTO) {

        // Browsers supporting crypto.getRandomValues.
        if (crypto.getRandomValues) {

          a = crypto.getRandomValues(new Uint32Array(k *= 2));

          for (; i < k;) {

            // 53 bits:
            // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)
            // 11111 11111111 11111111 11111111 11100000 00000000 00000000
            // ((Math.pow(2, 32) - 1) >>> 11).toString(2)
            //                                     11111 11111111 11111111
            // 0x20000 is 2^21.
            v = a[i] * 0x20000 + (a[i + 1] >>> 11);

            // Rejection sampling:
            // 0 <= v < 9007199254740992
            // Probability that v >= 9e15, is
            // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251
            if (v >= 9e15) {
              b = crypto.getRandomValues(new Uint32Array(2));
              a[i] = b[0];
              a[i + 1] = b[1];
            } else {

              // 0 <= v <= 8999999999999999
              // 0 <= (v % 1e14) <= 99999999999999
              c.push(v % 1e14);
              i += 2;
            }
          }
          i = k / 2;

        // Node.js supporting crypto.randomBytes.
        } else if (crypto.randomBytes) {

          // buffer
          a = crypto.randomBytes(k *= 7);

          for (; i < k;) {

            // 0x1000000000000 is 2^48, 0x10000000000 is 2^40
            // 0x100000000 is 2^32, 0x1000000 is 2^24
            // 11111 11111111 11111111 11111111 11111111 11111111 11111111
            // 0 <= v < 9007199254740992
            v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +
               (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +
               (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];

            if (v >= 9e15) {
              crypto.randomBytes(7).copy(a, i);
            } else {

              // 0 <= (v % 1e14) <= 99999999999999
              c.push(v % 1e14);
              i += 7;
            }
          }
          i = k / 7;
        } else {
          CRYPTO = false;
          throw Error
           (bignumberError + 'crypto unavailable');
        }
      }

      // Use Math.random.
      if (!CRYPTO) {

        for (; i < k;) {
          v = random53bitInt();
          if (v < 9e15) c[i++] = v % 1e14;
        }
      }

      k = c[--i];
      dp %= LOG_BASE;

      // Convert trailing digits to zeros according to dp.
      if (k && dp) {
        v = POWS_TEN[LOG_BASE - dp];
        c[i] = mathfloor(k / v) * v;
      }

      // Remove trailing elements which are zero.
      for (; c[i] === 0; c.pop(), i--);

      // Zero?
      if (i < 0) {
        c = [e = 0];
      } else {

        // Remove leading elements which are zero and adjust exponent accordingly.
        for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);

        // Count the digits of the first element of c to determine leading zeros, and...
        for (i = 1, v = c[0]; v >= 10; v /= 10, i++);

        // adjust the exponent accordingly.
        if (i < LOG_BASE) e -= LOG_BASE - i;
      }

      rand.e = e;
      rand.c = c;
      return rand;
    };
  })();


   /*
   * Return a BigNumber whose value is the sum of the arguments.
   *
   * arguments {number|string|BigNumber}
   */
  BigNumber.sum = function () {
    var i = 1,
      args = arguments,
      sum = new BigNumber(args[0]);
    for (; i < args.length;) sum = sum.plus(args[i++]);
    return sum;
  };


  // PRIVATE FUNCTIONS


  // Called by BigNumber and BigNumber.prototype.toString.
  convertBase = (function () {
    var decimal = '0123456789';

    /*
     * Convert string of baseIn to an array of numbers of baseOut.
     * Eg. toBaseOut('255', 10, 16) returns [15, 15].
     * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].
     */
    function toBaseOut(str, baseIn, baseOut, alphabet) {
      var j,
        arr = [0],
        arrL,
        i = 0,
        len = str.length;

      for (; i < len;) {
        for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);

        arr[0] += alphabet.indexOf(str.charAt(i++));

        for (j = 0; j < arr.length; j++) {

          if (arr[j] > baseOut - 1) {
            if (arr[j + 1] == null) arr[j + 1] = 0;
            arr[j + 1] += arr[j] / baseOut | 0;
            arr[j] %= baseOut;
          }
        }
      }

      return arr.reverse();
    }

    // Convert a numeric string of baseIn to a numeric string of baseOut.
    // If the caller is toString, we are converting from base 10 to baseOut.
    // If the caller is BigNumber, we are converting from baseIn to base 10.
    return function (str, baseIn, baseOut, sign, callerIsToString) {
      var alphabet, d, e, k, r, x, xc, y,
        i = str.indexOf('.'),
        dp = DECIMAL_PLACES,
        rm = ROUNDING_MODE;

      // Non-integer.
      if (i >= 0) {
        k = POW_PRECISION;

        // Unlimited precision.
        POW_PRECISION = 0;
        str = str.replace('.', '');
        y = new BigNumber(baseIn);
        x = y.pow(str.length - i);
        POW_PRECISION = k;

        // Convert str as if an integer, then restore the fraction part by dividing the
        // result by its base raised to a power.

        y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),
         10, baseOut, decimal);
        y.e = y.c.length;
      }

      // Convert the number as integer.

      xc = toBaseOut(str, baseIn, baseOut, callerIsToString
       ? (alphabet = ALPHABET, decimal)
       : (alphabet = decimal, ALPHABET));

      // xc now represents str as an integer and converted to baseOut. e is the exponent.
      e = k = xc.length;

      // Remove trailing zeros.
      for (; xc[--k] == 0; xc.pop());

      // Zero?
      if (!xc[0]) return alphabet.charAt(0);

      // Does str represent an integer? If so, no need for the division.
      if (i < 0) {
        --e;
      } else {
        x.c = xc;
        x.e = e;

        // The sign is needed for correct rounding.
        x.s = sign;
        x = div(x, y, dp, rm, baseOut);
        xc = x.c;
        r = x.r;
        e = x.e;
      }

      // xc now represents str converted to baseOut.

      // THe index of the rounding digit.
      d = e + dp + 1;

      // The rounding digit: the digit to the right of the digit that may be rounded up.
      i = xc[d];

      // Look at the rounding digits and mode to determine whether to round up.

      k = baseOut / 2;
      r = r || d < 0 || xc[d + 1] != null;

      r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
            : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||
             rm == (x.s < 0 ? 8 : 7));

      // If the index of the rounding digit is not greater than zero, or xc represents
      // zero, then the result of the base conversion is zero or, if rounding up, a value
      // such as 0.00001.
      if (d < 1 || !xc[0]) {

        // 1^-dp or 0
        str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);
      } else {

        // Truncate xc to the required number of decimal places.
        xc.length = d;

        // Round up?
        if (r) {

          // Rounding up may mean the previous digit has to be rounded up and so on.
          for (--baseOut; ++xc[--d] > baseOut;) {
            xc[d] = 0;

            if (!d) {
              ++e;
              xc = [1].concat(xc);
            }
          }
        }

        // Determine trailing zeros.
        for (k = xc.length; !xc[--k];);

        // E.g. [4, 11, 15] becomes 4bf.
        for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));

        // Add leading zeros, decimal point and trailing zeros as required.
        str = toFixedPoint(str, e, alphabet.charAt(0));
      }

      // The caller will add the sign.
      return str;
    };
  })();


  // Perform division in the specified base. Called by div and convertBase.
  div = (function () {

    // Assume non-zero x and k.
    function multiply(x, k, base) {
      var m, temp, xlo, xhi,
        carry = 0,
        i = x.length,
        klo = k % SQRT_BASE,
        khi = k / SQRT_BASE | 0;

      for (x = x.slice(); i--;) {
        xlo = x[i] % SQRT_BASE;
        xhi = x[i] / SQRT_BASE | 0;
        m = khi * xlo + xhi * klo;
        temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;
        carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;
        x[i] = temp % base;
      }

      if (carry) x = [carry].concat(x);

      return x;
    }

    function compare(a, b, aL, bL) {
      var i, cmp;

      if (aL != bL) {
        cmp = aL > bL ? 1 : -1;
      } else {

        for (i = cmp = 0; i < aL; i++) {

          if (a[i] != b[i]) {
            cmp = a[i] > b[i] ? 1 : -1;
            break;
          }
        }
      }

      return cmp;
    }

    function subtract(a, b, aL, base) {
      var i = 0;

      // Subtract b from a.
      for (; aL--;) {
        a[aL] -= i;
        i = a[aL] < b[aL] ? 1 : 0;
        a[aL] = i * base + a[aL] - b[aL];
      }

      // Remove leading zeros.
      for (; !a[0] && a.length > 1; a.splice(0, 1));
    }

    // x: dividend, y: divisor.
    return function (x, y, dp, rm, base) {
      var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,
        yL, yz,
        s = x.s == y.s ? 1 : -1,
        xc = x.c,
        yc = y.c;

      // Either NaN, Infinity or 0?
      if (!xc || !xc[0] || !yc || !yc[0]) {

        return new BigNumber(

         // Return NaN if either NaN, or both Infinity or 0.
         !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :

          // Return Â±0 if x is Â±0 or y is Â±Infinity, or return Â±Infinity as y is Â±0.
          xc && xc[0] == 0 || !yc ? s * 0 : s / 0
       );
      }

      q = new BigNumber(s);
      qc = q.c = [];
      e = x.e - y.e;
      s = dp + e + 1;

      if (!base) {
        base = BASE;
        e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);
        s = s / LOG_BASE | 0;
      }

      // Result exponent may be one less then the current value of e.
      // The coefficients of the BigNumbers from convertBase may have trailing zeros.
      for (i = 0; yc[i] == (xc[i] || 0); i++);

      if (yc[i] > (xc[i] || 0)) e--;

      if (s < 0) {
        qc.push(1);
        more = true;
      } else {
        xL = xc.length;
        yL = yc.length;
        i = 0;
        s += 2;

        // Normalise xc and yc so highest order digit of yc is >= base / 2.

        n = mathfloor(base / (yc[0] + 1));

        // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.
        // if (n > 1 || n++ == 1 && yc[0] < base / 2) {
        if (n > 1) {
          yc = multiply(yc, n, base);
          xc = multiply(xc, n, base);
          yL = yc.length;
          xL = xc.length;
        }

        xi = yL;
        rem = xc.slice(0, yL);
        remL = rem.length;

        // Add zeros to make remainder as long as divisor.
        for (; remL < yL; rem[remL++] = 0);
        yz = yc.slice();
        yz = [0].concat(yz);
        yc0 = yc[0];
        if (yc[1] >= base / 2) yc0++;
        // Not necessary, but to prevent trial digit n > base, when using base 3.
        // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;

        do {
          n = 0;

          // Compare divisor and remainder.
          cmp = compare(yc, rem, yL, remL);

          // If divisor < remainder.
          if (cmp < 0) {

            // Calculate trial digit, n.

            rem0 = rem[0];
            if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);

            // n is how many times the divisor goes into the current remainder.
            n = mathfloor(rem0 / yc0);

            //  Algorithm:
            //  product = divisor multiplied by trial digit (n).
            //  Compare product and remainder.
            //  If product is greater than remainder:
            //    Subtract divisor from product, decrement trial digit.
            //  Subtract product from remainder.
            //  If product was less than remainder at the last compare:
            //    Compare new remainder and divisor.
            //    If remainder is greater than divisor:
            //      Subtract divisor from remainder, increment trial digit.

            if (n > 1) {

              // n may be > base only when base is 3.
              if (n >= base) n = base - 1;

              // product = divisor * trial digit.
              prod = multiply(yc, n, base);
              prodL = prod.length;
              remL = rem.length;

              // Compare product and remainder.
              // If product > remainder then trial digit n too high.
              // n is 1 too high about 5% of the time, and is not known to have
              // ever been more than 1 too high.
              while (compare(prod, rem, prodL, remL) == 1) {
                n--;

                // Subtract divisor from product.
                subtract(prod, yL < prodL ? yz : yc, prodL, base);
                prodL = prod.length;
                cmp = 1;
              }
            } else {

              // n is 0 or 1, cmp is -1.
              // If n is 0, there is no need to compare yc and rem again below,
              // so change cmp to 1 to avoid it.
              // If n is 1, leave cmp as -1, so yc and rem are compared again.
              if (n == 0) {

                // divisor < remainder, so n must be at least 1.
                cmp = n = 1;
              }

              // product = divisor
              prod = yc.slice();
              prodL = prod.length;
            }

            if (prodL < remL) prod = [0].concat(prod);

            // Subtract product from remainder.
            subtract(rem, prod, remL, base);
            remL = rem.length;

             // If product was < remainder.
            if (cmp == -1) {

              // Compare divisor and new remainder.
              // If divisor < new remainder, subtract divisor from remainder.
              // Trial digit n too low.
              // n is 1 too low about 5% of the time, and very rarely 2 too low.
              while (compare(yc, rem, yL, remL) < 1) {
                n++;

                // Subtract divisor from remainder.
                subtract(rem, yL < remL ? yz : yc, remL, base);
                remL = rem.length;
              }
            }
          } else if (cmp === 0) {
            n++;
            rem = [0];
          } // else cmp === 1 and n will be 0

          // Add the next digit, n, to the result array.
          qc[i++] = n;

          // Update the remainder.
          if (rem[0]) {
            rem[remL++] = xc[xi] || 0;
          } else {
            rem = [xc[xi]];
            remL = 1;
          }
        } while ((xi++ < xL || rem[0] != null) && s--);

        more = rem[0] != null;

        // Leading zero?
        if (!qc[0]) qc.splice(0, 1);
      }

      if (base == BASE) {

        // To calculate q.e, first get the number of digits of qc[0].
        for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);

        round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);

      // Caller is convertBase.
      } else {
        q.e = e;
        q.r = +more;
      }

      return q;
    };
  })();


  /*
   * Return a string representing the value of BigNumber n in fixed-point or exponential
   * notation rounded to the specified decimal places or significant digits.
   *
   * n: a BigNumber.
   * i: the index of the last digit required (i.e. the digit that may be rounded up).
   * rm: the rounding mode.
   * id: 1 (toExponential) or 2 (toPrecision).
   */
  function format(n, i, rm, id) {
    var c0, e, ne, len, str;

    if (rm == null) rm = ROUNDING_MODE;
    else intCheck(rm, 0, 8);

    if (!n.c) return n.toString();

    c0 = n.c[0];
    ne = n.e;

    if (i == null) {
      str = coeffToString(n.c);
      str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)
       ? toExponential(str, ne)
       : toFixedPoint(str, ne, '0');
    } else {
      n = round(new BigNumber(n), i, rm);

      // n.e may have changed if the value was rounded up.
      e = n.e;

      str = coeffToString(n.c);
      len = str.length;

      // toPrecision returns exponential notation if the number of significant digits
      // specified is less than the number of digits necessary to represent the integer
      // part of the value in fixed-point notation.

      // Exponential notation.
      if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {

        // Append zeros?
        for (; len < i; str += '0', len++);
        str = toExponential(str, e);

      // Fixed-point notation.
      } else {
        i -= ne;
        str = toFixedPoint(str, e, '0');

        // Append zeros?
        if (e + 1 > len) {
          if (--i > 0) for (str += '.'; i--; str += '0');
        } else {
          i += e - len;
          if (i > 0) {
            if (e + 1 == len) str += '.';
            for (; i--; str += '0');
          }
        }
      }
    }

    return n.s < 0 && c0 ? '-' + str : str;
  }


  // Handle BigNumber.max and BigNumber.min.
  function maxOrMin(args, method) {
    var n,
      i = 1,
      m = new BigNumber(args[0]);

    for (; i < args.length; i++) {
      n = new BigNumber(args[i]);

      // If any number is NaN, return NaN.
      if (!n.s) {
        m = n;
        break;
      } else if (method.call(m, n)) {
        m = n;
      }
    }

    return m;
  }


  /*
   * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.
   * Called by minus, plus and times.
   */
  function normalise(n, c, e) {
    var i = 1,
      j = c.length;

     // Remove trailing zeros.
    for (; !c[--j]; c.pop());

    // Calculate the base 10 exponent. First get the number of digits of c[0].
    for (j = c[0]; j >= 10; j /= 10, i++);

    // Overflow?
    if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {

      // Infinity.
      n.c = n.e = null;

    // Underflow?
    } else if (e < MIN_EXP) {

      // Zero.
      n.c = [n.e = 0];
    } else {
      n.e = e;
      n.c = c;
    }

    return n;
  }


  // Handle values that fail the validity test in BigNumber.
  parseNumeric = (function () {
    var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i,
      dotAfter = /^([^.]+)\.$/,
      dotBefore = /^\.([^.]+)$/,
      isInfinityOrNaN = /^-?(Infinity|NaN)$/,
      whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g;

    return function (x, str, isNum, b) {
      var base,
        s = isNum ? str : str.replace(whitespaceOrPlus, '');

      // No exception on Â±Infinity or NaN.
      if (isInfinityOrNaN.test(s)) {
        x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
      } else {
        if (!isNum) {

          // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i
          s = s.replace(basePrefix, function (m, p1, p2) {
            base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;
            return !b || b == base ? p1 : m;
          });

          if (b) {
            base = b;

            // E.g. '1.' to '1', '.1' to '0.1'
            s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');
          }

          if (str != s) return new BigNumber(s, base);
        }

        // '[BigNumber Error] Not a number: {n}'
        // '[BigNumber Error] Not a base {b} number: {n}'
        if (BigNumber.DEBUG) {
          throw Error
            (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);
        }

        // NaN
        x.s = null;
      }

      x.c = x.e = null;
    }
  })();


  /*
   * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.
   * If r is truthy, it is known that there are more digits after the rounding digit.
   */
  function round(x, sd, rm, r) {
    var d, i, j, k, n, ni, rd,
      xc = x.c,
      pows10 = POWS_TEN;

    // if x is not Infinity or NaN...
    if (xc) {

      // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.
      // n is a base 1e14 number, the value of the element of array x.c containing rd.
      // ni is the index of n within x.c.
      // d is the number of digits of n.
      // i is the index of rd within n including leading zeros.
      // j is the actual index of rd within n (if < 0, rd is a leading zero).
      out: {

        // Get the number of digits of the first element of xc.
        for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);
        i = sd - d;

        // If the rounding digit is in the first element of xc...
        if (i < 0) {
          i += LOG_BASE;
          j = sd;
          n = xc[ni = 0];

          // Get the rounding digit at index j of n.
          rd = n / pows10[d - j - 1] % 10 | 0;
        } else {
          ni = mathceil((i + 1) / LOG_BASE);

          if (ni >= xc.length) {

            if (r) {

              // Needed by sqrt.
              for (; xc.length <= ni; xc.push(0));
              n = rd = 0;
              d = 1;
              i %= LOG_BASE;
              j = i - LOG_BASE + 1;
            } else {
              break out;
            }
          } else {
            n = k = xc[ni];

            // Get the number of digits of n.
            for (d = 1; k >= 10; k /= 10, d++);

            // Get the index of rd within n.
            i %= LOG_BASE;

            // Get the index of rd within n, adjusted for leading zeros.
            // The number of leading zeros of n is given by LOG_BASE - d.
            j = i - LOG_BASE + d;

            // Get the rounding digit at index j of n.
            rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;
          }
        }

        r = r || sd < 0 ||

        // Are there any non-zero digits after the rounding digit?
        // The expression  n % pows10[d - j - 1]  returns all digits of n to the right
        // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
         xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);

        r = rm < 4
         ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))
         : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&

          // Check whether the digit to the left of the rounding digit is odd.
          ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||
           rm == (x.s < 0 ? 8 : 7));

        if (sd < 1 || !xc[0]) {
          xc.length = 0;

          if (r) {

            // Convert sd to decimal places.
            sd -= x.e + 1;

            // 1, 0.1, 0.01, 0.001, 0.0001 etc.
            xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];
            x.e = -sd || 0;
          } else {

            // Zero.
            xc[0] = x.e = 0;
          }

          return x;
        }

        // Remove excess digits.
        if (i == 0) {
          xc.length = ni;
          k = 1;
          ni--;
        } else {
          xc.length = ni + 1;
          k = pows10[LOG_BASE - i];

          // E.g. 56700 becomes 56000 if 7 is the rounding digit.
          // j > 0 means i > number of leading zeros of n.
          xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;
        }

        // Round up?
        if (r) {

          for (; ;) {

            // If the digit to be rounded up is in the first element of xc...
            if (ni == 0) {

              // i will be the length of xc[0] before k is added.
              for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);
              j = xc[0] += k;
              for (k = 1; j >= 10; j /= 10, k++);

              // if i != k the length has increased.
              if (i != k) {
                x.e++;
                if (xc[0] == BASE) xc[0] = 1;
              }

              break;
            } else {
              xc[ni] += k;
              if (xc[ni] != BASE) break;
              xc[ni--] = 0;
              k = 1;
            }
          }
        }

        // Remove trailing zeros.
        for (i = xc.length; xc[--i] === 0; xc.pop());
      }

      // Overflow? Infinity.
      if (x.e > MAX_EXP) {
        x.c = x.e = null;

      // Underflow? Zero.
      } else if (x.e < MIN_EXP) {
        x.c = [x.e = 0];
      }
    }

    return x;
  }


  function valueOf(n) {
    var str,
      e = n.e;

    if (e === null) return n.toString();

    str = coeffToString(n.c);

    str = e <= TO_EXP_NEG || e >= TO_EXP_POS
      ? toExponential(str, e)
      : toFixedPoint(str, e, '0');

    return n.s < 0 ? '-' + str : str;
  }


  // PROTOTYPE/INSTANCE METHODS


  /*
   * Return a new BigNumber whose value is the absolute value of this BigNumber.
   */
  P.absoluteValue = P.abs = function () {
    var x = new BigNumber(this);
    if (x.s < 0) x.s = 1;
    return x;
  };


  /*
   * Return
   *   1 if the value of this BigNumber is greater than the value of BigNumber(y, b),
   *   -1 if the value of this BigNumber is less than the value of BigNumber(y, b),
   *   0 if they have the same value,
   *   or null if the value of either is NaN.
   */
  P.comparedTo = function (y, b) {
    return compare(this, new BigNumber(y, b));
  };


  /*
   * If dp is undefined or null or true or false, return the number of decimal places of the
   * value of this BigNumber, or null if the value of this BigNumber is Â±Infinity or NaN.
   *
   * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this
   * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or
   * ROUNDING_MODE if rm is omitted.
   *
   * [dp] {number} Decimal places: integer, 0 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
   */
  P.decimalPlaces = P.dp = function (dp, rm) {
    var c, n, v,
      x = this;

    if (dp != null) {
      intCheck(dp, 0, MAX);
      if (rm == null) rm = ROUNDING_MODE;
      else intCheck(rm, 0, 8);

      return round(new BigNumber(x), dp + x.e + 1, rm);
    }

    if (!(c = x.c)) return null;
    n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;

    // Subtract the number of trailing zeros of the last number.
    if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);
    if (n < 0) n = 0;

    return n;
  };


  /*
   *  n / 0 = I
   *  n / N = N
   *  n / I = 0
   *  0 / n = 0
   *  0 / 0 = N
   *  0 / N = N
   *  0 / I = 0
   *  N / n = N
   *  N / 0 = N
   *  N / N = N
   *  N / I = N
   *  I / n = I
   *  I / 0 = I
   *  I / N = N
   *  I / I = N
   *
   * Return a new BigNumber whose value is the value of this BigNumber divided by the value of
   * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.
   */
  P.dividedBy = P.div = function (y, b) {
    return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);
  };


  /*
   * Return a new BigNumber whose value is the integer part of dividing the value of this
   * BigNumber by the value of BigNumber(y, b).
   */
  P.dividedToIntegerBy = P.idiv = function (y, b) {
    return div(this, new BigNumber(y, b), 0, 1);
  };


  /*
   * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.
   *
   * If m is present, return the result modulo m.
   * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.
   * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.
   *
   * The modular power operation works efficiently when x, n, and m are integers, otherwise it
   * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.
   *
   * n {number|string|BigNumber} The exponent. An integer.
   * [m] {number|string|BigNumber} The modulus.
   *
   * '[BigNumber Error] Exponent not an integer: {n}'
   */
  P.exponentiatedBy = P.pow = function (n, m) {
    var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,
      x = this;

    n = new BigNumber(n);

    // Allow NaN and Â±Infinity, but not other non-integers.
    if (n.c && !n.isInteger()) {
      throw Error
        (bignumberError + 'Exponent not an integer: ' + valueOf(n));
    }

    if (m != null) m = new BigNumber(m);

    // Exponent of MAX_SAFE_INTEGER is 15.
    nIsBig = n.e > 14;

    // If x is NaN, Â±Infinity, Â±0 or Â±1, or n is Â±Infinity, NaN or Â±0.
    if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {

      // The sign of the result of pow when x is negative depends on the evenness of n.
      // If +n overflows to Â±Infinity, the evenness of n would be not be known.
      y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));
      return m ? y.mod(m) : y;
    }

    nIsNeg = n.s < 0;

    if (m) {

      // x % m returns NaN if abs(m) is zero, or m is NaN.
      if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);

      isModExp = !nIsNeg && x.isInteger() && m.isInteger();

      if (isModExp) x = x.mod(m);

    // Overflow to Â±Infinity: >=2**1e10 or >=1.0000024**1e15.
    // Underflow to Â±0: <=0.79**1e10 or <=0.9999975**1e15.
    } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0
      // [1, 240000000]
      ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7
      // [80000000000000]  [99999750000000]
      : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {

      // If x is negative and n is odd, k = -0, else k = 0.
      k = x.s < 0 && isOdd(n) ? -0 : 0;

      // If x >= 1, k = Â±Infinity.
      if (x.e > -1) k = 1 / k;

      // If n is negative return Â±0, else return Â±Infinity.
      return new BigNumber(nIsNeg ? 1 / k : k);

    } else if (POW_PRECISION) {

      // Truncating each coefficient array to a length of k after each multiplication
      // equates to truncating significant digits to POW_PRECISION + [28, 41],
      // i.e. there will be a minimum of 28 guard digits retained.
      k = mathceil(POW_PRECISION / LOG_BASE + 2);
    }

    if (nIsBig) {
      half = new BigNumber(0.5);
      if (nIsNeg) n.s = 1;
      nIsOdd = isOdd(n);
    } else {
      i = Math.abs(+valueOf(n));
      nIsOdd = i % 2;
    }

    y = new BigNumber(ONE);

    // Performs 54 loop iterations for n of 9007199254740991.
    for (; ;) {

      if (nIsOdd) {
        y = y.times(x);
        if (!y.c) break;

        if (k) {
          if (y.c.length > k) y.c.length = k;
        } else if (isModExp) {
          y = y.mod(m);    //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));
        }
      }

      if (i) {
        i = mathfloor(i / 2);
        if (i === 0) break;
        nIsOdd = i % 2;
      } else {
        n = n.times(half);
        round(n, n.e + 1, 1);

        if (n.e > 14) {
          nIsOdd = isOdd(n);
        } else {
          i = +valueOf(n);
          if (i === 0) break;
          nIsOdd = i % 2;
        }
      }

      x = x.times(x);

      if (k) {
        if (x.c && x.c.length > k) x.c.length = k;
      } else if (isModExp) {
        x = x.mod(m);    //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));
      }
    }

    if (isModExp) return y;
    if (nIsNeg) y = ONE.div(y);

    return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;
  };


  /*
   * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer
   * using rounding mode rm, or ROUNDING_MODE if rm is omitted.
   *
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'
   */
  P.integerValue = function (rm) {
    var n = new BigNumber(this);
    if (rm == null) rm = ROUNDING_MODE;
    else intCheck(rm, 0, 8);
    return round(n, n.e + 1, rm);
  };


  /*
   * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),
   * otherwise return false.
   */
  P.isEqualTo = P.eq = function (y, b) {
    return compare(this, new BigNumber(y, b)) === 0;
  };


  /*
   * Return true if the value of this BigNumber is a finite number, otherwise return false.
   */
  P.isFinite = function () {
    return !!this.c;
  };


  /*
   * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),
   * otherwise return false.
   */
  P.isGreaterThan = P.gt = function (y, b) {
    return compare(this, new BigNumber(y, b)) > 0;
  };


  /*
   * Return true if the value of this BigNumber is greater than or equal to the value of
   * BigNumber(y, b), otherwise return false.
   */
  P.isGreaterThanOrEqualTo = P.gte = function (y, b) {
    return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;

  };


  /*
   * Return true if the value of this BigNumber is an integer, otherwise return false.
   */
  P.isInteger = function () {
    return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;
  };


  /*
   * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),
   * otherwise return false.
   */
  P.isLessThan = P.lt = function (y, b) {
    return compare(this, new BigNumber(y, b)) < 0;
  };


  /*
   * Return true if the value of this BigNumber is less than or equal to the value of
   * BigNumber(y, b), otherwise return false.
   */
  P.isLessThanOrEqualTo = P.lte = function (y, b) {
    return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;
  };


  /*
   * Return true if the value of this BigNumber is NaN, otherwise return false.
   */
  P.isNaN = function () {
    return !this.s;
  };


  /*
   * Return true if the value of this BigNumber is negative, otherwise return false.
   */
  P.isNegative = function () {
    return this.s < 0;
  };


  /*
   * Return true if the value of this BigNumber is positive, otherwise return false.
   */
  P.isPositive = function () {
    return this.s > 0;
  };


  /*
   * Return true if the value of this BigNumber is 0 or -0, otherwise return false.
   */
  P.isZero = function () {
    return !!this.c && this.c[0] == 0;
  };


  /*
   *  n - 0 = n
   *  n - N = N
   *  n - I = -I
   *  0 - n = -n
   *  0 - 0 = 0
   *  0 - N = N
   *  0 - I = -I
   *  N - n = N
   *  N - 0 = N
   *  N - N = N
   *  N - I = N
   *  I - n = I
   *  I - 0 = I
   *  I - N = N
   *  I - I = N
   *
   * Return a new BigNumber whose value is the value of this BigNumber minus the value of
   * BigNumber(y, b).
   */
  P.minus = function (y, b) {
    var i, j, t, xLTy,
      x = this,
      a = x.s;

    y = new BigNumber(y, b);
    b = y.s;

    // Either NaN?
    if (!a || !b) return new BigNumber(NaN);

    // Signs differ?
    if (a != b) {
      y.s = -b;
      return x.plus(y);
    }

    var xe = x.e / LOG_BASE,
      ye = y.e / LOG_BASE,
      xc = x.c,
      yc = y.c;

    if (!xe || !ye) {

      // Either Infinity?
      if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);

      // Either zero?
      if (!xc[0] || !yc[0]) {

        // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
        return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :

         // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
         ROUNDING_MODE == 3 ? -0 : 0);
      }
    }

    xe = bitFloor(xe);
    ye = bitFloor(ye);
    xc = xc.slice();

    // Determine which is the bigger number.
    if (a = xe - ye) {

      if (xLTy = a < 0) {
        a = -a;
        t = xc;
      } else {
        ye = xe;
        t = yc;
      }

      t.reverse();

      // Prepend zeros to equalise exponents.
      for (b = a; b--; t.push(0));
      t.reverse();
    } else {

      // Exponents equal. Check digit by digit.
      j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;

      for (a = b = 0; b < j; b++) {

        if (xc[b] != yc[b]) {
          xLTy = xc[b] < yc[b];
          break;
        }
      }
    }

    // x < y? Point xc to the array of the bigger number.
    if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;

    b = (j = yc.length) - (i = xc.length);

    // Append zeros to xc if shorter.
    // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.
    if (b > 0) for (; b--; xc[i++] = 0);
    b = BASE - 1;

    // Subtract yc from xc.
    for (; j > a;) {

      if (xc[--j] < yc[j]) {
        for (i = j; i && !xc[--i]; xc[i] = b);
        --xc[i];
        xc[j] += BASE;
      }

      xc[j] -= yc[j];
    }

    // Remove leading zeros and adjust exponent accordingly.
    for (; xc[0] == 0; xc.splice(0, 1), --ye);

    // Zero?
    if (!xc[0]) {

      // Following IEEE 754 (2008) 6.3,
      // n - n = +0  but  n - n = -0  when rounding towards -Infinity.
      y.s = ROUNDING_MODE == 3 ? -1 : 1;
      y.c = [y.e = 0];
      return y;
    }

    // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
    // for finite x and y.
    return normalise(y, xc, ye);
  };


  /*
   *   n % 0 =  N
   *   n % N =  N
   *   n % I =  n
   *   0 % n =  0
   *  -0 % n = -0
   *   0 % 0 =  N
   *   0 % N =  N
   *   0 % I =  0
   *   N % n =  N
   *   N % 0 =  N
   *   N % N =  N
   *   N % I =  N
   *   I % n =  N
   *   I % 0 =  N
   *   I % N =  N
   *   I % I =  N
   *
   * Return a new BigNumber whose value is the value of this BigNumber modulo the value of
   * BigNumber(y, b). The result depends on the value of MODULO_MODE.
   */
  P.modulo = P.mod = function (y, b) {
    var q, s,
      x = this;

    y = new BigNumber(y, b);

    // Return NaN if x is Infinity or NaN, or y is NaN or zero.
    if (!x.c || !y.s || y.c && !y.c[0]) {
      return new BigNumber(NaN);

    // Return x if y is Infinity or x is zero.
    } else if (!y.c || x.c && !x.c[0]) {
      return new BigNumber(x);
    }

    if (MODULO_MODE == 9) {

      // Euclidian division: q = sign(y) * floor(x / abs(y))
      // r = x - qy    where  0 <= r < abs(y)
      s = y.s;
      y.s = 1;
      q = div(x, y, 0, 3);
      y.s = s;
      q.s *= s;
    } else {
      q = div(x, y, 0, MODULO_MODE);
    }

    y = x.minus(q.times(y));

    // To match JavaScript %, ensure sign of zero is sign of dividend.
    if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;

    return y;
  };


  /*
   *  n * 0 = 0
   *  n * N = N
   *  n * I = I
   *  0 * n = 0
   *  0 * 0 = 0
   *  0 * N = N
   *  0 * I = N
   *  N * n = N
   *  N * 0 = N
   *  N * N = N
   *  N * I = N
   *  I * n = I
   *  I * 0 = N
   *  I * N = N
   *  I * I = I
   *
   * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value
   * of BigNumber(y, b).
   */
  P.multipliedBy = P.times = function (y, b) {
    var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,
      base, sqrtBase,
      x = this,
      xc = x.c,
      yc = (y = new BigNumber(y, b)).c;

    // Either NaN, Â±Infinity or Â±0?
    if (!xc || !yc || !xc[0] || !yc[0]) {

      // Return NaN if either is NaN, or one is 0 and the other is Infinity.
      if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {
        y.c = y.e = y.s = null;
      } else {
        y.s *= x.s;

        // Return Â±Infinity if either is Â±Infinity.
        if (!xc || !yc) {
          y.c = y.e = null;

        // Return Â±0 if either is Â±0.
        } else {
          y.c = [0];
          y.e = 0;
        }
      }

      return y;
    }

    e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);
    y.s *= x.s;
    xcL = xc.length;
    ycL = yc.length;

    // Ensure xc points to longer array and xcL to its length.
    if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;

    // Initialise the result array with zeros.
    for (i = xcL + ycL, zc = []; i--; zc.push(0));

    base = BASE;
    sqrtBase = SQRT_BASE;

    for (i = ycL; --i >= 0;) {
      c = 0;
      ylo = yc[i] % sqrtBase;
      yhi = yc[i] / sqrtBase | 0;

      for (k = xcL, j = i + k; j > i;) {
        xlo = xc[--k] % sqrtBase;
        xhi = xc[k] / sqrtBase | 0;
        m = yhi * xlo + xhi * ylo;
        xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;
        c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;
        zc[j--] = xlo % base;
      }

      zc[j] = c;
    }

    if (c) {
      ++e;
    } else {
      zc.splice(0, 1);
    }

    return normalise(y, zc, e);
  };


  /*
   * Return a new BigNumber whose value is the value of this BigNumber negated,
   * i.e. multiplied by -1.
   */
  P.negated = function () {
    var x = new BigNumber(this);
    x.s = -x.s || null;
    return x;
  };


  /*
   *  n + 0 = n
   *  n + N = N
   *  n + I = I
   *  0 + n = n
   *  0 + 0 = 0
   *  0 + N = N
   *  0 + I = I
   *  N + n = N
   *  N + 0 = N
   *  N + N = N
   *  N + I = N
   *  I + n = I
   *  I + 0 = I
   *  I + N = N
   *  I + I = I
   *
   * Return a new BigNumber whose value is the value of this BigNumber plus the value of
   * BigNumber(y, b).
   */
  P.plus = function (y, b) {
    var t,
      x = this,
      a = x.s;

    y = new BigNumber(y, b);
    b = y.s;

    // Either NaN?
    if (!a || !b) return new BigNumber(NaN);

    // Signs differ?
     if (a != b) {
      y.s = -b;
      return x.minus(y);
    }

    var xe = x.e / LOG_BASE,
      ye = y.e / LOG_BASE,
      xc = x.c,
      yc = y.c;

    if (!xe || !ye) {

      // Return Â±Infinity if either Â±Infinity.
      if (!xc || !yc) return new BigNumber(a / 0);

      // Either zero?
      // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
      if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);
    }

    xe = bitFloor(xe);
    ye = bitFloor(ye);
    xc = xc.slice();

    // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.
    if (a = xe - ye) {
      if (a > 0) {
        ye = xe;
        t = yc;
      } else {
        a = -a;
        t = xc;
      }

      t.reverse();
      for (; a--; t.push(0));
      t.reverse();
    }

    a = xc.length;
    b = yc.length;

    // Point xc to the longer array, and b to the shorter length.
    if (a - b < 0) t = yc, yc = xc, xc = t, b = a;

    // Only start adding at yc.length - 1 as the further digits of xc can be ignored.
    for (a = 0; b;) {
      a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;
      xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;
    }

    if (a) {
      xc = [a].concat(xc);
      ++ye;
    }

    // No need to check for zero, as +x + +y != 0 && -x + -y != 0
    // ye = MAX_EXP + 1 possible
    return normalise(y, xc, ye);
  };


  /*
   * If sd is undefined or null or true or false, return the number of significant digits of
   * the value of this BigNumber, or null if the value of this BigNumber is Â±Infinity or NaN.
   * If sd is true include integer-part trailing zeros in the count.
   *
   * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this
   * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or
   * ROUNDING_MODE if rm is omitted.
   *
   * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.
   *                     boolean: whether to count integer-part trailing zeros: true or false.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
   */
  P.precision = P.sd = function (sd, rm) {
    var c, n, v,
      x = this;

    if (sd != null && sd !== !!sd) {
      intCheck(sd, 1, MAX);
      if (rm == null) rm = ROUNDING_MODE;
      else intCheck(rm, 0, 8);

      return round(new BigNumber(x), sd, rm);
    }

    if (!(c = x.c)) return null;
    v = c.length - 1;
    n = v * LOG_BASE + 1;

    if (v = c[v]) {

      // Subtract the number of trailing zeros of the last element.
      for (; v % 10 == 0; v /= 10, n--);

      // Add the number of digits of the first element.
      for (v = c[0]; v >= 10; v /= 10, n++);
    }

    if (sd && x.e + 1 > n) n = x.e + 1;

    return n;
  };


  /*
   * Return a new BigNumber whose value is the value of this BigNumber shifted by k places
   * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.
   *
   * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'
   */
  P.shiftedBy = function (k) {
    intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);
    return this.times('1e' + k);
  };


  /*
   *  sqrt(-n) =  N
   *  sqrt(N) =  N
   *  sqrt(-I) =  N
   *  sqrt(I) =  I
   *  sqrt(0) =  0
   *  sqrt(-0) = -0
   *
   * Return a new BigNumber whose value is the square root of the value of this BigNumber,
   * rounded according to DECIMAL_PLACES and ROUNDING_MODE.
   */
  P.squareRoot = P.sqrt = function () {
    var m, n, r, rep, t,
      x = this,
      c = x.c,
      s = x.s,
      e = x.e,
      dp = DECIMAL_PLACES + 4,
      half = new BigNumber('0.5');

    // Negative/NaN/Infinity/zero?
    if (s !== 1 || !c || !c[0]) {
      return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);
    }

    // Initial estimate.
    s = Math.sqrt(+valueOf(x));

    // Math.sqrt underflow/overflow?
    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.
    if (s == 0 || s == 1 / 0) {
      n = coeffToString(c);
      if ((n.length + e) % 2 == 0) n += '0';
      s = Math.sqrt(+n);
      e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);

      if (s == 1 / 0) {
        n = '5e' + e;
      } else {
        n = s.toExponential();
        n = n.slice(0, n.indexOf('e') + 1) + e;
      }

      r = new BigNumber(n);
    } else {
      r = new BigNumber(s + '');
    }

    // Check for zero.
    // r could be zero if MIN_EXP is changed after the this value was created.
    // This would cause a division by zero (x/t) and hence Infinity below, which would cause
    // coeffToString to throw.
    if (r.c[0]) {
      e = r.e;
      s = e + dp;
      if (s < 3) s = 0;

      // Newton-Raphson iteration.
      for (; ;) {
        t = r;
        r = half.times(t.plus(div(x, t, dp, 1)));

        if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {

          // The exponent of r may here be one less than the final result exponent,
          // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits
          // are indexed correctly.
          if (r.e < e) --s;
          n = n.slice(s - 3, s + 1);

          // The 4th rounding digit may be in error by -1 so if the 4 rounding digits
          // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the
          // iteration.
          if (n == '9999' || !rep && n == '4999') {

            // On the first iteration only, check to see if rounding up gives the
            // exact result as the nines may infinitely repeat.
            if (!rep) {
              round(t, t.e + DECIMAL_PLACES + 2, 0);

              if (t.times(t).eq(x)) {
                r = t;
                break;
              }
            }

            dp += 4;
            s += 4;
            rep = 1;
          } else {

            // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact
            // result. If not, then there are further digits and m will be truthy.
            if (!+n || !+n.slice(1) && n.charAt(0) == '5') {

              // Truncate to the first rounding digit.
              round(r, r.e + DECIMAL_PLACES + 2, 1);
              m = !r.times(r).eq(x);
            }

            break;
          }
        }
      }
    }

    return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);
  };


  /*
   * Return a string representing the value of this BigNumber in exponential notation and
   * rounded using ROUNDING_MODE to dp fixed decimal places.
   *
   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
   */
  P.toExponential = function (dp, rm) {
    if (dp != null) {
      intCheck(dp, 0, MAX);
      dp++;
    }
    return format(this, dp, rm, 1);
  };


  /*
   * Return a string representing the value of this BigNumber in fixed-point notation rounding
   * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.
   *
   * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',
   * but e.g. (-0.00001).toFixed(0) is '-0'.
   *
   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
   */
  P.toFixed = function (dp, rm) {
    if (dp != null) {
      intCheck(dp, 0, MAX);
      dp = dp + this.e + 1;
    }
    return format(this, dp, rm);
  };


  /*
   * Return a string representing the value of this BigNumber in fixed-point notation rounded
   * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties
   * of the format or FORMAT object (see BigNumber.set).
   *
   * The formatting object may contain some or all of the properties shown below.
   *
   * FORMAT = {
   *   prefix: '',
   *   groupSize: 3,
   *   secondaryGroupSize: 0,
   *   groupSeparator: ',',
   *   decimalSeparator: '.',
   *   fractionGroupSize: 0,
   *   fractionGroupSeparator: '\xA0',      // non-breaking space
   *   suffix: ''
   * };
   *
   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   * [format] {object} Formatting options. See FORMAT pbject above.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
   * '[BigNumber Error] Argument not an object: {format}'
   */
  P.toFormat = function (dp, rm, format) {
    var str,
      x = this;

    if (format == null) {
      if (dp != null && rm && typeof rm == 'object') {
        format = rm;
        rm = null;
      } else if (dp && typeof dp == 'object') {
        format = dp;
        dp = rm = null;
      } else {
        format = FORMAT;
      }
    } else if (typeof format != 'object') {
      throw Error
        (bignumberError + 'Argument not an object: ' + format);
    }

    str = x.toFixed(dp, rm);

    if (x.c) {
      var i,
        arr = str.split('.'),
        g1 = +format.groupSize,
        g2 = +format.secondaryGroupSize,
        groupSeparator = format.groupSeparator || '',
        intPart = arr[0],
        fractionPart = arr[1],
        isNeg = x.s < 0,
        intDigits = isNeg ? intPart.slice(1) : intPart,
        len = intDigits.length;

      if (g2) i = g1, g1 = g2, g2 = i, len -= i;

      if (g1 > 0 && len > 0) {
        i = len % g1 || g1;
        intPart = intDigits.substr(0, i);
        for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);
        if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);
        if (isNeg) intPart = '-' + intPart;
      }

      str = fractionPart
       ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)
        ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'),
         '$&' + (format.fractionGroupSeparator || ''))
        : fractionPart)
       : intPart;
    }

    return (format.prefix || '') + str + (format.suffix || '');
  };


  /*
   * Return an array of two BigNumbers representing the value of this BigNumber as a simple
   * fraction with an integer numerator and an integer denominator.
   * The denominator will be a positive non-zero value less than or equal to the specified
   * maximum denominator. If a maximum denominator is not specified, the denominator will be
   * the lowest value necessary to represent the number exactly.
   *
   * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.
   *
   * '[BigNumber Error] Argument {not an integer|out of range} : {md}'
   */
  P.toFraction = function (md) {
    var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,
      x = this,
      xc = x.c;

    if (md != null) {
      n = new BigNumber(md);

      // Throw if md is less than one or is not an integer, unless it is Infinity.
      if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {
        throw Error
          (bignumberError + 'Argument ' +
            (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));
      }
    }

    if (!xc) return new BigNumber(x);

    d = new BigNumber(ONE);
    n1 = d0 = new BigNumber(ONE);
    d1 = n0 = new BigNumber(ONE);
    s = coeffToString(xc);

    // Determine initial denominator.
    // d is a power of 10 and the minimum max denominator that specifies the value exactly.
    e = d.e = s.length - x.e - 1;
    d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];
    md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;

    exp = MAX_EXP;
    MAX_EXP = 1 / 0;
    n = new BigNumber(s);

    // n0 = d1 = 0
    n0.c[0] = 0;

    for (; ;)  {
      q = div(n, d, 0, 1);
      d2 = d0.plus(q.times(d1));
      if (d2.comparedTo(md) == 1) break;
      d0 = d1;
      d1 = d2;
      n1 = n0.plus(q.times(d2 = n1));
      n0 = d2;
      d = n.minus(q.times(d2 = d));
      n = d2;
    }

    d2 = div(md.minus(d0), d1, 0, 1);
    n0 = n0.plus(d2.times(n1));
    d0 = d0.plus(d2.times(d1));
    n0.s = n1.s = x.s;
    e = e * 2;

    // Determine which fraction is closer to x, n0/d0 or n1/d1
    r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(
        div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];

    MAX_EXP = exp;

    return r;
  };


  /*
   * Return the value of this BigNumber converted to a number primitive.
   */
  P.toNumber = function () {
    return +valueOf(this);
  };


  /*
   * Return a string representing the value of this BigNumber rounded to sd significant digits
   * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits
   * necessary to represent the integer part of the value in fixed-point notation, then use
   * exponential notation.
   *
   * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
   *
   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
   */
  P.toPrecision = function (sd, rm) {
    if (sd != null) intCheck(sd, 1, MAX);
    return format(this, sd, rm, 2);
  };


  /*
   * Return a string representing the value of this BigNumber in base b, or base 10 if b is
   * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and
   * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent
   * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than
   * TO_EXP_NEG, return exponential notation.
   *
   * [b] {number} Integer, 2 to ALPHABET.length inclusive.
   *
   * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
   */
  P.toString = function (b) {
    var str,
      n = this,
      s = n.s,
      e = n.e;

    // Infinity or NaN?
    if (e === null) {
      if (s) {
        str = 'Infinity';
        if (s < 0) str = '-' + str;
      } else {
        str = 'NaN';
      }
    } else {
      if (b == null) {
        str = e <= TO_EXP_NEG || e >= TO_EXP_POS
         ? toExponential(coeffToString(n.c), e)
         : toFixedPoint(coeffToString(n.c), e, '0');
      } else if (b === 10 && alphabetHasNormalDecimalDigits) {
        n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);
        str = toFixedPoint(coeffToString(n.c), n.e, '0');
      } else {
        intCheck(b, 2, ALPHABET.length, 'Base');
        str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);
      }

      if (s < 0 && n.c[0]) str = '-' + str;
    }

    return str;
  };


  /*
   * Return as toString, but do not accept a base argument, and include the minus sign for
   * negative zero.
   */
  P.valueOf = P.toJSON = function () {
    return valueOf(this);
  };


  P._isBigNumber = true;

  P[Symbol.toStringTag] = 'BigNumber';

  // Node.js v10.12.0+
  P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf;

  if (configObject != null) BigNumber.set(configObject);

  return BigNumber;
}


// PRIVATE HELPER FUNCTIONS

// These functions don't need access to variables,
// e.g. DECIMAL_PLACES, in the scope of the `clone` function above.


function bitFloor(n) {
  var i = n | 0;
  return n > 0 || n === i ? i : i - 1;
}


// Return a coefficient array as a string of base 10 digits.
function coeffToString(a) {
  var s, z,
    i = 1,
    j = a.length,
    r = a[0] + '';

  for (; i < j;) {
    s = a[i++] + '';
    z = LOG_BASE - s.length;
    for (; z--; s = '0' + s);
    r += s;
  }

  // Determine trailing zeros.
  for (j = r.length; r.charCodeAt(--j) === 48;);

  return r.slice(0, j + 1 || 1);
}


// Compare the value of BigNumbers x and y.
function compare(x, y) {
  var a, b,
    xc = x.c,
    yc = y.c,
    i = x.s,
    j = y.s,
    k = x.e,
    l = y.e;

  // Either NaN?
  if (!i || !j) return null;

  a = xc && !xc[0];
  b = yc && !yc[0];

  // Either zero?
  if (a || b) return a ? b ? 0 : -j : i;

  // Signs differ?
  if (i != j) return i;

  a = i < 0;
  b = k == l;

  // Either Infinity?
  if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;

  // Compare exponents.
  if (!b) return k > l ^ a ? 1 : -1;

  j = (k = xc.length) < (l = yc.length) ? k : l;

  // Compare digit by digit.
  for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;

  // Compare lengths.
  return k == l ? 0 : k > l ^ a ? 1 : -1;
}


/*
 * Check that n is a primitive number, an integer, and in range, otherwise throw.
 */
function intCheck(n, min, max, name) {
  if (n < min || n > max || n !== mathfloor(n)) {
    throw Error
     (bignumberError + (name || 'Argument') + (typeof n == 'number'
       ? n < min || n > max ? ' out of range: ' : ' not an integer: '
       : ' not a primitive number: ') + String(n));
  }
}


// Assumes finite n.
function isOdd(n) {
  var k = n.c.length - 1;
  return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;
}


function toExponential(str, e) {
  return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +
   (e < 0 ? 'e' : 'e+') + e;
}


function toFixedPoint(str, e, z) {
  var len, zs;

  // Negative exponent?
  if (e < 0) {

    // Prepend zeros.
    for (zs = z + '.'; ++e; zs += z);
    str = zs + str;

  // Positive exponent
  } else {
    len = str.length;

    // Append zeros.
    if (++e > len) {
      for (zs = z, e -= len; --e; zs += z);
      str += zs;
    } else if (e < len) {
      str = str.slice(0, e) + '.' + str.slice(e);
    }
  }

  return str;
}


// EXPORT


export var BigNumber = clone();

export default BigNumber;
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="Author" content="M Mclaughlin">
<title>bignumber.js API</title>
<style>
html{font-size:100%}
body{background:#fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;
  line-height:1.65em;min-height:100%;margin:0}
body,i{color:#000}
.nav{background:#fff;position:fixed;top:0;bottom:0;left:0;width:200px;overflow-y:auto;
  padding:15px 0 30px 15px}
div.container{width:600px;margin:50px 0 50px 240px}
p{margin:0 0 1em;width:600px}
pre,ul{margin:1em 0}
h1,h2,h3,h4,h5{margin:0;padding:1.5em 0 0}
h1,h2{padding:.75em 0}
h1{font:400 3em Verdana,sans-serif;color:#000;margin-bottom:1em}
h2{font-size:2.25em;color:#ff2a00}
h3{font-size:1.75em;color:#4dc71f}
h4{font-size:1.75em;color:#ff2a00;padding-bottom:.75em}
h5{font-size:1.2em;margin-bottom:.4em}
h6{font-size:1.1em;margin-bottom:0.8em;padding:0.5em 0}
dd{padding-top:.35em}
dt{padding-top:.5em}
b{font-weight:700}
dt b{font-size:1.3em}
a,a:visited{color:#ff2a00;text-decoration:none}
a:active,a:hover{outline:0;text-decoration:underline}
.nav a,.nav b,.nav a:visited{display:block;color:#ff2a00;font-weight:700; margin-top:15px}
.nav b{color:#4dc71f;margin-top:20px;cursor:default;width:auto}
ul{list-style-type:none;padding:0 0 0 20px}
.nav ul{line-height:14px;padding-left:0;margin:5px 0 0}
.nav ul a,.nav ul a:visited,span{display:inline;color:#000;font-family:Verdana,Geneva,sans-serif;
  font-size:11px;font-weight:400;margin:0}
.inset,ul.inset{margin-left:20px}
.inset{font-size:.9em}
.nav li{width:auto;margin:0 0 3px}
.alias{font-style:italic;margin-left:20px}
table{border-collapse:collapse;border-spacing:0;border:2px solid #a7dbd8;margin:1.75em 0;padding:0}
td,th{text-align:left;margin:0;padding:2px 5px;border:1px dotted #a7dbd8}
th{border-top:2px solid #a7dbd8;border-bottom:2px solid #a7dbd8;color:#ff2a00}
code,pre{font-family:Consolas, monaco, monospace;font-weight:400}
pre{background:#f5f5f5;white-space:pre-wrap;word-wrap:break-word;border-left:5px solid #abef98;
  padding:1px 0 1px 15px;margin:1.2em 0}
code,.nav-title{color:#ff2a00}
.end{margin-bottom:25px}
.centre{text-align:center}
.error-table{font-size:13px;width:100%}
#faq{margin:3em 0 0}
li span{float:right;margin-right:10px;color:#c0c0c0}
#js{font:inherit;color:#4dc71f}
</style>
</head>
<body>

  <div class="nav">

    <b>v9.0.2</b>

	<a class='nav-title' href="#">API</a>

    <b> CONSTRUCTOR </b>
    <ul>
      <li><a href="#bignumber">BigNumber</a></li>
    </ul>

    <a href="#methods">Methods</a>
    <ul>
      <li><a href="#clone">clone</a></li>
      <li><a href="#config" >config</a><span>set</span></li>
      <li>
        <ul class="inset">
          <li><a href="#decimal-places">DECIMAL_PLACES</a></li>
          <li><a href="#rounding-mode" >ROUNDING_MODE</a></li>
          <li><a href="#exponential-at">EXPONENTIAL_AT</a></li>
          <li><a href="#range"         >RANGE</a></li>
          <li><a href="#crypto"        >CRYPTO</a></li>
          <li><a href="#modulo-mode"   >MODULO_MODE</a></li>
          <li><a href="#pow-precision" >POW_PRECISION</a></li>
          <li><a href="#format"        >FORMAT</a></li>
          <li><a href="#alphabet"      >ALPHABET</a></li>
        </ul>
      </li>
      <li><a href="#isBigNumber">isBigNumber</a></li>
      <li><a href="#max"        >maximum</a><span>max</span></li>
      <li><a href="#min"        >minimum</a><span>min</span></li>
      <li><a href="#random"     >random</a></li>
      <li><a href="#sum"        >sum</a></li>
    </ul>

    <a href="#constructor-properties">Properties</a>
    <ul>
      <li><a href="#round-up"        >ROUND_UP</a></li>
      <li><a href="#round-down"      >ROUND_DOWN</a></li>
      <li><a href="#round-ceil"      >ROUND_CEIL</a></li>
      <li><a href="#round-floor"     >ROUND_FLOOR</a></li>
      <li><a href="#round-half-up"   >ROUND_HALF_UP</a></li>
      <li><a href="#round-half-down" >ROUND_HALF_DOWN</a></li>
      <li><a href="#round-half-even" >ROUND_HALF_EVEN</a></li>
      <li><a href="#round-half-ceil" >ROUND_HALF_CEIL</a></li>
      <li><a href="#round-half-floor">ROUND_HALF_FLOOR</a></li>
      <li><a href="#debug"           >DEBUG</a></li>
    </ul>

    <b> INSTANCE </b>

    <a href="#prototype-methods">Methods</a>
    <ul>
      <li><a href="#abs"    >absoluteValue         </a><span>abs</span>  </li>
      <li><a href="#cmp"    >comparedTo            </a>                  </li>
      <li><a href="#dp"     >decimalPlaces         </a><span>dp</span>   </li>
      <li><a href="#div"    >dividedBy             </a><span>div</span>  </li>
      <li><a href="#divInt" >dividedToIntegerBy    </a><span>idiv</span> </li>
      <li><a href="#pow"    >exponentiatedBy       </a><span>pow</span>  </li>
      <li><a href="#int"    >integerValue          </a>                  </li>
      <li><a href="#eq"     >isEqualTo             </a><span>eq</span>   </li>
      <li><a href="#isF"    >isFinite              </a>                  </li>
      <li><a href="#gt"     >isGreaterThan         </a><span>gt</span>   </li>
      <li><a href="#gte"    >isGreaterThanOrEqualTo</a><span>gte</span>  </li>
      <li><a href="#isInt"  >isInteger             </a>                  </li>
      <li><a href="#lt"     >isLessThan            </a><span>lt</span>   </li>
      <li><a href="#lte"    >isLessThanOrEqualTo   </a><span>lte</span>  </li>
      <li><a href="#isNaN"  >isNaN                 </a>                  </li>
      <li><a href="#isNeg"  >isNegative            </a>                  </li>
      <li><a href="#isPos"  >isPositive            </a>                  </li>
      <li><a href="#isZ"    >isZero                </a>                  </li>
      <li><a href="#minus"  >minus                 </a>                  </li>
      <li><a href="#mod"    >modulo                </a><span>mod</span>  </li>
      <li><a href="#times"  >multipliedBy          </a><span>times</span></li>
      <li><a href="#neg"    >negated               </a>                  </li>
      <li><a href="#plus"   >plus                  </a>                  </li>
      <li><a href="#sd"     >precision             </a><span>sd</span>   </li>
      <li><a href="#shift"  >shiftedBy             </a>                  </li>
      <li><a href="#sqrt"   >squareRoot            </a><span>sqrt</span> </li>
      <li><a href="#toE"    >toExponential         </a>                  </li>
      <li><a href="#toFix"  >toFixed               </a>                  </li>
      <li><a href="#toFor"  >toFormat              </a>                  </li>
      <li><a href="#toFr"   >toFraction            </a>                  </li>
      <li><a href="#toJSON" >toJSON                </a>                  </li>
      <li><a href="#toN"    >toNumber              </a>                  </li>
      <li><a href="#toP"    >toPrecision           </a>                  </li>
      <li><a href="#toS"    >toString              </a>                  </li>
      <li><a href="#valueOf">valueOf               </a>                  </li>
    </ul>

    <a href="#instance-properties">Properties</a>
    <ul>
      <li><a href="#coefficient">c: coefficient</a></li>
      <li><a href="#exponent"   >e: exponent</a></li>
      <li><a href="#sign"       >s: sign</a></li>
    </ul>

    <a href="#zero-nan-infinity">Zero, NaN &amp; Infinity</a>
    <a href="#Errors">Errors</a>
    <a href="#type-coercion">Type coercion</a>
    <a class='end' href="#faq">FAQ</a>

  </div>

  <div class="container">

    <h1>bignumber<span id='js'>.js</span></h1>

    <p>A JavaScript library for arbitrary-precision arithmetic.</p>
    <p><a href="https://github.com/MikeMcl/bignumber.js">Hosted on GitHub</a>. </p>

    <h2>API</h2>

    <p>
      See the <a href='https://github.com/MikeMcl/bignumber.js'>README</a> on GitHub for a
      quick-start introduction.
    </p>
    <p>
      In all examples below, <code>var</code> and semicolons are not shown, and if a commented-out
      value is in quotes it means <code>toString</code> has been called on the preceding expression.
    </p>


    <h3>CONSTRUCTOR</h3>


    <h5 id="bignumber">
      BigNumber<code class='inset'>BigNumber(n [, base]) <i>&rArr; BigNumber</i></code>
    </h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i>: integer, <code>2</code> to <code>36</code> inclusive. (See
      <a href='#alphabet'><code>ALPHABET</code></a> to extend this range).
    </p>
    <p>
      Returns a new instance of a BigNumber object with value <code>n</code>, where <code>n</code>
      is a numeric value in the specified <code>base</code>, or base <code>10</code> if
      <code>base</code> is omitted or is <code>null</code> or <code>undefined</code>.
    </p>
    <p>
      Note that the BigNnumber constructor accepts an <code>n</code> of type <em>number</em> purely
      as a convenience so that string quotes don't have to be typed when entering literal values,
      and that it is the <code>toString</code> value of <code>n</code> that is used rather than its
      underlying binary floating point value converted to decimal. 
    </p>
    <pre>
x = new BigNumber(123.4567)                // '123.4567'
// 'new' is optional
y = BigNumber(x)                           // '123.4567'</pre>
    <p>
      If <code>n</code> is a base <code>10</code> value it can be in normal or exponential notation.
      Values in other bases must be in normal notation. Values in any base can have fraction digits,
      i.e. digits after the decimal point.
    </p>
    <pre>
new BigNumber(43210)                       // '43210'
new BigNumber('4.321e+4')                  // '43210'
new BigNumber('-735.0918e-430')            // '-7.350918e-428'
new BigNumber('123412421.234324', 5)       // '607236.557696'</pre>
    <p>
      Signed <code>0</code>, signed <code>Infinity</code> and <code>NaN</code> are supported.
    </p>
    <pre>
new BigNumber('-Infinity')                 // '-Infinity'
new BigNumber(NaN)                         // 'NaN'
new BigNumber(-0)                          // '0'
new BigNumber('.5')                        // '0.5'
new BigNumber('+2')                        // '2'</pre>
    <p>
      String values in hexadecimal literal form, e.g. <code>'0xff'</code> or <code>'0xFF'</code>
      (but not <code>'0xfF'</code>), are valid, as are string values with the octal and binary
      prefixs <code>'0o'</code> and <code>'0b'</code>. String values in octal literal form without
      the prefix will be interpreted as decimals, e.g. <code>'011'</code> is interpreted as 11, not 9.
    </p>
    <pre>
new BigNumber(-10110100.1, 2)              // '-180.5'
new BigNumber('-0b10110100.1')             // '-180.5'
new BigNumber('ff.8', 16)                  // '255.5'
new BigNumber('0xff.8')                    // '255.5'</pre>
    <p>
      If a base is specified, <code>n</code> is rounded according to the current
      <a href='#decimal-places'><code>DECIMAL_PLACES</code></a> and
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> settings. <em>This includes base
      <code>10</code> so don't include a <code>base</code> parameter for decimal values unless
      this behaviour is wanted.</em>
    </p>
    <pre>BigNumber.config({ DECIMAL_PLACES: 5 })
new BigNumber(1.23456789)                  // '1.23456789'
new BigNumber(1.23456789, 10)              // '1.23457'</pre>
    <p>An error is thrown if <code>base</code> is invalid. See <a href='#Errors'>Errors</a>.</p>
    <p>
      There is no limit to the number of digits of a value of type <em>string</em> (other than
      that of JavaScript's maximum array size). See <a href='#range'><code>RANGE</code></a> to set
      the maximum and minimum possible exponent value of a BigNumber.
    </p>
    <pre>
new BigNumber('5032485723458348569331745.33434346346912144534543')
new BigNumber('4.321e10000000')</pre>
    <p>BigNumber <code>NaN</code> is returned if <code>n</code> is invalid
    (unless <code>BigNumber.DEBUG</code> is <code>true</code>, see below).</p>
    <pre>
new BigNumber('.1*')                       // 'NaN'
new BigNumber('blurgh')                    // 'NaN'
new BigNumber(9, 2)                        // 'NaN'</pre>
    <p>
      To aid in debugging, if <code>BigNumber.DEBUG</code> is <code>true</code> then an error will
      be thrown on an invalid <code>n</code>. An error will also be thrown if <code>n</code> is of
      type <em>number</em> and has more than <code>15</code> significant digits, as calling
      <code><a href='#toS'>toString</a></code> or <code><a href='#valueOf'>valueOf</a></code> on
      these numbers may not result in the intended value.
    </p>
      <pre>
console.log(823456789123456.3)            //  823456789123456.2
new BigNumber(823456789123456.3)          // '823456789123456.2'
BigNumber.DEBUG = true
// '[BigNumber Error] Number primitive has more than 15 significant digits'
new BigNumber(823456789123456.3)
// '[BigNumber Error] Not a base 2 number'
new BigNumber(9, 2)</pre>
    <p>
      A BigNumber can also be created from an object literal.
      Use <code><a href='#isBigNumber'>isBigNumber</a></code> to check that it is well-formed.
    </p>
    <pre>new BigNumber({ s: 1, e: 2, c: [ 777, 12300000000000 ], _isBigNumber: true })    // '777.123'</pre>




    <h4 id="methods">Methods</h4>
     <p>The static methods of a BigNumber constructor.</p>




    <h5 id="clone">clone
      <code class='inset'>.clone([object]) <i>&rArr; BigNumber constructor</i></code>
    </h5>
    <p><code>object</code>: <i>object</i></p>
    <p>
      Returns a new independent BigNumber constructor with configuration as described by
      <code>object</code> (see <a href='#config'><code>config</code></a>), or with the default
      configuration if <code>object</code> is <code>null</code> or <code>undefined</code>.
    </p>
    <p>
      Throws if <code>object</code> is not an object. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>BigNumber.config({ DECIMAL_PLACES: 5 })
BN = BigNumber.clone({ DECIMAL_PLACES: 9 })

x = new BigNumber(1)
y = new BN(1)

x.div(3)                        // 0.33333
y.div(3)                        // 0.333333333

// BN = BigNumber.clone({ DECIMAL_PLACES: 9 }) is equivalent to:
BN = BigNumber.clone()
BN.config({ DECIMAL_PLACES: 9 })</pre>



    <h5 id="config">config<code class='inset'>set([object]) <i>&rArr; object</i></code></h5>
    <p>
      <code>object</code>: <i>object</i>: an object that contains some or all of the following
      properties.
    </p>
    <p>Configures the settings for this particular BigNumber constructor.</p>

    <dl class='inset'>
      <dt id="decimal-places"><code><b>DECIMAL_PLACES</b></code></dt>
      <dd>
        <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive<br />
        Default value: <code>20</code>
      </dd>
      <dd>
        The <em>maximum</em> number of decimal places of the results of operations involving
        division, i.e. division, square root and base conversion operations, and power operations
        with negative exponents.<br />
      </dd>
      <dd>
      <pre>BigNumber.config({ DECIMAL_PLACES: 5 })
BigNumber.set({ DECIMAL_PLACES: 5 })    // equivalent</pre>
      </dd>



      <dt id="rounding-mode"><code><b>ROUNDING_MODE</b></code></dt>
      <dd>
        <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive<br />
        Default value: <code>4</code> <a href="#round-half-up">(<code>ROUND_HALF_UP</code>)</a>
      </dd>
      <dd>
        The rounding mode used in the above operations and the default rounding mode of
        <a href='#dp'><code>decimalPlaces</code></a>,
        <a href='#sd'><code>precision</code></a>,
        <a href='#toE'><code>toExponential</code></a>,
        <a href='#toFix'><code>toFixed</code></a>,
        <a href='#toFor'><code>toFormat</code></a> and
        <a href='#toP'><code>toPrecision</code></a>.
      </dd>
      <dd>The modes are available as enumerated properties of the BigNumber constructor.</dd>
       <dd>
      <pre>BigNumber.config({ ROUNDING_MODE: 0 })
BigNumber.set({ ROUNDING_MODE: BigNumber.ROUND_UP })    // equivalent</pre>
        </dd>



      <dt id="exponential-at"><code><b>EXPONENTIAL_AT</b></code></dt>
      <dd>
        <i>number</i>: integer, magnitude <code>0</code> to <code>1e+9</code> inclusive, or
        <br />
        <i>number</i>[]: [ integer <code>-1e+9</code> to <code>0</code> inclusive, integer
        <code>0</code> to <code>1e+9</code> inclusive ]<br />
        Default value: <code>[-7, 20]</code>
      </dd>
      <dd>
        The exponent value(s) at which <code>toString</code> returns exponential notation.
      </dd>
      <dd>
        If a single number is assigned, the value is the exponent magnitude.<br />
        If an array of two numbers is assigned then the first number is the negative exponent
        value at and beneath which exponential notation is used, and the second number is the
        positive exponent value at and above which the same.
      </dd>
      <dd>
        For example, to emulate JavaScript numbers in terms of the exponent values at which they
        begin to use exponential notation, use <code>[-7, 20]</code>.
      </dd>
      <dd>
      <pre>BigNumber.config({ EXPONENTIAL_AT: 2 })
new BigNumber(12.3)         // '12.3'        e is only 1
new BigNumber(123)          // '1.23e+2'
new BigNumber(0.123)        // '0.123'       e is only -1
new BigNumber(0.0123)       // '1.23e-2'

BigNumber.config({ EXPONENTIAL_AT: [-7, 20] })
new BigNumber(123456789)    // '123456789'   e is only 8
new BigNumber(0.000000123)  // '1.23e-7'

// Almost never return exponential notation:
BigNumber.config({ EXPONENTIAL_AT: 1e+9 })

// Always return exponential notation:
BigNumber.config({ EXPONENTIAL_AT: 0 })</pre>
      </dd>
      <dd>
        Regardless of the value of <code>EXPONENTIAL_AT</code>, the <code>toFixed</code> method
        will always return a value in normal notation and the <code>toExponential</code> method
        will always return a value in exponential form.
      </dd>
      <dd>
        Calling <code>toString</code> with a base argument, e.g. <code>toString(10)</code>, will
        also always return normal notation.
      </dd>



      <dt id="range"><code><b>RANGE</b></code></dt>
      <dd>
        <i>number</i>: integer, magnitude <code>1</code> to <code>1e+9</code> inclusive, or
        <br />
        <i>number</i>[]: [ integer <code>-1e+9</code> to <code>-1</code> inclusive, integer
        <code>1</code> to <code>1e+9</code> inclusive ]<br />
        Default value: <code>[-1e+9, 1e+9]</code>
      </dd>
      <dd>
        The exponent value(s) beyond which overflow to <code>Infinity</code> and underflow to
        zero occurs.
      </dd>
      <dd>
        If a single number is assigned, it is the maximum exponent magnitude: values wth a
        positive exponent of greater magnitude become <code>Infinity</code> and those with a
        negative exponent of greater magnitude become zero.
      <dd>
        If an array of two numbers is assigned then the first number is the negative exponent
        limit and the second number is the positive exponent limit.
      </dd>
      <dd>
        For example, to emulate JavaScript numbers in terms of the exponent values at which they
        become zero and <code>Infinity</code>, use <code>[-324, 308]</code>.
      </dd>
      <dd>
      <pre>BigNumber.config({ RANGE: 500 })
BigNumber.config().RANGE     // [ -500, 500 ]
new BigNumber('9.999e499')   // '9.999e+499'
new BigNumber('1e500')       // 'Infinity'
new BigNumber('1e-499')      // '1e-499'
new BigNumber('1e-500')      // '0'

BigNumber.config({ RANGE: [-3, 4] })
new BigNumber(99999)         // '99999'      e is only 4
new BigNumber(100000)        // 'Infinity'   e is 5
new BigNumber(0.001)         // '0.01'       e is only -3
new BigNumber(0.0001)        // '0'          e is -4</pre>
      </dd>
      <dd>
        The largest possible magnitude of a finite BigNumber is
        <code>9.999...e+1000000000</code>.<br />
        The smallest possible magnitude of a non-zero BigNumber is <code>1e-1000000000</code>.
      </dd>



      <dt id="crypto"><code><b>CRYPTO</b></code></dt>
      <dd>
        <i>boolean</i>: <code>true</code> or <code>false</code>.<br />
        Default value: <code>false</code>
      </dd>
      <dd>
        The value that determines whether cryptographically-secure pseudo-random number
        generation is used.
      </dd>
      <dd>
        If <code>CRYPTO</code> is set to <code>true</code> then the
        <a href='#random'><code>random</code></a> method will generate random digits using
        <code>crypto.getRandomValues</code> in browsers that support it, or
        <code>crypto.randomBytes</code> if using Node.js.
      </dd>
      <dd>
        If neither function is supported by the host environment then attempting to set
        <code>CRYPTO</code> to <code>true</code> will fail and an exception will be thrown.
      </dd>
      <dd>
        If <code>CRYPTO</code> is <code>false</code> then the source of randomness used will be
        <code>Math.random</code> (which is assumed to generate at least <code>30</code> bits of
        randomness).
      </dd>
      <dd>See <a href='#random'><code>random</code></a>.</dd>
      <dd>
      <pre>
// Node.js
const crypto = require('crypto');   // CommonJS
import * as crypto from 'crypto';   // ES module

global.crypto = crypto;

BigNumber.config({ CRYPTO: true })
BigNumber.config().CRYPTO       // true
BigNumber.random()              // 0.54340758610486147524</pre>
      </dd>



      <dt id="modulo-mode"><code><b>MODULO_MODE</b></code></dt>
      <dd>
        <i>number</i>: integer, <code>0</code> to <code>9</code> inclusive<br />
        Default value: <code>1</code> (<a href="#round-down"><code>ROUND_DOWN</code></a>)
      </dd>
      <dd>The modulo mode used when calculating the modulus: <code>a mod n</code>.</dd>
      <dd>
        The quotient, <code>q = a / n</code>, is calculated according to the
        <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> that corresponds to the chosen
        <code>MODULO_MODE</code>.
      </dd>
      <dd>The remainder, <code>r</code>, is calculated as: <code>r = a - n * q</code>.</dd>
      <dd>
        The modes that are most commonly used for the modulus/remainder operation are shown in
        the following table. Although the other rounding modes can be used, they may not give
        useful results.
      </dd>
      <dd>
        <table>
          <tr><th>Property</th><th>Value</th><th>Description</th></tr>
          <tr>
            <td><b>ROUND_UP</b></td><td class='centre'>0</td>
            <td>
              The remainder is positive if the dividend is negative, otherwise it is negative.
            </td>
          </tr>
          <tr>
            <td><b>ROUND_DOWN</b></td><td class='centre'>1</td>
            <td>
              The remainder has the same sign as the dividend.<br />
              This uses 'truncating division' and matches the behaviour of JavaScript's
              remainder operator <code>%</code>.
            </td>
          </tr>
          <tr>
            <td><b>ROUND_FLOOR</b></td><td class='centre'>3</td>
            <td>
              The remainder has the same sign as the divisor.<br />
              This matches Python's <code>%</code> operator.
            </td>
          </tr>
          <tr>
            <td><b>ROUND_HALF_EVEN</b></td><td class='centre'>6</td>
            <td>The <i>IEEE 754</i> remainder function.</td>
          </tr>
           <tr>
             <td><b>EUCLID</b></td><td class='centre'>9</td>
             <td>
               The remainder is always positive. Euclidian division: <br />
               <code>q = sign(n) * floor(a / abs(n))</code>
             </td>
           </tr>
        </table>
      </dd>
      <dd>
        The rounding/modulo modes are available as enumerated properties of the BigNumber
        constructor.
      </dd>
      <dd>See <a href='#mod'><code>modulo</code></a>.</dd>
      <dd>
        <pre>BigNumber.config({ MODULO_MODE: BigNumber.EUCLID })
BigNumber.config({ MODULO_MODE: 9 })          // equivalent</pre>
      </dd>



      <dt id="pow-precision"><code><b>POW_PRECISION</b></code></dt>
      <dd>
        <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive.<br />
        Default value: <code>0</code>
      </dd>
      <dd>
        The <i>maximum</i> precision, i.e. number of significant digits, of the result of the power
        operation (unless a modulus is specified).
      </dd>
      <dd>If set to <code>0</code>, the number of significant digits will not be limited.</dd>
      <dd>See <a href='#pow'><code>exponentiatedBy</code></a>.</dd>
      <dd><pre>BigNumber.config({ POW_PRECISION: 100 })</pre></dd>



      <dt id="format"><code><b>FORMAT</b></code></dt>
      <dd><i>object</i></dd>
      <dd>
        The <code>FORMAT</code> object configures the format of the string returned by the
        <a href='#toFor'><code>toFormat</code></a> method.
      </dd>
      <dd>
        The example below shows the properties of the <code>FORMAT</code> object that are
        recognised, and their default values.
      </dd>
      <dd>
         Unlike the other configuration properties, the values of the properties of the
         <code>FORMAT</code> object will not be checked for validity. The existing
         <code>FORMAT</code> object will simply be replaced by the object that is passed in.
         The object can include any number of the properties shown below.
      </dd>
      <dd>See <a href='#toFor'><code>toFormat</code></a> for examples of usage.</dd>
      <dd>
      <pre>
BigNumber.config({
  FORMAT: {
    // string to prepend
    prefix: '',
    // decimal separator
    decimalSeparator: '.',
    // grouping separator of the integer part
    groupSeparator: ',',
    // primary grouping size of the integer part
    groupSize: 3,
    // secondary grouping size of the integer part
    secondaryGroupSize: 0,
    // grouping separator of the fraction part
    fractionGroupSeparator: ' ',
    // grouping size of the fraction part
    fractionGroupSize: 0,
    // string to append
    suffix: ''
  }
});</pre>
      </dd>



      <dt id="alphabet"><code><b>ALPHABET</b></code></dt>
      <dd>
        <i>string</i><br />
        Default value: <code>'0123456789abcdefghijklmnopqrstuvwxyz'</code>
      </dd>
      <dd>
        The alphabet used for base conversion. The length of the alphabet corresponds to the
        maximum value of the base argument that can be passed to the
        <a href='#bignumber'><code>BigNumber</code></a> constructor or
        <a href='#toS'><code>toString</code></a>.
      </dd>
      <dd>
        There is no maximum length for the alphabet, but it must be at least 2 characters long, and
        it must not contain whitespace or a repeated character, or the sign indicators
        <code>'+'</code> and <code>'-'</code>, or the decimal separator <code>'.'</code>.
      </dd>
      <dd>
        <pre>// duodecimal (base 12)
BigNumber.config({ ALPHABET: '0123456789TE' })
x = new BigNumber('T', 12)
x.toString()                // '10'
x.toString(12)              // 'T'</pre>
      </dd>



    </dl>
    <br /><br />
    <p>Returns an object with the above properties and their current values.</p>
    <p>
      Throws if <code>object</code> is not an object, or if an invalid value is assigned to
      one or more of the above properties. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>
BigNumber.config({
  DECIMAL_PLACES: 40,
  ROUNDING_MODE: BigNumber.ROUND_HALF_CEIL,
  EXPONENTIAL_AT: [-10, 20],
  RANGE: [-500, 500],
  CRYPTO: true,
  MODULO_MODE: BigNumber.ROUND_FLOOR,
  POW_PRECISION: 80,
  FORMAT: {
    groupSize: 3,
    groupSeparator: ' ',
    decimalSeparator: ','
  },
  ALPHABET: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
});

obj = BigNumber.config();
obj.DECIMAL_PLACES        // 40
obj.RANGE                 // [-500, 500]</pre>



    <h5 id="isBigNumber">
      isBigNumber<code class='inset'>.isBigNumber(value) <i>&rArr; boolean</i></code>
    </h5>
    <p><code>value</code>: <i>any</i><br /></p>
    <p>
      Returns <code>true</code> if <code>value</code> is a BigNumber instance, otherwise returns
      <code>false</code>.
    </p>
    <pre>x = 42
y = new BigNumber(x)

BigNumber.isBigNumber(x)             // false
y instanceof BigNumber               // true
BigNumber.isBigNumber(y)             // true

BN = BigNumber.clone();
z = new BN(x)
z instanceof BigNumber               // false
BigNumber.isBigNumber(z)             // true</pre>
    <p>
      If <code>value</code> is a BigNumber instance and <code>BigNumber.DEBUG</code> is <code>true</code>,
      then this method will also check if <code>value</code> is well-formed, and throw if it is not.
      See <a href='#Errors'>Errors</a>.
    </p>
    <p>
      The check can be useful if creating a BigNumber from an object literal.
      See <a href='#bignumber'>BigNumber</a>.
    </p>
    <pre>
x = new BigNumber(10)

// Change x.c to an illegitimate value.
x.c = NaN

BigNumber.DEBUG = false

// No error.
BigNumber.isBigNumber(x)    // true

BigNumber.DEBUG = true

// Error.
BigNumber.isBigNumber(x)    // '[BigNumber Error] Invalid BigNumber'</pre>



    <h5 id="max">maximum<code class='inset'>.max(n...) <i>&rArr; BigNumber</i></code></h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <i>See <code><a href="#bignumber">BigNumber</a></code> for further parameter details.</i>
    </p>
    <p>
      Returns a BigNumber whose value is the maximum of the arguments.
    </p>
    <p>The return value is always exact and unrounded.</p>
    <pre>x = new BigNumber('3257869345.0378653')
BigNumber.maximum(4e9, x, '123456789.9')      // '4000000000'

arr = [12, '13', new BigNumber(14)]
BigNumber.max.apply(null, arr)                // '14'</pre>



    <h5 id="min">minimum<code class='inset'>.min(n...) <i>&rArr; BigNumber</i></code></h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <i>See <code><a href="#bignumber">BigNumber</a></code> for further parameter details.</i>
    </p>
    <p>
      Returns a BigNumber whose value is the minimum of the arguments.
    </p>
    <p>The return value is always exact and unrounded.</p>
    <pre>x = new BigNumber('3257869345.0378653')
BigNumber.minimum(4e9, x, '123456789.9')      // '123456789.9'

arr = [2, new BigNumber(-14), '-15.9999', -12]
BigNumber.min.apply(null, arr)                // '-15.9999'</pre>



    <h5 id="random">
      random<code class='inset'>.random([dp]) <i>&rArr; BigNumber</i></code>
    </h5>
    <p><code>dp</code>: <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive</p>
    <p>
      Returns a new BigNumber with a pseudo-random value equal to or greater than <code>0</code> and
      less than <code>1</code>.
    </p>
    <p>
      The return value will have <code>dp</code> decimal places (or less if trailing zeros are
      produced).<br />
      If <code>dp</code> is omitted then the number of decimal places will default to the current
      <a href='#decimal-places'><code>DECIMAL_PLACES</code></a> setting.
    </p>
    <p>
      Depending on the value of this BigNumber constructor's
      <a href='#crypto'><code>CRYPTO</code></a> setting and the support for the
      <code>crypto</code> object in the host environment, the random digits of the return value are
      generated by either <code>Math.random</code> (fastest), <code>crypto.getRandomValues</code>
      (Web Cryptography API in recent browsers) or <code>crypto.randomBytes</code> (Node.js).
    </p>
    <p>
      To be able to set <a href='#crypto'><code>CRYPTO</code></a> to <code>true</code> when using
      Node.js, the <code>crypto</code> object must be available globally:
    </p>
    <pre>// Node.js
const crypto = require('crypto');   // CommonJS
import * as crypto from 'crypto';   // ES module
global.crypto = crypto;</pre>
    <p>
      If <a href='#crypto'><code>CRYPTO</code></a> is <code>true</code>, i.e. one of the
      <code>crypto</code> methods is to be used, the value of a returned BigNumber should be
      cryptographically-secure and statistically indistinguishable from a random value.
    </p>
    <p>
      Throws if <code>dp</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>BigNumber.config({ DECIMAL_PLACES: 10 })
BigNumber.random()              // '0.4117936847'
BigNumber.random(20)            // '0.78193327636914089009'</pre>



    <h5 id="sum">sum<code class='inset'>.sum(n...) <i>&rArr; BigNumber</i></code></h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <i>See <code><a href="#bignumber">BigNumber</a></code> for further parameter details.</i>
    </p>
    <p>Returns a BigNumber whose value is the sum of the arguments.</p>
    <p>The return value is always exact and unrounded.</p>
    <pre>x = new BigNumber('3257869345.0378653')
BigNumber.sum(4e9, x, '123456789.9')      // '7381326134.9378653'

arr = [2, new BigNumber(14), '15.9999', 12]
BigNumber.sum.apply(null, arr)            // '43.9999'</pre>



    <h4 id="constructor-properties">Properties</h4>
    <p>
      The library's enumerated rounding modes are stored as properties of the constructor.<br />
      (They are not referenced internally by the library itself.)
    </p>
    <p>
      Rounding modes <code>0</code> to <code>6</code> (inclusive) are the same as those of Java's
      BigDecimal class.
    </p>
    <table>
      <tr>
        <th>Property</th>
        <th>Value</th>
        <th>Description</th>
      </tr>
      <tr>
        <td id="round-up"><b>ROUND_UP</b></td>
        <td class='centre'>0</td>
        <td>Rounds away from zero</td>
      </tr>
      <tr>
        <td id="round-down"><b>ROUND_DOWN</b></td>
        <td class='centre'>1</td>
        <td>Rounds towards zero</td>
      </tr>
      <tr>
        <td id="round-ceil"><b>ROUND_CEIL</b></td>
        <td class='centre'>2</td>
        <td>Rounds towards <code>Infinity</code></td>
      </tr>
      <tr>
        <td id="round-floor"><b>ROUND_FLOOR</b></td>
        <td class='centre'>3</td>
        <td>Rounds towards <code>-Infinity</code></td>
      </tr>
      <tr>
        <td id="round-half-up"><b>ROUND_HALF_UP</b></td>
        <td class='centre'>4</td>
        <td>
          Rounds towards nearest neighbour.<br />
          If equidistant, rounds away from zero
        </td>
      </tr>
      <tr>
        <td id="round-half-down"><b>ROUND_HALF_DOWN</b></td>
        <td class='centre'>5</td>
        <td>
          Rounds towards nearest neighbour.<br />
          If equidistant, rounds towards zero
        </td>
      </tr>
      <tr>
        <td id="round-half-even"><b>ROUND_HALF_EVEN</b></td>
        <td class='centre'>6</td>
        <td>
          Rounds towards nearest neighbour.<br />
          If equidistant, rounds towards even neighbour
        </td>
      </tr>
      <tr>
        <td id="round-half-ceil"><b>ROUND_HALF_CEIL</b></td>
        <td class='centre'>7</td>
        <td>
          Rounds towards nearest neighbour.<br />
          If equidistant, rounds towards <code>Infinity</code>
        </td>
      </tr>
      <tr>
        <td id="round-half-floor"><b>ROUND_HALF_FLOOR</b></td>
        <td class='centre'>8</td>
        <td>
          Rounds towards nearest neighbour.<br />
          If equidistant, rounds towards <code>-Infinity</code>
        </td>
      </tr>
    </table>
    <pre>
BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_CEIL })
BigNumber.config({ ROUNDING_MODE: 2 })     // equivalent</pre>

    <h5 id="debug">DEBUG</h5>
    <p><i>undefined|false|true</i></p>
    <p>
      If <code>BigNumber.DEBUG</code> is set <code>true</code> then an error will be thrown
      if this <a href='#bignumber'>BigNumber</a> constructor receives an invalid value, such as
      a value of type <em>number</em> with more than <code>15</code> significant digits.
      See <a href='#bignumber'>BigNumber</a>.
    </p>
    <p>
      An error will also be thrown if the <code><a href='#isBigNumber'>isBigNumber</a></code>
      method receives a BigNumber that is not well-formed.
      See <code><a href='#isBigNumber'>isBigNumber</a></code>.
    </p>
    <pre>BigNumber.DEBUG = true</pre>


    <h3>INSTANCE</h3>


    <h4 id="prototype-methods">Methods</h4>
    <p>The methods inherited by a BigNumber instance from its constructor's prototype object.</p>
    <p>A BigNumber is immutable in the sense that it is not changed by its methods. </p>
    <p>
      The treatment of &plusmn;<code>0</code>, &plusmn;<code>Infinity</code> and <code>NaN</code> is
      consistent with how JavaScript treats these values.
    </p>
    <p>Many method names have a shorter alias.</p>



    <h5 id="abs">absoluteValue<code class='inset'>.abs() <i>&rArr; BigNumber</i></code></h5>
    <p>
      Returns a BigNumber whose value is the absolute value, i.e. the magnitude, of the value of
      this BigNumber.
    </p>
    <p>The return value is always exact and unrounded.</p>
    <pre>
x = new BigNumber(-0.8)
y = x.absoluteValue()           // '0.8'
z = y.abs()                     // '0.8'</pre>



    <h5 id="cmp">
      comparedTo<code class='inset'>.comparedTo(n [, base]) <i>&rArr; number</i></code>
    </h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <table>
      <tr><th>Returns</th><th>&nbsp;</th></tr>
      <tr>
        <td class='centre'><code>1</code></td>
        <td>If the value of this BigNumber is greater than the value of <code>n</code></td>
      </tr>
      <tr>
        <td class='centre'><code>-1</code></td>
        <td>If the value of this BigNumber is less than the value of <code>n</code></td>
      </tr>
      <tr>
        <td class='centre'><code>0</code></td>
        <td>If this BigNumber and <code>n</code> have the same value</td>
      </tr>
       <tr>
        <td class='centre'><code>null</code></td>
        <td>If the value of either this BigNumber or <code>n</code> is <code>NaN</code></td>
      </tr>
    </table>
    <pre>
x = new BigNumber(Infinity)
y = new BigNumber(5)
x.comparedTo(y)                 // 1
x.comparedTo(x.minus(1))        // 0
y.comparedTo(NaN)               // null
y.comparedTo('110', 2)          // -1</pre>



    <h5 id="dp">
      decimalPlaces<code class='inset'>.dp([dp [, rm]]) <i>&rArr; BigNumber|number</i></code>
    </h5>
    <p>
      <code>dp</code>: <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive<br />
      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive
    </p>
    <p>
      If <code>dp</code> is a number, returns a BigNumber whose value is the value of this BigNumber
      rounded by rounding mode <code>rm</code> to a maximum of <code>dp</code> decimal places.
    </p>
    <p>
      If <code>dp</code> is omitted, or is <code>null</code> or <code>undefined</code>, the return
      value is the number of decimal places of the value of this BigNumber, or <code>null</code> if
      the value of this BigNumber is &plusmn;<code>Infinity</code> or <code>NaN</code>.
    </p>
    <p>
      If <code>rm</code> is omitted, or is <code>null</code> or <code>undefined</code>,
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> is used.
    </p>
    <p>
      Throws if <code>dp</code> or <code>rm</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>
x = new BigNumber(1234.56)
x.decimalPlaces(1)                     // '1234.6'
x.dp()                                 // 2
x.decimalPlaces(2)                     // '1234.56'
x.dp(10)                               // '1234.56'
x.decimalPlaces(0, 1)                  // '1234'
x.dp(0, 6)                             // '1235'
x.decimalPlaces(1, 1)                  // '1234.5'
x.dp(1, BigNumber.ROUND_HALF_EVEN)     // '1234.6'
x                                      // '1234.56'
y = new BigNumber('9.9e-101')
y.dp()                                 // 102</pre>



    <h5 id="div">dividedBy<code class='inset'>.div(n [, base]) <i>&rArr; BigNumber</i></code>
    </h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>
      Returns a BigNumber whose value is the value of this BigNumber divided by
      <code>n</code>, rounded according to the current
      <a href='#decimal-places'><code>DECIMAL_PLACES</code></a> and
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> settings.
    </p>
    <pre>
x = new BigNumber(355)
y = new BigNumber(113)
x.dividedBy(y)                  // '3.14159292035398230088'
x.div(5)                        // '71'
x.div(47, 16)                   // '5'</pre>



    <h5 id="divInt">
      dividedToIntegerBy<code class='inset'>.idiv(n [, base]) &rArr;
      <i>BigNumber</i></code>
    </h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>
      Returns a BigNumber whose value is the integer part of dividing the value of this BigNumber by
      <code>n</code>.
    </p>
    <pre>
x = new BigNumber(5)
y = new BigNumber(3)
x.dividedToIntegerBy(y)         // '1'
x.idiv(0.7)                     // '7'
x.idiv('0.f', 16)               // '5'</pre>



    <h5 id="pow">
      exponentiatedBy<code class='inset'>.pow(n [, m]) <i>&rArr; BigNumber</i></code>
    </h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i>: integer<br />
      <code>m</code>: <i>number|string|BigNumber</i>
    </p>
    <p>
      Returns a BigNumber whose value is the value of this BigNumber exponentiated by
      <code>n</code>, i.e. raised to the power <code>n</code>, and optionally modulo a modulus
      <code>m</code>.
    </p>
    <p>
      Throws if <code>n</code> is not an integer. See <a href='#Errors'>Errors</a>.
    </p>
    <p>
      If <code>n</code> is negative the result is rounded according to the current
      <a href='#decimal-places'><code>DECIMAL_PLACES</code></a> and
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> settings.
    </p>
    <p>
      As the number of digits of the result of the power operation can grow so large so quickly,
      e.g. 123.456<sup>10000</sup> has over <code>50000</code> digits, the number of significant
      digits calculated is limited to the value of the
      <a href='#pow-precision'><code>POW_PRECISION</code></a> setting (unless a modulus
      <code>m</code> is specified).
    </p>
    <p>
      By default <a href='#pow-precision'><code>POW_PRECISION</code></a> is set to <code>0</code>.
      This means that an unlimited number of significant digits will be calculated, and that the
      method's performance will decrease dramatically for larger exponents.
    </p>
    <p>
      If <code>m</code> is specified and the value of <code>m</code>, <code>n</code> and this
      BigNumber are integers, and <code>n</code> is positive, then a fast modular exponentiation
      algorithm is used, otherwise the operation will be performed as
      <code>x.exponentiatedBy(n).modulo(m)</code> with a
      <a href='#pow-precision'><code>POW_PRECISION</code></a> of <code>0</code>.
    </p>
    <pre>
Math.pow(0.7, 2)                // 0.48999999999999994
x = new BigNumber(0.7)
x.exponentiatedBy(2)            // '0.49'
BigNumber(3).pow(-2)            // '0.11111111111111111111'</pre>



    <h5 id="int">
      integerValue<code class='inset'>.integerValue([rm]) <i>&rArr; BigNumber</i></code>
    </h5>
    <p>
      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive
    </p>
   <p>
      Returns a BigNumber whose value is the value of this BigNumber rounded to an integer using
      rounding mode <code>rm</code>.
    </p>
    <p>
      If <code>rm</code> is omitted, or is <code>null</code> or <code>undefined</code>,
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> is used.
    </p>
    <p>
      Throws if <code>rm</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>
x = new BigNumber(123.456)
x.integerValue()                        // '123'
x.integerValue(BigNumber.ROUND_CEIL)    // '124'
y = new BigNumber(-12.7)
y.integerValue()                        // '-13'
y.integerValue(BigNumber.ROUND_DOWN)    // '-12'</pre>
    <p>
      The following is an example of how to add a prototype method that emulates JavaScript's
      <code>Math.round</code> function. <code>Math.ceil</code>, <code>Math.floor</code> and
      <code>Math.trunc</code> can be emulated in the same way with
      <code>BigNumber.ROUND_CEIL</code>, <code>BigNumber.ROUND_FLOOR</code> and
      <code> BigNumber.ROUND_DOWN</code> respectively.
    </p>
    <pre>
BigNumber.prototype.round = function () {
  return this.integerValue(BigNumber.ROUND_HALF_CEIL);
};
x.round()                               // '123'</pre>



    <h5 id="eq">isEqualTo<code class='inset'>.eq(n [, base]) <i>&rArr; boolean</i></code></h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>
      Returns <code>true</code> if the value of this BigNumber is equal to the value of
      <code>n</code>, otherwise returns <code>false</code>.<br />
      As with JavaScript, <code>NaN</code> does not equal <code>NaN</code>.
    </p>
    <p>Note: This method uses the <a href='#cmp'><code>comparedTo</code></a> method internally.</p>
    <pre>
0 === 1e-324                    // true
x = new BigNumber(0)
x.isEqualTo('1e-324')           // false
BigNumber(-0).eq(x)             // true  ( -0 === 0 )
BigNumber(255).eq('ff', 16)     // true

y = new BigNumber(NaN)
y.isEqualTo(NaN)                // false</pre>



    <h5 id="isF">isFinite<code class='inset'>.isFinite() <i>&rArr; boolean</i></code></h5>
    <p>
      Returns <code>true</code> if the value of this BigNumber is a finite number, otherwise
      returns <code>false</code>.
    </p>
    <p>
      The only possible non-finite values of a BigNumber are <code>NaN</code>, <code>Infinity</code>
      and <code>-Infinity</code>.
    </p>
    <pre>
x = new BigNumber(1)
x.isFinite()                    // true
y = new BigNumber(Infinity)
y.isFinite()                    // false</pre>
    <p>
      Note: The native method <code>isFinite()</code> can be used if
      <code>n &lt;= Number.MAX_VALUE</code>.
    </p>



    <h5 id="gt">isGreaterThan<code class='inset'>.gt(n [, base]) <i>&rArr; boolean</i></code></h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>
      Returns <code>true</code> if the value of this BigNumber is greater than the value of
      <code>n</code>, otherwise returns <code>false</code>.
    </p>
    <p>Note: This method uses the <a href='#cmp'><code>comparedTo</code></a> method internally.</p>
    <pre>
0.1 &gt; (0.3 - 0.2)                             // true
x = new BigNumber(0.1)
x.isGreaterThan(BigNumber(0.3).minus(0.2))    // false
BigNumber(0).gt(x)                            // false
BigNumber(11, 3).gt(11.1, 2)                  // true</pre>



    <h5 id="gte">
      isGreaterThanOrEqualTo<code class='inset'>.gte(n [, base]) <i>&rArr; boolean</i></code>
    </h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>
      Returns <code>true</code> if the value of this BigNumber is greater than or equal to the value
      of <code>n</code>, otherwise returns <code>false</code>.
    </p>
    <p>Note: This method uses the <a href='#cmp'><code>comparedTo</code></a> method internally.</p>
    <pre>
(0.3 - 0.2) &gt;= 0.1                     // false
x = new BigNumber(0.3).minus(0.2)
x.isGreaterThanOrEqualTo(0.1)          // true
BigNumber(1).gte(x)                    // true
BigNumber(10, 18).gte('i', 36)         // true</pre>



    <h5 id="isInt">isInteger<code class='inset'>.isInteger() <i>&rArr; boolean</i></code></h5>
    <p>
      Returns <code>true</code> if the value of this BigNumber is an integer, otherwise returns
      <code>false</code>.
    </p>
    <pre>
x = new BigNumber(1)
x.isInteger()                   // true
y = new BigNumber(123.456)
y.isInteger()                   // false</pre>



    <h5 id="lt">isLessThan<code class='inset'>.lt(n [, base]) <i>&rArr; boolean</i></code></h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>
      Returns <code>true</code> if the value of this BigNumber is less than the value of
      <code>n</code>, otherwise returns <code>false</code>.
    </p>
     <p>Note: This method uses the <a href='#cmp'><code>comparedTo</code></a> method internally.</p>
    <pre>
(0.3 - 0.2) &lt; 0.1                       // true
x = new BigNumber(0.3).minus(0.2)
x.isLessThan(0.1)                       // false
BigNumber(0).lt(x)                      // true
BigNumber(11.1, 2).lt(11, 3)            // true</pre>



    <h5 id="lte">
      isLessThanOrEqualTo<code class='inset'>.lte(n [, base]) <i>&rArr; boolean</i></code>
    </h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>
      Returns <code>true</code> if the value of this BigNumber is less than or equal to the value of
      <code>n</code>, otherwise returns <code>false</code>.
    </p>
    <p>Note: This method uses the <a href='#cmp'><code>comparedTo</code></a> method internally.</p>
    <pre>
0.1 &lt;= (0.3 - 0.2)                                // false
x = new BigNumber(0.1)
x.isLessThanOrEqualTo(BigNumber(0.3).minus(0.2))  // true
BigNumber(-1).lte(x)                              // true
BigNumber(10, 18).lte('i', 36)                    // true</pre>



    <h5 id="isNaN">isNaN<code class='inset'>.isNaN() <i>&rArr; boolean</i></code></h5>
    <p>
      Returns <code>true</code> if the value of this BigNumber is <code>NaN</code>, otherwise
      returns <code>false</code>.
    </p>
    <pre>
x = new BigNumber(NaN)
x.isNaN()                       // true
y = new BigNumber('Infinity')
y.isNaN()                       // false</pre>
    <p>Note: The native method <code>isNaN()</code> can also be used.</p>



    <h5 id="isNeg">isNegative<code class='inset'>.isNegative() <i>&rArr; boolean</i></code></h5>
    <p>
      Returns <code>true</code> if the sign of this BigNumber is negative, otherwise returns
      <code>false</code>.
    </p>
    <pre>
x = new BigNumber(-0)
x.isNegative()                  // true
y = new BigNumber(2)
y.isNegative()                  // false</pre>
    <p>Note: <code>n &lt; 0</code> can be used if <code>n &lt;= -Number.MIN_VALUE</code>.</p>



    <h5 id="isPos">isPositive<code class='inset'>.isPositive() <i>&rArr; boolean</i></code></h5>
    <p>
      Returns <code>true</code> if the sign of this BigNumber is positive, otherwise returns
      <code>false</code>.
    </p>
    <pre>
x = new BigNumber(-0)
x.isPositive()                  // false
y = new BigNumber(2)
y.isPositive()                  // true</pre>



    <h5 id="isZ">isZero<code class='inset'>.isZero() <i>&rArr; boolean</i></code></h5>
    <p>
      Returns <code>true</code> if the value of this BigNumber is zero or minus zero, otherwise
      returns <code>false</code>.
    </p>
    <pre>
x = new BigNumber(-0)
x.isZero() &amp;&amp; x.isNegative()         // true
y = new BigNumber(Infinity)
y.isZero()                      // false</pre>
    <p>Note: <code>n == 0</code> can be used if <code>n &gt;= Number.MIN_VALUE</code>.</p>



    <h5 id="minus">
      minus<code class='inset'>.minus(n [, base]) <i>&rArr; BigNumber</i></code>
    </h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>Returns a BigNumber whose value is the value of this BigNumber minus <code>n</code>.</p>
    <p>The return value is always exact and unrounded.</p>
    <pre>
0.3 - 0.1                       // 0.19999999999999998
x = new BigNumber(0.3)
x.minus(0.1)                    // '0.2'
x.minus(0.6, 20)                // '0'</pre>



    <h5 id="mod">modulo<code class='inset'>.mod(n [, base]) <i>&rArr; BigNumber</i></code></h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>
      Returns a BigNumber whose value is the value of this BigNumber modulo <code>n</code>, i.e.
      the integer remainder of dividing this BigNumber by <code>n</code>.
    </p>
    <p>
      The value returned, and in particular its sign, is dependent on the value of the
      <a href='#modulo-mode'><code>MODULO_MODE</code></a> setting of this BigNumber constructor.
      If it is <code>1</code> (default value), the result will have the same sign as this BigNumber,
      and it will match that of Javascript's <code>%</code> operator (within the limits of double
      precision) and BigDecimal's <code>remainder</code> method.
    </p>
    <p>The return value is always exact and unrounded.</p>
    <p>
      See <a href='#modulo-mode'><code>MODULO_MODE</code></a> for a description of the other
      modulo modes.
    </p>
    <pre>
1 % 0.9                         // 0.09999999999999998
x = new BigNumber(1)
x.modulo(0.9)                   // '0.1'
y = new BigNumber(33)
y.mod('a', 33)                  // '3'</pre>



    <h5 id="times">
      multipliedBy<code class='inset'>.times(n [, base]) <i>&rArr; BigNumber</i></code>
    </h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>
      Returns a BigNumber whose value is the value of this BigNumber multiplied by <code>n</code>.
    </p>
    <p>The return value is always exact and unrounded.</p>
    <pre>
0.6 * 3                         // 1.7999999999999998
x = new BigNumber(0.6)
y = x.multipliedBy(3)           // '1.8'
BigNumber('7e+500').times(y)    // '1.26e+501'
x.multipliedBy('-a', 16)        // '-6'</pre>



    <h5 id="neg">negated<code class='inset'>.negated() <i>&rArr; BigNumber</i></code></h5>
    <p>
      Returns a BigNumber whose value is the value of this BigNumber negated, i.e. multiplied by
      <code>-1</code>.
    </p>
    <pre>
x = new BigNumber(1.8)
x.negated()                     // '-1.8'
y = new BigNumber(-1.3)
y.negated()                     // '1.3'</pre>



    <h5 id="plus">plus<code class='inset'>.plus(n [, base]) <i>&rArr; BigNumber</i></code></h5>
    <p>
      <code>n</code>: <i>number|string|BigNumber</i><br />
      <code>base</code>: <i>number</i><br />
      <i>See <a href="#bignumber">BigNumber</a> for further parameter details.</i>
    </p>
    <p>Returns a BigNumber whose value is the value of this BigNumber plus <code>n</code>.</p>
    <p>The return value is always exact and unrounded.</p>
    <pre>
0.1 + 0.2                       // 0.30000000000000004
x = new BigNumber(0.1)
y = x.plus(0.2)                 // '0.3'
BigNumber(0.7).plus(x).plus(y)  // '1.1'
x.plus('0.1', 8)                // '0.225'</pre>



    <h5 id="sd">
      precision<code class='inset'>.sd([d [, rm]]) <i>&rArr; BigNumber|number</i></code>
    </h5>
    <p>
      <code>d</code>: <i>number|boolean</i>: integer, <code>1</code> to <code>1e+9</code>
      inclusive, or <code>true</code> or <code>false</code><br />
      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive.
    </p>
    <p>
      If <code>d</code> is a number, returns a BigNumber whose value is the value of this BigNumber
      rounded to a precision of <code>d</code> significant digits using rounding mode
      <code>rm</code>.
    </p>
    <p>
      If <code>d</code> is omitted or is <code>null</code> or <code>undefined</code>, the return
      value is the number of significant digits of the value of this BigNumber, or <code>null</code>
      if the value of this BigNumber is &plusmn;<code>Infinity</code> or <code>NaN</code>.
    </p>
    <p>
      If <code>d</code> is <code>true</code> then any trailing zeros of the integer
      part of a number are counted as significant digits, otherwise they are not.
    </p>
    <p>
      If <code>rm</code> is omitted or is <code>null</code> or <code>undefined</code>,
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> will be used.
    </p>
    <p>
      Throws if <code>d</code> or <code>rm</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>
x = new BigNumber(9876.54321)
x.precision(6)                         // '9876.54'
x.sd()                                 // 9
x.precision(6, BigNumber.ROUND_UP)     // '9876.55'
x.sd(2)                                // '9900'
x.precision(2, 1)                      // '9800'
x                                      // '9876.54321'
y = new BigNumber(987000)
y.precision()                          // 3
y.sd(true)                             // 6</pre>



<h5 id="shift">shiftedBy<code class='inset'>.shiftedBy(n) <i>&rArr; BigNumber</i></code></h5>
    <p>
      <code>n</code>: <i>number</i>: integer,
      <code>-9007199254740991</code> to <code>9007199254740991</code> inclusive
    </p>
    <p>
      Returns a BigNumber whose value is the value of this BigNumber shifted by <code>n</code>
      places.
    <p>
      The shift is of the decimal point, i.e. of powers of ten, and is to the left if <code>n</code>
      is negative or to the right if <code>n</code> is positive.
    </p>
    <p>The return value is always exact and unrounded.</p>
    <p>
      Throws if <code>n</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>
x = new BigNumber(1.23)
x.shiftedBy(3)                      // '1230'
x.shiftedBy(-3)                     // '0.00123'</pre>



    <h5 id="sqrt">squareRoot<code class='inset'>.sqrt() <i>&rArr; BigNumber</i></code></h5>
    <p>
      Returns a BigNumber whose value is the square root of the value of this BigNumber,
      rounded according to the current
      <a href='#decimal-places'><code>DECIMAL_PLACES</code></a> and
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> settings.
    </p>
    <p>
      The return value will be correctly rounded, i.e. rounded as if the result was first calculated
      to an infinite number of correct digits before rounding.
    </p>
    <pre>
x = new BigNumber(16)
x.squareRoot()                  // '4'
y = new BigNumber(3)
y.sqrt()                        // '1.73205080756887729353'</pre>



    <h5 id="toE">
      toExponential<code class='inset'>.toExponential([dp [, rm]]) <i>&rArr; string</i></code>
    </h5>
    <p>
      <code>dp</code>: <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive<br />
      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive
    </p>
    <p>
      Returns a string representing the value of this BigNumber in exponential notation rounded
      using rounding mode <code>rm</code> to <code>dp</code> decimal places, i.e with one digit
      before the decimal point and <code>dp</code> digits after it.
    </p>
    <p>
      If the value of this BigNumber in exponential notation has fewer than <code>dp</code> fraction
      digits, the return value will be appended with zeros accordingly.
    </p>
    <p>
      If <code>dp</code> is omitted, or is <code>null</code> or <code>undefined</code>, the number
      of digits after the decimal point defaults to the minimum number of digits necessary to
      represent the value exactly.<br />
      If <code>rm</code> is omitted or is <code>null</code> or <code>undefined</code>,
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> is used.
    </p>
    <p>
      Throws if <code>dp</code> or <code>rm</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
     <pre>
x = 45.6
y = new BigNumber(x)
x.toExponential()               // '4.56e+1'
y.toExponential()               // '4.56e+1'
x.toExponential(0)              // '5e+1'
y.toExponential(0)              // '5e+1'
x.toExponential(1)              // '4.6e+1'
y.toExponential(1)              // '4.6e+1'
y.toExponential(1, 1)           // '4.5e+1'  (ROUND_DOWN)
x.toExponential(3)              // '4.560e+1'
y.toExponential(3)              // '4.560e+1'</pre>



    <h5 id="toFix">
      toFixed<code class='inset'>.toFixed([dp [, rm]]) <i>&rArr; string</i></code>
    </h5>
    <p>
      <code>dp</code>: <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive<br />
      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive
    </p>
    <p>
      Returns a string representing the value of this BigNumber in normal (fixed-point) notation
      rounded to <code>dp</code> decimal places using rounding mode <code>rm</code>.
    </p>
    <p>
      If the value of this BigNumber in normal notation has fewer than <code>dp</code> fraction
      digits, the return value will be appended with zeros accordingly.
    </p>
   <p>
      Unlike <code>Number.prototype.toFixed</code>, which returns exponential notation if a number
      is greater or equal to <code>10<sup>21</sup></code>, this method will always return normal
      notation.
    </p>
    <p>
      If <code>dp</code> is omitted or is <code>null</code> or <code>undefined</code>, the return
      value will be unrounded and in normal notation. This is also unlike
      <code>Number.prototype.toFixed</code>, which returns the value to zero decimal places.<br />
      It is useful when fixed-point notation is required and the current
      <a href="#exponential-at"><code>EXPONENTIAL_AT</code></a> setting causes
      <code><a href='#toS'>toString</a></code> to return exponential notation.<br />
      If <code>rm</code> is omitted or is <code>null</code> or <code>undefined</code>,
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> is used.
    </p>
    <p>
      Throws if <code>dp</code> or <code>rm</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>
x = 3.456
y = new BigNumber(x)
x.toFixed()                     // '3'
y.toFixed()                     // '3.456'
y.toFixed(0)                    // '3'
x.toFixed(2)                    // '3.46'
y.toFixed(2)                    // '3.46'
y.toFixed(2, 1)                 // '3.45'  (ROUND_DOWN)
x.toFixed(5)                    // '3.45600'
y.toFixed(5)                    // '3.45600'</pre>



    <h5 id="toFor">
      toFormat<code class='inset'>.toFormat([dp [, rm[, format]]]) <i>&rArr; string</i></code>
    </h5>
    <p>
      <code>dp</code>: <i>number</i>: integer, <code>0</code> to <code>1e+9</code> inclusive<br />
      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive<br />
      <code>format</code>: <i>object</i>: see <a href='#format'><code>FORMAT</code></a>
    </p>
    <p>
      <p>
      Returns a string representing the value of this BigNumber in normal (fixed-point) notation
      rounded to <code>dp</code> decimal places using rounding mode <code>rm</code>, and formatted
      according to the properties of the <code>format</code> object.
    </p>
    <p>
      See <a href='#format'><code>FORMAT</code></a> and the examples below for the properties of the
      <code>format</code> object, their types, and their usage. A formatting object may contain
      some or all of the recognised properties.
    </p>
    <p>
      If <code>dp</code> is omitted or is <code>null</code> or <code>undefined</code>, then the
      return value is not rounded to a fixed number of decimal places.<br />
      If <code>rm</code> is omitted or is <code>null</code> or <code>undefined</code>,
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> is used.<br />
      If <code>format</code> is omitted or is <code>null</code> or <code>undefined</code>, the
      <a href='#format'><code>FORMAT</code></a> object is used.
    </p>
    <p>
      Throws if <code>dp</code>, <code>rm</code> or <code>format</code> is invalid. See
      <a href='#Errors'>Errors</a>.
    </p>
    <pre>
fmt = {
  prefix: '',
  decimalSeparator: '.',
  groupSeparator: ',',
  groupSize: 3,
  secondaryGroupSize: 0,
  fractionGroupSeparator: ' ',
  fractionGroupSize: 0,
  suffix: ''
}

x = new BigNumber('123456789.123456789')

// Set the global formatting options
BigNumber.config({ FORMAT: fmt })

x.toFormat()                              // '123,456,789.123456789'
x.toFormat(3)                             // '123,456,789.123'

// If a reference to the object assigned to FORMAT has been retained,
// the format properties can be changed directly
fmt.groupSeparator = ' '
fmt.fractionGroupSize = 5
x.toFormat()                              // '123 456 789.12345 6789'

// Alternatively, pass the formatting options as an argument
fmt = {
  prefix: '=> ',
  decimalSeparator: ',',
  groupSeparator: '.',
  groupSize: 3,
  secondaryGroupSize: 2
}

x.toFormat()                              // '123 456 789.12345 6789'
x.toFormat(fmt)                           // '=> 12.34.56.789,123456789'
x.toFormat(2, fmt)                        // '=> 12.34.56.789,12'
x.toFormat(3, BigNumber.ROUND_UP, fmt)    // '=> 12.34.56.789,124'</pre>



    <h5 id="toFr">
      toFraction<code class='inset'>.toFraction([maximum_denominator])
      <i>&rArr; [BigNumber, BigNumber]</i></code>
    </h5>
    <p>
      <code>maximum_denominator</code>:
      <i>number|string|BigNumber</i>: integer &gt;= <code>1</code> and &lt;=
      <code>Infinity</code>
    </p>
    <p>
      Returns an array of two BigNumbers representing the value of this BigNumber as a simple
      fraction with an integer numerator and an integer denominator. The denominator will be a
      positive non-zero value less than or equal to <code>maximum_denominator</code>.
    </p>
    <p>
      If a <code>maximum_denominator</code> is not specified, or is <code>null</code> or
      <code>undefined</code>, the denominator will be the lowest value necessary to represent the
      number exactly.
    </p>
    <p>
      Throws if <code>maximum_denominator</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>
x = new BigNumber(1.75)
x.toFraction()                  // '7, 4'

pi = new BigNumber('3.14159265358')
pi.toFraction()                 // '157079632679,50000000000'
pi.toFraction(100000)           // '312689, 99532'
pi.toFraction(10000)            // '355, 113'
pi.toFraction(100)              // '311, 99'
pi.toFraction(10)               // '22, 7'
pi.toFraction(1)                // '3, 1'</pre>



    <h5 id="toJSON">toJSON<code class='inset'>.toJSON() <i>&rArr; string</i></code></h5>
    <p>As <a href='#valueOf'><code>valueOf</code></a>.</p>
    <pre>
x = new BigNumber('177.7e+457')
y = new BigNumber(235.4325)
z = new BigNumber('0.0098074')

// Serialize an array of three BigNumbers
str = JSON.stringify( [x, y, z] )
// "["1.777e+459","235.4325","0.0098074"]"

// Return an array of three BigNumbers
JSON.parse(str, function (key, val) {
    return key === '' ? val : new BigNumber(val)
})</pre>



    <h5 id="toN">toNumber<code class='inset'>.toNumber() <i>&rArr; number</i></code></h5>
    <p>Returns the value of this BigNumber as a JavaScript number primitive.</p>
    <p>
      This method is identical to using type coercion with the unary plus operator.
    </p>
    <pre>
x = new BigNumber(456.789)
x.toNumber()                    // 456.789
+x                              // 456.789

y = new BigNumber('45987349857634085409857349856430985')
y.toNumber()                    // 4.598734985763409e+34

z = new BigNumber(-0)
1 / z.toNumber()                // -Infinity
1 / +z                          // -Infinity</pre>



    <h5 id="toP">
      toPrecision<code class='inset'>.toPrecision([sd [, rm]]) <i>&rArr; string</i></code>
    </h5>
    <p>
      <code>sd</code>: <i>number</i>: integer, <code>1</code> to <code>1e+9</code> inclusive<br />
      <code>rm</code>: <i>number</i>: integer, <code>0</code> to <code>8</code> inclusive
    </p>
    <p>
      Returns a string representing the value of this BigNumber rounded to <code>sd</code>
      significant digits using rounding mode <code>rm</code>.
    </p>
    <p>
      If <code>sd</code> is less than the number of digits necessary to represent the integer part
      of the value in normal (fixed-point) notation, then exponential notation is used.
    </p>
    <p>
      If <code>sd</code> is omitted, or is <code>null</code> or <code>undefined</code>, then the
      return value is the same as <code>n.toString()</code>.<br />
      If <code>rm</code> is omitted or is <code>null</code> or <code>undefined</code>,
      <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> is used.
    </p>
    <p>
      Throws if <code>sd</code> or <code>rm</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
     <pre>
x = 45.6
y = new BigNumber(x)
x.toPrecision()                 // '45.6'
y.toPrecision()                 // '45.6'
x.toPrecision(1)                // '5e+1'
y.toPrecision(1)                // '5e+1'
y.toPrecision(2, 0)             // '4.6e+1'  (ROUND_UP)
y.toPrecision(2, 1)             // '4.5e+1'  (ROUND_DOWN)
x.toPrecision(5)                // '45.600'
y.toPrecision(5)                // '45.600'</pre>



    <h5 id="toS">toString<code class='inset'>.toString([base]) <i>&rArr; string</i></code></h5>
    <p>
      <code>base</code>: <i>number</i>: integer, <code>2</code> to <code>ALPHABET.length</code>
      inclusive (see <a href='#alphabet'><code>ALPHABET</code></a>).
    </p>
    <p>
      Returns a string representing the value of this BigNumber in the specified base, or base
      <code>10</code> if <code>base</code> is omitted or is <code>null</code> or
      <code>undefined</code>.
    </p>
    <p>
      For bases above <code>10</code>, and using the default base conversion alphabet
      (see <a href='#alphabet'><code>ALPHABET</code></a>), values from <code>10</code> to
      <code>35</code> are represented by <code>a-z</code>
      (as with <code>Number.prototype.toString</code>).
    </p>
    <p>
      If a base is specified the value is rounded according to the current
      <a href='#decimal-places'><code>DECIMAL_PLACES</code></a>
      and <a href='#rounding-mode'><code>ROUNDING_MODE</code></a> settings.
    </p>
    <p>
      If a base is not specified, and this BigNumber has a positive
      exponent that is equal to or greater than the positive component of the
      current <a href="#exponential-at"><code>EXPONENTIAL_AT</code></a> setting,
      or a negative exponent equal to or less than the negative component of the
      setting, then exponential notation is returned.
    </p>
    <p>If <code>base</code> is <code>null</code> or <code>undefined</code> it is ignored.</p>
    <p>
      Throws if <code>base</code> is invalid. See <a href='#Errors'>Errors</a>.
    </p>
    <pre>
x = new BigNumber(750000)
x.toString()                    // '750000'
BigNumber.config({ EXPONENTIAL_AT: 5 })
x.toString()                    // '7.5e+5'

y = new BigNumber(362.875)
y.toString(2)                   // '101101010.111'
y.toString(9)                   // '442.77777777777777777778'
y.toString(32)                  // 'ba.s'

BigNumber.config({ DECIMAL_PLACES: 4 });
z = new BigNumber('1.23456789')
z.toString()                    // '1.23456789'
z.toString(10)                  // '1.2346'</pre>



    <h5 id="valueOf">valueOf<code class='inset'>.valueOf() <i>&rArr; string</i></code></h5>
    <p>
      As <a href='#toS'><code>toString</code></a>, but does not accept a base argument and includes
      the minus sign for negative zero.
    </p>
    <pre>
x = new BigNumber('-0')
x.toString()                    // '0'
x.valueOf()                     // '-0'
y = new BigNumber('1.777e+457')
y.valueOf()                     // '1.777e+457'</pre>



    <h4 id="instance-properties">Properties</h4>
    <p>The properties of a BigNumber instance:</p>
    <table>
      <tr>
        <th>Property</th>
        <th>Description</th>
        <th>Type</th>
        <th>Value</th>
      </tr>
      <tr>
        <td class='centre' id='coefficient'><b>c</b></td>
        <td>coefficient<sup>*</sup></td>
        <td><i>number</i><code>[]</code></td>
        <td> Array of base <code>1e14</code> numbers</td>
      </tr>
      <tr>
        <td class='centre' id='exponent'><b>e</b></td>
        <td>exponent</td>
        <td><i>number</i></td>
        <td>Integer, <code>-1000000000</code> to <code>1000000000</code> inclusive</td>
      </tr>
      <tr>
        <td class='centre' id='sign'><b>s</b></td>
        <td>sign</td>
        <td><i>number</i></td>
        <td><code>-1</code> or <code>1</code></td>
      </tr>
    </table>
    <p><sup>*</sup>significand</p>
    <p>
      The value of any of the <code>c</code>, <code>e</code> and <code>s</code> properties may also
      be <code>null</code>.
    </p>
    <p>
      The above properties are best considered to be read-only. In early versions of this library it
      was okay to change the exponent of a BigNumber by writing to its exponent property directly,
      but this is no longer reliable as the value of the first element of the coefficient array is
      now dependent on the exponent.
    </p>
    <p>
      Note that, as with JavaScript numbers, the original exponent and fractional trailing zeros are
      not necessarily preserved.
    </p>
    <pre>x = new BigNumber(0.123)              // '0.123'
x.toExponential()                     // '1.23e-1'
x.c                                   // '1,2,3'
x.e                                   // -1
x.s                                   // 1

y = new Number(-123.4567000e+2)       // '-12345.67'
y.toExponential()                     // '-1.234567e+4'
z = new BigNumber('-123.4567000e+2')  // '-12345.67'
z.toExponential()                     // '-1.234567e+4'
z.c                                   // '1,2,3,4,5,6,7'
z.e                                   // 4
z.s                                   // -1</pre>



    <h4 id="zero-nan-infinity">Zero, NaN and Infinity</h4>
    <p>
      The table below shows how &plusmn;<code>0</code>, <code>NaN</code> and
      &plusmn;<code>Infinity</code> are stored.
    </p>
    <table>
      <tr>
        <th> </th>
        <th class='centre'>c</th>
        <th class='centre'>e</th>
        <th class='centre'>s</th>
      </tr>
      <tr>
        <td>&plusmn;0</td>
        <td><code>[0]</code></td>
        <td><code>0</code></td>
        <td><code>&plusmn;1</code></td>
      </tr>
      <tr>
        <td>NaN</td>
        <td><code>null</code></td>
        <td><code>null</code></td>
        <td><code>null</code></td>
      </tr>
      <tr>
        <td>&plusmn;Infinity</td>
        <td><code>null</code></td>
        <td><code>null</code></td>
        <td><code>&plusmn;1</code></td>
      </tr>
    </table>
    <pre>
x = new Number(-0)              // 0
1 / x == -Infinity              // true

y = new BigNumber(-0)           // '0'
y.c                             // '0' ( [0].toString() )
y.e                             // 0
y.s                             // -1</pre>



    <h4 id='Errors'>Errors</h4>
    <p>The table below shows the errors that are thrown.</p>
    <p>
      The errors are generic <code>Error</code> objects whose message begins
      <code>'[BigNumber Error]'</code>.
    </p>
    <table class='error-table'>
      <tr>
        <th>Method</th>
        <th>Throws</th>
      </tr>
      <tr>
        <td rowspan=6>
          <code>BigNumber</code><br />
          <code>comparedTo</code><br />
          <code>dividedBy</code><br />
          <code>dividedToIntegerBy</code><br />
          <code>isEqualTo</code><br />
          <code>isGreaterThan</code><br />
          <code>isGreaterThanOrEqualTo</code><br />
          <code>isLessThan</code><br />
          <code>isLessThanOrEqualTo</code><br />
          <code>minus</code><br />
          <code>modulo</code><br />
          <code>plus</code><br />
          <code>multipliedBy</code>
        </td>
        <td>Base not a primitive number</td>
      </tr>
      <tr>
        <td>Base not an integer</td>
      </tr>
      <tr>
        <td>Base out of range</td>
      </tr>
       <tr>
        <td>Number primitive has more than 15 significant digits<sup>*</sup></td>
      </tr>
      <tr>
        <td>Not a base... number<sup>*</sup></td>
      </tr>
      <tr>
        <td>Not a number<sup>*</sup></td>
      </tr>
      <tr>
        <td><code>clone</code></td>
        <td>Object expected</td>
      </tr>
      <tr>
        <td rowspan=24><code>config</code></td>
        <td>Object expected</td>
      </tr>
      <tr>
        <td><code>DECIMAL_PLACES</code> not a primitive number</td>
      </tr>
      <tr>
        <td><code>DECIMAL_PLACES</code> not an integer</td>
      </tr>
      <tr>
        <td><code>DECIMAL_PLACES</code> out of range</td>
      </tr>
      <tr>
        <td><code>ROUNDING_MODE</code> not a primitive number</td>
      </tr>
      <tr>
        <td><code>ROUNDING_MODE</code> not an integer</td>
      </tr>
      <tr>
        <td><code>ROUNDING_MODE</code> out of range</td>
      </tr>
      <tr>
        <td><code>EXPONENTIAL_AT</code> not a primitive number</td>
      </tr>
      <tr>
        <td><code>EXPONENTIAL_AT</code> not an integer</td>
      </tr>
      <tr>
        <td><code>EXPONENTIAL_AT</code> out of range</td>
      </tr>
      <tr>
        <td><code>RANGE</code> not a primitive number</td>
      </tr>
      <tr>
        <td><code>RANGE</code> not an integer</td>
      </tr>
      <tr>
        <td><code>RANGE</code> cannot be zero</td>
      </tr>
      <tr>
        <td><code>RANGE</code> cannot be zero</td>
      </tr>
      <tr>
        <td><code>CRYPTO</code> not true or false</td>
      </tr>
      <tr>
        <td><code>crypto</code> unavailable</td>
      </tr>
      <tr>
        <td><code>MODULO_MODE</code> not a primitive number</td>
      </tr>
      <tr>
        <td><code>MODULO_MODE</code> not an integer</td>
      </tr>
      <tr>
        <td><code>MODULO_MODE</code> out of range</td>
      </tr>
      <tr>
        <td><code>POW_PRECISION</code> not a primitive number</td>
      </tr>
      <tr>
        <td><code>POW_PRECISION</code> not an integer</td>
      </tr>
      <tr>
        <td><code>POW_PRECISION</code> out of range</td>
      </tr>
      <tr>
        <td><code>FORMAT</code> not an object</td>
      </tr>
      <tr>
        <td><code>ALPHABET</code> invalid</td>
      </tr>
      <tr>
        <td rowspan=3>
          <code>decimalPlaces</code><br />
          <code>precision</code><br />
          <code>random</code><br />
          <code>shiftedBy</code><br />
          <code>toExponential</code><br />
          <code>toFixed</code><br />
          <code>toFormat</code><br />
          <code>toPrecision</code>
        </td>
        <td>Argument not a primitive number</td>
      </tr>
      <tr>
        <td>Argument not an integer</td>
      </tr>
      <tr>
        <td>Argument out of range</td>
      </tr>
      <tr>
        <td>
          <code>decimalPlaces</code><br />
          <code>precision</code>
        </td>
        <td>Argument not true or false</td>
      </tr>
      <tr>
        <td><code>exponentiatedBy</code></td>
        <td>Argument not an integer</td>
      </tr>
      <tr>
        <td><code>isBigNumber</code></td>
        <td>Invalid BigNumber<sup>*</sup></td>
      </tr>
      <tr>
        <td>
          <code>minimum</code><br />
          <code>maximum</code>
        </td>
        <td>Not a number<sup>*</sup></td>
      </tr>
      <tr>
        <td>
          <code>random</code>
        </td>
        <td>crypto unavailable</td>
      </tr>
      <tr>
        <td>
          <code>toFormat</code>
        </td>
        <td>Argument not an object</td>
      </tr>
      <tr>
        <td rowspan=2><code>toFraction</code></td>
        <td>Argument not an integer</td>
      </tr>
      <tr>
        <td>Argument out of range</td>
      </tr>
      <tr>
        <td rowspan=3><code>toString</code></td>
        <td>Base not a primitive number</td>
      </tr>
      <tr>
        <td>Base not an integer</td>
      </tr>
      <tr>
        <td>Base out of range</td>
      </tr>
    </table>
    <p><sup>*</sup>Only thrown if <code>BigNumber.DEBUG</code> is <code>true</code>.</p>
    <p>To determine if an exception is a BigNumber Error:</p>
    <pre>
try {
  // ...
} catch (e) {
  if (e instanceof Error &amp;&amp; e.message.indexOf('[BigNumber Error]') === 0) {
      // ...
  }
}</pre>



    <h4 id="type-coercion">Type coercion</h4>
    <p>
      To prevent the accidental use of a BigNumber in primitive number operations, or the
      accidental addition of a BigNumber to a string, the <code>valueOf</code> method can be safely
      overwritten as shown below.
    </p>
    <p>
      The <a href='#valueOf'><code>valueOf</code></a> method is the same as the
      <a href='#toJSON'><code>toJSON</code></a> method, and both are the same as the
      <a href='#toS'><code>toString</code></a> method except they do not take a <code>base</code>
      argument and they include the minus sign for negative zero.
    </p>
    <pre>
BigNumber.prototype.valueOf = function () {
  throw Error('valueOf called!')
}

x = new BigNumber(1)
x / 2                    // '[BigNumber Error] valueOf called!'
x + 'abc'                // '[BigNumber Error] valueOf called!'
</pre>



    <h4 id='faq'>FAQ</h4>

    <h6>Why are trailing fractional zeros removed from BigNumbers?</h6>
    <p>
      Some arbitrary-precision libraries retain trailing fractional zeros as they can indicate the
      precision of a value. This can be useful but the results of arithmetic operations can be
      misleading.
    </p>
    <pre>
x = new BigDecimal("1.0")
y = new BigDecimal("1.1000")
z = x.add(y)                      // 2.1000

x = new BigDecimal("1.20")
y = new BigDecimal("3.45000")
z = x.multiply(y)                 // 4.1400000</pre>
    <p>
      To specify the precision of a value is to specify that the value lies
      within a certain range.
    </p>
    <p>
      In the first example, <code>x</code> has a value of <code>1.0</code>. The trailing zero shows
      the precision of the value, implying that it is in the range <code>0.95</code> to
      <code>1.05</code>. Similarly, the precision indicated by the trailing zeros of <code>y</code>
      indicates that the value is in the range <code>1.09995</code> to <code>1.10005</code>.
    </p>
    <p>
      If we  add the two lowest values in the ranges we have, <code>0.95 + 1.09995 = 2.04995</code>,
      and if we add the two highest values we have, <code>1.05 + 1.10005 = 2.15005</code>, so the
      range of the result of the addition implied by the precision of its operands is
      <code>2.04995</code> to <code>2.15005</code>.
    </p>
    <p>
      The result given by BigDecimal of <code>2.1000</code> however, indicates that the value is in
      the range <code>2.09995</code> to <code>2.10005</code> and therefore the precision implied by
      its trailing zeros may be misleading.
    </p>
    <p>
      In the second example, the true range is <code>4.122744</code> to <code>4.157256</code> yet
      the BigDecimal answer of <code>4.1400000</code> indicates a range of <code>4.13999995</code>
      to  <code>4.14000005</code>. Again, the precision implied by the trailing zeros may be
      misleading.
    </p>
    <p>
      This library, like binary floating point and most calculators, does not retain trailing
      fractional zeros. Instead, the <code>toExponential</code>, <code>toFixed</code> and
      <code>toPrecision</code> methods enable trailing zeros to be added if and when required.<br />
    </p>
  </div>

</body>
</html>
The MIT License (MIT)
=====================

Copyright Â© `<2022>` `Michael Mclaughlin`

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the â€œSoftwareâ€), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED â€œAS ISâ€, WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

{
  "name": "bignumber.js",
  "description": "A library for arbitrary-precision decimal and non-decimal arithmetic",
  "version": "9.1.1",
  "repository": {
    "type": "git",
    "url": "https://github.com/MikeMcl/bignumber.js.git"
  },
  "main": "bignumber",
  "module": "bignumber.mjs",
  "browser": "bignumber.js",
  "types": "bignumber.d.ts",
  "exports": {
    ".": {
      "types": "./bignumber.d.ts",
      "require": "./bignumber.js",
      "import": "./bignumber.mjs",
      "browser": "./bignumber.js"
    },
    "./bignumber.mjs": "./bignumber.mjs",
    "./bignumber.js": "./bignumber.js",
    "./package.json": "./package.json"
  },
  "author": {
    "name": "Michael Mclaughlin",
    "email": "M8ch88l@gmail.com"
  },
  "engines": {
    "node": "*"
  },
  "license": "MIT",
  "dependencies": {}
}/**
 * Module dependencies.
 */

var fs = require('fs'),
  path = require('path'),
  fileURLToPath = require('file-uri-to-path'),
  join = path.join,
  dirname = path.dirname,
  exists =
    (fs.accessSync &&
      function(path) {
        try {
          fs.accessSync(path);
        } catch (e) {
          return false;
        }
        return true;
      }) ||
    fs.existsSync ||
    path.existsSync,
  defaults = {
    arrow: process.env.NODE_BINDINGS_ARROW || ' â†’ ',
    compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled',
    platform: process.platform,
    arch: process.arch,
    nodePreGyp:
      'node-v' +
      process.versions.modules +
      '-' +
      process.platform +
      '-' +
      process.arch,
    version: process.versions.node,
    bindings: 'bindings.node',
    try: [
      // node-gyp's linked version in the "build" dir
      ['module_root', 'build', 'bindings'],
      // node-waf and gyp_addon (a.k.a node-gyp)
      ['module_root', 'build', 'Debug', 'bindings'],
      ['module_root', 'build', 'Release', 'bindings'],
      // Debug files, for development (legacy behavior, remove for node v0.9)
      ['module_root', 'out', 'Debug', 'bindings'],
      ['module_root', 'Debug', 'bindings'],
      // Release files, but manually compiled (legacy behavior, remove for node v0.9)
      ['module_root', 'out', 'Release', 'bindings'],
      ['module_root', 'Release', 'bindings'],
      // Legacy from node-waf, node <= 0.4.x
      ['module_root', 'build', 'default', 'bindings'],
      // Production "Release" buildtype binary (meh...)
      ['module_root', 'compiled', 'version', 'platform', 'arch', 'bindings'],
      // node-qbs builds
      ['module_root', 'addon-build', 'release', 'install-root', 'bindings'],
      ['module_root', 'addon-build', 'debug', 'install-root', 'bindings'],
      ['module_root', 'addon-build', 'default', 'install-root', 'bindings'],
      // node-pre-gyp path ./lib/binding/{node_abi}-{platform}-{arch}
      ['module_root', 'lib', 'binding', 'nodePreGyp', 'bindings']
    ]
  };

/**
 * The main `bindings()` function loads the compiled bindings for a given module.
 * It uses V8's Error API to determine the parent filename that this function is
 * being invoked from, which is then used to find the root directory.
 */

function bindings(opts) {
  // Argument surgery
  if (typeof opts == 'string') {
    opts = { bindings: opts };
  } else if (!opts) {
    opts = {};
  }

  // maps `defaults` onto `opts` object
  Object.keys(defaults).map(function(i) {
    if (!(i in opts)) opts[i] = defaults[i];
  });

  // Get the module root
  if (!opts.module_root) {
    opts.module_root = exports.getRoot(exports.getFileName());
  }

  // Ensure the given bindings name ends with .node
  if (path.extname(opts.bindings) != '.node') {
    opts.bindings += '.node';
  }

  // https://github.com/webpack/webpack/issues/4175#issuecomment-342931035
  var requireFunc =
    typeof __webpack_require__ === 'function'
      ? __non_webpack_require__
      : require;

  var tries = [],
    i = 0,
    l = opts.try.length,
    n,
    b,
    err;

  for (; i < l; i++) {
    n = join.apply(
      null,
      opts.try[i].map(function(p) {
        return opts[p] || p;
      })
    );
    tries.push(n);
    try {
      b = opts.path ? requireFunc.resolve(n) : requireFunc(n);
      if (!opts.path) {
        b.path = n;
      }
      return b;
    } catch (e) {
      if (e.code !== 'MODULE_NOT_FOUND' &&
          e.code !== 'QUALIFIED_PATH_RESOLUTION_FAILED' &&
          !/not find/i.test(e.message)) {
        throw e;
      }
    }
  }

  err = new Error(
    'Could not locate the bindings file. Tried:\n' +
      tries
        .map(function(a) {
          return opts.arrow + a;
        })
        .join('\n')
  );
  err.tries = tries;
  throw err;
}
module.exports = exports = bindings;

/**
 * Gets the filename of the JavaScript file that invokes this function.
 * Used to help find the root directory of a module.
 * Optionally accepts an filename argument to skip when searching for the invoking filename
 */

exports.getFileName = function getFileName(calling_file) {
  var origPST = Error.prepareStackTrace,
    origSTL = Error.stackTraceLimit,
    dummy = {},
    fileName;

  Error.stackTraceLimit = 10;

  Error.prepareStackTrace = function(e, st) {
    for (var i = 0, l = st.length; i < l; i++) {
      fileName = st[i].getFileName();
      if (fileName !== __filename) {
        if (calling_file) {
          if (fileName !== calling_file) {
            return;
          }
        } else {
          return;
        }
      }
    }
  };

  // run the 'prepareStackTrace' function above
  Error.captureStackTrace(dummy);
  dummy.stack;

  // cleanup
  Error.prepareStackTrace = origPST;
  Error.stackTraceLimit = origSTL;

  // handle filename that starts with "file://"
  var fileSchema = 'file://';
  if (fileName.indexOf(fileSchema) === 0) {
    fileName = fileURLToPath(fileName);
  }

  return fileName;
};

/**
 * Gets the root directory of a module, given an arbitrary filename
 * somewhere in the module tree. The "root directory" is the directory
 * containing the `package.json` file.
 *
 *   In:  /home/nate/node-native-module/lib/index.js
 *   Out: /home/nate/node-native-module
 */

exports.getRoot = function getRoot(file) {
  var dir = dirname(file),
    prev;
  while (true) {
    if (dir === '.') {
      // Avoids an infinite loop in rare cases, like the REPL
      dir = process.cwd();
    }
    if (
      exists(join(dir, 'package.json')) ||
      exists(join(dir, 'node_modules'))
    ) {
      // Found the 'package.json' file or 'node_modules' dir; we're done
      return dir;
    }
    if (prev === dir) {
      // Got to the top
      throw new Error(
        'Could not find module root given file: "' +
          file +
          '". Do you have a `package.json` file? '
      );
    }
    // Try the parent dir next
    prev = dir;
    dir = join(dir, '..');
  }
};
(The MIT License)

Copyright (c) 2012 Nathan Rajlich &lt;nathan@tootallnate.net&gt;

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "bindings",
  "description": "Helper module for loading your native module's .node file",
  "version": "1.5.0",
  "author": "Nathan Rajlich <nathan@tootallnate.net> (http://tootallnate.net)",
  "repository": {
    "type": "git",
    "url": "git://github.com/TooTallNate/node-bindings.git"
  },
  "main": "./bindings.js",
  "homepage": "https://github.com/TooTallNate/node-bindings",
  "license": "MIT",
  "dependencies": {
    "file-uri-to-path": "1.0.0"
  }
}'use strict'

const DuplexStream = require('readable-stream').Duplex
const inherits = require('inherits')
const BufferList = require('./BufferList')

function BufferListStream (callback) {
  if (!(this instanceof BufferListStream)) {
    return new BufferListStream(callback)
  }

  if (typeof callback === 'function') {
    this._callback = callback

    const piper = function piper (err) {
      if (this._callback) {
        this._callback(err)
        this._callback = null
      }
    }.bind(this)

    this.on('pipe', function onPipe (src) {
      src.on('error', piper)
    })
    this.on('unpipe', function onUnpipe (src) {
      src.removeListener('error', piper)
    })

    callback = null
  }

  BufferList._init.call(this, callback)
  DuplexStream.call(this)
}

inherits(BufferListStream, DuplexStream)
Object.assign(BufferListStream.prototype, BufferList.prototype)

BufferListStream.prototype._new = function _new (callback) {
  return new BufferListStream(callback)
}

BufferListStream.prototype._write = function _write (buf, encoding, callback) {
  this._appendBuffer(buf)

  if (typeof callback === 'function') {
    callback()
  }
}

BufferListStream.prototype._read = function _read (size) {
  if (!this.length) {
    return this.push(null)
  }

  size = Math.min(size, this.length)
  this.push(this.slice(0, size))
  this.consume(size)
}

BufferListStream.prototype.end = function end (chunk) {
  DuplexStream.prototype.end.call(this, chunk)

  if (this._callback) {
    this._callback(null, this.slice())
    this._callback = null
  }
}

BufferListStream.prototype._destroy = function _destroy (err, cb) {
  this._bufs.length = 0
  this.length = 0
  cb(err)
}

BufferListStream.prototype._isBufferList = function _isBufferList (b) {
  return b instanceof BufferListStream || b instanceof BufferList || BufferListStream.isBufferList(b)
}

BufferListStream.isBufferList = BufferList.isBufferList

module.exports = BufferListStream
module.exports.BufferListStream = BufferListStream
module.exports.BufferList = BufferList
'use strict'

const { Buffer } = require('buffer')
const symbol = Symbol.for('BufferList')

function BufferList (buf) {
  if (!(this instanceof BufferList)) {
    return new BufferList(buf)
  }

  BufferList._init.call(this, buf)
}

BufferList._init = function _init (buf) {
  Object.defineProperty(this, symbol, { value: true })

  this._bufs = []
  this.length = 0

  if (buf) {
    this.append(buf)
  }
}

BufferList.prototype._new = function _new (buf) {
  return new BufferList(buf)
}

BufferList.prototype._offset = function _offset (offset) {
  if (offset === 0) {
    return [0, 0]
  }

  let tot = 0

  for (let i = 0; i < this._bufs.length; i++) {
    const _t = tot + this._bufs[i].length
    if (offset < _t || i === this._bufs.length - 1) {
      return [i, offset - tot]
    }
    tot = _t
  }
}

BufferList.prototype._reverseOffset = function (blOffset) {
  const bufferId = blOffset[0]
  let offset = blOffset[1]

  for (let i = 0; i < bufferId; i++) {
    offset += this._bufs[i].length
  }

  return offset
}

BufferList.prototype.get = function get (index) {
  if (index > this.length || index < 0) {
    return undefined
  }

  const offset = this._offset(index)

  return this._bufs[offset[0]][offset[1]]
}

BufferList.prototype.slice = function slice (start, end) {
  if (typeof start === 'number' && start < 0) {
    start += this.length
  }

  if (typeof end === 'number' && end < 0) {
    end += this.length
  }

  return this.copy(null, 0, start, end)
}

BufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {
  if (typeof srcStart !== 'number' || srcStart < 0) {
    srcStart = 0
  }

  if (typeof srcEnd !== 'number' || srcEnd > this.length) {
    srcEnd = this.length
  }

  if (srcStart >= this.length) {
    return dst || Buffer.alloc(0)
  }

  if (srcEnd <= 0) {
    return dst || Buffer.alloc(0)
  }

  const copy = !!dst
  const off = this._offset(srcStart)
  const len = srcEnd - srcStart
  let bytes = len
  let bufoff = (copy && dstStart) || 0
  let start = off[1]

  // copy/slice everything
  if (srcStart === 0 && srcEnd === this.length) {
    if (!copy) {
      // slice, but full concat if multiple buffers
      return this._bufs.length === 1
        ? this._bufs[0]
        : Buffer.concat(this._bufs, this.length)
    }

    // copy, need to copy individual buffers
    for (let i = 0; i < this._bufs.length; i++) {
      this._bufs[i].copy(dst, bufoff)
      bufoff += this._bufs[i].length
    }

    return dst
  }

  // easy, cheap case where it's a subset of one of the buffers
  if (bytes <= this._bufs[off[0]].length - start) {
    return copy
      ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)
      : this._bufs[off[0]].slice(start, start + bytes)
  }

  if (!copy) {
    // a slice, we need something to copy in to
    dst = Buffer.allocUnsafe(len)
  }

  for (let i = off[0]; i < this._bufs.length; i++) {
    const l = this._bufs[i].length - start

    if (bytes > l) {
      this._bufs[i].copy(dst, bufoff, start)
      bufoff += l
    } else {
      this._bufs[i].copy(dst, bufoff, start, start + bytes)
      bufoff += l
      break
    }

    bytes -= l

    if (start) {
      start = 0
    }
  }

  // safeguard so that we don't return uninitialized memory
  if (dst.length > bufoff) return dst.slice(0, bufoff)

  return dst
}

BufferList.prototype.shallowSlice = function shallowSlice (start, end) {
  start = start || 0
  end = typeof end !== 'number' ? this.length : end

  if (start < 0) {
    start += this.length
  }

  if (end < 0) {
    end += this.length
  }

  if (start === end) {
    return this._new()
  }

  const startOffset = this._offset(start)
  const endOffset = this._offset(end)
  const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)

  if (endOffset[1] === 0) {
    buffers.pop()
  } else {
    buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1])
  }

  if (startOffset[1] !== 0) {
    buffers[0] = buffers[0].slice(startOffset[1])
  }

  return this._new(buffers)
}

BufferList.prototype.toString = function toString (encoding, start, end) {
  return this.slice(start, end).toString(encoding)
}

BufferList.prototype.consume = function consume (bytes) {
  // first, normalize the argument, in accordance with how Buffer does it
  bytes = Math.trunc(bytes)
  // do nothing if not a positive number
  if (Number.isNaN(bytes) || bytes <= 0) return this

  while (this._bufs.length) {
    if (bytes >= this._bufs[0].length) {
      bytes -= this._bufs[0].length
      this.length -= this._bufs[0].length
      this._bufs.shift()
    } else {
      this._bufs[0] = this._bufs[0].slice(bytes)
      this.length -= bytes
      break
    }
  }

  return this
}

BufferList.prototype.duplicate = function duplicate () {
  const copy = this._new()

  for (let i = 0; i < this._bufs.length; i++) {
    copy.append(this._bufs[i])
  }

  return copy
}

BufferList.prototype.append = function append (buf) {
  if (buf == null) {
    return this
  }

  if (buf.buffer) {
    // append a view of the underlying ArrayBuffer
    this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength))
  } else if (Array.isArray(buf)) {
    for (let i = 0; i < buf.length; i++) {
      this.append(buf[i])
    }
  } else if (this._isBufferList(buf)) {
    // unwrap argument into individual BufferLists
    for (let i = 0; i < buf._bufs.length; i++) {
      this.append(buf._bufs[i])
    }
  } else {
    // coerce number arguments to strings, since Buffer(number) does
    // uninitialized memory allocation
    if (typeof buf === 'number') {
      buf = buf.toString()
    }

    this._appendBuffer(Buffer.from(buf))
  }

  return this
}

BufferList.prototype._appendBuffer = function appendBuffer (buf) {
  this._bufs.push(buf)
  this.length += buf.length
}

BufferList.prototype.indexOf = function (search, offset, encoding) {
  if (encoding === undefined && typeof offset === 'string') {
    encoding = offset
    offset = undefined
  }

  if (typeof search === 'function' || Array.isArray(search)) {
    throw new TypeError('The "value" argument must be one of type string, Buffer, BufferList, or Uint8Array.')
  } else if (typeof search === 'number') {
    search = Buffer.from([search])
  } else if (typeof search === 'string') {
    search = Buffer.from(search, encoding)
  } else if (this._isBufferList(search)) {
    search = search.slice()
  } else if (Array.isArray(search.buffer)) {
    search = Buffer.from(search.buffer, search.byteOffset, search.byteLength)
  } else if (!Buffer.isBuffer(search)) {
    search = Buffer.from(search)
  }

  offset = Number(offset || 0)

  if (isNaN(offset)) {
    offset = 0
  }

  if (offset < 0) {
    offset = this.length + offset
  }

  if (offset < 0) {
    offset = 0
  }

  if (search.length === 0) {
    return offset > this.length ? this.length : offset
  }

  const blOffset = this._offset(offset)
  let blIndex = blOffset[0] // index of which internal buffer we're working on
  let buffOffset = blOffset[1] // offset of the internal buffer we're working on

  // scan over each buffer
  for (; blIndex < this._bufs.length; blIndex++) {
    const buff = this._bufs[blIndex]

    while (buffOffset < buff.length) {
      const availableWindow = buff.length - buffOffset

      if (availableWindow >= search.length) {
        const nativeSearchResult = buff.indexOf(search, buffOffset)

        if (nativeSearchResult !== -1) {
          return this._reverseOffset([blIndex, nativeSearchResult])
        }

        buffOffset = buff.length - search.length + 1 // end of native search window
      } else {
        const revOffset = this._reverseOffset([blIndex, buffOffset])

        if (this._match(revOffset, search)) {
          return revOffset
        }

        buffOffset++
      }
    }

    buffOffset = 0
  }

  return -1
}

BufferList.prototype._match = function (offset, search) {
  if (this.length - offset < search.length) {
    return false
  }

  for (let searchOffset = 0; searchOffset < search.length; searchOffset++) {
    if (this.get(offset + searchOffset) !== search[searchOffset]) {
      return false
    }
  }
  return true
}

;(function () {
  const methods = {
    readDoubleBE: 8,
    readDoubleLE: 8,
    readFloatBE: 4,
    readFloatLE: 4,
    readInt32BE: 4,
    readInt32LE: 4,
    readUInt32BE: 4,
    readUInt32LE: 4,
    readInt16BE: 2,
    readInt16LE: 2,
    readUInt16BE: 2,
    readUInt16LE: 2,
    readInt8: 1,
    readUInt8: 1,
    readIntBE: null,
    readIntLE: null,
    readUIntBE: null,
    readUIntLE: null
  }

  for (const m in methods) {
    (function (m) {
      if (methods[m] === null) {
        BufferList.prototype[m] = function (offset, byteLength) {
          return this.slice(offset, offset + byteLength)[m](0, byteLength)
        }
      } else {
        BufferList.prototype[m] = function (offset = 0) {
          return this.slice(offset, offset + methods[m])[m](0)
        }
      }
    }(m))
  }
}())

// Used internally by the class and also as an indicator of this object being
// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser
// environment because there could be multiple different copies of the
// BufferList class and some `BufferList`s might be `BufferList`s.
BufferList.prototype._isBufferList = function _isBufferList (b) {
  return b instanceof BufferList || BufferList.isBufferList(b)
}

BufferList.isBufferList = function isBufferList (b) {
  return b != null && b[symbol]
}

module.exports = BufferList
The MIT License (MIT)
=====================

Copyright (c) 2013-2019 bl contributors
----------------------------------

*bl contributors listed at <https://github.com/rvagg/bl#contributors>*

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

* (a) The contribution was created in whole or in part by me and I
  have the right to submit it under the open source license
  indicated in the file; or

* (b) The contribution is based upon previous work that, to the best
  of my knowledge, is covered under an appropriate open source
  license and I have the right under that license to submit that
  work with modifications, whether created in whole or in part
  by me, under the same open source license (unless I am
  permitted to submit under a different license), as indicated
  in the file; or

* (c) The contribution was provided directly to me by some other
  person who certified (a), (b) or (c) and I have not modified
  it.

* (d) I understand and agree that this project and the contribution
  are public and that a record of the contribution (including all
  personal information I submit with it, including my sign-off) is
  maintained indefinitely and may be redistributed consistent with
  this project or the open source license(s) involved.

## Moderation Policy

The [Node.js Moderation Policy] applies to this WG.

## Code of Conduct

The [Node.js Code of Conduct][] applies to this WG.

[Node.js Code of Conduct]:
https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md
[Node.js Moderation Policy]:
https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md
'use strict';

function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }

var codes = {};

function createErrorType(code, message, Base) {
  if (!Base) {
    Base = Error;
  }

  function getMessage(arg1, arg2, arg3) {
    if (typeof message === 'string') {
      return message;
    } else {
      return message(arg1, arg2, arg3);
    }
  }

  var NodeError =
  /*#__PURE__*/
  function (_Base) {
    _inheritsLoose(NodeError, _Base);

    function NodeError(arg1, arg2, arg3) {
      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;
    }

    return NodeError;
  }(Base);

  NodeError.prototype.name = Base.name;
  NodeError.prototype.code = code;
  codes[code] = NodeError;
} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js


function oneOf(expected, thing) {
  if (Array.isArray(expected)) {
    var len = expected.length;
    expected = expected.map(function (i) {
      return String(i);
    });

    if (len > 2) {
      return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1];
    } else if (len === 2) {
      return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]);
    } else {
      return "of ".concat(thing, " ").concat(expected[0]);
    }
  } else {
    return "of ".concat(thing, " ").concat(String(expected));
  }
} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith


function startsWith(str, search, pos) {
  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith


function endsWith(str, search, this_len) {
  if (this_len === undefined || this_len > str.length) {
    this_len = str.length;
  }

  return str.substring(this_len - search.length, this_len) === search;
} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes


function includes(str, search, start) {
  if (typeof start !== 'number') {
    start = 0;
  }

  if (start + search.length > str.length) {
    return false;
  } else {
    return str.indexOf(search, start) !== -1;
  }
}

createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
  return 'The value "' + value + '" is invalid for option "' + name + '"';
}, TypeError);
createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
  // determiner: 'must be' or 'must not be'
  var determiner;

  if (typeof expected === 'string' && startsWith(expected, 'not ')) {
    determiner = 'must not be';
    expected = expected.replace(/^not /, '');
  } else {
    determiner = 'must be';
  }

  var msg;

  if (endsWith(name, ' argument')) {
    // For cases like 'first argument'
    msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
  } else {
    var type = includes(name, '.') ? 'property' : 'argument';
    msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
  }

  msg += ". Received type ".concat(typeof actual);
  return msg;
}, TypeError);
createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
  return 'The ' + name + ' method is not implemented';
});
createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
createErrorType('ERR_STREAM_DESTROYED', function (name) {
  return 'Cannot call ' + name + ' after a stream was destroyed';
});
createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
  return 'Unknown encoding: ' + arg;
}, TypeError);
createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');
module.exports.codes = codes;
'use strict';

const codes = {};

function createErrorType(code, message, Base) {
  if (!Base) {
    Base = Error
  }

  function getMessage (arg1, arg2, arg3) {
    if (typeof message === 'string') {
      return message
    } else {
      return message(arg1, arg2, arg3)
    }
  }

  class NodeError extends Base {
    constructor (arg1, arg2, arg3) {
      super(getMessage(arg1, arg2, arg3));
    }
  }

  NodeError.prototype.name = Base.name;
  NodeError.prototype.code = code;

  codes[code] = NodeError;
}

// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js
function oneOf(expected, thing) {
  if (Array.isArray(expected)) {
    const len = expected.length;
    expected = expected.map((i) => String(i));
    if (len > 2) {
      return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +
             expected[len - 1];
    } else if (len === 2) {
      return `one of ${thing} ${expected[0]} or ${expected[1]}`;
    } else {
      return `of ${thing} ${expected[0]}`;
    }
  } else {
    return `of ${thing} ${String(expected)}`;
  }
}

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
function startsWith(str, search, pos) {
	return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
}

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
function endsWith(str, search, this_len) {
	if (this_len === undefined || this_len > str.length) {
		this_len = str.length;
	}
	return str.substring(this_len - search.length, this_len) === search;
}

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
function includes(str, search, start) {
  if (typeof start !== 'number') {
    start = 0;
  }

  if (start + search.length > str.length) {
    return false;
  } else {
    return str.indexOf(search, start) !== -1;
  }
}

createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
  return 'The value "' + value + '" is invalid for option "' + name + '"'
}, TypeError);
createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
  // determiner: 'must be' or 'must not be'
  let determiner;
  if (typeof expected === 'string' && startsWith(expected, 'not ')) {
    determiner = 'must not be';
    expected = expected.replace(/^not /, '');
  } else {
    determiner = 'must be';
  }

  let msg;
  if (endsWith(name, ' argument')) {
    // For cases like 'first argument'
    msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;
  } else {
    const type = includes(name, '.') ? 'property' : 'argument';
    msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`;
  }

  msg += `. Received type ${typeof actual}`;
  return msg;
}, TypeError);
createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
  return 'The ' + name + ' method is not implemented'
});
createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
createErrorType('ERR_STREAM_DESTROYED', function (name) {
  return 'Cannot call ' + name + ' after a stream was destroyed';
});
createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
  return 'Unknown encoding: ' + arg
}, TypeError);
createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');

module.exports.codes = codes;
'use strict'

var experimentalWarnings = new Set();

function emitExperimentalWarning(feature) {
  if (experimentalWarnings.has(feature)) return;
  var msg = feature + ' is an experimental feature. This feature could ' +
       'change at any time';
  experimentalWarnings.add(feature);
  process.emitWarning(msg, 'ExperimentalWarning');
}

function noop() {}

module.exports.emitExperimentalWarning = process.emitWarning
  ? emitExperimentalWarning
  : noop;
### Streams Working Group

The Node.js Streams is jointly governed by a Working Group
(WG)
that is responsible for high-level guidance of the project.

The WG has final authority over this project including:

* Technical direction
* Project governance and process (including this policy)
* Contribution policy
* GitHub repository hosting
* Conduct guidelines
* Maintaining the list of additional Collaborators

For the current list of WG members, see the project
[README.md](./README.md#current-project-team-members).

### Collaborators

The readable-stream GitHub repository is
maintained by the WG and additional Collaborators who are added by the
WG on an ongoing basis.

Individuals making significant and valuable contributions are made
Collaborators and given commit-access to the project. These
individuals are identified by the WG and their addition as
Collaborators is discussed during the WG meeting.

_Note:_ If you make a significant contribution and are not considered
for commit-access log an issue or contact a WG member directly and it
will be brought up in the next WG meeting.

Modifications of the contents of the readable-stream repository are
made on
a collaborative basis. Anybody with a GitHub account may propose a
modification via pull request and it will be considered by the project
Collaborators. All pull requests must be reviewed and accepted by a
Collaborator with sufficient expertise who is able to take full
responsibility for the change. In the case of pull requests proposed
by an existing Collaborator, an additional Collaborator is required
for sign-off. Consensus should be sought if additional Collaborators
participate and there is disagreement around a particular
modification. See _Consensus Seeking Process_ below for further detail
on the consensus model used for governance.

Collaborators may opt to elevate significant or controversial
modifications, or modifications that have not found consensus to the
WG for discussion by assigning the ***WG-agenda*** tag to a pull
request or issue. The WG should serve as the final arbiter where
required.

For the current list of Collaborators, see the project
[README.md](./README.md#members).

### WG Membership

WG seats are not time-limited.  There is no fixed size of the WG.
However, the expected target is between 6 and 12, to ensure adequate
coverage of important areas of expertise, balanced with the ability to
make decisions efficiently.

There is no specific set of requirements or qualifications for WG
membership beyond these rules.

The WG may add additional members to the WG by unanimous consensus.

A WG member may be removed from the WG by voluntary resignation, or by
unanimous consensus of all other WG members.

Changes to WG membership should be posted in the agenda, and may be
suggested as any other agenda item (see "WG Meetings" below).

If an addition or removal is proposed during a meeting, and the full
WG is not in attendance to participate, then the addition or removal
is added to the agenda for the subsequent meeting.  This is to ensure
that all members are given the opportunity to participate in all
membership decisions.  If a WG member is unable to attend a meeting
where a planned membership decision is being made, then their consent
is assumed.

No more than 1/3 of the WG members may be affiliated with the same
employer.  If removal or resignation of a WG member, or a change of
employment by a WG member, creates a situation where more than 1/3 of
the WG membership shares an employer, then the situation must be
immediately remedied by the resignation or removal of one or more WG
members affiliated with the over-represented employer(s).

### WG Meetings

The WG meets occasionally on a Google Hangout On Air. A designated moderator
approved by the WG runs the meeting. Each meeting should be
published to YouTube.

Items are added to the WG agenda that are considered contentious or
are modifications of governance, contribution policy, WG membership,
or release process.

The intention of the agenda is not to approve or review all patches;
that should happen continuously on GitHub and be handled by the larger
group of Collaborators.

Any community member or contributor can ask that something be added to
the next meeting's agenda by logging a GitHub Issue. Any Collaborator,
WG member or the moderator can add the item to the agenda by adding
the ***WG-agenda*** tag to the issue.

Prior to each WG meeting the moderator will share the Agenda with
members of the WG. WG members can add any items they like to the
agenda at the beginning of each meeting. The moderator and the WG
cannot veto or remove items.

The WG may invite persons or representatives from certain projects to
participate in a non-voting capacity.

The moderator is responsible for summarizing the discussion of each
agenda item and sends it as a pull request after the meeting.

### Consensus Seeking Process

The WG follows a
[Consensus
Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making)
decision-making model.

When an agenda item has appeared to reach a consensus the moderator
will ask "Does anyone object?" as a final call for dissent from the
consensus.

If an agenda item cannot reach a consensus a WG member can call for
either a closing vote or a vote to table the issue to the next
meeting. The call for a vote must be seconded by a majority of the WG
or else the discussion will continue. Simple majority wins.

Note that changes to WG membership require a majority consensus.  See
"WG Membership" above.
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a duplex stream is just a stream that is both readable and writable.
// Since JS doesn't have multiple prototypal inheritance, this class
// prototypally inherits from Readable, and then parasitically from
// Writable.
'use strict';
/*<replacement>*/

var objectKeys = Object.keys || function (obj) {
  var keys = [];

  for (var key in obj) {
    keys.push(key);
  }

  return keys;
};
/*</replacement>*/


module.exports = Duplex;

var Readable = require('./_stream_readable');

var Writable = require('./_stream_writable');

require('inherits')(Duplex, Readable);

{
  // Allow the keys array to be GC'ed.
  var keys = objectKeys(Writable.prototype);

  for (var v = 0; v < keys.length; v++) {
    var method = keys[v];
    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
  }
}

function Duplex(options) {
  if (!(this instanceof Duplex)) return new Duplex(options);
  Readable.call(this, options);
  Writable.call(this, options);
  this.allowHalfOpen = true;

  if (options) {
    if (options.readable === false) this.readable = false;
    if (options.writable === false) this.writable = false;

    if (options.allowHalfOpen === false) {
      this.allowHalfOpen = false;
      this.once('end', onend);
    }
  }
}

Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState.highWaterMark;
  }
});
Object.defineProperty(Duplex.prototype, 'writableBuffer', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState && this._writableState.getBuffer();
  }
});
Object.defineProperty(Duplex.prototype, 'writableLength', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState.length;
  }
}); // the no-half-open enforcer

function onend() {
  // If the writable side ended, then we're ok.
  if (this._writableState.ended) return; // no more data can be written.
  // But allow more writes to happen in this tick.

  process.nextTick(onEndNT, this);
}

function onEndNT(self) {
  self.end();
}

Object.defineProperty(Duplex.prototype, 'destroyed', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    if (this._readableState === undefined || this._writableState === undefined) {
      return false;
    }

    return this._readableState.destroyed && this._writableState.destroyed;
  },
  set: function set(value) {
    // we ignore the value if the stream
    // has not been initialized yet
    if (this._readableState === undefined || this._writableState === undefined) {
      return;
    } // backward compatibility, the user is explicitly
    // managing destroyed


    this._readableState.destroyed = value;
    this._writableState.destroyed = value;
  }
});// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a passthrough stream.
// basically just the most minimal sort of Transform stream.
// Every written chunk gets output as-is.
'use strict';

module.exports = PassThrough;

var Transform = require('./_stream_transform');

require('inherits')(PassThrough, Transform);

function PassThrough(options) {
  if (!(this instanceof PassThrough)) return new PassThrough(options);
  Transform.call(this, options);
}

PassThrough.prototype._transform = function (chunk, encoding, cb) {
  cb(null, chunk);
};// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict';

module.exports = Readable;
/*<replacement>*/

var Duplex;
/*</replacement>*/

Readable.ReadableState = ReadableState;
/*<replacement>*/

var EE = require('events').EventEmitter;

var EElistenerCount = function EElistenerCount(emitter, type) {
  return emitter.listeners(type).length;
};
/*</replacement>*/

/*<replacement>*/


var Stream = require('./internal/streams/stream');
/*</replacement>*/


var Buffer = require('buffer').Buffer;

var OurUint8Array = global.Uint8Array || function () {};

function _uint8ArrayToBuffer(chunk) {
  return Buffer.from(chunk);
}

function _isUint8Array(obj) {
  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
}
/*<replacement>*/


var debugUtil = require('util');

var debug;

if (debugUtil && debugUtil.debuglog) {
  debug = debugUtil.debuglog('stream');
} else {
  debug = function debug() {};
}
/*</replacement>*/


var BufferList = require('./internal/streams/buffer_list');

var destroyImpl = require('./internal/streams/destroy');

var _require = require('./internal/streams/state'),
    getHighWaterMark = _require.getHighWaterMark;

var _require$codes = require('../errors').codes,
    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
    ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
    ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.


var StringDecoder;
var createReadableStreamAsyncIterator;
var from;

require('inherits')(Readable, Stream);

var errorOrDestroy = destroyImpl.errorOrDestroy;
var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];

function prependListener(emitter, event, fn) {
  // Sadly this is not cacheable as some libraries bundle their own
  // event emitter implementation with them.
  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any
  // userland ones.  NEVER DO THIS. This is here only because this code needs
  // to continue to work with older versions of Node.js that do not include
  // the prependListener() method. The goal is to eventually remove this hack.

  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
}

function ReadableState(options, stream, isDuplex) {
  Duplex = Duplex || require('./_stream_duplex');
  options = options || {}; // Duplex streams are both readable and writable, but share
  // the same options object.
  // However, some cases require setting options to different
  // values for the readable and the writable sides of the duplex stream.
  // These options can be provided separately as readableXXX and writableXXX.

  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to
  // make all the buffer merging and length checks go away

  this.objectMode = !!options.objectMode;
  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer
  // Note: 0 is a valid value, means "don't call _read preemptively ever"

  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the
  // linked list can remove elements from the beginning faster than
  // array.shift()

  this.buffer = new BufferList();
  this.length = 0;
  this.pipes = null;
  this.pipesCount = 0;
  this.flowing = null;
  this.ended = false;
  this.endEmitted = false;
  this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted
  // immediately, or on a later tick.  We set this to true at first, because
  // any actions that shouldn't happen until "later" should generally also
  // not happen before the first read call.

  this.sync = true; // whenever we return null, then we set a flag to say
  // that we're awaiting a 'readable' event emission.

  this.needReadable = false;
  this.emittedReadable = false;
  this.readableListening = false;
  this.resumeScheduled = false;
  this.paused = true; // Should close be emitted on destroy. Defaults to true.

  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')

  this.autoDestroy = !!options.autoDestroy; // has it been destroyed

  this.destroyed = false; // Crypto is kind of old and crusty.  Historically, its default string
  // encoding is 'binary' so we have to make this configurable.
  // Everything else in the universe uses 'utf8', though.

  this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s

  this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled

  this.readingMore = false;
  this.decoder = null;
  this.encoding = null;

  if (options.encoding) {
    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
    this.decoder = new StringDecoder(options.encoding);
    this.encoding = options.encoding;
  }
}

function Readable(options) {
  Duplex = Duplex || require('./_stream_duplex');
  if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside
  // the ReadableState constructor, at least with V8 6.5

  var isDuplex = this instanceof Duplex;
  this._readableState = new ReadableState(options, this, isDuplex); // legacy

  this.readable = true;

  if (options) {
    if (typeof options.read === 'function') this._read = options.read;
    if (typeof options.destroy === 'function') this._destroy = options.destroy;
  }

  Stream.call(this);
}

Object.defineProperty(Readable.prototype, 'destroyed', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    if (this._readableState === undefined) {
      return false;
    }

    return this._readableState.destroyed;
  },
  set: function set(value) {
    // we ignore the value if the stream
    // has not been initialized yet
    if (!this._readableState) {
      return;
    } // backward compatibility, the user is explicitly
    // managing destroyed


    this._readableState.destroyed = value;
  }
});
Readable.prototype.destroy = destroyImpl.destroy;
Readable.prototype._undestroy = destroyImpl.undestroy;

Readable.prototype._destroy = function (err, cb) {
  cb(err);
}; // Manually shove something into the read() buffer.
// This returns true if the highWaterMark has not been hit yet,
// similar to how Writable.write() returns true if you should
// write() some more.


Readable.prototype.push = function (chunk, encoding) {
  var state = this._readableState;
  var skipChunkCheck;

  if (!state.objectMode) {
    if (typeof chunk === 'string') {
      encoding = encoding || state.defaultEncoding;

      if (encoding !== state.encoding) {
        chunk = Buffer.from(chunk, encoding);
        encoding = '';
      }

      skipChunkCheck = true;
    }
  } else {
    skipChunkCheck = true;
  }

  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
}; // Unshift should *always* be something directly out of read()


Readable.prototype.unshift = function (chunk) {
  return readableAddChunk(this, chunk, null, true, false);
};

function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
  debug('readableAddChunk', chunk);
  var state = stream._readableState;

  if (chunk === null) {
    state.reading = false;
    onEofChunk(stream, state);
  } else {
    var er;
    if (!skipChunkCheck) er = chunkInvalid(state, chunk);

    if (er) {
      errorOrDestroy(stream, er);
    } else if (state.objectMode || chunk && chunk.length > 0) {
      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
        chunk = _uint8ArrayToBuffer(chunk);
      }

      if (addToFront) {
        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
      } else if (state.ended) {
        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
      } else if (state.destroyed) {
        return false;
      } else {
        state.reading = false;

        if (state.decoder && !encoding) {
          chunk = state.decoder.write(chunk);
          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
        } else {
          addChunk(stream, state, chunk, false);
        }
      }
    } else if (!addToFront) {
      state.reading = false;
      maybeReadMore(stream, state);
    }
  } // We can push more data if we are below the highWaterMark.
  // Also, if we have no data yet, we can stand some more bytes.
  // This is to work around cases where hwm=0, such as the repl.


  return !state.ended && (state.length < state.highWaterMark || state.length === 0);
}

function addChunk(stream, state, chunk, addToFront) {
  if (state.flowing && state.length === 0 && !state.sync) {
    state.awaitDrain = 0;
    stream.emit('data', chunk);
  } else {
    // update the buffer info.
    state.length += state.objectMode ? 1 : chunk.length;
    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
    if (state.needReadable) emitReadable(stream);
  }

  maybeReadMore(stream, state);
}

function chunkInvalid(state, chunk) {
  var er;

  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
  }

  return er;
}

Readable.prototype.isPaused = function () {
  return this._readableState.flowing === false;
}; // backwards compatibility.


Readable.prototype.setEncoding = function (enc) {
  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
  var decoder = new StringDecoder(enc);
  this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8

  this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:

  var p = this._readableState.buffer.head;
  var content = '';

  while (p !== null) {
    content += decoder.write(p.data);
    p = p.next;
  }

  this._readableState.buffer.clear();

  if (content !== '') this._readableState.buffer.push(content);
  this._readableState.length = content.length;
  return this;
}; // Don't raise the hwm > 1GB


var MAX_HWM = 0x40000000;

function computeNewHighWaterMark(n) {
  if (n >= MAX_HWM) {
    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
    n = MAX_HWM;
  } else {
    // Get the next highest power of 2 to prevent increasing hwm excessively in
    // tiny amounts
    n--;
    n |= n >>> 1;
    n |= n >>> 2;
    n |= n >>> 4;
    n |= n >>> 8;
    n |= n >>> 16;
    n++;
  }

  return n;
} // This function is designed to be inlinable, so please take care when making
// changes to the function body.


function howMuchToRead(n, state) {
  if (n <= 0 || state.length === 0 && state.ended) return 0;
  if (state.objectMode) return 1;

  if (n !== n) {
    // Only flow one buffer at a time
    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
  } // If we're asking for more than the current hwm, then raise the hwm.


  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
  if (n <= state.length) return n; // Don't have enough

  if (!state.ended) {
    state.needReadable = true;
    return 0;
  }

  return state.length;
} // you can override either this method, or the async _read(n) below.


Readable.prototype.read = function (n) {
  debug('read', n);
  n = parseInt(n, 10);
  var state = this._readableState;
  var nOrig = n;
  if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we
  // already have a bunch of data in the buffer, then just trigger
  // the 'readable' event and move on.

  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
    debug('read: emitReadable', state.length, state.ended);
    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
    return null;
  }

  n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.

  if (n === 0 && state.ended) {
    if (state.length === 0) endReadable(this);
    return null;
  } // All the actual chunk generation logic needs to be
  // *below* the call to _read.  The reason is that in certain
  // synthetic stream cases, such as passthrough streams, _read
  // may be a completely synchronous operation which may change
  // the state of the read buffer, providing enough data when
  // before there was *not* enough.
  //
  // So, the steps are:
  // 1. Figure out what the state of things will be after we do
  // a read from the buffer.
  //
  // 2. If that resulting state will trigger a _read, then call _read.
  // Note that this may be asynchronous, or synchronous.  Yes, it is
  // deeply ugly to write APIs this way, but that still doesn't mean
  // that the Readable class should behave improperly, as streams are
  // designed to be sync/async agnostic.
  // Take note if the _read call is sync or async (ie, if the read call
  // has returned yet), so that we know whether or not it's safe to emit
  // 'readable' etc.
  //
  // 3. Actually pull the requested chunks out of the buffer and return.
  // if we need a readable event, then we need to do some reading.


  var doRead = state.needReadable;
  debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some

  if (state.length === 0 || state.length - n < state.highWaterMark) {
    doRead = true;
    debug('length less than watermark', doRead);
  } // however, if we've ended, then there's no point, and if we're already
  // reading, then it's unnecessary.


  if (state.ended || state.reading) {
    doRead = false;
    debug('reading or ended', doRead);
  } else if (doRead) {
    debug('do read');
    state.reading = true;
    state.sync = true; // if the length is currently zero, then we *need* a readable event.

    if (state.length === 0) state.needReadable = true; // call internal read method

    this._read(state.highWaterMark);

    state.sync = false; // If _read pushed data synchronously, then `reading` will be false,
    // and we need to re-evaluate how much data we can return to the user.

    if (!state.reading) n = howMuchToRead(nOrig, state);
  }

  var ret;
  if (n > 0) ret = fromList(n, state);else ret = null;

  if (ret === null) {
    state.needReadable = state.length <= state.highWaterMark;
    n = 0;
  } else {
    state.length -= n;
    state.awaitDrain = 0;
  }

  if (state.length === 0) {
    // If we have nothing in the buffer, then we want to know
    // as soon as we *do* get something into the buffer.
    if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.

    if (nOrig !== n && state.ended) endReadable(this);
  }

  if (ret !== null) this.emit('data', ret);
  return ret;
};

function onEofChunk(stream, state) {
  debug('onEofChunk');
  if (state.ended) return;

  if (state.decoder) {
    var chunk = state.decoder.end();

    if (chunk && chunk.length) {
      state.buffer.push(chunk);
      state.length += state.objectMode ? 1 : chunk.length;
    }
  }

  state.ended = true;

  if (state.sync) {
    // if we are sync, wait until next tick to emit the data.
    // Otherwise we risk emitting data in the flow()
    // the readable code triggers during a read() call
    emitReadable(stream);
  } else {
    // emit 'readable' now to make sure it gets picked up.
    state.needReadable = false;

    if (!state.emittedReadable) {
      state.emittedReadable = true;
      emitReadable_(stream);
    }
  }
} // Don't emit readable right away in sync mode, because this can trigger
// another read() call => stack overflow.  This way, it might trigger
// a nextTick recursion warning, but that's not so bad.


function emitReadable(stream) {
  var state = stream._readableState;
  debug('emitReadable', state.needReadable, state.emittedReadable);
  state.needReadable = false;

  if (!state.emittedReadable) {
    debug('emitReadable', state.flowing);
    state.emittedReadable = true;
    process.nextTick(emitReadable_, stream);
  }
}

function emitReadable_(stream) {
  var state = stream._readableState;
  debug('emitReadable_', state.destroyed, state.length, state.ended);

  if (!state.destroyed && (state.length || state.ended)) {
    stream.emit('readable');
    state.emittedReadable = false;
  } // The stream needs another readable event if
  // 1. It is not flowing, as the flow mechanism will take
  //    care of it.
  // 2. It is not ended.
  // 3. It is below the highWaterMark, so we can schedule
  //    another readable later.


  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
  flow(stream);
} // at this point, the user has presumably seen the 'readable' event,
// and called read() to consume some data.  that may have triggered
// in turn another _read(n) call, in which case reading = true if
// it's in progress.
// However, if we're not ended, or reading, and the length < hwm,
// then go ahead and try to read some more preemptively.


function maybeReadMore(stream, state) {
  if (!state.readingMore) {
    state.readingMore = true;
    process.nextTick(maybeReadMore_, stream, state);
  }
}

function maybeReadMore_(stream, state) {
  // Attempt to read more data if we should.
  //
  // The conditions for reading more data are (one of):
  // - Not enough data buffered (state.length < state.highWaterMark). The loop
  //   is responsible for filling the buffer with enough data if such data
  //   is available. If highWaterMark is 0 and we are not in the flowing mode
  //   we should _not_ attempt to buffer any extra data. We'll get more data
  //   when the stream consumer calls read() instead.
  // - No data in the buffer, and the stream is in flowing mode. In this mode
  //   the loop below is responsible for ensuring read() is called. Failing to
  //   call read here would abort the flow and there's no other mechanism for
  //   continuing the flow if the stream consumer has just subscribed to the
  //   'data' event.
  //
  // In addition to the above conditions to keep reading data, the following
  // conditions prevent the data from being read:
  // - The stream has ended (state.ended).
  // - There is already a pending 'read' operation (state.reading). This is a
  //   case where the the stream has called the implementation defined _read()
  //   method, but they are processing the call asynchronously and have _not_
  //   called push() with new data. In this case we skip performing more
  //   read()s. The execution ends in this method again after the _read() ends
  //   up calling push() with more data.
  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
    var len = state.length;
    debug('maybeReadMore read 0');
    stream.read(0);
    if (len === state.length) // didn't get any data, stop spinning.
      break;
  }

  state.readingMore = false;
} // abstract method.  to be overridden in specific implementation classes.
// call cb(er, data) where data is <= n in length.
// for virtual (non-string, non-buffer) streams, "length" is somewhat
// arbitrary, and perhaps not very meaningful.


Readable.prototype._read = function (n) {
  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
};

Readable.prototype.pipe = function (dest, pipeOpts) {
  var src = this;
  var state = this._readableState;

  switch (state.pipesCount) {
    case 0:
      state.pipes = dest;
      break;

    case 1:
      state.pipes = [state.pipes, dest];
      break;

    default:
      state.pipes.push(dest);
      break;
  }

  state.pipesCount += 1;
  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
  var endFn = doEnd ? onend : unpipe;
  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
  dest.on('unpipe', onunpipe);

  function onunpipe(readable, unpipeInfo) {
    debug('onunpipe');

    if (readable === src) {
      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
        unpipeInfo.hasUnpiped = true;
        cleanup();
      }
    }
  }

  function onend() {
    debug('onend');
    dest.end();
  } // when the dest drains, it reduces the awaitDrain counter
  // on the source.  This would be more elegant with a .once()
  // handler in flow(), but adding and removing repeatedly is
  // too slow.


  var ondrain = pipeOnDrain(src);
  dest.on('drain', ondrain);
  var cleanedUp = false;

  function cleanup() {
    debug('cleanup'); // cleanup event handlers once the pipe is broken

    dest.removeListener('close', onclose);
    dest.removeListener('finish', onfinish);
    dest.removeListener('drain', ondrain);
    dest.removeListener('error', onerror);
    dest.removeListener('unpipe', onunpipe);
    src.removeListener('end', onend);
    src.removeListener('end', unpipe);
    src.removeListener('data', ondata);
    cleanedUp = true; // if the reader is waiting for a drain event from this
    // specific writer, then it would cause it to never start
    // flowing again.
    // So, if this is awaiting a drain, then we just call it now.
    // If we don't know, then assume that we are waiting for one.

    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
  }

  src.on('data', ondata);

  function ondata(chunk) {
    debug('ondata');
    var ret = dest.write(chunk);
    debug('dest.write', ret);

    if (ret === false) {
      // If the user unpiped during `dest.write()`, it is possible
      // to get stuck in a permanently paused state if that write
      // also returned false.
      // => Check whether `dest` is still a piping destination.
      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
        debug('false write response, pause', state.awaitDrain);
        state.awaitDrain++;
      }

      src.pause();
    }
  } // if the dest has an error, then stop piping into it.
  // however, don't suppress the throwing behavior for this.


  function onerror(er) {
    debug('onerror', er);
    unpipe();
    dest.removeListener('error', onerror);
    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
  } // Make sure our error handler is attached before userland ones.


  prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.

  function onclose() {
    dest.removeListener('finish', onfinish);
    unpipe();
  }

  dest.once('close', onclose);

  function onfinish() {
    debug('onfinish');
    dest.removeListener('close', onclose);
    unpipe();
  }

  dest.once('finish', onfinish);

  function unpipe() {
    debug('unpipe');
    src.unpipe(dest);
  } // tell the dest that it's being piped to


  dest.emit('pipe', src); // start the flow if it hasn't been started already.

  if (!state.flowing) {
    debug('pipe resume');
    src.resume();
  }

  return dest;
};

function pipeOnDrain(src) {
  return function pipeOnDrainFunctionResult() {
    var state = src._readableState;
    debug('pipeOnDrain', state.awaitDrain);
    if (state.awaitDrain) state.awaitDrain--;

    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
      state.flowing = true;
      flow(src);
    }
  };
}

Readable.prototype.unpipe = function (dest) {
  var state = this._readableState;
  var unpipeInfo = {
    hasUnpiped: false
  }; // if we're not piping anywhere, then do nothing.

  if (state.pipesCount === 0) return this; // just one destination.  most common case.

  if (state.pipesCount === 1) {
    // passed in one, but it's not the right one.
    if (dest && dest !== state.pipes) return this;
    if (!dest) dest = state.pipes; // got a match.

    state.pipes = null;
    state.pipesCount = 0;
    state.flowing = false;
    if (dest) dest.emit('unpipe', this, unpipeInfo);
    return this;
  } // slow case. multiple pipe destinations.


  if (!dest) {
    // remove all.
    var dests = state.pipes;
    var len = state.pipesCount;
    state.pipes = null;
    state.pipesCount = 0;
    state.flowing = false;

    for (var i = 0; i < len; i++) {
      dests[i].emit('unpipe', this, {
        hasUnpiped: false
      });
    }

    return this;
  } // try to find the right one.


  var index = indexOf(state.pipes, dest);
  if (index === -1) return this;
  state.pipes.splice(index, 1);
  state.pipesCount -= 1;
  if (state.pipesCount === 1) state.pipes = state.pipes[0];
  dest.emit('unpipe', this, unpipeInfo);
  return this;
}; // set up data events if they are asked for
// Ensure readable listeners eventually get something


Readable.prototype.on = function (ev, fn) {
  var res = Stream.prototype.on.call(this, ev, fn);
  var state = this._readableState;

  if (ev === 'data') {
    // update readableListening so that resume() may be a no-op
    // a few lines down. This is needed to support once('readable').
    state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused

    if (state.flowing !== false) this.resume();
  } else if (ev === 'readable') {
    if (!state.endEmitted && !state.readableListening) {
      state.readableListening = state.needReadable = true;
      state.flowing = false;
      state.emittedReadable = false;
      debug('on readable', state.length, state.reading);

      if (state.length) {
        emitReadable(this);
      } else if (!state.reading) {
        process.nextTick(nReadingNextTick, this);
      }
    }
  }

  return res;
};

Readable.prototype.addListener = Readable.prototype.on;

Readable.prototype.removeListener = function (ev, fn) {
  var res = Stream.prototype.removeListener.call(this, ev, fn);

  if (ev === 'readable') {
    // We need to check if there is someone still listening to
    // readable and reset the state. However this needs to happen
    // after readable has been emitted but before I/O (nextTick) to
    // support once('readable', fn) cycles. This means that calling
    // resume within the same tick will have no
    // effect.
    process.nextTick(updateReadableListening, this);
  }

  return res;
};

Readable.prototype.removeAllListeners = function (ev) {
  var res = Stream.prototype.removeAllListeners.apply(this, arguments);

  if (ev === 'readable' || ev === undefined) {
    // We need to check if there is someone still listening to
    // readable and reset the state. However this needs to happen
    // after readable has been emitted but before I/O (nextTick) to
    // support once('readable', fn) cycles. This means that calling
    // resume within the same tick will have no
    // effect.
    process.nextTick(updateReadableListening, this);
  }

  return res;
};

function updateReadableListening(self) {
  var state = self._readableState;
  state.readableListening = self.listenerCount('readable') > 0;

  if (state.resumeScheduled && !state.paused) {
    // flowing needs to be set to true now, otherwise
    // the upcoming resume will not flow.
    state.flowing = true; // crude way to check if we should resume
  } else if (self.listenerCount('data') > 0) {
    self.resume();
  }
}

function nReadingNextTick(self) {
  debug('readable nexttick read 0');
  self.read(0);
} // pause() and resume() are remnants of the legacy readable stream API
// If the user uses them, then switch into old mode.


Readable.prototype.resume = function () {
  var state = this._readableState;

  if (!state.flowing) {
    debug('resume'); // we flow only if there is no one listening
    // for readable, but we still have to call
    // resume()

    state.flowing = !state.readableListening;
    resume(this, state);
  }

  state.paused = false;
  return this;
};

function resume(stream, state) {
  if (!state.resumeScheduled) {
    state.resumeScheduled = true;
    process.nextTick(resume_, stream, state);
  }
}

function resume_(stream, state) {
  debug('resume', state.reading);

  if (!state.reading) {
    stream.read(0);
  }

  state.resumeScheduled = false;
  stream.emit('resume');
  flow(stream);
  if (state.flowing && !state.reading) stream.read(0);
}

Readable.prototype.pause = function () {
  debug('call pause flowing=%j', this._readableState.flowing);

  if (this._readableState.flowing !== false) {
    debug('pause');
    this._readableState.flowing = false;
    this.emit('pause');
  }

  this._readableState.paused = true;
  return this;
};

function flow(stream) {
  var state = stream._readableState;
  debug('flow', state.flowing);

  while (state.flowing && stream.read() !== null) {
    ;
  }
} // wrap an old-style stream as the async data source.
// This is *not* part of the readable stream interface.
// It is an ugly unfortunate mess of history.


Readable.prototype.wrap = function (stream) {
  var _this = this;

  var state = this._readableState;
  var paused = false;
  stream.on('end', function () {
    debug('wrapped end');

    if (state.decoder && !state.ended) {
      var chunk = state.decoder.end();
      if (chunk && chunk.length) _this.push(chunk);
    }

    _this.push(null);
  });
  stream.on('data', function (chunk) {
    debug('wrapped data');
    if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode

    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;

    var ret = _this.push(chunk);

    if (!ret) {
      paused = true;
      stream.pause();
    }
  }); // proxy all the other methods.
  // important when wrapping filters and duplexes.

  for (var i in stream) {
    if (this[i] === undefined && typeof stream[i] === 'function') {
      this[i] = function methodWrap(method) {
        return function methodWrapReturnFunction() {
          return stream[method].apply(stream, arguments);
        };
      }(i);
    }
  } // proxy certain important events.


  for (var n = 0; n < kProxyEvents.length; n++) {
    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
  } // when we try to consume some more bytes, simply unpause the
  // underlying stream.


  this._read = function (n) {
    debug('wrapped _read', n);

    if (paused) {
      paused = false;
      stream.resume();
    }
  };

  return this;
};

if (typeof Symbol === 'function') {
  Readable.prototype[Symbol.asyncIterator] = function () {
    if (createReadableStreamAsyncIterator === undefined) {
      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');
    }

    return createReadableStreamAsyncIterator(this);
  };
}

Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._readableState.highWaterMark;
  }
});
Object.defineProperty(Readable.prototype, 'readableBuffer', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._readableState && this._readableState.buffer;
  }
});
Object.defineProperty(Readable.prototype, 'readableFlowing', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._readableState.flowing;
  },
  set: function set(state) {
    if (this._readableState) {
      this._readableState.flowing = state;
    }
  }
}); // exposed for testing purposes only.

Readable._fromList = fromList;
Object.defineProperty(Readable.prototype, 'readableLength', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._readableState.length;
  }
}); // Pluck off n bytes from an array of buffers.
// Length is the combined lengths of all the buffers in the list.
// This function is designed to be inlinable, so please take care when making
// changes to the function body.

function fromList(n, state) {
  // nothing buffered
  if (state.length === 0) return null;
  var ret;
  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
    // read it all, truncate the list
    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
    state.buffer.clear();
  } else {
    // read part of list
    ret = state.buffer.consume(n, state.decoder);
  }
  return ret;
}

function endReadable(stream) {
  var state = stream._readableState;
  debug('endReadable', state.endEmitted);

  if (!state.endEmitted) {
    state.ended = true;
    process.nextTick(endReadableNT, state, stream);
  }
}

function endReadableNT(state, stream) {
  debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.

  if (!state.endEmitted && state.length === 0) {
    state.endEmitted = true;
    stream.readable = false;
    stream.emit('end');

    if (state.autoDestroy) {
      // In case of duplex streams we need a way to detect
      // if the writable side is ready for autoDestroy as well
      var wState = stream._writableState;

      if (!wState || wState.autoDestroy && wState.finished) {
        stream.destroy();
      }
    }
  }
}

if (typeof Symbol === 'function') {
  Readable.from = function (iterable, opts) {
    if (from === undefined) {
      from = require('./internal/streams/from');
    }

    return from(Readable, iterable, opts);
  };
}

function indexOf(xs, x) {
  for (var i = 0, l = xs.length; i < l; i++) {
    if (xs[i] === x) return i;
  }

  return -1;
}// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a transform stream is a readable/writable stream where you do
// something with the data.  Sometimes it's called a "filter",
// but that's not a great name for it, since that implies a thing where
// some bits pass through, and others are simply ignored.  (That would
// be a valid example of a transform, of course.)
//
// While the output is causally related to the input, it's not a
// necessarily symmetric or synchronous transformation.  For example,
// a zlib stream might take multiple plain-text writes(), and then
// emit a single compressed chunk some time in the future.
//
// Here's how this works:
//
// The Transform stream has all the aspects of the readable and writable
// stream classes.  When you write(chunk), that calls _write(chunk,cb)
// internally, and returns false if there's a lot of pending writes
// buffered up.  When you call read(), that calls _read(n) until
// there's enough pending readable data buffered up.
//
// In a transform stream, the written data is placed in a buffer.  When
// _read(n) is called, it transforms the queued up data, calling the
// buffered _write cb's as it consumes chunks.  If consuming a single
// written chunk would result in multiple output chunks, then the first
// outputted bit calls the readcb, and subsequent chunks just go into
// the read buffer, and will cause it to emit 'readable' if necessary.
//
// This way, back-pressure is actually determined by the reading side,
// since _read has to be called to start processing a new chunk.  However,
// a pathological inflate type of transform can cause excessive buffering
// here.  For example, imagine a stream where every byte of input is
// interpreted as an integer from 0-255, and then results in that many
// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
// 1kb of data being output.  In this case, you could write a very small
// amount of input, and end up with a very large amount of output.  In
// such a pathological inflating mechanism, there'd be no way to tell
// the system to stop doing the transform.  A single 4MB write could
// cause the system to run out of memory.
//
// However, even in such a pathological case, only a single written chunk
// would be consumed, and then the rest would wait (un-transformed) until
// the results of the previous transformed chunk were consumed.
'use strict';

module.exports = Transform;

var _require$codes = require('../errors').codes,
    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
    ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,
    ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;

var Duplex = require('./_stream_duplex');

require('inherits')(Transform, Duplex);

function afterTransform(er, data) {
  var ts = this._transformState;
  ts.transforming = false;
  var cb = ts.writecb;

  if (cb === null) {
    return this.emit('error', new ERR_MULTIPLE_CALLBACK());
  }

  ts.writechunk = null;
  ts.writecb = null;
  if (data != null) // single equals check for both `null` and `undefined`
    this.push(data);
  cb(er);
  var rs = this._readableState;
  rs.reading = false;

  if (rs.needReadable || rs.length < rs.highWaterMark) {
    this._read(rs.highWaterMark);
  }
}

function Transform(options) {
  if (!(this instanceof Transform)) return new Transform(options);
  Duplex.call(this, options);
  this._transformState = {
    afterTransform: afterTransform.bind(this),
    needTransform: false,
    transforming: false,
    writecb: null,
    writechunk: null,
    writeencoding: null
  }; // start out asking for a readable event once data is transformed.

  this._readableState.needReadable = true; // we have implemented the _read method, and done the other things
  // that Readable wants before the first _read call, so unset the
  // sync guard flag.

  this._readableState.sync = false;

  if (options) {
    if (typeof options.transform === 'function') this._transform = options.transform;
    if (typeof options.flush === 'function') this._flush = options.flush;
  } // When the writable side finishes, then flush out anything remaining.


  this.on('prefinish', prefinish);
}

function prefinish() {
  var _this = this;

  if (typeof this._flush === 'function' && !this._readableState.destroyed) {
    this._flush(function (er, data) {
      done(_this, er, data);
    });
  } else {
    done(this, null, null);
  }
}

Transform.prototype.push = function (chunk, encoding) {
  this._transformState.needTransform = false;
  return Duplex.prototype.push.call(this, chunk, encoding);
}; // This is the part where you do stuff!
// override this function in implementation classes.
// 'chunk' is an input chunk.
//
// Call `push(newChunk)` to pass along transformed output
// to the readable side.  You may call 'push' zero or more times.
//
// Call `cb(err)` when you are done with this chunk.  If you pass
// an error, then that'll put the hurt on the whole operation.  If you
// never call cb(), then you'll never get another chunk.


Transform.prototype._transform = function (chunk, encoding, cb) {
  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));
};

Transform.prototype._write = function (chunk, encoding, cb) {
  var ts = this._transformState;
  ts.writecb = cb;
  ts.writechunk = chunk;
  ts.writeencoding = encoding;

  if (!ts.transforming) {
    var rs = this._readableState;
    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
  }
}; // Doesn't matter what the args are here.
// _transform does all the work.
// That we got here means that the readable side wants more data.


Transform.prototype._read = function (n) {
  var ts = this._transformState;

  if (ts.writechunk !== null && !ts.transforming) {
    ts.transforming = true;

    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
  } else {
    // mark that we need a transform, so that any data that comes in
    // will get processed, now that we've asked for it.
    ts.needTransform = true;
  }
};

Transform.prototype._destroy = function (err, cb) {
  Duplex.prototype._destroy.call(this, err, function (err2) {
    cb(err2);
  });
};

function done(stream, er, data) {
  if (er) return stream.emit('error', er);
  if (data != null) // single equals check for both `null` and `undefined`
    stream.push(data); // TODO(BridgeAR): Write a test for these two error cases
  // if there's nothing in the write buffer, then that means
  // that nothing more will ever be provided

  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();
  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
  return stream.push(null);
}// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// A bit simpler than readable streams.
// Implement an async ._write(chunk, encoding, cb), and it'll handle all
// the drain event emission and buffering.
'use strict';

module.exports = Writable;
/* <replacement> */

function WriteReq(chunk, encoding, cb) {
  this.chunk = chunk;
  this.encoding = encoding;
  this.callback = cb;
  this.next = null;
} // It seems a linked list but it is not
// there will be only 2 of these for each stream


function CorkedRequest(state) {
  var _this = this;

  this.next = null;
  this.entry = null;

  this.finish = function () {
    onCorkedFinish(_this, state);
  };
}
/* </replacement> */

/*<replacement>*/


var Duplex;
/*</replacement>*/

Writable.WritableState = WritableState;
/*<replacement>*/

var internalUtil = {
  deprecate: require('util-deprecate')
};
/*</replacement>*/

/*<replacement>*/

var Stream = require('./internal/streams/stream');
/*</replacement>*/


var Buffer = require('buffer').Buffer;

var OurUint8Array = global.Uint8Array || function () {};

function _uint8ArrayToBuffer(chunk) {
  return Buffer.from(chunk);
}

function _isUint8Array(obj) {
  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
}

var destroyImpl = require('./internal/streams/destroy');

var _require = require('./internal/streams/state'),
    getHighWaterMark = _require.getHighWaterMark;

var _require$codes = require('../errors').codes,
    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
    ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,
    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,
    ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,
    ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,
    ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;

var errorOrDestroy = destroyImpl.errorOrDestroy;

require('inherits')(Writable, Stream);

function nop() {}

function WritableState(options, stream, isDuplex) {
  Duplex = Duplex || require('./_stream_duplex');
  options = options || {}; // Duplex streams are both readable and writable, but share
  // the same options object.
  // However, some cases require setting options to different
  // values for the readable and the writable sides of the duplex stream,
  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.

  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream
  // contains buffers or objects.

  this.objectMode = !!options.objectMode;
  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false
  // Note: 0 is a valid value, means that we always return false if
  // the entire buffer is not flushed immediately on write()

  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called

  this.finalCalled = false; // drain event flag.

  this.needDrain = false; // at the start of calling end()

  this.ending = false; // when end() has been called, and returned

  this.ended = false; // when 'finish' is emitted

  this.finished = false; // has it been destroyed

  this.destroyed = false; // should we decode strings into buffers before passing to _write?
  // this is here so that some node-core streams can optimize string
  // handling at a lower level.

  var noDecode = options.decodeStrings === false;
  this.decodeStrings = !noDecode; // Crypto is kind of old and crusty.  Historically, its default string
  // encoding is 'binary' so we have to make this configurable.
  // Everything else in the universe uses 'utf8', though.

  this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement
  // of how much we're waiting to get pushed to some underlying
  // socket or file.

  this.length = 0; // a flag to see when we're in the middle of a write.

  this.writing = false; // when true all writes will be buffered until .uncork() call

  this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,
  // or on a later tick.  We set this to true at first, because any
  // actions that shouldn't happen until "later" should generally also
  // not happen before the first write call.

  this.sync = true; // a flag to know if we're processing previously buffered items, which
  // may call the _write() callback in the same tick, so that we don't
  // end up in an overlapped onwrite situation.

  this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)

  this.onwrite = function (er) {
    onwrite(stream, er);
  }; // the callback that the user supplies to write(chunk,encoding,cb)


  this.writecb = null; // the amount that is being written when _write is called.

  this.writelen = 0;
  this.bufferedRequest = null;
  this.lastBufferedRequest = null; // number of pending user-supplied write callbacks
  // this must be 0 before 'finish' can be emitted

  this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs
  // This is relevant for synchronous Transform streams

  this.prefinished = false; // True if the error was already emitted and should not be thrown again

  this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.

  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')

  this.autoDestroy = !!options.autoDestroy; // count buffered requests

  this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always
  // one allocated and free to use, and we maintain at most two

  this.corkedRequestsFree = new CorkedRequest(this);
}

WritableState.prototype.getBuffer = function getBuffer() {
  var current = this.bufferedRequest;
  var out = [];

  while (current) {
    out.push(current);
    current = current.next;
  }

  return out;
};

(function () {
  try {
    Object.defineProperty(WritableState.prototype, 'buffer', {
      get: internalUtil.deprecate(function writableStateBufferGetter() {
        return this.getBuffer();
      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
    });
  } catch (_) {}
})(); // Test _writableState for inheritance to account for Duplex streams,
// whose prototype chain only points to Readable.


var realHasInstance;

if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
  realHasInstance = Function.prototype[Symbol.hasInstance];
  Object.defineProperty(Writable, Symbol.hasInstance, {
    value: function value(object) {
      if (realHasInstance.call(this, object)) return true;
      if (this !== Writable) return false;
      return object && object._writableState instanceof WritableState;
    }
  });
} else {
  realHasInstance = function realHasInstance(object) {
    return object instanceof this;
  };
}

function Writable(options) {
  Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.
  // `realHasInstance` is necessary because using plain `instanceof`
  // would return false, as no `_writableState` property is attached.
  // Trying to use the custom `instanceof` for Writable here will also break the
  // Node.js LazyTransform implementation, which has a non-trivial getter for
  // `_writableState` that would lead to infinite recursion.
  // Checking for a Stream.Duplex instance is faster here instead of inside
  // the WritableState constructor, at least with V8 6.5

  var isDuplex = this instanceof Duplex;
  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);
  this._writableState = new WritableState(options, this, isDuplex); // legacy.

  this.writable = true;

  if (options) {
    if (typeof options.write === 'function') this._write = options.write;
    if (typeof options.writev === 'function') this._writev = options.writev;
    if (typeof options.destroy === 'function') this._destroy = options.destroy;
    if (typeof options.final === 'function') this._final = options.final;
  }

  Stream.call(this);
} // Otherwise people can pipe Writable streams, which is just wrong.


Writable.prototype.pipe = function () {
  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
};

function writeAfterEnd(stream, cb) {
  var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb

  errorOrDestroy(stream, er);
  process.nextTick(cb, er);
} // Checks that a user-supplied chunk is valid, especially for the particular
// mode the stream is in. Currently this means that `null` is never accepted
// and undefined/non-string values are only allowed in object mode.


function validChunk(stream, state, chunk, cb) {
  var er;

  if (chunk === null) {
    er = new ERR_STREAM_NULL_VALUES();
  } else if (typeof chunk !== 'string' && !state.objectMode) {
    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);
  }

  if (er) {
    errorOrDestroy(stream, er);
    process.nextTick(cb, er);
    return false;
  }

  return true;
}

Writable.prototype.write = function (chunk, encoding, cb) {
  var state = this._writableState;
  var ret = false;

  var isBuf = !state.objectMode && _isUint8Array(chunk);

  if (isBuf && !Buffer.isBuffer(chunk)) {
    chunk = _uint8ArrayToBuffer(chunk);
  }

  if (typeof encoding === 'function') {
    cb = encoding;
    encoding = null;
  }

  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
  if (typeof cb !== 'function') cb = nop;
  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
    state.pendingcb++;
    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
  }
  return ret;
};

Writable.prototype.cork = function () {
  this._writableState.corked++;
};

Writable.prototype.uncork = function () {
  var state = this._writableState;

  if (state.corked) {
    state.corked--;
    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
  }
};

Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
  // node::ParseEncoding() requires lower case.
  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);
  this._writableState.defaultEncoding = encoding;
  return this;
};

Object.defineProperty(Writable.prototype, 'writableBuffer', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState && this._writableState.getBuffer();
  }
});

function decodeChunk(state, chunk, encoding) {
  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
    chunk = Buffer.from(chunk, encoding);
  }

  return chunk;
}

Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState.highWaterMark;
  }
}); // if we're already writing something, then just put this
// in the queue, and wait our turn.  Otherwise, call _write
// If we return false, then we need a drain event, so set that flag.

function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
  if (!isBuf) {
    var newChunk = decodeChunk(state, chunk, encoding);

    if (chunk !== newChunk) {
      isBuf = true;
      encoding = 'buffer';
      chunk = newChunk;
    }
  }

  var len = state.objectMode ? 1 : chunk.length;
  state.length += len;
  var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.

  if (!ret) state.needDrain = true;

  if (state.writing || state.corked) {
    var last = state.lastBufferedRequest;
    state.lastBufferedRequest = {
      chunk: chunk,
      encoding: encoding,
      isBuf: isBuf,
      callback: cb,
      next: null
    };

    if (last) {
      last.next = state.lastBufferedRequest;
    } else {
      state.bufferedRequest = state.lastBufferedRequest;
    }

    state.bufferedRequestCount += 1;
  } else {
    doWrite(stream, state, false, len, chunk, encoding, cb);
  }

  return ret;
}

function doWrite(stream, state, writev, len, chunk, encoding, cb) {
  state.writelen = len;
  state.writecb = cb;
  state.writing = true;
  state.sync = true;
  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
  state.sync = false;
}

function onwriteError(stream, state, sync, er, cb) {
  --state.pendingcb;

  if (sync) {
    // defer the callback if we are being called synchronously
    // to avoid piling up things on the stack
    process.nextTick(cb, er); // this can emit finish, and it will always happen
    // after error

    process.nextTick(finishMaybe, stream, state);
    stream._writableState.errorEmitted = true;
    errorOrDestroy(stream, er);
  } else {
    // the caller expect this to happen before if
    // it is async
    cb(er);
    stream._writableState.errorEmitted = true;
    errorOrDestroy(stream, er); // this can emit finish, but finish must
    // always follow error

    finishMaybe(stream, state);
  }
}

function onwriteStateUpdate(state) {
  state.writing = false;
  state.writecb = null;
  state.length -= state.writelen;
  state.writelen = 0;
}

function onwrite(stream, er) {
  var state = stream._writableState;
  var sync = state.sync;
  var cb = state.writecb;
  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();
  onwriteStateUpdate(state);
  if (er) onwriteError(stream, state, sync, er, cb);else {
    // Check if we're actually ready to finish, but don't emit yet
    var finished = needFinish(state) || stream.destroyed;

    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
      clearBuffer(stream, state);
    }

    if (sync) {
      process.nextTick(afterWrite, stream, state, finished, cb);
    } else {
      afterWrite(stream, state, finished, cb);
    }
  }
}

function afterWrite(stream, state, finished, cb) {
  if (!finished) onwriteDrain(stream, state);
  state.pendingcb--;
  cb();
  finishMaybe(stream, state);
} // Must force callback to be called on nextTick, so that we don't
// emit 'drain' before the write() consumer gets the 'false' return
// value, and has a chance to attach a 'drain' listener.


function onwriteDrain(stream, state) {
  if (state.length === 0 && state.needDrain) {
    state.needDrain = false;
    stream.emit('drain');
  }
} // if there's something in the buffer waiting, then process it


function clearBuffer(stream, state) {
  state.bufferProcessing = true;
  var entry = state.bufferedRequest;

  if (stream._writev && entry && entry.next) {
    // Fast case, write everything using _writev()
    var l = state.bufferedRequestCount;
    var buffer = new Array(l);
    var holder = state.corkedRequestsFree;
    holder.entry = entry;
    var count = 0;
    var allBuffers = true;

    while (entry) {
      buffer[count] = entry;
      if (!entry.isBuf) allBuffers = false;
      entry = entry.next;
      count += 1;
    }

    buffer.allBuffers = allBuffers;
    doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time
    // as the hot path ends with doWrite

    state.pendingcb++;
    state.lastBufferedRequest = null;

    if (holder.next) {
      state.corkedRequestsFree = holder.next;
      holder.next = null;
    } else {
      state.corkedRequestsFree = new CorkedRequest(state);
    }

    state.bufferedRequestCount = 0;
  } else {
    // Slow case, write chunks one-by-one
    while (entry) {
      var chunk = entry.chunk;
      var encoding = entry.encoding;
      var cb = entry.callback;
      var len = state.objectMode ? 1 : chunk.length;
      doWrite(stream, state, false, len, chunk, encoding, cb);
      entry = entry.next;
      state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then
      // it means that we need to wait until it does.
      // also, that means that the chunk and cb are currently
      // being processed, so move the buffer counter past them.

      if (state.writing) {
        break;
      }
    }

    if (entry === null) state.lastBufferedRequest = null;
  }

  state.bufferedRequest = entry;
  state.bufferProcessing = false;
}

Writable.prototype._write = function (chunk, encoding, cb) {
  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
};

Writable.prototype._writev = null;

Writable.prototype.end = function (chunk, encoding, cb) {
  var state = this._writableState;

  if (typeof chunk === 'function') {
    cb = chunk;
    chunk = null;
    encoding = null;
  } else if (typeof encoding === 'function') {
    cb = encoding;
    encoding = null;
  }

  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks

  if (state.corked) {
    state.corked = 1;
    this.uncork();
  } // ignore unnecessary end() calls.


  if (!state.ending) endWritable(this, state, cb);
  return this;
};

Object.defineProperty(Writable.prototype, 'writableLength', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState.length;
  }
});

function needFinish(state) {
  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
}

function callFinal(stream, state) {
  stream._final(function (err) {
    state.pendingcb--;

    if (err) {
      errorOrDestroy(stream, err);
    }

    state.prefinished = true;
    stream.emit('prefinish');
    finishMaybe(stream, state);
  });
}

function prefinish(stream, state) {
  if (!state.prefinished && !state.finalCalled) {
    if (typeof stream._final === 'function' && !state.destroyed) {
      state.pendingcb++;
      state.finalCalled = true;
      process.nextTick(callFinal, stream, state);
    } else {
      state.prefinished = true;
      stream.emit('prefinish');
    }
  }
}

function finishMaybe(stream, state) {
  var need = needFinish(state);

  if (need) {
    prefinish(stream, state);

    if (state.pendingcb === 0) {
      state.finished = true;
      stream.emit('finish');

      if (state.autoDestroy) {
        // In case of duplex streams we need a way to detect
        // if the readable side is ready for autoDestroy as well
        var rState = stream._readableState;

        if (!rState || rState.autoDestroy && rState.endEmitted) {
          stream.destroy();
        }
      }
    }
  }

  return need;
}

function endWritable(stream, state, cb) {
  state.ending = true;
  finishMaybe(stream, state);

  if (cb) {
    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);
  }

  state.ended = true;
  stream.writable = false;
}

function onCorkedFinish(corkReq, state, err) {
  var entry = corkReq.entry;
  corkReq.entry = null;

  while (entry) {
    var cb = entry.callback;
    state.pendingcb--;
    cb(err);
    entry = entry.next;
  } // reuse the free corkReq.


  state.corkedRequestsFree.next = corkReq;
}

Object.defineProperty(Writable.prototype, 'destroyed', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    if (this._writableState === undefined) {
      return false;
    }

    return this._writableState.destroyed;
  },
  set: function set(value) {
    // we ignore the value if the stream
    // has not been initialized yet
    if (!this._writableState) {
      return;
    } // backward compatibility, the user is explicitly
    // managing destroyed


    this._writableState.destroyed = value;
  }
});
Writable.prototype.destroy = destroyImpl.destroy;
Writable.prototype._undestroy = destroyImpl.undestroy;

Writable.prototype._destroy = function (err, cb) {
  cb(err);
};'use strict';

var _Object$setPrototypeO;

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

var finished = require('./end-of-stream');

var kLastResolve = Symbol('lastResolve');
var kLastReject = Symbol('lastReject');
var kError = Symbol('error');
var kEnded = Symbol('ended');
var kLastPromise = Symbol('lastPromise');
var kHandlePromise = Symbol('handlePromise');
var kStream = Symbol('stream');

function createIterResult(value, done) {
  return {
    value: value,
    done: done
  };
}

function readAndResolve(iter) {
  var resolve = iter[kLastResolve];

  if (resolve !== null) {
    var data = iter[kStream].read(); // we defer if data is null
    // we can be expecting either 'end' or
    // 'error'

    if (data !== null) {
      iter[kLastPromise] = null;
      iter[kLastResolve] = null;
      iter[kLastReject] = null;
      resolve(createIterResult(data, false));
    }
  }
}

function onReadable(iter) {
  // we wait for the next tick, because it might
  // emit an error with process.nextTick
  process.nextTick(readAndResolve, iter);
}

function wrapForNext(lastPromise, iter) {
  return function (resolve, reject) {
    lastPromise.then(function () {
      if (iter[kEnded]) {
        resolve(createIterResult(undefined, true));
        return;
      }

      iter[kHandlePromise](resolve, reject);
    }, reject);
  };
}

var AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
  get stream() {
    return this[kStream];
  },

  next: function next() {
    var _this = this;

    // if we have detected an error in the meanwhile
    // reject straight away
    var error = this[kError];

    if (error !== null) {
      return Promise.reject(error);
    }

    if (this[kEnded]) {
      return Promise.resolve(createIterResult(undefined, true));
    }

    if (this[kStream].destroyed) {
      // We need to defer via nextTick because if .destroy(err) is
      // called, the error will be emitted via nextTick, and
      // we cannot guarantee that there is no error lingering around
      // waiting to be emitted.
      return new Promise(function (resolve, reject) {
        process.nextTick(function () {
          if (_this[kError]) {
            reject(_this[kError]);
          } else {
            resolve(createIterResult(undefined, true));
          }
        });
      });
    } // if we have multiple next() calls
    // we will wait for the previous Promise to finish
    // this logic is optimized to support for await loops,
    // where next() is only called once at a time


    var lastPromise = this[kLastPromise];
    var promise;

    if (lastPromise) {
      promise = new Promise(wrapForNext(lastPromise, this));
    } else {
      // fast path needed to support multiple this.push()
      // without triggering the next() queue
      var data = this[kStream].read();

      if (data !== null) {
        return Promise.resolve(createIterResult(data, false));
      }

      promise = new Promise(this[kHandlePromise]);
    }

    this[kLastPromise] = promise;
    return promise;
  }
}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {
  return this;
}), _defineProperty(_Object$setPrototypeO, "return", function _return() {
  var _this2 = this;

  // destroy(err, cb) is a private API
  // we can guarantee we have that here, because we control the
  // Readable class this is attached to
  return new Promise(function (resolve, reject) {
    _this2[kStream].destroy(null, function (err) {
      if (err) {
        reject(err);
        return;
      }

      resolve(createIterResult(undefined, true));
    });
  });
}), _Object$setPrototypeO), AsyncIteratorPrototype);

var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {
  var _Object$create;

  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
    value: stream,
    writable: true
  }), _defineProperty(_Object$create, kLastResolve, {
    value: null,
    writable: true
  }), _defineProperty(_Object$create, kLastReject, {
    value: null,
    writable: true
  }), _defineProperty(_Object$create, kError, {
    value: null,
    writable: true
  }), _defineProperty(_Object$create, kEnded, {
    value: stream._readableState.endEmitted,
    writable: true
  }), _defineProperty(_Object$create, kHandlePromise, {
    value: function value(resolve, reject) {
      var data = iterator[kStream].read();

      if (data) {
        iterator[kLastPromise] = null;
        iterator[kLastResolve] = null;
        iterator[kLastReject] = null;
        resolve(createIterResult(data, false));
      } else {
        iterator[kLastResolve] = resolve;
        iterator[kLastReject] = reject;
      }
    },
    writable: true
  }), _Object$create));
  iterator[kLastPromise] = null;
  finished(stream, function (err) {
    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
      var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise
      // returned by next() and store the error

      if (reject !== null) {
        iterator[kLastPromise] = null;
        iterator[kLastResolve] = null;
        iterator[kLastReject] = null;
        reject(err);
      }

      iterator[kError] = err;
      return;
    }

    var resolve = iterator[kLastResolve];

    if (resolve !== null) {
      iterator[kLastPromise] = null;
      iterator[kLastResolve] = null;
      iterator[kLastReject] = null;
      resolve(createIterResult(undefined, true));
    }

    iterator[kEnded] = true;
  });
  stream.on('readable', onReadable.bind(null, iterator));
  return iterator;
};

module.exports = createReadableStreamAsyncIterator;'use strict';

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

var _require = require('buffer'),
    Buffer = _require.Buffer;

var _require2 = require('util'),
    inspect = _require2.inspect;

var custom = inspect && inspect.custom || 'inspect';

function copyBuffer(src, target, offset) {
  Buffer.prototype.copy.call(src, target, offset);
}

module.exports =
/*#__PURE__*/
function () {
  function BufferList() {
    _classCallCheck(this, BufferList);

    this.head = null;
    this.tail = null;
    this.length = 0;
  }

  _createClass(BufferList, [{
    key: "push",
    value: function push(v) {
      var entry = {
        data: v,
        next: null
      };
      if (this.length > 0) this.tail.next = entry;else this.head = entry;
      this.tail = entry;
      ++this.length;
    }
  }, {
    key: "unshift",
    value: function unshift(v) {
      var entry = {
        data: v,
        next: this.head
      };
      if (this.length === 0) this.tail = entry;
      this.head = entry;
      ++this.length;
    }
  }, {
    key: "shift",
    value: function shift() {
      if (this.length === 0) return;
      var ret = this.head.data;
      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
      --this.length;
      return ret;
    }
  }, {
    key: "clear",
    value: function clear() {
      this.head = this.tail = null;
      this.length = 0;
    }
  }, {
    key: "join",
    value: function join(s) {
      if (this.length === 0) return '';
      var p = this.head;
      var ret = '' + p.data;

      while (p = p.next) {
        ret += s + p.data;
      }

      return ret;
    }
  }, {
    key: "concat",
    value: function concat(n) {
      if (this.length === 0) return Buffer.alloc(0);
      var ret = Buffer.allocUnsafe(n >>> 0);
      var p = this.head;
      var i = 0;

      while (p) {
        copyBuffer(p.data, ret, i);
        i += p.data.length;
        p = p.next;
      }

      return ret;
    } // Consumes a specified amount of bytes or characters from the buffered data.

  }, {
    key: "consume",
    value: function consume(n, hasStrings) {
      var ret;

      if (n < this.head.data.length) {
        // `slice` is the same for buffers and strings.
        ret = this.head.data.slice(0, n);
        this.head.data = this.head.data.slice(n);
      } else if (n === this.head.data.length) {
        // First chunk is a perfect match.
        ret = this.shift();
      } else {
        // Result spans more than one buffer.
        ret = hasStrings ? this._getString(n) : this._getBuffer(n);
      }

      return ret;
    }
  }, {
    key: "first",
    value: function first() {
      return this.head.data;
    } // Consumes a specified amount of characters from the buffered data.

  }, {
    key: "_getString",
    value: function _getString(n) {
      var p = this.head;
      var c = 1;
      var ret = p.data;
      n -= ret.length;

      while (p = p.next) {
        var str = p.data;
        var nb = n > str.length ? str.length : n;
        if (nb === str.length) ret += str;else ret += str.slice(0, n);
        n -= nb;

        if (n === 0) {
          if (nb === str.length) {
            ++c;
            if (p.next) this.head = p.next;else this.head = this.tail = null;
          } else {
            this.head = p;
            p.data = str.slice(nb);
          }

          break;
        }

        ++c;
      }

      this.length -= c;
      return ret;
    } // Consumes a specified amount of bytes from the buffered data.

  }, {
    key: "_getBuffer",
    value: function _getBuffer(n) {
      var ret = Buffer.allocUnsafe(n);
      var p = this.head;
      var c = 1;
      p.data.copy(ret);
      n -= p.data.length;

      while (p = p.next) {
        var buf = p.data;
        var nb = n > buf.length ? buf.length : n;
        buf.copy(ret, ret.length - n, 0, nb);
        n -= nb;

        if (n === 0) {
          if (nb === buf.length) {
            ++c;
            if (p.next) this.head = p.next;else this.head = this.tail = null;
          } else {
            this.head = p;
            p.data = buf.slice(nb);
          }

          break;
        }

        ++c;
      }

      this.length -= c;
      return ret;
    } // Make sure the linked list only shows the minimal necessary information.

  }, {
    key: custom,
    value: function value(_, options) {
      return inspect(this, _objectSpread({}, options, {
        // Only inspect one level.
        depth: 0,
        // It should not recurse.
        customInspect: false
      }));
    }
  }]);

  return BufferList;
}();'use strict'; // undocumented cb() API, needed for core, not for public API

function destroy(err, cb) {
  var _this = this;

  var readableDestroyed = this._readableState && this._readableState.destroyed;
  var writableDestroyed = this._writableState && this._writableState.destroyed;

  if (readableDestroyed || writableDestroyed) {
    if (cb) {
      cb(err);
    } else if (err) {
      if (!this._writableState) {
        process.nextTick(emitErrorNT, this, err);
      } else if (!this._writableState.errorEmitted) {
        this._writableState.errorEmitted = true;
        process.nextTick(emitErrorNT, this, err);
      }
    }

    return this;
  } // we set destroyed to true before firing error callbacks in order
  // to make it re-entrance safe in case destroy() is called within callbacks


  if (this._readableState) {
    this._readableState.destroyed = true;
  } // if this is a duplex stream mark the writable part as destroyed as well


  if (this._writableState) {
    this._writableState.destroyed = true;
  }

  this._destroy(err || null, function (err) {
    if (!cb && err) {
      if (!_this._writableState) {
        process.nextTick(emitErrorAndCloseNT, _this, err);
      } else if (!_this._writableState.errorEmitted) {
        _this._writableState.errorEmitted = true;
        process.nextTick(emitErrorAndCloseNT, _this, err);
      } else {
        process.nextTick(emitCloseNT, _this);
      }
    } else if (cb) {
      process.nextTick(emitCloseNT, _this);
      cb(err);
    } else {
      process.nextTick(emitCloseNT, _this);
    }
  });

  return this;
}

function emitErrorAndCloseNT(self, err) {
  emitErrorNT(self, err);
  emitCloseNT(self);
}

function emitCloseNT(self) {
  if (self._writableState && !self._writableState.emitClose) return;
  if (self._readableState && !self._readableState.emitClose) return;
  self.emit('close');
}

function undestroy() {
  if (this._readableState) {
    this._readableState.destroyed = false;
    this._readableState.reading = false;
    this._readableState.ended = false;
    this._readableState.endEmitted = false;
  }

  if (this._writableState) {
    this._writableState.destroyed = false;
    this._writableState.ended = false;
    this._writableState.ending = false;
    this._writableState.finalCalled = false;
    this._writableState.prefinished = false;
    this._writableState.finished = false;
    this._writableState.errorEmitted = false;
  }
}

function emitErrorNT(self, err) {
  self.emit('error', err);
}

function errorOrDestroy(stream, err) {
  // We have tests that rely on errors being emitted
  // in the same tick, so changing this is semver major.
  // For now when you opt-in to autoDestroy we allow
  // the error to be emitted nextTick. In a future
  // semver major update we should change the default to this.
  var rState = stream._readableState;
  var wState = stream._writableState;
  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);
}

module.exports = {
  destroy: destroy,
  undestroy: undestroy,
  errorOrDestroy: errorOrDestroy
};// Ported from https://github.com/mafintosh/end-of-stream with
// permission from the author, Mathias Buus (@mafintosh).
'use strict';

var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;

function once(callback) {
  var called = false;
  return function () {
    if (called) return;
    called = true;

    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    callback.apply(this, args);
  };
}

function noop() {}

function isRequest(stream) {
  return stream.setHeader && typeof stream.abort === 'function';
}

function eos(stream, opts, callback) {
  if (typeof opts === 'function') return eos(stream, null, opts);
  if (!opts) opts = {};
  callback = once(callback || noop);
  var readable = opts.readable || opts.readable !== false && stream.readable;
  var writable = opts.writable || opts.writable !== false && stream.writable;

  var onlegacyfinish = function onlegacyfinish() {
    if (!stream.writable) onfinish();
  };

  var writableEnded = stream._writableState && stream._writableState.finished;

  var onfinish = function onfinish() {
    writable = false;
    writableEnded = true;
    if (!readable) callback.call(stream);
  };

  var readableEnded = stream._readableState && stream._readableState.endEmitted;

  var onend = function onend() {
    readable = false;
    readableEnded = true;
    if (!writable) callback.call(stream);
  };

  var onerror = function onerror(err) {
    callback.call(stream, err);
  };

  var onclose = function onclose() {
    var err;

    if (readable && !readableEnded) {
      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
      return callback.call(stream, err);
    }

    if (writable && !writableEnded) {
      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
      return callback.call(stream, err);
    }
  };

  var onrequest = function onrequest() {
    stream.req.on('finish', onfinish);
  };

  if (isRequest(stream)) {
    stream.on('complete', onfinish);
    stream.on('abort', onclose);
    if (stream.req) onrequest();else stream.on('request', onrequest);
  } else if (writable && !stream._writableState) {
    // legacy streams
    stream.on('end', onlegacyfinish);
    stream.on('close', onlegacyfinish);
  }

  stream.on('end', onend);
  stream.on('finish', onfinish);
  if (opts.error !== false) stream.on('error', onerror);
  stream.on('close', onclose);
  return function () {
    stream.removeListener('complete', onfinish);
    stream.removeListener('abort', onclose);
    stream.removeListener('request', onrequest);
    if (stream.req) stream.req.removeListener('finish', onfinish);
    stream.removeListener('end', onlegacyfinish);
    stream.removeListener('close', onlegacyfinish);
    stream.removeListener('finish', onfinish);
    stream.removeListener('end', onend);
    stream.removeListener('error', onerror);
    stream.removeListener('close', onclose);
  };
}

module.exports = eos;module.exports = function () {
  throw new Error('Readable.from is not available in the browser')
};
'use strict';

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }

function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

var ERR_INVALID_ARG_TYPE = require('../../../errors').codes.ERR_INVALID_ARG_TYPE;

function from(Readable, iterable, opts) {
  var iterator;

  if (iterable && typeof iterable.next === 'function') {
    iterator = iterable;
  } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);

  var readable = new Readable(_objectSpread({
    objectMode: true
  }, opts)); // Reading boolean to protect against _read
  // being called before last iteration completion.

  var reading = false;

  readable._read = function () {
    if (!reading) {
      reading = true;
      next();
    }
  };

  function next() {
    return _next2.apply(this, arguments);
  }

  function _next2() {
    _next2 = _asyncToGenerator(function* () {
      try {
        var _ref = yield iterator.next(),
            value = _ref.value,
            done = _ref.done;

        if (done) {
          readable.push(null);
        } else if (readable.push((yield value))) {
          next();
        } else {
          reading = false;
        }
      } catch (err) {
        readable.destroy(err);
      }
    });
    return _next2.apply(this, arguments);
  }

  return readable;
}

module.exports = from;// Ported from https://github.com/mafintosh/pump with
// permission from the author, Mathias Buus (@mafintosh).
'use strict';

var eos;

function once(callback) {
  var called = false;
  return function () {
    if (called) return;
    called = true;
    callback.apply(void 0, arguments);
  };
}

var _require$codes = require('../../../errors').codes,
    ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,
    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;

function noop(err) {
  // Rethrow the error if it exists to avoid swallowing it
  if (err) throw err;
}

function isRequest(stream) {
  return stream.setHeader && typeof stream.abort === 'function';
}

function destroyer(stream, reading, writing, callback) {
  callback = once(callback);
  var closed = false;
  stream.on('close', function () {
    closed = true;
  });
  if (eos === undefined) eos = require('./end-of-stream');
  eos(stream, {
    readable: reading,
    writable: writing
  }, function (err) {
    if (err) return callback(err);
    closed = true;
    callback();
  });
  var destroyed = false;
  return function (err) {
    if (closed) return;
    if (destroyed) return;
    destroyed = true; // request.destroy just do .end - .abort is what we want

    if (isRequest(stream)) return stream.abort();
    if (typeof stream.destroy === 'function') return stream.destroy();
    callback(err || new ERR_STREAM_DESTROYED('pipe'));
  };
}

function call(fn) {
  fn();
}

function pipe(from, to) {
  return from.pipe(to);
}

function popCallback(streams) {
  if (!streams.length) return noop;
  if (typeof streams[streams.length - 1] !== 'function') return noop;
  return streams.pop();
}

function pipeline() {
  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {
    streams[_key] = arguments[_key];
  }

  var callback = popCallback(streams);
  if (Array.isArray(streams[0])) streams = streams[0];

  if (streams.length < 2) {
    throw new ERR_MISSING_ARGS('streams');
  }

  var error;
  var destroys = streams.map(function (stream, i) {
    var reading = i < streams.length - 1;
    var writing = i > 0;
    return destroyer(stream, reading, writing, function (err) {
      if (!error) error = err;
      if (err) destroys.forEach(call);
      if (reading) return;
      destroys.forEach(call);
      callback(error);
    });
  });
  return streams.reduce(pipe);
}

module.exports = pipeline;'use strict';

var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;

function highWaterMarkFrom(options, isDuplex, duplexKey) {
  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;
}

function getHighWaterMark(state, options, duplexKey, isDuplex) {
  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);

  if (hwm != null) {
    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {
      var name = isDuplex ? duplexKey : 'highWaterMark';
      throw new ERR_INVALID_OPT_VALUE(name, hwm);
    }

    return Math.floor(hwm);
  } // Default value


  return state.objectMode ? 16 : 16 * 1024;
}

module.exports = {
  getHighWaterMark: getHighWaterMark
};module.exports = require('events').EventEmitter;
module.exports = require('stream');
Node.js is licensed for use as follows:

"""
Copyright Node.js contributors. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
"""

This license applies to parts of Node.js originating from the
https://github.com/joyent/node repository:

"""
Copyright Joyent, Inc. and other Node contributors. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
"""
{
  "name": "readable-stream",
  "version": "3.6.0",
  "description": "Streams3, a user-land copy of the stream library from Node.js",
  "main": "readable.js",
  "engines": {
    "node": ">= 6"
  },
  "dependencies": {
    "inherits": "^2.0.3",
    "string_decoder": "^1.1.1",
    "util-deprecate": "^1.0.1"
  },
  "devDependencies": {
    "@babel/cli": "^7.2.0",
    "@babel/core": "^7.2.0",
    "@babel/polyfill": "^7.0.0",
    "@babel/preset-env": "^7.2.0",
    "airtap": "0.0.9",
    "assert": "^1.4.0",
    "bl": "^2.0.0",
    "deep-strict-equal": "^0.2.0",
    "events.once": "^2.0.2",
    "glob": "^7.1.2",
    "gunzip-maybe": "^1.4.1",
    "hyperquest": "^2.1.3",
    "lolex": "^2.6.0",
    "nyc": "^11.0.0",
    "pump": "^3.0.0",
    "rimraf": "^2.6.2",
    "tap": "^12.0.0",
    "tape": "^4.9.0",
    "tar-fs": "^1.16.2",
    "util-promisify": "^2.1.0"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/nodejs/readable-stream"
  },
  "browser": {
    "util": false,
    "worker_threads": false,
    "./errors": "./errors-browser.js",
    "./readable.js": "./readable-browser.js",
    "./lib/internal/streams/from.js": "./lib/internal/streams/from-browser.js",
    "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js"
  },
  "license": "MIT"
}exports = module.exports = require('./lib/_stream_readable.js');
exports.Stream = exports;
exports.Readable = exports;
exports.Writable = require('./lib/_stream_writable.js');
exports.Duplex = require('./lib/_stream_duplex.js');
exports.Transform = require('./lib/_stream_transform.js');
exports.PassThrough = require('./lib/_stream_passthrough.js');
exports.finished = require('./lib/internal/streams/end-of-stream.js');
exports.pipeline = require('./lib/internal/streams/pipeline.js');
var Stream = require('stream');
if (process.env.READABLE_STREAM === 'disable' && Stream) {
  module.exports = Stream.Readable;
  Object.assign(module.exports, Stream);
  module.exports.Stream = Stream;
} else {
  exports = module.exports = require('./lib/_stream_readable.js');
  exports.Stream = Stream || exports;
  exports.Readable = exports;
  exports.Writable = require('./lib/_stream_writable.js');
  exports.Duplex = require('./lib/_stream_duplex.js');
  exports.Transform = require('./lib/_stream_transform.js');
  exports.PassThrough = require('./lib/_stream_passthrough.js');
  exports.finished = require('./lib/internal/streams/end-of-stream.js');
  exports.pipeline = require('./lib/internal/streams/pipeline.js');
}
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

'use strict';

/*<replacement>*/

var Buffer = require('safe-buffer').Buffer;
/*</replacement>*/

var isEncoding = Buffer.isEncoding || function (encoding) {
  encoding = '' + encoding;
  switch (encoding && encoding.toLowerCase()) {
    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
      return true;
    default:
      return false;
  }
};

function _normalizeEncoding(enc) {
  if (!enc) return 'utf8';
  var retried;
  while (true) {
    switch (enc) {
      case 'utf8':
      case 'utf-8':
        return 'utf8';
      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return 'utf16le';
      case 'latin1':
      case 'binary':
        return 'latin1';
      case 'base64':
      case 'ascii':
      case 'hex':
        return enc;
      default:
        if (retried) return; // undefined
        enc = ('' + enc).toLowerCase();
        retried = true;
    }
  }
};

// Do not cache `Buffer.isEncoding` when checking encoding names as some
// modules monkey-patch it to support additional encodings
function normalizeEncoding(enc) {
  var nenc = _normalizeEncoding(enc);
  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
  return nenc || enc;
}

// StringDecoder provides an interface for efficiently splitting a series of
// buffers into a series of JS strings without breaking apart multi-byte
// characters.
exports.StringDecoder = StringDecoder;
function StringDecoder(encoding) {
  this.encoding = normalizeEncoding(encoding);
  var nb;
  switch (this.encoding) {
    case 'utf16le':
      this.text = utf16Text;
      this.end = utf16End;
      nb = 4;
      break;
    case 'utf8':
      this.fillLast = utf8FillLast;
      nb = 4;
      break;
    case 'base64':
      this.text = base64Text;
      this.end = base64End;
      nb = 3;
      break;
    default:
      this.write = simpleWrite;
      this.end = simpleEnd;
      return;
  }
  this.lastNeed = 0;
  this.lastTotal = 0;
  this.lastChar = Buffer.allocUnsafe(nb);
}

StringDecoder.prototype.write = function (buf) {
  if (buf.length === 0) return '';
  var r;
  var i;
  if (this.lastNeed) {
    r = this.fillLast(buf);
    if (r === undefined) return '';
    i = this.lastNeed;
    this.lastNeed = 0;
  } else {
    i = 0;
  }
  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
  return r || '';
};

StringDecoder.prototype.end = utf8End;

// Returns only complete characters in a Buffer
StringDecoder.prototype.text = utf8Text;

// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
StringDecoder.prototype.fillLast = function (buf) {
  if (this.lastNeed <= buf.length) {
    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
  }
  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
  this.lastNeed -= buf.length;
};

// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
// continuation byte. If an invalid byte is detected, -2 is returned.
function utf8CheckByte(byte) {
  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
  return byte >> 6 === 0x02 ? -1 : -2;
}

// Checks at most 3 bytes at the end of a Buffer in order to detect an
// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
// needed to complete the UTF-8 character (if applicable) are returned.
function utf8CheckIncomplete(self, buf, i) {
  var j = buf.length - 1;
  if (j < i) return 0;
  var nb = utf8CheckByte(buf[j]);
  if (nb >= 0) {
    if (nb > 0) self.lastNeed = nb - 1;
    return nb;
  }
  if (--j < i || nb === -2) return 0;
  nb = utf8CheckByte(buf[j]);
  if (nb >= 0) {
    if (nb > 0) self.lastNeed = nb - 2;
    return nb;
  }
  if (--j < i || nb === -2) return 0;
  nb = utf8CheckByte(buf[j]);
  if (nb >= 0) {
    if (nb > 0) {
      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
    }
    return nb;
  }
  return 0;
}

// Validates as many continuation bytes for a multi-byte UTF-8 character as
// needed or are available. If we see a non-continuation byte where we expect
// one, we "replace" the validated continuation bytes we've seen so far with
// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
// behavior. The continuation byte check is included three times in the case
// where all of the continuation bytes for a character exist in the same buffer.
// It is also done this way as a slight performance increase instead of using a
// loop.
function utf8CheckExtraBytes(self, buf, p) {
  if ((buf[0] & 0xC0) !== 0x80) {
    self.lastNeed = 0;
    return '\ufffd';
  }
  if (self.lastNeed > 1 && buf.length > 1) {
    if ((buf[1] & 0xC0) !== 0x80) {
      self.lastNeed = 1;
      return '\ufffd';
    }
    if (self.lastNeed > 2 && buf.length > 2) {
      if ((buf[2] & 0xC0) !== 0x80) {
        self.lastNeed = 2;
        return '\ufffd';
      }
    }
  }
}

// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
function utf8FillLast(buf) {
  var p = this.lastTotal - this.lastNeed;
  var r = utf8CheckExtraBytes(this, buf, p);
  if (r !== undefined) return r;
  if (this.lastNeed <= buf.length) {
    buf.copy(this.lastChar, p, 0, this.lastNeed);
    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
  }
  buf.copy(this.lastChar, p, 0, buf.length);
  this.lastNeed -= buf.length;
}

// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
// partial character, the character's bytes are buffered until the required
// number of bytes are available.
function utf8Text(buf, i) {
  var total = utf8CheckIncomplete(this, buf, i);
  if (!this.lastNeed) return buf.toString('utf8', i);
  this.lastTotal = total;
  var end = buf.length - (total - this.lastNeed);
  buf.copy(this.lastChar, 0, end);
  return buf.toString('utf8', i, end);
}

// For UTF-8, a replacement character is added when ending on a partial
// character.
function utf8End(buf) {
  var r = buf && buf.length ? this.write(buf) : '';
  if (this.lastNeed) return r + '\ufffd';
  return r;
}

// UTF-16LE typically needs two bytes per character, but even if we have an even
// number of bytes available, we need to check if we end on a leading/high
// surrogate. In that case, we need to wait for the next two bytes in order to
// decode the last character properly.
function utf16Text(buf, i) {
  if ((buf.length - i) % 2 === 0) {
    var r = buf.toString('utf16le', i);
    if (r) {
      var c = r.charCodeAt(r.length - 1);
      if (c >= 0xD800 && c <= 0xDBFF) {
        this.lastNeed = 2;
        this.lastTotal = 4;
        this.lastChar[0] = buf[buf.length - 2];
        this.lastChar[1] = buf[buf.length - 1];
        return r.slice(0, -1);
      }
    }
    return r;
  }
  this.lastNeed = 1;
  this.lastTotal = 2;
  this.lastChar[0] = buf[buf.length - 1];
  return buf.toString('utf16le', i, buf.length - 1);
}

// For UTF-16LE we do not explicitly append special replacement characters if we
// end on a partial character, we simply let v8 handle that.
function utf16End(buf) {
  var r = buf && buf.length ? this.write(buf) : '';
  if (this.lastNeed) {
    var end = this.lastTotal - this.lastNeed;
    return r + this.lastChar.toString('utf16le', 0, end);
  }
  return r;
}

function base64Text(buf, i) {
  var n = (buf.length - i) % 3;
  if (n === 0) return buf.toString('base64', i);
  this.lastNeed = 3 - n;
  this.lastTotal = 3;
  if (n === 1) {
    this.lastChar[0] = buf[buf.length - 1];
  } else {
    this.lastChar[0] = buf[buf.length - 2];
    this.lastChar[1] = buf[buf.length - 1];
  }
  return buf.toString('base64', i, buf.length - n);
}

function base64End(buf) {
  var r = buf && buf.length ? this.write(buf) : '';
  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
  return r;
}

// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
function simpleWrite(buf) {
  return buf.toString(this.encoding);
}

function simpleEnd(buf) {
  return buf && buf.length ? this.write(buf) : '';
}Node.js is licensed for use as follows:

"""
Copyright Node.js contributors. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
"""

This license applies to parts of Node.js originating from the
https://github.com/joyent/node repository:

"""
Copyright Joyent, Inc. and other Node contributors. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
"""

{
  "name": "string_decoder",
  "version": "1.3.0",
  "description": "The string_decoder module from Node core",
  "main": "lib/string_decoder.js",
  "files": [
    "lib"
  ],
  "dependencies": {
    "safe-buffer": "~5.2.0"
  },
  "devDependencies": {
    "babel-polyfill": "^6.23.0",
    "core-util-is": "^1.0.2",
    "inherits": "^2.0.3",
    "tap": "~0.4.8"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/nodejs/string_decoder.git"
  },
  "homepage": "https://github.com/nodejs/string_decoder",
  "license": "MIT"
}{
  "name": "bl",
  "version": "4.1.0",
  "description": "Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!",
  "license": "MIT",
  "main": "bl.js",
  "repository": {
    "type": "git",
    "url": "https://github.com/rvagg/bl.git"
  },
  "homepage": "https://github.com/rvagg/bl",
  "authors": [
    "Rod Vagg <rod@vagg.org> (https://github.com/rvagg)",
    "Matteo Collina <matteo.collina@gmail.com> (https://github.com/mcollina)",
    "Jarett Cruger <jcrugzz@gmail.com> (https://github.com/jcrugzz)"
  ],
  "dependencies": {
    "buffer": "^5.5.0",
    "inherits": "^2.0.4",
    "readable-stream": "^3.4.0"
  },
  "devDependencies": {
    "faucet": "~0.0.1",
    "standard": "^14.3.0",
    "tape": "^4.11.0"
  }
}function allocUnsafe (size) {
  if (typeof size !== 'number') {
    throw new TypeError('"size" argument must be a number')
  }

  if (size < 0) {
    throw new RangeError('"size" argument must not be negative')
  }

  if (Buffer.allocUnsafe) {
    return Buffer.allocUnsafe(size)
  } else {
    return new Buffer(size)
  }
}

module.exports = allocUnsafe
{
  "name": "buffer-alloc-unsafe",
  "version": "1.1.0",
  "license": "MIT",
  "repository": "LinusU/buffer-alloc-unsafe",
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "standard": "^7.1.2"
  }
}var bufferFill = require('buffer-fill')
var allocUnsafe = require('buffer-alloc-unsafe')

module.exports = function alloc (size, fill, encoding) {
  if (typeof size !== 'number') {
    throw new TypeError('"size" argument must be a number')
  }

  if (size < 0) {
    throw new RangeError('"size" argument must not be negative')
  }

  if (Buffer.alloc) {
    return Buffer.alloc(size, fill, encoding)
  }

  var buffer = allocUnsafe(size)

  if (size === 0) {
    return buffer
  }

  if (fill === undefined) {
    return bufferFill(buffer, 0)
  }

  if (typeof encoding !== 'string') {
    encoding = undefined
  }

  return bufferFill(buffer, fill, encoding)
}
{
  "name": "buffer-alloc",
  "version": "1.2.0",
  "license": "MIT",
  "repository": "LinusU/buffer-alloc",
  "files": [
    "index.js"
  ],
  "dependencies": {
    "buffer-alloc-unsafe": "^1.1.0",
    "buffer-fill": "^1.0.0"
  },
  "devDependencies": {
    "standard": "^7.1.2"
  }
}/* Node.js 6.4.0 and up has full support */
var hasFullSupport = (function () {
  try {
    if (!Buffer.isEncoding('latin1')) {
      return false
    }

    var buf = Buffer.alloc ? Buffer.alloc(4) : new Buffer(4)

    buf.fill('ab', 'ucs2')

    return (buf.toString('hex') === '61006200')
  } catch (_) {
    return false
  }
}())

function isSingleByte (val) {
  return (val.length === 1 && val.charCodeAt(0) < 256)
}

function fillWithNumber (buffer, val, start, end) {
  if (start < 0 || end > buffer.length) {
    throw new RangeError('Out of range index')
  }

  start = start >>> 0
  end = end === undefined ? buffer.length : end >>> 0

  if (end > start) {
    buffer.fill(val, start, end)
  }

  return buffer
}

function fillWithBuffer (buffer, val, start, end) {
  if (start < 0 || end > buffer.length) {
    throw new RangeError('Out of range index')
  }

  if (end <= start) {
    return buffer
  }

  start = start >>> 0
  end = end === undefined ? buffer.length : end >>> 0

  var pos = start
  var len = val.length
  while (pos <= (end - len)) {
    val.copy(buffer, pos)
    pos += len
  }

  if (pos !== end) {
    val.copy(buffer, pos, 0, end - pos)
  }

  return buffer
}

function fill (buffer, val, start, end, encoding) {
  if (hasFullSupport) {
    return buffer.fill(val, start, end, encoding)
  }

  if (typeof val === 'number') {
    return fillWithNumber(buffer, val, start, end)
  }

  if (typeof val === 'string') {
    if (typeof start === 'string') {
      encoding = start
      start = 0
      end = buffer.length
    } else if (typeof end === 'string') {
      encoding = end
      end = buffer.length
    }

    if (encoding !== undefined && typeof encoding !== 'string') {
      throw new TypeError('encoding must be a string')
    }

    if (encoding === 'latin1') {
      encoding = 'binary'
    }

    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
      throw new TypeError('Unknown encoding: ' + encoding)
    }

    if (val === '') {
      return fillWithNumber(buffer, 0, start, end)
    }

    if (isSingleByte(val)) {
      return fillWithNumber(buffer, val.charCodeAt(0), start, end)
    }

    val = new Buffer(val, encoding)
  }

  if (Buffer.isBuffer(val)) {
    return fillWithBuffer(buffer, val, start, end)
  }

  // Other values (e.g. undefined, boolean, object) results in zero-fill
  return fillWithNumber(buffer, 0, start, end)
}

module.exports = fill
{
  "name": "buffer-fill",
  "version": "1.0.0",
  "license": "MIT",
  "repository": "LinusU/buffer-fill",
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "buffer-alloc-unsafe": "^1.1.0",
    "standard": "^7.1.2"
  }
}var toString = Object.prototype.toString

var isModern = (
  typeof Buffer.alloc === 'function' &&
  typeof Buffer.allocUnsafe === 'function' &&
  typeof Buffer.from === 'function'
)

function isArrayBuffer (input) {
  return toString.call(input).slice(8, -1) === 'ArrayBuffer'
}

function fromArrayBuffer (obj, byteOffset, length) {
  byteOffset >>>= 0

  var maxLength = obj.byteLength - byteOffset

  if (maxLength < 0) {
    throw new RangeError("'offset' is out of bounds")
  }

  if (length === undefined) {
    length = maxLength
  } else {
    length >>>= 0

    if (length > maxLength) {
      throw new RangeError("'length' is out of bounds")
    }
  }

  return isModern
    ? Buffer.from(obj.slice(byteOffset, byteOffset + length))
    : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))
}

function fromString (string, encoding) {
  if (typeof encoding !== 'string' || encoding === '') {
    encoding = 'utf8'
  }

  if (!Buffer.isEncoding(encoding)) {
    throw new TypeError('"encoding" must be a valid string encoding')
  }

  return isModern
    ? Buffer.from(string, encoding)
    : new Buffer(string, encoding)
}

function bufferFrom (value, encodingOrOffset, length) {
  if (typeof value === 'number') {
    throw new TypeError('"value" argument must not be a number')
  }

  if (isArrayBuffer(value)) {
    return fromArrayBuffer(value, encodingOrOffset, length)
  }

  if (typeof value === 'string') {
    return fromString(value, encodingOrOffset)
  }

  return isModern
    ? Buffer.from(value)
    : new Buffer(value)
}

module.exports = bufferFrom
MIT License

Copyright (c) 2016, 2018 Linus UnnebÃ¤ck

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "buffer-from",
  "version": "1.1.1",
  "license": "MIT",
  "repository": "LinusU/buffer-from",
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "standard": "^7.1.2"
  }
}# Authors

#### Ordered by first contribution.

- Romain Beauxis (toots@rastageeks.org)
- Tobias Koppers (tobias.koppers@googlemail.com)
- Janus (ysangkok@gmail.com)
- Rainer Dreyer (rdrey1@gmail.com)
- ToÌƒnis Tiigi (tonistiigi@gmail.com)
- James Halliday (mail@substack.net)
- Michael Williamson (mike@zwobble.org)
- elliottcable (github@elliottcable.name)
- rafael (rvalle@livelens.net)
- Andrew Kelley (superjoe30@gmail.com)
- Andreas Madsen (amwebdk@gmail.com)
- Mike Brevoort (mike.brevoort@pearson.com)
- Brian White (mscdex@mscdex.net)
- Feross Aboukhadijeh (feross@feross.org)
- Ruben Verborgh (ruben@verborgh.org)
- eliang (eliang.cs@gmail.com)
- Jesse Tane (jesse.tane@gmail.com)
- Alfonso Boza (alfonso@cloud.com)
- Mathias Buus (mathiasbuus@gmail.com)
- Devon Govett (devongovett@gmail.com)
- Daniel Cousens (github@dcousens.com)
- Joseph Dykstra (josephdykstra@gmail.com)
- Parsha Pourkhomami (parshap+git@gmail.com)
- Damjan KoÅ¡ir (damjan.kosir@gmail.com)
- daverayment (dave.rayment@gmail.com)
- kawanet (u-suke@kawa.net)
- Linus UnnebÃ¤ck (linus@folkdatorn.se)
- Nolan Lawson (nolan.lawson@gmail.com)
- Calvin Metcalf (calvin.metcalf@gmail.com)
- Koki Takahashi (hakatasiloving@gmail.com)
- Guy Bedford (guybedford@gmail.com)
- Jan SchÃ¤r (jscissr@gmail.com)
- RaulTsc (tomescu.raul@gmail.com)
- Matthieu Monsch (monsch@alum.mit.edu)
- Dan Ehrenberg (littledan@chromium.org)
- Kirill Fomichev (fanatid@ya.ru)
- Yusuke Kawasaki (u-suke@kawa.net)
- DC (dcposch@dcpos.ch)
- John-David Dalton (john.david.dalton@gmail.com)
- adventure-yunfei (adventure030@gmail.com)
- Emil Bay (github@tixz.dk)
- Sam Sudar (sudar.sam@gmail.com)
- Volker Mische (volker.mische@gmail.com)
- David Walton (support@geekstocks.com)
- Ð¡ÐºÐ¾Ð²Ð¾Ñ€Ð¾Ð´Ð° ÐÐ¸ÐºÐ¸Ñ‚Ð° ÐÐ½Ð´Ñ€ÐµÐµÐ²Ð¸Ñ‡ (chalkerx@gmail.com)
- greenkeeper[bot] (greenkeeper[bot]@users.noreply.github.com)
- ukstv (sergey.ukustov@machinomy.com)
- RenÃ©e Kooi (renee@kooi.me)
- ranbochen (ranbochen@qq.com)
- Vladimir Borovik (bobahbdb@gmail.com)
- greenkeeper[bot] (23040076+greenkeeper[bot]@users.noreply.github.com)
- kumavis (aaron@kumavis.me)
- Sergey Ukustov (sergey.ukustov@machinomy.com)
- Fei Liu (liu.feiwood@gmail.com)
- Blaine Bublitz (blaine.bublitz@gmail.com)
- clement (clement@seald.io)
- Koushik Dutta (koushd@gmail.com)
- Jordan Harband (ljharb@gmail.com)
- Niklas Mischkulnig (mischnic@users.noreply.github.com)
- Nikolai Vavilov (vvnicholas@gmail.com)
- Fedor Nezhivoi (gyzerok@users.noreply.github.com)
- Peter Newman (peternewman@users.noreply.github.com)
- mathmakgakpak (44949126+mathmakgakpak@users.noreply.github.com)
- jkkang (jkkang@smartauth.kr)

#### Generated by bin/update-authors.sh.
/*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <https://feross.org>
 * @license  MIT
 */
/* eslint-disable no-proto */

'use strict'

var base64 = require('base64-js')
var ieee754 = require('ieee754')
var customInspectSymbol =
  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation
    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation
    : null

exports.Buffer = Buffer
exports.SlowBuffer = SlowBuffer
exports.INSPECT_MAX_BYTES = 50

var K_MAX_LENGTH = 0x7fffffff
exports.kMaxLength = K_MAX_LENGTH

/**
 * If `Buffer.TYPED_ARRAY_SUPPORT`:
 *   === true    Use Uint8Array implementation (fastest)
 *   === false   Print warning and recommend using `buffer` v4.x which has an Object
 *               implementation (most compatible, even IE6)
 *
 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
 * Opera 11.6+, iOS 4.2+.
 *
 * We report that the browser does not support typed arrays if the are not subclassable
 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
 * for __proto__ and has a buggy typed array implementation.
 */
Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()

if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
    typeof console.error === 'function') {
  console.error(
    'This browser lacks typed array (Uint8Array) support which is required by ' +
    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
  )
}

function typedArraySupport () {
  // Can typed array instances can be augmented?
  try {
    var arr = new Uint8Array(1)
    var proto = { foo: function () { return 42 } }
    Object.setPrototypeOf(proto, Uint8Array.prototype)
    Object.setPrototypeOf(arr, proto)
    return arr.foo() === 42
  } catch (e) {
    return false
  }
}

Object.defineProperty(Buffer.prototype, 'parent', {
  enumerable: true,
  get: function () {
    if (!Buffer.isBuffer(this)) return undefined
    return this.buffer
  }
})

Object.defineProperty(Buffer.prototype, 'offset', {
  enumerable: true,
  get: function () {
    if (!Buffer.isBuffer(this)) return undefined
    return this.byteOffset
  }
})

function createBuffer (length) {
  if (length > K_MAX_LENGTH) {
    throw new RangeError('The value "' + length + '" is invalid for option "size"')
  }
  // Return an augmented `Uint8Array` instance
  var buf = new Uint8Array(length)
  Object.setPrototypeOf(buf, Buffer.prototype)
  return buf
}

/**
 * The Buffer constructor returns instances of `Uint8Array` that have their
 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
 * returns a single octet.
 *
 * The `Uint8Array` prototype remains unmodified.
 */

function Buffer (arg, encodingOrOffset, length) {
  // Common case.
  if (typeof arg === 'number') {
    if (typeof encodingOrOffset === 'string') {
      throw new TypeError(
        'The "string" argument must be of type string. Received type number'
      )
    }
    return allocUnsafe(arg)
  }
  return from(arg, encodingOrOffset, length)
}

Buffer.poolSize = 8192 // not used by this implementation

function from (value, encodingOrOffset, length) {
  if (typeof value === 'string') {
    return fromString(value, encodingOrOffset)
  }

  if (ArrayBuffer.isView(value)) {
    return fromArrayView(value)
  }

  if (value == null) {
    throw new TypeError(
      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
      'or Array-like Object. Received type ' + (typeof value)
    )
  }

  if (isInstance(value, ArrayBuffer) ||
      (value && isInstance(value.buffer, ArrayBuffer))) {
    return fromArrayBuffer(value, encodingOrOffset, length)
  }

  if (typeof SharedArrayBuffer !== 'undefined' &&
      (isInstance(value, SharedArrayBuffer) ||
      (value && isInstance(value.buffer, SharedArrayBuffer)))) {
    return fromArrayBuffer(value, encodingOrOffset, length)
  }

  if (typeof value === 'number') {
    throw new TypeError(
      'The "value" argument must not be of type number. Received type number'
    )
  }

  var valueOf = value.valueOf && value.valueOf()
  if (valueOf != null && valueOf !== value) {
    return Buffer.from(valueOf, encodingOrOffset, length)
  }

  var b = fromObject(value)
  if (b) return b

  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
      typeof value[Symbol.toPrimitive] === 'function') {
    return Buffer.from(
      value[Symbol.toPrimitive]('string'), encodingOrOffset, length
    )
  }

  throw new TypeError(
    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
    'or Array-like Object. Received type ' + (typeof value)
  )
}

/**
 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
 * if value is a number.
 * Buffer.from(str[, encoding])
 * Buffer.from(array)
 * Buffer.from(buffer)
 * Buffer.from(arrayBuffer[, byteOffset[, length]])
 **/
Buffer.from = function (value, encodingOrOffset, length) {
  return from(value, encodingOrOffset, length)
}

// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
// https://github.com/feross/buffer/pull/148
Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)
Object.setPrototypeOf(Buffer, Uint8Array)

function assertSize (size) {
  if (typeof size !== 'number') {
    throw new TypeError('"size" argument must be of type number')
  } else if (size < 0) {
    throw new RangeError('The value "' + size + '" is invalid for option "size"')
  }
}

function alloc (size, fill, encoding) {
  assertSize(size)
  if (size <= 0) {
    return createBuffer(size)
  }
  if (fill !== undefined) {
    // Only pay attention to encoding if it's a string. This
    // prevents accidentally sending in a number that would
    // be interpreted as a start offset.
    return typeof encoding === 'string'
      ? createBuffer(size).fill(fill, encoding)
      : createBuffer(size).fill(fill)
  }
  return createBuffer(size)
}

/**
 * Creates a new filled Buffer instance.
 * alloc(size[, fill[, encoding]])
 **/
Buffer.alloc = function (size, fill, encoding) {
  return alloc(size, fill, encoding)
}

function allocUnsafe (size) {
  assertSize(size)
  return createBuffer(size < 0 ? 0 : checked(size) | 0)
}

/**
 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
 * */
Buffer.allocUnsafe = function (size) {
  return allocUnsafe(size)
}
/**
 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
 */
Buffer.allocUnsafeSlow = function (size) {
  return allocUnsafe(size)
}

function fromString (string, encoding) {
  if (typeof encoding !== 'string' || encoding === '') {
    encoding = 'utf8'
  }

  if (!Buffer.isEncoding(encoding)) {
    throw new TypeError('Unknown encoding: ' + encoding)
  }

  var length = byteLength(string, encoding) | 0
  var buf = createBuffer(length)

  var actual = buf.write(string, encoding)

  if (actual !== length) {
    // Writing a hex string, for example, that contains invalid characters will
    // cause everything after the first invalid character to be ignored. (e.g.
    // 'abxxcd' will be treated as 'ab')
    buf = buf.slice(0, actual)
  }

  return buf
}

function fromArrayLike (array) {
  var length = array.length < 0 ? 0 : checked(array.length) | 0
  var buf = createBuffer(length)
  for (var i = 0; i < length; i += 1) {
    buf[i] = array[i] & 255
  }
  return buf
}

function fromArrayView (arrayView) {
  if (isInstance(arrayView, Uint8Array)) {
    var copy = new Uint8Array(arrayView)
    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)
  }
  return fromArrayLike(arrayView)
}

function fromArrayBuffer (array, byteOffset, length) {
  if (byteOffset < 0 || array.byteLength < byteOffset) {
    throw new RangeError('"offset" is outside of buffer bounds')
  }

  if (array.byteLength < byteOffset + (length || 0)) {
    throw new RangeError('"length" is outside of buffer bounds')
  }

  var buf
  if (byteOffset === undefined && length === undefined) {
    buf = new Uint8Array(array)
  } else if (length === undefined) {
    buf = new Uint8Array(array, byteOffset)
  } else {
    buf = new Uint8Array(array, byteOffset, length)
  }

  // Return an augmented `Uint8Array` instance
  Object.setPrototypeOf(buf, Buffer.prototype)

  return buf
}

function fromObject (obj) {
  if (Buffer.isBuffer(obj)) {
    var len = checked(obj.length) | 0
    var buf = createBuffer(len)

    if (buf.length === 0) {
      return buf
    }

    obj.copy(buf, 0, 0, len)
    return buf
  }

  if (obj.length !== undefined) {
    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
      return createBuffer(0)
    }
    return fromArrayLike(obj)
  }

  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
    return fromArrayLike(obj.data)
  }
}

function checked (length) {
  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
  // length is NaN (which is otherwise coerced to zero.)
  if (length >= K_MAX_LENGTH) {
    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
  }
  return length | 0
}

function SlowBuffer (length) {
  if (+length != length) { // eslint-disable-line eqeqeq
    length = 0
  }
  return Buffer.alloc(+length)
}

Buffer.isBuffer = function isBuffer (b) {
  return b != null && b._isBuffer === true &&
    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
}

Buffer.compare = function compare (a, b) {
  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
    throw new TypeError(
      'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
    )
  }

  if (a === b) return 0

  var x = a.length
  var y = b.length

  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
    if (a[i] !== b[i]) {
      x = a[i]
      y = b[i]
      break
    }
  }

  if (x < y) return -1
  if (y < x) return 1
  return 0
}

Buffer.isEncoding = function isEncoding (encoding) {
  switch (String(encoding).toLowerCase()) {
    case 'hex':
    case 'utf8':
    case 'utf-8':
    case 'ascii':
    case 'latin1':
    case 'binary':
    case 'base64':
    case 'ucs2':
    case 'ucs-2':
    case 'utf16le':
    case 'utf-16le':
      return true
    default:
      return false
  }
}

Buffer.concat = function concat (list, length) {
  if (!Array.isArray(list)) {
    throw new TypeError('"list" argument must be an Array of Buffers')
  }

  if (list.length === 0) {
    return Buffer.alloc(0)
  }

  var i
  if (length === undefined) {
    length = 0
    for (i = 0; i < list.length; ++i) {
      length += list[i].length
    }
  }

  var buffer = Buffer.allocUnsafe(length)
  var pos = 0
  for (i = 0; i < list.length; ++i) {
    var buf = list[i]
    if (isInstance(buf, Uint8Array)) {
      if (pos + buf.length > buffer.length) {
        Buffer.from(buf).copy(buffer, pos)
      } else {
        Uint8Array.prototype.set.call(
          buffer,
          buf,
          pos
        )
      }
    } else if (!Buffer.isBuffer(buf)) {
      throw new TypeError('"list" argument must be an Array of Buffers')
    } else {
      buf.copy(buffer, pos)
    }
    pos += buf.length
  }
  return buffer
}

function byteLength (string, encoding) {
  if (Buffer.isBuffer(string)) {
    return string.length
  }
  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
    return string.byteLength
  }
  if (typeof string !== 'string') {
    throw new TypeError(
      'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
      'Received type ' + typeof string
    )
  }

  var len = string.length
  var mustMatch = (arguments.length > 2 && arguments[2] === true)
  if (!mustMatch && len === 0) return 0

  // Use a for loop to avoid recursion
  var loweredCase = false
  for (;;) {
    switch (encoding) {
      case 'ascii':
      case 'latin1':
      case 'binary':
        return len
      case 'utf8':
      case 'utf-8':
        return utf8ToBytes(string).length
      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return len * 2
      case 'hex':
        return len >>> 1
      case 'base64':
        return base64ToBytes(string).length
      default:
        if (loweredCase) {
          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
        }
        encoding = ('' + encoding).toLowerCase()
        loweredCase = true
    }
  }
}
Buffer.byteLength = byteLength

function slowToString (encoding, start, end) {
  var loweredCase = false

  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
  // property of a typed array.

  // This behaves neither like String nor Uint8Array in that we set start/end
  // to their upper/lower bounds if the value passed is out of range.
  // undefined is handled specially as per ECMA-262 6th Edition,
  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
  if (start === undefined || start < 0) {
    start = 0
  }
  // Return early if start > this.length. Done here to prevent potential uint32
  // coercion fail below.
  if (start > this.length) {
    return ''
  }

  if (end === undefined || end > this.length) {
    end = this.length
  }

  if (end <= 0) {
    return ''
  }

  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.
  end >>>= 0
  start >>>= 0

  if (end <= start) {
    return ''
  }

  if (!encoding) encoding = 'utf8'

  while (true) {
    switch (encoding) {
      case 'hex':
        return hexSlice(this, start, end)

      case 'utf8':
      case 'utf-8':
        return utf8Slice(this, start, end)

      case 'ascii':
        return asciiSlice(this, start, end)

      case 'latin1':
      case 'binary':
        return latin1Slice(this, start, end)

      case 'base64':
        return base64Slice(this, start, end)

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return utf16leSlice(this, start, end)

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
        encoding = (encoding + '').toLowerCase()
        loweredCase = true
    }
  }
}

// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
// reliably in a browserify context because there could be multiple different
// copies of the 'buffer' package in use. This method works even for Buffer
// instances that were created from another copy of the `buffer` package.
// See: https://github.com/feross/buffer/issues/154
Buffer.prototype._isBuffer = true

function swap (b, n, m) {
  var i = b[n]
  b[n] = b[m]
  b[m] = i
}

Buffer.prototype.swap16 = function swap16 () {
  var len = this.length
  if (len % 2 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 16-bits')
  }
  for (var i = 0; i < len; i += 2) {
    swap(this, i, i + 1)
  }
  return this
}

Buffer.prototype.swap32 = function swap32 () {
  var len = this.length
  if (len % 4 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 32-bits')
  }
  for (var i = 0; i < len; i += 4) {
    swap(this, i, i + 3)
    swap(this, i + 1, i + 2)
  }
  return this
}

Buffer.prototype.swap64 = function swap64 () {
  var len = this.length
  if (len % 8 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 64-bits')
  }
  for (var i = 0; i < len; i += 8) {
    swap(this, i, i + 7)
    swap(this, i + 1, i + 6)
    swap(this, i + 2, i + 5)
    swap(this, i + 3, i + 4)
  }
  return this
}

Buffer.prototype.toString = function toString () {
  var length = this.length
  if (length === 0) return ''
  if (arguments.length === 0) return utf8Slice(this, 0, length)
  return slowToString.apply(this, arguments)
}

Buffer.prototype.toLocaleString = Buffer.prototype.toString

Buffer.prototype.equals = function equals (b) {
  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
  if (this === b) return true
  return Buffer.compare(this, b) === 0
}

Buffer.prototype.inspect = function inspect () {
  var str = ''
  var max = exports.INSPECT_MAX_BYTES
  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
  if (this.length > max) str += ' ... '
  return '<Buffer ' + str + '>'
}
if (customInspectSymbol) {
  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect
}

Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
  if (isInstance(target, Uint8Array)) {
    target = Buffer.from(target, target.offset, target.byteLength)
  }
  if (!Buffer.isBuffer(target)) {
    throw new TypeError(
      'The "target" argument must be one of type Buffer or Uint8Array. ' +
      'Received type ' + (typeof target)
    )
  }

  if (start === undefined) {
    start = 0
  }
  if (end === undefined) {
    end = target ? target.length : 0
  }
  if (thisStart === undefined) {
    thisStart = 0
  }
  if (thisEnd === undefined) {
    thisEnd = this.length
  }

  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
    throw new RangeError('out of range index')
  }

  if (thisStart >= thisEnd && start >= end) {
    return 0
  }
  if (thisStart >= thisEnd) {
    return -1
  }
  if (start >= end) {
    return 1
  }

  start >>>= 0
  end >>>= 0
  thisStart >>>= 0
  thisEnd >>>= 0

  if (this === target) return 0

  var x = thisEnd - thisStart
  var y = end - start
  var len = Math.min(x, y)

  var thisCopy = this.slice(thisStart, thisEnd)
  var targetCopy = target.slice(start, end)

  for (var i = 0; i < len; ++i) {
    if (thisCopy[i] !== targetCopy[i]) {
      x = thisCopy[i]
      y = targetCopy[i]
      break
    }
  }

  if (x < y) return -1
  if (y < x) return 1
  return 0
}

// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf
function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
  // Empty buffer means no match
  if (buffer.length === 0) return -1

  // Normalize byteOffset
  if (typeof byteOffset === 'string') {
    encoding = byteOffset
    byteOffset = 0
  } else if (byteOffset > 0x7fffffff) {
    byteOffset = 0x7fffffff
  } else if (byteOffset < -0x80000000) {
    byteOffset = -0x80000000
  }
  byteOffset = +byteOffset // Coerce to Number.
  if (numberIsNaN(byteOffset)) {
    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
    byteOffset = dir ? 0 : (buffer.length - 1)
  }

  // Normalize byteOffset: negative offsets start from the end of the buffer
  if (byteOffset < 0) byteOffset = buffer.length + byteOffset
  if (byteOffset >= buffer.length) {
    if (dir) return -1
    else byteOffset = buffer.length - 1
  } else if (byteOffset < 0) {
    if (dir) byteOffset = 0
    else return -1
  }

  // Normalize val
  if (typeof val === 'string') {
    val = Buffer.from(val, encoding)
  }

  // Finally, search either indexOf (if dir is true) or lastIndexOf
  if (Buffer.isBuffer(val)) {
    // Special case: looking for empty string/buffer always fails
    if (val.length === 0) {
      return -1
    }
    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
  } else if (typeof val === 'number') {
    val = val & 0xFF // Search for a byte value [0-255]
    if (typeof Uint8Array.prototype.indexOf === 'function') {
      if (dir) {
        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
      } else {
        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
      }
    }
    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)
  }

  throw new TypeError('val must be string, number or Buffer')
}

function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
  var indexSize = 1
  var arrLength = arr.length
  var valLength = val.length

  if (encoding !== undefined) {
    encoding = String(encoding).toLowerCase()
    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
        encoding === 'utf16le' || encoding === 'utf-16le') {
      if (arr.length < 2 || val.length < 2) {
        return -1
      }
      indexSize = 2
      arrLength /= 2
      valLength /= 2
      byteOffset /= 2
    }
  }

  function read (buf, i) {
    if (indexSize === 1) {
      return buf[i]
    } else {
      return buf.readUInt16BE(i * indexSize)
    }
  }

  var i
  if (dir) {
    var foundIndex = -1
    for (i = byteOffset; i < arrLength; i++) {
      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
        if (foundIndex === -1) foundIndex = i
        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
      } else {
        if (foundIndex !== -1) i -= i - foundIndex
        foundIndex = -1
      }
    }
  } else {
    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
    for (i = byteOffset; i >= 0; i--) {
      var found = true
      for (var j = 0; j < valLength; j++) {
        if (read(arr, i + j) !== read(val, j)) {
          found = false
          break
        }
      }
      if (found) return i
    }
  }

  return -1
}

Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
  return this.indexOf(val, byteOffset, encoding) !== -1
}

Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
}

Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
}

function hexWrite (buf, string, offset, length) {
  offset = Number(offset) || 0
  var remaining = buf.length - offset
  if (!length) {
    length = remaining
  } else {
    length = Number(length)
    if (length > remaining) {
      length = remaining
    }
  }

  var strLen = string.length

  if (length > strLen / 2) {
    length = strLen / 2
  }
  for (var i = 0; i < length; ++i) {
    var parsed = parseInt(string.substr(i * 2, 2), 16)
    if (numberIsNaN(parsed)) return i
    buf[offset + i] = parsed
  }
  return i
}

function utf8Write (buf, string, offset, length) {
  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}

function asciiWrite (buf, string, offset, length) {
  return blitBuffer(asciiToBytes(string), buf, offset, length)
}

function base64Write (buf, string, offset, length) {
  return blitBuffer(base64ToBytes(string), buf, offset, length)
}

function ucs2Write (buf, string, offset, length) {
  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
}

Buffer.prototype.write = function write (string, offset, length, encoding) {
  // Buffer#write(string)
  if (offset === undefined) {
    encoding = 'utf8'
    length = this.length
    offset = 0
  // Buffer#write(string, encoding)
  } else if (length === undefined && typeof offset === 'string') {
    encoding = offset
    length = this.length
    offset = 0
  // Buffer#write(string, offset[, length][, encoding])
  } else if (isFinite(offset)) {
    offset = offset >>> 0
    if (isFinite(length)) {
      length = length >>> 0
      if (encoding === undefined) encoding = 'utf8'
    } else {
      encoding = length
      length = undefined
    }
  } else {
    throw new Error(
      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
    )
  }

  var remaining = this.length - offset
  if (length === undefined || length > remaining) length = remaining

  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
    throw new RangeError('Attempt to write outside buffer bounds')
  }

  if (!encoding) encoding = 'utf8'

  var loweredCase = false
  for (;;) {
    switch (encoding) {
      case 'hex':
        return hexWrite(this, string, offset, length)

      case 'utf8':
      case 'utf-8':
        return utf8Write(this, string, offset, length)

      case 'ascii':
      case 'latin1':
      case 'binary':
        return asciiWrite(this, string, offset, length)

      case 'base64':
        // Warning: maxLength not taken into account in base64Write
        return base64Write(this, string, offset, length)

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return ucs2Write(this, string, offset, length)

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
        encoding = ('' + encoding).toLowerCase()
        loweredCase = true
    }
  }
}

Buffer.prototype.toJSON = function toJSON () {
  return {
    type: 'Buffer',
    data: Array.prototype.slice.call(this._arr || this, 0)
  }
}

function base64Slice (buf, start, end) {
  if (start === 0 && end === buf.length) {
    return base64.fromByteArray(buf)
  } else {
    return base64.fromByteArray(buf.slice(start, end))
  }
}

function utf8Slice (buf, start, end) {
  end = Math.min(buf.length, end)
  var res = []

  var i = start
  while (i < end) {
    var firstByte = buf[i]
    var codePoint = null
    var bytesPerSequence = (firstByte > 0xEF)
      ? 4
      : (firstByte > 0xDF)
          ? 3
          : (firstByte > 0xBF)
              ? 2
              : 1

    if (i + bytesPerSequence <= end) {
      var secondByte, thirdByte, fourthByte, tempCodePoint

      switch (bytesPerSequence) {
        case 1:
          if (firstByte < 0x80) {
            codePoint = firstByte
          }
          break
        case 2:
          secondByte = buf[i + 1]
          if ((secondByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
            if (tempCodePoint > 0x7F) {
              codePoint = tempCodePoint
            }
          }
          break
        case 3:
          secondByte = buf[i + 1]
          thirdByte = buf[i + 2]
          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
              codePoint = tempCodePoint
            }
          }
          break
        case 4:
          secondByte = buf[i + 1]
          thirdByte = buf[i + 2]
          fourthByte = buf[i + 3]
          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
              codePoint = tempCodePoint
            }
          }
      }
    }

    if (codePoint === null) {
      // we did not generate a valid codePoint so insert a
      // replacement char (U+FFFD) and advance only 1 byte
      codePoint = 0xFFFD
      bytesPerSequence = 1
    } else if (codePoint > 0xFFFF) {
      // encode to utf16 (surrogate pair dance)
      codePoint -= 0x10000
      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
      codePoint = 0xDC00 | codePoint & 0x3FF
    }

    res.push(codePoint)
    i += bytesPerSequence
  }

  return decodeCodePointsArray(res)
}

// Based on http://stackoverflow.com/a/22747272/680742, the browser with
// the lowest limit is Chrome, with 0x10000 args.
// We go 1 magnitude less, for safety
var MAX_ARGUMENTS_LENGTH = 0x1000

function decodeCodePointsArray (codePoints) {
  var len = codePoints.length
  if (len <= MAX_ARGUMENTS_LENGTH) {
    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
  }

  // Decode in chunks to avoid "call stack size exceeded".
  var res = ''
  var i = 0
  while (i < len) {
    res += String.fromCharCode.apply(
      String,
      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
    )
  }
  return res
}

function asciiSlice (buf, start, end) {
  var ret = ''
  end = Math.min(buf.length, end)

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i] & 0x7F)
  }
  return ret
}

function latin1Slice (buf, start, end) {
  var ret = ''
  end = Math.min(buf.length, end)

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i])
  }
  return ret
}

function hexSlice (buf, start, end) {
  var len = buf.length

  if (!start || start < 0) start = 0
  if (!end || end < 0 || end > len) end = len

  var out = ''
  for (var i = start; i < end; ++i) {
    out += hexSliceLookupTable[buf[i]]
  }
  return out
}

function utf16leSlice (buf, start, end) {
  var bytes = buf.slice(start, end)
  var res = ''
  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)
  for (var i = 0; i < bytes.length - 1; i += 2) {
    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
  }
  return res
}

Buffer.prototype.slice = function slice (start, end) {
  var len = this.length
  start = ~~start
  end = end === undefined ? len : ~~end

  if (start < 0) {
    start += len
    if (start < 0) start = 0
  } else if (start > len) {
    start = len
  }

  if (end < 0) {
    end += len
    if (end < 0) end = 0
  } else if (end > len) {
    end = len
  }

  if (end < start) end = start

  var newBuf = this.subarray(start, end)
  // Return an augmented `Uint8Array` instance
  Object.setPrototypeOf(newBuf, Buffer.prototype)

  return newBuf
}

/*
 * Need to make sure that buffer isn't trying to write out of bounds.
 */
function checkOffset (offset, ext, length) {
  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
}

Buffer.prototype.readUintLE =
Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var val = this[offset]
  var mul = 1
  var i = 0
  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul
  }

  return val
}

Buffer.prototype.readUintBE =
Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    checkOffset(offset, byteLength, this.length)
  }

  var val = this[offset + --byteLength]
  var mul = 1
  while (byteLength > 0 && (mul *= 0x100)) {
    val += this[offset + --byteLength] * mul
  }

  return val
}

Buffer.prototype.readUint8 =
Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 1, this.length)
  return this[offset]
}

Buffer.prototype.readUint16LE =
Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  return this[offset] | (this[offset + 1] << 8)
}

Buffer.prototype.readUint16BE =
Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  return (this[offset] << 8) | this[offset + 1]
}

Buffer.prototype.readUint32LE =
Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return ((this[offset]) |
      (this[offset + 1] << 8) |
      (this[offset + 2] << 16)) +
      (this[offset + 3] * 0x1000000)
}

Buffer.prototype.readUint32BE =
Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset] * 0x1000000) +
    ((this[offset + 1] << 16) |
    (this[offset + 2] << 8) |
    this[offset + 3])
}

Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var val = this[offset]
  var mul = 1
  var i = 0
  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul
  }
  mul *= 0x80

  if (val >= mul) val -= Math.pow(2, 8 * byteLength)

  return val
}

Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var i = byteLength
  var mul = 1
  var val = this[offset + --i]
  while (i > 0 && (mul *= 0x100)) {
    val += this[offset + --i] * mul
  }
  mul *= 0x80

  if (val >= mul) val -= Math.pow(2, 8 * byteLength)

  return val
}

Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 1, this.length)
  if (!(this[offset] & 0x80)) return (this[offset])
  return ((0xff - this[offset] + 1) * -1)
}

Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  var val = this[offset] | (this[offset + 1] << 8)
  return (val & 0x8000) ? val | 0xFFFF0000 : val
}

Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  var val = this[offset + 1] | (this[offset] << 8)
  return (val & 0x8000) ? val | 0xFFFF0000 : val
}

Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset]) |
    (this[offset + 1] << 8) |
    (this[offset + 2] << 16) |
    (this[offset + 3] << 24)
}

Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset] << 24) |
    (this[offset + 1] << 16) |
    (this[offset + 2] << 8) |
    (this[offset + 3])
}

Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)
  return ieee754.read(this, offset, true, 23, 4)
}

Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)
  return ieee754.read(this, offset, false, 23, 4)
}

Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 8, this.length)
  return ieee754.read(this, offset, true, 52, 8)
}

Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 8, this.length)
  return ieee754.read(this, offset, false, 52, 8)
}

function checkInt (buf, value, offset, ext, max, min) {
  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
  if (offset + ext > buf.length) throw new RangeError('Index out of range')
}

Buffer.prototype.writeUintLE =
Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1
    checkInt(this, value, offset, byteLength, maxBytes, 0)
  }

  var mul = 1
  var i = 0
  this[offset] = value & 0xFF
  while (++i < byteLength && (mul *= 0x100)) {
    this[offset + i] = (value / mul) & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeUintBE =
Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1
    checkInt(this, value, offset, byteLength, maxBytes, 0)
  }

  var i = byteLength - 1
  var mul = 1
  this[offset + i] = value & 0xFF
  while (--i >= 0 && (mul *= 0x100)) {
    this[offset + i] = (value / mul) & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeUint8 =
Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
  this[offset] = (value & 0xff)
  return offset + 1
}

Buffer.prototype.writeUint16LE =
Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  return offset + 2
}

Buffer.prototype.writeUint16BE =
Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  this[offset] = (value >>> 8)
  this[offset + 1] = (value & 0xff)
  return offset + 2
}

Buffer.prototype.writeUint32LE =
Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  this[offset + 3] = (value >>> 24)
  this[offset + 2] = (value >>> 16)
  this[offset + 1] = (value >>> 8)
  this[offset] = (value & 0xff)
  return offset + 4
}

Buffer.prototype.writeUint32BE =
Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  this[offset] = (value >>> 24)
  this[offset + 1] = (value >>> 16)
  this[offset + 2] = (value >>> 8)
  this[offset + 3] = (value & 0xff)
  return offset + 4
}

Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    var limit = Math.pow(2, (8 * byteLength) - 1)

    checkInt(this, value, offset, byteLength, limit - 1, -limit)
  }

  var i = 0
  var mul = 1
  var sub = 0
  this[offset] = value & 0xFF
  while (++i < byteLength && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
      sub = 1
    }
    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    var limit = Math.pow(2, (8 * byteLength) - 1)

    checkInt(this, value, offset, byteLength, limit - 1, -limit)
  }

  var i = byteLength - 1
  var mul = 1
  var sub = 0
  this[offset + i] = value & 0xFF
  while (--i >= 0 && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
      sub = 1
    }
    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
  if (value < 0) value = 0xff + value + 1
  this[offset] = (value & 0xff)
  return offset + 1
}

Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  return offset + 2
}

Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  this[offset] = (value >>> 8)
  this[offset + 1] = (value & 0xff)
  return offset + 2
}

Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  this[offset + 2] = (value >>> 16)
  this[offset + 3] = (value >>> 24)
  return offset + 4
}

Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  if (value < 0) value = 0xffffffff + value + 1
  this[offset] = (value >>> 24)
  this[offset + 1] = (value >>> 16)
  this[offset + 2] = (value >>> 8)
  this[offset + 3] = (value & 0xff)
  return offset + 4
}

function checkIEEE754 (buf, value, offset, ext, max, min) {
  if (offset + ext > buf.length) throw new RangeError('Index out of range')
  if (offset < 0) throw new RangeError('Index out of range')
}

function writeFloat (buf, value, offset, littleEndian, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
  }
  ieee754.write(buf, value, offset, littleEndian, 23, 4)
  return offset + 4
}

Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
  return writeFloat(this, value, offset, true, noAssert)
}

Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
  return writeFloat(this, value, offset, false, noAssert)
}

function writeDouble (buf, value, offset, littleEndian, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
  }
  ieee754.write(buf, value, offset, littleEndian, 52, 8)
  return offset + 8
}

Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
  return writeDouble(this, value, offset, true, noAssert)
}

Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
  return writeDouble(this, value, offset, false, noAssert)
}

// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
  if (!start) start = 0
  if (!end && end !== 0) end = this.length
  if (targetStart >= target.length) targetStart = target.length
  if (!targetStart) targetStart = 0
  if (end > 0 && end < start) end = start

  // Copy 0 bytes; we're done
  if (end === start) return 0
  if (target.length === 0 || this.length === 0) return 0

  // Fatal error conditions
  if (targetStart < 0) {
    throw new RangeError('targetStart out of bounds')
  }
  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
  if (end < 0) throw new RangeError('sourceEnd out of bounds')

  // Are we oob?
  if (end > this.length) end = this.length
  if (target.length - targetStart < end - start) {
    end = target.length - targetStart + start
  }

  var len = end - start

  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
    // Use built-in when available, missing from IE11
    this.copyWithin(targetStart, start, end)
  } else {
    Uint8Array.prototype.set.call(
      target,
      this.subarray(start, end),
      targetStart
    )
  }

  return len
}

// Usage:
//    buffer.fill(number[, offset[, end]])
//    buffer.fill(buffer[, offset[, end]])
//    buffer.fill(string[, offset[, end]][, encoding])
Buffer.prototype.fill = function fill (val, start, end, encoding) {
  // Handle string cases:
  if (typeof val === 'string') {
    if (typeof start === 'string') {
      encoding = start
      start = 0
      end = this.length
    } else if (typeof end === 'string') {
      encoding = end
      end = this.length
    }
    if (encoding !== undefined && typeof encoding !== 'string') {
      throw new TypeError('encoding must be a string')
    }
    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
      throw new TypeError('Unknown encoding: ' + encoding)
    }
    if (val.length === 1) {
      var code = val.charCodeAt(0)
      if ((encoding === 'utf8' && code < 128) ||
          encoding === 'latin1') {
        // Fast path: If `val` fits into a single byte, use that numeric value.
        val = code
      }
    }
  } else if (typeof val === 'number') {
    val = val & 255
  } else if (typeof val === 'boolean') {
    val = Number(val)
  }

  // Invalid ranges are not set to a default, so can range check early.
  if (start < 0 || this.length < start || this.length < end) {
    throw new RangeError('Out of range index')
  }

  if (end <= start) {
    return this
  }

  start = start >>> 0
  end = end === undefined ? this.length : end >>> 0

  if (!val) val = 0

  var i
  if (typeof val === 'number') {
    for (i = start; i < end; ++i) {
      this[i] = val
    }
  } else {
    var bytes = Buffer.isBuffer(val)
      ? val
      : Buffer.from(val, encoding)
    var len = bytes.length
    if (len === 0) {
      throw new TypeError('The value "' + val +
        '" is invalid for argument "value"')
    }
    for (i = 0; i < end - start; ++i) {
      this[i + start] = bytes[i % len]
    }
  }

  return this
}

// HELPER FUNCTIONS
// ================

var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g

function base64clean (str) {
  // Node takes equal signs as end of the Base64 encoding
  str = str.split('=')[0]
  // Node strips out invalid characters like \n and \t from the string, base64-js does not
  str = str.trim().replace(INVALID_BASE64_RE, '')
  // Node converts strings with length < 2 to ''
  if (str.length < 2) return ''
  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
  while (str.length % 4 !== 0) {
    str = str + '='
  }
  return str
}

function utf8ToBytes (string, units) {
  units = units || Infinity
  var codePoint
  var length = string.length
  var leadSurrogate = null
  var bytes = []

  for (var i = 0; i < length; ++i) {
    codePoint = string.charCodeAt(i)

    // is surrogate component
    if (codePoint > 0xD7FF && codePoint < 0xE000) {
      // last char was a lead
      if (!leadSurrogate) {
        // no lead yet
        if (codePoint > 0xDBFF) {
          // unexpected trail
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        } else if (i + 1 === length) {
          // unpaired lead
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        }

        // valid lead
        leadSurrogate = codePoint

        continue
      }

      // 2 leads in a row
      if (codePoint < 0xDC00) {
        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
        leadSurrogate = codePoint
        continue
      }

      // valid surrogate pair
      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
    } else if (leadSurrogate) {
      // valid bmp char, but last char was a lead
      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
    }

    leadSurrogate = null

    // encode utf8
    if (codePoint < 0x80) {
      if ((units -= 1) < 0) break
      bytes.push(codePoint)
    } else if (codePoint < 0x800) {
      if ((units -= 2) < 0) break
      bytes.push(
        codePoint >> 0x6 | 0xC0,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x10000) {
      if ((units -= 3) < 0) break
      bytes.push(
        codePoint >> 0xC | 0xE0,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x110000) {
      if ((units -= 4) < 0) break
      bytes.push(
        codePoint >> 0x12 | 0xF0,
        codePoint >> 0xC & 0x3F | 0x80,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else {
      throw new Error('Invalid code point')
    }
  }

  return bytes
}

function asciiToBytes (str) {
  var byteArray = []
  for (var i = 0; i < str.length; ++i) {
    // Node's code seems to be doing this and not & 0x7F..
    byteArray.push(str.charCodeAt(i) & 0xFF)
  }
  return byteArray
}

function utf16leToBytes (str, units) {
  var c, hi, lo
  var byteArray = []
  for (var i = 0; i < str.length; ++i) {
    if ((units -= 2) < 0) break

    c = str.charCodeAt(i)
    hi = c >> 8
    lo = c % 256
    byteArray.push(lo)
    byteArray.push(hi)
  }

  return byteArray
}

function base64ToBytes (str) {
  return base64.toByteArray(base64clean(str))
}

function blitBuffer (src, dst, offset, length) {
  for (var i = 0; i < length; ++i) {
    if ((i + offset >= dst.length) || (i >= src.length)) break
    dst[i + offset] = src[i]
  }
  return i
}

// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
// the `instanceof` check but they should be treated as of that type.
// See: https://github.com/feross/buffer/issues/166
function isInstance (obj, type) {
  return obj instanceof type ||
    (obj != null && obj.constructor != null && obj.constructor.name != null &&
      obj.constructor.name === type.name)
}
function numberIsNaN (obj) {
  // For IE11 support
  return obj !== obj // eslint-disable-line no-self-compare
}

// Create lookup table for `toString('hex')`
// See: https://github.com/feross/buffer/issues/219
var hexSliceLookupTable = (function () {
  var alphabet = '0123456789abcdef'
  var table = new Array(256)
  for (var i = 0; i < 16; ++i) {
    var i16 = i * 16
    for (var j = 0; j < 16; ++j) {
      table[i16 + j] = alphabet[i] + alphabet[j]
    }
  }
  return table
})()
The MIT License (MIT)

Copyright (c) Feross Aboukhadijeh, and other contributors.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "buffer",
  "description": "Node.js Buffer API, for the browser",
  "version": "5.7.1",
  "author": {
    "name": "Feross Aboukhadijeh",
    "email": "feross@feross.org",
    "url": "https://feross.org"
  },
  "dependencies": {
    "base64-js": "^1.3.1",
    "ieee754": "^1.1.13"
  },
  "devDependencies": {
    "airtap": "^3.0.0",
    "benchmark": "^2.1.4",
    "browserify": "^17.0.0",
    "concat-stream": "^2.0.0",
    "hyperquest": "^2.1.3",
    "is-buffer": "^2.0.4",
    "is-nan": "^1.3.0",
    "split": "^1.0.1",
    "standard": "*",
    "tape": "^5.0.1",
    "through2": "^4.0.2",
    "uglify-js": "^3.11.3"
  },
  "homepage": "https://github.com/feross/buffer",
  "license": "MIT",
  "main": "index.js",
  "types": "index.d.ts",
  "repository": {
    "type": "git",
    "url": "git://github.com/feross/buffer.git"
  },
  "standard": {
    "ignore": [
      "test/node/**/*.js",
      "test/common.js",
      "test/_polyfill.js",
      "perf/**/*.js"
    ],
    "globals": [
      "SharedArrayBuffer"
    ]
  },
  "funding": [
    {
      "type": "github",
      "url": "https://github.com/sponsors/feross"
    },
    {
      "type": "patreon",
      "url": "https://www.patreon.com/feross"
    },
    {
      "type": "consulting",
      "url": "https://feross.org/support"
    }
  ]
}
1.0.1 / 2018-07-18
==================

**others**
  * [[`88c57c0`](http://github.com/node-modules/cache-content-type/commit/88c57c0bd571da12d7917ae15ad67f02b7b5eabe)] - chore: support node 6 (dead-horse <<dead_horse@qq.com>>)

1.0.0 / 2018-07-11
==================

**features**
  * [[`ecb6476`](http://github.com/node-modules/cache-content-type/commit/ecb6476da4a714246f12a86c191dc05aad42e806)] - feat: cache result of mimeTypes.contentType (dead-horse <<dead_horse@qq.com>>),fatal: No names found, cannot describe anything.

**others**

'use strict';

const mimeTypes = require('mime-types');
const LRU = require('ylru');

const typeLRUCache = new LRU(100);

module.exports = type => {
  let mimeType = typeLRUCache.get(type);
  if (!mimeType) {
    mimeType = mimeTypes.contentType(type);
    typeLRUCache.set(type, mimeType);
  }
  return mimeType;
};
{
  "name": "cache-content-type",
  "version": "1.0.1",
  "description": "Create a full Content-Type header given a MIME type or extension and catch the result",
  "main": "index.js",
  "files": [
    "index.js"
  ],
  "dependencies": {
    "mime-types": "^2.1.18",
    "ylru": "^1.2.0"
  },
  "devDependencies": {
    "egg-bin": "^4.7.1",
    "egg-ci": "^1.8.0",
    "eslint": "^5.1.0",
    "eslint-config-egg": "^7.0.0",
    "mm": "^2.2.0"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/node-modules/cache-content-type.git"
  },
  "engines": {
    "node": ">= 6.0.0"
  },
  "ci": {
    "version": "6, 8, 10"
  },
  "author": "dead_horse",
  "license": "MIT"
}'use strict';

const preserveCamelCase = string => {
	let isLastCharLower = false;
	let isLastCharUpper = false;
	let isLastLastCharUpper = false;

	for (let i = 0; i < string.length; i++) {
		const character = string[i];

		if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {
			string = string.slice(0, i) + '-' + string.slice(i);
			isLastCharLower = false;
			isLastLastCharUpper = isLastCharUpper;
			isLastCharUpper = true;
			i++;
		} else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {
			string = string.slice(0, i - 1) + '-' + string.slice(i - 1);
			isLastLastCharUpper = isLastCharUpper;
			isLastCharUpper = false;
			isLastCharLower = true;
		} else {
			isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;
			isLastLastCharUpper = isLastCharUpper;
			isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;
		}
	}

	return string;
};

const camelCase = (input, options) => {
	if (!(typeof input === 'string' || Array.isArray(input))) {
		throw new TypeError('Expected the input to be `string | string[]`');
	}

	options = Object.assign({
		pascalCase: false
	}, options);

	const postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;

	if (Array.isArray(input)) {
		input = input.map(x => x.trim())
			.filter(x => x.length)
			.join('-');
	} else {
		input = input.trim();
	}

	if (input.length === 0) {
		return '';
	}

	if (input.length === 1) {
		return options.pascalCase ? input.toUpperCase() : input.toLowerCase();
	}

	const hasUpperCase = input !== input.toLowerCase();

	if (hasUpperCase) {
		input = preserveCamelCase(input);
	}

	input = input
		.replace(/^[_.\- ]+/, '')
		.toLowerCase()
		.replace(/[_.\- ]+(\w|$)/g, (_, p1) => p1.toUpperCase())
		.replace(/\d+(\w|$)/g, m => m.toUpperCase());

	return postProcess(input);
};

module.exports = camelCase;
// TODO: Remove this for the next major release
module.exports.default = camelCase;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "camelcase",
  "version": "5.3.1",
  "description": "Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` â†’ `fooBar`",
  "license": "MIT",
  "repository": "sindresorhus/camelcase",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "devDependencies": {
    "ava": "^1.4.1",
    "tsd": "^0.7.1",
    "xo": "^0.24.0"
  }
}var stringWidth = require('string-width')
var stripAnsi = require('strip-ansi')
var wrap = require('wrap-ansi')
var align = {
  right: alignRight,
  center: alignCenter
}
var top = 0
var right = 1
var bottom = 2
var left = 3

function UI (opts) {
  this.width = opts.width
  this.wrap = opts.wrap
  this.rows = []
}

UI.prototype.span = function () {
  var cols = this.div.apply(this, arguments)
  cols.span = true
}

UI.prototype.resetOutput = function () {
  this.rows = []
}

UI.prototype.div = function () {
  if (arguments.length === 0) this.div('')
  if (this.wrap && this._shouldApplyLayoutDSL.apply(this, arguments)) {
    return this._applyLayoutDSL(arguments[0])
  }

  var cols = []

  for (var i = 0, arg; (arg = arguments[i]) !== undefined; i++) {
    if (typeof arg === 'string') cols.push(this._colFromString(arg))
    else cols.push(arg)
  }

  this.rows.push(cols)
  return cols
}

UI.prototype._shouldApplyLayoutDSL = function () {
  return arguments.length === 1 && typeof arguments[0] === 'string' &&
    /[\t\n]/.test(arguments[0])
}

UI.prototype._applyLayoutDSL = function (str) {
  var _this = this
  var rows = str.split('\n')
  var leftColumnWidth = 0

  // simple heuristic for layout, make sure the
  // second column lines up along the left-hand.
  // don't allow the first column to take up more
  // than 50% of the screen.
  rows.forEach(function (row) {
    var columns = row.split('\t')
    if (columns.length > 1 && stringWidth(columns[0]) > leftColumnWidth) {
      leftColumnWidth = Math.min(
        Math.floor(_this.width * 0.5),
        stringWidth(columns[0])
      )
    }
  })

  // generate a table:
  //  replacing ' ' with padding calculations.
  //  using the algorithmically generated width.
  rows.forEach(function (row) {
    var columns = row.split('\t')
    _this.div.apply(_this, columns.map(function (r, i) {
      return {
        text: r.trim(),
        padding: _this._measurePadding(r),
        width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined
      }
    }))
  })

  return this.rows[this.rows.length - 1]
}

UI.prototype._colFromString = function (str) {
  return {
    text: str,
    padding: this._measurePadding(str)
  }
}

UI.prototype._measurePadding = function (str) {
  // measure padding without ansi escape codes
  var noAnsi = stripAnsi(str)
  return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length]
}

UI.prototype.toString = function () {
  var _this = this
  var lines = []

  _this.rows.forEach(function (row, i) {
    _this.rowToString(row, lines)
  })

  // don't display any lines with the
  // hidden flag set.
  lines = lines.filter(function (line) {
    return !line.hidden
  })

  return lines.map(function (line) {
    return line.text
  }).join('\n')
}

UI.prototype.rowToString = function (row, lines) {
  var _this = this
  var padding
  var rrows = this._rasterize(row)
  var str = ''
  var ts
  var width
  var wrapWidth

  rrows.forEach(function (rrow, r) {
    str = ''
    rrow.forEach(function (col, c) {
      ts = '' // temporary string used during alignment/padding.
      width = row[c].width // the width with padding.
      wrapWidth = _this._negatePadding(row[c]) // the width without padding.

      ts += col

      for (var i = 0; i < wrapWidth - stringWidth(col); i++) {
        ts += ' '
      }

      // align the string within its column.
      if (row[c].align && row[c].align !== 'left' && _this.wrap) {
        ts = align[row[c].align](ts, wrapWidth)
        if (stringWidth(ts) < wrapWidth) ts += new Array(width - stringWidth(ts)).join(' ')
      }

      // apply border and padding to string.
      padding = row[c].padding || [0, 0, 0, 0]
      if (padding[left]) str += new Array(padding[left] + 1).join(' ')
      str += addBorder(row[c], ts, '| ')
      str += ts
      str += addBorder(row[c], ts, ' |')
      if (padding[right]) str += new Array(padding[right] + 1).join(' ')

      // if prior row is span, try to render the
      // current row on the prior line.
      if (r === 0 && lines.length > 0) {
        str = _this._renderInline(str, lines[lines.length - 1])
      }
    })

    // remove trailing whitespace.
    lines.push({
      text: str.replace(/ +$/, ''),
      span: row.span
    })
  })

  return lines
}

function addBorder (col, ts, style) {
  if (col.border) {
    if (/[.']-+[.']/.test(ts)) return ''
    else if (ts.trim().length) return style
    else return '  '
  }
  return ''
}

// if the full 'source' can render in
// the target line, do so.
UI.prototype._renderInline = function (source, previousLine) {
  var leadingWhitespace = source.match(/^ */)[0].length
  var target = previousLine.text
  var targetTextWidth = stringWidth(target.trimRight())

  if (!previousLine.span) return source

  // if we're not applying wrapping logic,
  // just always append to the span.
  if (!this.wrap) {
    previousLine.hidden = true
    return target + source
  }

  if (leadingWhitespace < targetTextWidth) return source

  previousLine.hidden = true

  return target.trimRight() + new Array(leadingWhitespace - targetTextWidth + 1).join(' ') + source.trimLeft()
}

UI.prototype._rasterize = function (row) {
  var _this = this
  var i
  var rrow
  var rrows = []
  var widths = this._columnWidths(row)
  var wrapped

  // word wrap all columns, and create
  // a data-structure that is easy to rasterize.
  row.forEach(function (col, c) {
    // leave room for left and right padding.
    col.width = widths[c]
    if (_this.wrap) wrapped = wrap(col.text, _this._negatePadding(col), { hard: true }).split('\n')
    else wrapped = col.text.split('\n')

    if (col.border) {
      wrapped.unshift('.' + new Array(_this._negatePadding(col) + 3).join('-') + '.')
      wrapped.push("'" + new Array(_this._negatePadding(col) + 3).join('-') + "'")
    }

    // add top and bottom padding.
    if (col.padding) {
      for (i = 0; i < (col.padding[top] || 0); i++) wrapped.unshift('')
      for (i = 0; i < (col.padding[bottom] || 0); i++) wrapped.push('')
    }

    wrapped.forEach(function (str, r) {
      if (!rrows[r]) rrows.push([])

      rrow = rrows[r]

      for (var i = 0; i < c; i++) {
        if (rrow[i] === undefined) rrow.push('')
      }
      rrow.push(str)
    })
  })

  return rrows
}

UI.prototype._negatePadding = function (col) {
  var wrapWidth = col.width
  if (col.padding) wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0)
  if (col.border) wrapWidth -= 4
  return wrapWidth
}

UI.prototype._columnWidths = function (row) {
  var _this = this
  var widths = []
  var unset = row.length
  var unsetWidth
  var remainingWidth = this.width

  // column widths can be set in config.
  row.forEach(function (col, i) {
    if (col.width) {
      unset--
      widths[i] = col.width
      remainingWidth -= col.width
    } else {
      widths[i] = undefined
    }
  })

  // any unset widths should be calculated.
  if (unset) unsetWidth = Math.floor(remainingWidth / unset)
  widths.forEach(function (w, i) {
    if (!_this.wrap) widths[i] = row[i].width || stringWidth(row[i].text)
    else if (w === undefined) widths[i] = Math.max(unsetWidth, _minWidth(row[i]))
  })

  return widths
}

// calculates the minimum width of
// a column, based on padding preferences.
function _minWidth (col) {
  var padding = col.padding || []
  var minWidth = 1 + (padding[left] || 0) + (padding[right] || 0)
  if (col.border) minWidth += 4
  return minWidth
}

function getWindowWidth () {
  if (typeof process === 'object' && process.stdout && process.stdout.columns) return process.stdout.columns
}

function alignRight (str, width) {
  str = str.trim()
  var padding = ''
  var strWidth = stringWidth(str)

  if (strWidth < width) {
    padding = new Array(width - strWidth + 1).join(' ')
  }

  return padding + str
}

function alignCenter (str, width) {
  str = str.trim()
  var padding = ''
  var strWidth = stringWidth(str.trim())

  if (strWidth < width) {
    padding = new Array(parseInt((width - strWidth) / 2, 10) + 1).join(' ')
  }

  return padding + str
}

module.exports = function (opts) {
  opts = opts || {}

  return new UI({
    width: (opts || {}).width || getWindowWidth() || 80,
    wrap: typeof opts.wrap === 'boolean' ? opts.wrap : true
  })
}
Copyright (c) 2015, Contributors

Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
that the above copyright notice and this permission notice
appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
'use strict';

module.exports = options => {
	options = Object.assign({
		onlyFirst: false
	}, options);

	const pattern = [
		'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
		'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
	].join('|');

	return new RegExp(pattern, options.onlyFirst ? undefined : 'g');
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "ansi-regex",
  "version": "4.1.0",
  "description": "Regular expression for matching ANSI escape codes",
  "license": "MIT",
  "repository": "chalk/ansi-regex",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "^0.25.0",
    "xo": "^0.23.0"
  }
}'use strict';
const colorConvert = require('color-convert');

const wrapAnsi16 = (fn, offset) => function () {
	const code = fn.apply(colorConvert, arguments);
	return `\u001B[${code + offset}m`;
};

const wrapAnsi256 = (fn, offset) => function () {
	const code = fn.apply(colorConvert, arguments);
	return `\u001B[${38 + offset};5;${code}m`;
};

const wrapAnsi16m = (fn, offset) => function () {
	const rgb = fn.apply(colorConvert, arguments);
	return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
};

function assembleStyles() {
	const codes = new Map();
	const styles = {
		modifier: {
			reset: [0, 0],
			// 21 isn't widely supported and 22 does the same thing
			bold: [1, 22],
			dim: [2, 22],
			italic: [3, 23],
			underline: [4, 24],
			inverse: [7, 27],
			hidden: [8, 28],
			strikethrough: [9, 29]
		},
		color: {
			black: [30, 39],
			red: [31, 39],
			green: [32, 39],
			yellow: [33, 39],
			blue: [34, 39],
			magenta: [35, 39],
			cyan: [36, 39],
			white: [37, 39],
			gray: [90, 39],

			// Bright color
			redBright: [91, 39],
			greenBright: [92, 39],
			yellowBright: [93, 39],
			blueBright: [94, 39],
			magentaBright: [95, 39],
			cyanBright: [96, 39],
			whiteBright: [97, 39]
		},
		bgColor: {
			bgBlack: [40, 49],
			bgRed: [41, 49],
			bgGreen: [42, 49],
			bgYellow: [43, 49],
			bgBlue: [44, 49],
			bgMagenta: [45, 49],
			bgCyan: [46, 49],
			bgWhite: [47, 49],

			// Bright color
			bgBlackBright: [100, 49],
			bgRedBright: [101, 49],
			bgGreenBright: [102, 49],
			bgYellowBright: [103, 49],
			bgBlueBright: [104, 49],
			bgMagentaBright: [105, 49],
			bgCyanBright: [106, 49],
			bgWhiteBright: [107, 49]
		}
	};

	// Fix humans
	styles.color.grey = styles.color.gray;

	for (const groupName of Object.keys(styles)) {
		const group = styles[groupName];

		for (const styleName of Object.keys(group)) {
			const style = group[styleName];

			styles[styleName] = {
				open: `\u001B[${style[0]}m`,
				close: `\u001B[${style[1]}m`
			};

			group[styleName] = styles[styleName];

			codes.set(style[0], style[1]);
		}

		Object.defineProperty(styles, groupName, {
			value: group,
			enumerable: false
		});

		Object.defineProperty(styles, 'codes', {
			value: codes,
			enumerable: false
		});
	}

	const ansi2ansi = n => n;
	const rgb2rgb = (r, g, b) => [r, g, b];

	styles.color.close = '\u001B[39m';
	styles.bgColor.close = '\u001B[49m';

	styles.color.ansi = {
		ansi: wrapAnsi16(ansi2ansi, 0)
	};
	styles.color.ansi256 = {
		ansi256: wrapAnsi256(ansi2ansi, 0)
	};
	styles.color.ansi16m = {
		rgb: wrapAnsi16m(rgb2rgb, 0)
	};

	styles.bgColor.ansi = {
		ansi: wrapAnsi16(ansi2ansi, 10)
	};
	styles.bgColor.ansi256 = {
		ansi256: wrapAnsi256(ansi2ansi, 10)
	};
	styles.bgColor.ansi16m = {
		rgb: wrapAnsi16m(rgb2rgb, 10)
	};

	for (let key of Object.keys(colorConvert)) {
		if (typeof colorConvert[key] !== 'object') {
			continue;
		}

		const suite = colorConvert[key];

		if (key === 'ansi16') {
			key = 'ansi';
		}

		if ('ansi16' in suite) {
			styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
			styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
		}

		if ('ansi256' in suite) {
			styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
			styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
		}

		if ('rgb' in suite) {
			styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
			styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
		}
	}

	return styles;
}

// Make the export immutable
Object.defineProperty(module, 'exports', {
	enumerable: true,
	get: assembleStyles
});
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "ansi-styles",
  "version": "3.2.1",
  "description": "ANSI escape codes for styling strings in the terminal",
  "license": "MIT",
  "repository": "chalk/ansi-styles",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "color-convert": "^1.9.0"
  },
  "devDependencies": {
    "ava": "*",
    "babel-polyfill": "^6.23.0",
    "svg-term-cli": "^2.1.1",
    "xo": "*"
  }
}/* MIT license */
var cssKeywords = require('color-name');

// NOTE: conversions should only return primitive values (i.e. arrays, or
//       values that give correct `typeof` results).
//       do not use box values types (i.e. Number(), String(), etc.)

var reverseKeywords = {};
for (var key in cssKeywords) {
	if (cssKeywords.hasOwnProperty(key)) {
		reverseKeywords[cssKeywords[key]] = key;
	}
}

var convert = module.exports = {
	rgb: {channels: 3, labels: 'rgb'},
	hsl: {channels: 3, labels: 'hsl'},
	hsv: {channels: 3, labels: 'hsv'},
	hwb: {channels: 3, labels: 'hwb'},
	cmyk: {channels: 4, labels: 'cmyk'},
	xyz: {channels: 3, labels: 'xyz'},
	lab: {channels: 3, labels: 'lab'},
	lch: {channels: 3, labels: 'lch'},
	hex: {channels: 1, labels: ['hex']},
	keyword: {channels: 1, labels: ['keyword']},
	ansi16: {channels: 1, labels: ['ansi16']},
	ansi256: {channels: 1, labels: ['ansi256']},
	hcg: {channels: 3, labels: ['h', 'c', 'g']},
	apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
	gray: {channels: 1, labels: ['gray']}
};

// hide .channels and .labels properties
for (var model in convert) {
	if (convert.hasOwnProperty(model)) {
		if (!('channels' in convert[model])) {
			throw new Error('missing channels property: ' + model);
		}

		if (!('labels' in convert[model])) {
			throw new Error('missing channel labels property: ' + model);
		}

		if (convert[model].labels.length !== convert[model].channels) {
			throw new Error('channel and label counts mismatch: ' + model);
		}

		var channels = convert[model].channels;
		var labels = convert[model].labels;
		delete convert[model].channels;
		delete convert[model].labels;
		Object.defineProperty(convert[model], 'channels', {value: channels});
		Object.defineProperty(convert[model], 'labels', {value: labels});
	}
}

convert.rgb.hsl = function (rgb) {
	var r = rgb[0] / 255;
	var g = rgb[1] / 255;
	var b = rgb[2] / 255;
	var min = Math.min(r, g, b);
	var max = Math.max(r, g, b);
	var delta = max - min;
	var h;
	var s;
	var l;

	if (max === min) {
		h = 0;
	} else if (r === max) {
		h = (g - b) / delta;
	} else if (g === max) {
		h = 2 + (b - r) / delta;
	} else if (b === max) {
		h = 4 + (r - g) / delta;
	}

	h = Math.min(h * 60, 360);

	if (h < 0) {
		h += 360;
	}

	l = (min + max) / 2;

	if (max === min) {
		s = 0;
	} else if (l <= 0.5) {
		s = delta / (max + min);
	} else {
		s = delta / (2 - max - min);
	}

	return [h, s * 100, l * 100];
};

convert.rgb.hsv = function (rgb) {
	var rdif;
	var gdif;
	var bdif;
	var h;
	var s;

	var r = rgb[0] / 255;
	var g = rgb[1] / 255;
	var b = rgb[2] / 255;
	var v = Math.max(r, g, b);
	var diff = v - Math.min(r, g, b);
	var diffc = function (c) {
		return (v - c) / 6 / diff + 1 / 2;
	};

	if (diff === 0) {
		h = s = 0;
	} else {
		s = diff / v;
		rdif = diffc(r);
		gdif = diffc(g);
		bdif = diffc(b);

		if (r === v) {
			h = bdif - gdif;
		} else if (g === v) {
			h = (1 / 3) + rdif - bdif;
		} else if (b === v) {
			h = (2 / 3) + gdif - rdif;
		}
		if (h < 0) {
			h += 1;
		} else if (h > 1) {
			h -= 1;
		}
	}

	return [
		h * 360,
		s * 100,
		v * 100
	];
};

convert.rgb.hwb = function (rgb) {
	var r = rgb[0];
	var g = rgb[1];
	var b = rgb[2];
	var h = convert.rgb.hsl(rgb)[0];
	var w = 1 / 255 * Math.min(r, Math.min(g, b));

	b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));

	return [h, w * 100, b * 100];
};

convert.rgb.cmyk = function (rgb) {
	var r = rgb[0] / 255;
	var g = rgb[1] / 255;
	var b = rgb[2] / 255;
	var c;
	var m;
	var y;
	var k;

	k = Math.min(1 - r, 1 - g, 1 - b);
	c = (1 - r - k) / (1 - k) || 0;
	m = (1 - g - k) / (1 - k) || 0;
	y = (1 - b - k) / (1 - k) || 0;

	return [c * 100, m * 100, y * 100, k * 100];
};

/**
 * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
 * */
function comparativeDistance(x, y) {
	return (
		Math.pow(x[0] - y[0], 2) +
		Math.pow(x[1] - y[1], 2) +
		Math.pow(x[2] - y[2], 2)
	);
}

convert.rgb.keyword = function (rgb) {
	var reversed = reverseKeywords[rgb];
	if (reversed) {
		return reversed;
	}

	var currentClosestDistance = Infinity;
	var currentClosestKeyword;

	for (var keyword in cssKeywords) {
		if (cssKeywords.hasOwnProperty(keyword)) {
			var value = cssKeywords[keyword];

			// Compute comparative distance
			var distance = comparativeDistance(rgb, value);

			// Check if its less, if so set as closest
			if (distance < currentClosestDistance) {
				currentClosestDistance = distance;
				currentClosestKeyword = keyword;
			}
		}
	}

	return currentClosestKeyword;
};

convert.keyword.rgb = function (keyword) {
	return cssKeywords[keyword];
};

convert.rgb.xyz = function (rgb) {
	var r = rgb[0] / 255;
	var g = rgb[1] / 255;
	var b = rgb[2] / 255;

	// assume sRGB
	r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
	g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
	b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);

	var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
	var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
	var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);

	return [x * 100, y * 100, z * 100];
};

convert.rgb.lab = function (rgb) {
	var xyz = convert.rgb.xyz(rgb);
	var x = xyz[0];
	var y = xyz[1];
	var z = xyz[2];
	var l;
	var a;
	var b;

	x /= 95.047;
	y /= 100;
	z /= 108.883;

	x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
	y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
	z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);

	l = (116 * y) - 16;
	a = 500 * (x - y);
	b = 200 * (y - z);

	return [l, a, b];
};

convert.hsl.rgb = function (hsl) {
	var h = hsl[0] / 360;
	var s = hsl[1] / 100;
	var l = hsl[2] / 100;
	var t1;
	var t2;
	var t3;
	var rgb;
	var val;

	if (s === 0) {
		val = l * 255;
		return [val, val, val];
	}

	if (l < 0.5) {
		t2 = l * (1 + s);
	} else {
		t2 = l + s - l * s;
	}

	t1 = 2 * l - t2;

	rgb = [0, 0, 0];
	for (var i = 0; i < 3; i++) {
		t3 = h + 1 / 3 * -(i - 1);
		if (t3 < 0) {
			t3++;
		}
		if (t3 > 1) {
			t3--;
		}

		if (6 * t3 < 1) {
			val = t1 + (t2 - t1) * 6 * t3;
		} else if (2 * t3 < 1) {
			val = t2;
		} else if (3 * t3 < 2) {
			val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
		} else {
			val = t1;
		}

		rgb[i] = val * 255;
	}

	return rgb;
};

convert.hsl.hsv = function (hsl) {
	var h = hsl[0];
	var s = hsl[1] / 100;
	var l = hsl[2] / 100;
	var smin = s;
	var lmin = Math.max(l, 0.01);
	var sv;
	var v;

	l *= 2;
	s *= (l <= 1) ? l : 2 - l;
	smin *= lmin <= 1 ? lmin : 2 - lmin;
	v = (l + s) / 2;
	sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);

	return [h, sv * 100, v * 100];
};

convert.hsv.rgb = function (hsv) {
	var h = hsv[0] / 60;
	var s = hsv[1] / 100;
	var v = hsv[2] / 100;
	var hi = Math.floor(h) % 6;

	var f = h - Math.floor(h);
	var p = 255 * v * (1 - s);
	var q = 255 * v * (1 - (s * f));
	var t = 255 * v * (1 - (s * (1 - f)));
	v *= 255;

	switch (hi) {
		case 0:
			return [v, t, p];
		case 1:
			return [q, v, p];
		case 2:
			return [p, v, t];
		case 3:
			return [p, q, v];
		case 4:
			return [t, p, v];
		case 5:
			return [v, p, q];
	}
};

convert.hsv.hsl = function (hsv) {
	var h = hsv[0];
	var s = hsv[1] / 100;
	var v = hsv[2] / 100;
	var vmin = Math.max(v, 0.01);
	var lmin;
	var sl;
	var l;

	l = (2 - s) * v;
	lmin = (2 - s) * vmin;
	sl = s * vmin;
	sl /= (lmin <= 1) ? lmin : 2 - lmin;
	sl = sl || 0;
	l /= 2;

	return [h, sl * 100, l * 100];
};

// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
convert.hwb.rgb = function (hwb) {
	var h = hwb[0] / 360;
	var wh = hwb[1] / 100;
	var bl = hwb[2] / 100;
	var ratio = wh + bl;
	var i;
	var v;
	var f;
	var n;

	// wh + bl cant be > 1
	if (ratio > 1) {
		wh /= ratio;
		bl /= ratio;
	}

	i = Math.floor(6 * h);
	v = 1 - bl;
	f = 6 * h - i;

	if ((i & 0x01) !== 0) {
		f = 1 - f;
	}

	n = wh + f * (v - wh); // linear interpolation

	var r;
	var g;
	var b;
	switch (i) {
		default:
		case 6:
		case 0: r = v; g = n; b = wh; break;
		case 1: r = n; g = v; b = wh; break;
		case 2: r = wh; g = v; b = n; break;
		case 3: r = wh; g = n; b = v; break;
		case 4: r = n; g = wh; b = v; break;
		case 5: r = v; g = wh; b = n; break;
	}

	return [r * 255, g * 255, b * 255];
};

convert.cmyk.rgb = function (cmyk) {
	var c = cmyk[0] / 100;
	var m = cmyk[1] / 100;
	var y = cmyk[2] / 100;
	var k = cmyk[3] / 100;
	var r;
	var g;
	var b;

	r = 1 - Math.min(1, c * (1 - k) + k);
	g = 1 - Math.min(1, m * (1 - k) + k);
	b = 1 - Math.min(1, y * (1 - k) + k);

	return [r * 255, g * 255, b * 255];
};

convert.xyz.rgb = function (xyz) {
	var x = xyz[0] / 100;
	var y = xyz[1] / 100;
	var z = xyz[2] / 100;
	var r;
	var g;
	var b;

	r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
	g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
	b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);

	// assume sRGB
	r = r > 0.0031308
		? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
		: r * 12.92;

	g = g > 0.0031308
		? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
		: g * 12.92;

	b = b > 0.0031308
		? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
		: b * 12.92;

	r = Math.min(Math.max(0, r), 1);
	g = Math.min(Math.max(0, g), 1);
	b = Math.min(Math.max(0, b), 1);

	return [r * 255, g * 255, b * 255];
};

convert.xyz.lab = function (xyz) {
	var x = xyz[0];
	var y = xyz[1];
	var z = xyz[2];
	var l;
	var a;
	var b;

	x /= 95.047;
	y /= 100;
	z /= 108.883;

	x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
	y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
	z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);

	l = (116 * y) - 16;
	a = 500 * (x - y);
	b = 200 * (y - z);

	return [l, a, b];
};

convert.lab.xyz = function (lab) {
	var l = lab[0];
	var a = lab[1];
	var b = lab[2];
	var x;
	var y;
	var z;

	y = (l + 16) / 116;
	x = a / 500 + y;
	z = y - b / 200;

	var y2 = Math.pow(y, 3);
	var x2 = Math.pow(x, 3);
	var z2 = Math.pow(z, 3);
	y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
	x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
	z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;

	x *= 95.047;
	y *= 100;
	z *= 108.883;

	return [x, y, z];
};

convert.lab.lch = function (lab) {
	var l = lab[0];
	var a = lab[1];
	var b = lab[2];
	var hr;
	var h;
	var c;

	hr = Math.atan2(b, a);
	h = hr * 360 / 2 / Math.PI;

	if (h < 0) {
		h += 360;
	}

	c = Math.sqrt(a * a + b * b);

	return [l, c, h];
};

convert.lch.lab = function (lch) {
	var l = lch[0];
	var c = lch[1];
	var h = lch[2];
	var a;
	var b;
	var hr;

	hr = h / 360 * 2 * Math.PI;
	a = c * Math.cos(hr);
	b = c * Math.sin(hr);

	return [l, a, b];
};

convert.rgb.ansi16 = function (args) {
	var r = args[0];
	var g = args[1];
	var b = args[2];
	var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization

	value = Math.round(value / 50);

	if (value === 0) {
		return 30;
	}

	var ansi = 30
		+ ((Math.round(b / 255) << 2)
		| (Math.round(g / 255) << 1)
		| Math.round(r / 255));

	if (value === 2) {
		ansi += 60;
	}

	return ansi;
};

convert.hsv.ansi16 = function (args) {
	// optimization here; we already know the value and don't need to get
	// it converted for us.
	return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
};

convert.rgb.ansi256 = function (args) {
	var r = args[0];
	var g = args[1];
	var b = args[2];

	// we use the extended greyscale palette here, with the exception of
	// black and white. normal palette only has 4 greyscale shades.
	if (r === g && g === b) {
		if (r < 8) {
			return 16;
		}

		if (r > 248) {
			return 231;
		}

		return Math.round(((r - 8) / 247) * 24) + 232;
	}

	var ansi = 16
		+ (36 * Math.round(r / 255 * 5))
		+ (6 * Math.round(g / 255 * 5))
		+ Math.round(b / 255 * 5);

	return ansi;
};

convert.ansi16.rgb = function (args) {
	var color = args % 10;

	// handle greyscale
	if (color === 0 || color === 7) {
		if (args > 50) {
			color += 3.5;
		}

		color = color / 10.5 * 255;

		return [color, color, color];
	}

	var mult = (~~(args > 50) + 1) * 0.5;
	var r = ((color & 1) * mult) * 255;
	var g = (((color >> 1) & 1) * mult) * 255;
	var b = (((color >> 2) & 1) * mult) * 255;

	return [r, g, b];
};

convert.ansi256.rgb = function (args) {
	// handle greyscale
	if (args >= 232) {
		var c = (args - 232) * 10 + 8;
		return [c, c, c];
	}

	args -= 16;

	var rem;
	var r = Math.floor(args / 36) / 5 * 255;
	var g = Math.floor((rem = args % 36) / 6) / 5 * 255;
	var b = (rem % 6) / 5 * 255;

	return [r, g, b];
};

convert.rgb.hex = function (args) {
	var integer = ((Math.round(args[0]) & 0xFF) << 16)
		+ ((Math.round(args[1]) & 0xFF) << 8)
		+ (Math.round(args[2]) & 0xFF);

	var string = integer.toString(16).toUpperCase();
	return '000000'.substring(string.length) + string;
};

convert.hex.rgb = function (args) {
	var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
	if (!match) {
		return [0, 0, 0];
	}

	var colorString = match[0];

	if (match[0].length === 3) {
		colorString = colorString.split('').map(function (char) {
			return char + char;
		}).join('');
	}

	var integer = parseInt(colorString, 16);
	var r = (integer >> 16) & 0xFF;
	var g = (integer >> 8) & 0xFF;
	var b = integer & 0xFF;

	return [r, g, b];
};

convert.rgb.hcg = function (rgb) {
	var r = rgb[0] / 255;
	var g = rgb[1] / 255;
	var b = rgb[2] / 255;
	var max = Math.max(Math.max(r, g), b);
	var min = Math.min(Math.min(r, g), b);
	var chroma = (max - min);
	var grayscale;
	var hue;

	if (chroma < 1) {
		grayscale = min / (1 - chroma);
	} else {
		grayscale = 0;
	}

	if (chroma <= 0) {
		hue = 0;
	} else
	if (max === r) {
		hue = ((g - b) / chroma) % 6;
	} else
	if (max === g) {
		hue = 2 + (b - r) / chroma;
	} else {
		hue = 4 + (r - g) / chroma + 4;
	}

	hue /= 6;
	hue %= 1;

	return [hue * 360, chroma * 100, grayscale * 100];
};

convert.hsl.hcg = function (hsl) {
	var s = hsl[1] / 100;
	var l = hsl[2] / 100;
	var c = 1;
	var f = 0;

	if (l < 0.5) {
		c = 2.0 * s * l;
	} else {
		c = 2.0 * s * (1.0 - l);
	}

	if (c < 1.0) {
		f = (l - 0.5 * c) / (1.0 - c);
	}

	return [hsl[0], c * 100, f * 100];
};

convert.hsv.hcg = function (hsv) {
	var s = hsv[1] / 100;
	var v = hsv[2] / 100;

	var c = s * v;
	var f = 0;

	if (c < 1.0) {
		f = (v - c) / (1 - c);
	}

	return [hsv[0], c * 100, f * 100];
};

convert.hcg.rgb = function (hcg) {
	var h = hcg[0] / 360;
	var c = hcg[1] / 100;
	var g = hcg[2] / 100;

	if (c === 0.0) {
		return [g * 255, g * 255, g * 255];
	}

	var pure = [0, 0, 0];
	var hi = (h % 1) * 6;
	var v = hi % 1;
	var w = 1 - v;
	var mg = 0;

	switch (Math.floor(hi)) {
		case 0:
			pure[0] = 1; pure[1] = v; pure[2] = 0; break;
		case 1:
			pure[0] = w; pure[1] = 1; pure[2] = 0; break;
		case 2:
			pure[0] = 0; pure[1] = 1; pure[2] = v; break;
		case 3:
			pure[0] = 0; pure[1] = w; pure[2] = 1; break;
		case 4:
			pure[0] = v; pure[1] = 0; pure[2] = 1; break;
		default:
			pure[0] = 1; pure[1] = 0; pure[2] = w;
	}

	mg = (1.0 - c) * g;

	return [
		(c * pure[0] + mg) * 255,
		(c * pure[1] + mg) * 255,
		(c * pure[2] + mg) * 255
	];
};

convert.hcg.hsv = function (hcg) {
	var c = hcg[1] / 100;
	var g = hcg[2] / 100;

	var v = c + g * (1.0 - c);
	var f = 0;

	if (v > 0.0) {
		f = c / v;
	}

	return [hcg[0], f * 100, v * 100];
};

convert.hcg.hsl = function (hcg) {
	var c = hcg[1] / 100;
	var g = hcg[2] / 100;

	var l = g * (1.0 - c) + 0.5 * c;
	var s = 0;

	if (l > 0.0 && l < 0.5) {
		s = c / (2 * l);
	} else
	if (l >= 0.5 && l < 1.0) {
		s = c / (2 * (1 - l));
	}

	return [hcg[0], s * 100, l * 100];
};

convert.hcg.hwb = function (hcg) {
	var c = hcg[1] / 100;
	var g = hcg[2] / 100;
	var v = c + g * (1.0 - c);
	return [hcg[0], (v - c) * 100, (1 - v) * 100];
};

convert.hwb.hcg = function (hwb) {
	var w = hwb[1] / 100;
	var b = hwb[2] / 100;
	var v = 1 - b;
	var c = v - w;
	var g = 0;

	if (c < 1) {
		g = (v - c) / (1 - c);
	}

	return [hwb[0], c * 100, g * 100];
};

convert.apple.rgb = function (apple) {
	return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
};

convert.rgb.apple = function (rgb) {
	return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
};

convert.gray.rgb = function (args) {
	return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
};

convert.gray.hsl = convert.gray.hsv = function (args) {
	return [0, 0, args[0]];
};

convert.gray.hwb = function (gray) {
	return [0, 100, gray[0]];
};

convert.gray.cmyk = function (gray) {
	return [0, 0, 0, gray[0]];
};

convert.gray.lab = function (gray) {
	return [gray[0], 0, 0];
};

convert.gray.hex = function (gray) {
	var val = Math.round(gray[0] / 100 * 255) & 0xFF;
	var integer = (val << 16) + (val << 8) + val;

	var string = integer.toString(16).toUpperCase();
	return '000000'.substring(string.length) + string;
};

convert.rgb.gray = function (rgb) {
	var val = (rgb[0] + rgb[1] + rgb[2]) / 3;
	return [val / 255 * 100];
};
var conversions = require('./conversions');
var route = require('./route');

var convert = {};

var models = Object.keys(conversions);

function wrapRaw(fn) {
	var wrappedFn = function (args) {
		if (args === undefined || args === null) {
			return args;
		}

		if (arguments.length > 1) {
			args = Array.prototype.slice.call(arguments);
		}

		return fn(args);
	};

	// preserve .conversion property if there is one
	if ('conversion' in fn) {
		wrappedFn.conversion = fn.conversion;
	}

	return wrappedFn;
}

function wrapRounded(fn) {
	var wrappedFn = function (args) {
		if (args === undefined || args === null) {
			return args;
		}

		if (arguments.length > 1) {
			args = Array.prototype.slice.call(arguments);
		}

		var result = fn(args);

		// we're assuming the result is an array here.
		// see notice in conversions.js; don't use box types
		// in conversion functions.
		if (typeof result === 'object') {
			for (var len = result.length, i = 0; i < len; i++) {
				result[i] = Math.round(result[i]);
			}
		}

		return result;
	};

	// preserve .conversion property if there is one
	if ('conversion' in fn) {
		wrappedFn.conversion = fn.conversion;
	}

	return wrappedFn;
}

models.forEach(function (fromModel) {
	convert[fromModel] = {};

	Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
	Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});

	var routes = route(fromModel);
	var routeModels = Object.keys(routes);

	routeModels.forEach(function (toModel) {
		var fn = routes[toModel];

		convert[fromModel][toModel] = wrapRounded(fn);
		convert[fromModel][toModel].raw = wrapRaw(fn);
	});
});

module.exports = convert;
Copyright (c) 2011-2016 Heather Arthur <fayearthur@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

{
  "name": "color-convert",
  "description": "Plain color conversion functions",
  "version": "1.9.3",
  "author": "Heather Arthur <fayearthur@gmail.com>",
  "license": "MIT",
  "repository": "Qix-/color-convert",
  "files": [
    "index.js",
    "conversions.js",
    "css-keywords.js",
    "route.js"
  ],
  "devDependencies": {
    "chalk": "1.1.1",
    "xo": "0.11.2"
  },
  "dependencies": {
    "color-name": "1.1.3"
  }
}var conversions = require('./conversions');

/*
	this function routes a model to all other models.

	all functions that are routed have a property `.conversion` attached
	to the returned synthetic function. This property is an array
	of strings, each with the steps in between the 'from' and 'to'
	color models (inclusive).

	conversions that are not possible simply are not included.
*/

function buildGraph() {
	var graph = {};
	// https://jsperf.com/object-keys-vs-for-in-with-closure/3
	var models = Object.keys(conversions);

	for (var len = models.length, i = 0; i < len; i++) {
		graph[models[i]] = {
			// http://jsperf.com/1-vs-infinity
			// micro-opt, but this is simple.
			distance: -1,
			parent: null
		};
	}

	return graph;
}

// https://en.wikipedia.org/wiki/Breadth-first_search
function deriveBFS(fromModel) {
	var graph = buildGraph();
	var queue = [fromModel]; // unshift -> queue -> pop

	graph[fromModel].distance = 0;

	while (queue.length) {
		var current = queue.pop();
		var adjacents = Object.keys(conversions[current]);

		for (var len = adjacents.length, i = 0; i < len; i++) {
			var adjacent = adjacents[i];
			var node = graph[adjacent];

			if (node.distance === -1) {
				node.distance = graph[current].distance + 1;
				node.parent = current;
				queue.unshift(adjacent);
			}
		}
	}

	return graph;
}

function link(from, to) {
	return function (args) {
		return to(from(args));
	};
}

function wrapConversion(toModel, graph) {
	var path = [graph[toModel].parent, toModel];
	var fn = conversions[graph[toModel].parent][toModel];

	var cur = graph[toModel].parent;
	while (graph[cur].parent) {
		path.unshift(graph[cur].parent);
		fn = link(conversions[graph[cur].parent][cur], fn);
		cur = graph[cur].parent;
	}

	fn.conversion = path;
	return fn;
}

module.exports = function (fromModel) {
	var graph = deriveBFS(fromModel);
	var conversion = {};

	var models = Object.keys(graph);
	for (var len = models.length, i = 0; i < len; i++) {
		var toModel = models[i];
		var node = graph[toModel];

		if (node.parent === null) {
			// no possible conversion, or this node is the source model.
			continue;
		}

		conversion[toModel] = wrapConversion(toModel, graph);
	}

	return conversion;
};

{
    "env": {
        "browser": true,
        "node": true,
        "commonjs": true,
        "es6": true
    },
    "extends": "eslint:recommended",
    "rules": {
        "strict": 2,
        "indent": 0,
        "linebreak-style": 0,
        "quotes": 0,
        "semi": 0,
        "no-cond-assign": 1,
        "no-constant-condition": 1,
        "no-duplicate-case": 1,
        "no-empty": 1,
        "no-ex-assign": 1,
        "no-extra-boolean-cast": 1,
        "no-extra-semi": 1,
        "no-fallthrough": 1,
        "no-func-assign": 1,
        "no-global-assign": 1,
        "no-implicit-globals": 2,
        "no-inner-declarations": ["error", "functions"],
        "no-irregular-whitespace": 2,
        "no-loop-func": 1,
        "no-multi-str": 1,
        "no-mixed-spaces-and-tabs": 1,
        "no-proto": 1,
        "no-sequences": 1,
        "no-throw-literal": 1,
        "no-unmodified-loop-condition": 1,
        "no-useless-call": 1,
        "no-void": 1,
        "no-with": 2,
        "wrap-iife": 1,
        "no-redeclare": 1,
        "no-unused-vars": ["error", { "vars": "all", "args": "none" }],
        "no-sparse-arrays": 1
    }
}
'use strict'

module.exports = {
	"aliceblue": [240, 248, 255],
	"antiquewhite": [250, 235, 215],
	"aqua": [0, 255, 255],
	"aquamarine": [127, 255, 212],
	"azure": [240, 255, 255],
	"beige": [245, 245, 220],
	"bisque": [255, 228, 196],
	"black": [0, 0, 0],
	"blanchedalmond": [255, 235, 205],
	"blue": [0, 0, 255],
	"blueviolet": [138, 43, 226],
	"brown": [165, 42, 42],
	"burlywood": [222, 184, 135],
	"cadetblue": [95, 158, 160],
	"chartreuse": [127, 255, 0],
	"chocolate": [210, 105, 30],
	"coral": [255, 127, 80],
	"cornflowerblue": [100, 149, 237],
	"cornsilk": [255, 248, 220],
	"crimson": [220, 20, 60],
	"cyan": [0, 255, 255],
	"darkblue": [0, 0, 139],
	"darkcyan": [0, 139, 139],
	"darkgoldenrod": [184, 134, 11],
	"darkgray": [169, 169, 169],
	"darkgreen": [0, 100, 0],
	"darkgrey": [169, 169, 169],
	"darkkhaki": [189, 183, 107],
	"darkmagenta": [139, 0, 139],
	"darkolivegreen": [85, 107, 47],
	"darkorange": [255, 140, 0],
	"darkorchid": [153, 50, 204],
	"darkred": [139, 0, 0],
	"darksalmon": [233, 150, 122],
	"darkseagreen": [143, 188, 143],
	"darkslateblue": [72, 61, 139],
	"darkslategray": [47, 79, 79],
	"darkslategrey": [47, 79, 79],
	"darkturquoise": [0, 206, 209],
	"darkviolet": [148, 0, 211],
	"deeppink": [255, 20, 147],
	"deepskyblue": [0, 191, 255],
	"dimgray": [105, 105, 105],
	"dimgrey": [105, 105, 105],
	"dodgerblue": [30, 144, 255],
	"firebrick": [178, 34, 34],
	"floralwhite": [255, 250, 240],
	"forestgreen": [34, 139, 34],
	"fuchsia": [255, 0, 255],
	"gainsboro": [220, 220, 220],
	"ghostwhite": [248, 248, 255],
	"gold": [255, 215, 0],
	"goldenrod": [218, 165, 32],
	"gray": [128, 128, 128],
	"green": [0, 128, 0],
	"greenyellow": [173, 255, 47],
	"grey": [128, 128, 128],
	"honeydew": [240, 255, 240],
	"hotpink": [255, 105, 180],
	"indianred": [205, 92, 92],
	"indigo": [75, 0, 130],
	"ivory": [255, 255, 240],
	"khaki": [240, 230, 140],
	"lavender": [230, 230, 250],
	"lavenderblush": [255, 240, 245],
	"lawngreen": [124, 252, 0],
	"lemonchiffon": [255, 250, 205],
	"lightblue": [173, 216, 230],
	"lightcoral": [240, 128, 128],
	"lightcyan": [224, 255, 255],
	"lightgoldenrodyellow": [250, 250, 210],
	"lightgray": [211, 211, 211],
	"lightgreen": [144, 238, 144],
	"lightgrey": [211, 211, 211],
	"lightpink": [255, 182, 193],
	"lightsalmon": [255, 160, 122],
	"lightseagreen": [32, 178, 170],
	"lightskyblue": [135, 206, 250],
	"lightslategray": [119, 136, 153],
	"lightslategrey": [119, 136, 153],
	"lightsteelblue": [176, 196, 222],
	"lightyellow": [255, 255, 224],
	"lime": [0, 255, 0],
	"limegreen": [50, 205, 50],
	"linen": [250, 240, 230],
	"magenta": [255, 0, 255],
	"maroon": [128, 0, 0],
	"mediumaquamarine": [102, 205, 170],
	"mediumblue": [0, 0, 205],
	"mediumorchid": [186, 85, 211],
	"mediumpurple": [147, 112, 219],
	"mediumseagreen": [60, 179, 113],
	"mediumslateblue": [123, 104, 238],
	"mediumspringgreen": [0, 250, 154],
	"mediumturquoise": [72, 209, 204],
	"mediumvioletred": [199, 21, 133],
	"midnightblue": [25, 25, 112],
	"mintcream": [245, 255, 250],
	"mistyrose": [255, 228, 225],
	"moccasin": [255, 228, 181],
	"navajowhite": [255, 222, 173],
	"navy": [0, 0, 128],
	"oldlace": [253, 245, 230],
	"olive": [128, 128, 0],
	"olivedrab": [107, 142, 35],
	"orange": [255, 165, 0],
	"orangered": [255, 69, 0],
	"orchid": [218, 112, 214],
	"palegoldenrod": [238, 232, 170],
	"palegreen": [152, 251, 152],
	"paleturquoise": [175, 238, 238],
	"palevioletred": [219, 112, 147],
	"papayawhip": [255, 239, 213],
	"peachpuff": [255, 218, 185],
	"peru": [205, 133, 63],
	"pink": [255, 192, 203],
	"plum": [221, 160, 221],
	"powderblue": [176, 224, 230],
	"purple": [128, 0, 128],
	"rebeccapurple": [102, 51, 153],
	"red": [255, 0, 0],
	"rosybrown": [188, 143, 143],
	"royalblue": [65, 105, 225],
	"saddlebrown": [139, 69, 19],
	"salmon": [250, 128, 114],
	"sandybrown": [244, 164, 96],
	"seagreen": [46, 139, 87],
	"seashell": [255, 245, 238],
	"sienna": [160, 82, 45],
	"silver": [192, 192, 192],
	"skyblue": [135, 206, 235],
	"slateblue": [106, 90, 205],
	"slategray": [112, 128, 144],
	"slategrey": [112, 128, 144],
	"snow": [255, 250, 250],
	"springgreen": [0, 255, 127],
	"steelblue": [70, 130, 180],
	"tan": [210, 180, 140],
	"teal": [0, 128, 128],
	"thistle": [216, 191, 216],
	"tomato": [255, 99, 71],
	"turquoise": [64, 224, 208],
	"violet": [238, 130, 238],
	"wheat": [245, 222, 179],
	"white": [255, 255, 255],
	"whitesmoke": [245, 245, 245],
	"yellow": [255, 255, 0],
	"yellowgreen": [154, 205, 50]
};
The MIT License (MIT)
Copyright (c) 2015 Dmitry Ivanov

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.{
  "name": "color-name",
  "version": "1.1.3",
  "description": "A list of color names and its values",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "git@github.com:dfcreative/color-name.git"
  },
  "author": "DY <dfcreative@gmail.com>",
  "license": "MIT",
  "homepage": "https://github.com/dfcreative/color-name"
}"use strict";

module.exports = () => {
  // https://mths.be/emoji
  return /\u{1F3F4}(?:\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074})\u{E007F}|\u200D\u2620\uFE0F)|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F468}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|[\u{1F3FB}-\u{1F3FF}]\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|\u{1F469}\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]\u200D[\u2695\u2696\u2708]|\u{1F468}(?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F469}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F468}(?:\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|[\u{1F3FB}-\u{1F3FF}])|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}]|\u{1F469}\u200D\u{1F466}|\u{1F1F6}\u{1F1E6}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9D1}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6F9}\u{1F910}-\u{1F93A}\u{1F93C}-\u{1F93E}\u{1F940}-\u{1F945}\u{1F947}-\u{1F970}\u{1F973}-\u{1F976}\u{1F97A}\u{1F97C}-\u{1F9A2}\u{1F9B0}-\u{1F9B9}\u{1F9C0}-\u{1F9C2}\u{1F9D0}-\u{1F9FF}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6F9}\u{1F910}-\u{1F93A}\u{1F93C}-\u{1F93E}\u{1F940}-\u{1F945}\u{1F947}-\u{1F970}\u{1F973}-\u{1F976}\u{1F97A}\u{1F97C}-\u{1F9A2}\u{1F9B0}-\u{1F9B9}\u{1F9C0}-\u{1F9C2}\u{1F9D0}-\u{1F9FF}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F469}\u{1F46E}\u{1F470}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9D1}-\u{1F9DD}]/gu;
};
"use strict";

module.exports = () => {
  // https://mths.be/emoji
  return /\u{1F3F4}(?:\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074})\u{E007F}|\u200D\u2620\uFE0F)|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F468}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|[\u{1F3FB}-\u{1F3FF}]\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|\u{1F469}\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]\u200D[\u2695\u2696\u2708]|\u{1F468}(?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F469}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F468}(?:\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|[\u{1F3FB}-\u{1F3FF}])|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}]|\u{1F469}\u200D\u{1F466}|\u{1F1F6}\u{1F1E6}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9D1}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6F9}\u{1F910}-\u{1F93A}\u{1F93C}-\u{1F93E}\u{1F940}-\u{1F945}\u{1F947}-\u{1F970}\u{1F973}-\u{1F976}\u{1F97A}\u{1F97C}-\u{1F9A2}\u{1F9B0}-\u{1F9B9}\u{1F9C0}-\u{1F9C2}\u{1F9D0}-\u{1F9FF}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6F9}\u{1F910}-\u{1F93A}\u{1F93C}-\u{1F93E}\u{1F940}-\u{1F945}\u{1F947}-\u{1F970}\u{1F973}-\u{1F976}\u{1F97A}\u{1F97C}-\u{1F9A2}\u{1F9B0}-\u{1F9B9}\u{1F9C0}-\u{1F9C2}\u{1F9D0}-\u{1F9FF}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F469}\u{1F46E}\u{1F470}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9D1}-\u{1F9DD}]/gu;
};
"use strict";

module.exports = function () {
  // https://mths.be/emoji
  return /\uD83C\uDFF4(?:\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74)\uDB40\uDC7F|\u200D\u2620\uFE0F)|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3]))|\uD83D\uDC69\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83D\uDC69\u200D[\u2695\u2696\u2708])\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC68(?:\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDD1-\uDDDD])/g;
};
Copyright Mathias Bynens <https://mathiasbynens.be/>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "emoji-regex",
  "version": "7.0.3",
  "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.",
  "homepage": "https://mths.be/emoji-regex",
  "main": "index.js",
  "types": "index.d.ts",
  "license": "MIT",
  "author": {
    "name": "Mathias Bynens",
    "url": "https://mathiasbynens.be/"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/mathiasbynens/emoji-regex.git"
  },
  "files": [
    "LICENSE-MIT.txt",
    "index.js",
    "index.d.ts",
    "text.js",
    "es2015/index.js",
    "es2015/text.js"
  ],
  "devDependencies": {
    "@babel/cli": "^7.0.0",
    "@babel/core": "^7.0.0",
    "@babel/plugin-proposal-unicode-property-regex": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "mocha": "^5.2.0",
    "regexgen": "^1.3.0",
    "unicode-11.0.0": "^0.7.7",
    "unicode-tr51": "^9.0.1"
  }
}"use strict";

module.exports = function () {
  // https://mths.be/emoji
  return /\uD83C\uDFF4(?:\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74)\uDB40\uDC7F|\u200D\u2620\uFE0F)|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3]))|\uD83D\uDC69\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83D\uDC69\u200D[\u2695\u2696\u2708])\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC68(?:\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDD1-\uDDDD])/g;
};
'use strict';
/* eslint-disable yoda */
module.exports = x => {
	if (Number.isNaN(x)) {
		return false;
	}

	// code points are derived from:
	// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt
	if (
		x >= 0x1100 && (
			x <= 0x115f ||  // Hangul Jamo
			x === 0x2329 || // LEFT-POINTING ANGLE BRACKET
			x === 0x232a || // RIGHT-POINTING ANGLE BRACKET
			// CJK Radicals Supplement .. Enclosed CJK Letters and Months
			(0x2e80 <= x && x <= 0x3247 && x !== 0x303f) ||
			// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
			(0x3250 <= x && x <= 0x4dbf) ||
			// CJK Unified Ideographs .. Yi Radicals
			(0x4e00 <= x && x <= 0xa4c6) ||
			// Hangul Jamo Extended-A
			(0xa960 <= x && x <= 0xa97c) ||
			// Hangul Syllables
			(0xac00 <= x && x <= 0xd7a3) ||
			// CJK Compatibility Ideographs
			(0xf900 <= x && x <= 0xfaff) ||
			// Vertical Forms
			(0xfe10 <= x && x <= 0xfe19) ||
			// CJK Compatibility Forms .. Small Form Variants
			(0xfe30 <= x && x <= 0xfe6b) ||
			// Halfwidth and Fullwidth Forms
			(0xff01 <= x && x <= 0xff60) ||
			(0xffe0 <= x && x <= 0xffe6) ||
			// Kana Supplement
			(0x1b000 <= x && x <= 0x1b001) ||
			// Enclosed Ideographic Supplement
			(0x1f200 <= x && x <= 0x1f251) ||
			// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
			(0x20000 <= x && x <= 0x3fffd)
		)
	) {
		return true;
	}

	return false;
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "is-fullwidth-code-point",
  "version": "2.0.0",
  "description": "Check if the character represented by a given Unicode code point is fullwidth",
  "license": "MIT",
  "repository": "sindresorhus/is-fullwidth-code-point",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}'use strict';
const stripAnsi = require('strip-ansi');
const isFullwidthCodePoint = require('is-fullwidth-code-point');
const emojiRegex = require('emoji-regex')();

module.exports = input => {
	input = input.replace(emojiRegex, '  ');

	if (typeof input !== 'string' || input.length === 0) {
		return 0;
	}

	input = stripAnsi(input);

	let width = 0;

	for (let i = 0; i < input.length; i++) {
		const code = input.codePointAt(i);

		// Ignore control characters
		if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {
			continue;
		}

		// Ignore combining characters
		if (code >= 0x300 && code <= 0x36F) {
			continue;
		}

		// Surrogates
		if (code > 0xFFFF) {
			i++;
		}

		width += isFullwidthCodePoint(code) ? 2 : 1;
	}

	return width;
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "string-width",
  "version": "3.1.0",
  "description": "Get the visual width of a string - the number of columns required to display it",
  "license": "MIT",
  "repository": "sindresorhus/string-width",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "emoji-regex": "^7.0.1",
    "is-fullwidth-code-point": "^2.0.0",
    "strip-ansi": "^5.1.0"
  },
  "devDependencies": {
    "ava": "^1.0.1",
    "xo": "^0.23.0"
  }
}'use strict';
const ansiRegex = require('ansi-regex');

const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;

module.exports = stripAnsi;
module.exports.default = stripAnsi;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "strip-ansi",
  "version": "5.2.0",
  "description": "Strip ANSI escape codes from a string",
  "license": "MIT",
  "repository": "chalk/strip-ansi",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "dependencies": {
    "ansi-regex": "^4.1.0"
  },
  "devDependencies": {
    "ava": "^1.3.1",
    "tsd-check": "^0.5.0",
    "xo": "^0.24.0"
  }
}'use strict';
const stringWidth = require('string-width');
const stripAnsi = require('strip-ansi');
const ansiStyles = require('ansi-styles');

const ESCAPES = new Set([
	'\u001B',
	'\u009B'
]);

const END_CODE = 39;

const wrapAnsi = code => `${ESCAPES.values().next().value}[${code}m`;

// Calculate the length of words split on ' ', ignoring
// the extra characters added by ansi escape codes
const wordLengths = string => string.split(' ').map(character => stringWidth(character));

// Wrap a long word across multiple rows
// Ansi escape codes do not count towards length
const wrapWord = (rows, word, columns) => {
	const characters = [...word];

	let insideEscape = false;
	let visible = stringWidth(stripAnsi(rows[rows.length - 1]));

	for (const [index, character] of characters.entries()) {
		const characterLength = stringWidth(character);

		if (visible + characterLength <= columns) {
			rows[rows.length - 1] += character;
		} else {
			rows.push(character);
			visible = 0;
		}

		if (ESCAPES.has(character)) {
			insideEscape = true;
		} else if (insideEscape && character === 'm') {
			insideEscape = false;
			continue;
		}

		if (insideEscape) {
			continue;
		}

		visible += characterLength;

		if (visible === columns && index < characters.length - 1) {
			rows.push('');
			visible = 0;
		}
	}

	// It's possible that the last row we copy over is only
	// ansi escape characters, handle this edge-case
	if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {
		rows[rows.length - 2] += rows.pop();
	}
};

// Trims spaces from a string ignoring invisible sequences
const stringVisibleTrimSpacesRight = str => {
	const words = str.split(' ');
	let last = words.length;

	while (last > 0) {
		if (stringWidth(words[last - 1]) > 0) {
			break;
		}

		last--;
	}

	if (last === words.length) {
		return str;
	}

	return words.slice(0, last).join(' ') + words.slice(last).join('');
};

// The wrap-ansi module can be invoked
// in either 'hard' or 'soft' wrap mode
//
// 'hard' will never allow a string to take up more
// than columns characters
//
// 'soft' allows long words to expand past the column length
const exec = (string, columns, options = {}) => {
	if (options.trim !== false && string.trim() === '') {
		return '';
	}

	let pre = '';
	let ret = '';
	let escapeCode;

	const lengths = wordLengths(string);
	let rows = [''];

	for (const [index, word] of string.split(' ').entries()) {
		if (options.trim !== false) {
			rows[rows.length - 1] = rows[rows.length - 1].trimLeft();
		}

		let rowLength = stringWidth(rows[rows.length - 1]);

		if (index !== 0) {
			if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {
				// If we start with a new word but the current row length equals the length of the columns, add a new row
				rows.push('');
				rowLength = 0;
			}

			if (rowLength > 0 || options.trim === false) {
				rows[rows.length - 1] += ' ';
				rowLength++;
			}
		}

		// In 'hard' wrap mode, the length of a line is
		// never allowed to extend past 'columns'
		if (options.hard && lengths[index] > columns) {
			const remainingColumns = (columns - rowLength);
			const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);
			const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);
			if (breaksStartingNextLine < breaksStartingThisLine) {
				rows.push('');
			}

			wrapWord(rows, word, columns);
			continue;
		}

		if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {
			if (options.wordWrap === false && rowLength < columns) {
				wrapWord(rows, word, columns);
				continue;
			}

			rows.push('');
		}

		if (rowLength + lengths[index] > columns && options.wordWrap === false) {
			wrapWord(rows, word, columns);
			continue;
		}

		rows[rows.length - 1] += word;
	}

	if (options.trim !== false) {
		rows = rows.map(stringVisibleTrimSpacesRight);
	}

	pre = rows.join('\n');

	for (const [index, character] of [...pre].entries()) {
		ret += character;

		if (ESCAPES.has(character)) {
			const code = parseFloat(/\d[^m]*/.exec(pre.slice(index, index + 4)));
			escapeCode = code === END_CODE ? null : code;
		}

		const code = ansiStyles.codes.get(Number(escapeCode));

		if (escapeCode && code) {
			if (pre[index + 1] === '\n') {
				ret += wrapAnsi(code);
			} else if (character === '\n') {
				ret += wrapAnsi(escapeCode);
			}
		}
	}

	return ret;
};

// For each newline, invoke the method separately
module.exports = (string, columns, options) => {
	return String(string)
		.normalize()
		.split('\n')
		.map(line => exec(line, columns, options))
		.join('\n');
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "wrap-ansi",
  "version": "5.1.0",
  "description": "Wordwrap a string with ANSI escape codes",
  "license": "MIT",
  "repository": "chalk/wrap-ansi",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "ansi-styles": "^3.2.0",
    "string-width": "^3.0.0",
    "strip-ansi": "^5.0.0"
  },
  "devDependencies": {
    "ava": "^1.2.1",
    "chalk": "^2.4.2",
    "coveralls": "^3.0.3",
    "has-ansi": "^3.0.0",
    "nyc": "^13.3.0",
    "xo": "^0.24.0"
  }
}{
  "name": "cliui",
  "version": "5.0.0",
  "description": "easily create complex multi-column command-line-interfaces",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "http://github.com/yargs/cliui.git"
  },
  "config": {
    "blanket": {
      "pattern": [
        "index.js"
      ],
      "data-cover-never": [
        "node_modules",
        "test"
      ],
      "output-reporter": "spec"
    }
  },
  "standard": {
    "ignore": [
      "**/example/**"
    ],
    "globals": [
      "it"
    ]
  },
  "author": "Ben Coe <ben@npmjs.com>",
  "license": "ISC",
  "dependencies": {
    "string-width": "^3.1.0",
    "strip-ansi": "^5.2.0",
    "wrap-ansi": "^5.1.0"
  },
  "devDependencies": {
    "chai": "^4.2.0",
    "chalk": "^2.4.2",
    "coveralls": "^3.0.3",
    "mocha": "^6.0.2",
    "nyc": "^13.3.0",
    "standard": "^12.0.1",
    "standard-version": "^5.0.2"
  },
  "files": [
    "index.js"
  ],
  "engine": {
    "node": ">=6"
  }
}MIT License

Copyright (c) 2017 Luke Childs

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "clone-response",
  "version": "1.0.2",
  "description": "Clone a Node.js HTTP response stream",
  "main": "src/index.js",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/lukechilds/clone-response.git"
  },
  "author": "Luke Childs <lukechilds123@gmail.com> (http://lukechilds.co.uk)",
  "license": "MIT",
  "homepage": "https://github.com/lukechilds/clone-response",
  "dependencies": {
    "mimic-response": "^1.0.0"
  },
  "devDependencies": {
    "ava": "^0.22.0",
    "coveralls": "^2.13.1",
    "create-test-server": "^2.0.1",
    "eslint-config-xo-lukechilds": "^1.0.0",
    "get-stream": "^3.0.0",
    "nyc": "^11.0.2",
    "pify": "^3.0.0",
    "xo": "^0.19.0"
  }
}'use strict';

const PassThrough = require('stream').PassThrough;
const mimicResponse = require('mimic-response');

const cloneResponse = response => {
	if (!(response && response.pipe)) {
		throw new TypeError('Parameter `response` must be a response stream.');
	}

	const clone = new PassThrough();
	mimicResponse(response, clone);

	return response.pipe(clone);
};

module.exports = cloneResponse;
4.6.0 / 2015-07-09
==================

 * support passing the rest of the arguments to co into the generator

 ```js
 function *gen(...args) { }
 co(gen, ...args);
 ```

4.5.0 / 2015-03-17
==================

 * support regular functions (that return promises)

4.4.0 / 2015-02-14
==================

 * refactor `isGeneratorFunction`
 * expose generator function from `co.wrap()`
 * drop support for node < 0.12

4.3.0 / 2015-02-05
==================

 * check for generator functions in a ES5-transpiler-friendly way

4.2.0 / 2015-01-20
==================

 * support comparing generator functions with ES6 transpilers

4.1.0 / 2014-12-26
==================

 * fix memory leak #180

4.0.2 / 2014-12-18
==================

 * always return a global promise implementation

4.0.1 / 2014-11-30
==================

 * friendlier ES6 module exports

4.0.0 / 2014-11-15
==================

 * co now returns a promise and uses promises underneath
 * `co.wrap()` for wrapping generator functions

3.1.0 / 2014-06-30
==================

 * remove `setImmediate()` shim for node 0.8. semi-backwards breaking.
   Users are expected to shim themselves. Also returns CommonJS browser support.
 * added key order preservation for objects. thanks @greim
 * replace `q` with `bluebird` in benchmarks and tests

3.0.6 / 2014-05-03
==================

 * add `setImmediate()` fallback to `process.nextTick`
 * remove duplicate code in toThunk
 * update thunkify

3.0.5 / 2014-03-17
==================

 * fix object/array test failure which tries to enumerate dates. Closes #98
 * fix final callback error propagation. Closes #92

3.0.4 / 2014-02-17
==================

 * fix toThunk object check regression. Closes #89

3.0.3 / 2014-02-08
==================

 * refactor: arrayToThunk @AutoSponge #88

3.0.2 / 2014-01-01
==================

 * fixed: nil arguments replaced with error fn

3.0.1 / 2013-12-19
==================

 * fixed: callback passed as an argument to generators

3.0.0 / 2013-12-19
==================

 * fixed: callback passed as an argument to generators
 * change: `co(function *(){})` now returns a reusable thunk
 * change: `this` must now be passed through the returned thunk, ex. `co(function *(){}).call(this)`
 * fix "generator already finished" errors

2.3.0 / 2013-11-12
==================

 * add `yield object` support

2.2.0 / 2013-11-05
==================

 * change: make the `isGenerator()` function more generic

2.1.0 / 2013-10-21
==================

 * add passing of arguments into the generator. closes #33.

2.0.0 / 2013-10-14
==================

 * remove callback in favour of thunk-only co(). Closes #30 [breaking change]
 * remove `co.wrap()` [breaking change]

1.5.2 / 2013-09-02
==================

 * fix: preserve receiver with co.wrap()

1.5.1 / 2013-08-11
==================

 * remove setImmediate() usage - ~110% perf increase. Closes #14

0.5.0 / 2013-08-10
==================

 * add receiver propagation support
 * examples: update streams.js example to use `http.get()` and streams2 API

1.4.1 / 2013-07-01
==================

 * fix gen.next(val) for latest v8. Closes #8

1.4.0 / 2013-06-21
==================

 * add promise support to joins
 * add `yield generatorFunction` support
 * add `yield generator` support
 * add nested join support

1.3.0 / 2013-06-10
==================

 * add passing of arguments

1.2.1 / 2013-06-08
==================

 * fix join() of zero thunks

1.2.0 / 2013-06-08
==================

 * add array yielding support. great suggestion by @domenic

1.1.0 / 2013-06-06
==================

 * add promise support
 * change nextTick to setImmediate

/**
 * slice() reference.
 */

var slice = Array.prototype.slice;

/**
 * Expose `co`.
 */

module.exports = co['default'] = co.co = co;

/**
 * Wrap the given generator `fn` into a
 * function that returns a promise.
 * This is a separate function so that
 * every `co()` call doesn't create a new,
 * unnecessary closure.
 *
 * @param {GeneratorFunction} fn
 * @return {Function}
 * @api public
 */

co.wrap = function (fn) {
  createPromise.__generatorFunction__ = fn;
  return createPromise;
  function createPromise() {
    return co.call(this, fn.apply(this, arguments));
  }
};

/**
 * Execute the generator function or a generator
 * and return a promise.
 *
 * @param {Function} fn
 * @return {Promise}
 * @api public
 */

function co(gen) {
  var ctx = this;
  var args = slice.call(arguments, 1)

  // we wrap everything in a promise to avoid promise chaining,
  // which leads to memory leak errors.
  // see https://github.com/tj/co/issues/180
  return new Promise(function(resolve, reject) {
    if (typeof gen === 'function') gen = gen.apply(ctx, args);
    if (!gen || typeof gen.next !== 'function') return resolve(gen);

    onFulfilled();

    /**
     * @param {Mixed} res
     * @return {Promise}
     * @api private
     */

    function onFulfilled(res) {
      var ret;
      try {
        ret = gen.next(res);
      } catch (e) {
        return reject(e);
      }
      next(ret);
    }

    /**
     * @param {Error} err
     * @return {Promise}
     * @api private
     */

    function onRejected(err) {
      var ret;
      try {
        ret = gen.throw(err);
      } catch (e) {
        return reject(e);
      }
      next(ret);
    }

    /**
     * Get the next value in the generator,
     * return a promise.
     *
     * @param {Object} ret
     * @return {Promise}
     * @api private
     */

    function next(ret) {
      if (ret.done) return resolve(ret.value);
      var value = toPromise.call(ctx, ret.value);
      if (value && isPromise(value)) return value.then(onFulfilled, onRejected);
      return onRejected(new TypeError('You may only yield a function, promise, generator, array, or object, '
        + 'but the following object was passed: "' + String(ret.value) + '"'));
    }
  });
}

/**
 * Convert a `yield`ed value into a promise.
 *
 * @param {Mixed} obj
 * @return {Promise}
 * @api private
 */

function toPromise(obj) {
  if (!obj) return obj;
  if (isPromise(obj)) return obj;
  if (isGeneratorFunction(obj) || isGenerator(obj)) return co.call(this, obj);
  if ('function' == typeof obj) return thunkToPromise.call(this, obj);
  if (Array.isArray(obj)) return arrayToPromise.call(this, obj);
  if (isObject(obj)) return objectToPromise.call(this, obj);
  return obj;
}

/**
 * Convert a thunk to a promise.
 *
 * @param {Function}
 * @return {Promise}
 * @api private
 */

function thunkToPromise(fn) {
  var ctx = this;
  return new Promise(function (resolve, reject) {
    fn.call(ctx, function (err, res) {
      if (err) return reject(err);
      if (arguments.length > 2) res = slice.call(arguments, 1);
      resolve(res);
    });
  });
}

/**
 * Convert an array of "yieldables" to a promise.
 * Uses `Promise.all()` internally.
 *
 * @param {Array} obj
 * @return {Promise}
 * @api private
 */

function arrayToPromise(obj) {
  return Promise.all(obj.map(toPromise, this));
}

/**
 * Convert an object of "yieldables" to a promise.
 * Uses `Promise.all()` internally.
 *
 * @param {Object} obj
 * @return {Promise}
 * @api private
 */

function objectToPromise(obj){
  var results = new obj.constructor();
  var keys = Object.keys(obj);
  var promises = [];
  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var promise = toPromise.call(this, obj[key]);
    if (promise && isPromise(promise)) defer(promise, key);
    else results[key] = obj[key];
  }
  return Promise.all(promises).then(function () {
    return results;
  });

  function defer(promise, key) {
    // predefine the key in the result
    results[key] = undefined;
    promises.push(promise.then(function (res) {
      results[key] = res;
    }));
  }
}

/**
 * Check if `obj` is a promise.
 *
 * @param {Object} obj
 * @return {Boolean}
 * @api private
 */

function isPromise(obj) {
  return 'function' == typeof obj.then;
}

/**
 * Check if `obj` is a generator.
 *
 * @param {Mixed} obj
 * @return {Boolean}
 * @api private
 */

function isGenerator(obj) {
  return 'function' == typeof obj.next && 'function' == typeof obj.throw;
}

/**
 * Check if `obj` is a generator function.
 *
 * @param {Mixed} obj
 * @return {Boolean}
 * @api private
 */
function isGeneratorFunction(obj) {
  var constructor = obj.constructor;
  if (!constructor) return false;
  if ('GeneratorFunction' === constructor.name || 'GeneratorFunction' === constructor.displayName) return true;
  return isGenerator(constructor.prototype);
}

/**
 * Check for plain object.
 *
 * @param {Mixed} val
 * @return {Boolean}
 * @api private
 */

function isObject(val) {
  return Object == val.constructor;
}
(The MIT License)

Copyright (c) 2014 TJ Holowaychuk &lt;tj@vision-media.ca&gt;

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "co",
  "version": "4.6.0",
  "description": "generator async control flow goodness",
  "devDependencies": {
    "browserify": "^10.0.0",
    "istanbul-harmony": "0",
    "mocha": "^2.0.0",
    "mz": "^1.0.2"
  },
  "files": [
    "index.js"
  ],
  "license": "MIT",
  "repository": "tj/co",
  "engines": {
    "iojs": ">= 1.0.0",
    "node": ">= 0.12.0"
  }
}var util = require('util');
var Stream = require('stream').Stream;
var DelayedStream = require('delayed-stream');

module.exports = CombinedStream;
function CombinedStream() {
  this.writable = false;
  this.readable = true;
  this.dataSize = 0;
  this.maxDataSize = 2 * 1024 * 1024;
  this.pauseStreams = true;

  this._released = false;
  this._streams = [];
  this._currentStream = null;
  this._insideLoop = false;
  this._pendingNext = false;
}
util.inherits(CombinedStream, Stream);

CombinedStream.create = function(options) {
  var combinedStream = new this();

  options = options || {};
  for (var option in options) {
    combinedStream[option] = options[option];
  }

  return combinedStream;
};

CombinedStream.isStreamLike = function(stream) {
  return (typeof stream !== 'function')
    && (typeof stream !== 'string')
    && (typeof stream !== 'boolean')
    && (typeof stream !== 'number')
    && (!Buffer.isBuffer(stream));
};

CombinedStream.prototype.append = function(stream) {
  var isStreamLike = CombinedStream.isStreamLike(stream);

  if (isStreamLike) {
    if (!(stream instanceof DelayedStream)) {
      var newStream = DelayedStream.create(stream, {
        maxDataSize: Infinity,
        pauseStream: this.pauseStreams,
      });
      stream.on('data', this._checkDataSize.bind(this));
      stream = newStream;
    }

    this._handleErrors(stream);

    if (this.pauseStreams) {
      stream.pause();
    }
  }

  this._streams.push(stream);
  return this;
};

CombinedStream.prototype.pipe = function(dest, options) {
  Stream.prototype.pipe.call(this, dest, options);
  this.resume();
  return dest;
};

CombinedStream.prototype._getNext = function() {
  this._currentStream = null;

  if (this._insideLoop) {
    this._pendingNext = true;
    return; // defer call
  }

  this._insideLoop = true;
  try {
    do {
      this._pendingNext = false;
      this._realGetNext();
    } while (this._pendingNext);
  } finally {
    this._insideLoop = false;
  }
};

CombinedStream.prototype._realGetNext = function() {
  var stream = this._streams.shift();


  if (typeof stream == 'undefined') {
    this.end();
    return;
  }

  if (typeof stream !== 'function') {
    this._pipeNext(stream);
    return;
  }

  var getStream = stream;
  getStream(function(stream) {
    var isStreamLike = CombinedStream.isStreamLike(stream);
    if (isStreamLike) {
      stream.on('data', this._checkDataSize.bind(this));
      this._handleErrors(stream);
    }

    this._pipeNext(stream);
  }.bind(this));
};

CombinedStream.prototype._pipeNext = function(stream) {
  this._currentStream = stream;

  var isStreamLike = CombinedStream.isStreamLike(stream);
  if (isStreamLike) {
    stream.on('end', this._getNext.bind(this));
    stream.pipe(this, {end: false});
    return;
  }

  var value = stream;
  this.write(value);
  this._getNext();
};

CombinedStream.prototype._handleErrors = function(stream) {
  var self = this;
  stream.on('error', function(err) {
    self._emitError(err);
  });
};

CombinedStream.prototype.write = function(data) {
  this.emit('data', data);
};

CombinedStream.prototype.pause = function() {
  if (!this.pauseStreams) {
    return;
  }

  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();
  this.emit('pause');
};

CombinedStream.prototype.resume = function() {
  if (!this._released) {
    this._released = true;
    this.writable = true;
    this._getNext();
  }

  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();
  this.emit('resume');
};

CombinedStream.prototype.end = function() {
  this._reset();
  this.emit('end');
};

CombinedStream.prototype.destroy = function() {
  this._reset();
  this.emit('close');
};

CombinedStream.prototype._reset = function() {
  this.writable = false;
  this._streams = [];
  this._currentStream = null;
};

CombinedStream.prototype._checkDataSize = function() {
  this._updateDataSize();
  if (this.dataSize <= this.maxDataSize) {
    return;
  }

  var message =
    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';
  this._emitError(new Error(message));
};

CombinedStream.prototype._updateDataSize = function() {
  this.dataSize = 0;

  var self = this;
  this._streams.forEach(function(stream) {
    if (!stream.dataSize) {
      return;
    }

    self.dataSize += stream.dataSize;
  });

  if (this._currentStream && this._currentStream.dataSize) {
    this.dataSize += this._currentStream.dataSize;
  }
};

CombinedStream.prototype._emitError = function(err) {
  this._reset();
  this.emit('error', err);
};
Copyright (c) 2011 Debuggable Limited <felix@debuggable.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "author": "Felix GeisendÃ¶rfer <felix@debuggable.com> (http://debuggable.com/)",
  "name": "combined-stream",
  "description": "A stream that emits multiple other streams one after another.",
  "version": "1.0.8",
  "homepage": "https://github.com/felixge/node-combined-stream",
  "repository": {
    "type": "git",
    "url": "git://github.com/felixge/node-combined-stream.git"
  },
  "main": "./lib/combined_stream",
  "engines": {
    "node": ">= 0.8"
  },
  "dependencies": {
    "delayed-stream": "~1.0.0"
  },
  "devDependencies": {
    "far": "~0.0.7"
  },
  "license": "MIT"
}0.5.4 / 2021-12-10
==================

  * deps: safe-buffer@5.2.1

0.5.3 / 2018-12-17
==================

  * Use `safe-buffer` for improved Buffer API

0.5.2 / 2016-12-08
==================

  * Fix `parse` to accept any linear whitespace character

0.5.1 / 2016-01-17
==================

  * perf: enable strict mode

0.5.0 / 2014-10-11
==================

  * Add `parse` function

0.4.0 / 2014-09-21
==================

  * Expand non-Unicode `filename` to the full ISO-8859-1 charset

0.3.0 / 2014-09-20
==================

  * Add `fallback` option
  * Add `type` option

0.2.0 / 2014-09-19
==================

  * Reduce ambiguity of file names with hex escape in buggy browsers

0.1.2 / 2014-09-19
==================

  * Fix periodic invalid Unicode filename header

0.1.1 / 2014-09-19
==================

  * Fix invalid characters appearing in `filename*` parameter

0.1.0 / 2014-09-18
==================

  * Make the `filename` argument optional

0.0.0 / 2014-09-18
==================

  * Initial release
/*!
 * content-disposition
 * Copyright(c) 2014-2017 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = contentDisposition
module.exports.parse = parse

/**
 * Module dependencies.
 * @private
 */

var basename = require('path').basename
var Buffer = require('safe-buffer').Buffer

/**
 * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%")
 * @private
 */

var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g // eslint-disable-line no-control-regex

/**
 * RegExp to match percent encoding escape.
 * @private
 */

var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/
var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g

/**
 * RegExp to match non-latin1 characters.
 * @private
 */

var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g

/**
 * RegExp to match quoted-pair in RFC 2616
 *
 * quoted-pair = "\" CHAR
 * CHAR        = <any US-ASCII character (octets 0 - 127)>
 * @private
 */

var QESC_REGEXP = /\\([\u0000-\u007f])/g // eslint-disable-line no-control-regex

/**
 * RegExp to match chars that must be quoted-pair in RFC 2616
 * @private
 */

var QUOTE_REGEXP = /([\\"])/g

/**
 * RegExp for various RFC 2616 grammar
 *
 * parameter     = token "=" ( token | quoted-string )
 * token         = 1*<any CHAR except CTLs or separators>
 * separators    = "(" | ")" | "<" | ">" | "@"
 *               | "," | ";" | ":" | "\" | <">
 *               | "/" | "[" | "]" | "?" | "="
 *               | "{" | "}" | SP | HT
 * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
 * qdtext        = <any TEXT except <">>
 * quoted-pair   = "\" CHAR
 * CHAR          = <any US-ASCII character (octets 0 - 127)>
 * TEXT          = <any OCTET except CTLs, but including LWS>
 * LWS           = [CRLF] 1*( SP | HT )
 * CRLF          = CR LF
 * CR            = <US-ASCII CR, carriage return (13)>
 * LF            = <US-ASCII LF, linefeed (10)>
 * SP            = <US-ASCII SP, space (32)>
 * HT            = <US-ASCII HT, horizontal-tab (9)>
 * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
 * OCTET         = <any 8-bit sequence of data>
 * @private
 */

var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g // eslint-disable-line no-control-regex
var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/
var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/

/**
 * RegExp for various RFC 5987 grammar
 *
 * ext-value     = charset  "'" [ language ] "'" value-chars
 * charset       = "UTF-8" / "ISO-8859-1" / mime-charset
 * mime-charset  = 1*mime-charsetc
 * mime-charsetc = ALPHA / DIGIT
 *               / "!" / "#" / "$" / "%" / "&"
 *               / "+" / "-" / "^" / "_" / "`"
 *               / "{" / "}" / "~"
 * language      = ( 2*3ALPHA [ extlang ] )
 *               / 4ALPHA
 *               / 5*8ALPHA
 * extlang       = *3( "-" 3ALPHA )
 * value-chars   = *( pct-encoded / attr-char )
 * pct-encoded   = "%" HEXDIG HEXDIG
 * attr-char     = ALPHA / DIGIT
 *               / "!" / "#" / "$" / "&" / "+" / "-" / "."
 *               / "^" / "_" / "`" / "|" / "~"
 * @private
 */

var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/

/**
 * RegExp for various RFC 6266 grammar
 *
 * disposition-type = "inline" | "attachment" | disp-ext-type
 * disp-ext-type    = token
 * disposition-parm = filename-parm | disp-ext-parm
 * filename-parm    = "filename" "=" value
 *                  | "filename*" "=" ext-value
 * disp-ext-parm    = token "=" value
 *                  | ext-token "=" ext-value
 * ext-token        = <the characters in token, followed by "*">
 * @private
 */

var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/ // eslint-disable-line no-control-regex

/**
 * Create an attachment Content-Disposition header.
 *
 * @param {string} [filename]
 * @param {object} [options]
 * @param {string} [options.type=attachment]
 * @param {string|boolean} [options.fallback=true]
 * @return {string}
 * @public
 */

function contentDisposition (filename, options) {
  var opts = options || {}

  // get type
  var type = opts.type || 'attachment'

  // get parameters
  var params = createparams(filename, opts.fallback)

  // format into string
  return format(new ContentDisposition(type, params))
}

/**
 * Create parameters object from filename and fallback.
 *
 * @param {string} [filename]
 * @param {string|boolean} [fallback=true]
 * @return {object}
 * @private
 */

function createparams (filename, fallback) {
  if (filename === undefined) {
    return
  }

  var params = {}

  if (typeof filename !== 'string') {
    throw new TypeError('filename must be a string')
  }

  // fallback defaults to true
  if (fallback === undefined) {
    fallback = true
  }

  if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {
    throw new TypeError('fallback must be a string or boolean')
  }

  if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {
    throw new TypeError('fallback must be ISO-8859-1 string')
  }

  // restrict to file base name
  var name = basename(filename)

  // determine if name is suitable for quoted string
  var isQuotedString = TEXT_REGEXP.test(name)

  // generate fallback name
  var fallbackName = typeof fallback !== 'string'
    ? fallback && getlatin1(name)
    : basename(fallback)
  var hasFallback = typeof fallbackName === 'string' && fallbackName !== name

  // set extended filename parameter
  if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {
    params['filename*'] = name
  }

  // set filename parameter
  if (isQuotedString || hasFallback) {
    params.filename = hasFallback
      ? fallbackName
      : name
  }

  return params
}

/**
 * Format object to Content-Disposition header.
 *
 * @param {object} obj
 * @param {string} obj.type
 * @param {object} [obj.parameters]
 * @return {string}
 * @private
 */

function format (obj) {
  var parameters = obj.parameters
  var type = obj.type

  if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {
    throw new TypeError('invalid type')
  }

  // start with normalized type
  var string = String(type).toLowerCase()

  // append parameters
  if (parameters && typeof parameters === 'object') {
    var param
    var params = Object.keys(parameters).sort()

    for (var i = 0; i < params.length; i++) {
      param = params[i]

      var val = param.substr(-1) === '*'
        ? ustring(parameters[param])
        : qstring(parameters[param])

      string += '; ' + param + '=' + val
    }
  }

  return string
}

/**
 * Decode a RFC 5987 field value (gracefully).
 *
 * @param {string} str
 * @return {string}
 * @private
 */

function decodefield (str) {
  var match = EXT_VALUE_REGEXP.exec(str)

  if (!match) {
    throw new TypeError('invalid extended field value')
  }

  var charset = match[1].toLowerCase()
  var encoded = match[2]
  var value

  // to binary string
  var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)

  switch (charset) {
    case 'iso-8859-1':
      value = getlatin1(binary)
      break
    case 'utf-8':
      value = Buffer.from(binary, 'binary').toString('utf8')
      break
    default:
      throw new TypeError('unsupported charset in extended field')
  }

  return value
}

/**
 * Get ISO-8859-1 version of string.
 *
 * @param {string} val
 * @return {string}
 * @private
 */

function getlatin1 (val) {
  // simple Unicode -> ISO-8859-1 transformation
  return String(val).replace(NON_LATIN1_REGEXP, '?')
}

/**
 * Parse Content-Disposition header string.
 *
 * @param {string} string
 * @return {object}
 * @public
 */

function parse (string) {
  if (!string || typeof string !== 'string') {
    throw new TypeError('argument string is required')
  }

  var match = DISPOSITION_TYPE_REGEXP.exec(string)

  if (!match) {
    throw new TypeError('invalid type format')
  }

  // normalize type
  var index = match[0].length
  var type = match[1].toLowerCase()

  var key
  var names = []
  var params = {}
  var value

  // calculate index to start at
  index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'
    ? index - 1
    : index

  // match parameters
  while ((match = PARAM_REGEXP.exec(string))) {
    if (match.index !== index) {
      throw new TypeError('invalid parameter format')
    }

    index += match[0].length
    key = match[1].toLowerCase()
    value = match[2]

    if (names.indexOf(key) !== -1) {
      throw new TypeError('invalid duplicate parameter')
    }

    names.push(key)

    if (key.indexOf('*') + 1 === key.length) {
      // decode extended value
      key = key.slice(0, -1)
      value = decodefield(value)

      // overwrite existing value
      params[key] = value
      continue
    }

    if (typeof params[key] === 'string') {
      continue
    }

    if (value[0] === '"') {
      // remove quotes and escapes
      value = value
        .substr(1, value.length - 2)
        .replace(QESC_REGEXP, '$1')
    }

    params[key] = value
  }

  if (index !== -1 && index !== string.length) {
    throw new TypeError('invalid parameter format')
  }

  return new ContentDisposition(type, params)
}

/**
 * Percent decode a single character.
 *
 * @param {string} str
 * @param {string} hex
 * @return {string}
 * @private
 */

function pdecode (str, hex) {
  return String.fromCharCode(parseInt(hex, 16))
}

/**
 * Percent encode a single character.
 *
 * @param {string} char
 * @return {string}
 * @private
 */

function pencode (char) {
  return '%' + String(char)
    .charCodeAt(0)
    .toString(16)
    .toUpperCase()
}

/**
 * Quote a string for HTTP.
 *
 * @param {string} val
 * @return {string}
 * @private
 */

function qstring (val) {
  var str = String(val)

  return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"'
}

/**
 * Encode a Unicode string for HTTP (RFC 5987).
 *
 * @param {string} val
 * @return {string}
 * @private
 */

function ustring (val) {
  var str = String(val)

  // percent encode as UTF-8
  var encoded = encodeURIComponent(str)
    .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)

  return 'UTF-8\'\'' + encoded
}

/**
 * Class for parsed Content-Disposition header for v8 optimization
 *
 * @public
 * @param {string} type
 * @param {object} parameters
 * @constructor
 */

function ContentDisposition (type, parameters) {
  this.type = type
  this.parameters = parameters
}
(The MIT License)

Copyright (c) 2014-2017 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "content-disposition",
  "description": "Create and parse Content-Disposition header",
  "version": "0.5.4",
  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
  "license": "MIT",
  "repository": "jshttp/content-disposition",
  "dependencies": {
    "safe-buffer": "5.2.1"
  },
  "devDependencies": {
    "deep-equal": "1.0.1",
    "eslint": "7.32.0",
    "eslint-config-standard": "13.0.1",
    "eslint-plugin-import": "2.25.3",
    "eslint-plugin-markdown": "2.2.1",
    "eslint-plugin-node": "11.1.0",
    "eslint-plugin-promise": "5.2.0",
    "eslint-plugin-standard": "4.1.0",
    "istanbul": "0.4.5",
    "mocha": "9.1.3"
  },
  "files": [
    "LICENSE",
    "HISTORY.md",
    "README.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}1.0.4 / 2017-09-11
==================

  * perf: skip parameter parsing when no parameters

1.0.3 / 2017-09-10
==================

  * perf: remove argument reassignment

1.0.2 / 2016-05-09
==================

  * perf: enable strict mode

1.0.1 / 2015-02-13
==================

  * Improve missing `Content-Type` header error message

1.0.0 / 2015-02-01
==================

  * Initial implementation, derived from `media-typer@0.3.0`
/*!
 * content-type
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1
 *
 * parameter     = token "=" ( token / quoted-string )
 * token         = 1*tchar
 * tchar         = "!" / "#" / "$" / "%" / "&" / "'" / "*"
 *               / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
 *               / DIGIT / ALPHA
 *               ; any VCHAR, except delimiters
 * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE
 * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text
 * obs-text      = %x80-FF
 * quoted-pair   = "\" ( HTAB / SP / VCHAR / obs-text )
 */
var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g
var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/
var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/

/**
 * RegExp to match quoted-pair in RFC 7230 sec 3.2.6
 *
 * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )
 * obs-text    = %x80-FF
 */
var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g

/**
 * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6
 */
var QUOTE_REGEXP = /([\\"])/g

/**
 * RegExp to match type in RFC 7231 sec 3.1.1.1
 *
 * media-type = type "/" subtype
 * type       = token
 * subtype    = token
 */
var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/

/**
 * Module exports.
 * @public
 */

exports.format = format
exports.parse = parse

/**
 * Format object to media type.
 *
 * @param {object} obj
 * @return {string}
 * @public
 */

function format (obj) {
  if (!obj || typeof obj !== 'object') {
    throw new TypeError('argument obj is required')
  }

  var parameters = obj.parameters
  var type = obj.type

  if (!type || !TYPE_REGEXP.test(type)) {
    throw new TypeError('invalid type')
  }

  var string = type

  // append parameters
  if (parameters && typeof parameters === 'object') {
    var param
    var params = Object.keys(parameters).sort()

    for (var i = 0; i < params.length; i++) {
      param = params[i]

      if (!TOKEN_REGEXP.test(param)) {
        throw new TypeError('invalid parameter name')
      }

      string += '; ' + param + '=' + qstring(parameters[param])
    }
  }

  return string
}

/**
 * Parse media type to object.
 *
 * @param {string|object} string
 * @return {Object}
 * @public
 */

function parse (string) {
  if (!string) {
    throw new TypeError('argument string is required')
  }

  // support req/res-like objects as argument
  var header = typeof string === 'object'
    ? getcontenttype(string)
    : string

  if (typeof header !== 'string') {
    throw new TypeError('argument string is required to be a string')
  }

  var index = header.indexOf(';')
  var type = index !== -1
    ? header.substr(0, index).trim()
    : header.trim()

  if (!TYPE_REGEXP.test(type)) {
    throw new TypeError('invalid media type')
  }

  var obj = new ContentType(type.toLowerCase())

  // parse parameters
  if (index !== -1) {
    var key
    var match
    var value

    PARAM_REGEXP.lastIndex = index

    while ((match = PARAM_REGEXP.exec(header))) {
      if (match.index !== index) {
        throw new TypeError('invalid parameter format')
      }

      index += match[0].length
      key = match[1].toLowerCase()
      value = match[2]

      if (value[0] === '"') {
        // remove quotes and escapes
        value = value
          .substr(1, value.length - 2)
          .replace(QESC_REGEXP, '$1')
      }

      obj.parameters[key] = value
    }

    if (index !== header.length) {
      throw new TypeError('invalid parameter format')
    }
  }

  return obj
}

/**
 * Get content-type from req/res objects.
 *
 * @param {object}
 * @return {Object}
 * @private
 */

function getcontenttype (obj) {
  var header

  if (typeof obj.getHeader === 'function') {
    // res-like
    header = obj.getHeader('content-type')
  } else if (typeof obj.headers === 'object') {
    // req-like
    header = obj.headers && obj.headers['content-type']
  }

  if (typeof header !== 'string') {
    throw new TypeError('content-type header is missing from object')
  }

  return header
}

/**
 * Quote a string if necessary.
 *
 * @param {string} val
 * @return {string}
 * @private
 */

function qstring (val) {
  var str = String(val)

  // no need to quote tokens
  if (TOKEN_REGEXP.test(str)) {
    return str
  }

  if (str.length > 0 && !TEXT_REGEXP.test(str)) {
    throw new TypeError('invalid parameter value')
  }

  return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"'
}

/**
 * Class to represent a content type.
 * @private
 */
function ContentType (type) {
  this.parameters = Object.create(null)
  this.type = type
}
(The MIT License)

Copyright (c) 2015 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "content-type",
  "description": "Create and parse HTTP Content-Type header",
  "version": "1.0.4",
  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
  "license": "MIT",
  "repository": "jshttp/content-type",
  "devDependencies": {
    "eslint": "3.19.0",
    "eslint-config-standard": "10.2.1",
    "eslint-plugin-import": "2.7.0",
    "eslint-plugin-node": "5.1.1",
    "eslint-plugin-promise": "3.5.0",
    "eslint-plugin-standard": "3.0.1",
    "istanbul": "0.4.5",
    "mocha": "~1.21.5"
  },
  "files": [
    "LICENSE",
    "HISTORY.md",
    "README.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}0.8.0 / 2019-10-11
==================

  * Fix check for default `secure` option behavior
  * Fix `maxAge` option preventing cookie deletion
  * Support `"none"` in `sameSite` option
  * deps: depd@~2.0.0
    - Replace internal `eval` usage with `Function` constructor
    - Use instance methods on `process` to check for listeners
  * deps: keygrip@~1.1.0
    - Use `tsscmp` module for timing-safe signature verification

0.7.3 / 2018-11-04
==================

  * deps: keygrip@~1.0.3
    - perf: enable strict mode

0.7.2 / 2018-09-09
==================

  * deps: depd@~1.1.2
  * perf: remove argument reassignment

0.7.1 / 2017-08-26
==================

  * deps: depd@~1.1.1
    - Remove unnecessary `Buffer` loading
  * deps: keygrip@~1.0.2
    - perf: improve comparison speed

0.7.0 / 2017-02-19
==================

  * Add `sameSite` option for SameSite cookie support
  * pref: enable strict mode

0.6.2 / 2016-11-12
==================

  * Fix `keys` deprecation message
  * deps: keygrip@~1.0.1

0.6.1 / 2016-02-29
==================

  * Fix regression in 0.6.0 for array of strings in `keys` option

0.6.0 / 2016-02-29
==================

  * Add `secure` constructor option for secure connection checking
  * Change constructor to signature `new Cookies(req, res, [options])`
    - Replace `new Cookies(req, res, key)` with `new Cookies(req, res, {'keys': keys})`
  * Change prototype construction for proper "constructor" property
  * Deprecate `secureProxy` option in `.set`; use `secure` option instead
    - If `secure: true` throws even over SSL, use the `secure` constructor option

0.5.1 / 2014-07-27
==================

  * Throw on invalid values provided to `Cookie` constructor
    - This is not strict validation, but basic RFC 7230 validation

0.5.0 / 2014-07-27
==================

  * Integrate with `req.protocol` for secure cookies
  * Support `maxAge` as well as `maxage`

0.4.1 / 2014-05-07
==================

  * Update package for repo move

0.4.0 / 2014-01-31
==================

  * Allow passing an array of strings as keys

0.3.8-0.2.0
===========

  * TODO: write down history for these releases

0.1.6 / 2011-03-01
==================

  * SSL cookies secure by default
  * Use httpOnly by default unless explicitly false

0.1.5 / 2011-02-26
==================

  * Delete sig cookie if signed cookie is deleted

0.1.4 / 2011-02-26
==================

  * Always set path

0.1.3 / 2011-02-26
==================

  * Add sensible defaults for path

0.1.2 / 2011-02-26
==================

  * Inherit cookie properties to signature cookie

0.1.1 / 2011-02-25
==================

  * Readme updates

0.1.0 / 2011-02-25
==================

  * Initial release
/*!
 * cookies
 * Copyright(c) 2014 Jed Schmidt, http://jed.is/
 * Copyright(c) 2015-2016 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

var deprecate = require('depd')('cookies')
var Keygrip = require('keygrip')
var http = require('http')
var cache = {}

/**
 * RegExp to match field-content in RFC 7230 sec 3.2
 *
 * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
 * field-vchar   = VCHAR / obs-text
 * obs-text      = %x80-FF
 */

var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;

/**
 * RegExp to match Same-Site cookie attribute value.
 */

var SAME_SITE_REGEXP = /^(?:lax|none|strict)$/i

function Cookies(request, response, options) {
  if (!(this instanceof Cookies)) return new Cookies(request, response, options)

  this.secure = undefined
  this.request = request
  this.response = response

  if (options) {
    if (Array.isArray(options)) {
      // array of key strings
      deprecate('"keys" argument; provide using options {"keys": [...]}')
      this.keys = new Keygrip(options)
    } else if (options.constructor && options.constructor.name === 'Keygrip') {
      // any keygrip constructor to allow different versions
      deprecate('"keys" argument; provide using options {"keys": keygrip}')
      this.keys = options
    } else {
      this.keys = Array.isArray(options.keys) ? new Keygrip(options.keys) : options.keys
      this.secure = options.secure
    }
  }
}

Cookies.prototype.get = function(name, opts) {
  var sigName = name + ".sig"
    , header, match, value, remote, data, index
    , signed = opts && opts.signed !== undefined ? opts.signed : !!this.keys

  header = this.request.headers["cookie"]
  if (!header) return

  match = header.match(getPattern(name))
  if (!match) return

  value = match[1]
  if (!opts || !signed) return value

  remote = this.get(sigName)
  if (!remote) return

  data = name + "=" + value
  if (!this.keys) throw new Error('.keys required for signed cookies');
  index = this.keys.index(data, remote)

  if (index < 0) {
    this.set(sigName, null, {path: "/", signed: false })
  } else {
    index && this.set(sigName, this.keys.sign(data), { signed: false })
    return value
  }
};

Cookies.prototype.set = function(name, value, opts) {
  var res = this.response
    , req = this.request
    , headers = res.getHeader("Set-Cookie") || []
    , secure = this.secure !== undefined ? !!this.secure : req.protocol === 'https' || req.connection.encrypted
    , cookie = new Cookie(name, value, opts)
    , signed = opts && opts.signed !== undefined ? opts.signed : !!this.keys

  if (typeof headers == "string") headers = [headers]

  if (!secure && opts && opts.secure) {
    throw new Error('Cannot send secure cookie over unencrypted connection')
  }

  cookie.secure = opts && opts.secure !== undefined
    ? opts.secure
    : secure

  if (opts && "secureProxy" in opts) {
    deprecate('"secureProxy" option; use "secure" option, provide "secure" to constructor if needed')
    cookie.secure = opts.secureProxy
  }

  pushCookie(headers, cookie)

  if (opts && signed) {
    if (!this.keys) throw new Error('.keys required for signed cookies');
    cookie.value = this.keys.sign(cookie.toString())
    cookie.name += ".sig"
    pushCookie(headers, cookie)
  }

  var setHeader = res.set ? http.OutgoingMessage.prototype.setHeader : res.setHeader
  setHeader.call(res, 'Set-Cookie', headers)
  return this
};

function Cookie(name, value, attrs) {
  if (!fieldContentRegExp.test(name)) {
    throw new TypeError('argument name is invalid');
  }

  if (value && !fieldContentRegExp.test(value)) {
    throw new TypeError('argument value is invalid');
  }

  this.name = name
  this.value = value || ""

  for (var name in attrs) {
    this[name] = attrs[name]
  }

  if (!this.value) {
    this.expires = new Date(0)
    this.maxAge = null
  }

  if (this.path && !fieldContentRegExp.test(this.path)) {
    throw new TypeError('option path is invalid');
  }

  if (this.domain && !fieldContentRegExp.test(this.domain)) {
    throw new TypeError('option domain is invalid');
  }

  if (this.sameSite && this.sameSite !== true && !SAME_SITE_REGEXP.test(this.sameSite)) {
    throw new TypeError('option sameSite is invalid')
  }
}

Cookie.prototype.path = "/";
Cookie.prototype.expires = undefined;
Cookie.prototype.domain = undefined;
Cookie.prototype.httpOnly = true;
Cookie.prototype.sameSite = false;
Cookie.prototype.secure = false;
Cookie.prototype.overwrite = false;

Cookie.prototype.toString = function() {
  return this.name + "=" + this.value
};

Cookie.prototype.toHeader = function() {
  var header = this.toString()

  if (this.maxAge) this.expires = new Date(Date.now() + this.maxAge);

  if (this.path     ) header += "; path=" + this.path
  if (this.expires  ) header += "; expires=" + this.expires.toUTCString()
  if (this.domain   ) header += "; domain=" + this.domain
  if (this.sameSite ) header += "; samesite=" + (this.sameSite === true ? 'strict' : this.sameSite.toLowerCase())
  if (this.secure   ) header += "; secure"
  if (this.httpOnly ) header += "; httponly"

  return header
};

// back-compat so maxage mirrors maxAge
Object.defineProperty(Cookie.prototype, 'maxage', {
  configurable: true,
  enumerable: true,
  get: function () { return this.maxAge },
  set: function (val) { return this.maxAge = val }
});
deprecate.property(Cookie.prototype, 'maxage', '"maxage"; use "maxAge" instead')

function getPattern(name) {
  if (cache[name]) return cache[name]

  return cache[name] = new RegExp(
    "(?:^|;) *" +
    name.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") +
    "=([^;]*)"
  )
}

function pushCookie(headers, cookie) {
  if (cookie.overwrite) {
    for (var i = headers.length - 1; i >= 0; i--) {
      if (headers[i].indexOf(cookie.name + '=') === 0) {
        headers.splice(i, 1)
      }
    }
  }

  headers.push(cookie.toHeader())
}

Cookies.connect = Cookies.express = function(keys) {
  return function(req, res, next) {
    req.cookies = res.cookies = new Cookies(req, res, {
      keys: keys
    })

    next()
  }
}

Cookies.Cookie = Cookie

module.exports = Cookies
(The MIT License)

Copyright (c) 2014 Jed Schmidt, http://jed.is/
Copyright (c) 2015-2016 Douglas Christopher Wilson <doug@somethingdoug.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "cookies",
  "description": "Cookies, optionally signed using Keygrip.",
  "version": "0.8.0",
  "author": "Jed Schmidt <tr@nslator.jp> (http://jed.is)",
  "license": "MIT",
  "repository": "pillarjs/cookies",
  "dependencies": {
    "depd": "~2.0.0",
    "keygrip": "~1.1.0"
  },
  "devDependencies": {
    "eslint": "4.19.1",
    "express": "4.17.1",
    "mocha": "6.2.1",
    "nyc": "14.1.1",
    "restify": "8.4.0",
    "supertest": "4.0.2"
  },
  "files": [
    "HISTORY.md",
    "LICENSE",
    "README.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.8"
  }
}// @flow strict

export type StandardLonghandProperties<TLength = string | 0, TTime = string> = {|
  accentColor?: Property$AccentColor,
  alignContent?: Property$AlignContent,
  alignItems?: Property$AlignItems,
  alignSelf?: Property$AlignSelf,
  alignTracks?: Property$AlignTracks,
  animationComposition?: Property$AnimationComposition,
  animationDelay?: Property$AnimationDelay<TTime>,
  animationDirection?: Property$AnimationDirection,
  animationDuration?: Property$AnimationDuration<TTime>,
  animationFillMode?: Property$AnimationFillMode,
  animationIterationCount?: Property$AnimationIterationCount,
  animationName?: Property$AnimationName,
  animationPlayState?: Property$AnimationPlayState,
  animationTimeline?: Property$AnimationTimeline,
  animationTimingFunction?: Property$AnimationTimingFunction,
  appearance?: Property$Appearance,
  aspectRatio?: Property$AspectRatio,
  backdropFilter?: Property$BackdropFilter,
  backfaceVisibility?: Property$BackfaceVisibility,
  backgroundAttachment?: Property$BackgroundAttachment,
  backgroundBlendMode?: Property$BackgroundBlendMode,
  backgroundClip?: Property$BackgroundClip,
  backgroundColor?: Property$BackgroundColor,
  backgroundImage?: Property$BackgroundImage,
  backgroundOrigin?: Property$BackgroundOrigin,
  backgroundPositionX?: Property$BackgroundPositionX<TLength>,
  backgroundPositionY?: Property$BackgroundPositionY<TLength>,
  backgroundRepeat?: Property$BackgroundRepeat,
  backgroundSize?: Property$BackgroundSize<TLength>,
  blockOverflow?: Property$BlockOverflow,
  blockSize?: Property$BlockSize<TLength>,
  borderBlockColor?: Property$BorderBlockColor,
  borderBlockEndColor?: Property$BorderBlockEndColor,
  borderBlockEndStyle?: Property$BorderBlockEndStyle,
  borderBlockEndWidth?: Property$BorderBlockEndWidth<TLength>,
  borderBlockStartColor?: Property$BorderBlockStartColor,
  borderBlockStartStyle?: Property$BorderBlockStartStyle,
  borderBlockStartWidth?: Property$BorderBlockStartWidth<TLength>,
  borderBlockStyle?: Property$BorderBlockStyle,
  borderBlockWidth?: Property$BorderBlockWidth<TLength>,
  borderBottomColor?: Property$BorderBottomColor,
  borderBottomLeftRadius?: Property$BorderBottomLeftRadius<TLength>,
  borderBottomRightRadius?: Property$BorderBottomRightRadius<TLength>,
  borderBottomStyle?: Property$BorderBottomStyle,
  borderBottomWidth?: Property$BorderBottomWidth<TLength>,
  borderCollapse?: Property$BorderCollapse,
  borderEndEndRadius?: Property$BorderEndEndRadius<TLength>,
  borderEndStartRadius?: Property$BorderEndStartRadius<TLength>,
  borderImageOutset?: Property$BorderImageOutset<TLength>,
  borderImageRepeat?: Property$BorderImageRepeat,
  borderImageSlice?: Property$BorderImageSlice,
  borderImageSource?: Property$BorderImageSource,
  borderImageWidth?: Property$BorderImageWidth<TLength>,
  borderInlineColor?: Property$BorderInlineColor,
  borderInlineEndColor?: Property$BorderInlineEndColor,
  borderInlineEndStyle?: Property$BorderInlineEndStyle,
  borderInlineEndWidth?: Property$BorderInlineEndWidth<TLength>,
  borderInlineStartColor?: Property$BorderInlineStartColor,
  borderInlineStartStyle?: Property$BorderInlineStartStyle,
  borderInlineStartWidth?: Property$BorderInlineStartWidth<TLength>,
  borderInlineStyle?: Property$BorderInlineStyle,
  borderInlineWidth?: Property$BorderInlineWidth<TLength>,
  borderLeftColor?: Property$BorderLeftColor,
  borderLeftStyle?: Property$BorderLeftStyle,
  borderLeftWidth?: Property$BorderLeftWidth<TLength>,
  borderRightColor?: Property$BorderRightColor,
  borderRightStyle?: Property$BorderRightStyle,
  borderRightWidth?: Property$BorderRightWidth<TLength>,
  borderSpacing?: Property$BorderSpacing<TLength>,
  borderStartEndRadius?: Property$BorderStartEndRadius<TLength>,
  borderStartStartRadius?: Property$BorderStartStartRadius<TLength>,
  borderTopColor?: Property$BorderTopColor,
  borderTopLeftRadius?: Property$BorderTopLeftRadius<TLength>,
  borderTopRightRadius?: Property$BorderTopRightRadius<TLength>,
  borderTopStyle?: Property$BorderTopStyle,
  borderTopWidth?: Property$BorderTopWidth<TLength>,
  bottom?: Property$Bottom<TLength>,
  boxDecorationBreak?: Property$BoxDecorationBreak,
  boxShadow?: Property$BoxShadow,
  boxSizing?: Property$BoxSizing,
  breakAfter?: Property$BreakAfter,
  breakBefore?: Property$BreakBefore,
  breakInside?: Property$BreakInside,
  captionSide?: Property$CaptionSide,
  caretColor?: Property$CaretColor,
  clear?: Property$Clear,
  clipPath?: Property$ClipPath,
  color?: Property$Color,
  colorAdjust?: Property$PrintColorAdjust,
  colorScheme?: Property$ColorScheme,
  columnCount?: Property$ColumnCount,
  columnFill?: Property$ColumnFill,
  columnGap?: Property$ColumnGap<TLength>,
  columnRuleColor?: Property$ColumnRuleColor,
  columnRuleStyle?: Property$ColumnRuleStyle,
  columnRuleWidth?: Property$ColumnRuleWidth<TLength>,
  columnSpan?: Property$ColumnSpan,
  columnWidth?: Property$ColumnWidth<TLength>,
  contain?: Property$Contain,
  content?: Property$Content,
  contentVisibility?: Property$ContentVisibility,
  counterIncrement?: Property$CounterIncrement,
  counterReset?: Property$CounterReset,
  counterSet?: Property$CounterSet,
  cursor?: Property$Cursor,
  direction?: Property$Direction,
  display?: Property$Display,
  emptyCells?: Property$EmptyCells,
  filter?: Property$Filter,
  flexBasis?: Property$FlexBasis<TLength>,
  flexDirection?: Property$FlexDirection,
  flexGrow?: Property$FlexGrow,
  flexShrink?: Property$FlexShrink,
  flexWrap?: Property$FlexWrap,
  float?: Property$Float,
  fontFamily?: Property$FontFamily,
  fontFeatureSettings?: Property$FontFeatureSettings,
  fontKerning?: Property$FontKerning,
  fontLanguageOverride?: Property$FontLanguageOverride,
  fontOpticalSizing?: Property$FontOpticalSizing,
  fontSize?: Property$FontSize<TLength>,
  fontSizeAdjust?: Property$FontSizeAdjust,
  fontSmooth?: Property$FontSmooth<TLength>,
  fontStretch?: Property$FontStretch,
  fontStyle?: Property$FontStyle,
  fontSynthesis?: Property$FontSynthesis,
  fontVariant?: Property$FontVariant,
  fontVariantAlternates?: Property$FontVariantAlternates,
  fontVariantCaps?: Property$FontVariantCaps,
  fontVariantEastAsian?: Property$FontVariantEastAsian,
  fontVariantLigatures?: Property$FontVariantLigatures,
  fontVariantNumeric?: Property$FontVariantNumeric,
  fontVariantPosition?: Property$FontVariantPosition,
  fontVariationSettings?: Property$FontVariationSettings,
  fontWeight?: Property$FontWeight,
  forcedColorAdjust?: Property$ForcedColorAdjust,
  gridAutoColumns?: Property$GridAutoColumns<TLength>,
  gridAutoFlow?: Property$GridAutoFlow,
  gridAutoRows?: Property$GridAutoRows<TLength>,
  gridColumnEnd?: Property$GridColumnEnd,
  gridColumnStart?: Property$GridColumnStart,
  gridRowEnd?: Property$GridRowEnd,
  gridRowStart?: Property$GridRowStart,
  gridTemplateAreas?: Property$GridTemplateAreas,
  gridTemplateColumns?: Property$GridTemplateColumns<TLength>,
  gridTemplateRows?: Property$GridTemplateRows<TLength>,
  hangingPunctuation?: Property$HangingPunctuation,
  height?: Property$Height<TLength>,
  hyphenateCharacter?: Property$HyphenateCharacter,
  hyphens?: Property$Hyphens,
  imageOrientation?: Property$ImageOrientation,
  imageRendering?: Property$ImageRendering,
  imageResolution?: Property$ImageResolution,
  initialLetter?: Property$InitialLetter,
  inlineSize?: Property$InlineSize<TLength>,
  inputSecurity?: Property$InputSecurity,
  inset?: Property$Inset<TLength>,
  insetBlock?: Property$InsetBlock<TLength>,
  insetBlockEnd?: Property$InsetBlockEnd<TLength>,
  insetBlockStart?: Property$InsetBlockStart<TLength>,
  insetInline?: Property$InsetInline<TLength>,
  insetInlineEnd?: Property$InsetInlineEnd<TLength>,
  insetInlineStart?: Property$InsetInlineStart<TLength>,
  isolation?: Property$Isolation,
  justifyContent?: Property$JustifyContent,
  justifyItems?: Property$JustifyItems,
  justifySelf?: Property$JustifySelf,
  justifyTracks?: Property$JustifyTracks,
  left?: Property$Left<TLength>,
  letterSpacing?: Property$LetterSpacing<TLength>,
  lineBreak?: Property$LineBreak,
  lineHeight?: Property$LineHeight<TLength>,
  lineHeightStep?: Property$LineHeightStep<TLength>,
  listStyleImage?: Property$ListStyleImage,
  listStylePosition?: Property$ListStylePosition,
  listStyleType?: Property$ListStyleType,
  marginBlock?: Property$MarginBlock<TLength>,
  marginBlockEnd?: Property$MarginBlockEnd<TLength>,
  marginBlockStart?: Property$MarginBlockStart<TLength>,
  marginBottom?: Property$MarginBottom<TLength>,
  marginInline?: Property$MarginInline<TLength>,
  marginInlineEnd?: Property$MarginInlineEnd<TLength>,
  marginInlineStart?: Property$MarginInlineStart<TLength>,
  marginLeft?: Property$MarginLeft<TLength>,
  marginRight?: Property$MarginRight<TLength>,
  marginTop?: Property$MarginTop<TLength>,
  maskBorderMode?: Property$MaskBorderMode,
  maskBorderOutset?: Property$MaskBorderOutset<TLength>,
  maskBorderRepeat?: Property$MaskBorderRepeat,
  maskBorderSlice?: Property$MaskBorderSlice,
  maskBorderSource?: Property$MaskBorderSource,
  maskBorderWidth?: Property$MaskBorderWidth<TLength>,
  maskClip?: Property$MaskClip,
  maskComposite?: Property$MaskComposite,
  maskImage?: Property$MaskImage,
  maskMode?: Property$MaskMode,
  maskOrigin?: Property$MaskOrigin,
  maskPosition?: Property$MaskPosition<TLength>,
  maskRepeat?: Property$MaskRepeat,
  maskSize?: Property$MaskSize<TLength>,
  maskType?: Property$MaskType,
  mathDepth?: Property$MathDepth,
  mathShift?: Property$MathShift,
  mathStyle?: Property$MathStyle,
  maxBlockSize?: Property$MaxBlockSize<TLength>,
  maxHeight?: Property$MaxHeight<TLength>,
  maxInlineSize?: Property$MaxInlineSize<TLength>,
  maxLines?: Property$MaxLines,
  maxWidth?: Property$MaxWidth<TLength>,
  minBlockSize?: Property$MinBlockSize<TLength>,
  minHeight?: Property$MinHeight<TLength>,
  minInlineSize?: Property$MinInlineSize<TLength>,
  minWidth?: Property$MinWidth<TLength>,
  mixBlendMode?: Property$MixBlendMode,
  motionDistance?: Property$OffsetDistance<TLength>,
  motionPath?: Property$OffsetPath,
  motionRotation?: Property$OffsetRotate,
  objectFit?: Property$ObjectFit,
  objectPosition?: Property$ObjectPosition<TLength>,
  offsetAnchor?: Property$OffsetAnchor<TLength>,
  offsetDistance?: Property$OffsetDistance<TLength>,
  offsetPath?: Property$OffsetPath,
  offsetRotate?: Property$OffsetRotate,
  offsetRotation?: Property$OffsetRotate,
  opacity?: Property$Opacity,
  order?: Property$Order,
  orphans?: Property$Orphans,
  outlineColor?: Property$OutlineColor,
  outlineOffset?: Property$OutlineOffset<TLength>,
  outlineStyle?: Property$OutlineStyle,
  outlineWidth?: Property$OutlineWidth<TLength>,
  overflowAnchor?: Property$OverflowAnchor,
  overflowBlock?: Property$OverflowBlock,
  overflowClipBox?: Property$OverflowClipBox,
  overflowClipMargin?: Property$OverflowClipMargin<TLength>,
  overflowInline?: Property$OverflowInline,
  overflowWrap?: Property$OverflowWrap,
  overflowX?: Property$OverflowX,
  overflowY?: Property$OverflowY,
  overscrollBehaviorBlock?: Property$OverscrollBehaviorBlock,
  overscrollBehaviorInline?: Property$OverscrollBehaviorInline,
  overscrollBehaviorX?: Property$OverscrollBehaviorX,
  overscrollBehaviorY?: Property$OverscrollBehaviorY,
  paddingBlock?: Property$PaddingBlock<TLength>,
  paddingBlockEnd?: Property$PaddingBlockEnd<TLength>,
  paddingBlockStart?: Property$PaddingBlockStart<TLength>,
  paddingBottom?: Property$PaddingBottom<TLength>,
  paddingInline?: Property$PaddingInline<TLength>,
  paddingInlineEnd?: Property$PaddingInlineEnd<TLength>,
  paddingInlineStart?: Property$PaddingInlineStart<TLength>,
  paddingLeft?: Property$PaddingLeft<TLength>,
  paddingRight?: Property$PaddingRight<TLength>,
  paddingTop?: Property$PaddingTop<TLength>,
  pageBreakAfter?: Property$PageBreakAfter,
  pageBreakBefore?: Property$PageBreakBefore,
  pageBreakInside?: Property$PageBreakInside,
  paintOrder?: Property$PaintOrder,
  perspective?: Property$Perspective<TLength>,
  perspectiveOrigin?: Property$PerspectiveOrigin<TLength>,
  placeContent?: Property$PlaceContent,
  pointerEvents?: Property$PointerEvents,
  position?: Property$Position,
  printColorAdjust?: Property$PrintColorAdjust,
  quotes?: Property$Quotes,
  resize?: Property$Resize,
  right?: Property$Right<TLength>,
  rotate?: Property$Rotate,
  rowGap?: Property$RowGap<TLength>,
  rubyAlign?: Property$RubyAlign,
  rubyMerge?: Property$RubyMerge,
  rubyPosition?: Property$RubyPosition,
  scale?: Property$Scale,
  scrollBehavior?: Property$ScrollBehavior,
  scrollMargin?: Property$ScrollMargin<TLength>,
  scrollMarginBlock?: Property$ScrollMarginBlock<TLength>,
  scrollMarginBlockEnd?: Property$ScrollMarginBlockEnd<TLength>,
  scrollMarginBlockStart?: Property$ScrollMarginBlockStart<TLength>,
  scrollMarginBottom?: Property$ScrollMarginBottom<TLength>,
  scrollMarginInline?: Property$ScrollMarginInline<TLength>,
  scrollMarginInlineEnd?: Property$ScrollMarginInlineEnd<TLength>,
  scrollMarginInlineStart?: Property$ScrollMarginInlineStart<TLength>,
  scrollMarginLeft?: Property$ScrollMarginLeft<TLength>,
  scrollMarginRight?: Property$ScrollMarginRight<TLength>,
  scrollMarginTop?: Property$ScrollMarginTop<TLength>,
  scrollPadding?: Property$ScrollPadding<TLength>,
  scrollPaddingBlock?: Property$ScrollPaddingBlock<TLength>,
  scrollPaddingBlockEnd?: Property$ScrollPaddingBlockEnd<TLength>,
  scrollPaddingBlockStart?: Property$ScrollPaddingBlockStart<TLength>,
  scrollPaddingBottom?: Property$ScrollPaddingBottom<TLength>,
  scrollPaddingInline?: Property$ScrollPaddingInline<TLength>,
  scrollPaddingInlineEnd?: Property$ScrollPaddingInlineEnd<TLength>,
  scrollPaddingInlineStart?: Property$ScrollPaddingInlineStart<TLength>,
  scrollPaddingLeft?: Property$ScrollPaddingLeft<TLength>,
  scrollPaddingRight?: Property$ScrollPaddingRight<TLength>,
  scrollPaddingTop?: Property$ScrollPaddingTop<TLength>,
  scrollSnapAlign?: Property$ScrollSnapAlign,
  scrollSnapMargin?: Property$ScrollMargin<TLength>,
  scrollSnapMarginBottom?: Property$ScrollMarginBottom<TLength>,
  scrollSnapMarginLeft?: Property$ScrollMarginLeft<TLength>,
  scrollSnapMarginRight?: Property$ScrollMarginRight<TLength>,
  scrollSnapMarginTop?: Property$ScrollMarginTop<TLength>,
  scrollSnapStop?: Property$ScrollSnapStop,
  scrollSnapType?: Property$ScrollSnapType,
  scrollbarColor?: Property$ScrollbarColor,
  scrollbarGutter?: Property$ScrollbarGutter,
  scrollbarWidth?: Property$ScrollbarWidth,
  shapeImageThreshold?: Property$ShapeImageThreshold,
  shapeMargin?: Property$ShapeMargin<TLength>,
  shapeOutside?: Property$ShapeOutside,
  tabSize?: Property$TabSize<TLength>,
  tableLayout?: Property$TableLayout,
  textAlign?: Property$TextAlign,
  textAlignLast?: Property$TextAlignLast,
  textCombineUpright?: Property$TextCombineUpright,
  textDecorationColor?: Property$TextDecorationColor,
  textDecorationLine?: Property$TextDecorationLine,
  textDecorationSkip?: Property$TextDecorationSkip,
  textDecorationSkipInk?: Property$TextDecorationSkipInk,
  textDecorationStyle?: Property$TextDecorationStyle,
  textDecorationThickness?: Property$TextDecorationThickness<TLength>,
  textEmphasisColor?: Property$TextEmphasisColor,
  textEmphasisPosition?: Property$TextEmphasisPosition,
  textEmphasisStyle?: Property$TextEmphasisStyle,
  textIndent?: Property$TextIndent<TLength>,
  textJustify?: Property$TextJustify,
  textOrientation?: Property$TextOrientation,
  textOverflow?: Property$TextOverflow,
  textRendering?: Property$TextRendering,
  textShadow?: Property$TextShadow,
  textSizeAdjust?: Property$TextSizeAdjust,
  textTransform?: Property$TextTransform,
  textUnderlineOffset?: Property$TextUnderlineOffset<TLength>,
  textUnderlinePosition?: Property$TextUnderlinePosition,
  top?: Property$Top<TLength>,
  touchAction?: Property$TouchAction,
  transform?: Property$Transform,
  transformBox?: Property$TransformBox,
  transformOrigin?: Property$TransformOrigin<TLength>,
  transformStyle?: Property$TransformStyle,
  transitionDelay?: Property$TransitionDelay<TTime>,
  transitionDuration?: Property$TransitionDuration<TTime>,
  transitionProperty?: Property$TransitionProperty,
  transitionTimingFunction?: Property$TransitionTimingFunction,
  translate?: Property$Translate<TLength>,
  unicodeBidi?: Property$UnicodeBidi,
  userSelect?: Property$UserSelect,
  verticalAlign?: Property$VerticalAlign<TLength>,
  visibility?: Property$Visibility,
  whiteSpace?: Property$WhiteSpace,
  widows?: Property$Widows,
  width?: Property$Width<TLength>,
  willChange?: Property$WillChange,
  wordBreak?: Property$WordBreak,
  wordSpacing?: Property$WordSpacing<TLength>,
  wordWrap?: Property$WordWrap,
  writingMode?: Property$WritingMode,
  zIndex?: Property$ZIndex,
  zoom?: Property$Zoom,
|};

export type StandardShorthandProperties<TLength = string | 0, TTime = string> = {|
  all?: Property$All,
  animation?: Property$Animation<TTime>,
  background?: Property$Background<TLength>,
  backgroundPosition?: Property$BackgroundPosition<TLength>,
  border?: Property$Border<TLength>,
  borderBlock?: Property$BorderBlock<TLength>,
  borderBlockEnd?: Property$BorderBlockEnd<TLength>,
  borderBlockStart?: Property$BorderBlockStart<TLength>,
  borderBottom?: Property$BorderBottom<TLength>,
  borderColor?: Property$BorderColor,
  borderImage?: Property$BorderImage,
  borderInline?: Property$BorderInline<TLength>,
  borderInlineEnd?: Property$BorderInlineEnd<TLength>,
  borderInlineStart?: Property$BorderInlineStart<TLength>,
  borderLeft?: Property$BorderLeft<TLength>,
  borderRadius?: Property$BorderRadius<TLength>,
  borderRight?: Property$BorderRight<TLength>,
  borderStyle?: Property$BorderStyle,
  borderTop?: Property$BorderTop<TLength>,
  borderWidth?: Property$BorderWidth<TLength>,
  columnRule?: Property$ColumnRule<TLength>,
  columns?: Property$Columns<TLength>,
  flex?: Property$Flex<TLength>,
  flexFlow?: Property$FlexFlow,
  font?: Property$Font,
  gap?: Property$Gap<TLength>,
  grid?: Property$Grid,
  gridArea?: Property$GridArea,
  gridColumn?: Property$GridColumn,
  gridRow?: Property$GridRow,
  gridTemplate?: Property$GridTemplate,
  lineClamp?: Property$LineClamp,
  listStyle?: Property$ListStyle,
  margin?: Property$Margin<TLength>,
  mask?: Property$Mask<TLength>,
  maskBorder?: Property$MaskBorder,
  motion?: Property$Offset<TLength>,
  offset?: Property$Offset<TLength>,
  outline?: Property$Outline<TLength>,
  overflow?: Property$Overflow,
  overscrollBehavior?: Property$OverscrollBehavior,
  padding?: Property$Padding<TLength>,
  placeItems?: Property$PlaceItems,
  placeSelf?: Property$PlaceSelf,
  textDecoration?: Property$TextDecoration<TLength>,
  textEmphasis?: Property$TextEmphasis,
  transition?: Property$Transition<TTime>,
|};

export type StandardProperties<TLength = string | 0, TTime = string> = {| ...StandardLonghandProperties<TLength, TTime>, ...StandardShorthandProperties<TLength, TTime> |};

export type VendorLonghandProperties<TLength = string | 0, TTime = string> = {|
  MozAnimationDelay?: Property$AnimationDelay<TTime>,
  MozAnimationDirection?: Property$AnimationDirection,
  MozAnimationDuration?: Property$AnimationDuration<TTime>,
  MozAnimationFillMode?: Property$AnimationFillMode,
  MozAnimationIterationCount?: Property$AnimationIterationCount,
  MozAnimationName?: Property$AnimationName,
  MozAnimationPlayState?: Property$AnimationPlayState,
  MozAnimationTimingFunction?: Property$AnimationTimingFunction,
  MozAppearance?: Property$MozAppearance,
  MozBackfaceVisibility?: Property$BackfaceVisibility,
  MozBorderBottomColors?: Property$MozBorderBottomColors,
  MozBorderEndColor?: Property$BorderInlineEndColor,
  MozBorderEndStyle?: Property$BorderInlineEndStyle,
  MozBorderEndWidth?: Property$BorderInlineEndWidth<TLength>,
  MozBorderLeftColors?: Property$MozBorderLeftColors,
  MozBorderRightColors?: Property$MozBorderRightColors,
  MozBorderStartColor?: Property$BorderInlineStartColor,
  MozBorderStartStyle?: Property$BorderInlineStartStyle,
  MozBorderTopColors?: Property$MozBorderTopColors,
  MozBoxSizing?: Property$BoxSizing,
  MozColumnCount?: Property$ColumnCount,
  MozColumnFill?: Property$ColumnFill,
  MozColumnRuleColor?: Property$ColumnRuleColor,
  MozColumnRuleStyle?: Property$ColumnRuleStyle,
  MozColumnRuleWidth?: Property$ColumnRuleWidth<TLength>,
  MozColumnWidth?: Property$ColumnWidth<TLength>,
  MozContextProperties?: Property$MozContextProperties,
  MozFontFeatureSettings?: Property$FontFeatureSettings,
  MozFontLanguageOverride?: Property$FontLanguageOverride,
  MozHyphens?: Property$Hyphens,
  MozImageRegion?: Property$MozImageRegion,
  MozMarginEnd?: Property$MarginInlineEnd<TLength>,
  MozMarginStart?: Property$MarginInlineStart<TLength>,
  MozOrient?: Property$MozOrient,
  MozOsxFontSmoothing?: Property$FontSmooth<TLength>,
  MozPaddingEnd?: Property$PaddingInlineEnd<TLength>,
  MozPaddingStart?: Property$PaddingInlineStart<TLength>,
  MozPerspective?: Property$Perspective<TLength>,
  MozPerspectiveOrigin?: Property$PerspectiveOrigin<TLength>,
  MozStackSizing?: Property$MozStackSizing,
  MozTabSize?: Property$TabSize<TLength>,
  MozTextBlink?: Property$MozTextBlink,
  MozTextSizeAdjust?: Property$TextSizeAdjust,
  MozTransformOrigin?: Property$TransformOrigin<TLength>,
  MozTransformStyle?: Property$TransformStyle,
  MozTransitionDelay?: Property$TransitionDelay<TTime>,
  MozTransitionDuration?: Property$TransitionDuration<TTime>,
  MozTransitionProperty?: Property$TransitionProperty,
  MozTransitionTimingFunction?: Property$TransitionTimingFunction,
  MozUserFocus?: Property$MozUserFocus,
  MozUserModify?: Property$MozUserModify,
  MozUserSelect?: Property$UserSelect,
  MozWindowDragging?: Property$MozWindowDragging,
  MozWindowShadow?: Property$MozWindowShadow,
  msAccelerator?: Property$MsAccelerator,
  msBlockProgression?: Property$MsBlockProgression,
  msContentZoomChaining?: Property$MsContentZoomChaining,
  msContentZoomLimitMax?: Property$MsContentZoomLimitMax,
  msContentZoomLimitMin?: Property$MsContentZoomLimitMin,
  msContentZoomSnapPoints?: Property$MsContentZoomSnapPoints,
  msContentZoomSnapType?: Property$MsContentZoomSnapType,
  msContentZooming?: Property$MsContentZooming,
  msFilter?: Property$MsFilter,
  msFlexDirection?: Property$FlexDirection,
  msFlexPositive?: Property$FlexGrow,
  msFlowFrom?: Property$MsFlowFrom,
  msFlowInto?: Property$MsFlowInto,
  msGridColumns?: Property$MsGridColumns<TLength>,
  msGridRows?: Property$MsGridRows<TLength>,
  msHighContrastAdjust?: Property$MsHighContrastAdjust,
  msHyphenateLimitChars?: Property$MsHyphenateLimitChars,
  msHyphenateLimitLines?: Property$MsHyphenateLimitLines,
  msHyphenateLimitZone?: Property$MsHyphenateLimitZone<TLength>,
  msHyphens?: Property$Hyphens,
  msImeAlign?: Property$MsImeAlign,
  msLineBreak?: Property$LineBreak,
  msOrder?: Property$Order,
  msOverflowStyle?: Property$MsOverflowStyle,
  msOverflowX?: Property$OverflowX,
  msOverflowY?: Property$OverflowY,
  msScrollChaining?: Property$MsScrollChaining,
  msScrollLimitXMax?: Property$MsScrollLimitXMax<TLength>,
  msScrollLimitXMin?: Property$MsScrollLimitXMin<TLength>,
  msScrollLimitYMax?: Property$MsScrollLimitYMax<TLength>,
  msScrollLimitYMin?: Property$MsScrollLimitYMin<TLength>,
  msScrollRails?: Property$MsScrollRails,
  msScrollSnapPointsX?: Property$MsScrollSnapPointsX,
  msScrollSnapPointsY?: Property$MsScrollSnapPointsY,
  msScrollSnapType?: Property$MsScrollSnapType,
  msScrollTranslation?: Property$MsScrollTranslation,
  msScrollbar3dlightColor?: Property$MsScrollbar3dlightColor,
  msScrollbarArrowColor?: Property$MsScrollbarArrowColor,
  msScrollbarBaseColor?: Property$MsScrollbarBaseColor,
  msScrollbarDarkshadowColor?: Property$MsScrollbarDarkshadowColor,
  msScrollbarFaceColor?: Property$MsScrollbarFaceColor,
  msScrollbarHighlightColor?: Property$MsScrollbarHighlightColor,
  msScrollbarShadowColor?: Property$MsScrollbarShadowColor,
  msScrollbarTrackColor?: Property$MsScrollbarTrackColor,
  msTextAutospace?: Property$MsTextAutospace,
  msTextCombineHorizontal?: Property$TextCombineUpright,
  msTextOverflow?: Property$TextOverflow,
  msTouchAction?: Property$TouchAction,
  msTouchSelect?: Property$MsTouchSelect,
  msTransform?: Property$Transform,
  msTransformOrigin?: Property$TransformOrigin<TLength>,
  msTransitionDelay?: Property$TransitionDelay<TTime>,
  msTransitionDuration?: Property$TransitionDuration<TTime>,
  msTransitionProperty?: Property$TransitionProperty,
  msTransitionTimingFunction?: Property$TransitionTimingFunction,
  msUserSelect?: Property$MsUserSelect,
  msWordBreak?: Property$WordBreak,
  msWrapFlow?: Property$MsWrapFlow,
  msWrapMargin?: Property$MsWrapMargin<TLength>,
  msWrapThrough?: Property$MsWrapThrough,
  msWritingMode?: Property$WritingMode,
  WebkitAlignContent?: Property$AlignContent,
  WebkitAlignItems?: Property$AlignItems,
  WebkitAlignSelf?: Property$AlignSelf,
  WebkitAnimationDelay?: Property$AnimationDelay<TTime>,
  WebkitAnimationDirection?: Property$AnimationDirection,
  WebkitAnimationDuration?: Property$AnimationDuration<TTime>,
  WebkitAnimationFillMode?: Property$AnimationFillMode,
  WebkitAnimationIterationCount?: Property$AnimationIterationCount,
  WebkitAnimationName?: Property$AnimationName,
  WebkitAnimationPlayState?: Property$AnimationPlayState,
  WebkitAnimationTimingFunction?: Property$AnimationTimingFunction,
  WebkitAppearance?: Property$WebkitAppearance,
  WebkitBackdropFilter?: Property$BackdropFilter,
  WebkitBackfaceVisibility?: Property$BackfaceVisibility,
  WebkitBackgroundClip?: Property$BackgroundClip,
  WebkitBackgroundOrigin?: Property$BackgroundOrigin,
  WebkitBackgroundSize?: Property$BackgroundSize<TLength>,
  WebkitBorderBeforeColor?: Property$WebkitBorderBeforeColor,
  WebkitBorderBeforeStyle?: Property$WebkitBorderBeforeStyle,
  WebkitBorderBeforeWidth?: Property$WebkitBorderBeforeWidth<TLength>,
  WebkitBorderBottomLeftRadius?: Property$BorderBottomLeftRadius<TLength>,
  WebkitBorderBottomRightRadius?: Property$BorderBottomRightRadius<TLength>,
  WebkitBorderImageSlice?: Property$BorderImageSlice,
  WebkitBorderTopLeftRadius?: Property$BorderTopLeftRadius<TLength>,
  WebkitBorderTopRightRadius?: Property$BorderTopRightRadius<TLength>,
  WebkitBoxDecorationBreak?: Property$BoxDecorationBreak,
  WebkitBoxReflect?: Property$WebkitBoxReflect<TLength>,
  WebkitBoxShadow?: Property$BoxShadow,
  WebkitBoxSizing?: Property$BoxSizing,
  WebkitClipPath?: Property$ClipPath,
  WebkitColumnCount?: Property$ColumnCount,
  WebkitColumnFill?: Property$ColumnFill,
  WebkitColumnRuleColor?: Property$ColumnRuleColor,
  WebkitColumnRuleStyle?: Property$ColumnRuleStyle,
  WebkitColumnRuleWidth?: Property$ColumnRuleWidth<TLength>,
  WebkitColumnSpan?: Property$ColumnSpan,
  WebkitColumnWidth?: Property$ColumnWidth<TLength>,
  WebkitFilter?: Property$Filter,
  WebkitFlexBasis?: Property$FlexBasis<TLength>,
  WebkitFlexDirection?: Property$FlexDirection,
  WebkitFlexGrow?: Property$FlexGrow,
  WebkitFlexShrink?: Property$FlexShrink,
  WebkitFlexWrap?: Property$FlexWrap,
  WebkitFontFeatureSettings?: Property$FontFeatureSettings,
  WebkitFontKerning?: Property$FontKerning,
  WebkitFontSmoothing?: Property$FontSmooth<TLength>,
  WebkitFontVariantLigatures?: Property$FontVariantLigatures,
  WebkitHyphenateCharacter?: Property$HyphenateCharacter,
  WebkitHyphens?: Property$Hyphens,
  WebkitInitialLetter?: Property$InitialLetter,
  WebkitJustifyContent?: Property$JustifyContent,
  WebkitLineBreak?: Property$LineBreak,
  WebkitLineClamp?: Property$WebkitLineClamp,
  WebkitMarginEnd?: Property$MarginInlineEnd<TLength>,
  WebkitMarginStart?: Property$MarginInlineStart<TLength>,
  WebkitMaskAttachment?: Property$WebkitMaskAttachment,
  WebkitMaskBoxImageOutset?: Property$MaskBorderOutset<TLength>,
  WebkitMaskBoxImageRepeat?: Property$MaskBorderRepeat,
  WebkitMaskBoxImageSlice?: Property$MaskBorderSlice,
  WebkitMaskBoxImageSource?: Property$MaskBorderSource,
  WebkitMaskBoxImageWidth?: Property$MaskBorderWidth<TLength>,
  WebkitMaskClip?: Property$WebkitMaskClip,
  WebkitMaskComposite?: Property$WebkitMaskComposite,
  WebkitMaskImage?: Property$WebkitMaskImage,
  WebkitMaskOrigin?: Property$WebkitMaskOrigin,
  WebkitMaskPosition?: Property$WebkitMaskPosition<TLength>,
  WebkitMaskPositionX?: Property$WebkitMaskPositionX<TLength>,
  WebkitMaskPositionY?: Property$WebkitMaskPositionY<TLength>,
  WebkitMaskRepeat?: Property$WebkitMaskRepeat,
  WebkitMaskRepeatX?: Property$WebkitMaskRepeatX,
  WebkitMaskRepeatY?: Property$WebkitMaskRepeatY,
  WebkitMaskSize?: Property$WebkitMaskSize<TLength>,
  WebkitMaxInlineSize?: Property$MaxInlineSize<TLength>,
  WebkitOrder?: Property$Order,
  WebkitOverflowScrolling?: Property$WebkitOverflowScrolling,
  WebkitPaddingEnd?: Property$PaddingInlineEnd<TLength>,
  WebkitPaddingStart?: Property$PaddingInlineStart<TLength>,
  WebkitPerspective?: Property$Perspective<TLength>,
  WebkitPerspectiveOrigin?: Property$PerspectiveOrigin<TLength>,
  WebkitPrintColorAdjust?: Property$PrintColorAdjust,
  WebkitRubyPosition?: Property$RubyPosition,
  WebkitScrollSnapType?: Property$ScrollSnapType,
  WebkitShapeMargin?: Property$ShapeMargin<TLength>,
  WebkitTapHighlightColor?: Property$WebkitTapHighlightColor,
  WebkitTextCombine?: Property$TextCombineUpright,
  WebkitTextDecorationColor?: Property$TextDecorationColor,
  WebkitTextDecorationLine?: Property$TextDecorationLine,
  WebkitTextDecorationSkip?: Property$TextDecorationSkip,
  WebkitTextDecorationStyle?: Property$TextDecorationStyle,
  WebkitTextEmphasisColor?: Property$TextEmphasisColor,
  WebkitTextEmphasisPosition?: Property$TextEmphasisPosition,
  WebkitTextEmphasisStyle?: Property$TextEmphasisStyle,
  WebkitTextFillColor?: Property$WebkitTextFillColor,
  WebkitTextOrientation?: Property$TextOrientation,
  WebkitTextSizeAdjust?: Property$TextSizeAdjust,
  WebkitTextStrokeColor?: Property$WebkitTextStrokeColor,
  WebkitTextStrokeWidth?: Property$WebkitTextStrokeWidth<TLength>,
  WebkitTextUnderlinePosition?: Property$TextUnderlinePosition,
  WebkitTouchCallout?: Property$WebkitTouchCallout,
  WebkitTransform?: Property$Transform,
  WebkitTransformOrigin?: Property$TransformOrigin<TLength>,
  WebkitTransformStyle?: Property$TransformStyle,
  WebkitTransitionDelay?: Property$TransitionDelay<TTime>,
  WebkitTransitionDuration?: Property$TransitionDuration<TTime>,
  WebkitTransitionProperty?: Property$TransitionProperty,
  WebkitTransitionTimingFunction?: Property$TransitionTimingFunction,
  WebkitUserModify?: Property$WebkitUserModify,
  WebkitUserSelect?: Property$UserSelect,
  WebkitWritingMode?: Property$WritingMode,
|};

export type VendorShorthandProperties<TLength = string | 0, TTime = string> = {|
  MozAnimation?: Property$Animation<TTime>,
  MozBorderImage?: Property$BorderImage,
  MozColumnRule?: Property$ColumnRule<TLength>,
  MozColumns?: Property$Columns<TLength>,
  MozTransition?: Property$Transition<TTime>,
  msContentZoomLimit?: Property$MsContentZoomLimit,
  msContentZoomSnap?: Property$MsContentZoomSnap,
  msFlex?: Property$Flex<TLength>,
  msScrollLimit?: Property$MsScrollLimit,
  msScrollSnapX?: Property$MsScrollSnapX,
  msScrollSnapY?: Property$MsScrollSnapY,
  msTransition?: Property$Transition<TTime>,
  WebkitAnimation?: Property$Animation<TTime>,
  WebkitBorderBefore?: Property$WebkitBorderBefore<TLength>,
  WebkitBorderImage?: Property$BorderImage,
  WebkitBorderRadius?: Property$BorderRadius<TLength>,
  WebkitColumnRule?: Property$ColumnRule<TLength>,
  WebkitColumns?: Property$Columns<TLength>,
  WebkitFlex?: Property$Flex<TLength>,
  WebkitFlexFlow?: Property$FlexFlow,
  WebkitMask?: Property$WebkitMask<TLength>,
  WebkitMaskBoxImage?: Property$MaskBorder,
  WebkitTextEmphasis?: Property$TextEmphasis,
  WebkitTextStroke?: Property$WebkitTextStroke<TLength>,
  WebkitTransition?: Property$Transition<TTime>,
|};

export type VendorProperties<TLength = string | 0, TTime = string> = {| ...VendorLonghandProperties<TLength, TTime>, ...VendorShorthandProperties<TLength, TTime> |};

export type ObsoleteProperties<TLength = string | 0, TTime = string> = {|
  azimuth?: Property$Azimuth,
  boxAlign?: Property$BoxAlign,
  boxDirection?: Property$BoxDirection,
  boxFlex?: Property$BoxFlex,
  boxFlexGroup?: Property$BoxFlexGroup,
  boxLines?: Property$BoxLines,
  boxOrdinalGroup?: Property$BoxOrdinalGroup,
  boxOrient?: Property$BoxOrient,
  boxPack?: Property$BoxPack,
  clip?: Property$Clip,
  gridColumnGap?: Property$GridColumnGap<TLength>,
  gridGap?: Property$GridGap<TLength>,
  gridRowGap?: Property$GridRowGap<TLength>,
  imeMode?: Property$ImeMode,
  offsetBlock?: Property$InsetBlock<TLength>,
  offsetBlockEnd?: Property$InsetBlockEnd<TLength>,
  offsetBlockStart?: Property$InsetBlockStart<TLength>,
  offsetInline?: Property$InsetInline<TLength>,
  offsetInlineEnd?: Property$InsetInlineEnd<TLength>,
  offsetInlineStart?: Property$InsetInlineStart<TLength>,
  scrollSnapCoordinate?: Property$ScrollSnapCoordinate<TLength>,
  scrollSnapDestination?: Property$ScrollSnapDestination<TLength>,
  scrollSnapPointsX?: Property$ScrollSnapPointsX,
  scrollSnapPointsY?: Property$ScrollSnapPointsY,
  scrollSnapTypeX?: Property$ScrollSnapTypeX,
  scrollSnapTypeY?: Property$ScrollSnapTypeY,
  KhtmlBoxAlign?: Property$BoxAlign,
  KhtmlBoxDirection?: Property$BoxDirection,
  KhtmlBoxFlex?: Property$BoxFlex,
  KhtmlBoxFlexGroup?: Property$BoxFlexGroup,
  KhtmlBoxLines?: Property$BoxLines,
  KhtmlBoxOrdinalGroup?: Property$BoxOrdinalGroup,
  KhtmlBoxOrient?: Property$BoxOrient,
  KhtmlBoxPack?: Property$BoxPack,
  KhtmlLineBreak?: Property$LineBreak,
  KhtmlOpacity?: Property$Opacity,
  KhtmlUserSelect?: Property$UserSelect,
  MozBackgroundClip?: Property$BackgroundClip,
  MozBackgroundInlinePolicy?: Property$BoxDecorationBreak,
  MozBackgroundOrigin?: Property$BackgroundOrigin,
  MozBackgroundSize?: Property$BackgroundSize<TLength>,
  MozBinding?: Property$MozBinding,
  MozBorderRadius?: Property$BorderRadius<TLength>,
  MozBorderRadiusBottomleft?: Property$BorderBottomLeftRadius<TLength>,
  MozBorderRadiusBottomright?: Property$BorderBottomRightRadius<TLength>,
  MozBorderRadiusTopleft?: Property$BorderTopLeftRadius<TLength>,
  MozBorderRadiusTopright?: Property$BorderTopRightRadius<TLength>,
  MozBoxAlign?: Property$BoxAlign,
  MozBoxDirection?: Property$BoxDirection,
  MozBoxFlex?: Property$BoxFlex,
  MozBoxOrdinalGroup?: Property$BoxOrdinalGroup,
  MozBoxOrient?: Property$BoxOrient,
  MozBoxPack?: Property$BoxPack,
  MozBoxShadow?: Property$BoxShadow,
  MozFloatEdge?: Property$MozFloatEdge,
  MozForceBrokenImageIcon?: Property$MozForceBrokenImageIcon,
  MozOpacity?: Property$Opacity,
  MozOutline?: Property$Outline<TLength>,
  MozOutlineColor?: Property$OutlineColor,
  MozOutlineRadius?: Property$MozOutlineRadius<TLength>,
  MozOutlineRadiusBottomleft?: Property$MozOutlineRadiusBottomleft<TLength>,
  MozOutlineRadiusBottomright?: Property$MozOutlineRadiusBottomright<TLength>,
  MozOutlineRadiusTopleft?: Property$MozOutlineRadiusTopleft<TLength>,
  MozOutlineRadiusTopright?: Property$MozOutlineRadiusTopright<TLength>,
  MozOutlineStyle?: Property$OutlineStyle,
  MozOutlineWidth?: Property$OutlineWidth<TLength>,
  MozTextAlignLast?: Property$TextAlignLast,
  MozTextDecorationColor?: Property$TextDecorationColor,
  MozTextDecorationLine?: Property$TextDecorationLine,
  MozTextDecorationStyle?: Property$TextDecorationStyle,
  MozUserInput?: Property$MozUserInput,
  msImeMode?: Property$ImeMode,
  OAnimation?: Property$Animation<TTime>,
  OAnimationDelay?: Property$AnimationDelay<TTime>,
  OAnimationDirection?: Property$AnimationDirection,
  OAnimationDuration?: Property$AnimationDuration<TTime>,
  OAnimationFillMode?: Property$AnimationFillMode,
  OAnimationIterationCount?: Property$AnimationIterationCount,
  OAnimationName?: Property$AnimationName,
  OAnimationPlayState?: Property$AnimationPlayState,
  OAnimationTimingFunction?: Property$AnimationTimingFunction,
  OBackgroundSize?: Property$BackgroundSize<TLength>,
  OBorderImage?: Property$BorderImage,
  OObjectFit?: Property$ObjectFit,
  OObjectPosition?: Property$ObjectPosition<TLength>,
  OTabSize?: Property$TabSize<TLength>,
  OTextOverflow?: Property$TextOverflow,
  OTransform?: Property$Transform,
  OTransformOrigin?: Property$TransformOrigin<TLength>,
  OTransition?: Property$Transition<TTime>,
  OTransitionDelay?: Property$TransitionDelay<TTime>,
  OTransitionDuration?: Property$TransitionDuration<TTime>,
  OTransitionProperty?: Property$TransitionProperty,
  OTransitionTimingFunction?: Property$TransitionTimingFunction,
  WebkitBoxAlign?: Property$BoxAlign,
  WebkitBoxDirection?: Property$BoxDirection,
  WebkitBoxFlex?: Property$BoxFlex,
  WebkitBoxFlexGroup?: Property$BoxFlexGroup,
  WebkitBoxLines?: Property$BoxLines,
  WebkitBoxOrdinalGroup?: Property$BoxOrdinalGroup,
  WebkitBoxOrient?: Property$BoxOrient,
  WebkitBoxPack?: Property$BoxPack,
  WebkitScrollSnapPointsX?: Property$ScrollSnapPointsX,
  WebkitScrollSnapPointsY?: Property$ScrollSnapPointsY,
|};

export type SvgProperties<TLength = string | 0, TTime = string> = {|
  alignmentBaseline?: Property$AlignmentBaseline,
  baselineShift?: Property$BaselineShift<TLength>,
  clip?: Property$Clip,
  clipPath?: Property$ClipPath,
  clipRule?: Property$ClipRule,
  color?: Property$Color,
  colorInterpolation?: Property$ColorInterpolation,
  colorRendering?: Property$ColorRendering,
  cursor?: Property$Cursor,
  direction?: Property$Direction,
  display?: Property$Display,
  dominantBaseline?: Property$DominantBaseline,
  fill?: Property$Fill,
  fillOpacity?: Property$FillOpacity,
  fillRule?: Property$FillRule,
  filter?: Property$Filter,
  floodColor?: Property$FloodColor,
  floodOpacity?: Property$FloodOpacity,
  font?: Property$Font,
  fontFamily?: Property$FontFamily,
  fontSize?: Property$FontSize<TLength>,
  fontSizeAdjust?: Property$FontSizeAdjust,
  fontStretch?: Property$FontStretch,
  fontStyle?: Property$FontStyle,
  fontVariant?: Property$FontVariant,
  fontWeight?: Property$FontWeight,
  glyphOrientationVertical?: Property$GlyphOrientationVertical,
  imageRendering?: Property$ImageRendering,
  letterSpacing?: Property$LetterSpacing<TLength>,
  lightingColor?: Property$LightingColor,
  lineHeight?: Property$LineHeight<TLength>,
  marker?: Property$Marker,
  markerEnd?: Property$MarkerEnd,
  markerMid?: Property$MarkerMid,
  markerStart?: Property$MarkerStart,
  mask?: Property$Mask<TLength>,
  opacity?: Property$Opacity,
  overflow?: Property$Overflow,
  paintOrder?: Property$PaintOrder,
  pointerEvents?: Property$PointerEvents,
  shapeRendering?: Property$ShapeRendering,
  stopColor?: Property$StopColor,
  stopOpacity?: Property$StopOpacity,
  stroke?: Property$Stroke,
  strokeDasharray?: Property$StrokeDasharray<TLength>,
  strokeDashoffset?: Property$StrokeDashoffset<TLength>,
  strokeLinecap?: Property$StrokeLinecap,
  strokeLinejoin?: Property$StrokeLinejoin,
  strokeMiterlimit?: Property$StrokeMiterlimit,
  strokeOpacity?: Property$StrokeOpacity,
  strokeWidth?: Property$StrokeWidth<TLength>,
  textAnchor?: Property$TextAnchor,
  textDecoration?: Property$TextDecoration<TLength>,
  textRendering?: Property$TextRendering,
  unicodeBidi?: Property$UnicodeBidi,
  vectorEffect?: Property$VectorEffect,
  visibility?: Property$Visibility,
  whiteSpace?: Property$WhiteSpace,
  wordSpacing?: Property$WordSpacing<TLength>,
  writingMode?: Property$WritingMode,
|};

export type Properties<TLength = string | 0, TTime = string> = {|
  ...StandardProperties<TLength, TTime>,
  ...VendorProperties<TLength, TTime>,
  ...ObsoleteProperties<TLength, TTime>,
  ...SvgProperties<TLength, TTime>,
|};

export type StandardLonghandPropertiesHyphen<TLength = string | 0, TTime = string> = {|
  "accent-color"?: Property$AccentColor,
  "align-content"?: Property$AlignContent,
  "align-items"?: Property$AlignItems,
  "align-self"?: Property$AlignSelf,
  "align-tracks"?: Property$AlignTracks,
  "animation-composition"?: Property$AnimationComposition,
  "animation-delay"?: Property$AnimationDelay<TTime>,
  "animation-direction"?: Property$AnimationDirection,
  "animation-duration"?: Property$AnimationDuration<TTime>,
  "animation-fill-mode"?: Property$AnimationFillMode,
  "animation-iteration-count"?: Property$AnimationIterationCount,
  "animation-name"?: Property$AnimationName,
  "animation-play-state"?: Property$AnimationPlayState,
  "animation-timeline"?: Property$AnimationTimeline,
  "animation-timing-function"?: Property$AnimationTimingFunction,
  appearance?: Property$Appearance,
  "aspect-ratio"?: Property$AspectRatio,
  "backdrop-filter"?: Property$BackdropFilter,
  "backface-visibility"?: Property$BackfaceVisibility,
  "background-attachment"?: Property$BackgroundAttachment,
  "background-blend-mode"?: Property$BackgroundBlendMode,
  "background-clip"?: Property$BackgroundClip,
  "background-color"?: Property$BackgroundColor,
  "background-image"?: Property$BackgroundImage,
  "background-origin"?: Property$BackgroundOrigin,
  "background-position-x"?: Property$BackgroundPositionX<TLength>,
  "background-position-y"?: Property$BackgroundPositionY<TLength>,
  "background-repeat"?: Property$BackgroundRepeat,
  "background-size"?: Property$BackgroundSize<TLength>,
  "block-overflow"?: Property$BlockOverflow,
  "block-size"?: Property$BlockSize<TLength>,
  "border-block-color"?: Property$BorderBlockColor,
  "border-block-end-color"?: Property$BorderBlockEndColor,
  "border-block-end-style"?: Property$BorderBlockEndStyle,
  "border-block-end-width"?: Property$BorderBlockEndWidth<TLength>,
  "border-block-start-color"?: Property$BorderBlockStartColor,
  "border-block-start-style"?: Property$BorderBlockStartStyle,
  "border-block-start-width"?: Property$BorderBlockStartWidth<TLength>,
  "border-block-style"?: Property$BorderBlockStyle,
  "border-block-width"?: Property$BorderBlockWidth<TLength>,
  "border-bottom-color"?: Property$BorderBottomColor,
  "border-bottom-left-radius"?: Property$BorderBottomLeftRadius<TLength>,
  "border-bottom-right-radius"?: Property$BorderBottomRightRadius<TLength>,
  "border-bottom-style"?: Property$BorderBottomStyle,
  "border-bottom-width"?: Property$BorderBottomWidth<TLength>,
  "border-collapse"?: Property$BorderCollapse,
  "border-end-end-radius"?: Property$BorderEndEndRadius<TLength>,
  "border-end-start-radius"?: Property$BorderEndStartRadius<TLength>,
  "border-image-outset"?: Property$BorderImageOutset<TLength>,
  "border-image-repeat"?: Property$BorderImageRepeat,
  "border-image-slice"?: Property$BorderImageSlice,
  "border-image-source"?: Property$BorderImageSource,
  "border-image-width"?: Property$BorderImageWidth<TLength>,
  "border-inline-color"?: Property$BorderInlineColor,
  "border-inline-end-color"?: Property$BorderInlineEndColor,
  "border-inline-end-style"?: Property$BorderInlineEndStyle,
  "border-inline-end-width"?: Property$BorderInlineEndWidth<TLength>,
  "border-inline-start-color"?: Property$BorderInlineStartColor,
  "border-inline-start-style"?: Property$BorderInlineStartStyle,
  "border-inline-start-width"?: Property$BorderInlineStartWidth<TLength>,
  "border-inline-style"?: Property$BorderInlineStyle,
  "border-inline-width"?: Property$BorderInlineWidth<TLength>,
  "border-left-color"?: Property$BorderLeftColor,
  "border-left-style"?: Property$BorderLeftStyle,
  "border-left-width"?: Property$BorderLeftWidth<TLength>,
  "border-right-color"?: Property$BorderRightColor,
  "border-right-style"?: Property$BorderRightStyle,
  "border-right-width"?: Property$BorderRightWidth<TLength>,
  "border-spacing"?: Property$BorderSpacing<TLength>,
  "border-start-end-radius"?: Property$BorderStartEndRadius<TLength>,
  "border-start-start-radius"?: Property$BorderStartStartRadius<TLength>,
  "border-top-color"?: Property$BorderTopColor,
  "border-top-left-radius"?: Property$BorderTopLeftRadius<TLength>,
  "border-top-right-radius"?: Property$BorderTopRightRadius<TLength>,
  "border-top-style"?: Property$BorderTopStyle,
  "border-top-width"?: Property$BorderTopWidth<TLength>,
  bottom?: Property$Bottom<TLength>,
  "box-decoration-break"?: Property$BoxDecorationBreak,
  "box-shadow"?: Property$BoxShadow,
  "box-sizing"?: Property$BoxSizing,
  "break-after"?: Property$BreakAfter,
  "break-before"?: Property$BreakBefore,
  "break-inside"?: Property$BreakInside,
  "caption-side"?: Property$CaptionSide,
  "caret-color"?: Property$CaretColor,
  clear?: Property$Clear,
  "clip-path"?: Property$ClipPath,
  color?: Property$Color,
  "color-adjust"?: Property$PrintColorAdjust,
  "color-scheme"?: Property$ColorScheme,
  "column-count"?: Property$ColumnCount,
  "column-fill"?: Property$ColumnFill,
  "column-gap"?: Property$ColumnGap<TLength>,
  "column-rule-color"?: Property$ColumnRuleColor,
  "column-rule-style"?: Property$ColumnRuleStyle,
  "column-rule-width"?: Property$ColumnRuleWidth<TLength>,
  "column-span"?: Property$ColumnSpan,
  "column-width"?: Property$ColumnWidth<TLength>,
  contain?: Property$Contain,
  content?: Property$Content,
  "content-visibility"?: Property$ContentVisibility,
  "counter-increment"?: Property$CounterIncrement,
  "counter-reset"?: Property$CounterReset,
  "counter-set"?: Property$CounterSet,
  cursor?: Property$Cursor,
  direction?: Property$Direction,
  display?: Property$Display,
  "empty-cells"?: Property$EmptyCells,
  filter?: Property$Filter,
  "flex-basis"?: Property$FlexBasis<TLength>,
  "flex-direction"?: Property$FlexDirection,
  "flex-grow"?: Property$FlexGrow,
  "flex-shrink"?: Property$FlexShrink,
  "flex-wrap"?: Property$FlexWrap,
  float?: Property$Float,
  "font-family"?: Property$FontFamily,
  "font-feature-settings"?: Property$FontFeatureSettings,
  "font-kerning"?: Property$FontKerning,
  "font-language-override"?: Property$FontLanguageOverride,
  "font-optical-sizing"?: Property$FontOpticalSizing,
  "font-size"?: Property$FontSize<TLength>,
  "font-size-adjust"?: Property$FontSizeAdjust,
  "font-smooth"?: Property$FontSmooth<TLength>,
  "font-stretch"?: Property$FontStretch,
  "font-style"?: Property$FontStyle,
  "font-synthesis"?: Property$FontSynthesis,
  "font-variant"?: Property$FontVariant,
  "font-variant-alternates"?: Property$FontVariantAlternates,
  "font-variant-caps"?: Property$FontVariantCaps,
  "font-variant-east-asian"?: Property$FontVariantEastAsian,
  "font-variant-ligatures"?: Property$FontVariantLigatures,
  "font-variant-numeric"?: Property$FontVariantNumeric,
  "font-variant-position"?: Property$FontVariantPosition,
  "font-variation-settings"?: Property$FontVariationSettings,
  "font-weight"?: Property$FontWeight,
  "forced-color-adjust"?: Property$ForcedColorAdjust,
  "grid-auto-columns"?: Property$GridAutoColumns<TLength>,
  "grid-auto-flow"?: Property$GridAutoFlow,
  "grid-auto-rows"?: Property$GridAutoRows<TLength>,
  "grid-column-end"?: Property$GridColumnEnd,
  "grid-column-start"?: Property$GridColumnStart,
  "grid-row-end"?: Property$GridRowEnd,
  "grid-row-start"?: Property$GridRowStart,
  "grid-template-areas"?: Property$GridTemplateAreas,
  "grid-template-columns"?: Property$GridTemplateColumns<TLength>,
  "grid-template-rows"?: Property$GridTemplateRows<TLength>,
  "hanging-punctuation"?: Property$HangingPunctuation,
  height?: Property$Height<TLength>,
  "hyphenate-character"?: Property$HyphenateCharacter,
  hyphens?: Property$Hyphens,
  "image-orientation"?: Property$ImageOrientation,
  "image-rendering"?: Property$ImageRendering,
  "image-resolution"?: Property$ImageResolution,
  "initial-letter"?: Property$InitialLetter,
  "inline-size"?: Property$InlineSize<TLength>,
  "input-security"?: Property$InputSecurity,
  inset?: Property$Inset<TLength>,
  "inset-block"?: Property$InsetBlock<TLength>,
  "inset-block-end"?: Property$InsetBlockEnd<TLength>,
  "inset-block-start"?: Property$InsetBlockStart<TLength>,
  "inset-inline"?: Property$InsetInline<TLength>,
  "inset-inline-end"?: Property$InsetInlineEnd<TLength>,
  "inset-inline-start"?: Property$InsetInlineStart<TLength>,
  isolation?: Property$Isolation,
  "justify-content"?: Property$JustifyContent,
  "justify-items"?: Property$JustifyItems,
  "justify-self"?: Property$JustifySelf,
  "justify-tracks"?: Property$JustifyTracks,
  left?: Property$Left<TLength>,
  "letter-spacing"?: Property$LetterSpacing<TLength>,
  "line-break"?: Property$LineBreak,
  "line-height"?: Property$LineHeight<TLength>,
  "line-height-step"?: Property$LineHeightStep<TLength>,
  "list-style-image"?: Property$ListStyleImage,
  "list-style-position"?: Property$ListStylePosition,
  "list-style-type"?: Property$ListStyleType,
  "margin-block"?: Property$MarginBlock<TLength>,
  "margin-block-end"?: Property$MarginBlockEnd<TLength>,
  "margin-block-start"?: Property$MarginBlockStart<TLength>,
  "margin-bottom"?: Property$MarginBottom<TLength>,
  "margin-inline"?: Property$MarginInline<TLength>,
  "margin-inline-end"?: Property$MarginInlineEnd<TLength>,
  "margin-inline-start"?: Property$MarginInlineStart<TLength>,
  "margin-left"?: Property$MarginLeft<TLength>,
  "margin-right"?: Property$MarginRight<TLength>,
  "margin-top"?: Property$MarginTop<TLength>,
  "mask-border-mode"?: Property$MaskBorderMode,
  "mask-border-outset"?: Property$MaskBorderOutset<TLength>,
  "mask-border-repeat"?: Property$MaskBorderRepeat,
  "mask-border-slice"?: Property$MaskBorderSlice,
  "mask-border-source"?: Property$MaskBorderSource,
  "mask-border-width"?: Property$MaskBorderWidth<TLength>,
  "mask-clip"?: Property$MaskClip,
  "mask-composite"?: Property$MaskComposite,
  "mask-image"?: Property$MaskImage,
  "mask-mode"?: Property$MaskMode,
  "mask-origin"?: Property$MaskOrigin,
  "mask-position"?: Property$MaskPosition<TLength>,
  "mask-repeat"?: Property$MaskRepeat,
  "mask-size"?: Property$MaskSize<TLength>,
  "mask-type"?: Property$MaskType,
  "math-depth"?: Property$MathDepth,
  "math-shift"?: Property$MathShift,
  "math-style"?: Property$MathStyle,
  "max-block-size"?: Property$MaxBlockSize<TLength>,
  "max-height"?: Property$MaxHeight<TLength>,
  "max-inline-size"?: Property$MaxInlineSize<TLength>,
  "max-lines"?: Property$MaxLines,
  "max-width"?: Property$MaxWidth<TLength>,
  "min-block-size"?: Property$MinBlockSize<TLength>,
  "min-height"?: Property$MinHeight<TLength>,
  "min-inline-size"?: Property$MinInlineSize<TLength>,
  "min-width"?: Property$MinWidth<TLength>,
  "mix-blend-mode"?: Property$MixBlendMode,
  "motion-distance"?: Property$OffsetDistance<TLength>,
  "motion-path"?: Property$OffsetPath,
  "motion-rotation"?: Property$OffsetRotate,
  "object-fit"?: Property$ObjectFit,
  "object-position"?: Property$ObjectPosition<TLength>,
  "offset-anchor"?: Property$OffsetAnchor<TLength>,
  "offset-distance"?: Property$OffsetDistance<TLength>,
  "offset-path"?: Property$OffsetPath,
  "offset-rotate"?: Property$OffsetRotate,
  "offset-rotation"?: Property$OffsetRotate,
  opacity?: Property$Opacity,
  order?: Property$Order,
  orphans?: Property$Orphans,
  "outline-color"?: Property$OutlineColor,
  "outline-offset"?: Property$OutlineOffset<TLength>,
  "outline-style"?: Property$OutlineStyle,
  "outline-width"?: Property$OutlineWidth<TLength>,
  "overflow-anchor"?: Property$OverflowAnchor,
  "overflow-block"?: Property$OverflowBlock,
  "overflow-clip-box"?: Property$OverflowClipBox,
  "overflow-clip-margin"?: Property$OverflowClipMargin<TLength>,
  "overflow-inline"?: Property$OverflowInline,
  "overflow-wrap"?: Property$OverflowWrap,
  "overflow-x"?: Property$OverflowX,
  "overflow-y"?: Property$OverflowY,
  "overscroll-behavior-block"?: Property$OverscrollBehaviorBlock,
  "overscroll-behavior-inline"?: Property$OverscrollBehaviorInline,
  "overscroll-behavior-x"?: Property$OverscrollBehaviorX,
  "overscroll-behavior-y"?: Property$OverscrollBehaviorY,
  "padding-block"?: Property$PaddingBlock<TLength>,
  "padding-block-end"?: Property$PaddingBlockEnd<TLength>,
  "padding-block-start"?: Property$PaddingBlockStart<TLength>,
  "padding-bottom"?: Property$PaddingBottom<TLength>,
  "padding-inline"?: Property$PaddingInline<TLength>,
  "padding-inline-end"?: Property$PaddingInlineEnd<TLength>,
  "padding-inline-start"?: Property$PaddingInlineStart<TLength>,
  "padding-left"?: Property$PaddingLeft<TLength>,
  "padding-right"?: Property$PaddingRight<TLength>,
  "padding-top"?: Property$PaddingTop<TLength>,
  "page-break-after"?: Property$PageBreakAfter,
  "page-break-before"?: Property$PageBreakBefore,
  "page-break-inside"?: Property$PageBreakInside,
  "paint-order"?: Property$PaintOrder,
  perspective?: Property$Perspective<TLength>,
  "perspective-origin"?: Property$PerspectiveOrigin<TLength>,
  "place-content"?: Property$PlaceContent,
  "pointer-events"?: Property$PointerEvents,
  position?: Property$Position,
  "print-color-adjust"?: Property$PrintColorAdjust,
  quotes?: Property$Quotes,
  resize?: Property$Resize,
  right?: Property$Right<TLength>,
  rotate?: Property$Rotate,
  "row-gap"?: Property$RowGap<TLength>,
  "ruby-align"?: Property$RubyAlign,
  "ruby-merge"?: Property$RubyMerge,
  "ruby-position"?: Property$RubyPosition,
  scale?: Property$Scale,
  "scroll-behavior"?: Property$ScrollBehavior,
  "scroll-margin"?: Property$ScrollMargin<TLength>,
  "scroll-margin-block"?: Property$ScrollMarginBlock<TLength>,
  "scroll-margin-block-end"?: Property$ScrollMarginBlockEnd<TLength>,
  "scroll-margin-block-start"?: Property$ScrollMarginBlockStart<TLength>,
  "scroll-margin-bottom"?: Property$ScrollMarginBottom<TLength>,
  "scroll-margin-inline"?: Property$ScrollMarginInline<TLength>,
  "scroll-margin-inline-end"?: Property$ScrollMarginInlineEnd<TLength>,
  "scroll-margin-inline-start"?: Property$ScrollMarginInlineStart<TLength>,
  "scroll-margin-left"?: Property$ScrollMarginLeft<TLength>,
  "scroll-margin-right"?: Property$ScrollMarginRight<TLength>,
  "scroll-margin-top"?: Property$ScrollMarginTop<TLength>,
  "scroll-padding"?: Property$ScrollPadding<TLength>,
  "scroll-padding-block"?: Property$ScrollPaddingBlock<TLength>,
  "scroll-padding-block-end"?: Property$ScrollPaddingBlockEnd<TLength>,
  "scroll-padding-block-start"?: Property$ScrollPaddingBlockStart<TLength>,
  "scroll-padding-bottom"?: Property$ScrollPaddingBottom<TLength>,
  "scroll-padding-inline"?: Property$ScrollPaddingInline<TLength>,
  "scroll-padding-inline-end"?: Property$ScrollPaddingInlineEnd<TLength>,
  "scroll-padding-inline-start"?: Property$ScrollPaddingInlineStart<TLength>,
  "scroll-padding-left"?: Property$ScrollPaddingLeft<TLength>,
  "scroll-padding-right"?: Property$ScrollPaddingRight<TLength>,
  "scroll-padding-top"?: Property$ScrollPaddingTop<TLength>,
  "scroll-snap-align"?: Property$ScrollSnapAlign,
  "scroll-snap-margin"?: Property$ScrollMargin<TLength>,
  "scroll-snap-margin-bottom"?: Property$ScrollMarginBottom<TLength>,
  "scroll-snap-margin-left"?: Property$ScrollMarginLeft<TLength>,
  "scroll-snap-margin-right"?: Property$ScrollMarginRight<TLength>,
  "scroll-snap-margin-top"?: Property$ScrollMarginTop<TLength>,
  "scroll-snap-stop"?: Property$ScrollSnapStop,
  "scroll-snap-type"?: Property$ScrollSnapType,
  "scrollbar-color"?: Property$ScrollbarColor,
  "scrollbar-gutter"?: Property$ScrollbarGutter,
  "scrollbar-width"?: Property$ScrollbarWidth,
  "shape-image-threshold"?: Property$ShapeImageThreshold,
  "shape-margin"?: Property$ShapeMargin<TLength>,
  "shape-outside"?: Property$ShapeOutside,
  "tab-size"?: Property$TabSize<TLength>,
  "table-layout"?: Property$TableLayout,
  "text-align"?: Property$TextAlign,
  "text-align-last"?: Property$TextAlignLast,
  "text-combine-upright"?: Property$TextCombineUpright,
  "text-decoration-color"?: Property$TextDecorationColor,
  "text-decoration-line"?: Property$TextDecorationLine,
  "text-decoration-skip"?: Property$TextDecorationSkip,
  "text-decoration-skip-ink"?: Property$TextDecorationSkipInk,
  "text-decoration-style"?: Property$TextDecorationStyle,
  "text-decoration-thickness"?: Property$TextDecorationThickness<TLength>,
  "text-emphasis-color"?: Property$TextEmphasisColor,
  "text-emphasis-position"?: Property$TextEmphasisPosition,
  "text-emphasis-style"?: Property$TextEmphasisStyle,
  "text-indent"?: Property$TextIndent<TLength>,
  "text-justify"?: Property$TextJustify,
  "text-orientation"?: Property$TextOrientation,
  "text-overflow"?: Property$TextOverflow,
  "text-rendering"?: Property$TextRendering,
  "text-shadow"?: Property$TextShadow,
  "text-size-adjust"?: Property$TextSizeAdjust,
  "text-transform"?: Property$TextTransform,
  "text-underline-offset"?: Property$TextUnderlineOffset<TLength>,
  "text-underline-position"?: Property$TextUnderlinePosition,
  top?: Property$Top<TLength>,
  "touch-action"?: Property$TouchAction,
  transform?: Property$Transform,
  "transform-box"?: Property$TransformBox,
  "transform-origin"?: Property$TransformOrigin<TLength>,
  "transform-style"?: Property$TransformStyle,
  "transition-delay"?: Property$TransitionDelay<TTime>,
  "transition-duration"?: Property$TransitionDuration<TTime>,
  "transition-property"?: Property$TransitionProperty,
  "transition-timing-function"?: Property$TransitionTimingFunction,
  translate?: Property$Translate<TLength>,
  "unicode-bidi"?: Property$UnicodeBidi,
  "user-select"?: Property$UserSelect,
  "vertical-align"?: Property$VerticalAlign<TLength>,
  visibility?: Property$Visibility,
  "white-space"?: Property$WhiteSpace,
  widows?: Property$Widows,
  width?: Property$Width<TLength>,
  "will-change"?: Property$WillChange,
  "word-break"?: Property$WordBreak,
  "word-spacing"?: Property$WordSpacing<TLength>,
  "word-wrap"?: Property$WordWrap,
  "writing-mode"?: Property$WritingMode,
  "z-index"?: Property$ZIndex,
  zoom?: Property$Zoom,
|};

export type StandardShorthandPropertiesHyphen<TLength = string | 0, TTime = string> = {|
  all?: Property$All,
  animation?: Property$Animation<TTime>,
  background?: Property$Background<TLength>,
  "background-position"?: Property$BackgroundPosition<TLength>,
  border?: Property$Border<TLength>,
  "border-block"?: Property$BorderBlock<TLength>,
  "border-block-end"?: Property$BorderBlockEnd<TLength>,
  "border-block-start"?: Property$BorderBlockStart<TLength>,
  "border-bottom"?: Property$BorderBottom<TLength>,
  "border-color"?: Property$BorderColor,
  "border-image"?: Property$BorderImage,
  "border-inline"?: Property$BorderInline<TLength>,
  "border-inline-end"?: Property$BorderInlineEnd<TLength>,
  "border-inline-start"?: Property$BorderInlineStart<TLength>,
  "border-left"?: Property$BorderLeft<TLength>,
  "border-radius"?: Property$BorderRadius<TLength>,
  "border-right"?: Property$BorderRight<TLength>,
  "border-style"?: Property$BorderStyle,
  "border-top"?: Property$BorderTop<TLength>,
  "border-width"?: Property$BorderWidth<TLength>,
  "column-rule"?: Property$ColumnRule<TLength>,
  columns?: Property$Columns<TLength>,
  flex?: Property$Flex<TLength>,
  "flex-flow"?: Property$FlexFlow,
  font?: Property$Font,
  gap?: Property$Gap<TLength>,
  grid?: Property$Grid,
  "grid-area"?: Property$GridArea,
  "grid-column"?: Property$GridColumn,
  "grid-row"?: Property$GridRow,
  "grid-template"?: Property$GridTemplate,
  "line-clamp"?: Property$LineClamp,
  "list-style"?: Property$ListStyle,
  margin?: Property$Margin<TLength>,
  mask?: Property$Mask<TLength>,
  "mask-border"?: Property$MaskBorder,
  motion?: Property$Offset<TLength>,
  offset?: Property$Offset<TLength>,
  outline?: Property$Outline<TLength>,
  overflow?: Property$Overflow,
  "overscroll-behavior"?: Property$OverscrollBehavior,
  padding?: Property$Padding<TLength>,
  "place-items"?: Property$PlaceItems,
  "place-self"?: Property$PlaceSelf,
  "text-decoration"?: Property$TextDecoration<TLength>,
  "text-emphasis"?: Property$TextEmphasis,
  transition?: Property$Transition<TTime>,
|};

export type StandardPropertiesHyphen<TLength = string | 0, TTime = string> = {|
  ...StandardLonghandPropertiesHyphen<TLength, TTime>,
  ...StandardShorthandPropertiesHyphen<TLength, TTime>,
|};

export type VendorLonghandPropertiesHyphen<TLength = string | 0, TTime = string> = {|
  "-moz-animation-delay"?: Property$AnimationDelay<TTime>,
  "-moz-animation-direction"?: Property$AnimationDirection,
  "-moz-animation-duration"?: Property$AnimationDuration<TTime>,
  "-moz-animation-fill-mode"?: Property$AnimationFillMode,
  "-moz-animation-iteration-count"?: Property$AnimationIterationCount,
  "-moz-animation-name"?: Property$AnimationName,
  "-moz-animation-play-state"?: Property$AnimationPlayState,
  "-moz-animation-timing-function"?: Property$AnimationTimingFunction,
  "-moz-appearance"?: Property$MozAppearance,
  "-moz-backface-visibility"?: Property$BackfaceVisibility,
  "-moz-border-bottom-colors"?: Property$MozBorderBottomColors,
  "-moz-border-end-color"?: Property$BorderInlineEndColor,
  "-moz-border-end-style"?: Property$BorderInlineEndStyle,
  "-moz-border-end-width"?: Property$BorderInlineEndWidth<TLength>,
  "-moz-border-left-colors"?: Property$MozBorderLeftColors,
  "-moz-border-right-colors"?: Property$MozBorderRightColors,
  "-moz-border-start-color"?: Property$BorderInlineStartColor,
  "-moz-border-start-style"?: Property$BorderInlineStartStyle,
  "-moz-border-top-colors"?: Property$MozBorderTopColors,
  "-moz-box-sizing"?: Property$BoxSizing,
  "-moz-column-count"?: Property$ColumnCount,
  "-moz-column-fill"?: Property$ColumnFill,
  "-moz-column-rule-color"?: Property$ColumnRuleColor,
  "-moz-column-rule-style"?: Property$ColumnRuleStyle,
  "-moz-column-rule-width"?: Property$ColumnRuleWidth<TLength>,
  "-moz-column-width"?: Property$ColumnWidth<TLength>,
  "-moz-context-properties"?: Property$MozContextProperties,
  "-moz-font-feature-settings"?: Property$FontFeatureSettings,
  "-moz-font-language-override"?: Property$FontLanguageOverride,
  "-moz-hyphens"?: Property$Hyphens,
  "-moz-image-region"?: Property$MozImageRegion,
  "-moz-margin-end"?: Property$MarginInlineEnd<TLength>,
  "-moz-margin-start"?: Property$MarginInlineStart<TLength>,
  "-moz-orient"?: Property$MozOrient,
  "-moz-osx-font-smoothing"?: Property$FontSmooth<TLength>,
  "-moz-padding-end"?: Property$PaddingInlineEnd<TLength>,
  "-moz-padding-start"?: Property$PaddingInlineStart<TLength>,
  "-moz-perspective"?: Property$Perspective<TLength>,
  "-moz-perspective-origin"?: Property$PerspectiveOrigin<TLength>,
  "-moz-stack-sizing"?: Property$MozStackSizing,
  "-moz-tab-size"?: Property$TabSize<TLength>,
  "-moz-text-blink"?: Property$MozTextBlink,
  "-moz-text-size-adjust"?: Property$TextSizeAdjust,
  "-moz-transform-origin"?: Property$TransformOrigin<TLength>,
  "-moz-transform-style"?: Property$TransformStyle,
  "-moz-transition-delay"?: Property$TransitionDelay<TTime>,
  "-moz-transition-duration"?: Property$TransitionDuration<TTime>,
  "-moz-transition-property"?: Property$TransitionProperty,
  "-moz-transition-timing-function"?: Property$TransitionTimingFunction,
  "-moz-user-focus"?: Property$MozUserFocus,
  "-moz-user-modify"?: Property$MozUserModify,
  "-moz-user-select"?: Property$UserSelect,
  "-moz-window-dragging"?: Property$MozWindowDragging,
  "-moz-window-shadow"?: Property$MozWindowShadow,
  "-ms-accelerator"?: Property$MsAccelerator,
  "-ms-block-progression"?: Property$MsBlockProgression,
  "-ms-content-zoom-chaining"?: Property$MsContentZoomChaining,
  "-ms-content-zoom-limit-max"?: Property$MsContentZoomLimitMax,
  "-ms-content-zoom-limit-min"?: Property$MsContentZoomLimitMin,
  "-ms-content-zoom-snap-points"?: Property$MsContentZoomSnapPoints,
  "-ms-content-zoom-snap-type"?: Property$MsContentZoomSnapType,
  "-ms-content-zooming"?: Property$MsContentZooming,
  "-ms-filter"?: Property$MsFilter,
  "-ms-flex-direction"?: Property$FlexDirection,
  "-ms-flex-positive"?: Property$FlexGrow,
  "-ms-flow-from"?: Property$MsFlowFrom,
  "-ms-flow-into"?: Property$MsFlowInto,
  "-ms-grid-columns"?: Property$MsGridColumns<TLength>,
  "-ms-grid-rows"?: Property$MsGridRows<TLength>,
  "-ms-high-contrast-adjust"?: Property$MsHighContrastAdjust,
  "-ms-hyphenate-limit-chars"?: Property$MsHyphenateLimitChars,
  "-ms-hyphenate-limit-lines"?: Property$MsHyphenateLimitLines,
  "-ms-hyphenate-limit-zone"?: Property$MsHyphenateLimitZone<TLength>,
  "-ms-hyphens"?: Property$Hyphens,
  "-ms-ime-align"?: Property$MsImeAlign,
  "-ms-line-break"?: Property$LineBreak,
  "-ms-order"?: Property$Order,
  "-ms-overflow-style"?: Property$MsOverflowStyle,
  "-ms-overflow-x"?: Property$OverflowX,
  "-ms-overflow-y"?: Property$OverflowY,
  "-ms-scroll-chaining"?: Property$MsScrollChaining,
  "-ms-scroll-limit-x-max"?: Property$MsScrollLimitXMax<TLength>,
  "-ms-scroll-limit-x-min"?: Property$MsScrollLimitXMin<TLength>,
  "-ms-scroll-limit-y-max"?: Property$MsScrollLimitYMax<TLength>,
  "-ms-scroll-limit-y-min"?: Property$MsScrollLimitYMin<TLength>,
  "-ms-scroll-rails"?: Property$MsScrollRails,
  "-ms-scroll-snap-points-x"?: Property$MsScrollSnapPointsX,
  "-ms-scroll-snap-points-y"?: Property$MsScrollSnapPointsY,
  "-ms-scroll-snap-type"?: Property$MsScrollSnapType,
  "-ms-scroll-translation"?: Property$MsScrollTranslation,
  "-ms-scrollbar-3dlight-color"?: Property$MsScrollbar3dlightColor,
  "-ms-scrollbar-arrow-color"?: Property$MsScrollbarArrowColor,
  "-ms-scrollbar-base-color"?: Property$MsScrollbarBaseColor,
  "-ms-scrollbar-darkshadow-color"?: Property$MsScrollbarDarkshadowColor,
  "-ms-scrollbar-face-color"?: Property$MsScrollbarFaceColor,
  "-ms-scrollbar-highlight-color"?: Property$MsScrollbarHighlightColor,
  "-ms-scrollbar-shadow-color"?: Property$MsScrollbarShadowColor,
  "-ms-scrollbar-track-color"?: Property$MsScrollbarTrackColor,
  "-ms-text-autospace"?: Property$MsTextAutospace,
  "-ms-text-combine-horizontal"?: Property$TextCombineUpright,
  "-ms-text-overflow"?: Property$TextOverflow,
  "-ms-touch-action"?: Property$TouchAction,
  "-ms-touch-select"?: Property$MsTouchSelect,
  "-ms-transform"?: Property$Transform,
  "-ms-transform-origin"?: Property$TransformOrigin<TLength>,
  "-ms-transition-delay"?: Property$TransitionDelay<TTime>,
  "-ms-transition-duration"?: Property$TransitionDuration<TTime>,
  "-ms-transition-property"?: Property$TransitionProperty,
  "-ms-transition-timing-function"?: Property$TransitionTimingFunction,
  "-ms-user-select"?: Property$MsUserSelect,
  "-ms-word-break"?: Property$WordBreak,
  "-ms-wrap-flow"?: Property$MsWrapFlow,
  "-ms-wrap-margin"?: Property$MsWrapMargin<TLength>,
  "-ms-wrap-through"?: Property$MsWrapThrough,
  "-ms-writing-mode"?: Property$WritingMode,
  "-webkit-align-content"?: Property$AlignContent,
  "-webkit-align-items"?: Property$AlignItems,
  "-webkit-align-self"?: Property$AlignSelf,
  "-webkit-animation-delay"?: Property$AnimationDelay<TTime>,
  "-webkit-animation-direction"?: Property$AnimationDirection,
  "-webkit-animation-duration"?: Property$AnimationDuration<TTime>,
  "-webkit-animation-fill-mode"?: Property$AnimationFillMode,
  "-webkit-animation-iteration-count"?: Property$AnimationIterationCount,
  "-webkit-animation-name"?: Property$AnimationName,
  "-webkit-animation-play-state"?: Property$AnimationPlayState,
  "-webkit-animation-timing-function"?: Property$AnimationTimingFunction,
  "-webkit-appearance"?: Property$WebkitAppearance,
  "-webkit-backdrop-filter"?: Property$BackdropFilter,
  "-webkit-backface-visibility"?: Property$BackfaceVisibility,
  "-webkit-background-clip"?: Property$BackgroundClip,
  "-webkit-background-origin"?: Property$BackgroundOrigin,
  "-webkit-background-size"?: Property$BackgroundSize<TLength>,
  "-webkit-border-before-color"?: Property$WebkitBorderBeforeColor,
  "-webkit-border-before-style"?: Property$WebkitBorderBeforeStyle,
  "-webkit-border-before-width"?: Property$WebkitBorderBeforeWidth<TLength>,
  "-webkit-border-bottom-left-radius"?: Property$BorderBottomLeftRadius<TLength>,
  "-webkit-border-bottom-right-radius"?: Property$BorderBottomRightRadius<TLength>,
  "-webkit-border-image-slice"?: Property$BorderImageSlice,
  "-webkit-border-top-left-radius"?: Property$BorderTopLeftRadius<TLength>,
  "-webkit-border-top-right-radius"?: Property$BorderTopRightRadius<TLength>,
  "-webkit-box-decoration-break"?: Property$BoxDecorationBreak,
  "-webkit-box-reflect"?: Property$WebkitBoxReflect<TLength>,
  "-webkit-box-shadow"?: Property$BoxShadow,
  "-webkit-box-sizing"?: Property$BoxSizing,
  "-webkit-clip-path"?: Property$ClipPath,
  "-webkit-column-count"?: Property$ColumnCount,
  "-webkit-column-fill"?: Property$ColumnFill,
  "-webkit-column-rule-color"?: Property$ColumnRuleColor,
  "-webkit-column-rule-style"?: Property$ColumnRuleStyle,
  "-webkit-column-rule-width"?: Property$ColumnRuleWidth<TLength>,
  "-webkit-column-span"?: Property$ColumnSpan,
  "-webkit-column-width"?: Property$ColumnWidth<TLength>,
  "-webkit-filter"?: Property$Filter,
  "-webkit-flex-basis"?: Property$FlexBasis<TLength>,
  "-webkit-flex-direction"?: Property$FlexDirection,
  "-webkit-flex-grow"?: Property$FlexGrow,
  "-webkit-flex-shrink"?: Property$FlexShrink,
  "-webkit-flex-wrap"?: Property$FlexWrap,
  "-webkit-font-feature-settings"?: Property$FontFeatureSettings,
  "-webkit-font-kerning"?: Property$FontKerning,
  "-webkit-font-smoothing"?: Property$FontSmooth<TLength>,
  "-webkit-font-variant-ligatures"?: Property$FontVariantLigatures,
  "-webkit-hyphenate-character"?: Property$HyphenateCharacter,
  "-webkit-hyphens"?: Property$Hyphens,
  "-webkit-initial-letter"?: Property$InitialLetter,
  "-webkit-justify-content"?: Property$JustifyContent,
  "-webkit-line-break"?: Property$LineBreak,
  "-webkit-line-clamp"?: Property$WebkitLineClamp,
  "-webkit-margin-end"?: Property$MarginInlineEnd<TLength>,
  "-webkit-margin-start"?: Property$MarginInlineStart<TLength>,
  "-webkit-mask-attachment"?: Property$WebkitMaskAttachment,
  "-webkit-mask-box-image-outset"?: Property$MaskBorderOutset<TLength>,
  "-webkit-mask-box-image-repeat"?: Property$MaskBorderRepeat,
  "-webkit-mask-box-image-slice"?: Property$MaskBorderSlice,
  "-webkit-mask-box-image-source"?: Property$MaskBorderSource,
  "-webkit-mask-box-image-width"?: Property$MaskBorderWidth<TLength>,
  "-webkit-mask-clip"?: Property$WebkitMaskClip,
  "-webkit-mask-composite"?: Property$WebkitMaskComposite,
  "-webkit-mask-image"?: Property$WebkitMaskImage,
  "-webkit-mask-origin"?: Property$WebkitMaskOrigin,
  "-webkit-mask-position"?: Property$WebkitMaskPosition<TLength>,
  "-webkit-mask-position-x"?: Property$WebkitMaskPositionX<TLength>,
  "-webkit-mask-position-y"?: Property$WebkitMaskPositionY<TLength>,
  "-webkit-mask-repeat"?: Property$WebkitMaskRepeat,
  "-webkit-mask-repeat-x"?: Property$WebkitMaskRepeatX,
  "-webkit-mask-repeat-y"?: Property$WebkitMaskRepeatY,
  "-webkit-mask-size"?: Property$WebkitMaskSize<TLength>,
  "-webkit-max-inline-size"?: Property$MaxInlineSize<TLength>,
  "-webkit-order"?: Property$Order,
  "-webkit-overflow-scrolling"?: Property$WebkitOverflowScrolling,
  "-webkit-padding-end"?: Property$PaddingInlineEnd<TLength>,
  "-webkit-padding-start"?: Property$PaddingInlineStart<TLength>,
  "-webkit-perspective"?: Property$Perspective<TLength>,
  "-webkit-perspective-origin"?: Property$PerspectiveOrigin<TLength>,
  "-webkit-print-color-adjust"?: Property$PrintColorAdjust,
  "-webkit-ruby-position"?: Property$RubyPosition,
  "-webkit-scroll-snap-type"?: Property$ScrollSnapType,
  "-webkit-shape-margin"?: Property$ShapeMargin<TLength>,
  "-webkit-tap-highlight-color"?: Property$WebkitTapHighlightColor,
  "-webkit-text-combine"?: Property$TextCombineUpright,
  "-webkit-text-decoration-color"?: Property$TextDecorationColor,
  "-webkit-text-decoration-line"?: Property$TextDecorationLine,
  "-webkit-text-decoration-skip"?: Property$TextDecorationSkip,
  "-webkit-text-decoration-style"?: Property$TextDecorationStyle,
  "-webkit-text-emphasis-color"?: Property$TextEmphasisColor,
  "-webkit-text-emphasis-position"?: Property$TextEmphasisPosition,
  "-webkit-text-emphasis-style"?: Property$TextEmphasisStyle,
  "-webkit-text-fill-color"?: Property$WebkitTextFillColor,
  "-webkit-text-orientation"?: Property$TextOrientation,
  "-webkit-text-size-adjust"?: Property$TextSizeAdjust,
  "-webkit-text-stroke-color"?: Property$WebkitTextStrokeColor,
  "-webkit-text-stroke-width"?: Property$WebkitTextStrokeWidth<TLength>,
  "-webkit-text-underline-position"?: Property$TextUnderlinePosition,
  "-webkit-touch-callout"?: Property$WebkitTouchCallout,
  "-webkit-transform"?: Property$Transform,
  "-webkit-transform-origin"?: Property$TransformOrigin<TLength>,
  "-webkit-transform-style"?: Property$TransformStyle,
  "-webkit-transition-delay"?: Property$TransitionDelay<TTime>,
  "-webkit-transition-duration"?: Property$TransitionDuration<TTime>,
  "-webkit-transition-property"?: Property$TransitionProperty,
  "-webkit-transition-timing-function"?: Property$TransitionTimingFunction,
  "-webkit-user-modify"?: Property$WebkitUserModify,
  "-webkit-user-select"?: Property$UserSelect,
  "-webkit-writing-mode"?: Property$WritingMode,
|};

export type VendorShorthandPropertiesHyphen<TLength = string | 0, TTime = string> = {|
  "-moz-animation"?: Property$Animation<TTime>,
  "-moz-border-image"?: Property$BorderImage,
  "-moz-column-rule"?: Property$ColumnRule<TLength>,
  "-moz-columns"?: Property$Columns<TLength>,
  "-moz-transition"?: Property$Transition<TTime>,
  "-ms-content-zoom-limit"?: Property$MsContentZoomLimit,
  "-ms-content-zoom-snap"?: Property$MsContentZoomSnap,
  "-ms-flex"?: Property$Flex<TLength>,
  "-ms-scroll-limit"?: Property$MsScrollLimit,
  "-ms-scroll-snap-x"?: Property$MsScrollSnapX,
  "-ms-scroll-snap-y"?: Property$MsScrollSnapY,
  "-ms-transition"?: Property$Transition<TTime>,
  "-webkit-animation"?: Property$Animation<TTime>,
  "-webkit-border-before"?: Property$WebkitBorderBefore<TLength>,
  "-webkit-border-image"?: Property$BorderImage,
  "-webkit-border-radius"?: Property$BorderRadius<TLength>,
  "-webkit-column-rule"?: Property$ColumnRule<TLength>,
  "-webkit-columns"?: Property$Columns<TLength>,
  "-webkit-flex"?: Property$Flex<TLength>,
  "-webkit-flex-flow"?: Property$FlexFlow,
  "-webkit-mask"?: Property$WebkitMask<TLength>,
  "-webkit-mask-box-image"?: Property$MaskBorder,
  "-webkit-text-emphasis"?: Property$TextEmphasis,
  "-webkit-text-stroke"?: Property$WebkitTextStroke<TLength>,
  "-webkit-transition"?: Property$Transition<TTime>,
|};

export type VendorPropertiesHyphen<TLength = string | 0, TTime = string> = {|
  ...VendorLonghandPropertiesHyphen<TLength, TTime>,
  ...VendorShorthandPropertiesHyphen<TLength, TTime>,
|};

export type ObsoletePropertiesHyphen<TLength = string | 0, TTime = string> = {|
  azimuth?: Property$Azimuth,
  "box-align"?: Property$BoxAlign,
  "box-direction"?: Property$BoxDirection,
  "box-flex"?: Property$BoxFlex,
  "box-flex-group"?: Property$BoxFlexGroup,
  "box-lines"?: Property$BoxLines,
  "box-ordinal-group"?: Property$BoxOrdinalGroup,
  "box-orient"?: Property$BoxOrient,
  "box-pack"?: Property$BoxPack,
  clip?: Property$Clip,
  "grid-column-gap"?: Property$GridColumnGap<TLength>,
  "grid-gap"?: Property$GridGap<TLength>,
  "grid-row-gap"?: Property$GridRowGap<TLength>,
  "ime-mode"?: Property$ImeMode,
  "offset-block"?: Property$InsetBlock<TLength>,
  "offset-block-end"?: Property$InsetBlockEnd<TLength>,
  "offset-block-start"?: Property$InsetBlockStart<TLength>,
  "offset-inline"?: Property$InsetInline<TLength>,
  "offset-inline-end"?: Property$InsetInlineEnd<TLength>,
  "offset-inline-start"?: Property$InsetInlineStart<TLength>,
  "scroll-snap-coordinate"?: Property$ScrollSnapCoordinate<TLength>,
  "scroll-snap-destination"?: Property$ScrollSnapDestination<TLength>,
  "scroll-snap-points-x"?: Property$ScrollSnapPointsX,
  "scroll-snap-points-y"?: Property$ScrollSnapPointsY,
  "scroll-snap-type-x"?: Property$ScrollSnapTypeX,
  "scroll-snap-type-y"?: Property$ScrollSnapTypeY,
  "-khtml-box-align"?: Property$BoxAlign,
  "-khtml-box-direction"?: Property$BoxDirection,
  "-khtml-box-flex"?: Property$BoxFlex,
  "-khtml-box-flex-group"?: Property$BoxFlexGroup,
  "-khtml-box-lines"?: Property$BoxLines,
  "-khtml-box-ordinal-group"?: Property$BoxOrdinalGroup,
  "-khtml-box-orient"?: Property$BoxOrient,
  "-khtml-box-pack"?: Property$BoxPack,
  "-khtml-line-break"?: Property$LineBreak,
  "-khtml-opacity"?: Property$Opacity,
  "-khtml-user-select"?: Property$UserSelect,
  "-moz-background-clip"?: Property$BackgroundClip,
  "-moz-background-inline-policy"?: Property$BoxDecorationBreak,
  "-moz-background-origin"?: Property$BackgroundOrigin,
  "-moz-background-size"?: Property$BackgroundSize<TLength>,
  "-moz-binding"?: Property$MozBinding,
  "-moz-border-radius"?: Property$BorderRadius<TLength>,
  "-moz-border-radius-bottomleft"?: Property$BorderBottomLeftRadius<TLength>,
  "-moz-border-radius-bottomright"?: Property$BorderBottomRightRadius<TLength>,
  "-moz-border-radius-topleft"?: Property$BorderTopLeftRadius<TLength>,
  "-moz-border-radius-topright"?: Property$BorderTopRightRadius<TLength>,
  "-moz-box-align"?: Property$BoxAlign,
  "-moz-box-direction"?: Property$BoxDirection,
  "-moz-box-flex"?: Property$BoxFlex,
  "-moz-box-ordinal-group"?: Property$BoxOrdinalGroup,
  "-moz-box-orient"?: Property$BoxOrient,
  "-moz-box-pack"?: Property$BoxPack,
  "-moz-box-shadow"?: Property$BoxShadow,
  "-moz-float-edge"?: Property$MozFloatEdge,
  "-moz-force-broken-image-icon"?: Property$MozForceBrokenImageIcon,
  "-moz-opacity"?: Property$Opacity,
  "-moz-outline"?: Property$Outline<TLength>,
  "-moz-outline-color"?: Property$OutlineColor,
  "-moz-outline-radius"?: Property$MozOutlineRadius<TLength>,
  "-moz-outline-radius-bottomleft"?: Property$MozOutlineRadiusBottomleft<TLength>,
  "-moz-outline-radius-bottomright"?: Property$MozOutlineRadiusBottomright<TLength>,
  "-moz-outline-radius-topleft"?: Property$MozOutlineRadiusTopleft<TLength>,
  "-moz-outline-radius-topright"?: Property$MozOutlineRadiusTopright<TLength>,
  "-moz-outline-style"?: Property$OutlineStyle,
  "-moz-outline-width"?: Property$OutlineWidth<TLength>,
  "-moz-text-align-last"?: Property$TextAlignLast,
  "-moz-text-decoration-color"?: Property$TextDecorationColor,
  "-moz-text-decoration-line"?: Property$TextDecorationLine,
  "-moz-text-decoration-style"?: Property$TextDecorationStyle,
  "-moz-user-input"?: Property$MozUserInput,
  "-ms-ime-mode"?: Property$ImeMode,
  "-o-animation"?: Property$Animation<TTime>,
  "-o-animation-delay"?: Property$AnimationDelay<TTime>,
  "-o-animation-direction"?: Property$AnimationDirection,
  "-o-animation-duration"?: Property$AnimationDuration<TTime>,
  "-o-animation-fill-mode"?: Property$AnimationFillMode,
  "-o-animation-iteration-count"?: Property$AnimationIterationCount,
  "-o-animation-name"?: Property$AnimationName,
  "-o-animation-play-state"?: Property$AnimationPlayState,
  "-o-animation-timing-function"?: Property$AnimationTimingFunction,
  "-o-background-size"?: Property$BackgroundSize<TLength>,
  "-o-border-image"?: Property$BorderImage,
  "-o-object-fit"?: Property$ObjectFit,
  "-o-object-position"?: Property$ObjectPosition<TLength>,
  "-o-tab-size"?: Property$TabSize<TLength>,
  "-o-text-overflow"?: Property$TextOverflow,
  "-o-transform"?: Property$Transform,
  "-o-transform-origin"?: Property$TransformOrigin<TLength>,
  "-o-transition"?: Property$Transition<TTime>,
  "-o-transition-delay"?: Property$TransitionDelay<TTime>,
  "-o-transition-duration"?: Property$TransitionDuration<TTime>,
  "-o-transition-property"?: Property$TransitionProperty,
  "-o-transition-timing-function"?: Property$TransitionTimingFunction,
  "-webkit-box-align"?: Property$BoxAlign,
  "-webkit-box-direction"?: Property$BoxDirection,
  "-webkit-box-flex"?: Property$BoxFlex,
  "-webkit-box-flex-group"?: Property$BoxFlexGroup,
  "-webkit-box-lines"?: Property$BoxLines,
  "-webkit-box-ordinal-group"?: Property$BoxOrdinalGroup,
  "-webkit-box-orient"?: Property$BoxOrient,
  "-webkit-box-pack"?: Property$BoxPack,
  "-webkit-scroll-snap-points-x"?: Property$ScrollSnapPointsX,
  "-webkit-scroll-snap-points-y"?: Property$ScrollSnapPointsY,
|};

export type SvgPropertiesHyphen<TLength = string | 0, TTime = string> = {|
  "alignment-baseline"?: Property$AlignmentBaseline,
  "baseline-shift"?: Property$BaselineShift<TLength>,
  clip?: Property$Clip,
  "clip-path"?: Property$ClipPath,
  "clip-rule"?: Property$ClipRule,
  color?: Property$Color,
  "color-interpolation"?: Property$ColorInterpolation,
  "color-rendering"?: Property$ColorRendering,
  cursor?: Property$Cursor,
  direction?: Property$Direction,
  display?: Property$Display,
  "dominant-baseline"?: Property$DominantBaseline,
  fill?: Property$Fill,
  "fill-opacity"?: Property$FillOpacity,
  "fill-rule"?: Property$FillRule,
  filter?: Property$Filter,
  "flood-color"?: Property$FloodColor,
  "flood-opacity"?: Property$FloodOpacity,
  font?: Property$Font,
  "font-family"?: Property$FontFamily,
  "font-size"?: Property$FontSize<TLength>,
  "font-size-adjust"?: Property$FontSizeAdjust,
  "font-stretch"?: Property$FontStretch,
  "font-style"?: Property$FontStyle,
  "font-variant"?: Property$FontVariant,
  "font-weight"?: Property$FontWeight,
  "glyph-orientation-vertical"?: Property$GlyphOrientationVertical,
  "image-rendering"?: Property$ImageRendering,
  "letter-spacing"?: Property$LetterSpacing<TLength>,
  "lighting-color"?: Property$LightingColor,
  "line-height"?: Property$LineHeight<TLength>,
  marker?: Property$Marker,
  "marker-end"?: Property$MarkerEnd,
  "marker-mid"?: Property$MarkerMid,
  "marker-start"?: Property$MarkerStart,
  mask?: Property$Mask<TLength>,
  opacity?: Property$Opacity,
  overflow?: Property$Overflow,
  "paint-order"?: Property$PaintOrder,
  "pointer-events"?: Property$PointerEvents,
  "shape-rendering"?: Property$ShapeRendering,
  "stop-color"?: Property$StopColor,
  "stop-opacity"?: Property$StopOpacity,
  stroke?: Property$Stroke,
  "stroke-dasharray"?: Property$StrokeDasharray<TLength>,
  "stroke-dashoffset"?: Property$StrokeDashoffset<TLength>,
  "stroke-linecap"?: Property$StrokeLinecap,
  "stroke-linejoin"?: Property$StrokeLinejoin,
  "stroke-miterlimit"?: Property$StrokeMiterlimit,
  "stroke-opacity"?: Property$StrokeOpacity,
  "stroke-width"?: Property$StrokeWidth<TLength>,
  "text-anchor"?: Property$TextAnchor,
  "text-decoration"?: Property$TextDecoration<TLength>,
  "text-rendering"?: Property$TextRendering,
  "unicode-bidi"?: Property$UnicodeBidi,
  "vector-effect"?: Property$VectorEffect,
  visibility?: Property$Visibility,
  "white-space"?: Property$WhiteSpace,
  "word-spacing"?: Property$WordSpacing<TLength>,
  "writing-mode"?: Property$WritingMode,
|};

export type PropertiesHyphen<TLength = string | 0, TTime = string> = {|
  ...StandardPropertiesHyphen<TLength, TTime>,
  ...VendorPropertiesHyphen<TLength, TTime>,
  ...ObsoletePropertiesHyphen<TLength, TTime>,
  ...SvgPropertiesHyphen<TLength, TTime>,
|};

export type StandardLonghandPropertiesFallback<TLength = string | 0, TTime = string> = {|
  accentColor?: Property$AccentColor | Array<Property$AccentColor>,
  alignContent?: Property$AlignContent | Array<Property$AlignContent>,
  alignItems?: Property$AlignItems | Array<Property$AlignItems>,
  alignSelf?: Property$AlignSelf | Array<Property$AlignSelf>,
  alignTracks?: Property$AlignTracks | Array<Property$AlignTracks>,
  animationComposition?: Property$AnimationComposition | Array<Property$AnimationComposition>,
  animationDelay?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
  animationDirection?: Property$AnimationDirection | Array<Property$AnimationDirection>,
  animationDuration?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
  animationFillMode?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
  animationIterationCount?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
  animationName?: Property$AnimationName | Array<Property$AnimationName>,
  animationPlayState?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
  animationTimeline?: Property$AnimationTimeline | Array<Property$AnimationTimeline>,
  animationTimingFunction?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
  appearance?: Property$Appearance | Array<Property$Appearance>,
  aspectRatio?: Property$AspectRatio | Array<Property$AspectRatio>,
  backdropFilter?: Property$BackdropFilter | Array<Property$BackdropFilter>,
  backfaceVisibility?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
  backgroundAttachment?: Property$BackgroundAttachment | Array<Property$BackgroundAttachment>,
  backgroundBlendMode?: Property$BackgroundBlendMode | Array<Property$BackgroundBlendMode>,
  backgroundClip?: Property$BackgroundClip | Array<Property$BackgroundClip>,
  backgroundColor?: Property$BackgroundColor | Array<Property$BackgroundColor>,
  backgroundImage?: Property$BackgroundImage | Array<Property$BackgroundImage>,
  backgroundOrigin?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
  backgroundPositionX?: Property$BackgroundPositionX<TLength> | Array<Property$BackgroundPositionX<TLength>>,
  backgroundPositionY?: Property$BackgroundPositionY<TLength> | Array<Property$BackgroundPositionY<TLength>>,
  backgroundRepeat?: Property$BackgroundRepeat | Array<Property$BackgroundRepeat>,
  backgroundSize?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
  blockOverflow?: Property$BlockOverflow | Array<Property$BlockOverflow>,
  blockSize?: Property$BlockSize<TLength> | Array<Property$BlockSize<TLength>>,
  borderBlockColor?: Property$BorderBlockColor | Array<Property$BorderBlockColor>,
  borderBlockEndColor?: Property$BorderBlockEndColor | Array<Property$BorderBlockEndColor>,
  borderBlockEndStyle?: Property$BorderBlockEndStyle | Array<Property$BorderBlockEndStyle>,
  borderBlockEndWidth?: Property$BorderBlockEndWidth<TLength> | Array<Property$BorderBlockEndWidth<TLength>>,
  borderBlockStartColor?: Property$BorderBlockStartColor | Array<Property$BorderBlockStartColor>,
  borderBlockStartStyle?: Property$BorderBlockStartStyle | Array<Property$BorderBlockStartStyle>,
  borderBlockStartWidth?: Property$BorderBlockStartWidth<TLength> | Array<Property$BorderBlockStartWidth<TLength>>,
  borderBlockStyle?: Property$BorderBlockStyle | Array<Property$BorderBlockStyle>,
  borderBlockWidth?: Property$BorderBlockWidth<TLength> | Array<Property$BorderBlockWidth<TLength>>,
  borderBottomColor?: Property$BorderBottomColor | Array<Property$BorderBottomColor>,
  borderBottomLeftRadius?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
  borderBottomRightRadius?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
  borderBottomStyle?: Property$BorderBottomStyle | Array<Property$BorderBottomStyle>,
  borderBottomWidth?: Property$BorderBottomWidth<TLength> | Array<Property$BorderBottomWidth<TLength>>,
  borderCollapse?: Property$BorderCollapse | Array<Property$BorderCollapse>,
  borderEndEndRadius?: Property$BorderEndEndRadius<TLength> | Array<Property$BorderEndEndRadius<TLength>>,
  borderEndStartRadius?: Property$BorderEndStartRadius<TLength> | Array<Property$BorderEndStartRadius<TLength>>,
  borderImageOutset?: Property$BorderImageOutset<TLength> | Array<Property$BorderImageOutset<TLength>>,
  borderImageRepeat?: Property$BorderImageRepeat | Array<Property$BorderImageRepeat>,
  borderImageSlice?: Property$BorderImageSlice | Array<Property$BorderImageSlice>,
  borderImageSource?: Property$BorderImageSource | Array<Property$BorderImageSource>,
  borderImageWidth?: Property$BorderImageWidth<TLength> | Array<Property$BorderImageWidth<TLength>>,
  borderInlineColor?: Property$BorderInlineColor | Array<Property$BorderInlineColor>,
  borderInlineEndColor?: Property$BorderInlineEndColor | Array<Property$BorderInlineEndColor>,
  borderInlineEndStyle?: Property$BorderInlineEndStyle | Array<Property$BorderInlineEndStyle>,
  borderInlineEndWidth?: Property$BorderInlineEndWidth<TLength> | Array<Property$BorderInlineEndWidth<TLength>>,
  borderInlineStartColor?: Property$BorderInlineStartColor | Array<Property$BorderInlineStartColor>,
  borderInlineStartStyle?: Property$BorderInlineStartStyle | Array<Property$BorderInlineStartStyle>,
  borderInlineStartWidth?: Property$BorderInlineStartWidth<TLength> | Array<Property$BorderInlineStartWidth<TLength>>,
  borderInlineStyle?: Property$BorderInlineStyle | Array<Property$BorderInlineStyle>,
  borderInlineWidth?: Property$BorderInlineWidth<TLength> | Array<Property$BorderInlineWidth<TLength>>,
  borderLeftColor?: Property$BorderLeftColor | Array<Property$BorderLeftColor>,
  borderLeftStyle?: Property$BorderLeftStyle | Array<Property$BorderLeftStyle>,
  borderLeftWidth?: Property$BorderLeftWidth<TLength> | Array<Property$BorderLeftWidth<TLength>>,
  borderRightColor?: Property$BorderRightColor | Array<Property$BorderRightColor>,
  borderRightStyle?: Property$BorderRightStyle | Array<Property$BorderRightStyle>,
  borderRightWidth?: Property$BorderRightWidth<TLength> | Array<Property$BorderRightWidth<TLength>>,
  borderSpacing?: Property$BorderSpacing<TLength> | Array<Property$BorderSpacing<TLength>>,
  borderStartEndRadius?: Property$BorderStartEndRadius<TLength> | Array<Property$BorderStartEndRadius<TLength>>,
  borderStartStartRadius?: Property$BorderStartStartRadius<TLength> | Array<Property$BorderStartStartRadius<TLength>>,
  borderTopColor?: Property$BorderTopColor | Array<Property$BorderTopColor>,
  borderTopLeftRadius?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
  borderTopRightRadius?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
  borderTopStyle?: Property$BorderTopStyle | Array<Property$BorderTopStyle>,
  borderTopWidth?: Property$BorderTopWidth<TLength> | Array<Property$BorderTopWidth<TLength>>,
  bottom?: Property$Bottom<TLength> | Array<Property$Bottom<TLength>>,
  boxDecorationBreak?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
  boxShadow?: Property$BoxShadow | Array<Property$BoxShadow>,
  boxSizing?: Property$BoxSizing | Array<Property$BoxSizing>,
  breakAfter?: Property$BreakAfter | Array<Property$BreakAfter>,
  breakBefore?: Property$BreakBefore | Array<Property$BreakBefore>,
  breakInside?: Property$BreakInside | Array<Property$BreakInside>,
  captionSide?: Property$CaptionSide | Array<Property$CaptionSide>,
  caretColor?: Property$CaretColor | Array<Property$CaretColor>,
  clear?: Property$Clear | Array<Property$Clear>,
  clipPath?: Property$ClipPath | Array<Property$ClipPath>,
  color?: Property$Color | Array<Property$Color>,
  colorAdjust?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
  colorScheme?: Property$ColorScheme | Array<Property$ColorScheme>,
  columnCount?: Property$ColumnCount | Array<Property$ColumnCount>,
  columnFill?: Property$ColumnFill | Array<Property$ColumnFill>,
  columnGap?: Property$ColumnGap<TLength> | Array<Property$ColumnGap<TLength>>,
  columnRuleColor?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
  columnRuleStyle?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
  columnRuleWidth?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
  columnSpan?: Property$ColumnSpan | Array<Property$ColumnSpan>,
  columnWidth?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
  contain?: Property$Contain | Array<Property$Contain>,
  content?: Property$Content | Array<Property$Content>,
  contentVisibility?: Property$ContentVisibility | Array<Property$ContentVisibility>,
  counterIncrement?: Property$CounterIncrement | Array<Property$CounterIncrement>,
  counterReset?: Property$CounterReset | Array<Property$CounterReset>,
  counterSet?: Property$CounterSet | Array<Property$CounterSet>,
  cursor?: Property$Cursor | Array<Property$Cursor>,
  direction?: Property$Direction | Array<Property$Direction>,
  display?: Property$Display | Array<Property$Display>,
  emptyCells?: Property$EmptyCells | Array<Property$EmptyCells>,
  filter?: Property$Filter | Array<Property$Filter>,
  flexBasis?: Property$FlexBasis<TLength> | Array<Property$FlexBasis<TLength>>,
  flexDirection?: Property$FlexDirection | Array<Property$FlexDirection>,
  flexGrow?: Property$FlexGrow | Array<Property$FlexGrow>,
  flexShrink?: Property$FlexShrink | Array<Property$FlexShrink>,
  flexWrap?: Property$FlexWrap | Array<Property$FlexWrap>,
  float?: Property$Float | Array<Property$Float>,
  fontFamily?: Property$FontFamily | Array<Property$FontFamily>,
  fontFeatureSettings?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
  fontKerning?: Property$FontKerning | Array<Property$FontKerning>,
  fontLanguageOverride?: Property$FontLanguageOverride | Array<Property$FontLanguageOverride>,
  fontOpticalSizing?: Property$FontOpticalSizing | Array<Property$FontOpticalSizing>,
  fontSize?: Property$FontSize<TLength> | Array<Property$FontSize<TLength>>,
  fontSizeAdjust?: Property$FontSizeAdjust | Array<Property$FontSizeAdjust>,
  fontSmooth?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
  fontStretch?: Property$FontStretch | Array<Property$FontStretch>,
  fontStyle?: Property$FontStyle | Array<Property$FontStyle>,
  fontSynthesis?: Property$FontSynthesis | Array<Property$FontSynthesis>,
  fontVariant?: Property$FontVariant | Array<Property$FontVariant>,
  fontVariantAlternates?: Property$FontVariantAlternates | Array<Property$FontVariantAlternates>,
  fontVariantCaps?: Property$FontVariantCaps | Array<Property$FontVariantCaps>,
  fontVariantEastAsian?: Property$FontVariantEastAsian | Array<Property$FontVariantEastAsian>,
  fontVariantLigatures?: Property$FontVariantLigatures | Array<Property$FontVariantLigatures>,
  fontVariantNumeric?: Property$FontVariantNumeric | Array<Property$FontVariantNumeric>,
  fontVariantPosition?: Property$FontVariantPosition | Array<Property$FontVariantPosition>,
  fontVariationSettings?: Property$FontVariationSettings | Array<Property$FontVariationSettings>,
  fontWeight?: Property$FontWeight | Array<Property$FontWeight>,
  forcedColorAdjust?: Property$ForcedColorAdjust | Array<Property$ForcedColorAdjust>,
  gridAutoColumns?: Property$GridAutoColumns<TLength> | Array<Property$GridAutoColumns<TLength>>,
  gridAutoFlow?: Property$GridAutoFlow | Array<Property$GridAutoFlow>,
  gridAutoRows?: Property$GridAutoRows<TLength> | Array<Property$GridAutoRows<TLength>>,
  gridColumnEnd?: Property$GridColumnEnd | Array<Property$GridColumnEnd>,
  gridColumnStart?: Property$GridColumnStart | Array<Property$GridColumnStart>,
  gridRowEnd?: Property$GridRowEnd | Array<Property$GridRowEnd>,
  gridRowStart?: Property$GridRowStart | Array<Property$GridRowStart>,
  gridTemplateAreas?: Property$GridTemplateAreas | Array<Property$GridTemplateAreas>,
  gridTemplateColumns?: Property$GridTemplateColumns<TLength> | Array<Property$GridTemplateColumns<TLength>>,
  gridTemplateRows?: Property$GridTemplateRows<TLength> | Array<Property$GridTemplateRows<TLength>>,
  hangingPunctuation?: Property$HangingPunctuation | Array<Property$HangingPunctuation>,
  height?: Property$Height<TLength> | Array<Property$Height<TLength>>,
  hyphenateCharacter?: Property$HyphenateCharacter | Array<Property$HyphenateCharacter>,
  hyphens?: Property$Hyphens | Array<Property$Hyphens>,
  imageOrientation?: Property$ImageOrientation | Array<Property$ImageOrientation>,
  imageRendering?: Property$ImageRendering | Array<Property$ImageRendering>,
  imageResolution?: Property$ImageResolution | Array<Property$ImageResolution>,
  initialLetter?: Property$InitialLetter | Array<Property$InitialLetter>,
  inlineSize?: Property$InlineSize<TLength> | Array<Property$InlineSize<TLength>>,
  inputSecurity?: Property$InputSecurity | Array<Property$InputSecurity>,
  inset?: Property$Inset<TLength> | Array<Property$Inset<TLength>>,
  insetBlock?: Property$InsetBlock<TLength> | Array<Property$InsetBlock<TLength>>,
  insetBlockEnd?: Property$InsetBlockEnd<TLength> | Array<Property$InsetBlockEnd<TLength>>,
  insetBlockStart?: Property$InsetBlockStart<TLength> | Array<Property$InsetBlockStart<TLength>>,
  insetInline?: Property$InsetInline<TLength> | Array<Property$InsetInline<TLength>>,
  insetInlineEnd?: Property$InsetInlineEnd<TLength> | Array<Property$InsetInlineEnd<TLength>>,
  insetInlineStart?: Property$InsetInlineStart<TLength> | Array<Property$InsetInlineStart<TLength>>,
  isolation?: Property$Isolation | Array<Property$Isolation>,
  justifyContent?: Property$JustifyContent | Array<Property$JustifyContent>,
  justifyItems?: Property$JustifyItems | Array<Property$JustifyItems>,
  justifySelf?: Property$JustifySelf | Array<Property$JustifySelf>,
  justifyTracks?: Property$JustifyTracks | Array<Property$JustifyTracks>,
  left?: Property$Left<TLength> | Array<Property$Left<TLength>>,
  letterSpacing?: Property$LetterSpacing<TLength> | Array<Property$LetterSpacing<TLength>>,
  lineBreak?: Property$LineBreak | Array<Property$LineBreak>,
  lineHeight?: Property$LineHeight<TLength> | Array<Property$LineHeight<TLength>>,
  lineHeightStep?: Property$LineHeightStep<TLength> | Array<Property$LineHeightStep<TLength>>,
  listStyleImage?: Property$ListStyleImage | Array<Property$ListStyleImage>,
  listStylePosition?: Property$ListStylePosition | Array<Property$ListStylePosition>,
  listStyleType?: Property$ListStyleType | Array<Property$ListStyleType>,
  marginBlock?: Property$MarginBlock<TLength> | Array<Property$MarginBlock<TLength>>,
  marginBlockEnd?: Property$MarginBlockEnd<TLength> | Array<Property$MarginBlockEnd<TLength>>,
  marginBlockStart?: Property$MarginBlockStart<TLength> | Array<Property$MarginBlockStart<TLength>>,
  marginBottom?: Property$MarginBottom<TLength> | Array<Property$MarginBottom<TLength>>,
  marginInline?: Property$MarginInline<TLength> | Array<Property$MarginInline<TLength>>,
  marginInlineEnd?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
  marginInlineStart?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
  marginLeft?: Property$MarginLeft<TLength> | Array<Property$MarginLeft<TLength>>,
  marginRight?: Property$MarginRight<TLength> | Array<Property$MarginRight<TLength>>,
  marginTop?: Property$MarginTop<TLength> | Array<Property$MarginTop<TLength>>,
  maskBorderMode?: Property$MaskBorderMode | Array<Property$MaskBorderMode>,
  maskBorderOutset?: Property$MaskBorderOutset<TLength> | Array<Property$MaskBorderOutset<TLength>>,
  maskBorderRepeat?: Property$MaskBorderRepeat | Array<Property$MaskBorderRepeat>,
  maskBorderSlice?: Property$MaskBorderSlice | Array<Property$MaskBorderSlice>,
  maskBorderSource?: Property$MaskBorderSource | Array<Property$MaskBorderSource>,
  maskBorderWidth?: Property$MaskBorderWidth<TLength> | Array<Property$MaskBorderWidth<TLength>>,
  maskClip?: Property$MaskClip | Array<Property$MaskClip>,
  maskComposite?: Property$MaskComposite | Array<Property$MaskComposite>,
  maskImage?: Property$MaskImage | Array<Property$MaskImage>,
  maskMode?: Property$MaskMode | Array<Property$MaskMode>,
  maskOrigin?: Property$MaskOrigin | Array<Property$MaskOrigin>,
  maskPosition?: Property$MaskPosition<TLength> | Array<Property$MaskPosition<TLength>>,
  maskRepeat?: Property$MaskRepeat | Array<Property$MaskRepeat>,
  maskSize?: Property$MaskSize<TLength> | Array<Property$MaskSize<TLength>>,
  maskType?: Property$MaskType | Array<Property$MaskType>,
  mathDepth?: Property$MathDepth | Array<Property$MathDepth>,
  mathShift?: Property$MathShift | Array<Property$MathShift>,
  mathStyle?: Property$MathStyle | Array<Property$MathStyle>,
  maxBlockSize?: Property$MaxBlockSize<TLength> | Array<Property$MaxBlockSize<TLength>>,
  maxHeight?: Property$MaxHeight<TLength> | Array<Property$MaxHeight<TLength>>,
  maxInlineSize?: Property$MaxInlineSize<TLength> | Array<Property$MaxInlineSize<TLength>>,
  maxLines?: Property$MaxLines | Array<Property$MaxLines>,
  maxWidth?: Property$MaxWidth<TLength> | Array<Property$MaxWidth<TLength>>,
  minBlockSize?: Property$MinBlockSize<TLength> | Array<Property$MinBlockSize<TLength>>,
  minHeight?: Property$MinHeight<TLength> | Array<Property$MinHeight<TLength>>,
  minInlineSize?: Property$MinInlineSize<TLength> | Array<Property$MinInlineSize<TLength>>,
  minWidth?: Property$MinWidth<TLength> | Array<Property$MinWidth<TLength>>,
  mixBlendMode?: Property$MixBlendMode | Array<Property$MixBlendMode>,
  motionDistance?: Property$OffsetDistance<TLength> | Array<Property$OffsetDistance<TLength>>,
  motionPath?: Property$OffsetPath | Array<Property$OffsetPath>,
  motionRotation?: Property$OffsetRotate | Array<Property$OffsetRotate>,
  objectFit?: Property$ObjectFit | Array<Property$ObjectFit>,
  objectPosition?: Property$ObjectPosition<TLength> | Array<Property$ObjectPosition<TLength>>,
  offsetAnchor?: Property$OffsetAnchor<TLength> | Array<Property$OffsetAnchor<TLength>>,
  offsetDistance?: Property$OffsetDistance<TLength> | Array<Property$OffsetDistance<TLength>>,
  offsetPath?: Property$OffsetPath | Array<Property$OffsetPath>,
  offsetRotate?: Property$OffsetRotate | Array<Property$OffsetRotate>,
  offsetRotation?: Property$OffsetRotate | Array<Property$OffsetRotate>,
  opacity?: Property$Opacity | Array<Property$Opacity>,
  order?: Property$Order | Array<Property$Order>,
  orphans?: Property$Orphans | Array<Property$Orphans>,
  outlineColor?: Property$OutlineColor | Array<Property$OutlineColor>,
  outlineOffset?: Property$OutlineOffset<TLength> | Array<Property$OutlineOffset<TLength>>,
  outlineStyle?: Property$OutlineStyle | Array<Property$OutlineStyle>,
  outlineWidth?: Property$OutlineWidth<TLength> | Array<Property$OutlineWidth<TLength>>,
  overflowAnchor?: Property$OverflowAnchor | Array<Property$OverflowAnchor>,
  overflowBlock?: Property$OverflowBlock | Array<Property$OverflowBlock>,
  overflowClipBox?: Property$OverflowClipBox | Array<Property$OverflowClipBox>,
  overflowClipMargin?: Property$OverflowClipMargin<TLength> | Array<Property$OverflowClipMargin<TLength>>,
  overflowInline?: Property$OverflowInline | Array<Property$OverflowInline>,
  overflowWrap?: Property$OverflowWrap | Array<Property$OverflowWrap>,
  overflowX?: Property$OverflowX | Array<Property$OverflowX>,
  overflowY?: Property$OverflowY | Array<Property$OverflowY>,
  overscrollBehaviorBlock?: Property$OverscrollBehaviorBlock | Array<Property$OverscrollBehaviorBlock>,
  overscrollBehaviorInline?: Property$OverscrollBehaviorInline | Array<Property$OverscrollBehaviorInline>,
  overscrollBehaviorX?: Property$OverscrollBehaviorX | Array<Property$OverscrollBehaviorX>,
  overscrollBehaviorY?: Property$OverscrollBehaviorY | Array<Property$OverscrollBehaviorY>,
  paddingBlock?: Property$PaddingBlock<TLength> | Array<Property$PaddingBlock<TLength>>,
  paddingBlockEnd?: Property$PaddingBlockEnd<TLength> | Array<Property$PaddingBlockEnd<TLength>>,
  paddingBlockStart?: Property$PaddingBlockStart<TLength> | Array<Property$PaddingBlockStart<TLength>>,
  paddingBottom?: Property$PaddingBottom<TLength> | Array<Property$PaddingBottom<TLength>>,
  paddingInline?: Property$PaddingInline<TLength> | Array<Property$PaddingInline<TLength>>,
  paddingInlineEnd?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
  paddingInlineStart?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
  paddingLeft?: Property$PaddingLeft<TLength> | Array<Property$PaddingLeft<TLength>>,
  paddingRight?: Property$PaddingRight<TLength> | Array<Property$PaddingRight<TLength>>,
  paddingTop?: Property$PaddingTop<TLength> | Array<Property$PaddingTop<TLength>>,
  pageBreakAfter?: Property$PageBreakAfter | Array<Property$PageBreakAfter>,
  pageBreakBefore?: Property$PageBreakBefore | Array<Property$PageBreakBefore>,
  pageBreakInside?: Property$PageBreakInside | Array<Property$PageBreakInside>,
  paintOrder?: Property$PaintOrder | Array<Property$PaintOrder>,
  perspective?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
  perspectiveOrigin?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
  placeContent?: Property$PlaceContent | Array<Property$PlaceContent>,
  pointerEvents?: Property$PointerEvents | Array<Property$PointerEvents>,
  position?: Property$Position | Array<Property$Position>,
  printColorAdjust?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
  quotes?: Property$Quotes | Array<Property$Quotes>,
  resize?: Property$Resize | Array<Property$Resize>,
  right?: Property$Right<TLength> | Array<Property$Right<TLength>>,
  rotate?: Property$Rotate | Array<Property$Rotate>,
  rowGap?: Property$RowGap<TLength> | Array<Property$RowGap<TLength>>,
  rubyAlign?: Property$RubyAlign | Array<Property$RubyAlign>,
  rubyMerge?: Property$RubyMerge | Array<Property$RubyMerge>,
  rubyPosition?: Property$RubyPosition | Array<Property$RubyPosition>,
  scale?: Property$Scale | Array<Property$Scale>,
  scrollBehavior?: Property$ScrollBehavior | Array<Property$ScrollBehavior>,
  scrollMargin?: Property$ScrollMargin<TLength> | Array<Property$ScrollMargin<TLength>>,
  scrollMarginBlock?: Property$ScrollMarginBlock<TLength> | Array<Property$ScrollMarginBlock<TLength>>,
  scrollMarginBlockEnd?: Property$ScrollMarginBlockEnd<TLength> | Array<Property$ScrollMarginBlockEnd<TLength>>,
  scrollMarginBlockStart?: Property$ScrollMarginBlockStart<TLength> | Array<Property$ScrollMarginBlockStart<TLength>>,
  scrollMarginBottom?: Property$ScrollMarginBottom<TLength> | Array<Property$ScrollMarginBottom<TLength>>,
  scrollMarginInline?: Property$ScrollMarginInline<TLength> | Array<Property$ScrollMarginInline<TLength>>,
  scrollMarginInlineEnd?: Property$ScrollMarginInlineEnd<TLength> | Array<Property$ScrollMarginInlineEnd<TLength>>,
  scrollMarginInlineStart?: Property$ScrollMarginInlineStart<TLength> | Array<Property$ScrollMarginInlineStart<TLength>>,
  scrollMarginLeft?: Property$ScrollMarginLeft<TLength> | Array<Property$ScrollMarginLeft<TLength>>,
  scrollMarginRight?: Property$ScrollMarginRight<TLength> | Array<Property$ScrollMarginRight<TLength>>,
  scrollMarginTop?: Property$ScrollMarginTop<TLength> | Array<Property$ScrollMarginTop<TLength>>,
  scrollPadding?: Property$ScrollPadding<TLength> | Array<Property$ScrollPadding<TLength>>,
  scrollPaddingBlock?: Property$ScrollPaddingBlock<TLength> | Array<Property$ScrollPaddingBlock<TLength>>,
  scrollPaddingBlockEnd?: Property$ScrollPaddingBlockEnd<TLength> | Array<Property$ScrollPaddingBlockEnd<TLength>>,
  scrollPaddingBlockStart?: Property$ScrollPaddingBlockStart<TLength> | Array<Property$ScrollPaddingBlockStart<TLength>>,
  scrollPaddingBottom?: Property$ScrollPaddingBottom<TLength> | Array<Property$ScrollPaddingBottom<TLength>>,
  scrollPaddingInline?: Property$ScrollPaddingInline<TLength> | Array<Property$ScrollPaddingInline<TLength>>,
  scrollPaddingInlineEnd?: Property$ScrollPaddingInlineEnd<TLength> | Array<Property$ScrollPaddingInlineEnd<TLength>>,
  scrollPaddingInlineStart?: Property$ScrollPaddingInlineStart<TLength> | Array<Property$ScrollPaddingInlineStart<TLength>>,
  scrollPaddingLeft?: Property$ScrollPaddingLeft<TLength> | Array<Property$ScrollPaddingLeft<TLength>>,
  scrollPaddingRight?: Property$ScrollPaddingRight<TLength> | Array<Property$ScrollPaddingRight<TLength>>,
  scrollPaddingTop?: Property$ScrollPaddingTop<TLength> | Array<Property$ScrollPaddingTop<TLength>>,
  scrollSnapAlign?: Property$ScrollSnapAlign | Array<Property$ScrollSnapAlign>,
  scrollSnapMargin?: Property$ScrollMargin<TLength> | Array<Property$ScrollMargin<TLength>>,
  scrollSnapMarginBottom?: Property$ScrollMarginBottom<TLength> | Array<Property$ScrollMarginBottom<TLength>>,
  scrollSnapMarginLeft?: Property$ScrollMarginLeft<TLength> | Array<Property$ScrollMarginLeft<TLength>>,
  scrollSnapMarginRight?: Property$ScrollMarginRight<TLength> | Array<Property$ScrollMarginRight<TLength>>,
  scrollSnapMarginTop?: Property$ScrollMarginTop<TLength> | Array<Property$ScrollMarginTop<TLength>>,
  scrollSnapStop?: Property$ScrollSnapStop | Array<Property$ScrollSnapStop>,
  scrollSnapType?: Property$ScrollSnapType | Array<Property$ScrollSnapType>,
  scrollbarColor?: Property$ScrollbarColor | Array<Property$ScrollbarColor>,
  scrollbarGutter?: Property$ScrollbarGutter | Array<Property$ScrollbarGutter>,
  scrollbarWidth?: Property$ScrollbarWidth | Array<Property$ScrollbarWidth>,
  shapeImageThreshold?: Property$ShapeImageThreshold | Array<Property$ShapeImageThreshold>,
  shapeMargin?: Property$ShapeMargin<TLength> | Array<Property$ShapeMargin<TLength>>,
  shapeOutside?: Property$ShapeOutside | Array<Property$ShapeOutside>,
  tabSize?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
  tableLayout?: Property$TableLayout | Array<Property$TableLayout>,
  textAlign?: Property$TextAlign | Array<Property$TextAlign>,
  textAlignLast?: Property$TextAlignLast | Array<Property$TextAlignLast>,
  textCombineUpright?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
  textDecorationColor?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
  textDecorationLine?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
  textDecorationSkip?: Property$TextDecorationSkip | Array<Property$TextDecorationSkip>,
  textDecorationSkipInk?: Property$TextDecorationSkipInk | Array<Property$TextDecorationSkipInk>,
  textDecorationStyle?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
  textDecorationThickness?: Property$TextDecorationThickness<TLength> | Array<Property$TextDecorationThickness<TLength>>,
  textEmphasisColor?: Property$TextEmphasisColor | Array<Property$TextEmphasisColor>,
  textEmphasisPosition?: Property$TextEmphasisPosition | Array<Property$TextEmphasisPosition>,
  textEmphasisStyle?: Property$TextEmphasisStyle | Array<Property$TextEmphasisStyle>,
  textIndent?: Property$TextIndent<TLength> | Array<Property$TextIndent<TLength>>,
  textJustify?: Property$TextJustify | Array<Property$TextJustify>,
  textOrientation?: Property$TextOrientation | Array<Property$TextOrientation>,
  textOverflow?: Property$TextOverflow | Array<Property$TextOverflow>,
  textRendering?: Property$TextRendering | Array<Property$TextRendering>,
  textShadow?: Property$TextShadow | Array<Property$TextShadow>,
  textSizeAdjust?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
  textTransform?: Property$TextTransform | Array<Property$TextTransform>,
  textUnderlineOffset?: Property$TextUnderlineOffset<TLength> | Array<Property$TextUnderlineOffset<TLength>>,
  textUnderlinePosition?: Property$TextUnderlinePosition | Array<Property$TextUnderlinePosition>,
  top?: Property$Top<TLength> | Array<Property$Top<TLength>>,
  touchAction?: Property$TouchAction | Array<Property$TouchAction>,
  transform?: Property$Transform | Array<Property$Transform>,
  transformBox?: Property$TransformBox | Array<Property$TransformBox>,
  transformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  transformStyle?: Property$TransformStyle | Array<Property$TransformStyle>,
  transitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  transitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  transitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  transitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  translate?: Property$Translate<TLength> | Array<Property$Translate<TLength>>,
  unicodeBidi?: Property$UnicodeBidi | Array<Property$UnicodeBidi>,
  userSelect?: Property$UserSelect | Array<Property$UserSelect>,
  verticalAlign?: Property$VerticalAlign<TLength> | Array<Property$VerticalAlign<TLength>>,
  visibility?: Property$Visibility | Array<Property$Visibility>,
  whiteSpace?: Property$WhiteSpace | Array<Property$WhiteSpace>,
  widows?: Property$Widows | Array<Property$Widows>,
  width?: Property$Width<TLength> | Array<Property$Width<TLength>>,
  willChange?: Property$WillChange | Array<Property$WillChange>,
  wordBreak?: Property$WordBreak | Array<Property$WordBreak>,
  wordSpacing?: Property$WordSpacing<TLength> | Array<Property$WordSpacing<TLength>>,
  wordWrap?: Property$WordWrap | Array<Property$WordWrap>,
  writingMode?: Property$WritingMode | Array<Property$WritingMode>,
  zIndex?: Property$ZIndex | Array<Property$ZIndex>,
  zoom?: Property$Zoom | Array<Property$Zoom>,
|};

export type StandardShorthandPropertiesFallback<TLength = string | 0, TTime = string> = {|
  all?: Property$All | Array<Property$All>,
  animation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
  background?: Property$Background<TLength> | Array<Property$Background<TLength>>,
  backgroundPosition?: Property$BackgroundPosition<TLength> | Array<Property$BackgroundPosition<TLength>>,
  border?: Property$Border<TLength> | Array<Property$Border<TLength>>,
  borderBlock?: Property$BorderBlock<TLength> | Array<Property$BorderBlock<TLength>>,
  borderBlockEnd?: Property$BorderBlockEnd<TLength> | Array<Property$BorderBlockEnd<TLength>>,
  borderBlockStart?: Property$BorderBlockStart<TLength> | Array<Property$BorderBlockStart<TLength>>,
  borderBottom?: Property$BorderBottom<TLength> | Array<Property$BorderBottom<TLength>>,
  borderColor?: Property$BorderColor | Array<Property$BorderColor>,
  borderImage?: Property$BorderImage | Array<Property$BorderImage>,
  borderInline?: Property$BorderInline<TLength> | Array<Property$BorderInline<TLength>>,
  borderInlineEnd?: Property$BorderInlineEnd<TLength> | Array<Property$BorderInlineEnd<TLength>>,
  borderInlineStart?: Property$BorderInlineStart<TLength> | Array<Property$BorderInlineStart<TLength>>,
  borderLeft?: Property$BorderLeft<TLength> | Array<Property$BorderLeft<TLength>>,
  borderRadius?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
  borderRight?: Property$BorderRight<TLength> | Array<Property$BorderRight<TLength>>,
  borderStyle?: Property$BorderStyle | Array<Property$BorderStyle>,
  borderTop?: Property$BorderTop<TLength> | Array<Property$BorderTop<TLength>>,
  borderWidth?: Property$BorderWidth<TLength> | Array<Property$BorderWidth<TLength>>,
  columnRule?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
  columns?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
  flex?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
  flexFlow?: Property$FlexFlow | Array<Property$FlexFlow>,
  font?: Property$Font | Array<Property$Font>,
  gap?: Property$Gap<TLength> | Array<Property$Gap<TLength>>,
  grid?: Property$Grid | Array<Property$Grid>,
  gridArea?: Property$GridArea | Array<Property$GridArea>,
  gridColumn?: Property$GridColumn | Array<Property$GridColumn>,
  gridRow?: Property$GridRow | Array<Property$GridRow>,
  gridTemplate?: Property$GridTemplate | Array<Property$GridTemplate>,
  lineClamp?: Property$LineClamp | Array<Property$LineClamp>,
  listStyle?: Property$ListStyle | Array<Property$ListStyle>,
  margin?: Property$Margin<TLength> | Array<Property$Margin<TLength>>,
  mask?: Property$Mask<TLength> | Array<Property$Mask<TLength>>,
  maskBorder?: Property$MaskBorder | Array<Property$MaskBorder>,
  motion?: Property$Offset<TLength> | Array<Property$Offset<TLength>>,
  offset?: Property$Offset<TLength> | Array<Property$Offset<TLength>>,
  outline?: Property$Outline<TLength> | Array<Property$Outline<TLength>>,
  overflow?: Property$Overflow | Array<Property$Overflow>,
  overscrollBehavior?: Property$OverscrollBehavior | Array<Property$OverscrollBehavior>,
  padding?: Property$Padding<TLength> | Array<Property$Padding<TLength>>,
  placeItems?: Property$PlaceItems | Array<Property$PlaceItems>,
  placeSelf?: Property$PlaceSelf | Array<Property$PlaceSelf>,
  textDecoration?: Property$TextDecoration<TLength> | Array<Property$TextDecoration<TLength>>,
  textEmphasis?: Property$TextEmphasis | Array<Property$TextEmphasis>,
  transition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
|};

export type StandardPropertiesFallback<TLength = string | 0, TTime = string> = {|
  ...StandardLonghandPropertiesFallback<TLength, TTime>,
  ...StandardShorthandPropertiesFallback<TLength, TTime>,
|};

export type VendorLonghandPropertiesFallback<TLength = string | 0, TTime = string> = {|
  MozAnimationDelay?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
  MozAnimationDirection?: Property$AnimationDirection | Array<Property$AnimationDirection>,
  MozAnimationDuration?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
  MozAnimationFillMode?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
  MozAnimationIterationCount?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
  MozAnimationName?: Property$AnimationName | Array<Property$AnimationName>,
  MozAnimationPlayState?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
  MozAnimationTimingFunction?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
  MozAppearance?: Property$MozAppearance | Array<Property$MozAppearance>,
  MozBackfaceVisibility?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
  MozBorderBottomColors?: Property$MozBorderBottomColors | Array<Property$MozBorderBottomColors>,
  MozBorderEndColor?: Property$BorderInlineEndColor | Array<Property$BorderInlineEndColor>,
  MozBorderEndStyle?: Property$BorderInlineEndStyle | Array<Property$BorderInlineEndStyle>,
  MozBorderEndWidth?: Property$BorderInlineEndWidth<TLength> | Array<Property$BorderInlineEndWidth<TLength>>,
  MozBorderLeftColors?: Property$MozBorderLeftColors | Array<Property$MozBorderLeftColors>,
  MozBorderRightColors?: Property$MozBorderRightColors | Array<Property$MozBorderRightColors>,
  MozBorderStartColor?: Property$BorderInlineStartColor | Array<Property$BorderInlineStartColor>,
  MozBorderStartStyle?: Property$BorderInlineStartStyle | Array<Property$BorderInlineStartStyle>,
  MozBorderTopColors?: Property$MozBorderTopColors | Array<Property$MozBorderTopColors>,
  MozBoxSizing?: Property$BoxSizing | Array<Property$BoxSizing>,
  MozColumnCount?: Property$ColumnCount | Array<Property$ColumnCount>,
  MozColumnFill?: Property$ColumnFill | Array<Property$ColumnFill>,
  MozColumnRuleColor?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
  MozColumnRuleStyle?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
  MozColumnRuleWidth?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
  MozColumnWidth?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
  MozContextProperties?: Property$MozContextProperties | Array<Property$MozContextProperties>,
  MozFontFeatureSettings?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
  MozFontLanguageOverride?: Property$FontLanguageOverride | Array<Property$FontLanguageOverride>,
  MozHyphens?: Property$Hyphens | Array<Property$Hyphens>,
  MozImageRegion?: Property$MozImageRegion | Array<Property$MozImageRegion>,
  MozMarginEnd?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
  MozMarginStart?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
  MozOrient?: Property$MozOrient | Array<Property$MozOrient>,
  MozOsxFontSmoothing?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
  MozPaddingEnd?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
  MozPaddingStart?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
  MozPerspective?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
  MozPerspectiveOrigin?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
  MozStackSizing?: Property$MozStackSizing | Array<Property$MozStackSizing>,
  MozTabSize?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
  MozTextBlink?: Property$MozTextBlink | Array<Property$MozTextBlink>,
  MozTextSizeAdjust?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
  MozTransformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  MozTransformStyle?: Property$TransformStyle | Array<Property$TransformStyle>,
  MozTransitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  MozTransitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  MozTransitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  MozTransitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  MozUserFocus?: Property$MozUserFocus | Array<Property$MozUserFocus>,
  MozUserModify?: Property$MozUserModify | Array<Property$MozUserModify>,
  MozUserSelect?: Property$UserSelect | Array<Property$UserSelect>,
  MozWindowDragging?: Property$MozWindowDragging | Array<Property$MozWindowDragging>,
  MozWindowShadow?: Property$MozWindowShadow | Array<Property$MozWindowShadow>,
  msAccelerator?: Property$MsAccelerator | Array<Property$MsAccelerator>,
  msBlockProgression?: Property$MsBlockProgression | Array<Property$MsBlockProgression>,
  msContentZoomChaining?: Property$MsContentZoomChaining | Array<Property$MsContentZoomChaining>,
  msContentZoomLimitMax?: Property$MsContentZoomLimitMax | Array<Property$MsContentZoomLimitMax>,
  msContentZoomLimitMin?: Property$MsContentZoomLimitMin | Array<Property$MsContentZoomLimitMin>,
  msContentZoomSnapPoints?: Property$MsContentZoomSnapPoints | Array<Property$MsContentZoomSnapPoints>,
  msContentZoomSnapType?: Property$MsContentZoomSnapType | Array<Property$MsContentZoomSnapType>,
  msContentZooming?: Property$MsContentZooming | Array<Property$MsContentZooming>,
  msFilter?: Property$MsFilter | Array<Property$MsFilter>,
  msFlexDirection?: Property$FlexDirection | Array<Property$FlexDirection>,
  msFlexPositive?: Property$FlexGrow | Array<Property$FlexGrow>,
  msFlowFrom?: Property$MsFlowFrom | Array<Property$MsFlowFrom>,
  msFlowInto?: Property$MsFlowInto | Array<Property$MsFlowInto>,
  msGridColumns?: Property$MsGridColumns<TLength> | Array<Property$MsGridColumns<TLength>>,
  msGridRows?: Property$MsGridRows<TLength> | Array<Property$MsGridRows<TLength>>,
  msHighContrastAdjust?: Property$MsHighContrastAdjust | Array<Property$MsHighContrastAdjust>,
  msHyphenateLimitChars?: Property$MsHyphenateLimitChars | Array<Property$MsHyphenateLimitChars>,
  msHyphenateLimitLines?: Property$MsHyphenateLimitLines | Array<Property$MsHyphenateLimitLines>,
  msHyphenateLimitZone?: Property$MsHyphenateLimitZone<TLength> | Array<Property$MsHyphenateLimitZone<TLength>>,
  msHyphens?: Property$Hyphens | Array<Property$Hyphens>,
  msImeAlign?: Property$MsImeAlign | Array<Property$MsImeAlign>,
  msLineBreak?: Property$LineBreak | Array<Property$LineBreak>,
  msOrder?: Property$Order | Array<Property$Order>,
  msOverflowStyle?: Property$MsOverflowStyle | Array<Property$MsOverflowStyle>,
  msOverflowX?: Property$OverflowX | Array<Property$OverflowX>,
  msOverflowY?: Property$OverflowY | Array<Property$OverflowY>,
  msScrollChaining?: Property$MsScrollChaining | Array<Property$MsScrollChaining>,
  msScrollLimitXMax?: Property$MsScrollLimitXMax<TLength> | Array<Property$MsScrollLimitXMax<TLength>>,
  msScrollLimitXMin?: Property$MsScrollLimitXMin<TLength> | Array<Property$MsScrollLimitXMin<TLength>>,
  msScrollLimitYMax?: Property$MsScrollLimitYMax<TLength> | Array<Property$MsScrollLimitYMax<TLength>>,
  msScrollLimitYMin?: Property$MsScrollLimitYMin<TLength> | Array<Property$MsScrollLimitYMin<TLength>>,
  msScrollRails?: Property$MsScrollRails | Array<Property$MsScrollRails>,
  msScrollSnapPointsX?: Property$MsScrollSnapPointsX | Array<Property$MsScrollSnapPointsX>,
  msScrollSnapPointsY?: Property$MsScrollSnapPointsY | Array<Property$MsScrollSnapPointsY>,
  msScrollSnapType?: Property$MsScrollSnapType | Array<Property$MsScrollSnapType>,
  msScrollTranslation?: Property$MsScrollTranslation | Array<Property$MsScrollTranslation>,
  msScrollbar3dlightColor?: Property$MsScrollbar3dlightColor | Array<Property$MsScrollbar3dlightColor>,
  msScrollbarArrowColor?: Property$MsScrollbarArrowColor | Array<Property$MsScrollbarArrowColor>,
  msScrollbarBaseColor?: Property$MsScrollbarBaseColor | Array<Property$MsScrollbarBaseColor>,
  msScrollbarDarkshadowColor?: Property$MsScrollbarDarkshadowColor | Array<Property$MsScrollbarDarkshadowColor>,
  msScrollbarFaceColor?: Property$MsScrollbarFaceColor | Array<Property$MsScrollbarFaceColor>,
  msScrollbarHighlightColor?: Property$MsScrollbarHighlightColor | Array<Property$MsScrollbarHighlightColor>,
  msScrollbarShadowColor?: Property$MsScrollbarShadowColor | Array<Property$MsScrollbarShadowColor>,
  msScrollbarTrackColor?: Property$MsScrollbarTrackColor | Array<Property$MsScrollbarTrackColor>,
  msTextAutospace?: Property$MsTextAutospace | Array<Property$MsTextAutospace>,
  msTextCombineHorizontal?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
  msTextOverflow?: Property$TextOverflow | Array<Property$TextOverflow>,
  msTouchAction?: Property$TouchAction | Array<Property$TouchAction>,
  msTouchSelect?: Property$MsTouchSelect | Array<Property$MsTouchSelect>,
  msTransform?: Property$Transform | Array<Property$Transform>,
  msTransformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  msTransitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  msTransitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  msTransitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  msTransitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  msUserSelect?: Property$MsUserSelect | Array<Property$MsUserSelect>,
  msWordBreak?: Property$WordBreak | Array<Property$WordBreak>,
  msWrapFlow?: Property$MsWrapFlow | Array<Property$MsWrapFlow>,
  msWrapMargin?: Property$MsWrapMargin<TLength> | Array<Property$MsWrapMargin<TLength>>,
  msWrapThrough?: Property$MsWrapThrough | Array<Property$MsWrapThrough>,
  msWritingMode?: Property$WritingMode | Array<Property$WritingMode>,
  WebkitAlignContent?: Property$AlignContent | Array<Property$AlignContent>,
  WebkitAlignItems?: Property$AlignItems | Array<Property$AlignItems>,
  WebkitAlignSelf?: Property$AlignSelf | Array<Property$AlignSelf>,
  WebkitAnimationDelay?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
  WebkitAnimationDirection?: Property$AnimationDirection | Array<Property$AnimationDirection>,
  WebkitAnimationDuration?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
  WebkitAnimationFillMode?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
  WebkitAnimationIterationCount?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
  WebkitAnimationName?: Property$AnimationName | Array<Property$AnimationName>,
  WebkitAnimationPlayState?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
  WebkitAnimationTimingFunction?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
  WebkitAppearance?: Property$WebkitAppearance | Array<Property$WebkitAppearance>,
  WebkitBackdropFilter?: Property$BackdropFilter | Array<Property$BackdropFilter>,
  WebkitBackfaceVisibility?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
  WebkitBackgroundClip?: Property$BackgroundClip | Array<Property$BackgroundClip>,
  WebkitBackgroundOrigin?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
  WebkitBackgroundSize?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
  WebkitBorderBeforeColor?: Property$WebkitBorderBeforeColor | Array<Property$WebkitBorderBeforeColor>,
  WebkitBorderBeforeStyle?: Property$WebkitBorderBeforeStyle | Array<Property$WebkitBorderBeforeStyle>,
  WebkitBorderBeforeWidth?: Property$WebkitBorderBeforeWidth<TLength> | Array<Property$WebkitBorderBeforeWidth<TLength>>,
  WebkitBorderBottomLeftRadius?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
  WebkitBorderBottomRightRadius?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
  WebkitBorderImageSlice?: Property$BorderImageSlice | Array<Property$BorderImageSlice>,
  WebkitBorderTopLeftRadius?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
  WebkitBorderTopRightRadius?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
  WebkitBoxDecorationBreak?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
  WebkitBoxReflect?: Property$WebkitBoxReflect<TLength> | Array<Property$WebkitBoxReflect<TLength>>,
  WebkitBoxShadow?: Property$BoxShadow | Array<Property$BoxShadow>,
  WebkitBoxSizing?: Property$BoxSizing | Array<Property$BoxSizing>,
  WebkitClipPath?: Property$ClipPath | Array<Property$ClipPath>,
  WebkitColumnCount?: Property$ColumnCount | Array<Property$ColumnCount>,
  WebkitColumnFill?: Property$ColumnFill | Array<Property$ColumnFill>,
  WebkitColumnRuleColor?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
  WebkitColumnRuleStyle?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
  WebkitColumnRuleWidth?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
  WebkitColumnSpan?: Property$ColumnSpan | Array<Property$ColumnSpan>,
  WebkitColumnWidth?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
  WebkitFilter?: Property$Filter | Array<Property$Filter>,
  WebkitFlexBasis?: Property$FlexBasis<TLength> | Array<Property$FlexBasis<TLength>>,
  WebkitFlexDirection?: Property$FlexDirection | Array<Property$FlexDirection>,
  WebkitFlexGrow?: Property$FlexGrow | Array<Property$FlexGrow>,
  WebkitFlexShrink?: Property$FlexShrink | Array<Property$FlexShrink>,
  WebkitFlexWrap?: Property$FlexWrap | Array<Property$FlexWrap>,
  WebkitFontFeatureSettings?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
  WebkitFontKerning?: Property$FontKerning | Array<Property$FontKerning>,
  WebkitFontSmoothing?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
  WebkitFontVariantLigatures?: Property$FontVariantLigatures | Array<Property$FontVariantLigatures>,
  WebkitHyphenateCharacter?: Property$HyphenateCharacter | Array<Property$HyphenateCharacter>,
  WebkitHyphens?: Property$Hyphens | Array<Property$Hyphens>,
  WebkitInitialLetter?: Property$InitialLetter | Array<Property$InitialLetter>,
  WebkitJustifyContent?: Property$JustifyContent | Array<Property$JustifyContent>,
  WebkitLineBreak?: Property$LineBreak | Array<Property$LineBreak>,
  WebkitLineClamp?: Property$WebkitLineClamp | Array<Property$WebkitLineClamp>,
  WebkitMarginEnd?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
  WebkitMarginStart?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
  WebkitMaskAttachment?: Property$WebkitMaskAttachment | Array<Property$WebkitMaskAttachment>,
  WebkitMaskBoxImageOutset?: Property$MaskBorderOutset<TLength> | Array<Property$MaskBorderOutset<TLength>>,
  WebkitMaskBoxImageRepeat?: Property$MaskBorderRepeat | Array<Property$MaskBorderRepeat>,
  WebkitMaskBoxImageSlice?: Property$MaskBorderSlice | Array<Property$MaskBorderSlice>,
  WebkitMaskBoxImageSource?: Property$MaskBorderSource | Array<Property$MaskBorderSource>,
  WebkitMaskBoxImageWidth?: Property$MaskBorderWidth<TLength> | Array<Property$MaskBorderWidth<TLength>>,
  WebkitMaskClip?: Property$WebkitMaskClip | Array<Property$WebkitMaskClip>,
  WebkitMaskComposite?: Property$WebkitMaskComposite | Array<Property$WebkitMaskComposite>,
  WebkitMaskImage?: Property$WebkitMaskImage | Array<Property$WebkitMaskImage>,
  WebkitMaskOrigin?: Property$WebkitMaskOrigin | Array<Property$WebkitMaskOrigin>,
  WebkitMaskPosition?: Property$WebkitMaskPosition<TLength> | Array<Property$WebkitMaskPosition<TLength>>,
  WebkitMaskPositionX?: Property$WebkitMaskPositionX<TLength> | Array<Property$WebkitMaskPositionX<TLength>>,
  WebkitMaskPositionY?: Property$WebkitMaskPositionY<TLength> | Array<Property$WebkitMaskPositionY<TLength>>,
  WebkitMaskRepeat?: Property$WebkitMaskRepeat | Array<Property$WebkitMaskRepeat>,
  WebkitMaskRepeatX?: Property$WebkitMaskRepeatX | Array<Property$WebkitMaskRepeatX>,
  WebkitMaskRepeatY?: Property$WebkitMaskRepeatY | Array<Property$WebkitMaskRepeatY>,
  WebkitMaskSize?: Property$WebkitMaskSize<TLength> | Array<Property$WebkitMaskSize<TLength>>,
  WebkitMaxInlineSize?: Property$MaxInlineSize<TLength> | Array<Property$MaxInlineSize<TLength>>,
  WebkitOrder?: Property$Order | Array<Property$Order>,
  WebkitOverflowScrolling?: Property$WebkitOverflowScrolling | Array<Property$WebkitOverflowScrolling>,
  WebkitPaddingEnd?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
  WebkitPaddingStart?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
  WebkitPerspective?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
  WebkitPerspectiveOrigin?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
  WebkitPrintColorAdjust?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
  WebkitRubyPosition?: Property$RubyPosition | Array<Property$RubyPosition>,
  WebkitScrollSnapType?: Property$ScrollSnapType | Array<Property$ScrollSnapType>,
  WebkitShapeMargin?: Property$ShapeMargin<TLength> | Array<Property$ShapeMargin<TLength>>,
  WebkitTapHighlightColor?: Property$WebkitTapHighlightColor | Array<Property$WebkitTapHighlightColor>,
  WebkitTextCombine?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
  WebkitTextDecorationColor?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
  WebkitTextDecorationLine?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
  WebkitTextDecorationSkip?: Property$TextDecorationSkip | Array<Property$TextDecorationSkip>,
  WebkitTextDecorationStyle?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
  WebkitTextEmphasisColor?: Property$TextEmphasisColor | Array<Property$TextEmphasisColor>,
  WebkitTextEmphasisPosition?: Property$TextEmphasisPosition | Array<Property$TextEmphasisPosition>,
  WebkitTextEmphasisStyle?: Property$TextEmphasisStyle | Array<Property$TextEmphasisStyle>,
  WebkitTextFillColor?: Property$WebkitTextFillColor | Array<Property$WebkitTextFillColor>,
  WebkitTextOrientation?: Property$TextOrientation | Array<Property$TextOrientation>,
  WebkitTextSizeAdjust?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
  WebkitTextStrokeColor?: Property$WebkitTextStrokeColor | Array<Property$WebkitTextStrokeColor>,
  WebkitTextStrokeWidth?: Property$WebkitTextStrokeWidth<TLength> | Array<Property$WebkitTextStrokeWidth<TLength>>,
  WebkitTextUnderlinePosition?: Property$TextUnderlinePosition | Array<Property$TextUnderlinePosition>,
  WebkitTouchCallout?: Property$WebkitTouchCallout | Array<Property$WebkitTouchCallout>,
  WebkitTransform?: Property$Transform | Array<Property$Transform>,
  WebkitTransformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  WebkitTransformStyle?: Property$TransformStyle | Array<Property$TransformStyle>,
  WebkitTransitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  WebkitTransitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  WebkitTransitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  WebkitTransitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  WebkitUserModify?: Property$WebkitUserModify | Array<Property$WebkitUserModify>,
  WebkitUserSelect?: Property$UserSelect | Array<Property$UserSelect>,
  WebkitWritingMode?: Property$WritingMode | Array<Property$WritingMode>,
|};

export type VendorShorthandPropertiesFallback<TLength = string | 0, TTime = string> = {|
  MozAnimation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
  MozBorderImage?: Property$BorderImage | Array<Property$BorderImage>,
  MozColumnRule?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
  MozColumns?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
  MozTransition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
  msContentZoomLimit?: Property$MsContentZoomLimit | Array<Property$MsContentZoomLimit>,
  msContentZoomSnap?: Property$MsContentZoomSnap | Array<Property$MsContentZoomSnap>,
  msFlex?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
  msScrollLimit?: Property$MsScrollLimit | Array<Property$MsScrollLimit>,
  msScrollSnapX?: Property$MsScrollSnapX | Array<Property$MsScrollSnapX>,
  msScrollSnapY?: Property$MsScrollSnapY | Array<Property$MsScrollSnapY>,
  msTransition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
  WebkitAnimation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
  WebkitBorderBefore?: Property$WebkitBorderBefore<TLength> | Array<Property$WebkitBorderBefore<TLength>>,
  WebkitBorderImage?: Property$BorderImage | Array<Property$BorderImage>,
  WebkitBorderRadius?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
  WebkitColumnRule?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
  WebkitColumns?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
  WebkitFlex?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
  WebkitFlexFlow?: Property$FlexFlow | Array<Property$FlexFlow>,
  WebkitMask?: Property$WebkitMask<TLength> | Array<Property$WebkitMask<TLength>>,
  WebkitMaskBoxImage?: Property$MaskBorder | Array<Property$MaskBorder>,
  WebkitTextEmphasis?: Property$TextEmphasis | Array<Property$TextEmphasis>,
  WebkitTextStroke?: Property$WebkitTextStroke<TLength> | Array<Property$WebkitTextStroke<TLength>>,
  WebkitTransition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
|};

export type VendorPropertiesFallback<TLength = string | 0, TTime = string> = {|
  ...VendorLonghandPropertiesFallback<TLength, TTime>,
  ...VendorShorthandPropertiesFallback<TLength, TTime>,
|};

export type ObsoletePropertiesFallback<TLength = string | 0, TTime = string> = {|
  azimuth?: Property$Azimuth | Array<Property$Azimuth>,
  boxAlign?: Property$BoxAlign | Array<Property$BoxAlign>,
  boxDirection?: Property$BoxDirection | Array<Property$BoxDirection>,
  boxFlex?: Property$BoxFlex | Array<Property$BoxFlex>,
  boxFlexGroup?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
  boxLines?: Property$BoxLines | Array<Property$BoxLines>,
  boxOrdinalGroup?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
  boxOrient?: Property$BoxOrient | Array<Property$BoxOrient>,
  boxPack?: Property$BoxPack | Array<Property$BoxPack>,
  clip?: Property$Clip | Array<Property$Clip>,
  gridColumnGap?: Property$GridColumnGap<TLength> | Array<Property$GridColumnGap<TLength>>,
  gridGap?: Property$GridGap<TLength> | Array<Property$GridGap<TLength>>,
  gridRowGap?: Property$GridRowGap<TLength> | Array<Property$GridRowGap<TLength>>,
  imeMode?: Property$ImeMode | Array<Property$ImeMode>,
  offsetBlock?: Property$InsetBlock<TLength> | Array<Property$InsetBlock<TLength>>,
  offsetBlockEnd?: Property$InsetBlockEnd<TLength> | Array<Property$InsetBlockEnd<TLength>>,
  offsetBlockStart?: Property$InsetBlockStart<TLength> | Array<Property$InsetBlockStart<TLength>>,
  offsetInline?: Property$InsetInline<TLength> | Array<Property$InsetInline<TLength>>,
  offsetInlineEnd?: Property$InsetInlineEnd<TLength> | Array<Property$InsetInlineEnd<TLength>>,
  offsetInlineStart?: Property$InsetInlineStart<TLength> | Array<Property$InsetInlineStart<TLength>>,
  scrollSnapCoordinate?: Property$ScrollSnapCoordinate<TLength> | Array<Property$ScrollSnapCoordinate<TLength>>,
  scrollSnapDestination?: Property$ScrollSnapDestination<TLength> | Array<Property$ScrollSnapDestination<TLength>>,
  scrollSnapPointsX?: Property$ScrollSnapPointsX | Array<Property$ScrollSnapPointsX>,
  scrollSnapPointsY?: Property$ScrollSnapPointsY | Array<Property$ScrollSnapPointsY>,
  scrollSnapTypeX?: Property$ScrollSnapTypeX | Array<Property$ScrollSnapTypeX>,
  scrollSnapTypeY?: Property$ScrollSnapTypeY | Array<Property$ScrollSnapTypeY>,
  KhtmlBoxAlign?: Property$BoxAlign | Array<Property$BoxAlign>,
  KhtmlBoxDirection?: Property$BoxDirection | Array<Property$BoxDirection>,
  KhtmlBoxFlex?: Property$BoxFlex | Array<Property$BoxFlex>,
  KhtmlBoxFlexGroup?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
  KhtmlBoxLines?: Property$BoxLines | Array<Property$BoxLines>,
  KhtmlBoxOrdinalGroup?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
  KhtmlBoxOrient?: Property$BoxOrient | Array<Property$BoxOrient>,
  KhtmlBoxPack?: Property$BoxPack | Array<Property$BoxPack>,
  KhtmlLineBreak?: Property$LineBreak | Array<Property$LineBreak>,
  KhtmlOpacity?: Property$Opacity | Array<Property$Opacity>,
  KhtmlUserSelect?: Property$UserSelect | Array<Property$UserSelect>,
  MozBackgroundClip?: Property$BackgroundClip | Array<Property$BackgroundClip>,
  MozBackgroundInlinePolicy?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
  MozBackgroundOrigin?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
  MozBackgroundSize?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
  MozBinding?: Property$MozBinding | Array<Property$MozBinding>,
  MozBorderRadius?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
  MozBorderRadiusBottomleft?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
  MozBorderRadiusBottomright?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
  MozBorderRadiusTopleft?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
  MozBorderRadiusTopright?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
  MozBoxAlign?: Property$BoxAlign | Array<Property$BoxAlign>,
  MozBoxDirection?: Property$BoxDirection | Array<Property$BoxDirection>,
  MozBoxFlex?: Property$BoxFlex | Array<Property$BoxFlex>,
  MozBoxOrdinalGroup?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
  MozBoxOrient?: Property$BoxOrient | Array<Property$BoxOrient>,
  MozBoxPack?: Property$BoxPack | Array<Property$BoxPack>,
  MozBoxShadow?: Property$BoxShadow | Array<Property$BoxShadow>,
  MozFloatEdge?: Property$MozFloatEdge | Array<Property$MozFloatEdge>,
  MozForceBrokenImageIcon?: Property$MozForceBrokenImageIcon | Array<Property$MozForceBrokenImageIcon>,
  MozOpacity?: Property$Opacity | Array<Property$Opacity>,
  MozOutline?: Property$Outline<TLength> | Array<Property$Outline<TLength>>,
  MozOutlineColor?: Property$OutlineColor | Array<Property$OutlineColor>,
  MozOutlineRadius?: Property$MozOutlineRadius<TLength> | Array<Property$MozOutlineRadius<TLength>>,
  MozOutlineRadiusBottomleft?: Property$MozOutlineRadiusBottomleft<TLength> | Array<Property$MozOutlineRadiusBottomleft<TLength>>,
  MozOutlineRadiusBottomright?: Property$MozOutlineRadiusBottomright<TLength> | Array<Property$MozOutlineRadiusBottomright<TLength>>,
  MozOutlineRadiusTopleft?: Property$MozOutlineRadiusTopleft<TLength> | Array<Property$MozOutlineRadiusTopleft<TLength>>,
  MozOutlineRadiusTopright?: Property$MozOutlineRadiusTopright<TLength> | Array<Property$MozOutlineRadiusTopright<TLength>>,
  MozOutlineStyle?: Property$OutlineStyle | Array<Property$OutlineStyle>,
  MozOutlineWidth?: Property$OutlineWidth<TLength> | Array<Property$OutlineWidth<TLength>>,
  MozTextAlignLast?: Property$TextAlignLast | Array<Property$TextAlignLast>,
  MozTextDecorationColor?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
  MozTextDecorationLine?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
  MozTextDecorationStyle?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
  MozUserInput?: Property$MozUserInput | Array<Property$MozUserInput>,
  msImeMode?: Property$ImeMode | Array<Property$ImeMode>,
  OAnimation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
  OAnimationDelay?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
  OAnimationDirection?: Property$AnimationDirection | Array<Property$AnimationDirection>,
  OAnimationDuration?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
  OAnimationFillMode?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
  OAnimationIterationCount?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
  OAnimationName?: Property$AnimationName | Array<Property$AnimationName>,
  OAnimationPlayState?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
  OAnimationTimingFunction?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
  OBackgroundSize?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
  OBorderImage?: Property$BorderImage | Array<Property$BorderImage>,
  OObjectFit?: Property$ObjectFit | Array<Property$ObjectFit>,
  OObjectPosition?: Property$ObjectPosition<TLength> | Array<Property$ObjectPosition<TLength>>,
  OTabSize?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
  OTextOverflow?: Property$TextOverflow | Array<Property$TextOverflow>,
  OTransform?: Property$Transform | Array<Property$Transform>,
  OTransformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  OTransition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
  OTransitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  OTransitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  OTransitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  OTransitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  WebkitBoxAlign?: Property$BoxAlign | Array<Property$BoxAlign>,
  WebkitBoxDirection?: Property$BoxDirection | Array<Property$BoxDirection>,
  WebkitBoxFlex?: Property$BoxFlex | Array<Property$BoxFlex>,
  WebkitBoxFlexGroup?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
  WebkitBoxLines?: Property$BoxLines | Array<Property$BoxLines>,
  WebkitBoxOrdinalGroup?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
  WebkitBoxOrient?: Property$BoxOrient | Array<Property$BoxOrient>,
  WebkitBoxPack?: Property$BoxPack | Array<Property$BoxPack>,
  WebkitScrollSnapPointsX?: Property$ScrollSnapPointsX | Array<Property$ScrollSnapPointsX>,
  WebkitScrollSnapPointsY?: Property$ScrollSnapPointsY | Array<Property$ScrollSnapPointsY>,
|};

export type SvgPropertiesFallback<TLength = string | 0, TTime = string> = {|
  alignmentBaseline?: Property$AlignmentBaseline | Array<Property$AlignmentBaseline>,
  baselineShift?: Property$BaselineShift<TLength> | Array<Property$BaselineShift<TLength>>,
  clip?: Property$Clip | Array<Property$Clip>,
  clipPath?: Property$ClipPath | Array<Property$ClipPath>,
  clipRule?: Property$ClipRule | Array<Property$ClipRule>,
  color?: Property$Color | Array<Property$Color>,
  colorInterpolation?: Property$ColorInterpolation | Array<Property$ColorInterpolation>,
  colorRendering?: Property$ColorRendering | Array<Property$ColorRendering>,
  cursor?: Property$Cursor | Array<Property$Cursor>,
  direction?: Property$Direction | Array<Property$Direction>,
  display?: Property$Display | Array<Property$Display>,
  dominantBaseline?: Property$DominantBaseline | Array<Property$DominantBaseline>,
  fill?: Property$Fill | Array<Property$Fill>,
  fillOpacity?: Property$FillOpacity | Array<Property$FillOpacity>,
  fillRule?: Property$FillRule | Array<Property$FillRule>,
  filter?: Property$Filter | Array<Property$Filter>,
  floodColor?: Property$FloodColor | Array<Property$FloodColor>,
  floodOpacity?: Property$FloodOpacity | Array<Property$FloodOpacity>,
  font?: Property$Font | Array<Property$Font>,
  fontFamily?: Property$FontFamily | Array<Property$FontFamily>,
  fontSize?: Property$FontSize<TLength> | Array<Property$FontSize<TLength>>,
  fontSizeAdjust?: Property$FontSizeAdjust | Array<Property$FontSizeAdjust>,
  fontStretch?: Property$FontStretch | Array<Property$FontStretch>,
  fontStyle?: Property$FontStyle | Array<Property$FontStyle>,
  fontVariant?: Property$FontVariant | Array<Property$FontVariant>,
  fontWeight?: Property$FontWeight | Array<Property$FontWeight>,
  glyphOrientationVertical?: Property$GlyphOrientationVertical | Array<Property$GlyphOrientationVertical>,
  imageRendering?: Property$ImageRendering | Array<Property$ImageRendering>,
  letterSpacing?: Property$LetterSpacing<TLength> | Array<Property$LetterSpacing<TLength>>,
  lightingColor?: Property$LightingColor | Array<Property$LightingColor>,
  lineHeight?: Property$LineHeight<TLength> | Array<Property$LineHeight<TLength>>,
  marker?: Property$Marker | Array<Property$Marker>,
  markerEnd?: Property$MarkerEnd | Array<Property$MarkerEnd>,
  markerMid?: Property$MarkerMid | Array<Property$MarkerMid>,
  markerStart?: Property$MarkerStart | Array<Property$MarkerStart>,
  mask?: Property$Mask<TLength> | Array<Property$Mask<TLength>>,
  opacity?: Property$Opacity | Array<Property$Opacity>,
  overflow?: Property$Overflow | Array<Property$Overflow>,
  paintOrder?: Property$PaintOrder | Array<Property$PaintOrder>,
  pointerEvents?: Property$PointerEvents | Array<Property$PointerEvents>,
  shapeRendering?: Property$ShapeRendering | Array<Property$ShapeRendering>,
  stopColor?: Property$StopColor | Array<Property$StopColor>,
  stopOpacity?: Property$StopOpacity | Array<Property$StopOpacity>,
  stroke?: Property$Stroke | Array<Property$Stroke>,
  strokeDasharray?: Property$StrokeDasharray<TLength> | Array<Property$StrokeDasharray<TLength>>,
  strokeDashoffset?: Property$StrokeDashoffset<TLength> | Array<Property$StrokeDashoffset<TLength>>,
  strokeLinecap?: Property$StrokeLinecap | Array<Property$StrokeLinecap>,
  strokeLinejoin?: Property$StrokeLinejoin | Array<Property$StrokeLinejoin>,
  strokeMiterlimit?: Property$StrokeMiterlimit | Array<Property$StrokeMiterlimit>,
  strokeOpacity?: Property$StrokeOpacity | Array<Property$StrokeOpacity>,
  strokeWidth?: Property$StrokeWidth<TLength> | Array<Property$StrokeWidth<TLength>>,
  textAnchor?: Property$TextAnchor | Array<Property$TextAnchor>,
  textDecoration?: Property$TextDecoration<TLength> | Array<Property$TextDecoration<TLength>>,
  textRendering?: Property$TextRendering | Array<Property$TextRendering>,
  unicodeBidi?: Property$UnicodeBidi | Array<Property$UnicodeBidi>,
  vectorEffect?: Property$VectorEffect | Array<Property$VectorEffect>,
  visibility?: Property$Visibility | Array<Property$Visibility>,
  whiteSpace?: Property$WhiteSpace | Array<Property$WhiteSpace>,
  wordSpacing?: Property$WordSpacing<TLength> | Array<Property$WordSpacing<TLength>>,
  writingMode?: Property$WritingMode | Array<Property$WritingMode>,
|};

export type PropertiesFallback<TLength = string | 0, TTime = string> = {|
  ...StandardPropertiesFallback<TLength, TTime>,
  ...VendorPropertiesFallback<TLength, TTime>,
  ...ObsoletePropertiesFallback<TLength, TTime>,
  ...SvgPropertiesFallback<TLength, TTime>,
|};

export type StandardLonghandPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
  "accent-color"?: Property$AccentColor | Array<Property$AccentColor>,
  "align-content"?: Property$AlignContent | Array<Property$AlignContent>,
  "align-items"?: Property$AlignItems | Array<Property$AlignItems>,
  "align-self"?: Property$AlignSelf | Array<Property$AlignSelf>,
  "align-tracks"?: Property$AlignTracks | Array<Property$AlignTracks>,
  "animation-composition"?: Property$AnimationComposition | Array<Property$AnimationComposition>,
  "animation-delay"?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
  "animation-direction"?: Property$AnimationDirection | Array<Property$AnimationDirection>,
  "animation-duration"?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
  "animation-fill-mode"?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
  "animation-iteration-count"?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
  "animation-name"?: Property$AnimationName | Array<Property$AnimationName>,
  "animation-play-state"?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
  "animation-timeline"?: Property$AnimationTimeline | Array<Property$AnimationTimeline>,
  "animation-timing-function"?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
  appearance?: Property$Appearance | Array<Property$Appearance>,
  "aspect-ratio"?: Property$AspectRatio | Array<Property$AspectRatio>,
  "backdrop-filter"?: Property$BackdropFilter | Array<Property$BackdropFilter>,
  "backface-visibility"?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
  "background-attachment"?: Property$BackgroundAttachment | Array<Property$BackgroundAttachment>,
  "background-blend-mode"?: Property$BackgroundBlendMode | Array<Property$BackgroundBlendMode>,
  "background-clip"?: Property$BackgroundClip | Array<Property$BackgroundClip>,
  "background-color"?: Property$BackgroundColor | Array<Property$BackgroundColor>,
  "background-image"?: Property$BackgroundImage | Array<Property$BackgroundImage>,
  "background-origin"?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
  "background-position-x"?: Property$BackgroundPositionX<TLength> | Array<Property$BackgroundPositionX<TLength>>,
  "background-position-y"?: Property$BackgroundPositionY<TLength> | Array<Property$BackgroundPositionY<TLength>>,
  "background-repeat"?: Property$BackgroundRepeat | Array<Property$BackgroundRepeat>,
  "background-size"?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
  "block-overflow"?: Property$BlockOverflow | Array<Property$BlockOverflow>,
  "block-size"?: Property$BlockSize<TLength> | Array<Property$BlockSize<TLength>>,
  "border-block-color"?: Property$BorderBlockColor | Array<Property$BorderBlockColor>,
  "border-block-end-color"?: Property$BorderBlockEndColor | Array<Property$BorderBlockEndColor>,
  "border-block-end-style"?: Property$BorderBlockEndStyle | Array<Property$BorderBlockEndStyle>,
  "border-block-end-width"?: Property$BorderBlockEndWidth<TLength> | Array<Property$BorderBlockEndWidth<TLength>>,
  "border-block-start-color"?: Property$BorderBlockStartColor | Array<Property$BorderBlockStartColor>,
  "border-block-start-style"?: Property$BorderBlockStartStyle | Array<Property$BorderBlockStartStyle>,
  "border-block-start-width"?: Property$BorderBlockStartWidth<TLength> | Array<Property$BorderBlockStartWidth<TLength>>,
  "border-block-style"?: Property$BorderBlockStyle | Array<Property$BorderBlockStyle>,
  "border-block-width"?: Property$BorderBlockWidth<TLength> | Array<Property$BorderBlockWidth<TLength>>,
  "border-bottom-color"?: Property$BorderBottomColor | Array<Property$BorderBottomColor>,
  "border-bottom-left-radius"?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
  "border-bottom-right-radius"?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
  "border-bottom-style"?: Property$BorderBottomStyle | Array<Property$BorderBottomStyle>,
  "border-bottom-width"?: Property$BorderBottomWidth<TLength> | Array<Property$BorderBottomWidth<TLength>>,
  "border-collapse"?: Property$BorderCollapse | Array<Property$BorderCollapse>,
  "border-end-end-radius"?: Property$BorderEndEndRadius<TLength> | Array<Property$BorderEndEndRadius<TLength>>,
  "border-end-start-radius"?: Property$BorderEndStartRadius<TLength> | Array<Property$BorderEndStartRadius<TLength>>,
  "border-image-outset"?: Property$BorderImageOutset<TLength> | Array<Property$BorderImageOutset<TLength>>,
  "border-image-repeat"?: Property$BorderImageRepeat | Array<Property$BorderImageRepeat>,
  "border-image-slice"?: Property$BorderImageSlice | Array<Property$BorderImageSlice>,
  "border-image-source"?: Property$BorderImageSource | Array<Property$BorderImageSource>,
  "border-image-width"?: Property$BorderImageWidth<TLength> | Array<Property$BorderImageWidth<TLength>>,
  "border-inline-color"?: Property$BorderInlineColor | Array<Property$BorderInlineColor>,
  "border-inline-end-color"?: Property$BorderInlineEndColor | Array<Property$BorderInlineEndColor>,
  "border-inline-end-style"?: Property$BorderInlineEndStyle | Array<Property$BorderInlineEndStyle>,
  "border-inline-end-width"?: Property$BorderInlineEndWidth<TLength> | Array<Property$BorderInlineEndWidth<TLength>>,
  "border-inline-start-color"?: Property$BorderInlineStartColor | Array<Property$BorderInlineStartColor>,
  "border-inline-start-style"?: Property$BorderInlineStartStyle | Array<Property$BorderInlineStartStyle>,
  "border-inline-start-width"?: Property$BorderInlineStartWidth<TLength> | Array<Property$BorderInlineStartWidth<TLength>>,
  "border-inline-style"?: Property$BorderInlineStyle | Array<Property$BorderInlineStyle>,
  "border-inline-width"?: Property$BorderInlineWidth<TLength> | Array<Property$BorderInlineWidth<TLength>>,
  "border-left-color"?: Property$BorderLeftColor | Array<Property$BorderLeftColor>,
  "border-left-style"?: Property$BorderLeftStyle | Array<Property$BorderLeftStyle>,
  "border-left-width"?: Property$BorderLeftWidth<TLength> | Array<Property$BorderLeftWidth<TLength>>,
  "border-right-color"?: Property$BorderRightColor | Array<Property$BorderRightColor>,
  "border-right-style"?: Property$BorderRightStyle | Array<Property$BorderRightStyle>,
  "border-right-width"?: Property$BorderRightWidth<TLength> | Array<Property$BorderRightWidth<TLength>>,
  "border-spacing"?: Property$BorderSpacing<TLength> | Array<Property$BorderSpacing<TLength>>,
  "border-start-end-radius"?: Property$BorderStartEndRadius<TLength> | Array<Property$BorderStartEndRadius<TLength>>,
  "border-start-start-radius"?: Property$BorderStartStartRadius<TLength> | Array<Property$BorderStartStartRadius<TLength>>,
  "border-top-color"?: Property$BorderTopColor | Array<Property$BorderTopColor>,
  "border-top-left-radius"?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
  "border-top-right-radius"?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
  "border-top-style"?: Property$BorderTopStyle | Array<Property$BorderTopStyle>,
  "border-top-width"?: Property$BorderTopWidth<TLength> | Array<Property$BorderTopWidth<TLength>>,
  bottom?: Property$Bottom<TLength> | Array<Property$Bottom<TLength>>,
  "box-decoration-break"?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
  "box-shadow"?: Property$BoxShadow | Array<Property$BoxShadow>,
  "box-sizing"?: Property$BoxSizing | Array<Property$BoxSizing>,
  "break-after"?: Property$BreakAfter | Array<Property$BreakAfter>,
  "break-before"?: Property$BreakBefore | Array<Property$BreakBefore>,
  "break-inside"?: Property$BreakInside | Array<Property$BreakInside>,
  "caption-side"?: Property$CaptionSide | Array<Property$CaptionSide>,
  "caret-color"?: Property$CaretColor | Array<Property$CaretColor>,
  clear?: Property$Clear | Array<Property$Clear>,
  "clip-path"?: Property$ClipPath | Array<Property$ClipPath>,
  color?: Property$Color | Array<Property$Color>,
  "color-adjust"?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
  "color-scheme"?: Property$ColorScheme | Array<Property$ColorScheme>,
  "column-count"?: Property$ColumnCount | Array<Property$ColumnCount>,
  "column-fill"?: Property$ColumnFill | Array<Property$ColumnFill>,
  "column-gap"?: Property$ColumnGap<TLength> | Array<Property$ColumnGap<TLength>>,
  "column-rule-color"?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
  "column-rule-style"?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
  "column-rule-width"?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
  "column-span"?: Property$ColumnSpan | Array<Property$ColumnSpan>,
  "column-width"?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
  contain?: Property$Contain | Array<Property$Contain>,
  content?: Property$Content | Array<Property$Content>,
  "content-visibility"?: Property$ContentVisibility | Array<Property$ContentVisibility>,
  "counter-increment"?: Property$CounterIncrement | Array<Property$CounterIncrement>,
  "counter-reset"?: Property$CounterReset | Array<Property$CounterReset>,
  "counter-set"?: Property$CounterSet | Array<Property$CounterSet>,
  cursor?: Property$Cursor | Array<Property$Cursor>,
  direction?: Property$Direction | Array<Property$Direction>,
  display?: Property$Display | Array<Property$Display>,
  "empty-cells"?: Property$EmptyCells | Array<Property$EmptyCells>,
  filter?: Property$Filter | Array<Property$Filter>,
  "flex-basis"?: Property$FlexBasis<TLength> | Array<Property$FlexBasis<TLength>>,
  "flex-direction"?: Property$FlexDirection | Array<Property$FlexDirection>,
  "flex-grow"?: Property$FlexGrow | Array<Property$FlexGrow>,
  "flex-shrink"?: Property$FlexShrink | Array<Property$FlexShrink>,
  "flex-wrap"?: Property$FlexWrap | Array<Property$FlexWrap>,
  float?: Property$Float | Array<Property$Float>,
  "font-family"?: Property$FontFamily | Array<Property$FontFamily>,
  "font-feature-settings"?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
  "font-kerning"?: Property$FontKerning | Array<Property$FontKerning>,
  "font-language-override"?: Property$FontLanguageOverride | Array<Property$FontLanguageOverride>,
  "font-optical-sizing"?: Property$FontOpticalSizing | Array<Property$FontOpticalSizing>,
  "font-size"?: Property$FontSize<TLength> | Array<Property$FontSize<TLength>>,
  "font-size-adjust"?: Property$FontSizeAdjust | Array<Property$FontSizeAdjust>,
  "font-smooth"?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
  "font-stretch"?: Property$FontStretch | Array<Property$FontStretch>,
  "font-style"?: Property$FontStyle | Array<Property$FontStyle>,
  "font-synthesis"?: Property$FontSynthesis | Array<Property$FontSynthesis>,
  "font-variant"?: Property$FontVariant | Array<Property$FontVariant>,
  "font-variant-alternates"?: Property$FontVariantAlternates | Array<Property$FontVariantAlternates>,
  "font-variant-caps"?: Property$FontVariantCaps | Array<Property$FontVariantCaps>,
  "font-variant-east-asian"?: Property$FontVariantEastAsian | Array<Property$FontVariantEastAsian>,
  "font-variant-ligatures"?: Property$FontVariantLigatures | Array<Property$FontVariantLigatures>,
  "font-variant-numeric"?: Property$FontVariantNumeric | Array<Property$FontVariantNumeric>,
  "font-variant-position"?: Property$FontVariantPosition | Array<Property$FontVariantPosition>,
  "font-variation-settings"?: Property$FontVariationSettings | Array<Property$FontVariationSettings>,
  "font-weight"?: Property$FontWeight | Array<Property$FontWeight>,
  "forced-color-adjust"?: Property$ForcedColorAdjust | Array<Property$ForcedColorAdjust>,
  "grid-auto-columns"?: Property$GridAutoColumns<TLength> | Array<Property$GridAutoColumns<TLength>>,
  "grid-auto-flow"?: Property$GridAutoFlow | Array<Property$GridAutoFlow>,
  "grid-auto-rows"?: Property$GridAutoRows<TLength> | Array<Property$GridAutoRows<TLength>>,
  "grid-column-end"?: Property$GridColumnEnd | Array<Property$GridColumnEnd>,
  "grid-column-start"?: Property$GridColumnStart | Array<Property$GridColumnStart>,
  "grid-row-end"?: Property$GridRowEnd | Array<Property$GridRowEnd>,
  "grid-row-start"?: Property$GridRowStart | Array<Property$GridRowStart>,
  "grid-template-areas"?: Property$GridTemplateAreas | Array<Property$GridTemplateAreas>,
  "grid-template-columns"?: Property$GridTemplateColumns<TLength> | Array<Property$GridTemplateColumns<TLength>>,
  "grid-template-rows"?: Property$GridTemplateRows<TLength> | Array<Property$GridTemplateRows<TLength>>,
  "hanging-punctuation"?: Property$HangingPunctuation | Array<Property$HangingPunctuation>,
  height?: Property$Height<TLength> | Array<Property$Height<TLength>>,
  "hyphenate-character"?: Property$HyphenateCharacter | Array<Property$HyphenateCharacter>,
  hyphens?: Property$Hyphens | Array<Property$Hyphens>,
  "image-orientation"?: Property$ImageOrientation | Array<Property$ImageOrientation>,
  "image-rendering"?: Property$ImageRendering | Array<Property$ImageRendering>,
  "image-resolution"?: Property$ImageResolution | Array<Property$ImageResolution>,
  "initial-letter"?: Property$InitialLetter | Array<Property$InitialLetter>,
  "inline-size"?: Property$InlineSize<TLength> | Array<Property$InlineSize<TLength>>,
  "input-security"?: Property$InputSecurity | Array<Property$InputSecurity>,
  inset?: Property$Inset<TLength> | Array<Property$Inset<TLength>>,
  "inset-block"?: Property$InsetBlock<TLength> | Array<Property$InsetBlock<TLength>>,
  "inset-block-end"?: Property$InsetBlockEnd<TLength> | Array<Property$InsetBlockEnd<TLength>>,
  "inset-block-start"?: Property$InsetBlockStart<TLength> | Array<Property$InsetBlockStart<TLength>>,
  "inset-inline"?: Property$InsetInline<TLength> | Array<Property$InsetInline<TLength>>,
  "inset-inline-end"?: Property$InsetInlineEnd<TLength> | Array<Property$InsetInlineEnd<TLength>>,
  "inset-inline-start"?: Property$InsetInlineStart<TLength> | Array<Property$InsetInlineStart<TLength>>,
  isolation?: Property$Isolation | Array<Property$Isolation>,
  "justify-content"?: Property$JustifyContent | Array<Property$JustifyContent>,
  "justify-items"?: Property$JustifyItems | Array<Property$JustifyItems>,
  "justify-self"?: Property$JustifySelf | Array<Property$JustifySelf>,
  "justify-tracks"?: Property$JustifyTracks | Array<Property$JustifyTracks>,
  left?: Property$Left<TLength> | Array<Property$Left<TLength>>,
  "letter-spacing"?: Property$LetterSpacing<TLength> | Array<Property$LetterSpacing<TLength>>,
  "line-break"?: Property$LineBreak | Array<Property$LineBreak>,
  "line-height"?: Property$LineHeight<TLength> | Array<Property$LineHeight<TLength>>,
  "line-height-step"?: Property$LineHeightStep<TLength> | Array<Property$LineHeightStep<TLength>>,
  "list-style-image"?: Property$ListStyleImage | Array<Property$ListStyleImage>,
  "list-style-position"?: Property$ListStylePosition | Array<Property$ListStylePosition>,
  "list-style-type"?: Property$ListStyleType | Array<Property$ListStyleType>,
  "margin-block"?: Property$MarginBlock<TLength> | Array<Property$MarginBlock<TLength>>,
  "margin-block-end"?: Property$MarginBlockEnd<TLength> | Array<Property$MarginBlockEnd<TLength>>,
  "margin-block-start"?: Property$MarginBlockStart<TLength> | Array<Property$MarginBlockStart<TLength>>,
  "margin-bottom"?: Property$MarginBottom<TLength> | Array<Property$MarginBottom<TLength>>,
  "margin-inline"?: Property$MarginInline<TLength> | Array<Property$MarginInline<TLength>>,
  "margin-inline-end"?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
  "margin-inline-start"?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
  "margin-left"?: Property$MarginLeft<TLength> | Array<Property$MarginLeft<TLength>>,
  "margin-right"?: Property$MarginRight<TLength> | Array<Property$MarginRight<TLength>>,
  "margin-top"?: Property$MarginTop<TLength> | Array<Property$MarginTop<TLength>>,
  "mask-border-mode"?: Property$MaskBorderMode | Array<Property$MaskBorderMode>,
  "mask-border-outset"?: Property$MaskBorderOutset<TLength> | Array<Property$MaskBorderOutset<TLength>>,
  "mask-border-repeat"?: Property$MaskBorderRepeat | Array<Property$MaskBorderRepeat>,
  "mask-border-slice"?: Property$MaskBorderSlice | Array<Property$MaskBorderSlice>,
  "mask-border-source"?: Property$MaskBorderSource | Array<Property$MaskBorderSource>,
  "mask-border-width"?: Property$MaskBorderWidth<TLength> | Array<Property$MaskBorderWidth<TLength>>,
  "mask-clip"?: Property$MaskClip | Array<Property$MaskClip>,
  "mask-composite"?: Property$MaskComposite | Array<Property$MaskComposite>,
  "mask-image"?: Property$MaskImage | Array<Property$MaskImage>,
  "mask-mode"?: Property$MaskMode | Array<Property$MaskMode>,
  "mask-origin"?: Property$MaskOrigin | Array<Property$MaskOrigin>,
  "mask-position"?: Property$MaskPosition<TLength> | Array<Property$MaskPosition<TLength>>,
  "mask-repeat"?: Property$MaskRepeat | Array<Property$MaskRepeat>,
  "mask-size"?: Property$MaskSize<TLength> | Array<Property$MaskSize<TLength>>,
  "mask-type"?: Property$MaskType | Array<Property$MaskType>,
  "math-depth"?: Property$MathDepth | Array<Property$MathDepth>,
  "math-shift"?: Property$MathShift | Array<Property$MathShift>,
  "math-style"?: Property$MathStyle | Array<Property$MathStyle>,
  "max-block-size"?: Property$MaxBlockSize<TLength> | Array<Property$MaxBlockSize<TLength>>,
  "max-height"?: Property$MaxHeight<TLength> | Array<Property$MaxHeight<TLength>>,
  "max-inline-size"?: Property$MaxInlineSize<TLength> | Array<Property$MaxInlineSize<TLength>>,
  "max-lines"?: Property$MaxLines | Array<Property$MaxLines>,
  "max-width"?: Property$MaxWidth<TLength> | Array<Property$MaxWidth<TLength>>,
  "min-block-size"?: Property$MinBlockSize<TLength> | Array<Property$MinBlockSize<TLength>>,
  "min-height"?: Property$MinHeight<TLength> | Array<Property$MinHeight<TLength>>,
  "min-inline-size"?: Property$MinInlineSize<TLength> | Array<Property$MinInlineSize<TLength>>,
  "min-width"?: Property$MinWidth<TLength> | Array<Property$MinWidth<TLength>>,
  "mix-blend-mode"?: Property$MixBlendMode | Array<Property$MixBlendMode>,
  "motion-distance"?: Property$OffsetDistance<TLength> | Array<Property$OffsetDistance<TLength>>,
  "motion-path"?: Property$OffsetPath | Array<Property$OffsetPath>,
  "motion-rotation"?: Property$OffsetRotate | Array<Property$OffsetRotate>,
  "object-fit"?: Property$ObjectFit | Array<Property$ObjectFit>,
  "object-position"?: Property$ObjectPosition<TLength> | Array<Property$ObjectPosition<TLength>>,
  "offset-anchor"?: Property$OffsetAnchor<TLength> | Array<Property$OffsetAnchor<TLength>>,
  "offset-distance"?: Property$OffsetDistance<TLength> | Array<Property$OffsetDistance<TLength>>,
  "offset-path"?: Property$OffsetPath | Array<Property$OffsetPath>,
  "offset-rotate"?: Property$OffsetRotate | Array<Property$OffsetRotate>,
  "offset-rotation"?: Property$OffsetRotate | Array<Property$OffsetRotate>,
  opacity?: Property$Opacity | Array<Property$Opacity>,
  order?: Property$Order | Array<Property$Order>,
  orphans?: Property$Orphans | Array<Property$Orphans>,
  "outline-color"?: Property$OutlineColor | Array<Property$OutlineColor>,
  "outline-offset"?: Property$OutlineOffset<TLength> | Array<Property$OutlineOffset<TLength>>,
  "outline-style"?: Property$OutlineStyle | Array<Property$OutlineStyle>,
  "outline-width"?: Property$OutlineWidth<TLength> | Array<Property$OutlineWidth<TLength>>,
  "overflow-anchor"?: Property$OverflowAnchor | Array<Property$OverflowAnchor>,
  "overflow-block"?: Property$OverflowBlock | Array<Property$OverflowBlock>,
  "overflow-clip-box"?: Property$OverflowClipBox | Array<Property$OverflowClipBox>,
  "overflow-clip-margin"?: Property$OverflowClipMargin<TLength> | Array<Property$OverflowClipMargin<TLength>>,
  "overflow-inline"?: Property$OverflowInline | Array<Property$OverflowInline>,
  "overflow-wrap"?: Property$OverflowWrap | Array<Property$OverflowWrap>,
  "overflow-x"?: Property$OverflowX | Array<Property$OverflowX>,
  "overflow-y"?: Property$OverflowY | Array<Property$OverflowY>,
  "overscroll-behavior-block"?: Property$OverscrollBehaviorBlock | Array<Property$OverscrollBehaviorBlock>,
  "overscroll-behavior-inline"?: Property$OverscrollBehaviorInline | Array<Property$OverscrollBehaviorInline>,
  "overscroll-behavior-x"?: Property$OverscrollBehaviorX | Array<Property$OverscrollBehaviorX>,
  "overscroll-behavior-y"?: Property$OverscrollBehaviorY | Array<Property$OverscrollBehaviorY>,
  "padding-block"?: Property$PaddingBlock<TLength> | Array<Property$PaddingBlock<TLength>>,
  "padding-block-end"?: Property$PaddingBlockEnd<TLength> | Array<Property$PaddingBlockEnd<TLength>>,
  "padding-block-start"?: Property$PaddingBlockStart<TLength> | Array<Property$PaddingBlockStart<TLength>>,
  "padding-bottom"?: Property$PaddingBottom<TLength> | Array<Property$PaddingBottom<TLength>>,
  "padding-inline"?: Property$PaddingInline<TLength> | Array<Property$PaddingInline<TLength>>,
  "padding-inline-end"?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
  "padding-inline-start"?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
  "padding-left"?: Property$PaddingLeft<TLength> | Array<Property$PaddingLeft<TLength>>,
  "padding-right"?: Property$PaddingRight<TLength> | Array<Property$PaddingRight<TLength>>,
  "padding-top"?: Property$PaddingTop<TLength> | Array<Property$PaddingTop<TLength>>,
  "page-break-after"?: Property$PageBreakAfter | Array<Property$PageBreakAfter>,
  "page-break-before"?: Property$PageBreakBefore | Array<Property$PageBreakBefore>,
  "page-break-inside"?: Property$PageBreakInside | Array<Property$PageBreakInside>,
  "paint-order"?: Property$PaintOrder | Array<Property$PaintOrder>,
  perspective?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
  "perspective-origin"?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
  "place-content"?: Property$PlaceContent | Array<Property$PlaceContent>,
  "pointer-events"?: Property$PointerEvents | Array<Property$PointerEvents>,
  position?: Property$Position | Array<Property$Position>,
  "print-color-adjust"?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
  quotes?: Property$Quotes | Array<Property$Quotes>,
  resize?: Property$Resize | Array<Property$Resize>,
  right?: Property$Right<TLength> | Array<Property$Right<TLength>>,
  rotate?: Property$Rotate | Array<Property$Rotate>,
  "row-gap"?: Property$RowGap<TLength> | Array<Property$RowGap<TLength>>,
  "ruby-align"?: Property$RubyAlign | Array<Property$RubyAlign>,
  "ruby-merge"?: Property$RubyMerge | Array<Property$RubyMerge>,
  "ruby-position"?: Property$RubyPosition | Array<Property$RubyPosition>,
  scale?: Property$Scale | Array<Property$Scale>,
  "scroll-behavior"?: Property$ScrollBehavior | Array<Property$ScrollBehavior>,
  "scroll-margin"?: Property$ScrollMargin<TLength> | Array<Property$ScrollMargin<TLength>>,
  "scroll-margin-block"?: Property$ScrollMarginBlock<TLength> | Array<Property$ScrollMarginBlock<TLength>>,
  "scroll-margin-block-end"?: Property$ScrollMarginBlockEnd<TLength> | Array<Property$ScrollMarginBlockEnd<TLength>>,
  "scroll-margin-block-start"?: Property$ScrollMarginBlockStart<TLength> | Array<Property$ScrollMarginBlockStart<TLength>>,
  "scroll-margin-bottom"?: Property$ScrollMarginBottom<TLength> | Array<Property$ScrollMarginBottom<TLength>>,
  "scroll-margin-inline"?: Property$ScrollMarginInline<TLength> | Array<Property$ScrollMarginInline<TLength>>,
  "scroll-margin-inline-end"?: Property$ScrollMarginInlineEnd<TLength> | Array<Property$ScrollMarginInlineEnd<TLength>>,
  "scroll-margin-inline-start"?: Property$ScrollMarginInlineStart<TLength> | Array<Property$ScrollMarginInlineStart<TLength>>,
  "scroll-margin-left"?: Property$ScrollMarginLeft<TLength> | Array<Property$ScrollMarginLeft<TLength>>,
  "scroll-margin-right"?: Property$ScrollMarginRight<TLength> | Array<Property$ScrollMarginRight<TLength>>,
  "scroll-margin-top"?: Property$ScrollMarginTop<TLength> | Array<Property$ScrollMarginTop<TLength>>,
  "scroll-padding"?: Property$ScrollPadding<TLength> | Array<Property$ScrollPadding<TLength>>,
  "scroll-padding-block"?: Property$ScrollPaddingBlock<TLength> | Array<Property$ScrollPaddingBlock<TLength>>,
  "scroll-padding-block-end"?: Property$ScrollPaddingBlockEnd<TLength> | Array<Property$ScrollPaddingBlockEnd<TLength>>,
  "scroll-padding-block-start"?: Property$ScrollPaddingBlockStart<TLength> | Array<Property$ScrollPaddingBlockStart<TLength>>,
  "scroll-padding-bottom"?: Property$ScrollPaddingBottom<TLength> | Array<Property$ScrollPaddingBottom<TLength>>,
  "scroll-padding-inline"?: Property$ScrollPaddingInline<TLength> | Array<Property$ScrollPaddingInline<TLength>>,
  "scroll-padding-inline-end"?: Property$ScrollPaddingInlineEnd<TLength> | Array<Property$ScrollPaddingInlineEnd<TLength>>,
  "scroll-padding-inline-start"?: Property$ScrollPaddingInlineStart<TLength> | Array<Property$ScrollPaddingInlineStart<TLength>>,
  "scroll-padding-left"?: Property$ScrollPaddingLeft<TLength> | Array<Property$ScrollPaddingLeft<TLength>>,
  "scroll-padding-right"?: Property$ScrollPaddingRight<TLength> | Array<Property$ScrollPaddingRight<TLength>>,
  "scroll-padding-top"?: Property$ScrollPaddingTop<TLength> | Array<Property$ScrollPaddingTop<TLength>>,
  "scroll-snap-align"?: Property$ScrollSnapAlign | Array<Property$ScrollSnapAlign>,
  "scroll-snap-margin"?: Property$ScrollMargin<TLength> | Array<Property$ScrollMargin<TLength>>,
  "scroll-snap-margin-bottom"?: Property$ScrollMarginBottom<TLength> | Array<Property$ScrollMarginBottom<TLength>>,
  "scroll-snap-margin-left"?: Property$ScrollMarginLeft<TLength> | Array<Property$ScrollMarginLeft<TLength>>,
  "scroll-snap-margin-right"?: Property$ScrollMarginRight<TLength> | Array<Property$ScrollMarginRight<TLength>>,
  "scroll-snap-margin-top"?: Property$ScrollMarginTop<TLength> | Array<Property$ScrollMarginTop<TLength>>,
  "scroll-snap-stop"?: Property$ScrollSnapStop | Array<Property$ScrollSnapStop>,
  "scroll-snap-type"?: Property$ScrollSnapType | Array<Property$ScrollSnapType>,
  "scrollbar-color"?: Property$ScrollbarColor | Array<Property$ScrollbarColor>,
  "scrollbar-gutter"?: Property$ScrollbarGutter | Array<Property$ScrollbarGutter>,
  "scrollbar-width"?: Property$ScrollbarWidth | Array<Property$ScrollbarWidth>,
  "shape-image-threshold"?: Property$ShapeImageThreshold | Array<Property$ShapeImageThreshold>,
  "shape-margin"?: Property$ShapeMargin<TLength> | Array<Property$ShapeMargin<TLength>>,
  "shape-outside"?: Property$ShapeOutside | Array<Property$ShapeOutside>,
  "tab-size"?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
  "table-layout"?: Property$TableLayout | Array<Property$TableLayout>,
  "text-align"?: Property$TextAlign | Array<Property$TextAlign>,
  "text-align-last"?: Property$TextAlignLast | Array<Property$TextAlignLast>,
  "text-combine-upright"?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
  "text-decoration-color"?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
  "text-decoration-line"?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
  "text-decoration-skip"?: Property$TextDecorationSkip | Array<Property$TextDecorationSkip>,
  "text-decoration-skip-ink"?: Property$TextDecorationSkipInk | Array<Property$TextDecorationSkipInk>,
  "text-decoration-style"?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
  "text-decoration-thickness"?: Property$TextDecorationThickness<TLength> | Array<Property$TextDecorationThickness<TLength>>,
  "text-emphasis-color"?: Property$TextEmphasisColor | Array<Property$TextEmphasisColor>,
  "text-emphasis-position"?: Property$TextEmphasisPosition | Array<Property$TextEmphasisPosition>,
  "text-emphasis-style"?: Property$TextEmphasisStyle | Array<Property$TextEmphasisStyle>,
  "text-indent"?: Property$TextIndent<TLength> | Array<Property$TextIndent<TLength>>,
  "text-justify"?: Property$TextJustify | Array<Property$TextJustify>,
  "text-orientation"?: Property$TextOrientation | Array<Property$TextOrientation>,
  "text-overflow"?: Property$TextOverflow | Array<Property$TextOverflow>,
  "text-rendering"?: Property$TextRendering | Array<Property$TextRendering>,
  "text-shadow"?: Property$TextShadow | Array<Property$TextShadow>,
  "text-size-adjust"?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
  "text-transform"?: Property$TextTransform | Array<Property$TextTransform>,
  "text-underline-offset"?: Property$TextUnderlineOffset<TLength> | Array<Property$TextUnderlineOffset<TLength>>,
  "text-underline-position"?: Property$TextUnderlinePosition | Array<Property$TextUnderlinePosition>,
  top?: Property$Top<TLength> | Array<Property$Top<TLength>>,
  "touch-action"?: Property$TouchAction | Array<Property$TouchAction>,
  transform?: Property$Transform | Array<Property$Transform>,
  "transform-box"?: Property$TransformBox | Array<Property$TransformBox>,
  "transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  "transform-style"?: Property$TransformStyle | Array<Property$TransformStyle>,
  "transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  "transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  "transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  "transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  translate?: Property$Translate<TLength> | Array<Property$Translate<TLength>>,
  "unicode-bidi"?: Property$UnicodeBidi | Array<Property$UnicodeBidi>,
  "user-select"?: Property$UserSelect | Array<Property$UserSelect>,
  "vertical-align"?: Property$VerticalAlign<TLength> | Array<Property$VerticalAlign<TLength>>,
  visibility?: Property$Visibility | Array<Property$Visibility>,
  "white-space"?: Property$WhiteSpace | Array<Property$WhiteSpace>,
  widows?: Property$Widows | Array<Property$Widows>,
  width?: Property$Width<TLength> | Array<Property$Width<TLength>>,
  "will-change"?: Property$WillChange | Array<Property$WillChange>,
  "word-break"?: Property$WordBreak | Array<Property$WordBreak>,
  "word-spacing"?: Property$WordSpacing<TLength> | Array<Property$WordSpacing<TLength>>,
  "word-wrap"?: Property$WordWrap | Array<Property$WordWrap>,
  "writing-mode"?: Property$WritingMode | Array<Property$WritingMode>,
  "z-index"?: Property$ZIndex | Array<Property$ZIndex>,
  zoom?: Property$Zoom | Array<Property$Zoom>,
|};

export type StandardShorthandPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
  all?: Property$All | Array<Property$All>,
  animation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
  background?: Property$Background<TLength> | Array<Property$Background<TLength>>,
  "background-position"?: Property$BackgroundPosition<TLength> | Array<Property$BackgroundPosition<TLength>>,
  border?: Property$Border<TLength> | Array<Property$Border<TLength>>,
  "border-block"?: Property$BorderBlock<TLength> | Array<Property$BorderBlock<TLength>>,
  "border-block-end"?: Property$BorderBlockEnd<TLength> | Array<Property$BorderBlockEnd<TLength>>,
  "border-block-start"?: Property$BorderBlockStart<TLength> | Array<Property$BorderBlockStart<TLength>>,
  "border-bottom"?: Property$BorderBottom<TLength> | Array<Property$BorderBottom<TLength>>,
  "border-color"?: Property$BorderColor | Array<Property$BorderColor>,
  "border-image"?: Property$BorderImage | Array<Property$BorderImage>,
  "border-inline"?: Property$BorderInline<TLength> | Array<Property$BorderInline<TLength>>,
  "border-inline-end"?: Property$BorderInlineEnd<TLength> | Array<Property$BorderInlineEnd<TLength>>,
  "border-inline-start"?: Property$BorderInlineStart<TLength> | Array<Property$BorderInlineStart<TLength>>,
  "border-left"?: Property$BorderLeft<TLength> | Array<Property$BorderLeft<TLength>>,
  "border-radius"?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
  "border-right"?: Property$BorderRight<TLength> | Array<Property$BorderRight<TLength>>,
  "border-style"?: Property$BorderStyle | Array<Property$BorderStyle>,
  "border-top"?: Property$BorderTop<TLength> | Array<Property$BorderTop<TLength>>,
  "border-width"?: Property$BorderWidth<TLength> | Array<Property$BorderWidth<TLength>>,
  "column-rule"?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
  columns?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
  flex?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
  "flex-flow"?: Property$FlexFlow | Array<Property$FlexFlow>,
  font?: Property$Font | Array<Property$Font>,
  gap?: Property$Gap<TLength> | Array<Property$Gap<TLength>>,
  grid?: Property$Grid | Array<Property$Grid>,
  "grid-area"?: Property$GridArea | Array<Property$GridArea>,
  "grid-column"?: Property$GridColumn | Array<Property$GridColumn>,
  "grid-row"?: Property$GridRow | Array<Property$GridRow>,
  "grid-template"?: Property$GridTemplate | Array<Property$GridTemplate>,
  "line-clamp"?: Property$LineClamp | Array<Property$LineClamp>,
  "list-style"?: Property$ListStyle | Array<Property$ListStyle>,
  margin?: Property$Margin<TLength> | Array<Property$Margin<TLength>>,
  mask?: Property$Mask<TLength> | Array<Property$Mask<TLength>>,
  "mask-border"?: Property$MaskBorder | Array<Property$MaskBorder>,
  motion?: Property$Offset<TLength> | Array<Property$Offset<TLength>>,
  offset?: Property$Offset<TLength> | Array<Property$Offset<TLength>>,
  outline?: Property$Outline<TLength> | Array<Property$Outline<TLength>>,
  overflow?: Property$Overflow | Array<Property$Overflow>,
  "overscroll-behavior"?: Property$OverscrollBehavior | Array<Property$OverscrollBehavior>,
  padding?: Property$Padding<TLength> | Array<Property$Padding<TLength>>,
  "place-items"?: Property$PlaceItems | Array<Property$PlaceItems>,
  "place-self"?: Property$PlaceSelf | Array<Property$PlaceSelf>,
  "text-decoration"?: Property$TextDecoration<TLength> | Array<Property$TextDecoration<TLength>>,
  "text-emphasis"?: Property$TextEmphasis | Array<Property$TextEmphasis>,
  transition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
|};

export type StandardPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
  ...StandardLonghandPropertiesHyphenFallback<TLength, TTime>,
  ...StandardShorthandPropertiesHyphenFallback<TLength, TTime>,
|};

export type VendorLonghandPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
  "-moz-animation-delay"?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
  "-moz-animation-direction"?: Property$AnimationDirection | Array<Property$AnimationDirection>,
  "-moz-animation-duration"?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
  "-moz-animation-fill-mode"?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
  "-moz-animation-iteration-count"?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
  "-moz-animation-name"?: Property$AnimationName | Array<Property$AnimationName>,
  "-moz-animation-play-state"?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
  "-moz-animation-timing-function"?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
  "-moz-appearance"?: Property$MozAppearance | Array<Property$MozAppearance>,
  "-moz-backface-visibility"?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
  "-moz-border-bottom-colors"?: Property$MozBorderBottomColors | Array<Property$MozBorderBottomColors>,
  "-moz-border-end-color"?: Property$BorderInlineEndColor | Array<Property$BorderInlineEndColor>,
  "-moz-border-end-style"?: Property$BorderInlineEndStyle | Array<Property$BorderInlineEndStyle>,
  "-moz-border-end-width"?: Property$BorderInlineEndWidth<TLength> | Array<Property$BorderInlineEndWidth<TLength>>,
  "-moz-border-left-colors"?: Property$MozBorderLeftColors | Array<Property$MozBorderLeftColors>,
  "-moz-border-right-colors"?: Property$MozBorderRightColors | Array<Property$MozBorderRightColors>,
  "-moz-border-start-color"?: Property$BorderInlineStartColor | Array<Property$BorderInlineStartColor>,
  "-moz-border-start-style"?: Property$BorderInlineStartStyle | Array<Property$BorderInlineStartStyle>,
  "-moz-border-top-colors"?: Property$MozBorderTopColors | Array<Property$MozBorderTopColors>,
  "-moz-box-sizing"?: Property$BoxSizing | Array<Property$BoxSizing>,
  "-moz-column-count"?: Property$ColumnCount | Array<Property$ColumnCount>,
  "-moz-column-fill"?: Property$ColumnFill | Array<Property$ColumnFill>,
  "-moz-column-rule-color"?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
  "-moz-column-rule-style"?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
  "-moz-column-rule-width"?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
  "-moz-column-width"?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
  "-moz-context-properties"?: Property$MozContextProperties | Array<Property$MozContextProperties>,
  "-moz-font-feature-settings"?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
  "-moz-font-language-override"?: Property$FontLanguageOverride | Array<Property$FontLanguageOverride>,
  "-moz-hyphens"?: Property$Hyphens | Array<Property$Hyphens>,
  "-moz-image-region"?: Property$MozImageRegion | Array<Property$MozImageRegion>,
  "-moz-margin-end"?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
  "-moz-margin-start"?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
  "-moz-orient"?: Property$MozOrient | Array<Property$MozOrient>,
  "-moz-osx-font-smoothing"?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
  "-moz-padding-end"?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
  "-moz-padding-start"?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
  "-moz-perspective"?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
  "-moz-perspective-origin"?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
  "-moz-stack-sizing"?: Property$MozStackSizing | Array<Property$MozStackSizing>,
  "-moz-tab-size"?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
  "-moz-text-blink"?: Property$MozTextBlink | Array<Property$MozTextBlink>,
  "-moz-text-size-adjust"?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
  "-moz-transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  "-moz-transform-style"?: Property$TransformStyle | Array<Property$TransformStyle>,
  "-moz-transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  "-moz-transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  "-moz-transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  "-moz-transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  "-moz-user-focus"?: Property$MozUserFocus | Array<Property$MozUserFocus>,
  "-moz-user-modify"?: Property$MozUserModify | Array<Property$MozUserModify>,
  "-moz-user-select"?: Property$UserSelect | Array<Property$UserSelect>,
  "-moz-window-dragging"?: Property$MozWindowDragging | Array<Property$MozWindowDragging>,
  "-moz-window-shadow"?: Property$MozWindowShadow | Array<Property$MozWindowShadow>,
  "-ms-accelerator"?: Property$MsAccelerator | Array<Property$MsAccelerator>,
  "-ms-block-progression"?: Property$MsBlockProgression | Array<Property$MsBlockProgression>,
  "-ms-content-zoom-chaining"?: Property$MsContentZoomChaining | Array<Property$MsContentZoomChaining>,
  "-ms-content-zoom-limit-max"?: Property$MsContentZoomLimitMax | Array<Property$MsContentZoomLimitMax>,
  "-ms-content-zoom-limit-min"?: Property$MsContentZoomLimitMin | Array<Property$MsContentZoomLimitMin>,
  "-ms-content-zoom-snap-points"?: Property$MsContentZoomSnapPoints | Array<Property$MsContentZoomSnapPoints>,
  "-ms-content-zoom-snap-type"?: Property$MsContentZoomSnapType | Array<Property$MsContentZoomSnapType>,
  "-ms-content-zooming"?: Property$MsContentZooming | Array<Property$MsContentZooming>,
  "-ms-filter"?: Property$MsFilter | Array<Property$MsFilter>,
  "-ms-flex-direction"?: Property$FlexDirection | Array<Property$FlexDirection>,
  "-ms-flex-positive"?: Property$FlexGrow | Array<Property$FlexGrow>,
  "-ms-flow-from"?: Property$MsFlowFrom | Array<Property$MsFlowFrom>,
  "-ms-flow-into"?: Property$MsFlowInto | Array<Property$MsFlowInto>,
  "-ms-grid-columns"?: Property$MsGridColumns<TLength> | Array<Property$MsGridColumns<TLength>>,
  "-ms-grid-rows"?: Property$MsGridRows<TLength> | Array<Property$MsGridRows<TLength>>,
  "-ms-high-contrast-adjust"?: Property$MsHighContrastAdjust | Array<Property$MsHighContrastAdjust>,
  "-ms-hyphenate-limit-chars"?: Property$MsHyphenateLimitChars | Array<Property$MsHyphenateLimitChars>,
  "-ms-hyphenate-limit-lines"?: Property$MsHyphenateLimitLines | Array<Property$MsHyphenateLimitLines>,
  "-ms-hyphenate-limit-zone"?: Property$MsHyphenateLimitZone<TLength> | Array<Property$MsHyphenateLimitZone<TLength>>,
  "-ms-hyphens"?: Property$Hyphens | Array<Property$Hyphens>,
  "-ms-ime-align"?: Property$MsImeAlign | Array<Property$MsImeAlign>,
  "-ms-line-break"?: Property$LineBreak | Array<Property$LineBreak>,
  "-ms-order"?: Property$Order | Array<Property$Order>,
  "-ms-overflow-style"?: Property$MsOverflowStyle | Array<Property$MsOverflowStyle>,
  "-ms-overflow-x"?: Property$OverflowX | Array<Property$OverflowX>,
  "-ms-overflow-y"?: Property$OverflowY | Array<Property$OverflowY>,
  "-ms-scroll-chaining"?: Property$MsScrollChaining | Array<Property$MsScrollChaining>,
  "-ms-scroll-limit-x-max"?: Property$MsScrollLimitXMax<TLength> | Array<Property$MsScrollLimitXMax<TLength>>,
  "-ms-scroll-limit-x-min"?: Property$MsScrollLimitXMin<TLength> | Array<Property$MsScrollLimitXMin<TLength>>,
  "-ms-scroll-limit-y-max"?: Property$MsScrollLimitYMax<TLength> | Array<Property$MsScrollLimitYMax<TLength>>,
  "-ms-scroll-limit-y-min"?: Property$MsScrollLimitYMin<TLength> | Array<Property$MsScrollLimitYMin<TLength>>,
  "-ms-scroll-rails"?: Property$MsScrollRails | Array<Property$MsScrollRails>,
  "-ms-scroll-snap-points-x"?: Property$MsScrollSnapPointsX | Array<Property$MsScrollSnapPointsX>,
  "-ms-scroll-snap-points-y"?: Property$MsScrollSnapPointsY | Array<Property$MsScrollSnapPointsY>,
  "-ms-scroll-snap-type"?: Property$MsScrollSnapType | Array<Property$MsScrollSnapType>,
  "-ms-scroll-translation"?: Property$MsScrollTranslation | Array<Property$MsScrollTranslation>,
  "-ms-scrollbar-3dlight-color"?: Property$MsScrollbar3dlightColor | Array<Property$MsScrollbar3dlightColor>,
  "-ms-scrollbar-arrow-color"?: Property$MsScrollbarArrowColor | Array<Property$MsScrollbarArrowColor>,
  "-ms-scrollbar-base-color"?: Property$MsScrollbarBaseColor | Array<Property$MsScrollbarBaseColor>,
  "-ms-scrollbar-darkshadow-color"?: Property$MsScrollbarDarkshadowColor | Array<Property$MsScrollbarDarkshadowColor>,
  "-ms-scrollbar-face-color"?: Property$MsScrollbarFaceColor | Array<Property$MsScrollbarFaceColor>,
  "-ms-scrollbar-highlight-color"?: Property$MsScrollbarHighlightColor | Array<Property$MsScrollbarHighlightColor>,
  "-ms-scrollbar-shadow-color"?: Property$MsScrollbarShadowColor | Array<Property$MsScrollbarShadowColor>,
  "-ms-scrollbar-track-color"?: Property$MsScrollbarTrackColor | Array<Property$MsScrollbarTrackColor>,
  "-ms-text-autospace"?: Property$MsTextAutospace | Array<Property$MsTextAutospace>,
  "-ms-text-combine-horizontal"?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
  "-ms-text-overflow"?: Property$TextOverflow | Array<Property$TextOverflow>,
  "-ms-touch-action"?: Property$TouchAction | Array<Property$TouchAction>,
  "-ms-touch-select"?: Property$MsTouchSelect | Array<Property$MsTouchSelect>,
  "-ms-transform"?: Property$Transform | Array<Property$Transform>,
  "-ms-transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  "-ms-transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  "-ms-transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  "-ms-transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  "-ms-transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  "-ms-user-select"?: Property$MsUserSelect | Array<Property$MsUserSelect>,
  "-ms-word-break"?: Property$WordBreak | Array<Property$WordBreak>,
  "-ms-wrap-flow"?: Property$MsWrapFlow | Array<Property$MsWrapFlow>,
  "-ms-wrap-margin"?: Property$MsWrapMargin<TLength> | Array<Property$MsWrapMargin<TLength>>,
  "-ms-wrap-through"?: Property$MsWrapThrough | Array<Property$MsWrapThrough>,
  "-ms-writing-mode"?: Property$WritingMode | Array<Property$WritingMode>,
  "-webkit-align-content"?: Property$AlignContent | Array<Property$AlignContent>,
  "-webkit-align-items"?: Property$AlignItems | Array<Property$AlignItems>,
  "-webkit-align-self"?: Property$AlignSelf | Array<Property$AlignSelf>,
  "-webkit-animation-delay"?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
  "-webkit-animation-direction"?: Property$AnimationDirection | Array<Property$AnimationDirection>,
  "-webkit-animation-duration"?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
  "-webkit-animation-fill-mode"?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
  "-webkit-animation-iteration-count"?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
  "-webkit-animation-name"?: Property$AnimationName | Array<Property$AnimationName>,
  "-webkit-animation-play-state"?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
  "-webkit-animation-timing-function"?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
  "-webkit-appearance"?: Property$WebkitAppearance | Array<Property$WebkitAppearance>,
  "-webkit-backdrop-filter"?: Property$BackdropFilter | Array<Property$BackdropFilter>,
  "-webkit-backface-visibility"?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
  "-webkit-background-clip"?: Property$BackgroundClip | Array<Property$BackgroundClip>,
  "-webkit-background-origin"?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
  "-webkit-background-size"?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
  "-webkit-border-before-color"?: Property$WebkitBorderBeforeColor | Array<Property$WebkitBorderBeforeColor>,
  "-webkit-border-before-style"?: Property$WebkitBorderBeforeStyle | Array<Property$WebkitBorderBeforeStyle>,
  "-webkit-border-before-width"?: Property$WebkitBorderBeforeWidth<TLength> | Array<Property$WebkitBorderBeforeWidth<TLength>>,
  "-webkit-border-bottom-left-radius"?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
  "-webkit-border-bottom-right-radius"?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
  "-webkit-border-image-slice"?: Property$BorderImageSlice | Array<Property$BorderImageSlice>,
  "-webkit-border-top-left-radius"?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
  "-webkit-border-top-right-radius"?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
  "-webkit-box-decoration-break"?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
  "-webkit-box-reflect"?: Property$WebkitBoxReflect<TLength> | Array<Property$WebkitBoxReflect<TLength>>,
  "-webkit-box-shadow"?: Property$BoxShadow | Array<Property$BoxShadow>,
  "-webkit-box-sizing"?: Property$BoxSizing | Array<Property$BoxSizing>,
  "-webkit-clip-path"?: Property$ClipPath | Array<Property$ClipPath>,
  "-webkit-column-count"?: Property$ColumnCount | Array<Property$ColumnCount>,
  "-webkit-column-fill"?: Property$ColumnFill | Array<Property$ColumnFill>,
  "-webkit-column-rule-color"?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
  "-webkit-column-rule-style"?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
  "-webkit-column-rule-width"?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
  "-webkit-column-span"?: Property$ColumnSpan | Array<Property$ColumnSpan>,
  "-webkit-column-width"?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
  "-webkit-filter"?: Property$Filter | Array<Property$Filter>,
  "-webkit-flex-basis"?: Property$FlexBasis<TLength> | Array<Property$FlexBasis<TLength>>,
  "-webkit-flex-direction"?: Property$FlexDirection | Array<Property$FlexDirection>,
  "-webkit-flex-grow"?: Property$FlexGrow | Array<Property$FlexGrow>,
  "-webkit-flex-shrink"?: Property$FlexShrink | Array<Property$FlexShrink>,
  "-webkit-flex-wrap"?: Property$FlexWrap | Array<Property$FlexWrap>,
  "-webkit-font-feature-settings"?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
  "-webkit-font-kerning"?: Property$FontKerning | Array<Property$FontKerning>,
  "-webkit-font-smoothing"?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
  "-webkit-font-variant-ligatures"?: Property$FontVariantLigatures | Array<Property$FontVariantLigatures>,
  "-webkit-hyphenate-character"?: Property$HyphenateCharacter | Array<Property$HyphenateCharacter>,
  "-webkit-hyphens"?: Property$Hyphens | Array<Property$Hyphens>,
  "-webkit-initial-letter"?: Property$InitialLetter | Array<Property$InitialLetter>,
  "-webkit-justify-content"?: Property$JustifyContent | Array<Property$JustifyContent>,
  "-webkit-line-break"?: Property$LineBreak | Array<Property$LineBreak>,
  "-webkit-line-clamp"?: Property$WebkitLineClamp | Array<Property$WebkitLineClamp>,
  "-webkit-margin-end"?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
  "-webkit-margin-start"?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
  "-webkit-mask-attachment"?: Property$WebkitMaskAttachment | Array<Property$WebkitMaskAttachment>,
  "-webkit-mask-box-image-outset"?: Property$MaskBorderOutset<TLength> | Array<Property$MaskBorderOutset<TLength>>,
  "-webkit-mask-box-image-repeat"?: Property$MaskBorderRepeat | Array<Property$MaskBorderRepeat>,
  "-webkit-mask-box-image-slice"?: Property$MaskBorderSlice | Array<Property$MaskBorderSlice>,
  "-webkit-mask-box-image-source"?: Property$MaskBorderSource | Array<Property$MaskBorderSource>,
  "-webkit-mask-box-image-width"?: Property$MaskBorderWidth<TLength> | Array<Property$MaskBorderWidth<TLength>>,
  "-webkit-mask-clip"?: Property$WebkitMaskClip | Array<Property$WebkitMaskClip>,
  "-webkit-mask-composite"?: Property$WebkitMaskComposite | Array<Property$WebkitMaskComposite>,
  "-webkit-mask-image"?: Property$WebkitMaskImage | Array<Property$WebkitMaskImage>,
  "-webkit-mask-origin"?: Property$WebkitMaskOrigin | Array<Property$WebkitMaskOrigin>,
  "-webkit-mask-position"?: Property$WebkitMaskPosition<TLength> | Array<Property$WebkitMaskPosition<TLength>>,
  "-webkit-mask-position-x"?: Property$WebkitMaskPositionX<TLength> | Array<Property$WebkitMaskPositionX<TLength>>,
  "-webkit-mask-position-y"?: Property$WebkitMaskPositionY<TLength> | Array<Property$WebkitMaskPositionY<TLength>>,
  "-webkit-mask-repeat"?: Property$WebkitMaskRepeat | Array<Property$WebkitMaskRepeat>,
  "-webkit-mask-repeat-x"?: Property$WebkitMaskRepeatX | Array<Property$WebkitMaskRepeatX>,
  "-webkit-mask-repeat-y"?: Property$WebkitMaskRepeatY | Array<Property$WebkitMaskRepeatY>,
  "-webkit-mask-size"?: Property$WebkitMaskSize<TLength> | Array<Property$WebkitMaskSize<TLength>>,
  "-webkit-max-inline-size"?: Property$MaxInlineSize<TLength> | Array<Property$MaxInlineSize<TLength>>,
  "-webkit-order"?: Property$Order | Array<Property$Order>,
  "-webkit-overflow-scrolling"?: Property$WebkitOverflowScrolling | Array<Property$WebkitOverflowScrolling>,
  "-webkit-padding-end"?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
  "-webkit-padding-start"?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
  "-webkit-perspective"?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
  "-webkit-perspective-origin"?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
  "-webkit-print-color-adjust"?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
  "-webkit-ruby-position"?: Property$RubyPosition | Array<Property$RubyPosition>,
  "-webkit-scroll-snap-type"?: Property$ScrollSnapType | Array<Property$ScrollSnapType>,
  "-webkit-shape-margin"?: Property$ShapeMargin<TLength> | Array<Property$ShapeMargin<TLength>>,
  "-webkit-tap-highlight-color"?: Property$WebkitTapHighlightColor | Array<Property$WebkitTapHighlightColor>,
  "-webkit-text-combine"?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
  "-webkit-text-decoration-color"?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
  "-webkit-text-decoration-line"?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
  "-webkit-text-decoration-skip"?: Property$TextDecorationSkip | Array<Property$TextDecorationSkip>,
  "-webkit-text-decoration-style"?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
  "-webkit-text-emphasis-color"?: Property$TextEmphasisColor | Array<Property$TextEmphasisColor>,
  "-webkit-text-emphasis-position"?: Property$TextEmphasisPosition | Array<Property$TextEmphasisPosition>,
  "-webkit-text-emphasis-style"?: Property$TextEmphasisStyle | Array<Property$TextEmphasisStyle>,
  "-webkit-text-fill-color"?: Property$WebkitTextFillColor | Array<Property$WebkitTextFillColor>,
  "-webkit-text-orientation"?: Property$TextOrientation | Array<Property$TextOrientation>,
  "-webkit-text-size-adjust"?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
  "-webkit-text-stroke-color"?: Property$WebkitTextStrokeColor | Array<Property$WebkitTextStrokeColor>,
  "-webkit-text-stroke-width"?: Property$WebkitTextStrokeWidth<TLength> | Array<Property$WebkitTextStrokeWidth<TLength>>,
  "-webkit-text-underline-position"?: Property$TextUnderlinePosition | Array<Property$TextUnderlinePosition>,
  "-webkit-touch-callout"?: Property$WebkitTouchCallout | Array<Property$WebkitTouchCallout>,
  "-webkit-transform"?: Property$Transform | Array<Property$Transform>,
  "-webkit-transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  "-webkit-transform-style"?: Property$TransformStyle | Array<Property$TransformStyle>,
  "-webkit-transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  "-webkit-transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  "-webkit-transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  "-webkit-transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  "-webkit-user-modify"?: Property$WebkitUserModify | Array<Property$WebkitUserModify>,
  "-webkit-user-select"?: Property$UserSelect | Array<Property$UserSelect>,
  "-webkit-writing-mode"?: Property$WritingMode | Array<Property$WritingMode>,
|};

export type VendorShorthandPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
  "-moz-animation"?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
  "-moz-border-image"?: Property$BorderImage | Array<Property$BorderImage>,
  "-moz-column-rule"?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
  "-moz-columns"?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
  "-moz-transition"?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
  "-ms-content-zoom-limit"?: Property$MsContentZoomLimit | Array<Property$MsContentZoomLimit>,
  "-ms-content-zoom-snap"?: Property$MsContentZoomSnap | Array<Property$MsContentZoomSnap>,
  "-ms-flex"?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
  "-ms-scroll-limit"?: Property$MsScrollLimit | Array<Property$MsScrollLimit>,
  "-ms-scroll-snap-x"?: Property$MsScrollSnapX | Array<Property$MsScrollSnapX>,
  "-ms-scroll-snap-y"?: Property$MsScrollSnapY | Array<Property$MsScrollSnapY>,
  "-ms-transition"?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
  "-webkit-animation"?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
  "-webkit-border-before"?: Property$WebkitBorderBefore<TLength> | Array<Property$WebkitBorderBefore<TLength>>,
  "-webkit-border-image"?: Property$BorderImage | Array<Property$BorderImage>,
  "-webkit-border-radius"?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
  "-webkit-column-rule"?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
  "-webkit-columns"?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
  "-webkit-flex"?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
  "-webkit-flex-flow"?: Property$FlexFlow | Array<Property$FlexFlow>,
  "-webkit-mask"?: Property$WebkitMask<TLength> | Array<Property$WebkitMask<TLength>>,
  "-webkit-mask-box-image"?: Property$MaskBorder | Array<Property$MaskBorder>,
  "-webkit-text-emphasis"?: Property$TextEmphasis | Array<Property$TextEmphasis>,
  "-webkit-text-stroke"?: Property$WebkitTextStroke<TLength> | Array<Property$WebkitTextStroke<TLength>>,
  "-webkit-transition"?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
|};

export type VendorPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
  ...VendorLonghandPropertiesHyphenFallback<TLength, TTime>,
  ...VendorShorthandPropertiesHyphenFallback<TLength, TTime>,
|};

export type ObsoletePropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
  azimuth?: Property$Azimuth | Array<Property$Azimuth>,
  "box-align"?: Property$BoxAlign | Array<Property$BoxAlign>,
  "box-direction"?: Property$BoxDirection | Array<Property$BoxDirection>,
  "box-flex"?: Property$BoxFlex | Array<Property$BoxFlex>,
  "box-flex-group"?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
  "box-lines"?: Property$BoxLines | Array<Property$BoxLines>,
  "box-ordinal-group"?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
  "box-orient"?: Property$BoxOrient | Array<Property$BoxOrient>,
  "box-pack"?: Property$BoxPack | Array<Property$BoxPack>,
  clip?: Property$Clip | Array<Property$Clip>,
  "grid-column-gap"?: Property$GridColumnGap<TLength> | Array<Property$GridColumnGap<TLength>>,
  "grid-gap"?: Property$GridGap<TLength> | Array<Property$GridGap<TLength>>,
  "grid-row-gap"?: Property$GridRowGap<TLength> | Array<Property$GridRowGap<TLength>>,
  "ime-mode"?: Property$ImeMode | Array<Property$ImeMode>,
  "offset-block"?: Property$InsetBlock<TLength> | Array<Property$InsetBlock<TLength>>,
  "offset-block-end"?: Property$InsetBlockEnd<TLength> | Array<Property$InsetBlockEnd<TLength>>,
  "offset-block-start"?: Property$InsetBlockStart<TLength> | Array<Property$InsetBlockStart<TLength>>,
  "offset-inline"?: Property$InsetInline<TLength> | Array<Property$InsetInline<TLength>>,
  "offset-inline-end"?: Property$InsetInlineEnd<TLength> | Array<Property$InsetInlineEnd<TLength>>,
  "offset-inline-start"?: Property$InsetInlineStart<TLength> | Array<Property$InsetInlineStart<TLength>>,
  "scroll-snap-coordinate"?: Property$ScrollSnapCoordinate<TLength> | Array<Property$ScrollSnapCoordinate<TLength>>,
  "scroll-snap-destination"?: Property$ScrollSnapDestination<TLength> | Array<Property$ScrollSnapDestination<TLength>>,
  "scroll-snap-points-x"?: Property$ScrollSnapPointsX | Array<Property$ScrollSnapPointsX>,
  "scroll-snap-points-y"?: Property$ScrollSnapPointsY | Array<Property$ScrollSnapPointsY>,
  "scroll-snap-type-x"?: Property$ScrollSnapTypeX | Array<Property$ScrollSnapTypeX>,
  "scroll-snap-type-y"?: Property$ScrollSnapTypeY | Array<Property$ScrollSnapTypeY>,
  "-khtml-box-align"?: Property$BoxAlign | Array<Property$BoxAlign>,
  "-khtml-box-direction"?: Property$BoxDirection | Array<Property$BoxDirection>,
  "-khtml-box-flex"?: Property$BoxFlex | Array<Property$BoxFlex>,
  "-khtml-box-flex-group"?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
  "-khtml-box-lines"?: Property$BoxLines | Array<Property$BoxLines>,
  "-khtml-box-ordinal-group"?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
  "-khtml-box-orient"?: Property$BoxOrient | Array<Property$BoxOrient>,
  "-khtml-box-pack"?: Property$BoxPack | Array<Property$BoxPack>,
  "-khtml-line-break"?: Property$LineBreak | Array<Property$LineBreak>,
  "-khtml-opacity"?: Property$Opacity | Array<Property$Opacity>,
  "-khtml-user-select"?: Property$UserSelect | Array<Property$UserSelect>,
  "-moz-background-clip"?: Property$BackgroundClip | Array<Property$BackgroundClip>,
  "-moz-background-inline-policy"?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
  "-moz-background-origin"?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
  "-moz-background-size"?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
  "-moz-binding"?: Property$MozBinding | Array<Property$MozBinding>,
  "-moz-border-radius"?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
  "-moz-border-radius-bottomleft"?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
  "-moz-border-radius-bottomright"?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
  "-moz-border-radius-topleft"?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
  "-moz-border-radius-topright"?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
  "-moz-box-align"?: Property$BoxAlign | Array<Property$BoxAlign>,
  "-moz-box-direction"?: Property$BoxDirection | Array<Property$BoxDirection>,
  "-moz-box-flex"?: Property$BoxFlex | Array<Property$BoxFlex>,
  "-moz-box-ordinal-group"?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
  "-moz-box-orient"?: Property$BoxOrient | Array<Property$BoxOrient>,
  "-moz-box-pack"?: Property$BoxPack | Array<Property$BoxPack>,
  "-moz-box-shadow"?: Property$BoxShadow | Array<Property$BoxShadow>,
  "-moz-float-edge"?: Property$MozFloatEdge | Array<Property$MozFloatEdge>,
  "-moz-force-broken-image-icon"?: Property$MozForceBrokenImageIcon | Array<Property$MozForceBrokenImageIcon>,
  "-moz-opacity"?: Property$Opacity | Array<Property$Opacity>,
  "-moz-outline"?: Property$Outline<TLength> | Array<Property$Outline<TLength>>,
  "-moz-outline-color"?: Property$OutlineColor | Array<Property$OutlineColor>,
  "-moz-outline-radius"?: Property$MozOutlineRadius<TLength> | Array<Property$MozOutlineRadius<TLength>>,
  "-moz-outline-radius-bottomleft"?: Property$MozOutlineRadiusBottomleft<TLength> | Array<Property$MozOutlineRadiusBottomleft<TLength>>,
  "-moz-outline-radius-bottomright"?: Property$MozOutlineRadiusBottomright<TLength> | Array<Property$MozOutlineRadiusBottomright<TLength>>,
  "-moz-outline-radius-topleft"?: Property$MozOutlineRadiusTopleft<TLength> | Array<Property$MozOutlineRadiusTopleft<TLength>>,
  "-moz-outline-radius-topright"?: Property$MozOutlineRadiusTopright<TLength> | Array<Property$MozOutlineRadiusTopright<TLength>>,
  "-moz-outline-style"?: Property$OutlineStyle | Array<Property$OutlineStyle>,
  "-moz-outline-width"?: Property$OutlineWidth<TLength> | Array<Property$OutlineWidth<TLength>>,
  "-moz-text-align-last"?: Property$TextAlignLast | Array<Property$TextAlignLast>,
  "-moz-text-decoration-color"?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
  "-moz-text-decoration-line"?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
  "-moz-text-decoration-style"?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
  "-moz-user-input"?: Property$MozUserInput | Array<Property$MozUserInput>,
  "-ms-ime-mode"?: Property$ImeMode | Array<Property$ImeMode>,
  "-o-animation"?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
  "-o-animation-delay"?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
  "-o-animation-direction"?: Property$AnimationDirection | Array<Property$AnimationDirection>,
  "-o-animation-duration"?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
  "-o-animation-fill-mode"?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
  "-o-animation-iteration-count"?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
  "-o-animation-name"?: Property$AnimationName | Array<Property$AnimationName>,
  "-o-animation-play-state"?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
  "-o-animation-timing-function"?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
  "-o-background-size"?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
  "-o-border-image"?: Property$BorderImage | Array<Property$BorderImage>,
  "-o-object-fit"?: Property$ObjectFit | Array<Property$ObjectFit>,
  "-o-object-position"?: Property$ObjectPosition<TLength> | Array<Property$ObjectPosition<TLength>>,
  "-o-tab-size"?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
  "-o-text-overflow"?: Property$TextOverflow | Array<Property$TextOverflow>,
  "-o-transform"?: Property$Transform | Array<Property$Transform>,
  "-o-transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
  "-o-transition"?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
  "-o-transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
  "-o-transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
  "-o-transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
  "-o-transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
  "-webkit-box-align"?: Property$BoxAlign | Array<Property$BoxAlign>,
  "-webkit-box-direction"?: Property$BoxDirection | Array<Property$BoxDirection>,
  "-webkit-box-flex"?: Property$BoxFlex | Array<Property$BoxFlex>,
  "-webkit-box-flex-group"?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
  "-webkit-box-lines"?: Property$BoxLines | Array<Property$BoxLines>,
  "-webkit-box-ordinal-group"?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
  "-webkit-box-orient"?: Property$BoxOrient | Array<Property$BoxOrient>,
  "-webkit-box-pack"?: Property$BoxPack | Array<Property$BoxPack>,
  "-webkit-scroll-snap-points-x"?: Property$ScrollSnapPointsX | Array<Property$ScrollSnapPointsX>,
  "-webkit-scroll-snap-points-y"?: Property$ScrollSnapPointsY | Array<Property$ScrollSnapPointsY>,
|};

export type SvgPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
  "alignment-baseline"?: Property$AlignmentBaseline | Array<Property$AlignmentBaseline>,
  "baseline-shift"?: Property$BaselineShift<TLength> | Array<Property$BaselineShift<TLength>>,
  clip?: Property$Clip | Array<Property$Clip>,
  "clip-path"?: Property$ClipPath | Array<Property$ClipPath>,
  "clip-rule"?: Property$ClipRule | Array<Property$ClipRule>,
  color?: Property$Color | Array<Property$Color>,
  "color-interpolation"?: Property$ColorInterpolation | Array<Property$ColorInterpolation>,
  "color-rendering"?: Property$ColorRendering | Array<Property$ColorRendering>,
  cursor?: Property$Cursor | Array<Property$Cursor>,
  direction?: Property$Direction | Array<Property$Direction>,
  display?: Property$Display | Array<Property$Display>,
  "dominant-baseline"?: Property$DominantBaseline | Array<Property$DominantBaseline>,
  fill?: Property$Fill | Array<Property$Fill>,
  "fill-opacity"?: Property$FillOpacity | Array<Property$FillOpacity>,
  "fill-rule"?: Property$FillRule | Array<Property$FillRule>,
  filter?: Property$Filter | Array<Property$Filter>,
  "flood-color"?: Property$FloodColor | Array<Property$FloodColor>,
  "flood-opacity"?: Property$FloodOpacity | Array<Property$FloodOpacity>,
  font?: Property$Font | Array<Property$Font>,
  "font-family"?: Property$FontFamily | Array<Property$FontFamily>,
  "font-size"?: Property$FontSize<TLength> | Array<Property$FontSize<TLength>>,
  "font-size-adjust"?: Property$FontSizeAdjust | Array<Property$FontSizeAdjust>,
  "font-stretch"?: Property$FontStretch | Array<Property$FontStretch>,
  "font-style"?: Property$FontStyle | Array<Property$FontStyle>,
  "font-variant"?: Property$FontVariant | Array<Property$FontVariant>,
  "font-weight"?: Property$FontWeight | Array<Property$FontWeight>,
  "glyph-orientation-vertical"?: Property$GlyphOrientationVertical | Array<Property$GlyphOrientationVertical>,
  "image-rendering"?: Property$ImageRendering | Array<Property$ImageRendering>,
  "letter-spacing"?: Property$LetterSpacing<TLength> | Array<Property$LetterSpacing<TLength>>,
  "lighting-color"?: Property$LightingColor | Array<Property$LightingColor>,
  "line-height"?: Property$LineHeight<TLength> | Array<Property$LineHeight<TLength>>,
  marker?: Property$Marker | Array<Property$Marker>,
  "marker-end"?: Property$MarkerEnd | Array<Property$MarkerEnd>,
  "marker-mid"?: Property$MarkerMid | Array<Property$MarkerMid>,
  "marker-start"?: Property$MarkerStart | Array<Property$MarkerStart>,
  mask?: Property$Mask<TLength> | Array<Property$Mask<TLength>>,
  opacity?: Property$Opacity | Array<Property$Opacity>,
  overflow?: Property$Overflow | Array<Property$Overflow>,
  "paint-order"?: Property$PaintOrder | Array<Property$PaintOrder>,
  "pointer-events"?: Property$PointerEvents | Array<Property$PointerEvents>,
  "shape-rendering"?: Property$ShapeRendering | Array<Property$ShapeRendering>,
  "stop-color"?: Property$StopColor | Array<Property$StopColor>,
  "stop-opacity"?: Property$StopOpacity | Array<Property$StopOpacity>,
  stroke?: Property$Stroke | Array<Property$Stroke>,
  "stroke-dasharray"?: Property$StrokeDasharray<TLength> | Array<Property$StrokeDasharray<TLength>>,
  "stroke-dashoffset"?: Property$StrokeDashoffset<TLength> | Array<Property$StrokeDashoffset<TLength>>,
  "stroke-linecap"?: Property$StrokeLinecap | Array<Property$StrokeLinecap>,
  "stroke-linejoin"?: Property$StrokeLinejoin | Array<Property$StrokeLinejoin>,
  "stroke-miterlimit"?: Property$StrokeMiterlimit | Array<Property$StrokeMiterlimit>,
  "stroke-opacity"?: Property$StrokeOpacity | Array<Property$StrokeOpacity>,
  "stroke-width"?: Property$StrokeWidth<TLength> | Array<Property$StrokeWidth<TLength>>,
  "text-anchor"?: Property$TextAnchor | Array<Property$TextAnchor>,
  "text-decoration"?: Property$TextDecoration<TLength> | Array<Property$TextDecoration<TLength>>,
  "text-rendering"?: Property$TextRendering | Array<Property$TextRendering>,
  "unicode-bidi"?: Property$UnicodeBidi | Array<Property$UnicodeBidi>,
  "vector-effect"?: Property$VectorEffect | Array<Property$VectorEffect>,
  visibility?: Property$Visibility | Array<Property$Visibility>,
  "white-space"?: Property$WhiteSpace | Array<Property$WhiteSpace>,
  "word-spacing"?: Property$WordSpacing<TLength> | Array<Property$WordSpacing<TLength>>,
  "writing-mode"?: Property$WritingMode | Array<Property$WritingMode>,
|};

export type PropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
  ...StandardPropertiesHyphenFallback<TLength, TTime>,
  ...VendorPropertiesHyphenFallback<TLength, TTime>,
  ...ObsoletePropertiesHyphenFallback<TLength, TTime>,
  ...SvgPropertiesHyphenFallback<TLength, TTime>,
|};

export type AtRules =
  | "@charset"
  | "@counter-style"
  | "@document"
  | "@font-face"
  | "@font-feature-values"
  | "@import"
  | "@keyframes"
  | "@layer"
  | "@media"
  | "@namespace"
  | "@page"
  | "@property"
  | "@scroll-timeline"
  | "@supports"
  | "@viewport";

export type AdvancedPseudos =
  | ":-moz-any()"
  | ":-moz-dir"
  | ":-webkit-any()"
  | "::cue"
  | "::cue-region"
  | "::part"
  | "::slotted"
  | ":dir"
  | ":has"
  | ":host"
  | ":host-context"
  | ":is"
  | ":lang"
  | ":matches()"
  | ":not"
  | ":nth-child"
  | ":nth-last-child"
  | ":nth-last-of-type"
  | ":nth-of-type"
  | ":where";

export type SimplePseudos =
  | ":-khtml-any-link"
  | ":-moz-any-link"
  | ":-moz-focusring"
  | ":-moz-full-screen"
  | ":-moz-placeholder"
  | ":-moz-read-only"
  | ":-moz-read-write"
  | ":-moz-ui-invalid"
  | ":-moz-ui-valid"
  | ":-ms-fullscreen"
  | ":-ms-input-placeholder"
  | ":-webkit-any-link"
  | ":-webkit-full-screen"
  | "::-moz-placeholder"
  | "::-moz-progress-bar"
  | "::-moz-range-progress"
  | "::-moz-range-thumb"
  | "::-moz-range-track"
  | "::-moz-selection"
  | "::-ms-backdrop"
  | "::-ms-browse"
  | "::-ms-check"
  | "::-ms-clear"
  | "::-ms-expand"
  | "::-ms-fill"
  | "::-ms-fill-lower"
  | "::-ms-fill-upper"
  | "::-ms-input-placeholder"
  | "::-ms-reveal"
  | "::-ms-thumb"
  | "::-ms-ticks-after"
  | "::-ms-ticks-before"
  | "::-ms-tooltip"
  | "::-ms-track"
  | "::-ms-value"
  | "::-webkit-backdrop"
  | "::-webkit-input-placeholder"
  | "::-webkit-progress-bar"
  | "::-webkit-progress-inner-value"
  | "::-webkit-progress-value"
  | "::-webkit-slider-runnable-track"
  | "::-webkit-slider-thumb"
  | "::after"
  | "::backdrop"
  | "::before"
  | "::cue"
  | "::cue-region"
  | "::first-letter"
  | "::first-line"
  | "::grammar-error"
  | "::marker"
  | "::placeholder"
  | "::selection"
  | "::spelling-error"
  | "::target-text"
  | ":active"
  | ":after"
  | ":any-link"
  | ":before"
  | ":blank"
  | ":checked"
  | ":current"
  | ":default"
  | ":defined"
  | ":disabled"
  | ":empty"
  | ":enabled"
  | ":first"
  | ":first-child"
  | ":first-letter"
  | ":first-line"
  | ":first-of-type"
  | ":focus"
  | ":focus-visible"
  | ":focus-within"
  | ":fullscreen"
  | ":future"
  | ":hover"
  | ":in-range"
  | ":indeterminate"
  | ":invalid"
  | ":last-child"
  | ":last-of-type"
  | ":left"
  | ":link"
  | ":local-link"
  | ":nth-col"
  | ":nth-last-col"
  | ":only-child"
  | ":only-of-type"
  | ":optional"
  | ":out-of-range"
  | ":past"
  | ":paused"
  | ":picture-in-picture"
  | ":placeholder-shown"
  | ":playing"
  | ":read-only"
  | ":read-write"
  | ":required"
  | ":right"
  | ":root"
  | ":scope"
  | ":target"
  | ":target-within"
  | ":user-invalid"
  | ":user-valid"
  | ":valid"
  | ":visited";

export type Pseudos = AdvancedPseudos | SimplePseudos;

export type HtmlAttributes =
  | "[abbr]"
  | "[accept-charset]"
  | "[accept]"
  | "[accesskey]"
  | "[action]"
  | "[align]"
  | "[alink]"
  | "[allow]"
  | "[allowfullscreen]"
  | "[allowpaymentrequest]"
  | "[alt]"
  | "[archive]"
  | "[async]"
  | "[autobuffer]"
  | "[autocapitalize]"
  | "[autocomplete]"
  | "[autofocus]"
  | "[autoplay]"
  | "[axis]"
  | "[background]"
  | "[behavior]"
  | "[bgcolor]"
  | "[border]"
  | "[bottommargin]"
  | "[capture]"
  | "[cellpadding]"
  | "[cellspacing]"
  | "[char]"
  | "[charoff]"
  | "[charset]"
  | "[checked]"
  | "[cite]"
  | "[class]"
  | "[classid]"
  | "[clear]"
  | "[code]"
  | "[codebase]"
  | "[codetype]"
  | "[color]"
  | "[cols]"
  | "[colspan]"
  | "[command]"
  | "[compact]"
  | "[content]"
  | "[contenteditable]"
  | "[contextmenu]"
  | "[controls]"
  | "[coords]"
  | "[crossorigin]"
  | "[data]"
  | "[datafld]"
  | "[datasrc]"
  | "[datetime]"
  | "[declare]"
  | "[decoding]"
  | "[default]"
  | "[defer]"
  | "[dir]"
  | "[direction]"
  | "[dirname]"
  | "[disabled]"
  | "[download]"
  | "[draggable]"
  | "[enctype]"
  | "[enterkeyhint]"
  | "[exportparts]"
  | "[face]"
  | "[fetchpriority]"
  | "[for]"
  | "[form]"
  | "[formaction]"
  | "[formenctype]"
  | "[formmethod]"
  | "[formnovalidate]"
  | "[formtarget]"
  | "[frame]"
  | "[frameborder]"
  | "[headers]"
  | "[height]"
  | "[hidden]"
  | "[high]"
  | "[href]"
  | "[hreflang]"
  | "[hspace]"
  | "[http-equiv]"
  | "[icon]"
  | "[id]"
  | "[imagesizes]"
  | "[imagesrcset]"
  | "[inert]"
  | "[inputmode]"
  | "[integrity]"
  | "[is]"
  | "[ismap]"
  | "[itemid]"
  | "[itemprop]"
  | "[itemref]"
  | "[itemscope]"
  | "[itemtype]"
  | "[kind]"
  | "[label]"
  | "[lang]"
  | "[language]"
  | "[leftmargin]"
  | "[link]"
  | "[list]"
  | "[loading]"
  | "[longdesc]"
  | "[loop]"
  | "[low]"
  | "[manifest]"
  | "[marginheight]"
  | "[marginwidth]"
  | "[max]"
  | "[maxlength]"
  | "[mayscript]"
  | "[media]"
  | "[method]"
  | "[methods]"
  | "[min]"
  | "[minlength]"
  | "[moz-opaque]"
  | "[mozallowfullscreen]"
  | "[msallowfullscreen]"
  | "[multiple]"
  | "[muted]"
  | "[name]"
  | "[nohref]"
  | "[nomodule]"
  | "[nonce]"
  | "[noresize]"
  | "[noshade]"
  | "[novalidate]"
  | "[nowrap]"
  | "[object]"
  | "[onerror]"
  | "[open]"
  | "[optimum]"
  | "[part]"
  | "[pattern]"
  | "[ping]"
  | "[placeholder]"
  | "[poster]"
  | "[prefetch]"
  | "[preload]"
  | "[profile]"
  | "[radiogroup]"
  | "[readonly]"
  | "[referrerpolicy]"
  | "[rel]"
  | "[required]"
  | "[rev]"
  | "[reversed]"
  | "[rightmargin]"
  | "[rows]"
  | "[rowspan]"
  | "[rules]"
  | "[sandbox-allow-downloads]"
  | "[sandbox-allow-modals]"
  | "[sandbox-allow-popups-to-escape-sandbox]"
  | "[sandbox-allow-popups]"
  | "[sandbox-allow-presentation]"
  | "[sandbox-allow-same-origin]"
  | "[sandbox-allow-storage-access-by-user-activation]"
  | "[sandbox-allow-top-navigation-by-user-activation]"
  | "[sandbox]"
  | "[scope]"
  | "[scrollamount]"
  | "[scrolldelay]"
  | "[scrolling]"
  | "[selected]"
  | "[shadowroot]"
  | "[shape]"
  | "[size]"
  | "[sizes]"
  | "[slot]"
  | "[span]"
  | "[spellcheck]"
  | "[src]"
  | "[srcdoc]"
  | "[srclang]"
  | "[srcset]"
  | "[standby]"
  | "[start]"
  | "[step]"
  | "[style]"
  | "[summary]"
  | "[tabindex]"
  | "[target]"
  | "[text]"
  | "[title]"
  | "[topmargin]"
  | "[translate]"
  | "[truespeed]"
  | "[type]"
  | "[usemap]"
  | "[valign]"
  | "[value]"
  | "[valuetype]"
  | "[version]"
  | "[vlink]"
  | "[vspace]"
  | "[webkitallowfullscreen]"
  | "[width]"
  | "[wrap]"
  | "[x-moz-errormessage]"
  | "[xmlns]";

export type SvgAttributes =
  | "[accent-height]"
  | "[alignment-baseline]"
  | "[allowReorder]"
  | "[alphabetic]"
  | "[animation]"
  | "[arabic-form]"
  | "[ascent]"
  | "[attributeName]"
  | "[attributeType]"
  | "[azimuth]"
  | "[baseFrequency]"
  | "[baseProfile]"
  | "[baseline-shift]"
  | "[bbox]"
  | "[bias]"
  | "[by]"
  | "[calcMode]"
  | "[cap-height]"
  | "[class]"
  | "[clip-path]"
  | "[clip-rule]"
  | "[clipPathUnits]"
  | "[clip]"
  | "[color-interpolation-filters]"
  | "[color-interpolation]"
  | "[color-profile]"
  | "[color]"
  | "[contentScriptType]"
  | "[contentStyleType]"
  | "[cursor]"
  | "[cx]"
  | "[cy]"
  | "[d]"
  | "[descent]"
  | "[diffuseConstant]"
  | "[direction]"
  | "[display]"
  | "[divisor]"
  | "[document]"
  | "[dominant-baseline]"
  | "[download]"
  | "[dur]"
  | "[dx]"
  | "[dy]"
  | "[edgeMode]"
  | "[elevation]"
  | "[enable-background]"
  | "[fill-opacity]"
  | "[fill-rule]"
  | "[fill]"
  | "[filterRes]"
  | "[filterUnits]"
  | "[filter]"
  | "[flood-color]"
  | "[flood-opacity]"
  | "[font-family]"
  | "[font-size-adjust]"
  | "[font-size]"
  | "[font-stretch]"
  | "[font-style]"
  | "[font-variant]"
  | "[font-weight]"
  | "[format]"
  | "[fr]"
  | "[from]"
  | "[fx]"
  | "[fy]"
  | "[g1]"
  | "[g2]"
  | "[global]"
  | "[glyph-name]"
  | "[glyph-orientation-horizontal]"
  | "[glyph-orientation-vertical]"
  | "[glyphRef]"
  | "[gradientTransform]"
  | "[gradientUnits]"
  | "[graphical]"
  | "[hanging]"
  | "[height]"
  | "[horiz-adv-x]"
  | "[horiz-origin-x]"
  | "[horiz-origin-y]"
  | "[href]"
  | "[hreflang]"
  | "[id]"
  | "[ideographic]"
  | "[image-rendering]"
  | "[in2]"
  | "[in]"
  | "[k1]"
  | "[k2]"
  | "[k3]"
  | "[k4]"
  | "[k]"
  | "[kernelMatrix]"
  | "[kernelUnitLength]"
  | "[kerning]"
  | "[keyPoints]"
  | "[lang]"
  | "[lengthAdjust]"
  | "[letter-spacing]"
  | "[lighting-color]"
  | "[limitingConeAngle]"
  | "[marker-end]"
  | "[marker-mid]"
  | "[marker-start]"
  | "[markerHeight]"
  | "[markerUnits]"
  | "[markerWidth]"
  | "[maskContentUnits]"
  | "[maskUnits]"
  | "[mask]"
  | "[mathematical]"
  | "[media]"
  | "[mode]"
  | "[name]"
  | "[numOctaves]"
  | "[offset]"
  | "[opacity]"
  | "[operator]"
  | "[order]"
  | "[orient]"
  | "[orientation]"
  | "[origin]"
  | "[overflow]"
  | "[overline-position]"
  | "[overline-thickness]"
  | "[paint-order]"
  | "[panose-1]"
  | "[path]"
  | "[patternContentUnits]"
  | "[patternTransform]"
  | "[patternUnits]"
  | "[ping]"
  | "[pointer-events]"
  | "[pointsAtX]"
  | "[pointsAtY]"
  | "[pointsAtZ]"
  | "[points]"
  | "[preserveAlpha]"
  | "[preserveAspectRatio]"
  | "[primitiveUnits]"
  | "[r]"
  | "[radius]"
  | "[refX]"
  | "[refY]"
  | "[referrerpolicy]"
  | "[rel]"
  | "[repeatCount]"
  | "[requiredExtensions]"
  | "[requiredFeatures]"
  | "[rotate]"
  | "[rx]"
  | "[ry]"
  | "[scale]"
  | "[seed]"
  | "[shape-rendering]"
  | "[side]"
  | "[slope]"
  | "[solid-color]"
  | "[solid-opacity]"
  | "[spacing]"
  | "[specularConstant]"
  | "[specularExponent]"
  | "[spreadMethod]"
  | "[startOffset]"
  | "[stdDeviation]"
  | "[stemh]"
  | "[stemv]"
  | "[stitchTiles]"
  | "[stop-color]"
  | "[stop-opacity]"
  | "[strikethrough-position]"
  | "[strikethrough-thickness]"
  | "[string]"
  | "[stroke-dasharray]"
  | "[stroke-dashoffset]"
  | "[stroke-linecap]"
  | "[stroke-linejoin]"
  | "[stroke-miterlimit]"
  | "[stroke-opacity]"
  | "[stroke-width]"
  | "[stroke]"
  | "[style]"
  | "[surfaceScale]"
  | "[systemLanguage]"
  | "[tabindex]"
  | "[targetX]"
  | "[targetY]"
  | "[target]"
  | "[text-anchor]"
  | "[text-decoration]"
  | "[text-overflow]"
  | "[text-rendering]"
  | "[textLength]"
  | "[title]"
  | "[to]"
  | "[transform-origin]"
  | "[transform]"
  | "[type]"
  | "[u1]"
  | "[u2]"
  | "[underline-position]"
  | "[underline-thickness]"
  | "[unicode-bidi]"
  | "[unicode-range]"
  | "[unicode]"
  | "[units-per-em]"
  | "[v-alphabetic]"
  | "[v-hanging]"
  | "[v-ideographic]"
  | "[v-mathematical]"
  | "[values]"
  | "[vector-effect]"
  | "[version]"
  | "[vert-adv-y]"
  | "[vert-origin-x]"
  | "[vert-origin-y]"
  | "[viewBox]"
  | "[viewTarget]"
  | "[visibility]"
  | "[white-space]"
  | "[width]"
  | "[widths]"
  | "[word-spacing]"
  | "[writing-mode]"
  | "[x-height]"
  | "[x1]"
  | "[x2]"
  | "[xChannelSelector]"
  | "[x]"
  | "[y1]"
  | "[y2]"
  | "[yChannelSelector]"
  | "[y]"
  | "[z]"
  | "[zoomAndPan]";

export type Globals = "-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset";

export type Property$AccentColor = Globals | DataType$Color | "auto";

export type Property$AlignContent = Globals | DataType$ContentDistribution | DataType$ContentPosition | "baseline" | "normal" | string;

export type Property$AlignItems = Globals | DataType$SelfPosition | "baseline" | "normal" | "stretch" | string;

export type Property$AlignSelf = Globals | DataType$SelfPosition | "auto" | "baseline" | "normal" | "stretch" | string;

export type Property$AlignTracks = Globals | DataType$ContentDistribution | DataType$ContentPosition | "baseline" | "normal" | string;

export type Property$All = Globals;

export type Property$Animation<TTime = string> = Globals | DataType$SingleAnimation<TTime> | string;

export type Property$AnimationComposition = Globals | string;

export type Property$AnimationDelay<TTime = string> = Globals | TTime | string;

export type Property$AnimationDirection = Globals | DataType$SingleAnimationDirection | string;

export type Property$AnimationDuration<TTime = string> = Globals | TTime | string;

export type Property$AnimationFillMode = Globals | DataType$SingleAnimationFillMode | string;

export type Property$AnimationIterationCount = Globals | "infinite" | string | number;

export type Property$AnimationName = Globals | "none" | string;

export type Property$AnimationPlayState = Globals | "paused" | "running" | string;

export type Property$AnimationTimeline = Globals | DataType$SingleAnimationTimeline | string;

export type Property$AnimationTimingFunction = Globals | DataType$EasingFunction | string;

export type Property$Appearance = Globals | DataType$CompatAuto | "auto" | "menulist-button" | "none" | "textfield";

export type Property$AspectRatio = Globals | "auto" | string | number;

export type Property$Azimuth =
  | Globals
  | "behind"
  | "center"
  | "center-left"
  | "center-right"
  | "far-left"
  | "far-right"
  | "left"
  | "left-side"
  | "leftwards"
  | "right"
  | "right-side"
  | "rightwards"
  | string;

export type Property$BackdropFilter = Globals | "none" | string;

export type Property$BackfaceVisibility = Globals | "hidden" | "visible";

export type Property$Background<TLength = string | 0> = Globals | DataType$FinalBgLayer<TLength> | string;

export type Property$BackgroundAttachment = Globals | DataType$Attachment | string;

export type Property$BackgroundBlendMode = Globals | DataType$BlendMode | string;

export type Property$BackgroundClip = Globals | DataType$Box | string;

export type Property$BackgroundColor = Globals | DataType$Color;

export type Property$BackgroundImage = Globals | "none" | string;

export type Property$BackgroundOrigin = Globals | DataType$Box | string;

export type Property$BackgroundPosition<TLength = string | 0> = Globals | DataType$BgPosition<TLength> | string;

export type Property$BackgroundPositionX<TLength = string | 0> = Globals | TLength | "center" | "left" | "right" | "x-end" | "x-start" | string;

export type Property$BackgroundPositionY<TLength = string | 0> = Globals | TLength | "bottom" | "center" | "top" | "y-end" | "y-start" | string;

export type Property$BackgroundRepeat = Globals | DataType$RepeatStyle | string;

export type Property$BackgroundSize<TLength = string | 0> = Globals | DataType$BgSize<TLength> | string;

export type Property$BlockOverflow = Globals | "clip" | "ellipsis" | string;

export type Property$BlockSize<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fill-available"
  | "auto"
  | "fit-content"
  | "max-content"
  | "min-content"
  | string;

export type Property$Border<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderBlock<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderBlockColor = Globals | DataType$Color | string;

export type Property$BorderBlockEnd<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderBlockEndColor = Globals | DataType$Color;

export type Property$BorderBlockEndStyle = Globals | DataType$LineStyle;

export type Property$BorderBlockEndWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderBlockStart<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderBlockStartColor = Globals | DataType$Color;

export type Property$BorderBlockStartStyle = Globals | DataType$LineStyle;

export type Property$BorderBlockStartWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderBlockStyle = Globals | DataType$LineStyle;

export type Property$BorderBlockWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderBottom<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderBottomColor = Globals | DataType$Color;

export type Property$BorderBottomLeftRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderBottomRightRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderBottomStyle = Globals | DataType$LineStyle;

export type Property$BorderBottomWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderCollapse = Globals | "collapse" | "separate";

export type Property$BorderColor = Globals | DataType$Color | string;

export type Property$BorderEndEndRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderEndStartRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderImage = Globals | "none" | "repeat" | "round" | "space" | "stretch" | string | number;

export type Property$BorderImageOutset<TLength = string | 0> = Globals | TLength | string | number;

export type Property$BorderImageRepeat = Globals | "repeat" | "round" | "space" | "stretch" | string;

export type Property$BorderImageSlice = Globals | string | number;

export type Property$BorderImageSource = Globals | "none" | string;

export type Property$BorderImageWidth<TLength = string | 0> = Globals | TLength | "auto" | string | number;

export type Property$BorderInline<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderInlineColor = Globals | DataType$Color | string;

export type Property$BorderInlineEnd<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderInlineEndColor = Globals | DataType$Color;

export type Property$BorderInlineEndStyle = Globals | DataType$LineStyle;

export type Property$BorderInlineEndWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderInlineStart<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderInlineStartColor = Globals | DataType$Color;

export type Property$BorderInlineStartStyle = Globals | DataType$LineStyle;

export type Property$BorderInlineStartWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderInlineStyle = Globals | DataType$LineStyle;

export type Property$BorderInlineWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderLeft<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderLeftColor = Globals | DataType$Color;

export type Property$BorderLeftStyle = Globals | DataType$LineStyle;

export type Property$BorderLeftWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderRight<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderRightColor = Globals | DataType$Color;

export type Property$BorderRightStyle = Globals | DataType$LineStyle;

export type Property$BorderRightWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderSpacing<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderStartEndRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderStartStartRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderStyle = Globals | DataType$LineStyle | string;

export type Property$BorderTop<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$BorderTopColor = Globals | DataType$Color;

export type Property$BorderTopLeftRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderTopRightRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$BorderTopStyle = Globals | DataType$LineStyle;

export type Property$BorderTopWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$BorderWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | string;

export type Property$Bottom<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$BoxAlign = Globals | "baseline" | "center" | "end" | "start" | "stretch";

export type Property$BoxDecorationBreak = Globals | "clone" | "slice";

export type Property$BoxDirection = Globals | "inherit" | "normal" | "reverse";

export type Property$BoxFlex = Globals | number;

export type Property$BoxFlexGroup = Globals | number;

export type Property$BoxLines = Globals | "multiple" | "single";

export type Property$BoxOrdinalGroup = Globals | number;

export type Property$BoxOrient = Globals | "block-axis" | "horizontal" | "inherit" | "inline-axis" | "vertical";

export type Property$BoxPack = Globals | "center" | "end" | "justify" | "start";

export type Property$BoxShadow = Globals | "none" | string;

export type Property$BoxSizing = Globals | "border-box" | "content-box";

export type Property$BreakAfter =
  | Globals
  | "all"
  | "always"
  | "auto"
  | "avoid"
  | "avoid-column"
  | "avoid-page"
  | "avoid-region"
  | "column"
  | "left"
  | "page"
  | "recto"
  | "region"
  | "right"
  | "verso";

export type Property$BreakBefore =
  | Globals
  | "all"
  | "always"
  | "auto"
  | "avoid"
  | "avoid-column"
  | "avoid-page"
  | "avoid-region"
  | "column"
  | "left"
  | "page"
  | "recto"
  | "region"
  | "right"
  | "verso";

export type Property$BreakInside = Globals | "auto" | "avoid" | "avoid-column" | "avoid-page" | "avoid-region";

export type Property$CaptionSide = Globals | "block-end" | "block-start" | "bottom" | "inline-end" | "inline-start" | "top";

export type Property$CaretColor = Globals | DataType$Color | "auto";

export type Property$Clear = Globals | "both" | "inline-end" | "inline-start" | "left" | "none" | "right";

export type Property$Clip = Globals | "auto" | string;

export type Property$ClipPath = Globals | DataType$GeometryBox | "none" | string;

export type Property$Color = Globals | DataType$Color;

export type Property$PrintColorAdjust = Globals | "economy" | "exact";

export type Property$ColorScheme = Globals | "dark" | "light" | "normal" | string;

export type Property$ColumnCount = Globals | "auto" | number;

export type Property$ColumnFill = Globals | "auto" | "balance" | "balance-all";

export type Property$ColumnGap<TLength = string | 0> = Globals | TLength | "normal" | string;

export type Property$ColumnRule<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$ColumnRuleColor = Globals | DataType$Color;

export type Property$ColumnRuleStyle = Globals | DataType$LineStyle | string;

export type Property$ColumnRuleWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | string;

export type Property$ColumnSpan = Globals | "all" | "none";

export type Property$ColumnWidth<TLength = string | 0> = Globals | TLength | "auto";

export type Property$Columns<TLength = string | 0> = Globals | TLength | "auto" | string | number;

export type Property$Contain = Globals | "content" | "inline-size" | "layout" | "none" | "paint" | "size" | "strict" | "style" | string;

export type Property$Content = Globals | DataType$ContentList | "none" | "normal" | string;

export type Property$ContentVisibility = Globals | "auto" | "hidden" | "visible";

export type Property$CounterIncrement = Globals | "none" | string;

export type Property$CounterReset = Globals | "none" | string;

export type Property$CounterSet = Globals | "none" | string;

export type Property$Cursor =
  | Globals
  | "-moz-grab"
  | "-webkit-grab"
  | "alias"
  | "all-scroll"
  | "auto"
  | "cell"
  | "col-resize"
  | "context-menu"
  | "copy"
  | "crosshair"
  | "default"
  | "e-resize"
  | "ew-resize"
  | "grab"
  | "grabbing"
  | "help"
  | "move"
  | "n-resize"
  | "ne-resize"
  | "nesw-resize"
  | "no-drop"
  | "none"
  | "not-allowed"
  | "ns-resize"
  | "nw-resize"
  | "nwse-resize"
  | "pointer"
  | "progress"
  | "row-resize"
  | "s-resize"
  | "se-resize"
  | "sw-resize"
  | "text"
  | "vertical-text"
  | "w-resize"
  | "wait"
  | "zoom-in"
  | "zoom-out"
  | string;

export type Property$Direction = Globals | "ltr" | "rtl";

export type Property$Display =
  | Globals
  | DataType$DisplayOutside
  | DataType$DisplayInside
  | DataType$DisplayInternal
  | DataType$DisplayLegacy
  | "contents"
  | "list-item"
  | "none"
  | string;

export type Property$EmptyCells = Globals | "hide" | "show";

export type Property$Filter = Globals | "none" | string;

export type Property$Flex<TLength = string | 0> = Globals | TLength | "auto" | "content" | "fit-content" | "max-content" | "min-content" | "none" | string | number;

export type Property$FlexBasis<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-auto"
  | "auto"
  | "content"
  | "fit-content"
  | "max-content"
  | "min-content"
  | string;

export type Property$FlexDirection = Globals | "column" | "column-reverse" | "row" | "row-reverse";

export type Property$FlexFlow = Globals | "column" | "column-reverse" | "nowrap" | "row" | "row-reverse" | "wrap" | "wrap-reverse" | string;

export type Property$FlexGrow = Globals | number;

export type Property$FlexShrink = Globals | number;

export type Property$FlexWrap = Globals | "nowrap" | "wrap" | "wrap-reverse";

export type Property$Float = Globals | "inline-end" | "inline-start" | "left" | "none" | "right";

export type Property$Font = Globals | "caption" | "icon" | "menu" | "message-box" | "small-caption" | "status-bar" | string;

export type Property$FontFamily = Globals | DataType$GenericFamily | string;

export type Property$FontFeatureSettings = Globals | "normal" | string;

export type Property$FontKerning = Globals | "auto" | "none" | "normal";

export type Property$FontLanguageOverride = Globals | "normal" | string;

export type Property$FontOpticalSizing = Globals | "auto" | "none";

export type Property$FontSize<TLength = string | 0> = Globals | DataType$AbsoluteSize | TLength | "larger" | "smaller" | string;

export type Property$FontSizeAdjust = Globals | "from-font" | "none" | string | number;

export type Property$FontSmooth<TLength = string | 0> = Globals | DataType$AbsoluteSize | TLength | "always" | "auto" | "never";

export type Property$FontStretch = Globals | DataType$FontStretchAbsolute;

export type Property$FontStyle = Globals | "italic" | "normal" | "oblique" | string;

export type Property$FontSynthesis = Globals | "none" | "small-caps" | "style" | "weight" | string;

export type Property$FontVariant =
  | Globals
  | DataType$EastAsianVariantValues
  | "all-petite-caps"
  | "all-small-caps"
  | "common-ligatures"
  | "contextual"
  | "diagonal-fractions"
  | "discretionary-ligatures"
  | "full-width"
  | "historical-forms"
  | "historical-ligatures"
  | "lining-nums"
  | "no-common-ligatures"
  | "no-contextual"
  | "no-discretionary-ligatures"
  | "no-historical-ligatures"
  | "none"
  | "normal"
  | "oldstyle-nums"
  | "ordinal"
  | "petite-caps"
  | "proportional-nums"
  | "proportional-width"
  | "ruby"
  | "slashed-zero"
  | "small-caps"
  | "stacked-fractions"
  | "tabular-nums"
  | "titling-caps"
  | "unicase"
  | string;

export type Property$FontVariantAlternates = Globals | "historical-forms" | "normal" | string;

export type Property$FontVariantCaps = Globals | "all-petite-caps" | "all-small-caps" | "normal" | "petite-caps" | "small-caps" | "titling-caps" | "unicase";

export type Property$FontVariantEastAsian = Globals | DataType$EastAsianVariantValues | "full-width" | "normal" | "proportional-width" | "ruby" | string;

export type Property$FontVariantLigatures =
  | Globals
  | "common-ligatures"
  | "contextual"
  | "discretionary-ligatures"
  | "historical-ligatures"
  | "no-common-ligatures"
  | "no-contextual"
  | "no-discretionary-ligatures"
  | "no-historical-ligatures"
  | "none"
  | "normal"
  | string;

export type Property$FontVariantNumeric =
  | Globals
  | "diagonal-fractions"
  | "lining-nums"
  | "normal"
  | "oldstyle-nums"
  | "ordinal"
  | "proportional-nums"
  | "slashed-zero"
  | "stacked-fractions"
  | "tabular-nums"
  | string;

export type Property$FontVariantPosition = Globals | "normal" | "sub" | "super";

export type Property$FontVariationSettings = Globals | "normal" | string;

export type Property$FontWeight = Globals | DataType$FontWeightAbsolute | "bolder" | "lighter";

export type Property$ForcedColorAdjust = Globals | "auto" | "none";

export type Property$Gap<TLength = string | 0> = Globals | TLength | "normal" | string;

export type Property$Grid = Globals | "none" | string;

export type Property$GridArea = Globals | DataType$GridLine | string;

export type Property$GridAutoColumns<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | string;

export type Property$GridAutoFlow = Globals | "column" | "dense" | "row" | string;

export type Property$GridAutoRows<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | string;

export type Property$GridColumn = Globals | DataType$GridLine | string;

export type Property$GridColumnEnd = Globals | DataType$GridLine;

export type Property$GridColumnGap<TLength = string | 0> = Globals | TLength | string;

export type Property$GridColumnStart = Globals | DataType$GridLine;

export type Property$GridGap<TLength = string | 0> = Globals | TLength | string;

export type Property$GridRow = Globals | DataType$GridLine | string;

export type Property$GridRowEnd = Globals | DataType$GridLine;

export type Property$GridRowGap<TLength = string | 0> = Globals | TLength | string;

export type Property$GridRowStart = Globals | DataType$GridLine;

export type Property$GridTemplate = Globals | "none" | string;

export type Property$GridTemplateAreas = Globals | "none" | string;

export type Property$GridTemplateColumns<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | "none" | "subgrid" | string;

export type Property$GridTemplateRows<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | "none" | "subgrid" | string;

export type Property$HangingPunctuation = Globals | "allow-end" | "first" | "force-end" | "last" | "none" | string;

export type Property$Height<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fit-content"
  | "auto"
  | "fit-content"
  | "max-content"
  | "min-content"
  | string;

export type Property$HyphenateCharacter = Globals | "auto" | string;

export type Property$Hyphens = Globals | "auto" | "manual" | "none";

export type Property$ImageOrientation = Globals | "flip" | "from-image" | string;

export type Property$ImageRendering = Globals | "-moz-crisp-edges" | "-webkit-optimize-contrast" | "auto" | "crisp-edges" | "pixelated";

export type Property$ImageResolution = Globals | "from-image" | string;

export type Property$ImeMode = Globals | "active" | "auto" | "disabled" | "inactive" | "normal";

export type Property$InitialLetter = Globals | "normal" | string | number;

export type Property$InlineSize<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fill-available"
  | "auto"
  | "fit-content"
  | "max-content"
  | "min-content"
  | string;

export type Property$InputSecurity = Globals | "auto" | "none";

export type Property$Inset<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$InsetBlock<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$InsetBlockEnd<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$InsetBlockStart<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$InsetInline<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$InsetInlineEnd<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$InsetInlineStart<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$Isolation = Globals | "auto" | "isolate";

export type Property$JustifyContent = Globals | DataType$ContentDistribution | DataType$ContentPosition | "left" | "normal" | "right" | string;

export type Property$JustifyItems = Globals | DataType$SelfPosition | "baseline" | "left" | "legacy" | "normal" | "right" | "stretch" | string;

export type Property$JustifySelf = Globals | DataType$SelfPosition | "auto" | "baseline" | "left" | "normal" | "right" | "stretch" | string;

export type Property$JustifyTracks = Globals | DataType$ContentDistribution | DataType$ContentPosition | "left" | "normal" | "right" | string;

export type Property$Left<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$LetterSpacing<TLength = string | 0> = Globals | TLength | "normal";

export type Property$LineBreak = Globals | "anywhere" | "auto" | "loose" | "normal" | "strict";

export type Property$LineClamp = Globals | "none" | number;

export type Property$LineHeight<TLength = string | 0> = Globals | TLength | "normal" | string | number;

export type Property$LineHeightStep<TLength = string | 0> = Globals | TLength;

export type Property$ListStyle = Globals | "inside" | "none" | "outside" | string;

export type Property$ListStyleImage = Globals | "none" | string;

export type Property$ListStylePosition = Globals | "inside" | "outside";

export type Property$ListStyleType = Globals | "none" | string;

export type Property$Margin<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginBlock<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginBlockEnd<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginBlockStart<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginBottom<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginInline<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginInlineEnd<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginInlineStart<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginLeft<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginRight<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$MarginTop<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$Mask<TLength = string | 0> = Globals | DataType$MaskLayer<TLength> | string;

export type Property$MaskBorder = Globals | "alpha" | "luminance" | "none" | "repeat" | "round" | "space" | "stretch" | string | number;

export type Property$MaskBorderMode = Globals | "alpha" | "luminance";

export type Property$MaskBorderOutset<TLength = string | 0> = Globals | TLength | string | number;

export type Property$MaskBorderRepeat = Globals | "repeat" | "round" | "space" | "stretch" | string;

export type Property$MaskBorderSlice = Globals | string | number;

export type Property$MaskBorderSource = Globals | "none" | string;

export type Property$MaskBorderWidth<TLength = string | 0> = Globals | TLength | "auto" | string | number;

export type Property$MaskClip = Globals | DataType$GeometryBox | "no-clip" | string;

export type Property$MaskComposite = Globals | DataType$CompositingOperator | string;

export type Property$MaskImage = Globals | "none" | string;

export type Property$MaskMode = Globals | DataType$MaskingMode | string;

export type Property$MaskOrigin = Globals | DataType$GeometryBox | string;

export type Property$MaskPosition<TLength = string | 0> = Globals | DataType$Position<TLength> | string;

export type Property$MaskRepeat = Globals | DataType$RepeatStyle | string;

export type Property$MaskSize<TLength = string | 0> = Globals | DataType$BgSize<TLength> | string;

export type Property$MaskType = Globals | "alpha" | "luminance";

export type Property$MathDepth = Globals | "auto-add" | string | number;

export type Property$MathShift = Globals | "compact" | "normal";

export type Property$MathStyle = Globals | "compact" | "normal";

export type Property$MaxBlockSize<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fill-available"
  | "fit-content"
  | "max-content"
  | "min-content"
  | "none"
  | string;

export type Property$MaxHeight<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fit-content"
  | "-webkit-max-content"
  | "-webkit-min-content"
  | "fit-content"
  | "intrinsic"
  | "max-content"
  | "min-content"
  | "none"
  | string;

export type Property$MaxInlineSize<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fill-available"
  | "fit-content"
  | "max-content"
  | "min-content"
  | "none"
  | string;

export type Property$MaxLines = Globals | "none" | number;

export type Property$MaxWidth<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fit-content"
  | "-webkit-max-content"
  | "-webkit-min-content"
  | "fit-content"
  | "intrinsic"
  | "max-content"
  | "min-content"
  | "none"
  | string;

export type Property$MinBlockSize<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fill-available"
  | "auto"
  | "fit-content"
  | "max-content"
  | "min-content"
  | string;

export type Property$MinHeight<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fit-content"
  | "-webkit-max-content"
  | "-webkit-min-content"
  | "auto"
  | "fit-content"
  | "intrinsic"
  | "max-content"
  | "min-content"
  | string;

export type Property$MinInlineSize<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fill-available"
  | "auto"
  | "fit-content"
  | "max-content"
  | "min-content"
  | string;

export type Property$MinWidth<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fill-available"
  | "-webkit-fit-content"
  | "-webkit-max-content"
  | "-webkit-min-content"
  | "auto"
  | "fit-content"
  | "intrinsic"
  | "max-content"
  | "min-content"
  | "min-intrinsic"
  | string;

export type Property$MixBlendMode = Globals | DataType$BlendMode | "plus-lighter";

export type Property$Offset<TLength = string | 0> = Globals | DataType$Position<TLength> | DataType$GeometryBox | "auto" | "none" | string;

export type Property$OffsetDistance<TLength = string | 0> = Globals | TLength | string;

export type Property$OffsetPath = Globals | DataType$GeometryBox | "none" | string;

export type Property$OffsetRotate = Globals | "auto" | "reverse" | string;

export type Property$ObjectFit = Globals | "contain" | "cover" | "fill" | "none" | "scale-down";

export type Property$ObjectPosition<TLength = string | 0> = Globals | DataType$Position<TLength>;

export type Property$OffsetAnchor<TLength = string | 0> = Globals | DataType$Position<TLength> | "auto";

export type Property$Opacity = Globals | string | number;

export type Property$Order = Globals | number;

export type Property$Orphans = Globals | number;

export type Property$Outline<TLength = string | 0> = Globals | DataType$Color | DataType$LineStyle | DataType$LineWidth<TLength> | "auto" | "invert" | string;

export type Property$OutlineColor = Globals | DataType$Color | "invert";

export type Property$OutlineOffset<TLength = string | 0> = Globals | TLength;

export type Property$OutlineStyle = Globals | DataType$LineStyle | "auto" | string;

export type Property$OutlineWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;

export type Property$Overflow = Globals | "-moz-hidden-unscrollable" | "auto" | "clip" | "hidden" | "scroll" | "visible" | string;

export type Property$OverflowAnchor = Globals | "auto" | "none";

export type Property$OverflowBlock = Globals | "auto" | "clip" | "hidden" | "scroll" | "visible";

export type Property$OverflowClipBox = Globals | "content-box" | "padding-box";

export type Property$OverflowClipMargin<TLength = string | 0> = Globals | DataType$VisualBox | TLength | string;

export type Property$OverflowInline = Globals | "auto" | "clip" | "hidden" | "scroll" | "visible";

export type Property$OverflowWrap = Globals | "anywhere" | "break-word" | "normal";

export type Property$OverflowX = Globals | "-moz-hidden-unscrollable" | "auto" | "clip" | "hidden" | "scroll" | "visible";

export type Property$OverflowY = Globals | "-moz-hidden-unscrollable" | "auto" | "clip" | "hidden" | "scroll" | "visible";

export type Property$OverscrollBehavior = Globals | "auto" | "contain" | "none" | string;

export type Property$OverscrollBehaviorBlock = Globals | "auto" | "contain" | "none";

export type Property$OverscrollBehaviorInline = Globals | "auto" | "contain" | "none";

export type Property$OverscrollBehaviorX = Globals | "auto" | "contain" | "none";

export type Property$OverscrollBehaviorY = Globals | "auto" | "contain" | "none";

export type Property$Padding<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingBlock<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingBlockEnd<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingBlockStart<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingBottom<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingInline<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingInlineEnd<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingInlineStart<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingLeft<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingRight<TLength = string | 0> = Globals | TLength | string;

export type Property$PaddingTop<TLength = string | 0> = Globals | TLength | string;

export type Property$PageBreakAfter = Globals | "always" | "auto" | "avoid" | "left" | "recto" | "right" | "verso";

export type Property$PageBreakBefore = Globals | "always" | "auto" | "avoid" | "left" | "recto" | "right" | "verso";

export type Property$PageBreakInside = Globals | "auto" | "avoid";

export type Property$PaintOrder = Globals | "fill" | "markers" | "normal" | "stroke" | string;

export type Property$Perspective<TLength = string | 0> = Globals | TLength | "none";

export type Property$PerspectiveOrigin<TLength = string | 0> = Globals | DataType$Position<TLength>;

export type Property$PlaceContent = Globals | DataType$ContentDistribution | DataType$ContentPosition | "baseline" | "normal" | string;

export type Property$PlaceItems = Globals | DataType$SelfPosition | "baseline" | "normal" | "stretch" | string;

export type Property$PlaceSelf = Globals | DataType$SelfPosition | "auto" | "baseline" | "normal" | "stretch" | string;

export type Property$PointerEvents = Globals | "all" | "auto" | "fill" | "inherit" | "none" | "painted" | "stroke" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke";

export type Property$Position = Globals | "-webkit-sticky" | "absolute" | "fixed" | "relative" | "static" | "sticky";

export type Property$Quotes = Globals | "auto" | "none" | string;

export type Property$Resize = Globals | "block" | "both" | "horizontal" | "inline" | "none" | "vertical";

export type Property$Right<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$Rotate = Globals | "none" | string;

export type Property$RowGap<TLength = string | 0> = Globals | TLength | "normal" | string;

export type Property$RubyAlign = Globals | "center" | "space-around" | "space-between" | "start";

export type Property$RubyMerge = Globals | "auto" | "collapse" | "separate";

export type Property$RubyPosition = Globals | "alternate" | "inter-character" | "over" | "under" | string;

export type Property$Scale = Globals | "none" | string | number;

export type Property$ScrollBehavior = Globals | "auto" | "smooth";

export type Property$ScrollMargin<TLength = string | 0> = Globals | TLength | string;

export type Property$ScrollMarginBlock<TLength = string | 0> = Globals | TLength | string;

export type Property$ScrollMarginBlockEnd<TLength = string | 0> = Globals | TLength;

export type Property$ScrollMarginBlockStart<TLength = string | 0> = Globals | TLength;

export type Property$ScrollMarginBottom<TLength = string | 0> = Globals | TLength;

export type Property$ScrollMarginInline<TLength = string | 0> = Globals | TLength | string;

export type Property$ScrollMarginInlineEnd<TLength = string | 0> = Globals | TLength;

export type Property$ScrollMarginInlineStart<TLength = string | 0> = Globals | TLength;

export type Property$ScrollMarginLeft<TLength = string | 0> = Globals | TLength;

export type Property$ScrollMarginRight<TLength = string | 0> = Globals | TLength;

export type Property$ScrollMarginTop<TLength = string | 0> = Globals | TLength;

export type Property$ScrollPadding<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingBlock<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingBlockEnd<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingBlockStart<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingBottom<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingInline<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingInlineEnd<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingInlineStart<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingLeft<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingRight<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollPaddingTop<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$ScrollSnapAlign = Globals | "center" | "end" | "none" | "start" | string;

export type Property$ScrollSnapCoordinate<TLength = string | 0> = Globals | DataType$Position<TLength> | "none" | string;

export type Property$ScrollSnapDestination<TLength = string | 0> = Globals | DataType$Position<TLength>;

export type Property$ScrollSnapPointsX = Globals | "none" | string;

export type Property$ScrollSnapPointsY = Globals | "none" | string;

export type Property$ScrollSnapStop = Globals | "always" | "normal";

export type Property$ScrollSnapType = Globals | "block" | "both" | "inline" | "none" | "x" | "y" | string;

export type Property$ScrollSnapTypeX = Globals | "mandatory" | "none" | "proximity";

export type Property$ScrollSnapTypeY = Globals | "mandatory" | "none" | "proximity";

export type Property$ScrollbarColor = Globals | "auto" | string;

export type Property$ScrollbarGutter = Globals | "auto" | "stable" | string;

export type Property$ScrollbarWidth = Globals | "auto" | "none" | "thin";

export type Property$ShapeImageThreshold = Globals | string | number;

export type Property$ShapeMargin<TLength = string | 0> = Globals | TLength | string;

export type Property$ShapeOutside = Globals | DataType$Box | "margin-box" | "none" | string;

export type Property$TabSize<TLength = string | 0> = Globals | TLength | number;

export type Property$TableLayout = Globals | "auto" | "fixed";

export type Property$TextAlign = Globals | "center" | "end" | "justify" | "left" | "match-parent" | "right" | "start";

export type Property$TextAlignLast = Globals | "auto" | "center" | "end" | "justify" | "left" | "right" | "start";

export type Property$TextCombineUpright = Globals | "all" | "none" | string;

export type Property$TextDecoration<TLength = string | 0> =
  | Globals
  | DataType$Color
  | TLength
  | "auto"
  | "blink"
  | "dashed"
  | "dotted"
  | "double"
  | "from-font"
  | "grammar-error"
  | "line-through"
  | "none"
  | "overline"
  | "solid"
  | "spelling-error"
  | "underline"
  | "wavy"
  | string;

export type Property$TextDecorationColor = Globals | DataType$Color;

export type Property$TextDecorationLine = Globals | "blink" | "grammar-error" | "line-through" | "none" | "overline" | "spelling-error" | "underline" | string;

export type Property$TextDecorationSkip = Globals | "box-decoration" | "edges" | "leading-spaces" | "none" | "objects" | "spaces" | "trailing-spaces" | string;

export type Property$TextDecorationSkipInk = Globals | "all" | "auto" | "none";

export type Property$TextDecorationStyle = Globals | "dashed" | "dotted" | "double" | "solid" | "wavy";

export type Property$TextDecorationThickness<TLength = string | 0> = Globals | TLength | "auto" | "from-font" | string;

export type Property$TextEmphasis = Globals | DataType$Color | "circle" | "dot" | "double-circle" | "filled" | "none" | "open" | "sesame" | "triangle" | string;

export type Property$TextEmphasisColor = Globals | DataType$Color;

export type Property$TextEmphasisPosition = Globals | string;

export type Property$TextEmphasisStyle = Globals | "circle" | "dot" | "double-circle" | "filled" | "none" | "open" | "sesame" | "triangle" | string;

export type Property$TextIndent<TLength = string | 0> = Globals | TLength | string;

export type Property$TextJustify = Globals | "auto" | "inter-character" | "inter-word" | "none";

export type Property$TextOrientation = Globals | "mixed" | "sideways" | "upright";

export type Property$TextOverflow = Globals | "clip" | "ellipsis" | string;

export type Property$TextRendering = Globals | "auto" | "geometricPrecision" | "optimizeLegibility" | "optimizeSpeed";

export type Property$TextShadow = Globals | "none" | string;

export type Property$TextSizeAdjust = Globals | "auto" | "none" | string;

export type Property$TextTransform = Globals | "capitalize" | "full-size-kana" | "full-width" | "lowercase" | "none" | "uppercase";

export type Property$TextUnderlineOffset<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$TextUnderlinePosition = Globals | "auto" | "from-font" | "left" | "right" | "under" | string;

export type Property$Top<TLength = string | 0> = Globals | TLength | "auto" | string;

export type Property$TouchAction =
  | Globals
  | "-ms-manipulation"
  | "-ms-none"
  | "-ms-pinch-zoom"
  | "auto"
  | "manipulation"
  | "none"
  | "pan-down"
  | "pan-left"
  | "pan-right"
  | "pan-up"
  | "pan-x"
  | "pan-y"
  | "pinch-zoom"
  | string;

export type Property$Transform = Globals | "none" | string;

export type Property$TransformBox = Globals | "border-box" | "content-box" | "fill-box" | "stroke-box" | "view-box";

export type Property$TransformOrigin<TLength = string | 0> = Globals | TLength | "bottom" | "center" | "left" | "right" | "top" | string;

export type Property$TransformStyle = Globals | "flat" | "preserve-3d";

export type Property$Transition<TTime = string> = Globals | DataType$SingleTransition<TTime> | string;

export type Property$TransitionDelay<TTime = string> = Globals | TTime | string;

export type Property$TransitionDuration<TTime = string> = Globals | TTime | string;

export type Property$TransitionProperty = Globals | "all" | "none" | string;

export type Property$TransitionTimingFunction = Globals | DataType$EasingFunction | string;

export type Property$Translate<TLength = string | 0> = Globals | TLength | "none" | string;

export type Property$UnicodeBidi =
  | Globals
  | "-moz-isolate"
  | "-moz-isolate-override"
  | "-moz-plaintext"
  | "-webkit-isolate"
  | "-webkit-isolate-override"
  | "-webkit-plaintext"
  | "bidi-override"
  | "embed"
  | "isolate"
  | "isolate-override"
  | "normal"
  | "plaintext";

export type Property$UserSelect = Globals | "-moz-none" | "all" | "auto" | "contain" | "element" | "none" | "text";

export type Property$VerticalAlign<TLength = string | 0> = Globals | TLength | "baseline" | "bottom" | "middle" | "sub" | "super" | "text-bottom" | "text-top" | "top" | string;

export type Property$Visibility = Globals | "collapse" | "hidden" | "visible";

export type Property$WhiteSpace = Globals | "-moz-pre-wrap" | "break-spaces" | "normal" | "nowrap" | "pre" | "pre-line" | "pre-wrap";

export type Property$Widows = Globals | number;

export type Property$Width<TLength = string | 0> =
  | Globals
  | TLength
  | "-moz-fit-content"
  | "-moz-max-content"
  | "-moz-min-content"
  | "-webkit-fit-content"
  | "-webkit-max-content"
  | "auto"
  | "fit-content"
  | "intrinsic"
  | "max-content"
  | "min-content"
  | "min-intrinsic"
  | string;

export type Property$WillChange = Globals | DataType$AnimateableFeature | "auto" | string;

export type Property$WordBreak = Globals | "break-all" | "break-word" | "keep-all" | "normal";

export type Property$WordSpacing<TLength = string | 0> = Globals | TLength | "normal";

export type Property$WordWrap = Globals | "break-word" | "normal";

export type Property$WritingMode = Globals | "horizontal-tb" | "sideways-lr" | "sideways-rl" | "vertical-lr" | "vertical-rl";

export type Property$ZIndex = Globals | "auto" | number;

export type Property$Zoom = Globals | "normal" | "reset" | string | number;

export type Property$MozAppearance =
  | Globals
  | "-moz-mac-unified-toolbar"
  | "-moz-win-borderless-glass"
  | "-moz-win-browsertabbar-toolbox"
  | "-moz-win-communications-toolbox"
  | "-moz-win-communicationstext"
  | "-moz-win-exclude-glass"
  | "-moz-win-glass"
  | "-moz-win-media-toolbox"
  | "-moz-win-mediatext"
  | "-moz-window-button-box"
  | "-moz-window-button-box-maximized"
  | "-moz-window-button-close"
  | "-moz-window-button-maximize"
  | "-moz-window-button-minimize"
  | "-moz-window-button-restore"
  | "-moz-window-frame-bottom"
  | "-moz-window-frame-left"
  | "-moz-window-frame-right"
  | "-moz-window-titlebar"
  | "-moz-window-titlebar-maximized"
  | "button"
  | "button-arrow-down"
  | "button-arrow-next"
  | "button-arrow-previous"
  | "button-arrow-up"
  | "button-bevel"
  | "button-focus"
  | "caret"
  | "checkbox"
  | "checkbox-container"
  | "checkbox-label"
  | "checkmenuitem"
  | "dualbutton"
  | "groupbox"
  | "listbox"
  | "listitem"
  | "menuarrow"
  | "menubar"
  | "menucheckbox"
  | "menuimage"
  | "menuitem"
  | "menuitemtext"
  | "menulist"
  | "menulist-button"
  | "menulist-text"
  | "menulist-textfield"
  | "menupopup"
  | "menuradio"
  | "menuseparator"
  | "meterbar"
  | "meterchunk"
  | "none"
  | "progressbar"
  | "progressbar-vertical"
  | "progresschunk"
  | "progresschunk-vertical"
  | "radio"
  | "radio-container"
  | "radio-label"
  | "radiomenuitem"
  | "range"
  | "range-thumb"
  | "resizer"
  | "resizerpanel"
  | "scale-horizontal"
  | "scale-vertical"
  | "scalethumb-horizontal"
  | "scalethumb-vertical"
  | "scalethumbend"
  | "scalethumbstart"
  | "scalethumbtick"
  | "scrollbarbutton-down"
  | "scrollbarbutton-left"
  | "scrollbarbutton-right"
  | "scrollbarbutton-up"
  | "scrollbarthumb-horizontal"
  | "scrollbarthumb-vertical"
  | "scrollbartrack-horizontal"
  | "scrollbartrack-vertical"
  | "searchfield"
  | "separator"
  | "sheet"
  | "spinner"
  | "spinner-downbutton"
  | "spinner-textfield"
  | "spinner-upbutton"
  | "splitter"
  | "statusbar"
  | "statusbarpanel"
  | "tab"
  | "tab-scroll-arrow-back"
  | "tab-scroll-arrow-forward"
  | "tabpanel"
  | "tabpanels"
  | "textfield"
  | "textfield-multiline"
  | "toolbar"
  | "toolbarbutton"
  | "toolbarbutton-dropdown"
  | "toolbargripper"
  | "toolbox"
  | "tooltip"
  | "treeheader"
  | "treeheadercell"
  | "treeheadersortarrow"
  | "treeitem"
  | "treeline"
  | "treetwisty"
  | "treetwistyopen"
  | "treeview";

export type Property$MozBinding = Globals | "none" | string;

export type Property$MozBorderBottomColors = Globals | DataType$Color | "none" | string;

export type Property$MozBorderLeftColors = Globals | DataType$Color | "none" | string;

export type Property$MozBorderRightColors = Globals | DataType$Color | "none" | string;

export type Property$MozBorderTopColors = Globals | DataType$Color | "none" | string;

export type Property$MozContextProperties = Globals | "fill" | "fill-opacity" | "none" | "stroke" | "stroke-opacity" | string;

export type Property$MozFloatEdge = Globals | "border-box" | "content-box" | "margin-box" | "padding-box";

export type Property$MozForceBrokenImageIcon = Globals | 0 | 1;

export type Property$MozImageRegion = Globals | "auto" | string;

export type Property$MozOrient = Globals | "block" | "horizontal" | "inline" | "vertical";

export type Property$MozOutlineRadius<TLength = string | 0> = Globals | TLength | string;

export type Property$MozOutlineRadiusBottomleft<TLength = string | 0> = Globals | TLength | string;

export type Property$MozOutlineRadiusBottomright<TLength = string | 0> = Globals | TLength | string;

export type Property$MozOutlineRadiusTopleft<TLength = string | 0> = Globals | TLength | string;

export type Property$MozOutlineRadiusTopright<TLength = string | 0> = Globals | TLength | string;

export type Property$MozStackSizing = Globals | "ignore" | "stretch-to-fit";

export type Property$MozTextBlink = Globals | "blink" | "none";

export type Property$MozUserFocus = Globals | "ignore" | "none" | "normal" | "select-after" | "select-all" | "select-before" | "select-menu" | "select-same";

export type Property$MozUserInput = Globals | "auto" | "disabled" | "enabled" | "none";

export type Property$MozUserModify = Globals | "read-only" | "read-write" | "write-only";

export type Property$MozWindowDragging = Globals | "drag" | "no-drag";

export type Property$MozWindowShadow = Globals | "default" | "menu" | "none" | "sheet" | "tooltip";

export type Property$MsAccelerator = Globals | "false" | "true";

export type Property$MsBlockProgression = Globals | "bt" | "lr" | "rl" | "tb";

export type Property$MsContentZoomChaining = Globals | "chained" | "none";

export type Property$MsContentZoomLimit = Globals | string;

export type Property$MsContentZoomLimitMax = Globals | string;

export type Property$MsContentZoomLimitMin = Globals | string;

export type Property$MsContentZoomSnap = Globals | "mandatory" | "none" | "proximity" | string;

export type Property$MsContentZoomSnapPoints = Globals | string;

export type Property$MsContentZoomSnapType = Globals | "mandatory" | "none" | "proximity";

export type Property$MsContentZooming = Globals | "none" | "zoom";

export type Property$MsFilter = Globals | string;

export type Property$MsFlowFrom = Globals | "none" | string;

export type Property$MsFlowInto = Globals | "none" | string;

export type Property$MsGridColumns<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | "none" | string;

export type Property$MsGridRows<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | "none" | string;

export type Property$MsHighContrastAdjust = Globals | "auto" | "none";

export type Property$MsHyphenateLimitChars = Globals | "auto" | string | number;

export type Property$MsHyphenateLimitLines = Globals | "no-limit" | number;

export type Property$MsHyphenateLimitZone<TLength = string | 0> = Globals | TLength | string;

export type Property$MsImeAlign = Globals | "after" | "auto";

export type Property$MsOverflowStyle = Globals | "-ms-autohiding-scrollbar" | "auto" | "none" | "scrollbar";

export type Property$MsScrollChaining = Globals | "chained" | "none";

export type Property$MsScrollLimit = Globals | string;

export type Property$MsScrollLimitXMax<TLength = string | 0> = Globals | TLength | "auto";

export type Property$MsScrollLimitXMin<TLength = string | 0> = Globals | TLength;

export type Property$MsScrollLimitYMax<TLength = string | 0> = Globals | TLength | "auto";

export type Property$MsScrollLimitYMin<TLength = string | 0> = Globals | TLength;

export type Property$MsScrollRails = Globals | "none" | "railed";

export type Property$MsScrollSnapPointsX = Globals | string;

export type Property$MsScrollSnapPointsY = Globals | string;

export type Property$MsScrollSnapType = Globals | "mandatory" | "none" | "proximity";

export type Property$MsScrollSnapX = Globals | string;

export type Property$MsScrollSnapY = Globals | string;

export type Property$MsScrollTranslation = Globals | "none" | "vertical-to-horizontal";

export type Property$MsScrollbar3dlightColor = Globals | DataType$Color;

export type Property$MsScrollbarArrowColor = Globals | DataType$Color;

export type Property$MsScrollbarBaseColor = Globals | DataType$Color;

export type Property$MsScrollbarDarkshadowColor = Globals | DataType$Color;

export type Property$MsScrollbarFaceColor = Globals | DataType$Color;

export type Property$MsScrollbarHighlightColor = Globals | DataType$Color;

export type Property$MsScrollbarShadowColor = Globals | DataType$Color;

export type Property$MsScrollbarTrackColor = Globals | DataType$Color;

export type Property$MsTextAutospace = Globals | "ideograph-alpha" | "ideograph-numeric" | "ideograph-parenthesis" | "ideograph-space" | "none";

export type Property$MsTouchSelect = Globals | "grippers" | "none";

export type Property$MsUserSelect = Globals | "element" | "none" | "text";

export type Property$MsWrapFlow = Globals | "auto" | "both" | "clear" | "end" | "maximum" | "start";

export type Property$MsWrapMargin<TLength = string | 0> = Globals | TLength;

export type Property$MsWrapThrough = Globals | "none" | "wrap";

export type Property$WebkitAppearance =
  | Globals
  | "-apple-pay-button"
  | "button"
  | "button-bevel"
  | "caret"
  | "checkbox"
  | "default-button"
  | "inner-spin-button"
  | "listbox"
  | "listitem"
  | "media-controls-background"
  | "media-controls-fullscreen-background"
  | "media-current-time-display"
  | "media-enter-fullscreen-button"
  | "media-exit-fullscreen-button"
  | "media-fullscreen-button"
  | "media-mute-button"
  | "media-overlay-play-button"
  | "media-play-button"
  | "media-seek-back-button"
  | "media-seek-forward-button"
  | "media-slider"
  | "media-sliderthumb"
  | "media-time-remaining-display"
  | "media-toggle-closed-captions-button"
  | "media-volume-slider"
  | "media-volume-slider-container"
  | "media-volume-sliderthumb"
  | "menulist"
  | "menulist-button"
  | "menulist-text"
  | "menulist-textfield"
  | "meter"
  | "none"
  | "progress-bar"
  | "progress-bar-value"
  | "push-button"
  | "radio"
  | "searchfield"
  | "searchfield-cancel-button"
  | "searchfield-decoration"
  | "searchfield-results-button"
  | "searchfield-results-decoration"
  | "slider-horizontal"
  | "slider-vertical"
  | "sliderthumb-horizontal"
  | "sliderthumb-vertical"
  | "square-button"
  | "textarea"
  | "textfield";

export type Property$WebkitBorderBefore<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;

export type Property$WebkitBorderBeforeColor = Globals | DataType$Color;

export type Property$WebkitBorderBeforeStyle = Globals | DataType$LineStyle | string;

export type Property$WebkitBorderBeforeWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | string;

export type Property$WebkitBoxReflect<TLength = string | 0> = Globals | TLength | "above" | "below" | "left" | "right" | string;

export type Property$WebkitLineClamp = Globals | "none" | number;

export type Property$WebkitMask<TLength = string | 0> =
  | Globals
  | DataType$Position<TLength>
  | DataType$RepeatStyle
  | DataType$Box
  | "border"
  | "content"
  | "none"
  | "padding"
  | "text"
  | string;

export type Property$WebkitMaskAttachment = Globals | DataType$Attachment | string;

export type Property$WebkitMaskClip = Globals | DataType$Box | "border" | "content" | "padding" | "text" | string;

export type Property$WebkitMaskComposite = Globals | DataType$CompositeStyle | string;

export type Property$WebkitMaskImage = Globals | "none" | string;

export type Property$WebkitMaskOrigin = Globals | DataType$Box | "border" | "content" | "padding" | string;

export type Property$WebkitMaskPosition<TLength = string | 0> = Globals | DataType$Position<TLength> | string;

export type Property$WebkitMaskPositionX<TLength = string | 0> = Globals | TLength | "center" | "left" | "right" | string;

export type Property$WebkitMaskPositionY<TLength = string | 0> = Globals | TLength | "bottom" | "center" | "top" | string;

export type Property$WebkitMaskRepeat = Globals | DataType$RepeatStyle | string;

export type Property$WebkitMaskRepeatX = Globals | "no-repeat" | "repeat" | "round" | "space";

export type Property$WebkitMaskRepeatY = Globals | "no-repeat" | "repeat" | "round" | "space";

export type Property$WebkitMaskSize<TLength = string | 0> = Globals | DataType$BgSize<TLength> | string;

export type Property$WebkitOverflowScrolling = Globals | "auto" | "touch";

export type Property$WebkitTapHighlightColor = Globals | DataType$Color;

export type Property$WebkitTextFillColor = Globals | DataType$Color;

export type Property$WebkitTextStroke<TLength = string | 0> = Globals | DataType$Color | TLength | string;

export type Property$WebkitTextStrokeColor = Globals | DataType$Color;

export type Property$WebkitTextStrokeWidth<TLength = string | 0> = Globals | TLength;

export type Property$WebkitTouchCallout = Globals | "default" | "none";

export type Property$WebkitUserModify = Globals | "read-only" | "read-write" | "read-write-plaintext-only";

export type Property$AlignmentBaseline =
  | Globals
  | "after-edge"
  | "alphabetic"
  | "auto"
  | "baseline"
  | "before-edge"
  | "central"
  | "hanging"
  | "ideographic"
  | "mathematical"
  | "middle"
  | "text-after-edge"
  | "text-before-edge";

export type Property$BaselineShift<TLength = string | 0> = Globals | TLength | "baseline" | "sub" | "super" | string;

export type Property$ClipRule = Globals | "evenodd" | "nonzero";

export type Property$ColorInterpolation = Globals | "auto" | "linearRGB" | "sRGB";

export type Property$ColorRendering = Globals | "auto" | "optimizeQuality" | "optimizeSpeed";

export type Property$DominantBaseline =
  | Globals
  | "alphabetic"
  | "auto"
  | "central"
  | "hanging"
  | "ideographic"
  | "mathematical"
  | "middle"
  | "no-change"
  | "reset-size"
  | "text-after-edge"
  | "text-before-edge"
  | "use-script";

export type Property$Fill = Globals | DataType$Paint;

export type Property$FillOpacity = Globals | number;

export type Property$FillRule = Globals | "evenodd" | "nonzero";

export type Property$FloodColor = Globals | DataType$Color | "currentColor";

export type Property$FloodOpacity = Globals | number;

export type Property$GlyphOrientationVertical = Globals | "auto" | string | number;

export type Property$LightingColor = Globals | DataType$Color | "currentColor";

export type Property$Marker = Globals | "none" | string;

export type Property$MarkerEnd = Globals | "none" | string;

export type Property$MarkerMid = Globals | "none" | string;

export type Property$MarkerStart = Globals | "none" | string;

export type Property$ShapeRendering = Globals | "auto" | "crispEdges" | "geometricPrecision" | "optimizeSpeed";

export type Property$StopColor = Globals | DataType$Color | "currentColor";

export type Property$StopOpacity = Globals | number;

export type Property$Stroke = Globals | DataType$Paint;

export type Property$StrokeDasharray<TLength = string | 0> = Globals | DataType$Dasharray<TLength> | "none";

export type Property$StrokeDashoffset<TLength = string | 0> = Globals | TLength | string;

export type Property$StrokeLinecap = Globals | "butt" | "round" | "square";

export type Property$StrokeLinejoin = Globals | "bevel" | "miter" | "round";

export type Property$StrokeMiterlimit = Globals | number;

export type Property$StrokeOpacity = Globals | number;

export type Property$StrokeWidth<TLength = string | 0> = Globals | TLength | string;

export type Property$TextAnchor = Globals | "end" | "middle" | "start";

export type Property$VectorEffect = Globals | "non-scaling-stroke" | "none";

export type AtRule$CounterStyle<TLength = string | 0, TTime = string> = {|
  additiveSymbols?: string,
  fallback?: string,
  negative?: string,
  pad?: string,
  prefix?: string,
  range?: AtRule$Range,
  speakAs?: AtRule$SpeakAs,
  suffix?: string,
  symbols?: string,
  system?: AtRule$System,
|};

export type AtRule$CounterStyleHyphen<TLength = string | 0, TTime = string> = {|
  "additive-symbols"?: string,
  fallback?: string,
  negative?: string,
  pad?: string,
  prefix?: string,
  range?: AtRule$Range,
  "speak-as"?: AtRule$SpeakAs,
  suffix?: string,
  symbols?: string,
  system?: AtRule$System,
|};

export type AtRule$CounterStyleFallback<TLength = string | 0, TTime = string> = {|
  additiveSymbols?: string | Array<string>,
  fallback?: string | Array<string>,
  negative?: string | Array<string>,
  pad?: string | Array<string>,
  prefix?: string | Array<string>,
  range?: AtRule$Range | Array<AtRule$Range>,
  speakAs?: AtRule$SpeakAs | Array<AtRule$SpeakAs>,
  suffix?: string | Array<string>,
  symbols?: string | Array<string>,
  system?: AtRule$System | Array<AtRule$System>,
|};

export type AtRule$CounterStyleHyphenFallback<TLength = string | 0, TTime = string> = {|
  "additive-symbols"?: string | Array<string>,
  fallback?: string | Array<string>,
  negative?: string | Array<string>,
  pad?: string | Array<string>,
  prefix?: string | Array<string>,
  range?: AtRule$Range | Array<AtRule$Range>,
  "speak-as"?: AtRule$SpeakAs | Array<AtRule$SpeakAs>,
  suffix?: string | Array<string>,
  symbols?: string | Array<string>,
  system?: AtRule$System | Array<AtRule$System>,
|};

export type AtRule$FontFace<TLength = string | 0, TTime = string> = {|
  MozFontFeatureSettings?: AtRule$FontFeatureSettings,
  ascentOverride?: AtRule$AscentOverride,
  descentOverride?: AtRule$DescentOverride,
  fontDisplay?: AtRule$FontDisplay,
  fontFamily?: string,
  fontFeatureSettings?: AtRule$FontFeatureSettings,
  fontStretch?: AtRule$FontStretch,
  fontStyle?: AtRule$FontStyle,
  fontVariant?: AtRule$FontVariant,
  fontVariationSettings?: AtRule$FontVariationSettings,
  fontWeight?: AtRule$FontWeight,
  lineGapOverride?: AtRule$LineGapOverride,
  sizeAdjust?: string,
  src?: string,
  unicodeRange?: string,
|};

export type AtRule$FontFaceHyphen<TLength = string | 0, TTime = string> = {|
  "-moz-font-feature-settings"?: AtRule$FontFeatureSettings,
  "ascent-override"?: AtRule$AscentOverride,
  "descent-override"?: AtRule$DescentOverride,
  "font-display"?: AtRule$FontDisplay,
  "font-family"?: string,
  "font-feature-settings"?: AtRule$FontFeatureSettings,
  "font-stretch"?: AtRule$FontStretch,
  "font-style"?: AtRule$FontStyle,
  "font-variant"?: AtRule$FontVariant,
  "font-variation-settings"?: AtRule$FontVariationSettings,
  "font-weight"?: AtRule$FontWeight,
  "line-gap-override"?: AtRule$LineGapOverride,
  "size-adjust"?: string,
  src?: string,
  "unicode-range"?: string,
|};

export type AtRule$FontFaceFallback<TLength = string | 0, TTime = string> = {|
  MozFontFeatureSettings?: AtRule$FontFeatureSettings | Array<AtRule$FontFeatureSettings>,
  ascentOverride?: AtRule$AscentOverride | Array<AtRule$AscentOverride>,
  descentOverride?: AtRule$DescentOverride | Array<AtRule$DescentOverride>,
  fontDisplay?: AtRule$FontDisplay | Array<AtRule$FontDisplay>,
  fontFamily?: string | Array<string>,
  fontFeatureSettings?: AtRule$FontFeatureSettings | Array<AtRule$FontFeatureSettings>,
  fontStretch?: AtRule$FontStretch | Array<AtRule$FontStretch>,
  fontStyle?: AtRule$FontStyle | Array<AtRule$FontStyle>,
  fontVariant?: AtRule$FontVariant | Array<AtRule$FontVariant>,
  fontVariationSettings?: AtRule$FontVariationSettings | Array<AtRule$FontVariationSettings>,
  fontWeight?: AtRule$FontWeight | Array<AtRule$FontWeight>,
  lineGapOverride?: AtRule$LineGapOverride | Array<AtRule$LineGapOverride>,
  sizeAdjust?: string | Array<string>,
  src?: string | Array<string>,
  unicodeRange?: string | Array<string>,
|};

export type AtRule$FontFaceHyphenFallback<TLength = string | 0, TTime = string> = {|
  "-moz-font-feature-settings"?: AtRule$FontFeatureSettings | Array<AtRule$FontFeatureSettings>,
  "ascent-override"?: AtRule$AscentOverride | Array<AtRule$AscentOverride>,
  "descent-override"?: AtRule$DescentOverride | Array<AtRule$DescentOverride>,
  "font-display"?: AtRule$FontDisplay | Array<AtRule$FontDisplay>,
  "font-family"?: string | Array<string>,
  "font-feature-settings"?: AtRule$FontFeatureSettings | Array<AtRule$FontFeatureSettings>,
  "font-stretch"?: AtRule$FontStretch | Array<AtRule$FontStretch>,
  "font-style"?: AtRule$FontStyle | Array<AtRule$FontStyle>,
  "font-variant"?: AtRule$FontVariant | Array<AtRule$FontVariant>,
  "font-variation-settings"?: AtRule$FontVariationSettings | Array<AtRule$FontVariationSettings>,
  "font-weight"?: AtRule$FontWeight | Array<AtRule$FontWeight>,
  "line-gap-override"?: AtRule$LineGapOverride | Array<AtRule$LineGapOverride>,
  "size-adjust"?: string | Array<string>,
  src?: string | Array<string>,
  "unicode-range"?: string | Array<string>,
|};

export type AtRule$Page<TLength = string | 0, TTime = string> = {|
  bleed?: AtRule$Bleed<TLength>,
  marks?: AtRule$Marks,
  size?: AtRule$Size<TLength>,
|};

export type AtRule$PageHyphen<TLength = string | 0, TTime = string> = {|
  bleed?: AtRule$Bleed<TLength>,
  marks?: AtRule$Marks,
  size?: AtRule$Size<TLength>,
|};

export type AtRule$PageFallback<TLength = string | 0, TTime = string> = {|
  bleed?: AtRule$Bleed<TLength> | Array<AtRule$Bleed<TLength>>,
  marks?: AtRule$Marks | Array<AtRule$Marks>,
  size?: AtRule$Size<TLength> | Array<AtRule$Size<TLength>>,
|};

export type AtRule$PageHyphenFallback<TLength = string | 0, TTime = string> = {|
  bleed?: AtRule$Bleed<TLength> | Array<AtRule$Bleed<TLength>>,
  marks?: AtRule$Marks | Array<AtRule$Marks>,
  size?: AtRule$Size<TLength> | Array<AtRule$Size<TLength>>,
|};

export type AtRule$Property<TLength = string | 0, TTime = string> = {|
  inherits?: AtRule$Inherits,
  initialValue?: string,
  syntax?: string,
|};

export type AtRule$PropertyHyphen<TLength = string | 0, TTime = string> = {|
  inherits?: AtRule$Inherits,
  "initial-value"?: string,
  syntax?: string,
|};

export type AtRule$PropertyFallback<TLength = string | 0, TTime = string> = {|
  inherits?: AtRule$Inherits | Array<AtRule$Inherits>,
  initialValue?: string | Array<string>,
  syntax?: string | Array<string>,
|};

export type AtRule$PropertyHyphenFallback<TLength = string | 0, TTime = string> = {|
  inherits?: AtRule$Inherits | Array<AtRule$Inherits>,
  "initial-value"?: string | Array<string>,
  syntax?: string | Array<string>,
|};

export type AtRule$Viewport<TLength = string | 0, TTime = string> = {|
  height?: AtRule$Height<TLength>,
  maxHeight?: AtRule$MaxHeight<TLength>,
  maxWidth?: AtRule$MaxWidth<TLength>,
  maxZoom?: AtRule$MaxZoom,
  minHeight?: AtRule$MinHeight<TLength>,
  minWidth?: AtRule$MinWidth<TLength>,
  minZoom?: AtRule$MinZoom,
  orientation?: AtRule$Orientation,
  userZoom?: AtRule$UserZoom,
  viewportFit?: AtRule$ViewportFit,
  width?: AtRule$Width<TLength>,
  zoom?: AtRule$Zoom,
|};

export type AtRule$ViewportHyphen<TLength = string | 0, TTime = string> = {|
  height?: AtRule$Height<TLength>,
  "max-height"?: AtRule$MaxHeight<TLength>,
  "max-width"?: AtRule$MaxWidth<TLength>,
  "max-zoom"?: AtRule$MaxZoom,
  "min-height"?: AtRule$MinHeight<TLength>,
  "min-width"?: AtRule$MinWidth<TLength>,
  "min-zoom"?: AtRule$MinZoom,
  orientation?: AtRule$Orientation,
  "user-zoom"?: AtRule$UserZoom,
  "viewport-fit"?: AtRule$ViewportFit,
  width?: AtRule$Width<TLength>,
  zoom?: AtRule$Zoom,
|};

export type AtRule$ViewportFallback<TLength = string | 0, TTime = string> = {|
  height?: AtRule$Height<TLength> | Array<AtRule$Height<TLength>>,
  maxHeight?: AtRule$MaxHeight<TLength> | Array<AtRule$MaxHeight<TLength>>,
  maxWidth?: AtRule$MaxWidth<TLength> | Array<AtRule$MaxWidth<TLength>>,
  maxZoom?: AtRule$MaxZoom | Array<AtRule$MaxZoom>,
  minHeight?: AtRule$MinHeight<TLength> | Array<AtRule$MinHeight<TLength>>,
  minWidth?: AtRule$MinWidth<TLength> | Array<AtRule$MinWidth<TLength>>,
  minZoom?: AtRule$MinZoom | Array<AtRule$MinZoom>,
  orientation?: AtRule$Orientation | Array<AtRule$Orientation>,
  userZoom?: AtRule$UserZoom | Array<AtRule$UserZoom>,
  viewportFit?: AtRule$ViewportFit | Array<AtRule$ViewportFit>,
  width?: AtRule$Width<TLength> | Array<AtRule$Width<TLength>>,
  zoom?: AtRule$Zoom | Array<AtRule$Zoom>,
|};

export type AtRule$ViewportHyphenFallback<TLength = string | 0, TTime = string> = {|
  height?: AtRule$Height<TLength> | Array<AtRule$Height<TLength>>,
  "max-height"?: AtRule$MaxHeight<TLength> | Array<AtRule$MaxHeight<TLength>>,
  "max-width"?: AtRule$MaxWidth<TLength> | Array<AtRule$MaxWidth<TLength>>,
  "max-zoom"?: AtRule$MaxZoom | Array<AtRule$MaxZoom>,
  "min-height"?: AtRule$MinHeight<TLength> | Array<AtRule$MinHeight<TLength>>,
  "min-width"?: AtRule$MinWidth<TLength> | Array<AtRule$MinWidth<TLength>>,
  "min-zoom"?: AtRule$MinZoom | Array<AtRule$MinZoom>,
  orientation?: AtRule$Orientation | Array<AtRule$Orientation>,
  "user-zoom"?: AtRule$UserZoom | Array<AtRule$UserZoom>,
  "viewport-fit"?: AtRule$ViewportFit | Array<AtRule$ViewportFit>,
  width?: AtRule$Width<TLength> | Array<AtRule$Width<TLength>>,
  zoom?: AtRule$Zoom | Array<AtRule$Zoom>,
|};

type AtRule$Range = "auto" | string;

type AtRule$SpeakAs = "auto" | "bullets" | "numbers" | "spell-out" | "words" | string;

type AtRule$System = "additive" | "alphabetic" | "cyclic" | "fixed" | "numeric" | "symbolic" | string;

type AtRule$FontFeatureSettings = "normal" | string;

type AtRule$AscentOverride = "normal" | string;

type AtRule$DescentOverride = "normal" | string;

type AtRule$FontDisplay = "auto" | "block" | "fallback" | "optional" | "swap";

type AtRule$FontStretch = DataType$FontStretchAbsolute | string;

type AtRule$FontStyle = "italic" | "normal" | "oblique" | string;

type AtRule$FontVariant =
  | DataType$EastAsianVariantValues
  | "all-petite-caps"
  | "all-small-caps"
  | "common-ligatures"
  | "contextual"
  | "diagonal-fractions"
  | "discretionary-ligatures"
  | "full-width"
  | "historical-forms"
  | "historical-ligatures"
  | "lining-nums"
  | "no-common-ligatures"
  | "no-contextual"
  | "no-discretionary-ligatures"
  | "no-historical-ligatures"
  | "none"
  | "normal"
  | "oldstyle-nums"
  | "ordinal"
  | "petite-caps"
  | "proportional-nums"
  | "proportional-width"
  | "ruby"
  | "slashed-zero"
  | "small-caps"
  | "stacked-fractions"
  | "tabular-nums"
  | "titling-caps"
  | "unicase"
  | string;

type AtRule$FontVariationSettings = "normal" | string;

type AtRule$FontWeight = DataType$FontWeightAbsolute | string;

type AtRule$LineGapOverride = "normal" | string;

type AtRule$Bleed<TLength> = TLength | "auto";

type AtRule$Marks = "crop" | "cross" | "none" | string;

type AtRule$Size<TLength> = DataType$PageSize | TLength | "auto" | "landscape" | "portrait" | string;

type AtRule$Inherits = "false" | "true";

type AtRule$Height<TLength> = DataType$ViewportLength<TLength> | string;

type AtRule$MaxHeight<TLength> = DataType$ViewportLength<TLength>;

type AtRule$MaxWidth<TLength> = DataType$ViewportLength<TLength>;

type AtRule$MaxZoom = "auto" | string | number;

type AtRule$MinHeight<TLength> = DataType$ViewportLength<TLength>;

type AtRule$MinWidth<TLength> = DataType$ViewportLength<TLength>;

type AtRule$MinZoom = "auto" | string | number;

type AtRule$Orientation = "auto" | "landscape" | "portrait";

type AtRule$UserZoom = "fixed" | "zoom";

type AtRule$ViewportFit = "auto" | "contain" | "cover";

type AtRule$Width<TLength> = DataType$ViewportLength<TLength> | string;

type AtRule$Zoom = "auto" | string | number;

type DataType$AbsoluteSize = "large" | "medium" | "small" | "x-large" | "x-small" | "xx-large" | "xx-small" | "xxx-large";

type DataType$AnimateableFeature = "contents" | "scroll-position" | string;

type DataType$Attachment = "fixed" | "local" | "scroll";

type DataType$BgPosition<TLength> = TLength | "bottom" | "center" | "left" | "right" | "top" | string;

type DataType$BgSize<TLength> = TLength | "auto" | "contain" | "cover" | string;

type DataType$BlendMode =
  | "color"
  | "color-burn"
  | "color-dodge"
  | "darken"
  | "difference"
  | "exclusion"
  | "hard-light"
  | "hue"
  | "lighten"
  | "luminosity"
  | "multiply"
  | "normal"
  | "overlay"
  | "saturation"
  | "screen"
  | "soft-light";

type DataType$Box = "border-box" | "content-box" | "padding-box";

type DataType$Color = DataType$NamedColor | DataType$DeprecatedSystemColor | "currentcolor" | string;

type DataType$CompatAuto =
  | "button"
  | "checkbox"
  | "listbox"
  | "menulist"
  | "meter"
  | "progress-bar"
  | "push-button"
  | "radio"
  | "searchfield"
  | "slider-horizontal"
  | "square-button"
  | "textarea";

type DataType$CompositeStyle =
  | "clear"
  | "copy"
  | "destination-atop"
  | "destination-in"
  | "destination-out"
  | "destination-over"
  | "source-atop"
  | "source-in"
  | "source-out"
  | "source-over"
  | "xor";

type DataType$CompositingOperator = "add" | "exclude" | "intersect" | "subtract";

type DataType$ContentDistribution = "space-around" | "space-between" | "space-evenly" | "stretch";

type DataType$ContentList = DataType$Quote | "contents" | string;

type DataType$ContentPosition = "center" | "end" | "flex-end" | "flex-start" | "start";

type DataType$CubicBezierTimingFunction = "ease" | "ease-in" | "ease-in-out" | "ease-out" | string;

type DataType$Dasharray<TLength> = TLength | string | number;

type DataType$DeprecatedSystemColor =
  | "ActiveBorder"
  | "ActiveCaption"
  | "AppWorkspace"
  | "Background"
  | "ButtonFace"
  | "ButtonHighlight"
  | "ButtonShadow"
  | "ButtonText"
  | "CaptionText"
  | "GrayText"
  | "Highlight"
  | "HighlightText"
  | "InactiveBorder"
  | "InactiveCaption"
  | "InactiveCaptionText"
  | "InfoBackground"
  | "InfoText"
  | "Menu"
  | "MenuText"
  | "Scrollbar"
  | "ThreeDDarkShadow"
  | "ThreeDFace"
  | "ThreeDHighlight"
  | "ThreeDLightShadow"
  | "ThreeDShadow"
  | "Window"
  | "WindowFrame"
  | "WindowText";

type DataType$DisplayInside = "-ms-flexbox" | "-ms-grid" | "-webkit-flex" | "flex" | "flow" | "flow-root" | "grid" | "ruby" | "table";

type DataType$DisplayInternal =
  | "ruby-base"
  | "ruby-base-container"
  | "ruby-text"
  | "ruby-text-container"
  | "table-caption"
  | "table-cell"
  | "table-column"
  | "table-column-group"
  | "table-footer-group"
  | "table-header-group"
  | "table-row"
  | "table-row-group";

type DataType$DisplayLegacy =
  | "-ms-inline-flexbox"
  | "-ms-inline-grid"
  | "-webkit-inline-flex"
  | "inline-block"
  | "inline-flex"
  | "inline-grid"
  | "inline-list-item"
  | "inline-table";

type DataType$DisplayOutside = "block" | "inline" | "run-in";

type DataType$EasingFunction = DataType$CubicBezierTimingFunction | DataType$StepTimingFunction | "linear";

type DataType$EastAsianVariantValues = "jis04" | "jis78" | "jis83" | "jis90" | "simplified" | "traditional";

type DataType$FinalBgLayer<TLength> = DataType$Color | DataType$BgPosition<TLength> | DataType$RepeatStyle | DataType$Attachment | DataType$Box | "none" | string;

type DataType$FontStretchAbsolute =
  | "condensed"
  | "expanded"
  | "extra-condensed"
  | "extra-expanded"
  | "normal"
  | "semi-condensed"
  | "semi-expanded"
  | "ultra-condensed"
  | "ultra-expanded"
  | string;

type DataType$FontWeightAbsolute = "bold" | "normal" | number;

type DataType$GenericFamily = "cursive" | "fantasy" | "monospace" | "sans-serif" | "serif";

type DataType$GeometryBox = DataType$Box | "fill-box" | "margin-box" | "stroke-box" | "view-box";

type DataType$GridLine = "auto" | string | number;

type DataType$LineStyle = "dashed" | "dotted" | "double" | "groove" | "hidden" | "inset" | "none" | "outset" | "ridge" | "solid";

type DataType$LineWidth<TLength> = TLength | "medium" | "thick" | "thin";

type DataType$MaskLayer<TLength> =
  | DataType$Position<TLength>
  | DataType$RepeatStyle
  | DataType$GeometryBox
  | DataType$CompositingOperator
  | DataType$MaskingMode
  | "no-clip"
  | "none"
  | string;

type DataType$MaskingMode = "alpha" | "luminance" | "match-source";

type DataType$NamedColor =
  | "aliceblue"
  | "antiquewhite"
  | "aqua"
  | "aquamarine"
  | "azure"
  | "beige"
  | "bisque"
  | "black"
  | "blanchedalmond"
  | "blue"
  | "blueviolet"
  | "brown"
  | "burlywood"
  | "cadetblue"
  | "chartreuse"
  | "chocolate"
  | "coral"
  | "cornflowerblue"
  | "cornsilk"
  | "crimson"
  | "cyan"
  | "darkblue"
  | "darkcyan"
  | "darkgoldenrod"
  | "darkgray"
  | "darkgreen"
  | "darkgrey"
  | "darkkhaki"
  | "darkmagenta"
  | "darkolivegreen"
  | "darkorange"
  | "darkorchid"
  | "darkred"
  | "darksalmon"
  | "darkseagreen"
  | "darkslateblue"
  | "darkslategray"
  | "darkslategrey"
  | "darkturquoise"
  | "darkviolet"
  | "deeppink"
  | "deepskyblue"
  | "dimgray"
  | "dimgrey"
  | "dodgerblue"
  | "firebrick"
  | "floralwhite"
  | "forestgreen"
  | "fuchsia"
  | "gainsboro"
  | "ghostwhite"
  | "gold"
  | "goldenrod"
  | "gray"
  | "green"
  | "greenyellow"
  | "grey"
  | "honeydew"
  | "hotpink"
  | "indianred"
  | "indigo"
  | "ivory"
  | "khaki"
  | "lavender"
  | "lavenderblush"
  | "lawngreen"
  | "lemonchiffon"
  | "lightblue"
  | "lightcoral"
  | "lightcyan"
  | "lightgoldenrodyellow"
  | "lightgray"
  | "lightgreen"
  | "lightgrey"
  | "lightpink"
  | "lightsalmon"
  | "lightseagreen"
  | "lightskyblue"
  | "lightslategray"
  | "lightslategrey"
  | "lightsteelblue"
  | "lightyellow"
  | "lime"
  | "limegreen"
  | "linen"
  | "magenta"
  | "maroon"
  | "mediumaquamarine"
  | "mediumblue"
  | "mediumorchid"
  | "mediumpurple"
  | "mediumseagreen"
  | "mediumslateblue"
  | "mediumspringgreen"
  | "mediumturquoise"
  | "mediumvioletred"
  | "midnightblue"
  | "mintcream"
  | "mistyrose"
  | "moccasin"
  | "navajowhite"
  | "navy"
  | "oldlace"
  | "olive"
  | "olivedrab"
  | "orange"
  | "orangered"
  | "orchid"
  | "palegoldenrod"
  | "palegreen"
  | "paleturquoise"
  | "palevioletred"
  | "papayawhip"
  | "peachpuff"
  | "peru"
  | "pink"
  | "plum"
  | "powderblue"
  | "purple"
  | "rebeccapurple"
  | "red"
  | "rosybrown"
  | "royalblue"
  | "saddlebrown"
  | "salmon"
  | "sandybrown"
  | "seagreen"
  | "seashell"
  | "sienna"
  | "silver"
  | "skyblue"
  | "slateblue"
  | "slategray"
  | "slategrey"
  | "snow"
  | "springgreen"
  | "steelblue"
  | "tan"
  | "teal"
  | "thistle"
  | "tomato"
  | "transparent"
  | "turquoise"
  | "violet"
  | "wheat"
  | "white"
  | "whitesmoke"
  | "yellow"
  | "yellowgreen";

type DataType$PageSize = "A3" | "A4" | "A5" | "B4" | "B5" | "JIS-B4" | "JIS-B5" | "ledger" | "legal" | "letter";

type DataType$Paint = DataType$Color | "child" | "context-fill" | "context-stroke" | "none" | string;

type DataType$Position<TLength> = TLength | "bottom" | "center" | "left" | "right" | "top" | string;

type DataType$Quote = "close-quote" | "no-close-quote" | "no-open-quote" | "open-quote";

type DataType$RepeatStyle = "no-repeat" | "repeat" | "repeat-x" | "repeat-y" | "round" | "space" | string;

type DataType$SelfPosition = "center" | "end" | "flex-end" | "flex-start" | "self-end" | "self-start" | "start";

type DataType$SingleAnimation<TTime> =
  | DataType$EasingFunction
  | DataType$SingleAnimationDirection
  | DataType$SingleAnimationFillMode
  | TTime
  | "infinite"
  | "none"
  | "paused"
  | "running"
  | string
  | number;

type DataType$SingleAnimationDirection = "alternate" | "alternate-reverse" | "normal" | "reverse";

type DataType$SingleAnimationFillMode = "backwards" | "both" | "forwards" | "none";

type DataType$SingleAnimationTimeline = "auto" | "none" | string;

type DataType$SingleTransition<TTime> = DataType$EasingFunction | TTime | "all" | "none" | string;

type DataType$StepTimingFunction = "step-end" | "step-start" | string;

type DataType$TrackBreadth<TLength> = TLength | "auto" | "max-content" | "min-content" | string;

type DataType$ViewportLength<TLength> = TLength | "auto" | string;

type DataType$VisualBox = "border-box" | "content-box" | "padding-box";
Copyright (c) 2017-2018 Fredrik Nicol

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "csstype",
  "version": "3.1.1",
  "main": "",
  "types": "index.d.ts",
  "description": "Strict TypeScript and Flow types for style based on MDN data",
  "repository": "https://github.com/frenic/csstype",
  "author": "Fredrik Nicol <fredrik.nicol@gmail.com>",
  "license": "MIT",
  "devDependencies": {
    "@types/chokidar": "^2.1.3",
    "@types/css-tree": "^1.0.7",
    "@types/jest": "^27.5.1",
    "@types/jsdom": "^16.2.14",
    "@types/node": "^17.0.33",
    "@types/prettier": "^2.6.1",
    "@types/request": "^2.48.8",
    "@types/turndown": "^5.0.1",
    "@typescript-eslint/eslint-plugin": "^5.23.0",
    "@typescript-eslint/parser": "^5.23.0",
    "chalk": "^4.1.2",
    "chokidar": "^3.5.3",
    "eslint": "^8.15.0",
    "css-tree": "^2.1.0",
    "eslint-config-prettier": "^8.5.0",
    "eslint-plugin-prettier": "^4.0.0",
    "fast-glob": "^3.2.11",
    "flow-bin": "^0.178.0",
    "jest": "^28.1.0",
    "jsdom": "^19.0.0",
    "mdn-browser-compat-data": "git+https://github.com/mdn/browser-compat-data.git#0bf809b28f3cf5007a29b59b885dfada560ead47",
    "mdn-data": "git+https://github.com/mdn/data.git#9fc21e14442ed6f71626e763e9f5e5370c533380",
    "prettier": "^2.6.2",
    "request": "^2.88.2",
    "ts-jest": "^28.0.2",
    "ts-node": "^10.7.0",
    "turndown": "^7.1.1",
    "typescript": "~4.6.4"
  },
  "files": [
    "index.d.ts",
    "index.js.flow"
  ]
}'use strict';
module.exports = function (str, sep) {
	if (typeof str !== 'string') {
		throw new TypeError('Expected a string');
	}

	sep = typeof sep === 'undefined' ? '_' : sep;

	return str
		.replace(/([a-z\d])([A-Z])/g, '$1' + sep + '$2')
		.replace(/([A-Z]+)([A-Z][a-z\d]+)/g, '$1' + sep + '$2')
		.toLowerCase();
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "decamelize",
  "version": "1.2.0",
  "description": "Convert a camelized string into a lowercased one with a custom separator: unicornRainbow â†’ unicorn_rainbow",
  "license": "MIT",
  "repository": "sindresorhus/decamelize",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}var pSlice = Array.prototype.slice;
var objectKeys = require('./lib/keys.js');
var isArguments = require('./lib/is_arguments.js');

var deepEqual = module.exports = function (actual, expected, opts) {
  if (!opts) opts = {};
  // 7.1. All identical values are equivalent, as determined by ===.
  if (actual === expected) {
    return true;

  } else if (actual instanceof Date && expected instanceof Date) {
    return actual.getTime() === expected.getTime();

  // 7.3. Other pairs that do not both pass typeof value == 'object',
  // equivalence is determined by ==.
  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {
    return opts.strict ? actual === expected : actual == expected;

  // 7.4. For all other Object pairs, including Array objects, equivalence is
  // determined by having the same number of owned properties (as verified
  // with Object.prototype.hasOwnProperty.call), the same set of keys
  // (although not necessarily the same order), equivalent values for every
  // corresponding key, and an identical 'prototype' property. Note: this
  // accounts for both named and indexed properties on Arrays.
  } else {
    return objEquiv(actual, expected, opts);
  }
}

function isUndefinedOrNull(value) {
  return value === null || value === undefined;
}

function isBuffer (x) {
  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
    return false;
  }
  if (x.length > 0 && typeof x[0] !== 'number') return false;
  return true;
}

function objEquiv(a, b, opts) {
  var i, key;
  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
    return false;
  // an identical 'prototype' property.
  if (a.prototype !== b.prototype) return false;
  //~~~I've managed to break Object.keys through screwy arguments passing.
  //   Converting to array solves the problem.
  if (isArguments(a)) {
    if (!isArguments(b)) {
      return false;
    }
    a = pSlice.call(a);
    b = pSlice.call(b);
    return deepEqual(a, b, opts);
  }
  if (isBuffer(a)) {
    if (!isBuffer(b)) {
      return false;
    }
    if (a.length !== b.length) return false;
    for (i = 0; i < a.length; i++) {
      if (a[i] !== b[i]) return false;
    }
    return true;
  }
  try {
    var ka = objectKeys(a),
        kb = objectKeys(b);
  } catch (e) {//happens when one is a string literal and the other isn't
    return false;
  }
  // having the same number of owned properties (keys incorporates
  // hasOwnProperty)
  if (ka.length != kb.length)
    return false;
  //the same set of keys (although not necessarily the same order),
  ka.sort();
  kb.sort();
  //~~~cheap key test
  for (i = ka.length - 1; i >= 0; i--) {
    if (ka[i] != kb[i])
      return false;
  }
  //equivalent values for every corresponding key, and
  //~~~possibly expensive deep test
  for (i = ka.length - 1; i >= 0; i--) {
    key = ka[i];
    if (!deepEqual(a[key], b[key], opts)) return false;
  }
  return typeof a === typeof b;
}
var supportsArgumentsClass = (function(){
  return Object.prototype.toString.call(arguments)
})() == '[object Arguments]';

exports = module.exports = supportsArgumentsClass ? supported : unsupported;

exports.supported = supported;
function supported(object) {
  return Object.prototype.toString.call(object) == '[object Arguments]';
};

exports.unsupported = unsupported;
function unsupported(object){
  return object &&
    typeof object == 'object' &&
    typeof object.length == 'number' &&
    Object.prototype.hasOwnProperty.call(object, 'callee') &&
    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||
    false;
};
exports = module.exports = typeof Object.keys === 'function'
  ? Object.keys : shim;

exports.shim = shim;
function shim (obj) {
  var keys = [];
  for (var key in obj) keys.push(key);
  return keys;
}
This software is released under the MIT license:

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "deep-equal",
  "version": "1.0.1",
  "description": "node's assert.deepEqual algorithm",
  "main": "index.js",
  "directories": {
    "lib": ".",
    "example": "example",
    "test": "test"
  },
  "devDependencies": {
    "tape": "^3.5.0"
  },
  "repository": {
    "type": "git",
    "url": "http://github.com/substack/node-deep-equal.git"
  },
  "author": {
    "name": "James Halliday",
    "email": "mail@substack.net",
    "url": "http://substack.net"
  },
  "license": "MIT",
  "testling": {
    "files": "test/*.js",
    "browsers": {
      "ie": [
        6,
        7,
        8,
        9
      ],
      "ff": [
        3.5,
        10,
        15
      ],
      "chrome": [
        10,
        22
      ],
      "safari": [
        5.1
      ],
      "opera": [
        12
      ]
    }
  }
}'use strict';
module.exports = (() => {
	const env = process.env;

	if (process.platform === 'darwin') {
		return env.SHELL || '/bin/bash';
	}

	if (process.platform === 'win32') {
		return env.COMSPEC || 'cmd.exe';
	}

	return env.SHELL || '/bin/sh';
})();
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "default-shell",
  "version": "1.0.1",
  "description": "Get the user's default shell",
  "license": "MIT",
  "repository": "sindresorhus/default-shell",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}var Stream = require('stream').Stream;
var util = require('util');

module.exports = DelayedStream;
function DelayedStream() {
  this.source = null;
  this.dataSize = 0;
  this.maxDataSize = 1024 * 1024;
  this.pauseStream = true;

  this._maxDataSizeExceeded = false;
  this._released = false;
  this._bufferedEvents = [];
}
util.inherits(DelayedStream, Stream);

DelayedStream.create = function(source, options) {
  var delayedStream = new this();

  options = options || {};
  for (var option in options) {
    delayedStream[option] = options[option];
  }

  delayedStream.source = source;

  var realEmit = source.emit;
  source.emit = function() {
    delayedStream._handleEmit(arguments);
    return realEmit.apply(source, arguments);
  };

  source.on('error', function() {});
  if (delayedStream.pauseStream) {
    source.pause();
  }

  return delayedStream;
};

Object.defineProperty(DelayedStream.prototype, 'readable', {
  configurable: true,
  enumerable: true,
  get: function() {
    return this.source.readable;
  }
});

DelayedStream.prototype.setEncoding = function() {
  return this.source.setEncoding.apply(this.source, arguments);
};

DelayedStream.prototype.resume = function() {
  if (!this._released) {
    this.release();
  }

  this.source.resume();
};

DelayedStream.prototype.pause = function() {
  this.source.pause();
};

DelayedStream.prototype.release = function() {
  this._released = true;

  this._bufferedEvents.forEach(function(args) {
    this.emit.apply(this, args);
  }.bind(this));
  this._bufferedEvents = [];
};

DelayedStream.prototype.pipe = function() {
  var r = Stream.prototype.pipe.apply(this, arguments);
  this.resume();
  return r;
};

DelayedStream.prototype._handleEmit = function(args) {
  if (this._released) {
    this.emit.apply(this, args);
    return;
  }

  if (args[0] === 'data') {
    this.dataSize += args[1].length;
    this._checkIfMaxDataSizeExceeded();
  }

  this._bufferedEvents.push(args);
};

DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
  if (this._maxDataSizeExceeded) {
    return;
  }

  if (this.dataSize <= this.maxDataSize) {
    return;
  }

  this._maxDataSizeExceeded = true;
  var message =
    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'
  this.emit('error', new Error(message));
};
Copyright (c) 2011 Debuggable Limited <felix@debuggable.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
SHELL := /bin/bash

test:
	@./test/run.js

.PHONY: test

{
  "author": "Felix GeisendÃ¶rfer <felix@debuggable.com> (http://debuggable.com/)",
  "name": "delayed-stream",
  "description": "Buffers events from a stream until you are ready to handle them.",
  "license": "MIT",
  "version": "1.0.0",
  "homepage": "https://github.com/felixge/node-delayed-stream",
  "repository": {
    "type": "git",
    "url": "git://github.com/felixge/node-delayed-stream.git"
  },
  "main": "./lib/delayed_stream",
  "engines": {
    "node": ">=0.4.0"
  },
  "dependencies": {},
  "devDependencies": {
    "fake": "0.2.0",
    "far": "0.0.1"
  }
}
1.0.0 / 2015-12-14
==================

  * Merge pull request #12 from kasicka/master
  * Add license text

0.1.0 / 2014-10-17
==================

 * adds `.fluent()` to api

0.0.3 / 2014-01-13
==================

 * fix receiver for .method()

0.0.2 / 2014-01-13
==================

 * Object.defineProperty() sucks
 * Initial commit

/**
 * Expose `Delegator`.
 */

module.exports = Delegator;

/**
 * Initialize a delegator.
 *
 * @param {Object} proto
 * @param {String} target
 * @api public
 */

function Delegator(proto, target) {
  if (!(this instanceof Delegator)) return new Delegator(proto, target);
  this.proto = proto;
  this.target = target;
  this.methods = [];
  this.getters = [];
  this.setters = [];
  this.fluents = [];
}

/**
 * Delegate method `name`.
 *
 * @param {String} name
 * @return {Delegator} self
 * @api public
 */

Delegator.prototype.method = function(name){
  var proto = this.proto;
  var target = this.target;
  this.methods.push(name);

  proto[name] = function(){
    return this[target][name].apply(this[target], arguments);
  };

  return this;
};

/**
 * Delegator accessor `name`.
 *
 * @param {String} name
 * @return {Delegator} self
 * @api public
 */

Delegator.prototype.access = function(name){
  return this.getter(name).setter(name);
};

/**
 * Delegator getter `name`.
 *
 * @param {String} name
 * @return {Delegator} self
 * @api public
 */

Delegator.prototype.getter = function(name){
  var proto = this.proto;
  var target = this.target;
  this.getters.push(name);

  proto.__defineGetter__(name, function(){
    return this[target][name];
  });

  return this;
};

/**
 * Delegator setter `name`.
 *
 * @param {String} name
 * @return {Delegator} self
 * @api public
 */

Delegator.prototype.setter = function(name){
  var proto = this.proto;
  var target = this.target;
  this.setters.push(name);

  proto.__defineSetter__(name, function(val){
    return this[target][name] = val;
  });

  return this;
};

/**
 * Delegator fluent accessor
 *
 * @param {String} name
 * @return {Delegator} self
 * @api public
 */

Delegator.prototype.fluent = function (name) {
  var proto = this.proto;
  var target = this.target;
  this.fluents.push(name);

  proto[name] = function(val){
    if ('undefined' != typeof val) {
      this[target][name] = val;
      return this;
    } else {
      return this[target][name];
    }
  };

  return this;
};
Copyright (c) 2015 TJ Holowaychuk <tj@vision-media.ca>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

test:
	@./node_modules/.bin/mocha \
		--require should \
		--reporter spec \
		--bail

.PHONY: test{
  "name": "delegates",
  "version": "1.0.0",
  "repository": "visionmedia/node-delegates",
  "description": "delegate methods and accessors to another property",
  "dependencies": {},
  "devDependencies": {
    "mocha": "*",
    "should": "*"
  },
  "license": "MIT"
}2.0.0 / 2018-10-26
==================

  * Drop support for Node.js 0.6
  * Replace internal `eval` usage with `Function` constructor
  * Use instance methods on `process` to check for listeners

1.1.2 / 2018-01-11
==================

  * perf: remove argument reassignment
  * Support Node.js 0.6 to 9.x

1.1.1 / 2017-07-27
==================

  * Remove unnecessary `Buffer` loading
  * Support Node.js 0.6 to 8.x

1.1.0 / 2015-09-14
==================

  * Enable strict mode in more places
  * Support io.js 3.x
  * Support io.js 2.x
  * Support web browser loading
    - Requires bundler like Browserify or webpack

1.0.1 / 2015-04-07
==================

  * Fix `TypeError`s when under `'use strict'` code
  * Fix useless type name on auto-generated messages
  * Support io.js 1.x
  * Support Node.js 0.12

1.0.0 / 2014-09-17
==================

  * No changes

0.4.5 / 2014-09-09
==================

  * Improve call speed to functions using the function wrapper
  * Support Node.js 0.6

0.4.4 / 2014-07-27
==================

  * Work-around v8 generating empty stack traces

0.4.3 / 2014-07-26
==================

  * Fix exception when global `Error.stackTraceLimit` is too low

0.4.2 / 2014-07-19
==================

  * Correct call site for wrapped functions and properties

0.4.1 / 2014-07-19
==================

  * Improve automatic message generation for function properties

0.4.0 / 2014-07-19
==================

  * Add `TRACE_DEPRECATION` environment variable
  * Remove non-standard grey color from color output
  * Support `--no-deprecation` argument
  * Support `--trace-deprecation` argument
  * Support `deprecate.property(fn, prop, message)`

0.3.0 / 2014-06-16
==================

  * Add `NO_DEPRECATION` environment variable

0.2.0 / 2014-06-15
==================

  * Add `deprecate.property(obj, prop, message)`
  * Remove `supports-color` dependency for node.js 0.8

0.1.0 / 2014-06-15
==================

  * Add `deprecate.function(fn, message)`
  * Add `process.on('deprecation', fn)` emitter
  * Automatically generate message when omitted from `deprecate()`

0.0.1 / 2014-06-15
==================

  * Fix warning for dynamic calls at singe call site

0.0.0 / 2014-06-15
==================

  * Initial implementation
/*!
 * depd
 * Copyright(c) 2014-2018 Douglas Christopher Wilson
 * MIT Licensed
 */

/**
 * Module dependencies.
 */

var relative = require('path').relative

/**
 * Module exports.
 */

module.exports = depd

/**
 * Get the path to base files on.
 */

var basePath = process.cwd()

/**
 * Determine if namespace is contained in the string.
 */

function containsNamespace (str, namespace) {
  var vals = str.split(/[ ,]+/)
  var ns = String(namespace).toLowerCase()

  for (var i = 0; i < vals.length; i++) {
    var val = vals[i]

    // namespace contained
    if (val && (val === '*' || val.toLowerCase() === ns)) {
      return true
    }
  }

  return false
}

/**
 * Convert a data descriptor to accessor descriptor.
 */

function convertDataDescriptorToAccessor (obj, prop, message) {
  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)
  var value = descriptor.value

  descriptor.get = function getter () { return value }

  if (descriptor.writable) {
    descriptor.set = function setter (val) { return (value = val) }
  }

  delete descriptor.value
  delete descriptor.writable

  Object.defineProperty(obj, prop, descriptor)

  return descriptor
}

/**
 * Create arguments string to keep arity.
 */

function createArgumentsString (arity) {
  var str = ''

  for (var i = 0; i < arity; i++) {
    str += ', arg' + i
  }

  return str.substr(2)
}

/**
 * Create stack string from stack.
 */

function createStackString (stack) {
  var str = this.name + ': ' + this.namespace

  if (this.message) {
    str += ' deprecated ' + this.message
  }

  for (var i = 0; i < stack.length; i++) {
    str += '\n    at ' + stack[i].toString()
  }

  return str
}

/**
 * Create deprecate for namespace in caller.
 */

function depd (namespace) {
  if (!namespace) {
    throw new TypeError('argument namespace is required')
  }

  var stack = getStack()
  var site = callSiteLocation(stack[1])
  var file = site[0]

  function deprecate (message) {
    // call to self as log
    log.call(deprecate, message)
  }

  deprecate._file = file
  deprecate._ignored = isignored(namespace)
  deprecate._namespace = namespace
  deprecate._traced = istraced(namespace)
  deprecate._warned = Object.create(null)

  deprecate.function = wrapfunction
  deprecate.property = wrapproperty

  return deprecate
}

/**
 * Determine if event emitter has listeners of a given type.
 *
 * The way to do this check is done three different ways in Node.js >= 0.8
 * so this consolidates them into a minimal set using instance methods.
 *
 * @param {EventEmitter} emitter
 * @param {string} type
 * @returns {boolean}
 * @private
 */

function eehaslisteners (emitter, type) {
  var count = typeof emitter.listenerCount !== 'function'
    ? emitter.listeners(type).length
    : emitter.listenerCount(type)

  return count > 0
}

/**
 * Determine if namespace is ignored.
 */

function isignored (namespace) {
  if (process.noDeprecation) {
    // --no-deprecation support
    return true
  }

  var str = process.env.NO_DEPRECATION || ''

  // namespace ignored
  return containsNamespace(str, namespace)
}

/**
 * Determine if namespace is traced.
 */

function istraced (namespace) {
  if (process.traceDeprecation) {
    // --trace-deprecation support
    return true
  }

  var str = process.env.TRACE_DEPRECATION || ''

  // namespace traced
  return containsNamespace(str, namespace)
}

/**
 * Display deprecation message.
 */

function log (message, site) {
  var haslisteners = eehaslisteners(process, 'deprecation')

  // abort early if no destination
  if (!haslisteners && this._ignored) {
    return
  }

  var caller
  var callFile
  var callSite
  var depSite
  var i = 0
  var seen = false
  var stack = getStack()
  var file = this._file

  if (site) {
    // provided site
    depSite = site
    callSite = callSiteLocation(stack[1])
    callSite.name = depSite.name
    file = callSite[0]
  } else {
    // get call site
    i = 2
    depSite = callSiteLocation(stack[i])
    callSite = depSite
  }

  // get caller of deprecated thing in relation to file
  for (; i < stack.length; i++) {
    caller = callSiteLocation(stack[i])
    callFile = caller[0]

    if (callFile === file) {
      seen = true
    } else if (callFile === this._file) {
      file = this._file
    } else if (seen) {
      break
    }
  }

  var key = caller
    ? depSite.join(':') + '__' + caller.join(':')
    : undefined

  if (key !== undefined && key in this._warned) {
    // already warned
    return
  }

  this._warned[key] = true

  // generate automatic message from call site
  var msg = message
  if (!msg) {
    msg = callSite === depSite || !callSite.name
      ? defaultMessage(depSite)
      : defaultMessage(callSite)
  }

  // emit deprecation if listeners exist
  if (haslisteners) {
    var err = DeprecationError(this._namespace, msg, stack.slice(i))
    process.emit('deprecation', err)
    return
  }

  // format and write message
  var format = process.stderr.isTTY
    ? formatColor
    : formatPlain
  var output = format.call(this, msg, caller, stack.slice(i))
  process.stderr.write(output + '\n', 'utf8')
}

/**
 * Get call site location as array.
 */

function callSiteLocation (callSite) {
  var file = callSite.getFileName() || '<anonymous>'
  var line = callSite.getLineNumber()
  var colm = callSite.getColumnNumber()

  if (callSite.isEval()) {
    file = callSite.getEvalOrigin() + ', ' + file
  }

  var site = [file, line, colm]

  site.callSite = callSite
  site.name = callSite.getFunctionName()

  return site
}

/**
 * Generate a default message from the site.
 */

function defaultMessage (site) {
  var callSite = site.callSite
  var funcName = site.name

  // make useful anonymous name
  if (!funcName) {
    funcName = '<anonymous@' + formatLocation(site) + '>'
  }

  var context = callSite.getThis()
  var typeName = context && callSite.getTypeName()

  // ignore useless type name
  if (typeName === 'Object') {
    typeName = undefined
  }

  // make useful type name
  if (typeName === 'Function') {
    typeName = context.name || typeName
  }

  return typeName && callSite.getMethodName()
    ? typeName + '.' + funcName
    : funcName
}

/**
 * Format deprecation message without color.
 */

function formatPlain (msg, caller, stack) {
  var timestamp = new Date().toUTCString()

  var formatted = timestamp +
    ' ' + this._namespace +
    ' deprecated ' + msg

  // add stack trace
  if (this._traced) {
    for (var i = 0; i < stack.length; i++) {
      formatted += '\n    at ' + stack[i].toString()
    }

    return formatted
  }

  if (caller) {
    formatted += ' at ' + formatLocation(caller)
  }

  return formatted
}

/**
 * Format deprecation message with color.
 */

function formatColor (msg, caller, stack) {
  var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan
    ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow
    ' \x1b[0m' + msg + '\x1b[39m' // reset

  // add stack trace
  if (this._traced) {
    for (var i = 0; i < stack.length; i++) {
      formatted += '\n    \x1b[36mat ' + stack[i].toString() + '\x1b[39m' // cyan
    }

    return formatted
  }

  if (caller) {
    formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan
  }

  return formatted
}

/**
 * Format call site location.
 */

function formatLocation (callSite) {
  return relative(basePath, callSite[0]) +
    ':' + callSite[1] +
    ':' + callSite[2]
}

/**
 * Get the stack as array of call sites.
 */

function getStack () {
  var limit = Error.stackTraceLimit
  var obj = {}
  var prep = Error.prepareStackTrace

  Error.prepareStackTrace = prepareObjectStackTrace
  Error.stackTraceLimit = Math.max(10, limit)

  // capture the stack
  Error.captureStackTrace(obj)

  // slice this function off the top
  var stack = obj.stack.slice(1)

  Error.prepareStackTrace = prep
  Error.stackTraceLimit = limit

  return stack
}

/**
 * Capture call site stack from v8.
 */

function prepareObjectStackTrace (obj, stack) {
  return stack
}

/**
 * Return a wrapped function in a deprecation message.
 */

function wrapfunction (fn, message) {
  if (typeof fn !== 'function') {
    throw new TypeError('argument fn must be a function')
  }

  var args = createArgumentsString(fn.length)
  var stack = getStack()
  var site = callSiteLocation(stack[1])

  site.name = fn.name

  // eslint-disable-next-line no-new-func
  var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',
    '"use strict"\n' +
    'return function (' + args + ') {' +
    'log.call(deprecate, message, site)\n' +
    'return fn.apply(this, arguments)\n' +
    '}')(fn, log, this, message, site)

  return deprecatedfn
}

/**
 * Wrap property in a deprecation message.
 */

function wrapproperty (obj, prop, message) {
  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
    throw new TypeError('argument obj must be object')
  }

  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)

  if (!descriptor) {
    throw new TypeError('must call property on owner object')
  }

  if (!descriptor.configurable) {
    throw new TypeError('property must be configurable')
  }

  var deprecate = this
  var stack = getStack()
  var site = callSiteLocation(stack[1])

  // set site name
  site.name = prop

  // convert data descriptor
  if ('value' in descriptor) {
    descriptor = convertDataDescriptorToAccessor(obj, prop, message)
  }

  var get = descriptor.get
  var set = descriptor.set

  // wrap getter
  if (typeof get === 'function') {
    descriptor.get = function getter () {
      log.call(deprecate, message, site)
      return get.apply(this, arguments)
    }
  }

  // wrap setter
  if (typeof set === 'function') {
    descriptor.set = function setter () {
      log.call(deprecate, message, site)
      return set.apply(this, arguments)
    }
  }

  Object.defineProperty(obj, prop, descriptor)
}

/**
 * Create DeprecationError for deprecation
 */

function DeprecationError (namespace, message, stack) {
  var error = new Error()
  var stackString

  Object.defineProperty(error, 'constructor', {
    value: DeprecationError
  })

  Object.defineProperty(error, 'message', {
    configurable: true,
    enumerable: false,
    value: message,
    writable: true
  })

  Object.defineProperty(error, 'name', {
    enumerable: false,
    configurable: true,
    value: 'DeprecationError',
    writable: true
  })

  Object.defineProperty(error, 'namespace', {
    configurable: true,
    enumerable: false,
    value: namespace,
    writable: true
  })

  Object.defineProperty(error, 'stack', {
    configurable: true,
    enumerable: false,
    get: function () {
      if (stackString !== undefined) {
        return stackString
      }

      // prepare stack trace
      return (stackString = createStackString.call(this, stack))
    },
    set: function setter (val) {
      stackString = val
    }
  })

  return error
}
/*!
 * depd
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = depd

/**
 * Create deprecate for namespace in caller.
 */

function depd (namespace) {
  if (!namespace) {
    throw new TypeError('argument namespace is required')
  }

  function deprecate (message) {
    // no-op in browser
  }

  deprecate._file = undefined
  deprecate._ignored = true
  deprecate._namespace = namespace
  deprecate._traced = false
  deprecate._warned = Object.create(null)

  deprecate.function = wrapfunction
  deprecate.property = wrapproperty

  return deprecate
}

/**
 * Return a wrapped function in a deprecation message.
 *
 * This is a no-op version of the wrapper, which does nothing but call
 * validation.
 */

function wrapfunction (fn, message) {
  if (typeof fn !== 'function') {
    throw new TypeError('argument fn must be a function')
  }

  return fn
}

/**
 * Wrap property in a deprecation message.
 *
 * This is a no-op version of the wrapper, which does nothing but call
 * validation.
 */

function wrapproperty (obj, prop, message) {
  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
    throw new TypeError('argument obj must be object')
  }

  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)

  if (!descriptor) {
    throw new TypeError('must call property on owner object')
  }

  if (!descriptor.configurable) {
    throw new TypeError('property must be configurable')
  }
}
(The MIT License)

Copyright (c) 2014-2018 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "depd",
  "description": "Deprecate all the things",
  "version": "2.0.0",
  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
  "license": "MIT",
  "repository": "dougwilson/nodejs-depd",
  "browser": "lib/browser/index.js",
  "devDependencies": {
    "benchmark": "2.1.4",
    "beautify-benchmark": "0.2.4",
    "eslint": "5.7.0",
    "eslint-config-standard": "12.0.0",
    "eslint-plugin-import": "2.14.0",
    "eslint-plugin-markdown": "1.0.0-beta.7",
    "eslint-plugin-node": "7.0.1",
    "eslint-plugin-promise": "4.0.1",
    "eslint-plugin-standard": "4.0.0",
    "istanbul": "0.4.5",
    "mocha": "5.2.0",
    "safe-buffer": "5.1.2",
    "uid-safe": "2.1.5"
  },
  "files": [
    "lib/",
    "History.md",
    "LICENSE",
    "index.js",
    "Readme.md"
  ],
  "engines": {
    "node": ">= 0.8"
  }
}#!/usr/bin/env node

/*
 * Example:
 * 
 * $ dhcp hostname dns --mac 12:34:55:67:88:99
 */

process.title = 'node-dhcp';

var dhcp = require('../lib/dhcp.js');
var argv = require('minimist')(process.argv.slice(2));

// Create a client

// minimist pushes all features, without "--" to the "_" key.
// We need the list of features on "features" and all other options passed as is.
// Easist way to do this is this:
argv.features = argv._;

var client = dhcp.createClient(argv);

client.on('bound', function(state) {

  var opt = state.options;

  // Print all requested options
  for (var i in opt) {
    console.log(i, ": ", opt[i] instanceof Array ? opt[i].join(", ") : opt[i]);
  }

  // Exit when finished
  process.exit();
});

client.listen();

// Send first handshake
client.sendDiscover();
#!/usr/bin/env node

/*
 * Example:
 * 
 * $ dhcp hostname dns --bind 192.168.2.2
 */

process.title = 'node-dhcp';

var dhcp = require('../lib/dhcp.js');
var Options = require('../lib/options.js');
var argv = require('minimist')(process.argv.slice(2));

var bind = null;
var opts = {};
var force = []; // We force all options here, since the user explicitly stated the option

// Create a server

for (var arg in argv) {
  if (arg === '_') {
    /* void */
  } else if (arg === 'bind') {
    bind = argv[arg];
  } else if (arg === 'range') {
    opts.range = argv[arg].split('-');
  } else if (Options.conf[arg] !== undefined) {

    // If value is missing, minimist simply makes it true/false
    if (typeof argv[arg] !== 'boolean') {
      opts[arg] = argv[arg];
      force.push(argv[arg]);
    } else {
      console.error('Argument ' + arg + ' needs a value.');
      process.exit();
    }

  } else if (arg === 'help') {
    console.log('Usage:\n\tdhcpd --range 192.168.0.1-192.168.0.99 --option1 value1 --option2 value2 ...');
    process.exit();
  } else {
    console.error('Invalid argument ' + arg);
    process.exit();
  }
}

var server = dhcp.createServer(opts);

server.on('bound', function(state) {
  console.log(state);
});

server.listen(null, bind);
FROM node:10

WORKDIR /usr/src/app

COPY . .

RUN npm install
RUN npm link

EXPOSE 67/udp

CMD [ "node", "examples/server.js" ]
/**
 * @license DHCP.js v0.2.20 28/06/2017
 * http://www.xarg.org/2017/06/a-pure-javascript-dhcp-implementation/
 *
 * Copyright (c) 2017, Robert Eisele (robert@xarg.org)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 **/

const util = require('util');
const dgram = require('dgram');
const os = require('os');
const EventEmitter = require('events').EventEmitter;

const SeqBuffer = require('./seqbuffer.js');
const Options = require('./options.js');
const Protocol = require('./protocol.js');
const Tools = require('./tools.js');

const DHCPDISCOVER = 1;
const DHCPOFFER = 2;
const DHCPREQUEST = 3;
const DHCPDECLINE = 4;
const DHCPACK = 5;
const DHCPNAK = 6;
const DHCPRELEASE = 7;
const DHCPINFORM = 8;

const SERVER_PORT = 67;
const CLIENT_PORT = 68;

const INADDR_ANY = '0.0.0.0';
const INADDR_BROADCAST = '255.255.255.255';

const BOOTREQUEST = 1;
const BOOTREPLY = 2;



function Lease() {

}

Lease.prototype = {
  bindTime: null, // Time when we got an ACK
  leasePeriod: 86400, // Seconds the lease is allowed to live, next lease in "leasePeriod - (now - bindTime)"
  renewPeriod: 1440, // Seconds till a renew is due, next renew in "renewPeriod - (now - bindTime)"
  rebindPeriod: 14400, // Seconds till a rebind is due, next rebind in "rebindPeriod - (now - bindTime)"
  state: null, // Current State, like BOUND, INIT, REBOOTING, ...
  server: null, // The server we got our config from
  address: null, // actual IP address we got
  options: null, // object of all other options we got
  tries: 0, // number of tries in order to complete a state
  xid: 1 // unique id, incremented with every request
};


function Server(config, listenOnly) {

  EventEmitter.call(this);

  const self = this;
  const sock = dgram.createSocket({type: 'udp4', reuseAddr: true});

  sock.on('message', function(buf) {

    let req;

    try {
      req = Protocol.parse(buf);
    } catch (e) {
      self.emit('error', e);
      return;
    }

    self._req = req;

    if (req.op !== BOOTREQUEST) {
      self.emit('error', new Error('Malformed packet'), req);
      return;
    }

    if (!req.options[53]) {
      self.emit('error', new Error('Got message, without valid message type'), req);
      return;
    }

    self.emit('message', req);

    if (!listenOnly) {
      // Handle request
      switch (req.options[53]) {
        case DHCPDISCOVER: // 1.
          self.handleDiscover(req);
          break;
        case DHCPREQUEST: // 3.
          self.handleRequest(req);
          break;
        default:
          console.error("Not implemented method", req.options[53]);
      }
    }
  });

  sock.on('listening', function() {
    self.emit('listening', sock);
  });

  sock.on('close', function() {
    self.emit('close');
  });

  sock.on('error', function(e) {
    self.emit('error',e);
  });

  this._sock = sock;
  this._conf = config;
  this._state = {};
}

Server.prototype = {

  // Socket handle
  _sock: null,

  // Config (cache) object
  _conf: null,

  // All mac -> IP mappings, we currently have assigned or blacklisted
  _state: null,

  // Incoming request
  _req: null,

  config: function(key) {

    let val;
    const optId = Options.conf[key];

    // If config setting is set by user
    if (undefined !== this._conf[key]) {
      val = this._conf[key];
    } else if (undefined !== Options.opts[optId]) {
      val = Options.opts[optId].default;
      if (val === undefined)
        return 0; // Better idea?
    } else {
      throw new Error('Invalid option ' + key);
    }

    // If a function was provided
    if (val instanceof Function) {
      var reqOpt = {};
      for (var i in this._req.options) {
        var opt = Options.opts[i];
        if (opt.enum) {
          reqOpt[opt.attr || i] = opt.enum[this._req.options[i]];
        } else {
          reqOpt[opt.attr || i] = this._req.options[i];
        }
      }
      val = val.call(this, reqOpt);
    }

    // If the option has an "enum" attribute:
    if (key !== 'range' && key !== 'static' && key !== 'randomIP' && Options.opts[optId].enum) {
      const values = Options.opts[optId].enum;

      // Check if value is an actual enum string
      for (let i in values) {
        if (values[i] === val) {
          return parseInt(i, 10);
        }
      }

      // Okay, check  if it is the numeral value of the enum
      if (values[val] === undefined) {
        throw new Error('Provided enum value for ' + key + ' is not valid');
      } else {
        val = parseInt(val, 10);
      }
    }
    return val;
  },
  _getOptions: function(pre, required, requested) {

    for (let req of required) {

      // Check if option id actually exists
      if (Options.opts[req] !== undefined) {

        // Take the first config value always
        if (pre[req] === undefined) {
          pre[req] = this.config(Options.opts[req].config);
        }

        if (!pre[req]) {
          throw new Error('Required option ' + Options.opts[req].config + ' does not have a value set');
        }

      } else {
        this.emit('error', 'Unknown option ' + req);
      }
    }

    // Add all values, the user wants, which are not already provided:
    if (requested) {

      for (let req of requested) {

        // Check if option id actually exists
        if (Options.opts[req] !== undefined) {

          // Take the first config value always
          if (pre[req] === undefined) {
            const val = this.config(Options.opts[req].config);
            // Add value only, if it's meaningful
            if (val) {
              pre[req] = val;
            }
          }

        } else {
          this.emit('error', 'Unknown option ' + req);
        }
      }
    }

    // Finally Add all missing and forced options
    const forceOptions = this._conf.forceOptions;
    if (forceOptions instanceof Array) {
      for (let option of forceOptions) {

        // Add numeric options right away and look up alias names
        let id;
        if (isNaN(option)) {
          id = Options.conf[option];
        } else {
          id = option;
        }

        // Add option if it is valid and not present yet
        if (id !== undefined && pre[id] === undefined) {
          pre[id] = this.config(option);
        }
      }
    }
    return pre;
  },

  _selectAddress: function(clientMAC, req) {

    /*
     * IP Selection algorithm:
     *
     * 0. Is Mac already known, send same IP of known lease
     *
     * 1. Is there a wish for static binding?
     *
     * 2. Are all available IP's occupied?
     *    - Send release to oldest lease and reuse
     *
     * 3. is config randomIP?
     *    - Select random IP of range, until no occupied slot is found
     *
     * 4. Take first unmapped IP of range
     *
     * TODO:
     * - Incorporate user preference, sent to us
     * - Check APR if IP exists on net
     */


    // If existing lease for a mac address is present, re-use the IP
    if (this._state[clientMAC] && this._state[clientMAC].address) {
      return this._state[clientMAC].address;
    }



    // Is there a static binding?
    const _static = this.config('static');
    if (typeof _static === "function") {
      const staticResult = _static(clientMAC, req);
      if (staticResult)
        return staticResult;
    } else if (_static[clientMAC]) {
      return _static[clientMAC];
    }


    const randIP = this.config('randomIP');
    const _tmp = this.config('range');
    const firstIP = Tools.parseIp(_tmp[0]);
    const lastIP = Tools.parseIp(_tmp[1]);



    // Add all known addresses and save the oldest lease
    const ips = [this.config('server')]; // Exclude our own server IP from pool
    let oldestMac = null;
    let oldestTime = Infinity;
    let leases = 0;
    for (let mac in this._state) {
      if (this._state[mac].address)
        ips.push(this._state[mac].address);

      if (this._state[mac].leaseTime < oldestTime) {
        oldestTime = this._state[mac].leaseTime;
        oldestMac = mac;
      }
      leases++;
    }




    // Check if all IP's are used and delete the oldest
    if (oldestMac !== null && lastIP - firstIP === leases) {
      const ip = this._state[oldestMac].address;

      // TODO: Notify deleted client
      delete this._state[oldestMac];

      return ip;
    }




    // Select a random IP, maybe not the best algorithm for quick selection if lots of ip's are given: TODO
    if (randIP) {

      while (1) {

        const ip = Tools.formatIp(firstIP + Math.random() * (lastIP - firstIP) |Â 0);

        if (ips.indexOf(ip) === -1) {
          return ip;
        }
      }
    }



    // Choose first free IP in subnet
    for (let i = firstIP; i <= lastIP; i++) {

      const ip = Tools.formatIp(i);

      if (ips.indexOf(ip) === -1) {
        return ip;
      }
    }
  },

  handleDiscover: function(req) {
    //console.log('Handle Discover', req);

    const lease = this._state[req.chaddr] = this._state[req.chaddr] || new Lease;
    lease.address = this._selectAddress(req.chaddr, req);
    lease.leasePeriod = this.config('leaseTime');
    lease.server = this.config('server');
    lease.state = 'OFFERED';

    this.sendOffer(req);
  },
  sendOffer: function(req) {

    //console.log('Send Offer');

    // Formulate the response object
    const ans = {
      op: BOOTREPLY,
      htype: 1, // RFC1700, hardware types: 1=Ethernet, 2=Experimental, 3=AX25, 4=ProNET Token Ring, 5=Chaos, 6=Tokenring, 7=Arcnet, 8=FDDI, 9=Lanstar (keep it constant)
      hlen: 6, // Mac addresses are 6 byte
      hops: 0,
      xid: req.xid, // 'xid' from client DHCPDISCOVER message
      secs: 0,
      flags: req.flags,
      ciaddr: INADDR_ANY,
      yiaddr: this._selectAddress(req.chaddr), // My offer
      siaddr: this.config('server'), // next server in bootstrap. That's us
      giaddr: req.giaddr,
      chaddr: req.chaddr, // Client mac address
      sname: '',
      file: '',
      options: this._getOptions({
        53: DHCPOFFER
      }, [
        1, 3, 51, 54, 6
      ], req.options[55])
    };

    // Send the actual data
    // INADDR_BROADCAST : 68 <- SERVER_IP : 67
    this._send(this.config('broadcast'), ans);

  },

  handleRequest: function(req) {
    //console.log('Handle Request', req);

    const lease = this._state[req.chaddr] = this._state[req.chaddr] || new Lease;
    lease.address = this._selectAddress(req.chaddr);
    lease.leasePeriod = this.config('leaseTime');
    lease.server = this.config('server');
    lease.state = 'BOUND';
    lease.bindTime = new Date;

    this.sendAck(req);
  },
  sendAck: function(req) {
    //console.log('Send ACK');
    // Formulate the response object
    const ans = {
      op: BOOTREPLY,
      htype: 1, // RFC1700, hardware types: 1=Ethernet, 2=Experimental, 3=AX25, 4=ProNET Token Ring, 5=Chaos, 6=Tokenring, 7=Arcnet, 8=FDDI, 9=Lanstar (keep it constant)
      hlen: 6, // Mac addresses are 6 byte
      hops: 0,
      xid: req.xid, // 'xid' from client DHCPREQUEST message
      secs: 0,
      flags: req.flags, // 'flags' from client DHCPREQUEST message
      ciaddr: req.ciaddr,
      yiaddr: this._selectAddress(req.chaddr), // my offer
      siaddr: this.config('server'), // server ip, that's us
      giaddr: req.giaddr, // 'giaddr' from client DHCPREQUEST message
      chaddr: req.chaddr, // 'chaddr' from client DHCPREQUEST message
      sname: '',
      file: '',
      options: this._getOptions({
        53: DHCPACK
      }, [
        1, 3, 51, 54, 6
      ], req.options[55])
    };

    this.emit('bound', this._state);

    // Send the actual data
    // INADDR_BROADCAST : 68 <- SERVER_IP : 67
    this._send(this.config('broadcast'), ans);
  },
  sendNak: function(req) {
    //console.log('Send NAK');
    // Formulate the response object
    const ans = {
      op: BOOTREPLY,
      htype: 1, // RFC1700, hardware types: 1=Ethernet, 2=Experimental, 3=AX25, 4=ProNET Token Ring, 5=Chaos, 6=Tokenring, 7=Arcnet, 8=FDDI, 9=Lanstar (keep it constant)
      hlen: 6, // Mac addresses are 6 byte
      hops: 0,
      xid: req.xid, // 'xid' from client DHCPREQUEST message
      secs: 0,
      flags: req.flags, // 'flags' from client DHCPREQUEST message
      ciaddr: INADDR_ANY,
      yiaddr: INADDR_ANY,
      siaddr: INADDR_ANY,
      giaddr: req.giaddr, // 'giaddr' from client DHCPREQUEST message
      chaddr: req.chaddr, // 'chaddr' from client DHCPREQUEST message
      sname: '', // unused
      file: '', // unused
      options: this._getOptions({
        53: DHCPNAK
      }, [
        54
      ])
    };

    // Send the actual data
    this._send(this.config('broadcast'), ans);
  },

  handleRelease: function() {

  },

  handleRenew: function() {
    // Send ack
  },

  listen: function(port, host, fn) {

    const sock = this._sock;

    sock.bind(port || SERVER_PORT, host || INADDR_ANY, function() {
      sock.setBroadcast(true);
      if (fn instanceof Function) {
        process.nextTick(fn);
      }
    });
  },

  close: function(callback) {
    this._sock.close(callback);
  },

  _send: function(host, data) {

    const sb = Protocol.format(data);

    this._sock.send(sb._data, 0, sb._w, CLIENT_PORT, host, function(err, bytes) {
      if (err) {
        console.log(err);
      } else {
        //console.log('Sent ', bytes, 'bytes');
      }
    });
  }

};








function Client(config) {

  EventEmitter.call(this);

  const self = this;
  const sock = dgram.createSocket({type: 'udp4', reuseAddr: true});

  sock.on('message', function(buf) {

    let req;

    try {
      req = Protocol.parse(buf);
    } catch (e) {
      self.emit('error', e);
      return;
    }

    self._req = req;

    if (req.op !== BOOTREPLY) {
      self.emit('error', new Error('Malformed packet'), req);
      return;
    }

    if (!req.options[53]) {
      self.emit('error', new Error('Got message, without valid message type'), req);
      return;
    }

    self.emit('message', req);

    // Handle request
    switch (req.options[53]) {
      case DHCPOFFER: // 2.
        self.handleOffer(req);
        break;
      case DHCPACK: // 4.
      case DHCPNAK: // 4.
        self.handleAck(req);
        break;
    }
  });

  sock.on('listening', function() {
    self.emit('listening', sock);
  });

  sock.on('close', function() {
    self.emit('close');
  });

  this._sock = sock;
  this._conf = config || {};
  this._state = new Lease;
}

Client.prototype = {

  // Socket handle
  _sock: null,

  // Config (cache) object
  _conf: null,

  // Current client state
  _state: null,

  // Incoming request
  _req: null,

  config: function(key) {

    if (key === 'mac') {

      if (this._conf.mac === undefined) {

        const interfaces = os.networkInterfaces();

        for (let intf in interfaces) {
          const addresses = interfaces[intf];
          for (let address in addresses) {
            if (addresses[address].family === 'IPv4' && !addresses[address].internal) {

              if (this._conf.mac === undefined) {
                this._conf.mac = addresses[address].mac;
              } else {
                throw new Error('Too many network interfaces, set mac address manually:\n\tclient = dhcp.createClient({mac: "12:23:34:45:56:67"});');
              }
            }
          }
        }
      }
      return this._conf.mac;

    } else if (key === 'features') {

      // Default list we request
      const def = [
        1, // netmask
        3, // routers
        51, // lease time
        54, // server ID
        6 // DNS
      ];

      const ft = this._conf.features;

      if (ft) {

        for (let f of ft) {

          let id = Options.conf[f];
          if (id) {

            id = parseInt(id, 10);

            if (def.indexOf(id) === -1) {
              def.push(id);
            }

          } else {
            throw new Error('Unknown option ' + f);
          }
        }

        return def;
      }

    } else {
      throw new Error('Unknown config key ' + key);
    }
  },

  sendDiscover: function() {

    //console.log('Send Discover');

    const mac = this.config('mac');

    // Formulate the response object
    const ans = {
      op: BOOTREQUEST,
      htype: 1, // RFC1700, hardware types: 1=Ethernet, 2=Experimental, 3=AX25, 4=ProNET Token Ring, 5=Chaos, 6=Tokenring, 7=Arcnet, 8=FDDI, 9=Lanstar (keep it constant)
      hlen: 6, // Mac addresses are 6 byte
      hops: 0,
      xid: this._state.xid++, // Selected by client on DHCPDISCOVER
      secs: 0, // 0 or seconds since DHCP process started
      flags: 0, // 0 or 0x80 (if client requires broadcast reply)
      ciaddr: INADDR_ANY, // 0 for DHCPDISCOVER, other implementations send currently assigned IP - but we follow RFC
      yiaddr: INADDR_ANY,
      siaddr: INADDR_ANY,
      giaddr: INADDR_ANY,
      chaddr: mac,
      sname: '', // unused
      file: '', // unused
      options: {
        57: 1500, // Max message size
        53: DHCPDISCOVER,
        61: mac, // MAY
        55: this.config('features') // MAY
                // TODO: requested IP optional
      }
    };

    this._state.state = 'SELECTING';
    this._state.tries = 0;

    // TODO: set timeouts

    // Send the actual data
    // INADDR_ANY : 68 -> INADDR_BROADCAST : 67
    this._send(INADDR_BROADCAST, ans);
  },
  handleOffer: function(req) {
    //console.log('Handle Offer', req);

    // Select an offer out of all offers
    // We simply take the first one and change the state then

    if (req.options[54]) {
      // Check if we already sent a request to the first appearing server
      if (this._state.state !== 'REQUESTING') {
        this.sendRequest(req);
      }
    } else {
      this.emit('error', 'Offer does not have a server identifier', req);
    }
  },

  sendRequest: function(req) {

    //console.log('Send Request');

    // Formulate the response object
    const ans = {
      op: BOOTREQUEST,
      htype: 1, // RFC1700, hardware types: 1=Ethernet, 2=Experimental, 3=AX25, 4=ProNET Token Ring, 5=Chaos, 6=Tokenring, 7=Arcnet, 8=FDDI, 9=Lanstar (keep it constant)
      hlen: 6, // Mac addresses are 6 byte
      hops: 0,
      xid: req.xid, // 'xid' from server DHCPOFFER message
      secs: 0, // 0 or seconds since DHCP process started
      flags: 0, // 0 or 0x80 (if client requires broadcast reply)
      ciaddr: INADDR_ANY, // 0 for DHCPREQUEST
      yiaddr: INADDR_ANY,
      siaddr: INADDR_ANY,
      giaddr: INADDR_ANY,
      chaddr: this.config('mac'),
      sname: '', // unused
      file: '', // unused
      options: {
        57: 1500, // Max message size
        53: DHCPREQUEST,
        61: this.config('mac'), // MAY
        55: this.config('features'), // MAY
        50: this._state.address, // requested IP, TODO: MUST (selecting or INIT REBOOT) MUST NOT (BOUND, RENEW)
        // TODO: server identifier: MUST (after selecting) MUST NOT (INIT REBOOT, BOUND, RENEWING, REBINDING)
      }
    };

    this._state.server = req.options[54];
    this._state.address = req.yiaddr;
    this._state.state = 'REQUESTING';
    this._state.tries = 0;

    // TODO: retry timeout

    // INADDR_ANY : 68 -> INADDR_BROADCAST : 67
    this._send(INADDR_BROADCAST, ans);
  },
  handleAck: function(req) {

    if (req.options[53] === DHCPACK) {
      // We now know the IP for sure
      //console.log('Handle ACK', req);

      this._state.bindTime = new Date;
      this._state.state = 'BOUND';
      this._state.address = req.yiaddr;
      this._state.options = {};

      // Lease time is available
      if (req.options[51]) {
        this._state.leasePeriod = req.options[51];
        this._state.renewPeriod = req.options[51] / 2;
        this._state.rebindPeriod = req.options[51];
      }

      // Renewal time is available
      if (req.options[58]) {
        this._state.renewPeriod = req.options[58];
      }

      // Rebinding time is available
      if (req.options[59]) {
        this._state.rebindPeriod = req.options[59];
      }

      // TODO: set renew & rebind timer

      const options = req.options;
      this._state.options = {};

      // Map all options from request
      for (let id in options) {

        if (id === '53' || id === '51' || id === '58' || id === '59')
          continue;

        const conf = Options.opts[id];
        const key = conf.config ||Â conf.attr;

        if (conf.enum) {
          this._state.options[key] = conf.enum[options[id]];
        } else {
          this._state.options[key] = options[id];
        }
      }

      // If netmask is not given, set it to a class related mask
      if (!this._state.options.netmask) {

        this._state.options.netmask = Tools.formatIp(
                Tools.netmaskFromIP(this._state.address));
      }

      const cidr = Tools.CIDRFromNetmask(this._state.options.netmask);

      // If router is not given, guess one
      if (!this._state.options.router) {
        this._state.options.router = Tools.formatIp(
                Tools.gatewayFromIpCIDR(this._state.address, cidr));
      }

      // If broadcast is missing
      if (!this._state.options.broadcast) {
        this._state.options.broadcast = Tools.formatIp(
                Tools.broadcastFromIpCIDR(this._state.address, cidr));
      }

      this.emit('bound', this._state);

    } else {
      // We're sorry, today we have no IP for you...
    }
  },

  sendRelease: function(req) {

    //console.log('Send Release');

    // Formulate the response object
    const ans = {
      op: BOOTREQUEST,
      htype: 1, // RFC1700, hardware types: 1=Ethernet, 2=Experimental, 3=AX25, 4=ProNET Token Ring, 5=Chaos, 6=Tokenring, 7=Arcnet, 8=FDDI, 9=Lanstar (keep it constant)
      hlen: 6, // Mac addresses are 6 byte
      hops: 0,
      xid: this._state.xid++, // Selected by client on DHCPRELEASE
      secs: 0, // 0 or seconds since DHCP process started
      flags: 0,
      ciaddr: this.config('server'),
      yiaddr: INADDR_ANY,
      siaddr: INADDR_ANY,
      giaddr: INADDR_ANY,
      chaddr: this.config('mac'),
      sname: '', // unused
      file: '', // unused
      options: {
        53: DHCPRELEASE,
        // TODO: MAY clientID
        54: this._state.server // MUST server identifier
      }
    };

    this._state.bindTime = null;
    this._state.state = 'RELEASED';
    this._state.tries = 0;

    this.emit('released');

    // Send the actual data
    this._send(this._state.server, ans); // Send release directly to server
  },

  sendRenew: function() {

    //console.log('Send Renew');

    // TODO: check ans against rfc

    // Formulate the response object
    const ans = {
      op: BOOTREQUEST,
      htype: 1, // RFC1700, hardware types: 1=Ethernet, 2=Experimental, 3=AX25, 4=ProNET Token Ring, 5=Chaos, 6=Tokenring, 7=Arcnet, 8=FDDI, 9=Lanstar (keep it constant)
      hlen: 6, // Mac addresses are 6 byte
      hops: 0,
      xid: this._state.xid++, // Selected by client on DHCPRELEASE
      secs: 0, // 0 or seconds since DHCP process started
      flags: 0,
      ciaddr: this.config('server'),
      yiaddr: INADDR_ANY,
      siaddr: INADDR_ANY,
      giaddr: INADDR_ANY,
      chaddr: this.config('mac'),
      sname: '', // unused
      file: '', // unused
      options: {
        53: DHCPREQUEST,
        50: this._state.address,
        // TODO: MAY clientID
        54: this._state.server // MUST server identifier
      }
    };

    this._state.state = 'RENEWING';
    this._state.tries = 0;

    // Send the actual data
    this._send(this._state.server, ans); // Send release directly to server
  },

  sendRebind: function() {

    //console.log('Send Rebind');

    // TODO: check ans against rfc

    // Formulate the response object
    const ans = {
      op: BOOTREQUEST,
      htype: 1, // RFC1700, hardware types: 1=Ethernet, 2=Experimental, 3=AX25, 4=ProNET Token Ring, 5=Chaos, 6=Tokenring, 7=Arcnet, 8=FDDI, 9=Lanstar (keep it constant)
      hlen: 6, // Mac addresses are 6 byte
      hops: 0,
      xid: this._state.xid++, // Selected by client on DHCPRELEASE
      secs: 0, // 0 or seconds since DHCP process started
      flags: 0,
      ciaddr: this.config('server'),
      yiaddr: INADDR_ANY,
      siaddr: INADDR_ANY,
      giaddr: INADDR_ANY,
      chaddr: this.config('mac'),
      sname: '', // unused
      file: '', // unused
      options: {
        53: DHCPREQUEST,
        50: this._state.address,
        // TODO: MAY clientID
        54: this._state.server // MUST server identifier
      }
    };

    this._state.state = 'REBINDING';
    this._state.tries = 0;

    // TODO: timeout

    // Send the actual data
    this._send(INADDR_BROADCAST, ans); // Send release directly to server
  },

  listen: function(port, host, fn) {

    const sock = this._sock;

    sock.bind(port || CLIENT_PORT, host || INADDR_ANY, function() {
      sock.setBroadcast(true);
      if (fn instanceof Function) {
        process.nextTick(fn);
      }
    });
  },

  close: function(callback) {
    this._sock.close(callback);
  },

  _send: function(host, data) {

    const sb = Protocol.format(data);

    this._sock.send(sb._data, 0, sb._w, SERVER_PORT, host, function(err, bytes) {
      if (err) {
        console.log(err);
      } else {
        //console.log('Sent ', bytes, 'bytes');
      }
    });
  }

};

util.inherits(Server, EventEmitter);
util.inherits(Client, EventEmitter);

exports.DHCP = exports.default = module.exports = {
  createServer: function(opt) {
    return new Server(opt);
  },
  createClient: function(opt) {
    return new Client(opt);
  },
  createBroadcastHandler: function() {
    return new Server(null, true);
  },
  addOption: Options.addOption,
  DHCPDISCOVER: DHCPDISCOVER,
  DHCPOFFER: DHCPOFFER,
  DHCPREQUEST: DHCPREQUEST,
  DHCPDECLINE: DHCPDECLINE,
  DHCPACK: DHCPACK,
  DHCPNAK: DHCPNAK,
  DHCPRELEASE: DHCPRELEASE,
  DHCPINFORM: DHCPINFORM
};

/**
 * Format:
 * name: A string description of the option
 * type: A type, which is used by SeqBuffer to parse the option
 * config: The name of the configuration option
 * attr: When a client sends data and an option has no configuration, this is the attribute name for the option
 * default: Gets passed if no configuration is supplied for the option (can be a value or a function)
 * enum: Represents a map of possible enum for this option
 */

const Tools = require('./tools.js');

// RFC 1533: https://tools.ietf.org/html/rfc1533
// RFC 2132: https://www.ietf.org/rfc/rfc2132.txt
// RFC 3011: https://tools.ietf.org/html/rfc3011
const opts = {
  1: {// RFC 2132
    name: 'Subnet Mask',
    type: 'IP',
    config: 'netmask',
    default: function() {

      // Default is the minimal CIDR for the given range

      const range = this.config('range');

      const net = Tools.netmaskFromRange(range[0], range[1]);

      return Tools.formatIp(net);
    }
  },
  2: {// RFC 2132
    name: 'Time Offset',
    type: 'Int32',
    config: 'timeOffset'
  },
  3: {// RFC 2132
    name: 'Router',
    type: 'IPs',
    config: 'router',
    default: function() {

      // Let's assume the router is the first host of the range if we don't know better
      // Maybe we should calculate the actual host of the subnet instead of assuming the user made it right

      const range = this.config('range');

      return range[0];
    }
  },
  4: {// RFC 2132
    name: 'Time Server',
    type: 'IPs',
    config: 'timeServer'
  },
  5: {
    name: 'Name Server',
    type: 'IPs',
    config: 'nameServer'
  },
  6: {// RFC 2132
    name: 'Domain Name Server',
    type: 'IPs',
    config: 'dns',
    default: ['8.8.8.8', '8.8.4.4'] // Use Google DNS server as default
  },
  7: {// RFC 2132
    name: 'Log Server',
    type: 'IPs',
    config: 'logServer'
  },
  8: {
    name: 'Cookie Server',
    type: 'IPs',
    config: 'cookieServer'
  },
  9: {
    name: 'LPR Server',
    type: 'IPs',
    config: 'lprServer'
  },
  10: {
    name: 'Impress Server',
    type: 'IPs',
    config: 'impressServer'
  },
  11: {
    name: 'Resource Location Server',
    type: 'IPs',
    config: 'rscServer'
  },
  12: {// RFC 2132
    name: 'Host Name',
    type: 'ASCII',
    config: 'hostname'
  },
  13: {
    name: 'Boot File Size',
    type: 'UInt16',
    config: 'bootFileSize'
  },
  14: {
    name: 'Merit Dump File',
    type: 'ASCII',
    config: 'dumpFile'
  },
  15: {// RFC 2132
    name: 'Domain Name',
    type: 'ASCII',
    config: 'domainName'
  },
  16: {
    name: 'Swap Server',
    type: 'IP',
    config: 'swapServer'
  },
  17: {
    name: 'Root Path',
    type: 'ASCII',
    config: 'rootPath'
  },
  18: {
    name: 'Extension Path',
    type: 'ASCII',
    config: 'extensionPath'
  },
  19: {
    name: 'IP Forwarding', // Force client to enable ip forwarding
    type: 'UInt8',
    config: 'ipForwarding',
    enum: {
      0: 'Disabled',
      1: 'Enabled'
    }
  },
  20: {
    name: 'Non-Local Source Routing',
    type: 'Bool',
    config: 'nonLocalSourceRouting'
  },
  21: {
    name: 'Policy Filter',
    type: 'IPs',
    config: 'policyFilter'
  },
  22: {
    name: 'Maximum Datagram Reassembly Size',
    type: 'UInt16',
    config: 'maxDatagramSize'
  },
  23: {
    name: 'Default IP Time-to-live',
    type: 'UInt8',
    config: 'datagramTTL'
  },
  24: {
    name: 'Path MTU Aging Timeout',
    type: 'UInt32',
    config: 'mtuTimeout'
  },
  25: {
    name: 'Path MTU Plateau Table',
    type: 'UInt16s',
    config: 'mtuSizes'
  },
  26: {
    name: 'Interface MTU',
    type: 'UInt16',
    config: 'mtuInterface'
  },
  27: {
    name: 'All Subnets are Local',
    type: 'UInt8',
    config: 'subnetsAreLocal',
    enum: {
      0: 'Disabled',
      1: 'Enabled'
    }
  },
  28: {
    name: 'Broadcast Address',
    type: 'IP',
    config: 'broadcast',
    default: function() {

      const range = this.config('range');
      const ip = range[0]; // range begin is obviously a valid ip
      const cidr = Tools.CIDRFromNetmask(this.config('netmask'));

      return Tools.formatIp(Tools.broadcastFromIpCIDR(ip, cidr));
    }
  },
  29: {
    name: 'Perform Mask Discovery',
    type: 'UInt8',
    config: 'maskDiscovery',
    enum: {
      0: 'Disabled',
      1: 'Enabled'
    }
  },
  30: {
    name: 'Mask Supplier',
    type: 'UInt8',
    config: 'maskSupplier',
    enum: {
      0: 'Disabled',
      1: 'Enabled'
    }
  },
  31: {
    name: 'Perform Router Discovery',
    type: 'UInt8',
    config: 'routerDiscovery',
    enum: {
      0: 'Disabled',
      1: 'Enabled'
    }
  },
  32: {
    name: 'Router Solicitation Address',
    type: 'IP',
    config: 'routerSolicitation'
  },
  33: {
    name: 'Static Route',
    type: 'IPs', // Always pairs of two must be provided, [destination1, route1, destination2, route2, ...]
    config: 'staticRoutes'
  },
  34: {
    name: 'Trailer Encapsulation',
    type: 'Bool',
    config: 'trailerEncapsulation'
  },
  35: {
    name: 'ARP Cache Timeout',
    type: 'UInt32',
    config: 'arpCacheTimeout'
  },
  36: {
    name: 'Ethernet Encapsulation',
    type: 'Bool',
    config: 'ethernetEncapsulation'
  },
  37: {
    name: 'TCP Default TTL',
    type: 'UInt8',
    config: 'tcpTTL'
  },
  38: {
    name: 'TCP Keepalive Interval',
    type: 'UInt32',
    config: 'tcpKeepalive'
  },
  39: {
    name: 'TCP Keepalive Garbage',
    type: 'Bool',
    config: 'tcpKeepaliveGarbage'
  },
  40: {
    name: 'Network Information Service Domain',
    type: 'ASCII',
    config: 'nisDomain'
  },
  41: {
    name: 'Network Information Servers',
    type: 'IPs',
    config: 'nisServer'
  },
  42: {
    name: 'Network Time Protocol Servers',
    type: 'IPs',
    config: 'ntpServer'
  },
  43: {// RFC 2132
    name: 'Vendor Specific Information',
    type: 'UInt8s',
    config: 'vendor'
  },
  44: {
    name: 'NetBIOS over TCP/IP Name Server',
    type: 'IPs',
    config: 'nbnsServer'
  },
  45: {
    name: 'NetBIOS over TCP/IP Datagram Distribution Server',
    type: 'IP',
    config: 'nbddServer'
  },
  46: {
    name: 'NetBIOS over TCP/IP Node Type',
    type: 'UInt8',
    enum: {
      0x1: 'B-node',
      0x2: 'P-node',
      0x4: 'M-node',
      0x8: 'H-node'
    },
    config: 'nbNodeType'
  },
  47: {
    name: 'NetBIOS over TCP/IP Scope',
    type: 'ASCII',
    config: 'nbScope'
  },
  48: {
    name: 'X Window System Font Server',
    type: 'IPs',
    config: 'xFontServer'
  },
  49: {
    name: 'X Window System Display Manager',
    type: 'IPs',
    config: 'xDisplayManager'
  },
  50: {// IP wish of client in DHCPDISCOVER
    name: 'Requested IP Address',
    type: 'IP',
    attr: 'requestedIpAddress'
  },
  51: {// RFC 2132
    name: 'IP Address Lease Time',
    type: 'UInt32',
    config: 'leaseTime',
    default: 86400
  },
  52: {
    name: 'Option Overload',
    type: 'UInt8',
    enum: {
      1: 'file',
      2: 'sname',
      3: 'both'
    }
  },
  53: {
    name: 'DHCP Message Type',
    type: 'UInt8',
    enum: {
      1: 'DHCPDISCOVER',
      2: 'DHCPOFFER',
      3: 'DHCPREQUEST',
      4: 'DHCPDECLINE',
      5: 'DHCPACK',
      6: 'DHCPNAK',
      7: 'DHCPRELEASE',
      8: 'DHCPINFORM'
    }
  },
  54: {
    name: 'Server Identifier',
    type: 'IP',
    config: 'server'
  },
  55: {// Sent by client to show all things the client wants
    name: 'Parameter Request List',
    type: 'UInt8s',
    attr: 'requestParameter'
  },
  56: {// Error message sent in DHCPNAK on failure
    name: 'Message',
    type: 'ASCII'
  },
  57: {
    name: 'Maximum DHCP Message Size',
    type: 'UInt16',
    config: 'maxMessageSize',
    default: 1500
  },
  58: {
    name: 'Renewal (T1) Time Value',
    type: 'UInt32',
    config: 'renewalTime',
    default: 3600
  },
  59: {
    name: 'Rebinding (T2) Time Value',
    type: 'UInt32',
    config: 'rebindingTime',
    default: 14400
  },
  60: {// RFC 2132: Sent by client to identify type of a client
    name: 'Vendor Class-Identifier',
    type: 'ASCII',
    attr: 'vendorClassId' // 'MSFT' (win98, Me, 2000), 'MSFT 98' (win 98, me), 'MSFT 5.0' (win 2000 and up), 'alcatel.noe.0' (alcatel IP touch phone), ...
  },
  61: {// Sent by client to specify their unique identifier, to be used to disambiguate the lease on the server
    name: 'Client-Identifier',
    type: 'ASCII',
    attr: 'clientId'
  },
  64: {
    name: 'Network Information Service+ Domain',
    type: 'ASCII',
    config: 'nisPlusDomain'
  },
  65: {
    name: 'Network Information Service+ Servers',
    type: 'IPs',
    config: 'nisPlusServer'
  },
  66: {// RFC 2132: PXE option
    name: 'TFTP server name',
    type: 'ASCII',
    config: 'tftpServer' // e.g. '192.168.0.1'
  },
  67: {// RFC 2132: PXE option
    name: 'Bootfile name',
    type: 'ASCII',
    config: 'bootFile' // e.g. 'pxelinux.0'
  },
  68: {
    name: 'Mobile IP Home Agent',
    type: 'ASCII',
    config: 'homeAgentAddresses'
  },
  69: {
    name: 'Simple Mail Transport Protocol (SMTP) Server',
    type: 'IPs',
    config: 'smtpServer'
  },
  70: {
    name: 'Post Office Protocol (POP3) Server',
    type: 'IPs',
    config: 'pop3Server'
  },
  71: {
    name: 'Network News Transport Protocol (NNTP) Server',
    type: 'IPs',
    config: 'nntpServer'
  },
  72: {
    name: 'Default World Wide Web (WWW) Server',
    type: 'IPs',
    config: 'wwwServer'
  },
  73: {
    name: 'Default Finger Server',
    type: 'IPs',
    config: 'fingerServer'
  },
  74: {
    name: 'Default Internet Relay Chat (IRC) Server',
    type: 'IPs',
    config: 'ircServer'
  },
  75: {
    name: 'StreetTalk Server',
    type: 'IPs',
    config: 'streetTalkServer'
  },
  76: {
    name: 'StreetTalk Directory Assistance (STDA) Server',
    type: 'IPs',
    config: 'streetTalkDAServer'
  },
  80: {// RFC 4039: http://www.networksorcery.com/enp/rfc/rfc4039.txt
    name: 'Rapid Commit',
    type: 'Bool',
    attr: 'rapidCommit'
  }, /*
   82: { // RFC 3046, relayAgentInformation
   
   },*/
  95: {
    name: 'LDAP Servers',
    type: 'IPs',
    config: 'ldapServer'
  },
  116: {// RFC 2563: https://tools.ietf.org/html/rfc2563
    name: 'Auto-Configure',
    type: 'UInt8',
    enum: {
      0: 'DoNotAutoConfigure',
      1: 'AutoConfigure'
    },
    attr: 'autoConfigure'
  },
  118: {// RFC 301
    name: 'Subnet Selection',
    type: 'IP',
    config: 'subnetSelection'
  },
  119: {// dns search list
    name: 'Domain Search List',
    type: 'ASCII',
    config: 'domainSearchList'
  },
  121: {// rfc 3442
    name: 'Classless Route Option Format',
    type: 'IPs',
    config: 'classlessRoute'
  },
  145: {// RFC 6704: https://tools.ietf.org/html/rfc6704
    name: 'Forcerenew Nonce',
    type: 'UInt8s',
    attr: 'renewNonce'
  },
  208: {// https://tools.ietf.org/html/rfc5071
    name: 'PXE Magic Option',
    type: 'UInt32',
    config: 'pxeMagicOption',
    default: 0xF100747E
  },
  209: {// https://tools.ietf.org/html/rfc5071
    name: 'PXE Config File',
    type: 'ASCII',
    config: 'pxeConfigFile'
  },
  210: {// https://tools.ietf.org/html/rfc5071
    name: 'PXE Path Prefix',
    type: 'ASCII',
    config: 'pxePathPrefix'
  },
  211: {// https://tools.ietf.org/html/rfc5071
    name: 'PXE Reboot Time',
    type: 'UInt32',
    config: 'pxeRebootTime'
  },
  249: {// https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dhcpe/f9c19c79-1c7f-4746-b555-0c0fc523f3f9
    name: 'Microsoft Classless Static Route Option',
    type: 'ASCII',
    config: 'classlessStaticRoute'
  },
  252: {// https://en.wikipedia.org/wiki/Web_Proxy_Auto-Discovery_Protocol
    name: 'Web Proxy Auto-Discovery',
    type: 'ASCII',
    config: 'wpad'
  },
  1001: {// TODO: Fix my number!
    name: 'Static',
    config: 'static'
  },
  1002: {// TODO: Fix my number!
    name: 'Random IP',
    type: 'Bool',
    config: 'randomIP',
    default: true
  }
};

// Create inverse config/attr lookup map
const conf = {};
const attr = {};
function addOption(code, opt) {

  opts[code] = opt;

  if (opt.config) {
    conf[opt.config] = parseInt(code, 10);
  } else if (opt.attr) {
    conf[opt.attr] = parseInt(code, 10);
  }
}

for (let i in opts) {
  addOption(i, opts[i]);
}

module.exports = {
  opts: opts, // id -> config
  conf: conf, // conf option -> id
  attr: attr, // attr name -> id
  addOption: addOption
};
/**
 * @license DHCP.js v0.2.20 28/06/2017
 * http://www.xarg.org/2017/06/a-pure-javascript-dhcp-implementation/
 *
 * Copyright (c) 2017, Robert Eisele (robert@xarg.org)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 **/

const SeqBuffer = require('./seqbuffer.js');

module.exports = {

  parse: function(buf) {
    
    if (buf.length < 230) { // 230 byte minimum length of DHCP packet
      throw new Error('Received data is too short');
    }

    const sb = new SeqBuffer(buf);

    let hlen, htype;

    // RFC 2131
    return {
      op: sb.getUInt8(), // op code: 1=request, 2=reply
      htype: (htype = sb.getUInt8()), // hardware addr type: 1 for 10mb ethernet
      hlen: (hlen = sb.getUInt8()), // hardware addr length: 6 for 10mb ethernet
      hops: sb.getUInt8(), // relay hop count
      xid: sb.getUInt32(), // session id, initialized by client
      secs: sb.getUInt16(), // seconds since client began address acquistion
      flags: sb.getUInt16(), // 
      ciaddr: sb.getIP(), // client IP when BOUND, RENEW, REBINDING state
      yiaddr: sb.getIP(), // 'your' client IP
      siaddr: sb.getIP(), // next server to use in boostrap, returned in OFFER & ACK
      giaddr: sb.getIP(), // gateway/relay agent IP
      chaddr: sb.getMAC(htype, hlen), // client hardware address
      sname: sb.getUTF8(64), // server host name
      file: sb.getUTF8(128), // boot file name
      magicCookie: sb.getUInt32(), // contains 99, 130, 83, 99
      options: sb.getOptions()
    };
  },

  format: function(data) {

    const sb = new SeqBuffer;

    sb.addUInt8(data.op);
    sb.addUInt8(data.htype);
    sb.addUInt8(data.hlen);
    sb.addUInt8(data.hops);
    sb.addUInt32(data.xid);
    sb.addUInt16(data.secs);
    sb.addUInt16(data.flags);
    sb.addIP(data.ciaddr);
    sb.addIP(data.yiaddr);
    sb.addIP(data.siaddr);
    sb.addIP(data.giaddr);
    sb.addMac(data.chaddr);
    sb.addUTF8Pad(data.sname, 64);
    sb.addUTF8Pad(data.file, 128);
    sb.addUInt32(0x63825363);
    sb.addOptions(data.options);

    sb.addUInt8(255); // Mark end

    // TODO: Must options packet be >= 68 byte and 4 byte alligned?

    return sb;
  }

};
/**
 * @license DHCP.js v0.2.20 28/06/2017
 * http://www.xarg.org/2017/06/a-pure-javascript-dhcp-implementation/
 *
 * Copyright (c) 2017, Robert Eisele (robert@xarg.org)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 **/

const Options = require('./options.js').opts;

function trimZero(str) {

  const pos = str.indexOf('\x00');

  return pos === -1 ? str : str.substr(0, pos);
}

function SeqBuffer(buf, len) {

  this._data = buf || Buffer.alloc(len || 1500); // alloc() fills the buffer with '0'
}

SeqBuffer.prototype = {

  _data: null,
  _r: 0,
  _w: 0,

  addUInt8: function(val) {
    this._w = this._data.writeUInt8(val, this._w, true);
  },
  getUInt8: function() {
    return this._data.readUInt8(this._r++, true);
  },
  //
  addInt8: function(val) {
    this._w = this._data.writeInt8(val, this._w, true);
  },
  getInt8: function() {
    return this._data.readInt8(this._r++, true);
  },
  //
  addUInt16: function(val) {
    this._w = this._data.writeUInt16BE(val, this._w, true);
  },
  getUInt16: function() {
    return this._data.readUInt16BE((this._r += 2) - 2, true);
  },
  //
  addInt16: function(val) {
    this._w = this._data.writeInt16BE(val, this._w, true);
  },
  getInt16: function() {
    return this._data.readInt16BE((this._r += 2) - 2, true);
  },
  //
  addUInt32: function(val) {
    this._w = this._data.writeUInt32BE(val, this._w, true);
  },
  getUInt32: function() {
    return this._data.readUInt32BE((this._r += 4) - 4, true);
  },
  //
  addInt32: function(val) {
    this._w = this._data.writeInt32BE(val, this._w, true);
  },
  getInt32: function() {
    return this._data.readInt32BE((this._r += 4) - 4, true);
  },
  //
  addUTF8: function(val) {
    this._w += this._data.write(val, this._w, 'utf8');
  },
  addUTF8Pad: function(val, fixLen) {

    let len = Buffer.from(val, 'utf8').length;
    for (let n = 0; len > fixLen; n++) {
      val = val.slice(0, fixLen - n); // Truncate as long as character length is > fixLen
      len = Buffer.from(val, 'utf8').length;
    }

    this._data.fill(0, this._w, this._w + fixLen);
    this._data.write(val, this._w, 'utf8');
    this._w += fixLen;
  },
  getUTF8: function(len) {
    return trimZero(this._data.toString('utf8', this._r, this._r += len));
  },
  //
  addASCII: function(val) {
    this._w += this._data.write(val, this._w, 'ascii');
  },
  addASCIIPad: function(val, fixLen) {
    this._data.fill(0, this._w, this._w + fixLen);
    this._data.write(val.slice(0, fixLen), this._w, 'ascii');
    this._w += fixLen;
  },
  getASCII: function(len) {
    return trimZero(this._data.toString('ascii', this._r, this._r += len));
  },
  //
  addIP: function(ip) {
    const self = this;
    const octs = ip.split('.');

    if (octs.length !== 4) {
      throw new Error('Invalid IP address ' + ip);
    }

    for (let val of octs) {

      val = parseInt(val, 10);
      if (0 <= val && val < 256) {
        self.addUInt8(val);
      } else {
        throw new Error('Invalid IP address ' + ip);
      }
    }
  },
  getIP: function() {

    return        this.getUInt8() +
            '.' + this.getUInt8() +
            '.' + this.getUInt8() +
            '.' + this.getUInt8();
  },
  //
  addIPs: function(ips) {

    if (ips instanceof Array) {
      for (let ip of ips) {
        this.addIP(ip);
      }
    } else {
      this.addIP(ips);
    }
  },
  getIPs: function(len) {
    const ret = [];
    for (let i = 0; i < len; i += 4) {
      ret.push(this.getIP());
    }
    return ret;
  },
  //
  addMac: function(mac) {

    const octs = mac.split(/[-:]/);

    if (octs.length !== 6) {
      throw new Error('Invalid Mac address ' + mac);
    }

    for (let val of octs) {
      val = parseInt(val, 16);
      if (0 <= val && val < 256) {
        this.addUInt8(val);
      } else {
        throw new Error('Invalid Mac address ' + mac);
      }
    }

    // Add 10 more byte to pad 16 byte
    this.addUInt32(0);
    this.addUInt32(0);
    this.addUInt16(0);
  },
  getMAC: function(htype, hlen) {

    const mac = this._data.toString('hex', this._r, this._r += hlen);

    if (htype !== 1 || hlen !== 6) {
      throw new Error('Invalid hardware address (len=' + hlen + ', type=' + htype + ')');
    }

    this._r += 10; // + 10 since field is 16 byte and only 6 are used for htype=1
    return mac.toUpperCase().match(/../g).join('-');
  },
  //
  addBool: function() {
    /* void */
  },
  getBool: function() {
    return true;
  },
  //
  addOptions: function(opts) {

    for (let i in opts) {

      if (opts.hasOwnProperty(i)) {

        const opt = Options[i];
        let len = 0;
        let val = opts[i];

        if (val === null) {
          continue;
        }

        switch (opt.type) {
          case 'UInt8':
          case 'Int8':
            len = 1;
            break;
          case 'UInt16':
          case 'Int16':
            len = 2;
            break;
          case 'UInt32':
          case 'Int32':
          case 'IP':
            len = 4;
            break;
          case 'IPs':
            len = val instanceof Array ? 4 * val.length : 4;
            break;
          case 'ASCII':
            len = val.length;
            if (len === 0)
              continue; // Min length has to be 1
            if (len > 255) {
              console.error(val + ' too long, truncating...');
              val = val.slice(0, 255);
              len = 255;
            }
            break;
          case 'UTF8':
            len = Buffer.from(val, 'utf8').length;
            if (len === 0)
              continue; // Min length has to be 1
            for (let n = 0; len > 255; n++) {
              val = val.slice(0, 255 - n); // Truncate as long as character length is > 255
              len = Buffer.from(val, 'utf8').length;
            }
            break;
          case 'Bool':
            if (!(val === true || val === 1 || val === '1' || val === 'true' || val === 'TRUE' || val === 'True'))
              continue;
            // Length must be zero, so nothing to do here
            break;
          case 'UInt8s':
            len = val instanceof Array ? val.length : 1;
            break;
          case 'UInt16s':
            len = val instanceof Array ? 2 * val.length : 2;
            break;
          default:
            throw new Error('No such type ' + opt.type);
        }

        // Write code
        this.addUInt8(i);

        // Write length
        this.addUInt8(len);

        // Write actual data
        this['add' + opt.type](val);
      }
    }
  },
  getOptions: function() {

    const options = {};
    const buf = this._data;

    while (this._r < buf.length) {

      let opt = this.getUInt8();

      if (opt === 0xff) { // End type
        break;
      } else if (opt === 0x00) { // Pad type
        this._r++; // NOP
      } else {

        let len = this.getUInt8();

        if (opt in Options) {
          options[opt] = this['get' + Options[opt].type](len);
        } else {
          this._r += len;
          console.error('Option ' + opt + ' not known');
        }
      }
    }
    return options;
  },
  //
  addUInt8s: function(arr) {

    if (arr instanceof Array) {
      for (let i = 0; i < arr.length; i++) {
        this.addUInt8(arr[i]);
      }
    } else {
      this.addUInt8(arr);
    }
  },
  getUInt8s: function(len) {
    const ret = [];
    for (let i = 0; i < len; i++) {
      ret.push(this.getUInt8());
    }
    return ret;
  },
  addUInt16s: function(arr) {

    if (arr instanceof Array) {
      for (let i = 0; i < arr.length; i++) {
        this.addUInt16(arr[i]);
      }
    } else {
      this.addUInt16(arr);
    }
  },
  getUInt16s: function(len) {
    const ret = [];
    for (let i = 0; i < len; i += 2) {
      ret.push(this.getUInt16());
    }
    return ret;
  },
  //
  getHex: function(len) {
    return this._data.toString('hex', this._r, this._r += len);
  }
};

module.exports = SeqBuffer;


module.exports = {

  parseIp: function (str) {
    const octs = str.split(".");

    if (octs.length !== 4) {
      throw new Error('Invalid IP address ' + str);
    }

    return octs.reduce(function (prev, val) {
      val = parseInt(val, 10);

      if (0 <= val && val < 256) {
        return (prev << 8) |Â val;
      } else {
        throw new Error('Invalid IP address ' + str);
      }
    }, 0);
  },
  formatIp: function (num) {
    let ip = "";

    for (let i = 24; i >= 0; i -= 8) {

      if (ip)
        ip += ".";

      ip += ((num >>> i) & 0xFF).toString(10);
    }
    return ip;
  },
  // Source: http://www.xarg.org/tools/subnet-calculator/
  netmaskFromCIDR: function (cidr) {
    return -1 << (32 - cidr);
  },
  netmaskFromIP: function (ip) {
    // we don't have much information, pick a class related netmask

    if (typeof ip === "string")
      ip = this.parseIp(ip);

    const first = ip >>> 24;

    if (first <= 127) {
      return 0xff000000;
    } else if (first >= 192) {
      return 0xffffff00;
    } else {
      return 0xffff0000;
    }
  },
  // Source: http://www.xarg.org/tools/subnet-calculator/
  wildcardFromCIDR: function (cidr) {
    return ~this.netmaskFromCIDR(cidr);
  },
  // Source: http://www.xarg.org/tools/subnet-calculator/
  networkFromIpCIDR: function (ip, cidr) {

    if (typeof ip === "string")
      ip = this.parseIp(ip);

    return this.netmaskFromCIDR(cidr) & ip;
  },
  // Source: http://www.xarg.org/tools/subnet-calculator/
  broadcastFromIpCIDR: function (ip, cidr) {

    if (typeof ip === "string")
      ip = this.parseIp(ip);

    return this.networkFromIpCIDR(ip, cidr) | this.wildcardFromCIDR(cidr);
  },
  // Source: http://www.xarg.org/tools/subnet-calculator/
  CIDRFromNetmask: function (net) {

    if (typeof net === "string")
      net = this.parseIp(net);

    let s = 0;
    let d = 0;
    let t = net & 1;
    let wild = t;
    for (let i = 0; i < 32; i++) {
      d += t ^ net & 1;
      t = net & 1;
      net >>>= 1;
      s += t;
    }
    if (d !== 1) {
      throw new Error('Invalid Netmask ' + net);
    }
    if (wild)
      s = 32 - s;
    return s;
  },
  // Source: http://www.xarg.org/tools/subnet-calculator/
  gatewayFromIpCIDR: function (ip, cidr) {

    // The gateway is not the first host of the network in general
    // But it's the best guess we can make.

    if (typeof ip === "string")
      ip = this.parseIp(ip);

    if (cidr === 32)
      return ip;

    return this.networkFromIpCIDR(ip, cidr) + 1;
  },
  // Source: http://www.xarg.org/tools/subnet-calculator/
  netmaskFromRange: function (ip1, ip2) {

    if (typeof ip1 === "string")
      ip1 = this.parseIp(ip1);

    if (typeof ip2 === "string")
      ip2 = this.parseIp(ip2);

    const cidr = 32 - Math.floor(Math.log2((ip1 ^ (ip2 - 1)) + 2)) - 1;

    return this.netmaskFromCIDR(cidr);
  }

};
MIT License

Copyright (c) 2018 Robert Eisele

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "dhcp",
  "title": "dhcp",
  "version": "0.2.20",
  "homepage": "https://github.com/infusion/node-dhcp",
  "description": "A DHCP server written in JavaScript",
  "author": "Robert Eisele <robert@xarg.org> (http://www.xarg.org/)",
  "main": "lib/dhcp.js",
  "private": false,
  "readmeFilename": "README.md",
  "directories": {
    "example": "./examples",
    "bin": "./bin",
    "lib": "./lib",
    "test": "./tests"
  },
  "license": "MIT OR GPL-2.0",
  "repository": {
    "type": "git",
    "url": "git://github.com/infusion/node-dhcp.git"
  },
  "bin": {
    "dhcp": "./bin/dhcp-cli.js",
    "dhcpd": "./bin/dhcpd-cli.js"
  },
  "engines": {
    "node": ">=5.10.0"
  },
  "devDependencies": {
    "mocha": "*",
    "should": "*"
  },
  "dependencies": {
    "minimist": "*"
  }
}‰PNG

   IHDR   «   9   IFÛQ   sBIT|dˆ   	pHYs  ×  ×B(›x   tEXtSoftware www.inkscape.org›î<  jIDATxœíy”\UÇ?¿û^uWoI§³aY»¥52P’t7%0ÔAdpDq8
D6·9£Œ˜Á™qƒÉ°ˆl£Äã°Ì‚;(4éŽ5¢˜ô	ÙÓYz©®ªwïoþ¨dé¥Ö®FêsNNªß»÷w¿Uç÷î{÷w÷>a£ ·Ÿ5÷dœžâ”·
L&ƒôÝ NŸñúf<uéúõÉbë-QX¤ØFâö3ç.qŽ zÂ˜…•Ð‡/|ËDÐqW¢L8g}"õ_`Ó'ÅpV¦uÅñÜ¿÷«ÿøó}
¡­DqñŠ-àp.¼oRÌý†Ó³2 Ì(³á?¿`Q¨ý‘‰<Ë+QdL±Î™=sÎwÂÒ\lˆÑy±ƒ•+ò¥©ÄÄaÜf~ã;U« ÖÊØ®ÁŸû\?ÀmMs¦Ò»)ËKCâ]»â/>›[%&~!OÿæÕ6{›÷v£Ú¨0+À••Q„¦S·ê¾AQ·míóOÞò»áD¬×ÃÙ\ÛVüPrÖ?!
â¬“o[½À‹'ÎsA‹ˆx¢È°Ý¸aÄ,ðmÙ[]7DÃ‰žÚXïö2e«ADÞ–ý7(1É«³ÖÝ|ÿluÉËM"¹2	"U%B©O*ƒeSw”UL'ãûkz^.³A<c1JÝÊhÔ_ÙÚd\·Ä„$?,U©»éÞåh°Ê ‹²1‘Ï}l0T^»³æ¸ÆášéM~©µ5çÇ‰‡ÜuåJ3å¦û>+*Ÿ%œ­™¾põ°½§ñTÖÎÛS=mn&ö³#³¾½ÄD'7g]¹ÒÔM™AZr²iÚüžÑÎ”UÌØ[5uNºöÖæª©ÄÄ"'g:yÎ¥¢ú®|Ù4mÁƒáIƒ£•é/¯œÙSY{|æbÎ?Ë‡®‡¬uê­÷¼1ïÉ—g<][¿ìE'fÔ[w_¸fÖ`¨¢zk÷^ñ‹WöæK[‰‰AvÓ­wÜªHø×	2†ÓdÆÁð¤DyulnÏÖ)‚Ž8a÷Êªjâ}»‡;'ªÿ³â‰­æSW‰‰AV=k]¬2*ÈÌ|‹è˜Ù÷ØIgvÄüÊçöß¯ì/«ª=êpÌ7_þÄ–{
¡«DñÉªg­X~îe‚dNJ“µñŽ™'îQc‚ÚØÁ
ß%ÑiÅxÕ‰þ”~AäŒ»qÅ/¶>W(M%ŠOÆ¹Ó¾ýí=hV#2.yÌ8¸«rÖWjªâý¡ò á'MÈÅÊÂýgnzò²þƒÓ^(þßd<ƒ%ý~½ÊðÏ“ª*$ƒ0¨¨u!<c~hPŒôOvNš1°sÒŒ£Ï­‹,í;°ââ’£¾AÈØY­³3ƒªŠÆ'»Øà4‰Z‚ä$\#ŒŒ‰‹ïõIYÙ~ÊË{LUå1&§&/?Ø”‹7ó¢µe~òx€„Ç>ÞÚÅëäÎ”±³[·5˜òp£‹ÎÂ¹ò´+:W®	W®‰äTúúºžýÖ”‡vIMõËRY¹GD2žmßU¤[Ö«o¹Xq³Ó¶m¤G¬n	\ò^|zgFÂf-®4•Wb¤ßu´ÝšQÝáˆ4-0Žé¶]meT·1ZmîbA/N[e‡ÆÕž^±ýDš~¥ðC²÷ñüºQ'g XØr‚÷¡Œ¿‡È€qÚX¿•Í­£ÆÔ‡­žnÁPäôSîzÎìååo}K¦íŒ.ÂóúdrM§©©Ù–‰Óªx_é¹ú#¿L§¬×Ð´¤9yðSA¾t®Y“Vúæéž°t§íl?.‹6À‹,;5?~h;Ûþ2Íjbš/¸84îSt³ˆlÅ‰Óm]ô1Ao´æ_èúÉˆÉC~}óé*´fû}ö©ãZ×Õv;L‰Ý³Ö7O÷7:uD2¾ ÆD­­Öžý¦½ýLÝ”gME8­5T&p{²hî[ªúÒ˜¶E¦ªÈ<Tß¼OÑ÷ø‘æ›‚„÷…lz…qeö’
¯Âÿ>pîÐ‘GPî±Tÿô'\¼8ä÷U5«Ó*òOFzÏsšÞË¦ö—Çh©[UïJW–9x·*oá6¯¾ù$ÛÕvi:ì¨Îê/lZ®ÂwQ¦:æö‚*  Éäd»sw“«©îðêj»Fïe5¨|)So'÷Ûî¶1{ãWGƒ‹Î®2±Øß|E•Oy¾{³ml<çŸŸ˜k¼£Õ^Âþ ˆ/#r¹íXóãË¯_ŸàqàñPäô·jïä­žÇZi:Žö‘Ç¢/»Îö¯¥+mè7ÓÐ|…À*„+L¤eƒëXóÍtê8)`"ÍŸW#?‚×@ãq\o_ºú²@E{{O´;vªêFŒ+ú\×UWežçš)Ï>Úï:Ûn±Æ-º=ÇKÔ}	¶~€hÔ?ä¨/Ø¤÷ÎQõ(’OþÚ]
ü˜í!ÐØ˜ŸeF¯¡®³í¹@T¿ÎÂ¥3Ò©8Ü.~Có*Qþm„ó[_É^jšh<>ÃnßyšZî¼Ã<Vp‡³qíFë¼å ;L¤åòqm?ümö‹@TÐ³ïbsëŽŒl\Ûk+*.Pø=Êb“¨»&ÿJÁu¬¹ä) ÒóñtêãŒ~¤y¥Â¨ƒ-Ûq‰Âß5‘œbwì>U¡SÑíû÷oNk`•Wº[»Ä˜*ª_aþÒŒrl‰ijRåZ .Âéþå®¬=ûh¿çô@ý4ó¢Yç)‚¢î6 A–§Sá'ð"-©rÝ˜­ÉÙIÌM&êÜž=G¬§¸‹•+‹6®yá~ Æóý/CÃphêNè)|1ÙÑþû\í%»Û×ƒþd¦WæÎÈƒÄc°ÖŠ®¼9ò¯9ëü¥sQ½#Ý†‚-Ûvdñf‚ˆ`{{g¥þÒŸì½æc¿—†GÀï:À^Ìœ¦)ÅÔàŸØ¼l(,·ÝiõÍy3,Ü°^UæÍæáTØ>ôir:Å_uVÏ÷W¥[é‰ß=G°wìr>pû6Úxü™½û_ºs\­›ŸU¦\.*²Ôr%€
·ŒÍÛÑþÛÑvŠël»%_6dú¡Á[z¡J ¿þô% çgÚ”ZKâ×¿ÃöìË´jÆØ;Êûîý¾W¬Ûÿ0< d¹ÕQþ0g8‚ïYKF„’ö¤¡i=S ûÙlTk|ú·$»7§â¯ùF•d÷fó{Ô—1kqeþÉkÜº¡ËŠ©#Ô°t0M “Žu…ÓäU>  Èãé”7©—¼?§V#±¡“Á§Öãúûs2u„Ùƒ½®}šÄ†ÎCBWUu^ÞÈ…k;€>à]U,N¼S i+–†¬X­WXA¤5æ{Æ¼—<í&h{ö{rÞôi„æáÕÌŸ¦}ûIvmÆîÞslo-îýÀ÷rW›3
ìªé¬†¹Je’×Ð’ö uD'0ÂdžÂôÔ~7úúéUë£³}	~ H•¨ÞÈ‹¿súÀ'Ë¨@»k7v×nLM5Þô:¼iS1µµHhøÙ]M&±{÷áöö`w÷ŒÞ;«Dóª7ö	Ìy®.	[†)Rú‰œefÛ8¦©€C³É“È5Dš¤[<äÌdkôÁ~VU¦€¶Ô\;tú q ä+¼½P)ÿ®·×ÛGrS*BÊËp<QE­EÑDF;¬Ï`^ô¸¬fgò Ö>/WØ'è_çÚˆCNšQ<*Dä˜äôÂ£§y*Ýé–v¢‡ß ¶F?ÆÆW£îf4g{ô<¡ñÏ}æ+Tfç$¡èÎ:ôŽ^|øX5t¶ÿ<×v¼È²ÐH©¢ô¨€:šk;YÐ‹Ð‘vie?Ð)ªÿtµ·uöª±ªûÀ¤ŒäM TMFñà!@ÊAŸ`ó08Ø-¤R³Z7”¢¿±í™Ý*ã€í@RÎ:îß1gÅµž¸,‚£
å%¶®ËzkÎ\I=++4KCž¸™ÔcÀ&àN læ!àRa?JÎÙìã‰ˆ+ú.<+ï 5_7fáb•5^ê5MD£þëe=Õ0T’ê<¯~|÷°s®58Ò~@ž h2ðŠ¿HPä\ …ñÏþ:œ®¶Ý
 &ùÛtI>M{õ-{ÍÝ~¤ee>íŽA˜TüúpV«FrÎÐg6³¹uQD¢ÓH-I¸ ñ@Qµ (§þÓ+óiV„w Æ9,vp5ðeR«&Øi@Ç7‰9gôÑb+ðqW eˆü_Æ+_€+núPý+Fëóf=ÀXùm¾l¦ÁàRKmÞ	Üü˜gl¸â1†}™˜ˆã‹*`AÓUýàzCQµâùu=·ž'öò°ä&´°i±¤m[‚î5Oå¬13ðð5àƒÀg€ož}´‘ÿg1ÙÒt·¯gF}Ï“»€JÐ»’m¿*š–£Œ»^ áiùT®öœÈ×D¸—ñýpô¦)ÀZ³ŠT¨`B£pEµyÛÜMÀÙÀçóÅÒ1,×öŠòA .ª_õšþ&[S¦¾ùSg [‚pÅ×ó'òUæ ÿ<Â¹GH9lÍ!9ÀåÀó©ÛEwk—(¹ïR@^pÇ{w¥ñEgWyM«Q]ôXe9/·>‰7C’]m¿Eå@@¾ëEšÓZˆw8¦¡ù2n ’‚¹„g-Ä#b˜7Â¹ÇÛHÅZ &å¸+^Í,	Ê½/ùqû>"—+¨»„Ö¶ñ!F–oð.’Xì
ù ;¼ßvµ¿0®:2Àv­YíÕ7ÇV£ÜéÕ·œo=>ÉÆ5/ŽZqþÒ¹žï}•Ô3¢ù» óÉB¾;€¿=ê˜—j€¶¡GðZÔó­}iþˆ*OBöo])
_Hv­ÍËC¾}ÐkhNgG•7¡¾—Ö­s³¹¬'lWÛC~¤i*wªè9ž£“†æ'yÈ¨nÔ{u2vªs²ÀY¤Bq!`›8óá ûÉ'ÆQ²"À¨Ô9{ÉŽ¶_yõ-!úßL”7f+w¹®¶oäÑâ¬4Ëõ(üQDž2Ž»“]kžÉ£†‚t´·ÓØx²IÖ}FT¯9KÐ³TÀ“Tæ0‡gî‘[ƒPòæ´6gË× §’Š¯­à°Ù^}ó‡î!u¥¹ÇvÎü<XzùZ.46–ùÉºf§²Dp³A½ñfªn6HkxOOô=¼FLeõ"ËÎ³¥KUÐ:Û¯£ôâµCŒžw}bË|Ïñ=ÐÓÆI;@.Éd¦oF.ÝûÒ~íyé^™:w¯§ioÞ›än×óuSÛ
ØN‰×)é¯h™­õCöÓC+ó™•ž ´Æ}™k7æÑn‰?12_~5/ö|û„‹H…<²	s)ðU}ØÙä}!¤ÄÄ'·µ‚‹Î®ò–85§‰¸·¡2tH˜Tj× 0¨°]àE?*<m“ÞÚ	²à¯Äëˆÿ´G[:;¦M    IEND®B`‚Contributing
============

1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request
'use strict';

/******************************************************************************
 * Created 2008-08-19.
 *
 * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.
 *
 * Copyright (C) 2008
 *   Wyatt Baldwin <self@wyattbaldwin.com>
 *   All rights reserved
 *
 * Licensed under the MIT license.
 *
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *****************************************************************************/
var dijkstra = {
  single_source_shortest_paths: function(graph, s, d) {
    // Predecessor map for each node that has been encountered.
    // node ID => predecessor node ID
    var predecessors = {};

    // Costs of shortest paths from s to all nodes encountered.
    // node ID => cost
    var costs = {};
    costs[s] = 0;

    // Costs of shortest paths from s to all nodes encountered; differs from
    // `costs` in that it provides easy access to the node that currently has
    // the known shortest path from s.
    // XXX: Do we actually need both `costs` and `open`?
    var open = dijkstra.PriorityQueue.make();
    open.push(s, 0);

    var closest,
        u, v,
        cost_of_s_to_u,
        adjacent_nodes,
        cost_of_e,
        cost_of_s_to_u_plus_cost_of_e,
        cost_of_s_to_v,
        first_visit;
    while (!open.empty()) {
      // In the nodes remaining in graph that have a known cost from s,
      // find the node, u, that currently has the shortest path from s.
      closest = open.pop();
      u = closest.value;
      cost_of_s_to_u = closest.cost;

      // Get nodes adjacent to u...
      adjacent_nodes = graph[u] || {};

      // ...and explore the edges that connect u to those nodes, updating
      // the cost of the shortest paths to any or all of those nodes as
      // necessary. v is the node across the current edge from u.
      for (v in adjacent_nodes) {
        if (adjacent_nodes.hasOwnProperty(v)) {
          // Get the cost of the edge running from u to v.
          cost_of_e = adjacent_nodes[v];

          // Cost of s to u plus the cost of u to v across e--this is *a*
          // cost from s to v that may or may not be less than the current
          // known cost to v.
          cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;

          // If we haven't visited v yet OR if the current known cost from s to
          // v is greater than the new cost we just found (cost of s to u plus
          // cost of u to v across e), update v's cost in the cost list and
          // update v's predecessor in the predecessor list (it's now u).
          cost_of_s_to_v = costs[v];
          first_visit = (typeof costs[v] === 'undefined');
          if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {
            costs[v] = cost_of_s_to_u_plus_cost_of_e;
            open.push(v, cost_of_s_to_u_plus_cost_of_e);
            predecessors[v] = u;
          }
        }
      }
    }

    if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {
      var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');
      throw new Error(msg);
    }

    return predecessors;
  },

  extract_shortest_path_from_predecessor_list: function(predecessors, d) {
    var nodes = [];
    var u = d;
    var predecessor;
    while (u) {
      nodes.push(u);
      predecessor = predecessors[u];
      u = predecessors[u];
    }
    nodes.reverse();
    return nodes;
  },

  find_path: function(graph, s, d) {
    var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);
    return dijkstra.extract_shortest_path_from_predecessor_list(
      predecessors, d);
  },

  /**
   * A very naive priority queue implementation.
   */
  PriorityQueue: {
    make: function (opts) {
      var T = dijkstra.PriorityQueue,
          t = {},
          key;
      opts = opts || {};
      for (key in T) {
        if (T.hasOwnProperty(key)) {
          t[key] = T[key];
        }
      }
      t.queue = [];
      t.sorter = opts.sorter || T.default_sorter;
      return t;
    },

    default_sorter: function (a, b) {
      return a.cost - b.cost;
    },

    /**
     * Add a new item to the queue and ensure the highest priority element
     * is at the front of the queue.
     */
    push: function (value, cost) {
      var item = {value: value, cost: cost};
      this.queue.push(item);
      this.queue.sort(this.sorter);
    },

    /**
     * Return the highest priority element in the queue.
     */
    pop: function () {
      return this.queue.shift();
    },

    empty: function () {
      return this.queue.length === 0;
    }
  }
};


// node.js module exports
if (typeof module !== 'undefined') {
  module.exports = dijkstra;
}
```
Dijkstra path-finding functions. Adapted from the Dijkstar Python project.

Copyright (C) 2008
  Wyatt Baldwin <self@wyattbaldwin.com>
  All rights reserved

Licensed under the MIT license.

  http://www.opensource.org/licenses/mit-license.php

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
```
{
  "name": "dijkstrajs",
  "version": "1.0.2",
  "description": "A simple JavaScript implementation of Dijkstra's single-source shortest-paths algorithm.",
  "main": "dijkstra.js",
  "repository": {
    "type": "git",
    "url": "git://github.com/tcort/dijkstrajs"
  },
  "license": "MIT",
  "homepage": "https://github.com/tcort/dijkstrajs",
  "devDependencies": {
    "expect.js": "^0.3.1",
    "jshint": "^2.12.0",
    "mocha": "^8.4.0"
  },
  "jshintConfig": {
    "bitwise": true,
    "curly": true,
    "eqeqeq": true,
    "forin": true,
    "freeze": true,
    "globalstrict": true,
    "immed": true,
    "indent": 4,
    "moz": true,
    "newcap": true,
    "noarg": true,
    "node": true,
    "noempty": true,
    "nonew": true,
    "trailing": true,
    "undef": true,
    "smarttabs": true,
    "strict": true,
    "validthis": true,
    "globals": {
      "describe": false,
      "it": false,
      "before": false,
      "beforeEach": false,
      "after": false,
      "afterEach": false
    }
  }
}"use strict";

var stream = require("stream");

function DuplexWrapper(options, writable, readable) {
  if (typeof readable === "undefined") {
    readable = writable;
    writable = options;
    options = null;
  }

  stream.Duplex.call(this, options);

  if (typeof readable.read !== "function") {
    readable = (new stream.Readable(options)).wrap(readable);
  }

  this._writable = writable;
  this._readable = readable;
  this._waiting = false;

  var self = this;

  writable.once("finish", function() {
    self.end();
  });

  this.once("finish", function() {
    writable.end();
  });

  readable.on("readable", function() {
    if (self._waiting) {
      self._waiting = false;
      self._read();
    }
  });

  readable.once("end", function() {
    self.push(null);
  });

  if (!options || typeof options.bubbleErrors === "undefined" || options.bubbleErrors) {
    writable.on("error", function(err) {
      self.emit("error", err);
    });

    readable.on("error", function(err) {
      self.emit("error", err);
    });
  }
}

DuplexWrapper.prototype = Object.create(stream.Duplex.prototype, {constructor: {value: DuplexWrapper}});

DuplexWrapper.prototype._write = function _write(input, encoding, done) {
  this._writable.write(input, encoding, done);
};

DuplexWrapper.prototype._read = function _read() {
  var buf;
  var reads = 0;
  while ((buf = this._readable.read()) !== null) {
    this.push(buf);
    reads++;
  }
  if (reads === 0) {
    this._waiting = true;
  }
};

module.exports = function duplex2(options, writable, readable) {
  return new DuplexWrapper(options, writable, readable);
};

module.exports.DuplexWrapper = DuplexWrapper;
Copyright (c) 2013, Deoxxa Development
======================================
All rights reserved.
--------------------
  
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:  
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.  
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.  
3. Neither the name of Deoxxa Development nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission.  
  
THIS SOFTWARE IS PROVIDED BY DEOXXA DEVELOPMENT ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL DEOXXA DEVELOPMENT BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
  "name": "duplexer3",
  "version": "0.1.4",
  "description": "Like duplexer but using streams3",
  "engine": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "repository": "floatdrop/duplexer3",
  "author": "Conrad Pankoff <deoxxa@fknsrs.biz> (http://www.fknsrs.biz/)",
  "license": "BSD-3-Clause",
  "devDependencies": {
    "mocha": "^2.2.5"
  }
}/*!
 * ee-first
 * Copyright(c) 2014 Jonathan Ong
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = first

/**
 * Get the first event in a set of event emitters and event pairs.
 *
 * @param {array} stuff
 * @param {function} done
 * @public
 */

function first(stuff, done) {
  if (!Array.isArray(stuff))
    throw new TypeError('arg must be an array of [ee, events...] arrays')

  var cleanups = []

  for (var i = 0; i < stuff.length; i++) {
    var arr = stuff[i]

    if (!Array.isArray(arr) || arr.length < 2)
      throw new TypeError('each array member must be [ee, events...]')

    var ee = arr[0]

    for (var j = 1; j < arr.length; j++) {
      var event = arr[j]
      var fn = listener(event, callback)

      // listen to the event
      ee.on(event, fn)
      // push this listener to the list of cleanups
      cleanups.push({
        ee: ee,
        event: event,
        fn: fn,
      })
    }
  }

  function callback() {
    cleanup()
    done.apply(null, arguments)
  }

  function cleanup() {
    var x
    for (var i = 0; i < cleanups.length; i++) {
      x = cleanups[i]
      x.ee.removeListener(x.event, x.fn)
    }
  }

  function thunk(fn) {
    done = fn
  }

  thunk.cancel = cleanup

  return thunk
}

/**
 * Create the event listener.
 * @private
 */

function listener(event, done) {
  return function onevent(arg1) {
    var args = new Array(arguments.length)
    var ee = this
    var err = event === 'error'
      ? arg1
      : null

    // copy args to prevent arguments escaping scope
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i]
    }

    done(err, ee, event, args)
  }
}

The MIT License (MIT)

Copyright (c) 2014 Jonathan Ong me@jongleberry.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "ee-first",
  "description": "return the first event in a set of ee/event pairs",
  "version": "1.1.1",
  "author": {
    "name": "Jonathan Ong",
    "email": "me@jongleberry.com",
    "url": "http://jongleberry.com",
    "twitter": "https://twitter.com/jongleberry"
  },
  "license": "MIT",
  "repository": "jonathanong/ee-first",
  "devDependencies": {
    "istanbul": "0.3.9",
    "mocha": "2.2.5"
  },
  "files": [
    "index.js",
    "LICENSE"
  ]
}The MIT License (MIT)

Copyright (c) 2016 Alexey Prokhorov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.{
  "name": "electron-log",
  "version": "4.3.5",
  "description": "Just a very simple logging module for your Electron application",
  "main": "src/index.js",
  "typings": "src/index.d.ts",
  "repository": "megahertz/electron-log",
  "files": [
    "src/*",
    "!__specs__"
  ],
  "author": "Alexey Prokhorov",
  "license": "MIT",
  "homepage": "https://github.com/megahertz/electron-log#readme",
  "devDependencies": {
    "@types/node": "^14.14.6",
    "electron": "*",
    "eslint": "^7.12.1",
    "eslint-config-airbnb-base": "^14.2.0",
    "eslint-plugin-import": "^2.22.1",
    "humile": "^0.3.2",
    "nw": "0.42.3",
    "typescript": "^4.0.5",
    "webpack": "^5.3.2",
    "webpack-cli": "^4.1.0"
  }
}'use strict';

/**
 * Some ideas from sindresorhus/electron-unhandled
 */

var electronApi = require('./electronApi');
var queryString = require('querystring');

var isAttached = false;

module.exports = function catchErrors(options) {
  if (isAttached) return { stop: stop };
  isAttached = true;

  if (process.type === 'renderer') {
    window.addEventListener('error', onRendererError);
    window.addEventListener('unhandledrejection', onRendererRejection);
  } else {
    process.on('uncaughtException', onError);
    process.on('unhandledRejection', onRejection);
  }

  return { stop: stop };

  function onError(e) {
    try {
      if (typeof options.onError === 'function') {
        var versions = electronApi.getVersions();
        if (options.onError(e, versions, createIssue) === false) {
          return;
        }
      }

      options.log(e);

      if (options.showDialog && e.name.indexOf('UnhandledRejection') < 0) {
        var type = process.type || 'main';
        electronApi.showErrorBox(
          'A JavaScript error occurred in the ' + type + ' process',
          e.stack
        );
      }
    } catch (logError) {
      // eslint-disable-next-line no-console
      console.error(e);
    }
  }

  function onRejection(reason) {
    if (reason instanceof Error) {
      try {
        Object.defineProperty(reason, 'name', {
          value: 'UnhandledRejection ' + reason.name,
        });
      } catch (e) {
        // Can't redefine error name, but who cares?
      }

      onError(reason);
      return;
    }

    var error = new Error(JSON.stringify(reason));
    error.name = 'UnhandledRejection';
    onError(error);
  }

  function onRendererError(event) {
    event.preventDefault();
    onError(event.error);
  }

  function onRendererRejection(event) {
    event.preventDefault();
    onRejection(event.reason);
  }

  function stop() {
    isAttached = false;

    if (process.type === 'renderer') {
      window.removeEventListener('error', onRendererError);
      window.removeEventListener('unhandledrejection', onRendererRejection);
    } else {
      process.removeListener('uncaughtException', onError);
      process.removeListener('unhandledRejection', onRejection);
    }
  }

  function createIssue(pageUrl, queryParams) {
    var issueUrl = pageUrl + '?' + queryString.stringify(queryParams);
    electronApi.openUrl(issueUrl, options.log);
  }
};
'use strict';

/**
 * Split Electron API from the main code
 */

var electron;
try {
  // eslint-disable-next-line global-require
  electron = require('electron');
} catch (e) {
  electron = null;
}

var os = require('os');

module.exports = {
  getName: getName,
  getPath: getPath,
  getVersion: getVersion,
  getVersions: getVersions,
  isDev: isDev,
  isElectron: isElectron,
  isIpcChannelListened: isIpcChannelListened,
  loadRemoteModule: loadRemoteModule,
  onIpc: onIpc,
  openUrl: openUrl,
  sendIpc: sendIpc,
  showErrorBox: showErrorBox,
};

function getApp() {
  return getElectronModule('app');
}

function getName() {
  var app = getApp();
  if (!app) return null;

  return 'name' in app ? app.name : app.getName();
}

function getElectronModule(name) {
  if (!electron) {
    return null;
  }

  if (electron[name]) {
    return electron[name];
  }

  if (electron.remote) {
    return electron.remote[name];
  }

  return null;
}

function getIpc() {
  if (process.type === 'browser' && electron && electron.ipcMain) {
    return electron.ipcMain;
  }

  if (process.type === 'renderer' && electron && electron.ipcRenderer) {
    return electron.ipcRenderer;
  }

  return null;
}

function getPath(name) {
  var app = getApp();
  if (!app) return null;

  try {
    return app.getPath(name);
  } catch (e) {
    return null;
  }
}

function getRemote() {
  if (electron && electron.remote) {
    return electron.remote;
  }

  return null;
}

function getVersion() {
  var app = getApp();
  if (!app) return null;

  return 'version' in app ? app.version : app.getVersion();
}

function getVersions() {
  return {
    app: getName() + ' ' + getVersion(),
    electron: 'Electron ' + process.versions.electron,
    os: getOsVersion(),
  };
}

function getOsVersion() {
  var osName = os.type().replace('_', ' ');
  var osVersion = os.release();

  if (osName === 'Darwin') {
    osName = 'macOS';
    osVersion = getMacOsVersion();
  }

  return osName + ' ' + osVersion;
}

function getMacOsVersion() {
  var release = Number(os.release().split('.')[0]);
  return '10.' + (release - 4);
}

function isDev() {
  var app = getApp();

  if (app && app.isPackaged !== undefined) {
    return app.isPackaged;
  }

  if (typeof process.execPath === 'string') {
    return process.execPath.toLowerCase().endsWith('electron');
  }

  return process.env.NODE_ENV === 'development'
    || process.env.ELECTRON_IS_DEV === '1';
}

function isElectron() {
  return process.type === 'browser' || process.type === 'renderer';
}

/**
 * Return true if the process listens for the IPC channel
 * @param {string} channel
 */
function isIpcChannelListened(channel) {
  var ipc = getIpc();
  return ipc ? ipc.listenerCount(channel) > 0 : false;
}

/**
 * Try to load the module in the opposite process
 * @param {string} moduleName
 */
function loadRemoteModule(moduleName) {
  if (process.type === 'browser') {
    getApp().on('web-contents-created', function (e, contents) {
      var promise = contents.executeJavaScript(
        'try {require("' + moduleName + '")} catch(e){}; void 0;'
      );

      // Do nothing on error, just prevent Unhandled rejection
      if (promise && typeof promise.catch === 'function') {
        promise.catch(function () {});
      }
    });
  } else if (process.type === 'renderer') {
    try {
      getRemote().require(moduleName);
    } catch (e) {
      // Can't be required. Webpack?
    }
  }
}

/**
 * Listen to async messages sent from opposite process
 * @param {string} channel
 * @param {function} listener
 */
function onIpc(channel, listener) {
  var ipc = getIpc();
  if (ipc) {
    ipc.on(channel, listener);
  }
}

/**
 * Sent a message to opposite process
 * @param {string} channel
 * @param {any} message
 */
function sendIpc(channel, message) {
  if (process.type === 'browser') {
    sendIpcToRenderer(channel, message);
  } else if (process.type === 'renderer') {
    sendIpcToMain(channel, message);
  }
}

function sendIpcToMain(channel, message) {
  var ipc = getIpc();
  if (ipc) {
    ipc.send(channel, message);
  }
}

function sendIpcToRenderer(channel, message) {
  if (!electron || !electron.BrowserWindow) {
    return;
  }

  electron.BrowserWindow.getAllWindows().forEach(function (wnd) {
    if (wnd.webContents && !wnd.webContents.isDestroyed()) {
      wnd.webContents.send(channel, message);
    }
  });
}

function showErrorBox(title, message) {
  var dialog = getElectronModule('dialog');
  if (!dialog) return;

  dialog.showErrorBox(title, message);
}

/**
 * @param {string} url
 * @param {Function} [logFunction]
 */
function openUrl(url, logFunction) {
  // eslint-disable-next-line no-console
  logFunction = logFunction || console.error;

  var shell = getElectronModule('shell');
  if (!shell) return;

  shell.openExternal(url).catch(logFunction);
}
'use strict';

var catchErrors = require('./catchErrors');
var electronApi = require('./electronApi');
var log = require('./log');
var scopeFactory = require('./scope');
var transportConsole = require('./transports/console');
var transportFile = require('./transports/file');
var transportIpc = require('./transports/ipc');
var transportRemote = require('./transports/remote');

module.exports = create('default');
module.exports.default = module.exports;

/**
 * @param {string} logId
 * @return {ElectronLog.ElectronLog}
 */
function create(logId) {
  /**
   * @type {ElectronLog.ElectronLog}
   */
  var instance = {
    catchErrors: function callCatchErrors(options) {
      var opts = Object.assign({}, {
        log: instance.error,
        showDialog: process.type === 'browser',
      }, options || {});

      catchErrors(opts);
    },
    create: create,
    functions: {},
    hooks: [],
    isDev: electronApi.isDev(),
    levels: [],
    logId: logId,
    variables: {
      processType: process.type,
    },
  };

  instance.scope = scopeFactory(instance);

  instance.transports = {
    console: transportConsole(instance),
    file: transportFile(instance),
    remote: transportRemote(instance),
    ipc: transportIpc(instance),
  };

  Object.defineProperty(instance.levels, 'add', {
    enumerable: false,
    value: function add(name, index) {
      index = index === undefined ? instance.levels.length : index;
      instance.levels.splice(index, 0, name);
      instance[name] = log.log.bind(null, instance, { level: name });
      instance.functions[name] = instance[name];
    },
  });

  ['error', 'warn', 'info', 'verbose', 'debug', 'silly'].forEach(
    function (level) { instance.levels.add(level) }
  );

  instance.log = log.log.bind(null, instance, { level: 'info' });
  instance.functions.log = instance.log;

  instance.logMessageWithTransports = function logMessageWithTransports(
    message,
    transports
  ) {
    if (message.date === undefined) {
      message.date = new Date();
    }

    if (message.variables === undefined) {
      message.variables = instance.variables;
    }

    return log.runTransports(transports, message, instance);
  };

  return instance;
}
'use strict';

module.exports = {
  compareLevels: compareLevels,
  log: log,
  runTransport: runTransport,
  runTransports: runTransports,
};

function log(electronLog, options) {
  var transports = electronLog.transports;

  var message = {
    data: Array.prototype.slice.call(arguments, 2),
    date: new Date(),
    level: options.level,
    scope: options.scope ? options.scope.toJSON() : null,
    variables: electronLog.variables,
  };

  runTransports(transports, message, electronLog);
}

function runTransports(transports, message, electronLog) {
  for (var i in transports) {
    if (Object.prototype.hasOwnProperty.call(transports, i)) {
      runTransport(transports[i], message, electronLog);
    }
  }
}

function runTransport(transport, message, electronLog) {
  if (typeof transport !== 'function' || transport.level === false) {
    return;
  }

  if (!compareLevels(electronLog.levels, transport.level, message.level)) {
    return;
  }

  message = runHooks(electronLog.hooks, transport, message);

  if (message) {
    transport(message);
  }
}

function compareLevels(levels, passLevel, checkLevel) {
  var pass = levels.indexOf(passLevel);
  var check = levels.indexOf(checkLevel);
  if (check === -1 || pass === -1) {
    return true;
  }

  return check <= pass;
}

function runHooks(hooks, transport, message) {
  if (!hooks || !hooks.length) {
    return message;
  }

  // eslint-disable-next-line no-plusplus
  for (var i = 0; i < hooks.length; i++) {
    message = hooks[i](message, transport);
    if (!message) break;
  }

  return message;
}
'use strict';

var log = require('./log').log;

module.exports = scopeFactory;

/**
 * @param {ElectronLog.ElectronLog} electronLog
 * @return {ElectronLog.Scope}
 */
function scopeFactory(electronLog) {
  scope.labelPadding = true;
  scope.defaultLabel = '';

  /** @private */
  scope.maxLabelLength = 0;

  /**
   * @type {typeof getOptions}
   * @package
   */
  scope.getOptions = getOptions;

  return scope;

  function scope(label) {
    var instance = {
      label: label,
      toJSON: function () {
        return {
          label: this.label,
        };
      },
    };

    electronLog.levels.forEach(function (level) {
      instance[level] = log.bind(null, electronLog, {
        level: level,
        scope: instance,
      });
    });

    instance.log = instance.info;

    scope.maxLabelLength = Math.max(scope.maxLabelLength, label.length);

    return instance;
  }

  function getOptions() {
    return {
      defaultLabel: scope.defaultLabel,
      labelLength: getLabelLength(),
    };
  }

  function getLabelLength() {
    if (scope.labelPadding === true) {
      return scope.maxLabelLength;
    }

    if (scope.labelPadding === false) {
      return 0;
    }

    if (typeof scope.labelPadding === 'number') {
      return scope.labelPadding;
    }

    return 0;
  }
}
'use strict';

var object = require('./object');
var style = require('./style');
var template = require('./template');

module.exports = {
  applyAnsiStyles: style.applyAnsiStyles,
  concatFirstStringElements: template.concatFirstStringElements,
  customFormatterFactory: customFormatterFactory,
  maxDepthFactory: object.maxDepthFactory,
  removeStyles: style.removeStyles,
  toJSON: object.toJSON,
  toStringFactory: object.toStringFactory,
  transform: transform,
};

function customFormatterFactory(customFormat, concatFirst, scopeOptions) {
  if (typeof customFormat === 'string') {
    return function customStringFormatter(data, message) {
      return transform(message, [
        template.templateVariables,
        template.templateScopeFactory(scopeOptions),
        template.templateDate,
        template.templateText,
        concatFirst && template.concatFirstStringElements,
      ], [customFormat].concat(data));
    };
  }

  if (typeof customFormat === 'function') {
    return function customFunctionFormatter(data, message) {
      var modifiedMessage = Object.assign({}, message, { data: data });
      var texts = customFormat(modifiedMessage, data);
      return [].concat(texts);
    };
  }

  return function (data) {
    return [].concat(data);
  };
}

function transform(message, transformers, initialData) {
  return transformers.reduce(function (data, transformer) {
    if (typeof transformer === 'function') {
      return transformer(data, message);
    }

    return data;
  }, initialData || message.data);
}
'use strict';

var util = require('util');

module.exports = {
  maxDepthFactory: maxDepthFactory,
  serialize: serialize,
  toJSON: toJSON,
  toStringFactory: toStringFactory,
};

function createSerializer() {
  var seen = createWeakSet();

  return function (key, value) {
    if (typeof value === 'object' && value !== null) {
      if (seen.has(value)) {
        return undefined;
      }

      seen.add(value);
    }

    return serialize(key, value);
  };
}

/**
 * @return {WeakSet<object>}
 */
function createWeakSet() {
  if (typeof WeakSet !== 'undefined') {
    return new WeakSet();
  }

  var cache = [];
  return {
    add: function (value) { cache.push(value) },
    has: function (value) { return cache.indexOf(value) !== -1 },
  };
}

function maxDepth(data, depth) {
  if (!data) {
    return data;
  }

  if (depth < 1) {
    if (isArray(data)) return '[array]';
    if (typeof data === 'object' && data) return '[object]';

    return data;
  }

  if (isArray(data)) {
    return data.map(function (child) {
      return maxDepth(child, depth - 1);
    });
  }

  if (typeof data !== 'object') {
    return data;
  }

  if (data && typeof data.toISOString === 'function') {
    return data;
  }

  // noinspection PointlessBooleanExpressionJS
  if (data === null) {
    return null;
  }

  if (data instanceof Error) {
    return data;
  }

  var newJson = {};
  for (var i in data) {
    if (!Object.prototype.hasOwnProperty.call(data, i)) continue;
    newJson[i] = maxDepth(data[i], depth - 1);
  }

  return newJson;
}

function maxDepthFactory(depth) {
  depth = depth || 6;

  return function maxDepthFunction(data) {
    return maxDepth(data, depth);
  };
}

function serialize(key, value) {
  if (value instanceof Error) {
    return value.stack;
  }

  if (!value) {
    return value;
  }

  if (typeof value.toJSON === 'function') {
    return value.toJSON();
  }

  if (typeof value === 'function') {
    return '[function] ' + value.toString();
  }

  return value;
}

function toJSON(data) {
  return JSON.parse(JSON.stringify(data, createSerializer()));
}

function toStringFactory(inspectOptions) {
  return function toStringFunction(data) {
    var simplifiedData = data.map(function (item) {
      if (item === undefined) {
        return undefined;
      }

      var str = JSON.stringify(item, createSerializer(), '  ');
      if (str === undefined) {
        return undefined;
      }

      return JSON.parse(str);
    });

    if (util.formatWithOptions) {
      simplifiedData.unshift(inspectOptions || {});
      return util.formatWithOptions.apply(util, simplifiedData);
    }

    return util.format.apply(util, simplifiedData);
  };
}

function isArray(value) {
  return Object.prototype.toString.call(value) === '[object Array]';
}
'use strict';

module.exports = {
  applyAnsiStyles: applyAnsiStyles,
  removeStyles: removeStyles,
  transformStyles: transformStyles,
};

var ANSI_COLORS = {
  unset: '\x1b[0m',
  black: '\x1b[30m',
  red: '\x1b[31m',
  green: '\x1b[32m',
  yellow: '\x1b[33m',
  blue: '\x1b[34m',
  magenta: '\x1b[35m',
  cyan: '\x1b[36m',
  white: '\x1b[37m',
};

function applyAnsiStyles(data) {
  return transformStyles(data, styleToAnsi, resetAnsiStyle);
}

function styleToAnsi(style) {
  var color = style.replace(/color:\s*(\w+).*/, '$1').toLowerCase();
  return ANSI_COLORS[color] || '';
}

function resetAnsiStyle(string) {
  return string + ANSI_COLORS.unset;
}

function removeStyles(data) {
  return transformStyles(data, function () { return '' });
}

function transformStyles(data, onStyleFound, onStyleApplied) {
  var foundStyles = {};

  return data.reduce(function (result, item, index, array) {
    if (foundStyles[index]) {
      return result;
    }

    if (typeof item === 'string') {
      var valueIndex = index;
      var styleApplied = false;

      item = item.replace(/%[1cdfiOos]/g, function (match) {
        valueIndex += 1;

        if (match !== '%c') {
          return match;
        }

        var style = array[valueIndex];
        if (typeof style === 'string') {
          foundStyles[valueIndex] = true;
          styleApplied = true;
          return onStyleFound(style, item);
        }

        return match;
      });

      if (styleApplied && onStyleApplied) {
        item = onStyleApplied(item);
      }
    }

    result.push(item);
    return result;
  }, []);
}
'use strict';

module.exports = {
  concatFirstStringElements: concatFirstStringElements,
  formatDate: formatDate,
  formatTimeZone: formatTimeZone,
  pad: pad,
  padString: padString,
  templateDate: templateDate,
  templateVariables: templateVariables,
  templateScopeFactory: templateScopeFactory,
  templateText: templateText,
};

/**
 * The first argument of console.log may contain templates. In the library
 * the first element is a string related to transports.console.format. So
 * this function concatenates first two elements to make templates like %d
 * work
 * @param {*[]} data
 * @return {*[]}
 */
function concatFirstStringElements(data) {
  if (typeof data[0] !== 'string' || typeof data[1] !== 'string') {
    return data;
  }

  if (data[0].match(/%[1cdfiOos]/)) {
    return data;
  }

  data[1] = data[0] + ' ' + data[1];
  data.shift();

  return data;
}

function formatDate(template, date) {
  return template
    .replace('{y}', String(date.getFullYear()))
    .replace('{m}', pad(date.getMonth() + 1))
    .replace('{d}', pad(date.getDate()))
    .replace('{h}', pad(date.getHours()))
    .replace('{i}', pad(date.getMinutes()))
    .replace('{s}', pad(date.getSeconds()))
    .replace('{ms}', pad(date.getMilliseconds(), 3))
    .replace('{z}', formatTimeZone(date.getTimezoneOffset()))
    .replace('{iso}', date.toISOString());
}

function formatTimeZone(minutesOffset) {
  var m = Math.abs(minutesOffset);
  return (minutesOffset >= 0 ? '-' : '+')
    + pad(Math.floor(m / 60)) + ':'
    + pad(m % 60);
}

function pad(number, zeros) {
  zeros = zeros || 2;
  return (new Array(zeros + 1).join('0') + number).substr(-zeros, zeros);
}

function padString(value, length) {
  length = Math.max(length, value.length);
  var padValue = Array(length + 1).join(' ');
  return (value + padValue).substring(0, length);
}

function templateDate(data, message) {
  var template = data[0];
  if (typeof template !== 'string') {
    return data;
  }

  data[0] = formatDate(template, message.date);
  return data;
}

/**
 * @param {{ labelLength: number, defaultLabel: string }} options
 */
function templateScopeFactory(options) {
  options = options || {};
  var labelLength = options.labelLength || 0;

  return function templateScope(data, message) {
    var template = data[0];
    var label = message.scope && message.scope.label;

    if (!label) {
      label = options.defaultLabel;
    }

    var scopeText;
    if (label === '') {
      scopeText = labelLength > 0 ? padString('', labelLength + 3) : '';
    } else if (typeof label === 'string') {
      scopeText = padString(' (' + label + ')', labelLength + 3);
    } else {
      scopeText = '';
    }

    data[0] = template.replace('{scope}', scopeText);
    return data;
  };
}

function templateVariables(data, message) {
  var template = data[0];
  var variables = message.variables;

  if (typeof template !== 'string' || !message.variables) {
    return data;
  }

  for (var i in variables) {
    if (!Object.prototype.hasOwnProperty.call(variables, i)) continue;
    template = template.replace('{' + i + '}', variables[i]);
  }

  // Add additional space to the end of {level}] template to align messages
  template = template.replace('{level}]', padString(message.level + ']', 6));
  template = template.replace('{level}', message.level);

  data[0] = template;
  return data;
}

function templateText(data) {
  var template = data[0];
  if (typeof template !== 'string') {
    return data;
  }

  var textTplPosition = template.lastIndexOf('{text}');
  if (textTplPosition === template.length - 6) {
    data[0] = template.replace(/\s?{text}/, '');
    if (data[0] === '') {
      data.shift();
    }

    return data;
  }

  var templatePieces = template.split('{text}');
  var result = [];

  if (templatePieces[0] !== '') {
    result.push(templatePieces[0]);
  }

  result = result.concat(data.slice(1));

  if (templatePieces[1] !== '') {
    result.push(templatePieces[1]);
  }

  return result;
}
'use strict';

/* eslint-disable no-multi-spaces, no-console */

var transform = require('../transform');

var consoleMethods = {
  context: console,
  error:   console.error,
  warn:    console.warn,
  info:    console.info,
  verbose: console.verbose,
  debug:   console.debug,
  silly:   console.silly,
  log:     console.log,
};

module.exports = consoleTransportFactory;
module.exports.transformRenderer = transformRenderer;
module.exports.transformMain = transformMain;

var separator = process.platform === 'win32' ? '>' : 'â€º';
var DEFAULT_FORMAT = {
  browser: '%c{h}:{i}:{s}.{ms}{scope}%c ' + separator + ' {text}',
  renderer: '{h}:{i}:{s}.{ms}{scope} â€º {text}',
  worker: '{h}:{i}:{s}.{ms}{scope} â€º {text}',
};

function consoleTransportFactory(electronLog) {
  transport.level  = 'silly';
  transport.useStyles = process.env.FORCE_STYLES;
  transport.format = DEFAULT_FORMAT[process.type] || DEFAULT_FORMAT.browser;

  return transport;

  function transport(message) {
    var scopeOptions = electronLog.scope.getOptions();

    var data;
    if (process.type === 'renderer' || process.type === 'worker') {
      data = transformRenderer(message, transport, scopeOptions);
    } else {
      data = transformMain(message, transport, scopeOptions);
    }

    consoleLog(message.level, data);
  }
}

function transformRenderer(message, transport, scopeOptions) {
  return transform.transform(message, [
    transform.customFormatterFactory(transport.format, true, scopeOptions),
  ]);
}

function transformMain(message, transport, scopeOptions) {
  var useStyles = canUseStyles(transport.useStyles, message.level);

  return transform.transform(message, [
    addTemplateColorFactory(transport.format),
    transform.customFormatterFactory(transport.format, false, scopeOptions),
    useStyles ? transform.applyAnsiStyles : transform.removeStyles,
    transform.concatFirstStringElements,
    transform.maxDepthFactory(4),
    transform.toJSON,
  ]);
}

function addTemplateColorFactory(format) {
  return function addTemplateColors(data, message) {
    if (format !== DEFAULT_FORMAT.browser) {
      return data;
    }

    return ['color:' + levelToStyle(message.level), 'color:unset'].concat(data);
  };
}

function canUseStyles(useStyleValue, level) {
  if (useStyleValue === true || useStyleValue === false) {
    return useStyleValue;
  }

  var useStderr = level === 'error' || level === 'warn';
  var stream = useStderr ? process.stderr : process.stdout;
  return stream && stream.isTTY;
}

function consoleLog(level, args) {
  var consoleMethod = consoleMethods[level] || consoleMethods.info;

  if (process.type === 'renderer') {
    setTimeout(consoleMethod.bind.apply(
      consoleMethod,
      [consoleMethod.context].concat(args)
    ));
    return;
  }

  consoleMethod.apply(consoleMethods.context, args);
}

function levelToStyle(level) {
  switch (level) {
    case 'error': return 'red';
    case 'warn':  return 'yellow';
    case 'info':  return 'cyan';
    default:      return 'unset';
  }
}
'use strict';

var EventEmitter = require('events');
var fs = require('fs');
var os = require('os');
var path = require('path');
var util = require('util');

module.exports = {
  File: File,
  FileRegistry: FileRegistry,
  NullFile: NullFile,
};

/**
 * File manipulations on filesystem
 * @class
 * @extends EventEmitter
 * @property {number} size
 *
 * @constructor
 * @param {string} filePath
 * @param {WriteOptions} [writeOptions]
 * @param {boolean} [writeAsync]
 */
function File(filePath, writeOptions, writeAsync) {
  EventEmitter.call(this);

  /**
   * @type {string}
   * @readonly
   */
  this.path = filePath;

  /**
   * @type {number}
   * @private
   */
  this.initialSize = undefined;

  /**
   * @type {number}
   * @readonly
   */
  this.bytesWritten = 0;

  /**
   * @type {boolean}
   * @private
   */
  this.writeAsync = Boolean(writeAsync);

  /**
   * @type {string[]}
   * @private
   */
  this.asyncWriteQueue = [];

  /**
   * @type {boolean}
   * @private
   */
  this.hasActiveAsyncWritting = false;

  /**
   * @type {WriteOptions}
   * @private
   */
  this.writeOptions = writeOptions || {
    flag: 'a',
    mode: 438, // 0666
    encoding: 'utf8',
  };

  Object.defineProperty(this, 'size', {
    get: this.getSize.bind(this),
  });
}

util.inherits(File, EventEmitter);

File.prototype.clear = function () {
  try {
    fs.writeFileSync(this.path, '', {
      mode: this.writeOptions.mode,
      flag: 'w',
    });
    this.reset();
    return true;
  } catch (e) {
    if (e.code === 'ENOENT') {
      return true;
    }

    this.emit('error', e, this);
    return false;
  }
};

File.prototype.crop = function (bytesAfter) {
  try {
    var content = readFileSyncFromEnd(this.path, bytesAfter || 4096);
    this.clear();
    this.writeLine('[log cropped]' + os.EOL + content);
  } catch (e) {
    this.emit(
      'error',
      new Error('Couldn\'t crop file ' + this.path + '. ' + e.message),
      this
    );
  }
};

File.prototype.toString = function () {
  return this.path;
};

/**
 * @package
 */
File.prototype.reset = function () {
  this.initialSize = undefined;
  this.bytesWritten = 0;
};

/**
 * @package
 */
File.prototype.writeLine = function (text) {
  text += os.EOL;

  if (this.writeAsync) {
    this.asyncWriteQueue.push(text);
    this.nextAsyncWrite();
    return;
  }

  try {
    fs.writeFileSync(this.path, text, this.writeOptions);
    this.increaseBytesWrittenCounter(text);
  } catch (e) {
    this.emit(
      'error',
      new Error('Couldn\'t write to ' + this.path + '. ' + e.message),
      this
    );
  }
};

/**
 * @return {number}
 * @protected
 */
File.prototype.getSize = function () {
  if (this.initialSize === undefined) {
    try {
      var stats = fs.statSync(this.path);
      this.initialSize = stats.size;
    } catch (e) {
      this.initialSize = 0;
    }
  }

  return this.initialSize + this.bytesWritten;
};

/**
 * @return {boolean}
 * @package
 */
File.prototype.isNull = function () {
  return false;
};

/**
 * @private
 */
File.prototype.increaseBytesWrittenCounter = function (text) {
  this.bytesWritten += Buffer.byteLength(text, this.writeOptions.encoding);
};

/**
 * @private
 */
File.prototype.nextAsyncWrite = function () {
  var file = this;

  if (this.hasActiveAsyncWritting || this.asyncWriteQueue.length < 1) {
    return;
  }

  var text = this.asyncWriteQueue.shift();
  this.hasActiveAsyncWritting = true;

  fs.writeFile(this.path, text, this.writeOptions, function (e) {
    file.hasActiveAsyncWritting = false;

    if (e) {
      file.emit(
        'error',
        new Error('Couldn\'t write to ' + file.path + '. ' + e.message),
        this
      );
    } else {
      file.increaseBytesWrittenCounter(text);
    }

    file.nextAsyncWrite();
  });
};

/**
 * File manipulations on filesystem
 * @class
 * @property {number} size
 *
 * @constructor
 * @param {string} filePath
 */
function NullFile(filePath) {
  File.call(this, filePath);
}

util.inherits(NullFile, File);

NullFile.prototype.clear = function () {};
NullFile.prototype.crop = function () {};
NullFile.prototype.writeLine = function () {};
NullFile.prototype.getSize = function () { return 0 };
NullFile.prototype.isNull = function () { return true };

/**
 * Collection, key is a file path, value is a File instance
 * @class
 *
 * @constructor
 */
function FileRegistry() {
  EventEmitter.call(this);
  this.store = {};

  this.emitError = this.emitError.bind(this);
}

util.inherits(FileRegistry, EventEmitter);

/**
 * Provide a File object corresponding to the filePath
 * @param {string} filePath
 * @param {WriteOptions} [writeOptions]
 * @param {boolean} [async]
 * @return {File}
 */
FileRegistry.prototype.provide = function (filePath, writeOptions, async) {
  var file;
  try {
    filePath = path.resolve(filePath);

    if (this.store[filePath]) {
      return this.store[filePath];
    }

    file = this.createFile(filePath, writeOptions, Boolean(async));
  } catch (e) {
    file = new NullFile(filePath);
    this.emitError(e, file);
  }

  file.on('error', this.emitError);
  this.store[filePath] = file;
  return file;
};

/**
 * @param {string} filePath
 * @param {WriteOptions} writeOptions
 * @param {boolean} async
 * @return {File}
 * @private
 */
FileRegistry.prototype.createFile = function (filePath, writeOptions, async) {
  this.testFileWriting(filePath);
  return new File(filePath, writeOptions, async);
};

/**
 * @param {Error} error
 * @param {File} file
 * @private
 */
FileRegistry.prototype.emitError = function (error, file) {
  this.emit('error', error, file);
};

/**
 * @param {string} filePath
 * @private
 */
FileRegistry.prototype.testFileWriting = function (filePath) {
  mkDir(path.dirname(filePath));
  fs.writeFileSync(filePath, '', { flag: 'a' });
};

function mkDir(dirPath) {
  if (checkNodeJsVersion(10.12)) {
    fs.mkdirSync(dirPath, { recursive: true });
    return true;
  }

  try {
    fs.mkdirSync(dirPath);
    return true;
  } catch (error) {
    if (error.code === 'ENOENT') {
      return mkDir(path.dirname(dirPath)) && mkDir(dirPath);
    }

    // eslint-disable-next-line no-useless-catch
    try {
      if (fs.statSync(dirPath).isDirectory()) {
        return true;
      }

      // noinspection ExceptionCaughtLocallyJS
      throw error;
    } catch (e) {
      throw e;
    }
  }
}

function checkNodeJsVersion(version) {
  if (!process.versions) {
    return false;
  }

  var nodeVersion = Number(
    process.version.match(/^v(\d+\.\d+)/)[1].replace(/\.(\d)$/, '.0$1')
  );

  return nodeVersion >= version;
}

function readFileSyncFromEnd(filePath, bytesCount) {
  var buffer = Buffer.alloc(bytesCount);
  var stats = fs.statSync(filePath);

  var readLength = Math.min(stats.size, bytesCount);
  var offset = Math.max(0, stats.size - bytesCount);

  var fd = fs.openSync(filePath, 'r');
  var totalBytes = fs.readSync(fd, buffer, 0, readLength, offset);
  fs.closeSync(fd);

  return buffer.toString('utf8', 0, totalBytes);
}
'use strict';

var fs = require('fs');
var path = require('path');
var os = require('os');
var util = require('util');
var transform = require('../../transform');
var FileRegistry = require('./file').FileRegistry;
var variables = require('./variables');

module.exports = fileTransportFactory;

// Shared between multiple file transport instances
var globalRegistry = new FileRegistry();

function fileTransportFactory(electronLog, customRegistry) {
  var pathVariables = variables.getPathVariables(process.platform);

  var registry = customRegistry || globalRegistry;
  if (registry.listenerCount('error') < 1) {
    registry.on('error', function (e, file) {
      logConsole('Can\'t write to ' + file, e);
    });
  }

  /* eslint-disable no-multi-spaces */
  transport.archiveLog   = archiveLog;
  transport.depth        = 5;
  transport.fileName     = getDefaultFileName();
  transport
    .format = '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}';
  transport.getFile      = getFile;
  transport.level        = 'silly';
  transport.maxSize      = 1024 * 1024;
  transport.readAllLogs  = readAllLogs;
  transport.resolvePath  = resolvePath;
  transport.sync         = true;
  transport.writeOptions = {
    flag: 'a',
    mode: 438, // 0666
    encoding: 'utf8',
  };
  transport.inspectOptions = {};

  initDeprecated();

  return transport;

  function transport(message) {
    var file = getFile(message);

    var needLogRotation = transport.maxSize > 0
      && file.size > transport.maxSize;

    if (needLogRotation) {
      transport.archiveLog(file);
      file.reset();
    }

    var scopeOptions = electronLog.scope.getOptions();
    var inspectOptions = Object.assign(
      { depth: transport.depth },
      transport.inspectOptions
    );
    var content = transform.transform(message, [
      transform.removeStyles,
      transform.customFormatterFactory(transport.format, false, scopeOptions),
      transform.concatFirstStringElements,
      transform.toStringFactory(inspectOptions),
    ]);

    file.writeLine(content);
  }

  function archiveLog(file) {
    var oldPath = file.toString();
    var inf = path.parse(oldPath);
    try {
      fs.renameSync(oldPath, path.join(inf.dir, inf.name + '.old' + inf.ext));
    } catch (e) {
      logConsole('Could not rotate log', e);
      var quarterOfMaxSize = Math.round(transport.maxSize / 4);
      file.crop(Math.min(quarterOfMaxSize, 256 * 1024));
    }
  }

  function logConsole(message, error) {
    var data = ['electron-log.transports.file: ' + message];

    if (error) {
      data.push(error);
    }

    electronLog.transports.console({
      data: data,
      date: new Date(),
      level: 'warn',
    });
  }

  function getFile(msg) {
    var vars = Object.assign({}, pathVariables, {
      fileName: transport.fileName,
    });

    var filePath = transport.resolvePath(vars, msg);
    return registry.provide(filePath, transport.writeOptions, !transport.sync);
  }

  /**
   * @param {PathVariables} vars
   */
  function resolvePath(vars) {
    return path.join(vars.libraryDefaultDir, vars.fileName);
  }

  function readAllLogs() {
    var vars = Object.assign({}, pathVariables, {
      fileName: transport.fileName,
    });
    var logsPath = path.dirname(transport.resolvePath(vars));

    return fs.readdirSync(logsPath)
      .map(function (fileName) {
        var logPath = path.join(logsPath, fileName);
        try {
          return {
            path: logPath,
            lines: fs.readFileSync(logPath, 'utf8').split(os.EOL),
          };
        } catch (e) {
          return null;
        }
      })
      .filter(Boolean);
  }

  function initDeprecated() {
    var isDeprecatedText = ' is deprecated and will be removed in v5.';
    var isDeprecatedProp = ' property' + isDeprecatedText;

    Object.defineProperties(transport, {
      bytesWritten: {
        get: util.deprecate(getBytesWritten, 'bytesWritten' + isDeprecatedProp),
      },

      file: {
        get: util.deprecate(getLogFile, 'file' + isDeprecatedProp),
        set: util.deprecate(setLogFile, 'file' + isDeprecatedProp),
      },

      fileSize: {
        get: util.deprecate(getFileSize, 'file' + isDeprecatedProp),
      },
    });

    transport.clear = util.deprecate(clear, 'clear()' + isDeprecatedText);
    transport.findLogPath = util.deprecate(
      getLogFile,
      'findLogPath()' + isDeprecatedText
    );
    transport.init = util.deprecate(init, 'init()' + isDeprecatedText);

    function getBytesWritten() {
      return getFile().bytesWritten;
    }

    function getLogFile() {
      return getFile().path;
    }

    function setLogFile(filePath) {
      transport.resolvePath = function () {
        return filePath;
      };
    }

    function getFileSize() {
      return getFile().size;
    }

    function clear() {
      getFile().clear();
    }

    function init() {}
  }
}

function getDefaultFileName() {
  switch (process.type) {
    case 'renderer': return 'renderer.log';
    case 'worker': return 'worker.log';
    default: return 'main.log';
  }
}
'use strict';

/* eslint-disable consistent-return */

var fs = require('fs');
var path = require('path');

module.exports = {
  readPackageJson: readPackageJson,
  tryReadJsonAt: tryReadJsonAt,
};

/**
 * @return {{ name?: string, version?: string}}
 */
function readPackageJson() {
  return tryReadJsonAt(require.main && require.main.filename)
    || tryReadJsonAt(process.resourcesPath, 'app.asar')
    || tryReadJsonAt(process.resourcesPath, 'app')
    || tryReadJsonAt(process.cwd())
    || { name: null, version: null };
}

/**
 * @param {...string} searchPath
 * @return {{ name?: string, version?: string } | null}
 */
function tryReadJsonAt(searchPath) {
  try {
    searchPath = path.join.apply(path, arguments);
    var fileName = findUp('package.json', searchPath);
    if (!fileName) {
      return null;
    }

    var json = JSON.parse(fs.readFileSync(fileName, 'utf8'));
    var name = json.productName || json.name;
    if (!name || name.toLowerCase() === 'electron') {
      return null;
    }

    if (json.productName || json.name) {
      return {
        name: name,
        version: json.version,
      };
    }
  } catch (e) {
    return null;
  }
}

/**
 * @param {string} fileName
 * @param {string} [cwd]
 * @return {string | null}
 */
function findUp(fileName, cwd) {
  var currentPath = cwd;
  // eslint-disable-next-line no-constant-condition
  while (true) {
    var parsedPath = path.parse(currentPath);
    var root = parsedPath.root;
    var dir = parsedPath.dir;

    if (fs.existsSync(path.join(currentPath, fileName))) {
      return path.resolve(path.join(currentPath, fileName));
    }

    if (currentPath === root) {
      return null;
    }

    currentPath = dir;
  }
}
'use strict';

var os = require('os');
var path = require('path');
var electronApi = require('../../electronApi');
var packageJson = require('./packageJson');

module.exports = {
  getAppData: getAppData,
  getLibraryDefaultDir: getLibraryDefaultDir,
  getLibraryTemplate: getLibraryTemplate,
  getNameAndVersion: getNameAndVersion,
  getPathVariables: getPathVariables,
  getUserData: getUserData,
};

function getAppData(platform) {
  var appData = electronApi.getPath('appData');
  if (appData) {
    return appData;
  }

  var home = getHome();

  switch (platform) {
    case 'darwin': {
      return path.join(home, 'Library/Application Support');
    }

    case 'win32': {
      return process.env.APPDATA || path.join(home, 'AppData/Roaming');
    }

    default: {
      return process.env.XDG_CONFIG_HOME || path.join(home, '.config');
    }
  }
}

function getHome() {
  return os.homedir ? os.homedir() : process.env.HOME;
}

function getLibraryDefaultDir(platform, appName) {
  if (platform === 'darwin') {
    return path.join(getHome(), 'Library/Logs', appName);
  }

  return path.join(getUserData(platform, appName), 'logs');
}

function getLibraryTemplate(platform) {
  if (platform === 'darwin') {
    return path.join(getHome(), 'Library/Logs', '{appName}');
  }

  return path.join(getAppData(platform), '{appName}', 'logs');
}

function getNameAndVersion() {
  var name = electronApi.getName() || '';
  var version = electronApi.getVersion();

  if (name.toLowerCase() === 'electron') {
    name = '';
    version = '';
  }

  if (name && version) {
    return { name: name, version: version };
  }

  var packageValues = packageJson.readPackageJson();
  if (!name) {
    name = packageValues.name;
  }

  if (!version) {
    version = packageValues.version;
  }

  return { name: name, version: version };
}

/**
 * @param {string} platform
 * @return {PathVariables}
 */
function getPathVariables(platform) {
  var nameAndVersion = getNameAndVersion();
  var appName = nameAndVersion.name;
  var appVersion = nameAndVersion.version;

  return {
    appData: getAppData(platform),
    appName: appName,
    appVersion: appVersion,
    electronDefaultDir: electronApi.getPath('logs'),
    home: getHome(),
    libraryDefaultDir: getLibraryDefaultDir(platform, appName),
    libraryTemplate: getLibraryTemplate(platform),
    temp: electronApi.getPath('temp') || os.tmpdir(),
    userData: getUserData(platform, appName),
  };
}

function getUserData(platform, appName) {
  if (electronApi.getName() !== appName) {
    return path.join(getAppData(platform), appName);
  }

  return electronApi.getPath('userData')
    || path.join(getAppData(platform), appName);
}
'use strict';

var transform = require('../transform');
var electronApi = require('../electronApi');
var log = require('../log.js');

module.exports = ipcTransportFactory;

function ipcTransportFactory(electronLog) {
  transport.eventId = '__ELECTRON_LOG_IPC_' + electronLog.logId + '__';
  transport.level = electronLog.isDev ? 'silly' : false;

  // Prevent problems when there are multiple instances after webpack
  if (electronApi.isIpcChannelListened(transport.eventId)) {
    return function () {};
  }

  electronApi.onIpc(transport.eventId, function (_, message) {
    message.date = new Date(message.date);

    log.runTransport(
      electronLog.transports.console,
      message,
      electronLog
    );
  });

  electronApi.loadRemoteModule('electron-log');

  return electronApi.isElectron() ? transport : null;

  function transport(message) {
    var ipcMessage = Object.assign({}, message, {
      data: transform.transform(message, [
        transform.toJSON,
        transform.maxDepthFactory(3),
      ]),
    });

    electronApi.sendIpc(transport.eventId, ipcMessage);
  }
}
'use strict';

var http = require('http');
var https = require('https');
var url = require('url');
var transform = require('../transform');

module.exports = remoteTransportFactory;

function remoteTransportFactory(electronLog) {
  transport.client = { name: 'electron-application' };
  transport.depth = 6;
  transport.level = false;
  transport.requestOptions = {};
  transport.url = null;
  transport.onError = null;
  transport.transformBody = function (body) { return JSON.stringify(body) };

  return transport;

  function transport(message) {
    if (!transport.url) return;

    var body = transport.transformBody({
      client: transport.client,
      data: transform.transform(message, [
        transform.removeStyles,
        transform.toJSON,
        transform.maxDepthFactory(transport.depth + 1),
      ]),
      date: message.date.getTime(),
      level: message.level,
      variables: message.variables,
    });

    var request = post(
      transport.url,
      transport.requestOptions,
      Buffer.from(body, 'utf8')
    );

    request.on('error', transport.onError || onError);

    function onError(error) {
      electronLog.logMessageWithTransports(
        {
          data: [
            'electron-log.transports.remote:'
            + ' cannot send HTTP request to ' + transport.url,
            error,
          ],
          level: 'warn',
        },
        [
          electronLog.transports.console,
          electronLog.transports.ipc,
          electronLog.transports.file,
        ]
      );
    }
  }
}

function post(serverUrl, requestOptions, body) {
  var urlObject = url.parse(serverUrl);
  var httpTransport = urlObject.protocol === 'https:' ? https : http;

  var options = {
    hostname: urlObject.hostname,
    port:     urlObject.port,
    path:     urlObject.path,
    method:   'POST',
    headers:  {},
  };

  Object.assign(options, requestOptions);

  options.headers['Content-Length'] = body.length;
  if (!options.headers['Content-Type']) {
    options.headers['Content-Type'] = 'application/json';
  }

  var request = httpTransport.request(options);
  request.write(body);
  request.end();

  return request;
}
'use strict';
const electron = require('electron');
const { writeFile, readFileSync } = require('fs');
const path = require('path');

if (typeof electron === 'string') {
  throw new TypeError('Not running in an Electron environment!');
}

module.exports.init = (customPath = '', ignoreXY = false) => {
  const { app, BrowserWindow } = electron;
  const confPath =
    customPath ||
    path.join(app.getPath('userData'), `${app.getName()}-window-bounds.json`);
  let confObj = {};
  try {
    confObj = JSON.parse(readFileSync(confPath, 'utf8'));
  } catch (e) { }

  const bounds = new Proxy(confObj, {
    set: (target, key, value) => {
      target[key] = value;
      writeFile(confPath, JSON.stringify(target, null, 2), () => { });
      return true;
    },
  });

  const isOutOfScreens = ({ x, y, width }) => {
    const { screen } = electron;
    return (
      screen.getAllDisplays().find(({ bounds }) => {
        const dotInBounds = ({ x, y }) => {
          const { x: dx, y: dy, width, height } = bounds;
          return x >= dx && x < dx + width && y >= dy && y < dy + height;
        };
        return dotInBounds({ x, y }) || dotInBounds({ x: x + width, y });
      }) === undefined
    );
  };

  const register = (win) => {
    const wid = win.id;
    const { [wid]: cached } = bounds;
    const update = (e) => {
      bounds[wid] = { ...win.getNormalBounds(), isMaximized: win.isMaximized(), isFullScreen: win.isFullScreen() };
    };
    if (cached) {
      const { isFullScreen = false, isMaximized = false } = cached
      // check if author change window bounds
      const currentBounds = win.getBounds();
      const w = Math.max(currentBounds.width, cached.width);
      const h = Math.max(currentBounds.height, cached.height);
      const ignorePosition = ignoreXY || isOutOfScreens(cached);
      if (win.resizable) {
        if (isFullScreen) {
          win.setBounds({ x: cached.x, y: cached.y })
          win.setFullScreen(true);
        } else if (isMaximized) {
          win.setBounds({ x: cached.x, y: cached.y })
          win.maximize();
        } else {
          if (ignorePosition) {
            win.setBounds({ width: w, height: h });
          } else {
            win.setBounds({ ...cached, width: w, height: h });
          }
        }
      } else {
        if (!ignorePosition) {
          win.setBounds({ x: cached.x, y: cached.y });
        }
      }
    } else {
      update();
    }
    win.on('resize', update);
    win.on('moved', update);
    win.on('maximize', update)
  };

  const wins = BrowserWindow.getAllWindows();

  wins.forEach(register);

  app.on('browser-window-created', (_, win) => {
    register(win);
  });
};
{
  "name": "electron-window-bounds",
  "version": "1.0.10",
  "main": "index.js",
  "license": "MIT",
  "description": "Store browserwindows bounds of Electron APP",
  "author": "Fndroid@fndroid@icloud.com"
}"use strict";

module.exports = () => {
  // https://mths.be/emoji
  return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu;
};
"use strict";

module.exports = () => {
  // https://mths.be/emoji
  return /\u{1F3F4}\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0073}\u{E0063}\u{E0074}|\u{E0077}\u{E006C}\u{E0073})\u{E007F}|\u{1F468}(?:\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}\u{1F3FB}|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FE}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u2695\u2696\u2708]\uFE0F|[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|(?:\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F3FB}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}]|[\u{1F3FB}-\u{1F3FF}])|(?:\u{1F9D1}\u{1F3FB}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F469})\u{1F3FB}|\u{1F9D1}(?:\u{1F3FF}\u200D\u{1F91D}\u200D\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u200D\u{1F91D}\u200D\u{1F9D1})|(?:\u{1F9D1}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FF}\u200D\u{1F91D}\u200D[\u{1F468}\u{1F469}])[\u{1F3FB}-\u{1F3FE}]|(?:\u{1F9D1}\u{1F3FC}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}\u{1F3FC}]|\u{1F469}(?:\u{1F3FE}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}-\u{1F3FD}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FC}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FD}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FB}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FC}-\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FD}\u200D(?:\u{1F91D}\u200D\u{1F468}[\u{1F3FB}\u{1F3FC}\u{1F3FE}\u{1F3FF}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F3FF}\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9AF}-\u{1F9B3}\u{1F9BC}\u{1F9BD}])|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|(?:\u{1F9D1}\u{1F3FD}\u200D\u{1F91D}\u200D\u{1F9D1}|\u{1F469}\u{1F3FE}\u200D\u{1F91D}\u200D\u{1F469})[\u{1F3FB}-\u{1F3FD}]|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}(?:\u{1F3FF}\u200D[\u2695\u2696\u2708]|\u{1F3FE}\u200D[\u2695\u2696\u2708]|\u{1F3FC}\u200D[\u2695\u2696\u2708]|\u{1F3FB}\u200D[\u2695\u2696\u2708]|\u{1F3FD}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F3F4}\u200D\u2620)\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F415}\u200D\u{1F9BA}|\u{1F469}\u200D\u{1F466}|\u{1F469}\u200D\u{1F467}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F1F6}\u{1F1E6}|[#\*0-9]\uFE0F\u20E3|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F9D1}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9CD}-\u{1F9CF}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F46B}-\u{1F46D}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9BB}\u{1F9D2}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6D5}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6FA}\u{1F7E0}-\u{1F7EB}\u{1F90D}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F971}\u{1F973}-\u{1F976}\u{1F97A}-\u{1F9A2}\u{1F9A5}-\u{1F9AA}\u{1F9AE}-\u{1F9CA}\u{1F9CD}-\u{1F9FF}\u{1FA70}-\u{1FA73}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA82}\u{1FA90}-\u{1FA95}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F48F}\u{1F491}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F90F}\u{1F918}-\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93C}-\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9BB}\u{1F9CD}-\u{1F9CF}\u{1F9D1}-\u{1F9DD}]/gu;
};
"use strict";

module.exports = function () {
  // https://mths.be/emoji
  return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
};
Copyright Mathias Bynens <https://mathiasbynens.be/>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "emoji-regex",
  "version": "8.0.0",
  "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.",
  "homepage": "https://mths.be/emoji-regex",
  "main": "index.js",
  "types": "index.d.ts",
  "license": "MIT",
  "author": {
    "name": "Mathias Bynens",
    "url": "https://mathiasbynens.be/"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/mathiasbynens/emoji-regex.git"
  },
  "files": [
    "LICENSE-MIT.txt",
    "index.js",
    "index.d.ts",
    "text.js",
    "es2015/index.js",
    "es2015/text.js"
  ],
  "devDependencies": {
    "@babel/cli": "^7.2.3",
    "@babel/core": "^7.3.4",
    "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
    "@babel/preset-env": "^7.3.4",
    "mocha": "^6.0.2",
    "regexgen": "^1.3.0",
    "unicode-12.0.0": "^0.7.9"
  }
}"use strict";

module.exports = function () {
  // https://mths.be/emoji
  return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
};
1.0.2 / 2018-01-21
==================

  * Fix encoding `%` as last character

1.0.1 / 2016-06-09
==================

  * Fix encoding unpaired surrogates at start/end of string

1.0.0 / 2016-06-08
==================

  * Initial release
/*!
 * encodeurl
 * Copyright(c) 2016 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = encodeUrl

/**
 * RegExp to match non-URL code points, *after* encoding (i.e. not including "%")
 * and including invalid escape sequences.
 * @private
 */

var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g

/**
 * RegExp to match unmatched surrogate pair.
 * @private
 */

var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g

/**
 * String to replace unmatched surrogate pair with.
 * @private
 */

var UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\uFFFD$2'

/**
 * Encode a URL to a percent-encoded form, excluding already-encoded sequences.
 *
 * This function will take an already-encoded URL and encode all the non-URL
 * code points. This function will not encode the "%" character unless it is
 * not part of a valid sequence (`%20` will be left as-is, but `%foo` will
 * be encoded as `%25foo`).
 *
 * This encode is meant to be "safe" and does not throw errors. It will try as
 * hard as it can to properly encode the given URL, including replacing any raw,
 * unpaired surrogate pairs with the Unicode replacement character prior to
 * encoding.
 *
 * @param {string} url
 * @return {string}
 * @public
 */

function encodeUrl (url) {
  return String(url)
    .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)
    .replace(ENCODE_CHARS_REGEXP, encodeURI)
}
(The MIT License)

Copyright (c) 2016 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "encodeurl",
  "description": "Encode a URL to a percent-encoded form, excluding already-encoded sequences",
  "version": "1.0.2",
  "license": "MIT",
  "repository": "pillarjs/encodeurl",
  "devDependencies": {
    "eslint": "3.19.0",
    "eslint-config-standard": "10.2.1",
    "eslint-plugin-import": "2.8.0",
    "eslint-plugin-node": "5.2.1",
    "eslint-plugin-promise": "3.6.0",
    "eslint-plugin-standard": "3.0.1",
    "istanbul": "0.4.5",
    "mocha": "2.5.3"
  },
  "files": [
    "LICENSE",
    "HISTORY.md",
    "README.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.8"
  }
}var once = require('once');

var noop = function() {};

var isRequest = function(stream) {
	return stream.setHeader && typeof stream.abort === 'function';
};

var isChildProcess = function(stream) {
	return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
};

var eos = function(stream, opts, callback) {
	if (typeof opts === 'function') return eos(stream, null, opts);
	if (!opts) opts = {};

	callback = once(callback || noop);

	var ws = stream._writableState;
	var rs = stream._readableState;
	var readable = opts.readable || (opts.readable !== false && stream.readable);
	var writable = opts.writable || (opts.writable !== false && stream.writable);
	var cancelled = false;

	var onlegacyfinish = function() {
		if (!stream.writable) onfinish();
	};

	var onfinish = function() {
		writable = false;
		if (!readable) callback.call(stream);
	};

	var onend = function() {
		readable = false;
		if (!writable) callback.call(stream);
	};

	var onexit = function(exitCode) {
		callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
	};

	var onerror = function(err) {
		callback.call(stream, err);
	};

	var onclose = function() {
		process.nextTick(onclosenexttick);
	};

	var onclosenexttick = function() {
		if (cancelled) return;
		if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));
		if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));
	};

	var onrequest = function() {
		stream.req.on('finish', onfinish);
	};

	if (isRequest(stream)) {
		stream.on('complete', onfinish);
		stream.on('abort', onclose);
		if (stream.req) onrequest();
		else stream.on('request', onrequest);
	} else if (writable && !ws) { // legacy streams
		stream.on('end', onlegacyfinish);
		stream.on('close', onlegacyfinish);
	}

	if (isChildProcess(stream)) stream.on('exit', onexit);

	stream.on('end', onend);
	stream.on('finish', onfinish);
	if (opts.error !== false) stream.on('error', onerror);
	stream.on('close', onclose);

	return function() {
		cancelled = true;
		stream.removeListener('complete', onfinish);
		stream.removeListener('abort', onclose);
		stream.removeListener('request', onrequest);
		if (stream.req) stream.req.removeListener('finish', onfinish);
		stream.removeListener('end', onlegacyfinish);
		stream.removeListener('close', onlegacyfinish);
		stream.removeListener('finish', onfinish);
		stream.removeListener('exit', onexit);
		stream.removeListener('end', onend);
		stream.removeListener('error', onerror);
		stream.removeListener('close', onclose);
	};
};

module.exports = eos;
The MIT License (MIT)

Copyright (c) 2014 Mathias Buus

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.{
  "name": "end-of-stream",
  "version": "1.4.4",
  "description": "Call a callback when a readable/writable/duplex stream has completed or failed.",
  "repository": {
    "type": "git",
    "url": "git://github.com/mafintosh/end-of-stream.git"
  },
  "dependencies": {
    "once": "^1.4.0"
  },
  "files": [
    "index.js"
  ],
  "homepage": "https://github.com/mafintosh/end-of-stream",
  "main": "index.js",
  "author": "Mathias Buus <mathiasbuus@gmail.com>",
  "license": "MIT",
  "devDependencies": {
    "tape": "^4.11.0"
  }
}/*!
 * escape-html
 * Copyright(c) 2012-2013 TJ Holowaychuk
 * Copyright(c) 2015 Andreas Lubbe
 * Copyright(c) 2015 Tiancheng "Timothy" Gu
 * MIT Licensed
 */

'use strict';

/**
 * Module variables.
 * @private
 */

var matchHtmlRegExp = /["'&<>]/;

/**
 * Module exports.
 * @public
 */

module.exports = escapeHtml;

/**
 * Escape special characters in the given string of html.
 *
 * @param  {string} string The string to escape for inserting into HTML
 * @return {string}
 * @public
 */

function escapeHtml(string) {
  var str = '' + string;
  var match = matchHtmlRegExp.exec(str);

  if (!match) {
    return str;
  }

  var escape;
  var html = '';
  var index = 0;
  var lastIndex = 0;

  for (index = match.index; index < str.length; index++) {
    switch (str.charCodeAt(index)) {
      case 34: // "
        escape = '&quot;';
        break;
      case 38: // &
        escape = '&amp;';
        break;
      case 39: // '
        escape = '&#39;';
        break;
      case 60: // <
        escape = '&lt;';
        break;
      case 62: // >
        escape = '&gt;';
        break;
      default:
        continue;
    }

    if (lastIndex !== index) {
      html += str.substring(lastIndex, index);
    }

    lastIndex = index + 1;
    html += escape;
  }

  return lastIndex !== index
    ? html + str.substring(lastIndex, index)
    : html;
}
(The MIT License)

Copyright (c) 2012-2013 TJ Holowaychuk
Copyright (c) 2015 Andreas Lubbe
Copyright (c) 2015 Tiancheng "Timothy" Gu

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "escape-html",
  "description": "Escape string for use in HTML",
  "version": "1.0.3",
  "license": "MIT",
  "repository": "component/escape-html",
  "devDependencies": {
    "benchmark": "1.0.0",
    "beautify-benchmark": "0.2.4"
  },
  "files": [
    "LICENSE",
    "Readme.md",
    "index.js"
  ]
}
1.0.0 / 2017-07-06
==================

  * update "mocha" to v3
  * fixed unicode URI decoding (#6)
  * add typings for Typescript
  * README: use SVG Travis-CI badge
  * add LICENSE file (MIT)
  * add .travis.yml file (testing Node.js 0.8 through 8 currently)
  * add README.md file

0.0.2 / 2014-01-27
==================

  * index: invert the path separators on Windows

0.0.1 / 2014-01-27
==================

  * initial commit

/**
 * Module dependencies.
 */

var sep = require('path').sep || '/';

/**
 * Module exports.
 */

module.exports = fileUriToPath;

/**
 * File URI to Path function.
 *
 * @param {String} uri
 * @return {String} path
 * @api public
 */

function fileUriToPath (uri) {
  if ('string' != typeof uri ||
      uri.length <= 7 ||
      'file://' != uri.substring(0, 7)) {
    throw new TypeError('must pass in a file:// URI to convert to a file path');
  }

  var rest = decodeURI(uri.substring(7));
  var firstSlash = rest.indexOf('/');
  var host = rest.substring(0, firstSlash);
  var path = rest.substring(firstSlash + 1);

  // 2.  Scheme Definition
  // As a special case, <host> can be the string "localhost" or the empty
  // string; this is interpreted as "the machine from which the URL is
  // being interpreted".
  if ('localhost' == host) host = '';

  if (host) {
    host = sep + sep + host;
  }

  // 3.2  Drives, drive letters, mount points, file system root
  // Drive letters are mapped into the top of a file URI in various ways,
  // depending on the implementation; some applications substitute
  // vertical bar ("|") for the colon after the drive letter, yielding
  // "file:///c|/tmp/test.txt".  In some cases, the colon is left
  // unchanged, as in "file:///c:/tmp/test.txt".  In other cases, the
  // colon is simply omitted, as in "file:///c/tmp/test.txt".
  path = path.replace(/^(.+)\|/, '$1:');

  // for Windows, we need to invert the path separators from what a URI uses
  if (sep == '\\') {
    path = path.replace(/\//g, '\\');
  }

  if (/^.+\:/.test(path)) {
    // has Windows drive at beginning of path
  } else {
    // unix pathâ€¦
    path = sep + path;
  }

  return host + path;
}
Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "file-uri-to-path",
  "version": "1.0.0",
  "description": "Convert a file: URI to a file path",
  "main": "index.js",
  "types": "index.d.ts",
  "directories": {
    "test": "test"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/TooTallNate/file-uri-to-path.git"
  },
  "author": "Nathan Rajlich <nathan@tootallnate.net> (http://n8.io/)",
  "license": "MIT",
  "homepage": "https://github.com/TooTallNate/file-uri-to-path",
  "devDependencies": {
    "mocha": "3"
  }
}'use strict';
const path = require('path');
const locatePath = require('locate-path');

module.exports = (filename, opts = {}) => {
	const startDir = path.resolve(opts.cwd || '');
	const {root} = path.parse(startDir);

	const filenames = [].concat(filename);

	return new Promise(resolve => {
		(function find(dir) {
			locatePath(filenames, {cwd: dir}).then(file => {
				if (file) {
					resolve(path.join(dir, file));
				} else if (dir === root) {
					resolve(null);
				} else {
					find(path.dirname(dir));
				}
			});
		})(startDir);
	});
};

module.exports.sync = (filename, opts = {}) => {
	let dir = path.resolve(opts.cwd || '');
	const {root} = path.parse(dir);

	const filenames = [].concat(filename);

	// eslint-disable-next-line no-constant-condition
	while (true) {
		const file = locatePath.sync(filenames, {cwd: dir});

		if (file) {
			return path.join(dir, file);
		}

		if (dir === root) {
			return null;
		}

		dir = path.dirname(dir);
	}
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "find-up",
  "version": "3.0.0",
  "description": "Find a file or directory by walking up parent directories",
  "license": "MIT",
  "repository": "sindresorhus/find-up",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "locate-path": "^3.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "tempy": "^0.2.1",
    "xo": "*"
  }
}'use strict';
const shellPath = require('shell-path');

module.exports = () => {
	if (process.platform !== 'darwin') {
		return;
	}

	process.env.PATH = shellPath.sync() || [
		'./node_modules/.bin',
		'/.nodebrew/current/bin',
		'/usr/local/bin',
		process.env.PATH
	].join(':');
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "fix-path",
  "version": "3.0.0",
  "description": "Fix the $PATH on macOS when run from a GUI app",
  "license": "MIT",
  "repository": "sindresorhus/fix-path",
  "funding": "https://github.com/sponsors/sindresorhus",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "https://sindresorhus.com"
  },
  "engines": {
    "node": ">=10"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "dependencies": {
    "shell-path": "^2.1.0"
  },
  "devDependencies": {
    "ava": "^1.4.1",
    "tsd": "^0.11.0",
    "xo": "^0.26.1"
  }
}var debug;

module.exports = function () {
  if (!debug) {
    try {
      /* eslint global-require: off */
      debug = require("debug")("follow-redirects");
    }
    catch (error) { /* */ }
    if (typeof debug !== "function") {
      debug = function () { /* */ };
    }
  }
  debug.apply(null, arguments);
};
module.exports = require("./").http;
module.exports = require("./").https;
var url = require("url");
var URL = url.URL;
var http = require("http");
var https = require("https");
var Writable = require("stream").Writable;
var assert = require("assert");
var debug = require("./debug");

// Create handlers that pass events from native requests
var events = ["abort", "aborted", "connect", "error", "socket", "timeout"];
var eventHandlers = Object.create(null);
events.forEach(function (event) {
  eventHandlers[event] = function (arg1, arg2, arg3) {
    this._redirectable.emit(event, arg1, arg2, arg3);
  };
});

// Error types with codes
var RedirectionError = createErrorType(
  "ERR_FR_REDIRECTION_FAILURE",
  "Redirected request failed"
);
var TooManyRedirectsError = createErrorType(
  "ERR_FR_TOO_MANY_REDIRECTS",
  "Maximum number of redirects exceeded"
);
var MaxBodyLengthExceededError = createErrorType(
  "ERR_FR_MAX_BODY_LENGTH_EXCEEDED",
  "Request body larger than maxBodyLength limit"
);
var WriteAfterEndError = createErrorType(
  "ERR_STREAM_WRITE_AFTER_END",
  "write after end"
);

// An HTTP(S) request that can be redirected
function RedirectableRequest(options, responseCallback) {
  // Initialize the request
  Writable.call(this);
  this._sanitizeOptions(options);
  this._options = options;
  this._ended = false;
  this._ending = false;
  this._redirectCount = 0;
  this._redirects = [];
  this._requestBodyLength = 0;
  this._requestBodyBuffers = [];

  // Attach a callback if passed
  if (responseCallback) {
    this.on("response", responseCallback);
  }

  // React to responses of native requests
  var self = this;
  this._onNativeResponse = function (response) {
    self._processResponse(response);
  };

  // Perform the first request
  this._performRequest();
}
RedirectableRequest.prototype = Object.create(Writable.prototype);

RedirectableRequest.prototype.abort = function () {
  abortRequest(this._currentRequest);
  this.emit("abort");
};

// Writes buffered data to the current native request
RedirectableRequest.prototype.write = function (data, encoding, callback) {
  // Writing is not allowed if end has been called
  if (this._ending) {
    throw new WriteAfterEndError();
  }

  // Validate input and shift parameters if necessary
  if (!(typeof data === "string" || typeof data === "object" && ("length" in data))) {
    throw new TypeError("data should be a string, Buffer or Uint8Array");
  }
  if (typeof encoding === "function") {
    callback = encoding;
    encoding = null;
  }

  // Ignore empty buffers, since writing them doesn't invoke the callback
  // https://github.com/nodejs/node/issues/22066
  if (data.length === 0) {
    if (callback) {
      callback();
    }
    return;
  }
  // Only write when we don't exceed the maximum body length
  if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {
    this._requestBodyLength += data.length;
    this._requestBodyBuffers.push({ data: data, encoding: encoding });
    this._currentRequest.write(data, encoding, callback);
  }
  // Error when we exceed the maximum body length
  else {
    this.emit("error", new MaxBodyLengthExceededError());
    this.abort();
  }
};

// Ends the current native request
RedirectableRequest.prototype.end = function (data, encoding, callback) {
  // Shift parameters if necessary
  if (typeof data === "function") {
    callback = data;
    data = encoding = null;
  }
  else if (typeof encoding === "function") {
    callback = encoding;
    encoding = null;
  }

  // Write data if needed and end
  if (!data) {
    this._ended = this._ending = true;
    this._currentRequest.end(null, null, callback);
  }
  else {
    var self = this;
    var currentRequest = this._currentRequest;
    this.write(data, encoding, function () {
      self._ended = true;
      currentRequest.end(null, null, callback);
    });
    this._ending = true;
  }
};

// Sets a header value on the current native request
RedirectableRequest.prototype.setHeader = function (name, value) {
  this._options.headers[name] = value;
  this._currentRequest.setHeader(name, value);
};

// Clears a header value on the current native request
RedirectableRequest.prototype.removeHeader = function (name) {
  delete this._options.headers[name];
  this._currentRequest.removeHeader(name);
};

// Global timeout for all underlying requests
RedirectableRequest.prototype.setTimeout = function (msecs, callback) {
  var self = this;

  // Destroys the socket on timeout
  function destroyOnTimeout(socket) {
    socket.setTimeout(msecs);
    socket.removeListener("timeout", socket.destroy);
    socket.addListener("timeout", socket.destroy);
  }

  // Sets up a timer to trigger a timeout event
  function startTimer(socket) {
    if (self._timeout) {
      clearTimeout(self._timeout);
    }
    self._timeout = setTimeout(function () {
      self.emit("timeout");
      clearTimer();
    }, msecs);
    destroyOnTimeout(socket);
  }

  // Stops a timeout from triggering
  function clearTimer() {
    // Clear the timeout
    if (self._timeout) {
      clearTimeout(self._timeout);
      self._timeout = null;
    }

    // Clean up all attached listeners
    self.removeListener("abort", clearTimer);
    self.removeListener("error", clearTimer);
    self.removeListener("response", clearTimer);
    if (callback) {
      self.removeListener("timeout", callback);
    }
    if (!self.socket) {
      self._currentRequest.removeListener("socket", startTimer);
    }
  }

  // Attach callback if passed
  if (callback) {
    this.on("timeout", callback);
  }

  // Start the timer if or when the socket is opened
  if (this.socket) {
    startTimer(this.socket);
  }
  else {
    this._currentRequest.once("socket", startTimer);
  }

  // Clean up on events
  this.on("socket", destroyOnTimeout);
  this.on("abort", clearTimer);
  this.on("error", clearTimer);
  this.on("response", clearTimer);

  return this;
};

// Proxy all other public ClientRequest methods
[
  "flushHeaders", "getHeader",
  "setNoDelay", "setSocketKeepAlive",
].forEach(function (method) {
  RedirectableRequest.prototype[method] = function (a, b) {
    return this._currentRequest[method](a, b);
  };
});

// Proxy all public ClientRequest properties
["aborted", "connection", "socket"].forEach(function (property) {
  Object.defineProperty(RedirectableRequest.prototype, property, {
    get: function () { return this._currentRequest[property]; },
  });
});

RedirectableRequest.prototype._sanitizeOptions = function (options) {
  // Ensure headers are always present
  if (!options.headers) {
    options.headers = {};
  }

  // Since http.request treats host as an alias of hostname,
  // but the url module interprets host as hostname plus port,
  // eliminate the host property to avoid confusion.
  if (options.host) {
    // Use hostname if set, because it has precedence
    if (!options.hostname) {
      options.hostname = options.host;
    }
    delete options.host;
  }

  // Complete the URL object when necessary
  if (!options.pathname && options.path) {
    var searchPos = options.path.indexOf("?");
    if (searchPos < 0) {
      options.pathname = options.path;
    }
    else {
      options.pathname = options.path.substring(0, searchPos);
      options.search = options.path.substring(searchPos);
    }
  }
};


// Executes the next native request (initial or redirect)
RedirectableRequest.prototype._performRequest = function () {
  // Load the native protocol
  var protocol = this._options.protocol;
  var nativeProtocol = this._options.nativeProtocols[protocol];
  if (!nativeProtocol) {
    this.emit("error", new TypeError("Unsupported protocol " + protocol));
    return;
  }

  // If specified, use the agent corresponding to the protocol
  // (HTTP and HTTPS use different types of agents)
  if (this._options.agents) {
    var scheme = protocol.slice(0, -1);
    this._options.agent = this._options.agents[scheme];
  }

  // Create the native request and set up its event handlers
  var request = this._currentRequest =
        nativeProtocol.request(this._options, this._onNativeResponse);
  request._redirectable = this;
  for (var event of events) {
    request.on(event, eventHandlers[event]);
  }

  // RFC7230Â§5.3.1: When making a request directly to an origin server, [â€¦]
  // a client MUST send only the absolute path [â€¦] as the request-target.
  this._currentUrl = /^\//.test(this._options.path) ?
    url.format(this._options) :
    // When making a request to a proxy, [â€¦]
    // a client MUST send the target URI in absolute-form [â€¦].
    this._currentUrl = this._options.path;

  // End a redirected request
  // (The first request must be ended explicitly with RedirectableRequest#end)
  if (this._isRedirect) {
    // Write the request entity and end
    var i = 0;
    var self = this;
    var buffers = this._requestBodyBuffers;
    (function writeNext(error) {
      // Only write if this request has not been redirected yet
      /* istanbul ignore else */
      if (request === self._currentRequest) {
        // Report any write errors
        /* istanbul ignore if */
        if (error) {
          self.emit("error", error);
        }
        // Write the next buffer if there are still left
        else if (i < buffers.length) {
          var buffer = buffers[i++];
          /* istanbul ignore else */
          if (!request.finished) {
            request.write(buffer.data, buffer.encoding, writeNext);
          }
        }
        // End the request if `end` has been called on us
        else if (self._ended) {
          request.end();
        }
      }
    }());
  }
};

// Processes a response from the current native request
RedirectableRequest.prototype._processResponse = function (response) {
  // Store the redirected response
  var statusCode = response.statusCode;
  if (this._options.trackRedirects) {
    this._redirects.push({
      url: this._currentUrl,
      headers: response.headers,
      statusCode: statusCode,
    });
  }

  // RFC7231Â§6.4: The 3xx (Redirection) class of status code indicates
  // that further action needs to be taken by the user agent in order to
  // fulfill the request. If a Location header field is provided,
  // the user agent MAY automatically redirect its request to the URI
  // referenced by the Location field value,
  // even if the specific status code is not understood.

  // If the response is not a redirect; return it as-is
  var location = response.headers.location;
  if (!location || this._options.followRedirects === false ||
      statusCode < 300 || statusCode >= 400) {
    response.responseUrl = this._currentUrl;
    response.redirects = this._redirects;
    this.emit("response", response);

    // Clean up
    this._requestBodyBuffers = [];
    return;
  }

  // The response is a redirect, so abort the current request
  abortRequest(this._currentRequest);
  // Discard the remainder of the response to avoid waiting for data
  response.destroy();

  // RFC7231Â§6.4: A client SHOULD detect and intervene
  // in cyclical redirections (i.e., "infinite" redirection loops).
  if (++this._redirectCount > this._options.maxRedirects) {
    this.emit("error", new TooManyRedirectsError());
    return;
  }

  // Store the request headers if applicable
  var requestHeaders;
  var beforeRedirect = this._options.beforeRedirect;
  if (beforeRedirect) {
    requestHeaders = Object.assign({
      // The Host header was set by nativeProtocol.request
      Host: response.req.getHeader("host"),
    }, this._options.headers);
  }

  // RFC7231Â§6.4: Automatic redirection needs to done with
  // care for methods not known to be safe, [â€¦]
  // RFC7231Â§6.4.2â€“3: For historical reasons, a user agent MAY change
  // the request method from POST to GET for the subsequent request.
  var method = this._options.method;
  if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" ||
      // RFC7231Â§6.4.4: The 303 (See Other) status code indicates that
      // the server is redirecting the user agent to a different resource [â€¦]
      // A user agent can perform a retrieval request targeting that URI
      // (a GET or HEAD request if using HTTP) [â€¦]
      (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {
    this._options.method = "GET";
    // Drop a possible entity and headers related to it
    this._requestBodyBuffers = [];
    removeMatchingHeaders(/^content-/i, this._options.headers);
  }

  // Drop the Host header, as the redirect might lead to a different host
  var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);

  // If the redirect is relative, carry over the host of the last request
  var currentUrlParts = url.parse(this._currentUrl);
  var currentHost = currentHostHeader || currentUrlParts.host;
  var currentUrl = /^\w+:/.test(location) ? this._currentUrl :
    url.format(Object.assign(currentUrlParts, { host: currentHost }));

  // Determine the URL of the redirection
  var redirectUrl;
  try {
    redirectUrl = url.resolve(currentUrl, location);
  }
  catch (cause) {
    this.emit("error", new RedirectionError(cause));
    return;
  }

  // Create the redirected request
  debug("redirecting to", redirectUrl);
  this._isRedirect = true;
  var redirectUrlParts = url.parse(redirectUrl);
  Object.assign(this._options, redirectUrlParts);

  // Drop confidential headers when redirecting to a less secure protocol
  // or to a different domain that is not a superdomain
  if (redirectUrlParts.protocol !== currentUrlParts.protocol &&
     redirectUrlParts.protocol !== "https:" ||
     redirectUrlParts.host !== currentHost &&
     !isSubdomain(redirectUrlParts.host, currentHost)) {
    removeMatchingHeaders(/^(?:authorization|cookie)$/i, this._options.headers);
  }

  // Evaluate the beforeRedirect callback
  if (typeof beforeRedirect === "function") {
    var responseDetails = {
      headers: response.headers,
      statusCode: statusCode,
    };
    var requestDetails = {
      url: currentUrl,
      method: method,
      headers: requestHeaders,
    };
    try {
      beforeRedirect(this._options, responseDetails, requestDetails);
    }
    catch (err) {
      this.emit("error", err);
      return;
    }
    this._sanitizeOptions(this._options);
  }

  // Perform the redirected request
  try {
    this._performRequest();
  }
  catch (cause) {
    this.emit("error", new RedirectionError(cause));
  }
};

// Wraps the key/value object of protocols with redirect functionality
function wrap(protocols) {
  // Default settings
  var exports = {
    maxRedirects: 21,
    maxBodyLength: 10 * 1024 * 1024,
  };

  // Wrap each protocol
  var nativeProtocols = {};
  Object.keys(protocols).forEach(function (scheme) {
    var protocol = scheme + ":";
    var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];
    var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);

    // Executes a request, following redirects
    function request(input, options, callback) {
      // Parse parameters
      if (typeof input === "string") {
        var urlStr = input;
        try {
          input = urlToOptions(new URL(urlStr));
        }
        catch (err) {
          /* istanbul ignore next */
          input = url.parse(urlStr);
        }
      }
      else if (URL && (input instanceof URL)) {
        input = urlToOptions(input);
      }
      else {
        callback = options;
        options = input;
        input = { protocol: protocol };
      }
      if (typeof options === "function") {
        callback = options;
        options = null;
      }

      // Set defaults
      options = Object.assign({
        maxRedirects: exports.maxRedirects,
        maxBodyLength: exports.maxBodyLength,
      }, input, options);
      options.nativeProtocols = nativeProtocols;

      assert.equal(options.protocol, protocol, "protocol mismatch");
      debug("options", options);
      return new RedirectableRequest(options, callback);
    }

    // Executes a GET request, following redirects
    function get(input, options, callback) {
      var wrappedRequest = wrappedProtocol.request(input, options, callback);
      wrappedRequest.end();
      return wrappedRequest;
    }

    // Expose the properties on the wrapped protocol
    Object.defineProperties(wrappedProtocol, {
      request: { value: request, configurable: true, enumerable: true, writable: true },
      get: { value: get, configurable: true, enumerable: true, writable: true },
    });
  });
  return exports;
}

/* istanbul ignore next */
function noop() { /* empty */ }

// from https://github.com/nodejs/node/blob/master/lib/internal/url.js
function urlToOptions(urlObject) {
  var options = {
    protocol: urlObject.protocol,
    hostname: urlObject.hostname.startsWith("[") ?
      /* istanbul ignore next */
      urlObject.hostname.slice(1, -1) :
      urlObject.hostname,
    hash: urlObject.hash,
    search: urlObject.search,
    pathname: urlObject.pathname,
    path: urlObject.pathname + urlObject.search,
    href: urlObject.href,
  };
  if (urlObject.port !== "") {
    options.port = Number(urlObject.port);
  }
  return options;
}

function removeMatchingHeaders(regex, headers) {
  var lastValue;
  for (var header in headers) {
    if (regex.test(header)) {
      lastValue = headers[header];
      delete headers[header];
    }
  }
  return (lastValue === null || typeof lastValue === "undefined") ?
    undefined : String(lastValue).trim();
}

function createErrorType(code, defaultMessage) {
  function CustomError(cause) {
    Error.captureStackTrace(this, this.constructor);
    if (!cause) {
      this.message = defaultMessage;
    }
    else {
      this.message = defaultMessage + ": " + cause.message;
      this.cause = cause;
    }
  }
  CustomError.prototype = new Error();
  CustomError.prototype.constructor = CustomError;
  CustomError.prototype.name = "Error [" + code + "]";
  CustomError.prototype.code = code;
  return CustomError;
}

function abortRequest(request) {
  for (var event of events) {
    request.removeListener(event, eventHandlers[event]);
  }
  request.on("error", noop);
  request.abort();
}

function isSubdomain(subdomain, domain) {
  const dot = subdomain.length - domain.length - 1;
  return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain);
}

// Exports
module.exports = wrap({ http: http, https: https });
module.exports.wrap = wrap;
Copyright 2014â€“present Olivier Lalonde <olalonde@gmail.com>, James Talmage <james@talmage.io>, Ruben Verborgh

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "follow-redirects",
  "version": "1.15.1",
  "description": "HTTP and HTTPS modules that follow redirects.",
  "license": "MIT",
  "main": "index.js",
  "files": [
    "*.js"
  ],
  "engines": {
    "node": ">=4.0"
  },
  "repository": {
    "type": "git",
    "url": "git@github.com:follow-redirects/follow-redirects.git"
  },
  "homepage": "https://github.com/follow-redirects/follow-redirects",
  "author": "Ruben Verborgh <ruben@verborgh.org> (https://ruben.verborgh.org/)",
  "funding": [
    {
      "type": "individual",
      "url": "https://github.com/sponsors/RubenVerborgh"
    }
  ],
  "peerDependenciesMeta": {
    "debug": {
      "optional": true
    }
  },
  "devDependencies": {
    "concat-stream": "^2.0.0",
    "eslint": "^5.16.0",
    "express": "^4.16.4",
    "lolex": "^3.1.0",
    "mocha": "^6.0.2",
    "nyc": "^14.1.1"
  }
}0.5.2 / 2017-09-13
==================

  * Fix regression matching multiple ETags in `If-None-Match`
  * perf: improve `If-None-Match` token parsing

0.5.1 / 2017-09-11
==================

  * Fix handling of modified headers with invalid dates
  * perf: improve ETag match loop

0.5.0 / 2017-02-21
==================

  * Fix incorrect result when `If-None-Match` has both `*` and ETags
  * Fix weak `ETag` matching to match spec
  * perf: delay reading header values until needed
  * perf: skip checking modified time if ETag check failed
  * perf: skip parsing `If-None-Match` when no `ETag` header
  * perf: use `Date.parse` instead of `new Date`

0.4.0 / 2017-02-05
==================

  * Fix false detection of `no-cache` request directive
  * perf: enable strict mode
  * perf: hoist regular expressions
  * perf: remove duplicate conditional
  * perf: remove unnecessary boolean coercions

0.3.0 / 2015-05-12
==================

  * Add weak `ETag` matching support

0.2.4 / 2014-09-07
==================

  * Support Node.js 0.6

0.2.3 / 2014-09-07
==================

  * Move repository to jshttp

0.2.2 / 2014-02-19
==================

  * Revert "Fix for blank page on Safari reload"

0.2.1 / 2014-01-29
==================

  * Fix for blank page on Safari reload

0.2.0 / 2013-08-11
==================

  * Return stale for `Cache-Control: no-cache`

0.1.0 / 2012-06-15
==================

  * Add `If-None-Match: *` support

0.0.1 / 2012-06-10
==================

  * Initial release
/*!
 * fresh
 * Copyright(c) 2012 TJ Holowaychuk
 * Copyright(c) 2016-2017 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * RegExp to check for no-cache token in Cache-Control.
 * @private
 */

var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/

/**
 * Module exports.
 * @public
 */

module.exports = fresh

/**
 * Check freshness of the response using request and response headers.
 *
 * @param {Object} reqHeaders
 * @param {Object} resHeaders
 * @return {Boolean}
 * @public
 */

function fresh (reqHeaders, resHeaders) {
  // fields
  var modifiedSince = reqHeaders['if-modified-since']
  var noneMatch = reqHeaders['if-none-match']

  // unconditional request
  if (!modifiedSince && !noneMatch) {
    return false
  }

  // Always return stale when Cache-Control: no-cache
  // to support end-to-end reload requests
  // https://tools.ietf.org/html/rfc2616#section-14.9.4
  var cacheControl = reqHeaders['cache-control']
  if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {
    return false
  }

  // if-none-match
  if (noneMatch && noneMatch !== '*') {
    var etag = resHeaders['etag']

    if (!etag) {
      return false
    }

    var etagStale = true
    var matches = parseTokenList(noneMatch)
    for (var i = 0; i < matches.length; i++) {
      var match = matches[i]
      if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {
        etagStale = false
        break
      }
    }

    if (etagStale) {
      return false
    }
  }

  // if-modified-since
  if (modifiedSince) {
    var lastModified = resHeaders['last-modified']
    var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))

    if (modifiedStale) {
      return false
    }
  }

  return true
}

/**
 * Parse an HTTP Date into a number.
 *
 * @param {string} date
 * @private
 */

function parseHttpDate (date) {
  var timestamp = date && Date.parse(date)

  // istanbul ignore next: guard against date.js Date.parse patching
  return typeof timestamp === 'number'
    ? timestamp
    : NaN
}

/**
 * Parse a HTTP token list.
 *
 * @param {string} str
 * @private
 */

function parseTokenList (str) {
  var end = 0
  var list = []
  var start = 0

  // gather tokens
  for (var i = 0, len = str.length; i < len; i++) {
    switch (str.charCodeAt(i)) {
      case 0x20: /*   */
        if (start === end) {
          start = end = i + 1
        }
        break
      case 0x2c: /* , */
        list.push(str.substring(start, end))
        start = end = i + 1
        break
      default:
        end = i + 1
        break
    }
  }

  // final token
  list.push(str.substring(start, end))

  return list
}
(The MIT License)

Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>
Copyright (c) 2016-2017 Douglas Christopher Wilson <doug@somethingdoug.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "fresh",
  "description": "HTTP response freshness testing",
  "version": "0.5.2",
  "author": "TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)",
  "license": "MIT",
  "repository": "jshttp/fresh",
  "devDependencies": {
    "beautify-benchmark": "0.2.4",
    "benchmark": "2.1.4",
    "eslint": "3.19.0",
    "eslint-config-standard": "10.2.1",
    "eslint-plugin-import": "2.7.0",
    "eslint-plugin-markdown": "1.0.0-beta.6",
    "eslint-plugin-node": "5.1.1",
    "eslint-plugin-promise": "3.5.0",
    "eslint-plugin-standard": "3.0.1",
    "istanbul": "0.4.5",
    "mocha": "1.21.5"
  },
  "files": [
    "HISTORY.md",
    "LICENSE",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}module.exports = require('constants')
module.exports = require('fs').constants || require('constants')
The MIT License (MIT)

Copyright (c) 2018 Mathias Buus

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "fs-constants",
  "version": "1.0.0",
  "description": "Require constants across node and the browser",
  "main": "index.js",
  "browser": "browser.js",
  "dependencies": {},
  "devDependencies": {},
  "repository": {
    "type": "git",
    "url": "https://github.com/mafintosh/fs-constants.git"
  },
  "author": "Mathias Buus (@mafintosh)",
  "license": "MIT",
  "homepage": "https://github.com/mafintosh/fs-constants"
}'use strict'

const fs = require('graceful-fs')
const path = require('path')
const mkdirsSync = require('../mkdirs').mkdirsSync
const utimesMillisSync = require('../util/utimes').utimesMillisSync
const stat = require('../util/stat')

function copySync (src, dest, opts) {
  if (typeof opts === 'function') {
    opts = { filter: opts }
  }

  opts = opts || {}
  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber

  // Warn about using preserveTimestamps on 32-bit node
  if (opts.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)
  stat.checkParentPathsSync(src, srcStat, dest, 'copy')
  return handleFilterAndCopy(destStat, src, dest, opts)
}

function handleFilterAndCopy (destStat, src, dest, opts) {
  if (opts.filter && !opts.filter(src, dest)) return
  const destParent = path.dirname(dest)
  if (!fs.existsSync(destParent)) mkdirsSync(destParent)
  return getStats(destStat, src, dest, opts)
}

function startCopy (destStat, src, dest, opts) {
  if (opts.filter && !opts.filter(src, dest)) return
  return getStats(destStat, src, dest, opts)
}

function getStats (destStat, src, dest, opts) {
  const statSync = opts.dereference ? fs.statSync : fs.lstatSync
  const srcStat = statSync(src)

  if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)
  else if (srcStat.isFile() ||
           srcStat.isCharacterDevice() ||
           srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)
  else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)
  else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)
  else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)
  throw new Error(`Unknown file: ${src}`)
}

function onFile (srcStat, destStat, src, dest, opts) {
  if (!destStat) return copyFile(srcStat, src, dest, opts)
  return mayCopyFile(srcStat, src, dest, opts)
}

function mayCopyFile (srcStat, src, dest, opts) {
  if (opts.overwrite) {
    fs.unlinkSync(dest)
    return copyFile(srcStat, src, dest, opts)
  } else if (opts.errorOnExist) {
    throw new Error(`'${dest}' already exists`)
  }
}

function copyFile (srcStat, src, dest, opts) {
  fs.copyFileSync(src, dest)
  if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)
  return setDestMode(dest, srcStat.mode)
}

function handleTimestamps (srcMode, src, dest) {
  // Make sure the file is writable before setting the timestamp
  // otherwise open fails with EPERM when invoked with 'r+'
  // (through utimes call)
  if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)
  return setDestTimestamps(src, dest)
}

function fileIsNotWritable (srcMode) {
  return (srcMode & 0o200) === 0
}

function makeFileWritable (dest, srcMode) {
  return setDestMode(dest, srcMode | 0o200)
}

function setDestMode (dest, srcMode) {
  return fs.chmodSync(dest, srcMode)
}

function setDestTimestamps (src, dest) {
  // The initial srcStat.atime cannot be trusted
  // because it is modified by the read(2) system call
  // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
  const updatedSrcStat = fs.statSync(src)
  return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)
}

function onDir (srcStat, destStat, src, dest, opts) {
  if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)
  return copyDir(src, dest, opts)
}

function mkDirAndCopy (srcMode, src, dest, opts) {
  fs.mkdirSync(dest)
  copyDir(src, dest, opts)
  return setDestMode(dest, srcMode)
}

function copyDir (src, dest, opts) {
  fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
}

function copyDirItem (item, src, dest, opts) {
  const srcItem = path.join(src, item)
  const destItem = path.join(dest, item)
  const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)
  return startCopy(destStat, srcItem, destItem, opts)
}

function onLink (destStat, src, dest, opts) {
  let resolvedSrc = fs.readlinkSync(src)
  if (opts.dereference) {
    resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
  }

  if (!destStat) {
    return fs.symlinkSync(resolvedSrc, dest)
  } else {
    let resolvedDest
    try {
      resolvedDest = fs.readlinkSync(dest)
    } catch (err) {
      // dest exists and is a regular file or directory,
      // Windows may throw UNKNOWN error. If dest already exists,
      // fs throws error anyway, so no need to guard against it here.
      if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)
      throw err
    }
    if (opts.dereference) {
      resolvedDest = path.resolve(process.cwd(), resolvedDest)
    }
    if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
      throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)
    }

    // prevent copy if src is a subdir of dest since unlinking
    // dest in this case would result in removing src contents
    // and therefore a broken symlink would be created.
    if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
      throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
    }
    return copyLink(resolvedSrc, dest)
  }
}

function copyLink (resolvedSrc, dest) {
  fs.unlinkSync(dest)
  return fs.symlinkSync(resolvedSrc, dest)
}

module.exports = copySync
'use strict'

module.exports = {
  copySync: require('./copy-sync')
}
'use strict'

const fs = require('graceful-fs')
const path = require('path')
const mkdirs = require('../mkdirs').mkdirs
const pathExists = require('../path-exists').pathExists
const utimesMillis = require('../util/utimes').utimesMillis
const stat = require('../util/stat')

function copy (src, dest, opts, cb) {
  if (typeof opts === 'function' && !cb) {
    cb = opts
    opts = {}
  } else if (typeof opts === 'function') {
    opts = { filter: opts }
  }

  cb = cb || function () {}
  opts = opts || {}

  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber

  // Warn about using preserveTimestamps on 32-bit node
  if (opts.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  stat.checkPaths(src, dest, 'copy', opts, (err, stats) => {
    if (err) return cb(err)
    const { srcStat, destStat } = stats
    stat.checkParentPaths(src, srcStat, dest, 'copy', err => {
      if (err) return cb(err)
      if (opts.filter) return handleFilter(checkParentDir, destStat, src, dest, opts, cb)
      return checkParentDir(destStat, src, dest, opts, cb)
    })
  })
}

function checkParentDir (destStat, src, dest, opts, cb) {
  const destParent = path.dirname(dest)
  pathExists(destParent, (err, dirExists) => {
    if (err) return cb(err)
    if (dirExists) return getStats(destStat, src, dest, opts, cb)
    mkdirs(destParent, err => {
      if (err) return cb(err)
      return getStats(destStat, src, dest, opts, cb)
    })
  })
}

function handleFilter (onInclude, destStat, src, dest, opts, cb) {
  Promise.resolve(opts.filter(src, dest)).then(include => {
    if (include) return onInclude(destStat, src, dest, opts, cb)
    return cb()
  }, error => cb(error))
}

function startCopy (destStat, src, dest, opts, cb) {
  if (opts.filter) return handleFilter(getStats, destStat, src, dest, opts, cb)
  return getStats(destStat, src, dest, opts, cb)
}

function getStats (destStat, src, dest, opts, cb) {
  const stat = opts.dereference ? fs.stat : fs.lstat
  stat(src, (err, srcStat) => {
    if (err) return cb(err)

    if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts, cb)
    else if (srcStat.isFile() ||
             srcStat.isCharacterDevice() ||
             srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts, cb)
    else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts, cb)
    else if (srcStat.isSocket()) return cb(new Error(`Cannot copy a socket file: ${src}`))
    else if (srcStat.isFIFO()) return cb(new Error(`Cannot copy a FIFO pipe: ${src}`))
    return cb(new Error(`Unknown file: ${src}`))
  })
}

function onFile (srcStat, destStat, src, dest, opts, cb) {
  if (!destStat) return copyFile(srcStat, src, dest, opts, cb)
  return mayCopyFile(srcStat, src, dest, opts, cb)
}

function mayCopyFile (srcStat, src, dest, opts, cb) {
  if (opts.overwrite) {
    fs.unlink(dest, err => {
      if (err) return cb(err)
      return copyFile(srcStat, src, dest, opts, cb)
    })
  } else if (opts.errorOnExist) {
    return cb(new Error(`'${dest}' already exists`))
  } else return cb()
}

function copyFile (srcStat, src, dest, opts, cb) {
  fs.copyFile(src, dest, err => {
    if (err) return cb(err)
    if (opts.preserveTimestamps) return handleTimestampsAndMode(srcStat.mode, src, dest, cb)
    return setDestMode(dest, srcStat.mode, cb)
  })
}

function handleTimestampsAndMode (srcMode, src, dest, cb) {
  // Make sure the file is writable before setting the timestamp
  // otherwise open fails with EPERM when invoked with 'r+'
  // (through utimes call)
  if (fileIsNotWritable(srcMode)) {
    return makeFileWritable(dest, srcMode, err => {
      if (err) return cb(err)
      return setDestTimestampsAndMode(srcMode, src, dest, cb)
    })
  }
  return setDestTimestampsAndMode(srcMode, src, dest, cb)
}

function fileIsNotWritable (srcMode) {
  return (srcMode & 0o200) === 0
}

function makeFileWritable (dest, srcMode, cb) {
  return setDestMode(dest, srcMode | 0o200, cb)
}

function setDestTimestampsAndMode (srcMode, src, dest, cb) {
  setDestTimestamps(src, dest, err => {
    if (err) return cb(err)
    return setDestMode(dest, srcMode, cb)
  })
}

function setDestMode (dest, srcMode, cb) {
  return fs.chmod(dest, srcMode, cb)
}

function setDestTimestamps (src, dest, cb) {
  // The initial srcStat.atime cannot be trusted
  // because it is modified by the read(2) system call
  // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
  fs.stat(src, (err, updatedSrcStat) => {
    if (err) return cb(err)
    return utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime, cb)
  })
}

function onDir (srcStat, destStat, src, dest, opts, cb) {
  if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts, cb)
  return copyDir(src, dest, opts, cb)
}

function mkDirAndCopy (srcMode, src, dest, opts, cb) {
  fs.mkdir(dest, err => {
    if (err) return cb(err)
    copyDir(src, dest, opts, err => {
      if (err) return cb(err)
      return setDestMode(dest, srcMode, cb)
    })
  })
}

function copyDir (src, dest, opts, cb) {
  fs.readdir(src, (err, items) => {
    if (err) return cb(err)
    return copyDirItems(items, src, dest, opts, cb)
  })
}

function copyDirItems (items, src, dest, opts, cb) {
  const item = items.pop()
  if (!item) return cb()
  return copyDirItem(items, item, src, dest, opts, cb)
}

function copyDirItem (items, item, src, dest, opts, cb) {
  const srcItem = path.join(src, item)
  const destItem = path.join(dest, item)
  stat.checkPaths(srcItem, destItem, 'copy', opts, (err, stats) => {
    if (err) return cb(err)
    const { destStat } = stats
    startCopy(destStat, srcItem, destItem, opts, err => {
      if (err) return cb(err)
      return copyDirItems(items, src, dest, opts, cb)
    })
  })
}

function onLink (destStat, src, dest, opts, cb) {
  fs.readlink(src, (err, resolvedSrc) => {
    if (err) return cb(err)
    if (opts.dereference) {
      resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
    }

    if (!destStat) {
      return fs.symlink(resolvedSrc, dest, cb)
    } else {
      fs.readlink(dest, (err, resolvedDest) => {
        if (err) {
          // dest exists and is a regular file or directory,
          // Windows may throw UNKNOWN error. If dest already exists,
          // fs throws error anyway, so no need to guard against it here.
          if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest, cb)
          return cb(err)
        }
        if (opts.dereference) {
          resolvedDest = path.resolve(process.cwd(), resolvedDest)
        }
        if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
          return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`))
        }

        // do not copy if src is a subdir of dest since unlinking
        // dest in this case would result in removing src contents
        // and therefore a broken symlink would be created.
        if (destStat.isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
          return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))
        }
        return copyLink(resolvedSrc, dest, cb)
      })
    }
  })
}

function copyLink (resolvedSrc, dest, cb) {
  fs.unlink(dest, err => {
    if (err) return cb(err)
    return fs.symlink(resolvedSrc, dest, cb)
  })
}

module.exports = copy
'use strict'

const u = require('universalify').fromCallback
module.exports = {
  copy: u(require('./copy'))
}
'use strict'

const u = require('universalify').fromPromise
const fs = require('../fs')
const path = require('path')
const mkdir = require('../mkdirs')
const remove = require('../remove')

const emptyDir = u(async function emptyDir (dir) {
  let items
  try {
    items = await fs.readdir(dir)
  } catch {
    return mkdir.mkdirs(dir)
  }

  return Promise.all(items.map(item => remove.remove(path.join(dir, item))))
})

function emptyDirSync (dir) {
  let items
  try {
    items = fs.readdirSync(dir)
  } catch {
    return mkdir.mkdirsSync(dir)
  }

  items.forEach(item => {
    item = path.join(dir, item)
    remove.removeSync(item)
  })
}

module.exports = {
  emptyDirSync,
  emptydirSync: emptyDirSync,
  emptyDir,
  emptydir: emptyDir
}
'use strict'

const u = require('universalify').fromCallback
const path = require('path')
const fs = require('graceful-fs')
const mkdir = require('../mkdirs')

function createFile (file, callback) {
  function makeFile () {
    fs.writeFile(file, '', err => {
      if (err) return callback(err)
      callback()
    })
  }

  fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
    if (!err && stats.isFile()) return callback()
    const dir = path.dirname(file)
    fs.stat(dir, (err, stats) => {
      if (err) {
        // if the directory doesn't exist, make it
        if (err.code === 'ENOENT') {
          return mkdir.mkdirs(dir, err => {
            if (err) return callback(err)
            makeFile()
          })
        }
        return callback(err)
      }

      if (stats.isDirectory()) makeFile()
      else {
        // parent is not a directory
        // This is just to cause an internal ENOTDIR error to be thrown
        fs.readdir(dir, err => {
          if (err) return callback(err)
        })
      }
    })
  })
}

function createFileSync (file) {
  let stats
  try {
    stats = fs.statSync(file)
  } catch {}
  if (stats && stats.isFile()) return

  const dir = path.dirname(file)
  try {
    if (!fs.statSync(dir).isDirectory()) {
      // parent is not a directory
      // This is just to cause an internal ENOTDIR error to be thrown
      fs.readdirSync(dir)
    }
  } catch (err) {
    // If the stat call above failed because the directory doesn't exist, create it
    if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)
    else throw err
  }

  fs.writeFileSync(file, '')
}

module.exports = {
  createFile: u(createFile),
  createFileSync
}
'use strict'

const file = require('./file')
const link = require('./link')
const symlink = require('./symlink')

module.exports = {
  // file
  createFile: file.createFile,
  createFileSync: file.createFileSync,
  ensureFile: file.createFile,
  ensureFileSync: file.createFileSync,
  // link
  createLink: link.createLink,
  createLinkSync: link.createLinkSync,
  ensureLink: link.createLink,
  ensureLinkSync: link.createLinkSync,
  // symlink
  createSymlink: symlink.createSymlink,
  createSymlinkSync: symlink.createSymlinkSync,
  ensureSymlink: symlink.createSymlink,
  ensureSymlinkSync: symlink.createSymlinkSync
}
'use strict'

const u = require('universalify').fromCallback
const path = require('path')
const fs = require('graceful-fs')
const mkdir = require('../mkdirs')
const pathExists = require('../path-exists').pathExists
const { areIdentical } = require('../util/stat')

function createLink (srcpath, dstpath, callback) {
  function makeLink (srcpath, dstpath) {
    fs.link(srcpath, dstpath, err => {
      if (err) return callback(err)
      callback(null)
    })
  }

  fs.lstat(dstpath, (_, dstStat) => {
    fs.lstat(srcpath, (err, srcStat) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureLink')
        return callback(err)
      }
      if (dstStat && areIdentical(srcStat, dstStat)) return callback(null)

      const dir = path.dirname(dstpath)
      pathExists(dir, (err, dirExists) => {
        if (err) return callback(err)
        if (dirExists) return makeLink(srcpath, dstpath)
        mkdir.mkdirs(dir, err => {
          if (err) return callback(err)
          makeLink(srcpath, dstpath)
        })
      })
    })
  })
}

function createLinkSync (srcpath, dstpath) {
  let dstStat
  try {
    dstStat = fs.lstatSync(dstpath)
  } catch {}

  try {
    const srcStat = fs.lstatSync(srcpath)
    if (dstStat && areIdentical(srcStat, dstStat)) return
  } catch (err) {
    err.message = err.message.replace('lstat', 'ensureLink')
    throw err
  }

  const dir = path.dirname(dstpath)
  const dirExists = fs.existsSync(dir)
  if (dirExists) return fs.linkSync(srcpath, dstpath)
  mkdir.mkdirsSync(dir)

  return fs.linkSync(srcpath, dstpath)
}

module.exports = {
  createLink: u(createLink),
  createLinkSync
}
'use strict'

const path = require('path')
const fs = require('graceful-fs')
const pathExists = require('../path-exists').pathExists

/**
 * Function that returns two types of paths, one relative to symlink, and one
 * relative to the current working directory. Checks if path is absolute or
 * relative. If the path is relative, this function checks if the path is
 * relative to symlink or relative to current working directory. This is an
 * initiative to find a smarter `srcpath` to supply when building symlinks.
 * This allows you to determine which path to use out of one of three possible
 * types of source paths. The first is an absolute path. This is detected by
 * `path.isAbsolute()`. When an absolute path is provided, it is checked to
 * see if it exists. If it does it's used, if not an error is returned
 * (callback)/ thrown (sync). The other two options for `srcpath` are a
 * relative url. By default Node's `fs.symlink` works by creating a symlink
 * using `dstpath` and expects the `srcpath` to be relative to the newly
 * created symlink. If you provide a `srcpath` that does not exist on the file
 * system it results in a broken symlink. To minimize this, the function
 * checks to see if the 'relative to symlink' source file exists, and if it
 * does it will use it. If it does not, it checks if there's a file that
 * exists that is relative to the current working directory, if does its used.
 * This preserves the expectations of the original fs.symlink spec and adds
 * the ability to pass in `relative to current working direcotry` paths.
 */

function symlinkPaths (srcpath, dstpath, callback) {
  if (path.isAbsolute(srcpath)) {
    return fs.lstat(srcpath, (err) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureSymlink')
        return callback(err)
      }
      return callback(null, {
        toCwd: srcpath,
        toDst: srcpath
      })
    })
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    return pathExists(relativeToDst, (err, exists) => {
      if (err) return callback(err)
      if (exists) {
        return callback(null, {
          toCwd: relativeToDst,
          toDst: srcpath
        })
      } else {
        return fs.lstat(srcpath, (err) => {
          if (err) {
            err.message = err.message.replace('lstat', 'ensureSymlink')
            return callback(err)
          }
          return callback(null, {
            toCwd: srcpath,
            toDst: path.relative(dstdir, srcpath)
          })
        })
      }
    })
  }
}

function symlinkPathsSync (srcpath, dstpath) {
  let exists
  if (path.isAbsolute(srcpath)) {
    exists = fs.existsSync(srcpath)
    if (!exists) throw new Error('absolute srcpath does not exist')
    return {
      toCwd: srcpath,
      toDst: srcpath
    }
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    exists = fs.existsSync(relativeToDst)
    if (exists) {
      return {
        toCwd: relativeToDst,
        toDst: srcpath
      }
    } else {
      exists = fs.existsSync(srcpath)
      if (!exists) throw new Error('relative srcpath does not exist')
      return {
        toCwd: srcpath,
        toDst: path.relative(dstdir, srcpath)
      }
    }
  }
}

module.exports = {
  symlinkPaths,
  symlinkPathsSync
}
'use strict'

const fs = require('graceful-fs')

function symlinkType (srcpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type
  if (type) return callback(null, type)
  fs.lstat(srcpath, (err, stats) => {
    if (err) return callback(null, 'file')
    type = (stats && stats.isDirectory()) ? 'dir' : 'file'
    callback(null, type)
  })
}

function symlinkTypeSync (srcpath, type) {
  let stats

  if (type) return type
  try {
    stats = fs.lstatSync(srcpath)
  } catch {
    return 'file'
  }
  return (stats && stats.isDirectory()) ? 'dir' : 'file'
}

module.exports = {
  symlinkType,
  symlinkTypeSync
}
'use strict'

const u = require('universalify').fromCallback
const path = require('path')
const fs = require('../fs')
const _mkdirs = require('../mkdirs')
const mkdirs = _mkdirs.mkdirs
const mkdirsSync = _mkdirs.mkdirsSync

const _symlinkPaths = require('./symlink-paths')
const symlinkPaths = _symlinkPaths.symlinkPaths
const symlinkPathsSync = _symlinkPaths.symlinkPathsSync

const _symlinkType = require('./symlink-type')
const symlinkType = _symlinkType.symlinkType
const symlinkTypeSync = _symlinkType.symlinkTypeSync

const pathExists = require('../path-exists').pathExists

const { areIdentical } = require('../util/stat')

function createSymlink (srcpath, dstpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type

  fs.lstat(dstpath, (err, stats) => {
    if (!err && stats.isSymbolicLink()) {
      Promise.all([
        fs.stat(srcpath),
        fs.stat(dstpath)
      ]).then(([srcStat, dstStat]) => {
        if (areIdentical(srcStat, dstStat)) return callback(null)
        _createSymlink(srcpath, dstpath, type, callback)
      })
    } else _createSymlink(srcpath, dstpath, type, callback)
  })
}

function _createSymlink (srcpath, dstpath, type, callback) {
  symlinkPaths(srcpath, dstpath, (err, relative) => {
    if (err) return callback(err)
    srcpath = relative.toDst
    symlinkType(relative.toCwd, type, (err, type) => {
      if (err) return callback(err)
      const dir = path.dirname(dstpath)
      pathExists(dir, (err, dirExists) => {
        if (err) return callback(err)
        if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
        mkdirs(dir, err => {
          if (err) return callback(err)
          fs.symlink(srcpath, dstpath, type, callback)
        })
      })
    })
  })
}

function createSymlinkSync (srcpath, dstpath, type) {
  let stats
  try {
    stats = fs.lstatSync(dstpath)
  } catch {}
  if (stats && stats.isSymbolicLink()) {
    const srcStat = fs.statSync(srcpath)
    const dstStat = fs.statSync(dstpath)
    if (areIdentical(srcStat, dstStat)) return
  }

  const relative = symlinkPathsSync(srcpath, dstpath)
  srcpath = relative.toDst
  type = symlinkTypeSync(relative.toCwd, type)
  const dir = path.dirname(dstpath)
  const exists = fs.existsSync(dir)
  if (exists) return fs.symlinkSync(srcpath, dstpath, type)
  mkdirsSync(dir)
  return fs.symlinkSync(srcpath, dstpath, type)
}

module.exports = {
  createSymlink: u(createSymlink),
  createSymlinkSync
}
'use strict'
// This is adapted from https://github.com/normalize/mz
// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
const u = require('universalify').fromCallback
const fs = require('graceful-fs')

const api = [
  'access',
  'appendFile',
  'chmod',
  'chown',
  'close',
  'copyFile',
  'fchmod',
  'fchown',
  'fdatasync',
  'fstat',
  'fsync',
  'ftruncate',
  'futimes',
  'lchmod',
  'lchown',
  'link',
  'lstat',
  'mkdir',
  'mkdtemp',
  'open',
  'opendir',
  'readdir',
  'readFile',
  'readlink',
  'realpath',
  'rename',
  'rm',
  'rmdir',
  'stat',
  'symlink',
  'truncate',
  'unlink',
  'utimes',
  'writeFile'
].filter(key => {
  // Some commands are not available on some systems. Ex:
  // fs.opendir was added in Node.js v12.12.0
  // fs.rm was added in Node.js v14.14.0
  // fs.lchown is not available on at least some Linux
  return typeof fs[key] === 'function'
})

// Export cloned fs:
Object.assign(exports, fs)

// Universalify async methods:
api.forEach(method => {
  exports[method] = u(fs[method])
})
exports.realpath.native = u(fs.realpath.native)

// We differ from mz/fs in that we still ship the old, broken, fs.exists()
// since we are a drop-in replacement for the native module
exports.exists = function (filename, callback) {
  if (typeof callback === 'function') {
    return fs.exists(filename, callback)
  }
  return new Promise(resolve => {
    return fs.exists(filename, resolve)
  })
}

// fs.read(), fs.write(), & fs.writev() need special treatment due to multiple callback args

exports.read = function (fd, buffer, offset, length, position, callback) {
  if (typeof callback === 'function') {
    return fs.read(fd, buffer, offset, length, position, callback)
  }
  return new Promise((resolve, reject) => {
    fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {
      if (err) return reject(err)
      resolve({ bytesRead, buffer })
    })
  })
}

// Function signature can be
// fs.write(fd, buffer[, offset[, length[, position]]], callback)
// OR
// fs.write(fd, string[, position[, encoding]], callback)
// We need to handle both cases, so we use ...args
exports.write = function (fd, buffer, ...args) {
  if (typeof args[args.length - 1] === 'function') {
    return fs.write(fd, buffer, ...args)
  }

  return new Promise((resolve, reject) => {
    fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {
      if (err) return reject(err)
      resolve({ bytesWritten, buffer })
    })
  })
}

// fs.writev only available in Node v12.9.0+
if (typeof fs.writev === 'function') {
  // Function signature is
  // s.writev(fd, buffers[, position], callback)
  // We need to handle the optional arg, so we use ...args
  exports.writev = function (fd, buffers, ...args) {
    if (typeof args[args.length - 1] === 'function') {
      return fs.writev(fd, buffers, ...args)
    }

    return new Promise((resolve, reject) => {
      fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {
        if (err) return reject(err)
        resolve({ bytesWritten, buffers })
      })
    })
  }
}
'use strict'

module.exports = {
  // Export promiseified graceful-fs:
  ...require('./fs'),
  // Export extra methods:
  ...require('./copy-sync'),
  ...require('./copy'),
  ...require('./empty'),
  ...require('./ensure'),
  ...require('./json'),
  ...require('./mkdirs'),
  ...require('./move-sync'),
  ...require('./move'),
  ...require('./output'),
  ...require('./path-exists'),
  ...require('./remove')
}
'use strict'

const u = require('universalify').fromPromise
const jsonFile = require('./jsonfile')

jsonFile.outputJson = u(require('./output-json'))
jsonFile.outputJsonSync = require('./output-json-sync')
// aliases
jsonFile.outputJSON = jsonFile.outputJson
jsonFile.outputJSONSync = jsonFile.outputJsonSync
jsonFile.writeJSON = jsonFile.writeJson
jsonFile.writeJSONSync = jsonFile.writeJsonSync
jsonFile.readJSON = jsonFile.readJson
jsonFile.readJSONSync = jsonFile.readJsonSync

module.exports = jsonFile
'use strict'

const jsonFile = require('jsonfile')

module.exports = {
  // jsonfile exports
  readJson: jsonFile.readFile,
  readJsonSync: jsonFile.readFileSync,
  writeJson: jsonFile.writeFile,
  writeJsonSync: jsonFile.writeFileSync
}
'use strict'

const { stringify } = require('jsonfile/utils')
const { outputFileSync } = require('../output')

function outputJsonSync (file, data, options) {
  const str = stringify(data, options)

  outputFileSync(file, str, options)
}

module.exports = outputJsonSync
'use strict'

const { stringify } = require('jsonfile/utils')
const { outputFile } = require('../output')

async function outputJson (file, data, options = {}) {
  const str = stringify(data, options)

  await outputFile(file, str, options)
}

module.exports = outputJson
'use strict'
const u = require('universalify').fromPromise
const { makeDir: _makeDir, makeDirSync } = require('./make-dir')
const makeDir = u(_makeDir)

module.exports = {
  mkdirs: makeDir,
  mkdirsSync: makeDirSync,
  // alias
  mkdirp: makeDir,
  mkdirpSync: makeDirSync,
  ensureDir: makeDir,
  ensureDirSync: makeDirSync
}
'use strict'
const fs = require('../fs')
const { checkPath } = require('./utils')

const getMode = options => {
  const defaults = { mode: 0o777 }
  if (typeof options === 'number') return options
  return ({ ...defaults, ...options }).mode
}

module.exports.makeDir = async (dir, options) => {
  checkPath(dir)

  return fs.mkdir(dir, {
    mode: getMode(options),
    recursive: true
  })
}

module.exports.makeDirSync = (dir, options) => {
  checkPath(dir)

  return fs.mkdirSync(dir, {
    mode: getMode(options),
    recursive: true
  })
}
// Adapted from https://github.com/sindresorhus/make-dir
// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict'
const path = require('path')

// https://github.com/nodejs/node/issues/8987
// https://github.com/libuv/libuv/pull/1088
module.exports.checkPath = function checkPath (pth) {
  if (process.platform === 'win32') {
    const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path.parse(pth).root, ''))

    if (pathHasInvalidWinCharacters) {
      const error = new Error(`Path contains invalid characters: ${pth}`)
      error.code = 'EINVAL'
      throw error
    }
  }
}
'use strict'

module.exports = {
  moveSync: require('./move-sync')
}
'use strict'

const fs = require('graceful-fs')
const path = require('path')
const copySync = require('../copy-sync').copySync
const removeSync = require('../remove').removeSync
const mkdirpSync = require('../mkdirs').mkdirpSync
const stat = require('../util/stat')

function moveSync (src, dest, opts) {
  opts = opts || {}
  const overwrite = opts.overwrite || opts.clobber || false

  const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)
  stat.checkParentPathsSync(src, srcStat, dest, 'move')
  if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))
  return doRename(src, dest, overwrite, isChangingCase)
}

function isParentRoot (dest) {
  const parent = path.dirname(dest)
  const parsedPath = path.parse(parent)
  return parsedPath.root === parent
}

function doRename (src, dest, overwrite, isChangingCase) {
  if (isChangingCase) return rename(src, dest, overwrite)
  if (overwrite) {
    removeSync(dest)
    return rename(src, dest, overwrite)
  }
  if (fs.existsSync(dest)) throw new Error('dest already exists.')
  return rename(src, dest, overwrite)
}

function rename (src, dest, overwrite) {
  try {
    fs.renameSync(src, dest)
  } catch (err) {
    if (err.code !== 'EXDEV') throw err
    return moveAcrossDevice(src, dest, overwrite)
  }
}

function moveAcrossDevice (src, dest, overwrite) {
  const opts = {
    overwrite,
    errorOnExist: true
  }
  copySync(src, dest, opts)
  return removeSync(src)
}

module.exports = moveSync
'use strict'

const u = require('universalify').fromCallback
module.exports = {
  move: u(require('./move'))
}
'use strict'

const fs = require('graceful-fs')
const path = require('path')
const copy = require('../copy').copy
const remove = require('../remove').remove
const mkdirp = require('../mkdirs').mkdirp
const pathExists = require('../path-exists').pathExists
const stat = require('../util/stat')

function move (src, dest, opts, cb) {
  if (typeof opts === 'function') {
    cb = opts
    opts = {}
  }

  const overwrite = opts.overwrite || opts.clobber || false

  stat.checkPaths(src, dest, 'move', opts, (err, stats) => {
    if (err) return cb(err)
    const { srcStat, isChangingCase = false } = stats
    stat.checkParentPaths(src, srcStat, dest, 'move', err => {
      if (err) return cb(err)
      if (isParentRoot(dest)) return doRename(src, dest, overwrite, isChangingCase, cb)
      mkdirp(path.dirname(dest), err => {
        if (err) return cb(err)
        return doRename(src, dest, overwrite, isChangingCase, cb)
      })
    })
  })
}

function isParentRoot (dest) {
  const parent = path.dirname(dest)
  const parsedPath = path.parse(parent)
  return parsedPath.root === parent
}

function doRename (src, dest, overwrite, isChangingCase, cb) {
  if (isChangingCase) return rename(src, dest, overwrite, cb)
  if (overwrite) {
    return remove(dest, err => {
      if (err) return cb(err)
      return rename(src, dest, overwrite, cb)
    })
  }
  pathExists(dest, (err, destExists) => {
    if (err) return cb(err)
    if (destExists) return cb(new Error('dest already exists.'))
    return rename(src, dest, overwrite, cb)
  })
}

function rename (src, dest, overwrite, cb) {
  fs.rename(src, dest, err => {
    if (!err) return cb()
    if (err.code !== 'EXDEV') return cb(err)
    return moveAcrossDevice(src, dest, overwrite, cb)
  })
}

function moveAcrossDevice (src, dest, overwrite, cb) {
  const opts = {
    overwrite,
    errorOnExist: true
  }
  copy(src, dest, opts, err => {
    if (err) return cb(err)
    return remove(src, cb)
  })
}

module.exports = move
'use strict'

const u = require('universalify').fromCallback
const fs = require('graceful-fs')
const path = require('path')
const mkdir = require('../mkdirs')
const pathExists = require('../path-exists').pathExists

function outputFile (file, data, encoding, callback) {
  if (typeof encoding === 'function') {
    callback = encoding
    encoding = 'utf8'
  }

  const dir = path.dirname(file)
  pathExists(dir, (err, itDoes) => {
    if (err) return callback(err)
    if (itDoes) return fs.writeFile(file, data, encoding, callback)

    mkdir.mkdirs(dir, err => {
      if (err) return callback(err)

      fs.writeFile(file, data, encoding, callback)
    })
  })
}

function outputFileSync (file, ...args) {
  const dir = path.dirname(file)
  if (fs.existsSync(dir)) {
    return fs.writeFileSync(file, ...args)
  }
  mkdir.mkdirsSync(dir)
  fs.writeFileSync(file, ...args)
}

module.exports = {
  outputFile: u(outputFile),
  outputFileSync
}
'use strict'
const u = require('universalify').fromPromise
const fs = require('../fs')

function pathExists (path) {
  return fs.access(path).then(() => true).catch(() => false)
}

module.exports = {
  pathExists: u(pathExists),
  pathExistsSync: fs.existsSync
}
'use strict'

const fs = require('graceful-fs')
const u = require('universalify').fromCallback
const rimraf = require('./rimraf')

function remove (path, callback) {
  // Node 14.14.0+
  if (fs.rm) return fs.rm(path, { recursive: true, force: true }, callback)
  rimraf(path, callback)
}

function removeSync (path) {
  // Node 14.14.0+
  if (fs.rmSync) return fs.rmSync(path, { recursive: true, force: true })
  rimraf.sync(path)
}

module.exports = {
  remove: u(remove),
  removeSync
}
'use strict'

const fs = require('graceful-fs')
const path = require('path')
const assert = require('assert')

const isWindows = (process.platform === 'win32')

function defaults (options) {
  const methods = [
    'unlink',
    'chmod',
    'stat',
    'lstat',
    'rmdir',
    'readdir'
  ]
  methods.forEach(m => {
    options[m] = options[m] || fs[m]
    m = m + 'Sync'
    options[m] = options[m] || fs[m]
  })

  options.maxBusyTries = options.maxBusyTries || 3
}

function rimraf (p, options, cb) {
  let busyTries = 0

  if (typeof options === 'function') {
    cb = options
    options = {}
  }

  assert(p, 'rimraf: missing path')
  assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
  assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')
  assert(options, 'rimraf: invalid options argument provided')
  assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')

  defaults(options)

  rimraf_(p, options, function CB (er) {
    if (er) {
      if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
          busyTries < options.maxBusyTries) {
        busyTries++
        const time = busyTries * 100
        // try again, with the same exact callback as this one.
        return setTimeout(() => rimraf_(p, options, CB), time)
      }

      // already gone
      if (er.code === 'ENOENT') er = null
    }

    cb(er)
  })
}

// Two possible strategies.
// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong.  However, there
// are likely far more normal files in the world than directories.  This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow.  But until then, YAGNI.
function rimraf_ (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  // sunos lets the root user unlink directories, which is... weird.
  // so we have to lstat here and make sure it's not a dir.
  options.lstat(p, (er, st) => {
    if (er && er.code === 'ENOENT') {
      return cb(null)
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er && er.code === 'EPERM' && isWindows) {
      return fixWinEPERM(p, options, er, cb)
    }

    if (st && st.isDirectory()) {
      return rmdir(p, options, er, cb)
    }

    options.unlink(p, er => {
      if (er) {
        if (er.code === 'ENOENT') {
          return cb(null)
        }
        if (er.code === 'EPERM') {
          return (isWindows)
            ? fixWinEPERM(p, options, er, cb)
            : rmdir(p, options, er, cb)
        }
        if (er.code === 'EISDIR') {
          return rmdir(p, options, er, cb)
        }
      }
      return cb(er)
    })
  })
}

function fixWinEPERM (p, options, er, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.chmod(p, 0o666, er2 => {
    if (er2) {
      cb(er2.code === 'ENOENT' ? null : er)
    } else {
      options.stat(p, (er3, stats) => {
        if (er3) {
          cb(er3.code === 'ENOENT' ? null : er)
        } else if (stats.isDirectory()) {
          rmdir(p, options, er, cb)
        } else {
          options.unlink(p, cb)
        }
      })
    }
  })
}

function fixWinEPERMSync (p, options, er) {
  let stats

  assert(p)
  assert(options)

  try {
    options.chmodSync(p, 0o666)
  } catch (er2) {
    if (er2.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  try {
    stats = options.statSync(p)
  } catch (er3) {
    if (er3.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  if (stats.isDirectory()) {
    rmdirSync(p, options, er)
  } else {
    options.unlinkSync(p)
  }
}

function rmdir (p, options, originalEr, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
  // if we guessed wrong, and it's not a directory, then
  // raise the original error.
  options.rmdir(p, er => {
    if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
      rmkids(p, options, cb)
    } else if (er && er.code === 'ENOTDIR') {
      cb(originalEr)
    } else {
      cb(er)
    }
  })
}

function rmkids (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.readdir(p, (er, files) => {
    if (er) return cb(er)

    let n = files.length
    let errState

    if (n === 0) return options.rmdir(p, cb)

    files.forEach(f => {
      rimraf(path.join(p, f), options, er => {
        if (errState) {
          return
        }
        if (er) return cb(errState = er)
        if (--n === 0) {
          options.rmdir(p, cb)
        }
      })
    })
  })
}

// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
  let st

  options = options || {}
  defaults(options)

  assert(p, 'rimraf: missing path')
  assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
  assert(options, 'rimraf: missing options')
  assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')

  try {
    st = options.lstatSync(p)
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er.code === 'EPERM' && isWindows) {
      fixWinEPERMSync(p, options, er)
    }
  }

  try {
    // sunos lets the root user unlink directories, which is... weird.
    if (st && st.isDirectory()) {
      rmdirSync(p, options, null)
    } else {
      options.unlinkSync(p)
    }
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    } else if (er.code === 'EPERM') {
      return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
    } else if (er.code !== 'EISDIR') {
      throw er
    }
    rmdirSync(p, options, er)
  }
}

function rmdirSync (p, options, originalEr) {
  assert(p)
  assert(options)

  try {
    options.rmdirSync(p)
  } catch (er) {
    if (er.code === 'ENOTDIR') {
      throw originalEr
    } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
      rmkidsSync(p, options)
    } else if (er.code !== 'ENOENT') {
      throw er
    }
  }
}

function rmkidsSync (p, options) {
  assert(p)
  assert(options)
  options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))

  if (isWindows) {
    // We only end up here once we got ENOTEMPTY at least once, and
    // at this point, we are guaranteed to have removed all the kids.
    // So, we know that it won't be ENOENT or ENOTDIR or anything else.
    // try really hard to delete stuff on windows, because it has a
    // PROFOUNDLY annoying habit of not closing handles promptly when
    // files are deleted, resulting in spurious ENOTEMPTY errors.
    const startTime = Date.now()
    do {
      try {
        const ret = options.rmdirSync(p, options)
        return ret
      } catch {}
    } while (Date.now() - startTime < 500) // give up after 500ms
  } else {
    const ret = options.rmdirSync(p, options)
    return ret
  }
}

module.exports = rimraf
rimraf.sync = rimrafSync
'use strict'

const fs = require('../fs')
const path = require('path')
const util = require('util')

function getStats (src, dest, opts) {
  const statFunc = opts.dereference
    ? (file) => fs.stat(file, { bigint: true })
    : (file) => fs.lstat(file, { bigint: true })
  return Promise.all([
    statFunc(src),
    statFunc(dest).catch(err => {
      if (err.code === 'ENOENT') return null
      throw err
    })
  ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))
}

function getStatsSync (src, dest, opts) {
  let destStat
  const statFunc = opts.dereference
    ? (file) => fs.statSync(file, { bigint: true })
    : (file) => fs.lstatSync(file, { bigint: true })
  const srcStat = statFunc(src)
  try {
    destStat = statFunc(dest)
  } catch (err) {
    if (err.code === 'ENOENT') return { srcStat, destStat: null }
    throw err
  }
  return { srcStat, destStat }
}

function checkPaths (src, dest, funcName, opts, cb) {
  util.callbackify(getStats)(src, dest, opts, (err, stats) => {
    if (err) return cb(err)
    const { srcStat, destStat } = stats

    if (destStat) {
      if (areIdentical(srcStat, destStat)) {
        const srcBaseName = path.basename(src)
        const destBaseName = path.basename(dest)
        if (funcName === 'move' &&
          srcBaseName !== destBaseName &&
          srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
          return cb(null, { srcStat, destStat, isChangingCase: true })
        }
        return cb(new Error('Source and destination must not be the same.'))
      }
      if (srcStat.isDirectory() && !destStat.isDirectory()) {
        return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))
      }
      if (!srcStat.isDirectory() && destStat.isDirectory()) {
        return cb(new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`))
      }
    }

    if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
      return cb(new Error(errMsg(src, dest, funcName)))
    }
    return cb(null, { srcStat, destStat })
  })
}

function checkPathsSync (src, dest, funcName, opts) {
  const { srcStat, destStat } = getStatsSync(src, dest, opts)

  if (destStat) {
    if (areIdentical(srcStat, destStat)) {
      const srcBaseName = path.basename(src)
      const destBaseName = path.basename(dest)
      if (funcName === 'move' &&
        srcBaseName !== destBaseName &&
        srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
        return { srcStat, destStat, isChangingCase: true }
      }
      throw new Error('Source and destination must not be the same.')
    }
    if (srcStat.isDirectory() && !destStat.isDirectory()) {
      throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
    }
    if (!srcStat.isDirectory() && destStat.isDirectory()) {
      throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)
    }
  }

  if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
    throw new Error(errMsg(src, dest, funcName))
  }
  return { srcStat, destStat }
}

// recursively check if dest parent is a subdirectory of src.
// It works for all file types including symlinks since it
// checks the src and dest inodes. It starts from the deepest
// parent and stops once it reaches the src parent or the root path.
function checkParentPaths (src, srcStat, dest, funcName, cb) {
  const srcParent = path.resolve(path.dirname(src))
  const destParent = path.resolve(path.dirname(dest))
  if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()
  fs.stat(destParent, { bigint: true }, (err, destStat) => {
    if (err) {
      if (err.code === 'ENOENT') return cb()
      return cb(err)
    }
    if (areIdentical(srcStat, destStat)) {
      return cb(new Error(errMsg(src, dest, funcName)))
    }
    return checkParentPaths(src, srcStat, destParent, funcName, cb)
  })
}

function checkParentPathsSync (src, srcStat, dest, funcName) {
  const srcParent = path.resolve(path.dirname(src))
  const destParent = path.resolve(path.dirname(dest))
  if (destParent === srcParent || destParent === path.parse(destParent).root) return
  let destStat
  try {
    destStat = fs.statSync(destParent, { bigint: true })
  } catch (err) {
    if (err.code === 'ENOENT') return
    throw err
  }
  if (areIdentical(srcStat, destStat)) {
    throw new Error(errMsg(src, dest, funcName))
  }
  return checkParentPathsSync(src, srcStat, destParent, funcName)
}

function areIdentical (srcStat, destStat) {
  return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev
}

// return true if dest is a subdir of src, otherwise false.
// It only checks the path strings.
function isSrcSubdir (src, dest) {
  const srcArr = path.resolve(src).split(path.sep).filter(i => i)
  const destArr = path.resolve(dest).split(path.sep).filter(i => i)
  return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)
}

function errMsg (src, dest, funcName) {
  return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`
}

module.exports = {
  checkPaths,
  checkPathsSync,
  checkParentPaths,
  checkParentPathsSync,
  isSrcSubdir,
  areIdentical
}
'use strict'

const fs = require('graceful-fs')

function utimesMillis (path, atime, mtime, callback) {
  // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
  fs.open(path, 'r+', (err, fd) => {
    if (err) return callback(err)
    fs.futimes(fd, atime, mtime, futimesErr => {
      fs.close(fd, closeErr => {
        if (callback) callback(futimesErr || closeErr)
      })
    })
  })
}

function utimesMillisSync (path, atime, mtime) {
  const fd = fs.openSync(path, 'r+')
  fs.futimesSync(fd, atime, mtime)
  return fs.closeSync(fd)
}

module.exports = {
  utimesMillis,
  utimesMillisSync
}
(The MIT License)

Copyright (c) 2011-2017 JP Richardson

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
 merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "fs-extra",
  "version": "10.0.0",
  "description": "fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as recursive mkdir, copy, and remove.",
  "engines": {
    "node": ">=12"
  },
  "homepage": "https://github.com/jprichardson/node-fs-extra",
  "repository": {
    "type": "git",
    "url": "https://github.com/jprichardson/node-fs-extra"
  },
  "author": "JP Richardson <jprichardson@gmail.com>",
  "license": "MIT",
  "dependencies": {
    "graceful-fs": "^4.2.0",
    "jsonfile": "^6.0.1",
    "universalify": "^2.0.0"
  },
  "devDependencies": {
    "at-least-node": "^1.0.0",
    "coveralls": "^3.0.0",
    "klaw": "^2.1.1",
    "klaw-sync": "^3.0.2",
    "minimist": "^1.1.1",
    "mocha": "^5.0.5",
    "nyc": "^15.0.0",
    "proxyquire": "^2.0.1",
    "read-dir-files": "^0.1.1",
    "standard": "^14.1.0"
  },
  "main": "./lib/index.js",
  "files": [
    "lib/",
    "!lib/**/__tests__/"
  ]
}"use strict";
// Call this function in a another function to find out the file from
// which that function was called from. (Inspects the v8 stack trace)
//
// Inspired by http://stackoverflow.com/questions/13227489
module.exports = function getCallerFile(position) {
    if (position === void 0) { position = 2; }
    if (position >= Error.stackTraceLimit) {
        throw new TypeError('getCallerFile(position) requires position be less then Error.stackTraceLimit but position was: `' + position + '` and Error.stackTraceLimit was: `' + Error.stackTraceLimit + '`');
    }
    var oldPrepareStackTrace = Error.prepareStackTrace;
    Error.prepareStackTrace = function (_, stack) { return stack; };
    var stack = new Error().stack;
    Error.prepareStackTrace = oldPrepareStackTrace;
    if (stack !== null && typeof stack === 'object') {
        // stack[0] holds this file
        // stack[1] holds where this function was called
        // stack[2] holds the file we're interested in
        return stack[position] ? stack[position].getFileName() : undefined;
    }
};
//# sourceMappingURL=index.js.map{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,qEAAqE;AACrE,EAAE;AACF,0DAA0D;AAE1D,iBAAS,SAAS,aAAa,CAAC,QAAY;IAAZ,yBAAA,EAAA,YAAY;IAC1C,IAAI,QAAQ,IAAI,KAAK,CAAC,eAAe,EAAE;QACrC,MAAM,IAAI,SAAS,CAAC,kGAAkG,GAAG,QAAQ,GAAG,oCAAoC,GAAG,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;KACzM;IAED,IAAM,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IACrD,KAAK,CAAC,iBAAiB,GAAG,UAAC,CAAC,EAAE,KAAK,IAAM,OAAA,KAAK,EAAL,CAAK,CAAC;IAC/C,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAChC,KAAK,CAAC,iBAAiB,GAAG,oBAAoB,CAAC;IAG/C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC/C,2BAA2B;QAC3B,gDAAgD;QAChD,8CAA8C;QAC9C,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,QAAQ,CAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KAC7E;AACH,CAAC,CAAC"}ISC License (ISC)
Copyright 2018 Stefan Penner

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "get-caller-file",
  "version": "2.0.5",
  "description": "",
  "main": "index.js",
  "directories": {
    "test": "tests"
  },
  "files": [
    "index.js",
    "index.js.map",
    "index.d.ts"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/stefanpenner/get-caller-file.git"
  },
  "author": "Stefan Penner",
  "license": "ISC",
  "homepage": "https://github.com/stefanpenner/get-caller-file#readme",
  "devDependencies": {
    "@types/chai": "^4.1.7",
    "@types/ensure-posix-path": "^1.0.0",
    "@types/mocha": "^5.2.6",
    "@types/node": "^11.10.5",
    "chai": "^4.1.2",
    "ensure-posix-path": "^1.0.1",
    "mocha": "^5.2.0",
    "typescript": "^3.3.3333"
  },
  "engines": {
    "node": "6.* || 8.* || >= 10.*"
  }
}'use strict';
const net = require('net');

class Locked extends Error {
	constructor(port) {
		super(`${port} is locked`);
	}
}

const lockedPorts = {
	old: new Set(),
	young: new Set()
};

// On this interval, the old locked ports are discarded,
// the young locked ports are moved to old locked ports,
// and a new young set for locked ports are created.
const releaseOldLockedPortsIntervalMs = 1000 * 15;

// Lazily create interval on first use
let interval;

const getAvailablePort = options => new Promise((resolve, reject) => {
	const server = net.createServer();
	server.unref();
	server.on('error', reject);
	server.listen(options, () => {
		const {port} = server.address();
		server.close(() => {
			resolve(port);
		});
	});
});

const portCheckSequence = function * (ports) {
	if (ports) {
		yield * ports;
	}

	yield 0; // Fall back to 0 if anything else failed
};

module.exports = async options => {
	let ports;

	if (options) {
		ports = typeof options.port === 'number' ? [options.port] : options.port;
	}

	if (interval === undefined) {
		interval = setInterval(() => {
			lockedPorts.old = lockedPorts.young;
			lockedPorts.young = new Set();
		}, releaseOldLockedPortsIntervalMs);

		// Does not exist in some environments (Electron, Jest jsdom env, browser, etc).
		if (interval.unref) {
			interval.unref();
		}
	}

	for (const port of portCheckSequence(ports)) {
		try {
			let availablePort = await getAvailablePort({...options, port}); // eslint-disable-line no-await-in-loop
			while (lockedPorts.old.has(availablePort) || lockedPorts.young.has(availablePort)) {
				if (port !== 0) {
					throw new Locked(port);
				}

				availablePort = await getAvailablePort({...options, port}); // eslint-disable-line no-await-in-loop
			}

			lockedPorts.young.add(availablePort);
			return availablePort;
		} catch (error) {
			if (!['EADDRINUSE', 'EACCES'].includes(error.code) && !(error instanceof Locked)) {
				throw error;
			}
		}
	}

	throw new Error('No available ports found');
};

module.exports.makeRange = (from, to) => {
	if (!Number.isInteger(from) || !Number.isInteger(to)) {
		throw new TypeError('`from` and `to` must be integer numbers');
	}

	if (from < 1024 || from > 65535) {
		throw new RangeError('`from` must be between 1024 and 65535');
	}

	if (to < 1024 || to > 65536) {
		throw new RangeError('`to` must be between 1024 and 65536');
	}

	if (to < from) {
		throw new RangeError('`to` must be greater than or equal to `from`');
	}

	const generator = function * (from, to) {
		for (let port = from; port <= to; port++) {
			yield port;
		}
	};

	return generator(from, to);
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "get-port",
  "version": "5.1.1",
  "description": "Get an available port",
  "license": "MIT",
  "repository": "sindresorhus/get-port",
  "funding": "https://github.com/sponsors/sindresorhus",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=8"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "devDependencies": {
    "@types/node": "^12.12.21",
    "ava": "^2.4.0",
    "tsd": "^0.11.0",
    "xo": "^0.25.3"
  }
}MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"use strict";
/// <reference lib="es2016"/>
/// <reference lib="es2017.sharedmemory"/>
/// <reference lib="esnext.asynciterable"/>
/// <reference lib="dom"/>
Object.defineProperty(exports, "__esModule", { value: true });
// TODO: Use the `URL` global when targeting Node.js 10
// tslint:disable-next-line
const URLGlobal = typeof URL === 'undefined' ? require('url').URL : URL;
const toString = Object.prototype.toString;
const isOfType = (type) => (value) => typeof value === type;
const isBuffer = (input) => !is.nullOrUndefined(input) && !is.nullOrUndefined(input.constructor) && is.function_(input.constructor.isBuffer) && input.constructor.isBuffer(input);
const getObjectType = (value) => {
    const objectName = toString.call(value).slice(8, -1);
    if (objectName) {
        return objectName;
    }
    return null;
};
const isObjectOfType = (type) => (value) => getObjectType(value) === type;
function is(value) {
    switch (value) {
        case null:
            return "null" /* null */;
        case true:
        case false:
            return "boolean" /* boolean */;
        default:
    }
    switch (typeof value) {
        case 'undefined':
            return "undefined" /* undefined */;
        case 'string':
            return "string" /* string */;
        case 'number':
            return "number" /* number */;
        case 'symbol':
            return "symbol" /* symbol */;
        default:
    }
    if (is.function_(value)) {
        return "Function" /* Function */;
    }
    if (is.observable(value)) {
        return "Observable" /* Observable */;
    }
    if (Array.isArray(value)) {
        return "Array" /* Array */;
    }
    if (isBuffer(value)) {
        return "Buffer" /* Buffer */;
    }
    const tagType = getObjectType(value);
    if (tagType) {
        return tagType;
    }
    if (value instanceof String || value instanceof Boolean || value instanceof Number) {
        throw new TypeError('Please don\'t use object wrappers for primitive types');
    }
    return "Object" /* Object */;
}
(function (is) {
    // tslint:disable-next-line:strict-type-predicates
    const isObject = (value) => typeof value === 'object';
    // tslint:disable:variable-name
    is.undefined = isOfType('undefined');
    is.string = isOfType('string');
    is.number = isOfType('number');
    is.function_ = isOfType('function');
    // tslint:disable-next-line:strict-type-predicates
    is.null_ = (value) => value === null;
    is.class_ = (value) => is.function_(value) && value.toString().startsWith('class ');
    is.boolean = (value) => value === true || value === false;
    is.symbol = isOfType('symbol');
    // tslint:enable:variable-name
    is.numericString = (value) => is.string(value) && value.length > 0 && !Number.isNaN(Number(value));
    is.array = Array.isArray;
    is.buffer = isBuffer;
    is.nullOrUndefined = (value) => is.null_(value) || is.undefined(value);
    is.object = (value) => !is.nullOrUndefined(value) && (is.function_(value) || isObject(value));
    is.iterable = (value) => !is.nullOrUndefined(value) && is.function_(value[Symbol.iterator]);
    is.asyncIterable = (value) => !is.nullOrUndefined(value) && is.function_(value[Symbol.asyncIterator]);
    is.generator = (value) => is.iterable(value) && is.function_(value.next) && is.function_(value.throw);
    is.nativePromise = (value) => isObjectOfType("Promise" /* Promise */)(value);
    const hasPromiseAPI = (value) => !is.null_(value) &&
        isObject(value) &&
        is.function_(value.then) &&
        is.function_(value.catch);
    is.promise = (value) => is.nativePromise(value) || hasPromiseAPI(value);
    is.generatorFunction = isObjectOfType("GeneratorFunction" /* GeneratorFunction */);
    is.asyncFunction = isObjectOfType("AsyncFunction" /* AsyncFunction */);
    is.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype');
    is.regExp = isObjectOfType("RegExp" /* RegExp */);
    is.date = isObjectOfType("Date" /* Date */);
    is.error = isObjectOfType("Error" /* Error */);
    is.map = (value) => isObjectOfType("Map" /* Map */)(value);
    is.set = (value) => isObjectOfType("Set" /* Set */)(value);
    is.weakMap = (value) => isObjectOfType("WeakMap" /* WeakMap */)(value);
    is.weakSet = (value) => isObjectOfType("WeakSet" /* WeakSet */)(value);
    is.int8Array = isObjectOfType("Int8Array" /* Int8Array */);
    is.uint8Array = isObjectOfType("Uint8Array" /* Uint8Array */);
    is.uint8ClampedArray = isObjectOfType("Uint8ClampedArray" /* Uint8ClampedArray */);
    is.int16Array = isObjectOfType("Int16Array" /* Int16Array */);
    is.uint16Array = isObjectOfType("Uint16Array" /* Uint16Array */);
    is.int32Array = isObjectOfType("Int32Array" /* Int32Array */);
    is.uint32Array = isObjectOfType("Uint32Array" /* Uint32Array */);
    is.float32Array = isObjectOfType("Float32Array" /* Float32Array */);
    is.float64Array = isObjectOfType("Float64Array" /* Float64Array */);
    is.arrayBuffer = isObjectOfType("ArrayBuffer" /* ArrayBuffer */);
    is.sharedArrayBuffer = isObjectOfType("SharedArrayBuffer" /* SharedArrayBuffer */);
    is.dataView = isObjectOfType("DataView" /* DataView */);
    is.directInstanceOf = (instance, klass) => Object.getPrototypeOf(instance) === klass.prototype;
    is.urlInstance = (value) => isObjectOfType("URL" /* URL */)(value);
    is.urlString = (value) => {
        if (!is.string(value)) {
            return false;
        }
        try {
            new URLGlobal(value); // tslint:disable-line no-unused-expression
            return true;
        }
        catch (_a) {
            return false;
        }
    };
    is.truthy = (value) => Boolean(value);
    is.falsy = (value) => !value;
    is.nan = (value) => Number.isNaN(value);
    const primitiveTypes = new Set([
        'undefined',
        'string',
        'number',
        'boolean',
        'symbol'
    ]);
    is.primitive = (value) => is.null_(value) || primitiveTypes.has(typeof value);
    is.integer = (value) => Number.isInteger(value);
    is.safeInteger = (value) => Number.isSafeInteger(value);
    is.plainObject = (value) => {
        // From: https://github.com/sindresorhus/is-plain-obj/blob/master/index.js
        let prototype;
        return getObjectType(value) === "Object" /* Object */ &&
            (prototype = Object.getPrototypeOf(value), prototype === null || // tslint:disable-line:ban-comma-operator
                prototype === Object.getPrototypeOf({}));
    };
    const typedArrayTypes = new Set([
        "Int8Array" /* Int8Array */,
        "Uint8Array" /* Uint8Array */,
        "Uint8ClampedArray" /* Uint8ClampedArray */,
        "Int16Array" /* Int16Array */,
        "Uint16Array" /* Uint16Array */,
        "Int32Array" /* Int32Array */,
        "Uint32Array" /* Uint32Array */,
        "Float32Array" /* Float32Array */,
        "Float64Array" /* Float64Array */
    ]);
    is.typedArray = (value) => {
        const objectType = getObjectType(value);
        if (objectType === null) {
            return false;
        }
        return typedArrayTypes.has(objectType);
    };
    const isValidLength = (value) => is.safeInteger(value) && value > -1;
    is.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length);
    is.inRange = (value, range) => {
        if (is.number(range)) {
            return value >= Math.min(0, range) && value <= Math.max(range, 0);
        }
        if (is.array(range) && range.length === 2) {
            return value >= Math.min(...range) && value <= Math.max(...range);
        }
        throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);
    };
    const NODE_TYPE_ELEMENT = 1;
    const DOM_PROPERTIES_TO_CHECK = [
        'innerHTML',
        'ownerDocument',
        'style',
        'attributes',
        'nodeValue'
    ];
    is.domElement = (value) => is.object(value) && value.nodeType === NODE_TYPE_ELEMENT && is.string(value.nodeName) &&
        !is.plainObject(value) && DOM_PROPERTIES_TO_CHECK.every(property => property in value);
    is.observable = (value) => {
        if (!value) {
            return false;
        }
        if (value[Symbol.observable] && value === value[Symbol.observable]()) {
            return true;
        }
        if (value['@@observable'] && value === value['@@observable']()) {
            return true;
        }
        return false;
    };
    is.nodeStream = (value) => !is.nullOrUndefined(value) && isObject(value) && is.function_(value.pipe) && !is.observable(value);
    is.infinite = (value) => value === Infinity || value === -Infinity;
    const isAbsoluteMod2 = (rem) => (value) => is.integer(value) && Math.abs(value % 2) === rem;
    is.even = isAbsoluteMod2(0);
    is.odd = isAbsoluteMod2(1);
    const isWhiteSpaceString = (value) => is.string(value) && /\S/.test(value) === false;
    is.emptyArray = (value) => is.array(value) && value.length === 0;
    is.nonEmptyArray = (value) => is.array(value) && value.length > 0;
    is.emptyString = (value) => is.string(value) && value.length === 0;
    is.nonEmptyString = (value) => is.string(value) && value.length > 0;
    is.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value);
    is.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0;
    is.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0;
    is.emptySet = (value) => is.set(value) && value.size === 0;
    is.nonEmptySet = (value) => is.set(value) && value.size > 0;
    is.emptyMap = (value) => is.map(value) && value.size === 0;
    is.nonEmptyMap = (value) => is.map(value) && value.size > 0;
    const predicateOnArray = (method, predicate, values) => {
        if (is.function_(predicate) === false) {
            throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);
        }
        if (values.length === 0) {
            throw new TypeError('Invalid number of values');
        }
        return method.call(values, predicate);
    };
    // tslint:disable variable-name
    is.any = (predicate, ...values) => predicateOnArray(Array.prototype.some, predicate, values);
    is.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values);
    // tslint:enable variable-name
})(is || (is = {}));
// Some few keywords are reserved, but we'll populate them for Node.js users
// See https://github.com/Microsoft/TypeScript/issues/2536
Object.defineProperties(is, {
    class: {
        value: is.class_
    },
    function: {
        value: is.function_
    },
    null: {
        value: is.null_
    }
});
exports.default = is;
// For CommonJS default export support
module.exports = is;
module.exports.default = is;
//# sourceMappingURL=index.js.map{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,0CAA0C;AAC1C,2CAA2C;AAC3C,0BAA0B;;AAE1B,uDAAuD;AACvD,2BAA2B;AAC3B,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAqDxE,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC3C,MAAM,QAAQ,GAAG,CAAI,IAAY,EAAE,EAAE,CAAC,CAAC,KAAc,EAAc,EAAE,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC;AAC5F,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAE,KAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,SAAS,CAAE,KAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAK,KAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEhP,MAAM,aAAa,GAAG,CAAC,KAAc,EAAmB,EAAE;IACzD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI,UAAU,EAAE;QACf,OAAO,UAAsB,CAAC;KAC9B;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAI,IAAc,EAAE,EAAE,CAAC,CAAC,KAAc,EAAc,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAE5G,SAAS,EAAE,CAAC,KAAc;IACzB,QAAQ,KAAK,EAAE;QACd,KAAK,IAAI;YACR,yBAAqB;QACtB,KAAK,IAAI,CAAC;QACV,KAAK,KAAK;YACT,+BAAwB;QACzB,QAAQ;KACR;IAED,QAAQ,OAAO,KAAK,EAAE;QACrB,KAAK,WAAW;YACf,mCAA0B;QAC3B,KAAK,QAAQ;YACZ,6BAAuB;QACxB,KAAK,QAAQ;YACZ,6BAAuB;QACxB,KAAK,QAAQ;YACZ,6BAAuB;QACxB,QAAQ;KACR;IAED,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QACxB,iCAAyB;KACzB;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACzB,qCAA2B;KAC3B;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACzB,2BAAsB;KACtB;IAED,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;QACpB,6BAAuB;KACvB;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,OAAO,EAAE;QACZ,OAAO,OAAO,CAAC;KACf;IAED,IAAI,KAAK,YAAY,MAAM,IAAI,KAAK,YAAY,OAAO,IAAI,KAAK,YAAY,MAAM,EAAE;QACnF,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;KAC7E;IAED,6BAAuB;AACxB,CAAC;AAED,WAAU,EAAE;IACX,kDAAkD;IAClD,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;IAEhF,+BAA+B;IAClB,YAAS,GAAG,QAAQ,CAAY,WAAW,CAAC,CAAC;IAC7C,SAAM,GAAG,QAAQ,CAAS,QAAQ,CAAC,CAAC;IACpC,SAAM,GAAG,QAAQ,CAAS,QAAQ,CAAC,CAAC;IACpC,YAAS,GAAG,QAAQ,CAAW,UAAU,CAAC,CAAC;IACxD,kDAAkD;IACrC,QAAK,GAAG,CAAC,KAAc,EAAiB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;IAC1D,SAAM,GAAG,CAAC,KAAc,EAAkB,EAAE,CAAC,GAAA,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvG,UAAO,GAAG,CAAC,KAAc,EAAoB,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC;IAClF,SAAM,GAAG,QAAQ,CAAS,QAAQ,CAAC,CAAC;IACjD,8BAA8B;IAEjB,gBAAa,GAAG,CAAC,KAAc,EAAW,EAAE,CACxD,GAAA,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtD,QAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IACtB,SAAM,GAAG,QAAQ,CAAC;IAElB,kBAAe,GAAG,CAAC,KAAc,EAA6B,EAAE,CAAC,GAAA,KAAK,CAAC,KAAK,CAAC,IAAI,GAAA,SAAS,CAAC,KAAK,CAAC,CAAC;IAClG,SAAM,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,CAAC,GAAA,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAA,SAAS,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/G,WAAQ,GAAG,CAAC,KAAc,EAAsC,EAAE,CAAC,CAAC,GAAA,eAAe,CAAC,KAAK,CAAC,IAAI,GAAA,SAAS,CAAE,KAAmC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/J,gBAAa,GAAG,CAAC,KAAc,EAA2C,EAAE,CAAC,CAAC,GAAA,eAAe,CAAC,KAAK,CAAC,IAAI,GAAA,SAAS,CAAE,KAAwC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACnL,YAAS,GAAG,CAAC,KAAc,EAAsB,EAAE,CAAC,GAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAA,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAA,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEvH,gBAAa,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC1E,cAAc,yBAAoC,CAAC,KAAK,CAAC,CAAC;IAE3D,MAAM,aAAa,GAAG,CAAC,KAAc,EAA6B,EAAE,CACnE,CAAC,GAAA,KAAK,CAAC,KAAK,CAAC;QACb,QAAQ,CAAC,KAAK,CAAY;QAC1B,GAAA,SAAS,CAAE,KAA0B,CAAC,IAAI,CAAC;QAC3C,GAAA,SAAS,CAAE,KAA0B,CAAC,KAAK,CAAC,CAAC;IAEjC,UAAO,GAAG,CAAC,KAAc,EAA6B,EAAE,CAAC,GAAA,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IAEtG,oBAAiB,GAAG,cAAc,6CAA+C,CAAC;IAClF,gBAAa,GAAG,cAAc,qCAAkC,CAAC;IACjE,gBAAa,GAAG,CAAC,KAAc,EAAqB,EAAE,CAAC,GAAA,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAE9G,SAAM,GAAG,cAAc,uBAAyB,CAAC;IACjD,OAAI,GAAG,cAAc,mBAAqB,CAAC;IAC3C,QAAK,GAAG,cAAc,qBAAuB,CAAC;IAC9C,MAAG,GAAG,CAAC,KAAc,EAAkC,EAAE,CAAC,cAAc,iBAAqC,CAAC,KAAK,CAAC,CAAC;IACrH,MAAG,GAAG,CAAC,KAAc,EAAyB,EAAE,CAAC,cAAc,iBAA4B,CAAC,KAAK,CAAC,CAAC;IACnG,UAAO,GAAG,CAAC,KAAc,EAAqC,EAAE,CAAC,cAAc,yBAA4C,CAAC,KAAK,CAAC,CAAC;IACnI,UAAO,GAAG,CAAC,KAAc,EAA4B,EAAE,CAAC,cAAc,yBAAmC,CAAC,KAAK,CAAC,CAAC;IAEjH,YAAS,GAAG,cAAc,6BAA+B,CAAC;IAC1D,aAAU,GAAG,cAAc,+BAAiC,CAAC;IAC7D,oBAAiB,GAAG,cAAc,6CAA+C,CAAC;IAClF,aAAU,GAAG,cAAc,+BAAiC,CAAC;IAC7D,cAAW,GAAG,cAAc,iCAAmC,CAAC;IAChE,aAAU,GAAG,cAAc,+BAAiC,CAAC;IAC7D,cAAW,GAAG,cAAc,iCAAmC,CAAC;IAChE,eAAY,GAAG,cAAc,mCAAqC,CAAC;IACnE,eAAY,GAAG,cAAc,mCAAqC,CAAC;IAEnE,cAAW,GAAG,cAAc,iCAAmC,CAAC;IAChE,oBAAiB,GAAG,cAAc,6CAA+C,CAAC;IAClF,WAAQ,GAAG,cAAc,2BAA6B,CAAC;IAEvD,mBAAgB,GAAG,CAAI,QAAiB,EAAE,KAAe,EAAiB,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACjI,cAAW,GAAG,CAAC,KAAc,EAAgB,EAAE,CAAC,cAAc,iBAAmB,CAAC,KAAK,CAAC,CAAC;IAEzF,YAAS,GAAG,CAAC,KAAc,EAAE,EAAE;QAC3C,IAAI,CAAC,GAAA,MAAM,CAAC,KAAK,CAAC,EAAE;YACnB,OAAO,KAAK,CAAC;SACb;QAED,IAAI;YACH,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,2CAA2C;YACjE,OAAO,IAAI,CAAC;SACZ;QAAC,WAAM;YACP,OAAO,KAAK,CAAC;SACb;IACF,CAAC,CAAC;IAEW,SAAM,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,QAAK,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;IAEnC,MAAG,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;IAErE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;QAC9B,WAAW;QACX,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,QAAQ;KACR,CAAC,CAAC;IAEU,YAAS,GAAG,CAAC,KAAc,EAAsB,EAAE,CAAC,GAAA,KAAK,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC;IAErG,UAAO,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAe,CAAC,CAAC;IACjF,cAAW,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAe,CAAC,CAAC;IAEzF,cAAW,GAAG,CAAC,KAAc,EAAE,EAAE;QAC7C,0EAA0E;QAC1E,IAAI,SAAS,CAAC;QAEd,OAAO,aAAa,CAAC,KAAK,CAAC,0BAAoB;YAC9C,CAAC,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,IAAI,yCAAyC;gBACzG,SAAS,KAAK,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;;;;;;;;;;KAU/B,CAAC,CAAC;IACU,aAAU,GAAG,CAAC,KAAc,EAAuB,EAAE;QACjE,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,UAAU,KAAK,IAAI,EAAE;YACxB,OAAO,KAAK,CAAC;SACb;QAED,OAAO,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9D,YAAS,GAAG,CAAC,KAAc,EAAsB,EAAE,CAAC,CAAC,GAAA,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAA,SAAS,CAAC,KAAK,CAAC,IAAI,aAAa,CAAE,KAAmB,CAAC,MAAM,CAAC,CAAC;IAE/I,UAAO,GAAG,CAAC,KAAa,EAAE,KAAwB,EAAE,EAAE;QAClE,IAAI,GAAA,MAAM,CAAC,KAAK,CAAC,EAAE;YAClB,OAAO,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAClE;QAED,IAAI,GAAA,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACvC,OAAO,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;SAClE;QAED,MAAM,IAAI,SAAS,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC;IAC5B,MAAM,uBAAuB,GAAG;QAC/B,WAAW;QACX,eAAe;QACf,OAAO;QACP,YAAY;QACZ,WAAW;KACX,CAAC;IAEW,aAAU,GAAG,CAAC,KAAc,EAAuB,EAAE,CAAC,GAAA,MAAM,CAAC,KAAK,CAAC,IAAK,KAAoB,CAAC,QAAQ,KAAK,iBAAiB,IAAI,GAAA,MAAM,CAAE,KAAoB,CAAC,QAAQ,CAAC;QACjL,CAAC,GAAA,WAAW,CAAC,KAAK,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,IAAK,KAAoB,CAAC,CAAC;IAExF,aAAU,GAAG,CAAC,KAAc,EAAE,EAAE;QAC5C,IAAI,CAAC,KAAK,EAAE;YACX,OAAO,KAAK,CAAC;SACb;QAED,IAAK,KAAa,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,KAAM,KAAa,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE;YACvF,OAAO,IAAI,CAAC;SACZ;QAED,IAAK,KAAa,CAAC,cAAc,CAAC,IAAI,KAAK,KAAM,KAAa,CAAC,cAAc,CAAC,EAAE,EAAE;YACjF,OAAO,IAAI,CAAC;SACZ;QAED,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;IAEW,aAAU,GAAG,CAAC,KAAc,EAAuB,EAAE,CAAC,CAAC,GAAA,eAAe,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAY,IAAI,GAAA,SAAS,CAAE,KAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAA,UAAU,CAAC,KAAK,CAAC,CAAC;IAE3K,WAAQ,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC;IAEtF,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,GAAA,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IAC5F,OAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACzB,MAAG,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAErC,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IAE9E,aAAU,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACpE,gBAAa,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAErE,cAAW,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACtE,iBAAc,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACvE,0BAAuB,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,WAAW,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAE9F,cAAW,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAA,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACjH,iBAAc,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAA,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAElH,WAAQ,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;IAC9D,cAAW,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IAE/D,WAAQ,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;IAC9D,cAAW,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,GAAA,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IAG5E,MAAM,gBAAgB,GAAG,CAAC,MAAmB,EAAE,SAAkB,EAAE,MAAiB,EAAE,EAAE;QACvF,IAAI,GAAA,SAAS,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE;YACnC,MAAM,IAAI,SAAS,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;SACvE;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;SAChD;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAgB,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,+BAA+B;IAClB,MAAG,GAAG,CAAC,SAAkB,EAAE,GAAG,MAAiB,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9G,MAAG,GAAG,CAAC,SAAkB,EAAE,GAAG,MAAiB,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5H,8BAA8B;AAC/B,CAAC,EAvNS,EAAE,KAAF,EAAE,QAuNX;AAED,4EAA4E;AAC5E,0DAA0D;AAC1D,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE;IAC3B,KAAK,EAAE;QACN,KAAK,EAAE,EAAE,CAAC,MAAM;KAChB;IACD,QAAQ,EAAE;QACT,KAAK,EAAE,EAAE,CAAC,SAAS;KACnB;IACD,IAAI,EAAE;QACL,KAAK,EAAE,EAAE,CAAC,KAAK;KACf;CACD,CAAC,CAAC;AAEH,kBAAe,EAAE,CAAC;AAElB,sCAAsC;AACtC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;AACpB,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC"}MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "@sindresorhus/is",
  "version": "0.14.0",
  "description": "Type check values: `is.string('ðŸ¦„') //=> true`",
  "license": "MIT",
  "repository": "sindresorhus/is",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "main": "dist/index.js",
  "engines": {
    "node": ">=6"
  },
  "files": [
    "dist"
  ],
  "devDependencies": {
    "@sindresorhus/tsconfig": "^0.1.0",
    "@types/jsdom": "^11.12.0",
    "@types/node": "^10.12.10",
    "@types/tempy": "^0.2.0",
    "@types/zen-observable": "^0.8.0",
    "ava": "^0.25.0",
    "del-cli": "^1.1.0",
    "jsdom": "^11.6.2",
    "rxjs": "^6.3.3",
    "tempy": "^0.2.1",
    "tslint": "^5.9.1",
    "tslint-xo": "^0.10.0",
    "typescript": "^3.2.1",
    "zen-observable": "^0.8.8"
  },
  "types": "dist/index.d.ts"
}MIT License

Copyright (c) 2018 Szymon Marczak

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "@szmarczak/http-timer",
  "version": "1.1.2",
  "description": "Timings for HTTP requests",
  "main": "source",
  "engines": {
    "node": ">=6"
  },
  "files": [
    "source"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/szmarczak/http-timer.git"
  },
  "author": "Szymon Marczak",
  "license": "MIT",
  "homepage": "https://github.com/szmarczak/http-timer#readme",
  "devDependencies": {
    "ava": "^0.25.0",
    "coveralls": "^3.0.2",
    "p-event": "^2.1.0",
    "nyc": "^12.0.2",
    "xo": "^0.22.0"
  },
  "dependencies": {
    "defer-to-connect": "^1.0.1"
  }
}'use strict';
const deferToConnect = require('defer-to-connect');

module.exports = request => {
	const timings = {
		start: Date.now(),
		socket: null,
		lookup: null,
		connect: null,
		upload: null,
		response: null,
		end: null,
		error: null,
		phases: {
			wait: null,
			dns: null,
			tcp: null,
			request: null,
			firstByte: null,
			download: null,
			total: null
		}
	};

	const handleError = origin => {
		const emit = origin.emit.bind(origin);
		origin.emit = (event, ...args) => {
			// Catches the `error` event
			if (event === 'error') {
				timings.error = Date.now();
				timings.phases.total = timings.error - timings.start;

				origin.emit = emit;
			}

			// Saves the original behavior
			return emit(event, ...args);
		};
	};

	let uploadFinished = false;
	const onUpload = () => {
		timings.upload = Date.now();
		timings.phases.request = timings.upload - timings.connect;
	};

	handleError(request);

	request.once('socket', socket => {
		timings.socket = Date.now();
		timings.phases.wait = timings.socket - timings.start;

		const lookupListener = () => {
			timings.lookup = Date.now();
			timings.phases.dns = timings.lookup - timings.socket;
		};

		socket.once('lookup', lookupListener);

		deferToConnect(socket, () => {
			timings.connect = Date.now();

			if (timings.lookup === null) {
				socket.removeListener('lookup', lookupListener);
				timings.lookup = timings.connect;
				timings.phases.dns = timings.lookup - timings.socket;
			}

			timings.phases.tcp = timings.connect - timings.lookup;

			if (uploadFinished && !timings.upload) {
				onUpload();
			}
		});
	});

	request.once('finish', () => {
		uploadFinished = true;

		if (timings.connect) {
			onUpload();
		}
	});

	request.once('response', response => {
		timings.response = Date.now();
		timings.phases.firstByte = timings.response - timings.upload;

		handleError(response);

		response.once('end', () => {
			timings.end = Date.now();
			timings.phases.download = timings.end - timings.response;
			timings.phases.total = timings.end - timings.start;
		});
	});

	return timings;
};
MIT License

Copyright (c) 2017 Luke Childs

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
'use strict';
const {PassThrough: PassThroughStream} = require('stream');

module.exports = options => {
	options = {...options};

	const {array} = options;
	let {encoding} = options;
	const isBuffer = encoding === 'buffer';
	let objectMode = false;

	if (array) {
		objectMode = !(encoding || isBuffer);
	} else {
		encoding = encoding || 'utf8';
	}

	if (isBuffer) {
		encoding = null;
	}

	const stream = new PassThroughStream({objectMode});

	if (encoding) {
		stream.setEncoding(encoding);
	}

	let length = 0;
	const chunks = [];

	stream.on('data', chunk => {
		chunks.push(chunk);

		if (objectMode) {
			length = chunks.length;
		} else {
			length += chunk.length;
		}
	});

	stream.getBufferedValue = () => {
		if (array) {
			return chunks;
		}

		return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
	};

	stream.getBufferedLength = () => length;

	return stream;
};
'use strict';
const {constants: BufferConstants} = require('buffer');
const pump = require('pump');
const bufferStream = require('./buffer-stream');

class MaxBufferError extends Error {
	constructor() {
		super('maxBuffer exceeded');
		this.name = 'MaxBufferError';
	}
}

async function getStream(inputStream, options) {
	if (!inputStream) {
		return Promise.reject(new Error('Expected a stream'));
	}

	options = {
		maxBuffer: Infinity,
		...options
	};

	const {maxBuffer} = options;

	let stream;
	await new Promise((resolve, reject) => {
		const rejectPromise = error => {
			// Don't retrieve an oversized buffer.
			if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
				error.bufferedData = stream.getBufferedValue();
			}

			reject(error);
		};

		stream = pump(inputStream, bufferStream(options), error => {
			if (error) {
				rejectPromise(error);
				return;
			}

			resolve();
		});

		stream.on('data', () => {
			if (stream.getBufferedLength() > maxBuffer) {
				rejectPromise(new MaxBufferError());
			}
		});
	});

	return stream.getBufferedValue();
}

module.exports = getStream;
// TODO: Remove this for the next major release
module.exports.default = getStream;
module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
module.exports.array = (stream, options) => getStream(stream, {...options, array: true});
module.exports.MaxBufferError = MaxBufferError;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "get-stream",
  "version": "5.2.0",
  "description": "Get a stream as a string, buffer, or array",
  "license": "MIT",
  "repository": "sindresorhus/get-stream",
  "funding": "https://github.com/sponsors/sindresorhus",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "https://sindresorhus.com"
  },
  "engines": {
    "node": ">=8"
  },
  "files": [
    "index.js",
    "index.d.ts",
    "buffer-stream.js"
  ],
  "dependencies": {
    "pump": "^3.0.0"
  },
  "devDependencies": {
    "@types/node": "^12.0.7",
    "ava": "^2.0.0",
    "into-stream": "^5.0.0",
    "tsd": "^0.7.2",
    "xo": "^0.24.0"
  }
}'use strict';
module.exports = object => {
	const result = {};

	for (const [key, value] of Object.entries(object)) {
		result[key.toLowerCase()] = value;
	}

	return result;
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "lowercase-keys",
  "version": "2.0.0",
  "description": "Lowercase the keys of an object",
  "license": "MIT",
  "repository": "sindresorhus/lowercase-keys",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=8"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "devDependencies": {
    "ava": "^1.4.1",
    "tsd": "^0.7.2",
    "xo": "^0.24.0"
  }
}{
  "name": "cacheable-request",
  "version": "6.1.0",
  "description": "Wrap native HTTP requests with RFC compliant cache support",
  "license": "MIT",
  "repository": "lukechilds/cacheable-request",
  "author": "Luke Childs <lukechilds123@gmail.com> (http://lukechilds.co.uk)",
  "main": "src/index.js",
  "engines": {
    "node": ">=8"
  },
  "files": [
    "src"
  ],
  "dependencies": {
    "clone-response": "^1.0.2",
    "get-stream": "^5.1.0",
    "http-cache-semantics": "^4.0.0",
    "keyv": "^3.0.0",
    "lowercase-keys": "^2.0.0",
    "normalize-url": "^4.1.0",
    "responselike": "^1.0.2"
  },
  "devDependencies": {
    "@keyv/sqlite": "^2.0.0",
    "ava": "^1.1.0",
    "coveralls": "^3.0.0",
    "create-test-server": "3.0.0",
    "delay": "^4.0.0",
    "eslint-config-xo-lukechilds": "^1.0.0",
    "nyc": "^14.1.1",
    "pify": "^4.0.0",
    "sqlite3": "^4.0.2",
    "this": "^1.0.2",
    "xo": "^0.23.0"
  }
}'use strict';

const EventEmitter = require('events');
const urlLib = require('url');
const normalizeUrl = require('normalize-url');
const getStream = require('get-stream');
const CachePolicy = require('http-cache-semantics');
const Response = require('responselike');
const lowercaseKeys = require('lowercase-keys');
const cloneResponse = require('clone-response');
const Keyv = require('keyv');

class CacheableRequest {
	constructor(request, cacheAdapter) {
		if (typeof request !== 'function') {
			throw new TypeError('Parameter `request` must be a function');
		}

		this.cache = new Keyv({
			uri: typeof cacheAdapter === 'string' && cacheAdapter,
			store: typeof cacheAdapter !== 'string' && cacheAdapter,
			namespace: 'cacheable-request'
		});

		return this.createCacheableRequest(request);
	}

	createCacheableRequest(request) {
		return (opts, cb) => {
			let url;
			if (typeof opts === 'string') {
				url = normalizeUrlObject(urlLib.parse(opts));
				opts = {};
			} else if (opts instanceof urlLib.URL) {
				url = normalizeUrlObject(urlLib.parse(opts.toString()));
				opts = {};
			} else {
				const [pathname, ...searchParts] = (opts.path || '').split('?');
				const search = searchParts.length > 0 ?
					`?${searchParts.join('?')}` :
					'';
				url = normalizeUrlObject({ ...opts, pathname, search });
			}

			opts = {
				headers: {},
				method: 'GET',
				cache: true,
				strictTtl: false,
				automaticFailover: false,
				...opts,
				...urlObjectToRequestOptions(url)
			};
			opts.headers = lowercaseKeys(opts.headers);

			const ee = new EventEmitter();
			const normalizedUrlString = normalizeUrl(
				urlLib.format(url),
				{
					stripWWW: false,
					removeTrailingSlash: false,
					stripAuthentication: false
				}
			);
			const key = `${opts.method}:${normalizedUrlString}`;
			let revalidate = false;
			let madeRequest = false;

			const makeRequest = opts => {
				madeRequest = true;
				let requestErrored = false;
				let requestErrorCallback;

				const requestErrorPromise = new Promise(resolve => {
					requestErrorCallback = () => {
						if (!requestErrored) {
							requestErrored = true;
							resolve();
						}
					};
				});

				const handler = response => {
					if (revalidate && !opts.forceRefresh) {
						response.status = response.statusCode;
						const revalidatedPolicy = CachePolicy.fromObject(revalidate.cachePolicy).revalidatedPolicy(opts, response);
						if (!revalidatedPolicy.modified) {
							const headers = revalidatedPolicy.policy.responseHeaders();
							response = new Response(revalidate.statusCode, headers, revalidate.body, revalidate.url);
							response.cachePolicy = revalidatedPolicy.policy;
							response.fromCache = true;
						}
					}

					if (!response.fromCache) {
						response.cachePolicy = new CachePolicy(opts, response, opts);
						response.fromCache = false;
					}

					let clonedResponse;
					if (opts.cache && response.cachePolicy.storable()) {
						clonedResponse = cloneResponse(response);

						(async () => {
							try {
								const bodyPromise = getStream.buffer(response);

								await Promise.race([
									requestErrorPromise,
									new Promise(resolve => response.once('end', resolve))
								]);

								if (requestErrored) {
									return;
								}

								const body = await bodyPromise;

								const value = {
									cachePolicy: response.cachePolicy.toObject(),
									url: response.url,
									statusCode: response.fromCache ? revalidate.statusCode : response.statusCode,
									body
								};

								let ttl = opts.strictTtl ? response.cachePolicy.timeToLive() : undefined;
								if (opts.maxTtl) {
									ttl = ttl ? Math.min(ttl, opts.maxTtl) : opts.maxTtl;
								}

								await this.cache.set(key, value, ttl);
							} catch (error) {
								ee.emit('error', new CacheableRequest.CacheError(error));
							}
						})();
					} else if (opts.cache && revalidate) {
						(async () => {
							try {
								await this.cache.delete(key);
							} catch (error) {
								ee.emit('error', new CacheableRequest.CacheError(error));
							}
						})();
					}

					ee.emit('response', clonedResponse || response);
					if (typeof cb === 'function') {
						cb(clonedResponse || response);
					}
				};

				try {
					const req = request(opts, handler);
					req.once('error', requestErrorCallback);
					req.once('abort', requestErrorCallback);
					ee.emit('request', req);
				} catch (error) {
					ee.emit('error', new CacheableRequest.RequestError(error));
				}
			};

			(async () => {
				const get = async opts => {
					await Promise.resolve();

					const cacheEntry = opts.cache ? await this.cache.get(key) : undefined;
					if (typeof cacheEntry === 'undefined') {
						return makeRequest(opts);
					}

					const policy = CachePolicy.fromObject(cacheEntry.cachePolicy);
					if (policy.satisfiesWithoutRevalidation(opts) && !opts.forceRefresh) {
						const headers = policy.responseHeaders();
						const response = new Response(cacheEntry.statusCode, headers, cacheEntry.body, cacheEntry.url);
						response.cachePolicy = policy;
						response.fromCache = true;

						ee.emit('response', response);
						if (typeof cb === 'function') {
							cb(response);
						}
					} else {
						revalidate = cacheEntry;
						opts.headers = policy.revalidationHeaders(opts);
						makeRequest(opts);
					}
				};

				const errorHandler = error => ee.emit('error', new CacheableRequest.CacheError(error));
				this.cache.once('error', errorHandler);
				ee.on('response', () => this.cache.removeListener('error', errorHandler));

				try {
					await get(opts);
				} catch (error) {
					if (opts.automaticFailover && !madeRequest) {
						makeRequest(opts);
					}

					ee.emit('error', new CacheableRequest.CacheError(error));
				}
			})();

			return ee;
		};
	}
}

function urlObjectToRequestOptions(url) {
	const options = { ...url };
	options.path = `${url.pathname || '/'}${url.search || ''}`;
	delete options.pathname;
	delete options.search;
	return options;
}

function normalizeUrlObject(url) {
	// If url was parsed by url.parse or new URL:
	// - hostname will be set
	// - host will be hostname[:port]
	// - port will be set if it was explicit in the parsed string
	// Otherwise, url was from request options:
	// - hostname or host may be set
	// - host shall not have port encoded
	return {
		protocol: url.protocol,
		auth: url.auth,
		hostname: url.hostname || url.host || 'localhost',
		port: url.port,
		pathname: url.pathname,
		search: url.search
	};
}

CacheableRequest.RequestError = class extends Error {
	constructor(error) {
		super(error.message);
		this.name = 'RequestError';
		Object.assign(this, error);
	}
};

CacheableRequest.CacheError = class extends Error {
	constructor(error) {
		super(error.message);
		this.name = 'CacheError';
		Object.assign(this, error);
	}
};

module.exports = CacheableRequest;
'use strict';
const PassThrough = require('stream').PassThrough;
const zlib = require('zlib');
const mimicResponse = require('mimic-response');

module.exports = response => {
	// TODO: Use Array#includes when targeting Node.js 6
	if (['gzip', 'deflate'].indexOf(response.headers['content-encoding']) === -1) {
		return response;
	}

	const unzip = zlib.createUnzip();
	const stream = new PassThrough();

	mimicResponse(response, stream);

	unzip.on('error', err => {
		if (err.code === 'Z_BUF_ERROR') {
			stream.end();
			return;
		}

		stream.emit('error', err);
	});

	response.pipe(unzip).pipe(stream);

	return stream;
};
`The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "decompress-response",
  "version": "3.3.0",
  "description": "Decompress a HTTP response if needed",
  "license": "MIT",
  "repository": "sindresorhus/decompress-response",
  "maintainers": [
    {
      "name": "Sindre Sorhus",
      "email": "sindresorhus@gmail.com",
      "url": "sindresorhus.com"
    },
    {
      "name": "Vsevolod Strukchinsky",
      "email": "floatdrop@gmail.com",
      "url": "github.com/floatdrop"
    }
  ],
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "mimic-response": "^1.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "get-stream": "^3.0.0",
    "pify": "^3.0.0",
    "xo": "*"
  }
}"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tls_1 = require("tls");
const deferToConnect = (socket, fn) => {
    let listeners;
    if (typeof fn === 'function') {
        const connect = fn;
        listeners = { connect };
    }
    else {
        listeners = fn;
    }
    const hasConnectListener = typeof listeners.connect === 'function';
    const hasSecureConnectListener = typeof listeners.secureConnect === 'function';
    const hasCloseListener = typeof listeners.close === 'function';
    const onConnect = () => {
        if (hasConnectListener) {
            listeners.connect();
        }
        if (socket instanceof tls_1.TLSSocket && hasSecureConnectListener) {
            if (socket.authorized) {
                listeners.secureConnect();
            }
            else if (!socket.authorizationError) {
                socket.once('secureConnect', listeners.secureConnect);
            }
        }
        if (hasCloseListener) {
            socket.once('close', listeners.close);
        }
    };
    if (socket.writable && !socket.connecting) {
        onConnect();
    }
    else if (socket.connecting) {
        socket.once('connect', onConnect);
    }
    else if (socket.destroyed && hasCloseListener) {
        listeners.close(socket._hadError);
    }
};
exports.default = deferToConnect;
// For CommonJS default export support
module.exports = deferToConnect;
module.exports.default = deferToConnect;
MIT License

Copyright (c) 2018 Szymon Marczak

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "defer-to-connect",
  "version": "1.1.3",
  "description": "The safe way to handle the `connect` socket event",
  "main": "dist",
  "files": [
    "dist"
  ],
  "author": "Szymon Marczak",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/szmarczak/defer-to-connect.git"
  },
  "homepage": "https://github.com/szmarczak/defer-to-connect#readme",
  "devDependencies": {
    "@sindresorhus/tsconfig": "^0.5.0",
    "@types/node": "^12.12.4",
    "@typescript-eslint/eslint-plugin": "^1.11.0",
    "@typescript-eslint/parser": "^1.11.0",
    "ava": "^2.1.0",
    "coveralls": "^3.0.7",
    "create-cert": "^1.0.6",
    "del-cli": "^3.0.0",
    "eslint-config-xo-typescript": "^0.15.0",
    "nyc": "^14.0.0",
    "p-event": "^4.1.0",
    "ts-node": "^8.1.0",
    "typescript": "^3.6.4",
    "xo": "^0.25.3"
  },
  "types": "dist"
}'use strict';
const {PassThrough} = require('stream');

module.exports = options => {
	options = Object.assign({}, options);

	const {array} = options;
	let {encoding} = options;
	const buffer = encoding === 'buffer';
	let objectMode = false;

	if (array) {
		objectMode = !(encoding || buffer);
	} else {
		encoding = encoding || 'utf8';
	}

	if (buffer) {
		encoding = null;
	}

	let len = 0;
	const ret = [];
	const stream = new PassThrough({objectMode});

	if (encoding) {
		stream.setEncoding(encoding);
	}

	stream.on('data', chunk => {
		ret.push(chunk);

		if (objectMode) {
			len = ret.length;
		} else {
			len += chunk.length;
		}
	});

	stream.getBufferedValue = () => {
		if (array) {
			return ret;
		}

		return buffer ? Buffer.concat(ret, len) : ret.join('');
	};

	stream.getBufferedLength = () => len;

	return stream;
};
'use strict';
const pump = require('pump');
const bufferStream = require('./buffer-stream');

class MaxBufferError extends Error {
	constructor() {
		super('maxBuffer exceeded');
		this.name = 'MaxBufferError';
	}
}

function getStream(inputStream, options) {
	if (!inputStream) {
		return Promise.reject(new Error('Expected a stream'));
	}

	options = Object.assign({maxBuffer: Infinity}, options);

	const {maxBuffer} = options;

	let stream;
	return new Promise((resolve, reject) => {
		const rejectPromise = error => {
			if (error) { // A null check
				error.bufferedData = stream.getBufferedValue();
			}
			reject(error);
		};

		stream = pump(inputStream, bufferStream(options), error => {
			if (error) {
				rejectPromise(error);
				return;
			}

			resolve();
		});

		stream.on('data', () => {
			if (stream.getBufferedLength() > maxBuffer) {
				rejectPromise(new MaxBufferError());
			}
		});
	}).then(() => stream.getBufferedValue());
}

module.exports = getStream;
module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'}));
module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true}));
module.exports.MaxBufferError = MaxBufferError;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "get-stream",
  "version": "4.1.0",
  "description": "Get a stream as a string, buffer, or array",
  "license": "MIT",
  "repository": "sindresorhus/get-stream",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js",
    "buffer-stream.js"
  ],
  "dependencies": {
    "pump": "^3.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "into-stream": "^3.0.0",
    "xo": "*"
  }
}//TODO: handle reviver/dehydrate function like normal
//and handle indentation, like normal.
//if anyone needs this... please send pull request.

exports.stringify = function stringify (o) {
  if('undefined' == typeof o) return o

  if(o && Buffer.isBuffer(o))
    return JSON.stringify(':base64:' + o.toString('base64'))

  if(o && o.toJSON)
    o =  o.toJSON()

  if(o && 'object' === typeof o) {
    var s = ''
    var array = Array.isArray(o)
    s = array ? '[' : '{'
    var first = true

    for(var k in o) {
      var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k])
      if(Object.hasOwnProperty.call(o, k) && !ignore) {
        if(!first)
          s += ','
        first = false
        if (array) {
          if(o[k] == undefined)
            s += 'null'
          else
            s += stringify(o[k])
        } else if (o[k] !== void(0)) {
          s += stringify(k) + ':' + stringify(o[k])
        }
      }
    }

    s += array ? ']' : '}'

    return s
  } else if ('string' === typeof o) {
    return JSON.stringify(/^:/.test(o) ? ':' + o : o)
  } else if ('undefined' === typeof o) {
    return 'null';
  } else
    return JSON.stringify(o)
}

exports.parse = function (s) {
  return JSON.parse(s, function (key, value) {
    if('string' === typeof value) {
      if(/^:base64:/.test(value))
        return new Buffer(value.substring(8), 'base64')
      else
        return /^:/.test(value) ? value.substring(1) : value 
    }
    return value
  })
}
Copyright (c) 2013 Dominic Tarr

Permission is hereby granted, free of charge, 
to any person obtaining a copy of this software and 
associated documentation files (the "Software"), to 
deal in the Software without restriction, including 
without limitation the rights to use, copy, modify, 
merge, publish, distribute, sublicense, and/or sell 
copies of the Software, and to permit persons to whom 
the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice 
shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR 
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "json-buffer",
  "description": "JSON parse & stringify that supports binary via bops & base64",
  "version": "3.0.0",
  "homepage": "https://github.com/dominictarr/json-buffer",
  "repository": {
    "type": "git",
    "url": "git://github.com/dominictarr/json-buffer.git"
  },
  "devDependencies": {
    "tape": "^4.6.3"
  },
  "author": "Dominic Tarr <dominic.tarr@gmail.com> (http://dominictarr.com)",
  "license": "MIT",
  "testling": {
    "files": "test/*.js",
    "browsers": [
      "ie/8..latest",
      "firefox/17..latest",
      "firefox/nightly",
      "chrome/22..latest",
      "chrome/canary",
      "opera/12..latest",
      "opera/next",
      "safari/5.1..latest",
      "ipad/6.0..latest",
      "iphone/6.0..latest",
      "android-browser/4.2..latest"
    ]
  }
}MIT License

Copyright (c) 2017 Luke Childs

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "keyv",
  "version": "3.1.0",
  "description": "Simple key-value storage with support for multiple backends",
  "main": "src/index.js",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/lukechilds/keyv.git"
  },
  "author": "Luke Childs <lukechilds123@gmail.com> (http://lukechilds.co.uk)",
  "license": "MIT",
  "homepage": "https://github.com/lukechilds/keyv",
  "dependencies": {
    "json-buffer": "3.0.0"
  },
  "devDependencies": {
    "ava": "^0.25.0",
    "coveralls": "^3.0.0",
    "eslint-config-xo-lukechilds": "^1.0.0",
    "@keyv/mongo": "*",
    "@keyv/mysql": "*",
    "@keyv/postgres": "*",
    "@keyv/redis": "*",
    "@keyv/sqlite": "*",
    "@keyv/test-suite": "*",
    "nyc": "^11.0.3",
    "this": "^1.0.2",
    "timekeeper": "^2.0.0",
    "xo": "^0.20.1"
  }
}'use strict';

const EventEmitter = require('events');
const JSONB = require('json-buffer');

const loadStore = opts => {
	const adapters = {
		redis: '@keyv/redis',
		mongodb: '@keyv/mongo',
		mongo: '@keyv/mongo',
		sqlite: '@keyv/sqlite',
		postgresql: '@keyv/postgres',
		postgres: '@keyv/postgres',
		mysql: '@keyv/mysql'
	};
	if (opts.adapter || opts.uri) {
		const adapter = opts.adapter || /^[^:]*/.exec(opts.uri)[0];
		return new (require(adapters[adapter]))(opts);
	}
	return new Map();
};

class Keyv extends EventEmitter {
	constructor(uri, opts) {
		super();
		this.opts = Object.assign(
			{
				namespace: 'keyv',
				serialize: JSONB.stringify,
				deserialize: JSONB.parse
			},
			(typeof uri === 'string') ? { uri } : uri,
			opts
		);

		if (!this.opts.store) {
			const adapterOpts = Object.assign({}, this.opts);
			this.opts.store = loadStore(adapterOpts);
		}

		if (typeof this.opts.store.on === 'function') {
			this.opts.store.on('error', err => this.emit('error', err));
		}

		this.opts.store.namespace = this.opts.namespace;
	}

	_getKeyPrefix(key) {
		return `${this.opts.namespace}:${key}`;
	}

	get(key) {
		key = this._getKeyPrefix(key);
		const store = this.opts.store;
		return Promise.resolve()
			.then(() => store.get(key))
			.then(data => {
				data = (typeof data === 'string') ? this.opts.deserialize(data) : data;
				if (data === undefined) {
					return undefined;
				}
				if (typeof data.expires === 'number' && Date.now() > data.expires) {
					this.delete(key);
					return undefined;
				}
				return data.value;
			});
	}

	set(key, value, ttl) {
		key = this._getKeyPrefix(key);
		if (typeof ttl === 'undefined') {
			ttl = this.opts.ttl;
		}
		if (ttl === 0) {
			ttl = undefined;
		}
		const store = this.opts.store;

		return Promise.resolve()
			.then(() => {
				const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null;
				value = { value, expires };
				return store.set(key, this.opts.serialize(value), ttl);
			})
			.then(() => true);
	}

	delete(key) {
		key = this._getKeyPrefix(key);
		const store = this.opts.store;
		return Promise.resolve()
			.then(() => store.delete(key));
	}

	clear() {
		const store = this.opts.store;
		return Promise.resolve()
			.then(() => store.clear());
	}
}

module.exports = Keyv;
'use strict';
module.exports = function (obj) {
	var ret = {};
	var keys = Object.keys(Object(obj));

	for (var i = 0; i < keys.length; i++) {
		ret[keys[i].toLowerCase()] = obj[keys[i]];
	}

	return ret;
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "lowercase-keys",
  "version": "1.0.1",
  "description": "Lowercase the keys of an object",
  "license": "MIT",
  "repository": "sindresorhus/lowercase-keys",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*"
  }
}'use strict';
// TODO: Use the `URL` global when targeting Node.js 10
const URLParser = typeof URL === 'undefined' ? require('url').URL : URL;

// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
const DATA_URL_DEFAULT_CHARSET = 'us-ascii';

const testParameter = (name, filters) => {
	return filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
};

const normalizeDataURL = (urlString, {stripHash}) => {
	const parts = urlString.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);

	if (!parts) {
		throw new Error(`Invalid URL: ${urlString}`);
	}

	const mediaType = parts[1].split(';');
	const body = parts[2];
	const hash = stripHash ? '' : parts[3];

	let base64 = false;

	if (mediaType[mediaType.length - 1] === 'base64') {
		mediaType.pop();
		base64 = true;
	}

	// Lowercase MIME type
	const mimeType = (mediaType.shift() || '').toLowerCase();
	const attributes = mediaType
		.map(attribute => {
			let [key, value = ''] = attribute.split('=').map(string => string.trim());

			// Lowercase `charset`
			if (key === 'charset') {
				value = value.toLowerCase();

				if (value === DATA_URL_DEFAULT_CHARSET) {
					return '';
				}
			}

			return `${key}${value ? `=${value}` : ''}`;
		})
		.filter(Boolean);

	const normalizedMediaType = [
		...attributes
	];

	if (base64) {
		normalizedMediaType.push('base64');
	}

	if (normalizedMediaType.length !== 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
		normalizedMediaType.unshift(mimeType);
	}

	return `data:${normalizedMediaType.join(';')},${base64 ? body.trim() : body}${hash ? `#${hash}` : ''}`;
};

const normalizeUrl = (urlString, options) => {
	options = {
		defaultProtocol: 'http:',
		normalizeProtocol: true,
		forceHttp: false,
		forceHttps: false,
		stripAuthentication: true,
		stripHash: false,
		stripWWW: true,
		removeQueryParameters: [/^utm_\w+/i],
		removeTrailingSlash: true,
		removeDirectoryIndex: false,
		sortQueryParameters: true,
		...options
	};

	// TODO: Remove this at some point in the future
	if (Reflect.has(options, 'normalizeHttps')) {
		throw new Error('options.normalizeHttps is renamed to options.forceHttp');
	}

	if (Reflect.has(options, 'normalizeHttp')) {
		throw new Error('options.normalizeHttp is renamed to options.forceHttps');
	}

	if (Reflect.has(options, 'stripFragment')) {
		throw new Error('options.stripFragment is renamed to options.stripHash');
	}

	urlString = urlString.trim();

	// Data URL
	if (/^data:/i.test(urlString)) {
		return normalizeDataURL(urlString, options);
	}

	const hasRelativeProtocol = urlString.startsWith('//');
	const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);

	// Prepend protocol
	if (!isRelativeUrl) {
		urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
	}

	const urlObj = new URLParser(urlString);

	if (options.forceHttp && options.forceHttps) {
		throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
	}

	if (options.forceHttp && urlObj.protocol === 'https:') {
		urlObj.protocol = 'http:';
	}

	if (options.forceHttps && urlObj.protocol === 'http:') {
		urlObj.protocol = 'https:';
	}

	// Remove auth
	if (options.stripAuthentication) {
		urlObj.username = '';
		urlObj.password = '';
	}

	// Remove hash
	if (options.stripHash) {
		urlObj.hash = '';
	}

	// Remove duplicate slashes if not preceded by a protocol
	if (urlObj.pathname) {
		// TODO: Use the following instead when targeting Node.js 10
		// `urlObj.pathname = urlObj.pathname.replace(/(?<!https?:)\/{2,}/g, '/');`
		urlObj.pathname = urlObj.pathname.replace(/((?!:).|^)\/{2,}/g, (_, p1) => {
			if (/^(?!\/)/g.test(p1)) {
				return `${p1}/`;
			}

			return '/';
		});
	}

	// Decode URI octets
	if (urlObj.pathname) {
		urlObj.pathname = decodeURI(urlObj.pathname);
	}

	// Remove directory index
	if (options.removeDirectoryIndex === true) {
		options.removeDirectoryIndex = [/^index\.[a-z]+$/];
	}

	if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {
		let pathComponents = urlObj.pathname.split('/');
		const lastComponent = pathComponents[pathComponents.length - 1];

		if (testParameter(lastComponent, options.removeDirectoryIndex)) {
			pathComponents = pathComponents.slice(0, pathComponents.length - 1);
			urlObj.pathname = pathComponents.slice(1).join('/') + '/';
		}
	}

	if (urlObj.hostname) {
		// Remove trailing dot
		urlObj.hostname = urlObj.hostname.replace(/\.$/, '');

		// Remove `www.`
		if (options.stripWWW && /^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(urlObj.hostname)) {
			// Each label should be max 63 at length (min: 2).
			// The extension should be max 5 at length (min: 2).
			// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
			urlObj.hostname = urlObj.hostname.replace(/^www\./, '');
		}
	}

	// Remove query unwanted parameters
	if (Array.isArray(options.removeQueryParameters)) {
		for (const key of [...urlObj.searchParams.keys()]) {
			if (testParameter(key, options.removeQueryParameters)) {
				urlObj.searchParams.delete(key);
			}
		}
	}

	// Sort query parameters
	if (options.sortQueryParameters) {
		urlObj.searchParams.sort();
	}

	if (options.removeTrailingSlash) {
		urlObj.pathname = urlObj.pathname.replace(/\/$/, '');
	}

	// Take advantage of many of the Node `url` normalizations
	urlString = urlObj.toString();

	// Remove ending `/`
	if ((options.removeTrailingSlash || urlObj.pathname === '/') && urlObj.hash === '') {
		urlString = urlString.replace(/\/$/, '');
	}

	// Restore relative protocol, if applicable
	if (hasRelativeProtocol && !options.normalizeProtocol) {
		urlString = urlString.replace(/^http:\/\//, '//');
	}

	// Remove http/https
	if (options.stripProtocol) {
		urlString = urlString.replace(/^(?:https?:)?\/\//, '');
	}

	return urlString;
};

module.exports = normalizeUrl;
// TODO: Remove this for the next major release
module.exports.default = normalizeUrl;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "normalize-url",
  "version": "4.5.1",
  "description": "Normalize a URL",
  "license": "MIT",
  "repository": "sindresorhus/normalize-url",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=8"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "devDependencies": {
    "ava": "^2.4.0",
    "coveralls": "^3.0.6",
    "nyc": "^14.1.1",
    "tsd": "^0.8.0",
    "xo": "^0.24.0"
  }
}'use strict';

class CancelError extends Error {
	constructor(reason) {
		super(reason || 'Promise was canceled');
		this.name = 'CancelError';
	}

	get isCanceled() {
		return true;
	}
}

class PCancelable {
	static fn(userFn) {
		return (...args) => {
			return new PCancelable((resolve, reject, onCancel) => {
				args.push(onCancel);
				userFn(...args).then(resolve, reject);
			});
		};
	}

	constructor(executor) {
		this._cancelHandlers = [];
		this._isPending = true;
		this._isCanceled = false;
		this._rejectOnCancel = true;

		this._promise = new Promise((resolve, reject) => {
			this._reject = reject;

			const onResolve = value => {
				this._isPending = false;
				resolve(value);
			};

			const onReject = error => {
				this._isPending = false;
				reject(error);
			};

			const onCancel = handler => {
				this._cancelHandlers.push(handler);
			};

			Object.defineProperties(onCancel, {
				shouldReject: {
					get: () => this._rejectOnCancel,
					set: bool => {
						this._rejectOnCancel = bool;
					}
				}
			});

			return executor(onResolve, onReject, onCancel);
		});
	}

	then(onFulfilled, onRejected) {
		return this._promise.then(onFulfilled, onRejected);
	}

	catch(onRejected) {
		return this._promise.catch(onRejected);
	}

	finally(onFinally) {
		return this._promise.finally(onFinally);
	}

	cancel(reason) {
		if (!this._isPending || this._isCanceled) {
			return;
		}

		if (this._cancelHandlers.length > 0) {
			try {
				for (const handler of this._cancelHandlers) {
					handler();
				}
			} catch (error) {
				this._reject(error);
			}
		}

		this._isCanceled = true;
		if (this._rejectOnCancel) {
			this._reject(new CancelError(reason));
		}
	}

	get isCanceled() {
		return this._isCanceled;
	}
}

Object.setPrototypeOf(PCancelable.prototype, Promise.prototype);

module.exports = PCancelable;
module.exports.default = PCancelable;

module.exports.CancelError = CancelError;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "p-cancelable",
  "version": "1.1.0",
  "description": "Create a promise that can be canceled",
  "license": "MIT",
  "repository": "sindresorhus/p-cancelable",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "devDependencies": {
    "ava": "^1.3.1",
    "delay": "^4.1.0",
    "promise.prototype.finally": "^3.1.0",
    "tsd-check": "^0.3.0",
    "xo": "^0.24.0"
  }
}Copyright (c) 2017 Luke Childs

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "responselike",
  "version": "1.0.2",
  "description": "A response-like object for mocking a Node.js HTTP response stream",
  "main": "src/index.js",
  "repository": {
    "type": "git",
    "url": "https://github.com/lukechilds/responselike.git"
  },
  "author": "lukechilds",
  "license": "MIT",
  "devDependencies": {
    "ava": "^0.22.0",
    "coveralls": "^2.13.1",
    "eslint-config-xo-lukechilds": "^1.0.0",
    "get-stream": "^3.0.0",
    "nyc": "^11.1.0",
    "xo": "^0.19.0"
  },
  "dependencies": {
    "lowercase-keys": "^1.0.0"
  }
}'use strict';

const Readable = require('stream').Readable;
const lowercaseKeys = require('lowercase-keys');

class Response extends Readable {
	constructor(statusCode, headers, body, url) {
		if (typeof statusCode !== 'number') {
			throw new TypeError('Argument `statusCode` should be a number');
		}
		if (typeof headers !== 'object') {
			throw new TypeError('Argument `headers` should be an object');
		}
		if (!(body instanceof Buffer)) {
			throw new TypeError('Argument `body` should be a buffer');
		}
		if (typeof url !== 'string') {
			throw new TypeError('Argument `url` should be a string');
		}

		super();
		this.statusCode = statusCode;
		this.headers = lowercaseKeys(headers);
		this.body = body;
		this.url = url;
	}

	_read() {
		this.push(this.body);
		this.push(null);
	}
}

module.exports = Response;
{
  "name": "got",
  "version": "9.6.0",
  "description": "Simplified HTTP requests",
  "license": "MIT",
  "repository": "sindresorhus/got",
  "main": "source",
  "engines": {
    "node": ">=8.6"
  },
  "files": [
    "source"
  ],
  "dependencies": {
    "@sindresorhus/is": "^0.14.0",
    "@szmarczak/http-timer": "^1.1.2",
    "cacheable-request": "^6.0.0",
    "decompress-response": "^3.3.0",
    "duplexer3": "^0.1.4",
    "get-stream": "^4.1.0",
    "lowercase-keys": "^1.0.1",
    "mimic-response": "^1.0.1",
    "p-cancelable": "^1.0.0",
    "to-readable-stream": "^1.0.0",
    "url-parse-lax": "^3.0.0"
  },
  "devDependencies": {
    "ava": "^1.1.0",
    "coveralls": "^3.0.0",
    "delay": "^4.1.0",
    "form-data": "^2.3.3",
    "get-port": "^4.0.0",
    "np": "^3.1.0",
    "nyc": "^13.1.0",
    "p-event": "^2.1.0",
    "pem": "^1.13.2",
    "proxyquire": "^2.0.1",
    "sinon": "^7.2.2",
    "slow-stream": "0.0.4",
    "tempfile": "^2.0.0",
    "tempy": "^0.2.1",
    "tough-cookie": "^3.0.0",
    "xo": "^0.24.0"
  },
  "browser": {
    "decompress-response": false,
    "electron": false
  }
}'use strict';
const EventEmitter = require('events');
const getStream = require('get-stream');
const is = require('@sindresorhus/is');
const PCancelable = require('p-cancelable');
const requestAsEventEmitter = require('./request-as-event-emitter');
const {HTTPError, ParseError, ReadError} = require('./errors');
const {options: mergeOptions} = require('./merge');
const {reNormalize} = require('./normalize-arguments');

const asPromise = options => {
	const proxy = new EventEmitter();

	const promise = new PCancelable((resolve, reject, onCancel) => {
		const emitter = requestAsEventEmitter(options);

		onCancel(emitter.abort);

		emitter.on('response', async response => {
			proxy.emit('response', response);

			const stream = is.null(options.encoding) ? getStream.buffer(response) : getStream(response, options);

			let data;
			try {
				data = await stream;
			} catch (error) {
				reject(new ReadError(error, options));
				return;
			}

			const limitStatusCode = options.followRedirect ? 299 : 399;

			response.body = data;

			try {
				for (const [index, hook] of Object.entries(options.hooks.afterResponse)) {
					// eslint-disable-next-line no-await-in-loop
					response = await hook(response, updatedOptions => {
						updatedOptions = reNormalize(mergeOptions(options, {
							...updatedOptions,
							retry: 0,
							throwHttpErrors: false
						}));

						// Remove any further hooks for that request, because we we'll call them anyway.
						// The loop continues. We don't want duplicates (asPromise recursion).
						updatedOptions.hooks.afterResponse = options.hooks.afterResponse.slice(0, index);

						return asPromise(updatedOptions);
					});
				}
			} catch (error) {
				reject(error);
				return;
			}

			const {statusCode} = response;

			if (options.json && response.body) {
				try {
					response.body = JSON.parse(response.body);
				} catch (error) {
					if (statusCode >= 200 && statusCode < 300) {
						const parseError = new ParseError(error, statusCode, options, data);
						Object.defineProperty(parseError, 'response', {value: response});
						reject(parseError);
						return;
					}
				}
			}

			if (statusCode !== 304 && (statusCode < 200 || statusCode > limitStatusCode)) {
				const error = new HTTPError(response, options);
				Object.defineProperty(error, 'response', {value: response});
				if (emitter.retry(error) === false) {
					if (options.throwHttpErrors) {
						reject(error);
						return;
					}

					resolve(response);
				}

				return;
			}

			resolve(response);
		});

		emitter.once('error', reject);
		[
			'request',
			'redirect',
			'uploadProgress',
			'downloadProgress'
		].forEach(event => emitter.on(event, (...args) => proxy.emit(event, ...args)));
	});

	promise.on = (name, fn) => {
		proxy.on(name, fn);
		return promise;
	};

	return promise;
};

module.exports = asPromise;
'use strict';
const {PassThrough} = require('stream');
const duplexer3 = require('duplexer3');
const requestAsEventEmitter = require('./request-as-event-emitter');
const {HTTPError, ReadError} = require('./errors');

module.exports = options => {
	const input = new PassThrough();
	const output = new PassThrough();
	const proxy = duplexer3(input, output);
	const piped = new Set();
	let isFinished = false;

	options.retry.retries = () => 0;

	if (options.body) {
		proxy.write = () => {
			throw new Error('Got\'s stream is not writable when the `body` option is used');
		};
	}

	const emitter = requestAsEventEmitter(options, input);

	// Cancels the request
	proxy._destroy = emitter.abort;

	emitter.on('response', response => {
		const {statusCode} = response;

		response.on('error', error => {
			proxy.emit('error', new ReadError(error, options));
		});

		if (options.throwHttpErrors && statusCode !== 304 && (statusCode < 200 || statusCode > 299)) {
			proxy.emit('error', new HTTPError(response, options), null, response);
			return;
		}

		isFinished = true;

		response.pipe(output);

		for (const destination of piped) {
			if (destination.headersSent) {
				continue;
			}

			for (const [key, value] of Object.entries(response.headers)) {
				// Got gives *decompressed* data. Overriding `content-encoding` header would result in an error.
				// It's not possible to decompress already decompressed data, is it?
				const allowed = options.decompress ? key !== 'content-encoding' : true;
				if (allowed) {
					destination.setHeader(key, value);
				}
			}

			destination.statusCode = response.statusCode;
		}

		proxy.emit('response', response);
	});

	[
		'error',
		'request',
		'redirect',
		'uploadProgress',
		'downloadProgress'
	].forEach(event => emitter.on(event, (...args) => proxy.emit(event, ...args)));

	const pipe = proxy.pipe.bind(proxy);
	const unpipe = proxy.unpipe.bind(proxy);
	proxy.pipe = (destination, options) => {
		if (isFinished) {
			throw new Error('Failed to pipe. The response has been emitted already.');
		}

		const result = pipe(destination, options);

		if (Reflect.has(destination, 'setHeader')) {
			piped.add(destination);
		}

		return result;
	};

	proxy.unpipe = stream => {
		piped.delete(stream);
		return unpipe(stream);
	};

	return proxy;
};
'use strict';
const errors = require('./errors');
const asStream = require('./as-stream');
const asPromise = require('./as-promise');
const normalizeArguments = require('./normalize-arguments');
const merge = require('./merge');
const deepFreeze = require('./utils/deep-freeze');

const getPromiseOrStream = options => options.stream ? asStream(options) : asPromise(options);

const aliases = [
	'get',
	'post',
	'put',
	'patch',
	'head',
	'delete'
];

const create = defaults => {
	defaults = merge({}, defaults);
	normalizeArguments.preNormalize(defaults.options);

	if (!defaults.handler) {
		// This can't be getPromiseOrStream, because when merging
		// the chain would stop at this point and no further handlers would be called.
		defaults.handler = (options, next) => next(options);
	}

	function got(url, options) {
		try {
			return defaults.handler(normalizeArguments(url, options, defaults), getPromiseOrStream);
		} catch (error) {
			if (options && options.stream) {
				throw error;
			} else {
				return Promise.reject(error);
			}
		}
	}

	got.create = create;
	got.extend = options => {
		let mutableDefaults;
		if (options && Reflect.has(options, 'mutableDefaults')) {
			mutableDefaults = options.mutableDefaults;
			delete options.mutableDefaults;
		} else {
			mutableDefaults = defaults.mutableDefaults;
		}

		return create({
			options: merge.options(defaults.options, options),
			handler: defaults.handler,
			mutableDefaults
		});
	};

	got.mergeInstances = (...args) => create(merge.instances(args));

	got.stream = (url, options) => got(url, {...options, stream: true});

	for (const method of aliases) {
		got[method] = (url, options) => got(url, {...options, method});
		got.stream[method] = (url, options) => got.stream(url, {...options, method});
	}

	Object.assign(got, {...errors, mergeOptions: merge.options});
	Object.defineProperty(got, 'defaults', {
		value: defaults.mutableDefaults ? defaults : deepFreeze(defaults),
		writable: defaults.mutableDefaults,
		configurable: defaults.mutableDefaults,
		enumerable: true
	});

	return got;
};

module.exports = create;
'use strict';
const urlLib = require('url');
const http = require('http');
const PCancelable = require('p-cancelable');
const is = require('@sindresorhus/is');

class GotError extends Error {
	constructor(message, error, options) {
		super(message);
		Error.captureStackTrace(this, this.constructor);
		this.name = 'GotError';

		if (!is.undefined(error.code)) {
			this.code = error.code;
		}

		Object.assign(this, {
			host: options.host,
			hostname: options.hostname,
			method: options.method,
			path: options.path,
			socketPath: options.socketPath,
			protocol: options.protocol,
			url: options.href,
			gotOptions: options
		});
	}
}

module.exports.GotError = GotError;

module.exports.CacheError = class extends GotError {
	constructor(error, options) {
		super(error.message, error, options);
		this.name = 'CacheError';
	}
};

module.exports.RequestError = class extends GotError {
	constructor(error, options) {
		super(error.message, error, options);
		this.name = 'RequestError';
	}
};

module.exports.ReadError = class extends GotError {
	constructor(error, options) {
		super(error.message, error, options);
		this.name = 'ReadError';
	}
};

module.exports.ParseError = class extends GotError {
	constructor(error, statusCode, options, data) {
		super(`${error.message} in "${urlLib.format(options)}": \n${data.slice(0, 77)}...`, error, options);
		this.name = 'ParseError';
		this.statusCode = statusCode;
		this.statusMessage = http.STATUS_CODES[this.statusCode];
	}
};

module.exports.HTTPError = class extends GotError {
	constructor(response, options) {
		const {statusCode} = response;
		let {statusMessage} = response;

		if (statusMessage) {
			statusMessage = statusMessage.replace(/\r?\n/g, ' ').trim();
		} else {
			statusMessage = http.STATUS_CODES[statusCode];
		}

		super(`Response code ${statusCode} (${statusMessage})`, {}, options);
		this.name = 'HTTPError';
		this.statusCode = statusCode;
		this.statusMessage = statusMessage;
		this.headers = response.headers;
		this.body = response.body;
	}
};

module.exports.MaxRedirectsError = class extends GotError {
	constructor(statusCode, redirectUrls, options) {
		super('Redirected 10 times. Aborting.', {}, options);
		this.name = 'MaxRedirectsError';
		this.statusCode = statusCode;
		this.statusMessage = http.STATUS_CODES[this.statusCode];
		this.redirectUrls = redirectUrls;
	}
};

module.exports.UnsupportedProtocolError = class extends GotError {
	constructor(options) {
		super(`Unsupported protocol "${options.protocol}"`, {}, options);
		this.name = 'UnsupportedProtocolError';
	}
};

module.exports.TimeoutError = class extends GotError {
	constructor(error, options) {
		super(error.message, {code: 'ETIMEDOUT'}, options);
		this.name = 'TimeoutError';
		this.event = error.event;
	}
};

module.exports.CancelError = PCancelable.CancelError;
'use strict';
const decompressResponse = require('decompress-response');
const is = require('@sindresorhus/is');
const mimicResponse = require('mimic-response');
const progress = require('./progress');

module.exports = (response, options, emitter) => {
	const downloadBodySize = Number(response.headers['content-length']) || null;

	const progressStream = progress.download(response, emitter, downloadBodySize);

	mimicResponse(response, progressStream);

	const newResponse = options.decompress === true &&
		is.function(decompressResponse) &&
		options.method !== 'HEAD' ? decompressResponse(progressStream) : progressStream;

	if (!options.decompress && ['gzip', 'deflate'].includes(response.headers['content-encoding'])) {
		options.encoding = null;
	}

	emitter.emit('response', newResponse);

	emitter.emit('downloadProgress', {
		percent: 0,
		transferred: 0,
		total: downloadBodySize
	});

	response.pipe(progressStream);
};
'use strict';
const pkg = require('../package.json');
const create = require('./create');

const defaults = {
	options: {
		retry: {
			retries: 2,
			methods: [
				'GET',
				'PUT',
				'HEAD',
				'DELETE',
				'OPTIONS',
				'TRACE'
			],
			statusCodes: [
				408,
				413,
				429,
				500,
				502,
				503,
				504
			],
			errorCodes: [
				'ETIMEDOUT',
				'ECONNRESET',
				'EADDRINUSE',
				'ECONNREFUSED',
				'EPIPE',
				'ENOTFOUND',
				'ENETUNREACH',
				'EAI_AGAIN'
			]
		},
		headers: {
			'user-agent': `${pkg.name}/${pkg.version} (https://github.com/sindresorhus/got)`
		},
		hooks: {
			beforeRequest: [],
			beforeRedirect: [],
			beforeRetry: [],
			afterResponse: []
		},
		decompress: true,
		throwHttpErrors: true,
		followRedirect: true,
		stream: false,
		form: false,
		json: false,
		cache: false,
		useElectronNet: false
	},
	mutableDefaults: false
};

const got = create(defaults);

module.exports = got;
'use strict';

module.exports = [
	'beforeError',
	'init',
	'beforeRequest',
	'beforeRedirect',
	'beforeRetry',
	'afterResponse'
];
'use strict';
const {URL} = require('url');
const is = require('@sindresorhus/is');
const knownHookEvents = require('./known-hook-events');

const merge = (target, ...sources) => {
	for (const source of sources) {
		for (const [key, sourceValue] of Object.entries(source)) {
			if (is.undefined(sourceValue)) {
				continue;
			}

			const targetValue = target[key];
			if (is.urlInstance(targetValue) && (is.urlInstance(sourceValue) || is.string(sourceValue))) {
				target[key] = new URL(sourceValue, targetValue);
			} else if (is.plainObject(sourceValue)) {
				if (is.plainObject(targetValue)) {
					target[key] = merge({}, targetValue, sourceValue);
				} else {
					target[key] = merge({}, sourceValue);
				}
			} else if (is.array(sourceValue)) {
				target[key] = merge([], sourceValue);
			} else {
				target[key] = sourceValue;
			}
		}
	}

	return target;
};

const mergeOptions = (...sources) => {
	sources = sources.map(source => source || {});
	const merged = merge({}, ...sources);

	const hooks = {};
	for (const hook of knownHookEvents) {
		hooks[hook] = [];
	}

	for (const source of sources) {
		if (source.hooks) {
			for (const hook of knownHookEvents) {
				hooks[hook] = hooks[hook].concat(source.hooks[hook]);
			}
		}
	}

	merged.hooks = hooks;

	return merged;
};

const mergeInstances = (instances, methods) => {
	const handlers = instances.map(instance => instance.defaults.handler);
	const size = instances.length - 1;

	return {
		methods,
		options: mergeOptions(...instances.map(instance => instance.defaults.options)),
		handler: (options, next) => {
			let iteration = -1;
			const iterate = options => handlers[++iteration](options, iteration === size ? next : iterate);

			return iterate(options);
		}
	};
};

module.exports = merge;
module.exports.options = mergeOptions;
module.exports.instances = mergeInstances;
'use strict';
const {URL, URLSearchParams} = require('url'); // TODO: Use the `URL` global when targeting Node.js 10
const urlLib = require('url');
const is = require('@sindresorhus/is');
const urlParseLax = require('url-parse-lax');
const lowercaseKeys = require('lowercase-keys');
const urlToOptions = require('./utils/url-to-options');
const isFormData = require('./utils/is-form-data');
const merge = require('./merge');
const knownHookEvents = require('./known-hook-events');

const retryAfterStatusCodes = new Set([413, 429, 503]);

// `preNormalize` handles static options (e.g. headers).
// For example, when you create a custom instance and make a request
// with no static changes, they won't be normalized again.
//
// `normalize` operates on dynamic options - they cannot be saved.
// For example, `body` is everytime different per request.
// When it's done normalizing the new options, it performs merge()
// on the prenormalized options and the normalized ones.

const preNormalize = (options, defaults) => {
	if (is.nullOrUndefined(options.headers)) {
		options.headers = {};
	} else {
		options.headers = lowercaseKeys(options.headers);
	}

	if (options.baseUrl && !options.baseUrl.toString().endsWith('/')) {
		options.baseUrl += '/';
	}

	if (options.stream) {
		options.json = false;
	}

	if (is.nullOrUndefined(options.hooks)) {
		options.hooks = {};
	} else if (!is.object(options.hooks)) {
		throw new TypeError(`Parameter \`hooks\` must be an object, not ${is(options.hooks)}`);
	}

	for (const event of knownHookEvents) {
		if (is.nullOrUndefined(options.hooks[event])) {
			if (defaults) {
				options.hooks[event] = [...defaults.hooks[event]];
			} else {
				options.hooks[event] = [];
			}
		}
	}

	if (is.number(options.timeout)) {
		options.gotTimeout = {request: options.timeout};
	} else if (is.object(options.timeout)) {
		options.gotTimeout = options.timeout;
	}

	delete options.timeout;

	const {retry} = options;
	options.retry = {
		retries: 0,
		methods: [],
		statusCodes: [],
		errorCodes: []
	};

	if (is.nonEmptyObject(defaults) && retry !== false) {
		options.retry = {...defaults.retry};
	}

	if (retry !== false) {
		if (is.number(retry)) {
			options.retry.retries = retry;
		} else {
			options.retry = {...options.retry, ...retry};
		}
	}

	if (options.gotTimeout) {
		options.retry.maxRetryAfter = Math.min(...[options.gotTimeout.request, options.gotTimeout.connection].filter(n => !is.nullOrUndefined(n)));
	}

	if (is.array(options.retry.methods)) {
		options.retry.methods = new Set(options.retry.methods.map(method => method.toUpperCase()));
	}

	if (is.array(options.retry.statusCodes)) {
		options.retry.statusCodes = new Set(options.retry.statusCodes);
	}

	if (is.array(options.retry.errorCodes)) {
		options.retry.errorCodes = new Set(options.retry.errorCodes);
	}

	return options;
};

const normalize = (url, options, defaults) => {
	if (is.plainObject(url)) {
		options = {...url, ...options};
		url = options.url || {};
		delete options.url;
	}

	if (defaults) {
		options = merge({}, defaults.options, options ? preNormalize(options, defaults.options) : {});
	} else {
		options = merge({}, preNormalize(options));
	}

	if (!is.string(url) && !is.object(url)) {
		throw new TypeError(`Parameter \`url\` must be a string or object, not ${is(url)}`);
	}

	if (is.string(url)) {
		if (options.baseUrl) {
			if (url.toString().startsWith('/')) {
				url = url.toString().slice(1);
			}

			url = urlToOptions(new URL(url, options.baseUrl));
		} else {
			url = url.replace(/^unix:/, 'http://$&');
			url = urlParseLax(url);
		}
	} else if (is(url) === 'URL') {
		url = urlToOptions(url);
	}

	// Override both null/undefined with default protocol
	options = merge({path: ''}, url, {protocol: url.protocol || 'https:'}, options);

	for (const hook of options.hooks.init) {
		const called = hook(options);

		if (is.promise(called)) {
			throw new TypeError('The `init` hook must be a synchronous function');
		}
	}

	const {baseUrl} = options;
	Object.defineProperty(options, 'baseUrl', {
		set: () => {
			throw new Error('Failed to set baseUrl. Options are normalized already.');
		},
		get: () => baseUrl
	});

	const {query} = options;
	if (is.nonEmptyString(query) || is.nonEmptyObject(query) || query instanceof URLSearchParams) {
		if (!is.string(query)) {
			options.query = (new URLSearchParams(query)).toString();
		}

		options.path = `${options.path.split('?')[0]}?${options.query}`;
		delete options.query;
	}

	if (options.hostname === 'unix') {
		const matches = /(.+?):(.+)/.exec(options.path);

		if (matches) {
			const [, socketPath, path] = matches;
			options = {
				...options,
				socketPath,
				path,
				host: null
			};
		}
	}

	const {headers} = options;
	for (const [key, value] of Object.entries(headers)) {
		if (is.nullOrUndefined(value)) {
			delete headers[key];
		}
	}

	if (options.json && is.undefined(headers.accept)) {
		headers.accept = 'application/json';
	}

	if (options.decompress && is.undefined(headers['accept-encoding'])) {
		headers['accept-encoding'] = 'gzip, deflate';
	}

	const {body} = options;
	if (is.nullOrUndefined(body)) {
		options.method = options.method ? options.method.toUpperCase() : 'GET';
	} else {
		const isObject = is.object(body) && !is.buffer(body) && !is.nodeStream(body);
		if (!is.nodeStream(body) && !is.string(body) && !is.buffer(body) && !(options.form || options.json)) {
			throw new TypeError('The `body` option must be a stream.Readable, string or Buffer');
		}

		if (options.json && !(isObject || is.array(body))) {
			throw new TypeError('The `body` option must be an Object or Array when the `json` option is used');
		}

		if (options.form && !isObject) {
			throw new TypeError('The `body` option must be an Object when the `form` option is used');
		}

		if (isFormData(body)) {
			// Special case for https://github.com/form-data/form-data
			headers['content-type'] = headers['content-type'] || `multipart/form-data; boundary=${body.getBoundary()}`;
		} else if (options.form) {
			headers['content-type'] = headers['content-type'] || 'application/x-www-form-urlencoded';
			options.body = (new URLSearchParams(body)).toString();
		} else if (options.json) {
			headers['content-type'] = headers['content-type'] || 'application/json';
			options.body = JSON.stringify(body);
		}

		options.method = options.method ? options.method.toUpperCase() : 'POST';
	}

	if (!is.function(options.retry.retries)) {
		const {retries} = options.retry;

		options.retry.retries = (iteration, error) => {
			if (iteration > retries) {
				return 0;
			}

			if ((!error || !options.retry.errorCodes.has(error.code)) && (!options.retry.methods.has(error.method) || !options.retry.statusCodes.has(error.statusCode))) {
				return 0;
			}

			if (Reflect.has(error, 'headers') && Reflect.has(error.headers, 'retry-after') && retryAfterStatusCodes.has(error.statusCode)) {
				let after = Number(error.headers['retry-after']);
				if (is.nan(after)) {
					after = Date.parse(error.headers['retry-after']) - Date.now();
				} else {
					after *= 1000;
				}

				if (after > options.retry.maxRetryAfter) {
					return 0;
				}

				return after;
			}

			if (error.statusCode === 413) {
				return 0;
			}

			const noise = Math.random() * 100;
			return ((2 ** (iteration - 1)) * 1000) + noise;
		};
	}

	return options;
};

const reNormalize = options => normalize(urlLib.format(options), options);

module.exports = normalize;
module.exports.preNormalize = preNormalize;
module.exports.reNormalize = reNormalize;
'use strict';
const {Transform} = require('stream');

module.exports = {
	download(response, emitter, downloadBodySize) {
		let downloaded = 0;

		return new Transform({
			transform(chunk, encoding, callback) {
				downloaded += chunk.length;

				const percent = downloadBodySize ? downloaded / downloadBodySize : 0;

				// Let `flush()` be responsible for emitting the last event
				if (percent < 1) {
					emitter.emit('downloadProgress', {
						percent,
						transferred: downloaded,
						total: downloadBodySize
					});
				}

				callback(null, chunk);
			},

			flush(callback) {
				emitter.emit('downloadProgress', {
					percent: 1,
					transferred: downloaded,
					total: downloadBodySize
				});

				callback();
			}
		});
	},

	upload(request, emitter, uploadBodySize) {
		const uploadEventFrequency = 150;
		let uploaded = 0;
		let progressInterval;

		emitter.emit('uploadProgress', {
			percent: 0,
			transferred: 0,
			total: uploadBodySize
		});

		request.once('error', () => {
			clearInterval(progressInterval);
		});

		request.once('response', () => {
			clearInterval(progressInterval);

			emitter.emit('uploadProgress', {
				percent: 1,
				transferred: uploaded,
				total: uploadBodySize
			});
		});

		request.once('socket', socket => {
			const onSocketConnect = () => {
				progressInterval = setInterval(() => {
					const lastUploaded = uploaded;
					/* istanbul ignore next: see #490 (occurs randomly!) */
					const headersSize = request._header ? Buffer.byteLength(request._header) : 0;
					uploaded = socket.bytesWritten - headersSize;

					// Don't emit events with unchanged progress and
					// prevent last event from being emitted, because
					// it's emitted when `response` is emitted
					if (uploaded === lastUploaded || uploaded === uploadBodySize) {
						return;
					}

					emitter.emit('uploadProgress', {
						percent: uploadBodySize ? uploaded / uploadBodySize : 0,
						transferred: uploaded,
						total: uploadBodySize
					});
				}, uploadEventFrequency);
			};

			/* istanbul ignore next: hard to test */
			if (socket.connecting) {
				socket.once('connect', onSocketConnect);
			} else if (socket.writable) {
				// The socket is being reused from pool,
				// so the connect event will not be emitted
				onSocketConnect();
			}
		});
	}
};
'use strict';
const {URL} = require('url'); // TODO: Use the `URL` global when targeting Node.js 10
const util = require('util');
const EventEmitter = require('events');
const http = require('http');
const https = require('https');
const urlLib = require('url');
const CacheableRequest = require('cacheable-request');
const toReadableStream = require('to-readable-stream');
const is = require('@sindresorhus/is');
const timer = require('@szmarczak/http-timer');
const timedOut = require('./utils/timed-out');
const getBodySize = require('./utils/get-body-size');
const getResponse = require('./get-response');
const progress = require('./progress');
const {CacheError, UnsupportedProtocolError, MaxRedirectsError, RequestError, TimeoutError} = require('./errors');
const urlToOptions = require('./utils/url-to-options');

const getMethodRedirectCodes = new Set([300, 301, 302, 303, 304, 305, 307, 308]);
const allMethodRedirectCodes = new Set([300, 303, 307, 308]);

module.exports = (options, input) => {
	const emitter = new EventEmitter();
	const redirects = [];
	let currentRequest;
	let requestUrl;
	let redirectString;
	let uploadBodySize;
	let retryCount = 0;
	let shouldAbort = false;

	const setCookie = options.cookieJar ? util.promisify(options.cookieJar.setCookie.bind(options.cookieJar)) : null;
	const getCookieString = options.cookieJar ? util.promisify(options.cookieJar.getCookieString.bind(options.cookieJar)) : null;
	const agents = is.object(options.agent) ? options.agent : null;

	const emitError = async error => {
		try {
			for (const hook of options.hooks.beforeError) {
				// eslint-disable-next-line no-await-in-loop
				error = await hook(error);
			}

			emitter.emit('error', error);
		} catch (error2) {
			emitter.emit('error', error2);
		}
	};

	const get = async options => {
		const currentUrl = redirectString || requestUrl;

		if (options.protocol !== 'http:' && options.protocol !== 'https:') {
			throw new UnsupportedProtocolError(options);
		}

		decodeURI(currentUrl);

		let fn;
		if (is.function(options.request)) {
			fn = {request: options.request};
		} else {
			fn = options.protocol === 'https:' ? https : http;
		}

		if (agents) {
			const protocolName = options.protocol === 'https:' ? 'https' : 'http';
			options.agent = agents[protocolName] || options.agent;
		}

		/* istanbul ignore next: electron.net is broken */
		if (options.useElectronNet && process.versions.electron) {
			const r = ({x: require})['yx'.slice(1)]; // Trick webpack
			const electron = r('electron');
			fn = electron.net || electron.remote.net;
		}

		if (options.cookieJar) {
			const cookieString = await getCookieString(currentUrl, {});

			if (is.nonEmptyString(cookieString)) {
				options.headers.cookie = cookieString;
			}
		}

		let timings;
		const handleResponse = async response => {
			try {
				/* istanbul ignore next: fixes https://github.com/electron/electron/blob/cbb460d47628a7a146adf4419ed48550a98b2923/lib/browser/api/net.js#L59-L65 */
				if (options.useElectronNet) {
					response = new Proxy(response, {
						get: (target, name) => {
							if (name === 'trailers' || name === 'rawTrailers') {
								return [];
							}

							const value = target[name];
							return is.function(value) ? value.bind(target) : value;
						}
					});
				}

				const {statusCode} = response;
				response.url = currentUrl;
				response.requestUrl = requestUrl;
				response.retryCount = retryCount;
				response.timings = timings;
				response.redirectUrls = redirects;
				response.request = {
					gotOptions: options
				};

				const rawCookies = response.headers['set-cookie'];
				if (options.cookieJar && rawCookies) {
					await Promise.all(rawCookies.map(rawCookie => setCookie(rawCookie, response.url)));
				}

				if (options.followRedirect && 'location' in response.headers) {
					if (allMethodRedirectCodes.has(statusCode) || (getMethodRedirectCodes.has(statusCode) && (options.method === 'GET' || options.method === 'HEAD'))) {
						response.resume(); // We're being redirected, we don't care about the response.

						if (statusCode === 303) {
							// Server responded with "see other", indicating that the resource exists at another location,
							// and the client should request it from that location via GET or HEAD.
							options.method = 'GET';
						}

						if (redirects.length >= 10) {
							throw new MaxRedirectsError(statusCode, redirects, options);
						}

						// Handles invalid URLs. See https://github.com/sindresorhus/got/issues/604
						const redirectBuffer = Buffer.from(response.headers.location, 'binary').toString();
						const redirectURL = new URL(redirectBuffer, currentUrl);
						redirectString = redirectURL.toString();

						redirects.push(redirectString);

						const redirectOptions = {
							...options,
							...urlToOptions(redirectURL)
						};

						for (const hook of options.hooks.beforeRedirect) {
							// eslint-disable-next-line no-await-in-loop
							await hook(redirectOptions);
						}

						emitter.emit('redirect', response, redirectOptions);

						await get(redirectOptions);
						return;
					}
				}

				getResponse(response, options, emitter);
			} catch (error) {
				emitError(error);
			}
		};

		const handleRequest = request => {
			if (shouldAbort) {
				request.once('error', () => {});
				request.abort();
				return;
			}

			currentRequest = request;

			request.once('error', error => {
				if (request.aborted) {
					return;
				}

				if (error instanceof timedOut.TimeoutError) {
					error = new TimeoutError(error, options);
				} else {
					error = new RequestError(error, options);
				}

				if (emitter.retry(error) === false) {
					emitError(error);
				}
			});

			timings = timer(request);

			progress.upload(request, emitter, uploadBodySize);

			if (options.gotTimeout) {
				timedOut(request, options.gotTimeout, options);
			}

			emitter.emit('request', request);

			const uploadComplete = () => {
				request.emit('upload-complete');
			};

			try {
				if (is.nodeStream(options.body)) {
					options.body.once('end', uploadComplete);
					options.body.pipe(request);
					options.body = undefined;
				} else if (options.body) {
					request.end(options.body, uploadComplete);
				} else if (input && (options.method === 'POST' || options.method === 'PUT' || options.method === 'PATCH')) {
					input.once('end', uploadComplete);
					input.pipe(request);
				} else {
					request.end(uploadComplete);
				}
			} catch (error) {
				emitError(new RequestError(error, options));
			}
		};

		if (options.cache) {
			const cacheableRequest = new CacheableRequest(fn.request, options.cache);
			const cacheRequest = cacheableRequest(options, handleResponse);

			cacheRequest.once('error', error => {
				if (error instanceof CacheableRequest.RequestError) {
					emitError(new RequestError(error, options));
				} else {
					emitError(new CacheError(error, options));
				}
			});

			cacheRequest.once('request', handleRequest);
		} else {
			// Catches errors thrown by calling fn.request(...)
			try {
				handleRequest(fn.request(options, handleResponse));
			} catch (error) {
				emitError(new RequestError(error, options));
			}
		}
	};

	emitter.retry = error => {
		let backoff;

		try {
			backoff = options.retry.retries(++retryCount, error);
		} catch (error2) {
			emitError(error2);
			return;
		}

		if (backoff) {
			const retry = async options => {
				try {
					for (const hook of options.hooks.beforeRetry) {
						// eslint-disable-next-line no-await-in-loop
						await hook(options, error, retryCount);
					}

					await get(options);
				} catch (error) {
					emitError(error);
				}
			};

			setTimeout(retry, backoff, {...options, forceRefresh: true});
			return true;
		}

		return false;
	};

	emitter.abort = () => {
		if (currentRequest) {
			currentRequest.once('error', () => {});
			currentRequest.abort();
		} else {
			shouldAbort = true;
		}
	};

	setImmediate(async () => {
		try {
			// Convert buffer to stream to receive upload progress events (#322)
			const {body} = options;
			if (is.buffer(body)) {
				options.body = toReadableStream(body);
				uploadBodySize = body.length;
			} else {
				uploadBodySize = await getBodySize(options);
			}

			if (is.undefined(options.headers['content-length']) && is.undefined(options.headers['transfer-encoding'])) {
				if ((uploadBodySize > 0 || options.method === 'PUT') && !is.null(uploadBodySize)) {
					options.headers['content-length'] = uploadBodySize;
				}
			}

			for (const hook of options.hooks.beforeRequest) {
				// eslint-disable-next-line no-await-in-loop
				await hook(options);
			}

			requestUrl = options.href || (new URL(options.path, urlLib.format(options))).toString();

			await get(options);
		} catch (error) {
			emitError(error);
		}
	});

	return emitter;
};
'use strict';
const is = require('@sindresorhus/is');

module.exports = function deepFreeze(object) {
	for (const [key, value] of Object.entries(object)) {
		if (is.plainObject(value) || is.array(value)) {
			deepFreeze(object[key]);
		}
	}

	return Object.freeze(object);
};
'use strict';
const fs = require('fs');
const util = require('util');
const is = require('@sindresorhus/is');
const isFormData = require('./is-form-data');

module.exports = async options => {
	const {body} = options;

	if (options.headers['content-length']) {
		return Number(options.headers['content-length']);
	}

	if (!body && !options.stream) {
		return 0;
	}

	if (is.string(body)) {
		return Buffer.byteLength(body);
	}

	if (isFormData(body)) {
		return util.promisify(body.getLength.bind(body))();
	}

	if (body instanceof fs.ReadStream) {
		const {size} = await util.promisify(fs.stat)(body.path);
		return size;
	}

	return null;
};
'use strict';
const is = require('@sindresorhus/is');

module.exports = body => is.nodeStream(body) && is.function(body.getBoundary);
'use strict';
const net = require('net');

class TimeoutError extends Error {
	constructor(threshold, event) {
		super(`Timeout awaiting '${event}' for ${threshold}ms`);
		this.name = 'TimeoutError';
		this.code = 'ETIMEDOUT';
		this.event = event;
	}
}

const reentry = Symbol('reentry');

const noop = () => {};

module.exports = (request, delays, options) => {
	/* istanbul ignore next: this makes sure timed-out isn't called twice */
	if (request[reentry]) {
		return;
	}

	request[reentry] = true;

	let stopNewTimeouts = false;

	const addTimeout = (delay, callback, ...args) => {
		// An error had been thrown before. Going further would result in uncaught errors.
		// See https://github.com/sindresorhus/got/issues/631#issuecomment-435675051
		if (stopNewTimeouts) {
			return noop;
		}

		// Event loop order is timers, poll, immediates.
		// The timed event may emit during the current tick poll phase, so
		// defer calling the handler until the poll phase completes.
		let immediate;
		const timeout = setTimeout(() => {
			immediate = setImmediate(callback, delay, ...args);
			/* istanbul ignore next: added in node v9.7.0 */
			if (immediate.unref) {
				immediate.unref();
			}
		}, delay);

		/* istanbul ignore next: in order to support electron renderer */
		if (timeout.unref) {
			timeout.unref();
		}

		const cancel = () => {
			clearTimeout(timeout);
			clearImmediate(immediate);
		};

		cancelers.push(cancel);

		return cancel;
	};

	const {host, hostname} = options;
	const timeoutHandler = (delay, event) => {
		request.emit('error', new TimeoutError(delay, event));
		request.once('error', () => {}); // Ignore the `socket hung up` error made by request.abort()

		request.abort();
	};

	const cancelers = [];
	const cancelTimeouts = () => {
		stopNewTimeouts = true;
		cancelers.forEach(cancelTimeout => cancelTimeout());
	};

	request.once('error', cancelTimeouts);
	request.once('response', response => {
		response.once('end', cancelTimeouts);
	});

	if (delays.request !== undefined) {
		addTimeout(delays.request, timeoutHandler, 'request');
	}

	if (delays.socket !== undefined) {
		const socketTimeoutHandler = () => {
			timeoutHandler(delays.socket, 'socket');
		};

		request.setTimeout(delays.socket, socketTimeoutHandler);

		// `request.setTimeout(0)` causes a memory leak.
		// We can just remove the listener and forget about the timer - it's unreffed.
		// See https://github.com/sindresorhus/got/issues/690
		cancelers.push(() => request.removeListener('timeout', socketTimeoutHandler));
	}

	if (delays.lookup !== undefined && !request.socketPath && !net.isIP(hostname || host)) {
		request.once('socket', socket => {
			/* istanbul ignore next: hard to test */
			if (socket.connecting) {
				const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup');
				socket.once('lookup', cancelTimeout);
			}
		});
	}

	if (delays.connect !== undefined) {
		request.once('socket', socket => {
			/* istanbul ignore next: hard to test */
			if (socket.connecting) {
				const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect');

				if (request.socketPath || net.isIP(hostname || host)) {
					socket.once('connect', timeConnect());
				} else {
					socket.once('lookup', error => {
						if (error === null) {
							socket.once('connect', timeConnect());
						}
					});
				}
			}
		});
	}

	if (delays.secureConnect !== undefined && options.protocol === 'https:') {
		request.once('socket', socket => {
			/* istanbul ignore next: hard to test */
			if (socket.connecting) {
				socket.once('connect', () => {
					const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect');
					socket.once('secureConnect', cancelTimeout);
				});
			}
		});
	}

	if (delays.send !== undefined) {
		request.once('socket', socket => {
			const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send');
			/* istanbul ignore next: hard to test */
			if (socket.connecting) {
				socket.once('connect', () => {
					request.once('upload-complete', timeRequest());
				});
			} else {
				request.once('upload-complete', timeRequest());
			}
		});
	}

	if (delays.response !== undefined) {
		request.once('upload-complete', () => {
			const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response');
			request.once('response', cancelTimeout);
		});
	}
};

module.exports.TimeoutError = TimeoutError;
'use strict';
const is = require('@sindresorhus/is');

module.exports = url => {
	const options = {
		protocol: url.protocol,
		hostname: url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
		hash: url.hash,
		search: url.search,
		pathname: url.pathname,
		href: url.href
	};

	if (is.string(url.port) && url.port.length > 0) {
		options.port = Number(url.port);
	}

	if (url.username || url.password) {
		options.auth = `${url.username}:${url.password}`;
	}

	options.path = is.null(url.search) ? url.pathname : `${url.pathname}${url.search}`;

	return options;
};
'use strict'

module.exports = clone

var getPrototypeOf = Object.getPrototypeOf || function (obj) {
  return obj.__proto__
}

function clone (obj) {
  if (obj === null || typeof obj !== 'object')
    return obj

  if (obj instanceof Object)
    var copy = { __proto__: getPrototypeOf(obj) }
  else
    var copy = Object.create(null)

  Object.getOwnPropertyNames(obj).forEach(function (key) {
    Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))
  })

  return copy
}
var fs = require('fs')
var polyfills = require('./polyfills.js')
var legacy = require('./legacy-streams.js')
var clone = require('./clone.js')

var util = require('util')

/* istanbul ignore next - node 0.x polyfill */
var gracefulQueue
var previousSymbol

/* istanbul ignore else - node 0.x polyfill */
if (typeof Symbol === 'function' && typeof Symbol.for === 'function') {
  gracefulQueue = Symbol.for('graceful-fs.queue')
  // This is used in testing by future versions
  previousSymbol = Symbol.for('graceful-fs.previous')
} else {
  gracefulQueue = '___graceful-fs.queue'
  previousSymbol = '___graceful-fs.previous'
}

function noop () {}

function publishQueue(context, queue) {
  Object.defineProperty(context, gracefulQueue, {
    get: function() {
      return queue
    }
  })
}

var debug = noop
if (util.debuglog)
  debug = util.debuglog('gfs4')
else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ''))
  debug = function() {
    var m = util.format.apply(util, arguments)
    m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ')
    console.error(m)
  }

// Once time initialization
if (!fs[gracefulQueue]) {
  // This queue can be shared by multiple loaded instances
  var queue = global[gracefulQueue] || []
  publishQueue(fs, queue)

  // Patch fs.close/closeSync to shared queue version, because we need
  // to retry() whenever a close happens *anywhere* in the program.
  // This is essential when multiple graceful-fs instances are
  // in play at the same time.
  fs.close = (function (fs$close) {
    function close (fd, cb) {
      return fs$close.call(fs, fd, function (err) {
        // This function uses the graceful-fs shared queue
        if (!err) {
          retry()
        }

        if (typeof cb === 'function')
          cb.apply(this, arguments)
      })
    }

    Object.defineProperty(close, previousSymbol, {
      value: fs$close
    })
    return close
  })(fs.close)

  fs.closeSync = (function (fs$closeSync) {
    function closeSync (fd) {
      // This function uses the graceful-fs shared queue
      fs$closeSync.apply(fs, arguments)
      retry()
    }

    Object.defineProperty(closeSync, previousSymbol, {
      value: fs$closeSync
    })
    return closeSync
  })(fs.closeSync)

  if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) {
    process.on('exit', function() {
      debug(fs[gracefulQueue])
      require('assert').equal(fs[gracefulQueue].length, 0)
    })
  }
}

if (!global[gracefulQueue]) {
  publishQueue(global, fs[gracefulQueue]);
}

module.exports = patch(clone(fs))
if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {
    module.exports = patch(fs)
    fs.__patched = true;
}

function patch (fs) {
  // Everything that references the open() function needs to be in here
  polyfills(fs)
  fs.gracefulify = patch

  fs.createReadStream = createReadStream
  fs.createWriteStream = createWriteStream
  var fs$readFile = fs.readFile
  fs.readFile = readFile
  function readFile (path, options, cb) {
    if (typeof options === 'function')
      cb = options, options = null

    return go$readFile(path, options, cb)

    function go$readFile (path, options, cb) {
      return fs$readFile(path, options, function (err) {
        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
          enqueue([go$readFile, [path, options, cb]])
        else {
          if (typeof cb === 'function')
            cb.apply(this, arguments)
          retry()
        }
      })
    }
  }

  var fs$writeFile = fs.writeFile
  fs.writeFile = writeFile
  function writeFile (path, data, options, cb) {
    if (typeof options === 'function')
      cb = options, options = null

    return go$writeFile(path, data, options, cb)

    function go$writeFile (path, data, options, cb) {
      return fs$writeFile(path, data, options, function (err) {
        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
          enqueue([go$writeFile, [path, data, options, cb]])
        else {
          if (typeof cb === 'function')
            cb.apply(this, arguments)
          retry()
        }
      })
    }
  }

  var fs$appendFile = fs.appendFile
  if (fs$appendFile)
    fs.appendFile = appendFile
  function appendFile (path, data, options, cb) {
    if (typeof options === 'function')
      cb = options, options = null

    return go$appendFile(path, data, options, cb)

    function go$appendFile (path, data, options, cb) {
      return fs$appendFile(path, data, options, function (err) {
        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
          enqueue([go$appendFile, [path, data, options, cb]])
        else {
          if (typeof cb === 'function')
            cb.apply(this, arguments)
          retry()
        }
      })
    }
  }

  var fs$copyFile = fs.copyFile
  if (fs$copyFile)
    fs.copyFile = copyFile
  function copyFile (src, dest, flags, cb) {
    if (typeof flags === 'function') {
      cb = flags
      flags = 0
    }
    return fs$copyFile(src, dest, flags, function (err) {
      if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
        enqueue([fs$copyFile, [src, dest, flags, cb]])
      else {
        if (typeof cb === 'function')
          cb.apply(this, arguments)
        retry()
      }
    })
  }

  var fs$readdir = fs.readdir
  fs.readdir = readdir
  function readdir (path, options, cb) {
    var args = [path]
    if (typeof options !== 'function') {
      args.push(options)
    } else {
      cb = options
    }
    args.push(go$readdir$cb)

    return go$readdir(args)

    function go$readdir$cb (err, files) {
      if (files && files.sort)
        files.sort()

      if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
        enqueue([go$readdir, [args]])

      else {
        if (typeof cb === 'function')
          cb.apply(this, arguments)
        retry()
      }
    }
  }

  function go$readdir (args) {
    return fs$readdir.apply(fs, args)
  }

  if (process.version.substr(0, 4) === 'v0.8') {
    var legStreams = legacy(fs)
    ReadStream = legStreams.ReadStream
    WriteStream = legStreams.WriteStream
  }

  var fs$ReadStream = fs.ReadStream
  if (fs$ReadStream) {
    ReadStream.prototype = Object.create(fs$ReadStream.prototype)
    ReadStream.prototype.open = ReadStream$open
  }

  var fs$WriteStream = fs.WriteStream
  if (fs$WriteStream) {
    WriteStream.prototype = Object.create(fs$WriteStream.prototype)
    WriteStream.prototype.open = WriteStream$open
  }

  Object.defineProperty(fs, 'ReadStream', {
    get: function () {
      return ReadStream
    },
    set: function (val) {
      ReadStream = val
    },
    enumerable: true,
    configurable: true
  })
  Object.defineProperty(fs, 'WriteStream', {
    get: function () {
      return WriteStream
    },
    set: function (val) {
      WriteStream = val
    },
    enumerable: true,
    configurable: true
  })

  // legacy names
  var FileReadStream = ReadStream
  Object.defineProperty(fs, 'FileReadStream', {
    get: function () {
      return FileReadStream
    },
    set: function (val) {
      FileReadStream = val
    },
    enumerable: true,
    configurable: true
  })
  var FileWriteStream = WriteStream
  Object.defineProperty(fs, 'FileWriteStream', {
    get: function () {
      return FileWriteStream
    },
    set: function (val) {
      FileWriteStream = val
    },
    enumerable: true,
    configurable: true
  })

  function ReadStream (path, options) {
    if (this instanceof ReadStream)
      return fs$ReadStream.apply(this, arguments), this
    else
      return ReadStream.apply(Object.create(ReadStream.prototype), arguments)
  }

  function ReadStream$open () {
    var that = this
    open(that.path, that.flags, that.mode, function (err, fd) {
      if (err) {
        if (that.autoClose)
          that.destroy()

        that.emit('error', err)
      } else {
        that.fd = fd
        that.emit('open', fd)
        that.read()
      }
    })
  }

  function WriteStream (path, options) {
    if (this instanceof WriteStream)
      return fs$WriteStream.apply(this, arguments), this
    else
      return WriteStream.apply(Object.create(WriteStream.prototype), arguments)
  }

  function WriteStream$open () {
    var that = this
    open(that.path, that.flags, that.mode, function (err, fd) {
      if (err) {
        that.destroy()
        that.emit('error', err)
      } else {
        that.fd = fd
        that.emit('open', fd)
      }
    })
  }

  function createReadStream (path, options) {
    return new fs.ReadStream(path, options)
  }

  function createWriteStream (path, options) {
    return new fs.WriteStream(path, options)
  }

  var fs$open = fs.open
  fs.open = open
  function open (path, flags, mode, cb) {
    if (typeof mode === 'function')
      cb = mode, mode = null

    return go$open(path, flags, mode, cb)

    function go$open (path, flags, mode, cb) {
      return fs$open(path, flags, mode, function (err, fd) {
        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
          enqueue([go$open, [path, flags, mode, cb]])
        else {
          if (typeof cb === 'function')
            cb.apply(this, arguments)
          retry()
        }
      })
    }
  }

  return fs
}

function enqueue (elem) {
  debug('ENQUEUE', elem[0].name, elem[1])
  fs[gracefulQueue].push(elem)
}

function retry () {
  var elem = fs[gracefulQueue].shift()
  if (elem) {
    debug('RETRY', elem[0].name, elem[1])
    elem[0].apply(null, elem[1])
  }
}
var Stream = require('stream').Stream

module.exports = legacy

function legacy (fs) {
  return {
    ReadStream: ReadStream,
    WriteStream: WriteStream
  }

  function ReadStream (path, options) {
    if (!(this instanceof ReadStream)) return new ReadStream(path, options);

    Stream.call(this);

    var self = this;

    this.path = path;
    this.fd = null;
    this.readable = true;
    this.paused = false;

    this.flags = 'r';
    this.mode = 438; /*=0666*/
    this.bufferSize = 64 * 1024;

    options = options || {};

    // Mixin options into this
    var keys = Object.keys(options);
    for (var index = 0, length = keys.length; index < length; index++) {
      var key = keys[index];
      this[key] = options[key];
    }

    if (this.encoding) this.setEncoding(this.encoding);

    if (this.start !== undefined) {
      if ('number' !== typeof this.start) {
        throw TypeError('start must be a Number');
      }
      if (this.end === undefined) {
        this.end = Infinity;
      } else if ('number' !== typeof this.end) {
        throw TypeError('end must be a Number');
      }

      if (this.start > this.end) {
        throw new Error('start must be <= end');
      }

      this.pos = this.start;
    }

    if (this.fd !== null) {
      process.nextTick(function() {
        self._read();
      });
      return;
    }

    fs.open(this.path, this.flags, this.mode, function (err, fd) {
      if (err) {
        self.emit('error', err);
        self.readable = false;
        return;
      }

      self.fd = fd;
      self.emit('open', fd);
      self._read();
    })
  }

  function WriteStream (path, options) {
    if (!(this instanceof WriteStream)) return new WriteStream(path, options);

    Stream.call(this);

    this.path = path;
    this.fd = null;
    this.writable = true;

    this.flags = 'w';
    this.encoding = 'binary';
    this.mode = 438; /*=0666*/
    this.bytesWritten = 0;

    options = options || {};

    // Mixin options into this
    var keys = Object.keys(options);
    for (var index = 0, length = keys.length; index < length; index++) {
      var key = keys[index];
      this[key] = options[key];
    }

    if (this.start !== undefined) {
      if ('number' !== typeof this.start) {
        throw TypeError('start must be a Number');
      }
      if (this.start < 0) {
        throw new Error('start must be >= zero');
      }

      this.pos = this.start;
    }

    this.busy = false;
    this._queue = [];

    if (this.fd === null) {
      this._open = fs.open;
      this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);
      this.flush();
    }
  }
}
The ISC License

Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "graceful-fs",
  "description": "A drop-in replacement for fs, making various improvements.",
  "version": "4.2.6",
  "repository": {
    "type": "git",
    "url": "https://github.com/isaacs/node-graceful-fs"
  },
  "main": "graceful-fs.js",
  "directories": {
    "test": "test"
  },
  "license": "ISC",
  "devDependencies": {
    "import-fresh": "^2.0.0",
    "mkdirp": "^0.5.0",
    "rimraf": "^2.2.8",
    "tap": "^12.7.0"
  },
  "files": [
    "fs.js",
    "graceful-fs.js",
    "legacy-streams.js",
    "polyfills.js",
    "clone.js"
  ]
}var constants = require('constants')

var origCwd = process.cwd
var cwd = null

var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform

process.cwd = function() {
  if (!cwd)
    cwd = origCwd.call(process)
  return cwd
}
try {
  process.cwd()
} catch (er) {}

// This check is needed until node.js 12 is required
if (typeof process.chdir === 'function') {
  var chdir = process.chdir
  process.chdir = function (d) {
    cwd = null
    chdir.call(process, d)
  }
  if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)
}

module.exports = patch

function patch (fs) {
  // (re-)implement some things that are known busted or missing.

  // lchmod, broken prior to 0.6.2
  // back-port the fix here.
  if (constants.hasOwnProperty('O_SYMLINK') &&
      process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
    patchLchmod(fs)
  }

  // lutimes implementation, or no-op
  if (!fs.lutimes) {
    patchLutimes(fs)
  }

  // https://github.com/isaacs/node-graceful-fs/issues/4
  // Chown should not fail on einval or eperm if non-root.
  // It should not fail on enosys ever, as this just indicates
  // that a fs doesn't support the intended operation.

  fs.chown = chownFix(fs.chown)
  fs.fchown = chownFix(fs.fchown)
  fs.lchown = chownFix(fs.lchown)

  fs.chmod = chmodFix(fs.chmod)
  fs.fchmod = chmodFix(fs.fchmod)
  fs.lchmod = chmodFix(fs.lchmod)

  fs.chownSync = chownFixSync(fs.chownSync)
  fs.fchownSync = chownFixSync(fs.fchownSync)
  fs.lchownSync = chownFixSync(fs.lchownSync)

  fs.chmodSync = chmodFixSync(fs.chmodSync)
  fs.fchmodSync = chmodFixSync(fs.fchmodSync)
  fs.lchmodSync = chmodFixSync(fs.lchmodSync)

  fs.stat = statFix(fs.stat)
  fs.fstat = statFix(fs.fstat)
  fs.lstat = statFix(fs.lstat)

  fs.statSync = statFixSync(fs.statSync)
  fs.fstatSync = statFixSync(fs.fstatSync)
  fs.lstatSync = statFixSync(fs.lstatSync)

  // if lchmod/lchown do not exist, then make them no-ops
  if (!fs.lchmod) {
    fs.lchmod = function (path, mode, cb) {
      if (cb) process.nextTick(cb)
    }
    fs.lchmodSync = function () {}
  }
  if (!fs.lchown) {
    fs.lchown = function (path, uid, gid, cb) {
      if (cb) process.nextTick(cb)
    }
    fs.lchownSync = function () {}
  }

  // on Windows, A/V software can lock the directory, causing this
  // to fail with an EACCES or EPERM if the directory contains newly
  // created files.  Try again on failure, for up to 60 seconds.

  // Set the timeout this long because some Windows Anti-Virus, such as Parity
  // bit9, may lock files for up to a minute, causing npm package install
  // failures. Also, take care to yield the scheduler. Windows scheduling gives
  // CPU to a busy looping process, which can cause the program causing the lock
  // contention to be starved of CPU by node, so the contention doesn't resolve.
  if (platform === "win32") {
    fs.rename = (function (fs$rename) { return function (from, to, cb) {
      var start = Date.now()
      var backoff = 0;
      fs$rename(from, to, function CB (er) {
        if (er
            && (er.code === "EACCES" || er.code === "EPERM")
            && Date.now() - start < 60000) {
          setTimeout(function() {
            fs.stat(to, function (stater, st) {
              if (stater && stater.code === "ENOENT")
                fs$rename(from, to, CB);
              else
                cb(er)
            })
          }, backoff)
          if (backoff < 100)
            backoff += 10;
          return;
        }
        if (cb) cb(er)
      })
    }})(fs.rename)
  }

  // if read() returns EAGAIN, then just try it again.
  fs.read = (function (fs$read) {
    function read (fd, buffer, offset, length, position, callback_) {
      var callback
      if (callback_ && typeof callback_ === 'function') {
        var eagCounter = 0
        callback = function (er, _, __) {
          if (er && er.code === 'EAGAIN' && eagCounter < 10) {
            eagCounter ++
            return fs$read.call(fs, fd, buffer, offset, length, position, callback)
          }
          callback_.apply(this, arguments)
        }
      }
      return fs$read.call(fs, fd, buffer, offset, length, position, callback)
    }

    // This ensures `util.promisify` works as it does for native `fs.read`.
    if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)
    return read
  })(fs.read)

  fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
    var eagCounter = 0
    while (true) {
      try {
        return fs$readSync.call(fs, fd, buffer, offset, length, position)
      } catch (er) {
        if (er.code === 'EAGAIN' && eagCounter < 10) {
          eagCounter ++
          continue
        }
        throw er
      }
    }
  }})(fs.readSync)

  function patchLchmod (fs) {
    fs.lchmod = function (path, mode, callback) {
      fs.open( path
             , constants.O_WRONLY | constants.O_SYMLINK
             , mode
             , function (err, fd) {
        if (err) {
          if (callback) callback(err)
          return
        }
        // prefer to return the chmod error, if one occurs,
        // but still try to close, and report closing errors if they occur.
        fs.fchmod(fd, mode, function (err) {
          fs.close(fd, function(err2) {
            if (callback) callback(err || err2)
          })
        })
      })
    }

    fs.lchmodSync = function (path, mode) {
      var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)

      // prefer to return the chmod error, if one occurs,
      // but still try to close, and report closing errors if they occur.
      var threw = true
      var ret
      try {
        ret = fs.fchmodSync(fd, mode)
        threw = false
      } finally {
        if (threw) {
          try {
            fs.closeSync(fd)
          } catch (er) {}
        } else {
          fs.closeSync(fd)
        }
      }
      return ret
    }
  }

  function patchLutimes (fs) {
    if (constants.hasOwnProperty("O_SYMLINK")) {
      fs.lutimes = function (path, at, mt, cb) {
        fs.open(path, constants.O_SYMLINK, function (er, fd) {
          if (er) {
            if (cb) cb(er)
            return
          }
          fs.futimes(fd, at, mt, function (er) {
            fs.close(fd, function (er2) {
              if (cb) cb(er || er2)
            })
          })
        })
      }

      fs.lutimesSync = function (path, at, mt) {
        var fd = fs.openSync(path, constants.O_SYMLINK)
        var ret
        var threw = true
        try {
          ret = fs.futimesSync(fd, at, mt)
          threw = false
        } finally {
          if (threw) {
            try {
              fs.closeSync(fd)
            } catch (er) {}
          } else {
            fs.closeSync(fd)
          }
        }
        return ret
      }

    } else {
      fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
      fs.lutimesSync = function () {}
    }
  }

  function chmodFix (orig) {
    if (!orig) return orig
    return function (target, mode, cb) {
      return orig.call(fs, target, mode, function (er) {
        if (chownErOk(er)) er = null
        if (cb) cb.apply(this, arguments)
      })
    }
  }

  function chmodFixSync (orig) {
    if (!orig) return orig
    return function (target, mode) {
      try {
        return orig.call(fs, target, mode)
      } catch (er) {
        if (!chownErOk(er)) throw er
      }
    }
  }


  function chownFix (orig) {
    if (!orig) return orig
    return function (target, uid, gid, cb) {
      return orig.call(fs, target, uid, gid, function (er) {
        if (chownErOk(er)) er = null
        if (cb) cb.apply(this, arguments)
      })
    }
  }

  function chownFixSync (orig) {
    if (!orig) return orig
    return function (target, uid, gid) {
      try {
        return orig.call(fs, target, uid, gid)
      } catch (er) {
        if (!chownErOk(er)) throw er
      }
    }
  }

  function statFix (orig) {
    if (!orig) return orig
    // Older versions of Node erroneously returned signed integers for
    // uid + gid.
    return function (target, options, cb) {
      if (typeof options === 'function') {
        cb = options
        options = null
      }
      function callback (er, stats) {
        if (stats) {
          if (stats.uid < 0) stats.uid += 0x100000000
          if (stats.gid < 0) stats.gid += 0x100000000
        }
        if (cb) cb.apply(this, arguments)
      }
      return options ? orig.call(fs, target, options, callback)
        : orig.call(fs, target, callback)
    }
  }

  function statFixSync (orig) {
    if (!orig) return orig
    // Older versions of Node erroneously returned signed integers for
    // uid + gid.
    return function (target, options) {
      var stats = options ? orig.call(fs, target, options)
        : orig.call(fs, target)
      if (stats.uid < 0) stats.uid += 0x100000000
      if (stats.gid < 0) stats.gid += 0x100000000
      return stats;
    }
  }

  // ENOSYS means that the fs doesn't support the op. Just ignore
  // that, because it doesn't matter.
  //
  // if there's no getuid, or if getuid() is something other
  // than 0, and the error is EINVAL or EPERM, then just ignore
  // it.
  //
  // This specific case is a silent failure in cp, install, tar,
  // and most other unix tools that manage permissions.
  //
  // When running as root, or if other types of errors are
  // encountered, then it's strict.
  function chownErOk (er) {
    if (!er)
      return true

    if (er.code === "ENOSYS")
      return true

    var nonroot = !process.getuid || process.getuid() !== 0
    if (nonroot) {
      if (er.code === "EINVAL" || er.code === "EPERM")
        return true
    }

    return false
  }
}
version: 2
updates:
- package-ecosystem: npm
  directory: "/"
  schedule:
    interval: daily
    time: "04:00"
  open-pull-requests-limit: 10
name: build

on: [push, pull_request]

env:
  NODE_EXTRA_CA_CERTS: test/fixtures/certs_unit_test.pem

jobs:
  test:
    name: Test
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        node-version: [14.x, 16.x, 18.x]
        os: [ubuntu-latest, windows-latest, macOS-latest]

    steps:
    - uses: actions/checkout@v2

    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}

    - name: Install
      run: |
        npm install

    - name: Test / 1
      run: |
        npm run test-ci

    - name: Test / 2
      run: |
        ./test/hang-socket/runner.sh
'use strict'

const https = require('https')
const http = require('http')
const { URL } = require('url')

class HttpProxyAgent extends http.Agent {
  constructor (options) {
    const { proxy, proxyRequestOptions, ...opts } = options
    super(opts)
    this.proxy = typeof proxy === 'string'
      ? new URL(proxy)
      : proxy
    this.proxyRequestOptions = proxyRequestOptions || {}
  }

  createConnection (options, callback) {
    const requestOptions = {
      ...this.proxyRequestOptions,
      method: 'CONNECT',
      host: this.proxy.hostname,
      port: this.proxy.port,
      path: `${options.host}:${options.port}`,
      setHost: false,
      headers: { ...this.proxyRequestOptions.headers, connection: this.keepAlive ? 'keep-alive' : 'close', host: `${options.host}:${options.port}` },
      agent: false,
      timeout: options.timeout || 0
    }

    if (this.proxy.username || this.proxy.password) {
      const base64 = Buffer.from(`${decodeURIComponent(this.proxy.username || '')}:${decodeURIComponent(this.proxy.password || '')}`).toString('base64')
      requestOptions.headers['proxy-authorization'] = `Basic ${base64}`
    }

    if (this.proxy.protocol === 'https:') {
      requestOptions.servername = this.proxy.hostname
    }

    const request = (this.proxy.protocol === 'http:' ? http : https).request(requestOptions)
    request.once('connect', (response, socket, head) => {
      request.removeAllListeners()
      socket.removeAllListeners()
      if (response.statusCode === 200) {
        callback(null, socket)
      } else {
        socket.destroy()
        callback(new Error(`Bad response: ${response.statusCode}`), null)
      }
    })

    request.once('timeout', () => {
      request.destroy(new Error('Proxy timeout'))
    })

    request.once('error', err => {
      request.removeAllListeners()
      callback(err, null)
    })

    request.end()
  }
}

class HttpsProxyAgent extends https.Agent {
  constructor (options) {
    const { proxy, proxyRequestOptions, ...opts } = options
    super(opts)
    this.proxy = typeof proxy === 'string'
      ? new URL(proxy)
      : proxy
    this.proxyRequestOptions = proxyRequestOptions || {}
  }

  createConnection (options, callback) {
    const requestOptions = {
      ...this.proxyRequestOptions,
      method: 'CONNECT',
      host: this.proxy.hostname,
      port: this.proxy.port,
      path: `${options.host}:${options.port}`,
      setHost: false,
      headers: { ...this.proxyRequestOptions.headers, connection: this.keepAlive ? 'keep-alive' : 'close', host: `${options.host}:${options.port}` },
      agent: false,
      timeout: options.timeout || 0
    }

    if (this.proxy.username || this.proxy.password) {
      const base64 = Buffer.from(`${decodeURIComponent(this.proxy.username || '')}:${decodeURIComponent(this.proxy.password || '')}`).toString('base64')
      requestOptions.headers['proxy-authorization'] = `Basic ${base64}`
    }

    // Necessary for the TLS check with the proxy to succeed.
    if (this.proxy.protocol === 'https:') {
      requestOptions.servername = this.proxy.hostname
    }

    const request = (this.proxy.protocol === 'http:' ? http : https).request(requestOptions)
    request.once('connect', (response, socket, head) => {
      request.removeAllListeners()
      socket.removeAllListeners()
      if (response.statusCode === 200) {
        const secureSocket = super.createConnection({ ...options, socket })
        callback(null, secureSocket)
      } else {
        socket.destroy()
        callback(new Error(`Bad response: ${response.statusCode}`), null)
      }
    })

    request.once('timeout', () => {
      request.destroy(new Error('Proxy timeout'))
    })

    request.once('error', err => {
      request.removeAllListeners()
      callback(err, null)
    })

    request.end()
  }
}

module.exports = {
  HttpProxyAgent,
  HttpsProxyAgent
}
import mod from './index.js'

export default mod
export const HttpProxyAgent = mod.HttpProxyAgent
export const HttpsProxyAgent = mod.HttpsProxyAgent
MIT License

Copyright (c) 2020 Tomas Della Vedova

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "hpagent",
  "version": "1.2.0",
  "description": "A ready to use http and https agent for working with proxies that keeps connections alive!",
  "main": "index.js",
  "types": "index.d.ts",
  "exports": {
    ".": {
      "require": "./index.js",
      "import": "./index.mjs",
      "types": "./index.d.ts"
    },
    "./*": "./*.js"
  },
  "engines": {
    "node": ">=14"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/delvedor/hpagent.git"
  },
  "author": "Tomas Della Vedova",
  "license": "MIT",
  "homepage": "https://github.com/delvedor/hpagent#readme",
  "tsd": {
    "directory": "test"
  },
  "devDependencies": {
    "ava": "^4.2.0",
    "got": "^11.8.3",
    "needle": "^3.1.0",
    "node-fetch": "^2.6.7",
    "proxy": "^1.0.2",
    "simple-get": "^4.0.1",
    "standard": "^17.0.0",
    "tsd": "^0.24.1"
  }
}1.4.1 / 2019-04-28
==================

  * deps: http-errors@~1.7.2
    - deps: setprototypeof@1.1.1

1.4.0 / 2018-09-09
==================

  * Add `assert.ok()`
  * deps: http-errors@~1.7.1
    - Set constructor name when possible
    - deps: depd@~1.1.2
    - deps: setprototypeof@1.1.0
    - deps: statuses@'>= 1.5.0 < 2'

1.3.0 / 2017-05-07
==================

  * deps: deep-equal@~1.0.1
    - Fix `null == undefined` for non-strict compares
  * deps: http-errors@~1.6.1
    - Accept custom 4xx and 5xx status codes in factory
    - Deprecate using non-error status codes
    - Make `message` property enumerable for `HttpError`s
    - Support new code `421 Misdirected Request`
    - Use `setprototypeof` module to replace `__proto__` setting
    - deps: inherits@2.0.3
    - deps: setprototypeof@1.0.3
    - deps: statuses@'>= 1.3.1 < 2'
    - perf: enable strict mode

1.2.0 / 2016-02-27
==================

  * deps: http-errors@~1.4.0

1.1.1 / 2015-02-13
==================

  * deps: deep-equal@~1.0.0
  * dpes: http-errors@~1.3.1

1.1.0 / 2014-12-10
==================

  * Add equality methods
    - `assert.deepEqual()`
    - `assert.equal()`
    - `assert.notDeepEqual()`
    - `assert.notEqual()`
    - `assert.notStrictEqual()`
    - `assert.strictEqual()`

1.0.2 / 2014-09-10
==================

  * Fix setting `err.expose` on invalid status
  * Use `http-errors` module
  * perf: remove duplicate status check

1.0.1 / 2014-01-20
==================

  * Fix typo causing `err.message` to be `undefined`

1.0.0 / 2014-01-20
==================

  * Default status to 500
  * Set `err.expose` to `false` for 5xx codes
var createError = require('http-errors')
var eql = require('deep-equal')

module.exports = assert

function assert (value, status, msg, opts) {
  if (value) return
  throw createError(status, msg, opts)
}

assert.equal = function (a, b, status, msg, opts) {
  assert(a == b, status, msg, opts) // eslint-disable-line eqeqeq
}

assert.notEqual = function (a, b, status, msg, opts) {
  assert(a != b, status, msg, opts) // eslint-disable-line eqeqeq
}

assert.ok = function (value, status, msg, opts) {
  assert(value, status, msg, opts)
}

assert.strictEqual = function (a, b, status, msg, opts) {
  assert(a === b, status, msg, opts)
}

assert.notStrictEqual = function (a, b, status, msg, opts) {
  assert(a !== b, status, msg, opts)
}

assert.deepEqual = function (a, b, status, msg, opts) {
  assert(eql(a, b), status, msg, opts)
}

assert.notDeepEqual = function (a, b, status, msg, opts) {
  assert(!eql(a, b), status, msg, opts)
}
(The MIT License)

Copyright (c) 2014 

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1.1.2 / 2018-01-11
==================

  * perf: remove argument reassignment
  * Support Node.js 0.6 to 9.x

1.1.1 / 2017-07-27
==================

  * Remove unnecessary `Buffer` loading
  * Support Node.js 0.6 to 8.x

1.1.0 / 2015-09-14
==================

  * Enable strict mode in more places
  * Support io.js 3.x
  * Support io.js 2.x
  * Support web browser loading
    - Requires bundler like Browserify or webpack

1.0.1 / 2015-04-07
==================

  * Fix `TypeError`s when under `'use strict'` code
  * Fix useless type name on auto-generated messages
  * Support io.js 1.x
  * Support Node.js 0.12

1.0.0 / 2014-09-17
==================

  * No changes

0.4.5 / 2014-09-09
==================

  * Improve call speed to functions using the function wrapper
  * Support Node.js 0.6

0.4.4 / 2014-07-27
==================

  * Work-around v8 generating empty stack traces

0.4.3 / 2014-07-26
==================

  * Fix exception when global `Error.stackTraceLimit` is too low

0.4.2 / 2014-07-19
==================

  * Correct call site for wrapped functions and properties

0.4.1 / 2014-07-19
==================

  * Improve automatic message generation for function properties

0.4.0 / 2014-07-19
==================

  * Add `TRACE_DEPRECATION` environment variable
  * Remove non-standard grey color from color output
  * Support `--no-deprecation` argument
  * Support `--trace-deprecation` argument
  * Support `deprecate.property(fn, prop, message)`

0.3.0 / 2014-06-16
==================

  * Add `NO_DEPRECATION` environment variable

0.2.0 / 2014-06-15
==================

  * Add `deprecate.property(obj, prop, message)`
  * Remove `supports-color` dependency for node.js 0.8

0.1.0 / 2014-06-15
==================

  * Add `deprecate.function(fn, message)`
  * Add `process.on('deprecation', fn)` emitter
  * Automatically generate message when omitted from `deprecate()`

0.0.1 / 2014-06-15
==================

  * Fix warning for dynamic calls at singe call site

0.0.0 / 2014-06-15
==================

  * Initial implementation
/*!
 * depd
 * Copyright(c) 2014-2017 Douglas Christopher Wilson
 * MIT Licensed
 */

/**
 * Module dependencies.
 */

var callSiteToString = require('./lib/compat').callSiteToString
var eventListenerCount = require('./lib/compat').eventListenerCount
var relative = require('path').relative

/**
 * Module exports.
 */

module.exports = depd

/**
 * Get the path to base files on.
 */

var basePath = process.cwd()

/**
 * Determine if namespace is contained in the string.
 */

function containsNamespace (str, namespace) {
  var vals = str.split(/[ ,]+/)
  var ns = String(namespace).toLowerCase()

  for (var i = 0; i < vals.length; i++) {
    var val = vals[i]

    // namespace contained
    if (val && (val === '*' || val.toLowerCase() === ns)) {
      return true
    }
  }

  return false
}

/**
 * Convert a data descriptor to accessor descriptor.
 */

function convertDataDescriptorToAccessor (obj, prop, message) {
  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)
  var value = descriptor.value

  descriptor.get = function getter () { return value }

  if (descriptor.writable) {
    descriptor.set = function setter (val) { return (value = val) }
  }

  delete descriptor.value
  delete descriptor.writable

  Object.defineProperty(obj, prop, descriptor)

  return descriptor
}

/**
 * Create arguments string to keep arity.
 */

function createArgumentsString (arity) {
  var str = ''

  for (var i = 0; i < arity; i++) {
    str += ', arg' + i
  }

  return str.substr(2)
}

/**
 * Create stack string from stack.
 */

function createStackString (stack) {
  var str = this.name + ': ' + this.namespace

  if (this.message) {
    str += ' deprecated ' + this.message
  }

  for (var i = 0; i < stack.length; i++) {
    str += '\n    at ' + callSiteToString(stack[i])
  }

  return str
}

/**
 * Create deprecate for namespace in caller.
 */

function depd (namespace) {
  if (!namespace) {
    throw new TypeError('argument namespace is required')
  }

  var stack = getStack()
  var site = callSiteLocation(stack[1])
  var file = site[0]

  function deprecate (message) {
    // call to self as log
    log.call(deprecate, message)
  }

  deprecate._file = file
  deprecate._ignored = isignored(namespace)
  deprecate._namespace = namespace
  deprecate._traced = istraced(namespace)
  deprecate._warned = Object.create(null)

  deprecate.function = wrapfunction
  deprecate.property = wrapproperty

  return deprecate
}

/**
 * Determine if namespace is ignored.
 */

function isignored (namespace) {
  /* istanbul ignore next: tested in a child processs */
  if (process.noDeprecation) {
    // --no-deprecation support
    return true
  }

  var str = process.env.NO_DEPRECATION || ''

  // namespace ignored
  return containsNamespace(str, namespace)
}

/**
 * Determine if namespace is traced.
 */

function istraced (namespace) {
  /* istanbul ignore next: tested in a child processs */
  if (process.traceDeprecation) {
    // --trace-deprecation support
    return true
  }

  var str = process.env.TRACE_DEPRECATION || ''

  // namespace traced
  return containsNamespace(str, namespace)
}

/**
 * Display deprecation message.
 */

function log (message, site) {
  var haslisteners = eventListenerCount(process, 'deprecation') !== 0

  // abort early if no destination
  if (!haslisteners && this._ignored) {
    return
  }

  var caller
  var callFile
  var callSite
  var depSite
  var i = 0
  var seen = false
  var stack = getStack()
  var file = this._file

  if (site) {
    // provided site
    depSite = site
    callSite = callSiteLocation(stack[1])
    callSite.name = depSite.name
    file = callSite[0]
  } else {
    // get call site
    i = 2
    depSite = callSiteLocation(stack[i])
    callSite = depSite
  }

  // get caller of deprecated thing in relation to file
  for (; i < stack.length; i++) {
    caller = callSiteLocation(stack[i])
    callFile = caller[0]

    if (callFile === file) {
      seen = true
    } else if (callFile === this._file) {
      file = this._file
    } else if (seen) {
      break
    }
  }

  var key = caller
    ? depSite.join(':') + '__' + caller.join(':')
    : undefined

  if (key !== undefined && key in this._warned) {
    // already warned
    return
  }

  this._warned[key] = true

  // generate automatic message from call site
  var msg = message
  if (!msg) {
    msg = callSite === depSite || !callSite.name
      ? defaultMessage(depSite)
      : defaultMessage(callSite)
  }

  // emit deprecation if listeners exist
  if (haslisteners) {
    var err = DeprecationError(this._namespace, msg, stack.slice(i))
    process.emit('deprecation', err)
    return
  }

  // format and write message
  var format = process.stderr.isTTY
    ? formatColor
    : formatPlain
  var output = format.call(this, msg, caller, stack.slice(i))
  process.stderr.write(output + '\n', 'utf8')
}

/**
 * Get call site location as array.
 */

function callSiteLocation (callSite) {
  var file = callSite.getFileName() || '<anonymous>'
  var line = callSite.getLineNumber()
  var colm = callSite.getColumnNumber()

  if (callSite.isEval()) {
    file = callSite.getEvalOrigin() + ', ' + file
  }

  var site = [file, line, colm]

  site.callSite = callSite
  site.name = callSite.getFunctionName()

  return site
}

/**
 * Generate a default message from the site.
 */

function defaultMessage (site) {
  var callSite = site.callSite
  var funcName = site.name

  // make useful anonymous name
  if (!funcName) {
    funcName = '<anonymous@' + formatLocation(site) + '>'
  }

  var context = callSite.getThis()
  var typeName = context && callSite.getTypeName()

  // ignore useless type name
  if (typeName === 'Object') {
    typeName = undefined
  }

  // make useful type name
  if (typeName === 'Function') {
    typeName = context.name || typeName
  }

  return typeName && callSite.getMethodName()
    ? typeName + '.' + funcName
    : funcName
}

/**
 * Format deprecation message without color.
 */

function formatPlain (msg, caller, stack) {
  var timestamp = new Date().toUTCString()

  var formatted = timestamp +
    ' ' + this._namespace +
    ' deprecated ' + msg

  // add stack trace
  if (this._traced) {
    for (var i = 0; i < stack.length; i++) {
      formatted += '\n    at ' + callSiteToString(stack[i])
    }

    return formatted
  }

  if (caller) {
    formatted += ' at ' + formatLocation(caller)
  }

  return formatted
}

/**
 * Format deprecation message with color.
 */

function formatColor (msg, caller, stack) {
  var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan
    ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow
    ' \x1b[0m' + msg + '\x1b[39m' // reset

  // add stack trace
  if (this._traced) {
    for (var i = 0; i < stack.length; i++) {
      formatted += '\n    \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan
    }

    return formatted
  }

  if (caller) {
    formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan
  }

  return formatted
}

/**
 * Format call site location.
 */

function formatLocation (callSite) {
  return relative(basePath, callSite[0]) +
    ':' + callSite[1] +
    ':' + callSite[2]
}

/**
 * Get the stack as array of call sites.
 */

function getStack () {
  var limit = Error.stackTraceLimit
  var obj = {}
  var prep = Error.prepareStackTrace

  Error.prepareStackTrace = prepareObjectStackTrace
  Error.stackTraceLimit = Math.max(10, limit)

  // capture the stack
  Error.captureStackTrace(obj)

  // slice this function off the top
  var stack = obj.stack.slice(1)

  Error.prepareStackTrace = prep
  Error.stackTraceLimit = limit

  return stack
}

/**
 * Capture call site stack from v8.
 */

function prepareObjectStackTrace (obj, stack) {
  return stack
}

/**
 * Return a wrapped function in a deprecation message.
 */

function wrapfunction (fn, message) {
  if (typeof fn !== 'function') {
    throw new TypeError('argument fn must be a function')
  }

  var args = createArgumentsString(fn.length)
  var deprecate = this // eslint-disable-line no-unused-vars
  var stack = getStack()
  var site = callSiteLocation(stack[1])

  site.name = fn.name

   // eslint-disable-next-line no-eval
  var deprecatedfn = eval('(function (' + args + ') {\n' +
    '"use strict"\n' +
    'log.call(deprecate, message, site)\n' +
    'return fn.apply(this, arguments)\n' +
    '})')

  return deprecatedfn
}

/**
 * Wrap property in a deprecation message.
 */

function wrapproperty (obj, prop, message) {
  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
    throw new TypeError('argument obj must be object')
  }

  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)

  if (!descriptor) {
    throw new TypeError('must call property on owner object')
  }

  if (!descriptor.configurable) {
    throw new TypeError('property must be configurable')
  }

  var deprecate = this
  var stack = getStack()
  var site = callSiteLocation(stack[1])

  // set site name
  site.name = prop

  // convert data descriptor
  if ('value' in descriptor) {
    descriptor = convertDataDescriptorToAccessor(obj, prop, message)
  }

  var get = descriptor.get
  var set = descriptor.set

  // wrap getter
  if (typeof get === 'function') {
    descriptor.get = function getter () {
      log.call(deprecate, message, site)
      return get.apply(this, arguments)
    }
  }

  // wrap setter
  if (typeof set === 'function') {
    descriptor.set = function setter () {
      log.call(deprecate, message, site)
      return set.apply(this, arguments)
    }
  }

  Object.defineProperty(obj, prop, descriptor)
}

/**
 * Create DeprecationError for deprecation
 */

function DeprecationError (namespace, message, stack) {
  var error = new Error()
  var stackString

  Object.defineProperty(error, 'constructor', {
    value: DeprecationError
  })

  Object.defineProperty(error, 'message', {
    configurable: true,
    enumerable: false,
    value: message,
    writable: true
  })

  Object.defineProperty(error, 'name', {
    enumerable: false,
    configurable: true,
    value: 'DeprecationError',
    writable: true
  })

  Object.defineProperty(error, 'namespace', {
    configurable: true,
    enumerable: false,
    value: namespace,
    writable: true
  })

  Object.defineProperty(error, 'stack', {
    configurable: true,
    enumerable: false,
    get: function () {
      if (stackString !== undefined) {
        return stackString
      }

      // prepare stack trace
      return (stackString = createStackString.call(this, stack))
    },
    set: function setter (val) {
      stackString = val
    }
  })

  return error
}
/*!
 * depd
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = depd

/**
 * Create deprecate for namespace in caller.
 */

function depd (namespace) {
  if (!namespace) {
    throw new TypeError('argument namespace is required')
  }

  function deprecate (message) {
    // no-op in browser
  }

  deprecate._file = undefined
  deprecate._ignored = true
  deprecate._namespace = namespace
  deprecate._traced = false
  deprecate._warned = Object.create(null)

  deprecate.function = wrapfunction
  deprecate.property = wrapproperty

  return deprecate
}

/**
 * Return a wrapped function in a deprecation message.
 *
 * This is a no-op version of the wrapper, which does nothing but call
 * validation.
 */

function wrapfunction (fn, message) {
  if (typeof fn !== 'function') {
    throw new TypeError('argument fn must be a function')
  }

  return fn
}

/**
 * Wrap property in a deprecation message.
 *
 * This is a no-op version of the wrapper, which does nothing but call
 * validation.
 */

function wrapproperty (obj, prop, message) {
  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
    throw new TypeError('argument obj must be object')
  }

  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)

  if (!descriptor) {
    throw new TypeError('must call property on owner object')
  }

  if (!descriptor.configurable) {
    throw new TypeError('property must be configurable')
  }
}
/*!
 * depd
 * Copyright(c) 2014 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 */

module.exports = callSiteToString

/**
 * Format a CallSite file location to a string.
 */

function callSiteFileLocation (callSite) {
  var fileName
  var fileLocation = ''

  if (callSite.isNative()) {
    fileLocation = 'native'
  } else if (callSite.isEval()) {
    fileName = callSite.getScriptNameOrSourceURL()
    if (!fileName) {
      fileLocation = callSite.getEvalOrigin()
    }
  } else {
    fileName = callSite.getFileName()
  }

  if (fileName) {
    fileLocation += fileName

    var lineNumber = callSite.getLineNumber()
    if (lineNumber != null) {
      fileLocation += ':' + lineNumber

      var columnNumber = callSite.getColumnNumber()
      if (columnNumber) {
        fileLocation += ':' + columnNumber
      }
    }
  }

  return fileLocation || 'unknown source'
}

/**
 * Format a CallSite to a string.
 */

function callSiteToString (callSite) {
  var addSuffix = true
  var fileLocation = callSiteFileLocation(callSite)
  var functionName = callSite.getFunctionName()
  var isConstructor = callSite.isConstructor()
  var isMethodCall = !(callSite.isToplevel() || isConstructor)
  var line = ''

  if (isMethodCall) {
    var methodName = callSite.getMethodName()
    var typeName = getConstructorName(callSite)

    if (functionName) {
      if (typeName && functionName.indexOf(typeName) !== 0) {
        line += typeName + '.'
      }

      line += functionName

      if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) {
        line += ' [as ' + methodName + ']'
      }
    } else {
      line += typeName + '.' + (methodName || '<anonymous>')
    }
  } else if (isConstructor) {
    line += 'new ' + (functionName || '<anonymous>')
  } else if (functionName) {
    line += functionName
  } else {
    addSuffix = false
    line += fileLocation
  }

  if (addSuffix) {
    line += ' (' + fileLocation + ')'
  }

  return line
}

/**
 * Get constructor name of reviver.
 */

function getConstructorName (obj) {
  var receiver = obj.receiver
  return (receiver.constructor && receiver.constructor.name) || null
}
/*!
 * depd
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = eventListenerCount

/**
 * Get the count of listeners on an event emitter of a specific type.
 */

function eventListenerCount (emitter, type) {
  return emitter.listeners(type).length
}
/*!
 * depd
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var EventEmitter = require('events').EventEmitter

/**
 * Module exports.
 * @public
 */

lazyProperty(module.exports, 'callSiteToString', function callSiteToString () {
  var limit = Error.stackTraceLimit
  var obj = {}
  var prep = Error.prepareStackTrace

  function prepareObjectStackTrace (obj, stack) {
    return stack
  }

  Error.prepareStackTrace = prepareObjectStackTrace
  Error.stackTraceLimit = 2

  // capture the stack
  Error.captureStackTrace(obj)

  // slice the stack
  var stack = obj.stack.slice()

  Error.prepareStackTrace = prep
  Error.stackTraceLimit = limit

  return stack[0].toString ? toString : require('./callsite-tostring')
})

lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () {
  return EventEmitter.listenerCount || require('./event-listener-count')
})

/**
 * Define a lazy property.
 */

function lazyProperty (obj, prop, getter) {
  function get () {
    var val = getter()

    Object.defineProperty(obj, prop, {
      configurable: true,
      enumerable: true,
      value: val
    })

    return val
  }

  Object.defineProperty(obj, prop, {
    configurable: true,
    enumerable: true,
    get: get
  })
}

/**
 * Call toString() on the obj
 */

function toString (obj) {
  return obj.toString()
}
(The MIT License)

Copyright (c) 2014-2017 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "depd",
  "description": "Deprecate all the things",
  "version": "1.1.2",
  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
  "license": "MIT",
  "repository": "dougwilson/nodejs-depd",
  "browser": "lib/browser/index.js",
  "devDependencies": {
    "benchmark": "2.1.4",
    "beautify-benchmark": "0.2.4",
    "eslint": "3.19.0",
    "eslint-config-standard": "7.1.0",
    "eslint-plugin-markdown": "1.0.0-beta.7",
    "eslint-plugin-promise": "3.6.0",
    "eslint-plugin-standard": "3.0.1",
    "istanbul": "0.4.5",
    "mocha": "~1.21.5"
  },
  "files": [
    "lib/",
    "History.md",
    "LICENSE",
    "index.js",
    "Readme.md"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}2019-06-24 / 1.7.3
==================

  * deps: inherits@2.0.4

2019-02-18 / 1.7.2
==================

  * deps: setprototypeof@1.1.1

2018-09-08 / 1.7.1
==================

  * Fix error creating objects in some environments

2018-07-30 / 1.7.0
==================

  * Set constructor name when possible
  * Use `toidentifier` module to make class names
  * deps: statuses@'>= 1.5.0 < 2'

2018-03-29 / 1.6.3
==================

  * deps: depd@~1.1.2
    - perf: remove argument reassignment
  * deps: setprototypeof@1.1.0
  * deps: statuses@'>= 1.4.0 < 2'

2017-08-04 / 1.6.2
==================

  * deps: depd@1.1.1
    - Remove unnecessary `Buffer` loading

2017-02-20 / 1.6.1
==================

  * deps: setprototypeof@1.0.3
    - Fix shim for old browsers

2017-02-14 / 1.6.0
==================

  * Accept custom 4xx and 5xx status codes in factory
  * Add deprecation message to `"I'mateapot"` export
  * Deprecate passing status code as anything except first argument in factory
  * Deprecate using non-error status codes
  * Make `message` property enumerable for `HttpError`s

2016-11-16 / 1.5.1
==================

  * deps: inherits@2.0.3
    - Fix issue loading in browser
  * deps: setprototypeof@1.0.2
  * deps: statuses@'>= 1.3.1 < 2'

2016-05-18 / 1.5.0
==================

  * Support new code `421 Misdirected Request`
  * Use `setprototypeof` module to replace `__proto__` setting
  * deps: statuses@'>= 1.3.0 < 2'
    - Add `421 Misdirected Request`
    - perf: enable strict mode
  * perf: enable strict mode

2016-01-28 / 1.4.0
==================

  * Add `HttpError` export, for `err instanceof createError.HttpError`
  * deps: inherits@2.0.1
  * deps: statuses@'>= 1.2.1 < 2'
    - Fix message for status 451
    - Remove incorrect nginx status code

2015-02-02 / 1.3.1
==================

  * Fix regression where status can be overwritten in `createError` `props`

2015-02-01 / 1.3.0
==================

  * Construct errors using defined constructors from `createError`
  * Fix error names that are not identifiers
    - `createError["I'mateapot"]` is now `createError.ImATeapot`
  * Set a meaningful `name` property on constructed errors

2014-12-09 / 1.2.8
==================

  * Fix stack trace from exported function
  * Remove `arguments.callee` usage

2014-10-14 / 1.2.7
==================

  * Remove duplicate line

2014-10-02 / 1.2.6
==================

  * Fix `expose` to be `true` for `ClientError` constructor

2014-09-28 / 1.2.5
==================

  * deps: statuses@1

2014-09-21 / 1.2.4
==================

  * Fix dependency version to work with old `npm`s

2014-09-21 / 1.2.3
==================

  * deps: statuses@~1.1.0

2014-09-21 / 1.2.2
==================

  * Fix publish error

2014-09-21 / 1.2.1
==================

  * Support Node.js 0.6
  * Use `inherits` instead of `util`

2014-09-09 / 1.2.0
==================

  * Fix the way inheriting functions
  * Support `expose` being provided in properties argument

2014-09-08 / 1.1.0
==================

  * Default status to 500
  * Support provided `error` to extend

2014-09-08 / 1.0.1
==================

  * Fix accepting string message

2014-09-08 / 1.0.0
==================

  * Initial release
/*!
 * http-errors
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2016 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var deprecate = require('depd')('http-errors')
var setPrototypeOf = require('setprototypeof')
var statuses = require('statuses')
var inherits = require('inherits')
var toIdentifier = require('toidentifier')

/**
 * Module exports.
 * @public
 */

module.exports = createError
module.exports.HttpError = createHttpErrorConstructor()

// Populate exports for all constructors
populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)

/**
 * Get the code class of a status code.
 * @private
 */

function codeClass (status) {
  return Number(String(status).charAt(0) + '00')
}

/**
 * Create a new HTTP Error.
 *
 * @returns {Error}
 * @public
 */

function createError () {
  // so much arity going on ~_~
  var err
  var msg
  var status = 500
  var props = {}
  for (var i = 0; i < arguments.length; i++) {
    var arg = arguments[i]
    if (arg instanceof Error) {
      err = arg
      status = err.status || err.statusCode || status
      continue
    }
    switch (typeof arg) {
      case 'string':
        msg = arg
        break
      case 'number':
        status = arg
        if (i !== 0) {
          deprecate('non-first-argument status code; replace with createError(' + arg + ', ...)')
        }
        break
      case 'object':
        props = arg
        break
    }
  }

  if (typeof status === 'number' && (status < 400 || status >= 600)) {
    deprecate('non-error status code; use only 4xx or 5xx status codes')
  }

  if (typeof status !== 'number' ||
    (!statuses[status] && (status < 400 || status >= 600))) {
    status = 500
  }

  // constructor
  var HttpError = createError[status] || createError[codeClass(status)]

  if (!err) {
    // create error
    err = HttpError
      ? new HttpError(msg)
      : new Error(msg || statuses[status])
    Error.captureStackTrace(err, createError)
  }

  if (!HttpError || !(err instanceof HttpError) || err.status !== status) {
    // add properties to generic error
    err.expose = status < 500
    err.status = err.statusCode = status
  }

  for (var key in props) {
    if (key !== 'status' && key !== 'statusCode') {
      err[key] = props[key]
    }
  }

  return err
}

/**
 * Create HTTP error abstract base class.
 * @private
 */

function createHttpErrorConstructor () {
  function HttpError () {
    throw new TypeError('cannot construct abstract class')
  }

  inherits(HttpError, Error)

  return HttpError
}

/**
 * Create a constructor for a client error.
 * @private
 */

function createClientErrorConstructor (HttpError, name, code) {
  var className = name.match(/Error$/) ? name : name + 'Error'

  function ClientError (message) {
    // create the error object
    var msg = message != null ? message : statuses[code]
    var err = new Error(msg)

    // capture a stack trace to the construction point
    Error.captureStackTrace(err, ClientError)

    // adjust the [[Prototype]]
    setPrototypeOf(err, ClientError.prototype)

    // redefine the error message
    Object.defineProperty(err, 'message', {
      enumerable: true,
      configurable: true,
      value: msg,
      writable: true
    })

    // redefine the error name
    Object.defineProperty(err, 'name', {
      enumerable: false,
      configurable: true,
      value: className,
      writable: true
    })

    return err
  }

  inherits(ClientError, HttpError)
  nameFunc(ClientError, className)

  ClientError.prototype.status = code
  ClientError.prototype.statusCode = code
  ClientError.prototype.expose = true

  return ClientError
}

/**
 * Create a constructor for a server error.
 * @private
 */

function createServerErrorConstructor (HttpError, name, code) {
  var className = name.match(/Error$/) ? name : name + 'Error'

  function ServerError (message) {
    // create the error object
    var msg = message != null ? message : statuses[code]
    var err = new Error(msg)

    // capture a stack trace to the construction point
    Error.captureStackTrace(err, ServerError)

    // adjust the [[Prototype]]
    setPrototypeOf(err, ServerError.prototype)

    // redefine the error message
    Object.defineProperty(err, 'message', {
      enumerable: true,
      configurable: true,
      value: msg,
      writable: true
    })

    // redefine the error name
    Object.defineProperty(err, 'name', {
      enumerable: false,
      configurable: true,
      value: className,
      writable: true
    })

    return err
  }

  inherits(ServerError, HttpError)
  nameFunc(ServerError, className)

  ServerError.prototype.status = code
  ServerError.prototype.statusCode = code
  ServerError.prototype.expose = false

  return ServerError
}

/**
 * Set the name of a function, if possible.
 * @private
 */

function nameFunc (func, name) {
  var desc = Object.getOwnPropertyDescriptor(func, 'name')

  if (desc && desc.configurable) {
    desc.value = name
    Object.defineProperty(func, 'name', desc)
  }
}

/**
 * Populate the exports object with constructors for every error class.
 * @private
 */

function populateConstructorExports (exports, codes, HttpError) {
  codes.forEach(function forEachCode (code) {
    var CodeError
    var name = toIdentifier(statuses[code])

    switch (codeClass(code)) {
      case 400:
        CodeError = createClientErrorConstructor(HttpError, name, code)
        break
      case 500:
        CodeError = createServerErrorConstructor(HttpError, name, code)
        break
    }

    if (CodeError) {
      // export the constructor
      exports[code] = CodeError
      exports[name] = CodeError
    }
  })

  // backwards-compatibility
  exports["I'mateapot"] = deprecate.function(exports.ImATeapot,
    '"I\'mateapot"; use "ImATeapot" instead')
}

The MIT License (MIT)

Copyright (c) 2014 Jonathan Ong me@jongleberry.com
Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "http-errors",
  "description": "Create HTTP error objects",
  "version": "1.7.3",
  "author": "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)",
  "license": "MIT",
  "repository": "jshttp/http-errors",
  "dependencies": {
    "depd": "~1.1.2",
    "inherits": "2.0.4",
    "setprototypeof": "1.1.1",
    "statuses": ">= 1.5.0 < 2",
    "toidentifier": "1.0.0"
  },
  "devDependencies": {
    "eslint": "5.16.0",
    "eslint-config-standard": "12.0.0",
    "eslint-plugin-import": "2.18.0",
    "eslint-plugin-markdown": "1.0.0",
    "eslint-plugin-node": "8.0.1",
    "eslint-plugin-promise": "4.1.1",
    "eslint-plugin-standard": "4.0.0",
    "istanbul": "0.4.5",
    "mocha": "6.1.4"
  },
  "engines": {
    "node": ">= 0.6"
  },
  "files": [
    "index.js",
    "HISTORY.md",
    "LICENSE",
    "README.md"
  ]
}'use strict'
/* eslint no-proto: 0 */
module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)

function setProtoOf (obj, proto) {
  obj.__proto__ = proto
  return obj
}

function mixinProperties (obj, proto) {
  for (var prop in proto) {
    if (!obj.hasOwnProperty(prop)) {
      obj[prop] = proto[prop]
    }
  }
  return obj
}
Copyright (c) 2015, Wes Todd

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "setprototypeof",
  "version": "1.1.1",
  "description": "A small polyfill for Object.setprototypeof",
  "main": "index.js",
  "typings": "index.d.ts",
  "repository": {
    "type": "git",
    "url": "https://github.com/wesleytodd/setprototypeof.git"
  },
  "author": "Wes Todd",
  "license": "ISC",
  "homepage": "https://github.com/wesleytodd/setprototypeof",
  "devDependencies": {
    "mocha": "^5.2.0",
    "standard": "^12.0.1"
  }
}{
  "name": "http-assert",
  "description": "assert with status codes",
  "version": "1.4.1",
  "license": "MIT",
  "repository": "jshttp/http-assert",
  "dependencies": {
    "deep-equal": "~1.0.1",
    "http-errors": "~1.7.2"
  },
  "devDependencies": {
    "eslint": "5.16.0",
    "eslint-config-standard": "12.0.0",
    "eslint-plugin-import": "2.17.2",
    "eslint-plugin-markdown": "1.0.0",
    "eslint-plugin-node": "8.0.1",
    "eslint-plugin-promise": "4.1.1",
    "eslint-plugin-standard": "4.0.0",
    "istanbul": "0.4.5",
    "mocha": "6.1.4"
  },
  "files": [
    "HISTORY.md",
    "LICENSE",
    "README.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.8"
  }
}'use strict';
// rfc7231 6.1
const statusCodeCacheableByDefault = new Set([
    200,
    203,
    204,
    206,
    300,
    301,
    404,
    405,
    410,
    414,
    501,
]);

// This implementation does not understand partial responses (206)
const understoodStatuses = new Set([
    200,
    203,
    204,
    300,
    301,
    302,
    303,
    307,
    308,
    404,
    405,
    410,
    414,
    501,
]);

const errorStatusCodes = new Set([
    500,
    502,
    503, 
    504,
]);

const hopByHopHeaders = {
    date: true, // included, because we add Age update Date
    connection: true,
    'keep-alive': true,
    'proxy-authenticate': true,
    'proxy-authorization': true,
    te: true,
    trailer: true,
    'transfer-encoding': true,
    upgrade: true,
};

const excludedFromRevalidationUpdate = {
    // Since the old body is reused, it doesn't make sense to change properties of the body
    'content-length': true,
    'content-encoding': true,
    'transfer-encoding': true,
    'content-range': true,
};

function toNumberOrZero(s) {
    const n = parseInt(s, 10);
    return isFinite(n) ? n : 0;
}

// RFC 5861
function isErrorResponse(response) {
    // consider undefined response as faulty
    if(!response) {
        return true
    }
    return errorStatusCodes.has(response.status);
}

function parseCacheControl(header) {
    const cc = {};
    if (!header) return cc;

    // TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives),
    // the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale
    const parts = header.trim().split(/\s*,\s*/); // TODO: lame parsing
    for (const part of parts) {
        const [k, v] = part.split(/\s*=\s*/, 2);
        cc[k] = v === undefined ? true : v.replace(/^"|"$/g, ''); // TODO: lame unquoting
    }

    return cc;
}

function formatCacheControl(cc) {
    let parts = [];
    for (const k in cc) {
        const v = cc[k];
        parts.push(v === true ? k : k + '=' + v);
    }
    if (!parts.length) {
        return undefined;
    }
    return parts.join(', ');
}

module.exports = class CachePolicy {
    constructor(
        req,
        res,
        {
            shared,
            cacheHeuristic,
            immutableMinTimeToLive,
            ignoreCargoCult,
            _fromObject,
        } = {}
    ) {
        if (_fromObject) {
            this._fromObject(_fromObject);
            return;
        }

        if (!res || !res.headers) {
            throw Error('Response headers missing');
        }
        this._assertRequestHasHeaders(req);

        this._responseTime = this.now();
        this._isShared = shared !== false;
        this._cacheHeuristic =
            undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE
        this._immutableMinTtl =
            undefined !== immutableMinTimeToLive
                ? immutableMinTimeToLive
                : 24 * 3600 * 1000;

        this._status = 'status' in res ? res.status : 200;
        this._resHeaders = res.headers;
        this._rescc = parseCacheControl(res.headers['cache-control']);
        this._method = 'method' in req ? req.method : 'GET';
        this._url = req.url;
        this._host = req.headers.host;
        this._noAuthorization = !req.headers.authorization;
        this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used
        this._reqcc = parseCacheControl(req.headers['cache-control']);

        // Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching,
        // so there's no point stricly adhering to the blindly copy&pasted directives.
        if (
            ignoreCargoCult &&
            'pre-check' in this._rescc &&
            'post-check' in this._rescc
        ) {
            delete this._rescc['pre-check'];
            delete this._rescc['post-check'];
            delete this._rescc['no-cache'];
            delete this._rescc['no-store'];
            delete this._rescc['must-revalidate'];
            this._resHeaders = Object.assign({}, this._resHeaders, {
                'cache-control': formatCacheControl(this._rescc),
            });
            delete this._resHeaders.expires;
            delete this._resHeaders.pragma;
        }

        // When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive
        // as having the same effect as if "Cache-Control: no-cache" were present (see Section 5.2.1).
        if (
            res.headers['cache-control'] == null &&
            /no-cache/.test(res.headers.pragma)
        ) {
            this._rescc['no-cache'] = true;
        }
    }

    now() {
        return Date.now();
    }

    storable() {
        // The "no-store" request directive indicates that a cache MUST NOT store any part of either this request or any response to it.
        return !!(
            !this._reqcc['no-store'] &&
            // A cache MUST NOT store a response to any request, unless:
            // The request method is understood by the cache and defined as being cacheable, and
            ('GET' === this._method ||
                'HEAD' === this._method ||
                ('POST' === this._method && this._hasExplicitExpiration())) &&
            // the response status code is understood by the cache, and
            understoodStatuses.has(this._status) &&
            // the "no-store" cache directive does not appear in request or response header fields, and
            !this._rescc['no-store'] &&
            // the "private" response directive does not appear in the response, if the cache is shared, and
            (!this._isShared || !this._rescc.private) &&
            // the Authorization header field does not appear in the request, if the cache is shared,
            (!this._isShared ||
                this._noAuthorization ||
                this._allowsStoringAuthenticated()) &&
            // the response either:
            // contains an Expires header field, or
            (this._resHeaders.expires ||
                // contains a max-age response directive, or
                // contains a s-maxage response directive and the cache is shared, or
                // contains a public response directive.
                this._rescc['max-age'] ||
                (this._isShared && this._rescc['s-maxage']) ||
                this._rescc.public ||
                // has a status code that is defined as cacheable by default
                statusCodeCacheableByDefault.has(this._status))
        );
    }

    _hasExplicitExpiration() {
        // 4.2.1 Calculating Freshness Lifetime
        return (
            (this._isShared && this._rescc['s-maxage']) ||
            this._rescc['max-age'] ||
            this._resHeaders.expires
        );
    }

    _assertRequestHasHeaders(req) {
        if (!req || !req.headers) {
            throw Error('Request headers missing');
        }
    }

    satisfiesWithoutRevalidation(req) {
        this._assertRequestHasHeaders(req);

        // When presented with a request, a cache MUST NOT reuse a stored response, unless:
        // the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive,
        // unless the stored response is successfully validated (Section 4.3), and
        const requestCC = parseCacheControl(req.headers['cache-control']);
        if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) {
            return false;
        }

        if (requestCC['max-age'] && this.age() > requestCC['max-age']) {
            return false;
        }

        if (
            requestCC['min-fresh'] &&
            this.timeToLive() < 1000 * requestCC['min-fresh']
        ) {
            return false;
        }

        // the stored response is either:
        // fresh, or allowed to be served stale
        if (this.stale()) {
            const allowsStale =
                requestCC['max-stale'] &&
                !this._rescc['must-revalidate'] &&
                (true === requestCC['max-stale'] ||
                    requestCC['max-stale'] > this.age() - this.maxAge());
            if (!allowsStale) {
                return false;
            }
        }

        return this._requestMatches(req, false);
    }

    _requestMatches(req, allowHeadMethod) {
        // The presented effective request URI and that of the stored response match, and
        return (
            (!this._url || this._url === req.url) &&
            this._host === req.headers.host &&
            // the request method associated with the stored response allows it to be used for the presented request, and
            (!req.method ||
                this._method === req.method ||
                (allowHeadMethod && 'HEAD' === req.method)) &&
            // selecting header fields nominated by the stored response (if any) match those presented, and
            this._varyMatches(req)
        );
    }

    _allowsStoringAuthenticated() {
        //  following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage.
        return (
            this._rescc['must-revalidate'] ||
            this._rescc.public ||
            this._rescc['s-maxage']
        );
    }

    _varyMatches(req) {
        if (!this._resHeaders.vary) {
            return true;
        }

        // A Vary header field-value of "*" always fails to match
        if (this._resHeaders.vary === '*') {
            return false;
        }

        const fields = this._resHeaders.vary
            .trim()
            .toLowerCase()
            .split(/\s*,\s*/);
        for (const name of fields) {
            if (req.headers[name] !== this._reqHeaders[name]) return false;
        }
        return true;
    }

    _copyWithoutHopByHopHeaders(inHeaders) {
        const headers = {};
        for (const name in inHeaders) {
            if (hopByHopHeaders[name]) continue;
            headers[name] = inHeaders[name];
        }
        // 9.1.  Connection
        if (inHeaders.connection) {
            const tokens = inHeaders.connection.trim().split(/\s*,\s*/);
            for (const name of tokens) {
                delete headers[name];
            }
        }
        if (headers.warning) {
            const warnings = headers.warning.split(/,/).filter(warning => {
                return !/^\s*1[0-9][0-9]/.test(warning);
            });
            if (!warnings.length) {
                delete headers.warning;
            } else {
                headers.warning = warnings.join(',').trim();
            }
        }
        return headers;
    }

    responseHeaders() {
        const headers = this._copyWithoutHopByHopHeaders(this._resHeaders);
        const age = this.age();

        // A cache SHOULD generate 113 warning if it heuristically chose a freshness
        // lifetime greater than 24 hours and the response's age is greater than 24 hours.
        if (
            age > 3600 * 24 &&
            !this._hasExplicitExpiration() &&
            this.maxAge() > 3600 * 24
        ) {
            headers.warning =
                (headers.warning ? `${headers.warning}, ` : '') +
                '113 - "rfc7234 5.5.4"';
        }
        headers.age = `${Math.round(age)}`;
        headers.date = new Date(this.now()).toUTCString();
        return headers;
    }

    /**
     * Value of the Date response header or current time if Date was invalid
     * @return timestamp
     */
    date() {
        const serverDate = Date.parse(this._resHeaders.date);
        if (isFinite(serverDate)) {
            return serverDate;
        }
        return this._responseTime;
    }

    /**
     * Value of the Age header, in seconds, updated for the current time.
     * May be fractional.
     *
     * @return Number
     */
    age() {
        let age = this._ageValue();

        const residentTime = (this.now() - this._responseTime) / 1000;
        return age + residentTime;
    }

    _ageValue() {
        return toNumberOrZero(this._resHeaders.age);
    }

    /**
     * Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`.
     *
     * For an up-to-date value, see `timeToLive()`.
     *
     * @return Number
     */
    maxAge() {
        if (!this.storable() || this._rescc['no-cache']) {
            return 0;
        }

        // Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default
        // so this implementation requires explicit opt-in via public header
        if (
            this._isShared &&
            (this._resHeaders['set-cookie'] &&
                !this._rescc.public &&
                !this._rescc.immutable)
        ) {
            return 0;
        }

        if (this._resHeaders.vary === '*') {
            return 0;
        }

        if (this._isShared) {
            if (this._rescc['proxy-revalidate']) {
                return 0;
            }
            // if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field.
            if (this._rescc['s-maxage']) {
                return toNumberOrZero(this._rescc['s-maxage']);
            }
        }

        // If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field.
        if (this._rescc['max-age']) {
            return toNumberOrZero(this._rescc['max-age']);
        }

        const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0;

        const serverDate = this.date();
        if (this._resHeaders.expires) {
            const expires = Date.parse(this._resHeaders.expires);
            // A cache recipient MUST interpret invalid date formats, especially the value "0", as representing a time in the past (i.e., "already expired").
            if (Number.isNaN(expires) || expires < serverDate) {
                return 0;
            }
            return Math.max(defaultMinTtl, (expires - serverDate) / 1000);
        }

        if (this._resHeaders['last-modified']) {
            const lastModified = Date.parse(this._resHeaders['last-modified']);
            if (isFinite(lastModified) && serverDate > lastModified) {
                return Math.max(
                    defaultMinTtl,
                    ((serverDate - lastModified) / 1000) * this._cacheHeuristic
                );
            }
        }

        return defaultMinTtl;
    }

    timeToLive() {
        const age = this.maxAge() - this.age();
        const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']);
        const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']);
        return Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000;
    }

    stale() {
        return this.maxAge() <= this.age();
    }

    _useStaleIfError() {
        return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age();
    }

    useStaleWhileRevalidate() {
        return this.maxAge() + toNumberOrZero(this._rescc['stale-while-revalidate']) > this.age();
    }

    static fromObject(obj) {
        return new this(undefined, undefined, { _fromObject: obj });
    }

    _fromObject(obj) {
        if (this._responseTime) throw Error('Reinitialized');
        if (!obj || obj.v !== 1) throw Error('Invalid serialization');

        this._responseTime = obj.t;
        this._isShared = obj.sh;
        this._cacheHeuristic = obj.ch;
        this._immutableMinTtl =
            obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000;
        this._status = obj.st;
        this._resHeaders = obj.resh;
        this._rescc = obj.rescc;
        this._method = obj.m;
        this._url = obj.u;
        this._host = obj.h;
        this._noAuthorization = obj.a;
        this._reqHeaders = obj.reqh;
        this._reqcc = obj.reqcc;
    }

    toObject() {
        return {
            v: 1,
            t: this._responseTime,
            sh: this._isShared,
            ch: this._cacheHeuristic,
            imm: this._immutableMinTtl,
            st: this._status,
            resh: this._resHeaders,
            rescc: this._rescc,
            m: this._method,
            u: this._url,
            h: this._host,
            a: this._noAuthorization,
            reqh: this._reqHeaders,
            reqcc: this._reqcc,
        };
    }

    /**
     * Headers for sending to the origin server to revalidate stale response.
     * Allows server to return 304 to allow reuse of the previous response.
     *
     * Hop by hop headers are always stripped.
     * Revalidation headers may be added or removed, depending on request.
     */
    revalidationHeaders(incomingReq) {
        this._assertRequestHasHeaders(incomingReq);
        const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers);

        // This implementation does not understand range requests
        delete headers['if-range'];

        if (!this._requestMatches(incomingReq, true) || !this.storable()) {
            // revalidation allowed via HEAD
            // not for the same resource, or wasn't allowed to be cached anyway
            delete headers['if-none-match'];
            delete headers['if-modified-since'];
            return headers;
        }

        /* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */
        if (this._resHeaders.etag) {
            headers['if-none-match'] = headers['if-none-match']
                ? `${headers['if-none-match']}, ${this._resHeaders.etag}`
                : this._resHeaders.etag;
        }

        // Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request.
        const forbidsWeakValidators =
            headers['accept-ranges'] ||
            headers['if-match'] ||
            headers['if-unmodified-since'] ||
            (this._method && this._method != 'GET');

        /* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server.
        Note: This implementation does not understand partial responses (206) */
        if (forbidsWeakValidators) {
            delete headers['if-modified-since'];

            if (headers['if-none-match']) {
                const etags = headers['if-none-match']
                    .split(/,/)
                    .filter(etag => {
                        return !/^\s*W\//.test(etag);
                    });
                if (!etags.length) {
                    delete headers['if-none-match'];
                } else {
                    headers['if-none-match'] = etags.join(',').trim();
                }
            }
        } else if (
            this._resHeaders['last-modified'] &&
            !headers['if-modified-since']
        ) {
            headers['if-modified-since'] = this._resHeaders['last-modified'];
        }

        return headers;
    }

    /**
     * Creates new CachePolicy with information combined from the previews response,
     * and the new revalidation response.
     *
     * Returns {policy, modified} where modified is a boolean indicating
     * whether the response body has been modified, and old cached body can't be used.
     *
     * @return {Object} {policy: CachePolicy, modified: Boolean}
     */
    revalidatedPolicy(request, response) {
        this._assertRequestHasHeaders(request);
        if(this._useStaleIfError() && isErrorResponse(response)) {  // I consider the revalidation request unsuccessful
          return {
            modified: false,
            matches: false,
            policy: this,
          };
        }
        if (!response || !response.headers) {
            throw Error('Response headers missing');
        }

        // These aren't going to be supported exactly, since one CachePolicy object
        // doesn't know about all the other cached objects.
        let matches = false;
        if (response.status !== undefined && response.status != 304) {
            matches = false;
        } else if (
            response.headers.etag &&
            !/^\s*W\//.test(response.headers.etag)
        ) {
            // "All of the stored responses with the same strong validator are selected.
            // If none of the stored responses contain the same strong validator,
            // then the cache MUST NOT use the new response to update any stored responses."
            matches =
                this._resHeaders.etag &&
                this._resHeaders.etag.replace(/^\s*W\//, '') ===
                    response.headers.etag;
        } else if (this._resHeaders.etag && response.headers.etag) {
            // "If the new response contains a weak validator and that validator corresponds
            // to one of the cache's stored responses,
            // then the most recent of those matching stored responses is selected for update."
            matches =
                this._resHeaders.etag.replace(/^\s*W\//, '') ===
                response.headers.etag.replace(/^\s*W\//, '');
        } else if (this._resHeaders['last-modified']) {
            matches =
                this._resHeaders['last-modified'] ===
                response.headers['last-modified'];
        } else {
            // If the new response does not include any form of validator (such as in the case where
            // a client generates an If-Modified-Since request from a source other than the Last-Modified
            // response header field), and there is only one stored response, and that stored response also
            // lacks a validator, then that stored response is selected for update.
            if (
                !this._resHeaders.etag &&
                !this._resHeaders['last-modified'] &&
                !response.headers.etag &&
                !response.headers['last-modified']
            ) {
                matches = true;
            }
        }

        if (!matches) {
            return {
                policy: new this.constructor(request, response),
                // Client receiving 304 without body, even if it's invalid/mismatched has no option
                // but to reuse a cached body. We don't have a good way to tell clients to do
                // error recovery in such case.
                modified: response.status != 304,
                matches: false,
            };
        }

        // use other header fields provided in the 304 (Not Modified) response to replace all instances
        // of the corresponding header fields in the stored response.
        const headers = {};
        for (const k in this._resHeaders) {
            headers[k] =
                k in response.headers && !excludedFromRevalidationUpdate[k]
                    ? response.headers[k]
                    : this._resHeaders[k];
        }

        const newResponse = Object.assign({}, response, {
            status: this._status,
            method: this._method,
            headers,
        });
        return {
            policy: new this.constructor(request, newResponse, {
                shared: this._isShared,
                cacheHeuristic: this._cacheHeuristic,
                immutableMinTimeToLive: this._immutableMinTtl,
            }),
            modified: false,
            matches: true,
        };
    }
};
Copyright 2016-2018 Kornel LesiÅ„ski

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
  "name": "http-cache-semantics",
  "version": "4.1.0",
  "description": "Parses Cache-Control and other headers. Helps building correct HTTP caches and proxies",
  "repository": "https://github.com/kornelski/http-cache-semantics.git",
  "main": "index.js",
  "files": [
    "index.js"
  ],
  "author": "Kornel LesiÅ„ski <kornel@geekhood.net> (https://kornel.ski/)",
  "license": "BSD-2-Clause",
  "devDependencies": {
    "eslint": "^5.13.0",
    "eslint-plugin-prettier": "^3.0.1",
    "husky": "^0.14.3",
    "lint-staged": "^8.1.3",
    "mocha": "^5.1.0",
    "prettier": "^1.14.3",
    "prettier-eslint-cli": "^4.7.1"
  }
}/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
  var e, m
  var eLen = (nBytes * 8) - mLen - 1
  var eMax = (1 << eLen) - 1
  var eBias = eMax >> 1
  var nBits = -7
  var i = isLE ? (nBytes - 1) : 0
  var d = isLE ? -1 : 1
  var s = buffer[offset + i]

  i += d

  e = s & ((1 << (-nBits)) - 1)
  s >>= (-nBits)
  nBits += eLen
  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}

  m = e & ((1 << (-nBits)) - 1)
  e >>= (-nBits)
  nBits += mLen
  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}

  if (e === 0) {
    e = 1 - eBias
  } else if (e === eMax) {
    return m ? NaN : ((s ? -1 : 1) * Infinity)
  } else {
    m = m + Math.pow(2, mLen)
    e = e - eBias
  }
  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
}

exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
  var e, m, c
  var eLen = (nBytes * 8) - mLen - 1
  var eMax = (1 << eLen) - 1
  var eBias = eMax >> 1
  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
  var i = isLE ? 0 : (nBytes - 1)
  var d = isLE ? 1 : -1
  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0

  value = Math.abs(value)

  if (isNaN(value) || value === Infinity) {
    m = isNaN(value) ? 1 : 0
    e = eMax
  } else {
    e = Math.floor(Math.log(value) / Math.LN2)
    if (value * (c = Math.pow(2, -e)) < 1) {
      e--
      c *= 2
    }
    if (e + eBias >= 1) {
      value += rt / c
    } else {
      value += rt * Math.pow(2, 1 - eBias)
    }
    if (value * c >= 2) {
      e++
      c /= 2
    }

    if (e + eBias >= eMax) {
      m = 0
      e = eMax
    } else if (e + eBias >= 1) {
      m = ((value * c) - 1) * Math.pow(2, mLen)
      e = e + eBias
    } else {
      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
      e = 0
    }
  }

  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}

  e = (e << mLen) | m
  eLen += mLen
  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}

  buffer[offset + i - d] |= s * 128
}
Copyright 2008 Fair Oaks Labs, Inc.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
  "name": "ieee754",
  "description": "Read/write IEEE754 floating point numbers from/to a Buffer or array-like object",
  "version": "1.2.1",
  "author": {
    "name": "Feross Aboukhadijeh",
    "email": "feross@feross.org",
    "url": "https://feross.org"
  },
  "devDependencies": {
    "airtap": "^3.0.0",
    "standard": "*",
    "tape": "^5.0.1"
  },
  "license": "BSD-3-Clause",
  "main": "index.js",
  "types": "index.d.ts",
  "repository": {
    "type": "git",
    "url": "git://github.com/feross/ieee754.git"
  },
  "funding": [
    {
      "type": "github",
      "url": "https://github.com/sponsors/feross"
    },
    {
      "type": "patreon",
      "url": "https://www.patreon.com/feross"
    },
    {
      "type": "consulting",
      "url": "https://feross.org/support"
    }
  ]
}if (typeof Object.create === 'function') {
  // implementation from standard node.js 'util' module
  module.exports = function inherits(ctor, superCtor) {
    if (superCtor) {
      ctor.super_ = superCtor
      ctor.prototype = Object.create(superCtor.prototype, {
        constructor: {
          value: ctor,
          enumerable: false,
          writable: true,
          configurable: true
        }
      })
    }
  };
} else {
  // old school shim for old browsers
  module.exports = function inherits(ctor, superCtor) {
    if (superCtor) {
      ctor.super_ = superCtor
      var TempCtor = function () {}
      TempCtor.prototype = superCtor.prototype
      ctor.prototype = new TempCtor()
      ctor.prototype.constructor = ctor
    }
  }
}
try {
  var util = require('util');
  /* istanbul ignore next */
  if (typeof util.inherits !== 'function') throw '';
  module.exports = util.inherits;
} catch (e) {
  /* istanbul ignore next */
  module.exports = require('./inherits_browser.js');
}
The ISC License

Copyright (c) Isaac Z. Schlueter

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

{
  "name": "inherits",
  "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
  "version": "2.0.4",
  "main": "./inherits.js",
  "browser": "./inherits_browser.js",
  "repository": "git://github.com/isaacs/inherits",
  "license": "ISC",
  "devDependencies": {
    "tap": "^14.2.4"
  },
  "files": [
    "inherits.js",
    "inherits_browser.js"
  ]
}/* eslint-disable yoda */
'use strict';

const isFullwidthCodePoint = codePoint => {
	if (Number.isNaN(codePoint)) {
		return false;
	}

	// Code points are derived from:
	// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt
	if (
		codePoint >= 0x1100 && (
			codePoint <= 0x115F || // Hangul Jamo
			codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET
			codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET
			// CJK Radicals Supplement .. Enclosed CJK Letters and Months
			(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||
			// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
			(0x3250 <= codePoint && codePoint <= 0x4DBF) ||
			// CJK Unified Ideographs .. Yi Radicals
			(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||
			// Hangul Jamo Extended-A
			(0xA960 <= codePoint && codePoint <= 0xA97C) ||
			// Hangul Syllables
			(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||
			// CJK Compatibility Ideographs
			(0xF900 <= codePoint && codePoint <= 0xFAFF) ||
			// Vertical Forms
			(0xFE10 <= codePoint && codePoint <= 0xFE19) ||
			// CJK Compatibility Forms .. Small Form Variants
			(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||
			// Halfwidth and Fullwidth Forms
			(0xFF01 <= codePoint && codePoint <= 0xFF60) ||
			(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||
			// Kana Supplement
			(0x1B000 <= codePoint && codePoint <= 0x1B001) ||
			// Enclosed Ideographic Supplement
			(0x1F200 <= codePoint && codePoint <= 0x1F251) ||
			// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
			(0x20000 <= codePoint && codePoint <= 0x3FFFD)
		)
	) {
		return true;
	}

	return false;
};

module.exports = isFullwidthCodePoint;
module.exports.default = isFullwidthCodePoint;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "is-fullwidth-code-point",
  "version": "3.0.0",
  "description": "Check if the character represented by a given Unicode code point is fullwidth",
  "license": "MIT",
  "repository": "sindresorhus/is-fullwidth-code-point",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=8"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "devDependencies": {
    "ava": "^1.3.1",
    "tsd-check": "^0.5.0",
    "xo": "^0.24.0"
  }
}coverage/
node
{
	"all": true,
	"check-coverage": false,
	"reporter": ["text-summary", "text", "html", "json"],
	"exclude": [
		"coverage",
		"test"
	]
}
'use strict';

var toStr = Object.prototype.toString;
var fnToStr = Function.prototype.toString;
var isFnRegex = /^\s*(?:function)?\*/;
var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
var getProto = Object.getPrototypeOf;
var getGeneratorFunc = function () { // eslint-disable-line consistent-return
	if (!hasToStringTag) {
		return false;
	}
	try {
		return Function('return function*() {}')();
	} catch (e) {
	}
};
var GeneratorFunction;

module.exports = function isGeneratorFunction(fn) {
	if (typeof fn !== 'function') {
		return false;
	}
	if (isFnRegex.test(fnToStr.call(fn))) {
		return true;
	}
	if (!hasToStringTag) {
		var str = toStr.call(fn);
		return str === '[object GeneratorFunction]';
	}
	if (!getProto) {
		return false;
	}
	if (typeof GeneratorFunction === 'undefined') {
		var generatorFunc = getGeneratorFunc();
		GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;
	}
	return getProto(fn) === GeneratorFunction;
};
The MIT License (MIT)

Copyright (c) 2014 Jordan Harband

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "is-generator-function",
  "version": "1.0.9",
  "description": "Determine if a function is a native generator function.",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "git://github.com/inspect-js/is-generator-function.git"
  },
  "author": "Jordan Harband <ljharb@gmail.com>",
  "funding": {
    "url": "https://github.com/sponsors/ljharb"
  },
  "license": "MIT",
  "devDependencies": {
    "@ljharb/eslint-config": "^17.6.0",
    "aud": "^1.1.5",
    "auto-changelog": "^2.2.1",
    "core-js": "^2.6.5 || ^3 <3.9",
    "eslint": "^7.25.0",
    "make-generator-function": "^2.0.0",
    "nyc": "^10.3.2",
    "safe-publish-latest": "^1.1.4",
    "tape": "^5.2.2",
    "uglify-register": "^1.0.1"
  },
  "testling": {
    "files": "test/index.js",
    "browsers": [
      "iexplore/6.0..latest",
      "firefox/3.0..6.0",
      "firefox/15.0..latest",
      "firefox/nightly",
      "chrome/4.0..10.0",
      "chrome/20.0..latest",
      "chrome/canary",
      "opera/10.0..latest",
      "opera/next",
      "safari/4.0..latest",
      "ipad/6.0..latest",
      "iphone/6.0..latest",
      "android-browser/4.2"
    ]
  },
  "engines": {
    "node": ">= 0.4"
  },
  "auto-changelog": {
    "output": "CHANGELOG.md",
    "template": "keepachangelog",
    "unreleased": false,
    "commitLimit": false,
    "backfillLimit": false,
    "hideCredit": true
  }
}'use strict';

var isStream = module.exports = function (stream) {
	return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function';
};

isStream.writable = function (stream) {
	return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object';
};

isStream.readable = function (stream) {
	return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object';
};

isStream.duplex = function (stream) {
	return isStream.writable(stream) && isStream.readable(stream);
};

isStream.transform = function (stream) {
	return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object';
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "is-stream",
  "version": "1.1.0",
  "description": "Check if something is a Node.js stream",
  "license": "MIT",
  "repository": "sindresorhus/is-stream",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "tempfile": "^1.1.0",
    "xo": "*"
  }
}var fs = require('fs')
var core
if (process.platform === 'win32' || global.TESTING_WINDOWS) {
  core = require('./windows.js')
} else {
  core = require('./mode.js')
}

module.exports = isexe
isexe.sync = sync

function isexe (path, options, cb) {
  if (typeof options === 'function') {
    cb = options
    options = {}
  }

  if (!cb) {
    if (typeof Promise !== 'function') {
      throw new TypeError('callback not provided')
    }

    return new Promise(function (resolve, reject) {
      isexe(path, options || {}, function (er, is) {
        if (er) {
          reject(er)
        } else {
          resolve(is)
        }
      })
    })
  }

  core(path, options || {}, function (er, is) {
    // ignore EACCES because that just means we aren't allowed to run it
    if (er) {
      if (er.code === 'EACCES' || options && options.ignoreErrors) {
        er = null
        is = false
      }
    }
    cb(er, is)
  })
}

function sync (path, options) {
  // my kingdom for a filtered catch
  try {
    return core.sync(path, options || {})
  } catch (er) {
    if (options && options.ignoreErrors || er.code === 'EACCES') {
      return false
    } else {
      throw er
    }
  }
}
The ISC License

Copyright (c) Isaac Z. Schlueter and Contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
module.exports = isexe
isexe.sync = sync

var fs = require('fs')

function isexe (path, options, cb) {
  fs.stat(path, function (er, stat) {
    cb(er, er ? false : checkStat(stat, options))
  })
}

function sync (path, options) {
  return checkStat(fs.statSync(path), options)
}

function checkStat (stat, options) {
  return stat.isFile() && checkMode(stat, options)
}

function checkMode (stat, options) {
  var mod = stat.mode
  var uid = stat.uid
  var gid = stat.gid

  var myUid = options.uid !== undefined ?
    options.uid : process.getuid && process.getuid()
  var myGid = options.gid !== undefined ?
    options.gid : process.getgid && process.getgid()

  var u = parseInt('100', 8)
  var g = parseInt('010', 8)
  var o = parseInt('001', 8)
  var ug = u | g

  var ret = (mod & o) ||
    (mod & g) && gid === myGid ||
    (mod & u) && uid === myUid ||
    (mod & ug) && myUid === 0

  return ret
}
{
  "name": "isexe",
  "version": "2.0.0",
  "description": "Minimal module to check if a file is executable.",
  "main": "index.js",
  "directories": {
    "test": "test"
  },
  "devDependencies": {
    "mkdirp": "^0.5.1",
    "rimraf": "^2.5.0",
    "tap": "^10.3.0"
  },
  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
  "license": "ISC",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/isaacs/isexe.git"
  },
  "homepage": "https://github.com/isaacs/isexe#readme"
}module.exports = isexe
isexe.sync = sync

var fs = require('fs')

function checkPathExt (path, options) {
  var pathext = options.pathExt !== undefined ?
    options.pathExt : process.env.PATHEXT

  if (!pathext) {
    return true
  }

  pathext = pathext.split(';')
  if (pathext.indexOf('') !== -1) {
    return true
  }
  for (var i = 0; i < pathext.length; i++) {
    var p = pathext[i].toLowerCase()
    if (p && path.substr(-p.length).toLowerCase() === p) {
      return true
    }
  }
  return false
}

function checkStat (stat, path, options) {
  if (!stat.isSymbolicLink() && !stat.isFile()) {
    return false
  }
  return checkPathExt(path, options)
}

function isexe (path, options, cb) {
  fs.stat(path, function (er, stat) {
    cb(er, er ? false : checkStat(stat, path, options))
  })
}

function sync (path, options) {
  return checkStat(fs.statSync(path), path, options)
}
let _fs
try {
  _fs = require('graceful-fs')
} catch (_) {
  _fs = require('fs')
}
const universalify = require('universalify')
const { stringify, stripBom } = require('./utils')

async function _readFile (file, options = {}) {
  if (typeof options === 'string') {
    options = { encoding: options }
  }

  const fs = options.fs || _fs

  const shouldThrow = 'throws' in options ? options.throws : true

  let data = await universalify.fromCallback(fs.readFile)(file, options)

  data = stripBom(data)

  let obj
  try {
    obj = JSON.parse(data, options ? options.reviver : null)
  } catch (err) {
    if (shouldThrow) {
      err.message = `${file}: ${err.message}`
      throw err
    } else {
      return null
    }
  }

  return obj
}

const readFile = universalify.fromPromise(_readFile)

function readFileSync (file, options = {}) {
  if (typeof options === 'string') {
    options = { encoding: options }
  }

  const fs = options.fs || _fs

  const shouldThrow = 'throws' in options ? options.throws : true

  try {
    let content = fs.readFileSync(file, options)
    content = stripBom(content)
    return JSON.parse(content, options.reviver)
  } catch (err) {
    if (shouldThrow) {
      err.message = `${file}: ${err.message}`
      throw err
    } else {
      return null
    }
  }
}

async function _writeFile (file, obj, options = {}) {
  const fs = options.fs || _fs

  const str = stringify(obj, options)

  await universalify.fromCallback(fs.writeFile)(file, str, options)
}

const writeFile = universalify.fromPromise(_writeFile)

function writeFileSync (file, obj, options = {}) {
  const fs = options.fs || _fs

  const str = stringify(obj, options)
  // not sure if fs.writeFileSync returns anything, but just in case
  return fs.writeFileSync(file, str, options)
}

const jsonfile = {
  readFile,
  readFileSync,
  writeFile,
  writeFileSync
}

module.exports = jsonfile
(The MIT License)

Copyright (c) 2012-2015, JP Richardson <jprichardson@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
 merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "jsonfile",
  "version": "6.1.0",
  "description": "Easily read/write JSON files.",
  "repository": {
    "type": "git",
    "url": "git@github.com:jprichardson/node-jsonfile.git"
  },
  "author": "JP Richardson <jprichardson@gmail.com>",
  "license": "MIT",
  "dependencies": {
    "universalify": "^2.0.0"
  },
  "optionalDependencies": {
    "graceful-fs": "^4.1.6"
  },
  "devDependencies": {
    "mocha": "^8.2.0",
    "rimraf": "^2.4.0",
    "standard": "^16.0.1"
  },
  "main": "index.js",
  "files": [
    "index.js",
    "utils.js"
  ]
}function stringify (obj, { EOL = '\n', finalEOL = true, replacer = null, spaces } = {}) {
  const EOF = finalEOL ? EOL : ''
  const str = JSON.stringify(obj, replacer, spaces)

  return str.replace(/\n/g, EOL) + EOF
}

function stripBom (content) {
  // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
  if (Buffer.isBuffer(content)) content = content.toString('utf8')
  return content.replace(/^\uFEFF/, '')
}

module.exports = { stringify, stripBom }
1.1.0 / 2019-05-07
==================

  * Use `tsscmp` module for timing-safe signature verification

1.0.3 / 2018-09-12
==================

  * perf: enable strict mode

1.0.2 / 2017-08-26
==================

  * perf: improve comparison speed

1.0.1 / 2014-05-07
==================

  * Readme changes
  * Update repository for organization move

1.0.0 / 2013-12-21
==================

  * Remove default key generation and associated expectations
/*!
 * keygrip
 * Copyright(c) 2011-2014 Jed Schmidt
 * MIT Licensed
 */

'use strict'

var compare = require('tsscmp')
var crypto = require("crypto")
  
function Keygrip(keys, algorithm, encoding) {
  if (!algorithm) algorithm = "sha1";
  if (!encoding) encoding = "base64";
  if (!(this instanceof Keygrip)) return new Keygrip(keys, algorithm, encoding)

  if (!keys || !(0 in keys)) {
    throw new Error("Keys must be provided.")
  }

  function sign(data, key) {
    return crypto
      .createHmac(algorithm, key)
      .update(data).digest(encoding)
      .replace(/\/|\+|=/g, function(x) {
        return ({ "/": "_", "+": "-", "=": "" })[x]
      })
  }

  this.sign = function(data){ return sign(data, keys[0]) }

  this.verify = function(data, digest) {
    return this.index(data, digest) > -1
  }

  this.index = function(data, digest) {
    for (var i = 0, l = keys.length; i < l; i++) {
      if (compare(digest, sign(data, keys[i]))) {
        return i
      }
    }

    return -1
  }
}

Keygrip.sign = Keygrip.verify = Keygrip.index = function() {
  throw new Error("Usage: require('keygrip')(<array-of-keys>)")
}

module.exports = Keygrip
The MIT License (MIT)

Copyright (c) 2011-2014 Jed Schmidt <where@jed.is> (http://jedschmidt.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "keygrip",
  "version": "1.1.0",
  "description": "Key signing and verification for rotated credentials",
  "license": "MIT",
  "repository": "crypto-utils/keygrip",
  "dependencies": {
    "tsscmp": "1.0.6"
  },
  "devDependencies": {
    "mocha": "6.1.4",
    "nyc": "14.0.0"
  },
  "files": [
    "HISTORY.md",
    "LICENSE",
    "README.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}
4.1.0 / 2018-05-22
==================

  * improve: reduce stack trace by removing useless function call (#95)

4.0.0 / 2017-04-12
==================

 * remove `any-promise` as a dependency

3.2.1 / 2016-10-26
==================

 * revert add variadric support #65 - introduced an unintended breaking change

3.2.0 / 2016-10-25
==================

 * fix #60 infinite loop when calling next https://github.com/koajs/compose/pull/61
 * add variadric support https://github.com/koajs/compose/pull/65

3.1.0 / 2016-03-17
==================

 * add linting w/ standard
 * use `any-promise` so that the promise engine is configurable

3.0.0 / 2015-10-19
==================

 * change middleware signature to `async (ctx, next) => await next()` for `koa@2`.
   See https://github.com/koajs/compose/pull/27 for more information.

2.3.0 / 2014-05-01
==================

 * remove instrumentation

2.2.0 / 2014-01-22
==================

 * add `fn._name` for debugging

2.1.0 / 2013-12-22
==================

 * add debugging support
 * improve performance ~15%

2.0.1 / 2013-12-21
==================

  * update co to v3
  * use generator delegation

2.0.0 / 2013-11-07
==================

  * change middleware signature expected
'use strict'

/**
 * Expose compositor.
 */

module.exports = compose

/**
 * Compose `middleware` returning
 * a fully valid middleware comprised
 * of all those which are passed.
 *
 * @param {Array} middleware
 * @return {Function}
 * @api public
 */

function compose (middleware) {
  if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!')
  for (const fn of middleware) {
    if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!')
  }

  /**
   * @param {Object} context
   * @return {Promise}
   * @api public
   */

  return function (context, next) {
    // last called middleware #
    let index = -1
    return dispatch(0)
    function dispatch (i) {
      if (i <= index) return Promise.reject(new Error('next() called multiple times'))
      index = i
      let fn = middleware[i]
      if (i === middleware.length) fn = next
      if (!fn) return Promise.resolve()
      try {
        return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));
      } catch (err) {
        return Promise.reject(err)
      }
    }
  }
}
{
  "name": "koa-compose",
  "description": "compose Koa middleware",
  "repository": "koajs/compose",
  "version": "4.1.0",
  "files": [
    "index.js"
  ],
  "dependencies": {},
  "devDependencies": {
    "codecov": "^3.0.0",
    "jest": "^21.0.0",
    "matcha": "^0.7.0",
    "standard": "^10.0.3"
  },
  "jest": {
    "testEnvironment": "node"
  },
  "license": "MIT"
}'use strict'

const co = require('co')
const compose = require('koa-compose')

module.exports = convert

function convert (mw) {
  if (typeof mw !== 'function') {
    throw new TypeError('middleware must be a function')
  }
  if (mw.constructor.name !== 'GeneratorFunction') {
    // assume it's Promise-based middleware
    return mw
  }
  const converted = function (ctx, next) {
    return co.call(ctx, mw.call(ctx, createGenerator(next)))
  }
  converted._name = mw._name || mw.name
  return converted
}

function * createGenerator (next) {
  return yield next()
}

// convert.compose(mw, mw, mw)
// convert.compose([mw, mw, mw])
convert.compose = function (arr) {
  if (!Array.isArray(arr)) {
    arr = Array.from(arguments)
  }
  return compose(arr.map(convert))
}

convert.back = function (mw) {
  if (typeof mw !== 'function') {
    throw new TypeError('middleware must be a function')
  }
  if (mw.constructor.name === 'GeneratorFunction') {
    // assume it's generator middleware
    return mw
  }
  const converted = function * (next) {
    let ctx = this
    let called = false
    // no need try...catch here, it's ok even `mw()` throw exception
    yield Promise.resolve(mw(ctx, function () {
      if (called) {
        // guard against multiple next() calls
        // https://github.com/koajs/compose/blob/4e3e96baf58b817d71bd44a8c0d78bb42623aa95/index.js#L36
        return Promise.reject(new Error('next() called multiple times'))
      }
      called = true
      return co.call(ctx, next)
    }))
  }
  converted._name = mw._name || mw.name
  return converted
}
The MIT License (MIT)

Copyright (c) 2015 yunsong

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


3.2.1 / 2016-10-26
==================

 * revert add variadric support #65 - introduced an unintended breaking change

3.2.0 / 2016-10-25
==================

 * fix #60 infinite loop when calling next https://github.com/koajs/compose/pull/61
 * add variadric support https://github.com/koajs/compose/pull/65

3.1.0 / 2016-03-17
==================

 * add linting w/ standard
 * use `any-promise` so that the promise engine is configurable

3.0.0 / 2015-10-19
==================

 * change middleware signature to `async (ctx, next) => await next()` for `koa@2`.
   See https://github.com/koajs/compose/pull/27 for more information.

2.3.0 / 2014-05-01
==================

 * remove instrumentation

2.2.0 / 2014-01-22
==================

 * add `fn._name` for debugging

2.1.0 / 2013-12-22
==================

 * add debugging support
 * improve performance ~15%

2.0.1 / 2013-12-21
==================

  * update co to v3
  * use generator delegation

2.0.0 / 2013-11-07
==================

  * change middleware signature expected
'use strict'

const Promise = require('any-promise')

/**
 * Expose compositor.
 */

module.exports = compose

/**
 * Compose `middleware` returning
 * a fully valid middleware comprised
 * of all those which are passed.
 *
 * @param {Array} middleware
 * @return {Function}
 * @api public
 */

function compose (middleware) {
  if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!')
  for (const fn of middleware) {
    if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!')
  }

  /**
   * @param {Object} context
   * @return {Promise}
   * @api public
   */

  return function (context, next) {
    // last called middleware #
    let index = -1
    return dispatch(0)
    function dispatch (i) {
      if (i <= index) return Promise.reject(new Error('next() called multiple times'))
      index = i
      let fn = middleware[i]
      if (i === middleware.length) fn = next
      if (!fn) return Promise.resolve()
      try {
        return Promise.resolve(fn(context, function next () {
          return dispatch(i + 1)
        }))
      } catch (err) {
        return Promise.reject(err)
      }
    }
  }
}
{
  "name": "koa-compose",
  "description": "compose Koa middleware",
  "repository": "koajs/compose",
  "version": "3.2.1",
  "files": [
    "index.js"
  ],
  "dependencies": {
    "any-promise": "^1.1.0"
  },
  "devDependencies": {
    "co": "^4.6.0",
    "istanbul": "^0.4.2",
    "matcha": "^0.7.0",
    "mocha": "^3.1.2",
    "should": "^2.0.0",
    "standard": "^8.4.0"
  },
  "publishConfig": {
    "tag": "next"
  },
  "license": "MIT"
}{
  "name": "koa-convert",
  "version": "1.2.0",
  "description": "convert koa legacy generator-based middleware to promise-based middleware",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/gyson/koa-convert.git"
  },
  "main": "index.js",
  "author": "gyson <eilian.yunsong@gmail.com>",
  "license": "MIT",
  "homepage": "https://github.com/gyson/koa-convert#readme",
  "dependencies": {
    "co": "^4.6.0",
    "koa-compose": "^3.0.0"
  },
  "devDependencies": {
    "koa": "^2.0.0-alpha.2",
    "koa-v1": "^1.0.0",
    "mocha": "^2.3.3",
    "standard": "^5.3.1",
    "supertest": "^1.1.0"
  },
  "engines": {
    "node": ">= 4"
  }
}import mod from "../lib/application.js";

export default mod;
export const HttpError = mod.HttpError;

2.13.1 / 2021-01-04
==================

**fixes**
  * [[`b5472f4`](http://github.com/koajs/koa/commit/b5472f4cbb87349becae36b4a9ad5f76a825abb8)] - fix: make ESM transpiled CommonJS play nice for TS folks, fix #1513 (#1518) (miwnwski <<m@iwnw.ski>>)
  * [[`68d97d6`](http://github.com/koajs/koa/commit/68d97d69e4536065504bf9ef1e348a66b3f35709)] - fix: fixed order of vulnerability disclosure addresses (niftylettuce <<niftylettuce@gmail.com>>)

**others**
  * [[`b4398f5`](http://github.com/koajs/koa/commit/b4398f5d68f9546167419f394a686afdcb5e10e2)] - correct verb tense in doc (#1512) (Matan Shavit <<71092861+matanshavit@users.noreply.github.com>>)
  * [[`39e1a5a`](http://github.com/koajs/koa/commit/39e1a5a380aa2bbc4e2d164e8e4bf37cfd512516)] - fixed multiple grammatical errors in docs. (#1497) (Hridayesh Sharma <<vyasriday7@gmail.com>>)
  * [[`aeb5d19`](http://github.com/koajs/koa/commit/aeb5d1984dcc5f8e3386f8f9724807ae6f3aa1c4)] - docs: added niftylettuce@gmail.com to vulnerability disclosure (niftylettuce <<niftylettuce@gmail.com>>)
  * [[`6e1093b`](http://github.com/koajs/koa/commit/6e1093be27b41135c8e67fce108743d54e9cab67)] - docs: remove babel from readme (#1494) (miwnwski <<m@iwnw.ski>>)
  * [[`38cb591`](http://github.com/koajs/koa/commit/38cb591254ff5f65a04e8fb57be293afe697c46e)] - docs: update specific for auto response status (AlbertAZ1992 <<ziyuximing@163.com>>)
  * [[`2224cd9`](http://github.com/koajs/koa/commit/2224cd9b6a648e7ac2eb27eac332e7d6de7db26c)] -  docs: remove babel ref. (#1488) (Imed Jaberi <<imed_jebari@hotmail.fr>>)
  * [[`d51f983`](http://github.com/koajs/koa/commit/d51f98328c3b84493cc6bda0732aabb69e20e3a1)] -  docs: fix assert example for response (#1489) (Imed Jaberi <<imed_jebari@hotmail.fr>>)
  * [[`f8b49b8`](http://github.com/koajs/koa/commit/f8b49b859363ad6c3d9ea5c11ee62341407ceafd)] - chore: fix grammatical and spelling errors in comments and tests (#1490) (Matt Kubej <<mkubej@gmail.com>>)
  * [[`d1c9263`](http://github.com/koajs/koa/commit/d1c92638c95d799df2fdff5576b96fc43a62813f)] -  deps: update depd  >> v2.0.0 (#1482) (imed jaberi <<imed_jebari@hotmail.fr>>)

2.13.0 / 2020-06-21
==================

**features**
  * [[`bbcde76`](http://github.com/koajs/koa/commit/bbcde76f5cb5b67bbcd3201791cf0ef648fd3a8b)] - feat: support esm (#1474) (ZYSzys <<zhangyongsheng@youzan.com>>)

**others**
  * [[`20e58cf`](http://github.com/koajs/koa/commit/20e58cf3e4f20fc5d5886df1d0ac6dd8c33bd202)] - test: imporve coverage to 100% (dead-horse <<dead_horse@qq.com>>)
  * [[`4a40d63`](http://github.com/koajs/koa/commit/4a40d633c4b4a203c6656078f9952ccef65c5875)] - build: use prepare instead of prepublish (dead-horse <<dead_horse@qq.com>>)
  * [[`226ba8c`](http://github.com/koajs/koa/commit/226ba8c8e81e83da48e7bf137be3f146d03f40b8)] - build: use prepublish instead of prepack (dead-horse <<dead_horse@qq.com>>)

2.12.1 / 2020-06-13
==================

**fixes**
  * [[`e2030c7`](http://github.com/koajs/koa/commit/e2030c7249c7ae24e28158d8eae405a02fefc9f8)] - fix: Improve checks for Error in onerror handlers (#1468) (Julien Wajsberg <<felash@gmail.com>>)

**others**
  * [[`5208c5e`](http://github.com/koajs/koa/commit/5208c5e15d35b3653fce6b8ed68d09865abea843)] - chore: Use single console.error() statement in error handler (#1471) (Mike Vosseller <<michael.vosseller@gmail.com>>)

2.12.0 / 2020-05-18
==================

**features**
  * [[`0d2f421`](http://github.com/koajs/koa/commit/0d2f421c265350d3d84e1bc261572954479f27d3)] - feat: error handler treat err.statusCode as the same as err.status (#1460) (Vijay Krishnavanshi <<vijaykrishnavanshi@gmail.com>>)
  * [[`8d52105`](http://github.com/koajs/koa/commit/8d52105a34234be9e771ff3b76b43e4e30328943)] - feat: allow bodyless responses for non empty status codes (#1447) (ejose19 <<8742215+ejose19@users.noreply.github.com>>)

**others**
  * [[`faeaff5`](http://github.com/koajs/koa/commit/faeaff5c149a81a188ab8e5af0b994029e45acbb)] - fox: remove `error-inject` and fix error handling (#1409) (Konstantin Vyatkin <<tino@vtkn.io>>)
  * [[`f7c732f`](http://github.com/koajs/koa/commit/f7c732fd06f724505e9090add4d977e667da55a8)] - docs: fixed incorrect onerror example (#1459) (Paul Annekov <<paul.annekov@gmail.com>>)
  * [[`143d8f7`](http://github.com/koajs/koa/commit/143d8f72f2a232b4c97eac00e7811015911e4f7c)] - Always use strict equality. (#1225) (Yazan Medanat <<medanat@gmail.com>>)
  * [[`6b6b0dd`](http://github.com/koajs/koa/commit/6b6b0ddf7aff073e65493c6efaffab8331c0331c)] - docs(api): add app.use chainability note (#1449) (Zac Anger <<zac@zacanger.com>>)
  * [[`8ddab48`](http://github.com/koajs/koa/commit/8ddab48cbdbca1e6d1cc8c3ddae45491db524d51)] - docs: Document response status with empty body (#1445) (Marc-AurÃ¨le DARCHE <<152407+madarche@users.noreply.github.com>>)
  * [[`7deedb2`](http://github.com/koajs/koa/commit/7deedb235274223f1b9da46dee296545b23598de)] - docs: Updating context.md with the latest cookies opts (#1433) (Brad Ito <<phlogisticfugu@users.noreply.github.com>>)
  * [[`3e97a10`](http://github.com/koajs/koa/commit/3e97a106bb846d9337737011bb85149ddd797229)] - docs(links): remove Google+ link (#1439) (laffachan <<45162759+laffachan@users.noreply.github.com>>)
  * [[`eda2760`](http://github.com/koajs/koa/commit/eda27608f7d39ede86d7b402aae64b1867ce31c6)] - build: Drop unused Travis sudo: false directive (#1416) (Olle Jonsson <<olle.jonsson@gmail.com>>)

2.11.0 / 2019-10-28
==================

**features**
  * [[`422e539`](http://github.com/koajs/koa/commit/422e539e8989e65ba43ecc39ddbaa3c4f755d465)] - feat: support app.proxyIPHeader and app.maxIpsCount to make ctx.ips more security (Yiyu He <<dead_horse@qq.com>>)
  * [[`d48d88e`](http://github.com/koajs/koa/commit/d48d88ee17b780c02123e6d657274cab456e943e)] - feat: implement response.has (#1397) (Konstantin Vyatkin <<tino@vtkn.io>>)

**others**
  * [[`4dc56f6`](http://github.com/koajs/koa/commit/4dc56f6d04e8f5fe12ba53a8a776653b3d7b60ed)] - chore: update ESLint and plugins/configs (#1407) (Konstantin Vyatkin <<tino@vtkn.io>>)
  * [[`be7d334`](http://github.com/koajs/koa/commit/be7d334778481639294cdf87f5c359a230aeb65b)] - chore: removes code duplication at handling HEAD method (#1400) (Konstantin Vyatkin <<tino@vtkn.io>>)
  * [[`f155785`](http://github.com/koajs/koa/commit/f155785e2bb42b5ddf0a8156401c6dafdf57ba8b)] - chore: support `writableEnded` (#1402) (Konstantin Vyatkin <<tino@vtkn.io>>)
  * [[`b968688`](http://github.com/koajs/koa/commit/b968688afe2c727ae141f50aa983d481dbc1dbbf)] - chore: add FUNDING.yml (#1403) (Konstantin Vyatkin <<tino@vtkn.io>>)
  * [[`4f96829`](http://github.com/koajs/koa/commit/4f968298f97394e488297ec32c8e927a3a322076)] - chore: remove isJSON in res.length (#1399) (Konstantin Vyatkin <<tino@vtkn.io>>)
  * [[`8be5626`](http://github.com/koajs/koa/commit/8be5626bbb54e6c899a1b71d22411709126d9fea)] - build: enable codecov partial coverage and use bash uploader (#1396) (Konstantin Vyatkin <<tino@vtkn.io>>)
  * [[`ef5c43b`](http://github.com/koajs/koa/commit/ef5c43bcbcf31819e032c3b7ae7654b7f8e9358b)] - chore: use rest params (#1393) (Konstantin Vyatkin <<tino@vtkn.io>>)

2.10.0 / 2019-10-12
==================

**features**
  * [[`d7f7f77`](http://github.com/koajs/koa/commit/d7f7f77689e2eaef050686be2bdf3e72881a79ac)] - feat: support sameSite=none cookies (bump cookies dependency) (#1390) (Filip Skokan <<panva.ip@gmail.com>>)

2.9.0 / 2019-10-12
==================

**features**
  * [[`2d1c598`](http://github.com/koajs/koa/commit/2d1c5981869e0fe6f5bc71b5c5582accfd125cc6)] - feat: export HttpError from http-errors library (Micheal Hill <<micheal.hill@trunkplatform.com>>)

**others**
  * [[`cf70dbc`](http://github.com/koajs/koa/commit/cf70dbc6d2ba62bf1eb12b563dd5ecd27af6e2be)] - Chore: Use https in readme (#1389) (è°­ä¹é¼Ž <<109224573@qq.com>>)

2.8.2 / 2019-09-28
==================

**fixes**
  * [[`54e8fab`](http://github.com/koajs/koa/commit/54e8fab3e3d907bbb264caf3e28a24773d0d6fdb)] - fix: encode redirect url if not already encoded (#1384) (fengmk2 <<fengmk2@gmail.com>>)

**others**
  * [[`817b498`](http://github.com/koajs/koa/commit/817b49830571b45a8aec6b1fc1525434f5798c58)] - test: fix body test (#1375) (Robert Nagy <<ronagy@icloud.com>>)
  * [[`f75d445`](http://github.com/koajs/koa/commit/f75d4455359ecdf30eeb676e2c7f31d4cf7b42ed)] - test: fix end after end (#1374) (Robert Nagy <<ronagy@icloud.com>>)

2.8.1 / 2019-08-19
==================

**fixes**
  * [[`287e589`](http://github.com/koajs/koa/commit/287e589ac773d3738b2aa7d40e0b6d43dde5261b)] - fix: make options more compatibility (dead-horse <<dead_horse@qq.com>>)

2.8.0 / 2019-08-19
==================

**features**
  * [[`5afff89`](http://github.com/koajs/koa/commit/5afff89eca0efe7081309dc2d123309e825df221)] - feat: accept options in the Application constructor (#1372) (Jake <<djakelambert@gmail.com>>)

**fixes**
  * [[`ff70bdc`](http://github.com/koajs/koa/commit/ff70bdc75a30a37f63fc1f7d8cbae3204df3d982)] - fix: typo on document (#1355) (Jeff <<jeff.tian@outlook.com>>)

**others**
  * [[`3b23865`](http://github.com/koajs/koa/commit/3b23865340cfba075f61f7dba0ea31fcc27260ec)] - docs: parameter of request.get is case-insensitive (#1373) (Gunnlaugur Thor Briem <<gunnlaugur@gmail.com>>)
  * [[`a245d18`](http://github.com/koajs/koa/commit/a245d18a131341feec4f87659746954e78cae780)] - docs: Update response.socket (#1357) (Jeff <<jeff.tian@outlook.com>>)
  * [[`d1d65dd`](http://github.com/koajs/koa/commit/d1d65dd29d7bbaf9ea42eaa5fcb0da3fb4df98e9)] - chore(deps): install egg-bin, mm as devDeps not deps (#1366) (Edvard Chen <<pigeon73101@gmail.com>>)
  * [[`2c86b10`](http://github.com/koajs/koa/commit/2c86b10feafd868ebd071dda3a222e6f51972b5d)] - test: remove jest and use egg-bin(mocha) (#1363) (Yiyu He <<dead_horse@qq.com>>)
  * [[`219bf22`](http://github.com/koajs/koa/commit/219bf22237b11bc375e2e110b93db512f1acfdd4)] - docs(context): update link (#1354) (Peng Jie <<bivinity.pengzjie@gmail.com>>)
  * [[`52a6737`](http://github.com/koajs/koa/commit/52a673703a87a93c0f6a8552e6bd73caba66d2eb)] - chore: ignore Intellij IDEA project files (#1361) (Imon-Haque <<38266345+Imon-Haque@users.noreply.github.com>>)
  * [[`b9e3546`](http://github.com/koajs/koa/commit/b9e35469d3bbd0a1ee92e0a815ce2512904d4a18)] - docs(api): fix keygrip link (#1350) (Peng Jie <<bivinity.pengzjie@gmail.com>>)
  * [[`d4bdb5e`](http://github.com/koajs/koa/commit/d4bdb5ed9e2fe06ec44698b66c029f624135a0ab)] - chore: update eslint and fix lint errors (dead-horse <<dead_horse@qq.com>>)
  * [[`12960c4`](http://github.com/koajs/koa/commit/12960c437cc25c53e682cfe5bff06d74a5bb1eb9)] - build: test on 8/10/12 (dead-horse <<dead_horse@qq.com>>)
  * [[`00e8f7a`](http://github.com/koajs/koa/commit/00e8f7a1b7603aabdb7fb3567f485cb1c2076702)] - docs: ctx.type aliases ctx.response, not ctx.request (#1343) (Alex Berk <<berkalexanderc@gmail.com>>)
  * [[`62f29eb`](http://github.com/koajs/koa/commit/62f29eb0c4dee01170a5511615e5bcc9faca26ca)] - docs(context): update cookies link (#1348) (Peng Jie <<dean.leehom@gmail.com>>)
  * [[`b7fc526`](http://github.com/koajs/koa/commit/b7fc526ea49894f366153bd32997e02568c0b8a6)] - docs: fix typo in cookie path default value docs (#1340) (Igor Adamenko <<igoradamenko@users.noreply.github.com>>)
  * [[`23f7f54`](http://github.com/koajs/koa/commit/23f7f545abfe1fb6499cd61cc8ff41fd86cef4a0)] - chore: simplify variable (#1332) (kzhang <<godky@users.noreply.github.com>>)
  * [[`132c9ee`](http://github.com/koajs/koa/commit/132c9ee63f92a586a120ed3bd6b7ef023badb8bb)] - docs: Clarify the format of request.headers (#1325) (Dobes Vandermeer <<dobesv@gmail.com>>)
  * [[`5810f27`](http://github.com/koajs/koa/commit/5810f279a4caeda115f39e429c9671795613abf8)] - docs: Removed Document in Progress note in Koa vs Express (#1336) (Andrew Peterson <<andrew@andpeterson.com>>)
  * [[`75233d9`](http://github.com/koajs/koa/commit/75233d974a30af6e3b8ab38a73e5ede67172fc1c)] - chore: Consider removing this return statement; it will be ignored. (#1322) (Vern Brandl <<tkvern@users.noreply.github.com>>)
  * [[`04e07fd`](http://github.com/koajs/koa/commit/04e07fdc620841068f12b8edf36f27e6592a0a18)] - test: Buffer() is deprecated due to security and usability issues. so use the Buffer.alloc() instead (#1321) (Vern Brandl <<tkvern@users.noreply.github.com>>)
  * [[`130e363`](http://github.com/koajs/koa/commit/130e363856747b487652f04b5550056d7778e43a)] - docs: use 'fs-extra' instead of 'fs-promise' (#1309) (rosald <<35028438+rosald@users.noreply.github.com>>)
  * [[`2f2078b`](http://github.com/koajs/koa/commit/2f2078bf998bd3f44289ebd17eeccf5e12e4c134)] - chore: Update PR-welcome badge url (#1299) (James George <<jamesgeorge998001@gmail.com>>)

2.7.0 / 2019-01-28
==================

**features**
  * [[`b7bfa71`](http://github.com/koajs/koa/commit/b7bfa7113b8d1af49a57ab767f24a599ed92044f)] - feat: change set status assert, allowing valid custom statuses (#1308) (Martin Iwanowski <<martin@iwanowski.se>>)

**others**
  * [[`72f325b`](http://github.com/koajs/koa/commit/72f325b78edd0dc2aac940a76ce5f644005ce4c3)] - chore: add pr welcoming badge (#1291) (James George <<jamesgeorge998001@gmail.com>>)
  * [[`b15115b`](http://github.com/koajs/koa/commit/b15115b2cbfffe15827cd5e4368267d417b72f08)] - chore: Reduce unnecessary variable declarations (#1298) (call me saisai <<1457358080@qq.com>>)
  * [[`ad91ce2`](http://github.com/koajs/koa/commit/ad91ce2346cb34e5d5a49d07dd952d15f6c832a3)] - chore: license 2019 (dead-horse <<dead_horse@qq.com>>)
  * [[`b25e79d`](http://github.com/koajs/koa/commit/b25e79dfb599777a38157bd419395bd28369ee86)] - Mark two examples as live for the corresponding documentation change in https://github.com/koajs/koajs.com/pull/38. (#1031) (Francisco Ryan Tolmasky I <<tolmasky@gmail.com>>)
  * [[`d9ef603`](http://github.com/koajs/koa/commit/d9ef60398e88f2c2f958ab2b159d38052ffe7f8a)] - chore: Optimize array split (#1295) (Mikhail Bodrov <<connormiha1@gmail.com>>)
  * [[`9be8583`](http://github.com/koajs/koa/commit/9be858312553002841725b617050aaff3c48951d)] - chore: replace ~~ with Math.trunc in res.length (option) (#1288) (jeremiG <<gendronjeremi@gmail.com>>)
  * [[`7e46c20`](http://github.com/koajs/koa/commit/7e46c2058cb5994809eab5f4dbb12f21e937c72b)] - docs: add link to the license file (#1290) (James George <<jamesgeorge998001@gmail.com>>)
  * [[`48993ad`](http://github.com/koajs/koa/commit/48993ade9b0831fbce28d94b3b0963a4b0dccbdd)] - docs: Document other body types (#1285) (Douglas Wade <<douglas.b.wade@gmail.com>>)
  * [[`acb388b`](http://github.com/koajs/koa/commit/acb388bc0546b48fca11dce8aa7a595af2cda5e2)] - docs: Add security vulnerability disclosure instructions to the Readme (#1283) (Douglas Wade <<douglas.b.wade@gmail.com>>)
  * [[`a007198`](http://github.com/koajs/koa/commit/a007198fa23c19902b1f3ffb81498629e0e9c875)] - docs: Document ctx.app.emit (#1284) (Douglas Wade <<douglas.b.wade@gmail.com>>)
  * [[`f90e825`](http://github.com/koajs/koa/commit/f90e825da9d505c11b4262c50cd54553f979c300)] - docs: response.set(fields) won't overwrites previous header fields(#1282) (Douglas Wade <<douglas.b.wade@gmail.com>>)
  * [[`fc93c05`](http://github.com/koajs/koa/commit/fc93c05f68398f30abc46fd16ae6c673a1eee099)] - docs: update readme to add babel 7 instructions (#1274) (Vikram Rangaraj <<vik120@icloud.com>>)
  * [[`5560f72`](http://github.com/koajs/koa/commit/5560f729124f022ffed00085aafea43dded7fb03)] - chore: use the ability of `content-type` lib directly (#1276) (Jordan <<mingmingwon@gmail.com>>)

2.6.2 / 2018-11-10
==================

**fixes**
  * [[`9905199`](http://github.com/koajs/koa/commit/99051992a9f45eb0dd79e062681d6f5d366deb41)] - fix: Status message is not supported on HTTP/2 (#1264) (AndrÃ© Cruz <<andre@cabine.org>>)

**others**
  * [[`325792a`](http://github.com/koajs/koa/commit/325792aee92de0ba6fea306657933fc63dc00474)] - docs: add table of contents for guide.md (#1267) (ZYSzys <<zyszys98@gmail.com>>)
  * [[`71aaa29`](http://github.com/koajs/koa/commit/71aaa29591d6681f8579486f18d32ba1ee651a5b)] - docs: fix spelling in throw docs (#1269) (Martin Iwanowski <<martin@iwanowski.se>>)
  * [[`bc81ca9`](http://github.com/koajs/koa/commit/bc81ca9414296234c764b7306a19ba72b2e59b52)] - chore: use res instead of this.res (#1271) (Jordan <<mingmingwon@gmail.com>>)
  * [[`0251b38`](http://github.com/koajs/koa/commit/0251b38a8405471892c5eeaba7c8d54bd7028214)] - test: node v11 on travis (#1265) (Martin Iwanowski <<martin@iwanowski.se>>)
  * [[`88b92b4`](http://github.com/koajs/koa/commit/88b92b43153f21609aee71d47abcd4dc27a6586d)] - doc: updated docs for throw() to pass status as first param. (#1268) (Waleed Ashraf <<waleedashraf@outlook.com>>)

2.6.1 / 2018-10-23
==================

**fixes**
  * [[`4964242`](http://github.com/koajs/koa/commit/49642428342e5f291eb9d690802e83ed830623b5)] - fix: use X-Forwarded-Host first on app.proxy present (#1263) (fengmk2 <<fengmk2@gmail.com>>)

2.6.0 / 2018-10-23
==================

**features**
  * [[`9c5c58b`](http://github.com/koajs/koa/commit/9c5c58b18363494976185e7ddc790ac63de840ed)] - feat: use :authority header of http2 requests as host (#1262) (Martin Michaelis <<code@mgjm.de>>)
  * [[`9146024`](http://github.com/koajs/koa/commit/9146024e1094e8bb871ab15d1b7fc556a710732f)] - feat: response.attachment append a parameter: options from contentDisposition (#1240) (å°é›· <<863837949@qq.com>>)

**others**
  * [[`d32623b`](http://github.com/koajs/koa/commit/d32623baa7a6273d47be67d587ad4ea0ecffc5de)] - docs: Update error-handling.md (#1239) (urugator <<j.placek@centrum.cz>>)

2.5.3 / 2018-09-11
==================

**fixes**
  * [[`2ee32f5`](http://github.com/koajs/koa/commit/2ee32f50b88b383317e33cc0a4bfaa5f2eadead7)] - fix: pin debug@~3.1.0 avoid deprecated warnning (#1245) (fengmk2 <<fengmk2@gmail.com>>)

**others**
  * [[`2180839`](http://github.com/koajs/koa/commit/2180839eda2cb16edcfda46ccfe24711680af850)] - docs: Update koa-vs-express.md (#1230) (Clayton Ray <<iamclaytonray@gmail.com>>)

2.5.2 / 2018-07-12
==================

  * deps: upgrade all dependencies
  * perf: avoid stringify when set header (#1220)
  * perf: cache content type's result (#1218)
  * perf: lazy init cookies and ip when first time use it (#1216)
  * chore: fix comment & approve cov (#1214)
  * docs: fix grammar
  * test&cov: add test case (#1211)
  * Lazily initialize `request.accept` and delegate `context.accept` (#1209)
  * fix: use non deprecated custom inspect (#1198)
  * Simplify processes in the getter `request.protocol` (#1203)
  * docs: better demonstrate middleware flow (#1195)
  * fix: Throw a TypeError instead of a AssertionError (#1199)
  * chore: mistake in a comment (#1201)
  * chore: use this.res.socket insteadof this.ctx.req.socket (#1177)
  * chore: Using "listenerCount" instead of "listeners" (#1184)

2.5.1 / 2018-04-27
==================

  * test: node v10 on travis (#1182)
  * fix tests: remove unnecessary assert doesNotThrow and api calls (#1170)
  * use this.response insteadof this.ctx.response (#1163)
  * deps: remove istanbul (#1151)
  * Update guide.md (#1150)

2.5.0 / 2018-02-11
==================

  * feat: ignore set header/status when header sent (#1137)
  * run coverage using --runInBand (#1141)
  * [Update] license year to 2018 (#1130)
  * docs: small grammatical fix in api docs index (#1111)
  * docs: fixed typo (#1112)
  * docs: capitalize K in word koa (#1126)
  * Error handling: on non-error throw try to stringify if error is an object (#1113)
  * Use eslint-config-koa (#1105)
  * Update mgol's name in AUTHORS, add .mailmap (#1100)
  * Avoid generating package locks instead of ignoring them (#1108)
  * chore: update copyright year to 2017 (#1095)


2.4.1 / 2017-11-06
==================

 * fix bad merge w/ 2.4.0

2.4.0 / 2017-11-06
==================

UNPUBLISHED

 * update `package.engines.node` to be more strict
 * update `fresh@^0.5.2`
 * fix: `inspect()` no longer crashes `context`
 * fix: gated `res.statusMessage` for HTTP/2
 * added: `app.handleRequest()` is exposed

2.3.0 / 2017-06-20
==================

 * fix: use `Buffer.from()`
 * test on node 7 & 8
 * add `package-lock.json` to `.gitignore`
 * run `lint --fix`
 * add `request.header` in addition to `request.headers`
 * add IPv6 hostname support

2.2.0 / 2017-03-14
==================

 * fix: drop `package.engines.node` requirement to >= 6.0.0
   * this fixes `yarn`, which errors when this semver range is not satisfied
 * bump `cookies@~0.7.0`
 * bump `fresh@^0.5.0`

2.1.0 / 2017-03-07
==================

 * added: return middleware chain promise from `callback()` #848
 * added: node v7.7+ `res.getHeaderNames()` support #930
 * added: `err.headerSent` in error handling #919
 * added: lots of docs!

2.0.1 / 2017-02-25
==================

NOTE: we hit a versioning snafu. `v2.0.0` was previously released,
so `v2.0.1` is released as the first `v2.x` with a `latest` tag.

 * upgrade mocha #900
 * add names to `application`'s request and response handlers #805
 * breaking: remove unused `app.name` #899
 * breaking: drop official support for node < 7.6

2.0.0 / ??????????
==================

 * Fix malformed content-type header causing exception on charset get (#898)
 * fix: subdomains should be [] if the host is an ip (#808)
 * don't pre-bound onerror [breaking change] (#800)
 * fix `ctx.flushHeaders()` to use `res.flushHeaders()` instead of `res.writeHead()` (#795)
 * fix(response): correct response.writable logic (#782)
 * merge v1.1.2 and v1.2.0 changes
 * include `koa-convert` so that generator functions still work
   * NOTE: generator functions are deprecated in v2 and will be removed in v3
 * improve linting
 * improve docs

2.0.0-alpha.8 / 2017-02-13
==================

 * Fix malformed content-type header causing exception on charset get (#898)

2.0.0-alpha.7 / 2016-09-07
==================

 * fix: subdomains should be [] if the host is an ip (#808)

2.0.0-alpha.6 / 2016-08-29
==================

  * don't pre-bound onerror [breaking change]

2.0.0-alpha.5 / 2016-08-10
==================

 * fix `ctx.flushHeaders()` to use `res.flushHeaders()` instead of `res.writeHead()`

2.0.0-alpha.4 / 2016-07-23
==================

 * fix `response.writeable` during pipelined requests

1.2.0 / 2016-03-03
==================

  * add support for `err.headers` in `ctx.onerror()`
    - see: https://github.com/koajs/koa/pull/668
    - note: you should set these headers in your custom error handlers as well
    - docs: https://github.com/koajs/koa/blob/master/docs/error-handling.md
  * fix `cookies`' detection of http/https
    - see: https://github.com/koajs/koa/pull/614
  * deprecate `app.experimental = true`. Koa v2 does not use this signature.
  * add a code of conduct
  * test against the latest version of node
  * add a lot of docs

1.1.2 / 2015-11-05
==================

  * ensure parseurl always working as expected
  * fix Application.inspect() â€“ missing .proxy value.

2.0.0-alpha.3 / 2015-11-05
==================

  * ensure parseurl always working as expected. #586
  * fix Application.inspect() â€“ missing .proxy value. Closes #563

2.0.0-alpha.2 / 2015-10-27
==================

 * remove `co` and generator support completely
 * improved documentation
 * more refactoring into ES6

2.0.0-alpha.1 / 2015-10-22
==================

 * change the middleware signature to `async (ctx, next) => await next()`
 * drop node < 4 support and rewrite the codebase in ES6

1.1.1 / 2015-10-22
==================

 * do not send a content-type when the type is unknown #536

1.1.0 / 2015-10-11
==================

 * add `app.silent=<Boolean>` to toggle error logging @tejasmanohar #486
 * add `ctx.origin` @chentsulin #480
 * various refactoring
   - add `use strict` everywhere

1.0.0 / 2015-08-22
==================

 * add `this.req` check for `querystring()`
 * don't log errors with `err.expose`
 * `koa` now follows semver!

0.21.0 / 2015-05-23
==================

 * empty `request.query` objects are now always the same instance
 * bump `fresh@0.3.0`

0.20.0 / 2015-04-30
==================

Breaking change if you're using `this.get('ua') === undefined` etc.
For more details please checkout [#438](https://github.com/koajs/koa/pull/438).

  * make sure helpers return strict string
  * feat: alias response.headers to response.header

0.19.1 / 2015-04-14
==================

  * non-error thrown, fixed #432

0.19.0 / 2015-04-05
==================

 * `req.host` and `req.hostname` now always return a string (semi-breaking change)
 * improved test coverage

0.18.1 / 2015-03-01
==================

 * move babel to `devDependencies`

0.18.0 / 2015-02-14
==================

 * experimental es7 async function support via `app.experimental = true`
 * use `content-type` instead of `media-typer`

0.17.0 / 2015-02-05
==================

Breaking change if you're using an old version of node v0.11!
Otherwise, you should have no trouble upgrading.

 * official iojs support
 * drop support for node.js `>= 0.11.0 < 0.11.16`
 * use `Object.setPrototypeOf()` instead of `__proto__`
 * update dependencies

0.16.0 / 2015-01-27
==================

 * add `res.append()`
 * fix path usage for node@0.11.15

0.15.0 / 2015-01-18
==================

 * add `this.href`

0.14.0 / 2014-12-15
==================

 * remove `x-powered-by` response header
 * fix the content type on plain-text redirects
 * add ctx.state
 * bump `co@4`
 * bump dependencies

0.13.0 / 2014-10-17
==================

 * add this.message
 * custom status support via `statuses`

0.12.2 / 2014-09-28
==================

 * use wider semver ranges for dependencies koa maintainers also maintain

0.12.1 / 2014-09-21
==================

 * bump content-disposition
 * bump statuses

0.12.0 / 2014-09-20
==================

 * add this.assert()
 * use content-disposition

0.11.0 / 2014-09-08
==================

 * fix app.use() assertion #337
 * bump a lot of dependencies

0.10.0 / 2014-08-12
==================

 * add `ctx.throw(err, object)` support
 * add `ctx.throw(err, status, object)` support

0.9.0 / 2014-08-07
==================

 * add: do not set `err.expose` to true when err.status not a valid http status code
 * add: alias `request.headers` as `request.header`
 * add context.inspect(), cleanup app.inspect()
 * update cookies
 * fix `err.status` invalid lead to uncaughtException
 * fix middleware gif, close #322

0.8.2 / 2014-07-27
==================

 * bump co
 * bump parseurl

0.8.1 / 2014-06-24
==================

 * bump type-is

0.8.0 / 2014-06-13
==================

 * add `this.response.is()``
 * remove `.status=string` and `res.statusString` #298

0.7.0 / 2014-06-07
==================

 * add `this.lastModified` and `this.etag` as both getters and setters for ubiquity #292.
   See koajs/koa@4065bf7 for an explanation.
 * refactor `this.response.vary()` to use [vary](https://github.com/expressjs/vary) #291
 * remove `this.response.append()` #291

0.6.3 / 2014-06-06
==================

 * fix res.type= when the extension is unknown
 * assert when non-error is passed to app.onerror #287
 * bump finished

0.6.2 / 2014-06-03
==================

 * switch from set-type to mime-types

0.6.1 / 2014-05-11
==================

 * bump type-is
 * bump koa-compose

0.6.0 / 2014-05-01
==================

 * add nicer error formatting
 * add: assert object type in ctx.onerror
 * change .status default to 404. Closes #263
 * remove .outputErrors, suppress output when handled by the dev. Closes #272
 * fix content-length when body is re-assigned. Closes #267

0.5.5 / 2014-04-14
==================

 * fix length when .body is missing
 * fix: make sure all intermediate stream bodies will be destroyed

0.5.4 / 2014-04-12
==================

 * fix header stripping in a few cases

0.5.3 / 2014-04-09
==================

 * change res.type= to always default charset. Closes #252
 * remove ctx.inspect() implementation. Closes #164

0.5.2 / 2014-03-23
==================

 * fix: inspection of `app` and `app.toJSON()`
 * fix: let `this.throw`n errors provide their own status
 * fix: overwriting of `content-type` w/ `HEAD` requests
 * refactor: use statuses
 * refactor: use escape-html
 * bump dev deps

0.5.1 / 2014-03-06
==================

 * add request.hostname(getter). Closes #224
 * remove response.charset and ctx.charset (too confusing in relation to ctx.type) [breaking change]
 * fix a debug() name

0.5.0 / 2014-02-19
==================

 * add context.charset
 * add context.charset=
 * add request.charset
 * add response.charset
 * add response.charset=
 * fix response.body= html content sniffing
 * change ctx.length and ctx.type to always delegate to response object [breaking change]

0.4.0 / 2014-02-11
==================

 * remove app.jsonSpaces settings - moved to [koa-json](https://github.com/koajs/json)
 * add this.response=false to bypass koa's response handling
 * fix response handling after body has been sent
 * changed ctx.throw() to no longer .expose 5xx errors
 * remove app.keys getter/setter, update cookies, and remove keygrip deps
 * update fresh
 * update koa-compose

0.3.0 / 2014-01-17
==================

 * add ctx.host= delegate
 * add req.host=
 * add: context.throw supports Error instances
 * update co
 * update cookies

0.2.1 / 2013-12-30
==================

 * add better 404 handling
 * add check for fn._name in debug() output
 * add explicit .toJSON() calls to ctx.toJSON()

0.2.0 / 2013-12-28
==================

 * add support for .throw(status, msg). Closes #130
 * add GeneratorFunction assertion for app.use(). Closes #120
 * refactor: move `.is()` to `type-is`
 * refactor: move content negotiation to "accepts"
 * refactor: allow any streams with .pipe method
 * remove `next` in callback for now

0.1.2 / 2013-12-21
==================

 * update co, koa-compose, keygrip
 * use on-socket-error
 * add throw(status, msg) support
 * assert middleware is GeneratorFunction
 * ducktype stream checks
 * remove `next` is `app.callback()`

0.1.1 / 2013-12-19
==================

 * fix: cleanup socker error handler on response

'use strict';

/**
 * Module dependencies.
 */

const isGeneratorFunction = require('is-generator-function');
const debug = require('debug')('koa:application');
const onFinished = require('on-finished');
const response = require('./response');
const compose = require('koa-compose');
const context = require('./context');
const request = require('./request');
const statuses = require('statuses');
const Emitter = require('events');
const util = require('util');
const Stream = require('stream');
const http = require('http');
const only = require('only');
const convert = require('koa-convert');
const deprecate = require('depd')('koa');
const { HttpError } = require('http-errors');

/**
 * Expose `Application` class.
 * Inherits from `Emitter.prototype`.
 */

module.exports = class Application extends Emitter {
  /**
   * Initialize a new `Application`.
   *
   * @api public
   */

  /**
    *
    * @param {object} [options] Application options
    * @param {string} [options.env='development'] Environment
    * @param {string[]} [options.keys] Signed cookie keys
    * @param {boolean} [options.proxy] Trust proxy headers
    * @param {number} [options.subdomainOffset] Subdomain offset
    * @param {boolean} [options.proxyIpHeader] proxy ip header, default to X-Forwarded-For
    * @param {boolean} [options.maxIpsCount] max ips read from proxy ip header, default to 0 (means infinity)
    *
    */

  constructor(options) {
    super();
    options = options || {};
    this.proxy = options.proxy || false;
    this.subdomainOffset = options.subdomainOffset || 2;
    this.proxyIpHeader = options.proxyIpHeader || 'X-Forwarded-For';
    this.maxIpsCount = options.maxIpsCount || 0;
    this.env = options.env || process.env.NODE_ENV || 'development';
    if (options.keys) this.keys = options.keys;
    this.middleware = [];
    this.context = Object.create(context);
    this.request = Object.create(request);
    this.response = Object.create(response);
    // util.inspect.custom support for node 6+
    /* istanbul ignore else */
    if (util.inspect.custom) {
      this[util.inspect.custom] = this.inspect;
    }
  }

  /**
   * Shorthand for:
   *
   *    http.createServer(app.callback()).listen(...)
   *
   * @param {Mixed} ...
   * @return {Server}
   * @api public
   */

  listen(...args) {
    debug('listen');
    const server = http.createServer(this.callback());
    return server.listen(...args);
  }

  /**
   * Return JSON representation.
   * We only bother showing settings.
   *
   * @return {Object}
   * @api public
   */

  toJSON() {
    return only(this, [
      'subdomainOffset',
      'proxy',
      'env'
    ]);
  }

  /**
   * Inspect implementation.
   *
   * @return {Object}
   * @api public
   */

  inspect() {
    return this.toJSON();
  }

  /**
   * Use the given middleware `fn`.
   *
   * Old-style middleware will be converted.
   *
   * @param {Function} fn
   * @return {Application} self
   * @api public
   */

  use(fn) {
    if (typeof fn !== 'function') throw new TypeError('middleware must be a function!');
    if (isGeneratorFunction(fn)) {
      deprecate('Support for generators will be removed in v3. ' +
                'See the documentation for examples of how to convert old middleware ' +
                'https://github.com/koajs/koa/blob/master/docs/migration.md');
      fn = convert(fn);
    }
    debug('use %s', fn._name || fn.name || '-');
    this.middleware.push(fn);
    return this;
  }

  /**
   * Return a request handler callback
   * for node's native http server.
   *
   * @return {Function}
   * @api public
   */

  callback() {
    const fn = compose(this.middleware);

    if (!this.listenerCount('error')) this.on('error', this.onerror);

    const handleRequest = (req, res) => {
      const ctx = this.createContext(req, res);
      return this.handleRequest(ctx, fn);
    };

    return handleRequest;
  }

  /**
   * Handle request in callback.
   *
   * @api private
   */

  handleRequest(ctx, fnMiddleware) {
    const res = ctx.res;
    res.statusCode = 404;
    const onerror = err => ctx.onerror(err);
    const handleResponse = () => respond(ctx);
    onFinished(res, onerror);
    return fnMiddleware(ctx).then(handleResponse).catch(onerror);
  }

  /**
   * Initialize a new context.
   *
   * @api private
   */

  createContext(req, res) {
    const context = Object.create(this.context);
    const request = context.request = Object.create(this.request);
    const response = context.response = Object.create(this.response);
    context.app = request.app = response.app = this;
    context.req = request.req = response.req = req;
    context.res = request.res = response.res = res;
    request.ctx = response.ctx = context;
    request.response = response;
    response.request = request;
    context.originalUrl = request.originalUrl = req.url;
    context.state = {};
    return context;
  }

  /**
   * Default error handler.
   *
   * @param {Error} err
   * @api private
   */

  onerror(err) {
    // When dealing with cross-globals a normal `instanceof` check doesn't work properly.
    // See https://github.com/koajs/koa/issues/1466
    // We can probably remove it once jest fixes https://github.com/facebook/jest/issues/2549.
    const isNativeError =
      Object.prototype.toString.call(err) === '[object Error]' ||
      err instanceof Error;
    if (!isNativeError) throw new TypeError(util.format('non-error thrown: %j', err));

    if (404 === err.status || err.expose) return;
    if (this.silent) return;

    const msg = err.stack || err.toString();
    console.error(`\n${msg.replace(/^/gm, '  ')}\n`);
  }

  /**
   * Help TS users comply to CommonJS, ESM, bundler mismatch.
   * @see https://github.com/koajs/koa/issues/1513
   */

  static get default() {
    return Application;
  }
};

/**
 * Response helper.
 */

function respond(ctx) {
  // allow bypassing koa
  if (false === ctx.respond) return;

  if (!ctx.writable) return;

  const res = ctx.res;
  let body = ctx.body;
  const code = ctx.status;

  // ignore body
  if (statuses.empty[code]) {
    // strip headers
    ctx.body = null;
    return res.end();
  }

  if ('HEAD' === ctx.method) {
    if (!res.headersSent && !ctx.response.has('Content-Length')) {
      const { length } = ctx.response;
      if (Number.isInteger(length)) ctx.length = length;
    }
    return res.end();
  }

  // status body
  if (null == body) {
    if (ctx.response._explicitNullBody) {
      ctx.response.remove('Content-Type');
      ctx.response.remove('Transfer-Encoding');
      return res.end();
    }
    if (ctx.req.httpVersionMajor >= 2) {
      body = String(code);
    } else {
      body = ctx.message || String(code);
    }
    if (!res.headersSent) {
      ctx.type = 'text';
      ctx.length = Buffer.byteLength(body);
    }
    return res.end(body);
  }

  // responses
  if (Buffer.isBuffer(body)) return res.end(body);
  if ('string' === typeof body) return res.end(body);
  if (body instanceof Stream) return body.pipe(res);

  // body: json
  body = JSON.stringify(body);
  if (!res.headersSent) {
    ctx.length = Buffer.byteLength(body);
  }
  res.end(body);
}

/**
 * Make HttpError available to consumers of the library so that consumers don't
 * have a direct dependency upon `http-errors`
 */

module.exports.HttpError = HttpError;

'use strict';

/**
 * Module dependencies.
 */

const util = require('util');
const createError = require('http-errors');
const httpAssert = require('http-assert');
const delegate = require('delegates');
const statuses = require('statuses');
const Cookies = require('cookies');

const COOKIES = Symbol('context#cookies');

/**
 * Context prototype.
 */

const proto = module.exports = {

  /**
   * util.inspect() implementation, which
   * just returns the JSON output.
   *
   * @return {Object}
   * @api public
   */

  inspect() {
    if (this === proto) return this;
    return this.toJSON();
  },

  /**
   * Return JSON representation.
   *
   * Here we explicitly invoke .toJSON() on each
   * object, as iteration will otherwise fail due
   * to the getters and cause utilities such as
   * clone() to fail.
   *
   * @return {Object}
   * @api public
   */

  toJSON() {
    return {
      request: this.request.toJSON(),
      response: this.response.toJSON(),
      app: this.app.toJSON(),
      originalUrl: this.originalUrl,
      req: '<original node req>',
      res: '<original node res>',
      socket: '<original node socket>'
    };
  },

  /**
   * Similar to .throw(), adds assertion.
   *
   *    this.assert(this.user, 401, 'Please login!');
   *
   * See: https://github.com/jshttp/http-assert
   *
   * @param {Mixed} test
   * @param {Number} status
   * @param {String} message
   * @api public
   */

  assert: httpAssert,

  /**
   * Throw an error with `status` (default 500) and
   * `msg`. Note that these are user-level
   * errors, and the message may be exposed to the client.
   *
   *    this.throw(403)
   *    this.throw(400, 'name required')
   *    this.throw('something exploded')
   *    this.throw(new Error('invalid'))
   *    this.throw(400, new Error('invalid'))
   *
   * See: https://github.com/jshttp/http-errors
   *
   * Note: `status` should only be passed as the first parameter.
   *
   * @param {String|Number|Error} err, msg or status
   * @param {String|Number|Error} [err, msg or status]
   * @param {Object} [props]
   * @api public
   */

  throw(...args) {
    throw createError(...args);
  },

  /**
   * Default error handling.
   *
   * @param {Error} err
   * @api private
   */

  onerror(err) {
    // don't do anything if there is no error.
    // this allows you to pass `this.onerror`
    // to node-style callbacks.
    if (null == err) return;

    // When dealing with cross-globals a normal `instanceof` check doesn't work properly.
    // See https://github.com/koajs/koa/issues/1466
    // We can probably remove it once jest fixes https://github.com/facebook/jest/issues/2549.
    const isNativeError =
      Object.prototype.toString.call(err) === '[object Error]' ||
      err instanceof Error;
    if (!isNativeError) err = new Error(util.format('non-error thrown: %j', err));

    let headerSent = false;
    if (this.headerSent || !this.writable) {
      headerSent = err.headerSent = true;
    }

    // delegate
    this.app.emit('error', err, this);

    // nothing we can do here other
    // than delegate to the app-level
    // handler and log.
    if (headerSent) {
      return;
    }

    const { res } = this;

    // first unset all headers
    /* istanbul ignore else */
    if (typeof res.getHeaderNames === 'function') {
      res.getHeaderNames().forEach(name => res.removeHeader(name));
    } else {
      res._headers = {}; // Node < 7.7
    }

    // then set those specified
    this.set(err.headers);

    // force text/plain
    this.type = 'text';

    let statusCode = err.status || err.statusCode;

    // ENOENT support
    if ('ENOENT' === err.code) statusCode = 404;

    // default to 500
    if ('number' !== typeof statusCode || !statuses[statusCode]) statusCode = 500;

    // respond
    const code = statuses[statusCode];
    const msg = err.expose ? err.message : code;
    this.status = err.status = statusCode;
    this.length = Buffer.byteLength(msg);
    res.end(msg);
  },

  get cookies() {
    if (!this[COOKIES]) {
      this[COOKIES] = new Cookies(this.req, this.res, {
        keys: this.app.keys,
        secure: this.request.secure
      });
    }
    return this[COOKIES];
  },

  set cookies(_cookies) {
    this[COOKIES] = _cookies;
  }
};

/**
 * Custom inspection implementation for newer Node.js versions.
 *
 * @return {Object}
 * @api public
 */

/* istanbul ignore else */
if (util.inspect.custom) {
  module.exports[util.inspect.custom] = module.exports.inspect;
}

/**
 * Response delegation.
 */

delegate(proto, 'response')
  .method('attachment')
  .method('redirect')
  .method('remove')
  .method('vary')
  .method('has')
  .method('set')
  .method('append')
  .method('flushHeaders')
  .access('status')
  .access('message')
  .access('body')
  .access('length')
  .access('type')
  .access('lastModified')
  .access('etag')
  .getter('headerSent')
  .getter('writable');

/**
 * Request delegation.
 */

delegate(proto, 'request')
  .method('acceptsLanguages')
  .method('acceptsEncodings')
  .method('acceptsCharsets')
  .method('accepts')
  .method('get')
  .method('is')
  .access('querystring')
  .access('idempotent')
  .access('socket')
  .access('search')
  .access('method')
  .access('query')
  .access('path')
  .access('url')
  .access('accept')
  .getter('origin')
  .getter('href')
  .getter('subdomains')
  .getter('protocol')
  .getter('host')
  .getter('hostname')
  .getter('URL')
  .getter('header')
  .getter('headers')
  .getter('secure')
  .getter('stale')
  .getter('fresh')
  .getter('ips')
  .getter('ip');

'use strict';

/**
 * Module dependencies.
 */

const URL = require('url').URL;
const net = require('net');
const accepts = require('accepts');
const contentType = require('content-type');
const stringify = require('url').format;
const parse = require('parseurl');
const qs = require('querystring');
const typeis = require('type-is');
const fresh = require('fresh');
const only = require('only');
const util = require('util');

const IP = Symbol('context#ip');

/**
 * Prototype.
 */

module.exports = {

  /**
   * Return request header.
   *
   * @return {Object}
   * @api public
   */

  get header() {
    return this.req.headers;
  },

  /**
   * Set request header.
   *
   * @api public
   */

  set header(val) {
    this.req.headers = val;
  },

  /**
   * Return request header, alias as request.header
   *
   * @return {Object}
   * @api public
   */

  get headers() {
    return this.req.headers;
  },

  /**
   * Set request header, alias as request.header
   *
   * @api public
   */

  set headers(val) {
    this.req.headers = val;
  },

  /**
   * Get request URL.
   *
   * @return {String}
   * @api public
   */

  get url() {
    return this.req.url;
  },

  /**
   * Set request URL.
   *
   * @api public
   */

  set url(val) {
    this.req.url = val;
  },

  /**
   * Get origin of URL.
   *
   * @return {String}
   * @api public
   */

  get origin() {
    return `${this.protocol}://${this.host}`;
  },

  /**
   * Get full request URL.
   *
   * @return {String}
   * @api public
   */

  get href() {
    // support: `GET http://example.com/foo`
    if (/^https?:\/\//i.test(this.originalUrl)) return this.originalUrl;
    return this.origin + this.originalUrl;
  },

  /**
   * Get request method.
   *
   * @return {String}
   * @api public
   */

  get method() {
    return this.req.method;
  },

  /**
   * Set request method.
   *
   * @param {String} val
   * @api public
   */

  set method(val) {
    this.req.method = val;
  },

  /**
   * Get request pathname.
   *
   * @return {String}
   * @api public
   */

  get path() {
    return parse(this.req).pathname;
  },

  /**
   * Set pathname, retaining the query string when present.
   *
   * @param {String} path
   * @api public
   */

  set path(path) {
    const url = parse(this.req);
    if (url.pathname === path) return;

    url.pathname = path;
    url.path = null;

    this.url = stringify(url);
  },

  /**
   * Get parsed query string.
   *
   * @return {Object}
   * @api public
   */

  get query() {
    const str = this.querystring;
    const c = this._querycache = this._querycache || {};
    return c[str] || (c[str] = qs.parse(str));
  },

  /**
   * Set query string as an object.
   *
   * @param {Object} obj
   * @api public
   */

  set query(obj) {
    this.querystring = qs.stringify(obj);
  },

  /**
   * Get query string.
   *
   * @return {String}
   * @api public
   */

  get querystring() {
    if (!this.req) return '';
    return parse(this.req).query || '';
  },

  /**
   * Set query string.
   *
   * @param {String} str
   * @api public
   */

  set querystring(str) {
    const url = parse(this.req);
    if (url.search === `?${str}`) return;

    url.search = str;
    url.path = null;

    this.url = stringify(url);
  },

  /**
   * Get the search string. Same as the query string
   * except it includes the leading ?.
   *
   * @return {String}
   * @api public
   */

  get search() {
    if (!this.querystring) return '';
    return `?${this.querystring}`;
  },

  /**
   * Set the search string. Same as
   * request.querystring= but included for ubiquity.
   *
   * @param {String} str
   * @api public
   */

  set search(str) {
    this.querystring = str;
  },

  /**
   * Parse the "Host" header field host
   * and support X-Forwarded-Host when a
   * proxy is enabled.
   *
   * @return {String} hostname:port
   * @api public
   */

  get host() {
    const proxy = this.app.proxy;
    let host = proxy && this.get('X-Forwarded-Host');
    if (!host) {
      if (this.req.httpVersionMajor >= 2) host = this.get(':authority');
      if (!host) host = this.get('Host');
    }
    if (!host) return '';
    return host.split(/\s*,\s*/, 1)[0];
  },

  /**
   * Parse the "Host" header field hostname
   * and support X-Forwarded-Host when a
   * proxy is enabled.
   *
   * @return {String} hostname
   * @api public
   */

  get hostname() {
    const host = this.host;
    if (!host) return '';
    if ('[' === host[0]) return this.URL.hostname || ''; // IPv6
    return host.split(':', 1)[0];
  },

  /**
   * Get WHATWG parsed URL.
   * Lazily memoized.
   *
   * @return {URL|Object}
   * @api public
   */

  get URL() {
    /* istanbul ignore else */
    if (!this.memoizedURL) {
      const originalUrl = this.originalUrl || ''; // avoid undefined in template string
      try {
        this.memoizedURL = new URL(`${this.origin}${originalUrl}`);
      } catch (err) {
        this.memoizedURL = Object.create(null);
      }
    }
    return this.memoizedURL;
  },

  /**
   * Check if the request is fresh, aka
   * Last-Modified and/or the ETag
   * still match.
   *
   * @return {Boolean}
   * @api public
   */

  get fresh() {
    const method = this.method;
    const s = this.ctx.status;

    // GET or HEAD for weak freshness validation only
    if ('GET' !== method && 'HEAD' !== method) return false;

    // 2xx or 304 as per rfc2616 14.26
    if ((s >= 200 && s < 300) || 304 === s) {
      return fresh(this.header, this.response.header);
    }

    return false;
  },

  /**
   * Check if the request is stale, aka
   * "Last-Modified" and / or the "ETag" for the
   * resource has changed.
   *
   * @return {Boolean}
   * @api public
   */

  get stale() {
    return !this.fresh;
  },

  /**
   * Check if the request is idempotent.
   *
   * @return {Boolean}
   * @api public
   */

  get idempotent() {
    const methods = ['GET', 'HEAD', 'PUT', 'DELETE', 'OPTIONS', 'TRACE'];
    return !!~methods.indexOf(this.method);
  },

  /**
   * Return the request socket.
   *
   * @return {Connection}
   * @api public
   */

  get socket() {
    return this.req.socket;
  },

  /**
   * Get the charset when present or undefined.
   *
   * @return {String}
   * @api public
   */

  get charset() {
    try {
      const { parameters } = contentType.parse(this.req);
      return parameters.charset || '';
    } catch (e) {
      return '';
    }
  },

  /**
   * Return parsed Content-Length when present.
   *
   * @return {Number}
   * @api public
   */

  get length() {
    const len = this.get('Content-Length');
    if (len === '') return;
    return ~~len;
  },

  /**
   * Return the protocol string "http" or "https"
   * when requested with TLS. When the proxy setting
   * is enabled the "X-Forwarded-Proto" header
   * field will be trusted. If you're running behind
   * a reverse proxy that supplies https for you this
   * may be enabled.
   *
   * @return {String}
   * @api public
   */

  get protocol() {
    if (this.socket.encrypted) return 'https';
    if (!this.app.proxy) return 'http';
    const proto = this.get('X-Forwarded-Proto');
    return proto ? proto.split(/\s*,\s*/, 1)[0] : 'http';
  },

  /**
   * Shorthand for:
   *
   *    this.protocol == 'https'
   *
   * @return {Boolean}
   * @api public
   */

  get secure() {
    return 'https' === this.protocol;
  },

  /**
   * When `app.proxy` is `true`, parse
   * the "X-Forwarded-For" ip address list.
   *
   * For example if the value was "client, proxy1, proxy2"
   * you would receive the array `["client", "proxy1", "proxy2"]`
   * where "proxy2" is the furthest down-stream.
   *
   * @return {Array}
   * @api public
   */

  get ips() {
    const proxy = this.app.proxy;
    const val = this.get(this.app.proxyIpHeader);
    let ips = proxy && val
      ? val.split(/\s*,\s*/)
      : [];
    if (this.app.maxIpsCount > 0) {
      ips = ips.slice(-this.app.maxIpsCount);
    }
    return ips;
  },

  /**
   * Return request's remote address
   * When `app.proxy` is `true`, parse
   * the "X-Forwarded-For" ip address list and return the first one
   *
   * @return {String}
   * @api public
   */

  get ip() {
    if (!this[IP]) {
      this[IP] = this.ips[0] || this.socket.remoteAddress || '';
    }
    return this[IP];
  },

  set ip(_ip) {
    this[IP] = _ip;
  },

  /**
   * Return subdomains as an array.
   *
   * Subdomains are the dot-separated parts of the host before the main domain
   * of the app. By default, the domain of the app is assumed to be the last two
   * parts of the host. This can be changed by setting `app.subdomainOffset`.
   *
   * For example, if the domain is "tobi.ferrets.example.com":
   * If `app.subdomainOffset` is not set, this.subdomains is
   * `["ferrets", "tobi"]`.
   * If `app.subdomainOffset` is 3, this.subdomains is `["tobi"]`.
   *
   * @return {Array}
   * @api public
   */

  get subdomains() {
    const offset = this.app.subdomainOffset;
    const hostname = this.hostname;
    if (net.isIP(hostname)) return [];
    return hostname
      .split('.')
      .reverse()
      .slice(offset);
  },

  /**
   * Get accept object.
   * Lazily memoized.
   *
   * @return {Object}
   * @api private
   */

  get accept() {
    return this._accept || (this._accept = accepts(this.req));
  },

  /**
   * Set accept object.
   *
   * @param {Object}
   * @api private
   */

  set accept(obj) {
    this._accept = obj;
  },

  /**
   * Check if the given `type(s)` is acceptable, returning
   * the best match when true, otherwise `false`, in which
   * case you should respond with 406 "Not Acceptable".
   *
   * The `type` value may be a single mime type string
   * such as "application/json", the extension name
   * such as "json" or an array `["json", "html", "text/plain"]`. When a list
   * or array is given the _best_ match, if any is returned.
   *
   * Examples:
   *
   *     // Accept: text/html
   *     this.accepts('html');
   *     // => "html"
   *
   *     // Accept: text/*, application/json
   *     this.accepts('html');
   *     // => "html"
   *     this.accepts('text/html');
   *     // => "text/html"
   *     this.accepts('json', 'text');
   *     // => "json"
   *     this.accepts('application/json');
   *     // => "application/json"
   *
   *     // Accept: text/*, application/json
   *     this.accepts('image/png');
   *     this.accepts('png');
   *     // => false
   *
   *     // Accept: text/*;q=.5, application/json
   *     this.accepts(['html', 'json']);
   *     this.accepts('html', 'json');
   *     // => "json"
   *
   * @param {String|Array} type(s)...
   * @return {String|Array|false}
   * @api public
   */

  accepts(...args) {
    return this.accept.types(...args);
  },

  /**
   * Return accepted encodings or best fit based on `encodings`.
   *
   * Given `Accept-Encoding: gzip, deflate`
   * an array sorted by quality is returned:
   *
   *     ['gzip', 'deflate']
   *
   * @param {String|Array} encoding(s)...
   * @return {String|Array}
   * @api public
   */

  acceptsEncodings(...args) {
    return this.accept.encodings(...args);
  },

  /**
   * Return accepted charsets or best fit based on `charsets`.
   *
   * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
   * an array sorted by quality is returned:
   *
   *     ['utf-8', 'utf-7', 'iso-8859-1']
   *
   * @param {String|Array} charset(s)...
   * @return {String|Array}
   * @api public
   */

  acceptsCharsets(...args) {
    return this.accept.charsets(...args);
  },

  /**
   * Return accepted languages or best fit based on `langs`.
   *
   * Given `Accept-Language: en;q=0.8, es, pt`
   * an array sorted by quality is returned:
   *
   *     ['es', 'pt', 'en']
   *
   * @param {String|Array} lang(s)...
   * @return {Array|String}
   * @api public
   */

  acceptsLanguages(...args) {
    return this.accept.languages(...args);
  },

  /**
   * Check if the incoming request contains the "Content-Type"
   * header field and if it contains any of the given mime `type`s.
   * If there is no request body, `null` is returned.
   * If there is no content type, `false` is returned.
   * Otherwise, it returns the first `type` that matches.
   *
   * Examples:
   *
   *     // With Content-Type: text/html; charset=utf-8
   *     this.is('html'); // => 'html'
   *     this.is('text/html'); // => 'text/html'
   *     this.is('text/*', 'application/json'); // => 'text/html'
   *
   *     // When Content-Type is application/json
   *     this.is('json', 'urlencoded'); // => 'json'
   *     this.is('application/json'); // => 'application/json'
   *     this.is('html', 'application/*'); // => 'application/json'
   *
   *     this.is('html'); // => false
   *
   * @param {String|String[]} [type]
   * @param {String[]} [types]
   * @return {String|false|null}
   * @api public
   */

  is(type, ...types) {
    return typeis(this.req, type, ...types);
  },

  /**
   * Return the request mime type void of
   * parameters such as "charset".
   *
   * @return {String}
   * @api public
   */

  get type() {
    const type = this.get('Content-Type');
    if (!type) return '';
    return type.split(';')[0];
  },

  /**
   * Return request header.
   *
   * The `Referrer` header field is special-cased,
   * both `Referrer` and `Referer` are interchangeable.
   *
   * Examples:
   *
   *     this.get('Content-Type');
   *     // => "text/plain"
   *
   *     this.get('content-type');
   *     // => "text/plain"
   *
   *     this.get('Something');
   *     // => ''
   *
   * @param {String} field
   * @return {String}
   * @api public
   */

  get(field) {
    const req = this.req;
    switch (field = field.toLowerCase()) {
      case 'referer':
      case 'referrer':
        return req.headers.referrer || req.headers.referer || '';
      default:
        return req.headers[field] || '';
    }
  },

  /**
   * Inspect implementation.
   *
   * @return {Object}
   * @api public
   */

  inspect() {
    if (!this.req) return;
    return this.toJSON();
  },

  /**
   * Return JSON representation.
   *
   * @return {Object}
   * @api public
   */

  toJSON() {
    return only(this, [
      'method',
      'url',
      'header'
    ]);
  }
};

/**
 * Custom inspection implementation for newer Node.js versions.
 *
 * @return {Object}
 * @api public
 */

/* istanbul ignore else */
if (util.inspect.custom) {
  module.exports[util.inspect.custom] = module.exports.inspect;
}

'use strict';

/**
 * Module dependencies.
 */

const contentDisposition = require('content-disposition');
const getType = require('cache-content-type');
const onFinish = require('on-finished');
const escape = require('escape-html');
const typeis = require('type-is').is;
const statuses = require('statuses');
const destroy = require('destroy');
const assert = require('assert');
const extname = require('path').extname;
const vary = require('vary');
const only = require('only');
const util = require('util');
const encodeUrl = require('encodeurl');
const Stream = require('stream');

/**
 * Prototype.
 */

module.exports = {

  /**
   * Return the request socket.
   *
   * @return {Connection}
   * @api public
   */

  get socket() {
    return this.res.socket;
  },

  /**
   * Return response header.
   *
   * @return {Object}
   * @api public
   */

  get header() {
    const { res } = this;
    return typeof res.getHeaders === 'function'
      ? res.getHeaders()
      : res._headers || {}; // Node < 7.7
  },

  /**
   * Return response header, alias as response.header
   *
   * @return {Object}
   * @api public
   */

  get headers() {
    return this.header;
  },

  /**
   * Get response status code.
   *
   * @return {Number}
   * @api public
   */

  get status() {
    return this.res.statusCode;
  },

  /**
   * Set response status code.
   *
   * @param {Number} code
   * @api public
   */

  set status(code) {
    if (this.headerSent) return;

    assert(Number.isInteger(code), 'status code must be a number');
    assert(code >= 100 && code <= 999, `invalid status code: ${code}`);
    this._explicitStatus = true;
    this.res.statusCode = code;
    if (this.req.httpVersionMajor < 2) this.res.statusMessage = statuses[code];
    if (this.body && statuses.empty[code]) this.body = null;
  },

  /**
   * Get response status message
   *
   * @return {String}
   * @api public
   */

  get message() {
    return this.res.statusMessage || statuses[this.status];
  },

  /**
   * Set response status message
   *
   * @param {String} msg
   * @api public
   */

  set message(msg) {
    this.res.statusMessage = msg;
  },

  /**
   * Get response body.
   *
   * @return {Mixed}
   * @api public
   */

  get body() {
    return this._body;
  },

  /**
   * Set response body.
   *
   * @param {String|Buffer|Object|Stream} val
   * @api public
   */

  set body(val) {
    const original = this._body;
    this._body = val;

    // no content
    if (null == val) {
      if (!statuses.empty[this.status]) this.status = 204;
      if (val === null) this._explicitNullBody = true;
      this.remove('Content-Type');
      this.remove('Content-Length');
      this.remove('Transfer-Encoding');
      return;
    }

    // set the status
    if (!this._explicitStatus) this.status = 200;

    // set the content-type only if not yet set
    const setType = !this.has('Content-Type');

    // string
    if ('string' === typeof val) {
      if (setType) this.type = /^\s*</.test(val) ? 'html' : 'text';
      this.length = Buffer.byteLength(val);
      return;
    }

    // buffer
    if (Buffer.isBuffer(val)) {
      if (setType) this.type = 'bin';
      this.length = val.length;
      return;
    }

    // stream
    if (val instanceof Stream) {
      onFinish(this.res, destroy.bind(null, val));
      if (original != val) {
        val.once('error', err => this.ctx.onerror(err));
        // overwriting
        if (null != original) this.remove('Content-Length');
      }

      if (setType) this.type = 'bin';
      return;
    }

    // json
    this.remove('Content-Length');
    this.type = 'json';
  },

  /**
   * Set Content-Length field to `n`.
   *
   * @param {Number} n
   * @api public
   */

  set length(n) {
    this.set('Content-Length', n);
  },

  /**
   * Return parsed response Content-Length when present.
   *
   * @return {Number}
   * @api public
   */

  get length() {
    if (this.has('Content-Length')) {
      return parseInt(this.get('Content-Length'), 10) || 0;
    }

    const { body } = this;
    if (!body || body instanceof Stream) return undefined;
    if ('string' === typeof body) return Buffer.byteLength(body);
    if (Buffer.isBuffer(body)) return body.length;
    return Buffer.byteLength(JSON.stringify(body));
  },

  /**
   * Check if a header has been written to the socket.
   *
   * @return {Boolean}
   * @api public
   */

  get headerSent() {
    return this.res.headersSent;
  },

  /**
   * Vary on `field`.
   *
   * @param {String} field
   * @api public
   */

  vary(field) {
    if (this.headerSent) return;

    vary(this.res, field);
  },

  /**
   * Perform a 302 redirect to `url`.
   *
   * The string "back" is special-cased
   * to provide Referrer support, when Referrer
   * is not present `alt` or "/" is used.
   *
   * Examples:
   *
   *    this.redirect('back');
   *    this.redirect('back', '/index.html');
   *    this.redirect('/login');
   *    this.redirect('http://google.com');
   *
   * @param {String} url
   * @param {String} [alt]
   * @api public
   */

  redirect(url, alt) {
    // location
    if ('back' === url) url = this.ctx.get('Referrer') || alt || '/';
    this.set('Location', encodeUrl(url));

    // status
    if (!statuses.redirect[this.status]) this.status = 302;

    // html
    if (this.ctx.accepts('html')) {
      url = escape(url);
      this.type = 'text/html; charset=utf-8';
      this.body = `Redirecting to <a href="${url}">${url}</a>.`;
      return;
    }

    // text
    this.type = 'text/plain; charset=utf-8';
    this.body = `Redirecting to ${url}.`;
  },

  /**
   * Set Content-Disposition header to "attachment" with optional `filename`.
   *
   * @param {String} filename
   * @api public
   */

  attachment(filename, options) {
    if (filename) this.type = extname(filename);
    this.set('Content-Disposition', contentDisposition(filename, options));
  },

  /**
   * Set Content-Type response header with `type` through `mime.lookup()`
   * when it does not contain a charset.
   *
   * Examples:
   *
   *     this.type = '.html';
   *     this.type = 'html';
   *     this.type = 'json';
   *     this.type = 'application/json';
   *     this.type = 'png';
   *
   * @param {String} type
   * @api public
   */

  set type(type) {
    type = getType(type);
    if (type) {
      this.set('Content-Type', type);
    } else {
      this.remove('Content-Type');
    }
  },

  /**
   * Set the Last-Modified date using a string or a Date.
   *
   *     this.response.lastModified = new Date();
   *     this.response.lastModified = '2013-09-13';
   *
   * @param {String|Date} type
   * @api public
   */

  set lastModified(val) {
    if ('string' === typeof val) val = new Date(val);
    this.set('Last-Modified', val.toUTCString());
  },

  /**
   * Get the Last-Modified date in Date form, if it exists.
   *
   * @return {Date}
   * @api public
   */

  get lastModified() {
    const date = this.get('last-modified');
    if (date) return new Date(date);
  },

  /**
   * Set the ETag of a response.
   * This will normalize the quotes if necessary.
   *
   *     this.response.etag = 'md5hashsum';
   *     this.response.etag = '"md5hashsum"';
   *     this.response.etag = 'W/"123456789"';
   *
   * @param {String} etag
   * @api public
   */

  set etag(val) {
    if (!/^(W\/)?"/.test(val)) val = `"${val}"`;
    this.set('ETag', val);
  },

  /**
   * Get the ETag of a response.
   *
   * @return {String}
   * @api public
   */

  get etag() {
    return this.get('ETag');
  },

  /**
   * Return the response mime type void of
   * parameters such as "charset".
   *
   * @return {String}
   * @api public
   */

  get type() {
    const type = this.get('Content-Type');
    if (!type) return '';
    return type.split(';', 1)[0];
  },

  /**
   * Check whether the response is one of the listed types.
   * Pretty much the same as `this.request.is()`.
   *
   * @param {String|String[]} [type]
   * @param {String[]} [types]
   * @return {String|false}
   * @api public
   */

  is(type, ...types) {
    return typeis(this.type, type, ...types);
  },

  /**
   * Return response header.
   *
   * Examples:
   *
   *     this.get('Content-Type');
   *     // => "text/plain"
   *
   *     this.get('content-type');
   *     // => "text/plain"
   *
   * @param {String} field
   * @return {String}
   * @api public
   */

  get(field) {
    return this.header[field.toLowerCase()] || '';
  },

  /**
   * Returns true if the header identified by name is currently set in the outgoing headers.
   * The header name matching is case-insensitive.
   *
   * Examples:
   *
   *     this.has('Content-Type');
   *     // => true
   *
   *     this.get('content-type');
   *     // => true
   *
   * @param {String} field
   * @return {boolean}
   * @api public
   */

  has(field) {
    return typeof this.res.hasHeader === 'function'
      ? this.res.hasHeader(field)
      // Node < 7.7
      : field.toLowerCase() in this.headers;
  },

  /**
   * Set header `field` to `val` or pass
   * an object of header fields.
   *
   * Examples:
   *
   *    this.set('Foo', ['bar', 'baz']);
   *    this.set('Accept', 'application/json');
   *    this.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });
   *
   * @param {String|Object|Array} field
   * @param {String} val
   * @api public
   */

  set(field, val) {
    if (this.headerSent) return;

    if (2 === arguments.length) {
      if (Array.isArray(val)) val = val.map(v => typeof v === 'string' ? v : String(v));
      else if (typeof val !== 'string') val = String(val);
      this.res.setHeader(field, val);
    } else {
      for (const key in field) {
        this.set(key, field[key]);
      }
    }
  },

  /**
   * Append additional header `field` with value `val`.
   *
   * Examples:
   *
   * ```
   * this.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);
   * this.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');
   * this.append('Warning', '199 Miscellaneous warning');
   * ```
   *
   * @param {String} field
   * @param {String|Array} val
   * @api public
   */

  append(field, val) {
    const prev = this.get(field);

    if (prev) {
      val = Array.isArray(prev)
        ? prev.concat(val)
        : [prev].concat(val);
    }

    return this.set(field, val);
  },

  /**
   * Remove header `field`.
   *
   * @param {String} name
   * @api public
   */

  remove(field) {
    if (this.headerSent) return;

    this.res.removeHeader(field);
  },

  /**
   * Checks if the request is writable.
   * Tests for the existence of the socket
   * as node sometimes does not set it.
   *
   * @return {Boolean}
   * @api private
   */

  get writable() {
    // can't write any more after response finished
    // response.writableEnded is available since Node > 12.9
    // https://nodejs.org/api/http.html#http_response_writableended
    // response.finished is undocumented feature of previous Node versions
    // https://stackoverflow.com/questions/16254385/undocumented-response-finished-in-node-js
    if (this.res.writableEnded || this.res.finished) return false;

    const socket = this.res.socket;
    // There are already pending outgoing res, but still writable
    // https://github.com/nodejs/node/blob/v4.4.7/lib/_http_server.js#L486
    if (!socket) return true;
    return socket.writable;
  },

  /**
   * Inspect implementation.
   *
   * @return {Object}
   * @api public
   */

  inspect() {
    if (!this.res) return;
    const o = this.toJSON();
    o.body = this.body;
    return o;
  },

  /**
   * Return JSON representation.
   *
   * @return {Object}
   * @api public
   */

  toJSON() {
    return only(this, [
      'status',
      'message',
      'header'
    ]);
  },

  /**
   * Flush any set headers and begin the body
   */

  flushHeaders() {
    this.res.flushHeaders();
  }
};

/**
 * Custom inspection implementation for node 6+.
 *
 * @return {Object}
 * @api public
 */

/* istanbul ignore else */
if (util.inspect.custom) {
  module.exports[util.inspect.custom] = module.exports.inspect;
}
(The MIT License)

Copyright (c) 2019 Koa contributors

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
0.5.3 / 2018-12-17
==================

  * Use `safe-buffer` for improved Buffer API

0.5.2 / 2016-12-08
==================

  * Fix `parse` to accept any linear whitespace character

0.5.1 / 2016-01-17
==================

  * perf: enable strict mode

0.5.0 / 2014-10-11
==================

  * Add `parse` function

0.4.0 / 2014-09-21
==================

  * Expand non-Unicode `filename` to the full ISO-8859-1 charset

0.3.0 / 2014-09-20
==================

  * Add `fallback` option
  * Add `type` option

0.2.0 / 2014-09-19
==================

  * Reduce ambiguity of file names with hex escape in buggy browsers

0.1.2 / 2014-09-19
==================

  * Fix periodic invalid Unicode filename header

0.1.1 / 2014-09-19
==================

  * Fix invalid characters appearing in `filename*` parameter

0.1.0 / 2014-09-18
==================

  * Make the `filename` argument optional

0.0.0 / 2014-09-18
==================

  * Initial release
/*!
 * content-disposition
 * Copyright(c) 2014-2017 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = contentDisposition
module.exports.parse = parse

/**
 * Module dependencies.
 * @private
 */

var basename = require('path').basename
var Buffer = require('safe-buffer').Buffer

/**
 * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%")
 * @private
 */

var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g // eslint-disable-line no-control-regex

/**
 * RegExp to match percent encoding escape.
 * @private
 */

var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/
var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g

/**
 * RegExp to match non-latin1 characters.
 * @private
 */

var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g

/**
 * RegExp to match quoted-pair in RFC 2616
 *
 * quoted-pair = "\" CHAR
 * CHAR        = <any US-ASCII character (octets 0 - 127)>
 * @private
 */

var QESC_REGEXP = /\\([\u0000-\u007f])/g // eslint-disable-line no-control-regex

/**
 * RegExp to match chars that must be quoted-pair in RFC 2616
 * @private
 */

var QUOTE_REGEXP = /([\\"])/g

/**
 * RegExp for various RFC 2616 grammar
 *
 * parameter     = token "=" ( token | quoted-string )
 * token         = 1*<any CHAR except CTLs or separators>
 * separators    = "(" | ")" | "<" | ">" | "@"
 *               | "," | ";" | ":" | "\" | <">
 *               | "/" | "[" | "]" | "?" | "="
 *               | "{" | "}" | SP | HT
 * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
 * qdtext        = <any TEXT except <">>
 * quoted-pair   = "\" CHAR
 * CHAR          = <any US-ASCII character (octets 0 - 127)>
 * TEXT          = <any OCTET except CTLs, but including LWS>
 * LWS           = [CRLF] 1*( SP | HT )
 * CRLF          = CR LF
 * CR            = <US-ASCII CR, carriage return (13)>
 * LF            = <US-ASCII LF, linefeed (10)>
 * SP            = <US-ASCII SP, space (32)>
 * HT            = <US-ASCII HT, horizontal-tab (9)>
 * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
 * OCTET         = <any 8-bit sequence of data>
 * @private
 */

var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g // eslint-disable-line no-control-regex
var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/
var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/

/**
 * RegExp for various RFC 5987 grammar
 *
 * ext-value     = charset  "'" [ language ] "'" value-chars
 * charset       = "UTF-8" / "ISO-8859-1" / mime-charset
 * mime-charset  = 1*mime-charsetc
 * mime-charsetc = ALPHA / DIGIT
 *               / "!" / "#" / "$" / "%" / "&"
 *               / "+" / "-" / "^" / "_" / "`"
 *               / "{" / "}" / "~"
 * language      = ( 2*3ALPHA [ extlang ] )
 *               / 4ALPHA
 *               / 5*8ALPHA
 * extlang       = *3( "-" 3ALPHA )
 * value-chars   = *( pct-encoded / attr-char )
 * pct-encoded   = "%" HEXDIG HEXDIG
 * attr-char     = ALPHA / DIGIT
 *               / "!" / "#" / "$" / "&" / "+" / "-" / "."
 *               / "^" / "_" / "`" / "|" / "~"
 * @private
 */

var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/

/**
 * RegExp for various RFC 6266 grammar
 *
 * disposition-type = "inline" | "attachment" | disp-ext-type
 * disp-ext-type    = token
 * disposition-parm = filename-parm | disp-ext-parm
 * filename-parm    = "filename" "=" value
 *                  | "filename*" "=" ext-value
 * disp-ext-parm    = token "=" value
 *                  | ext-token "=" ext-value
 * ext-token        = <the characters in token, followed by "*">
 * @private
 */

var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/ // eslint-disable-line no-control-regex

/**
 * Create an attachment Content-Disposition header.
 *
 * @param {string} [filename]
 * @param {object} [options]
 * @param {string} [options.type=attachment]
 * @param {string|boolean} [options.fallback=true]
 * @return {string}
 * @public
 */

function contentDisposition (filename, options) {
  var opts = options || {}

  // get type
  var type = opts.type || 'attachment'

  // get parameters
  var params = createparams(filename, opts.fallback)

  // format into string
  return format(new ContentDisposition(type, params))
}

/**
 * Create parameters object from filename and fallback.
 *
 * @param {string} [filename]
 * @param {string|boolean} [fallback=true]
 * @return {object}
 * @private
 */

function createparams (filename, fallback) {
  if (filename === undefined) {
    return
  }

  var params = {}

  if (typeof filename !== 'string') {
    throw new TypeError('filename must be a string')
  }

  // fallback defaults to true
  if (fallback === undefined) {
    fallback = true
  }

  if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {
    throw new TypeError('fallback must be a string or boolean')
  }

  if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {
    throw new TypeError('fallback must be ISO-8859-1 string')
  }

  // restrict to file base name
  var name = basename(filename)

  // determine if name is suitable for quoted string
  var isQuotedString = TEXT_REGEXP.test(name)

  // generate fallback name
  var fallbackName = typeof fallback !== 'string'
    ? fallback && getlatin1(name)
    : basename(fallback)
  var hasFallback = typeof fallbackName === 'string' && fallbackName !== name

  // set extended filename parameter
  if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {
    params['filename*'] = name
  }

  // set filename parameter
  if (isQuotedString || hasFallback) {
    params.filename = hasFallback
      ? fallbackName
      : name
  }

  return params
}

/**
 * Format object to Content-Disposition header.
 *
 * @param {object} obj
 * @param {string} obj.type
 * @param {object} [obj.parameters]
 * @return {string}
 * @private
 */

function format (obj) {
  var parameters = obj.parameters
  var type = obj.type

  if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {
    throw new TypeError('invalid type')
  }

  // start with normalized type
  var string = String(type).toLowerCase()

  // append parameters
  if (parameters && typeof parameters === 'object') {
    var param
    var params = Object.keys(parameters).sort()

    for (var i = 0; i < params.length; i++) {
      param = params[i]

      var val = param.substr(-1) === '*'
        ? ustring(parameters[param])
        : qstring(parameters[param])

      string += '; ' + param + '=' + val
    }
  }

  return string
}

/**
 * Decode a RFC 6987 field value (gracefully).
 *
 * @param {string} str
 * @return {string}
 * @private
 */

function decodefield (str) {
  var match = EXT_VALUE_REGEXP.exec(str)

  if (!match) {
    throw new TypeError('invalid extended field value')
  }

  var charset = match[1].toLowerCase()
  var encoded = match[2]
  var value

  // to binary string
  var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)

  switch (charset) {
    case 'iso-8859-1':
      value = getlatin1(binary)
      break
    case 'utf-8':
      value = Buffer.from(binary, 'binary').toString('utf8')
      break
    default:
      throw new TypeError('unsupported charset in extended field')
  }

  return value
}

/**
 * Get ISO-8859-1 version of string.
 *
 * @param {string} val
 * @return {string}
 * @private
 */

function getlatin1 (val) {
  // simple Unicode -> ISO-8859-1 transformation
  return String(val).replace(NON_LATIN1_REGEXP, '?')
}

/**
 * Parse Content-Disposition header string.
 *
 * @param {string} string
 * @return {object}
 * @public
 */

function parse (string) {
  if (!string || typeof string !== 'string') {
    throw new TypeError('argument string is required')
  }

  var match = DISPOSITION_TYPE_REGEXP.exec(string)

  if (!match) {
    throw new TypeError('invalid type format')
  }

  // normalize type
  var index = match[0].length
  var type = match[1].toLowerCase()

  var key
  var names = []
  var params = {}
  var value

  // calculate index to start at
  index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'
    ? index - 1
    : index

  // match parameters
  while ((match = PARAM_REGEXP.exec(string))) {
    if (match.index !== index) {
      throw new TypeError('invalid parameter format')
    }

    index += match[0].length
    key = match[1].toLowerCase()
    value = match[2]

    if (names.indexOf(key) !== -1) {
      throw new TypeError('invalid duplicate parameter')
    }

    names.push(key)

    if (key.indexOf('*') + 1 === key.length) {
      // decode extended value
      key = key.slice(0, -1)
      value = decodefield(value)

      // overwrite existing value
      params[key] = value
      continue
    }

    if (typeof params[key] === 'string') {
      continue
    }

    if (value[0] === '"') {
      // remove quotes and escapes
      value = value
        .substr(1, value.length - 2)
        .replace(QESC_REGEXP, '$1')
    }

    params[key] = value
  }

  if (index !== -1 && index !== string.length) {
    throw new TypeError('invalid parameter format')
  }

  return new ContentDisposition(type, params)
}

/**
 * Percent decode a single character.
 *
 * @param {string} str
 * @param {string} hex
 * @return {string}
 * @private
 */

function pdecode (str, hex) {
  return String.fromCharCode(parseInt(hex, 16))
}

/**
 * Percent encode a single character.
 *
 * @param {string} char
 * @return {string}
 * @private
 */

function pencode (char) {
  return '%' + String(char)
    .charCodeAt(0)
    .toString(16)
    .toUpperCase()
}

/**
 * Quote a string for HTTP.
 *
 * @param {string} val
 * @return {string}
 * @private
 */

function qstring (val) {
  var str = String(val)

  return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"'
}

/**
 * Encode a Unicode string for HTTP (RFC 5987).
 *
 * @param {string} val
 * @return {string}
 * @private
 */

function ustring (val) {
  var str = String(val)

  // percent encode as UTF-8
  var encoded = encodeURIComponent(str)
    .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)

  return 'UTF-8\'\'' + encoded
}

/**
 * Class for parsed Content-Disposition header for v8 optimization
 *
 * @public
 * @param {string} type
 * @param {object} parameters
 * @constructor
 */

function ContentDisposition (type, parameters) {
  this.type = type
  this.parameters = parameters
}
(The MIT License)

Copyright (c) 2014-2017 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "content-disposition",
  "description": "Create and parse Content-Disposition header",
  "version": "0.5.3",
  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
  "license": "MIT",
  "repository": "jshttp/content-disposition",
  "dependencies": {
    "safe-buffer": "5.1.2"
  },
  "devDependencies": {
    "deep-equal": "1.0.1",
    "eslint": "5.10.0",
    "eslint-config-standard": "12.0.0",
    "eslint-plugin-import": "2.14.0",
    "eslint-plugin-markdown": "1.0.0-rc.1",
    "eslint-plugin-node": "7.0.1",
    "eslint-plugin-promise": "4.0.1",
    "eslint-plugin-standard": "4.0.0",
    "istanbul": "0.4.5",
    "mocha": "5.2.0"
  },
  "files": [
    "LICENSE",
    "HISTORY.md",
    "README.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}(The MIT License)

Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
and associated documentation files (the 'Software'), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial 
portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

# get Makefile directory name: http://stackoverflow.com/a/5982798/376773
THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)

# BIN directory
BIN := $(THIS_DIR)/node_modules/.bin

# Path
PATH := node_modules/.bin:$(PATH)
SHELL := /bin/bash

# applications
NODE ?= $(shell which node)
YARN ?= $(shell which yarn)
PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm))
BROWSERIFY ?= $(NODE) $(BIN)/browserify

install: node_modules

browser: dist/debug.js

node_modules: package.json
	@NODE_ENV= $(PKG) install
	@touch node_modules

dist/debug.js: src/*.js node_modules
	@mkdir -p dist
	@$(BROWSERIFY) \
		--standalone debug \
		. > dist/debug.js

lint:
	@eslint *.js src/*.js

test-node:
	@istanbul cover node_modules/mocha/bin/_mocha -- test/**.js
	@cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js

test-browser:
	@$(MAKE) browser
	@karma start --single-run

test-all:
	@concurrently \
		"make test-node" \
		"make test-browser"

test:
	@if [ "x$(BROWSER)" = "x" ]; then \
		$(MAKE) test-node; \
		else \
		$(MAKE) test-browser; \
	fi

clean:
	rimraf dist coverage

.PHONY: browser install clean lint test test-all test-node test-browser
module.exports = require('./src/node');
{
  "name": "debug",
  "version": "3.1.0",
  "repository": {
    "type": "git",
    "url": "git://github.com/visionmedia/debug.git"
  },
  "description": "small debugging utility",
  "author": "TJ Holowaychuk <tj@vision-media.ca>",
  "license": "MIT",
  "dependencies": {
    "ms": "2.0.0"
  },
  "devDependencies": {
    "browserify": "14.4.0",
    "chai": "^3.5.0",
    "concurrently": "^3.1.0",
    "coveralls": "^2.11.15",
    "eslint": "^3.12.1",
    "istanbul": "^0.4.5",
    "karma": "^1.3.0",
    "karma-chai": "^0.1.0",
    "karma-mocha": "^1.3.0",
    "karma-phantomjs-launcher": "^1.0.2",
    "karma-sinon": "^1.0.5",
    "mocha": "^3.2.0",
    "mocha-lcov-reporter": "^1.2.0",
    "rimraf": "^2.5.4",
    "sinon": "^1.17.6",
    "sinon-chai": "^2.8.0"
  },
  "main": "./src/index.js",
  "browser": "./src/browser.js"
}/**
 * This is the web browser implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = require('./debug');
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = 'undefined' != typeof chrome
               && 'undefined' != typeof chrome.storage
                  ? chrome.storage.local
                  : localstorage();

/**
 * Colors.
 */

exports.colors = [
  '#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC',
  '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF',
  '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC',
  '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF',
  '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC',
  '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033',
  '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366',
  '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933',
  '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC',
  '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF',
  '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'
];

/**
 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
 * and the Firebug extension (any Firefox version) are known
 * to support "%c" CSS customizations.
 *
 * TODO: add a `localStorage` variable to explicitly enable/disable colors
 */

function useColors() {
  // NB: In an Electron preload script, document will be defined but not fully
  // initialized. Since we know we're in Chrome, we'll just detect this case
  // explicitly
  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
    return true;
  }

  // Internet Explorer and Edge do not support colors.
  if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
    return false;
  }

  // is webkit? http://stackoverflow.com/a/16459606/376773
  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
    // is firebug? http://stackoverflow.com/a/398120/376773
    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
    // is firefox >= v31?
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
    // double check webkit in userAgent just in case we are in a worker
    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}

/**
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
 */

exports.formatters.j = function(v) {
  try {
    return JSON.stringify(v);
  } catch (err) {
    return '[UnexpectedJSONParseError]: ' + err.message;
  }
};


/**
 * Colorize log arguments if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var useColors = this.useColors;

  args[0] = (useColors ? '%c' : '')
    + this.namespace
    + (useColors ? ' %c' : ' ')
    + args[0]
    + (useColors ? '%c ' : ' ')
    + '+' + exports.humanize(this.diff);

  if (!useColors) return;

  var c = 'color: ' + this.color;
  args.splice(1, 0, c, 'color: inherit')

  // the final "%c" is somewhat tricky, because there could be other
  // arguments passed either before or after the %c, so we need to
  // figure out the correct index to insert the CSS into
  var index = 0;
  var lastC = 0;
  args[0].replace(/%[a-zA-Z%]/g, function(match) {
    if ('%%' === match) return;
    index++;
    if ('%c' === match) {
      // we only are interested in the *last* %c
      // (the user may have provided their own)
      lastC = index;
    }
  });

  args.splice(lastC, 0, c);
}

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * @api public
 */

function log() {
  // this hackery is required for IE8/9, where
  // the `console.log` function doesn't have 'apply'
  return 'object' === typeof console
    && console.log
    && Function.prototype.apply.call(console.log, console, arguments);
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  try {
    if (null == namespaces) {
      exports.storage.removeItem('debug');
    } else {
      exports.storage.debug = namespaces;
    }
  } catch(e) {}
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  var r;
  try {
    r = exports.storage.debug;
  } catch(e) {}

  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
  if (!r && typeof process !== 'undefined' && 'env' in process) {
    r = process.env.DEBUG;
  }

  return r;
}

/**
 * Enable namespaces listed in `localStorage.debug` initially.
 */

exports.enable(load());

/**
 * Localstorage attempts to return the localstorage.
 *
 * This is necessary because safari throws
 * when a user disables cookies/localstorage
 * and you attempt to access it.
 *
 * @return {LocalStorage}
 * @api private
 */

function localstorage() {
  try {
    return window.localStorage;
  } catch (e) {}
}

/**
 * This is the common logic for both the Node.js and web browser
 * implementations of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = require('ms');

/**
 * Active `debug` instances.
 */
exports.instances = [];

/**
 * The currently active debug mode names, and names to skip.
 */

exports.names = [];
exports.skips = [];

/**
 * Map of special "%n" handling functions, for the debug "format" argument.
 *
 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
 */

exports.formatters = {};

/**
 * Select a color.
 * @param {String} namespace
 * @return {Number}
 * @api private
 */

function selectColor(namespace) {
  var hash = 0, i;

  for (i in namespace) {
    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);
    hash |= 0; // Convert to 32bit integer
  }

  return exports.colors[Math.abs(hash) % exports.colors.length];
}

/**
 * Create a debugger with the given `namespace`.
 *
 * @param {String} namespace
 * @return {Function}
 * @api public
 */

function createDebug(namespace) {

  var prevTime;

  function debug() {
    // disabled?
    if (!debug.enabled) return;

    var self = debug;

    // set `diff` timestamp
    var curr = +new Date();
    var ms = curr - (prevTime || curr);
    self.diff = ms;
    self.prev = prevTime;
    self.curr = curr;
    prevTime = curr;

    // turn the `arguments` into a proper Array
    var args = new Array(arguments.length);
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i];
    }

    args[0] = exports.coerce(args[0]);

    if ('string' !== typeof args[0]) {
      // anything else let's inspect with %O
      args.unshift('%O');
    }

    // apply any `formatters` transformations
    var index = 0;
    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
      // if we encounter an escaped % then don't increase the array index
      if (match === '%%') return match;
      index++;
      var formatter = exports.formatters[format];
      if ('function' === typeof formatter) {
        var val = args[index];
        match = formatter.call(self, val);

        // now we need to remove `args[index]` since it's inlined in the `format`
        args.splice(index, 1);
        index--;
      }
      return match;
    });

    // apply env-specific formatting (colors, etc.)
    exports.formatArgs.call(self, args);

    var logFn = debug.log || exports.log || console.log.bind(console);
    logFn.apply(self, args);
  }

  debug.namespace = namespace;
  debug.enabled = exports.enabled(namespace);
  debug.useColors = exports.useColors();
  debug.color = selectColor(namespace);
  debug.destroy = destroy;

  // env-specific initialization logic for debug instances
  if ('function' === typeof exports.init) {
    exports.init(debug);
  }

  exports.instances.push(debug);

  return debug;
}

function destroy () {
  var index = exports.instances.indexOf(this);
  if (index !== -1) {
    exports.instances.splice(index, 1);
    return true;
  } else {
    return false;
  }
}

/**
 * Enables a debug mode by namespaces. This can include modes
 * separated by a colon and wildcards.
 *
 * @param {String} namespaces
 * @api public
 */

function enable(namespaces) {
  exports.save(namespaces);

  exports.names = [];
  exports.skips = [];

  var i;
  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
  var len = split.length;

  for (i = 0; i < len; i++) {
    if (!split[i]) continue; // ignore empty strings
    namespaces = split[i].replace(/\*/g, '.*?');
    if (namespaces[0] === '-') {
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
    } else {
      exports.names.push(new RegExp('^' + namespaces + '$'));
    }
  }

  for (i = 0; i < exports.instances.length; i++) {
    var instance = exports.instances[i];
    instance.enabled = exports.enabled(instance.namespace);
  }
}

/**
 * Disable debug output.
 *
 * @api public
 */

function disable() {
  exports.enable('');
}

/**
 * Returns true if the given mode name is enabled, false otherwise.
 *
 * @param {String} name
 * @return {Boolean}
 * @api public
 */

function enabled(name) {
  if (name[name.length - 1] === '*') {
    return true;
  }
  var i, len;
  for (i = 0, len = exports.skips.length; i < len; i++) {
    if (exports.skips[i].test(name)) {
      return false;
    }
  }
  for (i = 0, len = exports.names.length; i < len; i++) {
    if (exports.names[i].test(name)) {
      return true;
    }
  }
  return false;
}

/**
 * Coerce `val`.
 *
 * @param {Mixed} val
 * @return {Mixed}
 * @api private
 */

function coerce(val) {
  if (val instanceof Error) return val.stack || val.message;
  return val;
}
/**
 * Detect Electron renderer process, which is node, but we should
 * treat as a browser.
 */

if (typeof process === 'undefined' || process.type === 'renderer') {
  module.exports = require('./browser.js');
} else {
  module.exports = require('./node.js');
}
/**
 * Module dependencies.
 */

var tty = require('tty');
var util = require('util');

/**
 * This is the Node.js implementation of `debug()`.
 *
 * Expose `debug()` as the module.
 */

exports = module.exports = require('./debug');
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;

/**
 * Colors.
 */

exports.colors = [ 6, 2, 3, 4, 5, 1 ];

try {
  var supportsColor = require('supports-color');
  if (supportsColor && supportsColor.level >= 2) {
    exports.colors = [
      20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68,
      69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134,
      135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
      172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204,
      205, 206, 207, 208, 209, 214, 215, 220, 221
    ];
  }
} catch (err) {
  // swallow - we only care if `supports-color` is available; it doesn't have to be.
}

/**
 * Build up the default `inspectOpts` object from the environment variables.
 *
 *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
 */

exports.inspectOpts = Object.keys(process.env).filter(function (key) {
  return /^debug_/i.test(key);
}).reduce(function (obj, key) {
  // camel-case
  var prop = key
    .substring(6)
    .toLowerCase()
    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });

  // coerce string value into JS value
  var val = process.env[key];
  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
  else if (val === 'null') val = null;
  else val = Number(val);

  obj[prop] = val;
  return obj;
}, {});

/**
 * Is stdout a TTY? Colored output is enabled when `true`.
 */

function useColors() {
  return 'colors' in exports.inspectOpts
    ? Boolean(exports.inspectOpts.colors)
    : tty.isatty(process.stderr.fd);
}

/**
 * Map %o to `util.inspect()`, all on a single line.
 */

exports.formatters.o = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts)
    .split('\n').map(function(str) {
      return str.trim()
    }).join(' ');
};

/**
 * Map %o to `util.inspect()`, allowing multiple lines if needed.
 */

exports.formatters.O = function(v) {
  this.inspectOpts.colors = this.useColors;
  return util.inspect(v, this.inspectOpts);
};

/**
 * Adds ANSI color escape codes if enabled.
 *
 * @api public
 */

function formatArgs(args) {
  var name = this.namespace;
  var useColors = this.useColors;

  if (useColors) {
    var c = this.color;
    var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c);
    var prefix = '  ' + colorCode + ';1m' + name + ' ' + '\u001b[0m';

    args[0] = prefix + args[0].split('\n').join('\n' + prefix);
    args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
  } else {
    args[0] = getDate() + name + ' ' + args[0];
  }
}

function getDate() {
  if (exports.inspectOpts.hideDate) {
    return '';
  } else {
    return new Date().toISOString() + ' ';
  }
}

/**
 * Invokes `util.format()` with the specified arguments and writes to stderr.
 */

function log() {
  return process.stderr.write(util.format.apply(util, arguments) + '\n');
}

/**
 * Save `namespaces`.
 *
 * @param {String} namespaces
 * @api private
 */

function save(namespaces) {
  if (null == namespaces) {
    // If you set a process.env field to null or undefined, it gets cast to the
    // string 'null' or 'undefined'. Just delete instead.
    delete process.env.DEBUG;
  } else {
    process.env.DEBUG = namespaces;
  }
}

/**
 * Load `namespaces`.
 *
 * @return {String} returns the previously persisted debug modes
 * @api private
 */

function load() {
  return process.env.DEBUG;
}

/**
 * Init logic for `debug` instances.
 *
 * Create a new `inspectOpts` object in case `useColors` is set
 * differently for a particular `debug` instance.
 */

function init (debug) {
  debug.inspectOpts = {};

  var keys = Object.keys(exports.inspectOpts);
  for (var i = 0; i < keys.length; i++) {
    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
  }
}

/**
 * Enable namespaces listed in `process.env.DEBUG` initially.
 */

exports.enable(load());
/*!
 * destroy
 * Copyright(c) 2014 Jonathan Ong
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var ReadStream = require('fs').ReadStream
var Stream = require('stream')

/**
 * Module exports.
 * @public
 */

module.exports = destroy

/**
 * Destroy a stream.
 *
 * @param {object} stream
 * @public
 */

function destroy(stream) {
  if (stream instanceof ReadStream) {
    return destroyReadStream(stream)
  }

  if (!(stream instanceof Stream)) {
    return stream
  }

  if (typeof stream.destroy === 'function') {
    stream.destroy()
  }

  return stream
}

/**
 * Destroy a ReadStream.
 *
 * @param {object} stream
 * @private
 */

function destroyReadStream(stream) {
  stream.destroy()

  if (typeof stream.close === 'function') {
    // node.js core bug work-around
    stream.on('open', onOpenClose)
  }

  return stream
}

/**
 * On open handler to close stream.
 * @private
 */

function onOpenClose() {
  if (typeof this.fd === 'number') {
    // actually close down the fd
    this.close()
  }
}

The MIT License (MIT)

Copyright (c) 2014 Jonathan Ong me@jongleberry.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "destroy",
  "description": "destroy a stream if possible",
  "version": "1.0.4",
  "author": {
    "name": "Jonathan Ong",
    "email": "me@jongleberry.com",
    "url": "http://jongleberry.com",
    "twitter": "https://twitter.com/jongleberry"
  },
  "license": "MIT",
  "repository": "stream-utils/destroy",
  "devDependencies": {
    "istanbul": "0.4.2",
    "mocha": "2.3.4"
  },
  "files": [
    "index.js",
    "LICENSE"
  ]
}2020-06-29 / 1.8.0
==================

  * Add `isHttpError` export to determine if value is an HTTP error
  * deps: setprototypeof@1.2.0

2019-06-24 / 1.7.3
==================

  * deps: inherits@2.0.4

2019-02-18 / 1.7.2
==================

  * deps: setprototypeof@1.1.1

2018-09-08 / 1.7.1
==================

  * Fix error creating objects in some environments

2018-07-30 / 1.7.0
==================

  * Set constructor name when possible
  * Use `toidentifier` module to make class names
  * deps: statuses@'>= 1.5.0 < 2'

2018-03-29 / 1.6.3
==================

  * deps: depd@~1.1.2
    - perf: remove argument reassignment
  * deps: setprototypeof@1.1.0
  * deps: statuses@'>= 1.4.0 < 2'

2017-08-04 / 1.6.2
==================

  * deps: depd@1.1.1
    - Remove unnecessary `Buffer` loading

2017-02-20 / 1.6.1
==================

  * deps: setprototypeof@1.0.3
    - Fix shim for old browsers

2017-02-14 / 1.6.0
==================

  * Accept custom 4xx and 5xx status codes in factory
  * Add deprecation message to `"I'mateapot"` export
  * Deprecate passing status code as anything except first argument in factory
  * Deprecate using non-error status codes
  * Make `message` property enumerable for `HttpError`s

2016-11-16 / 1.5.1
==================

  * deps: inherits@2.0.3
    - Fix issue loading in browser
  * deps: setprototypeof@1.0.2
  * deps: statuses@'>= 1.3.1 < 2'

2016-05-18 / 1.5.0
==================

  * Support new code `421 Misdirected Request`
  * Use `setprototypeof` module to replace `__proto__` setting
  * deps: statuses@'>= 1.3.0 < 2'
    - Add `421 Misdirected Request`
    - perf: enable strict mode
  * perf: enable strict mode

2016-01-28 / 1.4.0
==================

  * Add `HttpError` export, for `err instanceof createError.HttpError`
  * deps: inherits@2.0.1
  * deps: statuses@'>= 1.2.1 < 2'
    - Fix message for status 451
    - Remove incorrect nginx status code

2015-02-02 / 1.3.1
==================

  * Fix regression where status can be overwritten in `createError` `props`

2015-02-01 / 1.3.0
==================

  * Construct errors using defined constructors from `createError`
  * Fix error names that are not identifiers
    - `createError["I'mateapot"]` is now `createError.ImATeapot`
  * Set a meaningful `name` property on constructed errors

2014-12-09 / 1.2.8
==================

  * Fix stack trace from exported function
  * Remove `arguments.callee` usage

2014-10-14 / 1.2.7
==================

  * Remove duplicate line

2014-10-02 / 1.2.6
==================

  * Fix `expose` to be `true` for `ClientError` constructor

2014-09-28 / 1.2.5
==================

  * deps: statuses@1

2014-09-21 / 1.2.4
==================

  * Fix dependency version to work with old `npm`s

2014-09-21 / 1.2.3
==================

  * deps: statuses@~1.1.0

2014-09-21 / 1.2.2
==================

  * Fix publish error

2014-09-21 / 1.2.1
==================

  * Support Node.js 0.6
  * Use `inherits` instead of `util`

2014-09-09 / 1.2.0
==================

  * Fix the way inheriting functions
  * Support `expose` being provided in properties argument

2014-09-08 / 1.1.0
==================

  * Default status to 500
  * Support provided `error` to extend

2014-09-08 / 1.0.1
==================

  * Fix accepting string message

2014-09-08 / 1.0.0
==================

  * Initial release
/*!
 * http-errors
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2016 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var deprecate = require('depd')('http-errors')
var setPrototypeOf = require('setprototypeof')
var statuses = require('statuses')
var inherits = require('inherits')
var toIdentifier = require('toidentifier')

/**
 * Module exports.
 * @public
 */

module.exports = createError
module.exports.HttpError = createHttpErrorConstructor()
module.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)

// Populate exports for all constructors
populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)

/**
 * Get the code class of a status code.
 * @private
 */

function codeClass (status) {
  return Number(String(status).charAt(0) + '00')
}

/**
 * Create a new HTTP Error.
 *
 * @returns {Error}
 * @public
 */

function createError () {
  // so much arity going on ~_~
  var err
  var msg
  var status = 500
  var props = {}
  for (var i = 0; i < arguments.length; i++) {
    var arg = arguments[i]
    if (arg instanceof Error) {
      err = arg
      status = err.status || err.statusCode || status
      continue
    }
    switch (typeof arg) {
      case 'string':
        msg = arg
        break
      case 'number':
        status = arg
        if (i !== 0) {
          deprecate('non-first-argument status code; replace with createError(' + arg + ', ...)')
        }
        break
      case 'object':
        props = arg
        break
    }
  }

  if (typeof status === 'number' && (status < 400 || status >= 600)) {
    deprecate('non-error status code; use only 4xx or 5xx status codes')
  }

  if (typeof status !== 'number' ||
    (!statuses[status] && (status < 400 || status >= 600))) {
    status = 500
  }

  // constructor
  var HttpError = createError[status] || createError[codeClass(status)]

  if (!err) {
    // create error
    err = HttpError
      ? new HttpError(msg)
      : new Error(msg || statuses[status])
    Error.captureStackTrace(err, createError)
  }

  if (!HttpError || !(err instanceof HttpError) || err.status !== status) {
    // add properties to generic error
    err.expose = status < 500
    err.status = err.statusCode = status
  }

  for (var key in props) {
    if (key !== 'status' && key !== 'statusCode') {
      err[key] = props[key]
    }
  }

  return err
}

/**
 * Create HTTP error abstract base class.
 * @private
 */

function createHttpErrorConstructor () {
  function HttpError () {
    throw new TypeError('cannot construct abstract class')
  }

  inherits(HttpError, Error)

  return HttpError
}

/**
 * Create a constructor for a client error.
 * @private
 */

function createClientErrorConstructor (HttpError, name, code) {
  var className = toClassName(name)

  function ClientError (message) {
    // create the error object
    var msg = message != null ? message : statuses[code]
    var err = new Error(msg)

    // capture a stack trace to the construction point
    Error.captureStackTrace(err, ClientError)

    // adjust the [[Prototype]]
    setPrototypeOf(err, ClientError.prototype)

    // redefine the error message
    Object.defineProperty(err, 'message', {
      enumerable: true,
      configurable: true,
      value: msg,
      writable: true
    })

    // redefine the error name
    Object.defineProperty(err, 'name', {
      enumerable: false,
      configurable: true,
      value: className,
      writable: true
    })

    return err
  }

  inherits(ClientError, HttpError)
  nameFunc(ClientError, className)

  ClientError.prototype.status = code
  ClientError.prototype.statusCode = code
  ClientError.prototype.expose = true

  return ClientError
}

/**
 * Create function to test is a value is a HttpError.
 * @private
 */

function createIsHttpErrorFunction (HttpError) {
  return function isHttpError (val) {
    if (!val || typeof val !== 'object') {
      return false
    }

    if (val instanceof HttpError) {
      return true
    }

    return val instanceof Error &&
      typeof val.expose === 'boolean' &&
      typeof val.statusCode === 'number' && val.status === val.statusCode
  }
}

/**
 * Create a constructor for a server error.
 * @private
 */

function createServerErrorConstructor (HttpError, name, code) {
  var className = toClassName(name)

  function ServerError (message) {
    // create the error object
    var msg = message != null ? message : statuses[code]
    var err = new Error(msg)

    // capture a stack trace to the construction point
    Error.captureStackTrace(err, ServerError)

    // adjust the [[Prototype]]
    setPrototypeOf(err, ServerError.prototype)

    // redefine the error message
    Object.defineProperty(err, 'message', {
      enumerable: true,
      configurable: true,
      value: msg,
      writable: true
    })

    // redefine the error name
    Object.defineProperty(err, 'name', {
      enumerable: false,
      configurable: true,
      value: className,
      writable: true
    })

    return err
  }

  inherits(ServerError, HttpError)
  nameFunc(ServerError, className)

  ServerError.prototype.status = code
  ServerError.prototype.statusCode = code
  ServerError.prototype.expose = false

  return ServerError
}

/**
 * Set the name of a function, if possible.
 * @private
 */

function nameFunc (func, name) {
  var desc = Object.getOwnPropertyDescriptor(func, 'name')

  if (desc && desc.configurable) {
    desc.value = name
    Object.defineProperty(func, 'name', desc)
  }
}

/**
 * Populate the exports object with constructors for every error class.
 * @private
 */

function populateConstructorExports (exports, codes, HttpError) {
  codes.forEach(function forEachCode (code) {
    var CodeError
    var name = toIdentifier(statuses[code])

    switch (codeClass(code)) {
      case 400:
        CodeError = createClientErrorConstructor(HttpError, name, code)
        break
      case 500:
        CodeError = createServerErrorConstructor(HttpError, name, code)
        break
    }

    if (CodeError) {
      // export the constructor
      exports[code] = CodeError
      exports[name] = CodeError
    }
  })

  // backwards-compatibility
  exports["I'mateapot"] = deprecate.function(exports.ImATeapot,
    '"I\'mateapot"; use "ImATeapot" instead')
}

/**
 * Get a class name from a name identifier.
 * @private
 */

function toClassName (name) {
  return name.substr(-5) !== 'Error'
    ? name + 'Error'
    : name
}

The MIT License (MIT)

Copyright (c) 2014 Jonathan Ong me@jongleberry.com
Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
1.1.2 / 2018-01-11
==================

  * perf: remove argument reassignment
  * Support Node.js 0.6 to 9.x

1.1.1 / 2017-07-27
==================

  * Remove unnecessary `Buffer` loading
  * Support Node.js 0.6 to 8.x

1.1.0 / 2015-09-14
==================

  * Enable strict mode in more places
  * Support io.js 3.x
  * Support io.js 2.x
  * Support web browser loading
    - Requires bundler like Browserify or webpack

1.0.1 / 2015-04-07
==================

  * Fix `TypeError`s when under `'use strict'` code
  * Fix useless type name on auto-generated messages
  * Support io.js 1.x
  * Support Node.js 0.12

1.0.0 / 2014-09-17
==================

  * No changes

0.4.5 / 2014-09-09
==================

  * Improve call speed to functions using the function wrapper
  * Support Node.js 0.6

0.4.4 / 2014-07-27
==================

  * Work-around v8 generating empty stack traces

0.4.3 / 2014-07-26
==================

  * Fix exception when global `Error.stackTraceLimit` is too low

0.4.2 / 2014-07-19
==================

  * Correct call site for wrapped functions and properties

0.4.1 / 2014-07-19
==================

  * Improve automatic message generation for function properties

0.4.0 / 2014-07-19
==================

  * Add `TRACE_DEPRECATION` environment variable
  * Remove non-standard grey color from color output
  * Support `--no-deprecation` argument
  * Support `--trace-deprecation` argument
  * Support `deprecate.property(fn, prop, message)`

0.3.0 / 2014-06-16
==================

  * Add `NO_DEPRECATION` environment variable

0.2.0 / 2014-06-15
==================

  * Add `deprecate.property(obj, prop, message)`
  * Remove `supports-color` dependency for node.js 0.8

0.1.0 / 2014-06-15
==================

  * Add `deprecate.function(fn, message)`
  * Add `process.on('deprecation', fn)` emitter
  * Automatically generate message when omitted from `deprecate()`

0.0.1 / 2014-06-15
==================

  * Fix warning for dynamic calls at singe call site

0.0.0 / 2014-06-15
==================

  * Initial implementation
/*!
 * depd
 * Copyright(c) 2014-2017 Douglas Christopher Wilson
 * MIT Licensed
 */

/**
 * Module dependencies.
 */

var callSiteToString = require('./lib/compat').callSiteToString
var eventListenerCount = require('./lib/compat').eventListenerCount
var relative = require('path').relative

/**
 * Module exports.
 */

module.exports = depd

/**
 * Get the path to base files on.
 */

var basePath = process.cwd()

/**
 * Determine if namespace is contained in the string.
 */

function containsNamespace (str, namespace) {
  var vals = str.split(/[ ,]+/)
  var ns = String(namespace).toLowerCase()

  for (var i = 0; i < vals.length; i++) {
    var val = vals[i]

    // namespace contained
    if (val && (val === '*' || val.toLowerCase() === ns)) {
      return true
    }
  }

  return false
}

/**
 * Convert a data descriptor to accessor descriptor.
 */

function convertDataDescriptorToAccessor (obj, prop, message) {
  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)
  var value = descriptor.value

  descriptor.get = function getter () { return value }

  if (descriptor.writable) {
    descriptor.set = function setter (val) { return (value = val) }
  }

  delete descriptor.value
  delete descriptor.writable

  Object.defineProperty(obj, prop, descriptor)

  return descriptor
}

/**
 * Create arguments string to keep arity.
 */

function createArgumentsString (arity) {
  var str = ''

  for (var i = 0; i < arity; i++) {
    str += ', arg' + i
  }

  return str.substr(2)
}

/**
 * Create stack string from stack.
 */

function createStackString (stack) {
  var str = this.name + ': ' + this.namespace

  if (this.message) {
    str += ' deprecated ' + this.message
  }

  for (var i = 0; i < stack.length; i++) {
    str += '\n    at ' + callSiteToString(stack[i])
  }

  return str
}

/**
 * Create deprecate for namespace in caller.
 */

function depd (namespace) {
  if (!namespace) {
    throw new TypeError('argument namespace is required')
  }

  var stack = getStack()
  var site = callSiteLocation(stack[1])
  var file = site[0]

  function deprecate (message) {
    // call to self as log
    log.call(deprecate, message)
  }

  deprecate._file = file
  deprecate._ignored = isignored(namespace)
  deprecate._namespace = namespace
  deprecate._traced = istraced(namespace)
  deprecate._warned = Object.create(null)

  deprecate.function = wrapfunction
  deprecate.property = wrapproperty

  return deprecate
}

/**
 * Determine if namespace is ignored.
 */

function isignored (namespace) {
  /* istanbul ignore next: tested in a child processs */
  if (process.noDeprecation) {
    // --no-deprecation support
    return true
  }

  var str = process.env.NO_DEPRECATION || ''

  // namespace ignored
  return containsNamespace(str, namespace)
}

/**
 * Determine if namespace is traced.
 */

function istraced (namespace) {
  /* istanbul ignore next: tested in a child processs */
  if (process.traceDeprecation) {
    // --trace-deprecation support
    return true
  }

  var str = process.env.TRACE_DEPRECATION || ''

  // namespace traced
  return containsNamespace(str, namespace)
}

/**
 * Display deprecation message.
 */

function log (message, site) {
  var haslisteners = eventListenerCount(process, 'deprecation') !== 0

  // abort early if no destination
  if (!haslisteners && this._ignored) {
    return
  }

  var caller
  var callFile
  var callSite
  var depSite
  var i = 0
  var seen = false
  var stack = getStack()
  var file = this._file

  if (site) {
    // provided site
    depSite = site
    callSite = callSiteLocation(stack[1])
    callSite.name = depSite.name
    file = callSite[0]
  } else {
    // get call site
    i = 2
    depSite = callSiteLocation(stack[i])
    callSite = depSite
  }

  // get caller of deprecated thing in relation to file
  for (; i < stack.length; i++) {
    caller = callSiteLocation(stack[i])
    callFile = caller[0]

    if (callFile === file) {
      seen = true
    } else if (callFile === this._file) {
      file = this._file
    } else if (seen) {
      break
    }
  }

  var key = caller
    ? depSite.join(':') + '__' + caller.join(':')
    : undefined

  if (key !== undefined && key in this._warned) {
    // already warned
    return
  }

  this._warned[key] = true

  // generate automatic message from call site
  var msg = message
  if (!msg) {
    msg = callSite === depSite || !callSite.name
      ? defaultMessage(depSite)
      : defaultMessage(callSite)
  }

  // emit deprecation if listeners exist
  if (haslisteners) {
    var err = DeprecationError(this._namespace, msg, stack.slice(i))
    process.emit('deprecation', err)
    return
  }

  // format and write message
  var format = process.stderr.isTTY
    ? formatColor
    : formatPlain
  var output = format.call(this, msg, caller, stack.slice(i))
  process.stderr.write(output + '\n', 'utf8')
}

/**
 * Get call site location as array.
 */

function callSiteLocation (callSite) {
  var file = callSite.getFileName() || '<anonymous>'
  var line = callSite.getLineNumber()
  var colm = callSite.getColumnNumber()

  if (callSite.isEval()) {
    file = callSite.getEvalOrigin() + ', ' + file
  }

  var site = [file, line, colm]

  site.callSite = callSite
  site.name = callSite.getFunctionName()

  return site
}

/**
 * Generate a default message from the site.
 */

function defaultMessage (site) {
  var callSite = site.callSite
  var funcName = site.name

  // make useful anonymous name
  if (!funcName) {
    funcName = '<anonymous@' + formatLocation(site) + '>'
  }

  var context = callSite.getThis()
  var typeName = context && callSite.getTypeName()

  // ignore useless type name
  if (typeName === 'Object') {
    typeName = undefined
  }

  // make useful type name
  if (typeName === 'Function') {
    typeName = context.name || typeName
  }

  return typeName && callSite.getMethodName()
    ? typeName + '.' + funcName
    : funcName
}

/**
 * Format deprecation message without color.
 */

function formatPlain (msg, caller, stack) {
  var timestamp = new Date().toUTCString()

  var formatted = timestamp +
    ' ' + this._namespace +
    ' deprecated ' + msg

  // add stack trace
  if (this._traced) {
    for (var i = 0; i < stack.length; i++) {
      formatted += '\n    at ' + callSiteToString(stack[i])
    }

    return formatted
  }

  if (caller) {
    formatted += ' at ' + formatLocation(caller)
  }

  return formatted
}

/**
 * Format deprecation message with color.
 */

function formatColor (msg, caller, stack) {
  var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan
    ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow
    ' \x1b[0m' + msg + '\x1b[39m' // reset

  // add stack trace
  if (this._traced) {
    for (var i = 0; i < stack.length; i++) {
      formatted += '\n    \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan
    }

    return formatted
  }

  if (caller) {
    formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan
  }

  return formatted
}

/**
 * Format call site location.
 */

function formatLocation (callSite) {
  return relative(basePath, callSite[0]) +
    ':' + callSite[1] +
    ':' + callSite[2]
}

/**
 * Get the stack as array of call sites.
 */

function getStack () {
  var limit = Error.stackTraceLimit
  var obj = {}
  var prep = Error.prepareStackTrace

  Error.prepareStackTrace = prepareObjectStackTrace
  Error.stackTraceLimit = Math.max(10, limit)

  // capture the stack
  Error.captureStackTrace(obj)

  // slice this function off the top
  var stack = obj.stack.slice(1)

  Error.prepareStackTrace = prep
  Error.stackTraceLimit = limit

  return stack
}

/**
 * Capture call site stack from v8.
 */

function prepareObjectStackTrace (obj, stack) {
  return stack
}

/**
 * Return a wrapped function in a deprecation message.
 */

function wrapfunction (fn, message) {
  if (typeof fn !== 'function') {
    throw new TypeError('argument fn must be a function')
  }

  var args = createArgumentsString(fn.length)
  var deprecate = this // eslint-disable-line no-unused-vars
  var stack = getStack()
  var site = callSiteLocation(stack[1])

  site.name = fn.name

   // eslint-disable-next-line no-eval
  var deprecatedfn = eval('(function (' + args + ') {\n' +
    '"use strict"\n' +
    'log.call(deprecate, message, site)\n' +
    'return fn.apply(this, arguments)\n' +
    '})')

  return deprecatedfn
}

/**
 * Wrap property in a deprecation message.
 */

function wrapproperty (obj, prop, message) {
  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
    throw new TypeError('argument obj must be object')
  }

  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)

  if (!descriptor) {
    throw new TypeError('must call property on owner object')
  }

  if (!descriptor.configurable) {
    throw new TypeError('property must be configurable')
  }

  var deprecate = this
  var stack = getStack()
  var site = callSiteLocation(stack[1])

  // set site name
  site.name = prop

  // convert data descriptor
  if ('value' in descriptor) {
    descriptor = convertDataDescriptorToAccessor(obj, prop, message)
  }

  var get = descriptor.get
  var set = descriptor.set

  // wrap getter
  if (typeof get === 'function') {
    descriptor.get = function getter () {
      log.call(deprecate, message, site)
      return get.apply(this, arguments)
    }
  }

  // wrap setter
  if (typeof set === 'function') {
    descriptor.set = function setter () {
      log.call(deprecate, message, site)
      return set.apply(this, arguments)
    }
  }

  Object.defineProperty(obj, prop, descriptor)
}

/**
 * Create DeprecationError for deprecation
 */

function DeprecationError (namespace, message, stack) {
  var error = new Error()
  var stackString

  Object.defineProperty(error, 'constructor', {
    value: DeprecationError
  })

  Object.defineProperty(error, 'message', {
    configurable: true,
    enumerable: false,
    value: message,
    writable: true
  })

  Object.defineProperty(error, 'name', {
    enumerable: false,
    configurable: true,
    value: 'DeprecationError',
    writable: true
  })

  Object.defineProperty(error, 'namespace', {
    configurable: true,
    enumerable: false,
    value: namespace,
    writable: true
  })

  Object.defineProperty(error, 'stack', {
    configurable: true,
    enumerable: false,
    get: function () {
      if (stackString !== undefined) {
        return stackString
      }

      // prepare stack trace
      return (stackString = createStackString.call(this, stack))
    },
    set: function setter (val) {
      stackString = val
    }
  })

  return error
}
/*!
 * depd
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = depd

/**
 * Create deprecate for namespace in caller.
 */

function depd (namespace) {
  if (!namespace) {
    throw new TypeError('argument namespace is required')
  }

  function deprecate (message) {
    // no-op in browser
  }

  deprecate._file = undefined
  deprecate._ignored = true
  deprecate._namespace = namespace
  deprecate._traced = false
  deprecate._warned = Object.create(null)

  deprecate.function = wrapfunction
  deprecate.property = wrapproperty

  return deprecate
}

/**
 * Return a wrapped function in a deprecation message.
 *
 * This is a no-op version of the wrapper, which does nothing but call
 * validation.
 */

function wrapfunction (fn, message) {
  if (typeof fn !== 'function') {
    throw new TypeError('argument fn must be a function')
  }

  return fn
}

/**
 * Wrap property in a deprecation message.
 *
 * This is a no-op version of the wrapper, which does nothing but call
 * validation.
 */

function wrapproperty (obj, prop, message) {
  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
    throw new TypeError('argument obj must be object')
  }

  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)

  if (!descriptor) {
    throw new TypeError('must call property on owner object')
  }

  if (!descriptor.configurable) {
    throw new TypeError('property must be configurable')
  }
}
/*!
 * depd
 * Copyright(c) 2014 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 */

module.exports = callSiteToString

/**
 * Format a CallSite file location to a string.
 */

function callSiteFileLocation (callSite) {
  var fileName
  var fileLocation = ''

  if (callSite.isNative()) {
    fileLocation = 'native'
  } else if (callSite.isEval()) {
    fileName = callSite.getScriptNameOrSourceURL()
    if (!fileName) {
      fileLocation = callSite.getEvalOrigin()
    }
  } else {
    fileName = callSite.getFileName()
  }

  if (fileName) {
    fileLocation += fileName

    var lineNumber = callSite.getLineNumber()
    if (lineNumber != null) {
      fileLocation += ':' + lineNumber

      var columnNumber = callSite.getColumnNumber()
      if (columnNumber) {
        fileLocation += ':' + columnNumber
      }
    }
  }

  return fileLocation || 'unknown source'
}

/**
 * Format a CallSite to a string.
 */

function callSiteToString (callSite) {
  var addSuffix = true
  var fileLocation = callSiteFileLocation(callSite)
  var functionName = callSite.getFunctionName()
  var isConstructor = callSite.isConstructor()
  var isMethodCall = !(callSite.isToplevel() || isConstructor)
  var line = ''

  if (isMethodCall) {
    var methodName = callSite.getMethodName()
    var typeName = getConstructorName(callSite)

    if (functionName) {
      if (typeName && functionName.indexOf(typeName) !== 0) {
        line += typeName + '.'
      }

      line += functionName

      if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) {
        line += ' [as ' + methodName + ']'
      }
    } else {
      line += typeName + '.' + (methodName || '<anonymous>')
    }
  } else if (isConstructor) {
    line += 'new ' + (functionName || '<anonymous>')
  } else if (functionName) {
    line += functionName
  } else {
    addSuffix = false
    line += fileLocation
  }

  if (addSuffix) {
    line += ' (' + fileLocation + ')'
  }

  return line
}

/**
 * Get constructor name of reviver.
 */

function getConstructorName (obj) {
  var receiver = obj.receiver
  return (receiver.constructor && receiver.constructor.name) || null
}
/*!
 * depd
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = eventListenerCount

/**
 * Get the count of listeners on an event emitter of a specific type.
 */

function eventListenerCount (emitter, type) {
  return emitter.listeners(type).length
}
/*!
 * depd
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var EventEmitter = require('events').EventEmitter

/**
 * Module exports.
 * @public
 */

lazyProperty(module.exports, 'callSiteToString', function callSiteToString () {
  var limit = Error.stackTraceLimit
  var obj = {}
  var prep = Error.prepareStackTrace

  function prepareObjectStackTrace (obj, stack) {
    return stack
  }

  Error.prepareStackTrace = prepareObjectStackTrace
  Error.stackTraceLimit = 2

  // capture the stack
  Error.captureStackTrace(obj)

  // slice the stack
  var stack = obj.stack.slice()

  Error.prepareStackTrace = prep
  Error.stackTraceLimit = limit

  return stack[0].toString ? toString : require('./callsite-tostring')
})

lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () {
  return EventEmitter.listenerCount || require('./event-listener-count')
})

/**
 * Define a lazy property.
 */

function lazyProperty (obj, prop, getter) {
  function get () {
    var val = getter()

    Object.defineProperty(obj, prop, {
      configurable: true,
      enumerable: true,
      value: val
    })

    return val
  }

  Object.defineProperty(obj, prop, {
    configurable: true,
    enumerable: true,
    get: get
  })
}

/**
 * Call toString() on the obj
 */

function toString (obj) {
  return obj.toString()
}
(The MIT License)

Copyright (c) 2014-2017 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "depd",
  "description": "Deprecate all the things",
  "version": "1.1.2",
  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
  "license": "MIT",
  "repository": "dougwilson/nodejs-depd",
  "browser": "lib/browser/index.js",
  "devDependencies": {
    "benchmark": "2.1.4",
    "beautify-benchmark": "0.2.4",
    "eslint": "3.19.0",
    "eslint-config-standard": "7.1.0",
    "eslint-plugin-markdown": "1.0.0-beta.7",
    "eslint-plugin-promise": "3.6.0",
    "eslint-plugin-standard": "3.0.1",
    "istanbul": "0.4.5",
    "mocha": "~1.21.5"
  },
  "files": [
    "lib/",
    "History.md",
    "LICENSE",
    "index.js",
    "Readme.md"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}{
  "name": "http-errors",
  "description": "Create HTTP error objects",
  "version": "1.8.0",
  "author": "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)",
  "license": "MIT",
  "repository": "jshttp/http-errors",
  "dependencies": {
    "depd": "~1.1.2",
    "inherits": "2.0.4",
    "setprototypeof": "1.2.0",
    "statuses": ">= 1.5.0 < 2",
    "toidentifier": "1.0.0"
  },
  "devDependencies": {
    "eslint": "6.8.0",
    "eslint-config-standard": "14.1.1",
    "eslint-plugin-import": "2.22.0",
    "eslint-plugin-markdown": "1.0.2",
    "eslint-plugin-node": "11.1.0",
    "eslint-plugin-promise": "4.2.1",
    "eslint-plugin-standard": "4.0.1",
    "mocha": "8.0.1",
    "nyc": "15.1.0"
  },
  "engines": {
    "node": ">= 0.6"
  },
  "files": [
    "index.js",
    "HISTORY.md",
    "LICENSE",
    "README.md"
  ]
}/**
 * Helpers.
 */

var s = 1000;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var y = d * 365.25;

/**
 * Parse or format the given `val`.
 *
 * Options:
 *
 *  - `long` verbose formatting [false]
 *
 * @param {String|Number} val
 * @param {Object} [options]
 * @throws {Error} throw an error if val is not a non-empty string or a number
 * @return {String|Number}
 * @api public
 */

module.exports = function(val, options) {
  options = options || {};
  var type = typeof val;
  if (type === 'string' && val.length > 0) {
    return parse(val);
  } else if (type === 'number' && isNaN(val) === false) {
    return options.long ? fmtLong(val) : fmtShort(val);
  }
  throw new Error(
    'val is not a non-empty string or a valid number. val=' +
      JSON.stringify(val)
  );
};

/**
 * Parse the given `str` and return milliseconds.
 *
 * @param {String} str
 * @return {Number}
 * @api private
 */

function parse(str) {
  str = String(str);
  if (str.length > 100) {
    return;
  }
  var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(
    str
  );
  if (!match) {
    return;
  }
  var n = parseFloat(match[1]);
  var type = (match[2] || 'ms').toLowerCase();
  switch (type) {
    case 'years':
    case 'year':
    case 'yrs':
    case 'yr':
    case 'y':
      return n * y;
    case 'days':
    case 'day':
    case 'd':
      return n * d;
    case 'hours':
    case 'hour':
    case 'hrs':
    case 'hr':
    case 'h':
      return n * h;
    case 'minutes':
    case 'minute':
    case 'mins':
    case 'min':
    case 'm':
      return n * m;
    case 'seconds':
    case 'second':
    case 'secs':
    case 'sec':
    case 's':
      return n * s;
    case 'milliseconds':
    case 'millisecond':
    case 'msecs':
    case 'msec':
    case 'ms':
      return n;
    default:
      return undefined;
  }
}

/**
 * Short format for `ms`.
 *
 * @param {Number} ms
 * @return {String}
 * @api private
 */

function fmtShort(ms) {
  if (ms >= d) {
    return Math.round(ms / d) + 'd';
  }
  if (ms >= h) {
    return Math.round(ms / h) + 'h';
  }
  if (ms >= m) {
    return Math.round(ms / m) + 'm';
  }
  if (ms >= s) {
    return Math.round(ms / s) + 's';
  }
  return ms + 'ms';
}

/**
 * Long format for `ms`.
 *
 * @param {Number} ms
 * @return {String}
 * @api private
 */

function fmtLong(ms) {
  return plural(ms, d, 'day') ||
    plural(ms, h, 'hour') ||
    plural(ms, m, 'minute') ||
    plural(ms, s, 'second') ||
    ms + ' ms';
}

/**
 * Pluralization helper.
 */

function plural(ms, n, name) {
  if (ms < n) {
    return;
  }
  if (ms < n * 1.5) {
    return Math.floor(ms / n) + ' ' + name;
  }
  return Math.ceil(ms / n) + ' ' + name + 's';
}
The MIT License (MIT)

Copyright (c) 2016 Zeit, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "ms",
  "version": "2.0.0",
  "description": "Tiny milisecond conversion utility",
  "repository": "zeit/ms",
  "main": "./index",
  "files": [
    "index.js"
  ],
  "lint-staged": {
    "*.js": [
      "npm run lint",
      "prettier --single-quote --write",
      "git add"
    ]
  },
  "license": "MIT",
  "devDependencies": {
    "eslint": "3.19.0",
    "expect.js": "0.3.1",
    "husky": "0.13.3",
    "lint-staged": "3.4.1",
    "mocha": "3.4.1"
  }
}2.3.0 / 2015-05-26
==================

  * Add defined behavior for HTTP `CONNECT` requests
  * Add defined behavior for HTTP `Upgrade` requests
  * deps: ee-first@1.1.1

2.2.1 / 2015-04-22
==================

  * Fix `isFinished(req)` when data buffered

2.2.0 / 2014-12-22
==================

  * Add message object to callback arguments

2.1.1 / 2014-10-22
==================

  * Fix handling of pipelined requests

2.1.0 / 2014-08-16
==================

  * Check if `socket` is detached
  * Return `undefined` for `isFinished` if state unknown

2.0.0 / 2014-08-16
==================

  * Add `isFinished` function
  * Move to `jshttp` organization
  * Remove support for plain socket argument
  * Rename to `on-finished`
  * Support both `req` and `res` as arguments
  * deps: ee-first@1.0.5

1.2.2 / 2014-06-10
==================

  * Reduce listeners added to emitters
    - avoids "event emitter leak" warnings when used multiple times on same request

1.2.1 / 2014-06-08
==================

  * Fix returned value when already finished

1.2.0 / 2014-06-05
==================

  * Call callback when called on already-finished socket

1.1.4 / 2014-05-27
==================

  * Support node.js 0.8

1.1.3 / 2014-04-30
==================

  * Make sure errors passed as instanceof `Error`

1.1.2 / 2014-04-18
==================

  * Default the `socket` to passed-in object

1.1.1 / 2014-01-16
==================

  * Rename module to `finished`

1.1.0 / 2013-12-25
==================

  * Call callback when called on already-errored socket

1.0.1 / 2013-12-20
==================

  * Actually pass the error to the callback

1.0.0 / 2013-12-20
==================

  * Initial release
/*!
 * on-finished
 * Copyright(c) 2013 Jonathan Ong
 * Copyright(c) 2014 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 * @public
 */

module.exports = onFinished
module.exports.isFinished = isFinished

/**
 * Module dependencies.
 * @private
 */

var first = require('ee-first')

/**
 * Variables.
 * @private
 */

/* istanbul ignore next */
var defer = typeof setImmediate === 'function'
  ? setImmediate
  : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }

/**
 * Invoke callback when the response has finished, useful for
 * cleaning up resources afterwards.
 *
 * @param {object} msg
 * @param {function} listener
 * @return {object}
 * @public
 */

function onFinished(msg, listener) {
  if (isFinished(msg) !== false) {
    defer(listener, null, msg)
    return msg
  }

  // attach the listener to the message
  attachListener(msg, listener)

  return msg
}

/**
 * Determine if message is already finished.
 *
 * @param {object} msg
 * @return {boolean}
 * @public
 */

function isFinished(msg) {
  var socket = msg.socket

  if (typeof msg.finished === 'boolean') {
    // OutgoingMessage
    return Boolean(msg.finished || (socket && !socket.writable))
  }

  if (typeof msg.complete === 'boolean') {
    // IncomingMessage
    return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))
  }

  // don't know
  return undefined
}

/**
 * Attach a finished listener to the message.
 *
 * @param {object} msg
 * @param {function} callback
 * @private
 */

function attachFinishedListener(msg, callback) {
  var eeMsg
  var eeSocket
  var finished = false

  function onFinish(error) {
    eeMsg.cancel()
    eeSocket.cancel()

    finished = true
    callback(error)
  }

  // finished on first message event
  eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)

  function onSocket(socket) {
    // remove listener
    msg.removeListener('socket', onSocket)

    if (finished) return
    if (eeMsg !== eeSocket) return

    // finished on first socket event
    eeSocket = first([[socket, 'error', 'close']], onFinish)
  }

  if (msg.socket) {
    // socket already assigned
    onSocket(msg.socket)
    return
  }

  // wait for socket to be assigned
  msg.on('socket', onSocket)

  if (msg.socket === undefined) {
    // node.js 0.8 patch
    patchAssignSocket(msg, onSocket)
  }
}

/**
 * Attach the listener to the message.
 *
 * @param {object} msg
 * @return {function}
 * @private
 */

function attachListener(msg, listener) {
  var attached = msg.__onFinished

  // create a private single listener with queue
  if (!attached || !attached.queue) {
    attached = msg.__onFinished = createListener(msg)
    attachFinishedListener(msg, attached)
  }

  attached.queue.push(listener)
}

/**
 * Create listener on message.
 *
 * @param {object} msg
 * @return {function}
 * @private
 */

function createListener(msg) {
  function listener(err) {
    if (msg.__onFinished === listener) msg.__onFinished = null
    if (!listener.queue) return

    var queue = listener.queue
    listener.queue = null

    for (var i = 0; i < queue.length; i++) {
      queue[i](err, msg)
    }
  }

  listener.queue = []

  return listener
}

/**
 * Patch ServerResponse.prototype.assignSocket for node.js 0.8.
 *
 * @param {ServerResponse} res
 * @param {function} callback
 * @private
 */

function patchAssignSocket(res, callback) {
  var assignSocket = res.assignSocket

  if (typeof assignSocket !== 'function') return

  // res.on('socket', callback) is broken in 0.8
  res.assignSocket = function _assignSocket(socket) {
    assignSocket.call(this, socket)
    callback(socket)
  }
}
(The MIT License)

Copyright (c) 2013 Jonathan Ong <me@jongleberry.com>
Copyright (c) 2014 Douglas Christopher Wilson <doug@somethingdoug.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "on-finished",
  "description": "Execute a callback when a request closes, finishes, or errors",
  "version": "2.3.0",
  "license": "MIT",
  "repository": "jshttp/on-finished",
  "dependencies": {
    "ee-first": "1.1.1"
  },
  "devDependencies": {
    "istanbul": "0.3.9",
    "mocha": "2.2.5"
  },
  "engines": {
    "node": ">= 0.8"
  },
  "files": [
    "HISTORY.md",
    "LICENSE",
    "index.js"
  ]
}/* eslint-disable node/no-deprecated-api */
var buffer = require('buffer')
var Buffer = buffer.Buffer

// alternative to using Object.keys for old browsers
function copyProps (src, dst) {
  for (var key in src) {
    dst[key] = src[key]
  }
}
if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
  module.exports = buffer
} else {
  // Copy properties from require('buffer')
  copyProps(buffer, exports)
  exports.Buffer = SafeBuffer
}

function SafeBuffer (arg, encodingOrOffset, length) {
  return Buffer(arg, encodingOrOffset, length)
}

// Copy static methods from Buffer
copyProps(Buffer, SafeBuffer)

SafeBuffer.from = function (arg, encodingOrOffset, length) {
  if (typeof arg === 'number') {
    throw new TypeError('Argument must not be a number')
  }
  return Buffer(arg, encodingOrOffset, length)
}

SafeBuffer.alloc = function (size, fill, encoding) {
  if (typeof size !== 'number') {
    throw new TypeError('Argument must be a number')
  }
  var buf = Buffer(size)
  if (fill !== undefined) {
    if (typeof encoding === 'string') {
      buf.fill(fill, encoding)
    } else {
      buf.fill(fill)
    }
  } else {
    buf.fill(0)
  }
  return buf
}

SafeBuffer.allocUnsafe = function (size) {
  if (typeof size !== 'number') {
    throw new TypeError('Argument must be a number')
  }
  return Buffer(size)
}

SafeBuffer.allocUnsafeSlow = function (size) {
  if (typeof size !== 'number') {
    throw new TypeError('Argument must be a number')
  }
  return buffer.SlowBuffer(size)
}
The MIT License (MIT)

Copyright (c) Feross Aboukhadijeh

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "safe-buffer",
  "description": "Safer Node.js Buffer API",
  "version": "5.1.2",
  "author": {
    "name": "Feross Aboukhadijeh",
    "email": "feross@feross.org",
    "url": "http://feross.org"
  },
  "devDependencies": {
    "standard": "*",
    "tape": "^4.0.0"
  },
  "homepage": "https://github.com/feross/safe-buffer",
  "license": "MIT",
  "main": "index.js",
  "types": "index.d.ts",
  "repository": {
    "type": "git",
    "url": "git://github.com/feross/safe-buffer.git"
  }
}{
  "name": "koa",
  "version": "2.13.1",
  "description": "Koa web app framework",
  "main": "lib/application.js",
  "exports": {
    ".": {
      "require": "./lib/application.js",
      "import": "./dist/koa.mjs"
    },
    "./": "./"
  },
  "repository": "koajs/koa",
  "license": "MIT",
  "dependencies": {
    "accepts": "^1.3.5",
    "cache-content-type": "^1.0.0",
    "content-disposition": "~0.5.2",
    "content-type": "^1.0.4",
    "cookies": "~0.8.0",
    "debug": "~3.1.0",
    "delegates": "^1.0.0",
    "depd": "^2.0.0",
    "destroy": "^1.0.4",
    "encodeurl": "^1.0.2",
    "escape-html": "^1.0.3",
    "fresh": "~0.5.2",
    "http-assert": "^1.3.0",
    "http-errors": "^1.6.3",
    "is-generator-function": "^1.0.7",
    "koa-compose": "^4.1.0",
    "koa-convert": "^1.2.0",
    "on-finished": "^2.3.0",
    "only": "~0.0.2",
    "parseurl": "^1.3.2",
    "statuses": "^1.5.0",
    "type-is": "^1.6.16",
    "vary": "^1.1.2"
  },
  "devDependencies": {
    "egg-bin": "^4.13.0",
    "eslint": "^6.5.1",
    "eslint-config-koa": "^2.0.0",
    "eslint-config-standard": "^14.1.0",
    "eslint-plugin-import": "^2.18.2",
    "eslint-plugin-node": "^10.0.0",
    "eslint-plugin-promise": "^4.2.1",
    "eslint-plugin-standard": "^4.0.1",
    "gen-esm-wrapper": "^1.0.6",
    "mm": "^2.5.0",
    "supertest": "^3.1.0"
  },
  "engines": {
    "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4"
  },
  "files": [
    "dist",
    "lib"
  ]
}'use strict';
const path = require('path');
const pathExists = require('path-exists');
const pLocate = require('p-locate');

module.exports = (iterable, options) => {
	options = Object.assign({
		cwd: process.cwd()
	}, options);

	return pLocate(iterable, el => pathExists(path.resolve(options.cwd, el)), options);
};

module.exports.sync = (iterable, options) => {
	options = Object.assign({
		cwd: process.cwd()
	}, options);

	for (const el of iterable) {
		if (pathExists.sync(path.resolve(options.cwd, el))) {
			return el;
		}
	}
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "locate-path",
  "version": "3.0.0",
  "description": "Get the first path that exists on disk of multiple paths",
  "license": "MIT",
  "repository": "sindresorhus/locate-path",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "p-locate": "^3.0.0",
    "path-exists": "^3.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}/**
 * A faster alternative to `Function#apply`, this function invokes `func`
 * with the `this` binding of `thisArg` and the arguments of `args`.
 *
 * @private
 * @param {Function} func The function to invoke.
 * @param {*} thisArg The `this` binding of `func`.
 * @param {Array} args The arguments to invoke `func` with.
 * @returns {*} Returns the result of `func`.
 */
function apply(func, thisArg, args) {
  switch (args.length) {
    case 0: return func.call(thisArg);
    case 1: return func.call(thisArg, args[0]);
    case 2: return func.call(thisArg, args[0], args[1]);
    case 3: return func.call(thisArg, args[0], args[1], args[2]);
  }
  return func.apply(thisArg, args);
}

module.exports = apply;
/**
 * A specialized version of `baseAggregator` for arrays.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} setter The function to set `accumulator` values.
 * @param {Function} iteratee The iteratee to transform keys.
 * @param {Object} accumulator The initial aggregated object.
 * @returns {Function} Returns `accumulator`.
 */
function arrayAggregator(array, setter, iteratee, accumulator) {
  var index = -1,
      length = array == null ? 0 : array.length;

  while (++index < length) {
    var value = array[index];
    setter(accumulator, value, iteratee(value), array);
  }
  return accumulator;
}

module.exports = arrayAggregator;
/**
 * A specialized version of `_.forEach` for arrays without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns `array`.
 */
function arrayEach(array, iteratee) {
  var index = -1,
      length = array == null ? 0 : array.length;

  while (++index < length) {
    if (iteratee(array[index], index, array) === false) {
      break;
    }
  }
  return array;
}

module.exports = arrayEach;
/**
 * A specialized version of `_.forEachRight` for arrays without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns `array`.
 */
function arrayEachRight(array, iteratee) {
  var length = array == null ? 0 : array.length;

  while (length--) {
    if (iteratee(array[length], length, array) === false) {
      break;
    }
  }
  return array;
}

module.exports = arrayEachRight;
/**
 * A specialized version of `_.every` for arrays without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} predicate The function invoked per iteration.
 * @returns {boolean} Returns `true` if all elements pass the predicate check,
 *  else `false`.
 */
function arrayEvery(array, predicate) {
  var index = -1,
      length = array == null ? 0 : array.length;

  while (++index < length) {
    if (!predicate(array[index], index, array)) {
      return false;
    }
  }
  return true;
}

module.exports = arrayEvery;
/**
 * A specialized version of `_.filter` for arrays without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} predicate The function invoked per iteration.
 * @returns {Array} Returns the new filtered array.
 */
function arrayFilter(array, predicate) {
  var index = -1,
      length = array == null ? 0 : array.length,
      resIndex = 0,
      result = [];

  while (++index < length) {
    var value = array[index];
    if (predicate(value, index, array)) {
      result[resIndex++] = value;
    }
  }
  return result;
}

module.exports = arrayFilter;
var baseIndexOf = require('./_baseIndexOf');

/**
 * A specialized version of `_.includes` for arrays without support for
 * specifying an index to search from.
 *
 * @private
 * @param {Array} [array] The array to inspect.
 * @param {*} target The value to search for.
 * @returns {boolean} Returns `true` if `target` is found, else `false`.
 */
function arrayIncludes(array, value) {
  var length = array == null ? 0 : array.length;
  return !!length && baseIndexOf(array, value, 0) > -1;
}

module.exports = arrayIncludes;
/**
 * This function is like `arrayIncludes` except that it accepts a comparator.
 *
 * @private
 * @param {Array} [array] The array to inspect.
 * @param {*} target The value to search for.
 * @param {Function} comparator The comparator invoked per element.
 * @returns {boolean} Returns `true` if `target` is found, else `false`.
 */
function arrayIncludesWith(array, value, comparator) {
  var index = -1,
      length = array == null ? 0 : array.length;

  while (++index < length) {
    if (comparator(value, array[index])) {
      return true;
    }
  }
  return false;
}

module.exports = arrayIncludesWith;
var baseTimes = require('./_baseTimes'),
    isArguments = require('./isArguments'),
    isArray = require('./isArray'),
    isBuffer = require('./isBuffer'),
    isIndex = require('./_isIndex'),
    isTypedArray = require('./isTypedArray');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Creates an array of the enumerable property names of the array-like `value`.
 *
 * @private
 * @param {*} value The value to query.
 * @param {boolean} inherited Specify returning inherited property names.
 * @returns {Array} Returns the array of property names.
 */
function arrayLikeKeys(value, inherited) {
  var isArr = isArray(value),
      isArg = !isArr && isArguments(value),
      isBuff = !isArr && !isArg && isBuffer(value),
      isType = !isArr && !isArg && !isBuff && isTypedArray(value),
      skipIndexes = isArr || isArg || isBuff || isType,
      result = skipIndexes ? baseTimes(value.length, String) : [],
      length = result.length;

  for (var key in value) {
    if ((inherited || hasOwnProperty.call(value, key)) &&
        !(skipIndexes && (
           // Safari 9 has enumerable `arguments.length` in strict mode.
           key == 'length' ||
           // Node.js 0.10 has enumerable non-index properties on buffers.
           (isBuff && (key == 'offset' || key == 'parent')) ||
           // PhantomJS 2 has enumerable non-index properties on typed arrays.
           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
           // Skip index properties.
           isIndex(key, length)
        ))) {
      result.push(key);
    }
  }
  return result;
}

module.exports = arrayLikeKeys;
/**
 * A specialized version of `_.map` for arrays without support for iteratee
 * shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the new mapped array.
 */
function arrayMap(array, iteratee) {
  var index = -1,
      length = array == null ? 0 : array.length,
      result = Array(length);

  while (++index < length) {
    result[index] = iteratee(array[index], index, array);
  }
  return result;
}

module.exports = arrayMap;
/**
 * Appends the elements of `values` to `array`.
 *
 * @private
 * @param {Array} array The array to modify.
 * @param {Array} values The values to append.
 * @returns {Array} Returns `array`.
 */
function arrayPush(array, values) {
  var index = -1,
      length = values.length,
      offset = array.length;

  while (++index < length) {
    array[offset + index] = values[index];
  }
  return array;
}

module.exports = arrayPush;
/**
 * A specialized version of `_.reduce` for arrays without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @param {*} [accumulator] The initial value.
 * @param {boolean} [initAccum] Specify using the first element of `array` as
 *  the initial value.
 * @returns {*} Returns the accumulated value.
 */
function arrayReduce(array, iteratee, accumulator, initAccum) {
  var index = -1,
      length = array == null ? 0 : array.length;

  if (initAccum && length) {
    accumulator = array[++index];
  }
  while (++index < length) {
    accumulator = iteratee(accumulator, array[index], index, array);
  }
  return accumulator;
}

module.exports = arrayReduce;
/**
 * A specialized version of `_.reduceRight` for arrays without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @param {*} [accumulator] The initial value.
 * @param {boolean} [initAccum] Specify using the last element of `array` as
 *  the initial value.
 * @returns {*} Returns the accumulated value.
 */
function arrayReduceRight(array, iteratee, accumulator, initAccum) {
  var length = array == null ? 0 : array.length;
  if (initAccum && length) {
    accumulator = array[--length];
  }
  while (length--) {
    accumulator = iteratee(accumulator, array[length], length, array);
  }
  return accumulator;
}

module.exports = arrayReduceRight;
var baseRandom = require('./_baseRandom');

/**
 * A specialized version of `_.sample` for arrays.
 *
 * @private
 * @param {Array} array The array to sample.
 * @returns {*} Returns the random element.
 */
function arraySample(array) {
  var length = array.length;
  return length ? array[baseRandom(0, length - 1)] : undefined;
}

module.exports = arraySample;
var baseClamp = require('./_baseClamp'),
    copyArray = require('./_copyArray'),
    shuffleSelf = require('./_shuffleSelf');

/**
 * A specialized version of `_.sampleSize` for arrays.
 *
 * @private
 * @param {Array} array The array to sample.
 * @param {number} n The number of elements to sample.
 * @returns {Array} Returns the random elements.
 */
function arraySampleSize(array, n) {
  return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
}

module.exports = arraySampleSize;
var copyArray = require('./_copyArray'),
    shuffleSelf = require('./_shuffleSelf');

/**
 * A specialized version of `_.shuffle` for arrays.
 *
 * @private
 * @param {Array} array The array to shuffle.
 * @returns {Array} Returns the new shuffled array.
 */
function arrayShuffle(array) {
  return shuffleSelf(copyArray(array));
}

module.exports = arrayShuffle;
/**
 * A specialized version of `_.some` for arrays without support for iteratee
 * shorthands.
 *
 * @private
 * @param {Array} [array] The array to iterate over.
 * @param {Function} predicate The function invoked per iteration.
 * @returns {boolean} Returns `true` if any element passes the predicate check,
 *  else `false`.
 */
function arraySome(array, predicate) {
  var index = -1,
      length = array == null ? 0 : array.length;

  while (++index < length) {
    if (predicate(array[index], index, array)) {
      return true;
    }
  }
  return false;
}

module.exports = arraySome;
var baseProperty = require('./_baseProperty');

/**
 * Gets the size of an ASCII `string`.
 *
 * @private
 * @param {string} string The string inspect.
 * @returns {number} Returns the string size.
 */
var asciiSize = baseProperty('length');

module.exports = asciiSize;
/**
 * Converts an ASCII `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function asciiToArray(string) {
  return string.split('');
}

module.exports = asciiToArray;
/** Used to match words composed of alphanumeric characters. */
var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;

/**
 * Splits an ASCII `string` into an array of its words.
 *
 * @private
 * @param {string} The string to inspect.
 * @returns {Array} Returns the words of `string`.
 */
function asciiWords(string) {
  return string.match(reAsciiWord) || [];
}

module.exports = asciiWords;
var baseAssignValue = require('./_baseAssignValue'),
    eq = require('./eq');

/**
 * This function is like `assignValue` except that it doesn't assign
 * `undefined` values.
 *
 * @private
 * @param {Object} object The object to modify.
 * @param {string} key The key of the property to assign.
 * @param {*} value The value to assign.
 */
function assignMergeValue(object, key, value) {
  if ((value !== undefined && !eq(object[key], value)) ||
      (value === undefined && !(key in object))) {
    baseAssignValue(object, key, value);
  }
}

module.exports = assignMergeValue;
var baseAssignValue = require('./_baseAssignValue'),
    eq = require('./eq');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Assigns `value` to `key` of `object` if the existing value is not equivalent
 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * for equality comparisons.
 *
 * @private
 * @param {Object} object The object to modify.
 * @param {string} key The key of the property to assign.
 * @param {*} value The value to assign.
 */
function assignValue(object, key, value) {
  var objValue = object[key];
  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
      (value === undefined && !(key in object))) {
    baseAssignValue(object, key, value);
  }
}

module.exports = assignValue;
var eq = require('./eq');

/**
 * Gets the index at which the `key` is found in `array` of key-value pairs.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {*} key The key to search for.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function assocIndexOf(array, key) {
  var length = array.length;
  while (length--) {
    if (eq(array[length][0], key)) {
      return length;
    }
  }
  return -1;
}

module.exports = assocIndexOf;
var baseEach = require('./_baseEach');

/**
 * Aggregates elements of `collection` on `accumulator` with keys transformed
 * by `iteratee` and values set by `setter`.
 *
 * @private
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} setter The function to set `accumulator` values.
 * @param {Function} iteratee The iteratee to transform keys.
 * @param {Object} accumulator The initial aggregated object.
 * @returns {Function} Returns `accumulator`.
 */
function baseAggregator(collection, setter, iteratee, accumulator) {
  baseEach(collection, function(value, key, collection) {
    setter(accumulator, value, iteratee(value), collection);
  });
  return accumulator;
}

module.exports = baseAggregator;
var copyObject = require('./_copyObject'),
    keys = require('./keys');

/**
 * The base implementation of `_.assign` without support for multiple sources
 * or `customizer` functions.
 *
 * @private
 * @param {Object} object The destination object.
 * @param {Object} source The source object.
 * @returns {Object} Returns `object`.
 */
function baseAssign(object, source) {
  return object && copyObject(source, keys(source), object);
}

module.exports = baseAssign;
var copyObject = require('./_copyObject'),
    keysIn = require('./keysIn');

/**
 * The base implementation of `_.assignIn` without support for multiple sources
 * or `customizer` functions.
 *
 * @private
 * @param {Object} object The destination object.
 * @param {Object} source The source object.
 * @returns {Object} Returns `object`.
 */
function baseAssignIn(object, source) {
  return object && copyObject(source, keysIn(source), object);
}

module.exports = baseAssignIn;
var defineProperty = require('./_defineProperty');

/**
 * The base implementation of `assignValue` and `assignMergeValue` without
 * value checks.
 *
 * @private
 * @param {Object} object The object to modify.
 * @param {string} key The key of the property to assign.
 * @param {*} value The value to assign.
 */
function baseAssignValue(object, key, value) {
  if (key == '__proto__' && defineProperty) {
    defineProperty(object, key, {
      'configurable': true,
      'enumerable': true,
      'value': value,
      'writable': true
    });
  } else {
    object[key] = value;
  }
}

module.exports = baseAssignValue;
var get = require('./get');

/**
 * The base implementation of `_.at` without support for individual paths.
 *
 * @private
 * @param {Object} object The object to iterate over.
 * @param {string[]} paths The property paths to pick.
 * @returns {Array} Returns the picked elements.
 */
function baseAt(object, paths) {
  var index = -1,
      length = paths.length,
      result = Array(length),
      skip = object == null;

  while (++index < length) {
    result[index] = skip ? undefined : get(object, paths[index]);
  }
  return result;
}

module.exports = baseAt;
/**
 * The base implementation of `_.clamp` which doesn't coerce arguments.
 *
 * @private
 * @param {number} number The number to clamp.
 * @param {number} [lower] The lower bound.
 * @param {number} upper The upper bound.
 * @returns {number} Returns the clamped number.
 */
function baseClamp(number, lower, upper) {
  if (number === number) {
    if (upper !== undefined) {
      number = number <= upper ? number : upper;
    }
    if (lower !== undefined) {
      number = number >= lower ? number : lower;
    }
  }
  return number;
}

module.exports = baseClamp;
var Stack = require('./_Stack'),
    arrayEach = require('./_arrayEach'),
    assignValue = require('./_assignValue'),
    baseAssign = require('./_baseAssign'),
    baseAssignIn = require('./_baseAssignIn'),
    cloneBuffer = require('./_cloneBuffer'),
    copyArray = require('./_copyArray'),
    copySymbols = require('./_copySymbols'),
    copySymbolsIn = require('./_copySymbolsIn'),
    getAllKeys = require('./_getAllKeys'),
    getAllKeysIn = require('./_getAllKeysIn'),
    getTag = require('./_getTag'),
    initCloneArray = require('./_initCloneArray'),
    initCloneByTag = require('./_initCloneByTag'),
    initCloneObject = require('./_initCloneObject'),
    isArray = require('./isArray'),
    isBuffer = require('./isBuffer'),
    isMap = require('./isMap'),
    isObject = require('./isObject'),
    isSet = require('./isSet'),
    keys = require('./keys'),
    keysIn = require('./keysIn');

/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1,
    CLONE_FLAT_FLAG = 2,
    CLONE_SYMBOLS_FLAG = 4;

/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
    arrayTag = '[object Array]',
    boolTag = '[object Boolean]',
    dateTag = '[object Date]',
    errorTag = '[object Error]',
    funcTag = '[object Function]',
    genTag = '[object GeneratorFunction]',
    mapTag = '[object Map]',
    numberTag = '[object Number]',
    objectTag = '[object Object]',
    regexpTag = '[object RegExp]',
    setTag = '[object Set]',
    stringTag = '[object String]',
    symbolTag = '[object Symbol]',
    weakMapTag = '[object WeakMap]';

var arrayBufferTag = '[object ArrayBuffer]',
    dataViewTag = '[object DataView]',
    float32Tag = '[object Float32Array]',
    float64Tag = '[object Float64Array]',
    int8Tag = '[object Int8Array]',
    int16Tag = '[object Int16Array]',
    int32Tag = '[object Int32Array]',
    uint8Tag = '[object Uint8Array]',
    uint8ClampedTag = '[object Uint8ClampedArray]',
    uint16Tag = '[object Uint16Array]',
    uint32Tag = '[object Uint32Array]';

/** Used to identify `toStringTag` values supported by `_.clone`. */
var cloneableTags = {};
cloneableTags[argsTag] = cloneableTags[arrayTag] =
cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
cloneableTags[boolTag] = cloneableTags[dateTag] =
cloneableTags[float32Tag] = cloneableTags[float64Tag] =
cloneableTags[int8Tag] = cloneableTags[int16Tag] =
cloneableTags[int32Tag] = cloneableTags[mapTag] =
cloneableTags[numberTag] = cloneableTags[objectTag] =
cloneableTags[regexpTag] = cloneableTags[setTag] =
cloneableTags[stringTag] = cloneableTags[symbolTag] =
cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
cloneableTags[errorTag] = cloneableTags[funcTag] =
cloneableTags[weakMapTag] = false;

/**
 * The base implementation of `_.clone` and `_.cloneDeep` which tracks
 * traversed objects.
 *
 * @private
 * @param {*} value The value to clone.
 * @param {boolean} bitmask The bitmask flags.
 *  1 - Deep clone
 *  2 - Flatten inherited properties
 *  4 - Clone symbols
 * @param {Function} [customizer] The function to customize cloning.
 * @param {string} [key] The key of `value`.
 * @param {Object} [object] The parent object of `value`.
 * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
 * @returns {*} Returns the cloned value.
 */
function baseClone(value, bitmask, customizer, key, object, stack) {
  var result,
      isDeep = bitmask & CLONE_DEEP_FLAG,
      isFlat = bitmask & CLONE_FLAT_FLAG,
      isFull = bitmask & CLONE_SYMBOLS_FLAG;

  if (customizer) {
    result = object ? customizer(value, key, object, stack) : customizer(value);
  }
  if (result !== undefined) {
    return result;
  }
  if (!isObject(value)) {
    return value;
  }
  var isArr = isArray(value);
  if (isArr) {
    result = initCloneArray(value);
    if (!isDeep) {
      return copyArray(value, result);
    }
  } else {
    var tag = getTag(value),
        isFunc = tag == funcTag || tag == genTag;

    if (isBuffer(value)) {
      return cloneBuffer(value, isDeep);
    }
    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
      result = (isFlat || isFunc) ? {} : initCloneObject(value);
      if (!isDeep) {
        return isFlat
          ? copySymbolsIn(value, baseAssignIn(result, value))
          : copySymbols(value, baseAssign(result, value));
      }
    } else {
      if (!cloneableTags[tag]) {
        return object ? value : {};
      }
      result = initCloneByTag(value, tag, isDeep);
    }
  }
  // Check for circular references and return its corresponding clone.
  stack || (stack = new Stack);
  var stacked = stack.get(value);
  if (stacked) {
    return stacked;
  }
  stack.set(value, result);

  if (isSet(value)) {
    value.forEach(function(subValue) {
      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
    });
  } else if (isMap(value)) {
    value.forEach(function(subValue, key) {
      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
    });
  }

  var keysFunc = isFull
    ? (isFlat ? getAllKeysIn : getAllKeys)
    : (isFlat ? keysIn : keys);

  var props = isArr ? undefined : keysFunc(value);
  arrayEach(props || value, function(subValue, key) {
    if (props) {
      key = subValue;
      subValue = value[key];
    }
    // Recursively populate clone (susceptible to call stack limits).
    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
  });
  return result;
}

module.exports = baseClone;
var baseConformsTo = require('./_baseConformsTo'),
    keys = require('./keys');

/**
 * The base implementation of `_.conforms` which doesn't clone `source`.
 *
 * @private
 * @param {Object} source The object of property predicates to conform to.
 * @returns {Function} Returns the new spec function.
 */
function baseConforms(source) {
  var props = keys(source);
  return function(object) {
    return baseConformsTo(object, source, props);
  };
}

module.exports = baseConforms;
/**
 * The base implementation of `_.conformsTo` which accepts `props` to check.
 *
 * @private
 * @param {Object} object The object to inspect.
 * @param {Object} source The object of property predicates to conform to.
 * @returns {boolean} Returns `true` if `object` conforms, else `false`.
 */
function baseConformsTo(object, source, props) {
  var length = props.length;
  if (object == null) {
    return !length;
  }
  object = Object(object);
  while (length--) {
    var key = props[length],
        predicate = source[key],
        value = object[key];

    if ((value === undefined && !(key in object)) || !predicate(value)) {
      return false;
    }
  }
  return true;
}

module.exports = baseConformsTo;
var isObject = require('./isObject');

/** Built-in value references. */
var objectCreate = Object.create;

/**
 * The base implementation of `_.create` without support for assigning
 * properties to the created object.
 *
 * @private
 * @param {Object} proto The object to inherit from.
 * @returns {Object} Returns the new object.
 */
var baseCreate = (function() {
  function object() {}
  return function(proto) {
    if (!isObject(proto)) {
      return {};
    }
    if (objectCreate) {
      return objectCreate(proto);
    }
    object.prototype = proto;
    var result = new object;
    object.prototype = undefined;
    return result;
  };
}());

module.exports = baseCreate;
/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/**
 * The base implementation of `_.delay` and `_.defer` which accepts `args`
 * to provide to `func`.
 *
 * @private
 * @param {Function} func The function to delay.
 * @param {number} wait The number of milliseconds to delay invocation.
 * @param {Array} args The arguments to provide to `func`.
 * @returns {number|Object} Returns the timer id or timeout object.
 */
function baseDelay(func, wait, args) {
  if (typeof func != 'function') {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  return setTimeout(function() { func.apply(undefined, args); }, wait);
}

module.exports = baseDelay;
var SetCache = require('./_SetCache'),
    arrayIncludes = require('./_arrayIncludes'),
    arrayIncludesWith = require('./_arrayIncludesWith'),
    arrayMap = require('./_arrayMap'),
    baseUnary = require('./_baseUnary'),
    cacheHas = require('./_cacheHas');

/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;

/**
 * The base implementation of methods like `_.difference` without support
 * for excluding multiple arrays or iteratee shorthands.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {Array} values The values to exclude.
 * @param {Function} [iteratee] The iteratee invoked per element.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns the new array of filtered values.
 */
function baseDifference(array, values, iteratee, comparator) {
  var index = -1,
      includes = arrayIncludes,
      isCommon = true,
      length = array.length,
      result = [],
      valuesLength = values.length;

  if (!length) {
    return result;
  }
  if (iteratee) {
    values = arrayMap(values, baseUnary(iteratee));
  }
  if (comparator) {
    includes = arrayIncludesWith;
    isCommon = false;
  }
  else if (values.length >= LARGE_ARRAY_SIZE) {
    includes = cacheHas;
    isCommon = false;
    values = new SetCache(values);
  }
  outer:
  while (++index < length) {
    var value = array[index],
        computed = iteratee == null ? value : iteratee(value);

    value = (comparator || value !== 0) ? value : 0;
    if (isCommon && computed === computed) {
      var valuesIndex = valuesLength;
      while (valuesIndex--) {
        if (values[valuesIndex] === computed) {
          continue outer;
        }
      }
      result.push(value);
    }
    else if (!includes(values, computed, comparator)) {
      result.push(value);
    }
  }
  return result;
}

module.exports = baseDifference;
var baseForOwn = require('./_baseForOwn'),
    createBaseEach = require('./_createBaseEach');

/**
 * The base implementation of `_.forEach` without support for iteratee shorthands.
 *
 * @private
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array|Object} Returns `collection`.
 */
var baseEach = createBaseEach(baseForOwn);

module.exports = baseEach;
var baseForOwnRight = require('./_baseForOwnRight'),
    createBaseEach = require('./_createBaseEach');

/**
 * The base implementation of `_.forEachRight` without support for iteratee shorthands.
 *
 * @private
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array|Object} Returns `collection`.
 */
var baseEachRight = createBaseEach(baseForOwnRight, true);

module.exports = baseEachRight;
var baseEach = require('./_baseEach');

/**
 * The base implementation of `_.every` without support for iteratee shorthands.
 *
 * @private
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} predicate The function invoked per iteration.
 * @returns {boolean} Returns `true` if all elements pass the predicate check,
 *  else `false`
 */
function baseEvery(collection, predicate) {
  var result = true;
  baseEach(collection, function(value, index, collection) {
    result = !!predicate(value, index, collection);
    return result;
  });
  return result;
}

module.exports = baseEvery;
var isSymbol = require('./isSymbol');

/**
 * The base implementation of methods like `_.max` and `_.min` which accepts a
 * `comparator` to determine the extremum value.
 *
 * @private
 * @param {Array} array The array to iterate over.
 * @param {Function} iteratee The iteratee invoked per iteration.
 * @param {Function} comparator The comparator used to compare values.
 * @returns {*} Returns the extremum value.
 */
function baseExtremum(array, iteratee, comparator) {
  var index = -1,
      length = array.length;

  while (++index < length) {
    var value = array[index],
        current = iteratee(value);

    if (current != null && (computed === undefined
          ? (current === current && !isSymbol(current))
          : comparator(current, computed)
        )) {
      var computed = current,
          result = value;
    }
  }
  return result;
}

module.exports = baseExtremum;
var toInteger = require('./toInteger'),
    toLength = require('./toLength');

/**
 * The base implementation of `_.fill` without an iteratee call guard.
 *
 * @private
 * @param {Array} array The array to fill.
 * @param {*} value The value to fill `array` with.
 * @param {number} [start=0] The start position.
 * @param {number} [end=array.length] The end position.
 * @returns {Array} Returns `array`.
 */
function baseFill(array, value, start, end) {
  var length = array.length;

  start = toInteger(start);
  if (start < 0) {
    start = -start > length ? 0 : (length + start);
  }
  end = (end === undefined || end > length) ? length : toInteger(end);
  if (end < 0) {
    end += length;
  }
  end = start > end ? 0 : toLength(end);
  while (start < end) {
    array[start++] = value;
  }
  return array;
}

module.exports = baseFill;
var baseEach = require('./_baseEach');

/**
 * The base implementation of `_.filter` without support for iteratee shorthands.
 *
 * @private
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} predicate The function invoked per iteration.
 * @returns {Array} Returns the new filtered array.
 */
function baseFilter(collection, predicate) {
  var result = [];
  baseEach(collection, function(value, index, collection) {
    if (predicate(value, index, collection)) {
      result.push(value);
    }
  });
  return result;
}

module.exports = baseFilter;
/**
 * The base implementation of `_.findIndex` and `_.findLastIndex` without
 * support for iteratee shorthands.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {Function} predicate The function invoked per iteration.
 * @param {number} fromIndex The index to search from.
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function baseFindIndex(array, predicate, fromIndex, fromRight) {
  var length = array.length,
      index = fromIndex + (fromRight ? 1 : -1);

  while ((fromRight ? index-- : ++index < length)) {
    if (predicate(array[index], index, array)) {
      return index;
    }
  }
  return -1;
}

module.exports = baseFindIndex;
/**
 * The base implementation of methods like `_.findKey` and `_.findLastKey`,
 * without support for iteratee shorthands, which iterates over `collection`
 * using `eachFunc`.
 *
 * @private
 * @param {Array|Object} collection The collection to inspect.
 * @param {Function} predicate The function invoked per iteration.
 * @param {Function} eachFunc The function to iterate over `collection`.
 * @returns {*} Returns the found element or its key, else `undefined`.
 */
function baseFindKey(collection, predicate, eachFunc) {
  var result;
  eachFunc(collection, function(value, key, collection) {
    if (predicate(value, key, collection)) {
      result = key;
      return false;
    }
  });
  return result;
}

module.exports = baseFindKey;
var arrayPush = require('./_arrayPush'),
    isFlattenable = require('./_isFlattenable');

/**
 * The base implementation of `_.flatten` with support for restricting flattening.
 *
 * @private
 * @param {Array} array The array to flatten.
 * @param {number} depth The maximum recursion depth.
 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
 * @param {Array} [result=[]] The initial result value.
 * @returns {Array} Returns the new flattened array.
 */
function baseFlatten(array, depth, predicate, isStrict, result) {
  var index = -1,
      length = array.length;

  predicate || (predicate = isFlattenable);
  result || (result = []);

  while (++index < length) {
    var value = array[index];
    if (depth > 0 && predicate(value)) {
      if (depth > 1) {
        // Recursively flatten arrays (susceptible to call stack limits).
        baseFlatten(value, depth - 1, predicate, isStrict, result);
      } else {
        arrayPush(result, value);
      }
    } else if (!isStrict) {
      result[result.length] = value;
    }
  }
  return result;
}

module.exports = baseFlatten;
var createBaseFor = require('./_createBaseFor');

/**
 * The base implementation of `baseForOwn` which iterates over `object`
 * properties returned by `keysFunc` and invokes `iteratee` for each property.
 * Iteratee functions may exit iteration early by explicitly returning `false`.
 *
 * @private
 * @param {Object} object The object to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @param {Function} keysFunc The function to get the keys of `object`.
 * @returns {Object} Returns `object`.
 */
var baseFor = createBaseFor();

module.exports = baseFor;
var baseFor = require('./_baseFor'),
    keys = require('./keys');

/**
 * The base implementation of `_.forOwn` without support for iteratee shorthands.
 *
 * @private
 * @param {Object} object The object to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Object} Returns `object`.
 */
function baseForOwn(object, iteratee) {
  return object && baseFor(object, iteratee, keys);
}

module.exports = baseForOwn;
var baseForRight = require('./_baseForRight'),
    keys = require('./keys');

/**
 * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
 *
 * @private
 * @param {Object} object The object to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Object} Returns `object`.
 */
function baseForOwnRight(object, iteratee) {
  return object && baseForRight(object, iteratee, keys);
}

module.exports = baseForOwnRight;
var createBaseFor = require('./_createBaseFor');

/**
 * This function is like `baseFor` except that it iterates over properties
 * in the opposite order.
 *
 * @private
 * @param {Object} object The object to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @param {Function} keysFunc The function to get the keys of `object`.
 * @returns {Object} Returns `object`.
 */
var baseForRight = createBaseFor(true);

module.exports = baseForRight;
var arrayFilter = require('./_arrayFilter'),
    isFunction = require('./isFunction');

/**
 * The base implementation of `_.functions` which creates an array of
 * `object` function property names filtered from `props`.
 *
 * @private
 * @param {Object} object The object to inspect.
 * @param {Array} props The property names to filter.
 * @returns {Array} Returns the function names.
 */
function baseFunctions(object, props) {
  return arrayFilter(props, function(key) {
    return isFunction(object[key]);
  });
}

module.exports = baseFunctions;
var castPath = require('./_castPath'),
    toKey = require('./_toKey');

/**
 * The base implementation of `_.get` without support for default values.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {Array|string} path The path of the property to get.
 * @returns {*} Returns the resolved value.
 */
function baseGet(object, path) {
  path = castPath(path, object);

  var index = 0,
      length = path.length;

  while (object != null && index < length) {
    object = object[toKey(path[index++])];
  }
  return (index && index == length) ? object : undefined;
}

module.exports = baseGet;
var arrayPush = require('./_arrayPush'),
    isArray = require('./isArray');

/**
 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
 * `keysFunc` and `symbolsFunc` to get the enumerable property names and
 * symbols of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {Function} keysFunc The function to get the keys of `object`.
 * @param {Function} symbolsFunc The function to get the symbols of `object`.
 * @returns {Array} Returns the array of property names and symbols.
 */
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
  var result = keysFunc(object);
  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
}

module.exports = baseGetAllKeys;
var Symbol = require('./_Symbol'),
    getRawTag = require('./_getRawTag'),
    objectToString = require('./_objectToString');

/** `Object#toString` result references. */
var nullTag = '[object Null]',
    undefinedTag = '[object Undefined]';

/** Built-in value references. */
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;

/**
 * The base implementation of `getTag` without fallbacks for buggy environments.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the `toStringTag`.
 */
function baseGetTag(value) {
  if (value == null) {
    return value === undefined ? undefinedTag : nullTag;
  }
  return (symToStringTag && symToStringTag in Object(value))
    ? getRawTag(value)
    : objectToString(value);
}

module.exports = baseGetTag;
/**
 * The base implementation of `_.gt` which doesn't coerce arguments.
 *
 * @private
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if `value` is greater than `other`,
 *  else `false`.
 */
function baseGt(value, other) {
  return value > other;
}

module.exports = baseGt;
/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * The base implementation of `_.has` without support for deep paths.
 *
 * @private
 * @param {Object} [object] The object to query.
 * @param {Array|string} key The key to check.
 * @returns {boolean} Returns `true` if `key` exists, else `false`.
 */
function baseHas(object, key) {
  return object != null && hasOwnProperty.call(object, key);
}

module.exports = baseHas;
/**
 * The base implementation of `_.hasIn` without support for deep paths.
 *
 * @private
 * @param {Object} [object] The object to query.
 * @param {Array|string} key The key to check.
 * @returns {boolean} Returns `true` if `key` exists, else `false`.
 */
function baseHasIn(object, key) {
  return object != null && key in Object(object);
}

module.exports = baseHasIn;
var baseFindIndex = require('./_baseFindIndex'),
    baseIsNaN = require('./_baseIsNaN'),
    strictIndexOf = require('./_strictIndexOf');

/**
 * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @param {number} fromIndex The index to search from.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function baseIndexOf(array, value, fromIndex) {
  return value === value
    ? strictIndexOf(array, value, fromIndex)
    : baseFindIndex(array, baseIsNaN, fromIndex);
}

module.exports = baseIndexOf;
/**
 * This function is like `baseIndexOf` except that it accepts a comparator.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @param {number} fromIndex The index to search from.
 * @param {Function} comparator The comparator invoked per element.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function baseIndexOfWith(array, value, fromIndex, comparator) {
  var index = fromIndex - 1,
      length = array.length;

  while (++index < length) {
    if (comparator(array[index], value)) {
      return index;
    }
  }
  return -1;
}

module.exports = baseIndexOfWith;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max,
    nativeMin = Math.min;

/**
 * The base implementation of `_.inRange` which doesn't coerce arguments.
 *
 * @private
 * @param {number} number The number to check.
 * @param {number} start The start of the range.
 * @param {number} end The end of the range.
 * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
 */
function baseInRange(number, start, end) {
  return number >= nativeMin(start, end) && number < nativeMax(start, end);
}

module.exports = baseInRange;
var SetCache = require('./_SetCache'),
    arrayIncludes = require('./_arrayIncludes'),
    arrayIncludesWith = require('./_arrayIncludesWith'),
    arrayMap = require('./_arrayMap'),
    baseUnary = require('./_baseUnary'),
    cacheHas = require('./_cacheHas');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMin = Math.min;

/**
 * The base implementation of methods like `_.intersection`, without support
 * for iteratee shorthands, that accepts an array of arrays to inspect.
 *
 * @private
 * @param {Array} arrays The arrays to inspect.
 * @param {Function} [iteratee] The iteratee invoked per element.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns the new array of shared values.
 */
function baseIntersection(arrays, iteratee, comparator) {
  var includes = comparator ? arrayIncludesWith : arrayIncludes,
      length = arrays[0].length,
      othLength = arrays.length,
      othIndex = othLength,
      caches = Array(othLength),
      maxLength = Infinity,
      result = [];

  while (othIndex--) {
    var array = arrays[othIndex];
    if (othIndex && iteratee) {
      array = arrayMap(array, baseUnary(iteratee));
    }
    maxLength = nativeMin(array.length, maxLength);
    caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
      ? new SetCache(othIndex && array)
      : undefined;
  }
  array = arrays[0];

  var index = -1,
      seen = caches[0];

  outer:
  while (++index < length && result.length < maxLength) {
    var value = array[index],
        computed = iteratee ? iteratee(value) : value;

    value = (comparator || value !== 0) ? value : 0;
    if (!(seen
          ? cacheHas(seen, computed)
          : includes(result, computed, comparator)
        )) {
      othIndex = othLength;
      while (--othIndex) {
        var cache = caches[othIndex];
        if (!(cache
              ? cacheHas(cache, computed)
              : includes(arrays[othIndex], computed, comparator))
            ) {
          continue outer;
        }
      }
      if (seen) {
        seen.push(computed);
      }
      result.push(value);
    }
  }
  return result;
}

module.exports = baseIntersection;
var baseForOwn = require('./_baseForOwn');

/**
 * The base implementation of `_.invert` and `_.invertBy` which inverts
 * `object` with values transformed by `iteratee` and set by `setter`.
 *
 * @private
 * @param {Object} object The object to iterate over.
 * @param {Function} setter The function to set `accumulator` values.
 * @param {Function} iteratee The iteratee to transform values.
 * @param {Object} accumulator The initial inverted object.
 * @returns {Function} Returns `accumulator`.
 */
function baseInverter(object, setter, iteratee, accumulator) {
  baseForOwn(object, function(value, key, object) {
    setter(accumulator, iteratee(value), key, object);
  });
  return accumulator;
}

module.exports = baseInverter;
var apply = require('./_apply'),
    castPath = require('./_castPath'),
    last = require('./last'),
    parent = require('./_parent'),
    toKey = require('./_toKey');

/**
 * The base implementation of `_.invoke` without support for individual
 * method arguments.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {Array|string} path The path of the method to invoke.
 * @param {Array} args The arguments to invoke the method with.
 * @returns {*} Returns the result of the invoked method.
 */
function baseInvoke(object, path, args) {
  path = castPath(path, object);
  object = parent(object, path);
  var func = object == null ? object : object[toKey(last(path))];
  return func == null ? undefined : apply(func, object, args);
}

module.exports = baseInvoke;
var baseGetTag = require('./_baseGetTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var argsTag = '[object Arguments]';

/**
 * The base implementation of `_.isArguments`.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
 */
function baseIsArguments(value) {
  return isObjectLike(value) && baseGetTag(value) == argsTag;
}

module.exports = baseIsArguments;
var baseGetTag = require('./_baseGetTag'),
    isObjectLike = require('./isObjectLike');

var arrayBufferTag = '[object ArrayBuffer]';

/**
 * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
 */
function baseIsArrayBuffer(value) {
  return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
}

module.exports = baseIsArrayBuffer;
var baseGetTag = require('./_baseGetTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var dateTag = '[object Date]';

/**
 * The base implementation of `_.isDate` without Node.js optimizations.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
 */
function baseIsDate(value) {
  return isObjectLike(value) && baseGetTag(value) == dateTag;
}

module.exports = baseIsDate;
var baseIsEqualDeep = require('./_baseIsEqualDeep'),
    isObjectLike = require('./isObjectLike');

/**
 * The base implementation of `_.isEqual` which supports partial comparisons
 * and tracks traversed objects.
 *
 * @private
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @param {boolean} bitmask The bitmask flags.
 *  1 - Unordered comparison
 *  2 - Partial comparison
 * @param {Function} [customizer] The function to customize comparisons.
 * @param {Object} [stack] Tracks traversed `value` and `other` objects.
 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
 */
function baseIsEqual(value, other, bitmask, customizer, stack) {
  if (value === other) {
    return true;
  }
  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
    return value !== value && other !== other;
  }
  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
}

module.exports = baseIsEqual;
var Stack = require('./_Stack'),
    equalArrays = require('./_equalArrays'),
    equalByTag = require('./_equalByTag'),
    equalObjects = require('./_equalObjects'),
    getTag = require('./_getTag'),
    isArray = require('./isArray'),
    isBuffer = require('./isBuffer'),
    isTypedArray = require('./isTypedArray');

/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1;

/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
    arrayTag = '[object Array]',
    objectTag = '[object Object]';

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * A specialized version of `baseIsEqual` for arrays and objects which performs
 * deep comparisons and tracks traversed objects enabling objects with circular
 * references to be compared.
 *
 * @private
 * @param {Object} object The object to compare.
 * @param {Object} other The other object to compare.
 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
 * @param {Function} customizer The function to customize comparisons.
 * @param {Function} equalFunc The function to determine equivalents of values.
 * @param {Object} [stack] Tracks traversed `object` and `other` objects.
 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
 */
function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
  var objIsArr = isArray(object),
      othIsArr = isArray(other),
      objTag = objIsArr ? arrayTag : getTag(object),
      othTag = othIsArr ? arrayTag : getTag(other);

  objTag = objTag == argsTag ? objectTag : objTag;
  othTag = othTag == argsTag ? objectTag : othTag;

  var objIsObj = objTag == objectTag,
      othIsObj = othTag == objectTag,
      isSameTag = objTag == othTag;

  if (isSameTag && isBuffer(object)) {
    if (!isBuffer(other)) {
      return false;
    }
    objIsArr = true;
    objIsObj = false;
  }
  if (isSameTag && !objIsObj) {
    stack || (stack = new Stack);
    return (objIsArr || isTypedArray(object))
      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
  }
  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');

    if (objIsWrapped || othIsWrapped) {
      var objUnwrapped = objIsWrapped ? object.value() : object,
          othUnwrapped = othIsWrapped ? other.value() : other;

      stack || (stack = new Stack);
      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
    }
  }
  if (!isSameTag) {
    return false;
  }
  stack || (stack = new Stack);
  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
}

module.exports = baseIsEqualDeep;
var getTag = require('./_getTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var mapTag = '[object Map]';

/**
 * The base implementation of `_.isMap` without Node.js optimizations.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a map, else `false`.
 */
function baseIsMap(value) {
  return isObjectLike(value) && getTag(value) == mapTag;
}

module.exports = baseIsMap;
var Stack = require('./_Stack'),
    baseIsEqual = require('./_baseIsEqual');

/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1,
    COMPARE_UNORDERED_FLAG = 2;

/**
 * The base implementation of `_.isMatch` without support for iteratee shorthands.
 *
 * @private
 * @param {Object} object The object to inspect.
 * @param {Object} source The object of property values to match.
 * @param {Array} matchData The property names, values, and compare flags to match.
 * @param {Function} [customizer] The function to customize comparisons.
 * @returns {boolean} Returns `true` if `object` is a match, else `false`.
 */
function baseIsMatch(object, source, matchData, customizer) {
  var index = matchData.length,
      length = index,
      noCustomizer = !customizer;

  if (object == null) {
    return !length;
  }
  object = Object(object);
  while (index--) {
    var data = matchData[index];
    if ((noCustomizer && data[2])
          ? data[1] !== object[data[0]]
          : !(data[0] in object)
        ) {
      return false;
    }
  }
  while (++index < length) {
    data = matchData[index];
    var key = data[0],
        objValue = object[key],
        srcValue = data[1];

    if (noCustomizer && data[2]) {
      if (objValue === undefined && !(key in object)) {
        return false;
      }
    } else {
      var stack = new Stack;
      if (customizer) {
        var result = customizer(objValue, srcValue, key, object, source, stack);
      }
      if (!(result === undefined
            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
            : result
          )) {
        return false;
      }
    }
  }
  return true;
}

module.exports = baseIsMatch;
/**
 * The base implementation of `_.isNaN` without support for number objects.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
 */
function baseIsNaN(value) {
  return value !== value;
}

module.exports = baseIsNaN;
var isFunction = require('./isFunction'),
    isMasked = require('./_isMasked'),
    isObject = require('./isObject'),
    toSource = require('./_toSource');

/**
 * Used to match `RegExp`
 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
 */
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;

/** Used to detect host constructors (Safari). */
var reIsHostCtor = /^\[object .+?Constructor\]$/;

/** Used for built-in method references. */
var funcProto = Function.prototype,
    objectProto = Object.prototype;

/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/** Used to detect if a method is native. */
var reIsNative = RegExp('^' +
  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);

/**
 * The base implementation of `_.isNative` without bad shim checks.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a native function,
 *  else `false`.
 */
function baseIsNative(value) {
  if (!isObject(value) || isMasked(value)) {
    return false;
  }
  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
  return pattern.test(toSource(value));
}

module.exports = baseIsNative;
var baseGetTag = require('./_baseGetTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var regexpTag = '[object RegExp]';

/**
 * The base implementation of `_.isRegExp` without Node.js optimizations.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
 */
function baseIsRegExp(value) {
  return isObjectLike(value) && baseGetTag(value) == regexpTag;
}

module.exports = baseIsRegExp;
var getTag = require('./_getTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var setTag = '[object Set]';

/**
 * The base implementation of `_.isSet` without Node.js optimizations.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a set, else `false`.
 */
function baseIsSet(value) {
  return isObjectLike(value) && getTag(value) == setTag;
}

module.exports = baseIsSet;
var baseGetTag = require('./_baseGetTag'),
    isLength = require('./isLength'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
    arrayTag = '[object Array]',
    boolTag = '[object Boolean]',
    dateTag = '[object Date]',
    errorTag = '[object Error]',
    funcTag = '[object Function]',
    mapTag = '[object Map]',
    numberTag = '[object Number]',
    objectTag = '[object Object]',
    regexpTag = '[object RegExp]',
    setTag = '[object Set]',
    stringTag = '[object String]',
    weakMapTag = '[object WeakMap]';

var arrayBufferTag = '[object ArrayBuffer]',
    dataViewTag = '[object DataView]',
    float32Tag = '[object Float32Array]',
    float64Tag = '[object Float64Array]',
    int8Tag = '[object Int8Array]',
    int16Tag = '[object Int16Array]',
    int32Tag = '[object Int32Array]',
    uint8Tag = '[object Uint8Array]',
    uint8ClampedTag = '[object Uint8ClampedArray]',
    uint16Tag = '[object Uint16Array]',
    uint32Tag = '[object Uint32Array]';

/** Used to identify `toStringTag` values of typed arrays. */
var typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
typedArrayTags[uint32Tag] = true;
typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
typedArrayTags[errorTag] = typedArrayTags[funcTag] =
typedArrayTags[mapTag] = typedArrayTags[numberTag] =
typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
typedArrayTags[setTag] = typedArrayTags[stringTag] =
typedArrayTags[weakMapTag] = false;

/**
 * The base implementation of `_.isTypedArray` without Node.js optimizations.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
 */
function baseIsTypedArray(value) {
  return isObjectLike(value) &&
    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
}

module.exports = baseIsTypedArray;
var baseMatches = require('./_baseMatches'),
    baseMatchesProperty = require('./_baseMatchesProperty'),
    identity = require('./identity'),
    isArray = require('./isArray'),
    property = require('./property');

/**
 * The base implementation of `_.iteratee`.
 *
 * @private
 * @param {*} [value=_.identity] The value to convert to an iteratee.
 * @returns {Function} Returns the iteratee.
 */
function baseIteratee(value) {
  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
  if (typeof value == 'function') {
    return value;
  }
  if (value == null) {
    return identity;
  }
  if (typeof value == 'object') {
    return isArray(value)
      ? baseMatchesProperty(value[0], value[1])
      : baseMatches(value);
  }
  return property(value);
}

module.exports = baseIteratee;
var isPrototype = require('./_isPrototype'),
    nativeKeys = require('./_nativeKeys');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 */
function baseKeys(object) {
  if (!isPrototype(object)) {
    return nativeKeys(object);
  }
  var result = [];
  for (var key in Object(object)) {
    if (hasOwnProperty.call(object, key) && key != 'constructor') {
      result.push(key);
    }
  }
  return result;
}

module.exports = baseKeys;
var isObject = require('./isObject'),
    isPrototype = require('./_isPrototype'),
    nativeKeysIn = require('./_nativeKeysIn');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 */
function baseKeysIn(object) {
  if (!isObject(object)) {
    return nativeKeysIn(object);
  }
  var isProto = isPrototype(object),
      result = [];

  for (var key in object) {
    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
      result.push(key);
    }
  }
  return result;
}

module.exports = baseKeysIn;
/**
 * The function whose prototype chain sequence wrappers inherit from.
 *
 * @private
 */
function baseLodash() {
  // No operation performed.
}

module.exports = baseLodash;
/**
 * The base implementation of `_.lt` which doesn't coerce arguments.
 *
 * @private
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if `value` is less than `other`,
 *  else `false`.
 */
function baseLt(value, other) {
  return value < other;
}

module.exports = baseLt;
var baseEach = require('./_baseEach'),
    isArrayLike = require('./isArrayLike');

/**
 * The base implementation of `_.map` without support for iteratee shorthands.
 *
 * @private
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the new mapped array.
 */
function baseMap(collection, iteratee) {
  var index = -1,
      result = isArrayLike(collection) ? Array(collection.length) : [];

  baseEach(collection, function(value, key, collection) {
    result[++index] = iteratee(value, key, collection);
  });
  return result;
}

module.exports = baseMap;
var baseIsMatch = require('./_baseIsMatch'),
    getMatchData = require('./_getMatchData'),
    matchesStrictComparable = require('./_matchesStrictComparable');

/**
 * The base implementation of `_.matches` which doesn't clone `source`.
 *
 * @private
 * @param {Object} source The object of property values to match.
 * @returns {Function} Returns the new spec function.
 */
function baseMatches(source) {
  var matchData = getMatchData(source);
  if (matchData.length == 1 && matchData[0][2]) {
    return matchesStrictComparable(matchData[0][0], matchData[0][1]);
  }
  return function(object) {
    return object === source || baseIsMatch(object, source, matchData);
  };
}

module.exports = baseMatches;
var baseIsEqual = require('./_baseIsEqual'),
    get = require('./get'),
    hasIn = require('./hasIn'),
    isKey = require('./_isKey'),
    isStrictComparable = require('./_isStrictComparable'),
    matchesStrictComparable = require('./_matchesStrictComparable'),
    toKey = require('./_toKey');

/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1,
    COMPARE_UNORDERED_FLAG = 2;

/**
 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
 *
 * @private
 * @param {string} path The path of the property to get.
 * @param {*} srcValue The value to match.
 * @returns {Function} Returns the new spec function.
 */
function baseMatchesProperty(path, srcValue) {
  if (isKey(path) && isStrictComparable(srcValue)) {
    return matchesStrictComparable(toKey(path), srcValue);
  }
  return function(object) {
    var objValue = get(object, path);
    return (objValue === undefined && objValue === srcValue)
      ? hasIn(object, path)
      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
  };
}

module.exports = baseMatchesProperty;
var baseSum = require('./_baseSum');

/** Used as references for various `Number` constants. */
var NAN = 0 / 0;

/**
 * The base implementation of `_.mean` and `_.meanBy` without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} array The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {number} Returns the mean.
 */
function baseMean(array, iteratee) {
  var length = array == null ? 0 : array.length;
  return length ? (baseSum(array, iteratee) / length) : NAN;
}

module.exports = baseMean;
var Stack = require('./_Stack'),
    assignMergeValue = require('./_assignMergeValue'),
    baseFor = require('./_baseFor'),
    baseMergeDeep = require('./_baseMergeDeep'),
    isObject = require('./isObject'),
    keysIn = require('./keysIn'),
    safeGet = require('./_safeGet');

/**
 * The base implementation of `_.merge` without support for multiple sources.
 *
 * @private
 * @param {Object} object The destination object.
 * @param {Object} source The source object.
 * @param {number} srcIndex The index of `source`.
 * @param {Function} [customizer] The function to customize merged values.
 * @param {Object} [stack] Tracks traversed source values and their merged
 *  counterparts.
 */
function baseMerge(object, source, srcIndex, customizer, stack) {
  if (object === source) {
    return;
  }
  baseFor(source, function(srcValue, key) {
    stack || (stack = new Stack);
    if (isObject(srcValue)) {
      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
    }
    else {
      var newValue = customizer
        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
        : undefined;

      if (newValue === undefined) {
        newValue = srcValue;
      }
      assignMergeValue(object, key, newValue);
    }
  }, keysIn);
}

module.exports = baseMerge;
var assignMergeValue = require('./_assignMergeValue'),
    cloneBuffer = require('./_cloneBuffer'),
    cloneTypedArray = require('./_cloneTypedArray'),
    copyArray = require('./_copyArray'),
    initCloneObject = require('./_initCloneObject'),
    isArguments = require('./isArguments'),
    isArray = require('./isArray'),
    isArrayLikeObject = require('./isArrayLikeObject'),
    isBuffer = require('./isBuffer'),
    isFunction = require('./isFunction'),
    isObject = require('./isObject'),
    isPlainObject = require('./isPlainObject'),
    isTypedArray = require('./isTypedArray'),
    safeGet = require('./_safeGet'),
    toPlainObject = require('./toPlainObject');

/**
 * A specialized version of `baseMerge` for arrays and objects which performs
 * deep merges and tracks traversed objects enabling objects with circular
 * references to be merged.
 *
 * @private
 * @param {Object} object The destination object.
 * @param {Object} source The source object.
 * @param {string} key The key of the value to merge.
 * @param {number} srcIndex The index of `source`.
 * @param {Function} mergeFunc The function to merge values.
 * @param {Function} [customizer] The function to customize assigned values.
 * @param {Object} [stack] Tracks traversed source values and their merged
 *  counterparts.
 */
function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
  var objValue = safeGet(object, key),
      srcValue = safeGet(source, key),
      stacked = stack.get(srcValue);

  if (stacked) {
    assignMergeValue(object, key, stacked);
    return;
  }
  var newValue = customizer
    ? customizer(objValue, srcValue, (key + ''), object, source, stack)
    : undefined;

  var isCommon = newValue === undefined;

  if (isCommon) {
    var isArr = isArray(srcValue),
        isBuff = !isArr && isBuffer(srcValue),
        isTyped = !isArr && !isBuff && isTypedArray(srcValue);

    newValue = srcValue;
    if (isArr || isBuff || isTyped) {
      if (isArray(objValue)) {
        newValue = objValue;
      }
      else if (isArrayLikeObject(objValue)) {
        newValue = copyArray(objValue);
      }
      else if (isBuff) {
        isCommon = false;
        newValue = cloneBuffer(srcValue, true);
      }
      else if (isTyped) {
        isCommon = false;
        newValue = cloneTypedArray(srcValue, true);
      }
      else {
        newValue = [];
      }
    }
    else if (isPlainObject(srcValue) || isArguments(srcValue)) {
      newValue = objValue;
      if (isArguments(objValue)) {
        newValue = toPlainObject(objValue);
      }
      else if (!isObject(objValue) || isFunction(objValue)) {
        newValue = initCloneObject(srcValue);
      }
    }
    else {
      isCommon = false;
    }
  }
  if (isCommon) {
    // Recursively merge objects and arrays (susceptible to call stack limits).
    stack.set(srcValue, newValue);
    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
    stack['delete'](srcValue);
  }
  assignMergeValue(object, key, newValue);
}

module.exports = baseMergeDeep;
var isIndex = require('./_isIndex');

/**
 * The base implementation of `_.nth` which doesn't coerce arguments.
 *
 * @private
 * @param {Array} array The array to query.
 * @param {number} n The index of the element to return.
 * @returns {*} Returns the nth element of `array`.
 */
function baseNth(array, n) {
  var length = array.length;
  if (!length) {
    return;
  }
  n += n < 0 ? length : 0;
  return isIndex(n, length) ? array[n] : undefined;
}

module.exports = baseNth;
var arrayMap = require('./_arrayMap'),
    baseGet = require('./_baseGet'),
    baseIteratee = require('./_baseIteratee'),
    baseMap = require('./_baseMap'),
    baseSortBy = require('./_baseSortBy'),
    baseUnary = require('./_baseUnary'),
    compareMultiple = require('./_compareMultiple'),
    identity = require('./identity'),
    isArray = require('./isArray');

/**
 * The base implementation of `_.orderBy` without param guards.
 *
 * @private
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
 * @param {string[]} orders The sort orders of `iteratees`.
 * @returns {Array} Returns the new sorted array.
 */
function baseOrderBy(collection, iteratees, orders) {
  if (iteratees.length) {
    iteratees = arrayMap(iteratees, function(iteratee) {
      if (isArray(iteratee)) {
        return function(value) {
          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
        }
      }
      return iteratee;
    });
  } else {
    iteratees = [identity];
  }

  var index = -1;
  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));

  var result = baseMap(collection, function(value, key, collection) {
    var criteria = arrayMap(iteratees, function(iteratee) {
      return iteratee(value);
    });
    return { 'criteria': criteria, 'index': ++index, 'value': value };
  });

  return baseSortBy(result, function(object, other) {
    return compareMultiple(object, other, orders);
  });
}

module.exports = baseOrderBy;
var basePickBy = require('./_basePickBy'),
    hasIn = require('./hasIn');

/**
 * The base implementation of `_.pick` without support for individual
 * property identifiers.
 *
 * @private
 * @param {Object} object The source object.
 * @param {string[]} paths The property paths to pick.
 * @returns {Object} Returns the new object.
 */
function basePick(object, paths) {
  return basePickBy(object, paths, function(value, path) {
    return hasIn(object, path);
  });
}

module.exports = basePick;
var baseGet = require('./_baseGet'),
    baseSet = require('./_baseSet'),
    castPath = require('./_castPath');

/**
 * The base implementation of  `_.pickBy` without support for iteratee shorthands.
 *
 * @private
 * @param {Object} object The source object.
 * @param {string[]} paths The property paths to pick.
 * @param {Function} predicate The function invoked per property.
 * @returns {Object} Returns the new object.
 */
function basePickBy(object, paths, predicate) {
  var index = -1,
      length = paths.length,
      result = {};

  while (++index < length) {
    var path = paths[index],
        value = baseGet(object, path);

    if (predicate(value, path)) {
      baseSet(result, castPath(path, object), value);
    }
  }
  return result;
}

module.exports = basePickBy;
/**
 * The base implementation of `_.property` without support for deep paths.
 *
 * @private
 * @param {string} key The key of the property to get.
 * @returns {Function} Returns the new accessor function.
 */
function baseProperty(key) {
  return function(object) {
    return object == null ? undefined : object[key];
  };
}

module.exports = baseProperty;
var baseGet = require('./_baseGet');

/**
 * A specialized version of `baseProperty` which supports deep paths.
 *
 * @private
 * @param {Array|string} path The path of the property to get.
 * @returns {Function} Returns the new accessor function.
 */
function basePropertyDeep(path) {
  return function(object) {
    return baseGet(object, path);
  };
}

module.exports = basePropertyDeep;
/**
 * The base implementation of `_.propertyOf` without support for deep paths.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Function} Returns the new accessor function.
 */
function basePropertyOf(object) {
  return function(key) {
    return object == null ? undefined : object[key];
  };
}

module.exports = basePropertyOf;
var arrayMap = require('./_arrayMap'),
    baseIndexOf = require('./_baseIndexOf'),
    baseIndexOfWith = require('./_baseIndexOfWith'),
    baseUnary = require('./_baseUnary'),
    copyArray = require('./_copyArray');

/** Used for built-in method references. */
var arrayProto = Array.prototype;

/** Built-in value references. */
var splice = arrayProto.splice;

/**
 * The base implementation of `_.pullAllBy` without support for iteratee
 * shorthands.
 *
 * @private
 * @param {Array} array The array to modify.
 * @param {Array} values The values to remove.
 * @param {Function} [iteratee] The iteratee invoked per element.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns `array`.
 */
function basePullAll(array, values, iteratee, comparator) {
  var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
      index = -1,
      length = values.length,
      seen = array;

  if (array === values) {
    values = copyArray(values);
  }
  if (iteratee) {
    seen = arrayMap(array, baseUnary(iteratee));
  }
  while (++index < length) {
    var fromIndex = 0,
        value = values[index],
        computed = iteratee ? iteratee(value) : value;

    while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
      if (seen !== array) {
        splice.call(seen, fromIndex, 1);
      }
      splice.call(array, fromIndex, 1);
    }
  }
  return array;
}

module.exports = basePullAll;
var baseUnset = require('./_baseUnset'),
    isIndex = require('./_isIndex');

/** Used for built-in method references. */
var arrayProto = Array.prototype;

/** Built-in value references. */
var splice = arrayProto.splice;

/**
 * The base implementation of `_.pullAt` without support for individual
 * indexes or capturing the removed elements.
 *
 * @private
 * @param {Array} array The array to modify.
 * @param {number[]} indexes The indexes of elements to remove.
 * @returns {Array} Returns `array`.
 */
function basePullAt(array, indexes) {
  var length = array ? indexes.length : 0,
      lastIndex = length - 1;

  while (length--) {
    var index = indexes[length];
    if (length == lastIndex || index !== previous) {
      var previous = index;
      if (isIndex(index)) {
        splice.call(array, index, 1);
      } else {
        baseUnset(array, index);
      }
    }
  }
  return array;
}

module.exports = basePullAt;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeFloor = Math.floor,
    nativeRandom = Math.random;

/**
 * The base implementation of `_.random` without support for returning
 * floating-point numbers.
 *
 * @private
 * @param {number} lower The lower bound.
 * @param {number} upper The upper bound.
 * @returns {number} Returns the random number.
 */
function baseRandom(lower, upper) {
  return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
}

module.exports = baseRandom;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeCeil = Math.ceil,
    nativeMax = Math.max;

/**
 * The base implementation of `_.range` and `_.rangeRight` which doesn't
 * coerce arguments.
 *
 * @private
 * @param {number} start The start of the range.
 * @param {number} end The end of the range.
 * @param {number} step The value to increment or decrement by.
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Array} Returns the range of numbers.
 */
function baseRange(start, end, step, fromRight) {
  var index = -1,
      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
      result = Array(length);

  while (length--) {
    result[fromRight ? length : ++index] = start;
    start += step;
  }
  return result;
}

module.exports = baseRange;
/**
 * The base implementation of `_.reduce` and `_.reduceRight`, without support
 * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
 *
 * @private
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @param {*} accumulator The initial value.
 * @param {boolean} initAccum Specify using the first or last element of
 *  `collection` as the initial value.
 * @param {Function} eachFunc The function to iterate over `collection`.
 * @returns {*} Returns the accumulated value.
 */
function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
  eachFunc(collection, function(value, index, collection) {
    accumulator = initAccum
      ? (initAccum = false, value)
      : iteratee(accumulator, value, index, collection);
  });
  return accumulator;
}

module.exports = baseReduce;
/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeFloor = Math.floor;

/**
 * The base implementation of `_.repeat` which doesn't coerce arguments.
 *
 * @private
 * @param {string} string The string to repeat.
 * @param {number} n The number of times to repeat the string.
 * @returns {string} Returns the repeated string.
 */
function baseRepeat(string, n) {
  var result = '';
  if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
    return result;
  }
  // Leverage the exponentiation by squaring algorithm for a faster repeat.
  // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
  do {
    if (n % 2) {
      result += string;
    }
    n = nativeFloor(n / 2);
    if (n) {
      string += string;
    }
  } while (n);

  return result;
}

module.exports = baseRepeat;
var identity = require('./identity'),
    overRest = require('./_overRest'),
    setToString = require('./_setToString');

/**
 * The base implementation of `_.rest` which doesn't validate or coerce arguments.
 *
 * @private
 * @param {Function} func The function to apply a rest parameter to.
 * @param {number} [start=func.length-1] The start position of the rest parameter.
 * @returns {Function} Returns the new function.
 */
function baseRest(func, start) {
  return setToString(overRest(func, start, identity), func + '');
}

module.exports = baseRest;
var arraySample = require('./_arraySample'),
    values = require('./values');

/**
 * The base implementation of `_.sample`.
 *
 * @private
 * @param {Array|Object} collection The collection to sample.
 * @returns {*} Returns the random element.
 */
function baseSample(collection) {
  return arraySample(values(collection));
}

module.exports = baseSample;
var baseClamp = require('./_baseClamp'),
    shuffleSelf = require('./_shuffleSelf'),
    values = require('./values');

/**
 * The base implementation of `_.sampleSize` without param guards.
 *
 * @private
 * @param {Array|Object} collection The collection to sample.
 * @param {number} n The number of elements to sample.
 * @returns {Array} Returns the random elements.
 */
function baseSampleSize(collection, n) {
  var array = values(collection);
  return shuffleSelf(array, baseClamp(n, 0, array.length));
}

module.exports = baseSampleSize;
var assignValue = require('./_assignValue'),
    castPath = require('./_castPath'),
    isIndex = require('./_isIndex'),
    isObject = require('./isObject'),
    toKey = require('./_toKey');

/**
 * The base implementation of `_.set`.
 *
 * @private
 * @param {Object} object The object to modify.
 * @param {Array|string} path The path of the property to set.
 * @param {*} value The value to set.
 * @param {Function} [customizer] The function to customize path creation.
 * @returns {Object} Returns `object`.
 */
function baseSet(object, path, value, customizer) {
  if (!isObject(object)) {
    return object;
  }
  path = castPath(path, object);

  var index = -1,
      length = path.length,
      lastIndex = length - 1,
      nested = object;

  while (nested != null && ++index < length) {
    var key = toKey(path[index]),
        newValue = value;

    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
      return object;
    }

    if (index != lastIndex) {
      var objValue = nested[key];
      newValue = customizer ? customizer(objValue, key, nested) : undefined;
      if (newValue === undefined) {
        newValue = isObject(objValue)
          ? objValue
          : (isIndex(path[index + 1]) ? [] : {});
      }
    }
    assignValue(nested, key, newValue);
    nested = nested[key];
  }
  return object;
}

module.exports = baseSet;
var identity = require('./identity'),
    metaMap = require('./_metaMap');

/**
 * The base implementation of `setData` without support for hot loop shorting.
 *
 * @private
 * @param {Function} func The function to associate metadata with.
 * @param {*} data The metadata.
 * @returns {Function} Returns `func`.
 */
var baseSetData = !metaMap ? identity : function(func, data) {
  metaMap.set(func, data);
  return func;
};

module.exports = baseSetData;
var constant = require('./constant'),
    defineProperty = require('./_defineProperty'),
    identity = require('./identity');

/**
 * The base implementation of `setToString` without support for hot loop shorting.
 *
 * @private
 * @param {Function} func The function to modify.
 * @param {Function} string The `toString` result.
 * @returns {Function} Returns `func`.
 */
var baseSetToString = !defineProperty ? identity : function(func, string) {
  return defineProperty(func, 'toString', {
    'configurable': true,
    'enumerable': false,
    'value': constant(string),
    'writable': true
  });
};

module.exports = baseSetToString;
var shuffleSelf = require('./_shuffleSelf'),
    values = require('./values');

/**
 * The base implementation of `_.shuffle`.
 *
 * @private
 * @param {Array|Object} collection The collection to shuffle.
 * @returns {Array} Returns the new shuffled array.
 */
function baseShuffle(collection) {
  return shuffleSelf(values(collection));
}

module.exports = baseShuffle;
/**
 * The base implementation of `_.slice` without an iteratee call guard.
 *
 * @private
 * @param {Array} array The array to slice.
 * @param {number} [start=0] The start position.
 * @param {number} [end=array.length] The end position.
 * @returns {Array} Returns the slice of `array`.
 */
function baseSlice(array, start, end) {
  var index = -1,
      length = array.length;

  if (start < 0) {
    start = -start > length ? 0 : (length + start);
  }
  end = end > length ? length : end;
  if (end < 0) {
    end += length;
  }
  length = start > end ? 0 : ((end - start) >>> 0);
  start >>>= 0;

  var result = Array(length);
  while (++index < length) {
    result[index] = array[index + start];
  }
  return result;
}

module.exports = baseSlice;
var baseEach = require('./_baseEach');

/**
 * The base implementation of `_.some` without support for iteratee shorthands.
 *
 * @private
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} predicate The function invoked per iteration.
 * @returns {boolean} Returns `true` if any element passes the predicate check,
 *  else `false`.
 */
function baseSome(collection, predicate) {
  var result;

  baseEach(collection, function(value, index, collection) {
    result = predicate(value, index, collection);
    return !result;
  });
  return !!result;
}

module.exports = baseSome;
/**
 * The base implementation of `_.sortBy` which uses `comparer` to define the
 * sort order of `array` and replaces criteria objects with their corresponding
 * values.
 *
 * @private
 * @param {Array} array The array to sort.
 * @param {Function} comparer The function to define sort order.
 * @returns {Array} Returns `array`.
 */
function baseSortBy(array, comparer) {
  var length = array.length;

  array.sort(comparer);
  while (length--) {
    array[length] = array[length].value;
  }
  return array;
}

module.exports = baseSortBy;
var baseSortedIndexBy = require('./_baseSortedIndexBy'),
    identity = require('./identity'),
    isSymbol = require('./isSymbol');

/** Used as references for the maximum length and index of an array. */
var MAX_ARRAY_LENGTH = 4294967295,
    HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;

/**
 * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
 * performs a binary search of `array` to determine the index at which `value`
 * should be inserted into `array` in order to maintain its sort order.
 *
 * @private
 * @param {Array} array The sorted array to inspect.
 * @param {*} value The value to evaluate.
 * @param {boolean} [retHighest] Specify returning the highest qualified index.
 * @returns {number} Returns the index at which `value` should be inserted
 *  into `array`.
 */
function baseSortedIndex(array, value, retHighest) {
  var low = 0,
      high = array == null ? low : array.length;

  if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
    while (low < high) {
      var mid = (low + high) >>> 1,
          computed = array[mid];

      if (computed !== null && !isSymbol(computed) &&
          (retHighest ? (computed <= value) : (computed < value))) {
        low = mid + 1;
      } else {
        high = mid;
      }
    }
    return high;
  }
  return baseSortedIndexBy(array, value, identity, retHighest);
}

module.exports = baseSortedIndex;
var isSymbol = require('./isSymbol');

/** Used as references for the maximum length and index of an array. */
var MAX_ARRAY_LENGTH = 4294967295,
    MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeFloor = Math.floor,
    nativeMin = Math.min;

/**
 * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
 * which invokes `iteratee` for `value` and each element of `array` to compute
 * their sort ranking. The iteratee is invoked with one argument; (value).
 *
 * @private
 * @param {Array} array The sorted array to inspect.
 * @param {*} value The value to evaluate.
 * @param {Function} iteratee The iteratee invoked per element.
 * @param {boolean} [retHighest] Specify returning the highest qualified index.
 * @returns {number} Returns the index at which `value` should be inserted
 *  into `array`.
 */
function baseSortedIndexBy(array, value, iteratee, retHighest) {
  var low = 0,
      high = array == null ? 0 : array.length;
  if (high === 0) {
    return 0;
  }

  value = iteratee(value);
  var valIsNaN = value !== value,
      valIsNull = value === null,
      valIsSymbol = isSymbol(value),
      valIsUndefined = value === undefined;

  while (low < high) {
    var mid = nativeFloor((low + high) / 2),
        computed = iteratee(array[mid]),
        othIsDefined = computed !== undefined,
        othIsNull = computed === null,
        othIsReflexive = computed === computed,
        othIsSymbol = isSymbol(computed);

    if (valIsNaN) {
      var setLow = retHighest || othIsReflexive;
    } else if (valIsUndefined) {
      setLow = othIsReflexive && (retHighest || othIsDefined);
    } else if (valIsNull) {
      setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
    } else if (valIsSymbol) {
      setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
    } else if (othIsNull || othIsSymbol) {
      setLow = false;
    } else {
      setLow = retHighest ? (computed <= value) : (computed < value);
    }
    if (setLow) {
      low = mid + 1;
    } else {
      high = mid;
    }
  }
  return nativeMin(high, MAX_ARRAY_INDEX);
}

module.exports = baseSortedIndexBy;
var eq = require('./eq');

/**
 * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
 * support for iteratee shorthands.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {Function} [iteratee] The iteratee invoked per element.
 * @returns {Array} Returns the new duplicate free array.
 */
function baseSortedUniq(array, iteratee) {
  var index = -1,
      length = array.length,
      resIndex = 0,
      result = [];

  while (++index < length) {
    var value = array[index],
        computed = iteratee ? iteratee(value) : value;

    if (!index || !eq(computed, seen)) {
      var seen = computed;
      result[resIndex++] = value === 0 ? 0 : value;
    }
  }
  return result;
}

module.exports = baseSortedUniq;
/**
 * The base implementation of `_.sum` and `_.sumBy` without support for
 * iteratee shorthands.
 *
 * @private
 * @param {Array} array The array to iterate over.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {number} Returns the sum.
 */
function baseSum(array, iteratee) {
  var result,
      index = -1,
      length = array.length;

  while (++index < length) {
    var current = iteratee(array[index]);
    if (current !== undefined) {
      result = result === undefined ? current : (result + current);
    }
  }
  return result;
}

module.exports = baseSum;
/**
 * The base implementation of `_.times` without support for iteratee shorthands
 * or max array length checks.
 *
 * @private
 * @param {number} n The number of times to invoke `iteratee`.
 * @param {Function} iteratee The function invoked per iteration.
 * @returns {Array} Returns the array of results.
 */
function baseTimes(n, iteratee) {
  var index = -1,
      result = Array(n);

  while (++index < n) {
    result[index] = iteratee(index);
  }
  return result;
}

module.exports = baseTimes;
var isSymbol = require('./isSymbol');

/** Used as references for various `Number` constants. */
var NAN = 0 / 0;

/**
 * The base implementation of `_.toNumber` which doesn't ensure correct
 * conversions of binary, hexadecimal, or octal string values.
 *
 * @private
 * @param {*} value The value to process.
 * @returns {number} Returns the number.
 */
function baseToNumber(value) {
  if (typeof value == 'number') {
    return value;
  }
  if (isSymbol(value)) {
    return NAN;
  }
  return +value;
}

module.exports = baseToNumber;
var arrayMap = require('./_arrayMap');

/**
 * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
 * of key-value pairs for `object` corresponding to the property names of `props`.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {Array} props The property names to get values for.
 * @returns {Object} Returns the key-value pairs.
 */
function baseToPairs(object, props) {
  return arrayMap(props, function(key) {
    return [key, object[key]];
  });
}

module.exports = baseToPairs;
var Symbol = require('./_Symbol'),
    arrayMap = require('./_arrayMap'),
    isArray = require('./isArray'),
    isSymbol = require('./isSymbol');

/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;

/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol.prototype : undefined,
    symbolToString = symbolProto ? symbolProto.toString : undefined;

/**
 * The base implementation of `_.toString` which doesn't convert nullish
 * values to empty strings.
 *
 * @private
 * @param {*} value The value to process.
 * @returns {string} Returns the string.
 */
function baseToString(value) {
  // Exit early for strings to avoid a performance hit in some environments.
  if (typeof value == 'string') {
    return value;
  }
  if (isArray(value)) {
    // Recursively convert values (susceptible to call stack limits).
    return arrayMap(value, baseToString) + '';
  }
  if (isSymbol(value)) {
    return symbolToString ? symbolToString.call(value) : '';
  }
  var result = (value + '');
  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}

module.exports = baseToString;
var trimmedEndIndex = require('./_trimmedEndIndex');

/** Used to match leading whitespace. */
var reTrimStart = /^\s+/;

/**
 * The base implementation of `_.trim`.
 *
 * @private
 * @param {string} string The string to trim.
 * @returns {string} Returns the trimmed string.
 */
function baseTrim(string) {
  return string
    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
    : string;
}

module.exports = baseTrim;
/**
 * The base implementation of `_.unary` without support for storing metadata.
 *
 * @private
 * @param {Function} func The function to cap arguments for.
 * @returns {Function} Returns the new capped function.
 */
function baseUnary(func) {
  return function(value) {
    return func(value);
  };
}

module.exports = baseUnary;
var SetCache = require('./_SetCache'),
    arrayIncludes = require('./_arrayIncludes'),
    arrayIncludesWith = require('./_arrayIncludesWith'),
    cacheHas = require('./_cacheHas'),
    createSet = require('./_createSet'),
    setToArray = require('./_setToArray');

/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;

/**
 * The base implementation of `_.uniqBy` without support for iteratee shorthands.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {Function} [iteratee] The iteratee invoked per element.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns the new duplicate free array.
 */
function baseUniq(array, iteratee, comparator) {
  var index = -1,
      includes = arrayIncludes,
      length = array.length,
      isCommon = true,
      result = [],
      seen = result;

  if (comparator) {
    isCommon = false;
    includes = arrayIncludesWith;
  }
  else if (length >= LARGE_ARRAY_SIZE) {
    var set = iteratee ? null : createSet(array);
    if (set) {
      return setToArray(set);
    }
    isCommon = false;
    includes = cacheHas;
    seen = new SetCache;
  }
  else {
    seen = iteratee ? [] : result;
  }
  outer:
  while (++index < length) {
    var value = array[index],
        computed = iteratee ? iteratee(value) : value;

    value = (comparator || value !== 0) ? value : 0;
    if (isCommon && computed === computed) {
      var seenIndex = seen.length;
      while (seenIndex--) {
        if (seen[seenIndex] === computed) {
          continue outer;
        }
      }
      if (iteratee) {
        seen.push(computed);
      }
      result.push(value);
    }
    else if (!includes(seen, computed, comparator)) {
      if (seen !== result) {
        seen.push(computed);
      }
      result.push(value);
    }
  }
  return result;
}

module.exports = baseUniq;
var castPath = require('./_castPath'),
    last = require('./last'),
    parent = require('./_parent'),
    toKey = require('./_toKey');

/**
 * The base implementation of `_.unset`.
 *
 * @private
 * @param {Object} object The object to modify.
 * @param {Array|string} path The property path to unset.
 * @returns {boolean} Returns `true` if the property is deleted, else `false`.
 */
function baseUnset(object, path) {
  path = castPath(path, object);
  object = parent(object, path);
  return object == null || delete object[toKey(last(path))];
}

module.exports = baseUnset;
var baseGet = require('./_baseGet'),
    baseSet = require('./_baseSet');

/**
 * The base implementation of `_.update`.
 *
 * @private
 * @param {Object} object The object to modify.
 * @param {Array|string} path The path of the property to update.
 * @param {Function} updater The function to produce the updated value.
 * @param {Function} [customizer] The function to customize path creation.
 * @returns {Object} Returns `object`.
 */
function baseUpdate(object, path, updater, customizer) {
  return baseSet(object, path, updater(baseGet(object, path)), customizer);
}

module.exports = baseUpdate;
var arrayMap = require('./_arrayMap');

/**
 * The base implementation of `_.values` and `_.valuesIn` which creates an
 * array of `object` property values corresponding to the property names
 * of `props`.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {Array} props The property names to get values for.
 * @returns {Object} Returns the array of property values.
 */
function baseValues(object, props) {
  return arrayMap(props, function(key) {
    return object[key];
  });
}

module.exports = baseValues;
var baseSlice = require('./_baseSlice');

/**
 * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
 * without support for iteratee shorthands.
 *
 * @private
 * @param {Array} array The array to query.
 * @param {Function} predicate The function invoked per iteration.
 * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Array} Returns the slice of `array`.
 */
function baseWhile(array, predicate, isDrop, fromRight) {
  var length = array.length,
      index = fromRight ? length : -1;

  while ((fromRight ? index-- : ++index < length) &&
    predicate(array[index], index, array)) {}

  return isDrop
    ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
    : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
}

module.exports = baseWhile;
var LazyWrapper = require('./_LazyWrapper'),
    arrayPush = require('./_arrayPush'),
    arrayReduce = require('./_arrayReduce');

/**
 * The base implementation of `wrapperValue` which returns the result of
 * performing a sequence of actions on the unwrapped `value`, where each
 * successive action is supplied the return value of the previous.
 *
 * @private
 * @param {*} value The unwrapped value.
 * @param {Array} actions Actions to perform to resolve the unwrapped value.
 * @returns {*} Returns the resolved value.
 */
function baseWrapperValue(value, actions) {
  var result = value;
  if (result instanceof LazyWrapper) {
    result = result.value();
  }
  return arrayReduce(actions, function(result, action) {
    return action.func.apply(action.thisArg, arrayPush([result], action.args));
  }, result);
}

module.exports = baseWrapperValue;
var baseDifference = require('./_baseDifference'),
    baseFlatten = require('./_baseFlatten'),
    baseUniq = require('./_baseUniq');

/**
 * The base implementation of methods like `_.xor`, without support for
 * iteratee shorthands, that accepts an array of arrays to inspect.
 *
 * @private
 * @param {Array} arrays The arrays to inspect.
 * @param {Function} [iteratee] The iteratee invoked per element.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns the new array of values.
 */
function baseXor(arrays, iteratee, comparator) {
  var length = arrays.length;
  if (length < 2) {
    return length ? baseUniq(arrays[0]) : [];
  }
  var index = -1,
      result = Array(length);

  while (++index < length) {
    var array = arrays[index],
        othIndex = -1;

    while (++othIndex < length) {
      if (othIndex != index) {
        result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
      }
    }
  }
  return baseUniq(baseFlatten(result, 1), iteratee, comparator);
}

module.exports = baseXor;
/**
 * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
 *
 * @private
 * @param {Array} props The property identifiers.
 * @param {Array} values The property values.
 * @param {Function} assignFunc The function to assign values.
 * @returns {Object} Returns the new object.
 */
function baseZipObject(props, values, assignFunc) {
  var index = -1,
      length = props.length,
      valsLength = values.length,
      result = {};

  while (++index < length) {
    var value = index < valsLength ? values[index] : undefined;
    assignFunc(result, props[index], value);
  }
  return result;
}

module.exports = baseZipObject;
/**
 * Checks if a `cache` value for `key` exists.
 *
 * @private
 * @param {Object} cache The cache to query.
 * @param {string} key The key of the entry to check.
 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
 */
function cacheHas(cache, key) {
  return cache.has(key);
}

module.exports = cacheHas;
var isArrayLikeObject = require('./isArrayLikeObject');

/**
 * Casts `value` to an empty array if it's not an array like object.
 *
 * @private
 * @param {*} value The value to inspect.
 * @returns {Array|Object} Returns the cast array-like object.
 */
function castArrayLikeObject(value) {
  return isArrayLikeObject(value) ? value : [];
}

module.exports = castArrayLikeObject;
var identity = require('./identity');

/**
 * Casts `value` to `identity` if it's not a function.
 *
 * @private
 * @param {*} value The value to inspect.
 * @returns {Function} Returns cast function.
 */
function castFunction(value) {
  return typeof value == 'function' ? value : identity;
}

module.exports = castFunction;
var isArray = require('./isArray'),
    isKey = require('./_isKey'),
    stringToPath = require('./_stringToPath'),
    toString = require('./toString');

/**
 * Casts `value` to a path array if it's not one.
 *
 * @private
 * @param {*} value The value to inspect.
 * @param {Object} [object] The object to query keys on.
 * @returns {Array} Returns the cast property path array.
 */
function castPath(value, object) {
  if (isArray(value)) {
    return value;
  }
  return isKey(value, object) ? [value] : stringToPath(toString(value));
}

module.exports = castPath;
var baseRest = require('./_baseRest');

/**
 * A `baseRest` alias which can be replaced with `identity` by module
 * replacement plugins.
 *
 * @private
 * @type {Function}
 * @param {Function} func The function to apply a rest parameter to.
 * @returns {Function} Returns the new function.
 */
var castRest = baseRest;

module.exports = castRest;
var baseSlice = require('./_baseSlice');

/**
 * Casts `array` to a slice if it's needed.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {number} start The start position.
 * @param {number} [end=array.length] The end position.
 * @returns {Array} Returns the cast slice.
 */
function castSlice(array, start, end) {
  var length = array.length;
  end = end === undefined ? length : end;
  return (!start && end >= length) ? array : baseSlice(array, start, end);
}

module.exports = castSlice;
var baseIndexOf = require('./_baseIndexOf');

/**
 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
 * that is not found in the character symbols.
 *
 * @private
 * @param {Array} strSymbols The string symbols to inspect.
 * @param {Array} chrSymbols The character symbols to find.
 * @returns {number} Returns the index of the last unmatched string symbol.
 */
function charsEndIndex(strSymbols, chrSymbols) {
  var index = strSymbols.length;

  while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
  return index;
}

module.exports = charsEndIndex;
var baseIndexOf = require('./_baseIndexOf');

/**
 * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
 * that is not found in the character symbols.
 *
 * @private
 * @param {Array} strSymbols The string symbols to inspect.
 * @param {Array} chrSymbols The character symbols to find.
 * @returns {number} Returns the index of the first unmatched string symbol.
 */
function charsStartIndex(strSymbols, chrSymbols) {
  var index = -1,
      length = strSymbols.length;

  while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
  return index;
}

module.exports = charsStartIndex;
var Uint8Array = require('./_Uint8Array');

/**
 * Creates a clone of `arrayBuffer`.
 *
 * @private
 * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
 * @returns {ArrayBuffer} Returns the cloned array buffer.
 */
function cloneArrayBuffer(arrayBuffer) {
  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
  new Uint8Array(result).set(new Uint8Array(arrayBuffer));
  return result;
}

module.exports = cloneArrayBuffer;
var root = require('./_root');

/** Detect free variable `exports`. */
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

/** Detect free variable `module`. */
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;

/** Built-in value references. */
var Buffer = moduleExports ? root.Buffer : undefined,
    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;

/**
 * Creates a clone of  `buffer`.
 *
 * @private
 * @param {Buffer} buffer The buffer to clone.
 * @param {boolean} [isDeep] Specify a deep clone.
 * @returns {Buffer} Returns the cloned buffer.
 */
function cloneBuffer(buffer, isDeep) {
  if (isDeep) {
    return buffer.slice();
  }
  var length = buffer.length,
      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);

  buffer.copy(result);
  return result;
}

module.exports = cloneBuffer;
var cloneArrayBuffer = require('./_cloneArrayBuffer');

/**
 * Creates a clone of `dataView`.
 *
 * @private
 * @param {Object} dataView The data view to clone.
 * @param {boolean} [isDeep] Specify a deep clone.
 * @returns {Object} Returns the cloned data view.
 */
function cloneDataView(dataView, isDeep) {
  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
}

module.exports = cloneDataView;
/** Used to match `RegExp` flags from their coerced string values. */
var reFlags = /\w*$/;

/**
 * Creates a clone of `regexp`.
 *
 * @private
 * @param {Object} regexp The regexp to clone.
 * @returns {Object} Returns the cloned regexp.
 */
function cloneRegExp(regexp) {
  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
  result.lastIndex = regexp.lastIndex;
  return result;
}

module.exports = cloneRegExp;
var Symbol = require('./_Symbol');

/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol.prototype : undefined,
    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;

/**
 * Creates a clone of the `symbol` object.
 *
 * @private
 * @param {Object} symbol The symbol object to clone.
 * @returns {Object} Returns the cloned symbol object.
 */
function cloneSymbol(symbol) {
  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
}

module.exports = cloneSymbol;
var cloneArrayBuffer = require('./_cloneArrayBuffer');

/**
 * Creates a clone of `typedArray`.
 *
 * @private
 * @param {Object} typedArray The typed array to clone.
 * @param {boolean} [isDeep] Specify a deep clone.
 * @returns {Object} Returns the cloned typed array.
 */
function cloneTypedArray(typedArray, isDeep) {
  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
}

module.exports = cloneTypedArray;
var isSymbol = require('./isSymbol');

/**
 * Compares values to sort them in ascending order.
 *
 * @private
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {number} Returns the sort order indicator for `value`.
 */
function compareAscending(value, other) {
  if (value !== other) {
    var valIsDefined = value !== undefined,
        valIsNull = value === null,
        valIsReflexive = value === value,
        valIsSymbol = isSymbol(value);

    var othIsDefined = other !== undefined,
        othIsNull = other === null,
        othIsReflexive = other === other,
        othIsSymbol = isSymbol(other);

    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
        (valIsNull && othIsDefined && othIsReflexive) ||
        (!valIsDefined && othIsReflexive) ||
        !valIsReflexive) {
      return 1;
    }
    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
        (othIsNull && valIsDefined && valIsReflexive) ||
        (!othIsDefined && valIsReflexive) ||
        !othIsReflexive) {
      return -1;
    }
  }
  return 0;
}

module.exports = compareAscending;
var compareAscending = require('./_compareAscending');

/**
 * Used by `_.orderBy` to compare multiple properties of a value to another
 * and stable sort them.
 *
 * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
 * specify an order of "desc" for descending or "asc" for ascending sort order
 * of corresponding values.
 *
 * @private
 * @param {Object} object The object to compare.
 * @param {Object} other The other object to compare.
 * @param {boolean[]|string[]} orders The order to sort by for each property.
 * @returns {number} Returns the sort order indicator for `object`.
 */
function compareMultiple(object, other, orders) {
  var index = -1,
      objCriteria = object.criteria,
      othCriteria = other.criteria,
      length = objCriteria.length,
      ordersLength = orders.length;

  while (++index < length) {
    var result = compareAscending(objCriteria[index], othCriteria[index]);
    if (result) {
      if (index >= ordersLength) {
        return result;
      }
      var order = orders[index];
      return result * (order == 'desc' ? -1 : 1);
    }
  }
  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
  // that causes it, under certain circumstances, to provide the same value for
  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
  // for more details.
  //
  // This also ensures a stable sort in V8 and other engines.
  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
  return object.index - other.index;
}

module.exports = compareMultiple;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;

/**
 * Creates an array that is the composition of partially applied arguments,
 * placeholders, and provided arguments into a single array of arguments.
 *
 * @private
 * @param {Array} args The provided arguments.
 * @param {Array} partials The arguments to prepend to those provided.
 * @param {Array} holders The `partials` placeholder indexes.
 * @params {boolean} [isCurried] Specify composing for a curried function.
 * @returns {Array} Returns the new array of composed arguments.
 */
function composeArgs(args, partials, holders, isCurried) {
  var argsIndex = -1,
      argsLength = args.length,
      holdersLength = holders.length,
      leftIndex = -1,
      leftLength = partials.length,
      rangeLength = nativeMax(argsLength - holdersLength, 0),
      result = Array(leftLength + rangeLength),
      isUncurried = !isCurried;

  while (++leftIndex < leftLength) {
    result[leftIndex] = partials[leftIndex];
  }
  while (++argsIndex < holdersLength) {
    if (isUncurried || argsIndex < argsLength) {
      result[holders[argsIndex]] = args[argsIndex];
    }
  }
  while (rangeLength--) {
    result[leftIndex++] = args[argsIndex++];
  }
  return result;
}

module.exports = composeArgs;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;

/**
 * This function is like `composeArgs` except that the arguments composition
 * is tailored for `_.partialRight`.
 *
 * @private
 * @param {Array} args The provided arguments.
 * @param {Array} partials The arguments to append to those provided.
 * @param {Array} holders The `partials` placeholder indexes.
 * @params {boolean} [isCurried] Specify composing for a curried function.
 * @returns {Array} Returns the new array of composed arguments.
 */
function composeArgsRight(args, partials, holders, isCurried) {
  var argsIndex = -1,
      argsLength = args.length,
      holdersIndex = -1,
      holdersLength = holders.length,
      rightIndex = -1,
      rightLength = partials.length,
      rangeLength = nativeMax(argsLength - holdersLength, 0),
      result = Array(rangeLength + rightLength),
      isUncurried = !isCurried;

  while (++argsIndex < rangeLength) {
    result[argsIndex] = args[argsIndex];
  }
  var offset = argsIndex;
  while (++rightIndex < rightLength) {
    result[offset + rightIndex] = partials[rightIndex];
  }
  while (++holdersIndex < holdersLength) {
    if (isUncurried || argsIndex < argsLength) {
      result[offset + holders[holdersIndex]] = args[argsIndex++];
    }
  }
  return result;
}

module.exports = composeArgsRight;
/**
 * Copies the values of `source` to `array`.
 *
 * @private
 * @param {Array} source The array to copy values from.
 * @param {Array} [array=[]] The array to copy values to.
 * @returns {Array} Returns `array`.
 */
function copyArray(source, array) {
  var index = -1,
      length = source.length;

  array || (array = Array(length));
  while (++index < length) {
    array[index] = source[index];
  }
  return array;
}

module.exports = copyArray;
var assignValue = require('./_assignValue'),
    baseAssignValue = require('./_baseAssignValue');

/**
 * Copies properties of `source` to `object`.
 *
 * @private
 * @param {Object} source The object to copy properties from.
 * @param {Array} props The property identifiers to copy.
 * @param {Object} [object={}] The object to copy properties to.
 * @param {Function} [customizer] The function to customize copied values.
 * @returns {Object} Returns `object`.
 */
function copyObject(source, props, object, customizer) {
  var isNew = !object;
  object || (object = {});

  var index = -1,
      length = props.length;

  while (++index < length) {
    var key = props[index];

    var newValue = customizer
      ? customizer(object[key], source[key], key, object, source)
      : undefined;

    if (newValue === undefined) {
      newValue = source[key];
    }
    if (isNew) {
      baseAssignValue(object, key, newValue);
    } else {
      assignValue(object, key, newValue);
    }
  }
  return object;
}

module.exports = copyObject;
var copyObject = require('./_copyObject'),
    getSymbols = require('./_getSymbols');

/**
 * Copies own symbols of `source` to `object`.
 *
 * @private
 * @param {Object} source The object to copy symbols from.
 * @param {Object} [object={}] The object to copy symbols to.
 * @returns {Object} Returns `object`.
 */
function copySymbols(source, object) {
  return copyObject(source, getSymbols(source), object);
}

module.exports = copySymbols;
var copyObject = require('./_copyObject'),
    getSymbolsIn = require('./_getSymbolsIn');

/**
 * Copies own and inherited symbols of `source` to `object`.
 *
 * @private
 * @param {Object} source The object to copy symbols from.
 * @param {Object} [object={}] The object to copy symbols to.
 * @returns {Object} Returns `object`.
 */
function copySymbolsIn(source, object) {
  return copyObject(source, getSymbolsIn(source), object);
}

module.exports = copySymbolsIn;
var root = require('./_root');

/** Used to detect overreaching core-js shims. */
var coreJsData = root['__core-js_shared__'];

module.exports = coreJsData;
/**
 * Gets the number of `placeholder` occurrences in `array`.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {*} placeholder The placeholder to search for.
 * @returns {number} Returns the placeholder count.
 */
function countHolders(array, placeholder) {
  var length = array.length,
      result = 0;

  while (length--) {
    if (array[length] === placeholder) {
      ++result;
    }
  }
  return result;
}

module.exports = countHolders;
var arrayAggregator = require('./_arrayAggregator'),
    baseAggregator = require('./_baseAggregator'),
    baseIteratee = require('./_baseIteratee'),
    isArray = require('./isArray');

/**
 * Creates a function like `_.groupBy`.
 *
 * @private
 * @param {Function} setter The function to set accumulator values.
 * @param {Function} [initializer] The accumulator object initializer.
 * @returns {Function} Returns the new aggregator function.
 */
function createAggregator(setter, initializer) {
  return function(collection, iteratee) {
    var func = isArray(collection) ? arrayAggregator : baseAggregator,
        accumulator = initializer ? initializer() : {};

    return func(collection, setter, baseIteratee(iteratee, 2), accumulator);
  };
}

module.exports = createAggregator;
var baseRest = require('./_baseRest'),
    isIterateeCall = require('./_isIterateeCall');

/**
 * Creates a function like `_.assign`.
 *
 * @private
 * @param {Function} assigner The function to assign values.
 * @returns {Function} Returns the new assigner function.
 */
function createAssigner(assigner) {
  return baseRest(function(object, sources) {
    var index = -1,
        length = sources.length,
        customizer = length > 1 ? sources[length - 1] : undefined,
        guard = length > 2 ? sources[2] : undefined;

    customizer = (assigner.length > 3 && typeof customizer == 'function')
      ? (length--, customizer)
      : undefined;

    if (guard && isIterateeCall(sources[0], sources[1], guard)) {
      customizer = length < 3 ? undefined : customizer;
      length = 1;
    }
    object = Object(object);
    while (++index < length) {
      var source = sources[index];
      if (source) {
        assigner(object, source, index, customizer);
      }
    }
    return object;
  });
}

module.exports = createAssigner;
var isArrayLike = require('./isArrayLike');

/**
 * Creates a `baseEach` or `baseEachRight` function.
 *
 * @private
 * @param {Function} eachFunc The function to iterate over a collection.
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Function} Returns the new base function.
 */
function createBaseEach(eachFunc, fromRight) {
  return function(collection, iteratee) {
    if (collection == null) {
      return collection;
    }
    if (!isArrayLike(collection)) {
      return eachFunc(collection, iteratee);
    }
    var length = collection.length,
        index = fromRight ? length : -1,
        iterable = Object(collection);

    while ((fromRight ? index-- : ++index < length)) {
      if (iteratee(iterable[index], index, iterable) === false) {
        break;
      }
    }
    return collection;
  };
}

module.exports = createBaseEach;
/**
 * Creates a base function for methods like `_.forIn` and `_.forOwn`.
 *
 * @private
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Function} Returns the new base function.
 */
function createBaseFor(fromRight) {
  return function(object, iteratee, keysFunc) {
    var index = -1,
        iterable = Object(object),
        props = keysFunc(object),
        length = props.length;

    while (length--) {
      var key = props[fromRight ? length : ++index];
      if (iteratee(iterable[key], key, iterable) === false) {
        break;
      }
    }
    return object;
  };
}

module.exports = createBaseFor;
var createCtor = require('./_createCtor'),
    root = require('./_root');

/** Used to compose bitmasks for function metadata. */
var WRAP_BIND_FLAG = 1;

/**
 * Creates a function that wraps `func` to invoke it with the optional `this`
 * binding of `thisArg`.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
 * @param {*} [thisArg] The `this` binding of `func`.
 * @returns {Function} Returns the new wrapped function.
 */
function createBind(func, bitmask, thisArg) {
  var isBind = bitmask & WRAP_BIND_FLAG,
      Ctor = createCtor(func);

  function wrapper() {
    var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
    return fn.apply(isBind ? thisArg : this, arguments);
  }
  return wrapper;
}

module.exports = createBind;
var castSlice = require('./_castSlice'),
    hasUnicode = require('./_hasUnicode'),
    stringToArray = require('./_stringToArray'),
    toString = require('./toString');

/**
 * Creates a function like `_.lowerFirst`.
 *
 * @private
 * @param {string} methodName The name of the `String` case method to use.
 * @returns {Function} Returns the new case function.
 */
function createCaseFirst(methodName) {
  return function(string) {
    string = toString(string);

    var strSymbols = hasUnicode(string)
      ? stringToArray(string)
      : undefined;

    var chr = strSymbols
      ? strSymbols[0]
      : string.charAt(0);

    var trailing = strSymbols
      ? castSlice(strSymbols, 1).join('')
      : string.slice(1);

    return chr[methodName]() + trailing;
  };
}

module.exports = createCaseFirst;
var arrayReduce = require('./_arrayReduce'),
    deburr = require('./deburr'),
    words = require('./words');

/** Used to compose unicode capture groups. */
var rsApos = "['\u2019]";

/** Used to match apostrophes. */
var reApos = RegExp(rsApos, 'g');

/**
 * Creates a function like `_.camelCase`.
 *
 * @private
 * @param {Function} callback The function to combine each word.
 * @returns {Function} Returns the new compounder function.
 */
function createCompounder(callback) {
  return function(string) {
    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
  };
}

module.exports = createCompounder;
var baseCreate = require('./_baseCreate'),
    isObject = require('./isObject');

/**
 * Creates a function that produces an instance of `Ctor` regardless of
 * whether it was invoked as part of a `new` expression or by `call` or `apply`.
 *
 * @private
 * @param {Function} Ctor The constructor to wrap.
 * @returns {Function} Returns the new wrapped function.
 */
function createCtor(Ctor) {
  return function() {
    // Use a `switch` statement to work with class constructors. See
    // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
    // for more details.
    var args = arguments;
    switch (args.length) {
      case 0: return new Ctor;
      case 1: return new Ctor(args[0]);
      case 2: return new Ctor(args[0], args[1]);
      case 3: return new Ctor(args[0], args[1], args[2]);
      case 4: return new Ctor(args[0], args[1], args[2], args[3]);
      case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
      case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
      case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
    }
    var thisBinding = baseCreate(Ctor.prototype),
        result = Ctor.apply(thisBinding, args);

    // Mimic the constructor's `return` behavior.
    // See https://es5.github.io/#x13.2.2 for more details.
    return isObject(result) ? result : thisBinding;
  };
}

module.exports = createCtor;
var apply = require('./_apply'),
    createCtor = require('./_createCtor'),
    createHybrid = require('./_createHybrid'),
    createRecurry = require('./_createRecurry'),
    getHolder = require('./_getHolder'),
    replaceHolders = require('./_replaceHolders'),
    root = require('./_root');

/**
 * Creates a function that wraps `func` to enable currying.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
 * @param {number} arity The arity of `func`.
 * @returns {Function} Returns the new wrapped function.
 */
function createCurry(func, bitmask, arity) {
  var Ctor = createCtor(func);

  function wrapper() {
    var length = arguments.length,
        args = Array(length),
        index = length,
        placeholder = getHolder(wrapper);

    while (index--) {
      args[index] = arguments[index];
    }
    var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
      ? []
      : replaceHolders(args, placeholder);

    length -= holders.length;
    if (length < arity) {
      return createRecurry(
        func, bitmask, createHybrid, wrapper.placeholder, undefined,
        args, holders, undefined, undefined, arity - length);
    }
    var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
    return apply(fn, this, args);
  }
  return wrapper;
}

module.exports = createCurry;
var baseIteratee = require('./_baseIteratee'),
    isArrayLike = require('./isArrayLike'),
    keys = require('./keys');

/**
 * Creates a `_.find` or `_.findLast` function.
 *
 * @private
 * @param {Function} findIndexFunc The function to find the collection index.
 * @returns {Function} Returns the new find function.
 */
function createFind(findIndexFunc) {
  return function(collection, predicate, fromIndex) {
    var iterable = Object(collection);
    if (!isArrayLike(collection)) {
      var iteratee = baseIteratee(predicate, 3);
      collection = keys(collection);
      predicate = function(key) { return iteratee(iterable[key], key, iterable); };
    }
    var index = findIndexFunc(collection, predicate, fromIndex);
    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
  };
}

module.exports = createFind;
var LodashWrapper = require('./_LodashWrapper'),
    flatRest = require('./_flatRest'),
    getData = require('./_getData'),
    getFuncName = require('./_getFuncName'),
    isArray = require('./isArray'),
    isLaziable = require('./_isLaziable');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/** Used to compose bitmasks for function metadata. */
var WRAP_CURRY_FLAG = 8,
    WRAP_PARTIAL_FLAG = 32,
    WRAP_ARY_FLAG = 128,
    WRAP_REARG_FLAG = 256;

/**
 * Creates a `_.flow` or `_.flowRight` function.
 *
 * @private
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Function} Returns the new flow function.
 */
function createFlow(fromRight) {
  return flatRest(function(funcs) {
    var length = funcs.length,
        index = length,
        prereq = LodashWrapper.prototype.thru;

    if (fromRight) {
      funcs.reverse();
    }
    while (index--) {
      var func = funcs[index];
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
        var wrapper = new LodashWrapper([], true);
      }
    }
    index = wrapper ? index : length;
    while (++index < length) {
      func = funcs[index];

      var funcName = getFuncName(func),
          data = funcName == 'wrapper' ? getData(func) : undefined;

      if (data && isLaziable(data[0]) &&
            data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
            !data[4].length && data[9] == 1
          ) {
        wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
      } else {
        wrapper = (func.length == 1 && isLaziable(func))
          ? wrapper[funcName]()
          : wrapper.thru(func);
      }
    }
    return function() {
      var args = arguments,
          value = args[0];

      if (wrapper && args.length == 1 && isArray(value)) {
        return wrapper.plant(value).value();
      }
      var index = 0,
          result = length ? funcs[index].apply(this, args) : value;

      while (++index < length) {
        result = funcs[index].call(this, result);
      }
      return result;
    };
  });
}

module.exports = createFlow;
var composeArgs = require('./_composeArgs'),
    composeArgsRight = require('./_composeArgsRight'),
    countHolders = require('./_countHolders'),
    createCtor = require('./_createCtor'),
    createRecurry = require('./_createRecurry'),
    getHolder = require('./_getHolder'),
    reorder = require('./_reorder'),
    replaceHolders = require('./_replaceHolders'),
    root = require('./_root');

/** Used to compose bitmasks for function metadata. */
var WRAP_BIND_FLAG = 1,
    WRAP_BIND_KEY_FLAG = 2,
    WRAP_CURRY_FLAG = 8,
    WRAP_CURRY_RIGHT_FLAG = 16,
    WRAP_ARY_FLAG = 128,
    WRAP_FLIP_FLAG = 512;

/**
 * Creates a function that wraps `func` to invoke it with optional `this`
 * binding of `thisArg`, partial application, and currying.
 *
 * @private
 * @param {Function|string} func The function or method name to wrap.
 * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
 * @param {*} [thisArg] The `this` binding of `func`.
 * @param {Array} [partials] The arguments to prepend to those provided to
 *  the new function.
 * @param {Array} [holders] The `partials` placeholder indexes.
 * @param {Array} [partialsRight] The arguments to append to those provided
 *  to the new function.
 * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
 * @param {Array} [argPos] The argument positions of the new function.
 * @param {number} [ary] The arity cap of `func`.
 * @param {number} [arity] The arity of `func`.
 * @returns {Function} Returns the new wrapped function.
 */
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
  var isAry = bitmask & WRAP_ARY_FLAG,
      isBind = bitmask & WRAP_BIND_FLAG,
      isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
      isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
      isFlip = bitmask & WRAP_FLIP_FLAG,
      Ctor = isBindKey ? undefined : createCtor(func);

  function wrapper() {
    var length = arguments.length,
        args = Array(length),
        index = length;

    while (index--) {
      args[index] = arguments[index];
    }
    if (isCurried) {
      var placeholder = getHolder(wrapper),
          holdersCount = countHolders(args, placeholder);
    }
    if (partials) {
      args = composeArgs(args, partials, holders, isCurried);
    }
    if (partialsRight) {
      args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
    }
    length -= holdersCount;
    if (isCurried && length < arity) {
      var newHolders = replaceHolders(args, placeholder);
      return createRecurry(
        func, bitmask, createHybrid, wrapper.placeholder, thisArg,
        args, newHolders, argPos, ary, arity - length
      );
    }
    var thisBinding = isBind ? thisArg : this,
        fn = isBindKey ? thisBinding[func] : func;

    length = args.length;
    if (argPos) {
      args = reorder(args, argPos);
    } else if (isFlip && length > 1) {
      args.reverse();
    }
    if (isAry && ary < length) {
      args.length = ary;
    }
    if (this && this !== root && this instanceof wrapper) {
      fn = Ctor || createCtor(fn);
    }
    return fn.apply(thisBinding, args);
  }
  return wrapper;
}

module.exports = createHybrid;
var baseInverter = require('./_baseInverter');

/**
 * Creates a function like `_.invertBy`.
 *
 * @private
 * @param {Function} setter The function to set accumulator values.
 * @param {Function} toIteratee The function to resolve iteratees.
 * @returns {Function} Returns the new inverter function.
 */
function createInverter(setter, toIteratee) {
  return function(object, iteratee) {
    return baseInverter(object, setter, toIteratee(iteratee), {});
  };
}

module.exports = createInverter;
var baseToNumber = require('./_baseToNumber'),
    baseToString = require('./_baseToString');

/**
 * Creates a function that performs a mathematical operation on two values.
 *
 * @private
 * @param {Function} operator The function to perform the operation.
 * @param {number} [defaultValue] The value used for `undefined` arguments.
 * @returns {Function} Returns the new mathematical operation function.
 */
function createMathOperation(operator, defaultValue) {
  return function(value, other) {
    var result;
    if (value === undefined && other === undefined) {
      return defaultValue;
    }
    if (value !== undefined) {
      result = value;
    }
    if (other !== undefined) {
      if (result === undefined) {
        return other;
      }
      if (typeof value == 'string' || typeof other == 'string') {
        value = baseToString(value);
        other = baseToString(other);
      } else {
        value = baseToNumber(value);
        other = baseToNumber(other);
      }
      result = operator(value, other);
    }
    return result;
  };
}

module.exports = createMathOperation;
var apply = require('./_apply'),
    arrayMap = require('./_arrayMap'),
    baseIteratee = require('./_baseIteratee'),
    baseRest = require('./_baseRest'),
    baseUnary = require('./_baseUnary'),
    flatRest = require('./_flatRest');

/**
 * Creates a function like `_.over`.
 *
 * @private
 * @param {Function} arrayFunc The function to iterate over iteratees.
 * @returns {Function} Returns the new over function.
 */
function createOver(arrayFunc) {
  return flatRest(function(iteratees) {
    iteratees = arrayMap(iteratees, baseUnary(baseIteratee));
    return baseRest(function(args) {
      var thisArg = this;
      return arrayFunc(iteratees, function(iteratee) {
        return apply(iteratee, thisArg, args);
      });
    });
  });
}

module.exports = createOver;
var baseRepeat = require('./_baseRepeat'),
    baseToString = require('./_baseToString'),
    castSlice = require('./_castSlice'),
    hasUnicode = require('./_hasUnicode'),
    stringSize = require('./_stringSize'),
    stringToArray = require('./_stringToArray');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeCeil = Math.ceil;

/**
 * Creates the padding for `string` based on `length`. The `chars` string
 * is truncated if the number of characters exceeds `length`.
 *
 * @private
 * @param {number} length The padding length.
 * @param {string} [chars=' '] The string used as padding.
 * @returns {string} Returns the padding for `string`.
 */
function createPadding(length, chars) {
  chars = chars === undefined ? ' ' : baseToString(chars);

  var charsLength = chars.length;
  if (charsLength < 2) {
    return charsLength ? baseRepeat(chars, length) : chars;
  }
  var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
  return hasUnicode(chars)
    ? castSlice(stringToArray(result), 0, length).join('')
    : result.slice(0, length);
}

module.exports = createPadding;
var apply = require('./_apply'),
    createCtor = require('./_createCtor'),
    root = require('./_root');

/** Used to compose bitmasks for function metadata. */
var WRAP_BIND_FLAG = 1;

/**
 * Creates a function that wraps `func` to invoke it with the `this` binding
 * of `thisArg` and `partials` prepended to the arguments it receives.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
 * @param {*} thisArg The `this` binding of `func`.
 * @param {Array} partials The arguments to prepend to those provided to
 *  the new function.
 * @returns {Function} Returns the new wrapped function.
 */
function createPartial(func, bitmask, thisArg, partials) {
  var isBind = bitmask & WRAP_BIND_FLAG,
      Ctor = createCtor(func);

  function wrapper() {
    var argsIndex = -1,
        argsLength = arguments.length,
        leftIndex = -1,
        leftLength = partials.length,
        args = Array(leftLength + argsLength),
        fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;

    while (++leftIndex < leftLength) {
      args[leftIndex] = partials[leftIndex];
    }
    while (argsLength--) {
      args[leftIndex++] = arguments[++argsIndex];
    }
    return apply(fn, isBind ? thisArg : this, args);
  }
  return wrapper;
}

module.exports = createPartial;
var baseRange = require('./_baseRange'),
    isIterateeCall = require('./_isIterateeCall'),
    toFinite = require('./toFinite');

/**
 * Creates a `_.range` or `_.rangeRight` function.
 *
 * @private
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Function} Returns the new range function.
 */
function createRange(fromRight) {
  return function(start, end, step) {
    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
      end = step = undefined;
    }
    // Ensure the sign of `-0` is preserved.
    start = toFinite(start);
    if (end === undefined) {
      end = start;
      start = 0;
    } else {
      end = toFinite(end);
    }
    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
    return baseRange(start, end, step, fromRight);
  };
}

module.exports = createRange;
var isLaziable = require('./_isLaziable'),
    setData = require('./_setData'),
    setWrapToString = require('./_setWrapToString');

/** Used to compose bitmasks for function metadata. */
var WRAP_BIND_FLAG = 1,
    WRAP_BIND_KEY_FLAG = 2,
    WRAP_CURRY_BOUND_FLAG = 4,
    WRAP_CURRY_FLAG = 8,
    WRAP_PARTIAL_FLAG = 32,
    WRAP_PARTIAL_RIGHT_FLAG = 64;

/**
 * Creates a function that wraps `func` to continue currying.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
 * @param {Function} wrapFunc The function to create the `func` wrapper.
 * @param {*} placeholder The placeholder value.
 * @param {*} [thisArg] The `this` binding of `func`.
 * @param {Array} [partials] The arguments to prepend to those provided to
 *  the new function.
 * @param {Array} [holders] The `partials` placeholder indexes.
 * @param {Array} [argPos] The argument positions of the new function.
 * @param {number} [ary] The arity cap of `func`.
 * @param {number} [arity] The arity of `func`.
 * @returns {Function} Returns the new wrapped function.
 */
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
  var isCurry = bitmask & WRAP_CURRY_FLAG,
      newHolders = isCurry ? holders : undefined,
      newHoldersRight = isCurry ? undefined : holders,
      newPartials = isCurry ? partials : undefined,
      newPartialsRight = isCurry ? undefined : partials;

  bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
  bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);

  if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
    bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
  }
  var newData = [
    func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
    newHoldersRight, argPos, ary, arity
  ];

  var result = wrapFunc.apply(undefined, newData);
  if (isLaziable(func)) {
    setData(result, newData);
  }
  result.placeholder = placeholder;
  return setWrapToString(result, func, bitmask);
}

module.exports = createRecurry;
var toNumber = require('./toNumber');

/**
 * Creates a function that performs a relational operation on two values.
 *
 * @private
 * @param {Function} operator The function to perform the operation.
 * @returns {Function} Returns the new relational operation function.
 */
function createRelationalOperation(operator) {
  return function(value, other) {
    if (!(typeof value == 'string' && typeof other == 'string')) {
      value = toNumber(value);
      other = toNumber(other);
    }
    return operator(value, other);
  };
}

module.exports = createRelationalOperation;
var root = require('./_root'),
    toInteger = require('./toInteger'),
    toNumber = require('./toNumber'),
    toString = require('./toString');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeIsFinite = root.isFinite,
    nativeMin = Math.min;

/**
 * Creates a function like `_.round`.
 *
 * @private
 * @param {string} methodName The name of the `Math` method to use when rounding.
 * @returns {Function} Returns the new round function.
 */
function createRound(methodName) {
  var func = Math[methodName];
  return function(number, precision) {
    number = toNumber(number);
    precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
    if (precision && nativeIsFinite(number)) {
      // Shift with exponential notation to avoid floating-point issues.
      // See [MDN](https://mdn.io/round#Examples) for more details.
      var pair = (toString(number) + 'e').split('e'),
          value = func(pair[0] + 'e' + (+pair[1] + precision));

      pair = (toString(value) + 'e').split('e');
      return +(pair[0] + 'e' + (+pair[1] - precision));
    }
    return func(number);
  };
}

module.exports = createRound;
var Set = require('./_Set'),
    noop = require('./noop'),
    setToArray = require('./_setToArray');

/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;

/**
 * Creates a set object of `values`.
 *
 * @private
 * @param {Array} values The values to add to the set.
 * @returns {Object} Returns the new set.
 */
var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
  return new Set(values);
};

module.exports = createSet;
var baseToPairs = require('./_baseToPairs'),
    getTag = require('./_getTag'),
    mapToArray = require('./_mapToArray'),
    setToPairs = require('./_setToPairs');

/** `Object#toString` result references. */
var mapTag = '[object Map]',
    setTag = '[object Set]';

/**
 * Creates a `_.toPairs` or `_.toPairsIn` function.
 *
 * @private
 * @param {Function} keysFunc The function to get the keys of a given object.
 * @returns {Function} Returns the new pairs function.
 */
function createToPairs(keysFunc) {
  return function(object) {
    var tag = getTag(object);
    if (tag == mapTag) {
      return mapToArray(object);
    }
    if (tag == setTag) {
      return setToPairs(object);
    }
    return baseToPairs(object, keysFunc(object));
  };
}

module.exports = createToPairs;
var baseSetData = require('./_baseSetData'),
    createBind = require('./_createBind'),
    createCurry = require('./_createCurry'),
    createHybrid = require('./_createHybrid'),
    createPartial = require('./_createPartial'),
    getData = require('./_getData'),
    mergeData = require('./_mergeData'),
    setData = require('./_setData'),
    setWrapToString = require('./_setWrapToString'),
    toInteger = require('./toInteger');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/** Used to compose bitmasks for function metadata. */
var WRAP_BIND_FLAG = 1,
    WRAP_BIND_KEY_FLAG = 2,
    WRAP_CURRY_FLAG = 8,
    WRAP_CURRY_RIGHT_FLAG = 16,
    WRAP_PARTIAL_FLAG = 32,
    WRAP_PARTIAL_RIGHT_FLAG = 64;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;

/**
 * Creates a function that either curries or invokes `func` with optional
 * `this` binding and partially applied arguments.
 *
 * @private
 * @param {Function|string} func The function or method name to wrap.
 * @param {number} bitmask The bitmask flags.
 *    1 - `_.bind`
 *    2 - `_.bindKey`
 *    4 - `_.curry` or `_.curryRight` of a bound function
 *    8 - `_.curry`
 *   16 - `_.curryRight`
 *   32 - `_.partial`
 *   64 - `_.partialRight`
 *  128 - `_.rearg`
 *  256 - `_.ary`
 *  512 - `_.flip`
 * @param {*} [thisArg] The `this` binding of `func`.
 * @param {Array} [partials] The arguments to be partially applied.
 * @param {Array} [holders] The `partials` placeholder indexes.
 * @param {Array} [argPos] The argument positions of the new function.
 * @param {number} [ary] The arity cap of `func`.
 * @param {number} [arity] The arity of `func`.
 * @returns {Function} Returns the new wrapped function.
 */
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
  var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
  if (!isBindKey && typeof func != 'function') {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  var length = partials ? partials.length : 0;
  if (!length) {
    bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
    partials = holders = undefined;
  }
  ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
  arity = arity === undefined ? arity : toInteger(arity);
  length -= holders ? holders.length : 0;

  if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
    var partialsRight = partials,
        holdersRight = holders;

    partials = holders = undefined;
  }
  var data = isBindKey ? undefined : getData(func);

  var newData = [
    func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
    argPos, ary, arity
  ];

  if (data) {
    mergeData(newData, data);
  }
  func = newData[0];
  bitmask = newData[1];
  thisArg = newData[2];
  partials = newData[3];
  holders = newData[4];
  arity = newData[9] = newData[9] === undefined
    ? (isBindKey ? 0 : func.length)
    : nativeMax(newData[9] - length, 0);

  if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
    bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
  }
  if (!bitmask || bitmask == WRAP_BIND_FLAG) {
    var result = createBind(func, bitmask, thisArg);
  } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
    result = createCurry(func, bitmask, arity);
  } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
    result = createPartial(func, bitmask, thisArg, partials);
  } else {
    result = createHybrid.apply(undefined, newData);
  }
  var setter = data ? baseSetData : setData;
  return setWrapToString(setter(result, newData), func, bitmask);
}

module.exports = createWrap;
var eq = require('./eq');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
 * of source objects to the destination object for all destination properties
 * that resolve to `undefined`.
 *
 * @private
 * @param {*} objValue The destination value.
 * @param {*} srcValue The source value.
 * @param {string} key The key of the property to assign.
 * @param {Object} object The parent object of `objValue`.
 * @returns {*} Returns the value to assign.
 */
function customDefaultsAssignIn(objValue, srcValue, key, object) {
  if (objValue === undefined ||
      (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
    return srcValue;
  }
  return objValue;
}

module.exports = customDefaultsAssignIn;
var baseMerge = require('./_baseMerge'),
    isObject = require('./isObject');

/**
 * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
 * objects into destination objects that are passed thru.
 *
 * @private
 * @param {*} objValue The destination value.
 * @param {*} srcValue The source value.
 * @param {string} key The key of the property to merge.
 * @param {Object} object The parent object of `objValue`.
 * @param {Object} source The parent object of `srcValue`.
 * @param {Object} [stack] Tracks traversed source values and their merged
 *  counterparts.
 * @returns {*} Returns the value to assign.
 */
function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
  if (isObject(objValue) && isObject(srcValue)) {
    // Recursively merge objects and arrays (susceptible to call stack limits).
    stack.set(srcValue, objValue);
    baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
    stack['delete'](srcValue);
  }
  return objValue;
}

module.exports = customDefaultsMerge;
var isPlainObject = require('./isPlainObject');

/**
 * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
 * objects.
 *
 * @private
 * @param {*} value The value to inspect.
 * @param {string} key The key of the property to inspect.
 * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
 */
function customOmitClone(value) {
  return isPlainObject(value) ? undefined : value;
}

module.exports = customOmitClone;
var getNative = require('./_getNative'),
    root = require('./_root');

/* Built-in method references that are verified to be native. */
var DataView = getNative(root, 'DataView');

module.exports = DataView;
var basePropertyOf = require('./_basePropertyOf');

/** Used to map Latin Unicode letters to basic Latin letters. */
var deburredLetters = {
  // Latin-1 Supplement block.
  '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
  '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
  '\xc7': 'C',  '\xe7': 'c',
  '\xd0': 'D',  '\xf0': 'd',
  '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
  '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
  '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
  '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
  '\xd1': 'N',  '\xf1': 'n',
  '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
  '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
  '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
  '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
  '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
  '\xc6': 'Ae', '\xe6': 'ae',
  '\xde': 'Th', '\xfe': 'th',
  '\xdf': 'ss',
  // Latin Extended-A block.
  '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
  '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
  '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
  '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
  '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
  '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
  '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
  '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
  '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
  '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
  '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
  '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
  '\u0134': 'J',  '\u0135': 'j',
  '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
  '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
  '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
  '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
  '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
  '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
  '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
  '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
  '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
  '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
  '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
  '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
  '\u0163': 't',  '\u0165': 't', '\u0167': 't',
  '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
  '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
  '\u0174': 'W',  '\u0175': 'w',
  '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
  '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
  '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
  '\u0132': 'IJ', '\u0133': 'ij',
  '\u0152': 'Oe', '\u0153': 'oe',
  '\u0149': "'n", '\u017f': 's'
};

/**
 * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
 * letters to basic Latin letters.
 *
 * @private
 * @param {string} letter The matched letter to deburr.
 * @returns {string} Returns the deburred letter.
 */
var deburrLetter = basePropertyOf(deburredLetters);

module.exports = deburrLetter;
var getNative = require('./_getNative');

var defineProperty = (function() {
  try {
    var func = getNative(Object, 'defineProperty');
    func({}, '', {});
    return func;
  } catch (e) {}
}());

module.exports = defineProperty;
var SetCache = require('./_SetCache'),
    arraySome = require('./_arraySome'),
    cacheHas = require('./_cacheHas');

/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1,
    COMPARE_UNORDERED_FLAG = 2;

/**
 * A specialized version of `baseIsEqualDeep` for arrays with support for
 * partial deep comparisons.
 *
 * @private
 * @param {Array} array The array to compare.
 * @param {Array} other The other array to compare.
 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
 * @param {Function} customizer The function to customize comparisons.
 * @param {Function} equalFunc The function to determine equivalents of values.
 * @param {Object} stack Tracks traversed `array` and `other` objects.
 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
 */
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
      arrLength = array.length,
      othLength = other.length;

  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
    return false;
  }
  // Check that cyclic values are equal.
  var arrStacked = stack.get(array);
  var othStacked = stack.get(other);
  if (arrStacked && othStacked) {
    return arrStacked == other && othStacked == array;
  }
  var index = -1,
      result = true,
      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;

  stack.set(array, other);
  stack.set(other, array);

  // Ignore non-index properties.
  while (++index < arrLength) {
    var arrValue = array[index],
        othValue = other[index];

    if (customizer) {
      var compared = isPartial
        ? customizer(othValue, arrValue, index, other, array, stack)
        : customizer(arrValue, othValue, index, array, other, stack);
    }
    if (compared !== undefined) {
      if (compared) {
        continue;
      }
      result = false;
      break;
    }
    // Recursively compare arrays (susceptible to call stack limits).
    if (seen) {
      if (!arraySome(other, function(othValue, othIndex) {
            if (!cacheHas(seen, othIndex) &&
                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
              return seen.push(othIndex);
            }
          })) {
        result = false;
        break;
      }
    } else if (!(
          arrValue === othValue ||
            equalFunc(arrValue, othValue, bitmask, customizer, stack)
        )) {
      result = false;
      break;
    }
  }
  stack['delete'](array);
  stack['delete'](other);
  return result;
}

module.exports = equalArrays;
var Symbol = require('./_Symbol'),
    Uint8Array = require('./_Uint8Array'),
    eq = require('./eq'),
    equalArrays = require('./_equalArrays'),
    mapToArray = require('./_mapToArray'),
    setToArray = require('./_setToArray');

/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1,
    COMPARE_UNORDERED_FLAG = 2;

/** `Object#toString` result references. */
var boolTag = '[object Boolean]',
    dateTag = '[object Date]',
    errorTag = '[object Error]',
    mapTag = '[object Map]',
    numberTag = '[object Number]',
    regexpTag = '[object RegExp]',
    setTag = '[object Set]',
    stringTag = '[object String]',
    symbolTag = '[object Symbol]';

var arrayBufferTag = '[object ArrayBuffer]',
    dataViewTag = '[object DataView]';

/** Used to convert symbols to primitives and strings. */
var symbolProto = Symbol ? Symbol.prototype : undefined,
    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;

/**
 * A specialized version of `baseIsEqualDeep` for comparing objects of
 * the same `toStringTag`.
 *
 * **Note:** This function only supports comparing values with tags of
 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
 *
 * @private
 * @param {Object} object The object to compare.
 * @param {Object} other The other object to compare.
 * @param {string} tag The `toStringTag` of the objects to compare.
 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
 * @param {Function} customizer The function to customize comparisons.
 * @param {Function} equalFunc The function to determine equivalents of values.
 * @param {Object} stack Tracks traversed `object` and `other` objects.
 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
 */
function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
  switch (tag) {
    case dataViewTag:
      if ((object.byteLength != other.byteLength) ||
          (object.byteOffset != other.byteOffset)) {
        return false;
      }
      object = object.buffer;
      other = other.buffer;

    case arrayBufferTag:
      if ((object.byteLength != other.byteLength) ||
          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
        return false;
      }
      return true;

    case boolTag:
    case dateTag:
    case numberTag:
      // Coerce booleans to `1` or `0` and dates to milliseconds.
      // Invalid dates are coerced to `NaN`.
      return eq(+object, +other);

    case errorTag:
      return object.name == other.name && object.message == other.message;

    case regexpTag:
    case stringTag:
      // Coerce regexes to strings and treat strings, primitives and objects,
      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
      // for more details.
      return object == (other + '');

    case mapTag:
      var convert = mapToArray;

    case setTag:
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
      convert || (convert = setToArray);

      if (object.size != other.size && !isPartial) {
        return false;
      }
      // Assume cyclic values are equal.
      var stacked = stack.get(object);
      if (stacked) {
        return stacked == other;
      }
      bitmask |= COMPARE_UNORDERED_FLAG;

      // Recursively compare objects (susceptible to call stack limits).
      stack.set(object, other);
      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
      stack['delete'](object);
      return result;

    case symbolTag:
      if (symbolValueOf) {
        return symbolValueOf.call(object) == symbolValueOf.call(other);
      }
  }
  return false;
}

module.exports = equalByTag;
var getAllKeys = require('./_getAllKeys');

/** Used to compose bitmasks for value comparisons. */
var COMPARE_PARTIAL_FLAG = 1;

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * A specialized version of `baseIsEqualDeep` for objects with support for
 * partial deep comparisons.
 *
 * @private
 * @param {Object} object The object to compare.
 * @param {Object} other The other object to compare.
 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
 * @param {Function} customizer The function to customize comparisons.
 * @param {Function} equalFunc The function to determine equivalents of values.
 * @param {Object} stack Tracks traversed `object` and `other` objects.
 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
 */
function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
      objProps = getAllKeys(object),
      objLength = objProps.length,
      othProps = getAllKeys(other),
      othLength = othProps.length;

  if (objLength != othLength && !isPartial) {
    return false;
  }
  var index = objLength;
  while (index--) {
    var key = objProps[index];
    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
      return false;
    }
  }
  // Check that cyclic values are equal.
  var objStacked = stack.get(object);
  var othStacked = stack.get(other);
  if (objStacked && othStacked) {
    return objStacked == other && othStacked == object;
  }
  var result = true;
  stack.set(object, other);
  stack.set(other, object);

  var skipCtor = isPartial;
  while (++index < objLength) {
    key = objProps[index];
    var objValue = object[key],
        othValue = other[key];

    if (customizer) {
      var compared = isPartial
        ? customizer(othValue, objValue, key, other, object, stack)
        : customizer(objValue, othValue, key, object, other, stack);
    }
    // Recursively compare objects (susceptible to call stack limits).
    if (!(compared === undefined
          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
          : compared
        )) {
      result = false;
      break;
    }
    skipCtor || (skipCtor = key == 'constructor');
  }
  if (result && !skipCtor) {
    var objCtor = object.constructor,
        othCtor = other.constructor;

    // Non `Object` object instances with different constructors are not equal.
    if (objCtor != othCtor &&
        ('constructor' in object && 'constructor' in other) &&
        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
          typeof othCtor == 'function' && othCtor instanceof othCtor)) {
      result = false;
    }
  }
  stack['delete'](object);
  stack['delete'](other);
  return result;
}

module.exports = equalObjects;
var basePropertyOf = require('./_basePropertyOf');

/** Used to map characters to HTML entities. */
var htmlEscapes = {
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;'
};

/**
 * Used by `_.escape` to convert characters to HTML entities.
 *
 * @private
 * @param {string} chr The matched character to escape.
 * @returns {string} Returns the escaped character.
 */
var escapeHtmlChar = basePropertyOf(htmlEscapes);

module.exports = escapeHtmlChar;
/** Used to escape characters for inclusion in compiled string literals. */
var stringEscapes = {
  '\\': '\\',
  "'": "'",
  '\n': 'n',
  '\r': 'r',
  '\u2028': 'u2028',
  '\u2029': 'u2029'
};

/**
 * Used by `_.template` to escape characters for inclusion in compiled string literals.
 *
 * @private
 * @param {string} chr The matched character to escape.
 * @returns {string} Returns the escaped character.
 */
function escapeStringChar(chr) {
  return '\\' + stringEscapes[chr];
}

module.exports = escapeStringChar;
var flatten = require('./flatten'),
    overRest = require('./_overRest'),
    setToString = require('./_setToString');

/**
 * A specialized version of `baseRest` which flattens the rest array.
 *
 * @private
 * @param {Function} func The function to apply a rest parameter to.
 * @returns {Function} Returns the new function.
 */
function flatRest(func) {
  return setToString(overRest(func, undefined, flatten), func + '');
}

module.exports = flatRest;
/** Detect free variable `global` from Node.js. */
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

module.exports = freeGlobal;
var baseGetAllKeys = require('./_baseGetAllKeys'),
    getSymbols = require('./_getSymbols'),
    keys = require('./keys');

/**
 * Creates an array of own enumerable property names and symbols of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names and symbols.
 */
function getAllKeys(object) {
  return baseGetAllKeys(object, keys, getSymbols);
}

module.exports = getAllKeys;
var baseGetAllKeys = require('./_baseGetAllKeys'),
    getSymbolsIn = require('./_getSymbolsIn'),
    keysIn = require('./keysIn');

/**
 * Creates an array of own and inherited enumerable property names and
 * symbols of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names and symbols.
 */
function getAllKeysIn(object) {
  return baseGetAllKeys(object, keysIn, getSymbolsIn);
}

module.exports = getAllKeysIn;
var metaMap = require('./_metaMap'),
    noop = require('./noop');

/**
 * Gets metadata for `func`.
 *
 * @private
 * @param {Function} func The function to query.
 * @returns {*} Returns the metadata for `func`.
 */
var getData = !metaMap ? noop : function(func) {
  return metaMap.get(func);
};

module.exports = getData;
var realNames = require('./_realNames');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Gets the name of `func`.
 *
 * @private
 * @param {Function} func The function to query.
 * @returns {string} Returns the function name.
 */
function getFuncName(func) {
  var result = (func.name + ''),
      array = realNames[result],
      length = hasOwnProperty.call(realNames, result) ? array.length : 0;

  while (length--) {
    var data = array[length],
        otherFunc = data.func;
    if (otherFunc == null || otherFunc == func) {
      return data.name;
    }
  }
  return result;
}

module.exports = getFuncName;
/**
 * Gets the argument placeholder value for `func`.
 *
 * @private
 * @param {Function} func The function to inspect.
 * @returns {*} Returns the placeholder value.
 */
function getHolder(func) {
  var object = func;
  return object.placeholder;
}

module.exports = getHolder;
var isKeyable = require('./_isKeyable');

/**
 * Gets the data for `map`.
 *
 * @private
 * @param {Object} map The map to query.
 * @param {string} key The reference key.
 * @returns {*} Returns the map data.
 */
function getMapData(map, key) {
  var data = map.__data__;
  return isKeyable(key)
    ? data[typeof key == 'string' ? 'string' : 'hash']
    : data.map;
}

module.exports = getMapData;
var isStrictComparable = require('./_isStrictComparable'),
    keys = require('./keys');

/**
 * Gets the property names, values, and compare flags of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the match data of `object`.
 */
function getMatchData(object) {
  var result = keys(object),
      length = result.length;

  while (length--) {
    var key = result[length],
        value = object[key];

    result[length] = [key, value, isStrictComparable(value)];
  }
  return result;
}

module.exports = getMatchData;
var baseIsNative = require('./_baseIsNative'),
    getValue = require('./_getValue');

/**
 * Gets the native function at `key` of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {string} key The key of the method to get.
 * @returns {*} Returns the function if it's native, else `undefined`.
 */
function getNative(object, key) {
  var value = getValue(object, key);
  return baseIsNative(value) ? value : undefined;
}

module.exports = getNative;
var overArg = require('./_overArg');

/** Built-in value references. */
var getPrototype = overArg(Object.getPrototypeOf, Object);

module.exports = getPrototype;
var Symbol = require('./_Symbol');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString = objectProto.toString;

/** Built-in value references. */
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;

/**
 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the raw `toStringTag`.
 */
function getRawTag(value) {
  var isOwn = hasOwnProperty.call(value, symToStringTag),
      tag = value[symToStringTag];

  try {
    value[symToStringTag] = undefined;
    var unmasked = true;
  } catch (e) {}

  var result = nativeObjectToString.call(value);
  if (unmasked) {
    if (isOwn) {
      value[symToStringTag] = tag;
    } else {
      delete value[symToStringTag];
    }
  }
  return result;
}

module.exports = getRawTag;
var arrayFilter = require('./_arrayFilter'),
    stubArray = require('./stubArray');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Built-in value references. */
var propertyIsEnumerable = objectProto.propertyIsEnumerable;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeGetSymbols = Object.getOwnPropertySymbols;

/**
 * Creates an array of the own enumerable symbols of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of symbols.
 */
var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
  if (object == null) {
    return [];
  }
  object = Object(object);
  return arrayFilter(nativeGetSymbols(object), function(symbol) {
    return propertyIsEnumerable.call(object, symbol);
  });
};

module.exports = getSymbols;
var arrayPush = require('./_arrayPush'),
    getPrototype = require('./_getPrototype'),
    getSymbols = require('./_getSymbols'),
    stubArray = require('./stubArray');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeGetSymbols = Object.getOwnPropertySymbols;

/**
 * Creates an array of the own and inherited enumerable symbols of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of symbols.
 */
var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
  var result = [];
  while (object) {
    arrayPush(result, getSymbols(object));
    object = getPrototype(object);
  }
  return result;
};

module.exports = getSymbolsIn;
var DataView = require('./_DataView'),
    Map = require('./_Map'),
    Promise = require('./_Promise'),
    Set = require('./_Set'),
    WeakMap = require('./_WeakMap'),
    baseGetTag = require('./_baseGetTag'),
    toSource = require('./_toSource');

/** `Object#toString` result references. */
var mapTag = '[object Map]',
    objectTag = '[object Object]',
    promiseTag = '[object Promise]',
    setTag = '[object Set]',
    weakMapTag = '[object WeakMap]';

var dataViewTag = '[object DataView]';

/** Used to detect maps, sets, and weakmaps. */
var dataViewCtorString = toSource(DataView),
    mapCtorString = toSource(Map),
    promiseCtorString = toSource(Promise),
    setCtorString = toSource(Set),
    weakMapCtorString = toSource(WeakMap);

/**
 * Gets the `toStringTag` of `value`.
 *
 * @private
 * @param {*} value The value to query.
 * @returns {string} Returns the `toStringTag`.
 */
var getTag = baseGetTag;

// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
    (Map && getTag(new Map) != mapTag) ||
    (Promise && getTag(Promise.resolve()) != promiseTag) ||
    (Set && getTag(new Set) != setTag) ||
    (WeakMap && getTag(new WeakMap) != weakMapTag)) {
  getTag = function(value) {
    var result = baseGetTag(value),
        Ctor = result == objectTag ? value.constructor : undefined,
        ctorString = Ctor ? toSource(Ctor) : '';

    if (ctorString) {
      switch (ctorString) {
        case dataViewCtorString: return dataViewTag;
        case mapCtorString: return mapTag;
        case promiseCtorString: return promiseTag;
        case setCtorString: return setTag;
        case weakMapCtorString: return weakMapTag;
      }
    }
    return result;
  };
}

module.exports = getTag;
/**
 * Gets the value at `key` of `object`.
 *
 * @private
 * @param {Object} [object] The object to query.
 * @param {string} key The key of the property to get.
 * @returns {*} Returns the property value.
 */
function getValue(object, key) {
  return object == null ? undefined : object[key];
}

module.exports = getValue;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max,
    nativeMin = Math.min;

/**
 * Gets the view, applying any `transforms` to the `start` and `end` positions.
 *
 * @private
 * @param {number} start The start of the view.
 * @param {number} end The end of the view.
 * @param {Array} transforms The transformations to apply to the view.
 * @returns {Object} Returns an object containing the `start` and `end`
 *  positions of the view.
 */
function getView(start, end, transforms) {
  var index = -1,
      length = transforms.length;

  while (++index < length) {
    var data = transforms[index],
        size = data.size;

    switch (data.type) {
      case 'drop':      start += size; break;
      case 'dropRight': end -= size; break;
      case 'take':      end = nativeMin(end, start + size); break;
      case 'takeRight': start = nativeMax(start, end - size); break;
    }
  }
  return { 'start': start, 'end': end };
}

module.exports = getView;
/** Used to match wrap detail comments. */
var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
    reSplitDetails = /,? & /;

/**
 * Extracts wrapper details from the `source` body comment.
 *
 * @private
 * @param {string} source The source to inspect.
 * @returns {Array} Returns the wrapper details.
 */
function getWrapDetails(source) {
  var match = source.match(reWrapDetails);
  return match ? match[1].split(reSplitDetails) : [];
}

module.exports = getWrapDetails;
var hashClear = require('./_hashClear'),
    hashDelete = require('./_hashDelete'),
    hashGet = require('./_hashGet'),
    hashHas = require('./_hashHas'),
    hashSet = require('./_hashSet');

/**
 * Creates a hash object.
 *
 * @private
 * @constructor
 * @param {Array} [entries] The key-value pairs to cache.
 */
function Hash(entries) {
  var index = -1,
      length = entries == null ? 0 : entries.length;

  this.clear();
  while (++index < length) {
    var entry = entries[index];
    this.set(entry[0], entry[1]);
  }
}

// Add methods to `Hash`.
Hash.prototype.clear = hashClear;
Hash.prototype['delete'] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;

module.exports = Hash;
var nativeCreate = require('./_nativeCreate');

/**
 * Removes all key-value entries from the hash.
 *
 * @private
 * @name clear
 * @memberOf Hash
 */
function hashClear() {
  this.__data__ = nativeCreate ? nativeCreate(null) : {};
  this.size = 0;
}

module.exports = hashClear;
/**
 * Removes `key` and its value from the hash.
 *
 * @private
 * @name delete
 * @memberOf Hash
 * @param {Object} hash The hash to modify.
 * @param {string} key The key of the value to remove.
 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
 */
function hashDelete(key) {
  var result = this.has(key) && delete this.__data__[key];
  this.size -= result ? 1 : 0;
  return result;
}

module.exports = hashDelete;
var nativeCreate = require('./_nativeCreate');

/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Gets the hash value for `key`.
 *
 * @private
 * @name get
 * @memberOf Hash
 * @param {string} key The key of the value to get.
 * @returns {*} Returns the entry value.
 */
function hashGet(key) {
  var data = this.__data__;
  if (nativeCreate) {
    var result = data[key];
    return result === HASH_UNDEFINED ? undefined : result;
  }
  return hasOwnProperty.call(data, key) ? data[key] : undefined;
}

module.exports = hashGet;
var nativeCreate = require('./_nativeCreate');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Checks if a hash value for `key` exists.
 *
 * @private
 * @name has
 * @memberOf Hash
 * @param {string} key The key of the entry to check.
 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
 */
function hashHas(key) {
  var data = this.__data__;
  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
}

module.exports = hashHas;
var nativeCreate = require('./_nativeCreate');

/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';

/**
 * Sets the hash `key` to `value`.
 *
 * @private
 * @name set
 * @memberOf Hash
 * @param {string} key The key of the value to set.
 * @param {*} value The value to set.
 * @returns {Object} Returns the hash instance.
 */
function hashSet(key, value) {
  var data = this.__data__;
  this.size += this.has(key) ? 0 : 1;
  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
  return this;
}

module.exports = hashSet;
var castPath = require('./_castPath'),
    isArguments = require('./isArguments'),
    isArray = require('./isArray'),
    isIndex = require('./_isIndex'),
    isLength = require('./isLength'),
    toKey = require('./_toKey');

/**
 * Checks if `path` exists on `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {Array|string} path The path to check.
 * @param {Function} hasFunc The function to check properties.
 * @returns {boolean} Returns `true` if `path` exists, else `false`.
 */
function hasPath(object, path, hasFunc) {
  path = castPath(path, object);

  var index = -1,
      length = path.length,
      result = false;

  while (++index < length) {
    var key = toKey(path[index]);
    if (!(result = object != null && hasFunc(object, key))) {
      break;
    }
    object = object[key];
  }
  if (result || ++index != length) {
    return result;
  }
  length = object == null ? 0 : object.length;
  return !!length && isLength(length) && isIndex(key, length) &&
    (isArray(object) || isArguments(object));
}

module.exports = hasPath;
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
    rsComboMarksRange = '\\u0300-\\u036f',
    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
    rsComboSymbolsRange = '\\u20d0-\\u20ff',
    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
    rsVarRange = '\\ufe0e\\ufe0f';

/** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d';

/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');

/**
 * Checks if `string` contains Unicode symbols.
 *
 * @private
 * @param {string} string The string to inspect.
 * @returns {boolean} Returns `true` if a symbol is found, else `false`.
 */
function hasUnicode(string) {
  return reHasUnicode.test(string);
}

module.exports = hasUnicode;
/** Used to detect strings that need a more robust regexp to match words. */
var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;

/**
 * Checks if `string` contains a word composed of Unicode symbols.
 *
 * @private
 * @param {string} string The string to inspect.
 * @returns {boolean} Returns `true` if a word is found, else `false`.
 */
function hasUnicodeWord(string) {
  return reHasUnicodeWord.test(string);
}

module.exports = hasUnicodeWord;
/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Initializes an array clone.
 *
 * @private
 * @param {Array} array The array to clone.
 * @returns {Array} Returns the initialized clone.
 */
function initCloneArray(array) {
  var length = array.length,
      result = new array.constructor(length);

  // Add properties assigned by `RegExp#exec`.
  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
    result.index = array.index;
    result.input = array.input;
  }
  return result;
}

module.exports = initCloneArray;
var cloneArrayBuffer = require('./_cloneArrayBuffer'),
    cloneDataView = require('./_cloneDataView'),
    cloneRegExp = require('./_cloneRegExp'),
    cloneSymbol = require('./_cloneSymbol'),
    cloneTypedArray = require('./_cloneTypedArray');

/** `Object#toString` result references. */
var boolTag = '[object Boolean]',
    dateTag = '[object Date]',
    mapTag = '[object Map]',
    numberTag = '[object Number]',
    regexpTag = '[object RegExp]',
    setTag = '[object Set]',
    stringTag = '[object String]',
    symbolTag = '[object Symbol]';

var arrayBufferTag = '[object ArrayBuffer]',
    dataViewTag = '[object DataView]',
    float32Tag = '[object Float32Array]',
    float64Tag = '[object Float64Array]',
    int8Tag = '[object Int8Array]',
    int16Tag = '[object Int16Array]',
    int32Tag = '[object Int32Array]',
    uint8Tag = '[object Uint8Array]',
    uint8ClampedTag = '[object Uint8ClampedArray]',
    uint16Tag = '[object Uint16Array]',
    uint32Tag = '[object Uint32Array]';

/**
 * Initializes an object clone based on its `toStringTag`.
 *
 * **Note:** This function only supports cloning values with tags of
 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
 *
 * @private
 * @param {Object} object The object to clone.
 * @param {string} tag The `toStringTag` of the object to clone.
 * @param {boolean} [isDeep] Specify a deep clone.
 * @returns {Object} Returns the initialized clone.
 */
function initCloneByTag(object, tag, isDeep) {
  var Ctor = object.constructor;
  switch (tag) {
    case arrayBufferTag:
      return cloneArrayBuffer(object);

    case boolTag:
    case dateTag:
      return new Ctor(+object);

    case dataViewTag:
      return cloneDataView(object, isDeep);

    case float32Tag: case float64Tag:
    case int8Tag: case int16Tag: case int32Tag:
    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
      return cloneTypedArray(object, isDeep);

    case mapTag:
      return new Ctor;

    case numberTag:
    case stringTag:
      return new Ctor(object);

    case regexpTag:
      return cloneRegExp(object);

    case setTag:
      return new Ctor;

    case symbolTag:
      return cloneSymbol(object);
  }
}

module.exports = initCloneByTag;
var baseCreate = require('./_baseCreate'),
    getPrototype = require('./_getPrototype'),
    isPrototype = require('./_isPrototype');

/**
 * Initializes an object clone.
 *
 * @private
 * @param {Object} object The object to clone.
 * @returns {Object} Returns the initialized clone.
 */
function initCloneObject(object) {
  return (typeof object.constructor == 'function' && !isPrototype(object))
    ? baseCreate(getPrototype(object))
    : {};
}

module.exports = initCloneObject;
/** Used to match wrap detail comments. */
var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;

/**
 * Inserts wrapper `details` in a comment at the top of the `source` body.
 *
 * @private
 * @param {string} source The source to modify.
 * @returns {Array} details The details to insert.
 * @returns {string} Returns the modified source.
 */
function insertWrapDetails(source, details) {
  var length = details.length;
  if (!length) {
    return source;
  }
  var lastIndex = length - 1;
  details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
  details = details.join(length > 2 ? ', ' : ' ');
  return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
}

module.exports = insertWrapDetails;
var Symbol = require('./_Symbol'),
    isArguments = require('./isArguments'),
    isArray = require('./isArray');

/** Built-in value references. */
var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;

/**
 * Checks if `value` is a flattenable `arguments` object or array.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
 */
function isFlattenable(value) {
  return isArray(value) || isArguments(value) ||
    !!(spreadableSymbol && value && value[spreadableSymbol]);
}

module.exports = isFlattenable;
/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/** Used to detect unsigned integer values. */
var reIsUint = /^(?:0|[1-9]\d*)$/;

/**
 * Checks if `value` is a valid array-like index.
 *
 * @private
 * @param {*} value The value to check.
 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
 */
function isIndex(value, length) {
  var type = typeof value;
  length = length == null ? MAX_SAFE_INTEGER : length;

  return !!length &&
    (type == 'number' ||
      (type != 'symbol' && reIsUint.test(value))) &&
        (value > -1 && value % 1 == 0 && value < length);
}

module.exports = isIndex;
var eq = require('./eq'),
    isArrayLike = require('./isArrayLike'),
    isIndex = require('./_isIndex'),
    isObject = require('./isObject');

/**
 * Checks if the given arguments are from an iteratee call.
 *
 * @private
 * @param {*} value The potential iteratee value argument.
 * @param {*} index The potential iteratee index or key argument.
 * @param {*} object The potential iteratee object argument.
 * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
 *  else `false`.
 */
function isIterateeCall(value, index, object) {
  if (!isObject(object)) {
    return false;
  }
  var type = typeof index;
  if (type == 'number'
        ? (isArrayLike(object) && isIndex(index, object.length))
        : (type == 'string' && index in object)
      ) {
    return eq(object[index], value);
  }
  return false;
}

module.exports = isIterateeCall;
var isArray = require('./isArray'),
    isSymbol = require('./isSymbol');

/** Used to match property names within property paths. */
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
    reIsPlainProp = /^\w*$/;

/**
 * Checks if `value` is a property name and not a property path.
 *
 * @private
 * @param {*} value The value to check.
 * @param {Object} [object] The object to query keys on.
 * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
 */
function isKey(value, object) {
  if (isArray(value)) {
    return false;
  }
  var type = typeof value;
  if (type == 'number' || type == 'symbol' || type == 'boolean' ||
      value == null || isSymbol(value)) {
    return true;
  }
  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
    (object != null && value in Object(object));
}

module.exports = isKey;
/**
 * Checks if `value` is suitable for use as unique object key.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
 */
function isKeyable(value) {
  var type = typeof value;
  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
    ? (value !== '__proto__')
    : (value === null);
}

module.exports = isKeyable;
var LazyWrapper = require('./_LazyWrapper'),
    getData = require('./_getData'),
    getFuncName = require('./_getFuncName'),
    lodash = require('./wrapperLodash');

/**
 * Checks if `func` has a lazy counterpart.
 *
 * @private
 * @param {Function} func The function to check.
 * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
 *  else `false`.
 */
function isLaziable(func) {
  var funcName = getFuncName(func),
      other = lodash[funcName];

  if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
    return false;
  }
  if (func === other) {
    return true;
  }
  var data = getData(other);
  return !!data && func === data[0];
}

module.exports = isLaziable;
var coreJsData = require('./_coreJsData'),
    isFunction = require('./isFunction'),
    stubFalse = require('./stubFalse');

/**
 * Checks if `func` is capable of being masked.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
 */
var isMaskable = coreJsData ? isFunction : stubFalse;

module.exports = isMaskable;
var coreJsData = require('./_coreJsData');

/** Used to detect methods masquerading as native. */
var maskSrcKey = (function() {
  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
  return uid ? ('Symbol(src)_1.' + uid) : '';
}());

/**
 * Checks if `func` has its source masked.
 *
 * @private
 * @param {Function} func The function to check.
 * @returns {boolean} Returns `true` if `func` is masked, else `false`.
 */
function isMasked(func) {
  return !!maskSrcKey && (maskSrcKey in func);
}

module.exports = isMasked;
/** Used for built-in method references. */
var objectProto = Object.prototype;

/**
 * Checks if `value` is likely a prototype object.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
 */
function isPrototype(value) {
  var Ctor = value && value.constructor,
      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

  return value === proto;
}

module.exports = isPrototype;
var isObject = require('./isObject');

/**
 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
 *
 * @private
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` if suitable for strict
 *  equality comparisons, else `false`.
 */
function isStrictComparable(value) {
  return value === value && !isObject(value);
}

module.exports = isStrictComparable;
/**
 * Converts `iterator` to an array.
 *
 * @private
 * @param {Object} iterator The iterator to convert.
 * @returns {Array} Returns the converted array.
 */
function iteratorToArray(iterator) {
  var data,
      result = [];

  while (!(data = iterator.next()).done) {
    result.push(data.value);
  }
  return result;
}

module.exports = iteratorToArray;
var LazyWrapper = require('./_LazyWrapper'),
    copyArray = require('./_copyArray');

/**
 * Creates a clone of the lazy wrapper object.
 *
 * @private
 * @name clone
 * @memberOf LazyWrapper
 * @returns {Object} Returns the cloned `LazyWrapper` object.
 */
function lazyClone() {
  var result = new LazyWrapper(this.__wrapped__);
  result.__actions__ = copyArray(this.__actions__);
  result.__dir__ = this.__dir__;
  result.__filtered__ = this.__filtered__;
  result.__iteratees__ = copyArray(this.__iteratees__);
  result.__takeCount__ = this.__takeCount__;
  result.__views__ = copyArray(this.__views__);
  return result;
}

module.exports = lazyClone;
var LazyWrapper = require('./_LazyWrapper');

/**
 * Reverses the direction of lazy iteration.
 *
 * @private
 * @name reverse
 * @memberOf LazyWrapper
 * @returns {Object} Returns the new reversed `LazyWrapper` object.
 */
function lazyReverse() {
  if (this.__filtered__) {
    var result = new LazyWrapper(this);
    result.__dir__ = -1;
    result.__filtered__ = true;
  } else {
    result = this.clone();
    result.__dir__ *= -1;
  }
  return result;
}

module.exports = lazyReverse;
var baseWrapperValue = require('./_baseWrapperValue'),
    getView = require('./_getView'),
    isArray = require('./isArray');

/** Used to indicate the type of lazy iteratees. */
var LAZY_FILTER_FLAG = 1,
    LAZY_MAP_FLAG = 2;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMin = Math.min;

/**
 * Extracts the unwrapped value from its lazy wrapper.
 *
 * @private
 * @name value
 * @memberOf LazyWrapper
 * @returns {*} Returns the unwrapped value.
 */
function lazyValue() {
  var array = this.__wrapped__.value(),
      dir = this.__dir__,
      isArr = isArray(array),
      isRight = dir < 0,
      arrLength = isArr ? array.length : 0,
      view = getView(0, arrLength, this.__views__),
      start = view.start,
      end = view.end,
      length = end - start,
      index = isRight ? end : (start - 1),
      iteratees = this.__iteratees__,
      iterLength = iteratees.length,
      resIndex = 0,
      takeCount = nativeMin(length, this.__takeCount__);

  if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
    return baseWrapperValue(array, this.__actions__);
  }
  var result = [];

  outer:
  while (length-- && resIndex < takeCount) {
    index += dir;

    var iterIndex = -1,
        value = array[index];

    while (++iterIndex < iterLength) {
      var data = iteratees[iterIndex],
          iteratee = data.iteratee,
          type = data.type,
          computed = iteratee(value);

      if (type == LAZY_MAP_FLAG) {
        value = computed;
      } else if (!computed) {
        if (type == LAZY_FILTER_FLAG) {
          continue outer;
        } else {
          break outer;
        }
      }
    }
    result[resIndex++] = value;
  }
  return result;
}

module.exports = lazyValue;
var baseCreate = require('./_baseCreate'),
    baseLodash = require('./_baseLodash');

/** Used as references for the maximum length and index of an array. */
var MAX_ARRAY_LENGTH = 4294967295;

/**
 * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
 *
 * @private
 * @constructor
 * @param {*} value The value to wrap.
 */
function LazyWrapper(value) {
  this.__wrapped__ = value;
  this.__actions__ = [];
  this.__dir__ = 1;
  this.__filtered__ = false;
  this.__iteratees__ = [];
  this.__takeCount__ = MAX_ARRAY_LENGTH;
  this.__views__ = [];
}

// Ensure `LazyWrapper` is an instance of `baseLodash`.
LazyWrapper.prototype = baseCreate(baseLodash.prototype);
LazyWrapper.prototype.constructor = LazyWrapper;

module.exports = LazyWrapper;
var listCacheClear = require('./_listCacheClear'),
    listCacheDelete = require('./_listCacheDelete'),
    listCacheGet = require('./_listCacheGet'),
    listCacheHas = require('./_listCacheHas'),
    listCacheSet = require('./_listCacheSet');

/**
 * Creates an list cache object.
 *
 * @private
 * @constructor
 * @param {Array} [entries] The key-value pairs to cache.
 */
function ListCache(entries) {
  var index = -1,
      length = entries == null ? 0 : entries.length;

  this.clear();
  while (++index < length) {
    var entry = entries[index];
    this.set(entry[0], entry[1]);
  }
}

// Add methods to `ListCache`.
ListCache.prototype.clear = listCacheClear;
ListCache.prototype['delete'] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;

module.exports = ListCache;
/**
 * Removes all key-value entries from the list cache.
 *
 * @private
 * @name clear
 * @memberOf ListCache
 */
function listCacheClear() {
  this.__data__ = [];
  this.size = 0;
}

module.exports = listCacheClear;
var assocIndexOf = require('./_assocIndexOf');

/** Used for built-in method references. */
var arrayProto = Array.prototype;

/** Built-in value references. */
var splice = arrayProto.splice;

/**
 * Removes `key` and its value from the list cache.
 *
 * @private
 * @name delete
 * @memberOf ListCache
 * @param {string} key The key of the value to remove.
 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
 */
function listCacheDelete(key) {
  var data = this.__data__,
      index = assocIndexOf(data, key);

  if (index < 0) {
    return false;
  }
  var lastIndex = data.length - 1;
  if (index == lastIndex) {
    data.pop();
  } else {
    splice.call(data, index, 1);
  }
  --this.size;
  return true;
}

module.exports = listCacheDelete;
var assocIndexOf = require('./_assocIndexOf');

/**
 * Gets the list cache value for `key`.
 *
 * @private
 * @name get
 * @memberOf ListCache
 * @param {string} key The key of the value to get.
 * @returns {*} Returns the entry value.
 */
function listCacheGet(key) {
  var data = this.__data__,
      index = assocIndexOf(data, key);

  return index < 0 ? undefined : data[index][1];
}

module.exports = listCacheGet;
var assocIndexOf = require('./_assocIndexOf');

/**
 * Checks if a list cache value for `key` exists.
 *
 * @private
 * @name has
 * @memberOf ListCache
 * @param {string} key The key of the entry to check.
 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
 */
function listCacheHas(key) {
  return assocIndexOf(this.__data__, key) > -1;
}

module.exports = listCacheHas;
var assocIndexOf = require('./_assocIndexOf');

/**
 * Sets the list cache `key` to `value`.
 *
 * @private
 * @name set
 * @memberOf ListCache
 * @param {string} key The key of the value to set.
 * @param {*} value The value to set.
 * @returns {Object} Returns the list cache instance.
 */
function listCacheSet(key, value) {
  var data = this.__data__,
      index = assocIndexOf(data, key);

  if (index < 0) {
    ++this.size;
    data.push([key, value]);
  } else {
    data[index][1] = value;
  }
  return this;
}

module.exports = listCacheSet;
var baseCreate = require('./_baseCreate'),
    baseLodash = require('./_baseLodash');

/**
 * The base constructor for creating `lodash` wrapper objects.
 *
 * @private
 * @param {*} value The value to wrap.
 * @param {boolean} [chainAll] Enable explicit method chain sequences.
 */
function LodashWrapper(value, chainAll) {
  this.__wrapped__ = value;
  this.__actions__ = [];
  this.__chain__ = !!chainAll;
  this.__index__ = 0;
  this.__values__ = undefined;
}

LodashWrapper.prototype = baseCreate(baseLodash.prototype);
LodashWrapper.prototype.constructor = LodashWrapper;

module.exports = LodashWrapper;
var getNative = require('./_getNative'),
    root = require('./_root');

/* Built-in method references that are verified to be native. */
var Map = getNative(root, 'Map');

module.exports = Map;
var mapCacheClear = require('./_mapCacheClear'),
    mapCacheDelete = require('./_mapCacheDelete'),
    mapCacheGet = require('./_mapCacheGet'),
    mapCacheHas = require('./_mapCacheHas'),
    mapCacheSet = require('./_mapCacheSet');

/**
 * Creates a map cache object to store key-value pairs.
 *
 * @private
 * @constructor
 * @param {Array} [entries] The key-value pairs to cache.
 */
function MapCache(entries) {
  var index = -1,
      length = entries == null ? 0 : entries.length;

  this.clear();
  while (++index < length) {
    var entry = entries[index];
    this.set(entry[0], entry[1]);
  }
}

// Add methods to `MapCache`.
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype['delete'] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;

module.exports = MapCache;
var Hash = require('./_Hash'),
    ListCache = require('./_ListCache'),
    Map = require('./_Map');

/**
 * Removes all key-value entries from the map.
 *
 * @private
 * @name clear
 * @memberOf MapCache
 */
function mapCacheClear() {
  this.size = 0;
  this.__data__ = {
    'hash': new Hash,
    'map': new (Map || ListCache),
    'string': new Hash
  };
}

module.exports = mapCacheClear;
var getMapData = require('./_getMapData');

/**
 * Removes `key` and its value from the map.
 *
 * @private
 * @name delete
 * @memberOf MapCache
 * @param {string} key The key of the value to remove.
 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
 */
function mapCacheDelete(key) {
  var result = getMapData(this, key)['delete'](key);
  this.size -= result ? 1 : 0;
  return result;
}

module.exports = mapCacheDelete;
var getMapData = require('./_getMapData');

/**
 * Gets the map value for `key`.
 *
 * @private
 * @name get
 * @memberOf MapCache
 * @param {string} key The key of the value to get.
 * @returns {*} Returns the entry value.
 */
function mapCacheGet(key) {
  return getMapData(this, key).get(key);
}

module.exports = mapCacheGet;
var getMapData = require('./_getMapData');

/**
 * Checks if a map value for `key` exists.
 *
 * @private
 * @name has
 * @memberOf MapCache
 * @param {string} key The key of the entry to check.
 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
 */
function mapCacheHas(key) {
  return getMapData(this, key).has(key);
}

module.exports = mapCacheHas;
var getMapData = require('./_getMapData');

/**
 * Sets the map `key` to `value`.
 *
 * @private
 * @name set
 * @memberOf MapCache
 * @param {string} key The key of the value to set.
 * @param {*} value The value to set.
 * @returns {Object} Returns the map cache instance.
 */
function mapCacheSet(key, value) {
  var data = getMapData(this, key),
      size = data.size;

  data.set(key, value);
  this.size += data.size == size ? 0 : 1;
  return this;
}

module.exports = mapCacheSet;
/**
 * Converts `map` to its key-value pairs.
 *
 * @private
 * @param {Object} map The map to convert.
 * @returns {Array} Returns the key-value pairs.
 */
function mapToArray(map) {
  var index = -1,
      result = Array(map.size);

  map.forEach(function(value, key) {
    result[++index] = [key, value];
  });
  return result;
}

module.exports = mapToArray;
/**
 * A specialized version of `matchesProperty` for source values suitable
 * for strict equality comparisons, i.e. `===`.
 *
 * @private
 * @param {string} key The key of the property to get.
 * @param {*} srcValue The value to match.
 * @returns {Function} Returns the new spec function.
 */
function matchesStrictComparable(key, srcValue) {
  return function(object) {
    if (object == null) {
      return false;
    }
    return object[key] === srcValue &&
      (srcValue !== undefined || (key in Object(object)));
  };
}

module.exports = matchesStrictComparable;
var memoize = require('./memoize');

/** Used as the maximum memoize cache size. */
var MAX_MEMOIZE_SIZE = 500;

/**
 * A specialized version of `_.memoize` which clears the memoized function's
 * cache when it exceeds `MAX_MEMOIZE_SIZE`.
 *
 * @private
 * @param {Function} func The function to have its output memoized.
 * @returns {Function} Returns the new memoized function.
 */
function memoizeCapped(func) {
  var result = memoize(func, function(key) {
    if (cache.size === MAX_MEMOIZE_SIZE) {
      cache.clear();
    }
    return key;
  });

  var cache = result.cache;
  return result;
}

module.exports = memoizeCapped;
var composeArgs = require('./_composeArgs'),
    composeArgsRight = require('./_composeArgsRight'),
    replaceHolders = require('./_replaceHolders');

/** Used as the internal argument placeholder. */
var PLACEHOLDER = '__lodash_placeholder__';

/** Used to compose bitmasks for function metadata. */
var WRAP_BIND_FLAG = 1,
    WRAP_BIND_KEY_FLAG = 2,
    WRAP_CURRY_BOUND_FLAG = 4,
    WRAP_CURRY_FLAG = 8,
    WRAP_ARY_FLAG = 128,
    WRAP_REARG_FLAG = 256;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMin = Math.min;

/**
 * Merges the function metadata of `source` into `data`.
 *
 * Merging metadata reduces the number of wrappers used to invoke a function.
 * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
 * may be applied regardless of execution order. Methods like `_.ary` and
 * `_.rearg` modify function arguments, making the order in which they are
 * executed important, preventing the merging of metadata. However, we make
 * an exception for a safe combined case where curried functions have `_.ary`
 * and or `_.rearg` applied.
 *
 * @private
 * @param {Array} data The destination metadata.
 * @param {Array} source The source metadata.
 * @returns {Array} Returns `data`.
 */
function mergeData(data, source) {
  var bitmask = data[1],
      srcBitmask = source[1],
      newBitmask = bitmask | srcBitmask,
      isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);

  var isCombo =
    ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
    ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
    ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));

  // Exit early if metadata can't be merged.
  if (!(isCommon || isCombo)) {
    return data;
  }
  // Use source `thisArg` if available.
  if (srcBitmask & WRAP_BIND_FLAG) {
    data[2] = source[2];
    // Set when currying a bound function.
    newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
  }
  // Compose partial arguments.
  var value = source[3];
  if (value) {
    var partials = data[3];
    data[3] = partials ? composeArgs(partials, value, source[4]) : value;
    data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
  }
  // Compose partial right arguments.
  value = source[5];
  if (value) {
    partials = data[5];
    data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
    data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
  }
  // Use source `argPos` if available.
  value = source[7];
  if (value) {
    data[7] = value;
  }
  // Use source `ary` if it's smaller.
  if (srcBitmask & WRAP_ARY_FLAG) {
    data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
  }
  // Use source `arity` if one is not provided.
  if (data[9] == null) {
    data[9] = source[9];
  }
  // Use source `func` and merge bitmasks.
  data[0] = source[0];
  data[1] = newBitmask;

  return data;
}

module.exports = mergeData;
var WeakMap = require('./_WeakMap');

/** Used to store function metadata. */
var metaMap = WeakMap && new WeakMap;

module.exports = metaMap;
var getNative = require('./_getNative');

/* Built-in method references that are verified to be native. */
var nativeCreate = getNative(Object, 'create');

module.exports = nativeCreate;
var overArg = require('./_overArg');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeKeys = overArg(Object.keys, Object);

module.exports = nativeKeys;
/**
 * This function is like
 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
 * except that it includes inherited enumerable properties.
 *
 * @private
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 */
function nativeKeysIn(object) {
  var result = [];
  if (object != null) {
    for (var key in Object(object)) {
      result.push(key);
    }
  }
  return result;
}

module.exports = nativeKeysIn;
var freeGlobal = require('./_freeGlobal');

/** Detect free variable `exports`. */
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

/** Detect free variable `module`. */
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;

/** Detect free variable `process` from Node.js. */
var freeProcess = moduleExports && freeGlobal.process;

/** Used to access faster Node.js helpers. */
var nodeUtil = (function() {
  try {
    // Use `util.types` for Node.js 10+.
    var types = freeModule && freeModule.require && freeModule.require('util').types;

    if (types) {
      return types;
    }

    // Legacy `process.binding('util')` for Node.js < 10.
    return freeProcess && freeProcess.binding && freeProcess.binding('util');
  } catch (e) {}
}());

module.exports = nodeUtil;
/** Used for built-in method references. */
var objectProto = Object.prototype;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString = objectProto.toString;

/**
 * Converts `value` to a string using `Object.prototype.toString`.
 *
 * @private
 * @param {*} value The value to convert.
 * @returns {string} Returns the converted string.
 */
function objectToString(value) {
  return nativeObjectToString.call(value);
}

module.exports = objectToString;
/**
 * Creates a unary function that invokes `func` with its argument transformed.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {Function} transform The argument transform.
 * @returns {Function} Returns the new function.
 */
function overArg(func, transform) {
  return function(arg) {
    return func(transform(arg));
  };
}

module.exports = overArg;
var apply = require('./_apply');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;

/**
 * A specialized version of `baseRest` which transforms the rest array.
 *
 * @private
 * @param {Function} func The function to apply a rest parameter to.
 * @param {number} [start=func.length-1] The start position of the rest parameter.
 * @param {Function} transform The rest array transform.
 * @returns {Function} Returns the new function.
 */
function overRest(func, start, transform) {
  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
  return function() {
    var args = arguments,
        index = -1,
        length = nativeMax(args.length - start, 0),
        array = Array(length);

    while (++index < length) {
      array[index] = args[start + index];
    }
    index = -1;
    var otherArgs = Array(start + 1);
    while (++index < start) {
      otherArgs[index] = args[index];
    }
    otherArgs[start] = transform(array);
    return apply(func, this, otherArgs);
  };
}

module.exports = overRest;
var baseGet = require('./_baseGet'),
    baseSlice = require('./_baseSlice');

/**
 * Gets the parent value at `path` of `object`.
 *
 * @private
 * @param {Object} object The object to query.
 * @param {Array} path The path to get the parent value of.
 * @returns {*} Returns the parent value.
 */
function parent(object, path) {
  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
}

module.exports = parent;
var getNative = require('./_getNative'),
    root = require('./_root');

/* Built-in method references that are verified to be native. */
var Promise = getNative(root, 'Promise');

module.exports = Promise;
/** Used to lookup unminified function names. */
var realNames = {};

module.exports = realNames;
/** Used to match template delimiters. */
var reEscape = /<%-([\s\S]+?)%>/g;

module.exports = reEscape;
/** Used to match template delimiters. */
var reEvaluate = /<%([\s\S]+?)%>/g;

module.exports = reEvaluate;
/** Used to match template delimiters. */
var reInterpolate = /<%=([\s\S]+?)%>/g;

module.exports = reInterpolate;
var copyArray = require('./_copyArray'),
    isIndex = require('./_isIndex');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMin = Math.min;

/**
 * Reorder `array` according to the specified indexes where the element at
 * the first index is assigned as the first element, the element at
 * the second index is assigned as the second element, and so on.
 *
 * @private
 * @param {Array} array The array to reorder.
 * @param {Array} indexes The arranged array indexes.
 * @returns {Array} Returns `array`.
 */
function reorder(array, indexes) {
  var arrLength = array.length,
      length = nativeMin(indexes.length, arrLength),
      oldArray = copyArray(array);

  while (length--) {
    var index = indexes[length];
    array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
  }
  return array;
}

module.exports = reorder;
/** Used as the internal argument placeholder. */
var PLACEHOLDER = '__lodash_placeholder__';

/**
 * Replaces all `placeholder` elements in `array` with an internal placeholder
 * and returns an array of their indexes.
 *
 * @private
 * @param {Array} array The array to modify.
 * @param {*} placeholder The placeholder to replace.
 * @returns {Array} Returns the new array of placeholder indexes.
 */
function replaceHolders(array, placeholder) {
  var index = -1,
      length = array.length,
      resIndex = 0,
      result = [];

  while (++index < length) {
    var value = array[index];
    if (value === placeholder || value === PLACEHOLDER) {
      array[index] = PLACEHOLDER;
      result[resIndex++] = index;
    }
  }
  return result;
}

module.exports = replaceHolders;
var freeGlobal = require('./_freeGlobal');

/** Detect free variable `self`. */
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

/** Used as a reference to the global object. */
var root = freeGlobal || freeSelf || Function('return this')();

module.exports = root;
/**
 * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
 *
 * @private
 * @param {Object} object The object to query.
 * @param {string} key The key of the property to get.
 * @returns {*} Returns the property value.
 */
function safeGet(object, key) {
  if (key === 'constructor' && typeof object[key] === 'function') {
    return;
  }

  if (key == '__proto__') {
    return;
  }

  return object[key];
}

module.exports = safeGet;
var getNative = require('./_getNative'),
    root = require('./_root');

/* Built-in method references that are verified to be native. */
var Set = getNative(root, 'Set');

module.exports = Set;
var MapCache = require('./_MapCache'),
    setCacheAdd = require('./_setCacheAdd'),
    setCacheHas = require('./_setCacheHas');

/**
 *
 * Creates an array cache object to store unique values.
 *
 * @private
 * @constructor
 * @param {Array} [values] The values to cache.
 */
function SetCache(values) {
  var index = -1,
      length = values == null ? 0 : values.length;

  this.__data__ = new MapCache;
  while (++index < length) {
    this.add(values[index]);
  }
}

// Add methods to `SetCache`.
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
SetCache.prototype.has = setCacheHas;

module.exports = SetCache;
/** Used to stand-in for `undefined` hash values. */
var HASH_UNDEFINED = '__lodash_hash_undefined__';

/**
 * Adds `value` to the array cache.
 *
 * @private
 * @name add
 * @memberOf SetCache
 * @alias push
 * @param {*} value The value to cache.
 * @returns {Object} Returns the cache instance.
 */
function setCacheAdd(value) {
  this.__data__.set(value, HASH_UNDEFINED);
  return this;
}

module.exports = setCacheAdd;
/**
 * Checks if `value` is in the array cache.
 *
 * @private
 * @name has
 * @memberOf SetCache
 * @param {*} value The value to search for.
 * @returns {number} Returns `true` if `value` is found, else `false`.
 */
function setCacheHas(value) {
  return this.__data__.has(value);
}

module.exports = setCacheHas;
var baseSetData = require('./_baseSetData'),
    shortOut = require('./_shortOut');

/**
 * Sets metadata for `func`.
 *
 * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
 * period of time, it will trip its breaker and transition to an identity
 * function to avoid garbage collection pauses in V8. See
 * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
 * for more details.
 *
 * @private
 * @param {Function} func The function to associate metadata with.
 * @param {*} data The metadata.
 * @returns {Function} Returns `func`.
 */
var setData = shortOut(baseSetData);

module.exports = setData;
/**
 * Converts `set` to an array of its values.
 *
 * @private
 * @param {Object} set The set to convert.
 * @returns {Array} Returns the values.
 */
function setToArray(set) {
  var index = -1,
      result = Array(set.size);

  set.forEach(function(value) {
    result[++index] = value;
  });
  return result;
}

module.exports = setToArray;
/**
 * Converts `set` to its value-value pairs.
 *
 * @private
 * @param {Object} set The set to convert.
 * @returns {Array} Returns the value-value pairs.
 */
function setToPairs(set) {
  var index = -1,
      result = Array(set.size);

  set.forEach(function(value) {
    result[++index] = [value, value];
  });
  return result;
}

module.exports = setToPairs;
var baseSetToString = require('./_baseSetToString'),
    shortOut = require('./_shortOut');

/**
 * Sets the `toString` method of `func` to return `string`.
 *
 * @private
 * @param {Function} func The function to modify.
 * @param {Function} string The `toString` result.
 * @returns {Function} Returns `func`.
 */
var setToString = shortOut(baseSetToString);

module.exports = setToString;
var getWrapDetails = require('./_getWrapDetails'),
    insertWrapDetails = require('./_insertWrapDetails'),
    setToString = require('./_setToString'),
    updateWrapDetails = require('./_updateWrapDetails');

/**
 * Sets the `toString` method of `wrapper` to mimic the source of `reference`
 * with wrapper details in a comment at the top of the source body.
 *
 * @private
 * @param {Function} wrapper The function to modify.
 * @param {Function} reference The reference function.
 * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
 * @returns {Function} Returns `wrapper`.
 */
function setWrapToString(wrapper, reference, bitmask) {
  var source = (reference + '');
  return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
}

module.exports = setWrapToString;
/** Used to detect hot functions by number of calls within a span of milliseconds. */
var HOT_COUNT = 800,
    HOT_SPAN = 16;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeNow = Date.now;

/**
 * Creates a function that'll short out and invoke `identity` instead
 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
 * milliseconds.
 *
 * @private
 * @param {Function} func The function to restrict.
 * @returns {Function} Returns the new shortable function.
 */
function shortOut(func) {
  var count = 0,
      lastCalled = 0;

  return function() {
    var stamp = nativeNow(),
        remaining = HOT_SPAN - (stamp - lastCalled);

    lastCalled = stamp;
    if (remaining > 0) {
      if (++count >= HOT_COUNT) {
        return arguments[0];
      }
    } else {
      count = 0;
    }
    return func.apply(undefined, arguments);
  };
}

module.exports = shortOut;
var baseRandom = require('./_baseRandom');

/**
 * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
 *
 * @private
 * @param {Array} array The array to shuffle.
 * @param {number} [size=array.length] The size of `array`.
 * @returns {Array} Returns `array`.
 */
function shuffleSelf(array, size) {
  var index = -1,
      length = array.length,
      lastIndex = length - 1;

  size = size === undefined ? length : size;
  while (++index < size) {
    var rand = baseRandom(index, lastIndex),
        value = array[rand];

    array[rand] = array[index];
    array[index] = value;
  }
  array.length = size;
  return array;
}

module.exports = shuffleSelf;
var ListCache = require('./_ListCache'),
    stackClear = require('./_stackClear'),
    stackDelete = require('./_stackDelete'),
    stackGet = require('./_stackGet'),
    stackHas = require('./_stackHas'),
    stackSet = require('./_stackSet');

/**
 * Creates a stack cache object to store key-value pairs.
 *
 * @private
 * @constructor
 * @param {Array} [entries] The key-value pairs to cache.
 */
function Stack(entries) {
  var data = this.__data__ = new ListCache(entries);
  this.size = data.size;
}

// Add methods to `Stack`.
Stack.prototype.clear = stackClear;
Stack.prototype['delete'] = stackDelete;
Stack.prototype.get = stackGet;
Stack.prototype.has = stackHas;
Stack.prototype.set = stackSet;

module.exports = Stack;
var ListCache = require('./_ListCache');

/**
 * Removes all key-value entries from the stack.
 *
 * @private
 * @name clear
 * @memberOf Stack
 */
function stackClear() {
  this.__data__ = new ListCache;
  this.size = 0;
}

module.exports = stackClear;
/**
 * Removes `key` and its value from the stack.
 *
 * @private
 * @name delete
 * @memberOf Stack
 * @param {string} key The key of the value to remove.
 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
 */
function stackDelete(key) {
  var data = this.__data__,
      result = data['delete'](key);

  this.size = data.size;
  return result;
}

module.exports = stackDelete;
/**
 * Gets the stack value for `key`.
 *
 * @private
 * @name get
 * @memberOf Stack
 * @param {string} key The key of the value to get.
 * @returns {*} Returns the entry value.
 */
function stackGet(key) {
  return this.__data__.get(key);
}

module.exports = stackGet;
/**
 * Checks if a stack value for `key` exists.
 *
 * @private
 * @name has
 * @memberOf Stack
 * @param {string} key The key of the entry to check.
 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
 */
function stackHas(key) {
  return this.__data__.has(key);
}

module.exports = stackHas;
var ListCache = require('./_ListCache'),
    Map = require('./_Map'),
    MapCache = require('./_MapCache');

/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;

/**
 * Sets the stack `key` to `value`.
 *
 * @private
 * @name set
 * @memberOf Stack
 * @param {string} key The key of the value to set.
 * @param {*} value The value to set.
 * @returns {Object} Returns the stack cache instance.
 */
function stackSet(key, value) {
  var data = this.__data__;
  if (data instanceof ListCache) {
    var pairs = data.__data__;
    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
      pairs.push([key, value]);
      this.size = ++data.size;
      return this;
    }
    data = this.__data__ = new MapCache(pairs);
  }
  data.set(key, value);
  this.size = data.size;
  return this;
}

module.exports = stackSet;
/**
 * A specialized version of `_.indexOf` which performs strict equality
 * comparisons of values, i.e. `===`.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @param {number} fromIndex The index to search from.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function strictIndexOf(array, value, fromIndex) {
  var index = fromIndex - 1,
      length = array.length;

  while (++index < length) {
    if (array[index] === value) {
      return index;
    }
  }
  return -1;
}

module.exports = strictIndexOf;
/**
 * A specialized version of `_.lastIndexOf` which performs strict equality
 * comparisons of values, i.e. `===`.
 *
 * @private
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @param {number} fromIndex The index to search from.
 * @returns {number} Returns the index of the matched value, else `-1`.
 */
function strictLastIndexOf(array, value, fromIndex) {
  var index = fromIndex + 1;
  while (index--) {
    if (array[index] === value) {
      return index;
    }
  }
  return index;
}

module.exports = strictLastIndexOf;
var asciiSize = require('./_asciiSize'),
    hasUnicode = require('./_hasUnicode'),
    unicodeSize = require('./_unicodeSize');

/**
 * Gets the number of symbols in `string`.
 *
 * @private
 * @param {string} string The string to inspect.
 * @returns {number} Returns the string size.
 */
function stringSize(string) {
  return hasUnicode(string)
    ? unicodeSize(string)
    : asciiSize(string);
}

module.exports = stringSize;
var asciiToArray = require('./_asciiToArray'),
    hasUnicode = require('./_hasUnicode'),
    unicodeToArray = require('./_unicodeToArray');

/**
 * Converts `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function stringToArray(string) {
  return hasUnicode(string)
    ? unicodeToArray(string)
    : asciiToArray(string);
}

module.exports = stringToArray;
var memoizeCapped = require('./_memoizeCapped');

/** Used to match property names within property paths. */
var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;

/** Used to match backslashes in property paths. */
var reEscapeChar = /\\(\\)?/g;

/**
 * Converts `string` to a property path array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the property path array.
 */
var stringToPath = memoizeCapped(function(string) {
  var result = [];
  if (string.charCodeAt(0) === 46 /* . */) {
    result.push('');
  }
  string.replace(rePropName, function(match, number, quote, subString) {
    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
  });
  return result;
});

module.exports = stringToPath;
var root = require('./_root');

/** Built-in value references. */
var Symbol = root.Symbol;

module.exports = Symbol;
var isSymbol = require('./isSymbol');

/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;

/**
 * Converts `value` to a string key if it's not a string or symbol.
 *
 * @private
 * @param {*} value The value to inspect.
 * @returns {string|symbol} Returns the key.
 */
function toKey(value) {
  if (typeof value == 'string' || isSymbol(value)) {
    return value;
  }
  var result = (value + '');
  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
}

module.exports = toKey;
/** Used for built-in method references. */
var funcProto = Function.prototype;

/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;

/**
 * Converts `func` to its source code.
 *
 * @private
 * @param {Function} func The function to convert.
 * @returns {string} Returns the source code.
 */
function toSource(func) {
  if (func != null) {
    try {
      return funcToString.call(func);
    } catch (e) {}
    try {
      return (func + '');
    } catch (e) {}
  }
  return '';
}

module.exports = toSource;
/** Used to match a single whitespace character. */
var reWhitespace = /\s/;

/**
 * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
 * character of `string`.
 *
 * @private
 * @param {string} string The string to inspect.
 * @returns {number} Returns the index of the last non-whitespace character.
 */
function trimmedEndIndex(string) {
  var index = string.length;

  while (index-- && reWhitespace.test(string.charAt(index))) {}
  return index;
}

module.exports = trimmedEndIndex;
var root = require('./_root');

/** Built-in value references. */
var Uint8Array = root.Uint8Array;

module.exports = Uint8Array;
var basePropertyOf = require('./_basePropertyOf');

/** Used to map HTML entities to characters. */
var htmlUnescapes = {
  '&amp;': '&',
  '&lt;': '<',
  '&gt;': '>',
  '&quot;': '"',
  '&#39;': "'"
};

/**
 * Used by `_.unescape` to convert HTML entities to characters.
 *
 * @private
 * @param {string} chr The matched character to unescape.
 * @returns {string} Returns the unescaped character.
 */
var unescapeHtmlChar = basePropertyOf(htmlUnescapes);

module.exports = unescapeHtmlChar;
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
    rsComboMarksRange = '\\u0300-\\u036f',
    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
    rsComboSymbolsRange = '\\u20d0-\\u20ff',
    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
    rsVarRange = '\\ufe0e\\ufe0f';

/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']',
    rsCombo = '[' + rsComboRange + ']',
    rsFitz = '\\ud83c[\\udffb-\\udfff]',
    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
    rsNonAstral = '[^' + rsAstralRange + ']',
    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
    rsZWJ = '\\u200d';

/** Used to compose unicode regexes. */
var reOptMod = rsModifier + '?',
    rsOptVar = '[' + rsVarRange + ']?',
    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
    rsSeq = rsOptVar + reOptMod + rsOptJoin,
    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

/**
 * Gets the size of a Unicode `string`.
 *
 * @private
 * @param {string} string The string inspect.
 * @returns {number} Returns the string size.
 */
function unicodeSize(string) {
  var result = reUnicode.lastIndex = 0;
  while (reUnicode.test(string)) {
    ++result;
  }
  return result;
}

module.exports = unicodeSize;
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
    rsComboMarksRange = '\\u0300-\\u036f',
    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
    rsComboSymbolsRange = '\\u20d0-\\u20ff',
    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
    rsVarRange = '\\ufe0e\\ufe0f';

/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']',
    rsCombo = '[' + rsComboRange + ']',
    rsFitz = '\\ud83c[\\udffb-\\udfff]',
    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
    rsNonAstral = '[^' + rsAstralRange + ']',
    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
    rsZWJ = '\\u200d';

/** Used to compose unicode regexes. */
var reOptMod = rsModifier + '?',
    rsOptVar = '[' + rsVarRange + ']?',
    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
    rsSeq = rsOptVar + reOptMod + rsOptJoin,
    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

/**
 * Converts a Unicode `string` to an array.
 *
 * @private
 * @param {string} string The string to convert.
 * @returns {Array} Returns the converted array.
 */
function unicodeToArray(string) {
  return string.match(reUnicode) || [];
}

module.exports = unicodeToArray;
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
    rsComboMarksRange = '\\u0300-\\u036f',
    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
    rsComboSymbolsRange = '\\u20d0-\\u20ff',
    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
    rsDingbatRange = '\\u2700-\\u27bf',
    rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
    rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
    rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
    rsPunctuationRange = '\\u2000-\\u206f',
    rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
    rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
    rsVarRange = '\\ufe0e\\ufe0f',
    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;

/** Used to compose unicode capture groups. */
var rsApos = "['\u2019]",
    rsBreak = '[' + rsBreakRange + ']',
    rsCombo = '[' + rsComboRange + ']',
    rsDigits = '\\d+',
    rsDingbat = '[' + rsDingbatRange + ']',
    rsLower = '[' + rsLowerRange + ']',
    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
    rsFitz = '\\ud83c[\\udffb-\\udfff]',
    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
    rsNonAstral = '[^' + rsAstralRange + ']',
    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
    rsUpper = '[' + rsUpperRange + ']',
    rsZWJ = '\\u200d';

/** Used to compose unicode regexes. */
var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
    rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
    rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
    rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
    reOptMod = rsModifier + '?',
    rsOptVar = '[' + rsVarRange + ']?',
    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
    rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
    rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
    rsSeq = rsOptVar + reOptMod + rsOptJoin,
    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;

/** Used to match complex or compound words. */
var reUnicodeWord = RegExp([
  rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
  rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
  rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
  rsUpper + '+' + rsOptContrUpper,
  rsOrdUpper,
  rsOrdLower,
  rsDigits,
  rsEmoji
].join('|'), 'g');

/**
 * Splits a Unicode `string` into an array of its words.
 *
 * @private
 * @param {string} The string to inspect.
 * @returns {Array} Returns the words of `string`.
 */
function unicodeWords(string) {
  return string.match(reUnicodeWord) || [];
}

module.exports = unicodeWords;
var arrayEach = require('./_arrayEach'),
    arrayIncludes = require('./_arrayIncludes');

/** Used to compose bitmasks for function metadata. */
var WRAP_BIND_FLAG = 1,
    WRAP_BIND_KEY_FLAG = 2,
    WRAP_CURRY_FLAG = 8,
    WRAP_CURRY_RIGHT_FLAG = 16,
    WRAP_PARTIAL_FLAG = 32,
    WRAP_PARTIAL_RIGHT_FLAG = 64,
    WRAP_ARY_FLAG = 128,
    WRAP_REARG_FLAG = 256,
    WRAP_FLIP_FLAG = 512;

/** Used to associate wrap methods with their bit flags. */
var wrapFlags = [
  ['ary', WRAP_ARY_FLAG],
  ['bind', WRAP_BIND_FLAG],
  ['bindKey', WRAP_BIND_KEY_FLAG],
  ['curry', WRAP_CURRY_FLAG],
  ['curryRight', WRAP_CURRY_RIGHT_FLAG],
  ['flip', WRAP_FLIP_FLAG],
  ['partial', WRAP_PARTIAL_FLAG],
  ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
  ['rearg', WRAP_REARG_FLAG]
];

/**
 * Updates wrapper `details` based on `bitmask` flags.
 *
 * @private
 * @returns {Array} details The details to modify.
 * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
 * @returns {Array} Returns `details`.
 */
function updateWrapDetails(details, bitmask) {
  arrayEach(wrapFlags, function(pair) {
    var value = '_.' + pair[0];
    if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
      details.push(value);
    }
  });
  return details.sort();
}

module.exports = updateWrapDetails;
var getNative = require('./_getNative'),
    root = require('./_root');

/* Built-in method references that are verified to be native. */
var WeakMap = getNative(root, 'WeakMap');

module.exports = WeakMap;
var LazyWrapper = require('./_LazyWrapper'),
    LodashWrapper = require('./_LodashWrapper'),
    copyArray = require('./_copyArray');

/**
 * Creates a clone of `wrapper`.
 *
 * @private
 * @param {Object} wrapper The wrapper to clone.
 * @returns {Object} Returns the cloned wrapper.
 */
function wrapperClone(wrapper) {
  if (wrapper instanceof LazyWrapper) {
    return wrapper.clone();
  }
  var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
  result.__actions__ = copyArray(wrapper.__actions__);
  result.__index__  = wrapper.__index__;
  result.__values__ = wrapper.__values__;
  return result;
}

module.exports = wrapperClone;
var createMathOperation = require('./_createMathOperation');

/**
 * Adds two numbers.
 *
 * @static
 * @memberOf _
 * @since 3.4.0
 * @category Math
 * @param {number} augend The first number in an addition.
 * @param {number} addend The second number in an addition.
 * @returns {number} Returns the total.
 * @example
 *
 * _.add(6, 4);
 * // => 10
 */
var add = createMathOperation(function(augend, addend) {
  return augend + addend;
}, 0);

module.exports = add;
var toInteger = require('./toInteger');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/**
 * The opposite of `_.before`; this method creates a function that invokes
 * `func` once it's called `n` or more times.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {number} n The number of calls before `func` is invoked.
 * @param {Function} func The function to restrict.
 * @returns {Function} Returns the new restricted function.
 * @example
 *
 * var saves = ['profile', 'settings'];
 *
 * var done = _.after(saves.length, function() {
 *   console.log('done saving!');
 * });
 *
 * _.forEach(saves, function(type) {
 *   asyncSave({ 'type': type, 'complete': done });
 * });
 * // => Logs 'done saving!' after the two async saves have completed.
 */
function after(n, func) {
  if (typeof func != 'function') {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  n = toInteger(n);
  return function() {
    if (--n < 1) {
      return func.apply(this, arguments);
    }
  };
}

module.exports = after;
module.exports = {
  'chunk': require('./chunk'),
  'compact': require('./compact'),
  'concat': require('./concat'),
  'difference': require('./difference'),
  'differenceBy': require('./differenceBy'),
  'differenceWith': require('./differenceWith'),
  'drop': require('./drop'),
  'dropRight': require('./dropRight'),
  'dropRightWhile': require('./dropRightWhile'),
  'dropWhile': require('./dropWhile'),
  'fill': require('./fill'),
  'findIndex': require('./findIndex'),
  'findLastIndex': require('./findLastIndex'),
  'first': require('./first'),
  'flatten': require('./flatten'),
  'flattenDeep': require('./flattenDeep'),
  'flattenDepth': require('./flattenDepth'),
  'fromPairs': require('./fromPairs'),
  'head': require('./head'),
  'indexOf': require('./indexOf'),
  'initial': require('./initial'),
  'intersection': require('./intersection'),
  'intersectionBy': require('./intersectionBy'),
  'intersectionWith': require('./intersectionWith'),
  'join': require('./join'),
  'last': require('./last'),
  'lastIndexOf': require('./lastIndexOf'),
  'nth': require('./nth'),
  'pull': require('./pull'),
  'pullAll': require('./pullAll'),
  'pullAllBy': require('./pullAllBy'),
  'pullAllWith': require('./pullAllWith'),
  'pullAt': require('./pullAt'),
  'remove': require('./remove'),
  'reverse': require('./reverse'),
  'slice': require('./slice'),
  'sortedIndex': require('./sortedIndex'),
  'sortedIndexBy': require('./sortedIndexBy'),
  'sortedIndexOf': require('./sortedIndexOf'),
  'sortedLastIndex': require('./sortedLastIndex'),
  'sortedLastIndexBy': require('./sortedLastIndexBy'),
  'sortedLastIndexOf': require('./sortedLastIndexOf'),
  'sortedUniq': require('./sortedUniq'),
  'sortedUniqBy': require('./sortedUniqBy'),
  'tail': require('./tail'),
  'take': require('./take'),
  'takeRight': require('./takeRight'),
  'takeRightWhile': require('./takeRightWhile'),
  'takeWhile': require('./takeWhile'),
  'union': require('./union'),
  'unionBy': require('./unionBy'),
  'unionWith': require('./unionWith'),
  'uniq': require('./uniq'),
  'uniqBy': require('./uniqBy'),
  'uniqWith': require('./uniqWith'),
  'unzip': require('./unzip'),
  'unzipWith': require('./unzipWith'),
  'without': require('./without'),
  'xor': require('./xor'),
  'xorBy': require('./xorBy'),
  'xorWith': require('./xorWith'),
  'zip': require('./zip'),
  'zipObject': require('./zipObject'),
  'zipObjectDeep': require('./zipObjectDeep'),
  'zipWith': require('./zipWith')
};
var createWrap = require('./_createWrap');

/** Used to compose bitmasks for function metadata. */
var WRAP_ARY_FLAG = 128;

/**
 * Creates a function that invokes `func`, with up to `n` arguments,
 * ignoring any additional arguments.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Function
 * @param {Function} func The function to cap arguments for.
 * @param {number} [n=func.length] The arity cap.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Function} Returns the new capped function.
 * @example
 *
 * _.map(['6', '8', '10'], _.ary(parseInt, 1));
 * // => [6, 8, 10]
 */
function ary(func, n, guard) {
  n = guard ? undefined : n;
  n = (func && n == null) ? func.length : n;
  return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
}

module.exports = ary;
var assignValue = require('./_assignValue'),
    copyObject = require('./_copyObject'),
    createAssigner = require('./_createAssigner'),
    isArrayLike = require('./isArrayLike'),
    isPrototype = require('./_isPrototype'),
    keys = require('./keys');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Assigns own enumerable string keyed properties of source objects to the
 * destination object. Source objects are applied from left to right.
 * Subsequent sources overwrite property assignments of previous sources.
 *
 * **Note:** This method mutates `object` and is loosely based on
 * [`Object.assign`](https://mdn.io/Object/assign).
 *
 * @static
 * @memberOf _
 * @since 0.10.0
 * @category Object
 * @param {Object} object The destination object.
 * @param {...Object} [sources] The source objects.
 * @returns {Object} Returns `object`.
 * @see _.assignIn
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 * }
 *
 * function Bar() {
 *   this.c = 3;
 * }
 *
 * Foo.prototype.b = 2;
 * Bar.prototype.d = 4;
 *
 * _.assign({ 'a': 0 }, new Foo, new Bar);
 * // => { 'a': 1, 'c': 3 }
 */
var assign = createAssigner(function(object, source) {
  if (isPrototype(source) || isArrayLike(source)) {
    copyObject(source, keys(source), object);
    return;
  }
  for (var key in source) {
    if (hasOwnProperty.call(source, key)) {
      assignValue(object, key, source[key]);
    }
  }
});

module.exports = assign;
var copyObject = require('./_copyObject'),
    createAssigner = require('./_createAssigner'),
    keysIn = require('./keysIn');

/**
 * This method is like `_.assign` except that it iterates over own and
 * inherited source properties.
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @alias extend
 * @category Object
 * @param {Object} object The destination object.
 * @param {...Object} [sources] The source objects.
 * @returns {Object} Returns `object`.
 * @see _.assign
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 * }
 *
 * function Bar() {
 *   this.c = 3;
 * }
 *
 * Foo.prototype.b = 2;
 * Bar.prototype.d = 4;
 *
 * _.assignIn({ 'a': 0 }, new Foo, new Bar);
 * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
 */
var assignIn = createAssigner(function(object, source) {
  copyObject(source, keysIn(source), object);
});

module.exports = assignIn;
var copyObject = require('./_copyObject'),
    createAssigner = require('./_createAssigner'),
    keysIn = require('./keysIn');

/**
 * This method is like `_.assignIn` except that it accepts `customizer`
 * which is invoked to produce the assigned values. If `customizer` returns
 * `undefined`, assignment is handled by the method instead. The `customizer`
 * is invoked with five arguments: (objValue, srcValue, key, object, source).
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @alias extendWith
 * @category Object
 * @param {Object} object The destination object.
 * @param {...Object} sources The source objects.
 * @param {Function} [customizer] The function to customize assigned values.
 * @returns {Object} Returns `object`.
 * @see _.assignWith
 * @example
 *
 * function customizer(objValue, srcValue) {
 *   return _.isUndefined(objValue) ? srcValue : objValue;
 * }
 *
 * var defaults = _.partialRight(_.assignInWith, customizer);
 *
 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
 * // => { 'a': 1, 'b': 2 }
 */
var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
  copyObject(source, keysIn(source), object, customizer);
});

module.exports = assignInWith;
var copyObject = require('./_copyObject'),
    createAssigner = require('./_createAssigner'),
    keys = require('./keys');

/**
 * This method is like `_.assign` except that it accepts `customizer`
 * which is invoked to produce the assigned values. If `customizer` returns
 * `undefined`, assignment is handled by the method instead. The `customizer`
 * is invoked with five arguments: (objValue, srcValue, key, object, source).
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Object
 * @param {Object} object The destination object.
 * @param {...Object} sources The source objects.
 * @param {Function} [customizer] The function to customize assigned values.
 * @returns {Object} Returns `object`.
 * @see _.assignInWith
 * @example
 *
 * function customizer(objValue, srcValue) {
 *   return _.isUndefined(objValue) ? srcValue : objValue;
 * }
 *
 * var defaults = _.partialRight(_.assignWith, customizer);
 *
 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
 * // => { 'a': 1, 'b': 2 }
 */
var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
  copyObject(source, keys(source), object, customizer);
});

module.exports = assignWith;
var baseAt = require('./_baseAt'),
    flatRest = require('./_flatRest');

/**
 * Creates an array of values corresponding to `paths` of `object`.
 *
 * @static
 * @memberOf _
 * @since 1.0.0
 * @category Object
 * @param {Object} object The object to iterate over.
 * @param {...(string|string[])} [paths] The property paths to pick.
 * @returns {Array} Returns the picked values.
 * @example
 *
 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
 *
 * _.at(object, ['a[0].b.c', 'a[1]']);
 * // => [3, 4]
 */
var at = flatRest(baseAt);

module.exports = at;
var apply = require('./_apply'),
    baseRest = require('./_baseRest'),
    isError = require('./isError');

/**
 * Attempts to invoke `func`, returning either the result or the caught error
 * object. Any additional arguments are provided to `func` when it's invoked.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Util
 * @param {Function} func The function to attempt.
 * @param {...*} [args] The arguments to invoke `func` with.
 * @returns {*} Returns the `func` result or error object.
 * @example
 *
 * // Avoid throwing errors for invalid selectors.
 * var elements = _.attempt(function(selector) {
 *   return document.querySelectorAll(selector);
 * }, '>_>');
 *
 * if (_.isError(elements)) {
 *   elements = [];
 * }
 */
var attempt = baseRest(function(func, args) {
  try {
    return apply(func, undefined, args);
  } catch (e) {
    return isError(e) ? e : new Error(e);
  }
});

module.exports = attempt;
var toInteger = require('./toInteger');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/**
 * Creates a function that invokes `func`, with the `this` binding and arguments
 * of the created function, while it's called less than `n` times. Subsequent
 * calls to the created function return the result of the last `func` invocation.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Function
 * @param {number} n The number of calls at which `func` is no longer invoked.
 * @param {Function} func The function to restrict.
 * @returns {Function} Returns the new restricted function.
 * @example
 *
 * jQuery(element).on('click', _.before(5, addContactToList));
 * // => Allows adding up to 4 contacts to the list.
 */
function before(n, func) {
  var result;
  if (typeof func != 'function') {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  n = toInteger(n);
  return function() {
    if (--n > 0) {
      result = func.apply(this, arguments);
    }
    if (n <= 1) {
      func = undefined;
    }
    return result;
  };
}

module.exports = before;
var baseRest = require('./_baseRest'),
    createWrap = require('./_createWrap'),
    getHolder = require('./_getHolder'),
    replaceHolders = require('./_replaceHolders');

/** Used to compose bitmasks for function metadata. */
var WRAP_BIND_FLAG = 1,
    WRAP_PARTIAL_FLAG = 32;

/**
 * Creates a function that invokes `func` with the `this` binding of `thisArg`
 * and `partials` prepended to the arguments it receives.
 *
 * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
 * may be used as a placeholder for partially applied arguments.
 *
 * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
 * property of bound functions.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to bind.
 * @param {*} thisArg The `this` binding of `func`.
 * @param {...*} [partials] The arguments to be partially applied.
 * @returns {Function} Returns the new bound function.
 * @example
 *
 * function greet(greeting, punctuation) {
 *   return greeting + ' ' + this.user + punctuation;
 * }
 *
 * var object = { 'user': 'fred' };
 *
 * var bound = _.bind(greet, object, 'hi');
 * bound('!');
 * // => 'hi fred!'
 *
 * // Bound with placeholders.
 * var bound = _.bind(greet, object, _, '!');
 * bound('hi');
 * // => 'hi fred!'
 */
var bind = baseRest(function(func, thisArg, partials) {
  var bitmask = WRAP_BIND_FLAG;
  if (partials.length) {
    var holders = replaceHolders(partials, getHolder(bind));
    bitmask |= WRAP_PARTIAL_FLAG;
  }
  return createWrap(func, bitmask, thisArg, partials, holders);
});

// Assign default placeholders.
bind.placeholder = {};

module.exports = bind;
var arrayEach = require('./_arrayEach'),
    baseAssignValue = require('./_baseAssignValue'),
    bind = require('./bind'),
    flatRest = require('./_flatRest'),
    toKey = require('./_toKey');

/**
 * Binds methods of an object to the object itself, overwriting the existing
 * method.
 *
 * **Note:** This method doesn't set the "length" property of bound functions.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Util
 * @param {Object} object The object to bind and assign the bound methods to.
 * @param {...(string|string[])} methodNames The object method names to bind.
 * @returns {Object} Returns `object`.
 * @example
 *
 * var view = {
 *   'label': 'docs',
 *   'click': function() {
 *     console.log('clicked ' + this.label);
 *   }
 * };
 *
 * _.bindAll(view, ['click']);
 * jQuery(element).on('click', view.click);
 * // => Logs 'clicked docs' when clicked.
 */
var bindAll = flatRest(function(object, methodNames) {
  arrayEach(methodNames, function(key) {
    key = toKey(key);
    baseAssignValue(object, key, bind(object[key], object));
  });
  return object;
});

module.exports = bindAll;
var baseRest = require('./_baseRest'),
    createWrap = require('./_createWrap'),
    getHolder = require('./_getHolder'),
    replaceHolders = require('./_replaceHolders');

/** Used to compose bitmasks for function metadata. */
var WRAP_BIND_FLAG = 1,
    WRAP_BIND_KEY_FLAG = 2,
    WRAP_PARTIAL_FLAG = 32;

/**
 * Creates a function that invokes the method at `object[key]` with `partials`
 * prepended to the arguments it receives.
 *
 * This method differs from `_.bind` by allowing bound functions to reference
 * methods that may be redefined or don't yet exist. See
 * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
 * for more details.
 *
 * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
 * builds, may be used as a placeholder for partially applied arguments.
 *
 * @static
 * @memberOf _
 * @since 0.10.0
 * @category Function
 * @param {Object} object The object to invoke the method on.
 * @param {string} key The key of the method.
 * @param {...*} [partials] The arguments to be partially applied.
 * @returns {Function} Returns the new bound function.
 * @example
 *
 * var object = {
 *   'user': 'fred',
 *   'greet': function(greeting, punctuation) {
 *     return greeting + ' ' + this.user + punctuation;
 *   }
 * };
 *
 * var bound = _.bindKey(object, 'greet', 'hi');
 * bound('!');
 * // => 'hi fred!'
 *
 * object.greet = function(greeting, punctuation) {
 *   return greeting + 'ya ' + this.user + punctuation;
 * };
 *
 * bound('!');
 * // => 'hiya fred!'
 *
 * // Bound with placeholders.
 * var bound = _.bindKey(object, 'greet', _, '!');
 * bound('hi');
 * // => 'hiya fred!'
 */
var bindKey = baseRest(function(object, key, partials) {
  var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
  if (partials.length) {
    var holders = replaceHolders(partials, getHolder(bindKey));
    bitmask |= WRAP_PARTIAL_FLAG;
  }
  return createWrap(key, bitmask, object, partials, holders);
});

// Assign default placeholders.
bindKey.placeholder = {};

module.exports = bindKey;
var capitalize = require('./capitalize'),
    createCompounder = require('./_createCompounder');

/**
 * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the camel cased string.
 * @example
 *
 * _.camelCase('Foo Bar');
 * // => 'fooBar'
 *
 * _.camelCase('--foo-bar--');
 * // => 'fooBar'
 *
 * _.camelCase('__FOO_BAR__');
 * // => 'fooBar'
 */
var camelCase = createCompounder(function(result, word, index) {
  word = word.toLowerCase();
  return result + (index ? capitalize(word) : word);
});

module.exports = camelCase;
var toString = require('./toString'),
    upperFirst = require('./upperFirst');

/**
 * Converts the first character of `string` to upper case and the remaining
 * to lower case.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to capitalize.
 * @returns {string} Returns the capitalized string.
 * @example
 *
 * _.capitalize('FRED');
 * // => 'Fred'
 */
function capitalize(string) {
  return upperFirst(toString(string).toLowerCase());
}

module.exports = capitalize;
var isArray = require('./isArray');

/**
 * Casts `value` as an array if it's not one.
 *
 * @static
 * @memberOf _
 * @since 4.4.0
 * @category Lang
 * @param {*} value The value to inspect.
 * @returns {Array} Returns the cast array.
 * @example
 *
 * _.castArray(1);
 * // => [1]
 *
 * _.castArray({ 'a': 1 });
 * // => [{ 'a': 1 }]
 *
 * _.castArray('abc');
 * // => ['abc']
 *
 * _.castArray(null);
 * // => [null]
 *
 * _.castArray(undefined);
 * // => [undefined]
 *
 * _.castArray();
 * // => []
 *
 * var array = [1, 2, 3];
 * console.log(_.castArray(array) === array);
 * // => true
 */
function castArray() {
  if (!arguments.length) {
    return [];
  }
  var value = arguments[0];
  return isArray(value) ? value : [value];
}

module.exports = castArray;
var createRound = require('./_createRound');

/**
 * Computes `number` rounded up to `precision`.
 *
 * @static
 * @memberOf _
 * @since 3.10.0
 * @category Math
 * @param {number} number The number to round up.
 * @param {number} [precision=0] The precision to round up to.
 * @returns {number} Returns the rounded up number.
 * @example
 *
 * _.ceil(4.006);
 * // => 5
 *
 * _.ceil(6.004, 2);
 * // => 6.01
 *
 * _.ceil(6040, -2);
 * // => 6100
 */
var ceil = createRound('ceil');

module.exports = ceil;
var lodash = require('./wrapperLodash');

/**
 * Creates a `lodash` wrapper instance that wraps `value` with explicit method
 * chain sequences enabled. The result of such sequences must be unwrapped
 * with `_#value`.
 *
 * @static
 * @memberOf _
 * @since 1.3.0
 * @category Seq
 * @param {*} value The value to wrap.
 * @returns {Object} Returns the new `lodash` wrapper instance.
 * @example
 *
 * var users = [
 *   { 'user': 'barney',  'age': 36 },
 *   { 'user': 'fred',    'age': 40 },
 *   { 'user': 'pebbles', 'age': 1 }
 * ];
 *
 * var youngest = _
 *   .chain(users)
 *   .sortBy('age')
 *   .map(function(o) {
 *     return o.user + ' is ' + o.age;
 *   })
 *   .head()
 *   .value();
 * // => 'pebbles is 1'
 */
function chain(value) {
  var result = lodash(value);
  result.__chain__ = true;
  return result;
}

module.exports = chain;
var baseSlice = require('./_baseSlice'),
    isIterateeCall = require('./_isIterateeCall'),
    toInteger = require('./toInteger');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeCeil = Math.ceil,
    nativeMax = Math.max;

/**
 * Creates an array of elements split into groups the length of `size`.
 * If `array` can't be split evenly, the final chunk will be the remaining
 * elements.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to process.
 * @param {number} [size=1] The length of each chunk
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Array} Returns the new array of chunks.
 * @example
 *
 * _.chunk(['a', 'b', 'c', 'd'], 2);
 * // => [['a', 'b'], ['c', 'd']]
 *
 * _.chunk(['a', 'b', 'c', 'd'], 3);
 * // => [['a', 'b', 'c'], ['d']]
 */
function chunk(array, size, guard) {
  if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
    size = 1;
  } else {
    size = nativeMax(toInteger(size), 0);
  }
  var length = array == null ? 0 : array.length;
  if (!length || size < 1) {
    return [];
  }
  var index = 0,
      resIndex = 0,
      result = Array(nativeCeil(length / size));

  while (index < length) {
    result[resIndex++] = baseSlice(array, index, (index += size));
  }
  return result;
}

module.exports = chunk;
var baseClamp = require('./_baseClamp'),
    toNumber = require('./toNumber');

/**
 * Clamps `number` within the inclusive `lower` and `upper` bounds.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Number
 * @param {number} number The number to clamp.
 * @param {number} [lower] The lower bound.
 * @param {number} upper The upper bound.
 * @returns {number} Returns the clamped number.
 * @example
 *
 * _.clamp(-10, -5, 5);
 * // => -5
 *
 * _.clamp(10, -5, 5);
 * // => 5
 */
function clamp(number, lower, upper) {
  if (upper === undefined) {
    upper = lower;
    lower = undefined;
  }
  if (upper !== undefined) {
    upper = toNumber(upper);
    upper = upper === upper ? upper : 0;
  }
  if (lower !== undefined) {
    lower = toNumber(lower);
    lower = lower === lower ? lower : 0;
  }
  return baseClamp(toNumber(number), lower, upper);
}

module.exports = clamp;
var baseClone = require('./_baseClone');

/** Used to compose bitmasks for cloning. */
var CLONE_SYMBOLS_FLAG = 4;

/**
 * Creates a shallow clone of `value`.
 *
 * **Note:** This method is loosely based on the
 * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
 * and supports cloning arrays, array buffers, booleans, date objects, maps,
 * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
 * arrays. The own enumerable properties of `arguments` objects are cloned
 * as plain objects. An empty object is returned for uncloneable values such
 * as error objects, functions, DOM nodes, and WeakMaps.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to clone.
 * @returns {*} Returns the cloned value.
 * @see _.cloneDeep
 * @example
 *
 * var objects = [{ 'a': 1 }, { 'b': 2 }];
 *
 * var shallow = _.clone(objects);
 * console.log(shallow[0] === objects[0]);
 * // => true
 */
function clone(value) {
  return baseClone(value, CLONE_SYMBOLS_FLAG);
}

module.exports = clone;
var baseClone = require('./_baseClone');

/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1,
    CLONE_SYMBOLS_FLAG = 4;

/**
 * This method is like `_.clone` except that it recursively clones `value`.
 *
 * @static
 * @memberOf _
 * @since 1.0.0
 * @category Lang
 * @param {*} value The value to recursively clone.
 * @returns {*} Returns the deep cloned value.
 * @see _.clone
 * @example
 *
 * var objects = [{ 'a': 1 }, { 'b': 2 }];
 *
 * var deep = _.cloneDeep(objects);
 * console.log(deep[0] === objects[0]);
 * // => false
 */
function cloneDeep(value) {
  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
}

module.exports = cloneDeep;
var baseClone = require('./_baseClone');

/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1,
    CLONE_SYMBOLS_FLAG = 4;

/**
 * This method is like `_.cloneWith` except that it recursively clones `value`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to recursively clone.
 * @param {Function} [customizer] The function to customize cloning.
 * @returns {*} Returns the deep cloned value.
 * @see _.cloneWith
 * @example
 *
 * function customizer(value) {
 *   if (_.isElement(value)) {
 *     return value.cloneNode(true);
 *   }
 * }
 *
 * var el = _.cloneDeepWith(document.body, customizer);
 *
 * console.log(el === document.body);
 * // => false
 * console.log(el.nodeName);
 * // => 'BODY'
 * console.log(el.childNodes.length);
 * // => 20
 */
function cloneDeepWith(value, customizer) {
  customizer = typeof customizer == 'function' ? customizer : undefined;
  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
}

module.exports = cloneDeepWith;
var baseClone = require('./_baseClone');

/** Used to compose bitmasks for cloning. */
var CLONE_SYMBOLS_FLAG = 4;

/**
 * This method is like `_.clone` except that it accepts `customizer` which
 * is invoked to produce the cloned value. If `customizer` returns `undefined`,
 * cloning is handled by the method instead. The `customizer` is invoked with
 * up to four arguments; (value [, index|key, object, stack]).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to clone.
 * @param {Function} [customizer] The function to customize cloning.
 * @returns {*} Returns the cloned value.
 * @see _.cloneDeepWith
 * @example
 *
 * function customizer(value) {
 *   if (_.isElement(value)) {
 *     return value.cloneNode(false);
 *   }
 * }
 *
 * var el = _.cloneWith(document.body, customizer);
 *
 * console.log(el === document.body);
 * // => false
 * console.log(el.nodeName);
 * // => 'BODY'
 * console.log(el.childNodes.length);
 * // => 0
 */
function cloneWith(value, customizer) {
  customizer = typeof customizer == 'function' ? customizer : undefined;
  return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
}

module.exports = cloneWith;
module.exports = {
  'countBy': require('./countBy'),
  'each': require('./each'),
  'eachRight': require('./eachRight'),
  'every': require('./every'),
  'filter': require('./filter'),
  'find': require('./find'),
  'findLast': require('./findLast'),
  'flatMap': require('./flatMap'),
  'flatMapDeep': require('./flatMapDeep'),
  'flatMapDepth': require('./flatMapDepth'),
  'forEach': require('./forEach'),
  'forEachRight': require('./forEachRight'),
  'groupBy': require('./groupBy'),
  'includes': require('./includes'),
  'invokeMap': require('./invokeMap'),
  'keyBy': require('./keyBy'),
  'map': require('./map'),
  'orderBy': require('./orderBy'),
  'partition': require('./partition'),
  'reduce': require('./reduce'),
  'reduceRight': require('./reduceRight'),
  'reject': require('./reject'),
  'sample': require('./sample'),
  'sampleSize': require('./sampleSize'),
  'shuffle': require('./shuffle'),
  'size': require('./size'),
  'some': require('./some'),
  'sortBy': require('./sortBy')
};
var LodashWrapper = require('./_LodashWrapper');

/**
 * Executes the chain sequence and returns the wrapped result.
 *
 * @name commit
 * @memberOf _
 * @since 3.2.0
 * @category Seq
 * @returns {Object} Returns the new `lodash` wrapper instance.
 * @example
 *
 * var array = [1, 2];
 * var wrapped = _(array).push(3);
 *
 * console.log(array);
 * // => [1, 2]
 *
 * wrapped = wrapped.commit();
 * console.log(array);
 * // => [1, 2, 3]
 *
 * wrapped.last();
 * // => 3
 *
 * console.log(array);
 * // => [1, 2, 3]
 */
function wrapperCommit() {
  return new LodashWrapper(this.value(), this.__chain__);
}

module.exports = wrapperCommit;
/**
 * Creates an array with all falsey values removed. The values `false`, `null`,
 * `0`, `""`, `undefined`, and `NaN` are falsey.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to compact.
 * @returns {Array} Returns the new array of filtered values.
 * @example
 *
 * _.compact([0, 1, false, 2, '', 3]);
 * // => [1, 2, 3]
 */
function compact(array) {
  var index = -1,
      length = array == null ? 0 : array.length,
      resIndex = 0,
      result = [];

  while (++index < length) {
    var value = array[index];
    if (value) {
      result[resIndex++] = value;
    }
  }
  return result;
}

module.exports = compact;
var arrayPush = require('./_arrayPush'),
    baseFlatten = require('./_baseFlatten'),
    copyArray = require('./_copyArray'),
    isArray = require('./isArray');

/**
 * Creates a new array concatenating `array` with any additional arrays
 * and/or values.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to concatenate.
 * @param {...*} [values] The values to concatenate.
 * @returns {Array} Returns the new concatenated array.
 * @example
 *
 * var array = [1];
 * var other = _.concat(array, 2, [3], [[4]]);
 *
 * console.log(other);
 * // => [1, 2, 3, [4]]
 *
 * console.log(array);
 * // => [1]
 */
function concat() {
  var length = arguments.length;
  if (!length) {
    return [];
  }
  var args = Array(length - 1),
      array = arguments[0],
      index = length;

  while (index--) {
    args[index - 1] = arguments[index];
  }
  return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
}

module.exports = concat;
var apply = require('./_apply'),
    arrayMap = require('./_arrayMap'),
    baseIteratee = require('./_baseIteratee'),
    baseRest = require('./_baseRest');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/**
 * Creates a function that iterates over `pairs` and invokes the corresponding
 * function of the first predicate to return truthy. The predicate-function
 * pairs are invoked with the `this` binding and arguments of the created
 * function.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Util
 * @param {Array} pairs The predicate-function pairs.
 * @returns {Function} Returns the new composite function.
 * @example
 *
 * var func = _.cond([
 *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
 *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
 *   [_.stubTrue,                      _.constant('no match')]
 * ]);
 *
 * func({ 'a': 1, 'b': 2 });
 * // => 'matches A'
 *
 * func({ 'a': 0, 'b': 1 });
 * // => 'matches B'
 *
 * func({ 'a': '1', 'b': '2' });
 * // => 'no match'
 */
function cond(pairs) {
  var length = pairs == null ? 0 : pairs.length,
      toIteratee = baseIteratee;

  pairs = !length ? [] : arrayMap(pairs, function(pair) {
    if (typeof pair[1] != 'function') {
      throw new TypeError(FUNC_ERROR_TEXT);
    }
    return [toIteratee(pair[0]), pair[1]];
  });

  return baseRest(function(args) {
    var index = -1;
    while (++index < length) {
      var pair = pairs[index];
      if (apply(pair[0], this, args)) {
        return apply(pair[1], this, args);
      }
    }
  });
}

module.exports = cond;
var baseClone = require('./_baseClone'),
    baseConforms = require('./_baseConforms');

/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1;

/**
 * Creates a function that invokes the predicate properties of `source` with
 * the corresponding property values of a given object, returning `true` if
 * all predicates return truthy, else `false`.
 *
 * **Note:** The created function is equivalent to `_.conformsTo` with
 * `source` partially applied.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Util
 * @param {Object} source The object of property predicates to conform to.
 * @returns {Function} Returns the new spec function.
 * @example
 *
 * var objects = [
 *   { 'a': 2, 'b': 1 },
 *   { 'a': 1, 'b': 2 }
 * ];
 *
 * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
 * // => [{ 'a': 1, 'b': 2 }]
 */
function conforms(source) {
  return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
}

module.exports = conforms;
var baseConformsTo = require('./_baseConformsTo'),
    keys = require('./keys');

/**
 * Checks if `object` conforms to `source` by invoking the predicate
 * properties of `source` with the corresponding property values of `object`.
 *
 * **Note:** This method is equivalent to `_.conforms` when `source` is
 * partially applied.
 *
 * @static
 * @memberOf _
 * @since 4.14.0
 * @category Lang
 * @param {Object} object The object to inspect.
 * @param {Object} source The object of property predicates to conform to.
 * @returns {boolean} Returns `true` if `object` conforms, else `false`.
 * @example
 *
 * var object = { 'a': 1, 'b': 2 };
 *
 * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
 * // => true
 *
 * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
 * // => false
 */
function conformsTo(object, source) {
  return source == null || baseConformsTo(object, source, keys(source));
}

module.exports = conformsTo;
/**
 * Creates a function that returns `value`.
 *
 * @static
 * @memberOf _
 * @since 2.4.0
 * @category Util
 * @param {*} value The value to return from the new function.
 * @returns {Function} Returns the new constant function.
 * @example
 *
 * var objects = _.times(2, _.constant({ 'a': 1 }));
 *
 * console.log(objects);
 * // => [{ 'a': 1 }, { 'a': 1 }]
 *
 * console.log(objects[0] === objects[1]);
 * // => true
 */
function constant(value) {
  return function() {
    return value;
  };
}

module.exports = constant;
/**
 * @license
 * Lodash (Custom Build) <https://lodash.com/>
 * Build: `lodash core -o ./dist/lodash.core.js`
 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */
;(function() {

  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  var undefined;

  /** Used as the semantic version number. */
  var VERSION = '4.17.21';

  /** Error message constants. */
  var FUNC_ERROR_TEXT = 'Expected a function';

  /** Used to compose bitmasks for value comparisons. */
  var COMPARE_PARTIAL_FLAG = 1,
      COMPARE_UNORDERED_FLAG = 2;

  /** Used to compose bitmasks for function metadata. */
  var WRAP_BIND_FLAG = 1,
      WRAP_PARTIAL_FLAG = 32;

  /** Used as references for various `Number` constants. */
  var INFINITY = 1 / 0,
      MAX_SAFE_INTEGER = 9007199254740991;

  /** `Object#toString` result references. */
  var argsTag = '[object Arguments]',
      arrayTag = '[object Array]',
      asyncTag = '[object AsyncFunction]',
      boolTag = '[object Boolean]',
      dateTag = '[object Date]',
      errorTag = '[object Error]',
      funcTag = '[object Function]',
      genTag = '[object GeneratorFunction]',
      numberTag = '[object Number]',
      objectTag = '[object Object]',
      proxyTag = '[object Proxy]',
      regexpTag = '[object RegExp]',
      stringTag = '[object String]';

  /** Used to match HTML entities and HTML characters. */
  var reUnescapedHtml = /[&<>"']/g,
      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);

  /** Used to detect unsigned integer values. */
  var reIsUint = /^(?:0|[1-9]\d*)$/;

  /** Used to map characters to HTML entities. */
  var htmlEscapes = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#39;'
  };

  /** Detect free variable `global` from Node.js. */
  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

  /** Detect free variable `self`. */
  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

  /** Used as a reference to the global object. */
  var root = freeGlobal || freeSelf || Function('return this')();

  /** Detect free variable `exports`. */
  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

  /** Detect free variable `module`. */
  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

  /*--------------------------------------------------------------------------*/

  /**
   * Appends the elements of `values` to `array`.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {Array} values The values to append.
   * @returns {Array} Returns `array`.
   */
  function arrayPush(array, values) {
    array.push.apply(array, values);
    return array;
  }

  /**
   * The base implementation of `_.findIndex` and `_.findLastIndex` without
   * support for iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {number} fromIndex The index to search from.
   * @param {boolean} [fromRight] Specify iterating from right to left.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
    var length = array.length,
        index = fromIndex + (fromRight ? 1 : -1);

    while ((fromRight ? index-- : ++index < length)) {
      if (predicate(array[index], index, array)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.property` without support for deep paths.
   *
   * @private
   * @param {string} key The key of the property to get.
   * @returns {Function} Returns the new accessor function.
   */
  function baseProperty(key) {
    return function(object) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.propertyOf` without support for deep paths.
   *
   * @private
   * @param {Object} object The object to query.
   * @returns {Function} Returns the new accessor function.
   */
  function basePropertyOf(object) {
    return function(key) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.reduce` and `_.reduceRight`, without support
   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} accumulator The initial value.
   * @param {boolean} initAccum Specify using the first or last element of
   *  `collection` as the initial value.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the accumulated value.
   */
  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection, function(value, index, collection) {
      accumulator = initAccum
        ? (initAccum = false, value)
        : iteratee(accumulator, value, index, collection);
    });
    return accumulator;
  }

  /**
   * The base implementation of `_.values` and `_.valuesIn` which creates an
   * array of `object` property values corresponding to the property names
   * of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the array of property values.
   */
  function baseValues(object, props) {
    return baseMap(props, function(key) {
      return object[key];
    });
  }

  /**
   * Used by `_.escape` to convert characters to HTML entities.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  var escapeHtmlChar = basePropertyOf(htmlEscapes);

  /**
   * Creates a unary function that invokes `func` with its argument transformed.
   *
   * @private
   * @param {Function} func The function to wrap.
   * @param {Function} transform The argument transform.
   * @returns {Function} Returns the new function.
   */
  function overArg(func, transform) {
    return function(arg) {
      return func(transform(arg));
    };
  }

  /*--------------------------------------------------------------------------*/

  /** Used for built-in method references. */
  var arrayProto = Array.prototype,
      objectProto = Object.prototype;

  /** Used to check objects for own properties. */
  var hasOwnProperty = objectProto.hasOwnProperty;

  /** Used to generate unique IDs. */
  var idCounter = 0;

  /**
   * Used to resolve the
   * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
   * of values.
   */
  var nativeObjectToString = objectProto.toString;

  /** Used to restore the original `_` reference in `_.noConflict`. */
  var oldDash = root._;

  /** Built-in value references. */
  var objectCreate = Object.create,
      propertyIsEnumerable = objectProto.propertyIsEnumerable;

  /* Built-in method references for those with the same name as other `lodash` methods. */
  var nativeIsFinite = root.isFinite,
      nativeKeys = overArg(Object.keys, Object),
      nativeMax = Math.max;

  /*------------------------------------------------------------------------*/

  /**
   * Creates a `lodash` object which wraps `value` to enable implicit method
   * chain sequences. Methods that operate on and return arrays, collections,
   * and functions can be chained together. Methods that retrieve a single value
   * or may return a primitive value will automatically end the chain sequence
   * and return the unwrapped value. Otherwise, the value must be unwrapped
   * with `_#value`.
   *
   * Explicit chain sequences, which must be unwrapped with `_#value`, may be
   * enabled using `_.chain`.
   *
   * The execution of chained methods is lazy, that is, it's deferred until
   * `_#value` is implicitly or explicitly called.
   *
   * Lazy evaluation allows several methods to support shortcut fusion.
   * Shortcut fusion is an optimization to merge iteratee calls; this avoids
   * the creation of intermediate arrays and can greatly reduce the number of
   * iteratee executions. Sections of a chain sequence qualify for shortcut
   * fusion if the section is applied to an array and iteratees accept only
   * one argument. The heuristic for whether a section qualifies for shortcut
   * fusion is subject to change.
   *
   * Chaining is supported in custom builds as long as the `_#value` method is
   * directly or indirectly included in the build.
   *
   * In addition to lodash methods, wrappers have `Array` and `String` methods.
   *
   * The wrapper `Array` methods are:
   * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
   *
   * The wrapper `String` methods are:
   * `replace` and `split`
   *
   * The wrapper methods that support shortcut fusion are:
   * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
   * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
   * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
   *
   * The chainable wrapper methods are:
   * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
   * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
   * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
   * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
   * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
   * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
   * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
   * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
   * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
   * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
   * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
   * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
   * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
   * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
   * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
   * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
   * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
   * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
   * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
   * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
   * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
   * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
   * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
   * `zipObject`, `zipObjectDeep`, and `zipWith`
   *
   * The wrapper methods that are **not** chainable by default are:
   * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
   * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
   * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
   * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
   * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
   * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
   * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
   * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
   * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
   * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
   * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
   * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
   * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
   * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
   * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
   * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
   * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
   * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
   * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
   * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
   * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
   * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
   * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
   * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
   * `upperFirst`, `value`, and `words`
   *
   * @name _
   * @constructor
   * @category Seq
   * @param {*} value The value to wrap in a `lodash` instance.
   * @returns {Object} Returns the new `lodash` wrapper instance.
   * @example
   *
   * function square(n) {
   *   return n * n;
   * }
   *
   * var wrapped = _([1, 2, 3]);
   *
   * // Returns an unwrapped value.
   * wrapped.reduce(_.add);
   * // => 6
   *
   * // Returns a wrapped value.
   * var squares = wrapped.map(square);
   *
   * _.isArray(squares);
   * // => false
   *
   * _.isArray(squares.value());
   * // => true
   */
  function lodash(value) {
    return value instanceof LodashWrapper
      ? value
      : new LodashWrapper(value);
  }

  /**
   * The base implementation of `_.create` without support for assigning
   * properties to the created object.
   *
   * @private
   * @param {Object} proto The object to inherit from.
   * @returns {Object} Returns the new object.
   */
  var baseCreate = (function() {
    function object() {}
    return function(proto) {
      if (!isObject(proto)) {
        return {};
      }
      if (objectCreate) {
        return objectCreate(proto);
      }
      object.prototype = proto;
      var result = new object;
      object.prototype = undefined;
      return result;
    };
  }());

  /**
   * The base constructor for creating `lodash` wrapper objects.
   *
   * @private
   * @param {*} value The value to wrap.
   * @param {boolean} [chainAll] Enable explicit method chain sequences.
   */
  function LodashWrapper(value, chainAll) {
    this.__wrapped__ = value;
    this.__actions__ = [];
    this.__chain__ = !!chainAll;
  }

  LodashWrapper.prototype = baseCreate(lodash.prototype);
  LodashWrapper.prototype.constructor = LodashWrapper;

  /*------------------------------------------------------------------------*/

  /**
   * Assigns `value` to `key` of `object` if the existing value is not equivalent
   * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
   * for equality comparisons.
   *
   * @private
   * @param {Object} object The object to modify.
   * @param {string} key The key of the property to assign.
   * @param {*} value The value to assign.
   */
  function assignValue(object, key, value) {
    var objValue = object[key];
    if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
        (value === undefined && !(key in object))) {
      baseAssignValue(object, key, value);
    }
  }

  /**
   * The base implementation of `assignValue` and `assignMergeValue` without
   * value checks.
   *
   * @private
   * @param {Object} object The object to modify.
   * @param {string} key The key of the property to assign.
   * @param {*} value The value to assign.
   */
  function baseAssignValue(object, key, value) {
    object[key] = value;
  }

  /**
   * The base implementation of `_.delay` and `_.defer` which accepts `args`
   * to provide to `func`.
   *
   * @private
   * @param {Function} func The function to delay.
   * @param {number} wait The number of milliseconds to delay invocation.
   * @param {Array} args The arguments to provide to `func`.
   * @returns {number|Object} Returns the timer id or timeout object.
   */
  function baseDelay(func, wait, args) {
    if (typeof func != 'function') {
      throw new TypeError(FUNC_ERROR_TEXT);
    }
    return setTimeout(function() { func.apply(undefined, args); }, wait);
  }

  /**
   * The base implementation of `_.forEach` without support for iteratee shorthands.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array|Object} Returns `collection`.
   */
  var baseEach = createBaseEach(baseForOwn);

  /**
   * The base implementation of `_.every` without support for iteratee shorthands.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if all elements pass the predicate check,
   *  else `false`
   */
  function baseEvery(collection, predicate) {
    var result = true;
    baseEach(collection, function(value, index, collection) {
      result = !!predicate(value, index, collection);
      return result;
    });
    return result;
  }

  /**
   * The base implementation of methods like `_.max` and `_.min` which accepts a
   * `comparator` to determine the extremum value.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The iteratee invoked per iteration.
   * @param {Function} comparator The comparator used to compare values.
   * @returns {*} Returns the extremum value.
   */
  function baseExtremum(array, iteratee, comparator) {
    var index = -1,
        length = array.length;

    while (++index < length) {
      var value = array[index],
          current = iteratee(value);

      if (current != null && (computed === undefined
            ? (current === current && !false)
            : comparator(current, computed)
          )) {
        var computed = current,
            result = value;
      }
    }
    return result;
  }

  /**
   * The base implementation of `_.filter` without support for iteratee shorthands.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {Array} Returns the new filtered array.
   */
  function baseFilter(collection, predicate) {
    var result = [];
    baseEach(collection, function(value, index, collection) {
      if (predicate(value, index, collection)) {
        result.push(value);
      }
    });
    return result;
  }

  /**
   * The base implementation of `_.flatten` with support for restricting flattening.
   *
   * @private
   * @param {Array} array The array to flatten.
   * @param {number} depth The maximum recursion depth.
   * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
   * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
   * @param {Array} [result=[]] The initial result value.
   * @returns {Array} Returns the new flattened array.
   */
  function baseFlatten(array, depth, predicate, isStrict, result) {
    var index = -1,
        length = array.length;

    predicate || (predicate = isFlattenable);
    result || (result = []);

    while (++index < length) {
      var value = array[index];
      if (depth > 0 && predicate(value)) {
        if (depth > 1) {
          // Recursively flatten arrays (susceptible to call stack limits).
          baseFlatten(value, depth - 1, predicate, isStrict, result);
        } else {
          arrayPush(result, value);
        }
      } else if (!isStrict) {
        result[result.length] = value;
      }
    }
    return result;
  }

  /**
   * The base implementation of `baseForOwn` which iterates over `object`
   * properties returned by `keysFunc` and invokes `iteratee` for each property.
   * Iteratee functions may exit iteration early by explicitly returning `false`.
   *
   * @private
   * @param {Object} object The object to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {Function} keysFunc The function to get the keys of `object`.
   * @returns {Object} Returns `object`.
   */
  var baseFor = createBaseFor();

  /**
   * The base implementation of `_.forOwn` without support for iteratee shorthands.
   *
   * @private
   * @param {Object} object The object to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Object} Returns `object`.
   */
  function baseForOwn(object, iteratee) {
    return object && baseFor(object, iteratee, keys);
  }

  /**
   * The base implementation of `_.functions` which creates an array of
   * `object` function property names filtered from `props`.
   *
   * @private
   * @param {Object} object The object to inspect.
   * @param {Array} props The property names to filter.
   * @returns {Array} Returns the function names.
   */
  function baseFunctions(object, props) {
    return baseFilter(props, function(key) {
      return isFunction(object[key]);
    });
  }

  /**
   * The base implementation of `getTag` without fallbacks for buggy environments.
   *
   * @private
   * @param {*} value The value to query.
   * @returns {string} Returns the `toStringTag`.
   */
  function baseGetTag(value) {
    return objectToString(value);
  }

  /**
   * The base implementation of `_.gt` which doesn't coerce arguments.
   *
   * @private
   * @param {*} value The value to compare.
   * @param {*} other The other value to compare.
   * @returns {boolean} Returns `true` if `value` is greater than `other`,
   *  else `false`.
   */
  function baseGt(value, other) {
    return value > other;
  }

  /**
   * The base implementation of `_.isArguments`.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is an `arguments` object,
   */
  var baseIsArguments = noop;

  /**
   * The base implementation of `_.isDate` without Node.js optimizations.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
   */
  function baseIsDate(value) {
    return isObjectLike(value) && baseGetTag(value) == dateTag;
  }

  /**
   * The base implementation of `_.isEqual` which supports partial comparisons
   * and tracks traversed objects.
   *
   * @private
   * @param {*} value The value to compare.
   * @param {*} other The other value to compare.
   * @param {boolean} bitmask The bitmask flags.
   *  1 - Unordered comparison
   *  2 - Partial comparison
   * @param {Function} [customizer] The function to customize comparisons.
   * @param {Object} [stack] Tracks traversed `value` and `other` objects.
   * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
   */
  function baseIsEqual(value, other, bitmask, customizer, stack) {
    if (value === other) {
      return true;
    }
    if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
      return value !== value && other !== other;
    }
    return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
  }

  /**
   * A specialized version of `baseIsEqual` for arrays and objects which performs
   * deep comparisons and tracks traversed objects enabling objects with circular
   * references to be compared.
   *
   * @private
   * @param {Object} object The object to compare.
   * @param {Object} other The other object to compare.
   * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
   * @param {Function} customizer The function to customize comparisons.
   * @param {Function} equalFunc The function to determine equivalents of values.
   * @param {Object} [stack] Tracks traversed `object` and `other` objects.
   * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
   */
  function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
    var objIsArr = isArray(object),
        othIsArr = isArray(other),
        objTag = objIsArr ? arrayTag : baseGetTag(object),
        othTag = othIsArr ? arrayTag : baseGetTag(other);

    objTag = objTag == argsTag ? objectTag : objTag;
    othTag = othTag == argsTag ? objectTag : othTag;

    var objIsObj = objTag == objectTag,
        othIsObj = othTag == objectTag,
        isSameTag = objTag == othTag;

    stack || (stack = []);
    var objStack = find(stack, function(entry) {
      return entry[0] == object;
    });
    var othStack = find(stack, function(entry) {
      return entry[0] == other;
    });
    if (objStack && othStack) {
      return objStack[1] == other;
    }
    stack.push([object, other]);
    stack.push([other, object]);
    if (isSameTag && !objIsObj) {
      var result = (objIsArr)
        ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
        : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
      stack.pop();
      return result;
    }
    if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
      var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
          othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');

      if (objIsWrapped || othIsWrapped) {
        var objUnwrapped = objIsWrapped ? object.value() : object,
            othUnwrapped = othIsWrapped ? other.value() : other;

        var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
        stack.pop();
        return result;
      }
    }
    if (!isSameTag) {
      return false;
    }
    var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack);
    stack.pop();
    return result;
  }

  /**
   * The base implementation of `_.isRegExp` without Node.js optimizations.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
   */
  function baseIsRegExp(value) {
    return isObjectLike(value) && baseGetTag(value) == regexpTag;
  }

  /**
   * The base implementation of `_.iteratee`.
   *
   * @private
   * @param {*} [value=_.identity] The value to convert to an iteratee.
   * @returns {Function} Returns the iteratee.
   */
  function baseIteratee(func) {
    if (typeof func == 'function') {
      return func;
    }
    if (func == null) {
      return identity;
    }
    return (typeof func == 'object' ? baseMatches : baseProperty)(func);
  }

  /**
   * The base implementation of `_.lt` which doesn't coerce arguments.
   *
   * @private
   * @param {*} value The value to compare.
   * @param {*} other The other value to compare.
   * @returns {boolean} Returns `true` if `value` is less than `other`,
   *  else `false`.
   */
  function baseLt(value, other) {
    return value < other;
  }

  /**
   * The base implementation of `_.map` without support for iteratee shorthands.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the new mapped array.
   */
  function baseMap(collection, iteratee) {
    var index = -1,
        result = isArrayLike(collection) ? Array(collection.length) : [];

    baseEach(collection, function(value, key, collection) {
      result[++index] = iteratee(value, key, collection);
    });
    return result;
  }

  /**
   * The base implementation of `_.matches` which doesn't clone `source`.
   *
   * @private
   * @param {Object} source The object of property values to match.
   * @returns {Function} Returns the new spec function.
   */
  function baseMatches(source) {
    var props = nativeKeys(source);
    return function(object) {
      var length = props.length;
      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (length--) {
        var key = props[length];
        if (!(key in object &&
              baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG)
            )) {
          return false;
        }
      }
      return true;
    };
  }

  /**
   * The base implementation of `_.pick` without support for individual
   * property identifiers.
   *
   * @private
   * @param {Object} object The source object.
   * @param {string[]} paths The property paths to pick.
   * @returns {Object} Returns the new object.
   */
  function basePick(object, props) {
    object = Object(object);
    return reduce(props, function(result, key) {
      if (key in object) {
        result[key] = object[key];
      }
      return result;
    }, {});
  }

  /**
   * The base implementation of `_.rest` which doesn't validate or coerce arguments.
   *
   * @private
   * @param {Function} func The function to apply a rest parameter to.
   * @param {number} [start=func.length-1] The start position of the rest parameter.
   * @returns {Function} Returns the new function.
   */
  function baseRest(func, start) {
    return setToString(overRest(func, start, identity), func + '');
  }

  /**
   * The base implementation of `_.slice` without an iteratee call guard.
   *
   * @private
   * @param {Array} array The array to slice.
   * @param {number} [start=0] The start position.
   * @param {number} [end=array.length] The end position.
   * @returns {Array} Returns the slice of `array`.
   */
  function baseSlice(array, start, end) {
    var index = -1,
        length = array.length;

    if (start < 0) {
      start = -start > length ? 0 : (length + start);
    }
    end = end > length ? length : end;
    if (end < 0) {
      end += length;
    }
    length = start > end ? 0 : ((end - start) >>> 0);
    start >>>= 0;

    var result = Array(length);
    while (++index < length) {
      result[index] = array[index + start];
    }
    return result;
  }

  /**
   * Copies the values of `source` to `array`.
   *
   * @private
   * @param {Array} source The array to copy values from.
   * @param {Array} [array=[]] The array to copy values to.
   * @returns {Array} Returns `array`.
   */
  function copyArray(source) {
    return baseSlice(source, 0, source.length);
  }

  /**
   * The base implementation of `_.some` without support for iteratee shorthands.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if any element passes the predicate check,
   *  else `false`.
   */
  function baseSome(collection, predicate) {
    var result;

    baseEach(collection, function(value, index, collection) {
      result = predicate(value, index, collection);
      return !result;
    });
    return !!result;
  }

  /**
   * The base implementation of `wrapperValue` which returns the result of
   * performing a sequence of actions on the unwrapped `value`, where each
   * successive action is supplied the return value of the previous.
   *
   * @private
   * @param {*} value The unwrapped value.
   * @param {Array} actions Actions to perform to resolve the unwrapped value.
   * @returns {*} Returns the resolved value.
   */
  function baseWrapperValue(value, actions) {
    var result = value;
    return reduce(actions, function(result, action) {
      return action.func.apply(action.thisArg, arrayPush([result], action.args));
    }, result);
  }

  /**
   * Compares values to sort them in ascending order.
   *
   * @private
   * @param {*} value The value to compare.
   * @param {*} other The other value to compare.
   * @returns {number} Returns the sort order indicator for `value`.
   */
  function compareAscending(value, other) {
    if (value !== other) {
      var valIsDefined = value !== undefined,
          valIsNull = value === null,
          valIsReflexive = value === value,
          valIsSymbol = false;

      var othIsDefined = other !== undefined,
          othIsNull = other === null,
          othIsReflexive = other === other,
          othIsSymbol = false;

      if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
          (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
          (valIsNull && othIsDefined && othIsReflexive) ||
          (!valIsDefined && othIsReflexive) ||
          !valIsReflexive) {
        return 1;
      }
      if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
          (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
          (othIsNull && valIsDefined && valIsReflexive) ||
          (!othIsDefined && valIsReflexive) ||
          !othIsReflexive) {
        return -1;
      }
    }
    return 0;
  }

  /**
   * Copies properties of `source` to `object`.
   *
   * @private
   * @param {Object} source The object to copy properties from.
   * @param {Array} props The property identifiers to copy.
   * @param {Object} [object={}] The object to copy properties to.
   * @param {Function} [customizer] The function to customize copied values.
   * @returns {Object} Returns `object`.
   */
  function copyObject(source, props, object, customizer) {
    var isNew = !object;
    object || (object = {});

    var index = -1,
        length = props.length;

    while (++index < length) {
      var key = props[index];

      var newValue = customizer
        ? customizer(object[key], source[key], key, object, source)
        : undefined;

      if (newValue === undefined) {
        newValue = source[key];
      }
      if (isNew) {
        baseAssignValue(object, key, newValue);
      } else {
        assignValue(object, key, newValue);
      }
    }
    return object;
  }

  /**
   * Creates a function like `_.assign`.
   *
   * @private
   * @param {Function} assigner The function to assign values.
   * @returns {Function} Returns the new assigner function.
   */
  function createAssigner(assigner) {
    return baseRest(function(object, sources) {
      var index = -1,
          length = sources.length,
          customizer = length > 1 ? sources[length - 1] : undefined;

      customizer = (assigner.length > 3 && typeof customizer == 'function')
        ? (length--, customizer)
        : undefined;

      object = Object(object);
      while (++index < length) {
        var source = sources[index];
        if (source) {
          assigner(object, source, index, customizer);
        }
      }
      return object;
    });
  }

  /**
   * Creates a `baseEach` or `baseEachRight` function.
   *
   * @private
   * @param {Function} eachFunc The function to iterate over a collection.
   * @param {boolean} [fromRight] Specify iterating from right to left.
   * @returns {Function} Returns the new base function.
   */
  function createBaseEach(eachFunc, fromRight) {
    return function(collection, iteratee) {
      if (collection == null) {
        return collection;
      }
      if (!isArrayLike(collection)) {
        return eachFunc(collection, iteratee);
      }
      var length = collection.length,
          index = fromRight ? length : -1,
          iterable = Object(collection);

      while ((fromRight ? index-- : ++index < length)) {
        if (iteratee(iterable[index], index, iterable) === false) {
          break;
        }
      }
      return collection;
    };
  }

  /**
   * Creates a base function for methods like `_.forIn` and `_.forOwn`.
   *
   * @private
   * @param {boolean} [fromRight] Specify iterating from right to left.
   * @returns {Function} Returns the new base function.
   */
  function createBaseFor(fromRight) {
    return function(object, iteratee, keysFunc) {
      var index = -1,
          iterable = Object(object),
          props = keysFunc(object),
          length = props.length;

      while (length--) {
        var key = props[fromRight ? length : ++index];
        if (iteratee(iterable[key], key, iterable) === false) {
          break;
        }
      }
      return object;
    };
  }

  /**
   * Creates a function that produces an instance of `Ctor` regardless of
   * whether it was invoked as part of a `new` expression or by `call` or `apply`.
   *
   * @private
   * @param {Function} Ctor The constructor to wrap.
   * @returns {Function} Returns the new wrapped function.
   */
  function createCtor(Ctor) {
    return function() {
      // Use a `switch` statement to work with class constructors. See
      // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
      // for more details.
      var args = arguments;
      var thisBinding = baseCreate(Ctor.prototype),
          result = Ctor.apply(thisBinding, args);

      // Mimic the constructor's `return` behavior.
      // See https://es5.github.io/#x13.2.2 for more details.
      return isObject(result) ? result : thisBinding;
    };
  }

  /**
   * Creates a `_.find` or `_.findLast` function.
   *
   * @private
   * @param {Function} findIndexFunc The function to find the collection index.
   * @returns {Function} Returns the new find function.
   */
  function createFind(findIndexFunc) {
    return function(collection, predicate, fromIndex) {
      var iterable = Object(collection);
      if (!isArrayLike(collection)) {
        var iteratee = baseIteratee(predicate, 3);
        collection = keys(collection);
        predicate = function(key) { return iteratee(iterable[key], key, iterable); };
      }
      var index = findIndexFunc(collection, predicate, fromIndex);
      return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
    };
  }

  /**
   * Creates a function that wraps `func` to invoke it with the `this` binding
   * of `thisArg` and `partials` prepended to the arguments it receives.
   *
   * @private
   * @param {Function} func The function to wrap.
   * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
   * @param {*} thisArg The `this` binding of `func`.
   * @param {Array} partials The arguments to prepend to those provided to
   *  the new function.
   * @returns {Function} Returns the new wrapped function.
   */
  function createPartial(func, bitmask, thisArg, partials) {
    if (typeof func != 'function') {
      throw new TypeError(FUNC_ERROR_TEXT);
    }
    var isBind = bitmask & WRAP_BIND_FLAG,
        Ctor = createCtor(func);

    function wrapper() {
      var argsIndex = -1,
          argsLength = arguments.length,
          leftIndex = -1,
          leftLength = partials.length,
          args = Array(leftLength + argsLength),
          fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;

      while (++leftIndex < leftLength) {
        args[leftIndex] = partials[leftIndex];
      }
      while (argsLength--) {
        args[leftIndex++] = arguments[++argsIndex];
      }
      return fn.apply(isBind ? thisArg : this, args);
    }
    return wrapper;
  }

  /**
   * A specialized version of `baseIsEqualDeep` for arrays with support for
   * partial deep comparisons.
   *
   * @private
   * @param {Array} array The array to compare.
   * @param {Array} other The other array to compare.
   * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
   * @param {Function} customizer The function to customize comparisons.
   * @param {Function} equalFunc The function to determine equivalents of values.
   * @param {Object} stack Tracks traversed `array` and `other` objects.
   * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
   */
  function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
    var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
        arrLength = array.length,
        othLength = other.length;

    if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
      return false;
    }
    // Check that cyclic values are equal.
    var arrStacked = stack.get(array);
    var othStacked = stack.get(other);
    if (arrStacked && othStacked) {
      return arrStacked == other && othStacked == array;
    }
    var index = -1,
        result = true,
        seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined;

    // Ignore non-index properties.
    while (++index < arrLength) {
      var arrValue = array[index],
          othValue = other[index];

      var compared;
      if (compared !== undefined) {
        if (compared) {
          continue;
        }
        result = false;
        break;
      }
      // Recursively compare arrays (susceptible to call stack limits).
      if (seen) {
        if (!baseSome(other, function(othValue, othIndex) {
              if (!indexOf(seen, othIndex) &&
                  (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
                return seen.push(othIndex);
              }
            })) {
          result = false;
          break;
        }
      } else if (!(
            arrValue === othValue ||
              equalFunc(arrValue, othValue, bitmask, customizer, stack)
          )) {
        result = false;
        break;
      }
    }
    return result;
  }

  /**
   * A specialized version of `baseIsEqualDeep` for comparing objects of
   * the same `toStringTag`.
   *
   * **Note:** This function only supports comparing values with tags of
   * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
   *
   * @private
   * @param {Object} object The object to compare.
   * @param {Object} other The other object to compare.
   * @param {string} tag The `toStringTag` of the objects to compare.
   * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
   * @param {Function} customizer The function to customize comparisons.
   * @param {Function} equalFunc The function to determine equivalents of values.
   * @param {Object} stack Tracks traversed `object` and `other` objects.
   * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
   */
  function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
    switch (tag) {

      case boolTag:
      case dateTag:
      case numberTag:
        // Coerce booleans to `1` or `0` and dates to milliseconds.
        // Invalid dates are coerced to `NaN`.
        return eq(+object, +other);

      case errorTag:
        return object.name == other.name && object.message == other.message;

      case regexpTag:
      case stringTag:
        // Coerce regexes to strings and treat strings, primitives and objects,
        // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
        // for more details.
        return object == (other + '');

    }
    return false;
  }

  /**
   * A specialized version of `baseIsEqualDeep` for objects with support for
   * partial deep comparisons.
   *
   * @private
   * @param {Object} object The object to compare.
   * @param {Object} other The other object to compare.
   * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
   * @param {Function} customizer The function to customize comparisons.
   * @param {Function} equalFunc The function to determine equivalents of values.
   * @param {Object} stack Tracks traversed `object` and `other` objects.
   * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
   */
  function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
    var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
        objProps = keys(object),
        objLength = objProps.length,
        othProps = keys(other),
        othLength = othProps.length;

    if (objLength != othLength && !isPartial) {
      return false;
    }
    var index = objLength;
    while (index--) {
      var key = objProps[index];
      if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
        return false;
      }
    }
    // Check that cyclic values are equal.
    var objStacked = stack.get(object);
    var othStacked = stack.get(other);
    if (objStacked && othStacked) {
      return objStacked == other && othStacked == object;
    }
    var result = true;

    var skipCtor = isPartial;
    while (++index < objLength) {
      key = objProps[index];
      var objValue = object[key],
          othValue = other[key];

      var compared;
      // Recursively compare objects (susceptible to call stack limits).
      if (!(compared === undefined
            ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
            : compared
          )) {
        result = false;
        break;
      }
      skipCtor || (skipCtor = key == 'constructor');
    }
    if (result && !skipCtor) {
      var objCtor = object.constructor,
          othCtor = other.constructor;

      // Non `Object` object instances with different constructors are not equal.
      if (objCtor != othCtor &&
          ('constructor' in object && 'constructor' in other) &&
          !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
            typeof othCtor == 'function' && othCtor instanceof othCtor)) {
        result = false;
      }
    }
    return result;
  }

  /**
   * A specialized version of `baseRest` which flattens the rest array.
   *
   * @private
   * @param {Function} func The function to apply a rest parameter to.
   * @returns {Function} Returns the new function.
   */
  function flatRest(func) {
    return setToString(overRest(func, undefined, flatten), func + '');
  }

  /**
   * Checks if `value` is a flattenable `arguments` object or array.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
   */
  function isFlattenable(value) {
    return isArray(value) || isArguments(value);
  }

  /**
   * Checks if `value` is a valid array-like index.
   *
   * @private
   * @param {*} value The value to check.
   * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
   * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
   */
  function isIndex(value, length) {
    var type = typeof value;
    length = length == null ? MAX_SAFE_INTEGER : length;

    return !!length &&
      (type == 'number' ||
        (type != 'symbol' && reIsUint.test(value))) &&
          (value > -1 && value % 1 == 0 && value < length);
  }

  /**
   * Checks if the given arguments are from an iteratee call.
   *
   * @private
   * @param {*} value The potential iteratee value argument.
   * @param {*} index The potential iteratee index or key argument.
   * @param {*} object The potential iteratee object argument.
   * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
   *  else `false`.
   */
  function isIterateeCall(value, index, object) {
    if (!isObject(object)) {
      return false;
    }
    var type = typeof index;
    if (type == 'number'
          ? (isArrayLike(object) && isIndex(index, object.length))
          : (type == 'string' && index in object)
        ) {
      return eq(object[index], value);
    }
    return false;
  }

  /**
   * This function is like
   * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
   * except that it includes inherited enumerable properties.
   *
   * @private
   * @param {Object} object The object to query.
   * @returns {Array} Returns the array of property names.
   */
  function nativeKeysIn(object) {
    var result = [];
    if (object != null) {
      for (var key in Object(object)) {
        result.push(key);
      }
    }
    return result;
  }

  /**
   * Converts `value` to a string using `Object.prototype.toString`.
   *
   * @private
   * @param {*} value The value to convert.
   * @returns {string} Returns the converted string.
   */
  function objectToString(value) {
    return nativeObjectToString.call(value);
  }

  /**
   * A specialized version of `baseRest` which transforms the rest array.
   *
   * @private
   * @param {Function} func The function to apply a rest parameter to.
   * @param {number} [start=func.length-1] The start position of the rest parameter.
   * @param {Function} transform The rest array transform.
   * @returns {Function} Returns the new function.
   */
  function overRest(func, start, transform) {
    start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
    return function() {
      var args = arguments,
          index = -1,
          length = nativeMax(args.length - start, 0),
          array = Array(length);

      while (++index < length) {
        array[index] = args[start + index];
      }
      index = -1;
      var otherArgs = Array(start + 1);
      while (++index < start) {
        otherArgs[index] = args[index];
      }
      otherArgs[start] = transform(array);
      return func.apply(this, otherArgs);
    };
  }

  /**
   * Sets the `toString` method of `func` to return `string`.
   *
   * @private
   * @param {Function} func The function to modify.
   * @param {Function} string The `toString` result.
   * @returns {Function} Returns `func`.
   */
  var setToString = identity;

  /*------------------------------------------------------------------------*/

  /**
   * Creates an array with all falsey values removed. The values `false`, `null`,
   * `0`, `""`, `undefined`, and `NaN` are falsey.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Array
   * @param {Array} array The array to compact.
   * @returns {Array} Returns the new array of filtered values.
   * @example
   *
   * _.compact([0, 1, false, 2, '', 3]);
   * // => [1, 2, 3]
   */
  function compact(array) {
    return baseFilter(array, Boolean);
  }

  /**
   * Creates a new array concatenating `array` with any additional arrays
   * and/or values.
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Array
   * @param {Array} array The array to concatenate.
   * @param {...*} [values] The values to concatenate.
   * @returns {Array} Returns the new concatenated array.
   * @example
   *
   * var array = [1];
   * var other = _.concat(array, 2, [3], [[4]]);
   *
   * console.log(other);
   * // => [1, 2, 3, [4]]
   *
   * console.log(array);
   * // => [1]
   */
  function concat() {
    var length = arguments.length;
    if (!length) {
      return [];
    }
    var args = Array(length - 1),
        array = arguments[0],
        index = length;

    while (index--) {
      args[index - 1] = arguments[index];
    }
    return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
  }

  /**
   * This method is like `_.find` except that it returns the index of the first
   * element `predicate` returns truthy for instead of the element itself.
   *
   * @static
   * @memberOf _
   * @since 1.1.0
   * @category Array
   * @param {Array} array The array to inspect.
   * @param {Function} [predicate=_.identity] The function invoked per iteration.
   * @param {number} [fromIndex=0] The index to search from.
   * @returns {number} Returns the index of the found element, else `-1`.
   * @example
   *
   * var users = [
   *   { 'user': 'barney',  'active': false },
   *   { 'user': 'fred',    'active': false },
   *   { 'user': 'pebbles', 'active': true }
   * ];
   *
   * _.findIndex(users, function(o) { return o.user == 'barney'; });
   * // => 0
   *
   * // The `_.matches` iteratee shorthand.
   * _.findIndex(users, { 'user': 'fred', 'active': false });
   * // => 1
   *
   * // The `_.matchesProperty` iteratee shorthand.
   * _.findIndex(users, ['active', false]);
   * // => 0
   *
   * // The `_.property` iteratee shorthand.
   * _.findIndex(users, 'active');
   * // => 2
   */
  function findIndex(array, predicate, fromIndex) {
    var length = array == null ? 0 : array.length;
    if (!length) {
      return -1;
    }
    var index = fromIndex == null ? 0 : toInteger(fromIndex);
    if (index < 0) {
      index = nativeMax(length + index, 0);
    }
    return baseFindIndex(array, baseIteratee(predicate, 3), index);
  }

  /**
   * Flattens `array` a single level deep.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Array
   * @param {Array} array The array to flatten.
   * @returns {Array} Returns the new flattened array.
   * @example
   *
   * _.flatten([1, [2, [3, [4]], 5]]);
   * // => [1, 2, [3, [4]], 5]
   */
  function flatten(array) {
    var length = array == null ? 0 : array.length;
    return length ? baseFlatten(array, 1) : [];
  }

  /**
   * Recursively flattens `array`.
   *
   * @static
   * @memberOf _
   * @since 3.0.0
   * @category Array
   * @param {Array} array The array to flatten.
   * @returns {Array} Returns the new flattened array.
   * @example
   *
   * _.flattenDeep([1, [2, [3, [4]], 5]]);
   * // => [1, 2, 3, 4, 5]
   */
  function flattenDeep(array) {
    var length = array == null ? 0 : array.length;
    return length ? baseFlatten(array, INFINITY) : [];
  }

  /**
   * Gets the first element of `array`.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @alias first
   * @category Array
   * @param {Array} array The array to query.
   * @returns {*} Returns the first element of `array`.
   * @example
   *
   * _.head([1, 2, 3]);
   * // => 1
   *
   * _.head([]);
   * // => undefined
   */
  function head(array) {
    return (array && array.length) ? array[0] : undefined;
  }

  /**
   * Gets the index at which the first occurrence of `value` is found in `array`
   * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
   * for equality comparisons. If `fromIndex` is negative, it's used as the
   * offset from the end of `array`.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Array
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} [fromIndex=0] The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   * @example
   *
   * _.indexOf([1, 2, 1, 2], 2);
   * // => 1
   *
   * // Search from the `fromIndex`.
   * _.indexOf([1, 2, 1, 2], 2, 2);
   * // => 3
   */
  function indexOf(array, value, fromIndex) {
    var length = array == null ? 0 : array.length;
    if (typeof fromIndex == 'number') {
      fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;
    } else {
      fromIndex = 0;
    }
    var index = (fromIndex || 0) - 1,
        isReflexive = value === value;

    while (++index < length) {
      var other = array[index];
      if ((isReflexive ? other === value : other !== other)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * Gets the last element of `array`.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Array
   * @param {Array} array The array to query.
   * @returns {*} Returns the last element of `array`.
   * @example
   *
   * _.last([1, 2, 3]);
   * // => 3
   */
  function last(array) {
    var length = array == null ? 0 : array.length;
    return length ? array[length - 1] : undefined;
  }

  /**
   * Creates a slice of `array` from `start` up to, but not including, `end`.
   *
   * **Note:** This method is used instead of
   * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
   * returned.
   *
   * @static
   * @memberOf _
   * @since 3.0.0
   * @category Array
   * @param {Array} array The array to slice.
   * @param {number} [start=0] The start position.
   * @param {number} [end=array.length] The end position.
   * @returns {Array} Returns the slice of `array`.
   */
  function slice(array, start, end) {
    var length = array == null ? 0 : array.length;
    start = start == null ? 0 : +start;
    end = end === undefined ? length : +end;
    return length ? baseSlice(array, start, end) : [];
  }

  /*------------------------------------------------------------------------*/

  /**
   * Creates a `lodash` wrapper instance that wraps `value` with explicit method
   * chain sequences enabled. The result of such sequences must be unwrapped
   * with `_#value`.
   *
   * @static
   * @memberOf _
   * @since 1.3.0
   * @category Seq
   * @param {*} value The value to wrap.
   * @returns {Object} Returns the new `lodash` wrapper instance.
   * @example
   *
   * var users = [
   *   { 'user': 'barney',  'age': 36 },
   *   { 'user': 'fred',    'age': 40 },
   *   { 'user': 'pebbles', 'age': 1 }
   * ];
   *
   * var youngest = _
   *   .chain(users)
   *   .sortBy('age')
   *   .map(function(o) {
   *     return o.user + ' is ' + o.age;
   *   })
   *   .head()
   *   .value();
   * // => 'pebbles is 1'
   */
  function chain(value) {
    var result = lodash(value);
    result.__chain__ = true;
    return result;
  }

  /**
   * This method invokes `interceptor` and returns `value`. The interceptor
   * is invoked with one argument; (value). The purpose of this method is to
   * "tap into" a method chain sequence in order to modify intermediate results.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Seq
   * @param {*} value The value to provide to `interceptor`.
   * @param {Function} interceptor The function to invoke.
   * @returns {*} Returns `value`.
   * @example
   *
   * _([1, 2, 3])
   *  .tap(function(array) {
   *    // Mutate input array.
   *    array.pop();
   *  })
   *  .reverse()
   *  .value();
   * // => [2, 1]
   */
  function tap(value, interceptor) {
    interceptor(value);
    return value;
  }

  /**
   * This method is like `_.tap` except that it returns the result of `interceptor`.
   * The purpose of this method is to "pass thru" values replacing intermediate
   * results in a method chain sequence.
   *
   * @static
   * @memberOf _
   * @since 3.0.0
   * @category Seq
   * @param {*} value The value to provide to `interceptor`.
   * @param {Function} interceptor The function to invoke.
   * @returns {*} Returns the result of `interceptor`.
   * @example
   *
   * _('  abc  ')
   *  .chain()
   *  .trim()
   *  .thru(function(value) {
   *    return [value];
   *  })
   *  .value();
   * // => ['abc']
   */
  function thru(value, interceptor) {
    return interceptor(value);
  }

  /**
   * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
   *
   * @name chain
   * @memberOf _
   * @since 0.1.0
   * @category Seq
   * @returns {Object} Returns the new `lodash` wrapper instance.
   * @example
   *
   * var users = [
   *   { 'user': 'barney', 'age': 36 },
   *   { 'user': 'fred',   'age': 40 }
   * ];
   *
   * // A sequence without explicit chaining.
   * _(users).head();
   * // => { 'user': 'barney', 'age': 36 }
   *
   * // A sequence with explicit chaining.
   * _(users)
   *   .chain()
   *   .head()
   *   .pick('user')
   *   .value();
   * // => { 'user': 'barney' }
   */
  function wrapperChain() {
    return chain(this);
  }

  /**
   * Executes the chain sequence to resolve the unwrapped value.
   *
   * @name value
   * @memberOf _
   * @since 0.1.0
   * @alias toJSON, valueOf
   * @category Seq
   * @returns {*} Returns the resolved unwrapped value.
   * @example
   *
   * _([1, 2, 3]).value();
   * // => [1, 2, 3]
   */
  function wrapperValue() {
    return baseWrapperValue(this.__wrapped__, this.__actions__);
  }

  /*------------------------------------------------------------------------*/

  /**
   * Checks if `predicate` returns truthy for **all** elements of `collection`.
   * Iteration is stopped once `predicate` returns falsey. The predicate is
   * invoked with three arguments: (value, index|key, collection).
   *
   * **Note:** This method returns `true` for
   * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
   * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
   * elements of empty collections.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Collection
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} [predicate=_.identity] The function invoked per iteration.
   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
   * @returns {boolean} Returns `true` if all elements pass the predicate check,
   *  else `false`.
   * @example
   *
   * _.every([true, 1, null, 'yes'], Boolean);
   * // => false
   *
   * var users = [
   *   { 'user': 'barney', 'age': 36, 'active': false },
   *   { 'user': 'fred',   'age': 40, 'active': false }
   * ];
   *
   * // The `_.matches` iteratee shorthand.
   * _.every(users, { 'user': 'barney', 'active': false });
   * // => false
   *
   * // The `_.matchesProperty` iteratee shorthand.
   * _.every(users, ['active', false]);
   * // => true
   *
   * // The `_.property` iteratee shorthand.
   * _.every(users, 'active');
   * // => false
   */
  function every(collection, predicate, guard) {
    predicate = guard ? undefined : predicate;
    return baseEvery(collection, baseIteratee(predicate));
  }

  /**
   * Iterates over elements of `collection`, returning an array of all elements
   * `predicate` returns truthy for. The predicate is invoked with three
   * arguments: (value, index|key, collection).
   *
   * **Note:** Unlike `_.remove`, this method returns a new array.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Collection
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} [predicate=_.identity] The function invoked per iteration.
   * @returns {Array} Returns the new filtered array.
   * @see _.reject
   * @example
   *
   * var users = [
   *   { 'user': 'barney', 'age': 36, 'active': true },
   *   { 'user': 'fred',   'age': 40, 'active': false }
   * ];
   *
   * _.filter(users, function(o) { return !o.active; });
   * // => objects for ['fred']
   *
   * // The `_.matches` iteratee shorthand.
   * _.filter(users, { 'age': 36, 'active': true });
   * // => objects for ['barney']
   *
   * // The `_.matchesProperty` iteratee shorthand.
   * _.filter(users, ['active', false]);
   * // => objects for ['fred']
   *
   * // The `_.property` iteratee shorthand.
   * _.filter(users, 'active');
   * // => objects for ['barney']
   *
   * // Combining several predicates using `_.overEvery` or `_.overSome`.
   * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
   * // => objects for ['fred', 'barney']
   */
  function filter(collection, predicate) {
    return baseFilter(collection, baseIteratee(predicate));
  }

  /**
   * Iterates over elements of `collection`, returning the first element
   * `predicate` returns truthy for. The predicate is invoked with three
   * arguments: (value, index|key, collection).
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Collection
   * @param {Array|Object} collection The collection to inspect.
   * @param {Function} [predicate=_.identity] The function invoked per iteration.
   * @param {number} [fromIndex=0] The index to search from.
   * @returns {*} Returns the matched element, else `undefined`.
   * @example
   *
   * var users = [
   *   { 'user': 'barney',  'age': 36, 'active': true },
   *   { 'user': 'fred',    'age': 40, 'active': false },
   *   { 'user': 'pebbles', 'age': 1,  'active': true }
   * ];
   *
   * _.find(users, function(o) { return o.age < 40; });
   * // => object for 'barney'
   *
   * // The `_.matches` iteratee shorthand.
   * _.find(users, { 'age': 1, 'active': true });
   * // => object for 'pebbles'
   *
   * // The `_.matchesProperty` iteratee shorthand.
   * _.find(users, ['active', false]);
   * // => object for 'fred'
   *
   * // The `_.property` iteratee shorthand.
   * _.find(users, 'active');
   * // => object for 'barney'
   */
  var find = createFind(findIndex);

  /**
   * Iterates over elements of `collection` and invokes `iteratee` for each element.
   * The iteratee is invoked with three arguments: (value, index|key, collection).
   * Iteratee functions may exit iteration early by explicitly returning `false`.
   *
   * **Note:** As with other "Collections" methods, objects with a "length"
   * property are iterated like arrays. To avoid this behavior use `_.forIn`
   * or `_.forOwn` for object iteration.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @alias each
   * @category Collection
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} [iteratee=_.identity] The function invoked per iteration.
   * @returns {Array|Object} Returns `collection`.
   * @see _.forEachRight
   * @example
   *
   * _.forEach([1, 2], function(value) {
   *   console.log(value);
   * });
   * // => Logs `1` then `2`.
   *
   * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
   *   console.log(key);
   * });
   * // => Logs 'a' then 'b' (iteration order is not guaranteed).
   */
  function forEach(collection, iteratee) {
    return baseEach(collection, baseIteratee(iteratee));
  }

  /**
   * Creates an array of values by running each element in `collection` thru
   * `iteratee`. The iteratee is invoked with three arguments:
   * (value, index|key, collection).
   *
   * Many lodash methods are guarded to work as iteratees for methods like
   * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
   *
   * The guarded methods are:
   * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
   * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
   * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
   * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Collection
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} [iteratee=_.identity] The function invoked per iteration.
   * @returns {Array} Returns the new mapped array.
   * @example
   *
   * function square(n) {
   *   return n * n;
   * }
   *
   * _.map([4, 8], square);
   * // => [16, 64]
   *
   * _.map({ 'a': 4, 'b': 8 }, square);
   * // => [16, 64] (iteration order is not guaranteed)
   *
   * var users = [
   *   { 'user': 'barney' },
   *   { 'user': 'fred' }
   * ];
   *
   * // The `_.property` iteratee shorthand.
   * _.map(users, 'user');
   * // => ['barney', 'fred']
   */
  function map(collection, iteratee) {
    return baseMap(collection, baseIteratee(iteratee));
  }

  /**
   * Reduces `collection` to a value which is the accumulated result of running
   * each element in `collection` thru `iteratee`, where each successive
   * invocation is supplied the return value of the previous. If `accumulator`
   * is not given, the first element of `collection` is used as the initial
   * value. The iteratee is invoked with four arguments:
   * (accumulator, value, index|key, collection).
   *
   * Many lodash methods are guarded to work as iteratees for methods like
   * `_.reduce`, `_.reduceRight`, and `_.transform`.
   *
   * The guarded methods are:
   * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
   * and `sortBy`
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Collection
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} [iteratee=_.identity] The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @returns {*} Returns the accumulated value.
   * @see _.reduceRight
   * @example
   *
   * _.reduce([1, 2], function(sum, n) {
   *   return sum + n;
   * }, 0);
   * // => 3
   *
   * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
   *   (result[value] || (result[value] = [])).push(key);
   *   return result;
   * }, {});
   * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
   */
  function reduce(collection, iteratee, accumulator) {
    return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach);
  }

  /**
   * Gets the size of `collection` by returning its length for array-like
   * values or the number of own enumerable string keyed properties for objects.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Collection
   * @param {Array|Object|string} collection The collection to inspect.
   * @returns {number} Returns the collection size.
   * @example
   *
   * _.size([1, 2, 3]);
   * // => 3
   *
   * _.size({ 'a': 1, 'b': 2 });
   * // => 2
   *
   * _.size('pebbles');
   * // => 7
   */
  function size(collection) {
    if (collection == null) {
      return 0;
    }
    collection = isArrayLike(collection) ? collection : nativeKeys(collection);
    return collection.length;
  }

  /**
   * Checks if `predicate` returns truthy for **any** element of `collection`.
   * Iteration is stopped once `predicate` returns truthy. The predicate is
   * invoked with three arguments: (value, index|key, collection).
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Collection
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} [predicate=_.identity] The function invoked per iteration.
   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
   * @returns {boolean} Returns `true` if any element passes the predicate check,
   *  else `false`.
   * @example
   *
   * _.some([null, 0, 'yes', false], Boolean);
   * // => true
   *
   * var users = [
   *   { 'user': 'barney', 'active': true },
   *   { 'user': 'fred',   'active': false }
   * ];
   *
   * // The `_.matches` iteratee shorthand.
   * _.some(users, { 'user': 'barney', 'active': false });
   * // => false
   *
   * // The `_.matchesProperty` iteratee shorthand.
   * _.some(users, ['active', false]);
   * // => true
   *
   * // The `_.property` iteratee shorthand.
   * _.some(users, 'active');
   * // => true
   */
  function some(collection, predicate, guard) {
    predicate = guard ? undefined : predicate;
    return baseSome(collection, baseIteratee(predicate));
  }

  /**
   * Creates an array of elements, sorted in ascending order by the results of
   * running each element in a collection thru each iteratee. This method
   * performs a stable sort, that is, it preserves the original sort order of
   * equal elements. The iteratees are invoked with one argument: (value).
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Collection
   * @param {Array|Object} collection The collection to iterate over.
   * @param {...(Function|Function[])} [iteratees=[_.identity]]
   *  The iteratees to sort by.
   * @returns {Array} Returns the new sorted array.
   * @example
   *
   * var users = [
   *   { 'user': 'fred',   'age': 48 },
   *   { 'user': 'barney', 'age': 36 },
   *   { 'user': 'fred',   'age': 30 },
   *   { 'user': 'barney', 'age': 34 }
   * ];
   *
   * _.sortBy(users, [function(o) { return o.user; }]);
   * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
   *
   * _.sortBy(users, ['user', 'age']);
   * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
   */
  function sortBy(collection, iteratee) {
    var index = 0;
    iteratee = baseIteratee(iteratee);

    return baseMap(baseMap(collection, function(value, key, collection) {
      return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) };
    }).sort(function(object, other) {
      return compareAscending(object.criteria, other.criteria) || (object.index - other.index);
    }), baseProperty('value'));
  }

  /*------------------------------------------------------------------------*/

  /**
   * Creates a function that invokes `func`, with the `this` binding and arguments
   * of the created function, while it's called less than `n` times. Subsequent
   * calls to the created function return the result of the last `func` invocation.
   *
   * @static
   * @memberOf _
   * @since 3.0.0
   * @category Function
   * @param {number} n The number of calls at which `func` is no longer invoked.
   * @param {Function} func The function to restrict.
   * @returns {Function} Returns the new restricted function.
   * @example
   *
   * jQuery(element).on('click', _.before(5, addContactToList));
   * // => Allows adding up to 4 contacts to the list.
   */
  function before(n, func) {
    var result;
    if (typeof func != 'function') {
      throw new TypeError(FUNC_ERROR_TEXT);
    }
    n = toInteger(n);
    return function() {
      if (--n > 0) {
        result = func.apply(this, arguments);
      }
      if (n <= 1) {
        func = undefined;
      }
      return result;
    };
  }

  /**
   * Creates a function that invokes `func` with the `this` binding of `thisArg`
   * and `partials` prepended to the arguments it receives.
   *
   * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
   * may be used as a placeholder for partially applied arguments.
   *
   * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
   * property of bound functions.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Function
   * @param {Function} func The function to bind.
   * @param {*} thisArg The `this` binding of `func`.
   * @param {...*} [partials] The arguments to be partially applied.
   * @returns {Function} Returns the new bound function.
   * @example
   *
   * function greet(greeting, punctuation) {
   *   return greeting + ' ' + this.user + punctuation;
   * }
   *
   * var object = { 'user': 'fred' };
   *
   * var bound = _.bind(greet, object, 'hi');
   * bound('!');
   * // => 'hi fred!'
   *
   * // Bound with placeholders.
   * var bound = _.bind(greet, object, _, '!');
   * bound('hi');
   * // => 'hi fred!'
   */
  var bind = baseRest(function(func, thisArg, partials) {
    return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials);
  });

  /**
   * Defers invoking the `func` until the current call stack has cleared. Any
   * additional arguments are provided to `func` when it's invoked.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Function
   * @param {Function} func The function to defer.
   * @param {...*} [args] The arguments to invoke `func` with.
   * @returns {number} Returns the timer id.
   * @example
   *
   * _.defer(function(text) {
   *   console.log(text);
   * }, 'deferred');
   * // => Logs 'deferred' after one millisecond.
   */
  var defer = baseRest(function(func, args) {
    return baseDelay(func, 1, args);
  });

  /**
   * Invokes `func` after `wait` milliseconds. Any additional arguments are
   * provided to `func` when it's invoked.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Function
   * @param {Function} func The function to delay.
   * @param {number} wait The number of milliseconds to delay invocation.
   * @param {...*} [args] The arguments to invoke `func` with.
   * @returns {number} Returns the timer id.
   * @example
   *
   * _.delay(function(text) {
   *   console.log(text);
   * }, 1000, 'later');
   * // => Logs 'later' after one second.
   */
  var delay = baseRest(function(func, wait, args) {
    return baseDelay(func, toNumber(wait) || 0, args);
  });

  /**
   * Creates a function that negates the result of the predicate `func`. The
   * `func` predicate is invoked with the `this` binding and arguments of the
   * created function.
   *
   * @static
   * @memberOf _
   * @since 3.0.0
   * @category Function
   * @param {Function} predicate The predicate to negate.
   * @returns {Function} Returns the new negated function.
   * @example
   *
   * function isEven(n) {
   *   return n % 2 == 0;
   * }
   *
   * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
   * // => [1, 3, 5]
   */
  function negate(predicate) {
    if (typeof predicate != 'function') {
      throw new TypeError(FUNC_ERROR_TEXT);
    }
    return function() {
      var args = arguments;
      return !predicate.apply(this, args);
    };
  }

  /**
   * Creates a function that is restricted to invoking `func` once. Repeat calls
   * to the function return the value of the first invocation. The `func` is
   * invoked with the `this` binding and arguments of the created function.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Function
   * @param {Function} func The function to restrict.
   * @returns {Function} Returns the new restricted function.
   * @example
   *
   * var initialize = _.once(createApplication);
   * initialize();
   * initialize();
   * // => `createApplication` is invoked once
   */
  function once(func) {
    return before(2, func);
  }

  /*------------------------------------------------------------------------*/

  /**
   * Creates a shallow clone of `value`.
   *
   * **Note:** This method is loosely based on the
   * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
   * and supports cloning arrays, array buffers, booleans, date objects, maps,
   * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
   * arrays. The own enumerable properties of `arguments` objects are cloned
   * as plain objects. An empty object is returned for uncloneable values such
   * as error objects, functions, DOM nodes, and WeakMaps.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to clone.
   * @returns {*} Returns the cloned value.
   * @see _.cloneDeep
   * @example
   *
   * var objects = [{ 'a': 1 }, { 'b': 2 }];
   *
   * var shallow = _.clone(objects);
   * console.log(shallow[0] === objects[0]);
   * // => true
   */
  function clone(value) {
    if (!isObject(value)) {
      return value;
    }
    return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value));
  }

  /**
   * Performs a
   * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
   * comparison between two values to determine if they are equivalent.
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to compare.
   * @param {*} other The other value to compare.
   * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
   * @example
   *
   * var object = { 'a': 1 };
   * var other = { 'a': 1 };
   *
   * _.eq(object, object);
   * // => true
   *
   * _.eq(object, other);
   * // => false
   *
   * _.eq('a', 'a');
   * // => true
   *
   * _.eq('a', Object('a'));
   * // => false
   *
   * _.eq(NaN, NaN);
   * // => true
   */
  function eq(value, other) {
    return value === other || (value !== value && other !== other);
  }

  /**
   * Checks if `value` is likely an `arguments` object.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is an `arguments` object,
   *  else `false`.
   * @example
   *
   * _.isArguments(function() { return arguments; }());
   * // => true
   *
   * _.isArguments([1, 2, 3]);
   * // => false
   */
  var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
    return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
      !propertyIsEnumerable.call(value, 'callee');
  };

  /**
   * Checks if `value` is classified as an `Array` object.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is an array, else `false`.
   * @example
   *
   * _.isArray([1, 2, 3]);
   * // => true
   *
   * _.isArray(document.body.children);
   * // => false
   *
   * _.isArray('abc');
   * // => false
   *
   * _.isArray(_.noop);
   * // => false
   */
  var isArray = Array.isArray;

  /**
   * Checks if `value` is array-like. A value is considered array-like if it's
   * not a function and has a `value.length` that's an integer greater than or
   * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
   * @example
   *
   * _.isArrayLike([1, 2, 3]);
   * // => true
   *
   * _.isArrayLike(document.body.children);
   * // => true
   *
   * _.isArrayLike('abc');
   * // => true
   *
   * _.isArrayLike(_.noop);
   * // => false
   */
  function isArrayLike(value) {
    return value != null && isLength(value.length) && !isFunction(value);
  }

  /**
   * Checks if `value` is classified as a boolean primitive or object.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
   * @example
   *
   * _.isBoolean(false);
   * // => true
   *
   * _.isBoolean(null);
   * // => false
   */
  function isBoolean(value) {
    return value === true || value === false ||
      (isObjectLike(value) && baseGetTag(value) == boolTag);
  }

  /**
   * Checks if `value` is classified as a `Date` object.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
   * @example
   *
   * _.isDate(new Date);
   * // => true
   *
   * _.isDate('Mon April 23 2012');
   * // => false
   */
  var isDate = baseIsDate;

  /**
   * Checks if `value` is an empty object, collection, map, or set.
   *
   * Objects are considered empty if they have no own enumerable string keyed
   * properties.
   *
   * Array-like values such as `arguments` objects, arrays, buffers, strings, or
   * jQuery-like collections are considered empty if they have a `length` of `0`.
   * Similarly, maps and sets are considered empty if they have a `size` of `0`.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is empty, else `false`.
   * @example
   *
   * _.isEmpty(null);
   * // => true
   *
   * _.isEmpty(true);
   * // => true
   *
   * _.isEmpty(1);
   * // => true
   *
   * _.isEmpty([1, 2, 3]);
   * // => false
   *
   * _.isEmpty({ 'a': 1 });
   * // => false
   */
  function isEmpty(value) {
    if (isArrayLike(value) &&
        (isArray(value) || isString(value) ||
          isFunction(value.splice) || isArguments(value))) {
      return !value.length;
    }
    return !nativeKeys(value).length;
  }

  /**
   * Performs a deep comparison between two values to determine if they are
   * equivalent.
   *
   * **Note:** This method supports comparing arrays, array buffers, booleans,
   * date objects, error objects, maps, numbers, `Object` objects, regexes,
   * sets, strings, symbols, and typed arrays. `Object` objects are compared
   * by their own, not inherited, enumerable properties. Functions and DOM
   * nodes are compared by strict equality, i.e. `===`.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to compare.
   * @param {*} other The other value to compare.
   * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
   * @example
   *
   * var object = { 'a': 1 };
   * var other = { 'a': 1 };
   *
   * _.isEqual(object, other);
   * // => true
   *
   * object === other;
   * // => false
   */
  function isEqual(value, other) {
    return baseIsEqual(value, other);
  }

  /**
   * Checks if `value` is a finite primitive number.
   *
   * **Note:** This method is based on
   * [`Number.isFinite`](https://mdn.io/Number/isFinite).
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
   * @example
   *
   * _.isFinite(3);
   * // => true
   *
   * _.isFinite(Number.MIN_VALUE);
   * // => true
   *
   * _.isFinite(Infinity);
   * // => false
   *
   * _.isFinite('3');
   * // => false
   */
  function isFinite(value) {
    return typeof value == 'number' && nativeIsFinite(value);
  }

  /**
   * Checks if `value` is classified as a `Function` object.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a function, else `false`.
   * @example
   *
   * _.isFunction(_);
   * // => true
   *
   * _.isFunction(/abc/);
   * // => false
   */
  function isFunction(value) {
    if (!isObject(value)) {
      return false;
    }
    // The use of `Object#toString` avoids issues with the `typeof` operator
    // in Safari 9 which returns 'object' for typed arrays and other constructors.
    var tag = baseGetTag(value);
    return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
  }

  /**
   * Checks if `value` is a valid array-like length.
   *
   * **Note:** This method is loosely based on
   * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
   * @example
   *
   * _.isLength(3);
   * // => true
   *
   * _.isLength(Number.MIN_VALUE);
   * // => false
   *
   * _.isLength(Infinity);
   * // => false
   *
   * _.isLength('3');
   * // => false
   */
  function isLength(value) {
    return typeof value == 'number' &&
      value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
  }

  /**
   * Checks if `value` is the
   * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
   * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is an object, else `false`.
   * @example
   *
   * _.isObject({});
   * // => true
   *
   * _.isObject([1, 2, 3]);
   * // => true
   *
   * _.isObject(_.noop);
   * // => true
   *
   * _.isObject(null);
   * // => false
   */
  function isObject(value) {
    var type = typeof value;
    return value != null && (type == 'object' || type == 'function');
  }

  /**
   * Checks if `value` is object-like. A value is object-like if it's not `null`
   * and has a `typeof` result of "object".
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
   * @example
   *
   * _.isObjectLike({});
   * // => true
   *
   * _.isObjectLike([1, 2, 3]);
   * // => true
   *
   * _.isObjectLike(_.noop);
   * // => false
   *
   * _.isObjectLike(null);
   * // => false
   */
  function isObjectLike(value) {
    return value != null && typeof value == 'object';
  }

  /**
   * Checks if `value` is `NaN`.
   *
   * **Note:** This method is based on
   * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
   * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
   * `undefined` and other non-number values.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
   * @example
   *
   * _.isNaN(NaN);
   * // => true
   *
   * _.isNaN(new Number(NaN));
   * // => true
   *
   * isNaN(undefined);
   * // => true
   *
   * _.isNaN(undefined);
   * // => false
   */
  function isNaN(value) {
    // An `NaN` primitive is the only value that is not equal to itself.
    // Perform the `toStringTag` check first to avoid errors with some
    // ActiveX objects in IE.
    return isNumber(value) && value != +value;
  }

  /**
   * Checks if `value` is `null`.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
   * @example
   *
   * _.isNull(null);
   * // => true
   *
   * _.isNull(void 0);
   * // => false
   */
  function isNull(value) {
    return value === null;
  }

  /**
   * Checks if `value` is classified as a `Number` primitive or object.
   *
   * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
   * classified as numbers, use the `_.isFinite` method.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a number, else `false`.
   * @example
   *
   * _.isNumber(3);
   * // => true
   *
   * _.isNumber(Number.MIN_VALUE);
   * // => true
   *
   * _.isNumber(Infinity);
   * // => true
   *
   * _.isNumber('3');
   * // => false
   */
  function isNumber(value) {
    return typeof value == 'number' ||
      (isObjectLike(value) && baseGetTag(value) == numberTag);
  }

  /**
   * Checks if `value` is classified as a `RegExp` object.
   *
   * @static
   * @memberOf _
   * @since 0.1.0
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
   * @example
   *
   * _.isRegExp(/abc/);
   * // => true
   *
   * _.isRegExp('/abc/');
   * // => false
   */
  var isRegExp = baseIsRegExp;

  /**
   * Checks if `value` is classified as a `String` primitive or object.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is a string, else `false`.
   * @example
   *
   * _.isString('abc');
   * // => true
   *
   * _.isString(1);
   * // => false
   */
  function isString(value) {
    return typeof value == 'string' ||
      (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
  }

  /**
   * Checks if `value` is `undefined`.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Lang
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
   * @example
   *
   * _.isUndefined(void 0);
   * // => true
   *
   * _.isUndefined(null);
   * // => false
   */
  function isUndefined(value) {
    return value === undefined;
  }

  /**
   * Converts `value` to an array.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Lang
   * @param {*} value The value to convert.
   * @returns {Array} Returns the converted array.
   * @example
   *
   * _.toArray({ 'a': 1, 'b': 2 });
   * // => [1, 2]
   *
   * _.toArray('abc');
   * // => ['a', 'b', 'c']
   *
   * _.toArray(1);
   * // => []
   *
   * _.toArray(null);
   * // => []
   */
  function toArray(value) {
    if (!isArrayLike(value)) {
      return values(value);
    }
    return value.length ? copyArray(value) : [];
  }

  /**
   * Converts `value` to an integer.
   *
   * **Note:** This method is loosely based on
   * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to convert.
   * @returns {number} Returns the converted integer.
   * @example
   *
   * _.toInteger(3.2);
   * // => 3
   *
   * _.toInteger(Number.MIN_VALUE);
   * // => 0
   *
   * _.toInteger(Infinity);
   * // => 1.7976931348623157e+308
   *
   * _.toInteger('3.2');
   * // => 3
   */
  var toInteger = Number;

  /**
   * Converts `value` to a number.
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to process.
   * @returns {number} Returns the number.
   * @example
   *
   * _.toNumber(3.2);
   * // => 3.2
   *
   * _.toNumber(Number.MIN_VALUE);
   * // => 5e-324
   *
   * _.toNumber(Infinity);
   * // => Infinity
   *
   * _.toNumber('3.2');
   * // => 3.2
   */
  var toNumber = Number;

  /**
   * Converts `value` to a string. An empty string is returned for `null`
   * and `undefined` values. The sign of `-0` is preserved.
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @category Lang
   * @param {*} value The value to convert.
   * @returns {string} Returns the converted string.
   * @example
   *
   * _.toString(null);
   * // => ''
   *
   * _.toString(-0);
   * // => '-0'
   *
   * _.toString([1, 2, 3]);
   * // => '1,2,3'
   */
  function toString(value) {
    if (typeof value == 'string') {
      return value;
    }
    return value == null ? '' : (value + '');
  }

  /*------------------------------------------------------------------------*/

  /**
   * Assigns own enumerable string keyed properties of source objects to the
   * destination object. Source objects are applied from left to right.
   * Subsequent sources overwrite property assignments of previous sources.
   *
   * **Note:** This method mutates `object` and is loosely based on
   * [`Object.assign`](https://mdn.io/Object/assign).
   *
   * @static
   * @memberOf _
   * @since 0.10.0
   * @category Object
   * @param {Object} object The destination object.
   * @param {...Object} [sources] The source objects.
   * @returns {Object} Returns `object`.
   * @see _.assignIn
   * @example
   *
   * function Foo() {
   *   this.a = 1;
   * }
   *
   * function Bar() {
   *   this.c = 3;
   * }
   *
   * Foo.prototype.b = 2;
   * Bar.prototype.d = 4;
   *
   * _.assign({ 'a': 0 }, new Foo, new Bar);
   * // => { 'a': 1, 'c': 3 }
   */
  var assign = createAssigner(function(object, source) {
    copyObject(source, nativeKeys(source), object);
  });

  /**
   * This method is like `_.assign` except that it iterates over own and
   * inherited source properties.
   *
   * **Note:** This method mutates `object`.
   *
   * @static
   * @memberOf _
   * @since 4.0.0
   * @alias extend
   * @category Object
   * @param {Object} object The destination object.
   * @param {...Object} [sources] The source objects.
   * @returns {Object} Returns `object`.
   * @see _.assign
   * @example
   *
   * function Foo() {
   *   this.a = 1;
   * }
   *
   * function Bar() {
   *   this.c = 3;
   * }
   *
   * Foo.prototype.b = 2;
   * Bar.prototype.d = 4;
   *
   * _.assignIn({ 'a': 0 }, new Foo, new Bar);
   * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
   */
  var assignIn = createAssigner(function(object, source) {
    copyObject(source, nativeKeysIn(source), object);
  });

  /**
   * Creates an object that inherits from the `prototype` object. If a
   * `properties` object is given, its own enumerable string keyed properties
   * are assigned to the created object.
   *
   * @static
   * @memberOf _
   * @since 2.3.0
   * @category Object
   * @param {Object} prototype The object to inherit from.
   * @param {Object} [properties] The properties to assign to the object.
   * @returns {Object} Returns the new object.
   * @example
   *
   * function Shape() {
   *   this.x = 0;
   *   this.y = 0;
   * }
   *
   * function Circle() {
   *   Shape.call(this);
   * }
   *
   * Circle.prototype = _.create(Shape.prototype, {
   *   'constructor': Circle
   * });
   *
   * var circle = new Circle;
   * circle instanceof Circle;
   * // => true
   *
   * circle instanceof Shape;
   * // => true
   */
  function create(prototype, properties) {
    var result = baseCreate(prototype);
    return properties == null ? result : assign(result, properties);
  }

  /**
   * Assigns own and inherited enumerable string keyed properties of source
   * objects to the destination object for all destination properties that
   * resolve to `undefined`. Source objects are applied from left to right.
   * Once a property is set, additional values of the same property are ignored.
   *
   * **Note:** This method mutates `object`.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Object
   * @param {Object} object The destination object.
   * @param {...Object} [sources] The source objects.
   * @returns {Object} Returns `object`.
   * @see _.defaultsDeep
   * @example
   *
   * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
   * // => { 'a': 1, 'b': 2 }
   */
  var defaults = baseRest(function(object, sources) {
    object = Object(object);

    var index = -1;
    var length = sources.length;
    var guard = length > 2 ? sources[2] : undefined;

    if (guard && isIterateeCall(sources[0], sources[1], guard)) {
      length = 1;
    }

    while (++index < length) {
      var source = sources[index];
      var props = keysIn(source);
      var propsIndex = -1;
      var propsLength = props.length;

      while (++propsIndex < propsLength) {
        var key = props[propsIndex];
        var value = object[key];

        if (value === undefined ||
            (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
          object[key] = source[key];
        }
      }
    }

    return object;
  });

  /**
   * Checks if `path` is a direct property of `object`.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Object
   * @param {Object} object The object to query.
   * @param {Array|string} path The path to check.
   * @returns {boolean} Returns `true` if `path` exists, else `false`.
   * @example
   *
   * var object = { 'a': { 'b': 2 } };
   * var other = _.create({ 'a': _.create({ 'b': 2 }) });
   *
   * _.has(object, 'a');
   * // => true
   *
   * _.has(object, 'a.b');
   * // => true
   *
   * _.has(object, ['a', 'b']);
   * // => true
   *
   * _.has(other, 'a');
   * // => false
   */
  function has(object, path) {
    return object != null && hasOwnProperty.call(object, path);
  }

  /**
   * Creates an array of the own enumerable property names of `object`.
   *
   * **Note:** Non-object values are coerced to objects. See the
   * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
   * for more details.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Object
   * @param {Object} object The object to query.
   * @returns {Array} Returns the array of property names.
   * @example
   *
   * function Foo() {
   *   this.a = 1;
   *   this.b = 2;
   * }
   *
   * Foo.prototype.c = 3;
   *
   * _.keys(new Foo);
   * // => ['a', 'b'] (iteration order is not guaranteed)
   *
   * _.keys('hi');
   * // => ['0', '1']
   */
  var keys = nativeKeys;

  /**
   * Creates an array of the own and inherited enumerable property names of `object`.
   *
   * **Note:** Non-object values are coerced to objects.
   *
   * @static
   * @memberOf _
   * @since 3.0.0
   * @category Object
   * @param {Object} object The object to query.
   * @returns {Array} Returns the array of property names.
   * @example
   *
   * function Foo() {
   *   this.a = 1;
   *   this.b = 2;
   * }
   *
   * Foo.prototype.c = 3;
   *
   * _.keysIn(new Foo);
   * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
   */
  var keysIn = nativeKeysIn;

  /**
   * Creates an object composed of the picked `object` properties.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Object
   * @param {Object} object The source object.
   * @param {...(string|string[])} [paths] The property paths to pick.
   * @returns {Object} Returns the new object.
   * @example
   *
   * var object = { 'a': 1, 'b': '2', 'c': 3 };
   *
   * _.pick(object, ['a', 'c']);
   * // => { 'a': 1, 'c': 3 }
   */
  var pick = flatRest(function(object, paths) {
    return object == null ? {} : basePick(object, paths);
  });

  /**
   * This method is like `_.get` except that if the resolved value is a
   * function it's invoked with the `this` binding of its parent object and
   * its result is returned.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Object
   * @param {Object} object The object to query.
   * @param {Array|string} path The path of the property to resolve.
   * @param {*} [defaultValue] The value returned for `undefined` resolved values.
   * @returns {*} Returns the resolved value.
   * @example
   *
   * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
   *
   * _.result(object, 'a[0].b.c1');
   * // => 3
   *
   * _.result(object, 'a[0].b.c2');
   * // => 4
   *
   * _.result(object, 'a[0].b.c3', 'default');
   * // => 'default'
   *
   * _.result(object, 'a[0].b.c3', _.constant('default'));
   * // => 'default'
   */
  function result(object, path, defaultValue) {
    var value = object == null ? undefined : object[path];
    if (value === undefined) {
      value = defaultValue;
    }
    return isFunction(value) ? value.call(object) : value;
  }

  /**
   * Creates an array of the own enumerable string keyed property values of `object`.
   *
   * **Note:** Non-object values are coerced to objects.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Object
   * @param {Object} object The object to query.
   * @returns {Array} Returns the array of property values.
   * @example
   *
   * function Foo() {
   *   this.a = 1;
   *   this.b = 2;
   * }
   *
   * Foo.prototype.c = 3;
   *
   * _.values(new Foo);
   * // => [1, 2] (iteration order is not guaranteed)
   *
   * _.values('hi');
   * // => ['h', 'i']
   */
  function values(object) {
    return object == null ? [] : baseValues(object, keys(object));
  }

  /*------------------------------------------------------------------------*/

  /**
   * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
   * corresponding HTML entities.
   *
   * **Note:** No other characters are escaped. To escape additional
   * characters use a third-party library like [_he_](https://mths.be/he).
   *
   * Though the ">" character is escaped for symmetry, characters like
   * ">" and "/" don't need escaping in HTML and have no special meaning
   * unless they're part of a tag or unquoted attribute value. See
   * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
   * (under "semi-related fun fact") for more details.
   *
   * When working with HTML you should always
   * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
   * XSS vectors.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category String
   * @param {string} [string=''] The string to escape.
   * @returns {string} Returns the escaped string.
   * @example
   *
   * _.escape('fred, barney, & pebbles');
   * // => 'fred, barney, &amp; pebbles'
   */
  function escape(string) {
    string = toString(string);
    return (string && reHasUnescapedHtml.test(string))
      ? string.replace(reUnescapedHtml, escapeHtmlChar)
      : string;
  }

  /*------------------------------------------------------------------------*/

  /**
   * This method returns the first argument it receives.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Util
   * @param {*} value Any value.
   * @returns {*} Returns `value`.
   * @example
   *
   * var object = { 'a': 1 };
   *
   * console.log(_.identity(object) === object);
   * // => true
   */
  function identity(value) {
    return value;
  }

  /**
   * Creates a function that invokes `func` with the arguments of the created
   * function. If `func` is a property name, the created function returns the
   * property value for a given element. If `func` is an array or object, the
   * created function returns `true` for elements that contain the equivalent
   * source properties, otherwise it returns `false`.
   *
   * @static
   * @since 4.0.0
   * @memberOf _
   * @category Util
   * @param {*} [func=_.identity] The value to convert to a callback.
   * @returns {Function} Returns the callback.
   * @example
   *
   * var users = [
   *   { 'user': 'barney', 'age': 36, 'active': true },
   *   { 'user': 'fred',   'age': 40, 'active': false }
   * ];
   *
   * // The `_.matches` iteratee shorthand.
   * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
   * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
   *
   * // The `_.matchesProperty` iteratee shorthand.
   * _.filter(users, _.iteratee(['user', 'fred']));
   * // => [{ 'user': 'fred', 'age': 40 }]
   *
   * // The `_.property` iteratee shorthand.
   * _.map(users, _.iteratee('user'));
   * // => ['barney', 'fred']
   *
   * // Create custom iteratee shorthands.
   * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
   *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
   *     return func.test(string);
   *   };
   * });
   *
   * _.filter(['abc', 'def'], /ef/);
   * // => ['def']
   */
  var iteratee = baseIteratee;

  /**
   * Creates a function that performs a partial deep comparison between a given
   * object and `source`, returning `true` if the given object has equivalent
   * property values, else `false`.
   *
   * **Note:** The created function is equivalent to `_.isMatch` with `source`
   * partially applied.
   *
   * Partial comparisons will match empty array and empty object `source`
   * values against any array or object value, respectively. See `_.isEqual`
   * for a list of supported value comparisons.
   *
   * **Note:** Multiple values can be checked by combining several matchers
   * using `_.overSome`
   *
   * @static
   * @memberOf _
   * @since 3.0.0
   * @category Util
   * @param {Object} source The object of property values to match.
   * @returns {Function} Returns the new spec function.
   * @example
   *
   * var objects = [
   *   { 'a': 1, 'b': 2, 'c': 3 },
   *   { 'a': 4, 'b': 5, 'c': 6 }
   * ];
   *
   * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
   * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
   *
   * // Checking for several possible values
   * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
   * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
   */
  function matches(source) {
    return baseMatches(assign({}, source));
  }

  /**
   * Adds all own enumerable string keyed function properties of a source
   * object to the destination object. If `object` is a function, then methods
   * are added to its prototype as well.
   *
   * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
   * avoid conflicts caused by modifying the original.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Util
   * @param {Function|Object} [object=lodash] The destination object.
   * @param {Object} source The object of functions to add.
   * @param {Object} [options={}] The options object.
   * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
   * @returns {Function|Object} Returns `object`.
   * @example
   *
   * function vowels(string) {
   *   return _.filter(string, function(v) {
   *     return /[aeiou]/i.test(v);
   *   });
   * }
   *
   * _.mixin({ 'vowels': vowels });
   * _.vowels('fred');
   * // => ['e']
   *
   * _('fred').vowels().value();
   * // => ['e']
   *
   * _.mixin({ 'vowels': vowels }, { 'chain': false });
   * _('fred').vowels();
   * // => ['e']
   */
  function mixin(object, source, options) {
    var props = keys(source),
        methodNames = baseFunctions(source, props);

    if (options == null &&
        !(isObject(source) && (methodNames.length || !props.length))) {
      options = source;
      source = object;
      object = this;
      methodNames = baseFunctions(source, keys(source));
    }
    var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
        isFunc = isFunction(object);

    baseEach(methodNames, function(methodName) {
      var func = source[methodName];
      object[methodName] = func;
      if (isFunc) {
        object.prototype[methodName] = function() {
          var chainAll = this.__chain__;
          if (chain || chainAll) {
            var result = object(this.__wrapped__),
                actions = result.__actions__ = copyArray(this.__actions__);

            actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
            result.__chain__ = chainAll;
            return result;
          }
          return func.apply(object, arrayPush([this.value()], arguments));
        };
      }
    });

    return object;
  }

  /**
   * Reverts the `_` variable to its previous value and returns a reference to
   * the `lodash` function.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Util
   * @returns {Function} Returns the `lodash` function.
   * @example
   *
   * var lodash = _.noConflict();
   */
  function noConflict() {
    if (root._ === this) {
      root._ = oldDash;
    }
    return this;
  }

  /**
   * This method returns `undefined`.
   *
   * @static
   * @memberOf _
   * @since 2.3.0
   * @category Util
   * @example
   *
   * _.times(2, _.noop);
   * // => [undefined, undefined]
   */
  function noop() {
    // No operation performed.
  }

  /**
   * Generates a unique ID. If `prefix` is given, the ID is appended to it.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Util
   * @param {string} [prefix=''] The value to prefix the ID with.
   * @returns {string} Returns the unique ID.
   * @example
   *
   * _.uniqueId('contact_');
   * // => 'contact_104'
   *
   * _.uniqueId();
   * // => '105'
   */
  function uniqueId(prefix) {
    var id = ++idCounter;
    return toString(prefix) + id;
  }

  /*------------------------------------------------------------------------*/

  /**
   * Computes the maximum value of `array`. If `array` is empty or falsey,
   * `undefined` is returned.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Math
   * @param {Array} array The array to iterate over.
   * @returns {*} Returns the maximum value.
   * @example
   *
   * _.max([4, 2, 8, 6]);
   * // => 8
   *
   * _.max([]);
   * // => undefined
   */
  function max(array) {
    return (array && array.length)
      ? baseExtremum(array, identity, baseGt)
      : undefined;
  }

  /**
   * Computes the minimum value of `array`. If `array` is empty or falsey,
   * `undefined` is returned.
   *
   * @static
   * @since 0.1.0
   * @memberOf _
   * @category Math
   * @param {Array} array The array to iterate over.
   * @returns {*} Returns the minimum value.
   * @example
   *
   * _.min([4, 2, 8, 6]);
   * // => 2
   *
   * _.min([]);
   * // => undefined
   */
  function min(array) {
    return (array && array.length)
      ? baseExtremum(array, identity, baseLt)
      : undefined;
  }

  /*------------------------------------------------------------------------*/

  // Add methods that return wrapped values in chain sequences.
  lodash.assignIn = assignIn;
  lodash.before = before;
  lodash.bind = bind;
  lodash.chain = chain;
  lodash.compact = compact;
  lodash.concat = concat;
  lodash.create = create;
  lodash.defaults = defaults;
  lodash.defer = defer;
  lodash.delay = delay;
  lodash.filter = filter;
  lodash.flatten = flatten;
  lodash.flattenDeep = flattenDeep;
  lodash.iteratee = iteratee;
  lodash.keys = keys;
  lodash.map = map;
  lodash.matches = matches;
  lodash.mixin = mixin;
  lodash.negate = negate;
  lodash.once = once;
  lodash.pick = pick;
  lodash.slice = slice;
  lodash.sortBy = sortBy;
  lodash.tap = tap;
  lodash.thru = thru;
  lodash.toArray = toArray;
  lodash.values = values;

  // Add aliases.
  lodash.extend = assignIn;

  // Add methods to `lodash.prototype`.
  mixin(lodash, lodash);

  /*------------------------------------------------------------------------*/

  // Add methods that return unwrapped values in chain sequences.
  lodash.clone = clone;
  lodash.escape = escape;
  lodash.every = every;
  lodash.find = find;
  lodash.forEach = forEach;
  lodash.has = has;
  lodash.head = head;
  lodash.identity = identity;
  lodash.indexOf = indexOf;
  lodash.isArguments = isArguments;
  lodash.isArray = isArray;
  lodash.isBoolean = isBoolean;
  lodash.isDate = isDate;
  lodash.isEmpty = isEmpty;
  lodash.isEqual = isEqual;
  lodash.isFinite = isFinite;
  lodash.isFunction = isFunction;
  lodash.isNaN = isNaN;
  lodash.isNull = isNull;
  lodash.isNumber = isNumber;
  lodash.isObject = isObject;
  lodash.isRegExp = isRegExp;
  lodash.isString = isString;
  lodash.isUndefined = isUndefined;
  lodash.last = last;
  lodash.max = max;
  lodash.min = min;
  lodash.noConflict = noConflict;
  lodash.noop = noop;
  lodash.reduce = reduce;
  lodash.result = result;
  lodash.size = size;
  lodash.some = some;
  lodash.uniqueId = uniqueId;

  // Add aliases.
  lodash.each = forEach;
  lodash.first = head;

  mixin(lodash, (function() {
    var source = {};
    baseForOwn(lodash, function(func, methodName) {
      if (!hasOwnProperty.call(lodash.prototype, methodName)) {
        source[methodName] = func;
      }
    });
    return source;
  }()), { 'chain': false });

  /*------------------------------------------------------------------------*/

  /**
   * The semantic version number.
   *
   * @static
   * @memberOf _
   * @type {string}
   */
  lodash.VERSION = VERSION;

  // Add `Array` methods to `lodash.prototype`.
  baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
    var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName],
        chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
        retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName);

    lodash.prototype[methodName] = function() {
      var args = arguments;
      if (retUnwrapped && !this.__chain__) {
        var value = this.value();
        return func.apply(isArray(value) ? value : [], args);
      }
      return this[chainName](function(value) {
        return func.apply(isArray(value) ? value : [], args);
      });
    };
  });

  // Add chain sequence methods to the `lodash` wrapper.
  lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;

  /*--------------------------------------------------------------------------*/

  // Some AMD build optimizers, like r.js, check for condition patterns like:
  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
    // Expose Lodash on the global object to prevent errors when Lodash is
    // loaded by a script tag in the presence of an AMD loader.
    // See http://requirejs.org/docs/errors.html#mismatch for more details.
    // Use `_.noConflict` to remove Lodash from the global object.
    root._ = lodash;

    // Define as an anonymous module so, through path mapping, it can be
    // referenced as the "underscore" module.
    define(function() {
      return lodash;
    });
  }
  // Check for `exports` after `define` in case a build optimizer adds it.
  else if (freeModule) {
    // Export for Node.js.
    (freeModule.exports = lodash)._ = lodash;
    // Export for CommonJS support.
    freeExports._ = lodash;
  }
  else {
    // Export to the global object.
    root._ = lodash;
  }
}.call(this));
/**
 * @license
 * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
 * Build: `lodash core -o ./dist/lodash.core.js`
 */
;(function(){function n(n){return H(n)&&pn.call(n,"callee")&&!yn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?Z:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return j(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");
return setTimeout(function(){n.apply(Z,r)},t)}function f(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function a(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===Z?i===i:r(i,c)))var c=i,f=o}return f}function l(n,t){var r=[];return mn(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function p(n,r,e,u,o){var i=-1,c=n.length;for(e||(e=R),o||(o=[]);++i<c;){var f=n[i];0<r&&e(f)?1<r?p(f,r-1,e,u,o):t(o,f):u||(o[o.length]=f)}return o}function s(n,t){return n&&On(n,t,Dn);
}function h(n,t){return l(t,function(t){return U(n[t])})}function v(n,t){return n>t}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!H(t)?n!==n&&t!==t:y(n,t,r,e,b,u))}function y(n,t,r,e,u,o){var i=Nn(n),c=Nn(t),f=i?"[object Array]":hn.call(n),a=c?"[object Array]":hn.call(t),f="[object Arguments]"==f?"[object Object]":f,a="[object Arguments]"==a?"[object Object]":a,l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]);var p=An(o,function(t){return t[0]==n}),s=An(o,function(n){
return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=T(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=J(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 1&r||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=B(n,t,r,e,u,o),o.pop(),r):(i=i?n.value():n,f=f?t.value():t,
r=u(i,f,r,e,o),o.pop(),r)}function g(n){return typeof n=="function"?n:null==n?X:(typeof n=="object"?d:r)(n)}function _(n,t){return n<t}function j(n,t){var r=-1,e=M(n)?Array(n.length):[];return mn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function d(n){var t=_n(n);return function(r){var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&b(n[u],r[u],3)))return false}return true}}function m(n,t){return n=Object(n),C(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function O(n){return xn(I(n,void 0,X),n+"");
}function x(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function A(n){return x(n,0,n.length)}function E(n,t){var r;return mn(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function w(n,r){return C(r,function(n,r){return r.func.apply(r.thisArg,t([n],r.args))},n)}function k(n,t,r){var e=!r;r||(r={});for(var u=-1,o=t.length;++u<o;){var i=t[u],c=Z;if(c===Z&&(c=n[i]),e)r[i]=c;else{var f=r,a=f[i];pn.call(f,i)&&J(a,c)&&(c!==Z||i in f)||(f[i]=c);
}}return r}function N(n){return O(function(t,r){var e=-1,u=r.length,o=1<u?r[u-1]:Z,o=3<n.length&&typeof o=="function"?(u--,o):Z;for(t=Object(t);++e<u;){var i=r[e];i&&n(t,i,e,o)}return t})}function F(n){return function(){var t=arguments,r=dn(n.prototype),t=n.apply(r,t);return V(t)?t:r}}function S(n,t,r){function e(){for(var o=-1,i=arguments.length,c=-1,f=r.length,a=Array(f+i),l=this&&this!==on&&this instanceof e?u:n;++c<f;)a[c]=r[c];for(;i--;)a[c++]=arguments[++o];return l.apply(t,a)}if(typeof n!="function")throw new TypeError("Expected a function");
var u=F(n);return e}function T(n,t,r,e,u,o){var i=n.length,c=t.length;if(i!=c&&!(1&r&&c>i))return false;var c=o.get(n),f=o.get(t);if(c&&f)return c==t&&f==n;for(var c=-1,f=true,a=2&r?[]:Z;++c<i;){var l=n[c],p=t[c];if(void 0!==Z){f=false;break}if(a){if(!E(t,function(n,t){if(!P(a,t)&&(l===n||u(l,n,r,e,o)))return a.push(t)})){f=false;break}}else if(l!==p&&!u(l,p,r,e,o)){f=false;break}}return f}function B(n,t,r,e,u,o){var i=1&r,c=Dn(n),f=c.length,a=Dn(t).length;if(f!=a&&!i)return false;for(a=f;a--;){var l=c[a];if(!(i?l in t:pn.call(t,l)))return false;
}var p=o.get(n),l=o.get(t);if(p&&l)return p==t&&l==n;for(p=true;++a<f;){var l=c[a],s=n[l],h=t[l];if(void 0!==Z||s!==h&&!u(s,h,r,e,o)){p=false;break}i||(i="constructor"==l)}return p&&!i&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(p=false)),p}function R(t){return Nn(t)||n(t)}function D(n){var t=[];if(null!=n)for(var r in Object(n))t.push(r);return t}function I(n,t,r){return t=jn(t===Z?n.length-1:t,0),
function(){for(var e=arguments,u=-1,o=jn(e.length-t,0),i=Array(o);++u<o;)i[u]=e[t+u];for(u=-1,o=Array(t+1);++u<t;)o[u]=e[u];return o[t]=r(i),n.apply(this,o)}}function $(n){return(null==n?0:n.length)?p(n,1):[]}function q(n){return n&&n.length?n[0]:Z}function P(n,t,r){var e=null==n?0:n.length;r=typeof r=="number"?0>r?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1}function z(n,t){return mn(n,g(t))}function C(n,t,r){return e(n,g(t),r,3>arguments.length,mn);
}function G(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Fn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function J(n,t){return n===t||n!==n&&t!==t}function M(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1<t&&0==t%1&&9007199254740991>=t),t&&!U(n)}function U(n){return!!V(n)&&(n=hn.call(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function V(n){var t=typeof n;
return null!=n&&("object"==t||"function"==t)}function H(n){return null!=n&&typeof n=="object"}function K(n){return typeof n=="number"||H(n)&&"[object Number]"==hn.call(n)}function L(n){return typeof n=="string"||!Nn(n)&&H(n)&&"[object String]"==hn.call(n)}function Q(n){return typeof n=="string"?n:null==n?"":n+""}function W(n){return null==n?[]:u(n,Dn(n))}function X(n){return n}function Y(n,r,e){var u=Dn(r),o=h(r,u);null!=e||V(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=h(r,Dn(r)));var i=!(V(e)&&"chain"in e&&!e.chain),c=U(n);
return mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=A(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var Z,nn=1/0,tn=/[&<>"']/g,rn=RegExp(tn.source),en=/^(?:0|[1-9]\d*)$/,un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){
return function(t){return null==n?Z:n[t]}}({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,bn=Object.create,yn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return V(t)?bn?bn(t):(n.prototype=t,t=new n,n.prototype=Z,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i;
var mn=function(n,t){return function(r,e){if(null==r)return r;if(!M(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}(s),On=function(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var c=e[n?i:++u];if(false===r(o[c],c,o))break}return t}}(),xn=X,An=function(n){return function(t,r,e){var u=Object(t);if(!M(t)){var o=g(r);t=Dn(t),r=function(n){return o(u[n],n,u)}}return r=n(t,r,e),-1<r?u[o?t[r]:r]:Z}}(function(n,t,r){var e=null==n?0:n.length;
if(!e)return-1;r=null==r?0:Fn(r),0>r&&(r=jn(e+r,0));n:{for(t=g(t),e=n.length,r+=-1;++r<e;)if(t(n[r],r,n)){n=r;break n}n=-1}return n}),En=O(function(n,t,r){return S(n,t,r)}),wn=O(function(n,t){return c(n,1,t)}),kn=O(function(n,t,r){return c(n,Sn(t)||0,r)}),Nn=Array.isArray,Fn=Number,Sn=Number,Tn=N(function(n,t){k(t,_n(t),n)}),Bn=N(function(n,t){k(t,D(t),n)}),Rn=O(function(n,t){n=Object(n);var r,e=-1,u=t.length,o=2<u?t[2]:Z;if(r=o){r=t[0];var i=t[1];if(V(o)){var c=typeof i;if("number"==c){if(c=M(o))var c=o.length,f=typeof i,c=null==c?9007199254740991:c,c=!!c&&("number"==f||"symbol"!=f&&en.test(i))&&-1<i&&0==i%1&&i<c;
}else c="string"==c&&i in o;r=!!c&&J(o[i],r)}else r=false}for(r&&(u=1);++e<u;)for(o=t[e],r=In(o),i=-1,c=r.length;++i<c;){var f=r[i],a=n[f];(a===Z||J(a,ln[f])&&!pn.call(n,f))&&(n[f]=o[f])}return n}),Dn=_n,In=D,$n=function(n){return xn(I(n,Z,$),n+"")}(function(n,t){return null==n?{}:m(n,t)});o.assignIn=Bn,o.before=G,o.bind=En,o.chain=function(n){return n=o(n),n.__chain__=true,n},o.compact=function(n){return l(n,Boolean)},o.concat=function(){var n=arguments.length;if(!n)return[];for(var r=Array(n-1),e=arguments[0];n--;)r[n-1]=arguments[n];
return t(Nn(e)?A(e):[e],p(r,1))},o.create=function(n,t){var r=dn(n);return null==t?r:Tn(r,t)},o.defaults=Rn,o.defer=wn,o.delay=kn,o.filter=function(n,t){return l(n,g(t))},o.flatten=$,o.flattenDeep=function(n){return(null==n?0:n.length)?p(n,nn):[]},o.iteratee=g,o.keys=Dn,o.map=function(n,t){return j(n,g(t))},o.matches=function(n){return d(Tn({},n))},o.mixin=Y,o.negate=function(n){if(typeof n!="function")throw new TypeError("Expected a function");return function(){return!n.apply(this,arguments)}},o.once=function(n){
return G(2,n)},o.pick=$n,o.slice=function(n,t,r){var e=null==n?0:n.length;return r=r===Z?e:+r,e?x(n,null==t?0:+t,r):[]},o.sortBy=function(n,t){var e=0;return t=g(t),j(j(n,function(n,r,u){return{value:n,index:e++,criteria:t(n,r,u)}}).sort(function(n,t){var r;n:{r=n.criteria;var e=t.criteria;if(r!==e){var u=r!==Z,o=null===r,i=r===r,c=e!==Z,f=null===e,a=e===e;if(!f&&r>e||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r<e||f&&u&&i||!c&&i||!a){r=-1;break n}}r=0}return r||n.index-t.index}),r("value"))},o.tap=function(n,t){
return t(n),n},o.thru=function(n,t){return t(n)},o.toArray=function(n){return M(n)?n.length?A(n):[]:W(n)},o.values=W,o.extend=Bn,Y(o,o),o.clone=function(n){return V(n)?Nn(n)?A(n):k(n,_n(n)):n},o.escape=function(n){return(n=Q(n))&&rn.test(n)?n.replace(tn,fn):n},o.every=function(n,t,r){return t=r?Z:t,f(n,g(t))},o.find=An,o.forEach=z,o.has=function(n,t){return null!=n&&pn.call(n,t)},o.head=q,o.identity=X,o.indexOf=P,o.isArguments=n,o.isArray=Nn,o.isBoolean=function(n){return true===n||false===n||H(n)&&"[object Boolean]"==hn.call(n);
},o.isDate=function(n){return H(n)&&"[object Date]"==hn.call(n)},o.isEmpty=function(t){return M(t)&&(Nn(t)||L(t)||U(t.splice)||n(t))?!t.length:!_n(t).length},o.isEqual=function(n,t){return b(n,t)},o.isFinite=function(n){return typeof n=="number"&&gn(n)},o.isFunction=U,o.isNaN=function(n){return K(n)&&n!=+n},o.isNull=function(n){return null===n},o.isNumber=K,o.isObject=V,o.isRegExp=function(n){return H(n)&&"[object RegExp]"==hn.call(n)},o.isString=L,o.isUndefined=function(n){return n===Z},o.last=function(n){
var t=null==n?0:n.length;return t?n[t-1]:Z},o.max=function(n){return n&&n.length?a(n,X,v):Z},o.min=function(n){return n&&n.length?a(n,X,_):Z},o.noConflict=function(){return on._===this&&(on._=vn),this},o.noop=function(){},o.reduce=C,o.result=function(n,t,r){return t=null==n?Z:n[t],t===Z&&(t=r),U(t)?t.call(n):t},o.size=function(n){return null==n?0:(n=M(n)?n:_n(n),n.length)},o.some=function(n,t,r){return t=r?Z:t,E(n,g(t))},o.uniqueId=function(n){var t=++sn;return Q(n)+t},o.each=z,o.first=q,Y(o,function(){
var n={};return s(o,function(t,r){pn.call(o.prototype,r)||(n[r]=t)}),n}(),{chain:false}),o.VERSION="4.17.21",mn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?String.prototype:an)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);o.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Nn(u)?u:[],n)}return this[r](function(r){return t.apply(Nn(r)?r:[],n);
})}}),o.prototype.toJSON=o.prototype.valueOf=o.prototype.value=function(){return w(this.__wrapped__,this.__actions__)},typeof define=="function"&&typeof define.amd=="object"&&define.amd?(on._=o, define(function(){return o})):cn?((cn.exports=o)._=o,un._=o):on._=o}).call(this);var baseAssignValue = require('./_baseAssignValue'),
    createAggregator = require('./_createAggregator');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Creates an object composed of keys generated from the results of running
 * each element of `collection` thru `iteratee`. The corresponding value of
 * each key is the number of times the key was returned by `iteratee`. The
 * iteratee is invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 0.5.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
 * @returns {Object} Returns the composed aggregate object.
 * @example
 *
 * _.countBy([6.1, 4.2, 6.3], Math.floor);
 * // => { '4': 1, '6': 2 }
 *
 * // The `_.property` iteratee shorthand.
 * _.countBy(['one', 'two', 'three'], 'length');
 * // => { '3': 2, '5': 1 }
 */
var countBy = createAggregator(function(result, value, key) {
  if (hasOwnProperty.call(result, key)) {
    ++result[key];
  } else {
    baseAssignValue(result, key, 1);
  }
});

module.exports = countBy;
var baseAssign = require('./_baseAssign'),
    baseCreate = require('./_baseCreate');

/**
 * Creates an object that inherits from the `prototype` object. If a
 * `properties` object is given, its own enumerable string keyed properties
 * are assigned to the created object.
 *
 * @static
 * @memberOf _
 * @since 2.3.0
 * @category Object
 * @param {Object} prototype The object to inherit from.
 * @param {Object} [properties] The properties to assign to the object.
 * @returns {Object} Returns the new object.
 * @example
 *
 * function Shape() {
 *   this.x = 0;
 *   this.y = 0;
 * }
 *
 * function Circle() {
 *   Shape.call(this);
 * }
 *
 * Circle.prototype = _.create(Shape.prototype, {
 *   'constructor': Circle
 * });
 *
 * var circle = new Circle;
 * circle instanceof Circle;
 * // => true
 *
 * circle instanceof Shape;
 * // => true
 */
function create(prototype, properties) {
  var result = baseCreate(prototype);
  return properties == null ? result : baseAssign(result, properties);
}

module.exports = create;
var createWrap = require('./_createWrap');

/** Used to compose bitmasks for function metadata. */
var WRAP_CURRY_FLAG = 8;

/**
 * Creates a function that accepts arguments of `func` and either invokes
 * `func` returning its result, if at least `arity` number of arguments have
 * been provided, or returns a function that accepts the remaining `func`
 * arguments, and so on. The arity of `func` may be specified if `func.length`
 * is not sufficient.
 *
 * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
 * may be used as a placeholder for provided arguments.
 *
 * **Note:** This method doesn't set the "length" property of curried functions.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @category Function
 * @param {Function} func The function to curry.
 * @param {number} [arity=func.length] The arity of `func`.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Function} Returns the new curried function.
 * @example
 *
 * var abc = function(a, b, c) {
 *   return [a, b, c];
 * };
 *
 * var curried = _.curry(abc);
 *
 * curried(1)(2)(3);
 * // => [1, 2, 3]
 *
 * curried(1, 2)(3);
 * // => [1, 2, 3]
 *
 * curried(1, 2, 3);
 * // => [1, 2, 3]
 *
 * // Curried with placeholders.
 * curried(1)(_, 3)(2);
 * // => [1, 2, 3]
 */
function curry(func, arity, guard) {
  arity = guard ? undefined : arity;
  var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
  result.placeholder = curry.placeholder;
  return result;
}

// Assign default placeholders.
curry.placeholder = {};

module.exports = curry;
var createWrap = require('./_createWrap');

/** Used to compose bitmasks for function metadata. */
var WRAP_CURRY_RIGHT_FLAG = 16;

/**
 * This method is like `_.curry` except that arguments are applied to `func`
 * in the manner of `_.partialRight` instead of `_.partial`.
 *
 * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
 * builds, may be used as a placeholder for provided arguments.
 *
 * **Note:** This method doesn't set the "length" property of curried functions.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Function
 * @param {Function} func The function to curry.
 * @param {number} [arity=func.length] The arity of `func`.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Function} Returns the new curried function.
 * @example
 *
 * var abc = function(a, b, c) {
 *   return [a, b, c];
 * };
 *
 * var curried = _.curryRight(abc);
 *
 * curried(3)(2)(1);
 * // => [1, 2, 3]
 *
 * curried(2, 3)(1);
 * // => [1, 2, 3]
 *
 * curried(1, 2, 3);
 * // => [1, 2, 3]
 *
 * // Curried with placeholders.
 * curried(3)(1, _)(2);
 * // => [1, 2, 3]
 */
function curryRight(func, arity, guard) {
  arity = guard ? undefined : arity;
  var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
  result.placeholder = curryRight.placeholder;
  return result;
}

// Assign default placeholders.
curryRight.placeholder = {};

module.exports = curryRight;
module.exports = {
  'now': require('./now')
};
var isObject = require('./isObject'),
    now = require('./now'),
    toNumber = require('./toNumber');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max,
    nativeMin = Math.min;

/**
 * Creates a debounced function that delays invoking `func` until after `wait`
 * milliseconds have elapsed since the last time the debounced function was
 * invoked. The debounced function comes with a `cancel` method to cancel
 * delayed `func` invocations and a `flush` method to immediately invoke them.
 * Provide `options` to indicate whether `func` should be invoked on the
 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
 * with the last arguments provided to the debounced function. Subsequent
 * calls to the debounced function return the result of the last `func`
 * invocation.
 *
 * **Note:** If `leading` and `trailing` options are `true`, `func` is
 * invoked on the trailing edge of the timeout only if the debounced function
 * is invoked more than once during the `wait` timeout.
 *
 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
 *
 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
 * for details over the differences between `_.debounce` and `_.throttle`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to debounce.
 * @param {number} [wait=0] The number of milliseconds to delay.
 * @param {Object} [options={}] The options object.
 * @param {boolean} [options.leading=false]
 *  Specify invoking on the leading edge of the timeout.
 * @param {number} [options.maxWait]
 *  The maximum time `func` is allowed to be delayed before it's invoked.
 * @param {boolean} [options.trailing=true]
 *  Specify invoking on the trailing edge of the timeout.
 * @returns {Function} Returns the new debounced function.
 * @example
 *
 * // Avoid costly calculations while the window size is in flux.
 * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
 *
 * // Invoke `sendMail` when clicked, debouncing subsequent calls.
 * jQuery(element).on('click', _.debounce(sendMail, 300, {
 *   'leading': true,
 *   'trailing': false
 * }));
 *
 * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
 * var source = new EventSource('/stream');
 * jQuery(source).on('message', debounced);
 *
 * // Cancel the trailing debounced invocation.
 * jQuery(window).on('popstate', debounced.cancel);
 */
function debounce(func, wait, options) {
  var lastArgs,
      lastThis,
      maxWait,
      result,
      timerId,
      lastCallTime,
      lastInvokeTime = 0,
      leading = false,
      maxing = false,
      trailing = true;

  if (typeof func != 'function') {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  wait = toNumber(wait) || 0;
  if (isObject(options)) {
    leading = !!options.leading;
    maxing = 'maxWait' in options;
    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
    trailing = 'trailing' in options ? !!options.trailing : trailing;
  }

  function invokeFunc(time) {
    var args = lastArgs,
        thisArg = lastThis;

    lastArgs = lastThis = undefined;
    lastInvokeTime = time;
    result = func.apply(thisArg, args);
    return result;
  }

  function leadingEdge(time) {
    // Reset any `maxWait` timer.
    lastInvokeTime = time;
    // Start the timer for the trailing edge.
    timerId = setTimeout(timerExpired, wait);
    // Invoke the leading edge.
    return leading ? invokeFunc(time) : result;
  }

  function remainingWait(time) {
    var timeSinceLastCall = time - lastCallTime,
        timeSinceLastInvoke = time - lastInvokeTime,
        timeWaiting = wait - timeSinceLastCall;

    return maxing
      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
      : timeWaiting;
  }

  function shouldInvoke(time) {
    var timeSinceLastCall = time - lastCallTime,
        timeSinceLastInvoke = time - lastInvokeTime;

    // Either this is the first call, activity has stopped and we're at the
    // trailing edge, the system time has gone backwards and we're treating
    // it as the trailing edge, or we've hit the `maxWait` limit.
    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
  }

  function timerExpired() {
    var time = now();
    if (shouldInvoke(time)) {
      return trailingEdge(time);
    }
    // Restart the timer.
    timerId = setTimeout(timerExpired, remainingWait(time));
  }

  function trailingEdge(time) {
    timerId = undefined;

    // Only invoke if we have `lastArgs` which means `func` has been
    // debounced at least once.
    if (trailing && lastArgs) {
      return invokeFunc(time);
    }
    lastArgs = lastThis = undefined;
    return result;
  }

  function cancel() {
    if (timerId !== undefined) {
      clearTimeout(timerId);
    }
    lastInvokeTime = 0;
    lastArgs = lastCallTime = lastThis = timerId = undefined;
  }

  function flush() {
    return timerId === undefined ? result : trailingEdge(now());
  }

  function debounced() {
    var time = now(),
        isInvoking = shouldInvoke(time);

    lastArgs = arguments;
    lastThis = this;
    lastCallTime = time;

    if (isInvoking) {
      if (timerId === undefined) {
        return leadingEdge(lastCallTime);
      }
      if (maxing) {
        // Handle invocations in a tight loop.
        clearTimeout(timerId);
        timerId = setTimeout(timerExpired, wait);
        return invokeFunc(lastCallTime);
      }
    }
    if (timerId === undefined) {
      timerId = setTimeout(timerExpired, wait);
    }
    return result;
  }
  debounced.cancel = cancel;
  debounced.flush = flush;
  return debounced;
}

module.exports = debounce;
var deburrLetter = require('./_deburrLetter'),
    toString = require('./toString');

/** Used to match Latin Unicode letters (excluding mathematical operators). */
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;

/** Used to compose unicode character classes. */
var rsComboMarksRange = '\\u0300-\\u036f',
    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
    rsComboSymbolsRange = '\\u20d0-\\u20ff',
    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;

/** Used to compose unicode capture groups. */
var rsCombo = '[' + rsComboRange + ']';

/**
 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
 */
var reComboMark = RegExp(rsCombo, 'g');

/**
 * Deburrs `string` by converting
 * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
 * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
 * letters to basic Latin letters and removing
 * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to deburr.
 * @returns {string} Returns the deburred string.
 * @example
 *
 * _.deburr('dÃ©jÃ  vu');
 * // => 'deja vu'
 */
function deburr(string) {
  string = toString(string);
  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
}

module.exports = deburr;
var baseRest = require('./_baseRest'),
    eq = require('./eq'),
    isIterateeCall = require('./_isIterateeCall'),
    keysIn = require('./keysIn');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Assigns own and inherited enumerable string keyed properties of source
 * objects to the destination object for all destination properties that
 * resolve to `undefined`. Source objects are applied from left to right.
 * Once a property is set, additional values of the same property are ignored.
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The destination object.
 * @param {...Object} [sources] The source objects.
 * @returns {Object} Returns `object`.
 * @see _.defaultsDeep
 * @example
 *
 * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
 * // => { 'a': 1, 'b': 2 }
 */
var defaults = baseRest(function(object, sources) {
  object = Object(object);

  var index = -1;
  var length = sources.length;
  var guard = length > 2 ? sources[2] : undefined;

  if (guard && isIterateeCall(sources[0], sources[1], guard)) {
    length = 1;
  }

  while (++index < length) {
    var source = sources[index];
    var props = keysIn(source);
    var propsIndex = -1;
    var propsLength = props.length;

    while (++propsIndex < propsLength) {
      var key = props[propsIndex];
      var value = object[key];

      if (value === undefined ||
          (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
        object[key] = source[key];
      }
    }
  }

  return object;
});

module.exports = defaults;
var apply = require('./_apply'),
    baseRest = require('./_baseRest'),
    customDefaultsMerge = require('./_customDefaultsMerge'),
    mergeWith = require('./mergeWith');

/**
 * This method is like `_.defaults` except that it recursively assigns
 * default properties.
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 3.10.0
 * @category Object
 * @param {Object} object The destination object.
 * @param {...Object} [sources] The source objects.
 * @returns {Object} Returns `object`.
 * @see _.defaults
 * @example
 *
 * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
 * // => { 'a': { 'b': 2, 'c': 3 } }
 */
var defaultsDeep = baseRest(function(args) {
  args.push(undefined, customDefaultsMerge);
  return apply(mergeWith, undefined, args);
});

module.exports = defaultsDeep;
/**
 * Checks `value` to determine whether a default value should be returned in
 * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
 * or `undefined`.
 *
 * @static
 * @memberOf _
 * @since 4.14.0
 * @category Util
 * @param {*} value The value to check.
 * @param {*} defaultValue The default value.
 * @returns {*} Returns the resolved value.
 * @example
 *
 * _.defaultTo(1, 10);
 * // => 1
 *
 * _.defaultTo(undefined, 10);
 * // => 10
 */
function defaultTo(value, defaultValue) {
  return (value == null || value !== value) ? defaultValue : value;
}

module.exports = defaultTo;
var baseDelay = require('./_baseDelay'),
    baseRest = require('./_baseRest');

/**
 * Defers invoking the `func` until the current call stack has cleared. Any
 * additional arguments are provided to `func` when it's invoked.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to defer.
 * @param {...*} [args] The arguments to invoke `func` with.
 * @returns {number} Returns the timer id.
 * @example
 *
 * _.defer(function(text) {
 *   console.log(text);
 * }, 'deferred');
 * // => Logs 'deferred' after one millisecond.
 */
var defer = baseRest(function(func, args) {
  return baseDelay(func, 1, args);
});

module.exports = defer;
var baseDelay = require('./_baseDelay'),
    baseRest = require('./_baseRest'),
    toNumber = require('./toNumber');

/**
 * Invokes `func` after `wait` milliseconds. Any additional arguments are
 * provided to `func` when it's invoked.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to delay.
 * @param {number} wait The number of milliseconds to delay invocation.
 * @param {...*} [args] The arguments to invoke `func` with.
 * @returns {number} Returns the timer id.
 * @example
 *
 * _.delay(function(text) {
 *   console.log(text);
 * }, 1000, 'later');
 * // => Logs 'later' after one second.
 */
var delay = baseRest(function(func, wait, args) {
  return baseDelay(func, toNumber(wait) || 0, args);
});

module.exports = delay;
var baseDifference = require('./_baseDifference'),
    baseFlatten = require('./_baseFlatten'),
    baseRest = require('./_baseRest'),
    isArrayLikeObject = require('./isArrayLikeObject');

/**
 * Creates an array of `array` values not included in the other given arrays
 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * for equality comparisons. The order and references of result values are
 * determined by the first array.
 *
 * **Note:** Unlike `_.pullAll`, this method returns a new array.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {...Array} [values] The values to exclude.
 * @returns {Array} Returns the new array of filtered values.
 * @see _.without, _.xor
 * @example
 *
 * _.difference([2, 1], [2, 3]);
 * // => [1]
 */
var difference = baseRest(function(array, values) {
  return isArrayLikeObject(array)
    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
    : [];
});

module.exports = difference;
var baseDifference = require('./_baseDifference'),
    baseFlatten = require('./_baseFlatten'),
    baseIteratee = require('./_baseIteratee'),
    baseRest = require('./_baseRest'),
    isArrayLikeObject = require('./isArrayLikeObject'),
    last = require('./last');

/**
 * This method is like `_.difference` except that it accepts `iteratee` which
 * is invoked for each element of `array` and `values` to generate the criterion
 * by which they're compared. The order and references of result values are
 * determined by the first array. The iteratee is invoked with one argument:
 * (value).
 *
 * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {...Array} [values] The values to exclude.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {Array} Returns the new array of filtered values.
 * @example
 *
 * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
 * // => [1.2]
 *
 * // The `_.property` iteratee shorthand.
 * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
 * // => [{ 'x': 2 }]
 */
var differenceBy = baseRest(function(array, values) {
  var iteratee = last(values);
  if (isArrayLikeObject(iteratee)) {
    iteratee = undefined;
  }
  return isArrayLikeObject(array)
    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2))
    : [];
});

module.exports = differenceBy;
var baseDifference = require('./_baseDifference'),
    baseFlatten = require('./_baseFlatten'),
    baseRest = require('./_baseRest'),
    isArrayLikeObject = require('./isArrayLikeObject'),
    last = require('./last');

/**
 * This method is like `_.difference` except that it accepts `comparator`
 * which is invoked to compare elements of `array` to `values`. The order and
 * references of result values are determined by the first array. The comparator
 * is invoked with two arguments: (arrVal, othVal).
 *
 * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {...Array} [values] The values to exclude.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns the new array of filtered values.
 * @example
 *
 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
 *
 * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
 * // => [{ 'x': 2, 'y': 1 }]
 */
var differenceWith = baseRest(function(array, values) {
  var comparator = last(values);
  if (isArrayLikeObject(comparator)) {
    comparator = undefined;
  }
  return isArrayLikeObject(array)
    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
    : [];
});

module.exports = differenceWith;
var createMathOperation = require('./_createMathOperation');

/**
 * Divide two numbers.
 *
 * @static
 * @memberOf _
 * @since 4.7.0
 * @category Math
 * @param {number} dividend The first number in a division.
 * @param {number} divisor The second number in a division.
 * @returns {number} Returns the quotient.
 * @example
 *
 * _.divide(6, 4);
 * // => 1.5
 */
var divide = createMathOperation(function(dividend, divisor) {
  return dividend / divisor;
}, 1);

module.exports = divide;
var baseSlice = require('./_baseSlice'),
    toInteger = require('./toInteger');

/**
 * Creates a slice of `array` with `n` elements dropped from the beginning.
 *
 * @static
 * @memberOf _
 * @since 0.5.0
 * @category Array
 * @param {Array} array The array to query.
 * @param {number} [n=1] The number of elements to drop.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * _.drop([1, 2, 3]);
 * // => [2, 3]
 *
 * _.drop([1, 2, 3], 2);
 * // => [3]
 *
 * _.drop([1, 2, 3], 5);
 * // => []
 *
 * _.drop([1, 2, 3], 0);
 * // => [1, 2, 3]
 */
function drop(array, n, guard) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return [];
  }
  n = (guard || n === undefined) ? 1 : toInteger(n);
  return baseSlice(array, n < 0 ? 0 : n, length);
}

module.exports = drop;
var baseSlice = require('./_baseSlice'),
    toInteger = require('./toInteger');

/**
 * Creates a slice of `array` with `n` elements dropped from the end.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to query.
 * @param {number} [n=1] The number of elements to drop.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * _.dropRight([1, 2, 3]);
 * // => [1, 2]
 *
 * _.dropRight([1, 2, 3], 2);
 * // => [1]
 *
 * _.dropRight([1, 2, 3], 5);
 * // => []
 *
 * _.dropRight([1, 2, 3], 0);
 * // => [1, 2, 3]
 */
function dropRight(array, n, guard) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return [];
  }
  n = (guard || n === undefined) ? 1 : toInteger(n);
  n = length - n;
  return baseSlice(array, 0, n < 0 ? 0 : n);
}

module.exports = dropRight;
var baseIteratee = require('./_baseIteratee'),
    baseWhile = require('./_baseWhile');

/**
 * Creates a slice of `array` excluding elements dropped from the end.
 * Elements are dropped until `predicate` returns falsey. The predicate is
 * invoked with three arguments: (value, index, array).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to query.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * var users = [
 *   { 'user': 'barney',  'active': true },
 *   { 'user': 'fred',    'active': false },
 *   { 'user': 'pebbles', 'active': false }
 * ];
 *
 * _.dropRightWhile(users, function(o) { return !o.active; });
 * // => objects for ['barney']
 *
 * // The `_.matches` iteratee shorthand.
 * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
 * // => objects for ['barney', 'fred']
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.dropRightWhile(users, ['active', false]);
 * // => objects for ['barney']
 *
 * // The `_.property` iteratee shorthand.
 * _.dropRightWhile(users, 'active');
 * // => objects for ['barney', 'fred', 'pebbles']
 */
function dropRightWhile(array, predicate) {
  return (array && array.length)
    ? baseWhile(array, baseIteratee(predicate, 3), true, true)
    : [];
}

module.exports = dropRightWhile;
var baseIteratee = require('./_baseIteratee'),
    baseWhile = require('./_baseWhile');

/**
 * Creates a slice of `array` excluding elements dropped from the beginning.
 * Elements are dropped until `predicate` returns falsey. The predicate is
 * invoked with three arguments: (value, index, array).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to query.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * var users = [
 *   { 'user': 'barney',  'active': false },
 *   { 'user': 'fred',    'active': false },
 *   { 'user': 'pebbles', 'active': true }
 * ];
 *
 * _.dropWhile(users, function(o) { return !o.active; });
 * // => objects for ['pebbles']
 *
 * // The `_.matches` iteratee shorthand.
 * _.dropWhile(users, { 'user': 'barney', 'active': false });
 * // => objects for ['fred', 'pebbles']
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.dropWhile(users, ['active', false]);
 * // => objects for ['pebbles']
 *
 * // The `_.property` iteratee shorthand.
 * _.dropWhile(users, 'active');
 * // => objects for ['barney', 'fred', 'pebbles']
 */
function dropWhile(array, predicate) {
  return (array && array.length)
    ? baseWhile(array, baseIteratee(predicate, 3), true)
    : [];
}

module.exports = dropWhile;
module.exports = require('./forEach');
module.exports = require('./forEachRight');
var baseClamp = require('./_baseClamp'),
    baseToString = require('./_baseToString'),
    toInteger = require('./toInteger'),
    toString = require('./toString');

/**
 * Checks if `string` ends with the given target string.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to inspect.
 * @param {string} [target] The string to search for.
 * @param {number} [position=string.length] The position to search up to.
 * @returns {boolean} Returns `true` if `string` ends with `target`,
 *  else `false`.
 * @example
 *
 * _.endsWith('abc', 'c');
 * // => true
 *
 * _.endsWith('abc', 'b');
 * // => false
 *
 * _.endsWith('abc', 'b', 2);
 * // => true
 */
function endsWith(string, target, position) {
  string = toString(string);
  target = baseToString(target);

  var length = string.length;
  position = position === undefined
    ? length
    : baseClamp(toInteger(position), 0, length);

  var end = position;
  position -= target.length;
  return position >= 0 && string.slice(position, end) == target;
}

module.exports = endsWith;
module.exports = require('./toPairs');
module.exports = require('./toPairsIn');
/**
 * Performs a
 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * comparison between two values to determine if they are equivalent.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
 * @example
 *
 * var object = { 'a': 1 };
 * var other = { 'a': 1 };
 *
 * _.eq(object, object);
 * // => true
 *
 * _.eq(object, other);
 * // => false
 *
 * _.eq('a', 'a');
 * // => true
 *
 * _.eq('a', Object('a'));
 * // => false
 *
 * _.eq(NaN, NaN);
 * // => true
 */
function eq(value, other) {
  return value === other || (value !== value && other !== other);
}

module.exports = eq;
var escapeHtmlChar = require('./_escapeHtmlChar'),
    toString = require('./toString');

/** Used to match HTML entities and HTML characters. */
var reUnescapedHtml = /[&<>"']/g,
    reHasUnescapedHtml = RegExp(reUnescapedHtml.source);

/**
 * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
 * corresponding HTML entities.
 *
 * **Note:** No other characters are escaped. To escape additional
 * characters use a third-party library like [_he_](https://mths.be/he).
 *
 * Though the ">" character is escaped for symmetry, characters like
 * ">" and "/" don't need escaping in HTML and have no special meaning
 * unless they're part of a tag or unquoted attribute value. See
 * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
 * (under "semi-related fun fact") for more details.
 *
 * When working with HTML you should always
 * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
 * XSS vectors.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category String
 * @param {string} [string=''] The string to escape.
 * @returns {string} Returns the escaped string.
 * @example
 *
 * _.escape('fred, barney, & pebbles');
 * // => 'fred, barney, &amp; pebbles'
 */
function escape(string) {
  string = toString(string);
  return (string && reHasUnescapedHtml.test(string))
    ? string.replace(reUnescapedHtml, escapeHtmlChar)
    : string;
}

module.exports = escape;
var toString = require('./toString');

/**
 * Used to match `RegExp`
 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
 */
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
    reHasRegExpChar = RegExp(reRegExpChar.source);

/**
 * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
 * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to escape.
 * @returns {string} Returns the escaped string.
 * @example
 *
 * _.escapeRegExp('[lodash](https://lodash.com/)');
 * // => '\[lodash\]\(https://lodash\.com/\)'
 */
function escapeRegExp(string) {
  string = toString(string);
  return (string && reHasRegExpChar.test(string))
    ? string.replace(reRegExpChar, '\\$&')
    : string;
}

module.exports = escapeRegExp;
var arrayEvery = require('./_arrayEvery'),
    baseEvery = require('./_baseEvery'),
    baseIteratee = require('./_baseIteratee'),
    isArray = require('./isArray'),
    isIterateeCall = require('./_isIterateeCall');

/**
 * Checks if `predicate` returns truthy for **all** elements of `collection`.
 * Iteration is stopped once `predicate` returns falsey. The predicate is
 * invoked with three arguments: (value, index|key, collection).
 *
 * **Note:** This method returns `true` for
 * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
 * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
 * elements of empty collections.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {boolean} Returns `true` if all elements pass the predicate check,
 *  else `false`.
 * @example
 *
 * _.every([true, 1, null, 'yes'], Boolean);
 * // => false
 *
 * var users = [
 *   { 'user': 'barney', 'age': 36, 'active': false },
 *   { 'user': 'fred',   'age': 40, 'active': false }
 * ];
 *
 * // The `_.matches` iteratee shorthand.
 * _.every(users, { 'user': 'barney', 'active': false });
 * // => false
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.every(users, ['active', false]);
 * // => true
 *
 * // The `_.property` iteratee shorthand.
 * _.every(users, 'active');
 * // => false
 */
function every(collection, predicate, guard) {
  var func = isArray(collection) ? arrayEvery : baseEvery;
  if (guard && isIterateeCall(collection, predicate, guard)) {
    predicate = undefined;
  }
  return func(collection, baseIteratee(predicate, 3));
}

module.exports = every;
module.exports = require('./assignIn');
module.exports = require('./assignInWith');
var baseFill = require('./_baseFill'),
    isIterateeCall = require('./_isIterateeCall');

/**
 * Fills elements of `array` with `value` from `start` up to, but not
 * including, `end`.
 *
 * **Note:** This method mutates `array`.
 *
 * @static
 * @memberOf _
 * @since 3.2.0
 * @category Array
 * @param {Array} array The array to fill.
 * @param {*} value The value to fill `array` with.
 * @param {number} [start=0] The start position.
 * @param {number} [end=array.length] The end position.
 * @returns {Array} Returns `array`.
 * @example
 *
 * var array = [1, 2, 3];
 *
 * _.fill(array, 'a');
 * console.log(array);
 * // => ['a', 'a', 'a']
 *
 * _.fill(Array(3), 2);
 * // => [2, 2, 2]
 *
 * _.fill([4, 6, 8, 10], '*', 1, 3);
 * // => [4, '*', '*', 10]
 */
function fill(array, value, start, end) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return [];
  }
  if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
    start = 0;
    end = length;
  }
  return baseFill(array, value, start, end);
}

module.exports = fill;
var arrayFilter = require('./_arrayFilter'),
    baseFilter = require('./_baseFilter'),
    baseIteratee = require('./_baseIteratee'),
    isArray = require('./isArray');

/**
 * Iterates over elements of `collection`, returning an array of all elements
 * `predicate` returns truthy for. The predicate is invoked with three
 * arguments: (value, index|key, collection).
 *
 * **Note:** Unlike `_.remove`, this method returns a new array.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the new filtered array.
 * @see _.reject
 * @example
 *
 * var users = [
 *   { 'user': 'barney', 'age': 36, 'active': true },
 *   { 'user': 'fred',   'age': 40, 'active': false }
 * ];
 *
 * _.filter(users, function(o) { return !o.active; });
 * // => objects for ['fred']
 *
 * // The `_.matches` iteratee shorthand.
 * _.filter(users, { 'age': 36, 'active': true });
 * // => objects for ['barney']
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.filter(users, ['active', false]);
 * // => objects for ['fred']
 *
 * // The `_.property` iteratee shorthand.
 * _.filter(users, 'active');
 * // => objects for ['barney']
 *
 * // Combining several predicates using `_.overEvery` or `_.overSome`.
 * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
 * // => objects for ['fred', 'barney']
 */
function filter(collection, predicate) {
  var func = isArray(collection) ? arrayFilter : baseFilter;
  return func(collection, baseIteratee(predicate, 3));
}

module.exports = filter;
var createFind = require('./_createFind'),
    findIndex = require('./findIndex');

/**
 * Iterates over elements of `collection`, returning the first element
 * `predicate` returns truthy for. The predicate is invoked with three
 * arguments: (value, index|key, collection).
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to inspect.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @param {number} [fromIndex=0] The index to search from.
 * @returns {*} Returns the matched element, else `undefined`.
 * @example
 *
 * var users = [
 *   { 'user': 'barney',  'age': 36, 'active': true },
 *   { 'user': 'fred',    'age': 40, 'active': false },
 *   { 'user': 'pebbles', 'age': 1,  'active': true }
 * ];
 *
 * _.find(users, function(o) { return o.age < 40; });
 * // => object for 'barney'
 *
 * // The `_.matches` iteratee shorthand.
 * _.find(users, { 'age': 1, 'active': true });
 * // => object for 'pebbles'
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.find(users, ['active', false]);
 * // => object for 'fred'
 *
 * // The `_.property` iteratee shorthand.
 * _.find(users, 'active');
 * // => object for 'barney'
 */
var find = createFind(findIndex);

module.exports = find;
var baseFindIndex = require('./_baseFindIndex'),
    baseIteratee = require('./_baseIteratee'),
    toInteger = require('./toInteger');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;

/**
 * This method is like `_.find` except that it returns the index of the first
 * element `predicate` returns truthy for instead of the element itself.
 *
 * @static
 * @memberOf _
 * @since 1.1.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @param {number} [fromIndex=0] The index to search from.
 * @returns {number} Returns the index of the found element, else `-1`.
 * @example
 *
 * var users = [
 *   { 'user': 'barney',  'active': false },
 *   { 'user': 'fred',    'active': false },
 *   { 'user': 'pebbles', 'active': true }
 * ];
 *
 * _.findIndex(users, function(o) { return o.user == 'barney'; });
 * // => 0
 *
 * // The `_.matches` iteratee shorthand.
 * _.findIndex(users, { 'user': 'fred', 'active': false });
 * // => 1
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.findIndex(users, ['active', false]);
 * // => 0
 *
 * // The `_.property` iteratee shorthand.
 * _.findIndex(users, 'active');
 * // => 2
 */
function findIndex(array, predicate, fromIndex) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return -1;
  }
  var index = fromIndex == null ? 0 : toInteger(fromIndex);
  if (index < 0) {
    index = nativeMax(length + index, 0);
  }
  return baseFindIndex(array, baseIteratee(predicate, 3), index);
}

module.exports = findIndex;
var baseFindKey = require('./_baseFindKey'),
    baseForOwn = require('./_baseForOwn'),
    baseIteratee = require('./_baseIteratee');

/**
 * This method is like `_.find` except that it returns the key of the first
 * element `predicate` returns truthy for instead of the element itself.
 *
 * @static
 * @memberOf _
 * @since 1.1.0
 * @category Object
 * @param {Object} object The object to inspect.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {string|undefined} Returns the key of the matched element,
 *  else `undefined`.
 * @example
 *
 * var users = {
 *   'barney':  { 'age': 36, 'active': true },
 *   'fred':    { 'age': 40, 'active': false },
 *   'pebbles': { 'age': 1,  'active': true }
 * };
 *
 * _.findKey(users, function(o) { return o.age < 40; });
 * // => 'barney' (iteration order is not guaranteed)
 *
 * // The `_.matches` iteratee shorthand.
 * _.findKey(users, { 'age': 1, 'active': true });
 * // => 'pebbles'
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.findKey(users, ['active', false]);
 * // => 'fred'
 *
 * // The `_.property` iteratee shorthand.
 * _.findKey(users, 'active');
 * // => 'barney'
 */
function findKey(object, predicate) {
  return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn);
}

module.exports = findKey;
var createFind = require('./_createFind'),
    findLastIndex = require('./findLastIndex');

/**
 * This method is like `_.find` except that it iterates over elements of
 * `collection` from right to left.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @category Collection
 * @param {Array|Object} collection The collection to inspect.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @param {number} [fromIndex=collection.length-1] The index to search from.
 * @returns {*} Returns the matched element, else `undefined`.
 * @example
 *
 * _.findLast([1, 2, 3, 4], function(n) {
 *   return n % 2 == 1;
 * });
 * // => 3
 */
var findLast = createFind(findLastIndex);

module.exports = findLast;
var baseFindIndex = require('./_baseFindIndex'),
    baseIteratee = require('./_baseIteratee'),
    toInteger = require('./toInteger');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max,
    nativeMin = Math.min;

/**
 * This method is like `_.findIndex` except that it iterates over elements
 * of `collection` from right to left.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @param {number} [fromIndex=array.length-1] The index to search from.
 * @returns {number} Returns the index of the found element, else `-1`.
 * @example
 *
 * var users = [
 *   { 'user': 'barney',  'active': true },
 *   { 'user': 'fred',    'active': false },
 *   { 'user': 'pebbles', 'active': false }
 * ];
 *
 * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
 * // => 2
 *
 * // The `_.matches` iteratee shorthand.
 * _.findLastIndex(users, { 'user': 'barney', 'active': true });
 * // => 0
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.findLastIndex(users, ['active', false]);
 * // => 2
 *
 * // The `_.property` iteratee shorthand.
 * _.findLastIndex(users, 'active');
 * // => 0
 */
function findLastIndex(array, predicate, fromIndex) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return -1;
  }
  var index = length - 1;
  if (fromIndex !== undefined) {
    index = toInteger(fromIndex);
    index = fromIndex < 0
      ? nativeMax(length + index, 0)
      : nativeMin(index, length - 1);
  }
  return baseFindIndex(array, baseIteratee(predicate, 3), index, true);
}

module.exports = findLastIndex;
var baseFindKey = require('./_baseFindKey'),
    baseForOwnRight = require('./_baseForOwnRight'),
    baseIteratee = require('./_baseIteratee');

/**
 * This method is like `_.findKey` except that it iterates over elements of
 * a collection in the opposite order.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @category Object
 * @param {Object} object The object to inspect.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {string|undefined} Returns the key of the matched element,
 *  else `undefined`.
 * @example
 *
 * var users = {
 *   'barney':  { 'age': 36, 'active': true },
 *   'fred':    { 'age': 40, 'active': false },
 *   'pebbles': { 'age': 1,  'active': true }
 * };
 *
 * _.findLastKey(users, function(o) { return o.age < 40; });
 * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
 *
 * // The `_.matches` iteratee shorthand.
 * _.findLastKey(users, { 'age': 36, 'active': true });
 * // => 'barney'
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.findLastKey(users, ['active', false]);
 * // => 'fred'
 *
 * // The `_.property` iteratee shorthand.
 * _.findLastKey(users, 'active');
 * // => 'pebbles'
 */
function findLastKey(object, predicate) {
  return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight);
}

module.exports = findLastKey;
module.exports = require('./head');
{
  "nodes": {
    "nixpkgs": {
      "locked": {
        "lastModified": 1613582597,
        "narHash": "sha256-6LvipIvFuhyorHpUqK3HjySC5Y6gshXHFBhU9EJ4DoM=",
        "path": "/nix/store/srvplqq673sqd9vyfhyc5w1p88y1gfm4-source",
        "rev": "6b1057b452c55bb3b463f0d7055bc4ec3fd1f381",
        "type": "path"
      },
      "original": {
        "id": "nixpkgs",
        "type": "indirect"
      }
    },
    "root": {
      "inputs": {
        "nixpkgs": "nixpkgs",
        "utils": "utils"
      }
    },
    "utils": {
      "locked": {
        "lastModified": 1610051610,
        "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=",
        "owner": "numtide",
        "repo": "flake-utils",
        "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc",
        "type": "github"
      },
      "original": {
        "owner": "numtide",
        "repo": "flake-utils",
        "type": "github"
      }
    }
  },
  "root": "root",
  "version": 7
}
{
  inputs = {
    utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, utils }:
    utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages."${system}";
      in rec {
       devShell = pkgs.mkShell {
          nativeBuildInputs = with pkgs; [
            yarn
            nodejs-14_x
            nodePackages.typescript-language-server
            nodePackages.eslint
          ];
        };
      });
}
var baseFlatten = require('./_baseFlatten'),
    map = require('./map');

/**
 * Creates a flattened array of values by running each element in `collection`
 * thru `iteratee` and flattening the mapped results. The iteratee is invoked
 * with three arguments: (value, index|key, collection).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the new flattened array.
 * @example
 *
 * function duplicate(n) {
 *   return [n, n];
 * }
 *
 * _.flatMap([1, 2], duplicate);
 * // => [1, 1, 2, 2]
 */
function flatMap(collection, iteratee) {
  return baseFlatten(map(collection, iteratee), 1);
}

module.exports = flatMap;
var baseFlatten = require('./_baseFlatten'),
    map = require('./map');

/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;

/**
 * This method is like `_.flatMap` except that it recursively flattens the
 * mapped results.
 *
 * @static
 * @memberOf _
 * @since 4.7.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the new flattened array.
 * @example
 *
 * function duplicate(n) {
 *   return [[[n, n]]];
 * }
 *
 * _.flatMapDeep([1, 2], duplicate);
 * // => [1, 1, 2, 2]
 */
function flatMapDeep(collection, iteratee) {
  return baseFlatten(map(collection, iteratee), INFINITY);
}

module.exports = flatMapDeep;
var baseFlatten = require('./_baseFlatten'),
    map = require('./map'),
    toInteger = require('./toInteger');

/**
 * This method is like `_.flatMap` except that it recursively flattens the
 * mapped results up to `depth` times.
 *
 * @static
 * @memberOf _
 * @since 4.7.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @param {number} [depth=1] The maximum recursion depth.
 * @returns {Array} Returns the new flattened array.
 * @example
 *
 * function duplicate(n) {
 *   return [[[n, n]]];
 * }
 *
 * _.flatMapDepth([1, 2], duplicate, 2);
 * // => [[1, 1], [2, 2]]
 */
function flatMapDepth(collection, iteratee, depth) {
  depth = depth === undefined ? 1 : toInteger(depth);
  return baseFlatten(map(collection, iteratee), depth);
}

module.exports = flatMapDepth;
var baseFlatten = require('./_baseFlatten');

/**
 * Flattens `array` a single level deep.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to flatten.
 * @returns {Array} Returns the new flattened array.
 * @example
 *
 * _.flatten([1, [2, [3, [4]], 5]]);
 * // => [1, 2, [3, [4]], 5]
 */
function flatten(array) {
  var length = array == null ? 0 : array.length;
  return length ? baseFlatten(array, 1) : [];
}

module.exports = flatten;
var baseFlatten = require('./_baseFlatten');

/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0;

/**
 * Recursively flattens `array`.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to flatten.
 * @returns {Array} Returns the new flattened array.
 * @example
 *
 * _.flattenDeep([1, [2, [3, [4]], 5]]);
 * // => [1, 2, 3, 4, 5]
 */
function flattenDeep(array) {
  var length = array == null ? 0 : array.length;
  return length ? baseFlatten(array, INFINITY) : [];
}

module.exports = flattenDeep;
var baseFlatten = require('./_baseFlatten'),
    toInteger = require('./toInteger');

/**
 * Recursively flatten `array` up to `depth` times.
 *
 * @static
 * @memberOf _
 * @since 4.4.0
 * @category Array
 * @param {Array} array The array to flatten.
 * @param {number} [depth=1] The maximum recursion depth.
 * @returns {Array} Returns the new flattened array.
 * @example
 *
 * var array = [1, [2, [3, [4]], 5]];
 *
 * _.flattenDepth(array, 1);
 * // => [1, 2, [3, [4]], 5]
 *
 * _.flattenDepth(array, 2);
 * // => [1, 2, 3, [4], 5]
 */
function flattenDepth(array, depth) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return [];
  }
  depth = depth === undefined ? 1 : toInteger(depth);
  return baseFlatten(array, depth);
}

module.exports = flattenDepth;
var createWrap = require('./_createWrap');

/** Used to compose bitmasks for function metadata. */
var WRAP_FLIP_FLAG = 512;

/**
 * Creates a function that invokes `func` with arguments reversed.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Function
 * @param {Function} func The function to flip arguments for.
 * @returns {Function} Returns the new flipped function.
 * @example
 *
 * var flipped = _.flip(function() {
 *   return _.toArray(arguments);
 * });
 *
 * flipped('a', 'b', 'c', 'd');
 * // => ['d', 'c', 'b', 'a']
 */
function flip(func) {
  return createWrap(func, WRAP_FLIP_FLAG);
}

module.exports = flip;
var createRound = require('./_createRound');

/**
 * Computes `number` rounded down to `precision`.
 *
 * @static
 * @memberOf _
 * @since 3.10.0
 * @category Math
 * @param {number} number The number to round down.
 * @param {number} [precision=0] The precision to round down to.
 * @returns {number} Returns the rounded down number.
 * @example
 *
 * _.floor(4.006);
 * // => 4
 *
 * _.floor(0.046, 2);
 * // => 0.04
 *
 * _.floor(4060, -2);
 * // => 4000
 */
var floor = createRound('floor');

module.exports = floor;
var createFlow = require('./_createFlow');

/**
 * Creates a function that returns the result of invoking the given functions
 * with the `this` binding of the created function, where each successive
 * invocation is supplied the return value of the previous.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Util
 * @param {...(Function|Function[])} [funcs] The functions to invoke.
 * @returns {Function} Returns the new composite function.
 * @see _.flowRight
 * @example
 *
 * function square(n) {
 *   return n * n;
 * }
 *
 * var addSquare = _.flow([_.add, square]);
 * addSquare(1, 2);
 * // => 9
 */
var flow = createFlow();

module.exports = flow;
var createFlow = require('./_createFlow');

/**
 * This method is like `_.flow` except that it creates a function that
 * invokes the given functions from right to left.
 *
 * @static
 * @since 3.0.0
 * @memberOf _
 * @category Util
 * @param {...(Function|Function[])} [funcs] The functions to invoke.
 * @returns {Function} Returns the new composite function.
 * @see _.flow
 * @example
 *
 * function square(n) {
 *   return n * n;
 * }
 *
 * var addSquare = _.flowRight([square, _.add]);
 * addSquare(1, 2);
 * // => 9
 */
var flowRight = createFlow(true);

module.exports = flowRight;
var arrayEach = require('./_arrayEach'),
    baseEach = require('./_baseEach'),
    castFunction = require('./_castFunction'),
    isArray = require('./isArray');

/**
 * Iterates over elements of `collection` and invokes `iteratee` for each element.
 * The iteratee is invoked with three arguments: (value, index|key, collection).
 * Iteratee functions may exit iteration early by explicitly returning `false`.
 *
 * **Note:** As with other "Collections" methods, objects with a "length"
 * property are iterated like arrays. To avoid this behavior use `_.forIn`
 * or `_.forOwn` for object iteration.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @alias each
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Array|Object} Returns `collection`.
 * @see _.forEachRight
 * @example
 *
 * _.forEach([1, 2], function(value) {
 *   console.log(value);
 * });
 * // => Logs `1` then `2`.
 *
 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
 *   console.log(key);
 * });
 * // => Logs 'a' then 'b' (iteration order is not guaranteed).
 */
function forEach(collection, iteratee) {
  var func = isArray(collection) ? arrayEach : baseEach;
  return func(collection, castFunction(iteratee));
}

module.exports = forEach;
var arrayEachRight = require('./_arrayEachRight'),
    baseEachRight = require('./_baseEachRight'),
    castFunction = require('./_castFunction'),
    isArray = require('./isArray');

/**
 * This method is like `_.forEach` except that it iterates over elements of
 * `collection` from right to left.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @alias eachRight
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Array|Object} Returns `collection`.
 * @see _.forEach
 * @example
 *
 * _.forEachRight([1, 2], function(value) {
 *   console.log(value);
 * });
 * // => Logs `2` then `1`.
 */
function forEachRight(collection, iteratee) {
  var func = isArray(collection) ? arrayEachRight : baseEachRight;
  return func(collection, castFunction(iteratee));
}

module.exports = forEachRight;
var baseFor = require('./_baseFor'),
    castFunction = require('./_castFunction'),
    keysIn = require('./keysIn');

/**
 * Iterates over own and inherited enumerable string keyed properties of an
 * object and invokes `iteratee` for each property. The iteratee is invoked
 * with three arguments: (value, key, object). Iteratee functions may exit
 * iteration early by explicitly returning `false`.
 *
 * @static
 * @memberOf _
 * @since 0.3.0
 * @category Object
 * @param {Object} object The object to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Object} Returns `object`.
 * @see _.forInRight
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.forIn(new Foo, function(value, key) {
 *   console.log(key);
 * });
 * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
 */
function forIn(object, iteratee) {
  return object == null
    ? object
    : baseFor(object, castFunction(iteratee), keysIn);
}

module.exports = forIn;
var baseForRight = require('./_baseForRight'),
    castFunction = require('./_castFunction'),
    keysIn = require('./keysIn');

/**
 * This method is like `_.forIn` except that it iterates over properties of
 * `object` in the opposite order.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @category Object
 * @param {Object} object The object to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Object} Returns `object`.
 * @see _.forIn
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.forInRight(new Foo, function(value, key) {
 *   console.log(key);
 * });
 * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
 */
function forInRight(object, iteratee) {
  return object == null
    ? object
    : baseForRight(object, castFunction(iteratee), keysIn);
}

module.exports = forInRight;
var baseForOwn = require('./_baseForOwn'),
    castFunction = require('./_castFunction');

/**
 * Iterates over own enumerable string keyed properties of an object and
 * invokes `iteratee` for each property. The iteratee is invoked with three
 * arguments: (value, key, object). Iteratee functions may exit iteration
 * early by explicitly returning `false`.
 *
 * @static
 * @memberOf _
 * @since 0.3.0
 * @category Object
 * @param {Object} object The object to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Object} Returns `object`.
 * @see _.forOwnRight
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.forOwn(new Foo, function(value, key) {
 *   console.log(key);
 * });
 * // => Logs 'a' then 'b' (iteration order is not guaranteed).
 */
function forOwn(object, iteratee) {
  return object && baseForOwn(object, castFunction(iteratee));
}

module.exports = forOwn;
var baseForOwnRight = require('./_baseForOwnRight'),
    castFunction = require('./_castFunction');

/**
 * This method is like `_.forOwn` except that it iterates over properties of
 * `object` in the opposite order.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @category Object
 * @param {Object} object The object to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Object} Returns `object`.
 * @see _.forOwn
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.forOwnRight(new Foo, function(value, key) {
 *   console.log(key);
 * });
 * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
 */
function forOwnRight(object, iteratee) {
  return object && baseForOwnRight(object, castFunction(iteratee));
}

module.exports = forOwnRight;
var _ = require('./lodash.min').runInContext();
module.exports = require('./fp/_baseConvert')(_, _);
module.exports = require('./placeholder');
var mapping = require('./_mapping'),
    fallbackHolder = require('./placeholder');

/** Built-in value reference. */
var push = Array.prototype.push;

/**
 * Creates a function, with an arity of `n`, that invokes `func` with the
 * arguments it receives.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {number} n The arity of the new function.
 * @returns {Function} Returns the new function.
 */
function baseArity(func, n) {
  return n == 2
    ? function(a, b) { return func.apply(undefined, arguments); }
    : function(a) { return func.apply(undefined, arguments); };
}

/**
 * Creates a function that invokes `func`, with up to `n` arguments, ignoring
 * any additional arguments.
 *
 * @private
 * @param {Function} func The function to cap arguments for.
 * @param {number} n The arity cap.
 * @returns {Function} Returns the new function.
 */
function baseAry(func, n) {
  return n == 2
    ? function(a, b) { return func(a, b); }
    : function(a) { return func(a); };
}

/**
 * Creates a clone of `array`.
 *
 * @private
 * @param {Array} array The array to clone.
 * @returns {Array} Returns the cloned array.
 */
function cloneArray(array) {
  var length = array ? array.length : 0,
      result = Array(length);

  while (length--) {
    result[length] = array[length];
  }
  return result;
}

/**
 * Creates a function that clones a given object using the assignment `func`.
 *
 * @private
 * @param {Function} func The assignment function.
 * @returns {Function} Returns the new cloner function.
 */
function createCloner(func) {
  return function(object) {
    return func({}, object);
  };
}

/**
 * A specialized version of `_.spread` which flattens the spread array into
 * the arguments of the invoked `func`.
 *
 * @private
 * @param {Function} func The function to spread arguments over.
 * @param {number} start The start position of the spread.
 * @returns {Function} Returns the new function.
 */
function flatSpread(func, start) {
  return function() {
    var length = arguments.length,
        lastIndex = length - 1,
        args = Array(length);

    while (length--) {
      args[length] = arguments[length];
    }
    var array = args[start],
        otherArgs = args.slice(0, start);

    if (array) {
      push.apply(otherArgs, array);
    }
    if (start != lastIndex) {
      push.apply(otherArgs, args.slice(start + 1));
    }
    return func.apply(this, otherArgs);
  };
}

/**
 * Creates a function that wraps `func` and uses `cloner` to clone the first
 * argument it receives.
 *
 * @private
 * @param {Function} func The function to wrap.
 * @param {Function} cloner The function to clone arguments.
 * @returns {Function} Returns the new immutable function.
 */
function wrapImmutable(func, cloner) {
  return function() {
    var length = arguments.length;
    if (!length) {
      return;
    }
    var args = Array(length);
    while (length--) {
      args[length] = arguments[length];
    }
    var result = args[0] = cloner.apply(undefined, args);
    func.apply(undefined, args);
    return result;
  };
}

/**
 * The base implementation of `convert` which accepts a `util` object of methods
 * required to perform conversions.
 *
 * @param {Object} util The util object.
 * @param {string} name The name of the function to convert.
 * @param {Function} func The function to convert.
 * @param {Object} [options] The options object.
 * @param {boolean} [options.cap=true] Specify capping iteratee arguments.
 * @param {boolean} [options.curry=true] Specify currying.
 * @param {boolean} [options.fixed=true] Specify fixed arity.
 * @param {boolean} [options.immutable=true] Specify immutable operations.
 * @param {boolean} [options.rearg=true] Specify rearranging arguments.
 * @returns {Function|Object} Returns the converted function or object.
 */
function baseConvert(util, name, func, options) {
  var isLib = typeof name == 'function',
      isObj = name === Object(name);

  if (isObj) {
    options = func;
    func = name;
    name = undefined;
  }
  if (func == null) {
    throw new TypeError;
  }
  options || (options = {});

  var config = {
    'cap': 'cap' in options ? options.cap : true,
    'curry': 'curry' in options ? options.curry : true,
    'fixed': 'fixed' in options ? options.fixed : true,
    'immutable': 'immutable' in options ? options.immutable : true,
    'rearg': 'rearg' in options ? options.rearg : true
  };

  var defaultHolder = isLib ? func : fallbackHolder,
      forceCurry = ('curry' in options) && options.curry,
      forceFixed = ('fixed' in options) && options.fixed,
      forceRearg = ('rearg' in options) && options.rearg,
      pristine = isLib ? func.runInContext() : undefined;

  var helpers = isLib ? func : {
    'ary': util.ary,
    'assign': util.assign,
    'clone': util.clone,
    'curry': util.curry,
    'forEach': util.forEach,
    'isArray': util.isArray,
    'isError': util.isError,
    'isFunction': util.isFunction,
    'isWeakMap': util.isWeakMap,
    'iteratee': util.iteratee,
    'keys': util.keys,
    'rearg': util.rearg,
    'toInteger': util.toInteger,
    'toPath': util.toPath
  };

  var ary = helpers.ary,
      assign = helpers.assign,
      clone = helpers.clone,
      curry = helpers.curry,
      each = helpers.forEach,
      isArray = helpers.isArray,
      isError = helpers.isError,
      isFunction = helpers.isFunction,
      isWeakMap = helpers.isWeakMap,
      keys = helpers.keys,
      rearg = helpers.rearg,
      toInteger = helpers.toInteger,
      toPath = helpers.toPath;

  var aryMethodKeys = keys(mapping.aryMethod);

  var wrappers = {
    'castArray': function(castArray) {
      return function() {
        var value = arguments[0];
        return isArray(value)
          ? castArray(cloneArray(value))
          : castArray.apply(undefined, arguments);
      };
    },
    'iteratee': function(iteratee) {
      return function() {
        var func = arguments[0],
            arity = arguments[1],
            result = iteratee(func, arity),
            length = result.length;

        if (config.cap && typeof arity == 'number') {
          arity = arity > 2 ? (arity - 2) : 1;
          return (length && length <= arity) ? result : baseAry(result, arity);
        }
        return result;
      };
    },
    'mixin': function(mixin) {
      return function(source) {
        var func = this;
        if (!isFunction(func)) {
          return mixin(func, Object(source));
        }
        var pairs = [];
        each(keys(source), function(key) {
          if (isFunction(source[key])) {
            pairs.push([key, func.prototype[key]]);
          }
        });

        mixin(func, Object(source));

        each(pairs, function(pair) {
          var value = pair[1];
          if (isFunction(value)) {
            func.prototype[pair[0]] = value;
          } else {
            delete func.prototype[pair[0]];
          }
        });
        return func;
      };
    },
    'nthArg': function(nthArg) {
      return function(n) {
        var arity = n < 0 ? 1 : (toInteger(n) + 1);
        return curry(nthArg(n), arity);
      };
    },
    'rearg': function(rearg) {
      return function(func, indexes) {
        var arity = indexes ? indexes.length : 0;
        return curry(rearg(func, indexes), arity);
      };
    },
    'runInContext': function(runInContext) {
      return function(context) {
        return baseConvert(util, runInContext(context), options);
      };
    }
  };

  /*--------------------------------------------------------------------------*/

  /**
   * Casts `func` to a function with an arity capped iteratee if needed.
   *
   * @private
   * @param {string} name The name of the function to inspect.
   * @param {Function} func The function to inspect.
   * @returns {Function} Returns the cast function.
   */
  function castCap(name, func) {
    if (config.cap) {
      var indexes = mapping.iterateeRearg[name];
      if (indexes) {
        return iterateeRearg(func, indexes);
      }
      var n = !isLib && mapping.iterateeAry[name];
      if (n) {
        return iterateeAry(func, n);
      }
    }
    return func;
  }

  /**
   * Casts `func` to a curried function if needed.
   *
   * @private
   * @param {string} name The name of the function to inspect.
   * @param {Function} func The function to inspect.
   * @param {number} n The arity of `func`.
   * @returns {Function} Returns the cast function.
   */
  function castCurry(name, func, n) {
    return (forceCurry || (config.curry && n > 1))
      ? curry(func, n)
      : func;
  }

  /**
   * Casts `func` to a fixed arity function if needed.
   *
   * @private
   * @param {string} name The name of the function to inspect.
   * @param {Function} func The function to inspect.
   * @param {number} n The arity cap.
   * @returns {Function} Returns the cast function.
   */
  function castFixed(name, func, n) {
    if (config.fixed && (forceFixed || !mapping.skipFixed[name])) {
      var data = mapping.methodSpread[name],
          start = data && data.start;

      return start  === undefined ? ary(func, n) : flatSpread(func, start);
    }
    return func;
  }

  /**
   * Casts `func` to an rearged function if needed.
   *
   * @private
   * @param {string} name The name of the function to inspect.
   * @param {Function} func The function to inspect.
   * @param {number} n The arity of `func`.
   * @returns {Function} Returns the cast function.
   */
  function castRearg(name, func, n) {
    return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name]))
      ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n])
      : func;
  }

  /**
   * Creates a clone of `object` by `path`.
   *
   * @private
   * @param {Object} object The object to clone.
   * @param {Array|string} path The path to clone by.
   * @returns {Object} Returns the cloned object.
   */
  function cloneByPath(object, path) {
    path = toPath(path);

    var index = -1,
        length = path.length,
        lastIndex = length - 1,
        result = clone(Object(object)),
        nested = result;

    while (nested != null && ++index < length) {
      var key = path[index],
          value = nested[key];

      if (value != null &&
          !(isFunction(value) || isError(value) || isWeakMap(value))) {
        nested[key] = clone(index == lastIndex ? value : Object(value));
      }
      nested = nested[key];
    }
    return result;
  }

  /**
   * Converts `lodash` to an immutable auto-curried iteratee-first data-last
   * version with conversion `options` applied.
   *
   * @param {Object} [options] The options object. See `baseConvert` for more details.
   * @returns {Function} Returns the converted `lodash`.
   */
  function convertLib(options) {
    return _.runInContext.convert(options)(undefined);
  }

  /**
   * Create a converter function for `func` of `name`.
   *
   * @param {string} name The name of the function to convert.
   * @param {Function} func The function to convert.
   * @returns {Function} Returns the new converter function.
   */
  function createConverter(name, func) {
    var realName = mapping.aliasToReal[name] || name,
        methodName = mapping.remap[realName] || realName,
        oldOptions = options;

    return function(options) {
      var newUtil = isLib ? pristine : helpers,
          newFunc = isLib ? pristine[methodName] : func,
          newOptions = assign(assign({}, oldOptions), options);

      return baseConvert(newUtil, realName, newFunc, newOptions);
    };
  }

  /**
   * Creates a function that wraps `func` to invoke its iteratee, with up to `n`
   * arguments, ignoring any additional arguments.
   *
   * @private
   * @param {Function} func The function to cap iteratee arguments for.
   * @param {number} n The arity cap.
   * @returns {Function} Returns the new function.
   */
  function iterateeAry(func, n) {
    return overArg(func, function(func) {
      return typeof func == 'function' ? baseAry(func, n) : func;
    });
  }

  /**
   * Creates a function that wraps `func` to invoke its iteratee with arguments
   * arranged according to the specified `indexes` where the argument value at
   * the first index is provided as the first argument, the argument value at
   * the second index is provided as the second argument, and so on.
   *
   * @private
   * @param {Function} func The function to rearrange iteratee arguments for.
   * @param {number[]} indexes The arranged argument indexes.
   * @returns {Function} Returns the new function.
   */
  function iterateeRearg(func, indexes) {
    return overArg(func, function(func) {
      var n = indexes.length;
      return baseArity(rearg(baseAry(func, n), indexes), n);
    });
  }

  /**
   * Creates a function that invokes `func` with its first argument transformed.
   *
   * @private
   * @param {Function} func The function to wrap.
   * @param {Function} transform The argument transform.
   * @returns {Function} Returns the new function.
   */
  function overArg(func, transform) {
    return function() {
      var length = arguments.length;
      if (!length) {
        return func();
      }
      var args = Array(length);
      while (length--) {
        args[length] = arguments[length];
      }
      var index = config.rearg ? 0 : (length - 1);
      args[index] = transform(args[index]);
      return func.apply(undefined, args);
    };
  }

  /**
   * Creates a function that wraps `func` and applys the conversions
   * rules by `name`.
   *
   * @private
   * @param {string} name The name of the function to wrap.
   * @param {Function} func The function to wrap.
   * @returns {Function} Returns the converted function.
   */
  function wrap(name, func, placeholder) {
    var result,
        realName = mapping.aliasToReal[name] || name,
        wrapped = func,
        wrapper = wrappers[realName];

    if (wrapper) {
      wrapped = wrapper(func);
    }
    else if (config.immutable) {
      if (mapping.mutate.array[realName]) {
        wrapped = wrapImmutable(func, cloneArray);
      }
      else if (mapping.mutate.object[realName]) {
        wrapped = wrapImmutable(func, createCloner(func));
      }
      else if (mapping.mutate.set[realName]) {
        wrapped = wrapImmutable(func, cloneByPath);
      }
    }
    each(aryMethodKeys, function(aryKey) {
      each(mapping.aryMethod[aryKey], function(otherName) {
        if (realName == otherName) {
          var data = mapping.methodSpread[realName],
              afterRearg = data && data.afterRearg;

          result = afterRearg
            ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey)
            : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey);

          result = castCap(realName, result);
          result = castCurry(realName, result, aryKey);
          return false;
        }
      });
      return !result;
    });

    result || (result = wrapped);
    if (result == func) {
      result = forceCurry ? curry(result, 1) : function() {
        return func.apply(this, arguments);
      };
    }
    result.convert = createConverter(realName, func);
    result.placeholder = func.placeholder = placeholder;

    return result;
  }

  /*--------------------------------------------------------------------------*/

  if (!isObj) {
    return wrap(name, func, defaultHolder);
  }
  var _ = func;

  // Convert methods by ary cap.
  var pairs = [];
  each(aryMethodKeys, function(aryKey) {
    each(mapping.aryMethod[aryKey], function(key) {
      var func = _[mapping.remap[key] || key];
      if (func) {
        pairs.push([key, wrap(key, func, _)]);
      }
    });
  });

  // Convert remaining methods.
  each(keys(_), function(key) {
    var func = _[key];
    if (typeof func == 'function') {
      var length = pairs.length;
      while (length--) {
        if (pairs[length][0] == key) {
          return;
        }
      }
      func.convert = createConverter(key, func);
      pairs.push([key, func]);
    }
  });

  // Assign to `_` leaving `_.prototype` unchanged to allow chaining.
  each(pairs, function(pair) {
    _[pair[0]] = pair[1];
  });

  _.convert = convertLib;
  _.placeholder = _;

  // Assign aliases.
  each(keys(_), function(key) {
    each(mapping.realToAlias[key] || [], function(alias) {
      _[alias] = _[key];
    });
  });

  return _;
}

module.exports = baseConvert;
var baseConvert = require('./_baseConvert');

/**
 * Converts `lodash` to an immutable auto-curried iteratee-first data-last
 * version with conversion `options` applied.
 *
 * @param {Function} lodash The lodash function to convert.
 * @param {Object} [options] The options object. See `baseConvert` for more details.
 * @returns {Function} Returns the converted `lodash`.
 */
function browserConvert(lodash, options) {
  return baseConvert(lodash, lodash, options);
}

if (typeof _ == 'function' && typeof _.runInContext == 'function') {
  _ = browserConvert(_.runInContext());
}
module.exports = browserConvert;
module.exports = {
  'cap': false,
  'curry': false,
  'fixed': false,
  'immutable': false,
  'rearg': false
};
/** Used to map aliases to their real names. */
exports.aliasToReal = {

  // Lodash aliases.
  'each': 'forEach',
  'eachRight': 'forEachRight',
  'entries': 'toPairs',
  'entriesIn': 'toPairsIn',
  'extend': 'assignIn',
  'extendAll': 'assignInAll',
  'extendAllWith': 'assignInAllWith',
  'extendWith': 'assignInWith',
  'first': 'head',

  // Methods that are curried variants of others.
  'conforms': 'conformsTo',
  'matches': 'isMatch',
  'property': 'get',

  // Ramda aliases.
  '__': 'placeholder',
  'F': 'stubFalse',
  'T': 'stubTrue',
  'all': 'every',
  'allPass': 'overEvery',
  'always': 'constant',
  'any': 'some',
  'anyPass': 'overSome',
  'apply': 'spread',
  'assoc': 'set',
  'assocPath': 'set',
  'complement': 'negate',
  'compose': 'flowRight',
  'contains': 'includes',
  'dissoc': 'unset',
  'dissocPath': 'unset',
  'dropLast': 'dropRight',
  'dropLastWhile': 'dropRightWhile',
  'equals': 'isEqual',
  'identical': 'eq',
  'indexBy': 'keyBy',
  'init': 'initial',
  'invertObj': 'invert',
  'juxt': 'over',
  'omitAll': 'omit',
  'nAry': 'ary',
  'path': 'get',
  'pathEq': 'matchesProperty',
  'pathOr': 'getOr',
  'paths': 'at',
  'pickAll': 'pick',
  'pipe': 'flow',
  'pluck': 'map',
  'prop': 'get',
  'propEq': 'matchesProperty',
  'propOr': 'getOr',
  'props': 'at',
  'symmetricDifference': 'xor',
  'symmetricDifferenceBy': 'xorBy',
  'symmetricDifferenceWith': 'xorWith',
  'takeLast': 'takeRight',
  'takeLastWhile': 'takeRightWhile',
  'unapply': 'rest',
  'unnest': 'flatten',
  'useWith': 'overArgs',
  'where': 'conformsTo',
  'whereEq': 'isMatch',
  'zipObj': 'zipObject'
};

/** Used to map ary to method names. */
exports.aryMethod = {
  '1': [
    'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create',
    'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow',
    'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll',
    'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse',
    'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart',
    'uniqueId', 'words', 'zipAll'
  ],
  '2': [
    'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith',
    'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith',
    'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN',
    'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference',
    'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq',
    'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
    'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach',
    'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get',
    'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection',
    'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy',
    'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty',
    'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit',
    'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial',
    'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll',
    'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',
    'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',
    'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',
    'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight',
    'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars',
    'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith',
    'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',
    'zipObjectDeep'
  ],
  '3': [
    'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
    'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr',
    'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith',
    'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth',
    'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd',
    'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight',
    'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy',
    'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy',
    'xorWith', 'zipWith'
  ],
  '4': [
    'fill', 'setWith', 'updateWith'
  ]
};

/** Used to map ary to rearg configs. */
exports.aryRearg = {
  '2': [1, 0],
  '3': [2, 0, 1],
  '4': [3, 2, 0, 1]
};

/** Used to map method names to their iteratee ary. */
exports.iterateeAry = {
  'dropRightWhile': 1,
  'dropWhile': 1,
  'every': 1,
  'filter': 1,
  'find': 1,
  'findFrom': 1,
  'findIndex': 1,
  'findIndexFrom': 1,
  'findKey': 1,
  'findLast': 1,
  'findLastFrom': 1,
  'findLastIndex': 1,
  'findLastIndexFrom': 1,
  'findLastKey': 1,
  'flatMap': 1,
  'flatMapDeep': 1,
  'flatMapDepth': 1,
  'forEach': 1,
  'forEachRight': 1,
  'forIn': 1,
  'forInRight': 1,
  'forOwn': 1,
  'forOwnRight': 1,
  'map': 1,
  'mapKeys': 1,
  'mapValues': 1,
  'partition': 1,
  'reduce': 2,
  'reduceRight': 2,
  'reject': 1,
  'remove': 1,
  'some': 1,
  'takeRightWhile': 1,
  'takeWhile': 1,
  'times': 1,
  'transform': 2
};

/** Used to map method names to iteratee rearg configs. */
exports.iterateeRearg = {
  'mapKeys': [1],
  'reduceRight': [1, 0]
};

/** Used to map method names to rearg configs. */
exports.methodRearg = {
  'assignInAllWith': [1, 0],
  'assignInWith': [1, 2, 0],
  'assignAllWith': [1, 0],
  'assignWith': [1, 2, 0],
  'differenceBy': [1, 2, 0],
  'differenceWith': [1, 2, 0],
  'getOr': [2, 1, 0],
  'intersectionBy': [1, 2, 0],
  'intersectionWith': [1, 2, 0],
  'isEqualWith': [1, 2, 0],
  'isMatchWith': [2, 1, 0],
  'mergeAllWith': [1, 0],
  'mergeWith': [1, 2, 0],
  'padChars': [2, 1, 0],
  'padCharsEnd': [2, 1, 0],
  'padCharsStart': [2, 1, 0],
  'pullAllBy': [2, 1, 0],
  'pullAllWith': [2, 1, 0],
  'rangeStep': [1, 2, 0],
  'rangeStepRight': [1, 2, 0],
  'setWith': [3, 1, 2, 0],
  'sortedIndexBy': [2, 1, 0],
  'sortedLastIndexBy': [2, 1, 0],
  'unionBy': [1, 2, 0],
  'unionWith': [1, 2, 0],
  'updateWith': [3, 1, 2, 0],
  'xorBy': [1, 2, 0],
  'xorWith': [1, 2, 0],
  'zipWith': [1, 2, 0]
};

/** Used to map method names to spread configs. */
exports.methodSpread = {
  'assignAll': { 'start': 0 },
  'assignAllWith': { 'start': 0 },
  'assignInAll': { 'start': 0 },
  'assignInAllWith': { 'start': 0 },
  'defaultsAll': { 'start': 0 },
  'defaultsDeepAll': { 'start': 0 },
  'invokeArgs': { 'start': 2 },
  'invokeArgsMap': { 'start': 2 },
  'mergeAll': { 'start': 0 },
  'mergeAllWith': { 'start': 0 },
  'partial': { 'start': 1 },
  'partialRight': { 'start': 1 },
  'without': { 'start': 1 },
  'zipAll': { 'start': 0 }
};

/** Used to identify methods which mutate arrays or objects. */
exports.mutate = {
  'array': {
    'fill': true,
    'pull': true,
    'pullAll': true,
    'pullAllBy': true,
    'pullAllWith': true,
    'pullAt': true,
    'remove': true,
    'reverse': true
  },
  'object': {
    'assign': true,
    'assignAll': true,
    'assignAllWith': true,
    'assignIn': true,
    'assignInAll': true,
    'assignInAllWith': true,
    'assignInWith': true,
    'assignWith': true,
    'defaults': true,
    'defaultsAll': true,
    'defaultsDeep': true,
    'defaultsDeepAll': true,
    'merge': true,
    'mergeAll': true,
    'mergeAllWith': true,
    'mergeWith': true,
  },
  'set': {
    'set': true,
    'setWith': true,
    'unset': true,
    'update': true,
    'updateWith': true
  }
};

/** Used to map real names to their aliases. */
exports.realToAlias = (function() {
  var hasOwnProperty = Object.prototype.hasOwnProperty,
      object = exports.aliasToReal,
      result = {};

  for (var key in object) {
    var value = object[key];
    if (hasOwnProperty.call(result, value)) {
      result[value].push(key);
    } else {
      result[value] = [key];
    }
  }
  return result;
}());

/** Used to map method names to other names. */
exports.remap = {
  'assignAll': 'assign',
  'assignAllWith': 'assignWith',
  'assignInAll': 'assignIn',
  'assignInAllWith': 'assignInWith',
  'curryN': 'curry',
  'curryRightN': 'curryRight',
  'defaultsAll': 'defaults',
  'defaultsDeepAll': 'defaultsDeep',
  'findFrom': 'find',
  'findIndexFrom': 'findIndex',
  'findLastFrom': 'findLast',
  'findLastIndexFrom': 'findLastIndex',
  'getOr': 'get',
  'includesFrom': 'includes',
  'indexOfFrom': 'indexOf',
  'invokeArgs': 'invoke',
  'invokeArgsMap': 'invokeMap',
  'lastIndexOfFrom': 'lastIndexOf',
  'mergeAll': 'merge',
  'mergeAllWith': 'mergeWith',
  'padChars': 'pad',
  'padCharsEnd': 'padEnd',
  'padCharsStart': 'padStart',
  'propertyOf': 'get',
  'rangeStep': 'range',
  'rangeStepRight': 'rangeRight',
  'restFrom': 'rest',
  'spreadFrom': 'spread',
  'trimChars': 'trim',
  'trimCharsEnd': 'trimEnd',
  'trimCharsStart': 'trimStart',
  'zipAll': 'zip'
};

/** Used to track methods that skip fixing their arity. */
exports.skipFixed = {
  'castArray': true,
  'flow': true,
  'flowRight': true,
  'iteratee': true,
  'mixin': true,
  'rearg': true,
  'runInContext': true
};

/** Used to track methods that skip rearranging arguments. */
exports.skipRearg = {
  'add': true,
  'assign': true,
  'assignIn': true,
  'bind': true,
  'bindKey': true,
  'concat': true,
  'difference': true,
  'divide': true,
  'eq': true,
  'gt': true,
  'gte': true,
  'isEqual': true,
  'lt': true,
  'lte': true,
  'matchesProperty': true,
  'merge': true,
  'multiply': true,
  'overArgs': true,
  'partial': true,
  'partialRight': true,
  'propertyOf': true,
  'random': true,
  'range': true,
  'rangeRight': true,
  'subtract': true,
  'zip': true,
  'zipObject': true,
  'zipObjectDeep': true
};
module.exports = {
  'ary': require('../ary'),
  'assign': require('../_baseAssign'),
  'clone': require('../clone'),
  'curry': require('../curry'),
  'forEach': require('../_arrayEach'),
  'isArray': require('../isArray'),
  'isError': require('../isError'),
  'isFunction': require('../isFunction'),
  'isWeakMap': require('../isWeakMap'),
  'iteratee': require('../iteratee'),
  'keys': require('../_baseKeys'),
  'rearg': require('../rearg'),
  'toInteger': require('../toInteger'),
  'toPath': require('../toPath')
};
var convert = require('./convert'),
    func = convert('add', require('../add'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('after', require('../after'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./every');
module.exports = require('./overEvery');
module.exports = require('./constant');
module.exports = require('./some');
module.exports = require('./overSome');
module.exports = require('./spread');
var convert = require('./convert');
module.exports = convert(require('../array'));
var convert = require('./convert'),
    func = convert('ary', require('../ary'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('assign', require('../assign'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('assignAll', require('../assign'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('assignAllWith', require('../assignWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('assignIn', require('../assignIn'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('assignInAll', require('../assignIn'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('assignInAllWith', require('../assignInWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('assignInWith', require('../assignInWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('assignWith', require('../assignWith'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./set');
module.exports = require('./set');
var convert = require('./convert'),
    func = convert('at', require('../at'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('attempt', require('../attempt'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('before', require('../before'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('bind', require('../bind'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('bindAll', require('../bindAll'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('bindKey', require('../bindKey'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('camelCase', require('../camelCase'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('capitalize', require('../capitalize'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('castArray', require('../castArray'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('ceil', require('../ceil'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('chain', require('../chain'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('chunk', require('../chunk'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('clamp', require('../clamp'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('clone', require('../clone'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('cloneDeepWith', require('../cloneDeepWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('cloneWith', require('../cloneWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert');
module.exports = convert(require('../collection'));
var convert = require('./convert'),
    func = convert('commit', require('../commit'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('compact', require('../compact'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./negate');
module.exports = require('./flowRight');
var convert = require('./convert'),
    func = convert('concat', require('../concat'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('cond', require('../cond'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./conformsTo');
var convert = require('./convert'),
    func = convert('conformsTo', require('../conformsTo'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('constant', require('../constant'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./includes');
var baseConvert = require('./_baseConvert'),
    util = require('./_util');

/**
 * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last
 * version with conversion `options` applied. If `name` is an object its methods
 * will be converted.
 *
 * @param {string} name The name of the function to wrap.
 * @param {Function} [func] The function to wrap.
 * @param {Object} [options] The options object. See `baseConvert` for more details.
 * @returns {Function|Object} Returns the converted function or object.
 */
function convert(name, func, options) {
  return baseConvert(util, name, func, options);
}

module.exports = convert;
var convert = require('./convert'),
    func = convert('countBy', require('../countBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('create', require('../create'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('curry', require('../curry'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('curryN', require('../curry'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('curryRight', require('../curryRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('curryRightN', require('../curryRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert');
module.exports = convert(require('../date'));
var convert = require('./convert'),
    func = convert('debounce', require('../debounce'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('deburr', require('../deburr'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('defaults', require('../defaults'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('defaultsAll', require('../defaults'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('defaultsDeep', require('../defaultsDeep'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('defaultsDeepAll', require('../defaultsDeep'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('defaultTo', require('../defaultTo'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('defer', require('../defer'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('delay', require('../delay'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('difference', require('../difference'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('differenceBy', require('../differenceBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('differenceWith', require('../differenceWith'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./unset');
module.exports = require('./unset');
var convert = require('./convert'),
    func = convert('divide', require('../divide'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('drop', require('../drop'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./dropRight');
module.exports = require('./dropRightWhile');
var convert = require('./convert'),
    func = convert('dropRight', require('../dropRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('dropRightWhile', require('../dropRightWhile'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('dropWhile', require('../dropWhile'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./forEach');
module.exports = require('./forEachRight');
var convert = require('./convert'),
    func = convert('endsWith', require('../endsWith'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./toPairs');
module.exports = require('./toPairsIn');
var convert = require('./convert'),
    func = convert('eq', require('../eq'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./isEqual');
var convert = require('./convert'),
    func = convert('escape', require('../escape'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('every', require('../every'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./assignIn');
module.exports = require('./assignInAll');
module.exports = require('./assignInAllWith');
module.exports = require('./assignInWith');
module.exports = require('./stubFalse');
var convert = require('./convert'),
    func = convert('fill', require('../fill'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('filter', require('../filter'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('find', require('../find'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('findFrom', require('../find'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('findIndex', require('../findIndex'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('findIndexFrom', require('../findIndex'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('findKey', require('../findKey'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('findLast', require('../findLast'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('findLastFrom', require('../findLast'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('findLastIndex', require('../findLastIndex'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('findLastIndexFrom', require('../findLastIndex'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('findLastKey', require('../findLastKey'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./head');
var convert = require('./convert'),
    func = convert('flatMap', require('../flatMap'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('flatMapDeep', require('../flatMapDeep'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('flatMapDepth', require('../flatMapDepth'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('flatten', require('../flatten'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('flattenDeep', require('../flattenDeep'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('flattenDepth', require('../flattenDepth'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('flip', require('../flip'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('floor', require('../floor'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('flow', require('../flow'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('flowRight', require('../flowRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('forEach', require('../forEach'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('forEachRight', require('../forEachRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('forIn', require('../forIn'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('forInRight', require('../forInRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('forOwn', require('../forOwn'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('forOwnRight', require('../forOwnRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('fromPairs', require('../fromPairs'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert');
module.exports = convert(require('../function'));
var convert = require('./convert'),
    func = convert('functions', require('../functions'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('functionsIn', require('../functionsIn'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('get', require('../get'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('getOr', require('../get'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('groupBy', require('../groupBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('gt', require('../gt'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('gte', require('../gte'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('has', require('../has'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('hasIn', require('../hasIn'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('head', require('../head'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./eq');
var convert = require('./convert'),
    func = convert('identity', require('../identity'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('includes', require('../includes'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('includesFrom', require('../includes'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./keyBy');
var convert = require('./convert'),
    func = convert('indexOf', require('../indexOf'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('indexOfFrom', require('../indexOf'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./initial');
var convert = require('./convert'),
    func = convert('initial', require('../initial'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('inRange', require('../inRange'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('intersection', require('../intersection'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('intersectionBy', require('../intersectionBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('intersectionWith', require('../intersectionWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('invert', require('../invert'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('invertBy', require('../invertBy'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./invert');
var convert = require('./convert'),
    func = convert('invoke', require('../invoke'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('invokeArgs', require('../invoke'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('invokeArgsMap', require('../invokeMap'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('invokeMap', require('../invokeMap'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isArguments', require('../isArguments'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isArray', require('../isArray'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isArrayBuffer', require('../isArrayBuffer'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isArrayLike', require('../isArrayLike'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isArrayLikeObject', require('../isArrayLikeObject'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isBoolean', require('../isBoolean'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isBuffer', require('../isBuffer'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isDate', require('../isDate'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isElement', require('../isElement'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isEmpty', require('../isEmpty'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isEqual', require('../isEqual'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isEqualWith', require('../isEqualWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isError', require('../isError'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isFinite', require('../isFinite'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isFunction', require('../isFunction'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isInteger', require('../isInteger'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isLength', require('../isLength'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isMap', require('../isMap'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isMatch', require('../isMatch'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isMatchWith', require('../isMatchWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isNaN', require('../isNaN'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isNative', require('../isNative'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isNil', require('../isNil'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isNull', require('../isNull'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isNumber', require('../isNumber'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isObject', require('../isObject'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isRegExp', require('../isRegExp'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isSet', require('../isSet'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isString', require('../isString'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('isWeakSet', require('../isWeakSet'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('iteratee', require('../iteratee'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('join', require('../join'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./over');
var convert = require('./convert'),
    func = convert('kebabCase', require('../kebabCase'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('keyBy', require('../keyBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('keys', require('../keys'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('keysIn', require('../keysIn'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert');
module.exports = convert(require('../lang'));
var convert = require('./convert'),
    func = convert('last', require('../last'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('lastIndexOf', require('../lastIndexOf'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('lastIndexOfFrom', require('../lastIndexOf'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('lowerFirst', require('../lowerFirst'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('lt', require('../lt'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('lte', require('../lte'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('map', require('../map'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('mapKeys', require('../mapKeys'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('mapValues', require('../mapValues'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./isMatch');
var convert = require('./convert'),
    func = convert('matchesProperty', require('../matchesProperty'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert');
module.exports = convert(require('../math'));
var convert = require('./convert'),
    func = convert('max', require('../max'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('maxBy', require('../maxBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('mean', require('../mean'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('meanBy', require('../meanBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('memoize', require('../memoize'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('merge', require('../merge'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('mergeAll', require('../merge'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('mergeAllWith', require('../mergeWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('mergeWith', require('../mergeWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('method', require('../method'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('methodOf', require('../methodOf'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('min', require('../min'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('minBy', require('../minBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('mixin', require('../mixin'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('multiply', require('../multiply'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./ary');
var convert = require('./convert'),
    func = convert('negate', require('../negate'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('next', require('../next'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('noop', require('../noop'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('now', require('../now'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('nth', require('../nth'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('nthArg', require('../nthArg'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert');
module.exports = convert(require('../number'));
var convert = require('./convert');
module.exports = convert(require('../object'));
var convert = require('./convert'),
    func = convert('omit', require('../omit'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./omit');
var convert = require('./convert'),
    func = convert('omitBy', require('../omitBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('once', require('../once'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('orderBy', require('../orderBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('over', require('../over'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('overArgs', require('../overArgs'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('overEvery', require('../overEvery'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('overSome', require('../overSome'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('pad', require('../pad'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('padChars', require('../pad'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('padCharsEnd', require('../padEnd'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('padCharsStart', require('../padStart'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('padEnd', require('../padEnd'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('padStart', require('../padStart'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('parseInt', require('../parseInt'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('partial', require('../partial'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('partialRight', require('../partialRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('partition', require('../partition'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./get');
module.exports = require('./matchesProperty');
module.exports = require('./getOr');
module.exports = require('./at');
var convert = require('./convert'),
    func = convert('pick', require('../pick'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./pick');
var convert = require('./convert'),
    func = convert('pickBy', require('../pickBy'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./flow');
/**
 * The default argument placeholder value for methods.
 *
 * @type {Object}
 */
module.exports = {};
var convert = require('./convert'),
    func = convert('plant', require('../plant'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./map');
module.exports = require('./get');
module.exports = require('./matchesProperty');
module.exports = require('./get');
var convert = require('./convert'),
    func = convert('propertyOf', require('../get'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./getOr');
module.exports = require('./at');
var convert = require('./convert'),
    func = convert('pull', require('../pull'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('pullAll', require('../pullAll'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('pullAllBy', require('../pullAllBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('pullAllWith', require('../pullAllWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('pullAt', require('../pullAt'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('random', require('../random'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('range', require('../range'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('rangeRight', require('../rangeRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('rangeStep', require('../range'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('rangeStepRight', require('../rangeRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('rearg', require('../rearg'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('reduce', require('../reduce'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('reduceRight', require('../reduceRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('reject', require('../reject'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('remove', require('../remove'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('repeat', require('../repeat'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('replace', require('../replace'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('rest', require('../rest'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('restFrom', require('../rest'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('result', require('../result'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('reverse', require('../reverse'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('round', require('../round'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sample', require('../sample'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sampleSize', require('../sampleSize'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert');
module.exports = convert(require('../seq'));
var convert = require('./convert'),
    func = convert('set', require('../set'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('setWith', require('../setWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('shuffle', require('../shuffle'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('size', require('../size'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('slice', require('../slice'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('snakeCase', require('../snakeCase'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('some', require('../some'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sortBy', require('../sortBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sortedIndex', require('../sortedIndex'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sortedIndexBy', require('../sortedIndexBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sortedIndexOf', require('../sortedIndexOf'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sortedLastIndex', require('../sortedLastIndex'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sortedLastIndexBy', require('../sortedLastIndexBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sortedLastIndexOf', require('../sortedLastIndexOf'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sortedUniq', require('../sortedUniq'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sortedUniqBy', require('../sortedUniqBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('split', require('../split'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('spread', require('../spread'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('spreadFrom', require('../spread'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('startCase', require('../startCase'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('startsWith', require('../startsWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert');
module.exports = convert(require('../string'));
var convert = require('./convert'),
    func = convert('stubArray', require('../stubArray'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('stubFalse', require('../stubFalse'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('stubObject', require('../stubObject'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('stubString', require('../stubString'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('stubTrue', require('../stubTrue'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('subtract', require('../subtract'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sum', require('../sum'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('sumBy', require('../sumBy'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./xor');
module.exports = require('./xorBy');
module.exports = require('./xorWith');
module.exports = require('./stubTrue');
var convert = require('./convert'),
    func = convert('tail', require('../tail'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('take', require('../take'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./takeRight');
module.exports = require('./takeRightWhile');
var convert = require('./convert'),
    func = convert('takeRight', require('../takeRight'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('takeRightWhile', require('../takeRightWhile'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('takeWhile', require('../takeWhile'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('tap', require('../tap'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('template', require('../template'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('templateSettings', require('../templateSettings'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('throttle', require('../throttle'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('thru', require('../thru'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('times', require('../times'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toArray', require('../toArray'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toFinite', require('../toFinite'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toInteger', require('../toInteger'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toIterator', require('../toIterator'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toJSON', require('../toJSON'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toLength', require('../toLength'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toLower', require('../toLower'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toNumber', require('../toNumber'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toPairs', require('../toPairs'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toPairsIn', require('../toPairsIn'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toPath', require('../toPath'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toPlainObject', require('../toPlainObject'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toString', require('../toString'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('toUpper', require('../toUpper'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('transform', require('../transform'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('trim', require('../trim'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('trimChars', require('../trim'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('trimCharsEnd', require('../trimEnd'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('trimCharsStart', require('../trimStart'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('trimEnd', require('../trimEnd'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('trimStart', require('../trimStart'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('truncate', require('../truncate'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./rest');
var convert = require('./convert'),
    func = convert('unary', require('../unary'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('unescape', require('../unescape'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('union', require('../union'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('unionBy', require('../unionBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('unionWith', require('../unionWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('uniq', require('../uniq'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('uniqBy', require('../uniqBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('uniqueId', require('../uniqueId'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('uniqWith', require('../uniqWith'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./flatten');
var convert = require('./convert'),
    func = convert('unset', require('../unset'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('unzip', require('../unzip'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('unzipWith', require('../unzipWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('update', require('../update'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('updateWith', require('../updateWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('upperCase', require('../upperCase'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('upperFirst', require('../upperFirst'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./overArgs');
var convert = require('./convert');
module.exports = convert(require('../util'));
var convert = require('./convert'),
    func = convert('value', require('../value'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('valueOf', require('../valueOf'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('values', require('../values'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('valuesIn', require('../valuesIn'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./conformsTo');
module.exports = require('./isMatch');
var convert = require('./convert'),
    func = convert('without', require('../without'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('words', require('../words'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('wrap', require('../wrap'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('wrapperChain', require('../wrapperChain'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('wrapperReverse', require('../wrapperReverse'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('wrapperValue', require('../wrapperValue'), require('./_falseOptions'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('xor', require('../xor'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('xorBy', require('../xorBy'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('xorWith', require('../xorWith'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('zip', require('../zip'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('zipAll', require('../zip'));

func.placeholder = require('./placeholder');
module.exports = func;
module.exports = require('./zipObject');
var convert = require('./convert'),
    func = convert('zipObject', require('../zipObject'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('zipObjectDeep', require('../zipObjectDeep'));

func.placeholder = require('./placeholder');
module.exports = func;
var convert = require('./convert'),
    func = convert('zipWith', require('../zipWith'));

func.placeholder = require('./placeholder');
module.exports = func;
/**
 * The inverse of `_.toPairs`; this method returns an object composed
 * from key-value `pairs`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} pairs The key-value pairs.
 * @returns {Object} Returns the new object.
 * @example
 *
 * _.fromPairs([['a', 1], ['b', 2]]);
 * // => { 'a': 1, 'b': 2 }
 */
function fromPairs(pairs) {
  var index = -1,
      length = pairs == null ? 0 : pairs.length,
      result = {};

  while (++index < length) {
    var pair = pairs[index];
    result[pair[0]] = pair[1];
  }
  return result;
}

module.exports = fromPairs;
module.exports = {
  'after': require('./after'),
  'ary': require('./ary'),
  'before': require('./before'),
  'bind': require('./bind'),
  'bindKey': require('./bindKey'),
  'curry': require('./curry'),
  'curryRight': require('./curryRight'),
  'debounce': require('./debounce'),
  'defer': require('./defer'),
  'delay': require('./delay'),
  'flip': require('./flip'),
  'memoize': require('./memoize'),
  'negate': require('./negate'),
  'once': require('./once'),
  'overArgs': require('./overArgs'),
  'partial': require('./partial'),
  'partialRight': require('./partialRight'),
  'rearg': require('./rearg'),
  'rest': require('./rest'),
  'spread': require('./spread'),
  'throttle': require('./throttle'),
  'unary': require('./unary'),
  'wrap': require('./wrap')
};
var baseFunctions = require('./_baseFunctions'),
    keys = require('./keys');

/**
 * Creates an array of function property names from own enumerable properties
 * of `object`.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The object to inspect.
 * @returns {Array} Returns the function names.
 * @see _.functionsIn
 * @example
 *
 * function Foo() {
 *   this.a = _.constant('a');
 *   this.b = _.constant('b');
 * }
 *
 * Foo.prototype.c = _.constant('c');
 *
 * _.functions(new Foo);
 * // => ['a', 'b']
 */
function functions(object) {
  return object == null ? [] : baseFunctions(object, keys(object));
}

module.exports = functions;
var baseFunctions = require('./_baseFunctions'),
    keysIn = require('./keysIn');

/**
 * Creates an array of function property names from own and inherited
 * enumerable properties of `object`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Object
 * @param {Object} object The object to inspect.
 * @returns {Array} Returns the function names.
 * @see _.functions
 * @example
 *
 * function Foo() {
 *   this.a = _.constant('a');
 *   this.b = _.constant('b');
 * }
 *
 * Foo.prototype.c = _.constant('c');
 *
 * _.functionsIn(new Foo);
 * // => ['a', 'b', 'c']
 */
function functionsIn(object) {
  return object == null ? [] : baseFunctions(object, keysIn(object));
}

module.exports = functionsIn;
var baseGet = require('./_baseGet');

/**
 * Gets the value at `path` of `object`. If the resolved value is
 * `undefined`, the `defaultValue` is returned in its place.
 *
 * @static
 * @memberOf _
 * @since 3.7.0
 * @category Object
 * @param {Object} object The object to query.
 * @param {Array|string} path The path of the property to get.
 * @param {*} [defaultValue] The value returned for `undefined` resolved values.
 * @returns {*} Returns the resolved value.
 * @example
 *
 * var object = { 'a': [{ 'b': { 'c': 3 } }] };
 *
 * _.get(object, 'a[0].b.c');
 * // => 3
 *
 * _.get(object, ['a', '0', 'b', 'c']);
 * // => 3
 *
 * _.get(object, 'a.b.c', 'default');
 * // => 'default'
 */
function get(object, path, defaultValue) {
  var result = object == null ? undefined : baseGet(object, path);
  return result === undefined ? defaultValue : result;
}

module.exports = get;
var baseAssignValue = require('./_baseAssignValue'),
    createAggregator = require('./_createAggregator');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Creates an object composed of keys generated from the results of running
 * each element of `collection` thru `iteratee`. The order of grouped values
 * is determined by the order they occur in `collection`. The corresponding
 * value of each key is an array of elements responsible for generating the
 * key. The iteratee is invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
 * @returns {Object} Returns the composed aggregate object.
 * @example
 *
 * _.groupBy([6.1, 4.2, 6.3], Math.floor);
 * // => { '4': [4.2], '6': [6.1, 6.3] }
 *
 * // The `_.property` iteratee shorthand.
 * _.groupBy(['one', 'two', 'three'], 'length');
 * // => { '3': ['one', 'two'], '5': ['three'] }
 */
var groupBy = createAggregator(function(result, value, key) {
  if (hasOwnProperty.call(result, key)) {
    result[key].push(value);
  } else {
    baseAssignValue(result, key, [value]);
  }
});

module.exports = groupBy;
var baseGt = require('./_baseGt'),
    createRelationalOperation = require('./_createRelationalOperation');

/**
 * Checks if `value` is greater than `other`.
 *
 * @static
 * @memberOf _
 * @since 3.9.0
 * @category Lang
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if `value` is greater than `other`,
 *  else `false`.
 * @see _.lt
 * @example
 *
 * _.gt(3, 1);
 * // => true
 *
 * _.gt(3, 3);
 * // => false
 *
 * _.gt(1, 3);
 * // => false
 */
var gt = createRelationalOperation(baseGt);

module.exports = gt;
var createRelationalOperation = require('./_createRelationalOperation');

/**
 * Checks if `value` is greater than or equal to `other`.
 *
 * @static
 * @memberOf _
 * @since 3.9.0
 * @category Lang
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if `value` is greater than or equal to
 *  `other`, else `false`.
 * @see _.lte
 * @example
 *
 * _.gte(3, 1);
 * // => true
 *
 * _.gte(3, 3);
 * // => true
 *
 * _.gte(1, 3);
 * // => false
 */
var gte = createRelationalOperation(function(value, other) {
  return value >= other;
});

module.exports = gte;
var baseHas = require('./_baseHas'),
    hasPath = require('./_hasPath');

/**
 * Checks if `path` is a direct property of `object`.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The object to query.
 * @param {Array|string} path The path to check.
 * @returns {boolean} Returns `true` if `path` exists, else `false`.
 * @example
 *
 * var object = { 'a': { 'b': 2 } };
 * var other = _.create({ 'a': _.create({ 'b': 2 }) });
 *
 * _.has(object, 'a');
 * // => true
 *
 * _.has(object, 'a.b');
 * // => true
 *
 * _.has(object, ['a', 'b']);
 * // => true
 *
 * _.has(other, 'a');
 * // => false
 */
function has(object, path) {
  return object != null && hasPath(object, path, baseHas);
}

module.exports = has;
var baseHasIn = require('./_baseHasIn'),
    hasPath = require('./_hasPath');

/**
 * Checks if `path` is a direct or inherited property of `object`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Object
 * @param {Object} object The object to query.
 * @param {Array|string} path The path to check.
 * @returns {boolean} Returns `true` if `path` exists, else `false`.
 * @example
 *
 * var object = _.create({ 'a': _.create({ 'b': 2 }) });
 *
 * _.hasIn(object, 'a');
 * // => true
 *
 * _.hasIn(object, 'a.b');
 * // => true
 *
 * _.hasIn(object, ['a', 'b']);
 * // => true
 *
 * _.hasIn(object, 'b');
 * // => false
 */
function hasIn(object, path) {
  return object != null && hasPath(object, path, baseHasIn);
}

module.exports = hasIn;
/**
 * Gets the first element of `array`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @alias first
 * @category Array
 * @param {Array} array The array to query.
 * @returns {*} Returns the first element of `array`.
 * @example
 *
 * _.head([1, 2, 3]);
 * // => 1
 *
 * _.head([]);
 * // => undefined
 */
function head(array) {
  return (array && array.length) ? array[0] : undefined;
}

module.exports = head;
/**
 * This method returns the first argument it receives.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Util
 * @param {*} value Any value.
 * @returns {*} Returns `value`.
 * @example
 *
 * var object = { 'a': 1 };
 *
 * console.log(_.identity(object) === object);
 * // => true
 */
function identity(value) {
  return value;
}

module.exports = identity;
var baseIndexOf = require('./_baseIndexOf'),
    isArrayLike = require('./isArrayLike'),
    isString = require('./isString'),
    toInteger = require('./toInteger'),
    values = require('./values');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;

/**
 * Checks if `value` is in `collection`. If `collection` is a string, it's
 * checked for a substring of `value`, otherwise
 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * is used for equality comparisons. If `fromIndex` is negative, it's used as
 * the offset from the end of `collection`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object|string} collection The collection to inspect.
 * @param {*} value The value to search for.
 * @param {number} [fromIndex=0] The index to search from.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
 * @returns {boolean} Returns `true` if `value` is found, else `false`.
 * @example
 *
 * _.includes([1, 2, 3], 1);
 * // => true
 *
 * _.includes([1, 2, 3], 1, 2);
 * // => false
 *
 * _.includes({ 'a': 1, 'b': 2 }, 1);
 * // => true
 *
 * _.includes('abcd', 'bc');
 * // => true
 */
function includes(collection, value, fromIndex, guard) {
  collection = isArrayLike(collection) ? collection : values(collection);
  fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;

  var length = collection.length;
  if (fromIndex < 0) {
    fromIndex = nativeMax(length + fromIndex, 0);
  }
  return isString(collection)
    ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
    : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
}

module.exports = includes;
module.exports = require('./lodash');var baseIndexOf = require('./_baseIndexOf'),
    toInteger = require('./toInteger');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;

/**
 * Gets the index at which the first occurrence of `value` is found in `array`
 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * for equality comparisons. If `fromIndex` is negative, it's used as the
 * offset from the end of `array`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @param {number} [fromIndex=0] The index to search from.
 * @returns {number} Returns the index of the matched value, else `-1`.
 * @example
 *
 * _.indexOf([1, 2, 1, 2], 2);
 * // => 1
 *
 * // Search from the `fromIndex`.
 * _.indexOf([1, 2, 1, 2], 2, 2);
 * // => 3
 */
function indexOf(array, value, fromIndex) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return -1;
  }
  var index = fromIndex == null ? 0 : toInteger(fromIndex);
  if (index < 0) {
    index = nativeMax(length + index, 0);
  }
  return baseIndexOf(array, value, index);
}

module.exports = indexOf;
var baseSlice = require('./_baseSlice');

/**
 * Gets all but the last element of `array`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to query.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * _.initial([1, 2, 3]);
 * // => [1, 2]
 */
function initial(array) {
  var length = array == null ? 0 : array.length;
  return length ? baseSlice(array, 0, -1) : [];
}

module.exports = initial;
var baseInRange = require('./_baseInRange'),
    toFinite = require('./toFinite'),
    toNumber = require('./toNumber');

/**
 * Checks if `n` is between `start` and up to, but not including, `end`. If
 * `end` is not specified, it's set to `start` with `start` then set to `0`.
 * If `start` is greater than `end` the params are swapped to support
 * negative ranges.
 *
 * @static
 * @memberOf _
 * @since 3.3.0
 * @category Number
 * @param {number} number The number to check.
 * @param {number} [start=0] The start of the range.
 * @param {number} end The end of the range.
 * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
 * @see _.range, _.rangeRight
 * @example
 *
 * _.inRange(3, 2, 4);
 * // => true
 *
 * _.inRange(4, 8);
 * // => true
 *
 * _.inRange(4, 2);
 * // => false
 *
 * _.inRange(2, 2);
 * // => false
 *
 * _.inRange(1.2, 2);
 * // => true
 *
 * _.inRange(5.2, 4);
 * // => false
 *
 * _.inRange(-3, -2, -6);
 * // => true
 */
function inRange(number, start, end) {
  start = toFinite(start);
  if (end === undefined) {
    end = start;
    start = 0;
  } else {
    end = toFinite(end);
  }
  number = toNumber(number);
  return baseInRange(number, start, end);
}

module.exports = inRange;
var arrayMap = require('./_arrayMap'),
    baseIntersection = require('./_baseIntersection'),
    baseRest = require('./_baseRest'),
    castArrayLikeObject = require('./_castArrayLikeObject');

/**
 * Creates an array of unique values that are included in all given arrays
 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * for equality comparisons. The order and references of result values are
 * determined by the first array.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {...Array} [arrays] The arrays to inspect.
 * @returns {Array} Returns the new array of intersecting values.
 * @example
 *
 * _.intersection([2, 1], [2, 3]);
 * // => [2]
 */
var intersection = baseRest(function(arrays) {
  var mapped = arrayMap(arrays, castArrayLikeObject);
  return (mapped.length && mapped[0] === arrays[0])
    ? baseIntersection(mapped)
    : [];
});

module.exports = intersection;
var arrayMap = require('./_arrayMap'),
    baseIntersection = require('./_baseIntersection'),
    baseIteratee = require('./_baseIteratee'),
    baseRest = require('./_baseRest'),
    castArrayLikeObject = require('./_castArrayLikeObject'),
    last = require('./last');

/**
 * This method is like `_.intersection` except that it accepts `iteratee`
 * which is invoked for each element of each `arrays` to generate the criterion
 * by which they're compared. The order and references of result values are
 * determined by the first array. The iteratee is invoked with one argument:
 * (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {...Array} [arrays] The arrays to inspect.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {Array} Returns the new array of intersecting values.
 * @example
 *
 * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
 * // => [2.1]
 *
 * // The `_.property` iteratee shorthand.
 * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
 * // => [{ 'x': 1 }]
 */
var intersectionBy = baseRest(function(arrays) {
  var iteratee = last(arrays),
      mapped = arrayMap(arrays, castArrayLikeObject);

  if (iteratee === last(mapped)) {
    iteratee = undefined;
  } else {
    mapped.pop();
  }
  return (mapped.length && mapped[0] === arrays[0])
    ? baseIntersection(mapped, baseIteratee(iteratee, 2))
    : [];
});

module.exports = intersectionBy;
var arrayMap = require('./_arrayMap'),
    baseIntersection = require('./_baseIntersection'),
    baseRest = require('./_baseRest'),
    castArrayLikeObject = require('./_castArrayLikeObject'),
    last = require('./last');

/**
 * This method is like `_.intersection` except that it accepts `comparator`
 * which is invoked to compare elements of `arrays`. The order and references
 * of result values are determined by the first array. The comparator is
 * invoked with two arguments: (arrVal, othVal).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {...Array} [arrays] The arrays to inspect.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns the new array of intersecting values.
 * @example
 *
 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
 *
 * _.intersectionWith(objects, others, _.isEqual);
 * // => [{ 'x': 1, 'y': 2 }]
 */
var intersectionWith = baseRest(function(arrays) {
  var comparator = last(arrays),
      mapped = arrayMap(arrays, castArrayLikeObject);

  comparator = typeof comparator == 'function' ? comparator : undefined;
  if (comparator) {
    mapped.pop();
  }
  return (mapped.length && mapped[0] === arrays[0])
    ? baseIntersection(mapped, undefined, comparator)
    : [];
});

module.exports = intersectionWith;
var constant = require('./constant'),
    createInverter = require('./_createInverter'),
    identity = require('./identity');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString = objectProto.toString;

/**
 * Creates an object composed of the inverted keys and values of `object`.
 * If `object` contains duplicate values, subsequent values overwrite
 * property assignments of previous values.
 *
 * @static
 * @memberOf _
 * @since 0.7.0
 * @category Object
 * @param {Object} object The object to invert.
 * @returns {Object} Returns the new inverted object.
 * @example
 *
 * var object = { 'a': 1, 'b': 2, 'c': 1 };
 *
 * _.invert(object);
 * // => { '1': 'c', '2': 'b' }
 */
var invert = createInverter(function(result, value, key) {
  if (value != null &&
      typeof value.toString != 'function') {
    value = nativeObjectToString.call(value);
  }

  result[value] = key;
}, constant(identity));

module.exports = invert;
var baseIteratee = require('./_baseIteratee'),
    createInverter = require('./_createInverter');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Used to resolve the
 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
 * of values.
 */
var nativeObjectToString = objectProto.toString;

/**
 * This method is like `_.invert` except that the inverted object is generated
 * from the results of running each element of `object` thru `iteratee`. The
 * corresponding inverted value of each inverted key is an array of keys
 * responsible for generating the inverted value. The iteratee is invoked
 * with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 4.1.0
 * @category Object
 * @param {Object} object The object to invert.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {Object} Returns the new inverted object.
 * @example
 *
 * var object = { 'a': 1, 'b': 2, 'c': 1 };
 *
 * _.invertBy(object);
 * // => { '1': ['a', 'c'], '2': ['b'] }
 *
 * _.invertBy(object, function(value) {
 *   return 'group' + value;
 * });
 * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
 */
var invertBy = createInverter(function(result, value, key) {
  if (value != null &&
      typeof value.toString != 'function') {
    value = nativeObjectToString.call(value);
  }

  if (hasOwnProperty.call(result, value)) {
    result[value].push(key);
  } else {
    result[value] = [key];
  }
}, baseIteratee);

module.exports = invertBy;
var baseInvoke = require('./_baseInvoke'),
    baseRest = require('./_baseRest');

/**
 * Invokes the method at `path` of `object`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Object
 * @param {Object} object The object to query.
 * @param {Array|string} path The path of the method to invoke.
 * @param {...*} [args] The arguments to invoke the method with.
 * @returns {*} Returns the result of the invoked method.
 * @example
 *
 * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
 *
 * _.invoke(object, 'a[0].b.c.slice', 1, 3);
 * // => [2, 3]
 */
var invoke = baseRest(baseInvoke);

module.exports = invoke;
var apply = require('./_apply'),
    baseEach = require('./_baseEach'),
    baseInvoke = require('./_baseInvoke'),
    baseRest = require('./_baseRest'),
    isArrayLike = require('./isArrayLike');

/**
 * Invokes the method at `path` of each element in `collection`, returning
 * an array of the results of each invoked method. Any additional arguments
 * are provided to each invoked method. If `path` is a function, it's invoked
 * for, and `this` bound to, each element in `collection`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Array|Function|string} path The path of the method to invoke or
 *  the function invoked per iteration.
 * @param {...*} [args] The arguments to invoke each method with.
 * @returns {Array} Returns the array of results.
 * @example
 *
 * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
 * // => [[1, 5, 7], [1, 2, 3]]
 *
 * _.invokeMap([123, 456], String.prototype.split, '');
 * // => [['1', '2', '3'], ['4', '5', '6']]
 */
var invokeMap = baseRest(function(collection, path, args) {
  var index = -1,
      isFunc = typeof path == 'function',
      result = isArrayLike(collection) ? Array(collection.length) : [];

  baseEach(collection, function(value) {
    result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
  });
  return result;
});

module.exports = invokeMap;
var baseIsArguments = require('./_baseIsArguments'),
    isObjectLike = require('./isObjectLike');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/** Built-in value references. */
var propertyIsEnumerable = objectProto.propertyIsEnumerable;

/**
 * Checks if `value` is likely an `arguments` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an `arguments` object,
 *  else `false`.
 * @example
 *
 * _.isArguments(function() { return arguments; }());
 * // => true
 *
 * _.isArguments([1, 2, 3]);
 * // => false
 */
var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
    !propertyIsEnumerable.call(value, 'callee');
};

module.exports = isArguments;
/**
 * Checks if `value` is classified as an `Array` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
 * @example
 *
 * _.isArray([1, 2, 3]);
 * // => true
 *
 * _.isArray(document.body.children);
 * // => false
 *
 * _.isArray('abc');
 * // => false
 *
 * _.isArray(_.noop);
 * // => false
 */
var isArray = Array.isArray;

module.exports = isArray;
var baseIsArrayBuffer = require('./_baseIsArrayBuffer'),
    baseUnary = require('./_baseUnary'),
    nodeUtil = require('./_nodeUtil');

/* Node.js helper references. */
var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer;

/**
 * Checks if `value` is classified as an `ArrayBuffer` object.
 *
 * @static
 * @memberOf _
 * @since 4.3.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
 * @example
 *
 * _.isArrayBuffer(new ArrayBuffer(2));
 * // => true
 *
 * _.isArrayBuffer(new Array(2));
 * // => false
 */
var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;

module.exports = isArrayBuffer;
var isFunction = require('./isFunction'),
    isLength = require('./isLength');

/**
 * Checks if `value` is array-like. A value is considered array-like if it's
 * not a function and has a `value.length` that's an integer greater than or
 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
 * @example
 *
 * _.isArrayLike([1, 2, 3]);
 * // => true
 *
 * _.isArrayLike(document.body.children);
 * // => true
 *
 * _.isArrayLike('abc');
 * // => true
 *
 * _.isArrayLike(_.noop);
 * // => false
 */
function isArrayLike(value) {
  return value != null && isLength(value.length) && !isFunction(value);
}

module.exports = isArrayLike;
var isArrayLike = require('./isArrayLike'),
    isObjectLike = require('./isObjectLike');

/**
 * This method is like `_.isArrayLike` except that it also checks if `value`
 * is an object.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an array-like object,
 *  else `false`.
 * @example
 *
 * _.isArrayLikeObject([1, 2, 3]);
 * // => true
 *
 * _.isArrayLikeObject(document.body.children);
 * // => true
 *
 * _.isArrayLikeObject('abc');
 * // => false
 *
 * _.isArrayLikeObject(_.noop);
 * // => false
 */
function isArrayLikeObject(value) {
  return isObjectLike(value) && isArrayLike(value);
}

module.exports = isArrayLikeObject;
var baseGetTag = require('./_baseGetTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var boolTag = '[object Boolean]';

/**
 * Checks if `value` is classified as a boolean primitive or object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
 * @example
 *
 * _.isBoolean(false);
 * // => true
 *
 * _.isBoolean(null);
 * // => false
 */
function isBoolean(value) {
  return value === true || value === false ||
    (isObjectLike(value) && baseGetTag(value) == boolTag);
}

module.exports = isBoolean;
var root = require('./_root'),
    stubFalse = require('./stubFalse');

/** Detect free variable `exports`. */
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

/** Detect free variable `module`. */
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = freeModule && freeModule.exports === freeExports;

/** Built-in value references. */
var Buffer = moduleExports ? root.Buffer : undefined;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;

/**
 * Checks if `value` is a buffer.
 *
 * @static
 * @memberOf _
 * @since 4.3.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
 * @example
 *
 * _.isBuffer(new Buffer(2));
 * // => true
 *
 * _.isBuffer(new Uint8Array(2));
 * // => false
 */
var isBuffer = nativeIsBuffer || stubFalse;

module.exports = isBuffer;
var baseIsDate = require('./_baseIsDate'),
    baseUnary = require('./_baseUnary'),
    nodeUtil = require('./_nodeUtil');

/* Node.js helper references. */
var nodeIsDate = nodeUtil && nodeUtil.isDate;

/**
 * Checks if `value` is classified as a `Date` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
 * @example
 *
 * _.isDate(new Date);
 * // => true
 *
 * _.isDate('Mon April 23 2012');
 * // => false
 */
var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;

module.exports = isDate;
var isObjectLike = require('./isObjectLike'),
    isPlainObject = require('./isPlainObject');

/**
 * Checks if `value` is likely a DOM element.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
 * @example
 *
 * _.isElement(document.body);
 * // => true
 *
 * _.isElement('<body>');
 * // => false
 */
function isElement(value) {
  return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
}

module.exports = isElement;
var baseKeys = require('./_baseKeys'),
    getTag = require('./_getTag'),
    isArguments = require('./isArguments'),
    isArray = require('./isArray'),
    isArrayLike = require('./isArrayLike'),
    isBuffer = require('./isBuffer'),
    isPrototype = require('./_isPrototype'),
    isTypedArray = require('./isTypedArray');

/** `Object#toString` result references. */
var mapTag = '[object Map]',
    setTag = '[object Set]';

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Checks if `value` is an empty object, collection, map, or set.
 *
 * Objects are considered empty if they have no own enumerable string keyed
 * properties.
 *
 * Array-like values such as `arguments` objects, arrays, buffers, strings, or
 * jQuery-like collections are considered empty if they have a `length` of `0`.
 * Similarly, maps and sets are considered empty if they have a `size` of `0`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is empty, else `false`.
 * @example
 *
 * _.isEmpty(null);
 * // => true
 *
 * _.isEmpty(true);
 * // => true
 *
 * _.isEmpty(1);
 * // => true
 *
 * _.isEmpty([1, 2, 3]);
 * // => false
 *
 * _.isEmpty({ 'a': 1 });
 * // => false
 */
function isEmpty(value) {
  if (value == null) {
    return true;
  }
  if (isArrayLike(value) &&
      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
        isBuffer(value) || isTypedArray(value) || isArguments(value))) {
    return !value.length;
  }
  var tag = getTag(value);
  if (tag == mapTag || tag == setTag) {
    return !value.size;
  }
  if (isPrototype(value)) {
    return !baseKeys(value).length;
  }
  for (var key in value) {
    if (hasOwnProperty.call(value, key)) {
      return false;
    }
  }
  return true;
}

module.exports = isEmpty;
var baseIsEqual = require('./_baseIsEqual');

/**
 * Performs a deep comparison between two values to determine if they are
 * equivalent.
 *
 * **Note:** This method supports comparing arrays, array buffers, booleans,
 * date objects, error objects, maps, numbers, `Object` objects, regexes,
 * sets, strings, symbols, and typed arrays. `Object` objects are compared
 * by their own, not inherited, enumerable properties. Functions and DOM
 * nodes are compared by strict equality, i.e. `===`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
 * @example
 *
 * var object = { 'a': 1 };
 * var other = { 'a': 1 };
 *
 * _.isEqual(object, other);
 * // => true
 *
 * object === other;
 * // => false
 */
function isEqual(value, other) {
  return baseIsEqual(value, other);
}

module.exports = isEqual;
var baseIsEqual = require('./_baseIsEqual');

/**
 * This method is like `_.isEqual` except that it accepts `customizer` which
 * is invoked to compare values. If `customizer` returns `undefined`, comparisons
 * are handled by the method instead. The `customizer` is invoked with up to
 * six arguments: (objValue, othValue [, index|key, object, other, stack]).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @param {Function} [customizer] The function to customize comparisons.
 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
 * @example
 *
 * function isGreeting(value) {
 *   return /^h(?:i|ello)$/.test(value);
 * }
 *
 * function customizer(objValue, othValue) {
 *   if (isGreeting(objValue) && isGreeting(othValue)) {
 *     return true;
 *   }
 * }
 *
 * var array = ['hello', 'goodbye'];
 * var other = ['hi', 'goodbye'];
 *
 * _.isEqualWith(array, other, customizer);
 * // => true
 */
function isEqualWith(value, other, customizer) {
  customizer = typeof customizer == 'function' ? customizer : undefined;
  var result = customizer ? customizer(value, other) : undefined;
  return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
}

module.exports = isEqualWith;
var baseGetTag = require('./_baseGetTag'),
    isObjectLike = require('./isObjectLike'),
    isPlainObject = require('./isPlainObject');

/** `Object#toString` result references. */
var domExcTag = '[object DOMException]',
    errorTag = '[object Error]';

/**
 * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
 * `SyntaxError`, `TypeError`, or `URIError` object.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
 * @example
 *
 * _.isError(new Error);
 * // => true
 *
 * _.isError(Error);
 * // => false
 */
function isError(value) {
  if (!isObjectLike(value)) {
    return false;
  }
  var tag = baseGetTag(value);
  return tag == errorTag || tag == domExcTag ||
    (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
}

module.exports = isError;
var root = require('./_root');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeIsFinite = root.isFinite;

/**
 * Checks if `value` is a finite primitive number.
 *
 * **Note:** This method is based on
 * [`Number.isFinite`](https://mdn.io/Number/isFinite).
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
 * @example
 *
 * _.isFinite(3);
 * // => true
 *
 * _.isFinite(Number.MIN_VALUE);
 * // => true
 *
 * _.isFinite(Infinity);
 * // => false
 *
 * _.isFinite('3');
 * // => false
 */
function isFinite(value) {
  return typeof value == 'number' && nativeIsFinite(value);
}

module.exports = isFinite;
var baseGetTag = require('./_baseGetTag'),
    isObject = require('./isObject');

/** `Object#toString` result references. */
var asyncTag = '[object AsyncFunction]',
    funcTag = '[object Function]',
    genTag = '[object GeneratorFunction]',
    proxyTag = '[object Proxy]';

/**
 * Checks if `value` is classified as a `Function` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
 * @example
 *
 * _.isFunction(_);
 * // => true
 *
 * _.isFunction(/abc/);
 * // => false
 */
function isFunction(value) {
  if (!isObject(value)) {
    return false;
  }
  // The use of `Object#toString` avoids issues with the `typeof` operator
  // in Safari 9 which returns 'object' for typed arrays and other constructors.
  var tag = baseGetTag(value);
  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}

module.exports = isFunction;
var toInteger = require('./toInteger');

/**
 * Checks if `value` is an integer.
 *
 * **Note:** This method is based on
 * [`Number.isInteger`](https://mdn.io/Number/isInteger).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
 * @example
 *
 * _.isInteger(3);
 * // => true
 *
 * _.isInteger(Number.MIN_VALUE);
 * // => false
 *
 * _.isInteger(Infinity);
 * // => false
 *
 * _.isInteger('3');
 * // => false
 */
function isInteger(value) {
  return typeof value == 'number' && value == toInteger(value);
}

module.exports = isInteger;
/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/**
 * Checks if `value` is a valid array-like length.
 *
 * **Note:** This method is loosely based on
 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
 * @example
 *
 * _.isLength(3);
 * // => true
 *
 * _.isLength(Number.MIN_VALUE);
 * // => false
 *
 * _.isLength(Infinity);
 * // => false
 *
 * _.isLength('3');
 * // => false
 */
function isLength(value) {
  return typeof value == 'number' &&
    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}

module.exports = isLength;
var baseIsMap = require('./_baseIsMap'),
    baseUnary = require('./_baseUnary'),
    nodeUtil = require('./_nodeUtil');

/* Node.js helper references. */
var nodeIsMap = nodeUtil && nodeUtil.isMap;

/**
 * Checks if `value` is classified as a `Map` object.
 *
 * @static
 * @memberOf _
 * @since 4.3.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a map, else `false`.
 * @example
 *
 * _.isMap(new Map);
 * // => true
 *
 * _.isMap(new WeakMap);
 * // => false
 */
var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;

module.exports = isMap;
var baseIsMatch = require('./_baseIsMatch'),
    getMatchData = require('./_getMatchData');

/**
 * Performs a partial deep comparison between `object` and `source` to
 * determine if `object` contains equivalent property values.
 *
 * **Note:** This method is equivalent to `_.matches` when `source` is
 * partially applied.
 *
 * Partial comparisons will match empty array and empty object `source`
 * values against any array or object value, respectively. See `_.isEqual`
 * for a list of supported value comparisons.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Lang
 * @param {Object} object The object to inspect.
 * @param {Object} source The object of property values to match.
 * @returns {boolean} Returns `true` if `object` is a match, else `false`.
 * @example
 *
 * var object = { 'a': 1, 'b': 2 };
 *
 * _.isMatch(object, { 'b': 2 });
 * // => true
 *
 * _.isMatch(object, { 'b': 1 });
 * // => false
 */
function isMatch(object, source) {
  return object === source || baseIsMatch(object, source, getMatchData(source));
}

module.exports = isMatch;
var baseIsMatch = require('./_baseIsMatch'),
    getMatchData = require('./_getMatchData');

/**
 * This method is like `_.isMatch` except that it accepts `customizer` which
 * is invoked to compare values. If `customizer` returns `undefined`, comparisons
 * are handled by the method instead. The `customizer` is invoked with five
 * arguments: (objValue, srcValue, index|key, object, source).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {Object} object The object to inspect.
 * @param {Object} source The object of property values to match.
 * @param {Function} [customizer] The function to customize comparisons.
 * @returns {boolean} Returns `true` if `object` is a match, else `false`.
 * @example
 *
 * function isGreeting(value) {
 *   return /^h(?:i|ello)$/.test(value);
 * }
 *
 * function customizer(objValue, srcValue) {
 *   if (isGreeting(objValue) && isGreeting(srcValue)) {
 *     return true;
 *   }
 * }
 *
 * var object = { 'greeting': 'hello' };
 * var source = { 'greeting': 'hi' };
 *
 * _.isMatchWith(object, source, customizer);
 * // => true
 */
function isMatchWith(object, source, customizer) {
  customizer = typeof customizer == 'function' ? customizer : undefined;
  return baseIsMatch(object, source, getMatchData(source), customizer);
}

module.exports = isMatchWith;
var isNumber = require('./isNumber');

/**
 * Checks if `value` is `NaN`.
 *
 * **Note:** This method is based on
 * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
 * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
 * `undefined` and other non-number values.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
 * @example
 *
 * _.isNaN(NaN);
 * // => true
 *
 * _.isNaN(new Number(NaN));
 * // => true
 *
 * isNaN(undefined);
 * // => true
 *
 * _.isNaN(undefined);
 * // => false
 */
function isNaN(value) {
  // An `NaN` primitive is the only value that is not equal to itself.
  // Perform the `toStringTag` check first to avoid errors with some
  // ActiveX objects in IE.
  return isNumber(value) && value != +value;
}

module.exports = isNaN;
var baseIsNative = require('./_baseIsNative'),
    isMaskable = require('./_isMaskable');

/** Error message constants. */
var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.';

/**
 * Checks if `value` is a pristine native function.
 *
 * **Note:** This method can't reliably detect native functions in the presence
 * of the core-js package because core-js circumvents this kind of detection.
 * Despite multiple requests, the core-js maintainer has made it clear: any
 * attempt to fix the detection will be obstructed. As a result, we're left
 * with little choice but to throw an error. Unfortunately, this also affects
 * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
 * which rely on core-js.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a native function,
 *  else `false`.
 * @example
 *
 * _.isNative(Array.prototype.push);
 * // => true
 *
 * _.isNative(_);
 * // => false
 */
function isNative(value) {
  if (isMaskable(value)) {
    throw new Error(CORE_ERROR_TEXT);
  }
  return baseIsNative(value);
}

module.exports = isNative;
/**
 * Checks if `value` is `null` or `undefined`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
 * @example
 *
 * _.isNil(null);
 * // => true
 *
 * _.isNil(void 0);
 * // => true
 *
 * _.isNil(NaN);
 * // => false
 */
function isNil(value) {
  return value == null;
}

module.exports = isNil;
/**
 * Checks if `value` is `null`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
 * @example
 *
 * _.isNull(null);
 * // => true
 *
 * _.isNull(void 0);
 * // => false
 */
function isNull(value) {
  return value === null;
}

module.exports = isNull;
var baseGetTag = require('./_baseGetTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var numberTag = '[object Number]';

/**
 * Checks if `value` is classified as a `Number` primitive or object.
 *
 * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
 * classified as numbers, use the `_.isFinite` method.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a number, else `false`.
 * @example
 *
 * _.isNumber(3);
 * // => true
 *
 * _.isNumber(Number.MIN_VALUE);
 * // => true
 *
 * _.isNumber(Infinity);
 * // => true
 *
 * _.isNumber('3');
 * // => false
 */
function isNumber(value) {
  return typeof value == 'number' ||
    (isObjectLike(value) && baseGetTag(value) == numberTag);
}

module.exports = isNumber;
/**
 * Checks if `value` is the
 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
 * @example
 *
 * _.isObject({});
 * // => true
 *
 * _.isObject([1, 2, 3]);
 * // => true
 *
 * _.isObject(_.noop);
 * // => true
 *
 * _.isObject(null);
 * // => false
 */
function isObject(value) {
  var type = typeof value;
  return value != null && (type == 'object' || type == 'function');
}

module.exports = isObject;
/**
 * Checks if `value` is object-like. A value is object-like if it's not `null`
 * and has a `typeof` result of "object".
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
 * @example
 *
 * _.isObjectLike({});
 * // => true
 *
 * _.isObjectLike([1, 2, 3]);
 * // => true
 *
 * _.isObjectLike(_.noop);
 * // => false
 *
 * _.isObjectLike(null);
 * // => false
 */
function isObjectLike(value) {
  return value != null && typeof value == 'object';
}

module.exports = isObjectLike;
var baseGetTag = require('./_baseGetTag'),
    getPrototype = require('./_getPrototype'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var objectTag = '[object Object]';

/** Used for built-in method references. */
var funcProto = Function.prototype,
    objectProto = Object.prototype;

/** Used to resolve the decompiled source of functions. */
var funcToString = funcProto.toString;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/** Used to infer the `Object` constructor. */
var objectCtorString = funcToString.call(Object);

/**
 * Checks if `value` is a plain object, that is, an object created by the
 * `Object` constructor or one with a `[[Prototype]]` of `null`.
 *
 * @static
 * @memberOf _
 * @since 0.8.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 * }
 *
 * _.isPlainObject(new Foo);
 * // => false
 *
 * _.isPlainObject([1, 2, 3]);
 * // => false
 *
 * _.isPlainObject({ 'x': 0, 'y': 0 });
 * // => true
 *
 * _.isPlainObject(Object.create(null));
 * // => true
 */
function isPlainObject(value) {
  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
    return false;
  }
  var proto = getPrototype(value);
  if (proto === null) {
    return true;
  }
  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
  return typeof Ctor == 'function' && Ctor instanceof Ctor &&
    funcToString.call(Ctor) == objectCtorString;
}

module.exports = isPlainObject;
var baseIsRegExp = require('./_baseIsRegExp'),
    baseUnary = require('./_baseUnary'),
    nodeUtil = require('./_nodeUtil');

/* Node.js helper references. */
var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;

/**
 * Checks if `value` is classified as a `RegExp` object.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
 * @example
 *
 * _.isRegExp(/abc/);
 * // => true
 *
 * _.isRegExp('/abc/');
 * // => false
 */
var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;

module.exports = isRegExp;
var isInteger = require('./isInteger');

/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/**
 * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
 * double precision number which isn't the result of a rounded unsafe integer.
 *
 * **Note:** This method is based on
 * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
 * @example
 *
 * _.isSafeInteger(3);
 * // => true
 *
 * _.isSafeInteger(Number.MIN_VALUE);
 * // => false
 *
 * _.isSafeInteger(Infinity);
 * // => false
 *
 * _.isSafeInteger('3');
 * // => false
 */
function isSafeInteger(value) {
  return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
}

module.exports = isSafeInteger;
var baseIsSet = require('./_baseIsSet'),
    baseUnary = require('./_baseUnary'),
    nodeUtil = require('./_nodeUtil');

/* Node.js helper references. */
var nodeIsSet = nodeUtil && nodeUtil.isSet;

/**
 * Checks if `value` is classified as a `Set` object.
 *
 * @static
 * @memberOf _
 * @since 4.3.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a set, else `false`.
 * @example
 *
 * _.isSet(new Set);
 * // => true
 *
 * _.isSet(new WeakSet);
 * // => false
 */
var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;

module.exports = isSet;
var baseGetTag = require('./_baseGetTag'),
    isArray = require('./isArray'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var stringTag = '[object String]';

/**
 * Checks if `value` is classified as a `String` primitive or object.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a string, else `false`.
 * @example
 *
 * _.isString('abc');
 * // => true
 *
 * _.isString(1);
 * // => false
 */
function isString(value) {
  return typeof value == 'string' ||
    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
}

module.exports = isString;
var baseGetTag = require('./_baseGetTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var symbolTag = '[object Symbol]';

/**
 * Checks if `value` is classified as a `Symbol` primitive or object.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
 * @example
 *
 * _.isSymbol(Symbol.iterator);
 * // => true
 *
 * _.isSymbol('abc');
 * // => false
 */
function isSymbol(value) {
  return typeof value == 'symbol' ||
    (isObjectLike(value) && baseGetTag(value) == symbolTag);
}

module.exports = isSymbol;
var baseIsTypedArray = require('./_baseIsTypedArray'),
    baseUnary = require('./_baseUnary'),
    nodeUtil = require('./_nodeUtil');

/* Node.js helper references. */
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

/**
 * Checks if `value` is classified as a typed array.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
 * @example
 *
 * _.isTypedArray(new Uint8Array);
 * // => true
 *
 * _.isTypedArray([]);
 * // => false
 */
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

module.exports = isTypedArray;
/**
 * Checks if `value` is `undefined`.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
 * @example
 *
 * _.isUndefined(void 0);
 * // => true
 *
 * _.isUndefined(null);
 * // => false
 */
function isUndefined(value) {
  return value === undefined;
}

module.exports = isUndefined;
var getTag = require('./_getTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var weakMapTag = '[object WeakMap]';

/**
 * Checks if `value` is classified as a `WeakMap` object.
 *
 * @static
 * @memberOf _
 * @since 4.3.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
 * @example
 *
 * _.isWeakMap(new WeakMap);
 * // => true
 *
 * _.isWeakMap(new Map);
 * // => false
 */
function isWeakMap(value) {
  return isObjectLike(value) && getTag(value) == weakMapTag;
}

module.exports = isWeakMap;
var baseGetTag = require('./_baseGetTag'),
    isObjectLike = require('./isObjectLike');

/** `Object#toString` result references. */
var weakSetTag = '[object WeakSet]';

/**
 * Checks if `value` is classified as a `WeakSet` object.
 *
 * @static
 * @memberOf _
 * @since 4.3.0
 * @category Lang
 * @param {*} value The value to check.
 * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
 * @example
 *
 * _.isWeakSet(new WeakSet);
 * // => true
 *
 * _.isWeakSet(new Set);
 * // => false
 */
function isWeakSet(value) {
  return isObjectLike(value) && baseGetTag(value) == weakSetTag;
}

module.exports = isWeakSet;
var baseClone = require('./_baseClone'),
    baseIteratee = require('./_baseIteratee');

/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1;

/**
 * Creates a function that invokes `func` with the arguments of the created
 * function. If `func` is a property name, the created function returns the
 * property value for a given element. If `func` is an array or object, the
 * created function returns `true` for elements that contain the equivalent
 * source properties, otherwise it returns `false`.
 *
 * @static
 * @since 4.0.0
 * @memberOf _
 * @category Util
 * @param {*} [func=_.identity] The value to convert to a callback.
 * @returns {Function} Returns the callback.
 * @example
 *
 * var users = [
 *   { 'user': 'barney', 'age': 36, 'active': true },
 *   { 'user': 'fred',   'age': 40, 'active': false }
 * ];
 *
 * // The `_.matches` iteratee shorthand.
 * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
 * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.filter(users, _.iteratee(['user', 'fred']));
 * // => [{ 'user': 'fred', 'age': 40 }]
 *
 * // The `_.property` iteratee shorthand.
 * _.map(users, _.iteratee('user'));
 * // => ['barney', 'fred']
 *
 * // Create custom iteratee shorthands.
 * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
 *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
 *     return func.test(string);
 *   };
 * });
 *
 * _.filter(['abc', 'def'], /ef/);
 * // => ['def']
 */
function iteratee(func) {
  return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
}

module.exports = iteratee;
/** Used for built-in method references. */
var arrayProto = Array.prototype;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeJoin = arrayProto.join;

/**
 * Converts all elements in `array` into a string separated by `separator`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to convert.
 * @param {string} [separator=','] The element separator.
 * @returns {string} Returns the joined string.
 * @example
 *
 * _.join(['a', 'b', 'c'], '~');
 * // => 'a~b~c'
 */
function join(array, separator) {
  return array == null ? '' : nativeJoin.call(array, separator);
}

module.exports = join;
var createCompounder = require('./_createCompounder');

/**
 * Converts `string` to
 * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the kebab cased string.
 * @example
 *
 * _.kebabCase('Foo Bar');
 * // => 'foo-bar'
 *
 * _.kebabCase('fooBar');
 * // => 'foo-bar'
 *
 * _.kebabCase('__FOO_BAR__');
 * // => 'foo-bar'
 */
var kebabCase = createCompounder(function(result, word, index) {
  return result + (index ? '-' : '') + word.toLowerCase();
});

module.exports = kebabCase;
var baseAssignValue = require('./_baseAssignValue'),
    createAggregator = require('./_createAggregator');

/**
 * Creates an object composed of keys generated from the results of running
 * each element of `collection` thru `iteratee`. The corresponding value of
 * each key is the last element responsible for generating the key. The
 * iteratee is invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
 * @returns {Object} Returns the composed aggregate object.
 * @example
 *
 * var array = [
 *   { 'dir': 'left', 'code': 97 },
 *   { 'dir': 'right', 'code': 100 }
 * ];
 *
 * _.keyBy(array, function(o) {
 *   return String.fromCharCode(o.code);
 * });
 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
 *
 * _.keyBy(array, 'dir');
 * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
 */
var keyBy = createAggregator(function(result, value, key) {
  baseAssignValue(result, key, value);
});

module.exports = keyBy;
var arrayLikeKeys = require('./_arrayLikeKeys'),
    baseKeys = require('./_baseKeys'),
    isArrayLike = require('./isArrayLike');

/**
 * Creates an array of the own enumerable property names of `object`.
 *
 * **Note:** Non-object values are coerced to objects. See the
 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
 * for more details.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.keys(new Foo);
 * // => ['a', 'b'] (iteration order is not guaranteed)
 *
 * _.keys('hi');
 * // => ['0', '1']
 */
function keys(object) {
  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}

module.exports = keys;
var arrayLikeKeys = require('./_arrayLikeKeys'),
    baseKeysIn = require('./_baseKeysIn'),
    isArrayLike = require('./isArrayLike');

/**
 * Creates an array of the own and inherited enumerable property names of `object`.
 *
 * **Note:** Non-object values are coerced to objects.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property names.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.keysIn(new Foo);
 * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
 */
function keysIn(object) {
  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
}

module.exports = keysIn;
module.exports = {
  'castArray': require('./castArray'),
  'clone': require('./clone'),
  'cloneDeep': require('./cloneDeep'),
  'cloneDeepWith': require('./cloneDeepWith'),
  'cloneWith': require('./cloneWith'),
  'conformsTo': require('./conformsTo'),
  'eq': require('./eq'),
  'gt': require('./gt'),
  'gte': require('./gte'),
  'isArguments': require('./isArguments'),
  'isArray': require('./isArray'),
  'isArrayBuffer': require('./isArrayBuffer'),
  'isArrayLike': require('./isArrayLike'),
  'isArrayLikeObject': require('./isArrayLikeObject'),
  'isBoolean': require('./isBoolean'),
  'isBuffer': require('./isBuffer'),
  'isDate': require('./isDate'),
  'isElement': require('./isElement'),
  'isEmpty': require('./isEmpty'),
  'isEqual': require('./isEqual'),
  'isEqualWith': require('./isEqualWith'),
  'isError': require('./isError'),
  'isFinite': require('./isFinite'),
  'isFunction': require('./isFunction'),
  'isInteger': require('./isInteger'),
  'isLength': require('./isLength'),
  'isMap': require('./isMap'),
  'isMatch': require('./isMatch'),
  'isMatchWith': require('./isMatchWith'),
  'isNaN': require('./isNaN'),
  'isNative': require('./isNative'),
  'isNil': require('./isNil'),
  'isNull': require('./isNull'),
  'isNumber': require('./isNumber'),
  'isObject': require('./isObject'),
  'isObjectLike': require('./isObjectLike'),
  'isPlainObject': require('./isPlainObject'),
  'isRegExp': require('./isRegExp'),
  'isSafeInteger': require('./isSafeInteger'),
  'isSet': require('./isSet'),
  'isString': require('./isString'),
  'isSymbol': require('./isSymbol'),
  'isTypedArray': require('./isTypedArray'),
  'isUndefined': require('./isUndefined'),
  'isWeakMap': require('./isWeakMap'),
  'isWeakSet': require('./isWeakSet'),
  'lt': require('./lt'),
  'lte': require('./lte'),
  'toArray': require('./toArray'),
  'toFinite': require('./toFinite'),
  'toInteger': require('./toInteger'),
  'toLength': require('./toLength'),
  'toNumber': require('./toNumber'),
  'toPlainObject': require('./toPlainObject'),
  'toSafeInteger': require('./toSafeInteger'),
  'toString': require('./toString')
};
/**
 * Gets the last element of `array`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to query.
 * @returns {*} Returns the last element of `array`.
 * @example
 *
 * _.last([1, 2, 3]);
 * // => 3
 */
function last(array) {
  var length = array == null ? 0 : array.length;
  return length ? array[length - 1] : undefined;
}

module.exports = last;
var baseFindIndex = require('./_baseFindIndex'),
    baseIsNaN = require('./_baseIsNaN'),
    strictLastIndexOf = require('./_strictLastIndexOf'),
    toInteger = require('./toInteger');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max,
    nativeMin = Math.min;

/**
 * This method is like `_.indexOf` except that it iterates over elements of
 * `array` from right to left.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @param {number} [fromIndex=array.length-1] The index to search from.
 * @returns {number} Returns the index of the matched value, else `-1`.
 * @example
 *
 * _.lastIndexOf([1, 2, 1, 2], 2);
 * // => 3
 *
 * // Search from the `fromIndex`.
 * _.lastIndexOf([1, 2, 1, 2], 2, 2);
 * // => 1
 */
function lastIndexOf(array, value, fromIndex) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return -1;
  }
  var index = length;
  if (fromIndex !== undefined) {
    index = toInteger(fromIndex);
    index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
  }
  return value === value
    ? strictLastIndexOf(array, value, index)
    : baseFindIndex(array, baseIsNaN, index, true);
}

module.exports = lastIndexOf;
Copyright OpenJS Foundation and other contributors <https://openjsf.org/>

Based on Underscore.js, copyright Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>

This software consists of voluntary contributions made by many
individuals. For exact contribution history, see the revision history
available at https://github.com/lodash/lodash

The following license applies to all parts of this software except as
documented below:

====

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

====

Copyright and related rights for sample code are waived via CC0. Sample
code is defined as all source code displayed within the prose of the
documentation.

CC0: http://creativecommons.org/publicdomain/zero/1.0/

====

Files located in the node_modules and vendor directories are externally
maintained libraries used by this software which have their own
licenses; we recommend you read them, as their terms may differ from the
terms above.
/**
 * @license
 * Lodash <https://lodash.com/>
 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */
;(function() {

  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  var undefined;

  /** Used as the semantic version number. */
  var VERSION = '4.17.21';

  /** Used as the size to enable large array optimizations. */
  var LARGE_ARRAY_SIZE = 200;

  /** Error message constants. */
  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
      FUNC_ERROR_TEXT = 'Expected a function',
      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';

  /** Used to stand-in for `undefined` hash values. */
  var HASH_UNDEFINED = '__lodash_hash_undefined__';

  /** Used as the maximum memoize cache size. */
  var MAX_MEMOIZE_SIZE = 500;

  /** Used as the internal argument placeholder. */
  var PLACEHOLDER = '__lodash_placeholder__';

  /** Used to compose bitmasks for cloning. */
  var CLONE_DEEP_FLAG = 1,
      CLONE_FLAT_FLAG = 2,
      CLONE_SYMBOLS_FLAG = 4;

  /** Used to compose bitmasks for value comparisons. */
  var COMPARE_PARTIAL_FLAG = 1,
      COMPARE_UNORDERED_FLAG = 2;

  /** Used to compose bitmasks for function metadata. */
  var WRAP_BIND_FLAG = 1,
      WRAP_BIND_KEY_FLAG = 2,
      WRAP_CURRY_BOUND_FLAG = 4,
      WRAP_CURRY_FLAG = 8,
      WRAP_CURRY_RIGHT_FLAG = 16,
      WRAP_PARTIAL_FLAG = 32,
      WRAP_PARTIAL_RIGHT_FLAG = 64,
      WRAP_ARY_FLAG = 128,
      WRAP_REARG_FLAG = 256,
      WRAP_FLIP_FLAG = 512;

  /** Used as default options for `_.truncate`. */
  var DEFAULT_TRUNC_LENGTH = 30,
      DEFAULT_TRUNC_OMISSION = '...';

  /** Used to detect hot functions by number of calls within a span of milliseconds. */
  var HOT_COUNT = 800,
      HOT_SPAN = 16;

  /** Used to indicate the type of lazy iteratees. */
  var LAZY_FILTER_FLAG = 1,
      LAZY_MAP_FLAG = 2,
      LAZY_WHILE_FLAG = 3;

  /** Used as references for various `Number` constants. */
  var INFINITY = 1 / 0,
      MAX_SAFE_INTEGER = 9007199254740991,
      MAX_INTEGER = 1.7976931348623157e+308,
      NAN = 0 / 0;

  /** Used as references for the maximum length and index of an array. */
  var MAX_ARRAY_LENGTH = 4294967295,
      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;

  /** Used to associate wrap methods with their bit flags. */
  var wrapFlags = [
    ['ary', WRAP_ARY_FLAG],
    ['bind', WRAP_BIND_FLAG],
    ['bindKey', WRAP_BIND_KEY_FLAG],
    ['curry', WRAP_CURRY_FLAG],
    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
    ['flip', WRAP_FLIP_FLAG],
    ['partial', WRAP_PARTIAL_FLAG],
    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
    ['rearg', WRAP_REARG_FLAG]
  ];

  /** `Object#toString` result references. */
  var argsTag = '[object Arguments]',
      arrayTag = '[object Array]',
      asyncTag = '[object AsyncFunction]',
      boolTag = '[object Boolean]',
      dateTag = '[object Date]',
      domExcTag = '[object DOMException]',
      errorTag = '[object Error]',
      funcTag = '[object Function]',
      genTag = '[object GeneratorFunction]',
      mapTag = '[object Map]',
      numberTag = '[object Number]',
      nullTag = '[object Null]',
      objectTag = '[object Object]',
      promiseTag = '[object Promise]',
      proxyTag = '[object Proxy]',
      regexpTag = '[object RegExp]',
      setTag = '[object Set]',
      stringTag = '[object String]',
      symbolTag = '[object Symbol]',
      undefinedTag = '[object Undefined]',
      weakMapTag = '[object WeakMap]',
      weakSetTag = '[object WeakSet]';

  var arrayBufferTag = '[object ArrayBuffer]',
      dataViewTag = '[object DataView]',
      float32Tag = '[object Float32Array]',
      float64Tag = '[object Float64Array]',
      int8Tag = '[object Int8Array]',
      int16Tag = '[object Int16Array]',
      int32Tag = '[object Int32Array]',
      uint8Tag = '[object Uint8Array]',
      uint8ClampedTag = '[object Uint8ClampedArray]',
      uint16Tag = '[object Uint16Array]',
      uint32Tag = '[object Uint32Array]';

  /** Used to match empty string literals in compiled template source. */
  var reEmptyStringLeading = /\b__p \+= '';/g,
      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;

  /** Used to match HTML entities and HTML characters. */
  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
      reUnescapedHtml = /[&<>"']/g,
      reHasEscapedHtml = RegExp(reEscapedHtml.source),
      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);

  /** Used to match template delimiters. */
  var reEscape = /<%-([\s\S]+?)%>/g,
      reEvaluate = /<%([\s\S]+?)%>/g,
      reInterpolate = /<%=([\s\S]+?)%>/g;

  /** Used to match property names within property paths. */
  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
      reIsPlainProp = /^\w*$/,
      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;

  /**
   * Used to match `RegExp`
   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
   */
  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
      reHasRegExpChar = RegExp(reRegExpChar.source);

  /** Used to match leading whitespace. */
  var reTrimStart = /^\s+/;

  /** Used to match a single whitespace character. */
  var reWhitespace = /\s/;

  /** Used to match wrap detail comments. */
  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
      reSplitDetails = /,? & /;

  /** Used to match words composed of alphanumeric characters. */
  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;

  /**
   * Used to validate the `validate` option in `_.template` variable.
   *
   * Forbids characters which could potentially change the meaning of the function argument definition:
   * - "()," (modification of function parameters)
   * - "=" (default value)
   * - "[]{}" (destructuring of function parameters)
   * - "/" (beginning of a comment)
   * - whitespace
   */
  var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;

  /** Used to match backslashes in property paths. */
  var reEscapeChar = /\\(\\)?/g;

  /**
   * Used to match
   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
   */
  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;

  /** Used to match `RegExp` flags from their coerced string values. */
  var reFlags = /\w*$/;

  /** Used to detect bad signed hexadecimal string values. */
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

  /** Used to detect binary string values. */
  var reIsBinary = /^0b[01]+$/i;

  /** Used to detect host constructors (Safari). */
  var reIsHostCtor = /^\[object .+?Constructor\]$/;

  /** Used to detect octal string values. */
  var reIsOctal = /^0o[0-7]+$/i;

  /** Used to detect unsigned integer values. */
  var reIsUint = /^(?:0|[1-9]\d*)$/;

  /** Used to match Latin Unicode letters (excluding mathematical operators). */
  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;

  /** Used to ensure capturing order of template delimiters. */
  var reNoMatch = /($^)/;

  /** Used to match unescaped characters in compiled string literals. */
  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;

  /** Used to compose unicode character classes. */
  var rsAstralRange = '\\ud800-\\udfff',
      rsComboMarksRange = '\\u0300-\\u036f',
      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
      rsComboSymbolsRange = '\\u20d0-\\u20ff',
      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
      rsDingbatRange = '\\u2700-\\u27bf',
      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
      rsPunctuationRange = '\\u2000-\\u206f',
      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
      rsVarRange = '\\ufe0e\\ufe0f',
      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;

  /** Used to compose unicode capture groups. */
  var rsApos = "['\u2019]",
      rsAstral = '[' + rsAstralRange + ']',
      rsBreak = '[' + rsBreakRange + ']',
      rsCombo = '[' + rsComboRange + ']',
      rsDigits = '\\d+',
      rsDingbat = '[' + rsDingbatRange + ']',
      rsLower = '[' + rsLowerRange + ']',
      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
      rsFitz = '\\ud83c[\\udffb-\\udfff]',
      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
      rsNonAstral = '[^' + rsAstralRange + ']',
      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
      rsUpper = '[' + rsUpperRange + ']',
      rsZWJ = '\\u200d';

  /** Used to compose unicode regexes. */
  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
      reOptMod = rsModifier + '?',
      rsOptVar = '[' + rsVarRange + ']?',
      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
      rsSeq = rsOptVar + reOptMod + rsOptJoin,
      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

  /** Used to match apostrophes. */
  var reApos = RegExp(rsApos, 'g');

  /**
   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
   */
  var reComboMark = RegExp(rsCombo, 'g');

  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

  /** Used to match complex or compound words. */
  var reUnicodeWord = RegExp([
    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
    rsUpper + '+' + rsOptContrUpper,
    rsOrdUpper,
    rsOrdLower,
    rsDigits,
    rsEmoji
  ].join('|'), 'g');

  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');

  /** Used to detect strings that need a more robust regexp to match words. */
  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;

  /** Used to assign default `context` object properties. */
  var contextProps = [
    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
  ];

  /** Used to make template sourceURLs easier to identify. */
  var templateCounter = -1;

  /** Used to identify `toStringTag` values of typed arrays. */
  var typedArrayTags = {};
  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  typedArrayTags[uint32Tag] = true;
  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
  typedArrayTags[setTag] = typedArrayTags[stringTag] =
  typedArrayTags[weakMapTag] = false;

  /** Used to identify `toStringTag` values supported by `_.clone`. */
  var cloneableTags = {};
  cloneableTags[argsTag] = cloneableTags[arrayTag] =
  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
  cloneableTags[boolTag] = cloneableTags[dateTag] =
  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
  cloneableTags[int32Tag] = cloneableTags[mapTag] =
  cloneableTags[numberTag] = cloneableTags[objectTag] =
  cloneableTags[regexpTag] = cloneableTags[setTag] =
  cloneableTags[stringTag] = cloneableTags[symbolTag] =
  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  cloneableTags[errorTag] = cloneableTags[funcTag] =
  cloneableTags[weakMapTag] = false;

  /** Used to map Latin Unicode letters to basic Latin letters. */
  var deburredLetters = {
    // Latin-1 Supplement block.
    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
    '\xc7': 'C',  '\xe7': 'c',
    '\xd0': 'D',  '\xf0': 'd',
    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
    '\xd1': 'N',  '\xf1': 'n',
    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
    '\xc6': 'Ae', '\xe6': 'ae',
    '\xde': 'Th', '\xfe': 'th',
    '\xdf': 'ss',
    // Latin Extended-A block.
    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
    '\u0134': 'J',  '\u0135': 'j',
    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
    '\u0174': 'W',  '\u0175': 'w',
    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
    '\u0132': 'IJ', '\u0133': 'ij',
    '\u0152': 'Oe', '\u0153': 'oe',
    '\u0149': "'n", '\u017f': 's'
  };

  /** Used to map characters to HTML entities. */
  var htmlEscapes = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#39;'
  };

  /** Used to map HTML entities to characters. */
  var htmlUnescapes = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&#39;': "'"
  };

  /** Used to escape characters for inclusion in compiled string literals. */
  var stringEscapes = {
    '\\': '\\',
    "'": "'",
    '\n': 'n',
    '\r': 'r',
    '\u2028': 'u2028',
    '\u2029': 'u2029'
  };

  /** Built-in method references without a dependency on `root`. */
  var freeParseFloat = parseFloat,
      freeParseInt = parseInt;

  /** Detect free variable `global` from Node.js. */
  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

  /** Detect free variable `self`. */
  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

  /** Used as a reference to the global object. */
  var root = freeGlobal || freeSelf || Function('return this')();

  /** Detect free variable `exports`. */
  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;

  /** Detect free variable `module`. */
  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;

  /** Detect the popular CommonJS extension `module.exports`. */
  var moduleExports = freeModule && freeModule.exports === freeExports;

  /** Detect free variable `process` from Node.js. */
  var freeProcess = moduleExports && freeGlobal.process;

  /** Used to access faster Node.js helpers. */
  var nodeUtil = (function() {
    try {
      // Use `util.types` for Node.js 10+.
      var types = freeModule && freeModule.require && freeModule.require('util').types;

      if (types) {
        return types;
      }

      // Legacy `process.binding('util')` for Node.js < 10.
      return freeProcess && freeProcess.binding && freeProcess.binding('util');
    } catch (e) {}
  }());

  /* Node.js helper references. */
  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
      nodeIsDate = nodeUtil && nodeUtil.isDate,
      nodeIsMap = nodeUtil && nodeUtil.isMap,
      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
      nodeIsSet = nodeUtil && nodeUtil.isSet,
      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

  /*--------------------------------------------------------------------------*/

  /**
   * A faster alternative to `Function#apply`, this function invokes `func`
   * with the `this` binding of `thisArg` and the arguments of `args`.
   *
   * @private
   * @param {Function} func The function to invoke.
   * @param {*} thisArg The `this` binding of `func`.
   * @param {Array} args The arguments to invoke `func` with.
   * @returns {*} Returns the result of `func`.
   */
  function apply(func, thisArg, args) {
    switch (args.length) {
      case 0: return func.call(thisArg);
      case 1: return func.call(thisArg, args[0]);
      case 2: return func.call(thisArg, args[0], args[1]);
      case 3: return func.call(thisArg, args[0], args[1], args[2]);
    }
    return func.apply(thisArg, args);
  }

  /**
   * A specialized version of `baseAggregator` for arrays.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} setter The function to set `accumulator` values.
   * @param {Function} iteratee The iteratee to transform keys.
   * @param {Object} accumulator The initial aggregated object.
   * @returns {Function} Returns `accumulator`.
   */
  function arrayAggregator(array, setter, iteratee, accumulator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      var value = array[index];
      setter(accumulator, value, iteratee(value), array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.forEach` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEach(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (iteratee(array[index], index, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.forEachRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEachRight(array, iteratee) {
    var length = array == null ? 0 : array.length;

    while (length--) {
      if (iteratee(array[length], length, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.every` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if all elements pass the predicate check,
   *  else `false`.
   */
  function arrayEvery(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (!predicate(array[index], index, array)) {
        return false;
      }
    }
    return true;
  }

  /**
   * A specialized version of `_.filter` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {Array} Returns the new filtered array.
   */
  function arrayFilter(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (predicate(value, index, array)) {
        result[resIndex++] = value;
      }
    }
    return result;
  }

  /**
   * A specialized version of `_.includes` for arrays without support for
   * specifying an index to search from.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludes(array, value) {
    var length = array == null ? 0 : array.length;
    return !!length && baseIndexOf(array, value, 0) > -1;
  }

  /**
   * This function is like `arrayIncludes` except that it accepts a comparator.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludesWith(array, value, comparator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (comparator(value, array[index])) {
        return true;
      }
    }
    return false;
  }

  /**
   * A specialized version of `_.map` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the new mapped array.
   */
  function arrayMap(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length,
        result = Array(length);

    while (++index < length) {
      result[index] = iteratee(array[index], index, array);
    }
    return result;
  }

  /**
   * Appends the elements of `values` to `array`.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {Array} values The values to append.
   * @returns {Array} Returns `array`.
   */
  function arrayPush(array, values) {
    var index = -1,
        length = values.length,
        offset = array.length;

    while (++index < length) {
      array[offset + index] = values[index];
    }
    return array;
  }

  /**
   * A specialized version of `_.reduce` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the first element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduce(array, iteratee, accumulator, initAccum) {
    var index = -1,
        length = array == null ? 0 : array.length;

    if (initAccum && length) {
      accumulator = array[++index];
    }
    while (++index < length) {
      accumulator = iteratee(accumulator, array[index], index, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.reduceRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the last element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
    var length = array == null ? 0 : array.length;
    if (initAccum && length) {
      accumulator = array[--length];
    }
    while (length--) {
      accumulator = iteratee(accumulator, array[length], length, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.some` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if any element passes the predicate check,
   *  else `false`.
   */
  function arraySome(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (predicate(array[index], index, array)) {
        return true;
      }
    }
    return false;
  }

  /**
   * Gets the size of an ASCII `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  var asciiSize = baseProperty('length');

  /**
   * Converts an ASCII `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function asciiToArray(string) {
    return string.split('');
  }

  /**
   * Splits an ASCII `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function asciiWords(string) {
    return string.match(reAsciiWord) || [];
  }

  /**
   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
   * without support for iteratee shorthands, which iterates over `collection`
   * using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the found element or its key, else `undefined`.
   */
  function baseFindKey(collection, predicate, eachFunc) {
    var result;
    eachFunc(collection, function(value, key, collection) {
      if (predicate(value, key, collection)) {
        result = key;
        return false;
      }
    });
    return result;
  }

  /**
   * The base implementation of `_.findIndex` and `_.findLastIndex` without
   * support for iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {number} fromIndex The index to search from.
   * @param {boolean} [fromRight] Specify iterating from right to left.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
    var length = array.length,
        index = fromIndex + (fromRight ? 1 : -1);

    while ((fromRight ? index-- : ++index < length)) {
      if (predicate(array[index], index, array)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOf(array, value, fromIndex) {
    return value === value
      ? strictIndexOf(array, value, fromIndex)
      : baseFindIndex(array, baseIsNaN, fromIndex);
  }

  /**
   * This function is like `baseIndexOf` except that it accepts a comparator.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOfWith(array, value, fromIndex, comparator) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (comparator(array[index], value)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.isNaN` without support for number objects.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
   */
  function baseIsNaN(value) {
    return value !== value;
  }

  /**
   * The base implementation of `_.mean` and `_.meanBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the mean.
   */
  function baseMean(array, iteratee) {
    var length = array == null ? 0 : array.length;
    return length ? (baseSum(array, iteratee) / length) : NAN;
  }

  /**
   * The base implementation of `_.property` without support for deep paths.
   *
   * @private
   * @param {string} key The key of the property to get.
   * @returns {Function} Returns the new accessor function.
   */
  function baseProperty(key) {
    return function(object) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.propertyOf` without support for deep paths.
   *
   * @private
   * @param {Object} object The object to query.
   * @returns {Function} Returns the new accessor function.
   */
  function basePropertyOf(object) {
    return function(key) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.reduce` and `_.reduceRight`, without support
   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} accumulator The initial value.
   * @param {boolean} initAccum Specify using the first or last element of
   *  `collection` as the initial value.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the accumulated value.
   */
  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection, function(value, index, collection) {
      accumulator = initAccum
        ? (initAccum = false, value)
        : iteratee(accumulator, value, index, collection);
    });
    return accumulator;
  }

  /**
   * The base implementation of `_.sortBy` which uses `comparer` to define the
   * sort order of `array` and replaces criteria objects with their corresponding
   * values.
   *
   * @private
   * @param {Array} array The array to sort.
   * @param {Function} comparer The function to define sort order.
   * @returns {Array} Returns `array`.
   */
  function baseSortBy(array, comparer) {
    var length = array.length;

    array.sort(comparer);
    while (length--) {
      array[length] = array[length].value;
    }
    return array;
  }

  /**
   * The base implementation of `_.sum` and `_.sumBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the sum.
   */
  function baseSum(array, iteratee) {
    var result,
        index = -1,
        length = array.length;

    while (++index < length) {
      var current = iteratee(array[index]);
      if (current !== undefined) {
        result = result === undefined ? current : (result + current);
      }
    }
    return result;
  }

  /**
   * The base implementation of `_.times` without support for iteratee shorthands
   * or max array length checks.
   *
   * @private
   * @param {number} n The number of times to invoke `iteratee`.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the array of results.
   */
  function baseTimes(n, iteratee) {
    var index = -1,
        result = Array(n);

    while (++index < n) {
      result[index] = iteratee(index);
    }
    return result;
  }

  /**
   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
   * of key-value pairs for `object` corresponding to the property names of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the key-value pairs.
   */
  function baseToPairs(object, props) {
    return arrayMap(props, function(key) {
      return [key, object[key]];
    });
  }

  /**
   * The base implementation of `_.trim`.
   *
   * @private
   * @param {string} string The string to trim.
   * @returns {string} Returns the trimmed string.
   */
  function baseTrim(string) {
    return string
      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
      : string;
  }

  /**
   * The base implementation of `_.unary` without support for storing metadata.
   *
   * @private
   * @param {Function} func The function to cap arguments for.
   * @returns {Function} Returns the new capped function.
   */
  function baseUnary(func) {
    return function(value) {
      return func(value);
    };
  }

  /**
   * The base implementation of `_.values` and `_.valuesIn` which creates an
   * array of `object` property values corresponding to the property names
   * of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the array of property values.
   */
  function baseValues(object, props) {
    return arrayMap(props, function(key) {
      return object[key];
    });
  }

  /**
   * Checks if a `cache` value for `key` exists.
   *
   * @private
   * @param {Object} cache The cache to query.
   * @param {string} key The key of the entry to check.
   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
   */
  function cacheHas(cache, key) {
    return cache.has(key);
  }

  /**
   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the first unmatched string symbol.
   */
  function charsStartIndex(strSymbols, chrSymbols) {
    var index = -1,
        length = strSymbols.length;

    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the last unmatched string symbol.
   */
  function charsEndIndex(strSymbols, chrSymbols) {
    var index = strSymbols.length;

    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Gets the number of `placeholder` occurrences in `array`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} placeholder The placeholder to search for.
   * @returns {number} Returns the placeholder count.
   */
  function countHolders(array, placeholder) {
    var length = array.length,
        result = 0;

    while (length--) {
      if (array[length] === placeholder) {
        ++result;
      }
    }
    return result;
  }

  /**
   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
   * letters to basic Latin letters.
   *
   * @private
   * @param {string} letter The matched letter to deburr.
   * @returns {string} Returns the deburred letter.
   */
  var deburrLetter = basePropertyOf(deburredLetters);

  /**
   * Used by `_.escape` to convert characters to HTML entities.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  var escapeHtmlChar = basePropertyOf(htmlEscapes);

  /**
   * Used by `_.template` to escape characters for inclusion in compiled string literals.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  function escapeStringChar(chr) {
    return '\\' + stringEscapes[chr];
  }

  /**
   * Gets the value at `key` of `object`.
   *
   * @private
   * @param {Object} [object] The object to query.
   * @param {string} key The key of the property to get.
   * @returns {*} Returns the property value.
   */
  function getValue(object, key) {
    return object == null ? undefined : object[key];
  }

  /**
   * Checks if `string` contains Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
   */
  function hasUnicode(string) {
    return reHasUnicode.test(string);
  }

  /**
   * Checks if `string` contains a word composed of Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a word is found, else `false`.
   */
  function hasUnicodeWord(string) {
    return reHasUnicodeWord.test(string);
  }

  /**
   * Converts `iterator` to an array.
   *
   * @private
   * @param {Object} iterator The iterator to convert.
   * @returns {Array} Returns the converted array.
   */
  function iteratorToArray(iterator) {
    var data,
        result = [];

    while (!(data = iterator.next()).done) {
      result.push(data.value);
    }
    return result;
  }

  /**
   * Converts `map` to its key-value pairs.
   *
   * @private
   * @param {Object} map The map to convert.
   * @returns {Array} Returns the key-value pairs.
   */
  function mapToArray(map) {
    var index = -1,
        result = Array(map.size);

    map.forEach(function(value, key) {
      result[++index] = [key, value];
    });
    return result;
  }

  /**
   * Creates a unary function that invokes `func` with its argument transformed.
   *
   * @private
   * @param {Function} func The function to wrap.
   * @param {Function} transform The argument transform.
   * @returns {Function} Returns the new function.
   */
  function overArg(func, transform) {
    return function(arg) {
      return func(transform(arg));
    };
  }

  /**
   * Replaces all `placeholder` elements in `array` with an internal placeholder
   * and returns an array of their indexes.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {*} placeholder The placeholder to replace.
   * @returns {Array} Returns the new array of placeholder indexes.
   */
  function replaceHolders(array, placeholder) {
    var index = -1,
        length = array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (value === placeholder || value === PLACEHOLDER) {
        array[index] = PLACEHOLDER;
        result[resIndex++] = index;
      }
    }
    return result;
  }

  /**
   * Converts `set` to an array of its values.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the values.
   */
  function setToArray(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = value;
    });
    return result;
  }

  /**
   * Converts `set` to its value-value pairs.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the value-value pairs.
   */
  function setToPairs(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = [value, value];
    });
    return result;
  }

  /**
   * A specialized version of `_.indexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictIndexOf(array, value, fromIndex) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (array[index] === value) {
        return index;
      }
    }
    return -1;
  }

  /**
   * A specialized version of `_.lastIndexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictLastIndexOf(array, value, fromIndex) {
    var index = fromIndex + 1;
    while (index--) {
      if (array[index] === value) {
        return index;
      }
    }
    return index;
  }

  /**
   * Gets the number of symbols in `string`.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {number} Returns the string size.
   */
  function stringSize(string) {
    return hasUnicode(string)
      ? unicodeSize(string)
      : asciiSize(string);
  }

  /**
   * Converts `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function stringToArray(string) {
    return hasUnicode(string)
      ? unicodeToArray(string)
      : asciiToArray(string);
  }

  /**
   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
   * character of `string`.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {number} Returns the index of the last non-whitespace character.
   */
  function trimmedEndIndex(string) {
    var index = string.length;

    while (index-- && reWhitespace.test(string.charAt(index))) {}
    return index;
  }

  /**
   * Used by `_.unescape` to convert HTML entities to characters.
   *
   * @private
   * @param {string} chr The matched character to unescape.
   * @returns {string} Returns the unescaped character.
   */
  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);

  /**
   * Gets the size of a Unicode `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  function unicodeSize(string) {
    var result = reUnicode.lastIndex = 0;
    while (reUnicode.test(string)) {
      ++result;
    }
    return result;
  }

  /**
   * Converts a Unicode `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function unicodeToArray(string) {
    return string.match(reUnicode) || [];
  }

  /**
   * Splits a Unicode `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function unicodeWords(string) {
    return string.match(reUnicodeWord) || [];
  }

  /*--------------------------------------------------------------------------*/

  /**
   * Create a new pristine `lodash` function using the `context` object.
   *
   * @static
   * @memberOf _
   * @since 1.1.0
   * @category Util
   * @param {Object} [context=root] The context object.
   * @returns {Function} Returns a new `lodash` function.
   * @example
   *
   * _.mixin({ 'foo': _.constant('foo') });
   *
   * var lodash = _.runInContext();
   * lodash.mixin({ 'bar': lodash.constant('bar') });
   *
   * _.isFunction(_.foo);
   * // => true
   * _.isFunction(_.bar);
   * // => false
   *
   * lodash.isFunction(lodash.foo);
   * // => false
   * lodash.isFunction(lodash.bar);
   * // => true
   *
   * // Create a suped-up `defer` in Node.js.
   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
   */
  var runInContext = (function runInContext(context) {
    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));

    /** Built-in constructor references. */
    var Array = context.Array,
        Date = context.Date,
        Error = context.Error,
        Function = context.Function,
        Math = context.Math,
        Object = context.Object,
        RegExp = context.RegExp,
        String = context.String,
        TypeError = context.TypeError;

    /** Used for built-in method references. */
    var arrayProto = Array.prototype,
        funcProto = Function.prototype,
        objectProto = Object.prototype;

    /** Used to detect overreaching core-js shims. */
    var coreJsData = context['__core-js_shared__'];

    /** Used to resolve the decompiled source of functions. */
    var funcToString = funcProto.toString;

    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;

    /** Used to generate unique IDs. */
    var idCounter = 0;

    /** Used to detect methods masquerading as native. */
    var maskSrcKey = (function() {
      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
      return uid ? ('Symbol(src)_1.' + uid) : '';
    }());

    /**
     * Used to resolve the
     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     * of values.
     */
    var nativeObjectToString = objectProto.toString;

    /** Used to infer the `Object` constructor. */
    var objectCtorString = funcToString.call(Object);

    /** Used to restore the original `_` reference in `_.noConflict`. */
    var oldDash = root._;

    /** Used to detect if a method is native. */
    var reIsNative = RegExp('^' +
      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
    );

    /** Built-in value references. */
    var Buffer = moduleExports ? context.Buffer : undefined,
        Symbol = context.Symbol,
        Uint8Array = context.Uint8Array,
        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
        getPrototype = overArg(Object.getPrototypeOf, Object),
        objectCreate = Object.create,
        propertyIsEnumerable = objectProto.propertyIsEnumerable,
        splice = arrayProto.splice,
        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
        symIterator = Symbol ? Symbol.iterator : undefined,
        symToStringTag = Symbol ? Symbol.toStringTag : undefined;

    var defineProperty = (function() {
      try {
        var func = getNative(Object, 'defineProperty');
        func({}, '', {});
        return func;
      } catch (e) {}
    }());

    /** Mocked built-ins. */
    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
        ctxNow = Date && Date.now !== root.Date.now && Date.now,
        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;

    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeCeil = Math.ceil,
        nativeFloor = Math.floor,
        nativeGetSymbols = Object.getOwnPropertySymbols,
        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
        nativeIsFinite = context.isFinite,
        nativeJoin = arrayProto.join,
        nativeKeys = overArg(Object.keys, Object),
        nativeMax = Math.max,
        nativeMin = Math.min,
        nativeNow = Date.now,
        nativeParseInt = context.parseInt,
        nativeRandom = Math.random,
        nativeReverse = arrayProto.reverse;

    /* Built-in method references that are verified to be native. */
    var DataView = getNative(context, 'DataView'),
        Map = getNative(context, 'Map'),
        Promise = getNative(context, 'Promise'),
        Set = getNative(context, 'Set'),
        WeakMap = getNative(context, 'WeakMap'),
        nativeCreate = getNative(Object, 'create');

    /** Used to store function metadata. */
    var metaMap = WeakMap && new WeakMap;

    /** Used to lookup unminified function names. */
    var realNames = {};

    /** Used to detect maps, sets, and weakmaps. */
    var dataViewCtorString = toSource(DataView),
        mapCtorString = toSource(Map),
        promiseCtorString = toSource(Promise),
        setCtorString = toSource(Set),
        weakMapCtorString = toSource(WeakMap);

    /** Used to convert symbols to primitives and strings. */
    var symbolProto = Symbol ? Symbol.prototype : undefined,
        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
        symbolToString = symbolProto ? symbolProto.toString : undefined;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` object which wraps `value` to enable implicit method
     * chain sequences. Methods that operate on and return arrays, collections,
     * and functions can be chained together. Methods that retrieve a single value
     * or may return a primitive value will automatically end the chain sequence
     * and return the unwrapped value. Otherwise, the value must be unwrapped
     * with `_#value`.
     *
     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
     * enabled using `_.chain`.
     *
     * The execution of chained methods is lazy, that is, it's deferred until
     * `_#value` is implicitly or explicitly called.
     *
     * Lazy evaluation allows several methods to support shortcut fusion.
     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
     * the creation of intermediate arrays and can greatly reduce the number of
     * iteratee executions. Sections of a chain sequence qualify for shortcut
     * fusion if the section is applied to an array and iteratees accept only
     * one argument. The heuristic for whether a section qualifies for shortcut
     * fusion is subject to change.
     *
     * Chaining is supported in custom builds as long as the `_#value` method is
     * directly or indirectly included in the build.
     *
     * In addition to lodash methods, wrappers have `Array` and `String` methods.
     *
     * The wrapper `Array` methods are:
     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
     *
     * The wrapper `String` methods are:
     * `replace` and `split`
     *
     * The wrapper methods that support shortcut fusion are:
     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
     *
     * The chainable wrapper methods are:
     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
     * `zipObject`, `zipObjectDeep`, and `zipWith`
     *
     * The wrapper methods that are **not** chainable by default are:
     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
     * `upperFirst`, `value`, and `words`
     *
     * @name _
     * @constructor
     * @category Seq
     * @param {*} value The value to wrap in a `lodash` instance.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2, 3]);
     *
     * // Returns an unwrapped value.
     * wrapped.reduce(_.add);
     * // => 6
     *
     * // Returns a wrapped value.
     * var squares = wrapped.map(square);
     *
     * _.isArray(squares);
     * // => false
     *
     * _.isArray(squares.value());
     * // => true
     */
    function lodash(value) {
      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
        if (value instanceof LodashWrapper) {
          return value;
        }
        if (hasOwnProperty.call(value, '__wrapped__')) {
          return wrapperClone(value);
        }
      }
      return new LodashWrapper(value);
    }

    /**
     * The base implementation of `_.create` without support for assigning
     * properties to the created object.
     *
     * @private
     * @param {Object} proto The object to inherit from.
     * @returns {Object} Returns the new object.
     */
    var baseCreate = (function() {
      function object() {}
      return function(proto) {
        if (!isObject(proto)) {
          return {};
        }
        if (objectCreate) {
          return objectCreate(proto);
        }
        object.prototype = proto;
        var result = new object;
        object.prototype = undefined;
        return result;
      };
    }());

    /**
     * The function whose prototype chain sequence wrappers inherit from.
     *
     * @private
     */
    function baseLodash() {
      // No operation performed.
    }

    /**
     * The base constructor for creating `lodash` wrapper objects.
     *
     * @private
     * @param {*} value The value to wrap.
     * @param {boolean} [chainAll] Enable explicit method chain sequences.
     */
    function LodashWrapper(value, chainAll) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__chain__ = !!chainAll;
      this.__index__ = 0;
      this.__values__ = undefined;
    }

    /**
     * By default, the template delimiters used by lodash are like those in
     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
     * following template settings to use alternative delimiters.
     *
     * @static
     * @memberOf _
     * @type {Object}
     */
    lodash.templateSettings = {

      /**
       * Used to detect `data` property values to be HTML-escaped.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'escape': reEscape,

      /**
       * Used to detect code to be evaluated.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'evaluate': reEvaluate,

      /**
       * Used to detect `data` property values to inject.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'interpolate': reInterpolate,

      /**
       * Used to reference the data object in the template text.
       *
       * @memberOf _.templateSettings
       * @type {string}
       */
      'variable': '',

      /**
       * Used to import variables into the compiled template.
       *
       * @memberOf _.templateSettings
       * @type {Object}
       */
      'imports': {

        /**
         * A reference to the `lodash` function.
         *
         * @memberOf _.templateSettings.imports
         * @type {Function}
         */
        '_': lodash
      }
    };

    // Ensure wrappers are instances of `baseLodash`.
    lodash.prototype = baseLodash.prototype;
    lodash.prototype.constructor = lodash;

    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
    LodashWrapper.prototype.constructor = LodashWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
     *
     * @private
     * @constructor
     * @param {*} value The value to wrap.
     */
    function LazyWrapper(value) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__dir__ = 1;
      this.__filtered__ = false;
      this.__iteratees__ = [];
      this.__takeCount__ = MAX_ARRAY_LENGTH;
      this.__views__ = [];
    }

    /**
     * Creates a clone of the lazy wrapper object.
     *
     * @private
     * @name clone
     * @memberOf LazyWrapper
     * @returns {Object} Returns the cloned `LazyWrapper` object.
     */
    function lazyClone() {
      var result = new LazyWrapper(this.__wrapped__);
      result.__actions__ = copyArray(this.__actions__);
      result.__dir__ = this.__dir__;
      result.__filtered__ = this.__filtered__;
      result.__iteratees__ = copyArray(this.__iteratees__);
      result.__takeCount__ = this.__takeCount__;
      result.__views__ = copyArray(this.__views__);
      return result;
    }

    /**
     * Reverses the direction of lazy iteration.
     *
     * @private
     * @name reverse
     * @memberOf LazyWrapper
     * @returns {Object} Returns the new reversed `LazyWrapper` object.
     */
    function lazyReverse() {
      if (this.__filtered__) {
        var result = new LazyWrapper(this);
        result.__dir__ = -1;
        result.__filtered__ = true;
      } else {
        result = this.clone();
        result.__dir__ *= -1;
      }
      return result;
    }

    /**
     * Extracts the unwrapped value from its lazy wrapper.
     *
     * @private
     * @name value
     * @memberOf LazyWrapper
     * @returns {*} Returns the unwrapped value.
     */
    function lazyValue() {
      var array = this.__wrapped__.value(),
          dir = this.__dir__,
          isArr = isArray(array),
          isRight = dir < 0,
          arrLength = isArr ? array.length : 0,
          view = getView(0, arrLength, this.__views__),
          start = view.start,
          end = view.end,
          length = end - start,
          index = isRight ? end : (start - 1),
          iteratees = this.__iteratees__,
          iterLength = iteratees.length,
          resIndex = 0,
          takeCount = nativeMin(length, this.__takeCount__);

      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
        return baseWrapperValue(array, this.__actions__);
      }
      var result = [];

      outer:
      while (length-- && resIndex < takeCount) {
        index += dir;

        var iterIndex = -1,
            value = array[index];

        while (++iterIndex < iterLength) {
          var data = iteratees[iterIndex],
              iteratee = data.iteratee,
              type = data.type,
              computed = iteratee(value);

          if (type == LAZY_MAP_FLAG) {
            value = computed;
          } else if (!computed) {
            if (type == LAZY_FILTER_FLAG) {
              continue outer;
            } else {
              break outer;
            }
          }
        }
        result[resIndex++] = value;
      }
      return result;
    }

    // Ensure `LazyWrapper` is an instance of `baseLodash`.
    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
    LazyWrapper.prototype.constructor = LazyWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a hash object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Hash(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the hash.
     *
     * @private
     * @name clear
     * @memberOf Hash
     */
    function hashClear() {
      this.__data__ = nativeCreate ? nativeCreate(null) : {};
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the hash.
     *
     * @private
     * @name delete
     * @memberOf Hash
     * @param {Object} hash The hash to modify.
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function hashDelete(key) {
      var result = this.has(key) && delete this.__data__[key];
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the hash value for `key`.
     *
     * @private
     * @name get
     * @memberOf Hash
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function hashGet(key) {
      var data = this.__data__;
      if (nativeCreate) {
        var result = data[key];
        return result === HASH_UNDEFINED ? undefined : result;
      }
      return hasOwnProperty.call(data, key) ? data[key] : undefined;
    }

    /**
     * Checks if a hash value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Hash
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function hashHas(key) {
      var data = this.__data__;
      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
    }

    /**
     * Sets the hash `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Hash
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the hash instance.
     */
    function hashSet(key, value) {
      var data = this.__data__;
      this.size += this.has(key) ? 0 : 1;
      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
      return this;
    }

    // Add methods to `Hash`.
    Hash.prototype.clear = hashClear;
    Hash.prototype['delete'] = hashDelete;
    Hash.prototype.get = hashGet;
    Hash.prototype.has = hashHas;
    Hash.prototype.set = hashSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an list cache object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function ListCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the list cache.
     *
     * @private
     * @name clear
     * @memberOf ListCache
     */
    function listCacheClear() {
      this.__data__ = [];
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the list cache.
     *
     * @private
     * @name delete
     * @memberOf ListCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function listCacheDelete(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        return false;
      }
      var lastIndex = data.length - 1;
      if (index == lastIndex) {
        data.pop();
      } else {
        splice.call(data, index, 1);
      }
      --this.size;
      return true;
    }

    /**
     * Gets the list cache value for `key`.
     *
     * @private
     * @name get
     * @memberOf ListCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function listCacheGet(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      return index < 0 ? undefined : data[index][1];
    }

    /**
     * Checks if a list cache value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf ListCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function listCacheHas(key) {
      return assocIndexOf(this.__data__, key) > -1;
    }

    /**
     * Sets the list cache `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf ListCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the list cache instance.
     */
    function listCacheSet(key, value) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        ++this.size;
        data.push([key, value]);
      } else {
        data[index][1] = value;
      }
      return this;
    }

    // Add methods to `ListCache`.
    ListCache.prototype.clear = listCacheClear;
    ListCache.prototype['delete'] = listCacheDelete;
    ListCache.prototype.get = listCacheGet;
    ListCache.prototype.has = listCacheHas;
    ListCache.prototype.set = listCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a map cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function MapCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the map.
     *
     * @private
     * @name clear
     * @memberOf MapCache
     */
    function mapCacheClear() {
      this.size = 0;
      this.__data__ = {
        'hash': new Hash,
        'map': new (Map || ListCache),
        'string': new Hash
      };
    }

    /**
     * Removes `key` and its value from the map.
     *
     * @private
     * @name delete
     * @memberOf MapCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function mapCacheDelete(key) {
      var result = getMapData(this, key)['delete'](key);
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the map value for `key`.
     *
     * @private
     * @name get
     * @memberOf MapCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function mapCacheGet(key) {
      return getMapData(this, key).get(key);
    }

    /**
     * Checks if a map value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf MapCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function mapCacheHas(key) {
      return getMapData(this, key).has(key);
    }

    /**
     * Sets the map `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf MapCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the map cache instance.
     */
    function mapCacheSet(key, value) {
      var data = getMapData(this, key),
          size = data.size;

      data.set(key, value);
      this.size += data.size == size ? 0 : 1;
      return this;
    }

    // Add methods to `MapCache`.
    MapCache.prototype.clear = mapCacheClear;
    MapCache.prototype['delete'] = mapCacheDelete;
    MapCache.prototype.get = mapCacheGet;
    MapCache.prototype.has = mapCacheHas;
    MapCache.prototype.set = mapCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     *
     * Creates an array cache object to store unique values.
     *
     * @private
     * @constructor
     * @param {Array} [values] The values to cache.
     */
    function SetCache(values) {
      var index = -1,
          length = values == null ? 0 : values.length;

      this.__data__ = new MapCache;
      while (++index < length) {
        this.add(values[index]);
      }
    }

    /**
     * Adds `value` to the array cache.
     *
     * @private
     * @name add
     * @memberOf SetCache
     * @alias push
     * @param {*} value The value to cache.
     * @returns {Object} Returns the cache instance.
     */
    function setCacheAdd(value) {
      this.__data__.set(value, HASH_UNDEFINED);
      return this;
    }

    /**
     * Checks if `value` is in the array cache.
     *
     * @private
     * @name has
     * @memberOf SetCache
     * @param {*} value The value to search for.
     * @returns {number} Returns `true` if `value` is found, else `false`.
     */
    function setCacheHas(value) {
      return this.__data__.has(value);
    }

    // Add methods to `SetCache`.
    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
    SetCache.prototype.has = setCacheHas;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a stack cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Stack(entries) {
      var data = this.__data__ = new ListCache(entries);
      this.size = data.size;
    }

    /**
     * Removes all key-value entries from the stack.
     *
     * @private
     * @name clear
     * @memberOf Stack
     */
    function stackClear() {
      this.__data__ = new ListCache;
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the stack.
     *
     * @private
     * @name delete
     * @memberOf Stack
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function stackDelete(key) {
      var data = this.__data__,
          result = data['delete'](key);

      this.size = data.size;
      return result;
    }

    /**
     * Gets the stack value for `key`.
     *
     * @private
     * @name get
     * @memberOf Stack
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function stackGet(key) {
      return this.__data__.get(key);
    }

    /**
     * Checks if a stack value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Stack
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function stackHas(key) {
      return this.__data__.has(key);
    }

    /**
     * Sets the stack `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Stack
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the stack cache instance.
     */
    function stackSet(key, value) {
      var data = this.__data__;
      if (data instanceof ListCache) {
        var pairs = data.__data__;
        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
          pairs.push([key, value]);
          this.size = ++data.size;
          return this;
        }
        data = this.__data__ = new MapCache(pairs);
      }
      data.set(key, value);
      this.size = data.size;
      return this;
    }

    // Add methods to `Stack`.
    Stack.prototype.clear = stackClear;
    Stack.prototype['delete'] = stackDelete;
    Stack.prototype.get = stackGet;
    Stack.prototype.has = stackHas;
    Stack.prototype.set = stackSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of the enumerable property names of the array-like `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @param {boolean} inherited Specify returning inherited property names.
     * @returns {Array} Returns the array of property names.
     */
    function arrayLikeKeys(value, inherited) {
      var isArr = isArray(value),
          isArg = !isArr && isArguments(value),
          isBuff = !isArr && !isArg && isBuffer(value),
          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
          skipIndexes = isArr || isArg || isBuff || isType,
          result = skipIndexes ? baseTimes(value.length, String) : [],
          length = result.length;

      for (var key in value) {
        if ((inherited || hasOwnProperty.call(value, key)) &&
            !(skipIndexes && (
               // Safari 9 has enumerable `arguments.length` in strict mode.
               key == 'length' ||
               // Node.js 0.10 has enumerable non-index properties on buffers.
               (isBuff && (key == 'offset' || key == 'parent')) ||
               // PhantomJS 2 has enumerable non-index properties on typed arrays.
               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
               // Skip index properties.
               isIndex(key, length)
            ))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * A specialized version of `_.sample` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @returns {*} Returns the random element.
     */
    function arraySample(array) {
      var length = array.length;
      return length ? array[baseRandom(0, length - 1)] : undefined;
    }

    /**
     * A specialized version of `_.sampleSize` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function arraySampleSize(array, n) {
      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
    }

    /**
     * A specialized version of `_.shuffle` for arrays.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function arrayShuffle(array) {
      return shuffleSelf(copyArray(array));
    }

    /**
     * This function is like `assignValue` except that it doesn't assign
     * `undefined` values.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignMergeValue(object, key, value) {
      if ((value !== undefined && !eq(object[key], value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Assigns `value` to `key` of `object` if the existing value is not equivalent
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignValue(object, key, value) {
      var objValue = object[key];
      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Gets the index at which the `key` is found in `array` of key-value pairs.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} key The key to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function assocIndexOf(array, key) {
      var length = array.length;
      while (length--) {
        if (eq(array[length][0], key)) {
          return length;
        }
      }
      return -1;
    }

    /**
     * Aggregates elements of `collection` on `accumulator` with keys transformed
     * by `iteratee` and values set by `setter`.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform keys.
     * @param {Object} accumulator The initial aggregated object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseAggregator(collection, setter, iteratee, accumulator) {
      baseEach(collection, function(value, key, collection) {
        setter(accumulator, value, iteratee(value), collection);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.assign` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssign(object, source) {
      return object && copyObject(source, keys(source), object);
    }

    /**
     * The base implementation of `_.assignIn` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssignIn(object, source) {
      return object && copyObject(source, keysIn(source), object);
    }

    /**
     * The base implementation of `assignValue` and `assignMergeValue` without
     * value checks.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function baseAssignValue(object, key, value) {
      if (key == '__proto__' && defineProperty) {
        defineProperty(object, key, {
          'configurable': true,
          'enumerable': true,
          'value': value,
          'writable': true
        });
      } else {
        object[key] = value;
      }
    }

    /**
     * The base implementation of `_.at` without support for individual paths.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {string[]} paths The property paths to pick.
     * @returns {Array} Returns the picked elements.
     */
    function baseAt(object, paths) {
      var index = -1,
          length = paths.length,
          result = Array(length),
          skip = object == null;

      while (++index < length) {
        result[index] = skip ? undefined : get(object, paths[index]);
      }
      return result;
    }

    /**
     * The base implementation of `_.clamp` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     */
    function baseClamp(number, lower, upper) {
      if (number === number) {
        if (upper !== undefined) {
          number = number <= upper ? number : upper;
        }
        if (lower !== undefined) {
          number = number >= lower ? number : lower;
        }
      }
      return number;
    }

    /**
     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
     * traversed objects.
     *
     * @private
     * @param {*} value The value to clone.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Deep clone
     *  2 - Flatten inherited properties
     *  4 - Clone symbols
     * @param {Function} [customizer] The function to customize cloning.
     * @param {string} [key] The key of `value`.
     * @param {Object} [object] The parent object of `value`.
     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
     * @returns {*} Returns the cloned value.
     */
    function baseClone(value, bitmask, customizer, key, object, stack) {
      var result,
          isDeep = bitmask & CLONE_DEEP_FLAG,
          isFlat = bitmask & CLONE_FLAT_FLAG,
          isFull = bitmask & CLONE_SYMBOLS_FLAG;

      if (customizer) {
        result = object ? customizer(value, key, object, stack) : customizer(value);
      }
      if (result !== undefined) {
        return result;
      }
      if (!isObject(value)) {
        return value;
      }
      var isArr = isArray(value);
      if (isArr) {
        result = initCloneArray(value);
        if (!isDeep) {
          return copyArray(value, result);
        }
      } else {
        var tag = getTag(value),
            isFunc = tag == funcTag || tag == genTag;

        if (isBuffer(value)) {
          return cloneBuffer(value, isDeep);
        }
        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
          result = (isFlat || isFunc) ? {} : initCloneObject(value);
          if (!isDeep) {
            return isFlat
              ? copySymbolsIn(value, baseAssignIn(result, value))
              : copySymbols(value, baseAssign(result, value));
          }
        } else {
          if (!cloneableTags[tag]) {
            return object ? value : {};
          }
          result = initCloneByTag(value, tag, isDeep);
        }
      }
      // Check for circular references and return its corresponding clone.
      stack || (stack = new Stack);
      var stacked = stack.get(value);
      if (stacked) {
        return stacked;
      }
      stack.set(value, result);

      if (isSet(value)) {
        value.forEach(function(subValue) {
          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
        });
      } else if (isMap(value)) {
        value.forEach(function(subValue, key) {
          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
        });
      }

      var keysFunc = isFull
        ? (isFlat ? getAllKeysIn : getAllKeys)
        : (isFlat ? keysIn : keys);

      var props = isArr ? undefined : keysFunc(value);
      arrayEach(props || value, function(subValue, key) {
        if (props) {
          key = subValue;
          subValue = value[key];
        }
        // Recursively populate clone (susceptible to call stack limits).
        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
      });
      return result;
    }

    /**
     * The base implementation of `_.conforms` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     */
    function baseConforms(source) {
      var props = keys(source);
      return function(object) {
        return baseConformsTo(object, source, props);
      };
    }

    /**
     * The base implementation of `_.conformsTo` which accepts `props` to check.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     */
    function baseConformsTo(object, source, props) {
      var length = props.length;
      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (length--) {
        var key = props[length],
            predicate = source[key],
            value = object[key];

        if ((value === undefined && !(key in object)) || !predicate(value)) {
          return false;
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.delay` and `_.defer` which accepts `args`
     * to provide to `func`.
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {Array} args The arguments to provide to `func`.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    function baseDelay(func, wait, args) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return setTimeout(function() { func.apply(undefined, args); }, wait);
    }

    /**
     * The base implementation of methods like `_.difference` without support
     * for excluding multiple arrays or iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Array} values The values to exclude.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     */
    function baseDifference(array, values, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          isCommon = true,
          length = array.length,
          result = [],
          valuesLength = values.length;

      if (!length) {
        return result;
      }
      if (iteratee) {
        values = arrayMap(values, baseUnary(iteratee));
      }
      if (comparator) {
        includes = arrayIncludesWith;
        isCommon = false;
      }
      else if (values.length >= LARGE_ARRAY_SIZE) {
        includes = cacheHas;
        isCommon = false;
        values = new SetCache(values);
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee == null ? value : iteratee(value);

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var valuesIndex = valuesLength;
          while (valuesIndex--) {
            if (values[valuesIndex] === computed) {
              continue outer;
            }
          }
          result.push(value);
        }
        else if (!includes(values, computed, comparator)) {
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.forEach` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEach = createBaseEach(baseForOwn);

    /**
     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEachRight = createBaseEach(baseForOwnRight, true);

    /**
     * The base implementation of `_.every` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`
     */
    function baseEvery(collection, predicate) {
      var result = true;
      baseEach(collection, function(value, index, collection) {
        result = !!predicate(value, index, collection);
        return result;
      });
      return result;
    }

    /**
     * The base implementation of methods like `_.max` and `_.min` which accepts a
     * `comparator` to determine the extremum value.
     *
     * @private
     * @param {Array} array The array to iterate over.
     * @param {Function} iteratee The iteratee invoked per iteration.
     * @param {Function} comparator The comparator used to compare values.
     * @returns {*} Returns the extremum value.
     */
    function baseExtremum(array, iteratee, comparator) {
      var index = -1,
          length = array.length;

      while (++index < length) {
        var value = array[index],
            current = iteratee(value);

        if (current != null && (computed === undefined
              ? (current === current && !isSymbol(current))
              : comparator(current, computed)
            )) {
          var computed = current,
              result = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.fill` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     */
    function baseFill(array, value, start, end) {
      var length = array.length;

      start = toInteger(start);
      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = (end === undefined || end > length) ? length : toInteger(end);
      if (end < 0) {
        end += length;
      }
      end = start > end ? 0 : toLength(end);
      while (start < end) {
        array[start++] = value;
      }
      return array;
    }

    /**
     * The base implementation of `_.filter` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     */
    function baseFilter(collection, predicate) {
      var result = [];
      baseEach(collection, function(value, index, collection) {
        if (predicate(value, index, collection)) {
          result.push(value);
        }
      });
      return result;
    }

    /**
     * The base implementation of `_.flatten` with support for restricting flattening.
     *
     * @private
     * @param {Array} array The array to flatten.
     * @param {number} depth The maximum recursion depth.
     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
     * @param {Array} [result=[]] The initial result value.
     * @returns {Array} Returns the new flattened array.
     */
    function baseFlatten(array, depth, predicate, isStrict, result) {
      var index = -1,
          length = array.length;

      predicate || (predicate = isFlattenable);
      result || (result = []);

      while (++index < length) {
        var value = array[index];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) {
            // Recursively flatten arrays (susceptible to call stack limits).
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `baseForOwn` which iterates over `object`
     * properties returned by `keysFunc` and invokes `iteratee` for each property.
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseFor = createBaseFor();

    /**
     * This function is like `baseFor` except that it iterates over properties
     * in the opposite order.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseForRight = createBaseFor(true);

    /**
     * The base implementation of `_.forOwn` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwn(object, iteratee) {
      return object && baseFor(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwnRight(object, iteratee) {
      return object && baseForRight(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.functions` which creates an array of
     * `object` function property names filtered from `props`.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Array} props The property names to filter.
     * @returns {Array} Returns the function names.
     */
    function baseFunctions(object, props) {
      return arrayFilter(props, function(key) {
        return isFunction(object[key]);
      });
    }

    /**
     * The base implementation of `_.get` without support for default values.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @returns {*} Returns the resolved value.
     */
    function baseGet(object, path) {
      path = castPath(path, object);

      var index = 0,
          length = path.length;

      while (object != null && index < length) {
        object = object[toKey(path[index++])];
      }
      return (index && index == length) ? object : undefined;
    }

    /**
     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @param {Function} symbolsFunc The function to get the symbols of `object`.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
      var result = keysFunc(object);
      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
    }

    /**
     * The base implementation of `getTag` without fallbacks for buggy environments.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    function baseGetTag(value) {
      if (value == null) {
        return value === undefined ? undefinedTag : nullTag;
      }
      return (symToStringTag && symToStringTag in Object(value))
        ? getRawTag(value)
        : objectToString(value);
    }

    /**
     * The base implementation of `_.gt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     */
    function baseGt(value, other) {
      return value > other;
    }

    /**
     * The base implementation of `_.has` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHas(object, key) {
      return object != null && hasOwnProperty.call(object, key);
    }

    /**
     * The base implementation of `_.hasIn` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHasIn(object, key) {
      return object != null && key in Object(object);
    }

    /**
     * The base implementation of `_.inRange` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to check.
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     */
    function baseInRange(number, start, end) {
      return number >= nativeMin(start, end) && number < nativeMax(start, end);
    }

    /**
     * The base implementation of methods like `_.intersection`, without support
     * for iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of shared values.
     */
    function baseIntersection(arrays, iteratee, comparator) {
      var includes = comparator ? arrayIncludesWith : arrayIncludes,
          length = arrays[0].length,
          othLength = arrays.length,
          othIndex = othLength,
          caches = Array(othLength),
          maxLength = Infinity,
          result = [];

      while (othIndex--) {
        var array = arrays[othIndex];
        if (othIndex && iteratee) {
          array = arrayMap(array, baseUnary(iteratee));
        }
        maxLength = nativeMin(array.length, maxLength);
        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
          ? new SetCache(othIndex && array)
          : undefined;
      }
      array = arrays[0];

      var index = -1,
          seen = caches[0];

      outer:
      while (++index < length && result.length < maxLength) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (!(seen
              ? cacheHas(seen, computed)
              : includes(result, computed, comparator)
            )) {
          othIndex = othLength;
          while (--othIndex) {
            var cache = caches[othIndex];
            if (!(cache
                  ? cacheHas(cache, computed)
                  : includes(arrays[othIndex], computed, comparator))
                ) {
              continue outer;
            }
          }
          if (seen) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.invert` and `_.invertBy` which inverts
     * `object` with values transformed by `iteratee` and set by `setter`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform values.
     * @param {Object} accumulator The initial inverted object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseInverter(object, setter, iteratee, accumulator) {
      baseForOwn(object, function(value, key, object) {
        setter(accumulator, iteratee(value), key, object);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.invoke` without support for individual
     * method arguments.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {Array} args The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     */
    function baseInvoke(object, path, args) {
      path = castPath(path, object);
      object = parent(object, path);
      var func = object == null ? object : object[toKey(last(path))];
      return func == null ? undefined : apply(func, object, args);
    }

    /**
     * The base implementation of `_.isArguments`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     */
    function baseIsArguments(value) {
      return isObjectLike(value) && baseGetTag(value) == argsTag;
    }

    /**
     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     */
    function baseIsArrayBuffer(value) {
      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
    }

    /**
     * The base implementation of `_.isDate` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     */
    function baseIsDate(value) {
      return isObjectLike(value) && baseGetTag(value) == dateTag;
    }

    /**
     * The base implementation of `_.isEqual` which supports partial comparisons
     * and tracks traversed objects.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Unordered comparison
     *  2 - Partial comparison
     * @param {Function} [customizer] The function to customize comparisons.
     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     */
    function baseIsEqual(value, other, bitmask, customizer, stack) {
      if (value === other) {
        return true;
      }
      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
        return value !== value && other !== other;
      }
      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
    }

    /**
     * A specialized version of `baseIsEqual` for arrays and objects which performs
     * deep comparisons and tracks traversed objects enabling objects with circular
     * references to be compared.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
      var objIsArr = isArray(object),
          othIsArr = isArray(other),
          objTag = objIsArr ? arrayTag : getTag(object),
          othTag = othIsArr ? arrayTag : getTag(other);

      objTag = objTag == argsTag ? objectTag : objTag;
      othTag = othTag == argsTag ? objectTag : othTag;

      var objIsObj = objTag == objectTag,
          othIsObj = othTag == objectTag,
          isSameTag = objTag == othTag;

      if (isSameTag && isBuffer(object)) {
        if (!isBuffer(other)) {
          return false;
        }
        objIsArr = true;
        objIsObj = false;
      }
      if (isSameTag && !objIsObj) {
        stack || (stack = new Stack);
        return (objIsArr || isTypedArray(object))
          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
      }
      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');

        if (objIsWrapped || othIsWrapped) {
          var objUnwrapped = objIsWrapped ? object.value() : object,
              othUnwrapped = othIsWrapped ? other.value() : other;

          stack || (stack = new Stack);
          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
        }
      }
      if (!isSameTag) {
        return false;
      }
      stack || (stack = new Stack);
      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
    }

    /**
     * The base implementation of `_.isMap` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     */
    function baseIsMap(value) {
      return isObjectLike(value) && getTag(value) == mapTag;
    }

    /**
     * The base implementation of `_.isMatch` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Array} matchData The property names, values, and compare flags to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     */
    function baseIsMatch(object, source, matchData, customizer) {
      var index = matchData.length,
          length = index,
          noCustomizer = !customizer;

      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (index--) {
        var data = matchData[index];
        if ((noCustomizer && data[2])
              ? data[1] !== object[data[0]]
              : !(data[0] in object)
            ) {
          return false;
        }
      }
      while (++index < length) {
        data = matchData[index];
        var key = data[0],
            objValue = object[key],
            srcValue = data[1];

        if (noCustomizer && data[2]) {
          if (objValue === undefined && !(key in object)) {
            return false;
          }
        } else {
          var stack = new Stack;
          if (customizer) {
            var result = customizer(objValue, srcValue, key, object, source, stack);
          }
          if (!(result === undefined
                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
                : result
              )) {
            return false;
          }
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.isNative` without bad shim checks.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     */
    function baseIsNative(value) {
      if (!isObject(value) || isMasked(value)) {
        return false;
      }
      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
      return pattern.test(toSource(value));
    }

    /**
     * The base implementation of `_.isRegExp` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     */
    function baseIsRegExp(value) {
      return isObjectLike(value) && baseGetTag(value) == regexpTag;
    }

    /**
     * The base implementation of `_.isSet` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     */
    function baseIsSet(value) {
      return isObjectLike(value) && getTag(value) == setTag;
    }

    /**
     * The base implementation of `_.isTypedArray` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     */
    function baseIsTypedArray(value) {
      return isObjectLike(value) &&
        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
    }

    /**
     * The base implementation of `_.iteratee`.
     *
     * @private
     * @param {*} [value=_.identity] The value to convert to an iteratee.
     * @returns {Function} Returns the iteratee.
     */
    function baseIteratee(value) {
      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
      if (typeof value == 'function') {
        return value;
      }
      if (value == null) {
        return identity;
      }
      if (typeof value == 'object') {
        return isArray(value)
          ? baseMatchesProperty(value[0], value[1])
          : baseMatches(value);
      }
      return property(value);
    }

    /**
     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeys(object) {
      if (!isPrototype(object)) {
        return nativeKeys(object);
      }
      var result = [];
      for (var key in Object(object)) {
        if (hasOwnProperty.call(object, key) && key != 'constructor') {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeysIn(object) {
      if (!isObject(object)) {
        return nativeKeysIn(object);
      }
      var isProto = isPrototype(object),
          result = [];

      for (var key in object) {
        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.lt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     */
    function baseLt(value, other) {
      return value < other;
    }

    /**
     * The base implementation of `_.map` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     */
    function baseMap(collection, iteratee) {
      var index = -1,
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value, key, collection) {
        result[++index] = iteratee(value, key, collection);
      });
      return result;
    }

    /**
     * The base implementation of `_.matches` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatches(source) {
      var matchData = getMatchData(source);
      if (matchData.length == 1 && matchData[0][2]) {
        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
      }
      return function(object) {
        return object === source || baseIsMatch(object, source, matchData);
      };
    }

    /**
     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
     *
     * @private
     * @param {string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatchesProperty(path, srcValue) {
      if (isKey(path) && isStrictComparable(srcValue)) {
        return matchesStrictComparable(toKey(path), srcValue);
      }
      return function(object) {
        var objValue = get(object, path);
        return (objValue === undefined && objValue === srcValue)
          ? hasIn(object, path)
          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
      };
    }

    /**
     * The base implementation of `_.merge` without support for multiple sources.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} [customizer] The function to customize merged values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMerge(object, source, srcIndex, customizer, stack) {
      if (object === source) {
        return;
      }
      baseFor(source, function(srcValue, key) {
        stack || (stack = new Stack);
        if (isObject(srcValue)) {
          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
        }
        else {
          var newValue = customizer
            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
            : undefined;

          if (newValue === undefined) {
            newValue = srcValue;
          }
          assignMergeValue(object, key, newValue);
        }
      }, keysIn);
    }

    /**
     * A specialized version of `baseMerge` for arrays and objects which performs
     * deep merges and tracks traversed objects enabling objects with circular
     * references to be merged.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {string} key The key of the value to merge.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} mergeFunc The function to merge values.
     * @param {Function} [customizer] The function to customize assigned values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
      var objValue = safeGet(object, key),
          srcValue = safeGet(source, key),
          stacked = stack.get(srcValue);

      if (stacked) {
        assignMergeValue(object, key, stacked);
        return;
      }
      var newValue = customizer
        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
        : undefined;

      var isCommon = newValue === undefined;

      if (isCommon) {
        var isArr = isArray(srcValue),
            isBuff = !isArr && isBuffer(srcValue),
            isTyped = !isArr && !isBuff && isTypedArray(srcValue);

        newValue = srcValue;
        if (isArr || isBuff || isTyped) {
          if (isArray(objValue)) {
            newValue = objValue;
          }
          else if (isArrayLikeObject(objValue)) {
            newValue = copyArray(objValue);
          }
          else if (isBuff) {
            isCommon = false;
            newValue = cloneBuffer(srcValue, true);
          }
          else if (isTyped) {
            isCommon = false;
            newValue = cloneTypedArray(srcValue, true);
          }
          else {
            newValue = [];
          }
        }
        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
          newValue = objValue;
          if (isArguments(objValue)) {
            newValue = toPlainObject(objValue);
          }
          else if (!isObject(objValue) || isFunction(objValue)) {
            newValue = initCloneObject(srcValue);
          }
        }
        else {
          isCommon = false;
        }
      }
      if (isCommon) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, newValue);
        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
        stack['delete'](srcValue);
      }
      assignMergeValue(object, key, newValue);
    }

    /**
     * The base implementation of `_.nth` which doesn't coerce arguments.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {number} n The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     */
    function baseNth(array, n) {
      var length = array.length;
      if (!length) {
        return;
      }
      n += n < 0 ? length : 0;
      return isIndex(n, length) ? array[n] : undefined;
    }

    /**
     * The base implementation of `_.orderBy` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
     * @param {string[]} orders The sort orders of `iteratees`.
     * @returns {Array} Returns the new sorted array.
     */
    function baseOrderBy(collection, iteratees, orders) {
      if (iteratees.length) {
        iteratees = arrayMap(iteratees, function(iteratee) {
          if (isArray(iteratee)) {
            return function(value) {
              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
            }
          }
          return iteratee;
        });
      } else {
        iteratees = [identity];
      }

      var index = -1;
      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));

      var result = baseMap(collection, function(value, key, collection) {
        var criteria = arrayMap(iteratees, function(iteratee) {
          return iteratee(value);
        });
        return { 'criteria': criteria, 'index': ++index, 'value': value };
      });

      return baseSortBy(result, function(object, other) {
        return compareMultiple(object, other, orders);
      });
    }

    /**
     * The base implementation of `_.pick` without support for individual
     * property identifiers.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @returns {Object} Returns the new object.
     */
    function basePick(object, paths) {
      return basePickBy(object, paths, function(value, path) {
        return hasIn(object, path);
      });
    }

    /**
     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @param {Function} predicate The function invoked per property.
     * @returns {Object} Returns the new object.
     */
    function basePickBy(object, paths, predicate) {
      var index = -1,
          length = paths.length,
          result = {};

      while (++index < length) {
        var path = paths[index],
            value = baseGet(object, path);

        if (predicate(value, path)) {
          baseSet(result, castPath(path, object), value);
        }
      }
      return result;
    }

    /**
     * A specialized version of `baseProperty` which supports deep paths.
     *
     * @private
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     */
    function basePropertyDeep(path) {
      return function(object) {
        return baseGet(object, path);
      };
    }

    /**
     * The base implementation of `_.pullAllBy` without support for iteratee
     * shorthands.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     */
    function basePullAll(array, values, iteratee, comparator) {
      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
          index = -1,
          length = values.length,
          seen = array;

      if (array === values) {
        values = copyArray(values);
      }
      if (iteratee) {
        seen = arrayMap(array, baseUnary(iteratee));
      }
      while (++index < length) {
        var fromIndex = 0,
            value = values[index],
            computed = iteratee ? iteratee(value) : value;

        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
          if (seen !== array) {
            splice.call(seen, fromIndex, 1);
          }
          splice.call(array, fromIndex, 1);
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.pullAt` without support for individual
     * indexes or capturing the removed elements.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {number[]} indexes The indexes of elements to remove.
     * @returns {Array} Returns `array`.
     */
    function basePullAt(array, indexes) {
      var length = array ? indexes.length : 0,
          lastIndex = length - 1;

      while (length--) {
        var index = indexes[length];
        if (length == lastIndex || index !== previous) {
          var previous = index;
          if (isIndex(index)) {
            splice.call(array, index, 1);
          } else {
            baseUnset(array, index);
          }
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.random` without support for returning
     * floating-point numbers.
     *
     * @private
     * @param {number} lower The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the random number.
     */
    function baseRandom(lower, upper) {
      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
    }

    /**
     * The base implementation of `_.range` and `_.rangeRight` which doesn't
     * coerce arguments.
     *
     * @private
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @param {number} step The value to increment or decrement by.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the range of numbers.
     */
    function baseRange(start, end, step, fromRight) {
      var index = -1,
          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
          result = Array(length);

      while (length--) {
        result[fromRight ? length : ++index] = start;
        start += step;
      }
      return result;
    }

    /**
     * The base implementation of `_.repeat` which doesn't coerce arguments.
     *
     * @private
     * @param {string} string The string to repeat.
     * @param {number} n The number of times to repeat the string.
     * @returns {string} Returns the repeated string.
     */
    function baseRepeat(string, n) {
      var result = '';
      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
        return result;
      }
      // Leverage the exponentiation by squaring algorithm for a faster repeat.
      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
      do {
        if (n % 2) {
          result += string;
        }
        n = nativeFloor(n / 2);
        if (n) {
          string += string;
        }
      } while (n);

      return result;
    }

    /**
     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     */
    function baseRest(func, start) {
      return setToString(overRest(func, start, identity), func + '');
    }

    /**
     * The base implementation of `_.sample`.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     */
    function baseSample(collection) {
      return arraySample(values(collection));
    }

    /**
     * The base implementation of `_.sampleSize` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function baseSampleSize(collection, n) {
      var array = values(collection);
      return shuffleSelf(array, baseClamp(n, 0, array.length));
    }

    /**
     * The base implementation of `_.set`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseSet(object, path, value, customizer) {
      if (!isObject(object)) {
        return object;
      }
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          lastIndex = length - 1,
          nested = object;

      while (nested != null && ++index < length) {
        var key = toKey(path[index]),
            newValue = value;

        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
          return object;
        }

        if (index != lastIndex) {
          var objValue = nested[key];
          newValue = customizer ? customizer(objValue, key, nested) : undefined;
          if (newValue === undefined) {
            newValue = isObject(objValue)
              ? objValue
              : (isIndex(path[index + 1]) ? [] : {});
          }
        }
        assignValue(nested, key, newValue);
        nested = nested[key];
      }
      return object;
    }

    /**
     * The base implementation of `setData` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var baseSetData = !metaMap ? identity : function(func, data) {
      metaMap.set(func, data);
      return func;
    };

    /**
     * The base implementation of `setToString` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var baseSetToString = !defineProperty ? identity : function(func, string) {
      return defineProperty(func, 'toString', {
        'configurable': true,
        'enumerable': false,
        'value': constant(string),
        'writable': true
      });
    };

    /**
     * The base implementation of `_.shuffle`.
     *
     * @private
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function baseShuffle(collection) {
      return shuffleSelf(values(collection));
    }

    /**
     * The base implementation of `_.slice` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseSlice(array, start, end) {
      var index = -1,
          length = array.length;

      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = end > length ? length : end;
      if (end < 0) {
        end += length;
      }
      length = start > end ? 0 : ((end - start) >>> 0);
      start >>>= 0;

      var result = Array(length);
      while (++index < length) {
        result[index] = array[index + start];
      }
      return result;
    }

    /**
     * The base implementation of `_.some` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     */
    function baseSome(collection, predicate) {
      var result;

      baseEach(collection, function(value, index, collection) {
        result = predicate(value, index, collection);
        return !result;
      });
      return !!result;
    }

    /**
     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
     * performs a binary search of `array` to determine the index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndex(array, value, retHighest) {
      var low = 0,
          high = array == null ? low : array.length;

      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
        while (low < high) {
          var mid = (low + high) >>> 1,
              computed = array[mid];

          if (computed !== null && !isSymbol(computed) &&
              (retHighest ? (computed <= value) : (computed < value))) {
            low = mid + 1;
          } else {
            high = mid;
          }
        }
        return high;
      }
      return baseSortedIndexBy(array, value, identity, retHighest);
    }

    /**
     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
     * which invokes `iteratee` for `value` and each element of `array` to compute
     * their sort ranking. The iteratee is invoked with one argument; (value).
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} iteratee The iteratee invoked per element.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndexBy(array, value, iteratee, retHighest) {
      var low = 0,
          high = array == null ? 0 : array.length;
      if (high === 0) {
        return 0;
      }

      value = iteratee(value);
      var valIsNaN = value !== value,
          valIsNull = value === null,
          valIsSymbol = isSymbol(value),
          valIsUndefined = value === undefined;

      while (low < high) {
        var mid = nativeFloor((low + high) / 2),
            computed = iteratee(array[mid]),
            othIsDefined = computed !== undefined,
            othIsNull = computed === null,
            othIsReflexive = computed === computed,
            othIsSymbol = isSymbol(computed);

        if (valIsNaN) {
          var setLow = retHighest || othIsReflexive;
        } else if (valIsUndefined) {
          setLow = othIsReflexive && (retHighest || othIsDefined);
        } else if (valIsNull) {
          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
        } else if (valIsSymbol) {
          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
        } else if (othIsNull || othIsSymbol) {
          setLow = false;
        } else {
          setLow = retHighest ? (computed <= value) : (computed < value);
        }
        if (setLow) {
          low = mid + 1;
        } else {
          high = mid;
        }
      }
      return nativeMin(high, MAX_ARRAY_INDEX);
    }

    /**
     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
     * support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseSortedUniq(array, iteratee) {
      var index = -1,
          length = array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        if (!index || !eq(computed, seen)) {
          var seen = computed;
          result[resIndex++] = value === 0 ? 0 : value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.toNumber` which doesn't ensure correct
     * conversions of binary, hexadecimal, or octal string values.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     */
    function baseToNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      return +value;
    }

    /**
     * The base implementation of `_.toString` which doesn't convert nullish
     * values to empty strings.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {string} Returns the string.
     */
    function baseToString(value) {
      // Exit early for strings to avoid a performance hit in some environments.
      if (typeof value == 'string') {
        return value;
      }
      if (isArray(value)) {
        // Recursively convert values (susceptible to call stack limits).
        return arrayMap(value, baseToString) + '';
      }
      if (isSymbol(value)) {
        return symbolToString ? symbolToString.call(value) : '';
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseUniq(array, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          length = array.length,
          isCommon = true,
          result = [],
          seen = result;

      if (comparator) {
        isCommon = false;
        includes = arrayIncludesWith;
      }
      else if (length >= LARGE_ARRAY_SIZE) {
        var set = iteratee ? null : createSet(array);
        if (set) {
          return setToArray(set);
        }
        isCommon = false;
        includes = cacheHas;
        seen = new SetCache;
      }
      else {
        seen = iteratee ? [] : result;
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value);
        }
        else if (!includes(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.unset`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The property path to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     */
    function baseUnset(object, path) {
      path = castPath(path, object);
      object = parent(object, path);
      return object == null || delete object[toKey(last(path))];
    }

    /**
     * The base implementation of `_.update`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to update.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseUpdate(object, path, updater, customizer) {
      return baseSet(object, path, updater(baseGet(object, path)), customizer);
    }

    /**
     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
     * without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {Function} predicate The function invoked per iteration.
     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseWhile(array, predicate, isDrop, fromRight) {
      var length = array.length,
          index = fromRight ? length : -1;

      while ((fromRight ? index-- : ++index < length) &&
        predicate(array[index], index, array)) {}

      return isDrop
        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
    }

    /**
     * The base implementation of `wrapperValue` which returns the result of
     * performing a sequence of actions on the unwrapped `value`, where each
     * successive action is supplied the return value of the previous.
     *
     * @private
     * @param {*} value The unwrapped value.
     * @param {Array} actions Actions to perform to resolve the unwrapped value.
     * @returns {*} Returns the resolved value.
     */
    function baseWrapperValue(value, actions) {
      var result = value;
      if (result instanceof LazyWrapper) {
        result = result.value();
      }
      return arrayReduce(actions, function(result, action) {
        return action.func.apply(action.thisArg, arrayPush([result], action.args));
      }, result);
    }

    /**
     * The base implementation of methods like `_.xor`, without support for
     * iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of values.
     */
    function baseXor(arrays, iteratee, comparator) {
      var length = arrays.length;
      if (length < 2) {
        return length ? baseUniq(arrays[0]) : [];
      }
      var index = -1,
          result = Array(length);

      while (++index < length) {
        var array = arrays[index],
            othIndex = -1;

        while (++othIndex < length) {
          if (othIndex != index) {
            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
          }
        }
      }
      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
    }

    /**
     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
     *
     * @private
     * @param {Array} props The property identifiers.
     * @param {Array} values The property values.
     * @param {Function} assignFunc The function to assign values.
     * @returns {Object} Returns the new object.
     */
    function baseZipObject(props, values, assignFunc) {
      var index = -1,
          length = props.length,
          valsLength = values.length,
          result = {};

      while (++index < length) {
        var value = index < valsLength ? values[index] : undefined;
        assignFunc(result, props[index], value);
      }
      return result;
    }

    /**
     * Casts `value` to an empty array if it's not an array like object.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Array|Object} Returns the cast array-like object.
     */
    function castArrayLikeObject(value) {
      return isArrayLikeObject(value) ? value : [];
    }

    /**
     * Casts `value` to `identity` if it's not a function.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Function} Returns cast function.
     */
    function castFunction(value) {
      return typeof value == 'function' ? value : identity;
    }

    /**
     * Casts `value` to a path array if it's not one.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {Object} [object] The object to query keys on.
     * @returns {Array} Returns the cast property path array.
     */
    function castPath(value, object) {
      if (isArray(value)) {
        return value;
      }
      return isKey(value, object) ? [value] : stringToPath(toString(value));
    }

    /**
     * A `baseRest` alias which can be replaced with `identity` by module
     * replacement plugins.
     *
     * @private
     * @type {Function}
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    var castRest = baseRest;

    /**
     * Casts `array` to a slice if it's needed.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {number} start The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the cast slice.
     */
    function castSlice(array, start, end) {
      var length = array.length;
      end = end === undefined ? length : end;
      return (!start && end >= length) ? array : baseSlice(array, start, end);
    }

    /**
     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
     *
     * @private
     * @param {number|Object} id The timer id or timeout object of the timer to clear.
     */
    var clearTimeout = ctxClearTimeout || function(id) {
      return root.clearTimeout(id);
    };

    /**
     * Creates a clone of  `buffer`.
     *
     * @private
     * @param {Buffer} buffer The buffer to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Buffer} Returns the cloned buffer.
     */
    function cloneBuffer(buffer, isDeep) {
      if (isDeep) {
        return buffer.slice();
      }
      var length = buffer.length,
          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);

      buffer.copy(result);
      return result;
    }

    /**
     * Creates a clone of `arrayBuffer`.
     *
     * @private
     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
     * @returns {ArrayBuffer} Returns the cloned array buffer.
     */
    function cloneArrayBuffer(arrayBuffer) {
      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
      return result;
    }

    /**
     * Creates a clone of `dataView`.
     *
     * @private
     * @param {Object} dataView The data view to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned data view.
     */
    function cloneDataView(dataView, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
    }

    /**
     * Creates a clone of `regexp`.
     *
     * @private
     * @param {Object} regexp The regexp to clone.
     * @returns {Object} Returns the cloned regexp.
     */
    function cloneRegExp(regexp) {
      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
      result.lastIndex = regexp.lastIndex;
      return result;
    }

    /**
     * Creates a clone of the `symbol` object.
     *
     * @private
     * @param {Object} symbol The symbol object to clone.
     * @returns {Object} Returns the cloned symbol object.
     */
    function cloneSymbol(symbol) {
      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
    }

    /**
     * Creates a clone of `typedArray`.
     *
     * @private
     * @param {Object} typedArray The typed array to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned typed array.
     */
    function cloneTypedArray(typedArray, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
    }

    /**
     * Compares values to sort them in ascending order.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {number} Returns the sort order indicator for `value`.
     */
    function compareAscending(value, other) {
      if (value !== other) {
        var valIsDefined = value !== undefined,
            valIsNull = value === null,
            valIsReflexive = value === value,
            valIsSymbol = isSymbol(value);

        var othIsDefined = other !== undefined,
            othIsNull = other === null,
            othIsReflexive = other === other,
            othIsSymbol = isSymbol(other);

        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
            (valIsNull && othIsDefined && othIsReflexive) ||
            (!valIsDefined && othIsReflexive) ||
            !valIsReflexive) {
          return 1;
        }
        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
            (othIsNull && valIsDefined && valIsReflexive) ||
            (!othIsDefined && valIsReflexive) ||
            !othIsReflexive) {
          return -1;
        }
      }
      return 0;
    }

    /**
     * Used by `_.orderBy` to compare multiple properties of a value to another
     * and stable sort them.
     *
     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
     * specify an order of "desc" for descending or "asc" for ascending sort order
     * of corresponding values.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {boolean[]|string[]} orders The order to sort by for each property.
     * @returns {number} Returns the sort order indicator for `object`.
     */
    function compareMultiple(object, other, orders) {
      var index = -1,
          objCriteria = object.criteria,
          othCriteria = other.criteria,
          length = objCriteria.length,
          ordersLength = orders.length;

      while (++index < length) {
        var result = compareAscending(objCriteria[index], othCriteria[index]);
        if (result) {
          if (index >= ordersLength) {
            return result;
          }
          var order = orders[index];
          return result * (order == 'desc' ? -1 : 1);
        }
      }
      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
      // that causes it, under certain circumstances, to provide the same value for
      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
      // for more details.
      //
      // This also ensures a stable sort in V8 and other engines.
      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
      return object.index - other.index;
    }

    /**
     * Creates an array that is the composition of partially applied arguments,
     * placeholders, and provided arguments into a single array of arguments.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to prepend to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgs(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersLength = holders.length,
          leftIndex = -1,
          leftLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(leftLength + rangeLength),
          isUncurried = !isCurried;

      while (++leftIndex < leftLength) {
        result[leftIndex] = partials[leftIndex];
      }
      while (++argsIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[holders[argsIndex]] = args[argsIndex];
        }
      }
      while (rangeLength--) {
        result[leftIndex++] = args[argsIndex++];
      }
      return result;
    }

    /**
     * This function is like `composeArgs` except that the arguments composition
     * is tailored for `_.partialRight`.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to append to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgsRight(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersIndex = -1,
          holdersLength = holders.length,
          rightIndex = -1,
          rightLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(rangeLength + rightLength),
          isUncurried = !isCurried;

      while (++argsIndex < rangeLength) {
        result[argsIndex] = args[argsIndex];
      }
      var offset = argsIndex;
      while (++rightIndex < rightLength) {
        result[offset + rightIndex] = partials[rightIndex];
      }
      while (++holdersIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[offset + holders[holdersIndex]] = args[argsIndex++];
        }
      }
      return result;
    }

    /**
     * Copies the values of `source` to `array`.
     *
     * @private
     * @param {Array} source The array to copy values from.
     * @param {Array} [array=[]] The array to copy values to.
     * @returns {Array} Returns `array`.
     */
    function copyArray(source, array) {
      var index = -1,
          length = source.length;

      array || (array = Array(length));
      while (++index < length) {
        array[index] = source[index];
      }
      return array;
    }

    /**
     * Copies properties of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy properties from.
     * @param {Array} props The property identifiers to copy.
     * @param {Object} [object={}] The object to copy properties to.
     * @param {Function} [customizer] The function to customize copied values.
     * @returns {Object} Returns `object`.
     */
    function copyObject(source, props, object, customizer) {
      var isNew = !object;
      object || (object = {});

      var index = -1,
          length = props.length;

      while (++index < length) {
        var key = props[index];

        var newValue = customizer
          ? customizer(object[key], source[key], key, object, source)
          : undefined;

        if (newValue === undefined) {
          newValue = source[key];
        }
        if (isNew) {
          baseAssignValue(object, key, newValue);
        } else {
          assignValue(object, key, newValue);
        }
      }
      return object;
    }

    /**
     * Copies own symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbols(source, object) {
      return copyObject(source, getSymbols(source), object);
    }

    /**
     * Copies own and inherited symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbolsIn(source, object) {
      return copyObject(source, getSymbolsIn(source), object);
    }

    /**
     * Creates a function like `_.groupBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} [initializer] The accumulator object initializer.
     * @returns {Function} Returns the new aggregator function.
     */
    function createAggregator(setter, initializer) {
      return function(collection, iteratee) {
        var func = isArray(collection) ? arrayAggregator : baseAggregator,
            accumulator = initializer ? initializer() : {};

        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
      };
    }

    /**
     * Creates a function like `_.assign`.
     *
     * @private
     * @param {Function} assigner The function to assign values.
     * @returns {Function} Returns the new assigner function.
     */
    function createAssigner(assigner) {
      return baseRest(function(object, sources) {
        var index = -1,
            length = sources.length,
            customizer = length > 1 ? sources[length - 1] : undefined,
            guard = length > 2 ? sources[2] : undefined;

        customizer = (assigner.length > 3 && typeof customizer == 'function')
          ? (length--, customizer)
          : undefined;

        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
          customizer = length < 3 ? undefined : customizer;
          length = 1;
        }
        object = Object(object);
        while (++index < length) {
          var source = sources[index];
          if (source) {
            assigner(object, source, index, customizer);
          }
        }
        return object;
      });
    }

    /**
     * Creates a `baseEach` or `baseEachRight` function.
     *
     * @private
     * @param {Function} eachFunc The function to iterate over a collection.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseEach(eachFunc, fromRight) {
      return function(collection, iteratee) {
        if (collection == null) {
          return collection;
        }
        if (!isArrayLike(collection)) {
          return eachFunc(collection, iteratee);
        }
        var length = collection.length,
            index = fromRight ? length : -1,
            iterable = Object(collection);

        while ((fromRight ? index-- : ++index < length)) {
          if (iteratee(iterable[index], index, iterable) === false) {
            break;
          }
        }
        return collection;
      };
    }

    /**
     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseFor(fromRight) {
      return function(object, iteratee, keysFunc) {
        var index = -1,
            iterable = Object(object),
            props = keysFunc(object),
            length = props.length;

        while (length--) {
          var key = props[fromRight ? length : ++index];
          if (iteratee(iterable[key], key, iterable) === false) {
            break;
          }
        }
        return object;
      };
    }

    /**
     * Creates a function that wraps `func` to invoke it with the optional `this`
     * binding of `thisArg`.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createBind(func, bitmask, thisArg) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return fn.apply(isBind ? thisArg : this, arguments);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.lowerFirst`.
     *
     * @private
     * @param {string} methodName The name of the `String` case method to use.
     * @returns {Function} Returns the new case function.
     */
    function createCaseFirst(methodName) {
      return function(string) {
        string = toString(string);

        var strSymbols = hasUnicode(string)
          ? stringToArray(string)
          : undefined;

        var chr = strSymbols
          ? strSymbols[0]
          : string.charAt(0);

        var trailing = strSymbols
          ? castSlice(strSymbols, 1).join('')
          : string.slice(1);

        return chr[methodName]() + trailing;
      };
    }

    /**
     * Creates a function like `_.camelCase`.
     *
     * @private
     * @param {Function} callback The function to combine each word.
     * @returns {Function} Returns the new compounder function.
     */
    function createCompounder(callback) {
      return function(string) {
        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
      };
    }

    /**
     * Creates a function that produces an instance of `Ctor` regardless of
     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
     *
     * @private
     * @param {Function} Ctor The constructor to wrap.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCtor(Ctor) {
      return function() {
        // Use a `switch` statement to work with class constructors. See
        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
        // for more details.
        var args = arguments;
        switch (args.length) {
          case 0: return new Ctor;
          case 1: return new Ctor(args[0]);
          case 2: return new Ctor(args[0], args[1]);
          case 3: return new Ctor(args[0], args[1], args[2]);
          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
        }
        var thisBinding = baseCreate(Ctor.prototype),
            result = Ctor.apply(thisBinding, args);

        // Mimic the constructor's `return` behavior.
        // See https://es5.github.io/#x13.2.2 for more details.
        return isObject(result) ? result : thisBinding;
      };
    }

    /**
     * Creates a function that wraps `func` to enable currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {number} arity The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCurry(func, bitmask, arity) {
      var Ctor = createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length,
            placeholder = getHolder(wrapper);

        while (index--) {
          args[index] = arguments[index];
        }
        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
          ? []
          : replaceHolders(args, placeholder);

        length -= holders.length;
        if (length < arity) {
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, undefined,
            args, holders, undefined, undefined, arity - length);
        }
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return apply(fn, this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.find` or `_.findLast` function.
     *
     * @private
     * @param {Function} findIndexFunc The function to find the collection index.
     * @returns {Function} Returns the new find function.
     */
    function createFind(findIndexFunc) {
      return function(collection, predicate, fromIndex) {
        var iterable = Object(collection);
        if (!isArrayLike(collection)) {
          var iteratee = getIteratee(predicate, 3);
          collection = keys(collection);
          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
        }
        var index = findIndexFunc(collection, predicate, fromIndex);
        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
      };
    }

    /**
     * Creates a `_.flow` or `_.flowRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new flow function.
     */
    function createFlow(fromRight) {
      return flatRest(function(funcs) {
        var length = funcs.length,
            index = length,
            prereq = LodashWrapper.prototype.thru;

        if (fromRight) {
          funcs.reverse();
        }
        while (index--) {
          var func = funcs[index];
          if (typeof func != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT);
          }
          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
            var wrapper = new LodashWrapper([], true);
          }
        }
        index = wrapper ? index : length;
        while (++index < length) {
          func = funcs[index];

          var funcName = getFuncName(func),
              data = funcName == 'wrapper' ? getData(func) : undefined;

          if (data && isLaziable(data[0]) &&
                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
                !data[4].length && data[9] == 1
              ) {
            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
          } else {
            wrapper = (func.length == 1 && isLaziable(func))
              ? wrapper[funcName]()
              : wrapper.thru(func);
          }
        }
        return function() {
          var args = arguments,
              value = args[0];

          if (wrapper && args.length == 1 && isArray(value)) {
            return wrapper.plant(value).value();
          }
          var index = 0,
              result = length ? funcs[index].apply(this, args) : value;

          while (++index < length) {
            result = funcs[index].call(this, result);
          }
          return result;
        };
      });
    }

    /**
     * Creates a function that wraps `func` to invoke it with optional `this`
     * binding of `thisArg`, partial application, and currying.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [partialsRight] The arguments to append to those provided
     *  to the new function.
     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
      var isAry = bitmask & WRAP_ARY_FLAG,
          isBind = bitmask & WRAP_BIND_FLAG,
          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
          isFlip = bitmask & WRAP_FLIP_FLAG,
          Ctor = isBindKey ? undefined : createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length;

        while (index--) {
          args[index] = arguments[index];
        }
        if (isCurried) {
          var placeholder = getHolder(wrapper),
              holdersCount = countHolders(args, placeholder);
        }
        if (partials) {
          args = composeArgs(args, partials, holders, isCurried);
        }
        if (partialsRight) {
          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
        }
        length -= holdersCount;
        if (isCurried && length < arity) {
          var newHolders = replaceHolders(args, placeholder);
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
            args, newHolders, argPos, ary, arity - length
          );
        }
        var thisBinding = isBind ? thisArg : this,
            fn = isBindKey ? thisBinding[func] : func;

        length = args.length;
        if (argPos) {
          args = reorder(args, argPos);
        } else if (isFlip && length > 1) {
          args.reverse();
        }
        if (isAry && ary < length) {
          args.length = ary;
        }
        if (this && this !== root && this instanceof wrapper) {
          fn = Ctor || createCtor(fn);
        }
        return fn.apply(thisBinding, args);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.invertBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} toIteratee The function to resolve iteratees.
     * @returns {Function} Returns the new inverter function.
     */
    function createInverter(setter, toIteratee) {
      return function(object, iteratee) {
        return baseInverter(object, setter, toIteratee(iteratee), {});
      };
    }

    /**
     * Creates a function that performs a mathematical operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @param {number} [defaultValue] The value used for `undefined` arguments.
     * @returns {Function} Returns the new mathematical operation function.
     */
    function createMathOperation(operator, defaultValue) {
      return function(value, other) {
        var result;
        if (value === undefined && other === undefined) {
          return defaultValue;
        }
        if (value !== undefined) {
          result = value;
        }
        if (other !== undefined) {
          if (result === undefined) {
            return other;
          }
          if (typeof value == 'string' || typeof other == 'string') {
            value = baseToString(value);
            other = baseToString(other);
          } else {
            value = baseToNumber(value);
            other = baseToNumber(other);
          }
          result = operator(value, other);
        }
        return result;
      };
    }

    /**
     * Creates a function like `_.over`.
     *
     * @private
     * @param {Function} arrayFunc The function to iterate over iteratees.
     * @returns {Function} Returns the new over function.
     */
    function createOver(arrayFunc) {
      return flatRest(function(iteratees) {
        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
        return baseRest(function(args) {
          var thisArg = this;
          return arrayFunc(iteratees, function(iteratee) {
            return apply(iteratee, thisArg, args);
          });
        });
      });
    }

    /**
     * Creates the padding for `string` based on `length`. The `chars` string
     * is truncated if the number of characters exceeds `length`.
     *
     * @private
     * @param {number} length The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padding for `string`.
     */
    function createPadding(length, chars) {
      chars = chars === undefined ? ' ' : baseToString(chars);

      var charsLength = chars.length;
      if (charsLength < 2) {
        return charsLength ? baseRepeat(chars, length) : chars;
      }
      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
      return hasUnicode(chars)
        ? castSlice(stringToArray(result), 0, length).join('')
        : result.slice(0, length);
    }

    /**
     * Creates a function that wraps `func` to invoke it with the `this` binding
     * of `thisArg` and `partials` prepended to the arguments it receives.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} partials The arguments to prepend to those provided to
     *  the new function.
     * @returns {Function} Returns the new wrapped function.
     */
    function createPartial(func, bitmask, thisArg, partials) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var argsIndex = -1,
            argsLength = arguments.length,
            leftIndex = -1,
            leftLength = partials.length,
            args = Array(leftLength + argsLength),
            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;

        while (++leftIndex < leftLength) {
          args[leftIndex] = partials[leftIndex];
        }
        while (argsLength--) {
          args[leftIndex++] = arguments[++argsIndex];
        }
        return apply(fn, isBind ? thisArg : this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.range` or `_.rangeRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new range function.
     */
    function createRange(fromRight) {
      return function(start, end, step) {
        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
          end = step = undefined;
        }
        // Ensure the sign of `-0` is preserved.
        start = toFinite(start);
        if (end === undefined) {
          end = start;
          start = 0;
        } else {
          end = toFinite(end);
        }
        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
        return baseRange(start, end, step, fromRight);
      };
    }

    /**
     * Creates a function that performs a relational operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @returns {Function} Returns the new relational operation function.
     */
    function createRelationalOperation(operator) {
      return function(value, other) {
        if (!(typeof value == 'string' && typeof other == 'string')) {
          value = toNumber(value);
          other = toNumber(other);
        }
        return operator(value, other);
      };
    }

    /**
     * Creates a function that wraps `func` to continue currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {Function} wrapFunc The function to create the `func` wrapper.
     * @param {*} placeholder The placeholder value.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
      var isCurry = bitmask & WRAP_CURRY_FLAG,
          newHolders = isCurry ? holders : undefined,
          newHoldersRight = isCurry ? undefined : holders,
          newPartials = isCurry ? partials : undefined,
          newPartialsRight = isCurry ? undefined : partials;

      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);

      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
      }
      var newData = [
        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
        newHoldersRight, argPos, ary, arity
      ];

      var result = wrapFunc.apply(undefined, newData);
      if (isLaziable(func)) {
        setData(result, newData);
      }
      result.placeholder = placeholder;
      return setWrapToString(result, func, bitmask);
    }

    /**
     * Creates a function like `_.round`.
     *
     * @private
     * @param {string} methodName The name of the `Math` method to use when rounding.
     * @returns {Function} Returns the new round function.
     */
    function createRound(methodName) {
      var func = Math[methodName];
      return function(number, precision) {
        number = toNumber(number);
        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
        if (precision && nativeIsFinite(number)) {
          // Shift with exponential notation to avoid floating-point issues.
          // See [MDN](https://mdn.io/round#Examples) for more details.
          var pair = (toString(number) + 'e').split('e'),
              value = func(pair[0] + 'e' + (+pair[1] + precision));

          pair = (toString(value) + 'e').split('e');
          return +(pair[0] + 'e' + (+pair[1] - precision));
        }
        return func(number);
      };
    }

    /**
     * Creates a set object of `values`.
     *
     * @private
     * @param {Array} values The values to add to the set.
     * @returns {Object} Returns the new set.
     */
    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
      return new Set(values);
    };

    /**
     * Creates a `_.toPairs` or `_.toPairsIn` function.
     *
     * @private
     * @param {Function} keysFunc The function to get the keys of a given object.
     * @returns {Function} Returns the new pairs function.
     */
    function createToPairs(keysFunc) {
      return function(object) {
        var tag = getTag(object);
        if (tag == mapTag) {
          return mapToArray(object);
        }
        if (tag == setTag) {
          return setToPairs(object);
        }
        return baseToPairs(object, keysFunc(object));
      };
    }

    /**
     * Creates a function that either curries or invokes `func` with optional
     * `this` binding and partially applied arguments.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags.
     *    1 - `_.bind`
     *    2 - `_.bindKey`
     *    4 - `_.curry` or `_.curryRight` of a bound function
     *    8 - `_.curry`
     *   16 - `_.curryRight`
     *   32 - `_.partial`
     *   64 - `_.partialRight`
     *  128 - `_.rearg`
     *  256 - `_.ary`
     *  512 - `_.flip`
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to be partially applied.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
      if (!isBindKey && typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var length = partials ? partials.length : 0;
      if (!length) {
        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
        partials = holders = undefined;
      }
      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
      arity = arity === undefined ? arity : toInteger(arity);
      length -= holders ? holders.length : 0;

      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
        var partialsRight = partials,
            holdersRight = holders;

        partials = holders = undefined;
      }
      var data = isBindKey ? undefined : getData(func);

      var newData = [
        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
        argPos, ary, arity
      ];

      if (data) {
        mergeData(newData, data);
      }
      func = newData[0];
      bitmask = newData[1];
      thisArg = newData[2];
      partials = newData[3];
      holders = newData[4];
      arity = newData[9] = newData[9] === undefined
        ? (isBindKey ? 0 : func.length)
        : nativeMax(newData[9] - length, 0);

      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
      }
      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
        var result = createBind(func, bitmask, thisArg);
      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
        result = createCurry(func, bitmask, arity);
      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
        result = createPartial(func, bitmask, thisArg, partials);
      } else {
        result = createHybrid.apply(undefined, newData);
      }
      var setter = data ? baseSetData : setData;
      return setWrapToString(setter(result, newData), func, bitmask);
    }

    /**
     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
     * of source objects to the destination object for all destination properties
     * that resolve to `undefined`.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to assign.
     * @param {Object} object The parent object of `objValue`.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsAssignIn(objValue, srcValue, key, object) {
      if (objValue === undefined ||
          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
        return srcValue;
      }
      return objValue;
    }

    /**
     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
     * objects into destination objects that are passed thru.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to merge.
     * @param {Object} object The parent object of `objValue`.
     * @param {Object} source The parent object of `srcValue`.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
      if (isObject(objValue) && isObject(srcValue)) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, objValue);
        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
        stack['delete'](srcValue);
      }
      return objValue;
    }

    /**
     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
     * objects.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {string} key The key of the property to inspect.
     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
     */
    function customOmitClone(value) {
      return isPlainObject(value) ? undefined : value;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for arrays with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Array} array The array to compare.
     * @param {Array} other The other array to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `array` and `other` objects.
     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
     */
    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          arrLength = array.length,
          othLength = other.length;

      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
        return false;
      }
      // Check that cyclic values are equal.
      var arrStacked = stack.get(array);
      var othStacked = stack.get(other);
      if (arrStacked && othStacked) {
        return arrStacked == other && othStacked == array;
      }
      var index = -1,
          result = true,
          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;

      stack.set(array, other);
      stack.set(other, array);

      // Ignore non-index properties.
      while (++index < arrLength) {
        var arrValue = array[index],
            othValue = other[index];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, arrValue, index, other, array, stack)
            : customizer(arrValue, othValue, index, array, other, stack);
        }
        if (compared !== undefined) {
          if (compared) {
            continue;
          }
          result = false;
          break;
        }
        // Recursively compare arrays (susceptible to call stack limits).
        if (seen) {
          if (!arraySome(other, function(othValue, othIndex) {
                if (!cacheHas(seen, othIndex) &&
                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
                  return seen.push(othIndex);
                }
              })) {
            result = false;
            break;
          }
        } else if (!(
              arrValue === othValue ||
                equalFunc(arrValue, othValue, bitmask, customizer, stack)
            )) {
          result = false;
          break;
        }
      }
      stack['delete'](array);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for comparing objects of
     * the same `toStringTag`.
     *
     * **Note:** This function only supports comparing values with tags of
     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {string} tag The `toStringTag` of the objects to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
      switch (tag) {
        case dataViewTag:
          if ((object.byteLength != other.byteLength) ||
              (object.byteOffset != other.byteOffset)) {
            return false;
          }
          object = object.buffer;
          other = other.buffer;

        case arrayBufferTag:
          if ((object.byteLength != other.byteLength) ||
              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
            return false;
          }
          return true;

        case boolTag:
        case dateTag:
        case numberTag:
          // Coerce booleans to `1` or `0` and dates to milliseconds.
          // Invalid dates are coerced to `NaN`.
          return eq(+object, +other);

        case errorTag:
          return object.name == other.name && object.message == other.message;

        case regexpTag:
        case stringTag:
          // Coerce regexes to strings and treat strings, primitives and objects,
          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
          // for more details.
          return object == (other + '');

        case mapTag:
          var convert = mapToArray;

        case setTag:
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
          convert || (convert = setToArray);

          if (object.size != other.size && !isPartial) {
            return false;
          }
          // Assume cyclic values are equal.
          var stacked = stack.get(object);
          if (stacked) {
            return stacked == other;
          }
          bitmask |= COMPARE_UNORDERED_FLAG;

          // Recursively compare objects (susceptible to call stack limits).
          stack.set(object, other);
          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
          stack['delete'](object);
          return result;

        case symbolTag:
          if (symbolValueOf) {
            return symbolValueOf.call(object) == symbolValueOf.call(other);
          }
      }
      return false;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for objects with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          objProps = getAllKeys(object),
          objLength = objProps.length,
          othProps = getAllKeys(other),
          othLength = othProps.length;

      if (objLength != othLength && !isPartial) {
        return false;
      }
      var index = objLength;
      while (index--) {
        var key = objProps[index];
        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
          return false;
        }
      }
      // Check that cyclic values are equal.
      var objStacked = stack.get(object);
      var othStacked = stack.get(other);
      if (objStacked && othStacked) {
        return objStacked == other && othStacked == object;
      }
      var result = true;
      stack.set(object, other);
      stack.set(other, object);

      var skipCtor = isPartial;
      while (++index < objLength) {
        key = objProps[index];
        var objValue = object[key],
            othValue = other[key];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, objValue, key, other, object, stack)
            : customizer(objValue, othValue, key, object, other, stack);
        }
        // Recursively compare objects (susceptible to call stack limits).
        if (!(compared === undefined
              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
              : compared
            )) {
          result = false;
          break;
        }
        skipCtor || (skipCtor = key == 'constructor');
      }
      if (result && !skipCtor) {
        var objCtor = object.constructor,
            othCtor = other.constructor;

        // Non `Object` object instances with different constructors are not equal.
        if (objCtor != othCtor &&
            ('constructor' in object && 'constructor' in other) &&
            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
          result = false;
        }
      }
      stack['delete'](object);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseRest` which flattens the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    function flatRest(func) {
      return setToString(overRest(func, undefined, flatten), func + '');
    }

    /**
     * Creates an array of own enumerable property names and symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeys(object) {
      return baseGetAllKeys(object, keys, getSymbols);
    }

    /**
     * Creates an array of own and inherited enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeysIn(object) {
      return baseGetAllKeys(object, keysIn, getSymbolsIn);
    }

    /**
     * Gets metadata for `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {*} Returns the metadata for `func`.
     */
    var getData = !metaMap ? noop : function(func) {
      return metaMap.get(func);
    };

    /**
     * Gets the name of `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {string} Returns the function name.
     */
    function getFuncName(func) {
      var result = (func.name + ''),
          array = realNames[result],
          length = hasOwnProperty.call(realNames, result) ? array.length : 0;

      while (length--) {
        var data = array[length],
            otherFunc = data.func;
        if (otherFunc == null || otherFunc == func) {
          return data.name;
        }
      }
      return result;
    }

    /**
     * Gets the argument placeholder value for `func`.
     *
     * @private
     * @param {Function} func The function to inspect.
     * @returns {*} Returns the placeholder value.
     */
    function getHolder(func) {
      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
      return object.placeholder;
    }

    /**
     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
     * this function returns the custom method, otherwise it returns `baseIteratee`.
     * If arguments are provided, the chosen function is invoked with them and
     * its result is returned.
     *
     * @private
     * @param {*} [value] The value to convert to an iteratee.
     * @param {number} [arity] The arity of the created iteratee.
     * @returns {Function} Returns the chosen function or its result.
     */
    function getIteratee() {
      var result = lodash.iteratee || iteratee;
      result = result === iteratee ? baseIteratee : result;
      return arguments.length ? result(arguments[0], arguments[1]) : result;
    }

    /**
     * Gets the data for `map`.
     *
     * @private
     * @param {Object} map The map to query.
     * @param {string} key The reference key.
     * @returns {*} Returns the map data.
     */
    function getMapData(map, key) {
      var data = map.__data__;
      return isKeyable(key)
        ? data[typeof key == 'string' ? 'string' : 'hash']
        : data.map;
    }

    /**
     * Gets the property names, values, and compare flags of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the match data of `object`.
     */
    function getMatchData(object) {
      var result = keys(object),
          length = result.length;

      while (length--) {
        var key = result[length],
            value = object[key];

        result[length] = [key, value, isStrictComparable(value)];
      }
      return result;
    }

    /**
     * Gets the native function at `key` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the method to get.
     * @returns {*} Returns the function if it's native, else `undefined`.
     */
    function getNative(object, key) {
      var value = getValue(object, key);
      return baseIsNative(value) ? value : undefined;
    }

    /**
     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the raw `toStringTag`.
     */
    function getRawTag(value) {
      var isOwn = hasOwnProperty.call(value, symToStringTag),
          tag = value[symToStringTag];

      try {
        value[symToStringTag] = undefined;
        var unmasked = true;
      } catch (e) {}

      var result = nativeObjectToString.call(value);
      if (unmasked) {
        if (isOwn) {
          value[symToStringTag] = tag;
        } else {
          delete value[symToStringTag];
        }
      }
      return result;
    }

    /**
     * Creates an array of the own enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
      if (object == null) {
        return [];
      }
      object = Object(object);
      return arrayFilter(nativeGetSymbols(object), function(symbol) {
        return propertyIsEnumerable.call(object, symbol);
      });
    };

    /**
     * Creates an array of the own and inherited enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
      var result = [];
      while (object) {
        arrayPush(result, getSymbols(object));
        object = getPrototype(object);
      }
      return result;
    };

    /**
     * Gets the `toStringTag` of `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    var getTag = baseGetTag;

    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
        (Map && getTag(new Map) != mapTag) ||
        (Promise && getTag(Promise.resolve()) != promiseTag) ||
        (Set && getTag(new Set) != setTag) ||
        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
      getTag = function(value) {
        var result = baseGetTag(value),
            Ctor = result == objectTag ? value.constructor : undefined,
            ctorString = Ctor ? toSource(Ctor) : '';

        if (ctorString) {
          switch (ctorString) {
            case dataViewCtorString: return dataViewTag;
            case mapCtorString: return mapTag;
            case promiseCtorString: return promiseTag;
            case setCtorString: return setTag;
            case weakMapCtorString: return weakMapTag;
          }
        }
        return result;
      };
    }

    /**
     * Gets the view, applying any `transforms` to the `start` and `end` positions.
     *
     * @private
     * @param {number} start The start of the view.
     * @param {number} end The end of the view.
     * @param {Array} transforms The transformations to apply to the view.
     * @returns {Object} Returns an object containing the `start` and `end`
     *  positions of the view.
     */
    function getView(start, end, transforms) {
      var index = -1,
          length = transforms.length;

      while (++index < length) {
        var data = transforms[index],
            size = data.size;

        switch (data.type) {
          case 'drop':      start += size; break;
          case 'dropRight': end -= size; break;
          case 'take':      end = nativeMin(end, start + size); break;
          case 'takeRight': start = nativeMax(start, end - size); break;
        }
      }
      return { 'start': start, 'end': end };
    }

    /**
     * Extracts wrapper details from the `source` body comment.
     *
     * @private
     * @param {string} source The source to inspect.
     * @returns {Array} Returns the wrapper details.
     */
    function getWrapDetails(source) {
      var match = source.match(reWrapDetails);
      return match ? match[1].split(reSplitDetails) : [];
    }

    /**
     * Checks if `path` exists on `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @param {Function} hasFunc The function to check properties.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     */
    function hasPath(object, path, hasFunc) {
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          result = false;

      while (++index < length) {
        var key = toKey(path[index]);
        if (!(result = object != null && hasFunc(object, key))) {
          break;
        }
        object = object[key];
      }
      if (result || ++index != length) {
        return result;
      }
      length = object == null ? 0 : object.length;
      return !!length && isLength(length) && isIndex(key, length) &&
        (isArray(object) || isArguments(object));
    }

    /**
     * Initializes an array clone.
     *
     * @private
     * @param {Array} array The array to clone.
     * @returns {Array} Returns the initialized clone.
     */
    function initCloneArray(array) {
      var length = array.length,
          result = new array.constructor(length);

      // Add properties assigned by `RegExp#exec`.
      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
        result.index = array.index;
        result.input = array.input;
      }
      return result;
    }

    /**
     * Initializes an object clone.
     *
     * @private
     * @param {Object} object The object to clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneObject(object) {
      return (typeof object.constructor == 'function' && !isPrototype(object))
        ? baseCreate(getPrototype(object))
        : {};
    }

    /**
     * Initializes an object clone based on its `toStringTag`.
     *
     * **Note:** This function only supports cloning values with tags of
     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
     *
     * @private
     * @param {Object} object The object to clone.
     * @param {string} tag The `toStringTag` of the object to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneByTag(object, tag, isDeep) {
      var Ctor = object.constructor;
      switch (tag) {
        case arrayBufferTag:
          return cloneArrayBuffer(object);

        case boolTag:
        case dateTag:
          return new Ctor(+object);

        case dataViewTag:
          return cloneDataView(object, isDeep);

        case float32Tag: case float64Tag:
        case int8Tag: case int16Tag: case int32Tag:
        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
          return cloneTypedArray(object, isDeep);

        case mapTag:
          return new Ctor;

        case numberTag:
        case stringTag:
          return new Ctor(object);

        case regexpTag:
          return cloneRegExp(object);

        case setTag:
          return new Ctor;

        case symbolTag:
          return cloneSymbol(object);
      }
    }

    /**
     * Inserts wrapper `details` in a comment at the top of the `source` body.
     *
     * @private
     * @param {string} source The source to modify.
     * @returns {Array} details The details to insert.
     * @returns {string} Returns the modified source.
     */
    function insertWrapDetails(source, details) {
      var length = details.length;
      if (!length) {
        return source;
      }
      var lastIndex = length - 1;
      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
      details = details.join(length > 2 ? ', ' : ' ');
      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
    }

    /**
     * Checks if `value` is a flattenable `arguments` object or array.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
     */
    function isFlattenable(value) {
      return isArray(value) || isArguments(value) ||
        !!(spreadableSymbol && value && value[spreadableSymbol]);
    }

    /**
     * Checks if `value` is a valid array-like index.
     *
     * @private
     * @param {*} value The value to check.
     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
     */
    function isIndex(value, length) {
      var type = typeof value;
      length = length == null ? MAX_SAFE_INTEGER : length;

      return !!length &&
        (type == 'number' ||
          (type != 'symbol' && reIsUint.test(value))) &&
            (value > -1 && value % 1 == 0 && value < length);
    }

    /**
     * Checks if the given arguments are from an iteratee call.
     *
     * @private
     * @param {*} value The potential iteratee value argument.
     * @param {*} index The potential iteratee index or key argument.
     * @param {*} object The potential iteratee object argument.
     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
     *  else `false`.
     */
    function isIterateeCall(value, index, object) {
      if (!isObject(object)) {
        return false;
      }
      var type = typeof index;
      if (type == 'number'
            ? (isArrayLike(object) && isIndex(index, object.length))
            : (type == 'string' && index in object)
          ) {
        return eq(object[index], value);
      }
      return false;
    }

    /**
     * Checks if `value` is a property name and not a property path.
     *
     * @private
     * @param {*} value The value to check.
     * @param {Object} [object] The object to query keys on.
     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
     */
    function isKey(value, object) {
      if (isArray(value)) {
        return false;
      }
      var type = typeof value;
      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
          value == null || isSymbol(value)) {
        return true;
      }
      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
        (object != null && value in Object(object));
    }

    /**
     * Checks if `value` is suitable for use as unique object key.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
     */
    function isKeyable(value) {
      var type = typeof value;
      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
        ? (value !== '__proto__')
        : (value === null);
    }

    /**
     * Checks if `func` has a lazy counterpart.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
     *  else `false`.
     */
    function isLaziable(func) {
      var funcName = getFuncName(func),
          other = lodash[funcName];

      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
        return false;
      }
      if (func === other) {
        return true;
      }
      var data = getData(other);
      return !!data && func === data[0];
    }

    /**
     * Checks if `func` has its source masked.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
     */
    function isMasked(func) {
      return !!maskSrcKey && (maskSrcKey in func);
    }

    /**
     * Checks if `func` is capable of being masked.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
     */
    var isMaskable = coreJsData ? isFunction : stubFalse;

    /**
     * Checks if `value` is likely a prototype object.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
     */
    function isPrototype(value) {
      var Ctor = value && value.constructor,
          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

      return value === proto;
    }

    /**
     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` if suitable for strict
     *  equality comparisons, else `false`.
     */
    function isStrictComparable(value) {
      return value === value && !isObject(value);
    }

    /**
     * A specialized version of `matchesProperty` for source values suitable
     * for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {string} key The key of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function matchesStrictComparable(key, srcValue) {
      return function(object) {
        if (object == null) {
          return false;
        }
        return object[key] === srcValue &&
          (srcValue !== undefined || (key in Object(object)));
      };
    }

    /**
     * A specialized version of `_.memoize` which clears the memoized function's
     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
     *
     * @private
     * @param {Function} func The function to have its output memoized.
     * @returns {Function} Returns the new memoized function.
     */
    function memoizeCapped(func) {
      var result = memoize(func, function(key) {
        if (cache.size === MAX_MEMOIZE_SIZE) {
          cache.clear();
        }
        return key;
      });

      var cache = result.cache;
      return result;
    }

    /**
     * Merges the function metadata of `source` into `data`.
     *
     * Merging metadata reduces the number of wrappers used to invoke a function.
     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
     * may be applied regardless of execution order. Methods like `_.ary` and
     * `_.rearg` modify function arguments, making the order in which they are
     * executed important, preventing the merging of metadata. However, we make
     * an exception for a safe combined case where curried functions have `_.ary`
     * and or `_.rearg` applied.
     *
     * @private
     * @param {Array} data The destination metadata.
     * @param {Array} source The source metadata.
     * @returns {Array} Returns `data`.
     */
    function mergeData(data, source) {
      var bitmask = data[1],
          srcBitmask = source[1],
          newBitmask = bitmask | srcBitmask,
          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);

      var isCombo =
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));

      // Exit early if metadata can't be merged.
      if (!(isCommon || isCombo)) {
        return data;
      }
      // Use source `thisArg` if available.
      if (srcBitmask & WRAP_BIND_FLAG) {
        data[2] = source[2];
        // Set when currying a bound function.
        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
      }
      // Compose partial arguments.
      var value = source[3];
      if (value) {
        var partials = data[3];
        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
      }
      // Compose partial right arguments.
      value = source[5];
      if (value) {
        partials = data[5];
        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
      }
      // Use source `argPos` if available.
      value = source[7];
      if (value) {
        data[7] = value;
      }
      // Use source `ary` if it's smaller.
      if (srcBitmask & WRAP_ARY_FLAG) {
        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
      }
      // Use source `arity` if one is not provided.
      if (data[9] == null) {
        data[9] = source[9];
      }
      // Use source `func` and merge bitmasks.
      data[0] = source[0];
      data[1] = newBitmask;

      return data;
    }

    /**
     * This function is like
     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * except that it includes inherited enumerable properties.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function nativeKeysIn(object) {
      var result = [];
      if (object != null) {
        for (var key in Object(object)) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * Converts `value` to a string using `Object.prototype.toString`.
     *
     * @private
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     */
    function objectToString(value) {
      return nativeObjectToString.call(value);
    }

    /**
     * A specialized version of `baseRest` which transforms the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @param {Function} transform The rest array transform.
     * @returns {Function} Returns the new function.
     */
    function overRest(func, start, transform) {
      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
      return function() {
        var args = arguments,
            index = -1,
            length = nativeMax(args.length - start, 0),
            array = Array(length);

        while (++index < length) {
          array[index] = args[start + index];
        }
        index = -1;
        var otherArgs = Array(start + 1);
        while (++index < start) {
          otherArgs[index] = args[index];
        }
        otherArgs[start] = transform(array);
        return apply(func, this, otherArgs);
      };
    }

    /**
     * Gets the parent value at `path` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array} path The path to get the parent value of.
     * @returns {*} Returns the parent value.
     */
    function parent(object, path) {
      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
    }

    /**
     * Reorder `array` according to the specified indexes where the element at
     * the first index is assigned as the first element, the element at
     * the second index is assigned as the second element, and so on.
     *
     * @private
     * @param {Array} array The array to reorder.
     * @param {Array} indexes The arranged array indexes.
     * @returns {Array} Returns `array`.
     */
    function reorder(array, indexes) {
      var arrLength = array.length,
          length = nativeMin(indexes.length, arrLength),
          oldArray = copyArray(array);

      while (length--) {
        var index = indexes[length];
        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
      }
      return array;
    }

    /**
     * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the property to get.
     * @returns {*} Returns the property value.
     */
    function safeGet(object, key) {
      if (key === 'constructor' && typeof object[key] === 'function') {
        return;
      }

      if (key == '__proto__') {
        return;
      }

      return object[key];
    }

    /**
     * Sets metadata for `func`.
     *
     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
     * period of time, it will trip its breaker and transition to an identity
     * function to avoid garbage collection pauses in V8. See
     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
     * for more details.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var setData = shortOut(baseSetData);

    /**
     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    var setTimeout = ctxSetTimeout || function(func, wait) {
      return root.setTimeout(func, wait);
    };

    /**
     * Sets the `toString` method of `func` to return `string`.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var setToString = shortOut(baseSetToString);

    /**
     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
     * with wrapper details in a comment at the top of the source body.
     *
     * @private
     * @param {Function} wrapper The function to modify.
     * @param {Function} reference The reference function.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Function} Returns `wrapper`.
     */
    function setWrapToString(wrapper, reference, bitmask) {
      var source = (reference + '');
      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
    }

    /**
     * Creates a function that'll short out and invoke `identity` instead
     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
     * milliseconds.
     *
     * @private
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new shortable function.
     */
    function shortOut(func) {
      var count = 0,
          lastCalled = 0;

      return function() {
        var stamp = nativeNow(),
            remaining = HOT_SPAN - (stamp - lastCalled);

        lastCalled = stamp;
        if (remaining > 0) {
          if (++count >= HOT_COUNT) {
            return arguments[0];
          }
        } else {
          count = 0;
        }
        return func.apply(undefined, arguments);
      };
    }

    /**
     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @param {number} [size=array.length] The size of `array`.
     * @returns {Array} Returns `array`.
     */
    function shuffleSelf(array, size) {
      var index = -1,
          length = array.length,
          lastIndex = length - 1;

      size = size === undefined ? length : size;
      while (++index < size) {
        var rand = baseRandom(index, lastIndex),
            value = array[rand];

        array[rand] = array[index];
        array[index] = value;
      }
      array.length = size;
      return array;
    }

    /**
     * Converts `string` to a property path array.
     *
     * @private
     * @param {string} string The string to convert.
     * @returns {Array} Returns the property path array.
     */
    var stringToPath = memoizeCapped(function(string) {
      var result = [];
      if (string.charCodeAt(0) === 46 /* . */) {
        result.push('');
      }
      string.replace(rePropName, function(match, number, quote, subString) {
        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
      });
      return result;
    });

    /**
     * Converts `value` to a string key if it's not a string or symbol.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {string|symbol} Returns the key.
     */
    function toKey(value) {
      if (typeof value == 'string' || isSymbol(value)) {
        return value;
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * Converts `func` to its source code.
     *
     * @private
     * @param {Function} func The function to convert.
     * @returns {string} Returns the source code.
     */
    function toSource(func) {
      if (func != null) {
        try {
          return funcToString.call(func);
        } catch (e) {}
        try {
          return (func + '');
        } catch (e) {}
      }
      return '';
    }

    /**
     * Updates wrapper `details` based on `bitmask` flags.
     *
     * @private
     * @returns {Array} details The details to modify.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Array} Returns `details`.
     */
    function updateWrapDetails(details, bitmask) {
      arrayEach(wrapFlags, function(pair) {
        var value = '_.' + pair[0];
        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
          details.push(value);
        }
      });
      return details.sort();
    }

    /**
     * Creates a clone of `wrapper`.
     *
     * @private
     * @param {Object} wrapper The wrapper to clone.
     * @returns {Object} Returns the cloned wrapper.
     */
    function wrapperClone(wrapper) {
      if (wrapper instanceof LazyWrapper) {
        return wrapper.clone();
      }
      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
      result.__actions__ = copyArray(wrapper.__actions__);
      result.__index__  = wrapper.__index__;
      result.__values__ = wrapper.__values__;
      return result;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of elements split into groups the length of `size`.
     * If `array` can't be split evenly, the final chunk will be the remaining
     * elements.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to process.
     * @param {number} [size=1] The length of each chunk
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the new array of chunks.
     * @example
     *
     * _.chunk(['a', 'b', 'c', 'd'], 2);
     * // => [['a', 'b'], ['c', 'd']]
     *
     * _.chunk(['a', 'b', 'c', 'd'], 3);
     * // => [['a', 'b', 'c'], ['d']]
     */
    function chunk(array, size, guard) {
      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
        size = 1;
      } else {
        size = nativeMax(toInteger(size), 0);
      }
      var length = array == null ? 0 : array.length;
      if (!length || size < 1) {
        return [];
      }
      var index = 0,
          resIndex = 0,
          result = Array(nativeCeil(length / size));

      while (index < length) {
        result[resIndex++] = baseSlice(array, index, (index += size));
      }
      return result;
    }

    /**
     * Creates an array with all falsey values removed. The values `false`, `null`,
     * `0`, `""`, `undefined`, and `NaN` are falsey.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to compact.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.compact([0, 1, false, 2, '', 3]);
     * // => [1, 2, 3]
     */
    function compact(array) {
      var index = -1,
          length = array == null ? 0 : array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index];
        if (value) {
          result[resIndex++] = value;
        }
      }
      return result;
    }

    /**
     * Creates a new array concatenating `array` with any additional arrays
     * and/or values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to concatenate.
     * @param {...*} [values] The values to concatenate.
     * @returns {Array} Returns the new concatenated array.
     * @example
     *
     * var array = [1];
     * var other = _.concat(array, 2, [3], [[4]]);
     *
     * console.log(other);
     * // => [1, 2, 3, [4]]
     *
     * console.log(array);
     * // => [1]
     */
    function concat() {
      var length = arguments.length;
      if (!length) {
        return [];
      }
      var args = Array(length - 1),
          array = arguments[0],
          index = length;

      while (index--) {
        args[index - 1] = arguments[index];
      }
      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
    }

    /**
     * Creates an array of `array` values not included in the other given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * **Note:** Unlike `_.pullAll`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.without, _.xor
     * @example
     *
     * _.difference([2, 1], [2, 3]);
     * // => [1]
     */
    var difference = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `iteratee` which
     * is invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var differenceBy = baseRest(function(array, values) {
      var iteratee = last(values);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `comparator`
     * which is invoked to compare elements of `array` to `values`. The order and
     * references of result values are determined by the first array. The comparator
     * is invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     *
     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }]
     */
    var differenceWith = baseRest(function(array, values) {
      var comparator = last(values);
      if (isArrayLikeObject(comparator)) {
        comparator = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
        : [];
    });

    /**
     * Creates a slice of `array` with `n` elements dropped from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.drop([1, 2, 3]);
     * // => [2, 3]
     *
     * _.drop([1, 2, 3], 2);
     * // => [3]
     *
     * _.drop([1, 2, 3], 5);
     * // => []
     *
     * _.drop([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function drop(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with `n` elements dropped from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.dropRight([1, 2, 3]);
     * // => [1, 2]
     *
     * _.dropRight([1, 2, 3], 2);
     * // => [1]
     *
     * _.dropRight([1, 2, 3], 5);
     * // => []
     *
     * _.dropRight([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function dropRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the end.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.dropRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropRightWhile(users, ['active', false]);
     * // => objects for ['barney']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropRightWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true, true)
        : [];
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the beginning.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.dropWhile(users, function(o) { return !o.active; });
     * // => objects for ['pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropWhile(users, ['active', false]);
     * // => objects for ['pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true)
        : [];
    }

    /**
     * Fills elements of `array` with `value` from `start` up to, but not
     * including, `end`.
     *
     * **Note:** This method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Array
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.fill(array, 'a');
     * console.log(array);
     * // => ['a', 'a', 'a']
     *
     * _.fill(Array(3), 2);
     * // => [2, 2, 2]
     *
     * _.fill([4, 6, 8, 10], '*', 1, 3);
     * // => [4, '*', '*', 10]
     */
    function fill(array, value, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
        start = 0;
        end = length;
      }
      return baseFill(array, value, start, end);
    }

    /**
     * This method is like `_.find` except that it returns the index of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.findIndex(users, function(o) { return o.user == 'barney'; });
     * // => 0
     *
     * // The `_.matches` iteratee shorthand.
     * _.findIndex(users, { 'user': 'fred', 'active': false });
     * // => 1
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findIndex(users, ['active', false]);
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.findIndex(users, 'active');
     * // => 2
     */
    function findIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index);
    }

    /**
     * This method is like `_.findIndex` except that it iterates over elements
     * of `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
     * // => 2
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
     * // => 0
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastIndex(users, ['active', false]);
     * // => 2
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastIndex(users, 'active');
     * // => 0
     */
    function findLastIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length - 1;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = fromIndex < 0
          ? nativeMax(length + index, 0)
          : nativeMin(index, length - 1);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
    }

    /**
     * Flattens `array` a single level deep.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flatten([1, [2, [3, [4]], 5]]);
     * // => [1, 2, [3, [4]], 5]
     */
    function flatten(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, 1) : [];
    }

    /**
     * Recursively flattens `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flattenDeep([1, [2, [3, [4]], 5]]);
     * // => [1, 2, 3, 4, 5]
     */
    function flattenDeep(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, INFINITY) : [];
    }

    /**
     * Recursively flatten `array` up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * var array = [1, [2, [3, [4]], 5]];
     *
     * _.flattenDepth(array, 1);
     * // => [1, 2, [3, [4]], 5]
     *
     * _.flattenDepth(array, 2);
     * // => [1, 2, 3, [4], 5]
     */
    function flattenDepth(array, depth) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(array, depth);
    }

    /**
     * The inverse of `_.toPairs`; this method returns an object composed
     * from key-value `pairs`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} pairs The key-value pairs.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.fromPairs([['a', 1], ['b', 2]]);
     * // => { 'a': 1, 'b': 2 }
     */
    function fromPairs(pairs) {
      var index = -1,
          length = pairs == null ? 0 : pairs.length,
          result = {};

      while (++index < length) {
        var pair = pairs[index];
        result[pair[0]] = pair[1];
      }
      return result;
    }

    /**
     * Gets the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias first
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the first element of `array`.
     * @example
     *
     * _.head([1, 2, 3]);
     * // => 1
     *
     * _.head([]);
     * // => undefined
     */
    function head(array) {
      return (array && array.length) ? array[0] : undefined;
    }

    /**
     * Gets the index at which the first occurrence of `value` is found in `array`
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. If `fromIndex` is negative, it's used as the
     * offset from the end of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.indexOf([1, 2, 1, 2], 2);
     * // => 1
     *
     * // Search from the `fromIndex`.
     * _.indexOf([1, 2, 1, 2], 2, 2);
     * // => 3
     */
    function indexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseIndexOf(array, value, index);
    }

    /**
     * Gets all but the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.initial([1, 2, 3]);
     * // => [1, 2]
     */
    function initial(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 0, -1) : [];
    }

    /**
     * Creates an array of unique values that are included in all given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersection([2, 1], [2, 3]);
     * // => [2]
     */
    var intersection = baseRest(function(arrays) {
      var mapped = arrayMap(arrays, castArrayLikeObject);
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped)
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `iteratee`
     * which is invoked for each element of each `arrays` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [2.1]
     *
     * // The `_.property` iteratee shorthand.
     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }]
     */
    var intersectionBy = baseRest(function(arrays) {
      var iteratee = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      if (iteratee === last(mapped)) {
        iteratee = undefined;
      } else {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `comparator`
     * which is invoked to compare elements of `arrays`. The order and references
     * of result values are determined by the first array. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.intersectionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }]
     */
    var intersectionWith = baseRest(function(arrays) {
      var comparator = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      comparator = typeof comparator == 'function' ? comparator : undefined;
      if (comparator) {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, undefined, comparator)
        : [];
    });

    /**
     * Converts all elements in `array` into a string separated by `separator`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to convert.
     * @param {string} [separator=','] The element separator.
     * @returns {string} Returns the joined string.
     * @example
     *
     * _.join(['a', 'b', 'c'], '~');
     * // => 'a~b~c'
     */
    function join(array, separator) {
      return array == null ? '' : nativeJoin.call(array, separator);
    }

    /**
     * Gets the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the last element of `array`.
     * @example
     *
     * _.last([1, 2, 3]);
     * // => 3
     */
    function last(array) {
      var length = array == null ? 0 : array.length;
      return length ? array[length - 1] : undefined;
    }

    /**
     * This method is like `_.indexOf` except that it iterates over elements of
     * `array` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.lastIndexOf([1, 2, 1, 2], 2);
     * // => 3
     *
     * // Search from the `fromIndex`.
     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
     * // => 1
     */
    function lastIndexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
      }
      return value === value
        ? strictLastIndexOf(array, value, index)
        : baseFindIndex(array, baseIsNaN, index, true);
    }

    /**
     * Gets the element at index `n` of `array`. If `n` is negative, the nth
     * element from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.11.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=0] The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     *
     * _.nth(array, 1);
     * // => 'b'
     *
     * _.nth(array, -2);
     * // => 'c';
     */
    function nth(array, n) {
      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
    }

    /**
     * Removes all given values from `array` using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
     * to remove elements from an array by predicate.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...*} [values] The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pull(array, 'a', 'c');
     * console.log(array);
     * // => ['b', 'b']
     */
    var pull = baseRest(pullAll);

    /**
     * This method is like `_.pull` except that it accepts an array of values to remove.
     *
     * **Note:** Unlike `_.difference`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pullAll(array, ['a', 'c']);
     * console.log(array);
     * // => ['b', 'b']
     */
    function pullAll(array, values) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values)
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `iteratee` which is
     * invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The iteratee is invoked with one argument: (value).
     *
     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
     *
     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
     * console.log(array);
     * // => [{ 'x': 2 }]
     */
    function pullAllBy(array, values, iteratee) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, getIteratee(iteratee, 2))
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `comparator` which
     * is invoked to compare elements of `array` to `values`. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
     *
     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
     * console.log(array);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
     */
    function pullAllWith(array, values, comparator) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, undefined, comparator)
        : array;
    }

    /**
     * Removes elements from `array` corresponding to `indexes` and returns an
     * array of removed elements.
     *
     * **Note:** Unlike `_.at`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     * var pulled = _.pullAt(array, [1, 3]);
     *
     * console.log(array);
     * // => ['a', 'c']
     *
     * console.log(pulled);
     * // => ['b', 'd']
     */
    var pullAt = flatRest(function(array, indexes) {
      var length = array == null ? 0 : array.length,
          result = baseAt(array, indexes);

      basePullAt(array, arrayMap(indexes, function(index) {
        return isIndex(index, length) ? +index : index;
      }).sort(compareAscending));

      return result;
    });

    /**
     * Removes all elements from `array` that `predicate` returns truthy for
     * and returns an array of the removed elements. The predicate is invoked
     * with three arguments: (value, index, array).
     *
     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
     * to pull elements from an array by value.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = [1, 2, 3, 4];
     * var evens = _.remove(array, function(n) {
     *   return n % 2 == 0;
     * });
     *
     * console.log(array);
     * // => [1, 3]
     *
     * console.log(evens);
     * // => [2, 4]
     */
    function remove(array, predicate) {
      var result = [];
      if (!(array && array.length)) {
        return result;
      }
      var index = -1,
          indexes = [],
          length = array.length;

      predicate = getIteratee(predicate, 3);
      while (++index < length) {
        var value = array[index];
        if (predicate(value, index, array)) {
          result.push(value);
          indexes.push(index);
        }
      }
      basePullAt(array, indexes);
      return result;
    }

    /**
     * Reverses `array` so that the first element becomes the last, the second
     * element becomes the second to last, and so on.
     *
     * **Note:** This method mutates `array` and is based on
     * [`Array#reverse`](https://mdn.io/Array/reverse).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.reverse(array);
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function reverse(array) {
      return array == null ? array : nativeReverse.call(array);
    }

    /**
     * Creates a slice of `array` from `start` up to, but not including, `end`.
     *
     * **Note:** This method is used instead of
     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
     * returned.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function slice(array, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
        start = 0;
        end = length;
      }
      else {
        start = start == null ? 0 : toInteger(start);
        end = end === undefined ? length : toInteger(end);
      }
      return baseSlice(array, start, end);
    }

    /**
     * Uses a binary search to determine the lowest index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedIndex([30, 50], 40);
     * // => 1
     */
    function sortedIndex(array, value) {
      return baseSortedIndex(array, value);
    }

    /**
     * This method is like `_.sortedIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
     * // => 0
     */
    function sortedIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
    }

    /**
     * This method is like `_.indexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
     * // => 1
     */
    function sortedIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value);
        if (index < length && eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.sortedIndex` except that it returns the highest
     * index at which `value` should be inserted into `array` in order to
     * maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
     * // => 4
     */
    function sortedLastIndex(array, value) {
      return baseSortedIndex(array, value, true);
    }

    /**
     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 1
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
     * // => 1
     */
    function sortedLastIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
    }

    /**
     * This method is like `_.lastIndexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
     * // => 3
     */
    function sortedLastIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value, true) - 1;
        if (eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.uniq` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniq([1, 1, 2]);
     * // => [1, 2]
     */
    function sortedUniq(array) {
      return (array && array.length)
        ? baseSortedUniq(array)
        : [];
    }

    /**
     * This method is like `_.uniqBy` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
     * // => [1.1, 2.3]
     */
    function sortedUniqBy(array, iteratee) {
      return (array && array.length)
        ? baseSortedUniq(array, getIteratee(iteratee, 2))
        : [];
    }

    /**
     * Gets all but the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.tail([1, 2, 3]);
     * // => [2, 3]
     */
    function tail(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 1, length) : [];
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.take([1, 2, 3]);
     * // => [1]
     *
     * _.take([1, 2, 3], 2);
     * // => [1, 2]
     *
     * _.take([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.take([1, 2, 3], 0);
     * // => []
     */
    function take(array, n, guard) {
      if (!(array && array.length)) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.takeRight([1, 2, 3]);
     * // => [3]
     *
     * _.takeRight([1, 2, 3], 2);
     * // => [2, 3]
     *
     * _.takeRight([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.takeRight([1, 2, 3], 0);
     * // => []
     */
    function takeRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with elements taken from the end. Elements are
     * taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.takeRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeRightWhile(users, ['active', false]);
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeRightWhile(users, 'active');
     * // => []
     */
    function takeRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), false, true)
        : [];
    }

    /**
     * Creates a slice of `array` with elements taken from the beginning. Elements
     * are taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.takeWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeWhile(users, ['active', false]);
     * // => objects for ['barney', 'fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeWhile(users, 'active');
     * // => []
     */
    function takeWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3))
        : [];
    }

    /**
     * Creates an array of unique values, in order, from all given arrays using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.union([2], [1, 2]);
     * // => [2, 1]
     */
    var union = baseRest(function(arrays) {
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
    });

    /**
     * This method is like `_.union` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which uniqueness is computed. Result values are chosen from the first
     * array in which the value occurs. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    var unionBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.union` except that it accepts `comparator` which
     * is invoked to compare elements of `arrays`. Result values are chosen from
     * the first array in which the value occurs. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.unionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var unionWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
    });

    /**
     * Creates a duplicate-free version of an array, using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons, in which only the first occurrence of each element
     * is kept. The order of result values is determined by the order they occur
     * in the array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniq([2, 1, 2]);
     * // => [2, 1]
     */
    function uniq(array) {
      return (array && array.length) ? baseUniq(array) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * uniqueness is computed. The order of result values is determined by the
     * order they occur in the array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    function uniqBy(array, iteratee) {
      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `comparator` which
     * is invoked to compare elements of `array`. The order of result values is
     * determined by the order they occur in the array.The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.uniqWith(objects, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
     */
    function uniqWith(array, comparator) {
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
    }

    /**
     * This method is like `_.zip` except that it accepts an array of grouped
     * elements and creates an array regrouping the elements to their pre-zip
     * configuration.
     *
     * @static
     * @memberOf _
     * @since 1.2.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     *
     * _.unzip(zipped);
     * // => [['a', 'b'], [1, 2], [true, false]]
     */
    function unzip(array) {
      if (!(array && array.length)) {
        return [];
      }
      var length = 0;
      array = arrayFilter(array, function(group) {
        if (isArrayLikeObject(group)) {
          length = nativeMax(group.length, length);
          return true;
        }
      });
      return baseTimes(length, function(index) {
        return arrayMap(array, baseProperty(index));
      });
    }

    /**
     * This method is like `_.unzip` except that it accepts `iteratee` to specify
     * how regrouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  regrouped values.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
     * // => [[1, 10, 100], [2, 20, 200]]
     *
     * _.unzipWith(zipped, _.add);
     * // => [3, 30, 300]
     */
    function unzipWith(array, iteratee) {
      if (!(array && array.length)) {
        return [];
      }
      var result = unzip(array);
      if (iteratee == null) {
        return result;
      }
      return arrayMap(result, function(group) {
        return apply(iteratee, undefined, group);
      });
    }

    /**
     * Creates an array excluding all given values using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.pull`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...*} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.xor
     * @example
     *
     * _.without([2, 1, 2, 3], 1, 2);
     * // => [3]
     */
    var without = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, values)
        : [];
    });

    /**
     * Creates an array of unique values that is the
     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
     * of the given arrays. The order of result values is determined by the order
     * they occur in the arrays.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.without
     * @example
     *
     * _.xor([2, 1], [2, 3]);
     * // => [1, 3]
     */
    var xor = baseRest(function(arrays) {
      return baseXor(arrayFilter(arrays, isArrayLikeObject));
    });

    /**
     * This method is like `_.xor` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which by which they're compared. The order of result values is determined
     * by the order they occur in the arrays. The iteratee is invoked with one
     * argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2, 3.4]
     *
     * // The `_.property` iteratee shorthand.
     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var xorBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.xor` except that it accepts `comparator` which is
     * invoked to compare elements of `arrays`. The order of result values is
     * determined by the order they occur in the arrays. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.xorWith(objects, others, _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var xorWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
    });

    /**
     * Creates an array of grouped elements, the first of which contains the
     * first elements of the given arrays, the second of which contains the
     * second elements of the given arrays, and so on.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     */
    var zip = baseRest(unzip);

    /**
     * This method is like `_.fromPairs` except that it accepts two arrays,
     * one of property identifiers and one of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 0.4.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObject(['a', 'b'], [1, 2]);
     * // => { 'a': 1, 'b': 2 }
     */
    function zipObject(props, values) {
      return baseZipObject(props || [], values || [], assignValue);
    }

    /**
     * This method is like `_.zipObject` except that it supports property paths.
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
     */
    function zipObjectDeep(props, values) {
      return baseZipObject(props || [], values || [], baseSet);
    }

    /**
     * This method is like `_.zip` except that it accepts `iteratee` to specify
     * how grouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  grouped values.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
     *   return a + b + c;
     * });
     * // => [111, 222]
     */
    var zipWith = baseRest(function(arrays) {
      var length = arrays.length,
          iteratee = length > 1 ? arrays[length - 1] : undefined;

      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
      return unzipWith(arrays, iteratee);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
     * chain sequences enabled. The result of such sequences must be unwrapped
     * with `_#value`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Seq
     * @param {*} value The value to wrap.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36 },
     *   { 'user': 'fred',    'age': 40 },
     *   { 'user': 'pebbles', 'age': 1 }
     * ];
     *
     * var youngest = _
     *   .chain(users)
     *   .sortBy('age')
     *   .map(function(o) {
     *     return o.user + ' is ' + o.age;
     *   })
     *   .head()
     *   .value();
     * // => 'pebbles is 1'
     */
    function chain(value) {
      var result = lodash(value);
      result.__chain__ = true;
      return result;
    }

    /**
     * This method invokes `interceptor` and returns `value`. The interceptor
     * is invoked with one argument; (value). The purpose of this method is to
     * "tap into" a method chain sequence in order to modify intermediate results.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns `value`.
     * @example
     *
     * _([1, 2, 3])
     *  .tap(function(array) {
     *    // Mutate input array.
     *    array.pop();
     *  })
     *  .reverse()
     *  .value();
     * // => [2, 1]
     */
    function tap(value, interceptor) {
      interceptor(value);
      return value;
    }

    /**
     * This method is like `_.tap` except that it returns the result of `interceptor`.
     * The purpose of this method is to "pass thru" values replacing intermediate
     * results in a method chain sequence.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns the result of `interceptor`.
     * @example
     *
     * _('  abc  ')
     *  .chain()
     *  .trim()
     *  .thru(function(value) {
     *    return [value];
     *  })
     *  .value();
     * // => ['abc']
     */
    function thru(value, interceptor) {
      return interceptor(value);
    }

    /**
     * This method is the wrapper version of `_.at`.
     *
     * @name at
     * @memberOf _
     * @since 1.0.0
     * @category Seq
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _(object).at(['a[0].b.c', 'a[1]']).value();
     * // => [3, 4]
     */
    var wrapperAt = flatRest(function(paths) {
      var length = paths.length,
          start = length ? paths[0] : 0,
          value = this.__wrapped__,
          interceptor = function(object) { return baseAt(object, paths); };

      if (length > 1 || this.__actions__.length ||
          !(value instanceof LazyWrapper) || !isIndex(start)) {
        return this.thru(interceptor);
      }
      value = value.slice(start, +start + (length ? 1 : 0));
      value.__actions__.push({
        'func': thru,
        'args': [interceptor],
        'thisArg': undefined
      });
      return new LodashWrapper(value, this.__chain__).thru(function(array) {
        if (length && !array.length) {
          array.push(undefined);
        }
        return array;
      });
    });

    /**
     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
     *
     * @name chain
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 40 }
     * ];
     *
     * // A sequence without explicit chaining.
     * _(users).head();
     * // => { 'user': 'barney', 'age': 36 }
     *
     * // A sequence with explicit chaining.
     * _(users)
     *   .chain()
     *   .head()
     *   .pick('user')
     *   .value();
     * // => { 'user': 'barney' }
     */
    function wrapperChain() {
      return chain(this);
    }

    /**
     * Executes the chain sequence and returns the wrapped result.
     *
     * @name commit
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2];
     * var wrapped = _(array).push(3);
     *
     * console.log(array);
     * // => [1, 2]
     *
     * wrapped = wrapped.commit();
     * console.log(array);
     * // => [1, 2, 3]
     *
     * wrapped.last();
     * // => 3
     *
     * console.log(array);
     * // => [1, 2, 3]
     */
    function wrapperCommit() {
      return new LodashWrapper(this.value(), this.__chain__);
    }

    /**
     * Gets the next value on a wrapped object following the
     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
     *
     * @name next
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the next iterator value.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 1 }
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 2 }
     *
     * wrapped.next();
     * // => { 'done': true, 'value': undefined }
     */
    function wrapperNext() {
      if (this.__values__ === undefined) {
        this.__values__ = toArray(this.value());
      }
      var done = this.__index__ >= this.__values__.length,
          value = done ? undefined : this.__values__[this.__index__++];

      return { 'done': done, 'value': value };
    }

    /**
     * Enables the wrapper to be iterable.
     *
     * @name Symbol.iterator
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the wrapper object.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped[Symbol.iterator]() === wrapped;
     * // => true
     *
     * Array.from(wrapped);
     * // => [1, 2]
     */
    function wrapperToIterator() {
      return this;
    }

    /**
     * Creates a clone of the chain sequence planting `value` as the wrapped value.
     *
     * @name plant
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @param {*} value The value to plant.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2]).map(square);
     * var other = wrapped.plant([3, 4]);
     *
     * other.value();
     * // => [9, 16]
     *
     * wrapped.value();
     * // => [1, 4]
     */
    function wrapperPlant(value) {
      var result,
          parent = this;

      while (parent instanceof baseLodash) {
        var clone = wrapperClone(parent);
        clone.__index__ = 0;
        clone.__values__ = undefined;
        if (result) {
          previous.__wrapped__ = clone;
        } else {
          result = clone;
        }
        var previous = clone;
        parent = parent.__wrapped__;
      }
      previous.__wrapped__ = value;
      return result;
    }

    /**
     * This method is the wrapper version of `_.reverse`.
     *
     * **Note:** This method mutates the wrapped array.
     *
     * @name reverse
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _(array).reverse().value()
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function wrapperReverse() {
      var value = this.__wrapped__;
      if (value instanceof LazyWrapper) {
        var wrapped = value;
        if (this.__actions__.length) {
          wrapped = new LazyWrapper(this);
        }
        wrapped = wrapped.reverse();
        wrapped.__actions__.push({
          'func': thru,
          'args': [reverse],
          'thisArg': undefined
        });
        return new LodashWrapper(wrapped, this.__chain__);
      }
      return this.thru(reverse);
    }

    /**
     * Executes the chain sequence to resolve the unwrapped value.
     *
     * @name value
     * @memberOf _
     * @since 0.1.0
     * @alias toJSON, valueOf
     * @category Seq
     * @returns {*} Returns the resolved unwrapped value.
     * @example
     *
     * _([1, 2, 3]).value();
     * // => [1, 2, 3]
     */
    function wrapperValue() {
      return baseWrapperValue(this.__wrapped__, this.__actions__);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the number of times the key was returned by `iteratee`. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.countBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': 1, '6': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.countBy(['one', 'two', 'three'], 'length');
     * // => { '3': 2, '5': 1 }
     */
    var countBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        ++result[key];
      } else {
        baseAssignValue(result, key, 1);
      }
    });

    /**
     * Checks if `predicate` returns truthy for **all** elements of `collection`.
     * Iteration is stopped once `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * **Note:** This method returns `true` for
     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
     * elements of empty collections.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`.
     * @example
     *
     * _.every([true, 1, null, 'yes'], Boolean);
     * // => false
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.every(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.every(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.every(users, 'active');
     * // => false
     */
    function every(collection, predicate, guard) {
      var func = isArray(collection) ? arrayEvery : baseEvery;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning an array of all elements
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * **Note:** Unlike `_.remove`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.reject
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * _.filter(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, { 'age': 36, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.filter(users, 'active');
     * // => objects for ['barney']
     *
     * // Combining several predicates using `_.overEvery` or `_.overSome`.
     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
     * // => objects for ['fred', 'barney']
     */
    function filter(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning the first element
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': true },
     *   { 'user': 'fred',    'age': 40, 'active': false },
     *   { 'user': 'pebbles', 'age': 1,  'active': true }
     * ];
     *
     * _.find(users, function(o) { return o.age < 40; });
     * // => object for 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.find(users, { 'age': 1, 'active': true });
     * // => object for 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.find(users, ['active', false]);
     * // => object for 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.find(users, 'active');
     * // => object for 'barney'
     */
    var find = createFind(findIndex);

    /**
     * This method is like `_.find` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=collection.length-1] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * _.findLast([1, 2, 3, 4], function(n) {
     *   return n % 2 == 1;
     * });
     * // => 3
     */
    var findLast = createFind(findLastIndex);

    /**
     * Creates a flattened array of values by running each element in `collection`
     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
     * with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [n, n];
     * }
     *
     * _.flatMap([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMap(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), 1);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDeep([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMapDeep(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), INFINITY);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDepth([1, 2], duplicate, 2);
     * // => [[1, 1], [2, 2]]
     */
    function flatMapDepth(collection, iteratee, depth) {
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(map(collection, iteratee), depth);
    }

    /**
     * Iterates over elements of `collection` and invokes `iteratee` for each element.
     * The iteratee is invoked with three arguments: (value, index|key, collection).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * **Note:** As with other "Collections" methods, objects with a "length"
     * property are iterated like arrays. To avoid this behavior use `_.forIn`
     * or `_.forOwn` for object iteration.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias each
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEachRight
     * @example
     *
     * _.forEach([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `1` then `2`.
     *
     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forEach(collection, iteratee) {
      var func = isArray(collection) ? arrayEach : baseEach;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forEach` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @alias eachRight
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEach
     * @example
     *
     * _.forEachRight([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `2` then `1`.
     */
    function forEachRight(collection, iteratee) {
      var func = isArray(collection) ? arrayEachRight : baseEachRight;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The order of grouped values
     * is determined by the order they occur in `collection`. The corresponding
     * value of each key is an array of elements responsible for generating the
     * key. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': [4.2], '6': [6.1, 6.3] }
     *
     * // The `_.property` iteratee shorthand.
     * _.groupBy(['one', 'two', 'three'], 'length');
     * // => { '3': ['one', 'two'], '5': ['three'] }
     */
    var groupBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        result[key].push(value);
      } else {
        baseAssignValue(result, key, [value]);
      }
    });

    /**
     * Checks if `value` is in `collection`. If `collection` is a string, it's
     * checked for a substring of `value`, otherwise
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * is used for equality comparisons. If `fromIndex` is negative, it's used as
     * the offset from the end of `collection`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {boolean} Returns `true` if `value` is found, else `false`.
     * @example
     *
     * _.includes([1, 2, 3], 1);
     * // => true
     *
     * _.includes([1, 2, 3], 1, 2);
     * // => false
     *
     * _.includes({ 'a': 1, 'b': 2 }, 1);
     * // => true
     *
     * _.includes('abcd', 'bc');
     * // => true
     */
    function includes(collection, value, fromIndex, guard) {
      collection = isArrayLike(collection) ? collection : values(collection);
      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;

      var length = collection.length;
      if (fromIndex < 0) {
        fromIndex = nativeMax(length + fromIndex, 0);
      }
      return isString(collection)
        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
    }

    /**
     * Invokes the method at `path` of each element in `collection`, returning
     * an array of the results of each invoked method. Any additional arguments
     * are provided to each invoked method. If `path` is a function, it's invoked
     * for, and `this` bound to, each element in `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array|Function|string} path The path of the method to invoke or
     *  the function invoked per iteration.
     * @param {...*} [args] The arguments to invoke each method with.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
     * // => [[1, 5, 7], [1, 2, 3]]
     *
     * _.invokeMap([123, 456], String.prototype.split, '');
     * // => [['1', '2', '3'], ['4', '5', '6']]
     */
    var invokeMap = baseRest(function(collection, path, args) {
      var index = -1,
          isFunc = typeof path == 'function',
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value) {
        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
      });
      return result;
    });

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the last element responsible for generating the key. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * var array = [
     *   { 'dir': 'left', 'code': 97 },
     *   { 'dir': 'right', 'code': 100 }
     * ];
     *
     * _.keyBy(array, function(o) {
     *   return String.fromCharCode(o.code);
     * });
     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
     *
     * _.keyBy(array, 'dir');
     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
     */
    var keyBy = createAggregator(function(result, value, key) {
      baseAssignValue(result, key, value);
    });

    /**
     * Creates an array of values by running each element in `collection` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
     *
     * The guarded methods are:
     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * _.map([4, 8], square);
     * // => [16, 64]
     *
     * _.map({ 'a': 4, 'b': 8 }, square);
     * // => [16, 64] (iteration order is not guaranteed)
     *
     * var users = [
     *   { 'user': 'barney' },
     *   { 'user': 'fred' }
     * ];
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, 'user');
     * // => ['barney', 'fred']
     */
    function map(collection, iteratee) {
      var func = isArray(collection) ? arrayMap : baseMap;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.sortBy` except that it allows specifying the sort
     * orders of the iteratees to sort by. If `orders` is unspecified, all values
     * are sorted in ascending order. Otherwise, specify an order of "desc" for
     * descending or "asc" for ascending sort order of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @param {string[]} [orders] The sort orders of `iteratees`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 34 },
     *   { 'user': 'fred',   'age': 40 },
     *   { 'user': 'barney', 'age': 36 }
     * ];
     *
     * // Sort by `user` in ascending order and by `age` in descending order.
     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     */
    function orderBy(collection, iteratees, orders, guard) {
      if (collection == null) {
        return [];
      }
      if (!isArray(iteratees)) {
        iteratees = iteratees == null ? [] : [iteratees];
      }
      orders = guard ? undefined : orders;
      if (!isArray(orders)) {
        orders = orders == null ? [] : [orders];
      }
      return baseOrderBy(collection, iteratees, orders);
    }

    /**
     * Creates an array of elements split into two groups, the first of which
     * contains elements `predicate` returns truthy for, the second of which
     * contains elements `predicate` returns falsey for. The predicate is
     * invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of grouped elements.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': false },
     *   { 'user': 'fred',    'age': 40, 'active': true },
     *   { 'user': 'pebbles', 'age': 1,  'active': false }
     * ];
     *
     * _.partition(users, function(o) { return o.active; });
     * // => objects for [['fred'], ['barney', 'pebbles']]
     *
     * // The `_.matches` iteratee shorthand.
     * _.partition(users, { 'age': 1, 'active': false });
     * // => objects for [['pebbles'], ['barney', 'fred']]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.partition(users, ['active', false]);
     * // => objects for [['barney', 'pebbles'], ['fred']]
     *
     * // The `_.property` iteratee shorthand.
     * _.partition(users, 'active');
     * // => objects for [['fred'], ['barney', 'pebbles']]
     */
    var partition = createAggregator(function(result, value, key) {
      result[key ? 0 : 1].push(value);
    }, function() { return [[], []]; });

    /**
     * Reduces `collection` to a value which is the accumulated result of running
     * each element in `collection` thru `iteratee`, where each successive
     * invocation is supplied the return value of the previous. If `accumulator`
     * is not given, the first element of `collection` is used as the initial
     * value. The iteratee is invoked with four arguments:
     * (accumulator, value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.reduce`, `_.reduceRight`, and `_.transform`.
     *
     * The guarded methods are:
     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
     * and `sortBy`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduceRight
     * @example
     *
     * _.reduce([1, 2], function(sum, n) {
     *   return sum + n;
     * }, 0);
     * // => 3
     *
     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     *   return result;
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
     */
    function reduce(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduce : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
    }

    /**
     * This method is like `_.reduce` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduce
     * @example
     *
     * var array = [[0, 1], [2, 3], [4, 5]];
     *
     * _.reduceRight(array, function(flattened, other) {
     *   return flattened.concat(other);
     * }, []);
     * // => [4, 5, 2, 3, 0, 1]
     */
    function reduceRight(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduceRight : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
    }

    /**
     * The opposite of `_.filter`; this method returns the elements of `collection`
     * that `predicate` does **not** return truthy for.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.filter
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': true }
     * ];
     *
     * _.reject(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.reject(users, { 'age': 40, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.reject(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.reject(users, 'active');
     * // => objects for ['barney']
     */
    function reject(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, negate(getIteratee(predicate, 3)));
    }

    /**
     * Gets a random element from `collection`.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     * @example
     *
     * _.sample([1, 2, 3, 4]);
     * // => 2
     */
    function sample(collection) {
      var func = isArray(collection) ? arraySample : baseSample;
      return func(collection);
    }

    /**
     * Gets `n` random elements at unique keys from `collection` up to the
     * size of `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @param {number} [n=1] The number of elements to sample.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the random elements.
     * @example
     *
     * _.sampleSize([1, 2, 3], 2);
     * // => [3, 1]
     *
     * _.sampleSize([1, 2, 3], 4);
     * // => [2, 3, 1]
     */
    function sampleSize(collection, n, guard) {
      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
      return func(collection, n);
    }

    /**
     * Creates an array of shuffled values, using a version of the
     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     * @example
     *
     * _.shuffle([1, 2, 3, 4]);
     * // => [4, 1, 3, 2]
     */
    function shuffle(collection) {
      var func = isArray(collection) ? arrayShuffle : baseShuffle;
      return func(collection);
    }

    /**
     * Gets the size of `collection` by returning its length for array-like
     * values or the number of own enumerable string keyed properties for objects.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @returns {number} Returns the collection size.
     * @example
     *
     * _.size([1, 2, 3]);
     * // => 3
     *
     * _.size({ 'a': 1, 'b': 2 });
     * // => 2
     *
     * _.size('pebbles');
     * // => 7
     */
    function size(collection) {
      if (collection == null) {
        return 0;
      }
      if (isArrayLike(collection)) {
        return isString(collection) ? stringSize(collection) : collection.length;
      }
      var tag = getTag(collection);
      if (tag == mapTag || tag == setTag) {
        return collection.size;
      }
      return baseKeys(collection).length;
    }

    /**
     * Checks if `predicate` returns truthy for **any** element of `collection`.
     * Iteration is stopped once `predicate` returns truthy. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     * @example
     *
     * _.some([null, 0, 'yes', false], Boolean);
     * // => true
     *
     * var users = [
     *   { 'user': 'barney', 'active': true },
     *   { 'user': 'fred',   'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.some(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.some(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.some(users, 'active');
     * // => true
     */
    function some(collection, predicate, guard) {
      var func = isArray(collection) ? arraySome : baseSome;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Creates an array of elements, sorted in ascending order by the results of
     * running each element in a collection thru each iteratee. This method
     * performs a stable sort, that is, it preserves the original sort order of
     * equal elements. The iteratees are invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 30 },
     *   { 'user': 'barney', 'age': 34 }
     * ];
     *
     * _.sortBy(users, [function(o) { return o.user; }]);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
     *
     * _.sortBy(users, ['user', 'age']);
     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
     */
    var sortBy = baseRest(function(collection, iteratees) {
      if (collection == null) {
        return [];
      }
      var length = iteratees.length;
      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
        iteratees = [];
      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
        iteratees = [iteratees[0]];
      }
      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Gets the timestamp of the number of milliseconds that have elapsed since
     * the Unix epoch (1 January 1970 00:00:00 UTC).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Date
     * @returns {number} Returns the timestamp.
     * @example
     *
     * _.defer(function(stamp) {
     *   console.log(_.now() - stamp);
     * }, _.now());
     * // => Logs the number of milliseconds it took for the deferred invocation.
     */
    var now = ctxNow || function() {
      return root.Date.now();
    };

    /*------------------------------------------------------------------------*/

    /**
     * The opposite of `_.before`; this method creates a function that invokes
     * `func` once it's called `n` or more times.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {number} n The number of calls before `func` is invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var saves = ['profile', 'settings'];
     *
     * var done = _.after(saves.length, function() {
     *   console.log('done saving!');
     * });
     *
     * _.forEach(saves, function(type) {
     *   asyncSave({ 'type': type, 'complete': done });
     * });
     * // => Logs 'done saving!' after the two async saves have completed.
     */
    function after(n, func) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n < 1) {
          return func.apply(this, arguments);
        }
      };
    }

    /**
     * Creates a function that invokes `func`, with up to `n` arguments,
     * ignoring any additional arguments.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @param {number} [n=func.length] The arity cap.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
     * // => [6, 8, 10]
     */
    function ary(func, n, guard) {
      n = guard ? undefined : n;
      n = (func && n == null) ? func.length : n;
      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
    }

    /**
     * Creates a function that invokes `func`, with the `this` binding and arguments
     * of the created function, while it's called less than `n` times. Subsequent
     * calls to the created function return the result of the last `func` invocation.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {number} n The number of calls at which `func` is no longer invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * jQuery(element).on('click', _.before(5, addContactToList));
     * // => Allows adding up to 4 contacts to the list.
     */
    function before(n, func) {
      var result;
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n > 0) {
          result = func.apply(this, arguments);
        }
        if (n <= 1) {
          func = undefined;
        }
        return result;
      };
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of `thisArg`
     * and `partials` prepended to the arguments it receives.
     *
     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for partially applied arguments.
     *
     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
     * property of bound functions.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to bind.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * function greet(greeting, punctuation) {
     *   return greeting + ' ' + this.user + punctuation;
     * }
     *
     * var object = { 'user': 'fred' };
     *
     * var bound = _.bind(greet, object, 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bind(greet, object, _, '!');
     * bound('hi');
     * // => 'hi fred!'
     */
    var bind = baseRest(function(func, thisArg, partials) {
      var bitmask = WRAP_BIND_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bind));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(func, bitmask, thisArg, partials, holders);
    });

    /**
     * Creates a function that invokes the method at `object[key]` with `partials`
     * prepended to the arguments it receives.
     *
     * This method differs from `_.bind` by allowing bound functions to reference
     * methods that may be redefined or don't yet exist. See
     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
     * for more details.
     *
     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Function
     * @param {Object} object The object to invoke the method on.
     * @param {string} key The key of the method.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * var object = {
     *   'user': 'fred',
     *   'greet': function(greeting, punctuation) {
     *     return greeting + ' ' + this.user + punctuation;
     *   }
     * };
     *
     * var bound = _.bindKey(object, 'greet', 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * object.greet = function(greeting, punctuation) {
     *   return greeting + 'ya ' + this.user + punctuation;
     * };
     *
     * bound('!');
     * // => 'hiya fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bindKey(object, 'greet', _, '!');
     * bound('hi');
     * // => 'hiya fred!'
     */
    var bindKey = baseRest(function(object, key, partials) {
      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bindKey));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(key, bitmask, object, partials, holders);
    });

    /**
     * Creates a function that accepts arguments of `func` and either invokes
     * `func` returning its result, if at least `arity` number of arguments have
     * been provided, or returns a function that accepts the remaining `func`
     * arguments, and so on. The arity of `func` may be specified if `func.length`
     * is not sufficient.
     *
     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curry(abc);
     *
     * curried(1)(2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(1)(_, 3)(2);
     * // => [1, 2, 3]
     */
    function curry(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curry.placeholder;
      return result;
    }

    /**
     * This method is like `_.curry` except that arguments are applied to `func`
     * in the manner of `_.partialRight` instead of `_.partial`.
     *
     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curryRight(abc);
     *
     * curried(3)(2)(1);
     * // => [1, 2, 3]
     *
     * curried(2, 3)(1);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(3)(1, _)(2);
     * // => [1, 2, 3]
     */
    function curryRight(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curryRight.placeholder;
      return result;
    }

    /**
     * Creates a debounced function that delays invoking `func` until after `wait`
     * milliseconds have elapsed since the last time the debounced function was
     * invoked. The debounced function comes with a `cancel` method to cancel
     * delayed `func` invocations and a `flush` method to immediately invoke them.
     * Provide `options` to indicate whether `func` should be invoked on the
     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
     * with the last arguments provided to the debounced function. Subsequent
     * calls to the debounced function return the result of the last `func`
     * invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the debounced function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.debounce` and `_.throttle`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to debounce.
     * @param {number} [wait=0] The number of milliseconds to delay.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=false]
     *  Specify invoking on the leading edge of the timeout.
     * @param {number} [options.maxWait]
     *  The maximum time `func` is allowed to be delayed before it's invoked.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new debounced function.
     * @example
     *
     * // Avoid costly calculations while the window size is in flux.
     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
     *
     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
     * jQuery(element).on('click', _.debounce(sendMail, 300, {
     *   'leading': true,
     *   'trailing': false
     * }));
     *
     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
     * var source = new EventSource('/stream');
     * jQuery(source).on('message', debounced);
     *
     * // Cancel the trailing debounced invocation.
     * jQuery(window).on('popstate', debounced.cancel);
     */
    function debounce(func, wait, options) {
      var lastArgs,
          lastThis,
          maxWait,
          result,
          timerId,
          lastCallTime,
          lastInvokeTime = 0,
          leading = false,
          maxing = false,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      wait = toNumber(wait) || 0;
      if (isObject(options)) {
        leading = !!options.leading;
        maxing = 'maxWait' in options;
        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }

      function invokeFunc(time) {
        var args = lastArgs,
            thisArg = lastThis;

        lastArgs = lastThis = undefined;
        lastInvokeTime = time;
        result = func.apply(thisArg, args);
        return result;
      }

      function leadingEdge(time) {
        // Reset any `maxWait` timer.
        lastInvokeTime = time;
        // Start the timer for the trailing edge.
        timerId = setTimeout(timerExpired, wait);
        // Invoke the leading edge.
        return leading ? invokeFunc(time) : result;
      }

      function remainingWait(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime,
            timeWaiting = wait - timeSinceLastCall;

        return maxing
          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
          : timeWaiting;
      }

      function shouldInvoke(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime;

        // Either this is the first call, activity has stopped and we're at the
        // trailing edge, the system time has gone backwards and we're treating
        // it as the trailing edge, or we've hit the `maxWait` limit.
        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
      }

      function timerExpired() {
        var time = now();
        if (shouldInvoke(time)) {
          return trailingEdge(time);
        }
        // Restart the timer.
        timerId = setTimeout(timerExpired, remainingWait(time));
      }

      function trailingEdge(time) {
        timerId = undefined;

        // Only invoke if we have `lastArgs` which means `func` has been
        // debounced at least once.
        if (trailing && lastArgs) {
          return invokeFunc(time);
        }
        lastArgs = lastThis = undefined;
        return result;
      }

      function cancel() {
        if (timerId !== undefined) {
          clearTimeout(timerId);
        }
        lastInvokeTime = 0;
        lastArgs = lastCallTime = lastThis = timerId = undefined;
      }

      function flush() {
        return timerId === undefined ? result : trailingEdge(now());
      }

      function debounced() {
        var time = now(),
            isInvoking = shouldInvoke(time);

        lastArgs = arguments;
        lastThis = this;
        lastCallTime = time;

        if (isInvoking) {
          if (timerId === undefined) {
            return leadingEdge(lastCallTime);
          }
          if (maxing) {
            // Handle invocations in a tight loop.
            clearTimeout(timerId);
            timerId = setTimeout(timerExpired, wait);
            return invokeFunc(lastCallTime);
          }
        }
        if (timerId === undefined) {
          timerId = setTimeout(timerExpired, wait);
        }
        return result;
      }
      debounced.cancel = cancel;
      debounced.flush = flush;
      return debounced;
    }

    /**
     * Defers invoking the `func` until the current call stack has cleared. Any
     * additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to defer.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.defer(function(text) {
     *   console.log(text);
     * }, 'deferred');
     * // => Logs 'deferred' after one millisecond.
     */
    var defer = baseRest(function(func, args) {
      return baseDelay(func, 1, args);
    });

    /**
     * Invokes `func` after `wait` milliseconds. Any additional arguments are
     * provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.delay(function(text) {
     *   console.log(text);
     * }, 1000, 'later');
     * // => Logs 'later' after one second.
     */
    var delay = baseRest(function(func, wait, args) {
      return baseDelay(func, toNumber(wait) || 0, args);
    });

    /**
     * Creates a function that invokes `func` with arguments reversed.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to flip arguments for.
     * @returns {Function} Returns the new flipped function.
     * @example
     *
     * var flipped = _.flip(function() {
     *   return _.toArray(arguments);
     * });
     *
     * flipped('a', 'b', 'c', 'd');
     * // => ['d', 'c', 'b', 'a']
     */
    function flip(func) {
      return createWrap(func, WRAP_FLIP_FLAG);
    }

    /**
     * Creates a function that memoizes the result of `func`. If `resolver` is
     * provided, it determines the cache key for storing the result based on the
     * arguments provided to the memoized function. By default, the first argument
     * provided to the memoized function is used as the map cache key. The `func`
     * is invoked with the `this` binding of the memoized function.
     *
     * **Note:** The cache is exposed as the `cache` property on the memoized
     * function. Its creation may be customized by replacing the `_.memoize.Cache`
     * constructor with one whose instances implement the
     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to have its output memoized.
     * @param {Function} [resolver] The function to resolve the cache key.
     * @returns {Function} Returns the new memoized function.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     * var other = { 'c': 3, 'd': 4 };
     *
     * var values = _.memoize(_.values);
     * values(object);
     * // => [1, 2]
     *
     * values(other);
     * // => [3, 4]
     *
     * object.a = 2;
     * values(object);
     * // => [1, 2]
     *
     * // Modify the result cache.
     * values.cache.set(object, ['a', 'b']);
     * values(object);
     * // => ['a', 'b']
     *
     * // Replace `_.memoize.Cache`.
     * _.memoize.Cache = WeakMap;
     */
    function memoize(func, resolver) {
      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var memoized = function() {
        var args = arguments,
            key = resolver ? resolver.apply(this, args) : args[0],
            cache = memoized.cache;

        if (cache.has(key)) {
          return cache.get(key);
        }
        var result = func.apply(this, args);
        memoized.cache = cache.set(key, result) || cache;
        return result;
      };
      memoized.cache = new (memoize.Cache || MapCache);
      return memoized;
    }

    // Expose `MapCache`.
    memoize.Cache = MapCache;

    /**
     * Creates a function that negates the result of the predicate `func`. The
     * `func` predicate is invoked with the `this` binding and arguments of the
     * created function.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} predicate The predicate to negate.
     * @returns {Function} Returns the new negated function.
     * @example
     *
     * function isEven(n) {
     *   return n % 2 == 0;
     * }
     *
     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
     * // => [1, 3, 5]
     */
    function negate(predicate) {
      if (typeof predicate != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return function() {
        var args = arguments;
        switch (args.length) {
          case 0: return !predicate.call(this);
          case 1: return !predicate.call(this, args[0]);
          case 2: return !predicate.call(this, args[0], args[1]);
          case 3: return !predicate.call(this, args[0], args[1], args[2]);
        }
        return !predicate.apply(this, args);
      };
    }

    /**
     * Creates a function that is restricted to invoking `func` once. Repeat calls
     * to the function return the value of the first invocation. The `func` is
     * invoked with the `this` binding and arguments of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var initialize = _.once(createApplication);
     * initialize();
     * initialize();
     * // => `createApplication` is invoked once
     */
    function once(func) {
      return before(2, func);
    }

    /**
     * Creates a function that invokes `func` with its arguments transformed.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Function
     * @param {Function} func The function to wrap.
     * @param {...(Function|Function[])} [transforms=[_.identity]]
     *  The argument transforms.
     * @returns {Function} Returns the new function.
     * @example
     *
     * function doubled(n) {
     *   return n * 2;
     * }
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var func = _.overArgs(function(x, y) {
     *   return [x, y];
     * }, [square, doubled]);
     *
     * func(9, 3);
     * // => [81, 6]
     *
     * func(10, 5);
     * // => [100, 10]
     */
    var overArgs = castRest(function(func, transforms) {
      transforms = (transforms.length == 1 && isArray(transforms[0]))
        ? arrayMap(transforms[0], baseUnary(getIteratee()))
        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));

      var funcsLength = transforms.length;
      return baseRest(function(args) {
        var index = -1,
            length = nativeMin(args.length, funcsLength);

        while (++index < length) {
          args[index] = transforms[index].call(this, args[index]);
        }
        return apply(func, this, args);
      });
    });

    /**
     * Creates a function that invokes `func` with `partials` prepended to the
     * arguments it receives. This method is like `_.bind` except it does **not**
     * alter the `this` binding.
     *
     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 0.2.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var sayHelloTo = _.partial(greet, 'hello');
     * sayHelloTo('fred');
     * // => 'hello fred'
     *
     * // Partially applied with placeholders.
     * var greetFred = _.partial(greet, _, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     */
    var partial = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partial));
      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
    });

    /**
     * This method is like `_.partial` except that partially applied arguments
     * are appended to the arguments it receives.
     *
     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var greetFred = _.partialRight(greet, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     *
     * // Partially applied with placeholders.
     * var sayHelloTo = _.partialRight(greet, 'hello', _);
     * sayHelloTo('fred');
     * // => 'hello fred'
     */
    var partialRight = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partialRight));
      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
    });

    /**
     * Creates a function that invokes `func` with arguments arranged according
     * to the specified `indexes` where the argument value at the first index is
     * provided as the first argument, the argument value at the second index is
     * provided as the second argument, and so on.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to rearrange arguments for.
     * @param {...(number|number[])} indexes The arranged argument indexes.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var rearged = _.rearg(function(a, b, c) {
     *   return [a, b, c];
     * }, [2, 0, 1]);
     *
     * rearged('b', 'c', 'a')
     * // => ['a', 'b', 'c']
     */
    var rearg = flatRest(function(func, indexes) {
      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
    });

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * created function and arguments from `start` and beyond provided as
     * an array.
     *
     * **Note:** This method is based on the
     * [rest parameter](https://mdn.io/rest_parameters).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.rest(function(what, names) {
     *   return what + ' ' + _.initial(names).join(', ') +
     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
     * });
     *
     * say('hello', 'fred', 'barney', 'pebbles');
     * // => 'hello fred, barney, & pebbles'
     */
    function rest(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start === undefined ? start : toInteger(start);
      return baseRest(func, start);
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * create function and an array of arguments much like
     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
     *
     * **Note:** This method is based on the
     * [spread operator](https://mdn.io/spread_operator).
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Function
     * @param {Function} func The function to spread arguments over.
     * @param {number} [start=0] The start position of the spread.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.spread(function(who, what) {
     *   return who + ' says ' + what;
     * });
     *
     * say(['fred', 'hello']);
     * // => 'fred says hello'
     *
     * var numbers = Promise.all([
     *   Promise.resolve(40),
     *   Promise.resolve(36)
     * ]);
     *
     * numbers.then(_.spread(function(x, y) {
     *   return x + y;
     * }));
     * // => a Promise of 76
     */
    function spread(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start == null ? 0 : nativeMax(toInteger(start), 0);
      return baseRest(function(args) {
        var array = args[start],
            otherArgs = castSlice(args, 0, start);

        if (array) {
          arrayPush(otherArgs, array);
        }
        return apply(func, this, otherArgs);
      });
    }

    /**
     * Creates a throttled function that only invokes `func` at most once per
     * every `wait` milliseconds. The throttled function comes with a `cancel`
     * method to cancel delayed `func` invocations and a `flush` method to
     * immediately invoke them. Provide `options` to indicate whether `func`
     * should be invoked on the leading and/or trailing edge of the `wait`
     * timeout. The `func` is invoked with the last arguments provided to the
     * throttled function. Subsequent calls to the throttled function return the
     * result of the last `func` invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the throttled function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.throttle` and `_.debounce`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to throttle.
     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=true]
     *  Specify invoking on the leading edge of the timeout.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new throttled function.
     * @example
     *
     * // Avoid excessively updating the position while scrolling.
     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
     *
     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
     * jQuery(element).on('click', throttled);
     *
     * // Cancel the trailing throttled invocation.
     * jQuery(window).on('popstate', throttled.cancel);
     */
    function throttle(func, wait, options) {
      var leading = true,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      if (isObject(options)) {
        leading = 'leading' in options ? !!options.leading : leading;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }
      return debounce(func, wait, {
        'leading': leading,
        'maxWait': wait,
        'trailing': trailing
      });
    }

    /**
     * Creates a function that accepts up to one argument, ignoring any
     * additional arguments.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.unary(parseInt));
     * // => [6, 8, 10]
     */
    function unary(func) {
      return ary(func, 1);
    }

    /**
     * Creates a function that provides `value` to `wrapper` as its first
     * argument. Any additional arguments provided to the function are appended
     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
     * binding of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {*} value The value to wrap.
     * @param {Function} [wrapper=identity] The wrapper function.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var p = _.wrap(_.escape, function(func, text) {
     *   return '<p>' + func(text) + '</p>';
     * });
     *
     * p('fred, barney, & pebbles');
     * // => '<p>fred, barney, &amp; pebbles</p>'
     */
    function wrap(value, wrapper) {
      return partial(castFunction(wrapper), value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Casts `value` as an array if it's not one.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Lang
     * @param {*} value The value to inspect.
     * @returns {Array} Returns the cast array.
     * @example
     *
     * _.castArray(1);
     * // => [1]
     *
     * _.castArray({ 'a': 1 });
     * // => [{ 'a': 1 }]
     *
     * _.castArray('abc');
     * // => ['abc']
     *
     * _.castArray(null);
     * // => [null]
     *
     * _.castArray(undefined);
     * // => [undefined]
     *
     * _.castArray();
     * // => []
     *
     * var array = [1, 2, 3];
     * console.log(_.castArray(array) === array);
     * // => true
     */
    function castArray() {
      if (!arguments.length) {
        return [];
      }
      var value = arguments[0];
      return isArray(value) ? value : [value];
    }

    /**
     * Creates a shallow clone of `value`.
     *
     * **Note:** This method is loosely based on the
     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
     * and supports cloning arrays, array buffers, booleans, date objects, maps,
     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
     * arrays. The own enumerable properties of `arguments` objects are cloned
     * as plain objects. An empty object is returned for uncloneable values such
     * as error objects, functions, DOM nodes, and WeakMaps.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to clone.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeep
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var shallow = _.clone(objects);
     * console.log(shallow[0] === objects[0]);
     * // => true
     */
    function clone(value) {
      return baseClone(value, CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.clone` except that it accepts `customizer` which
     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
     * cloning is handled by the method instead. The `customizer` is invoked with
     * up to four arguments; (value [, index|key, object, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeepWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(false);
     *   }
     * }
     *
     * var el = _.cloneWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 0
     */
    function cloneWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * This method is like `_.clone` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @returns {*} Returns the deep cloned value.
     * @see _.clone
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var deep = _.cloneDeep(objects);
     * console.log(deep[0] === objects[0]);
     * // => false
     */
    function cloneDeep(value) {
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.cloneWith` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the deep cloned value.
     * @see _.cloneWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(true);
     *   }
     * }
     *
     * var el = _.cloneDeepWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 20
     */
    function cloneDeepWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * Checks if `object` conforms to `source` by invoking the predicate
     * properties of `source` with the corresponding property values of `object`.
     *
     * **Note:** This method is equivalent to `_.conforms` when `source` is
     * partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
     * // => true
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
     * // => false
     */
    function conformsTo(object, source) {
      return source == null || baseConformsTo(object, source, keys(source));
    }

    /**
     * Performs a
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * comparison between two values to determine if they are equivalent.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.eq(object, object);
     * // => true
     *
     * _.eq(object, other);
     * // => false
     *
     * _.eq('a', 'a');
     * // => true
     *
     * _.eq('a', Object('a'));
     * // => false
     *
     * _.eq(NaN, NaN);
     * // => true
     */
    function eq(value, other) {
      return value === other || (value !== value && other !== other);
    }

    /**
     * Checks if `value` is greater than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     * @see _.lt
     * @example
     *
     * _.gt(3, 1);
     * // => true
     *
     * _.gt(3, 3);
     * // => false
     *
     * _.gt(1, 3);
     * // => false
     */
    var gt = createRelationalOperation(baseGt);

    /**
     * Checks if `value` is greater than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than or equal to
     *  `other`, else `false`.
     * @see _.lte
     * @example
     *
     * _.gte(3, 1);
     * // => true
     *
     * _.gte(3, 3);
     * // => true
     *
     * _.gte(1, 3);
     * // => false
     */
    var gte = createRelationalOperation(function(value, other) {
      return value >= other;
    });

    /**
     * Checks if `value` is likely an `arguments` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     *  else `false`.
     * @example
     *
     * _.isArguments(function() { return arguments; }());
     * // => true
     *
     * _.isArguments([1, 2, 3]);
     * // => false
     */
    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
        !propertyIsEnumerable.call(value, 'callee');
    };

    /**
     * Checks if `value` is classified as an `Array` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
     * @example
     *
     * _.isArray([1, 2, 3]);
     * // => true
     *
     * _.isArray(document.body.children);
     * // => false
     *
     * _.isArray('abc');
     * // => false
     *
     * _.isArray(_.noop);
     * // => false
     */
    var isArray = Array.isArray;

    /**
     * Checks if `value` is classified as an `ArrayBuffer` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     * @example
     *
     * _.isArrayBuffer(new ArrayBuffer(2));
     * // => true
     *
     * _.isArrayBuffer(new Array(2));
     * // => false
     */
    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;

    /**
     * Checks if `value` is array-like. A value is considered array-like if it's
     * not a function and has a `value.length` that's an integer greater than or
     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
     * @example
     *
     * _.isArrayLike([1, 2, 3]);
     * // => true
     *
     * _.isArrayLike(document.body.children);
     * // => true
     *
     * _.isArrayLike('abc');
     * // => true
     *
     * _.isArrayLike(_.noop);
     * // => false
     */
    function isArrayLike(value) {
      return value != null && isLength(value.length) && !isFunction(value);
    }

    /**
     * This method is like `_.isArrayLike` except that it also checks if `value`
     * is an object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array-like object,
     *  else `false`.
     * @example
     *
     * _.isArrayLikeObject([1, 2, 3]);
     * // => true
     *
     * _.isArrayLikeObject(document.body.children);
     * // => true
     *
     * _.isArrayLikeObject('abc');
     * // => false
     *
     * _.isArrayLikeObject(_.noop);
     * // => false
     */
    function isArrayLikeObject(value) {
      return isObjectLike(value) && isArrayLike(value);
    }

    /**
     * Checks if `value` is classified as a boolean primitive or object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
     * @example
     *
     * _.isBoolean(false);
     * // => true
     *
     * _.isBoolean(null);
     * // => false
     */
    function isBoolean(value) {
      return value === true || value === false ||
        (isObjectLike(value) && baseGetTag(value) == boolTag);
    }

    /**
     * Checks if `value` is a buffer.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
     * @example
     *
     * _.isBuffer(new Buffer(2));
     * // => true
     *
     * _.isBuffer(new Uint8Array(2));
     * // => false
     */
    var isBuffer = nativeIsBuffer || stubFalse;

    /**
     * Checks if `value` is classified as a `Date` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     * @example
     *
     * _.isDate(new Date);
     * // => true
     *
     * _.isDate('Mon April 23 2012');
     * // => false
     */
    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;

    /**
     * Checks if `value` is likely a DOM element.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
     * @example
     *
     * _.isElement(document.body);
     * // => true
     *
     * _.isElement('<body>');
     * // => false
     */
    function isElement(value) {
      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
    }

    /**
     * Checks if `value` is an empty object, collection, map, or set.
     *
     * Objects are considered empty if they have no own enumerable string keyed
     * properties.
     *
     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
     * jQuery-like collections are considered empty if they have a `length` of `0`.
     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
     * @example
     *
     * _.isEmpty(null);
     * // => true
     *
     * _.isEmpty(true);
     * // => true
     *
     * _.isEmpty(1);
     * // => true
     *
     * _.isEmpty([1, 2, 3]);
     * // => false
     *
     * _.isEmpty({ 'a': 1 });
     * // => false
     */
    function isEmpty(value) {
      if (value == null) {
        return true;
      }
      if (isArrayLike(value) &&
          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
        return !value.length;
      }
      var tag = getTag(value);
      if (tag == mapTag || tag == setTag) {
        return !value.size;
      }
      if (isPrototype(value)) {
        return !baseKeys(value).length;
      }
      for (var key in value) {
        if (hasOwnProperty.call(value, key)) {
          return false;
        }
      }
      return true;
    }

    /**
     * Performs a deep comparison between two values to determine if they are
     * equivalent.
     *
     * **Note:** This method supports comparing arrays, array buffers, booleans,
     * date objects, error objects, maps, numbers, `Object` objects, regexes,
     * sets, strings, symbols, and typed arrays. `Object` objects are compared
     * by their own, not inherited, enumerable properties. Functions and DOM
     * nodes are compared by strict equality, i.e. `===`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.isEqual(object, other);
     * // => true
     *
     * object === other;
     * // => false
     */
    function isEqual(value, other) {
      return baseIsEqual(value, other);
    }

    /**
     * This method is like `_.isEqual` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with up to
     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, othValue) {
     *   if (isGreeting(objValue) && isGreeting(othValue)) {
     *     return true;
     *   }
     * }
     *
     * var array = ['hello', 'goodbye'];
     * var other = ['hi', 'goodbye'];
     *
     * _.isEqualWith(array, other, customizer);
     * // => true
     */
    function isEqualWith(value, other, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      var result = customizer ? customizer(value, other) : undefined;
      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
    }

    /**
     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
     * `SyntaxError`, `TypeError`, or `URIError` object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
     * @example
     *
     * _.isError(new Error);
     * // => true
     *
     * _.isError(Error);
     * // => false
     */
    function isError(value) {
      if (!isObjectLike(value)) {
        return false;
      }
      var tag = baseGetTag(value);
      return tag == errorTag || tag == domExcTag ||
        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
    }

    /**
     * Checks if `value` is a finite primitive number.
     *
     * **Note:** This method is based on
     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
     * @example
     *
     * _.isFinite(3);
     * // => true
     *
     * _.isFinite(Number.MIN_VALUE);
     * // => true
     *
     * _.isFinite(Infinity);
     * // => false
     *
     * _.isFinite('3');
     * // => false
     */
    function isFinite(value) {
      return typeof value == 'number' && nativeIsFinite(value);
    }

    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      if (!isObject(value)) {
        return false;
      }
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in Safari 9 which returns 'object' for typed arrays and other constructors.
      var tag = baseGetTag(value);
      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
    }

    /**
     * Checks if `value` is an integer.
     *
     * **Note:** This method is based on
     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
     * @example
     *
     * _.isInteger(3);
     * // => true
     *
     * _.isInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isInteger(Infinity);
     * // => false
     *
     * _.isInteger('3');
     * // => false
     */
    function isInteger(value) {
      return typeof value == 'number' && value == toInteger(value);
    }

    /**
     * Checks if `value` is a valid array-like length.
     *
     * **Note:** This method is loosely based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
     * @example
     *
     * _.isLength(3);
     * // => true
     *
     * _.isLength(Number.MIN_VALUE);
     * // => false
     *
     * _.isLength(Infinity);
     * // => false
     *
     * _.isLength('3');
     * // => false
     */
    function isLength(value) {
      return typeof value == 'number' &&
        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return value != null && (type == 'object' || type == 'function');
    }

    /**
     * Checks if `value` is object-like. A value is object-like if it's not `null`
     * and has a `typeof` result of "object".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     * @example
     *
     * _.isObjectLike({});
     * // => true
     *
     * _.isObjectLike([1, 2, 3]);
     * // => true
     *
     * _.isObjectLike(_.noop);
     * // => false
     *
     * _.isObjectLike(null);
     * // => false
     */
    function isObjectLike(value) {
      return value != null && typeof value == 'object';
    }

    /**
     * Checks if `value` is classified as a `Map` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     * @example
     *
     * _.isMap(new Map);
     * // => true
     *
     * _.isMap(new WeakMap);
     * // => false
     */
    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;

    /**
     * Performs a partial deep comparison between `object` and `source` to
     * determine if `object` contains equivalent property values.
     *
     * **Note:** This method is equivalent to `_.matches` when `source` is
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.isMatch(object, { 'b': 2 });
     * // => true
     *
     * _.isMatch(object, { 'b': 1 });
     * // => false
     */
    function isMatch(object, source) {
      return object === source || baseIsMatch(object, source, getMatchData(source));
    }

    /**
     * This method is like `_.isMatch` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with five
     * arguments: (objValue, srcValue, index|key, object, source).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, srcValue) {
     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
     *     return true;
     *   }
     * }
     *
     * var object = { 'greeting': 'hello' };
     * var source = { 'greeting': 'hi' };
     *
     * _.isMatchWith(object, source, customizer);
     * // => true
     */
    function isMatchWith(object, source, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseIsMatch(object, source, getMatchData(source), customizer);
    }

    /**
     * Checks if `value` is `NaN`.
     *
     * **Note:** This method is based on
     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
     * `undefined` and other non-number values.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
     * @example
     *
     * _.isNaN(NaN);
     * // => true
     *
     * _.isNaN(new Number(NaN));
     * // => true
     *
     * isNaN(undefined);
     * // => true
     *
     * _.isNaN(undefined);
     * // => false
     */
    function isNaN(value) {
      // An `NaN` primitive is the only value that is not equal to itself.
      // Perform the `toStringTag` check first to avoid errors with some
      // ActiveX objects in IE.
      return isNumber(value) && value != +value;
    }

    /**
     * Checks if `value` is a pristine native function.
     *
     * **Note:** This method can't reliably detect native functions in the presence
     * of the core-js package because core-js circumvents this kind of detection.
     * Despite multiple requests, the core-js maintainer has made it clear: any
     * attempt to fix the detection will be obstructed. As a result, we're left
     * with little choice but to throw an error. Unfortunately, this also affects
     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
     * which rely on core-js.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     * @example
     *
     * _.isNative(Array.prototype.push);
     * // => true
     *
     * _.isNative(_);
     * // => false
     */
    function isNative(value) {
      if (isMaskable(value)) {
        throw new Error(CORE_ERROR_TEXT);
      }
      return baseIsNative(value);
    }

    /**
     * Checks if `value` is `null`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
     * @example
     *
     * _.isNull(null);
     * // => true
     *
     * _.isNull(void 0);
     * // => false
     */
    function isNull(value) {
      return value === null;
    }

    /**
     * Checks if `value` is `null` or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
     * @example
     *
     * _.isNil(null);
     * // => true
     *
     * _.isNil(void 0);
     * // => true
     *
     * _.isNil(NaN);
     * // => false
     */
    function isNil(value) {
      return value == null;
    }

    /**
     * Checks if `value` is classified as a `Number` primitive or object.
     *
     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
     * classified as numbers, use the `_.isFinite` method.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
     * @example
     *
     * _.isNumber(3);
     * // => true
     *
     * _.isNumber(Number.MIN_VALUE);
     * // => true
     *
     * _.isNumber(Infinity);
     * // => true
     *
     * _.isNumber('3');
     * // => false
     */
    function isNumber(value) {
      return typeof value == 'number' ||
        (isObjectLike(value) && baseGetTag(value) == numberTag);
    }

    /**
     * Checks if `value` is a plain object, that is, an object created by the
     * `Object` constructor or one with a `[[Prototype]]` of `null`.
     *
     * @static
     * @memberOf _
     * @since 0.8.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * _.isPlainObject(new Foo);
     * // => false
     *
     * _.isPlainObject([1, 2, 3]);
     * // => false
     *
     * _.isPlainObject({ 'x': 0, 'y': 0 });
     * // => true
     *
     * _.isPlainObject(Object.create(null));
     * // => true
     */
    function isPlainObject(value) {
      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
        return false;
      }
      var proto = getPrototype(value);
      if (proto === null) {
        return true;
      }
      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
        funcToString.call(Ctor) == objectCtorString;
    }

    /**
     * Checks if `value` is classified as a `RegExp` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     * @example
     *
     * _.isRegExp(/abc/);
     * // => true
     *
     * _.isRegExp('/abc/');
     * // => false
     */
    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;

    /**
     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
     * double precision number which isn't the result of a rounded unsafe integer.
     *
     * **Note:** This method is based on
     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
     * @example
     *
     * _.isSafeInteger(3);
     * // => true
     *
     * _.isSafeInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isSafeInteger(Infinity);
     * // => false
     *
     * _.isSafeInteger('3');
     * // => false
     */
    function isSafeInteger(value) {
      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is classified as a `Set` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     * @example
     *
     * _.isSet(new Set);
     * // => true
     *
     * _.isSet(new WeakSet);
     * // => false
     */
    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;

    /**
     * Checks if `value` is classified as a `String` primitive or object.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
     * @example
     *
     * _.isString('abc');
     * // => true
     *
     * _.isString(1);
     * // => false
     */
    function isString(value) {
      return typeof value == 'string' ||
        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
    }

    /**
     * Checks if `value` is classified as a `Symbol` primitive or object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     * @example
     *
     * _.isSymbol(Symbol.iterator);
     * // => true
     *
     * _.isSymbol('abc');
     * // => false
     */
    function isSymbol(value) {
      return typeof value == 'symbol' ||
        (isObjectLike(value) && baseGetTag(value) == symbolTag);
    }

    /**
     * Checks if `value` is classified as a typed array.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     * @example
     *
     * _.isTypedArray(new Uint8Array);
     * // => true
     *
     * _.isTypedArray([]);
     * // => false
     */
    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

    /**
     * Checks if `value` is `undefined`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
     * @example
     *
     * _.isUndefined(void 0);
     * // => true
     *
     * _.isUndefined(null);
     * // => false
     */
    function isUndefined(value) {
      return value === undefined;
    }

    /**
     * Checks if `value` is classified as a `WeakMap` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
     * @example
     *
     * _.isWeakMap(new WeakMap);
     * // => true
     *
     * _.isWeakMap(new Map);
     * // => false
     */
    function isWeakMap(value) {
      return isObjectLike(value) && getTag(value) == weakMapTag;
    }

    /**
     * Checks if `value` is classified as a `WeakSet` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
     * @example
     *
     * _.isWeakSet(new WeakSet);
     * // => true
     *
     * _.isWeakSet(new Set);
     * // => false
     */
    function isWeakSet(value) {
      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
    }

    /**
     * Checks if `value` is less than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     * @see _.gt
     * @example
     *
     * _.lt(1, 3);
     * // => true
     *
     * _.lt(3, 3);
     * // => false
     *
     * _.lt(3, 1);
     * // => false
     */
    var lt = createRelationalOperation(baseLt);

    /**
     * Checks if `value` is less than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than or equal to
     *  `other`, else `false`.
     * @see _.gte
     * @example
     *
     * _.lte(1, 3);
     * // => true
     *
     * _.lte(3, 3);
     * // => true
     *
     * _.lte(3, 1);
     * // => false
     */
    var lte = createRelationalOperation(function(value, other) {
      return value <= other;
    });

    /**
     * Converts `value` to an array.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Array} Returns the converted array.
     * @example
     *
     * _.toArray({ 'a': 1, 'b': 2 });
     * // => [1, 2]
     *
     * _.toArray('abc');
     * // => ['a', 'b', 'c']
     *
     * _.toArray(1);
     * // => []
     *
     * _.toArray(null);
     * // => []
     */
    function toArray(value) {
      if (!value) {
        return [];
      }
      if (isArrayLike(value)) {
        return isString(value) ? stringToArray(value) : copyArray(value);
      }
      if (symIterator && value[symIterator]) {
        return iteratorToArray(value[symIterator]());
      }
      var tag = getTag(value),
          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);

      return func(value);
    }

    /**
     * Converts `value` to a finite number.
     *
     * @static
     * @memberOf _
     * @since 4.12.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted number.
     * @example
     *
     * _.toFinite(3.2);
     * // => 3.2
     *
     * _.toFinite(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toFinite(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toFinite('3.2');
     * // => 3.2
     */
    function toFinite(value) {
      if (!value) {
        return value === 0 ? value : 0;
      }
      value = toNumber(value);
      if (value === INFINITY || value === -INFINITY) {
        var sign = (value < 0 ? -1 : 1);
        return sign * MAX_INTEGER;
      }
      return value === value ? value : 0;
    }

    /**
     * Converts `value` to an integer.
     *
     * **Note:** This method is loosely based on
     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toInteger(3.2);
     * // => 3
     *
     * _.toInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toInteger(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toInteger('3.2');
     * // => 3
     */
    function toInteger(value) {
      var result = toFinite(value),
          remainder = result % 1;

      return result === result ? (remainder ? result - remainder : result) : 0;
    }

    /**
     * Converts `value` to an integer suitable for use as the length of an
     * array-like object.
     *
     * **Note:** This method is based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toLength(3.2);
     * // => 3
     *
     * _.toLength(Number.MIN_VALUE);
     * // => 0
     *
     * _.toLength(Infinity);
     * // => 4294967295
     *
     * _.toLength('3.2');
     * // => 3
     */
    function toLength(value) {
      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
    }

    /**
     * Converts `value` to a number.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     * @example
     *
     * _.toNumber(3.2);
     * // => 3.2
     *
     * _.toNumber(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toNumber(Infinity);
     * // => Infinity
     *
     * _.toNumber('3.2');
     * // => 3.2
     */
    function toNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
      }
      if (typeof value != 'string') {
        return value === 0 ? value : +value;
      }
      value = baseTrim(value);
      var isBinary = reIsBinary.test(value);
      return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
    }

    /**
     * Converts `value` to a plain object flattening inherited enumerable string
     * keyed properties of `value` to own properties of the plain object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Object} Returns the converted plain object.
     * @example
     *
     * function Foo() {
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.assign({ 'a': 1 }, new Foo);
     * // => { 'a': 1, 'b': 2 }
     *
     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
     * // => { 'a': 1, 'b': 2, 'c': 3 }
     */
    function toPlainObject(value) {
      return copyObject(value, keysIn(value));
    }

    /**
     * Converts `value` to a safe integer. A safe integer can be compared and
     * represented correctly.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toSafeInteger(3.2);
     * // => 3
     *
     * _.toSafeInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toSafeInteger(Infinity);
     * // => 9007199254740991
     *
     * _.toSafeInteger('3.2');
     * // => 3
     */
    function toSafeInteger(value) {
      return value
        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
        : (value === 0 ? value : 0);
    }

    /**
     * Converts `value` to a string. An empty string is returned for `null`
     * and `undefined` values. The sign of `-0` is preserved.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.toString(null);
     * // => ''
     *
     * _.toString(-0);
     * // => '-0'
     *
     * _.toString([1, 2, 3]);
     * // => '1,2,3'
     */
    function toString(value) {
      return value == null ? '' : baseToString(value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Assigns own enumerable string keyed properties of source objects to the
     * destination object. Source objects are applied from left to right.
     * Subsequent sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object` and is loosely based on
     * [`Object.assign`](https://mdn.io/Object/assign).
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assignIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assign({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'c': 3 }
     */
    var assign = createAssigner(function(object, source) {
      if (isPrototype(source) || isArrayLike(source)) {
        copyObject(source, keys(source), object);
        return;
      }
      for (var key in source) {
        if (hasOwnProperty.call(source, key)) {
          assignValue(object, key, source[key]);
        }
      }
    });

    /**
     * This method is like `_.assign` except that it iterates over own and
     * inherited source properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extend
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assign
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
     */
    var assignIn = createAssigner(function(object, source) {
      copyObject(source, keysIn(source), object);
    });

    /**
     * This method is like `_.assignIn` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extendWith
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignInWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keysIn(source), object, customizer);
    });

    /**
     * This method is like `_.assign` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignInWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keys(source), object, customizer);
    });

    /**
     * Creates an array of values corresponding to `paths` of `object`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Array} Returns the picked values.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _.at(object, ['a[0].b.c', 'a[1]']);
     * // => [3, 4]
     */
    var at = flatRest(baseAt);

    /**
     * Creates an object that inherits from the `prototype` object. If a
     * `properties` object is given, its own enumerable string keyed properties
     * are assigned to the created object.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Object
     * @param {Object} prototype The object to inherit from.
     * @param {Object} [properties] The properties to assign to the object.
     * @returns {Object} Returns the new object.
     * @example
     *
     * function Shape() {
     *   this.x = 0;
     *   this.y = 0;
     * }
     *
     * function Circle() {
     *   Shape.call(this);
     * }
     *
     * Circle.prototype = _.create(Shape.prototype, {
     *   'constructor': Circle
     * });
     *
     * var circle = new Circle;
     * circle instanceof Circle;
     * // => true
     *
     * circle instanceof Shape;
     * // => true
     */
    function create(prototype, properties) {
      var result = baseCreate(prototype);
      return properties == null ? result : baseAssign(result, properties);
    }

    /**
     * Assigns own and inherited enumerable string keyed properties of source
     * objects to the destination object for all destination properties that
     * resolve to `undefined`. Source objects are applied from left to right.
     * Once a property is set, additional values of the same property are ignored.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaultsDeep
     * @example
     *
     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var defaults = baseRest(function(object, sources) {
      object = Object(object);

      var index = -1;
      var length = sources.length;
      var guard = length > 2 ? sources[2] : undefined;

      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
        length = 1;
      }

      while (++index < length) {
        var source = sources[index];
        var props = keysIn(source);
        var propsIndex = -1;
        var propsLength = props.length;

        while (++propsIndex < propsLength) {
          var key = props[propsIndex];
          var value = object[key];

          if (value === undefined ||
              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
            object[key] = source[key];
          }
        }
      }

      return object;
    });

    /**
     * This method is like `_.defaults` except that it recursively assigns
     * default properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaults
     * @example
     *
     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
     * // => { 'a': { 'b': 2, 'c': 3 } }
     */
    var defaultsDeep = baseRest(function(args) {
      args.push(undefined, customDefaultsMerge);
      return apply(mergeWith, undefined, args);
    });

    /**
     * This method is like `_.find` except that it returns the key of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findKey(users, function(o) { return o.age < 40; });
     * // => 'barney' (iteration order is not guaranteed)
     *
     * // The `_.matches` iteratee shorthand.
     * _.findKey(users, { 'age': 1, 'active': true });
     * // => 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findKey(users, 'active');
     * // => 'barney'
     */
    function findKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
    }

    /**
     * This method is like `_.findKey` except that it iterates over elements of
     * a collection in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findLastKey(users, function(o) { return o.age < 40; });
     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastKey(users, { 'age': 36, 'active': true });
     * // => 'barney'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastKey(users, 'active');
     * // => 'pebbles'
     */
    function findLastKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
    }

    /**
     * Iterates over own and inherited enumerable string keyed properties of an
     * object and invokes `iteratee` for each property. The iteratee is invoked
     * with three arguments: (value, key, object). Iteratee functions may exit
     * iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forInRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forIn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
     */
    function forIn(object, iteratee) {
      return object == null
        ? object
        : baseFor(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * This method is like `_.forIn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forInRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
     */
    function forInRight(object, iteratee) {
      return object == null
        ? object
        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * Iterates over own enumerable string keyed properties of an object and
     * invokes `iteratee` for each property. The iteratee is invoked with three
     * arguments: (value, key, object). Iteratee functions may exit iteration
     * early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwnRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forOwn(object, iteratee) {
      return object && baseForOwn(object, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forOwn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwnRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
     */
    function forOwnRight(object, iteratee) {
      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
    }

    /**
     * Creates an array of function property names from own enumerable properties
     * of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functionsIn
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functions(new Foo);
     * // => ['a', 'b']
     */
    function functions(object) {
      return object == null ? [] : baseFunctions(object, keys(object));
    }

    /**
     * Creates an array of function property names from own and inherited
     * enumerable properties of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functions
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functionsIn(new Foo);
     * // => ['a', 'b', 'c']
     */
    function functionsIn(object) {
      return object == null ? [] : baseFunctions(object, keysIn(object));
    }

    /**
     * Gets the value at `path` of `object`. If the resolved value is
     * `undefined`, the `defaultValue` is returned in its place.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.get(object, 'a[0].b.c');
     * // => 3
     *
     * _.get(object, ['a', '0', 'b', 'c']);
     * // => 3
     *
     * _.get(object, 'a.b.c', 'default');
     * // => 'default'
     */
    function get(object, path, defaultValue) {
      var result = object == null ? undefined : baseGet(object, path);
      return result === undefined ? defaultValue : result;
    }

    /**
     * Checks if `path` is a direct property of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = { 'a': { 'b': 2 } };
     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.has(object, 'a');
     * // => true
     *
     * _.has(object, 'a.b');
     * // => true
     *
     * _.has(object, ['a', 'b']);
     * // => true
     *
     * _.has(other, 'a');
     * // => false
     */
    function has(object, path) {
      return object != null && hasPath(object, path, baseHas);
    }

    /**
     * Checks if `path` is a direct or inherited property of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.hasIn(object, 'a');
     * // => true
     *
     * _.hasIn(object, 'a.b');
     * // => true
     *
     * _.hasIn(object, ['a', 'b']);
     * // => true
     *
     * _.hasIn(object, 'b');
     * // => false
     */
    function hasIn(object, path) {
      return object != null && hasPath(object, path, baseHasIn);
    }

    /**
     * Creates an object composed of the inverted keys and values of `object`.
     * If `object` contains duplicate values, subsequent values overwrite
     * property assignments of previous values.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Object
     * @param {Object} object The object to invert.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invert(object);
     * // => { '1': 'c', '2': 'b' }
     */
    var invert = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      result[value] = key;
    }, constant(identity));

    /**
     * This method is like `_.invert` except that the inverted object is generated
     * from the results of running each element of `object` thru `iteratee`. The
     * corresponding inverted value of each inverted key is an array of keys
     * responsible for generating the inverted value. The iteratee is invoked
     * with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Object
     * @param {Object} object The object to invert.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invertBy(object);
     * // => { '1': ['a', 'c'], '2': ['b'] }
     *
     * _.invertBy(object, function(value) {
     *   return 'group' + value;
     * });
     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
     */
    var invertBy = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      if (hasOwnProperty.call(result, value)) {
        result[value].push(key);
      } else {
        result[value] = [key];
      }
    }, getIteratee);

    /**
     * Invokes the method at `path` of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
     *
     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
     * // => [2, 3]
     */
    var invoke = baseRest(baseInvoke);

    /**
     * Creates an array of the own enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects. See the
     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * for more details.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keys(new Foo);
     * // => ['a', 'b'] (iteration order is not guaranteed)
     *
     * _.keys('hi');
     * // => ['0', '1']
     */
    function keys(object) {
      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
    }

    /**
     * Creates an array of the own and inherited enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keysIn(new Foo);
     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
     */
    function keysIn(object) {
      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
    }

    /**
     * The opposite of `_.mapValues`; this method creates an object with the
     * same values as `object` and keys generated by running each own enumerable
     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
     * with three arguments: (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapValues
     * @example
     *
     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
     *   return key + value;
     * });
     * // => { 'a1': 1, 'b2': 2 }
     */
    function mapKeys(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, iteratee(value, key, object), value);
      });
      return result;
    }

    /**
     * Creates an object with the same keys as `object` and values generated
     * by running each own enumerable string keyed property of `object` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapKeys
     * @example
     *
     * var users = {
     *   'fred':    { 'user': 'fred',    'age': 40 },
     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
     * };
     *
     * _.mapValues(users, function(o) { return o.age; });
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     *
     * // The `_.property` iteratee shorthand.
     * _.mapValues(users, 'age');
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     */
    function mapValues(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, key, iteratee(value, key, object));
      });
      return result;
    }

    /**
     * This method is like `_.assign` except that it recursively merges own and
     * inherited enumerable string keyed properties of source objects into the
     * destination object. Source properties that resolve to `undefined` are
     * skipped if a destination value exists. Array and plain object properties
     * are merged recursively. Other objects and value types are overridden by
     * assignment. Source objects are applied from left to right. Subsequent
     * sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {
     *   'a': [{ 'b': 2 }, { 'd': 4 }]
     * };
     *
     * var other = {
     *   'a': [{ 'c': 3 }, { 'e': 5 }]
     * };
     *
     * _.merge(object, other);
     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
     */
    var merge = createAssigner(function(object, source, srcIndex) {
      baseMerge(object, source, srcIndex);
    });

    /**
     * This method is like `_.merge` except that it accepts `customizer` which
     * is invoked to produce the merged values of the destination and source
     * properties. If `customizer` returns `undefined`, merging is handled by the
     * method instead. The `customizer` is invoked with six arguments:
     * (objValue, srcValue, key, object, source, stack).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} customizer The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   if (_.isArray(objValue)) {
     *     return objValue.concat(srcValue);
     *   }
     * }
     *
     * var object = { 'a': [1], 'b': [2] };
     * var other = { 'a': [3], 'b': [4] };
     *
     * _.mergeWith(object, other, customizer);
     * // => { 'a': [1, 3], 'b': [2, 4] }
     */
    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
      baseMerge(object, source, srcIndex, customizer);
    });

    /**
     * The opposite of `_.pick`; this method creates an object composed of the
     * own and inherited enumerable property paths of `object` that are not omitted.
     *
     * **Note:** This method is considerably slower than `_.pick`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to omit.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omit(object, ['a', 'c']);
     * // => { 'b': '2' }
     */
    var omit = flatRest(function(object, paths) {
      var result = {};
      if (object == null) {
        return result;
      }
      var isDeep = false;
      paths = arrayMap(paths, function(path) {
        path = castPath(path, object);
        isDeep || (isDeep = path.length > 1);
        return path;
      });
      copyObject(object, getAllKeysIn(object), result);
      if (isDeep) {
        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
      }
      var length = paths.length;
      while (length--) {
        baseUnset(result, paths[length]);
      }
      return result;
    });

    /**
     * The opposite of `_.pickBy`; this method creates an object composed of
     * the own and inherited enumerable string keyed properties of `object` that
     * `predicate` doesn't return truthy for. The predicate is invoked with two
     * arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omitBy(object, _.isNumber);
     * // => { 'b': '2' }
     */
    function omitBy(object, predicate) {
      return pickBy(object, negate(getIteratee(predicate)));
    }

    /**
     * Creates an object composed of the picked `object` properties.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pick(object, ['a', 'c']);
     * // => { 'a': 1, 'c': 3 }
     */
    var pick = flatRest(function(object, paths) {
      return object == null ? {} : basePick(object, paths);
    });

    /**
     * Creates an object composed of the `object` properties `predicate` returns
     * truthy for. The predicate is invoked with two arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pickBy(object, _.isNumber);
     * // => { 'a': 1, 'c': 3 }
     */
    function pickBy(object, predicate) {
      if (object == null) {
        return {};
      }
      var props = arrayMap(getAllKeysIn(object), function(prop) {
        return [prop];
      });
      predicate = getIteratee(predicate);
      return basePickBy(object, props, function(value, path) {
        return predicate(value, path[0]);
      });
    }

    /**
     * This method is like `_.get` except that if the resolved value is a
     * function it's invoked with the `this` binding of its parent object and
     * its result is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to resolve.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
     *
     * _.result(object, 'a[0].b.c1');
     * // => 3
     *
     * _.result(object, 'a[0].b.c2');
     * // => 4
     *
     * _.result(object, 'a[0].b.c3', 'default');
     * // => 'default'
     *
     * _.result(object, 'a[0].b.c3', _.constant('default'));
     * // => 'default'
     */
    function result(object, path, defaultValue) {
      path = castPath(path, object);

      var index = -1,
          length = path.length;

      // Ensure the loop is entered when path is empty.
      if (!length) {
        length = 1;
        object = undefined;
      }
      while (++index < length) {
        var value = object == null ? undefined : object[toKey(path[index])];
        if (value === undefined) {
          index = length;
          value = defaultValue;
        }
        object = isFunction(value) ? value.call(object) : value;
      }
      return object;
    }

    /**
     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
     * it's created. Arrays are created for missing index properties while objects
     * are created for all other missing properties. Use `_.setWith` to customize
     * `path` creation.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.set(object, 'a[0].b.c', 4);
     * console.log(object.a[0].b.c);
     * // => 4
     *
     * _.set(object, ['x', '0', 'y', 'z'], 5);
     * console.log(object.x[0].y.z);
     * // => 5
     */
    function set(object, path, value) {
      return object == null ? object : baseSet(object, path, value);
    }

    /**
     * This method is like `_.set` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.setWith(object, '[0][1]', 'a', Object);
     * // => { '0': { '1': 'a' } }
     */
    function setWith(object, path, value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseSet(object, path, value, customizer);
    }

    /**
     * Creates an array of own enumerable string keyed-value pairs for `object`
     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
     * entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entries
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairs(new Foo);
     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
     */
    var toPairs = createToPairs(keys);

    /**
     * Creates an array of own and inherited enumerable string keyed-value pairs
     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
     * or set, its entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entriesIn
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairsIn(new Foo);
     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
     */
    var toPairsIn = createToPairs(keysIn);

    /**
     * An alternative to `_.reduce`; this method transforms `object` to a new
     * `accumulator` object which is the result of running each of its own
     * enumerable string keyed properties thru `iteratee`, with each invocation
     * potentially mutating the `accumulator` object. If `accumulator` is not
     * provided, a new object with the same `[[Prototype]]` will be used. The
     * iteratee is invoked with four arguments: (accumulator, value, key, object).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The custom accumulator value.
     * @returns {*} Returns the accumulated value.
     * @example
     *
     * _.transform([2, 3, 4], function(result, n) {
     *   result.push(n *= n);
     *   return n % 2 == 0;
     * }, []);
     * // => [4, 9]
     *
     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] }
     */
    function transform(object, iteratee, accumulator) {
      var isArr = isArray(object),
          isArrLike = isArr || isBuffer(object) || isTypedArray(object);

      iteratee = getIteratee(iteratee, 4);
      if (accumulator == null) {
        var Ctor = object && object.constructor;
        if (isArrLike) {
          accumulator = isArr ? new Ctor : [];
        }
        else if (isObject(object)) {
          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
        }
        else {
          accumulator = {};
        }
      }
      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
        return iteratee(accumulator, value, index, object);
      });
      return accumulator;
    }

    /**
     * Removes the property at `path` of `object`.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
     * _.unset(object, 'a[0].b.c');
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     *
     * _.unset(object, ['a', '0', 'b', 'c']);
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     */
    function unset(object, path) {
      return object == null ? true : baseUnset(object, path);
    }

    /**
     * This method is like `_.set` except that accepts `updater` to produce the
     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
     * is invoked with one argument: (value).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
     * console.log(object.a[0].b.c);
     * // => 9
     *
     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
     * console.log(object.x[0].y.z);
     * // => 0
     */
    function update(object, path, updater) {
      return object == null ? object : baseUpdate(object, path, castFunction(updater));
    }

    /**
     * This method is like `_.update` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
     * // => { '0': { '1': 'a' } }
     */
    function updateWith(object, path, updater, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
    }

    /**
     * Creates an array of the own enumerable string keyed property values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.values(new Foo);
     * // => [1, 2] (iteration order is not guaranteed)
     *
     * _.values('hi');
     * // => ['h', 'i']
     */
    function values(object) {
      return object == null ? [] : baseValues(object, keys(object));
    }

    /**
     * Creates an array of the own and inherited enumerable string keyed property
     * values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.valuesIn(new Foo);
     * // => [1, 2, 3] (iteration order is not guaranteed)
     */
    function valuesIn(object) {
      return object == null ? [] : baseValues(object, keysIn(object));
    }

    /*------------------------------------------------------------------------*/

    /**
     * Clamps `number` within the inclusive `lower` and `upper` bounds.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Number
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     * @example
     *
     * _.clamp(-10, -5, 5);
     * // => -5
     *
     * _.clamp(10, -5, 5);
     * // => 5
     */
    function clamp(number, lower, upper) {
      if (upper === undefined) {
        upper = lower;
        lower = undefined;
      }
      if (upper !== undefined) {
        upper = toNumber(upper);
        upper = upper === upper ? upper : 0;
      }
      if (lower !== undefined) {
        lower = toNumber(lower);
        lower = lower === lower ? lower : 0;
      }
      return baseClamp(toNumber(number), lower, upper);
    }

    /**
     * Checks if `n` is between `start` and up to, but not including, `end`. If
     * `end` is not specified, it's set to `start` with `start` then set to `0`.
     * If `start` is greater than `end` the params are swapped to support
     * negative ranges.
     *
     * @static
     * @memberOf _
     * @since 3.3.0
     * @category Number
     * @param {number} number The number to check.
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     * @see _.range, _.rangeRight
     * @example
     *
     * _.inRange(3, 2, 4);
     * // => true
     *
     * _.inRange(4, 8);
     * // => true
     *
     * _.inRange(4, 2);
     * // => false
     *
     * _.inRange(2, 2);
     * // => false
     *
     * _.inRange(1.2, 2);
     * // => true
     *
     * _.inRange(5.2, 4);
     * // => false
     *
     * _.inRange(-3, -2, -6);
     * // => true
     */
    function inRange(number, start, end) {
      start = toFinite(start);
      if (end === undefined) {
        end = start;
        start = 0;
      } else {
        end = toFinite(end);
      }
      number = toNumber(number);
      return baseInRange(number, start, end);
    }

    /**
     * Produces a random number between the inclusive `lower` and `upper` bounds.
     * If only one argument is provided a number between `0` and the given number
     * is returned. If `floating` is `true`, or either `lower` or `upper` are
     * floats, a floating-point number is returned instead of an integer.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Number
     * @param {number} [lower=0] The lower bound.
     * @param {number} [upper=1] The upper bound.
     * @param {boolean} [floating] Specify returning a floating-point number.
     * @returns {number} Returns the random number.
     * @example
     *
     * _.random(0, 5);
     * // => an integer between 0 and 5
     *
     * _.random(5);
     * // => also an integer between 0 and 5
     *
     * _.random(5, true);
     * // => a floating-point number between 0 and 5
     *
     * _.random(1.2, 5.2);
     * // => a floating-point number between 1.2 and 5.2
     */
    function random(lower, upper, floating) {
      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
        upper = floating = undefined;
      }
      if (floating === undefined) {
        if (typeof upper == 'boolean') {
          floating = upper;
          upper = undefined;
        }
        else if (typeof lower == 'boolean') {
          floating = lower;
          lower = undefined;
        }
      }
      if (lower === undefined && upper === undefined) {
        lower = 0;
        upper = 1;
      }
      else {
        lower = toFinite(lower);
        if (upper === undefined) {
          upper = lower;
          lower = 0;
        } else {
          upper = toFinite(upper);
        }
      }
      if (lower > upper) {
        var temp = lower;
        lower = upper;
        upper = temp;
      }
      if (floating || lower % 1 || upper % 1) {
        var rand = nativeRandom();
        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
      }
      return baseRandom(lower, upper);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the camel cased string.
     * @example
     *
     * _.camelCase('Foo Bar');
     * // => 'fooBar'
     *
     * _.camelCase('--foo-bar--');
     * // => 'fooBar'
     *
     * _.camelCase('__FOO_BAR__');
     * // => 'fooBar'
     */
    var camelCase = createCompounder(function(result, word, index) {
      word = word.toLowerCase();
      return result + (index ? capitalize(word) : word);
    });

    /**
     * Converts the first character of `string` to upper case and the remaining
     * to lower case.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to capitalize.
     * @returns {string} Returns the capitalized string.
     * @example
     *
     * _.capitalize('FRED');
     * // => 'Fred'
     */
    function capitalize(string) {
      return upperFirst(toString(string).toLowerCase());
    }

    /**
     * Deburrs `string` by converting
     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
     * letters to basic Latin letters and removing
     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to deburr.
     * @returns {string} Returns the deburred string.
     * @example
     *
     * _.deburr('dÃ©jÃ  vu');
     * // => 'deja vu'
     */
    function deburr(string) {
      string = toString(string);
      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
    }

    /**
     * Checks if `string` ends with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=string.length] The position to search up to.
     * @returns {boolean} Returns `true` if `string` ends with `target`,
     *  else `false`.
     * @example
     *
     * _.endsWith('abc', 'c');
     * // => true
     *
     * _.endsWith('abc', 'b');
     * // => false
     *
     * _.endsWith('abc', 'b', 2);
     * // => true
     */
    function endsWith(string, target, position) {
      string = toString(string);
      target = baseToString(target);

      var length = string.length;
      position = position === undefined
        ? length
        : baseClamp(toInteger(position), 0, length);

      var end = position;
      position -= target.length;
      return position >= 0 && string.slice(position, end) == target;
    }

    /**
     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
     * corresponding HTML entities.
     *
     * **Note:** No other characters are escaped. To escape additional
     * characters use a third-party library like [_he_](https://mths.be/he).
     *
     * Though the ">" character is escaped for symmetry, characters like
     * ">" and "/" don't need escaping in HTML and have no special meaning
     * unless they're part of a tag or unquoted attribute value. See
     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
     * (under "semi-related fun fact") for more details.
     *
     * When working with HTML you should always
     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
     * XSS vectors.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escape('fred, barney, & pebbles');
     * // => 'fred, barney, &amp; pebbles'
     */
    function escape(string) {
      string = toString(string);
      return (string && reHasUnescapedHtml.test(string))
        ? string.replace(reUnescapedHtml, escapeHtmlChar)
        : string;
    }

    /**
     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escapeRegExp('[lodash](https://lodash.com/)');
     * // => '\[lodash\]\(https://lodash\.com/\)'
     */
    function escapeRegExp(string) {
      string = toString(string);
      return (string && reHasRegExpChar.test(string))
        ? string.replace(reRegExpChar, '\\$&')
        : string;
    }

    /**
     * Converts `string` to
     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the kebab cased string.
     * @example
     *
     * _.kebabCase('Foo Bar');
     * // => 'foo-bar'
     *
     * _.kebabCase('fooBar');
     * // => 'foo-bar'
     *
     * _.kebabCase('__FOO_BAR__');
     * // => 'foo-bar'
     */
    var kebabCase = createCompounder(function(result, word, index) {
      return result + (index ? '-' : '') + word.toLowerCase();
    });

    /**
     * Converts `string`, as space separated words, to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.lowerCase('--Foo-Bar--');
     * // => 'foo bar'
     *
     * _.lowerCase('fooBar');
     * // => 'foo bar'
     *
     * _.lowerCase('__FOO_BAR__');
     * // => 'foo bar'
     */
    var lowerCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toLowerCase();
    });

    /**
     * Converts the first character of `string` to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.lowerFirst('Fred');
     * // => 'fred'
     *
     * _.lowerFirst('FRED');
     * // => 'fRED'
     */
    var lowerFirst = createCaseFirst('toLowerCase');

    /**
     * Pads `string` on the left and right sides if it's shorter than `length`.
     * Padding characters are truncated if they can't be evenly divided by `length`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.pad('abc', 8);
     * // => '  abc   '
     *
     * _.pad('abc', 8, '_-');
     * // => '_-abc_-_'
     *
     * _.pad('abc', 3);
     * // => 'abc'
     */
    function pad(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      if (!length || strLength >= length) {
        return string;
      }
      var mid = (length - strLength) / 2;
      return (
        createPadding(nativeFloor(mid), chars) +
        string +
        createPadding(nativeCeil(mid), chars)
      );
    }

    /**
     * Pads `string` on the right side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padEnd('abc', 6);
     * // => 'abc   '
     *
     * _.padEnd('abc', 6, '_-');
     * // => 'abc_-_'
     *
     * _.padEnd('abc', 3);
     * // => 'abc'
     */
    function padEnd(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (string + createPadding(length - strLength, chars))
        : string;
    }

    /**
     * Pads `string` on the left side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padStart('abc', 6);
     * // => '   abc'
     *
     * _.padStart('abc', 6, '_-');
     * // => '_-_abc'
     *
     * _.padStart('abc', 3);
     * // => 'abc'
     */
    function padStart(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (createPadding(length - strLength, chars) + string)
        : string;
    }

    /**
     * Converts `string` to an integer of the specified radix. If `radix` is
     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
     * hexadecimal, in which case a `radix` of `16` is used.
     *
     * **Note:** This method aligns with the
     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category String
     * @param {string} string The string to convert.
     * @param {number} [radix=10] The radix to interpret `value` by.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.parseInt('08');
     * // => 8
     *
     * _.map(['6', '08', '10'], _.parseInt);
     * // => [6, 8, 10]
     */
    function parseInt(string, radix, guard) {
      if (guard || radix == null) {
        radix = 0;
      } else if (radix) {
        radix = +radix;
      }
      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
    }

    /**
     * Repeats the given string `n` times.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to repeat.
     * @param {number} [n=1] The number of times to repeat the string.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the repeated string.
     * @example
     *
     * _.repeat('*', 3);
     * // => '***'
     *
     * _.repeat('abc', 2);
     * // => 'abcabc'
     *
     * _.repeat('abc', 0);
     * // => ''
     */
    function repeat(string, n, guard) {
      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      return baseRepeat(toString(string), n);
    }

    /**
     * Replaces matches for `pattern` in `string` with `replacement`.
     *
     * **Note:** This method is based on
     * [`String#replace`](https://mdn.io/String/replace).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to modify.
     * @param {RegExp|string} pattern The pattern to replace.
     * @param {Function|string} replacement The match replacement.
     * @returns {string} Returns the modified string.
     * @example
     *
     * _.replace('Hi Fred', 'Fred', 'Barney');
     * // => 'Hi Barney'
     */
    function replace() {
      var args = arguments,
          string = toString(args[0]);

      return args.length < 3 ? string : string.replace(args[1], args[2]);
    }

    /**
     * Converts `string` to
     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the snake cased string.
     * @example
     *
     * _.snakeCase('Foo Bar');
     * // => 'foo_bar'
     *
     * _.snakeCase('fooBar');
     * // => 'foo_bar'
     *
     * _.snakeCase('--FOO-BAR--');
     * // => 'foo_bar'
     */
    var snakeCase = createCompounder(function(result, word, index) {
      return result + (index ? '_' : '') + word.toLowerCase();
    });

    /**
     * Splits `string` by `separator`.
     *
     * **Note:** This method is based on
     * [`String#split`](https://mdn.io/String/split).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to split.
     * @param {RegExp|string} separator The separator pattern to split by.
     * @param {number} [limit] The length to truncate results to.
     * @returns {Array} Returns the string segments.
     * @example
     *
     * _.split('a-b-c', '-', 2);
     * // => ['a', 'b']
     */
    function split(string, separator, limit) {
      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
        separator = limit = undefined;
      }
      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
      if (!limit) {
        return [];
      }
      string = toString(string);
      if (string && (
            typeof separator == 'string' ||
            (separator != null && !isRegExp(separator))
          )) {
        separator = baseToString(separator);
        if (!separator && hasUnicode(string)) {
          return castSlice(stringToArray(string), 0, limit);
        }
      }
      return string.split(separator, limit);
    }

    /**
     * Converts `string` to
     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
     *
     * @static
     * @memberOf _
     * @since 3.1.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the start cased string.
     * @example
     *
     * _.startCase('--foo-bar--');
     * // => 'Foo Bar'
     *
     * _.startCase('fooBar');
     * // => 'Foo Bar'
     *
     * _.startCase('__FOO_BAR__');
     * // => 'FOO BAR'
     */
    var startCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + upperFirst(word);
    });

    /**
     * Checks if `string` starts with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=0] The position to search from.
     * @returns {boolean} Returns `true` if `string` starts with `target`,
     *  else `false`.
     * @example
     *
     * _.startsWith('abc', 'a');
     * // => true
     *
     * _.startsWith('abc', 'b');
     * // => false
     *
     * _.startsWith('abc', 'b', 1);
     * // => true
     */
    function startsWith(string, target, position) {
      string = toString(string);
      position = position == null
        ? 0
        : baseClamp(toInteger(position), 0, string.length);

      target = baseToString(target);
      return string.slice(position, position + target.length) == target;
    }

    /**
     * Creates a compiled template function that can interpolate data properties
     * in "interpolate" delimiters, HTML-escape interpolated data properties in
     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
     * properties may be accessed as free variables in the template. If a setting
     * object is given, it takes precedence over `_.templateSettings` values.
     *
     * **Note:** In the development build `_.template` utilizes
     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
     * for easier debugging.
     *
     * For more information on precompiling templates see
     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
     *
     * For more information on Chrome extension sandboxes see
     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The template string.
     * @param {Object} [options={}] The options object.
     * @param {RegExp} [options.escape=_.templateSettings.escape]
     *  The HTML "escape" delimiter.
     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
     *  The "evaluate" delimiter.
     * @param {Object} [options.imports=_.templateSettings.imports]
     *  An object to import into the template as free variables.
     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
     *  The "interpolate" delimiter.
     * @param {string} [options.sourceURL='lodash.templateSources[n]']
     *  The sourceURL of the compiled template.
     * @param {string} [options.variable='obj']
     *  The data object variable name.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the compiled template function.
     * @example
     *
     * // Use the "interpolate" delimiter to create a compiled template.
     * var compiled = _.template('hello <%= user %>!');
     * compiled({ 'user': 'fred' });
     * // => 'hello fred!'
     *
     * // Use the HTML "escape" delimiter to escape data property values.
     * var compiled = _.template('<b><%- value %></b>');
     * compiled({ 'value': '<script>' });
     * // => '<b>&lt;script&gt;</b>'
     *
     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the internal `print` function in "evaluate" delimiters.
     * var compiled = _.template('<% print("hello " + user); %>!');
     * compiled({ 'user': 'barney' });
     * // => 'hello barney!'
     *
     * // Use the ES template literal delimiter as an "interpolate" delimiter.
     * // Disable support by replacing the "interpolate" delimiter.
     * var compiled = _.template('hello ${ user }!');
     * compiled({ 'user': 'pebbles' });
     * // => 'hello pebbles!'
     *
     * // Use backslashes to treat delimiters as plain text.
     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
     * compiled({ 'value': 'ignored' });
     * // => '<%- value %>'
     *
     * // Use the `imports` option to import `jQuery` as `jq`.
     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
     * compiled(data);
     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
     *
     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
     * compiled.source;
     * // => function(data) {
     * //   var __t, __p = '';
     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
     * //   return __p;
     * // }
     *
     * // Use custom template delimiters.
     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
     * var compiled = _.template('hello {{ user }}!');
     * compiled({ 'user': 'mustache' });
     * // => 'hello mustache!'
     *
     * // Use the `source` property to inline compiled templates for meaningful
     * // line numbers in error messages and stack traces.
     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
     *   var JST = {\
     *     "main": ' + _.template(mainText).source + '\
     *   };\
     * ');
     */
    function template(string, options, guard) {
      // Based on John Resig's `tmpl` implementation
      // (http://ejohn.org/blog/javascript-micro-templating/)
      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
      var settings = lodash.templateSettings;

      if (guard && isIterateeCall(string, options, guard)) {
        options = undefined;
      }
      string = toString(string);
      options = assignInWith({}, options, settings, customDefaultsAssignIn);

      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
          importsKeys = keys(imports),
          importsValues = baseValues(imports, importsKeys);

      var isEscaping,
          isEvaluating,
          index = 0,
          interpolate = options.interpolate || reNoMatch,
          source = "__p += '";

      // Compile the regexp to match each delimiter.
      var reDelimiters = RegExp(
        (options.escape || reNoMatch).source + '|' +
        interpolate.source + '|' +
        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
        (options.evaluate || reNoMatch).source + '|$'
      , 'g');

      // Use a sourceURL for easier debugging.
      // The sourceURL gets injected into the source that's eval-ed, so be careful
      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
      // and escape the comment, thus injecting code that gets evaled.
      var sourceURL = '//# sourceURL=' +
        (hasOwnProperty.call(options, 'sourceURL')
          ? (options.sourceURL + '').replace(/\s/g, ' ')
          : ('lodash.templateSources[' + (++templateCounter) + ']')
        ) + '\n';

      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
        interpolateValue || (interpolateValue = esTemplateValue);

        // Escape characters that can't be included in string literals.
        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);

        // Replace delimiters with snippets.
        if (escapeValue) {
          isEscaping = true;
          source += "' +\n__e(" + escapeValue + ") +\n'";
        }
        if (evaluateValue) {
          isEvaluating = true;
          source += "';\n" + evaluateValue + ";\n__p += '";
        }
        if (interpolateValue) {
          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
        }
        index = offset + match.length;

        // The JS engine embedded in Adobe products needs `match` returned in
        // order to produce the correct `offset` value.
        return match;
      });

      source += "';\n";

      // If `variable` is not specified wrap a with-statement around the generated
      // code to add the data object to the top of the scope chain.
      var variable = hasOwnProperty.call(options, 'variable') && options.variable;
      if (!variable) {
        source = 'with (obj) {\n' + source + '\n}\n';
      }
      // Throw an error if a forbidden character was found in `variable`, to prevent
      // potential command injection attacks.
      else if (reForbiddenIdentifierChars.test(variable)) {
        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
      }

      // Cleanup code by stripping empty strings.
      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
        .replace(reEmptyStringMiddle, '$1')
        .replace(reEmptyStringTrailing, '$1;');

      // Frame code as the function body.
      source = 'function(' + (variable || 'obj') + ') {\n' +
        (variable
          ? ''
          : 'obj || (obj = {});\n'
        ) +
        "var __t, __p = ''" +
        (isEscaping
           ? ', __e = _.escape'
           : ''
        ) +
        (isEvaluating
          ? ', __j = Array.prototype.join;\n' +
            "function print() { __p += __j.call(arguments, '') }\n"
          : ';\n'
        ) +
        source +
        'return __p\n}';

      var result = attempt(function() {
        return Function(importsKeys, sourceURL + 'return ' + source)
          .apply(undefined, importsValues);
      });

      // Provide the compiled function's source by its `toString` method or
      // the `source` property as a convenience for inlining compiled templates.
      result.source = source;
      if (isError(result)) {
        throw result;
      }
      return result;
    }

    /**
     * Converts `string`, as a whole, to lower case just like
     * [String#toLowerCase](https://mdn.io/toLowerCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.toLower('--Foo-Bar--');
     * // => '--foo-bar--'
     *
     * _.toLower('fooBar');
     * // => 'foobar'
     *
     * _.toLower('__FOO_BAR__');
     * // => '__foo_bar__'
     */
    function toLower(value) {
      return toString(value).toLowerCase();
    }

    /**
     * Converts `string`, as a whole, to upper case just like
     * [String#toUpperCase](https://mdn.io/toUpperCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.toUpper('--foo-bar--');
     * // => '--FOO-BAR--'
     *
     * _.toUpper('fooBar');
     * // => 'FOOBAR'
     *
     * _.toUpper('__foo_bar__');
     * // => '__FOO_BAR__'
     */
    function toUpper(value) {
      return toString(value).toUpperCase();
    }

    /**
     * Removes leading and trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trim('  abc  ');
     * // => 'abc'
     *
     * _.trim('-_-abc-_-', '_-');
     * // => 'abc'
     *
     * _.map(['  foo  ', '  bar  '], _.trim);
     * // => ['foo', 'bar']
     */
    function trim(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return baseTrim(string);
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          chrSymbols = stringToArray(chars),
          start = charsStartIndex(strSymbols, chrSymbols),
          end = charsEndIndex(strSymbols, chrSymbols) + 1;

      return castSlice(strSymbols, start, end).join('');
    }

    /**
     * Removes trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimEnd('  abc  ');
     * // => '  abc'
     *
     * _.trimEnd('-_-abc-_-', '_-');
     * // => '-_-abc'
     */
    function trimEnd(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.slice(0, trimmedEndIndex(string) + 1);
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;

      return castSlice(strSymbols, 0, end).join('');
    }

    /**
     * Removes leading whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimStart('  abc  ');
     * // => 'abc  '
     *
     * _.trimStart('-_-abc-_-', '_-');
     * // => 'abc-_-'
     */
    function trimStart(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrimStart, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          start = charsStartIndex(strSymbols, stringToArray(chars));

      return castSlice(strSymbols, start).join('');
    }

    /**
     * Truncates `string` if it's longer than the given maximum string length.
     * The last characters of the truncated string are replaced with the omission
     * string which defaults to "...".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to truncate.
     * @param {Object} [options={}] The options object.
     * @param {number} [options.length=30] The maximum string length.
     * @param {string} [options.omission='...'] The string to indicate text is omitted.
     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
     * @returns {string} Returns the truncated string.
     * @example
     *
     * _.truncate('hi-diddly-ho there, neighborino');
     * // => 'hi-diddly-ho there, neighbo...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': ' '
     * });
     * // => 'hi-diddly-ho there,...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': /,? +/
     * });
     * // => 'hi-diddly-ho there...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'omission': ' [...]'
     * });
     * // => 'hi-diddly-ho there, neig [...]'
     */
    function truncate(string, options) {
      var length = DEFAULT_TRUNC_LENGTH,
          omission = DEFAULT_TRUNC_OMISSION;

      if (isObject(options)) {
        var separator = 'separator' in options ? options.separator : separator;
        length = 'length' in options ? toInteger(options.length) : length;
        omission = 'omission' in options ? baseToString(options.omission) : omission;
      }
      string = toString(string);

      var strLength = string.length;
      if (hasUnicode(string)) {
        var strSymbols = stringToArray(string);
        strLength = strSymbols.length;
      }
      if (length >= strLength) {
        return string;
      }
      var end = length - stringSize(omission);
      if (end < 1) {
        return omission;
      }
      var result = strSymbols
        ? castSlice(strSymbols, 0, end).join('')
        : string.slice(0, end);

      if (separator === undefined) {
        return result + omission;
      }
      if (strSymbols) {
        end += (result.length - end);
      }
      if (isRegExp(separator)) {
        if (string.slice(end).search(separator)) {
          var match,
              substring = result;

          if (!separator.global) {
            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
          }
          separator.lastIndex = 0;
          while ((match = separator.exec(substring))) {
            var newEnd = match.index;
          }
          result = result.slice(0, newEnd === undefined ? end : newEnd);
        }
      } else if (string.indexOf(baseToString(separator), end) != end) {
        var index = result.lastIndexOf(separator);
        if (index > -1) {
          result = result.slice(0, index);
        }
      }
      return result + omission;
    }

    /**
     * The inverse of `_.escape`; this method converts the HTML entities
     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
     * their corresponding characters.
     *
     * **Note:** No other HTML entities are unescaped. To unescape additional
     * HTML entities use a third-party library like [_he_](https://mths.be/he).
     *
     * @static
     * @memberOf _
     * @since 0.6.0
     * @category String
     * @param {string} [string=''] The string to unescape.
     * @returns {string} Returns the unescaped string.
     * @example
     *
     * _.unescape('fred, barney, &amp; pebbles');
     * // => 'fred, barney, & pebbles'
     */
    function unescape(string) {
      string = toString(string);
      return (string && reHasEscapedHtml.test(string))
        ? string.replace(reEscapedHtml, unescapeHtmlChar)
        : string;
    }

    /**
     * Converts `string`, as space separated words, to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.upperCase('--foo-bar');
     * // => 'FOO BAR'
     *
     * _.upperCase('fooBar');
     * // => 'FOO BAR'
     *
     * _.upperCase('__foo_bar__');
     * // => 'FOO BAR'
     */
    var upperCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toUpperCase();
    });

    /**
     * Converts the first character of `string` to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.upperFirst('fred');
     * // => 'Fred'
     *
     * _.upperFirst('FRED');
     * // => 'FRED'
     */
    var upperFirst = createCaseFirst('toUpperCase');

    /**
     * Splits `string` into an array of its words.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {RegExp|string} [pattern] The pattern to match words.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the words of `string`.
     * @example
     *
     * _.words('fred, barney, & pebbles');
     * // => ['fred', 'barney', 'pebbles']
     *
     * _.words('fred, barney, & pebbles', /[^, ]+/g);
     * // => ['fred', 'barney', '&', 'pebbles']
     */
    function words(string, pattern, guard) {
      string = toString(string);
      pattern = guard ? undefined : pattern;

      if (pattern === undefined) {
        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
      }
      return string.match(pattern) || [];
    }

    /*------------------------------------------------------------------------*/

    /**
     * Attempts to invoke `func`, returning either the result or the caught error
     * object. Any additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Function} func The function to attempt.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {*} Returns the `func` result or error object.
     * @example
     *
     * // Avoid throwing errors for invalid selectors.
     * var elements = _.attempt(function(selector) {
     *   return document.querySelectorAll(selector);
     * }, '>_>');
     *
     * if (_.isError(elements)) {
     *   elements = [];
     * }
     */
    var attempt = baseRest(function(func, args) {
      try {
        return apply(func, undefined, args);
      } catch (e) {
        return isError(e) ? e : new Error(e);
      }
    });

    /**
     * Binds methods of an object to the object itself, overwriting the existing
     * method.
     *
     * **Note:** This method doesn't set the "length" property of bound functions.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Object} object The object to bind and assign the bound methods to.
     * @param {...(string|string[])} methodNames The object method names to bind.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var view = {
     *   'label': 'docs',
     *   'click': function() {
     *     console.log('clicked ' + this.label);
     *   }
     * };
     *
     * _.bindAll(view, ['click']);
     * jQuery(element).on('click', view.click);
     * // => Logs 'clicked docs' when clicked.
     */
    var bindAll = flatRest(function(object, methodNames) {
      arrayEach(methodNames, function(key) {
        key = toKey(key);
        baseAssignValue(object, key, bind(object[key], object));
      });
      return object;
    });

    /**
     * Creates a function that iterates over `pairs` and invokes the corresponding
     * function of the first predicate to return truthy. The predicate-function
     * pairs are invoked with the `this` binding and arguments of the created
     * function.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Array} pairs The predicate-function pairs.
     * @returns {Function} Returns the new composite function.
     * @example
     *
     * var func = _.cond([
     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
     *   [_.stubTrue,                      _.constant('no match')]
     * ]);
     *
     * func({ 'a': 1, 'b': 2 });
     * // => 'matches A'
     *
     * func({ 'a': 0, 'b': 1 });
     * // => 'matches B'
     *
     * func({ 'a': '1', 'b': '2' });
     * // => 'no match'
     */
    function cond(pairs) {
      var length = pairs == null ? 0 : pairs.length,
          toIteratee = getIteratee();

      pairs = !length ? [] : arrayMap(pairs, function(pair) {
        if (typeof pair[1] != 'function') {
          throw new TypeError(FUNC_ERROR_TEXT);
        }
        return [toIteratee(pair[0]), pair[1]];
      });

      return baseRest(function(args) {
        var index = -1;
        while (++index < length) {
          var pair = pairs[index];
          if (apply(pair[0], this, args)) {
            return apply(pair[1], this, args);
          }
        }
      });
    }

    /**
     * Creates a function that invokes the predicate properties of `source` with
     * the corresponding property values of a given object, returning `true` if
     * all predicates return truthy, else `false`.
     *
     * **Note:** The created function is equivalent to `_.conformsTo` with
     * `source` partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 2, 'b': 1 },
     *   { 'a': 1, 'b': 2 }
     * ];
     *
     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
     * // => [{ 'a': 1, 'b': 2 }]
     */
    function conforms(source) {
      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that returns `value`.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {*} value The value to return from the new function.
     * @returns {Function} Returns the new constant function.
     * @example
     *
     * var objects = _.times(2, _.constant({ 'a': 1 }));
     *
     * console.log(objects);
     * // => [{ 'a': 1 }, { 'a': 1 }]
     *
     * console.log(objects[0] === objects[1]);
     * // => true
     */
    function constant(value) {
      return function() {
        return value;
      };
    }

    /**
     * Checks `value` to determine whether a default value should be returned in
     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
     * or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Util
     * @param {*} value The value to check.
     * @param {*} defaultValue The default value.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * _.defaultTo(1, 10);
     * // => 1
     *
     * _.defaultTo(undefined, 10);
     * // => 10
     */
    function defaultTo(value, defaultValue) {
      return (value == null || value !== value) ? defaultValue : value;
    }

    /**
     * Creates a function that returns the result of invoking the given functions
     * with the `this` binding of the created function, where each successive
     * invocation is supplied the return value of the previous.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flowRight
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flow([_.add, square]);
     * addSquare(1, 2);
     * // => 9
     */
    var flow = createFlow();

    /**
     * This method is like `_.flow` except that it creates a function that
     * invokes the given functions from right to left.
     *
     * @static
     * @since 3.0.0
     * @memberOf _
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flow
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flowRight([square, _.add]);
     * addSquare(1, 2);
     * // => 9
     */
    var flowRight = createFlow(true);

    /**
     * This method returns the first argument it receives.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {*} value Any value.
     * @returns {*} Returns `value`.
     * @example
     *
     * var object = { 'a': 1 };
     *
     * console.log(_.identity(object) === object);
     * // => true
     */
    function identity(value) {
      return value;
    }

    /**
     * Creates a function that invokes `func` with the arguments of the created
     * function. If `func` is a property name, the created function returns the
     * property value for a given element. If `func` is an array or object, the
     * created function returns `true` for elements that contain the equivalent
     * source properties, otherwise it returns `false`.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Util
     * @param {*} [func=_.identity] The value to convert to a callback.
     * @returns {Function} Returns the callback.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, _.iteratee(['user', 'fred']));
     * // => [{ 'user': 'fred', 'age': 40 }]
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, _.iteratee('user'));
     * // => ['barney', 'fred']
     *
     * // Create custom iteratee shorthands.
     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
     *     return func.test(string);
     *   };
     * });
     *
     * _.filter(['abc', 'def'], /ef/);
     * // => ['def']
     */
    function iteratee(func) {
      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between a given
     * object and `source`, returning `true` if the given object has equivalent
     * property values, else `false`.
     *
     * **Note:** The created function is equivalent to `_.isMatch` with `source`
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * **Note:** Multiple values can be checked by combining several matchers
     * using `_.overSome`
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
     *
     * // Checking for several possible values
     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matches(source) {
      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between the
     * value at `path` of a given object to `srcValue`, returning `true` if the
     * object value is equivalent, else `false`.
     *
     * **Note:** Partial comparisons will match empty array and empty object
     * `srcValue` values against any array or object value, respectively. See
     * `_.isEqual` for a list of supported value comparisons.
     *
     * **Note:** Multiple values can be checked by combining several matchers
     * using `_.overSome`
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.find(objects, _.matchesProperty('a', 4));
     * // => { 'a': 4, 'b': 5, 'c': 6 }
     *
     * // Checking for several possible values
     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matchesProperty(path, srcValue) {
      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that invokes the method at `path` of a given object.
     * Any additional arguments are provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': _.constant(2) } },
     *   { 'a': { 'b': _.constant(1) } }
     * ];
     *
     * _.map(objects, _.method('a.b'));
     * // => [2, 1]
     *
     * _.map(objects, _.method(['a', 'b']));
     * // => [2, 1]
     */
    var method = baseRest(function(path, args) {
      return function(object) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * The opposite of `_.method`; this method creates a function that invokes
     * the method at a given path of `object`. Any additional arguments are
     * provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Object} object The object to query.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var array = _.times(3, _.constant),
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
     * // => [2, 0]
     */
    var methodOf = baseRest(function(object, args) {
      return function(path) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * Adds all own enumerable string keyed function properties of a source
     * object to the destination object. If `object` is a function, then methods
     * are added to its prototype as well.
     *
     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
     * avoid conflicts caused by modifying the original.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Function|Object} [object=lodash] The destination object.
     * @param {Object} source The object of functions to add.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
     * @returns {Function|Object} Returns `object`.
     * @example
     *
     * function vowels(string) {
     *   return _.filter(string, function(v) {
     *     return /[aeiou]/i.test(v);
     *   });
     * }
     *
     * _.mixin({ 'vowels': vowels });
     * _.vowels('fred');
     * // => ['e']
     *
     * _('fred').vowels().value();
     * // => ['e']
     *
     * _.mixin({ 'vowels': vowels }, { 'chain': false });
     * _('fred').vowels();
     * // => ['e']
     */
    function mixin(object, source, options) {
      var props = keys(source),
          methodNames = baseFunctions(source, props);

      if (options == null &&
          !(isObject(source) && (methodNames.length || !props.length))) {
        options = source;
        source = object;
        object = this;
        methodNames = baseFunctions(source, keys(source));
      }
      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
          isFunc = isFunction(object);

      arrayEach(methodNames, function(methodName) {
        var func = source[methodName];
        object[methodName] = func;
        if (isFunc) {
          object.prototype[methodName] = function() {
            var chainAll = this.__chain__;
            if (chain || chainAll) {
              var result = object(this.__wrapped__),
                  actions = result.__actions__ = copyArray(this.__actions__);

              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
              result.__chain__ = chainAll;
              return result;
            }
            return func.apply(object, arrayPush([this.value()], arguments));
          };
        }
      });

      return object;
    }

    /**
     * Reverts the `_` variable to its previous value and returns a reference to
     * the `lodash` function.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @returns {Function} Returns the `lodash` function.
     * @example
     *
     * var lodash = _.noConflict();
     */
    function noConflict() {
      if (root._ === this) {
        root._ = oldDash;
      }
      return this;
    }

    /**
     * This method returns `undefined`.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Util
     * @example
     *
     * _.times(2, _.noop);
     * // => [undefined, undefined]
     */
    function noop() {
      // No operation performed.
    }

    /**
     * Creates a function that gets the argument at index `n`. If `n` is negative,
     * the nth argument from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [n=0] The index of the argument to return.
     * @returns {Function} Returns the new pass-thru function.
     * @example
     *
     * var func = _.nthArg(1);
     * func('a', 'b', 'c', 'd');
     * // => 'b'
     *
     * var func = _.nthArg(-2);
     * func('a', 'b', 'c', 'd');
     * // => 'c'
     */
    function nthArg(n) {
      n = toInteger(n);
      return baseRest(function(args) {
        return baseNth(args, n);
      });
    }

    /**
     * Creates a function that invokes `iteratees` with the arguments it receives
     * and returns their results.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to invoke.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.over([Math.max, Math.min]);
     *
     * func(1, 2, 3, 4);
     * // => [4, 1]
     */
    var over = createOver(arrayMap);

    /**
     * Creates a function that checks if **all** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * Following shorthands are possible for providing predicates.
     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overEvery([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => false
     *
     * func(NaN);
     * // => false
     */
    var overEvery = createOver(arrayEvery);

    /**
     * Creates a function that checks if **any** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * Following shorthands are possible for providing predicates.
     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overSome([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => true
     *
     * func(NaN);
     * // => false
     *
     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
     */
    var overSome = createOver(arraySome);

    /**
     * Creates a function that returns the value at `path` of a given object.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': 2 } },
     *   { 'a': { 'b': 1 } }
     * ];
     *
     * _.map(objects, _.property('a.b'));
     * // => [2, 1]
     *
     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
     * // => [1, 2]
     */
    function property(path) {
      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
    }

    /**
     * The opposite of `_.property`; this method creates a function that returns
     * the value at a given path of `object`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} object The object to query.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var array = [0, 1, 2],
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
     * // => [2, 0]
     */
    function propertyOf(object) {
      return function(path) {
        return object == null ? undefined : baseGet(object, path);
      };
    }

    /**
     * Creates an array of numbers (positive and/or negative) progressing from
     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
     * `start` is specified without an `end` or `step`. If `end` is not specified,
     * it's set to `start` with `start` then set to `0`.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.rangeRight
     * @example
     *
     * _.range(4);
     * // => [0, 1, 2, 3]
     *
     * _.range(-4);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 5);
     * // => [1, 2, 3, 4]
     *
     * _.range(0, 20, 5);
     * // => [0, 5, 10, 15]
     *
     * _.range(0, -4, -1);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.range(0);
     * // => []
     */
    var range = createRange();

    /**
     * This method is like `_.range` except that it populates values in
     * descending order.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.range
     * @example
     *
     * _.rangeRight(4);
     * // => [3, 2, 1, 0]
     *
     * _.rangeRight(-4);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 5);
     * // => [4, 3, 2, 1]
     *
     * _.rangeRight(0, 20, 5);
     * // => [15, 10, 5, 0]
     *
     * _.rangeRight(0, -4, -1);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.rangeRight(0);
     * // => []
     */
    var rangeRight = createRange(true);

    /**
     * This method returns a new empty array.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Array} Returns the new empty array.
     * @example
     *
     * var arrays = _.times(2, _.stubArray);
     *
     * console.log(arrays);
     * // => [[], []]
     *
     * console.log(arrays[0] === arrays[1]);
     * // => false
     */
    function stubArray() {
      return [];
    }

    /**
     * This method returns `false`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `false`.
     * @example
     *
     * _.times(2, _.stubFalse);
     * // => [false, false]
     */
    function stubFalse() {
      return false;
    }

    /**
     * This method returns a new empty object.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Object} Returns the new empty object.
     * @example
     *
     * var objects = _.times(2, _.stubObject);
     *
     * console.log(objects);
     * // => [{}, {}]
     *
     * console.log(objects[0] === objects[1]);
     * // => false
     */
    function stubObject() {
      return {};
    }

    /**
     * This method returns an empty string.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {string} Returns the empty string.
     * @example
     *
     * _.times(2, _.stubString);
     * // => ['', '']
     */
    function stubString() {
      return '';
    }

    /**
     * This method returns `true`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `true`.
     * @example
     *
     * _.times(2, _.stubTrue);
     * // => [true, true]
     */
    function stubTrue() {
      return true;
    }

    /**
     * Invokes the iteratee `n` times, returning an array of the results of
     * each invocation. The iteratee is invoked with one argument; (index).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} n The number of times to invoke `iteratee`.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.times(3, String);
     * // => ['0', '1', '2']
     *
     *  _.times(4, _.constant(0));
     * // => [0, 0, 0, 0]
     */
    function times(n, iteratee) {
      n = toInteger(n);
      if (n < 1 || n > MAX_SAFE_INTEGER) {
        return [];
      }
      var index = MAX_ARRAY_LENGTH,
          length = nativeMin(n, MAX_ARRAY_LENGTH);

      iteratee = getIteratee(iteratee);
      n -= MAX_ARRAY_LENGTH;

      var result = baseTimes(length, iteratee);
      while (++index < n) {
        iteratee(index);
      }
      return result;
    }

    /**
     * Converts `value` to a property path array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {*} value The value to convert.
     * @returns {Array} Returns the new property path array.
     * @example
     *
     * _.toPath('a.b.c');
     * // => ['a', 'b', 'c']
     *
     * _.toPath('a[0].b.c');
     * // => ['a', '0', 'b', 'c']
     */
    function toPath(value) {
      if (isArray(value)) {
        return arrayMap(value, toKey);
      }
      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
    }

    /**
     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {string} [prefix=''] The value to prefix the ID with.
     * @returns {string} Returns the unique ID.
     * @example
     *
     * _.uniqueId('contact_');
     * // => 'contact_104'
     *
     * _.uniqueId();
     * // => '105'
     */
    function uniqueId(prefix) {
      var id = ++idCounter;
      return toString(prefix) + id;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Adds two numbers.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {number} augend The first number in an addition.
     * @param {number} addend The second number in an addition.
     * @returns {number} Returns the total.
     * @example
     *
     * _.add(6, 4);
     * // => 10
     */
    var add = createMathOperation(function(augend, addend) {
      return augend + addend;
    }, 0);

    /**
     * Computes `number` rounded up to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round up.
     * @param {number} [precision=0] The precision to round up to.
     * @returns {number} Returns the rounded up number.
     * @example
     *
     * _.ceil(4.006);
     * // => 5
     *
     * _.ceil(6.004, 2);
     * // => 6.01
     *
     * _.ceil(6040, -2);
     * // => 6100
     */
    var ceil = createRound('ceil');

    /**
     * Divide two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} dividend The first number in a division.
     * @param {number} divisor The second number in a division.
     * @returns {number} Returns the quotient.
     * @example
     *
     * _.divide(6, 4);
     * // => 1.5
     */
    var divide = createMathOperation(function(dividend, divisor) {
      return dividend / divisor;
    }, 1);

    /**
     * Computes `number` rounded down to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round down.
     * @param {number} [precision=0] The precision to round down to.
     * @returns {number} Returns the rounded down number.
     * @example
     *
     * _.floor(4.006);
     * // => 4
     *
     * _.floor(0.046, 2);
     * // => 0.04
     *
     * _.floor(4060, -2);
     * // => 4000
     */
    var floor = createRound('floor');

    /**
     * Computes the maximum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * _.max([4, 2, 8, 6]);
     * // => 8
     *
     * _.max([]);
     * // => undefined
     */
    function max(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseGt)
        : undefined;
    }

    /**
     * This method is like `_.max` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.maxBy(objects, function(o) { return o.n; });
     * // => { 'n': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.maxBy(objects, 'n');
     * // => { 'n': 2 }
     */
    function maxBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
        : undefined;
    }

    /**
     * Computes the mean of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the mean.
     * @example
     *
     * _.mean([4, 2, 8, 6]);
     * // => 5
     */
    function mean(array) {
      return baseMean(array, identity);
    }

    /**
     * This method is like `_.mean` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be averaged.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the mean.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.meanBy(objects, function(o) { return o.n; });
     * // => 5
     *
     * // The `_.property` iteratee shorthand.
     * _.meanBy(objects, 'n');
     * // => 5
     */
    function meanBy(array, iteratee) {
      return baseMean(array, getIteratee(iteratee, 2));
    }

    /**
     * Computes the minimum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * _.min([4, 2, 8, 6]);
     * // => 2
     *
     * _.min([]);
     * // => undefined
     */
    function min(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseLt)
        : undefined;
    }

    /**
     * This method is like `_.min` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.minBy(objects, function(o) { return o.n; });
     * // => { 'n': 1 }
     *
     * // The `_.property` iteratee shorthand.
     * _.minBy(objects, 'n');
     * // => { 'n': 1 }
     */
    function minBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
        : undefined;
    }

    /**
     * Multiply two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} multiplier The first number in a multiplication.
     * @param {number} multiplicand The second number in a multiplication.
     * @returns {number} Returns the product.
     * @example
     *
     * _.multiply(6, 4);
     * // => 24
     */
    var multiply = createMathOperation(function(multiplier, multiplicand) {
      return multiplier * multiplicand;
    }, 1);

    /**
     * Computes `number` rounded to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round.
     * @param {number} [precision=0] The precision to round to.
     * @returns {number} Returns the rounded number.
     * @example
     *
     * _.round(4.006);
     * // => 4
     *
     * _.round(4.006, 2);
     * // => 4.01
     *
     * _.round(4060, -2);
     * // => 4100
     */
    var round = createRound('round');

    /**
     * Subtract two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {number} minuend The first number in a subtraction.
     * @param {number} subtrahend The second number in a subtraction.
     * @returns {number} Returns the difference.
     * @example
     *
     * _.subtract(6, 4);
     * // => 2
     */
    var subtract = createMathOperation(function(minuend, subtrahend) {
      return minuend - subtrahend;
    }, 0);

    /**
     * Computes the sum of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the sum.
     * @example
     *
     * _.sum([4, 2, 8, 6]);
     * // => 20
     */
    function sum(array) {
      return (array && array.length)
        ? baseSum(array, identity)
        : 0;
    }

    /**
     * This method is like `_.sum` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be summed.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the sum.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.sumBy(objects, function(o) { return o.n; });
     * // => 20
     *
     * // The `_.property` iteratee shorthand.
     * _.sumBy(objects, 'n');
     * // => 20
     */
    function sumBy(array, iteratee) {
      return (array && array.length)
        ? baseSum(array, getIteratee(iteratee, 2))
        : 0;
    }

    /*------------------------------------------------------------------------*/

    // Add methods that return wrapped values in chain sequences.
    lodash.after = after;
    lodash.ary = ary;
    lodash.assign = assign;
    lodash.assignIn = assignIn;
    lodash.assignInWith = assignInWith;
    lodash.assignWith = assignWith;
    lodash.at = at;
    lodash.before = before;
    lodash.bind = bind;
    lodash.bindAll = bindAll;
    lodash.bindKey = bindKey;
    lodash.castArray = castArray;
    lodash.chain = chain;
    lodash.chunk = chunk;
    lodash.compact = compact;
    lodash.concat = concat;
    lodash.cond = cond;
    lodash.conforms = conforms;
    lodash.constant = constant;
    lodash.countBy = countBy;
    lodash.create = create;
    lodash.curry = curry;
    lodash.curryRight = curryRight;
    lodash.debounce = debounce;
    lodash.defaults = defaults;
    lodash.defaultsDeep = defaultsDeep;
    lodash.defer = defer;
    lodash.delay = delay;
    lodash.difference = difference;
    lodash.differenceBy = differenceBy;
    lodash.differenceWith = differenceWith;
    lodash.drop = drop;
    lodash.dropRight = dropRight;
    lodash.dropRightWhile = dropRightWhile;
    lodash.dropWhile = dropWhile;
    lodash.fill = fill;
    lodash.filter = filter;
    lodash.flatMap = flatMap;
    lodash.flatMapDeep = flatMapDeep;
    lodash.flatMapDepth = flatMapDepth;
    lodash.flatten = flatten;
    lodash.flattenDeep = flattenDeep;
    lodash.flattenDepth = flattenDepth;
    lodash.flip = flip;
    lodash.flow = flow;
    lodash.flowRight = flowRight;
    lodash.fromPairs = fromPairs;
    lodash.functions = functions;
    lodash.functionsIn = functionsIn;
    lodash.groupBy = groupBy;
    lodash.initial = initial;
    lodash.intersection = intersection;
    lodash.intersectionBy = intersectionBy;
    lodash.intersectionWith = intersectionWith;
    lodash.invert = invert;
    lodash.invertBy = invertBy;
    lodash.invokeMap = invokeMap;
    lodash.iteratee = iteratee;
    lodash.keyBy = keyBy;
    lodash.keys = keys;
    lodash.keysIn = keysIn;
    lodash.map = map;
    lodash.mapKeys = mapKeys;
    lodash.mapValues = mapValues;
    lodash.matches = matches;
    lodash.matchesProperty = matchesProperty;
    lodash.memoize = memoize;
    lodash.merge = merge;
    lodash.mergeWith = mergeWith;
    lodash.method = method;
    lodash.methodOf = methodOf;
    lodash.mixin = mixin;
    lodash.negate = negate;
    lodash.nthArg = nthArg;
    lodash.omit = omit;
    lodash.omitBy = omitBy;
    lodash.once = once;
    lodash.orderBy = orderBy;
    lodash.over = over;
    lodash.overArgs = overArgs;
    lodash.overEvery = overEvery;
    lodash.overSome = overSome;
    lodash.partial = partial;
    lodash.partialRight = partialRight;
    lodash.partition = partition;
    lodash.pick = pick;
    lodash.pickBy = pickBy;
    lodash.property = property;
    lodash.propertyOf = propertyOf;
    lodash.pull = pull;
    lodash.pullAll = pullAll;
    lodash.pullAllBy = pullAllBy;
    lodash.pullAllWith = pullAllWith;
    lodash.pullAt = pullAt;
    lodash.range = range;
    lodash.rangeRight = rangeRight;
    lodash.rearg = rearg;
    lodash.reject = reject;
    lodash.remove = remove;
    lodash.rest = rest;
    lodash.reverse = reverse;
    lodash.sampleSize = sampleSize;
    lodash.set = set;
    lodash.setWith = setWith;
    lodash.shuffle = shuffle;
    lodash.slice = slice;
    lodash.sortBy = sortBy;
    lodash.sortedUniq = sortedUniq;
    lodash.sortedUniqBy = sortedUniqBy;
    lodash.split = split;
    lodash.spread = spread;
    lodash.tail = tail;
    lodash.take = take;
    lodash.takeRight = takeRight;
    lodash.takeRightWhile = takeRightWhile;
    lodash.takeWhile = takeWhile;
    lodash.tap = tap;
    lodash.throttle = throttle;
    lodash.thru = thru;
    lodash.toArray = toArray;
    lodash.toPairs = toPairs;
    lodash.toPairsIn = toPairsIn;
    lodash.toPath = toPath;
    lodash.toPlainObject = toPlainObject;
    lodash.transform = transform;
    lodash.unary = unary;
    lodash.union = union;
    lodash.unionBy = unionBy;
    lodash.unionWith = unionWith;
    lodash.uniq = uniq;
    lodash.uniqBy = uniqBy;
    lodash.uniqWith = uniqWith;
    lodash.unset = unset;
    lodash.unzip = unzip;
    lodash.unzipWith = unzipWith;
    lodash.update = update;
    lodash.updateWith = updateWith;
    lodash.values = values;
    lodash.valuesIn = valuesIn;
    lodash.without = without;
    lodash.words = words;
    lodash.wrap = wrap;
    lodash.xor = xor;
    lodash.xorBy = xorBy;
    lodash.xorWith = xorWith;
    lodash.zip = zip;
    lodash.zipObject = zipObject;
    lodash.zipObjectDeep = zipObjectDeep;
    lodash.zipWith = zipWith;

    // Add aliases.
    lodash.entries = toPairs;
    lodash.entriesIn = toPairsIn;
    lodash.extend = assignIn;
    lodash.extendWith = assignInWith;

    // Add methods to `lodash.prototype`.
    mixin(lodash, lodash);

    /*------------------------------------------------------------------------*/

    // Add methods that return unwrapped values in chain sequences.
    lodash.add = add;
    lodash.attempt = attempt;
    lodash.camelCase = camelCase;
    lodash.capitalize = capitalize;
    lodash.ceil = ceil;
    lodash.clamp = clamp;
    lodash.clone = clone;
    lodash.cloneDeep = cloneDeep;
    lodash.cloneDeepWith = cloneDeepWith;
    lodash.cloneWith = cloneWith;
    lodash.conformsTo = conformsTo;
    lodash.deburr = deburr;
    lodash.defaultTo = defaultTo;
    lodash.divide = divide;
    lodash.endsWith = endsWith;
    lodash.eq = eq;
    lodash.escape = escape;
    lodash.escapeRegExp = escapeRegExp;
    lodash.every = every;
    lodash.find = find;
    lodash.findIndex = findIndex;
    lodash.findKey = findKey;
    lodash.findLast = findLast;
    lodash.findLastIndex = findLastIndex;
    lodash.findLastKey = findLastKey;
    lodash.floor = floor;
    lodash.forEach = forEach;
    lodash.forEachRight = forEachRight;
    lodash.forIn = forIn;
    lodash.forInRight = forInRight;
    lodash.forOwn = forOwn;
    lodash.forOwnRight = forOwnRight;
    lodash.get = get;
    lodash.gt = gt;
    lodash.gte = gte;
    lodash.has = has;
    lodash.hasIn = hasIn;
    lodash.head = head;
    lodash.identity = identity;
    lodash.includes = includes;
    lodash.indexOf = indexOf;
    lodash.inRange = inRange;
    lodash.invoke = invoke;
    lodash.isArguments = isArguments;
    lodash.isArray = isArray;
    lodash.isArrayBuffer = isArrayBuffer;
    lodash.isArrayLike = isArrayLike;
    lodash.isArrayLikeObject = isArrayLikeObject;
    lodash.isBoolean = isBoolean;
    lodash.isBuffer = isBuffer;
    lodash.isDate = isDate;
    lodash.isElement = isElement;
    lodash.isEmpty = isEmpty;
    lodash.isEqual = isEqual;
    lodash.isEqualWith = isEqualWith;
    lodash.isError = isError;
    lodash.isFinite = isFinite;
    lodash.isFunction = isFunction;
    lodash.isInteger = isInteger;
    lodash.isLength = isLength;
    lodash.isMap = isMap;
    lodash.isMatch = isMatch;
    lodash.isMatchWith = isMatchWith;
    lodash.isNaN = isNaN;
    lodash.isNative = isNative;
    lodash.isNil = isNil;
    lodash.isNull = isNull;
    lodash.isNumber = isNumber;
    lodash.isObject = isObject;
    lodash.isObjectLike = isObjectLike;
    lodash.isPlainObject = isPlainObject;
    lodash.isRegExp = isRegExp;
    lodash.isSafeInteger = isSafeInteger;
    lodash.isSet = isSet;
    lodash.isString = isString;
    lodash.isSymbol = isSymbol;
    lodash.isTypedArray = isTypedArray;
    lodash.isUndefined = isUndefined;
    lodash.isWeakMap = isWeakMap;
    lodash.isWeakSet = isWeakSet;
    lodash.join = join;
    lodash.kebabCase = kebabCase;
    lodash.last = last;
    lodash.lastIndexOf = lastIndexOf;
    lodash.lowerCase = lowerCase;
    lodash.lowerFirst = lowerFirst;
    lodash.lt = lt;
    lodash.lte = lte;
    lodash.max = max;
    lodash.maxBy = maxBy;
    lodash.mean = mean;
    lodash.meanBy = meanBy;
    lodash.min = min;
    lodash.minBy = minBy;
    lodash.stubArray = stubArray;
    lodash.stubFalse = stubFalse;
    lodash.stubObject = stubObject;
    lodash.stubString = stubString;
    lodash.stubTrue = stubTrue;
    lodash.multiply = multiply;
    lodash.nth = nth;
    lodash.noConflict = noConflict;
    lodash.noop = noop;
    lodash.now = now;
    lodash.pad = pad;
    lodash.padEnd = padEnd;
    lodash.padStart = padStart;
    lodash.parseInt = parseInt;
    lodash.random = random;
    lodash.reduce = reduce;
    lodash.reduceRight = reduceRight;
    lodash.repeat = repeat;
    lodash.replace = replace;
    lodash.result = result;
    lodash.round = round;
    lodash.runInContext = runInContext;
    lodash.sample = sample;
    lodash.size = size;
    lodash.snakeCase = snakeCase;
    lodash.some = some;
    lodash.sortedIndex = sortedIndex;
    lodash.sortedIndexBy = sortedIndexBy;
    lodash.sortedIndexOf = sortedIndexOf;
    lodash.sortedLastIndex = sortedLastIndex;
    lodash.sortedLastIndexBy = sortedLastIndexBy;
    lodash.sortedLastIndexOf = sortedLastIndexOf;
    lodash.startCase = startCase;
    lodash.startsWith = startsWith;
    lodash.subtract = subtract;
    lodash.sum = sum;
    lodash.sumBy = sumBy;
    lodash.template = template;
    lodash.times = times;
    lodash.toFinite = toFinite;
    lodash.toInteger = toInteger;
    lodash.toLength = toLength;
    lodash.toLower = toLower;
    lodash.toNumber = toNumber;
    lodash.toSafeInteger = toSafeInteger;
    lodash.toString = toString;
    lodash.toUpper = toUpper;
    lodash.trim = trim;
    lodash.trimEnd = trimEnd;
    lodash.trimStart = trimStart;
    lodash.truncate = truncate;
    lodash.unescape = unescape;
    lodash.uniqueId = uniqueId;
    lodash.upperCase = upperCase;
    lodash.upperFirst = upperFirst;

    // Add aliases.
    lodash.each = forEach;
    lodash.eachRight = forEachRight;
    lodash.first = head;

    mixin(lodash, (function() {
      var source = {};
      baseForOwn(lodash, function(func, methodName) {
        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
          source[methodName] = func;
        }
      });
      return source;
    }()), { 'chain': false });

    /*------------------------------------------------------------------------*/

    /**
     * The semantic version number.
     *
     * @static
     * @memberOf _
     * @type {string}
     */
    lodash.VERSION = VERSION;

    // Assign default placeholders.
    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
      lodash[methodName].placeholder = lodash;
    });

    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
    arrayEach(['drop', 'take'], function(methodName, index) {
      LazyWrapper.prototype[methodName] = function(n) {
        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);

        var result = (this.__filtered__ && !index)
          ? new LazyWrapper(this)
          : this.clone();

        if (result.__filtered__) {
          result.__takeCount__ = nativeMin(n, result.__takeCount__);
        } else {
          result.__views__.push({
            'size': nativeMin(n, MAX_ARRAY_LENGTH),
            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
          });
        }
        return result;
      };

      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
        return this.reverse()[methodName](n).reverse();
      };
    });

    // Add `LazyWrapper` methods that accept an `iteratee` value.
    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
      var type = index + 1,
          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;

      LazyWrapper.prototype[methodName] = function(iteratee) {
        var result = this.clone();
        result.__iteratees__.push({
          'iteratee': getIteratee(iteratee, 3),
          'type': type
        });
        result.__filtered__ = result.__filtered__ || isFilter;
        return result;
      };
    });

    // Add `LazyWrapper` methods for `_.head` and `_.last`.
    arrayEach(['head', 'last'], function(methodName, index) {
      var takeName = 'take' + (index ? 'Right' : '');

      LazyWrapper.prototype[methodName] = function() {
        return this[takeName](1).value()[0];
      };
    });

    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
    arrayEach(['initial', 'tail'], function(methodName, index) {
      var dropName = 'drop' + (index ? '' : 'Right');

      LazyWrapper.prototype[methodName] = function() {
        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
      };
    });

    LazyWrapper.prototype.compact = function() {
      return this.filter(identity);
    };

    LazyWrapper.prototype.find = function(predicate) {
      return this.filter(predicate).head();
    };

    LazyWrapper.prototype.findLast = function(predicate) {
      return this.reverse().find(predicate);
    };

    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
      if (typeof path == 'function') {
        return new LazyWrapper(this);
      }
      return this.map(function(value) {
        return baseInvoke(value, path, args);
      });
    });

    LazyWrapper.prototype.reject = function(predicate) {
      return this.filter(negate(getIteratee(predicate)));
    };

    LazyWrapper.prototype.slice = function(start, end) {
      start = toInteger(start);

      var result = this;
      if (result.__filtered__ && (start > 0 || end < 0)) {
        return new LazyWrapper(result);
      }
      if (start < 0) {
        result = result.takeRight(-start);
      } else if (start) {
        result = result.drop(start);
      }
      if (end !== undefined) {
        end = toInteger(end);
        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
      }
      return result;
    };

    LazyWrapper.prototype.takeRightWhile = function(predicate) {
      return this.reverse().takeWhile(predicate).reverse();
    };

    LazyWrapper.prototype.toArray = function() {
      return this.take(MAX_ARRAY_LENGTH);
    };

    // Add `LazyWrapper` methods to `lodash.prototype`.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
          isTaker = /^(?:head|last)$/.test(methodName),
          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
          retUnwrapped = isTaker || /^find/.test(methodName);

      if (!lodashFunc) {
        return;
      }
      lodash.prototype[methodName] = function() {
        var value = this.__wrapped__,
            args = isTaker ? [1] : arguments,
            isLazy = value instanceof LazyWrapper,
            iteratee = args[0],
            useLazy = isLazy || isArray(value);

        var interceptor = function(value) {
          var result = lodashFunc.apply(lodash, arrayPush([value], args));
          return (isTaker && chainAll) ? result[0] : result;
        };

        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
          // Avoid lazy use if the iteratee has a "length" value other than `1`.
          isLazy = useLazy = false;
        }
        var chainAll = this.__chain__,
            isHybrid = !!this.__actions__.length,
            isUnwrapped = retUnwrapped && !chainAll,
            onlyLazy = isLazy && !isHybrid;

        if (!retUnwrapped && useLazy) {
          value = onlyLazy ? value : new LazyWrapper(this);
          var result = func.apply(value, args);
          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
          return new LodashWrapper(result, chainAll);
        }
        if (isUnwrapped && onlyLazy) {
          return func.apply(this, args);
        }
        result = this.thru(interceptor);
        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
      };
    });

    // Add `Array` methods to `lodash.prototype`.
    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
      var func = arrayProto[methodName],
          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
          retUnwrapped = /^(?:pop|shift)$/.test(methodName);

      lodash.prototype[methodName] = function() {
        var args = arguments;
        if (retUnwrapped && !this.__chain__) {
          var value = this.value();
          return func.apply(isArray(value) ? value : [], args);
        }
        return this[chainName](function(value) {
          return func.apply(isArray(value) ? value : [], args);
        });
      };
    });

    // Map minified method names to their real names.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var lodashFunc = lodash[methodName];
      if (lodashFunc) {
        var key = lodashFunc.name + '';
        if (!hasOwnProperty.call(realNames, key)) {
          realNames[key] = [];
        }
        realNames[key].push({ 'name': methodName, 'func': lodashFunc });
      }
    });

    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
      'name': 'wrapper',
      'func': undefined
    }];

    // Add methods to `LazyWrapper`.
    LazyWrapper.prototype.clone = lazyClone;
    LazyWrapper.prototype.reverse = lazyReverse;
    LazyWrapper.prototype.value = lazyValue;

    // Add chain sequence methods to the `lodash` wrapper.
    lodash.prototype.at = wrapperAt;
    lodash.prototype.chain = wrapperChain;
    lodash.prototype.commit = wrapperCommit;
    lodash.prototype.next = wrapperNext;
    lodash.prototype.plant = wrapperPlant;
    lodash.prototype.reverse = wrapperReverse;
    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;

    // Add lazy aliases.
    lodash.prototype.first = lodash.prototype.head;

    if (symIterator) {
      lodash.prototype[symIterator] = wrapperToIterator;
    }
    return lodash;
  });

  /*--------------------------------------------------------------------------*/

  // Export lodash.
  var _ = runInContext();

  // Some AMD build optimizers, like r.js, check for condition patterns like:
  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
    // Expose Lodash on the global object to prevent errors when Lodash is
    // loaded by a script tag in the presence of an AMD loader.
    // See http://requirejs.org/docs/errors.html#mismatch for more details.
    // Use `_.noConflict` to remove Lodash from the global object.
    root._ = _;

    // Define as an anonymous module so, through path mapping, it can be
    // referenced as the "underscore" module.
    define(function() {
      return _;
    });
  }
  // Check for `exports` after `define` in case a build optimizer adds it.
  else if (freeModule) {
    // Export for Node.js.
    (freeModule.exports = _)._ = _;
    // Export for CommonJS support.
    freeExports._ = _;
  }
  else {
    // Export to the global object.
    root._ = _;
  }
}.call(this));
/**
 * @license
 * Lodash <https://lodash.com/>
 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */
(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function r(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&t(n[r],r,n)!==!1;);return n}function e(n,t){for(var r=null==n?0:n.length;r--&&t(n[r],r,n)!==!1;);return n}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return!1;
return!0}function i(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function o(n,t){return!!(null==n?0:n.length)&&y(n,t,0)>-1}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return!0;return!1}function c(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function a(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function l(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);
return r}function s(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function h(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}function p(n){return n.split("")}function _(n){return n.match($t)||[]}function v(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,!1}),e}function g(n,t,r,e){for(var u=n.length,i=r+(e?1:-1);e?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function y(n,t,r){return t===t?Z(n,t,r):g(n,b,r)}function d(n,t,r,e){
for(var u=r-1,i=n.length;++u<i;)if(e(n[u],t))return u;return-1}function b(n){return n!==n}function w(n,t){var r=null==n?0:n.length;return r?k(n,t)/r:Cn}function m(n){return function(t){return null==t?X:t[n]}}function x(n){return function(t){return null==n?X:n[t]}}function j(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=!1,n):t(r,n,u,i)}),r}function A(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].value;return n}function k(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==X&&(r=r===X?i:r+i);
}return r}function O(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function I(n,t){return c(t,function(t){return[t,n[t]]})}function R(n){return n?n.slice(0,H(n)+1).replace(Lt,""):n}function z(n){return function(t){return n(t)}}function E(n,t){return c(t,function(t){return n[t]})}function S(n,t){return n.has(t)}function W(n,t){for(var r=-1,e=n.length;++r<e&&y(t,n[r],0)>-1;);return r}function L(n,t){for(var r=n.length;r--&&y(t,n[r],0)>-1;);return r}function C(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;
return e}function U(n){return"\\"+Yr[n]}function B(n,t){return null==n?X:n[t]}function T(n){return Nr.test(n)}function $(n){return Pr.test(n)}function D(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}function M(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function F(n,t){return function(r){return n(t(r))}}function N(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&o!==cn||(n[r]=cn,i[u++]=r)}return i}function P(n){var t=-1,r=Array(n.size);
return n.forEach(function(n){r[++t]=n}),r}function q(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function Z(n,t,r){for(var e=r-1,u=n.length;++e<u;)if(n[e]===t)return e;return-1}function K(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}function V(n){return T(n)?J(n):_e(n)}function G(n){return T(n)?Y(n):p(n)}function H(n){for(var t=n.length;t--&&Ct.test(n.charAt(t)););return t}function J(n){for(var t=Mr.lastIndex=0;Mr.test(n);)++t;return t}function Y(n){return n.match(Mr)||[];
}function Q(n){return n.match(Fr)||[]}var X,nn="4.17.21",tn=200,rn="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",en="Expected a function",un="Invalid `variable` option passed into `_.template`",on="__lodash_hash_undefined__",fn=500,cn="__lodash_placeholder__",an=1,ln=2,sn=4,hn=1,pn=2,_n=1,vn=2,gn=4,yn=8,dn=16,bn=32,wn=64,mn=128,xn=256,jn=512,An=30,kn="...",On=800,In=16,Rn=1,zn=2,En=3,Sn=1/0,Wn=9007199254740991,Ln=1.7976931348623157e308,Cn=NaN,Un=4294967295,Bn=Un-1,Tn=Un>>>1,$n=[["ary",mn],["bind",_n],["bindKey",vn],["curry",yn],["curryRight",dn],["flip",jn],["partial",bn],["partialRight",wn],["rearg",xn]],Dn="[object Arguments]",Mn="[object Array]",Fn="[object AsyncFunction]",Nn="[object Boolean]",Pn="[object Date]",qn="[object DOMException]",Zn="[object Error]",Kn="[object Function]",Vn="[object GeneratorFunction]",Gn="[object Map]",Hn="[object Number]",Jn="[object Null]",Yn="[object Object]",Qn="[object Promise]",Xn="[object Proxy]",nt="[object RegExp]",tt="[object Set]",rt="[object String]",et="[object Symbol]",ut="[object Undefined]",it="[object WeakMap]",ot="[object WeakSet]",ft="[object ArrayBuffer]",ct="[object DataView]",at="[object Float32Array]",lt="[object Float64Array]",st="[object Int8Array]",ht="[object Int16Array]",pt="[object Int32Array]",_t="[object Uint8Array]",vt="[object Uint8ClampedArray]",gt="[object Uint16Array]",yt="[object Uint32Array]",dt=/\b__p \+= '';/g,bt=/\b(__p \+=) '' \+/g,wt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,mt=/&(?:amp|lt|gt|quot|#39);/g,xt=/[&<>"']/g,jt=RegExp(mt.source),At=RegExp(xt.source),kt=/<%-([\s\S]+?)%>/g,Ot=/<%([\s\S]+?)%>/g,It=/<%=([\s\S]+?)%>/g,Rt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,zt=/^\w*$/,Et=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,St=/[\\^$.*+?()[\]{}|]/g,Wt=RegExp(St.source),Lt=/^\s+/,Ct=/\s/,Ut=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Bt=/\{\n\/\* \[wrapped with (.+)\] \*/,Tt=/,? & /,$t=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Dt=/[()=,{}\[\]\/\s]/,Mt=/\\(\\)?/g,Ft=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Nt=/\w*$/,Pt=/^[-+]0x[0-9a-f]+$/i,qt=/^0b[01]+$/i,Zt=/^\[object .+?Constructor\]$/,Kt=/^0o[0-7]+$/i,Vt=/^(?:0|[1-9]\d*)$/,Gt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ht=/($^)/,Jt=/['\n\r\u2028\u2029\\]/g,Yt="\\ud800-\\udfff",Qt="\\u0300-\\u036f",Xt="\\ufe20-\\ufe2f",nr="\\u20d0-\\u20ff",tr=Qt+Xt+nr,rr="\\u2700-\\u27bf",er="a-z\\xdf-\\xf6\\xf8-\\xff",ur="\\xac\\xb1\\xd7\\xf7",ir="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",or="\\u2000-\\u206f",fr=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",cr="A-Z\\xc0-\\xd6\\xd8-\\xde",ar="\\ufe0e\\ufe0f",lr=ur+ir+or+fr,sr="['\u2019]",hr="["+Yt+"]",pr="["+lr+"]",_r="["+tr+"]",vr="\\d+",gr="["+rr+"]",yr="["+er+"]",dr="[^"+Yt+lr+vr+rr+er+cr+"]",br="\\ud83c[\\udffb-\\udfff]",wr="(?:"+_r+"|"+br+")",mr="[^"+Yt+"]",xr="(?:\\ud83c[\\udde6-\\uddff]){2}",jr="[\\ud800-\\udbff][\\udc00-\\udfff]",Ar="["+cr+"]",kr="\\u200d",Or="(?:"+yr+"|"+dr+")",Ir="(?:"+Ar+"|"+dr+")",Rr="(?:"+sr+"(?:d|ll|m|re|s|t|ve))?",zr="(?:"+sr+"(?:D|LL|M|RE|S|T|VE))?",Er=wr+"?",Sr="["+ar+"]?",Wr="(?:"+kr+"(?:"+[mr,xr,jr].join("|")+")"+Sr+Er+")*",Lr="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Cr="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Ur=Sr+Er+Wr,Br="(?:"+[gr,xr,jr].join("|")+")"+Ur,Tr="(?:"+[mr+_r+"?",_r,xr,jr,hr].join("|")+")",$r=RegExp(sr,"g"),Dr=RegExp(_r,"g"),Mr=RegExp(br+"(?="+br+")|"+Tr+Ur,"g"),Fr=RegExp([Ar+"?"+yr+"+"+Rr+"(?="+[pr,Ar,"$"].join("|")+")",Ir+"+"+zr+"(?="+[pr,Ar+Or,"$"].join("|")+")",Ar+"?"+Or+"+"+Rr,Ar+"+"+zr,Cr,Lr,vr,Br].join("|"),"g"),Nr=RegExp("["+kr+Yt+tr+ar+"]"),Pr=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,qr=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Zr=-1,Kr={};
Kr[at]=Kr[lt]=Kr[st]=Kr[ht]=Kr[pt]=Kr[_t]=Kr[vt]=Kr[gt]=Kr[yt]=!0,Kr[Dn]=Kr[Mn]=Kr[ft]=Kr[Nn]=Kr[ct]=Kr[Pn]=Kr[Zn]=Kr[Kn]=Kr[Gn]=Kr[Hn]=Kr[Yn]=Kr[nt]=Kr[tt]=Kr[rt]=Kr[it]=!1;var Vr={};Vr[Dn]=Vr[Mn]=Vr[ft]=Vr[ct]=Vr[Nn]=Vr[Pn]=Vr[at]=Vr[lt]=Vr[st]=Vr[ht]=Vr[pt]=Vr[Gn]=Vr[Hn]=Vr[Yn]=Vr[nt]=Vr[tt]=Vr[rt]=Vr[et]=Vr[_t]=Vr[vt]=Vr[gt]=Vr[yt]=!0,Vr[Zn]=Vr[Kn]=Vr[it]=!1;var Gr={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a",
"\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae",
"\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g",
"\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O",
"\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w",
"\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"},Hr={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Jr={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},Yr={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Qr=parseFloat,Xr=parseInt,ne="object"==typeof global&&global&&global.Object===Object&&global,te="object"==typeof self&&self&&self.Object===Object&&self,re=ne||te||Function("return this")(),ee="object"==typeof exports&&exports&&!exports.nodeType&&exports,ue=ee&&"object"==typeof module&&module&&!module.nodeType&&module,ie=ue&&ue.exports===ee,oe=ie&&ne.process,fe=function(){
try{var n=ue&&ue.require&&ue.require("util").types;return n?n:oe&&oe.binding&&oe.binding("util")}catch(n){}}(),ce=fe&&fe.isArrayBuffer,ae=fe&&fe.isDate,le=fe&&fe.isMap,se=fe&&fe.isRegExp,he=fe&&fe.isSet,pe=fe&&fe.isTypedArray,_e=m("length"),ve=x(Gr),ge=x(Hr),ye=x(Jr),de=function p(x){function Z(n){if(cc(n)&&!bh(n)&&!(n instanceof Ct)){if(n instanceof Y)return n;if(bl.call(n,"__wrapped__"))return eo(n)}return new Y(n)}function J(){}function Y(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,
this.__index__=0,this.__values__=X}function Ct(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Un,this.__views__=[]}function $t(){var n=new Ct(this.__wrapped__);return n.__actions__=Tu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Tu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Tu(this.__views__),n}function Yt(){if(this.__filtered__){var n=new Ct(this);n.__dir__=-1,
n.__filtered__=!0}else n=this.clone(),n.__dir__*=-1;return n}function Qt(){var n=this.__wrapped__.value(),t=this.__dir__,r=bh(n),e=t<0,u=r?n.length:0,i=Oi(0,u,this.__views__),o=i.start,f=i.end,c=f-o,a=e?f:o-1,l=this.__iteratees__,s=l.length,h=0,p=Hl(c,this.__takeCount__);if(!r||!e&&u==c&&p==c)return wu(n,this.__actions__);var _=[];n:for(;c--&&h<p;){a+=t;for(var v=-1,g=n[a];++v<s;){var y=l[v],d=y.iteratee,b=y.type,w=d(g);if(b==zn)g=w;else if(!w){if(b==Rn)continue n;break n}}_[h++]=g}return _}function Xt(n){
var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function nr(){this.__data__=is?is(null):{},this.size=0}function tr(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t}function rr(n){var t=this.__data__;if(is){var r=t[n];return r===on?X:r}return bl.call(t,n)?t[n]:X}function er(n){var t=this.__data__;return is?t[n]!==X:bl.call(t,n)}function ur(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=is&&t===X?on:t,this}function ir(n){
var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function or(){this.__data__=[],this.size=0}function fr(n){var t=this.__data__,r=Wr(t,n);return!(r<0)&&(r==t.length-1?t.pop():Ll.call(t,r,1),--this.size,!0)}function cr(n){var t=this.__data__,r=Wr(t,n);return r<0?X:t[r][1]}function ar(n){return Wr(this.__data__,n)>-1}function lr(n,t){var r=this.__data__,e=Wr(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this}function sr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){
var e=n[t];this.set(e[0],e[1])}}function hr(){this.size=0,this.__data__={hash:new Xt,map:new(ts||ir),string:new Xt}}function pr(n){var t=xi(this,n).delete(n);return this.size-=t?1:0,t}function _r(n){return xi(this,n).get(n)}function vr(n){return xi(this,n).has(n)}function gr(n,t){var r=xi(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this}function yr(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new sr;++t<r;)this.add(n[t])}function dr(n){return this.__data__.set(n,on),this}function br(n){
return this.__data__.has(n)}function wr(n){this.size=(this.__data__=new ir(n)).size}function mr(){this.__data__=new ir,this.size=0}function xr(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r}function jr(n){return this.__data__.get(n)}function Ar(n){return this.__data__.has(n)}function kr(n,t){var r=this.__data__;if(r instanceof ir){var e=r.__data__;if(!ts||e.length<tn-1)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new sr(e)}return r.set(n,t),this.size=r.size,this}function Or(n,t){
var r=bh(n),e=!r&&dh(n),u=!r&&!e&&mh(n),i=!r&&!e&&!u&&Oh(n),o=r||e||u||i,f=o?O(n.length,hl):[],c=f.length;for(var a in n)!t&&!bl.call(n,a)||o&&("length"==a||u&&("offset"==a||"parent"==a)||i&&("buffer"==a||"byteLength"==a||"byteOffset"==a)||Ci(a,c))||f.push(a);return f}function Ir(n){var t=n.length;return t?n[tu(0,t-1)]:X}function Rr(n,t){return Xi(Tu(n),Mr(t,0,n.length))}function zr(n){return Xi(Tu(n))}function Er(n,t,r){(r===X||Gf(n[t],r))&&(r!==X||t in n)||Br(n,t,r)}function Sr(n,t,r){var e=n[t];
bl.call(n,t)&&Gf(e,r)&&(r!==X||t in n)||Br(n,t,r)}function Wr(n,t){for(var r=n.length;r--;)if(Gf(n[r][0],t))return r;return-1}function Lr(n,t,r,e){return ys(n,function(n,u,i){t(e,n,r(n),i)}),e}function Cr(n,t){return n&&$u(t,Pc(t),n)}function Ur(n,t){return n&&$u(t,qc(t),n)}function Br(n,t,r){"__proto__"==t&&Tl?Tl(n,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):n[t]=r}function Tr(n,t){for(var r=-1,e=t.length,u=il(e),i=null==n;++r<e;)u[r]=i?X:Mc(n,t[r]);return u}function Mr(n,t,r){return n===n&&(r!==X&&(n=n<=r?n:r),
t!==X&&(n=n>=t?n:t)),n}function Fr(n,t,e,u,i,o){var f,c=t&an,a=t&ln,l=t&sn;if(e&&(f=i?e(n,u,i,o):e(n)),f!==X)return f;if(!fc(n))return n;var s=bh(n);if(s){if(f=zi(n),!c)return Tu(n,f)}else{var h=zs(n),p=h==Kn||h==Vn;if(mh(n))return Iu(n,c);if(h==Yn||h==Dn||p&&!i){if(f=a||p?{}:Ei(n),!c)return a?Mu(n,Ur(f,n)):Du(n,Cr(f,n))}else{if(!Vr[h])return i?n:{};f=Si(n,h,c)}}o||(o=new wr);var _=o.get(n);if(_)return _;o.set(n,f),kh(n)?n.forEach(function(r){f.add(Fr(r,t,e,r,n,o))}):jh(n)&&n.forEach(function(r,u){
f.set(u,Fr(r,t,e,u,n,o))});var v=l?a?di:yi:a?qc:Pc,g=s?X:v(n);return r(g||n,function(r,u){g&&(u=r,r=n[u]),Sr(f,u,Fr(r,t,e,u,n,o))}),f}function Nr(n){var t=Pc(n);return function(r){return Pr(r,n,t)}}function Pr(n,t,r){var e=r.length;if(null==n)return!e;for(n=ll(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===X&&!(u in n)||!i(o))return!1}return!0}function Gr(n,t,r){if("function"!=typeof n)throw new pl(en);return Ws(function(){n.apply(X,r)},t)}function Hr(n,t,r,e){var u=-1,i=o,a=!0,l=n.length,s=[],h=t.length;
if(!l)return s;r&&(t=c(t,z(r))),e?(i=f,a=!1):t.length>=tn&&(i=S,a=!1,t=new yr(t));n:for(;++u<l;){var p=n[u],_=null==r?p:r(p);if(p=e||0!==p?p:0,a&&_===_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function Jr(n,t){var r=!0;return ys(n,function(n,e,u){return r=!!t(n,e,u)}),r}function Yr(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===X?o===o&&!bc(o):r(o,f)))var f=o,c=i}return c}function ne(n,t,r,e){var u=n.length;for(r=kc(r),r<0&&(r=-r>u?0:u+r),
e=e===X||e>u?u:kc(e),e<0&&(e+=u),e=r>e?0:Oc(e);r<e;)n[r++]=t;return n}function te(n,t){var r=[];return ys(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function ee(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=Li),u||(u=[]);++i<o;){var f=n[i];t>0&&r(f)?t>1?ee(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function ue(n,t){return n&&bs(n,t,Pc)}function oe(n,t){return n&&ws(n,t,Pc)}function fe(n,t){return i(t,function(t){return uc(n[t])})}function _e(n,t){t=ku(t,n);for(var r=0,e=t.length;null!=n&&r<e;)n=n[no(t[r++])];
return r&&r==e?n:X}function de(n,t,r){var e=t(n);return bh(n)?e:a(e,r(n))}function we(n){return null==n?n===X?ut:Jn:Bl&&Bl in ll(n)?ki(n):Ki(n)}function me(n,t){return n>t}function xe(n,t){return null!=n&&bl.call(n,t)}function je(n,t){return null!=n&&t in ll(n)}function Ae(n,t,r){return n>=Hl(t,r)&&n<Gl(t,r)}function ke(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=il(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,z(t))),s=Hl(p.length,s),l[a]=!r&&(t||u>=120&&p.length>=120)?new yr(a&&p):X}p=n[0];
var _=-1,v=l[0];n:for(;++_<u&&h.length<s;){var g=p[_],y=t?t(g):g;if(g=r||0!==g?g:0,!(v?S(v,y):e(h,y,r))){for(a=i;--a;){var d=l[a];if(!(d?S(d,y):e(n[a],y,r)))continue n}v&&v.push(y),h.push(g)}}return h}function Oe(n,t,r,e){return ue(n,function(n,u,i){t(e,r(n),u,i)}),e}function Ie(t,r,e){r=ku(r,t),t=Gi(t,r);var u=null==t?t:t[no(jo(r))];return null==u?X:n(u,t,e)}function Re(n){return cc(n)&&we(n)==Dn}function ze(n){return cc(n)&&we(n)==ft}function Ee(n){return cc(n)&&we(n)==Pn}function Se(n,t,r,e,u){
return n===t||(null==n||null==t||!cc(n)&&!cc(t)?n!==n&&t!==t:We(n,t,r,e,Se,u))}function We(n,t,r,e,u,i){var o=bh(n),f=bh(t),c=o?Mn:zs(n),a=f?Mn:zs(t);c=c==Dn?Yn:c,a=a==Dn?Yn:a;var l=c==Yn,s=a==Yn,h=c==a;if(h&&mh(n)){if(!mh(t))return!1;o=!0,l=!1}if(h&&!l)return i||(i=new wr),o||Oh(n)?pi(n,t,r,e,u,i):_i(n,t,c,r,e,u,i);if(!(r&hn)){var p=l&&bl.call(n,"__wrapped__"),_=s&&bl.call(t,"__wrapped__");if(p||_){var v=p?n.value():n,g=_?t.value():t;return i||(i=new wr),u(v,g,r,e,i)}}return!!h&&(i||(i=new wr),vi(n,t,r,e,u,i));
}function Le(n){return cc(n)&&zs(n)==Gn}function Ce(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=ll(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++u<i;){f=r[u];var c=f[0],a=n[c],l=f[1];if(o&&f[2]){if(a===X&&!(c in n))return!1}else{var s=new wr;if(e)var h=e(a,l,c,n,t,s);if(!(h===X?Se(l,a,hn|pn,e,s):h))return!1}}return!0}function Ue(n){return!(!fc(n)||Di(n))&&(uc(n)?kl:Zt).test(to(n))}function Be(n){return cc(n)&&we(n)==nt}function Te(n){return cc(n)&&zs(n)==tt;
}function $e(n){return cc(n)&&oc(n.length)&&!!Kr[we(n)]}function De(n){return"function"==typeof n?n:null==n?La:"object"==typeof n?bh(n)?Ze(n[0],n[1]):qe(n):Fa(n)}function Me(n){if(!Mi(n))return Vl(n);var t=[];for(var r in ll(n))bl.call(n,r)&&"constructor"!=r&&t.push(r);return t}function Fe(n){if(!fc(n))return Zi(n);var t=Mi(n),r=[];for(var e in n)("constructor"!=e||!t&&bl.call(n,e))&&r.push(e);return r}function Ne(n,t){return n<t}function Pe(n,t){var r=-1,e=Hf(n)?il(n.length):[];return ys(n,function(n,u,i){
e[++r]=t(n,u,i)}),e}function qe(n){var t=ji(n);return 1==t.length&&t[0][2]?Ni(t[0][0],t[0][1]):function(r){return r===n||Ce(r,n,t)}}function Ze(n,t){return Bi(n)&&Fi(t)?Ni(no(n),t):function(r){var e=Mc(r,n);return e===X&&e===t?Nc(r,n):Se(t,e,hn|pn)}}function Ke(n,t,r,e,u){n!==t&&bs(t,function(i,o){if(u||(u=new wr),fc(i))Ve(n,t,o,r,Ke,e,u);else{var f=e?e(Ji(n,o),i,o+"",n,t,u):X;f===X&&(f=i),Er(n,o,f)}},qc)}function Ve(n,t,r,e,u,i,o){var f=Ji(n,r),c=Ji(t,r),a=o.get(c);if(a)return Er(n,r,a),X;var l=i?i(f,c,r+"",n,t,o):X,s=l===X;
if(s){var h=bh(c),p=!h&&mh(c),_=!h&&!p&&Oh(c);l=c,h||p||_?bh(f)?l=f:Jf(f)?l=Tu(f):p?(s=!1,l=Iu(c,!0)):_?(s=!1,l=Wu(c,!0)):l=[]:gc(c)||dh(c)?(l=f,dh(f)?l=Rc(f):fc(f)&&!uc(f)||(l=Ei(c))):s=!1}s&&(o.set(c,l),u(l,c,e,i,o),o.delete(c)),Er(n,r,l)}function Ge(n,t){var r=n.length;if(r)return t+=t<0?r:0,Ci(t,r)?n[t]:X}function He(n,t,r){t=t.length?c(t,function(n){return bh(n)?function(t){return _e(t,1===n.length?n[0]:n)}:n}):[La];var e=-1;return t=c(t,z(mi())),A(Pe(n,function(n,r,u){return{criteria:c(t,function(t){
return t(n)}),index:++e,value:n}}),function(n,t){return Cu(n,t,r)})}function Je(n,t){return Ye(n,t,function(t,r){return Nc(n,r)})}function Ye(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=_e(n,o);r(f,o)&&fu(i,ku(o,n),f)}return i}function Qe(n){return function(t){return _e(t,n)}}function Xe(n,t,r,e){var u=e?d:y,i=-1,o=t.length,f=n;for(n===t&&(t=Tu(t)),r&&(f=c(n,z(r)));++i<o;)for(var a=0,l=t[i],s=r?r(l):l;(a=u(f,s,a,e))>-1;)f!==n&&Ll.call(f,a,1),Ll.call(n,a,1);return n}function nu(n,t){for(var r=n?t.length:0,e=r-1;r--;){
var u=t[r];if(r==e||u!==i){var i=u;Ci(u)?Ll.call(n,u,1):yu(n,u)}}return n}function tu(n,t){return n+Nl(Ql()*(t-n+1))}function ru(n,t,r,e){for(var u=-1,i=Gl(Fl((t-n)/(r||1)),0),o=il(i);i--;)o[e?i:++u]=n,n+=r;return o}function eu(n,t){var r="";if(!n||t<1||t>Wn)return r;do t%2&&(r+=n),t=Nl(t/2),t&&(n+=n);while(t);return r}function uu(n,t){return Ls(Vi(n,t,La),n+"")}function iu(n){return Ir(ra(n))}function ou(n,t){var r=ra(n);return Xi(r,Mr(t,0,r.length))}function fu(n,t,r,e){if(!fc(n))return n;t=ku(t,n);
for(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++u<i;){var c=no(t[u]),a=r;if("__proto__"===c||"constructor"===c||"prototype"===c)return n;if(u!=o){var l=f[c];a=e?e(l,c,f):X,a===X&&(a=fc(l)?l:Ci(t[u+1])?[]:{})}Sr(f,c,a),f=f[c]}return n}function cu(n){return Xi(ra(n))}function au(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),r=r>u?u:r,r<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=il(u);++e<u;)i[e]=n[e+t];return i}function lu(n,t){var r;return ys(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function su(n,t,r){
var e=0,u=null==n?e:n.length;if("number"==typeof t&&t===t&&u<=Tn){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!bc(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return hu(n,t,La,r)}function hu(n,t,r,e){var u=0,i=null==n?0:n.length;if(0===i)return 0;t=r(t);for(var o=t!==t,f=null===t,c=bc(t),a=t===X;u<i;){var l=Nl((u+i)/2),s=r(n[l]),h=s!==X,p=null===s,_=s===s,v=bc(s);if(o)var g=e||_;else g=a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):!p&&!v&&(e?s<=t:s<t);g?u=l+1:i=l}return Hl(i,Bn)}function pu(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){
var o=n[r],f=t?t(o):o;if(!r||!Gf(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function _u(n){return"number"==typeof n?n:bc(n)?Cn:+n}function vu(n){if("string"==typeof n)return n;if(bh(n))return c(n,vu)+"";if(bc(n))return vs?vs.call(n):"";var t=n+"";return"0"==t&&1/n==-Sn?"-0":t}function gu(n,t,r){var e=-1,u=o,i=n.length,c=!0,a=[],l=a;if(r)c=!1,u=f;else if(i>=tn){var s=t?null:ks(n);if(s)return P(s);c=!1,u=S,l=new yr}else l=t?[]:a;n:for(;++e<i;){var h=n[e],p=t?t(h):h;if(h=r||0!==h?h:0,c&&p===p){for(var _=l.length;_--;)if(l[_]===p)continue n;
t&&l.push(p),a.push(h)}else u(l,p,r)||(l!==a&&l.push(p),a.push(h))}return a}function yu(n,t){return t=ku(t,n),n=Gi(n,t),null==n||delete n[no(jo(t))]}function du(n,t,r,e){return fu(n,t,r(_e(n,t)),e)}function bu(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?au(n,e?0:i,e?i+1:u):au(n,e?i+1:0,e?u:i)}function wu(n,t){var r=n;return r instanceof Ct&&(r=r.value()),l(t,function(n,t){return t.func.apply(t.thisArg,a([n],t.args))},r)}function mu(n,t,r){var e=n.length;if(e<2)return e?gu(n[0]):[];
for(var u=-1,i=il(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=Hr(i[u]||o,n[f],t,r));return gu(ee(i,1),t,r)}function xu(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;){r(o,n[e],e<i?t[e]:X)}return o}function ju(n){return Jf(n)?n:[]}function Au(n){return"function"==typeof n?n:La}function ku(n,t){return bh(n)?n:Bi(n,t)?[n]:Cs(Ec(n))}function Ou(n,t,r){var e=n.length;return r=r===X?e:r,!t&&r>=e?n:au(n,t,r)}function Iu(n,t){if(t)return n.slice();var r=n.length,e=zl?zl(r):new n.constructor(r);
return n.copy(e),e}function Ru(n){var t=new n.constructor(n.byteLength);return new Rl(t).set(new Rl(n)),t}function zu(n,t){return new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.byteLength)}function Eu(n){var t=new n.constructor(n.source,Nt.exec(n));return t.lastIndex=n.lastIndex,t}function Su(n){return _s?ll(_s.call(n)):{}}function Wu(n,t){return new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.length)}function Lu(n,t){if(n!==t){var r=n!==X,e=null===n,u=n===n,i=bc(n),o=t!==X,f=null===t,c=t===t,a=bc(t);
if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function Cu(n,t,r){for(var e=-1,u=n.criteria,i=t.criteria,o=u.length,f=r.length;++e<o;){var c=Lu(u[e],i[e]);if(c){if(e>=f)return c;return c*("desc"==r[e]?-1:1)}}return n.index-t.index}function Uu(n,t,r,e){for(var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Gl(i-o,0),l=il(c+a),s=!e;++f<c;)l[f]=t[f];for(;++u<o;)(s||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];return l;
}function Bu(n,t,r,e){for(var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=Gl(i-f,0),s=il(l+a),h=!e;++u<l;)s[u]=n[u];for(var p=u;++c<a;)s[p+c]=t[c];for(;++o<f;)(h||u<i)&&(s[p+r[o]]=n[u++]);return s}function Tu(n,t){var r=-1,e=n.length;for(t||(t=il(e));++r<e;)t[r]=n[r];return t}function $u(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):X;c===X&&(c=n[f]),u?Br(r,f,c):Sr(r,f,c)}return r}function Du(n,t){return $u(n,Is(n),t)}function Mu(n,t){return $u(n,Rs(n),t);
}function Fu(n,r){return function(e,u){var i=bh(e)?t:Lr,o=r?r():{};return i(e,n,mi(u,2),o)}}function Nu(n){return uu(function(t,r){var e=-1,u=r.length,i=u>1?r[u-1]:X,o=u>2?r[2]:X;for(i=n.length>3&&"function"==typeof i?(u--,i):X,o&&Ui(r[0],r[1],o)&&(i=u<3?X:i,u=1),t=ll(t);++e<u;){var f=r[e];f&&n(t,f,e,i)}return t})}function Pu(n,t){return function(r,e){if(null==r)return r;if(!Hf(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=ll(r);(t?i--:++i<u)&&e(o[i],i,o)!==!1;);return r}}function qu(n){return function(t,r,e){
for(var u=-1,i=ll(t),o=e(t),f=o.length;f--;){var c=o[n?f:++u];if(r(i[c],c,i)===!1)break}return t}}function Zu(n,t,r){function e(){return(this&&this!==re&&this instanceof e?i:n).apply(u?r:this,arguments)}var u=t&_n,i=Gu(n);return e}function Ku(n){return function(t){t=Ec(t);var r=T(t)?G(t):X,e=r?r[0]:t.charAt(0),u=r?Ou(r,1).join(""):t.slice(1);return e[n]()+u}}function Vu(n){return function(t){return l(Ra(ca(t).replace($r,"")),n,"")}}function Gu(n){return function(){var t=arguments;switch(t.length){
case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=gs(n.prototype),e=n.apply(r,t);return fc(e)?e:r}}function Hu(t,r,e){function u(){for(var o=arguments.length,f=il(o),c=o,a=wi(u);c--;)f[c]=arguments[c];var l=o<3&&f[0]!==a&&f[o-1]!==a?[]:N(f,a);
return o-=l.length,o<e?oi(t,r,Qu,u.placeholder,X,f,l,X,X,e-o):n(this&&this!==re&&this instanceof u?i:t,this,f)}var i=Gu(t);return u}function Ju(n){return function(t,r,e){var u=ll(t);if(!Hf(t)){var i=mi(r,3);t=Pc(t),r=function(n){return i(u[n],n,u)}}var o=n(t,r,e);return o>-1?u[i?t[o]:o]:X}}function Yu(n){return gi(function(t){var r=t.length,e=r,u=Y.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if("function"!=typeof i)throw new pl(en);if(u&&!o&&"wrapper"==bi(i))var o=new Y([],!0)}for(e=o?e:r;++e<r;){
i=t[e];var f=bi(i),c="wrapper"==f?Os(i):X;o=c&&$i(c[0])&&c[1]==(mn|yn|bn|xn)&&!c[4].length&&1==c[9]?o[bi(c[0])].apply(o,c[3]):1==i.length&&$i(i)?o[f]():o.thru(i)}return function(){var n=arguments,e=n[0];if(o&&1==n.length&&bh(e))return o.plant(e).value();for(var u=0,i=r?t[u].apply(this,n):e;++u<r;)i=t[u].call(this,i);return i}})}function Qu(n,t,r,e,u,i,o,f,c,a){function l(){for(var y=arguments.length,d=il(y),b=y;b--;)d[b]=arguments[b];if(_)var w=wi(l),m=C(d,w);if(e&&(d=Uu(d,e,u,_)),i&&(d=Bu(d,i,o,_)),
y-=m,_&&y<a){return oi(n,t,Qu,l.placeholder,r,d,N(d,w),f,c,a-y)}var x=h?r:this,j=p?x[n]:n;return y=d.length,f?d=Hi(d,f):v&&y>1&&d.reverse(),s&&c<y&&(d.length=c),this&&this!==re&&this instanceof l&&(j=g||Gu(j)),j.apply(x,d)}var s=t&mn,h=t&_n,p=t&vn,_=t&(yn|dn),v=t&jn,g=p?X:Gu(n);return l}function Xu(n,t){return function(r,e){return Oe(r,n,t(e),{})}}function ni(n,t){return function(r,e){var u;if(r===X&&e===X)return t;if(r!==X&&(u=r),e!==X){if(u===X)return e;"string"==typeof r||"string"==typeof e?(r=vu(r),
e=vu(e)):(r=_u(r),e=_u(e)),u=n(r,e)}return u}}function ti(t){return gi(function(r){return r=c(r,z(mi())),uu(function(e){var u=this;return t(r,function(t){return n(t,u,e)})})})}function ri(n,t){t=t===X?" ":vu(t);var r=t.length;if(r<2)return r?eu(t,n):t;var e=eu(t,Fl(n/V(t)));return T(t)?Ou(G(e),0,n).join(""):e.slice(0,n)}function ei(t,r,e,u){function i(){for(var r=-1,c=arguments.length,a=-1,l=u.length,s=il(l+c),h=this&&this!==re&&this instanceof i?f:t;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++r];
return n(h,o?e:this,s)}var o=r&_n,f=Gu(t);return i}function ui(n){return function(t,r,e){return e&&"number"!=typeof e&&Ui(t,r,e)&&(r=e=X),t=Ac(t),r===X?(r=t,t=0):r=Ac(r),e=e===X?t<r?1:-1:Ac(e),ru(t,r,e,n)}}function ii(n){return function(t,r){return"string"==typeof t&&"string"==typeof r||(t=Ic(t),r=Ic(r)),n(t,r)}}function oi(n,t,r,e,u,i,o,f,c,a){var l=t&yn,s=l?o:X,h=l?X:o,p=l?i:X,_=l?X:i;t|=l?bn:wn,t&=~(l?wn:bn),t&gn||(t&=~(_n|vn));var v=[n,t,u,p,s,_,h,f,c,a],g=r.apply(X,v);return $i(n)&&Ss(g,v),g.placeholder=e,
Yi(g,n,t)}function fi(n){var t=al[n];return function(n,r){if(n=Ic(n),r=null==r?0:Hl(kc(r),292),r&&Zl(n)){var e=(Ec(n)+"e").split("e");return e=(Ec(t(e[0]+"e"+(+e[1]+r)))+"e").split("e"),+(e[0]+"e"+(+e[1]-r))}return t(n)}}function ci(n){return function(t){var r=zs(t);return r==Gn?M(t):r==tt?q(t):I(t,n(t))}}function ai(n,t,r,e,u,i,o,f){var c=t&vn;if(!c&&"function"!=typeof n)throw new pl(en);var a=e?e.length:0;if(a||(t&=~(bn|wn),e=u=X),o=o===X?o:Gl(kc(o),0),f=f===X?f:kc(f),a-=u?u.length:0,t&wn){var l=e,s=u;
e=u=X}var h=c?X:Os(n),p=[n,t,r,e,u,l,s,i,o,f];if(h&&qi(p,h),n=p[0],t=p[1],r=p[2],e=p[3],u=p[4],f=p[9]=p[9]===X?c?0:n.length:Gl(p[9]-a,0),!f&&t&(yn|dn)&&(t&=~(yn|dn)),t&&t!=_n)_=t==yn||t==dn?Hu(n,t,f):t!=bn&&t!=(_n|bn)||u.length?Qu.apply(X,p):ei(n,t,r,e);else var _=Zu(n,t,r);return Yi((h?ms:Ss)(_,p),n,t)}function li(n,t,r,e){return n===X||Gf(n,gl[r])&&!bl.call(e,r)?t:n}function si(n,t,r,e,u,i){return fc(n)&&fc(t)&&(i.set(t,n),Ke(n,t,X,si,i),i.delete(t)),n}function hi(n){return gc(n)?X:n}function pi(n,t,r,e,u,i){
var o=r&hn,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return!1;var a=i.get(n),l=i.get(t);if(a&&l)return a==t&&l==n;var s=-1,p=!0,_=r&pn?new yr:X;for(i.set(n,t),i.set(t,n);++s<f;){var v=n[s],g=t[s];if(e)var y=o?e(g,v,s,t,n,i):e(v,g,s,n,t,i);if(y!==X){if(y)continue;p=!1;break}if(_){if(!h(t,function(n,t){if(!S(_,t)&&(v===n||u(v,n,r,e,i)))return _.push(t)})){p=!1;break}}else if(v!==g&&!u(v,g,r,e,i)){p=!1;break}}return i.delete(n),i.delete(t),p}function _i(n,t,r,e,u,i,o){switch(r){case ct:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;
n=n.buffer,t=t.buffer;case ft:return!(n.byteLength!=t.byteLength||!i(new Rl(n),new Rl(t)));case Nn:case Pn:case Hn:return Gf(+n,+t);case Zn:return n.name==t.name&&n.message==t.message;case nt:case rt:return n==t+"";case Gn:var f=M;case tt:var c=e&hn;if(f||(f=P),n.size!=t.size&&!c)return!1;var a=o.get(n);if(a)return a==t;e|=pn,o.set(n,t);var l=pi(f(n),f(t),e,u,i,o);return o.delete(n),l;case et:if(_s)return _s.call(n)==_s.call(t)}return!1}function vi(n,t,r,e,u,i){var o=r&hn,f=yi(n),c=f.length;if(c!=yi(t).length&&!o)return!1;
for(var a=c;a--;){var l=f[a];if(!(o?l in t:bl.call(t,l)))return!1}var s=i.get(n),h=i.get(t);if(s&&h)return s==t&&h==n;var p=!0;i.set(n,t),i.set(t,n);for(var _=o;++a<c;){l=f[a];var v=n[l],g=t[l];if(e)var y=o?e(g,v,l,t,n,i):e(v,g,l,n,t,i);if(!(y===X?v===g||u(v,g,r,e,i):y)){p=!1;break}_||(_="constructor"==l)}if(p&&!_){var d=n.constructor,b=t.constructor;d!=b&&"constructor"in n&&"constructor"in t&&!("function"==typeof d&&d instanceof d&&"function"==typeof b&&b instanceof b)&&(p=!1)}return i.delete(n),
i.delete(t),p}function gi(n){return Ls(Vi(n,X,_o),n+"")}function yi(n){return de(n,Pc,Is)}function di(n){return de(n,qc,Rs)}function bi(n){for(var t=n.name+"",r=fs[t],e=bl.call(fs,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function wi(n){return(bl.call(Z,"placeholder")?Z:n).placeholder}function mi(){var n=Z.iteratee||Ca;return n=n===Ca?De:n,arguments.length?n(arguments[0],arguments[1]):n}function xi(n,t){var r=n.__data__;return Ti(t)?r["string"==typeof t?"string":"hash"]:r.map;
}function ji(n){for(var t=Pc(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,Fi(u)]}return t}function Ai(n,t){var r=B(n,t);return Ue(r)?r:X}function ki(n){var t=bl.call(n,Bl),r=n[Bl];try{n[Bl]=X;var e=!0}catch(n){}var u=xl.call(n);return e&&(t?n[Bl]=r:delete n[Bl]),u}function Oi(n,t,r){for(var e=-1,u=r.length;++e<u;){var i=r[e],o=i.size;switch(i.type){case"drop":n+=o;break;case"dropRight":t-=o;break;case"take":t=Hl(t,n+o);break;case"takeRight":n=Gl(n,t-o)}}return{start:n,end:t}}function Ii(n){var t=n.match(Bt);
return t?t[1].split(Tt):[]}function Ri(n,t,r){t=ku(t,n);for(var e=-1,u=t.length,i=!1;++e<u;){var o=no(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:(u=null==n?0:n.length,!!u&&oc(u)&&Ci(o,u)&&(bh(n)||dh(n)))}function zi(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&bl.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Ei(n){return"function"!=typeof n.constructor||Mi(n)?{}:gs(El(n))}function Si(n,t,r){var e=n.constructor;switch(t){case ft:return Ru(n);
case Nn:case Pn:return new e(+n);case ct:return zu(n,r);case at:case lt:case st:case ht:case pt:case _t:case vt:case gt:case yt:return Wu(n,r);case Gn:return new e;case Hn:case rt:return new e(n);case nt:return Eu(n);case tt:return new e;case et:return Su(n)}}function Wi(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?"& ":"")+t[e],t=t.join(r>2?", ":" "),n.replace(Ut,"{\n/* [wrapped with "+t+"] */\n")}function Li(n){return bh(n)||dh(n)||!!(Cl&&n&&n[Cl])}function Ci(n,t){var r=typeof n;
return t=null==t?Wn:t,!!t&&("number"==r||"symbol"!=r&&Vt.test(n))&&n>-1&&n%1==0&&n<t}function Ui(n,t,r){if(!fc(r))return!1;var e=typeof t;return!!("number"==e?Hf(r)&&Ci(t,r.length):"string"==e&&t in r)&&Gf(r[t],n)}function Bi(n,t){if(bh(n))return!1;var r=typeof n;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=n&&!bc(n))||(zt.test(n)||!Rt.test(n)||null!=t&&n in ll(t))}function Ti(n){var t=typeof n;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==n:null===n}function $i(n){
var t=bi(n),r=Z[t];if("function"!=typeof r||!(t in Ct.prototype))return!1;if(n===r)return!0;var e=Os(r);return!!e&&n===e[0]}function Di(n){return!!ml&&ml in n}function Mi(n){var t=n&&n.constructor;return n===("function"==typeof t&&t.prototype||gl)}function Fi(n){return n===n&&!fc(n)}function Ni(n,t){return function(r){return null!=r&&(r[n]===t&&(t!==X||n in ll(r)))}}function Pi(n){var t=Cf(n,function(n){return r.size===fn&&r.clear(),n}),r=t.cache;return t}function qi(n,t){var r=n[1],e=t[1],u=r|e,i=u<(_n|vn|mn),o=e==mn&&r==yn||e==mn&&r==xn&&n[7].length<=t[8]||e==(mn|xn)&&t[7].length<=t[8]&&r==yn;
if(!i&&!o)return n;e&_n&&(n[2]=t[2],u|=r&_n?0:gn);var f=t[3];if(f){var c=n[3];n[3]=c?Uu(c,f,t[4]):f,n[4]=c?N(n[3],cn):t[4]}return f=t[5],f&&(c=n[5],n[5]=c?Bu(c,f,t[6]):f,n[6]=c?N(n[5],cn):t[6]),f=t[7],f&&(n[7]=f),e&mn&&(n[8]=null==n[8]?t[8]:Hl(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=u,n}function Zi(n){var t=[];if(null!=n)for(var r in ll(n))t.push(r);return t}function Ki(n){return xl.call(n)}function Vi(t,r,e){return r=Gl(r===X?t.length-1:r,0),function(){for(var u=arguments,i=-1,o=Gl(u.length-r,0),f=il(o);++i<o;)f[i]=u[r+i];
i=-1;for(var c=il(r+1);++i<r;)c[i]=u[i];return c[r]=e(f),n(t,this,c)}}function Gi(n,t){return t.length<2?n:_e(n,au(t,0,-1))}function Hi(n,t){for(var r=n.length,e=Hl(t.length,r),u=Tu(n);e--;){var i=t[e];n[e]=Ci(i,r)?u[i]:X}return n}function Ji(n,t){if(("constructor"!==t||"function"!=typeof n[t])&&"__proto__"!=t)return n[t]}function Yi(n,t,r){var e=t+"";return Ls(n,Wi(e,ro(Ii(e),r)))}function Qi(n){var t=0,r=0;return function(){var e=Jl(),u=In-(e-r);if(r=e,u>0){if(++t>=On)return arguments[0]}else t=0;
return n.apply(X,arguments)}}function Xi(n,t){var r=-1,e=n.length,u=e-1;for(t=t===X?e:t;++r<t;){var i=tu(r,u),o=n[i];n[i]=n[r],n[r]=o}return n.length=t,n}function no(n){if("string"==typeof n||bc(n))return n;var t=n+"";return"0"==t&&1/n==-Sn?"-0":t}function to(n){if(null!=n){try{return dl.call(n)}catch(n){}try{return n+""}catch(n){}}return""}function ro(n,t){return r($n,function(r){var e="_."+r[0];t&r[1]&&!o(n,e)&&n.push(e)}),n.sort()}function eo(n){if(n instanceof Ct)return n.clone();var t=new Y(n.__wrapped__,n.__chain__);
return t.__actions__=Tu(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function uo(n,t,r){t=(r?Ui(n,t,r):t===X)?1:Gl(kc(t),0);var e=null==n?0:n.length;if(!e||t<1)return[];for(var u=0,i=0,o=il(Fl(e/t));u<e;)o[i++]=au(n,u,u+=t);return o}function io(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u}function oo(){var n=arguments.length;if(!n)return[];for(var t=il(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return a(bh(r)?Tu(r):[r],ee(t,1));
}function fo(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),au(n,t<0?0:t,e)):[]}function co(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),t=e-t,au(n,0,t<0?0:t)):[]}function ao(n,t){return n&&n.length?bu(n,mi(t,3),!0,!0):[]}function lo(n,t){return n&&n.length?bu(n,mi(t,3),!0):[]}function so(n,t,r,e){var u=null==n?0:n.length;return u?(r&&"number"!=typeof r&&Ui(n,t,r)&&(r=0,e=u),ne(n,t,r,e)):[]}function ho(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:kc(r);
return u<0&&(u=Gl(e+u,0)),g(n,mi(t,3),u)}function po(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==X&&(u=kc(r),u=r<0?Gl(e+u,0):Hl(u,e-1)),g(n,mi(t,3),u,!0)}function _o(n){return(null==n?0:n.length)?ee(n,1):[]}function vo(n){return(null==n?0:n.length)?ee(n,Sn):[]}function go(n,t){return(null==n?0:n.length)?(t=t===X?1:kc(t),ee(n,t)):[]}function yo(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e}function bo(n){return n&&n.length?n[0]:X}function wo(n,t,r){
var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:kc(r);return u<0&&(u=Gl(e+u,0)),y(n,t,u)}function mo(n){return(null==n?0:n.length)?au(n,0,-1):[]}function xo(n,t){return null==n?"":Kl.call(n,t)}function jo(n){var t=null==n?0:n.length;return t?n[t-1]:X}function Ao(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;return r!==X&&(u=kc(r),u=u<0?Gl(e+u,0):Hl(u,e-1)),t===t?K(n,t,u):g(n,b,u,!0)}function ko(n,t){return n&&n.length?Ge(n,kc(t)):X}function Oo(n,t){return n&&n.length&&t&&t.length?Xe(n,t):n;
}function Io(n,t,r){return n&&n.length&&t&&t.length?Xe(n,t,mi(r,2)):n}function Ro(n,t,r){return n&&n.length&&t&&t.length?Xe(n,t,X,r):n}function zo(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=mi(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return nu(n,u),r}function Eo(n){return null==n?n:Xl.call(n)}function So(n,t,r){var e=null==n?0:n.length;return e?(r&&"number"!=typeof r&&Ui(n,t,r)?(t=0,r=e):(t=null==t?0:kc(t),r=r===X?e:kc(r)),au(n,t,r)):[]}function Wo(n,t){
return su(n,t)}function Lo(n,t,r){return hu(n,t,mi(r,2))}function Co(n,t){var r=null==n?0:n.length;if(r){var e=su(n,t);if(e<r&&Gf(n[e],t))return e}return-1}function Uo(n,t){return su(n,t,!0)}function Bo(n,t,r){return hu(n,t,mi(r,2),!0)}function To(n,t){if(null==n?0:n.length){var r=su(n,t,!0)-1;if(Gf(n[r],t))return r}return-1}function $o(n){return n&&n.length?pu(n):[]}function Do(n,t){return n&&n.length?pu(n,mi(t,2)):[]}function Mo(n){var t=null==n?0:n.length;return t?au(n,1,t):[]}function Fo(n,t,r){
return n&&n.length?(t=r||t===X?1:kc(t),au(n,0,t<0?0:t)):[]}function No(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),t=e-t,au(n,t<0?0:t,e)):[]}function Po(n,t){return n&&n.length?bu(n,mi(t,3),!1,!0):[]}function qo(n,t){return n&&n.length?bu(n,mi(t,3)):[]}function Zo(n){return n&&n.length?gu(n):[]}function Ko(n,t){return n&&n.length?gu(n,mi(t,2)):[]}function Vo(n,t){return t="function"==typeof t?t:X,n&&n.length?gu(n,X,t):[]}function Go(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){
if(Jf(n))return t=Gl(n.length,t),!0}),O(t,function(t){return c(n,m(t))})}function Ho(t,r){if(!t||!t.length)return[];var e=Go(t);return null==r?e:c(e,function(t){return n(r,X,t)})}function Jo(n,t){return xu(n||[],t||[],Sr)}function Yo(n,t){return xu(n||[],t||[],fu)}function Qo(n){var t=Z(n);return t.__chain__=!0,t}function Xo(n,t){return t(n),n}function nf(n,t){return t(n)}function tf(){return Qo(this)}function rf(){return new Y(this.value(),this.__chain__)}function ef(){this.__values__===X&&(this.__values__=jc(this.value()));
var n=this.__index__>=this.__values__.length;return{done:n,value:n?X:this.__values__[this.__index__++]}}function uf(){return this}function of(n){for(var t,r=this;r instanceof J;){var e=eo(r);e.__index__=0,e.__values__=X,t?u.__wrapped__=e:t=e;var u=e;r=r.__wrapped__}return u.__wrapped__=n,t}function ff(){var n=this.__wrapped__;if(n instanceof Ct){var t=n;return this.__actions__.length&&(t=new Ct(this)),t=t.reverse(),t.__actions__.push({func:nf,args:[Eo],thisArg:X}),new Y(t,this.__chain__)}return this.thru(Eo);
}function cf(){return wu(this.__wrapped__,this.__actions__)}function af(n,t,r){var e=bh(n)?u:Jr;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function lf(n,t){return(bh(n)?i:te)(n,mi(t,3))}function sf(n,t){return ee(yf(n,t),1)}function hf(n,t){return ee(yf(n,t),Sn)}function pf(n,t,r){return r=r===X?1:kc(r),ee(yf(n,t),r)}function _f(n,t){return(bh(n)?r:ys)(n,mi(t,3))}function vf(n,t){return(bh(n)?e:ds)(n,mi(t,3))}function gf(n,t,r,e){n=Hf(n)?n:ra(n),r=r&&!e?kc(r):0;var u=n.length;return r<0&&(r=Gl(u+r,0)),
dc(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&y(n,t,r)>-1}function yf(n,t){return(bh(n)?c:Pe)(n,mi(t,3))}function df(n,t,r,e){return null==n?[]:(bh(t)||(t=null==t?[]:[t]),r=e?X:r,bh(r)||(r=null==r?[]:[r]),He(n,t,r))}function bf(n,t,r){var e=bh(n)?l:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ys)}function wf(n,t,r){var e=bh(n)?s:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ds)}function mf(n,t){return(bh(n)?i:te)(n,Uf(mi(t,3)))}function xf(n){return(bh(n)?Ir:iu)(n)}function jf(n,t,r){return t=(r?Ui(n,t,r):t===X)?1:kc(t),
(bh(n)?Rr:ou)(n,t)}function Af(n){return(bh(n)?zr:cu)(n)}function kf(n){if(null==n)return 0;if(Hf(n))return dc(n)?V(n):n.length;var t=zs(n);return t==Gn||t==tt?n.size:Me(n).length}function Of(n,t,r){var e=bh(n)?h:lu;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function If(n,t){if("function"!=typeof t)throw new pl(en);return n=kc(n),function(){if(--n<1)return t.apply(this,arguments)}}function Rf(n,t,r){return t=r?X:t,t=n&&null==t?n.length:t,ai(n,mn,X,X,X,X,t)}function zf(n,t){var r;if("function"!=typeof t)throw new pl(en);
return n=kc(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=X),r}}function Ef(n,t,r){t=r?X:t;var e=ai(n,yn,X,X,X,X,X,t);return e.placeholder=Ef.placeholder,e}function Sf(n,t,r){t=r?X:t;var e=ai(n,dn,X,X,X,X,X,t);return e.placeholder=Sf.placeholder,e}function Wf(n,t,r){function e(t){var r=h,e=p;return h=p=X,d=t,v=n.apply(e,r)}function u(n){return d=n,g=Ws(f,t),b?e(n):v}function i(n){var r=n-y,e=n-d,u=t-r;return w?Hl(u,_-e):u}function o(n){var r=n-y,e=n-d;return y===X||r>=t||r<0||w&&e>=_;
}function f(){var n=fh();return o(n)?c(n):(g=Ws(f,i(n)),X)}function c(n){return g=X,m&&h?e(n):(h=p=X,v)}function a(){g!==X&&As(g),d=0,h=y=p=g=X}function l(){return g===X?v:c(fh())}function s(){var n=fh(),r=o(n);if(h=arguments,p=this,y=n,r){if(g===X)return u(y);if(w)return As(g),g=Ws(f,t),e(y)}return g===X&&(g=Ws(f,t)),v}var h,p,_,v,g,y,d=0,b=!1,w=!1,m=!0;if("function"!=typeof n)throw new pl(en);return t=Ic(t)||0,fc(r)&&(b=!!r.leading,w="maxWait"in r,_=w?Gl(Ic(r.maxWait)||0,t):_,m="trailing"in r?!!r.trailing:m),
s.cancel=a,s.flush=l,s}function Lf(n){return ai(n,jn)}function Cf(n,t){if("function"!=typeof n||null!=t&&"function"!=typeof t)throw new pl(en);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(Cf.Cache||sr),r}function Uf(n){if("function"!=typeof n)throw new pl(en);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:
return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Bf(n){return zf(2,n)}function Tf(n,t){if("function"!=typeof n)throw new pl(en);return t=t===X?t:kc(t),uu(n,t)}function $f(t,r){if("function"!=typeof t)throw new pl(en);return r=null==r?0:Gl(kc(r),0),uu(function(e){var u=e[r],i=Ou(e,0,r);return u&&a(i,u),n(t,this,i)})}function Df(n,t,r){var e=!0,u=!0;if("function"!=typeof n)throw new pl(en);return fc(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),
Wf(n,t,{leading:e,maxWait:t,trailing:u})}function Mf(n){return Rf(n,1)}function Ff(n,t){return ph(Au(t),n)}function Nf(){if(!arguments.length)return[];var n=arguments[0];return bh(n)?n:[n]}function Pf(n){return Fr(n,sn)}function qf(n,t){return t="function"==typeof t?t:X,Fr(n,sn,t)}function Zf(n){return Fr(n,an|sn)}function Kf(n,t){return t="function"==typeof t?t:X,Fr(n,an|sn,t)}function Vf(n,t){return null==t||Pr(n,t,Pc(t))}function Gf(n,t){return n===t||n!==n&&t!==t}function Hf(n){return null!=n&&oc(n.length)&&!uc(n);
}function Jf(n){return cc(n)&&Hf(n)}function Yf(n){return n===!0||n===!1||cc(n)&&we(n)==Nn}function Qf(n){return cc(n)&&1===n.nodeType&&!gc(n)}function Xf(n){if(null==n)return!0;if(Hf(n)&&(bh(n)||"string"==typeof n||"function"==typeof n.splice||mh(n)||Oh(n)||dh(n)))return!n.length;var t=zs(n);if(t==Gn||t==tt)return!n.size;if(Mi(n))return!Me(n).length;for(var r in n)if(bl.call(n,r))return!1;return!0}function nc(n,t){return Se(n,t)}function tc(n,t,r){r="function"==typeof r?r:X;var e=r?r(n,t):X;return e===X?Se(n,t,X,r):!!e;
}function rc(n){if(!cc(n))return!1;var t=we(n);return t==Zn||t==qn||"string"==typeof n.message&&"string"==typeof n.name&&!gc(n)}function ec(n){return"number"==typeof n&&Zl(n)}function uc(n){if(!fc(n))return!1;var t=we(n);return t==Kn||t==Vn||t==Fn||t==Xn}function ic(n){return"number"==typeof n&&n==kc(n)}function oc(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=Wn}function fc(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function cc(n){return null!=n&&"object"==typeof n}function ac(n,t){
return n===t||Ce(n,t,ji(t))}function lc(n,t,r){return r="function"==typeof r?r:X,Ce(n,t,ji(t),r)}function sc(n){return vc(n)&&n!=+n}function hc(n){if(Es(n))throw new fl(rn);return Ue(n)}function pc(n){return null===n}function _c(n){return null==n}function vc(n){return"number"==typeof n||cc(n)&&we(n)==Hn}function gc(n){if(!cc(n)||we(n)!=Yn)return!1;var t=El(n);if(null===t)return!0;var r=bl.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&dl.call(r)==jl}function yc(n){
return ic(n)&&n>=-Wn&&n<=Wn}function dc(n){return"string"==typeof n||!bh(n)&&cc(n)&&we(n)==rt}function bc(n){return"symbol"==typeof n||cc(n)&&we(n)==et}function wc(n){return n===X}function mc(n){return cc(n)&&zs(n)==it}function xc(n){return cc(n)&&we(n)==ot}function jc(n){if(!n)return[];if(Hf(n))return dc(n)?G(n):Tu(n);if(Ul&&n[Ul])return D(n[Ul]());var t=zs(n);return(t==Gn?M:t==tt?P:ra)(n)}function Ac(n){if(!n)return 0===n?n:0;if(n=Ic(n),n===Sn||n===-Sn){return(n<0?-1:1)*Ln}return n===n?n:0}function kc(n){
var t=Ac(n),r=t%1;return t===t?r?t-r:t:0}function Oc(n){return n?Mr(kc(n),0,Un):0}function Ic(n){if("number"==typeof n)return n;if(bc(n))return Cn;if(fc(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=fc(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=R(n);var r=qt.test(n);return r||Kt.test(n)?Xr(n.slice(2),r?2:8):Pt.test(n)?Cn:+n}function Rc(n){return $u(n,qc(n))}function zc(n){return n?Mr(kc(n),-Wn,Wn):0===n?n:0}function Ec(n){return null==n?"":vu(n)}function Sc(n,t){var r=gs(n);return null==t?r:Cr(r,t);
}function Wc(n,t){return v(n,mi(t,3),ue)}function Lc(n,t){return v(n,mi(t,3),oe)}function Cc(n,t){return null==n?n:bs(n,mi(t,3),qc)}function Uc(n,t){return null==n?n:ws(n,mi(t,3),qc)}function Bc(n,t){return n&&ue(n,mi(t,3))}function Tc(n,t){return n&&oe(n,mi(t,3))}function $c(n){return null==n?[]:fe(n,Pc(n))}function Dc(n){return null==n?[]:fe(n,qc(n))}function Mc(n,t,r){var e=null==n?X:_e(n,t);return e===X?r:e}function Fc(n,t){return null!=n&&Ri(n,t,xe)}function Nc(n,t){return null!=n&&Ri(n,t,je);
}function Pc(n){return Hf(n)?Or(n):Me(n)}function qc(n){return Hf(n)?Or(n,!0):Fe(n)}function Zc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Br(r,t(n,e,u),n)}),r}function Kc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Br(r,e,t(n,e,u))}),r}function Vc(n,t){return Gc(n,Uf(mi(t)))}function Gc(n,t){if(null==n)return{};var r=c(di(n),function(n){return[n]});return t=mi(t),Ye(n,r,function(n,r){return t(n,r[0])})}function Hc(n,t,r){t=ku(t,n);var e=-1,u=t.length;for(u||(u=1,n=X);++e<u;){var i=null==n?X:n[no(t[e])];
i===X&&(e=u,i=r),n=uc(i)?i.call(n):i}return n}function Jc(n,t,r){return null==n?n:fu(n,t,r)}function Yc(n,t,r,e){return e="function"==typeof e?e:X,null==n?n:fu(n,t,r,e)}function Qc(n,t,e){var u=bh(n),i=u||mh(n)||Oh(n);if(t=mi(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:fc(n)&&uc(o)?gs(El(n)):{}}return(i?r:ue)(n,function(n,r,u){return t(e,n,r,u)}),e}function Xc(n,t){return null==n||yu(n,t)}function na(n,t,r){return null==n?n:du(n,t,Au(r))}function ta(n,t,r,e){return e="function"==typeof e?e:X,
null==n?n:du(n,t,Au(r),e)}function ra(n){return null==n?[]:E(n,Pc(n))}function ea(n){return null==n?[]:E(n,qc(n))}function ua(n,t,r){return r===X&&(r=t,t=X),r!==X&&(r=Ic(r),r=r===r?r:0),t!==X&&(t=Ic(t),t=t===t?t:0),Mr(Ic(n),t,r)}function ia(n,t,r){return t=Ac(t),r===X?(r=t,t=0):r=Ac(r),n=Ic(n),Ae(n,t,r)}function oa(n,t,r){if(r&&"boolean"!=typeof r&&Ui(n,t,r)&&(t=r=X),r===X&&("boolean"==typeof t?(r=t,t=X):"boolean"==typeof n&&(r=n,n=X)),n===X&&t===X?(n=0,t=1):(n=Ac(n),t===X?(t=n,n=0):t=Ac(t)),n>t){
var e=n;n=t,t=e}if(r||n%1||t%1){var u=Ql();return Hl(n+u*(t-n+Qr("1e-"+((u+"").length-1))),t)}return tu(n,t)}function fa(n){return Qh(Ec(n).toLowerCase())}function ca(n){return n=Ec(n),n&&n.replace(Gt,ve).replace(Dr,"")}function aa(n,t,r){n=Ec(n),t=vu(t);var e=n.length;r=r===X?e:Mr(kc(r),0,e);var u=r;return r-=t.length,r>=0&&n.slice(r,u)==t}function la(n){return n=Ec(n),n&&At.test(n)?n.replace(xt,ge):n}function sa(n){return n=Ec(n),n&&Wt.test(n)?n.replace(St,"\\$&"):n}function ha(n,t,r){n=Ec(n),t=kc(t);
var e=t?V(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return ri(Nl(u),r)+n+ri(Fl(u),r)}function pa(n,t,r){n=Ec(n),t=kc(t);var e=t?V(n):0;return t&&e<t?n+ri(t-e,r):n}function _a(n,t,r){n=Ec(n),t=kc(t);var e=t?V(n):0;return t&&e<t?ri(t-e,r)+n:n}function va(n,t,r){return r||null==t?t=0:t&&(t=+t),Yl(Ec(n).replace(Lt,""),t||0)}function ga(n,t,r){return t=(r?Ui(n,t,r):t===X)?1:kc(t),eu(Ec(n),t)}function ya(){var n=arguments,t=Ec(n[0]);return n.length<3?t:t.replace(n[1],n[2])}function da(n,t,r){return r&&"number"!=typeof r&&Ui(n,t,r)&&(t=r=X),
(r=r===X?Un:r>>>0)?(n=Ec(n),n&&("string"==typeof t||null!=t&&!Ah(t))&&(t=vu(t),!t&&T(n))?Ou(G(n),0,r):n.split(t,r)):[]}function ba(n,t,r){return n=Ec(n),r=null==r?0:Mr(kc(r),0,n.length),t=vu(t),n.slice(r,r+t.length)==t}function wa(n,t,r){var e=Z.templateSettings;r&&Ui(n,t,r)&&(t=X),n=Ec(n),t=Sh({},t,e,li);var u,i,o=Sh({},t.imports,e.imports,li),f=Pc(o),c=E(o,f),a=0,l=t.interpolate||Ht,s="__p += '",h=sl((t.escape||Ht).source+"|"+l.source+"|"+(l===It?Ft:Ht).source+"|"+(t.evaluate||Ht).source+"|$","g"),p="//# sourceURL="+(bl.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Zr+"]")+"\n";
n.replace(h,function(t,r,e,o,f,c){return e||(e=o),s+=n.slice(a,c).replace(Jt,U),r&&(u=!0,s+="' +\n__e("+r+") +\n'"),f&&(i=!0,s+="';\n"+f+";\n__p += '"),e&&(s+="' +\n((__t = ("+e+")) == null ? '' : __t) +\n'"),a=c+t.length,t}),s+="';\n";var _=bl.call(t,"variable")&&t.variable;if(_){if(Dt.test(_))throw new fl(un)}else s="with (obj) {\n"+s+"\n}\n";s=(i?s.replace(dt,""):s).replace(bt,"$1").replace(wt,"$1;"),s="function("+(_||"obj")+") {\n"+(_?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(u?", __e = _.escape":"")+(i?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+s+"return __p\n}";
var v=Xh(function(){return cl(f,p+"return "+s).apply(X,c)});if(v.source=s,rc(v))throw v;return v}function ma(n){return Ec(n).toLowerCase()}function xa(n){return Ec(n).toUpperCase()}function ja(n,t,r){if(n=Ec(n),n&&(r||t===X))return R(n);if(!n||!(t=vu(t)))return n;var e=G(n),u=G(t);return Ou(e,W(e,u),L(e,u)+1).join("")}function Aa(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.slice(0,H(n)+1);if(!n||!(t=vu(t)))return n;var e=G(n);return Ou(e,0,L(e,G(t))+1).join("")}function ka(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.replace(Lt,"");
if(!n||!(t=vu(t)))return n;var e=G(n);return Ou(e,W(e,G(t))).join("")}function Oa(n,t){var r=An,e=kn;if(fc(t)){var u="separator"in t?t.separator:u;r="length"in t?kc(t.length):r,e="omission"in t?vu(t.omission):e}n=Ec(n);var i=n.length;if(T(n)){var o=G(n);i=o.length}if(r>=i)return n;var f=r-V(e);if(f<1)return e;var c=o?Ou(o,0,f).join(""):n.slice(0,f);if(u===X)return c+e;if(o&&(f+=c.length-f),Ah(u)){if(n.slice(f).search(u)){var a,l=c;for(u.global||(u=sl(u.source,Ec(Nt.exec(u))+"g")),u.lastIndex=0;a=u.exec(l);)var s=a.index;
c=c.slice(0,s===X?f:s)}}else if(n.indexOf(vu(u),f)!=f){var h=c.lastIndexOf(u);h>-1&&(c=c.slice(0,h))}return c+e}function Ia(n){return n=Ec(n),n&&jt.test(n)?n.replace(mt,ye):n}function Ra(n,t,r){return n=Ec(n),t=r?X:t,t===X?$(n)?Q(n):_(n):n.match(t)||[]}function za(t){var r=null==t?0:t.length,e=mi();return t=r?c(t,function(n){if("function"!=typeof n[1])throw new pl(en);return[e(n[0]),n[1]]}):[],uu(function(e){for(var u=-1;++u<r;){var i=t[u];if(n(i[0],this,e))return n(i[1],this,e)}})}function Ea(n){
return Nr(Fr(n,an))}function Sa(n){return function(){return n}}function Wa(n,t){return null==n||n!==n?t:n}function La(n){return n}function Ca(n){return De("function"==typeof n?n:Fr(n,an))}function Ua(n){return qe(Fr(n,an))}function Ba(n,t){return Ze(n,Fr(t,an))}function Ta(n,t,e){var u=Pc(t),i=fe(t,u);null!=e||fc(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=fe(t,Pc(t)));var o=!(fc(e)&&"chain"in e&&!e.chain),f=uc(n);return r(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;
if(o||t){var r=n(this.__wrapped__);return(r.__actions__=Tu(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})}),n}function $a(){return re._===this&&(re._=Al),this}function Da(){}function Ma(n){return n=kc(n),uu(function(t){return Ge(t,n)})}function Fa(n){return Bi(n)?m(no(n)):Qe(n)}function Na(n){return function(t){return null==n?X:_e(n,t)}}function Pa(){return[]}function qa(){return!1}function Za(){return{}}function Ka(){return"";
}function Va(){return!0}function Ga(n,t){if(n=kc(n),n<1||n>Wn)return[];var r=Un,e=Hl(n,Un);t=mi(t),n-=Un;for(var u=O(e,t);++r<n;)t(r);return u}function Ha(n){return bh(n)?c(n,no):bc(n)?[n]:Tu(Cs(Ec(n)))}function Ja(n){var t=++wl;return Ec(n)+t}function Ya(n){return n&&n.length?Yr(n,La,me):X}function Qa(n,t){return n&&n.length?Yr(n,mi(t,2),me):X}function Xa(n){return w(n,La)}function nl(n,t){return w(n,mi(t,2))}function tl(n){return n&&n.length?Yr(n,La,Ne):X}function rl(n,t){return n&&n.length?Yr(n,mi(t,2),Ne):X;
}function el(n){return n&&n.length?k(n,La):0}function ul(n,t){return n&&n.length?k(n,mi(t,2)):0}x=null==x?re:be.defaults(re.Object(),x,be.pick(re,qr));var il=x.Array,ol=x.Date,fl=x.Error,cl=x.Function,al=x.Math,ll=x.Object,sl=x.RegExp,hl=x.String,pl=x.TypeError,_l=il.prototype,vl=cl.prototype,gl=ll.prototype,yl=x["__core-js_shared__"],dl=vl.toString,bl=gl.hasOwnProperty,wl=0,ml=function(){var n=/[^.]+$/.exec(yl&&yl.keys&&yl.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}(),xl=gl.toString,jl=dl.call(ll),Al=re._,kl=sl("^"+dl.call(bl).replace(St,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ol=ie?x.Buffer:X,Il=x.Symbol,Rl=x.Uint8Array,zl=Ol?Ol.allocUnsafe:X,El=F(ll.getPrototypeOf,ll),Sl=ll.create,Wl=gl.propertyIsEnumerable,Ll=_l.splice,Cl=Il?Il.isConcatSpreadable:X,Ul=Il?Il.iterator:X,Bl=Il?Il.toStringTag:X,Tl=function(){
try{var n=Ai(ll,"defineProperty");return n({},"",{}),n}catch(n){}}(),$l=x.clearTimeout!==re.clearTimeout&&x.clearTimeout,Dl=ol&&ol.now!==re.Date.now&&ol.now,Ml=x.setTimeout!==re.setTimeout&&x.setTimeout,Fl=al.ceil,Nl=al.floor,Pl=ll.getOwnPropertySymbols,ql=Ol?Ol.isBuffer:X,Zl=x.isFinite,Kl=_l.join,Vl=F(ll.keys,ll),Gl=al.max,Hl=al.min,Jl=ol.now,Yl=x.parseInt,Ql=al.random,Xl=_l.reverse,ns=Ai(x,"DataView"),ts=Ai(x,"Map"),rs=Ai(x,"Promise"),es=Ai(x,"Set"),us=Ai(x,"WeakMap"),is=Ai(ll,"create"),os=us&&new us,fs={},cs=to(ns),as=to(ts),ls=to(rs),ss=to(es),hs=to(us),ps=Il?Il.prototype:X,_s=ps?ps.valueOf:X,vs=ps?ps.toString:X,gs=function(){
function n(){}return function(t){if(!fc(t))return{};if(Sl)return Sl(t);n.prototype=t;var r=new n;return n.prototype=X,r}}();Z.templateSettings={escape:kt,evaluate:Ot,interpolate:It,variable:"",imports:{_:Z}},Z.prototype=J.prototype,Z.prototype.constructor=Z,Y.prototype=gs(J.prototype),Y.prototype.constructor=Y,Ct.prototype=gs(J.prototype),Ct.prototype.constructor=Ct,Xt.prototype.clear=nr,Xt.prototype.delete=tr,Xt.prototype.get=rr,Xt.prototype.has=er,Xt.prototype.set=ur,ir.prototype.clear=or,ir.prototype.delete=fr,
ir.prototype.get=cr,ir.prototype.has=ar,ir.prototype.set=lr,sr.prototype.clear=hr,sr.prototype.delete=pr,sr.prototype.get=_r,sr.prototype.has=vr,sr.prototype.set=gr,yr.prototype.add=yr.prototype.push=dr,yr.prototype.has=br,wr.prototype.clear=mr,wr.prototype.delete=xr,wr.prototype.get=jr,wr.prototype.has=Ar,wr.prototype.set=kr;var ys=Pu(ue),ds=Pu(oe,!0),bs=qu(),ws=qu(!0),ms=os?function(n,t){return os.set(n,t),n}:La,xs=Tl?function(n,t){return Tl(n,"toString",{configurable:!0,enumerable:!1,value:Sa(t),
writable:!0})}:La,js=uu,As=$l||function(n){return re.clearTimeout(n)},ks=es&&1/P(new es([,-0]))[1]==Sn?function(n){return new es(n)}:Da,Os=os?function(n){return os.get(n)}:Da,Is=Pl?function(n){return null==n?[]:(n=ll(n),i(Pl(n),function(t){return Wl.call(n,t)}))}:Pa,Rs=Pl?function(n){for(var t=[];n;)a(t,Is(n)),n=El(n);return t}:Pa,zs=we;(ns&&zs(new ns(new ArrayBuffer(1)))!=ct||ts&&zs(new ts)!=Gn||rs&&zs(rs.resolve())!=Qn||es&&zs(new es)!=tt||us&&zs(new us)!=it)&&(zs=function(n){var t=we(n),r=t==Yn?n.constructor:X,e=r?to(r):"";
if(e)switch(e){case cs:return ct;case as:return Gn;case ls:return Qn;case ss:return tt;case hs:return it}return t});var Es=yl?uc:qa,Ss=Qi(ms),Ws=Ml||function(n,t){return re.setTimeout(n,t)},Ls=Qi(xs),Cs=Pi(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(""),n.replace(Et,function(n,r,e,u){t.push(e?u.replace(Mt,"$1"):r||n)}),t}),Us=uu(function(n,t){return Jf(n)?Hr(n,ee(t,1,Jf,!0)):[]}),Bs=uu(function(n,t){var r=jo(t);return Jf(r)&&(r=X),Jf(n)?Hr(n,ee(t,1,Jf,!0),mi(r,2)):[]}),Ts=uu(function(n,t){
var r=jo(t);return Jf(r)&&(r=X),Jf(n)?Hr(n,ee(t,1,Jf,!0),X,r):[]}),$s=uu(function(n){var t=c(n,ju);return t.length&&t[0]===n[0]?ke(t):[]}),Ds=uu(function(n){var t=jo(n),r=c(n,ju);return t===jo(r)?t=X:r.pop(),r.length&&r[0]===n[0]?ke(r,mi(t,2)):[]}),Ms=uu(function(n){var t=jo(n),r=c(n,ju);return t="function"==typeof t?t:X,t&&r.pop(),r.length&&r[0]===n[0]?ke(r,X,t):[]}),Fs=uu(Oo),Ns=gi(function(n,t){var r=null==n?0:n.length,e=Tr(n,t);return nu(n,c(t,function(n){return Ci(n,r)?+n:n}).sort(Lu)),e}),Ps=uu(function(n){
return gu(ee(n,1,Jf,!0))}),qs=uu(function(n){var t=jo(n);return Jf(t)&&(t=X),gu(ee(n,1,Jf,!0),mi(t,2))}),Zs=uu(function(n){var t=jo(n);return t="function"==typeof t?t:X,gu(ee(n,1,Jf,!0),X,t)}),Ks=uu(function(n,t){return Jf(n)?Hr(n,t):[]}),Vs=uu(function(n){return mu(i(n,Jf))}),Gs=uu(function(n){var t=jo(n);return Jf(t)&&(t=X),mu(i(n,Jf),mi(t,2))}),Hs=uu(function(n){var t=jo(n);return t="function"==typeof t?t:X,mu(i(n,Jf),X,t)}),Js=uu(Go),Ys=uu(function(n){var t=n.length,r=t>1?n[t-1]:X;return r="function"==typeof r?(n.pop(),
r):X,Ho(n,r)}),Qs=gi(function(n){var t=n.length,r=t?n[0]:0,e=this.__wrapped__,u=function(t){return Tr(t,n)};return!(t>1||this.__actions__.length)&&e instanceof Ct&&Ci(r)?(e=e.slice(r,+r+(t?1:0)),e.__actions__.push({func:nf,args:[u],thisArg:X}),new Y(e,this.__chain__).thru(function(n){return t&&!n.length&&n.push(X),n})):this.thru(u)}),Xs=Fu(function(n,t,r){bl.call(n,r)?++n[r]:Br(n,r,1)}),nh=Ju(ho),th=Ju(po),rh=Fu(function(n,t,r){bl.call(n,r)?n[r].push(t):Br(n,r,[t])}),eh=uu(function(t,r,e){var u=-1,i="function"==typeof r,o=Hf(t)?il(t.length):[];
return ys(t,function(t){o[++u]=i?n(r,t,e):Ie(t,r,e)}),o}),uh=Fu(function(n,t,r){Br(n,r,t)}),ih=Fu(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),oh=uu(function(n,t){if(null==n)return[];var r=t.length;return r>1&&Ui(n,t[0],t[1])?t=[]:r>2&&Ui(t[0],t[1],t[2])&&(t=[t[0]]),He(n,ee(t,1),[])}),fh=Dl||function(){return re.Date.now()},ch=uu(function(n,t,r){var e=_n;if(r.length){var u=N(r,wi(ch));e|=bn}return ai(n,e,t,r,u)}),ah=uu(function(n,t,r){var e=_n|vn;if(r.length){var u=N(r,wi(ah));e|=bn;
}return ai(t,e,n,r,u)}),lh=uu(function(n,t){return Gr(n,1,t)}),sh=uu(function(n,t,r){return Gr(n,Ic(t)||0,r)});Cf.Cache=sr;var hh=js(function(t,r){r=1==r.length&&bh(r[0])?c(r[0],z(mi())):c(ee(r,1),z(mi()));var e=r.length;return uu(function(u){for(var i=-1,o=Hl(u.length,e);++i<o;)u[i]=r[i].call(this,u[i]);return n(t,this,u)})}),ph=uu(function(n,t){return ai(n,bn,X,t,N(t,wi(ph)))}),_h=uu(function(n,t){return ai(n,wn,X,t,N(t,wi(_h)))}),vh=gi(function(n,t){return ai(n,xn,X,X,X,t)}),gh=ii(me),yh=ii(function(n,t){
return n>=t}),dh=Re(function(){return arguments}())?Re:function(n){return cc(n)&&bl.call(n,"callee")&&!Wl.call(n,"callee")},bh=il.isArray,wh=ce?z(ce):ze,mh=ql||qa,xh=ae?z(ae):Ee,jh=le?z(le):Le,Ah=se?z(se):Be,kh=he?z(he):Te,Oh=pe?z(pe):$e,Ih=ii(Ne),Rh=ii(function(n,t){return n<=t}),zh=Nu(function(n,t){if(Mi(t)||Hf(t))return $u(t,Pc(t),n),X;for(var r in t)bl.call(t,r)&&Sr(n,r,t[r])}),Eh=Nu(function(n,t){$u(t,qc(t),n)}),Sh=Nu(function(n,t,r,e){$u(t,qc(t),n,e)}),Wh=Nu(function(n,t,r,e){$u(t,Pc(t),n,e);
}),Lh=gi(Tr),Ch=uu(function(n,t){n=ll(n);var r=-1,e=t.length,u=e>2?t[2]:X;for(u&&Ui(t[0],t[1],u)&&(e=1);++r<e;)for(var i=t[r],o=qc(i),f=-1,c=o.length;++f<c;){var a=o[f],l=n[a];(l===X||Gf(l,gl[a])&&!bl.call(n,a))&&(n[a]=i[a])}return n}),Uh=uu(function(t){return t.push(X,si),n(Mh,X,t)}),Bh=Xu(function(n,t,r){null!=t&&"function"!=typeof t.toString&&(t=xl.call(t)),n[t]=r},Sa(La)),Th=Xu(function(n,t,r){null!=t&&"function"!=typeof t.toString&&(t=xl.call(t)),bl.call(n,t)?n[t].push(r):n[t]=[r]},mi),$h=uu(Ie),Dh=Nu(function(n,t,r){
Ke(n,t,r)}),Mh=Nu(function(n,t,r,e){Ke(n,t,r,e)}),Fh=gi(function(n,t){var r={};if(null==n)return r;var e=!1;t=c(t,function(t){return t=ku(t,n),e||(e=t.length>1),t}),$u(n,di(n),r),e&&(r=Fr(r,an|ln|sn,hi));for(var u=t.length;u--;)yu(r,t[u]);return r}),Nh=gi(function(n,t){return null==n?{}:Je(n,t)}),Ph=ci(Pc),qh=ci(qc),Zh=Vu(function(n,t,r){return t=t.toLowerCase(),n+(r?fa(t):t)}),Kh=Vu(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Vh=Vu(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),Gh=Ku("toLowerCase"),Hh=Vu(function(n,t,r){
return n+(r?"_":"")+t.toLowerCase()}),Jh=Vu(function(n,t,r){return n+(r?" ":"")+Qh(t)}),Yh=Vu(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),Qh=Ku("toUpperCase"),Xh=uu(function(t,r){try{return n(t,X,r)}catch(n){return rc(n)?n:new fl(n)}}),np=gi(function(n,t){return r(t,function(t){t=no(t),Br(n,t,ch(n[t],n))}),n}),tp=Yu(),rp=Yu(!0),ep=uu(function(n,t){return function(r){return Ie(r,n,t)}}),up=uu(function(n,t){return function(r){return Ie(n,r,t)}}),ip=ti(c),op=ti(u),fp=ti(h),cp=ui(),ap=ui(!0),lp=ni(function(n,t){
return n+t},0),sp=fi("ceil"),hp=ni(function(n,t){return n/t},1),pp=fi("floor"),_p=ni(function(n,t){return n*t},1),vp=fi("round"),gp=ni(function(n,t){return n-t},0);return Z.after=If,Z.ary=Rf,Z.assign=zh,Z.assignIn=Eh,Z.assignInWith=Sh,Z.assignWith=Wh,Z.at=Lh,Z.before=zf,Z.bind=ch,Z.bindAll=np,Z.bindKey=ah,Z.castArray=Nf,Z.chain=Qo,Z.chunk=uo,Z.compact=io,Z.concat=oo,Z.cond=za,Z.conforms=Ea,Z.constant=Sa,Z.countBy=Xs,Z.create=Sc,Z.curry=Ef,Z.curryRight=Sf,Z.debounce=Wf,Z.defaults=Ch,Z.defaultsDeep=Uh,
Z.defer=lh,Z.delay=sh,Z.difference=Us,Z.differenceBy=Bs,Z.differenceWith=Ts,Z.drop=fo,Z.dropRight=co,Z.dropRightWhile=ao,Z.dropWhile=lo,Z.fill=so,Z.filter=lf,Z.flatMap=sf,Z.flatMapDeep=hf,Z.flatMapDepth=pf,Z.flatten=_o,Z.flattenDeep=vo,Z.flattenDepth=go,Z.flip=Lf,Z.flow=tp,Z.flowRight=rp,Z.fromPairs=yo,Z.functions=$c,Z.functionsIn=Dc,Z.groupBy=rh,Z.initial=mo,Z.intersection=$s,Z.intersectionBy=Ds,Z.intersectionWith=Ms,Z.invert=Bh,Z.invertBy=Th,Z.invokeMap=eh,Z.iteratee=Ca,Z.keyBy=uh,Z.keys=Pc,Z.keysIn=qc,
Z.map=yf,Z.mapKeys=Zc,Z.mapValues=Kc,Z.matches=Ua,Z.matchesProperty=Ba,Z.memoize=Cf,Z.merge=Dh,Z.mergeWith=Mh,Z.method=ep,Z.methodOf=up,Z.mixin=Ta,Z.negate=Uf,Z.nthArg=Ma,Z.omit=Fh,Z.omitBy=Vc,Z.once=Bf,Z.orderBy=df,Z.over=ip,Z.overArgs=hh,Z.overEvery=op,Z.overSome=fp,Z.partial=ph,Z.partialRight=_h,Z.partition=ih,Z.pick=Nh,Z.pickBy=Gc,Z.property=Fa,Z.propertyOf=Na,Z.pull=Fs,Z.pullAll=Oo,Z.pullAllBy=Io,Z.pullAllWith=Ro,Z.pullAt=Ns,Z.range=cp,Z.rangeRight=ap,Z.rearg=vh,Z.reject=mf,Z.remove=zo,Z.rest=Tf,
Z.reverse=Eo,Z.sampleSize=jf,Z.set=Jc,Z.setWith=Yc,Z.shuffle=Af,Z.slice=So,Z.sortBy=oh,Z.sortedUniq=$o,Z.sortedUniqBy=Do,Z.split=da,Z.spread=$f,Z.tail=Mo,Z.take=Fo,Z.takeRight=No,Z.takeRightWhile=Po,Z.takeWhile=qo,Z.tap=Xo,Z.throttle=Df,Z.thru=nf,Z.toArray=jc,Z.toPairs=Ph,Z.toPairsIn=qh,Z.toPath=Ha,Z.toPlainObject=Rc,Z.transform=Qc,Z.unary=Mf,Z.union=Ps,Z.unionBy=qs,Z.unionWith=Zs,Z.uniq=Zo,Z.uniqBy=Ko,Z.uniqWith=Vo,Z.unset=Xc,Z.unzip=Go,Z.unzipWith=Ho,Z.update=na,Z.updateWith=ta,Z.values=ra,Z.valuesIn=ea,
Z.without=Ks,Z.words=Ra,Z.wrap=Ff,Z.xor=Vs,Z.xorBy=Gs,Z.xorWith=Hs,Z.zip=Js,Z.zipObject=Jo,Z.zipObjectDeep=Yo,Z.zipWith=Ys,Z.entries=Ph,Z.entriesIn=qh,Z.extend=Eh,Z.extendWith=Sh,Ta(Z,Z),Z.add=lp,Z.attempt=Xh,Z.camelCase=Zh,Z.capitalize=fa,Z.ceil=sp,Z.clamp=ua,Z.clone=Pf,Z.cloneDeep=Zf,Z.cloneDeepWith=Kf,Z.cloneWith=qf,Z.conformsTo=Vf,Z.deburr=ca,Z.defaultTo=Wa,Z.divide=hp,Z.endsWith=aa,Z.eq=Gf,Z.escape=la,Z.escapeRegExp=sa,Z.every=af,Z.find=nh,Z.findIndex=ho,Z.findKey=Wc,Z.findLast=th,Z.findLastIndex=po,
Z.findLastKey=Lc,Z.floor=pp,Z.forEach=_f,Z.forEachRight=vf,Z.forIn=Cc,Z.forInRight=Uc,Z.forOwn=Bc,Z.forOwnRight=Tc,Z.get=Mc,Z.gt=gh,Z.gte=yh,Z.has=Fc,Z.hasIn=Nc,Z.head=bo,Z.identity=La,Z.includes=gf,Z.indexOf=wo,Z.inRange=ia,Z.invoke=$h,Z.isArguments=dh,Z.isArray=bh,Z.isArrayBuffer=wh,Z.isArrayLike=Hf,Z.isArrayLikeObject=Jf,Z.isBoolean=Yf,Z.isBuffer=mh,Z.isDate=xh,Z.isElement=Qf,Z.isEmpty=Xf,Z.isEqual=nc,Z.isEqualWith=tc,Z.isError=rc,Z.isFinite=ec,Z.isFunction=uc,Z.isInteger=ic,Z.isLength=oc,Z.isMap=jh,
Z.isMatch=ac,Z.isMatchWith=lc,Z.isNaN=sc,Z.isNative=hc,Z.isNil=_c,Z.isNull=pc,Z.isNumber=vc,Z.isObject=fc,Z.isObjectLike=cc,Z.isPlainObject=gc,Z.isRegExp=Ah,Z.isSafeInteger=yc,Z.isSet=kh,Z.isString=dc,Z.isSymbol=bc,Z.isTypedArray=Oh,Z.isUndefined=wc,Z.isWeakMap=mc,Z.isWeakSet=xc,Z.join=xo,Z.kebabCase=Kh,Z.last=jo,Z.lastIndexOf=Ao,Z.lowerCase=Vh,Z.lowerFirst=Gh,Z.lt=Ih,Z.lte=Rh,Z.max=Ya,Z.maxBy=Qa,Z.mean=Xa,Z.meanBy=nl,Z.min=tl,Z.minBy=rl,Z.stubArray=Pa,Z.stubFalse=qa,Z.stubObject=Za,Z.stubString=Ka,
Z.stubTrue=Va,Z.multiply=_p,Z.nth=ko,Z.noConflict=$a,Z.noop=Da,Z.now=fh,Z.pad=ha,Z.padEnd=pa,Z.padStart=_a,Z.parseInt=va,Z.random=oa,Z.reduce=bf,Z.reduceRight=wf,Z.repeat=ga,Z.replace=ya,Z.result=Hc,Z.round=vp,Z.runInContext=p,Z.sample=xf,Z.size=kf,Z.snakeCase=Hh,Z.some=Of,Z.sortedIndex=Wo,Z.sortedIndexBy=Lo,Z.sortedIndexOf=Co,Z.sortedLastIndex=Uo,Z.sortedLastIndexBy=Bo,Z.sortedLastIndexOf=To,Z.startCase=Jh,Z.startsWith=ba,Z.subtract=gp,Z.sum=el,Z.sumBy=ul,Z.template=wa,Z.times=Ga,Z.toFinite=Ac,Z.toInteger=kc,
Z.toLength=Oc,Z.toLower=ma,Z.toNumber=Ic,Z.toSafeInteger=zc,Z.toString=Ec,Z.toUpper=xa,Z.trim=ja,Z.trimEnd=Aa,Z.trimStart=ka,Z.truncate=Oa,Z.unescape=Ia,Z.uniqueId=Ja,Z.upperCase=Yh,Z.upperFirst=Qh,Z.each=_f,Z.eachRight=vf,Z.first=bo,Ta(Z,function(){var n={};return ue(Z,function(t,r){bl.call(Z.prototype,r)||(n[r]=t)}),n}(),{chain:!1}),Z.VERSION=nn,r(["bind","bindKey","curry","curryRight","partial","partialRight"],function(n){Z[n].placeholder=Z}),r(["drop","take"],function(n,t){Ct.prototype[n]=function(r){
r=r===X?1:Gl(kc(r),0);var e=this.__filtered__&&!t?new Ct(this):this.clone();return e.__filtered__?e.__takeCount__=Hl(r,e.__takeCount__):e.__views__.push({size:Hl(r,Un),type:n+(e.__dir__<0?"Right":"")}),e},Ct.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),r(["filter","map","takeWhile"],function(n,t){var r=t+1,e=r==Rn||r==En;Ct.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:mi(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r(["head","last"],function(n,t){
var r="take"+(t?"Right":"");Ct.prototype[n]=function(){return this[r](1).value()[0]}}),r(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");Ct.prototype[n]=function(){return this.__filtered__?new Ct(this):this[r](1)}}),Ct.prototype.compact=function(){return this.filter(La)},Ct.prototype.find=function(n){return this.filter(n).head()},Ct.prototype.findLast=function(n){return this.reverse().find(n)},Ct.prototype.invokeMap=uu(function(n,t){return"function"==typeof n?new Ct(this):this.map(function(r){
return Ie(r,n,t)})}),Ct.prototype.reject=function(n){return this.filter(Uf(mi(n)))},Ct.prototype.slice=function(n,t){n=kc(n);var r=this;return r.__filtered__&&(n>0||t<0)?new Ct(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==X&&(t=kc(t),r=t<0?r.dropRight(-t):r.take(t-n)),r)},Ct.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Ct.prototype.toArray=function(){return this.take(Un)},ue(Ct.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=Z[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t);
u&&(Z.prototype[t]=function(){var t=this.__wrapped__,o=e?[1]:arguments,f=t instanceof Ct,c=o[0],l=f||bh(t),s=function(n){var t=u.apply(Z,a([n],o));return e&&h?t[0]:t};l&&r&&"function"==typeof c&&1!=c.length&&(f=l=!1);var h=this.__chain__,p=!!this.__actions__.length,_=i&&!h,v=f&&!p;if(!i&&l){t=v?t:new Ct(this);var g=n.apply(t,o);return g.__actions__.push({func:nf,args:[s],thisArg:X}),new Y(g,h)}return _&&v?n.apply(this,o):(g=this.thru(s),_?e?g.value()[0]:g.value():g)})}),r(["pop","push","shift","sort","splice","unshift"],function(n){
var t=_l[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);Z.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(bh(u)?u:[],n)}return this[r](function(r){return t.apply(bh(r)?r:[],n)})}}),ue(Ct.prototype,function(n,t){var r=Z[t];if(r){var e=r.name+"";bl.call(fs,e)||(fs[e]=[]),fs[e].push({name:t,func:r})}}),fs[Qu(X,vn).name]=[{name:"wrapper",func:X}],Ct.prototype.clone=$t,Ct.prototype.reverse=Yt,Ct.prototype.value=Qt,Z.prototype.at=Qs,
Z.prototype.chain=tf,Z.prototype.commit=rf,Z.prototype.next=ef,Z.prototype.plant=of,Z.prototype.reverse=ff,Z.prototype.toJSON=Z.prototype.valueOf=Z.prototype.value=cf,Z.prototype.first=Z.prototype.head,Ul&&(Z.prototype[Ul]=uf),Z},be=de();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(re._=be,define(function(){return be})):ue?((ue.exports=be)._=be,ee._=be):re._=be}).call(this);var createCompounder = require('./_createCompounder');

/**
 * Converts `string`, as space separated words, to lower case.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the lower cased string.
 * @example
 *
 * _.lowerCase('--Foo-Bar--');
 * // => 'foo bar'
 *
 * _.lowerCase('fooBar');
 * // => 'foo bar'
 *
 * _.lowerCase('__FOO_BAR__');
 * // => 'foo bar'
 */
var lowerCase = createCompounder(function(result, word, index) {
  return result + (index ? ' ' : '') + word.toLowerCase();
});

module.exports = lowerCase;
var createCaseFirst = require('./_createCaseFirst');

/**
 * Converts the first character of `string` to lower case.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the converted string.
 * @example
 *
 * _.lowerFirst('Fred');
 * // => 'fred'
 *
 * _.lowerFirst('FRED');
 * // => 'fRED'
 */
var lowerFirst = createCaseFirst('toLowerCase');

module.exports = lowerFirst;
var baseLt = require('./_baseLt'),
    createRelationalOperation = require('./_createRelationalOperation');

/**
 * Checks if `value` is less than `other`.
 *
 * @static
 * @memberOf _
 * @since 3.9.0
 * @category Lang
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if `value` is less than `other`,
 *  else `false`.
 * @see _.gt
 * @example
 *
 * _.lt(1, 3);
 * // => true
 *
 * _.lt(3, 3);
 * // => false
 *
 * _.lt(3, 1);
 * // => false
 */
var lt = createRelationalOperation(baseLt);

module.exports = lt;
var createRelationalOperation = require('./_createRelationalOperation');

/**
 * Checks if `value` is less than or equal to `other`.
 *
 * @static
 * @memberOf _
 * @since 3.9.0
 * @category Lang
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if `value` is less than or equal to
 *  `other`, else `false`.
 * @see _.gte
 * @example
 *
 * _.lte(1, 3);
 * // => true
 *
 * _.lte(3, 3);
 * // => true
 *
 * _.lte(3, 1);
 * // => false
 */
var lte = createRelationalOperation(function(value, other) {
  return value <= other;
});

module.exports = lte;
var arrayMap = require('./_arrayMap'),
    baseIteratee = require('./_baseIteratee'),
    baseMap = require('./_baseMap'),
    isArray = require('./isArray');

/**
 * Creates an array of values by running each element in `collection` thru
 * `iteratee`. The iteratee is invoked with three arguments:
 * (value, index|key, collection).
 *
 * Many lodash methods are guarded to work as iteratees for methods like
 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
 *
 * The guarded methods are:
 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
 * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the new mapped array.
 * @example
 *
 * function square(n) {
 *   return n * n;
 * }
 *
 * _.map([4, 8], square);
 * // => [16, 64]
 *
 * _.map({ 'a': 4, 'b': 8 }, square);
 * // => [16, 64] (iteration order is not guaranteed)
 *
 * var users = [
 *   { 'user': 'barney' },
 *   { 'user': 'fred' }
 * ];
 *
 * // The `_.property` iteratee shorthand.
 * _.map(users, 'user');
 * // => ['barney', 'fred']
 */
function map(collection, iteratee) {
  var func = isArray(collection) ? arrayMap : baseMap;
  return func(collection, baseIteratee(iteratee, 3));
}

module.exports = map;
var baseAssignValue = require('./_baseAssignValue'),
    baseForOwn = require('./_baseForOwn'),
    baseIteratee = require('./_baseIteratee');

/**
 * The opposite of `_.mapValues`; this method creates an object with the
 * same values as `object` and keys generated by running each own enumerable
 * string keyed property of `object` thru `iteratee`. The iteratee is invoked
 * with three arguments: (value, key, object).
 *
 * @static
 * @memberOf _
 * @since 3.8.0
 * @category Object
 * @param {Object} object The object to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Object} Returns the new mapped object.
 * @see _.mapValues
 * @example
 *
 * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
 *   return key + value;
 * });
 * // => { 'a1': 1, 'b2': 2 }
 */
function mapKeys(object, iteratee) {
  var result = {};
  iteratee = baseIteratee(iteratee, 3);

  baseForOwn(object, function(value, key, object) {
    baseAssignValue(result, iteratee(value, key, object), value);
  });
  return result;
}

module.exports = mapKeys;
var baseAssignValue = require('./_baseAssignValue'),
    baseForOwn = require('./_baseForOwn'),
    baseIteratee = require('./_baseIteratee');

/**
 * Creates an object with the same keys as `object` and values generated
 * by running each own enumerable string keyed property of `object` thru
 * `iteratee`. The iteratee is invoked with three arguments:
 * (value, key, object).
 *
 * @static
 * @memberOf _
 * @since 2.4.0
 * @category Object
 * @param {Object} object The object to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Object} Returns the new mapped object.
 * @see _.mapKeys
 * @example
 *
 * var users = {
 *   'fred':    { 'user': 'fred',    'age': 40 },
 *   'pebbles': { 'user': 'pebbles', 'age': 1 }
 * };
 *
 * _.mapValues(users, function(o) { return o.age; });
 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
 *
 * // The `_.property` iteratee shorthand.
 * _.mapValues(users, 'age');
 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
 */
function mapValues(object, iteratee) {
  var result = {};
  iteratee = baseIteratee(iteratee, 3);

  baseForOwn(object, function(value, key, object) {
    baseAssignValue(result, key, iteratee(value, key, object));
  });
  return result;
}

module.exports = mapValues;
var baseClone = require('./_baseClone'),
    baseMatches = require('./_baseMatches');

/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1;

/**
 * Creates a function that performs a partial deep comparison between a given
 * object and `source`, returning `true` if the given object has equivalent
 * property values, else `false`.
 *
 * **Note:** The created function is equivalent to `_.isMatch` with `source`
 * partially applied.
 *
 * Partial comparisons will match empty array and empty object `source`
 * values against any array or object value, respectively. See `_.isEqual`
 * for a list of supported value comparisons.
 *
 * **Note:** Multiple values can be checked by combining several matchers
 * using `_.overSome`
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Util
 * @param {Object} source The object of property values to match.
 * @returns {Function} Returns the new spec function.
 * @example
 *
 * var objects = [
 *   { 'a': 1, 'b': 2, 'c': 3 },
 *   { 'a': 4, 'b': 5, 'c': 6 }
 * ];
 *
 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
 * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
 *
 * // Checking for several possible values
 * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
 */
function matches(source) {
  return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
}

module.exports = matches;
var baseClone = require('./_baseClone'),
    baseMatchesProperty = require('./_baseMatchesProperty');

/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1;

/**
 * Creates a function that performs a partial deep comparison between the
 * value at `path` of a given object to `srcValue`, returning `true` if the
 * object value is equivalent, else `false`.
 *
 * **Note:** Partial comparisons will match empty array and empty object
 * `srcValue` values against any array or object value, respectively. See
 * `_.isEqual` for a list of supported value comparisons.
 *
 * **Note:** Multiple values can be checked by combining several matchers
 * using `_.overSome`
 *
 * @static
 * @memberOf _
 * @since 3.2.0
 * @category Util
 * @param {Array|string} path The path of the property to get.
 * @param {*} srcValue The value to match.
 * @returns {Function} Returns the new spec function.
 * @example
 *
 * var objects = [
 *   { 'a': 1, 'b': 2, 'c': 3 },
 *   { 'a': 4, 'b': 5, 'c': 6 }
 * ];
 *
 * _.find(objects, _.matchesProperty('a', 4));
 * // => { 'a': 4, 'b': 5, 'c': 6 }
 *
 * // Checking for several possible values
 * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
 */
function matchesProperty(path, srcValue) {
  return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
}

module.exports = matchesProperty;
module.exports = {
  'add': require('./add'),
  'ceil': require('./ceil'),
  'divide': require('./divide'),
  'floor': require('./floor'),
  'max': require('./max'),
  'maxBy': require('./maxBy'),
  'mean': require('./mean'),
  'meanBy': require('./meanBy'),
  'min': require('./min'),
  'minBy': require('./minBy'),
  'multiply': require('./multiply'),
  'round': require('./round'),
  'subtract': require('./subtract'),
  'sum': require('./sum'),
  'sumBy': require('./sumBy')
};
var baseExtremum = require('./_baseExtremum'),
    baseGt = require('./_baseGt'),
    identity = require('./identity');

/**
 * Computes the maximum value of `array`. If `array` is empty or falsey,
 * `undefined` is returned.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Math
 * @param {Array} array The array to iterate over.
 * @returns {*} Returns the maximum value.
 * @example
 *
 * _.max([4, 2, 8, 6]);
 * // => 8
 *
 * _.max([]);
 * // => undefined
 */
function max(array) {
  return (array && array.length)
    ? baseExtremum(array, identity, baseGt)
    : undefined;
}

module.exports = max;
var baseExtremum = require('./_baseExtremum'),
    baseGt = require('./_baseGt'),
    baseIteratee = require('./_baseIteratee');

/**
 * This method is like `_.max` except that it accepts `iteratee` which is
 * invoked for each element in `array` to generate the criterion by which
 * the value is ranked. The iteratee is invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Math
 * @param {Array} array The array to iterate over.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {*} Returns the maximum value.
 * @example
 *
 * var objects = [{ 'n': 1 }, { 'n': 2 }];
 *
 * _.maxBy(objects, function(o) { return o.n; });
 * // => { 'n': 2 }
 *
 * // The `_.property` iteratee shorthand.
 * _.maxBy(objects, 'n');
 * // => { 'n': 2 }
 */
function maxBy(array, iteratee) {
  return (array && array.length)
    ? baseExtremum(array, baseIteratee(iteratee, 2), baseGt)
    : undefined;
}

module.exports = maxBy;
var baseMean = require('./_baseMean'),
    identity = require('./identity');

/**
 * Computes the mean of the values in `array`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Math
 * @param {Array} array The array to iterate over.
 * @returns {number} Returns the mean.
 * @example
 *
 * _.mean([4, 2, 8, 6]);
 * // => 5
 */
function mean(array) {
  return baseMean(array, identity);
}

module.exports = mean;
var baseIteratee = require('./_baseIteratee'),
    baseMean = require('./_baseMean');

/**
 * This method is like `_.mean` except that it accepts `iteratee` which is
 * invoked for each element in `array` to generate the value to be averaged.
 * The iteratee is invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 4.7.0
 * @category Math
 * @param {Array} array The array to iterate over.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {number} Returns the mean.
 * @example
 *
 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
 *
 * _.meanBy(objects, function(o) { return o.n; });
 * // => 5
 *
 * // The `_.property` iteratee shorthand.
 * _.meanBy(objects, 'n');
 * // => 5
 */
function meanBy(array, iteratee) {
  return baseMean(array, baseIteratee(iteratee, 2));
}

module.exports = meanBy;
var MapCache = require('./_MapCache');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/**
 * Creates a function that memoizes the result of `func`. If `resolver` is
 * provided, it determines the cache key for storing the result based on the
 * arguments provided to the memoized function. By default, the first argument
 * provided to the memoized function is used as the map cache key. The `func`
 * is invoked with the `this` binding of the memoized function.
 *
 * **Note:** The cache is exposed as the `cache` property on the memoized
 * function. Its creation may be customized by replacing the `_.memoize.Cache`
 * constructor with one whose instances implement the
 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
 * method interface of `clear`, `delete`, `get`, `has`, and `set`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to have its output memoized.
 * @param {Function} [resolver] The function to resolve the cache key.
 * @returns {Function} Returns the new memoized function.
 * @example
 *
 * var object = { 'a': 1, 'b': 2 };
 * var other = { 'c': 3, 'd': 4 };
 *
 * var values = _.memoize(_.values);
 * values(object);
 * // => [1, 2]
 *
 * values(other);
 * // => [3, 4]
 *
 * object.a = 2;
 * values(object);
 * // => [1, 2]
 *
 * // Modify the result cache.
 * values.cache.set(object, ['a', 'b']);
 * values(object);
 * // => ['a', 'b']
 *
 * // Replace `_.memoize.Cache`.
 * _.memoize.Cache = WeakMap;
 */
function memoize(func, resolver) {
  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  var memoized = function() {
    var args = arguments,
        key = resolver ? resolver.apply(this, args) : args[0],
        cache = memoized.cache;

    if (cache.has(key)) {
      return cache.get(key);
    }
    var result = func.apply(this, args);
    memoized.cache = cache.set(key, result) || cache;
    return result;
  };
  memoized.cache = new (memoize.Cache || MapCache);
  return memoized;
}

// Expose `MapCache`.
memoize.Cache = MapCache;

module.exports = memoize;
var baseMerge = require('./_baseMerge'),
    createAssigner = require('./_createAssigner');

/**
 * This method is like `_.assign` except that it recursively merges own and
 * inherited enumerable string keyed properties of source objects into the
 * destination object. Source properties that resolve to `undefined` are
 * skipped if a destination value exists. Array and plain object properties
 * are merged recursively. Other objects and value types are overridden by
 * assignment. Source objects are applied from left to right. Subsequent
 * sources overwrite property assignments of previous sources.
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 0.5.0
 * @category Object
 * @param {Object} object The destination object.
 * @param {...Object} [sources] The source objects.
 * @returns {Object} Returns `object`.
 * @example
 *
 * var object = {
 *   'a': [{ 'b': 2 }, { 'd': 4 }]
 * };
 *
 * var other = {
 *   'a': [{ 'c': 3 }, { 'e': 5 }]
 * };
 *
 * _.merge(object, other);
 * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
 */
var merge = createAssigner(function(object, source, srcIndex) {
  baseMerge(object, source, srcIndex);
});

module.exports = merge;
var baseMerge = require('./_baseMerge'),
    createAssigner = require('./_createAssigner');

/**
 * This method is like `_.merge` except that it accepts `customizer` which
 * is invoked to produce the merged values of the destination and source
 * properties. If `customizer` returns `undefined`, merging is handled by the
 * method instead. The `customizer` is invoked with six arguments:
 * (objValue, srcValue, key, object, source, stack).
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Object
 * @param {Object} object The destination object.
 * @param {...Object} sources The source objects.
 * @param {Function} customizer The function to customize assigned values.
 * @returns {Object} Returns `object`.
 * @example
 *
 * function customizer(objValue, srcValue) {
 *   if (_.isArray(objValue)) {
 *     return objValue.concat(srcValue);
 *   }
 * }
 *
 * var object = { 'a': [1], 'b': [2] };
 * var other = { 'a': [3], 'b': [4] };
 *
 * _.mergeWith(object, other, customizer);
 * // => { 'a': [1, 3], 'b': [2, 4] }
 */
var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
  baseMerge(object, source, srcIndex, customizer);
});

module.exports = mergeWith;
var baseInvoke = require('./_baseInvoke'),
    baseRest = require('./_baseRest');

/**
 * Creates a function that invokes the method at `path` of a given object.
 * Any additional arguments are provided to the invoked method.
 *
 * @static
 * @memberOf _
 * @since 3.7.0
 * @category Util
 * @param {Array|string} path The path of the method to invoke.
 * @param {...*} [args] The arguments to invoke the method with.
 * @returns {Function} Returns the new invoker function.
 * @example
 *
 * var objects = [
 *   { 'a': { 'b': _.constant(2) } },
 *   { 'a': { 'b': _.constant(1) } }
 * ];
 *
 * _.map(objects, _.method('a.b'));
 * // => [2, 1]
 *
 * _.map(objects, _.method(['a', 'b']));
 * // => [2, 1]
 */
var method = baseRest(function(path, args) {
  return function(object) {
    return baseInvoke(object, path, args);
  };
});

module.exports = method;
var baseInvoke = require('./_baseInvoke'),
    baseRest = require('./_baseRest');

/**
 * The opposite of `_.method`; this method creates a function that invokes
 * the method at a given path of `object`. Any additional arguments are
 * provided to the invoked method.
 *
 * @static
 * @memberOf _
 * @since 3.7.0
 * @category Util
 * @param {Object} object The object to query.
 * @param {...*} [args] The arguments to invoke the method with.
 * @returns {Function} Returns the new invoker function.
 * @example
 *
 * var array = _.times(3, _.constant),
 *     object = { 'a': array, 'b': array, 'c': array };
 *
 * _.map(['a[2]', 'c[0]'], _.methodOf(object));
 * // => [2, 0]
 *
 * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
 * // => [2, 0]
 */
var methodOf = baseRest(function(object, args) {
  return function(path) {
    return baseInvoke(object, path, args);
  };
});

module.exports = methodOf;
var baseExtremum = require('./_baseExtremum'),
    baseLt = require('./_baseLt'),
    identity = require('./identity');

/**
 * Computes the minimum value of `array`. If `array` is empty or falsey,
 * `undefined` is returned.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Math
 * @param {Array} array The array to iterate over.
 * @returns {*} Returns the minimum value.
 * @example
 *
 * _.min([4, 2, 8, 6]);
 * // => 2
 *
 * _.min([]);
 * // => undefined
 */
function min(array) {
  return (array && array.length)
    ? baseExtremum(array, identity, baseLt)
    : undefined;
}

module.exports = min;
var baseExtremum = require('./_baseExtremum'),
    baseIteratee = require('./_baseIteratee'),
    baseLt = require('./_baseLt');

/**
 * This method is like `_.min` except that it accepts `iteratee` which is
 * invoked for each element in `array` to generate the criterion by which
 * the value is ranked. The iteratee is invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Math
 * @param {Array} array The array to iterate over.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {*} Returns the minimum value.
 * @example
 *
 * var objects = [{ 'n': 1 }, { 'n': 2 }];
 *
 * _.minBy(objects, function(o) { return o.n; });
 * // => { 'n': 1 }
 *
 * // The `_.property` iteratee shorthand.
 * _.minBy(objects, 'n');
 * // => { 'n': 1 }
 */
function minBy(array, iteratee) {
  return (array && array.length)
    ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)
    : undefined;
}

module.exports = minBy;
var arrayEach = require('./_arrayEach'),
    arrayPush = require('./_arrayPush'),
    baseFunctions = require('./_baseFunctions'),
    copyArray = require('./_copyArray'),
    isFunction = require('./isFunction'),
    isObject = require('./isObject'),
    keys = require('./keys');

/**
 * Adds all own enumerable string keyed function properties of a source
 * object to the destination object. If `object` is a function, then methods
 * are added to its prototype as well.
 *
 * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
 * avoid conflicts caused by modifying the original.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Util
 * @param {Function|Object} [object=lodash] The destination object.
 * @param {Object} source The object of functions to add.
 * @param {Object} [options={}] The options object.
 * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
 * @returns {Function|Object} Returns `object`.
 * @example
 *
 * function vowels(string) {
 *   return _.filter(string, function(v) {
 *     return /[aeiou]/i.test(v);
 *   });
 * }
 *
 * _.mixin({ 'vowels': vowels });
 * _.vowels('fred');
 * // => ['e']
 *
 * _('fred').vowels().value();
 * // => ['e']
 *
 * _.mixin({ 'vowels': vowels }, { 'chain': false });
 * _('fred').vowels();
 * // => ['e']
 */
function mixin(object, source, options) {
  var props = keys(source),
      methodNames = baseFunctions(source, props);

  var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
      isFunc = isFunction(object);

  arrayEach(methodNames, function(methodName) {
    var func = source[methodName];
    object[methodName] = func;
    if (isFunc) {
      object.prototype[methodName] = function() {
        var chainAll = this.__chain__;
        if (chain || chainAll) {
          var result = object(this.__wrapped__),
              actions = result.__actions__ = copyArray(this.__actions__);

          actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
          result.__chain__ = chainAll;
          return result;
        }
        return func.apply(object, arrayPush([this.value()], arguments));
      };
    }
  });

  return object;
}

module.exports = mixin;
var createMathOperation = require('./_createMathOperation');

/**
 * Multiply two numbers.
 *
 * @static
 * @memberOf _
 * @since 4.7.0
 * @category Math
 * @param {number} multiplier The first number in a multiplication.
 * @param {number} multiplicand The second number in a multiplication.
 * @returns {number} Returns the product.
 * @example
 *
 * _.multiply(6, 4);
 * // => 24
 */
var multiply = createMathOperation(function(multiplier, multiplicand) {
  return multiplier * multiplicand;
}, 1);

module.exports = multiply;
/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/**
 * Creates a function that negates the result of the predicate `func`. The
 * `func` predicate is invoked with the `this` binding and arguments of the
 * created function.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Function
 * @param {Function} predicate The predicate to negate.
 * @returns {Function} Returns the new negated function.
 * @example
 *
 * function isEven(n) {
 *   return n % 2 == 0;
 * }
 *
 * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
 * // => [1, 3, 5]
 */
function negate(predicate) {
  if (typeof predicate != 'function') {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  return function() {
    var args = arguments;
    switch (args.length) {
      case 0: return !predicate.call(this);
      case 1: return !predicate.call(this, args[0]);
      case 2: return !predicate.call(this, args[0], args[1]);
      case 3: return !predicate.call(this, args[0], args[1], args[2]);
    }
    return !predicate.apply(this, args);
  };
}

module.exports = negate;
var toArray = require('./toArray');

/**
 * Gets the next value on a wrapped object following the
 * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
 *
 * @name next
 * @memberOf _
 * @since 4.0.0
 * @category Seq
 * @returns {Object} Returns the next iterator value.
 * @example
 *
 * var wrapped = _([1, 2]);
 *
 * wrapped.next();
 * // => { 'done': false, 'value': 1 }
 *
 * wrapped.next();
 * // => { 'done': false, 'value': 2 }
 *
 * wrapped.next();
 * // => { 'done': true, 'value': undefined }
 */
function wrapperNext() {
  if (this.__values__ === undefined) {
    this.__values__ = toArray(this.value());
  }
  var done = this.__index__ >= this.__values__.length,
      value = done ? undefined : this.__values__[this.__index__++];

  return { 'done': done, 'value': value };
}

module.exports = wrapperNext;
/**
 * This method returns `undefined`.
 *
 * @static
 * @memberOf _
 * @since 2.3.0
 * @category Util
 * @example
 *
 * _.times(2, _.noop);
 * // => [undefined, undefined]
 */
function noop() {
  // No operation performed.
}

module.exports = noop;
var root = require('./_root');

/**
 * Gets the timestamp of the number of milliseconds that have elapsed since
 * the Unix epoch (1 January 1970 00:00:00 UTC).
 *
 * @static
 * @memberOf _
 * @since 2.4.0
 * @category Date
 * @returns {number} Returns the timestamp.
 * @example
 *
 * _.defer(function(stamp) {
 *   console.log(_.now() - stamp);
 * }, _.now());
 * // => Logs the number of milliseconds it took for the deferred invocation.
 */
var now = function() {
  return root.Date.now();
};

module.exports = now;
var baseNth = require('./_baseNth'),
    toInteger = require('./toInteger');

/**
 * Gets the element at index `n` of `array`. If `n` is negative, the nth
 * element from the end is returned.
 *
 * @static
 * @memberOf _
 * @since 4.11.0
 * @category Array
 * @param {Array} array The array to query.
 * @param {number} [n=0] The index of the element to return.
 * @returns {*} Returns the nth element of `array`.
 * @example
 *
 * var array = ['a', 'b', 'c', 'd'];
 *
 * _.nth(array, 1);
 * // => 'b'
 *
 * _.nth(array, -2);
 * // => 'c';
 */
function nth(array, n) {
  return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
}

module.exports = nth;
var baseNth = require('./_baseNth'),
    baseRest = require('./_baseRest'),
    toInteger = require('./toInteger');

/**
 * Creates a function that gets the argument at index `n`. If `n` is negative,
 * the nth argument from the end is returned.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Util
 * @param {number} [n=0] The index of the argument to return.
 * @returns {Function} Returns the new pass-thru function.
 * @example
 *
 * var func = _.nthArg(1);
 * func('a', 'b', 'c', 'd');
 * // => 'b'
 *
 * var func = _.nthArg(-2);
 * func('a', 'b', 'c', 'd');
 * // => 'c'
 */
function nthArg(n) {
  n = toInteger(n);
  return baseRest(function(args) {
    return baseNth(args, n);
  });
}

module.exports = nthArg;
module.exports = {
  'clamp': require('./clamp'),
  'inRange': require('./inRange'),
  'random': require('./random')
};
module.exports = {
  'assign': require('./assign'),
  'assignIn': require('./assignIn'),
  'assignInWith': require('./assignInWith'),
  'assignWith': require('./assignWith'),
  'at': require('./at'),
  'create': require('./create'),
  'defaults': require('./defaults'),
  'defaultsDeep': require('./defaultsDeep'),
  'entries': require('./entries'),
  'entriesIn': require('./entriesIn'),
  'extend': require('./extend'),
  'extendWith': require('./extendWith'),
  'findKey': require('./findKey'),
  'findLastKey': require('./findLastKey'),
  'forIn': require('./forIn'),
  'forInRight': require('./forInRight'),
  'forOwn': require('./forOwn'),
  'forOwnRight': require('./forOwnRight'),
  'functions': require('./functions'),
  'functionsIn': require('./functionsIn'),
  'get': require('./get'),
  'has': require('./has'),
  'hasIn': require('./hasIn'),
  'invert': require('./invert'),
  'invertBy': require('./invertBy'),
  'invoke': require('./invoke'),
  'keys': require('./keys'),
  'keysIn': require('./keysIn'),
  'mapKeys': require('./mapKeys'),
  'mapValues': require('./mapValues'),
  'merge': require('./merge'),
  'mergeWith': require('./mergeWith'),
  'omit': require('./omit'),
  'omitBy': require('./omitBy'),
  'pick': require('./pick'),
  'pickBy': require('./pickBy'),
  'result': require('./result'),
  'set': require('./set'),
  'setWith': require('./setWith'),
  'toPairs': require('./toPairs'),
  'toPairsIn': require('./toPairsIn'),
  'transform': require('./transform'),
  'unset': require('./unset'),
  'update': require('./update'),
  'updateWith': require('./updateWith'),
  'values': require('./values'),
  'valuesIn': require('./valuesIn')
};
var arrayMap = require('./_arrayMap'),
    baseClone = require('./_baseClone'),
    baseUnset = require('./_baseUnset'),
    castPath = require('./_castPath'),
    copyObject = require('./_copyObject'),
    customOmitClone = require('./_customOmitClone'),
    flatRest = require('./_flatRest'),
    getAllKeysIn = require('./_getAllKeysIn');

/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1,
    CLONE_FLAT_FLAG = 2,
    CLONE_SYMBOLS_FLAG = 4;

/**
 * The opposite of `_.pick`; this method creates an object composed of the
 * own and inherited enumerable property paths of `object` that are not omitted.
 *
 * **Note:** This method is considerably slower than `_.pick`.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The source object.
 * @param {...(string|string[])} [paths] The property paths to omit.
 * @returns {Object} Returns the new object.
 * @example
 *
 * var object = { 'a': 1, 'b': '2', 'c': 3 };
 *
 * _.omit(object, ['a', 'c']);
 * // => { 'b': '2' }
 */
var omit = flatRest(function(object, paths) {
  var result = {};
  if (object == null) {
    return result;
  }
  var isDeep = false;
  paths = arrayMap(paths, function(path) {
    path = castPath(path, object);
    isDeep || (isDeep = path.length > 1);
    return path;
  });
  copyObject(object, getAllKeysIn(object), result);
  if (isDeep) {
    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
  }
  var length = paths.length;
  while (length--) {
    baseUnset(result, paths[length]);
  }
  return result;
});

module.exports = omit;
var baseIteratee = require('./_baseIteratee'),
    negate = require('./negate'),
    pickBy = require('./pickBy');

/**
 * The opposite of `_.pickBy`; this method creates an object composed of
 * the own and inherited enumerable string keyed properties of `object` that
 * `predicate` doesn't return truthy for. The predicate is invoked with two
 * arguments: (value, key).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Object
 * @param {Object} object The source object.
 * @param {Function} [predicate=_.identity] The function invoked per property.
 * @returns {Object} Returns the new object.
 * @example
 *
 * var object = { 'a': 1, 'b': '2', 'c': 3 };
 *
 * _.omitBy(object, _.isNumber);
 * // => { 'b': '2' }
 */
function omitBy(object, predicate) {
  return pickBy(object, negate(baseIteratee(predicate)));
}

module.exports = omitBy;
var before = require('./before');

/**
 * Creates a function that is restricted to invoking `func` once. Repeat calls
 * to the function return the value of the first invocation. The `func` is
 * invoked with the `this` binding and arguments of the created function.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to restrict.
 * @returns {Function} Returns the new restricted function.
 * @example
 *
 * var initialize = _.once(createApplication);
 * initialize();
 * initialize();
 * // => `createApplication` is invoked once
 */
function once(func) {
  return before(2, func);
}

module.exports = once;
var baseOrderBy = require('./_baseOrderBy'),
    isArray = require('./isArray');

/**
 * This method is like `_.sortBy` except that it allows specifying the sort
 * orders of the iteratees to sort by. If `orders` is unspecified, all values
 * are sorted in ascending order. Otherwise, specify an order of "desc" for
 * descending or "asc" for ascending sort order of corresponding values.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
 *  The iteratees to sort by.
 * @param {string[]} [orders] The sort orders of `iteratees`.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
 * @returns {Array} Returns the new sorted array.
 * @example
 *
 * var users = [
 *   { 'user': 'fred',   'age': 48 },
 *   { 'user': 'barney', 'age': 34 },
 *   { 'user': 'fred',   'age': 40 },
 *   { 'user': 'barney', 'age': 36 }
 * ];
 *
 * // Sort by `user` in ascending order and by `age` in descending order.
 * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
 */
function orderBy(collection, iteratees, orders, guard) {
  if (collection == null) {
    return [];
  }
  if (!isArray(iteratees)) {
    iteratees = iteratees == null ? [] : [iteratees];
  }
  orders = guard ? undefined : orders;
  if (!isArray(orders)) {
    orders = orders == null ? [] : [orders];
  }
  return baseOrderBy(collection, iteratees, orders);
}

module.exports = orderBy;
var arrayMap = require('./_arrayMap'),
    createOver = require('./_createOver');

/**
 * Creates a function that invokes `iteratees` with the arguments it receives
 * and returns their results.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Util
 * @param {...(Function|Function[])} [iteratees=[_.identity]]
 *  The iteratees to invoke.
 * @returns {Function} Returns the new function.
 * @example
 *
 * var func = _.over([Math.max, Math.min]);
 *
 * func(1, 2, 3, 4);
 * // => [4, 1]
 */
var over = createOver(arrayMap);

module.exports = over;
var apply = require('./_apply'),
    arrayMap = require('./_arrayMap'),
    baseFlatten = require('./_baseFlatten'),
    baseIteratee = require('./_baseIteratee'),
    baseRest = require('./_baseRest'),
    baseUnary = require('./_baseUnary'),
    castRest = require('./_castRest'),
    isArray = require('./isArray');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMin = Math.min;

/**
 * Creates a function that invokes `func` with its arguments transformed.
 *
 * @static
 * @since 4.0.0
 * @memberOf _
 * @category Function
 * @param {Function} func The function to wrap.
 * @param {...(Function|Function[])} [transforms=[_.identity]]
 *  The argument transforms.
 * @returns {Function} Returns the new function.
 * @example
 *
 * function doubled(n) {
 *   return n * 2;
 * }
 *
 * function square(n) {
 *   return n * n;
 * }
 *
 * var func = _.overArgs(function(x, y) {
 *   return [x, y];
 * }, [square, doubled]);
 *
 * func(9, 3);
 * // => [81, 6]
 *
 * func(10, 5);
 * // => [100, 10]
 */
var overArgs = castRest(function(func, transforms) {
  transforms = (transforms.length == 1 && isArray(transforms[0]))
    ? arrayMap(transforms[0], baseUnary(baseIteratee))
    : arrayMap(baseFlatten(transforms, 1), baseUnary(baseIteratee));

  var funcsLength = transforms.length;
  return baseRest(function(args) {
    var index = -1,
        length = nativeMin(args.length, funcsLength);

    while (++index < length) {
      args[index] = transforms[index].call(this, args[index]);
    }
    return apply(func, this, args);
  });
});

module.exports = overArgs;
var arrayEvery = require('./_arrayEvery'),
    createOver = require('./_createOver');

/**
 * Creates a function that checks if **all** of the `predicates` return
 * truthy when invoked with the arguments it receives.
 *
 * Following shorthands are possible for providing predicates.
 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Util
 * @param {...(Function|Function[])} [predicates=[_.identity]]
 *  The predicates to check.
 * @returns {Function} Returns the new function.
 * @example
 *
 * var func = _.overEvery([Boolean, isFinite]);
 *
 * func('1');
 * // => true
 *
 * func(null);
 * // => false
 *
 * func(NaN);
 * // => false
 */
var overEvery = createOver(arrayEvery);

module.exports = overEvery;
var arraySome = require('./_arraySome'),
    createOver = require('./_createOver');

/**
 * Creates a function that checks if **any** of the `predicates` return
 * truthy when invoked with the arguments it receives.
 *
 * Following shorthands are possible for providing predicates.
 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Util
 * @param {...(Function|Function[])} [predicates=[_.identity]]
 *  The predicates to check.
 * @returns {Function} Returns the new function.
 * @example
 *
 * var func = _.overSome([Boolean, isFinite]);
 *
 * func('1');
 * // => true
 *
 * func(null);
 * // => true
 *
 * func(NaN);
 * // => false
 *
 * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
 * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
 */
var overSome = createOver(arraySome);

module.exports = overSome;
{
  "name": "lodash",
  "version": "4.17.21",
  "description": "Lodash modular utilities.",
  "homepage": "https://lodash.com/",
  "repository": "lodash/lodash",
  "icon": "https://lodash.com/icon.svg",
  "license": "MIT",
  "main": "lodash.js",
  "author": "John-David Dalton <john.david.dalton@gmail.com>"
}var createPadding = require('./_createPadding'),
    stringSize = require('./_stringSize'),
    toInteger = require('./toInteger'),
    toString = require('./toString');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeCeil = Math.ceil,
    nativeFloor = Math.floor;

/**
 * Pads `string` on the left and right sides if it's shorter than `length`.
 * Padding characters are truncated if they can't be evenly divided by `length`.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to pad.
 * @param {number} [length=0] The padding length.
 * @param {string} [chars=' '] The string used as padding.
 * @returns {string} Returns the padded string.
 * @example
 *
 * _.pad('abc', 8);
 * // => '  abc   '
 *
 * _.pad('abc', 8, '_-');
 * // => '_-abc_-_'
 *
 * _.pad('abc', 3);
 * // => 'abc'
 */
function pad(string, length, chars) {
  string = toString(string);
  length = toInteger(length);

  var strLength = length ? stringSize(string) : 0;
  if (!length || strLength >= length) {
    return string;
  }
  var mid = (length - strLength) / 2;
  return (
    createPadding(nativeFloor(mid), chars) +
    string +
    createPadding(nativeCeil(mid), chars)
  );
}

module.exports = pad;
var createPadding = require('./_createPadding'),
    stringSize = require('./_stringSize'),
    toInteger = require('./toInteger'),
    toString = require('./toString');

/**
 * Pads `string` on the right side if it's shorter than `length`. Padding
 * characters are truncated if they exceed `length`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to pad.
 * @param {number} [length=0] The padding length.
 * @param {string} [chars=' '] The string used as padding.
 * @returns {string} Returns the padded string.
 * @example
 *
 * _.padEnd('abc', 6);
 * // => 'abc   '
 *
 * _.padEnd('abc', 6, '_-');
 * // => 'abc_-_'
 *
 * _.padEnd('abc', 3);
 * // => 'abc'
 */
function padEnd(string, length, chars) {
  string = toString(string);
  length = toInteger(length);

  var strLength = length ? stringSize(string) : 0;
  return (length && strLength < length)
    ? (string + createPadding(length - strLength, chars))
    : string;
}

module.exports = padEnd;
var createPadding = require('./_createPadding'),
    stringSize = require('./_stringSize'),
    toInteger = require('./toInteger'),
    toString = require('./toString');

/**
 * Pads `string` on the left side if it's shorter than `length`. Padding
 * characters are truncated if they exceed `length`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to pad.
 * @param {number} [length=0] The padding length.
 * @param {string} [chars=' '] The string used as padding.
 * @returns {string} Returns the padded string.
 * @example
 *
 * _.padStart('abc', 6);
 * // => '   abc'
 *
 * _.padStart('abc', 6, '_-');
 * // => '_-_abc'
 *
 * _.padStart('abc', 3);
 * // => 'abc'
 */
function padStart(string, length, chars) {
  string = toString(string);
  length = toInteger(length);

  var strLength = length ? stringSize(string) : 0;
  return (length && strLength < length)
    ? (createPadding(length - strLength, chars) + string)
    : string;
}

module.exports = padStart;
var root = require('./_root'),
    toString = require('./toString');

/** Used to match leading whitespace. */
var reTrimStart = /^\s+/;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeParseInt = root.parseInt;

/**
 * Converts `string` to an integer of the specified radix. If `radix` is
 * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
 * hexadecimal, in which case a `radix` of `16` is used.
 *
 * **Note:** This method aligns with the
 * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
 *
 * @static
 * @memberOf _
 * @since 1.1.0
 * @category String
 * @param {string} string The string to convert.
 * @param {number} [radix=10] The radix to interpret `value` by.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {number} Returns the converted integer.
 * @example
 *
 * _.parseInt('08');
 * // => 8
 *
 * _.map(['6', '08', '10'], _.parseInt);
 * // => [6, 8, 10]
 */
function parseInt(string, radix, guard) {
  if (guard || radix == null) {
    radix = 0;
  } else if (radix) {
    radix = +radix;
  }
  return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
}

module.exports = parseInt;
var baseRest = require('./_baseRest'),
    createWrap = require('./_createWrap'),
    getHolder = require('./_getHolder'),
    replaceHolders = require('./_replaceHolders');

/** Used to compose bitmasks for function metadata. */
var WRAP_PARTIAL_FLAG = 32;

/**
 * Creates a function that invokes `func` with `partials` prepended to the
 * arguments it receives. This method is like `_.bind` except it does **not**
 * alter the `this` binding.
 *
 * The `_.partial.placeholder` value, which defaults to `_` in monolithic
 * builds, may be used as a placeholder for partially applied arguments.
 *
 * **Note:** This method doesn't set the "length" property of partially
 * applied functions.
 *
 * @static
 * @memberOf _
 * @since 0.2.0
 * @category Function
 * @param {Function} func The function to partially apply arguments to.
 * @param {...*} [partials] The arguments to be partially applied.
 * @returns {Function} Returns the new partially applied function.
 * @example
 *
 * function greet(greeting, name) {
 *   return greeting + ' ' + name;
 * }
 *
 * var sayHelloTo = _.partial(greet, 'hello');
 * sayHelloTo('fred');
 * // => 'hello fred'
 *
 * // Partially applied with placeholders.
 * var greetFred = _.partial(greet, _, 'fred');
 * greetFred('hi');
 * // => 'hi fred'
 */
var partial = baseRest(function(func, partials) {
  var holders = replaceHolders(partials, getHolder(partial));
  return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
});

// Assign default placeholders.
partial.placeholder = {};

module.exports = partial;
var baseRest = require('./_baseRest'),
    createWrap = require('./_createWrap'),
    getHolder = require('./_getHolder'),
    replaceHolders = require('./_replaceHolders');

/** Used to compose bitmasks for function metadata. */
var WRAP_PARTIAL_RIGHT_FLAG = 64;

/**
 * This method is like `_.partial` except that partially applied arguments
 * are appended to the arguments it receives.
 *
 * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
 * builds, may be used as a placeholder for partially applied arguments.
 *
 * **Note:** This method doesn't set the "length" property of partially
 * applied functions.
 *
 * @static
 * @memberOf _
 * @since 1.0.0
 * @category Function
 * @param {Function} func The function to partially apply arguments to.
 * @param {...*} [partials] The arguments to be partially applied.
 * @returns {Function} Returns the new partially applied function.
 * @example
 *
 * function greet(greeting, name) {
 *   return greeting + ' ' + name;
 * }
 *
 * var greetFred = _.partialRight(greet, 'fred');
 * greetFred('hi');
 * // => 'hi fred'
 *
 * // Partially applied with placeholders.
 * var sayHelloTo = _.partialRight(greet, 'hello', _);
 * sayHelloTo('fred');
 * // => 'hello fred'
 */
var partialRight = baseRest(function(func, partials) {
  var holders = replaceHolders(partials, getHolder(partialRight));
  return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
});

// Assign default placeholders.
partialRight.placeholder = {};

module.exports = partialRight;
var createAggregator = require('./_createAggregator');

/**
 * Creates an array of elements split into two groups, the first of which
 * contains elements `predicate` returns truthy for, the second of which
 * contains elements `predicate` returns falsey for. The predicate is
 * invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the array of grouped elements.
 * @example
 *
 * var users = [
 *   { 'user': 'barney',  'age': 36, 'active': false },
 *   { 'user': 'fred',    'age': 40, 'active': true },
 *   { 'user': 'pebbles', 'age': 1,  'active': false }
 * ];
 *
 * _.partition(users, function(o) { return o.active; });
 * // => objects for [['fred'], ['barney', 'pebbles']]
 *
 * // The `_.matches` iteratee shorthand.
 * _.partition(users, { 'age': 1, 'active': false });
 * // => objects for [['pebbles'], ['barney', 'fred']]
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.partition(users, ['active', false]);
 * // => objects for [['barney', 'pebbles'], ['fred']]
 *
 * // The `_.property` iteratee shorthand.
 * _.partition(users, 'active');
 * // => objects for [['fred'], ['barney', 'pebbles']]
 */
var partition = createAggregator(function(result, value, key) {
  result[key ? 0 : 1].push(value);
}, function() { return [[], []]; });

module.exports = partition;
var basePick = require('./_basePick'),
    flatRest = require('./_flatRest');

/**
 * Creates an object composed of the picked `object` properties.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The source object.
 * @param {...(string|string[])} [paths] The property paths to pick.
 * @returns {Object} Returns the new object.
 * @example
 *
 * var object = { 'a': 1, 'b': '2', 'c': 3 };
 *
 * _.pick(object, ['a', 'c']);
 * // => { 'a': 1, 'c': 3 }
 */
var pick = flatRest(function(object, paths) {
  return object == null ? {} : basePick(object, paths);
});

module.exports = pick;
var arrayMap = require('./_arrayMap'),
    baseIteratee = require('./_baseIteratee'),
    basePickBy = require('./_basePickBy'),
    getAllKeysIn = require('./_getAllKeysIn');

/**
 * Creates an object composed of the `object` properties `predicate` returns
 * truthy for. The predicate is invoked with two arguments: (value, key).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Object
 * @param {Object} object The source object.
 * @param {Function} [predicate=_.identity] The function invoked per property.
 * @returns {Object} Returns the new object.
 * @example
 *
 * var object = { 'a': 1, 'b': '2', 'c': 3 };
 *
 * _.pickBy(object, _.isNumber);
 * // => { 'a': 1, 'c': 3 }
 */
function pickBy(object, predicate) {
  if (object == null) {
    return {};
  }
  var props = arrayMap(getAllKeysIn(object), function(prop) {
    return [prop];
  });
  predicate = baseIteratee(predicate);
  return basePickBy(object, props, function(value, path) {
    return predicate(value, path[0]);
  });
}

module.exports = pickBy;
var baseLodash = require('./_baseLodash'),
    wrapperClone = require('./_wrapperClone');

/**
 * Creates a clone of the chain sequence planting `value` as the wrapped value.
 *
 * @name plant
 * @memberOf _
 * @since 3.2.0
 * @category Seq
 * @param {*} value The value to plant.
 * @returns {Object} Returns the new `lodash` wrapper instance.
 * @example
 *
 * function square(n) {
 *   return n * n;
 * }
 *
 * var wrapped = _([1, 2]).map(square);
 * var other = wrapped.plant([3, 4]);
 *
 * other.value();
 * // => [9, 16]
 *
 * wrapped.value();
 * // => [1, 4]
 */
function wrapperPlant(value) {
  var result,
      parent = this;

  while (parent instanceof baseLodash) {
    var clone = wrapperClone(parent);
    clone.__index__ = 0;
    clone.__values__ = undefined;
    if (result) {
      previous.__wrapped__ = clone;
    } else {
      result = clone;
    }
    var previous = clone;
    parent = parent.__wrapped__;
  }
  previous.__wrapped__ = value;
  return result;
}

module.exports = wrapperPlant;
var baseProperty = require('./_baseProperty'),
    basePropertyDeep = require('./_basePropertyDeep'),
    isKey = require('./_isKey'),
    toKey = require('./_toKey');

/**
 * Creates a function that returns the value at `path` of a given object.
 *
 * @static
 * @memberOf _
 * @since 2.4.0
 * @category Util
 * @param {Array|string} path The path of the property to get.
 * @returns {Function} Returns the new accessor function.
 * @example
 *
 * var objects = [
 *   { 'a': { 'b': 2 } },
 *   { 'a': { 'b': 1 } }
 * ];
 *
 * _.map(objects, _.property('a.b'));
 * // => [2, 1]
 *
 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
 * // => [1, 2]
 */
function property(path) {
  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
}

module.exports = property;
var baseGet = require('./_baseGet');

/**
 * The opposite of `_.property`; this method creates a function that returns
 * the value at a given path of `object`.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Util
 * @param {Object} object The object to query.
 * @returns {Function} Returns the new accessor function.
 * @example
 *
 * var array = [0, 1, 2],
 *     object = { 'a': array, 'b': array, 'c': array };
 *
 * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
 * // => [2, 0]
 *
 * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
 * // => [2, 0]
 */
function propertyOf(object) {
  return function(path) {
    return object == null ? undefined : baseGet(object, path);
  };
}

module.exports = propertyOf;
var baseRest = require('./_baseRest'),
    pullAll = require('./pullAll');

/**
 * Removes all given values from `array` using
 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * for equality comparisons.
 *
 * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
 * to remove elements from an array by predicate.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @category Array
 * @param {Array} array The array to modify.
 * @param {...*} [values] The values to remove.
 * @returns {Array} Returns `array`.
 * @example
 *
 * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
 *
 * _.pull(array, 'a', 'c');
 * console.log(array);
 * // => ['b', 'b']
 */
var pull = baseRest(pullAll);

module.exports = pull;
var basePullAll = require('./_basePullAll');

/**
 * This method is like `_.pull` except that it accepts an array of values to remove.
 *
 * **Note:** Unlike `_.difference`, this method mutates `array`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to modify.
 * @param {Array} values The values to remove.
 * @returns {Array} Returns `array`.
 * @example
 *
 * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
 *
 * _.pullAll(array, ['a', 'c']);
 * console.log(array);
 * // => ['b', 'b']
 */
function pullAll(array, values) {
  return (array && array.length && values && values.length)
    ? basePullAll(array, values)
    : array;
}

module.exports = pullAll;
var baseIteratee = require('./_baseIteratee'),
    basePullAll = require('./_basePullAll');

/**
 * This method is like `_.pullAll` except that it accepts `iteratee` which is
 * invoked for each element of `array` and `values` to generate the criterion
 * by which they're compared. The iteratee is invoked with one argument: (value).
 *
 * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to modify.
 * @param {Array} values The values to remove.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {Array} Returns `array`.
 * @example
 *
 * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
 *
 * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
 * console.log(array);
 * // => [{ 'x': 2 }]
 */
function pullAllBy(array, values, iteratee) {
  return (array && array.length && values && values.length)
    ? basePullAll(array, values, baseIteratee(iteratee, 2))
    : array;
}

module.exports = pullAllBy;
var basePullAll = require('./_basePullAll');

/**
 * This method is like `_.pullAll` except that it accepts `comparator` which
 * is invoked to compare elements of `array` to `values`. The comparator is
 * invoked with two arguments: (arrVal, othVal).
 *
 * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
 *
 * @static
 * @memberOf _
 * @since 4.6.0
 * @category Array
 * @param {Array} array The array to modify.
 * @param {Array} values The values to remove.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns `array`.
 * @example
 *
 * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
 *
 * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
 * console.log(array);
 * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
 */
function pullAllWith(array, values, comparator) {
  return (array && array.length && values && values.length)
    ? basePullAll(array, values, undefined, comparator)
    : array;
}

module.exports = pullAllWith;
var arrayMap = require('./_arrayMap'),
    baseAt = require('./_baseAt'),
    basePullAt = require('./_basePullAt'),
    compareAscending = require('./_compareAscending'),
    flatRest = require('./_flatRest'),
    isIndex = require('./_isIndex');

/**
 * Removes elements from `array` corresponding to `indexes` and returns an
 * array of removed elements.
 *
 * **Note:** Unlike `_.at`, this method mutates `array`.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to modify.
 * @param {...(number|number[])} [indexes] The indexes of elements to remove.
 * @returns {Array} Returns the new array of removed elements.
 * @example
 *
 * var array = ['a', 'b', 'c', 'd'];
 * var pulled = _.pullAt(array, [1, 3]);
 *
 * console.log(array);
 * // => ['a', 'c']
 *
 * console.log(pulled);
 * // => ['b', 'd']
 */
var pullAt = flatRest(function(array, indexes) {
  var length = array == null ? 0 : array.length,
      result = baseAt(array, indexes);

  basePullAt(array, arrayMap(indexes, function(index) {
    return isIndex(index, length) ? +index : index;
  }).sort(compareAscending));

  return result;
});

module.exports = pullAt;
var baseRandom = require('./_baseRandom'),
    isIterateeCall = require('./_isIterateeCall'),
    toFinite = require('./toFinite');

/** Built-in method references without a dependency on `root`. */
var freeParseFloat = parseFloat;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMin = Math.min,
    nativeRandom = Math.random;

/**
 * Produces a random number between the inclusive `lower` and `upper` bounds.
 * If only one argument is provided a number between `0` and the given number
 * is returned. If `floating` is `true`, or either `lower` or `upper` are
 * floats, a floating-point number is returned instead of an integer.
 *
 * **Note:** JavaScript follows the IEEE-754 standard for resolving
 * floating-point values which can produce unexpected results.
 *
 * @static
 * @memberOf _
 * @since 0.7.0
 * @category Number
 * @param {number} [lower=0] The lower bound.
 * @param {number} [upper=1] The upper bound.
 * @param {boolean} [floating] Specify returning a floating-point number.
 * @returns {number} Returns the random number.
 * @example
 *
 * _.random(0, 5);
 * // => an integer between 0 and 5
 *
 * _.random(5);
 * // => also an integer between 0 and 5
 *
 * _.random(5, true);
 * // => a floating-point number between 0 and 5
 *
 * _.random(1.2, 5.2);
 * // => a floating-point number between 1.2 and 5.2
 */
function random(lower, upper, floating) {
  if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
    upper = floating = undefined;
  }
  if (floating === undefined) {
    if (typeof upper == 'boolean') {
      floating = upper;
      upper = undefined;
    }
    else if (typeof lower == 'boolean') {
      floating = lower;
      lower = undefined;
    }
  }
  if (lower === undefined && upper === undefined) {
    lower = 0;
    upper = 1;
  }
  else {
    lower = toFinite(lower);
    if (upper === undefined) {
      upper = lower;
      lower = 0;
    } else {
      upper = toFinite(upper);
    }
  }
  if (lower > upper) {
    var temp = lower;
    lower = upper;
    upper = temp;
  }
  if (floating || lower % 1 || upper % 1) {
    var rand = nativeRandom();
    return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
  }
  return baseRandom(lower, upper);
}

module.exports = random;
var createRange = require('./_createRange');

/**
 * Creates an array of numbers (positive and/or negative) progressing from
 * `start` up to, but not including, `end`. A step of `-1` is used if a negative
 * `start` is specified without an `end` or `step`. If `end` is not specified,
 * it's set to `start` with `start` then set to `0`.
 *
 * **Note:** JavaScript follows the IEEE-754 standard for resolving
 * floating-point values which can produce unexpected results.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Util
 * @param {number} [start=0] The start of the range.
 * @param {number} end The end of the range.
 * @param {number} [step=1] The value to increment or decrement by.
 * @returns {Array} Returns the range of numbers.
 * @see _.inRange, _.rangeRight
 * @example
 *
 * _.range(4);
 * // => [0, 1, 2, 3]
 *
 * _.range(-4);
 * // => [0, -1, -2, -3]
 *
 * _.range(1, 5);
 * // => [1, 2, 3, 4]
 *
 * _.range(0, 20, 5);
 * // => [0, 5, 10, 15]
 *
 * _.range(0, -4, -1);
 * // => [0, -1, -2, -3]
 *
 * _.range(1, 4, 0);
 * // => [1, 1, 1]
 *
 * _.range(0);
 * // => []
 */
var range = createRange();

module.exports = range;
var createRange = require('./_createRange');

/**
 * This method is like `_.range` except that it populates values in
 * descending order.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Util
 * @param {number} [start=0] The start of the range.
 * @param {number} end The end of the range.
 * @param {number} [step=1] The value to increment or decrement by.
 * @returns {Array} Returns the range of numbers.
 * @see _.inRange, _.range
 * @example
 *
 * _.rangeRight(4);
 * // => [3, 2, 1, 0]
 *
 * _.rangeRight(-4);
 * // => [-3, -2, -1, 0]
 *
 * _.rangeRight(1, 5);
 * // => [4, 3, 2, 1]
 *
 * _.rangeRight(0, 20, 5);
 * // => [15, 10, 5, 0]
 *
 * _.rangeRight(0, -4, -1);
 * // => [-3, -2, -1, 0]
 *
 * _.rangeRight(1, 4, 0);
 * // => [1, 1, 1]
 *
 * _.rangeRight(0);
 * // => []
 */
var rangeRight = createRange(true);

module.exports = rangeRight;
var createWrap = require('./_createWrap'),
    flatRest = require('./_flatRest');

/** Used to compose bitmasks for function metadata. */
var WRAP_REARG_FLAG = 256;

/**
 * Creates a function that invokes `func` with arguments arranged according
 * to the specified `indexes` where the argument value at the first index is
 * provided as the first argument, the argument value at the second index is
 * provided as the second argument, and so on.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Function
 * @param {Function} func The function to rearrange arguments for.
 * @param {...(number|number[])} indexes The arranged argument indexes.
 * @returns {Function} Returns the new function.
 * @example
 *
 * var rearged = _.rearg(function(a, b, c) {
 *   return [a, b, c];
 * }, [2, 0, 1]);
 *
 * rearged('b', 'c', 'a')
 * // => ['a', 'b', 'c']
 */
var rearg = flatRest(function(func, indexes) {
  return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
});

module.exports = rearg;
var arrayReduce = require('./_arrayReduce'),
    baseEach = require('./_baseEach'),
    baseIteratee = require('./_baseIteratee'),
    baseReduce = require('./_baseReduce'),
    isArray = require('./isArray');

/**
 * Reduces `collection` to a value which is the accumulated result of running
 * each element in `collection` thru `iteratee`, where each successive
 * invocation is supplied the return value of the previous. If `accumulator`
 * is not given, the first element of `collection` is used as the initial
 * value. The iteratee is invoked with four arguments:
 * (accumulator, value, index|key, collection).
 *
 * Many lodash methods are guarded to work as iteratees for methods like
 * `_.reduce`, `_.reduceRight`, and `_.transform`.
 *
 * The guarded methods are:
 * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
 * and `sortBy`
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @param {*} [accumulator] The initial value.
 * @returns {*} Returns the accumulated value.
 * @see _.reduceRight
 * @example
 *
 * _.reduce([1, 2], function(sum, n) {
 *   return sum + n;
 * }, 0);
 * // => 3
 *
 * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
 *   (result[value] || (result[value] = [])).push(key);
 *   return result;
 * }, {});
 * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
 */
function reduce(collection, iteratee, accumulator) {
  var func = isArray(collection) ? arrayReduce : baseReduce,
      initAccum = arguments.length < 3;

  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);
}

module.exports = reduce;
var arrayReduceRight = require('./_arrayReduceRight'),
    baseEachRight = require('./_baseEachRight'),
    baseIteratee = require('./_baseIteratee'),
    baseReduce = require('./_baseReduce'),
    isArray = require('./isArray');

/**
 * This method is like `_.reduce` except that it iterates over elements of
 * `collection` from right to left.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @param {*} [accumulator] The initial value.
 * @returns {*} Returns the accumulated value.
 * @see _.reduce
 * @example
 *
 * var array = [[0, 1], [2, 3], [4, 5]];
 *
 * _.reduceRight(array, function(flattened, other) {
 *   return flattened.concat(other);
 * }, []);
 * // => [4, 5, 2, 3, 0, 1]
 */
function reduceRight(collection, iteratee, accumulator) {
  var func = isArray(collection) ? arrayReduceRight : baseReduce,
      initAccum = arguments.length < 3;

  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
}

module.exports = reduceRight;
var arrayFilter = require('./_arrayFilter'),
    baseFilter = require('./_baseFilter'),
    baseIteratee = require('./_baseIteratee'),
    isArray = require('./isArray'),
    negate = require('./negate');

/**
 * The opposite of `_.filter`; this method returns the elements of `collection`
 * that `predicate` does **not** return truthy for.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the new filtered array.
 * @see _.filter
 * @example
 *
 * var users = [
 *   { 'user': 'barney', 'age': 36, 'active': false },
 *   { 'user': 'fred',   'age': 40, 'active': true }
 * ];
 *
 * _.reject(users, function(o) { return !o.active; });
 * // => objects for ['fred']
 *
 * // The `_.matches` iteratee shorthand.
 * _.reject(users, { 'age': 40, 'active': true });
 * // => objects for ['barney']
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.reject(users, ['active', false]);
 * // => objects for ['fred']
 *
 * // The `_.property` iteratee shorthand.
 * _.reject(users, 'active');
 * // => objects for ['barney']
 */
function reject(collection, predicate) {
  var func = isArray(collection) ? arrayFilter : baseFilter;
  return func(collection, negate(baseIteratee(predicate, 3)));
}

module.exports = reject;
npm run build
npm run doc
npm i
git clone --depth=10 --branch=master git@github.com:lodash-archive/lodash-cli.git ./node_modules/lodash-cli
mkdir -p ./node_modules/lodash-cli/node_modules/lodash; cd $_; cp ../../../../lodash.js ./lodash.js; cp ../../../../package.json ./package.json
cd ../../; npm i --production; cd ../../
node ./node_modules/lodash-cli/bin/lodash core exports=node -o ./npm-package/core.js
node ./node_modules/lodash-cli/bin/lodash modularize exports=node -o ./npm-package
cp lodash.js npm-package/lodash.js
cp dist/lodash.min.js npm-package/lodash.min.js
cp LICENSE npm-package/LICENSE

1. Clone two repos
Bump lodash version in package.json, readme, package=locak, lodash.js
npm run build
npm run doc

2. update mappings in ldoash-cli
3. copy ldoash into lodash-cli node modules and package json.

node ./node_modules/lodash-cli/bin/lodash core exports=node -o ./npm-package/core.js
node ./node_modules/lodash-cli/bin/lodash modularize exports=node -o ./npm-package



1. Clone the two repositories:
```sh
$ git clone https://github.com/lodash/lodash.git
$ git clone https://github.com/bnjmnt4n/lodash-cli.git
```
2. Update lodash-cli to accomdate changes in lodash source. This can typically involve adding new function dependency mappings in lib/mappings.js. Sometimes, additional changes might be needed for more involved functions.
3. In the lodash repository, update references to the lodash version in README.md, lodash.js, package.jsona nd package-lock.json
4. Run:
```sh
npm run build
npm run doc
node ../lodash-cli/bin/lodash core -o ./dist/lodash.core.js
```
5. Add a commit and tag the release
mkdir ../lodash-temp
cp lodash.js dist/lodash.min.js dist/lodash.core.js dist/lodash.core.min.js ../lodash-temp/
node ../lodash-cli/bin/lodash modularize exports=node -o .
cp ../lodash-temp/lodash.core.js core.js
cp ../lodash-temp/lodash.core.min.js core.min.js
cp ../lodash-temp/lodash.js lodash.js
cp ../lodash-temp/lodash.min.js lodash.min.js

â¯ node ../lodash-cli/bin/lodash modularize exports=es -o .
var baseIteratee = require('./_baseIteratee'),
    basePullAt = require('./_basePullAt');

/**
 * Removes all elements from `array` that `predicate` returns truthy for
 * and returns an array of the removed elements. The predicate is invoked
 * with three arguments: (value, index, array).
 *
 * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
 * to pull elements from an array by value.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @category Array
 * @param {Array} array The array to modify.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the new array of removed elements.
 * @example
 *
 * var array = [1, 2, 3, 4];
 * var evens = _.remove(array, function(n) {
 *   return n % 2 == 0;
 * });
 *
 * console.log(array);
 * // => [1, 3]
 *
 * console.log(evens);
 * // => [2, 4]
 */
function remove(array, predicate) {
  var result = [];
  if (!(array && array.length)) {
    return result;
  }
  var index = -1,
      indexes = [],
      length = array.length;

  predicate = baseIteratee(predicate, 3);
  while (++index < length) {
    var value = array[index];
    if (predicate(value, index, array)) {
      result.push(value);
      indexes.push(index);
    }
  }
  basePullAt(array, indexes);
  return result;
}

module.exports = remove;
var baseRepeat = require('./_baseRepeat'),
    isIterateeCall = require('./_isIterateeCall'),
    toInteger = require('./toInteger'),
    toString = require('./toString');

/**
 * Repeats the given string `n` times.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to repeat.
 * @param {number} [n=1] The number of times to repeat the string.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {string} Returns the repeated string.
 * @example
 *
 * _.repeat('*', 3);
 * // => '***'
 *
 * _.repeat('abc', 2);
 * // => 'abcabc'
 *
 * _.repeat('abc', 0);
 * // => ''
 */
function repeat(string, n, guard) {
  if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
    n = 1;
  } else {
    n = toInteger(n);
  }
  return baseRepeat(toString(string), n);
}

module.exports = repeat;
var toString = require('./toString');

/**
 * Replaces matches for `pattern` in `string` with `replacement`.
 *
 * **Note:** This method is based on
 * [`String#replace`](https://mdn.io/String/replace).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to modify.
 * @param {RegExp|string} pattern The pattern to replace.
 * @param {Function|string} replacement The match replacement.
 * @returns {string} Returns the modified string.
 * @example
 *
 * _.replace('Hi Fred', 'Fred', 'Barney');
 * // => 'Hi Barney'
 */
function replace() {
  var args = arguments,
      string = toString(args[0]);

  return args.length < 3 ? string : string.replace(args[1], args[2]);
}

module.exports = replace;
var baseRest = require('./_baseRest'),
    toInteger = require('./toInteger');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/**
 * Creates a function that invokes `func` with the `this` binding of the
 * created function and arguments from `start` and beyond provided as
 * an array.
 *
 * **Note:** This method is based on the
 * [rest parameter](https://mdn.io/rest_parameters).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Function
 * @param {Function} func The function to apply a rest parameter to.
 * @param {number} [start=func.length-1] The start position of the rest parameter.
 * @returns {Function} Returns the new function.
 * @example
 *
 * var say = _.rest(function(what, names) {
 *   return what + ' ' + _.initial(names).join(', ') +
 *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
 * });
 *
 * say('hello', 'fred', 'barney', 'pebbles');
 * // => 'hello fred, barney, & pebbles'
 */
function rest(func, start) {
  if (typeof func != 'function') {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  start = start === undefined ? start : toInteger(start);
  return baseRest(func, start);
}

module.exports = rest;
var castPath = require('./_castPath'),
    isFunction = require('./isFunction'),
    toKey = require('./_toKey');

/**
 * This method is like `_.get` except that if the resolved value is a
 * function it's invoked with the `this` binding of its parent object and
 * its result is returned.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The object to query.
 * @param {Array|string} path The path of the property to resolve.
 * @param {*} [defaultValue] The value returned for `undefined` resolved values.
 * @returns {*} Returns the resolved value.
 * @example
 *
 * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
 *
 * _.result(object, 'a[0].b.c1');
 * // => 3
 *
 * _.result(object, 'a[0].b.c2');
 * // => 4
 *
 * _.result(object, 'a[0].b.c3', 'default');
 * // => 'default'
 *
 * _.result(object, 'a[0].b.c3', _.constant('default'));
 * // => 'default'
 */
function result(object, path, defaultValue) {
  path = castPath(path, object);

  var index = -1,
      length = path.length;

  // Ensure the loop is entered when path is empty.
  if (!length) {
    length = 1;
    object = undefined;
  }
  while (++index < length) {
    var value = object == null ? undefined : object[toKey(path[index])];
    if (value === undefined) {
      index = length;
      value = defaultValue;
    }
    object = isFunction(value) ? value.call(object) : value;
  }
  return object;
}

module.exports = result;
/** Used for built-in method references. */
var arrayProto = Array.prototype;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeReverse = arrayProto.reverse;

/**
 * Reverses `array` so that the first element becomes the last, the second
 * element becomes the second to last, and so on.
 *
 * **Note:** This method mutates `array` and is based on
 * [`Array#reverse`](https://mdn.io/Array/reverse).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to modify.
 * @returns {Array} Returns `array`.
 * @example
 *
 * var array = [1, 2, 3];
 *
 * _.reverse(array);
 * // => [3, 2, 1]
 *
 * console.log(array);
 * // => [3, 2, 1]
 */
function reverse(array) {
  return array == null ? array : nativeReverse.call(array);
}

module.exports = reverse;
var createRound = require('./_createRound');

/**
 * Computes `number` rounded to `precision`.
 *
 * @static
 * @memberOf _
 * @since 3.10.0
 * @category Math
 * @param {number} number The number to round.
 * @param {number} [precision=0] The precision to round to.
 * @returns {number} Returns the rounded number.
 * @example
 *
 * _.round(4.006);
 * // => 4
 *
 * _.round(4.006, 2);
 * // => 4.01
 *
 * _.round(4060, -2);
 * // => 4100
 */
var round = createRound('round');

module.exports = round;
var arraySample = require('./_arraySample'),
    baseSample = require('./_baseSample'),
    isArray = require('./isArray');

/**
 * Gets a random element from `collection`.
 *
 * @static
 * @memberOf _
 * @since 2.0.0
 * @category Collection
 * @param {Array|Object} collection The collection to sample.
 * @returns {*} Returns the random element.
 * @example
 *
 * _.sample([1, 2, 3, 4]);
 * // => 2
 */
function sample(collection) {
  var func = isArray(collection) ? arraySample : baseSample;
  return func(collection);
}

module.exports = sample;
var arraySampleSize = require('./_arraySampleSize'),
    baseSampleSize = require('./_baseSampleSize'),
    isArray = require('./isArray'),
    isIterateeCall = require('./_isIterateeCall'),
    toInteger = require('./toInteger');

/**
 * Gets `n` random elements at unique keys from `collection` up to the
 * size of `collection`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Collection
 * @param {Array|Object} collection The collection to sample.
 * @param {number} [n=1] The number of elements to sample.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Array} Returns the random elements.
 * @example
 *
 * _.sampleSize([1, 2, 3], 2);
 * // => [3, 1]
 *
 * _.sampleSize([1, 2, 3], 4);
 * // => [2, 3, 1]
 */
function sampleSize(collection, n, guard) {
  if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
    n = 1;
  } else {
    n = toInteger(n);
  }
  var func = isArray(collection) ? arraySampleSize : baseSampleSize;
  return func(collection, n);
}

module.exports = sampleSize;
module.exports = {
  'at': require('./wrapperAt'),
  'chain': require('./chain'),
  'commit': require('./commit'),
  'lodash': require('./wrapperLodash'),
  'next': require('./next'),
  'plant': require('./plant'),
  'reverse': require('./wrapperReverse'),
  'tap': require('./tap'),
  'thru': require('./thru'),
  'toIterator': require('./toIterator'),
  'toJSON': require('./toJSON'),
  'value': require('./wrapperValue'),
  'valueOf': require('./valueOf'),
  'wrapperChain': require('./wrapperChain')
};
var baseSet = require('./_baseSet');

/**
 * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
 * it's created. Arrays are created for missing index properties while objects
 * are created for all other missing properties. Use `_.setWith` to customize
 * `path` creation.
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 3.7.0
 * @category Object
 * @param {Object} object The object to modify.
 * @param {Array|string} path The path of the property to set.
 * @param {*} value The value to set.
 * @returns {Object} Returns `object`.
 * @example
 *
 * var object = { 'a': [{ 'b': { 'c': 3 } }] };
 *
 * _.set(object, 'a[0].b.c', 4);
 * console.log(object.a[0].b.c);
 * // => 4
 *
 * _.set(object, ['x', '0', 'y', 'z'], 5);
 * console.log(object.x[0].y.z);
 * // => 5
 */
function set(object, path, value) {
  return object == null ? object : baseSet(object, path, value);
}

module.exports = set;
var baseSet = require('./_baseSet');

/**
 * This method is like `_.set` except that it accepts `customizer` which is
 * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
 * path creation is handled by the method instead. The `customizer` is invoked
 * with three arguments: (nsValue, key, nsObject).
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Object
 * @param {Object} object The object to modify.
 * @param {Array|string} path The path of the property to set.
 * @param {*} value The value to set.
 * @param {Function} [customizer] The function to customize assigned values.
 * @returns {Object} Returns `object`.
 * @example
 *
 * var object = {};
 *
 * _.setWith(object, '[0][1]', 'a', Object);
 * // => { '0': { '1': 'a' } }
 */
function setWith(object, path, value, customizer) {
  customizer = typeof customizer == 'function' ? customizer : undefined;
  return object == null ? object : baseSet(object, path, value, customizer);
}

module.exports = setWith;
var arrayShuffle = require('./_arrayShuffle'),
    baseShuffle = require('./_baseShuffle'),
    isArray = require('./isArray');

/**
 * Creates an array of shuffled values, using a version of the
 * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to shuffle.
 * @returns {Array} Returns the new shuffled array.
 * @example
 *
 * _.shuffle([1, 2, 3, 4]);
 * // => [4, 1, 3, 2]
 */
function shuffle(collection) {
  var func = isArray(collection) ? arrayShuffle : baseShuffle;
  return func(collection);
}

module.exports = shuffle;
var baseKeys = require('./_baseKeys'),
    getTag = require('./_getTag'),
    isArrayLike = require('./isArrayLike'),
    isString = require('./isString'),
    stringSize = require('./_stringSize');

/** `Object#toString` result references. */
var mapTag = '[object Map]',
    setTag = '[object Set]';

/**
 * Gets the size of `collection` by returning its length for array-like
 * values or the number of own enumerable string keyed properties for objects.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object|string} collection The collection to inspect.
 * @returns {number} Returns the collection size.
 * @example
 *
 * _.size([1, 2, 3]);
 * // => 3
 *
 * _.size({ 'a': 1, 'b': 2 });
 * // => 2
 *
 * _.size('pebbles');
 * // => 7
 */
function size(collection) {
  if (collection == null) {
    return 0;
  }
  if (isArrayLike(collection)) {
    return isString(collection) ? stringSize(collection) : collection.length;
  }
  var tag = getTag(collection);
  if (tag == mapTag || tag == setTag) {
    return collection.size;
  }
  return baseKeys(collection).length;
}

module.exports = size;
var baseSlice = require('./_baseSlice'),
    isIterateeCall = require('./_isIterateeCall'),
    toInteger = require('./toInteger');

/**
 * Creates a slice of `array` from `start` up to, but not including, `end`.
 *
 * **Note:** This method is used instead of
 * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
 * returned.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to slice.
 * @param {number} [start=0] The start position.
 * @param {number} [end=array.length] The end position.
 * @returns {Array} Returns the slice of `array`.
 */
function slice(array, start, end) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return [];
  }
  if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
    start = 0;
    end = length;
  }
  else {
    start = start == null ? 0 : toInteger(start);
    end = end === undefined ? length : toInteger(end);
  }
  return baseSlice(array, start, end);
}

module.exports = slice;
var createCompounder = require('./_createCompounder');

/**
 * Converts `string` to
 * [snake case](https://en.wikipedia.org/wiki/Snake_case).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the snake cased string.
 * @example
 *
 * _.snakeCase('Foo Bar');
 * // => 'foo_bar'
 *
 * _.snakeCase('fooBar');
 * // => 'foo_bar'
 *
 * _.snakeCase('--FOO-BAR--');
 * // => 'foo_bar'
 */
var snakeCase = createCompounder(function(result, word, index) {
  return result + (index ? '_' : '') + word.toLowerCase();
});

module.exports = snakeCase;
var arraySome = require('./_arraySome'),
    baseIteratee = require('./_baseIteratee'),
    baseSome = require('./_baseSome'),
    isArray = require('./isArray'),
    isIterateeCall = require('./_isIterateeCall');

/**
 * Checks if `predicate` returns truthy for **any** element of `collection`.
 * Iteration is stopped once `predicate` returns truthy. The predicate is
 * invoked with three arguments: (value, index|key, collection).
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {boolean} Returns `true` if any element passes the predicate check,
 *  else `false`.
 * @example
 *
 * _.some([null, 0, 'yes', false], Boolean);
 * // => true
 *
 * var users = [
 *   { 'user': 'barney', 'active': true },
 *   { 'user': 'fred',   'active': false }
 * ];
 *
 * // The `_.matches` iteratee shorthand.
 * _.some(users, { 'user': 'barney', 'active': false });
 * // => false
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.some(users, ['active', false]);
 * // => true
 *
 * // The `_.property` iteratee shorthand.
 * _.some(users, 'active');
 * // => true
 */
function some(collection, predicate, guard) {
  var func = isArray(collection) ? arraySome : baseSome;
  if (guard && isIterateeCall(collection, predicate, guard)) {
    predicate = undefined;
  }
  return func(collection, baseIteratee(predicate, 3));
}

module.exports = some;
var baseFlatten = require('./_baseFlatten'),
    baseOrderBy = require('./_baseOrderBy'),
    baseRest = require('./_baseRest'),
    isIterateeCall = require('./_isIterateeCall');

/**
 * Creates an array of elements, sorted in ascending order by the results of
 * running each element in a collection thru each iteratee. This method
 * performs a stable sort, that is, it preserves the original sort order of
 * equal elements. The iteratees are invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.
 * @param {...(Function|Function[])} [iteratees=[_.identity]]
 *  The iteratees to sort by.
 * @returns {Array} Returns the new sorted array.
 * @example
 *
 * var users = [
 *   { 'user': 'fred',   'age': 48 },
 *   { 'user': 'barney', 'age': 36 },
 *   { 'user': 'fred',   'age': 30 },
 *   { 'user': 'barney', 'age': 34 }
 * ];
 *
 * _.sortBy(users, [function(o) { return o.user; }]);
 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
 *
 * _.sortBy(users, ['user', 'age']);
 * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
 */
var sortBy = baseRest(function(collection, iteratees) {
  if (collection == null) {
    return [];
  }
  var length = iteratees.length;
  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
    iteratees = [];
  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
    iteratees = [iteratees[0]];
  }
  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
});

module.exports = sortBy;
var baseSortedIndex = require('./_baseSortedIndex');

/**
 * Uses a binary search to determine the lowest index at which `value`
 * should be inserted into `array` in order to maintain its sort order.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The sorted array to inspect.
 * @param {*} value The value to evaluate.
 * @returns {number} Returns the index at which `value` should be inserted
 *  into `array`.
 * @example
 *
 * _.sortedIndex([30, 50], 40);
 * // => 1
 */
function sortedIndex(array, value) {
  return baseSortedIndex(array, value);
}

module.exports = sortedIndex;
var baseIteratee = require('./_baseIteratee'),
    baseSortedIndexBy = require('./_baseSortedIndexBy');

/**
 * This method is like `_.sortedIndex` except that it accepts `iteratee`
 * which is invoked for `value` and each element of `array` to compute their
 * sort ranking. The iteratee is invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The sorted array to inspect.
 * @param {*} value The value to evaluate.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {number} Returns the index at which `value` should be inserted
 *  into `array`.
 * @example
 *
 * var objects = [{ 'x': 4 }, { 'x': 5 }];
 *
 * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
 * // => 0
 *
 * // The `_.property` iteratee shorthand.
 * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
 * // => 0
 */
function sortedIndexBy(array, value, iteratee) {
  return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2));
}

module.exports = sortedIndexBy;
var baseSortedIndex = require('./_baseSortedIndex'),
    eq = require('./eq');

/**
 * This method is like `_.indexOf` except that it performs a binary
 * search on a sorted `array`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @returns {number} Returns the index of the matched value, else `-1`.
 * @example
 *
 * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
 * // => 1
 */
function sortedIndexOf(array, value) {
  var length = array == null ? 0 : array.length;
  if (length) {
    var index = baseSortedIndex(array, value);
    if (index < length && eq(array[index], value)) {
      return index;
    }
  }
  return -1;
}

module.exports = sortedIndexOf;
var baseSortedIndex = require('./_baseSortedIndex');

/**
 * This method is like `_.sortedIndex` except that it returns the highest
 * index at which `value` should be inserted into `array` in order to
 * maintain its sort order.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The sorted array to inspect.
 * @param {*} value The value to evaluate.
 * @returns {number} Returns the index at which `value` should be inserted
 *  into `array`.
 * @example
 *
 * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
 * // => 4
 */
function sortedLastIndex(array, value) {
  return baseSortedIndex(array, value, true);
}

module.exports = sortedLastIndex;
var baseIteratee = require('./_baseIteratee'),
    baseSortedIndexBy = require('./_baseSortedIndexBy');

/**
 * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
 * which is invoked for `value` and each element of `array` to compute their
 * sort ranking. The iteratee is invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The sorted array to inspect.
 * @param {*} value The value to evaluate.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {number} Returns the index at which `value` should be inserted
 *  into `array`.
 * @example
 *
 * var objects = [{ 'x': 4 }, { 'x': 5 }];
 *
 * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
 * // => 1
 *
 * // The `_.property` iteratee shorthand.
 * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
 * // => 1
 */
function sortedLastIndexBy(array, value, iteratee) {
  return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2), true);
}

module.exports = sortedLastIndexBy;
var baseSortedIndex = require('./_baseSortedIndex'),
    eq = require('./eq');

/**
 * This method is like `_.lastIndexOf` except that it performs a binary
 * search on a sorted `array`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {*} value The value to search for.
 * @returns {number} Returns the index of the matched value, else `-1`.
 * @example
 *
 * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
 * // => 3
 */
function sortedLastIndexOf(array, value) {
  var length = array == null ? 0 : array.length;
  if (length) {
    var index = baseSortedIndex(array, value, true) - 1;
    if (eq(array[index], value)) {
      return index;
    }
  }
  return -1;
}

module.exports = sortedLastIndexOf;
var baseSortedUniq = require('./_baseSortedUniq');

/**
 * This method is like `_.uniq` except that it's designed and optimized
 * for sorted arrays.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @returns {Array} Returns the new duplicate free array.
 * @example
 *
 * _.sortedUniq([1, 1, 2]);
 * // => [1, 2]
 */
function sortedUniq(array) {
  return (array && array.length)
    ? baseSortedUniq(array)
    : [];
}

module.exports = sortedUniq;
var baseIteratee = require('./_baseIteratee'),
    baseSortedUniq = require('./_baseSortedUniq');

/**
 * This method is like `_.uniqBy` except that it's designed and optimized
 * for sorted arrays.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {Function} [iteratee] The iteratee invoked per element.
 * @returns {Array} Returns the new duplicate free array.
 * @example
 *
 * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
 * // => [1.1, 2.3]
 */
function sortedUniqBy(array, iteratee) {
  return (array && array.length)
    ? baseSortedUniq(array, baseIteratee(iteratee, 2))
    : [];
}

module.exports = sortedUniqBy;
var baseToString = require('./_baseToString'),
    castSlice = require('./_castSlice'),
    hasUnicode = require('./_hasUnicode'),
    isIterateeCall = require('./_isIterateeCall'),
    isRegExp = require('./isRegExp'),
    stringToArray = require('./_stringToArray'),
    toString = require('./toString');

/** Used as references for the maximum length and index of an array. */
var MAX_ARRAY_LENGTH = 4294967295;

/**
 * Splits `string` by `separator`.
 *
 * **Note:** This method is based on
 * [`String#split`](https://mdn.io/String/split).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to split.
 * @param {RegExp|string} separator The separator pattern to split by.
 * @param {number} [limit] The length to truncate results to.
 * @returns {Array} Returns the string segments.
 * @example
 *
 * _.split('a-b-c', '-', 2);
 * // => ['a', 'b']
 */
function split(string, separator, limit) {
  if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
    separator = limit = undefined;
  }
  limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
  if (!limit) {
    return [];
  }
  string = toString(string);
  if (string && (
        typeof separator == 'string' ||
        (separator != null && !isRegExp(separator))
      )) {
    separator = baseToString(separator);
    if (!separator && hasUnicode(string)) {
      return castSlice(stringToArray(string), 0, limit);
    }
  }
  return string.split(separator, limit);
}

module.exports = split;
var apply = require('./_apply'),
    arrayPush = require('./_arrayPush'),
    baseRest = require('./_baseRest'),
    castSlice = require('./_castSlice'),
    toInteger = require('./toInteger');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;

/**
 * Creates a function that invokes `func` with the `this` binding of the
 * create function and an array of arguments much like
 * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
 *
 * **Note:** This method is based on the
 * [spread operator](https://mdn.io/spread_operator).
 *
 * @static
 * @memberOf _
 * @since 3.2.0
 * @category Function
 * @param {Function} func The function to spread arguments over.
 * @param {number} [start=0] The start position of the spread.
 * @returns {Function} Returns the new function.
 * @example
 *
 * var say = _.spread(function(who, what) {
 *   return who + ' says ' + what;
 * });
 *
 * say(['fred', 'hello']);
 * // => 'fred says hello'
 *
 * var numbers = Promise.all([
 *   Promise.resolve(40),
 *   Promise.resolve(36)
 * ]);
 *
 * numbers.then(_.spread(function(x, y) {
 *   return x + y;
 * }));
 * // => a Promise of 76
 */
function spread(func, start) {
  if (typeof func != 'function') {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  start = start == null ? 0 : nativeMax(toInteger(start), 0);
  return baseRest(function(args) {
    var array = args[start],
        otherArgs = castSlice(args, 0, start);

    if (array) {
      arrayPush(otherArgs, array);
    }
    return apply(func, this, otherArgs);
  });
}

module.exports = spread;
var createCompounder = require('./_createCompounder'),
    upperFirst = require('./upperFirst');

/**
 * Converts `string` to
 * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
 *
 * @static
 * @memberOf _
 * @since 3.1.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the start cased string.
 * @example
 *
 * _.startCase('--foo-bar--');
 * // => 'Foo Bar'
 *
 * _.startCase('fooBar');
 * // => 'Foo Bar'
 *
 * _.startCase('__FOO_BAR__');
 * // => 'FOO BAR'
 */
var startCase = createCompounder(function(result, word, index) {
  return result + (index ? ' ' : '') + upperFirst(word);
});

module.exports = startCase;
var baseClamp = require('./_baseClamp'),
    baseToString = require('./_baseToString'),
    toInteger = require('./toInteger'),
    toString = require('./toString');

/**
 * Checks if `string` starts with the given target string.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to inspect.
 * @param {string} [target] The string to search for.
 * @param {number} [position=0] The position to search from.
 * @returns {boolean} Returns `true` if `string` starts with `target`,
 *  else `false`.
 * @example
 *
 * _.startsWith('abc', 'a');
 * // => true
 *
 * _.startsWith('abc', 'b');
 * // => false
 *
 * _.startsWith('abc', 'b', 1);
 * // => true
 */
function startsWith(string, target, position) {
  string = toString(string);
  position = position == null
    ? 0
    : baseClamp(toInteger(position), 0, string.length);

  target = baseToString(target);
  return string.slice(position, position + target.length) == target;
}

module.exports = startsWith;
module.exports = {
  'camelCase': require('./camelCase'),
  'capitalize': require('./capitalize'),
  'deburr': require('./deburr'),
  'endsWith': require('./endsWith'),
  'escape': require('./escape'),
  'escapeRegExp': require('./escapeRegExp'),
  'kebabCase': require('./kebabCase'),
  'lowerCase': require('./lowerCase'),
  'lowerFirst': require('./lowerFirst'),
  'pad': require('./pad'),
  'padEnd': require('./padEnd'),
  'padStart': require('./padStart'),
  'parseInt': require('./parseInt'),
  'repeat': require('./repeat'),
  'replace': require('./replace'),
  'snakeCase': require('./snakeCase'),
  'split': require('./split'),
  'startCase': require('./startCase'),
  'startsWith': require('./startsWith'),
  'template': require('./template'),
  'templateSettings': require('./templateSettings'),
  'toLower': require('./toLower'),
  'toUpper': require('./toUpper'),
  'trim': require('./trim'),
  'trimEnd': require('./trimEnd'),
  'trimStart': require('./trimStart'),
  'truncate': require('./truncate'),
  'unescape': require('./unescape'),
  'upperCase': require('./upperCase'),
  'upperFirst': require('./upperFirst'),
  'words': require('./words')
};
/**
 * This method returns a new empty array.
 *
 * @static
 * @memberOf _
 * @since 4.13.0
 * @category Util
 * @returns {Array} Returns the new empty array.
 * @example
 *
 * var arrays = _.times(2, _.stubArray);
 *
 * console.log(arrays);
 * // => [[], []]
 *
 * console.log(arrays[0] === arrays[1]);
 * // => false
 */
function stubArray() {
  return [];
}

module.exports = stubArray;
/**
 * This method returns `false`.
 *
 * @static
 * @memberOf _
 * @since 4.13.0
 * @category Util
 * @returns {boolean} Returns `false`.
 * @example
 *
 * _.times(2, _.stubFalse);
 * // => [false, false]
 */
function stubFalse() {
  return false;
}

module.exports = stubFalse;
/**
 * This method returns a new empty object.
 *
 * @static
 * @memberOf _
 * @since 4.13.0
 * @category Util
 * @returns {Object} Returns the new empty object.
 * @example
 *
 * var objects = _.times(2, _.stubObject);
 *
 * console.log(objects);
 * // => [{}, {}]
 *
 * console.log(objects[0] === objects[1]);
 * // => false
 */
function stubObject() {
  return {};
}

module.exports = stubObject;
/**
 * This method returns an empty string.
 *
 * @static
 * @memberOf _
 * @since 4.13.0
 * @category Util
 * @returns {string} Returns the empty string.
 * @example
 *
 * _.times(2, _.stubString);
 * // => ['', '']
 */
function stubString() {
  return '';
}

module.exports = stubString;
/**
 * This method returns `true`.
 *
 * @static
 * @memberOf _
 * @since 4.13.0
 * @category Util
 * @returns {boolean} Returns `true`.
 * @example
 *
 * _.times(2, _.stubTrue);
 * // => [true, true]
 */
function stubTrue() {
  return true;
}

module.exports = stubTrue;
var createMathOperation = require('./_createMathOperation');

/**
 * Subtract two numbers.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Math
 * @param {number} minuend The first number in a subtraction.
 * @param {number} subtrahend The second number in a subtraction.
 * @returns {number} Returns the difference.
 * @example
 *
 * _.subtract(6, 4);
 * // => 2
 */
var subtract = createMathOperation(function(minuend, subtrahend) {
  return minuend - subtrahend;
}, 0);

module.exports = subtract;
var baseSum = require('./_baseSum'),
    identity = require('./identity');

/**
 * Computes the sum of the values in `array`.
 *
 * @static
 * @memberOf _
 * @since 3.4.0
 * @category Math
 * @param {Array} array The array to iterate over.
 * @returns {number} Returns the sum.
 * @example
 *
 * _.sum([4, 2, 8, 6]);
 * // => 20
 */
function sum(array) {
  return (array && array.length)
    ? baseSum(array, identity)
    : 0;
}

module.exports = sum;
var baseIteratee = require('./_baseIteratee'),
    baseSum = require('./_baseSum');

/**
 * This method is like `_.sum` except that it accepts `iteratee` which is
 * invoked for each element in `array` to generate the value to be summed.
 * The iteratee is invoked with one argument: (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Math
 * @param {Array} array The array to iterate over.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {number} Returns the sum.
 * @example
 *
 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
 *
 * _.sumBy(objects, function(o) { return o.n; });
 * // => 20
 *
 * // The `_.property` iteratee shorthand.
 * _.sumBy(objects, 'n');
 * // => 20
 */
function sumBy(array, iteratee) {
  return (array && array.length)
    ? baseSum(array, baseIteratee(iteratee, 2))
    : 0;
}

module.exports = sumBy;
var baseSlice = require('./_baseSlice');

/**
 * Gets all but the first element of `array`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to query.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * _.tail([1, 2, 3]);
 * // => [2, 3]
 */
function tail(array) {
  var length = array == null ? 0 : array.length;
  return length ? baseSlice(array, 1, length) : [];
}

module.exports = tail;
var baseSlice = require('./_baseSlice'),
    toInteger = require('./toInteger');

/**
 * Creates a slice of `array` with `n` elements taken from the beginning.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to query.
 * @param {number} [n=1] The number of elements to take.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * _.take([1, 2, 3]);
 * // => [1]
 *
 * _.take([1, 2, 3], 2);
 * // => [1, 2]
 *
 * _.take([1, 2, 3], 5);
 * // => [1, 2, 3]
 *
 * _.take([1, 2, 3], 0);
 * // => []
 */
function take(array, n, guard) {
  if (!(array && array.length)) {
    return [];
  }
  n = (guard || n === undefined) ? 1 : toInteger(n);
  return baseSlice(array, 0, n < 0 ? 0 : n);
}

module.exports = take;
var baseSlice = require('./_baseSlice'),
    toInteger = require('./toInteger');

/**
 * Creates a slice of `array` with `n` elements taken from the end.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to query.
 * @param {number} [n=1] The number of elements to take.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * _.takeRight([1, 2, 3]);
 * // => [3]
 *
 * _.takeRight([1, 2, 3], 2);
 * // => [2, 3]
 *
 * _.takeRight([1, 2, 3], 5);
 * // => [1, 2, 3]
 *
 * _.takeRight([1, 2, 3], 0);
 * // => []
 */
function takeRight(array, n, guard) {
  var length = array == null ? 0 : array.length;
  if (!length) {
    return [];
  }
  n = (guard || n === undefined) ? 1 : toInteger(n);
  n = length - n;
  return baseSlice(array, n < 0 ? 0 : n, length);
}

module.exports = takeRight;
var baseIteratee = require('./_baseIteratee'),
    baseWhile = require('./_baseWhile');

/**
 * Creates a slice of `array` with elements taken from the end. Elements are
 * taken until `predicate` returns falsey. The predicate is invoked with
 * three arguments: (value, index, array).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to query.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * var users = [
 *   { 'user': 'barney',  'active': true },
 *   { 'user': 'fred',    'active': false },
 *   { 'user': 'pebbles', 'active': false }
 * ];
 *
 * _.takeRightWhile(users, function(o) { return !o.active; });
 * // => objects for ['fred', 'pebbles']
 *
 * // The `_.matches` iteratee shorthand.
 * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
 * // => objects for ['pebbles']
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.takeRightWhile(users, ['active', false]);
 * // => objects for ['fred', 'pebbles']
 *
 * // The `_.property` iteratee shorthand.
 * _.takeRightWhile(users, 'active');
 * // => []
 */
function takeRightWhile(array, predicate) {
  return (array && array.length)
    ? baseWhile(array, baseIteratee(predicate, 3), false, true)
    : [];
}

module.exports = takeRightWhile;
var baseIteratee = require('./_baseIteratee'),
    baseWhile = require('./_baseWhile');

/**
 * Creates a slice of `array` with elements taken from the beginning. Elements
 * are taken until `predicate` returns falsey. The predicate is invoked with
 * three arguments: (value, index, array).
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Array
 * @param {Array} array The array to query.
 * @param {Function} [predicate=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the slice of `array`.
 * @example
 *
 * var users = [
 *   { 'user': 'barney',  'active': false },
 *   { 'user': 'fred',    'active': false },
 *   { 'user': 'pebbles', 'active': true }
 * ];
 *
 * _.takeWhile(users, function(o) { return !o.active; });
 * // => objects for ['barney', 'fred']
 *
 * // The `_.matches` iteratee shorthand.
 * _.takeWhile(users, { 'user': 'barney', 'active': false });
 * // => objects for ['barney']
 *
 * // The `_.matchesProperty` iteratee shorthand.
 * _.takeWhile(users, ['active', false]);
 * // => objects for ['barney', 'fred']
 *
 * // The `_.property` iteratee shorthand.
 * _.takeWhile(users, 'active');
 * // => []
 */
function takeWhile(array, predicate) {
  return (array && array.length)
    ? baseWhile(array, baseIteratee(predicate, 3))
    : [];
}

module.exports = takeWhile;
/**
 * This method invokes `interceptor` and returns `value`. The interceptor
 * is invoked with one argument; (value). The purpose of this method is to
 * "tap into" a method chain sequence in order to modify intermediate results.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Seq
 * @param {*} value The value to provide to `interceptor`.
 * @param {Function} interceptor The function to invoke.
 * @returns {*} Returns `value`.
 * @example
 *
 * _([1, 2, 3])
 *  .tap(function(array) {
 *    // Mutate input array.
 *    array.pop();
 *  })
 *  .reverse()
 *  .value();
 * // => [2, 1]
 */
function tap(value, interceptor) {
  interceptor(value);
  return value;
}

module.exports = tap;
var assignInWith = require('./assignInWith'),
    attempt = require('./attempt'),
    baseValues = require('./_baseValues'),
    customDefaultsAssignIn = require('./_customDefaultsAssignIn'),
    escapeStringChar = require('./_escapeStringChar'),
    isError = require('./isError'),
    isIterateeCall = require('./_isIterateeCall'),
    keys = require('./keys'),
    reInterpolate = require('./_reInterpolate'),
    templateSettings = require('./templateSettings'),
    toString = require('./toString');

/** Error message constants. */
var INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';

/** Used to match empty string literals in compiled template source. */
var reEmptyStringLeading = /\b__p \+= '';/g,
    reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
    reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;

/**
 * Used to validate the `validate` option in `_.template` variable.
 *
 * Forbids characters which could potentially change the meaning of the function argument definition:
 * - "()," (modification of function parameters)
 * - "=" (default value)
 * - "[]{}" (destructuring of function parameters)
 * - "/" (beginning of a comment)
 * - whitespace
 */
var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;

/**
 * Used to match
 * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
 */
var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;

/** Used to ensure capturing order of template delimiters. */
var reNoMatch = /($^)/;

/** Used to match unescaped characters in compiled string literals. */
var reUnescapedString = /['\n\r\u2028\u2029\\]/g;

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Creates a compiled template function that can interpolate data properties
 * in "interpolate" delimiters, HTML-escape interpolated data properties in
 * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
 * properties may be accessed as free variables in the template. If a setting
 * object is given, it takes precedence over `_.templateSettings` values.
 *
 * **Note:** In the development build `_.template` utilizes
 * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
 * for easier debugging.
 *
 * For more information on precompiling templates see
 * [lodash's custom builds documentation](https://lodash.com/custom-builds).
 *
 * For more information on Chrome extension sandboxes see
 * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category String
 * @param {string} [string=''] The template string.
 * @param {Object} [options={}] The options object.
 * @param {RegExp} [options.escape=_.templateSettings.escape]
 *  The HTML "escape" delimiter.
 * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
 *  The "evaluate" delimiter.
 * @param {Object} [options.imports=_.templateSettings.imports]
 *  An object to import into the template as free variables.
 * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
 *  The "interpolate" delimiter.
 * @param {string} [options.sourceURL='templateSources[n]']
 *  The sourceURL of the compiled template.
 * @param {string} [options.variable='obj']
 *  The data object variable name.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Function} Returns the compiled template function.
 * @example
 *
 * // Use the "interpolate" delimiter to create a compiled template.
 * var compiled = _.template('hello <%= user %>!');
 * compiled({ 'user': 'fred' });
 * // => 'hello fred!'
 *
 * // Use the HTML "escape" delimiter to escape data property values.
 * var compiled = _.template('<b><%- value %></b>');
 * compiled({ 'value': '<script>' });
 * // => '<b>&lt;script&gt;</b>'
 *
 * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
 * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
 * compiled({ 'users': ['fred', 'barney'] });
 * // => '<li>fred</li><li>barney</li>'
 *
 * // Use the internal `print` function in "evaluate" delimiters.
 * var compiled = _.template('<% print("hello " + user); %>!');
 * compiled({ 'user': 'barney' });
 * // => 'hello barney!'
 *
 * // Use the ES template literal delimiter as an "interpolate" delimiter.
 * // Disable support by replacing the "interpolate" delimiter.
 * var compiled = _.template('hello ${ user }!');
 * compiled({ 'user': 'pebbles' });
 * // => 'hello pebbles!'
 *
 * // Use backslashes to treat delimiters as plain text.
 * var compiled = _.template('<%= "\\<%- value %\\>" %>');
 * compiled({ 'value': 'ignored' });
 * // => '<%- value %>'
 *
 * // Use the `imports` option to import `jQuery` as `jq`.
 * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
 * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
 * compiled({ 'users': ['fred', 'barney'] });
 * // => '<li>fred</li><li>barney</li>'
 *
 * // Use the `sourceURL` option to specify a custom sourceURL for the template.
 * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
 * compiled(data);
 * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
 *
 * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
 * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
 * compiled.source;
 * // => function(data) {
 * //   var __t, __p = '';
 * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
 * //   return __p;
 * // }
 *
 * // Use custom template delimiters.
 * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
 * var compiled = _.template('hello {{ user }}!');
 * compiled({ 'user': 'mustache' });
 * // => 'hello mustache!'
 *
 * // Use the `source` property to inline compiled templates for meaningful
 * // line numbers in error messages and stack traces.
 * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
 *   var JST = {\
 *     "main": ' + _.template(mainText).source + '\
 *   };\
 * ');
 */
function template(string, options, guard) {
  // Based on John Resig's `tmpl` implementation
  // (http://ejohn.org/blog/javascript-micro-templating/)
  // and Laura Doktorova's doT.js (https://github.com/olado/doT).
  var settings = templateSettings.imports._.templateSettings || templateSettings;

  if (guard && isIterateeCall(string, options, guard)) {
    options = undefined;
  }
  string = toString(string);
  options = assignInWith({}, options, settings, customDefaultsAssignIn);

  var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
      importsKeys = keys(imports),
      importsValues = baseValues(imports, importsKeys);

  var isEscaping,
      isEvaluating,
      index = 0,
      interpolate = options.interpolate || reNoMatch,
      source = "__p += '";

  // Compile the regexp to match each delimiter.
  var reDelimiters = RegExp(
    (options.escape || reNoMatch).source + '|' +
    interpolate.source + '|' +
    (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
    (options.evaluate || reNoMatch).source + '|$'
  , 'g');

  // Use a sourceURL for easier debugging.
  // The sourceURL gets injected into the source that's eval-ed, so be careful
  // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
  // and escape the comment, thus injecting code that gets evaled.
  var sourceURL = hasOwnProperty.call(options, 'sourceURL')
    ? ('//# sourceURL=' +
       (options.sourceURL + '').replace(/\s/g, ' ') +
       '\n')
    : '';

  string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
    interpolateValue || (interpolateValue = esTemplateValue);

    // Escape characters that can't be included in string literals.
    source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);

    // Replace delimiters with snippets.
    if (escapeValue) {
      isEscaping = true;
      source += "' +\n__e(" + escapeValue + ") +\n'";
    }
    if (evaluateValue) {
      isEvaluating = true;
      source += "';\n" + evaluateValue + ";\n__p += '";
    }
    if (interpolateValue) {
      source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
    }
    index = offset + match.length;

    // The JS engine embedded in Adobe products needs `match` returned in
    // order to produce the correct `offset` value.
    return match;
  });

  source += "';\n";

  // If `variable` is not specified wrap a with-statement around the generated
  // code to add the data object to the top of the scope chain.
  var variable = hasOwnProperty.call(options, 'variable') && options.variable;
  if (!variable) {
    source = 'with (obj) {\n' + source + '\n}\n';
  }
  // Throw an error if a forbidden character was found in `variable`, to prevent
  // potential command injection attacks.
  else if (reForbiddenIdentifierChars.test(variable)) {
    throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
  }

  // Cleanup code by stripping empty strings.
  source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
    .replace(reEmptyStringMiddle, '$1')
    .replace(reEmptyStringTrailing, '$1;');

  // Frame code as the function body.
  source = 'function(' + (variable || 'obj') + ') {\n' +
    (variable
      ? ''
      : 'obj || (obj = {});\n'
    ) +
    "var __t, __p = ''" +
    (isEscaping
       ? ', __e = _.escape'
       : ''
    ) +
    (isEvaluating
      ? ', __j = Array.prototype.join;\n' +
        "function print() { __p += __j.call(arguments, '') }\n"
      : ';\n'
    ) +
    source +
    'return __p\n}';

  var result = attempt(function() {
    return Function(importsKeys, sourceURL + 'return ' + source)
      .apply(undefined, importsValues);
  });

  // Provide the compiled function's source by its `toString` method or
  // the `source` property as a convenience for inlining compiled templates.
  result.source = source;
  if (isError(result)) {
    throw result;
  }
  return result;
}

module.exports = template;
var escape = require('./escape'),
    reEscape = require('./_reEscape'),
    reEvaluate = require('./_reEvaluate'),
    reInterpolate = require('./_reInterpolate');

/**
 * By default, the template delimiters used by lodash are like those in
 * embedded Ruby (ERB) as well as ES2015 template strings. Change the
 * following template settings to use alternative delimiters.
 *
 * @static
 * @memberOf _
 * @type {Object}
 */
var templateSettings = {

  /**
   * Used to detect `data` property values to be HTML-escaped.
   *
   * @memberOf _.templateSettings
   * @type {RegExp}
   */
  'escape': reEscape,

  /**
   * Used to detect code to be evaluated.
   *
   * @memberOf _.templateSettings
   * @type {RegExp}
   */
  'evaluate': reEvaluate,

  /**
   * Used to detect `data` property values to inject.
   *
   * @memberOf _.templateSettings
   * @type {RegExp}
   */
  'interpolate': reInterpolate,

  /**
   * Used to reference the data object in the template text.
   *
   * @memberOf _.templateSettings
   * @type {string}
   */
  'variable': '',

  /**
   * Used to import variables into the compiled template.
   *
   * @memberOf _.templateSettings
   * @type {Object}
   */
  'imports': {

    /**
     * A reference to the `lodash` function.
     *
     * @memberOf _.templateSettings.imports
     * @type {Function}
     */
    '_': { 'escape': escape }
  }
};

module.exports = templateSettings;
var debounce = require('./debounce'),
    isObject = require('./isObject');

/** Error message constants. */
var FUNC_ERROR_TEXT = 'Expected a function';

/**
 * Creates a throttled function that only invokes `func` at most once per
 * every `wait` milliseconds. The throttled function comes with a `cancel`
 * method to cancel delayed `func` invocations and a `flush` method to
 * immediately invoke them. Provide `options` to indicate whether `func`
 * should be invoked on the leading and/or trailing edge of the `wait`
 * timeout. The `func` is invoked with the last arguments provided to the
 * throttled function. Subsequent calls to the throttled function return the
 * result of the last `func` invocation.
 *
 * **Note:** If `leading` and `trailing` options are `true`, `func` is
 * invoked on the trailing edge of the timeout only if the throttled function
 * is invoked more than once during the `wait` timeout.
 *
 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
 *
 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
 * for details over the differences between `_.throttle` and `_.debounce`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {Function} func The function to throttle.
 * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
 * @param {Object} [options={}] The options object.
 * @param {boolean} [options.leading=true]
 *  Specify invoking on the leading edge of the timeout.
 * @param {boolean} [options.trailing=true]
 *  Specify invoking on the trailing edge of the timeout.
 * @returns {Function} Returns the new throttled function.
 * @example
 *
 * // Avoid excessively updating the position while scrolling.
 * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
 *
 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
 * jQuery(element).on('click', throttled);
 *
 * // Cancel the trailing throttled invocation.
 * jQuery(window).on('popstate', throttled.cancel);
 */
function throttle(func, wait, options) {
  var leading = true,
      trailing = true;

  if (typeof func != 'function') {
    throw new TypeError(FUNC_ERROR_TEXT);
  }
  if (isObject(options)) {
    leading = 'leading' in options ? !!options.leading : leading;
    trailing = 'trailing' in options ? !!options.trailing : trailing;
  }
  return debounce(func, wait, {
    'leading': leading,
    'maxWait': wait,
    'trailing': trailing
  });
}

module.exports = throttle;
/**
 * This method is like `_.tap` except that it returns the result of `interceptor`.
 * The purpose of this method is to "pass thru" values replacing intermediate
 * results in a method chain sequence.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Seq
 * @param {*} value The value to provide to `interceptor`.
 * @param {Function} interceptor The function to invoke.
 * @returns {*} Returns the result of `interceptor`.
 * @example
 *
 * _('  abc  ')
 *  .chain()
 *  .trim()
 *  .thru(function(value) {
 *    return [value];
 *  })
 *  .value();
 * // => ['abc']
 */
function thru(value, interceptor) {
  return interceptor(value);
}

module.exports = thru;
var baseTimes = require('./_baseTimes'),
    castFunction = require('./_castFunction'),
    toInteger = require('./toInteger');

/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/** Used as references for the maximum length and index of an array. */
var MAX_ARRAY_LENGTH = 4294967295;

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMin = Math.min;

/**
 * Invokes the iteratee `n` times, returning an array of the results of
 * each invocation. The iteratee is invoked with one argument; (index).
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Util
 * @param {number} n The number of times to invoke `iteratee`.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @returns {Array} Returns the array of results.
 * @example
 *
 * _.times(3, String);
 * // => ['0', '1', '2']
 *
 *  _.times(4, _.constant(0));
 * // => [0, 0, 0, 0]
 */
function times(n, iteratee) {
  n = toInteger(n);
  if (n < 1 || n > MAX_SAFE_INTEGER) {
    return [];
  }
  var index = MAX_ARRAY_LENGTH,
      length = nativeMin(n, MAX_ARRAY_LENGTH);

  iteratee = castFunction(iteratee);
  n -= MAX_ARRAY_LENGTH;

  var result = baseTimes(length, iteratee);
  while (++index < n) {
    iteratee(index);
  }
  return result;
}

module.exports = times;
var Symbol = require('./_Symbol'),
    copyArray = require('./_copyArray'),
    getTag = require('./_getTag'),
    isArrayLike = require('./isArrayLike'),
    isString = require('./isString'),
    iteratorToArray = require('./_iteratorToArray'),
    mapToArray = require('./_mapToArray'),
    setToArray = require('./_setToArray'),
    stringToArray = require('./_stringToArray'),
    values = require('./values');

/** `Object#toString` result references. */
var mapTag = '[object Map]',
    setTag = '[object Set]';

/** Built-in value references. */
var symIterator = Symbol ? Symbol.iterator : undefined;

/**
 * Converts `value` to an array.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {Array} Returns the converted array.
 * @example
 *
 * _.toArray({ 'a': 1, 'b': 2 });
 * // => [1, 2]
 *
 * _.toArray('abc');
 * // => ['a', 'b', 'c']
 *
 * _.toArray(1);
 * // => []
 *
 * _.toArray(null);
 * // => []
 */
function toArray(value) {
  if (!value) {
    return [];
  }
  if (isArrayLike(value)) {
    return isString(value) ? stringToArray(value) : copyArray(value);
  }
  if (symIterator && value[symIterator]) {
    return iteratorToArray(value[symIterator]());
  }
  var tag = getTag(value),
      func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);

  return func(value);
}

module.exports = toArray;
var toNumber = require('./toNumber');

/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0,
    MAX_INTEGER = 1.7976931348623157e+308;

/**
 * Converts `value` to a finite number.
 *
 * @static
 * @memberOf _
 * @since 4.12.0
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {number} Returns the converted number.
 * @example
 *
 * _.toFinite(3.2);
 * // => 3.2
 *
 * _.toFinite(Number.MIN_VALUE);
 * // => 5e-324
 *
 * _.toFinite(Infinity);
 * // => 1.7976931348623157e+308
 *
 * _.toFinite('3.2');
 * // => 3.2
 */
function toFinite(value) {
  if (!value) {
    return value === 0 ? value : 0;
  }
  value = toNumber(value);
  if (value === INFINITY || value === -INFINITY) {
    var sign = (value < 0 ? -1 : 1);
    return sign * MAX_INTEGER;
  }
  return value === value ? value : 0;
}

module.exports = toFinite;
var toFinite = require('./toFinite');

/**
 * Converts `value` to an integer.
 *
 * **Note:** This method is loosely based on
 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {number} Returns the converted integer.
 * @example
 *
 * _.toInteger(3.2);
 * // => 3
 *
 * _.toInteger(Number.MIN_VALUE);
 * // => 0
 *
 * _.toInteger(Infinity);
 * // => 1.7976931348623157e+308
 *
 * _.toInteger('3.2');
 * // => 3
 */
function toInteger(value) {
  var result = toFinite(value),
      remainder = result % 1;

  return result === result ? (remainder ? result - remainder : result) : 0;
}

module.exports = toInteger;
/**
 * Enables the wrapper to be iterable.
 *
 * @name Symbol.iterator
 * @memberOf _
 * @since 4.0.0
 * @category Seq
 * @returns {Object} Returns the wrapper object.
 * @example
 *
 * var wrapped = _([1, 2]);
 *
 * wrapped[Symbol.iterator]() === wrapped;
 * // => true
 *
 * Array.from(wrapped);
 * // => [1, 2]
 */
function wrapperToIterator() {
  return this;
}

module.exports = wrapperToIterator;
module.exports = require('./wrapperValue');
var baseClamp = require('./_baseClamp'),
    toInteger = require('./toInteger');

/** Used as references for the maximum length and index of an array. */
var MAX_ARRAY_LENGTH = 4294967295;

/**
 * Converts `value` to an integer suitable for use as the length of an
 * array-like object.
 *
 * **Note:** This method is based on
 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {number} Returns the converted integer.
 * @example
 *
 * _.toLength(3.2);
 * // => 3
 *
 * _.toLength(Number.MIN_VALUE);
 * // => 0
 *
 * _.toLength(Infinity);
 * // => 4294967295
 *
 * _.toLength('3.2');
 * // => 3
 */
function toLength(value) {
  return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
}

module.exports = toLength;
var toString = require('./toString');

/**
 * Converts `string`, as a whole, to lower case just like
 * [String#toLowerCase](https://mdn.io/toLowerCase).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the lower cased string.
 * @example
 *
 * _.toLower('--Foo-Bar--');
 * // => '--foo-bar--'
 *
 * _.toLower('fooBar');
 * // => 'foobar'
 *
 * _.toLower('__FOO_BAR__');
 * // => '__foo_bar__'
 */
function toLower(value) {
  return toString(value).toLowerCase();
}

module.exports = toLower;
var baseTrim = require('./_baseTrim'),
    isObject = require('./isObject'),
    isSymbol = require('./isSymbol');

/** Used as references for various `Number` constants. */
var NAN = 0 / 0;

/** Used to detect bad signed hexadecimal string values. */
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

/** Used to detect binary string values. */
var reIsBinary = /^0b[01]+$/i;

/** Used to detect octal string values. */
var reIsOctal = /^0o[0-7]+$/i;

/** Built-in method references without a dependency on `root`. */
var freeParseInt = parseInt;

/**
 * Converts `value` to a number.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to process.
 * @returns {number} Returns the number.
 * @example
 *
 * _.toNumber(3.2);
 * // => 3.2
 *
 * _.toNumber(Number.MIN_VALUE);
 * // => 5e-324
 *
 * _.toNumber(Infinity);
 * // => Infinity
 *
 * _.toNumber('3.2');
 * // => 3.2
 */
function toNumber(value) {
  if (typeof value == 'number') {
    return value;
  }
  if (isSymbol(value)) {
    return NAN;
  }
  if (isObject(value)) {
    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
    value = isObject(other) ? (other + '') : other;
  }
  if (typeof value != 'string') {
    return value === 0 ? value : +value;
  }
  value = baseTrim(value);
  var isBinary = reIsBinary.test(value);
  return (isBinary || reIsOctal.test(value))
    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
    : (reIsBadHex.test(value) ? NAN : +value);
}

module.exports = toNumber;
var createToPairs = require('./_createToPairs'),
    keys = require('./keys');

/**
 * Creates an array of own enumerable string keyed-value pairs for `object`
 * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
 * entries are returned.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @alias entries
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the key-value pairs.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.toPairs(new Foo);
 * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
 */
var toPairs = createToPairs(keys);

module.exports = toPairs;
var createToPairs = require('./_createToPairs'),
    keysIn = require('./keysIn');

/**
 * Creates an array of own and inherited enumerable string keyed-value pairs
 * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
 * or set, its entries are returned.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @alias entriesIn
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the key-value pairs.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.toPairsIn(new Foo);
 * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
 */
var toPairsIn = createToPairs(keysIn);

module.exports = toPairsIn;
var arrayMap = require('./_arrayMap'),
    copyArray = require('./_copyArray'),
    isArray = require('./isArray'),
    isSymbol = require('./isSymbol'),
    stringToPath = require('./_stringToPath'),
    toKey = require('./_toKey'),
    toString = require('./toString');

/**
 * Converts `value` to a property path array.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Util
 * @param {*} value The value to convert.
 * @returns {Array} Returns the new property path array.
 * @example
 *
 * _.toPath('a.b.c');
 * // => ['a', 'b', 'c']
 *
 * _.toPath('a[0].b.c');
 * // => ['a', '0', 'b', 'c']
 */
function toPath(value) {
  if (isArray(value)) {
    return arrayMap(value, toKey);
  }
  return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
}

module.exports = toPath;
var copyObject = require('./_copyObject'),
    keysIn = require('./keysIn');

/**
 * Converts `value` to a plain object flattening inherited enumerable string
 * keyed properties of `value` to own properties of the plain object.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {Object} Returns the converted plain object.
 * @example
 *
 * function Foo() {
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.assign({ 'a': 1 }, new Foo);
 * // => { 'a': 1, 'b': 2 }
 *
 * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
 * // => { 'a': 1, 'b': 2, 'c': 3 }
 */
function toPlainObject(value) {
  return copyObject(value, keysIn(value));
}

module.exports = toPlainObject;
var baseClamp = require('./_baseClamp'),
    toInteger = require('./toInteger');

/** Used as references for various `Number` constants. */
var MAX_SAFE_INTEGER = 9007199254740991;

/**
 * Converts `value` to a safe integer. A safe integer can be compared and
 * represented correctly.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {number} Returns the converted integer.
 * @example
 *
 * _.toSafeInteger(3.2);
 * // => 3
 *
 * _.toSafeInteger(Number.MIN_VALUE);
 * // => 0
 *
 * _.toSafeInteger(Infinity);
 * // => 9007199254740991
 *
 * _.toSafeInteger('3.2');
 * // => 3
 */
function toSafeInteger(value) {
  return value
    ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
    : (value === 0 ? value : 0);
}

module.exports = toSafeInteger;
var baseToString = require('./_baseToString');

/**
 * Converts `value` to a string. An empty string is returned for `null`
 * and `undefined` values. The sign of `-0` is preserved.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {string} Returns the converted string.
 * @example
 *
 * _.toString(null);
 * // => ''
 *
 * _.toString(-0);
 * // => '-0'
 *
 * _.toString([1, 2, 3]);
 * // => '1,2,3'
 */
function toString(value) {
  return value == null ? '' : baseToString(value);
}

module.exports = toString;
var toString = require('./toString');

/**
 * Converts `string`, as a whole, to upper case just like
 * [String#toUpperCase](https://mdn.io/toUpperCase).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the upper cased string.
 * @example
 *
 * _.toUpper('--foo-bar--');
 * // => '--FOO-BAR--'
 *
 * _.toUpper('fooBar');
 * // => 'FOOBAR'
 *
 * _.toUpper('__foo_bar__');
 * // => '__FOO_BAR__'
 */
function toUpper(value) {
  return toString(value).toUpperCase();
}

module.exports = toUpper;
var arrayEach = require('./_arrayEach'),
    baseCreate = require('./_baseCreate'),
    baseForOwn = require('./_baseForOwn'),
    baseIteratee = require('./_baseIteratee'),
    getPrototype = require('./_getPrototype'),
    isArray = require('./isArray'),
    isBuffer = require('./isBuffer'),
    isFunction = require('./isFunction'),
    isObject = require('./isObject'),
    isTypedArray = require('./isTypedArray');

/**
 * An alternative to `_.reduce`; this method transforms `object` to a new
 * `accumulator` object which is the result of running each of its own
 * enumerable string keyed properties thru `iteratee`, with each invocation
 * potentially mutating the `accumulator` object. If `accumulator` is not
 * provided, a new object with the same `[[Prototype]]` will be used. The
 * iteratee is invoked with four arguments: (accumulator, value, key, object).
 * Iteratee functions may exit iteration early by explicitly returning `false`.
 *
 * @static
 * @memberOf _
 * @since 1.3.0
 * @category Object
 * @param {Object} object The object to iterate over.
 * @param {Function} [iteratee=_.identity] The function invoked per iteration.
 * @param {*} [accumulator] The custom accumulator value.
 * @returns {*} Returns the accumulated value.
 * @example
 *
 * _.transform([2, 3, 4], function(result, n) {
 *   result.push(n *= n);
 *   return n % 2 == 0;
 * }, []);
 * // => [4, 9]
 *
 * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
 *   (result[value] || (result[value] = [])).push(key);
 * }, {});
 * // => { '1': ['a', 'c'], '2': ['b'] }
 */
function transform(object, iteratee, accumulator) {
  var isArr = isArray(object),
      isArrLike = isArr || isBuffer(object) || isTypedArray(object);

  iteratee = baseIteratee(iteratee, 4);
  if (accumulator == null) {
    var Ctor = object && object.constructor;
    if (isArrLike) {
      accumulator = isArr ? new Ctor : [];
    }
    else if (isObject(object)) {
      accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
    }
    else {
      accumulator = {};
    }
  }
  (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
    return iteratee(accumulator, value, index, object);
  });
  return accumulator;
}

module.exports = transform;
var baseToString = require('./_baseToString'),
    baseTrim = require('./_baseTrim'),
    castSlice = require('./_castSlice'),
    charsEndIndex = require('./_charsEndIndex'),
    charsStartIndex = require('./_charsStartIndex'),
    stringToArray = require('./_stringToArray'),
    toString = require('./toString');

/**
 * Removes leading and trailing whitespace or specified characters from `string`.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to trim.
 * @param {string} [chars=whitespace] The characters to trim.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {string} Returns the trimmed string.
 * @example
 *
 * _.trim('  abc  ');
 * // => 'abc'
 *
 * _.trim('-_-abc-_-', '_-');
 * // => 'abc'
 *
 * _.map(['  foo  ', '  bar  '], _.trim);
 * // => ['foo', 'bar']
 */
function trim(string, chars, guard) {
  string = toString(string);
  if (string && (guard || chars === undefined)) {
    return baseTrim(string);
  }
  if (!string || !(chars = baseToString(chars))) {
    return string;
  }
  var strSymbols = stringToArray(string),
      chrSymbols = stringToArray(chars),
      start = charsStartIndex(strSymbols, chrSymbols),
      end = charsEndIndex(strSymbols, chrSymbols) + 1;

  return castSlice(strSymbols, start, end).join('');
}

module.exports = trim;
var baseToString = require('./_baseToString'),
    castSlice = require('./_castSlice'),
    charsEndIndex = require('./_charsEndIndex'),
    stringToArray = require('./_stringToArray'),
    toString = require('./toString'),
    trimmedEndIndex = require('./_trimmedEndIndex');

/**
 * Removes trailing whitespace or specified characters from `string`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to trim.
 * @param {string} [chars=whitespace] The characters to trim.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {string} Returns the trimmed string.
 * @example
 *
 * _.trimEnd('  abc  ');
 * // => '  abc'
 *
 * _.trimEnd('-_-abc-_-', '_-');
 * // => '-_-abc'
 */
function trimEnd(string, chars, guard) {
  string = toString(string);
  if (string && (guard || chars === undefined)) {
    return string.slice(0, trimmedEndIndex(string) + 1);
  }
  if (!string || !(chars = baseToString(chars))) {
    return string;
  }
  var strSymbols = stringToArray(string),
      end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;

  return castSlice(strSymbols, 0, end).join('');
}

module.exports = trimEnd;
var baseToString = require('./_baseToString'),
    castSlice = require('./_castSlice'),
    charsStartIndex = require('./_charsStartIndex'),
    stringToArray = require('./_stringToArray'),
    toString = require('./toString');

/** Used to match leading whitespace. */
var reTrimStart = /^\s+/;

/**
 * Removes leading whitespace or specified characters from `string`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to trim.
 * @param {string} [chars=whitespace] The characters to trim.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {string} Returns the trimmed string.
 * @example
 *
 * _.trimStart('  abc  ');
 * // => 'abc  '
 *
 * _.trimStart('-_-abc-_-', '_-');
 * // => 'abc-_-'
 */
function trimStart(string, chars, guard) {
  string = toString(string);
  if (string && (guard || chars === undefined)) {
    return string.replace(reTrimStart, '');
  }
  if (!string || !(chars = baseToString(chars))) {
    return string;
  }
  var strSymbols = stringToArray(string),
      start = charsStartIndex(strSymbols, stringToArray(chars));

  return castSlice(strSymbols, start).join('');
}

module.exports = trimStart;
var baseToString = require('./_baseToString'),
    castSlice = require('./_castSlice'),
    hasUnicode = require('./_hasUnicode'),
    isObject = require('./isObject'),
    isRegExp = require('./isRegExp'),
    stringSize = require('./_stringSize'),
    stringToArray = require('./_stringToArray'),
    toInteger = require('./toInteger'),
    toString = require('./toString');

/** Used as default options for `_.truncate`. */
var DEFAULT_TRUNC_LENGTH = 30,
    DEFAULT_TRUNC_OMISSION = '...';

/** Used to match `RegExp` flags from their coerced string values. */
var reFlags = /\w*$/;

/**
 * Truncates `string` if it's longer than the given maximum string length.
 * The last characters of the truncated string are replaced with the omission
 * string which defaults to "...".
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to truncate.
 * @param {Object} [options={}] The options object.
 * @param {number} [options.length=30] The maximum string length.
 * @param {string} [options.omission='...'] The string to indicate text is omitted.
 * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
 * @returns {string} Returns the truncated string.
 * @example
 *
 * _.truncate('hi-diddly-ho there, neighborino');
 * // => 'hi-diddly-ho there, neighbo...'
 *
 * _.truncate('hi-diddly-ho there, neighborino', {
 *   'length': 24,
 *   'separator': ' '
 * });
 * // => 'hi-diddly-ho there,...'
 *
 * _.truncate('hi-diddly-ho there, neighborino', {
 *   'length': 24,
 *   'separator': /,? +/
 * });
 * // => 'hi-diddly-ho there...'
 *
 * _.truncate('hi-diddly-ho there, neighborino', {
 *   'omission': ' [...]'
 * });
 * // => 'hi-diddly-ho there, neig [...]'
 */
function truncate(string, options) {
  var length = DEFAULT_TRUNC_LENGTH,
      omission = DEFAULT_TRUNC_OMISSION;

  if (isObject(options)) {
    var separator = 'separator' in options ? options.separator : separator;
    length = 'length' in options ? toInteger(options.length) : length;
    omission = 'omission' in options ? baseToString(options.omission) : omission;
  }
  string = toString(string);

  var strLength = string.length;
  if (hasUnicode(string)) {
    var strSymbols = stringToArray(string);
    strLength = strSymbols.length;
  }
  if (length >= strLength) {
    return string;
  }
  var end = length - stringSize(omission);
  if (end < 1) {
    return omission;
  }
  var result = strSymbols
    ? castSlice(strSymbols, 0, end).join('')
    : string.slice(0, end);

  if (separator === undefined) {
    return result + omission;
  }
  if (strSymbols) {
    end += (result.length - end);
  }
  if (isRegExp(separator)) {
    if (string.slice(end).search(separator)) {
      var match,
          substring = result;

      if (!separator.global) {
        separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
      }
      separator.lastIndex = 0;
      while ((match = separator.exec(substring))) {
        var newEnd = match.index;
      }
      result = result.slice(0, newEnd === undefined ? end : newEnd);
    }
  } else if (string.indexOf(baseToString(separator), end) != end) {
    var index = result.lastIndexOf(separator);
    if (index > -1) {
      result = result.slice(0, index);
    }
  }
  return result + omission;
}

module.exports = truncate;
var ary = require('./ary');

/**
 * Creates a function that accepts up to one argument, ignoring any
 * additional arguments.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Function
 * @param {Function} func The function to cap arguments for.
 * @returns {Function} Returns the new capped function.
 * @example
 *
 * _.map(['6', '8', '10'], _.unary(parseInt));
 * // => [6, 8, 10]
 */
function unary(func) {
  return ary(func, 1);
}

module.exports = unary;
var toString = require('./toString'),
    unescapeHtmlChar = require('./_unescapeHtmlChar');

/** Used to match HTML entities and HTML characters. */
var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
    reHasEscapedHtml = RegExp(reEscapedHtml.source);

/**
 * The inverse of `_.escape`; this method converts the HTML entities
 * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
 * their corresponding characters.
 *
 * **Note:** No other HTML entities are unescaped. To unescape additional
 * HTML entities use a third-party library like [_he_](https://mths.be/he).
 *
 * @static
 * @memberOf _
 * @since 0.6.0
 * @category String
 * @param {string} [string=''] The string to unescape.
 * @returns {string} Returns the unescaped string.
 * @example
 *
 * _.unescape('fred, barney, &amp; pebbles');
 * // => 'fred, barney, & pebbles'
 */
function unescape(string) {
  string = toString(string);
  return (string && reHasEscapedHtml.test(string))
    ? string.replace(reEscapedHtml, unescapeHtmlChar)
    : string;
}

module.exports = unescape;
var baseFlatten = require('./_baseFlatten'),
    baseRest = require('./_baseRest'),
    baseUniq = require('./_baseUniq'),
    isArrayLikeObject = require('./isArrayLikeObject');

/**
 * Creates an array of unique values, in order, from all given arrays using
 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * for equality comparisons.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {...Array} [arrays] The arrays to inspect.
 * @returns {Array} Returns the new array of combined values.
 * @example
 *
 * _.union([2], [1, 2]);
 * // => [2, 1]
 */
var union = baseRest(function(arrays) {
  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
});

module.exports = union;
var baseFlatten = require('./_baseFlatten'),
    baseIteratee = require('./_baseIteratee'),
    baseRest = require('./_baseRest'),
    baseUniq = require('./_baseUniq'),
    isArrayLikeObject = require('./isArrayLikeObject'),
    last = require('./last');

/**
 * This method is like `_.union` except that it accepts `iteratee` which is
 * invoked for each element of each `arrays` to generate the criterion by
 * which uniqueness is computed. Result values are chosen from the first
 * array in which the value occurs. The iteratee is invoked with one argument:
 * (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {...Array} [arrays] The arrays to inspect.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {Array} Returns the new array of combined values.
 * @example
 *
 * _.unionBy([2.1], [1.2, 2.3], Math.floor);
 * // => [2.1, 1.2]
 *
 * // The `_.property` iteratee shorthand.
 * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
 * // => [{ 'x': 1 }, { 'x': 2 }]
 */
var unionBy = baseRest(function(arrays) {
  var iteratee = last(arrays);
  if (isArrayLikeObject(iteratee)) {
    iteratee = undefined;
  }
  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2));
});

module.exports = unionBy;
var baseFlatten = require('./_baseFlatten'),
    baseRest = require('./_baseRest'),
    baseUniq = require('./_baseUniq'),
    isArrayLikeObject = require('./isArrayLikeObject'),
    last = require('./last');

/**
 * This method is like `_.union` except that it accepts `comparator` which
 * is invoked to compare elements of `arrays`. Result values are chosen from
 * the first array in which the value occurs. The comparator is invoked
 * with two arguments: (arrVal, othVal).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {...Array} [arrays] The arrays to inspect.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns the new array of combined values.
 * @example
 *
 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
 *
 * _.unionWith(objects, others, _.isEqual);
 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
 */
var unionWith = baseRest(function(arrays) {
  var comparator = last(arrays);
  comparator = typeof comparator == 'function' ? comparator : undefined;
  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
});

module.exports = unionWith;
var baseUniq = require('./_baseUniq');

/**
 * Creates a duplicate-free version of an array, using
 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * for equality comparisons, in which only the first occurrence of each element
 * is kept. The order of result values is determined by the order they occur
 * in the array.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @returns {Array} Returns the new duplicate free array.
 * @example
 *
 * _.uniq([2, 1, 2]);
 * // => [2, 1]
 */
function uniq(array) {
  return (array && array.length) ? baseUniq(array) : [];
}

module.exports = uniq;
var baseIteratee = require('./_baseIteratee'),
    baseUniq = require('./_baseUniq');

/**
 * This method is like `_.uniq` except that it accepts `iteratee` which is
 * invoked for each element in `array` to generate the criterion by which
 * uniqueness is computed. The order of result values is determined by the
 * order they occur in the array. The iteratee is invoked with one argument:
 * (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {Array} Returns the new duplicate free array.
 * @example
 *
 * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
 * // => [2.1, 1.2]
 *
 * // The `_.property` iteratee shorthand.
 * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
 * // => [{ 'x': 1 }, { 'x': 2 }]
 */
function uniqBy(array, iteratee) {
  return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];
}

module.exports = uniqBy;
var toString = require('./toString');

/** Used to generate unique IDs. */
var idCounter = 0;

/**
 * Generates a unique ID. If `prefix` is given, the ID is appended to it.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Util
 * @param {string} [prefix=''] The value to prefix the ID with.
 * @returns {string} Returns the unique ID.
 * @example
 *
 * _.uniqueId('contact_');
 * // => 'contact_104'
 *
 * _.uniqueId();
 * // => '105'
 */
function uniqueId(prefix) {
  var id = ++idCounter;
  return toString(prefix) + id;
}

module.exports = uniqueId;
var baseUniq = require('./_baseUniq');

/**
 * This method is like `_.uniq` except that it accepts `comparator` which
 * is invoked to compare elements of `array`. The order of result values is
 * determined by the order they occur in the array.The comparator is invoked
 * with two arguments: (arrVal, othVal).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns the new duplicate free array.
 * @example
 *
 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
 *
 * _.uniqWith(objects, _.isEqual);
 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
 */
function uniqWith(array, comparator) {
  comparator = typeof comparator == 'function' ? comparator : undefined;
  return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
}

module.exports = uniqWith;
var baseUnset = require('./_baseUnset');

/**
 * Removes the property at `path` of `object`.
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Object
 * @param {Object} object The object to modify.
 * @param {Array|string} path The path of the property to unset.
 * @returns {boolean} Returns `true` if the property is deleted, else `false`.
 * @example
 *
 * var object = { 'a': [{ 'b': { 'c': 7 } }] };
 * _.unset(object, 'a[0].b.c');
 * // => true
 *
 * console.log(object);
 * // => { 'a': [{ 'b': {} }] };
 *
 * _.unset(object, ['a', '0', 'b', 'c']);
 * // => true
 *
 * console.log(object);
 * // => { 'a': [{ 'b': {} }] };
 */
function unset(object, path) {
  return object == null ? true : baseUnset(object, path);
}

module.exports = unset;
var arrayFilter = require('./_arrayFilter'),
    arrayMap = require('./_arrayMap'),
    baseProperty = require('./_baseProperty'),
    baseTimes = require('./_baseTimes'),
    isArrayLikeObject = require('./isArrayLikeObject');

/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;

/**
 * This method is like `_.zip` except that it accepts an array of grouped
 * elements and creates an array regrouping the elements to their pre-zip
 * configuration.
 *
 * @static
 * @memberOf _
 * @since 1.2.0
 * @category Array
 * @param {Array} array The array of grouped elements to process.
 * @returns {Array} Returns the new array of regrouped elements.
 * @example
 *
 * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
 * // => [['a', 1, true], ['b', 2, false]]
 *
 * _.unzip(zipped);
 * // => [['a', 'b'], [1, 2], [true, false]]
 */
function unzip(array) {
  if (!(array && array.length)) {
    return [];
  }
  var length = 0;
  array = arrayFilter(array, function(group) {
    if (isArrayLikeObject(group)) {
      length = nativeMax(group.length, length);
      return true;
    }
  });
  return baseTimes(length, function(index) {
    return arrayMap(array, baseProperty(index));
  });
}

module.exports = unzip;
var apply = require('./_apply'),
    arrayMap = require('./_arrayMap'),
    unzip = require('./unzip');

/**
 * This method is like `_.unzip` except that it accepts `iteratee` to specify
 * how regrouped values should be combined. The iteratee is invoked with the
 * elements of each group: (...group).
 *
 * @static
 * @memberOf _
 * @since 3.8.0
 * @category Array
 * @param {Array} array The array of grouped elements to process.
 * @param {Function} [iteratee=_.identity] The function to combine
 *  regrouped values.
 * @returns {Array} Returns the new array of regrouped elements.
 * @example
 *
 * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
 * // => [[1, 10, 100], [2, 20, 200]]
 *
 * _.unzipWith(zipped, _.add);
 * // => [3, 30, 300]
 */
function unzipWith(array, iteratee) {
  if (!(array && array.length)) {
    return [];
  }
  var result = unzip(array);
  if (iteratee == null) {
    return result;
  }
  return arrayMap(result, function(group) {
    return apply(iteratee, undefined, group);
  });
}

module.exports = unzipWith;
var baseUpdate = require('./_baseUpdate'),
    castFunction = require('./_castFunction');

/**
 * This method is like `_.set` except that accepts `updater` to produce the
 * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
 * is invoked with one argument: (value).
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 4.6.0
 * @category Object
 * @param {Object} object The object to modify.
 * @param {Array|string} path The path of the property to set.
 * @param {Function} updater The function to produce the updated value.
 * @returns {Object} Returns `object`.
 * @example
 *
 * var object = { 'a': [{ 'b': { 'c': 3 } }] };
 *
 * _.update(object, 'a[0].b.c', function(n) { return n * n; });
 * console.log(object.a[0].b.c);
 * // => 9
 *
 * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
 * console.log(object.x[0].y.z);
 * // => 0
 */
function update(object, path, updater) {
  return object == null ? object : baseUpdate(object, path, castFunction(updater));
}

module.exports = update;
var baseUpdate = require('./_baseUpdate'),
    castFunction = require('./_castFunction');

/**
 * This method is like `_.update` except that it accepts `customizer` which is
 * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
 * path creation is handled by the method instead. The `customizer` is invoked
 * with three arguments: (nsValue, key, nsObject).
 *
 * **Note:** This method mutates `object`.
 *
 * @static
 * @memberOf _
 * @since 4.6.0
 * @category Object
 * @param {Object} object The object to modify.
 * @param {Array|string} path The path of the property to set.
 * @param {Function} updater The function to produce the updated value.
 * @param {Function} [customizer] The function to customize assigned values.
 * @returns {Object} Returns `object`.
 * @example
 *
 * var object = {};
 *
 * _.updateWith(object, '[0][1]', _.constant('a'), Object);
 * // => { '0': { '1': 'a' } }
 */
function updateWith(object, path, updater, customizer) {
  customizer = typeof customizer == 'function' ? customizer : undefined;
  return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
}

module.exports = updateWith;
var createCompounder = require('./_createCompounder');

/**
 * Converts `string`, as space separated words, to upper case.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the upper cased string.
 * @example
 *
 * _.upperCase('--foo-bar');
 * // => 'FOO BAR'
 *
 * _.upperCase('fooBar');
 * // => 'FOO BAR'
 *
 * _.upperCase('__foo_bar__');
 * // => 'FOO BAR'
 */
var upperCase = createCompounder(function(result, word, index) {
  return result + (index ? ' ' : '') + word.toUpperCase();
});

module.exports = upperCase;
var createCaseFirst = require('./_createCaseFirst');

/**
 * Converts the first character of `string` to upper case.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category String
 * @param {string} [string=''] The string to convert.
 * @returns {string} Returns the converted string.
 * @example
 *
 * _.upperFirst('fred');
 * // => 'Fred'
 *
 * _.upperFirst('FRED');
 * // => 'FRED'
 */
var upperFirst = createCaseFirst('toUpperCase');

module.exports = upperFirst;
module.exports = {
  'attempt': require('./attempt'),
  'bindAll': require('./bindAll'),
  'cond': require('./cond'),
  'conforms': require('./conforms'),
  'constant': require('./constant'),
  'defaultTo': require('./defaultTo'),
  'flow': require('./flow'),
  'flowRight': require('./flowRight'),
  'identity': require('./identity'),
  'iteratee': require('./iteratee'),
  'matches': require('./matches'),
  'matchesProperty': require('./matchesProperty'),
  'method': require('./method'),
  'methodOf': require('./methodOf'),
  'mixin': require('./mixin'),
  'noop': require('./noop'),
  'nthArg': require('./nthArg'),
  'over': require('./over'),
  'overEvery': require('./overEvery'),
  'overSome': require('./overSome'),
  'property': require('./property'),
  'propertyOf': require('./propertyOf'),
  'range': require('./range'),
  'rangeRight': require('./rangeRight'),
  'stubArray': require('./stubArray'),
  'stubFalse': require('./stubFalse'),
  'stubObject': require('./stubObject'),
  'stubString': require('./stubString'),
  'stubTrue': require('./stubTrue'),
  'times': require('./times'),
  'toPath': require('./toPath'),
  'uniqueId': require('./uniqueId')
};
module.exports = require('./wrapperValue');
module.exports = require('./wrapperValue');
var baseValues = require('./_baseValues'),
    keys = require('./keys');

/**
 * Creates an array of the own enumerable string keyed property values of `object`.
 *
 * **Note:** Non-object values are coerced to objects.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property values.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.values(new Foo);
 * // => [1, 2] (iteration order is not guaranteed)
 *
 * _.values('hi');
 * // => ['h', 'i']
 */
function values(object) {
  return object == null ? [] : baseValues(object, keys(object));
}

module.exports = values;
var baseValues = require('./_baseValues'),
    keysIn = require('./keysIn');

/**
 * Creates an array of the own and inherited enumerable string keyed property
 * values of `object`.
 *
 * **Note:** Non-object values are coerced to objects.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category Object
 * @param {Object} object The object to query.
 * @returns {Array} Returns the array of property values.
 * @example
 *
 * function Foo() {
 *   this.a = 1;
 *   this.b = 2;
 * }
 *
 * Foo.prototype.c = 3;
 *
 * _.valuesIn(new Foo);
 * // => [1, 2, 3] (iteration order is not guaranteed)
 */
function valuesIn(object) {
  return object == null ? [] : baseValues(object, keysIn(object));
}

module.exports = valuesIn;
var baseDifference = require('./_baseDifference'),
    baseRest = require('./_baseRest'),
    isArrayLikeObject = require('./isArrayLikeObject');

/**
 * Creates an array excluding all given values using
 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
 * for equality comparisons.
 *
 * **Note:** Unlike `_.pull`, this method returns a new array.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {Array} array The array to inspect.
 * @param {...*} [values] The values to exclude.
 * @returns {Array} Returns the new array of filtered values.
 * @see _.difference, _.xor
 * @example
 *
 * _.without([2, 1, 2, 3], 1, 2);
 * // => [3]
 */
var without = baseRest(function(array, values) {
  return isArrayLikeObject(array)
    ? baseDifference(array, values)
    : [];
});

module.exports = without;
var asciiWords = require('./_asciiWords'),
    hasUnicodeWord = require('./_hasUnicodeWord'),
    toString = require('./toString'),
    unicodeWords = require('./_unicodeWords');

/**
 * Splits `string` into an array of its words.
 *
 * @static
 * @memberOf _
 * @since 3.0.0
 * @category String
 * @param {string} [string=''] The string to inspect.
 * @param {RegExp|string} [pattern] The pattern to match words.
 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
 * @returns {Array} Returns the words of `string`.
 * @example
 *
 * _.words('fred, barney, & pebbles');
 * // => ['fred', 'barney', 'pebbles']
 *
 * _.words('fred, barney, & pebbles', /[^, ]+/g);
 * // => ['fred', 'barney', '&', 'pebbles']
 */
function words(string, pattern, guard) {
  string = toString(string);
  pattern = guard ? undefined : pattern;

  if (pattern === undefined) {
    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
  }
  return string.match(pattern) || [];
}

module.exports = words;
var castFunction = require('./_castFunction'),
    partial = require('./partial');

/**
 * Creates a function that provides `value` to `wrapper` as its first
 * argument. Any additional arguments provided to the function are appended
 * to those provided to the `wrapper`. The wrapper is invoked with the `this`
 * binding of the created function.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Function
 * @param {*} value The value to wrap.
 * @param {Function} [wrapper=identity] The wrapper function.
 * @returns {Function} Returns the new function.
 * @example
 *
 * var p = _.wrap(_.escape, function(func, text) {
 *   return '<p>' + func(text) + '</p>';
 * });
 *
 * p('fred, barney, & pebbles');
 * // => '<p>fred, barney, &amp; pebbles</p>'
 */
function wrap(value, wrapper) {
  return partial(castFunction(wrapper), value);
}

module.exports = wrap;
var LazyWrapper = require('./_LazyWrapper'),
    LodashWrapper = require('./_LodashWrapper'),
    baseAt = require('./_baseAt'),
    flatRest = require('./_flatRest'),
    isIndex = require('./_isIndex'),
    thru = require('./thru');

/**
 * This method is the wrapper version of `_.at`.
 *
 * @name at
 * @memberOf _
 * @since 1.0.0
 * @category Seq
 * @param {...(string|string[])} [paths] The property paths to pick.
 * @returns {Object} Returns the new `lodash` wrapper instance.
 * @example
 *
 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
 *
 * _(object).at(['a[0].b.c', 'a[1]']).value();
 * // => [3, 4]
 */
var wrapperAt = flatRest(function(paths) {
  var length = paths.length,
      start = length ? paths[0] : 0,
      value = this.__wrapped__,
      interceptor = function(object) { return baseAt(object, paths); };

  if (length > 1 || this.__actions__.length ||
      !(value instanceof LazyWrapper) || !isIndex(start)) {
    return this.thru(interceptor);
  }
  value = value.slice(start, +start + (length ? 1 : 0));
  value.__actions__.push({
    'func': thru,
    'args': [interceptor],
    'thisArg': undefined
  });
  return new LodashWrapper(value, this.__chain__).thru(function(array) {
    if (length && !array.length) {
      array.push(undefined);
    }
    return array;
  });
});

module.exports = wrapperAt;
var chain = require('./chain');

/**
 * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
 *
 * @name chain
 * @memberOf _
 * @since 0.1.0
 * @category Seq
 * @returns {Object} Returns the new `lodash` wrapper instance.
 * @example
 *
 * var users = [
 *   { 'user': 'barney', 'age': 36 },
 *   { 'user': 'fred',   'age': 40 }
 * ];
 *
 * // A sequence without explicit chaining.
 * _(users).head();
 * // => { 'user': 'barney', 'age': 36 }
 *
 * // A sequence with explicit chaining.
 * _(users)
 *   .chain()
 *   .head()
 *   .pick('user')
 *   .value();
 * // => { 'user': 'barney' }
 */
function wrapperChain() {
  return chain(this);
}

module.exports = wrapperChain;
var LazyWrapper = require('./_LazyWrapper'),
    LodashWrapper = require('./_LodashWrapper'),
    baseLodash = require('./_baseLodash'),
    isArray = require('./isArray'),
    isObjectLike = require('./isObjectLike'),
    wrapperClone = require('./_wrapperClone');

/** Used for built-in method references. */
var objectProto = Object.prototype;

/** Used to check objects for own properties. */
var hasOwnProperty = objectProto.hasOwnProperty;

/**
 * Creates a `lodash` object which wraps `value` to enable implicit method
 * chain sequences. Methods that operate on and return arrays, collections,
 * and functions can be chained together. Methods that retrieve a single value
 * or may return a primitive value will automatically end the chain sequence
 * and return the unwrapped value. Otherwise, the value must be unwrapped
 * with `_#value`.
 *
 * Explicit chain sequences, which must be unwrapped with `_#value`, may be
 * enabled using `_.chain`.
 *
 * The execution of chained methods is lazy, that is, it's deferred until
 * `_#value` is implicitly or explicitly called.
 *
 * Lazy evaluation allows several methods to support shortcut fusion.
 * Shortcut fusion is an optimization to merge iteratee calls; this avoids
 * the creation of intermediate arrays and can greatly reduce the number of
 * iteratee executions. Sections of a chain sequence qualify for shortcut
 * fusion if the section is applied to an array and iteratees accept only
 * one argument. The heuristic for whether a section qualifies for shortcut
 * fusion is subject to change.
 *
 * Chaining is supported in custom builds as long as the `_#value` method is
 * directly or indirectly included in the build.
 *
 * In addition to lodash methods, wrappers have `Array` and `String` methods.
 *
 * The wrapper `Array` methods are:
 * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
 *
 * The wrapper `String` methods are:
 * `replace` and `split`
 *
 * The wrapper methods that support shortcut fusion are:
 * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
 * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
 * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
 *
 * The chainable wrapper methods are:
 * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
 * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
 * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
 * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
 * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
 * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
 * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
 * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
 * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
 * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
 * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
 * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
 * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
 * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
 * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
 * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
 * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
 * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
 * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
 * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
 * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
 * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
 * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
 * `zipObject`, `zipObjectDeep`, and `zipWith`
 *
 * The wrapper methods that are **not** chainable by default are:
 * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
 * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
 * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
 * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
 * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
 * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
 * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
 * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
 * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
 * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
 * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
 * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
 * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
 * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
 * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
 * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
 * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
 * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
 * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
 * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
 * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
 * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
 * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
 * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
 * `upperFirst`, `value`, and `words`
 *
 * @name _
 * @constructor
 * @category Seq
 * @param {*} value The value to wrap in a `lodash` instance.
 * @returns {Object} Returns the new `lodash` wrapper instance.
 * @example
 *
 * function square(n) {
 *   return n * n;
 * }
 *
 * var wrapped = _([1, 2, 3]);
 *
 * // Returns an unwrapped value.
 * wrapped.reduce(_.add);
 * // => 6
 *
 * // Returns a wrapped value.
 * var squares = wrapped.map(square);
 *
 * _.isArray(squares);
 * // => false
 *
 * _.isArray(squares.value());
 * // => true
 */
function lodash(value) {
  if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
    if (value instanceof LodashWrapper) {
      return value;
    }
    if (hasOwnProperty.call(value, '__wrapped__')) {
      return wrapperClone(value);
    }
  }
  return new LodashWrapper(value);
}

// Ensure wrappers are instances of `baseLodash`.
lodash.prototype = baseLodash.prototype;
lodash.prototype.constructor = lodash;

module.exports = lodash;
var LazyWrapper = require('./_LazyWrapper'),
    LodashWrapper = require('./_LodashWrapper'),
    reverse = require('./reverse'),
    thru = require('./thru');

/**
 * This method is the wrapper version of `_.reverse`.
 *
 * **Note:** This method mutates the wrapped array.
 *
 * @name reverse
 * @memberOf _
 * @since 0.1.0
 * @category Seq
 * @returns {Object} Returns the new `lodash` wrapper instance.
 * @example
 *
 * var array = [1, 2, 3];
 *
 * _(array).reverse().value()
 * // => [3, 2, 1]
 *
 * console.log(array);
 * // => [3, 2, 1]
 */
function wrapperReverse() {
  var value = this.__wrapped__;
  if (value instanceof LazyWrapper) {
    var wrapped = value;
    if (this.__actions__.length) {
      wrapped = new LazyWrapper(this);
    }
    wrapped = wrapped.reverse();
    wrapped.__actions__.push({
      'func': thru,
      'args': [reverse],
      'thisArg': undefined
    });
    return new LodashWrapper(wrapped, this.__chain__);
  }
  return this.thru(reverse);
}

module.exports = wrapperReverse;
var baseWrapperValue = require('./_baseWrapperValue');

/**
 * Executes the chain sequence to resolve the unwrapped value.
 *
 * @name value
 * @memberOf _
 * @since 0.1.0
 * @alias toJSON, valueOf
 * @category Seq
 * @returns {*} Returns the resolved unwrapped value.
 * @example
 *
 * _([1, 2, 3]).value();
 * // => [1, 2, 3]
 */
function wrapperValue() {
  return baseWrapperValue(this.__wrapped__, this.__actions__);
}

module.exports = wrapperValue;
var arrayFilter = require('./_arrayFilter'),
    baseRest = require('./_baseRest'),
    baseXor = require('./_baseXor'),
    isArrayLikeObject = require('./isArrayLikeObject');

/**
 * Creates an array of unique values that is the
 * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
 * of the given arrays. The order of result values is determined by the order
 * they occur in the arrays.
 *
 * @static
 * @memberOf _
 * @since 2.4.0
 * @category Array
 * @param {...Array} [arrays] The arrays to inspect.
 * @returns {Array} Returns the new array of filtered values.
 * @see _.difference, _.without
 * @example
 *
 * _.xor([2, 1], [2, 3]);
 * // => [1, 3]
 */
var xor = baseRest(function(arrays) {
  return baseXor(arrayFilter(arrays, isArrayLikeObject));
});

module.exports = xor;
var arrayFilter = require('./_arrayFilter'),
    baseIteratee = require('./_baseIteratee'),
    baseRest = require('./_baseRest'),
    baseXor = require('./_baseXor'),
    isArrayLikeObject = require('./isArrayLikeObject'),
    last = require('./last');

/**
 * This method is like `_.xor` except that it accepts `iteratee` which is
 * invoked for each element of each `arrays` to generate the criterion by
 * which by which they're compared. The order of result values is determined
 * by the order they occur in the arrays. The iteratee is invoked with one
 * argument: (value).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {...Array} [arrays] The arrays to inspect.
 * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
 * @returns {Array} Returns the new array of filtered values.
 * @example
 *
 * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
 * // => [1.2, 3.4]
 *
 * // The `_.property` iteratee shorthand.
 * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
 * // => [{ 'x': 2 }]
 */
var xorBy = baseRest(function(arrays) {
  var iteratee = last(arrays);
  if (isArrayLikeObject(iteratee)) {
    iteratee = undefined;
  }
  return baseXor(arrayFilter(arrays, isArrayLikeObject), baseIteratee(iteratee, 2));
});

module.exports = xorBy;
var arrayFilter = require('./_arrayFilter'),
    baseRest = require('./_baseRest'),
    baseXor = require('./_baseXor'),
    isArrayLikeObject = require('./isArrayLikeObject'),
    last = require('./last');

/**
 * This method is like `_.xor` except that it accepts `comparator` which is
 * invoked to compare elements of `arrays`. The order of result values is
 * determined by the order they occur in the arrays. The comparator is invoked
 * with two arguments: (arrVal, othVal).
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Array
 * @param {...Array} [arrays] The arrays to inspect.
 * @param {Function} [comparator] The comparator invoked per element.
 * @returns {Array} Returns the new array of filtered values.
 * @example
 *
 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
 *
 * _.xorWith(objects, others, _.isEqual);
 * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
 */
var xorWith = baseRest(function(arrays) {
  var comparator = last(arrays);
  comparator = typeof comparator == 'function' ? comparator : undefined;
  return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
});

module.exports = xorWith;
var baseRest = require('./_baseRest'),
    unzip = require('./unzip');

/**
 * Creates an array of grouped elements, the first of which contains the
 * first elements of the given arrays, the second of which contains the
 * second elements of the given arrays, and so on.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Array
 * @param {...Array} [arrays] The arrays to process.
 * @returns {Array} Returns the new array of grouped elements.
 * @example
 *
 * _.zip(['a', 'b'], [1, 2], [true, false]);
 * // => [['a', 1, true], ['b', 2, false]]
 */
var zip = baseRest(unzip);

module.exports = zip;
var assignValue = require('./_assignValue'),
    baseZipObject = require('./_baseZipObject');

/**
 * This method is like `_.fromPairs` except that it accepts two arrays,
 * one of property identifiers and one of corresponding values.
 *
 * @static
 * @memberOf _
 * @since 0.4.0
 * @category Array
 * @param {Array} [props=[]] The property identifiers.
 * @param {Array} [values=[]] The property values.
 * @returns {Object} Returns the new object.
 * @example
 *
 * _.zipObject(['a', 'b'], [1, 2]);
 * // => { 'a': 1, 'b': 2 }
 */
function zipObject(props, values) {
  return baseZipObject(props || [], values || [], assignValue);
}

module.exports = zipObject;
var baseSet = require('./_baseSet'),
    baseZipObject = require('./_baseZipObject');

/**
 * This method is like `_.zipObject` except that it supports property paths.
 *
 * @static
 * @memberOf _
 * @since 4.1.0
 * @category Array
 * @param {Array} [props=[]] The property identifiers.
 * @param {Array} [values=[]] The property values.
 * @returns {Object} Returns the new object.
 * @example
 *
 * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
 * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
 */
function zipObjectDeep(props, values) {
  return baseZipObject(props || [], values || [], baseSet);
}

module.exports = zipObjectDeep;
var baseRest = require('./_baseRest'),
    unzipWith = require('./unzipWith');

/**
 * This method is like `_.zip` except that it accepts `iteratee` to specify
 * how grouped values should be combined. The iteratee is invoked with the
 * elements of each group: (...group).
 *
 * @static
 * @memberOf _
 * @since 3.8.0
 * @category Array
 * @param {...Array} [arrays] The arrays to process.
 * @param {Function} [iteratee=_.identity] The function to combine
 *  grouped values.
 * @returns {Array} Returns the new array of grouped elements.
 * @example
 *
 * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
 *   return a + b + c;
 * });
 * // => [111, 222]
 */
var zipWith = baseRest(function(arrays) {
  var length = arrays.length,
      iteratee = length > 1 ? arrays[length - 1] : undefined;

  iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
  return unzipWith(arrays, iteratee);
});

module.exports = zipWith;
'use strict';
module.exports = object => {
	const result = {};

	for (const [key, value] of Object.entries(object)) {
		result[key.toLowerCase()] = value;
	}

	return result;
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "lowercase-keys",
  "version": "2.0.0",
  "description": "Lowercase the keys of an object",
  "license": "MIT",
  "repository": "sindresorhus/lowercase-keys",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=8"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "devDependencies": {
    "ava": "^1.4.1",
    "tsd": "^0.7.2",
    "xo": "^0.24.0"
  }
}'use strict'

module.exports = LRUCache

// This will be a proper iterable 'Map' in engines that support it,
// or a fakey-fake PseudoMap in older versions.
var Map = require('pseudomap')
var util = require('util')

// A linked list to keep track of recently-used-ness
var Yallist = require('yallist')

// use symbols if possible, otherwise just _props
var hasSymbol = typeof Symbol === 'function' && process.env._nodeLRUCacheForceNoSymbol !== '1'
var makeSymbol
if (hasSymbol) {
  makeSymbol = function (key) {
    return Symbol(key)
  }
} else {
  makeSymbol = function (key) {
    return '_' + key
  }
}

var MAX = makeSymbol('max')
var LENGTH = makeSymbol('length')
var LENGTH_CALCULATOR = makeSymbol('lengthCalculator')
var ALLOW_STALE = makeSymbol('allowStale')
var MAX_AGE = makeSymbol('maxAge')
var DISPOSE = makeSymbol('dispose')
var NO_DISPOSE_ON_SET = makeSymbol('noDisposeOnSet')
var LRU_LIST = makeSymbol('lruList')
var CACHE = makeSymbol('cache')

function naiveLength () { return 1 }

// lruList is a yallist where the head is the youngest
// item, and the tail is the oldest.  the list contains the Hit
// objects as the entries.
// Each Hit object has a reference to its Yallist.Node.  This
// never changes.
//
// cache is a Map (or PseudoMap) that matches the keys to
// the Yallist.Node object.
function LRUCache (options) {
  if (!(this instanceof LRUCache)) {
    return new LRUCache(options)
  }

  if (typeof options === 'number') {
    options = { max: options }
  }

  if (!options) {
    options = {}
  }

  var max = this[MAX] = options.max
  // Kind of weird to have a default max of Infinity, but oh well.
  if (!max ||
      !(typeof max === 'number') ||
      max <= 0) {
    this[MAX] = Infinity
  }

  var lc = options.length || naiveLength
  if (typeof lc !== 'function') {
    lc = naiveLength
  }
  this[LENGTH_CALCULATOR] = lc

  this[ALLOW_STALE] = options.stale || false
  this[MAX_AGE] = options.maxAge || 0
  this[DISPOSE] = options.dispose
  this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false
  this.reset()
}

// resize the cache when the max changes.
Object.defineProperty(LRUCache.prototype, 'max', {
  set: function (mL) {
    if (!mL || !(typeof mL === 'number') || mL <= 0) {
      mL = Infinity
    }
    this[MAX] = mL
    trim(this)
  },
  get: function () {
    return this[MAX]
  },
  enumerable: true
})

Object.defineProperty(LRUCache.prototype, 'allowStale', {
  set: function (allowStale) {
    this[ALLOW_STALE] = !!allowStale
  },
  get: function () {
    return this[ALLOW_STALE]
  },
  enumerable: true
})

Object.defineProperty(LRUCache.prototype, 'maxAge', {
  set: function (mA) {
    if (!mA || !(typeof mA === 'number') || mA < 0) {
      mA = 0
    }
    this[MAX_AGE] = mA
    trim(this)
  },
  get: function () {
    return this[MAX_AGE]
  },
  enumerable: true
})

// resize the cache when the lengthCalculator changes.
Object.defineProperty(LRUCache.prototype, 'lengthCalculator', {
  set: function (lC) {
    if (typeof lC !== 'function') {
      lC = naiveLength
    }
    if (lC !== this[LENGTH_CALCULATOR]) {
      this[LENGTH_CALCULATOR] = lC
      this[LENGTH] = 0
      this[LRU_LIST].forEach(function (hit) {
        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)
        this[LENGTH] += hit.length
      }, this)
    }
    trim(this)
  },
  get: function () { return this[LENGTH_CALCULATOR] },
  enumerable: true
})

Object.defineProperty(LRUCache.prototype, 'length', {
  get: function () { return this[LENGTH] },
  enumerable: true
})

Object.defineProperty(LRUCache.prototype, 'itemCount', {
  get: function () { return this[LRU_LIST].length },
  enumerable: true
})

LRUCache.prototype.rforEach = function (fn, thisp) {
  thisp = thisp || this
  for (var walker = this[LRU_LIST].tail; walker !== null;) {
    var prev = walker.prev
    forEachStep(this, fn, walker, thisp)
    walker = prev
  }
}

function forEachStep (self, fn, node, thisp) {
  var hit = node.value
  if (isStale(self, hit)) {
    del(self, node)
    if (!self[ALLOW_STALE]) {
      hit = undefined
    }
  }
  if (hit) {
    fn.call(thisp, hit.value, hit.key, self)
  }
}

LRUCache.prototype.forEach = function (fn, thisp) {
  thisp = thisp || this
  for (var walker = this[LRU_LIST].head; walker !== null;) {
    var next = walker.next
    forEachStep(this, fn, walker, thisp)
    walker = next
  }
}

LRUCache.prototype.keys = function () {
  return this[LRU_LIST].toArray().map(function (k) {
    return k.key
  }, this)
}

LRUCache.prototype.values = function () {
  return this[LRU_LIST].toArray().map(function (k) {
    return k.value
  }, this)
}

LRUCache.prototype.reset = function () {
  if (this[DISPOSE] &&
      this[LRU_LIST] &&
      this[LRU_LIST].length) {
    this[LRU_LIST].forEach(function (hit) {
      this[DISPOSE](hit.key, hit.value)
    }, this)
  }

  this[CACHE] = new Map() // hash of items by key
  this[LRU_LIST] = new Yallist() // list of items in order of use recency
  this[LENGTH] = 0 // length of items in the list
}

LRUCache.prototype.dump = function () {
  return this[LRU_LIST].map(function (hit) {
    if (!isStale(this, hit)) {
      return {
        k: hit.key,
        v: hit.value,
        e: hit.now + (hit.maxAge || 0)
      }
    }
  }, this).toArray().filter(function (h) {
    return h
  })
}

LRUCache.prototype.dumpLru = function () {
  return this[LRU_LIST]
}

/* istanbul ignore next */
LRUCache.prototype.inspect = function (n, opts) {
  var str = 'LRUCache {'
  var extras = false

  var as = this[ALLOW_STALE]
  if (as) {
    str += '\n  allowStale: true'
    extras = true
  }

  var max = this[MAX]
  if (max && max !== Infinity) {
    if (extras) {
      str += ','
    }
    str += '\n  max: ' + util.inspect(max, opts)
    extras = true
  }

  var maxAge = this[MAX_AGE]
  if (maxAge) {
    if (extras) {
      str += ','
    }
    str += '\n  maxAge: ' + util.inspect(maxAge, opts)
    extras = true
  }

  var lc = this[LENGTH_CALCULATOR]
  if (lc && lc !== naiveLength) {
    if (extras) {
      str += ','
    }
    str += '\n  length: ' + util.inspect(this[LENGTH], opts)
    extras = true
  }

  var didFirst = false
  this[LRU_LIST].forEach(function (item) {
    if (didFirst) {
      str += ',\n  '
    } else {
      if (extras) {
        str += ',\n'
      }
      didFirst = true
      str += '\n  '
    }
    var key = util.inspect(item.key).split('\n').join('\n  ')
    var val = { value: item.value }
    if (item.maxAge !== maxAge) {
      val.maxAge = item.maxAge
    }
    if (lc !== naiveLength) {
      val.length = item.length
    }
    if (isStale(this, item)) {
      val.stale = true
    }

    val = util.inspect(val, opts).split('\n').join('\n  ')
    str += key + ' => ' + val
  })

  if (didFirst || extras) {
    str += '\n'
  }
  str += '}'

  return str
}

LRUCache.prototype.set = function (key, value, maxAge) {
  maxAge = maxAge || this[MAX_AGE]

  var now = maxAge ? Date.now() : 0
  var len = this[LENGTH_CALCULATOR](value, key)

  if (this[CACHE].has(key)) {
    if (len > this[MAX]) {
      del(this, this[CACHE].get(key))
      return false
    }

    var node = this[CACHE].get(key)
    var item = node.value

    // dispose of the old one before overwriting
    // split out into 2 ifs for better coverage tracking
    if (this[DISPOSE]) {
      if (!this[NO_DISPOSE_ON_SET]) {
        this[DISPOSE](key, item.value)
      }
    }

    item.now = now
    item.maxAge = maxAge
    item.value = value
    this[LENGTH] += len - item.length
    item.length = len
    this.get(key)
    trim(this)
    return true
  }

  var hit = new Entry(key, value, len, now, maxAge)

  // oversized objects fall out of cache automatically.
  if (hit.length > this[MAX]) {
    if (this[DISPOSE]) {
      this[DISPOSE](key, value)
    }
    return false
  }

  this[LENGTH] += hit.length
  this[LRU_LIST].unshift(hit)
  this[CACHE].set(key, this[LRU_LIST].head)
  trim(this)
  return true
}

LRUCache.prototype.has = function (key) {
  if (!this[CACHE].has(key)) return false
  var hit = this[CACHE].get(key).value
  if (isStale(this, hit)) {
    return false
  }
  return true
}

LRUCache.prototype.get = function (key) {
  return get(this, key, true)
}

LRUCache.prototype.peek = function (key) {
  return get(this, key, false)
}

LRUCache.prototype.pop = function () {
  var node = this[LRU_LIST].tail
  if (!node) return null
  del(this, node)
  return node.value
}

LRUCache.prototype.del = function (key) {
  del(this, this[CACHE].get(key))
}

LRUCache.prototype.load = function (arr) {
  // reset the cache
  this.reset()

  var now = Date.now()
  // A previous serialized cache has the most recent items first
  for (var l = arr.length - 1; l >= 0; l--) {
    var hit = arr[l]
    var expiresAt = hit.e || 0
    if (expiresAt === 0) {
      // the item was created without expiration in a non aged cache
      this.set(hit.k, hit.v)
    } else {
      var maxAge = expiresAt - now
      // dont add already expired items
      if (maxAge > 0) {
        this.set(hit.k, hit.v, maxAge)
      }
    }
  }
}

LRUCache.prototype.prune = function () {
  var self = this
  this[CACHE].forEach(function (value, key) {
    get(self, key, false)
  })
}

function get (self, key, doUse) {
  var node = self[CACHE].get(key)
  if (node) {
    var hit = node.value
    if (isStale(self, hit)) {
      del(self, node)
      if (!self[ALLOW_STALE]) hit = undefined
    } else {
      if (doUse) {
        self[LRU_LIST].unshiftNode(node)
      }
    }
    if (hit) hit = hit.value
  }
  return hit
}

function isStale (self, hit) {
  if (!hit || (!hit.maxAge && !self[MAX_AGE])) {
    return false
  }
  var stale = false
  var diff = Date.now() - hit.now
  if (hit.maxAge) {
    stale = diff > hit.maxAge
  } else {
    stale = self[MAX_AGE] && (diff > self[MAX_AGE])
  }
  return stale
}

function trim (self) {
  if (self[LENGTH] > self[MAX]) {
    for (var walker = self[LRU_LIST].tail;
      self[LENGTH] > self[MAX] && walker !== null;) {
      // We know that we're about to delete this one, and also
      // what the next least recently used key will be, so just
      // go ahead and set it now.
      var prev = walker.prev
      del(self, walker)
      walker = prev
    }
  }
}

function del (self, node) {
  if (node) {
    var hit = node.value
    if (self[DISPOSE]) {
      self[DISPOSE](hit.key, hit.value)
    }
    self[LENGTH] -= hit.length
    self[CACHE].delete(hit.key)
    self[LRU_LIST].removeNode(node)
  }
}

// classy, since V8 prefers predictable objects.
function Entry (key, value, length, now, maxAge) {
  this.key = key
  this.value = value
  this.length = length
  this.now = now
  this.maxAge = maxAge || 0
}
The ISC License

Copyright (c) Isaac Z. Schlueter and Contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
var Yallist = require('./yallist.js')

Yallist.prototype[Symbol.iterator] = function* () {
  for (let walker = this.head; walker; walker = walker.next) {
    yield walker.value
  }
}
The ISC License

Copyright (c) Isaac Z. Schlueter and Contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "yallist",
  "version": "2.1.2",
  "description": "Yet Another Linked List",
  "main": "yallist.js",
  "directories": {
    "test": "test"
  },
  "files": [
    "yallist.js",
    "iterator.js"
  ],
  "dependencies": {},
  "devDependencies": {
    "tap": "^10.3.0"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/isaacs/yallist.git"
  },
  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
  "license": "ISC"
}module.exports = Yallist

Yallist.Node = Node
Yallist.create = Yallist

function Yallist (list) {
  var self = this
  if (!(self instanceof Yallist)) {
    self = new Yallist()
  }

  self.tail = null
  self.head = null
  self.length = 0

  if (list && typeof list.forEach === 'function') {
    list.forEach(function (item) {
      self.push(item)
    })
  } else if (arguments.length > 0) {
    for (var i = 0, l = arguments.length; i < l; i++) {
      self.push(arguments[i])
    }
  }

  return self
}

Yallist.prototype.removeNode = function (node) {
  if (node.list !== this) {
    throw new Error('removing node which does not belong to this list')
  }

  var next = node.next
  var prev = node.prev

  if (next) {
    next.prev = prev
  }

  if (prev) {
    prev.next = next
  }

  if (node === this.head) {
    this.head = next
  }
  if (node === this.tail) {
    this.tail = prev
  }

  node.list.length--
  node.next = null
  node.prev = null
  node.list = null
}

Yallist.prototype.unshiftNode = function (node) {
  if (node === this.head) {
    return
  }

  if (node.list) {
    node.list.removeNode(node)
  }

  var head = this.head
  node.list = this
  node.next = head
  if (head) {
    head.prev = node
  }

  this.head = node
  if (!this.tail) {
    this.tail = node
  }
  this.length++
}

Yallist.prototype.pushNode = function (node) {
  if (node === this.tail) {
    return
  }

  if (node.list) {
    node.list.removeNode(node)
  }

  var tail = this.tail
  node.list = this
  node.prev = tail
  if (tail) {
    tail.next = node
  }

  this.tail = node
  if (!this.head) {
    this.head = node
  }
  this.length++
}

Yallist.prototype.push = function () {
  for (var i = 0, l = arguments.length; i < l; i++) {
    push(this, arguments[i])
  }
  return this.length
}

Yallist.prototype.unshift = function () {
  for (var i = 0, l = arguments.length; i < l; i++) {
    unshift(this, arguments[i])
  }
  return this.length
}

Yallist.prototype.pop = function () {
  if (!this.tail) {
    return undefined
  }

  var res = this.tail.value
  this.tail = this.tail.prev
  if (this.tail) {
    this.tail.next = null
  } else {
    this.head = null
  }
  this.length--
  return res
}

Yallist.prototype.shift = function () {
  if (!this.head) {
    return undefined
  }

  var res = this.head.value
  this.head = this.head.next
  if (this.head) {
    this.head.prev = null
  } else {
    this.tail = null
  }
  this.length--
  return res
}

Yallist.prototype.forEach = function (fn, thisp) {
  thisp = thisp || this
  for (var walker = this.head, i = 0; walker !== null; i++) {
    fn.call(thisp, walker.value, i, this)
    walker = walker.next
  }
}

Yallist.prototype.forEachReverse = function (fn, thisp) {
  thisp = thisp || this
  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
    fn.call(thisp, walker.value, i, this)
    walker = walker.prev
  }
}

Yallist.prototype.get = function (n) {
  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
    // abort out of the list early if we hit a cycle
    walker = walker.next
  }
  if (i === n && walker !== null) {
    return walker.value
  }
}

Yallist.prototype.getReverse = function (n) {
  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
    // abort out of the list early if we hit a cycle
    walker = walker.prev
  }
  if (i === n && walker !== null) {
    return walker.value
  }
}

Yallist.prototype.map = function (fn, thisp) {
  thisp = thisp || this
  var res = new Yallist()
  for (var walker = this.head; walker !== null;) {
    res.push(fn.call(thisp, walker.value, this))
    walker = walker.next
  }
  return res
}

Yallist.prototype.mapReverse = function (fn, thisp) {
  thisp = thisp || this
  var res = new Yallist()
  for (var walker = this.tail; walker !== null;) {
    res.push(fn.call(thisp, walker.value, this))
    walker = walker.prev
  }
  return res
}

Yallist.prototype.reduce = function (fn, initial) {
  var acc
  var walker = this.head
  if (arguments.length > 1) {
    acc = initial
  } else if (this.head) {
    walker = this.head.next
    acc = this.head.value
  } else {
    throw new TypeError('Reduce of empty list with no initial value')
  }

  for (var i = 0; walker !== null; i++) {
    acc = fn(acc, walker.value, i)
    walker = walker.next
  }

  return acc
}

Yallist.prototype.reduceReverse = function (fn, initial) {
  var acc
  var walker = this.tail
  if (arguments.length > 1) {
    acc = initial
  } else if (this.tail) {
    walker = this.tail.prev
    acc = this.tail.value
  } else {
    throw new TypeError('Reduce of empty list with no initial value')
  }

  for (var i = this.length - 1; walker !== null; i--) {
    acc = fn(acc, walker.value, i)
    walker = walker.prev
  }

  return acc
}

Yallist.prototype.toArray = function () {
  var arr = new Array(this.length)
  for (var i = 0, walker = this.head; walker !== null; i++) {
    arr[i] = walker.value
    walker = walker.next
  }
  return arr
}

Yallist.prototype.toArrayReverse = function () {
  var arr = new Array(this.length)
  for (var i = 0, walker = this.tail; walker !== null; i++) {
    arr[i] = walker.value
    walker = walker.prev
  }
  return arr
}

Yallist.prototype.slice = function (from, to) {
  to = to || this.length
  if (to < 0) {
    to += this.length
  }
  from = from || 0
  if (from < 0) {
    from += this.length
  }
  var ret = new Yallist()
  if (to < from || to < 0) {
    return ret
  }
  if (from < 0) {
    from = 0
  }
  if (to > this.length) {
    to = this.length
  }
  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
    walker = walker.next
  }
  for (; walker !== null && i < to; i++, walker = walker.next) {
    ret.push(walker.value)
  }
  return ret
}

Yallist.prototype.sliceReverse = function (from, to) {
  to = to || this.length
  if (to < 0) {
    to += this.length
  }
  from = from || 0
  if (from < 0) {
    from += this.length
  }
  var ret = new Yallist()
  if (to < from || to < 0) {
    return ret
  }
  if (from < 0) {
    from = 0
  }
  if (to > this.length) {
    to = this.length
  }
  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
    walker = walker.prev
  }
  for (; walker !== null && i > from; i--, walker = walker.prev) {
    ret.push(walker.value)
  }
  return ret
}

Yallist.prototype.reverse = function () {
  var head = this.head
  var tail = this.tail
  for (var walker = head; walker !== null; walker = walker.prev) {
    var p = walker.prev
    walker.prev = walker.next
    walker.next = p
  }
  this.head = tail
  this.tail = head
  return this
}

function push (self, item) {
  self.tail = new Node(item, self.tail, null, self)
  if (!self.head) {
    self.head = self.tail
  }
  self.length++
}

function unshift (self, item) {
  self.head = new Node(item, null, self.head, self)
  if (!self.tail) {
    self.tail = self.head
  }
  self.length++
}

function Node (value, prev, next, list) {
  if (!(this instanceof Node)) {
    return new Node(value, prev, next, list)
  }

  this.list = list
  this.value = value

  if (prev) {
    prev.next = this
    this.prev = prev
  } else {
    this.prev = null
  }

  if (next) {
    next.prev = this
    this.next = next
  } else {
    this.next = null
  }
}
{
  "name": "lru-cache",
  "description": "A cache object that deletes the least-recently-used items.",
  "version": "4.1.5",
  "author": "Isaac Z. Schlueter <i@izs.me>",
  "main": "index.js",
  "repository": "git://github.com/isaacs/node-lru-cache.git",
  "devDependencies": {
    "benchmark": "^2.1.4",
    "standard": "^12.0.1",
    "tap": "^12.1.0"
  },
  "license": "ISC",
  "dependencies": {
    "pseudomap": "^1.0.2",
    "yallist": "^2.1.2"
  },
  "files": [
    "index.js"
  ]
}#!/usr/bin/env node

/**
 * Marked CLI
 * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License)
 */

import { promises } from 'fs';
import { marked } from '../lib/marked.esm.js';

const { readFile, writeFile } = promises;

/**
 * Man Page
 */

async function help() {
  const { spawn } = await import('child_process');

  const options = {
    cwd: process.cwd(),
    env: process.env,
    setsid: false,
    stdio: 'inherit'
  };

  const { dirname, resolve } = await import('path');
  const { fileURLToPath } = await import('url');
  const __dirname = dirname(fileURLToPath(import.meta.url));
  const helpText = await readFile(resolve(__dirname, '../man/marked.1.txt'), 'utf8');

  // eslint-disable-next-line promise/param-names
  await new Promise(res => {
    spawn('man', [resolve(__dirname, '../man/marked.1')], options)
      .on('error', () => {
        console.log(helpText);
      })
      .on('close', res);
  });
}

async function version() {
  const { createRequire } = await import('module');
  const require = createRequire(import.meta.url);
  const pkg = require('../package.json');
  console.log(pkg.version);
}

/**
 * Main
 */

async function main(argv) {
  const files = [];
  const options = {};
  let input;
  let output;
  let string;
  let arg;
  let tokens;
  let opt;

  function getarg() {
    let arg = argv.shift();

    if (arg.indexOf('--') === 0) {
      // e.g. --opt
      arg = arg.split('=');
      if (arg.length > 1) {
        // e.g. --opt=val
        argv.unshift(arg.slice(1).join('='));
      }
      arg = arg[0];
    } else if (arg[0] === '-') {
      if (arg.length > 2) {
        // e.g. -abc
        argv = arg.substring(1).split('').map(function(ch) {
          return '-' + ch;
        }).concat(argv);
        arg = argv.shift();
      } else {
        // e.g. -a
      }
    } else {
      // e.g. foo
    }

    return arg;
  }

  while (argv.length) {
    arg = getarg();
    switch (arg) {
      case '-o':
      case '--output':
        output = argv.shift();
        break;
      case '-i':
      case '--input':
        input = argv.shift();
        break;
      case '-s':
      case '--string':
        string = argv.shift();
        break;
      case '-t':
      case '--tokens':
        tokens = true;
        break;
      case '-h':
      case '--help':
        return await help();
      case '-v':
      case '--version':
        return await version();
      default:
        if (arg.indexOf('--') === 0) {
          opt = camelize(arg.replace(/^--(no-)?/, ''));
          if (!marked.defaults.hasOwnProperty(opt)) {
            continue;
          }
          if (arg.indexOf('--no-') === 0) {
            options[opt] = typeof marked.defaults[opt] !== 'boolean'
              ? null
              : false;
          } else {
            options[opt] = typeof marked.defaults[opt] !== 'boolean'
              ? argv.shift()
              : true;
          }
        } else {
          files.push(arg);
        }
        break;
    }
  }

  async function getData() {
    if (!input) {
      if (files.length <= 2) {
        if (string) {
          return string;
        }
        return await getStdin();
      }
      input = files.pop();
    }
    return await readFile(input, 'utf8');
  }

  const data = await getData();

  const html = tokens
    ? JSON.stringify(marked.lexer(data, options), null, 2)
    : marked(data, options);

  if (output) {
    return await writeFile(output, html);
  }

  process.stdout.write(html + '\n');
}

/**
 * Helpers
 */

function getStdin() {
  return new Promise((resolve, reject) => {
    const stdin = process.stdin;
    let buff = '';

    stdin.setEncoding('utf8');

    stdin.on('data', function(data) {
      buff += data;
    });

    stdin.on('error', function(err) {
      reject(err);
    });

    stdin.on('end', function() {
      resolve(buff);
    });

    stdin.resume();
  });
}

/**
 * @param {string} text
 */
function camelize(text) {
  return text.replace(/(\w)-(\w)/g, function(_, a, b) {
    return a + b.toUpperCase();
  });
}

function handleError(err) {
  if (err.code === 'ENOENT') {
    console.error('marked: output to ' + err.path + ': No such directory');
    return process.exit(1);
  }
  throw err;
}

/**
 * Expose / Entry Point
 */

process.title = 'marked';
main(process.argv.slice()).then(code => {
  process.exit(code || 0);
}).catch(err => {
  handleError(err);
});
/**
 * marked - a markdown parser
 * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed)
 * https://github.com/markedjs/marked
 */

/**
 * DO NOT EDIT THIS FILE
 * The code in this file is generated from files in ./src/
 */

'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

function _defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
    var descriptor = props[i];
    descriptor.enumerable = descriptor.enumerable || false;
    descriptor.configurable = true;
    if ("value" in descriptor) descriptor.writable = true;
    Object.defineProperty(target, descriptor.key, descriptor);
  }
}

function _createClass(Constructor, protoProps, staticProps) {
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
  if (staticProps) _defineProperties(Constructor, staticProps);
  Object.defineProperty(Constructor, "prototype", {
    writable: false
  });
  return Constructor;
}

function _unsupportedIterableToArray(o, minLen) {
  if (!o) return;
  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
  var n = Object.prototype.toString.call(o).slice(8, -1);
  if (n === "Object" && o.constructor) n = o.constructor.name;
  if (n === "Map" || n === "Set") return Array.from(o);
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}

function _arrayLikeToArray(arr, len) {
  if (len == null || len > arr.length) len = arr.length;

  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];

  return arr2;
}

function _createForOfIteratorHelperLoose(o, allowArrayLike) {
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
  if (it) return (it = it.call(o)).next.bind(it);

  if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
    if (it) o = it;
    var i = 0;
    return function () {
      if (i >= o.length) return {
        done: true
      };
      return {
        done: false,
        value: o[i++]
      };
    };
  }

  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}

function getDefaults() {
  return {
    async: false,
    baseUrl: null,
    breaks: false,
    extensions: null,
    gfm: true,
    headerIds: true,
    headerPrefix: '',
    highlight: null,
    langPrefix: 'language-',
    mangle: true,
    pedantic: false,
    renderer: null,
    sanitize: false,
    sanitizer: null,
    silent: false,
    smartypants: false,
    tokenizer: null,
    walkTokens: null,
    xhtml: false
  };
}
exports.defaults = getDefaults();
function changeDefaults(newDefaults) {
  exports.defaults = newDefaults;
}

/**
 * Helpers
 */
var escapeTest = /[&<>"']/;
var escapeReplace = /[&<>"']/g;
var escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
var escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
var escapeReplacements = {
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;'
};

var getEscapeReplacement = function getEscapeReplacement(ch) {
  return escapeReplacements[ch];
};

function escape(html, encode) {
  if (encode) {
    if (escapeTest.test(html)) {
      return html.replace(escapeReplace, getEscapeReplacement);
    }
  } else {
    if (escapeTestNoEncode.test(html)) {
      return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
    }
  }

  return html;
}
var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
/**
 * @param {string} html
 */

function unescape(html) {
  // explicitly match decimal, hex, and named HTML entities
  return html.replace(unescapeTest, function (_, n) {
    n = n.toLowerCase();
    if (n === 'colon') return ':';

    if (n.charAt(0) === '#') {
      return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));
    }

    return '';
  });
}
var caret = /(^|[^\[])\^/g;
/**
 * @param {string | RegExp} regex
 * @param {string} opt
 */

function edit(regex, opt) {
  regex = typeof regex === 'string' ? regex : regex.source;
  opt = opt || '';
  var obj = {
    replace: function replace(name, val) {
      val = val.source || val;
      val = val.replace(caret, '$1');
      regex = regex.replace(name, val);
      return obj;
    },
    getRegex: function getRegex() {
      return new RegExp(regex, opt);
    }
  };
  return obj;
}
var nonWordAndColonTest = /[^\w:]/g;
var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
/**
 * @param {boolean} sanitize
 * @param {string} base
 * @param {string} href
 */

function cleanUrl(sanitize, base, href) {
  if (sanitize) {
    var prot;

    try {
      prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();
    } catch (e) {
      return null;
    }

    if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
      return null;
    }
  }

  if (base && !originIndependentUrl.test(href)) {
    href = resolveUrl(base, href);
  }

  try {
    href = encodeURI(href).replace(/%25/g, '%');
  } catch (e) {
    return null;
  }

  return href;
}
var baseUrls = {};
var justDomain = /^[^:]+:\/*[^/]*$/;
var protocol = /^([^:]+:)[\s\S]*$/;
var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;
/**
 * @param {string} base
 * @param {string} href
 */

function resolveUrl(base, href) {
  if (!baseUrls[' ' + base]) {
    // we can ignore everything in base after the last slash of its path component,
    // but we might need to add _that_
    // https://tools.ietf.org/html/rfc3986#section-3
    if (justDomain.test(base)) {
      baseUrls[' ' + base] = base + '/';
    } else {
      baseUrls[' ' + base] = rtrim(base, '/', true);
    }
  }

  base = baseUrls[' ' + base];
  var relativeBase = base.indexOf(':') === -1;

  if (href.substring(0, 2) === '//') {
    if (relativeBase) {
      return href;
    }

    return base.replace(protocol, '$1') + href;
  } else if (href.charAt(0) === '/') {
    if (relativeBase) {
      return href;
    }

    return base.replace(domain, '$1') + href;
  } else {
    return base + href;
  }
}
var noopTest = {
  exec: function noopTest() {}
};
function merge(obj) {
  var i = 1,
      target,
      key;

  for (; i < arguments.length; i++) {
    target = arguments[i];

    for (key in target) {
      if (Object.prototype.hasOwnProperty.call(target, key)) {
        obj[key] = target[key];
      }
    }
  }

  return obj;
}
function splitCells(tableRow, count) {
  // ensure that every cell-delimiting pipe has a space
  // before it to distinguish it from an escaped pipe
  var row = tableRow.replace(/\|/g, function (match, offset, str) {
    var escaped = false,
        curr = offset;

    while (--curr >= 0 && str[curr] === '\\') {
      escaped = !escaped;
    }

    if (escaped) {
      // odd number of slashes means | is escaped
      // so we leave it alone
      return '|';
    } else {
      // add space before unescaped |
      return ' |';
    }
  }),
      cells = row.split(/ \|/);
  var i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe

  if (!cells[0].trim()) {
    cells.shift();
  }

  if (cells.length > 0 && !cells[cells.length - 1].trim()) {
    cells.pop();
  }

  if (cells.length > count) {
    cells.splice(count);
  } else {
    while (cells.length < count) {
      cells.push('');
    }
  }

  for (; i < cells.length; i++) {
    // leading or trailing whitespace is ignored per the gfm spec
    cells[i] = cells[i].trim().replace(/\\\|/g, '|');
  }

  return cells;
}
/**
 * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
 * /c*$/ is vulnerable to REDOS.
 *
 * @param {string} str
 * @param {string} c
 * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.
 */

function rtrim(str, c, invert) {
  var l = str.length;

  if (l === 0) {
    return '';
  } // Length of suffix matching the invert condition.


  var suffLen = 0; // Step left until we fail to match the invert condition.

  while (suffLen < l) {
    var currChar = str.charAt(l - suffLen - 1);

    if (currChar === c && !invert) {
      suffLen++;
    } else if (currChar !== c && invert) {
      suffLen++;
    } else {
      break;
    }
  }

  return str.slice(0, l - suffLen);
}
function findClosingBracket(str, b) {
  if (str.indexOf(b[1]) === -1) {
    return -1;
  }

  var l = str.length;
  var level = 0,
      i = 0;

  for (; i < l; i++) {
    if (str[i] === '\\') {
      i++;
    } else if (str[i] === b[0]) {
      level++;
    } else if (str[i] === b[1]) {
      level--;

      if (level < 0) {
        return i;
      }
    }
  }

  return -1;
}
function checkSanitizeDeprecation(opt) {
  if (opt && opt.sanitize && !opt.silent) {
    console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');
  }
} // copied from https://stackoverflow.com/a/5450113/806777

/**
 * @param {string} pattern
 * @param {number} count
 */

function repeatString(pattern, count) {
  if (count < 1) {
    return '';
  }

  var result = '';

  while (count > 1) {
    if (count & 1) {
      result += pattern;
    }

    count >>= 1;
    pattern += pattern;
  }

  return result + pattern;
}

function outputLink(cap, link, raw, lexer) {
  var href = link.href;
  var title = link.title ? escape(link.title) : null;
  var text = cap[1].replace(/\\([\[\]])/g, '$1');

  if (cap[0].charAt(0) !== '!') {
    lexer.state.inLink = true;
    var token = {
      type: 'link',
      raw: raw,
      href: href,
      title: title,
      text: text,
      tokens: lexer.inlineTokens(text)
    };
    lexer.state.inLink = false;
    return token;
  }

  return {
    type: 'image',
    raw: raw,
    href: href,
    title: title,
    text: escape(text)
  };
}

function indentCodeCompensation(raw, text) {
  var matchIndentToCode = raw.match(/^(\s+)(?:```)/);

  if (matchIndentToCode === null) {
    return text;
  }

  var indentToCode = matchIndentToCode[1];
  return text.split('\n').map(function (node) {
    var matchIndentInNode = node.match(/^\s+/);

    if (matchIndentInNode === null) {
      return node;
    }

    var indentInNode = matchIndentInNode[0];

    if (indentInNode.length >= indentToCode.length) {
      return node.slice(indentToCode.length);
    }

    return node;
  }).join('\n');
}
/**
 * Tokenizer
 */


var Tokenizer = /*#__PURE__*/function () {
  function Tokenizer(options) {
    this.options = options || exports.defaults;
  }

  var _proto = Tokenizer.prototype;

  _proto.space = function space(src) {
    var cap = this.rules.block.newline.exec(src);

    if (cap && cap[0].length > 0) {
      return {
        type: 'space',
        raw: cap[0]
      };
    }
  };

  _proto.code = function code(src) {
    var cap = this.rules.block.code.exec(src);

    if (cap) {
      var text = cap[0].replace(/^ {1,4}/gm, '');
      return {
        type: 'code',
        raw: cap[0],
        codeBlockStyle: 'indented',
        text: !this.options.pedantic ? rtrim(text, '\n') : text
      };
    }
  };

  _proto.fences = function fences(src) {
    var cap = this.rules.block.fences.exec(src);

    if (cap) {
      var raw = cap[0];
      var text = indentCodeCompensation(raw, cap[3] || '');
      return {
        type: 'code',
        raw: raw,
        lang: cap[2] ? cap[2].trim() : cap[2],
        text: text
      };
    }
  };

  _proto.heading = function heading(src) {
    var cap = this.rules.block.heading.exec(src);

    if (cap) {
      var text = cap[2].trim(); // remove trailing #s

      if (/#$/.test(text)) {
        var trimmed = rtrim(text, '#');

        if (this.options.pedantic) {
          text = trimmed.trim();
        } else if (!trimmed || / $/.test(trimmed)) {
          // CommonMark requires space before trailing #s
          text = trimmed.trim();
        }
      }

      return {
        type: 'heading',
        raw: cap[0],
        depth: cap[1].length,
        text: text,
        tokens: this.lexer.inline(text)
      };
    }
  };

  _proto.hr = function hr(src) {
    var cap = this.rules.block.hr.exec(src);

    if (cap) {
      return {
        type: 'hr',
        raw: cap[0]
      };
    }
  };

  _proto.blockquote = function blockquote(src) {
    var cap = this.rules.block.blockquote.exec(src);

    if (cap) {
      var text = cap[0].replace(/^ *>[ \t]?/gm, '');
      return {
        type: 'blockquote',
        raw: cap[0],
        tokens: this.lexer.blockTokens(text, []),
        text: text
      };
    }
  };

  _proto.list = function list(src) {
    var cap = this.rules.block.list.exec(src);

    if (cap) {
      var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly;
      var bull = cap[1].trim();
      var isordered = bull.length > 1;
      var list = {
        type: 'list',
        raw: '',
        ordered: isordered,
        start: isordered ? +bull.slice(0, -1) : '',
        loose: false,
        items: []
      };
      bull = isordered ? "\\d{1,9}\\" + bull.slice(-1) : "\\" + bull;

      if (this.options.pedantic) {
        bull = isordered ? bull : '[*+-]';
      } // Get next list item


      var itemRegex = new RegExp("^( {0,3}" + bull + ")((?:[\t ][^\\n]*)?(?:\\n|$))"); // Check if current bullet point can start a new List Item

      while (src) {
        endEarly = false;

        if (!(cap = itemRegex.exec(src))) {
          break;
        }

        if (this.rules.block.hr.test(src)) {
          // End list if bullet was actually HR (possibly move into itemRegex?)
          break;
        }

        raw = cap[0];
        src = src.substring(raw.length);
        line = cap[2].split('\n', 1)[0];
        nextLine = src.split('\n', 1)[0];

        if (this.options.pedantic) {
          indent = 2;
          itemContents = line.trimLeft();
        } else {
          indent = cap[2].search(/[^ ]/); // Find first non-space char

          indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent

          itemContents = line.slice(indent);
          indent += cap[1].length;
        }

        blankLine = false;

        if (!line && /^ *$/.test(nextLine)) {
          // Items begin with at most one blank line
          raw += nextLine + '\n';
          src = src.substring(nextLine.length + 1);
          endEarly = true;
        }

        if (!endEarly) {
          var nextBulletRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))");
          var hrRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)");
          var fencesBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:```|~~~)");
          var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#"); // Check if following lines should be included in List Item

          while (src) {
            rawLine = src.split('\n', 1)[0];
            line = rawLine; // Re-align to follow commonmark nesting rules

            if (this.options.pedantic) {
              line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');
            } // End list item if found code fences


            if (fencesBeginRegex.test(line)) {
              break;
            } // End list item if found start of new heading


            if (headingBeginRegex.test(line)) {
              break;
            } // End list item if found start of new bullet


            if (nextBulletRegex.test(line)) {
              break;
            } // Horizontal rule found


            if (hrRegex.test(src)) {
              break;
            }

            if (line.search(/[^ ]/) >= indent || !line.trim()) {
              // Dedent if possible
              itemContents += '\n' + line.slice(indent);
            } else if (!blankLine) {
              // Until blank line, item doesn't need indentation
              itemContents += '\n' + line;
            } else {
              // Otherwise, improper indentation ends this item
              break;
            }

            if (!blankLine && !line.trim()) {
              // Check if current line is blank
              blankLine = true;
            }

            raw += rawLine + '\n';
            src = src.substring(rawLine.length + 1);
          }
        }

        if (!list.loose) {
          // If the previous item ended with a blank line, the list is loose
          if (endsWithBlankLine) {
            list.loose = true;
          } else if (/\n *\n *$/.test(raw)) {
            endsWithBlankLine = true;
          }
        } // Check for task list items


        if (this.options.gfm) {
          istask = /^\[[ xX]\] /.exec(itemContents);

          if (istask) {
            ischecked = istask[0] !== '[ ] ';
            itemContents = itemContents.replace(/^\[[ xX]\] +/, '');
          }
        }

        list.items.push({
          type: 'list_item',
          raw: raw,
          task: !!istask,
          checked: ischecked,
          loose: false,
          text: itemContents
        });
        list.raw += raw;
      } // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic


      list.items[list.items.length - 1].raw = raw.trimRight();
      list.items[list.items.length - 1].text = itemContents.trimRight();
      list.raw = list.raw.trimRight();
      var l = list.items.length; // Item child tokens handled here at end because we needed to have the final item to trim it first

      for (i = 0; i < l; i++) {
        this.lexer.state.top = false;
        list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
        var spacers = list.items[i].tokens.filter(function (t) {
          return t.type === 'space';
        });
        var hasMultipleLineBreaks = spacers.every(function (t) {
          var chars = t.raw.split('');
          var lineBreaks = 0;

          for (var _iterator = _createForOfIteratorHelperLoose(chars), _step; !(_step = _iterator()).done;) {
            var _char = _step.value;

            if (_char === '\n') {
              lineBreaks += 1;
            }

            if (lineBreaks > 1) {
              return true;
            }
          }

          return false;
        });

        if (!list.loose && spacers.length && hasMultipleLineBreaks) {
          // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item
          list.loose = true;
          list.items[i].loose = true;
        }
      }

      return list;
    }
  };

  _proto.html = function html(src) {
    var cap = this.rules.block.html.exec(src);

    if (cap) {
      var token = {
        type: 'html',
        raw: cap[0],
        pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
        text: cap[0]
      };

      if (this.options.sanitize) {
        var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);
        token.type = 'paragraph';
        token.text = text;
        token.tokens = this.lexer.inline(text);
      }

      return token;
    }
  };

  _proto.def = function def(src) {
    var cap = this.rules.block.def.exec(src);

    if (cap) {
      if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
      var tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
      return {
        type: 'def',
        tag: tag,
        raw: cap[0],
        href: cap[2],
        title: cap[3]
      };
    }
  };

  _proto.table = function table(src) {
    var cap = this.rules.block.table.exec(src);

    if (cap) {
      var item = {
        type: 'table',
        header: splitCells(cap[1]).map(function (c) {
          return {
            text: c
          };
        }),
        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
        rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []
      };

      if (item.header.length === item.align.length) {
        item.raw = cap[0];
        var l = item.align.length;
        var i, j, k, row;

        for (i = 0; i < l; i++) {
          if (/^ *-+: *$/.test(item.align[i])) {
            item.align[i] = 'right';
          } else if (/^ *:-+: *$/.test(item.align[i])) {
            item.align[i] = 'center';
          } else if (/^ *:-+ *$/.test(item.align[i])) {
            item.align[i] = 'left';
          } else {
            item.align[i] = null;
          }
        }

        l = item.rows.length;

        for (i = 0; i < l; i++) {
          item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) {
            return {
              text: c
            };
          });
        } // parse child tokens inside headers and cells
        // header child tokens


        l = item.header.length;

        for (j = 0; j < l; j++) {
          item.header[j].tokens = this.lexer.inline(item.header[j].text);
        } // cell child tokens


        l = item.rows.length;

        for (j = 0; j < l; j++) {
          row = item.rows[j];

          for (k = 0; k < row.length; k++) {
            row[k].tokens = this.lexer.inline(row[k].text);
          }
        }

        return item;
      }
    }
  };

  _proto.lheading = function lheading(src) {
    var cap = this.rules.block.lheading.exec(src);

    if (cap) {
      return {
        type: 'heading',
        raw: cap[0],
        depth: cap[2].charAt(0) === '=' ? 1 : 2,
        text: cap[1],
        tokens: this.lexer.inline(cap[1])
      };
    }
  };

  _proto.paragraph = function paragraph(src) {
    var cap = this.rules.block.paragraph.exec(src);

    if (cap) {
      var text = cap[1].charAt(cap[1].length - 1) === '\n' ? cap[1].slice(0, -1) : cap[1];
      return {
        type: 'paragraph',
        raw: cap[0],
        text: text,
        tokens: this.lexer.inline(text)
      };
    }
  };

  _proto.text = function text(src) {
    var cap = this.rules.block.text.exec(src);

    if (cap) {
      return {
        type: 'text',
        raw: cap[0],
        text: cap[0],
        tokens: this.lexer.inline(cap[0])
      };
    }
  };

  _proto.escape = function escape$1(src) {
    var cap = this.rules.inline.escape.exec(src);

    if (cap) {
      return {
        type: 'escape',
        raw: cap[0],
        text: escape(cap[1])
      };
    }
  };

  _proto.tag = function tag(src) {
    var cap = this.rules.inline.tag.exec(src);

    if (cap) {
      if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
        this.lexer.state.inLink = true;
      } else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
        this.lexer.state.inLink = false;
      }

      if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
        this.lexer.state.inRawBlock = true;
      } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
        this.lexer.state.inRawBlock = false;
      }

      return {
        type: this.options.sanitize ? 'text' : 'html',
        raw: cap[0],
        inLink: this.lexer.state.inLink,
        inRawBlock: this.lexer.state.inRawBlock,
        text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]
      };
    }
  };

  _proto.link = function link(src) {
    var cap = this.rules.inline.link.exec(src);

    if (cap) {
      var trimmedUrl = cap[2].trim();

      if (!this.options.pedantic && /^</.test(trimmedUrl)) {
        // commonmark requires matching angle brackets
        if (!/>$/.test(trimmedUrl)) {
          return;
        } // ending angle bracket cannot be escaped


        var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\');

        if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
          return;
        }
      } else {
        // find closing parenthesis
        var lastParenIndex = findClosingBracket(cap[2], '()');

        if (lastParenIndex > -1) {
          var start = cap[0].indexOf('!') === 0 ? 5 : 4;
          var linkLen = start + cap[1].length + lastParenIndex;
          cap[2] = cap[2].substring(0, lastParenIndex);
          cap[0] = cap[0].substring(0, linkLen).trim();
          cap[3] = '';
        }
      }

      var href = cap[2];
      var title = '';

      if (this.options.pedantic) {
        // split pedantic href and title
        var link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);

        if (link) {
          href = link[1];
          title = link[3];
        }
      } else {
        title = cap[3] ? cap[3].slice(1, -1) : '';
      }

      href = href.trim();

      if (/^</.test(href)) {
        if (this.options.pedantic && !/>$/.test(trimmedUrl)) {
          // pedantic allows starting angle bracket without ending angle bracket
          href = href.slice(1);
        } else {
          href = href.slice(1, -1);
        }
      }

      return outputLink(cap, {
        href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
        title: title ? title.replace(this.rules.inline._escapes, '$1') : title
      }, cap[0], this.lexer);
    }
  };

  _proto.reflink = function reflink(src, links) {
    var cap;

    if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {
      var link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
      link = links[link.toLowerCase()];

      if (!link || !link.href) {
        var text = cap[0].charAt(0);
        return {
          type: 'text',
          raw: text,
          text: text
        };
      }

      return outputLink(cap, link, cap[0], this.lexer);
    }
  };

  _proto.emStrong = function emStrong(src, maskedSrc, prevChar) {
    if (prevChar === void 0) {
      prevChar = '';
    }

    var match = this.rules.inline.emStrong.lDelim.exec(src);
    if (!match) return; // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well

    if (match[3] && prevChar.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/)) return;
    var nextChar = match[1] || match[2] || '';

    if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {
      var lLength = match[0].length - 1;
      var rDelim,
          rLength,
          delimTotal = lLength,
          midDelimTotal = 0;
      var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
      endReg.lastIndex = 0; // Clip maskedSrc to same section of string as src (move to lexer?)

      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);

      while ((match = endReg.exec(maskedSrc)) != null) {
        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];
        if (!rDelim) continue; // skip single * in __abc*abc__

        rLength = rDelim.length;

        if (match[3] || match[4]) {
          // found another Left Delim
          delimTotal += rLength;
          continue;
        } else if (match[5] || match[6]) {
          // either Left or Right Delim
          if (lLength % 3 && !((lLength + rLength) % 3)) {
            midDelimTotal += rLength;
            continue; // CommonMark Emphasis Rules 9-10
          }
        }

        delimTotal -= rLength;
        if (delimTotal > 0) continue; // Haven't found enough closing delimiters
        // Remove extra characters. *a*** -> *a*

        rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); // Create `em` if smallest delimiter has odd char count. *a***

        if (Math.min(lLength, rLength) % 2) {
          var _text = src.slice(1, lLength + match.index + rLength);

          return {
            type: 'em',
            raw: src.slice(0, lLength + match.index + rLength + 1),
            text: _text,
            tokens: this.lexer.inlineTokens(_text)
          };
        } // Create 'strong' if smallest delimiter has even char count. **a***


        var text = src.slice(2, lLength + match.index + rLength - 1);
        return {
          type: 'strong',
          raw: src.slice(0, lLength + match.index + rLength + 1),
          text: text,
          tokens: this.lexer.inlineTokens(text)
        };
      }
    }
  };

  _proto.codespan = function codespan(src) {
    var cap = this.rules.inline.code.exec(src);

    if (cap) {
      var text = cap[2].replace(/\n/g, ' ');
      var hasNonSpaceChars = /[^ ]/.test(text);
      var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);

      if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
        text = text.substring(1, text.length - 1);
      }

      text = escape(text, true);
      return {
        type: 'codespan',
        raw: cap[0],
        text: text
      };
    }
  };

  _proto.br = function br(src) {
    var cap = this.rules.inline.br.exec(src);

    if (cap) {
      return {
        type: 'br',
        raw: cap[0]
      };
    }
  };

  _proto.del = function del(src) {
    var cap = this.rules.inline.del.exec(src);

    if (cap) {
      return {
        type: 'del',
        raw: cap[0],
        text: cap[2],
        tokens: this.lexer.inlineTokens(cap[2])
      };
    }
  };

  _proto.autolink = function autolink(src, mangle) {
    var cap = this.rules.inline.autolink.exec(src);

    if (cap) {
      var text, href;

      if (cap[2] === '@') {
        text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);
        href = 'mailto:' + text;
      } else {
        text = escape(cap[1]);
        href = text;
      }

      return {
        type: 'link',
        raw: cap[0],
        text: text,
        href: href,
        tokens: [{
          type: 'text',
          raw: text,
          text: text
        }]
      };
    }
  };

  _proto.url = function url(src, mangle) {
    var cap;

    if (cap = this.rules.inline.url.exec(src)) {
      var text, href;

      if (cap[2] === '@') {
        text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);
        href = 'mailto:' + text;
      } else {
        // do extended autolink path validation
        var prevCapZero;

        do {
          prevCapZero = cap[0];
          cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
        } while (prevCapZero !== cap[0]);

        text = escape(cap[0]);

        if (cap[1] === 'www.') {
          href = 'http://' + text;
        } else {
          href = text;
        }
      }

      return {
        type: 'link',
        raw: cap[0],
        text: text,
        href: href,
        tokens: [{
          type: 'text',
          raw: text,
          text: text
        }]
      };
    }
  };

  _proto.inlineText = function inlineText(src, smartypants) {
    var cap = this.rules.inline.text.exec(src);

    if (cap) {
      var text;

      if (this.lexer.state.inRawBlock) {
        text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];
      } else {
        text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
      }

      return {
        type: 'text',
        raw: cap[0],
        text: text
      };
    }
  };

  return Tokenizer;
}();

/**
 * Block-Level Grammar
 */

var block = {
  newline: /^(?: *(?:\n|$))+/,
  code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
  fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,
  hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,
  heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
  blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
  list: /^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,
  html: '^ {0,3}(?:' // optional indentation
  + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
  + '|comment[^\\n]*(\\n+|$)' // (2)
  + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3)
  + '|<![A-Z][\\s\\S]*?(?:>\\n*|$)' // (4)
  + '|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)' // (5)
  + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6)
  + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag
  + '|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag
  + ')',
  def: /^ {0,3}\[(label)\]: *(?:\n *)?<?([^\s>]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,
  table: noopTest,
  lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
  // regex template, placeholders will be replaced according to different paragraph
  // interruption rules of commonmark and the original markdown spec:
  _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,
  text: /^[^\n]+/
};
block._label = /(?!\s*\])(?:\\.|[^\[\]\\])+/;
block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
block.def = edit(block.def).replace('label', block._label).replace('title', block._title).getRegex();
block.bullet = /(?:[*+-]|\d{1,9}[.)])/;
block.listItemStart = edit(/^( *)(bull) */).replace('bull', block.bullet).getRegex();
block.list = edit(block.list).replace(/bull/g, block.bullet).replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))').replace('def', '\\n+(?=' + block.def.source + ')').getRegex();
block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';
block._comment = /<!--(?!-?>)[\s\S]*?(?:-->|$)/;
block.html = edit(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
.replace('|table', '').replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
.getRegex();
block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();
/**
 * Normal Block Grammar
 */

block.normal = merge({}, block);
/**
 * GFM Block Grammar
 */

block.gfm = merge({}, block.normal, {
  table: '^ *([^\\n ].*\\|.*)\\n' // Header
  + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align
  + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells

});
block.gfm.table = edit(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
.getRegex();
block.gfm.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
.replace('table', block.gfm.table) // interrupt paragraphs with table
.replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
.getRegex();
/**
 * Pedantic grammar (original John Gruber's loose markdown specification)
 */

block.pedantic = merge({}, block.normal, {
  html: edit('^ *(?:comment *(?:\\n|\\s*$)' + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
  + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(),
  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
  heading: /^(#{1,6})(.*)(?:\n+|$)/,
  fences: noopTest,
  // fences not supported
  paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()
});
/**
 * Inline-Level Grammar
 */

var inline = {
  escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
  autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
  url: noopTest,
  tag: '^comment' + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
  + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
  + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
  + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
  + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>',
  // CDATA section
  link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
  reflink: /^!?\[(label)\]\[(ref)\]/,
  nolink: /^!?\[(ref)\](?:\[\])?/,
  reflinkSearch: 'reflink|nolink(?!\\()',
  emStrong: {
    lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,
    //        (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left.  (5) and (6) can be either Left or Right.
    //          () Skip orphan inside strong  () Consume to delim (1) #***                (2) a***#, a***                   (3) #***a, ***a                 (4) ***#              (5) #***#                 (6) a***a
    rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,
    rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _

  },
  code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
  br: /^( {2,}|\\)\n(?!\s*$)/,
  del: noopTest,
  text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
  punctuation: /^([\spunctuation])/
}; // list of punctuation marks from CommonMark spec
// without * and _ to handle the different emphasis markers * and _

inline._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, <html>

inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
inline.escapedEmSt = /\\\*|\\_/g;
inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();
inline.emStrong.lDelim = edit(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex();
inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex();
inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g').replace(/punct/g, inline._punctuation).getRegex();
inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
inline.autolink = edit(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex();
inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
inline.tag = edit(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex();
inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;
inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
inline.link = edit(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();
inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex();
inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex();
inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();
/**
 * Normal Inline Grammar
 */

inline.normal = merge({}, inline);
/**
 * Pedantic Inline Grammar
 */

inline.pedantic = merge({}, inline.normal, {
  strong: {
    start: /^__|\*\*/,
    middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
    endAst: /\*\*(?!\*)/g,
    endUnd: /__(?!_)/g
  },
  em: {
    start: /^_|\*/,
    middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,
    endAst: /\*(?!\*)/g,
    endUnd: /_(?!_)/g
  },
  link: edit(/^!?\[(label)\]\((.*?)\)/).replace('label', inline._label).getRegex(),
  reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline._label).getRegex()
});
/**
 * GFM Inline Grammar
 */

inline.gfm = merge({}, inline.normal, {
  escape: edit(inline.escape).replace('])', '~|])').getRegex(),
  _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
  url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
  _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
  del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
  text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
});
inline.gfm.url = edit(inline.gfm.url, 'i').replace('email', inline.gfm._extended_email).getRegex();
/**
 * GFM + Line Breaks Inline Grammar
 */

inline.breaks = merge({}, inline.gfm, {
  br: edit(inline.br).replace('{2,}', '*').getRegex(),
  text: edit(inline.gfm.text).replace('\\b_', '\\b_| {2,}\\n').replace(/\{2,\}/g, '*').getRegex()
});

/**
 * smartypants text replacement
 * @param {string} text
 */

function smartypants(text) {
  return text // em-dashes
  .replace(/---/g, "\u2014") // en-dashes
  .replace(/--/g, "\u2013") // opening singles
  .replace(/(^|[-\u2014/(\[{"\s])'/g, "$1\u2018") // closing singles & apostrophes
  .replace(/'/g, "\u2019") // opening doubles
  .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1\u201C") // closing doubles
  .replace(/"/g, "\u201D") // ellipses
  .replace(/\.{3}/g, "\u2026");
}
/**
 * mangle email addresses
 * @param {string} text
 */


function mangle(text) {
  var out = '',
      i,
      ch;
  var l = text.length;

  for (i = 0; i < l; i++) {
    ch = text.charCodeAt(i);

    if (Math.random() > 0.5) {
      ch = 'x' + ch.toString(16);
    }

    out += '&#' + ch + ';';
  }

  return out;
}
/**
 * Block Lexer
 */


var Lexer = /*#__PURE__*/function () {
  function Lexer(options) {
    this.tokens = [];
    this.tokens.links = Object.create(null);
    this.options = options || exports.defaults;
    this.options.tokenizer = this.options.tokenizer || new Tokenizer();
    this.tokenizer = this.options.tokenizer;
    this.tokenizer.options = this.options;
    this.tokenizer.lexer = this;
    this.inlineQueue = [];
    this.state = {
      inLink: false,
      inRawBlock: false,
      top: true
    };
    var rules = {
      block: block.normal,
      inline: inline.normal
    };

    if (this.options.pedantic) {
      rules.block = block.pedantic;
      rules.inline = inline.pedantic;
    } else if (this.options.gfm) {
      rules.block = block.gfm;

      if (this.options.breaks) {
        rules.inline = inline.breaks;
      } else {
        rules.inline = inline.gfm;
      }
    }

    this.tokenizer.rules = rules;
  }
  /**
   * Expose Rules
   */


  /**
   * Static Lex Method
   */
  Lexer.lex = function lex(src, options) {
    var lexer = new Lexer(options);
    return lexer.lex(src);
  }
  /**
   * Static Lex Inline Method
   */
  ;

  Lexer.lexInline = function lexInline(src, options) {
    var lexer = new Lexer(options);
    return lexer.inlineTokens(src);
  }
  /**
   * Preprocessing
   */
  ;

  var _proto = Lexer.prototype;

  _proto.lex = function lex(src) {
    src = src.replace(/\r\n|\r/g, '\n');
    this.blockTokens(src, this.tokens);
    var next;

    while (next = this.inlineQueue.shift()) {
      this.inlineTokens(next.src, next.tokens);
    }

    return this.tokens;
  }
  /**
   * Lexing
   */
  ;

  _proto.blockTokens = function blockTokens(src, tokens) {
    var _this = this;

    if (tokens === void 0) {
      tokens = [];
    }

    if (this.options.pedantic) {
      src = src.replace(/\t/g, '    ').replace(/^ +$/gm, '');
    } else {
      src = src.replace(/^( *)(\t+)/gm, function (_, leading, tabs) {
        return leading + '    '.repeat(tabs.length);
      });
    }

    var token, lastToken, cutSrc, lastParagraphClipped;

    while (src) {
      if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {
        if (token = extTokenizer.call({
          lexer: _this
        }, src, tokens)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          return true;
        }

        return false;
      })) {
        continue;
      } // newline


      if (token = this.tokenizer.space(src)) {
        src = src.substring(token.raw.length);

        if (token.raw.length === 1 && tokens.length > 0) {
          // if there's a single \n as a spacer, it's terminating the last line,
          // so move it there so that we don't get unecessary paragraph tags
          tokens[tokens.length - 1].raw += '\n';
        } else {
          tokens.push(token);
        }

        continue;
      } // code


      if (token = this.tokenizer.code(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph.

        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.text;
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else {
          tokens.push(token);
        }

        continue;
      } // fences


      if (token = this.tokenizer.fences(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // heading


      if (token = this.tokenizer.heading(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // hr


      if (token = this.tokenizer.hr(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // blockquote


      if (token = this.tokenizer.blockquote(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // list


      if (token = this.tokenizer.list(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // html


      if (token = this.tokenizer.html(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // def


      if (token = this.tokenizer.def(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];

        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.raw;
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else if (!this.tokens.links[token.tag]) {
          this.tokens.links[token.tag] = {
            href: token.href,
            title: token.title
          };
        }

        continue;
      } // table (gfm)


      if (token = this.tokenizer.table(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // lheading


      if (token = this.tokenizer.lheading(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // top-level paragraph
      // prevent paragraph consuming extensions by clipping 'src' to extension start


      cutSrc = src;

      if (this.options.extensions && this.options.extensions.startBlock) {
        (function () {
          var startIndex = Infinity;
          var tempSrc = src.slice(1);
          var tempStart = void 0;

          _this.options.extensions.startBlock.forEach(function (getStartIndex) {
            tempStart = getStartIndex.call({
              lexer: this
            }, tempSrc);

            if (typeof tempStart === 'number' && tempStart >= 0) {
              startIndex = Math.min(startIndex, tempStart);
            }
          });

          if (startIndex < Infinity && startIndex >= 0) {
            cutSrc = src.substring(0, startIndex + 1);
          }
        })();
      }

      if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
        lastToken = tokens[tokens.length - 1];

        if (lastParagraphClipped && lastToken.type === 'paragraph') {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.text;
          this.inlineQueue.pop();
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else {
          tokens.push(token);
        }

        lastParagraphClipped = cutSrc.length !== src.length;
        src = src.substring(token.raw.length);
        continue;
      } // text


      if (token = this.tokenizer.text(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];

        if (lastToken && lastToken.type === 'text') {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.text;
          this.inlineQueue.pop();
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else {
          tokens.push(token);
        }

        continue;
      }

      if (src) {
        var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);

        if (this.options.silent) {
          console.error(errMsg);
          break;
        } else {
          throw new Error(errMsg);
        }
      }
    }

    this.state.top = true;
    return tokens;
  };

  _proto.inline = function inline(src, tokens) {
    if (tokens === void 0) {
      tokens = [];
    }

    this.inlineQueue.push({
      src: src,
      tokens: tokens
    });
    return tokens;
  }
  /**
   * Lexing/Compiling
   */
  ;

  _proto.inlineTokens = function inlineTokens(src, tokens) {
    var _this2 = this;

    if (tokens === void 0) {
      tokens = [];
    }

    var token, lastToken, cutSrc; // String with links masked to avoid interference with em and strong

    var maskedSrc = src;
    var match;
    var keepPrevChar, prevChar; // Mask out reflinks

    if (this.tokens.links) {
      var links = Object.keys(this.tokens.links);

      if (links.length > 0) {
        while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
          if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
            maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);
          }
        }
      }
    } // Mask out other blocks


    while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
      maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
    } // Mask out escaped em & strong delimiters


    while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
      maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
    }

    while (src) {
      if (!keepPrevChar) {
        prevChar = '';
      }

      keepPrevChar = false; // extensions

      if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {
        if (token = extTokenizer.call({
          lexer: _this2
        }, src, tokens)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          return true;
        }

        return false;
      })) {
        continue;
      } // escape


      if (token = this.tokenizer.escape(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // tag


      if (token = this.tokenizer.tag(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];

        if (lastToken && token.type === 'text' && lastToken.type === 'text') {
          lastToken.raw += token.raw;
          lastToken.text += token.text;
        } else {
          tokens.push(token);
        }

        continue;
      } // link


      if (token = this.tokenizer.link(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // reflink, nolink


      if (token = this.tokenizer.reflink(src, this.tokens.links)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];

        if (lastToken && token.type === 'text' && lastToken.type === 'text') {
          lastToken.raw += token.raw;
          lastToken.text += token.text;
        } else {
          tokens.push(token);
        }

        continue;
      } // em & strong


      if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // code


      if (token = this.tokenizer.codespan(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // br


      if (token = this.tokenizer.br(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // del (gfm)


      if (token = this.tokenizer.del(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // autolink


      if (token = this.tokenizer.autolink(src, mangle)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // url (gfm)


      if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      } // text
      // prevent inlineText consuming extensions by clipping 'src' to extension start


      cutSrc = src;

      if (this.options.extensions && this.options.extensions.startInline) {
        (function () {
          var startIndex = Infinity;
          var tempSrc = src.slice(1);
          var tempStart = void 0;

          _this2.options.extensions.startInline.forEach(function (getStartIndex) {
            tempStart = getStartIndex.call({
              lexer: this
            }, tempSrc);

            if (typeof tempStart === 'number' && tempStart >= 0) {
              startIndex = Math.min(startIndex, tempStart);
            }
          });

          if (startIndex < Infinity && startIndex >= 0) {
            cutSrc = src.substring(0, startIndex + 1);
          }
        })();
      }

      if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
        src = src.substring(token.raw.length);

        if (token.raw.slice(-1) !== '_') {
          // Track prevChar before string of ____ started
          prevChar = token.raw.slice(-1);
        }

        keepPrevChar = true;
        lastToken = tokens[tokens.length - 1];

        if (lastToken && lastToken.type === 'text') {
          lastToken.raw += token.raw;
          lastToken.text += token.text;
        } else {
          tokens.push(token);
        }

        continue;
      }

      if (src) {
        var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);

        if (this.options.silent) {
          console.error(errMsg);
          break;
        } else {
          throw new Error(errMsg);
        }
      }
    }

    return tokens;
  };

  _createClass(Lexer, null, [{
    key: "rules",
    get: function get() {
      return {
        block: block,
        inline: inline
      };
    }
  }]);

  return Lexer;
}();

/**
 * Renderer
 */

var Renderer = /*#__PURE__*/function () {
  function Renderer(options) {
    this.options = options || exports.defaults;
  }

  var _proto = Renderer.prototype;

  _proto.code = function code(_code, infostring, escaped) {
    var lang = (infostring || '').match(/\S*/)[0];

    if (this.options.highlight) {
      var out = this.options.highlight(_code, lang);

      if (out != null && out !== _code) {
        escaped = true;
        _code = out;
      }
    }

    _code = _code.replace(/\n$/, '') + '\n';

    if (!lang) {
      return '<pre><code>' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
    }

    return '<pre><code class="' + this.options.langPrefix + escape(lang, true) + '">' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
  }
  /**
   * @param {string} quote
   */
  ;

  _proto.blockquote = function blockquote(quote) {
    return "<blockquote>\n" + quote + "</blockquote>\n";
  };

  _proto.html = function html(_html) {
    return _html;
  }
  /**
   * @param {string} text
   * @param {string} level
   * @param {string} raw
   * @param {any} slugger
   */
  ;

  _proto.heading = function heading(text, level, raw, slugger) {
    if (this.options.headerIds) {
      var id = this.options.headerPrefix + slugger.slug(raw);
      return "<h" + level + " id=\"" + id + "\">" + text + "</h" + level + ">\n";
    } // ignore IDs


    return "<h" + level + ">" + text + "</h" + level + ">\n";
  };

  _proto.hr = function hr() {
    return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
  };

  _proto.list = function list(body, ordered, start) {
    var type = ordered ? 'ol' : 'ul',
        startatt = ordered && start !== 1 ? ' start="' + start + '"' : '';
    return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
  }
  /**
   * @param {string} text
   */
  ;

  _proto.listitem = function listitem(text) {
    return "<li>" + text + "</li>\n";
  };

  _proto.checkbox = function checkbox(checked) {
    return '<input ' + (checked ? 'checked="" ' : '') + 'disabled="" type="checkbox"' + (this.options.xhtml ? ' /' : '') + '> ';
  }
  /**
   * @param {string} text
   */
  ;

  _proto.paragraph = function paragraph(text) {
    return "<p>" + text + "</p>\n";
  }
  /**
   * @param {string} header
   * @param {string} body
   */
  ;

  _proto.table = function table(header, body) {
    if (body) body = "<tbody>" + body + "</tbody>";
    return '<table>\n' + '<thead>\n' + header + '</thead>\n' + body + '</table>\n';
  }
  /**
   * @param {string} content
   */
  ;

  _proto.tablerow = function tablerow(content) {
    return "<tr>\n" + content + "</tr>\n";
  };

  _proto.tablecell = function tablecell(content, flags) {
    var type = flags.header ? 'th' : 'td';
    var tag = flags.align ? "<" + type + " align=\"" + flags.align + "\">" : "<" + type + ">";
    return tag + content + ("</" + type + ">\n");
  }
  /**
   * span level renderer
   * @param {string} text
   */
  ;

  _proto.strong = function strong(text) {
    return "<strong>" + text + "</strong>";
  }
  /**
   * @param {string} text
   */
  ;

  _proto.em = function em(text) {
    return "<em>" + text + "</em>";
  }
  /**
   * @param {string} text
   */
  ;

  _proto.codespan = function codespan(text) {
    return "<code>" + text + "</code>";
  };

  _proto.br = function br() {
    return this.options.xhtml ? '<br/>' : '<br>';
  }
  /**
   * @param {string} text
   */
  ;

  _proto.del = function del(text) {
    return "<del>" + text + "</del>";
  }
  /**
   * @param {string} href
   * @param {string} title
   * @param {string} text
   */
  ;

  _proto.link = function link(href, title, text) {
    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);

    if (href === null) {
      return text;
    }

    var out = '<a href="' + escape(href) + '"';

    if (title) {
      out += ' title="' + title + '"';
    }

    out += '>' + text + '</a>';
    return out;
  }
  /**
   * @param {string} href
   * @param {string} title
   * @param {string} text
   */
  ;

  _proto.image = function image(href, title, text) {
    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);

    if (href === null) {
      return text;
    }

    var out = "<img src=\"" + href + "\" alt=\"" + text + "\"";

    if (title) {
      out += " title=\"" + title + "\"";
    }

    out += this.options.xhtml ? '/>' : '>';
    return out;
  };

  _proto.text = function text(_text) {
    return _text;
  };

  return Renderer;
}();

/**
 * TextRenderer
 * returns only the textual part of the token
 */
var TextRenderer = /*#__PURE__*/function () {
  function TextRenderer() {}

  var _proto = TextRenderer.prototype;

  // no need for block level renderers
  _proto.strong = function strong(text) {
    return text;
  };

  _proto.em = function em(text) {
    return text;
  };

  _proto.codespan = function codespan(text) {
    return text;
  };

  _proto.del = function del(text) {
    return text;
  };

  _proto.html = function html(text) {
    return text;
  };

  _proto.text = function text(_text) {
    return _text;
  };

  _proto.link = function link(href, title, text) {
    return '' + text;
  };

  _proto.image = function image(href, title, text) {
    return '' + text;
  };

  _proto.br = function br() {
    return '';
  };

  return TextRenderer;
}();

/**
 * Slugger generates header id
 */
var Slugger = /*#__PURE__*/function () {
  function Slugger() {
    this.seen = {};
  }
  /**
   * @param {string} value
   */


  var _proto = Slugger.prototype;

  _proto.serialize = function serialize(value) {
    return value.toLowerCase().trim() // remove html tags
    .replace(/<[!\/a-z].*?>/ig, '') // remove unwanted chars
    .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '').replace(/\s/g, '-');
  }
  /**
   * Finds the next safe (unique) slug to use
   * @param {string} originalSlug
   * @param {boolean} isDryRun
   */
  ;

  _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {
    var slug = originalSlug;
    var occurenceAccumulator = 0;

    if (this.seen.hasOwnProperty(slug)) {
      occurenceAccumulator = this.seen[originalSlug];

      do {
        occurenceAccumulator++;
        slug = originalSlug + '-' + occurenceAccumulator;
      } while (this.seen.hasOwnProperty(slug));
    }

    if (!isDryRun) {
      this.seen[originalSlug] = occurenceAccumulator;
      this.seen[slug] = 0;
    }

    return slug;
  }
  /**
   * Convert string to unique id
   * @param {object} [options]
   * @param {boolean} [options.dryrun] Generates the next unique slug without
   * updating the internal accumulator.
   */
  ;

  _proto.slug = function slug(value, options) {
    if (options === void 0) {
      options = {};
    }

    var slug = this.serialize(value);
    return this.getNextSafeSlug(slug, options.dryrun);
  };

  return Slugger;
}();

/**
 * Parsing & Compiling
 */

var Parser = /*#__PURE__*/function () {
  function Parser(options) {
    this.options = options || exports.defaults;
    this.options.renderer = this.options.renderer || new Renderer();
    this.renderer = this.options.renderer;
    this.renderer.options = this.options;
    this.textRenderer = new TextRenderer();
    this.slugger = new Slugger();
  }
  /**
   * Static Parse Method
   */


  Parser.parse = function parse(tokens, options) {
    var parser = new Parser(options);
    return parser.parse(tokens);
  }
  /**
   * Static Parse Inline Method
   */
  ;

  Parser.parseInline = function parseInline(tokens, options) {
    var parser = new Parser(options);
    return parser.parseInline(tokens);
  }
  /**
   * Parse Loop
   */
  ;

  var _proto = Parser.prototype;

  _proto.parse = function parse(tokens, top) {
    if (top === void 0) {
      top = true;
    }

    var out = '',
        i,
        j,
        k,
        l2,
        l3,
        row,
        cell,
        header,
        body,
        token,
        ordered,
        start,
        loose,
        itemBody,
        item,
        checked,
        task,
        checkbox,
        ret;
    var l = tokens.length;

    for (i = 0; i < l; i++) {
      token = tokens[i]; // Run any renderer extensions

      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
        ret = this.options.extensions.renderers[token.type].call({
          parser: this
        }, token);

        if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
          out += ret || '';
          continue;
        }
      }

      switch (token.type) {
        case 'space':
          {
            continue;
          }

        case 'hr':
          {
            out += this.renderer.hr();
            continue;
          }

        case 'heading':
          {
            out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);
            continue;
          }

        case 'code':
          {
            out += this.renderer.code(token.text, token.lang, token.escaped);
            continue;
          }

        case 'table':
          {
            header = ''; // header

            cell = '';
            l2 = token.header.length;

            for (j = 0; j < l2; j++) {
              cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {
                header: true,
                align: token.align[j]
              });
            }

            header += this.renderer.tablerow(cell);
            body = '';
            l2 = token.rows.length;

            for (j = 0; j < l2; j++) {
              row = token.rows[j];
              cell = '';
              l3 = row.length;

              for (k = 0; k < l3; k++) {
                cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {
                  header: false,
                  align: token.align[k]
                });
              }

              body += this.renderer.tablerow(cell);
            }

            out += this.renderer.table(header, body);
            continue;
          }

        case 'blockquote':
          {
            body = this.parse(token.tokens);
            out += this.renderer.blockquote(body);
            continue;
          }

        case 'list':
          {
            ordered = token.ordered;
            start = token.start;
            loose = token.loose;
            l2 = token.items.length;
            body = '';

            for (j = 0; j < l2; j++) {
              item = token.items[j];
              checked = item.checked;
              task = item.task;
              itemBody = '';

              if (item.task) {
                checkbox = this.renderer.checkbox(checked);

                if (loose) {
                  if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
                    item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;

                    if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
                      item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
                    }
                  } else {
                    item.tokens.unshift({
                      type: 'text',
                      text: checkbox
                    });
                  }
                } else {
                  itemBody += checkbox;
                }
              }

              itemBody += this.parse(item.tokens, loose);
              body += this.renderer.listitem(itemBody, task, checked);
            }

            out += this.renderer.list(body, ordered, start);
            continue;
          }

        case 'html':
          {
            // TODO parse inline content if parameter markdown=1
            out += this.renderer.html(token.text);
            continue;
          }

        case 'paragraph':
          {
            out += this.renderer.paragraph(this.parseInline(token.tokens));
            continue;
          }

        case 'text':
          {
            body = token.tokens ? this.parseInline(token.tokens) : token.text;

            while (i + 1 < l && tokens[i + 1].type === 'text') {
              token = tokens[++i];
              body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);
            }

            out += top ? this.renderer.paragraph(body) : body;
            continue;
          }

        default:
          {
            var errMsg = 'Token with "' + token.type + '" type was not found.';

            if (this.options.silent) {
              console.error(errMsg);
              return;
            } else {
              throw new Error(errMsg);
            }
          }
      }
    }

    return out;
  }
  /**
   * Parse Inline Tokens
   */
  ;

  _proto.parseInline = function parseInline(tokens, renderer) {
    renderer = renderer || this.renderer;
    var out = '',
        i,
        token,
        ret;
    var l = tokens.length;

    for (i = 0; i < l; i++) {
      token = tokens[i]; // Run any renderer extensions

      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
        ret = this.options.extensions.renderers[token.type].call({
          parser: this
        }, token);

        if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
          out += ret || '';
          continue;
        }
      }

      switch (token.type) {
        case 'escape':
          {
            out += renderer.text(token.text);
            break;
          }

        case 'html':
          {
            out += renderer.html(token.text);
            break;
          }

        case 'link':
          {
            out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));
            break;
          }

        case 'image':
          {
            out += renderer.image(token.href, token.title, token.text);
            break;
          }

        case 'strong':
          {
            out += renderer.strong(this.parseInline(token.tokens, renderer));
            break;
          }

        case 'em':
          {
            out += renderer.em(this.parseInline(token.tokens, renderer));
            break;
          }

        case 'codespan':
          {
            out += renderer.codespan(token.text);
            break;
          }

        case 'br':
          {
            out += renderer.br();
            break;
          }

        case 'del':
          {
            out += renderer.del(this.parseInline(token.tokens, renderer));
            break;
          }

        case 'text':
          {
            out += renderer.text(token.text);
            break;
          }

        default:
          {
            var errMsg = 'Token with "' + token.type + '" type was not found.';

            if (this.options.silent) {
              console.error(errMsg);
              return;
            } else {
              throw new Error(errMsg);
            }
          }
      }
    }

    return out;
  };

  return Parser;
}();

/**
 * Marked
 */

function marked(src, opt, callback) {
  // throw error in case of non string input
  if (typeof src === 'undefined' || src === null) {
    throw new Error('marked(): input parameter is undefined or null');
  }

  if (typeof src !== 'string') {
    throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
  }

  if (typeof opt === 'function') {
    callback = opt;
    opt = null;
  }

  opt = merge({}, marked.defaults, opt || {});
  checkSanitizeDeprecation(opt);

  if (callback) {
    var highlight = opt.highlight;
    var tokens;

    try {
      tokens = Lexer.lex(src, opt);
    } catch (e) {
      return callback(e);
    }

    var done = function done(err) {
      var out;

      if (!err) {
        try {
          if (opt.walkTokens) {
            marked.walkTokens(tokens, opt.walkTokens);
          }

          out = Parser.parse(tokens, opt);
        } catch (e) {
          err = e;
        }
      }

      opt.highlight = highlight;
      return err ? callback(err) : callback(null, out);
    };

    if (!highlight || highlight.length < 3) {
      return done();
    }

    delete opt.highlight;
    if (!tokens.length) return done();
    var pending = 0;
    marked.walkTokens(tokens, function (token) {
      if (token.type === 'code') {
        pending++;
        setTimeout(function () {
          highlight(token.text, token.lang, function (err, code) {
            if (err) {
              return done(err);
            }

            if (code != null && code !== token.text) {
              token.text = code;
              token.escaped = true;
            }

            pending--;

            if (pending === 0) {
              done();
            }
          });
        }, 0);
      }
    });

    if (pending === 0) {
      done();
    }

    return;
  }

  function onError(e) {
    e.message += '\nPlease report this to https://github.com/markedjs/marked.';

    if (opt.silent) {
      return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
    }

    throw e;
  }

  try {
    var _tokens = Lexer.lex(src, opt);

    if (opt.walkTokens) {
      if (opt.async) {
        return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {
          return Parser.parse(_tokens, opt);
        })["catch"](onError);
      }

      marked.walkTokens(_tokens, opt.walkTokens);
    }

    return Parser.parse(_tokens, opt);
  } catch (e) {
    onError(e);
  }
}
/**
 * Options
 */

marked.options = marked.setOptions = function (opt) {
  merge(marked.defaults, opt);
  changeDefaults(marked.defaults);
  return marked;
};

marked.getDefaults = getDefaults;
marked.defaults = exports.defaults;
/**
 * Use Extension
 */

marked.use = function () {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  var opts = merge.apply(void 0, [{}].concat(args));
  var extensions = marked.defaults.extensions || {
    renderers: {},
    childTokens: {}
  };
  var hasExtensions;
  args.forEach(function (pack) {
    // ==-- Parse "addon" extensions --== //
    if (pack.extensions) {
      hasExtensions = true;
      pack.extensions.forEach(function (ext) {
        if (!ext.name) {
          throw new Error('extension name required');
        }

        if (ext.renderer) {
          // Renderer extensions
          var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;

          if (prevRenderer) {
            // Replace extension with func to run new extension but fall back if false
            extensions.renderers[ext.name] = function () {
              for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
                args[_key2] = arguments[_key2];
              }

              var ret = ext.renderer.apply(this, args);

              if (ret === false) {
                ret = prevRenderer.apply(this, args);
              }

              return ret;
            };
          } else {
            extensions.renderers[ext.name] = ext.renderer;
          }
        }

        if (ext.tokenizer) {
          // Tokenizer Extensions
          if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {
            throw new Error("extension level must be 'block' or 'inline'");
          }

          if (extensions[ext.level]) {
            extensions[ext.level].unshift(ext.tokenizer);
          } else {
            extensions[ext.level] = [ext.tokenizer];
          }

          if (ext.start) {
            // Function to check for start of token
            if (ext.level === 'block') {
              if (extensions.startBlock) {
                extensions.startBlock.push(ext.start);
              } else {
                extensions.startBlock = [ext.start];
              }
            } else if (ext.level === 'inline') {
              if (extensions.startInline) {
                extensions.startInline.push(ext.start);
              } else {
                extensions.startInline = [ext.start];
              }
            }
          }
        }

        if (ext.childTokens) {
          // Child tokens to be visited by walkTokens
          extensions.childTokens[ext.name] = ext.childTokens;
        }
      });
    } // ==-- Parse "overwrite" extensions --== //


    if (pack.renderer) {
      (function () {
        var renderer = marked.defaults.renderer || new Renderer();

        var _loop = function _loop(prop) {
          var prevRenderer = renderer[prop]; // Replace renderer with func to run extension, but fall back if false

          renderer[prop] = function () {
            for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
              args[_key3] = arguments[_key3];
            }

            var ret = pack.renderer[prop].apply(renderer, args);

            if (ret === false) {
              ret = prevRenderer.apply(renderer, args);
            }

            return ret;
          };
        };

        for (var prop in pack.renderer) {
          _loop(prop);
        }

        opts.renderer = renderer;
      })();
    }

    if (pack.tokenizer) {
      (function () {
        var tokenizer = marked.defaults.tokenizer || new Tokenizer();

        var _loop2 = function _loop2(prop) {
          var prevTokenizer = tokenizer[prop]; // Replace tokenizer with func to run extension, but fall back if false

          tokenizer[prop] = function () {
            for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
              args[_key4] = arguments[_key4];
            }

            var ret = pack.tokenizer[prop].apply(tokenizer, args);

            if (ret === false) {
              ret = prevTokenizer.apply(tokenizer, args);
            }

            return ret;
          };
        };

        for (var prop in pack.tokenizer) {
          _loop2(prop);
        }

        opts.tokenizer = tokenizer;
      })();
    } // ==-- Parse WalkTokens extensions --== //


    if (pack.walkTokens) {
      var _walkTokens = marked.defaults.walkTokens;

      opts.walkTokens = function (token) {
        var values = [];
        values.push(pack.walkTokens.call(this, token));

        if (_walkTokens) {
          values = values.concat(_walkTokens.call(this, token));
        }

        return values;
      };
    }

    if (hasExtensions) {
      opts.extensions = extensions;
    }

    marked.setOptions(opts);
  });
};
/**
 * Run callback for every token
 */


marked.walkTokens = function (tokens, callback) {
  var values = [];

  var _loop3 = function _loop3() {
    var token = _step.value;
    values = values.concat(callback.call(marked, token));

    switch (token.type) {
      case 'table':
        {
          for (var _iterator2 = _createForOfIteratorHelperLoose(token.header), _step2; !(_step2 = _iterator2()).done;) {
            var cell = _step2.value;
            values = values.concat(marked.walkTokens(cell.tokens, callback));
          }

          for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {
            var row = _step3.value;

            for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {
              var _cell = _step4.value;
              values = values.concat(marked.walkTokens(_cell.tokens, callback));
            }
          }

          break;
        }

      case 'list':
        {
          values = values.concat(marked.walkTokens(token.items, callback));
          break;
        }

      default:
        {
          if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {
            // Walk any extensions
            marked.defaults.extensions.childTokens[token.type].forEach(function (childTokens) {
              values = values.concat(marked.walkTokens(token[childTokens], callback));
            });
          } else if (token.tokens) {
            values = values.concat(marked.walkTokens(token.tokens, callback));
          }
        }
    }
  };

  for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
    _loop3();
  }

  return values;
};
/**
 * Parse Inline
 * @param {string} src
 */


marked.parseInline = function (src, opt) {
  // throw error in case of non string input
  if (typeof src === 'undefined' || src === null) {
    throw new Error('marked.parseInline(): input parameter is undefined or null');
  }

  if (typeof src !== 'string') {
    throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
  }

  opt = merge({}, marked.defaults, opt || {});
  checkSanitizeDeprecation(opt);

  try {
    var tokens = Lexer.lexInline(src, opt);

    if (opt.walkTokens) {
      marked.walkTokens(tokens, opt.walkTokens);
    }

    return Parser.parseInline(tokens, opt);
  } catch (e) {
    e.message += '\nPlease report this to https://github.com/markedjs/marked.';

    if (opt.silent) {
      return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
    }

    throw e;
  }
};
/**
 * Expose
 */


marked.Parser = Parser;
marked.parser = Parser.parse;
marked.Renderer = Renderer;
marked.TextRenderer = TextRenderer;
marked.Lexer = Lexer;
marked.lexer = Lexer.lex;
marked.Tokenizer = Tokenizer;
marked.Slugger = Slugger;
marked.parse = marked;
var options = marked.options;
var setOptions = marked.setOptions;
var use = marked.use;
var walkTokens = marked.walkTokens;
var parseInline = marked.parseInline;
var parse = marked;
var parser = Parser.parse;
var lexer = Lexer.lex;

exports.Lexer = Lexer;
exports.Parser = Parser;
exports.Renderer = Renderer;
exports.Slugger = Slugger;
exports.TextRenderer = TextRenderer;
exports.Tokenizer = Tokenizer;
exports.getDefaults = getDefaults;
exports.lexer = lexer;
exports.marked = marked;
exports.options = options;
exports.parse = parse;
exports.parseInline = parseInline;
exports.parser = parser;
exports.setOptions = setOptions;
exports.use = use;
exports.walkTokens = walkTokens;
/**
 * marked - a markdown parser
 * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed)
 * https://github.com/markedjs/marked
 */

/**
 * DO NOT EDIT THIS FILE
 * The code in this file is generated from files in ./src/
 */

function getDefaults() {
  return {
    async: false,
    baseUrl: null,
    breaks: false,
    extensions: null,
    gfm: true,
    headerIds: true,
    headerPrefix: '',
    highlight: null,
    langPrefix: 'language-',
    mangle: true,
    pedantic: false,
    renderer: null,
    sanitize: false,
    sanitizer: null,
    silent: false,
    smartypants: false,
    tokenizer: null,
    walkTokens: null,
    xhtml: false
  };
}

let defaults = getDefaults();

function changeDefaults(newDefaults) {
  defaults = newDefaults;
}

/**
 * Helpers
 */
const escapeTest = /[&<>"']/;
const escapeReplace = /[&<>"']/g;
const escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
const escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
const escapeReplacements = {
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;'
};
const getEscapeReplacement = (ch) => escapeReplacements[ch];
function escape(html, encode) {
  if (encode) {
    if (escapeTest.test(html)) {
      return html.replace(escapeReplace, getEscapeReplacement);
    }
  } else {
    if (escapeTestNoEncode.test(html)) {
      return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
    }
  }

  return html;
}

const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;

/**
 * @param {string} html
 */
function unescape(html) {
  // explicitly match decimal, hex, and named HTML entities
  return html.replace(unescapeTest, (_, n) => {
    n = n.toLowerCase();
    if (n === 'colon') return ':';
    if (n.charAt(0) === '#') {
      return n.charAt(1) === 'x'
        ? String.fromCharCode(parseInt(n.substring(2), 16))
        : String.fromCharCode(+n.substring(1));
    }
    return '';
  });
}

const caret = /(^|[^\[])\^/g;

/**
 * @param {string | RegExp} regex
 * @param {string} opt
 */
function edit(regex, opt) {
  regex = typeof regex === 'string' ? regex : regex.source;
  opt = opt || '';
  const obj = {
    replace: (name, val) => {
      val = val.source || val;
      val = val.replace(caret, '$1');
      regex = regex.replace(name, val);
      return obj;
    },
    getRegex: () => {
      return new RegExp(regex, opt);
    }
  };
  return obj;
}

const nonWordAndColonTest = /[^\w:]/g;
const originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;

/**
 * @param {boolean} sanitize
 * @param {string} base
 * @param {string} href
 */
function cleanUrl(sanitize, base, href) {
  if (sanitize) {
    let prot;
    try {
      prot = decodeURIComponent(unescape(href))
        .replace(nonWordAndColonTest, '')
        .toLowerCase();
    } catch (e) {
      return null;
    }
    if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
      return null;
    }
  }
  if (base && !originIndependentUrl.test(href)) {
    href = resolveUrl(base, href);
  }
  try {
    href = encodeURI(href).replace(/%25/g, '%');
  } catch (e) {
    return null;
  }
  return href;
}

const baseUrls = {};
const justDomain = /^[^:]+:\/*[^/]*$/;
const protocol = /^([^:]+:)[\s\S]*$/;
const domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;

/**
 * @param {string} base
 * @param {string} href
 */
function resolveUrl(base, href) {
  if (!baseUrls[' ' + base]) {
    // we can ignore everything in base after the last slash of its path component,
    // but we might need to add _that_
    // https://tools.ietf.org/html/rfc3986#section-3
    if (justDomain.test(base)) {
      baseUrls[' ' + base] = base + '/';
    } else {
      baseUrls[' ' + base] = rtrim(base, '/', true);
    }
  }
  base = baseUrls[' ' + base];
  const relativeBase = base.indexOf(':') === -1;

  if (href.substring(0, 2) === '//') {
    if (relativeBase) {
      return href;
    }
    return base.replace(protocol, '$1') + href;
  } else if (href.charAt(0) === '/') {
    if (relativeBase) {
      return href;
    }
    return base.replace(domain, '$1') + href;
  } else {
    return base + href;
  }
}

const noopTest = { exec: function noopTest() {} };

function merge(obj) {
  let i = 1,
    target,
    key;

  for (; i < arguments.length; i++) {
    target = arguments[i];
    for (key in target) {
      if (Object.prototype.hasOwnProperty.call(target, key)) {
        obj[key] = target[key];
      }
    }
  }

  return obj;
}

function splitCells(tableRow, count) {
  // ensure that every cell-delimiting pipe has a space
  // before it to distinguish it from an escaped pipe
  const row = tableRow.replace(/\|/g, (match, offset, str) => {
      let escaped = false,
        curr = offset;
      while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
      if (escaped) {
        // odd number of slashes means | is escaped
        // so we leave it alone
        return '|';
      } else {
        // add space before unescaped |
        return ' |';
      }
    }),
    cells = row.split(/ \|/);
  let i = 0;

  // First/last cell in a row cannot be empty if it has no leading/trailing pipe
  if (!cells[0].trim()) { cells.shift(); }
  if (cells.length > 0 && !cells[cells.length - 1].trim()) { cells.pop(); }

  if (cells.length > count) {
    cells.splice(count);
  } else {
    while (cells.length < count) cells.push('');
  }

  for (; i < cells.length; i++) {
    // leading or trailing whitespace is ignored per the gfm spec
    cells[i] = cells[i].trim().replace(/\\\|/g, '|');
  }
  return cells;
}

/**
 * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
 * /c*$/ is vulnerable to REDOS.
 *
 * @param {string} str
 * @param {string} c
 * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.
 */
function rtrim(str, c, invert) {
  const l = str.length;
  if (l === 0) {
    return '';
  }

  // Length of suffix matching the invert condition.
  let suffLen = 0;

  // Step left until we fail to match the invert condition.
  while (suffLen < l) {
    const currChar = str.charAt(l - suffLen - 1);
    if (currChar === c && !invert) {
      suffLen++;
    } else if (currChar !== c && invert) {
      suffLen++;
    } else {
      break;
    }
  }

  return str.slice(0, l - suffLen);
}

function findClosingBracket(str, b) {
  if (str.indexOf(b[1]) === -1) {
    return -1;
  }
  const l = str.length;
  let level = 0,
    i = 0;
  for (; i < l; i++) {
    if (str[i] === '\\') {
      i++;
    } else if (str[i] === b[0]) {
      level++;
    } else if (str[i] === b[1]) {
      level--;
      if (level < 0) {
        return i;
      }
    }
  }
  return -1;
}

function checkSanitizeDeprecation(opt) {
  if (opt && opt.sanitize && !opt.silent) {
    console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');
  }
}

// copied from https://stackoverflow.com/a/5450113/806777
/**
 * @param {string} pattern
 * @param {number} count
 */
function repeatString(pattern, count) {
  if (count < 1) {
    return '';
  }
  let result = '';
  while (count > 1) {
    if (count & 1) {
      result += pattern;
    }
    count >>= 1;
    pattern += pattern;
  }
  return result + pattern;
}

function outputLink(cap, link, raw, lexer) {
  const href = link.href;
  const title = link.title ? escape(link.title) : null;
  const text = cap[1].replace(/\\([\[\]])/g, '$1');

  if (cap[0].charAt(0) !== '!') {
    lexer.state.inLink = true;
    const token = {
      type: 'link',
      raw,
      href,
      title,
      text,
      tokens: lexer.inlineTokens(text)
    };
    lexer.state.inLink = false;
    return token;
  }
  return {
    type: 'image',
    raw,
    href,
    title,
    text: escape(text)
  };
}

function indentCodeCompensation(raw, text) {
  const matchIndentToCode = raw.match(/^(\s+)(?:```)/);

  if (matchIndentToCode === null) {
    return text;
  }

  const indentToCode = matchIndentToCode[1];

  return text
    .split('\n')
    .map(node => {
      const matchIndentInNode = node.match(/^\s+/);
      if (matchIndentInNode === null) {
        return node;
      }

      const [indentInNode] = matchIndentInNode;

      if (indentInNode.length >= indentToCode.length) {
        return node.slice(indentToCode.length);
      }

      return node;
    })
    .join('\n');
}

/**
 * Tokenizer
 */
class Tokenizer {
  constructor(options) {
    this.options = options || defaults;
  }

  space(src) {
    const cap = this.rules.block.newline.exec(src);
    if (cap && cap[0].length > 0) {
      return {
        type: 'space',
        raw: cap[0]
      };
    }
  }

  code(src) {
    const cap = this.rules.block.code.exec(src);
    if (cap) {
      const text = cap[0].replace(/^ {1,4}/gm, '');
      return {
        type: 'code',
        raw: cap[0],
        codeBlockStyle: 'indented',
        text: !this.options.pedantic
          ? rtrim(text, '\n')
          : text
      };
    }
  }

  fences(src) {
    const cap = this.rules.block.fences.exec(src);
    if (cap) {
      const raw = cap[0];
      const text = indentCodeCompensation(raw, cap[3] || '');

      return {
        type: 'code',
        raw,
        lang: cap[2] ? cap[2].trim() : cap[2],
        text
      };
    }
  }

  heading(src) {
    const cap = this.rules.block.heading.exec(src);
    if (cap) {
      let text = cap[2].trim();

      // remove trailing #s
      if (/#$/.test(text)) {
        const trimmed = rtrim(text, '#');
        if (this.options.pedantic) {
          text = trimmed.trim();
        } else if (!trimmed || / $/.test(trimmed)) {
          // CommonMark requires space before trailing #s
          text = trimmed.trim();
        }
      }

      return {
        type: 'heading',
        raw: cap[0],
        depth: cap[1].length,
        text,
        tokens: this.lexer.inline(text)
      };
    }
  }

  hr(src) {
    const cap = this.rules.block.hr.exec(src);
    if (cap) {
      return {
        type: 'hr',
        raw: cap[0]
      };
    }
  }

  blockquote(src) {
    const cap = this.rules.block.blockquote.exec(src);
    if (cap) {
      const text = cap[0].replace(/^ *>[ \t]?/gm, '');

      return {
        type: 'blockquote',
        raw: cap[0],
        tokens: this.lexer.blockTokens(text, []),
        text
      };
    }
  }

  list(src) {
    let cap = this.rules.block.list.exec(src);
    if (cap) {
      let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine,
        line, nextLine, rawLine, itemContents, endEarly;

      let bull = cap[1].trim();
      const isordered = bull.length > 1;

      const list = {
        type: 'list',
        raw: '',
        ordered: isordered,
        start: isordered ? +bull.slice(0, -1) : '',
        loose: false,
        items: []
      };

      bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`;

      if (this.options.pedantic) {
        bull = isordered ? bull : '[*+-]';
      }

      // Get next list item
      const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`);

      // Check if current bullet point can start a new List Item
      while (src) {
        endEarly = false;
        if (!(cap = itemRegex.exec(src))) {
          break;
        }

        if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)
          break;
        }

        raw = cap[0];
        src = src.substring(raw.length);

        line = cap[2].split('\n', 1)[0];
        nextLine = src.split('\n', 1)[0];

        if (this.options.pedantic) {
          indent = 2;
          itemContents = line.trimLeft();
        } else {
          indent = cap[2].search(/[^ ]/); // Find first non-space char
          indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent
          itemContents = line.slice(indent);
          indent += cap[1].length;
        }

        blankLine = false;

        if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line
          raw += nextLine + '\n';
          src = src.substring(nextLine.length + 1);
          endEarly = true;
        }

        if (!endEarly) {
          const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))`);
          const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`);
          const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`);
          const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);

          // Check if following lines should be included in List Item
          while (src) {
            rawLine = src.split('\n', 1)[0];
            line = rawLine;

            // Re-align to follow commonmark nesting rules
            if (this.options.pedantic) {
              line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');
            }

            // End list item if found code fences
            if (fencesBeginRegex.test(line)) {
              break;
            }

            // End list item if found start of new heading
            if (headingBeginRegex.test(line)) {
              break;
            }

            // End list item if found start of new bullet
            if (nextBulletRegex.test(line)) {
              break;
            }

            // Horizontal rule found
            if (hrRegex.test(src)) {
              break;
            }

            if (line.search(/[^ ]/) >= indent || !line.trim()) { // Dedent if possible
              itemContents += '\n' + line.slice(indent);
            } else if (!blankLine) { // Until blank line, item doesn't need indentation
              itemContents += '\n' + line;
            } else { // Otherwise, improper indentation ends this item
              break;
            }

            if (!blankLine && !line.trim()) { // Check if current line is blank
              blankLine = true;
            }

            raw += rawLine + '\n';
            src = src.substring(rawLine.length + 1);
          }
        }

        if (!list.loose) {
          // If the previous item ended with a blank line, the list is loose
          if (endsWithBlankLine) {
            list.loose = true;
          } else if (/\n *\n *$/.test(raw)) {
            endsWithBlankLine = true;
          }
        }

        // Check for task list items
        if (this.options.gfm) {
          istask = /^\[[ xX]\] /.exec(itemContents);
          if (istask) {
            ischecked = istask[0] !== '[ ] ';
            itemContents = itemContents.replace(/^\[[ xX]\] +/, '');
          }
        }

        list.items.push({
          type: 'list_item',
          raw,
          task: !!istask,
          checked: ischecked,
          loose: false,
          text: itemContents
        });

        list.raw += raw;
      }

      // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
      list.items[list.items.length - 1].raw = raw.trimRight();
      list.items[list.items.length - 1].text = itemContents.trimRight();
      list.raw = list.raw.trimRight();

      const l = list.items.length;

      // Item child tokens handled here at end because we needed to have the final item to trim it first
      for (i = 0; i < l; i++) {
        this.lexer.state.top = false;
        list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
        const spacers = list.items[i].tokens.filter(t => t.type === 'space');
        const hasMultipleLineBreaks = spacers.every(t => {
          const chars = t.raw.split('');
          let lineBreaks = 0;
          for (const char of chars) {
            if (char === '\n') {
              lineBreaks += 1;
            }
            if (lineBreaks > 1) {
              return true;
            }
          }

          return false;
        });

        if (!list.loose && spacers.length && hasMultipleLineBreaks) {
          // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item
          list.loose = true;
          list.items[i].loose = true;
        }
      }

      return list;
    }
  }

  html(src) {
    const cap = this.rules.block.html.exec(src);
    if (cap) {
      const token = {
        type: 'html',
        raw: cap[0],
        pre: !this.options.sanitizer
          && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
        text: cap[0]
      };
      if (this.options.sanitize) {
        const text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);
        token.type = 'paragraph';
        token.text = text;
        token.tokens = this.lexer.inline(text);
      }
      return token;
    }
  }

  def(src) {
    const cap = this.rules.block.def.exec(src);
    if (cap) {
      if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
      const tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
      return {
        type: 'def',
        tag,
        raw: cap[0],
        href: cap[2],
        title: cap[3]
      };
    }
  }

  table(src) {
    const cap = this.rules.block.table.exec(src);
    if (cap) {
      const item = {
        type: 'table',
        header: splitCells(cap[1]).map(c => { return { text: c }; }),
        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
        rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []
      };

      if (item.header.length === item.align.length) {
        item.raw = cap[0];

        let l = item.align.length;
        let i, j, k, row;
        for (i = 0; i < l; i++) {
          if (/^ *-+: *$/.test(item.align[i])) {
            item.align[i] = 'right';
          } else if (/^ *:-+: *$/.test(item.align[i])) {
            item.align[i] = 'center';
          } else if (/^ *:-+ *$/.test(item.align[i])) {
            item.align[i] = 'left';
          } else {
            item.align[i] = null;
          }
        }

        l = item.rows.length;
        for (i = 0; i < l; i++) {
          item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; });
        }

        // parse child tokens inside headers and cells

        // header child tokens
        l = item.header.length;
        for (j = 0; j < l; j++) {
          item.header[j].tokens = this.lexer.inline(item.header[j].text);
        }

        // cell child tokens
        l = item.rows.length;
        for (j = 0; j < l; j++) {
          row = item.rows[j];
          for (k = 0; k < row.length; k++) {
            row[k].tokens = this.lexer.inline(row[k].text);
          }
        }

        return item;
      }
    }
  }

  lheading(src) {
    const cap = this.rules.block.lheading.exec(src);
    if (cap) {
      return {
        type: 'heading',
        raw: cap[0],
        depth: cap[2].charAt(0) === '=' ? 1 : 2,
        text: cap[1],
        tokens: this.lexer.inline(cap[1])
      };
    }
  }

  paragraph(src) {
    const cap = this.rules.block.paragraph.exec(src);
    if (cap) {
      const text = cap[1].charAt(cap[1].length - 1) === '\n'
        ? cap[1].slice(0, -1)
        : cap[1];
      return {
        type: 'paragraph',
        raw: cap[0],
        text,
        tokens: this.lexer.inline(text)
      };
    }
  }

  text(src) {
    const cap = this.rules.block.text.exec(src);
    if (cap) {
      return {
        type: 'text',
        raw: cap[0],
        text: cap[0],
        tokens: this.lexer.inline(cap[0])
      };
    }
  }

  escape(src) {
    const cap = this.rules.inline.escape.exec(src);
    if (cap) {
      return {
        type: 'escape',
        raw: cap[0],
        text: escape(cap[1])
      };
    }
  }

  tag(src) {
    const cap = this.rules.inline.tag.exec(src);
    if (cap) {
      if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
        this.lexer.state.inLink = true;
      } else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
        this.lexer.state.inLink = false;
      }
      if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
        this.lexer.state.inRawBlock = true;
      } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
        this.lexer.state.inRawBlock = false;
      }

      return {
        type: this.options.sanitize
          ? 'text'
          : 'html',
        raw: cap[0],
        inLink: this.lexer.state.inLink,
        inRawBlock: this.lexer.state.inRawBlock,
        text: this.options.sanitize
          ? (this.options.sanitizer
            ? this.options.sanitizer(cap[0])
            : escape(cap[0]))
          : cap[0]
      };
    }
  }

  link(src) {
    const cap = this.rules.inline.link.exec(src);
    if (cap) {
      const trimmedUrl = cap[2].trim();
      if (!this.options.pedantic && /^</.test(trimmedUrl)) {
        // commonmark requires matching angle brackets
        if (!(/>$/.test(trimmedUrl))) {
          return;
        }

        // ending angle bracket cannot be escaped
        const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\');
        if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
          return;
        }
      } else {
        // find closing parenthesis
        const lastParenIndex = findClosingBracket(cap[2], '()');
        if (lastParenIndex > -1) {
          const start = cap[0].indexOf('!') === 0 ? 5 : 4;
          const linkLen = start + cap[1].length + lastParenIndex;
          cap[2] = cap[2].substring(0, lastParenIndex);
          cap[0] = cap[0].substring(0, linkLen).trim();
          cap[3] = '';
        }
      }
      let href = cap[2];
      let title = '';
      if (this.options.pedantic) {
        // split pedantic href and title
        const link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);

        if (link) {
          href = link[1];
          title = link[3];
        }
      } else {
        title = cap[3] ? cap[3].slice(1, -1) : '';
      }

      href = href.trim();
      if (/^</.test(href)) {
        if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {
          // pedantic allows starting angle bracket without ending angle bracket
          href = href.slice(1);
        } else {
          href = href.slice(1, -1);
        }
      }
      return outputLink(cap, {
        href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
        title: title ? title.replace(this.rules.inline._escapes, '$1') : title
      }, cap[0], this.lexer);
    }
  }

  reflink(src, links) {
    let cap;
    if ((cap = this.rules.inline.reflink.exec(src))
        || (cap = this.rules.inline.nolink.exec(src))) {
      let link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
      link = links[link.toLowerCase()];
      if (!link || !link.href) {
        const text = cap[0].charAt(0);
        return {
          type: 'text',
          raw: text,
          text
        };
      }
      return outputLink(cap, link, cap[0], this.lexer);
    }
  }

  emStrong(src, maskedSrc, prevChar = '') {
    let match = this.rules.inline.emStrong.lDelim.exec(src);
    if (!match) return;

    // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well
    if (match[3] && prevChar.match(/[\p{L}\p{N}]/u)) return;

    const nextChar = match[1] || match[2] || '';

    if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {
      const lLength = match[0].length - 1;
      let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;

      const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
      endReg.lastIndex = 0;

      // Clip maskedSrc to same section of string as src (move to lexer?)
      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);

      while ((match = endReg.exec(maskedSrc)) != null) {
        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];

        if (!rDelim) continue; // skip single * in __abc*abc__

        rLength = rDelim.length;

        if (match[3] || match[4]) { // found another Left Delim
          delimTotal += rLength;
          continue;
        } else if (match[5] || match[6]) { // either Left or Right Delim
          if (lLength % 3 && !((lLength + rLength) % 3)) {
            midDelimTotal += rLength;
            continue; // CommonMark Emphasis Rules 9-10
          }
        }

        delimTotal -= rLength;

        if (delimTotal > 0) continue; // Haven't found enough closing delimiters

        // Remove extra characters. *a*** -> *a*
        rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);

        // Create `em` if smallest delimiter has odd char count. *a***
        if (Math.min(lLength, rLength) % 2) {
          const text = src.slice(1, lLength + match.index + rLength);
          return {
            type: 'em',
            raw: src.slice(0, lLength + match.index + rLength + 1),
            text,
            tokens: this.lexer.inlineTokens(text)
          };
        }

        // Create 'strong' if smallest delimiter has even char count. **a***
        const text = src.slice(2, lLength + match.index + rLength - 1);
        return {
          type: 'strong',
          raw: src.slice(0, lLength + match.index + rLength + 1),
          text,
          tokens: this.lexer.inlineTokens(text)
        };
      }
    }
  }

  codespan(src) {
    const cap = this.rules.inline.code.exec(src);
    if (cap) {
      let text = cap[2].replace(/\n/g, ' ');
      const hasNonSpaceChars = /[^ ]/.test(text);
      const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
      if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
        text = text.substring(1, text.length - 1);
      }
      text = escape(text, true);
      return {
        type: 'codespan',
        raw: cap[0],
        text
      };
    }
  }

  br(src) {
    const cap = this.rules.inline.br.exec(src);
    if (cap) {
      return {
        type: 'br',
        raw: cap[0]
      };
    }
  }

  del(src) {
    const cap = this.rules.inline.del.exec(src);
    if (cap) {
      return {
        type: 'del',
        raw: cap[0],
        text: cap[2],
        tokens: this.lexer.inlineTokens(cap[2])
      };
    }
  }

  autolink(src, mangle) {
    const cap = this.rules.inline.autolink.exec(src);
    if (cap) {
      let text, href;
      if (cap[2] === '@') {
        text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);
        href = 'mailto:' + text;
      } else {
        text = escape(cap[1]);
        href = text;
      }

      return {
        type: 'link',
        raw: cap[0],
        text,
        href,
        tokens: [
          {
            type: 'text',
            raw: text,
            text
          }
        ]
      };
    }
  }

  url(src, mangle) {
    let cap;
    if (cap = this.rules.inline.url.exec(src)) {
      let text, href;
      if (cap[2] === '@') {
        text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);
        href = 'mailto:' + text;
      } else {
        // do extended autolink path validation
        let prevCapZero;
        do {
          prevCapZero = cap[0];
          cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
        } while (prevCapZero !== cap[0]);
        text = escape(cap[0]);
        if (cap[1] === 'www.') {
          href = 'http://' + text;
        } else {
          href = text;
        }
      }
      return {
        type: 'link',
        raw: cap[0],
        text,
        href,
        tokens: [
          {
            type: 'text',
            raw: text,
            text
          }
        ]
      };
    }
  }

  inlineText(src, smartypants) {
    const cap = this.rules.inline.text.exec(src);
    if (cap) {
      let text;
      if (this.lexer.state.inRawBlock) {
        text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0];
      } else {
        text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
      }
      return {
        type: 'text',
        raw: cap[0],
        text
      };
    }
  }
}

/**
 * Block-Level Grammar
 */
const block = {
  newline: /^(?: *(?:\n|$))+/,
  code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
  fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,
  hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,
  heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
  blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
  list: /^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,
  html: '^ {0,3}(?:' // optional indentation
    + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
    + '|comment[^\\n]*(\\n+|$)' // (2)
    + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3)
    + '|<![A-Z][\\s\\S]*?(?:>\\n*|$)' // (4)
    + '|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)' // (5)
    + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6)
    + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag
    + '|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag
    + ')',
  def: /^ {0,3}\[(label)\]: *(?:\n *)?<?([^\s>]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,
  table: noopTest,
  lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
  // regex template, placeholders will be replaced according to different paragraph
  // interruption rules of commonmark and the original markdown spec:
  _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,
  text: /^[^\n]+/
};

block._label = /(?!\s*\])(?:\\.|[^\[\]\\])+/;
block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
block.def = edit(block.def)
  .replace('label', block._label)
  .replace('title', block._title)
  .getRegex();

block.bullet = /(?:[*+-]|\d{1,9}[.)])/;
block.listItemStart = edit(/^( *)(bull) */)
  .replace('bull', block.bullet)
  .getRegex();

block.list = edit(block.list)
  .replace(/bull/g, block.bullet)
  .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
  .replace('def', '\\n+(?=' + block.def.source + ')')
  .getRegex();

block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
  + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
  + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
  + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
  + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
  + '|track|ul';
block._comment = /<!--(?!-?>)[\s\S]*?(?:-->|$)/;
block.html = edit(block.html, 'i')
  .replace('comment', block._comment)
  .replace('tag', block._tag)
  .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
  .getRegex();

block.paragraph = edit(block._paragraph)
  .replace('hr', block.hr)
  .replace('heading', ' {0,3}#{1,6} ')
  .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
  .replace('|table', '')
  .replace('blockquote', ' {0,3}>')
  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n')
  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
  .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
  .getRegex();

block.blockquote = edit(block.blockquote)
  .replace('paragraph', block.paragraph)
  .getRegex();

/**
 * Normal Block Grammar
 */

block.normal = merge({}, block);

/**
 * GFM Block Grammar
 */

block.gfm = merge({}, block.normal, {
  table: '^ *([^\\n ].*\\|.*)\\n' // Header
    + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align
    + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells
});

block.gfm.table = edit(block.gfm.table)
  .replace('hr', block.hr)
  .replace('heading', ' {0,3}#{1,6} ')
  .replace('blockquote', ' {0,3}>')
  .replace('code', ' {4}[^\\n]')
  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n')
  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
  .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
  .getRegex();

block.gfm.paragraph = edit(block._paragraph)
  .replace('hr', block.hr)
  .replace('heading', ' {0,3}#{1,6} ')
  .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
  .replace('table', block.gfm.table) // interrupt paragraphs with table
  .replace('blockquote', ' {0,3}>')
  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n')
  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
  .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
  .getRegex();
/**
 * Pedantic grammar (original John Gruber's loose markdown specification)
 */

block.pedantic = merge({}, block.normal, {
  html: edit(
    '^ *(?:comment *(?:\\n|\\s*$)'
    + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
    + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
    .replace('comment', block._comment)
    .replace(/tag/g, '(?!(?:'
      + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
      + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
      + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
    .getRegex(),
  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
  heading: /^(#{1,6})(.*)(?:\n+|$)/,
  fences: noopTest, // fences not supported
  paragraph: edit(block.normal._paragraph)
    .replace('hr', block.hr)
    .replace('heading', ' *#{1,6} *[^\n]')
    .replace('lheading', block.lheading)
    .replace('blockquote', ' {0,3}>')
    .replace('|fences', '')
    .replace('|list', '')
    .replace('|html', '')
    .getRegex()
});

/**
 * Inline-Level Grammar
 */
const inline = {
  escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
  autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
  url: noopTest,
  tag: '^comment'
    + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
    + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
    + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
    + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
    + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
  link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
  reflink: /^!?\[(label)\]\[(ref)\]/,
  nolink: /^!?\[(ref)\](?:\[\])?/,
  reflinkSearch: 'reflink|nolink(?!\\()',
  emStrong: {
    lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,
    //        (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left.  (5) and (6) can be either Left or Right.
    //          () Skip orphan inside strong  () Consume to delim (1) #***                (2) a***#, a***                   (3) #***a, ***a                 (4) ***#              (5) #***#                 (6) a***a
    rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,
    rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _
  },
  code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
  br: /^( {2,}|\\)\n(?!\s*$)/,
  del: noopTest,
  text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
  punctuation: /^([\spunctuation])/
};

// list of punctuation marks from CommonMark spec
// without * and _ to handle the different emphasis markers * and _
inline._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();

// sequences em should skip over [title](link), `code`, <html>
inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
inline.escapedEmSt = /\\\*|\\_/g;

inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();

inline.emStrong.lDelim = edit(inline.emStrong.lDelim)
  .replace(/punct/g, inline._punctuation)
  .getRegex();

inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g')
  .replace(/punct/g, inline._punctuation)
  .getRegex();

inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g')
  .replace(/punct/g, inline._punctuation)
  .getRegex();

inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;

inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
inline.autolink = edit(inline.autolink)
  .replace('scheme', inline._scheme)
  .replace('email', inline._email)
  .getRegex();

inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;

inline.tag = edit(inline.tag)
  .replace('comment', inline._comment)
  .replace('attribute', inline._attribute)
  .getRegex();

inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;
inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;

inline.link = edit(inline.link)
  .replace('label', inline._label)
  .replace('href', inline._href)
  .replace('title', inline._title)
  .getRegex();

inline.reflink = edit(inline.reflink)
  .replace('label', inline._label)
  .replace('ref', block._label)
  .getRegex();

inline.nolink = edit(inline.nolink)
  .replace('ref', block._label)
  .getRegex();

inline.reflinkSearch = edit(inline.reflinkSearch, 'g')
  .replace('reflink', inline.reflink)
  .replace('nolink', inline.nolink)
  .getRegex();

/**
 * Normal Inline Grammar
 */

inline.normal = merge({}, inline);

/**
 * Pedantic Inline Grammar
 */

inline.pedantic = merge({}, inline.normal, {
  strong: {
    start: /^__|\*\*/,
    middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
    endAst: /\*\*(?!\*)/g,
    endUnd: /__(?!_)/g
  },
  em: {
    start: /^_|\*/,
    middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,
    endAst: /\*(?!\*)/g,
    endUnd: /_(?!_)/g
  },
  link: edit(/^!?\[(label)\]\((.*?)\)/)
    .replace('label', inline._label)
    .getRegex(),
  reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
    .replace('label', inline._label)
    .getRegex()
});

/**
 * GFM Inline Grammar
 */

inline.gfm = merge({}, inline.normal, {
  escape: edit(inline.escape).replace('])', '~|])').getRegex(),
  _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
  url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
  _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
  del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
  text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
});

inline.gfm.url = edit(inline.gfm.url, 'i')
  .replace('email', inline.gfm._extended_email)
  .getRegex();
/**
 * GFM + Line Breaks Inline Grammar
 */

inline.breaks = merge({}, inline.gfm, {
  br: edit(inline.br).replace('{2,}', '*').getRegex(),
  text: edit(inline.gfm.text)
    .replace('\\b_', '\\b_| {2,}\\n')
    .replace(/\{2,\}/g, '*')
    .getRegex()
});

/**
 * smartypants text replacement
 * @param {string} text
 */
function smartypants(text) {
  return text
    // em-dashes
    .replace(/---/g, '\u2014')
    // en-dashes
    .replace(/--/g, '\u2013')
    // opening singles
    .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
    // closing singles & apostrophes
    .replace(/'/g, '\u2019')
    // opening doubles
    .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
    // closing doubles
    .replace(/"/g, '\u201d')
    // ellipses
    .replace(/\.{3}/g, '\u2026');
}

/**
 * mangle email addresses
 * @param {string} text
 */
function mangle(text) {
  let out = '',
    i,
    ch;

  const l = text.length;
  for (i = 0; i < l; i++) {
    ch = text.charCodeAt(i);
    if (Math.random() > 0.5) {
      ch = 'x' + ch.toString(16);
    }
    out += '&#' + ch + ';';
  }

  return out;
}

/**
 * Block Lexer
 */
class Lexer {
  constructor(options) {
    this.tokens = [];
    this.tokens.links = Object.create(null);
    this.options = options || defaults;
    this.options.tokenizer = this.options.tokenizer || new Tokenizer();
    this.tokenizer = this.options.tokenizer;
    this.tokenizer.options = this.options;
    this.tokenizer.lexer = this;
    this.inlineQueue = [];
    this.state = {
      inLink: false,
      inRawBlock: false,
      top: true
    };

    const rules = {
      block: block.normal,
      inline: inline.normal
    };

    if (this.options.pedantic) {
      rules.block = block.pedantic;
      rules.inline = inline.pedantic;
    } else if (this.options.gfm) {
      rules.block = block.gfm;
      if (this.options.breaks) {
        rules.inline = inline.breaks;
      } else {
        rules.inline = inline.gfm;
      }
    }
    this.tokenizer.rules = rules;
  }

  /**
   * Expose Rules
   */
  static get rules() {
    return {
      block,
      inline
    };
  }

  /**
   * Static Lex Method
   */
  static lex(src, options) {
    const lexer = new Lexer(options);
    return lexer.lex(src);
  }

  /**
   * Static Lex Inline Method
   */
  static lexInline(src, options) {
    const lexer = new Lexer(options);
    return lexer.inlineTokens(src);
  }

  /**
   * Preprocessing
   */
  lex(src) {
    src = src
      .replace(/\r\n|\r/g, '\n');

    this.blockTokens(src, this.tokens);

    let next;
    while (next = this.inlineQueue.shift()) {
      this.inlineTokens(next.src, next.tokens);
    }

    return this.tokens;
  }

  /**
   * Lexing
   */
  blockTokens(src, tokens = []) {
    if (this.options.pedantic) {
      src = src.replace(/\t/g, '    ').replace(/^ +$/gm, '');
    } else {
      src = src.replace(/^( *)(\t+)/gm, (_, leading, tabs) => {
        return leading + '    '.repeat(tabs.length);
      });
    }

    let token, lastToken, cutSrc, lastParagraphClipped;

    while (src) {
      if (this.options.extensions
        && this.options.extensions.block
        && this.options.extensions.block.some((extTokenizer) => {
          if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
            src = src.substring(token.raw.length);
            tokens.push(token);
            return true;
          }
          return false;
        })) {
        continue;
      }

      // newline
      if (token = this.tokenizer.space(src)) {
        src = src.substring(token.raw.length);
        if (token.raw.length === 1 && tokens.length > 0) {
          // if there's a single \n as a spacer, it's terminating the last line,
          // so move it there so that we don't get unecessary paragraph tags
          tokens[tokens.length - 1].raw += '\n';
        } else {
          tokens.push(token);
        }
        continue;
      }

      // code
      if (token = this.tokenizer.code(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        // An indented code block cannot interrupt a paragraph.
        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.text;
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      // fences
      if (token = this.tokenizer.fences(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // heading
      if (token = this.tokenizer.heading(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // hr
      if (token = this.tokenizer.hr(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // blockquote
      if (token = this.tokenizer.blockquote(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // list
      if (token = this.tokenizer.list(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // html
      if (token = this.tokenizer.html(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // def
      if (token = this.tokenizer.def(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.raw;
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else if (!this.tokens.links[token.tag]) {
          this.tokens.links[token.tag] = {
            href: token.href,
            title: token.title
          };
        }
        continue;
      }

      // table (gfm)
      if (token = this.tokenizer.table(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // lheading
      if (token = this.tokenizer.lheading(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // top-level paragraph
      // prevent paragraph consuming extensions by clipping 'src' to extension start
      cutSrc = src;
      if (this.options.extensions && this.options.extensions.startBlock) {
        let startIndex = Infinity;
        const tempSrc = src.slice(1);
        let tempStart;
        this.options.extensions.startBlock.forEach(function(getStartIndex) {
          tempStart = getStartIndex.call({ lexer: this }, tempSrc);
          if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }
        });
        if (startIndex < Infinity && startIndex >= 0) {
          cutSrc = src.substring(0, startIndex + 1);
        }
      }
      if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
        lastToken = tokens[tokens.length - 1];
        if (lastParagraphClipped && lastToken.type === 'paragraph') {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.text;
          this.inlineQueue.pop();
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else {
          tokens.push(token);
        }
        lastParagraphClipped = (cutSrc.length !== src.length);
        src = src.substring(token.raw.length);
        continue;
      }

      // text
      if (token = this.tokenizer.text(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        if (lastToken && lastToken.type === 'text') {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.text;
          this.inlineQueue.pop();
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      if (src) {
        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
        if (this.options.silent) {
          console.error(errMsg);
          break;
        } else {
          throw new Error(errMsg);
        }
      }
    }

    this.state.top = true;
    return tokens;
  }

  inline(src, tokens = []) {
    this.inlineQueue.push({ src, tokens });
    return tokens;
  }

  /**
   * Lexing/Compiling
   */
  inlineTokens(src, tokens = []) {
    let token, lastToken, cutSrc;

    // String with links masked to avoid interference with em and strong
    let maskedSrc = src;
    let match;
    let keepPrevChar, prevChar;

    // Mask out reflinks
    if (this.tokens.links) {
      const links = Object.keys(this.tokens.links);
      if (links.length > 0) {
        while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
          if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
            maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);
          }
        }
      }
    }
    // Mask out other blocks
    while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
      maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
    }

    // Mask out escaped em & strong delimiters
    while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
      maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
    }

    while (src) {
      if (!keepPrevChar) {
        prevChar = '';
      }
      keepPrevChar = false;

      // extensions
      if (this.options.extensions
        && this.options.extensions.inline
        && this.options.extensions.inline.some((extTokenizer) => {
          if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
            src = src.substring(token.raw.length);
            tokens.push(token);
            return true;
          }
          return false;
        })) {
        continue;
      }

      // escape
      if (token = this.tokenizer.escape(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // tag
      if (token = this.tokenizer.tag(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        if (lastToken && token.type === 'text' && lastToken.type === 'text') {
          lastToken.raw += token.raw;
          lastToken.text += token.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      // link
      if (token = this.tokenizer.link(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // reflink, nolink
      if (token = this.tokenizer.reflink(src, this.tokens.links)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        if (lastToken && token.type === 'text' && lastToken.type === 'text') {
          lastToken.raw += token.raw;
          lastToken.text += token.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      // em & strong
      if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // code
      if (token = this.tokenizer.codespan(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // br
      if (token = this.tokenizer.br(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // del (gfm)
      if (token = this.tokenizer.del(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // autolink
      if (token = this.tokenizer.autolink(src, mangle)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // url (gfm)
      if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // text
      // prevent inlineText consuming extensions by clipping 'src' to extension start
      cutSrc = src;
      if (this.options.extensions && this.options.extensions.startInline) {
        let startIndex = Infinity;
        const tempSrc = src.slice(1);
        let tempStart;
        this.options.extensions.startInline.forEach(function(getStartIndex) {
          tempStart = getStartIndex.call({ lexer: this }, tempSrc);
          if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }
        });
        if (startIndex < Infinity && startIndex >= 0) {
          cutSrc = src.substring(0, startIndex + 1);
        }
      }
      if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
        src = src.substring(token.raw.length);
        if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started
          prevChar = token.raw.slice(-1);
        }
        keepPrevChar = true;
        lastToken = tokens[tokens.length - 1];
        if (lastToken && lastToken.type === 'text') {
          lastToken.raw += token.raw;
          lastToken.text += token.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      if (src) {
        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
        if (this.options.silent) {
          console.error(errMsg);
          break;
        } else {
          throw new Error(errMsg);
        }
      }
    }

    return tokens;
  }
}

/**
 * Renderer
 */
class Renderer {
  constructor(options) {
    this.options = options || defaults;
  }

  code(code, infostring, escaped) {
    const lang = (infostring || '').match(/\S*/)[0];
    if (this.options.highlight) {
      const out = this.options.highlight(code, lang);
      if (out != null && out !== code) {
        escaped = true;
        code = out;
      }
    }

    code = code.replace(/\n$/, '') + '\n';

    if (!lang) {
      return '<pre><code>'
        + (escaped ? code : escape(code, true))
        + '</code></pre>\n';
    }

    return '<pre><code class="'
      + this.options.langPrefix
      + escape(lang, true)
      + '">'
      + (escaped ? code : escape(code, true))
      + '</code></pre>\n';
  }

  /**
   * @param {string} quote
   */
  blockquote(quote) {
    return `<blockquote>\n${quote}</blockquote>\n`;
  }

  html(html) {
    return html;
  }

  /**
   * @param {string} text
   * @param {string} level
   * @param {string} raw
   * @param {any} slugger
   */
  heading(text, level, raw, slugger) {
    if (this.options.headerIds) {
      const id = this.options.headerPrefix + slugger.slug(raw);
      return `<h${level} id="${id}">${text}</h${level}>\n`;
    }

    // ignore IDs
    return `<h${level}>${text}</h${level}>\n`;
  }

  hr() {
    return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
  }

  list(body, ordered, start) {
    const type = ordered ? 'ol' : 'ul',
      startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
    return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
  }

  /**
   * @param {string} text
   */
  listitem(text) {
    return `<li>${text}</li>\n`;
  }

  checkbox(checked) {
    return '<input '
      + (checked ? 'checked="" ' : '')
      + 'disabled="" type="checkbox"'
      + (this.options.xhtml ? ' /' : '')
      + '> ';
  }

  /**
   * @param {string} text
   */
  paragraph(text) {
    return `<p>${text}</p>\n`;
  }

  /**
   * @param {string} header
   * @param {string} body
   */
  table(header, body) {
    if (body) body = `<tbody>${body}</tbody>`;

    return '<table>\n'
      + '<thead>\n'
      + header
      + '</thead>\n'
      + body
      + '</table>\n';
  }

  /**
   * @param {string} content
   */
  tablerow(content) {
    return `<tr>\n${content}</tr>\n`;
  }

  tablecell(content, flags) {
    const type = flags.header ? 'th' : 'td';
    const tag = flags.align
      ? `<${type} align="${flags.align}">`
      : `<${type}>`;
    return tag + content + `</${type}>\n`;
  }

  /**
   * span level renderer
   * @param {string} text
   */
  strong(text) {
    return `<strong>${text}</strong>`;
  }

  /**
   * @param {string} text
   */
  em(text) {
    return `<em>${text}</em>`;
  }

  /**
   * @param {string} text
   */
  codespan(text) {
    return `<code>${text}</code>`;
  }

  br() {
    return this.options.xhtml ? '<br/>' : '<br>';
  }

  /**
   * @param {string} text
   */
  del(text) {
    return `<del>${text}</del>`;
  }

  /**
   * @param {string} href
   * @param {string} title
   * @param {string} text
   */
  link(href, title, text) {
    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
    if (href === null) {
      return text;
    }
    let out = '<a href="' + escape(href) + '"';
    if (title) {
      out += ' title="' + title + '"';
    }
    out += '>' + text + '</a>';
    return out;
  }

  /**
   * @param {string} href
   * @param {string} title
   * @param {string} text
   */
  image(href, title, text) {
    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
    if (href === null) {
      return text;
    }

    let out = `<img src="${href}" alt="${text}"`;
    if (title) {
      out += ` title="${title}"`;
    }
    out += this.options.xhtml ? '/>' : '>';
    return out;
  }

  text(text) {
    return text;
  }
}

/**
 * TextRenderer
 * returns only the textual part of the token
 */
class TextRenderer {
  // no need for block level renderers
  strong(text) {
    return text;
  }

  em(text) {
    return text;
  }

  codespan(text) {
    return text;
  }

  del(text) {
    return text;
  }

  html(text) {
    return text;
  }

  text(text) {
    return text;
  }

  link(href, title, text) {
    return '' + text;
  }

  image(href, title, text) {
    return '' + text;
  }

  br() {
    return '';
  }
}

/**
 * Slugger generates header id
 */
class Slugger {
  constructor() {
    this.seen = {};
  }

  /**
   * @param {string} value
   */
  serialize(value) {
    return value
      .toLowerCase()
      .trim()
      // remove html tags
      .replace(/<[!\/a-z].*?>/ig, '')
      // remove unwanted chars
      .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
      .replace(/\s/g, '-');
  }

  /**
   * Finds the next safe (unique) slug to use
   * @param {string} originalSlug
   * @param {boolean} isDryRun
   */
  getNextSafeSlug(originalSlug, isDryRun) {
    let slug = originalSlug;
    let occurenceAccumulator = 0;
    if (this.seen.hasOwnProperty(slug)) {
      occurenceAccumulator = this.seen[originalSlug];
      do {
        occurenceAccumulator++;
        slug = originalSlug + '-' + occurenceAccumulator;
      } while (this.seen.hasOwnProperty(slug));
    }
    if (!isDryRun) {
      this.seen[originalSlug] = occurenceAccumulator;
      this.seen[slug] = 0;
    }
    return slug;
  }

  /**
   * Convert string to unique id
   * @param {object} [options]
   * @param {boolean} [options.dryrun] Generates the next unique slug without
   * updating the internal accumulator.
   */
  slug(value, options = {}) {
    const slug = this.serialize(value);
    return this.getNextSafeSlug(slug, options.dryrun);
  }
}

/**
 * Parsing & Compiling
 */
class Parser {
  constructor(options) {
    this.options = options || defaults;
    this.options.renderer = this.options.renderer || new Renderer();
    this.renderer = this.options.renderer;
    this.renderer.options = this.options;
    this.textRenderer = new TextRenderer();
    this.slugger = new Slugger();
  }

  /**
   * Static Parse Method
   */
  static parse(tokens, options) {
    const parser = new Parser(options);
    return parser.parse(tokens);
  }

  /**
   * Static Parse Inline Method
   */
  static parseInline(tokens, options) {
    const parser = new Parser(options);
    return parser.parseInline(tokens);
  }

  /**
   * Parse Loop
   */
  parse(tokens, top = true) {
    let out = '',
      i,
      j,
      k,
      l2,
      l3,
      row,
      cell,
      header,
      body,
      token,
      ordered,
      start,
      loose,
      itemBody,
      item,
      checked,
      task,
      checkbox,
      ret;

    const l = tokens.length;
    for (i = 0; i < l; i++) {
      token = tokens[i];

      // Run any renderer extensions
      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
        ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);
        if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
          out += ret || '';
          continue;
        }
      }

      switch (token.type) {
        case 'space': {
          continue;
        }
        case 'hr': {
          out += this.renderer.hr();
          continue;
        }
        case 'heading': {
          out += this.renderer.heading(
            this.parseInline(token.tokens),
            token.depth,
            unescape(this.parseInline(token.tokens, this.textRenderer)),
            this.slugger);
          continue;
        }
        case 'code': {
          out += this.renderer.code(token.text,
            token.lang,
            token.escaped);
          continue;
        }
        case 'table': {
          header = '';

          // header
          cell = '';
          l2 = token.header.length;
          for (j = 0; j < l2; j++) {
            cell += this.renderer.tablecell(
              this.parseInline(token.header[j].tokens),
              { header: true, align: token.align[j] }
            );
          }
          header += this.renderer.tablerow(cell);

          body = '';
          l2 = token.rows.length;
          for (j = 0; j < l2; j++) {
            row = token.rows[j];

            cell = '';
            l3 = row.length;
            for (k = 0; k < l3; k++) {
              cell += this.renderer.tablecell(
                this.parseInline(row[k].tokens),
                { header: false, align: token.align[k] }
              );
            }

            body += this.renderer.tablerow(cell);
          }
          out += this.renderer.table(header, body);
          continue;
        }
        case 'blockquote': {
          body = this.parse(token.tokens);
          out += this.renderer.blockquote(body);
          continue;
        }
        case 'list': {
          ordered = token.ordered;
          start = token.start;
          loose = token.loose;
          l2 = token.items.length;

          body = '';
          for (j = 0; j < l2; j++) {
            item = token.items[j];
            checked = item.checked;
            task = item.task;

            itemBody = '';
            if (item.task) {
              checkbox = this.renderer.checkbox(checked);
              if (loose) {
                if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
                  item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;
                  if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
                    item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
                  }
                } else {
                  item.tokens.unshift({
                    type: 'text',
                    text: checkbox
                  });
                }
              } else {
                itemBody += checkbox;
              }
            }

            itemBody += this.parse(item.tokens, loose);
            body += this.renderer.listitem(itemBody, task, checked);
          }

          out += this.renderer.list(body, ordered, start);
          continue;
        }
        case 'html': {
          // TODO parse inline content if parameter markdown=1
          out += this.renderer.html(token.text);
          continue;
        }
        case 'paragraph': {
          out += this.renderer.paragraph(this.parseInline(token.tokens));
          continue;
        }
        case 'text': {
          body = token.tokens ? this.parseInline(token.tokens) : token.text;
          while (i + 1 < l && tokens[i + 1].type === 'text') {
            token = tokens[++i];
            body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);
          }
          out += top ? this.renderer.paragraph(body) : body;
          continue;
        }

        default: {
          const errMsg = 'Token with "' + token.type + '" type was not found.';
          if (this.options.silent) {
            console.error(errMsg);
            return;
          } else {
            throw new Error(errMsg);
          }
        }
      }
    }

    return out;
  }

  /**
   * Parse Inline Tokens
   */
  parseInline(tokens, renderer) {
    renderer = renderer || this.renderer;
    let out = '',
      i,
      token,
      ret;

    const l = tokens.length;
    for (i = 0; i < l; i++) {
      token = tokens[i];

      // Run any renderer extensions
      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
        ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);
        if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
          out += ret || '';
          continue;
        }
      }

      switch (token.type) {
        case 'escape': {
          out += renderer.text(token.text);
          break;
        }
        case 'html': {
          out += renderer.html(token.text);
          break;
        }
        case 'link': {
          out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));
          break;
        }
        case 'image': {
          out += renderer.image(token.href, token.title, token.text);
          break;
        }
        case 'strong': {
          out += renderer.strong(this.parseInline(token.tokens, renderer));
          break;
        }
        case 'em': {
          out += renderer.em(this.parseInline(token.tokens, renderer));
          break;
        }
        case 'codespan': {
          out += renderer.codespan(token.text);
          break;
        }
        case 'br': {
          out += renderer.br();
          break;
        }
        case 'del': {
          out += renderer.del(this.parseInline(token.tokens, renderer));
          break;
        }
        case 'text': {
          out += renderer.text(token.text);
          break;
        }
        default: {
          const errMsg = 'Token with "' + token.type + '" type was not found.';
          if (this.options.silent) {
            console.error(errMsg);
            return;
          } else {
            throw new Error(errMsg);
          }
        }
      }
    }
    return out;
  }
}

/**
 * Marked
 */
function marked(src, opt, callback) {
  // throw error in case of non string input
  if (typeof src === 'undefined' || src === null) {
    throw new Error('marked(): input parameter is undefined or null');
  }
  if (typeof src !== 'string') {
    throw new Error('marked(): input parameter is of type '
      + Object.prototype.toString.call(src) + ', string expected');
  }

  if (typeof opt === 'function') {
    callback = opt;
    opt = null;
  }

  opt = merge({}, marked.defaults, opt || {});
  checkSanitizeDeprecation(opt);

  if (callback) {
    const highlight = opt.highlight;
    let tokens;

    try {
      tokens = Lexer.lex(src, opt);
    } catch (e) {
      return callback(e);
    }

    const done = function(err) {
      let out;

      if (!err) {
        try {
          if (opt.walkTokens) {
            marked.walkTokens(tokens, opt.walkTokens);
          }
          out = Parser.parse(tokens, opt);
        } catch (e) {
          err = e;
        }
      }

      opt.highlight = highlight;

      return err
        ? callback(err)
        : callback(null, out);
    };

    if (!highlight || highlight.length < 3) {
      return done();
    }

    delete opt.highlight;

    if (!tokens.length) return done();

    let pending = 0;
    marked.walkTokens(tokens, function(token) {
      if (token.type === 'code') {
        pending++;
        setTimeout(() => {
          highlight(token.text, token.lang, function(err, code) {
            if (err) {
              return done(err);
            }
            if (code != null && code !== token.text) {
              token.text = code;
              token.escaped = true;
            }

            pending--;
            if (pending === 0) {
              done();
            }
          });
        }, 0);
      }
    });

    if (pending === 0) {
      done();
    }

    return;
  }

  function onError(e) {
    e.message += '\nPlease report this to https://github.com/markedjs/marked.';
    if (opt.silent) {
      return '<p>An error occurred:</p><pre>'
        + escape(e.message + '', true)
        + '</pre>';
    }
    throw e;
  }

  try {
    const tokens = Lexer.lex(src, opt);
    if (opt.walkTokens) {
      if (opt.async) {
        return Promise.all(marked.walkTokens(tokens, opt.walkTokens))
          .then(() => {
            return Parser.parse(tokens, opt);
          })
          .catch(onError);
      }
      marked.walkTokens(tokens, opt.walkTokens);
    }
    return Parser.parse(tokens, opt);
  } catch (e) {
    onError(e);
  }
}

/**
 * Options
 */

marked.options =
marked.setOptions = function(opt) {
  merge(marked.defaults, opt);
  changeDefaults(marked.defaults);
  return marked;
};

marked.getDefaults = getDefaults;

marked.defaults = defaults;

/**
 * Use Extension
 */

marked.use = function(...args) {
  const opts = merge({}, ...args);
  const extensions = marked.defaults.extensions || { renderers: {}, childTokens: {} };
  let hasExtensions;

  args.forEach((pack) => {
    // ==-- Parse "addon" extensions --== //
    if (pack.extensions) {
      hasExtensions = true;
      pack.extensions.forEach((ext) => {
        if (!ext.name) {
          throw new Error('extension name required');
        }
        if (ext.renderer) { // Renderer extensions
          const prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;
          if (prevRenderer) {
            // Replace extension with func to run new extension but fall back if false
            extensions.renderers[ext.name] = function(...args) {
              let ret = ext.renderer.apply(this, args);
              if (ret === false) {
                ret = prevRenderer.apply(this, args);
              }
              return ret;
            };
          } else {
            extensions.renderers[ext.name] = ext.renderer;
          }
        }
        if (ext.tokenizer) { // Tokenizer Extensions
          if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {
            throw new Error("extension level must be 'block' or 'inline'");
          }
          if (extensions[ext.level]) {
            extensions[ext.level].unshift(ext.tokenizer);
          } else {
            extensions[ext.level] = [ext.tokenizer];
          }
          if (ext.start) { // Function to check for start of token
            if (ext.level === 'block') {
              if (extensions.startBlock) {
                extensions.startBlock.push(ext.start);
              } else {
                extensions.startBlock = [ext.start];
              }
            } else if (ext.level === 'inline') {
              if (extensions.startInline) {
                extensions.startInline.push(ext.start);
              } else {
                extensions.startInline = [ext.start];
              }
            }
          }
        }
        if (ext.childTokens) { // Child tokens to be visited by walkTokens
          extensions.childTokens[ext.name] = ext.childTokens;
        }
      });
    }

    // ==-- Parse "overwrite" extensions --== //
    if (pack.renderer) {
      const renderer = marked.defaults.renderer || new Renderer();
      for (const prop in pack.renderer) {
        const prevRenderer = renderer[prop];
        // Replace renderer with func to run extension, but fall back if false
        renderer[prop] = (...args) => {
          let ret = pack.renderer[prop].apply(renderer, args);
          if (ret === false) {
            ret = prevRenderer.apply(renderer, args);
          }
          return ret;
        };
      }
      opts.renderer = renderer;
    }
    if (pack.tokenizer) {
      const tokenizer = marked.defaults.tokenizer || new Tokenizer();
      for (const prop in pack.tokenizer) {
        const prevTokenizer = tokenizer[prop];
        // Replace tokenizer with func to run extension, but fall back if false
        tokenizer[prop] = (...args) => {
          let ret = pack.tokenizer[prop].apply(tokenizer, args);
          if (ret === false) {
            ret = prevTokenizer.apply(tokenizer, args);
          }
          return ret;
        };
      }
      opts.tokenizer = tokenizer;
    }

    // ==-- Parse WalkTokens extensions --== //
    if (pack.walkTokens) {
      const walkTokens = marked.defaults.walkTokens;
      opts.walkTokens = function(token) {
        let values = [];
        values.push(pack.walkTokens.call(this, token));
        if (walkTokens) {
          values = values.concat(walkTokens.call(this, token));
        }
        return values;
      };
    }

    if (hasExtensions) {
      opts.extensions = extensions;
    }

    marked.setOptions(opts);
  });
};

/**
 * Run callback for every token
 */

marked.walkTokens = function(tokens, callback) {
  let values = [];
  for (const token of tokens) {
    values = values.concat(callback.call(marked, token));
    switch (token.type) {
      case 'table': {
        for (const cell of token.header) {
          values = values.concat(marked.walkTokens(cell.tokens, callback));
        }
        for (const row of token.rows) {
          for (const cell of row) {
            values = values.concat(marked.walkTokens(cell.tokens, callback));
          }
        }
        break;
      }
      case 'list': {
        values = values.concat(marked.walkTokens(token.items, callback));
        break;
      }
      default: {
        if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { // Walk any extensions
          marked.defaults.extensions.childTokens[token.type].forEach(function(childTokens) {
            values = values.concat(marked.walkTokens(token[childTokens], callback));
          });
        } else if (token.tokens) {
          values = values.concat(marked.walkTokens(token.tokens, callback));
        }
      }
    }
  }
  return values;
};

/**
 * Parse Inline
 * @param {string} src
 */
marked.parseInline = function(src, opt) {
  // throw error in case of non string input
  if (typeof src === 'undefined' || src === null) {
    throw new Error('marked.parseInline(): input parameter is undefined or null');
  }
  if (typeof src !== 'string') {
    throw new Error('marked.parseInline(): input parameter is of type '
      + Object.prototype.toString.call(src) + ', string expected');
  }

  opt = merge({}, marked.defaults, opt || {});
  checkSanitizeDeprecation(opt);

  try {
    const tokens = Lexer.lexInline(src, opt);
    if (opt.walkTokens) {
      marked.walkTokens(tokens, opt.walkTokens);
    }
    return Parser.parseInline(tokens, opt);
  } catch (e) {
    e.message += '\nPlease report this to https://github.com/markedjs/marked.';
    if (opt.silent) {
      return '<p>An error occurred:</p><pre>'
        + escape(e.message + '', true)
        + '</pre>';
    }
    throw e;
  }
};

/**
 * Expose
 */
marked.Parser = Parser;
marked.parser = Parser.parse;
marked.Renderer = Renderer;
marked.TextRenderer = TextRenderer;
marked.Lexer = Lexer;
marked.lexer = Lexer.lex;
marked.Tokenizer = Tokenizer;
marked.Slugger = Slugger;
marked.parse = marked;

const options = marked.options;
const setOptions = marked.setOptions;
const use = marked.use;
const walkTokens = marked.walkTokens;
const parseInline = marked.parseInline;
const parse = marked;
const parser = Parser.parse;
const lexer = Lexer.lex;

export { Lexer, Parser, Renderer, Slugger, TextRenderer, Tokenizer, defaults, getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };
/**
 * marked - a markdown parser
 * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed)
 * https://github.com/markedjs/marked
 */

/**
 * DO NOT EDIT THIS FILE
 * The code in this file is generated from files in ./src/
 */

(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.marked = {}));
})(this, (function (exports) { 'use strict';

  function _defineProperties(target, props) {
    for (var i = 0; i < props.length; i++) {
      var descriptor = props[i];
      descriptor.enumerable = descriptor.enumerable || false;
      descriptor.configurable = true;
      if ("value" in descriptor) descriptor.writable = true;
      Object.defineProperty(target, descriptor.key, descriptor);
    }
  }

  function _createClass(Constructor, protoProps, staticProps) {
    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
    if (staticProps) _defineProperties(Constructor, staticProps);
    Object.defineProperty(Constructor, "prototype", {
      writable: false
    });
    return Constructor;
  }

  function _unsupportedIterableToArray(o, minLen) {
    if (!o) return;
    if (typeof o === "string") return _arrayLikeToArray(o, minLen);
    var n = Object.prototype.toString.call(o).slice(8, -1);
    if (n === "Object" && o.constructor) n = o.constructor.name;
    if (n === "Map" || n === "Set") return Array.from(o);
    if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
  }

  function _arrayLikeToArray(arr, len) {
    if (len == null || len > arr.length) len = arr.length;

    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];

    return arr2;
  }

  function _createForOfIteratorHelperLoose(o, allowArrayLike) {
    var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
    if (it) return (it = it.call(o)).next.bind(it);

    if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
      if (it) o = it;
      var i = 0;
      return function () {
        if (i >= o.length) return {
          done: true
        };
        return {
          done: false,
          value: o[i++]
        };
      };
    }

    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }

  function getDefaults() {
    return {
      async: false,
      baseUrl: null,
      breaks: false,
      extensions: null,
      gfm: true,
      headerIds: true,
      headerPrefix: '',
      highlight: null,
      langPrefix: 'language-',
      mangle: true,
      pedantic: false,
      renderer: null,
      sanitize: false,
      sanitizer: null,
      silent: false,
      smartypants: false,
      tokenizer: null,
      walkTokens: null,
      xhtml: false
    };
  }
  exports.defaults = getDefaults();
  function changeDefaults(newDefaults) {
    exports.defaults = newDefaults;
  }

  /**
   * Helpers
   */
  var escapeTest = /[&<>"']/;
  var escapeReplace = /[&<>"']/g;
  var escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
  var escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
  var escapeReplacements = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#39;'
  };

  var getEscapeReplacement = function getEscapeReplacement(ch) {
    return escapeReplacements[ch];
  };

  function escape(html, encode) {
    if (encode) {
      if (escapeTest.test(html)) {
        return html.replace(escapeReplace, getEscapeReplacement);
      }
    } else {
      if (escapeTestNoEncode.test(html)) {
        return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
      }
    }

    return html;
  }
  var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
  /**
   * @param {string} html
   */

  function unescape(html) {
    // explicitly match decimal, hex, and named HTML entities
    return html.replace(unescapeTest, function (_, n) {
      n = n.toLowerCase();
      if (n === 'colon') return ':';

      if (n.charAt(0) === '#') {
        return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));
      }

      return '';
    });
  }
  var caret = /(^|[^\[])\^/g;
  /**
   * @param {string | RegExp} regex
   * @param {string} opt
   */

  function edit(regex, opt) {
    regex = typeof regex === 'string' ? regex : regex.source;
    opt = opt || '';
    var obj = {
      replace: function replace(name, val) {
        val = val.source || val;
        val = val.replace(caret, '$1');
        regex = regex.replace(name, val);
        return obj;
      },
      getRegex: function getRegex() {
        return new RegExp(regex, opt);
      }
    };
    return obj;
  }
  var nonWordAndColonTest = /[^\w:]/g;
  var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
  /**
   * @param {boolean} sanitize
   * @param {string} base
   * @param {string} href
   */

  function cleanUrl(sanitize, base, href) {
    if (sanitize) {
      var prot;

      try {
        prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();
      } catch (e) {
        return null;
      }

      if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
        return null;
      }
    }

    if (base && !originIndependentUrl.test(href)) {
      href = resolveUrl(base, href);
    }

    try {
      href = encodeURI(href).replace(/%25/g, '%');
    } catch (e) {
      return null;
    }

    return href;
  }
  var baseUrls = {};
  var justDomain = /^[^:]+:\/*[^/]*$/;
  var protocol = /^([^:]+:)[\s\S]*$/;
  var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;
  /**
   * @param {string} base
   * @param {string} href
   */

  function resolveUrl(base, href) {
    if (!baseUrls[' ' + base]) {
      // we can ignore everything in base after the last slash of its path component,
      // but we might need to add _that_
      // https://tools.ietf.org/html/rfc3986#section-3
      if (justDomain.test(base)) {
        baseUrls[' ' + base] = base + '/';
      } else {
        baseUrls[' ' + base] = rtrim(base, '/', true);
      }
    }

    base = baseUrls[' ' + base];
    var relativeBase = base.indexOf(':') === -1;

    if (href.substring(0, 2) === '//') {
      if (relativeBase) {
        return href;
      }

      return base.replace(protocol, '$1') + href;
    } else if (href.charAt(0) === '/') {
      if (relativeBase) {
        return href;
      }

      return base.replace(domain, '$1') + href;
    } else {
      return base + href;
    }
  }
  var noopTest = {
    exec: function noopTest() {}
  };
  function merge(obj) {
    var i = 1,
        target,
        key;

    for (; i < arguments.length; i++) {
      target = arguments[i];

      for (key in target) {
        if (Object.prototype.hasOwnProperty.call(target, key)) {
          obj[key] = target[key];
        }
      }
    }

    return obj;
  }
  function splitCells(tableRow, count) {
    // ensure that every cell-delimiting pipe has a space
    // before it to distinguish it from an escaped pipe
    var row = tableRow.replace(/\|/g, function (match, offset, str) {
      var escaped = false,
          curr = offset;

      while (--curr >= 0 && str[curr] === '\\') {
        escaped = !escaped;
      }

      if (escaped) {
        // odd number of slashes means | is escaped
        // so we leave it alone
        return '|';
      } else {
        // add space before unescaped |
        return ' |';
      }
    }),
        cells = row.split(/ \|/);
    var i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe

    if (!cells[0].trim()) {
      cells.shift();
    }

    if (cells.length > 0 && !cells[cells.length - 1].trim()) {
      cells.pop();
    }

    if (cells.length > count) {
      cells.splice(count);
    } else {
      while (cells.length < count) {
        cells.push('');
      }
    }

    for (; i < cells.length; i++) {
      // leading or trailing whitespace is ignored per the gfm spec
      cells[i] = cells[i].trim().replace(/\\\|/g, '|');
    }

    return cells;
  }
  /**
   * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
   * /c*$/ is vulnerable to REDOS.
   *
   * @param {string} str
   * @param {string} c
   * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.
   */

  function rtrim(str, c, invert) {
    var l = str.length;

    if (l === 0) {
      return '';
    } // Length of suffix matching the invert condition.


    var suffLen = 0; // Step left until we fail to match the invert condition.

    while (suffLen < l) {
      var currChar = str.charAt(l - suffLen - 1);

      if (currChar === c && !invert) {
        suffLen++;
      } else if (currChar !== c && invert) {
        suffLen++;
      } else {
        break;
      }
    }

    return str.slice(0, l - suffLen);
  }
  function findClosingBracket(str, b) {
    if (str.indexOf(b[1]) === -1) {
      return -1;
    }

    var l = str.length;
    var level = 0,
        i = 0;

    for (; i < l; i++) {
      if (str[i] === '\\') {
        i++;
      } else if (str[i] === b[0]) {
        level++;
      } else if (str[i] === b[1]) {
        level--;

        if (level < 0) {
          return i;
        }
      }
    }

    return -1;
  }
  function checkSanitizeDeprecation(opt) {
    if (opt && opt.sanitize && !opt.silent) {
      console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');
    }
  } // copied from https://stackoverflow.com/a/5450113/806777

  /**
   * @param {string} pattern
   * @param {number} count
   */

  function repeatString(pattern, count) {
    if (count < 1) {
      return '';
    }

    var result = '';

    while (count > 1) {
      if (count & 1) {
        result += pattern;
      }

      count >>= 1;
      pattern += pattern;
    }

    return result + pattern;
  }

  function outputLink(cap, link, raw, lexer) {
    var href = link.href;
    var title = link.title ? escape(link.title) : null;
    var text = cap[1].replace(/\\([\[\]])/g, '$1');

    if (cap[0].charAt(0) !== '!') {
      lexer.state.inLink = true;
      var token = {
        type: 'link',
        raw: raw,
        href: href,
        title: title,
        text: text,
        tokens: lexer.inlineTokens(text)
      };
      lexer.state.inLink = false;
      return token;
    }

    return {
      type: 'image',
      raw: raw,
      href: href,
      title: title,
      text: escape(text)
    };
  }

  function indentCodeCompensation(raw, text) {
    var matchIndentToCode = raw.match(/^(\s+)(?:```)/);

    if (matchIndentToCode === null) {
      return text;
    }

    var indentToCode = matchIndentToCode[1];
    return text.split('\n').map(function (node) {
      var matchIndentInNode = node.match(/^\s+/);

      if (matchIndentInNode === null) {
        return node;
      }

      var indentInNode = matchIndentInNode[0];

      if (indentInNode.length >= indentToCode.length) {
        return node.slice(indentToCode.length);
      }

      return node;
    }).join('\n');
  }
  /**
   * Tokenizer
   */


  var Tokenizer = /*#__PURE__*/function () {
    function Tokenizer(options) {
      this.options = options || exports.defaults;
    }

    var _proto = Tokenizer.prototype;

    _proto.space = function space(src) {
      var cap = this.rules.block.newline.exec(src);

      if (cap && cap[0].length > 0) {
        return {
          type: 'space',
          raw: cap[0]
        };
      }
    };

    _proto.code = function code(src) {
      var cap = this.rules.block.code.exec(src);

      if (cap) {
        var text = cap[0].replace(/^ {1,4}/gm, '');
        return {
          type: 'code',
          raw: cap[0],
          codeBlockStyle: 'indented',
          text: !this.options.pedantic ? rtrim(text, '\n') : text
        };
      }
    };

    _proto.fences = function fences(src) {
      var cap = this.rules.block.fences.exec(src);

      if (cap) {
        var raw = cap[0];
        var text = indentCodeCompensation(raw, cap[3] || '');
        return {
          type: 'code',
          raw: raw,
          lang: cap[2] ? cap[2].trim() : cap[2],
          text: text
        };
      }
    };

    _proto.heading = function heading(src) {
      var cap = this.rules.block.heading.exec(src);

      if (cap) {
        var text = cap[2].trim(); // remove trailing #s

        if (/#$/.test(text)) {
          var trimmed = rtrim(text, '#');

          if (this.options.pedantic) {
            text = trimmed.trim();
          } else if (!trimmed || / $/.test(trimmed)) {
            // CommonMark requires space before trailing #s
            text = trimmed.trim();
          }
        }

        return {
          type: 'heading',
          raw: cap[0],
          depth: cap[1].length,
          text: text,
          tokens: this.lexer.inline(text)
        };
      }
    };

    _proto.hr = function hr(src) {
      var cap = this.rules.block.hr.exec(src);

      if (cap) {
        return {
          type: 'hr',
          raw: cap[0]
        };
      }
    };

    _proto.blockquote = function blockquote(src) {
      var cap = this.rules.block.blockquote.exec(src);

      if (cap) {
        var text = cap[0].replace(/^ *>[ \t]?/gm, '');
        return {
          type: 'blockquote',
          raw: cap[0],
          tokens: this.lexer.blockTokens(text, []),
          text: text
        };
      }
    };

    _proto.list = function list(src) {
      var cap = this.rules.block.list.exec(src);

      if (cap) {
        var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly;
        var bull = cap[1].trim();
        var isordered = bull.length > 1;
        var list = {
          type: 'list',
          raw: '',
          ordered: isordered,
          start: isordered ? +bull.slice(0, -1) : '',
          loose: false,
          items: []
        };
        bull = isordered ? "\\d{1,9}\\" + bull.slice(-1) : "\\" + bull;

        if (this.options.pedantic) {
          bull = isordered ? bull : '[*+-]';
        } // Get next list item


        var itemRegex = new RegExp("^( {0,3}" + bull + ")((?:[\t ][^\\n]*)?(?:\\n|$))"); // Check if current bullet point can start a new List Item

        while (src) {
          endEarly = false;

          if (!(cap = itemRegex.exec(src))) {
            break;
          }

          if (this.rules.block.hr.test(src)) {
            // End list if bullet was actually HR (possibly move into itemRegex?)
            break;
          }

          raw = cap[0];
          src = src.substring(raw.length);
          line = cap[2].split('\n', 1)[0];
          nextLine = src.split('\n', 1)[0];

          if (this.options.pedantic) {
            indent = 2;
            itemContents = line.trimLeft();
          } else {
            indent = cap[2].search(/[^ ]/); // Find first non-space char

            indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent

            itemContents = line.slice(indent);
            indent += cap[1].length;
          }

          blankLine = false;

          if (!line && /^ *$/.test(nextLine)) {
            // Items begin with at most one blank line
            raw += nextLine + '\n';
            src = src.substring(nextLine.length + 1);
            endEarly = true;
          }

          if (!endEarly) {
            var nextBulletRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))");
            var hrRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)");
            var fencesBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:```|~~~)");
            var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#"); // Check if following lines should be included in List Item

            while (src) {
              rawLine = src.split('\n', 1)[0];
              line = rawLine; // Re-align to follow commonmark nesting rules

              if (this.options.pedantic) {
                line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');
              } // End list item if found code fences


              if (fencesBeginRegex.test(line)) {
                break;
              } // End list item if found start of new heading


              if (headingBeginRegex.test(line)) {
                break;
              } // End list item if found start of new bullet


              if (nextBulletRegex.test(line)) {
                break;
              } // Horizontal rule found


              if (hrRegex.test(src)) {
                break;
              }

              if (line.search(/[^ ]/) >= indent || !line.trim()) {
                // Dedent if possible
                itemContents += '\n' + line.slice(indent);
              } else if (!blankLine) {
                // Until blank line, item doesn't need indentation
                itemContents += '\n' + line;
              } else {
                // Otherwise, improper indentation ends this item
                break;
              }

              if (!blankLine && !line.trim()) {
                // Check if current line is blank
                blankLine = true;
              }

              raw += rawLine + '\n';
              src = src.substring(rawLine.length + 1);
            }
          }

          if (!list.loose) {
            // If the previous item ended with a blank line, the list is loose
            if (endsWithBlankLine) {
              list.loose = true;
            } else if (/\n *\n *$/.test(raw)) {
              endsWithBlankLine = true;
            }
          } // Check for task list items


          if (this.options.gfm) {
            istask = /^\[[ xX]\] /.exec(itemContents);

            if (istask) {
              ischecked = istask[0] !== '[ ] ';
              itemContents = itemContents.replace(/^\[[ xX]\] +/, '');
            }
          }

          list.items.push({
            type: 'list_item',
            raw: raw,
            task: !!istask,
            checked: ischecked,
            loose: false,
            text: itemContents
          });
          list.raw += raw;
        } // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic


        list.items[list.items.length - 1].raw = raw.trimRight();
        list.items[list.items.length - 1].text = itemContents.trimRight();
        list.raw = list.raw.trimRight();
        var l = list.items.length; // Item child tokens handled here at end because we needed to have the final item to trim it first

        for (i = 0; i < l; i++) {
          this.lexer.state.top = false;
          list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
          var spacers = list.items[i].tokens.filter(function (t) {
            return t.type === 'space';
          });
          var hasMultipleLineBreaks = spacers.every(function (t) {
            var chars = t.raw.split('');
            var lineBreaks = 0;

            for (var _iterator = _createForOfIteratorHelperLoose(chars), _step; !(_step = _iterator()).done;) {
              var _char = _step.value;

              if (_char === '\n') {
                lineBreaks += 1;
              }

              if (lineBreaks > 1) {
                return true;
              }
            }

            return false;
          });

          if (!list.loose && spacers.length && hasMultipleLineBreaks) {
            // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item
            list.loose = true;
            list.items[i].loose = true;
          }
        }

        return list;
      }
    };

    _proto.html = function html(src) {
      var cap = this.rules.block.html.exec(src);

      if (cap) {
        var token = {
          type: 'html',
          raw: cap[0],
          pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
          text: cap[0]
        };

        if (this.options.sanitize) {
          var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);
          token.type = 'paragraph';
          token.text = text;
          token.tokens = this.lexer.inline(text);
        }

        return token;
      }
    };

    _proto.def = function def(src) {
      var cap = this.rules.block.def.exec(src);

      if (cap) {
        if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
        var tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
        return {
          type: 'def',
          tag: tag,
          raw: cap[0],
          href: cap[2],
          title: cap[3]
        };
      }
    };

    _proto.table = function table(src) {
      var cap = this.rules.block.table.exec(src);

      if (cap) {
        var item = {
          type: 'table',
          header: splitCells(cap[1]).map(function (c) {
            return {
              text: c
            };
          }),
          align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
          rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []
        };

        if (item.header.length === item.align.length) {
          item.raw = cap[0];
          var l = item.align.length;
          var i, j, k, row;

          for (i = 0; i < l; i++) {
            if (/^ *-+: *$/.test(item.align[i])) {
              item.align[i] = 'right';
            } else if (/^ *:-+: *$/.test(item.align[i])) {
              item.align[i] = 'center';
            } else if (/^ *:-+ *$/.test(item.align[i])) {
              item.align[i] = 'left';
            } else {
              item.align[i] = null;
            }
          }

          l = item.rows.length;

          for (i = 0; i < l; i++) {
            item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) {
              return {
                text: c
              };
            });
          } // parse child tokens inside headers and cells
          // header child tokens


          l = item.header.length;

          for (j = 0; j < l; j++) {
            item.header[j].tokens = this.lexer.inline(item.header[j].text);
          } // cell child tokens


          l = item.rows.length;

          for (j = 0; j < l; j++) {
            row = item.rows[j];

            for (k = 0; k < row.length; k++) {
              row[k].tokens = this.lexer.inline(row[k].text);
            }
          }

          return item;
        }
      }
    };

    _proto.lheading = function lheading(src) {
      var cap = this.rules.block.lheading.exec(src);

      if (cap) {
        return {
          type: 'heading',
          raw: cap[0],
          depth: cap[2].charAt(0) === '=' ? 1 : 2,
          text: cap[1],
          tokens: this.lexer.inline(cap[1])
        };
      }
    };

    _proto.paragraph = function paragraph(src) {
      var cap = this.rules.block.paragraph.exec(src);

      if (cap) {
        var text = cap[1].charAt(cap[1].length - 1) === '\n' ? cap[1].slice(0, -1) : cap[1];
        return {
          type: 'paragraph',
          raw: cap[0],
          text: text,
          tokens: this.lexer.inline(text)
        };
      }
    };

    _proto.text = function text(src) {
      var cap = this.rules.block.text.exec(src);

      if (cap) {
        return {
          type: 'text',
          raw: cap[0],
          text: cap[0],
          tokens: this.lexer.inline(cap[0])
        };
      }
    };

    _proto.escape = function escape$1(src) {
      var cap = this.rules.inline.escape.exec(src);

      if (cap) {
        return {
          type: 'escape',
          raw: cap[0],
          text: escape(cap[1])
        };
      }
    };

    _proto.tag = function tag(src) {
      var cap = this.rules.inline.tag.exec(src);

      if (cap) {
        if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
          this.lexer.state.inLink = true;
        } else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
          this.lexer.state.inLink = false;
        }

        if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
          this.lexer.state.inRawBlock = true;
        } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
          this.lexer.state.inRawBlock = false;
        }

        return {
          type: this.options.sanitize ? 'text' : 'html',
          raw: cap[0],
          inLink: this.lexer.state.inLink,
          inRawBlock: this.lexer.state.inRawBlock,
          text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]
        };
      }
    };

    _proto.link = function link(src) {
      var cap = this.rules.inline.link.exec(src);

      if (cap) {
        var trimmedUrl = cap[2].trim();

        if (!this.options.pedantic && /^</.test(trimmedUrl)) {
          // commonmark requires matching angle brackets
          if (!/>$/.test(trimmedUrl)) {
            return;
          } // ending angle bracket cannot be escaped


          var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\');

          if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
            return;
          }
        } else {
          // find closing parenthesis
          var lastParenIndex = findClosingBracket(cap[2], '()');

          if (lastParenIndex > -1) {
            var start = cap[0].indexOf('!') === 0 ? 5 : 4;
            var linkLen = start + cap[1].length + lastParenIndex;
            cap[2] = cap[2].substring(0, lastParenIndex);
            cap[0] = cap[0].substring(0, linkLen).trim();
            cap[3] = '';
          }
        }

        var href = cap[2];
        var title = '';

        if (this.options.pedantic) {
          // split pedantic href and title
          var link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);

          if (link) {
            href = link[1];
            title = link[3];
          }
        } else {
          title = cap[3] ? cap[3].slice(1, -1) : '';
        }

        href = href.trim();

        if (/^</.test(href)) {
          if (this.options.pedantic && !/>$/.test(trimmedUrl)) {
            // pedantic allows starting angle bracket without ending angle bracket
            href = href.slice(1);
          } else {
            href = href.slice(1, -1);
          }
        }

        return outputLink(cap, {
          href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
          title: title ? title.replace(this.rules.inline._escapes, '$1') : title
        }, cap[0], this.lexer);
      }
    };

    _proto.reflink = function reflink(src, links) {
      var cap;

      if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {
        var link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
        link = links[link.toLowerCase()];

        if (!link || !link.href) {
          var text = cap[0].charAt(0);
          return {
            type: 'text',
            raw: text,
            text: text
          };
        }

        return outputLink(cap, link, cap[0], this.lexer);
      }
    };

    _proto.emStrong = function emStrong(src, maskedSrc, prevChar) {
      if (prevChar === void 0) {
        prevChar = '';
      }

      var match = this.rules.inline.emStrong.lDelim.exec(src);
      if (!match) return; // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well

      if (match[3] && prevChar.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/)) return;
      var nextChar = match[1] || match[2] || '';

      if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {
        var lLength = match[0].length - 1;
        var rDelim,
            rLength,
            delimTotal = lLength,
            midDelimTotal = 0;
        var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
        endReg.lastIndex = 0; // Clip maskedSrc to same section of string as src (move to lexer?)

        maskedSrc = maskedSrc.slice(-1 * src.length + lLength);

        while ((match = endReg.exec(maskedSrc)) != null) {
          rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];
          if (!rDelim) continue; // skip single * in __abc*abc__

          rLength = rDelim.length;

          if (match[3] || match[4]) {
            // found another Left Delim
            delimTotal += rLength;
            continue;
          } else if (match[5] || match[6]) {
            // either Left or Right Delim
            if (lLength % 3 && !((lLength + rLength) % 3)) {
              midDelimTotal += rLength;
              continue; // CommonMark Emphasis Rules 9-10
            }
          }

          delimTotal -= rLength;
          if (delimTotal > 0) continue; // Haven't found enough closing delimiters
          // Remove extra characters. *a*** -> *a*

          rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); // Create `em` if smallest delimiter has odd char count. *a***

          if (Math.min(lLength, rLength) % 2) {
            var _text = src.slice(1, lLength + match.index + rLength);

            return {
              type: 'em',
              raw: src.slice(0, lLength + match.index + rLength + 1),
              text: _text,
              tokens: this.lexer.inlineTokens(_text)
            };
          } // Create 'strong' if smallest delimiter has even char count. **a***


          var text = src.slice(2, lLength + match.index + rLength - 1);
          return {
            type: 'strong',
            raw: src.slice(0, lLength + match.index + rLength + 1),
            text: text,
            tokens: this.lexer.inlineTokens(text)
          };
        }
      }
    };

    _proto.codespan = function codespan(src) {
      var cap = this.rules.inline.code.exec(src);

      if (cap) {
        var text = cap[2].replace(/\n/g, ' ');
        var hasNonSpaceChars = /[^ ]/.test(text);
        var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);

        if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
          text = text.substring(1, text.length - 1);
        }

        text = escape(text, true);
        return {
          type: 'codespan',
          raw: cap[0],
          text: text
        };
      }
    };

    _proto.br = function br(src) {
      var cap = this.rules.inline.br.exec(src);

      if (cap) {
        return {
          type: 'br',
          raw: cap[0]
        };
      }
    };

    _proto.del = function del(src) {
      var cap = this.rules.inline.del.exec(src);

      if (cap) {
        return {
          type: 'del',
          raw: cap[0],
          text: cap[2],
          tokens: this.lexer.inlineTokens(cap[2])
        };
      }
    };

    _proto.autolink = function autolink(src, mangle) {
      var cap = this.rules.inline.autolink.exec(src);

      if (cap) {
        var text, href;

        if (cap[2] === '@') {
          text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);
          href = 'mailto:' + text;
        } else {
          text = escape(cap[1]);
          href = text;
        }

        return {
          type: 'link',
          raw: cap[0],
          text: text,
          href: href,
          tokens: [{
            type: 'text',
            raw: text,
            text: text
          }]
        };
      }
    };

    _proto.url = function url(src, mangle) {
      var cap;

      if (cap = this.rules.inline.url.exec(src)) {
        var text, href;

        if (cap[2] === '@') {
          text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);
          href = 'mailto:' + text;
        } else {
          // do extended autolink path validation
          var prevCapZero;

          do {
            prevCapZero = cap[0];
            cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
          } while (prevCapZero !== cap[0]);

          text = escape(cap[0]);

          if (cap[1] === 'www.') {
            href = 'http://' + text;
          } else {
            href = text;
          }
        }

        return {
          type: 'link',
          raw: cap[0],
          text: text,
          href: href,
          tokens: [{
            type: 'text',
            raw: text,
            text: text
          }]
        };
      }
    };

    _proto.inlineText = function inlineText(src, smartypants) {
      var cap = this.rules.inline.text.exec(src);

      if (cap) {
        var text;

        if (this.lexer.state.inRawBlock) {
          text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];
        } else {
          text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
        }

        return {
          type: 'text',
          raw: cap[0],
          text: text
        };
      }
    };

    return Tokenizer;
  }();

  /**
   * Block-Level Grammar
   */

  var block = {
    newline: /^(?: *(?:\n|$))+/,
    code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
    fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,
    hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,
    heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
    blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
    list: /^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,
    html: '^ {0,3}(?:' // optional indentation
    + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
    + '|comment[^\\n]*(\\n+|$)' // (2)
    + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3)
    + '|<![A-Z][\\s\\S]*?(?:>\\n*|$)' // (4)
    + '|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)' // (5)
    + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6)
    + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag
    + '|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag
    + ')',
    def: /^ {0,3}\[(label)\]: *(?:\n *)?<?([^\s>]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,
    table: noopTest,
    lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
    // regex template, placeholders will be replaced according to different paragraph
    // interruption rules of commonmark and the original markdown spec:
    _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,
    text: /^[^\n]+/
  };
  block._label = /(?!\s*\])(?:\\.|[^\[\]\\])+/;
  block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
  block.def = edit(block.def).replace('label', block._label).replace('title', block._title).getRegex();
  block.bullet = /(?:[*+-]|\d{1,9}[.)])/;
  block.listItemStart = edit(/^( *)(bull) */).replace('bull', block.bullet).getRegex();
  block.list = edit(block.list).replace(/bull/g, block.bullet).replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))').replace('def', '\\n+(?=' + block.def.source + ')').getRegex();
  block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';
  block._comment = /<!--(?!-?>)[\s\S]*?(?:-->|$)/;
  block.html = edit(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
  block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
  .replace('|table', '').replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
  .getRegex();
  block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();
  /**
   * Normal Block Grammar
   */

  block.normal = merge({}, block);
  /**
   * GFM Block Grammar
   */

  block.gfm = merge({}, block.normal, {
    table: '^ *([^\\n ].*\\|.*)\\n' // Header
    + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align
    + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells

  });
  block.gfm.table = edit(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
  .getRegex();
  block.gfm.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
  .replace('table', block.gfm.table) // interrupt paragraphs with table
  .replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
  .getRegex();
  /**
   * Pedantic grammar (original John Gruber's loose markdown specification)
   */

  block.pedantic = merge({}, block.normal, {
    html: edit('^ *(?:comment *(?:\\n|\\s*$)' + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
    + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(),
    def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
    heading: /^(#{1,6})(.*)(?:\n+|$)/,
    fences: noopTest,
    // fences not supported
    paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()
  });
  /**
   * Inline-Level Grammar
   */

  var inline = {
    escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
    autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
    url: noopTest,
    tag: '^comment' + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
    + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
    + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
    + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
    + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>',
    // CDATA section
    link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
    reflink: /^!?\[(label)\]\[(ref)\]/,
    nolink: /^!?\[(ref)\](?:\[\])?/,
    reflinkSearch: 'reflink|nolink(?!\\()',
    emStrong: {
      lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,
      //        (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left.  (5) and (6) can be either Left or Right.
      //          () Skip orphan inside strong  () Consume to delim (1) #***                (2) a***#, a***                   (3) #***a, ***a                 (4) ***#              (5) #***#                 (6) a***a
      rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,
      rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _

    },
    code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
    br: /^( {2,}|\\)\n(?!\s*$)/,
    del: noopTest,
    text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
    punctuation: /^([\spunctuation])/
  }; // list of punctuation marks from CommonMark spec
  // without * and _ to handle the different emphasis markers * and _

  inline._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
  inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, <html>

  inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
  inline.escapedEmSt = /\\\*|\\_/g;
  inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();
  inline.emStrong.lDelim = edit(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex();
  inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex();
  inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g').replace(/punct/g, inline._punctuation).getRegex();
  inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
  inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
  inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
  inline.autolink = edit(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex();
  inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
  inline.tag = edit(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex();
  inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
  inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;
  inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
  inline.link = edit(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();
  inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex();
  inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex();
  inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();
  /**
   * Normal Inline Grammar
   */

  inline.normal = merge({}, inline);
  /**
   * Pedantic Inline Grammar
   */

  inline.pedantic = merge({}, inline.normal, {
    strong: {
      start: /^__|\*\*/,
      middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
      endAst: /\*\*(?!\*)/g,
      endUnd: /__(?!_)/g
    },
    em: {
      start: /^_|\*/,
      middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,
      endAst: /\*(?!\*)/g,
      endUnd: /_(?!_)/g
    },
    link: edit(/^!?\[(label)\]\((.*?)\)/).replace('label', inline._label).getRegex(),
    reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline._label).getRegex()
  });
  /**
   * GFM Inline Grammar
   */

  inline.gfm = merge({}, inline.normal, {
    escape: edit(inline.escape).replace('])', '~|])').getRegex(),
    _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
    url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
    _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
    del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
    text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
  });
  inline.gfm.url = edit(inline.gfm.url, 'i').replace('email', inline.gfm._extended_email).getRegex();
  /**
   * GFM + Line Breaks Inline Grammar
   */

  inline.breaks = merge({}, inline.gfm, {
    br: edit(inline.br).replace('{2,}', '*').getRegex(),
    text: edit(inline.gfm.text).replace('\\b_', '\\b_| {2,}\\n').replace(/\{2,\}/g, '*').getRegex()
  });

  /**
   * smartypants text replacement
   * @param {string} text
   */

  function smartypants(text) {
    return text // em-dashes
    .replace(/---/g, "\u2014") // en-dashes
    .replace(/--/g, "\u2013") // opening singles
    .replace(/(^|[-\u2014/(\[{"\s])'/g, "$1\u2018") // closing singles & apostrophes
    .replace(/'/g, "\u2019") // opening doubles
    .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1\u201C") // closing doubles
    .replace(/"/g, "\u201D") // ellipses
    .replace(/\.{3}/g, "\u2026");
  }
  /**
   * mangle email addresses
   * @param {string} text
   */


  function mangle(text) {
    var out = '',
        i,
        ch;
    var l = text.length;

    for (i = 0; i < l; i++) {
      ch = text.charCodeAt(i);

      if (Math.random() > 0.5) {
        ch = 'x' + ch.toString(16);
      }

      out += '&#' + ch + ';';
    }

    return out;
  }
  /**
   * Block Lexer
   */


  var Lexer = /*#__PURE__*/function () {
    function Lexer(options) {
      this.tokens = [];
      this.tokens.links = Object.create(null);
      this.options = options || exports.defaults;
      this.options.tokenizer = this.options.tokenizer || new Tokenizer();
      this.tokenizer = this.options.tokenizer;
      this.tokenizer.options = this.options;
      this.tokenizer.lexer = this;
      this.inlineQueue = [];
      this.state = {
        inLink: false,
        inRawBlock: false,
        top: true
      };
      var rules = {
        block: block.normal,
        inline: inline.normal
      };

      if (this.options.pedantic) {
        rules.block = block.pedantic;
        rules.inline = inline.pedantic;
      } else if (this.options.gfm) {
        rules.block = block.gfm;

        if (this.options.breaks) {
          rules.inline = inline.breaks;
        } else {
          rules.inline = inline.gfm;
        }
      }

      this.tokenizer.rules = rules;
    }
    /**
     * Expose Rules
     */


    /**
     * Static Lex Method
     */
    Lexer.lex = function lex(src, options) {
      var lexer = new Lexer(options);
      return lexer.lex(src);
    }
    /**
     * Static Lex Inline Method
     */
    ;

    Lexer.lexInline = function lexInline(src, options) {
      var lexer = new Lexer(options);
      return lexer.inlineTokens(src);
    }
    /**
     * Preprocessing
     */
    ;

    var _proto = Lexer.prototype;

    _proto.lex = function lex(src) {
      src = src.replace(/\r\n|\r/g, '\n');
      this.blockTokens(src, this.tokens);
      var next;

      while (next = this.inlineQueue.shift()) {
        this.inlineTokens(next.src, next.tokens);
      }

      return this.tokens;
    }
    /**
     * Lexing
     */
    ;

    _proto.blockTokens = function blockTokens(src, tokens) {
      var _this = this;

      if (tokens === void 0) {
        tokens = [];
      }

      if (this.options.pedantic) {
        src = src.replace(/\t/g, '    ').replace(/^ +$/gm, '');
      } else {
        src = src.replace(/^( *)(\t+)/gm, function (_, leading, tabs) {
          return leading + '    '.repeat(tabs.length);
        });
      }

      var token, lastToken, cutSrc, lastParagraphClipped;

      while (src) {
        if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {
          if (token = extTokenizer.call({
            lexer: _this
          }, src, tokens)) {
            src = src.substring(token.raw.length);
            tokens.push(token);
            return true;
          }

          return false;
        })) {
          continue;
        } // newline


        if (token = this.tokenizer.space(src)) {
          src = src.substring(token.raw.length);

          if (token.raw.length === 1 && tokens.length > 0) {
            // if there's a single \n as a spacer, it's terminating the last line,
            // so move it there so that we don't get unecessary paragraph tags
            tokens[tokens.length - 1].raw += '\n';
          } else {
            tokens.push(token);
          }

          continue;
        } // code


        if (token = this.tokenizer.code(src)) {
          src = src.substring(token.raw.length);
          lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph.

          if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
            lastToken.raw += '\n' + token.raw;
            lastToken.text += '\n' + token.text;
            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
          } else {
            tokens.push(token);
          }

          continue;
        } // fences


        if (token = this.tokenizer.fences(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // heading


        if (token = this.tokenizer.heading(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // hr


        if (token = this.tokenizer.hr(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // blockquote


        if (token = this.tokenizer.blockquote(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // list


        if (token = this.tokenizer.list(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // html


        if (token = this.tokenizer.html(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // def


        if (token = this.tokenizer.def(src)) {
          src = src.substring(token.raw.length);
          lastToken = tokens[tokens.length - 1];

          if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
            lastToken.raw += '\n' + token.raw;
            lastToken.text += '\n' + token.raw;
            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
          } else if (!this.tokens.links[token.tag]) {
            this.tokens.links[token.tag] = {
              href: token.href,
              title: token.title
            };
          }

          continue;
        } // table (gfm)


        if (token = this.tokenizer.table(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // lheading


        if (token = this.tokenizer.lheading(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // top-level paragraph
        // prevent paragraph consuming extensions by clipping 'src' to extension start


        cutSrc = src;

        if (this.options.extensions && this.options.extensions.startBlock) {
          (function () {
            var startIndex = Infinity;
            var tempSrc = src.slice(1);
            var tempStart = void 0;

            _this.options.extensions.startBlock.forEach(function (getStartIndex) {
              tempStart = getStartIndex.call({
                lexer: this
              }, tempSrc);

              if (typeof tempStart === 'number' && tempStart >= 0) {
                startIndex = Math.min(startIndex, tempStart);
              }
            });

            if (startIndex < Infinity && startIndex >= 0) {
              cutSrc = src.substring(0, startIndex + 1);
            }
          })();
        }

        if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
          lastToken = tokens[tokens.length - 1];

          if (lastParagraphClipped && lastToken.type === 'paragraph') {
            lastToken.raw += '\n' + token.raw;
            lastToken.text += '\n' + token.text;
            this.inlineQueue.pop();
            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
          } else {
            tokens.push(token);
          }

          lastParagraphClipped = cutSrc.length !== src.length;
          src = src.substring(token.raw.length);
          continue;
        } // text


        if (token = this.tokenizer.text(src)) {
          src = src.substring(token.raw.length);
          lastToken = tokens[tokens.length - 1];

          if (lastToken && lastToken.type === 'text') {
            lastToken.raw += '\n' + token.raw;
            lastToken.text += '\n' + token.text;
            this.inlineQueue.pop();
            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
          } else {
            tokens.push(token);
          }

          continue;
        }

        if (src) {
          var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);

          if (this.options.silent) {
            console.error(errMsg);
            break;
          } else {
            throw new Error(errMsg);
          }
        }
      }

      this.state.top = true;
      return tokens;
    };

    _proto.inline = function inline(src, tokens) {
      if (tokens === void 0) {
        tokens = [];
      }

      this.inlineQueue.push({
        src: src,
        tokens: tokens
      });
      return tokens;
    }
    /**
     * Lexing/Compiling
     */
    ;

    _proto.inlineTokens = function inlineTokens(src, tokens) {
      var _this2 = this;

      if (tokens === void 0) {
        tokens = [];
      }

      var token, lastToken, cutSrc; // String with links masked to avoid interference with em and strong

      var maskedSrc = src;
      var match;
      var keepPrevChar, prevChar; // Mask out reflinks

      if (this.tokens.links) {
        var links = Object.keys(this.tokens.links);

        if (links.length > 0) {
          while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
            if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
              maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);
            }
          }
        }
      } // Mask out other blocks


      while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
        maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
      } // Mask out escaped em & strong delimiters


      while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
        maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
      }

      while (src) {
        if (!keepPrevChar) {
          prevChar = '';
        }

        keepPrevChar = false; // extensions

        if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {
          if (token = extTokenizer.call({
            lexer: _this2
          }, src, tokens)) {
            src = src.substring(token.raw.length);
            tokens.push(token);
            return true;
          }

          return false;
        })) {
          continue;
        } // escape


        if (token = this.tokenizer.escape(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // tag


        if (token = this.tokenizer.tag(src)) {
          src = src.substring(token.raw.length);
          lastToken = tokens[tokens.length - 1];

          if (lastToken && token.type === 'text' && lastToken.type === 'text') {
            lastToken.raw += token.raw;
            lastToken.text += token.text;
          } else {
            tokens.push(token);
          }

          continue;
        } // link


        if (token = this.tokenizer.link(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // reflink, nolink


        if (token = this.tokenizer.reflink(src, this.tokens.links)) {
          src = src.substring(token.raw.length);
          lastToken = tokens[tokens.length - 1];

          if (lastToken && token.type === 'text' && lastToken.type === 'text') {
            lastToken.raw += token.raw;
            lastToken.text += token.text;
          } else {
            tokens.push(token);
          }

          continue;
        } // em & strong


        if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // code


        if (token = this.tokenizer.codespan(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // br


        if (token = this.tokenizer.br(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // del (gfm)


        if (token = this.tokenizer.del(src)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // autolink


        if (token = this.tokenizer.autolink(src, mangle)) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // url (gfm)


        if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
          src = src.substring(token.raw.length);
          tokens.push(token);
          continue;
        } // text
        // prevent inlineText consuming extensions by clipping 'src' to extension start


        cutSrc = src;

        if (this.options.extensions && this.options.extensions.startInline) {
          (function () {
            var startIndex = Infinity;
            var tempSrc = src.slice(1);
            var tempStart = void 0;

            _this2.options.extensions.startInline.forEach(function (getStartIndex) {
              tempStart = getStartIndex.call({
                lexer: this
              }, tempSrc);

              if (typeof tempStart === 'number' && tempStart >= 0) {
                startIndex = Math.min(startIndex, tempStart);
              }
            });

            if (startIndex < Infinity && startIndex >= 0) {
              cutSrc = src.substring(0, startIndex + 1);
            }
          })();
        }

        if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
          src = src.substring(token.raw.length);

          if (token.raw.slice(-1) !== '_') {
            // Track prevChar before string of ____ started
            prevChar = token.raw.slice(-1);
          }

          keepPrevChar = true;
          lastToken = tokens[tokens.length - 1];

          if (lastToken && lastToken.type === 'text') {
            lastToken.raw += token.raw;
            lastToken.text += token.text;
          } else {
            tokens.push(token);
          }

          continue;
        }

        if (src) {
          var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);

          if (this.options.silent) {
            console.error(errMsg);
            break;
          } else {
            throw new Error(errMsg);
          }
        }
      }

      return tokens;
    };

    _createClass(Lexer, null, [{
      key: "rules",
      get: function get() {
        return {
          block: block,
          inline: inline
        };
      }
    }]);

    return Lexer;
  }();

  /**
   * Renderer
   */

  var Renderer = /*#__PURE__*/function () {
    function Renderer(options) {
      this.options = options || exports.defaults;
    }

    var _proto = Renderer.prototype;

    _proto.code = function code(_code, infostring, escaped) {
      var lang = (infostring || '').match(/\S*/)[0];

      if (this.options.highlight) {
        var out = this.options.highlight(_code, lang);

        if (out != null && out !== _code) {
          escaped = true;
          _code = out;
        }
      }

      _code = _code.replace(/\n$/, '') + '\n';

      if (!lang) {
        return '<pre><code>' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
      }

      return '<pre><code class="' + this.options.langPrefix + escape(lang, true) + '">' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
    }
    /**
     * @param {string} quote
     */
    ;

    _proto.blockquote = function blockquote(quote) {
      return "<blockquote>\n" + quote + "</blockquote>\n";
    };

    _proto.html = function html(_html) {
      return _html;
    }
    /**
     * @param {string} text
     * @param {string} level
     * @param {string} raw
     * @param {any} slugger
     */
    ;

    _proto.heading = function heading(text, level, raw, slugger) {
      if (this.options.headerIds) {
        var id = this.options.headerPrefix + slugger.slug(raw);
        return "<h" + level + " id=\"" + id + "\">" + text + "</h" + level + ">\n";
      } // ignore IDs


      return "<h" + level + ">" + text + "</h" + level + ">\n";
    };

    _proto.hr = function hr() {
      return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
    };

    _proto.list = function list(body, ordered, start) {
      var type = ordered ? 'ol' : 'ul',
          startatt = ordered && start !== 1 ? ' start="' + start + '"' : '';
      return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
    }
    /**
     * @param {string} text
     */
    ;

    _proto.listitem = function listitem(text) {
      return "<li>" + text + "</li>\n";
    };

    _proto.checkbox = function checkbox(checked) {
      return '<input ' + (checked ? 'checked="" ' : '') + 'disabled="" type="checkbox"' + (this.options.xhtml ? ' /' : '') + '> ';
    }
    /**
     * @param {string} text
     */
    ;

    _proto.paragraph = function paragraph(text) {
      return "<p>" + text + "</p>\n";
    }
    /**
     * @param {string} header
     * @param {string} body
     */
    ;

    _proto.table = function table(header, body) {
      if (body) body = "<tbody>" + body + "</tbody>";
      return '<table>\n' + '<thead>\n' + header + '</thead>\n' + body + '</table>\n';
    }
    /**
     * @param {string} content
     */
    ;

    _proto.tablerow = function tablerow(content) {
      return "<tr>\n" + content + "</tr>\n";
    };

    _proto.tablecell = function tablecell(content, flags) {
      var type = flags.header ? 'th' : 'td';
      var tag = flags.align ? "<" + type + " align=\"" + flags.align + "\">" : "<" + type + ">";
      return tag + content + ("</" + type + ">\n");
    }
    /**
     * span level renderer
     * @param {string} text
     */
    ;

    _proto.strong = function strong(text) {
      return "<strong>" + text + "</strong>";
    }
    /**
     * @param {string} text
     */
    ;

    _proto.em = function em(text) {
      return "<em>" + text + "</em>";
    }
    /**
     * @param {string} text
     */
    ;

    _proto.codespan = function codespan(text) {
      return "<code>" + text + "</code>";
    };

    _proto.br = function br() {
      return this.options.xhtml ? '<br/>' : '<br>';
    }
    /**
     * @param {string} text
     */
    ;

    _proto.del = function del(text) {
      return "<del>" + text + "</del>";
    }
    /**
     * @param {string} href
     * @param {string} title
     * @param {string} text
     */
    ;

    _proto.link = function link(href, title, text) {
      href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);

      if (href === null) {
        return text;
      }

      var out = '<a href="' + escape(href) + '"';

      if (title) {
        out += ' title="' + title + '"';
      }

      out += '>' + text + '</a>';
      return out;
    }
    /**
     * @param {string} href
     * @param {string} title
     * @param {string} text
     */
    ;

    _proto.image = function image(href, title, text) {
      href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);

      if (href === null) {
        return text;
      }

      var out = "<img src=\"" + href + "\" alt=\"" + text + "\"";

      if (title) {
        out += " title=\"" + title + "\"";
      }

      out += this.options.xhtml ? '/>' : '>';
      return out;
    };

    _proto.text = function text(_text) {
      return _text;
    };

    return Renderer;
  }();

  /**
   * TextRenderer
   * returns only the textual part of the token
   */
  var TextRenderer = /*#__PURE__*/function () {
    function TextRenderer() {}

    var _proto = TextRenderer.prototype;

    // no need for block level renderers
    _proto.strong = function strong(text) {
      return text;
    };

    _proto.em = function em(text) {
      return text;
    };

    _proto.codespan = function codespan(text) {
      return text;
    };

    _proto.del = function del(text) {
      return text;
    };

    _proto.html = function html(text) {
      return text;
    };

    _proto.text = function text(_text) {
      return _text;
    };

    _proto.link = function link(href, title, text) {
      return '' + text;
    };

    _proto.image = function image(href, title, text) {
      return '' + text;
    };

    _proto.br = function br() {
      return '';
    };

    return TextRenderer;
  }();

  /**
   * Slugger generates header id
   */
  var Slugger = /*#__PURE__*/function () {
    function Slugger() {
      this.seen = {};
    }
    /**
     * @param {string} value
     */


    var _proto = Slugger.prototype;

    _proto.serialize = function serialize(value) {
      return value.toLowerCase().trim() // remove html tags
      .replace(/<[!\/a-z].*?>/ig, '') // remove unwanted chars
      .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '').replace(/\s/g, '-');
    }
    /**
     * Finds the next safe (unique) slug to use
     * @param {string} originalSlug
     * @param {boolean} isDryRun
     */
    ;

    _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {
      var slug = originalSlug;
      var occurenceAccumulator = 0;

      if (this.seen.hasOwnProperty(slug)) {
        occurenceAccumulator = this.seen[originalSlug];

        do {
          occurenceAccumulator++;
          slug = originalSlug + '-' + occurenceAccumulator;
        } while (this.seen.hasOwnProperty(slug));
      }

      if (!isDryRun) {
        this.seen[originalSlug] = occurenceAccumulator;
        this.seen[slug] = 0;
      }

      return slug;
    }
    /**
     * Convert string to unique id
     * @param {object} [options]
     * @param {boolean} [options.dryrun] Generates the next unique slug without
     * updating the internal accumulator.
     */
    ;

    _proto.slug = function slug(value, options) {
      if (options === void 0) {
        options = {};
      }

      var slug = this.serialize(value);
      return this.getNextSafeSlug(slug, options.dryrun);
    };

    return Slugger;
  }();

  /**
   * Parsing & Compiling
   */

  var Parser = /*#__PURE__*/function () {
    function Parser(options) {
      this.options = options || exports.defaults;
      this.options.renderer = this.options.renderer || new Renderer();
      this.renderer = this.options.renderer;
      this.renderer.options = this.options;
      this.textRenderer = new TextRenderer();
      this.slugger = new Slugger();
    }
    /**
     * Static Parse Method
     */


    Parser.parse = function parse(tokens, options) {
      var parser = new Parser(options);
      return parser.parse(tokens);
    }
    /**
     * Static Parse Inline Method
     */
    ;

    Parser.parseInline = function parseInline(tokens, options) {
      var parser = new Parser(options);
      return parser.parseInline(tokens);
    }
    /**
     * Parse Loop
     */
    ;

    var _proto = Parser.prototype;

    _proto.parse = function parse(tokens, top) {
      if (top === void 0) {
        top = true;
      }

      var out = '',
          i,
          j,
          k,
          l2,
          l3,
          row,
          cell,
          header,
          body,
          token,
          ordered,
          start,
          loose,
          itemBody,
          item,
          checked,
          task,
          checkbox,
          ret;
      var l = tokens.length;

      for (i = 0; i < l; i++) {
        token = tokens[i]; // Run any renderer extensions

        if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
          ret = this.options.extensions.renderers[token.type].call({
            parser: this
          }, token);

          if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
            out += ret || '';
            continue;
          }
        }

        switch (token.type) {
          case 'space':
            {
              continue;
            }

          case 'hr':
            {
              out += this.renderer.hr();
              continue;
            }

          case 'heading':
            {
              out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);
              continue;
            }

          case 'code':
            {
              out += this.renderer.code(token.text, token.lang, token.escaped);
              continue;
            }

          case 'table':
            {
              header = ''; // header

              cell = '';
              l2 = token.header.length;

              for (j = 0; j < l2; j++) {
                cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {
                  header: true,
                  align: token.align[j]
                });
              }

              header += this.renderer.tablerow(cell);
              body = '';
              l2 = token.rows.length;

              for (j = 0; j < l2; j++) {
                row = token.rows[j];
                cell = '';
                l3 = row.length;

                for (k = 0; k < l3; k++) {
                  cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {
                    header: false,
                    align: token.align[k]
                  });
                }

                body += this.renderer.tablerow(cell);
              }

              out += this.renderer.table(header, body);
              continue;
            }

          case 'blockquote':
            {
              body = this.parse(token.tokens);
              out += this.renderer.blockquote(body);
              continue;
            }

          case 'list':
            {
              ordered = token.ordered;
              start = token.start;
              loose = token.loose;
              l2 = token.items.length;
              body = '';

              for (j = 0; j < l2; j++) {
                item = token.items[j];
                checked = item.checked;
                task = item.task;
                itemBody = '';

                if (item.task) {
                  checkbox = this.renderer.checkbox(checked);

                  if (loose) {
                    if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
                      item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;

                      if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
                        item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
                      }
                    } else {
                      item.tokens.unshift({
                        type: 'text',
                        text: checkbox
                      });
                    }
                  } else {
                    itemBody += checkbox;
                  }
                }

                itemBody += this.parse(item.tokens, loose);
                body += this.renderer.listitem(itemBody, task, checked);
              }

              out += this.renderer.list(body, ordered, start);
              continue;
            }

          case 'html':
            {
              // TODO parse inline content if parameter markdown=1
              out += this.renderer.html(token.text);
              continue;
            }

          case 'paragraph':
            {
              out += this.renderer.paragraph(this.parseInline(token.tokens));
              continue;
            }

          case 'text':
            {
              body = token.tokens ? this.parseInline(token.tokens) : token.text;

              while (i + 1 < l && tokens[i + 1].type === 'text') {
                token = tokens[++i];
                body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);
              }

              out += top ? this.renderer.paragraph(body) : body;
              continue;
            }

          default:
            {
              var errMsg = 'Token with "' + token.type + '" type was not found.';

              if (this.options.silent) {
                console.error(errMsg);
                return;
              } else {
                throw new Error(errMsg);
              }
            }
        }
      }

      return out;
    }
    /**
     * Parse Inline Tokens
     */
    ;

    _proto.parseInline = function parseInline(tokens, renderer) {
      renderer = renderer || this.renderer;
      var out = '',
          i,
          token,
          ret;
      var l = tokens.length;

      for (i = 0; i < l; i++) {
        token = tokens[i]; // Run any renderer extensions

        if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
          ret = this.options.extensions.renderers[token.type].call({
            parser: this
          }, token);

          if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
            out += ret || '';
            continue;
          }
        }

        switch (token.type) {
          case 'escape':
            {
              out += renderer.text(token.text);
              break;
            }

          case 'html':
            {
              out += renderer.html(token.text);
              break;
            }

          case 'link':
            {
              out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));
              break;
            }

          case 'image':
            {
              out += renderer.image(token.href, token.title, token.text);
              break;
            }

          case 'strong':
            {
              out += renderer.strong(this.parseInline(token.tokens, renderer));
              break;
            }

          case 'em':
            {
              out += renderer.em(this.parseInline(token.tokens, renderer));
              break;
            }

          case 'codespan':
            {
              out += renderer.codespan(token.text);
              break;
            }

          case 'br':
            {
              out += renderer.br();
              break;
            }

          case 'del':
            {
              out += renderer.del(this.parseInline(token.tokens, renderer));
              break;
            }

          case 'text':
            {
              out += renderer.text(token.text);
              break;
            }

          default:
            {
              var errMsg = 'Token with "' + token.type + '" type was not found.';

              if (this.options.silent) {
                console.error(errMsg);
                return;
              } else {
                throw new Error(errMsg);
              }
            }
        }
      }

      return out;
    };

    return Parser;
  }();

  /**
   * Marked
   */

  function marked(src, opt, callback) {
    // throw error in case of non string input
    if (typeof src === 'undefined' || src === null) {
      throw new Error('marked(): input parameter is undefined or null');
    }

    if (typeof src !== 'string') {
      throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
    }

    if (typeof opt === 'function') {
      callback = opt;
      opt = null;
    }

    opt = merge({}, marked.defaults, opt || {});
    checkSanitizeDeprecation(opt);

    if (callback) {
      var highlight = opt.highlight;
      var tokens;

      try {
        tokens = Lexer.lex(src, opt);
      } catch (e) {
        return callback(e);
      }

      var done = function done(err) {
        var out;

        if (!err) {
          try {
            if (opt.walkTokens) {
              marked.walkTokens(tokens, opt.walkTokens);
            }

            out = Parser.parse(tokens, opt);
          } catch (e) {
            err = e;
          }
        }

        opt.highlight = highlight;
        return err ? callback(err) : callback(null, out);
      };

      if (!highlight || highlight.length < 3) {
        return done();
      }

      delete opt.highlight;
      if (!tokens.length) return done();
      var pending = 0;
      marked.walkTokens(tokens, function (token) {
        if (token.type === 'code') {
          pending++;
          setTimeout(function () {
            highlight(token.text, token.lang, function (err, code) {
              if (err) {
                return done(err);
              }

              if (code != null && code !== token.text) {
                token.text = code;
                token.escaped = true;
              }

              pending--;

              if (pending === 0) {
                done();
              }
            });
          }, 0);
        }
      });

      if (pending === 0) {
        done();
      }

      return;
    }

    function onError(e) {
      e.message += '\nPlease report this to https://github.com/markedjs/marked.';

      if (opt.silent) {
        return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
      }

      throw e;
    }

    try {
      var _tokens = Lexer.lex(src, opt);

      if (opt.walkTokens) {
        if (opt.async) {
          return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {
            return Parser.parse(_tokens, opt);
          })["catch"](onError);
        }

        marked.walkTokens(_tokens, opt.walkTokens);
      }

      return Parser.parse(_tokens, opt);
    } catch (e) {
      onError(e);
    }
  }
  /**
   * Options
   */

  marked.options = marked.setOptions = function (opt) {
    merge(marked.defaults, opt);
    changeDefaults(marked.defaults);
    return marked;
  };

  marked.getDefaults = getDefaults;
  marked.defaults = exports.defaults;
  /**
   * Use Extension
   */

  marked.use = function () {
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    var opts = merge.apply(void 0, [{}].concat(args));
    var extensions = marked.defaults.extensions || {
      renderers: {},
      childTokens: {}
    };
    var hasExtensions;
    args.forEach(function (pack) {
      // ==-- Parse "addon" extensions --== //
      if (pack.extensions) {
        hasExtensions = true;
        pack.extensions.forEach(function (ext) {
          if (!ext.name) {
            throw new Error('extension name required');
          }

          if (ext.renderer) {
            // Renderer extensions
            var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;

            if (prevRenderer) {
              // Replace extension with func to run new extension but fall back if false
              extensions.renderers[ext.name] = function () {
                for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
                  args[_key2] = arguments[_key2];
                }

                var ret = ext.renderer.apply(this, args);

                if (ret === false) {
                  ret = prevRenderer.apply(this, args);
                }

                return ret;
              };
            } else {
              extensions.renderers[ext.name] = ext.renderer;
            }
          }

          if (ext.tokenizer) {
            // Tokenizer Extensions
            if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {
              throw new Error("extension level must be 'block' or 'inline'");
            }

            if (extensions[ext.level]) {
              extensions[ext.level].unshift(ext.tokenizer);
            } else {
              extensions[ext.level] = [ext.tokenizer];
            }

            if (ext.start) {
              // Function to check for start of token
              if (ext.level === 'block') {
                if (extensions.startBlock) {
                  extensions.startBlock.push(ext.start);
                } else {
                  extensions.startBlock = [ext.start];
                }
              } else if (ext.level === 'inline') {
                if (extensions.startInline) {
                  extensions.startInline.push(ext.start);
                } else {
                  extensions.startInline = [ext.start];
                }
              }
            }
          }

          if (ext.childTokens) {
            // Child tokens to be visited by walkTokens
            extensions.childTokens[ext.name] = ext.childTokens;
          }
        });
      } // ==-- Parse "overwrite" extensions --== //


      if (pack.renderer) {
        (function () {
          var renderer = marked.defaults.renderer || new Renderer();

          var _loop = function _loop(prop) {
            var prevRenderer = renderer[prop]; // Replace renderer with func to run extension, but fall back if false

            renderer[prop] = function () {
              for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
                args[_key3] = arguments[_key3];
              }

              var ret = pack.renderer[prop].apply(renderer, args);

              if (ret === false) {
                ret = prevRenderer.apply(renderer, args);
              }

              return ret;
            };
          };

          for (var prop in pack.renderer) {
            _loop(prop);
          }

          opts.renderer = renderer;
        })();
      }

      if (pack.tokenizer) {
        (function () {
          var tokenizer = marked.defaults.tokenizer || new Tokenizer();

          var _loop2 = function _loop2(prop) {
            var prevTokenizer = tokenizer[prop]; // Replace tokenizer with func to run extension, but fall back if false

            tokenizer[prop] = function () {
              for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
                args[_key4] = arguments[_key4];
              }

              var ret = pack.tokenizer[prop].apply(tokenizer, args);

              if (ret === false) {
                ret = prevTokenizer.apply(tokenizer, args);
              }

              return ret;
            };
          };

          for (var prop in pack.tokenizer) {
            _loop2(prop);
          }

          opts.tokenizer = tokenizer;
        })();
      } // ==-- Parse WalkTokens extensions --== //


      if (pack.walkTokens) {
        var _walkTokens = marked.defaults.walkTokens;

        opts.walkTokens = function (token) {
          var values = [];
          values.push(pack.walkTokens.call(this, token));

          if (_walkTokens) {
            values = values.concat(_walkTokens.call(this, token));
          }

          return values;
        };
      }

      if (hasExtensions) {
        opts.extensions = extensions;
      }

      marked.setOptions(opts);
    });
  };
  /**
   * Run callback for every token
   */


  marked.walkTokens = function (tokens, callback) {
    var values = [];

    var _loop3 = function _loop3() {
      var token = _step.value;
      values = values.concat(callback.call(marked, token));

      switch (token.type) {
        case 'table':
          {
            for (var _iterator2 = _createForOfIteratorHelperLoose(token.header), _step2; !(_step2 = _iterator2()).done;) {
              var cell = _step2.value;
              values = values.concat(marked.walkTokens(cell.tokens, callback));
            }

            for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {
              var row = _step3.value;

              for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {
                var _cell = _step4.value;
                values = values.concat(marked.walkTokens(_cell.tokens, callback));
              }
            }

            break;
          }

        case 'list':
          {
            values = values.concat(marked.walkTokens(token.items, callback));
            break;
          }

        default:
          {
            if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {
              // Walk any extensions
              marked.defaults.extensions.childTokens[token.type].forEach(function (childTokens) {
                values = values.concat(marked.walkTokens(token[childTokens], callback));
              });
            } else if (token.tokens) {
              values = values.concat(marked.walkTokens(token.tokens, callback));
            }
          }
      }
    };

    for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
      _loop3();
    }

    return values;
  };
  /**
   * Parse Inline
   * @param {string} src
   */


  marked.parseInline = function (src, opt) {
    // throw error in case of non string input
    if (typeof src === 'undefined' || src === null) {
      throw new Error('marked.parseInline(): input parameter is undefined or null');
    }

    if (typeof src !== 'string') {
      throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
    }

    opt = merge({}, marked.defaults, opt || {});
    checkSanitizeDeprecation(opt);

    try {
      var tokens = Lexer.lexInline(src, opt);

      if (opt.walkTokens) {
        marked.walkTokens(tokens, opt.walkTokens);
      }

      return Parser.parseInline(tokens, opt);
    } catch (e) {
      e.message += '\nPlease report this to https://github.com/markedjs/marked.';

      if (opt.silent) {
        return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
      }

      throw e;
    }
  };
  /**
   * Expose
   */


  marked.Parser = Parser;
  marked.parser = Parser.parse;
  marked.Renderer = Renderer;
  marked.TextRenderer = TextRenderer;
  marked.Lexer = Lexer;
  marked.lexer = Lexer.lex;
  marked.Tokenizer = Tokenizer;
  marked.Slugger = Slugger;
  marked.parse = marked;
  var options = marked.options;
  var setOptions = marked.setOptions;
  var use = marked.use;
  var walkTokens = marked.walkTokens;
  var parseInline = marked.parseInline;
  var parse = marked;
  var parser = Parser.parse;
  var lexer = Lexer.lex;

  exports.Lexer = Lexer;
  exports.Parser = Parser;
  exports.Renderer = Renderer;
  exports.Slugger = Slugger;
  exports.TextRenderer = TextRenderer;
  exports.Tokenizer = Tokenizer;
  exports.getDefaults = getDefaults;
  exports.lexer = lexer;
  exports.marked = marked;
  exports.options = options;
  exports.parse = parse;
  exports.parseInline = parseInline;
  exports.parser = parser;
  exports.setOptions = setOptions;
  exports.use = use;
  exports.walkTokens = walkTokens;

  Object.defineProperty(exports, '__esModule', { value: true });

}));
# License information

## Contribution License Agreement

If you contribute code to this project, you are implicitly allowing your code
to be distributed under the MIT license. You are also implicitly verifying that
all code is your original work. `</legalese>`

## Marked

Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/)
Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

## Markdown

Copyright Â© 2004, John Gruber
http://daringfireball.net/
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name â€œMarkdownâ€ nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

This software is provided by the copyright holders and contributors â€œas isâ€ and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
.ds q \N'34'
.TH marked 1

.SH NAME
marked \- a javascript markdown parser

.SH SYNOPSIS
.B marked
[\-o \fI<output>\fP] [\-i \fI<input>\fP] [\-s \fI<string>\fP] [\-\-help]
[\-\-tokens] [\-\-pedantic] [\-\-gfm]
[\-\-breaks] [\-\-sanitize]
[\-\-smart\-lists] [\-\-lang\-prefix \fI<prefix>\fP]
[\-\-no\-etc...] [\-\-silent] [\fIfilename\fP]

.SH DESCRIPTION
.B marked
is a full-featured javascript markdown parser, built for speed.
It also includes multiple GFM features.

.SH EXAMPLES
.TP
cat in.md | marked > out.html
.TP
echo "hello *world*" | marked
.TP
marked \-o out.html \-i in.md \-\-gfm
.TP
marked \-\-output="hello world.html" \-i in.md \-\-no-breaks

.SH OPTIONS
.TP
.BI \-o,\ \-\-output\ [\fIoutput\fP]
Specify file output. If none is specified, write to stdout.
.TP
.BI \-i,\ \-\-input\ [\fIinput\fP]
Specify file input, otherwise use last argument as input file.
If no input file is specified, read from stdin.
.TP
.BI \-s,\ \-\-string\ [\fIstring\fP]
Specify string input instead of a file.
.TP
.BI \-t,\ \-\-tokens
Output a token stream instead of html.
.TP
.BI \-\-pedantic
Conform to obscure parts of markdown.pl as much as possible.
Don't fix original markdown bugs.
.TP
.BI \-\-gfm
Enable github flavored markdown.
.TP
.BI \-\-breaks
Enable GFM line breaks. Only works with the gfm option.
.TP
.BI \-\-sanitize
Sanitize output. Ignore any HTML input.
.TP
.BI \-\-smart\-lists
Use smarter list behavior than the original markdown.
.TP
.BI \-\-lang\-prefix\ [\fIprefix\fP]
Set the prefix for code block classes.
.TP
.BI \-\-mangle
Mangle email addresses.
.TP
.BI \-\-no\-sanitize,\ \-no-etc...
The inverse of any of the marked options above.
.TP
.BI \-\-silent
Silence error output.
.TP
.BI \-h,\ \-\-help
Display help information.

.SH CONFIGURATION
For configuring and running programmatically.

.B Example

    import { marked } from 'marked';
    marked('*foo*', { gfm: true });

.SH BUGS
Please report any bugs to https://github.com/markedjs/marked.

.SH LICENSE
Copyright (c) 2011-2014, Christopher Jeffrey (MIT License).

.SH "SEE ALSO"
.BR markdown(1),
.BR node.js(1)
marked(1)		    General Commands Manual		     marked(1)

NAME
       marked - a javascript markdown parser

SYNOPSIS
       marked  [-o  <output>]  [-i  <input>] [-s <string>] [--help] [--tokens]
       [--pedantic]   [--gfm]	 [--breaks]    [--sanitize]    [--smart-lists]
       [--lang-prefix <prefix>] [--no-etc...] [--silent] [filename]


DESCRIPTION
       marked is a full-featured javascript markdown parser, built for speed.
       It also includes multiple GFM features.

EXAMPLES
       cat in.md | marked > out.html

       echo "hello *world*" | marked

       marked -o out.html -i in.md --gfm

       marked --output="hello world.html" -i in.md --no-breaks

OPTIONS
       -o, --output [output]
	      Specify file output. If none is specified, write to stdout.

       -i, --input [input]
	      Specify file input, otherwise use last argument as input file.
	      If no input file is specified, read from stdin.

       -s, --string [string]
	      Specify string input instead of a file.

       -t, --tokens
	      Output a token stream instead of html.

       --pedantic
	      Conform to obscure parts of markdown.pl as much as possible.
	      Don't fix original markdown bugs.

       --gfm  Enable github flavored markdown.

       --breaks
	      Enable GFM line breaks. Only works with the gfm option.

       --sanitize
	      Sanitize output. Ignore any HTML input.

       --smart-lists
	      Use smarter list behavior than the original markdown.

       --lang-prefix [prefix]
	      Set the prefix for code block classes.

       --mangle
	      Mangle email addresses.

       --no-sanitize, -no-etc...
	      The inverse of any of the marked options above.

       --silent
	      Silence error output.

       -h, --help
	      Display help information.

CONFIGURATION
       For configuring and running programmatically.

       Example

	   import { marked } from 'marked';
	   marked('*foo*', { gfm: true });

BUGS
       Please report any bugs to https://github.com/markedjs/marked.

LICENSE
       Copyright (c) 2011-2014, Christopher Jeffrey (MIT License).

SEE ALSO
       markdown(1), node.js(1)

								     marked(1)
/**
 * marked - a markdown parser
 * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed)
 * https://github.com/markedjs/marked
 */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,function(r){"use strict";function i(e,t){for(var u=0;u<t.length;u++){var n=t[u];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var u=0,n=new Array(t);u<t;u++)n[u]=e[u];return n}function B(e,t){var u,n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){var u;if(e)return"string"==typeof e?s(e,t):"Map"===(u="Object"===(u=Object.prototype.toString.call(e).slice(8,-1))&&e.constructor?e.constructor.name:u)||"Set"===u?Array.from(e):"Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u)?s(e,t):void 0}(e))||t&&e&&"number"==typeof e.length)return n&&(e=n),u=0,function(){return u>=e.length?{done:!0}:{done:!1,value:e[u++]}};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}r.defaults=e();function u(e){return t[e]}var n=/[&<>"']/,l=/[&<>"']/g,a=/[<>"']|&(?!#?\w+;)/,o=/[<>"']|&(?!#?\w+;)/g,t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function D(e,t){if(t){if(n.test(e))return e.replace(l,u)}else if(a.test(e))return e.replace(o,u);return e}var c=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function x(e){return e.replace(c,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}var h=/(^|[^\[])\^/g;function p(u,e){u="string"==typeof u?u:u.source,e=e||"";var n={replace:function(e,t){return t=(t=t.source||t).replace(h,"$1"),u=u.replace(e,t),n},getRegex:function(){return new RegExp(u,e)}};return n}var f=/[^\w:]/g,Z=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function g(e,t,u){if(e){try{n=decodeURIComponent(x(u)).replace(f,"").toLowerCase()}catch(e){return null}if(0===n.indexOf("javascript:")||0===n.indexOf("vbscript:")||0===n.indexOf("data:"))return null}var n;t&&!Z.test(u)&&(e=u,F[" "+(n=t)]||(O.test(n)?F[" "+n]=n+"/":F[" "+n]=k(n,"/",!0)),t=-1===(n=F[" "+n]).indexOf(":"),u="//"===e.substring(0,2)?t?e:n.replace(q,"$1")+e:"/"===e.charAt(0)?t?e:n.replace(L,"$1")+e:n+e);try{u=encodeURI(u).replace(/%25/g,"%")}catch(e){return null}return u}var F={},O=/^[^:]+:\/*[^/]*$/,q=/^([^:]+:)[\s\S]*$/,L=/^([^:]+:\/*[^/]*)[\s\S]*$/;var A={exec:function(){}};function d(e){for(var t,u,n=1;n<arguments.length;n++)for(u in t=arguments[n])Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u]);return e}function C(e,t){var u=e.replace(/\|/g,function(e,t,u){for(var n=!1,r=t;0<=--r&&"\\"===u[r];)n=!n;return n?"|":" |"}).split(/ \|/),n=0;if(u[0].trim()||u.shift(),0<u.length&&!u[u.length-1].trim()&&u.pop(),u.length>t)u.splice(t);else for(;u.length<t;)u.push("");for(;n<u.length;n++)u[n]=u[n].trim().replace(/\\\|/g,"|");return u}function k(e,t,u){var n=e.length;if(0===n)return"";for(var r=0;r<n;){var i=e.charAt(n-r-1);if((i!==t||u)&&(i===t||!u))break;r++}return e.slice(0,n-r)}function E(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")}function m(e,t){if(t<1)return"";for(var u="";1<t;)1&t&&(u+=e),t>>=1,e+=e;return u+e}function b(e,t,u,n){var r=t.href,t=t.title?D(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?(n.state.inLink=!0,e={type:"link",raw:u,href:r,title:t,text:i,tokens:n.inlineTokens(i)},n.state.inLink=!1,e):{type:"image",raw:u,href:r,title:t,text:D(i)}}var w=function(){function e(e){this.options=e||r.defaults}var t=e.prototype;return t.space=function(e){e=this.rules.block.newline.exec(e);if(e&&0<e[0].length)return{type:"space",raw:e[0]}},t.code=function(e){var t,e=this.rules.block.code.exec(e);if(e)return t=e[0].replace(/^ {1,4}/gm,""),{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?t:k(t,"\n")}},t.fences=function(e){var t,u,n,r,e=this.rules.block.fences.exec(e);if(e)return t=e[0],u=t,n=e[3]||"",u=null===(u=t.match(/^(\s+)(?:```)/))?n:(r=u[1],n.split("\n").map(function(e){var t=e.match(/^\s+/);return null!==t&&t[0].length>=r.length?e.slice(r.length):e}).join("\n")),{type:"code",raw:t,lang:e[2]&&e[2].trim(),text:u}},t.heading=function(e){var t,u,e=this.rules.block.heading.exec(e);if(e)return t=e[2].trim(),/#$/.test(t)&&(u=k(t,"#"),!this.options.pedantic&&u&&!/ $/.test(u)||(t=u.trim())),{type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:this.lexer.inline(t)}},t.hr=function(e){e=this.rules.block.hr.exec(e);if(e)return{type:"hr",raw:e[0]}},t.blockquote=function(e){var t,e=this.rules.block.blockquote.exec(e);if(e)return t=e[0].replace(/^ *>[ \t]?/gm,""),{type:"blockquote",raw:e[0],tokens:this.lexer.blockTokens(t,[]),text:t}},t.list=function(e){var t=this.rules.block.list.exec(e);if(t){var u,n,r,i,s,l,a,o,D,c,h,p=1<(g=t[1].trim()).length,f={type:"list",raw:"",ordered:p,start:p?+g.slice(0,-1):"",loose:!1,items:[]},g=p?"\\d{1,9}\\"+g.slice(-1):"\\"+g;this.options.pedantic&&(g=p?g:"[*+-]");for(var F=new RegExp("^( {0,3}"+g+")((?:[\t ][^\\n]*)?(?:\\n|$))");e&&(h=!1,t=F.exec(e))&&!this.rules.block.hr.test(e);){if(u=t[0],e=e.substring(u.length),a=t[2].split("\n",1)[0],o=e.split("\n",1)[0],this.options.pedantic?(i=2,c=a.trimLeft()):(i=t[2].search(/[^ ]/),c=a.slice(i=4<i?1:i),i+=t[1].length),s=!1,!a&&/^ *$/.test(o)&&(u+=o+"\n",e=e.substring(o.length+1),h=!0),!h)for(var A=new RegExp("^ {0,"+Math.min(3,i-1)+"}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))"),d=new RegExp("^ {0,"+Math.min(3,i-1)+"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"),C=new RegExp("^ {0,"+Math.min(3,i-1)+"}(?:```|~~~)"),k=new RegExp("^ {0,"+Math.min(3,i-1)+"}#");e&&(a=D=e.split("\n",1)[0],this.options.pedantic&&(a=a.replace(/^ {1,4}(?=( {4})*[^ ])/g,"  ")),!C.test(a))&&!k.test(a)&&!A.test(a)&&!d.test(e);){if(a.search(/[^ ]/)>=i||!a.trim())c+="\n"+a.slice(i);else{if(s)break;c+="\n"+a}s||a.trim()||(s=!0),u+=D+"\n",e=e.substring(D.length+1)}f.loose||(l?f.loose=!0:/\n *\n *$/.test(u)&&(l=!0)),this.options.gfm&&(n=/^\[[ xX]\] /.exec(c))&&(r="[ ] "!==n[0],c=c.replace(/^\[[ xX]\] +/,"")),f.items.push({type:"list_item",raw:u,task:!!n,checked:r,loose:!1,text:c}),f.raw+=u}f.items[f.items.length-1].raw=u.trimRight(),f.items[f.items.length-1].text=c.trimRight(),f.raw=f.raw.trimRight();for(var E=f.items.length,x=0;x<E;x++){this.lexer.state.top=!1,f.items[x].tokens=this.lexer.blockTokens(f.items[x].text,[]);var m=f.items[x].tokens.filter(function(e){return"space"===e.type}),b=m.every(function(e){for(var t,u=0,n=B(e.raw.split(""));!(t=n()).done;)if("\n"===t.value&&(u+=1),1<u)return!0;return!1});!f.loose&&m.length&&b&&(f.loose=!0,f.items[x].loose=!0)}return f}},t.html=function(e){var t,e=this.rules.block.html.exec(e);if(e)return t={type:"html",raw:e[0],pre:!this.options.sanitizer&&("pre"===e[1]||"script"===e[1]||"style"===e[1]),text:e[0]},this.options.sanitize&&(e=this.options.sanitizer?this.options.sanitizer(e[0]):D(e[0]),t.type="paragraph",t.text=e,t.tokens=this.lexer.inline(e)),t},t.def=function(e){e=this.rules.block.def.exec(e);if(e)return e[3]&&(e[3]=e[3].substring(1,e[3].length-1)),{type:"def",tag:e[1].toLowerCase().replace(/\s+/g," "),raw:e[0],href:e[2],title:e[3]}},t.table=function(e){e=this.rules.block.table.exec(e);if(e){var t={type:"table",header:C(e[1]).map(function(e){return{text:e}}),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:e[3]&&e[3].trim()?e[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(t.header.length===t.align.length){t.raw=e[0];for(var u,n,r,i=t.align.length,s=0;s<i;s++)/^ *-+: *$/.test(t.align[s])?t.align[s]="right":/^ *:-+: *$/.test(t.align[s])?t.align[s]="center":/^ *:-+ *$/.test(t.align[s])?t.align[s]="left":t.align[s]=null;for(i=t.rows.length,s=0;s<i;s++)t.rows[s]=C(t.rows[s],t.header.length).map(function(e){return{text:e}});for(i=t.header.length,u=0;u<i;u++)t.header[u].tokens=this.lexer.inline(t.header[u].text);for(i=t.rows.length,u=0;u<i;u++)for(r=t.rows[u],n=0;n<r.length;n++)r[n].tokens=this.lexer.inline(r[n].text);return t}}},t.lheading=function(e){e=this.rules.block.lheading.exec(e);if(e)return{type:"heading",raw:e[0],depth:"="===e[2].charAt(0)?1:2,text:e[1],tokens:this.lexer.inline(e[1])}},t.paragraph=function(e){var t,e=this.rules.block.paragraph.exec(e);if(e)return t="\n"===e[1].charAt(e[1].length-1)?e[1].slice(0,-1):e[1],{type:"paragraph",raw:e[0],text:t,tokens:this.lexer.inline(t)}},t.text=function(e){e=this.rules.block.text.exec(e);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}},t.escape=function(e){e=this.rules.inline.escape.exec(e);if(e)return{type:"escape",raw:e[0],text:D(e[1])}},t.tag=function(e){e=this.rules.inline.tag.exec(e);if(e)return!this.lexer.state.inLink&&/^<a /i.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):D(e[0]):e[0]}},t.link=function(e){e=this.rules.inline.link.exec(e);if(e){var t=e[2].trim();if(!this.options.pedantic&&/^</.test(t)){if(!/>$/.test(t))return;var u=k(t.slice(0,-1),"\\");if((t.length-u.length)%2==0)return}else{u=function(e,t){if(-1!==e.indexOf(t[1]))for(var u=e.length,n=0,r=0;r<u;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&--n<0)return r;return-1}(e[2],"()");-1<u&&(r=(0===e[0].indexOf("!")?5:4)+e[1].length+u,e[2]=e[2].substring(0,u),e[0]=e[0].substring(0,r).trim(),e[3]="")}var n,u=e[2],r="";return this.options.pedantic?(n=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(u))&&(u=n[1],r=n[3]):r=e[3]?e[3].slice(1,-1):"",u=u.trim(),b(e,{href:(u=/^</.test(u)?this.options.pedantic&&!/>$/.test(t)?u.slice(1):u.slice(1,-1):u)&&u.replace(this.rules.inline._escapes,"$1"),title:r&&r.replace(this.rules.inline._escapes,"$1")},e[0],this.lexer)}},t.reflink=function(e,t){var u;if((u=this.rules.inline.reflink.exec(e))||(u=this.rules.inline.nolink.exec(e)))return(e=t[(e=(u[2]||u[1]).replace(/\s+/g," ")).toLowerCase()])&&e.href?b(u,e,u[0],this.lexer):{type:"text",raw:t=u[0].charAt(0),text:t}},t.emStrong=function(e,t,u){void 0===u&&(u="");var n=this.rules.inline.emStrong.lDelim.exec(e);if(n&&(!n[3]||!u.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=n[1]||n[2]||"";if(!r||""===u||this.rules.inline.punctuation.exec(u)){var i=n[0].length-1,s=i,l=0,a="*"===n[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(a.lastIndex=0,t=t.slice(-1*e.length+i);null!=(n=a.exec(t));){var o,D=n[1]||n[2]||n[3]||n[4]||n[5]||n[6];if(D)if(D=D.length,n[3]||n[4])s+=D;else if((n[5]||n[6])&&i%3&&!((i+D)%3))l+=D;else if(!(0<(s-=D)))return D=Math.min(D,D+s+l),Math.min(i,D)%2?(o=e.slice(1,i+n.index+D),{type:"em",raw:e.slice(0,i+n.index+D+1),text:o,tokens:this.lexer.inlineTokens(o)}):(o=e.slice(2,i+n.index+D-1),{type:"strong",raw:e.slice(0,i+n.index+D+1),text:o,tokens:this.lexer.inlineTokens(o)})}}}},t.codespan=function(e){var t,u,n,e=this.rules.inline.code.exec(e);if(e)return n=e[2].replace(/\n/g," "),t=/[^ ]/.test(n),u=/^ /.test(n)&&/ $/.test(n),n=D(n=t&&u?n.substring(1,n.length-1):n,!0),{type:"codespan",raw:e[0],text:n}},t.br=function(e){e=this.rules.inline.br.exec(e);if(e)return{type:"br",raw:e[0]}},t.del=function(e){e=this.rules.inline.del.exec(e);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}},t.autolink=function(e,t){var u,e=this.rules.inline.autolink.exec(e);if(e)return t="@"===e[2]?"mailto:"+(u=D(this.options.mangle?t(e[1]):e[1])):u=D(e[1]),{type:"link",raw:e[0],text:u,href:t,tokens:[{type:"text",raw:u,text:u}]}},t.url=function(e,t){var u,n,r,i;if(u=this.rules.inline.url.exec(e)){if("@"===u[2])r="mailto:"+(n=D(this.options.mangle?t(u[0]):u[0]));else{for(;i=u[0],u[0]=this.rules.inline._backpedal.exec(u[0])[0],i!==u[0];);n=D(u[0]),r="www."===u[1]?"http://"+n:n}return{type:"link",raw:u[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}},t.inlineText=function(e,t){e=this.rules.inline.text.exec(e);if(e)return t=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):D(e[0]):e[0]:D(this.options.smartypants?t(e[0]):e[0]),{type:"text",raw:e[0],text:t}},e}(),y={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?<?([^\s>]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:A,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/},v=(y.def=p(y.def).replace("label",y._label).replace("title",y._title).getRegex(),y.bullet=/(?:[*+-]|\d{1,9}[.)])/,y.listItemStart=p(/^( *)(bull) */).replace("bull",y.bullet).getRegex(),y.list=p(y.list).replace(/bull/g,y.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+y.def.source+")").getRegex(),y._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",y._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,y.html=p(y.html,"i").replace("comment",y._comment).replace("tag",y._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),y.paragraph=p(y._paragraph).replace("hr",y.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",y._tag).getRegex(),y.blockquote=p(y.blockquote).replace("paragraph",y.paragraph).getRegex(),y.normal=d({},y),y.gfm=d({},y.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),y.gfm.table=p(y.gfm.table).replace("hr",y.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",y._tag).getRegex(),y.gfm.paragraph=p(y._paragraph).replace("hr",y.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",y.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",y._tag).getRegex(),y.pedantic=d({},y.normal,{html:p("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",y._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:A,paragraph:p(y.normal._paragraph).replace("hr",y.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",y.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()}),{escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:A,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:A,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/});function j(e){return e.replace(/---/g,"â€”").replace(/--/g,"â€“").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1â€˜").replace(/'/g,"â€™").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1â€œ").replace(/"/g,"â€").replace(/\.{3}/g,"â€¦")}function _(e){for(var t,u="",n=e.length,r=0;r<n;r++)t=e.charCodeAt(r),u+="&#"+(t=.5<Math.random()?"x"+t.toString(16):t)+";";return u}v._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",v.punctuation=p(v.punctuation).replace(/punctuation/g,v._punctuation).getRegex(),v.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,v.escapedEmSt=/\\\*|\\_/g,v._comment=p(y._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),v.emStrong.lDelim=p(v.emStrong.lDelim).replace(/punct/g,v._punctuation).getRegex(),v.emStrong.rDelimAst=p(v.emStrong.rDelimAst,"g").replace(/punct/g,v._punctuation).getRegex(),v.emStrong.rDelimUnd=p(v.emStrong.rDelimUnd,"g").replace(/punct/g,v._punctuation).getRegex(),v._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,v._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,v._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,v.autolink=p(v.autolink).replace("scheme",v._scheme).replace("email",v._email).getRegex(),v._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,v.tag=p(v.tag).replace("comment",v._comment).replace("attribute",v._attribute).getRegex(),v._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,v._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,v._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,v.link=p(v.link).replace("label",v._label).replace("href",v._href).replace("title",v._title).getRegex(),v.reflink=p(v.reflink).replace("label",v._label).replace("ref",y._label).getRegex(),v.nolink=p(v.nolink).replace("ref",y._label).getRegex(),v.reflinkSearch=p(v.reflinkSearch,"g").replace("reflink",v.reflink).replace("nolink",v.nolink).getRegex(),v.normal=d({},v),v.pedantic=d({},v.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:p(/^!?\[(label)\]\((.*?)\)/).replace("label",v._label).getRegex(),reflink:p(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",v._label).getRegex()}),v.gfm=d({},v.normal,{escape:p(v.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/}),v.gfm.url=p(v.gfm.url,"i").replace("email",v.gfm._extended_email).getRegex(),v.breaks=d({},v.gfm,{br:p(v.br).replace("{2,}","*").getRegex(),text:p(v.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var z=function(){function u(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||r.defaults,this.options.tokenizer=this.options.tokenizer||new w,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,(this.tokenizer.lexer=this).inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};e={block:y.normal,inline:v.normal};this.options.pedantic?(e.block=y.pedantic,e.inline=v.pedantic):this.options.gfm&&(e.block=y.gfm,this.options.breaks?e.inline=v.breaks:e.inline=v.gfm),this.tokenizer.rules=e}u.lex=function(e,t){return new u(t).lex(e)},u.lexInline=function(e,t){return new u(t).inlineTokens(e)};var e,t,n=u.prototype;return n.lex=function(e){var t;for(e=e.replace(/\r\n|\r/g,"\n"),this.blockTokens(e,this.tokens);t=this.inlineQueue.shift();)this.inlineTokens(t.src,t.tokens);return this.tokens},n.blockTokens=function(r,t){var u,e,i,n,s=this;for(void 0===t&&(t=[]),r=this.options.pedantic?r.replace(/\t/g,"    ").replace(/^ +$/gm,""):r.replace(/^( *)(\t+)/gm,function(e,t,u){return t+"    ".repeat(u.length)});r;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(function(e){return!!(u=e.call({lexer:s},r,t))&&(r=r.substring(u.raw.length),t.push(u),!0)})))if(u=this.tokenizer.space(r))r=r.substring(u.raw.length),1===u.raw.length&&0<t.length?t[t.length-1].raw+="\n":t.push(u);else if(u=this.tokenizer.code(r))r=r.substring(u.raw.length),!(e=t[t.length-1])||"paragraph"!==e.type&&"text"!==e.type?t.push(u):(e.raw+="\n"+u.raw,e.text+="\n"+u.text,this.inlineQueue[this.inlineQueue.length-1].src=e.text);else if(u=this.tokenizer.fences(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.heading(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.hr(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.blockquote(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.list(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.html(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.def(r))r=r.substring(u.raw.length),!(e=t[t.length-1])||"paragraph"!==e.type&&"text"!==e.type?this.tokens.links[u.tag]||(this.tokens.links[u.tag]={href:u.href,title:u.title}):(e.raw+="\n"+u.raw,e.text+="\n"+u.raw,this.inlineQueue[this.inlineQueue.length-1].src=e.text);else if(u=this.tokenizer.table(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.lheading(r))r=r.substring(u.raw.length),t.push(u);else if(i=r,this.options.extensions&&this.options.extensions.startBlock&&!function(){var t=1/0,u=r.slice(1),n=void 0;s.options.extensions.startBlock.forEach(function(e){"number"==typeof(n=e.call({lexer:this},u))&&0<=n&&(t=Math.min(t,n))}),t<1/0&&0<=t&&(i=r.substring(0,t+1))}(),this.state.top&&(u=this.tokenizer.paragraph(i)))e=t[t.length-1],n&&"paragraph"===e.type?(e.raw+="\n"+u.raw,e.text+="\n"+u.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=e.text):t.push(u),n=i.length!==r.length,r=r.substring(u.raw.length);else if(u=this.tokenizer.text(r))r=r.substring(u.raw.length),(e=t[t.length-1])&&"text"===e.type?(e.raw+="\n"+u.raw,e.text+="\n"+u.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=e.text):t.push(u);else if(r){var l="Infinite loop on byte: "+r.charCodeAt(0);if(this.options.silent){console.error(l);break}throw new Error(l)}return this.state.top=!0,t},n.inline=function(e,t){return this.inlineQueue.push({src:e,tokens:t=void 0===t?[]:t}),t},n.inlineTokens=function(r,t){var u,e,i,n,s,l,a=this,o=(void 0===t&&(t=[]),r);if(this.tokens.links){var D=Object.keys(this.tokens.links);if(0<D.length)for(;null!=(n=this.tokenizer.rules.inline.reflinkSearch.exec(o));)D.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(o=o.slice(0,n.index)+"["+m("a",n[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(n=this.tokenizer.rules.inline.blockSkip.exec(o));)o=o.slice(0,n.index)+"["+m("a",n[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(n=this.tokenizer.rules.inline.escapedEmSt.exec(o));)o=o.slice(0,n.index)+"++"+o.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;r;)if(s||(l=""),s=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(function(e){return!!(u=e.call({lexer:a},r,t))&&(r=r.substring(u.raw.length),t.push(u),!0)})))if(u=this.tokenizer.escape(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.tag(r))r=r.substring(u.raw.length),(e=t[t.length-1])&&"text"===u.type&&"text"===e.type?(e.raw+=u.raw,e.text+=u.text):t.push(u);else if(u=this.tokenizer.link(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.reflink(r,this.tokens.links))r=r.substring(u.raw.length),(e=t[t.length-1])&&"text"===u.type&&"text"===e.type?(e.raw+=u.raw,e.text+=u.text):t.push(u);else if(u=this.tokenizer.emStrong(r,o,l))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.codespan(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.br(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.del(r))r=r.substring(u.raw.length),t.push(u);else if(u=this.tokenizer.autolink(r,_))r=r.substring(u.raw.length),t.push(u);else if(!this.state.inLink&&(u=this.tokenizer.url(r,_)))r=r.substring(u.raw.length),t.push(u);else if(i=r,this.options.extensions&&this.options.extensions.startInline&&!function(){var t=1/0,u=r.slice(1),n=void 0;a.options.extensions.startInline.forEach(function(e){"number"==typeof(n=e.call({lexer:this},u))&&0<=n&&(t=Math.min(t,n))}),t<1/0&&0<=t&&(i=r.substring(0,t+1))}(),u=this.tokenizer.inlineText(i,j))r=r.substring(u.raw.length),"_"!==u.raw.slice(-1)&&(l=u.raw.slice(-1)),s=!0,(e=t[t.length-1])&&"text"===e.type?(e.raw+=u.raw,e.text+=u.text):t.push(u);else if(r){var c="Infinite loop on byte: "+r.charCodeAt(0);if(this.options.silent){console.error(c);break}throw new Error(c)}return t},n=u,t=[{key:"rules",get:function(){return{block:y,inline:v}}}],(e=null)&&i(n.prototype,e),t&&i(n,t),Object.defineProperty(n,"prototype",{writable:!1}),u}(),$=function(){function e(e){this.options=e||r.defaults}var t=e.prototype;return t.code=function(e,t,u){var n,t=(t||"").match(/\S*/)[0];return this.options.highlight&&null!=(n=this.options.highlight(e,t))&&n!==e&&(u=!0,e=n),e=e.replace(/\n$/,"")+"\n",t?'<pre><code class="'+this.options.langPrefix+D(t,!0)+'">'+(u?e:D(e,!0))+"</code></pre>\n":"<pre><code>"+(u?e:D(e,!0))+"</code></pre>\n"},t.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},t.html=function(e){return e},t.heading=function(e,t,u,n){return this.options.headerIds?"<h"+t+' id="'+(this.options.headerPrefix+n.slug(u))+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},t.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},t.list=function(e,t,u){var n=t?"ol":"ul";return"<"+n+(t&&1!==u?' start="'+u+'"':"")+">\n"+e+"</"+n+">\n"},t.listitem=function(e){return"<li>"+e+"</li>\n"},t.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},t.paragraph=function(e){return"<p>"+e+"</p>\n"},t.table=function(e,t){return"<table>\n<thead>\n"+e+"</thead>\n"+(t=t&&"<tbody>"+t+"</tbody>")+"</table>\n"},t.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},t.tablecell=function(e,t){var u=t.header?"th":"td";return(t.align?"<"+u+' align="'+t.align+'">':"<"+u+">")+e+"</"+u+">\n"},t.strong=function(e){return"<strong>"+e+"</strong>"},t.em=function(e){return"<em>"+e+"</em>"},t.codespan=function(e){return"<code>"+e+"</code>"},t.br=function(){return this.options.xhtml?"<br/>":"<br>"},t.del=function(e){return"<del>"+e+"</del>"},t.link=function(e,t,u){return null===(e=g(this.options.sanitize,this.options.baseUrl,e))?u:(e='<a href="'+D(e)+'"',t&&(e+=' title="'+t+'"'),e+">"+u+"</a>")},t.image=function(e,t,u){return null===(e=g(this.options.sanitize,this.options.baseUrl,e))?u:(e='<img src="'+e+'" alt="'+u+'"',t&&(e+=' title="'+t+'"'),e+(this.options.xhtml?"/>":">"))},t.text=function(e){return e},e}(),S=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,u){return""+u},t.image=function(e,t,u){return""+u},t.br=function(){return""},e}(),T=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var u=e,n=0;if(this.seen.hasOwnProperty(u))for(n=this.seen[e];u=e+"-"+ ++n,this.seen.hasOwnProperty(u););return t||(this.seen[e]=n,this.seen[u]=0),u},t.slug=function(e,t){void 0===t&&(t={});e=this.serialize(e);return this.getNextSafeSlug(e,t.dryrun)},e}(),R=function(){function u(e){this.options=e||r.defaults,this.options.renderer=this.options.renderer||new $,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new S,this.slugger=new T}u.parse=function(e,t){return new u(t).parse(e)},u.parseInline=function(e,t){return new u(t).parseInline(e)};var e=u.prototype;return e.parse=function(e,t){void 0===t&&(t=!0);for(var u,n,r,i,s,l,a,o,D,c,h,p,f,g,F,A,d="",C=e.length,k=0;k<C;k++)if(o=e[k],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[o.type]&&(!1!==(A=this.options.extensions.renderers[o.type].call({parser:this},o))||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(o.type)))d+=A||"";else switch(o.type){case"space":continue;case"hr":d+=this.renderer.hr();continue;case"heading":d+=this.renderer.heading(this.parseInline(o.tokens),o.depth,x(this.parseInline(o.tokens,this.textRenderer)),this.slugger);continue;case"code":d+=this.renderer.code(o.text,o.lang,o.escaped);continue;case"table":for(l=D="",r=o.header.length,u=0;u<r;u++)l+=this.renderer.tablecell(this.parseInline(o.header[u].tokens),{header:!0,align:o.align[u]});for(D+=this.renderer.tablerow(l),a="",r=o.rows.length,u=0;u<r;u++){for(l="",i=(s=o.rows[u]).length,n=0;n<i;n++)l+=this.renderer.tablecell(this.parseInline(s[n].tokens),{header:!1,align:o.align[n]});a+=this.renderer.tablerow(l)}d+=this.renderer.table(D,a);continue;case"blockquote":a=this.parse(o.tokens),d+=this.renderer.blockquote(a);continue;case"list":for(D=o.ordered,E=o.start,c=o.loose,r=o.items.length,a="",u=0;u<r;u++)f=(p=o.items[u]).checked,g=p.task,h="",p.task&&(F=this.renderer.checkbox(f),c?0<p.tokens.length&&"paragraph"===p.tokens[0].type?(p.tokens[0].text=F+" "+p.tokens[0].text,p.tokens[0].tokens&&0<p.tokens[0].tokens.length&&"text"===p.tokens[0].tokens[0].type&&(p.tokens[0].tokens[0].text=F+" "+p.tokens[0].tokens[0].text)):p.tokens.unshift({type:"text",text:F}):h+=F),h+=this.parse(p.tokens,c),a+=this.renderer.listitem(h,g,f);d+=this.renderer.list(a,D,E);continue;case"html":d+=this.renderer.html(o.text);continue;case"paragraph":d+=this.renderer.paragraph(this.parseInline(o.tokens));continue;case"text":for(a=o.tokens?this.parseInline(o.tokens):o.text;k+1<C&&"text"===e[k+1].type;)a+="\n"+((o=e[++k]).tokens?this.parseInline(o.tokens):o.text);d+=t?this.renderer.paragraph(a):a;continue;default:var E='Token with "'+o.type+'" type was not found.';if(this.options.silent)return void console.error(E);throw new Error(E)}return d},e.parseInline=function(e,t){t=t||this.renderer;for(var u,n,r="",i=e.length,s=0;s<i;s++)if(u=e[s],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[u.type]&&(!1!==(n=this.options.extensions.renderers[u.type].call({parser:this},u))||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(u.type)))r+=n||"";else switch(u.type){case"escape":r+=t.text(u.text);break;case"html":r+=t.html(u.text);break;case"link":r+=t.link(u.href,u.title,this.parseInline(u.tokens,t));break;case"image":r+=t.image(u.href,u.title,u.text);break;case"strong":r+=t.strong(this.parseInline(u.tokens,t));break;case"em":r+=t.em(this.parseInline(u.tokens,t));break;case"codespan":r+=t.codespan(u.text);break;case"br":r+=t.br();break;case"del":r+=t.del(this.parseInline(u.tokens,t));break;case"text":r+=t.text(u.text);break;default:var l='Token with "'+u.type+'" type was not found.';if(this.options.silent)return void console.error(l);throw new Error(l)}return r},u}();function I(e,u,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof u&&(n=u,u=null),E(u=d({},I.defaults,u||{})),n){var r,i=u.highlight;try{r=z.lex(e,u)}catch(e){return n(e)}var s,l=function(t){var e;if(!t)try{u.walkTokens&&I.walkTokens(r,u.walkTokens),e=R.parse(r,u)}catch(e){t=e}return u.highlight=i,t?n(t):n(null,e)};return!i||i.length<3?l():(delete u.highlight,r.length?(s=0,I.walkTokens(r,function(u){"code"===u.type&&(s++,setTimeout(function(){i(u.text,u.lang,function(e,t){if(e)return l(e);null!=t&&t!==u.text&&(u.text=t,u.escaped=!0),0===--s&&l()})},0))}),void(0===s&&l())):l())}function t(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",u.silent)return"<p>An error occurred:</p><pre>"+D(e.message+"",!0)+"</pre>";throw e}try{var a=z.lex(e,u);if(u.walkTokens){if(u.async)return Promise.all(I.walkTokens(a,u.walkTokens)).then(function(){return R.parse(a,u)}).catch(t);I.walkTokens(a,u.walkTokens)}return R.parse(a,u)}catch(e){t(e)}}I.options=I.setOptions=function(e){return d(I.defaults,e),e=I.defaults,r.defaults=e,I},I.getDefaults=e,I.defaults=r.defaults,I.use=function(){for(var e=arguments.length,t=new Array(e),u=0;u<e;u++)t[u]=arguments[u];var n,r=d.apply(void 0,[{}].concat(t)),o=I.defaults.extensions||{renderers:{},childTokens:{}};t.forEach(function(s){if(s.extensions&&(n=!0,s.extensions.forEach(function(r){if(!r.name)throw new Error("extension name required");var i;if(r.renderer&&(i=o.renderers?o.renderers[r.name]:null,o.renderers[r.name]=i?function(){for(var e=arguments.length,t=new Array(e),u=0;u<e;u++)t[u]=arguments[u];var n=r.renderer.apply(this,t);return n=!1===n?i.apply(this,t):n}:r.renderer),r.tokenizer){if(!r.level||"block"!==r.level&&"inline"!==r.level)throw new Error("extension level must be 'block' or 'inline'");o[r.level]?o[r.level].unshift(r.tokenizer):o[r.level]=[r.tokenizer],r.start&&("block"===r.level?o.startBlock?o.startBlock.push(r.start):o.startBlock=[r.start]:"inline"===r.level&&(o.startInline?o.startInline.push(r.start):o.startInline=[r.start]))}r.childTokens&&(o.childTokens[r.name]=r.childTokens)})),s.renderer){var e,l=I.defaults.renderer||new $;for(e in s.renderer)!function(r){var i=l[r];l[r]=function(){for(var e=arguments.length,t=new Array(e),u=0;u<e;u++)t[u]=arguments[u];var n=s.renderer[r].apply(l,t);return n=!1===n?i.apply(l,t):n}}(e);r.renderer=l}if(s.tokenizer){var t,a=I.defaults.tokenizer||new w;for(t in s.tokenizer)!function(r){var i=a[r];a[r]=function(){for(var e=arguments.length,t=new Array(e),u=0;u<e;u++)t[u]=arguments[u];var n=s.tokenizer[r].apply(a,t);return n=!1===n?i.apply(a,t):n}}(t);r.tokenizer=a}var u;s.walkTokens&&(u=I.defaults.walkTokens,r.walkTokens=function(e){var t=[];return t.push(s.walkTokens.call(this,e)),t=u?t.concat(u.call(this,e)):t}),n&&(r.extensions=o),I.setOptions(r)})},I.walkTokens=function(e,l){for(var a,o=[],t=B(e);!(a=t()).done;)!function(){var t=a.value;switch(o=o.concat(l.call(I,t)),t.type){case"table":for(var e=B(t.header);!(u=e()).done;){var u=u.value;o=o.concat(I.walkTokens(u.tokens,l))}for(var n,r=B(t.rows);!(n=r()).done;)for(var i=B(n.value);!(s=i()).done;){var s=s.value;o=o.concat(I.walkTokens(s.tokens,l))}break;case"list":o=o.concat(I.walkTokens(t.items,l));break;default:I.defaults.extensions&&I.defaults.extensions.childTokens&&I.defaults.extensions.childTokens[t.type]?I.defaults.extensions.childTokens[t.type].forEach(function(e){o=o.concat(I.walkTokens(t[e],l))}):t.tokens&&(o=o.concat(I.walkTokens(t.tokens,l)))}}();return o},I.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");E(t=d({},I.defaults,t||{}));try{var u=z.lexInline(e,t);return t.walkTokens&&I.walkTokens(u,t.walkTokens),R.parseInline(u,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+D(e.message+"",!0)+"</pre>";throw e}},I.Parser=R,I.parser=R.parse,I.Renderer=$,I.TextRenderer=S,I.Lexer=z,I.lexer=z.lex,I.Tokenizer=w,I.Slugger=T;var A=(I.parse=I).options,P=I.setOptions,Q=I.use,U=I.walkTokens,M=I.parseInline,N=I,X=R.parse,G=z.lex;r.Lexer=z,r.Parser=R,r.Renderer=$,r.Slugger=T,r.TextRenderer=S,r.Tokenizer=w,r.getDefaults=e,r.lexer=G,r.marked=I,r.options=A,r.parse=N,r.parseInline=M,r.parser=X,r.setOptions=P,r.use=Q,r.walkTokens=U,Object.defineProperty(r,"__esModule",{value:!0})});{
  "name": "marked",
  "description": "A markdown parser built for speed",
  "author": "Christopher Jeffrey",
  "version": "4.1.1",
  "type": "module",
  "main": "./lib/marked.cjs",
  "module": "./lib/marked.esm.js",
  "browser": "./lib/marked.umd.js",
  "bin": {
    "marked": "bin/marked.js"
  },
  "man": "./man/marked.1",
  "files": [
    "bin/",
    "lib/",
    "src/",
    "man/",
    "marked.min.js"
  ],
  "exports": {
    ".": {
      "import": "./lib/marked.esm.js",
      "default": "./lib/marked.cjs"
    },
    "./package.json": "./package.json"
  },
  "repository": "git://github.com/markedjs/marked.git",
  "homepage": "https://marked.js.org",
  "license": "MIT",
  "devDependencies": {
    "@babel/core": "^7.19.1",
    "@babel/preset-env": "^7.19.1",
    "@markedjs/html-differ": "^4.0.2",
    "@rollup/plugin-babel": "^5.3.1",
    "@rollup/plugin-commonjs": "^22.0.2",
    "@semantic-release/commit-analyzer": "^9.0.2",
    "@semantic-release/git": "^10.0.1",
    "@semantic-release/github": "^8.0.6",
    "@semantic-release/npm": "^9.0.1",
    "@semantic-release/release-notes-generator": "^10.0.3",
    "cheerio": "^1.0.0-rc.12",
    "commonmark": "0.30.0",
    "eslint": "^8.24.0",
    "eslint-config-standard": "^17.0.0",
    "eslint-plugin-import": "^2.26.0",
    "eslint-plugin-n": "^15.3.0",
    "eslint-plugin-promise": "^6.0.1",
    "front-matter": "^4.0.2",
    "highlight.js": "^11.6.0",
    "jasmine": "^4.4.0",
    "markdown-it": "13.0.1",
    "node-fetch": "^3.2.10",
    "rollup": "^2.79.1",
    "rollup-plugin-license": "^2.8.1",
    "semantic-release": "^19.0.5",
    "titleize": "^3.0.0",
    "uglify-js": "^3.17.2",
    "vuln-regex-detector": "^1.3.0"
  },
  "engines": {
    "node": ">= 12"
  }
}export function getDefaults() {
  return {
    async: false,
    baseUrl: null,
    breaks: false,
    extensions: null,
    gfm: true,
    headerIds: true,
    headerPrefix: '',
    highlight: null,
    langPrefix: 'language-',
    mangle: true,
    pedantic: false,
    renderer: null,
    sanitize: false,
    sanitizer: null,
    silent: false,
    smartypants: false,
    tokenizer: null,
    walkTokens: null,
    xhtml: false
  };
}

export let defaults = getDefaults();

export function changeDefaults(newDefaults) {
  defaults = newDefaults;
}
/**
 * Helpers
 */
const escapeTest = /[&<>"']/;
const escapeReplace = /[&<>"']/g;
const escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
const escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
const escapeReplacements = {
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;'
};
const getEscapeReplacement = (ch) => escapeReplacements[ch];
export function escape(html, encode) {
  if (encode) {
    if (escapeTest.test(html)) {
      return html.replace(escapeReplace, getEscapeReplacement);
    }
  } else {
    if (escapeTestNoEncode.test(html)) {
      return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
    }
  }

  return html;
}

const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;

/**
 * @param {string} html
 */
export function unescape(html) {
  // explicitly match decimal, hex, and named HTML entities
  return html.replace(unescapeTest, (_, n) => {
    n = n.toLowerCase();
    if (n === 'colon') return ':';
    if (n.charAt(0) === '#') {
      return n.charAt(1) === 'x'
        ? String.fromCharCode(parseInt(n.substring(2), 16))
        : String.fromCharCode(+n.substring(1));
    }
    return '';
  });
}

const caret = /(^|[^\[])\^/g;

/**
 * @param {string | RegExp} regex
 * @param {string} opt
 */
export function edit(regex, opt) {
  regex = typeof regex === 'string' ? regex : regex.source;
  opt = opt || '';
  const obj = {
    replace: (name, val) => {
      val = val.source || val;
      val = val.replace(caret, '$1');
      regex = regex.replace(name, val);
      return obj;
    },
    getRegex: () => {
      return new RegExp(regex, opt);
    }
  };
  return obj;
}

const nonWordAndColonTest = /[^\w:]/g;
const originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;

/**
 * @param {boolean} sanitize
 * @param {string} base
 * @param {string} href
 */
export function cleanUrl(sanitize, base, href) {
  if (sanitize) {
    let prot;
    try {
      prot = decodeURIComponent(unescape(href))
        .replace(nonWordAndColonTest, '')
        .toLowerCase();
    } catch (e) {
      return null;
    }
    if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
      return null;
    }
  }
  if (base && !originIndependentUrl.test(href)) {
    href = resolveUrl(base, href);
  }
  try {
    href = encodeURI(href).replace(/%25/g, '%');
  } catch (e) {
    return null;
  }
  return href;
}

const baseUrls = {};
const justDomain = /^[^:]+:\/*[^/]*$/;
const protocol = /^([^:]+:)[\s\S]*$/;
const domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;

/**
 * @param {string} base
 * @param {string} href
 */
export function resolveUrl(base, href) {
  if (!baseUrls[' ' + base]) {
    // we can ignore everything in base after the last slash of its path component,
    // but we might need to add _that_
    // https://tools.ietf.org/html/rfc3986#section-3
    if (justDomain.test(base)) {
      baseUrls[' ' + base] = base + '/';
    } else {
      baseUrls[' ' + base] = rtrim(base, '/', true);
    }
  }
  base = baseUrls[' ' + base];
  const relativeBase = base.indexOf(':') === -1;

  if (href.substring(0, 2) === '//') {
    if (relativeBase) {
      return href;
    }
    return base.replace(protocol, '$1') + href;
  } else if (href.charAt(0) === '/') {
    if (relativeBase) {
      return href;
    }
    return base.replace(domain, '$1') + href;
  } else {
    return base + href;
  }
}

export const noopTest = { exec: function noopTest() {} };

export function merge(obj) {
  let i = 1,
    target,
    key;

  for (; i < arguments.length; i++) {
    target = arguments[i];
    for (key in target) {
      if (Object.prototype.hasOwnProperty.call(target, key)) {
        obj[key] = target[key];
      }
    }
  }

  return obj;
}

export function splitCells(tableRow, count) {
  // ensure that every cell-delimiting pipe has a space
  // before it to distinguish it from an escaped pipe
  const row = tableRow.replace(/\|/g, (match, offset, str) => {
      let escaped = false,
        curr = offset;
      while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
      if (escaped) {
        // odd number of slashes means | is escaped
        // so we leave it alone
        return '|';
      } else {
        // add space before unescaped |
        return ' |';
      }
    }),
    cells = row.split(/ \|/);
  let i = 0;

  // First/last cell in a row cannot be empty if it has no leading/trailing pipe
  if (!cells[0].trim()) { cells.shift(); }
  if (cells.length > 0 && !cells[cells.length - 1].trim()) { cells.pop(); }

  if (cells.length > count) {
    cells.splice(count);
  } else {
    while (cells.length < count) cells.push('');
  }

  for (; i < cells.length; i++) {
    // leading or trailing whitespace is ignored per the gfm spec
    cells[i] = cells[i].trim().replace(/\\\|/g, '|');
  }
  return cells;
}

/**
 * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
 * /c*$/ is vulnerable to REDOS.
 *
 * @param {string} str
 * @param {string} c
 * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.
 */
export function rtrim(str, c, invert) {
  const l = str.length;
  if (l === 0) {
    return '';
  }

  // Length of suffix matching the invert condition.
  let suffLen = 0;

  // Step left until we fail to match the invert condition.
  while (suffLen < l) {
    const currChar = str.charAt(l - suffLen - 1);
    if (currChar === c && !invert) {
      suffLen++;
    } else if (currChar !== c && invert) {
      suffLen++;
    } else {
      break;
    }
  }

  return str.slice(0, l - suffLen);
}

export function findClosingBracket(str, b) {
  if (str.indexOf(b[1]) === -1) {
    return -1;
  }
  const l = str.length;
  let level = 0,
    i = 0;
  for (; i < l; i++) {
    if (str[i] === '\\') {
      i++;
    } else if (str[i] === b[0]) {
      level++;
    } else if (str[i] === b[1]) {
      level--;
      if (level < 0) {
        return i;
      }
    }
  }
  return -1;
}

export function checkSanitizeDeprecation(opt) {
  if (opt && opt.sanitize && !opt.silent) {
    console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');
  }
}

// copied from https://stackoverflow.com/a/5450113/806777
/**
 * @param {string} pattern
 * @param {number} count
 */
export function repeatString(pattern, count) {
  if (count < 1) {
    return '';
  }
  let result = '';
  while (count > 1) {
    if (count & 1) {
      result += pattern;
    }
    count >>= 1;
    pattern += pattern;
  }
  return result + pattern;
}
import { Tokenizer } from './Tokenizer.js';
import { defaults } from './defaults.js';
import { block, inline } from './rules.js';
import { repeatString } from './helpers.js';

/**
 * smartypants text replacement
 * @param {string} text
 */
function smartypants(text) {
  return text
    // em-dashes
    .replace(/---/g, '\u2014')
    // en-dashes
    .replace(/--/g, '\u2013')
    // opening singles
    .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
    // closing singles & apostrophes
    .replace(/'/g, '\u2019')
    // opening doubles
    .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
    // closing doubles
    .replace(/"/g, '\u201d')
    // ellipses
    .replace(/\.{3}/g, '\u2026');
}

/**
 * mangle email addresses
 * @param {string} text
 */
function mangle(text) {
  let out = '',
    i,
    ch;

  const l = text.length;
  for (i = 0; i < l; i++) {
    ch = text.charCodeAt(i);
    if (Math.random() > 0.5) {
      ch = 'x' + ch.toString(16);
    }
    out += '&#' + ch + ';';
  }

  return out;
}

/**
 * Block Lexer
 */
export class Lexer {
  constructor(options) {
    this.tokens = [];
    this.tokens.links = Object.create(null);
    this.options = options || defaults;
    this.options.tokenizer = this.options.tokenizer || new Tokenizer();
    this.tokenizer = this.options.tokenizer;
    this.tokenizer.options = this.options;
    this.tokenizer.lexer = this;
    this.inlineQueue = [];
    this.state = {
      inLink: false,
      inRawBlock: false,
      top: true
    };

    const rules = {
      block: block.normal,
      inline: inline.normal
    };

    if (this.options.pedantic) {
      rules.block = block.pedantic;
      rules.inline = inline.pedantic;
    } else if (this.options.gfm) {
      rules.block = block.gfm;
      if (this.options.breaks) {
        rules.inline = inline.breaks;
      } else {
        rules.inline = inline.gfm;
      }
    }
    this.tokenizer.rules = rules;
  }

  /**
   * Expose Rules
   */
  static get rules() {
    return {
      block,
      inline
    };
  }

  /**
   * Static Lex Method
   */
  static lex(src, options) {
    const lexer = new Lexer(options);
    return lexer.lex(src);
  }

  /**
   * Static Lex Inline Method
   */
  static lexInline(src, options) {
    const lexer = new Lexer(options);
    return lexer.inlineTokens(src);
  }

  /**
   * Preprocessing
   */
  lex(src) {
    src = src
      .replace(/\r\n|\r/g, '\n');

    this.blockTokens(src, this.tokens);

    let next;
    while (next = this.inlineQueue.shift()) {
      this.inlineTokens(next.src, next.tokens);
    }

    return this.tokens;
  }

  /**
   * Lexing
   */
  blockTokens(src, tokens = []) {
    if (this.options.pedantic) {
      src = src.replace(/\t/g, '    ').replace(/^ +$/gm, '');
    } else {
      src = src.replace(/^( *)(\t+)/gm, (_, leading, tabs) => {
        return leading + '    '.repeat(tabs.length);
      });
    }

    let token, lastToken, cutSrc, lastParagraphClipped;

    while (src) {
      if (this.options.extensions
        && this.options.extensions.block
        && this.options.extensions.block.some((extTokenizer) => {
          if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
            src = src.substring(token.raw.length);
            tokens.push(token);
            return true;
          }
          return false;
        })) {
        continue;
      }

      // newline
      if (token = this.tokenizer.space(src)) {
        src = src.substring(token.raw.length);
        if (token.raw.length === 1 && tokens.length > 0) {
          // if there's a single \n as a spacer, it's terminating the last line,
          // so move it there so that we don't get unecessary paragraph tags
          tokens[tokens.length - 1].raw += '\n';
        } else {
          tokens.push(token);
        }
        continue;
      }

      // code
      if (token = this.tokenizer.code(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        // An indented code block cannot interrupt a paragraph.
        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.text;
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      // fences
      if (token = this.tokenizer.fences(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // heading
      if (token = this.tokenizer.heading(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // hr
      if (token = this.tokenizer.hr(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // blockquote
      if (token = this.tokenizer.blockquote(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // list
      if (token = this.tokenizer.list(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // html
      if (token = this.tokenizer.html(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // def
      if (token = this.tokenizer.def(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.raw;
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else if (!this.tokens.links[token.tag]) {
          this.tokens.links[token.tag] = {
            href: token.href,
            title: token.title
          };
        }
        continue;
      }

      // table (gfm)
      if (token = this.tokenizer.table(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // lheading
      if (token = this.tokenizer.lheading(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // top-level paragraph
      // prevent paragraph consuming extensions by clipping 'src' to extension start
      cutSrc = src;
      if (this.options.extensions && this.options.extensions.startBlock) {
        let startIndex = Infinity;
        const tempSrc = src.slice(1);
        let tempStart;
        this.options.extensions.startBlock.forEach(function(getStartIndex) {
          tempStart = getStartIndex.call({ lexer: this }, tempSrc);
          if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }
        });
        if (startIndex < Infinity && startIndex >= 0) {
          cutSrc = src.substring(0, startIndex + 1);
        }
      }
      if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
        lastToken = tokens[tokens.length - 1];
        if (lastParagraphClipped && lastToken.type === 'paragraph') {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.text;
          this.inlineQueue.pop();
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else {
          tokens.push(token);
        }
        lastParagraphClipped = (cutSrc.length !== src.length);
        src = src.substring(token.raw.length);
        continue;
      }

      // text
      if (token = this.tokenizer.text(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        if (lastToken && lastToken.type === 'text') {
          lastToken.raw += '\n' + token.raw;
          lastToken.text += '\n' + token.text;
          this.inlineQueue.pop();
          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      if (src) {
        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
        if (this.options.silent) {
          console.error(errMsg);
          break;
        } else {
          throw new Error(errMsg);
        }
      }
    }

    this.state.top = true;
    return tokens;
  }

  inline(src, tokens = []) {
    this.inlineQueue.push({ src, tokens });
    return tokens;
  }

  /**
   * Lexing/Compiling
   */
  inlineTokens(src, tokens = []) {
    let token, lastToken, cutSrc;

    // String with links masked to avoid interference with em and strong
    let maskedSrc = src;
    let match;
    let keepPrevChar, prevChar;

    // Mask out reflinks
    if (this.tokens.links) {
      const links = Object.keys(this.tokens.links);
      if (links.length > 0) {
        while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
          if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
            maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);
          }
        }
      }
    }
    // Mask out other blocks
    while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
      maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
    }

    // Mask out escaped em & strong delimiters
    while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
      maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
    }

    while (src) {
      if (!keepPrevChar) {
        prevChar = '';
      }
      keepPrevChar = false;

      // extensions
      if (this.options.extensions
        && this.options.extensions.inline
        && this.options.extensions.inline.some((extTokenizer) => {
          if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
            src = src.substring(token.raw.length);
            tokens.push(token);
            return true;
          }
          return false;
        })) {
        continue;
      }

      // escape
      if (token = this.tokenizer.escape(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // tag
      if (token = this.tokenizer.tag(src)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        if (lastToken && token.type === 'text' && lastToken.type === 'text') {
          lastToken.raw += token.raw;
          lastToken.text += token.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      // link
      if (token = this.tokenizer.link(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // reflink, nolink
      if (token = this.tokenizer.reflink(src, this.tokens.links)) {
        src = src.substring(token.raw.length);
        lastToken = tokens[tokens.length - 1];
        if (lastToken && token.type === 'text' && lastToken.type === 'text') {
          lastToken.raw += token.raw;
          lastToken.text += token.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      // em & strong
      if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // code
      if (token = this.tokenizer.codespan(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // br
      if (token = this.tokenizer.br(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // del (gfm)
      if (token = this.tokenizer.del(src)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // autolink
      if (token = this.tokenizer.autolink(src, mangle)) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // url (gfm)
      if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
        src = src.substring(token.raw.length);
        tokens.push(token);
        continue;
      }

      // text
      // prevent inlineText consuming extensions by clipping 'src' to extension start
      cutSrc = src;
      if (this.options.extensions && this.options.extensions.startInline) {
        let startIndex = Infinity;
        const tempSrc = src.slice(1);
        let tempStart;
        this.options.extensions.startInline.forEach(function(getStartIndex) {
          tempStart = getStartIndex.call({ lexer: this }, tempSrc);
          if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }
        });
        if (startIndex < Infinity && startIndex >= 0) {
          cutSrc = src.substring(0, startIndex + 1);
        }
      }
      if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
        src = src.substring(token.raw.length);
        if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started
          prevChar = token.raw.slice(-1);
        }
        keepPrevChar = true;
        lastToken = tokens[tokens.length - 1];
        if (lastToken && lastToken.type === 'text') {
          lastToken.raw += token.raw;
          lastToken.text += token.text;
        } else {
          tokens.push(token);
        }
        continue;
      }

      if (src) {
        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
        if (this.options.silent) {
          console.error(errMsg);
          break;
        } else {
          throw new Error(errMsg);
        }
      }
    }

    return tokens;
  }
}
import { Lexer } from './Lexer.js';
import { Parser } from './Parser.js';
import { Tokenizer } from './Tokenizer.js';
import { Renderer } from './Renderer.js';
import { TextRenderer } from './TextRenderer.js';
import { Slugger } from './Slugger.js';
import {
  merge,
  checkSanitizeDeprecation,
  escape
} from './helpers.js';
import {
  getDefaults,
  changeDefaults,
  defaults
} from './defaults.js';

/**
 * Marked
 */
export function marked(src, opt, callback) {
  // throw error in case of non string input
  if (typeof src === 'undefined' || src === null) {
    throw new Error('marked(): input parameter is undefined or null');
  }
  if (typeof src !== 'string') {
    throw new Error('marked(): input parameter is of type '
      + Object.prototype.toString.call(src) + ', string expected');
  }

  if (typeof opt === 'function') {
    callback = opt;
    opt = null;
  }

  opt = merge({}, marked.defaults, opt || {});
  checkSanitizeDeprecation(opt);

  if (callback) {
    const highlight = opt.highlight;
    let tokens;

    try {
      tokens = Lexer.lex(src, opt);
    } catch (e) {
      return callback(e);
    }

    const done = function(err) {
      let out;

      if (!err) {
        try {
          if (opt.walkTokens) {
            marked.walkTokens(tokens, opt.walkTokens);
          }
          out = Parser.parse(tokens, opt);
        } catch (e) {
          err = e;
        }
      }

      opt.highlight = highlight;

      return err
        ? callback(err)
        : callback(null, out);
    };

    if (!highlight || highlight.length < 3) {
      return done();
    }

    delete opt.highlight;

    if (!tokens.length) return done();

    let pending = 0;
    marked.walkTokens(tokens, function(token) {
      if (token.type === 'code') {
        pending++;
        setTimeout(() => {
          highlight(token.text, token.lang, function(err, code) {
            if (err) {
              return done(err);
            }
            if (code != null && code !== token.text) {
              token.text = code;
              token.escaped = true;
            }

            pending--;
            if (pending === 0) {
              done();
            }
          });
        }, 0);
      }
    });

    if (pending === 0) {
      done();
    }

    return;
  }

  function onError(e) {
    e.message += '\nPlease report this to https://github.com/markedjs/marked.';
    if (opt.silent) {
      return '<p>An error occurred:</p><pre>'
        + escape(e.message + '', true)
        + '</pre>';
    }
    throw e;
  }

  try {
    const tokens = Lexer.lex(src, opt);
    if (opt.walkTokens) {
      if (opt.async) {
        return Promise.all(marked.walkTokens(tokens, opt.walkTokens))
          .then(() => {
            return Parser.parse(tokens, opt);
          })
          .catch(onError);
      }
      marked.walkTokens(tokens, opt.walkTokens);
    }
    return Parser.parse(tokens, opt);
  } catch (e) {
    onError(e);
  }
}

/**
 * Options
 */

marked.options =
marked.setOptions = function(opt) {
  merge(marked.defaults, opt);
  changeDefaults(marked.defaults);
  return marked;
};

marked.getDefaults = getDefaults;

marked.defaults = defaults;

/**
 * Use Extension
 */

marked.use = function(...args) {
  const opts = merge({}, ...args);
  const extensions = marked.defaults.extensions || { renderers: {}, childTokens: {} };
  let hasExtensions;

  args.forEach((pack) => {
    // ==-- Parse "addon" extensions --== //
    if (pack.extensions) {
      hasExtensions = true;
      pack.extensions.forEach((ext) => {
        if (!ext.name) {
          throw new Error('extension name required');
        }
        if (ext.renderer) { // Renderer extensions
          const prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;
          if (prevRenderer) {
            // Replace extension with func to run new extension but fall back if false
            extensions.renderers[ext.name] = function(...args) {
              let ret = ext.renderer.apply(this, args);
              if (ret === false) {
                ret = prevRenderer.apply(this, args);
              }
              return ret;
            };
          } else {
            extensions.renderers[ext.name] = ext.renderer;
          }
        }
        if (ext.tokenizer) { // Tokenizer Extensions
          if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {
            throw new Error("extension level must be 'block' or 'inline'");
          }
          if (extensions[ext.level]) {
            extensions[ext.level].unshift(ext.tokenizer);
          } else {
            extensions[ext.level] = [ext.tokenizer];
          }
          if (ext.start) { // Function to check for start of token
            if (ext.level === 'block') {
              if (extensions.startBlock) {
                extensions.startBlock.push(ext.start);
              } else {
                extensions.startBlock = [ext.start];
              }
            } else if (ext.level === 'inline') {
              if (extensions.startInline) {
                extensions.startInline.push(ext.start);
              } else {
                extensions.startInline = [ext.start];
              }
            }
          }
        }
        if (ext.childTokens) { // Child tokens to be visited by walkTokens
          extensions.childTokens[ext.name] = ext.childTokens;
        }
      });
    }

    // ==-- Parse "overwrite" extensions --== //
    if (pack.renderer) {
      const renderer = marked.defaults.renderer || new Renderer();
      for (const prop in pack.renderer) {
        const prevRenderer = renderer[prop];
        // Replace renderer with func to run extension, but fall back if false
        renderer[prop] = (...args) => {
          let ret = pack.renderer[prop].apply(renderer, args);
          if (ret === false) {
            ret = prevRenderer.apply(renderer, args);
          }
          return ret;
        };
      }
      opts.renderer = renderer;
    }
    if (pack.tokenizer) {
      const tokenizer = marked.defaults.tokenizer || new Tokenizer();
      for (const prop in pack.tokenizer) {
        const prevTokenizer = tokenizer[prop];
        // Replace tokenizer with func to run extension, but fall back if false
        tokenizer[prop] = (...args) => {
          let ret = pack.tokenizer[prop].apply(tokenizer, args);
          if (ret === false) {
            ret = prevTokenizer.apply(tokenizer, args);
          }
          return ret;
        };
      }
      opts.tokenizer = tokenizer;
    }

    // ==-- Parse WalkTokens extensions --== //
    if (pack.walkTokens) {
      const walkTokens = marked.defaults.walkTokens;
      opts.walkTokens = function(token) {
        let values = [];
        values.push(pack.walkTokens.call(this, token));
        if (walkTokens) {
          values = values.concat(walkTokens.call(this, token));
        }
        return values;
      };
    }

    if (hasExtensions) {
      opts.extensions = extensions;
    }

    marked.setOptions(opts);
  });
};

/**
 * Run callback for every token
 */

marked.walkTokens = function(tokens, callback) {
  let values = [];
  for (const token of tokens) {
    values = values.concat(callback.call(marked, token));
    switch (token.type) {
      case 'table': {
        for (const cell of token.header) {
          values = values.concat(marked.walkTokens(cell.tokens, callback));
        }
        for (const row of token.rows) {
          for (const cell of row) {
            values = values.concat(marked.walkTokens(cell.tokens, callback));
          }
        }
        break;
      }
      case 'list': {
        values = values.concat(marked.walkTokens(token.items, callback));
        break;
      }
      default: {
        if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { // Walk any extensions
          marked.defaults.extensions.childTokens[token.type].forEach(function(childTokens) {
            values = values.concat(marked.walkTokens(token[childTokens], callback));
          });
        } else if (token.tokens) {
          values = values.concat(marked.walkTokens(token.tokens, callback));
        }
      }
    }
  }
  return values;
};

/**
 * Parse Inline
 * @param {string} src
 */
marked.parseInline = function(src, opt) {
  // throw error in case of non string input
  if (typeof src === 'undefined' || src === null) {
    throw new Error('marked.parseInline(): input parameter is undefined or null');
  }
  if (typeof src !== 'string') {
    throw new Error('marked.parseInline(): input parameter is of type '
      + Object.prototype.toString.call(src) + ', string expected');
  }

  opt = merge({}, marked.defaults, opt || {});
  checkSanitizeDeprecation(opt);

  try {
    const tokens = Lexer.lexInline(src, opt);
    if (opt.walkTokens) {
      marked.walkTokens(tokens, opt.walkTokens);
    }
    return Parser.parseInline(tokens, opt);
  } catch (e) {
    e.message += '\nPlease report this to https://github.com/markedjs/marked.';
    if (opt.silent) {
      return '<p>An error occurred:</p><pre>'
        + escape(e.message + '', true)
        + '</pre>';
    }
    throw e;
  }
};

/**
 * Expose
 */
marked.Parser = Parser;
marked.parser = Parser.parse;
marked.Renderer = Renderer;
marked.TextRenderer = TextRenderer;
marked.Lexer = Lexer;
marked.lexer = Lexer.lex;
marked.Tokenizer = Tokenizer;
marked.Slugger = Slugger;
marked.parse = marked;

export const options = marked.options;
export const setOptions = marked.setOptions;
export const use = marked.use;
export const walkTokens = marked.walkTokens;
export const parseInline = marked.parseInline;
export const parse = marked;
export const parser = Parser.parse;
export const lexer = Lexer.lex;
export { defaults, getDefaults } from './defaults.js';
export { Lexer } from './Lexer.js';
export { Parser } from './Parser.js';
export { Tokenizer } from './Tokenizer.js';
export { Renderer } from './Renderer.js';
export { TextRenderer } from './TextRenderer.js';
export { Slugger } from './Slugger.js';
import { Renderer } from './Renderer.js';
import { TextRenderer } from './TextRenderer.js';
import { Slugger } from './Slugger.js';
import { defaults } from './defaults.js';
import {
  unescape
} from './helpers.js';

/**
 * Parsing & Compiling
 */
export class Parser {
  constructor(options) {
    this.options = options || defaults;
    this.options.renderer = this.options.renderer || new Renderer();
    this.renderer = this.options.renderer;
    this.renderer.options = this.options;
    this.textRenderer = new TextRenderer();
    this.slugger = new Slugger();
  }

  /**
   * Static Parse Method
   */
  static parse(tokens, options) {
    const parser = new Parser(options);
    return parser.parse(tokens);
  }

  /**
   * Static Parse Inline Method
   */
  static parseInline(tokens, options) {
    const parser = new Parser(options);
    return parser.parseInline(tokens);
  }

  /**
   * Parse Loop
   */
  parse(tokens, top = true) {
    let out = '',
      i,
      j,
      k,
      l2,
      l3,
      row,
      cell,
      header,
      body,
      token,
      ordered,
      start,
      loose,
      itemBody,
      item,
      checked,
      task,
      checkbox,
      ret;

    const l = tokens.length;
    for (i = 0; i < l; i++) {
      token = tokens[i];

      // Run any renderer extensions
      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
        ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);
        if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
          out += ret || '';
          continue;
        }
      }

      switch (token.type) {
        case 'space': {
          continue;
        }
        case 'hr': {
          out += this.renderer.hr();
          continue;
        }
        case 'heading': {
          out += this.renderer.heading(
            this.parseInline(token.tokens),
            token.depth,
            unescape(this.parseInline(token.tokens, this.textRenderer)),
            this.slugger);
          continue;
        }
        case 'code': {
          out += this.renderer.code(token.text,
            token.lang,
            token.escaped);
          continue;
        }
        case 'table': {
          header = '';

          // header
          cell = '';
          l2 = token.header.length;
          for (j = 0; j < l2; j++) {
            cell += this.renderer.tablecell(
              this.parseInline(token.header[j].tokens),
              { header: true, align: token.align[j] }
            );
          }
          header += this.renderer.tablerow(cell);

          body = '';
          l2 = token.rows.length;
          for (j = 0; j < l2; j++) {
            row = token.rows[j];

            cell = '';
            l3 = row.length;
            for (k = 0; k < l3; k++) {
              cell += this.renderer.tablecell(
                this.parseInline(row[k].tokens),
                { header: false, align: token.align[k] }
              );
            }

            body += this.renderer.tablerow(cell);
          }
          out += this.renderer.table(header, body);
          continue;
        }
        case 'blockquote': {
          body = this.parse(token.tokens);
          out += this.renderer.blockquote(body);
          continue;
        }
        case 'list': {
          ordered = token.ordered;
          start = token.start;
          loose = token.loose;
          l2 = token.items.length;

          body = '';
          for (j = 0; j < l2; j++) {
            item = token.items[j];
            checked = item.checked;
            task = item.task;

            itemBody = '';
            if (item.task) {
              checkbox = this.renderer.checkbox(checked);
              if (loose) {
                if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
                  item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;
                  if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
                    item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
                  }
                } else {
                  item.tokens.unshift({
                    type: 'text',
                    text: checkbox
                  });
                }
              } else {
                itemBody += checkbox;
              }
            }

            itemBody += this.parse(item.tokens, loose);
            body += this.renderer.listitem(itemBody, task, checked);
          }

          out += this.renderer.list(body, ordered, start);
          continue;
        }
        case 'html': {
          // TODO parse inline content if parameter markdown=1
          out += this.renderer.html(token.text);
          continue;
        }
        case 'paragraph': {
          out += this.renderer.paragraph(this.parseInline(token.tokens));
          continue;
        }
        case 'text': {
          body = token.tokens ? this.parseInline(token.tokens) : token.text;
          while (i + 1 < l && tokens[i + 1].type === 'text') {
            token = tokens[++i];
            body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);
          }
          out += top ? this.renderer.paragraph(body) : body;
          continue;
        }

        default: {
          const errMsg = 'Token with "' + token.type + '" type was not found.';
          if (this.options.silent) {
            console.error(errMsg);
            return;
          } else {
            throw new Error(errMsg);
          }
        }
      }
    }

    return out;
  }

  /**
   * Parse Inline Tokens
   */
  parseInline(tokens, renderer) {
    renderer = renderer || this.renderer;
    let out = '',
      i,
      token,
      ret;

    const l = tokens.length;
    for (i = 0; i < l; i++) {
      token = tokens[i];

      // Run any renderer extensions
      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
        ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);
        if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
          out += ret || '';
          continue;
        }
      }

      switch (token.type) {
        case 'escape': {
          out += renderer.text(token.text);
          break;
        }
        case 'html': {
          out += renderer.html(token.text);
          break;
        }
        case 'link': {
          out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));
          break;
        }
        case 'image': {
          out += renderer.image(token.href, token.title, token.text);
          break;
        }
        case 'strong': {
          out += renderer.strong(this.parseInline(token.tokens, renderer));
          break;
        }
        case 'em': {
          out += renderer.em(this.parseInline(token.tokens, renderer));
          break;
        }
        case 'codespan': {
          out += renderer.codespan(token.text);
          break;
        }
        case 'br': {
          out += renderer.br();
          break;
        }
        case 'del': {
          out += renderer.del(this.parseInline(token.tokens, renderer));
          break;
        }
        case 'text': {
          out += renderer.text(token.text);
          break;
        }
        default: {
          const errMsg = 'Token with "' + token.type + '" type was not found.';
          if (this.options.silent) {
            console.error(errMsg);
            return;
          } else {
            throw new Error(errMsg);
          }
        }
      }
    }
    return out;
  }
}
import { defaults } from './defaults.js';
import {
  cleanUrl,
  escape
} from './helpers.js';

/**
 * Renderer
 */
export class Renderer {
  constructor(options) {
    this.options = options || defaults;
  }

  code(code, infostring, escaped) {
    const lang = (infostring || '').match(/\S*/)[0];
    if (this.options.highlight) {
      const out = this.options.highlight(code, lang);
      if (out != null && out !== code) {
        escaped = true;
        code = out;
      }
    }

    code = code.replace(/\n$/, '') + '\n';

    if (!lang) {
      return '<pre><code>'
        + (escaped ? code : escape(code, true))
        + '</code></pre>\n';
    }

    return '<pre><code class="'
      + this.options.langPrefix
      + escape(lang, true)
      + '">'
      + (escaped ? code : escape(code, true))
      + '</code></pre>\n';
  }

  /**
   * @param {string} quote
   */
  blockquote(quote) {
    return `<blockquote>\n${quote}</blockquote>\n`;
  }

  html(html) {
    return html;
  }

  /**
   * @param {string} text
   * @param {string} level
   * @param {string} raw
   * @param {any} slugger
   */
  heading(text, level, raw, slugger) {
    if (this.options.headerIds) {
      const id = this.options.headerPrefix + slugger.slug(raw);
      return `<h${level} id="${id}">${text}</h${level}>\n`;
    }

    // ignore IDs
    return `<h${level}>${text}</h${level}>\n`;
  }

  hr() {
    return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
  }

  list(body, ordered, start) {
    const type = ordered ? 'ol' : 'ul',
      startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
    return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
  }

  /**
   * @param {string} text
   */
  listitem(text) {
    return `<li>${text}</li>\n`;
  }

  checkbox(checked) {
    return '<input '
      + (checked ? 'checked="" ' : '')
      + 'disabled="" type="checkbox"'
      + (this.options.xhtml ? ' /' : '')
      + '> ';
  }

  /**
   * @param {string} text
   */
  paragraph(text) {
    return `<p>${text}</p>\n`;
  }

  /**
   * @param {string} header
   * @param {string} body
   */
  table(header, body) {
    if (body) body = `<tbody>${body}</tbody>`;

    return '<table>\n'
      + '<thead>\n'
      + header
      + '</thead>\n'
      + body
      + '</table>\n';
  }

  /**
   * @param {string} content
   */
  tablerow(content) {
    return `<tr>\n${content}</tr>\n`;
  }

  tablecell(content, flags) {
    const type = flags.header ? 'th' : 'td';
    const tag = flags.align
      ? `<${type} align="${flags.align}">`
      : `<${type}>`;
    return tag + content + `</${type}>\n`;
  }

  /**
   * span level renderer
   * @param {string} text
   */
  strong(text) {
    return `<strong>${text}</strong>`;
  }

  /**
   * @param {string} text
   */
  em(text) {
    return `<em>${text}</em>`;
  }

  /**
   * @param {string} text
   */
  codespan(text) {
    return `<code>${text}</code>`;
  }

  br() {
    return this.options.xhtml ? '<br/>' : '<br>';
  }

  /**
   * @param {string} text
   */
  del(text) {
    return `<del>${text}</del>`;
  }

  /**
   * @param {string} href
   * @param {string} title
   * @param {string} text
   */
  link(href, title, text) {
    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
    if (href === null) {
      return text;
    }
    let out = '<a href="' + escape(href) + '"';
    if (title) {
      out += ' title="' + title + '"';
    }
    out += '>' + text + '</a>';
    return out;
  }

  /**
   * @param {string} href
   * @param {string} title
   * @param {string} text
   */
  image(href, title, text) {
    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
    if (href === null) {
      return text;
    }

    let out = `<img src="${href}" alt="${text}"`;
    if (title) {
      out += ` title="${title}"`;
    }
    out += this.options.xhtml ? '/>' : '>';
    return out;
  }

  text(text) {
    return text;
  }
}
import {
  noopTest,
  edit,
  merge
} from './helpers.js';

/**
 * Block-Level Grammar
 */
export const block = {
  newline: /^(?: *(?:\n|$))+/,
  code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
  fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,
  hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,
  heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
  blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
  list: /^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,
  html: '^ {0,3}(?:' // optional indentation
    + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
    + '|comment[^\\n]*(\\n+|$)' // (2)
    + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3)
    + '|<![A-Z][\\s\\S]*?(?:>\\n*|$)' // (4)
    + '|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)' // (5)
    + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (6)
    + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) open tag
    + '|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag
    + ')',
  def: /^ {0,3}\[(label)\]: *(?:\n *)?<?([^\s>]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,
  table: noopTest,
  lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
  // regex template, placeholders will be replaced according to different paragraph
  // interruption rules of commonmark and the original markdown spec:
  _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,
  text: /^[^\n]+/
};

block._label = /(?!\s*\])(?:\\.|[^\[\]\\])+/;
block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
block.def = edit(block.def)
  .replace('label', block._label)
  .replace('title', block._title)
  .getRegex();

block.bullet = /(?:[*+-]|\d{1,9}[.)])/;
block.listItemStart = edit(/^( *)(bull) */)
  .replace('bull', block.bullet)
  .getRegex();

block.list = edit(block.list)
  .replace(/bull/g, block.bullet)
  .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
  .replace('def', '\\n+(?=' + block.def.source + ')')
  .getRegex();

block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
  + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
  + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
  + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
  + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
  + '|track|ul';
block._comment = /<!--(?!-?>)[\s\S]*?(?:-->|$)/;
block.html = edit(block.html, 'i')
  .replace('comment', block._comment)
  .replace('tag', block._tag)
  .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
  .getRegex();

block.paragraph = edit(block._paragraph)
  .replace('hr', block.hr)
  .replace('heading', ' {0,3}#{1,6} ')
  .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
  .replace('|table', '')
  .replace('blockquote', ' {0,3}>')
  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n')
  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
  .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
  .getRegex();

block.blockquote = edit(block.blockquote)
  .replace('paragraph', block.paragraph)
  .getRegex();

/**
 * Normal Block Grammar
 */

block.normal = merge({}, block);

/**
 * GFM Block Grammar
 */

block.gfm = merge({}, block.normal, {
  table: '^ *([^\\n ].*\\|.*)\\n' // Header
    + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align
    + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells
});

block.gfm.table = edit(block.gfm.table)
  .replace('hr', block.hr)
  .replace('heading', ' {0,3}#{1,6} ')
  .replace('blockquote', ' {0,3}>')
  .replace('code', ' {4}[^\\n]')
  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n')
  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
  .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
  .getRegex();

block.gfm.paragraph = edit(block._paragraph)
  .replace('hr', block.hr)
  .replace('heading', ' {0,3}#{1,6} ')
  .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
  .replace('table', block.gfm.table) // interrupt paragraphs with table
  .replace('blockquote', ' {0,3}>')
  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n')
  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
  .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
  .getRegex();
/**
 * Pedantic grammar (original John Gruber's loose markdown specification)
 */

block.pedantic = merge({}, block.normal, {
  html: edit(
    '^ *(?:comment *(?:\\n|\\s*$)'
    + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
    + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
    .replace('comment', block._comment)
    .replace(/tag/g, '(?!(?:'
      + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
      + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
      + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
    .getRegex(),
  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
  heading: /^(#{1,6})(.*)(?:\n+|$)/,
  fences: noopTest, // fences not supported
  paragraph: edit(block.normal._paragraph)
    .replace('hr', block.hr)
    .replace('heading', ' *#{1,6} *[^\n]')
    .replace('lheading', block.lheading)
    .replace('blockquote', ' {0,3}>')
    .replace('|fences', '')
    .replace('|list', '')
    .replace('|html', '')
    .getRegex()
});

/**
 * Inline-Level Grammar
 */
export const inline = {
  escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
  autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
  url: noopTest,
  tag: '^comment'
    + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
    + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
    + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
    + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
    + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
  link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
  reflink: /^!?\[(label)\]\[(ref)\]/,
  nolink: /^!?\[(ref)\](?:\[\])?/,
  reflinkSearch: 'reflink|nolink(?!\\()',
  emStrong: {
    lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,
    //        (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left.  (5) and (6) can be either Left or Right.
    //          () Skip orphan inside strong  () Consume to delim (1) #***                (2) a***#, a***                   (3) #***a, ***a                 (4) ***#              (5) #***#                 (6) a***a
    rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,
    rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _
  },
  code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
  br: /^( {2,}|\\)\n(?!\s*$)/,
  del: noopTest,
  text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
  punctuation: /^([\spunctuation])/
};

// list of punctuation marks from CommonMark spec
// without * and _ to handle the different emphasis markers * and _
inline._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();

// sequences em should skip over [title](link), `code`, <html>
inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
inline.escapedEmSt = /\\\*|\\_/g;

inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();

inline.emStrong.lDelim = edit(inline.emStrong.lDelim)
  .replace(/punct/g, inline._punctuation)
  .getRegex();

inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g')
  .replace(/punct/g, inline._punctuation)
  .getRegex();

inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g')
  .replace(/punct/g, inline._punctuation)
  .getRegex();

inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;

inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
inline.autolink = edit(inline.autolink)
  .replace('scheme', inline._scheme)
  .replace('email', inline._email)
  .getRegex();

inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;

inline.tag = edit(inline.tag)
  .replace('comment', inline._comment)
  .replace('attribute', inline._attribute)
  .getRegex();

inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;
inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;

inline.link = edit(inline.link)
  .replace('label', inline._label)
  .replace('href', inline._href)
  .replace('title', inline._title)
  .getRegex();

inline.reflink = edit(inline.reflink)
  .replace('label', inline._label)
  .replace('ref', block._label)
  .getRegex();

inline.nolink = edit(inline.nolink)
  .replace('ref', block._label)
  .getRegex();

inline.reflinkSearch = edit(inline.reflinkSearch, 'g')
  .replace('reflink', inline.reflink)
  .replace('nolink', inline.nolink)
  .getRegex();

/**
 * Normal Inline Grammar
 */

inline.normal = merge({}, inline);

/**
 * Pedantic Inline Grammar
 */

inline.pedantic = merge({}, inline.normal, {
  strong: {
    start: /^__|\*\*/,
    middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
    endAst: /\*\*(?!\*)/g,
    endUnd: /__(?!_)/g
  },
  em: {
    start: /^_|\*/,
    middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,
    endAst: /\*(?!\*)/g,
    endUnd: /_(?!_)/g
  },
  link: edit(/^!?\[(label)\]\((.*?)\)/)
    .replace('label', inline._label)
    .getRegex(),
  reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
    .replace('label', inline._label)
    .getRegex()
});

/**
 * GFM Inline Grammar
 */

inline.gfm = merge({}, inline.normal, {
  escape: edit(inline.escape).replace('])', '~|])').getRegex(),
  _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
  url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
  _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
  del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
  text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
});

inline.gfm.url = edit(inline.gfm.url, 'i')
  .replace('email', inline.gfm._extended_email)
  .getRegex();
/**
 * GFM + Line Breaks Inline Grammar
 */

inline.breaks = merge({}, inline.gfm, {
  br: edit(inline.br).replace('{2,}', '*').getRegex(),
  text: edit(inline.gfm.text)
    .replace('\\b_', '\\b_| {2,}\\n')
    .replace(/\{2,\}/g, '*')
    .getRegex()
});
/**
 * Slugger generates header id
 */
export class Slugger {
  constructor() {
    this.seen = {};
  }

  /**
   * @param {string} value
   */
  serialize(value) {
    return value
      .toLowerCase()
      .trim()
      // remove html tags
      .replace(/<[!\/a-z].*?>/ig, '')
      // remove unwanted chars
      .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
      .replace(/\s/g, '-');
  }

  /**
   * Finds the next safe (unique) slug to use
   * @param {string} originalSlug
   * @param {boolean} isDryRun
   */
  getNextSafeSlug(originalSlug, isDryRun) {
    let slug = originalSlug;
    let occurenceAccumulator = 0;
    if (this.seen.hasOwnProperty(slug)) {
      occurenceAccumulator = this.seen[originalSlug];
      do {
        occurenceAccumulator++;
        slug = originalSlug + '-' + occurenceAccumulator;
      } while (this.seen.hasOwnProperty(slug));
    }
    if (!isDryRun) {
      this.seen[originalSlug] = occurenceAccumulator;
      this.seen[slug] = 0;
    }
    return slug;
  }

  /**
   * Convert string to unique id
   * @param {object} [options]
   * @param {boolean} [options.dryrun] Generates the next unique slug without
   * updating the internal accumulator.
   */
  slug(value, options = {}) {
    const slug = this.serialize(value);
    return this.getNextSafeSlug(slug, options.dryrun);
  }
}
/**
 * TextRenderer
 * returns only the textual part of the token
 */
export class TextRenderer {
  // no need for block level renderers
  strong(text) {
    return text;
  }

  em(text) {
    return text;
  }

  codespan(text) {
    return text;
  }

  del(text) {
    return text;
  }

  html(text) {
    return text;
  }

  text(text) {
    return text;
  }

  link(href, title, text) {
    return '' + text;
  }

  image(href, title, text) {
    return '' + text;
  }

  br() {
    return '';
  }
}
import { defaults } from './defaults.js';
import {
  rtrim,
  splitCells,
  escape,
  findClosingBracket
} from './helpers.js';

function outputLink(cap, link, raw, lexer) {
  const href = link.href;
  const title = link.title ? escape(link.title) : null;
  const text = cap[1].replace(/\\([\[\]])/g, '$1');

  if (cap[0].charAt(0) !== '!') {
    lexer.state.inLink = true;
    const token = {
      type: 'link',
      raw,
      href,
      title,
      text,
      tokens: lexer.inlineTokens(text)
    };
    lexer.state.inLink = false;
    return token;
  }
  return {
    type: 'image',
    raw,
    href,
    title,
    text: escape(text)
  };
}

function indentCodeCompensation(raw, text) {
  const matchIndentToCode = raw.match(/^(\s+)(?:```)/);

  if (matchIndentToCode === null) {
    return text;
  }

  const indentToCode = matchIndentToCode[1];

  return text
    .split('\n')
    .map(node => {
      const matchIndentInNode = node.match(/^\s+/);
      if (matchIndentInNode === null) {
        return node;
      }

      const [indentInNode] = matchIndentInNode;

      if (indentInNode.length >= indentToCode.length) {
        return node.slice(indentToCode.length);
      }

      return node;
    })
    .join('\n');
}

/**
 * Tokenizer
 */
export class Tokenizer {
  constructor(options) {
    this.options = options || defaults;
  }

  space(src) {
    const cap = this.rules.block.newline.exec(src);
    if (cap && cap[0].length > 0) {
      return {
        type: 'space',
        raw: cap[0]
      };
    }
  }

  code(src) {
    const cap = this.rules.block.code.exec(src);
    if (cap) {
      const text = cap[0].replace(/^ {1,4}/gm, '');
      return {
        type: 'code',
        raw: cap[0],
        codeBlockStyle: 'indented',
        text: !this.options.pedantic
          ? rtrim(text, '\n')
          : text
      };
    }
  }

  fences(src) {
    const cap = this.rules.block.fences.exec(src);
    if (cap) {
      const raw = cap[0];
      const text = indentCodeCompensation(raw, cap[3] || '');

      return {
        type: 'code',
        raw,
        lang: cap[2] ? cap[2].trim() : cap[2],
        text
      };
    }
  }

  heading(src) {
    const cap = this.rules.block.heading.exec(src);
    if (cap) {
      let text = cap[2].trim();

      // remove trailing #s
      if (/#$/.test(text)) {
        const trimmed = rtrim(text, '#');
        if (this.options.pedantic) {
          text = trimmed.trim();
        } else if (!trimmed || / $/.test(trimmed)) {
          // CommonMark requires space before trailing #s
          text = trimmed.trim();
        }
      }

      return {
        type: 'heading',
        raw: cap[0],
        depth: cap[1].length,
        text,
        tokens: this.lexer.inline(text)
      };
    }
  }

  hr(src) {
    const cap = this.rules.block.hr.exec(src);
    if (cap) {
      return {
        type: 'hr',
        raw: cap[0]
      };
    }
  }

  blockquote(src) {
    const cap = this.rules.block.blockquote.exec(src);
    if (cap) {
      const text = cap[0].replace(/^ *>[ \t]?/gm, '');

      return {
        type: 'blockquote',
        raw: cap[0],
        tokens: this.lexer.blockTokens(text, []),
        text
      };
    }
  }

  list(src) {
    let cap = this.rules.block.list.exec(src);
    if (cap) {
      let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine,
        line, nextLine, rawLine, itemContents, endEarly;

      let bull = cap[1].trim();
      const isordered = bull.length > 1;

      const list = {
        type: 'list',
        raw: '',
        ordered: isordered,
        start: isordered ? +bull.slice(0, -1) : '',
        loose: false,
        items: []
      };

      bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`;

      if (this.options.pedantic) {
        bull = isordered ? bull : '[*+-]';
      }

      // Get next list item
      const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`);

      // Check if current bullet point can start a new List Item
      while (src) {
        endEarly = false;
        if (!(cap = itemRegex.exec(src))) {
          break;
        }

        if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)
          break;
        }

        raw = cap[0];
        src = src.substring(raw.length);

        line = cap[2].split('\n', 1)[0];
        nextLine = src.split('\n', 1)[0];

        if (this.options.pedantic) {
          indent = 2;
          itemContents = line.trimLeft();
        } else {
          indent = cap[2].search(/[^ ]/); // Find first non-space char
          indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent
          itemContents = line.slice(indent);
          indent += cap[1].length;
        }

        blankLine = false;

        if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line
          raw += nextLine + '\n';
          src = src.substring(nextLine.length + 1);
          endEarly = true;
        }

        if (!endEarly) {
          const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))`);
          const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`);
          const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`);
          const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);

          // Check if following lines should be included in List Item
          while (src) {
            rawLine = src.split('\n', 1)[0];
            line = rawLine;

            // Re-align to follow commonmark nesting rules
            if (this.options.pedantic) {
              line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');
            }

            // End list item if found code fences
            if (fencesBeginRegex.test(line)) {
              break;
            }

            // End list item if found start of new heading
            if (headingBeginRegex.test(line)) {
              break;
            }

            // End list item if found start of new bullet
            if (nextBulletRegex.test(line)) {
              break;
            }

            // Horizontal rule found
            if (hrRegex.test(src)) {
              break;
            }

            if (line.search(/[^ ]/) >= indent || !line.trim()) { // Dedent if possible
              itemContents += '\n' + line.slice(indent);
            } else if (!blankLine) { // Until blank line, item doesn't need indentation
              itemContents += '\n' + line;
            } else { // Otherwise, improper indentation ends this item
              break;
            }

            if (!blankLine && !line.trim()) { // Check if current line is blank
              blankLine = true;
            }

            raw += rawLine + '\n';
            src = src.substring(rawLine.length + 1);
          }
        }

        if (!list.loose) {
          // If the previous item ended with a blank line, the list is loose
          if (endsWithBlankLine) {
            list.loose = true;
          } else if (/\n *\n *$/.test(raw)) {
            endsWithBlankLine = true;
          }
        }

        // Check for task list items
        if (this.options.gfm) {
          istask = /^\[[ xX]\] /.exec(itemContents);
          if (istask) {
            ischecked = istask[0] !== '[ ] ';
            itemContents = itemContents.replace(/^\[[ xX]\] +/, '');
          }
        }

        list.items.push({
          type: 'list_item',
          raw,
          task: !!istask,
          checked: ischecked,
          loose: false,
          text: itemContents
        });

        list.raw += raw;
      }

      // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
      list.items[list.items.length - 1].raw = raw.trimRight();
      list.items[list.items.length - 1].text = itemContents.trimRight();
      list.raw = list.raw.trimRight();

      const l = list.items.length;

      // Item child tokens handled here at end because we needed to have the final item to trim it first
      for (i = 0; i < l; i++) {
        this.lexer.state.top = false;
        list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
        const spacers = list.items[i].tokens.filter(t => t.type === 'space');
        const hasMultipleLineBreaks = spacers.every(t => {
          const chars = t.raw.split('');
          let lineBreaks = 0;
          for (const char of chars) {
            if (char === '\n') {
              lineBreaks += 1;
            }
            if (lineBreaks > 1) {
              return true;
            }
          }

          return false;
        });

        if (!list.loose && spacers.length && hasMultipleLineBreaks) {
          // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item
          list.loose = true;
          list.items[i].loose = true;
        }
      }

      return list;
    }
  }

  html(src) {
    const cap = this.rules.block.html.exec(src);
    if (cap) {
      const token = {
        type: 'html',
        raw: cap[0],
        pre: !this.options.sanitizer
          && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
        text: cap[0]
      };
      if (this.options.sanitize) {
        const text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);
        token.type = 'paragraph';
        token.text = text;
        token.tokens = this.lexer.inline(text);
      }
      return token;
    }
  }

  def(src) {
    const cap = this.rules.block.def.exec(src);
    if (cap) {
      if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
      const tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
      return {
        type: 'def',
        tag,
        raw: cap[0],
        href: cap[2],
        title: cap[3]
      };
    }
  }

  table(src) {
    const cap = this.rules.block.table.exec(src);
    if (cap) {
      const item = {
        type: 'table',
        header: splitCells(cap[1]).map(c => { return { text: c }; }),
        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
        rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []
      };

      if (item.header.length === item.align.length) {
        item.raw = cap[0];

        let l = item.align.length;
        let i, j, k, row;
        for (i = 0; i < l; i++) {
          if (/^ *-+: *$/.test(item.align[i])) {
            item.align[i] = 'right';
          } else if (/^ *:-+: *$/.test(item.align[i])) {
            item.align[i] = 'center';
          } else if (/^ *:-+ *$/.test(item.align[i])) {
            item.align[i] = 'left';
          } else {
            item.align[i] = null;
          }
        }

        l = item.rows.length;
        for (i = 0; i < l; i++) {
          item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; });
        }

        // parse child tokens inside headers and cells

        // header child tokens
        l = item.header.length;
        for (j = 0; j < l; j++) {
          item.header[j].tokens = this.lexer.inline(item.header[j].text);
        }

        // cell child tokens
        l = item.rows.length;
        for (j = 0; j < l; j++) {
          row = item.rows[j];
          for (k = 0; k < row.length; k++) {
            row[k].tokens = this.lexer.inline(row[k].text);
          }
        }

        return item;
      }
    }
  }

  lheading(src) {
    const cap = this.rules.block.lheading.exec(src);
    if (cap) {
      return {
        type: 'heading',
        raw: cap[0],
        depth: cap[2].charAt(0) === '=' ? 1 : 2,
        text: cap[1],
        tokens: this.lexer.inline(cap[1])
      };
    }
  }

  paragraph(src) {
    const cap = this.rules.block.paragraph.exec(src);
    if (cap) {
      const text = cap[1].charAt(cap[1].length - 1) === '\n'
        ? cap[1].slice(0, -1)
        : cap[1];
      return {
        type: 'paragraph',
        raw: cap[0],
        text,
        tokens: this.lexer.inline(text)
      };
    }
  }

  text(src) {
    const cap = this.rules.block.text.exec(src);
    if (cap) {
      return {
        type: 'text',
        raw: cap[0],
        text: cap[0],
        tokens: this.lexer.inline(cap[0])
      };
    }
  }

  escape(src) {
    const cap = this.rules.inline.escape.exec(src);
    if (cap) {
      return {
        type: 'escape',
        raw: cap[0],
        text: escape(cap[1])
      };
    }
  }

  tag(src) {
    const cap = this.rules.inline.tag.exec(src);
    if (cap) {
      if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
        this.lexer.state.inLink = true;
      } else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
        this.lexer.state.inLink = false;
      }
      if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
        this.lexer.state.inRawBlock = true;
      } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
        this.lexer.state.inRawBlock = false;
      }

      return {
        type: this.options.sanitize
          ? 'text'
          : 'html',
        raw: cap[0],
        inLink: this.lexer.state.inLink,
        inRawBlock: this.lexer.state.inRawBlock,
        text: this.options.sanitize
          ? (this.options.sanitizer
            ? this.options.sanitizer(cap[0])
            : escape(cap[0]))
          : cap[0]
      };
    }
  }

  link(src) {
    const cap = this.rules.inline.link.exec(src);
    if (cap) {
      const trimmedUrl = cap[2].trim();
      if (!this.options.pedantic && /^</.test(trimmedUrl)) {
        // commonmark requires matching angle brackets
        if (!(/>$/.test(trimmedUrl))) {
          return;
        }

        // ending angle bracket cannot be escaped
        const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\');
        if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
          return;
        }
      } else {
        // find closing parenthesis
        const lastParenIndex = findClosingBracket(cap[2], '()');
        if (lastParenIndex > -1) {
          const start = cap[0].indexOf('!') === 0 ? 5 : 4;
          const linkLen = start + cap[1].length + lastParenIndex;
          cap[2] = cap[2].substring(0, lastParenIndex);
          cap[0] = cap[0].substring(0, linkLen).trim();
          cap[3] = '';
        }
      }
      let href = cap[2];
      let title = '';
      if (this.options.pedantic) {
        // split pedantic href and title
        const link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);

        if (link) {
          href = link[1];
          title = link[3];
        }
      } else {
        title = cap[3] ? cap[3].slice(1, -1) : '';
      }

      href = href.trim();
      if (/^</.test(href)) {
        if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {
          // pedantic allows starting angle bracket without ending angle bracket
          href = href.slice(1);
        } else {
          href = href.slice(1, -1);
        }
      }
      return outputLink(cap, {
        href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
        title: title ? title.replace(this.rules.inline._escapes, '$1') : title
      }, cap[0], this.lexer);
    }
  }

  reflink(src, links) {
    let cap;
    if ((cap = this.rules.inline.reflink.exec(src))
        || (cap = this.rules.inline.nolink.exec(src))) {
      let link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
      link = links[link.toLowerCase()];
      if (!link || !link.href) {
        const text = cap[0].charAt(0);
        return {
          type: 'text',
          raw: text,
          text
        };
      }
      return outputLink(cap, link, cap[0], this.lexer);
    }
  }

  emStrong(src, maskedSrc, prevChar = '') {
    let match = this.rules.inline.emStrong.lDelim.exec(src);
    if (!match) return;

    // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well
    if (match[3] && prevChar.match(/[\p{L}\p{N}]/u)) return;

    const nextChar = match[1] || match[2] || '';

    if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {
      const lLength = match[0].length - 1;
      let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;

      const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
      endReg.lastIndex = 0;

      // Clip maskedSrc to same section of string as src (move to lexer?)
      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);

      while ((match = endReg.exec(maskedSrc)) != null) {
        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];

        if (!rDelim) continue; // skip single * in __abc*abc__

        rLength = rDelim.length;

        if (match[3] || match[4]) { // found another Left Delim
          delimTotal += rLength;
          continue;
        } else if (match[5] || match[6]) { // either Left or Right Delim
          if (lLength % 3 && !((lLength + rLength) % 3)) {
            midDelimTotal += rLength;
            continue; // CommonMark Emphasis Rules 9-10
          }
        }

        delimTotal -= rLength;

        if (delimTotal > 0) continue; // Haven't found enough closing delimiters

        // Remove extra characters. *a*** -> *a*
        rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);

        // Create `em` if smallest delimiter has odd char count. *a***
        if (Math.min(lLength, rLength) % 2) {
          const text = src.slice(1, lLength + match.index + rLength);
          return {
            type: 'em',
            raw: src.slice(0, lLength + match.index + rLength + 1),
            text,
            tokens: this.lexer.inlineTokens(text)
          };
        }

        // Create 'strong' if smallest delimiter has even char count. **a***
        const text = src.slice(2, lLength + match.index + rLength - 1);
        return {
          type: 'strong',
          raw: src.slice(0, lLength + match.index + rLength + 1),
          text,
          tokens: this.lexer.inlineTokens(text)
        };
      }
    }
  }

  codespan(src) {
    const cap = this.rules.inline.code.exec(src);
    if (cap) {
      let text = cap[2].replace(/\n/g, ' ');
      const hasNonSpaceChars = /[^ ]/.test(text);
      const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
      if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
        text = text.substring(1, text.length - 1);
      }
      text = escape(text, true);
      return {
        type: 'codespan',
        raw: cap[0],
        text
      };
    }
  }

  br(src) {
    const cap = this.rules.inline.br.exec(src);
    if (cap) {
      return {
        type: 'br',
        raw: cap[0]
      };
    }
  }

  del(src) {
    const cap = this.rules.inline.del.exec(src);
    if (cap) {
      return {
        type: 'del',
        raw: cap[0],
        text: cap[2],
        tokens: this.lexer.inlineTokens(cap[2])
      };
    }
  }

  autolink(src, mangle) {
    const cap = this.rules.inline.autolink.exec(src);
    if (cap) {
      let text, href;
      if (cap[2] === '@') {
        text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);
        href = 'mailto:' + text;
      } else {
        text = escape(cap[1]);
        href = text;
      }

      return {
        type: 'link',
        raw: cap[0],
        text,
        href,
        tokens: [
          {
            type: 'text',
            raw: text,
            text
          }
        ]
      };
    }
  }

  url(src, mangle) {
    let cap;
    if (cap = this.rules.inline.url.exec(src)) {
      let text, href;
      if (cap[2] === '@') {
        text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);
        href = 'mailto:' + text;
      } else {
        // do extended autolink path validation
        let prevCapZero;
        do {
          prevCapZero = cap[0];
          cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
        } while (prevCapZero !== cap[0]);
        text = escape(cap[0]);
        if (cap[1] === 'www.') {
          href = 'http://' + text;
        } else {
          href = text;
        }
      }
      return {
        type: 'link',
        raw: cap[0],
        text,
        href,
        tokens: [
          {
            type: 'text',
            raw: text,
            text
          }
        ]
      };
    }
  }

  inlineText(src, smartypants) {
    const cap = this.rules.inline.text.exec(src);
    if (cap) {
      let text;
      if (this.lexer.state.inRawBlock) {
        text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0];
      } else {
        text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
      }
      return {
        type: 'text',
        raw: cap[0],
        text
      };
    }
  }
}
0.3.0 / 2014-09-07
==================

  * Support Node.js 0.6
  * Throw error when parameter format invalid on parse

0.2.0 / 2014-06-18
==================

  * Add `typer.format()` to format media types

0.1.0 / 2014-06-17
==================

  * Accept `req` as argument to `parse`
  * Accept `res` as argument to `parse`
  * Parse media type with extra LWS between type and first parameter

0.0.0 / 2014-06-13
==================

  * Initial implementation
/*!
 * media-typer
 * Copyright(c) 2014 Douglas Christopher Wilson
 * MIT Licensed
 */

/**
 * RegExp to match *( ";" parameter ) in RFC 2616 sec 3.7
 *
 * parameter     = token "=" ( token | quoted-string )
 * token         = 1*<any CHAR except CTLs or separators>
 * separators    = "(" | ")" | "<" | ">" | "@"
 *               | "," | ";" | ":" | "\" | <">
 *               | "/" | "[" | "]" | "?" | "="
 *               | "{" | "}" | SP | HT
 * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
 * qdtext        = <any TEXT except <">>
 * quoted-pair   = "\" CHAR
 * CHAR          = <any US-ASCII character (octets 0 - 127)>
 * TEXT          = <any OCTET except CTLs, but including LWS>
 * LWS           = [CRLF] 1*( SP | HT )
 * CRLF          = CR LF
 * CR            = <US-ASCII CR, carriage return (13)>
 * LF            = <US-ASCII LF, linefeed (10)>
 * SP            = <US-ASCII SP, space (32)>
 * SHT           = <US-ASCII HT, horizontal-tab (9)>
 * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
 * OCTET         = <any 8-bit sequence of data>
 */
var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u0020-\u007e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g;
var textRegExp = /^[\u0020-\u007e\u0080-\u00ff]+$/
var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/

/**
 * RegExp to match quoted-pair in RFC 2616
 *
 * quoted-pair = "\" CHAR
 * CHAR        = <any US-ASCII character (octets 0 - 127)>
 */
var qescRegExp = /\\([\u0000-\u007f])/g;

/**
 * RegExp to match chars that must be quoted-pair in RFC 2616
 */
var quoteRegExp = /([\\"])/g;

/**
 * RegExp to match type in RFC 6838
 *
 * type-name = restricted-name
 * subtype-name = restricted-name
 * restricted-name = restricted-name-first *126restricted-name-chars
 * restricted-name-first  = ALPHA / DIGIT
 * restricted-name-chars  = ALPHA / DIGIT / "!" / "#" /
 *                          "$" / "&" / "-" / "^" / "_"
 * restricted-name-chars =/ "." ; Characters before first dot always
 *                              ; specify a facet name
 * restricted-name-chars =/ "+" ; Characters after last plus always
 *                              ; specify a structured syntax suffix
 * ALPHA =  %x41-5A / %x61-7A   ; A-Z / a-z
 * DIGIT =  %x30-39             ; 0-9
 */
var subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/
var typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/
var typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;

/**
 * Module exports.
 */

exports.format = format
exports.parse = parse

/**
 * Format object to media type.
 *
 * @param {object} obj
 * @return {string}
 * @api public
 */

function format(obj) {
  if (!obj || typeof obj !== 'object') {
    throw new TypeError('argument obj is required')
  }

  var parameters = obj.parameters
  var subtype = obj.subtype
  var suffix = obj.suffix
  var type = obj.type

  if (!type || !typeNameRegExp.test(type)) {
    throw new TypeError('invalid type')
  }

  if (!subtype || !subtypeNameRegExp.test(subtype)) {
    throw new TypeError('invalid subtype')
  }

  // format as type/subtype
  var string = type + '/' + subtype

  // append +suffix
  if (suffix) {
    if (!typeNameRegExp.test(suffix)) {
      throw new TypeError('invalid suffix')
    }

    string += '+' + suffix
  }

  // append parameters
  if (parameters && typeof parameters === 'object') {
    var param
    var params = Object.keys(parameters).sort()

    for (var i = 0; i < params.length; i++) {
      param = params[i]

      if (!tokenRegExp.test(param)) {
        throw new TypeError('invalid parameter name')
      }

      string += '; ' + param + '=' + qstring(parameters[param])
    }
  }

  return string
}

/**
 * Parse media type to object.
 *
 * @param {string|object} string
 * @return {Object}
 * @api public
 */

function parse(string) {
  if (!string) {
    throw new TypeError('argument string is required')
  }

  // support req/res-like objects as argument
  if (typeof string === 'object') {
    string = getcontenttype(string)
  }

  if (typeof string !== 'string') {
    throw new TypeError('argument string is required to be a string')
  }

  var index = string.indexOf(';')
  var type = index !== -1
    ? string.substr(0, index)
    : string

  var key
  var match
  var obj = splitType(type)
  var params = {}
  var value

  paramRegExp.lastIndex = index

  while (match = paramRegExp.exec(string)) {
    if (match.index !== index) {
      throw new TypeError('invalid parameter format')
    }

    index += match[0].length
    key = match[1].toLowerCase()
    value = match[2]

    if (value[0] === '"') {
      // remove quotes and escapes
      value = value
        .substr(1, value.length - 2)
        .replace(qescRegExp, '$1')
    }

    params[key] = value
  }

  if (index !== -1 && index !== string.length) {
    throw new TypeError('invalid parameter format')
  }

  obj.parameters = params

  return obj
}

/**
 * Get content-type from req/res objects.
 *
 * @param {object}
 * @return {Object}
 * @api private
 */

function getcontenttype(obj) {
  if (typeof obj.getHeader === 'function') {
    // res-like
    return obj.getHeader('content-type')
  }

  if (typeof obj.headers === 'object') {
    // req-like
    return obj.headers && obj.headers['content-type']
  }
}

/**
 * Quote a string if necessary.
 *
 * @param {string} val
 * @return {string}
 * @api private
 */

function qstring(val) {
  var str = String(val)

  // no need to quote tokens
  if (tokenRegExp.test(str)) {
    return str
  }

  if (str.length > 0 && !textRegExp.test(str)) {
    throw new TypeError('invalid parameter value')
  }

  return '"' + str.replace(quoteRegExp, '\\$1') + '"'
}

/**
 * Simply "type/subtype+siffx" into parts.
 *
 * @param {string} string
 * @return {Object}
 * @api private
 */

function splitType(string) {
  var match = typeRegExp.exec(string.toLowerCase())

  if (!match) {
    throw new TypeError('invalid media type')
  }

  var type = match[1]
  var subtype = match[2]
  var suffix

  // suffix after last +
  var index = subtype.lastIndexOf('+')
  if (index !== -1) {
    suffix = subtype.substr(index + 1)
    subtype = subtype.substr(0, index)
  }

  var obj = {
    type: type,
    subtype: subtype,
    suffix: suffix
  }

  return obj
}
(The MIT License)

Copyright (c) 2014 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "media-typer",
  "description": "Simple RFC 6838 media type parser and formatter",
  "version": "0.3.0",
  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
  "license": "MIT",
  "repository": "jshttp/media-typer",
  "devDependencies": {
    "istanbul": "0.3.2",
    "mocha": "~1.21.4",
    "should": "~4.0.4"
  },
  "files": [
    "LICENSE",
    "HISTORY.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}{
  "application/1d-interleaved-parityfec": {
    "source": "iana"
  },
  "application/3gpdash-qoe-report+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/3gpp-ims+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/3gpphal+json": {
    "source": "iana",
    "compressible": true
  },
  "application/3gpphalforms+json": {
    "source": "iana",
    "compressible": true
  },
  "application/a2l": {
    "source": "iana"
  },
  "application/activemessage": {
    "source": "iana"
  },
  "application/activity+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-costmap+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-costmapfilter+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-directory+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-endpointcost+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-endpointcostparams+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-endpointprop+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-endpointpropparams+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-error+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-networkmap+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-networkmapfilter+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-updatestreamcontrol+json": {
    "source": "iana",
    "compressible": true
  },
  "application/alto-updatestreamparams+json": {
    "source": "iana",
    "compressible": true
  },
  "application/aml": {
    "source": "iana"
  },
  "application/andrew-inset": {
    "source": "iana",
    "extensions": ["ez"]
  },
  "application/applefile": {
    "source": "iana"
  },
  "application/applixware": {
    "source": "apache",
    "extensions": ["aw"]
  },
  "application/atf": {
    "source": "iana"
  },
  "application/atfx": {
    "source": "iana"
  },
  "application/atom+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["atom"]
  },
  "application/atomcat+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["atomcat"]
  },
  "application/atomdeleted+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["atomdeleted"]
  },
  "application/atomicmail": {
    "source": "iana"
  },
  "application/atomsvc+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["atomsvc"]
  },
  "application/atsc-dwd+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["dwd"]
  },
  "application/atsc-dynamic-event-message": {
    "source": "iana"
  },
  "application/atsc-held+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["held"]
  },
  "application/atsc-rdt+json": {
    "source": "iana",
    "compressible": true
  },
  "application/atsc-rsat+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rsat"]
  },
  "application/atxml": {
    "source": "iana"
  },
  "application/auth-policy+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/bacnet-xdd+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/batch-smtp": {
    "source": "iana"
  },
  "application/bdoc": {
    "compressible": false,
    "extensions": ["bdoc"]
  },
  "application/beep+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/calendar+json": {
    "source": "iana",
    "compressible": true
  },
  "application/calendar+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xcs"]
  },
  "application/call-completion": {
    "source": "iana"
  },
  "application/cals-1840": {
    "source": "iana"
  },
  "application/captive+json": {
    "source": "iana",
    "compressible": true
  },
  "application/cbor": {
    "source": "iana"
  },
  "application/cbor-seq": {
    "source": "iana"
  },
  "application/cccex": {
    "source": "iana"
  },
  "application/ccmp+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/ccxml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["ccxml"]
  },
  "application/cdfx+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["cdfx"]
  },
  "application/cdmi-capability": {
    "source": "iana",
    "extensions": ["cdmia"]
  },
  "application/cdmi-container": {
    "source": "iana",
    "extensions": ["cdmic"]
  },
  "application/cdmi-domain": {
    "source": "iana",
    "extensions": ["cdmid"]
  },
  "application/cdmi-object": {
    "source": "iana",
    "extensions": ["cdmio"]
  },
  "application/cdmi-queue": {
    "source": "iana",
    "extensions": ["cdmiq"]
  },
  "application/cdni": {
    "source": "iana"
  },
  "application/cea": {
    "source": "iana"
  },
  "application/cea-2018+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/cellml+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/cfw": {
    "source": "iana"
  },
  "application/clr": {
    "source": "iana"
  },
  "application/clue+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/clue_info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/cms": {
    "source": "iana"
  },
  "application/cnrp+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/coap-group+json": {
    "source": "iana",
    "compressible": true
  },
  "application/coap-payload": {
    "source": "iana"
  },
  "application/commonground": {
    "source": "iana"
  },
  "application/conference-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/cose": {
    "source": "iana"
  },
  "application/cose-key": {
    "source": "iana"
  },
  "application/cose-key-set": {
    "source": "iana"
  },
  "application/cpl+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/csrattrs": {
    "source": "iana"
  },
  "application/csta+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/cstadata+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/csvm+json": {
    "source": "iana",
    "compressible": true
  },
  "application/cu-seeme": {
    "source": "apache",
    "extensions": ["cu"]
  },
  "application/cwt": {
    "source": "iana"
  },
  "application/cybercash": {
    "source": "iana"
  },
  "application/dart": {
    "compressible": true
  },
  "application/dash+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["mpd"]
  },
  "application/dashdelta": {
    "source": "iana"
  },
  "application/davmount+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["davmount"]
  },
  "application/dca-rft": {
    "source": "iana"
  },
  "application/dcd": {
    "source": "iana"
  },
  "application/dec-dx": {
    "source": "iana"
  },
  "application/dialog-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/dicom": {
    "source": "iana"
  },
  "application/dicom+json": {
    "source": "iana",
    "compressible": true
  },
  "application/dicom+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/dii": {
    "source": "iana"
  },
  "application/dit": {
    "source": "iana"
  },
  "application/dns": {
    "source": "iana"
  },
  "application/dns+json": {
    "source": "iana",
    "compressible": true
  },
  "application/dns-message": {
    "source": "iana"
  },
  "application/docbook+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["dbk"]
  },
  "application/dots+cbor": {
    "source": "iana"
  },
  "application/dskpp+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/dssc+der": {
    "source": "iana",
    "extensions": ["dssc"]
  },
  "application/dssc+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xdssc"]
  },
  "application/dvcs": {
    "source": "iana"
  },
  "application/ecmascript": {
    "source": "iana",
    "compressible": true,
    "extensions": ["es","ecma"]
  },
  "application/edi-consent": {
    "source": "iana"
  },
  "application/edi-x12": {
    "source": "iana",
    "compressible": false
  },
  "application/edifact": {
    "source": "iana",
    "compressible": false
  },
  "application/efi": {
    "source": "iana"
  },
  "application/elm+json": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/elm+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/emergencycalldata.cap+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/emergencycalldata.comment+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/emergencycalldata.control+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/emergencycalldata.deviceinfo+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/emergencycalldata.ecall.msd": {
    "source": "iana"
  },
  "application/emergencycalldata.providerinfo+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/emergencycalldata.serviceinfo+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/emergencycalldata.subscriberinfo+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/emergencycalldata.veds+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/emma+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["emma"]
  },
  "application/emotionml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["emotionml"]
  },
  "application/encaprtp": {
    "source": "iana"
  },
  "application/epp+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/epub+zip": {
    "source": "iana",
    "compressible": false,
    "extensions": ["epub"]
  },
  "application/eshop": {
    "source": "iana"
  },
  "application/exi": {
    "source": "iana",
    "extensions": ["exi"]
  },
  "application/expect-ct-report+json": {
    "source": "iana",
    "compressible": true
  },
  "application/fastinfoset": {
    "source": "iana"
  },
  "application/fastsoap": {
    "source": "iana"
  },
  "application/fdt+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["fdt"]
  },
  "application/fhir+json": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/fhir+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/fido.trusted-apps+json": {
    "compressible": true
  },
  "application/fits": {
    "source": "iana"
  },
  "application/flexfec": {
    "source": "iana"
  },
  "application/font-sfnt": {
    "source": "iana"
  },
  "application/font-tdpfr": {
    "source": "iana",
    "extensions": ["pfr"]
  },
  "application/font-woff": {
    "source": "iana",
    "compressible": false
  },
  "application/framework-attributes+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/geo+json": {
    "source": "iana",
    "compressible": true,
    "extensions": ["geojson"]
  },
  "application/geo+json-seq": {
    "source": "iana"
  },
  "application/geopackage+sqlite3": {
    "source": "iana"
  },
  "application/geoxacml+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/gltf-buffer": {
    "source": "iana"
  },
  "application/gml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["gml"]
  },
  "application/gpx+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["gpx"]
  },
  "application/gxf": {
    "source": "apache",
    "extensions": ["gxf"]
  },
  "application/gzip": {
    "source": "iana",
    "compressible": false,
    "extensions": ["gz"]
  },
  "application/h224": {
    "source": "iana"
  },
  "application/held+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/hjson": {
    "extensions": ["hjson"]
  },
  "application/http": {
    "source": "iana"
  },
  "application/hyperstudio": {
    "source": "iana",
    "extensions": ["stk"]
  },
  "application/ibe-key-request+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/ibe-pkg-reply+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/ibe-pp-data": {
    "source": "iana"
  },
  "application/iges": {
    "source": "iana"
  },
  "application/im-iscomposing+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/index": {
    "source": "iana"
  },
  "application/index.cmd": {
    "source": "iana"
  },
  "application/index.obj": {
    "source": "iana"
  },
  "application/index.response": {
    "source": "iana"
  },
  "application/index.vnd": {
    "source": "iana"
  },
  "application/inkml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["ink","inkml"]
  },
  "application/iotp": {
    "source": "iana"
  },
  "application/ipfix": {
    "source": "iana",
    "extensions": ["ipfix"]
  },
  "application/ipp": {
    "source": "iana"
  },
  "application/isup": {
    "source": "iana"
  },
  "application/its+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["its"]
  },
  "application/java-archive": {
    "source": "apache",
    "compressible": false,
    "extensions": ["jar","war","ear"]
  },
  "application/java-serialized-object": {
    "source": "apache",
    "compressible": false,
    "extensions": ["ser"]
  },
  "application/java-vm": {
    "source": "apache",
    "compressible": false,
    "extensions": ["class"]
  },
  "application/javascript": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true,
    "extensions": ["js","mjs"]
  },
  "application/jf2feed+json": {
    "source": "iana",
    "compressible": true
  },
  "application/jose": {
    "source": "iana"
  },
  "application/jose+json": {
    "source": "iana",
    "compressible": true
  },
  "application/jrd+json": {
    "source": "iana",
    "compressible": true
  },
  "application/jscalendar+json": {
    "source": "iana",
    "compressible": true
  },
  "application/json": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true,
    "extensions": ["json","map"]
  },
  "application/json-patch+json": {
    "source": "iana",
    "compressible": true
  },
  "application/json-seq": {
    "source": "iana"
  },
  "application/json5": {
    "extensions": ["json5"]
  },
  "application/jsonml+json": {
    "source": "apache",
    "compressible": true,
    "extensions": ["jsonml"]
  },
  "application/jwk+json": {
    "source": "iana",
    "compressible": true
  },
  "application/jwk-set+json": {
    "source": "iana",
    "compressible": true
  },
  "application/jwt": {
    "source": "iana"
  },
  "application/kpml-request+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/kpml-response+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/ld+json": {
    "source": "iana",
    "compressible": true,
    "extensions": ["jsonld"]
  },
  "application/lgr+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["lgr"]
  },
  "application/link-format": {
    "source": "iana"
  },
  "application/load-control+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/lost+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["lostxml"]
  },
  "application/lostsync+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/lpf+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/lxf": {
    "source": "iana"
  },
  "application/mac-binhex40": {
    "source": "iana",
    "extensions": ["hqx"]
  },
  "application/mac-compactpro": {
    "source": "apache",
    "extensions": ["cpt"]
  },
  "application/macwriteii": {
    "source": "iana"
  },
  "application/mads+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["mads"]
  },
  "application/manifest+json": {
    "charset": "UTF-8",
    "compressible": true,
    "extensions": ["webmanifest"]
  },
  "application/marc": {
    "source": "iana",
    "extensions": ["mrc"]
  },
  "application/marcxml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["mrcx"]
  },
  "application/mathematica": {
    "source": "iana",
    "extensions": ["ma","nb","mb"]
  },
  "application/mathml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["mathml"]
  },
  "application/mathml-content+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mathml-presentation+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-associated-procedure-description+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-deregister+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-envelope+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-msk+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-msk-response+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-protection-description+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-reception-report+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-register+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-register-response+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-schedule+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbms-user-service-description+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mbox": {
    "source": "iana",
    "extensions": ["mbox"]
  },
  "application/media-policy-dataset+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/media_control+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mediaservercontrol+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["mscml"]
  },
  "application/merge-patch+json": {
    "source": "iana",
    "compressible": true
  },
  "application/metalink+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["metalink"]
  },
  "application/metalink4+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["meta4"]
  },
  "application/mets+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["mets"]
  },
  "application/mf4": {
    "source": "iana"
  },
  "application/mikey": {
    "source": "iana"
  },
  "application/mipc": {
    "source": "iana"
  },
  "application/mmt-aei+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["maei"]
  },
  "application/mmt-usd+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["musd"]
  },
  "application/mods+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["mods"]
  },
  "application/moss-keys": {
    "source": "iana"
  },
  "application/moss-signature": {
    "source": "iana"
  },
  "application/mosskey-data": {
    "source": "iana"
  },
  "application/mosskey-request": {
    "source": "iana"
  },
  "application/mp21": {
    "source": "iana",
    "extensions": ["m21","mp21"]
  },
  "application/mp4": {
    "source": "iana",
    "extensions": ["mp4s","m4p"]
  },
  "application/mpeg4-generic": {
    "source": "iana"
  },
  "application/mpeg4-iod": {
    "source": "iana"
  },
  "application/mpeg4-iod-xmt": {
    "source": "iana"
  },
  "application/mrb-consumer+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/mrb-publish+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/msc-ivr+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/msc-mixer+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/msword": {
    "source": "iana",
    "compressible": false,
    "extensions": ["doc","dot"]
  },
  "application/mud+json": {
    "source": "iana",
    "compressible": true
  },
  "application/multipart-core": {
    "source": "iana"
  },
  "application/mxf": {
    "source": "iana",
    "extensions": ["mxf"]
  },
  "application/n-quads": {
    "source": "iana",
    "extensions": ["nq"]
  },
  "application/n-triples": {
    "source": "iana",
    "extensions": ["nt"]
  },
  "application/nasdata": {
    "source": "iana"
  },
  "application/news-checkgroups": {
    "source": "iana",
    "charset": "US-ASCII"
  },
  "application/news-groupinfo": {
    "source": "iana",
    "charset": "US-ASCII"
  },
  "application/news-transmission": {
    "source": "iana"
  },
  "application/nlsml+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/node": {
    "source": "iana",
    "extensions": ["cjs"]
  },
  "application/nss": {
    "source": "iana"
  },
  "application/oauth-authz-req+jwt": {
    "source": "iana"
  },
  "application/ocsp-request": {
    "source": "iana"
  },
  "application/ocsp-response": {
    "source": "iana"
  },
  "application/octet-stream": {
    "source": "iana",
    "compressible": false,
    "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]
  },
  "application/oda": {
    "source": "iana",
    "extensions": ["oda"]
  },
  "application/odm+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/odx": {
    "source": "iana"
  },
  "application/oebps-package+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["opf"]
  },
  "application/ogg": {
    "source": "iana",
    "compressible": false,
    "extensions": ["ogx"]
  },
  "application/omdoc+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["omdoc"]
  },
  "application/onenote": {
    "source": "apache",
    "extensions": ["onetoc","onetoc2","onetmp","onepkg"]
  },
  "application/opc-nodeset+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/oscore": {
    "source": "iana"
  },
  "application/oxps": {
    "source": "iana",
    "extensions": ["oxps"]
  },
  "application/p2p-overlay+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["relo"]
  },
  "application/parityfec": {
    "source": "iana"
  },
  "application/passport": {
    "source": "iana"
  },
  "application/patch-ops-error+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xer"]
  },
  "application/pdf": {
    "source": "iana",
    "compressible": false,
    "extensions": ["pdf"]
  },
  "application/pdx": {
    "source": "iana"
  },
  "application/pem-certificate-chain": {
    "source": "iana"
  },
  "application/pgp-encrypted": {
    "source": "iana",
    "compressible": false,
    "extensions": ["pgp"]
  },
  "application/pgp-keys": {
    "source": "iana"
  },
  "application/pgp-signature": {
    "source": "iana",
    "extensions": ["asc","sig"]
  },
  "application/pics-rules": {
    "source": "apache",
    "extensions": ["prf"]
  },
  "application/pidf+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/pidf-diff+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/pkcs10": {
    "source": "iana",
    "extensions": ["p10"]
  },
  "application/pkcs12": {
    "source": "iana"
  },
  "application/pkcs7-mime": {
    "source": "iana",
    "extensions": ["p7m","p7c"]
  },
  "application/pkcs7-signature": {
    "source": "iana",
    "extensions": ["p7s"]
  },
  "application/pkcs8": {
    "source": "iana",
    "extensions": ["p8"]
  },
  "application/pkcs8-encrypted": {
    "source": "iana"
  },
  "application/pkix-attr-cert": {
    "source": "iana",
    "extensions": ["ac"]
  },
  "application/pkix-cert": {
    "source": "iana",
    "extensions": ["cer"]
  },
  "application/pkix-crl": {
    "source": "iana",
    "extensions": ["crl"]
  },
  "application/pkix-pkipath": {
    "source": "iana",
    "extensions": ["pkipath"]
  },
  "application/pkixcmp": {
    "source": "iana",
    "extensions": ["pki"]
  },
  "application/pls+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["pls"]
  },
  "application/poc-settings+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/postscript": {
    "source": "iana",
    "compressible": true,
    "extensions": ["ai","eps","ps"]
  },
  "application/ppsp-tracker+json": {
    "source": "iana",
    "compressible": true
  },
  "application/problem+json": {
    "source": "iana",
    "compressible": true
  },
  "application/problem+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/provenance+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["provx"]
  },
  "application/prs.alvestrand.titrax-sheet": {
    "source": "iana"
  },
  "application/prs.cww": {
    "source": "iana",
    "extensions": ["cww"]
  },
  "application/prs.cyn": {
    "source": "iana",
    "charset": "7-BIT"
  },
  "application/prs.hpub+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/prs.nprend": {
    "source": "iana"
  },
  "application/prs.plucker": {
    "source": "iana"
  },
  "application/prs.rdf-xml-crypt": {
    "source": "iana"
  },
  "application/prs.xsf+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/pskc+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["pskcxml"]
  },
  "application/pvd+json": {
    "source": "iana",
    "compressible": true
  },
  "application/qsig": {
    "source": "iana"
  },
  "application/raml+yaml": {
    "compressible": true,
    "extensions": ["raml"]
  },
  "application/raptorfec": {
    "source": "iana"
  },
  "application/rdap+json": {
    "source": "iana",
    "compressible": true
  },
  "application/rdf+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rdf","owl"]
  },
  "application/reginfo+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rif"]
  },
  "application/relax-ng-compact-syntax": {
    "source": "iana",
    "extensions": ["rnc"]
  },
  "application/remote-printing": {
    "source": "iana"
  },
  "application/reputon+json": {
    "source": "iana",
    "compressible": true
  },
  "application/resource-lists+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rl"]
  },
  "application/resource-lists-diff+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rld"]
  },
  "application/rfc+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/riscos": {
    "source": "iana"
  },
  "application/rlmi+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/rls-services+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rs"]
  },
  "application/route-apd+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rapd"]
  },
  "application/route-s-tsid+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["sls"]
  },
  "application/route-usd+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rusd"]
  },
  "application/rpki-ghostbusters": {
    "source": "iana",
    "extensions": ["gbr"]
  },
  "application/rpki-manifest": {
    "source": "iana",
    "extensions": ["mft"]
  },
  "application/rpki-publication": {
    "source": "iana"
  },
  "application/rpki-roa": {
    "source": "iana",
    "extensions": ["roa"]
  },
  "application/rpki-updown": {
    "source": "iana"
  },
  "application/rsd+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["rsd"]
  },
  "application/rss+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["rss"]
  },
  "application/rtf": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rtf"]
  },
  "application/rtploopback": {
    "source": "iana"
  },
  "application/rtx": {
    "source": "iana"
  },
  "application/samlassertion+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/samlmetadata+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/sarif+json": {
    "source": "iana",
    "compressible": true
  },
  "application/sarif-external-properties+json": {
    "source": "iana",
    "compressible": true
  },
  "application/sbe": {
    "source": "iana"
  },
  "application/sbml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["sbml"]
  },
  "application/scaip+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/scim+json": {
    "source": "iana",
    "compressible": true
  },
  "application/scvp-cv-request": {
    "source": "iana",
    "extensions": ["scq"]
  },
  "application/scvp-cv-response": {
    "source": "iana",
    "extensions": ["scs"]
  },
  "application/scvp-vp-request": {
    "source": "iana",
    "extensions": ["spq"]
  },
  "application/scvp-vp-response": {
    "source": "iana",
    "extensions": ["spp"]
  },
  "application/sdp": {
    "source": "iana",
    "extensions": ["sdp"]
  },
  "application/secevent+jwt": {
    "source": "iana"
  },
  "application/senml+cbor": {
    "source": "iana"
  },
  "application/senml+json": {
    "source": "iana",
    "compressible": true
  },
  "application/senml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["senmlx"]
  },
  "application/senml-etch+cbor": {
    "source": "iana"
  },
  "application/senml-etch+json": {
    "source": "iana",
    "compressible": true
  },
  "application/senml-exi": {
    "source": "iana"
  },
  "application/sensml+cbor": {
    "source": "iana"
  },
  "application/sensml+json": {
    "source": "iana",
    "compressible": true
  },
  "application/sensml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["sensmlx"]
  },
  "application/sensml-exi": {
    "source": "iana"
  },
  "application/sep+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/sep-exi": {
    "source": "iana"
  },
  "application/session-info": {
    "source": "iana"
  },
  "application/set-payment": {
    "source": "iana"
  },
  "application/set-payment-initiation": {
    "source": "iana",
    "extensions": ["setpay"]
  },
  "application/set-registration": {
    "source": "iana"
  },
  "application/set-registration-initiation": {
    "source": "iana",
    "extensions": ["setreg"]
  },
  "application/sgml": {
    "source": "iana"
  },
  "application/sgml-open-catalog": {
    "source": "iana"
  },
  "application/shf+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["shf"]
  },
  "application/sieve": {
    "source": "iana",
    "extensions": ["siv","sieve"]
  },
  "application/simple-filter+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/simple-message-summary": {
    "source": "iana"
  },
  "application/simplesymbolcontainer": {
    "source": "iana"
  },
  "application/sipc": {
    "source": "iana"
  },
  "application/slate": {
    "source": "iana"
  },
  "application/smil": {
    "source": "iana"
  },
  "application/smil+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["smi","smil"]
  },
  "application/smpte336m": {
    "source": "iana"
  },
  "application/soap+fastinfoset": {
    "source": "iana"
  },
  "application/soap+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/sparql-query": {
    "source": "iana",
    "extensions": ["rq"]
  },
  "application/sparql-results+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["srx"]
  },
  "application/spirits-event+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/sql": {
    "source": "iana"
  },
  "application/srgs": {
    "source": "iana",
    "extensions": ["gram"]
  },
  "application/srgs+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["grxml"]
  },
  "application/sru+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["sru"]
  },
  "application/ssdl+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["ssdl"]
  },
  "application/ssml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["ssml"]
  },
  "application/stix+json": {
    "source": "iana",
    "compressible": true
  },
  "application/swid+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["swidtag"]
  },
  "application/tamp-apex-update": {
    "source": "iana"
  },
  "application/tamp-apex-update-confirm": {
    "source": "iana"
  },
  "application/tamp-community-update": {
    "source": "iana"
  },
  "application/tamp-community-update-confirm": {
    "source": "iana"
  },
  "application/tamp-error": {
    "source": "iana"
  },
  "application/tamp-sequence-adjust": {
    "source": "iana"
  },
  "application/tamp-sequence-adjust-confirm": {
    "source": "iana"
  },
  "application/tamp-status-query": {
    "source": "iana"
  },
  "application/tamp-status-response": {
    "source": "iana"
  },
  "application/tamp-update": {
    "source": "iana"
  },
  "application/tamp-update-confirm": {
    "source": "iana"
  },
  "application/tar": {
    "compressible": true
  },
  "application/taxii+json": {
    "source": "iana",
    "compressible": true
  },
  "application/td+json": {
    "source": "iana",
    "compressible": true
  },
  "application/tei+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["tei","teicorpus"]
  },
  "application/tetra_isi": {
    "source": "iana"
  },
  "application/thraud+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["tfi"]
  },
  "application/timestamp-query": {
    "source": "iana"
  },
  "application/timestamp-reply": {
    "source": "iana"
  },
  "application/timestamped-data": {
    "source": "iana",
    "extensions": ["tsd"]
  },
  "application/tlsrpt+gzip": {
    "source": "iana"
  },
  "application/tlsrpt+json": {
    "source": "iana",
    "compressible": true
  },
  "application/tnauthlist": {
    "source": "iana"
  },
  "application/toml": {
    "compressible": true,
    "extensions": ["toml"]
  },
  "application/trickle-ice-sdpfrag": {
    "source": "iana"
  },
  "application/trig": {
    "source": "iana"
  },
  "application/ttml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["ttml"]
  },
  "application/tve-trigger": {
    "source": "iana"
  },
  "application/tzif": {
    "source": "iana"
  },
  "application/tzif-leap": {
    "source": "iana"
  },
  "application/ubjson": {
    "compressible": false,
    "extensions": ["ubj"]
  },
  "application/ulpfec": {
    "source": "iana"
  },
  "application/urc-grpsheet+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/urc-ressheet+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rsheet"]
  },
  "application/urc-targetdesc+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["td"]
  },
  "application/urc-uisocketdesc+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vcard+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vcard+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vemmi": {
    "source": "iana"
  },
  "application/vividence.scriptfile": {
    "source": "apache"
  },
  "application/vnd.1000minds.decision-model+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["1km"]
  },
  "application/vnd.3gpp-prose+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp-prose-pc3ch+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp-v2x-local-service-information": {
    "source": "iana"
  },
  "application/vnd.3gpp.5gnas": {
    "source": "iana"
  },
  "application/vnd.3gpp.access-transfer-events+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.bsf+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.gmop+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.gtpc": {
    "source": "iana"
  },
  "application/vnd.3gpp.interworking-data": {
    "source": "iana"
  },
  "application/vnd.3gpp.lpp": {
    "source": "iana"
  },
  "application/vnd.3gpp.mc-signalling-ear": {
    "source": "iana"
  },
  "application/vnd.3gpp.mcdata-affiliation-command+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcdata-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcdata-payload": {
    "source": "iana"
  },
  "application/vnd.3gpp.mcdata-service-config+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcdata-signalling": {
    "source": "iana"
  },
  "application/vnd.3gpp.mcdata-ue-config+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcdata-user-profile+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-affiliation-command+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-floor-request+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-location-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-service-config+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-signed+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-ue-config+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-ue-init-config+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcptt-user-profile+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcvideo-affiliation-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcvideo-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcvideo-location-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcvideo-service-config+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcvideo-transmission-request+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcvideo-ue-config+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mcvideo-user-profile+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.mid-call+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.ngap": {
    "source": "iana"
  },
  "application/vnd.3gpp.pfcp": {
    "source": "iana"
  },
  "application/vnd.3gpp.pic-bw-large": {
    "source": "iana",
    "extensions": ["plb"]
  },
  "application/vnd.3gpp.pic-bw-small": {
    "source": "iana",
    "extensions": ["psb"]
  },
  "application/vnd.3gpp.pic-bw-var": {
    "source": "iana",
    "extensions": ["pvb"]
  },
  "application/vnd.3gpp.s1ap": {
    "source": "iana"
  },
  "application/vnd.3gpp.sms": {
    "source": "iana"
  },
  "application/vnd.3gpp.sms+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.srvcc-ext+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.srvcc-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.state-and-event-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp.ussd+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp2.bcmcsinfo+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.3gpp2.sms": {
    "source": "iana"
  },
  "application/vnd.3gpp2.tcap": {
    "source": "iana",
    "extensions": ["tcap"]
  },
  "application/vnd.3lightssoftware.imagescal": {
    "source": "iana"
  },
  "application/vnd.3m.post-it-notes": {
    "source": "iana",
    "extensions": ["pwn"]
  },
  "application/vnd.accpac.simply.aso": {
    "source": "iana",
    "extensions": ["aso"]
  },
  "application/vnd.accpac.simply.imp": {
    "source": "iana",
    "extensions": ["imp"]
  },
  "application/vnd.acucobol": {
    "source": "iana",
    "extensions": ["acu"]
  },
  "application/vnd.acucorp": {
    "source": "iana",
    "extensions": ["atc","acutc"]
  },
  "application/vnd.adobe.air-application-installer-package+zip": {
    "source": "apache",
    "compressible": false,
    "extensions": ["air"]
  },
  "application/vnd.adobe.flash.movie": {
    "source": "iana"
  },
  "application/vnd.adobe.formscentral.fcdt": {
    "source": "iana",
    "extensions": ["fcdt"]
  },
  "application/vnd.adobe.fxp": {
    "source": "iana",
    "extensions": ["fxp","fxpl"]
  },
  "application/vnd.adobe.partial-upload": {
    "source": "iana"
  },
  "application/vnd.adobe.xdp+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xdp"]
  },
  "application/vnd.adobe.xfdf": {
    "source": "iana",
    "extensions": ["xfdf"]
  },
  "application/vnd.aether.imp": {
    "source": "iana"
  },
  "application/vnd.afpc.afplinedata": {
    "source": "iana"
  },
  "application/vnd.afpc.afplinedata-pagedef": {
    "source": "iana"
  },
  "application/vnd.afpc.cmoca-cmresource": {
    "source": "iana"
  },
  "application/vnd.afpc.foca-charset": {
    "source": "iana"
  },
  "application/vnd.afpc.foca-codedfont": {
    "source": "iana"
  },
  "application/vnd.afpc.foca-codepage": {
    "source": "iana"
  },
  "application/vnd.afpc.modca": {
    "source": "iana"
  },
  "application/vnd.afpc.modca-cmtable": {
    "source": "iana"
  },
  "application/vnd.afpc.modca-formdef": {
    "source": "iana"
  },
  "application/vnd.afpc.modca-mediummap": {
    "source": "iana"
  },
  "application/vnd.afpc.modca-objectcontainer": {
    "source": "iana"
  },
  "application/vnd.afpc.modca-overlay": {
    "source": "iana"
  },
  "application/vnd.afpc.modca-pagesegment": {
    "source": "iana"
  },
  "application/vnd.ah-barcode": {
    "source": "iana"
  },
  "application/vnd.ahead.space": {
    "source": "iana",
    "extensions": ["ahead"]
  },
  "application/vnd.airzip.filesecure.azf": {
    "source": "iana",
    "extensions": ["azf"]
  },
  "application/vnd.airzip.filesecure.azs": {
    "source": "iana",
    "extensions": ["azs"]
  },
  "application/vnd.amadeus+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.amazon.ebook": {
    "source": "apache",
    "extensions": ["azw"]
  },
  "application/vnd.amazon.mobi8-ebook": {
    "source": "iana"
  },
  "application/vnd.americandynamics.acc": {
    "source": "iana",
    "extensions": ["acc"]
  },
  "application/vnd.amiga.ami": {
    "source": "iana",
    "extensions": ["ami"]
  },
  "application/vnd.amundsen.maze+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.android.ota": {
    "source": "iana"
  },
  "application/vnd.android.package-archive": {
    "source": "apache",
    "compressible": false,
    "extensions": ["apk"]
  },
  "application/vnd.anki": {
    "source": "iana"
  },
  "application/vnd.anser-web-certificate-issue-initiation": {
    "source": "iana",
    "extensions": ["cii"]
  },
  "application/vnd.anser-web-funds-transfer-initiation": {
    "source": "apache",
    "extensions": ["fti"]
  },
  "application/vnd.antix.game-component": {
    "source": "iana",
    "extensions": ["atx"]
  },
  "application/vnd.apache.thrift.binary": {
    "source": "iana"
  },
  "application/vnd.apache.thrift.compact": {
    "source": "iana"
  },
  "application/vnd.apache.thrift.json": {
    "source": "iana"
  },
  "application/vnd.api+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.aplextor.warrp+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.apothekende.reservation+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.apple.installer+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["mpkg"]
  },
  "application/vnd.apple.keynote": {
    "source": "iana",
    "extensions": ["key"]
  },
  "application/vnd.apple.mpegurl": {
    "source": "iana",
    "extensions": ["m3u8"]
  },
  "application/vnd.apple.numbers": {
    "source": "iana",
    "extensions": ["numbers"]
  },
  "application/vnd.apple.pages": {
    "source": "iana",
    "extensions": ["pages"]
  },
  "application/vnd.apple.pkpass": {
    "compressible": false,
    "extensions": ["pkpass"]
  },
  "application/vnd.arastra.swi": {
    "source": "iana"
  },
  "application/vnd.aristanetworks.swi": {
    "source": "iana",
    "extensions": ["swi"]
  },
  "application/vnd.artisan+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.artsquare": {
    "source": "iana"
  },
  "application/vnd.astraea-software.iota": {
    "source": "iana",
    "extensions": ["iota"]
  },
  "application/vnd.audiograph": {
    "source": "iana",
    "extensions": ["aep"]
  },
  "application/vnd.autopackage": {
    "source": "iana"
  },
  "application/vnd.avalon+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.avistar+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.balsamiq.bmml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["bmml"]
  },
  "application/vnd.balsamiq.bmpr": {
    "source": "iana"
  },
  "application/vnd.banana-accounting": {
    "source": "iana"
  },
  "application/vnd.bbf.usp.error": {
    "source": "iana"
  },
  "application/vnd.bbf.usp.msg": {
    "source": "iana"
  },
  "application/vnd.bbf.usp.msg+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.bekitzur-stech+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.bint.med-content": {
    "source": "iana"
  },
  "application/vnd.biopax.rdf+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.blink-idb-value-wrapper": {
    "source": "iana"
  },
  "application/vnd.blueice.multipass": {
    "source": "iana",
    "extensions": ["mpm"]
  },
  "application/vnd.bluetooth.ep.oob": {
    "source": "iana"
  },
  "application/vnd.bluetooth.le.oob": {
    "source": "iana"
  },
  "application/vnd.bmi": {
    "source": "iana",
    "extensions": ["bmi"]
  },
  "application/vnd.bpf": {
    "source": "iana"
  },
  "application/vnd.bpf3": {
    "source": "iana"
  },
  "application/vnd.businessobjects": {
    "source": "iana",
    "extensions": ["rep"]
  },
  "application/vnd.byu.uapi+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.cab-jscript": {
    "source": "iana"
  },
  "application/vnd.canon-cpdl": {
    "source": "iana"
  },
  "application/vnd.canon-lips": {
    "source": "iana"
  },
  "application/vnd.capasystems-pg+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.cendio.thinlinc.clientconf": {
    "source": "iana"
  },
  "application/vnd.century-systems.tcp_stream": {
    "source": "iana"
  },
  "application/vnd.chemdraw+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["cdxml"]
  },
  "application/vnd.chess-pgn": {
    "source": "iana"
  },
  "application/vnd.chipnuts.karaoke-mmd": {
    "source": "iana",
    "extensions": ["mmd"]
  },
  "application/vnd.ciedi": {
    "source": "iana"
  },
  "application/vnd.cinderella": {
    "source": "iana",
    "extensions": ["cdy"]
  },
  "application/vnd.cirpack.isdn-ext": {
    "source": "iana"
  },
  "application/vnd.citationstyles.style+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["csl"]
  },
  "application/vnd.claymore": {
    "source": "iana",
    "extensions": ["cla"]
  },
  "application/vnd.cloanto.rp9": {
    "source": "iana",
    "extensions": ["rp9"]
  },
  "application/vnd.clonk.c4group": {
    "source": "iana",
    "extensions": ["c4g","c4d","c4f","c4p","c4u"]
  },
  "application/vnd.cluetrust.cartomobile-config": {
    "source": "iana",
    "extensions": ["c11amc"]
  },
  "application/vnd.cluetrust.cartomobile-config-pkg": {
    "source": "iana",
    "extensions": ["c11amz"]
  },
  "application/vnd.coffeescript": {
    "source": "iana"
  },
  "application/vnd.collabio.xodocuments.document": {
    "source": "iana"
  },
  "application/vnd.collabio.xodocuments.document-template": {
    "source": "iana"
  },
  "application/vnd.collabio.xodocuments.presentation": {
    "source": "iana"
  },
  "application/vnd.collabio.xodocuments.presentation-template": {
    "source": "iana"
  },
  "application/vnd.collabio.xodocuments.spreadsheet": {
    "source": "iana"
  },
  "application/vnd.collabio.xodocuments.spreadsheet-template": {
    "source": "iana"
  },
  "application/vnd.collection+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.collection.doc+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.collection.next+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.comicbook+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.comicbook-rar": {
    "source": "iana"
  },
  "application/vnd.commerce-battelle": {
    "source": "iana"
  },
  "application/vnd.commonspace": {
    "source": "iana",
    "extensions": ["csp"]
  },
  "application/vnd.contact.cmsg": {
    "source": "iana",
    "extensions": ["cdbcmsg"]
  },
  "application/vnd.coreos.ignition+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.cosmocaller": {
    "source": "iana",
    "extensions": ["cmc"]
  },
  "application/vnd.crick.clicker": {
    "source": "iana",
    "extensions": ["clkx"]
  },
  "application/vnd.crick.clicker.keyboard": {
    "source": "iana",
    "extensions": ["clkk"]
  },
  "application/vnd.crick.clicker.palette": {
    "source": "iana",
    "extensions": ["clkp"]
  },
  "application/vnd.crick.clicker.template": {
    "source": "iana",
    "extensions": ["clkt"]
  },
  "application/vnd.crick.clicker.wordbank": {
    "source": "iana",
    "extensions": ["clkw"]
  },
  "application/vnd.criticaltools.wbs+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["wbs"]
  },
  "application/vnd.cryptii.pipe+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.crypto-shade-file": {
    "source": "iana"
  },
  "application/vnd.cryptomator.encrypted": {
    "source": "iana"
  },
  "application/vnd.cryptomator.vault": {
    "source": "iana"
  },
  "application/vnd.ctc-posml": {
    "source": "iana",
    "extensions": ["pml"]
  },
  "application/vnd.ctct.ws+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.cups-pdf": {
    "source": "iana"
  },
  "application/vnd.cups-postscript": {
    "source": "iana"
  },
  "application/vnd.cups-ppd": {
    "source": "iana",
    "extensions": ["ppd"]
  },
  "application/vnd.cups-raster": {
    "source": "iana"
  },
  "application/vnd.cups-raw": {
    "source": "iana"
  },
  "application/vnd.curl": {
    "source": "iana"
  },
  "application/vnd.curl.car": {
    "source": "apache",
    "extensions": ["car"]
  },
  "application/vnd.curl.pcurl": {
    "source": "apache",
    "extensions": ["pcurl"]
  },
  "application/vnd.cyan.dean.root+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.cybank": {
    "source": "iana"
  },
  "application/vnd.cyclonedx+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.cyclonedx+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.d2l.coursepackage1p0+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.d3m-dataset": {
    "source": "iana"
  },
  "application/vnd.d3m-problem": {
    "source": "iana"
  },
  "application/vnd.dart": {
    "source": "iana",
    "compressible": true,
    "extensions": ["dart"]
  },
  "application/vnd.data-vision.rdz": {
    "source": "iana",
    "extensions": ["rdz"]
  },
  "application/vnd.datapackage+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dataresource+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dbf": {
    "source": "iana",
    "extensions": ["dbf"]
  },
  "application/vnd.debian.binary-package": {
    "source": "iana"
  },
  "application/vnd.dece.data": {
    "source": "iana",
    "extensions": ["uvf","uvvf","uvd","uvvd"]
  },
  "application/vnd.dece.ttml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["uvt","uvvt"]
  },
  "application/vnd.dece.unspecified": {
    "source": "iana",
    "extensions": ["uvx","uvvx"]
  },
  "application/vnd.dece.zip": {
    "source": "iana",
    "extensions": ["uvz","uvvz"]
  },
  "application/vnd.denovo.fcselayout-link": {
    "source": "iana",
    "extensions": ["fe_launch"]
  },
  "application/vnd.desmume.movie": {
    "source": "iana"
  },
  "application/vnd.dir-bi.plate-dl-nosuffix": {
    "source": "iana"
  },
  "application/vnd.dm.delegation+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dna": {
    "source": "iana",
    "extensions": ["dna"]
  },
  "application/vnd.document+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dolby.mlp": {
    "source": "apache",
    "extensions": ["mlp"]
  },
  "application/vnd.dolby.mobile.1": {
    "source": "iana"
  },
  "application/vnd.dolby.mobile.2": {
    "source": "iana"
  },
  "application/vnd.doremir.scorecloud-binary-document": {
    "source": "iana"
  },
  "application/vnd.dpgraph": {
    "source": "iana",
    "extensions": ["dpg"]
  },
  "application/vnd.dreamfactory": {
    "source": "iana",
    "extensions": ["dfac"]
  },
  "application/vnd.drive+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ds-keypoint": {
    "source": "apache",
    "extensions": ["kpxx"]
  },
  "application/vnd.dtg.local": {
    "source": "iana"
  },
  "application/vnd.dtg.local.flash": {
    "source": "iana"
  },
  "application/vnd.dtg.local.html": {
    "source": "iana"
  },
  "application/vnd.dvb.ait": {
    "source": "iana",
    "extensions": ["ait"]
  },
  "application/vnd.dvb.dvbisl+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dvb.dvbj": {
    "source": "iana"
  },
  "application/vnd.dvb.esgcontainer": {
    "source": "iana"
  },
  "application/vnd.dvb.ipdcdftnotifaccess": {
    "source": "iana"
  },
  "application/vnd.dvb.ipdcesgaccess": {
    "source": "iana"
  },
  "application/vnd.dvb.ipdcesgaccess2": {
    "source": "iana"
  },
  "application/vnd.dvb.ipdcesgpdd": {
    "source": "iana"
  },
  "application/vnd.dvb.ipdcroaming": {
    "source": "iana"
  },
  "application/vnd.dvb.iptv.alfec-base": {
    "source": "iana"
  },
  "application/vnd.dvb.iptv.alfec-enhancement": {
    "source": "iana"
  },
  "application/vnd.dvb.notif-aggregate-root+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dvb.notif-container+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dvb.notif-generic+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dvb.notif-ia-msglist+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dvb.notif-ia-registration-request+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dvb.notif-ia-registration-response+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dvb.notif-init+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.dvb.pfr": {
    "source": "iana"
  },
  "application/vnd.dvb.service": {
    "source": "iana",
    "extensions": ["svc"]
  },
  "application/vnd.dxr": {
    "source": "iana"
  },
  "application/vnd.dynageo": {
    "source": "iana",
    "extensions": ["geo"]
  },
  "application/vnd.dzr": {
    "source": "iana"
  },
  "application/vnd.easykaraoke.cdgdownload": {
    "source": "iana"
  },
  "application/vnd.ecdis-update": {
    "source": "iana"
  },
  "application/vnd.ecip.rlp": {
    "source": "iana"
  },
  "application/vnd.ecowin.chart": {
    "source": "iana",
    "extensions": ["mag"]
  },
  "application/vnd.ecowin.filerequest": {
    "source": "iana"
  },
  "application/vnd.ecowin.fileupdate": {
    "source": "iana"
  },
  "application/vnd.ecowin.series": {
    "source": "iana"
  },
  "application/vnd.ecowin.seriesrequest": {
    "source": "iana"
  },
  "application/vnd.ecowin.seriesupdate": {
    "source": "iana"
  },
  "application/vnd.efi.img": {
    "source": "iana"
  },
  "application/vnd.efi.iso": {
    "source": "iana"
  },
  "application/vnd.emclient.accessrequest+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.enliven": {
    "source": "iana",
    "extensions": ["nml"]
  },
  "application/vnd.enphase.envoy": {
    "source": "iana"
  },
  "application/vnd.eprints.data+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.epson.esf": {
    "source": "iana",
    "extensions": ["esf"]
  },
  "application/vnd.epson.msf": {
    "source": "iana",
    "extensions": ["msf"]
  },
  "application/vnd.epson.quickanime": {
    "source": "iana",
    "extensions": ["qam"]
  },
  "application/vnd.epson.salt": {
    "source": "iana",
    "extensions": ["slt"]
  },
  "application/vnd.epson.ssf": {
    "source": "iana",
    "extensions": ["ssf"]
  },
  "application/vnd.ericsson.quickcall": {
    "source": "iana"
  },
  "application/vnd.espass-espass+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.eszigno3+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["es3","et3"]
  },
  "application/vnd.etsi.aoc+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.asic-e+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.etsi.asic-s+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.etsi.cug+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.iptvcommand+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.iptvdiscovery+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.iptvprofile+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.iptvsad-bc+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.iptvsad-cod+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.iptvsad-npvr+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.iptvservice+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.iptvsync+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.iptvueprofile+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.mcid+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.mheg5": {
    "source": "iana"
  },
  "application/vnd.etsi.overload-control-policy-dataset+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.pstn+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.sci+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.simservs+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.timestamp-token": {
    "source": "iana"
  },
  "application/vnd.etsi.tsl+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.etsi.tsl.der": {
    "source": "iana"
  },
  "application/vnd.eudora.data": {
    "source": "iana"
  },
  "application/vnd.evolv.ecig.profile": {
    "source": "iana"
  },
  "application/vnd.evolv.ecig.settings": {
    "source": "iana"
  },
  "application/vnd.evolv.ecig.theme": {
    "source": "iana"
  },
  "application/vnd.exstream-empower+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.exstream-package": {
    "source": "iana"
  },
  "application/vnd.ezpix-album": {
    "source": "iana",
    "extensions": ["ez2"]
  },
  "application/vnd.ezpix-package": {
    "source": "iana",
    "extensions": ["ez3"]
  },
  "application/vnd.f-secure.mobile": {
    "source": "iana"
  },
  "application/vnd.fastcopy-disk-image": {
    "source": "iana"
  },
  "application/vnd.fdf": {
    "source": "iana",
    "extensions": ["fdf"]
  },
  "application/vnd.fdsn.mseed": {
    "source": "iana",
    "extensions": ["mseed"]
  },
  "application/vnd.fdsn.seed": {
    "source": "iana",
    "extensions": ["seed","dataless"]
  },
  "application/vnd.ffsns": {
    "source": "iana"
  },
  "application/vnd.ficlab.flb+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.filmit.zfc": {
    "source": "iana"
  },
  "application/vnd.fints": {
    "source": "iana"
  },
  "application/vnd.firemonkeys.cloudcell": {
    "source": "iana"
  },
  "application/vnd.flographit": {
    "source": "iana",
    "extensions": ["gph"]
  },
  "application/vnd.fluxtime.clip": {
    "source": "iana",
    "extensions": ["ftc"]
  },
  "application/vnd.font-fontforge-sfd": {
    "source": "iana"
  },
  "application/vnd.framemaker": {
    "source": "iana",
    "extensions": ["fm","frame","maker","book"]
  },
  "application/vnd.frogans.fnc": {
    "source": "iana",
    "extensions": ["fnc"]
  },
  "application/vnd.frogans.ltf": {
    "source": "iana",
    "extensions": ["ltf"]
  },
  "application/vnd.fsc.weblaunch": {
    "source": "iana",
    "extensions": ["fsc"]
  },
  "application/vnd.fujifilm.fb.docuworks": {
    "source": "iana"
  },
  "application/vnd.fujifilm.fb.docuworks.binder": {
    "source": "iana"
  },
  "application/vnd.fujifilm.fb.docuworks.container": {
    "source": "iana"
  },
  "application/vnd.fujifilm.fb.jfi+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.fujitsu.oasys": {
    "source": "iana",
    "extensions": ["oas"]
  },
  "application/vnd.fujitsu.oasys2": {
    "source": "iana",
    "extensions": ["oa2"]
  },
  "application/vnd.fujitsu.oasys3": {
    "source": "iana",
    "extensions": ["oa3"]
  },
  "application/vnd.fujitsu.oasysgp": {
    "source": "iana",
    "extensions": ["fg5"]
  },
  "application/vnd.fujitsu.oasysprs": {
    "source": "iana",
    "extensions": ["bh2"]
  },
  "application/vnd.fujixerox.art-ex": {
    "source": "iana"
  },
  "application/vnd.fujixerox.art4": {
    "source": "iana"
  },
  "application/vnd.fujixerox.ddd": {
    "source": "iana",
    "extensions": ["ddd"]
  },
  "application/vnd.fujixerox.docuworks": {
    "source": "iana",
    "extensions": ["xdw"]
  },
  "application/vnd.fujixerox.docuworks.binder": {
    "source": "iana",
    "extensions": ["xbd"]
  },
  "application/vnd.fujixerox.docuworks.container": {
    "source": "iana"
  },
  "application/vnd.fujixerox.hbpl": {
    "source": "iana"
  },
  "application/vnd.fut-misnet": {
    "source": "iana"
  },
  "application/vnd.futoin+cbor": {
    "source": "iana"
  },
  "application/vnd.futoin+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.fuzzysheet": {
    "source": "iana",
    "extensions": ["fzs"]
  },
  "application/vnd.genomatix.tuxedo": {
    "source": "iana",
    "extensions": ["txd"]
  },
  "application/vnd.gentics.grd+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.geo+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.geocube+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.geogebra.file": {
    "source": "iana",
    "extensions": ["ggb"]
  },
  "application/vnd.geogebra.slides": {
    "source": "iana"
  },
  "application/vnd.geogebra.tool": {
    "source": "iana",
    "extensions": ["ggt"]
  },
  "application/vnd.geometry-explorer": {
    "source": "iana",
    "extensions": ["gex","gre"]
  },
  "application/vnd.geonext": {
    "source": "iana",
    "extensions": ["gxt"]
  },
  "application/vnd.geoplan": {
    "source": "iana",
    "extensions": ["g2w"]
  },
  "application/vnd.geospace": {
    "source": "iana",
    "extensions": ["g3w"]
  },
  "application/vnd.gerber": {
    "source": "iana"
  },
  "application/vnd.globalplatform.card-content-mgt": {
    "source": "iana"
  },
  "application/vnd.globalplatform.card-content-mgt-response": {
    "source": "iana"
  },
  "application/vnd.gmx": {
    "source": "iana",
    "extensions": ["gmx"]
  },
  "application/vnd.google-apps.document": {
    "compressible": false,
    "extensions": ["gdoc"]
  },
  "application/vnd.google-apps.presentation": {
    "compressible": false,
    "extensions": ["gslides"]
  },
  "application/vnd.google-apps.spreadsheet": {
    "compressible": false,
    "extensions": ["gsheet"]
  },
  "application/vnd.google-earth.kml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["kml"]
  },
  "application/vnd.google-earth.kmz": {
    "source": "iana",
    "compressible": false,
    "extensions": ["kmz"]
  },
  "application/vnd.gov.sk.e-form+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.gov.sk.e-form+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.gov.sk.xmldatacontainer+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.grafeq": {
    "source": "iana",
    "extensions": ["gqf","gqs"]
  },
  "application/vnd.gridmp": {
    "source": "iana"
  },
  "application/vnd.groove-account": {
    "source": "iana",
    "extensions": ["gac"]
  },
  "application/vnd.groove-help": {
    "source": "iana",
    "extensions": ["ghf"]
  },
  "application/vnd.groove-identity-message": {
    "source": "iana",
    "extensions": ["gim"]
  },
  "application/vnd.groove-injector": {
    "source": "iana",
    "extensions": ["grv"]
  },
  "application/vnd.groove-tool-message": {
    "source": "iana",
    "extensions": ["gtm"]
  },
  "application/vnd.groove-tool-template": {
    "source": "iana",
    "extensions": ["tpl"]
  },
  "application/vnd.groove-vcard": {
    "source": "iana",
    "extensions": ["vcg"]
  },
  "application/vnd.hal+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.hal+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["hal"]
  },
  "application/vnd.handheld-entertainment+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["zmm"]
  },
  "application/vnd.hbci": {
    "source": "iana",
    "extensions": ["hbci"]
  },
  "application/vnd.hc+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.hcl-bireports": {
    "source": "iana"
  },
  "application/vnd.hdt": {
    "source": "iana"
  },
  "application/vnd.heroku+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.hhe.lesson-player": {
    "source": "iana",
    "extensions": ["les"]
  },
  "application/vnd.hp-hpgl": {
    "source": "iana",
    "extensions": ["hpgl"]
  },
  "application/vnd.hp-hpid": {
    "source": "iana",
    "extensions": ["hpid"]
  },
  "application/vnd.hp-hps": {
    "source": "iana",
    "extensions": ["hps"]
  },
  "application/vnd.hp-jlyt": {
    "source": "iana",
    "extensions": ["jlt"]
  },
  "application/vnd.hp-pcl": {
    "source": "iana",
    "extensions": ["pcl"]
  },
  "application/vnd.hp-pclxl": {
    "source": "iana",
    "extensions": ["pclxl"]
  },
  "application/vnd.httphone": {
    "source": "iana"
  },
  "application/vnd.hydrostatix.sof-data": {
    "source": "iana",
    "extensions": ["sfd-hdstx"]
  },
  "application/vnd.hyper+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.hyper-item+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.hyperdrive+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.hzn-3d-crossword": {
    "source": "iana"
  },
  "application/vnd.ibm.afplinedata": {
    "source": "iana"
  },
  "application/vnd.ibm.electronic-media": {
    "source": "iana"
  },
  "application/vnd.ibm.minipay": {
    "source": "iana",
    "extensions": ["mpy"]
  },
  "application/vnd.ibm.modcap": {
    "source": "iana",
    "extensions": ["afp","listafp","list3820"]
  },
  "application/vnd.ibm.rights-management": {
    "source": "iana",
    "extensions": ["irm"]
  },
  "application/vnd.ibm.secure-container": {
    "source": "iana",
    "extensions": ["sc"]
  },
  "application/vnd.iccprofile": {
    "source": "iana",
    "extensions": ["icc","icm"]
  },
  "application/vnd.ieee.1905": {
    "source": "iana"
  },
  "application/vnd.igloader": {
    "source": "iana",
    "extensions": ["igl"]
  },
  "application/vnd.imagemeter.folder+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.imagemeter.image+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.immervision-ivp": {
    "source": "iana",
    "extensions": ["ivp"]
  },
  "application/vnd.immervision-ivu": {
    "source": "iana",
    "extensions": ["ivu"]
  },
  "application/vnd.ims.imsccv1p1": {
    "source": "iana"
  },
  "application/vnd.ims.imsccv1p2": {
    "source": "iana"
  },
  "application/vnd.ims.imsccv1p3": {
    "source": "iana"
  },
  "application/vnd.ims.lis.v2.result+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ims.lti.v2.toolproxy+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ims.lti.v2.toolproxy.id+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ims.lti.v2.toolsettings+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ims.lti.v2.toolsettings.simple+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.informedcontrol.rms+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.informix-visionary": {
    "source": "iana"
  },
  "application/vnd.infotech.project": {
    "source": "iana"
  },
  "application/vnd.infotech.project+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.innopath.wamp.notification": {
    "source": "iana"
  },
  "application/vnd.insors.igm": {
    "source": "iana",
    "extensions": ["igm"]
  },
  "application/vnd.intercon.formnet": {
    "source": "iana",
    "extensions": ["xpw","xpx"]
  },
  "application/vnd.intergeo": {
    "source": "iana",
    "extensions": ["i2g"]
  },
  "application/vnd.intertrust.digibox": {
    "source": "iana"
  },
  "application/vnd.intertrust.nncp": {
    "source": "iana"
  },
  "application/vnd.intu.qbo": {
    "source": "iana",
    "extensions": ["qbo"]
  },
  "application/vnd.intu.qfx": {
    "source": "iana",
    "extensions": ["qfx"]
  },
  "application/vnd.iptc.g2.catalogitem+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.iptc.g2.conceptitem+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.iptc.g2.knowledgeitem+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.iptc.g2.newsitem+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.iptc.g2.newsmessage+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.iptc.g2.packageitem+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.iptc.g2.planningitem+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ipunplugged.rcprofile": {
    "source": "iana",
    "extensions": ["rcprofile"]
  },
  "application/vnd.irepository.package+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["irp"]
  },
  "application/vnd.is-xpr": {
    "source": "iana",
    "extensions": ["xpr"]
  },
  "application/vnd.isac.fcs": {
    "source": "iana",
    "extensions": ["fcs"]
  },
  "application/vnd.iso11783-10+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.jam": {
    "source": "iana",
    "extensions": ["jam"]
  },
  "application/vnd.japannet-directory-service": {
    "source": "iana"
  },
  "application/vnd.japannet-jpnstore-wakeup": {
    "source": "iana"
  },
  "application/vnd.japannet-payment-wakeup": {
    "source": "iana"
  },
  "application/vnd.japannet-registration": {
    "source": "iana"
  },
  "application/vnd.japannet-registration-wakeup": {
    "source": "iana"
  },
  "application/vnd.japannet-setstore-wakeup": {
    "source": "iana"
  },
  "application/vnd.japannet-verification": {
    "source": "iana"
  },
  "application/vnd.japannet-verification-wakeup": {
    "source": "iana"
  },
  "application/vnd.jcp.javame.midlet-rms": {
    "source": "iana",
    "extensions": ["rms"]
  },
  "application/vnd.jisp": {
    "source": "iana",
    "extensions": ["jisp"]
  },
  "application/vnd.joost.joda-archive": {
    "source": "iana",
    "extensions": ["joda"]
  },
  "application/vnd.jsk.isdn-ngn": {
    "source": "iana"
  },
  "application/vnd.kahootz": {
    "source": "iana",
    "extensions": ["ktz","ktr"]
  },
  "application/vnd.kde.karbon": {
    "source": "iana",
    "extensions": ["karbon"]
  },
  "application/vnd.kde.kchart": {
    "source": "iana",
    "extensions": ["chrt"]
  },
  "application/vnd.kde.kformula": {
    "source": "iana",
    "extensions": ["kfo"]
  },
  "application/vnd.kde.kivio": {
    "source": "iana",
    "extensions": ["flw"]
  },
  "application/vnd.kde.kontour": {
    "source": "iana",
    "extensions": ["kon"]
  },
  "application/vnd.kde.kpresenter": {
    "source": "iana",
    "extensions": ["kpr","kpt"]
  },
  "application/vnd.kde.kspread": {
    "source": "iana",
    "extensions": ["ksp"]
  },
  "application/vnd.kde.kword": {
    "source": "iana",
    "extensions": ["kwd","kwt"]
  },
  "application/vnd.kenameaapp": {
    "source": "iana",
    "extensions": ["htke"]
  },
  "application/vnd.kidspiration": {
    "source": "iana",
    "extensions": ["kia"]
  },
  "application/vnd.kinar": {
    "source": "iana",
    "extensions": ["kne","knp"]
  },
  "application/vnd.koan": {
    "source": "iana",
    "extensions": ["skp","skd","skt","skm"]
  },
  "application/vnd.kodak-descriptor": {
    "source": "iana",
    "extensions": ["sse"]
  },
  "application/vnd.las": {
    "source": "iana"
  },
  "application/vnd.las.las+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.las.las+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["lasxml"]
  },
  "application/vnd.laszip": {
    "source": "iana"
  },
  "application/vnd.leap+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.liberty-request+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.llamagraphics.life-balance.desktop": {
    "source": "iana",
    "extensions": ["lbd"]
  },
  "application/vnd.llamagraphics.life-balance.exchange+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["lbe"]
  },
  "application/vnd.logipipe.circuit+zip": {
    "source": "iana",
    "compressible": false
  },
  "application/vnd.loom": {
    "source": "iana"
  },
  "application/vnd.lotus-1-2-3": {
    "source": "iana",
    "extensions": ["123"]
  },
  "application/vnd.lotus-approach": {
    "source": "iana",
    "extensions": ["apr"]
  },
  "application/vnd.lotus-freelance": {
    "source": "iana",
    "extensions": ["pre"]
  },
  "application/vnd.lotus-notes": {
    "source": "iana",
    "extensions": ["nsf"]
  },
  "application/vnd.lotus-organizer": {
    "source": "iana",
    "extensions": ["org"]
  },
  "application/vnd.lotus-screencam": {
    "source": "iana",
    "extensions": ["scm"]
  },
  "application/vnd.lotus-wordpro": {
    "source": "iana",
    "extensions": ["lwp"]
  },
  "application/vnd.macports.portpkg": {
    "source": "iana",
    "extensions": ["portpkg"]
  },
  "application/vnd.mapbox-vector-tile": {
    "source": "iana",
    "extensions": ["mvt"]
  },
  "application/vnd.marlin.drm.actiontoken+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.marlin.drm.conftoken+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.marlin.drm.license+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.marlin.drm.mdcf": {
    "source": "iana"
  },
  "application/vnd.mason+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.maxmind.maxmind-db": {
    "source": "iana"
  },
  "application/vnd.mcd": {
    "source": "iana",
    "extensions": ["mcd"]
  },
  "application/vnd.medcalcdata": {
    "source": "iana",
    "extensions": ["mc1"]
  },
  "application/vnd.mediastation.cdkey": {
    "source": "iana",
    "extensions": ["cdkey"]
  },
  "application/vnd.meridian-slingshot": {
    "source": "iana"
  },
  "application/vnd.mfer": {
    "source": "iana",
    "extensions": ["mwf"]
  },
  "application/vnd.mfmp": {
    "source": "iana",
    "extensions": ["mfm"]
  },
  "application/vnd.micro+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.micrografx.flo": {
    "source": "iana",
    "extensions": ["flo"]
  },
  "application/vnd.micrografx.igx": {
    "source": "iana",
    "extensions": ["igx"]
  },
  "application/vnd.microsoft.portable-executable": {
    "source": "iana"
  },
  "application/vnd.microsoft.windows.thumbnail-cache": {
    "source": "iana"
  },
  "application/vnd.miele+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.mif": {
    "source": "iana",
    "extensions": ["mif"]
  },
  "application/vnd.minisoft-hp3000-save": {
    "source": "iana"
  },
  "application/vnd.mitsubishi.misty-guard.trustweb": {
    "source": "iana"
  },
  "application/vnd.mobius.daf": {
    "source": "iana",
    "extensions": ["daf"]
  },
  "application/vnd.mobius.dis": {
    "source": "iana",
    "extensions": ["dis"]
  },
  "application/vnd.mobius.mbk": {
    "source": "iana",
    "extensions": ["mbk"]
  },
  "application/vnd.mobius.mqy": {
    "source": "iana",
    "extensions": ["mqy"]
  },
  "application/vnd.mobius.msl": {
    "source": "iana",
    "extensions": ["msl"]
  },
  "application/vnd.mobius.plc": {
    "source": "iana",
    "extensions": ["plc"]
  },
  "application/vnd.mobius.txf": {
    "source": "iana",
    "extensions": ["txf"]
  },
  "application/vnd.mophun.application": {
    "source": "iana",
    "extensions": ["mpn"]
  },
  "application/vnd.mophun.certificate": {
    "source": "iana",
    "extensions": ["mpc"]
  },
  "application/vnd.motorola.flexsuite": {
    "source": "iana"
  },
  "application/vnd.motorola.flexsuite.adsi": {
    "source": "iana"
  },
  "application/vnd.motorola.flexsuite.fis": {
    "source": "iana"
  },
  "application/vnd.motorola.flexsuite.gotap": {
    "source": "iana"
  },
  "application/vnd.motorola.flexsuite.kmr": {
    "source": "iana"
  },
  "application/vnd.motorola.flexsuite.ttc": {
    "source": "iana"
  },
  "application/vnd.motorola.flexsuite.wem": {
    "source": "iana"
  },
  "application/vnd.motorola.iprm": {
    "source": "iana"
  },
  "application/vnd.mozilla.xul+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xul"]
  },
  "application/vnd.ms-3mfdocument": {
    "source": "iana"
  },
  "application/vnd.ms-artgalry": {
    "source": "iana",
    "extensions": ["cil"]
  },
  "application/vnd.ms-asf": {
    "source": "iana"
  },
  "application/vnd.ms-cab-compressed": {
    "source": "iana",
    "extensions": ["cab"]
  },
  "application/vnd.ms-color.iccprofile": {
    "source": "apache"
  },
  "application/vnd.ms-excel": {
    "source": "iana",
    "compressible": false,
    "extensions": ["xls","xlm","xla","xlc","xlt","xlw"]
  },
  "application/vnd.ms-excel.addin.macroenabled.12": {
    "source": "iana",
    "extensions": ["xlam"]
  },
  "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
    "source": "iana",
    "extensions": ["xlsb"]
  },
  "application/vnd.ms-excel.sheet.macroenabled.12": {
    "source": "iana",
    "extensions": ["xlsm"]
  },
  "application/vnd.ms-excel.template.macroenabled.12": {
    "source": "iana",
    "extensions": ["xltm"]
  },
  "application/vnd.ms-fontobject": {
    "source": "iana",
    "compressible": true,
    "extensions": ["eot"]
  },
  "application/vnd.ms-htmlhelp": {
    "source": "iana",
    "extensions": ["chm"]
  },
  "application/vnd.ms-ims": {
    "source": "iana",
    "extensions": ["ims"]
  },
  "application/vnd.ms-lrm": {
    "source": "iana",
    "extensions": ["lrm"]
  },
  "application/vnd.ms-office.activex+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ms-officetheme": {
    "source": "iana",
    "extensions": ["thmx"]
  },
  "application/vnd.ms-opentype": {
    "source": "apache",
    "compressible": true
  },
  "application/vnd.ms-outlook": {
    "compressible": false,
    "extensions": ["msg"]
  },
  "application/vnd.ms-package.obfuscated-opentype": {
    "source": "apache"
  },
  "application/vnd.ms-pki.seccat": {
    "source": "apache",
    "extensions": ["cat"]
  },
  "application/vnd.ms-pki.stl": {
    "source": "apache",
    "extensions": ["stl"]
  },
  "application/vnd.ms-playready.initiator+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ms-powerpoint": {
    "source": "iana",
    "compressible": false,
    "extensions": ["ppt","pps","pot"]
  },
  "application/vnd.ms-powerpoint.addin.macroenabled.12": {
    "source": "iana",
    "extensions": ["ppam"]
  },
  "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
    "source": "iana",
    "extensions": ["pptm"]
  },
  "application/vnd.ms-powerpoint.slide.macroenabled.12": {
    "source": "iana",
    "extensions": ["sldm"]
  },
  "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
    "source": "iana",
    "extensions": ["ppsm"]
  },
  "application/vnd.ms-powerpoint.template.macroenabled.12": {
    "source": "iana",
    "extensions": ["potm"]
  },
  "application/vnd.ms-printdevicecapabilities+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ms-printing.printticket+xml": {
    "source": "apache",
    "compressible": true
  },
  "application/vnd.ms-printschematicket+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.ms-project": {
    "source": "iana",
    "extensions": ["mpp","mpt"]
  },
  "application/vnd.ms-tnef": {
    "source": "iana"
  },
  "application/vnd.ms-windows.devicepairing": {
    "source": "iana"
  },
  "application/vnd.ms-windows.nwprinting.oob": {
    "source": "iana"
  },
  "application/vnd.ms-windows.printerpairing": {
    "source": "iana"
  },
  "application/vnd.ms-windows.wsd.oob": {
    "source": "iana"
  },
  "application/vnd.ms-wmdrm.lic-chlg-req": {
    "source": "iana"
  },
  "application/vnd.ms-wmdrm.lic-resp": {
    "source": "iana"
  },
  "application/vnd.ms-wmdrm.meter-chlg-req": {
    "source": "iana"
  },
  "application/vnd.ms-wmdrm.meter-resp": {
    "source": "iana"
  },
  "application/vnd.ms-word.document.macroenabled.12": {
    "source": "iana",
    "extensions": ["docm"]
  },
  "application/vnd.ms-word.template.macroenabled.12": {
    "source": "iana",
    "extensions": ["dotm"]
  },
  "application/vnd.ms-works": {
    "source": "iana",
    "extensions": ["wps","wks","wcm","wdb"]
  },
  "application/vnd.ms-wpl": {
    "source": "iana",
    "extensions": ["wpl"]
  },
  "application/vnd.ms-xpsdocument": {
    "source": "iana",
    "compressible": false,
    "extensions": ["xps"]
  },
  "application/vnd.msa-disk-image": {
    "source": "iana"
  },
  "application/vnd.mseq": {
    "source": "iana",
    "extensions": ["mseq"]
  },
  "application/vnd.msign": {
    "source": "iana"
  },
  "application/vnd.multiad.creator": {
    "source": "iana"
  },
  "application/vnd.multiad.creator.cif": {
    "source": "iana"
  },
  "application/vnd.music-niff": {
    "source": "iana"
  },
  "application/vnd.musician": {
    "source": "iana",
    "extensions": ["mus"]
  },
  "application/vnd.muvee.style": {
    "source": "iana",
    "extensions": ["msty"]
  },
  "application/vnd.mynfc": {
    "source": "iana",
    "extensions": ["taglet"]
  },
  "application/vnd.ncd.control": {
    "source": "iana"
  },
  "application/vnd.ncd.reference": {
    "source": "iana"
  },
  "application/vnd.nearst.inv+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.nebumind.line": {
    "source": "iana"
  },
  "application/vnd.nervana": {
    "source": "iana"
  },
  "application/vnd.netfpx": {
    "source": "iana"
  },
  "application/vnd.neurolanguage.nlu": {
    "source": "iana",
    "extensions": ["nlu"]
  },
  "application/vnd.nimn": {
    "source": "iana"
  },
  "application/vnd.nintendo.nitro.rom": {
    "source": "iana"
  },
  "application/vnd.nintendo.snes.rom": {
    "source": "iana"
  },
  "application/vnd.nitf": {
    "source": "iana",
    "extensions": ["ntf","nitf"]
  },
  "application/vnd.noblenet-directory": {
    "source": "iana",
    "extensions": ["nnd"]
  },
  "application/vnd.noblenet-sealer": {
    "source": "iana",
    "extensions": ["nns"]
  },
  "application/vnd.noblenet-web": {
    "source": "iana",
    "extensions": ["nnw"]
  },
  "application/vnd.nokia.catalogs": {
    "source": "iana"
  },
  "application/vnd.nokia.conml+wbxml": {
    "source": "iana"
  },
  "application/vnd.nokia.conml+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.nokia.iptv.config+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.nokia.isds-radio-presets": {
    "source": "iana"
  },
  "application/vnd.nokia.landmark+wbxml": {
    "source": "iana"
  },
  "application/vnd.nokia.landmark+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.nokia.landmarkcollection+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.nokia.n-gage.ac+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["ac"]
  },
  "application/vnd.nokia.n-gage.data": {
    "source": "iana",
    "extensions": ["ngdat"]
  },
  "application/vnd.nokia.n-gage.symbian.install": {
    "source": "iana",
    "extensions": ["n-gage"]
  },
  "application/vnd.nokia.ncd": {
    "source": "iana"
  },
  "application/vnd.nokia.pcd+wbxml": {
    "source": "iana"
  },
  "application/vnd.nokia.pcd+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.nokia.radio-preset": {
    "source": "iana",
    "extensions": ["rpst"]
  },
  "application/vnd.nokia.radio-presets": {
    "source": "iana",
    "extensions": ["rpss"]
  },
  "application/vnd.novadigm.edm": {
    "source": "iana",
    "extensions": ["edm"]
  },
  "application/vnd.novadigm.edx": {
    "source": "iana",
    "extensions": ["edx"]
  },
  "application/vnd.novadigm.ext": {
    "source": "iana",
    "extensions": ["ext"]
  },
  "application/vnd.ntt-local.content-share": {
    "source": "iana"
  },
  "application/vnd.ntt-local.file-transfer": {
    "source": "iana"
  },
  "application/vnd.ntt-local.ogw_remote-access": {
    "source": "iana"
  },
  "application/vnd.ntt-local.sip-ta_remote": {
    "source": "iana"
  },
  "application/vnd.ntt-local.sip-ta_tcp_stream": {
    "source": "iana"
  },
  "application/vnd.oasis.opendocument.chart": {
    "source": "iana",
    "extensions": ["odc"]
  },
  "application/vnd.oasis.opendocument.chart-template": {
    "source": "iana",
    "extensions": ["otc"]
  },
  "application/vnd.oasis.opendocument.database": {
    "source": "iana",
    "extensions": ["odb"]
  },
  "application/vnd.oasis.opendocument.formula": {
    "source": "iana",
    "extensions": ["odf"]
  },
  "application/vnd.oasis.opendocument.formula-template": {
    "source": "iana",
    "extensions": ["odft"]
  },
  "application/vnd.oasis.opendocument.graphics": {
    "source": "iana",
    "compressible": false,
    "extensions": ["odg"]
  },
  "application/vnd.oasis.opendocument.graphics-template": {
    "source": "iana",
    "extensions": ["otg"]
  },
  "application/vnd.oasis.opendocument.image": {
    "source": "iana",
    "extensions": ["odi"]
  },
  "application/vnd.oasis.opendocument.image-template": {
    "source": "iana",
    "extensions": ["oti"]
  },
  "application/vnd.oasis.opendocument.presentation": {
    "source": "iana",
    "compressible": false,
    "extensions": ["odp"]
  },
  "application/vnd.oasis.opendocument.presentation-template": {
    "source": "iana",
    "extensions": ["otp"]
  },
  "application/vnd.oasis.opendocument.spreadsheet": {
    "source": "iana",
    "compressible": false,
    "extensions": ["ods"]
  },
  "application/vnd.oasis.opendocument.spreadsheet-template": {
    "source": "iana",
    "extensions": ["ots"]
  },
  "application/vnd.oasis.opendocument.text": {
    "source": "iana",
    "compressible": false,
    "extensions": ["odt"]
  },
  "application/vnd.oasis.opendocument.text-master": {
    "source": "iana",
    "extensions": ["odm"]
  },
  "application/vnd.oasis.opendocument.text-template": {
    "source": "iana",
    "extensions": ["ott"]
  },
  "application/vnd.oasis.opendocument.text-web": {
    "source": "iana",
    "extensions": ["oth"]
  },
  "application/vnd.obn": {
    "source": "iana"
  },
  "application/vnd.ocf+cbor": {
    "source": "iana"
  },
  "application/vnd.oci.image.manifest.v1+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oftn.l10n+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oipf.contentaccessdownload+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oipf.contentaccessstreaming+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oipf.cspg-hexbinary": {
    "source": "iana"
  },
  "application/vnd.oipf.dae.svg+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oipf.dae.xhtml+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oipf.mippvcontrolmessage+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oipf.pae.gem": {
    "source": "iana"
  },
  "application/vnd.oipf.spdiscovery+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oipf.spdlist+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oipf.ueprofile+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oipf.userprofile+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.olpc-sugar": {
    "source": "iana",
    "extensions": ["xo"]
  },
  "application/vnd.oma-scws-config": {
    "source": "iana"
  },
  "application/vnd.oma-scws-http-request": {
    "source": "iana"
  },
  "application/vnd.oma-scws-http-response": {
    "source": "iana"
  },
  "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.bcast.drm-trigger+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.bcast.imd+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.bcast.ltkm": {
    "source": "iana"
  },
  "application/vnd.oma.bcast.notification+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.bcast.provisioningtrigger": {
    "source": "iana"
  },
  "application/vnd.oma.bcast.sgboot": {
    "source": "iana"
  },
  "application/vnd.oma.bcast.sgdd+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.bcast.sgdu": {
    "source": "iana"
  },
  "application/vnd.oma.bcast.simple-symbol-container": {
    "source": "iana"
  },
  "application/vnd.oma.bcast.smartcard-trigger+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.bcast.sprov+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.bcast.stkm": {
    "source": "iana"
  },
  "application/vnd.oma.cab-address-book+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.cab-feature-handler+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.cab-pcc+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.cab-subs-invite+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.cab-user-prefs+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.dcd": {
    "source": "iana"
  },
  "application/vnd.oma.dcdc": {
    "source": "iana"
  },
  "application/vnd.oma.dd2+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["dd2"]
  },
  "application/vnd.oma.drm.risd+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.group-usage-list+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.lwm2m+cbor": {
    "source": "iana"
  },
  "application/vnd.oma.lwm2m+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.lwm2m+tlv": {
    "source": "iana"
  },
  "application/vnd.oma.pal+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.poc.detailed-progress-report+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.poc.final-report+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.poc.groups+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.poc.invocation-descriptor+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.poc.optimized-progress-report+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.push": {
    "source": "iana"
  },
  "application/vnd.oma.scidm.messages+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oma.xcap-directory+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.omads-email+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/vnd.omads-file+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/vnd.omads-folder+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/vnd.omaloc-supl-init": {
    "source": "iana"
  },
  "application/vnd.onepager": {
    "source": "iana"
  },
  "application/vnd.onepagertamp": {
    "source": "iana"
  },
  "application/vnd.onepagertamx": {
    "source": "iana"
  },
  "application/vnd.onepagertat": {
    "source": "iana"
  },
  "application/vnd.onepagertatp": {
    "source": "iana"
  },
  "application/vnd.onepagertatx": {
    "source": "iana"
  },
  "application/vnd.openblox.game+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["obgx"]
  },
  "application/vnd.openblox.game-binary": {
    "source": "iana"
  },
  "application/vnd.openeye.oeb": {
    "source": "iana"
  },
  "application/vnd.openofficeorg.extension": {
    "source": "apache",
    "extensions": ["oxt"]
  },
  "application/vnd.openstreetmap.data+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["osm"]
  },
  "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.drawing+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
    "source": "iana",
    "compressible": false,
    "extensions": ["pptx"]
  },
  "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.slide": {
    "source": "iana",
    "extensions": ["sldx"]
  },
  "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
    "source": "iana",
    "extensions": ["ppsx"]
  },
  "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.template": {
    "source": "iana",
    "extensions": ["potx"]
  },
  "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
    "source": "iana",
    "compressible": false,
    "extensions": ["xlsx"]
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
    "source": "iana",
    "extensions": ["xltx"]
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.theme+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.vmldrawing": {
    "source": "iana"
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
    "source": "iana",
    "compressible": false,
    "extensions": ["docx"]
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
    "source": "iana",
    "extensions": ["dotx"]
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-package.core-properties+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.openxmlformats-package.relationships+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oracle.resource+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.orange.indata": {
    "source": "iana"
  },
  "application/vnd.osa.netdeploy": {
    "source": "iana"
  },
  "application/vnd.osgeo.mapguide.package": {
    "source": "iana",
    "extensions": ["mgp"]
  },
  "application/vnd.osgi.bundle": {
    "source": "iana"
  },
  "application/vnd.osgi.dp": {
    "source": "iana",
    "extensions": ["dp"]
  },
  "application/vnd.osgi.subsystem": {
    "source": "iana",
    "extensions": ["esa"]
  },
  "application/vnd.otps.ct-kip+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.oxli.countgraph": {
    "source": "iana"
  },
  "application/vnd.pagerduty+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.palm": {
    "source": "iana",
    "extensions": ["pdb","pqa","oprc"]
  },
  "application/vnd.panoply": {
    "source": "iana"
  },
  "application/vnd.paos.xml": {
    "source": "iana"
  },
  "application/vnd.patentdive": {
    "source": "iana"
  },
  "application/vnd.patientecommsdoc": {
    "source": "iana"
  },
  "application/vnd.pawaafile": {
    "source": "iana",
    "extensions": ["paw"]
  },
  "application/vnd.pcos": {
    "source": "iana"
  },
  "application/vnd.pg.format": {
    "source": "iana",
    "extensions": ["str"]
  },
  "application/vnd.pg.osasli": {
    "source": "iana",
    "extensions": ["ei6"]
  },
  "application/vnd.piaccess.application-licence": {
    "source": "iana"
  },
  "application/vnd.picsel": {
    "source": "iana",
    "extensions": ["efif"]
  },
  "application/vnd.pmi.widget": {
    "source": "iana",
    "extensions": ["wg"]
  },
  "application/vnd.poc.group-advertisement+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.pocketlearn": {
    "source": "iana",
    "extensions": ["plf"]
  },
  "application/vnd.powerbuilder6": {
    "source": "iana",
    "extensions": ["pbd"]
  },
  "application/vnd.powerbuilder6-s": {
    "source": "iana"
  },
  "application/vnd.powerbuilder7": {
    "source": "iana"
  },
  "application/vnd.powerbuilder7-s": {
    "source": "iana"
  },
  "application/vnd.powerbuilder75": {
    "source": "iana"
  },
  "application/vnd.powerbuilder75-s": {
    "source": "iana"
  },
  "application/vnd.preminet": {
    "source": "iana"
  },
  "application/vnd.previewsystems.box": {
    "source": "iana",
    "extensions": ["box"]
  },
  "application/vnd.proteus.magazine": {
    "source": "iana",
    "extensions": ["mgz"]
  },
  "application/vnd.psfs": {
    "source": "iana"
  },
  "application/vnd.publishare-delta-tree": {
    "source": "iana",
    "extensions": ["qps"]
  },
  "application/vnd.pvi.ptid1": {
    "source": "iana",
    "extensions": ["ptid"]
  },
  "application/vnd.pwg-multiplexed": {
    "source": "iana"
  },
  "application/vnd.pwg-xhtml-print+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.qualcomm.brew-app-res": {
    "source": "iana"
  },
  "application/vnd.quarantainenet": {
    "source": "iana"
  },
  "application/vnd.quark.quarkxpress": {
    "source": "iana",
    "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"]
  },
  "application/vnd.quobject-quoxdocument": {
    "source": "iana"
  },
  "application/vnd.radisys.moml+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-audit+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-audit-conf+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-audit-conn+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-audit-dialog+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-audit-stream+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-conf+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-dialog+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-dialog-base+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-dialog-fax-detect+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-dialog-group+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-dialog-speech+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.radisys.msml-dialog-transform+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.rainstor.data": {
    "source": "iana"
  },
  "application/vnd.rapid": {
    "source": "iana"
  },
  "application/vnd.rar": {
    "source": "iana",
    "extensions": ["rar"]
  },
  "application/vnd.realvnc.bed": {
    "source": "iana",
    "extensions": ["bed"]
  },
  "application/vnd.recordare.musicxml": {
    "source": "iana",
    "extensions": ["mxl"]
  },
  "application/vnd.recordare.musicxml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["musicxml"]
  },
  "application/vnd.renlearn.rlprint": {
    "source": "iana"
  },
  "application/vnd.restful+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.rig.cryptonote": {
    "source": "iana",
    "extensions": ["cryptonote"]
  },
  "application/vnd.rim.cod": {
    "source": "apache",
    "extensions": ["cod"]
  },
  "application/vnd.rn-realmedia": {
    "source": "apache",
    "extensions": ["rm"]
  },
  "application/vnd.rn-realmedia-vbr": {
    "source": "apache",
    "extensions": ["rmvb"]
  },
  "application/vnd.route66.link66+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["link66"]
  },
  "application/vnd.rs-274x": {
    "source": "iana"
  },
  "application/vnd.ruckus.download": {
    "source": "iana"
  },
  "application/vnd.s3sms": {
    "source": "iana"
  },
  "application/vnd.sailingtracker.track": {
    "source": "iana",
    "extensions": ["st"]
  },
  "application/vnd.sar": {
    "source": "iana"
  },
  "application/vnd.sbm.cid": {
    "source": "iana"
  },
  "application/vnd.sbm.mid2": {
    "source": "iana"
  },
  "application/vnd.scribus": {
    "source": "iana"
  },
  "application/vnd.sealed.3df": {
    "source": "iana"
  },
  "application/vnd.sealed.csf": {
    "source": "iana"
  },
  "application/vnd.sealed.doc": {
    "source": "iana"
  },
  "application/vnd.sealed.eml": {
    "source": "iana"
  },
  "application/vnd.sealed.mht": {
    "source": "iana"
  },
  "application/vnd.sealed.net": {
    "source": "iana"
  },
  "application/vnd.sealed.ppt": {
    "source": "iana"
  },
  "application/vnd.sealed.tiff": {
    "source": "iana"
  },
  "application/vnd.sealed.xls": {
    "source": "iana"
  },
  "application/vnd.sealedmedia.softseal.html": {
    "source": "iana"
  },
  "application/vnd.sealedmedia.softseal.pdf": {
    "source": "iana"
  },
  "application/vnd.seemail": {
    "source": "iana",
    "extensions": ["see"]
  },
  "application/vnd.seis+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.sema": {
    "source": "iana",
    "extensions": ["sema"]
  },
  "application/vnd.semd": {
    "source": "iana",
    "extensions": ["semd"]
  },
  "application/vnd.semf": {
    "source": "iana",
    "extensions": ["semf"]
  },
  "application/vnd.shade-save-file": {
    "source": "iana"
  },
  "application/vnd.shana.informed.formdata": {
    "source": "iana",
    "extensions": ["ifm"]
  },
  "application/vnd.shana.informed.formtemplate": {
    "source": "iana",
    "extensions": ["itp"]
  },
  "application/vnd.shana.informed.interchange": {
    "source": "iana",
    "extensions": ["iif"]
  },
  "application/vnd.shana.informed.package": {
    "source": "iana",
    "extensions": ["ipk"]
  },
  "application/vnd.shootproof+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.shopkick+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.shp": {
    "source": "iana"
  },
  "application/vnd.shx": {
    "source": "iana"
  },
  "application/vnd.sigrok.session": {
    "source": "iana"
  },
  "application/vnd.simtech-mindmapper": {
    "source": "iana",
    "extensions": ["twd","twds"]
  },
  "application/vnd.siren+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.smaf": {
    "source": "iana",
    "extensions": ["mmf"]
  },
  "application/vnd.smart.notebook": {
    "source": "iana"
  },
  "application/vnd.smart.teacher": {
    "source": "iana",
    "extensions": ["teacher"]
  },
  "application/vnd.snesdev-page-table": {
    "source": "iana"
  },
  "application/vnd.software602.filler.form+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["fo"]
  },
  "application/vnd.software602.filler.form-xml-zip": {
    "source": "iana"
  },
  "application/vnd.solent.sdkm+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["sdkm","sdkd"]
  },
  "application/vnd.spotfire.dxp": {
    "source": "iana",
    "extensions": ["dxp"]
  },
  "application/vnd.spotfire.sfs": {
    "source": "iana",
    "extensions": ["sfs"]
  },
  "application/vnd.sqlite3": {
    "source": "iana"
  },
  "application/vnd.sss-cod": {
    "source": "iana"
  },
  "application/vnd.sss-dtf": {
    "source": "iana"
  },
  "application/vnd.sss-ntf": {
    "source": "iana"
  },
  "application/vnd.stardivision.calc": {
    "source": "apache",
    "extensions": ["sdc"]
  },
  "application/vnd.stardivision.draw": {
    "source": "apache",
    "extensions": ["sda"]
  },
  "application/vnd.stardivision.impress": {
    "source": "apache",
    "extensions": ["sdd"]
  },
  "application/vnd.stardivision.math": {
    "source": "apache",
    "extensions": ["smf"]
  },
  "application/vnd.stardivision.writer": {
    "source": "apache",
    "extensions": ["sdw","vor"]
  },
  "application/vnd.stardivision.writer-global": {
    "source": "apache",
    "extensions": ["sgl"]
  },
  "application/vnd.stepmania.package": {
    "source": "iana",
    "extensions": ["smzip"]
  },
  "application/vnd.stepmania.stepchart": {
    "source": "iana",
    "extensions": ["sm"]
  },
  "application/vnd.street-stream": {
    "source": "iana"
  },
  "application/vnd.sun.wadl+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["wadl"]
  },
  "application/vnd.sun.xml.calc": {
    "source": "apache",
    "extensions": ["sxc"]
  },
  "application/vnd.sun.xml.calc.template": {
    "source": "apache",
    "extensions": ["stc"]
  },
  "application/vnd.sun.xml.draw": {
    "source": "apache",
    "extensions": ["sxd"]
  },
  "application/vnd.sun.xml.draw.template": {
    "source": "apache",
    "extensions": ["std"]
  },
  "application/vnd.sun.xml.impress": {
    "source": "apache",
    "extensions": ["sxi"]
  },
  "application/vnd.sun.xml.impress.template": {
    "source": "apache",
    "extensions": ["sti"]
  },
  "application/vnd.sun.xml.math": {
    "source": "apache",
    "extensions": ["sxm"]
  },
  "application/vnd.sun.xml.writer": {
    "source": "apache",
    "extensions": ["sxw"]
  },
  "application/vnd.sun.xml.writer.global": {
    "source": "apache",
    "extensions": ["sxg"]
  },
  "application/vnd.sun.xml.writer.template": {
    "source": "apache",
    "extensions": ["stw"]
  },
  "application/vnd.sus-calendar": {
    "source": "iana",
    "extensions": ["sus","susp"]
  },
  "application/vnd.svd": {
    "source": "iana",
    "extensions": ["svd"]
  },
  "application/vnd.swiftview-ics": {
    "source": "iana"
  },
  "application/vnd.sycle+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.symbian.install": {
    "source": "apache",
    "extensions": ["sis","sisx"]
  },
  "application/vnd.syncml+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true,
    "extensions": ["xsm"]
  },
  "application/vnd.syncml.dm+wbxml": {
    "source": "iana",
    "charset": "UTF-8",
    "extensions": ["bdm"]
  },
  "application/vnd.syncml.dm+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true,
    "extensions": ["xdm"]
  },
  "application/vnd.syncml.dm.notification": {
    "source": "iana"
  },
  "application/vnd.syncml.dmddf+wbxml": {
    "source": "iana"
  },
  "application/vnd.syncml.dmddf+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true,
    "extensions": ["ddf"]
  },
  "application/vnd.syncml.dmtnds+wbxml": {
    "source": "iana"
  },
  "application/vnd.syncml.dmtnds+xml": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true
  },
  "application/vnd.syncml.ds.notification": {
    "source": "iana"
  },
  "application/vnd.tableschema+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.tao.intent-module-archive": {
    "source": "iana",
    "extensions": ["tao"]
  },
  "application/vnd.tcpdump.pcap": {
    "source": "iana",
    "extensions": ["pcap","cap","dmp"]
  },
  "application/vnd.think-cell.ppttc+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.tmd.mediaflex.api+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.tml": {
    "source": "iana"
  },
  "application/vnd.tmobile-livetv": {
    "source": "iana",
    "extensions": ["tmo"]
  },
  "application/vnd.tri.onesource": {
    "source": "iana"
  },
  "application/vnd.trid.tpt": {
    "source": "iana",
    "extensions": ["tpt"]
  },
  "application/vnd.triscape.mxs": {
    "source": "iana",
    "extensions": ["mxs"]
  },
  "application/vnd.trueapp": {
    "source": "iana",
    "extensions": ["tra"]
  },
  "application/vnd.truedoc": {
    "source": "iana"
  },
  "application/vnd.ubisoft.webplayer": {
    "source": "iana"
  },
  "application/vnd.ufdl": {
    "source": "iana",
    "extensions": ["ufd","ufdl"]
  },
  "application/vnd.uiq.theme": {
    "source": "iana",
    "extensions": ["utz"]
  },
  "application/vnd.umajin": {
    "source": "iana",
    "extensions": ["umj"]
  },
  "application/vnd.unity": {
    "source": "iana",
    "extensions": ["unityweb"]
  },
  "application/vnd.uoml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["uoml"]
  },
  "application/vnd.uplanet.alert": {
    "source": "iana"
  },
  "application/vnd.uplanet.alert-wbxml": {
    "source": "iana"
  },
  "application/vnd.uplanet.bearer-choice": {
    "source": "iana"
  },
  "application/vnd.uplanet.bearer-choice-wbxml": {
    "source": "iana"
  },
  "application/vnd.uplanet.cacheop": {
    "source": "iana"
  },
  "application/vnd.uplanet.cacheop-wbxml": {
    "source": "iana"
  },
  "application/vnd.uplanet.channel": {
    "source": "iana"
  },
  "application/vnd.uplanet.channel-wbxml": {
    "source": "iana"
  },
  "application/vnd.uplanet.list": {
    "source": "iana"
  },
  "application/vnd.uplanet.list-wbxml": {
    "source": "iana"
  },
  "application/vnd.uplanet.listcmd": {
    "source": "iana"
  },
  "application/vnd.uplanet.listcmd-wbxml": {
    "source": "iana"
  },
  "application/vnd.uplanet.signal": {
    "source": "iana"
  },
  "application/vnd.uri-map": {
    "source": "iana"
  },
  "application/vnd.valve.source.material": {
    "source": "iana"
  },
  "application/vnd.vcx": {
    "source": "iana",
    "extensions": ["vcx"]
  },
  "application/vnd.vd-study": {
    "source": "iana"
  },
  "application/vnd.vectorworks": {
    "source": "iana"
  },
  "application/vnd.vel+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.verimatrix.vcas": {
    "source": "iana"
  },
  "application/vnd.veryant.thin": {
    "source": "iana"
  },
  "application/vnd.ves.encrypted": {
    "source": "iana"
  },
  "application/vnd.vidsoft.vidconference": {
    "source": "iana"
  },
  "application/vnd.visio": {
    "source": "iana",
    "extensions": ["vsd","vst","vss","vsw"]
  },
  "application/vnd.visionary": {
    "source": "iana",
    "extensions": ["vis"]
  },
  "application/vnd.vividence.scriptfile": {
    "source": "iana"
  },
  "application/vnd.vsf": {
    "source": "iana",
    "extensions": ["vsf"]
  },
  "application/vnd.wap.sic": {
    "source": "iana"
  },
  "application/vnd.wap.slc": {
    "source": "iana"
  },
  "application/vnd.wap.wbxml": {
    "source": "iana",
    "charset": "UTF-8",
    "extensions": ["wbxml"]
  },
  "application/vnd.wap.wmlc": {
    "source": "iana",
    "extensions": ["wmlc"]
  },
  "application/vnd.wap.wmlscriptc": {
    "source": "iana",
    "extensions": ["wmlsc"]
  },
  "application/vnd.webturbo": {
    "source": "iana",
    "extensions": ["wtb"]
  },
  "application/vnd.wfa.dpp": {
    "source": "iana"
  },
  "application/vnd.wfa.p2p": {
    "source": "iana"
  },
  "application/vnd.wfa.wsc": {
    "source": "iana"
  },
  "application/vnd.windows.devicepairing": {
    "source": "iana"
  },
  "application/vnd.wmc": {
    "source": "iana"
  },
  "application/vnd.wmf.bootstrap": {
    "source": "iana"
  },
  "application/vnd.wolfram.mathematica": {
    "source": "iana"
  },
  "application/vnd.wolfram.mathematica.package": {
    "source": "iana"
  },
  "application/vnd.wolfram.player": {
    "source": "iana",
    "extensions": ["nbp"]
  },
  "application/vnd.wordperfect": {
    "source": "iana",
    "extensions": ["wpd"]
  },
  "application/vnd.wqd": {
    "source": "iana",
    "extensions": ["wqd"]
  },
  "application/vnd.wrq-hp3000-labelled": {
    "source": "iana"
  },
  "application/vnd.wt.stf": {
    "source": "iana",
    "extensions": ["stf"]
  },
  "application/vnd.wv.csp+wbxml": {
    "source": "iana"
  },
  "application/vnd.wv.csp+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.wv.ssp+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.xacml+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.xara": {
    "source": "iana",
    "extensions": ["xar"]
  },
  "application/vnd.xfdl": {
    "source": "iana",
    "extensions": ["xfdl"]
  },
  "application/vnd.xfdl.webform": {
    "source": "iana"
  },
  "application/vnd.xmi+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/vnd.xmpie.cpkg": {
    "source": "iana"
  },
  "application/vnd.xmpie.dpkg": {
    "source": "iana"
  },
  "application/vnd.xmpie.plan": {
    "source": "iana"
  },
  "application/vnd.xmpie.ppkg": {
    "source": "iana"
  },
  "application/vnd.xmpie.xlim": {
    "source": "iana"
  },
  "application/vnd.yamaha.hv-dic": {
    "source": "iana",
    "extensions": ["hvd"]
  },
  "application/vnd.yamaha.hv-script": {
    "source": "iana",
    "extensions": ["hvs"]
  },
  "application/vnd.yamaha.hv-voice": {
    "source": "iana",
    "extensions": ["hvp"]
  },
  "application/vnd.yamaha.openscoreformat": {
    "source": "iana",
    "extensions": ["osf"]
  },
  "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["osfpvg"]
  },
  "application/vnd.yamaha.remote-setup": {
    "source": "iana"
  },
  "application/vnd.yamaha.smaf-audio": {
    "source": "iana",
    "extensions": ["saf"]
  },
  "application/vnd.yamaha.smaf-phrase": {
    "source": "iana",
    "extensions": ["spf"]
  },
  "application/vnd.yamaha.through-ngn": {
    "source": "iana"
  },
  "application/vnd.yamaha.tunnel-udpencap": {
    "source": "iana"
  },
  "application/vnd.yaoweme": {
    "source": "iana"
  },
  "application/vnd.yellowriver-custom-menu": {
    "source": "iana",
    "extensions": ["cmp"]
  },
  "application/vnd.youtube.yt": {
    "source": "iana"
  },
  "application/vnd.zul": {
    "source": "iana",
    "extensions": ["zir","zirz"]
  },
  "application/vnd.zzazz.deck+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["zaz"]
  },
  "application/voicexml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["vxml"]
  },
  "application/voucher-cms+json": {
    "source": "iana",
    "compressible": true
  },
  "application/vq-rtcpxr": {
    "source": "iana"
  },
  "application/wasm": {
    "source": "iana",
    "compressible": true,
    "extensions": ["wasm"]
  },
  "application/watcherinfo+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/webpush-options+json": {
    "source": "iana",
    "compressible": true
  },
  "application/whoispp-query": {
    "source": "iana"
  },
  "application/whoispp-response": {
    "source": "iana"
  },
  "application/widget": {
    "source": "iana",
    "extensions": ["wgt"]
  },
  "application/winhlp": {
    "source": "apache",
    "extensions": ["hlp"]
  },
  "application/wita": {
    "source": "iana"
  },
  "application/wordperfect5.1": {
    "source": "iana"
  },
  "application/wsdl+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["wsdl"]
  },
  "application/wspolicy+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["wspolicy"]
  },
  "application/x-7z-compressed": {
    "source": "apache",
    "compressible": false,
    "extensions": ["7z"]
  },
  "application/x-abiword": {
    "source": "apache",
    "extensions": ["abw"]
  },
  "application/x-ace-compressed": {
    "source": "apache",
    "extensions": ["ace"]
  },
  "application/x-amf": {
    "source": "apache"
  },
  "application/x-apple-diskimage": {
    "source": "apache",
    "extensions": ["dmg"]
  },
  "application/x-arj": {
    "compressible": false,
    "extensions": ["arj"]
  },
  "application/x-authorware-bin": {
    "source": "apache",
    "extensions": ["aab","x32","u32","vox"]
  },
  "application/x-authorware-map": {
    "source": "apache",
    "extensions": ["aam"]
  },
  "application/x-authorware-seg": {
    "source": "apache",
    "extensions": ["aas"]
  },
  "application/x-bcpio": {
    "source": "apache",
    "extensions": ["bcpio"]
  },
  "application/x-bdoc": {
    "compressible": false,
    "extensions": ["bdoc"]
  },
  "application/x-bittorrent": {
    "source": "apache",
    "extensions": ["torrent"]
  },
  "application/x-blorb": {
    "source": "apache",
    "extensions": ["blb","blorb"]
  },
  "application/x-bzip": {
    "source": "apache",
    "compressible": false,
    "extensions": ["bz"]
  },
  "application/x-bzip2": {
    "source": "apache",
    "compressible": false,
    "extensions": ["bz2","boz"]
  },
  "application/x-cbr": {
    "source": "apache",
    "extensions": ["cbr","cba","cbt","cbz","cb7"]
  },
  "application/x-cdlink": {
    "source": "apache",
    "extensions": ["vcd"]
  },
  "application/x-cfs-compressed": {
    "source": "apache",
    "extensions": ["cfs"]
  },
  "application/x-chat": {
    "source": "apache",
    "extensions": ["chat"]
  },
  "application/x-chess-pgn": {
    "source": "apache",
    "extensions": ["pgn"]
  },
  "application/x-chrome-extension": {
    "extensions": ["crx"]
  },
  "application/x-cocoa": {
    "source": "nginx",
    "extensions": ["cco"]
  },
  "application/x-compress": {
    "source": "apache"
  },
  "application/x-conference": {
    "source": "apache",
    "extensions": ["nsc"]
  },
  "application/x-cpio": {
    "source": "apache",
    "extensions": ["cpio"]
  },
  "application/x-csh": {
    "source": "apache",
    "extensions": ["csh"]
  },
  "application/x-deb": {
    "compressible": false
  },
  "application/x-debian-package": {
    "source": "apache",
    "extensions": ["deb","udeb"]
  },
  "application/x-dgc-compressed": {
    "source": "apache",
    "extensions": ["dgc"]
  },
  "application/x-director": {
    "source": "apache",
    "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]
  },
  "application/x-doom": {
    "source": "apache",
    "extensions": ["wad"]
  },
  "application/x-dtbncx+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["ncx"]
  },
  "application/x-dtbook+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["dtb"]
  },
  "application/x-dtbresource+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["res"]
  },
  "application/x-dvi": {
    "source": "apache",
    "compressible": false,
    "extensions": ["dvi"]
  },
  "application/x-envoy": {
    "source": "apache",
    "extensions": ["evy"]
  },
  "application/x-eva": {
    "source": "apache",
    "extensions": ["eva"]
  },
  "application/x-font-bdf": {
    "source": "apache",
    "extensions": ["bdf"]
  },
  "application/x-font-dos": {
    "source": "apache"
  },
  "application/x-font-framemaker": {
    "source": "apache"
  },
  "application/x-font-ghostscript": {
    "source": "apache",
    "extensions": ["gsf"]
  },
  "application/x-font-libgrx": {
    "source": "apache"
  },
  "application/x-font-linux-psf": {
    "source": "apache",
    "extensions": ["psf"]
  },
  "application/x-font-pcf": {
    "source": "apache",
    "extensions": ["pcf"]
  },
  "application/x-font-snf": {
    "source": "apache",
    "extensions": ["snf"]
  },
  "application/x-font-speedo": {
    "source": "apache"
  },
  "application/x-font-sunos-news": {
    "source": "apache"
  },
  "application/x-font-type1": {
    "source": "apache",
    "extensions": ["pfa","pfb","pfm","afm"]
  },
  "application/x-font-vfont": {
    "source": "apache"
  },
  "application/x-freearc": {
    "source": "apache",
    "extensions": ["arc"]
  },
  "application/x-futuresplash": {
    "source": "apache",
    "extensions": ["spl"]
  },
  "application/x-gca-compressed": {
    "source": "apache",
    "extensions": ["gca"]
  },
  "application/x-glulx": {
    "source": "apache",
    "extensions": ["ulx"]
  },
  "application/x-gnumeric": {
    "source": "apache",
    "extensions": ["gnumeric"]
  },
  "application/x-gramps-xml": {
    "source": "apache",
    "extensions": ["gramps"]
  },
  "application/x-gtar": {
    "source": "apache",
    "extensions": ["gtar"]
  },
  "application/x-gzip": {
    "source": "apache"
  },
  "application/x-hdf": {
    "source": "apache",
    "extensions": ["hdf"]
  },
  "application/x-httpd-php": {
    "compressible": true,
    "extensions": ["php"]
  },
  "application/x-install-instructions": {
    "source": "apache",
    "extensions": ["install"]
  },
  "application/x-iso9660-image": {
    "source": "apache",
    "extensions": ["iso"]
  },
  "application/x-java-archive-diff": {
    "source": "nginx",
    "extensions": ["jardiff"]
  },
  "application/x-java-jnlp-file": {
    "source": "apache",
    "compressible": false,
    "extensions": ["jnlp"]
  },
  "application/x-javascript": {
    "compressible": true
  },
  "application/x-keepass2": {
    "extensions": ["kdbx"]
  },
  "application/x-latex": {
    "source": "apache",
    "compressible": false,
    "extensions": ["latex"]
  },
  "application/x-lua-bytecode": {
    "extensions": ["luac"]
  },
  "application/x-lzh-compressed": {
    "source": "apache",
    "extensions": ["lzh","lha"]
  },
  "application/x-makeself": {
    "source": "nginx",
    "extensions": ["run"]
  },
  "application/x-mie": {
    "source": "apache",
    "extensions": ["mie"]
  },
  "application/x-mobipocket-ebook": {
    "source": "apache",
    "extensions": ["prc","mobi"]
  },
  "application/x-mpegurl": {
    "compressible": false
  },
  "application/x-ms-application": {
    "source": "apache",
    "extensions": ["application"]
  },
  "application/x-ms-shortcut": {
    "source": "apache",
    "extensions": ["lnk"]
  },
  "application/x-ms-wmd": {
    "source": "apache",
    "extensions": ["wmd"]
  },
  "application/x-ms-wmz": {
    "source": "apache",
    "extensions": ["wmz"]
  },
  "application/x-ms-xbap": {
    "source": "apache",
    "extensions": ["xbap"]
  },
  "application/x-msaccess": {
    "source": "apache",
    "extensions": ["mdb"]
  },
  "application/x-msbinder": {
    "source": "apache",
    "extensions": ["obd"]
  },
  "application/x-mscardfile": {
    "source": "apache",
    "extensions": ["crd"]
  },
  "application/x-msclip": {
    "source": "apache",
    "extensions": ["clp"]
  },
  "application/x-msdos-program": {
    "extensions": ["exe"]
  },
  "application/x-msdownload": {
    "source": "apache",
    "extensions": ["exe","dll","com","bat","msi"]
  },
  "application/x-msmediaview": {
    "source": "apache",
    "extensions": ["mvb","m13","m14"]
  },
  "application/x-msmetafile": {
    "source": "apache",
    "extensions": ["wmf","wmz","emf","emz"]
  },
  "application/x-msmoney": {
    "source": "apache",
    "extensions": ["mny"]
  },
  "application/x-mspublisher": {
    "source": "apache",
    "extensions": ["pub"]
  },
  "application/x-msschedule": {
    "source": "apache",
    "extensions": ["scd"]
  },
  "application/x-msterminal": {
    "source": "apache",
    "extensions": ["trm"]
  },
  "application/x-mswrite": {
    "source": "apache",
    "extensions": ["wri"]
  },
  "application/x-netcdf": {
    "source": "apache",
    "extensions": ["nc","cdf"]
  },
  "application/x-ns-proxy-autoconfig": {
    "compressible": true,
    "extensions": ["pac"]
  },
  "application/x-nzb": {
    "source": "apache",
    "extensions": ["nzb"]
  },
  "application/x-perl": {
    "source": "nginx",
    "extensions": ["pl","pm"]
  },
  "application/x-pilot": {
    "source": "nginx",
    "extensions": ["prc","pdb"]
  },
  "application/x-pkcs12": {
    "source": "apache",
    "compressible": false,
    "extensions": ["p12","pfx"]
  },
  "application/x-pkcs7-certificates": {
    "source": "apache",
    "extensions": ["p7b","spc"]
  },
  "application/x-pkcs7-certreqresp": {
    "source": "apache",
    "extensions": ["p7r"]
  },
  "application/x-pki-message": {
    "source": "iana"
  },
  "application/x-rar-compressed": {
    "source": "apache",
    "compressible": false,
    "extensions": ["rar"]
  },
  "application/x-redhat-package-manager": {
    "source": "nginx",
    "extensions": ["rpm"]
  },
  "application/x-research-info-systems": {
    "source": "apache",
    "extensions": ["ris"]
  },
  "application/x-sea": {
    "source": "nginx",
    "extensions": ["sea"]
  },
  "application/x-sh": {
    "source": "apache",
    "compressible": true,
    "extensions": ["sh"]
  },
  "application/x-shar": {
    "source": "apache",
    "extensions": ["shar"]
  },
  "application/x-shockwave-flash": {
    "source": "apache",
    "compressible": false,
    "extensions": ["swf"]
  },
  "application/x-silverlight-app": {
    "source": "apache",
    "extensions": ["xap"]
  },
  "application/x-sql": {
    "source": "apache",
    "extensions": ["sql"]
  },
  "application/x-stuffit": {
    "source": "apache",
    "compressible": false,
    "extensions": ["sit"]
  },
  "application/x-stuffitx": {
    "source": "apache",
    "extensions": ["sitx"]
  },
  "application/x-subrip": {
    "source": "apache",
    "extensions": ["srt"]
  },
  "application/x-sv4cpio": {
    "source": "apache",
    "extensions": ["sv4cpio"]
  },
  "application/x-sv4crc": {
    "source": "apache",
    "extensions": ["sv4crc"]
  },
  "application/x-t3vm-image": {
    "source": "apache",
    "extensions": ["t3"]
  },
  "application/x-tads": {
    "source": "apache",
    "extensions": ["gam"]
  },
  "application/x-tar": {
    "source": "apache",
    "compressible": true,
    "extensions": ["tar"]
  },
  "application/x-tcl": {
    "source": "apache",
    "extensions": ["tcl","tk"]
  },
  "application/x-tex": {
    "source": "apache",
    "extensions": ["tex"]
  },
  "application/x-tex-tfm": {
    "source": "apache",
    "extensions": ["tfm"]
  },
  "application/x-texinfo": {
    "source": "apache",
    "extensions": ["texinfo","texi"]
  },
  "application/x-tgif": {
    "source": "apache",
    "extensions": ["obj"]
  },
  "application/x-ustar": {
    "source": "apache",
    "extensions": ["ustar"]
  },
  "application/x-virtualbox-hdd": {
    "compressible": true,
    "extensions": ["hdd"]
  },
  "application/x-virtualbox-ova": {
    "compressible": true,
    "extensions": ["ova"]
  },
  "application/x-virtualbox-ovf": {
    "compressible": true,
    "extensions": ["ovf"]
  },
  "application/x-virtualbox-vbox": {
    "compressible": true,
    "extensions": ["vbox"]
  },
  "application/x-virtualbox-vbox-extpack": {
    "compressible": false,
    "extensions": ["vbox-extpack"]
  },
  "application/x-virtualbox-vdi": {
    "compressible": true,
    "extensions": ["vdi"]
  },
  "application/x-virtualbox-vhd": {
    "compressible": true,
    "extensions": ["vhd"]
  },
  "application/x-virtualbox-vmdk": {
    "compressible": true,
    "extensions": ["vmdk"]
  },
  "application/x-wais-source": {
    "source": "apache",
    "extensions": ["src"]
  },
  "application/x-web-app-manifest+json": {
    "compressible": true,
    "extensions": ["webapp"]
  },
  "application/x-www-form-urlencoded": {
    "source": "iana",
    "compressible": true
  },
  "application/x-x509-ca-cert": {
    "source": "iana",
    "extensions": ["der","crt","pem"]
  },
  "application/x-x509-ca-ra-cert": {
    "source": "iana"
  },
  "application/x-x509-next-ca-cert": {
    "source": "iana"
  },
  "application/x-xfig": {
    "source": "apache",
    "extensions": ["fig"]
  },
  "application/x-xliff+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["xlf"]
  },
  "application/x-xpinstall": {
    "source": "apache",
    "compressible": false,
    "extensions": ["xpi"]
  },
  "application/x-xz": {
    "source": "apache",
    "extensions": ["xz"]
  },
  "application/x-zmachine": {
    "source": "apache",
    "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"]
  },
  "application/x400-bp": {
    "source": "iana"
  },
  "application/xacml+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/xaml+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["xaml"]
  },
  "application/xcap-att+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xav"]
  },
  "application/xcap-caps+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xca"]
  },
  "application/xcap-diff+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xdf"]
  },
  "application/xcap-el+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xel"]
  },
  "application/xcap-error+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/xcap-ns+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xns"]
  },
  "application/xcon-conference-info+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/xcon-conference-info-diff+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/xenc+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xenc"]
  },
  "application/xhtml+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xhtml","xht"]
  },
  "application/xhtml-voice+xml": {
    "source": "apache",
    "compressible": true
  },
  "application/xliff+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xlf"]
  },
  "application/xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xml","xsl","xsd","rng"]
  },
  "application/xml-dtd": {
    "source": "iana",
    "compressible": true,
    "extensions": ["dtd"]
  },
  "application/xml-external-parsed-entity": {
    "source": "iana"
  },
  "application/xml-patch+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/xmpp+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/xop+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xop"]
  },
  "application/xproc+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["xpl"]
  },
  "application/xslt+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xsl","xslt"]
  },
  "application/xspf+xml": {
    "source": "apache",
    "compressible": true,
    "extensions": ["xspf"]
  },
  "application/xv+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["mxml","xhvml","xvml","xvm"]
  },
  "application/yang": {
    "source": "iana",
    "extensions": ["yang"]
  },
  "application/yang-data+json": {
    "source": "iana",
    "compressible": true
  },
  "application/yang-data+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/yang-patch+json": {
    "source": "iana",
    "compressible": true
  },
  "application/yang-patch+xml": {
    "source": "iana",
    "compressible": true
  },
  "application/yin+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["yin"]
  },
  "application/zip": {
    "source": "iana",
    "compressible": false,
    "extensions": ["zip"]
  },
  "application/zlib": {
    "source": "iana"
  },
  "application/zstd": {
    "source": "iana"
  },
  "audio/1d-interleaved-parityfec": {
    "source": "iana"
  },
  "audio/32kadpcm": {
    "source": "iana"
  },
  "audio/3gpp": {
    "source": "iana",
    "compressible": false,
    "extensions": ["3gpp"]
  },
  "audio/3gpp2": {
    "source": "iana"
  },
  "audio/aac": {
    "source": "iana"
  },
  "audio/ac3": {
    "source": "iana"
  },
  "audio/adpcm": {
    "source": "apache",
    "extensions": ["adp"]
  },
  "audio/amr": {
    "source": "iana",
    "extensions": ["amr"]
  },
  "audio/amr-wb": {
    "source": "iana"
  },
  "audio/amr-wb+": {
    "source": "iana"
  },
  "audio/aptx": {
    "source": "iana"
  },
  "audio/asc": {
    "source": "iana"
  },
  "audio/atrac-advanced-lossless": {
    "source": "iana"
  },
  "audio/atrac-x": {
    "source": "iana"
  },
  "audio/atrac3": {
    "source": "iana"
  },
  "audio/basic": {
    "source": "iana",
    "compressible": false,
    "extensions": ["au","snd"]
  },
  "audio/bv16": {
    "source": "iana"
  },
  "audio/bv32": {
    "source": "iana"
  },
  "audio/clearmode": {
    "source": "iana"
  },
  "audio/cn": {
    "source": "iana"
  },
  "audio/dat12": {
    "source": "iana"
  },
  "audio/dls": {
    "source": "iana"
  },
  "audio/dsr-es201108": {
    "source": "iana"
  },
  "audio/dsr-es202050": {
    "source": "iana"
  },
  "audio/dsr-es202211": {
    "source": "iana"
  },
  "audio/dsr-es202212": {
    "source": "iana"
  },
  "audio/dv": {
    "source": "iana"
  },
  "audio/dvi4": {
    "source": "iana"
  },
  "audio/eac3": {
    "source": "iana"
  },
  "audio/encaprtp": {
    "source": "iana"
  },
  "audio/evrc": {
    "source": "iana"
  },
  "audio/evrc-qcp": {
    "source": "iana"
  },
  "audio/evrc0": {
    "source": "iana"
  },
  "audio/evrc1": {
    "source": "iana"
  },
  "audio/evrcb": {
    "source": "iana"
  },
  "audio/evrcb0": {
    "source": "iana"
  },
  "audio/evrcb1": {
    "source": "iana"
  },
  "audio/evrcnw": {
    "source": "iana"
  },
  "audio/evrcnw0": {
    "source": "iana"
  },
  "audio/evrcnw1": {
    "source": "iana"
  },
  "audio/evrcwb": {
    "source": "iana"
  },
  "audio/evrcwb0": {
    "source": "iana"
  },
  "audio/evrcwb1": {
    "source": "iana"
  },
  "audio/evs": {
    "source": "iana"
  },
  "audio/flexfec": {
    "source": "iana"
  },
  "audio/fwdred": {
    "source": "iana"
  },
  "audio/g711-0": {
    "source": "iana"
  },
  "audio/g719": {
    "source": "iana"
  },
  "audio/g722": {
    "source": "iana"
  },
  "audio/g7221": {
    "source": "iana"
  },
  "audio/g723": {
    "source": "iana"
  },
  "audio/g726-16": {
    "source": "iana"
  },
  "audio/g726-24": {
    "source": "iana"
  },
  "audio/g726-32": {
    "source": "iana"
  },
  "audio/g726-40": {
    "source": "iana"
  },
  "audio/g728": {
    "source": "iana"
  },
  "audio/g729": {
    "source": "iana"
  },
  "audio/g7291": {
    "source": "iana"
  },
  "audio/g729d": {
    "source": "iana"
  },
  "audio/g729e": {
    "source": "iana"
  },
  "audio/gsm": {
    "source": "iana"
  },
  "audio/gsm-efr": {
    "source": "iana"
  },
  "audio/gsm-hr-08": {
    "source": "iana"
  },
  "audio/ilbc": {
    "source": "iana"
  },
  "audio/ip-mr_v2.5": {
    "source": "iana"
  },
  "audio/isac": {
    "source": "apache"
  },
  "audio/l16": {
    "source": "iana"
  },
  "audio/l20": {
    "source": "iana"
  },
  "audio/l24": {
    "source": "iana",
    "compressible": false
  },
  "audio/l8": {
    "source": "iana"
  },
  "audio/lpc": {
    "source": "iana"
  },
  "audio/melp": {
    "source": "iana"
  },
  "audio/melp1200": {
    "source": "iana"
  },
  "audio/melp2400": {
    "source": "iana"
  },
  "audio/melp600": {
    "source": "iana"
  },
  "audio/mhas": {
    "source": "iana"
  },
  "audio/midi": {
    "source": "apache",
    "extensions": ["mid","midi","kar","rmi"]
  },
  "audio/mobile-xmf": {
    "source": "iana",
    "extensions": ["mxmf"]
  },
  "audio/mp3": {
    "compressible": false,
    "extensions": ["mp3"]
  },
  "audio/mp4": {
    "source": "iana",
    "compressible": false,
    "extensions": ["m4a","mp4a"]
  },
  "audio/mp4a-latm": {
    "source": "iana"
  },
  "audio/mpa": {
    "source": "iana"
  },
  "audio/mpa-robust": {
    "source": "iana"
  },
  "audio/mpeg": {
    "source": "iana",
    "compressible": false,
    "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"]
  },
  "audio/mpeg4-generic": {
    "source": "iana"
  },
  "audio/musepack": {
    "source": "apache"
  },
  "audio/ogg": {
    "source": "iana",
    "compressible": false,
    "extensions": ["oga","ogg","spx","opus"]
  },
  "audio/opus": {
    "source": "iana"
  },
  "audio/parityfec": {
    "source": "iana"
  },
  "audio/pcma": {
    "source": "iana"
  },
  "audio/pcma-wb": {
    "source": "iana"
  },
  "audio/pcmu": {
    "source": "iana"
  },
  "audio/pcmu-wb": {
    "source": "iana"
  },
  "audio/prs.sid": {
    "source": "iana"
  },
  "audio/qcelp": {
    "source": "iana"
  },
  "audio/raptorfec": {
    "source": "iana"
  },
  "audio/red": {
    "source": "iana"
  },
  "audio/rtp-enc-aescm128": {
    "source": "iana"
  },
  "audio/rtp-midi": {
    "source": "iana"
  },
  "audio/rtploopback": {
    "source": "iana"
  },
  "audio/rtx": {
    "source": "iana"
  },
  "audio/s3m": {
    "source": "apache",
    "extensions": ["s3m"]
  },
  "audio/scip": {
    "source": "iana"
  },
  "audio/silk": {
    "source": "apache",
    "extensions": ["sil"]
  },
  "audio/smv": {
    "source": "iana"
  },
  "audio/smv-qcp": {
    "source": "iana"
  },
  "audio/smv0": {
    "source": "iana"
  },
  "audio/sofa": {
    "source": "iana"
  },
  "audio/sp-midi": {
    "source": "iana"
  },
  "audio/speex": {
    "source": "iana"
  },
  "audio/t140c": {
    "source": "iana"
  },
  "audio/t38": {
    "source": "iana"
  },
  "audio/telephone-event": {
    "source": "iana"
  },
  "audio/tetra_acelp": {
    "source": "iana"
  },
  "audio/tetra_acelp_bb": {
    "source": "iana"
  },
  "audio/tone": {
    "source": "iana"
  },
  "audio/tsvcis": {
    "source": "iana"
  },
  "audio/uemclip": {
    "source": "iana"
  },
  "audio/ulpfec": {
    "source": "iana"
  },
  "audio/usac": {
    "source": "iana"
  },
  "audio/vdvi": {
    "source": "iana"
  },
  "audio/vmr-wb": {
    "source": "iana"
  },
  "audio/vnd.3gpp.iufp": {
    "source": "iana"
  },
  "audio/vnd.4sb": {
    "source": "iana"
  },
  "audio/vnd.audiokoz": {
    "source": "iana"
  },
  "audio/vnd.celp": {
    "source": "iana"
  },
  "audio/vnd.cisco.nse": {
    "source": "iana"
  },
  "audio/vnd.cmles.radio-events": {
    "source": "iana"
  },
  "audio/vnd.cns.anp1": {
    "source": "iana"
  },
  "audio/vnd.cns.inf1": {
    "source": "iana"
  },
  "audio/vnd.dece.audio": {
    "source": "iana",
    "extensions": ["uva","uvva"]
  },
  "audio/vnd.digital-winds": {
    "source": "iana",
    "extensions": ["eol"]
  },
  "audio/vnd.dlna.adts": {
    "source": "iana"
  },
  "audio/vnd.dolby.heaac.1": {
    "source": "iana"
  },
  "audio/vnd.dolby.heaac.2": {
    "source": "iana"
  },
  "audio/vnd.dolby.mlp": {
    "source": "iana"
  },
  "audio/vnd.dolby.mps": {
    "source": "iana"
  },
  "audio/vnd.dolby.pl2": {
    "source": "iana"
  },
  "audio/vnd.dolby.pl2x": {
    "source": "iana"
  },
  "audio/vnd.dolby.pl2z": {
    "source": "iana"
  },
  "audio/vnd.dolby.pulse.1": {
    "source": "iana"
  },
  "audio/vnd.dra": {
    "source": "iana",
    "extensions": ["dra"]
  },
  "audio/vnd.dts": {
    "source": "iana",
    "extensions": ["dts"]
  },
  "audio/vnd.dts.hd": {
    "source": "iana",
    "extensions": ["dtshd"]
  },
  "audio/vnd.dts.uhd": {
    "source": "iana"
  },
  "audio/vnd.dvb.file": {
    "source": "iana"
  },
  "audio/vnd.everad.plj": {
    "source": "iana"
  },
  "audio/vnd.hns.audio": {
    "source": "iana"
  },
  "audio/vnd.lucent.voice": {
    "source": "iana",
    "extensions": ["lvp"]
  },
  "audio/vnd.ms-playready.media.pya": {
    "source": "iana",
    "extensions": ["pya"]
  },
  "audio/vnd.nokia.mobile-xmf": {
    "source": "iana"
  },
  "audio/vnd.nortel.vbk": {
    "source": "iana"
  },
  "audio/vnd.nuera.ecelp4800": {
    "source": "iana",
    "extensions": ["ecelp4800"]
  },
  "audio/vnd.nuera.ecelp7470": {
    "source": "iana",
    "extensions": ["ecelp7470"]
  },
  "audio/vnd.nuera.ecelp9600": {
    "source": "iana",
    "extensions": ["ecelp9600"]
  },
  "audio/vnd.octel.sbc": {
    "source": "iana"
  },
  "audio/vnd.presonus.multitrack": {
    "source": "iana"
  },
  "audio/vnd.qcelp": {
    "source": "iana"
  },
  "audio/vnd.rhetorex.32kadpcm": {
    "source": "iana"
  },
  "audio/vnd.rip": {
    "source": "iana",
    "extensions": ["rip"]
  },
  "audio/vnd.rn-realaudio": {
    "compressible": false
  },
  "audio/vnd.sealedmedia.softseal.mpeg": {
    "source": "iana"
  },
  "audio/vnd.vmx.cvsd": {
    "source": "iana"
  },
  "audio/vnd.wave": {
    "compressible": false
  },
  "audio/vorbis": {
    "source": "iana",
    "compressible": false
  },
  "audio/vorbis-config": {
    "source": "iana"
  },
  "audio/wav": {
    "compressible": false,
    "extensions": ["wav"]
  },
  "audio/wave": {
    "compressible": false,
    "extensions": ["wav"]
  },
  "audio/webm": {
    "source": "apache",
    "compressible": false,
    "extensions": ["weba"]
  },
  "audio/x-aac": {
    "source": "apache",
    "compressible": false,
    "extensions": ["aac"]
  },
  "audio/x-aiff": {
    "source": "apache",
    "extensions": ["aif","aiff","aifc"]
  },
  "audio/x-caf": {
    "source": "apache",
    "compressible": false,
    "extensions": ["caf"]
  },
  "audio/x-flac": {
    "source": "apache",
    "extensions": ["flac"]
  },
  "audio/x-m4a": {
    "source": "nginx",
    "extensions": ["m4a"]
  },
  "audio/x-matroska": {
    "source": "apache",
    "extensions": ["mka"]
  },
  "audio/x-mpegurl": {
    "source": "apache",
    "extensions": ["m3u"]
  },
  "audio/x-ms-wax": {
    "source": "apache",
    "extensions": ["wax"]
  },
  "audio/x-ms-wma": {
    "source": "apache",
    "extensions": ["wma"]
  },
  "audio/x-pn-realaudio": {
    "source": "apache",
    "extensions": ["ram","ra"]
  },
  "audio/x-pn-realaudio-plugin": {
    "source": "apache",
    "extensions": ["rmp"]
  },
  "audio/x-realaudio": {
    "source": "nginx",
    "extensions": ["ra"]
  },
  "audio/x-tta": {
    "source": "apache"
  },
  "audio/x-wav": {
    "source": "apache",
    "extensions": ["wav"]
  },
  "audio/xm": {
    "source": "apache",
    "extensions": ["xm"]
  },
  "chemical/x-cdx": {
    "source": "apache",
    "extensions": ["cdx"]
  },
  "chemical/x-cif": {
    "source": "apache",
    "extensions": ["cif"]
  },
  "chemical/x-cmdf": {
    "source": "apache",
    "extensions": ["cmdf"]
  },
  "chemical/x-cml": {
    "source": "apache",
    "extensions": ["cml"]
  },
  "chemical/x-csml": {
    "source": "apache",
    "extensions": ["csml"]
  },
  "chemical/x-pdb": {
    "source": "apache"
  },
  "chemical/x-xyz": {
    "source": "apache",
    "extensions": ["xyz"]
  },
  "font/collection": {
    "source": "iana",
    "extensions": ["ttc"]
  },
  "font/otf": {
    "source": "iana",
    "compressible": true,
    "extensions": ["otf"]
  },
  "font/sfnt": {
    "source": "iana"
  },
  "font/ttf": {
    "source": "iana",
    "compressible": true,
    "extensions": ["ttf"]
  },
  "font/woff": {
    "source": "iana",
    "extensions": ["woff"]
  },
  "font/woff2": {
    "source": "iana",
    "extensions": ["woff2"]
  },
  "image/aces": {
    "source": "iana",
    "extensions": ["exr"]
  },
  "image/apng": {
    "compressible": false,
    "extensions": ["apng"]
  },
  "image/avci": {
    "source": "iana"
  },
  "image/avcs": {
    "source": "iana"
  },
  "image/avif": {
    "source": "iana",
    "compressible": false,
    "extensions": ["avif"]
  },
  "image/bmp": {
    "source": "iana",
    "compressible": true,
    "extensions": ["bmp"]
  },
  "image/cgm": {
    "source": "iana",
    "extensions": ["cgm"]
  },
  "image/dicom-rle": {
    "source": "iana",
    "extensions": ["drle"]
  },
  "image/emf": {
    "source": "iana",
    "extensions": ["emf"]
  },
  "image/fits": {
    "source": "iana",
    "extensions": ["fits"]
  },
  "image/g3fax": {
    "source": "iana",
    "extensions": ["g3"]
  },
  "image/gif": {
    "source": "iana",
    "compressible": false,
    "extensions": ["gif"]
  },
  "image/heic": {
    "source": "iana",
    "extensions": ["heic"]
  },
  "image/heic-sequence": {
    "source": "iana",
    "extensions": ["heics"]
  },
  "image/heif": {
    "source": "iana",
    "extensions": ["heif"]
  },
  "image/heif-sequence": {
    "source": "iana",
    "extensions": ["heifs"]
  },
  "image/hej2k": {
    "source": "iana",
    "extensions": ["hej2"]
  },
  "image/hsj2": {
    "source": "iana",
    "extensions": ["hsj2"]
  },
  "image/ief": {
    "source": "iana",
    "extensions": ["ief"]
  },
  "image/jls": {
    "source": "iana",
    "extensions": ["jls"]
  },
  "image/jp2": {
    "source": "iana",
    "compressible": false,
    "extensions": ["jp2","jpg2"]
  },
  "image/jpeg": {
    "source": "iana",
    "compressible": false,
    "extensions": ["jpeg","jpg","jpe"]
  },
  "image/jph": {
    "source": "iana",
    "extensions": ["jph"]
  },
  "image/jphc": {
    "source": "iana",
    "extensions": ["jhc"]
  },
  "image/jpm": {
    "source": "iana",
    "compressible": false,
    "extensions": ["jpm"]
  },
  "image/jpx": {
    "source": "iana",
    "compressible": false,
    "extensions": ["jpx","jpf"]
  },
  "image/jxr": {
    "source": "iana",
    "extensions": ["jxr"]
  },
  "image/jxra": {
    "source": "iana",
    "extensions": ["jxra"]
  },
  "image/jxrs": {
    "source": "iana",
    "extensions": ["jxrs"]
  },
  "image/jxs": {
    "source": "iana",
    "extensions": ["jxs"]
  },
  "image/jxsc": {
    "source": "iana",
    "extensions": ["jxsc"]
  },
  "image/jxsi": {
    "source": "iana",
    "extensions": ["jxsi"]
  },
  "image/jxss": {
    "source": "iana",
    "extensions": ["jxss"]
  },
  "image/ktx": {
    "source": "iana",
    "extensions": ["ktx"]
  },
  "image/ktx2": {
    "source": "iana",
    "extensions": ["ktx2"]
  },
  "image/naplps": {
    "source": "iana"
  },
  "image/pjpeg": {
    "compressible": false
  },
  "image/png": {
    "source": "iana",
    "compressible": false,
    "extensions": ["png"]
  },
  "image/prs.btif": {
    "source": "iana",
    "extensions": ["btif"]
  },
  "image/prs.pti": {
    "source": "iana",
    "extensions": ["pti"]
  },
  "image/pwg-raster": {
    "source": "iana"
  },
  "image/sgi": {
    "source": "apache",
    "extensions": ["sgi"]
  },
  "image/svg+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["svg","svgz"]
  },
  "image/t38": {
    "source": "iana",
    "extensions": ["t38"]
  },
  "image/tiff": {
    "source": "iana",
    "compressible": false,
    "extensions": ["tif","tiff"]
  },
  "image/tiff-fx": {
    "source": "iana",
    "extensions": ["tfx"]
  },
  "image/vnd.adobe.photoshop": {
    "source": "iana",
    "compressible": true,
    "extensions": ["psd"]
  },
  "image/vnd.airzip.accelerator.azv": {
    "source": "iana",
    "extensions": ["azv"]
  },
  "image/vnd.cns.inf2": {
    "source": "iana"
  },
  "image/vnd.dece.graphic": {
    "source": "iana",
    "extensions": ["uvi","uvvi","uvg","uvvg"]
  },
  "image/vnd.djvu": {
    "source": "iana",
    "extensions": ["djvu","djv"]
  },
  "image/vnd.dvb.subtitle": {
    "source": "iana",
    "extensions": ["sub"]
  },
  "image/vnd.dwg": {
    "source": "iana",
    "extensions": ["dwg"]
  },
  "image/vnd.dxf": {
    "source": "iana",
    "extensions": ["dxf"]
  },
  "image/vnd.fastbidsheet": {
    "source": "iana",
    "extensions": ["fbs"]
  },
  "image/vnd.fpx": {
    "source": "iana",
    "extensions": ["fpx"]
  },
  "image/vnd.fst": {
    "source": "iana",
    "extensions": ["fst"]
  },
  "image/vnd.fujixerox.edmics-mmr": {
    "source": "iana",
    "extensions": ["mmr"]
  },
  "image/vnd.fujixerox.edmics-rlc": {
    "source": "iana",
    "extensions": ["rlc"]
  },
  "image/vnd.globalgraphics.pgb": {
    "source": "iana"
  },
  "image/vnd.microsoft.icon": {
    "source": "iana",
    "extensions": ["ico"]
  },
  "image/vnd.mix": {
    "source": "iana"
  },
  "image/vnd.mozilla.apng": {
    "source": "iana"
  },
  "image/vnd.ms-dds": {
    "extensions": ["dds"]
  },
  "image/vnd.ms-modi": {
    "source": "iana",
    "extensions": ["mdi"]
  },
  "image/vnd.ms-photo": {
    "source": "apache",
    "extensions": ["wdp"]
  },
  "image/vnd.net-fpx": {
    "source": "iana",
    "extensions": ["npx"]
  },
  "image/vnd.pco.b16": {
    "source": "iana",
    "extensions": ["b16"]
  },
  "image/vnd.radiance": {
    "source": "iana"
  },
  "image/vnd.sealed.png": {
    "source": "iana"
  },
  "image/vnd.sealedmedia.softseal.gif": {
    "source": "iana"
  },
  "image/vnd.sealedmedia.softseal.jpg": {
    "source": "iana"
  },
  "image/vnd.svf": {
    "source": "iana"
  },
  "image/vnd.tencent.tap": {
    "source": "iana",
    "extensions": ["tap"]
  },
  "image/vnd.valve.source.texture": {
    "source": "iana",
    "extensions": ["vtf"]
  },
  "image/vnd.wap.wbmp": {
    "source": "iana",
    "extensions": ["wbmp"]
  },
  "image/vnd.xiff": {
    "source": "iana",
    "extensions": ["xif"]
  },
  "image/vnd.zbrush.pcx": {
    "source": "iana",
    "extensions": ["pcx"]
  },
  "image/webp": {
    "source": "apache",
    "extensions": ["webp"]
  },
  "image/wmf": {
    "source": "iana",
    "extensions": ["wmf"]
  },
  "image/x-3ds": {
    "source": "apache",
    "extensions": ["3ds"]
  },
  "image/x-cmu-raster": {
    "source": "apache",
    "extensions": ["ras"]
  },
  "image/x-cmx": {
    "source": "apache",
    "extensions": ["cmx"]
  },
  "image/x-freehand": {
    "source": "apache",
    "extensions": ["fh","fhc","fh4","fh5","fh7"]
  },
  "image/x-icon": {
    "source": "apache",
    "compressible": true,
    "extensions": ["ico"]
  },
  "image/x-jng": {
    "source": "nginx",
    "extensions": ["jng"]
  },
  "image/x-mrsid-image": {
    "source": "apache",
    "extensions": ["sid"]
  },
  "image/x-ms-bmp": {
    "source": "nginx",
    "compressible": true,
    "extensions": ["bmp"]
  },
  "image/x-pcx": {
    "source": "apache",
    "extensions": ["pcx"]
  },
  "image/x-pict": {
    "source": "apache",
    "extensions": ["pic","pct"]
  },
  "image/x-portable-anymap": {
    "source": "apache",
    "extensions": ["pnm"]
  },
  "image/x-portable-bitmap": {
    "source": "apache",
    "extensions": ["pbm"]
  },
  "image/x-portable-graymap": {
    "source": "apache",
    "extensions": ["pgm"]
  },
  "image/x-portable-pixmap": {
    "source": "apache",
    "extensions": ["ppm"]
  },
  "image/x-rgb": {
    "source": "apache",
    "extensions": ["rgb"]
  },
  "image/x-tga": {
    "source": "apache",
    "extensions": ["tga"]
  },
  "image/x-xbitmap": {
    "source": "apache",
    "extensions": ["xbm"]
  },
  "image/x-xcf": {
    "compressible": false
  },
  "image/x-xpixmap": {
    "source": "apache",
    "extensions": ["xpm"]
  },
  "image/x-xwindowdump": {
    "source": "apache",
    "extensions": ["xwd"]
  },
  "message/cpim": {
    "source": "iana"
  },
  "message/delivery-status": {
    "source": "iana"
  },
  "message/disposition-notification": {
    "source": "iana",
    "extensions": [
      "disposition-notification"
    ]
  },
  "message/external-body": {
    "source": "iana"
  },
  "message/feedback-report": {
    "source": "iana"
  },
  "message/global": {
    "source": "iana",
    "extensions": ["u8msg"]
  },
  "message/global-delivery-status": {
    "source": "iana",
    "extensions": ["u8dsn"]
  },
  "message/global-disposition-notification": {
    "source": "iana",
    "extensions": ["u8mdn"]
  },
  "message/global-headers": {
    "source": "iana",
    "extensions": ["u8hdr"]
  },
  "message/http": {
    "source": "iana",
    "compressible": false
  },
  "message/imdn+xml": {
    "source": "iana",
    "compressible": true
  },
  "message/news": {
    "source": "iana"
  },
  "message/partial": {
    "source": "iana",
    "compressible": false
  },
  "message/rfc822": {
    "source": "iana",
    "compressible": true,
    "extensions": ["eml","mime"]
  },
  "message/s-http": {
    "source": "iana"
  },
  "message/sip": {
    "source": "iana"
  },
  "message/sipfrag": {
    "source": "iana"
  },
  "message/tracking-status": {
    "source": "iana"
  },
  "message/vnd.si.simp": {
    "source": "iana"
  },
  "message/vnd.wfa.wsc": {
    "source": "iana",
    "extensions": ["wsc"]
  },
  "model/3mf": {
    "source": "iana",
    "extensions": ["3mf"]
  },
  "model/e57": {
    "source": "iana"
  },
  "model/gltf+json": {
    "source": "iana",
    "compressible": true,
    "extensions": ["gltf"]
  },
  "model/gltf-binary": {
    "source": "iana",
    "compressible": true,
    "extensions": ["glb"]
  },
  "model/iges": {
    "source": "iana",
    "compressible": false,
    "extensions": ["igs","iges"]
  },
  "model/mesh": {
    "source": "iana",
    "compressible": false,
    "extensions": ["msh","mesh","silo"]
  },
  "model/mtl": {
    "source": "iana",
    "extensions": ["mtl"]
  },
  "model/obj": {
    "source": "iana",
    "extensions": ["obj"]
  },
  "model/stl": {
    "source": "iana",
    "extensions": ["stl"]
  },
  "model/vnd.collada+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["dae"]
  },
  "model/vnd.dwf": {
    "source": "iana",
    "extensions": ["dwf"]
  },
  "model/vnd.flatland.3dml": {
    "source": "iana"
  },
  "model/vnd.gdl": {
    "source": "iana",
    "extensions": ["gdl"]
  },
  "model/vnd.gs-gdl": {
    "source": "apache"
  },
  "model/vnd.gs.gdl": {
    "source": "iana"
  },
  "model/vnd.gtw": {
    "source": "iana",
    "extensions": ["gtw"]
  },
  "model/vnd.moml+xml": {
    "source": "iana",
    "compressible": true
  },
  "model/vnd.mts": {
    "source": "iana",
    "extensions": ["mts"]
  },
  "model/vnd.opengex": {
    "source": "iana",
    "extensions": ["ogex"]
  },
  "model/vnd.parasolid.transmit.binary": {
    "source": "iana",
    "extensions": ["x_b"]
  },
  "model/vnd.parasolid.transmit.text": {
    "source": "iana",
    "extensions": ["x_t"]
  },
  "model/vnd.pytha.pyox": {
    "source": "iana"
  },
  "model/vnd.rosette.annotated-data-model": {
    "source": "iana"
  },
  "model/vnd.sap.vds": {
    "source": "iana",
    "extensions": ["vds"]
  },
  "model/vnd.usdz+zip": {
    "source": "iana",
    "compressible": false,
    "extensions": ["usdz"]
  },
  "model/vnd.valve.source.compiled-map": {
    "source": "iana",
    "extensions": ["bsp"]
  },
  "model/vnd.vtu": {
    "source": "iana",
    "extensions": ["vtu"]
  },
  "model/vrml": {
    "source": "iana",
    "compressible": false,
    "extensions": ["wrl","vrml"]
  },
  "model/x3d+binary": {
    "source": "apache",
    "compressible": false,
    "extensions": ["x3db","x3dbz"]
  },
  "model/x3d+fastinfoset": {
    "source": "iana",
    "extensions": ["x3db"]
  },
  "model/x3d+vrml": {
    "source": "apache",
    "compressible": false,
    "extensions": ["x3dv","x3dvz"]
  },
  "model/x3d+xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["x3d","x3dz"]
  },
  "model/x3d-vrml": {
    "source": "iana",
    "extensions": ["x3dv"]
  },
  "multipart/alternative": {
    "source": "iana",
    "compressible": false
  },
  "multipart/appledouble": {
    "source": "iana"
  },
  "multipart/byteranges": {
    "source": "iana"
  },
  "multipart/digest": {
    "source": "iana"
  },
  "multipart/encrypted": {
    "source": "iana",
    "compressible": false
  },
  "multipart/form-data": {
    "source": "iana",
    "compressible": false
  },
  "multipart/header-set": {
    "source": "iana"
  },
  "multipart/mixed": {
    "source": "iana"
  },
  "multipart/multilingual": {
    "source": "iana"
  },
  "multipart/parallel": {
    "source": "iana"
  },
  "multipart/related": {
    "source": "iana",
    "compressible": false
  },
  "multipart/report": {
    "source": "iana"
  },
  "multipart/signed": {
    "source": "iana",
    "compressible": false
  },
  "multipart/vnd.bint.med-plus": {
    "source": "iana"
  },
  "multipart/voice-message": {
    "source": "iana"
  },
  "multipart/x-mixed-replace": {
    "source": "iana"
  },
  "text/1d-interleaved-parityfec": {
    "source": "iana"
  },
  "text/cache-manifest": {
    "source": "iana",
    "compressible": true,
    "extensions": ["appcache","manifest"]
  },
  "text/calendar": {
    "source": "iana",
    "extensions": ["ics","ifb"]
  },
  "text/calender": {
    "compressible": true
  },
  "text/cmd": {
    "compressible": true
  },
  "text/coffeescript": {
    "extensions": ["coffee","litcoffee"]
  },
  "text/cql": {
    "source": "iana"
  },
  "text/cql-expression": {
    "source": "iana"
  },
  "text/cql-identifier": {
    "source": "iana"
  },
  "text/css": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true,
    "extensions": ["css"]
  },
  "text/csv": {
    "source": "iana",
    "compressible": true,
    "extensions": ["csv"]
  },
  "text/csv-schema": {
    "source": "iana"
  },
  "text/directory": {
    "source": "iana"
  },
  "text/dns": {
    "source": "iana"
  },
  "text/ecmascript": {
    "source": "iana"
  },
  "text/encaprtp": {
    "source": "iana"
  },
  "text/enriched": {
    "source": "iana"
  },
  "text/fhirpath": {
    "source": "iana"
  },
  "text/flexfec": {
    "source": "iana"
  },
  "text/fwdred": {
    "source": "iana"
  },
  "text/gff3": {
    "source": "iana"
  },
  "text/grammar-ref-list": {
    "source": "iana"
  },
  "text/html": {
    "source": "iana",
    "compressible": true,
    "extensions": ["html","htm","shtml"]
  },
  "text/jade": {
    "extensions": ["jade"]
  },
  "text/javascript": {
    "source": "iana",
    "compressible": true
  },
  "text/jcr-cnd": {
    "source": "iana"
  },
  "text/jsx": {
    "compressible": true,
    "extensions": ["jsx"]
  },
  "text/less": {
    "compressible": true,
    "extensions": ["less"]
  },
  "text/markdown": {
    "source": "iana",
    "compressible": true,
    "extensions": ["markdown","md"]
  },
  "text/mathml": {
    "source": "nginx",
    "extensions": ["mml"]
  },
  "text/mdx": {
    "compressible": true,
    "extensions": ["mdx"]
  },
  "text/mizar": {
    "source": "iana"
  },
  "text/n3": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true,
    "extensions": ["n3"]
  },
  "text/parameters": {
    "source": "iana",
    "charset": "UTF-8"
  },
  "text/parityfec": {
    "source": "iana"
  },
  "text/plain": {
    "source": "iana",
    "compressible": true,
    "extensions": ["txt","text","conf","def","list","log","in","ini"]
  },
  "text/provenance-notation": {
    "source": "iana",
    "charset": "UTF-8"
  },
  "text/prs.fallenstein.rst": {
    "source": "iana"
  },
  "text/prs.lines.tag": {
    "source": "iana",
    "extensions": ["dsc"]
  },
  "text/prs.prop.logic": {
    "source": "iana"
  },
  "text/raptorfec": {
    "source": "iana"
  },
  "text/red": {
    "source": "iana"
  },
  "text/rfc822-headers": {
    "source": "iana"
  },
  "text/richtext": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rtx"]
  },
  "text/rtf": {
    "source": "iana",
    "compressible": true,
    "extensions": ["rtf"]
  },
  "text/rtp-enc-aescm128": {
    "source": "iana"
  },
  "text/rtploopback": {
    "source": "iana"
  },
  "text/rtx": {
    "source": "iana"
  },
  "text/sgml": {
    "source": "iana",
    "extensions": ["sgml","sgm"]
  },
  "text/shaclc": {
    "source": "iana"
  },
  "text/shex": {
    "source": "iana",
    "extensions": ["shex"]
  },
  "text/slim": {
    "extensions": ["slim","slm"]
  },
  "text/spdx": {
    "source": "iana",
    "extensions": ["spdx"]
  },
  "text/strings": {
    "source": "iana"
  },
  "text/stylus": {
    "extensions": ["stylus","styl"]
  },
  "text/t140": {
    "source": "iana"
  },
  "text/tab-separated-values": {
    "source": "iana",
    "compressible": true,
    "extensions": ["tsv"]
  },
  "text/troff": {
    "source": "iana",
    "extensions": ["t","tr","roff","man","me","ms"]
  },
  "text/turtle": {
    "source": "iana",
    "charset": "UTF-8",
    "extensions": ["ttl"]
  },
  "text/ulpfec": {
    "source": "iana"
  },
  "text/uri-list": {
    "source": "iana",
    "compressible": true,
    "extensions": ["uri","uris","urls"]
  },
  "text/vcard": {
    "source": "iana",
    "compressible": true,
    "extensions": ["vcard"]
  },
  "text/vnd.a": {
    "source": "iana"
  },
  "text/vnd.abc": {
    "source": "iana"
  },
  "text/vnd.ascii-art": {
    "source": "iana"
  },
  "text/vnd.curl": {
    "source": "iana",
    "extensions": ["curl"]
  },
  "text/vnd.curl.dcurl": {
    "source": "apache",
    "extensions": ["dcurl"]
  },
  "text/vnd.curl.mcurl": {
    "source": "apache",
    "extensions": ["mcurl"]
  },
  "text/vnd.curl.scurl": {
    "source": "apache",
    "extensions": ["scurl"]
  },
  "text/vnd.debian.copyright": {
    "source": "iana",
    "charset": "UTF-8"
  },
  "text/vnd.dmclientscript": {
    "source": "iana"
  },
  "text/vnd.dvb.subtitle": {
    "source": "iana",
    "extensions": ["sub"]
  },
  "text/vnd.esmertec.theme-descriptor": {
    "source": "iana",
    "charset": "UTF-8"
  },
  "text/vnd.ficlab.flt": {
    "source": "iana"
  },
  "text/vnd.fly": {
    "source": "iana",
    "extensions": ["fly"]
  },
  "text/vnd.fmi.flexstor": {
    "source": "iana",
    "extensions": ["flx"]
  },
  "text/vnd.gml": {
    "source": "iana"
  },
  "text/vnd.graphviz": {
    "source": "iana",
    "extensions": ["gv"]
  },
  "text/vnd.hans": {
    "source": "iana"
  },
  "text/vnd.hgl": {
    "source": "iana"
  },
  "text/vnd.in3d.3dml": {
    "source": "iana",
    "extensions": ["3dml"]
  },
  "text/vnd.in3d.spot": {
    "source": "iana",
    "extensions": ["spot"]
  },
  "text/vnd.iptc.newsml": {
    "source": "iana"
  },
  "text/vnd.iptc.nitf": {
    "source": "iana"
  },
  "text/vnd.latex-z": {
    "source": "iana"
  },
  "text/vnd.motorola.reflex": {
    "source": "iana"
  },
  "text/vnd.ms-mediapackage": {
    "source": "iana"
  },
  "text/vnd.net2phone.commcenter.command": {
    "source": "iana"
  },
  "text/vnd.radisys.msml-basic-layout": {
    "source": "iana"
  },
  "text/vnd.senx.warpscript": {
    "source": "iana"
  },
  "text/vnd.si.uricatalogue": {
    "source": "iana"
  },
  "text/vnd.sosi": {
    "source": "iana"
  },
  "text/vnd.sun.j2me.app-descriptor": {
    "source": "iana",
    "charset": "UTF-8",
    "extensions": ["jad"]
  },
  "text/vnd.trolltech.linguist": {
    "source": "iana",
    "charset": "UTF-8"
  },
  "text/vnd.wap.si": {
    "source": "iana"
  },
  "text/vnd.wap.sl": {
    "source": "iana"
  },
  "text/vnd.wap.wml": {
    "source": "iana",
    "extensions": ["wml"]
  },
  "text/vnd.wap.wmlscript": {
    "source": "iana",
    "extensions": ["wmls"]
  },
  "text/vtt": {
    "source": "iana",
    "charset": "UTF-8",
    "compressible": true,
    "extensions": ["vtt"]
  },
  "text/x-asm": {
    "source": "apache",
    "extensions": ["s","asm"]
  },
  "text/x-c": {
    "source": "apache",
    "extensions": ["c","cc","cxx","cpp","h","hh","dic"]
  },
  "text/x-component": {
    "source": "nginx",
    "extensions": ["htc"]
  },
  "text/x-fortran": {
    "source": "apache",
    "extensions": ["f","for","f77","f90"]
  },
  "text/x-gwt-rpc": {
    "compressible": true
  },
  "text/x-handlebars-template": {
    "extensions": ["hbs"]
  },
  "text/x-java-source": {
    "source": "apache",
    "extensions": ["java"]
  },
  "text/x-jquery-tmpl": {
    "compressible": true
  },
  "text/x-lua": {
    "extensions": ["lua"]
  },
  "text/x-markdown": {
    "compressible": true,
    "extensions": ["mkd"]
  },
  "text/x-nfo": {
    "source": "apache",
    "extensions": ["nfo"]
  },
  "text/x-opml": {
    "source": "apache",
    "extensions": ["opml"]
  },
  "text/x-org": {
    "compressible": true,
    "extensions": ["org"]
  },
  "text/x-pascal": {
    "source": "apache",
    "extensions": ["p","pas"]
  },
  "text/x-processing": {
    "compressible": true,
    "extensions": ["pde"]
  },
  "text/x-sass": {
    "extensions": ["sass"]
  },
  "text/x-scss": {
    "extensions": ["scss"]
  },
  "text/x-setext": {
    "source": "apache",
    "extensions": ["etx"]
  },
  "text/x-sfv": {
    "source": "apache",
    "extensions": ["sfv"]
  },
  "text/x-suse-ymp": {
    "compressible": true,
    "extensions": ["ymp"]
  },
  "text/x-uuencode": {
    "source": "apache",
    "extensions": ["uu"]
  },
  "text/x-vcalendar": {
    "source": "apache",
    "extensions": ["vcs"]
  },
  "text/x-vcard": {
    "source": "apache",
    "extensions": ["vcf"]
  },
  "text/xml": {
    "source": "iana",
    "compressible": true,
    "extensions": ["xml"]
  },
  "text/xml-external-parsed-entity": {
    "source": "iana"
  },
  "text/yaml": {
    "compressible": true,
    "extensions": ["yaml","yml"]
  },
  "video/1d-interleaved-parityfec": {
    "source": "iana"
  },
  "video/3gpp": {
    "source": "iana",
    "extensions": ["3gp","3gpp"]
  },
  "video/3gpp-tt": {
    "source": "iana"
  },
  "video/3gpp2": {
    "source": "iana",
    "extensions": ["3g2"]
  },
  "video/av1": {
    "source": "iana"
  },
  "video/bmpeg": {
    "source": "iana"
  },
  "video/bt656": {
    "source": "iana"
  },
  "video/celb": {
    "source": "iana"
  },
  "video/dv": {
    "source": "iana"
  },
  "video/encaprtp": {
    "source": "iana"
  },
  "video/ffv1": {
    "source": "iana"
  },
  "video/flexfec": {
    "source": "iana"
  },
  "video/h261": {
    "source": "iana",
    "extensions": ["h261"]
  },
  "video/h263": {
    "source": "iana",
    "extensions": ["h263"]
  },
  "video/h263-1998": {
    "source": "iana"
  },
  "video/h263-2000": {
    "source": "iana"
  },
  "video/h264": {
    "source": "iana",
    "extensions": ["h264"]
  },
  "video/h264-rcdo": {
    "source": "iana"
  },
  "video/h264-svc": {
    "source": "iana"
  },
  "video/h265": {
    "source": "iana"
  },
  "video/iso.segment": {
    "source": "iana",
    "extensions": ["m4s"]
  },
  "video/jpeg": {
    "source": "iana",
    "extensions": ["jpgv"]
  },
  "video/jpeg2000": {
    "source": "iana"
  },
  "video/jpm": {
    "source": "apache",
    "extensions": ["jpm","jpgm"]
  },
  "video/mj2": {
    "source": "iana",
    "extensions": ["mj2","mjp2"]
  },
  "video/mp1s": {
    "source": "iana"
  },
  "video/mp2p": {
    "source": "iana"
  },
  "video/mp2t": {
    "source": "iana",
    "extensions": ["ts"]
  },
  "video/mp4": {
    "source": "iana",
    "compressible": false,
    "extensions": ["mp4","mp4v","mpg4"]
  },
  "video/mp4v-es": {
    "source": "iana"
  },
  "video/mpeg": {
    "source": "iana",
    "compressible": false,
    "extensions": ["mpeg","mpg","mpe","m1v","m2v"]
  },
  "video/mpeg4-generic": {
    "source": "iana"
  },
  "video/mpv": {
    "source": "iana"
  },
  "video/nv": {
    "source": "iana"
  },
  "video/ogg": {
    "source": "iana",
    "compressible": false,
    "extensions": ["ogv"]
  },
  "video/parityfec": {
    "source": "iana"
  },
  "video/pointer": {
    "source": "iana"
  },
  "video/quicktime": {
    "source": "iana",
    "compressible": false,
    "extensions": ["qt","mov"]
  },
  "video/raptorfec": {
    "source": "iana"
  },
  "video/raw": {
    "source": "iana"
  },
  "video/rtp-enc-aescm128": {
    "source": "iana"
  },
  "video/rtploopback": {
    "source": "iana"
  },
  "video/rtx": {
    "source": "iana"
  },
  "video/scip": {
    "source": "iana"
  },
  "video/smpte291": {
    "source": "iana"
  },
  "video/smpte292m": {
    "source": "iana"
  },
  "video/ulpfec": {
    "source": "iana"
  },
  "video/vc1": {
    "source": "iana"
  },
  "video/vc2": {
    "source": "iana"
  },
  "video/vnd.cctv": {
    "source": "iana"
  },
  "video/vnd.dece.hd": {
    "source": "iana",
    "extensions": ["uvh","uvvh"]
  },
  "video/vnd.dece.mobile": {
    "source": "iana",
    "extensions": ["uvm","uvvm"]
  },
  "video/vnd.dece.mp4": {
    "source": "iana"
  },
  "video/vnd.dece.pd": {
    "source": "iana",
    "extensions": ["uvp","uvvp"]
  },
  "video/vnd.dece.sd": {
    "source": "iana",
    "extensions": ["uvs","uvvs"]
  },
  "video/vnd.dece.video": {
    "source": "iana",
    "extensions": ["uvv","uvvv"]
  },
  "video/vnd.directv.mpeg": {
    "source": "iana"
  },
  "video/vnd.directv.mpeg-tts": {
    "source": "iana"
  },
  "video/vnd.dlna.mpeg-tts": {
    "source": "iana"
  },
  "video/vnd.dvb.file": {
    "source": "iana",
    "extensions": ["dvb"]
  },
  "video/vnd.fvt": {
    "source": "iana",
    "extensions": ["fvt"]
  },
  "video/vnd.hns.video": {
    "source": "iana"
  },
  "video/vnd.iptvforum.1dparityfec-1010": {
    "source": "iana"
  },
  "video/vnd.iptvforum.1dparityfec-2005": {
    "source": "iana"
  },
  "video/vnd.iptvforum.2dparityfec-1010": {
    "source": "iana"
  },
  "video/vnd.iptvforum.2dparityfec-2005": {
    "source": "iana"
  },
  "video/vnd.iptvforum.ttsavc": {
    "source": "iana"
  },
  "video/vnd.iptvforum.ttsmpeg2": {
    "source": "iana"
  },
  "video/vnd.motorola.video": {
    "source": "iana"
  },
  "video/vnd.motorola.videop": {
    "source": "iana"
  },
  "video/vnd.mpegurl": {
    "source": "iana",
    "extensions": ["mxu","m4u"]
  },
  "video/vnd.ms-playready.media.pyv": {
    "source": "iana",
    "extensions": ["pyv"]
  },
  "video/vnd.nokia.interleaved-multimedia": {
    "source": "iana"
  },
  "video/vnd.nokia.mp4vr": {
    "source": "iana"
  },
  "video/vnd.nokia.videovoip": {
    "source": "iana"
  },
  "video/vnd.objectvideo": {
    "source": "iana"
  },
  "video/vnd.radgamettools.bink": {
    "source": "iana"
  },
  "video/vnd.radgamettools.smacker": {
    "source": "iana"
  },
  "video/vnd.sealed.mpeg1": {
    "source": "iana"
  },
  "video/vnd.sealed.mpeg4": {
    "source": "iana"
  },
  "video/vnd.sealed.swf": {
    "source": "iana"
  },
  "video/vnd.sealedmedia.softseal.mov": {
    "source": "iana"
  },
  "video/vnd.uvvu.mp4": {
    "source": "iana",
    "extensions": ["uvu","uvvu"]
  },
  "video/vnd.vivo": {
    "source": "iana",
    "extensions": ["viv"]
  },
  "video/vnd.youtube.yt": {
    "source": "iana"
  },
  "video/vp8": {
    "source": "iana"
  },
  "video/webm": {
    "source": "apache",
    "compressible": false,
    "extensions": ["webm"]
  },
  "video/x-f4v": {
    "source": "apache",
    "extensions": ["f4v"]
  },
  "video/x-fli": {
    "source": "apache",
    "extensions": ["fli"]
  },
  "video/x-flv": {
    "source": "apache",
    "compressible": false,
    "extensions": ["flv"]
  },
  "video/x-m4v": {
    "source": "apache",
    "extensions": ["m4v"]
  },
  "video/x-matroska": {
    "source": "apache",
    "compressible": false,
    "extensions": ["mkv","mk3d","mks"]
  },
  "video/x-mng": {
    "source": "apache",
    "extensions": ["mng"]
  },
  "video/x-ms-asf": {
    "source": "apache",
    "extensions": ["asf","asx"]
  },
  "video/x-ms-vob": {
    "source": "apache",
    "extensions": ["vob"]
  },
  "video/x-ms-wm": {
    "source": "apache",
    "extensions": ["wm"]
  },
  "video/x-ms-wmv": {
    "source": "apache",
    "compressible": false,
    "extensions": ["wmv"]
  },
  "video/x-ms-wmx": {
    "source": "apache",
    "extensions": ["wmx"]
  },
  "video/x-ms-wvx": {
    "source": "apache",
    "extensions": ["wvx"]
  },
  "video/x-msvideo": {
    "source": "apache",
    "extensions": ["avi"]
  },
  "video/x-sgi-movie": {
    "source": "apache",
    "extensions": ["movie"]
  },
  "video/x-smv": {
    "source": "apache",
    "extensions": ["smv"]
  },
  "x-conference/x-cooltalk": {
    "source": "apache",
    "extensions": ["ice"]
  },
  "x-shader/x-fragment": {
    "compressible": true
  },
  "x-shader/x-vertex": {
    "compressible": true
  }
}
1.48.0 / 2021-05-30
===================

  * Add extension `.mvt` to `application/vnd.mapbox-vector-tile`
  * Add new upstream MIME types
  * Mark `text/yaml` as compressible

1.47.0 / 2021-04-01
===================

  * Add new upstream MIME types
  * Remove ambigious extensions from IANA for `application/*+xml` types
  * Update primary extension to `.es` for `application/ecmascript`

1.46.0 / 2021-02-13
===================

  * Add extension `.amr` to `audio/amr`
  * Add extension `.m4s` to `video/iso.segment`
  * Add extension `.opus` to `audio/ogg`
  * Add new upstream MIME types

1.45.0 / 2020-09-22
===================

  * Add `application/ubjson` with extension `.ubj`
  * Add `image/avif` with extension `.avif`
  * Add `image/ktx2` with extension `.ktx2`
  * Add extension `.dbf` to `application/vnd.dbf`
  * Add extension `.rar` to `application/vnd.rar`
  * Add extension `.td` to `application/urc-targetdesc+xml`
  * Add new upstream MIME types
  * Fix extension of `application/vnd.apple.keynote` to be `.key`

1.44.0 / 2020-04-22
===================

  * Add charsets from IANA
  * Add extension `.cjs` to `application/node`
  * Add new upstream MIME types

1.43.0 / 2020-01-05
===================

  * Add `application/x-keepass2` with extension `.kdbx`
  * Add extension `.mxmf` to `audio/mobile-xmf`
  * Add extensions from IANA for `application/*+xml` types
  * Add new upstream MIME types

1.42.0 / 2019-09-25
===================

  * Add `image/vnd.ms-dds` with extension `.dds`
  * Add new upstream MIME types
  * Remove compressible from `multipart/mixed`

1.41.0 / 2019-08-30
===================

  * Add new upstream MIME types
  * Add `application/toml` with extension `.toml`
  * Mark `font/ttf` as compressible

1.40.0 / 2019-04-20
===================

  * Add extensions from IANA for `model/*` types
  * Add `text/mdx` with extension `.mdx`

1.39.0 / 2019-04-04
===================

  * Add extensions `.siv` and `.sieve` to `application/sieve`
  * Add new upstream MIME types

1.38.0 / 2019-02-04
===================

  * Add extension `.nq` to `application/n-quads`
  * Add extension `.nt` to `application/n-triples`
  * Add new upstream MIME types
  * Mark `text/less` as compressible

1.37.0 / 2018-10-19
===================

  * Add extensions to HEIC image types
  * Add new upstream MIME types

1.36.0 / 2018-08-20
===================

  * Add Apple file extensions from IANA
  * Add extensions from IANA for `image/*` types
  * Add new upstream MIME types

1.35.0 / 2018-07-15
===================

  * Add extension `.owl` to `application/rdf+xml`
  * Add new upstream MIME types
    - Removes extension `.woff` from `application/font-woff`

1.34.0 / 2018-06-03
===================

  * Add extension `.csl` to `application/vnd.citationstyles.style+xml`
  * Add extension `.es` to `application/ecmascript`
  * Add new upstream MIME types
  * Add `UTF-8` as default charset for `text/turtle`
  * Mark all XML-derived types as compressible

1.33.0 / 2018-02-15
===================

  * Add extensions from IANA for `message/*` types
  * Add new upstream MIME types
  * Fix some incorrect OOXML types
  * Remove `application/font-woff2`

1.32.0 / 2017-11-29
===================

  * Add new upstream MIME types
  * Update `text/hjson` to registered `application/hjson`
  * Add `text/shex` with extension `.shex`

1.31.0 / 2017-10-25
===================

  * Add `application/raml+yaml` with extension `.raml`
  * Add `application/wasm` with extension `.wasm`
  * Add new `font` type from IANA
  * Add new upstream font extensions
  * Add new upstream MIME types
  * Add extensions for JPEG-2000 images

1.30.0 / 2017-08-27
===================

  * Add `application/vnd.ms-outlook`
  * Add `application/x-arj`
  * Add extension `.mjs` to `application/javascript`
  * Add glTF types and extensions
  * Add new upstream MIME types
  * Add `text/x-org`
  * Add VirtualBox MIME types
  * Fix `source` records for `video/*` types that are IANA
  * Update `font/opentype` to registered `font/otf`

1.29.0 / 2017-07-10
===================

  * Add `application/fido.trusted-apps+json`
  * Add extension `.wadl` to `application/vnd.sun.wadl+xml`
  * Add new upstream MIME types
  * Add `UTF-8` as default charset for `text/css`

1.28.0 / 2017-05-14
===================

  * Add new upstream MIME types
  * Add extension `.gz` to `application/gzip`
  * Update extensions `.md` and `.markdown` to be `text/markdown`

1.27.0 / 2017-03-16
===================

  * Add new upstream MIME types
  * Add `image/apng` with extension `.apng`

1.26.0 / 2017-01-14
===================

  * Add new upstream MIME types
  * Add extension `.geojson` to `application/geo+json`

1.25.0 / 2016-11-11
===================

  * Add new upstream MIME types

1.24.0 / 2016-09-18
===================

  * Add `audio/mp3`
  * Add new upstream MIME types

1.23.0 / 2016-05-01
===================

  * Add new upstream MIME types
  * Add extension `.3gpp` to `audio/3gpp`

1.22.0 / 2016-02-15
===================

  * Add `text/slim`
  * Add extension `.rng` to `application/xml`
  * Add new upstream MIME types
  * Fix extension of `application/dash+xml` to be `.mpd`
  * Update primary extension to `.m4a` for `audio/mp4`

1.21.0 / 2016-01-06
===================

  * Add Google document types
  * Add new upstream MIME types

1.20.0 / 2015-11-10
===================

  * Add `text/x-suse-ymp`
  * Add new upstream MIME types

1.19.0 / 2015-09-17
===================

  * Add `application/vnd.apple.pkpass`
  * Add new upstream MIME types

1.18.0 / 2015-09-03
===================

  * Add new upstream MIME types

1.17.0 / 2015-08-13
===================

  * Add `application/x-msdos-program`
  * Add `audio/g711-0`
  * Add `image/vnd.mozilla.apng`
  * Add extension `.exe` to `application/x-msdos-program`

1.16.0 / 2015-07-29
===================

  * Add `application/vnd.uri-map`

1.15.0 / 2015-07-13
===================

  * Add `application/x-httpd-php`

1.14.0 / 2015-06-25
===================

  * Add `application/scim+json`
  * Add `application/vnd.3gpp.ussd+xml`
  * Add `application/vnd.biopax.rdf+xml`
  * Add `text/x-processing`

1.13.0 / 2015-06-07
===================

  * Add nginx as a source
  * Add `application/x-cocoa`
  * Add `application/x-java-archive-diff`
  * Add `application/x-makeself`
  * Add `application/x-perl`
  * Add `application/x-pilot`
  * Add `application/x-redhat-package-manager`
  * Add `application/x-sea`
  * Add `audio/x-m4a`
  * Add `audio/x-realaudio`
  * Add `image/x-jng`
  * Add `text/mathml`

1.12.0 / 2015-06-05
===================

  * Add `application/bdoc`
  * Add `application/vnd.hyperdrive+json`
  * Add `application/x-bdoc`
  * Add extension `.rtf` to `text/rtf`

1.11.0 / 2015-05-31
===================

  * Add `audio/wav`
  * Add `audio/wave`
  * Add extension `.litcoffee` to `text/coffeescript`
  * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data`
  * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install`

1.10.0 / 2015-05-19
===================

  * Add `application/vnd.balsamiq.bmpr`
  * Add `application/vnd.microsoft.portable-executable`
  * Add `application/x-ns-proxy-autoconfig`

1.9.1 / 2015-04-19
==================

  * Remove `.json` extension from `application/manifest+json`
    - This is causing bugs downstream

1.9.0 / 2015-04-19
==================

  * Add `application/manifest+json`
  * Add `application/vnd.micro+json`
  * Add `image/vnd.zbrush.pcx`
  * Add `image/x-ms-bmp`

1.8.0 / 2015-03-13
==================

  * Add `application/vnd.citationstyles.style+xml`
  * Add `application/vnd.fastcopy-disk-image`
  * Add `application/vnd.gov.sk.xmldatacontainer+xml`
  * Add extension `.jsonld` to `application/ld+json`

1.7.0 / 2015-02-08
==================

  * Add `application/vnd.gerber`
  * Add `application/vnd.msa-disk-image`

1.6.1 / 2015-02-05
==================

  * Community extensions ownership transferred from `node-mime`

1.6.0 / 2015-01-29
==================

  * Add `application/jose`
  * Add `application/jose+json`
  * Add `application/json-seq`
  * Add `application/jwk+json`
  * Add `application/jwk-set+json`
  * Add `application/jwt`
  * Add `application/rdap+json`
  * Add `application/vnd.gov.sk.e-form+xml`
  * Add `application/vnd.ims.imsccv1p3`

1.5.0 / 2014-12-30
==================

  * Add `application/vnd.oracle.resource+json`
  * Fix various invalid MIME type entries
    - `application/mbox+xml`
    - `application/oscp-response`
    - `application/vwg-multiplexed`
    - `audio/g721`

1.4.0 / 2014-12-21
==================

  * Add `application/vnd.ims.imsccv1p2`
  * Fix various invalid MIME type entries
    - `application/vnd-acucobol`
    - `application/vnd-curl`
    - `application/vnd-dart`
    - `application/vnd-dxr`
    - `application/vnd-fdf`
    - `application/vnd-mif`
    - `application/vnd-sema`
    - `application/vnd-wap-wmlc`
    - `application/vnd.adobe.flash-movie`
    - `application/vnd.dece-zip`
    - `application/vnd.dvb_service`
    - `application/vnd.micrografx-igx`
    - `application/vnd.sealed-doc`
    - `application/vnd.sealed-eml`
    - `application/vnd.sealed-mht`
    - `application/vnd.sealed-ppt`
    - `application/vnd.sealed-tiff`
    - `application/vnd.sealed-xls`
    - `application/vnd.sealedmedia.softseal-html`
    - `application/vnd.sealedmedia.softseal-pdf`
    - `application/vnd.wap-slc`
    - `application/vnd.wap-wbxml`
    - `audio/vnd.sealedmedia.softseal-mpeg`
    - `image/vnd-djvu`
    - `image/vnd-svf`
    - `image/vnd-wap-wbmp`
    - `image/vnd.sealed-png`
    - `image/vnd.sealedmedia.softseal-gif`
    - `image/vnd.sealedmedia.softseal-jpg`
    - `model/vnd-dwf`
    - `model/vnd.parasolid.transmit-binary`
    - `model/vnd.parasolid.transmit-text`
    - `text/vnd-a`
    - `text/vnd-curl`
    - `text/vnd.wap-wml`
  * Remove example template MIME types
    - `application/example`
    - `audio/example`
    - `image/example`
    - `message/example`
    - `model/example`
    - `multipart/example`
    - `text/example`
    - `video/example`

1.3.1 / 2014-12-16
==================

  * Fix missing extensions
    - `application/json5`
    - `text/hjson`

1.3.0 / 2014-12-07
==================

  * Add `application/a2l`
  * Add `application/aml`
  * Add `application/atfx`
  * Add `application/atxml`
  * Add `application/cdfx+xml`
  * Add `application/dii`
  * Add `application/json5`
  * Add `application/lxf`
  * Add `application/mf4`
  * Add `application/vnd.apache.thrift.compact`
  * Add `application/vnd.apache.thrift.json`
  * Add `application/vnd.coffeescript`
  * Add `application/vnd.enphase.envoy`
  * Add `application/vnd.ims.imsccv1p1`
  * Add `text/csv-schema`
  * Add `text/hjson`
  * Add `text/markdown`
  * Add `text/yaml`

1.2.0 / 2014-11-09
==================

  * Add `application/cea`
  * Add `application/dit`
  * Add `application/vnd.gov.sk.e-form+zip`
  * Add `application/vnd.tmd.mediaflex.api+xml`
  * Type `application/epub+zip` is now IANA-registered

1.1.2 / 2014-10-23
==================

  * Rebuild database for `application/x-www-form-urlencoded` change

1.1.1 / 2014-10-20
==================

  * Mark `application/x-www-form-urlencoded` as compressible.

1.1.0 / 2014-09-28
==================

  * Add `application/font-woff2`

1.0.3 / 2014-09-25
==================

  * Fix engine requirement in package

1.0.2 / 2014-09-25
==================

  * Add `application/coap-group+json`
  * Add `application/dcd`
  * Add `application/vnd.apache.thrift.binary`
  * Add `image/vnd.tencent.tap`
  * Mark all JSON-derived types as compressible
  * Update `text/vtt` data

1.0.1 / 2014-08-30
==================

  * Fix extension ordering

1.0.0 / 2014-08-30
==================

  * Add `application/atf`
  * Add `application/merge-patch+json`
  * Add `multipart/x-mixed-replace`
  * Add `source: 'apache'` metadata
  * Add `source: 'iana'` metadata
  * Remove badly-assumed charset data
/*!
 * mime-db
 * Copyright(c) 2014 Jonathan Ong
 * MIT Licensed
 */

/**
 * Module exports.
 */

module.exports = require('./db.json')

The MIT License (MIT)

Copyright (c) 2014 Jonathan Ong me@jongleberry.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "mime-db",
  "description": "Media Type Database",
  "version": "1.48.0",
  "license": "MIT",
  "repository": "jshttp/mime-db",
  "devDependencies": {
    "bluebird": "3.7.2",
    "co": "4.6.0",
    "cogent": "1.0.1",
    "csv-parse": "4.15.4",
    "eslint": "7.27.0",
    "eslint-config-standard": "15.0.1",
    "eslint-plugin-import": "2.23.4",
    "eslint-plugin-markdown": "2.2.0",
    "eslint-plugin-node": "11.1.0",
    "eslint-plugin-promise": "5.1.0",
    "eslint-plugin-standard": "4.1.0",
    "gnode": "0.1.2",
    "mocha": "8.4.0",
    "nyc": "15.1.0",
    "raw-body": "2.4.1",
    "stream-to-array": "2.3.0"
  },
  "files": [
    "HISTORY.md",
    "LICENSE",
    "README.md",
    "db.json",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}2.1.31 / 2021-06-01
===================

  * deps: mime-db@1.48.0
    - Add extension `.mvt` to `application/vnd.mapbox-vector-tile`
    - Add new upstream MIME types
    - Mark `text/yaml` as compressible

2.1.30 / 2021-04-02
===================

  * deps: mime-db@1.47.0
    - Add extension `.amr` to `audio/amr`
    - Remove ambigious extensions from IANA for `application/*+xml` types
    - Update primary extension to `.es` for `application/ecmascript`

2.1.29 / 2021-02-17
===================

  * deps: mime-db@1.46.0
    - Add extension `.amr` to `audio/amr`
    - Add extension `.m4s` to `video/iso.segment`
    - Add extension `.opus` to `audio/ogg`
    - Add new upstream MIME types

2.1.28 / 2021-01-01
===================

  * deps: mime-db@1.45.0
    - Add `application/ubjson` with extension `.ubj`
    - Add `image/avif` with extension `.avif`
    - Add `image/ktx2` with extension `.ktx2`
    - Add extension `.dbf` to `application/vnd.dbf`
    - Add extension `.rar` to `application/vnd.rar`
    - Add extension `.td` to `application/urc-targetdesc+xml`
    - Add new upstream MIME types
    - Fix extension of `application/vnd.apple.keynote` to be `.key`

2.1.27 / 2020-04-23
===================

  * deps: mime-db@1.44.0
    - Add charsets from IANA
    - Add extension `.cjs` to `application/node`
    - Add new upstream MIME types

2.1.26 / 2020-01-05
===================

  * deps: mime-db@1.43.0
    - Add `application/x-keepass2` with extension `.kdbx`
    - Add extension `.mxmf` to `audio/mobile-xmf`
    - Add extensions from IANA for `application/*+xml` types
    - Add new upstream MIME types

2.1.25 / 2019-11-12
===================

  * deps: mime-db@1.42.0
    - Add new upstream MIME types
    - Add `application/toml` with extension `.toml`
    - Add `image/vnd.ms-dds` with extension `.dds`

2.1.24 / 2019-04-20
===================

  * deps: mime-db@1.40.0
    - Add extensions from IANA for `model/*` types
    - Add `text/mdx` with extension `.mdx`

2.1.23 / 2019-04-17
===================

  * deps: mime-db@~1.39.0
    - Add extensions `.siv` and `.sieve` to `application/sieve`
    - Add new upstream MIME types

2.1.22 / 2019-02-14
===================

  * deps: mime-db@~1.38.0
    - Add extension `.nq` to `application/n-quads`
    - Add extension `.nt` to `application/n-triples`
    - Add new upstream MIME types
    - Mark `text/less` as compressible

2.1.21 / 2018-10-19
===================

  * deps: mime-db@~1.37.0
    - Add extensions to HEIC image types
    - Add new upstream MIME types

2.1.20 / 2018-08-26
===================

  * deps: mime-db@~1.36.0
    - Add Apple file extensions from IANA
    - Add extensions from IANA for `image/*` types
    - Add new upstream MIME types

2.1.19 / 2018-07-17
===================

  * deps: mime-db@~1.35.0
    - Add extension `.csl` to `application/vnd.citationstyles.style+xml`
    - Add extension `.es` to `application/ecmascript`
    - Add extension `.owl` to `application/rdf+xml`
    - Add new upstream MIME types
    - Add UTF-8 as default charset for `text/turtle`

2.1.18 / 2018-02-16
===================

  * deps: mime-db@~1.33.0
    - Add `application/raml+yaml` with extension `.raml`
    - Add `application/wasm` with extension `.wasm`
    - Add `text/shex` with extension `.shex`
    - Add extensions for JPEG-2000 images
    - Add extensions from IANA for `message/*` types
    - Add new upstream MIME types
    - Update font MIME types
    - Update `text/hjson` to registered `application/hjson`

2.1.17 / 2017-09-01
===================

  * deps: mime-db@~1.30.0
    - Add `application/vnd.ms-outlook`
    - Add `application/x-arj`
    - Add extension `.mjs` to `application/javascript`
    - Add glTF types and extensions
    - Add new upstream MIME types
    - Add `text/x-org`
    - Add VirtualBox MIME types
    - Fix `source` records for `video/*` types that are IANA
    - Update `font/opentype` to registered `font/otf`

2.1.16 / 2017-07-24
===================

  * deps: mime-db@~1.29.0
    - Add `application/fido.trusted-apps+json`
    - Add extension `.wadl` to `application/vnd.sun.wadl+xml`
    - Add extension `.gz` to `application/gzip`
    - Add new upstream MIME types
    - Update extensions `.md` and `.markdown` to be `text/markdown`

2.1.15 / 2017-03-23
===================

  * deps: mime-db@~1.27.0
    - Add new mime types
    - Add `image/apng`

2.1.14 / 2017-01-14
===================

  * deps: mime-db@~1.26.0
    - Add new mime types

2.1.13 / 2016-11-18
===================

  * deps: mime-db@~1.25.0
    - Add new mime types

2.1.12 / 2016-09-18
===================

  * deps: mime-db@~1.24.0
    - Add new mime types
    - Add `audio/mp3`

2.1.11 / 2016-05-01
===================

  * deps: mime-db@~1.23.0
    - Add new mime types

2.1.10 / 2016-02-15
===================

  * deps: mime-db@~1.22.0
    - Add new mime types
    - Fix extension of `application/dash+xml`
    - Update primary extension for `audio/mp4`

2.1.9 / 2016-01-06
==================

  * deps: mime-db@~1.21.0
    - Add new mime types

2.1.8 / 2015-11-30
==================

  * deps: mime-db@~1.20.0
    - Add new mime types

2.1.7 / 2015-09-20
==================

  * deps: mime-db@~1.19.0
    - Add new mime types

2.1.6 / 2015-09-03
==================

  * deps: mime-db@~1.18.0
    - Add new mime types

2.1.5 / 2015-08-20
==================

  * deps: mime-db@~1.17.0
    - Add new mime types

2.1.4 / 2015-07-30
==================

  * deps: mime-db@~1.16.0
    - Add new mime types

2.1.3 / 2015-07-13
==================

  * deps: mime-db@~1.15.0
    - Add new mime types

2.1.2 / 2015-06-25
==================

  * deps: mime-db@~1.14.0
    - Add new mime types

2.1.1 / 2015-06-08
==================

  * perf: fix deopt during mapping

2.1.0 / 2015-06-07
==================

  * Fix incorrectly treating extension-less file name as extension
    - i.e. `'path/to/json'` will no longer return `application/json`
  * Fix `.charset(type)` to accept parameters
  * Fix `.charset(type)` to match case-insensitive
  * Improve generation of extension to MIME mapping
  * Refactor internals for readability and no argument reassignment
  * Prefer `application/*` MIME types from the same source
  * Prefer any type over `application/octet-stream`
  * deps: mime-db@~1.13.0
    - Add nginx as a source
    - Add new mime types

2.0.14 / 2015-06-06
===================

  * deps: mime-db@~1.12.0
    - Add new mime types

2.0.13 / 2015-05-31
===================

  * deps: mime-db@~1.11.0
    - Add new mime types

2.0.12 / 2015-05-19
===================

  * deps: mime-db@~1.10.0
    - Add new mime types

2.0.11 / 2015-05-05
===================

  * deps: mime-db@~1.9.1
    - Add new mime types

2.0.10 / 2015-03-13
===================

  * deps: mime-db@~1.8.0
    - Add new mime types

2.0.9 / 2015-02-09
==================

  * deps: mime-db@~1.7.0
    - Add new mime types
    - Community extensions ownership transferred from `node-mime`

2.0.8 / 2015-01-29
==================

  * deps: mime-db@~1.6.0
    - Add new mime types

2.0.7 / 2014-12-30
==================

  * deps: mime-db@~1.5.0
    - Add new mime types
    - Fix various invalid MIME type entries

2.0.6 / 2014-12-30
==================

  * deps: mime-db@~1.4.0
    - Add new mime types
    - Fix various invalid MIME type entries
    - Remove example template MIME types

2.0.5 / 2014-12-29
==================

  * deps: mime-db@~1.3.1
    - Fix missing extensions

2.0.4 / 2014-12-10
==================

  * deps: mime-db@~1.3.0
    - Add new mime types

2.0.3 / 2014-11-09
==================

  * deps: mime-db@~1.2.0
    - Add new mime types

2.0.2 / 2014-09-28
==================

  * deps: mime-db@~1.1.0
    - Add new mime types
    - Add additional compressible
    - Update charsets

2.0.1 / 2014-09-07
==================

  * Support Node.js 0.6

2.0.0 / 2014-09-02
==================

  * Use `mime-db`
  * Remove `.define()`

1.0.2 / 2014-08-04
==================

  * Set charset=utf-8 for `text/javascript`

1.0.1 / 2014-06-24
==================

  * Add `text/jsx` type

1.0.0 / 2014-05-12
==================

  * Return `false` for unknown types
  * Set charset=utf-8 for `application/json`

0.1.0 / 2014-05-02
==================

  * Initial release
/*!
 * mime-types
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var db = require('mime-db')
var extname = require('path').extname

/**
 * Module variables.
 * @private
 */

var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/
var TEXT_TYPE_REGEXP = /^text\//i

/**
 * Module exports.
 * @public
 */

exports.charset = charset
exports.charsets = { lookup: charset }
exports.contentType = contentType
exports.extension = extension
exports.extensions = Object.create(null)
exports.lookup = lookup
exports.types = Object.create(null)

// Populate the extensions/types maps
populateMaps(exports.extensions, exports.types)

/**
 * Get the default charset for a MIME type.
 *
 * @param {string} type
 * @return {boolean|string}
 */

function charset (type) {
  if (!type || typeof type !== 'string') {
    return false
  }

  // TODO: use media-typer
  var match = EXTRACT_TYPE_REGEXP.exec(type)
  var mime = match && db[match[1].toLowerCase()]

  if (mime && mime.charset) {
    return mime.charset
  }

  // default text/* to utf-8
  if (match && TEXT_TYPE_REGEXP.test(match[1])) {
    return 'UTF-8'
  }

  return false
}

/**
 * Create a full Content-Type header given a MIME type or extension.
 *
 * @param {string} str
 * @return {boolean|string}
 */

function contentType (str) {
  // TODO: should this even be in this module?
  if (!str || typeof str !== 'string') {
    return false
  }

  var mime = str.indexOf('/') === -1
    ? exports.lookup(str)
    : str

  if (!mime) {
    return false
  }

  // TODO: use content-type or other module
  if (mime.indexOf('charset') === -1) {
    var charset = exports.charset(mime)
    if (charset) mime += '; charset=' + charset.toLowerCase()
  }

  return mime
}

/**
 * Get the default extension for a MIME type.
 *
 * @param {string} type
 * @return {boolean|string}
 */

function extension (type) {
  if (!type || typeof type !== 'string') {
    return false
  }

  // TODO: use media-typer
  var match = EXTRACT_TYPE_REGEXP.exec(type)

  // get extensions
  var exts = match && exports.extensions[match[1].toLowerCase()]

  if (!exts || !exts.length) {
    return false
  }

  return exts[0]
}

/**
 * Lookup the MIME type for a file path/extension.
 *
 * @param {string} path
 * @return {boolean|string}
 */

function lookup (path) {
  if (!path || typeof path !== 'string') {
    return false
  }

  // get the extension ("ext" or ".ext" or full path)
  var extension = extname('x.' + path)
    .toLowerCase()
    .substr(1)

  if (!extension) {
    return false
  }

  return exports.types[extension] || false
}

/**
 * Populate the extensions and types maps.
 * @private
 */

function populateMaps (extensions, types) {
  // source preference (least -> most)
  var preference = ['nginx', 'apache', undefined, 'iana']

  Object.keys(db).forEach(function forEachMimeType (type) {
    var mime = db[type]
    var exts = mime.extensions

    if (!exts || !exts.length) {
      return
    }

    // mime -> extensions
    extensions[type] = exts

    // extension -> mime
    for (var i = 0; i < exts.length; i++) {
      var extension = exts[i]

      if (types[extension]) {
        var from = preference.indexOf(db[types[extension]].source)
        var to = preference.indexOf(mime.source)

        if (types[extension] !== 'application/octet-stream' &&
          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
          // skip the remapping
          continue
        }
      }

      // set the extension -> mime
      types[extension] = type
    }
  })
}
(The MIT License)

Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "mime-types",
  "description": "The ultimate javascript content-type utility.",
  "version": "2.1.31",
  "license": "MIT",
  "repository": "jshttp/mime-types",
  "dependencies": {
    "mime-db": "1.48.0"
  },
  "devDependencies": {
    "eslint": "7.27.0",
    "eslint-config-standard": "14.1.1",
    "eslint-plugin-import": "2.23.4",
    "eslint-plugin-markdown": "2.2.0",
    "eslint-plugin-node": "11.1.0",
    "eslint-plugin-promise": "5.1.0",
    "eslint-plugin-standard": "4.1.0",
    "mocha": "8.4.0",
    "nyc": "15.1.0"
  },
  "files": [
    "HISTORY.md",
    "LICENSE",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}'use strict';

// We define these manually to ensure they're always copied
// even if they would move up the prototype chain
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
const knownProps = [
	'destroy',
	'setTimeout',
	'socket',
	'headers',
	'trailers',
	'rawHeaders',
	'statusCode',
	'httpVersion',
	'httpVersionMinor',
	'httpVersionMajor',
	'rawTrailers',
	'statusMessage'
];

module.exports = (fromStream, toStream) => {
	const fromProps = new Set(Object.keys(fromStream).concat(knownProps));

	for (const prop of fromProps) {
		// Don't overwrite existing properties
		if (prop in toStream) {
			continue;
		}

		toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop];
	}
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "mimic-response",
  "version": "1.0.1",
  "description": "Mimic a Node.js HTTP response stream",
  "license": "MIT",
  "repository": "sindresorhus/mimic-response",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "create-test-server": "^0.1.0",
    "pify": "^3.0.0",
    "xo": "*"
  }
}module.exports = function (args, opts) {
    if (!opts) opts = {};
    
    var flags = { bools : {}, strings : {}, unknownFn: null };

    if (typeof opts['unknown'] === 'function') {
        flags.unknownFn = opts['unknown'];
    }

    if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {
      flags.allBools = true;
    } else {
      [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
          flags.bools[key] = true;
      });
    }
    
    var aliases = {};
    Object.keys(opts.alias || {}).forEach(function (key) {
        aliases[key] = [].concat(opts.alias[key]);
        aliases[key].forEach(function (x) {
            aliases[x] = [key].concat(aliases[key].filter(function (y) {
                return x !== y;
            }));
        });
    });

    [].concat(opts.string).filter(Boolean).forEach(function (key) {
        flags.strings[key] = true;
        if (aliases[key]) {
            flags.strings[aliases[key]] = true;
        }
     });

    var defaults = opts['default'] || {};
    
    var argv = { _ : [] };
    Object.keys(flags.bools).forEach(function (key) {
        setArg(key, defaults[key] === undefined ? false : defaults[key]);
    });
    
    var notFlags = [];

    if (args.indexOf('--') !== -1) {
        notFlags = args.slice(args.indexOf('--')+1);
        args = args.slice(0, args.indexOf('--'));
    }

    function argDefined(key, arg) {
        return (flags.allBools && /^--[^=]+$/.test(arg)) ||
            flags.strings[key] || flags.bools[key] || aliases[key];
    }

    function setArg (key, val, arg) {
        if (arg && flags.unknownFn && !argDefined(key, arg)) {
            if (flags.unknownFn(arg) === false) return;
        }

        var value = !flags.strings[key] && isNumber(val)
            ? Number(val) : val
        ;
        setKey(argv, key.split('.'), value);
        
        (aliases[key] || []).forEach(function (x) {
            setKey(argv, x.split('.'), value);
        });
    }

    function setKey (obj, keys, value) {
        var o = obj;
        for (var i = 0; i < keys.length-1; i++) {
            var key = keys[i];
            if (key === '__proto__') return;
            if (o[key] === undefined) o[key] = {};
            if (o[key] === Object.prototype || o[key] === Number.prototype
                || o[key] === String.prototype) o[key] = {};
            if (o[key] === Array.prototype) o[key] = [];
            o = o[key];
        }

        var key = keys[keys.length - 1];
        if (key === '__proto__') return;
        if (o === Object.prototype || o === Number.prototype
            || o === String.prototype) o = {};
        if (o === Array.prototype) o = [];
        if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') {
            o[key] = value;
        }
        else if (Array.isArray(o[key])) {
            o[key].push(value);
        }
        else {
            o[key] = [ o[key], value ];
        }
    }
    
    function aliasIsBoolean(key) {
      return aliases[key].some(function (x) {
          return flags.bools[x];
      });
    }

    for (var i = 0; i < args.length; i++) {
        var arg = args[i];
        
        if (/^--.+=/.test(arg)) {
            // Using [\s\S] instead of . because js doesn't support the
            // 'dotall' regex modifier. See:
            // http://stackoverflow.com/a/1068308/13216
            var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
            var key = m[1];
            var value = m[2];
            if (flags.bools[key]) {
                value = value !== 'false';
            }
            setArg(key, value, arg);
        }
        else if (/^--no-.+/.test(arg)) {
            var key = arg.match(/^--no-(.+)/)[1];
            setArg(key, false, arg);
        }
        else if (/^--.+/.test(arg)) {
            var key = arg.match(/^--(.+)/)[1];
            var next = args[i + 1];
            if (next !== undefined && !/^-/.test(next)
            && !flags.bools[key]
            && !flags.allBools
            && (aliases[key] ? !aliasIsBoolean(key) : true)) {
                setArg(key, next, arg);
                i++;
            }
            else if (/^(true|false)$/.test(next)) {
                setArg(key, next === 'true', arg);
                i++;
            }
            else {
                setArg(key, flags.strings[key] ? '' : true, arg);
            }
        }
        else if (/^-[^-]+/.test(arg)) {
            var letters = arg.slice(1,-1).split('');
            
            var broken = false;
            for (var j = 0; j < letters.length; j++) {
                var next = arg.slice(j+2);
                
                if (next === '-') {
                    setArg(letters[j], next, arg)
                    continue;
                }
                
                if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {
                    setArg(letters[j], next.split('=')[1], arg);
                    broken = true;
                    break;
                }
                
                if (/[A-Za-z]/.test(letters[j])
                && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
                    setArg(letters[j], next, arg);
                    broken = true;
                    break;
                }
                
                if (letters[j+1] && letters[j+1].match(/\W/)) {
                    setArg(letters[j], arg.slice(j+2), arg);
                    broken = true;
                    break;
                }
                else {
                    setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg);
                }
            }
            
            var key = arg.slice(-1)[0];
            if (!broken && key !== '-') {
                if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])
                && !flags.bools[key]
                && (aliases[key] ? !aliasIsBoolean(key) : true)) {
                    setArg(key, args[i+1], arg);
                    i++;
                }
                else if (args[i+1] && /^(true|false)$/.test(args[i+1])) {
                    setArg(key, args[i+1] === 'true', arg);
                    i++;
                }
                else {
                    setArg(key, flags.strings[key] ? '' : true, arg);
                }
            }
        }
        else {
            if (!flags.unknownFn || flags.unknownFn(arg) !== false) {
                argv._.push(
                    flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
                );
            }
            if (opts.stopEarly) {
                argv._.push.apply(argv._, args.slice(i + 1));
                break;
            }
        }
    }
    
    Object.keys(defaults).forEach(function (key) {
        if (!hasKey(argv, key.split('.'))) {
            setKey(argv, key.split('.'), defaults[key]);
            
            (aliases[key] || []).forEach(function (x) {
                setKey(argv, x.split('.'), defaults[key]);
            });
        }
    });
    
    if (opts['--']) {
        argv['--'] = new Array();
        notFlags.forEach(function(key) {
            argv['--'].push(key);
        });
    }
    else {
        notFlags.forEach(function(key) {
            argv._.push(key);
        });
    }

    return argv;
};

function hasKey (obj, keys) {
    var o = obj;
    keys.slice(0,-1).forEach(function (key) {
        o = (o[key] || {});
    });

    var key = keys[keys.length - 1];
    return key in o;
}

function isNumber (x) {
    if (typeof x === 'number') return true;
    if (/^0x[0-9a-f]+$/i.test(x)) return true;
    return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
}

This software is released under the MIT license:

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "minimist",
  "version": "1.2.5",
  "description": "parse argument options",
  "main": "index.js",
  "devDependencies": {
    "covert": "^1.0.0",
    "tap": "~0.4.0",
    "tape": "^3.5.0"
  },
  "testling": {
    "files": "test/*.js",
    "browsers": [
      "ie/6..latest",
      "ff/5",
      "firefox/latest",
      "chrome/10",
      "chrome/latest",
      "safari/5.1",
      "safari/latest",
      "opera/12"
    ]
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/substack/minimist.git"
  },
  "homepage": "https://github.com/substack/minimist",
  "author": {
    "name": "James Halliday",
    "email": "mail@substack.net",
    "url": "http://substack.net"
  },
  "license": "MIT"
}//! moment.js locale configuration
//! locale : Afrikaans [af]
//! author : Werner Mollentze : https://github.com/wernerm

import moment from '../moment';

export default moment.defineLocale('af', {
    months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
    weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
        '_'
    ),
    weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
    weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
    meridiemParse: /vm|nm/i,
    isPM: function (input) {
        return /^nm$/i.test(input);
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 12) {
            return isLower ? 'vm' : 'VM';
        } else {
            return isLower ? 'nm' : 'NM';
        }
    },
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Vandag om] LT',
        nextDay: '[MÃ´re om] LT',
        nextWeek: 'dddd [om] LT',
        lastDay: '[Gister om] LT',
        lastWeek: '[Laas] dddd [om] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'oor %s',
        past: '%s gelede',
        s: "'n paar sekondes",
        ss: '%d sekondes',
        m: "'n minuut",
        mm: '%d minute',
        h: "'n uur",
        hh: '%d ure',
        d: "'n dag",
        dd: '%d dae',
        M: "'n maand",
        MM: '%d maande',
        y: "'n jaar",
        yy: '%d jaar',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function (number) {
        return (
            number +
            (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
        ); // Thanks to Joris RÃ¶ling : https://github.com/jjupiter
    },
    week: {
        dow: 1, // Maandag is die eerste dag van die week.
        doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Algeria) [ar-dz]
//! author : Amine Roukh: https://github.com/Amine27
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi
//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem

import moment from '../moment';

var pluralForm = function (n) {
        return n === 0
            ? 0
            : n === 1
            ? 1
            : n === 2
            ? 2
            : n % 100 >= 3 && n % 100 <= 10
            ? 3
            : n % 100 >= 11
            ? 4
            : 5;
    },
    plurals = {
        s: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
            'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
            '%d Ø«ÙˆØ§Ù†',
            '%d Ø«Ø§Ù†ÙŠØ©',
            '%d Ø«Ø§Ù†ÙŠØ©',
        ],
        m: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
            'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
            '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
        ],
        h: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
            'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
            '%d Ø³Ø§Ø¹Ø§Øª',
            '%d Ø³Ø§Ø¹Ø©',
            '%d Ø³Ø§Ø¹Ø©',
        ],
        d: [
            'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
            'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
            ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
            '%d Ø£ÙŠØ§Ù…',
            '%d ÙŠÙˆÙ…Ù‹Ø§',
            '%d ÙŠÙˆÙ…',
        ],
        M: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
            'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
            ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
            '%d Ø£Ø´Ù‡Ø±',
            '%d Ø´Ù‡Ø±Ø§',
            '%d Ø´Ù‡Ø±',
        ],
        y: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
            'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
            ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
            '%d Ø£Ø¹ÙˆØ§Ù…',
            '%d Ø¹Ø§Ù…Ù‹Ø§',
            '%d Ø¹Ø§Ù…',
        ],
    },
    pluralize = function (u) {
        return function (number, withoutSuffix, string, isFuture) {
            var f = pluralForm(number),
                str = plurals[u][pluralForm(number)];
            if (f === 2) {
                str = str[withoutSuffix ? 0 : 1];
            }
            return str.replace(/%d/i, number);
        };
    },
    months = [
        'Ø¬Ø§Ù†ÙÙŠ',
        'ÙÙŠÙØ±ÙŠ',
        'Ù…Ø§Ø±Ø³',
        'Ø£ÙØ±ÙŠÙ„',
        'Ù…Ø§ÙŠ',
        'Ø¬ÙˆØ§Ù†',
        'Ø¬ÙˆÙŠÙ„ÙŠØ©',
        'Ø£ÙˆØª',
        'Ø³Ø¨ØªÙ…Ø¨Ø±',
        'Ø£ÙƒØªÙˆØ¨Ø±',
        'Ù†ÙˆÙÙ…Ø¨Ø±',
        'Ø¯ÙŠØ³Ù…Ø¨Ø±',
    ];

export default moment.defineLocale('ar-dz', {
    months: months,
    monthsShort: months,
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'D/\u200FM/\u200FYYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Øµ|Ù…/,
    isPM: function (input) {
        return 'Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Øµ';
        } else {
            return 'Ù…';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ø¨Ø¹Ø¯ %s',
        past: 'Ù…Ù†Ø° %s',
        s: pluralize('s'),
        ss: pluralize('s'),
        m: pluralize('m'),
        mm: pluralize('m'),
        h: pluralize('h'),
        hh: pluralize('h'),
        d: pluralize('d'),
        dd: pluralize('d'),
        M: pluralize('M'),
        MM: pluralize('M'),
        y: pluralize('y'),
        yy: pluralize('y'),
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Kuwait) [ar-kw]
//! author : Nusret Parlak: https://github.com/nusretparlak

import moment from '../moment';

export default moment.defineLocale('ar-kw', {
    months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥ØªÙ†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø§Ø­Ø¯_Ø§ØªÙ†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÙÙŠ %s',
        past: 'Ù…Ù†Ø° %s',
        s: 'Ø«ÙˆØ§Ù†',
        ss: '%d Ø«Ø§Ù†ÙŠØ©',
        m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
        mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
        h: 'Ø³Ø§Ø¹Ø©',
        hh: '%d Ø³Ø§Ø¹Ø§Øª',
        d: 'ÙŠÙˆÙ…',
        dd: '%d Ø£ÙŠØ§Ù…',
        M: 'Ø´Ù‡Ø±',
        MM: '%d Ø£Ø´Ù‡Ø±',
        y: 'Ø³Ù†Ø©',
        yy: '%d Ø³Ù†ÙˆØ§Øª',
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Lybia) [ar-ly]
//! author : Ali Hmer: https://github.com/kikoanis

import moment from '../moment';

var symbolMap = {
        1: '1',
        2: '2',
        3: '3',
        4: '4',
        5: '5',
        6: '6',
        7: '7',
        8: '8',
        9: '9',
        0: '0',
    },
    pluralForm = function (n) {
        return n === 0
            ? 0
            : n === 1
            ? 1
            : n === 2
            ? 2
            : n % 100 >= 3 && n % 100 <= 10
            ? 3
            : n % 100 >= 11
            ? 4
            : 5;
    },
    plurals = {
        s: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
            'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
            '%d Ø«ÙˆØ§Ù†',
            '%d Ø«Ø§Ù†ÙŠØ©',
            '%d Ø«Ø§Ù†ÙŠØ©',
        ],
        m: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
            'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
            '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
        ],
        h: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
            'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
            '%d Ø³Ø§Ø¹Ø§Øª',
            '%d Ø³Ø§Ø¹Ø©',
            '%d Ø³Ø§Ø¹Ø©',
        ],
        d: [
            'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
            'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
            ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
            '%d Ø£ÙŠØ§Ù…',
            '%d ÙŠÙˆÙ…Ù‹Ø§',
            '%d ÙŠÙˆÙ…',
        ],
        M: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
            'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
            ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
            '%d Ø£Ø´Ù‡Ø±',
            '%d Ø´Ù‡Ø±Ø§',
            '%d Ø´Ù‡Ø±',
        ],
        y: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
            'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
            ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
            '%d Ø£Ø¹ÙˆØ§Ù…',
            '%d Ø¹Ø§Ù…Ù‹Ø§',
            '%d Ø¹Ø§Ù…',
        ],
    },
    pluralize = function (u) {
        return function (number, withoutSuffix, string, isFuture) {
            var f = pluralForm(number),
                str = plurals[u][pluralForm(number)];
            if (f === 2) {
                str = str[withoutSuffix ? 0 : 1];
            }
            return str.replace(/%d/i, number);
        };
    },
    months = [
        'ÙŠÙ†Ø§ÙŠØ±',
        'ÙØ¨Ø±Ø§ÙŠØ±',
        'Ù…Ø§Ø±Ø³',
        'Ø£Ø¨Ø±ÙŠÙ„',
        'Ù…Ø§ÙŠÙˆ',
        'ÙŠÙˆÙ†ÙŠÙˆ',
        'ÙŠÙˆÙ„ÙŠÙˆ',
        'Ø£ØºØ³Ø·Ø³',
        'Ø³Ø¨ØªÙ…Ø¨Ø±',
        'Ø£ÙƒØªÙˆØ¨Ø±',
        'Ù†ÙˆÙÙ…Ø¨Ø±',
        'Ø¯ÙŠØ³Ù…Ø¨Ø±',
    ];

export default moment.defineLocale('ar-ly', {
    months: months,
    monthsShort: months,
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'D/\u200FM/\u200FYYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Øµ|Ù…/,
    isPM: function (input) {
        return 'Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Øµ';
        } else {
            return 'Ù…';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ø¨Ø¹Ø¯ %s',
        past: 'Ù…Ù†Ø° %s',
        s: pluralize('s'),
        ss: pluralize('s'),
        m: pluralize('m'),
        mm: pluralize('m'),
        h: pluralize('h'),
        hh: pluralize('h'),
        d: pluralize('d'),
        dd: pluralize('d'),
        M: pluralize('M'),
        MM: pluralize('M'),
        y: pluralize('y'),
        yy: pluralize('y'),
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Morocco) [ar-ma]
//! author : ElFadili Yassine : https://github.com/ElFadiliY
//! author : Abdel Said : https://github.com/abdelsaid

import moment from '../moment';

export default moment.defineLocale('ar-ma', {
    months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø§Ø­Ø¯_Ø§Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÙÙŠ %s',
        past: 'Ù…Ù†Ø° %s',
        s: 'Ø«ÙˆØ§Ù†',
        ss: '%d Ø«Ø§Ù†ÙŠØ©',
        m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
        mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
        h: 'Ø³Ø§Ø¹Ø©',
        hh: '%d Ø³Ø§Ø¹Ø§Øª',
        d: 'ÙŠÙˆÙ…',
        dd: '%d Ø£ÙŠØ§Ù…',
        M: 'Ø´Ù‡Ø±',
        MM: '%d Ø£Ø´Ù‡Ø±',
        y: 'Ø³Ù†Ø©',
        yy: '%d Ø³Ù†ÙˆØ§Øª',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Saudi Arabia) [ar-sa]
//! author : Suhail Alkowaileet : https://github.com/xsoh

import moment from '../moment';

var symbolMap = {
        1: 'Ù¡',
        2: 'Ù¢',
        3: 'Ù£',
        4: 'Ù¤',
        5: 'Ù¥',
        6: 'Ù¦',
        7: 'Ù§',
        8: 'Ù¨',
        9: 'Ù©',
        0: 'Ù ',
    },
    numberMap = {
        'Ù¡': '1',
        'Ù¢': '2',
        'Ù£': '3',
        'Ù¤': '4',
        'Ù¥': '5',
        'Ù¦': '6',
        'Ù§': '7',
        'Ù¨': '8',
        'Ù©': '9',
        'Ù ': '0',
    };

export default moment.defineLocale('ar-sa', {
    months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Øµ|Ù…/,
    isPM: function (input) {
        return 'Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Øµ';
        } else {
            return 'Ù…';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÙÙŠ %s',
        past: 'Ù…Ù†Ø° %s',
        s: 'Ø«ÙˆØ§Ù†',
        ss: '%d Ø«Ø§Ù†ÙŠØ©',
        m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
        mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
        h: 'Ø³Ø§Ø¹Ø©',
        hh: '%d Ø³Ø§Ø¹Ø§Øª',
        d: 'ÙŠÙˆÙ…',
        dd: '%d Ø£ÙŠØ§Ù…',
        M: 'Ø´Ù‡Ø±',
        MM: '%d Ø£Ø´Ù‡Ø±',
        y: 'Ø³Ù†Ø©',
        yy: '%d Ø³Ù†ÙˆØ§Øª',
    },
    preparse: function (string) {
        return string
            .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                return numberMap[match];
            })
            .replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale  :  Arabic (Tunisia) [ar-tn]
//! author : Nader Toukabri : https://github.com/naderio

import moment from '../moment';

export default moment.defineLocale('ar-tn', {
    months: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÙÙŠ %s',
        past: 'Ù…Ù†Ø° %s',
        s: 'Ø«ÙˆØ§Ù†',
        ss: '%d Ø«Ø§Ù†ÙŠØ©',
        m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
        mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
        h: 'Ø³Ø§Ø¹Ø©',
        hh: '%d Ø³Ø§Ø¹Ø§Øª',
        d: 'ÙŠÙˆÙ…',
        dd: '%d Ø£ÙŠØ§Ù…',
        M: 'Ø´Ù‡Ø±',
        MM: '%d Ø£Ø´Ù‡Ø±',
        y: 'Ø³Ù†Ø©',
        yy: '%d Ø³Ù†ÙˆØ§Øª',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic [ar]
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi

import moment from '../moment';

var symbolMap = {
        1: 'Ù¡',
        2: 'Ù¢',
        3: 'Ù£',
        4: 'Ù¤',
        5: 'Ù¥',
        6: 'Ù¦',
        7: 'Ù§',
        8: 'Ù¨',
        9: 'Ù©',
        0: 'Ù ',
    },
    numberMap = {
        'Ù¡': '1',
        'Ù¢': '2',
        'Ù£': '3',
        'Ù¤': '4',
        'Ù¥': '5',
        'Ù¦': '6',
        'Ù§': '7',
        'Ù¨': '8',
        'Ù©': '9',
        'Ù ': '0',
    },
    pluralForm = function (n) {
        return n === 0
            ? 0
            : n === 1
            ? 1
            : n === 2
            ? 2
            : n % 100 >= 3 && n % 100 <= 10
            ? 3
            : n % 100 >= 11
            ? 4
            : 5;
    },
    plurals = {
        s: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
            'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
            '%d Ø«ÙˆØ§Ù†',
            '%d Ø«Ø§Ù†ÙŠØ©',
            '%d Ø«Ø§Ù†ÙŠØ©',
        ],
        m: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
            'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
            '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
        ],
        h: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
            'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
            '%d Ø³Ø§Ø¹Ø§Øª',
            '%d Ø³Ø§Ø¹Ø©',
            '%d Ø³Ø§Ø¹Ø©',
        ],
        d: [
            'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
            'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
            ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
            '%d Ø£ÙŠØ§Ù…',
            '%d ÙŠÙˆÙ…Ù‹Ø§',
            '%d ÙŠÙˆÙ…',
        ],
        M: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
            'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
            ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
            '%d Ø£Ø´Ù‡Ø±',
            '%d Ø´Ù‡Ø±Ø§',
            '%d Ø´Ù‡Ø±',
        ],
        y: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
            'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
            ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
            '%d Ø£Ø¹ÙˆØ§Ù…',
            '%d Ø¹Ø§Ù…Ù‹Ø§',
            '%d Ø¹Ø§Ù…',
        ],
    },
    pluralize = function (u) {
        return function (number, withoutSuffix, string, isFuture) {
            var f = pluralForm(number),
                str = plurals[u][pluralForm(number)];
            if (f === 2) {
                str = str[withoutSuffix ? 0 : 1];
            }
            return str.replace(/%d/i, number);
        };
    },
    months = [
        'ÙŠÙ†Ø§ÙŠØ±',
        'ÙØ¨Ø±Ø§ÙŠØ±',
        'Ù…Ø§Ø±Ø³',
        'Ø£Ø¨Ø±ÙŠÙ„',
        'Ù…Ø§ÙŠÙˆ',
        'ÙŠÙˆÙ†ÙŠÙˆ',
        'ÙŠÙˆÙ„ÙŠÙˆ',
        'Ø£ØºØ³Ø·Ø³',
        'Ø³Ø¨ØªÙ…Ø¨Ø±',
        'Ø£ÙƒØªÙˆØ¨Ø±',
        'Ù†ÙˆÙÙ…Ø¨Ø±',
        'Ø¯ÙŠØ³Ù…Ø¨Ø±',
    ];

export default moment.defineLocale('ar', {
    months: months,
    monthsShort: months,
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'D/\u200FM/\u200FYYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Øµ|Ù…/,
    isPM: function (input) {
        return 'Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Øµ';
        } else {
            return 'Ù…';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ø¨Ø¹Ø¯ %s',
        past: 'Ù…Ù†Ø° %s',
        s: pluralize('s'),
        ss: pluralize('s'),
        m: pluralize('m'),
        mm: pluralize('m'),
        h: pluralize('h'),
        hh: pluralize('h'),
        d: pluralize('d'),
        dd: pluralize('d'),
        M: pluralize('M'),
        MM: pluralize('M'),
        y: pluralize('y'),
        yy: pluralize('y'),
    },
    preparse: function (string) {
        return string
            .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                return numberMap[match];
            })
            .replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Azerbaijani [az]
//! author : topchiyev : https://github.com/topchiyev

import moment from '../moment';

var suffixes = {
    1: '-inci',
    5: '-inci',
    8: '-inci',
    70: '-inci',
    80: '-inci',
    2: '-nci',
    7: '-nci',
    20: '-nci',
    50: '-nci',
    3: '-Ã¼ncÃ¼',
    4: '-Ã¼ncÃ¼',
    100: '-Ã¼ncÃ¼',
    6: '-ncÄ±',
    9: '-uncu',
    10: '-uncu',
    30: '-uncu',
    60: '-Ä±ncÄ±',
    90: '-Ä±ncÄ±',
};

export default moment.defineLocale('az', {
    months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
        '_'
    ),
    monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
    weekdays: 'Bazar_Bazar ertÉ™si_Ã‡É™rÅŸÉ™nbÉ™ axÅŸamÄ±_Ã‡É™rÅŸÉ™nbÉ™_CÃ¼mÉ™ axÅŸamÄ±_CÃ¼mÉ™_ÅžÉ™nbÉ™'.split(
        '_'
    ),
    weekdaysShort: 'Baz_BzE_Ã‡Ax_Ã‡É™r_CAx_CÃ¼m_ÅžÉ™n'.split('_'),
    weekdaysMin: 'Bz_BE_Ã‡A_Ã‡É™_CA_CÃ¼_ÅžÉ™'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[bugÃ¼n saat] LT',
        nextDay: '[sabah saat] LT',
        nextWeek: '[gÉ™lÉ™n hÉ™ftÉ™] dddd [saat] LT',
        lastDay: '[dÃ¼nÉ™n] LT',
        lastWeek: '[keÃ§É™n hÉ™ftÉ™] dddd [saat] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s sonra',
        past: '%s É™vvÉ™l',
        s: 'bir neÃ§É™ saniyÉ™',
        ss: '%d saniyÉ™',
        m: 'bir dÉ™qiqÉ™',
        mm: '%d dÉ™qiqÉ™',
        h: 'bir saat',
        hh: '%d saat',
        d: 'bir gÃ¼n',
        dd: '%d gÃ¼n',
        M: 'bir ay',
        MM: '%d ay',
        y: 'bir il',
        yy: '%d il',
    },
    meridiemParse: /gecÉ™|sÉ™hÉ™r|gÃ¼ndÃ¼z|axÅŸam/,
    isPM: function (input) {
        return /^(gÃ¼ndÃ¼z|axÅŸam)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'gecÉ™';
        } else if (hour < 12) {
            return 'sÉ™hÉ™r';
        } else if (hour < 17) {
            return 'gÃ¼ndÃ¼z';
        } else {
            return 'axÅŸam';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ä±ncÄ±|inci|nci|Ã¼ncÃ¼|ncÄ±|uncu)/,
    ordinal: function (number) {
        if (number === 0) {
            // special case for zero
            return number + '-Ä±ncÄ±';
        }
        var a = number % 10,
            b = (number % 100) - a,
            c = number >= 100 ? 100 : null;
        return number + (suffixes[a] || suffixes[b] || suffixes[c]);
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Belarusian [be]
//! author : Dmitry Demidov : https://github.com/demidov91
//! author: Praleska: http://praleska.pro/
//! Author : Menelion ElensÃºle : https://github.com/Oire

import moment from '../moment';

function plural(word, num) {
    var forms = word.split('_');
    return num % 10 === 1 && num % 100 !== 11
        ? forms[0]
        : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
        ? forms[1]
        : forms[2];
}
function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
        ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
        mm: withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½',
        hh: withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½',
        dd: 'Ð´Ð·ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð·Ñ‘Ð½',
        MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ñ‹_Ð¼ÐµÑÑÑ†Ð°Ñž',
        yy: 'Ð³Ð¾Ð´_Ð³Ð°Ð´Ñ‹_Ð³Ð°Ð´Ð¾Ñž',
    };
    if (key === 'm') {
        return withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ';
    } else if (key === 'h') {
        return withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ';
    } else {
        return number + ' ' + plural(format[key], +number);
    }
}

export default moment.defineLocale('be', {
    months: {
        format: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½Ñ_Ð»ÑŽÑ‚Ð°Ð³Ð°_ÑÐ°ÐºÐ°Ð²Ñ–ÐºÐ°_ÐºÑ€Ð°ÑÐ°Ð²Ñ–ÐºÐ°_Ñ‚Ñ€Ð°ÑžÐ½Ñ_Ñ‡ÑÑ€Ð²ÐµÐ½Ñ_Ð»Ñ–Ð¿ÐµÐ½Ñ_Ð¶Ð½Ñ–ÑžÐ½Ñ_Ð²ÐµÑ€Ð°ÑÐ½Ñ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–ÐºÐ°_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´Ð°_ÑÐ½ÐµÐ¶Ð½Ñ'.split(
            '_'
        ),
        standalone: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ñ‹_ÑÐ°ÐºÐ°Ð²Ñ–Ðº_ÐºÑ€Ð°ÑÐ°Ð²Ñ–Ðº_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÑÑ€Ð²ÐµÐ½ÑŒ_Ð»Ñ–Ð¿ÐµÐ½ÑŒ_Ð¶Ð½Ñ–Ð²ÐµÐ½ÑŒ_Ð²ÐµÑ€Ð°ÑÐµÐ½ÑŒ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–Ðº_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´_ÑÐ½ÐµÐ¶Ð°Ð½ÑŒ'.split(
            '_'
        ),
    },
    monthsShort: 'ÑÑ‚ÑƒÐ´_Ð»ÑŽÑ‚_ÑÐ°Ðº_ÐºÑ€Ð°Ñ_Ñ‚Ñ€Ð°Ð²_Ñ‡ÑÑ€Ð²_Ð»Ñ–Ð¿_Ð¶Ð½Ñ–Ð²_Ð²ÐµÑ€_ÐºÐ°ÑÑ‚_Ð»Ñ–ÑÑ‚_ÑÐ½ÐµÐ¶'.split(
        '_'
    ),
    weekdays: {
        format: 'Ð½ÑÐ´Ð·ÐµÐ»ÑŽ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ñƒ_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ñƒ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
            '_'
        ),
        standalone: 'Ð½ÑÐ´Ð·ÐµÐ»Ñ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ð°_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ð°_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        isFormat: /\[ ?[Ð£ÑƒÑž] ?(?:Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½ÑƒÑŽ)? ?\] ?dddd/,
    },
    weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
    weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY Ð³.',
        LLL: 'D MMMM YYYY Ð³., HH:mm',
        LLLL: 'dddd, D MMMM YYYY Ð³., HH:mm',
    },
    calendar: {
        sameDay: '[Ð¡Ñ‘Ð½Ð½Ñ Ñž] LT',
        nextDay: '[Ð—Ð°ÑžÑ‚Ñ€Ð° Ñž] LT',
        lastDay: '[Ð£Ñ‡Ð¾Ñ€Ð° Ñž] LT',
        nextWeek: function () {
            return '[Ð£] dddd [Ñž] LT';
        },
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                case 5:
                case 6:
                    return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ] dddd [Ñž] LT';
                case 1:
                case 2:
                case 4:
                    return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»Ñ‹] dddd [Ñž] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð¿Ñ€Ð°Ð· %s',
        past: '%s Ñ‚Ð°Ð¼Ñƒ',
        s: 'Ð½ÐµÐºÐ°Ð»ÑŒÐºÑ– ÑÐµÐºÑƒÐ½Ð´',
        m: relativeTimeWithPlural,
        mm: relativeTimeWithPlural,
        h: relativeTimeWithPlural,
        hh: relativeTimeWithPlural,
        d: 'Ð´Ð·ÐµÐ½ÑŒ',
        dd: relativeTimeWithPlural,
        M: 'Ð¼ÐµÑÑÑ†',
        MM: relativeTimeWithPlural,
        y: 'Ð³Ð¾Ð´',
        yy: relativeTimeWithPlural,
    },
    meridiemParse: /Ð½Ð¾Ñ‡Ñ‹|Ñ€Ð°Ð½Ñ–Ñ†Ñ‹|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°/,
    isPM: function (input) {
        return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'Ð½Ð¾Ñ‡Ñ‹';
        } else if (hour < 12) {
            return 'Ñ€Ð°Ð½Ñ–Ñ†Ñ‹';
        } else if (hour < 17) {
            return 'Ð´Ð½Ñ';
        } else {
            return 'Ð²ÐµÑ‡Ð°Ñ€Ð°';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ñ–|Ñ‹|Ð³Ð°)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'M':
            case 'd':
            case 'DDD':
            case 'w':
            case 'W':
                return (number % 10 === 2 || number % 10 === 3) &&
                    number % 100 !== 12 &&
                    number % 100 !== 13
                    ? number + '-Ñ–'
                    : number + '-Ñ‹';
            case 'D':
                return number + '-Ð³Ð°';
            default:
                return number;
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Bulgarian [bg]
//! author : Krasen Borisov : https://github.com/kraz

import moment from '../moment';

export default moment.defineLocale('bg', {
    months: 'ÑÐ½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
        '_'
    ),
    monthsShort: 'ÑÐ½Ñƒ_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
    weekdays: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÑÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÑŠÑ€Ñ‚ÑŠÐº_Ð¿ÐµÑ‚ÑŠÐº_ÑÑŠÐ±Ð¾Ñ‚Ð°'.split(
        '_'
    ),
    weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ñ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÑŠÐ±'.split('_'),
    weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'D.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY H:mm',
        LLLL: 'dddd, D MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[Ð”Ð½ÐµÑ Ð²] LT',
        nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²] LT',
        nextWeek: 'dddd [Ð²] LT',
        lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                case 6:
                    return '[ÐœÐ¸Ð½Ð°Ð»Ð°Ñ‚Ð°] dddd [Ð²] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[ÐœÐ¸Ð½Ð°Ð»Ð¸Ñ] dddd [Ð²] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÑÐ»ÐµÐ´ %s',
        past: 'Ð¿Ñ€ÐµÐ´Ð¸ %s',
        s: 'Ð½ÑÐºÐ¾Ð»ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
        ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
        m: 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
        mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
        h: 'Ñ‡Ð°Ñ',
        hh: '%d Ñ‡Ð°ÑÐ°',
        d: 'Ð´ÐµÐ½',
        dd: '%d Ð´ÐµÐ½Ð°',
        w: 'ÑÐµÐ´Ð¼Ð¸Ñ†Ð°',
        ww: '%d ÑÐµÐ´Ð¼Ð¸Ñ†Ð¸',
        M: 'Ð¼ÐµÑÐµÑ†',
        MM: '%d Ð¼ÐµÑÐµÑ†Ð°',
        y: 'Ð³Ð¾Ð´Ð¸Ð½Ð°',
        yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
    ordinal: function (number) {
        var lastDigit = number % 10,
            last2Digits = number % 100;
        if (number === 0) {
            return number + '-ÐµÐ²';
        } else if (last2Digits === 0) {
            return number + '-ÐµÐ½';
        } else if (last2Digits > 10 && last2Digits < 20) {
            return number + '-Ñ‚Ð¸';
        } else if (lastDigit === 1) {
            return number + '-Ð²Ð¸';
        } else if (lastDigit === 2) {
            return number + '-Ñ€Ð¸';
        } else if (lastDigit === 7 || lastDigit === 8) {
            return number + '-Ð¼Ð¸';
        } else {
            return number + '-Ñ‚Ð¸';
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Bambara [bm]
//! author : Estelle Comment : https://github.com/estellecomment
// Language contact person : Abdoufata Kane : https://github.com/abdoufata

import moment from '../moment';

export default moment.defineLocale('bm', {
    months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_MÉ›kalo_ZuwÉ›nkalo_Zuluyekalo_Utikalo_SÉ›tanburukalo_É”kutÉ”burukalo_Nowanburukalo_Desanburukalo'.split(
        '_'
    ),
    monthsShort: 'Zan_Few_Mar_Awi_MÉ›_Zuw_Zul_Uti_SÉ›t_É”ku_Now_Des'.split('_'),
    weekdays: 'Kari_NtÉ›nÉ›n_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
    weekdaysShort: 'Kar_NtÉ›_Tar_Ara_Ala_Jum_Sib'.split('_'),
    weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'MMMM [tile] D [san] YYYY',
        LLL: 'MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
        LLLL: 'dddd MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
    },
    calendar: {
        sameDay: '[Bi lÉ›rÉ›] LT',
        nextDay: '[Sini lÉ›rÉ›] LT',
        nextWeek: 'dddd [don lÉ›rÉ›] LT',
        lastDay: '[Kunu lÉ›rÉ›] LT',
        lastWeek: 'dddd [tÉ›mÉ›nen lÉ›rÉ›] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s kÉ”nÉ”',
        past: 'a bÉ› %s bÉ”',
        s: 'sanga dama dama',
        ss: 'sekondi %d',
        m: 'miniti kelen',
        mm: 'miniti %d',
        h: 'lÉ›rÉ› kelen',
        hh: 'lÉ›rÉ› %d',
        d: 'tile kelen',
        dd: 'tile %d',
        M: 'kalo kelen',
        MM: 'kalo %d',
        y: 'san kelen',
        yy: 'san %d',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Bengali (Bangladesh) [bn-bd]
//! author : Asraf Hossain Patoary : https://github.com/ashwoolford

import moment from '../moment';

var symbolMap = {
        1: 'à§§',
        2: 'à§¨',
        3: 'à§©',
        4: 'à§ª',
        5: 'à§«',
        6: 'à§¬',
        7: 'à§­',
        8: 'à§®',
        9: 'à§¯',
        0: 'à§¦',
    },
    numberMap = {
        'à§§': '1',
        'à§¨': '2',
        'à§©': '3',
        'à§ª': '4',
        'à§«': '5',
        'à§¬': '6',
        'à§­': '7',
        'à§®': '8',
        'à§¯': '9',
        'à§¦': '0',
    };

export default moment.defineLocale('bn-bd', {
    months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
        '_'
    ),
    monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
        '_'
    ),
    weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
        '_'
    ),
    weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
    weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¦¸à¦®à§Ÿ',
        LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
    },
    calendar: {
        sameDay: '[à¦†à¦œ] LT',
        nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
        lastWeek: '[à¦—à¦¤] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à¦ªà¦°à§‡',
        past: '%s à¦†à¦—à§‡',
        s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
        ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
        m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
        mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
        h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
        hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
        d: 'à¦à¦• à¦¦à¦¿à¦¨',
        dd: '%d à¦¦à¦¿à¦¨',
        M: 'à¦à¦• à¦®à¦¾à¦¸',
        MM: '%d à¦®à¦¾à¦¸',
        y: 'à¦à¦• à¦¬à¦›à¦°',
        yy: '%d à¦¬à¦›à¦°',
    },
    preparse: function (string) {
        return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },

    meridiemParse: /à¦°à¦¾à¦¤|à¦­à§‹à¦°|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦¸à¦¨à§à¦§à§à¦¯à¦¾|à¦°à¦¾à¦¤/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¦°à¦¾à¦¤') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¦­à§‹à¦°') {
            return hour;
        } else if (meridiem === 'à¦¸à¦•à¦¾à¦²') {
            return hour;
        } else if (meridiem === 'à¦¦à§à¦ªà§à¦°') {
            return hour >= 3 ? hour : hour + 12;
        } else if (meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²') {
            return hour + 12;
        } else if (meridiem === 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾') {
            return hour + 12;
        }
    },

    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¦°à¦¾à¦¤';
        } else if (hour < 6) {
            return 'à¦­à§‹à¦°';
        } else if (hour < 12) {
            return 'à¦¸à¦•à¦¾à¦²';
        } else if (hour < 15) {
            return 'à¦¦à§à¦ªà§à¦°';
        } else if (hour < 18) {
            return 'à¦¬à¦¿à¦•à¦¾à¦²';
        } else if (hour < 20) {
            return 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾';
        } else {
            return 'à¦°à¦¾à¦¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Bengali [bn]
//! author : Kaushik Gandhi : https://github.com/kaushikgandhi

import moment from '../moment';

var symbolMap = {
        1: 'à§§',
        2: 'à§¨',
        3: 'à§©',
        4: 'à§ª',
        5: 'à§«',
        6: 'à§¬',
        7: 'à§­',
        8: 'à§®',
        9: 'à§¯',
        0: 'à§¦',
    },
    numberMap = {
        'à§§': '1',
        'à§¨': '2',
        'à§©': '3',
        'à§ª': '4',
        'à§«': '5',
        'à§¬': '6',
        'à§­': '7',
        'à§®': '8',
        'à§¯': '9',
        'à§¦': '0',
    };

export default moment.defineLocale('bn', {
    months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
        '_'
    ),
    monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
        '_'
    ),
    weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
        '_'
    ),
    weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
    weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¦¸à¦®à§Ÿ',
        LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
    },
    calendar: {
        sameDay: '[à¦†à¦œ] LT',
        nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
        lastWeek: '[à¦—à¦¤] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à¦ªà¦°à§‡',
        past: '%s à¦†à¦—à§‡',
        s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
        ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
        m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
        mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
        h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
        hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
        d: 'à¦à¦• à¦¦à¦¿à¦¨',
        dd: '%d à¦¦à¦¿à¦¨',
        M: 'à¦à¦• à¦®à¦¾à¦¸',
        MM: '%d à¦®à¦¾à¦¸',
        y: 'à¦à¦• à¦¬à¦›à¦°',
        yy: '%d à¦¬à¦›à¦°',
    },
    preparse: function (string) {
        return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à¦°à¦¾à¦¤|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦°à¦¾à¦¤/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (
            (meridiem === 'à¦°à¦¾à¦¤' && hour >= 4) ||
            (meridiem === 'à¦¦à§à¦ªà§à¦°' && hour < 5) ||
            meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²'
        ) {
            return hour + 12;
        } else {
            return hour;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¦°à¦¾à¦¤';
        } else if (hour < 10) {
            return 'à¦¸à¦•à¦¾à¦²';
        } else if (hour < 17) {
            return 'à¦¦à§à¦ªà§à¦°';
        } else if (hour < 20) {
            return 'à¦¬à¦¿à¦•à¦¾à¦²';
        } else {
            return 'à¦°à¦¾à¦¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tibetan [bo]
//! author : Thupten N. Chakrishar : https://github.com/vajradog

import moment from '../moment';

var symbolMap = {
        1: 'à¼¡',
        2: 'à¼¢',
        3: 'à¼£',
        4: 'à¼¤',
        5: 'à¼¥',
        6: 'à¼¦',
        7: 'à¼§',
        8: 'à¼¨',
        9: 'à¼©',
        0: 'à¼ ',
    },
    numberMap = {
        'à¼¡': '1',
        'à¼¢': '2',
        'à¼£': '3',
        'à¼¤': '4',
        'à¼¥': '5',
        'à¼¦': '6',
        'à¼§': '7',
        'à¼¨': '8',
        'à¼©': '9',
        'à¼ ': '0',
    };

export default moment.defineLocale('bo', {
    months: 'à½Ÿà¾³à¼‹à½–à¼‹à½‘à½„à¼‹à½”à½¼_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½‰à½²à½¦à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½¦à½´à½˜à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½žà½²à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½£à¾”à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à¾²à½´à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½‘à½´à½“à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½¢à¾’à¾±à½‘à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à½‚à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½…à½²à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½‰à½²à½¦à¼‹à½”'.split(
        '_'
    ),
    monthsShort: 'à½Ÿà¾³à¼‹1_à½Ÿà¾³à¼‹2_à½Ÿà¾³à¼‹3_à½Ÿà¾³à¼‹4_à½Ÿà¾³à¼‹5_à½Ÿà¾³à¼‹6_à½Ÿà¾³à¼‹7_à½Ÿà¾³à¼‹8_à½Ÿà¾³à¼‹9_à½Ÿà¾³à¼‹10_à½Ÿà¾³à¼‹11_à½Ÿà¾³à¼‹12'.split(
        '_'
    ),
    monthsShortRegex: /^(à½Ÿà¾³à¼‹\d{1,2})/,
    monthsParseExact: true,
    weekdays: 'à½‚à½Ÿà½ à¼‹à½‰à½²à¼‹à½˜à¼‹_à½‚à½Ÿà½ à¼‹à½Ÿà¾³à¼‹à½–à¼‹_à½‚à½Ÿà½ à¼‹à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½‚à½Ÿà½ à¼‹à½£à¾·à½‚à¼‹à½”à¼‹_à½‚à½Ÿà½ à¼‹à½•à½´à½¢à¼‹à½–à½´_à½‚à½Ÿà½ à¼‹à½”à¼‹à½¦à½„à½¦à¼‹_à½‚à½Ÿà½ à¼‹à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
        '_'
    ),
    weekdaysShort: 'à½‰à½²à¼‹à½˜à¼‹_à½Ÿà¾³à¼‹à½–à¼‹_à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½£à¾·à½‚à¼‹à½”à¼‹_à½•à½´à½¢à¼‹à½–à½´_à½”à¼‹à½¦à½„à½¦à¼‹_à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
        '_'
    ),
    weekdaysMin: 'à½‰à½²_à½Ÿà¾³_à½˜à½²à½‚_à½£à¾·à½‚_à½•à½´à½¢_à½¦à½„à½¦_à½¦à¾¤à½ºà½“'.split('_'),
    longDateFormat: {
        LT: 'A h:mm',
        LTS: 'A h:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm',
        LLLL: 'dddd, D MMMM YYYY, A h:mm',
    },
    calendar: {
        sameDay: '[à½‘à½²à¼‹à½¢à½²à½„] LT',
        nextDay: '[à½¦à½„à¼‹à½‰à½²à½“] LT',
        nextWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½¢à¾—à½ºà½¦à¼‹à½˜], LT',
        lastDay: '[à½à¼‹à½¦à½„] LT',
        lastWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½˜à½à½ à¼‹à½˜] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à½£à¼‹',
        past: '%s à½¦à¾”à½“à¼‹à½£',
        s: 'à½£à½˜à¼‹à½¦à½„',
        ss: '%d à½¦à¾à½¢à¼‹à½†à¼',
        m: 'à½¦à¾à½¢à¼‹à½˜à¼‹à½‚à½…à½²à½‚',
        mm: '%d à½¦à¾à½¢à¼‹à½˜',
        h: 'à½†à½´à¼‹à½šà½¼à½‘à¼‹à½‚à½…à½²à½‚',
        hh: '%d à½†à½´à¼‹à½šà½¼à½‘',
        d: 'à½‰à½²à½“à¼‹à½‚à½…à½²à½‚',
        dd: '%d à½‰à½²à½“à¼‹',
        M: 'à½Ÿà¾³à¼‹à½–à¼‹à½‚à½…à½²à½‚',
        MM: '%d à½Ÿà¾³à¼‹à½–',
        y: 'à½£à½¼à¼‹à½‚à½…à½²à½‚',
        yy: '%d à½£à½¼',
    },
    preparse: function (string) {
        return string.replace(/[à¼¡à¼¢à¼£à¼¤à¼¥à¼¦à¼§à¼¨à¼©à¼ ]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à½˜à½šà½“à¼‹à½˜à½¼|à½žà½¼à½‚à½¦à¼‹à½€à½¦|à½‰à½²à½“à¼‹à½‚à½´à½„|à½‘à½‚à½¼à½„à¼‹à½‘à½‚|à½˜à½šà½“à¼‹à½˜à½¼/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (
            (meridiem === 'à½˜à½šà½“à¼‹à½˜à½¼' && hour >= 4) ||
            (meridiem === 'à½‰à½²à½“à¼‹à½‚à½´à½„' && hour < 5) ||
            meridiem === 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚'
        ) {
            return hour + 12;
        } else {
            return hour;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à½˜à½šà½“à¼‹à½˜à½¼';
        } else if (hour < 10) {
            return 'à½žà½¼à½‚à½¦à¼‹à½€à½¦';
        } else if (hour < 17) {
            return 'à½‰à½²à½“à¼‹à½‚à½´à½„';
        } else if (hour < 20) {
            return 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚';
        } else {
            return 'à½˜à½šà½“à¼‹à½˜à½¼';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Breton [br]
//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou

import moment from '../moment';

function relativeTimeWithMutation(number, withoutSuffix, key) {
    var format = {
        mm: 'munutenn',
        MM: 'miz',
        dd: 'devezh',
    };
    return number + ' ' + mutation(format[key], number);
}
function specialMutationForYears(number) {
    switch (lastNumber(number)) {
        case 1:
        case 3:
        case 4:
        case 5:
        case 9:
            return number + ' bloaz';
        default:
            return number + ' vloaz';
    }
}
function lastNumber(number) {
    if (number > 9) {
        return lastNumber(number % 10);
    }
    return number;
}
function mutation(text, number) {
    if (number === 2) {
        return softMutation(text);
    }
    return text;
}
function softMutation(text) {
    var mutationTable = {
        m: 'v',
        b: 'v',
        d: 'z',
    };
    if (mutationTable[text.charAt(0)] === undefined) {
        return text;
    }
    return mutationTable[text.charAt(0)] + text.substring(1);
}

var monthsParse = [
        /^gen/i,
        /^c[Ê¼\']hwe/i,
        /^meu/i,
        /^ebr/i,
        /^mae/i,
        /^(mez|eve)/i,
        /^gou/i,
        /^eos/i,
        /^gwe/i,
        /^her/i,
        /^du/i,
        /^ker/i,
    ],
    monthsRegex = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
    monthsStrictRegex = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
    monthsShortStrictRegex = /^(gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
    fullWeekdaysParse = [
        /^sul/i,
        /^lun/i,
        /^meurzh/i,
        /^merc[Ê¼\']her/i,
        /^yaou/i,
        /^gwener/i,
        /^sadorn/i,
    ],
    shortWeekdaysParse = [
        /^Sul/i,
        /^Lun/i,
        /^Meu/i,
        /^Mer/i,
        /^Yao/i,
        /^Gwe/i,
        /^Sad/i,
    ],
    minWeekdaysParse = [
        /^Su/i,
        /^Lu/i,
        /^Me([^r]|$)/i,
        /^Mer/i,
        /^Ya/i,
        /^Gw/i,
        /^Sa/i,
    ];

export default moment.defineLocale('br', {
    months: 'Genver_CÊ¼hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
        '_'
    ),
    monthsShort: 'Gen_CÊ¼hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
    weekdays: 'Sul_Lun_Meurzh_MercÊ¼her_Yaou_Gwener_Sadorn'.split('_'),
    weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
    weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
    weekdaysParse: minWeekdaysParse,
    fullWeekdaysParse: fullWeekdaysParse,
    shortWeekdaysParse: shortWeekdaysParse,
    minWeekdaysParse: minWeekdaysParse,

    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: monthsStrictRegex,
    monthsShortStrictRegex: monthsShortStrictRegex,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,

    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [a viz] MMMM YYYY',
        LLL: 'D [a viz] MMMM YYYY HH:mm',
        LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Hiziv da] LT',
        nextDay: '[WarcÊ¼hoazh da] LT',
        nextWeek: 'dddd [da] LT',
        lastDay: '[DecÊ¼h da] LT',
        lastWeek: 'dddd [paset da] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'a-benn %s',
        past: '%s Ê¼zo',
        s: 'un nebeud segondennoÃ¹',
        ss: '%d eilenn',
        m: 'ur vunutenn',
        mm: relativeTimeWithMutation,
        h: 'un eur',
        hh: '%d eur',
        d: 'un devezh',
        dd: relativeTimeWithMutation,
        M: 'ur miz',
        MM: relativeTimeWithMutation,
        y: 'ur bloaz',
        yy: specialMutationForYears,
    },
    dayOfMonthOrdinalParse: /\d{1,2}(aÃ±|vet)/,
    ordinal: function (number) {
        var output = number === 1 ? 'aÃ±' : 'vet';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
    meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
    isPM: function (token) {
        return token === 'g.m.';
    },
    meridiem: function (hour, minute, isLower) {
        return hour < 12 ? 'a.m.' : 'g.m.';
    },
});
//! moment.js locale configuration
//! locale : Bosnian [bs]
//! author : Nedim Cholich : https://github.com/frontyard
//! based on (hr) translation by Bojan MarkoviÄ‡

import moment from '../moment';

function translate(number, withoutSuffix, key) {
    var result = number + ' ';
    switch (key) {
        case 'ss':
            if (number === 1) {
                result += 'sekunda';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'sekunde';
            } else {
                result += 'sekundi';
            }
            return result;
        case 'm':
            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
        case 'mm':
            if (number === 1) {
                result += 'minuta';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'minute';
            } else {
                result += 'minuta';
            }
            return result;
        case 'h':
            return withoutSuffix ? 'jedan sat' : 'jednog sata';
        case 'hh':
            if (number === 1) {
                result += 'sat';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'sata';
            } else {
                result += 'sati';
            }
            return result;
        case 'dd':
            if (number === 1) {
                result += 'dan';
            } else {
                result += 'dana';
            }
            return result;
        case 'MM':
            if (number === 1) {
                result += 'mjesec';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'mjeseca';
            } else {
                result += 'mjeseci';
            }
            return result;
        case 'yy':
            if (number === 1) {
                result += 'godina';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'godine';
            } else {
                result += 'godina';
            }
            return result;
    }
}

export default moment.defineLocale('bs', {
    months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
        '_'
    ),
    weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd, D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[danas u] LT',
        nextDay: '[sutra u] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[u] [nedjelju] [u] LT';
                case 3:
                    return '[u] [srijedu] [u] LT';
                case 6:
                    return '[u] [subotu] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[u] dddd [u] LT';
            }
        },
        lastDay: '[juÄer u] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                    return '[proÅ¡lu] dddd [u] LT';
                case 6:
                    return '[proÅ¡le] [subote] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[proÅ¡li] dddd [u] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'prije %s',
        s: 'par sekundi',
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: 'dan',
        dd: translate,
        M: 'mjesec',
        MM: translate,
        y: 'godinu',
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Catalan [ca]
//! author : Juan G. Hurtado : https://github.com/juanghurtado

import moment from '../moment';

export default moment.defineLocale('ca', {
    months: {
        standalone: 'gener_febrer_marÃ§_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
            '_'
        ),
        format: "de gener_de febrer_de marÃ§_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
            '_'
        ),
        isFormat: /D[oD]?(\s)+MMMM/,
    },
    monthsShort: 'gen._febr._marÃ§_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
        '_'
    ),
    weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
    weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM [de] YYYY',
        ll: 'D MMM YYYY',
        LLL: 'D MMMM [de] YYYY [a les] H:mm',
        lll: 'D MMM YYYY, H:mm',
        LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
        llll: 'ddd D MMM YYYY, H:mm',
    },
    calendar: {
        sameDay: function () {
            return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
        },
        nextDay: function () {
            return '[demÃ  a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
        },
        lastDay: function () {
            return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [passat a ' +
                (this.hours() !== 1 ? 'les' : 'la') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: "d'aquÃ­ %s",
        past: 'fa %s',
        s: 'uns segons',
        ss: '%d segons',
        m: 'un minut',
        mm: '%d minuts',
        h: 'una hora',
        hh: '%d hores',
        d: 'un dia',
        dd: '%d dies',
        M: 'un mes',
        MM: '%d mesos',
        y: 'un any',
        yy: '%d anys',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
    ordinal: function (number, period) {
        var output =
            number === 1
                ? 'r'
                : number === 2
                ? 'n'
                : number === 3
                ? 'r'
                : number === 4
                ? 't'
                : 'Ã¨';
        if (period === 'w' || period === 'W') {
            output = 'a';
        }
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Czech [cs]
//! author : petrbela : https://github.com/petrbela

import moment from '../moment';

var months = 'leden_Ãºnor_bÅ™ezen_duben_kvÄ›ten_Äerven_Äervenec_srpen_zÃ¡Å™Ã­_Å™Ã­jen_listopad_prosinec'.split(
        '_'
    ),
    monthsShort = 'led_Ãºno_bÅ™e_dub_kvÄ›_Ävn_Ävc_srp_zÃ¡Å™_Å™Ã­j_lis_pro'.split('_'),
    monthsParse = [
        /^led/i,
        /^Ãºno/i,
        /^bÅ™e/i,
        /^dub/i,
        /^kvÄ›/i,
        /^(Ävn|Äerven$|Äervna)/i,
        /^(Ävc|Äervenec|Äervence)/i,
        /^srp/i,
        /^zÃ¡Å™/i,
        /^Å™Ã­j/i,
        /^lis/i,
        /^pro/i,
    ],
    // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
    // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
    monthsRegex = /^(leden|Ãºnor|bÅ™ezen|duben|kvÄ›ten|Äervenec|Äervence|Äerven|Äervna|srpen|zÃ¡Å™Ã­|Å™Ã­jen|listopad|prosinec|led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i;

function plural(n) {
    return n > 1 && n < 5 && ~~(n / 10) !== 1;
}
function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    switch (key) {
        case 's': // a few seconds / in a few seconds / a few seconds ago
            return withoutSuffix || isFuture ? 'pÃ¡r sekund' : 'pÃ¡r sekundami';
        case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'sekundy' : 'sekund');
            } else {
                return result + 'sekundami';
            }
        case 'm': // a minute / in a minute / a minute ago
            return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'minuty' : 'minut');
            } else {
                return result + 'minutami';
            }
        case 'h': // an hour / in an hour / an hour ago
            return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
        case 'hh': // 9 hours / in 9 hours / 9 hours ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'hodiny' : 'hodin');
            } else {
                return result + 'hodinami';
            }
        case 'd': // a day / in a day / a day ago
            return withoutSuffix || isFuture ? 'den' : 'dnem';
        case 'dd': // 9 days / in 9 days / 9 days ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'dny' : 'dnÃ­');
            } else {
                return result + 'dny';
            }
        case 'M': // a month / in a month / a month ago
            return withoutSuffix || isFuture ? 'mÄ›sÃ­c' : 'mÄ›sÃ­cem';
        case 'MM': // 9 months / in 9 months / 9 months ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'mÄ›sÃ­ce' : 'mÄ›sÃ­cÅ¯');
            } else {
                return result + 'mÄ›sÃ­ci';
            }
        case 'y': // a year / in a year / a year ago
            return withoutSuffix || isFuture ? 'rok' : 'rokem';
        case 'yy': // 9 years / in 9 years / 9 years ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'roky' : 'let');
            } else {
                return result + 'lety';
            }
    }
}

export default moment.defineLocale('cs', {
    months: months,
    monthsShort: monthsShort,
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
    // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
    monthsStrictRegex: /^(leden|ledna|Ãºnora|Ãºnor|bÅ™ezen|bÅ™ezna|duben|dubna|kvÄ›ten|kvÄ›tna|Äervenec|Äervence|Äerven|Äervna|srpen|srpna|zÃ¡Å™Ã­|Å™Ã­jen|Å™Ã­jna|listopadu|listopad|prosinec|prosince)/i,
    monthsShortStrictRegex: /^(led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'nedÄ›le_pondÄ›lÃ­_ÃºterÃ½_stÅ™eda_Ätvrtek_pÃ¡tek_sobota'.split('_'),
    weekdaysShort: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
    weekdaysMin: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd D. MMMM YYYY H:mm',
        l: 'D. M. YYYY',
    },
    calendar: {
        sameDay: '[dnes v] LT',
        nextDay: '[zÃ­tra v] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[v nedÄ›li v] LT';
                case 1:
                case 2:
                    return '[v] dddd [v] LT';
                case 3:
                    return '[ve stÅ™edu v] LT';
                case 4:
                    return '[ve Ätvrtek v] LT';
                case 5:
                    return '[v pÃ¡tek v] LT';
                case 6:
                    return '[v sobotu v] LT';
            }
        },
        lastDay: '[vÄera v] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[minulou nedÄ›li v] LT';
                case 1:
                case 2:
                    return '[minulÃ©] dddd [v] LT';
                case 3:
                    return '[minulou stÅ™edu v] LT';
                case 4:
                case 5:
                    return '[minulÃ½] dddd [v] LT';
                case 6:
                    return '[minulou sobotu v] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'pÅ™ed %s',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Chuvash [cv]
//! author : Anatoly Mironov : https://github.com/mirontoli

import moment from '../moment';

export default moment.defineLocale('cv', {
    months: 'ÐºÓ‘Ñ€Ð»Ð°Ñ‡_Ð½Ð°Ñ€Ó‘Ñ_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€Ñ‚Ð¼Ðµ_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€Ð»Ð°_Ð°Ð²Ó‘Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°ÑˆÑ‚Ð°Ð²'.split(
        '_'
    ),
    monthsShort: 'ÐºÓ‘Ñ€_Ð½Ð°Ñ€_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€_Ð°Ð²Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°Ñˆ'.split('_'),
    weekdays: 'Ð²Ñ‹Ñ€ÑÐ°Ñ€Ð½Ð¸ÐºÑƒÐ½_Ñ‚ÑƒÐ½Ñ‚Ð¸ÐºÑƒÐ½_Ñ‹Ñ‚Ð»Ð°Ñ€Ð¸ÐºÑƒÐ½_ÑŽÐ½ÐºÑƒÐ½_ÐºÓ—Ò«Ð½ÐµÑ€Ð½Ð¸ÐºÑƒÐ½_ÑÑ€Ð½ÐµÐºÑƒÐ½_ÑˆÓ‘Ð¼Ð°Ñ‚ÐºÑƒÐ½'.split(
        '_'
    ),
    weekdaysShort: 'Ð²Ñ‹Ñ€_Ñ‚ÑƒÐ½_Ñ‹Ñ‚Ð»_ÑŽÐ½_ÐºÓ—Ò«_ÑÑ€Ð½_ÑˆÓ‘Ð¼'.split('_'),
    weekdaysMin: 'Ð²Ñ€_Ñ‚Ð½_Ñ‹Ñ‚_ÑŽÐ½_ÐºÒ«_ÑÑ€_ÑˆÐ¼'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD-MM-YYYY',
        LL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—]',
        LLL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
        LLLL: 'dddd, YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
    },
    calendar: {
        sameDay: '[ÐŸÐ°ÑÐ½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        nextDay: '[Ð«Ñ€Ð°Ð½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        lastDay: '[Ó–Ð½ÐµÑ€] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        nextWeek: '[ÒªÐ¸Ñ‚ÐµÑ] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        lastWeek: '[Ð˜Ñ€Ñ‚Ð½Ó—] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        sameElse: 'L',
    },
    relativeTime: {
        future: function (output) {
            var affix = /ÑÐµÑ…ÐµÑ‚$/i.exec(output)
                ? 'Ñ€ÐµÐ½'
                : /Ò«ÑƒÐ»$/i.exec(output)
                ? 'Ñ‚Ð°Ð½'
                : 'Ñ€Ð°Ð½';
            return output + affix;
        },
        past: '%s ÐºÐ°ÑÐ»Ð»Ð°',
        s: 'Ð¿Ó—Ñ€-Ð¸Ðº Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
        ss: '%d Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
        m: 'Ð¿Ó—Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
        mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
        h: 'Ð¿Ó—Ñ€ ÑÐµÑ…ÐµÑ‚',
        hh: '%d ÑÐµÑ…ÐµÑ‚',
        d: 'Ð¿Ó—Ñ€ ÐºÑƒÐ½',
        dd: '%d ÐºÑƒÐ½',
        M: 'Ð¿Ó—Ñ€ ÑƒÐ¹Ó‘Ñ…',
        MM: '%d ÑƒÐ¹Ó‘Ñ…',
        y: 'Ð¿Ó—Ñ€ Ò«ÑƒÐ»',
        yy: '%d Ò«ÑƒÐ»',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-Ð¼Ó—Ñˆ/,
    ordinal: '%d-Ð¼Ó—Ñˆ',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Welsh [cy]
//! author : Robert Allen : https://github.com/robgallen
//! author : https://github.com/ryangreaves

import moment from '../moment';

export default moment.defineLocale('cy', {
    months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
        '_'
    ),
    monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
        '_'
    ),
    weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
        '_'
    ),
    weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
    weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
    weekdaysParseExact: true,
    // time formats are the same as en-gb
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Heddiw am] LT',
        nextDay: '[Yfory am] LT',
        nextWeek: 'dddd [am] LT',
        lastDay: '[Ddoe am] LT',
        lastWeek: 'dddd [diwethaf am] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'mewn %s',
        past: '%s yn Ã´l',
        s: 'ychydig eiliadau',
        ss: '%d eiliad',
        m: 'munud',
        mm: '%d munud',
        h: 'awr',
        hh: '%d awr',
        d: 'diwrnod',
        dd: '%d diwrnod',
        M: 'mis',
        MM: '%d mis',
        y: 'blwyddyn',
        yy: '%d flynedd',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
    // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
    ordinal: function (number) {
        var b = number,
            output = '',
            lookup = [
                '',
                'af',
                'il',
                'ydd',
                'ydd',
                'ed',
                'ed',
                'ed',
                'fed',
                'fed',
                'fed', // 1af to 10fed
                'eg',
                'fed',
                'eg',
                'eg',
                'fed',
                'eg',
                'eg',
                'fed',
                'eg',
                'fed', // 11eg to 20fed
            ];
        if (b > 20) {
            if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
                output = 'fed'; // not 30ain, 70ain or 90ain
            } else {
                output = 'ain';
            }
        } else if (b > 0) {
            output = lookup[b];
        }
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Danish [da]
//! author : Ulrik Nielsen : https://github.com/mrbase

import moment from '../moment';

export default moment.defineLocale('da', {
    months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
    weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
    weekdaysShort: 'sÃ¸n_man_tir_ons_tor_fre_lÃ¸r'.split('_'),
    weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY HH:mm',
        LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
    },
    calendar: {
        sameDay: '[i dag kl.] LT',
        nextDay: '[i morgen kl.] LT',
        nextWeek: 'pÃ¥ dddd [kl.] LT',
        lastDay: '[i gÃ¥r kl.] LT',
        lastWeek: '[i] dddd[s kl.] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'om %s',
        past: '%s siden',
        s: 'fÃ¥ sekunder',
        ss: '%d sekunder',
        m: 'et minut',
        mm: '%d minutter',
        h: 'en time',
        hh: '%d timer',
        d: 'en dag',
        dd: '%d dage',
        M: 'en mÃ¥ned',
        MM: '%d mÃ¥neder',
        y: 'et Ã¥r',
        yy: '%d Ã¥r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : German (Austria) [de-at]
//! author : lluchs : https://github.com/lluchs
//! author: Menelion ElensÃºle: https://github.com/Oire
//! author : Martin Groller : https://github.com/MadMG
//! author : Mikolaj Dadela : https://github.com/mik01aj

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        m: ['eine Minute', 'einer Minute'],
        h: ['eine Stunde', 'einer Stunde'],
        d: ['ein Tag', 'einem Tag'],
        dd: [number + ' Tage', number + ' Tagen'],
        w: ['eine Woche', 'einer Woche'],
        M: ['ein Monat', 'einem Monat'],
        MM: [number + ' Monate', number + ' Monaten'],
        y: ['ein Jahr', 'einem Jahr'],
        yy: [number + ' Jahre', number + ' Jahren'],
    };
    return withoutSuffix ? format[key][0] : format[key][1];
}

export default moment.defineLocale('de-at', {
    months: 'JÃ¤nner_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
        '_'
    ),
    monthsShort: 'JÃ¤n._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
        '_'
    ),
    weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY HH:mm',
        LLLL: 'dddd, D. MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[heute um] LT [Uhr]',
        sameElse: 'L',
        nextDay: '[morgen um] LT [Uhr]',
        nextWeek: 'dddd [um] LT [Uhr]',
        lastDay: '[gestern um] LT [Uhr]',
        lastWeek: '[letzten] dddd [um] LT [Uhr]',
    },
    relativeTime: {
        future: 'in %s',
        past: 'vor %s',
        s: 'ein paar Sekunden',
        ss: '%d Sekunden',
        m: processRelativeTime,
        mm: '%d Minuten',
        h: processRelativeTime,
        hh: '%d Stunden',
        d: processRelativeTime,
        dd: processRelativeTime,
        w: processRelativeTime,
        ww: '%d Wochen',
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : German (Switzerland) [de-ch]
//! author : sschueller : https://github.com/sschueller

// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de#

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        m: ['eine Minute', 'einer Minute'],
        h: ['eine Stunde', 'einer Stunde'],
        d: ['ein Tag', 'einem Tag'],
        dd: [number + ' Tage', number + ' Tagen'],
        w: ['eine Woche', 'einer Woche'],
        M: ['ein Monat', 'einem Monat'],
        MM: [number + ' Monate', number + ' Monaten'],
        y: ['ein Jahr', 'einem Jahr'],
        yy: [number + ' Jahre', number + ' Jahren'],
    };
    return withoutSuffix ? format[key][0] : format[key][1];
}

export default moment.defineLocale('de-ch', {
    months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
        '_'
    ),
    monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
        '_'
    ),
    weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY HH:mm',
        LLLL: 'dddd, D. MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[heute um] LT [Uhr]',
        sameElse: 'L',
        nextDay: '[morgen um] LT [Uhr]',
        nextWeek: 'dddd [um] LT [Uhr]',
        lastDay: '[gestern um] LT [Uhr]',
        lastWeek: '[letzten] dddd [um] LT [Uhr]',
    },
    relativeTime: {
        future: 'in %s',
        past: 'vor %s',
        s: 'ein paar Sekunden',
        ss: '%d Sekunden',
        m: processRelativeTime,
        mm: '%d Minuten',
        h: processRelativeTime,
        hh: '%d Stunden',
        d: processRelativeTime,
        dd: processRelativeTime,
        w: processRelativeTime,
        ww: '%d Wochen',
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : German [de]
//! author : lluchs : https://github.com/lluchs
//! author: Menelion ElensÃºle: https://github.com/Oire
//! author : Mikolaj Dadela : https://github.com/mik01aj

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        m: ['eine Minute', 'einer Minute'],
        h: ['eine Stunde', 'einer Stunde'],
        d: ['ein Tag', 'einem Tag'],
        dd: [number + ' Tage', number + ' Tagen'],
        w: ['eine Woche', 'einer Woche'],
        M: ['ein Monat', 'einem Monat'],
        MM: [number + ' Monate', number + ' Monaten'],
        y: ['ein Jahr', 'einem Jahr'],
        yy: [number + ' Jahre', number + ' Jahren'],
    };
    return withoutSuffix ? format[key][0] : format[key][1];
}

export default moment.defineLocale('de', {
    months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
        '_'
    ),
    monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
        '_'
    ),
    weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY HH:mm',
        LLLL: 'dddd, D. MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[heute um] LT [Uhr]',
        sameElse: 'L',
        nextDay: '[morgen um] LT [Uhr]',
        nextWeek: 'dddd [um] LT [Uhr]',
        lastDay: '[gestern um] LT [Uhr]',
        lastWeek: '[letzten] dddd [um] LT [Uhr]',
    },
    relativeTime: {
        future: 'in %s',
        past: 'vor %s',
        s: 'ein paar Sekunden',
        ss: '%d Sekunden',
        m: processRelativeTime,
        mm: '%d Minuten',
        h: processRelativeTime,
        hh: '%d Stunden',
        d: processRelativeTime,
        dd: processRelativeTime,
        w: processRelativeTime,
        ww: '%d Wochen',
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Maldivian [dv]
//! author : Jawish Hameed : https://github.com/jawish

import moment from '../moment';

var months = [
        'Þ–Þ¬Þ‚ÞªÞ‡Þ¦ÞƒÞ©',
        'ÞŠÞ¬Þ„Þ°ÞƒÞªÞ‡Þ¦ÞƒÞ©',
        'Þ‰Þ§ÞƒÞ¨Þ—Þª',
        'Þ‡Þ­Þ•Þ°ÞƒÞ©ÞÞª',
        'Þ‰Þ­',
        'Þ–Þ«Þ‚Þ°',
        'Þ–ÞªÞÞ¦Þ‡Þ¨',
        'Þ‡Þ¯ÞŽÞ¦ÞÞ°Þ“Þª',
        'ÞÞ¬Þ•Þ°Þ“Þ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
        'Þ‡Þ®Þ†Þ°Þ“Þ¯Þ„Þ¦ÞƒÞª',
        'Þ‚Þ®ÞˆÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
        'Þ‘Þ¨ÞÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
    ],
    weekdays = [
        'Þ‡Þ§Þ‹Þ¨Þ‡Þ°ÞŒÞ¦',
        'Þ€Þ¯Þ‰Þ¦',
        'Þ‡Þ¦Þ‚Þ°ÞŽÞ§ÞƒÞ¦',
        'Þ„ÞªÞ‹Þ¦',
        'Þ„ÞªÞƒÞ§ÞÞ°ÞŠÞ¦ÞŒÞ¨',
        'Þ€ÞªÞ†ÞªÞƒÞª',
        'Þ€Þ®Þ‚Þ¨Þ€Þ¨ÞƒÞª',
    ];

export default moment.defineLocale('dv', {
    months: months,
    monthsShort: months,
    weekdays: weekdays,
    weekdaysShort: weekdays,
    weekdaysMin: 'Þ‡Þ§Þ‹Þ¨_Þ€Þ¯Þ‰Þ¦_Þ‡Þ¦Þ‚Þ°_Þ„ÞªÞ‹Þ¦_Þ„ÞªÞƒÞ§_Þ€ÞªÞ†Þª_Þ€Þ®Þ‚Þ¨'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'D/M/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Þ‰Þ†|Þ‰ÞŠ/,
    isPM: function (input) {
        return 'Þ‰ÞŠ' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Þ‰Þ†';
        } else {
            return 'Þ‰ÞŠ';
        }
    },
    calendar: {
        sameDay: '[Þ‰Þ¨Þ‡Þ¦Þ‹Þª] LT',
        nextDay: '[Þ‰Þ§Þ‹Þ¦Þ‰Þ§] LT',
        nextWeek: 'dddd LT',
        lastDay: '[Þ‡Þ¨Þ‡Þ°Þ”Þ¬] LT',
        lastWeek: '[ÞŠÞ§Þ‡Þ¨ÞŒÞªÞˆÞ¨] dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÞŒÞ¬ÞƒÞ­ÞŽÞ¦Þ‡Þ¨ %s',
        past: 'Þ†ÞªÞƒÞ¨Þ‚Þ° %s',
        s: 'ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞªÞ†Þ®Þ…Þ¬Þ‡Þ°',
        ss: 'd% ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞª',
        m: 'Þ‰Þ¨Þ‚Þ¨Þ“Þ¬Þ‡Þ°',
        mm: 'Þ‰Þ¨Þ‚Þ¨Þ“Þª %d',
        h: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞ¬Þ‡Þ°',
        hh: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞª %d',
        d: 'Þ‹ÞªÞˆÞ¦Þ€Þ¬Þ‡Þ°',
        dd: 'Þ‹ÞªÞˆÞ¦ÞÞ° %d',
        M: 'Þ‰Þ¦Þ€Þ¬Þ‡Þ°',
        MM: 'Þ‰Þ¦ÞÞ° %d',
        y: 'Þ‡Þ¦Þ€Þ¦ÞƒÞ¬Þ‡Þ°',
        yy: 'Þ‡Þ¦Þ€Þ¦ÞƒÞª %d',
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 7, // Sunday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Greek [el]
//! author : Aggelos Karalias : https://github.com/mehiel

import moment from '../moment';

function isFunction(input) {
    return (
        (typeof Function !== 'undefined' && input instanceof Function) ||
        Object.prototype.toString.call(input) === '[object Function]'
    );
}

export default moment.defineLocale('el', {
    monthsNominativeEl: 'Î™Î±Î½Î¿Ï…Î¬ÏÎ¹Î¿Ï‚_Î¦ÎµÎ²ÏÎ¿Ï…Î¬ÏÎ¹Î¿Ï‚_ÎœÎ¬ÏÏ„Î¹Î¿Ï‚_Î‘Ï€ÏÎ¯Î»Î¹Î¿Ï‚_ÎœÎ¬Î¹Î¿Ï‚_Î™Î¿ÏÎ½Î¹Î¿Ï‚_Î™Î¿ÏÎ»Î¹Î¿Ï‚_Î‘ÏÎ³Î¿Ï…ÏƒÏ„Î¿Ï‚_Î£ÎµÏ€Ï„Î­Î¼Î²ÏÎ¹Î¿Ï‚_ÎŸÎºÏ„ÏŽÎ²ÏÎ¹Î¿Ï‚_ÎÎ¿Î­Î¼Î²ÏÎ¹Î¿Ï‚_Î”ÎµÎºÎ­Î¼Î²ÏÎ¹Î¿Ï‚'.split(
        '_'
    ),
    monthsGenitiveEl: 'Î™Î±Î½Î¿Ï…Î±ÏÎ¯Î¿Ï…_Î¦ÎµÎ²ÏÎ¿Ï…Î±ÏÎ¯Î¿Ï…_ÎœÎ±ÏÏ„Î¯Î¿Ï…_Î‘Ï€ÏÎ¹Î»Î¯Î¿Ï…_ÎœÎ±ÎÎ¿Ï…_Î™Î¿Ï…Î½Î¯Î¿Ï…_Î™Î¿Ï…Î»Î¯Î¿Ï…_Î‘Ï…Î³Î¿ÏÏƒÏ„Î¿Ï…_Î£ÎµÏ€Ï„ÎµÎ¼Î²ÏÎ¯Î¿Ï…_ÎŸÎºÏ„Ï‰Î²ÏÎ¯Î¿Ï…_ÎÎ¿ÎµÎ¼Î²ÏÎ¯Î¿Ï…_Î”ÎµÎºÎµÎ¼Î²ÏÎ¯Î¿Ï…'.split(
        '_'
    ),
    months: function (momentToFormat, format) {
        if (!momentToFormat) {
            return this._monthsNominativeEl;
        } else if (
            typeof format === 'string' &&
            /D/.test(format.substring(0, format.indexOf('MMMM')))
        ) {
            // if there is a day number before 'MMMM'
            return this._monthsGenitiveEl[momentToFormat.month()];
        } else {
            return this._monthsNominativeEl[momentToFormat.month()];
        }
    },
    monthsShort: 'Î™Î±Î½_Î¦ÎµÎ²_ÎœÎ±Ï_Î‘Ï€Ï_ÎœÎ±ÏŠ_Î™Î¿Ï…Î½_Î™Î¿Ï…Î»_Î‘Ï…Î³_Î£ÎµÏ€_ÎŸÎºÏ„_ÎÎ¿Îµ_Î”ÎµÎº'.split('_'),
    weekdays: 'ÎšÏ…ÏÎ¹Î±ÎºÎ®_Î”ÎµÏ…Ï„Î­ÏÎ±_Î¤ÏÎ¯Ï„Î·_Î¤ÎµÏ„Î¬ÏÏ„Î·_Î Î­Î¼Ï€Ï„Î·_Î Î±ÏÎ±ÏƒÎºÎµÏ…Î®_Î£Î¬Î²Î²Î±Ï„Î¿'.split(
        '_'
    ),
    weekdaysShort: 'ÎšÏ…Ï_Î”ÎµÏ…_Î¤ÏÎ¹_Î¤ÎµÏ„_Î ÎµÎ¼_Î Î±Ï_Î£Î±Î²'.split('_'),
    weekdaysMin: 'ÎšÏ…_Î”Îµ_Î¤Ï_Î¤Îµ_Î Îµ_Î Î±_Î£Î±'.split('_'),
    meridiem: function (hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? 'Î¼Î¼' : 'ÎœÎœ';
        } else {
            return isLower ? 'Ï€Î¼' : 'Î Îœ';
        }
    },
    isPM: function (input) {
        return (input + '').toLowerCase()[0] === 'Î¼';
    },
    meridiemParse: /[Î Îœ]\.?Îœ?\.?/i,
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendarEl: {
        sameDay: '[Î£Î®Î¼ÎµÏÎ± {}] LT',
        nextDay: '[Î‘ÏÏÎ¹Î¿ {}] LT',
        nextWeek: 'dddd [{}] LT',
        lastDay: '[Î§Î¸ÎµÏ‚ {}] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 6:
                    return '[Ï„Î¿ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î¿] dddd [{}] LT';
                default:
                    return '[Ï„Î·Î½ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î·] dddd [{}] LT';
            }
        },
        sameElse: 'L',
    },
    calendar: function (key, mom) {
        var output = this._calendarEl[key],
            hours = mom && mom.hours();
        if (isFunction(output)) {
            output = output.apply(mom);
        }
        return output.replace('{}', hours % 12 === 1 ? 'ÏƒÏ„Î·' : 'ÏƒÏ„Î¹Ï‚');
    },
    relativeTime: {
        future: 'ÏƒÎµ %s',
        past: '%s Ï€ÏÎ¹Î½',
        s: 'Î»Î¯Î³Î± Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
        ss: '%d Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
        m: 'Î­Î½Î± Î»ÎµÏ€Ï„ÏŒ',
        mm: '%d Î»ÎµÏ€Ï„Î¬',
        h: 'Î¼Î¯Î± ÏŽÏÎ±',
        hh: '%d ÏŽÏÎµÏ‚',
        d: 'Î¼Î¯Î± Î¼Î­ÏÎ±',
        dd: '%d Î¼Î­ÏÎµÏ‚',
        M: 'Î­Î½Î±Ï‚ Î¼Î®Î½Î±Ï‚',
        MM: '%d Î¼Î®Î½ÎµÏ‚',
        y: 'Î­Î½Î±Ï‚ Ï‡ÏÏŒÎ½Î¿Ï‚',
        yy: '%d Ï‡ÏÏŒÎ½Î¹Î±',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Î·/,
    ordinal: '%dÎ·',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4st is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Australia) [en-au]
//! author : Jared Morse : https://github.com/jarcoal

import moment from '../moment';

export default moment.defineLocale('en-au', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Canada) [en-ca]
//! author : Jonathan Abourbih : https://github.com/jonbca

import moment from '../moment';

export default moment.defineLocale('en-ca', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'YYYY-MM-DD',
        LL: 'MMMM D, YYYY',
        LLL: 'MMMM D, YYYY h:mm A',
        LLLL: 'dddd, MMMM D, YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
});
//! moment.js locale configuration
//! locale : English (United Kingdom) [en-gb]
//! author : Chris Gedrim : https://github.com/chrisgedrim

import moment from '../moment';

export default moment.defineLocale('en-gb', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Ireland) [en-ie]
//! author : Chris Cartlidge : https://github.com/chriscartlidge

import moment from '../moment';

export default moment.defineLocale('en-ie', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Israel) [en-il]
//! author : Chris Gedrim : https://github.com/chrisgedrim

import moment from '../moment';

export default moment.defineLocale('en-il', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
});
//! moment.js locale configuration
//! locale : English (India) [en-in]
//! author : Jatin Agrawal : https://github.com/jatinag22

import moment from '../moment';

export default moment.defineLocale('en-in', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 1st is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (New Zealand) [en-nz]
//! author : Luke McGregor : https://github.com/lukemcgregor

import moment from '../moment';

export default moment.defineLocale('en-nz', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Singapore) [en-sg]
//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension

import moment from '../moment';

export default moment.defineLocale('en-sg', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Esperanto [eo]
//! author : Colin Dean : https://github.com/colindean
//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
//! comment : miestasmia corrected the translation by colindean
//! comment : Vivakvo corrected the translation by colindean and miestasmia

import moment from '../moment';

export default moment.defineLocale('eo', {
    months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aÅ­g_sept_okt_nov_dec'.split('_'),
    weekdays: 'dimanÄ‰o_lundo_mardo_merkredo_ÄµaÅ­do_vendredo_sabato'.split('_'),
    weekdaysShort: 'dim_lun_mard_merk_ÄµaÅ­_ven_sab'.split('_'),
    weekdaysMin: 'di_lu_ma_me_Äµa_ve_sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: '[la] D[-an de] MMMM, YYYY',
        LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
        LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
        llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
    },
    meridiemParse: /[ap]\.t\.m/i,
    isPM: function (input) {
        return input.charAt(0).toLowerCase() === 'p';
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? 'p.t.m.' : 'P.T.M.';
        } else {
            return isLower ? 'a.t.m.' : 'A.T.M.';
        }
    },
    calendar: {
        sameDay: '[HodiaÅ­ je] LT',
        nextDay: '[MorgaÅ­ je] LT',
        nextWeek: 'dddd[n je] LT',
        lastDay: '[HieraÅ­ je] LT',
        lastWeek: '[pasintan] dddd[n je] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'post %s',
        past: 'antaÅ­ %s',
        s: 'kelkaj sekundoj',
        ss: '%d sekundoj',
        m: 'unu minuto',
        mm: '%d minutoj',
        h: 'unu horo',
        hh: '%d horoj',
        d: 'unu tago', //ne 'diurno', Ä‰ar estas uzita por proksimumo
        dd: '%d tagoj',
        M: 'unu monato',
        MM: '%d monatoj',
        y: 'unu jaro',
        yy: '%d jaroj',
    },
    dayOfMonthOrdinalParse: /\d{1,2}a/,
    ordinal: '%da',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Spanish (Dominican Republic) [es-do]

import moment from '../moment';

var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
        '_'
    ),
    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
    monthsParse = [
        /^ene/i,
        /^feb/i,
        /^mar/i,
        /^abr/i,
        /^may/i,
        /^jun/i,
        /^jul/i,
        /^ago/i,
        /^sep/i,
        /^oct/i,
        /^nov/i,
        /^dic/i,
    ],
    monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

export default moment.defineLocale('es-do', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortDot;
        } else if (/-MMM-/.test(format)) {
            return monthsShort[m.month()];
        } else {
            return monthsShortDot[m.month()];
        }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY h:mm A',
        LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
    },
    calendar: {
        sameDay: function () {
            return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastDay: function () {
            return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [pasado a la' +
                (this.hours() !== 1 ? 's' : '') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'en %s',
        past: 'hace %s',
        s: 'unos segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'una hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        w: 'una semana',
        ww: '%d semanas',
        M: 'un mes',
        MM: '%d meses',
        y: 'un aÃ±o',
        yy: '%d aÃ±os',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Spanish (Mexico) [es-mx]
//! author : JC Franco : https://github.com/jcfranco

import moment from '../moment';

var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
        '_'
    ),
    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
    monthsParse = [
        /^ene/i,
        /^feb/i,
        /^mar/i,
        /^abr/i,
        /^may/i,
        /^jun/i,
        /^jul/i,
        /^ago/i,
        /^sep/i,
        /^oct/i,
        /^nov/i,
        /^dic/i,
    ],
    monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

export default moment.defineLocale('es-mx', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortDot;
        } else if (/-MMM-/.test(format)) {
            return monthsShort[m.month()];
        } else {
            return monthsShortDot[m.month()];
        }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY H:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
    },
    calendar: {
        sameDay: function () {
            return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastDay: function () {
            return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [pasado a la' +
                (this.hours() !== 1 ? 's' : '') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'en %s',
        past: 'hace %s',
        s: 'unos segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'una hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        w: 'una semana',
        ww: '%d semanas',
        M: 'un mes',
        MM: '%d meses',
        y: 'un aÃ±o',
        yy: '%d aÃ±os',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
    invalidDate: 'Fecha invÃ¡lida',
});
//! moment.js locale configuration
//! locale : Spanish (United States) [es-us]
//! author : bustta : https://github.com/bustta
//! author : chrisrodz : https://github.com/chrisrodz

import moment from '../moment';

var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
        '_'
    ),
    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
    monthsParse = [
        /^ene/i,
        /^feb/i,
        /^mar/i,
        /^abr/i,
        /^may/i,
        /^jun/i,
        /^jul/i,
        /^ago/i,
        /^sep/i,
        /^oct/i,
        /^nov/i,
        /^dic/i,
    ],
    monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

export default moment.defineLocale('es-us', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortDot;
        } else if (/-MMM-/.test(format)) {
            return monthsShort[m.month()];
        } else {
            return monthsShortDot[m.month()];
        }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'MM/DD/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY h:mm A',
        LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
    },
    calendar: {
        sameDay: function () {
            return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastDay: function () {
            return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [pasado a la' +
                (this.hours() !== 1 ? 's' : '') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'en %s',
        past: 'hace %s',
        s: 'unos segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'una hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        w: 'una semana',
        ww: '%d semanas',
        M: 'un mes',
        MM: '%d meses',
        y: 'un aÃ±o',
        yy: '%d aÃ±os',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Spanish [es]
//! author : Julio NapurÃ­ : https://github.com/julionc

import moment from '../moment';

var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
        '_'
    ),
    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
    monthsParse = [
        /^ene/i,
        /^feb/i,
        /^mar/i,
        /^abr/i,
        /^may/i,
        /^jun/i,
        /^jul/i,
        /^ago/i,
        /^sep/i,
        /^oct/i,
        /^nov/i,
        /^dic/i,
    ],
    monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

export default moment.defineLocale('es', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortDot;
        } else if (/-MMM-/.test(format)) {
            return monthsShort[m.month()];
        } else {
            return monthsShortDot[m.month()];
        }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY H:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
    },
    calendar: {
        sameDay: function () {
            return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastDay: function () {
            return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [pasado a la' +
                (this.hours() !== 1 ? 's' : '') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'en %s',
        past: 'hace %s',
        s: 'unos segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'una hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        w: 'una semana',
        ww: '%d semanas',
        M: 'un mes',
        MM: '%d meses',
        y: 'un aÃ±o',
        yy: '%d aÃ±os',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
    invalidDate: 'Fecha invÃ¡lida',
});
//! moment.js locale configuration
//! locale : Estonian [et]
//! author : Henry Kehlmann : https://github.com/madhenry
//! improvements : Illimar Tambek : https://github.com/ragulka

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        s: ['mÃµne sekundi', 'mÃµni sekund', 'paar sekundit'],
        ss: [number + 'sekundi', number + 'sekundit'],
        m: ['Ã¼he minuti', 'Ã¼ks minut'],
        mm: [number + ' minuti', number + ' minutit'],
        h: ['Ã¼he tunni', 'tund aega', 'Ã¼ks tund'],
        hh: [number + ' tunni', number + ' tundi'],
        d: ['Ã¼he pÃ¤eva', 'Ã¼ks pÃ¤ev'],
        M: ['kuu aja', 'kuu aega', 'Ã¼ks kuu'],
        MM: [number + ' kuu', number + ' kuud'],
        y: ['Ã¼he aasta', 'aasta', 'Ã¼ks aasta'],
        yy: [number + ' aasta', number + ' aastat'],
    };
    if (withoutSuffix) {
        return format[key][2] ? format[key][2] : format[key][1];
    }
    return isFuture ? format[key][0] : format[key][1];
}

export default moment.defineLocale('et', {
    months: 'jaanuar_veebruar_mÃ¤rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
        '_'
    ),
    monthsShort: 'jaan_veebr_mÃ¤rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(
        '_'
    ),
    weekdays: 'pÃ¼hapÃ¤ev_esmaspÃ¤ev_teisipÃ¤ev_kolmapÃ¤ev_neljapÃ¤ev_reede_laupÃ¤ev'.split(
        '_'
    ),
    weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
    weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd, D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[TÃ¤na,] LT',
        nextDay: '[Homme,] LT',
        nextWeek: '[JÃ¤rgmine] dddd LT',
        lastDay: '[Eile,] LT',
        lastWeek: '[Eelmine] dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s pÃ¤rast',
        past: '%s tagasi',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: '%d pÃ¤eva',
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Basque [eu]
//! author : Eneko Illarramendi : https://github.com/eillarra

import moment from '../moment';

export default moment.defineLocale('eu', {
    months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
        '_'
    ),
    monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
        '_'
    ),
    weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
    weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'YYYY[ko] MMMM[ren] D[a]',
        LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
        LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
        l: 'YYYY-M-D',
        ll: 'YYYY[ko] MMM D[a]',
        lll: 'YYYY[ko] MMM D[a] HH:mm',
        llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
    },
    calendar: {
        sameDay: '[gaur] LT[etan]',
        nextDay: '[bihar] LT[etan]',
        nextWeek: 'dddd LT[etan]',
        lastDay: '[atzo] LT[etan]',
        lastWeek: '[aurreko] dddd LT[etan]',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s barru',
        past: 'duela %s',
        s: 'segundo batzuk',
        ss: '%d segundo',
        m: 'minutu bat',
        mm: '%d minutu',
        h: 'ordu bat',
        hh: '%d ordu',
        d: 'egun bat',
        dd: '%d egun',
        M: 'hilabete bat',
        MM: '%d hilabete',
        y: 'urte bat',
        yy: '%d urte',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Persian [fa]
//! author : Ebrahim Byagowi : https://github.com/ebraminio

import moment from '../moment';

var symbolMap = {
        1: 'Û±',
        2: 'Û²',
        3: 'Û³',
        4: 'Û´',
        5: 'Ûµ',
        6: 'Û¶',
        7: 'Û·',
        8: 'Û¸',
        9: 'Û¹',
        0: 'Û°',
    },
    numberMap = {
        'Û±': '1',
        'Û²': '2',
        'Û³': '3',
        'Û´': '4',
        'Ûµ': '5',
        'Û¶': '6',
        'Û·': '7',
        'Û¸': '8',
        'Û¹': '9',
        'Û°': '0',
    };

export default moment.defineLocale('fa', {
    months: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
        '_'
    ),
    weekdaysShort: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
        '_'
    ),
    weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ø¬_Ø´'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    meridiemParse: /Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±|Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/,
    isPM: function (input) {
        return /Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±';
        } else {
            return 'Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù…Ø±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
        nextDay: '[ÙØ±Ø¯Ø§ Ø³Ø§Ø¹Øª] LT',
        nextWeek: 'dddd [Ø³Ø§Ø¹Øª] LT',
        lastDay: '[Ø¯ÛŒØ±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
        lastWeek: 'dddd [Ù¾ÛŒØ´] [Ø³Ø§Ø¹Øª] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ø¯Ø± %s',
        past: '%s Ù¾ÛŒØ´',
        s: 'Ú†Ù†Ø¯ Ø«Ø§Ù†ÛŒÙ‡',
        ss: '%d Ø«Ø§Ù†ÛŒÙ‡',
        m: 'ÛŒÚ© Ø¯Ù‚ÛŒÙ‚Ù‡',
        mm: '%d Ø¯Ù‚ÛŒÙ‚Ù‡',
        h: 'ÛŒÚ© Ø³Ø§Ø¹Øª',
        hh: '%d Ø³Ø§Ø¹Øª',
        d: 'ÛŒÚ© Ø±ÙˆØ²',
        dd: '%d Ø±ÙˆØ²',
        M: 'ÛŒÚ© Ù…Ø§Ù‡',
        MM: '%d Ù…Ø§Ù‡',
        y: 'ÛŒÚ© Ø³Ø§Ù„',
        yy: '%d Ø³Ø§Ù„',
    },
    preparse: function (string) {
        return string
            .replace(/[Û°-Û¹]/g, function (match) {
                return numberMap[match];
            })
            .replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    dayOfMonthOrdinalParse: /\d{1,2}Ù…/,
    ordinal: '%dÙ…',
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Finnish [fi]
//! author : Tarmo Aidantausta : https://github.com/bleadof

import moment from '../moment';

var numbersPast = 'nolla yksi kaksi kolme neljÃ¤ viisi kuusi seitsemÃ¤n kahdeksan yhdeksÃ¤n'.split(
        ' '
    ),
    numbersFuture = [
        'nolla',
        'yhden',
        'kahden',
        'kolmen',
        'neljÃ¤n',
        'viiden',
        'kuuden',
        numbersPast[7],
        numbersPast[8],
        numbersPast[9],
    ];
function translate(number, withoutSuffix, key, isFuture) {
    var result = '';
    switch (key) {
        case 's':
            return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
        case 'ss':
            result = isFuture ? 'sekunnin' : 'sekuntia';
            break;
        case 'm':
            return isFuture ? 'minuutin' : 'minuutti';
        case 'mm':
            result = isFuture ? 'minuutin' : 'minuuttia';
            break;
        case 'h':
            return isFuture ? 'tunnin' : 'tunti';
        case 'hh':
            result = isFuture ? 'tunnin' : 'tuntia';
            break;
        case 'd':
            return isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤';
        case 'dd':
            result = isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤Ã¤';
            break;
        case 'M':
            return isFuture ? 'kuukauden' : 'kuukausi';
        case 'MM':
            result = isFuture ? 'kuukauden' : 'kuukautta';
            break;
        case 'y':
            return isFuture ? 'vuoden' : 'vuosi';
        case 'yy':
            result = isFuture ? 'vuoden' : 'vuotta';
            break;
    }
    result = verbalNumber(number, isFuture) + ' ' + result;
    return result;
}
function verbalNumber(number, isFuture) {
    return number < 10
        ? isFuture
            ? numbersFuture[number]
            : numbersPast[number]
        : number;
}

export default moment.defineLocale('fi', {
    months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesÃ¤kuu_heinÃ¤kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
        '_'
    ),
    monthsShort: 'tammi_helmi_maalis_huhti_touko_kesÃ¤_heinÃ¤_elo_syys_loka_marras_joulu'.split(
        '_'
    ),
    weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
        '_'
    ),
    weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
    weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD.MM.YYYY',
        LL: 'Do MMMM[ta] YYYY',
        LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
        LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
        l: 'D.M.YYYY',
        ll: 'Do MMM YYYY',
        lll: 'Do MMM YYYY, [klo] HH.mm',
        llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
    },
    calendar: {
        sameDay: '[tÃ¤nÃ¤Ã¤n] [klo] LT',
        nextDay: '[huomenna] [klo] LT',
        nextWeek: 'dddd [klo] LT',
        lastDay: '[eilen] [klo] LT',
        lastWeek: '[viime] dddd[na] [klo] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s pÃ¤Ã¤stÃ¤',
        past: '%s sitten',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Filipino [fil]
//! author : Dan Hagman : https://github.com/hagmandan
//! author : Matthew Co : https://github.com/matthewdeeco

import moment from '../moment';

export default moment.defineLocale('fil', {
    months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
        '_'
    ),
    monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
    weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
        '_'
    ),
    weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
    weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'MM/D/YYYY',
        LL: 'MMMM D, YYYY',
        LLL: 'MMMM D, YYYY HH:mm',
        LLLL: 'dddd, MMMM DD, YYYY HH:mm',
    },
    calendar: {
        sameDay: 'LT [ngayong araw]',
        nextDay: '[Bukas ng] LT',
        nextWeek: 'LT [sa susunod na] dddd',
        lastDay: 'LT [kahapon]',
        lastWeek: 'LT [noong nakaraang] dddd',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'sa loob ng %s',
        past: '%s ang nakalipas',
        s: 'ilang segundo',
        ss: '%d segundo',
        m: 'isang minuto',
        mm: '%d minuto',
        h: 'isang oras',
        hh: '%d oras',
        d: 'isang araw',
        dd: '%d araw',
        M: 'isang buwan',
        MM: '%d buwan',
        y: 'isang taon',
        yy: '%d taon',
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: function (number) {
        return number;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Faroese [fo]
//! author : Ragnar Johannesen : https://github.com/ragnar123
//! author : Kristian Sakarisson : https://github.com/sakarisson

import moment from '../moment';

export default moment.defineLocale('fo', {
    months: 'januar_februar_mars_aprÃ­l_mai_juni_juli_august_september_oktober_november_desember'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
    weekdays: 'sunnudagur_mÃ¡nadagur_tÃ½sdagur_mikudagur_hÃ³sdagur_frÃ­ggjadagur_leygardagur'.split(
        '_'
    ),
    weekdaysShort: 'sun_mÃ¡n_tÃ½s_mik_hÃ³s_frÃ­_ley'.split('_'),
    weekdaysMin: 'su_mÃ¡_tÃ½_mi_hÃ³_fr_le'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D. MMMM, YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ã dag kl.] LT',
        nextDay: '[Ã morgin kl.] LT',
        nextWeek: 'dddd [kl.] LT',
        lastDay: '[Ã gjÃ¡r kl.] LT',
        lastWeek: '[sÃ­Ã°stu] dddd [kl] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'um %s',
        past: '%s sÃ­Ã°ani',
        s: 'fÃ¡ sekund',
        ss: '%d sekundir',
        m: 'ein minuttur',
        mm: '%d minuttir',
        h: 'ein tÃ­mi',
        hh: '%d tÃ­mar',
        d: 'ein dagur',
        dd: '%d dagar',
        M: 'ein mÃ¡naÃ°ur',
        MM: '%d mÃ¡naÃ°ir',
        y: 'eitt Ã¡r',
        yy: '%d Ã¡r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : French (Canada) [fr-ca]
//! author : Jonathan Abourbih : https://github.com/jonbca

import moment from '../moment';

export default moment.defineLocale('fr-ca', {
    months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
        '_'
    ),
    monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Aujourdâ€™hui Ã ] LT',
        nextDay: '[Demain Ã ] LT',
        nextWeek: 'dddd [Ã ] LT',
        lastDay: '[Hier Ã ] LT',
        lastWeek: 'dddd [dernier Ã ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dans %s',
        past: 'il y a %s',
        s: 'quelques secondes',
        ss: '%d secondes',
        m: 'une minute',
        mm: '%d minutes',
        h: 'une heure',
        hh: '%d heures',
        d: 'un jour',
        dd: '%d jours',
        M: 'un mois',
        MM: '%d mois',
        y: 'un an',
        yy: '%d ans',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
    ordinal: function (number, period) {
        switch (period) {
            // Words with masculine grammatical gender: mois, trimestre, jour
            default:
            case 'M':
            case 'Q':
            case 'D':
            case 'DDD':
            case 'd':
                return number + (number === 1 ? 'er' : 'e');

            // Words with feminine grammatical gender: semaine
            case 'w':
            case 'W':
                return number + (number === 1 ? 're' : 'e');
        }
    },
});
//! moment.js locale configuration
//! locale : French (Switzerland) [fr-ch]
//! author : Gaspard Bucher : https://github.com/gaspard

import moment from '../moment';

export default moment.defineLocale('fr-ch', {
    months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
        '_'
    ),
    monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Aujourdâ€™hui Ã ] LT',
        nextDay: '[Demain Ã ] LT',
        nextWeek: 'dddd [Ã ] LT',
        lastDay: '[Hier Ã ] LT',
        lastWeek: 'dddd [dernier Ã ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dans %s',
        past: 'il y a %s',
        s: 'quelques secondes',
        ss: '%d secondes',
        m: 'une minute',
        mm: '%d minutes',
        h: 'une heure',
        hh: '%d heures',
        d: 'un jour',
        dd: '%d jours',
        M: 'un mois',
        MM: '%d mois',
        y: 'un an',
        yy: '%d ans',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
    ordinal: function (number, period) {
        switch (period) {
            // Words with masculine grammatical gender: mois, trimestre, jour
            default:
            case 'M':
            case 'Q':
            case 'D':
            case 'DDD':
            case 'd':
                return number + (number === 1 ? 'er' : 'e');

            // Words with feminine grammatical gender: semaine
            case 'w':
            case 'W':
                return number + (number === 1 ? 're' : 'e');
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : French [fr]
//! author : John Fischer : https://github.com/jfroffice

import moment from '../moment';

var monthsStrictRegex = /^(janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
    monthsShortStrictRegex = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?)/i,
    monthsRegex = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?|janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
    monthsParse = [
        /^janv/i,
        /^fÃ©vr/i,
        /^mars/i,
        /^avr/i,
        /^mai/i,
        /^juin/i,
        /^juil/i,
        /^aoÃ»t/i,
        /^sept/i,
        /^oct/i,
        /^nov/i,
        /^dÃ©c/i,
    ];

export default moment.defineLocale('fr', {
    months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
        '_'
    ),
    monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
        '_'
    ),
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: monthsStrictRegex,
    monthsShortStrictRegex: monthsShortStrictRegex,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Aujourdâ€™hui Ã ] LT',
        nextDay: '[Demain Ã ] LT',
        nextWeek: 'dddd [Ã ] LT',
        lastDay: '[Hier Ã ] LT',
        lastWeek: 'dddd [dernier Ã ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dans %s',
        past: 'il y a %s',
        s: 'quelques secondes',
        ss: '%d secondes',
        m: 'une minute',
        mm: '%d minutes',
        h: 'une heure',
        hh: '%d heures',
        d: 'un jour',
        dd: '%d jours',
        w: 'une semaine',
        ww: '%d semaines',
        M: 'un mois',
        MM: '%d mois',
        y: 'un an',
        yy: '%d ans',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
    ordinal: function (number, period) {
        switch (period) {
            // TODO: Return 'e' when day of month > 1. Move this case inside
            // block for masculine words below.
            // See https://github.com/moment/moment/issues/3375
            case 'D':
                return number + (number === 1 ? 'er' : '');

            // Words with masculine grammatical gender: mois, trimestre, jour
            default:
            case 'M':
            case 'Q':
            case 'DDD':
            case 'd':
                return number + (number === 1 ? 'er' : 'e');

            // Words with feminine grammatical gender: semaine
            case 'w':
            case 'W':
                return number + (number === 1 ? 're' : 'e');
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Frisian [fy]
//! author : Robin van der Vliet : https://github.com/robin0van0der0v

import moment from '../moment';

var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(
        '_'
    ),
    monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(
        '_'
    );

export default moment.defineLocale('fy', {
    months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortWithDots;
        } else if (/-MMM-/.test(format)) {
            return monthsShortWithoutDots[m.month()];
        } else {
            return monthsShortWithDots[m.month()];
        }
    },
    monthsParseExact: true,
    weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
        '_'
    ),
    weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
    weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD-MM-YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[hjoed om] LT',
        nextDay: '[moarn om] LT',
        nextWeek: 'dddd [om] LT',
        lastDay: '[juster om] LT',
        lastWeek: '[Ã´frÃ»ne] dddd [om] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'oer %s',
        past: '%s lyn',
        s: 'in pear sekonden',
        ss: '%d sekonden',
        m: 'ien minÃºt',
        mm: '%d minuten',
        h: 'ien oere',
        hh: '%d oeren',
        d: 'ien dei',
        dd: '%d dagen',
        M: 'ien moanne',
        MM: '%d moannen',
        y: 'ien jier',
        yy: '%d jierren',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function (number) {
        return (
            number +
            (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
        );
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Irish or Irish Gaelic [ga]
//! author : AndrÃ© Silva : https://github.com/askpt

import moment from '../moment';

var months = [
        'EanÃ¡ir',
        'Feabhra',
        'MÃ¡rta',
        'AibreÃ¡n',
        'Bealtaine',
        'Meitheamh',
        'IÃºil',
        'LÃºnasa',
        'MeÃ¡n FÃ³mhair',
        'Deireadh FÃ³mhair',
        'Samhain',
        'Nollaig',
    ],
    monthsShort = [
        'Ean',
        'Feabh',
        'MÃ¡rt',
        'Aib',
        'Beal',
        'Meith',
        'IÃºil',
        'LÃºn',
        'M.F.',
        'D.F.',
        'Samh',
        'Noll',
    ],
    weekdays = [
        'DÃ© Domhnaigh',
        'DÃ© Luain',
        'DÃ© MÃ¡irt',
        'DÃ© CÃ©adaoin',
        'DÃ©ardaoin',
        'DÃ© hAoine',
        'DÃ© Sathairn',
    ],
    weekdaysShort = ['Domh', 'Luan', 'MÃ¡irt', 'CÃ©ad', 'DÃ©ar', 'Aoine', 'Sath'],
    weekdaysMin = ['Do', 'Lu', 'MÃ¡', 'CÃ©', 'DÃ©', 'A', 'Sa'];

export default moment.defineLocale('ga', {
    months: months,
    monthsShort: monthsShort,
    monthsParseExact: true,
    weekdays: weekdays,
    weekdaysShort: weekdaysShort,
    weekdaysMin: weekdaysMin,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Inniu ag] LT',
        nextDay: '[AmÃ¡rach ag] LT',
        nextWeek: 'dddd [ag] LT',
        lastDay: '[InnÃ© ag] LT',
        lastWeek: 'dddd [seo caite] [ag] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'i %s',
        past: '%s Ã³ shin',
        s: 'cÃºpla soicind',
        ss: '%d soicind',
        m: 'nÃ³imÃ©ad',
        mm: '%d nÃ³imÃ©ad',
        h: 'uair an chloig',
        hh: '%d uair an chloig',
        d: 'lÃ¡',
        dd: '%d lÃ¡',
        M: 'mÃ­',
        MM: '%d mÃ­onna',
        y: 'bliain',
        yy: '%d bliain',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
    ordinal: function (number) {
        var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Scottish Gaelic [gd]
//! author : Jon Ashdown : https://github.com/jonashdown

import moment from '../moment';

var months = [
        'Am Faoilleach',
        'An Gearran',
        'Am MÃ rt',
        'An Giblean',
        'An CÃ¨itean',
        'An t-Ã’gmhios',
        'An t-Iuchar',
        'An LÃ¹nastal',
        'An t-Sultain',
        'An DÃ mhair',
        'An t-Samhain',
        'An DÃ¹bhlachd',
    ],
    monthsShort = [
        'Faoi',
        'Gear',
        'MÃ rt',
        'Gibl',
        'CÃ¨it',
        'Ã’gmh',
        'Iuch',
        'LÃ¹n',
        'Sult',
        'DÃ mh',
        'Samh',
        'DÃ¹bh',
    ],
    weekdays = [
        'DidÃ²mhnaich',
        'Diluain',
        'DimÃ irt',
        'Diciadain',
        'Diardaoin',
        'Dihaoine',
        'Disathairne',
    ],
    weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
    weekdaysMin = ['DÃ²', 'Lu', 'MÃ ', 'Ci', 'Ar', 'Ha', 'Sa'];

export default moment.defineLocale('gd', {
    months: months,
    monthsShort: monthsShort,
    monthsParseExact: true,
    weekdays: weekdays,
    weekdaysShort: weekdaysShort,
    weekdaysMin: weekdaysMin,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[An-diugh aig] LT',
        nextDay: '[A-mÃ ireach aig] LT',
        nextWeek: 'dddd [aig] LT',
        lastDay: '[An-dÃ¨ aig] LT',
        lastWeek: 'dddd [seo chaidh] [aig] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ann an %s',
        past: 'bho chionn %s',
        s: 'beagan diogan',
        ss: '%d diogan',
        m: 'mionaid',
        mm: '%d mionaidean',
        h: 'uair',
        hh: '%d uairean',
        d: 'latha',
        dd: '%d latha',
        M: 'mÃ¬os',
        MM: '%d mÃ¬osan',
        y: 'bliadhna',
        yy: '%d bliadhna',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
    ordinal: function (number) {
        var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Galician [gl]
//! author : Juan G. Hurtado : https://github.com/juanghurtado

import moment from '../moment';

export default moment.defineLocale('gl', {
    months: 'xaneiro_febreiro_marzo_abril_maio_xuÃ±o_xullo_agosto_setembro_outubro_novembro_decembro'.split(
        '_'
    ),
    monthsShort: 'xan._feb._mar._abr._mai._xuÃ±._xul._ago._set._out._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'domingo_luns_martes_mÃ©rcores_xoves_venres_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._mÃ©r._xov._ven._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mÃ©_xo_ve_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY H:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
    },
    calendar: {
        sameDay: function () {
            return '[hoxe ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±Ã¡ ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT';
        },
        lastDay: function () {
            return '[onte ' + (this.hours() !== 1 ? 'Ã¡' : 'a') + '] LT';
        },
        lastWeek: function () {
            return (
                '[o] dddd [pasado ' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: function (str) {
            if (str.indexOf('un') === 0) {
                return 'n' + str;
            }
            return 'en ' + str;
        },
        past: 'hai %s',
        s: 'uns segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'unha hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        M: 'un mes',
        MM: '%d meses',
        y: 'un ano',
        yy: '%d anos',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Konkani Devanagari script [gom-deva]
//! author : The Discoverer : https://github.com/WikiDiscoverer

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        s: ['à¤¥à¥‹à¤¡à¤¯à¤¾ à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', 'à¤¥à¥‹à¤¡à¥‡ à¤¸à¥…à¤•à¤‚à¤¡'],
        ss: [number + ' à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', number + ' à¤¸à¥…à¤•à¤‚à¤¡'],
        m: ['à¤à¤•à¤¾ à¤®à¤¿à¤£à¤Ÿà¤¾à¤¨', 'à¤à¤• à¤®à¤¿à¤¨à¥‚à¤Ÿ'],
        mm: [number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚à¤¨à¥€', number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚'],
        h: ['à¤à¤•à¤¾ à¤µà¤°à¤¾à¤¨', 'à¤à¤• à¤µà¤°'],
        hh: [number + ' à¤µà¤°à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¤¾à¤‚'],
        d: ['à¤à¤•à¤¾ à¤¦à¤¿à¤¸à¤¾à¤¨', 'à¤à¤• à¤¦à¥€à¤¸'],
        dd: [number + ' à¤¦à¤¿à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤¦à¥€à¤¸'],
        M: ['à¤à¤•à¤¾ à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨', 'à¤à¤• à¤®à¥à¤¹à¤¯à¤¨à¥‹'],
        MM: [number + ' à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨à¥€', number + ' à¤®à¥à¤¹à¤¯à¤¨à¥‡'],
        y: ['à¤à¤•à¤¾ à¤µà¤°à¥à¤¸à¤¾à¤¨', 'à¤à¤• à¤µà¤°à¥à¤¸'],
        yy: [number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚'],
    };
    return isFuture ? format[key][0] : format[key][1];
}

export default moment.defineLocale('gom-deva', {
    months: {
        standalone: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¯_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
            '_'
        ),
        format: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤®à¤¾à¤°à¥à¤šà¤¾à¤šà¥à¤¯à¤¾_à¤à¤ªà¥à¤°à¥€à¤²à¤¾à¤šà¥à¤¯à¤¾_à¤®à¥‡à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥‚à¤¨à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥à¤²à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤—à¤¸à¥à¤Ÿà¤¾à¤šà¥à¤¯à¤¾_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾'.split(
            '_'
        ),
        isFormat: /MMMM(\s)+D[oD]?/,
    },
    monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€._à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à¤†à¤¯à¤¤à¤¾à¤°_à¤¸à¥‹à¤®à¤¾à¤°_à¤®à¤‚à¤—à¤³à¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤¬à¤¿à¤°à¥‡à¤¸à¥à¤¤à¤¾à¤°_à¤¸à¥à¤•à¥à¤°à¤¾à¤°_à¤¶à¥‡à¤¨à¤µà¤¾à¤°'.split('_'),
    weekdaysShort: 'à¤†à¤¯à¤¤._à¤¸à¥‹à¤®._à¤®à¤‚à¤—à¤³._à¤¬à¥à¤§._à¤¬à¥à¤°à¥‡à¤¸à¥à¤¤._à¤¸à¥à¤•à¥à¤°._à¤¶à¥‡à¤¨.'.split('_'),
    weekdaysMin: 'à¤†_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤¬à¥à¤°à¥‡_à¤¸à¥_à¤¶à¥‡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        LTS: 'A h:mm:ss [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        L: 'DD-MM-YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        LLLL: 'dddd, MMMM Do, YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        llll: 'ddd, D MMM YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
    },
    calendar: {
        sameDay: '[à¤†à¤¯à¤œ] LT',
        nextDay: '[à¤«à¤¾à¤²à¥à¤¯à¤¾à¤‚] LT',
        nextWeek: '[à¤«à¥à¤¡à¤²à¥‹] dddd[,] LT',
        lastDay: '[à¤•à¤¾à¤²] LT',
        lastWeek: '[à¤«à¤¾à¤Ÿà¤²à¥‹] dddd[,] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s',
        past: '%s à¤†à¤¦à¥€à¤‚',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: processRelativeTime,
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}(à¤µà¥‡à¤°)/,
    ordinal: function (number, period) {
        switch (period) {
            // the ordinal 'à¤µà¥‡à¤°' only applies to day of the month
            case 'D':
                return number + 'à¤µà¥‡à¤°';
            default:
            case 'M':
            case 'Q':
            case 'DDD':
            case 'd':
            case 'w':
            case 'W':
                return number;
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week
        doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
    },
    meridiemParse: /à¤°à¤¾à¤¤à¥€|à¤¸à¤•à¤¾à¤³à¥€à¤‚|à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚|à¤¸à¤¾à¤‚à¤œà¥‡/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¤°à¤¾à¤¤à¥€') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¤¸à¤•à¤¾à¤³à¥€à¤‚') {
            return hour;
        } else if (meridiem === 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚') {
            return hour > 12 ? hour : hour + 12;
        } else if (meridiem === 'à¤¸à¤¾à¤‚à¤œà¥‡') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¤°à¤¾à¤¤à¥€';
        } else if (hour < 12) {
            return 'à¤¸à¤•à¤¾à¤³à¥€à¤‚';
        } else if (hour < 16) {
            return 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚';
        } else if (hour < 20) {
            return 'à¤¸à¤¾à¤‚à¤œà¥‡';
        } else {
            return 'à¤°à¤¾à¤¤à¥€';
        }
    },
});
//! moment.js locale configuration
//! locale : Konkani Latin script [gom-latn]
//! author : The Discoverer : https://github.com/WikiDiscoverer

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        s: ['thoddea sekondamni', 'thodde sekond'],
        ss: [number + ' sekondamni', number + ' sekond'],
        m: ['eka mintan', 'ek minut'],
        mm: [number + ' mintamni', number + ' mintam'],
        h: ['eka voran', 'ek vor'],
        hh: [number + ' voramni', number + ' voram'],
        d: ['eka disan', 'ek dis'],
        dd: [number + ' disamni', number + ' dis'],
        M: ['eka mhoinean', 'ek mhoino'],
        MM: [number + ' mhoineamni', number + ' mhoine'],
        y: ['eka vorsan', 'ek voros'],
        yy: [number + ' vorsamni', number + ' vorsam'],
    };
    return isFuture ? format[key][0] : format[key][1];
}

export default moment.defineLocale('gom-latn', {
    months: {
        standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
            '_'
        ),
        format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
            '_'
        ),
        isFormat: /MMMM(\s)+D[oD]?/,
    },
    monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
    weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
    weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'A h:mm [vazta]',
        LTS: 'A h:mm:ss [vazta]',
        L: 'DD-MM-YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY A h:mm [vazta]',
        LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
        llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
    },
    calendar: {
        sameDay: '[Aiz] LT',
        nextDay: '[Faleam] LT',
        nextWeek: '[Fuddlo] dddd[,] LT',
        lastDay: '[Kal] LT',
        lastWeek: '[Fattlo] dddd[,] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s',
        past: '%s adim',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: processRelativeTime,
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er)/,
    ordinal: function (number, period) {
        switch (period) {
            // the ordinal 'er' only applies to day of the month
            case 'D':
                return number + 'er';
            default:
            case 'M':
            case 'Q':
            case 'DDD':
            case 'd':
            case 'w':
            case 'W':
                return number;
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week
        doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
    },
    meridiemParse: /rati|sokallim|donparam|sanje/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'rati') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'sokallim') {
            return hour;
        } else if (meridiem === 'donparam') {
            return hour > 12 ? hour : hour + 12;
        } else if (meridiem === 'sanje') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'rati';
        } else if (hour < 12) {
            return 'sokallim';
        } else if (hour < 16) {
            return 'donparam';
        } else if (hour < 20) {
            return 'sanje';
        } else {
            return 'rati';
        }
    },
});
//! moment.js locale configuration
//! locale : Gujarati [gu]
//! author : Kaushik Thanki : https://github.com/Kaushik1987

import moment from '../moment';

var symbolMap = {
        1: 'à«§',
        2: 'à«¨',
        3: 'à«©',
        4: 'à«ª',
        5: 'à««',
        6: 'à«¬',
        7: 'à«­',
        8: 'à«®',
        9: 'à«¯',
        0: 'à«¦',
    },
    numberMap = {
        'à«§': '1',
        'à«¨': '2',
        'à«©': '3',
        'à«ª': '4',
        'à««': '5',
        'à«¬': '6',
        'à«­': '7',
        'à«®': '8',
        'à«¯': '9',
        'à«¦': '0',
    };

export default moment.defineLocale('gu', {
    months: 'àªœàª¾àª¨à«àª¯à«àª†àª°à«€_àª«à«‡àª¬à«àª°à«àª†àª°à«€_àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿àª²_àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾àªˆ_àª‘àª—àª¸à«àªŸ_àª¸àªªà«àªŸà«‡àª®à«àª¬àª°_àª‘àª•à«àªŸà«àª¬àª°_àª¨àªµà«‡àª®à«àª¬àª°_àª¡àª¿àª¸à«‡àª®à«àª¬àª°'.split(
        '_'
    ),
    monthsShort: 'àªœàª¾àª¨à«àª¯à«._àª«à«‡àª¬à«àª°à«._àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿._àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾._àª‘àª—._àª¸àªªà«àªŸà«‡._àª‘àª•à«àªŸà«._àª¨àªµà«‡._àª¡àª¿àª¸à«‡.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'àª°àªµàª¿àªµàª¾àª°_àª¸à«‹àª®àªµàª¾àª°_àª®àª‚àª—àª³àªµàª¾àª°_àª¬à«àª§à«àªµàª¾àª°_àª—à«àª°à«àªµàª¾àª°_àª¶à«àª•à«àª°àªµàª¾àª°_àª¶àª¨àª¿àªµàª¾àª°'.split(
        '_'
    ),
    weekdaysShort: 'àª°àªµàª¿_àª¸à«‹àª®_àª®àª‚àª—àª³_àª¬à«àª§à«_àª—à«àª°à«_àª¶à«àª•à«àª°_àª¶àª¨àª¿'.split('_'),
    weekdaysMin: 'àª°_àª¸à«‹_àª®àª‚_àª¬à«_àª—à«_àª¶à«_àª¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm àªµàª¾àª—à«àª¯à«‡',
        LTS: 'A h:mm:ss àªµàª¾àª—à«àª¯à«‡',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
        LLLL: 'dddd, D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
    },
    calendar: {
        sameDay: '[àª†àªœ] LT',
        nextDay: '[àª•àª¾àª²à«‡] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[àª—àª‡àª•àª¾àª²à«‡] LT',
        lastWeek: '[àªªàª¾àª›àª²àª¾] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s àª®àª¾',
        past: '%s àªªàª¹à«‡àª²àª¾',
        s: 'àª…àª®à«àª• àªªàª³à«‹',
        ss: '%d àª¸à«‡àª•àª‚àª¡',
        m: 'àªàª• àª®àª¿àª¨àª¿àªŸ',
        mm: '%d àª®àª¿àª¨àª¿àªŸ',
        h: 'àªàª• àª•àª²àª¾àª•',
        hh: '%d àª•àª²àª¾àª•',
        d: 'àªàª• àª¦àª¿àªµàª¸',
        dd: '%d àª¦àª¿àªµàª¸',
        M: 'àªàª• àª®àª¹àª¿àª¨à«‹',
        MM: '%d àª®àª¹àª¿àª¨à«‹',
        y: 'àªàª• àªµàª°à«àª·',
        yy: '%d àªµàª°à«àª·',
    },
    preparse: function (string) {
        return string.replace(/[à«§à«¨à«©à«ªà««à«¬à«­à«®à«¯à«¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
    meridiemParse: /àª°àª¾àª¤|àª¬àªªà«‹àª°|àª¸àªµàª¾àª°|àª¸àª¾àª‚àªœ/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'àª°àª¾àª¤') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'àª¸àªµàª¾àª°') {
            return hour;
        } else if (meridiem === 'àª¬àªªà«‹àª°') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'àª¸àª¾àª‚àªœ') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'àª°àª¾àª¤';
        } else if (hour < 10) {
            return 'àª¸àªµàª¾àª°';
        } else if (hour < 17) {
            return 'àª¬àªªà«‹àª°';
        } else if (hour < 20) {
            return 'àª¸àª¾àª‚àªœ';
        } else {
            return 'àª°àª¾àª¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Hebrew [he]
//! author : Tomer Cohen : https://github.com/tomer
//! author : Moshe Simantov : https://github.com/DevelopmentIL
//! author : Tal Ater : https://github.com/TalAter

import moment from '../moment';

export default moment.defineLocale('he', {
    months: '×™× ×•××¨_×¤×‘×¨×•××¨_×ž×¨×¥_××¤×¨×™×œ_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×•×¡×˜_×¡×¤×˜×ž×‘×¨_××•×§×˜×•×‘×¨_× ×•×‘×ž×‘×¨_×“×¦×ž×‘×¨'.split(
        '_'
    ),
    monthsShort: '×™× ×•×³_×¤×‘×¨×³_×ž×¨×¥_××¤×¨×³_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×³_×¡×¤×˜×³_××•×§×³_× ×•×‘×³_×“×¦×ž×³'.split(
        '_'
    ),
    weekdays: '×¨××©×•×Ÿ_×©× ×™_×©×œ×™×©×™_×¨×‘×™×¢×™_×—×ž×™×©×™_×©×™×©×™_×©×‘×ª'.split('_'),
    weekdaysShort: '××³_×‘×³_×’×³_×“×³_×”×³_×•×³_×©×³'.split('_'),
    weekdaysMin: '×_×‘_×’_×“_×”_×•_×©'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [×‘]MMMM YYYY',
        LLL: 'D [×‘]MMMM YYYY HH:mm',
        LLLL: 'dddd, D [×‘]MMMM YYYY HH:mm',
        l: 'D/M/YYYY',
        ll: 'D MMM YYYY',
        lll: 'D MMM YYYY HH:mm',
        llll: 'ddd, D MMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[×”×™×•× ×‘Ö¾]LT',
        nextDay: '[×ž×—×¨ ×‘Ö¾]LT',
        nextWeek: 'dddd [×‘×©×¢×”] LT',
        lastDay: '[××ª×ž×•×œ ×‘Ö¾]LT',
        lastWeek: '[×‘×™×•×] dddd [×”××—×¨×•×Ÿ ×‘×©×¢×”] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '×‘×¢×•×“ %s',
        past: '×œ×¤× ×™ %s',
        s: '×ž×¡×¤×¨ ×©× ×™×•×ª',
        ss: '%d ×©× ×™×•×ª',
        m: '×“×§×”',
        mm: '%d ×“×§×•×ª',
        h: '×©×¢×”',
        hh: function (number) {
            if (number === 2) {
                return '×©×¢×ª×™×™×';
            }
            return number + ' ×©×¢×•×ª';
        },
        d: '×™×•×',
        dd: function (number) {
            if (number === 2) {
                return '×™×•×ž×™×™×';
            }
            return number + ' ×™×ž×™×';
        },
        M: '×—×•×“×©',
        MM: function (number) {
            if (number === 2) {
                return '×—×•×“×©×™×™×';
            }
            return number + ' ×—×•×“×©×™×';
        },
        y: '×©× ×”',
        yy: function (number) {
            if (number === 2) {
                return '×©× ×ª×™×™×';
            } else if (number % 10 === 0 && number !== 10) {
                return number + ' ×©× ×”';
            }
            return number + ' ×©× ×™×';
        },
    },
    meridiemParse: /××—×”"×¦|×œ×¤× ×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×œ×¤× ×™ ×”×¦×”×¨×™×™×|×œ×¤× ×•×ª ×‘×•×§×¨|×‘×‘×•×§×¨|×‘×¢×¨×‘/i,
    isPM: function (input) {
        return /^(××—×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×‘×¢×¨×‘)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 5) {
            return '×œ×¤× ×•×ª ×‘×•×§×¨';
        } else if (hour < 10) {
            return '×‘×‘×•×§×¨';
        } else if (hour < 12) {
            return isLower ? '×œ×¤× ×”"×¦' : '×œ×¤× ×™ ×”×¦×”×¨×™×™×';
        } else if (hour < 18) {
            return isLower ? '××—×”"×¦' : '××—×¨×™ ×”×¦×”×¨×™×™×';
        } else {
            return '×‘×¢×¨×‘';
        }
    },
});
//! moment.js locale configuration
//! locale : Hindi [hi]
//! author : Mayank Singhal : https://github.com/mayanksinghal

import moment from '../moment';

var symbolMap = {
        1: 'à¥§',
        2: 'à¥¨',
        3: 'à¥©',
        4: 'à¥ª',
        5: 'à¥«',
        6: 'à¥¬',
        7: 'à¥­',
        8: 'à¥®',
        9: 'à¥¯',
        0: 'à¥¦',
    },
    numberMap = {
        'à¥§': '1',
        'à¥¨': '2',
        'à¥©': '3',
        'à¥ª': '4',
        'à¥«': '5',
        'à¥¬': '6',
        'à¥­': '7',
        'à¥®': '8',
        'à¥¯': '9',
        'à¥¦': '0',
    },
    monthsParse = [
        /^à¤œà¤¨/i,
        /^à¤«à¤¼à¤°|à¤«à¤°/i,
        /^à¤®à¤¾à¤°à¥à¤š/i,
        /^à¤…à¤ªà¥à¤°à¥ˆ/i,
        /^à¤®à¤ˆ/i,
        /^à¤œà¥‚à¤¨/i,
        /^à¤œà¥à¤²/i,
        /^à¤…à¤—/i,
        /^à¤¸à¤¿à¤¤à¤‚|à¤¸à¤¿à¤¤/i,
        /^à¤…à¤•à¥à¤Ÿà¥‚/i,
        /^à¤¨à¤µ|à¤¨à¤µà¤‚/i,
        /^à¤¦à¤¿à¤¸à¤‚|à¤¦à¤¿à¤¸/i,
    ],
    shortMonthsParse = [
        /^à¤œà¤¨/i,
        /^à¤«à¤¼à¤°/i,
        /^à¤®à¤¾à¤°à¥à¤š/i,
        /^à¤…à¤ªà¥à¤°à¥ˆ/i,
        /^à¤®à¤ˆ/i,
        /^à¤œà¥‚à¤¨/i,
        /^à¤œà¥à¤²/i,
        /^à¤…à¤—/i,
        /^à¤¸à¤¿à¤¤/i,
        /^à¤…à¤•à¥à¤Ÿà¥‚/i,
        /^à¤¨à¤µ/i,
        /^à¤¦à¤¿à¤¸/i,
    ];

export default moment.defineLocale('hi', {
    months: {
        format: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤¼à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤®à¥à¤¬à¤°_à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°'.split(
            '_'
        ),
        standalone: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤‚à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤‚à¤¬à¤°_à¤¦à¤¿à¤¸à¤‚à¤¬à¤°'.split(
            '_'
        ),
    },
    monthsShort: 'à¤œà¤¨._à¤«à¤¼à¤°._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆ._à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤…à¤—._à¤¸à¤¿à¤¤._à¤…à¤•à¥à¤Ÿà¥‚._à¤¨à¤µ._à¤¦à¤¿à¤¸.'.split(
        '_'
    ),
    weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤²à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
    weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤²_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
    weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¤¬à¤œà¥‡',
        LTS: 'A h:mm:ss à¤¬à¤œà¥‡',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
    },

    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: shortMonthsParse,

    monthsRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

    monthsShortRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

    monthsStrictRegex: /^(à¤œà¤¨à¤µà¤°à¥€?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ?|à¤…à¤—à¤¸à¥à¤¤?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤?\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°?)/i,

    monthsShortStrictRegex: /^(à¤œà¤¨\.?|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²\.?|à¤…à¤—\.?|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸\.?)/i,

    calendar: {
        sameDay: '[à¤†à¤œ] LT',
        nextDay: '[à¤•à¤²] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à¤•à¤²] LT',
        lastWeek: '[à¤ªà¤¿à¤›à¤²à¥‡] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à¤®à¥‡à¤‚',
        past: '%s à¤ªà¤¹à¤²à¥‡',
        s: 'à¤•à¥à¤› à¤¹à¥€ à¤•à¥à¤·à¤£',
        ss: '%d à¤¸à¥‡à¤•à¤‚à¤¡',
        m: 'à¤à¤• à¤®à¤¿à¤¨à¤Ÿ',
        mm: '%d à¤®à¤¿à¤¨à¤Ÿ',
        h: 'à¤à¤• à¤˜à¤‚à¤Ÿà¤¾',
        hh: '%d à¤˜à¤‚à¤Ÿà¥‡',
        d: 'à¤à¤• à¤¦à¤¿à¤¨',
        dd: '%d à¤¦à¤¿à¤¨',
        M: 'à¤à¤• à¤®à¤¹à¥€à¤¨à¥‡',
        MM: '%d à¤®à¤¹à¥€à¤¨à¥‡',
        y: 'à¤à¤• à¤µà¤°à¥à¤·',
        yy: '%d à¤µà¤°à¥à¤·',
    },
    preparse: function (string) {
        return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    // Hindi notation for meridiems are quite fuzzy in practice. While there exists
    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
    meridiemParse: /à¤°à¤¾à¤¤|à¤¸à¥à¤¬à¤¹|à¤¦à¥‹à¤ªà¤¹à¤°|à¤¶à¤¾à¤®/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¤°à¤¾à¤¤') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¤¸à¥à¤¬à¤¹') {
            return hour;
        } else if (meridiem === 'à¤¦à¥‹à¤ªà¤¹à¤°') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à¤¶à¤¾à¤®') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¤°à¤¾à¤¤';
        } else if (hour < 10) {
            return 'à¤¸à¥à¤¬à¤¹';
        } else if (hour < 17) {
            return 'à¤¦à¥‹à¤ªà¤¹à¤°';
        } else if (hour < 20) {
            return 'à¤¶à¤¾à¤®';
        } else {
            return 'à¤°à¤¾à¤¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Croatian [hr]
//! author : Bojan MarkoviÄ‡ : https://github.com/bmarkovic

import moment from '../moment';

function translate(number, withoutSuffix, key) {
    var result = number + ' ';
    switch (key) {
        case 'ss':
            if (number === 1) {
                result += 'sekunda';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'sekunde';
            } else {
                result += 'sekundi';
            }
            return result;
        case 'm':
            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
        case 'mm':
            if (number === 1) {
                result += 'minuta';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'minute';
            } else {
                result += 'minuta';
            }
            return result;
        case 'h':
            return withoutSuffix ? 'jedan sat' : 'jednog sata';
        case 'hh':
            if (number === 1) {
                result += 'sat';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'sata';
            } else {
                result += 'sati';
            }
            return result;
        case 'dd':
            if (number === 1) {
                result += 'dan';
            } else {
                result += 'dana';
            }
            return result;
        case 'MM':
            if (number === 1) {
                result += 'mjesec';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'mjeseca';
            } else {
                result += 'mjeseci';
            }
            return result;
        case 'yy':
            if (number === 1) {
                result += 'godina';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'godine';
            } else {
                result += 'godina';
            }
            return result;
    }
}

export default moment.defineLocale('hr', {
    months: {
        format: 'sijeÄnja_veljaÄe_oÅ¾ujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
            '_'
        ),
        standalone: 'sijeÄanj_veljaÄa_oÅ¾ujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
            '_'
        ),
    },
    monthsShort: 'sij._velj._oÅ¾u._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
        '_'
    ),
    weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'Do MMMM YYYY',
        LLL: 'Do MMMM YYYY H:mm',
        LLLL: 'dddd, Do MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[danas u] LT',
        nextDay: '[sutra u] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[u] [nedjelju] [u] LT';
                case 3:
                    return '[u] [srijedu] [u] LT';
                case 6:
                    return '[u] [subotu] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[u] dddd [u] LT';
            }
        },
        lastDay: '[juÄer u] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[proÅ¡lu] [nedjelju] [u] LT';
                case 3:
                    return '[proÅ¡lu] [srijedu] [u] LT';
                case 6:
                    return '[proÅ¡le] [subote] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[proÅ¡li] dddd [u] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'prije %s',
        s: 'par sekundi',
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: 'dan',
        dd: translate,
        M: 'mjesec',
        MM: translate,
        y: 'godinu',
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Hungarian [hu]
//! author : Adam Brunner : https://github.com/adambrunner
//! author : Peter Viszt  : https://github.com/passatgt

import moment from '../moment';

var weekEndings = 'vasÃ¡rnap hÃ©tfÅ‘n kedden szerdÃ¡n csÃ¼tÃ¶rtÃ¶kÃ¶n pÃ©nteken szombaton'.split(
    ' '
);
function translate(number, withoutSuffix, key, isFuture) {
    var num = number;
    switch (key) {
        case 's':
            return isFuture || withoutSuffix
                ? 'nÃ©hÃ¡ny mÃ¡sodperc'
                : 'nÃ©hÃ¡ny mÃ¡sodperce';
        case 'ss':
            return num + (isFuture || withoutSuffix)
                ? ' mÃ¡sodperc'
                : ' mÃ¡sodperce';
        case 'm':
            return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
        case 'mm':
            return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
        case 'h':
            return 'egy' + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
        case 'hh':
            return num + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
        case 'd':
            return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
        case 'dd':
            return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
        case 'M':
            return 'egy' + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
        case 'MM':
            return num + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
        case 'y':
            return 'egy' + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
        case 'yy':
            return num + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
    }
    return '';
}
function week(isFuture) {
    return (
        (isFuture ? '' : '[mÃºlt] ') +
        '[' +
        weekEndings[this.day()] +
        '] LT[-kor]'
    );
}

export default moment.defineLocale('hu', {
    months: 'januÃ¡r_februÃ¡r_mÃ¡rcius_Ã¡prilis_mÃ¡jus_jÃºnius_jÃºlius_augusztus_szeptember_oktÃ³ber_november_december'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mÃ¡rc._Ã¡pr._mÃ¡j._jÃºn._jÃºl._aug._szept._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'vasÃ¡rnap_hÃ©tfÅ‘_kedd_szerda_csÃ¼tÃ¶rtÃ¶k_pÃ©ntek_szombat'.split('_'),
    weekdaysShort: 'vas_hÃ©t_kedd_sze_csÃ¼t_pÃ©n_szo'.split('_'),
    weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'YYYY.MM.DD.',
        LL: 'YYYY. MMMM D.',
        LLL: 'YYYY. MMMM D. H:mm',
        LLLL: 'YYYY. MMMM D., dddd H:mm',
    },
    meridiemParse: /de|du/i,
    isPM: function (input) {
        return input.charAt(1).toLowerCase() === 'u';
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 12) {
            return isLower === true ? 'de' : 'DE';
        } else {
            return isLower === true ? 'du' : 'DU';
        }
    },
    calendar: {
        sameDay: '[ma] LT[-kor]',
        nextDay: '[holnap] LT[-kor]',
        nextWeek: function () {
            return week.call(this, true);
        },
        lastDay: '[tegnap] LT[-kor]',
        lastWeek: function () {
            return week.call(this, false);
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s mÃºlva',
        past: '%s',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Armenian [hy-am]
//! author : Armendarabyan : https://github.com/armendarabyan

import moment from '../moment';

export default moment.defineLocale('hy-am', {
    months: {
        format: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€Õ«_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€Õ«_Õ´Õ¡Ö€Õ¿Õ«_Õ¡ÕºÖ€Õ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸Ö‚Õ¶Õ«Õ½Õ«_Õ°Õ¸Ö‚Õ¬Õ«Õ½Õ«_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«'.split(
            '_'
        ),
        standalone: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€_Õ´Õ¡Ö€Õ¿_Õ¡ÕºÖ€Õ«Õ¬_Õ´Õ¡ÕµÕ«Õ½_Õ°Õ¸Ö‚Õ¶Õ«Õ½_Õ°Õ¸Ö‚Õ¬Õ«Õ½_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'.split(
            '_'
        ),
    },
    monthsShort: 'Õ°Õ¶Õ¾_ÖƒÕ¿Ö€_Õ´Ö€Õ¿_Õ¡ÕºÖ€_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö…Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿'.split('_'),
    weekdays: 'Õ¯Õ«Ö€Õ¡Õ¯Õ«_Õ¥Ö€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«_Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸Ö‚Ö€Õ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©'.split(
        '_'
    ),
    weekdaysShort: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
    weekdaysMin: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY Õ©.',
        LLL: 'D MMMM YYYY Õ©., HH:mm',
        LLLL: 'dddd, D MMMM YYYY Õ©., HH:mm',
    },
    calendar: {
        sameDay: '[Õ¡ÕµÕ½Ö…Ö€] LT',
        nextDay: '[Õ¾Õ¡Õ²Õ¨] LT',
        lastDay: '[Õ¥Ö€Õ¥Õ¯] LT',
        nextWeek: function () {
            return 'dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
        },
        lastWeek: function () {
            return '[Õ¡Õ¶ÖÕ¡Õ®] dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Õ°Õ¥Õ¿Õ¸',
        past: '%s Õ¡Õ¼Õ¡Õ»',
        s: 'Õ´Õ« Ö„Õ¡Õ¶Õ« Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
        ss: '%d Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
        m: 'Ö€Õ¸ÕºÕ¥',
        mm: '%d Ö€Õ¸ÕºÕ¥',
        h: 'ÕªÕ¡Õ´',
        hh: '%d ÕªÕ¡Õ´',
        d: 'Ö…Ö€',
        dd: '%d Ö…Ö€',
        M: 'Õ¡Õ´Õ«Õ½',
        MM: '%d Õ¡Õ´Õ«Õ½',
        y: 'Õ¿Õ¡Ö€Õ«',
        yy: '%d Õ¿Õ¡Ö€Õ«',
    },
    meridiemParse: /Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶/,
    isPM: function (input) {
        return /^(ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶)$/.test(input);
    },
    meridiem: function (hour) {
        if (hour < 4) {
            return 'Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡';
        } else if (hour < 12) {
            return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡';
        } else if (hour < 17) {
            return 'ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡';
        } else {
            return 'Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(Õ«Õ¶|Ö€Õ¤)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'DDD':
            case 'w':
            case 'W':
            case 'DDDo':
                if (number === 1) {
                    return number + '-Õ«Õ¶';
                }
                return number + '-Ö€Õ¤';
            default:
                return number;
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Indonesian [id]
//! author : Mohammad Satrio Utomo : https://github.com/tyok
//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan

import moment from '../moment';

export default moment.defineLocale('id', {
    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
    weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
    weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [pukul] HH.mm',
        LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
    },
    meridiemParse: /pagi|siang|sore|malam/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'pagi') {
            return hour;
        } else if (meridiem === 'siang') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'sore' || meridiem === 'malam') {
            return hour + 12;
        }
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'pagi';
        } else if (hours < 15) {
            return 'siang';
        } else if (hours < 19) {
            return 'sore';
        } else {
            return 'malam';
        }
    },
    calendar: {
        sameDay: '[Hari ini pukul] LT',
        nextDay: '[Besok pukul] LT',
        nextWeek: 'dddd [pukul] LT',
        lastDay: '[Kemarin pukul] LT',
        lastWeek: 'dddd [lalu pukul] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dalam %s',
        past: '%s yang lalu',
        s: 'beberapa detik',
        ss: '%d detik',
        m: 'semenit',
        mm: '%d menit',
        h: 'sejam',
        hh: '%d jam',
        d: 'sehari',
        dd: '%d hari',
        M: 'sebulan',
        MM: '%d bulan',
        y: 'setahun',
        yy: '%d tahun',
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Icelandic [is]
//! author : Hinrik Ã–rn SigurÃ°sson : https://github.com/hinrik

import moment from '../moment';

function plural(n) {
    if (n % 100 === 11) {
        return true;
    } else if (n % 10 === 1) {
        return false;
    }
    return true;
}
function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    switch (key) {
        case 's':
            return withoutSuffix || isFuture
                ? 'nokkrar sekÃºndur'
                : 'nokkrum sekÃºndum';
        case 'ss':
            if (plural(number)) {
                return (
                    result +
                    (withoutSuffix || isFuture ? 'sekÃºndur' : 'sekÃºndum')
                );
            }
            return result + 'sekÃºnda';
        case 'm':
            return withoutSuffix ? 'mÃ­nÃºta' : 'mÃ­nÃºtu';
        case 'mm':
            if (plural(number)) {
                return (
                    result + (withoutSuffix || isFuture ? 'mÃ­nÃºtur' : 'mÃ­nÃºtum')
                );
            } else if (withoutSuffix) {
                return result + 'mÃ­nÃºta';
            }
            return result + 'mÃ­nÃºtu';
        case 'hh':
            if (plural(number)) {
                return (
                    result +
                    (withoutSuffix || isFuture
                        ? 'klukkustundir'
                        : 'klukkustundum')
                );
            }
            return result + 'klukkustund';
        case 'd':
            if (withoutSuffix) {
                return 'dagur';
            }
            return isFuture ? 'dag' : 'degi';
        case 'dd':
            if (plural(number)) {
                if (withoutSuffix) {
                    return result + 'dagar';
                }
                return result + (isFuture ? 'daga' : 'dÃ¶gum');
            } else if (withoutSuffix) {
                return result + 'dagur';
            }
            return result + (isFuture ? 'dag' : 'degi');
        case 'M':
            if (withoutSuffix) {
                return 'mÃ¡nuÃ°ur';
            }
            return isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i';
        case 'MM':
            if (plural(number)) {
                if (withoutSuffix) {
                    return result + 'mÃ¡nuÃ°ir';
                }
                return result + (isFuture ? 'mÃ¡nuÃ°i' : 'mÃ¡nuÃ°um');
            } else if (withoutSuffix) {
                return result + 'mÃ¡nuÃ°ur';
            }
            return result + (isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i');
        case 'y':
            return withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri';
        case 'yy':
            if (plural(number)) {
                return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡rum');
            }
            return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri');
    }
}

export default moment.defineLocale('is', {
    months: 'janÃºar_febrÃºar_mars_aprÃ­l_maÃ­_jÃºnÃ­_jÃºlÃ­_Ã¡gÃºst_september_oktÃ³ber_nÃ³vember_desember'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_maÃ­_jÃºn_jÃºl_Ã¡gÃº_sep_okt_nÃ³v_des'.split('_'),
    weekdays: 'sunnudagur_mÃ¡nudagur_Ã¾riÃ°judagur_miÃ°vikudagur_fimmtudagur_fÃ¶studagur_laugardagur'.split(
        '_'
    ),
    weekdaysShort: 'sun_mÃ¡n_Ã¾ri_miÃ°_fim_fÃ¶s_lau'.split('_'),
    weekdaysMin: 'Su_MÃ¡_Ãžr_Mi_Fi_FÃ¶_La'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY [kl.] H:mm',
        LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
    },
    calendar: {
        sameDay: '[Ã­ dag kl.] LT',
        nextDay: '[Ã¡ morgun kl.] LT',
        nextWeek: 'dddd [kl.] LT',
        lastDay: '[Ã­ gÃ¦r kl.] LT',
        lastWeek: '[sÃ­Ã°asta] dddd [kl.] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'eftir %s',
        past: 'fyrir %s sÃ­Ã°an',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: 'klukkustund',
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Italian (Switzerland) [it-ch]
//! author : xfh : https://github.com/xfh

import moment from '../moment';

export default moment.defineLocale('it-ch', {
    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
        '_'
    ),
    monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
    weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
        '_'
    ),
    weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
    weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Oggi alle] LT',
        nextDay: '[Domani alle] LT',
        nextWeek: 'dddd [alle] LT',
        lastDay: '[Ieri alle] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[la scorsa] dddd [alle] LT';
                default:
                    return '[lo scorso] dddd [alle] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: function (s) {
            return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
        },
        past: '%s fa',
        s: 'alcuni secondi',
        ss: '%d secondi',
        m: 'un minuto',
        mm: '%d minuti',
        h: "un'ora",
        hh: '%d ore',
        d: 'un giorno',
        dd: '%d giorni',
        M: 'un mese',
        MM: '%d mesi',
        y: 'un anno',
        yy: '%d anni',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Italian [it]
//! author : Lorenzo : https://github.com/aliem
//! author: Mattia Larentis: https://github.com/nostalgiaz
//! author: Marco : https://github.com/Manfre98

import moment from '../moment';

export default moment.defineLocale('it', {
    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
        '_'
    ),
    monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
    weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
        '_'
    ),
    weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
    weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: function () {
            return (
                '[Oggi a' +
                (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                ']LT'
            );
        },
        nextDay: function () {
            return (
                '[Domani a' +
                (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                ']LT'
            );
        },
        nextWeek: function () {
            return (
                'dddd [a' +
                (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                ']LT'
            );
        },
        lastDay: function () {
            return (
                '[Ieri a' +
                (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                ']LT'
            );
        },
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return (
                        '[La scorsa] dddd [a' +
                        (this.hours() > 1
                            ? 'lle '
                            : this.hours() === 0
                            ? ' '
                            : "ll'") +
                        ']LT'
                    );
                default:
                    return (
                        '[Lo scorso] dddd [a' +
                        (this.hours() > 1
                            ? 'lle '
                            : this.hours() === 0
                            ? ' '
                            : "ll'") +
                        ']LT'
                    );
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'tra %s',
        past: '%s fa',
        s: 'alcuni secondi',
        ss: '%d secondi',
        m: 'un minuto',
        mm: '%d minuti',
        h: "un'ora",
        hh: '%d ore',
        d: 'un giorno',
        dd: '%d giorni',
        w: 'una settimana',
        ww: '%d settimane',
        M: 'un mese',
        MM: '%d mesi',
        y: 'un anno',
        yy: '%d anni',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Japanese [ja]
//! author : LI Long : https://github.com/baryon

import moment from '../moment';

export default moment.defineLocale('ja', {
    eras: [
        {
            since: '2019-05-01',
            offset: 1,
            name: 'ä»¤å’Œ',
            narrow: 'ã‹¿',
            abbr: 'R',
        },
        {
            since: '1989-01-08',
            until: '2019-04-30',
            offset: 1,
            name: 'å¹³æˆ',
            narrow: 'ã»',
            abbr: 'H',
        },
        {
            since: '1926-12-25',
            until: '1989-01-07',
            offset: 1,
            name: 'æ˜­å’Œ',
            narrow: 'ã¼',
            abbr: 'S',
        },
        {
            since: '1912-07-30',
            until: '1926-12-24',
            offset: 1,
            name: 'å¤§æ­£',
            narrow: 'ã½',
            abbr: 'T',
        },
        {
            since: '1873-01-01',
            until: '1912-07-29',
            offset: 6,
            name: 'æ˜Žæ²»',
            narrow: 'ã¾',
            abbr: 'M',
        },
        {
            since: '0001-01-01',
            until: '1873-12-31',
            offset: 1,
            name: 'è¥¿æš¦',
            narrow: 'AD',
            abbr: 'AD',
        },
        {
            since: '0000-12-31',
            until: -Infinity,
            offset: 1,
            name: 'ç´€å…ƒå‰',
            narrow: 'BC',
            abbr: 'BC',
        },
    ],
    eraYearOrdinalRegex: /(å…ƒ|\d+)å¹´/,
    eraYearOrdinalParse: function (input, match) {
        return match[1] === 'å…ƒ' ? 1 : parseInt(match[1] || input, 10);
    },
    months: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split('_'),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ—¥æ›œæ—¥_æœˆæ›œæ—¥_ç«æ›œæ—¥_æ°´æ›œæ—¥_æœ¨æ›œæ—¥_é‡‘æ›œæ—¥_åœŸæ›œæ—¥'.split('_'),
    weekdaysShort: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
    weekdaysMin: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        LLLL: 'YYYYå¹´MæœˆDæ—¥ dddd HH:mm',
        l: 'YYYY/MM/DD',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥(ddd) HH:mm',
    },
    meridiemParse: /åˆå‰|åˆå¾Œ/i,
    isPM: function (input) {
        return input === 'åˆå¾Œ';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'åˆå‰';
        } else {
            return 'åˆå¾Œ';
        }
    },
    calendar: {
        sameDay: '[ä»Šæ—¥] LT',
        nextDay: '[æ˜Žæ—¥] LT',
        nextWeek: function (now) {
            if (now.week() !== this.week()) {
                return '[æ¥é€±]dddd LT';
            } else {
                return 'dddd LT';
            }
        },
        lastDay: '[æ˜¨æ—¥] LT',
        lastWeek: function (now) {
            if (this.week() !== now.week()) {
                return '[å…ˆé€±]dddd LT';
            } else {
                return 'dddd LT';
            }
        },
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}æ—¥/,
    ordinal: function (number, period) {
        switch (period) {
            case 'y':
                return number === 1 ? 'å…ƒå¹´' : number + 'å¹´';
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%så¾Œ',
        past: '%så‰',
        s: 'æ•°ç§’',
        ss: '%dç§’',
        m: '1åˆ†',
        mm: '%dåˆ†',
        h: '1æ™‚é–“',
        hh: '%dæ™‚é–“',
        d: '1æ—¥',
        dd: '%dæ—¥',
        M: '1ãƒ¶æœˆ',
        MM: '%dãƒ¶æœˆ',
        y: '1å¹´',
        yy: '%då¹´',
    },
});
//! moment.js locale configuration
//! locale : Javanese [jv]
//! author : Rony Lantip : https://github.com/lantip
//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa

import moment from '../moment';

export default moment.defineLocale('jv', {
    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
    weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
    weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [pukul] HH.mm',
        LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
    },
    meridiemParse: /enjing|siyang|sonten|ndalu/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'enjing') {
            return hour;
        } else if (meridiem === 'siyang') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
            return hour + 12;
        }
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'enjing';
        } else if (hours < 15) {
            return 'siyang';
        } else if (hours < 19) {
            return 'sonten';
        } else {
            return 'ndalu';
        }
    },
    calendar: {
        sameDay: '[Dinten puniko pukul] LT',
        nextDay: '[Mbenjang pukul] LT',
        nextWeek: 'dddd [pukul] LT',
        lastDay: '[Kala wingi pukul] LT',
        lastWeek: 'dddd [kepengker pukul] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'wonten ing %s',
        past: '%s ingkang kepengker',
        s: 'sawetawis detik',
        ss: '%d detik',
        m: 'setunggal menit',
        mm: '%d menit',
        h: 'setunggal jam',
        hh: '%d jam',
        d: 'sedinten',
        dd: '%d dinten',
        M: 'sewulan',
        MM: '%d wulan',
        y: 'setaun',
        yy: '%d taun',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Georgian [ka]
//! author : Irakli Janiashvili : https://github.com/IrakliJani

import moment from '../moment';

export default moment.defineLocale('ka', {
    months: 'áƒ˜áƒáƒœáƒ•áƒáƒ áƒ˜_áƒ—áƒ”áƒ‘áƒ”áƒ áƒ•áƒáƒšáƒ˜_áƒ›áƒáƒ áƒ¢áƒ˜_áƒáƒžáƒ áƒ˜áƒšáƒ˜_áƒ›áƒáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒœáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒšáƒ˜áƒ¡áƒ˜_áƒáƒ’áƒ•áƒ˜áƒ¡áƒ¢áƒ_áƒ¡áƒ”áƒ¥áƒ¢áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘áƒ”áƒ áƒ˜_áƒœáƒáƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒ“áƒ”áƒ™áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜'.split(
        '_'
    ),
    monthsShort: 'áƒ˜áƒáƒœ_áƒ—áƒ”áƒ‘_áƒ›áƒáƒ _áƒáƒžáƒ _áƒ›áƒáƒ˜_áƒ˜áƒ•áƒœ_áƒ˜áƒ•áƒš_áƒáƒ’áƒ•_áƒ¡áƒ”áƒ¥_áƒáƒ¥áƒ¢_áƒœáƒáƒ”_áƒ“áƒ”áƒ™'.split('_'),
    weekdays: {
        standalone: 'áƒ™áƒ•áƒ˜áƒ áƒ_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ˜_áƒ¨áƒáƒ‘áƒáƒ—áƒ˜'.split(
            '_'
        ),
        format: 'áƒ™áƒ•áƒ˜áƒ áƒáƒ¡_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ¡_áƒ¨áƒáƒ‘áƒáƒ—áƒ¡'.split(
            '_'
        ),
        isFormat: /(áƒ¬áƒ˜áƒœáƒ|áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’)/,
    },
    weekdaysShort: 'áƒ™áƒ•áƒ˜_áƒáƒ áƒ¨_áƒ¡áƒáƒ›_áƒáƒ—áƒ®_áƒ®áƒ£áƒ—_áƒžáƒáƒ _áƒ¨áƒáƒ‘'.split('_'),
    weekdaysMin: 'áƒ™áƒ•_áƒáƒ _áƒ¡áƒ_áƒáƒ—_áƒ®áƒ£_áƒžáƒ_áƒ¨áƒ'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[áƒ“áƒ¦áƒ”áƒ¡] LT[-áƒ–áƒ”]',
        nextDay: '[áƒ®áƒ•áƒáƒš] LT[-áƒ–áƒ”]',
        lastDay: '[áƒ’áƒ£áƒ¨áƒ˜áƒœ] LT[-áƒ–áƒ”]',
        nextWeek: '[áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’] dddd LT[-áƒ–áƒ”]',
        lastWeek: '[áƒ¬áƒ˜áƒœáƒ] dddd LT-áƒ–áƒ”',
        sameElse: 'L',
    },
    relativeTime: {
        future: function (s) {
            return s.replace(/(áƒ¬áƒáƒ›|áƒ¬áƒ£áƒ—|áƒ¡áƒáƒáƒ—|áƒ¬áƒ”áƒš|áƒ“áƒ¦|áƒ—áƒ•)(áƒ˜|áƒ”)/, function (
                $0,
                $1,
                $2
            ) {
                return $2 === 'áƒ˜' ? $1 + 'áƒ¨áƒ˜' : $1 + $2 + 'áƒ¨áƒ˜';
            });
        },
        past: function (s) {
            if (/(áƒ¬áƒáƒ›áƒ˜|áƒ¬áƒ£áƒ—áƒ˜|áƒ¡áƒáƒáƒ—áƒ˜|áƒ“áƒ¦áƒ”|áƒ—áƒ•áƒ”)/.test(s)) {
                return s.replace(/(áƒ˜|áƒ”)$/, 'áƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
            }
            if (/áƒ¬áƒ”áƒšáƒ˜/.test(s)) {
                return s.replace(/áƒ¬áƒ”áƒšáƒ˜$/, 'áƒ¬áƒšáƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
            }
            return s;
        },
        s: 'áƒ áƒáƒ›áƒ“áƒ”áƒœáƒ˜áƒ›áƒ” áƒ¬áƒáƒ›áƒ˜',
        ss: '%d áƒ¬áƒáƒ›áƒ˜',
        m: 'áƒ¬áƒ£áƒ—áƒ˜',
        mm: '%d áƒ¬áƒ£áƒ—áƒ˜',
        h: 'áƒ¡áƒáƒáƒ—áƒ˜',
        hh: '%d áƒ¡áƒáƒáƒ—áƒ˜',
        d: 'áƒ“áƒ¦áƒ”',
        dd: '%d áƒ“áƒ¦áƒ”',
        M: 'áƒ—áƒ•áƒ”',
        MM: '%d áƒ—áƒ•áƒ”',
        y: 'áƒ¬áƒ”áƒšáƒ˜',
        yy: '%d áƒ¬áƒ”áƒšáƒ˜',
    },
    dayOfMonthOrdinalParse: /0|1-áƒšáƒ˜|áƒ›áƒ”-\d{1,2}|\d{1,2}-áƒ”/,
    ordinal: function (number) {
        if (number === 0) {
            return number;
        }
        if (number === 1) {
            return number + '-áƒšáƒ˜';
        }
        if (
            number < 20 ||
            (number <= 100 && number % 20 === 0) ||
            number % 100 === 0
        ) {
            return 'áƒ›áƒ”-' + number;
        }
        return number + '-áƒ”';
    },
    week: {
        dow: 1,
        doy: 7,
    },
});
//! moment.js locale configuration
//! locale : Kazakh [kk]
//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan

import moment from '../moment';

var suffixes = {
    0: '-ÑˆÑ–',
    1: '-ÑˆÑ–',
    2: '-ÑˆÑ–',
    3: '-ÑˆÑ–',
    4: '-ÑˆÑ–',
    5: '-ÑˆÑ–',
    6: '-ÑˆÑ‹',
    7: '-ÑˆÑ–',
    8: '-ÑˆÑ–',
    9: '-ÑˆÑ‹',
    10: '-ÑˆÑ‹',
    20: '-ÑˆÑ‹',
    30: '-ÑˆÑ‹',
    40: '-ÑˆÑ‹',
    50: '-ÑˆÑ–',
    60: '-ÑˆÑ‹',
    70: '-ÑˆÑ–',
    80: '-ÑˆÑ–',
    90: '-ÑˆÑ‹',
    100: '-ÑˆÑ–',
};

export default moment.defineLocale('kk', {
    months: 'Ò›Ð°Ò£Ñ‚Ð°Ñ€_Ð°Ò›Ð¿Ð°Ð½_Ð½Ð°ÑƒÑ€Ñ‹Ð·_ÑÓ™ÑƒÑ–Ñ€_Ð¼Ð°Ð¼Ñ‹Ñ€_Ð¼Ð°ÑƒÑÑ‹Ð¼_ÑˆÑ–Ð»Ð´Ðµ_Ñ‚Ð°Ð¼Ñ‹Ð·_Ò›Ñ‹Ñ€ÐºÒ¯Ð¹ÐµÐº_Ò›Ð°Ð·Ð°Ð½_Ò›Ð°Ñ€Ð°ÑˆÐ°_Ð¶ÐµÐ»Ñ‚Ð¾Ò›ÑÐ°Ð½'.split(
        '_'
    ),
    monthsShort: 'Ò›Ð°Ò£_Ð°Ò›Ð¿_Ð½Ð°Ñƒ_ÑÓ™Ñƒ_Ð¼Ð°Ð¼_Ð¼Ð°Ñƒ_ÑˆÑ–Ð»_Ñ‚Ð°Ð¼_Ò›Ñ‹Ñ€_Ò›Ð°Ð·_Ò›Ð°Ñ€_Ð¶ÐµÐ»'.split('_'),
    weekdays: 'Ð¶ÐµÐºÑÐµÐ½Ð±Ñ–_Ð´Ò¯Ð¹ÑÐµÐ½Ð±Ñ–_ÑÐµÐ¹ÑÐµÐ½Ð±Ñ–_ÑÓ™Ñ€ÑÐµÐ½Ð±Ñ–_Ð±ÐµÐ¹ÑÐµÐ½Ð±Ñ–_Ð¶Ò±Ð¼Ð°_ÑÐµÐ½Ð±Ñ–'.split(
        '_'
    ),
    weekdaysShort: 'Ð¶ÐµÐº_Ð´Ò¯Ð¹_ÑÐµÐ¹_ÑÓ™Ñ€_Ð±ÐµÐ¹_Ð¶Ò±Ð¼_ÑÐµÐ½'.split('_'),
    weekdaysMin: 'Ð¶Ðº_Ð´Ð¹_ÑÐ¹_ÑÑ€_Ð±Ð¹_Ð¶Ð¼_ÑÐ½'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ð‘Ò¯Ð³Ñ–Ð½ ÑÐ°Ò“Ð°Ñ‚] LT',
        nextDay: '[Ð•Ñ€Ñ‚ÐµÒ£ ÑÐ°Ò“Ð°Ñ‚] LT',
        nextWeek: 'dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
        lastDay: '[ÐšÐµÑˆÐµ ÑÐ°Ò“Ð°Ñ‚] LT',
        lastWeek: '[Ó¨Ñ‚ÐºÐµÐ½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ò£] dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ñ–ÑˆÑ–Ð½Ð´Ðµ',
        past: '%s Ð±Ò±Ñ€Ñ‹Ð½',
        s: 'Ð±Ñ–Ñ€Ð½ÐµÑˆÐµ ÑÐµÐºÑƒÐ½Ð´',
        ss: '%d ÑÐµÐºÑƒÐ½Ð´',
        m: 'Ð±Ñ–Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
        mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
        h: 'Ð±Ñ–Ñ€ ÑÐ°Ò“Ð°Ñ‚',
        hh: '%d ÑÐ°Ò“Ð°Ñ‚',
        d: 'Ð±Ñ–Ñ€ ÐºÒ¯Ð½',
        dd: '%d ÐºÒ¯Ð½',
        M: 'Ð±Ñ–Ñ€ Ð°Ð¹',
        MM: '%d Ð°Ð¹',
        y: 'Ð±Ñ–Ñ€ Ð¶Ñ‹Ð»',
        yy: '%d Ð¶Ñ‹Ð»',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ÑˆÑ–|ÑˆÑ‹)/,
    ordinal: function (number) {
        var a = number % 10,
            b = number >= 100 ? 100 : null;
        return number + (suffixes[number] || suffixes[a] || suffixes[b]);
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Cambodian [km]
//! author : Kruy Vanna : https://github.com/kruyvanna

import moment from '../moment';

var symbolMap = {
        1: 'áŸ¡',
        2: 'áŸ¢',
        3: 'áŸ£',
        4: 'áŸ¤',
        5: 'áŸ¥',
        6: 'áŸ¦',
        7: 'áŸ§',
        8: 'áŸ¨',
        9: 'áŸ©',
        0: 'áŸ ',
    },
    numberMap = {
        'áŸ¡': '1',
        'áŸ¢': '2',
        'áŸ£': '3',
        'áŸ¤': '4',
        'áŸ¥': '5',
        'áŸ¦': '6',
        'áŸ§': '7',
        'áŸ¨': '8',
        'áŸ©': '9',
        'áŸ ': '0',
    };

export default moment.defineLocale('km', {
    months: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
        '_'
    ),
    monthsShort: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
        '_'
    ),
    weekdays: 'áž¢áž¶áž‘áž·ážáŸ’áž™_áž…áŸáž“áŸ’áž‘_áž¢áž„áŸ’áž‚áž¶ážš_áž–áž»áž’_áž–áŸ’ážšáž ážŸáŸ’áž”ážáž·áŸ_ážŸáž»áž€áŸ’ážš_ážŸáŸ…ážšáŸ'.split('_'),
    weekdaysShort: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
    weekdaysMin: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    meridiemParse: /áž–áŸ’ážšáž¹áž€|áž›áŸ’áž„áž¶áž…/,
    isPM: function (input) {
        return input === 'áž›áŸ’áž„áž¶áž…';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'áž–áŸ’ážšáž¹áž€';
        } else {
            return 'áž›áŸ’áž„áž¶áž…';
        }
    },
    calendar: {
        sameDay: '[ážáŸ’áž„áŸƒáž“áŸáŸ‡ áž˜áŸ‰áŸ„áž„] LT',
        nextDay: '[ážŸáŸ’áž¢áŸ‚áž€ áž˜áŸ‰áŸ„áž„] LT',
        nextWeek: 'dddd [áž˜áŸ‰áŸ„áž„] LT',
        lastDay: '[áž˜áŸ’ážŸáž·áž›áž˜áž·áž‰ áž˜áŸ‰áŸ„áž„] LT',
        lastWeek: 'dddd [ážŸáž”áŸ’ážáž¶áž áŸáž˜áž»áž“] [áž˜áŸ‰áŸ„áž„] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%sáž‘áŸ€áž',
        past: '%sáž˜áž»áž“',
        s: 'áž”áŸ‰áž»áž“áŸ’áž˜áž¶áž“ážœáž·áž“áž¶áž‘áž¸',
        ss: '%d ážœáž·áž“áž¶áž‘áž¸',
        m: 'áž˜áž½áž™áž“áž¶áž‘áž¸',
        mm: '%d áž“áž¶áž‘áž¸',
        h: 'áž˜áž½áž™áž˜áŸ‰áŸ„áž„',
        hh: '%d áž˜áŸ‰áŸ„áž„',
        d: 'áž˜áž½áž™ážáŸ’áž„áŸƒ',
        dd: '%d ážáŸ’áž„áŸƒ',
        M: 'áž˜áž½áž™ážáŸ‚',
        MM: '%d ážáŸ‚',
        y: 'áž˜áž½áž™áž†áŸ’áž“áž¶áŸ†',
        yy: '%d áž†áŸ’áž“áž¶áŸ†',
    },
    dayOfMonthOrdinalParse: /áž‘áž¸\d{1,2}/,
    ordinal: 'áž‘áž¸%d',
    preparse: function (string) {
        return string.replace(/[áŸ¡áŸ¢áŸ£áŸ¤áŸ¥áŸ¦áŸ§áŸ¨áŸ©áŸ ]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Kannada [kn]
//! author : Rajeev Naik : https://github.com/rajeevnaikte

import moment from '../moment';

var symbolMap = {
        1: 'à³§',
        2: 'à³¨',
        3: 'à³©',
        4: 'à³ª',
        5: 'à³«',
        6: 'à³¬',
        7: 'à³­',
        8: 'à³®',
        9: 'à³¯',
        0: 'à³¦',
    },
    numberMap = {
        'à³§': '1',
        'à³¨': '2',
        'à³©': '3',
        'à³ª': '4',
        'à³«': '5',
        'à³¬': '6',
        'à³­': '7',
        'à³®': '8',
        'à³¯': '9',
        'à³¦': '0',
    };

export default moment.defineLocale('kn', {
    months: 'à²œà²¨à²µà²°à²¿_à²«à³†à²¬à³à²°à²µà²°à²¿_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚à²¬à²°à³_à²…à²•à³à²Ÿà³†à³‚à³•à²¬à²°à³_à²¨à²µà³†à²‚à²¬à²°à³_à²¡à²¿à²¸à³†à²‚à²¬à²°à³'.split(
        '_'
    ),
    monthsShort: 'à²œà²¨_à²«à³†à²¬à³à²°_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚_à²…à²•à³à²Ÿà³†à³‚à³•_à²¨à²µà³†à²‚_à²¡à²¿à²¸à³†à²‚'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à²­à²¾à²¨à³à²µà²¾à²°_à²¸à³†à³‚à³•à²®à²µà²¾à²°_à²®à²‚à²—à²³à²µà²¾à²°_à²¬à³à²§à²µà²¾à²°_à²—à³à²°à³à²µà²¾à²°_à²¶à³à²•à³à²°à²µà²¾à²°_à²¶à²¨à²¿à²µà²¾à²°'.split(
        '_'
    ),
    weekdaysShort: 'à²­à²¾à²¨à³_à²¸à³†à³‚à³•à²®_à²®à²‚à²—à²³_à²¬à³à²§_à²—à³à²°à³_à²¶à³à²•à³à²°_à²¶à²¨à²¿'.split('_'),
    weekdaysMin: 'à²­à²¾_à²¸à³†à³‚à³•_à²®à²‚_à²¬à³_à²—à³_à²¶à³_à²¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm',
        LTS: 'A h:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm',
        LLLL: 'dddd, D MMMM YYYY, A h:mm',
    },
    calendar: {
        sameDay: '[à²‡à²‚à²¦à³] LT',
        nextDay: '[à²¨à²¾à²³à³†] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à²¨à²¿à²¨à³à²¨à³†] LT',
        lastWeek: '[à²•à³†à³‚à²¨à³†à²¯] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à²¨à²‚à²¤à²°',
        past: '%s à²¹à²¿à²‚à²¦à³†',
        s: 'à²•à³†à²²à²µà³ à²•à³à²·à²£à²—à²³à³',
        ss: '%d à²¸à³†à²•à³†à²‚à²¡à³à²—à²³à³',
        m: 'à²’à²‚à²¦à³ à²¨à²¿à²®à²¿à²·',
        mm: '%d à²¨à²¿à²®à²¿à²·',
        h: 'à²’à²‚à²¦à³ à²—à²‚à²Ÿà³†',
        hh: '%d à²—à²‚à²Ÿà³†',
        d: 'à²’à²‚à²¦à³ à²¦à²¿à²¨',
        dd: '%d à²¦à²¿à²¨',
        M: 'à²’à²‚à²¦à³ à²¤à²¿à²‚à²—à²³à³',
        MM: '%d à²¤à²¿à²‚à²—à²³à³',
        y: 'à²’à²‚à²¦à³ à²µà²°à³à²·',
        yy: '%d à²µà²°à³à²·',
    },
    preparse: function (string) {
        return string.replace(/[à³§à³¨à³©à³ªà³«à³¬à³­à³®à³¯à³¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à²°à²¾à²¤à³à²°à²¿|à²¬à³†à²³à²¿à²—à³à²—à³†|à²®à²§à³à²¯à²¾à²¹à³à²¨|à²¸à²‚à²œà³†/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à²°à²¾à²¤à³à²°à²¿') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à²¬à³†à²³à²¿à²—à³à²—à³†') {
            return hour;
        } else if (meridiem === 'à²®à²§à³à²¯à²¾à²¹à³à²¨') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à²¸à²‚à²œà³†') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à²°à²¾à²¤à³à²°à²¿';
        } else if (hour < 10) {
            return 'à²¬à³†à²³à²¿à²—à³à²—à³†';
        } else if (hour < 17) {
            return 'à²®à²§à³à²¯à²¾à²¹à³à²¨';
        } else if (hour < 20) {
            return 'à²¸à²‚à²œà³†';
        } else {
            return 'à²°à²¾à²¤à³à²°à²¿';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}(à²¨à³†à³•)/,
    ordinal: function (number) {
        return number + 'à²¨à³†à³•';
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Korean [ko]
//! author : Kyungwook, Park : https://github.com/kyungw00k
//! author : Jeeeyul Lee <jeeeyul@gmail.com>

import moment from '../moment';

export default moment.defineLocale('ko', {
    months: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split('_'),
    monthsShort: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split(
        '_'
    ),
    weekdays: 'ì¼ìš”ì¼_ì›”ìš”ì¼_í™”ìš”ì¼_ìˆ˜ìš”ì¼_ëª©ìš”ì¼_ê¸ˆìš”ì¼_í† ìš”ì¼'.split('_'),
    weekdaysShort: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
    weekdaysMin: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
    longDateFormat: {
        LT: 'A h:mm',
        LTS: 'A h:mm:ss',
        L: 'YYYY.MM.DD.',
        LL: 'YYYYë…„ MMMM Dì¼',
        LLL: 'YYYYë…„ MMMM Dì¼ A h:mm',
        LLLL: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
        l: 'YYYY.MM.DD.',
        ll: 'YYYYë…„ MMMM Dì¼',
        lll: 'YYYYë…„ MMMM Dì¼ A h:mm',
        llll: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
    },
    calendar: {
        sameDay: 'ì˜¤ëŠ˜ LT',
        nextDay: 'ë‚´ì¼ LT',
        nextWeek: 'dddd LT',
        lastDay: 'ì–´ì œ LT',
        lastWeek: 'ì§€ë‚œì£¼ dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s í›„',
        past: '%s ì „',
        s: 'ëª‡ ì´ˆ',
        ss: '%dì´ˆ',
        m: '1ë¶„',
        mm: '%dë¶„',
        h: 'í•œ ì‹œê°„',
        hh: '%dì‹œê°„',
        d: 'í•˜ë£¨',
        dd: '%dì¼',
        M: 'í•œ ë‹¬',
        MM: '%dë‹¬',
        y: 'ì¼ ë…„',
        yy: '%dë…„',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ì¼|ì›”|ì£¼)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'ì¼';
            case 'M':
                return number + 'ì›”';
            case 'w':
            case 'W':
                return number + 'ì£¼';
            default:
                return number;
        }
    },
    meridiemParse: /ì˜¤ì „|ì˜¤í›„/,
    isPM: function (token) {
        return token === 'ì˜¤í›„';
    },
    meridiem: function (hour, minute, isUpper) {
        return hour < 12 ? 'ì˜¤ì „' : 'ì˜¤í›„';
    },
});
//! moment.js locale configuration
//! locale : Kurdish [ku]
//! author : Shahram Mebashar : https://github.com/ShahramMebashar

import moment from '../moment';

var symbolMap = {
        1: 'Ù¡',
        2: 'Ù¢',
        3: 'Ù£',
        4: 'Ù¤',
        5: 'Ù¥',
        6: 'Ù¦',
        7: 'Ù§',
        8: 'Ù¨',
        9: 'Ù©',
        0: 'Ù ',
    },
    numberMap = {
        'Ù¡': '1',
        'Ù¢': '2',
        'Ù£': '3',
        'Ù¤': '4',
        'Ù¥': '5',
        'Ù¦': '6',
        'Ù§': '7',
        'Ù¨': '8',
        'Ù©': '9',
        'Ù ': '0',
    },
    months = [
        'Ú©Ø§Ù†ÙˆÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
        'Ø´ÙˆØ¨Ø§Øª',
        'Ø¦Ø§Ø²Ø§Ø±',
        'Ù†ÛŒØ³Ø§Ù†',
        'Ø¦Ø§ÛŒØ§Ø±',
        'Ø­ÙˆØ²Û•ÛŒØ±Ø§Ù†',
        'ØªÛ•Ù…Ù…ÙˆØ²',
        'Ø¦Ø§Ø¨',
        'Ø¦Û•ÛŒÙ„ÙˆÙˆÙ„',
        'ØªØ´Ø±ÛŒÙ†ÛŒ ÛŒÛ•ÙƒÛ•Ù…',
        'ØªØ´Ø±ÛŒÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
        'ÙƒØ§Ù†ÙˆÙ†ÛŒ ÛŒÛ•Ú©Û•Ù…',
    ];

export default moment.defineLocale('ku', {
    months: months,
    monthsShort: months,
    weekdays: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø³ÛŽØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
        '_'
    ),
    weekdaysShort: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…_Ø³ÛŽØ´Ù‡â€ŒÙ…_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
        '_'
    ),
    weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ù‡_Ø´'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    meridiemParse: /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ|Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ/,
    isPM: function (input) {
        return /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ';
        } else {
            return 'Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ';
        }
    },
    calendar: {
        sameDay: '[Ø¦Ù‡â€ŒÙ…Ø±Û† ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        nextDay: '[Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        nextWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        lastDay: '[Ø¯ÙˆÛŽÙ†ÛŽ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        lastWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ù„Ù‡â€Œ %s',
        past: '%s',
        s: 'Ú†Ù‡â€ŒÙ†Ø¯ Ú†Ø±ÙƒÙ‡â€ŒÛŒÙ‡â€ŒÙƒ',
        ss: 'Ú†Ø±ÙƒÙ‡â€Œ %d',
        m: 'ÛŒÙ‡â€ŒÙƒ Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
        mm: '%d Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
        h: 'ÛŒÙ‡â€ŒÙƒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
        hh: '%d ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
        d: 'ÛŒÙ‡â€ŒÙƒ Ú•Û†Ú˜',
        dd: '%d Ú•Û†Ú˜',
        M: 'ÛŒÙ‡â€ŒÙƒ Ù…Ø§Ù†Ú¯',
        MM: '%d Ù…Ø§Ù†Ú¯',
        y: 'ÛŒÙ‡â€ŒÙƒ Ø³Ø§Úµ',
        yy: '%d Ø³Ø§Úµ',
    },
    preparse: function (string) {
        return string
            .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                return numberMap[match];
            })
            .replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Kyrgyz [ky]
//! author : Chyngyz Arystan uulu : https://github.com/chyngyz

import moment from '../moment';

var suffixes = {
    0: '-Ñ‡Ò¯',
    1: '-Ñ‡Ð¸',
    2: '-Ñ‡Ð¸',
    3: '-Ñ‡Ò¯',
    4: '-Ñ‡Ò¯',
    5: '-Ñ‡Ð¸',
    6: '-Ñ‡Ñ‹',
    7: '-Ñ‡Ð¸',
    8: '-Ñ‡Ð¸',
    9: '-Ñ‡Ñƒ',
    10: '-Ñ‡Ñƒ',
    20: '-Ñ‡Ñ‹',
    30: '-Ñ‡Ñƒ',
    40: '-Ñ‡Ñ‹',
    50: '-Ñ‡Ò¯',
    60: '-Ñ‡Ñ‹',
    70: '-Ñ‡Ð¸',
    80: '-Ñ‡Ð¸',
    90: '-Ñ‡Ñƒ',
    100: '-Ñ‡Ò¯',
};

export default moment.defineLocale('ky', {
    months: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
        '_'
    ),
    monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split(
        '_'
    ),
    weekdays: 'Ð–ÐµÐºÑˆÐµÐ¼Ð±Ð¸_Ð”Ò¯Ð¹ÑˆÓ©Ð¼Ð±Ò¯_Ð¨ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð¨Ð°Ñ€ÑˆÐµÐ¼Ð±Ð¸_Ð‘ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð–ÑƒÐ¼Ð°_Ð˜ÑˆÐµÐ¼Ð±Ð¸'.split(
        '_'
    ),
    weekdaysShort: 'Ð–ÐµÐº_Ð”Ò¯Ð¹_Ð¨ÐµÐ¹_Ð¨Ð°Ñ€_Ð‘ÐµÐ¹_Ð–ÑƒÐ¼_Ð˜ÑˆÐµ'.split('_'),
    weekdaysMin: 'Ð–Ðº_Ð”Ð¹_Ð¨Ð¹_Ð¨Ñ€_Ð‘Ð¹_Ð–Ð¼_Ð˜Ñˆ'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ð‘Ò¯Ð³Ò¯Ð½ ÑÐ°Ð°Ñ‚] LT',
        nextDay: '[Ð­Ñ€Ñ‚ÐµÒ£ ÑÐ°Ð°Ñ‚] LT',
        nextWeek: 'dddd [ÑÐ°Ð°Ñ‚] LT',
        lastDay: '[ÐšÐµÑ‡ÑÑ ÑÐ°Ð°Ñ‚] LT',
        lastWeek: '[Ó¨Ñ‚ÐºÓ©Ð½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ð½] dddd [ÐºÒ¯Ð½Ò¯] [ÑÐ°Ð°Ñ‚] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ð¸Ñ‡Ð¸Ð½Ð´Ðµ',
        past: '%s Ð¼ÑƒÑ€ÑƒÐ½',
        s: 'Ð±Ð¸Ñ€Ð½ÐµÑ‡Ðµ ÑÐµÐºÑƒÐ½Ð´',
        ss: '%d ÑÐµÐºÑƒÐ½Ð´',
        m: 'Ð±Ð¸Ñ€ Ð¼Ò¯Ð½Ó©Ñ‚',
        mm: '%d Ð¼Ò¯Ð½Ó©Ñ‚',
        h: 'Ð±Ð¸Ñ€ ÑÐ°Ð°Ñ‚',
        hh: '%d ÑÐ°Ð°Ñ‚',
        d: 'Ð±Ð¸Ñ€ ÐºÒ¯Ð½',
        dd: '%d ÐºÒ¯Ð½',
        M: 'Ð±Ð¸Ñ€ Ð°Ð¹',
        MM: '%d Ð°Ð¹',
        y: 'Ð±Ð¸Ñ€ Ð¶Ñ‹Ð»',
        yy: '%d Ð¶Ñ‹Ð»',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ñ‡Ð¸|Ñ‡Ñ‹|Ñ‡Ò¯|Ñ‡Ñƒ)/,
    ordinal: function (number) {
        var a = number % 10,
            b = number >= 100 ? 100 : null;
        return number + (suffixes[number] || suffixes[a] || suffixes[b]);
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Luxembourgish [lb]
//! author : mweimerskirch : https://github.com/mweimerskirch
//! author : David Raison : https://github.com/kwisatz

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        m: ['eng Minutt', 'enger Minutt'],
        h: ['eng Stonn', 'enger Stonn'],
        d: ['een Dag', 'engem Dag'],
        M: ['ee Mount', 'engem Mount'],
        y: ['ee Joer', 'engem Joer'],
    };
    return withoutSuffix ? format[key][0] : format[key][1];
}
function processFutureTime(string) {
    var number = string.substr(0, string.indexOf(' '));
    if (eifelerRegelAppliesToNumber(number)) {
        return 'a ' + string;
    }
    return 'an ' + string;
}
function processPastTime(string) {
    var number = string.substr(0, string.indexOf(' '));
    if (eifelerRegelAppliesToNumber(number)) {
        return 'viru ' + string;
    }
    return 'virun ' + string;
}
/**
 * Returns true if the word before the given number loses the '-n' ending.
 * e.g. 'an 10 Deeg' but 'a 5 Deeg'
 *
 * @param number {integer}
 * @returns {boolean}
 */
function eifelerRegelAppliesToNumber(number) {
    number = parseInt(number, 10);
    if (isNaN(number)) {
        return false;
    }
    if (number < 0) {
        // Negative Number --> always true
        return true;
    } else if (number < 10) {
        // Only 1 digit
        if (4 <= number && number <= 7) {
            return true;
        }
        return false;
    } else if (number < 100) {
        // 2 digits
        var lastDigit = number % 10,
            firstDigit = number / 10;
        if (lastDigit === 0) {
            return eifelerRegelAppliesToNumber(firstDigit);
        }
        return eifelerRegelAppliesToNumber(lastDigit);
    } else if (number < 10000) {
        // 3 or 4 digits --> recursively check first digit
        while (number >= 10) {
            number = number / 10;
        }
        return eifelerRegelAppliesToNumber(number);
    } else {
        // Anything larger than 4 digits: recursively check first n-3 digits
        number = number / 1000;
        return eifelerRegelAppliesToNumber(number);
    }
}

export default moment.defineLocale('lb', {
    months: 'Januar_Februar_MÃ¤erz_AbrÃ«ll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
        '_'
    ),
    monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Sonndeg_MÃ©indeg_DÃ«nschdeg_MÃ«ttwoch_Donneschdeg_Freideg_Samschdeg'.split(
        '_'
    ),
    weekdaysShort: 'So._MÃ©._DÃ«._MÃ«._Do._Fr._Sa.'.split('_'),
    weekdaysMin: 'So_MÃ©_DÃ«_MÃ«_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm [Auer]',
        LTS: 'H:mm:ss [Auer]',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm [Auer]',
        LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
    },
    calendar: {
        sameDay: '[Haut um] LT',
        sameElse: 'L',
        nextDay: '[Muer um] LT',
        nextWeek: 'dddd [um] LT',
        lastDay: '[GÃ«schter um] LT',
        lastWeek: function () {
            // Different date string for 'DÃ«nschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
            switch (this.day()) {
                case 2:
                case 4:
                    return '[Leschten] dddd [um] LT';
                default:
                    return '[Leschte] dddd [um] LT';
            }
        },
    },
    relativeTime: {
        future: processFutureTime,
        past: processPastTime,
        s: 'e puer Sekonnen',
        ss: '%d Sekonnen',
        m: processRelativeTime,
        mm: '%d Minutten',
        h: processRelativeTime,
        hh: '%d Stonnen',
        d: processRelativeTime,
        dd: '%d Deeg',
        M: processRelativeTime,
        MM: '%d MÃ©int',
        y: processRelativeTime,
        yy: '%d Joer',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Lao [lo]
//! author : Ryan Hart : https://github.com/ryanhart2

import moment from '../moment';

export default moment.defineLocale('lo', {
    months: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
        '_'
    ),
    monthsShort: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
        '_'
    ),
    weekdays: 'àº­àº²àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
    weekdaysShort: 'àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
    weekdaysMin: 'àº—_àºˆ_àº­àº„_àºž_àºžàº«_àºªàº_àºª'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'àº§àº±àº™dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /àº•àº­àº™à»€àºŠàº»à»‰àº²|àº•àº­àº™à»àº¥àº‡/,
    isPM: function (input) {
        return input === 'àº•àº­àº™à»àº¥àº‡';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'àº•àº­àº™à»€àºŠàº»à»‰àº²';
        } else {
            return 'àº•àº­àº™à»àº¥àº‡';
        }
    },
    calendar: {
        sameDay: '[àº¡àº·à»‰àº™àºµà»‰à»€àº§àº¥àº²] LT',
        nextDay: '[àº¡àº·à»‰àº­àº·à»ˆàº™à»€àº§àº¥àº²] LT',
        nextWeek: '[àº§àº±àº™]dddd[à»œà»‰àº²à»€àº§àº¥àº²] LT',
        lastDay: '[àº¡àº·à»‰àº§àº²àº™àº™àºµà»‰à»€àº§àº¥àº²] LT',
        lastWeek: '[àº§àº±àº™]dddd[à»àº¥à»‰àº§àº™àºµà»‰à»€àº§àº¥àº²] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'àº­àºµàº %s',
        past: '%sàºœà»ˆàº²àº™àº¡àº²',
        s: 'àºšà»à»ˆà»€àº—àº»à»ˆàº²à»ƒàº”àº§àº´àº™àº²àº—àºµ',
        ss: '%d àº§àº´àº™àº²àº—àºµ',
        m: '1 àº™àº²àº—àºµ',
        mm: '%d àº™àº²àº—àºµ',
        h: '1 àºŠàº»à»ˆàº§à»‚àº¡àº‡',
        hh: '%d àºŠàº»à»ˆàº§à»‚àº¡àº‡',
        d: '1 àº¡àº·à»‰',
        dd: '%d àº¡àº·à»‰',
        M: '1 à»€àº”àº·àº­àº™',
        MM: '%d à»€àº”àº·àº­àº™',
        y: '1 àº›àºµ',
        yy: '%d àº›àºµ',
    },
    dayOfMonthOrdinalParse: /(àº—àºµà»ˆ)\d{1,2}/,
    ordinal: function (number) {
        return 'àº—àºµà»ˆ' + number;
    },
});
//! moment.js locale configuration
//! locale : Lithuanian [lt]
//! author : Mindaugas MozÅ«ras : https://github.com/mmozuras

import moment from '../moment';

var units = {
    ss: 'sekundÄ—_sekundÅ¾iÅ³_sekundes',
    m: 'minutÄ—_minutÄ—s_minutÄ™',
    mm: 'minutÄ—s_minuÄiÅ³_minutes',
    h: 'valanda_valandos_valandÄ…',
    hh: 'valandos_valandÅ³_valandas',
    d: 'diena_dienos_dienÄ…',
    dd: 'dienos_dienÅ³_dienas',
    M: 'mÄ—nuo_mÄ—nesio_mÄ—nesÄ¯',
    MM: 'mÄ—nesiai_mÄ—nesiÅ³_mÄ—nesius',
    y: 'metai_metÅ³_metus',
    yy: 'metai_metÅ³_metus',
};
function translateSeconds(number, withoutSuffix, key, isFuture) {
    if (withoutSuffix) {
        return 'kelios sekundÄ—s';
    } else {
        return isFuture ? 'keliÅ³ sekundÅ¾iÅ³' : 'kelias sekundes';
    }
}
function translateSingular(number, withoutSuffix, key, isFuture) {
    return withoutSuffix
        ? forms(key)[0]
        : isFuture
        ? forms(key)[1]
        : forms(key)[2];
}
function special(number) {
    return number % 10 === 0 || (number > 10 && number < 20);
}
function forms(key) {
    return units[key].split('_');
}
function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    if (number === 1) {
        return (
            result + translateSingular(number, withoutSuffix, key[0], isFuture)
        );
    } else if (withoutSuffix) {
        return result + (special(number) ? forms(key)[1] : forms(key)[0]);
    } else {
        if (isFuture) {
            return result + forms(key)[1];
        } else {
            return result + (special(number) ? forms(key)[1] : forms(key)[2]);
        }
    }
}
export default moment.defineLocale('lt', {
    months: {
        format: 'sausio_vasario_kovo_balandÅ¾io_geguÅ¾Ä—s_birÅ¾elio_liepos_rugpjÅ«Äio_rugsÄ—jo_spalio_lapkriÄio_gruodÅ¾io'.split(
            '_'
        ),
        standalone: 'sausis_vasaris_kovas_balandis_geguÅ¾Ä—_birÅ¾elis_liepa_rugpjÅ«tis_rugsÄ—jis_spalis_lapkritis_gruodis'.split(
            '_'
        ),
        isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
    },
    monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
    weekdays: {
        format: 'sekmadienÄ¯_pirmadienÄ¯_antradienÄ¯_treÄiadienÄ¯_ketvirtadienÄ¯_penktadienÄ¯_Å¡eÅ¡tadienÄ¯'.split(
            '_'
        ),
        standalone: 'sekmadienis_pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis'.split(
            '_'
        ),
        isFormat: /dddd HH:mm/,
    },
    weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡'.split('_'),
    weekdaysMin: 'S_P_A_T_K_Pn_Å '.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'YYYY [m.] MMMM D [d.]',
        LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
        LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
        l: 'YYYY-MM-DD',
        ll: 'YYYY [m.] MMMM D [d.]',
        lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
        llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
    },
    calendar: {
        sameDay: '[Å iandien] LT',
        nextDay: '[Rytoj] LT',
        nextWeek: 'dddd LT',
        lastDay: '[Vakar] LT',
        lastWeek: '[PraÄ—jusÄ¯] dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'po %s',
        past: 'prieÅ¡ %s',
        s: translateSeconds,
        ss: translate,
        m: translateSingular,
        mm: translate,
        h: translateSingular,
        hh: translate,
        d: translateSingular,
        dd: translate,
        M: translateSingular,
        MM: translate,
        y: translateSingular,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}-oji/,
    ordinal: function (number) {
        return number + '-oji';
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Latvian [lv]
//! author : Kristaps Karlsons : https://github.com/skakri
//! author : JÄnis Elmeris : https://github.com/JanisE

import moment from '../moment';

var units = {
    ss: 'sekundes_sekundÄ“m_sekunde_sekundes'.split('_'),
    m: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
    mm: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
    h: 'stundas_stundÄm_stunda_stundas'.split('_'),
    hh: 'stundas_stundÄm_stunda_stundas'.split('_'),
    d: 'dienas_dienÄm_diena_dienas'.split('_'),
    dd: 'dienas_dienÄm_diena_dienas'.split('_'),
    M: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
    MM: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
    y: 'gada_gadiem_gads_gadi'.split('_'),
    yy: 'gada_gadiem_gads_gadi'.split('_'),
};
/**
 * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
 */
function format(forms, number, withoutSuffix) {
    if (withoutSuffix) {
        // E.g. "21 minÅ«te", "3 minÅ«tes".
        return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
    } else {
        // E.g. "21 minÅ«tes" as in "pÄ“c 21 minÅ«tes".
        // E.g. "3 minÅ«tÄ“m" as in "pÄ“c 3 minÅ«tÄ“m".
        return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
    }
}
function relativeTimeWithPlural(number, withoutSuffix, key) {
    return number + ' ' + format(units[key], number, withoutSuffix);
}
function relativeTimeWithSingular(number, withoutSuffix, key) {
    return format(units[key], number, withoutSuffix);
}
function relativeSeconds(number, withoutSuffix) {
    return withoutSuffix ? 'daÅ¾as sekundes' : 'daÅ¾Äm sekundÄ“m';
}

export default moment.defineLocale('lv', {
    months: 'janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec'.split('_'),
    weekdays: 'svÄ“tdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena'.split(
        '_'
    ),
    weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
    weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY.',
        LL: 'YYYY. [gada] D. MMMM',
        LLL: 'YYYY. [gada] D. MMMM, HH:mm',
        LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
    },
    calendar: {
        sameDay: '[Å odien pulksten] LT',
        nextDay: '[RÄ«t pulksten] LT',
        nextWeek: 'dddd [pulksten] LT',
        lastDay: '[Vakar pulksten] LT',
        lastWeek: '[PagÄjuÅ¡Ä] dddd [pulksten] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'pÄ“c %s',
        past: 'pirms %s',
        s: relativeSeconds,
        ss: relativeTimeWithPlural,
        m: relativeTimeWithSingular,
        mm: relativeTimeWithPlural,
        h: relativeTimeWithSingular,
        hh: relativeTimeWithPlural,
        d: relativeTimeWithSingular,
        dd: relativeTimeWithPlural,
        M: relativeTimeWithSingular,
        MM: relativeTimeWithPlural,
        y: relativeTimeWithSingular,
        yy: relativeTimeWithPlural,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Montenegrin [me]
//! author : Miodrag NikaÄ <miodrag@restartit.me> : https://github.com/miodragnikac

import moment from '../moment';

var translator = {
    words: {
        //Different grammatical cases
        ss: ['sekund', 'sekunda', 'sekundi'],
        m: ['jedan minut', 'jednog minuta'],
        mm: ['minut', 'minuta', 'minuta'],
        h: ['jedan sat', 'jednog sata'],
        hh: ['sat', 'sata', 'sati'],
        dd: ['dan', 'dana', 'dana'],
        MM: ['mjesec', 'mjeseca', 'mjeseci'],
        yy: ['godina', 'godine', 'godina'],
    },
    correctGrammaticalCase: function (number, wordKey) {
        return number === 1
            ? wordKey[0]
            : number >= 2 && number <= 4
            ? wordKey[1]
            : wordKey[2];
    },
    translate: function (number, withoutSuffix, key) {
        var wordKey = translator.words[key];
        if (key.length === 1) {
            return withoutSuffix ? wordKey[0] : wordKey[1];
        } else {
            return (
                number +
                ' ' +
                translator.correctGrammaticalCase(number, wordKey)
            );
        }
    },
};

export default moment.defineLocale('me', {
    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
        '_'
    ),
    weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd, D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[danas u] LT',
        nextDay: '[sjutra u] LT',

        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[u] [nedjelju] [u] LT';
                case 3:
                    return '[u] [srijedu] [u] LT';
                case 6:
                    return '[u] [subotu] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[u] dddd [u] LT';
            }
        },
        lastDay: '[juÄe u] LT',
        lastWeek: function () {
            var lastWeekDays = [
                '[proÅ¡le] [nedjelje] [u] LT',
                '[proÅ¡log] [ponedjeljka] [u] LT',
                '[proÅ¡log] [utorka] [u] LT',
                '[proÅ¡le] [srijede] [u] LT',
                '[proÅ¡log] [Äetvrtka] [u] LT',
                '[proÅ¡log] [petka] [u] LT',
                '[proÅ¡le] [subote] [u] LT',
            ];
            return lastWeekDays[this.day()];
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'prije %s',
        s: 'nekoliko sekundi',
        ss: translator.translate,
        m: translator.translate,
        mm: translator.translate,
        h: translator.translate,
        hh: translator.translate,
        d: 'dan',
        dd: translator.translate,
        M: 'mjesec',
        MM: translator.translate,
        y: 'godinu',
        yy: translator.translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Maori [mi]
//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal

import moment from '../moment';

export default moment.defineLocale('mi', {
    months: 'Kohi-tÄte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whÄwhÄ_Haratua_Pipiri_HÅngoingoi_Here-turi-kÅkÄ_Mahuru_Whiringa-Ä-nuku_Whiringa-Ä-rangi_Hakihea'.split(
        '_'
    ),
    monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_HÅngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
        '_'
    ),
    monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
    monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
    monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
    monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
    weekdays: 'RÄtapu_Mane_TÅ«rei_Wenerei_TÄite_Paraire_HÄtarei'.split('_'),
    weekdaysShort: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
    weekdaysMin: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [i] HH:mm',
        LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
    },
    calendar: {
        sameDay: '[i teie mahana, i] LT',
        nextDay: '[apopo i] LT',
        nextWeek: 'dddd [i] LT',
        lastDay: '[inanahi i] LT',
        lastWeek: 'dddd [whakamutunga i] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'i roto i %s',
        past: '%s i mua',
        s: 'te hÄ“kona ruarua',
        ss: '%d hÄ“kona',
        m: 'he meneti',
        mm: '%d meneti',
        h: 'te haora',
        hh: '%d haora',
        d: 'he ra',
        dd: '%d ra',
        M: 'he marama',
        MM: '%d marama',
        y: 'he tau',
        yy: '%d tau',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Macedonian [mk]
//! author : Borislav Mickov : https://github.com/B0k0
//! author : Sashko Todorov : https://github.com/bkyceh
import moment from '../moment';

export default moment.defineLocale('mk', {
    months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½Ð¸_Ñ˜ÑƒÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
        '_'
    ),
    monthsShort: 'Ñ˜Ð°Ð½_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
    weekdays: 'Ð½ÐµÐ´ÐµÐ»Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð¾Ðº_Ð¿ÐµÑ‚Ð¾Ðº_ÑÐ°Ð±Ð¾Ñ‚Ð°'.split(
        '_'
    ),
    weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ðµ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÐ°Ð±'.split('_'),
    weekdaysMin: 'Ð½e_Ð¿o_Ð²Ñ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_Ña'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'D.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY H:mm',
        LLLL: 'dddd, D MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[Ð”ÐµÐ½ÐµÑ Ð²Ð¾] LT',
        nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²Ð¾] LT',
        nextWeek: '[Ð’Ð¾] dddd [Ð²Ð¾] LT',
        lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²Ð¾] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                case 6:
                    return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð°Ñ‚Ð°] dddd [Ð²Ð¾] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð¸Ð¾Ñ‚] dddd [Ð²Ð¾] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð·Ð° %s',
        past: 'Ð¿Ñ€ÐµÐ´ %s',
        s: 'Ð½ÐµÐºÐ¾Ð»ÐºÑƒ ÑÐµÐºÑƒÐ½Ð´Ð¸',
        ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
        m: 'ÐµÐ´Ð½Ð° Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
        mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
        h: 'ÐµÐ´ÐµÐ½ Ñ‡Ð°Ñ',
        hh: '%d Ñ‡Ð°ÑÐ°',
        d: 'ÐµÐ´ÐµÐ½ Ð´ÐµÐ½',
        dd: '%d Ð´ÐµÐ½Ð°',
        M: 'ÐµÐ´ÐµÐ½ Ð¼ÐµÑÐµÑ†',
        MM: '%d Ð¼ÐµÑÐµÑ†Ð¸',
        y: 'ÐµÐ´Ð½Ð° Ð³Ð¾Ð´Ð¸Ð½Ð°',
        yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
    ordinal: function (number) {
        var lastDigit = number % 10,
            last2Digits = number % 100;
        if (number === 0) {
            return number + '-ÐµÐ²';
        } else if (last2Digits === 0) {
            return number + '-ÐµÐ½';
        } else if (last2Digits > 10 && last2Digits < 20) {
            return number + '-Ñ‚Ð¸';
        } else if (lastDigit === 1) {
            return number + '-Ð²Ð¸';
        } else if (lastDigit === 2) {
            return number + '-Ñ€Ð¸';
        } else if (lastDigit === 7 || lastDigit === 8) {
            return number + '-Ð¼Ð¸';
        } else {
            return number + '-Ñ‚Ð¸';
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Malayalam [ml]
//! author : Floyd Pink : https://github.com/floydpink

import moment from '../moment';

export default moment.defineLocale('ml', {
    months: 'à´œà´¨àµà´µà´°à´¿_à´«àµ†à´¬àµà´°àµà´µà´°à´¿_à´®à´¾àµ¼à´šàµà´šàµ_à´à´ªàµà´°à´¿àµ½_à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ_à´“à´—à´¸àµà´±àµà´±àµ_à´¸àµ†à´ªàµà´±àµà´±à´‚à´¬àµ¼_à´’à´•àµà´Ÿàµ‹à´¬àµ¼_à´¨à´µà´‚à´¬àµ¼_à´¡à´¿à´¸à´‚à´¬àµ¼'.split(
        '_'
    ),
    monthsShort: 'à´œà´¨àµ._à´«àµ†à´¬àµà´°àµ._à´®à´¾àµ¼._à´à´ªàµà´°à´¿._à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ._à´“à´—._à´¸àµ†à´ªàµà´±àµà´±._à´’à´•àµà´Ÿàµ‹._à´¨à´µà´‚._à´¡à´¿à´¸à´‚.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à´žà´¾à´¯à´±à´¾à´´àµà´š_à´¤à´¿à´™àµà´•à´³à´¾à´´àµà´š_à´šàµŠà´µàµà´µà´¾à´´àµà´š_à´¬àµà´§à´¨à´¾à´´àµà´š_à´µàµà´¯à´¾à´´à´¾à´´àµà´š_à´µàµ†à´³àµà´³à´¿à´¯à´¾à´´àµà´š_à´¶à´¨à´¿à´¯à´¾à´´àµà´š'.split(
        '_'
    ),
    weekdaysShort: 'à´žà´¾à´¯àµ¼_à´¤à´¿à´™àµà´•àµ¾_à´šàµŠà´µàµà´µ_à´¬àµà´§àµ»_à´µàµà´¯à´¾à´´à´‚_à´µàµ†à´³àµà´³à´¿_à´¶à´¨à´¿'.split('_'),
    weekdaysMin: 'à´žà´¾_à´¤à´¿_à´šàµŠ_à´¬àµ_à´µàµà´¯à´¾_à´µàµ†_à´¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm -à´¨àµ',
        LTS: 'A h:mm:ss -à´¨àµ',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm -à´¨àµ',
        LLLL: 'dddd, D MMMM YYYY, A h:mm -à´¨àµ',
    },
    calendar: {
        sameDay: '[à´‡à´¨àµà´¨àµ] LT',
        nextDay: '[à´¨à´¾à´³àµ†] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à´‡à´¨àµà´¨à´²àµ†] LT',
        lastWeek: '[à´•à´´à´¿à´žàµà´ž] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à´•à´´à´¿à´žàµà´žàµ',
        past: '%s à´®àµàµ»à´ªàµ',
        s: 'à´…àµ½à´ª à´¨à´¿à´®à´¿à´·à´™àµà´™àµ¾',
        ss: '%d à´¸àµ†à´•àµà´•àµ»à´¡àµ',
        m: 'à´’à´°àµ à´®à´¿à´¨à´¿à´±àµà´±àµ',
        mm: '%d à´®à´¿à´¨à´¿à´±àµà´±àµ',
        h: 'à´’à´°àµ à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
        hh: '%d à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
        d: 'à´’à´°àµ à´¦à´¿à´µà´¸à´‚',
        dd: '%d à´¦à´¿à´µà´¸à´‚',
        M: 'à´’à´°àµ à´®à´¾à´¸à´‚',
        MM: '%d à´®à´¾à´¸à´‚',
        y: 'à´’à´°àµ à´µàµ¼à´·à´‚',
        yy: '%d à´µàµ¼à´·à´‚',
    },
    meridiemParse: /à´°à´¾à´¤àµà´°à´¿|à´°à´¾à´µà´¿à´²àµ†|à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ|à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚|à´°à´¾à´¤àµà´°à´¿/i,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (
            (meridiem === 'à´°à´¾à´¤àµà´°à´¿' && hour >= 4) ||
            meridiem === 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ' ||
            meridiem === 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚'
        ) {
            return hour + 12;
        } else {
            return hour;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à´°à´¾à´¤àµà´°à´¿';
        } else if (hour < 12) {
            return 'à´°à´¾à´µà´¿à´²àµ†';
        } else if (hour < 17) {
            return 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ';
        } else if (hour < 20) {
            return 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚';
        } else {
            return 'à´°à´¾à´¤àµà´°à´¿';
        }
    },
});
//! moment.js locale configuration
//! locale : Mongolian [mn]
//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7

import moment from '../moment';

function translate(number, withoutSuffix, key, isFuture) {
    switch (key) {
        case 's':
            return withoutSuffix ? 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´' : 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½';
        case 'ss':
            return number + (withoutSuffix ? ' ÑÐµÐºÑƒÐ½Ð´' : ' ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½');
        case 'm':
        case 'mm':
            return number + (withoutSuffix ? ' Ð¼Ð¸Ð½ÑƒÑ‚' : ' Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹Ð½');
        case 'h':
        case 'hh':
            return number + (withoutSuffix ? ' Ñ†Ð°Ð³' : ' Ñ†Ð°Ð³Ð¸Ð¹Ð½');
        case 'd':
        case 'dd':
            return number + (withoutSuffix ? ' Ó©Ð´Ó©Ñ€' : ' Ó©Ð´Ñ€Ð¸Ð¹Ð½');
        case 'M':
        case 'MM':
            return number + (withoutSuffix ? ' ÑÐ°Ñ€' : ' ÑÐ°Ñ€Ñ‹Ð½');
        case 'y':
        case 'yy':
            return number + (withoutSuffix ? ' Ð¶Ð¸Ð»' : ' Ð¶Ð¸Ð»Ð¸Ð¹Ð½');
        default:
            return number;
    }
}

export default moment.defineLocale('mn', {
    months: 'ÐÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¥Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð“ÑƒÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ó©Ñ€Ó©Ð²Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¢Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð—ÑƒÑ€Ð³Ð°Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ð¾Ð»Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÐ°Ð¹Ð¼Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð•ÑÐ´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ð½ÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ñ…Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€'.split(
        '_'
    ),
    monthsShort: '1 ÑÐ°Ñ€_2 ÑÐ°Ñ€_3 ÑÐ°Ñ€_4 ÑÐ°Ñ€_5 ÑÐ°Ñ€_6 ÑÐ°Ñ€_7 ÑÐ°Ñ€_8 ÑÐ°Ñ€_9 ÑÐ°Ñ€_10 ÑÐ°Ñ€_11 ÑÐ°Ñ€_12 ÑÐ°Ñ€'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'ÐÑÐ¼_Ð”Ð°Ð²Ð°Ð°_ÐœÑÐ³Ð¼Ð°Ñ€_Ð›Ñ…Ð°Ð³Ð²Ð°_ÐŸÒ¯Ñ€ÑÐ²_Ð‘Ð°Ð°ÑÐ°Ð½_Ð‘ÑÐ¼Ð±Ð°'.split('_'),
    weekdaysShort: 'ÐÑÐ¼_Ð”Ð°Ð²_ÐœÑÐ³_Ð›Ñ…Ð°_ÐŸÒ¯Ñ€_Ð‘Ð°Ð°_Ð‘ÑÐ¼'.split('_'),
    weekdaysMin: 'ÐÑ_Ð”Ð°_ÐœÑ_Ð›Ñ…_ÐŸÒ¯_Ð‘Ð°_Ð‘Ñ'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D',
        LLL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
        LLLL: 'dddd, YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
    },
    meridiemParse: /Ò®Ó¨|Ò®Ð¥/i,
    isPM: function (input) {
        return input === 'Ò®Ð¥';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Ò®Ó¨';
        } else {
            return 'Ò®Ð¥';
        }
    },
    calendar: {
        sameDay: '[Ó¨Ð½Ó©Ó©Ð´Ó©Ñ€] LT',
        nextDay: '[ÐœÐ°Ñ€Ð³Ð°Ð°Ñˆ] LT',
        nextWeek: '[Ð˜Ñ€ÑÑ…] dddd LT',
        lastDay: '[Ó¨Ñ‡Ð¸Ð³Ð´Ó©Ñ€] LT',
        lastWeek: '[Ó¨Ð½Ð³Ó©Ñ€ÑÓ©Ð½] dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ð´Ð°Ñ€Ð°Ð°',
        past: '%s Ó©Ð¼Ð½Ó©',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2} Ó©Ð´Ó©Ñ€/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + ' Ó©Ð´Ó©Ñ€';
            default:
                return number;
        }
    },
});
//! moment.js locale configuration
//! locale : Marathi [mr]
//! author : Harshad Kale : https://github.com/kalehv
//! author : Vivek Athalye : https://github.com/vnathalye

import moment from '../moment';

var symbolMap = {
        1: 'à¥§',
        2: 'à¥¨',
        3: 'à¥©',
        4: 'à¥ª',
        5: 'à¥«',
        6: 'à¥¬',
        7: 'à¥­',
        8: 'à¥®',
        9: 'à¥¯',
        0: 'à¥¦',
    },
    numberMap = {
        'à¥§': '1',
        'à¥¨': '2',
        'à¥©': '3',
        'à¥ª': '4',
        'à¥«': '5',
        'à¥¬': '6',
        'à¥­': '7',
        'à¥®': '8',
        'à¥¯': '9',
        'à¥¦': '0',
    };

function relativeTimeMr(number, withoutSuffix, string, isFuture) {
    var output = '';
    if (withoutSuffix) {
        switch (string) {
            case 's':
                output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦';
                break;
            case 'ss':
                output = '%d à¤¸à¥‡à¤•à¤‚à¤¦';
                break;
            case 'm':
                output = 'à¤à¤• à¤®à¤¿à¤¨à¤¿à¤Ÿ';
                break;
            case 'mm':
                output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¥‡';
                break;
            case 'h':
                output = 'à¤à¤• à¤¤à¤¾à¤¸';
                break;
            case 'hh':
                output = '%d à¤¤à¤¾à¤¸';
                break;
            case 'd':
                output = 'à¤à¤• à¤¦à¤¿à¤µà¤¸';
                break;
            case 'dd':
                output = '%d à¤¦à¤¿à¤µà¤¸';
                break;
            case 'M':
                output = 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾';
                break;
            case 'MM':
                output = '%d à¤®à¤¹à¤¿à¤¨à¥‡';
                break;
            case 'y':
                output = 'à¤à¤• à¤µà¤°à¥à¤·';
                break;
            case 'yy':
                output = '%d à¤µà¤°à¥à¤·à¥‡';
                break;
        }
    } else {
        switch (string) {
            case 's':
                output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                break;
            case 'ss':
                output = '%d à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                break;
            case 'm':
                output = 'à¤à¤•à¤¾ à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾';
                break;
            case 'mm':
                output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾à¤‚';
                break;
            case 'h':
                output = 'à¤à¤•à¤¾ à¤¤à¤¾à¤¸à¤¾';
                break;
            case 'hh':
                output = '%d à¤¤à¤¾à¤¸à¤¾à¤‚';
                break;
            case 'd':
                output = 'à¤à¤•à¤¾ à¤¦à¤¿à¤µà¤¸à¤¾';
                break;
            case 'dd':
                output = '%d à¤¦à¤¿à¤µà¤¸à¤¾à¤‚';
                break;
            case 'M':
                output = 'à¤à¤•à¤¾ à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾';
                break;
            case 'MM':
                output = '%d à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾à¤‚';
                break;
            case 'y':
                output = 'à¤à¤•à¤¾ à¤µà¤°à¥à¤·à¤¾';
                break;
            case 'yy':
                output = '%d à¤µà¤°à¥à¤·à¤¾à¤‚';
                break;
        }
    }
    return output.replace(/%d/i, number);
}

export default moment.defineLocale('mr', {
    months: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¤¿à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¥ˆ_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
        '_'
    ),
    monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š._à¤à¤ªà¥à¤°à¤¿._à¤®à¥‡._à¤œà¥‚à¤¨._à¤œà¥à¤²à¥ˆ._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤³à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
    weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤³_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
    weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
        LTS: 'A h:mm:ss à¤µà¤¾à¤œà¤¤à¤¾',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
    },
    calendar: {
        sameDay: '[à¤†à¤œ] LT',
        nextDay: '[à¤‰à¤¦à¥à¤¯à¤¾] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à¤•à¤¾à¤²] LT',
        lastWeek: '[à¤®à¤¾à¤—à¥€à¤²] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%sà¤®à¤§à¥à¤¯à¥‡',
        past: '%sà¤ªà¥‚à¤°à¥à¤µà¥€',
        s: relativeTimeMr,
        ss: relativeTimeMr,
        m: relativeTimeMr,
        mm: relativeTimeMr,
        h: relativeTimeMr,
        hh: relativeTimeMr,
        d: relativeTimeMr,
        dd: relativeTimeMr,
        M: relativeTimeMr,
        MM: relativeTimeMr,
        y: relativeTimeMr,
        yy: relativeTimeMr,
    },
    preparse: function (string) {
        return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à¤ªà¤¹à¤¾à¤Ÿà¥‡|à¤¸à¤•à¤¾à¤³à¥€|à¤¦à¥à¤ªà¤¾à¤°à¥€|à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€|à¤°à¤¾à¤¤à¥à¤°à¥€/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¤ªà¤¹à¤¾à¤Ÿà¥‡' || meridiem === 'à¤¸à¤•à¤¾à¤³à¥€') {
            return hour;
        } else if (
            meridiem === 'à¤¦à¥à¤ªà¤¾à¤°à¥€' ||
            meridiem === 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€' ||
            meridiem === 'à¤°à¤¾à¤¤à¥à¤°à¥€'
        ) {
            return hour >= 12 ? hour : hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour >= 0 && hour < 6) {
            return 'à¤ªà¤¹à¤¾à¤Ÿà¥‡';
        } else if (hour < 12) {
            return 'à¤¸à¤•à¤¾à¤³à¥€';
        } else if (hour < 17) {
            return 'à¤¦à¥à¤ªà¤¾à¤°à¥€';
        } else if (hour < 20) {
            return 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€';
        } else {
            return 'à¤°à¤¾à¤¤à¥à¤°à¥€';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Malay [ms-my]
//! note : DEPRECATED, the correct one is [ms]
//! author : Weldan Jamili : https://github.com/weldan

import moment from '../moment';

export default moment.defineLocale('ms-my', {
    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [pukul] HH.mm',
        LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
    },
    meridiemParse: /pagi|tengahari|petang|malam/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'pagi') {
            return hour;
        } else if (meridiem === 'tengahari') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'petang' || meridiem === 'malam') {
            return hour + 12;
        }
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'pagi';
        } else if (hours < 15) {
            return 'tengahari';
        } else if (hours < 19) {
            return 'petang';
        } else {
            return 'malam';
        }
    },
    calendar: {
        sameDay: '[Hari ini pukul] LT',
        nextDay: '[Esok pukul] LT',
        nextWeek: 'dddd [pukul] LT',
        lastDay: '[Kelmarin pukul] LT',
        lastWeek: 'dddd [lepas pukul] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dalam %s',
        past: '%s yang lepas',
        s: 'beberapa saat',
        ss: '%d saat',
        m: 'seminit',
        mm: '%d minit',
        h: 'sejam',
        hh: '%d jam',
        d: 'sehari',
        dd: '%d hari',
        M: 'sebulan',
        MM: '%d bulan',
        y: 'setahun',
        yy: '%d tahun',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Malay [ms]
//! author : Weldan Jamili : https://github.com/weldan

import moment from '../moment';

export default moment.defineLocale('ms', {
    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [pukul] HH.mm',
        LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
    },
    meridiemParse: /pagi|tengahari|petang|malam/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'pagi') {
            return hour;
        } else if (meridiem === 'tengahari') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'petang' || meridiem === 'malam') {
            return hour + 12;
        }
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'pagi';
        } else if (hours < 15) {
            return 'tengahari';
        } else if (hours < 19) {
            return 'petang';
        } else {
            return 'malam';
        }
    },
    calendar: {
        sameDay: '[Hari ini pukul] LT',
        nextDay: '[Esok pukul] LT',
        nextWeek: 'dddd [pukul] LT',
        lastDay: '[Kelmarin pukul] LT',
        lastWeek: 'dddd [lepas pukul] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dalam %s',
        past: '%s yang lepas',
        s: 'beberapa saat',
        ss: '%d saat',
        m: 'seminit',
        mm: '%d minit',
        h: 'sejam',
        hh: '%d jam',
        d: 'sehari',
        dd: '%d hari',
        M: 'sebulan',
        MM: '%d bulan',
        y: 'setahun',
        yy: '%d tahun',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Maltese (Malta) [mt]
//! author : Alessandro Maruccia : https://github.com/alesma

import moment from '../moment';

export default moment.defineLocale('mt', {
    months: 'Jannar_Frar_Marzu_April_Mejju_Ä unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_DiÄ‹embru'.split(
        '_'
    ),
    monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ä un_Lul_Aww_Set_Ott_Nov_DiÄ‹'.split('_'),
    weekdays: 'Il-Ä¦add_It-Tnejn_It-Tlieta_L-ErbgÄ§a_Il-Ä¦amis_Il-Ä imgÄ§a_Is-Sibt'.split(
        '_'
    ),
    weekdaysShort: 'Ä¦ad_Tne_Tli_Erb_Ä¦am_Ä im_Sib'.split('_'),
    weekdaysMin: 'Ä¦a_Tn_Tl_Er_Ä¦a_Ä i_Si'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Illum fil-]LT',
        nextDay: '[GÄ§ada fil-]LT',
        nextWeek: 'dddd [fil-]LT',
        lastDay: '[Il-bieraÄ§ fil-]LT',
        lastWeek: 'dddd [li gÄ§adda] [fil-]LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'fâ€™ %s',
        past: '%s ilu',
        s: 'ftit sekondi',
        ss: '%d sekondi',
        m: 'minuta',
        mm: '%d minuti',
        h: 'siegÄ§a',
        hh: '%d siegÄ§at',
        d: 'Ä¡urnata',
        dd: '%d Ä¡ranet',
        M: 'xahar',
        MM: '%d xhur',
        y: 'sena',
        yy: '%d sni',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Burmese [my]
//! author : Squar team, mysquar.com
//! author : David Rossellat : https://github.com/gholadr
//! author : Tin Aung Lin : https://github.com/thanyawzinmin

import moment from '../moment';

var symbolMap = {
        1: 'á',
        2: 'á‚',
        3: 'áƒ',
        4: 'á„',
        5: 'á…',
        6: 'á†',
        7: 'á‡',
        8: 'áˆ',
        9: 'á‰',
        0: 'á€',
    },
    numberMap = {
        'á': '1',
        'á‚': '2',
        'áƒ': '3',
        'á„': '4',
        'á…': '5',
        'á†': '6',
        'á‡': '7',
        'áˆ': '8',
        'á‰': '9',
        'á€': '0',
    };

export default moment.defineLocale('my', {
    months: 'á€‡á€”á€ºá€”á€á€«á€›á€®_á€–á€±á€–á€±á€¬á€ºá€á€«á€›á€®_á€™á€á€º_á€§á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€‡á€°á€œá€­á€¯á€„á€º_á€žá€¼á€‚á€¯á€á€º_á€…á€€á€ºá€á€„á€ºá€˜á€¬_á€¡á€±á€¬á€€á€ºá€á€­á€¯á€˜á€¬_á€”á€­á€¯á€á€„á€ºá€˜á€¬_á€’á€®á€‡á€„á€ºá€˜á€¬'.split(
        '_'
    ),
    monthsShort: 'á€‡á€”á€º_á€–á€±_á€™á€á€º_á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€œá€­á€¯á€„á€º_á€žá€¼_á€…á€€á€º_á€¡á€±á€¬á€€á€º_á€”á€­á€¯_á€’á€®'.split('_'),
    weekdays: 'á€á€”á€„á€ºá€¹á€‚á€”á€½á€±_á€á€”á€„á€ºá€¹á€œá€¬_á€¡á€„á€ºá€¹á€‚á€«_á€—á€¯á€’á€¹á€“á€Ÿá€°á€¸_á€€á€¼á€¬á€žá€•á€á€±á€¸_á€žá€±á€¬á€€á€¼á€¬_á€…á€”á€±'.split(
        '_'
    ),
    weekdaysShort: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),
    weekdaysMin: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),

    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[á€šá€”á€±.] LT [á€™á€¾á€¬]',
        nextDay: '[á€™á€”á€€á€ºá€–á€¼á€”á€º] LT [á€™á€¾á€¬]',
        nextWeek: 'dddd LT [á€™á€¾á€¬]',
        lastDay: '[á€™á€”á€±.á€€] LT [á€™á€¾á€¬]',
        lastWeek: '[á€•á€¼á€®á€¸á€á€²á€·á€žá€±á€¬] dddd LT [á€™á€¾á€¬]',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'á€œá€¬á€™á€Šá€ºá€· %s á€™á€¾á€¬',
        past: 'á€œá€½á€”á€ºá€á€²á€·á€žá€±á€¬ %s á€€',
        s: 'á€…á€€á€¹á€€á€”á€º.á€¡á€”á€Šá€ºá€¸á€„á€šá€º',
        ss: '%d á€…á€€á€¹á€€á€”á€·á€º',
        m: 'á€á€…á€ºá€™á€­á€”á€…á€º',
        mm: '%d á€™á€­á€”á€…á€º',
        h: 'á€á€…á€ºá€”á€¬á€›á€®',
        hh: '%d á€”á€¬á€›á€®',
        d: 'á€á€…á€ºá€›á€€á€º',
        dd: '%d á€›á€€á€º',
        M: 'á€á€…á€ºá€œ',
        MM: '%d á€œ',
        y: 'á€á€…á€ºá€”á€¾á€…á€º',
        yy: '%d á€”á€¾á€…á€º',
    },
    preparse: function (string) {
        return string.replace(/[áá‚áƒá„á…á†á‡áˆá‰á€]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Norwegian BokmÃ¥l [nb]
//! authors : Espen Hovlandsdal : https://github.com/rexxars
//!           Sigurd Gartmann : https://github.com/sigurdga
//!           Stephen Ramthun : https://github.com/stephenramthun

import moment from '../moment';

export default moment.defineLocale('nb', {
    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
    weekdaysShort: 'sÃ¸._ma._ti._on._to._fr._lÃ¸.'.split('_'),
    weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY [kl.] HH:mm',
        LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
    },
    calendar: {
        sameDay: '[i dag kl.] LT',
        nextDay: '[i morgen kl.] LT',
        nextWeek: 'dddd [kl.] LT',
        lastDay: '[i gÃ¥r kl.] LT',
        lastWeek: '[forrige] dddd [kl.] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'om %s',
        past: '%s siden',
        s: 'noen sekunder',
        ss: '%d sekunder',
        m: 'ett minutt',
        mm: '%d minutter',
        h: 'en time',
        hh: '%d timer',
        d: 'en dag',
        dd: '%d dager',
        w: 'en uke',
        ww: '%d uker',
        M: 'en mÃ¥ned',
        MM: '%d mÃ¥neder',
        y: 'ett Ã¥r',
        yy: '%d Ã¥r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Nepalese [ne]
//! author : suvash : https://github.com/suvash

import moment from '../moment';

var symbolMap = {
        1: 'à¥§',
        2: 'à¥¨',
        3: 'à¥©',
        4: 'à¥ª',
        5: 'à¥«',
        6: 'à¥¬',
        7: 'à¥­',
        8: 'à¥®',
        9: 'à¥¯',
        0: 'à¥¦',
    },
    numberMap = {
        'à¥§': '1',
        'à¥¨': '2',
        'à¥©': '3',
        'à¥ª': '4',
        'à¥«': '5',
        'à¥¬': '6',
        'à¥­': '7',
        'à¥®': '8',
        'à¥¯': '9',
        'à¥¦': '0',
    };

export default moment.defineLocale('ne', {
    months: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿à¤²_à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤·à¥à¤Ÿ_à¤¸à¥‡à¤ªà¥à¤Ÿà¥‡à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤­à¥‡à¤®à¥à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤®à¥à¤¬à¤°'.split(
        '_'
    ),
    monthsShort: 'à¤œà¤¨._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿._à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ._à¤…à¤—._à¤¸à¥‡à¤ªà¥à¤Ÿ._à¤…à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤­à¥‡._à¤¡à¤¿à¤¸à¥‡.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à¤†à¤‡à¤¤à¤¬à¤¾à¤°_à¤¸à¥‹à¤®à¤¬à¤¾à¤°_à¤®à¤™à¥à¤—à¤²à¤¬à¤¾à¤°_à¤¬à¥à¤§à¤¬à¤¾à¤°_à¤¬à¤¿à¤¹à¤¿à¤¬à¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤¬à¤¾à¤°_à¤¶à¤¨à¤¿à¤¬à¤¾à¤°'.split(
        '_'
    ),
    weekdaysShort: 'à¤†à¤‡à¤¤._à¤¸à¥‹à¤®._à¤®à¤™à¥à¤—à¤²._à¤¬à¥à¤§._à¤¬à¤¿à¤¹à¤¿._à¤¶à¥à¤•à¥à¤°._à¤¶à¤¨à¤¿.'.split('_'),
    weekdaysMin: 'à¤†._à¤¸à¥‹._à¤®à¤‚._à¤¬à¥._à¤¬à¤¿._à¤¶à¥._à¤¶.'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
        LTS: 'Aà¤•à¥‹ h:mm:ss à¤¬à¤œà¥‡',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
        LLLL: 'dddd, D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
    },
    preparse: function (string) {
        return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à¤°à¤¾à¤¤à¤¿|à¤¬à¤¿à¤¹à¤¾à¤¨|à¤¦à¤¿à¤‰à¤à¤¸à¥‹|à¤¸à¤¾à¤à¤/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¤°à¤¾à¤¤à¤¿') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¤¬à¤¿à¤¹à¤¾à¤¨') {
            return hour;
        } else if (meridiem === 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à¤¸à¤¾à¤à¤') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 3) {
            return 'à¤°à¤¾à¤¤à¤¿';
        } else if (hour < 12) {
            return 'à¤¬à¤¿à¤¹à¤¾à¤¨';
        } else if (hour < 16) {
            return 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹';
        } else if (hour < 20) {
            return 'à¤¸à¤¾à¤à¤';
        } else {
            return 'à¤°à¤¾à¤¤à¤¿';
        }
    },
    calendar: {
        sameDay: '[à¤†à¤œ] LT',
        nextDay: '[à¤­à¥‹à¤²à¤¿] LT',
        nextWeek: '[à¤†à¤‰à¤à¤¦à¥‹] dddd[,] LT',
        lastDay: '[à¤¹à¤¿à¤œà¥‹] LT',
        lastWeek: '[à¤—à¤à¤•à¥‹] dddd[,] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%sà¤®à¤¾',
        past: '%s à¤…à¤—à¤¾à¤¡à¤¿',
        s: 'à¤•à¥‡à¤¹à¥€ à¤•à¥à¤·à¤£',
        ss: '%d à¤¸à¥‡à¤•à¥‡à¤£à¥à¤¡',
        m: 'à¤à¤• à¤®à¤¿à¤¨à¥‡à¤Ÿ',
        mm: '%d à¤®à¤¿à¤¨à¥‡à¤Ÿ',
        h: 'à¤à¤• à¤˜à¤£à¥à¤Ÿà¤¾',
        hh: '%d à¤˜à¤£à¥à¤Ÿà¤¾',
        d: 'à¤à¤• à¤¦à¤¿à¤¨',
        dd: '%d à¤¦à¤¿à¤¨',
        M: 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾',
        MM: '%d à¤®à¤¹à¤¿à¤¨à¤¾',
        y: 'à¤à¤• à¤¬à¤°à¥à¤·',
        yy: '%d à¤¬à¤°à¥à¤·',
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Dutch (Belgium) [nl-be]
//! author : Joris RÃ¶ling : https://github.com/jorisroling
//! author : Jacob Middag : https://github.com/middagj

import moment from '../moment';

var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
        '_'
    ),
    monthsParse = [
        /^jan/i,
        /^feb/i,
        /^maart|mrt.?$/i,
        /^apr/i,
        /^mei$/i,
        /^jun[i.]?$/i,
        /^jul[i.]?$/i,
        /^aug/i,
        /^sep/i,
        /^okt/i,
        /^nov/i,
        /^dec/i,
    ],
    monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

export default moment.defineLocale('nl-be', {
    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortWithDots;
        } else if (/-MMM-/.test(format)) {
            return monthsShortWithoutDots[m.month()];
        } else {
            return monthsShortWithDots[m.month()];
        }
    },

    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
    monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,

    weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
        '_'
    ),
    weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
    weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[vandaag om] LT',
        nextDay: '[morgen om] LT',
        nextWeek: 'dddd [om] LT',
        lastDay: '[gisteren om] LT',
        lastWeek: '[afgelopen] dddd [om] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'over %s',
        past: '%s geleden',
        s: 'een paar seconden',
        ss: '%d seconden',
        m: 'Ã©Ã©n minuut',
        mm: '%d minuten',
        h: 'Ã©Ã©n uur',
        hh: '%d uur',
        d: 'Ã©Ã©n dag',
        dd: '%d dagen',
        M: 'Ã©Ã©n maand',
        MM: '%d maanden',
        y: 'Ã©Ã©n jaar',
        yy: '%d jaar',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function (number) {
        return (
            number +
            (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
        );
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Dutch [nl]
//! author : Joris RÃ¶ling : https://github.com/jorisroling
//! author : Jacob Middag : https://github.com/middagj

import moment from '../moment';

var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
        '_'
    ),
    monthsParse = [
        /^jan/i,
        /^feb/i,
        /^maart|mrt.?$/i,
        /^apr/i,
        /^mei$/i,
        /^jun[i.]?$/i,
        /^jul[i.]?$/i,
        /^aug/i,
        /^sep/i,
        /^okt/i,
        /^nov/i,
        /^dec/i,
    ],
    monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

export default moment.defineLocale('nl', {
    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortWithDots;
        } else if (/-MMM-/.test(format)) {
            return monthsShortWithoutDots[m.month()];
        } else {
            return monthsShortWithDots[m.month()];
        }
    },

    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
    monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,

    weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
        '_'
    ),
    weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
    weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD-MM-YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[vandaag om] LT',
        nextDay: '[morgen om] LT',
        nextWeek: 'dddd [om] LT',
        lastDay: '[gisteren om] LT',
        lastWeek: '[afgelopen] dddd [om] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'over %s',
        past: '%s geleden',
        s: 'een paar seconden',
        ss: '%d seconden',
        m: 'Ã©Ã©n minuut',
        mm: '%d minuten',
        h: 'Ã©Ã©n uur',
        hh: '%d uur',
        d: 'Ã©Ã©n dag',
        dd: '%d dagen',
        w: 'Ã©Ã©n week',
        ww: '%d weken',
        M: 'Ã©Ã©n maand',
        MM: '%d maanden',
        y: 'Ã©Ã©n jaar',
        yy: '%d jaar',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function (number) {
        return (
            number +
            (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
        );
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Nynorsk [nn]
//! authors : https://github.com/mechuwind
//!           Stephen Ramthun : https://github.com/stephenramthun

import moment from '../moment';

export default moment.defineLocale('nn', {
    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
    weekdaysShort: 'su._mÃ¥._ty._on._to._fr._lau.'.split('_'),
    weekdaysMin: 'su_mÃ¥_ty_on_to_fr_la'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY [kl.] H:mm',
        LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
    },
    calendar: {
        sameDay: '[I dag klokka] LT',
        nextDay: '[I morgon klokka] LT',
        nextWeek: 'dddd [klokka] LT',
        lastDay: '[I gÃ¥r klokka] LT',
        lastWeek: '[FÃ¸regÃ¥ande] dddd [klokka] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'om %s',
        past: '%s sidan',
        s: 'nokre sekund',
        ss: '%d sekund',
        m: 'eit minutt',
        mm: '%d minutt',
        h: 'ein time',
        hh: '%d timar',
        d: 'ein dag',
        dd: '%d dagar',
        w: 'ei veke',
        ww: '%d veker',
        M: 'ein mÃ¥nad',
        MM: '%d mÃ¥nader',
        y: 'eit Ã¥r',
        yy: '%d Ã¥r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Occitan, lengadocian dialecte [oc-lnc]
//! author : Quentin PAGÃˆS : https://github.com/Quenty31

import moment from '../moment';

export default moment.defineLocale('oc-lnc', {
    months: {
        standalone: 'geniÃ¨r_febriÃ¨r_marÃ§_abril_mai_junh_julhet_agost_setembre_octÃ²bre_novembre_decembre'.split(
            '_'
        ),
        format: "de geniÃ¨r_de febriÃ¨r_de marÃ§_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octÃ²bre_de novembre_de decembre".split(
            '_'
        ),
        isFormat: /D[oD]?(\s)+MMMM/,
    },
    monthsShort: 'gen._febr._marÃ§_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'dimenge_diluns_dimars_dimÃ¨cres_dijÃ²us_divendres_dissabte'.split(
        '_'
    ),
    weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
    weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM [de] YYYY',
        ll: 'D MMM YYYY',
        LLL: 'D MMMM [de] YYYY [a] H:mm',
        lll: 'D MMM YYYY, H:mm',
        LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
        llll: 'ddd D MMM YYYY, H:mm',
    },
    calendar: {
        sameDay: '[uÃ¨i a] LT',
        nextDay: '[deman a] LT',
        nextWeek: 'dddd [a] LT',
        lastDay: '[iÃ¨r a] LT',
        lastWeek: 'dddd [passat a] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: "d'aquÃ­ %s",
        past: 'fa %s',
        s: 'unas segondas',
        ss: '%d segondas',
        m: 'una minuta',
        mm: '%d minutas',
        h: 'una ora',
        hh: '%d oras',
        d: 'un jorn',
        dd: '%d jorns',
        M: 'un mes',
        MM: '%d meses',
        y: 'un an',
        yy: '%d ans',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
    ordinal: function (number, period) {
        var output =
            number === 1
                ? 'r'
                : number === 2
                ? 'n'
                : number === 3
                ? 'r'
                : number === 4
                ? 't'
                : 'Ã¨';
        if (period === 'w' || period === 'W') {
            output = 'a';
        }
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4,
    },
});
//! moment.js locale configuration
//! locale : Punjabi (India) [pa-in]
//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit

import moment from '../moment';

var symbolMap = {
        1: 'à©§',
        2: 'à©¨',
        3: 'à©©',
        4: 'à©ª',
        5: 'à©«',
        6: 'à©¬',
        7: 'à©­',
        8: 'à©®',
        9: 'à©¯',
        0: 'à©¦',
    },
    numberMap = {
        'à©§': '1',
        'à©¨': '2',
        'à©©': '3',
        'à©ª': '4',
        'à©«': '5',
        'à©¬': '6',
        'à©­': '7',
        'à©®': '8',
        'à©¯': '9',
        'à©¦': '0',
    };

export default moment.defineLocale('pa-in', {
    // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
    months: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
        '_'
    ),
    monthsShort: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
        '_'
    ),
    weekdays: 'à¨à¨¤à¨µà¨¾à¨°_à¨¸à©‹à¨®à¨µà¨¾à¨°_à¨®à©°à¨—à¨²à¨µà¨¾à¨°_à¨¬à©à¨§à¨µà¨¾à¨°_à¨µà©€à¨°à¨µà¨¾à¨°_à¨¸à¨¼à©à©±à¨•à¨°à¨µà¨¾à¨°_à¨¸à¨¼à¨¨à©€à¨šà¨°à¨µà¨¾à¨°'.split(
        '_'
    ),
    weekdaysShort: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
    weekdaysMin: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¨µà¨œà©‡',
        LTS: 'A h:mm:ss à¨µà¨œà©‡',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¨µà¨œà©‡',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¨µà¨œà©‡',
    },
    calendar: {
        sameDay: '[à¨…à¨œ] LT',
        nextDay: '[à¨•à¨²] LT',
        nextWeek: '[à¨…à¨—à¨²à¨¾] dddd, LT',
        lastDay: '[à¨•à¨²] LT',
        lastWeek: '[à¨ªà¨¿à¨›à¨²à©‡] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à¨µà¨¿à©±à¨š',
        past: '%s à¨ªà¨¿à¨›à¨²à©‡',
        s: 'à¨•à©à¨ à¨¸à¨•à¨¿à©°à¨Ÿ',
        ss: '%d à¨¸à¨•à¨¿à©°à¨Ÿ',
        m: 'à¨‡à¨• à¨®à¨¿à©°à¨Ÿ',
        mm: '%d à¨®à¨¿à©°à¨Ÿ',
        h: 'à¨‡à©±à¨• à¨˜à©°à¨Ÿà¨¾',
        hh: '%d à¨˜à©°à¨Ÿà©‡',
        d: 'à¨‡à©±à¨• à¨¦à¨¿à¨¨',
        dd: '%d à¨¦à¨¿à¨¨',
        M: 'à¨‡à©±à¨• à¨®à¨¹à©€à¨¨à¨¾',
        MM: '%d à¨®à¨¹à©€à¨¨à©‡',
        y: 'à¨‡à©±à¨• à¨¸à¨¾à¨²',
        yy: '%d à¨¸à¨¾à¨²',
    },
    preparse: function (string) {
        return string.replace(/[à©§à©¨à©©à©ªà©«à©¬à©­à©®à©¯à©¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
    meridiemParse: /à¨°à¨¾à¨¤|à¨¸à¨µà©‡à¨°|à¨¦à©à¨ªà¨¹à¨¿à¨°|à¨¸à¨¼à¨¾à¨®/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¨°à¨¾à¨¤') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¨¸à¨µà©‡à¨°') {
            return hour;
        } else if (meridiem === 'à¨¦à©à¨ªà¨¹à¨¿à¨°') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à¨¸à¨¼à¨¾à¨®') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¨°à¨¾à¨¤';
        } else if (hour < 10) {
            return 'à¨¸à¨µà©‡à¨°';
        } else if (hour < 17) {
            return 'à¨¦à©à¨ªà¨¹à¨¿à¨°';
        } else if (hour < 20) {
            return 'à¨¸à¨¼à¨¾à¨®';
        } else {
            return 'à¨°à¨¾à¨¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Polish [pl]
//! author : Rafal Hirsz : https://github.com/evoL

import moment from '../moment';

var monthsNominative = 'styczeÅ„_luty_marzec_kwiecieÅ„_maj_czerwiec_lipiec_sierpieÅ„_wrzesieÅ„_paÅºdziernik_listopad_grudzieÅ„'.split(
        '_'
    ),
    monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrzeÅ›nia_paÅºdziernika_listopada_grudnia'.split(
        '_'
    ),
    monthsParse = [
        /^sty/i,
        /^lut/i,
        /^mar/i,
        /^kwi/i,
        /^maj/i,
        /^cze/i,
        /^lip/i,
        /^sie/i,
        /^wrz/i,
        /^paÅº/i,
        /^lis/i,
        /^gru/i,
    ];
function plural(n) {
    return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
}
function translate(number, withoutSuffix, key) {
    var result = number + ' ';
    switch (key) {
        case 'ss':
            return result + (plural(number) ? 'sekundy' : 'sekund');
        case 'm':
            return withoutSuffix ? 'minuta' : 'minutÄ™';
        case 'mm':
            return result + (plural(number) ? 'minuty' : 'minut');
        case 'h':
            return withoutSuffix ? 'godzina' : 'godzinÄ™';
        case 'hh':
            return result + (plural(number) ? 'godziny' : 'godzin');
        case 'ww':
            return result + (plural(number) ? 'tygodnie' : 'tygodni');
        case 'MM':
            return result + (plural(number) ? 'miesiÄ…ce' : 'miesiÄ™cy');
        case 'yy':
            return result + (plural(number) ? 'lata' : 'lat');
    }
}

export default moment.defineLocale('pl', {
    months: function (momentToFormat, format) {
        if (!momentToFormat) {
            return monthsNominative;
        } else if (/D MMMM/.test(format)) {
            return monthsSubjective[momentToFormat.month()];
        } else {
            return monthsNominative[momentToFormat.month()];
        }
    },
    monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paÅº_lis_gru'.split('_'),
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'niedziela_poniedziaÅ‚ek_wtorek_Å›roda_czwartek_piÄ…tek_sobota'.split(
        '_'
    ),
    weekdaysShort: 'ndz_pon_wt_Å›r_czw_pt_sob'.split('_'),
    weekdaysMin: 'Nd_Pn_Wt_Åšr_Cz_Pt_So'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[DziÅ› o] LT',
        nextDay: '[Jutro o] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[W niedzielÄ™ o] LT';

                case 2:
                    return '[We wtorek o] LT';

                case 3:
                    return '[W Å›rodÄ™ o] LT';

                case 6:
                    return '[W sobotÄ™ o] LT';

                default:
                    return '[W] dddd [o] LT';
            }
        },
        lastDay: '[Wczoraj o] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[W zeszÅ‚Ä… niedzielÄ™ o] LT';
                case 3:
                    return '[W zeszÅ‚Ä… Å›rodÄ™ o] LT';
                case 6:
                    return '[W zeszÅ‚Ä… sobotÄ™ o] LT';
                default:
                    return '[W zeszÅ‚y] dddd [o] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: '%s temu',
        s: 'kilka sekund',
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: '1 dzieÅ„',
        dd: '%d dni',
        w: 'tydzieÅ„',
        ww: translate,
        M: 'miesiÄ…c',
        MM: translate,
        y: 'rok',
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Portuguese (Brazil) [pt-br]
//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira

import moment from '../moment';

export default moment.defineLocale('pt-br', {
    months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
        '_'
    ),
    monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
    weekdays: 'domingo_segunda-feira_terÃ§a-feira_quarta-feira_quinta-feira_sexta-feira_sÃ¡bado'.split(
        '_'
    ),
    weekdaysShort: 'dom_seg_ter_qua_qui_sex_sÃ¡b'.split('_'),
    weekdaysMin: 'do_2Âª_3Âª_4Âª_5Âª_6Âª_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY [Ã s] HH:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY [Ã s] HH:mm',
    },
    calendar: {
        sameDay: '[Hoje Ã s] LT',
        nextDay: '[AmanhÃ£ Ã s] LT',
        nextWeek: 'dddd [Ã s] LT',
        lastDay: '[Ontem Ã s] LT',
        lastWeek: function () {
            return this.day() === 0 || this.day() === 6
                ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'em %s',
        past: 'hÃ¡ %s',
        s: 'poucos segundos',
        ss: '%d segundos',
        m: 'um minuto',
        mm: '%d minutos',
        h: 'uma hora',
        hh: '%d horas',
        d: 'um dia',
        dd: '%d dias',
        M: 'um mÃªs',
        MM: '%d meses',
        y: 'um ano',
        yy: '%d anos',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    invalidDate: 'Data invÃ¡lida',
});
//! moment.js locale configuration
//! locale : Portuguese [pt]
//! author : Jefferson : https://github.com/jalex79

import moment from '../moment';

export default moment.defineLocale('pt', {
    months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
        '_'
    ),
    monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
    weekdays: 'Domingo_Segunda-feira_TerÃ§a-feira_Quarta-feira_Quinta-feira_Sexta-feira_SÃ¡bado'.split(
        '_'
    ),
    weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_SÃ¡b'.split('_'),
    weekdaysMin: 'Do_2Âª_3Âª_4Âª_5Âª_6Âª_SÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY HH:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Hoje Ã s] LT',
        nextDay: '[AmanhÃ£ Ã s] LT',
        nextWeek: 'dddd [Ã s] LT',
        lastDay: '[Ontem Ã s] LT',
        lastWeek: function () {
            return this.day() === 0 || this.day() === 6
                ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'em %s',
        past: 'hÃ¡ %s',
        s: 'segundos',
        ss: '%d segundos',
        m: 'um minuto',
        mm: '%d minutos',
        h: 'uma hora',
        hh: '%d horas',
        d: 'um dia',
        dd: '%d dias',
        w: 'uma semana',
        ww: '%d semanas',
        M: 'um mÃªs',
        MM: '%d meses',
        y: 'um ano',
        yy: '%d anos',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Romanian [ro]
//! author : Vlad Gurdiga : https://github.com/gurdiga
//! author : Valentin Agachi : https://github.com/avaly
//! author : Emanuel Cepoi : https://github.com/cepem

import moment from '../moment';

function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
            ss: 'secunde',
            mm: 'minute',
            hh: 'ore',
            dd: 'zile',
            ww: 'sÄƒptÄƒmÃ¢ni',
            MM: 'luni',
            yy: 'ani',
        },
        separator = ' ';
    if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
        separator = ' de ';
    }
    return number + separator + format[key];
}

export default moment.defineLocale('ro', {
    months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
        '_'
    ),
    monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'duminicÄƒ_luni_marÈ›i_miercuri_joi_vineri_sÃ¢mbÄƒtÄƒ'.split('_'),
    weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_SÃ¢m'.split('_'),
    weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_SÃ¢'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY H:mm',
        LLLL: 'dddd, D MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[azi la] LT',
        nextDay: '[mÃ¢ine la] LT',
        nextWeek: 'dddd [la] LT',
        lastDay: '[ieri la] LT',
        lastWeek: '[fosta] dddd [la] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'peste %s',
        past: '%s Ã®n urmÄƒ',
        s: 'cÃ¢teva secunde',
        ss: relativeTimeWithPlural,
        m: 'un minut',
        mm: relativeTimeWithPlural,
        h: 'o orÄƒ',
        hh: relativeTimeWithPlural,
        d: 'o zi',
        dd: relativeTimeWithPlural,
        w: 'o sÄƒptÄƒmÃ¢nÄƒ',
        ww: relativeTimeWithPlural,
        M: 'o lunÄƒ',
        MM: relativeTimeWithPlural,
        y: 'un an',
        yy: relativeTimeWithPlural,
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Russian [ru]
//! author : Viktorminator : https://github.com/Viktorminator
//! author : Menelion ElensÃºle : https://github.com/Oire
//! author : ÐšÐ¾Ñ€ÐµÐ½Ð±ÐµÑ€Ð³ ÐœÐ°Ñ€Ðº : https://github.com/socketpair

import moment from '../moment';

function plural(word, num) {
    var forms = word.split('_');
    return num % 10 === 1 && num % 100 !== 11
        ? forms[0]
        : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
        ? forms[1]
        : forms[2];
}
function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
        ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
        mm: withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚',
        hh: 'Ñ‡Ð°Ñ_Ñ‡Ð°ÑÐ°_Ñ‡Ð°ÑÐ¾Ð²',
        dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ_Ð´Ð½ÐµÐ¹',
        ww: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð½ÐµÐ´ÐµÐ»Ð¸_Ð½ÐµÐ´ÐµÐ»ÑŒ',
        MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ð°_Ð¼ÐµÑÑÑ†ÐµÐ²',
        yy: 'Ð³Ð¾Ð´_Ð³Ð¾Ð´Ð°_Ð»ÐµÑ‚',
    };
    if (key === 'm') {
        return withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ';
    } else {
        return number + ' ' + plural(format[key], +number);
    }
}
var monthsParse = [
    /^ÑÐ½Ð²/i,
    /^Ñ„ÐµÐ²/i,
    /^Ð¼Ð°Ñ€/i,
    /^Ð°Ð¿Ñ€/i,
    /^Ð¼Ð°[Ð¹Ñ]/i,
    /^Ð¸ÑŽÐ½/i,
    /^Ð¸ÑŽÐ»/i,
    /^Ð°Ð²Ð³/i,
    /^ÑÐµÐ½/i,
    /^Ð¾ÐºÑ‚/i,
    /^Ð½Ð¾Ñ/i,
    /^Ð´ÐµÐº/i,
];

// http://new.gramota.ru/spravka/rules/139-prop : Â§ 103
// Ð¡Ð¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÑÑÑ†ÐµÐ²: http://new.gramota.ru/spravka/buro/search-answer?s=242637
// CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
export default moment.defineLocale('ru', {
    months: {
        format: 'ÑÐ½Ð²Ð°Ñ€Ñ_Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ_Ð¼Ð°Ñ€Ñ‚Ð°_Ð°Ð¿Ñ€ÐµÐ»Ñ_Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³ÑƒÑÑ‚Ð°_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ñ_Ð¾ÐºÑ‚ÑÐ±Ñ€Ñ_Ð½Ð¾ÑÐ±Ñ€Ñ_Ð´ÐµÐºÐ°Ð±Ñ€Ñ'.split(
            '_'
        ),
        standalone: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
            '_'
        ),
    },
    monthsShort: {
        // Ð¿Ð¾ CLDR Ð¸Ð¼ÐµÐ½Ð½Ð¾ "Ð¸ÑŽÐ»." Ð¸ "Ð¸ÑŽÐ½.", Ð½Ð¾ ÐºÐ°ÐºÐ¾Ð¹ ÑÐ¼Ñ‹ÑÐ» Ð¼ÐµÐ½ÑÑ‚ÑŒ Ð±ÑƒÐºÐ²Ñƒ Ð½Ð° Ñ‚Ð¾Ñ‡ÐºÑƒ?
        format: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
            '_'
        ),
        standalone: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€._Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
            '_'
        ),
    },
    weekdays: {
        standalone: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ð°_ÑÑƒÐ±Ð±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        format: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ñƒ_ÑÑƒÐ±Ð±Ð¾Ñ‚Ñƒ'.split(
            '_'
        ),
        isFormat: /\[ ?[Ð’Ð²] ?(?:Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ|ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ|ÑÑ‚Ñƒ)? ?] ?dddd/,
    },
    weekdaysShort: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    weekdaysMin: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,

    // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸, Ð¿Ð¾ Ñ‚Ñ€Ð¸ Ð±ÑƒÐºÐ²Ñ‹, Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ…, Ð¿Ð¾ 4 Ð±ÑƒÐºÐ²Ñ‹, ÑÐ¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¸ Ð±ÐµÐ· Ñ‚Ð¾Ñ‡ÐºÐ¸
    monthsRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

    // ÐºÐ¾Ð¿Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ³Ð¾
    monthsShortRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

    // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸
    monthsStrictRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑÑŒ]|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑÑŒ]|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð°Ð¿Ñ€ÐµÐ»[ÑÑŒ]|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑÑŒ]|Ð¸ÑŽÐ»[ÑÑŒ]|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑÑŒ]|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑÑŒ]|Ð½Ð¾ÑÐ±Ñ€[ÑÑŒ]|Ð´ÐµÐºÐ°Ð±Ñ€[ÑÑŒ])/i,

    // Ð’Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ðµ ÑÐ¾Ð¾Ñ‚Ð²ÐµÑ‚ÑÑ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ ÑÐ¾ÐºÑ€Ð°Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ð¼
    monthsShortStrictRegex: /^(ÑÐ½Ð²\.|Ñ„ÐµÐ²Ñ€?\.|Ð¼Ð°Ñ€[Ñ‚.]|Ð°Ð¿Ñ€\.|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑŒÑ.]|Ð¸ÑŽÐ»[ÑŒÑ.]|Ð°Ð²Ð³\.|ÑÐµÐ½Ñ‚?\.|Ð¾ÐºÑ‚\.|Ð½Ð¾ÑÐ±?\.|Ð´ÐµÐº\.)/i,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY Ð³.',
        LLL: 'D MMMM YYYY Ð³., H:mm',
        LLLL: 'dddd, D MMMM YYYY Ð³., H:mm',
    },
    calendar: {
        sameDay: '[Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ, Ð²] LT',
        nextDay: '[Ð—Ð°Ð²Ñ‚Ñ€Ð°, Ð²] LT',
        lastDay: '[Ð’Ñ‡ÐµÑ€Ð°, Ð²] LT',
        nextWeek: function (now) {
            if (now.week() !== this.week()) {
                switch (this.day()) {
                    case 0:
                        return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐµ] dddd, [Ð²] LT';
                    case 1:
                    case 2:
                    case 4:
                        return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ð¹] dddd, [Ð²] LT';
                    case 3:
                    case 5:
                    case 6:
                        return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ] dddd, [Ð²] LT';
                }
            } else {
                if (this.day() === 2) {
                    return '[Ð’Ð¾] dddd, [Ð²] LT';
                } else {
                    return '[Ð’] dddd, [Ð²] LT';
                }
            }
        },
        lastWeek: function (now) {
            if (now.week() !== this.week()) {
                switch (this.day()) {
                    case 0:
                        return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ðµ] dddd, [Ð²] LT';
                    case 1:
                    case 2:
                    case 4:
                        return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ñ‹Ð¹] dddd, [Ð²] LT';
                    case 3:
                    case 5:
                    case 6:
                        return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ] dddd, [Ð²] LT';
                }
            } else {
                if (this.day() === 2) {
                    return '[Ð’Ð¾] dddd, [Ð²] LT';
                } else {
                    return '[Ð’] dddd, [Ð²] LT';
                }
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ñ‡ÐµÑ€ÐµÐ· %s',
        past: '%s Ð½Ð°Ð·Ð°Ð´',
        s: 'Ð½ÐµÑÐºÐ¾Ð»ÑŒÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´',
        ss: relativeTimeWithPlural,
        m: relativeTimeWithPlural,
        mm: relativeTimeWithPlural,
        h: 'Ñ‡Ð°Ñ',
        hh: relativeTimeWithPlural,
        d: 'Ð´ÐµÐ½ÑŒ',
        dd: relativeTimeWithPlural,
        w: 'Ð½ÐµÐ´ÐµÐ»Ñ',
        ww: relativeTimeWithPlural,
        M: 'Ð¼ÐµÑÑÑ†',
        MM: relativeTimeWithPlural,
        y: 'Ð³Ð¾Ð´',
        yy: relativeTimeWithPlural,
    },
    meridiemParse: /Ð½Ð¾Ñ‡Ð¸|ÑƒÑ‚Ñ€Ð°|Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°/i,
    isPM: function (input) {
        return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'Ð½Ð¾Ñ‡Ð¸';
        } else if (hour < 12) {
            return 'ÑƒÑ‚Ñ€Ð°';
        } else if (hour < 17) {
            return 'Ð´Ð½Ñ';
        } else {
            return 'Ð²ÐµÑ‡ÐµÑ€Ð°';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾|Ñ)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'M':
            case 'd':
            case 'DDD':
                return number + '-Ð¹';
            case 'D':
                return number + '-Ð³Ð¾';
            case 'w':
            case 'W':
                return number + '-Ñ';
            default:
                return number;
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Sindhi [sd]
//! author : Narain Sagar : https://github.com/narainsagar

import moment from '../moment';

var months = [
        'Ø¬Ù†ÙˆØ±ÙŠ',
        'ÙÙŠØ¨Ø±ÙˆØ±ÙŠ',
        'Ù…Ø§Ø±Ú†',
        'Ø§Ù¾Ø±ÙŠÙ„',
        'Ù…Ø¦ÙŠ',
        'Ø¬ÙˆÙ†',
        'Ø¬ÙˆÙ„Ø§Ø¡Ù',
        'Ø¢Ú¯Ø³Ù½',
        'Ø³ÙŠÙ¾Ù½Ù…Ø¨Ø±',
        'Ø¢ÚªÙ½ÙˆØ¨Ø±',
        'Ù†ÙˆÙ…Ø¨Ø±',
        'ÚŠØ³Ù…Ø¨Ø±',
    ],
    days = ['Ø¢Ú†Ø±', 'Ø³ÙˆÙ…Ø±', 'Ø§Ú±Ø§Ø±Ùˆ', 'Ø§Ø±Ø¨Ø¹', 'Ø®Ù…ÙŠØ³', 'Ø¬Ù…Ø¹', 'Ú‡Ù†Ú‡Ø±'];

export default moment.defineLocale('sd', {
    months: months,
    monthsShort: months,
    weekdays: days,
    weekdaysShort: days,
    weekdaysMin: days,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
    },
    meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
    isPM: function (input) {
        return 'Ø´Ø§Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'ØµØ¨Ø­';
        }
        return 'Ø´Ø§Ù…';
    },
    calendar: {
        sameDay: '[Ø§Ú„] LT',
        nextDay: '[Ø³Ú€Ø§Ú»ÙŠ] LT',
        nextWeek: 'dddd [Ø§Ú³ÙŠÙ† Ù‡ÙØªÙŠ ØªÙŠ] LT',
        lastDay: '[ÚªØ§Ù„Ù‡Ù‡] LT',
        lastWeek: '[Ú¯Ø²Ø±ÙŠÙ„ Ù‡ÙØªÙŠ] dddd [ØªÙŠ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ù¾ÙˆØ¡',
        past: '%s Ø§Ú³',
        s: 'Ú†Ù†Ø¯ Ø³ÙŠÚªÙ†ÚŠ',
        ss: '%d Ø³ÙŠÚªÙ†ÚŠ',
        m: 'Ù‡Úª Ù…Ù†Ù½',
        mm: '%d Ù…Ù†Ù½',
        h: 'Ù‡Úª ÚªÙ„Ø§Úª',
        hh: '%d ÚªÙ„Ø§Úª',
        d: 'Ù‡Úª ÚÙŠÙ†Ù‡Ù†',
        dd: '%d ÚÙŠÙ†Ù‡Ù†',
        M: 'Ù‡Úª Ù…Ù‡ÙŠÙ†Ùˆ',
        MM: '%d Ù…Ù‡ÙŠÙ†Ø§',
        y: 'Ù‡Úª Ø³Ø§Ù„',
        yy: '%d Ø³Ø§Ù„',
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Northern Sami [se]
//! authors : BÃ¥rd Rolstad Henriksen : https://github.com/karamell

import moment from '../moment';

export default moment.defineLocale('se', {
    months: 'oÄ‘Ä‘ajagemÃ¡nnu_guovvamÃ¡nnu_njukÄamÃ¡nnu_cuoÅ‹omÃ¡nnu_miessemÃ¡nnu_geassemÃ¡nnu_suoidnemÃ¡nnu_borgemÃ¡nnu_ÄakÄamÃ¡nnu_golggotmÃ¡nnu_skÃ¡bmamÃ¡nnu_juovlamÃ¡nnu'.split(
        '_'
    ),
    monthsShort: 'oÄ‘Ä‘j_guov_njuk_cuo_mies_geas_suoi_borg_ÄakÄ_golg_skÃ¡b_juov'.split(
        '_'
    ),
    weekdays: 'sotnabeaivi_vuossÃ¡rga_maÅ‹Å‹ebÃ¡rga_gaskavahkku_duorastat_bearjadat_lÃ¡vvardat'.split(
        '_'
    ),
    weekdaysShort: 'sotn_vuos_maÅ‹_gask_duor_bear_lÃ¡v'.split('_'),
    weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'MMMM D. [b.] YYYY',
        LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
        LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
    },
    calendar: {
        sameDay: '[otne ti] LT',
        nextDay: '[ihttin ti] LT',
        nextWeek: 'dddd [ti] LT',
        lastDay: '[ikte ti] LT',
        lastWeek: '[ovddit] dddd [ti] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s geaÅ¾es',
        past: 'maÅ‹it %s',
        s: 'moadde sekunddat',
        ss: '%d sekunddat',
        m: 'okta minuhta',
        mm: '%d minuhtat',
        h: 'okta diimmu',
        hh: '%d diimmut',
        d: 'okta beaivi',
        dd: '%d beaivvit',
        M: 'okta mÃ¡nnu',
        MM: '%d mÃ¡nut',
        y: 'okta jahki',
        yy: '%d jagit',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Sinhalese [si]
//! author : Sampath Sitinamaluwa : https://github.com/sampathsris

import moment from '../moment';

/*jshint -W100*/
export default moment.defineLocale('si', {
    months: 'à¶¢à¶±à·€à·à¶»à·’_à¶´à·™à¶¶à¶»à·€à·à¶»à·’_à¶¸à·à¶»à·Šà¶­à·”_à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·à·ƒà·Šà¶­à·”_à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š_à¶”à¶šà·Šà¶­à·à¶¶à¶»à·Š_à¶±à·œà·€à·à¶¸à·Šà¶¶à¶»à·Š_à¶¯à·™à·ƒà·à¶¸à·Šà¶¶à¶»à·Š'.split(
        '_'
    ),
    monthsShort: 'à¶¢à¶±_à¶´à·™à¶¶_à¶¸à·à¶»à·Š_à¶…à¶´à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·_à·ƒà·à¶´à·Š_à¶”à¶šà·Š_à¶±à·œà·€à·_à¶¯à·™à·ƒà·'.split(
        '_'
    ),
    weekdays: 'à¶‰à¶»à·’à¶¯à·_à·ƒà¶³à·”à¶¯à·_à¶…à¶Ÿà·„à¶»à·”à·€à·à¶¯à·_à¶¶à¶¯à·à¶¯à·_à¶¶à·Šâ€à¶»à·„à·ƒà·Šà¶´à¶­à·’à¶±à·Šà¶¯à·_à·ƒà·’à¶šà·”à¶»à·à¶¯à·_à·ƒà·™à¶±à·ƒà·”à¶»à·à¶¯à·'.split(
        '_'
    ),
    weekdaysShort: 'à¶‰à¶»à·’_à·ƒà¶³à·”_à¶…à¶Ÿ_à¶¶à¶¯à·_à¶¶à·Šâ€à¶»à·„_à·ƒà·’à¶šà·”_à·ƒà·™à¶±'.split('_'),
    weekdaysMin: 'à¶‰_à·ƒ_à¶…_à¶¶_à¶¶à·Šâ€à¶»_à·ƒà·’_à·ƒà·™'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'a h:mm',
        LTS: 'a h:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYY MMMM D',
        LLL: 'YYYY MMMM D, a h:mm',
        LLLL: 'YYYY MMMM D [à·€à·à¶±à·’] dddd, a h:mm:ss',
    },
    calendar: {
        sameDay: '[à¶…à¶¯] LT[à¶§]',
        nextDay: '[à·„à·™à¶§] LT[à¶§]',
        nextWeek: 'dddd LT[à¶§]',
        lastDay: '[à¶Šà¶ºà·š] LT[à¶§]',
        lastWeek: '[à¶´à·ƒà·”à¶œà·’à¶º] dddd LT[à¶§]',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%sà¶šà·’à¶±à·Š',
        past: '%sà¶šà¶§ à¶´à·™à¶»',
        s: 'à¶­à¶­à·Šà¶´à¶» à¶šà·’à·„à·’à¶´à¶º',
        ss: 'à¶­à¶­à·Šà¶´à¶» %d',
        m: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·”à·€',
        mm: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·” %d',
        h: 'à¶´à·à¶º',
        hh: 'à¶´à·à¶º %d',
        d: 'à¶¯à·’à¶±à¶º',
        dd: 'à¶¯à·’à¶± %d',
        M: 'à¶¸à·à·ƒà¶º',
        MM: 'à¶¸à·à·ƒ %d',
        y: 'à·€à·ƒà¶»',
        yy: 'à·€à·ƒà¶» %d',
    },
    dayOfMonthOrdinalParse: /\d{1,2} à·€à·à¶±à·’/,
    ordinal: function (number) {
        return number + ' à·€à·à¶±à·’';
    },
    meridiemParse: /à¶´à·™à¶» à·€à¶»à·”|à¶´à·ƒà·Š à·€à¶»à·”|à¶´à·™.à·€|à¶´.à·€./,
    isPM: function (input) {
        return input === 'à¶´.à·€.' || input === 'à¶´à·ƒà·Š à·€à¶»à·”';
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? 'à¶´.à·€.' : 'à¶´à·ƒà·Š à·€à¶»à·”';
        } else {
            return isLower ? 'à¶´à·™.à·€.' : 'à¶´à·™à¶» à·€à¶»à·”';
        }
    },
});
//! moment.js locale configuration
//! locale : Slovak [sk]
//! author : Martin Minka : https://github.com/k2s
//! based on work of petrbela : https://github.com/petrbela

import moment from '../moment';

var months = 'januÃ¡r_februÃ¡r_marec_aprÃ­l_mÃ¡j_jÃºn_jÃºl_august_september_oktÃ³ber_november_december'.split(
        '_'
    ),
    monthsShort = 'jan_feb_mar_apr_mÃ¡j_jÃºn_jÃºl_aug_sep_okt_nov_dec'.split('_');
function plural(n) {
    return n > 1 && n < 5;
}
function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    switch (key) {
        case 's': // a few seconds / in a few seconds / a few seconds ago
            return withoutSuffix || isFuture ? 'pÃ¡r sekÃºnd' : 'pÃ¡r sekundami';
        case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'sekundy' : 'sekÃºnd');
            } else {
                return result + 'sekundami';
            }
        case 'm': // a minute / in a minute / a minute ago
            return withoutSuffix ? 'minÃºta' : isFuture ? 'minÃºtu' : 'minÃºtou';
        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'minÃºty' : 'minÃºt');
            } else {
                return result + 'minÃºtami';
            }
        case 'h': // an hour / in an hour / an hour ago
            return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
        case 'hh': // 9 hours / in 9 hours / 9 hours ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'hodiny' : 'hodÃ­n');
            } else {
                return result + 'hodinami';
            }
        case 'd': // a day / in a day / a day ago
            return withoutSuffix || isFuture ? 'deÅˆ' : 'dÅˆom';
        case 'dd': // 9 days / in 9 days / 9 days ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'dni' : 'dnÃ­');
            } else {
                return result + 'dÅˆami';
            }
        case 'M': // a month / in a month / a month ago
            return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
        case 'MM': // 9 months / in 9 months / 9 months ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'mesiace' : 'mesiacov');
            } else {
                return result + 'mesiacmi';
            }
        case 'y': // a year / in a year / a year ago
            return withoutSuffix || isFuture ? 'rok' : 'rokom';
        case 'yy': // 9 years / in 9 years / 9 years ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'roky' : 'rokov');
            } else {
                return result + 'rokmi';
            }
    }
}

export default moment.defineLocale('sk', {
    months: months,
    monthsShort: monthsShort,
    weekdays: 'nedeÄ¾a_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota'.split('_'),
    weekdaysShort: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
    weekdaysMin: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[dnes o] LT',
        nextDay: '[zajtra o] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[v nedeÄ¾u o] LT';
                case 1:
                case 2:
                    return '[v] dddd [o] LT';
                case 3:
                    return '[v stredu o] LT';
                case 4:
                    return '[vo Å¡tvrtok o] LT';
                case 5:
                    return '[v piatok o] LT';
                case 6:
                    return '[v sobotu o] LT';
            }
        },
        lastDay: '[vÄera o] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[minulÃº nedeÄ¾u o] LT';
                case 1:
                case 2:
                    return '[minulÃ½] dddd [o] LT';
                case 3:
                    return '[minulÃº stredu o] LT';
                case 4:
                case 5:
                    return '[minulÃ½] dddd [o] LT';
                case 6:
                    return '[minulÃº sobotu o] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'pred %s',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Slovenian [sl]
//! author : Robert SedovÅ¡ek : https://github.com/sedovsek

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    switch (key) {
        case 's':
            return withoutSuffix || isFuture
                ? 'nekaj sekund'
                : 'nekaj sekundami';
        case 'ss':
            if (number === 1) {
                result += withoutSuffix ? 'sekundo' : 'sekundi';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
            } else {
                result += 'sekund';
            }
            return result;
        case 'm':
            return withoutSuffix ? 'ena minuta' : 'eno minuto';
        case 'mm':
            if (number === 1) {
                result += withoutSuffix ? 'minuta' : 'minuto';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'minute' : 'minutami';
            } else {
                result += withoutSuffix || isFuture ? 'minut' : 'minutami';
            }
            return result;
        case 'h':
            return withoutSuffix ? 'ena ura' : 'eno uro';
        case 'hh':
            if (number === 1) {
                result += withoutSuffix ? 'ura' : 'uro';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'uri' : 'urama';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'ure' : 'urami';
            } else {
                result += withoutSuffix || isFuture ? 'ur' : 'urami';
            }
            return result;
        case 'd':
            return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
        case 'dd':
            if (number === 1) {
                result += withoutSuffix || isFuture ? 'dan' : 'dnem';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
            } else {
                result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
            }
            return result;
        case 'M':
            return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
        case 'MM':
            if (number === 1) {
                result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
            } else {
                result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
            }
            return result;
        case 'y':
            return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
        case 'yy':
            if (number === 1) {
                result += withoutSuffix || isFuture ? 'leto' : 'letom';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'leti' : 'letoma';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'leta' : 'leti';
            } else {
                result += withoutSuffix || isFuture ? 'let' : 'leti';
            }
            return result;
    }
}

export default moment.defineLocale('sl', {
    months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota'.split('_'),
    weekdaysShort: 'ned._pon._tor._sre._Äet._pet._sob.'.split('_'),
    weekdaysMin: 'ne_po_to_sr_Äe_pe_so'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD. MM. YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd, D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[danes ob] LT',
        nextDay: '[jutri ob] LT',

        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[v] [nedeljo] [ob] LT';
                case 3:
                    return '[v] [sredo] [ob] LT';
                case 6:
                    return '[v] [soboto] [ob] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[v] dddd [ob] LT';
            }
        },
        lastDay: '[vÄeraj ob] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[prejÅ¡njo] [nedeljo] [ob] LT';
                case 3:
                    return '[prejÅ¡njo] [sredo] [ob] LT';
                case 6:
                    return '[prejÅ¡njo] [soboto] [ob] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[prejÅ¡nji] dddd [ob] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Äez %s',
        past: 'pred %s',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: processRelativeTime,
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Albanian [sq]
//! author : FlakÃ«rim Ismani : https://github.com/flakerimi
//! author : Menelion ElensÃºle : https://github.com/Oire
//! author : Oerd Cukalla : https://github.com/oerd

import moment from '../moment';

export default moment.defineLocale('sq', {
    months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_NÃ«ntor_Dhjetor'.split(
        '_'
    ),
    monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_NÃ«n_Dhj'.split('_'),
    weekdays: 'E Diel_E HÃ«nÃ«_E MartÃ«_E MÃ«rkurÃ«_E Enjte_E Premte_E ShtunÃ«'.split(
        '_'
    ),
    weekdaysShort: 'Die_HÃ«n_Mar_MÃ«r_Enj_Pre_Sht'.split('_'),
    weekdaysMin: 'D_H_Ma_MÃ«_E_P_Sh'.split('_'),
    weekdaysParseExact: true,
    meridiemParse: /PD|MD/,
    isPM: function (input) {
        return input.charAt(0) === 'M';
    },
    meridiem: function (hours, minutes, isLower) {
        return hours < 12 ? 'PD' : 'MD';
    },
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Sot nÃ«] LT',
        nextDay: '[NesÃ«r nÃ«] LT',
        nextWeek: 'dddd [nÃ«] LT',
        lastDay: '[Dje nÃ«] LT',
        lastWeek: 'dddd [e kaluar nÃ«] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'nÃ« %s',
        past: '%s mÃ« parÃ«',
        s: 'disa sekonda',
        ss: '%d sekonda',
        m: 'njÃ« minutÃ«',
        mm: '%d minuta',
        h: 'njÃ« orÃ«',
        hh: '%d orÃ«',
        d: 'njÃ« ditÃ«',
        dd: '%d ditÃ«',
        M: 'njÃ« muaj',
        MM: '%d muaj',
        y: 'njÃ« vit',
        yy: '%d vite',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Serbian Cyrillic [sr-cyrl]
//! author : Milan JanaÄkoviÄ‡<milanjanackovic@gmail.com> : https://github.com/milan-j
//! author : Stefan CrnjakoviÄ‡ <stefan@hotmail.rs> : https://github.com/crnjakovic

import moment from '../moment';

var translator = {
    words: {
        //Different grammatical cases
        ss: ['ÑÐµÐºÑƒÐ½Ð´Ð°', 'ÑÐµÐºÑƒÐ½Ð´Ðµ', 'ÑÐµÐºÑƒÐ½Ð´Ð¸'],
        m: ['Ñ˜ÐµÐ´Ð°Ð½ Ð¼Ð¸Ð½ÑƒÑ‚', 'Ñ˜ÐµÐ´Ð½Ðµ Ð¼Ð¸Ð½ÑƒÑ‚Ðµ'],
        mm: ['Ð¼Ð¸Ð½ÑƒÑ‚', 'Ð¼Ð¸Ð½ÑƒÑ‚Ðµ', 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°'],
        h: ['Ñ˜ÐµÐ´Ð°Ð½ ÑÐ°Ñ‚', 'Ñ˜ÐµÐ´Ð½Ð¾Ð³ ÑÐ°Ñ‚Ð°'],
        hh: ['ÑÐ°Ñ‚', 'ÑÐ°Ñ‚Ð°', 'ÑÐ°Ñ‚Ð¸'],
        dd: ['Ð´Ð°Ð½', 'Ð´Ð°Ð½Ð°', 'Ð´Ð°Ð½Ð°'],
        MM: ['Ð¼ÐµÑÐµÑ†', 'Ð¼ÐµÑÐµÑ†Ð°', 'Ð¼ÐµÑÐµÑ†Ð¸'],
        yy: ['Ð³Ð¾Ð´Ð¸Ð½Ð°', 'Ð³Ð¾Ð´Ð¸Ð½Ðµ', 'Ð³Ð¾Ð´Ð¸Ð½Ð°'],
    },
    correctGrammaticalCase: function (number, wordKey) {
        return number === 1
            ? wordKey[0]
            : number >= 2 && number <= 4
            ? wordKey[1]
            : wordKey[2];
    },
    translate: function (number, withoutSuffix, key) {
        var wordKey = translator.words[key];
        if (key.length === 1) {
            return withoutSuffix ? wordKey[0] : wordKey[1];
        } else {
            return (
                number +
                ' ' +
                translator.correctGrammaticalCase(number, wordKey)
            );
        }
    },
};

export default moment.defineLocale('sr-cyrl', {
    months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€_Ñ„ÐµÐ±Ñ€ÑƒÐ°Ñ€_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð±Ð°Ñ€_Ð¾ÐºÑ‚Ð¾Ð±Ð°Ñ€_Ð½Ð¾Ð²ÐµÐ¼Ð±Ð°Ñ€_Ð´ÐµÑ†ÐµÐ¼Ð±Ð°Ñ€'.split(
        '_'
    ),
    monthsShort: 'Ñ˜Ð°Ð½._Ñ„ÐµÐ±._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³._ÑÐµÐ¿._Ð¾ÐºÑ‚._Ð½Ð¾Ð²._Ð´ÐµÑ†.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Ð½ÐµÐ´ÐµÑ™Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™Ð°Ðº_ÑƒÑ‚Ð¾Ñ€Ð°Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð°Ðº_Ð¿ÐµÑ‚Ð°Ðº_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split('_'),
    weekdaysShort: 'Ð½ÐµÐ´._Ð¿Ð¾Ð½._ÑƒÑ‚Ð¾._ÑÑ€Ðµ._Ñ‡ÐµÑ‚._Ð¿ÐµÑ‚._ÑÑƒÐ±.'.split('_'),
    weekdaysMin: 'Ð½Ðµ_Ð¿Ð¾_ÑƒÑ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_ÑÑƒ'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'D. M. YYYY.',
        LL: 'D. MMMM YYYY.',
        LLL: 'D. MMMM YYYY. H:mm',
        LLLL: 'dddd, D. MMMM YYYY. H:mm',
    },
    calendar: {
        sameDay: '[Ð´Ð°Ð½Ð°Ñ Ñƒ] LT',
        nextDay: '[ÑÑƒÑ‚Ñ€Ð° Ñƒ] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[Ñƒ] [Ð½ÐµÐ´ÐµÑ™Ñƒ] [Ñƒ] LT';
                case 3:
                    return '[Ñƒ] [ÑÑ€ÐµÐ´Ñƒ] [Ñƒ] LT';
                case 6:
                    return '[Ñƒ] [ÑÑƒÐ±Ð¾Ñ‚Ñƒ] [Ñƒ] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[Ñƒ] dddd [Ñƒ] LT';
            }
        },
        lastDay: '[Ñ˜ÑƒÑ‡Ðµ Ñƒ] LT',
        lastWeek: function () {
            var lastWeekDays = [
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [Ð½ÐµÐ´ÐµÑ™Ðµ] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™ÐºÐ°] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [ÑƒÑ‚Ð¾Ñ€ÐºÐ°] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑ€ÐµÐ´Ðµ] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚ÐºÐ°] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿ÐµÑ‚ÐºÐ°] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑƒÐ±Ð¾Ñ‚Ðµ] [Ñƒ] LT',
            ];
            return lastWeekDays[this.day()];
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð·Ð° %s',
        past: 'Ð¿Ñ€Ðµ %s',
        s: 'Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
        ss: translator.translate,
        m: translator.translate,
        mm: translator.translate,
        h: translator.translate,
        hh: translator.translate,
        d: 'Ð´Ð°Ð½',
        dd: translator.translate,
        M: 'Ð¼ÐµÑÐµÑ†',
        MM: translator.translate,
        y: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
        yy: translator.translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 1st is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Serbian [sr]
//! author : Milan JanaÄkoviÄ‡<milanjanackovic@gmail.com> : https://github.com/milan-j
//! author : Stefan CrnjakoviÄ‡ <stefan@hotmail.rs> : https://github.com/crnjakovic

import moment from '../moment';

var translator = {
    words: {
        //Different grammatical cases
        ss: ['sekunda', 'sekunde', 'sekundi'],
        m: ['jedan minut', 'jedne minute'],
        mm: ['minut', 'minute', 'minuta'],
        h: ['jedan sat', 'jednog sata'],
        hh: ['sat', 'sata', 'sati'],
        dd: ['dan', 'dana', 'dana'],
        MM: ['mesec', 'meseca', 'meseci'],
        yy: ['godina', 'godine', 'godina'],
    },
    correctGrammaticalCase: function (number, wordKey) {
        return number === 1
            ? wordKey[0]
            : number >= 2 && number <= 4
            ? wordKey[1]
            : wordKey[2];
    },
    translate: function (number, withoutSuffix, key) {
        var wordKey = translator.words[key];
        if (key.length === 1) {
            return withoutSuffix ? wordKey[0] : wordKey[1];
        } else {
            return (
                number +
                ' ' +
                translator.correctGrammaticalCase(number, wordKey)
            );
        }
    },
};

export default moment.defineLocale('sr', {
    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedelja_ponedeljak_utorak_sreda_Äetvrtak_petak_subota'.split(
        '_'
    ),
    weekdaysShort: 'ned._pon._uto._sre._Äet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'D. M. YYYY.',
        LL: 'D. MMMM YYYY.',
        LLL: 'D. MMMM YYYY. H:mm',
        LLLL: 'dddd, D. MMMM YYYY. H:mm',
    },
    calendar: {
        sameDay: '[danas u] LT',
        nextDay: '[sutra u] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[u] [nedelju] [u] LT';
                case 3:
                    return '[u] [sredu] [u] LT';
                case 6:
                    return '[u] [subotu] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[u] dddd [u] LT';
            }
        },
        lastDay: '[juÄe u] LT',
        lastWeek: function () {
            var lastWeekDays = [
                '[proÅ¡le] [nedelje] [u] LT',
                '[proÅ¡log] [ponedeljka] [u] LT',
                '[proÅ¡log] [utorka] [u] LT',
                '[proÅ¡le] [srede] [u] LT',
                '[proÅ¡log] [Äetvrtka] [u] LT',
                '[proÅ¡log] [petka] [u] LT',
                '[proÅ¡le] [subote] [u] LT',
            ];
            return lastWeekDays[this.day()];
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'pre %s',
        s: 'nekoliko sekundi',
        ss: translator.translate,
        m: translator.translate,
        mm: translator.translate,
        h: translator.translate,
        hh: translator.translate,
        d: 'dan',
        dd: translator.translate,
        M: 'mesec',
        MM: translator.translate,
        y: 'godinu',
        yy: translator.translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : siSwati [ss]
//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies

import moment from '../moment';

export default moment.defineLocale('ss', {
    months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
        '_'
    ),
    monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
    weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
        '_'
    ),
    weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
    weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Namuhla nga] LT',
        nextDay: '[Kusasa nga] LT',
        nextWeek: 'dddd [nga] LT',
        lastDay: '[Itolo nga] LT',
        lastWeek: 'dddd [leliphelile] [nga] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'nga %s',
        past: 'wenteka nga %s',
        s: 'emizuzwana lomcane',
        ss: '%d mzuzwana',
        m: 'umzuzu',
        mm: '%d emizuzu',
        h: 'lihora',
        hh: '%d emahora',
        d: 'lilanga',
        dd: '%d emalanga',
        M: 'inyanga',
        MM: '%d tinyanga',
        y: 'umnyaka',
        yy: '%d iminyaka',
    },
    meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'ekuseni';
        } else if (hours < 15) {
            return 'emini';
        } else if (hours < 19) {
            return 'entsambama';
        } else {
            return 'ebusuku';
        }
    },
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'ekuseni') {
            return hour;
        } else if (meridiem === 'emini') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
            if (hour === 0) {
                return 0;
            }
            return hour + 12;
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: '%d',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Swedish [sv]
//! author : Jens Alm : https://github.com/ulmus

import moment from '../moment';

export default moment.defineLocale('sv', {
    months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
    weekdays: 'sÃ¶ndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lÃ¶rdag'.split('_'),
    weekdaysShort: 'sÃ¶n_mÃ¥n_tis_ons_tor_fre_lÃ¶r'.split('_'),
    weekdaysMin: 'sÃ¶_mÃ¥_ti_on_to_fr_lÃ¶'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [kl.] HH:mm',
        LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
        lll: 'D MMM YYYY HH:mm',
        llll: 'ddd D MMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Idag] LT',
        nextDay: '[Imorgon] LT',
        lastDay: '[IgÃ¥r] LT',
        nextWeek: '[PÃ¥] dddd LT',
        lastWeek: '[I] dddd[s] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'om %s',
        past: 'fÃ¶r %s sedan',
        s: 'nÃ¥gra sekunder',
        ss: '%d sekunder',
        m: 'en minut',
        mm: '%d minuter',
        h: 'en timme',
        hh: '%d timmar',
        d: 'en dag',
        dd: '%d dagar',
        M: 'en mÃ¥nad',
        MM: '%d mÃ¥nader',
        y: 'ett Ã¥r',
        yy: '%d Ã¥r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? ':e'
                    : b === 1
                    ? ':a'
                    : b === 2
                    ? ':a'
                    : b === 3
                    ? ':e'
                    : ':e';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Swahili [sw]
//! author : Fahad Kassim : https://github.com/fadsel

import moment from '../moment';

export default moment.defineLocale('sw', {
    months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
    weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
        '_'
    ),
    weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
    weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'hh:mm A',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[leo saa] LT',
        nextDay: '[kesho saa] LT',
        nextWeek: '[wiki ijayo] dddd [saat] LT',
        lastDay: '[jana] LT',
        lastWeek: '[wiki iliyopita] dddd [saat] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s baadaye',
        past: 'tokea %s',
        s: 'hivi punde',
        ss: 'sekunde %d',
        m: 'dakika moja',
        mm: 'dakika %d',
        h: 'saa limoja',
        hh: 'masaa %d',
        d: 'siku moja',
        dd: 'siku %d',
        M: 'mwezi mmoja',
        MM: 'miezi %d',
        y: 'mwaka mmoja',
        yy: 'miaka %d',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tamil [ta]
//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404

import moment from '../moment';

var symbolMap = {
        1: 'à¯§',
        2: 'à¯¨',
        3: 'à¯©',
        4: 'à¯ª',
        5: 'à¯«',
        6: 'à¯¬',
        7: 'à¯­',
        8: 'à¯®',
        9: 'à¯¯',
        0: 'à¯¦',
    },
    numberMap = {
        'à¯§': '1',
        'à¯¨': '2',
        'à¯©': '3',
        'à¯ª': '4',
        'à¯«': '5',
        'à¯¬': '6',
        'à¯­': '7',
        'à¯®': '8',
        'à¯¯': '9',
        'à¯¦': '0',
    };

export default moment.defineLocale('ta', {
    months: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
        '_'
    ),
    monthsShort: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
        '_'
    ),
    weekdays: 'à®žà®¾à®¯à®¿à®±à¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ_à®¤à®¿à®™à¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ_à®šà¯†à®µà¯à®µà®¾à®¯à¯à®•à®¿à®´à®®à¯ˆ_à®ªà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ_à®µà®¿à®¯à®¾à®´à®•à¯à®•à®¿à®´à®®à¯ˆ_à®µà¯†à®³à¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ_à®šà®©à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ'.split(
        '_'
    ),
    weekdaysShort: 'à®žà®¾à®¯à®¿à®±à¯_à®¤à®¿à®™à¯à®•à®³à¯_à®šà¯†à®µà¯à®µà®¾à®¯à¯_à®ªà¯à®¤à®©à¯_à®µà®¿à®¯à®¾à®´à®©à¯_à®µà¯†à®³à¯à®³à®¿_à®šà®©à®¿'.split(
        '_'
    ),
    weekdaysMin: 'à®žà®¾_à®¤à®¿_à®šà¯†_à®ªà¯_à®µà®¿_à®µà¯†_à®š'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, HH:mm',
        LLLL: 'dddd, D MMMM YYYY, HH:mm',
    },
    calendar: {
        sameDay: '[à®‡à®©à¯à®±à¯] LT',
        nextDay: '[à®¨à®¾à®³à¯ˆ] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à®¨à¯‡à®±à¯à®±à¯] LT',
        lastWeek: '[à®•à®Ÿà®¨à¯à®¤ à®µà®¾à®°à®®à¯] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à®‡à®²à¯',
        past: '%s à®®à¯à®©à¯',
        s: 'à®’à®°à¯ à®šà®¿à®² à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
        ss: '%d à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
        m: 'à®’à®°à¯ à®¨à®¿à®®à®¿à®Ÿà®®à¯',
        mm: '%d à®¨à®¿à®®à®¿à®Ÿà®™à¯à®•à®³à¯',
        h: 'à®’à®°à¯ à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
        hh: '%d à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
        d: 'à®’à®°à¯ à®¨à®¾à®³à¯',
        dd: '%d à®¨à®¾à®Ÿà¯à®•à®³à¯',
        M: 'à®’à®°à¯ à®®à®¾à®¤à®®à¯',
        MM: '%d à®®à®¾à®¤à®™à¯à®•à®³à¯',
        y: 'à®’à®°à¯ à®µà®°à¯à®Ÿà®®à¯',
        yy: '%d à®†à®£à¯à®Ÿà¯à®•à®³à¯',
    },
    dayOfMonthOrdinalParse: /\d{1,2}à®µà®¤à¯/,
    ordinal: function (number) {
        return number + 'à®µà®¤à¯';
    },
    preparse: function (string) {
        return string.replace(/[à¯§à¯¨à¯©à¯ªà¯«à¯¬à¯­à¯®à¯¯à¯¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    // refer http://ta.wikipedia.org/s/1er1
    meridiemParse: /à®¯à®¾à®®à®®à¯|à®µà¯ˆà®•à®±à¯ˆ|à®•à®¾à®²à¯ˆ|à®¨à®£à¯à®ªà®•à®²à¯|à®Žà®±à¯à®ªà®¾à®Ÿà¯|à®®à®¾à®²à¯ˆ/,
    meridiem: function (hour, minute, isLower) {
        if (hour < 2) {
            return ' à®¯à®¾à®®à®®à¯';
        } else if (hour < 6) {
            return ' à®µà¯ˆà®•à®±à¯ˆ'; // à®µà¯ˆà®•à®±à¯ˆ
        } else if (hour < 10) {
            return ' à®•à®¾à®²à¯ˆ'; // à®•à®¾à®²à¯ˆ
        } else if (hour < 14) {
            return ' à®¨à®£à¯à®ªà®•à®²à¯'; // à®¨à®£à¯à®ªà®•à®²à¯
        } else if (hour < 18) {
            return ' à®Žà®±à¯à®ªà®¾à®Ÿà¯'; // à®Žà®±à¯à®ªà®¾à®Ÿà¯
        } else if (hour < 22) {
            return ' à®®à®¾à®²à¯ˆ'; // à®®à®¾à®²à¯ˆ
        } else {
            return ' à®¯à®¾à®®à®®à¯';
        }
    },
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à®¯à®¾à®®à®®à¯') {
            return hour < 2 ? hour : hour + 12;
        } else if (meridiem === 'à®µà¯ˆà®•à®±à¯ˆ' || meridiem === 'à®•à®¾à®²à¯ˆ') {
            return hour;
        } else if (meridiem === 'à®¨à®£à¯à®ªà®•à®²à¯') {
            return hour >= 10 ? hour : hour + 12;
        } else {
            return hour + 12;
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Telugu [te]
//! author : Krishna Chaitanya Thota : https://github.com/kcthota

import moment from '../moment';

export default moment.defineLocale('te', {
    months: 'à°œà°¨à°µà°°à°¿_à°«à°¿à°¬à±à°°à°µà°°à°¿_à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿à°²à±_à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—à°¸à±à°Ÿà±_à°¸à±†à°ªà±à°Ÿà±†à°‚à°¬à°°à±_à°…à°•à±à°Ÿà±‹à°¬à°°à±_à°¨à°µà°‚à°¬à°°à±_à°¡à°¿à°¸à±†à°‚à°¬à°°à±'.split(
        '_'
    ),
    monthsShort: 'à°œà°¨._à°«à°¿à°¬à±à°°._à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿._à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—._à°¸à±†à°ªà±._à°…à°•à±à°Ÿà±‹._à°¨à°µ._à°¡à°¿à°¸à±†.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à°†à°¦à°¿à°µà°¾à°°à°‚_à°¸à±‹à°®à°µà°¾à°°à°‚_à°®à°‚à°—à°³à°µà°¾à°°à°‚_à°¬à±à°§à°µà°¾à°°à°‚_à°—à±à°°à±à°µà°¾à°°à°‚_à°¶à±à°•à±à°°à°µà°¾à°°à°‚_à°¶à°¨à°¿à°µà°¾à°°à°‚'.split(
        '_'
    ),
    weekdaysShort: 'à°†à°¦à°¿_à°¸à±‹à°®_à°®à°‚à°—à°³_à°¬à±à°§_à°—à±à°°à±_à°¶à±à°•à±à°°_à°¶à°¨à°¿'.split('_'),
    weekdaysMin: 'à°†_à°¸à±‹_à°®à°‚_à°¬à±_à°—à±_à°¶à±_à°¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm',
        LTS: 'A h:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm',
        LLLL: 'dddd, D MMMM YYYY, A h:mm',
    },
    calendar: {
        sameDay: '[à°¨à±‡à°¡à±] LT',
        nextDay: '[à°°à±‡à°ªà±] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à°¨à°¿à°¨à±à°¨] LT',
        lastWeek: '[à°—à°¤] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à°²à±‹',
        past: '%s à°•à±à°°à°¿à°¤à°‚',
        s: 'à°•à±Šà°¨à±à°¨à°¿ à°•à±à°·à°£à°¾à°²à±',
        ss: '%d à°¸à±†à°•à°¨à±à°²à±',
        m: 'à°’à°• à°¨à°¿à°®à°¿à°·à°‚',
        mm: '%d à°¨à°¿à°®à°¿à°·à°¾à°²à±',
        h: 'à°’à°• à°—à°‚à°Ÿ',
        hh: '%d à°—à°‚à°Ÿà°²à±',
        d: 'à°’à°• à°°à±‹à°œà±',
        dd: '%d à°°à±‹à°œà±à°²à±',
        M: 'à°’à°• à°¨à±†à°²',
        MM: '%d à°¨à±†à°²à°²à±',
        y: 'à°’à°• à°¸à°‚à°µà°¤à±à°¸à°°à°‚',
        yy: '%d à°¸à°‚à°µà°¤à±à°¸à°°à°¾à°²à±',
    },
    dayOfMonthOrdinalParse: /\d{1,2}à°µ/,
    ordinal: '%dà°µ',
    meridiemParse: /à°°à°¾à°¤à±à°°à°¿|à°‰à°¦à°¯à°‚|à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚|à°¸à°¾à°¯à°‚à°¤à±à°°à°‚/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à°°à°¾à°¤à±à°°à°¿') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à°‰à°¦à°¯à°‚') {
            return hour;
        } else if (meridiem === 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à°°à°¾à°¤à±à°°à°¿';
        } else if (hour < 10) {
            return 'à°‰à°¦à°¯à°‚';
        } else if (hour < 17) {
            return 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚';
        } else if (hour < 20) {
            return 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚';
        } else {
            return 'à°°à°¾à°¤à±à°°à°¿';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tetun Dili (East Timor) [tet]
//! author : Joshua Brooks : https://github.com/joshbrooks
//! author : Onorio De J. Afonso : https://github.com/marobo
//! author : Sonia Simoes : https://github.com/soniasimoes

import moment from '../moment';

export default moment.defineLocale('tet', {
    months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_JuÃ±u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
        '_'
    ),
    monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
    weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
    weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
    weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ohin iha] LT',
        nextDay: '[Aban iha] LT',
        nextWeek: 'dddd [iha] LT',
        lastDay: '[Horiseik iha] LT',
        lastWeek: 'dddd [semana kotuk] [iha] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'iha %s',
        past: '%s liuba',
        s: 'segundu balun',
        ss: 'segundu %d',
        m: 'minutu ida',
        mm: 'minutu %d',
        h: 'oras ida',
        hh: 'oras %d',
        d: 'loron ida',
        dd: 'loron %d',
        M: 'fulan ida',
        MM: 'fulan %d',
        y: 'tinan ida',
        yy: 'tinan %d',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tajik [tg]
//! author : Orif N. Jr. : https://github.com/orif-jr

import moment from '../moment';

var suffixes = {
    0: '-ÑƒÐ¼',
    1: '-ÑƒÐ¼',
    2: '-ÑŽÐ¼',
    3: '-ÑŽÐ¼',
    4: '-ÑƒÐ¼',
    5: '-ÑƒÐ¼',
    6: '-ÑƒÐ¼',
    7: '-ÑƒÐ¼',
    8: '-ÑƒÐ¼',
    9: '-ÑƒÐ¼',
    10: '-ÑƒÐ¼',
    12: '-ÑƒÐ¼',
    13: '-ÑƒÐ¼',
    20: '-ÑƒÐ¼',
    30: '-ÑŽÐ¼',
    40: '-ÑƒÐ¼',
    50: '-ÑƒÐ¼',
    60: '-ÑƒÐ¼',
    70: '-ÑƒÐ¼',
    80: '-ÑƒÐ¼',
    90: '-ÑƒÐ¼',
    100: '-ÑƒÐ¼',
};

export default moment.defineLocale('tg', {
    months: {
        format: 'ÑÐ½Ð²Ð°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€Ð°Ð»Ð¸_Ð¼Ð°Ñ€Ñ‚Ð¸_Ð°Ð¿Ñ€ÐµÐ»Ð¸_Ð¼Ð°Ð¹Ð¸_Ð¸ÑŽÐ½Ð¸_Ð¸ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚Ð¸_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ð¸_Ð¾ÐºÑ‚ÑÐ±Ñ€Ð¸_Ð½Ð¾ÑÐ±Ñ€Ð¸_Ð´ÐµÐºÐ°Ð±Ñ€Ð¸'.split(
            '_'
        ),
        standalone: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
            '_'
        ),
    },
    monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
    weekdays: 'ÑÐºÑˆÐ°Ð½Ð±Ðµ_Ð´ÑƒÑˆÐ°Ð½Ð±Ðµ_ÑÐµÑˆÐ°Ð½Ð±Ðµ_Ñ‡Ð¾Ñ€ÑˆÐ°Ð½Ð±Ðµ_Ð¿Ð°Ð½Ò·ÑˆÐ°Ð½Ð±Ðµ_Ò·ÑƒÐ¼ÑŠÐ°_ÑˆÐ°Ð½Ð±Ðµ'.split(
        '_'
    ),
    weekdaysShort: 'ÑÑˆÐ±_Ð´ÑˆÐ±_ÑÑˆÐ±_Ñ‡ÑˆÐ±_Ð¿ÑˆÐ±_Ò·ÑƒÐ¼_ÑˆÐ½Ð±'.split('_'),
    weekdaysMin: 'ÑÑˆ_Ð´Ñˆ_ÑÑˆ_Ñ‡Ñˆ_Ð¿Ñˆ_Ò·Ð¼_ÑˆÐ±'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ð˜Ð¼Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
        nextDay: '[Ð¤Ð°Ñ€Ð´Ð¾ ÑÐ¾Ð°Ñ‚Ð¸] LT',
        lastDay: '[Ð”Ð¸Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
        nextWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð¾ÑÐ½Ð´Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
        lastWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð³ÑƒÐ·Ð°ÑˆÑ‚Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð±Ð°ÑŠÐ´Ð¸ %s',
        past: '%s Ð¿ÐµÑˆ',
        s: 'ÑÐºÑ‡Ð°Ð½Ð´ ÑÐ¾Ð½Ð¸Ñ',
        m: 'ÑÐº Ð´Ð°Ò›Ð¸Ò›Ð°',
        mm: '%d Ð´Ð°Ò›Ð¸Ò›Ð°',
        h: 'ÑÐº ÑÐ¾Ð°Ñ‚',
        hh: '%d ÑÐ¾Ð°Ñ‚',
        d: 'ÑÐº Ñ€Ó¯Ð·',
        dd: '%d Ñ€Ó¯Ð·',
        M: 'ÑÐº Ð¼Ð¾Ò³',
        MM: '%d Ð¼Ð¾Ò³',
        y: 'ÑÐº ÑÐ¾Ð»',
        yy: '%d ÑÐ¾Ð»',
    },
    meridiemParse: /ÑˆÐ°Ð±|ÑÑƒÐ±Ò³|Ñ€Ó¯Ð·|Ð±ÐµÐ³Ð¾Ò³/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'ÑˆÐ°Ð±') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'ÑÑƒÐ±Ò³') {
            return hour;
        } else if (meridiem === 'Ñ€Ó¯Ð·') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'Ð±ÐµÐ³Ð¾Ò³') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'ÑˆÐ°Ð±';
        } else if (hour < 11) {
            return 'ÑÑƒÐ±Ò³';
        } else if (hour < 16) {
            return 'Ñ€Ó¯Ð·';
        } else if (hour < 19) {
            return 'Ð±ÐµÐ³Ð¾Ò³';
        } else {
            return 'ÑˆÐ°Ð±';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ÑƒÐ¼|ÑŽÐ¼)/,
    ordinal: function (number) {
        var a = number % 10,
            b = number >= 100 ? 100 : null;
        return number + (suffixes[number] || suffixes[a] || suffixes[b]);
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 1th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Thai [th]
//! author : Kridsada Thanabulpong : https://github.com/sirn

import moment from '../moment';

export default moment.defineLocale('th', {
    months: 'à¸¡à¸à¸£à¸²à¸„à¸¡_à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ_à¸¡à¸µà¸™à¸²à¸„à¸¡_à¹€à¸¡à¸©à¸²à¸¢à¸™_à¸žà¸¤à¸©à¸ à¸²à¸„à¸¡_à¸¡à¸´à¸–à¸¸à¸™à¸²à¸¢à¸™_à¸à¸£à¸à¸Žà¸²à¸„à¸¡_à¸ªà¸´à¸‡à¸«à¸²à¸„à¸¡_à¸à¸±à¸™à¸¢à¸²à¸¢à¸™_à¸•à¸¸à¸¥à¸²à¸„à¸¡_à¸žà¸¤à¸¨à¸ˆà¸´à¸à¸²à¸¢à¸™_à¸˜à¸±à¸™à¸§à¸²à¸„à¸¡'.split(
        '_'
    ),
    monthsShort: 'à¸¡.à¸„._à¸.à¸ž._à¸¡à¸µ.à¸„._à¹€à¸¡.à¸¢._à¸ž.à¸„._à¸¡à¸´.à¸¢._à¸.à¸„._à¸ª.à¸„._à¸.à¸¢._à¸•.à¸„._à¸ž.à¸¢._à¸˜.à¸„.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ªà¸šà¸”à¸µ_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'),
    weekdaysShort: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ª_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'), // yes, three characters difference
    weekdaysMin: 'à¸­à¸²._à¸ˆ._à¸­._à¸ž._à¸žà¸¤._à¸¨._à¸ª.'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
        LLLL: 'à¸§à¸±à¸™ddddà¸—à¸µà¹ˆ D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
    },
    meridiemParse: /à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡|à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡/,
    isPM: function (input) {
        return input === 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
        } else {
            return 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
        }
    },
    calendar: {
        sameDay: '[à¸§à¸±à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
        nextDay: '[à¸žà¸£à¸¸à¹ˆà¸‡à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
        nextWeek: 'dddd[à¸«à¸™à¹‰à¸² à¹€à¸§à¸¥à¸²] LT',
        lastDay: '[à¹€à¸¡à¸·à¹ˆà¸­à¸§à¸²à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
        lastWeek: '[à¸§à¸±à¸™]dddd[à¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§ à¹€à¸§à¸¥à¸²] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'à¸­à¸µà¸ %s',
        past: '%sà¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§',
        s: 'à¹„à¸¡à¹ˆà¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—à¸µ',
        ss: '%d à¸§à¸´à¸™à¸²à¸—à¸µ',
        m: '1 à¸™à¸²à¸—à¸µ',
        mm: '%d à¸™à¸²à¸—à¸µ',
        h: '1 à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
        hh: '%d à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
        d: '1 à¸§à¸±à¸™',
        dd: '%d à¸§à¸±à¸™',
        w: '1 à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
        ww: '%d à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
        M: '1 à¹€à¸”à¸·à¸­à¸™',
        MM: '%d à¹€à¸”à¸·à¸­à¸™',
        y: '1 à¸›à¸µ',
        yy: '%d à¸›à¸µ',
    },
});
//! moment.js locale configuration
//! locale : Turkmen [tk]
//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy

import moment from '../moment';

var suffixes = {
    1: "'inji",
    5: "'inji",
    8: "'inji",
    70: "'inji",
    80: "'inji",
    2: "'nji",
    7: "'nji",
    20: "'nji",
    50: "'nji",
    3: "'Ã¼nji",
    4: "'Ã¼nji",
    100: "'Ã¼nji",
    6: "'njy",
    9: "'unjy",
    10: "'unjy",
    30: "'unjy",
    60: "'ynjy",
    90: "'ynjy",
};

export default moment.defineLocale('tk', {
    months: 'Ãanwar_Fewral_Mart_Aprel_MaÃ½_IÃ½un_IÃ½ul_Awgust_SentÃ½abr_OktÃ½abr_NoÃ½abr_Dekabr'.split(
        '_'
    ),
    monthsShort: 'Ãan_Few_Mar_Apr_MaÃ½_IÃ½n_IÃ½l_Awg_Sen_Okt_NoÃ½_Dek'.split('_'),
    weekdays: 'ÃekÅŸenbe_DuÅŸenbe_SiÅŸenbe_Ã‡arÅŸenbe_PenÅŸenbe_Anna_Åženbe'.split(
        '_'
    ),
    weekdaysShort: 'Ãek_DuÅŸ_SiÅŸ_Ã‡ar_Pen_Ann_Åžen'.split('_'),
    weekdaysMin: 'Ãk_DÅŸ_SÅŸ_Ã‡r_Pn_An_Åžn'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[bugÃ¼n sagat] LT',
        nextDay: '[ertir sagat] LT',
        nextWeek: '[indiki] dddd [sagat] LT',
        lastDay: '[dÃ¼Ã½n] LT',
        lastWeek: '[geÃ§en] dddd [sagat] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s soÅˆ',
        past: '%s Ã¶Åˆ',
        s: 'birnÃ¤Ã§e sekunt',
        m: 'bir minut',
        mm: '%d minut',
        h: 'bir sagat',
        hh: '%d sagat',
        d: 'bir gÃ¼n',
        dd: '%d gÃ¼n',
        M: 'bir aÃ½',
        MM: '%d aÃ½',
        y: 'bir Ã½yl',
        yy: '%d Ã½yl',
    },
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'Do':
            case 'DD':
                return number;
            default:
                if (number === 0) {
                    // special case for zero
                    return number + "'unjy";
                }
                var a = number % 10,
                    b = (number % 100) - a,
                    c = number >= 100 ? 100 : null;
                return number + (suffixes[a] || suffixes[b] || suffixes[c]);
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tagalog (Philippines) [tl-ph]
//! author : Dan Hagman : https://github.com/hagmandan

import moment from '../moment';

export default moment.defineLocale('tl-ph', {
    months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
        '_'
    ),
    monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
    weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
        '_'
    ),
    weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
    weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'MM/D/YYYY',
        LL: 'MMMM D, YYYY',
        LLL: 'MMMM D, YYYY HH:mm',
        LLLL: 'dddd, MMMM DD, YYYY HH:mm',
    },
    calendar: {
        sameDay: 'LT [ngayong araw]',
        nextDay: '[Bukas ng] LT',
        nextWeek: 'LT [sa susunod na] dddd',
        lastDay: 'LT [kahapon]',
        lastWeek: 'LT [noong nakaraang] dddd',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'sa loob ng %s',
        past: '%s ang nakalipas',
        s: 'ilang segundo',
        ss: '%d segundo',
        m: 'isang minuto',
        mm: '%d minuto',
        h: 'isang oras',
        hh: '%d oras',
        d: 'isang araw',
        dd: '%d araw',
        M: 'isang buwan',
        MM: '%d buwan',
        y: 'isang taon',
        yy: '%d taon',
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: function (number) {
        return number;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Klingon [tlh]
//! author : Dominika Kruk : https://github.com/amaranthrose

import moment from '../moment';

var numbersNouns = 'pagh_waâ€™_chaâ€™_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');

function translateFuture(output) {
    var time = output;
    time =
        output.indexOf('jaj') !== -1
            ? time.slice(0, -3) + 'leS'
            : output.indexOf('jar') !== -1
            ? time.slice(0, -3) + 'waQ'
            : output.indexOf('DIS') !== -1
            ? time.slice(0, -3) + 'nem'
            : time + ' pIq';
    return time;
}

function translatePast(output) {
    var time = output;
    time =
        output.indexOf('jaj') !== -1
            ? time.slice(0, -3) + 'Huâ€™'
            : output.indexOf('jar') !== -1
            ? time.slice(0, -3) + 'wen'
            : output.indexOf('DIS') !== -1
            ? time.slice(0, -3) + 'ben'
            : time + ' ret';
    return time;
}

function translate(number, withoutSuffix, string, isFuture) {
    var numberNoun = numberAsNoun(number);
    switch (string) {
        case 'ss':
            return numberNoun + ' lup';
        case 'mm':
            return numberNoun + ' tup';
        case 'hh':
            return numberNoun + ' rep';
        case 'dd':
            return numberNoun + ' jaj';
        case 'MM':
            return numberNoun + ' jar';
        case 'yy':
            return numberNoun + ' DIS';
    }
}

function numberAsNoun(number) {
    var hundred = Math.floor((number % 1000) / 100),
        ten = Math.floor((number % 100) / 10),
        one = number % 10,
        word = '';
    if (hundred > 0) {
        word += numbersNouns[hundred] + 'vatlh';
    }
    if (ten > 0) {
        word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
    }
    if (one > 0) {
        word += (word !== '' ? ' ' : '') + numbersNouns[one];
    }
    return word === '' ? 'pagh' : word;
}

export default moment.defineLocale('tlh', {
    months: 'teraâ€™ jar waâ€™_teraâ€™ jar chaâ€™_teraâ€™ jar wej_teraâ€™ jar loS_teraâ€™ jar vagh_teraâ€™ jar jav_teraâ€™ jar Soch_teraâ€™ jar chorgh_teraâ€™ jar Hut_teraâ€™ jar waâ€™maH_teraâ€™ jar waâ€™maH waâ€™_teraâ€™ jar waâ€™maH chaâ€™'.split(
        '_'
    ),
    monthsShort: 'jar waâ€™_jar chaâ€™_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar waâ€™maH_jar waâ€™maH waâ€™_jar waâ€™maH chaâ€™'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
        '_'
    ),
    weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
        '_'
    ),
    weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
        '_'
    ),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[DaHjaj] LT',
        nextDay: '[waâ€™leS] LT',
        nextWeek: 'LLL',
        lastDay: '[waâ€™Huâ€™] LT',
        lastWeek: 'LLL',
        sameElse: 'L',
    },
    relativeTime: {
        future: translateFuture,
        past: translatePast,
        s: 'puS lup',
        ss: translate,
        m: 'waâ€™ tup',
        mm: translate,
        h: 'waâ€™ rep',
        hh: translate,
        d: 'waâ€™ jaj',
        dd: translate,
        M: 'waâ€™ jar',
        MM: translate,
        y: 'waâ€™ DIS',
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Turkish [tr]
//! authors : Erhan Gundogan : https://github.com/erhangundogan,
//!           Burak YiÄŸit Kaya: https://github.com/BYK

import moment from '../moment';

var suffixes = {
    1: "'inci",
    5: "'inci",
    8: "'inci",
    70: "'inci",
    80: "'inci",
    2: "'nci",
    7: "'nci",
    20: "'nci",
    50: "'nci",
    3: "'Ã¼ncÃ¼",
    4: "'Ã¼ncÃ¼",
    100: "'Ã¼ncÃ¼",
    6: "'ncÄ±",
    9: "'uncu",
    10: "'uncu",
    30: "'uncu",
    60: "'Ä±ncÄ±",
    90: "'Ä±ncÄ±",
};

export default moment.defineLocale('tr', {
    months: 'Ocak_Åžubat_Mart_Nisan_MayÄ±s_Haziran_Temmuz_AÄŸustos_EylÃ¼l_Ekim_KasÄ±m_AralÄ±k'.split(
        '_'
    ),
    monthsShort: 'Oca_Åžub_Mar_Nis_May_Haz_Tem_AÄŸu_Eyl_Eki_Kas_Ara'.split('_'),
    weekdays: 'Pazar_Pazartesi_SalÄ±_Ã‡arÅŸamba_PerÅŸembe_Cuma_Cumartesi'.split(
        '_'
    ),
    weekdaysShort: 'Paz_Pts_Sal_Ã‡ar_Per_Cum_Cts'.split('_'),
    weekdaysMin: 'Pz_Pt_Sa_Ã‡a_Pe_Cu_Ct'.split('_'),
    meridiem: function (hours, minutes, isLower) {
        if (hours < 12) {
            return isLower ? 'Ã¶Ã¶' : 'Ã–Ã–';
        } else {
            return isLower ? 'Ã¶s' : 'Ã–S';
        }
    },
    meridiemParse: /Ã¶Ã¶|Ã–Ã–|Ã¶s|Ã–S/,
    isPM: function (input) {
        return input === 'Ã¶s' || input === 'Ã–S';
    },
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[bugÃ¼n saat] LT',
        nextDay: '[yarÄ±n saat] LT',
        nextWeek: '[gelecek] dddd [saat] LT',
        lastDay: '[dÃ¼n] LT',
        lastWeek: '[geÃ§en] dddd [saat] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s sonra',
        past: '%s Ã¶nce',
        s: 'birkaÃ§ saniye',
        ss: '%d saniye',
        m: 'bir dakika',
        mm: '%d dakika',
        h: 'bir saat',
        hh: '%d saat',
        d: 'bir gÃ¼n',
        dd: '%d gÃ¼n',
        w: 'bir hafta',
        ww: '%d hafta',
        M: 'bir ay',
        MM: '%d ay',
        y: 'bir yÄ±l',
        yy: '%d yÄ±l',
    },
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'Do':
            case 'DD':
                return number;
            default:
                if (number === 0) {
                    // special case for zero
                    return number + "'Ä±ncÄ±";
                }
                var a = number % 10,
                    b = (number % 100) - a,
                    c = number >= 100 ? 100 : null;
                return number + (suffixes[a] || suffixes[b] || suffixes[c]);
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Talossan [tzl]
//! author : Robin van der Vliet : https://github.com/robin0van0der0v
//! author : IustÃ¬ Canun

import moment from '../moment';

// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
// This is currently too difficult (maybe even impossible) to add.
export default moment.defineLocale('tzl', {
    months: 'Januar_Fevraglh_MarÃ§_AvrÃ¯u_Mai_GÃ¼n_Julia_Guscht_Setemvar_ListopÃ¤ts_Noemvar_Zecemvar'.split(
        '_'
    ),
    monthsShort: 'Jan_Fev_Mar_Avr_Mai_GÃ¼n_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
    weekdays: 'SÃºladi_LÃºneÃ§i_Maitzi_MÃ¡rcuri_XhÃºadi_ViÃ©nerÃ§i_SÃ¡turi'.split('_'),
    weekdaysShort: 'SÃºl_LÃºn_Mai_MÃ¡r_XhÃº_ViÃ©_SÃ¡t'.split('_'),
    weekdaysMin: 'SÃº_LÃº_Ma_MÃ¡_Xh_Vi_SÃ¡'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM [dallas] YYYY',
        LLL: 'D. MMMM [dallas] YYYY HH.mm',
        LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
    },
    meridiemParse: /d\'o|d\'a/i,
    isPM: function (input) {
        return "d'o" === input.toLowerCase();
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? "d'o" : "D'O";
        } else {
            return isLower ? "d'a" : "D'A";
        }
    },
    calendar: {
        sameDay: '[oxhi Ã ] LT',
        nextDay: '[demÃ  Ã ] LT',
        nextWeek: 'dddd [Ã ] LT',
        lastDay: '[ieiri Ã ] LT',
        lastWeek: '[sÃ¼r el] dddd [lasteu Ã ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'osprei %s',
        past: 'ja%s',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: processRelativeTime,
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        s: ['viensas secunds', "'iensas secunds"],
        ss: [number + ' secunds', '' + number + ' secunds'],
        m: ["'n mÃ­ut", "'iens mÃ­ut"],
        mm: [number + ' mÃ­uts', '' + number + ' mÃ­uts'],
        h: ["'n Ã¾ora", "'iensa Ã¾ora"],
        hh: [number + ' Ã¾oras', '' + number + ' Ã¾oras'],
        d: ["'n ziua", "'iensa ziua"],
        dd: [number + ' ziuas', '' + number + ' ziuas'],
        M: ["'n mes", "'iens mes"],
        MM: [number + ' mesen', '' + number + ' mesen'],
        y: ["'n ar", "'iens ar"],
        yy: [number + ' ars', '' + number + ' ars'],
    };
    return isFuture
        ? format[key][0]
        : withoutSuffix
        ? format[key][0]
        : format[key][1];
}
//! moment.js locale configuration
//! locale : Central Atlas Tamazight Latin [tzm-latn]
//! author : Abdel Said : https://github.com/abdelsaid

import moment from '../moment';

export default moment.defineLocale('tzm-latn', {
    months: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
        '_'
    ),
    monthsShort: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
        '_'
    ),
    weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
    weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
    weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[asdkh g] LT',
        nextDay: '[aska g] LT',
        nextWeek: 'dddd [g] LT',
        lastDay: '[assant g] LT',
        lastWeek: 'dddd [g] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dadkh s yan %s',
        past: 'yan %s',
        s: 'imik',
        ss: '%d imik',
        m: 'minuá¸',
        mm: '%d minuá¸',
        h: 'saÉ›a',
        hh: '%d tassaÉ›in',
        d: 'ass',
        dd: '%d ossan',
        M: 'ayowr',
        MM: '%d iyyirn',
        y: 'asgas',
        yy: '%d isgasn',
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Central Atlas Tamazight [tzm]
//! author : Abdel Said : https://github.com/abdelsaid

import moment from '../moment';

export default moment.defineLocale('tzm', {
    months: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
        '_'
    ),
    monthsShort: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
        '_'
    ),
    weekdays: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
    weekdaysShort: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
    weekdaysMin: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[â´°âµ™â´·âµ… â´´] LT',
        nextDay: '[â´°âµ™â´½â´° â´´] LT',
        nextWeek: 'dddd [â´´] LT',
        lastDay: '[â´°âµšâ´°âµâµœ â´´] LT',
        lastWeek: 'dddd [â´´] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'â´·â´°â´·âµ… âµ™ âµ¢â´°âµ %s',
        past: 'âµ¢â´°âµ %s',
        s: 'âµ‰âµŽâµ‰â´½',
        ss: '%d âµ‰âµŽâµ‰â´½',
        m: 'âµŽâµ‰âµâµ“â´º',
        mm: '%d âµŽâµ‰âµâµ“â´º',
        h: 'âµ™â´°âµ„â´°',
        hh: '%d âµœâ´°âµ™âµ™â´°âµ„âµ‰âµ',
        d: 'â´°âµ™âµ™',
        dd: '%d oâµ™âµ™â´°âµ',
        M: 'â´°âµ¢oâµ“âµ”',
        MM: '%d âµ‰âµ¢âµ¢âµ‰âµ”âµ',
        y: 'â´°âµ™â´³â´°âµ™',
        yy: '%d âµ‰âµ™â´³â´°âµ™âµ',
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Uyghur (China) [ug-cn]
//! author: boyaq : https://github.com/boyaq

import moment from '../moment';

export default moment.defineLocale('ug-cn', {
    months: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
        '_'
    ),
    monthsShort: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
        '_'
    ),
    weekdays: 'ÙŠÛ•ÙƒØ´Û•Ù†Ø¨Û•_Ø¯ÛˆØ´Û•Ù†Ø¨Û•_Ø³Û•ÙŠØ´Û•Ù†Ø¨Û•_Ú†Ø§Ø±Ø´Û•Ù†Ø¨Û•_Ù¾Û•ÙŠØ´Û•Ù†Ø¨Û•_Ø¬ÛˆÙ…Û•_Ø´Û•Ù†Ø¨Û•'.split(
        '_'
    ),
    weekdaysShort: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
    weekdaysMin: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰',
        LLL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
        LLLL: 'ddddØŒ YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
    },
    meridiemParse: /ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•|Ø³Û•Ú¾Û•Ø±|Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†|Ú†ÛˆØ´|Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†|ÙƒÛ•Ú†/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (
            meridiem === 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•' ||
            meridiem === 'Ø³Û•Ú¾Û•Ø±' ||
            meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†'
        ) {
            return hour;
        } else if (meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†' || meridiem === 'ÙƒÛ•Ú†') {
            return hour + 12;
        } else {
            return hour >= 11 ? hour : hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•';
        } else if (hm < 900) {
            return 'Ø³Û•Ú¾Û•Ø±';
        } else if (hm < 1130) {
            return 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†';
        } else if (hm < 1230) {
            return 'Ú†ÛˆØ´';
        } else if (hm < 1800) {
            return 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†';
        } else {
            return 'ÙƒÛ•Ú†';
        }
    },
    calendar: {
        sameDay: '[Ø¨ÛˆÚ¯ÛˆÙ† Ø³Ø§Ø¦Û•Øª] LT',
        nextDay: '[Ø¦Û•ØªÛ• Ø³Ø§Ø¦Û•Øª] LT',
        nextWeek: '[ÙƒÛÙ„Û•Ø±ÙƒÙ‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
        lastDay: '[ØªÛ†Ù†ÛˆÚ¯ÛˆÙ†] LT',
        lastWeek: '[Ø¦Ø§Ù„Ø¯Ù‰Ù†Ù‚Ù‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s ÙƒÛÙŠÙ‰Ù†',
        past: '%s Ø¨Û‡Ø±Û‡Ù†',
        s: 'Ù†Û•Ú†Ú†Û• Ø³ÛÙƒÙˆÙ†Øª',
        ss: '%d Ø³ÛÙƒÙˆÙ†Øª',
        m: 'Ø¨Ù‰Ø± Ù…Ù‰Ù†Û‡Øª',
        mm: '%d Ù…Ù‰Ù†Û‡Øª',
        h: 'Ø¨Ù‰Ø± Ø³Ø§Ø¦Û•Øª',
        hh: '%d Ø³Ø§Ø¦Û•Øª',
        d: 'Ø¨Ù‰Ø± ÙƒÛˆÙ†',
        dd: '%d ÙƒÛˆÙ†',
        M: 'Ø¨Ù‰Ø± Ø¦Ø§ÙŠ',
        MM: '%d Ø¦Ø§ÙŠ',
        y: 'Ø¨Ù‰Ø± ÙŠÙ‰Ù„',
        yy: '%d ÙŠÙ‰Ù„',
    },

    dayOfMonthOrdinalParse: /\d{1,2}(-ÙƒÛˆÙ†Ù‰|-Ø¦Ø§ÙŠ|-Ú¾Û•Ù¾ØªÛ•)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + '-ÙƒÛˆÙ†Ù‰';
            case 'w':
            case 'W':
                return number + '-Ú¾Û•Ù¾ØªÛ•';
            default:
                return number;
        }
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 1st is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Ukrainian [uk]
//! author : zemlanin : https://github.com/zemlanin
//! Author : Menelion ElensÃºle : https://github.com/Oire

import moment from '../moment';

function plural(word, num) {
    var forms = word.split('_');
    return num % 10 === 1 && num % 100 !== 11
        ? forms[0]
        : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
        ? forms[1]
        : forms[2];
}
function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
        ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´',
        mm: withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½',
        hh: withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½',
        dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð½Ñ–Ð²',
        MM: 'Ð¼Ñ–ÑÑÑ†ÑŒ_Ð¼Ñ–ÑÑÑ†Ñ–_Ð¼Ñ–ÑÑÑ†Ñ–Ð²',
        yy: 'Ñ€Ñ–Ðº_Ñ€Ð¾ÐºÐ¸_Ñ€Ð¾ÐºÑ–Ð²',
    };
    if (key === 'm') {
        return withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ';
    } else if (key === 'h') {
        return withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ';
    } else {
        return number + ' ' + plural(format[key], +number);
    }
}
function weekdaysCaseReplace(m, format) {
    var weekdays = {
            nominative: 'Ð½ÐµÐ´Ñ–Ð»Ñ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
                '_'
            ),
            accusative: 'Ð½ÐµÐ´Ñ–Ð»ÑŽ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†ÑŽ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
                '_'
            ),
            genitive: 'Ð½ÐµÐ´Ñ–Ð»Ñ–_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»ÐºÐ°_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€ÐºÐ°_ÑÐµÑ€ÐµÐ´Ð¸_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³Ð°_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ–_ÑÑƒÐ±Ð¾Ñ‚Ð¸'.split(
                '_'
            ),
        },
        nounCase;

    if (m === true) {
        return weekdays['nominative']
            .slice(1, 7)
            .concat(weekdays['nominative'].slice(0, 1));
    }
    if (!m) {
        return weekdays['nominative'];
    }

    nounCase = /(\[[Ð’Ð²Ð£Ñƒ]\]) ?dddd/.test(format)
        ? 'accusative'
        : /\[?(?:Ð¼Ð¸Ð½ÑƒÐ»Ð¾Ñ—|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½Ð¾Ñ—)? ?\] ?dddd/.test(format)
        ? 'genitive'
        : 'nominative';
    return weekdays[nounCase][m.day()];
}
function processHoursFunction(str) {
    return function () {
        return str + 'Ð¾' + (this.hours() === 11 ? 'Ð±' : '') + '] LT';
    };
}

export default moment.defineLocale('uk', {
    months: {
        format: 'ÑÑ–Ñ‡Ð½Ñ_Ð»ÑŽÑ‚Ð¾Ð³Ð¾_Ð±ÐµÑ€ÐµÐ·Ð½Ñ_ÐºÐ²Ñ–Ñ‚Ð½Ñ_Ñ‚Ñ€Ð°Ð²Ð½Ñ_Ñ‡ÐµÑ€Ð²Ð½Ñ_Ð»Ð¸Ð¿Ð½Ñ_ÑÐµÑ€Ð¿Ð½Ñ_Ð²ÐµÑ€ÐµÑÐ½Ñ_Ð¶Ð¾Ð²Ñ‚Ð½Ñ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´Ð°_Ð³Ñ€ÑƒÐ´Ð½Ñ'.split(
            '_'
        ),
        standalone: 'ÑÑ–Ñ‡ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ð¸Ð¹_Ð±ÐµÑ€ÐµÐ·ÐµÐ½ÑŒ_ÐºÐ²Ñ–Ñ‚ÐµÐ½ÑŒ_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÐµÑ€Ð²ÐµÐ½ÑŒ_Ð»Ð¸Ð¿ÐµÐ½ÑŒ_ÑÐµÑ€Ð¿ÐµÐ½ÑŒ_Ð²ÐµÑ€ÐµÑÐµÐ½ÑŒ_Ð¶Ð¾Ð²Ñ‚ÐµÐ½ÑŒ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´_Ð³Ñ€ÑƒÐ´ÐµÐ½ÑŒ'.split(
            '_'
        ),
    },
    monthsShort: 'ÑÑ–Ñ‡_Ð»ÑŽÑ‚_Ð±ÐµÑ€_ÐºÐ²Ñ–Ñ‚_Ñ‚Ñ€Ð°Ð²_Ñ‡ÐµÑ€Ð²_Ð»Ð¸Ð¿_ÑÐµÑ€Ð¿_Ð²ÐµÑ€_Ð¶Ð¾Ð²Ñ‚_Ð»Ð¸ÑÑ‚_Ð³Ñ€ÑƒÐ´'.split(
        '_'
    ),
    weekdays: weekdaysCaseReplace,
    weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY Ñ€.',
        LLL: 'D MMMM YYYY Ñ€., HH:mm',
        LLLL: 'dddd, D MMMM YYYY Ñ€., HH:mm',
    },
    calendar: {
        sameDay: processHoursFunction('[Ð¡ÑŒÐ¾Ð³Ð¾Ð´Ð½Ñ– '),
        nextDay: processHoursFunction('[Ð—Ð°Ð²Ñ‚Ñ€Ð° '),
        lastDay: processHoursFunction('[Ð’Ñ‡Ð¾Ñ€Ð° '),
        nextWeek: processHoursFunction('[Ð£] dddd ['),
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                case 5:
                case 6:
                    return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ñ—] dddd [').call(this);
                case 1:
                case 2:
                case 4:
                    return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ð³Ð¾] dddd [').call(this);
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð·Ð° %s',
        past: '%s Ñ‚Ð¾Ð¼Ñƒ',
        s: 'Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° ÑÐµÐºÑƒÐ½Ð´',
        ss: relativeTimeWithPlural,
        m: relativeTimeWithPlural,
        mm: relativeTimeWithPlural,
        h: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
        hh: relativeTimeWithPlural,
        d: 'Ð´ÐµÐ½ÑŒ',
        dd: relativeTimeWithPlural,
        M: 'Ð¼Ñ–ÑÑÑ†ÑŒ',
        MM: relativeTimeWithPlural,
        y: 'Ñ€Ñ–Ðº',
        yy: relativeTimeWithPlural,
    },
    // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
    meridiemParse: /Ð½Ð¾Ñ‡Ñ–|Ñ€Ð°Ð½ÐºÑƒ|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°/,
    isPM: function (input) {
        return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'Ð½Ð¾Ñ‡Ñ–';
        } else if (hour < 12) {
            return 'Ñ€Ð°Ð½ÐºÑƒ';
        } else if (hour < 17) {
            return 'Ð´Ð½Ñ';
        } else {
            return 'Ð²ÐµÑ‡Ð¾Ñ€Ð°';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'M':
            case 'd':
            case 'DDD':
            case 'w':
            case 'W':
                return number + '-Ð¹';
            case 'D':
                return number + '-Ð³Ð¾';
            default:
                return number;
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Urdu [ur]
//! author : Sawood Alam : https://github.com/ibnesayeed
//! author : Zack : https://github.com/ZackVision

import moment from '../moment';

var months = [
        'Ø¬Ù†ÙˆØ±ÛŒ',
        'ÙØ±ÙˆØ±ÛŒ',
        'Ù…Ø§Ø±Ú†',
        'Ø§Ù¾Ø±ÛŒÙ„',
        'Ù…Ø¦ÛŒ',
        'Ø¬ÙˆÙ†',
        'Ø¬ÙˆÙ„Ø§Ø¦ÛŒ',
        'Ø§Ú¯Ø³Øª',
        'Ø³ØªÙ…Ø¨Ø±',
        'Ø§Ú©ØªÙˆØ¨Ø±',
        'Ù†ÙˆÙ…Ø¨Ø±',
        'Ø¯Ø³Ù…Ø¨Ø±',
    ],
    days = ['Ø§ØªÙˆØ§Ø±', 'Ù¾ÛŒØ±', 'Ù…Ù†Ú¯Ù„', 'Ø¨Ø¯Ú¾', 'Ø¬Ù…Ø¹Ø±Ø§Øª', 'Ø¬Ù…Ø¹Û', 'ÛÙØªÛ'];

export default moment.defineLocale('ur', {
    months: months,
    monthsShort: months,
    weekdays: days,
    weekdaysShort: days,
    weekdaysMin: days,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
    },
    meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
    isPM: function (input) {
        return 'Ø´Ø§Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'ØµØ¨Ø­';
        }
        return 'Ø´Ø§Ù…';
    },
    calendar: {
        sameDay: '[Ø¢Ø¬ Ø¨ÙˆÙ‚Øª] LT',
        nextDay: '[Ú©Ù„ Ø¨ÙˆÙ‚Øª] LT',
        nextWeek: 'dddd [Ø¨ÙˆÙ‚Øª] LT',
        lastDay: '[Ú¯Ø°Ø´ØªÛ Ø±ÙˆØ² Ø¨ÙˆÙ‚Øª] LT',
        lastWeek: '[Ú¯Ø°Ø´ØªÛ] dddd [Ø¨ÙˆÙ‚Øª] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ø¨Ø¹Ø¯',
        past: '%s Ù‚Ø¨Ù„',
        s: 'Ú†Ù†Ø¯ Ø³ÛŒÚ©Ù†Úˆ',
        ss: '%d Ø³ÛŒÚ©Ù†Úˆ',
        m: 'Ø§ÛŒÚ© Ù…Ù†Ù¹',
        mm: '%d Ù…Ù†Ù¹',
        h: 'Ø§ÛŒÚ© Ú¯Ú¾Ù†Ù¹Û',
        hh: '%d Ú¯Ú¾Ù†Ù¹Û’',
        d: 'Ø§ÛŒÚ© Ø¯Ù†',
        dd: '%d Ø¯Ù†',
        M: 'Ø§ÛŒÚ© Ù…Ø§Û',
        MM: '%d Ù…Ø§Û',
        y: 'Ø§ÛŒÚ© Ø³Ø§Ù„',
        yy: '%d Ø³Ø§Ù„',
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Uzbek Latin [uz-latn]
//! author : Rasulbek Mirzayev : github.com/Rasulbeeek

import moment from '../moment';

export default moment.defineLocale('uz-latn', {
    months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
        '_'
    ),
    monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
    weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
        '_'
    ),
    weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
    weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'D MMMM YYYY, dddd HH:mm',
    },
    calendar: {
        sameDay: '[Bugun soat] LT [da]',
        nextDay: '[Ertaga] LT [da]',
        nextWeek: 'dddd [kuni soat] LT [da]',
        lastDay: '[Kecha soat] LT [da]',
        lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Yaqin %s ichida',
        past: 'Bir necha %s oldin',
        s: 'soniya',
        ss: '%d soniya',
        m: 'bir daqiqa',
        mm: '%d daqiqa',
        h: 'bir soat',
        hh: '%d soat',
        d: 'bir kun',
        dd: '%d kun',
        M: 'bir oy',
        MM: '%d oy',
        y: 'bir yil',
        yy: '%d yil',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Uzbek [uz]
//! author : Sardor Muminov : https://github.com/muminoff

import moment from '../moment';

export default moment.defineLocale('uz', {
    months: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
        '_'
    ),
    monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
    weekdays: 'Ð¯ÐºÑˆÐ°Ð½Ð±Ð°_Ð”ÑƒÑˆÐ°Ð½Ð±Ð°_Ð¡ÐµÑˆÐ°Ð½Ð±Ð°_Ð§Ð¾Ñ€ÑˆÐ°Ð½Ð±Ð°_ÐŸÐ°Ð¹ÑˆÐ°Ð½Ð±Ð°_Ð–ÑƒÐ¼Ð°_Ð¨Ð°Ð½Ð±Ð°'.split('_'),
    weekdaysShort: 'Ð¯ÐºÑˆ_Ð”ÑƒÑˆ_Ð¡ÐµÑˆ_Ð§Ð¾Ñ€_ÐŸÐ°Ð¹_Ð–ÑƒÐ¼_Ð¨Ð°Ð½'.split('_'),
    weekdaysMin: 'Ð¯Ðº_Ð”Ñƒ_Ð¡Ðµ_Ð§Ð¾_ÐŸÐ°_Ð–Ñƒ_Ð¨Ð°'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'D MMMM YYYY, dddd HH:mm',
    },
    calendar: {
        sameDay: '[Ð‘ÑƒÐ³ÑƒÐ½ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
        nextDay: '[Ð­Ñ€Ñ‚Ð°Ð³Ð°] LT [Ð´Ð°]',
        nextWeek: 'dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
        lastDay: '[ÐšÐµÑ‡Ð° ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
        lastWeek: '[Ð£Ñ‚Ð³Ð°Ð½] dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð¯ÐºÐ¸Ð½ %s Ð¸Ñ‡Ð¸Ð´Ð°',
        past: 'Ð‘Ð¸Ñ€ Ð½ÐµÑ‡Ð° %s Ð¾Ð»Ð´Ð¸Ð½',
        s: 'Ñ„ÑƒÑ€ÑÐ°Ñ‚',
        ss: '%d Ñ„ÑƒÑ€ÑÐ°Ñ‚',
        m: 'Ð±Ð¸Ñ€ Ð´Ð°ÐºÐ¸ÐºÐ°',
        mm: '%d Ð´Ð°ÐºÐ¸ÐºÐ°',
        h: 'Ð±Ð¸Ñ€ ÑÐ¾Ð°Ñ‚',
        hh: '%d ÑÐ¾Ð°Ñ‚',
        d: 'Ð±Ð¸Ñ€ ÐºÑƒÐ½',
        dd: '%d ÐºÑƒÐ½',
        M: 'Ð±Ð¸Ñ€ Ð¾Ð¹',
        MM: '%d Ð¾Ð¹',
        y: 'Ð±Ð¸Ñ€ Ð¹Ð¸Ð»',
        yy: '%d Ð¹Ð¸Ð»',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Vietnamese [vi]
//! author : Bang Nguyen : https://github.com/bangnk
//! author : Chien Kira : https://github.com/chienkira

import moment from '../moment';

export default moment.defineLocale('vi', {
    months: 'thÃ¡ng 1_thÃ¡ng 2_thÃ¡ng 3_thÃ¡ng 4_thÃ¡ng 5_thÃ¡ng 6_thÃ¡ng 7_thÃ¡ng 8_thÃ¡ng 9_thÃ¡ng 10_thÃ¡ng 11_thÃ¡ng 12'.split(
        '_'
    ),
    monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'chá»§ nháº­t_thá»© hai_thá»© ba_thá»© tÆ°_thá»© nÄƒm_thá»© sÃ¡u_thá»© báº£y'.split(
        '_'
    ),
    weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
    weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
    weekdaysParseExact: true,
    meridiemParse: /sa|ch/i,
    isPM: function (input) {
        return /^ch$/i.test(input);
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 12) {
            return isLower ? 'sa' : 'SA';
        } else {
            return isLower ? 'ch' : 'CH';
        }
    },
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM [nÄƒm] YYYY',
        LLL: 'D MMMM [nÄƒm] YYYY HH:mm',
        LLLL: 'dddd, D MMMM [nÄƒm] YYYY HH:mm',
        l: 'DD/M/YYYY',
        ll: 'D MMM YYYY',
        lll: 'D MMM YYYY HH:mm',
        llll: 'ddd, D MMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[HÃ´m nay lÃºc] LT',
        nextDay: '[NgÃ y mai lÃºc] LT',
        nextWeek: 'dddd [tuáº§n tá»›i lÃºc] LT',
        lastDay: '[HÃ´m qua lÃºc] LT',
        lastWeek: 'dddd [tuáº§n trÆ°á»›c lÃºc] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s tá»›i',
        past: '%s trÆ°á»›c',
        s: 'vÃ i giÃ¢y',
        ss: '%d giÃ¢y',
        m: 'má»™t phÃºt',
        mm: '%d phÃºt',
        h: 'má»™t giá»',
        hh: '%d giá»',
        d: 'má»™t ngÃ y',
        dd: '%d ngÃ y',
        w: 'má»™t tuáº§n',
        ww: '%d tuáº§n',
        M: 'má»™t thÃ¡ng',
        MM: '%d thÃ¡ng',
        y: 'má»™t nÄƒm',
        yy: '%d nÄƒm',
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: function (number) {
        return number;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Pseudo [x-pseudo]
//! author : Andrew Hood : https://github.com/andrewhood125

import moment from '../moment';

export default moment.defineLocale('x-pseudo', {
    months: 'J~Ã¡Ã±ÃºÃ¡~rÃ½_F~Ã©brÃº~Ã¡rÃ½_~MÃ¡rc~h_Ãp~rÃ­l_~MÃ¡Ã½_~JÃºÃ±Ã©~_JÃºl~Ã½_ÃÃº~gÃºst~_SÃ©p~tÃ©mb~Ã©r_Ã“~ctÃ³b~Ã©r_Ã‘~Ã³vÃ©m~bÃ©r_~DÃ©cÃ©~mbÃ©r'.split(
        '_'
    ),
    monthsShort: 'J~Ã¡Ã±_~FÃ©b_~MÃ¡r_~Ãpr_~MÃ¡Ã½_~JÃºÃ±_~JÃºl_~ÃÃºg_~SÃ©p_~Ã“ct_~Ã‘Ã³v_~DÃ©c'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'S~ÃºÃ±dÃ¡~Ã½_MÃ³~Ã±dÃ¡Ã½~_TÃºÃ©~sdÃ¡Ã½~_WÃ©d~Ã±Ã©sd~Ã¡Ã½_T~hÃºrs~dÃ¡Ã½_~FrÃ­d~Ã¡Ã½_S~Ã¡tÃºr~dÃ¡Ã½'.split(
        '_'
    ),
    weekdaysShort: 'S~ÃºÃ±_~MÃ³Ã±_~TÃºÃ©_~WÃ©d_~ThÃº_~FrÃ­_~SÃ¡t'.split('_'),
    weekdaysMin: 'S~Ãº_MÃ³~_TÃº_~WÃ©_T~h_Fr~_SÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[T~Ã³dÃ¡~Ã½ Ã¡t] LT',
        nextDay: '[T~Ã³mÃ³~rrÃ³~w Ã¡t] LT',
        nextWeek: 'dddd [Ã¡t] LT',
        lastDay: '[Ã~Ã©st~Ã©rdÃ¡~Ã½ Ã¡t] LT',
        lastWeek: '[L~Ã¡st] dddd [Ã¡t] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ã­~Ã± %s',
        past: '%s Ã¡~gÃ³',
        s: 'Ã¡ ~fÃ©w ~sÃ©cÃ³~Ã±ds',
        ss: '%d s~Ã©cÃ³Ã±~ds',
        m: 'Ã¡ ~mÃ­Ã±~ÃºtÃ©',
        mm: '%d m~Ã­Ã±Ãº~tÃ©s',
        h: 'Ã¡~Ã± hÃ³~Ãºr',
        hh: '%d h~Ã³Ãºrs',
        d: 'Ã¡ ~dÃ¡Ã½',
        dd: '%d d~Ã¡Ã½s',
        M: 'Ã¡ ~mÃ³Ã±~th',
        MM: '%d m~Ã³Ã±t~hs',
        y: 'Ã¡ ~Ã½Ã©Ã¡r',
        yy: '%d Ã½~Ã©Ã¡rs',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Yoruba Nigeria [yo]
//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe

import moment from '../moment';

export default moment.defineLocale('yo', {
    months: 'Sáº¹Ìráº¹Ì_EÌ€reÌ€leÌ€_áº¸ráº¹Ì€naÌ€_IÌ€gbeÌ_EÌ€bibi_OÌ€kuÌ€du_Agáº¹mo_OÌ€guÌn_Owewe_á»ŒÌ€waÌ€raÌ€_BeÌluÌ_á»ŒÌ€páº¹Ì€Ì€'.split(
        '_'
    ),
    monthsShort: 'Sáº¹Ìr_EÌ€rl_áº¸rn_IÌ€gb_EÌ€bi_OÌ€kuÌ€_Agáº¹_OÌ€guÌ_Owe_á»ŒÌ€waÌ€_BeÌl_á»ŒÌ€páº¹Ì€Ì€'.split('_'),
    weekdays: 'AÌ€iÌ€kuÌ_AjeÌ_IÌ€sáº¹Ìgun_á»Œjá»ÌruÌ_á»Œjá»Ìbá»_áº¸tiÌ€_AÌ€baÌmáº¹Ìta'.split('_'),
    weekdaysShort: 'AÌ€iÌ€k_AjeÌ_IÌ€sáº¹Ì_á»Œjr_á»Œjb_áº¸tiÌ€_AÌ€baÌ'.split('_'),
    weekdaysMin: 'AÌ€iÌ€_Aj_IÌ€s_á»Œr_á»Œb_áº¸t_AÌ€b'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[OÌ€niÌ€ ni] LT',
        nextDay: '[á»ŒÌ€la ni] LT',
        nextWeek: "dddd [á»Œsáº¹Ì€ toÌn'bá»] [ni] LT",
        lastDay: '[AÌ€na ni] LT',
        lastWeek: 'dddd [á»Œsáº¹Ì€ toÌlá»Ì] [ni] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'niÌ %s',
        past: '%s ká»jaÌ',
        s: 'iÌ€sáº¹juÌ aayaÌ die',
        ss: 'aayaÌ %d',
        m: 'iÌ€sáº¹juÌ kan',
        mm: 'iÌ€sáº¹juÌ %d',
        h: 'waÌkati kan',
        hh: 'waÌkati %d',
        d: 'á»já»Ì kan',
        dd: 'á»já»Ì %d',
        M: 'osuÌ€ kan',
        MM: 'osuÌ€ %d',
        y: 'á»duÌn kan',
        yy: 'á»duÌn %d',
    },
    dayOfMonthOrdinalParse: /á»já»Ì\s\d{1,2}/,
    ordinal: 'á»já»Ì %d',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Chinese (China) [zh-cn]
//! author : suupic : https://github.com/suupic
//! author : Zeno Zeng : https://github.com/zenozeng
//! author : uu109 : https://github.com/uu109

import moment from '../moment';

export default moment.defineLocale('zh-cn', {
    months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
        '_'
    ),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
    weekdaysShort: 'å‘¨æ—¥_å‘¨ä¸€_å‘¨äºŒ_å‘¨ä¸‰_å‘¨å››_å‘¨äº”_å‘¨å…­'.split('_'),
    weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥Ahç‚¹mmåˆ†',
        LLLL: 'YYYYå¹´MæœˆDæ—¥ddddAhç‚¹mmåˆ†',
        l: 'YYYY/M/D',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
    },
    meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
            return hour;
        } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
            return hour + 12;
        } else {
            // 'ä¸­åˆ'
            return hour >= 11 ? hour : hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'å‡Œæ™¨';
        } else if (hm < 900) {
            return 'æ—©ä¸Š';
        } else if (hm < 1130) {
            return 'ä¸Šåˆ';
        } else if (hm < 1230) {
            return 'ä¸­åˆ';
        } else if (hm < 1800) {
            return 'ä¸‹åˆ';
        } else {
            return 'æ™šä¸Š';
        }
    },
    calendar: {
        sameDay: '[ä»Šå¤©]LT',
        nextDay: '[æ˜Žå¤©]LT',
        nextWeek: function (now) {
            if (now.week() !== this.week()) {
                return '[ä¸‹]dddLT';
            } else {
                return '[æœ¬]dddLT';
            }
        },
        lastDay: '[æ˜¨å¤©]LT',
        lastWeek: function (now) {
            if (this.week() !== now.week()) {
                return '[ä¸Š]dddLT';
            } else {
                return '[æœ¬]dddLT';
            }
        },
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|å‘¨)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            case 'M':
                return number + 'æœˆ';
            case 'w':
            case 'W':
                return number + 'å‘¨';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%såŽ',
        past: '%så‰',
        s: 'å‡ ç§’',
        ss: '%d ç§’',
        m: '1 åˆ†é’Ÿ',
        mm: '%d åˆ†é’Ÿ',
        h: '1 å°æ—¶',
        hh: '%d å°æ—¶',
        d: '1 å¤©',
        dd: '%d å¤©',
        w: '1 å‘¨',
        ww: '%d å‘¨',
        M: '1 ä¸ªæœˆ',
        MM: '%d ä¸ªæœˆ',
        y: '1 å¹´',
        yy: '%d å¹´',
    },
    week: {
        // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Chinese (Hong Kong) [zh-hk]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
//! author : Konstantin : https://github.com/skfd
//! author : Anthony : https://github.com/anthonylau

import moment from '../moment';

export default moment.defineLocale('zh-hk', {
    months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
        '_'
    ),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
    weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
    weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        l: 'YYYY/M/D',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
    },
    meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
            return hour;
        } else if (meridiem === 'ä¸­åˆ') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'å‡Œæ™¨';
        } else if (hm < 900) {
            return 'æ—©ä¸Š';
        } else if (hm < 1200) {
            return 'ä¸Šåˆ';
        } else if (hm === 1200) {
            return 'ä¸­åˆ';
        } else if (hm < 1800) {
            return 'ä¸‹åˆ';
        } else {
            return 'æ™šä¸Š';
        }
    },
    calendar: {
        sameDay: '[ä»Šå¤©]LT',
        nextDay: '[æ˜Žå¤©]LT',
        nextWeek: '[ä¸‹]ddddLT',
        lastDay: '[æ˜¨å¤©]LT',
        lastWeek: '[ä¸Š]ddddLT',
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            case 'M':
                return number + 'æœˆ';
            case 'w':
            case 'W':
                return number + 'é€±';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%så¾Œ',
        past: '%så‰',
        s: 'å¹¾ç§’',
        ss: '%d ç§’',
        m: '1 åˆ†é˜',
        mm: '%d åˆ†é˜',
        h: '1 å°æ™‚',
        hh: '%d å°æ™‚',
        d: '1 å¤©',
        dd: '%d å¤©',
        M: '1 å€‹æœˆ',
        MM: '%d å€‹æœˆ',
        y: '1 å¹´',
        yy: '%d å¹´',
    },
});
//! moment.js locale configuration
//! locale : Chinese (Macau) [zh-mo]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
//! author : Tan Yuanhong : https://github.com/le0tan

import moment from '../moment';

export default moment.defineLocale('zh-mo', {
    months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
        '_'
    ),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
    weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
    weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        l: 'D/M/YYYY',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
    },
    meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
            return hour;
        } else if (meridiem === 'ä¸­åˆ') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'å‡Œæ™¨';
        } else if (hm < 900) {
            return 'æ—©ä¸Š';
        } else if (hm < 1130) {
            return 'ä¸Šåˆ';
        } else if (hm < 1230) {
            return 'ä¸­åˆ';
        } else if (hm < 1800) {
            return 'ä¸‹åˆ';
        } else {
            return 'æ™šä¸Š';
        }
    },
    calendar: {
        sameDay: '[ä»Šå¤©] LT',
        nextDay: '[æ˜Žå¤©] LT',
        nextWeek: '[ä¸‹]dddd LT',
        lastDay: '[æ˜¨å¤©] LT',
        lastWeek: '[ä¸Š]dddd LT',
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            case 'M':
                return number + 'æœˆ';
            case 'w':
            case 'W':
                return number + 'é€±';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%så…§',
        past: '%så‰',
        s: 'å¹¾ç§’',
        ss: '%d ç§’',
        m: '1 åˆ†é˜',
        mm: '%d åˆ†é˜',
        h: '1 å°æ™‚',
        hh: '%d å°æ™‚',
        d: '1 å¤©',
        dd: '%d å¤©',
        M: '1 å€‹æœˆ',
        MM: '%d å€‹æœˆ',
        y: '1 å¹´',
        yy: '%d å¹´',
    },
});
//! moment.js locale configuration
//! locale : Chinese (Taiwan) [zh-tw]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris

import moment from '../moment';

export default moment.defineLocale('zh-tw', {
    months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
        '_'
    ),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
    weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
    weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        l: 'YYYY/M/D',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
    },
    meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
            return hour;
        } else if (meridiem === 'ä¸­åˆ') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'å‡Œæ™¨';
        } else if (hm < 900) {
            return 'æ—©ä¸Š';
        } else if (hm < 1130) {
            return 'ä¸Šåˆ';
        } else if (hm < 1230) {
            return 'ä¸­åˆ';
        } else if (hm < 1800) {
            return 'ä¸‹åˆ';
        } else {
            return 'æ™šä¸Š';
        }
    },
    calendar: {
        sameDay: '[ä»Šå¤©] LT',
        nextDay: '[æ˜Žå¤©] LT',
        nextWeek: '[ä¸‹]dddd LT',
        lastDay: '[æ˜¨å¤©] LT',
        lastWeek: '[ä¸Š]dddd LT',
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            case 'M':
                return number + 'æœˆ';
            case 'w':
            case 'W':
                return number + 'é€±';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%så¾Œ',
        past: '%så‰',
        s: 'å¹¾ç§’',
        ss: '%d ç§’',
        m: '1 åˆ†é˜',
        mm: '%d åˆ†é˜',
        h: '1 å°æ™‚',
        hh: '%d å°æ™‚',
        d: '1 å¤©',
        dd: '%d å¤©',
        M: '1 å€‹æœˆ',
        MM: '%d å€‹æœˆ',
        y: '1 å¹´',
        yy: '%d å¹´',
    },
});
//! moment.js
//! version : 2.29.1
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com

var hookCallback;

function hooks() {
    return hookCallback.apply(null, arguments);
}

// This is done to register the method called with moment()
// without creating circular dependencies.
function setHookCallback(callback) {
    hookCallback = callback;
}

function isArray(input) {
    return (
        input instanceof Array ||
        Object.prototype.toString.call(input) === '[object Array]'
    );
}

function isObject(input) {
    // IE8 will treat undefined and null as object if it wasn't for
    // input != null
    return (
        input != null &&
        Object.prototype.toString.call(input) === '[object Object]'
    );
}

function hasOwnProp(a, b) {
    return Object.prototype.hasOwnProperty.call(a, b);
}

function isObjectEmpty(obj) {
    if (Object.getOwnPropertyNames) {
        return Object.getOwnPropertyNames(obj).length === 0;
    } else {
        var k;
        for (k in obj) {
            if (hasOwnProp(obj, k)) {
                return false;
            }
        }
        return true;
    }
}

function isUndefined(input) {
    return input === void 0;
}

function isNumber(input) {
    return (
        typeof input === 'number' ||
        Object.prototype.toString.call(input) === '[object Number]'
    );
}

function isDate(input) {
    return (
        input instanceof Date ||
        Object.prototype.toString.call(input) === '[object Date]'
    );
}

function map(arr, fn) {
    var res = [],
        i;
    for (i = 0; i < arr.length; ++i) {
        res.push(fn(arr[i], i));
    }
    return res;
}

function extend(a, b) {
    for (var i in b) {
        if (hasOwnProp(b, i)) {
            a[i] = b[i];
        }
    }

    if (hasOwnProp(b, 'toString')) {
        a.toString = b.toString;
    }

    if (hasOwnProp(b, 'valueOf')) {
        a.valueOf = b.valueOf;
    }

    return a;
}

function createUTC(input, format, locale, strict) {
    return createLocalOrUTC(input, format, locale, strict, true).utc();
}

function defaultParsingFlags() {
    // We need to deep clone this object.
    return {
        empty: false,
        unusedTokens: [],
        unusedInput: [],
        overflow: -2,
        charsLeftOver: 0,
        nullInput: false,
        invalidEra: null,
        invalidMonth: null,
        invalidFormat: false,
        userInvalidated: false,
        iso: false,
        parsedDateParts: [],
        era: null,
        meridiem: null,
        rfc2822: false,
        weekdayMismatch: false,
    };
}

function getParsingFlags(m) {
    if (m._pf == null) {
        m._pf = defaultParsingFlags();
    }
    return m._pf;
}

var some;
if (Array.prototype.some) {
    some = Array.prototype.some;
} else {
    some = function (fun) {
        var t = Object(this),
            len = t.length >>> 0,
            i;

        for (i = 0; i < len; i++) {
            if (i in t && fun.call(this, t[i], i, t)) {
                return true;
            }
        }

        return false;
    };
}

function isValid(m) {
    if (m._isValid == null) {
        var flags = getParsingFlags(m),
            parsedParts = some.call(flags.parsedDateParts, function (i) {
                return i != null;
            }),
            isNowValid =
                !isNaN(m._d.getTime()) &&
                flags.overflow < 0 &&
                !flags.empty &&
                !flags.invalidEra &&
                !flags.invalidMonth &&
                !flags.invalidWeekday &&
                !flags.weekdayMismatch &&
                !flags.nullInput &&
                !flags.invalidFormat &&
                !flags.userInvalidated &&
                (!flags.meridiem || (flags.meridiem && parsedParts));

        if (m._strict) {
            isNowValid =
                isNowValid &&
                flags.charsLeftOver === 0 &&
                flags.unusedTokens.length === 0 &&
                flags.bigHour === undefined;
        }

        if (Object.isFrozen == null || !Object.isFrozen(m)) {
            m._isValid = isNowValid;
        } else {
            return isNowValid;
        }
    }
    return m._isValid;
}

function createInvalid(flags) {
    var m = createUTC(NaN);
    if (flags != null) {
        extend(getParsingFlags(m), flags);
    } else {
        getParsingFlags(m).userInvalidated = true;
    }

    return m;
}

// Plugins that add properties should also add the key here (null value),
// so we can properly clone ourselves.
var momentProperties = (hooks.momentProperties = []),
    updateInProgress = false;

function copyConfig(to, from) {
    var i, prop, val;

    if (!isUndefined(from._isAMomentObject)) {
        to._isAMomentObject = from._isAMomentObject;
    }
    if (!isUndefined(from._i)) {
        to._i = from._i;
    }
    if (!isUndefined(from._f)) {
        to._f = from._f;
    }
    if (!isUndefined(from._l)) {
        to._l = from._l;
    }
    if (!isUndefined(from._strict)) {
        to._strict = from._strict;
    }
    if (!isUndefined(from._tzm)) {
        to._tzm = from._tzm;
    }
    if (!isUndefined(from._isUTC)) {
        to._isUTC = from._isUTC;
    }
    if (!isUndefined(from._offset)) {
        to._offset = from._offset;
    }
    if (!isUndefined(from._pf)) {
        to._pf = getParsingFlags(from);
    }
    if (!isUndefined(from._locale)) {
        to._locale = from._locale;
    }

    if (momentProperties.length > 0) {
        for (i = 0; i < momentProperties.length; i++) {
            prop = momentProperties[i];
            val = from[prop];
            if (!isUndefined(val)) {
                to[prop] = val;
            }
        }
    }

    return to;
}

// Moment prototype object
function Moment(config) {
    copyConfig(this, config);
    this._d = new Date(config._d != null ? config._d.getTime() : NaN);
    if (!this.isValid()) {
        this._d = new Date(NaN);
    }
    // Prevent infinite loop in case updateOffset creates new moment
    // objects.
    if (updateInProgress === false) {
        updateInProgress = true;
        hooks.updateOffset(this);
        updateInProgress = false;
    }
}

function isMoment(obj) {
    return (
        obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
    );
}

function warn(msg) {
    if (
        hooks.suppressDeprecationWarnings === false &&
        typeof console !== 'undefined' &&
        console.warn
    ) {
        console.warn('Deprecation warning: ' + msg);
    }
}

function deprecate(msg, fn) {
    var firstTime = true;

    return extend(function () {
        if (hooks.deprecationHandler != null) {
            hooks.deprecationHandler(null, msg);
        }
        if (firstTime) {
            var args = [],
                arg,
                i,
                key;
            for (i = 0; i < arguments.length; i++) {
                arg = '';
                if (typeof arguments[i] === 'object') {
                    arg += '\n[' + i + '] ';
                    for (key in arguments[0]) {
                        if (hasOwnProp(arguments[0], key)) {
                            arg += key + ': ' + arguments[0][key] + ', ';
                        }
                    }
                    arg = arg.slice(0, -2); // Remove trailing comma and space
                } else {
                    arg = arguments[i];
                }
                args.push(arg);
            }
            warn(
                msg +
                    '\nArguments: ' +
                    Array.prototype.slice.call(args).join('') +
                    '\n' +
                    new Error().stack
            );
            firstTime = false;
        }
        return fn.apply(this, arguments);
    }, fn);
}

var deprecations = {};

function deprecateSimple(name, msg) {
    if (hooks.deprecationHandler != null) {
        hooks.deprecationHandler(name, msg);
    }
    if (!deprecations[name]) {
        warn(msg);
        deprecations[name] = true;
    }
}

hooks.suppressDeprecationWarnings = false;
hooks.deprecationHandler = null;

function isFunction(input) {
    return (
        (typeof Function !== 'undefined' && input instanceof Function) ||
        Object.prototype.toString.call(input) === '[object Function]'
    );
}

function set(config) {
    var prop, i;
    for (i in config) {
        if (hasOwnProp(config, i)) {
            prop = config[i];
            if (isFunction(prop)) {
                this[i] = prop;
            } else {
                this['_' + i] = prop;
            }
        }
    }
    this._config = config;
    // Lenient ordinal parsing accepts just a number in addition to
    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
    // TODO: Remove "ordinalParse" fallback in next major release.
    this._dayOfMonthOrdinalParseLenient = new RegExp(
        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
            '|' +
            /\d{1,2}/.source
    );
}

function mergeConfigs(parentConfig, childConfig) {
    var res = extend({}, parentConfig),
        prop;
    for (prop in childConfig) {
        if (hasOwnProp(childConfig, prop)) {
            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
                res[prop] = {};
                extend(res[prop], parentConfig[prop]);
                extend(res[prop], childConfig[prop]);
            } else if (childConfig[prop] != null) {
                res[prop] = childConfig[prop];
            } else {
                delete res[prop];
            }
        }
    }
    for (prop in parentConfig) {
        if (
            hasOwnProp(parentConfig, prop) &&
            !hasOwnProp(childConfig, prop) &&
            isObject(parentConfig[prop])
        ) {
            // make sure changes to properties don't modify parent config
            res[prop] = extend({}, res[prop]);
        }
    }
    return res;
}

function Locale(config) {
    if (config != null) {
        this.set(config);
    }
}

var keys;

if (Object.keys) {
    keys = Object.keys;
} else {
    keys = function (obj) {
        var i,
            res = [];
        for (i in obj) {
            if (hasOwnProp(obj, i)) {
                res.push(i);
            }
        }
        return res;
    };
}

var defaultCalendar = {
    sameDay: '[Today at] LT',
    nextDay: '[Tomorrow at] LT',
    nextWeek: 'dddd [at] LT',
    lastDay: '[Yesterday at] LT',
    lastWeek: '[Last] dddd [at] LT',
    sameElse: 'L',
};

function calendar(key, mom, now) {
    var output = this._calendar[key] || this._calendar['sameElse'];
    return isFunction(output) ? output.call(mom, now) : output;
}

function zeroFill(number, targetLength, forceSign) {
    var absNumber = '' + Math.abs(number),
        zerosToFill = targetLength - absNumber.length,
        sign = number >= 0;
    return (
        (sign ? (forceSign ? '+' : '') : '-') +
        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
        absNumber
    );
}

var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
    localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
    formatFunctions = {},
    formatTokenFunctions = {};

// token:    'M'
// padded:   ['MM', 2]
// ordinal:  'Mo'
// callback: function () { this.month() + 1 }
function addFormatToken(token, padded, ordinal, callback) {
    var func = callback;
    if (typeof callback === 'string') {
        func = function () {
            return this[callback]();
        };
    }
    if (token) {
        formatTokenFunctions[token] = func;
    }
    if (padded) {
        formatTokenFunctions[padded[0]] = function () {
            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
        };
    }
    if (ordinal) {
        formatTokenFunctions[ordinal] = function () {
            return this.localeData().ordinal(
                func.apply(this, arguments),
                token
            );
        };
    }
}

function removeFormattingTokens(input) {
    if (input.match(/\[[\s\S]/)) {
        return input.replace(/^\[|\]$/g, '');
    }
    return input.replace(/\\/g, '');
}

function makeFormatFunction(format) {
    var array = format.match(formattingTokens),
        i,
        length;

    for (i = 0, length = array.length; i < length; i++) {
        if (formatTokenFunctions[array[i]]) {
            array[i] = formatTokenFunctions[array[i]];
        } else {
            array[i] = removeFormattingTokens(array[i]);
        }
    }

    return function (mom) {
        var output = '',
            i;
        for (i = 0; i < length; i++) {
            output += isFunction(array[i])
                ? array[i].call(mom, format)
                : array[i];
        }
        return output;
    };
}

// format date using native date object
function formatMoment(m, format) {
    if (!m.isValid()) {
        return m.localeData().invalidDate();
    }

    format = expandFormat(format, m.localeData());
    formatFunctions[format] =
        formatFunctions[format] || makeFormatFunction(format);

    return formatFunctions[format](m);
}

function expandFormat(format, locale) {
    var i = 5;

    function replaceLongDateFormatTokens(input) {
        return locale.longDateFormat(input) || input;
    }

    localFormattingTokens.lastIndex = 0;
    while (i >= 0 && localFormattingTokens.test(format)) {
        format = format.replace(
            localFormattingTokens,
            replaceLongDateFormatTokens
        );
        localFormattingTokens.lastIndex = 0;
        i -= 1;
    }

    return format;
}

var defaultLongDateFormat = {
    LTS: 'h:mm:ss A',
    LT: 'h:mm A',
    L: 'MM/DD/YYYY',
    LL: 'MMMM D, YYYY',
    LLL: 'MMMM D, YYYY h:mm A',
    LLLL: 'dddd, MMMM D, YYYY h:mm A',
};

function longDateFormat(key) {
    var format = this._longDateFormat[key],
        formatUpper = this._longDateFormat[key.toUpperCase()];

    if (format || !formatUpper) {
        return format;
    }

    this._longDateFormat[key] = formatUpper
        .match(formattingTokens)
        .map(function (tok) {
            if (
                tok === 'MMMM' ||
                tok === 'MM' ||
                tok === 'DD' ||
                tok === 'dddd'
            ) {
                return tok.slice(1);
            }
            return tok;
        })
        .join('');

    return this._longDateFormat[key];
}

var defaultInvalidDate = 'Invalid date';

function invalidDate() {
    return this._invalidDate;
}

var defaultOrdinal = '%d',
    defaultDayOfMonthOrdinalParse = /\d{1,2}/;

function ordinal(number) {
    return this._ordinal.replace('%d', number);
}

var defaultRelativeTime = {
    future: 'in %s',
    past: '%s ago',
    s: 'a few seconds',
    ss: '%d seconds',
    m: 'a minute',
    mm: '%d minutes',
    h: 'an hour',
    hh: '%d hours',
    d: 'a day',
    dd: '%d days',
    w: 'a week',
    ww: '%d weeks',
    M: 'a month',
    MM: '%d months',
    y: 'a year',
    yy: '%d years',
};

function relativeTime(number, withoutSuffix, string, isFuture) {
    var output = this._relativeTime[string];
    return isFunction(output)
        ? output(number, withoutSuffix, string, isFuture)
        : output.replace(/%d/i, number);
}

function pastFuture(diff, output) {
    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
    return isFunction(format) ? format(output) : format.replace(/%s/i, output);
}

var aliases = {};

function addUnitAlias(unit, shorthand) {
    var lowerCase = unit.toLowerCase();
    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
}

function normalizeUnits(units) {
    return typeof units === 'string'
        ? aliases[units] || aliases[units.toLowerCase()]
        : undefined;
}

function normalizeObjectUnits(inputObject) {
    var normalizedInput = {},
        normalizedProp,
        prop;

    for (prop in inputObject) {
        if (hasOwnProp(inputObject, prop)) {
            normalizedProp = normalizeUnits(prop);
            if (normalizedProp) {
                normalizedInput[normalizedProp] = inputObject[prop];
            }
        }
    }

    return normalizedInput;
}

var priorities = {};

function addUnitPriority(unit, priority) {
    priorities[unit] = priority;
}

function getPrioritizedUnits(unitsObj) {
    var units = [],
        u;
    for (u in unitsObj) {
        if (hasOwnProp(unitsObj, u)) {
            units.push({ unit: u, priority: priorities[u] });
        }
    }
    units.sort(function (a, b) {
        return a.priority - b.priority;
    });
    return units;
}

function isLeapYear(year) {
    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
}

function absFloor(number) {
    if (number < 0) {
        // -0 -> 0
        return Math.ceil(number) || 0;
    } else {
        return Math.floor(number);
    }
}

function toInt(argumentForCoercion) {
    var coercedNumber = +argumentForCoercion,
        value = 0;

    if (coercedNumber !== 0 && isFinite(coercedNumber)) {
        value = absFloor(coercedNumber);
    }

    return value;
}

function makeGetSet(unit, keepTime) {
    return function (value) {
        if (value != null) {
            set$1(this, unit, value);
            hooks.updateOffset(this, keepTime);
            return this;
        } else {
            return get(this, unit);
        }
    };
}

function get(mom, unit) {
    return mom.isValid()
        ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
        : NaN;
}

function set$1(mom, unit, value) {
    if (mom.isValid() && !isNaN(value)) {
        if (
            unit === 'FullYear' &&
            isLeapYear(mom.year()) &&
            mom.month() === 1 &&
            mom.date() === 29
        ) {
            value = toInt(value);
            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
                value,
                mom.month(),
                daysInMonth(value, mom.month())
            );
        } else {
            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
        }
    }
}

// MOMENTS

function stringGet(units) {
    units = normalizeUnits(units);
    if (isFunction(this[units])) {
        return this[units]();
    }
    return this;
}

function stringSet(units, value) {
    if (typeof units === 'object') {
        units = normalizeObjectUnits(units);
        var prioritized = getPrioritizedUnits(units),
            i;
        for (i = 0; i < prioritized.length; i++) {
            this[prioritized[i].unit](units[prioritized[i].unit]);
        }
    } else {
        units = normalizeUnits(units);
        if (isFunction(this[units])) {
            return this[units](value);
        }
    }
    return this;
}

var match1 = /\d/, //       0 - 9
    match2 = /\d\d/, //      00 - 99
    match3 = /\d{3}/, //     000 - 999
    match4 = /\d{4}/, //    0000 - 9999
    match6 = /[+-]?\d{6}/, // -999999 - 999999
    match1to2 = /\d\d?/, //       0 - 99
    match3to4 = /\d\d\d\d?/, //     999 - 9999
    match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
    match1to3 = /\d{1,3}/, //       0 - 999
    match1to4 = /\d{1,4}/, //       0 - 9999
    match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
    matchUnsigned = /\d+/, //       0 - inf
    matchSigned = /[+-]?\d+/, //    -inf - inf
    matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
    matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
    matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
    // any word (or two) characters or numbers including two/three word month in arabic.
    // includes scottish gaelic two word and hyphenated months
    matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
    regexes;

regexes = {};

function addRegexToken(token, regex, strictRegex) {
    regexes[token] = isFunction(regex)
        ? regex
        : function (isStrict, localeData) {
              return isStrict && strictRegex ? strictRegex : regex;
          };
}

function getParseRegexForToken(token, config) {
    if (!hasOwnProp(regexes, token)) {
        return new RegExp(unescapeFormat(token));
    }

    return regexes[token](config._strict, config._locale);
}

// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
function unescapeFormat(s) {
    return regexEscape(
        s
            .replace('\\', '')
            .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
                matched,
                p1,
                p2,
                p3,
                p4
            ) {
                return p1 || p2 || p3 || p4;
            })
    );
}

function regexEscape(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}

var tokens = {};

function addParseToken(token, callback) {
    var i,
        func = callback;
    if (typeof token === 'string') {
        token = [token];
    }
    if (isNumber(callback)) {
        func = function (input, array) {
            array[callback] = toInt(input);
        };
    }
    for (i = 0; i < token.length; i++) {
        tokens[token[i]] = func;
    }
}

function addWeekParseToken(token, callback) {
    addParseToken(token, function (input, array, config, token) {
        config._w = config._w || {};
        callback(input, config._w, config, token);
    });
}

function addTimeToArrayFromToken(token, input, config) {
    if (input != null && hasOwnProp(tokens, token)) {
        tokens[token](input, config._a, config, token);
    }
}

var YEAR = 0,
    MONTH = 1,
    DATE = 2,
    HOUR = 3,
    MINUTE = 4,
    SECOND = 5,
    MILLISECOND = 6,
    WEEK = 7,
    WEEKDAY = 8;

function mod(n, x) {
    return ((n % x) + x) % x;
}

var indexOf;

if (Array.prototype.indexOf) {
    indexOf = Array.prototype.indexOf;
} else {
    indexOf = function (o) {
        // I know
        var i;
        for (i = 0; i < this.length; ++i) {
            if (this[i] === o) {
                return i;
            }
        }
        return -1;
    };
}

function daysInMonth(year, month) {
    if (isNaN(year) || isNaN(month)) {
        return NaN;
    }
    var modMonth = mod(month, 12);
    year += (month - modMonth) / 12;
    return modMonth === 1
        ? isLeapYear(year)
            ? 29
            : 28
        : 31 - ((modMonth % 7) % 2);
}

// FORMATTING

addFormatToken('M', ['MM', 2], 'Mo', function () {
    return this.month() + 1;
});

addFormatToken('MMM', 0, 0, function (format) {
    return this.localeData().monthsShort(this, format);
});

addFormatToken('MMMM', 0, 0, function (format) {
    return this.localeData().months(this, format);
});

// ALIASES

addUnitAlias('month', 'M');

// PRIORITY

addUnitPriority('month', 8);

// PARSING

addRegexToken('M', match1to2);
addRegexToken('MM', match1to2, match2);
addRegexToken('MMM', function (isStrict, locale) {
    return locale.monthsShortRegex(isStrict);
});
addRegexToken('MMMM', function (isStrict, locale) {
    return locale.monthsRegex(isStrict);
});

addParseToken(['M', 'MM'], function (input, array) {
    array[MONTH] = toInt(input) - 1;
});

addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
    var month = config._locale.monthsParse(input, token, config._strict);
    // if we didn't find a month name, mark the date as invalid.
    if (month != null) {
        array[MONTH] = month;
    } else {
        getParsingFlags(config).invalidMonth = input;
    }
});

// LOCALES

var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
        '_'
    ),
    MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
    defaultMonthsShortRegex = matchWord,
    defaultMonthsRegex = matchWord;

function localeMonths(m, format) {
    if (!m) {
        return isArray(this._months)
            ? this._months
            : this._months['standalone'];
    }
    return isArray(this._months)
        ? this._months[m.month()]
        : this._months[
              (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
                  ? 'format'
                  : 'standalone'
          ][m.month()];
}

function localeMonthsShort(m, format) {
    if (!m) {
        return isArray(this._monthsShort)
            ? this._monthsShort
            : this._monthsShort['standalone'];
    }
    return isArray(this._monthsShort)
        ? this._monthsShort[m.month()]
        : this._monthsShort[
              MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
          ][m.month()];
}

function handleStrictParse(monthName, format, strict) {
    var i,
        ii,
        mom,
        llc = monthName.toLocaleLowerCase();
    if (!this._monthsParse) {
        // this is not used
        this._monthsParse = [];
        this._longMonthsParse = [];
        this._shortMonthsParse = [];
        for (i = 0; i < 12; ++i) {
            mom = createUTC([2000, i]);
            this._shortMonthsParse[i] = this.monthsShort(
                mom,
                ''
            ).toLocaleLowerCase();
            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
        }
    }

    if (strict) {
        if (format === 'MMM') {
            ii = indexOf.call(this._shortMonthsParse, llc);
            return ii !== -1 ? ii : null;
        } else {
            ii = indexOf.call(this._longMonthsParse, llc);
            return ii !== -1 ? ii : null;
        }
    } else {
        if (format === 'MMM') {
            ii = indexOf.call(this._shortMonthsParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._longMonthsParse, llc);
            return ii !== -1 ? ii : null;
        } else {
            ii = indexOf.call(this._longMonthsParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._shortMonthsParse, llc);
            return ii !== -1 ? ii : null;
        }
    }
}

function localeMonthsParse(monthName, format, strict) {
    var i, mom, regex;

    if (this._monthsParseExact) {
        return handleStrictParse.call(this, monthName, format, strict);
    }

    if (!this._monthsParse) {
        this._monthsParse = [];
        this._longMonthsParse = [];
        this._shortMonthsParse = [];
    }

    // TODO: add sorting
    // Sorting makes sure if one month (or abbr) is a prefix of another
    // see sorting in computeMonthsParse
    for (i = 0; i < 12; i++) {
        // make the regex if we don't have it already
        mom = createUTC([2000, i]);
        if (strict && !this._longMonthsParse[i]) {
            this._longMonthsParse[i] = new RegExp(
                '^' + this.months(mom, '').replace('.', '') + '$',
                'i'
            );
            this._shortMonthsParse[i] = new RegExp(
                '^' + this.monthsShort(mom, '').replace('.', '') + '$',
                'i'
            );
        }
        if (!strict && !this._monthsParse[i]) {
            regex =
                '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
        }
        // test the regex
        if (
            strict &&
            format === 'MMMM' &&
            this._longMonthsParse[i].test(monthName)
        ) {
            return i;
        } else if (
            strict &&
            format === 'MMM' &&
            this._shortMonthsParse[i].test(monthName)
        ) {
            return i;
        } else if (!strict && this._monthsParse[i].test(monthName)) {
            return i;
        }
    }
}

// MOMENTS

function setMonth(mom, value) {
    var dayOfMonth;

    if (!mom.isValid()) {
        // No op
        return mom;
    }

    if (typeof value === 'string') {
        if (/^\d+$/.test(value)) {
            value = toInt(value);
        } else {
            value = mom.localeData().monthsParse(value);
            // TODO: Another silent failure?
            if (!isNumber(value)) {
                return mom;
            }
        }
    }

    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
    return mom;
}

function getSetMonth(value) {
    if (value != null) {
        setMonth(this, value);
        hooks.updateOffset(this, true);
        return this;
    } else {
        return get(this, 'Month');
    }
}

function getDaysInMonth() {
    return daysInMonth(this.year(), this.month());
}

function monthsShortRegex(isStrict) {
    if (this._monthsParseExact) {
        if (!hasOwnProp(this, '_monthsRegex')) {
            computeMonthsParse.call(this);
        }
        if (isStrict) {
            return this._monthsShortStrictRegex;
        } else {
            return this._monthsShortRegex;
        }
    } else {
        if (!hasOwnProp(this, '_monthsShortRegex')) {
            this._monthsShortRegex = defaultMonthsShortRegex;
        }
        return this._monthsShortStrictRegex && isStrict
            ? this._monthsShortStrictRegex
            : this._monthsShortRegex;
    }
}

function monthsRegex(isStrict) {
    if (this._monthsParseExact) {
        if (!hasOwnProp(this, '_monthsRegex')) {
            computeMonthsParse.call(this);
        }
        if (isStrict) {
            return this._monthsStrictRegex;
        } else {
            return this._monthsRegex;
        }
    } else {
        if (!hasOwnProp(this, '_monthsRegex')) {
            this._monthsRegex = defaultMonthsRegex;
        }
        return this._monthsStrictRegex && isStrict
            ? this._monthsStrictRegex
            : this._monthsRegex;
    }
}

function computeMonthsParse() {
    function cmpLenRev(a, b) {
        return b.length - a.length;
    }

    var shortPieces = [],
        longPieces = [],
        mixedPieces = [],
        i,
        mom;
    for (i = 0; i < 12; i++) {
        // make the regex if we don't have it already
        mom = createUTC([2000, i]);
        shortPieces.push(this.monthsShort(mom, ''));
        longPieces.push(this.months(mom, ''));
        mixedPieces.push(this.months(mom, ''));
        mixedPieces.push(this.monthsShort(mom, ''));
    }
    // Sorting makes sure if one month (or abbr) is a prefix of another it
    // will match the longer piece.
    shortPieces.sort(cmpLenRev);
    longPieces.sort(cmpLenRev);
    mixedPieces.sort(cmpLenRev);
    for (i = 0; i < 12; i++) {
        shortPieces[i] = regexEscape(shortPieces[i]);
        longPieces[i] = regexEscape(longPieces[i]);
    }
    for (i = 0; i < 24; i++) {
        mixedPieces[i] = regexEscape(mixedPieces[i]);
    }

    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
    this._monthsShortRegex = this._monthsRegex;
    this._monthsStrictRegex = new RegExp(
        '^(' + longPieces.join('|') + ')',
        'i'
    );
    this._monthsShortStrictRegex = new RegExp(
        '^(' + shortPieces.join('|') + ')',
        'i'
    );
}

// FORMATTING

addFormatToken('Y', 0, 0, function () {
    var y = this.year();
    return y <= 9999 ? zeroFill(y, 4) : '+' + y;
});

addFormatToken(0, ['YY', 2], 0, function () {
    return this.year() % 100;
});

addFormatToken(0, ['YYYY', 4], 0, 'year');
addFormatToken(0, ['YYYYY', 5], 0, 'year');
addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');

// ALIASES

addUnitAlias('year', 'y');

// PRIORITIES

addUnitPriority('year', 1);

// PARSING

addRegexToken('Y', matchSigned);
addRegexToken('YY', match1to2, match2);
addRegexToken('YYYY', match1to4, match4);
addRegexToken('YYYYY', match1to6, match6);
addRegexToken('YYYYYY', match1to6, match6);

addParseToken(['YYYYY', 'YYYYYY'], YEAR);
addParseToken('YYYY', function (input, array) {
    array[YEAR] =
        input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
});
addParseToken('YY', function (input, array) {
    array[YEAR] = hooks.parseTwoDigitYear(input);
});
addParseToken('Y', function (input, array) {
    array[YEAR] = parseInt(input, 10);
});

// HELPERS

function daysInYear(year) {
    return isLeapYear(year) ? 366 : 365;
}

// HOOKS

hooks.parseTwoDigitYear = function (input) {
    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
};

// MOMENTS

var getSetYear = makeGetSet('FullYear', true);

function getIsLeapYear() {
    return isLeapYear(this.year());
}

function createDate(y, m, d, h, M, s, ms) {
    // can't just apply() to create a date:
    // https://stackoverflow.com/q/181348
    var date;
    // the date constructor remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
        // preserve leap years using a full 400 year cycle, then reset
        date = new Date(y + 400, m, d, h, M, s, ms);
        if (isFinite(date.getFullYear())) {
            date.setFullYear(y);
        }
    } else {
        date = new Date(y, m, d, h, M, s, ms);
    }

    return date;
}

function createUTCDate(y) {
    var date, args;
    // the Date.UTC function remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
        args = Array.prototype.slice.call(arguments);
        // preserve leap years using a full 400 year cycle, then reset
        args[0] = y + 400;
        date = new Date(Date.UTC.apply(null, args));
        if (isFinite(date.getUTCFullYear())) {
            date.setUTCFullYear(y);
        }
    } else {
        date = new Date(Date.UTC.apply(null, arguments));
    }

    return date;
}

// start-of-first-week - start-of-year
function firstWeekOffset(year, dow, doy) {
    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
        fwd = 7 + dow - doy,
        // first-week day local weekday -- which local weekday is fwd
        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;

    return -fwdlw + fwd - 1;
}

// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
    var localWeekday = (7 + weekday - dow) % 7,
        weekOffset = firstWeekOffset(year, dow, doy),
        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
        resYear,
        resDayOfYear;

    if (dayOfYear <= 0) {
        resYear = year - 1;
        resDayOfYear = daysInYear(resYear) + dayOfYear;
    } else if (dayOfYear > daysInYear(year)) {
        resYear = year + 1;
        resDayOfYear = dayOfYear - daysInYear(year);
    } else {
        resYear = year;
        resDayOfYear = dayOfYear;
    }

    return {
        year: resYear,
        dayOfYear: resDayOfYear,
    };
}

function weekOfYear(mom, dow, doy) {
    var weekOffset = firstWeekOffset(mom.year(), dow, doy),
        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
        resWeek,
        resYear;

    if (week < 1) {
        resYear = mom.year() - 1;
        resWeek = week + weeksInYear(resYear, dow, doy);
    } else if (week > weeksInYear(mom.year(), dow, doy)) {
        resWeek = week - weeksInYear(mom.year(), dow, doy);
        resYear = mom.year() + 1;
    } else {
        resYear = mom.year();
        resWeek = week;
    }

    return {
        week: resWeek,
        year: resYear,
    };
}

function weeksInYear(year, dow, doy) {
    var weekOffset = firstWeekOffset(year, dow, doy),
        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
}

// FORMATTING

addFormatToken('w', ['ww', 2], 'wo', 'week');
addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');

// ALIASES

addUnitAlias('week', 'w');
addUnitAlias('isoWeek', 'W');

// PRIORITIES

addUnitPriority('week', 5);
addUnitPriority('isoWeek', 5);

// PARSING

addRegexToken('w', match1to2);
addRegexToken('ww', match1to2, match2);
addRegexToken('W', match1to2);
addRegexToken('WW', match1to2, match2);

addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
    input,
    week,
    config,
    token
) {
    week[token.substr(0, 1)] = toInt(input);
});

// HELPERS

// LOCALES

function localeWeek(mom) {
    return weekOfYear(mom, this._week.dow, this._week.doy).week;
}

var defaultLocaleWeek = {
    dow: 0, // Sunday is the first day of the week.
    doy: 6, // The week that contains Jan 6th is the first week of the year.
};

function localeFirstDayOfWeek() {
    return this._week.dow;
}

function localeFirstDayOfYear() {
    return this._week.doy;
}

// MOMENTS

function getSetWeek(input) {
    var week = this.localeData().week(this);
    return input == null ? week : this.add((input - week) * 7, 'd');
}

function getSetISOWeek(input) {
    var week = weekOfYear(this, 1, 4).week;
    return input == null ? week : this.add((input - week) * 7, 'd');
}

// FORMATTING

addFormatToken('d', 0, 'do', 'day');

addFormatToken('dd', 0, 0, function (format) {
    return this.localeData().weekdaysMin(this, format);
});

addFormatToken('ddd', 0, 0, function (format) {
    return this.localeData().weekdaysShort(this, format);
});

addFormatToken('dddd', 0, 0, function (format) {
    return this.localeData().weekdays(this, format);
});

addFormatToken('e', 0, 0, 'weekday');
addFormatToken('E', 0, 0, 'isoWeekday');

// ALIASES

addUnitAlias('day', 'd');
addUnitAlias('weekday', 'e');
addUnitAlias('isoWeekday', 'E');

// PRIORITY
addUnitPriority('day', 11);
addUnitPriority('weekday', 11);
addUnitPriority('isoWeekday', 11);

// PARSING

addRegexToken('d', match1to2);
addRegexToken('e', match1to2);
addRegexToken('E', match1to2);
addRegexToken('dd', function (isStrict, locale) {
    return locale.weekdaysMinRegex(isStrict);
});
addRegexToken('ddd', function (isStrict, locale) {
    return locale.weekdaysShortRegex(isStrict);
});
addRegexToken('dddd', function (isStrict, locale) {
    return locale.weekdaysRegex(isStrict);
});

addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
    var weekday = config._locale.weekdaysParse(input, token, config._strict);
    // if we didn't get a weekday name, mark the date as invalid
    if (weekday != null) {
        week.d = weekday;
    } else {
        getParsingFlags(config).invalidWeekday = input;
    }
});

addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
    week[token] = toInt(input);
});

// HELPERS

function parseWeekday(input, locale) {
    if (typeof input !== 'string') {
        return input;
    }

    if (!isNaN(input)) {
        return parseInt(input, 10);
    }

    input = locale.weekdaysParse(input);
    if (typeof input === 'number') {
        return input;
    }

    return null;
}

function parseIsoWeekday(input, locale) {
    if (typeof input === 'string') {
        return locale.weekdaysParse(input) % 7 || 7;
    }
    return isNaN(input) ? null : input;
}

// LOCALES
function shiftWeekdays(ws, n) {
    return ws.slice(n, 7).concat(ws.slice(0, n));
}

var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    defaultWeekdaysRegex = matchWord,
    defaultWeekdaysShortRegex = matchWord,
    defaultWeekdaysMinRegex = matchWord;

function localeWeekdays(m, format) {
    var weekdays = isArray(this._weekdays)
        ? this._weekdays
        : this._weekdays[
              m && m !== true && this._weekdays.isFormat.test(format)
                  ? 'format'
                  : 'standalone'
          ];
    return m === true
        ? shiftWeekdays(weekdays, this._week.dow)
        : m
        ? weekdays[m.day()]
        : weekdays;
}

function localeWeekdaysShort(m) {
    return m === true
        ? shiftWeekdays(this._weekdaysShort, this._week.dow)
        : m
        ? this._weekdaysShort[m.day()]
        : this._weekdaysShort;
}

function localeWeekdaysMin(m) {
    return m === true
        ? shiftWeekdays(this._weekdaysMin, this._week.dow)
        : m
        ? this._weekdaysMin[m.day()]
        : this._weekdaysMin;
}

function handleStrictParse$1(weekdayName, format, strict) {
    var i,
        ii,
        mom,
        llc = weekdayName.toLocaleLowerCase();
    if (!this._weekdaysParse) {
        this._weekdaysParse = [];
        this._shortWeekdaysParse = [];
        this._minWeekdaysParse = [];

        for (i = 0; i < 7; ++i) {
            mom = createUTC([2000, 1]).day(i);
            this._minWeekdaysParse[i] = this.weekdaysMin(
                mom,
                ''
            ).toLocaleLowerCase();
            this._shortWeekdaysParse[i] = this.weekdaysShort(
                mom,
                ''
            ).toLocaleLowerCase();
            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
        }
    }

    if (strict) {
        if (format === 'dddd') {
            ii = indexOf.call(this._weekdaysParse, llc);
            return ii !== -1 ? ii : null;
        } else if (format === 'ddd') {
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        } else {
            ii = indexOf.call(this._minWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        }
    } else {
        if (format === 'dddd') {
            ii = indexOf.call(this._weekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._minWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        } else if (format === 'ddd') {
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._weekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._minWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        } else {
            ii = indexOf.call(this._minWeekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._weekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        }
    }
}

function localeWeekdaysParse(weekdayName, format, strict) {
    var i, mom, regex;

    if (this._weekdaysParseExact) {
        return handleStrictParse$1.call(this, weekdayName, format, strict);
    }

    if (!this._weekdaysParse) {
        this._weekdaysParse = [];
        this._minWeekdaysParse = [];
        this._shortWeekdaysParse = [];
        this._fullWeekdaysParse = [];
    }

    for (i = 0; i < 7; i++) {
        // make the regex if we don't have it already

        mom = createUTC([2000, 1]).day(i);
        if (strict && !this._fullWeekdaysParse[i]) {
            this._fullWeekdaysParse[i] = new RegExp(
                '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
                'i'
            );
            this._shortWeekdaysParse[i] = new RegExp(
                '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
                'i'
            );
            this._minWeekdaysParse[i] = new RegExp(
                '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
                'i'
            );
        }
        if (!this._weekdaysParse[i]) {
            regex =
                '^' +
                this.weekdays(mom, '') +
                '|^' +
                this.weekdaysShort(mom, '') +
                '|^' +
                this.weekdaysMin(mom, '');
            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
        }
        // test the regex
        if (
            strict &&
            format === 'dddd' &&
            this._fullWeekdaysParse[i].test(weekdayName)
        ) {
            return i;
        } else if (
            strict &&
            format === 'ddd' &&
            this._shortWeekdaysParse[i].test(weekdayName)
        ) {
            return i;
        } else if (
            strict &&
            format === 'dd' &&
            this._minWeekdaysParse[i].test(weekdayName)
        ) {
            return i;
        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
            return i;
        }
    }
}

// MOMENTS

function getSetDayOfWeek(input) {
    if (!this.isValid()) {
        return input != null ? this : NaN;
    }
    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
    if (input != null) {
        input = parseWeekday(input, this.localeData());
        return this.add(input - day, 'd');
    } else {
        return day;
    }
}

function getSetLocaleDayOfWeek(input) {
    if (!this.isValid()) {
        return input != null ? this : NaN;
    }
    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
    return input == null ? weekday : this.add(input - weekday, 'd');
}

function getSetISODayOfWeek(input) {
    if (!this.isValid()) {
        return input != null ? this : NaN;
    }

    // behaves the same as moment#day except
    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
    // as a setter, sunday should belong to the previous week.

    if (input != null) {
        var weekday = parseIsoWeekday(input, this.localeData());
        return this.day(this.day() % 7 ? weekday : weekday - 7);
    } else {
        return this.day() || 7;
    }
}

function weekdaysRegex(isStrict) {
    if (this._weekdaysParseExact) {
        if (!hasOwnProp(this, '_weekdaysRegex')) {
            computeWeekdaysParse.call(this);
        }
        if (isStrict) {
            return this._weekdaysStrictRegex;
        } else {
            return this._weekdaysRegex;
        }
    } else {
        if (!hasOwnProp(this, '_weekdaysRegex')) {
            this._weekdaysRegex = defaultWeekdaysRegex;
        }
        return this._weekdaysStrictRegex && isStrict
            ? this._weekdaysStrictRegex
            : this._weekdaysRegex;
    }
}

function weekdaysShortRegex(isStrict) {
    if (this._weekdaysParseExact) {
        if (!hasOwnProp(this, '_weekdaysRegex')) {
            computeWeekdaysParse.call(this);
        }
        if (isStrict) {
            return this._weekdaysShortStrictRegex;
        } else {
            return this._weekdaysShortRegex;
        }
    } else {
        if (!hasOwnProp(this, '_weekdaysShortRegex')) {
            this._weekdaysShortRegex = defaultWeekdaysShortRegex;
        }
        return this._weekdaysShortStrictRegex && isStrict
            ? this._weekdaysShortStrictRegex
            : this._weekdaysShortRegex;
    }
}

function weekdaysMinRegex(isStrict) {
    if (this._weekdaysParseExact) {
        if (!hasOwnProp(this, '_weekdaysRegex')) {
            computeWeekdaysParse.call(this);
        }
        if (isStrict) {
            return this._weekdaysMinStrictRegex;
        } else {
            return this._weekdaysMinRegex;
        }
    } else {
        if (!hasOwnProp(this, '_weekdaysMinRegex')) {
            this._weekdaysMinRegex = defaultWeekdaysMinRegex;
        }
        return this._weekdaysMinStrictRegex && isStrict
            ? this._weekdaysMinStrictRegex
            : this._weekdaysMinRegex;
    }
}

function computeWeekdaysParse() {
    function cmpLenRev(a, b) {
        return b.length - a.length;
    }

    var minPieces = [],
        shortPieces = [],
        longPieces = [],
        mixedPieces = [],
        i,
        mom,
        minp,
        shortp,
        longp;
    for (i = 0; i < 7; i++) {
        // make the regex if we don't have it already
        mom = createUTC([2000, 1]).day(i);
        minp = regexEscape(this.weekdaysMin(mom, ''));
        shortp = regexEscape(this.weekdaysShort(mom, ''));
        longp = regexEscape(this.weekdays(mom, ''));
        minPieces.push(minp);
        shortPieces.push(shortp);
        longPieces.push(longp);
        mixedPieces.push(minp);
        mixedPieces.push(shortp);
        mixedPieces.push(longp);
    }
    // Sorting makes sure if one weekday (or abbr) is a prefix of another it
    // will match the longer piece.
    minPieces.sort(cmpLenRev);
    shortPieces.sort(cmpLenRev);
    longPieces.sort(cmpLenRev);
    mixedPieces.sort(cmpLenRev);

    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
    this._weekdaysShortRegex = this._weekdaysRegex;
    this._weekdaysMinRegex = this._weekdaysRegex;

    this._weekdaysStrictRegex = new RegExp(
        '^(' + longPieces.join('|') + ')',
        'i'
    );
    this._weekdaysShortStrictRegex = new RegExp(
        '^(' + shortPieces.join('|') + ')',
        'i'
    );
    this._weekdaysMinStrictRegex = new RegExp(
        '^(' + minPieces.join('|') + ')',
        'i'
    );
}

// FORMATTING

function hFormat() {
    return this.hours() % 12 || 12;
}

function kFormat() {
    return this.hours() || 24;
}

addFormatToken('H', ['HH', 2], 0, 'hour');
addFormatToken('h', ['hh', 2], 0, hFormat);
addFormatToken('k', ['kk', 2], 0, kFormat);

addFormatToken('hmm', 0, 0, function () {
    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
});

addFormatToken('hmmss', 0, 0, function () {
    return (
        '' +
        hFormat.apply(this) +
        zeroFill(this.minutes(), 2) +
        zeroFill(this.seconds(), 2)
    );
});

addFormatToken('Hmm', 0, 0, function () {
    return '' + this.hours() + zeroFill(this.minutes(), 2);
});

addFormatToken('Hmmss', 0, 0, function () {
    return (
        '' +
        this.hours() +
        zeroFill(this.minutes(), 2) +
        zeroFill(this.seconds(), 2)
    );
});

function meridiem(token, lowercase) {
    addFormatToken(token, 0, 0, function () {
        return this.localeData().meridiem(
            this.hours(),
            this.minutes(),
            lowercase
        );
    });
}

meridiem('a', true);
meridiem('A', false);

// ALIASES

addUnitAlias('hour', 'h');

// PRIORITY
addUnitPriority('hour', 13);

// PARSING

function matchMeridiem(isStrict, locale) {
    return locale._meridiemParse;
}

addRegexToken('a', matchMeridiem);
addRegexToken('A', matchMeridiem);
addRegexToken('H', match1to2);
addRegexToken('h', match1to2);
addRegexToken('k', match1to2);
addRegexToken('HH', match1to2, match2);
addRegexToken('hh', match1to2, match2);
addRegexToken('kk', match1to2, match2);

addRegexToken('hmm', match3to4);
addRegexToken('hmmss', match5to6);
addRegexToken('Hmm', match3to4);
addRegexToken('Hmmss', match5to6);

addParseToken(['H', 'HH'], HOUR);
addParseToken(['k', 'kk'], function (input, array, config) {
    var kInput = toInt(input);
    array[HOUR] = kInput === 24 ? 0 : kInput;
});
addParseToken(['a', 'A'], function (input, array, config) {
    config._isPm = config._locale.isPM(input);
    config._meridiem = input;
});
addParseToken(['h', 'hh'], function (input, array, config) {
    array[HOUR] = toInt(input);
    getParsingFlags(config).bigHour = true;
});
addParseToken('hmm', function (input, array, config) {
    var pos = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos));
    array[MINUTE] = toInt(input.substr(pos));
    getParsingFlags(config).bigHour = true;
});
addParseToken('hmmss', function (input, array, config) {
    var pos1 = input.length - 4,
        pos2 = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos1));
    array[MINUTE] = toInt(input.substr(pos1, 2));
    array[SECOND] = toInt(input.substr(pos2));
    getParsingFlags(config).bigHour = true;
});
addParseToken('Hmm', function (input, array, config) {
    var pos = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos));
    array[MINUTE] = toInt(input.substr(pos));
});
addParseToken('Hmmss', function (input, array, config) {
    var pos1 = input.length - 4,
        pos2 = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos1));
    array[MINUTE] = toInt(input.substr(pos1, 2));
    array[SECOND] = toInt(input.substr(pos2));
});

// LOCALES

function localeIsPM(input) {
    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
    // Using charAt should be more compatible.
    return (input + '').toLowerCase().charAt(0) === 'p';
}

var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
    // Setting the hour should keep the time, because the user explicitly
    // specified which hour they want. So trying to maintain the same hour (in
    // a new timezone) makes sense. Adding/subtracting hours does not follow
    // this rule.
    getSetHour = makeGetSet('Hours', true);

function localeMeridiem(hours, minutes, isLower) {
    if (hours > 11) {
        return isLower ? 'pm' : 'PM';
    } else {
        return isLower ? 'am' : 'AM';
    }
}

var baseConfig = {
    calendar: defaultCalendar,
    longDateFormat: defaultLongDateFormat,
    invalidDate: defaultInvalidDate,
    ordinal: defaultOrdinal,
    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
    relativeTime: defaultRelativeTime,

    months: defaultLocaleMonths,
    monthsShort: defaultLocaleMonthsShort,

    week: defaultLocaleWeek,

    weekdays: defaultLocaleWeekdays,
    weekdaysMin: defaultLocaleWeekdaysMin,
    weekdaysShort: defaultLocaleWeekdaysShort,

    meridiemParse: defaultLocaleMeridiemParse,
};

// internal storage for locale config files
var locales = {},
    localeFamilies = {},
    globalLocale;

function commonPrefix(arr1, arr2) {
    var i,
        minl = Math.min(arr1.length, arr2.length);
    for (i = 0; i < minl; i += 1) {
        if (arr1[i] !== arr2[i]) {
            return i;
        }
    }
    return minl;
}

function normalizeLocale(key) {
    return key ? key.toLowerCase().replace('_', '-') : key;
}

// pick the locale from the array
// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
function chooseLocale(names) {
    var i = 0,
        j,
        next,
        locale,
        split;

    while (i < names.length) {
        split = normalizeLocale(names[i]).split('-');
        j = split.length;
        next = normalizeLocale(names[i + 1]);
        next = next ? next.split('-') : null;
        while (j > 0) {
            locale = loadLocale(split.slice(0, j).join('-'));
            if (locale) {
                return locale;
            }
            if (
                next &&
                next.length >= j &&
                commonPrefix(split, next) >= j - 1
            ) {
                //the next array item is better than a shallower substring of this one
                break;
            }
            j--;
        }
        i++;
    }
    return globalLocale;
}

function loadLocale(name) {
    var oldLocale = null,
        aliasedRequire;
    // TODO: Find a better way to register and load all the locales in Node
    if (
        locales[name] === undefined &&
        typeof module !== 'undefined' &&
        module &&
        module.exports
    ) {
        try {
            oldLocale = globalLocale._abbr;
            aliasedRequire = require;
            aliasedRequire('./locale/' + name);
            getSetGlobalLocale(oldLocale);
        } catch (e) {
            // mark as not found to avoid repeating expensive file require call causing high CPU
            // when trying to find en-US, en_US, en-us for every format call
            locales[name] = null; // null means not found
        }
    }
    return locales[name];
}

// This function will load locale and then set the global locale.  If
// no arguments are passed in, it will simply return the current global
// locale key.
function getSetGlobalLocale(key, values) {
    var data;
    if (key) {
        if (isUndefined(values)) {
            data = getLocale(key);
        } else {
            data = defineLocale(key, values);
        }

        if (data) {
            // moment.duration._locale = moment._locale = data;
            globalLocale = data;
        } else {
            if (typeof console !== 'undefined' && console.warn) {
                //warn user if arguments are passed but the locale could not be set
                console.warn(
                    'Locale ' + key + ' not found. Did you forget to load it?'
                );
            }
        }
    }

    return globalLocale._abbr;
}

function defineLocale(name, config) {
    if (config !== null) {
        var locale,
            parentConfig = baseConfig;
        config.abbr = name;
        if (locales[name] != null) {
            deprecateSimple(
                'defineLocaleOverride',
                'use moment.updateLocale(localeName, config) to change ' +
                    'an existing locale. moment.defineLocale(localeName, ' +
                    'config) should only be used for creating a new locale ' +
                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
            );
            parentConfig = locales[name]._config;
        } else if (config.parentLocale != null) {
            if (locales[config.parentLocale] != null) {
                parentConfig = locales[config.parentLocale]._config;
            } else {
                locale = loadLocale(config.parentLocale);
                if (locale != null) {
                    parentConfig = locale._config;
                } else {
                    if (!localeFamilies[config.parentLocale]) {
                        localeFamilies[config.parentLocale] = [];
                    }
                    localeFamilies[config.parentLocale].push({
                        name: name,
                        config: config,
                    });
                    return null;
                }
            }
        }
        locales[name] = new Locale(mergeConfigs(parentConfig, config));

        if (localeFamilies[name]) {
            localeFamilies[name].forEach(function (x) {
                defineLocale(x.name, x.config);
            });
        }

        // backwards compat for now: also set the locale
        // make sure we set the locale AFTER all child locales have been
        // created, so we won't end up with the child locale set.
        getSetGlobalLocale(name);

        return locales[name];
    } else {
        // useful for testing
        delete locales[name];
        return null;
    }
}

function updateLocale(name, config) {
    if (config != null) {
        var locale,
            tmpLocale,
            parentConfig = baseConfig;

        if (locales[name] != null && locales[name].parentLocale != null) {
            // Update existing child locale in-place to avoid memory-leaks
            locales[name].set(mergeConfigs(locales[name]._config, config));
        } else {
            // MERGE
            tmpLocale = loadLocale(name);
            if (tmpLocale != null) {
                parentConfig = tmpLocale._config;
            }
            config = mergeConfigs(parentConfig, config);
            if (tmpLocale == null) {
                // updateLocale is called for creating a new locale
                // Set abbr so it will have a name (getters return
                // undefined otherwise).
                config.abbr = name;
            }
            locale = new Locale(config);
            locale.parentLocale = locales[name];
            locales[name] = locale;
        }

        // backwards compat for now: also set the locale
        getSetGlobalLocale(name);
    } else {
        // pass null for config to unupdate, useful for tests
        if (locales[name] != null) {
            if (locales[name].parentLocale != null) {
                locales[name] = locales[name].parentLocale;
                if (name === getSetGlobalLocale()) {
                    getSetGlobalLocale(name);
                }
            } else if (locales[name] != null) {
                delete locales[name];
            }
        }
    }
    return locales[name];
}

// returns locale data
function getLocale(key) {
    var locale;

    if (key && key._locale && key._locale._abbr) {
        key = key._locale._abbr;
    }

    if (!key) {
        return globalLocale;
    }

    if (!isArray(key)) {
        //short-circuit everything else
        locale = loadLocale(key);
        if (locale) {
            return locale;
        }
        key = [key];
    }

    return chooseLocale(key);
}

function listLocales() {
    return keys(locales);
}

function checkOverflow(m) {
    var overflow,
        a = m._a;

    if (a && getParsingFlags(m).overflow === -2) {
        overflow =
            a[MONTH] < 0 || a[MONTH] > 11
                ? MONTH
                : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
                ? DATE
                : a[HOUR] < 0 ||
                  a[HOUR] > 24 ||
                  (a[HOUR] === 24 &&
                      (a[MINUTE] !== 0 ||
                          a[SECOND] !== 0 ||
                          a[MILLISECOND] !== 0))
                ? HOUR
                : a[MINUTE] < 0 || a[MINUTE] > 59
                ? MINUTE
                : a[SECOND] < 0 || a[SECOND] > 59
                ? SECOND
                : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
                ? MILLISECOND
                : -1;

        if (
            getParsingFlags(m)._overflowDayOfYear &&
            (overflow < YEAR || overflow > DATE)
        ) {
            overflow = DATE;
        }
        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
            overflow = WEEK;
        }
        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
            overflow = WEEKDAY;
        }

        getParsingFlags(m).overflow = overflow;
    }

    return m;
}

// iso 8601 regex
// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
    basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
    tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
    isoDates = [
        ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
        ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
        ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
        ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
        ['YYYY-DDD', /\d{4}-\d{3}/],
        ['YYYY-MM', /\d{4}-\d\d/, false],
        ['YYYYYYMMDD', /[+-]\d{10}/],
        ['YYYYMMDD', /\d{8}/],
        ['GGGG[W]WWE', /\d{4}W\d{3}/],
        ['GGGG[W]WW', /\d{4}W\d{2}/, false],
        ['YYYYDDD', /\d{7}/],
        ['YYYYMM', /\d{6}/, false],
        ['YYYY', /\d{4}/, false],
    ],
    // iso time formats and regexes
    isoTimes = [
        ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
        ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
        ['HH:mm:ss', /\d\d:\d\d:\d\d/],
        ['HH:mm', /\d\d:\d\d/],
        ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
        ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
        ['HHmmss', /\d\d\d\d\d\d/],
        ['HHmm', /\d\d\d\d/],
        ['HH', /\d\d/],
    ],
    aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
    rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
    obsOffsets = {
        UT: 0,
        GMT: 0,
        EDT: -4 * 60,
        EST: -5 * 60,
        CDT: -5 * 60,
        CST: -6 * 60,
        MDT: -6 * 60,
        MST: -7 * 60,
        PDT: -7 * 60,
        PST: -8 * 60,
    };

// date from iso format
function configFromISO(config) {
    var i,
        l,
        string = config._i,
        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
        allowTime,
        dateFormat,
        timeFormat,
        tzFormat;

    if (match) {
        getParsingFlags(config).iso = true;

        for (i = 0, l = isoDates.length; i < l; i++) {
            if (isoDates[i][1].exec(match[1])) {
                dateFormat = isoDates[i][0];
                allowTime = isoDates[i][2] !== false;
                break;
            }
        }
        if (dateFormat == null) {
            config._isValid = false;
            return;
        }
        if (match[3]) {
            for (i = 0, l = isoTimes.length; i < l; i++) {
                if (isoTimes[i][1].exec(match[3])) {
                    // match[2] should be 'T' or space
                    timeFormat = (match[2] || ' ') + isoTimes[i][0];
                    break;
                }
            }
            if (timeFormat == null) {
                config._isValid = false;
                return;
            }
        }
        if (!allowTime && timeFormat != null) {
            config._isValid = false;
            return;
        }
        if (match[4]) {
            if (tzRegex.exec(match[4])) {
                tzFormat = 'Z';
            } else {
                config._isValid = false;
                return;
            }
        }
        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
        configFromStringAndFormat(config);
    } else {
        config._isValid = false;
    }
}

function extractFromRFC2822Strings(
    yearStr,
    monthStr,
    dayStr,
    hourStr,
    minuteStr,
    secondStr
) {
    var result = [
        untruncateYear(yearStr),
        defaultLocaleMonthsShort.indexOf(monthStr),
        parseInt(dayStr, 10),
        parseInt(hourStr, 10),
        parseInt(minuteStr, 10),
    ];

    if (secondStr) {
        result.push(parseInt(secondStr, 10));
    }

    return result;
}

function untruncateYear(yearStr) {
    var year = parseInt(yearStr, 10);
    if (year <= 49) {
        return 2000 + year;
    } else if (year <= 999) {
        return 1900 + year;
    }
    return year;
}

function preprocessRFC2822(s) {
    // Remove comments and folding whitespace and replace multiple-spaces with a single space
    return s
        .replace(/\([^)]*\)|[\n\t]/g, ' ')
        .replace(/(\s\s+)/g, ' ')
        .replace(/^\s\s*/, '')
        .replace(/\s\s*$/, '');
}

function checkWeekday(weekdayStr, parsedInput, config) {
    if (weekdayStr) {
        // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
        var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
            weekdayActual = new Date(
                parsedInput[0],
                parsedInput[1],
                parsedInput[2]
            ).getDay();
        if (weekdayProvided !== weekdayActual) {
            getParsingFlags(config).weekdayMismatch = true;
            config._isValid = false;
            return false;
        }
    }
    return true;
}

function calculateOffset(obsOffset, militaryOffset, numOffset) {
    if (obsOffset) {
        return obsOffsets[obsOffset];
    } else if (militaryOffset) {
        // the only allowed military tz is Z
        return 0;
    } else {
        var hm = parseInt(numOffset, 10),
            m = hm % 100,
            h = (hm - m) / 100;
        return h * 60 + m;
    }
}

// date and time from ref 2822 format
function configFromRFC2822(config) {
    var match = rfc2822.exec(preprocessRFC2822(config._i)),
        parsedArray;
    if (match) {
        parsedArray = extractFromRFC2822Strings(
            match[4],
            match[3],
            match[2],
            match[5],
            match[6],
            match[7]
        );
        if (!checkWeekday(match[1], parsedArray, config)) {
            return;
        }

        config._a = parsedArray;
        config._tzm = calculateOffset(match[8], match[9], match[10]);

        config._d = createUTCDate.apply(null, config._a);
        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);

        getParsingFlags(config).rfc2822 = true;
    } else {
        config._isValid = false;
    }
}

// date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
function configFromString(config) {
    var matched = aspNetJsonRegex.exec(config._i);
    if (matched !== null) {
        config._d = new Date(+matched[1]);
        return;
    }

    configFromISO(config);
    if (config._isValid === false) {
        delete config._isValid;
    } else {
        return;
    }

    configFromRFC2822(config);
    if (config._isValid === false) {
        delete config._isValid;
    } else {
        return;
    }

    if (config._strict) {
        config._isValid = false;
    } else {
        // Final attempt, use Input Fallback
        hooks.createFromInputFallback(config);
    }
}

hooks.createFromInputFallback = deprecate(
    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
        'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
    function (config) {
        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
    }
);

// Pick the first defined of two or three arguments.
function defaults(a, b, c) {
    if (a != null) {
        return a;
    }
    if (b != null) {
        return b;
    }
    return c;
}

function currentDateArray(config) {
    // hooks is actually the exported moment object
    var nowValue = new Date(hooks.now());
    if (config._useUTC) {
        return [
            nowValue.getUTCFullYear(),
            nowValue.getUTCMonth(),
            nowValue.getUTCDate(),
        ];
    }
    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
}

// convert an array to a date.
// the array should mirror the parameters below
// note: all values past the year are optional and will default to the lowest possible value.
// [year, month, day , hour, minute, second, millisecond]
function configFromArray(config) {
    var i,
        date,
        input = [],
        currentDate,
        expectedWeekday,
        yearToUse;

    if (config._d) {
        return;
    }

    currentDate = currentDateArray(config);

    //compute day of the year from weeks and weekdays
    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
        dayOfYearFromWeekInfo(config);
    }

    //if the day of the year is set, figure out what it is
    if (config._dayOfYear != null) {
        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);

        if (
            config._dayOfYear > daysInYear(yearToUse) ||
            config._dayOfYear === 0
        ) {
            getParsingFlags(config)._overflowDayOfYear = true;
        }

        date = createUTCDate(yearToUse, 0, config._dayOfYear);
        config._a[MONTH] = date.getUTCMonth();
        config._a[DATE] = date.getUTCDate();
    }

    // Default to current date.
    // * if no year, month, day of month are given, default to today
    // * if day of month is given, default month and year
    // * if month is given, default only year
    // * if year is given, don't default anything
    for (i = 0; i < 3 && config._a[i] == null; ++i) {
        config._a[i] = input[i] = currentDate[i];
    }

    // Zero out whatever was not defaulted, including time
    for (; i < 7; i++) {
        config._a[i] = input[i] =
            config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
    }

    // Check for 24:00:00.000
    if (
        config._a[HOUR] === 24 &&
        config._a[MINUTE] === 0 &&
        config._a[SECOND] === 0 &&
        config._a[MILLISECOND] === 0
    ) {
        config._nextDay = true;
        config._a[HOUR] = 0;
    }

    config._d = (config._useUTC ? createUTCDate : createDate).apply(
        null,
        input
    );
    expectedWeekday = config._useUTC
        ? config._d.getUTCDay()
        : config._d.getDay();

    // Apply timezone offset from input. The actual utcOffset can be changed
    // with parseZone.
    if (config._tzm != null) {
        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
    }

    if (config._nextDay) {
        config._a[HOUR] = 24;
    }

    // check for mismatching day of week
    if (
        config._w &&
        typeof config._w.d !== 'undefined' &&
        config._w.d !== expectedWeekday
    ) {
        getParsingFlags(config).weekdayMismatch = true;
    }
}

function dayOfYearFromWeekInfo(config) {
    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;

    w = config._w;
    if (w.GG != null || w.W != null || w.E != null) {
        dow = 1;
        doy = 4;

        // TODO: We need to take the current isoWeekYear, but that depends on
        // how we interpret now (local, utc, fixed offset). So create
        // a now version of current config (take local/utc/offset flags, and
        // create now).
        weekYear = defaults(
            w.GG,
            config._a[YEAR],
            weekOfYear(createLocal(), 1, 4).year
        );
        week = defaults(w.W, 1);
        weekday = defaults(w.E, 1);
        if (weekday < 1 || weekday > 7) {
            weekdayOverflow = true;
        }
    } else {
        dow = config._locale._week.dow;
        doy = config._locale._week.doy;

        curWeek = weekOfYear(createLocal(), dow, doy);

        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);

        // Default to current week.
        week = defaults(w.w, curWeek.week);

        if (w.d != null) {
            // weekday -- low day numbers are considered next week
            weekday = w.d;
            if (weekday < 0 || weekday > 6) {
                weekdayOverflow = true;
            }
        } else if (w.e != null) {
            // local weekday -- counting starts from beginning of week
            weekday = w.e + dow;
            if (w.e < 0 || w.e > 6) {
                weekdayOverflow = true;
            }
        } else {
            // default to beginning of week
            weekday = dow;
        }
    }
    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
        getParsingFlags(config)._overflowWeeks = true;
    } else if (weekdayOverflow != null) {
        getParsingFlags(config)._overflowWeekday = true;
    } else {
        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
        config._a[YEAR] = temp.year;
        config._dayOfYear = temp.dayOfYear;
    }
}

// constant that refers to the ISO standard
hooks.ISO_8601 = function () {};

// constant that refers to the RFC 2822 form
hooks.RFC_2822 = function () {};

// date from string and format string
function configFromStringAndFormat(config) {
    // TODO: Move this to another part of the creation flow to prevent circular deps
    if (config._f === hooks.ISO_8601) {
        configFromISO(config);
        return;
    }
    if (config._f === hooks.RFC_2822) {
        configFromRFC2822(config);
        return;
    }
    config._a = [];
    getParsingFlags(config).empty = true;

    // This array is used to make a Date, either with `new Date` or `Date.UTC`
    var string = '' + config._i,
        i,
        parsedInput,
        tokens,
        token,
        skipped,
        stringLength = string.length,
        totalParsedInputLength = 0,
        era;

    tokens =
        expandFormat(config._f, config._locale).match(formattingTokens) || [];

    for (i = 0; i < tokens.length; i++) {
        token = tokens[i];
        parsedInput = (string.match(getParseRegexForToken(token, config)) ||
            [])[0];
        if (parsedInput) {
            skipped = string.substr(0, string.indexOf(parsedInput));
            if (skipped.length > 0) {
                getParsingFlags(config).unusedInput.push(skipped);
            }
            string = string.slice(
                string.indexOf(parsedInput) + parsedInput.length
            );
            totalParsedInputLength += parsedInput.length;
        }
        // don't parse if it's not a known token
        if (formatTokenFunctions[token]) {
            if (parsedInput) {
                getParsingFlags(config).empty = false;
            } else {
                getParsingFlags(config).unusedTokens.push(token);
            }
            addTimeToArrayFromToken(token, parsedInput, config);
        } else if (config._strict && !parsedInput) {
            getParsingFlags(config).unusedTokens.push(token);
        }
    }

    // add remaining unparsed input length to the string
    getParsingFlags(config).charsLeftOver =
        stringLength - totalParsedInputLength;
    if (string.length > 0) {
        getParsingFlags(config).unusedInput.push(string);
    }

    // clear _12h flag if hour is <= 12
    if (
        config._a[HOUR] <= 12 &&
        getParsingFlags(config).bigHour === true &&
        config._a[HOUR] > 0
    ) {
        getParsingFlags(config).bigHour = undefined;
    }

    getParsingFlags(config).parsedDateParts = config._a.slice(0);
    getParsingFlags(config).meridiem = config._meridiem;
    // handle meridiem
    config._a[HOUR] = meridiemFixWrap(
        config._locale,
        config._a[HOUR],
        config._meridiem
    );

    // handle era
    era = getParsingFlags(config).era;
    if (era !== null) {
        config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
    }

    configFromArray(config);
    checkOverflow(config);
}

function meridiemFixWrap(locale, hour, meridiem) {
    var isPm;

    if (meridiem == null) {
        // nothing to do
        return hour;
    }
    if (locale.meridiemHour != null) {
        return locale.meridiemHour(hour, meridiem);
    } else if (locale.isPM != null) {
        // Fallback
        isPm = locale.isPM(meridiem);
        if (isPm && hour < 12) {
            hour += 12;
        }
        if (!isPm && hour === 12) {
            hour = 0;
        }
        return hour;
    } else {
        // this is not supposed to happen
        return hour;
    }
}

// date from string and array of format strings
function configFromStringAndArray(config) {
    var tempConfig,
        bestMoment,
        scoreToBeat,
        i,
        currentScore,
        validFormatFound,
        bestFormatIsValid = false;

    if (config._f.length === 0) {
        getParsingFlags(config).invalidFormat = true;
        config._d = new Date(NaN);
        return;
    }

    for (i = 0; i < config._f.length; i++) {
        currentScore = 0;
        validFormatFound = false;
        tempConfig = copyConfig({}, config);
        if (config._useUTC != null) {
            tempConfig._useUTC = config._useUTC;
        }
        tempConfig._f = config._f[i];
        configFromStringAndFormat(tempConfig);

        if (isValid(tempConfig)) {
            validFormatFound = true;
        }

        // if there is any input that was not parsed add a penalty for that format
        currentScore += getParsingFlags(tempConfig).charsLeftOver;

        //or tokens
        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;

        getParsingFlags(tempConfig).score = currentScore;

        if (!bestFormatIsValid) {
            if (
                scoreToBeat == null ||
                currentScore < scoreToBeat ||
                validFormatFound
            ) {
                scoreToBeat = currentScore;
                bestMoment = tempConfig;
                if (validFormatFound) {
                    bestFormatIsValid = true;
                }
            }
        } else {
            if (currentScore < scoreToBeat) {
                scoreToBeat = currentScore;
                bestMoment = tempConfig;
            }
        }
    }

    extend(config, bestMoment || tempConfig);
}

function configFromObject(config) {
    if (config._d) {
        return;
    }

    var i = normalizeObjectUnits(config._i),
        dayOrDate = i.day === undefined ? i.date : i.day;
    config._a = map(
        [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
        function (obj) {
            return obj && parseInt(obj, 10);
        }
    );

    configFromArray(config);
}

function createFromConfig(config) {
    var res = new Moment(checkOverflow(prepareConfig(config)));
    if (res._nextDay) {
        // Adding is smart enough around DST
        res.add(1, 'd');
        res._nextDay = undefined;
    }

    return res;
}

function prepareConfig(config) {
    var input = config._i,
        format = config._f;

    config._locale = config._locale || getLocale(config._l);

    if (input === null || (format === undefined && input === '')) {
        return createInvalid({ nullInput: true });
    }

    if (typeof input === 'string') {
        config._i = input = config._locale.preparse(input);
    }

    if (isMoment(input)) {
        return new Moment(checkOverflow(input));
    } else if (isDate(input)) {
        config._d = input;
    } else if (isArray(format)) {
        configFromStringAndArray(config);
    } else if (format) {
        configFromStringAndFormat(config);
    } else {
        configFromInput(config);
    }

    if (!isValid(config)) {
        config._d = null;
    }

    return config;
}

function configFromInput(config) {
    var input = config._i;
    if (isUndefined(input)) {
        config._d = new Date(hooks.now());
    } else if (isDate(input)) {
        config._d = new Date(input.valueOf());
    } else if (typeof input === 'string') {
        configFromString(config);
    } else if (isArray(input)) {
        config._a = map(input.slice(0), function (obj) {
            return parseInt(obj, 10);
        });
        configFromArray(config);
    } else if (isObject(input)) {
        configFromObject(config);
    } else if (isNumber(input)) {
        // from milliseconds
        config._d = new Date(input);
    } else {
        hooks.createFromInputFallback(config);
    }
}

function createLocalOrUTC(input, format, locale, strict, isUTC) {
    var c = {};

    if (format === true || format === false) {
        strict = format;
        format = undefined;
    }

    if (locale === true || locale === false) {
        strict = locale;
        locale = undefined;
    }

    if (
        (isObject(input) && isObjectEmpty(input)) ||
        (isArray(input) && input.length === 0)
    ) {
        input = undefined;
    }
    // object construction must be done this way.
    // https://github.com/moment/moment/issues/1423
    c._isAMomentObject = true;
    c._useUTC = c._isUTC = isUTC;
    c._l = locale;
    c._i = input;
    c._f = format;
    c._strict = strict;

    return createFromConfig(c);
}

function createLocal(input, format, locale, strict) {
    return createLocalOrUTC(input, format, locale, strict, false);
}

var prototypeMin = deprecate(
        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
        function () {
            var other = createLocal.apply(null, arguments);
            if (this.isValid() && other.isValid()) {
                return other < this ? this : other;
            } else {
                return createInvalid();
            }
        }
    ),
    prototypeMax = deprecate(
        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
        function () {
            var other = createLocal.apply(null, arguments);
            if (this.isValid() && other.isValid()) {
                return other > this ? this : other;
            } else {
                return createInvalid();
            }
        }
    );

// Pick a moment m from moments so that m[fn](other) is true for all
// other. This relies on the function fn to be transitive.
//
// moments should either be an array of moment objects or an array, whose
// first element is an array of moment objects.
function pickBy(fn, moments) {
    var res, i;
    if (moments.length === 1 && isArray(moments[0])) {
        moments = moments[0];
    }
    if (!moments.length) {
        return createLocal();
    }
    res = moments[0];
    for (i = 1; i < moments.length; ++i) {
        if (!moments[i].isValid() || moments[i][fn](res)) {
            res = moments[i];
        }
    }
    return res;
}

// TODO: Use [].sort instead?
function min() {
    var args = [].slice.call(arguments, 0);

    return pickBy('isBefore', args);
}

function max() {
    var args = [].slice.call(arguments, 0);

    return pickBy('isAfter', args);
}

var now = function () {
    return Date.now ? Date.now() : +new Date();
};

var ordering = [
    'year',
    'quarter',
    'month',
    'week',
    'day',
    'hour',
    'minute',
    'second',
    'millisecond',
];

function isDurationValid(m) {
    var key,
        unitHasDecimal = false,
        i;
    for (key in m) {
        if (
            hasOwnProp(m, key) &&
            !(
                indexOf.call(ordering, key) !== -1 &&
                (m[key] == null || !isNaN(m[key]))
            )
        ) {
            return false;
        }
    }

    for (i = 0; i < ordering.length; ++i) {
        if (m[ordering[i]]) {
            if (unitHasDecimal) {
                return false; // only allow non-integers for smallest unit
            }
            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
                unitHasDecimal = true;
            }
        }
    }

    return true;
}

function isValid$1() {
    return this._isValid;
}

function createInvalid$1() {
    return createDuration(NaN);
}

function Duration(duration) {
    var normalizedInput = normalizeObjectUnits(duration),
        years = normalizedInput.year || 0,
        quarters = normalizedInput.quarter || 0,
        months = normalizedInput.month || 0,
        weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
        days = normalizedInput.day || 0,
        hours = normalizedInput.hour || 0,
        minutes = normalizedInput.minute || 0,
        seconds = normalizedInput.second || 0,
        milliseconds = normalizedInput.millisecond || 0;

    this._isValid = isDurationValid(normalizedInput);

    // representation for dateAddRemove
    this._milliseconds =
        +milliseconds +
        seconds * 1e3 + // 1000
        minutes * 6e4 + // 1000 * 60
        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
    // Because of dateAddRemove treats 24 hours as different from a
    // day when working around DST, we need to store them separately
    this._days = +days + weeks * 7;
    // It is impossible to translate months into days without knowing
    // which months you are are talking about, so we have to store
    // it separately.
    this._months = +months + quarters * 3 + years * 12;

    this._data = {};

    this._locale = getLocale();

    this._bubble();
}

function isDuration(obj) {
    return obj instanceof Duration;
}

function absRound(number) {
    if (number < 0) {
        return Math.round(-1 * number) * -1;
    } else {
        return Math.round(number);
    }
}

// compare two arrays, return the number of differences
function compareArrays(array1, array2, dontConvert) {
    var len = Math.min(array1.length, array2.length),
        lengthDiff = Math.abs(array1.length - array2.length),
        diffs = 0,
        i;
    for (i = 0; i < len; i++) {
        if (
            (dontConvert && array1[i] !== array2[i]) ||
            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
        ) {
            diffs++;
        }
    }
    return diffs + lengthDiff;
}

// FORMATTING

function offset(token, separator) {
    addFormatToken(token, 0, 0, function () {
        var offset = this.utcOffset(),
            sign = '+';
        if (offset < 0) {
            offset = -offset;
            sign = '-';
        }
        return (
            sign +
            zeroFill(~~(offset / 60), 2) +
            separator +
            zeroFill(~~offset % 60, 2)
        );
    });
}

offset('Z', ':');
offset('ZZ', '');

// PARSING

addRegexToken('Z', matchShortOffset);
addRegexToken('ZZ', matchShortOffset);
addParseToken(['Z', 'ZZ'], function (input, array, config) {
    config._useUTC = true;
    config._tzm = offsetFromString(matchShortOffset, input);
});

// HELPERS

// timezone chunker
// '+10:00' > ['10',  '00']
// '-1530'  > ['-15', '30']
var chunkOffset = /([\+\-]|\d\d)/gi;

function offsetFromString(matcher, string) {
    var matches = (string || '').match(matcher),
        chunk,
        parts,
        minutes;

    if (matches === null) {
        return null;
    }

    chunk = matches[matches.length - 1] || [];
    parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
    minutes = +(parts[1] * 60) + toInt(parts[2]);

    return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
}

// Return a moment from input, that is local/utc/zone equivalent to model.
function cloneWithOffset(input, model) {
    var res, diff;
    if (model._isUTC) {
        res = model.clone();
        diff =
            (isMoment(input) || isDate(input)
                ? input.valueOf()
                : createLocal(input).valueOf()) - res.valueOf();
        // Use low-level api, because this fn is low-level api.
        res._d.setTime(res._d.valueOf() + diff);
        hooks.updateOffset(res, false);
        return res;
    } else {
        return createLocal(input).local();
    }
}

function getDateOffset(m) {
    // On Firefox.24 Date#getTimezoneOffset returns a floating point.
    // https://github.com/moment/moment/pull/1871
    return -Math.round(m._d.getTimezoneOffset());
}

// HOOKS

// This function will be called whenever a moment is mutated.
// It is intended to keep the offset in sync with the timezone.
hooks.updateOffset = function () {};

// MOMENTS

// keepLocalTime = true means only change the timezone, without
// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
// +0200, so we adjust the time as needed, to be valid.
//
// Keeping the time actually adds/subtracts (one hour)
// from the actual represented time. That is why we call updateOffset
// a second time. In case it wants us to change the offset again
// _changeInProgress == true case, then we have to adjust, because
// there is no such time in the given timezone.
function getSetOffset(input, keepLocalTime, keepMinutes) {
    var offset = this._offset || 0,
        localAdjust;
    if (!this.isValid()) {
        return input != null ? this : NaN;
    }
    if (input != null) {
        if (typeof input === 'string') {
            input = offsetFromString(matchShortOffset, input);
            if (input === null) {
                return this;
            }
        } else if (Math.abs(input) < 16 && !keepMinutes) {
            input = input * 60;
        }
        if (!this._isUTC && keepLocalTime) {
            localAdjust = getDateOffset(this);
        }
        this._offset = input;
        this._isUTC = true;
        if (localAdjust != null) {
            this.add(localAdjust, 'm');
        }
        if (offset !== input) {
            if (!keepLocalTime || this._changeInProgress) {
                addSubtract(
                    this,
                    createDuration(input - offset, 'm'),
                    1,
                    false
                );
            } else if (!this._changeInProgress) {
                this._changeInProgress = true;
                hooks.updateOffset(this, true);
                this._changeInProgress = null;
            }
        }
        return this;
    } else {
        return this._isUTC ? offset : getDateOffset(this);
    }
}

function getSetZone(input, keepLocalTime) {
    if (input != null) {
        if (typeof input !== 'string') {
            input = -input;
        }

        this.utcOffset(input, keepLocalTime);

        return this;
    } else {
        return -this.utcOffset();
    }
}

function setOffsetToUTC(keepLocalTime) {
    return this.utcOffset(0, keepLocalTime);
}

function setOffsetToLocal(keepLocalTime) {
    if (this._isUTC) {
        this.utcOffset(0, keepLocalTime);
        this._isUTC = false;

        if (keepLocalTime) {
            this.subtract(getDateOffset(this), 'm');
        }
    }
    return this;
}

function setOffsetToParsedOffset() {
    if (this._tzm != null) {
        this.utcOffset(this._tzm, false, true);
    } else if (typeof this._i === 'string') {
        var tZone = offsetFromString(matchOffset, this._i);
        if (tZone != null) {
            this.utcOffset(tZone);
        } else {
            this.utcOffset(0, true);
        }
    }
    return this;
}

function hasAlignedHourOffset(input) {
    if (!this.isValid()) {
        return false;
    }
    input = input ? createLocal(input).utcOffset() : 0;

    return (this.utcOffset() - input) % 60 === 0;
}

function isDaylightSavingTime() {
    return (
        this.utcOffset() > this.clone().month(0).utcOffset() ||
        this.utcOffset() > this.clone().month(5).utcOffset()
    );
}

function isDaylightSavingTimeShifted() {
    if (!isUndefined(this._isDSTShifted)) {
        return this._isDSTShifted;
    }

    var c = {},
        other;

    copyConfig(c, this);
    c = prepareConfig(c);

    if (c._a) {
        other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
        this._isDSTShifted =
            this.isValid() && compareArrays(c._a, other.toArray()) > 0;
    } else {
        this._isDSTShifted = false;
    }

    return this._isDSTShifted;
}

function isLocal() {
    return this.isValid() ? !this._isUTC : false;
}

function isUtcOffset() {
    return this.isValid() ? this._isUTC : false;
}

function isUtc() {
    return this.isValid() ? this._isUTC && this._offset === 0 : false;
}

// ASP.NET json date format regex
var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
    // and further modified to allow for strings containing both week and day
    isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;

function createDuration(input, key) {
    var duration = input,
        // matching against regexp is expensive, do it on demand
        match = null,
        sign,
        ret,
        diffRes;

    if (isDuration(input)) {
        duration = {
            ms: input._milliseconds,
            d: input._days,
            M: input._months,
        };
    } else if (isNumber(input) || !isNaN(+input)) {
        duration = {};
        if (key) {
            duration[key] = +input;
        } else {
            duration.milliseconds = +input;
        }
    } else if ((match = aspNetRegex.exec(input))) {
        sign = match[1] === '-' ? -1 : 1;
        duration = {
            y: 0,
            d: toInt(match[DATE]) * sign,
            h: toInt(match[HOUR]) * sign,
            m: toInt(match[MINUTE]) * sign,
            s: toInt(match[SECOND]) * sign,
            ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
        };
    } else if ((match = isoRegex.exec(input))) {
        sign = match[1] === '-' ? -1 : 1;
        duration = {
            y: parseIso(match[2], sign),
            M: parseIso(match[3], sign),
            w: parseIso(match[4], sign),
            d: parseIso(match[5], sign),
            h: parseIso(match[6], sign),
            m: parseIso(match[7], sign),
            s: parseIso(match[8], sign),
        };
    } else if (duration == null) {
        // checks for null or undefined
        duration = {};
    } else if (
        typeof duration === 'object' &&
        ('from' in duration || 'to' in duration)
    ) {
        diffRes = momentsDifference(
            createLocal(duration.from),
            createLocal(duration.to)
        );

        duration = {};
        duration.ms = diffRes.milliseconds;
        duration.M = diffRes.months;
    }

    ret = new Duration(duration);

    if (isDuration(input) && hasOwnProp(input, '_locale')) {
        ret._locale = input._locale;
    }

    if (isDuration(input) && hasOwnProp(input, '_isValid')) {
        ret._isValid = input._isValid;
    }

    return ret;
}

createDuration.fn = Duration.prototype;
createDuration.invalid = createInvalid$1;

function parseIso(inp, sign) {
    // We'd normally use ~~inp for this, but unfortunately it also
    // converts floats to ints.
    // inp may be undefined, so careful calling replace on it.
    var res = inp && parseFloat(inp.replace(',', '.'));
    // apply sign while we're at it
    return (isNaN(res) ? 0 : res) * sign;
}

function positiveMomentsDifference(base, other) {
    var res = {};

    res.months =
        other.month() - base.month() + (other.year() - base.year()) * 12;
    if (base.clone().add(res.months, 'M').isAfter(other)) {
        --res.months;
    }

    res.milliseconds = +other - +base.clone().add(res.months, 'M');

    return res;
}

function momentsDifference(base, other) {
    var res;
    if (!(base.isValid() && other.isValid())) {
        return { milliseconds: 0, months: 0 };
    }

    other = cloneWithOffset(other, base);
    if (base.isBefore(other)) {
        res = positiveMomentsDifference(base, other);
    } else {
        res = positiveMomentsDifference(other, base);
        res.milliseconds = -res.milliseconds;
        res.months = -res.months;
    }

    return res;
}

// TODO: remove 'name' arg after deprecation is removed
function createAdder(direction, name) {
    return function (val, period) {
        var dur, tmp;
        //invert the arguments, but complain about it
        if (period !== null && !isNaN(+period)) {
            deprecateSimple(
                name,
                'moment().' +
                    name +
                    '(period, number) is deprecated. Please use moment().' +
                    name +
                    '(number, period). ' +
                    'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
            );
            tmp = val;
            val = period;
            period = tmp;
        }

        dur = createDuration(val, period);
        addSubtract(this, dur, direction);
        return this;
    };
}

function addSubtract(mom, duration, isAdding, updateOffset) {
    var milliseconds = duration._milliseconds,
        days = absRound(duration._days),
        months = absRound(duration._months);

    if (!mom.isValid()) {
        // No op
        return;
    }

    updateOffset = updateOffset == null ? true : updateOffset;

    if (months) {
        setMonth(mom, get(mom, 'Month') + months * isAdding);
    }
    if (days) {
        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
    }
    if (milliseconds) {
        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
    }
    if (updateOffset) {
        hooks.updateOffset(mom, days || months);
    }
}

var add = createAdder(1, 'add'),
    subtract = createAdder(-1, 'subtract');

function isString(input) {
    return typeof input === 'string' || input instanceof String;
}

// type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
function isMomentInput(input) {
    return (
        isMoment(input) ||
        isDate(input) ||
        isString(input) ||
        isNumber(input) ||
        isNumberOrStringArray(input) ||
        isMomentInputObject(input) ||
        input === null ||
        input === undefined
    );
}

function isMomentInputObject(input) {
    var objectTest = isObject(input) && !isObjectEmpty(input),
        propertyTest = false,
        properties = [
            'years',
            'year',
            'y',
            'months',
            'month',
            'M',
            'days',
            'day',
            'd',
            'dates',
            'date',
            'D',
            'hours',
            'hour',
            'h',
            'minutes',
            'minute',
            'm',
            'seconds',
            'second',
            's',
            'milliseconds',
            'millisecond',
            'ms',
        ],
        i,
        property;

    for (i = 0; i < properties.length; i += 1) {
        property = properties[i];
        propertyTest = propertyTest || hasOwnProp(input, property);
    }

    return objectTest && propertyTest;
}

function isNumberOrStringArray(input) {
    var arrayTest = isArray(input),
        dataTypeTest = false;
    if (arrayTest) {
        dataTypeTest =
            input.filter(function (item) {
                return !isNumber(item) && isString(input);
            }).length === 0;
    }
    return arrayTest && dataTypeTest;
}

function isCalendarSpec(input) {
    var objectTest = isObject(input) && !isObjectEmpty(input),
        propertyTest = false,
        properties = [
            'sameDay',
            'nextDay',
            'lastDay',
            'nextWeek',
            'lastWeek',
            'sameElse',
        ],
        i,
        property;

    for (i = 0; i < properties.length; i += 1) {
        property = properties[i];
        propertyTest = propertyTest || hasOwnProp(input, property);
    }

    return objectTest && propertyTest;
}

function getCalendarFormat(myMoment, now) {
    var diff = myMoment.diff(now, 'days', true);
    return diff < -6
        ? 'sameElse'
        : diff < -1
        ? 'lastWeek'
        : diff < 0
        ? 'lastDay'
        : diff < 1
        ? 'sameDay'
        : diff < 2
        ? 'nextDay'
        : diff < 7
        ? 'nextWeek'
        : 'sameElse';
}

function calendar$1(time, formats) {
    // Support for single parameter, formats only overload to the calendar function
    if (arguments.length === 1) {
        if (!arguments[0]) {
            time = undefined;
            formats = undefined;
        } else if (isMomentInput(arguments[0])) {
            time = arguments[0];
            formats = undefined;
        } else if (isCalendarSpec(arguments[0])) {
            formats = arguments[0];
            time = undefined;
        }
    }
    // We want to compare the start of today, vs this.
    // Getting start-of-today depends on whether we're local/utc/offset or not.
    var now = time || createLocal(),
        sod = cloneWithOffset(now, this).startOf('day'),
        format = hooks.calendarFormat(this, sod) || 'sameElse',
        output =
            formats &&
            (isFunction(formats[format])
                ? formats[format].call(this, now)
                : formats[format]);

    return this.format(
        output || this.localeData().calendar(format, this, createLocal(now))
    );
}

function clone() {
    return new Moment(this);
}

function isAfter(input, units) {
    var localInput = isMoment(input) ? input : createLocal(input);
    if (!(this.isValid() && localInput.isValid())) {
        return false;
    }
    units = normalizeUnits(units) || 'millisecond';
    if (units === 'millisecond') {
        return this.valueOf() > localInput.valueOf();
    } else {
        return localInput.valueOf() < this.clone().startOf(units).valueOf();
    }
}

function isBefore(input, units) {
    var localInput = isMoment(input) ? input : createLocal(input);
    if (!(this.isValid() && localInput.isValid())) {
        return false;
    }
    units = normalizeUnits(units) || 'millisecond';
    if (units === 'millisecond') {
        return this.valueOf() < localInput.valueOf();
    } else {
        return this.clone().endOf(units).valueOf() < localInput.valueOf();
    }
}

function isBetween(from, to, units, inclusivity) {
    var localFrom = isMoment(from) ? from : createLocal(from),
        localTo = isMoment(to) ? to : createLocal(to);
    if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
        return false;
    }
    inclusivity = inclusivity || '()';
    return (
        (inclusivity[0] === '('
            ? this.isAfter(localFrom, units)
            : !this.isBefore(localFrom, units)) &&
        (inclusivity[1] === ')'
            ? this.isBefore(localTo, units)
            : !this.isAfter(localTo, units))
    );
}

function isSame(input, units) {
    var localInput = isMoment(input) ? input : createLocal(input),
        inputMs;
    if (!(this.isValid() && localInput.isValid())) {
        return false;
    }
    units = normalizeUnits(units) || 'millisecond';
    if (units === 'millisecond') {
        return this.valueOf() === localInput.valueOf();
    } else {
        inputMs = localInput.valueOf();
        return (
            this.clone().startOf(units).valueOf() <= inputMs &&
            inputMs <= this.clone().endOf(units).valueOf()
        );
    }
}

function isSameOrAfter(input, units) {
    return this.isSame(input, units) || this.isAfter(input, units);
}

function isSameOrBefore(input, units) {
    return this.isSame(input, units) || this.isBefore(input, units);
}

function diff(input, units, asFloat) {
    var that, zoneDelta, output;

    if (!this.isValid()) {
        return NaN;
    }

    that = cloneWithOffset(input, this);

    if (!that.isValid()) {
        return NaN;
    }

    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;

    units = normalizeUnits(units);

    switch (units) {
        case 'year':
            output = monthDiff(this, that) / 12;
            break;
        case 'month':
            output = monthDiff(this, that);
            break;
        case 'quarter':
            output = monthDiff(this, that) / 3;
            break;
        case 'second':
            output = (this - that) / 1e3;
            break; // 1000
        case 'minute':
            output = (this - that) / 6e4;
            break; // 1000 * 60
        case 'hour':
            output = (this - that) / 36e5;
            break; // 1000 * 60 * 60
        case 'day':
            output = (this - that - zoneDelta) / 864e5;
            break; // 1000 * 60 * 60 * 24, negate dst
        case 'week':
            output = (this - that - zoneDelta) / 6048e5;
            break; // 1000 * 60 * 60 * 24 * 7, negate dst
        default:
            output = this - that;
    }

    return asFloat ? output : absFloor(output);
}

function monthDiff(a, b) {
    if (a.date() < b.date()) {
        // end-of-month calculations work correct when the start month has more
        // days than the end month.
        return -monthDiff(b, a);
    }
    // difference in months
    var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
        // b is in (anchor - 1 month, anchor + 1 month)
        anchor = a.clone().add(wholeMonthDiff, 'months'),
        anchor2,
        adjust;

    if (b - anchor < 0) {
        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
        // linear across the month
        adjust = (b - anchor) / (anchor - anchor2);
    } else {
        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
        // linear across the month
        adjust = (b - anchor) / (anchor2 - anchor);
    }

    //check for negative zero, return zero if negative zero
    return -(wholeMonthDiff + adjust) || 0;
}

hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';

function toString() {
    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
}

function toISOString(keepOffset) {
    if (!this.isValid()) {
        return null;
    }
    var utc = keepOffset !== true,
        m = utc ? this.clone().utc() : this;
    if (m.year() < 0 || m.year() > 9999) {
        return formatMoment(
            m,
            utc
                ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
                : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
        );
    }
    if (isFunction(Date.prototype.toISOString)) {
        // native implementation is ~50x faster, use it when we can
        if (utc) {
            return this.toDate().toISOString();
        } else {
            return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
                .toISOString()
                .replace('Z', formatMoment(m, 'Z'));
        }
    }
    return formatMoment(
        m,
        utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
    );
}

/**
 * Return a human readable representation of a moment that can
 * also be evaluated to get a new moment which is the same
 *
 * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
 */
function inspect() {
    if (!this.isValid()) {
        return 'moment.invalid(/* ' + this._i + ' */)';
    }
    var func = 'moment',
        zone = '',
        prefix,
        year,
        datetime,
        suffix;
    if (!this.isLocal()) {
        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
        zone = 'Z';
    }
    prefix = '[' + func + '("]';
    year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
    datetime = '-MM-DD[T]HH:mm:ss.SSS';
    suffix = zone + '[")]';

    return this.format(prefix + year + datetime + suffix);
}

function format(inputString) {
    if (!inputString) {
        inputString = this.isUtc()
            ? hooks.defaultFormatUtc
            : hooks.defaultFormat;
    }
    var output = formatMoment(this, inputString);
    return this.localeData().postformat(output);
}

function from(time, withoutSuffix) {
    if (
        this.isValid() &&
        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
    ) {
        return createDuration({ to: this, from: time })
            .locale(this.locale())
            .humanize(!withoutSuffix);
    } else {
        return this.localeData().invalidDate();
    }
}

function fromNow(withoutSuffix) {
    return this.from(createLocal(), withoutSuffix);
}

function to(time, withoutSuffix) {
    if (
        this.isValid() &&
        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
    ) {
        return createDuration({ from: this, to: time })
            .locale(this.locale())
            .humanize(!withoutSuffix);
    } else {
        return this.localeData().invalidDate();
    }
}

function toNow(withoutSuffix) {
    return this.to(createLocal(), withoutSuffix);
}

// If passed a locale key, it will set the locale for this
// instance.  Otherwise, it will return the locale configuration
// variables for this instance.
function locale(key) {
    var newLocaleData;

    if (key === undefined) {
        return this._locale._abbr;
    } else {
        newLocaleData = getLocale(key);
        if (newLocaleData != null) {
            this._locale = newLocaleData;
        }
        return this;
    }
}

var lang = deprecate(
    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
    function (key) {
        if (key === undefined) {
            return this.localeData();
        } else {
            return this.locale(key);
        }
    }
);

function localeData() {
    return this._locale;
}

var MS_PER_SECOND = 1000,
    MS_PER_MINUTE = 60 * MS_PER_SECOND,
    MS_PER_HOUR = 60 * MS_PER_MINUTE,
    MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;

// actual modulo - handles negative numbers (for dates before 1970):
function mod$1(dividend, divisor) {
    return ((dividend % divisor) + divisor) % divisor;
}

function localStartOfDate(y, m, d) {
    // the date constructor remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
        // preserve leap years using a full 400 year cycle, then reset
        return new Date(y + 400, m, d) - MS_PER_400_YEARS;
    } else {
        return new Date(y, m, d).valueOf();
    }
}

function utcStartOfDate(y, m, d) {
    // Date.UTC remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
        // preserve leap years using a full 400 year cycle, then reset
        return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
    } else {
        return Date.UTC(y, m, d);
    }
}

function startOf(units) {
    var time, startOfDate;
    units = normalizeUnits(units);
    if (units === undefined || units === 'millisecond' || !this.isValid()) {
        return this;
    }

    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

    switch (units) {
        case 'year':
            time = startOfDate(this.year(), 0, 1);
            break;
        case 'quarter':
            time = startOfDate(
                this.year(),
                this.month() - (this.month() % 3),
                1
            );
            break;
        case 'month':
            time = startOfDate(this.year(), this.month(), 1);
            break;
        case 'week':
            time = startOfDate(
                this.year(),
                this.month(),
                this.date() - this.weekday()
            );
            break;
        case 'isoWeek':
            time = startOfDate(
                this.year(),
                this.month(),
                this.date() - (this.isoWeekday() - 1)
            );
            break;
        case 'day':
        case 'date':
            time = startOfDate(this.year(), this.month(), this.date());
            break;
        case 'hour':
            time = this._d.valueOf();
            time -= mod$1(
                time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                MS_PER_HOUR
            );
            break;
        case 'minute':
            time = this._d.valueOf();
            time -= mod$1(time, MS_PER_MINUTE);
            break;
        case 'second':
            time = this._d.valueOf();
            time -= mod$1(time, MS_PER_SECOND);
            break;
    }

    this._d.setTime(time);
    hooks.updateOffset(this, true);
    return this;
}

function endOf(units) {
    var time, startOfDate;
    units = normalizeUnits(units);
    if (units === undefined || units === 'millisecond' || !this.isValid()) {
        return this;
    }

    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

    switch (units) {
        case 'year':
            time = startOfDate(this.year() + 1, 0, 1) - 1;
            break;
        case 'quarter':
            time =
                startOfDate(
                    this.year(),
                    this.month() - (this.month() % 3) + 3,
                    1
                ) - 1;
            break;
        case 'month':
            time = startOfDate(this.year(), this.month() + 1, 1) - 1;
            break;
        case 'week':
            time =
                startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - this.weekday() + 7
                ) - 1;
            break;
        case 'isoWeek':
            time =
                startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - (this.isoWeekday() - 1) + 7
                ) - 1;
            break;
        case 'day':
        case 'date':
            time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
            break;
        case 'hour':
            time = this._d.valueOf();
            time +=
                MS_PER_HOUR -
                mod$1(
                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                    MS_PER_HOUR
                ) -
                1;
            break;
        case 'minute':
            time = this._d.valueOf();
            time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
            break;
        case 'second':
            time = this._d.valueOf();
            time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
            break;
    }

    this._d.setTime(time);
    hooks.updateOffset(this, true);
    return this;
}

function valueOf() {
    return this._d.valueOf() - (this._offset || 0) * 60000;
}

function unix() {
    return Math.floor(this.valueOf() / 1000);
}

function toDate() {
    return new Date(this.valueOf());
}

function toArray() {
    var m = this;
    return [
        m.year(),
        m.month(),
        m.date(),
        m.hour(),
        m.minute(),
        m.second(),
        m.millisecond(),
    ];
}

function toObject() {
    var m = this;
    return {
        years: m.year(),
        months: m.month(),
        date: m.date(),
        hours: m.hours(),
        minutes: m.minutes(),
        seconds: m.seconds(),
        milliseconds: m.milliseconds(),
    };
}

function toJSON() {
    // new Date(NaN).toJSON() === null
    return this.isValid() ? this.toISOString() : null;
}

function isValid$2() {
    return isValid(this);
}

function parsingFlags() {
    return extend({}, getParsingFlags(this));
}

function invalidAt() {
    return getParsingFlags(this).overflow;
}

function creationData() {
    return {
        input: this._i,
        format: this._f,
        locale: this._locale,
        isUTC: this._isUTC,
        strict: this._strict,
    };
}

addFormatToken('N', 0, 0, 'eraAbbr');
addFormatToken('NN', 0, 0, 'eraAbbr');
addFormatToken('NNN', 0, 0, 'eraAbbr');
addFormatToken('NNNN', 0, 0, 'eraName');
addFormatToken('NNNNN', 0, 0, 'eraNarrow');

addFormatToken('y', ['y', 1], 'yo', 'eraYear');
addFormatToken('y', ['yy', 2], 0, 'eraYear');
addFormatToken('y', ['yyy', 3], 0, 'eraYear');
addFormatToken('y', ['yyyy', 4], 0, 'eraYear');

addRegexToken('N', matchEraAbbr);
addRegexToken('NN', matchEraAbbr);
addRegexToken('NNN', matchEraAbbr);
addRegexToken('NNNN', matchEraName);
addRegexToken('NNNNN', matchEraNarrow);

addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
    input,
    array,
    config,
    token
) {
    var era = config._locale.erasParse(input, token, config._strict);
    if (era) {
        getParsingFlags(config).era = era;
    } else {
        getParsingFlags(config).invalidEra = input;
    }
});

addRegexToken('y', matchUnsigned);
addRegexToken('yy', matchUnsigned);
addRegexToken('yyy', matchUnsigned);
addRegexToken('yyyy', matchUnsigned);
addRegexToken('yo', matchEraYearOrdinal);

addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
addParseToken(['yo'], function (input, array, config, token) {
    var match;
    if (config._locale._eraYearOrdinalRegex) {
        match = input.match(config._locale._eraYearOrdinalRegex);
    }

    if (config._locale.eraYearOrdinalParse) {
        array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
    } else {
        array[YEAR] = parseInt(input, 10);
    }
});

function localeEras(m, format) {
    var i,
        l,
        date,
        eras = this._eras || getLocale('en')._eras;
    for (i = 0, l = eras.length; i < l; ++i) {
        switch (typeof eras[i].since) {
            case 'string':
                // truncate time
                date = hooks(eras[i].since).startOf('day');
                eras[i].since = date.valueOf();
                break;
        }

        switch (typeof eras[i].until) {
            case 'undefined':
                eras[i].until = +Infinity;
                break;
            case 'string':
                // truncate time
                date = hooks(eras[i].until).startOf('day').valueOf();
                eras[i].until = date.valueOf();
                break;
        }
    }
    return eras;
}

function localeErasParse(eraName, format, strict) {
    var i,
        l,
        eras = this.eras(),
        name,
        abbr,
        narrow;
    eraName = eraName.toUpperCase();

    for (i = 0, l = eras.length; i < l; ++i) {
        name = eras[i].name.toUpperCase();
        abbr = eras[i].abbr.toUpperCase();
        narrow = eras[i].narrow.toUpperCase();

        if (strict) {
            switch (format) {
                case 'N':
                case 'NN':
                case 'NNN':
                    if (abbr === eraName) {
                        return eras[i];
                    }
                    break;

                case 'NNNN':
                    if (name === eraName) {
                        return eras[i];
                    }
                    break;

                case 'NNNNN':
                    if (narrow === eraName) {
                        return eras[i];
                    }
                    break;
            }
        } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
            return eras[i];
        }
    }
}

function localeErasConvertYear(era, year) {
    var dir = era.since <= era.until ? +1 : -1;
    if (year === undefined) {
        return hooks(era.since).year();
    } else {
        return hooks(era.since).year() + (year - era.offset) * dir;
    }
}

function getEraName() {
    var i,
        l,
        val,
        eras = this.localeData().eras();
    for (i = 0, l = eras.length; i < l; ++i) {
        // truncate time
        val = this.clone().startOf('day').valueOf();

        if (eras[i].since <= val && val <= eras[i].until) {
            return eras[i].name;
        }
        if (eras[i].until <= val && val <= eras[i].since) {
            return eras[i].name;
        }
    }

    return '';
}

function getEraNarrow() {
    var i,
        l,
        val,
        eras = this.localeData().eras();
    for (i = 0, l = eras.length; i < l; ++i) {
        // truncate time
        val = this.clone().startOf('day').valueOf();

        if (eras[i].since <= val && val <= eras[i].until) {
            return eras[i].narrow;
        }
        if (eras[i].until <= val && val <= eras[i].since) {
            return eras[i].narrow;
        }
    }

    return '';
}

function getEraAbbr() {
    var i,
        l,
        val,
        eras = this.localeData().eras();
    for (i = 0, l = eras.length; i < l; ++i) {
        // truncate time
        val = this.clone().startOf('day').valueOf();

        if (eras[i].since <= val && val <= eras[i].until) {
            return eras[i].abbr;
        }
        if (eras[i].until <= val && val <= eras[i].since) {
            return eras[i].abbr;
        }
    }

    return '';
}

function getEraYear() {
    var i,
        l,
        dir,
        val,
        eras = this.localeData().eras();
    for (i = 0, l = eras.length; i < l; ++i) {
        dir = eras[i].since <= eras[i].until ? +1 : -1;

        // truncate time
        val = this.clone().startOf('day').valueOf();

        if (
            (eras[i].since <= val && val <= eras[i].until) ||
            (eras[i].until <= val && val <= eras[i].since)
        ) {
            return (
                (this.year() - hooks(eras[i].since).year()) * dir +
                eras[i].offset
            );
        }
    }

    return this.year();
}

function erasNameRegex(isStrict) {
    if (!hasOwnProp(this, '_erasNameRegex')) {
        computeErasParse.call(this);
    }
    return isStrict ? this._erasNameRegex : this._erasRegex;
}

function erasAbbrRegex(isStrict) {
    if (!hasOwnProp(this, '_erasAbbrRegex')) {
        computeErasParse.call(this);
    }
    return isStrict ? this._erasAbbrRegex : this._erasRegex;
}

function erasNarrowRegex(isStrict) {
    if (!hasOwnProp(this, '_erasNarrowRegex')) {
        computeErasParse.call(this);
    }
    return isStrict ? this._erasNarrowRegex : this._erasRegex;
}

function matchEraAbbr(isStrict, locale) {
    return locale.erasAbbrRegex(isStrict);
}

function matchEraName(isStrict, locale) {
    return locale.erasNameRegex(isStrict);
}

function matchEraNarrow(isStrict, locale) {
    return locale.erasNarrowRegex(isStrict);
}

function matchEraYearOrdinal(isStrict, locale) {
    return locale._eraYearOrdinalRegex || matchUnsigned;
}

function computeErasParse() {
    var abbrPieces = [],
        namePieces = [],
        narrowPieces = [],
        mixedPieces = [],
        i,
        l,
        eras = this.eras();

    for (i = 0, l = eras.length; i < l; ++i) {
        namePieces.push(regexEscape(eras[i].name));
        abbrPieces.push(regexEscape(eras[i].abbr));
        narrowPieces.push(regexEscape(eras[i].narrow));

        mixedPieces.push(regexEscape(eras[i].name));
        mixedPieces.push(regexEscape(eras[i].abbr));
        mixedPieces.push(regexEscape(eras[i].narrow));
    }

    this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
    this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
    this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
    this._erasNarrowRegex = new RegExp(
        '^(' + narrowPieces.join('|') + ')',
        'i'
    );
}

// FORMATTING

addFormatToken(0, ['gg', 2], 0, function () {
    return this.weekYear() % 100;
});

addFormatToken(0, ['GG', 2], 0, function () {
    return this.isoWeekYear() % 100;
});

function addWeekYearFormatToken(token, getter) {
    addFormatToken(0, [token, token.length], 0, getter);
}

addWeekYearFormatToken('gggg', 'weekYear');
addWeekYearFormatToken('ggggg', 'weekYear');
addWeekYearFormatToken('GGGG', 'isoWeekYear');
addWeekYearFormatToken('GGGGG', 'isoWeekYear');

// ALIASES

addUnitAlias('weekYear', 'gg');
addUnitAlias('isoWeekYear', 'GG');

// PRIORITY

addUnitPriority('weekYear', 1);
addUnitPriority('isoWeekYear', 1);

// PARSING

addRegexToken('G', matchSigned);
addRegexToken('g', matchSigned);
addRegexToken('GG', match1to2, match2);
addRegexToken('gg', match1to2, match2);
addRegexToken('GGGG', match1to4, match4);
addRegexToken('gggg', match1to4, match4);
addRegexToken('GGGGG', match1to6, match6);
addRegexToken('ggggg', match1to6, match6);

addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
    input,
    week,
    config,
    token
) {
    week[token.substr(0, 2)] = toInt(input);
});

addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
    week[token] = hooks.parseTwoDigitYear(input);
});

// MOMENTS

function getSetWeekYear(input) {
    return getSetWeekYearHelper.call(
        this,
        input,
        this.week(),
        this.weekday(),
        this.localeData()._week.dow,
        this.localeData()._week.doy
    );
}

function getSetISOWeekYear(input) {
    return getSetWeekYearHelper.call(
        this,
        input,
        this.isoWeek(),
        this.isoWeekday(),
        1,
        4
    );
}

function getISOWeeksInYear() {
    return weeksInYear(this.year(), 1, 4);
}

function getISOWeeksInISOWeekYear() {
    return weeksInYear(this.isoWeekYear(), 1, 4);
}

function getWeeksInYear() {
    var weekInfo = this.localeData()._week;
    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
}

function getWeeksInWeekYear() {
    var weekInfo = this.localeData()._week;
    return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
}

function getSetWeekYearHelper(input, week, weekday, dow, doy) {
    var weeksTarget;
    if (input == null) {
        return weekOfYear(this, dow, doy).year;
    } else {
        weeksTarget = weeksInYear(input, dow, doy);
        if (week > weeksTarget) {
            week = weeksTarget;
        }
        return setWeekAll.call(this, input, week, weekday, dow, doy);
    }
}

function setWeekAll(weekYear, week, weekday, dow, doy) {
    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);

    this.year(date.getUTCFullYear());
    this.month(date.getUTCMonth());
    this.date(date.getUTCDate());
    return this;
}

// FORMATTING

addFormatToken('Q', 0, 'Qo', 'quarter');

// ALIASES

addUnitAlias('quarter', 'Q');

// PRIORITY

addUnitPriority('quarter', 7);

// PARSING

addRegexToken('Q', match1);
addParseToken('Q', function (input, array) {
    array[MONTH] = (toInt(input) - 1) * 3;
});

// MOMENTS

function getSetQuarter(input) {
    return input == null
        ? Math.ceil((this.month() + 1) / 3)
        : this.month((input - 1) * 3 + (this.month() % 3));
}

// FORMATTING

addFormatToken('D', ['DD', 2], 'Do', 'date');

// ALIASES

addUnitAlias('date', 'D');

// PRIORITY
addUnitPriority('date', 9);

// PARSING

addRegexToken('D', match1to2);
addRegexToken('DD', match1to2, match2);
addRegexToken('Do', function (isStrict, locale) {
    // TODO: Remove "ordinalParse" fallback in next major release.
    return isStrict
        ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
        : locale._dayOfMonthOrdinalParseLenient;
});

addParseToken(['D', 'DD'], DATE);
addParseToken('Do', function (input, array) {
    array[DATE] = toInt(input.match(match1to2)[0]);
});

// MOMENTS

var getSetDayOfMonth = makeGetSet('Date', true);

// FORMATTING

addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');

// ALIASES

addUnitAlias('dayOfYear', 'DDD');

// PRIORITY
addUnitPriority('dayOfYear', 4);

// PARSING

addRegexToken('DDD', match1to3);
addRegexToken('DDDD', match3);
addParseToken(['DDD', 'DDDD'], function (input, array, config) {
    config._dayOfYear = toInt(input);
});

// HELPERS

// MOMENTS

function getSetDayOfYear(input) {
    var dayOfYear =
        Math.round(
            (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
        ) + 1;
    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
}

// FORMATTING

addFormatToken('m', ['mm', 2], 0, 'minute');

// ALIASES

addUnitAlias('minute', 'm');

// PRIORITY

addUnitPriority('minute', 14);

// PARSING

addRegexToken('m', match1to2);
addRegexToken('mm', match1to2, match2);
addParseToken(['m', 'mm'], MINUTE);

// MOMENTS

var getSetMinute = makeGetSet('Minutes', false);

// FORMATTING

addFormatToken('s', ['ss', 2], 0, 'second');

// ALIASES

addUnitAlias('second', 's');

// PRIORITY

addUnitPriority('second', 15);

// PARSING

addRegexToken('s', match1to2);
addRegexToken('ss', match1to2, match2);
addParseToken(['s', 'ss'], SECOND);

// MOMENTS

var getSetSecond = makeGetSet('Seconds', false);

// FORMATTING

addFormatToken('S', 0, 0, function () {
    return ~~(this.millisecond() / 100);
});

addFormatToken(0, ['SS', 2], 0, function () {
    return ~~(this.millisecond() / 10);
});

addFormatToken(0, ['SSS', 3], 0, 'millisecond');
addFormatToken(0, ['SSSS', 4], 0, function () {
    return this.millisecond() * 10;
});
addFormatToken(0, ['SSSSS', 5], 0, function () {
    return this.millisecond() * 100;
});
addFormatToken(0, ['SSSSSS', 6], 0, function () {
    return this.millisecond() * 1000;
});
addFormatToken(0, ['SSSSSSS', 7], 0, function () {
    return this.millisecond() * 10000;
});
addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
    return this.millisecond() * 100000;
});
addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
    return this.millisecond() * 1000000;
});

// ALIASES

addUnitAlias('millisecond', 'ms');

// PRIORITY

addUnitPriority('millisecond', 16);

// PARSING

addRegexToken('S', match1to3, match1);
addRegexToken('SS', match1to3, match2);
addRegexToken('SSS', match1to3, match3);

var token, getSetMillisecond;
for (token = 'SSSS'; token.length <= 9; token += 'S') {
    addRegexToken(token, matchUnsigned);
}

function parseMs(input, array) {
    array[MILLISECOND] = toInt(('0.' + input) * 1000);
}

for (token = 'S'; token.length <= 9; token += 'S') {
    addParseToken(token, parseMs);
}

getSetMillisecond = makeGetSet('Milliseconds', false);

// FORMATTING

addFormatToken('z', 0, 0, 'zoneAbbr');
addFormatToken('zz', 0, 0, 'zoneName');

// MOMENTS

function getZoneAbbr() {
    return this._isUTC ? 'UTC' : '';
}

function getZoneName() {
    return this._isUTC ? 'Coordinated Universal Time' : '';
}

var proto = Moment.prototype;

proto.add = add;
proto.calendar = calendar$1;
proto.clone = clone;
proto.diff = diff;
proto.endOf = endOf;
proto.format = format;
proto.from = from;
proto.fromNow = fromNow;
proto.to = to;
proto.toNow = toNow;
proto.get = stringGet;
proto.invalidAt = invalidAt;
proto.isAfter = isAfter;
proto.isBefore = isBefore;
proto.isBetween = isBetween;
proto.isSame = isSame;
proto.isSameOrAfter = isSameOrAfter;
proto.isSameOrBefore = isSameOrBefore;
proto.isValid = isValid$2;
proto.lang = lang;
proto.locale = locale;
proto.localeData = localeData;
proto.max = prototypeMax;
proto.min = prototypeMin;
proto.parsingFlags = parsingFlags;
proto.set = stringSet;
proto.startOf = startOf;
proto.subtract = subtract;
proto.toArray = toArray;
proto.toObject = toObject;
proto.toDate = toDate;
proto.toISOString = toISOString;
proto.inspect = inspect;
if (typeof Symbol !== 'undefined' && Symbol.for != null) {
    proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
        return 'Moment<' + this.format() + '>';
    };
}
proto.toJSON = toJSON;
proto.toString = toString;
proto.unix = unix;
proto.valueOf = valueOf;
proto.creationData = creationData;
proto.eraName = getEraName;
proto.eraNarrow = getEraNarrow;
proto.eraAbbr = getEraAbbr;
proto.eraYear = getEraYear;
proto.year = getSetYear;
proto.isLeapYear = getIsLeapYear;
proto.weekYear = getSetWeekYear;
proto.isoWeekYear = getSetISOWeekYear;
proto.quarter = proto.quarters = getSetQuarter;
proto.month = getSetMonth;
proto.daysInMonth = getDaysInMonth;
proto.week = proto.weeks = getSetWeek;
proto.isoWeek = proto.isoWeeks = getSetISOWeek;
proto.weeksInYear = getWeeksInYear;
proto.weeksInWeekYear = getWeeksInWeekYear;
proto.isoWeeksInYear = getISOWeeksInYear;
proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
proto.date = getSetDayOfMonth;
proto.day = proto.days = getSetDayOfWeek;
proto.weekday = getSetLocaleDayOfWeek;
proto.isoWeekday = getSetISODayOfWeek;
proto.dayOfYear = getSetDayOfYear;
proto.hour = proto.hours = getSetHour;
proto.minute = proto.minutes = getSetMinute;
proto.second = proto.seconds = getSetSecond;
proto.millisecond = proto.milliseconds = getSetMillisecond;
proto.utcOffset = getSetOffset;
proto.utc = setOffsetToUTC;
proto.local = setOffsetToLocal;
proto.parseZone = setOffsetToParsedOffset;
proto.hasAlignedHourOffset = hasAlignedHourOffset;
proto.isDST = isDaylightSavingTime;
proto.isLocal = isLocal;
proto.isUtcOffset = isUtcOffset;
proto.isUtc = isUtc;
proto.isUTC = isUtc;
proto.zoneAbbr = getZoneAbbr;
proto.zoneName = getZoneName;
proto.dates = deprecate(
    'dates accessor is deprecated. Use date instead.',
    getSetDayOfMonth
);
proto.months = deprecate(
    'months accessor is deprecated. Use month instead',
    getSetMonth
);
proto.years = deprecate(
    'years accessor is deprecated. Use year instead',
    getSetYear
);
proto.zone = deprecate(
    'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
    getSetZone
);
proto.isDSTShifted = deprecate(
    'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
    isDaylightSavingTimeShifted
);

function createUnix(input) {
    return createLocal(input * 1000);
}

function createInZone() {
    return createLocal.apply(null, arguments).parseZone();
}

function preParsePostFormat(string) {
    return string;
}

var proto$1 = Locale.prototype;

proto$1.calendar = calendar;
proto$1.longDateFormat = longDateFormat;
proto$1.invalidDate = invalidDate;
proto$1.ordinal = ordinal;
proto$1.preparse = preParsePostFormat;
proto$1.postformat = preParsePostFormat;
proto$1.relativeTime = relativeTime;
proto$1.pastFuture = pastFuture;
proto$1.set = set;
proto$1.eras = localeEras;
proto$1.erasParse = localeErasParse;
proto$1.erasConvertYear = localeErasConvertYear;
proto$1.erasAbbrRegex = erasAbbrRegex;
proto$1.erasNameRegex = erasNameRegex;
proto$1.erasNarrowRegex = erasNarrowRegex;

proto$1.months = localeMonths;
proto$1.monthsShort = localeMonthsShort;
proto$1.monthsParse = localeMonthsParse;
proto$1.monthsRegex = monthsRegex;
proto$1.monthsShortRegex = monthsShortRegex;
proto$1.week = localeWeek;
proto$1.firstDayOfYear = localeFirstDayOfYear;
proto$1.firstDayOfWeek = localeFirstDayOfWeek;

proto$1.weekdays = localeWeekdays;
proto$1.weekdaysMin = localeWeekdaysMin;
proto$1.weekdaysShort = localeWeekdaysShort;
proto$1.weekdaysParse = localeWeekdaysParse;

proto$1.weekdaysRegex = weekdaysRegex;
proto$1.weekdaysShortRegex = weekdaysShortRegex;
proto$1.weekdaysMinRegex = weekdaysMinRegex;

proto$1.isPM = localeIsPM;
proto$1.meridiem = localeMeridiem;

function get$1(format, index, field, setter) {
    var locale = getLocale(),
        utc = createUTC().set(setter, index);
    return locale[field](utc, format);
}

function listMonthsImpl(format, index, field) {
    if (isNumber(format)) {
        index = format;
        format = undefined;
    }

    format = format || '';

    if (index != null) {
        return get$1(format, index, field, 'month');
    }

    var i,
        out = [];
    for (i = 0; i < 12; i++) {
        out[i] = get$1(format, i, field, 'month');
    }
    return out;
}

// ()
// (5)
// (fmt, 5)
// (fmt)
// (true)
// (true, 5)
// (true, fmt, 5)
// (true, fmt)
function listWeekdaysImpl(localeSorted, format, index, field) {
    if (typeof localeSorted === 'boolean') {
        if (isNumber(format)) {
            index = format;
            format = undefined;
        }

        format = format || '';
    } else {
        format = localeSorted;
        index = format;
        localeSorted = false;

        if (isNumber(format)) {
            index = format;
            format = undefined;
        }

        format = format || '';
    }

    var locale = getLocale(),
        shift = localeSorted ? locale._week.dow : 0,
        i,
        out = [];

    if (index != null) {
        return get$1(format, (index + shift) % 7, field, 'day');
    }

    for (i = 0; i < 7; i++) {
        out[i] = get$1(format, (i + shift) % 7, field, 'day');
    }
    return out;
}

function listMonths(format, index) {
    return listMonthsImpl(format, index, 'months');
}

function listMonthsShort(format, index) {
    return listMonthsImpl(format, index, 'monthsShort');
}

function listWeekdays(localeSorted, format, index) {
    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
}

function listWeekdaysShort(localeSorted, format, index) {
    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
}

function listWeekdaysMin(localeSorted, format, index) {
    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
}

getSetGlobalLocale('en', {
    eras: [
        {
            since: '0001-01-01',
            until: +Infinity,
            offset: 1,
            name: 'Anno Domini',
            narrow: 'AD',
            abbr: 'AD',
        },
        {
            since: '0000-12-31',
            until: -Infinity,
            offset: 1,
            name: 'Before Christ',
            narrow: 'BC',
            abbr: 'BC',
        },
    ],
    dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                toInt((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
});

// Side effect imports

hooks.lang = deprecate(
    'moment.lang is deprecated. Use moment.locale instead.',
    getSetGlobalLocale
);
hooks.langData = deprecate(
    'moment.langData is deprecated. Use moment.localeData instead.',
    getLocale
);

var mathAbs = Math.abs;

function abs() {
    var data = this._data;

    this._milliseconds = mathAbs(this._milliseconds);
    this._days = mathAbs(this._days);
    this._months = mathAbs(this._months);

    data.milliseconds = mathAbs(data.milliseconds);
    data.seconds = mathAbs(data.seconds);
    data.minutes = mathAbs(data.minutes);
    data.hours = mathAbs(data.hours);
    data.months = mathAbs(data.months);
    data.years = mathAbs(data.years);

    return this;
}

function addSubtract$1(duration, input, value, direction) {
    var other = createDuration(input, value);

    duration._milliseconds += direction * other._milliseconds;
    duration._days += direction * other._days;
    duration._months += direction * other._months;

    return duration._bubble();
}

// supports only 2.0-style add(1, 's') or add(duration)
function add$1(input, value) {
    return addSubtract$1(this, input, value, 1);
}

// supports only 2.0-style subtract(1, 's') or subtract(duration)
function subtract$1(input, value) {
    return addSubtract$1(this, input, value, -1);
}

function absCeil(number) {
    if (number < 0) {
        return Math.floor(number);
    } else {
        return Math.ceil(number);
    }
}

function bubble() {
    var milliseconds = this._milliseconds,
        days = this._days,
        months = this._months,
        data = this._data,
        seconds,
        minutes,
        hours,
        years,
        monthsFromDays;

    // if we have a mix of positive and negative values, bubble down first
    // check: https://github.com/moment/moment/issues/2166
    if (
        !(
            (milliseconds >= 0 && days >= 0 && months >= 0) ||
            (milliseconds <= 0 && days <= 0 && months <= 0)
        )
    ) {
        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
        days = 0;
        months = 0;
    }

    // The following code bubbles up values, see the tests for
    // examples of what that means.
    data.milliseconds = milliseconds % 1000;

    seconds = absFloor(milliseconds / 1000);
    data.seconds = seconds % 60;

    minutes = absFloor(seconds / 60);
    data.minutes = minutes % 60;

    hours = absFloor(minutes / 60);
    data.hours = hours % 24;

    days += absFloor(hours / 24);

    // convert days to months
    monthsFromDays = absFloor(daysToMonths(days));
    months += monthsFromDays;
    days -= absCeil(monthsToDays(monthsFromDays));

    // 12 months -> 1 year
    years = absFloor(months / 12);
    months %= 12;

    data.days = days;
    data.months = months;
    data.years = years;

    return this;
}

function daysToMonths(days) {
    // 400 years have 146097 days (taking into account leap year rules)
    // 400 years have 12 months === 4800
    return (days * 4800) / 146097;
}

function monthsToDays(months) {
    // the reverse of daysToMonths
    return (months * 146097) / 4800;
}

function as(units) {
    if (!this.isValid()) {
        return NaN;
    }
    var days,
        months,
        milliseconds = this._milliseconds;

    units = normalizeUnits(units);

    if (units === 'month' || units === 'quarter' || units === 'year') {
        days = this._days + milliseconds / 864e5;
        months = this._months + daysToMonths(days);
        switch (units) {
            case 'month':
                return months;
            case 'quarter':
                return months / 3;
            case 'year':
                return months / 12;
        }
    } else {
        // handle milliseconds separately because of floating point math errors (issue #1867)
        days = this._days + Math.round(monthsToDays(this._months));
        switch (units) {
            case 'week':
                return days / 7 + milliseconds / 6048e5;
            case 'day':
                return days + milliseconds / 864e5;
            case 'hour':
                return days * 24 + milliseconds / 36e5;
            case 'minute':
                return days * 1440 + milliseconds / 6e4;
            case 'second':
                return days * 86400 + milliseconds / 1000;
            // Math.floor prevents floating point math errors here
            case 'millisecond':
                return Math.floor(days * 864e5) + milliseconds;
            default:
                throw new Error('Unknown unit ' + units);
        }
    }
}

// TODO: Use this.as('ms')?
function valueOf$1() {
    if (!this.isValid()) {
        return NaN;
    }
    return (
        this._milliseconds +
        this._days * 864e5 +
        (this._months % 12) * 2592e6 +
        toInt(this._months / 12) * 31536e6
    );
}

function makeAs(alias) {
    return function () {
        return this.as(alias);
    };
}

var asMilliseconds = makeAs('ms'),
    asSeconds = makeAs('s'),
    asMinutes = makeAs('m'),
    asHours = makeAs('h'),
    asDays = makeAs('d'),
    asWeeks = makeAs('w'),
    asMonths = makeAs('M'),
    asQuarters = makeAs('Q'),
    asYears = makeAs('y');

function clone$1() {
    return createDuration(this);
}

function get$2(units) {
    units = normalizeUnits(units);
    return this.isValid() ? this[units + 's']() : NaN;
}

function makeGetter(name) {
    return function () {
        return this.isValid() ? this._data[name] : NaN;
    };
}

var milliseconds = makeGetter('milliseconds'),
    seconds = makeGetter('seconds'),
    minutes = makeGetter('minutes'),
    hours = makeGetter('hours'),
    days = makeGetter('days'),
    months = makeGetter('months'),
    years = makeGetter('years');

function weeks() {
    return absFloor(this.days() / 7);
}

var round = Math.round,
    thresholds = {
        ss: 44, // a few seconds to seconds
        s: 45, // seconds to minute
        m: 45, // minutes to hour
        h: 22, // hours to day
        d: 26, // days to month/week
        w: null, // weeks to month
        M: 11, // months to year
    };

// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
}

function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
    var duration = createDuration(posNegDuration).abs(),
        seconds = round(duration.as('s')),
        minutes = round(duration.as('m')),
        hours = round(duration.as('h')),
        days = round(duration.as('d')),
        months = round(duration.as('M')),
        weeks = round(duration.as('w')),
        years = round(duration.as('y')),
        a =
            (seconds <= thresholds.ss && ['s', seconds]) ||
            (seconds < thresholds.s && ['ss', seconds]) ||
            (minutes <= 1 && ['m']) ||
            (minutes < thresholds.m && ['mm', minutes]) ||
            (hours <= 1 && ['h']) ||
            (hours < thresholds.h && ['hh', hours]) ||
            (days <= 1 && ['d']) ||
            (days < thresholds.d && ['dd', days]);

    if (thresholds.w != null) {
        a =
            a ||
            (weeks <= 1 && ['w']) ||
            (weeks < thresholds.w && ['ww', weeks]);
    }
    a = a ||
        (months <= 1 && ['M']) ||
        (months < thresholds.M && ['MM', months]) ||
        (years <= 1 && ['y']) || ['yy', years];

    a[2] = withoutSuffix;
    a[3] = +posNegDuration > 0;
    a[4] = locale;
    return substituteTimeAgo.apply(null, a);
}

// This function allows you to set the rounding function for relative time strings
function getSetRelativeTimeRounding(roundingFunction) {
    if (roundingFunction === undefined) {
        return round;
    }
    if (typeof roundingFunction === 'function') {
        round = roundingFunction;
        return true;
    }
    return false;
}

// This function allows you to set a threshold for relative time strings
function getSetRelativeTimeThreshold(threshold, limit) {
    if (thresholds[threshold] === undefined) {
        return false;
    }
    if (limit === undefined) {
        return thresholds[threshold];
    }
    thresholds[threshold] = limit;
    if (threshold === 's') {
        thresholds.ss = limit - 1;
    }
    return true;
}

function humanize(argWithSuffix, argThresholds) {
    if (!this.isValid()) {
        return this.localeData().invalidDate();
    }

    var withSuffix = false,
        th = thresholds,
        locale,
        output;

    if (typeof argWithSuffix === 'object') {
        argThresholds = argWithSuffix;
        argWithSuffix = false;
    }
    if (typeof argWithSuffix === 'boolean') {
        withSuffix = argWithSuffix;
    }
    if (typeof argThresholds === 'object') {
        th = Object.assign({}, thresholds, argThresholds);
        if (argThresholds.s != null && argThresholds.ss == null) {
            th.ss = argThresholds.s - 1;
        }
    }

    locale = this.localeData();
    output = relativeTime$1(this, !withSuffix, th, locale);

    if (withSuffix) {
        output = locale.pastFuture(+this, output);
    }

    return locale.postformat(output);
}

var abs$1 = Math.abs;

function sign(x) {
    return (x > 0) - (x < 0) || +x;
}

function toISOString$1() {
    // for ISO strings we do not use the normal bubbling rules:
    //  * milliseconds bubble up until they become hours
    //  * days do not bubble at all
    //  * months bubble up until they become years
    // This is because there is no context-free conversion between hours and days
    // (think of clock changes)
    // and also not between days and months (28-31 days per month)
    if (!this.isValid()) {
        return this.localeData().invalidDate();
    }

    var seconds = abs$1(this._milliseconds) / 1000,
        days = abs$1(this._days),
        months = abs$1(this._months),
        minutes,
        hours,
        years,
        s,
        total = this.asSeconds(),
        totalSign,
        ymSign,
        daysSign,
        hmsSign;

    if (!total) {
        // this is the same as C#'s (Noda) and python (isodate)...
        // but not other JS (goog.date)
        return 'P0D';
    }

    // 3600 seconds -> 60 minutes -> 1 hour
    minutes = absFloor(seconds / 60);
    hours = absFloor(minutes / 60);
    seconds %= 60;
    minutes %= 60;

    // 12 months -> 1 year
    years = absFloor(months / 12);
    months %= 12;

    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
    s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';

    totalSign = total < 0 ? '-' : '';
    ymSign = sign(this._months) !== sign(total) ? '-' : '';
    daysSign = sign(this._days) !== sign(total) ? '-' : '';
    hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';

    return (
        totalSign +
        'P' +
        (years ? ymSign + years + 'Y' : '') +
        (months ? ymSign + months + 'M' : '') +
        (days ? daysSign + days + 'D' : '') +
        (hours || minutes || seconds ? 'T' : '') +
        (hours ? hmsSign + hours + 'H' : '') +
        (minutes ? hmsSign + minutes + 'M' : '') +
        (seconds ? hmsSign + s + 'S' : '')
    );
}

var proto$2 = Duration.prototype;

proto$2.isValid = isValid$1;
proto$2.abs = abs;
proto$2.add = add$1;
proto$2.subtract = subtract$1;
proto$2.as = as;
proto$2.asMilliseconds = asMilliseconds;
proto$2.asSeconds = asSeconds;
proto$2.asMinutes = asMinutes;
proto$2.asHours = asHours;
proto$2.asDays = asDays;
proto$2.asWeeks = asWeeks;
proto$2.asMonths = asMonths;
proto$2.asQuarters = asQuarters;
proto$2.asYears = asYears;
proto$2.valueOf = valueOf$1;
proto$2._bubble = bubble;
proto$2.clone = clone$1;
proto$2.get = get$2;
proto$2.milliseconds = milliseconds;
proto$2.seconds = seconds;
proto$2.minutes = minutes;
proto$2.hours = hours;
proto$2.days = days;
proto$2.weeks = weeks;
proto$2.months = months;
proto$2.years = years;
proto$2.humanize = humanize;
proto$2.toISOString = toISOString$1;
proto$2.toString = toISOString$1;
proto$2.toJSON = toISOString$1;
proto$2.locale = locale;
proto$2.localeData = localeData;

proto$2.toIsoString = deprecate(
    'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
    toISOString$1
);
proto$2.lang = lang;

// FORMATTING

addFormatToken('X', 0, 0, 'unix');
addFormatToken('x', 0, 0, 'valueOf');

// PARSING

addRegexToken('x', matchSigned);
addRegexToken('X', matchTimestamp);
addParseToken('X', function (input, array, config) {
    config._d = new Date(parseFloat(input) * 1000);
});
addParseToken('x', function (input, array, config) {
    config._d = new Date(toInt(input));
});

//! moment.js

hooks.version = '2.29.1';

setHookCallback(createLocal);

hooks.fn = proto;
hooks.min = min;
hooks.max = max;
hooks.now = now;
hooks.utc = createUTC;
hooks.unix = createUnix;
hooks.months = listMonths;
hooks.isDate = isDate;
hooks.locale = getSetGlobalLocale;
hooks.invalid = createInvalid;
hooks.duration = createDuration;
hooks.isMoment = isMoment;
hooks.weekdays = listWeekdays;
hooks.parseZone = createInZone;
hooks.localeData = getLocale;
hooks.isDuration = isDuration;
hooks.monthsShort = listMonthsShort;
hooks.weekdaysMin = listWeekdaysMin;
hooks.defineLocale = defineLocale;
hooks.updateLocale = updateLocale;
hooks.locales = listLocales;
hooks.weekdaysShort = listWeekdaysShort;
hooks.normalizeUnits = normalizeUnits;
hooks.relativeTimeRounding = getSetRelativeTimeRounding;
hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
hooks.calendarFormat = getCalendarFormat;
hooks.prototype = proto;

// currently HTML5 input type only supports 24-hour formats
hooks.HTML5_FMT = {
    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
    DATE: 'YYYY-MM-DD', // <input type="date" />
    TIME: 'HH:mm', // <input type="time" />
    TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
    TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
    WEEK: 'GGGG-[W]WW', // <input type="week" />
    MONTH: 'YYYY-MM', // <input type="month" />
};

export default hooks;
$.ender({ moment: require('moment') })
Copyright (c) JS Foundation and other contributors

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
//! moment.js locale configuration
//! locale : Afrikaans [af]
//! author : Werner Mollentze : https://github.com/wernerm

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var af = moment.defineLocale('af', {
        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
            '_'
        ),
        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
        meridiemParse: /vm|nm/i,
        isPM: function (input) {
            return /^nm$/i.test(input);
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower ? 'vm' : 'VM';
            } else {
                return isLower ? 'nm' : 'NM';
            }
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Vandag om] LT',
            nextDay: '[MÃ´re om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[Gister om] LT',
            lastWeek: '[Laas] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'oor %s',
            past: '%s gelede',
            s: "'n paar sekondes",
            ss: '%d sekondes',
            m: "'n minuut",
            mm: '%d minute',
            h: "'n uur",
            hh: '%d ure',
            d: "'n dag",
            dd: '%d dae',
            M: "'n maand",
            MM: '%d maande',
            y: "'n jaar",
            yy: '%d jaar',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            ); // Thanks to Joris RÃ¶ling : https://github.com/jjupiter
        },
        week: {
            dow: 1, // Maandag is die eerste dag van die week.
            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
        },
    });

    return af;

})));
//! moment.js locale configuration
//! locale : Arabic (Algeria) [ar-dz]
//! author : Amine Roukh: https://github.com/Amine27
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi
//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var pluralForm = function (n) {
            return n === 0
                ? 0
                : n === 1
                ? 1
                : n === 2
                ? 2
                : n % 100 >= 3 && n % 100 <= 10
                ? 3
                : n % 100 >= 11
                ? 4
                : 5;
        },
        plurals = {
            s: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
                'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
                '%d Ø«ÙˆØ§Ù†',
                '%d Ø«Ø§Ù†ÙŠØ©',
                '%d Ø«Ø§Ù†ÙŠØ©',
            ],
            m: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
                'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
                '%d Ø¯Ù‚Ø§Ø¦Ù‚',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            ],
            h: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
                'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
                '%d Ø³Ø§Ø¹Ø§Øª',
                '%d Ø³Ø§Ø¹Ø©',
                '%d Ø³Ø§Ø¹Ø©',
            ],
            d: [
                'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
                'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
                ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
                '%d Ø£ÙŠØ§Ù…',
                '%d ÙŠÙˆÙ…Ù‹Ø§',
                '%d ÙŠÙˆÙ…',
            ],
            M: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
                'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
                ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
                '%d Ø£Ø´Ù‡Ø±',
                '%d Ø´Ù‡Ø±Ø§',
                '%d Ø´Ù‡Ø±',
            ],
            y: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
                'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
                ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
                '%d Ø£Ø¹ÙˆØ§Ù…',
                '%d Ø¹Ø§Ù…Ù‹Ø§',
                '%d Ø¹Ø§Ù…',
            ],
        },
        pluralize = function (u) {
            return function (number, withoutSuffix, string, isFuture) {
                var f = pluralForm(number),
                    str = plurals[u][pluralForm(number)];
                if (f === 2) {
                    str = str[withoutSuffix ? 0 : 1];
                }
                return str.replace(/%d/i, number);
            };
        },
        months = [
            'Ø¬Ø§Ù†ÙÙŠ',
            'ÙÙŠÙØ±ÙŠ',
            'Ù…Ø§Ø±Ø³',
            'Ø£ÙØ±ÙŠÙ„',
            'Ù…Ø§ÙŠ',
            'Ø¬ÙˆØ§Ù†',
            'Ø¬ÙˆÙŠÙ„ÙŠØ©',
            'Ø£ÙˆØª',
            'Ø³Ø¨ØªÙ…Ø¨Ø±',
            'Ø£ÙƒØªÙˆØ¨Ø±',
            'Ù†ÙˆÙÙ…Ø¨Ø±',
            'Ø¯ÙŠØ³Ù…Ø¨Ø±',
        ];

    var arDz = moment.defineLocale('ar-dz', {
        months: months,
        monthsShort: months,
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/\u200FM/\u200FYYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¨Ø¹Ø¯ %s',
            past: 'Ù…Ù†Ø° %s',
            s: pluralize('s'),
            ss: pluralize('s'),
            m: pluralize('m'),
            mm: pluralize('m'),
            h: pluralize('h'),
            hh: pluralize('h'),
            d: pluralize('d'),
            dd: pluralize('d'),
            M: pluralize('M'),
            MM: pluralize('M'),
            y: pluralize('y'),
            yy: pluralize('y'),
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return arDz;

})));
//! moment.js locale configuration
//! locale : Arabic (Kuwait) [ar-kw]
//! author : Nusret Parlak: https://github.com/nusretparlak

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var arKw = moment.defineLocale('ar-kw', {
        months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥ØªÙ†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø§Ø­Ø¯_Ø§ØªÙ†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    return arKw;

})));
//! moment.js locale configuration
//! locale : Arabic (Lybia) [ar-ly]
//! author : Ali Hmer: https://github.com/kikoanis

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: '1',
            2: '2',
            3: '3',
            4: '4',
            5: '5',
            6: '6',
            7: '7',
            8: '8',
            9: '9',
            0: '0',
        },
        pluralForm = function (n) {
            return n === 0
                ? 0
                : n === 1
                ? 1
                : n === 2
                ? 2
                : n % 100 >= 3 && n % 100 <= 10
                ? 3
                : n % 100 >= 11
                ? 4
                : 5;
        },
        plurals = {
            s: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
                'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
                '%d Ø«ÙˆØ§Ù†',
                '%d Ø«Ø§Ù†ÙŠØ©',
                '%d Ø«Ø§Ù†ÙŠØ©',
            ],
            m: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
                'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
                '%d Ø¯Ù‚Ø§Ø¦Ù‚',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            ],
            h: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
                'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
                '%d Ø³Ø§Ø¹Ø§Øª',
                '%d Ø³Ø§Ø¹Ø©',
                '%d Ø³Ø§Ø¹Ø©',
            ],
            d: [
                'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
                'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
                ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
                '%d Ø£ÙŠØ§Ù…',
                '%d ÙŠÙˆÙ…Ù‹Ø§',
                '%d ÙŠÙˆÙ…',
            ],
            M: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
                'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
                ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
                '%d Ø£Ø´Ù‡Ø±',
                '%d Ø´Ù‡Ø±Ø§',
                '%d Ø´Ù‡Ø±',
            ],
            y: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
                'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
                ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
                '%d Ø£Ø¹ÙˆØ§Ù…',
                '%d Ø¹Ø§Ù…Ù‹Ø§',
                '%d Ø¹Ø§Ù…',
            ],
        },
        pluralize = function (u) {
            return function (number, withoutSuffix, string, isFuture) {
                var f = pluralForm(number),
                    str = plurals[u][pluralForm(number)];
                if (f === 2) {
                    str = str[withoutSuffix ? 0 : 1];
                }
                return str.replace(/%d/i, number);
            };
        },
        months = [
            'ÙŠÙ†Ø§ÙŠØ±',
            'ÙØ¨Ø±Ø§ÙŠØ±',
            'Ù…Ø§Ø±Ø³',
            'Ø£Ø¨Ø±ÙŠÙ„',
            'Ù…Ø§ÙŠÙˆ',
            'ÙŠÙˆÙ†ÙŠÙˆ',
            'ÙŠÙˆÙ„ÙŠÙˆ',
            'Ø£ØºØ³Ø·Ø³',
            'Ø³Ø¨ØªÙ…Ø¨Ø±',
            'Ø£ÙƒØªÙˆØ¨Ø±',
            'Ù†ÙˆÙÙ…Ø¨Ø±',
            'Ø¯ÙŠØ³Ù…Ø¨Ø±',
        ];

    var arLy = moment.defineLocale('ar-ly', {
        months: months,
        monthsShort: months,
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/\u200FM/\u200FYYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¨Ø¹Ø¯ %s',
            past: 'Ù…Ù†Ø° %s',
            s: pluralize('s'),
            ss: pluralize('s'),
            m: pluralize('m'),
            mm: pluralize('m'),
            h: pluralize('h'),
            hh: pluralize('h'),
            d: pluralize('d'),
            dd: pluralize('d'),
            M: pluralize('M'),
            MM: pluralize('M'),
            y: pluralize('y'),
            yy: pluralize('y'),
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    return arLy;

})));
//! moment.js locale configuration
//! locale : Arabic (Morocco) [ar-ma]
//! author : ElFadili Yassine : https://github.com/ElFadiliY
//! author : Abdel Said : https://github.com/abdelsaid

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var arMa = moment.defineLocale('ar-ma', {
        months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø§Ø­Ø¯_Ø§Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return arMa;

})));
//! moment.js locale configuration
//! locale : Arabic (Saudi Arabia) [ar-sa]
//! author : Suhail Alkowaileet : https://github.com/xsoh

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'Ù¡',
            2: 'Ù¢',
            3: 'Ù£',
            4: 'Ù¤',
            5: 'Ù¥',
            6: 'Ù¦',
            7: 'Ù§',
            8: 'Ù¨',
            9: 'Ù©',
            0: 'Ù ',
        },
        numberMap = {
            'Ù¡': '1',
            'Ù¢': '2',
            'Ù£': '3',
            'Ù¤': '4',
            'Ù¥': '5',
            'Ù¦': '6',
            'Ù§': '7',
            'Ù¨': '8',
            'Ù©': '9',
            'Ù ': '0',
        };

    var arSa = moment.defineLocale('ar-sa', {
        months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        preparse: function (string) {
            return string
                .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                    return numberMap[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return arSa;

})));
//! moment.js locale configuration
//! locale  :  Arabic (Tunisia) [ar-tn]
//! author : Nader Toukabri : https://github.com/naderio

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var arTn = moment.defineLocale('ar-tn', {
        months: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return arTn;

})));
//! moment.js locale configuration
//! locale : Arabic [ar]
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'Ù¡',
            2: 'Ù¢',
            3: 'Ù£',
            4: 'Ù¤',
            5: 'Ù¥',
            6: 'Ù¦',
            7: 'Ù§',
            8: 'Ù¨',
            9: 'Ù©',
            0: 'Ù ',
        },
        numberMap = {
            'Ù¡': '1',
            'Ù¢': '2',
            'Ù£': '3',
            'Ù¤': '4',
            'Ù¥': '5',
            'Ù¦': '6',
            'Ù§': '7',
            'Ù¨': '8',
            'Ù©': '9',
            'Ù ': '0',
        },
        pluralForm = function (n) {
            return n === 0
                ? 0
                : n === 1
                ? 1
                : n === 2
                ? 2
                : n % 100 >= 3 && n % 100 <= 10
                ? 3
                : n % 100 >= 11
                ? 4
                : 5;
        },
        plurals = {
            s: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
                'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
                '%d Ø«ÙˆØ§Ù†',
                '%d Ø«Ø§Ù†ÙŠØ©',
                '%d Ø«Ø§Ù†ÙŠØ©',
            ],
            m: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
                'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
                '%d Ø¯Ù‚Ø§Ø¦Ù‚',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            ],
            h: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
                'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
                '%d Ø³Ø§Ø¹Ø§Øª',
                '%d Ø³Ø§Ø¹Ø©',
                '%d Ø³Ø§Ø¹Ø©',
            ],
            d: [
                'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
                'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
                ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
                '%d Ø£ÙŠØ§Ù…',
                '%d ÙŠÙˆÙ…Ù‹Ø§',
                '%d ÙŠÙˆÙ…',
            ],
            M: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
                'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
                ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
                '%d Ø£Ø´Ù‡Ø±',
                '%d Ø´Ù‡Ø±Ø§',
                '%d Ø´Ù‡Ø±',
            ],
            y: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
                'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
                ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
                '%d Ø£Ø¹ÙˆØ§Ù…',
                '%d Ø¹Ø§Ù…Ù‹Ø§',
                '%d Ø¹Ø§Ù…',
            ],
        },
        pluralize = function (u) {
            return function (number, withoutSuffix, string, isFuture) {
                var f = pluralForm(number),
                    str = plurals[u][pluralForm(number)];
                if (f === 2) {
                    str = str[withoutSuffix ? 0 : 1];
                }
                return str.replace(/%d/i, number);
            };
        },
        months = [
            'ÙŠÙ†Ø§ÙŠØ±',
            'ÙØ¨Ø±Ø§ÙŠØ±',
            'Ù…Ø§Ø±Ø³',
            'Ø£Ø¨Ø±ÙŠÙ„',
            'Ù…Ø§ÙŠÙˆ',
            'ÙŠÙˆÙ†ÙŠÙˆ',
            'ÙŠÙˆÙ„ÙŠÙˆ',
            'Ø£ØºØ³Ø·Ø³',
            'Ø³Ø¨ØªÙ…Ø¨Ø±',
            'Ø£ÙƒØªÙˆØ¨Ø±',
            'Ù†ÙˆÙÙ…Ø¨Ø±',
            'Ø¯ÙŠØ³Ù…Ø¨Ø±',
        ];

    var ar = moment.defineLocale('ar', {
        months: months,
        monthsShort: months,
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/\u200FM/\u200FYYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¨Ø¹Ø¯ %s',
            past: 'Ù…Ù†Ø° %s',
            s: pluralize('s'),
            ss: pluralize('s'),
            m: pluralize('m'),
            mm: pluralize('m'),
            h: pluralize('h'),
            hh: pluralize('h'),
            d: pluralize('d'),
            dd: pluralize('d'),
            M: pluralize('M'),
            MM: pluralize('M'),
            y: pluralize('y'),
            yy: pluralize('y'),
        },
        preparse: function (string) {
            return string
                .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                    return numberMap[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    return ar;

})));
//! moment.js locale configuration
//! locale : Azerbaijani [az]
//! author : topchiyev : https://github.com/topchiyev

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var suffixes = {
        1: '-inci',
        5: '-inci',
        8: '-inci',
        70: '-inci',
        80: '-inci',
        2: '-nci',
        7: '-nci',
        20: '-nci',
        50: '-nci',
        3: '-Ã¼ncÃ¼',
        4: '-Ã¼ncÃ¼',
        100: '-Ã¼ncÃ¼',
        6: '-ncÄ±',
        9: '-uncu',
        10: '-uncu',
        30: '-uncu',
        60: '-Ä±ncÄ±',
        90: '-Ä±ncÄ±',
    };

    var az = moment.defineLocale('az', {
        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
            '_'
        ),
        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
        weekdays: 'Bazar_Bazar ertÉ™si_Ã‡É™rÅŸÉ™nbÉ™ axÅŸamÄ±_Ã‡É™rÅŸÉ™nbÉ™_CÃ¼mÉ™ axÅŸamÄ±_CÃ¼mÉ™_ÅžÉ™nbÉ™'.split(
            '_'
        ),
        weekdaysShort: 'Baz_BzE_Ã‡Ax_Ã‡É™r_CAx_CÃ¼m_ÅžÉ™n'.split('_'),
        weekdaysMin: 'Bz_BE_Ã‡A_Ã‡É™_CA_CÃ¼_ÅžÉ™'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[bugÃ¼n saat] LT',
            nextDay: '[sabah saat] LT',
            nextWeek: '[gÉ™lÉ™n hÉ™ftÉ™] dddd [saat] LT',
            lastDay: '[dÃ¼nÉ™n] LT',
            lastWeek: '[keÃ§É™n hÉ™ftÉ™] dddd [saat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s sonra',
            past: '%s É™vvÉ™l',
            s: 'bir neÃ§É™ saniyÉ™',
            ss: '%d saniyÉ™',
            m: 'bir dÉ™qiqÉ™',
            mm: '%d dÉ™qiqÉ™',
            h: 'bir saat',
            hh: '%d saat',
            d: 'bir gÃ¼n',
            dd: '%d gÃ¼n',
            M: 'bir ay',
            MM: '%d ay',
            y: 'bir il',
            yy: '%d il',
        },
        meridiemParse: /gecÉ™|sÉ™hÉ™r|gÃ¼ndÃ¼z|axÅŸam/,
        isPM: function (input) {
            return /^(gÃ¼ndÃ¼z|axÅŸam)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'gecÉ™';
            } else if (hour < 12) {
                return 'sÉ™hÉ™r';
            } else if (hour < 17) {
                return 'gÃ¼ndÃ¼z';
            } else {
                return 'axÅŸam';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ä±ncÄ±|inci|nci|Ã¼ncÃ¼|ncÄ±|uncu)/,
        ordinal: function (number) {
            if (number === 0) {
                // special case for zero
                return number + '-Ä±ncÄ±';
            }
            var a = number % 10,
                b = (number % 100) - a,
                c = number >= 100 ? 100 : null;
            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return az;

})));
//! moment.js locale configuration
//! locale : Belarusian [be]
//! author : Dmitry Demidov : https://github.com/demidov91
//! author: Praleska: http://praleska.pro/
//! Author : Menelion ElensÃºle : https://github.com/Oire

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function plural(word, num) {
        var forms = word.split('_');
        return num % 10 === 1 && num % 100 !== 11
            ? forms[0]
            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
            ? forms[1]
            : forms[2];
    }
    function relativeTimeWithPlural(number, withoutSuffix, key) {
        var format = {
            ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
            mm: withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½',
            hh: withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½',
            dd: 'Ð´Ð·ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð·Ñ‘Ð½',
            MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ñ‹_Ð¼ÐµÑÑÑ†Ð°Ñž',
            yy: 'Ð³Ð¾Ð´_Ð³Ð°Ð´Ñ‹_Ð³Ð°Ð´Ð¾Ñž',
        };
        if (key === 'm') {
            return withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ';
        } else if (key === 'h') {
            return withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ';
        } else {
            return number + ' ' + plural(format[key], +number);
        }
    }

    var be = moment.defineLocale('be', {
        months: {
            format: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½Ñ_Ð»ÑŽÑ‚Ð°Ð³Ð°_ÑÐ°ÐºÐ°Ð²Ñ–ÐºÐ°_ÐºÑ€Ð°ÑÐ°Ð²Ñ–ÐºÐ°_Ñ‚Ñ€Ð°ÑžÐ½Ñ_Ñ‡ÑÑ€Ð²ÐµÐ½Ñ_Ð»Ñ–Ð¿ÐµÐ½Ñ_Ð¶Ð½Ñ–ÑžÐ½Ñ_Ð²ÐµÑ€Ð°ÑÐ½Ñ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–ÐºÐ°_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´Ð°_ÑÐ½ÐµÐ¶Ð½Ñ'.split(
                '_'
            ),
            standalone: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ñ‹_ÑÐ°ÐºÐ°Ð²Ñ–Ðº_ÐºÑ€Ð°ÑÐ°Ð²Ñ–Ðº_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÑÑ€Ð²ÐµÐ½ÑŒ_Ð»Ñ–Ð¿ÐµÐ½ÑŒ_Ð¶Ð½Ñ–Ð²ÐµÐ½ÑŒ_Ð²ÐµÑ€Ð°ÑÐµÐ½ÑŒ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–Ðº_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´_ÑÐ½ÐµÐ¶Ð°Ð½ÑŒ'.split(
                '_'
            ),
        },
        monthsShort: 'ÑÑ‚ÑƒÐ´_Ð»ÑŽÑ‚_ÑÐ°Ðº_ÐºÑ€Ð°Ñ_Ñ‚Ñ€Ð°Ð²_Ñ‡ÑÑ€Ð²_Ð»Ñ–Ð¿_Ð¶Ð½Ñ–Ð²_Ð²ÐµÑ€_ÐºÐ°ÑÑ‚_Ð»Ñ–ÑÑ‚_ÑÐ½ÐµÐ¶'.split(
            '_'
        ),
        weekdays: {
            format: 'Ð½ÑÐ´Ð·ÐµÐ»ÑŽ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ñƒ_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ñƒ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
                '_'
            ),
            standalone: 'Ð½ÑÐ´Ð·ÐµÐ»Ñ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ð°_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ð°_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
                '_'
            ),
            isFormat: /\[ ?[Ð£ÑƒÑž] ?(?:Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½ÑƒÑŽ)? ?\] ?dddd/,
        },
        weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
        weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Ð³.',
            LLL: 'D MMMM YYYY Ð³., HH:mm',
            LLLL: 'dddd, D MMMM YYYY Ð³., HH:mm',
        },
        calendar: {
            sameDay: '[Ð¡Ñ‘Ð½Ð½Ñ Ñž] LT',
            nextDay: '[Ð—Ð°ÑžÑ‚Ñ€Ð° Ñž] LT',
            lastDay: '[Ð£Ñ‡Ð¾Ñ€Ð° Ñž] LT',
            nextWeek: function () {
                return '[Ð£] dddd [Ñž] LT';
            },
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 5:
                    case 6:
                        return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ] dddd [Ñž] LT';
                    case 1:
                    case 2:
                    case 4:
                        return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»Ñ‹] dddd [Ñž] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð¿Ñ€Ð°Ð· %s',
            past: '%s Ñ‚Ð°Ð¼Ñƒ',
            s: 'Ð½ÐµÐºÐ°Ð»ÑŒÐºÑ– ÑÐµÐºÑƒÐ½Ð´',
            m: relativeTimeWithPlural,
            mm: relativeTimeWithPlural,
            h: relativeTimeWithPlural,
            hh: relativeTimeWithPlural,
            d: 'Ð´Ð·ÐµÐ½ÑŒ',
            dd: relativeTimeWithPlural,
            M: 'Ð¼ÐµÑÑÑ†',
            MM: relativeTimeWithPlural,
            y: 'Ð³Ð¾Ð´',
            yy: relativeTimeWithPlural,
        },
        meridiemParse: /Ð½Ð¾Ñ‡Ñ‹|Ñ€Ð°Ð½Ñ–Ñ†Ñ‹|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°/,
        isPM: function (input) {
            return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'Ð½Ð¾Ñ‡Ñ‹';
            } else if (hour < 12) {
                return 'Ñ€Ð°Ð½Ñ–Ñ†Ñ‹';
            } else if (hour < 17) {
                return 'Ð´Ð½Ñ';
            } else {
                return 'Ð²ÐµÑ‡Ð°Ñ€Ð°';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ñ–|Ñ‹|Ð³Ð°)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'M':
                case 'd':
                case 'DDD':
                case 'w':
                case 'W':
                    return (number % 10 === 2 || number % 10 === 3) &&
                        number % 100 !== 12 &&
                        number % 100 !== 13
                        ? number + '-Ñ–'
                        : number + '-Ñ‹';
                case 'D':
                    return number + '-Ð³Ð°';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return be;

})));
//! moment.js locale configuration
//! locale : Bulgarian [bg]
//! author : Krasen Borisov : https://github.com/kraz

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var bg = moment.defineLocale('bg', {
        months: 'ÑÐ½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
            '_'
        ),
        monthsShort: 'ÑÐ½Ñƒ_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
        weekdays: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÑÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÑŠÑ€Ñ‚ÑŠÐº_Ð¿ÐµÑ‚ÑŠÐº_ÑÑŠÐ±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ñ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÑŠÐ±'.split('_'),
        weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[Ð”Ð½ÐµÑ Ð²] LT',
            nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²] LT',
            nextWeek: 'dddd [Ð²] LT',
            lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 6:
                        return '[ÐœÐ¸Ð½Ð°Ð»Ð°Ñ‚Ð°] dddd [Ð²] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[ÐœÐ¸Ð½Ð°Ð»Ð¸Ñ] dddd [Ð²] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÑÐ»ÐµÐ´ %s',
            past: 'Ð¿Ñ€ÐµÐ´Ð¸ %s',
            s: 'Ð½ÑÐºÐ¾Ð»ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
            m: 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
            h: 'Ñ‡Ð°Ñ',
            hh: '%d Ñ‡Ð°ÑÐ°',
            d: 'Ð´ÐµÐ½',
            dd: '%d Ð´ÐµÐ½Ð°',
            w: 'ÑÐµÐ´Ð¼Ð¸Ñ†Ð°',
            ww: '%d ÑÐµÐ´Ð¼Ð¸Ñ†Ð¸',
            M: 'Ð¼ÐµÑÐµÑ†',
            MM: '%d Ð¼ÐµÑÐµÑ†Ð°',
            y: 'Ð³Ð¾Ð´Ð¸Ð½Ð°',
            yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
        ordinal: function (number) {
            var lastDigit = number % 10,
                last2Digits = number % 100;
            if (number === 0) {
                return number + '-ÐµÐ²';
            } else if (last2Digits === 0) {
                return number + '-ÐµÐ½';
            } else if (last2Digits > 10 && last2Digits < 20) {
                return number + '-Ñ‚Ð¸';
            } else if (lastDigit === 1) {
                return number + '-Ð²Ð¸';
            } else if (lastDigit === 2) {
                return number + '-Ñ€Ð¸';
            } else if (lastDigit === 7 || lastDigit === 8) {
                return number + '-Ð¼Ð¸';
            } else {
                return number + '-Ñ‚Ð¸';
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return bg;

})));
//! moment.js locale configuration
//! locale : Bambara [bm]
//! author : Estelle Comment : https://github.com/estellecomment

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var bm = moment.defineLocale('bm', {
        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_MÉ›kalo_ZuwÉ›nkalo_Zuluyekalo_Utikalo_SÉ›tanburukalo_É”kutÉ”burukalo_Nowanburukalo_Desanburukalo'.split(
            '_'
        ),
        monthsShort: 'Zan_Few_Mar_Awi_MÉ›_Zuw_Zul_Uti_SÉ›t_É”ku_Now_Des'.split('_'),
        weekdays: 'Kari_NtÉ›nÉ›n_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
        weekdaysShort: 'Kar_NtÉ›_Tar_Ara_Ala_Jum_Sib'.split('_'),
        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'MMMM [tile] D [san] YYYY',
            LLL: 'MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
            LLLL: 'dddd MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
        },
        calendar: {
            sameDay: '[Bi lÉ›rÉ›] LT',
            nextDay: '[Sini lÉ›rÉ›] LT',
            nextWeek: 'dddd [don lÉ›rÉ›] LT',
            lastDay: '[Kunu lÉ›rÉ›] LT',
            lastWeek: 'dddd [tÉ›mÉ›nen lÉ›rÉ›] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s kÉ”nÉ”',
            past: 'a bÉ› %s bÉ”',
            s: 'sanga dama dama',
            ss: 'sekondi %d',
            m: 'miniti kelen',
            mm: 'miniti %d',
            h: 'lÉ›rÉ› kelen',
            hh: 'lÉ›rÉ› %d',
            d: 'tile kelen',
            dd: 'tile %d',
            M: 'kalo kelen',
            MM: 'kalo %d',
            y: 'san kelen',
            yy: 'san %d',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return bm;

})));
//! moment.js locale configuration
//! locale : Bengali (Bangladesh) [bn-bd]
//! author : Asraf Hossain Patoary : https://github.com/ashwoolford

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à§§',
            2: 'à§¨',
            3: 'à§©',
            4: 'à§ª',
            5: 'à§«',
            6: 'à§¬',
            7: 'à§­',
            8: 'à§®',
            9: 'à§¯',
            0: 'à§¦',
        },
        numberMap = {
            'à§§': '1',
            'à§¨': '2',
            'à§©': '3',
            'à§ª': '4',
            'à§«': '5',
            'à§¬': '6',
            'à§­': '7',
            'à§®': '8',
            'à§¯': '9',
            'à§¦': '0',
        };

    var bnBd = moment.defineLocale('bn-bd', {
        months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
            '_'
        ),
        monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
            '_'
        ),
        weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
            '_'
        ),
        weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¦¸à¦®à§Ÿ',
            LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        },
        calendar: {
            sameDay: '[à¦†à¦œ] LT',
            nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
            lastWeek: '[à¦—à¦¤] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¦ªà¦°à§‡',
            past: '%s à¦†à¦—à§‡',
            s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
            hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
            d: 'à¦à¦• à¦¦à¦¿à¦¨',
            dd: '%d à¦¦à¦¿à¦¨',
            M: 'à¦à¦• à¦®à¦¾à¦¸',
            MM: '%d à¦®à¦¾à¦¸',
            y: 'à¦à¦• à¦¬à¦›à¦°',
            yy: '%d à¦¬à¦›à¦°',
        },
        preparse: function (string) {
            return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },

        meridiemParse: /à¦°à¦¾à¦¤|à¦­à§‹à¦°|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦¸à¦¨à§à¦§à§à¦¯à¦¾|à¦°à¦¾à¦¤/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¦°à¦¾à¦¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¦­à§‹à¦°') {
                return hour;
            } else if (meridiem === 'à¦¸à¦•à¦¾à¦²') {
                return hour;
            } else if (meridiem === 'à¦¦à§à¦ªà§à¦°') {
                return hour >= 3 ? hour : hour + 12;
            } else if (meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²') {
                return hour + 12;
            } else if (meridiem === 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾') {
                return hour + 12;
            }
        },

        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¦°à¦¾à¦¤';
            } else if (hour < 6) {
                return 'à¦­à§‹à¦°';
            } else if (hour < 12) {
                return 'à¦¸à¦•à¦¾à¦²';
            } else if (hour < 15) {
                return 'à¦¦à§à¦ªà§à¦°';
            } else if (hour < 18) {
                return 'à¦¬à¦¿à¦•à¦¾à¦²';
            } else if (hour < 20) {
                return 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾';
            } else {
                return 'à¦°à¦¾à¦¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return bnBd;

})));
//! moment.js locale configuration
//! locale : Bengali [bn]
//! author : Kaushik Gandhi : https://github.com/kaushikgandhi

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à§§',
            2: 'à§¨',
            3: 'à§©',
            4: 'à§ª',
            5: 'à§«',
            6: 'à§¬',
            7: 'à§­',
            8: 'à§®',
            9: 'à§¯',
            0: 'à§¦',
        },
        numberMap = {
            'à§§': '1',
            'à§¨': '2',
            'à§©': '3',
            'à§ª': '4',
            'à§«': '5',
            'à§¬': '6',
            'à§­': '7',
            'à§®': '8',
            'à§¯': '9',
            'à§¦': '0',
        };

    var bn = moment.defineLocale('bn', {
        months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
            '_'
        ),
        monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
            '_'
        ),
        weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
            '_'
        ),
        weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¦¸à¦®à§Ÿ',
            LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        },
        calendar: {
            sameDay: '[à¦†à¦œ] LT',
            nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
            lastWeek: '[à¦—à¦¤] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¦ªà¦°à§‡',
            past: '%s à¦†à¦—à§‡',
            s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
            hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
            d: 'à¦à¦• à¦¦à¦¿à¦¨',
            dd: '%d à¦¦à¦¿à¦¨',
            M: 'à¦à¦• à¦®à¦¾à¦¸',
            MM: '%d à¦®à¦¾à¦¸',
            y: 'à¦à¦• à¦¬à¦›à¦°',
            yy: '%d à¦¬à¦›à¦°',
        },
        preparse: function (string) {
            return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        meridiemParse: /à¦°à¦¾à¦¤|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦°à¦¾à¦¤/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                (meridiem === 'à¦°à¦¾à¦¤' && hour >= 4) ||
                (meridiem === 'à¦¦à§à¦ªà§à¦°' && hour < 5) ||
                meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²'
            ) {
                return hour + 12;
            } else {
                return hour;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¦°à¦¾à¦¤';
            } else if (hour < 10) {
                return 'à¦¸à¦•à¦¾à¦²';
            } else if (hour < 17) {
                return 'à¦¦à§à¦ªà§à¦°';
            } else if (hour < 20) {
                return 'à¦¬à¦¿à¦•à¦¾à¦²';
            } else {
                return 'à¦°à¦¾à¦¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return bn;

})));
//! moment.js locale configuration
//! locale : Tibetan [bo]
//! author : Thupten N. Chakrishar : https://github.com/vajradog

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à¼¡',
            2: 'à¼¢',
            3: 'à¼£',
            4: 'à¼¤',
            5: 'à¼¥',
            6: 'à¼¦',
            7: 'à¼§',
            8: 'à¼¨',
            9: 'à¼©',
            0: 'à¼ ',
        },
        numberMap = {
            'à¼¡': '1',
            'à¼¢': '2',
            'à¼£': '3',
            'à¼¤': '4',
            'à¼¥': '5',
            'à¼¦': '6',
            'à¼§': '7',
            'à¼¨': '8',
            'à¼©': '9',
            'à¼ ': '0',
        };

    var bo = moment.defineLocale('bo', {
        months: 'à½Ÿà¾³à¼‹à½–à¼‹à½‘à½„à¼‹à½”à½¼_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½‰à½²à½¦à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½¦à½´à½˜à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½žà½²à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½£à¾”à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à¾²à½´à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½‘à½´à½“à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½¢à¾’à¾±à½‘à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à½‚à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½…à½²à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½‰à½²à½¦à¼‹à½”'.split(
            '_'
        ),
        monthsShort: 'à½Ÿà¾³à¼‹1_à½Ÿà¾³à¼‹2_à½Ÿà¾³à¼‹3_à½Ÿà¾³à¼‹4_à½Ÿà¾³à¼‹5_à½Ÿà¾³à¼‹6_à½Ÿà¾³à¼‹7_à½Ÿà¾³à¼‹8_à½Ÿà¾³à¼‹9_à½Ÿà¾³à¼‹10_à½Ÿà¾³à¼‹11_à½Ÿà¾³à¼‹12'.split(
            '_'
        ),
        monthsShortRegex: /^(à½Ÿà¾³à¼‹\d{1,2})/,
        monthsParseExact: true,
        weekdays: 'à½‚à½Ÿà½ à¼‹à½‰à½²à¼‹à½˜à¼‹_à½‚à½Ÿà½ à¼‹à½Ÿà¾³à¼‹à½–à¼‹_à½‚à½Ÿà½ à¼‹à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½‚à½Ÿà½ à¼‹à½£à¾·à½‚à¼‹à½”à¼‹_à½‚à½Ÿà½ à¼‹à½•à½´à½¢à¼‹à½–à½´_à½‚à½Ÿà½ à¼‹à½”à¼‹à½¦à½„à½¦à¼‹_à½‚à½Ÿà½ à¼‹à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
            '_'
        ),
        weekdaysShort: 'à½‰à½²à¼‹à½˜à¼‹_à½Ÿà¾³à¼‹à½–à¼‹_à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½£à¾·à½‚à¼‹à½”à¼‹_à½•à½´à½¢à¼‹à½–à½´_à½”à¼‹à½¦à½„à½¦à¼‹_à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
            '_'
        ),
        weekdaysMin: 'à½‰à½²_à½Ÿà¾³_à½˜à½²à½‚_à½£à¾·à½‚_à½•à½´à½¢_à½¦à½„à½¦_à½¦à¾¤à½ºà½“'.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm',
        },
        calendar: {
            sameDay: '[à½‘à½²à¼‹à½¢à½²à½„] LT',
            nextDay: '[à½¦à½„à¼‹à½‰à½²à½“] LT',
            nextWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½¢à¾—à½ºà½¦à¼‹à½˜], LT',
            lastDay: '[à½à¼‹à½¦à½„] LT',
            lastWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½˜à½à½ à¼‹à½˜] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à½£à¼‹',
            past: '%s à½¦à¾”à½“à¼‹à½£',
            s: 'à½£à½˜à¼‹à½¦à½„',
            ss: '%d à½¦à¾à½¢à¼‹à½†à¼',
            m: 'à½¦à¾à½¢à¼‹à½˜à¼‹à½‚à½…à½²à½‚',
            mm: '%d à½¦à¾à½¢à¼‹à½˜',
            h: 'à½†à½´à¼‹à½šà½¼à½‘à¼‹à½‚à½…à½²à½‚',
            hh: '%d à½†à½´à¼‹à½šà½¼à½‘',
            d: 'à½‰à½²à½“à¼‹à½‚à½…à½²à½‚',
            dd: '%d à½‰à½²à½“à¼‹',
            M: 'à½Ÿà¾³à¼‹à½–à¼‹à½‚à½…à½²à½‚',
            MM: '%d à½Ÿà¾³à¼‹à½–',
            y: 'à½£à½¼à¼‹à½‚à½…à½²à½‚',
            yy: '%d à½£à½¼',
        },
        preparse: function (string) {
            return string.replace(/[à¼¡à¼¢à¼£à¼¤à¼¥à¼¦à¼§à¼¨à¼©à¼ ]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        meridiemParse: /à½˜à½šà½“à¼‹à½˜à½¼|à½žà½¼à½‚à½¦à¼‹à½€à½¦|à½‰à½²à½“à¼‹à½‚à½´à½„|à½‘à½‚à½¼à½„à¼‹à½‘à½‚|à½˜à½šà½“à¼‹à½˜à½¼/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                (meridiem === 'à½˜à½šà½“à¼‹à½˜à½¼' && hour >= 4) ||
                (meridiem === 'à½‰à½²à½“à¼‹à½‚à½´à½„' && hour < 5) ||
                meridiem === 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚'
            ) {
                return hour + 12;
            } else {
                return hour;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à½˜à½šà½“à¼‹à½˜à½¼';
            } else if (hour < 10) {
                return 'à½žà½¼à½‚à½¦à¼‹à½€à½¦';
            } else if (hour < 17) {
                return 'à½‰à½²à½“à¼‹à½‚à½´à½„';
            } else if (hour < 20) {
                return 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚';
            } else {
                return 'à½˜à½šà½“à¼‹à½˜à½¼';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return bo;

})));
//! moment.js locale configuration
//! locale : Breton [br]
//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function relativeTimeWithMutation(number, withoutSuffix, key) {
        var format = {
            mm: 'munutenn',
            MM: 'miz',
            dd: 'devezh',
        };
        return number + ' ' + mutation(format[key], number);
    }
    function specialMutationForYears(number) {
        switch (lastNumber(number)) {
            case 1:
            case 3:
            case 4:
            case 5:
            case 9:
                return number + ' bloaz';
            default:
                return number + ' vloaz';
        }
    }
    function lastNumber(number) {
        if (number > 9) {
            return lastNumber(number % 10);
        }
        return number;
    }
    function mutation(text, number) {
        if (number === 2) {
            return softMutation(text);
        }
        return text;
    }
    function softMutation(text) {
        var mutationTable = {
            m: 'v',
            b: 'v',
            d: 'z',
        };
        if (mutationTable[text.charAt(0)] === undefined) {
            return text;
        }
        return mutationTable[text.charAt(0)] + text.substring(1);
    }

    var monthsParse = [
            /^gen/i,
            /^c[Ê¼\']hwe/i,
            /^meu/i,
            /^ebr/i,
            /^mae/i,
            /^(mez|eve)/i,
            /^gou/i,
            /^eos/i,
            /^gwe/i,
            /^her/i,
            /^du/i,
            /^ker/i,
        ],
        monthsRegex = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
        monthsStrictRegex = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
        monthsShortStrictRegex = /^(gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
        fullWeekdaysParse = [
            /^sul/i,
            /^lun/i,
            /^meurzh/i,
            /^merc[Ê¼\']her/i,
            /^yaou/i,
            /^gwener/i,
            /^sadorn/i,
        ],
        shortWeekdaysParse = [
            /^Sul/i,
            /^Lun/i,
            /^Meu/i,
            /^Mer/i,
            /^Yao/i,
            /^Gwe/i,
            /^Sad/i,
        ],
        minWeekdaysParse = [
            /^Su/i,
            /^Lu/i,
            /^Me([^r]|$)/i,
            /^Mer/i,
            /^Ya/i,
            /^Gw/i,
            /^Sa/i,
        ];

    var br = moment.defineLocale('br', {
        months: 'Genver_CÊ¼hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
            '_'
        ),
        monthsShort: 'Gen_CÊ¼hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
        weekdays: 'Sul_Lun_Meurzh_MercÊ¼her_Yaou_Gwener_Sadorn'.split('_'),
        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
        weekdaysParse: minWeekdaysParse,
        fullWeekdaysParse: fullWeekdaysParse,
        shortWeekdaysParse: shortWeekdaysParse,
        minWeekdaysParse: minWeekdaysParse,

        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        monthsStrictRegex: monthsStrictRegex,
        monthsShortStrictRegex: monthsShortStrictRegex,
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,

        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [a viz] MMMM YYYY',
            LLL: 'D [a viz] MMMM YYYY HH:mm',
            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Hiziv da] LT',
            nextDay: '[WarcÊ¼hoazh da] LT',
            nextWeek: 'dddd [da] LT',
            lastDay: '[DecÊ¼h da] LT',
            lastWeek: 'dddd [paset da] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'a-benn %s',
            past: '%s Ê¼zo',
            s: 'un nebeud segondennoÃ¹',
            ss: '%d eilenn',
            m: 'ur vunutenn',
            mm: relativeTimeWithMutation,
            h: 'un eur',
            hh: '%d eur',
            d: 'un devezh',
            dd: relativeTimeWithMutation,
            M: 'ur miz',
            MM: relativeTimeWithMutation,
            y: 'ur bloaz',
            yy: specialMutationForYears,
        },
        dayOfMonthOrdinalParse: /\d{1,2}(aÃ±|vet)/,
        ordinal: function (number) {
            var output = number === 1 ? 'aÃ±' : 'vet';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
        isPM: function (token) {
            return token === 'g.m.';
        },
        meridiem: function (hour, minute, isLower) {
            return hour < 12 ? 'a.m.' : 'g.m.';
        },
    });

    return br;

})));
//! moment.js locale configuration
//! locale : Bosnian [bs]
//! author : Nedim Cholich : https://github.com/frontyard
//! based on (hr) translation by Bojan MarkoviÄ‡

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function translate(number, withoutSuffix, key) {
        var result = number + ' ';
        switch (key) {
            case 'ss':
                if (number === 1) {
                    result += 'sekunda';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sekunde';
                } else {
                    result += 'sekundi';
                }
                return result;
            case 'm':
                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
            case 'mm':
                if (number === 1) {
                    result += 'minuta';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'minute';
                } else {
                    result += 'minuta';
                }
                return result;
            case 'h':
                return withoutSuffix ? 'jedan sat' : 'jednog sata';
            case 'hh':
                if (number === 1) {
                    result += 'sat';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sata';
                } else {
                    result += 'sati';
                }
                return result;
            case 'dd':
                if (number === 1) {
                    result += 'dan';
                } else {
                    result += 'dana';
                }
                return result;
            case 'MM':
                if (number === 1) {
                    result += 'mjesec';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'mjeseca';
                } else {
                    result += 'mjeseci';
                }
                return result;
            case 'yy':
                if (number === 1) {
                    result += 'godina';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'godine';
                } else {
                    result += 'godina';
                }
                return result;
        }
    }

    var bs = moment.defineLocale('bs', {
        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedjelju] [u] LT';
                    case 3:
                        return '[u] [srijedu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄer u] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                        return '[proÅ¡lu] dddd [u] LT';
                    case 6:
                        return '[proÅ¡le] [subote] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[proÅ¡li] dddd [u] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'par sekundi',
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: 'dan',
            dd: translate,
            M: 'mjesec',
            MM: translate,
            y: 'godinu',
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return bs;

})));
//! moment.js locale configuration
//! locale : Catalan [ca]
//! author : Juan G. Hurtado : https://github.com/juanghurtado

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ca = moment.defineLocale('ca', {
        months: {
            standalone: 'gener_febrer_marÃ§_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
                '_'
            ),
            format: "de gener_de febrer_de marÃ§_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
                '_'
            ),
            isFormat: /D[oD]?(\s)+MMMM/,
        },
        monthsShort: 'gen._febr._marÃ§_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
            '_'
        ),
        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [de] YYYY',
            ll: 'D MMM YYYY',
            LLL: 'D MMMM [de] YYYY [a les] H:mm',
            lll: 'D MMM YYYY, H:mm',
            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
            llll: 'ddd D MMM YYYY, H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            nextDay: function () {
                return '[demÃ  a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            lastDay: function () {
                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [passat a ' +
                    (this.hours() !== 1 ? 'les' : 'la') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: "d'aquÃ­ %s",
            past: 'fa %s',
            s: 'uns segons',
            ss: '%d segons',
            m: 'un minut',
            mm: '%d minuts',
            h: 'una hora',
            hh: '%d hores',
            d: 'un dia',
            dd: '%d dies',
            M: 'un mes',
            MM: '%d mesos',
            y: 'un any',
            yy: '%d anys',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
        ordinal: function (number, period) {
            var output =
                number === 1
                    ? 'r'
                    : number === 2
                    ? 'n'
                    : number === 3
                    ? 'r'
                    : number === 4
                    ? 't'
                    : 'Ã¨';
            if (period === 'w' || period === 'W') {
                output = 'a';
            }
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return ca;

})));
//! moment.js locale configuration
//! locale : Czech [cs]
//! author : petrbela : https://github.com/petrbela

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var months = 'leden_Ãºnor_bÅ™ezen_duben_kvÄ›ten_Äerven_Äervenec_srpen_zÃ¡Å™Ã­_Å™Ã­jen_listopad_prosinec'.split(
            '_'
        ),
        monthsShort = 'led_Ãºno_bÅ™e_dub_kvÄ›_Ävn_Ävc_srp_zÃ¡Å™_Å™Ã­j_lis_pro'.split('_'),
        monthsParse = [
            /^led/i,
            /^Ãºno/i,
            /^bÅ™e/i,
            /^dub/i,
            /^kvÄ›/i,
            /^(Ävn|Äerven$|Äervna)/i,
            /^(Ävc|Äervenec|Äervence)/i,
            /^srp/i,
            /^zÃ¡Å™/i,
            /^Å™Ã­j/i,
            /^lis/i,
            /^pro/i,
        ],
        // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
        // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
        monthsRegex = /^(leden|Ãºnor|bÅ™ezen|duben|kvÄ›ten|Äervenec|Äervence|Äerven|Äervna|srpen|zÃ¡Å™Ã­|Å™Ã­jen|listopad|prosinec|led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i;

    function plural(n) {
        return n > 1 && n < 5 && ~~(n / 10) !== 1;
    }
    function translate(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's': // a few seconds / in a few seconds / a few seconds ago
                return withoutSuffix || isFuture ? 'pÃ¡r sekund' : 'pÃ¡r sekundami';
            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'sekundy' : 'sekund');
                } else {
                    return result + 'sekundami';
                }
            case 'm': // a minute / in a minute / a minute ago
                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'minuty' : 'minut');
                } else {
                    return result + 'minutami';
                }
            case 'h': // an hour / in an hour / an hour ago
                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
            case 'hh': // 9 hours / in 9 hours / 9 hours ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'hodiny' : 'hodin');
                } else {
                    return result + 'hodinami';
                }
            case 'd': // a day / in a day / a day ago
                return withoutSuffix || isFuture ? 'den' : 'dnem';
            case 'dd': // 9 days / in 9 days / 9 days ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'dny' : 'dnÃ­');
                } else {
                    return result + 'dny';
                }
            case 'M': // a month / in a month / a month ago
                return withoutSuffix || isFuture ? 'mÄ›sÃ­c' : 'mÄ›sÃ­cem';
            case 'MM': // 9 months / in 9 months / 9 months ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'mÄ›sÃ­ce' : 'mÄ›sÃ­cÅ¯');
                } else {
                    return result + 'mÄ›sÃ­ci';
                }
            case 'y': // a year / in a year / a year ago
                return withoutSuffix || isFuture ? 'rok' : 'rokem';
            case 'yy': // 9 years / in 9 years / 9 years ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'roky' : 'let');
                } else {
                    return result + 'lety';
                }
        }
    }

    var cs = moment.defineLocale('cs', {
        months: months,
        monthsShort: monthsShort,
        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
        // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
        monthsStrictRegex: /^(leden|ledna|Ãºnora|Ãºnor|bÅ™ezen|bÅ™ezna|duben|dubna|kvÄ›ten|kvÄ›tna|Äervenec|Äervence|Äerven|Äervna|srpen|srpna|zÃ¡Å™Ã­|Å™Ã­jen|Å™Ã­jna|listopadu|listopad|prosinec|prosince)/i,
        monthsShortStrictRegex: /^(led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i,
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,
        weekdays: 'nedÄ›le_pondÄ›lÃ­_ÃºterÃ½_stÅ™eda_Ätvrtek_pÃ¡tek_sobota'.split('_'),
        weekdaysShort: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
        weekdaysMin: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd D. MMMM YYYY H:mm',
            l: 'D. M. YYYY',
        },
        calendar: {
            sameDay: '[dnes v] LT',
            nextDay: '[zÃ­tra v] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[v nedÄ›li v] LT';
                    case 1:
                    case 2:
                        return '[v] dddd [v] LT';
                    case 3:
                        return '[ve stÅ™edu v] LT';
                    case 4:
                        return '[ve Ätvrtek v] LT';
                    case 5:
                        return '[v pÃ¡tek v] LT';
                    case 6:
                        return '[v sobotu v] LT';
                }
            },
            lastDay: '[vÄera v] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[minulou nedÄ›li v] LT';
                    case 1:
                    case 2:
                        return '[minulÃ©] dddd [v] LT';
                    case 3:
                        return '[minulou stÅ™edu v] LT';
                    case 4:
                    case 5:
                        return '[minulÃ½] dddd [v] LT';
                    case 6:
                        return '[minulou sobotu v] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'pÅ™ed %s',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return cs;

})));
//! moment.js locale configuration
//! locale : Chuvash [cv]
//! author : Anatoly Mironov : https://github.com/mirontoli

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var cv = moment.defineLocale('cv', {
        months: 'ÐºÓ‘Ñ€Ð»Ð°Ñ‡_Ð½Ð°Ñ€Ó‘Ñ_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€Ñ‚Ð¼Ðµ_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€Ð»Ð°_Ð°Ð²Ó‘Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°ÑˆÑ‚Ð°Ð²'.split(
            '_'
        ),
        monthsShort: 'ÐºÓ‘Ñ€_Ð½Ð°Ñ€_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€_Ð°Ð²Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°Ñˆ'.split('_'),
        weekdays: 'Ð²Ñ‹Ñ€ÑÐ°Ñ€Ð½Ð¸ÐºÑƒÐ½_Ñ‚ÑƒÐ½Ñ‚Ð¸ÐºÑƒÐ½_Ñ‹Ñ‚Ð»Ð°Ñ€Ð¸ÐºÑƒÐ½_ÑŽÐ½ÐºÑƒÐ½_ÐºÓ—Ò«Ð½ÐµÑ€Ð½Ð¸ÐºÑƒÐ½_ÑÑ€Ð½ÐµÐºÑƒÐ½_ÑˆÓ‘Ð¼Ð°Ñ‚ÐºÑƒÐ½'.split(
            '_'
        ),
        weekdaysShort: 'Ð²Ñ‹Ñ€_Ñ‚ÑƒÐ½_Ñ‹Ñ‚Ð»_ÑŽÐ½_ÐºÓ—Ò«_ÑÑ€Ð½_ÑˆÓ‘Ð¼'.split('_'),
        weekdaysMin: 'Ð²Ñ€_Ñ‚Ð½_Ñ‹Ñ‚_ÑŽÐ½_ÐºÒ«_ÑÑ€_ÑˆÐ¼'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—]',
            LLL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
            LLLL: 'dddd, YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
        },
        calendar: {
            sameDay: '[ÐŸÐ°ÑÐ½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            nextDay: '[Ð«Ñ€Ð°Ð½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            lastDay: '[Ó–Ð½ÐµÑ€] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            nextWeek: '[ÒªÐ¸Ñ‚ÐµÑ] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            lastWeek: '[Ð˜Ñ€Ñ‚Ð½Ó—] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            sameElse: 'L',
        },
        relativeTime: {
            future: function (output) {
                var affix = /ÑÐµÑ…ÐµÑ‚$/i.exec(output)
                    ? 'Ñ€ÐµÐ½'
                    : /Ò«ÑƒÐ»$/i.exec(output)
                    ? 'Ñ‚Ð°Ð½'
                    : 'Ñ€Ð°Ð½';
                return output + affix;
            },
            past: '%s ÐºÐ°ÑÐ»Ð»Ð°',
            s: 'Ð¿Ó—Ñ€-Ð¸Ðº Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
            ss: '%d Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
            m: 'Ð¿Ó—Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
            h: 'Ð¿Ó—Ñ€ ÑÐµÑ…ÐµÑ‚',
            hh: '%d ÑÐµÑ…ÐµÑ‚',
            d: 'Ð¿Ó—Ñ€ ÐºÑƒÐ½',
            dd: '%d ÐºÑƒÐ½',
            M: 'Ð¿Ó—Ñ€ ÑƒÐ¹Ó‘Ñ…',
            MM: '%d ÑƒÐ¹Ó‘Ñ…',
            y: 'Ð¿Ó—Ñ€ Ò«ÑƒÐ»',
            yy: '%d Ò«ÑƒÐ»',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-Ð¼Ó—Ñˆ/,
        ordinal: '%d-Ð¼Ó—Ñˆ',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return cv;

})));
//! moment.js locale configuration
//! locale : Welsh [cy]
//! author : Robert Allen : https://github.com/robgallen
//! author : https://github.com/ryangreaves

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var cy = moment.defineLocale('cy', {
        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
            '_'
        ),
        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
            '_'
        ),
        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
            '_'
        ),
        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
        weekdaysParseExact: true,
        // time formats are the same as en-gb
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Heddiw am] LT',
            nextDay: '[Yfory am] LT',
            nextWeek: 'dddd [am] LT',
            lastDay: '[Ddoe am] LT',
            lastWeek: 'dddd [diwethaf am] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'mewn %s',
            past: '%s yn Ã´l',
            s: 'ychydig eiliadau',
            ss: '%d eiliad',
            m: 'munud',
            mm: '%d munud',
            h: 'awr',
            hh: '%d awr',
            d: 'diwrnod',
            dd: '%d diwrnod',
            M: 'mis',
            MM: '%d mis',
            y: 'blwyddyn',
            yy: '%d flynedd',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
        ordinal: function (number) {
            var b = number,
                output = '',
                lookup = [
                    '',
                    'af',
                    'il',
                    'ydd',
                    'ydd',
                    'ed',
                    'ed',
                    'ed',
                    'fed',
                    'fed',
                    'fed', // 1af to 10fed
                    'eg',
                    'fed',
                    'eg',
                    'eg',
                    'fed',
                    'eg',
                    'eg',
                    'fed',
                    'eg',
                    'fed', // 11eg to 20fed
                ];
            if (b > 20) {
                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
                    output = 'fed'; // not 30ain, 70ain or 90ain
                } else {
                    output = 'ain';
                }
            } else if (b > 0) {
                output = lookup[b];
            }
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return cy;

})));
//! moment.js locale configuration
//! locale : Danish [da]
//! author : Ulrik Nielsen : https://github.com/mrbase

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var da = moment.defineLocale('da', {
        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
        weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
        weekdaysShort: 'sÃ¸n_man_tir_ons_tor_fre_lÃ¸r'.split('_'),
        weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
        },
        calendar: {
            sameDay: '[i dag kl.] LT',
            nextDay: '[i morgen kl.] LT',
            nextWeek: 'pÃ¥ dddd [kl.] LT',
            lastDay: '[i gÃ¥r kl.] LT',
            lastWeek: '[i] dddd[s kl.] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: '%s siden',
            s: 'fÃ¥ sekunder',
            ss: '%d sekunder',
            m: 'et minut',
            mm: '%d minutter',
            h: 'en time',
            hh: '%d timer',
            d: 'en dag',
            dd: '%d dage',
            M: 'en mÃ¥ned',
            MM: '%d mÃ¥neder',
            y: 'et Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return da;

})));
//! moment.js locale configuration
//! locale : German (Austria) [de-at]
//! author : lluchs : https://github.com/lluchs
//! author: Menelion ElensÃºle: https://github.com/Oire
//! author : Martin Groller : https://github.com/MadMG
//! author : Mikolaj Dadela : https://github.com/mik01aj

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }

    var deAt = moment.defineLocale('de-at', {
        months: 'JÃ¤nner_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'JÃ¤n._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
            '_'
        ),
        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]',
        },
        relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime,
            mm: '%d Minuten',
            h: processRelativeTime,
            hh: '%d Stunden',
            d: processRelativeTime,
            dd: processRelativeTime,
            w: processRelativeTime,
            ww: '%d Wochen',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return deAt;

})));
//! moment.js locale configuration
//! locale : German (Switzerland) [de-ch]
//! author : sschueller : https://github.com/sschueller

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }

    var deCh = moment.defineLocale('de-ch', {
        months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
            '_'
        ),
        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]',
        },
        relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime,
            mm: '%d Minuten',
            h: processRelativeTime,
            hh: '%d Stunden',
            d: processRelativeTime,
            dd: processRelativeTime,
            w: processRelativeTime,
            ww: '%d Wochen',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return deCh;

})));
//! moment.js locale configuration
//! locale : German [de]
//! author : lluchs : https://github.com/lluchs
//! author: Menelion ElensÃºle: https://github.com/Oire
//! author : Mikolaj Dadela : https://github.com/mik01aj

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }

    var de = moment.defineLocale('de', {
        months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
            '_'
        ),
        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]',
        },
        relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime,
            mm: '%d Minuten',
            h: processRelativeTime,
            hh: '%d Stunden',
            d: processRelativeTime,
            dd: processRelativeTime,
            w: processRelativeTime,
            ww: '%d Wochen',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return de;

})));
//! moment.js locale configuration
//! locale : Maldivian [dv]
//! author : Jawish Hameed : https://github.com/jawish

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var months = [
            'Þ–Þ¬Þ‚ÞªÞ‡Þ¦ÞƒÞ©',
            'ÞŠÞ¬Þ„Þ°ÞƒÞªÞ‡Þ¦ÞƒÞ©',
            'Þ‰Þ§ÞƒÞ¨Þ—Þª',
            'Þ‡Þ­Þ•Þ°ÞƒÞ©ÞÞª',
            'Þ‰Þ­',
            'Þ–Þ«Þ‚Þ°',
            'Þ–ÞªÞÞ¦Þ‡Þ¨',
            'Þ‡Þ¯ÞŽÞ¦ÞÞ°Þ“Þª',
            'ÞÞ¬Þ•Þ°Þ“Þ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
            'Þ‡Þ®Þ†Þ°Þ“Þ¯Þ„Þ¦ÞƒÞª',
            'Þ‚Þ®ÞˆÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
            'Þ‘Þ¨ÞÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
        ],
        weekdays = [
            'Þ‡Þ§Þ‹Þ¨Þ‡Þ°ÞŒÞ¦',
            'Þ€Þ¯Þ‰Þ¦',
            'Þ‡Þ¦Þ‚Þ°ÞŽÞ§ÞƒÞ¦',
            'Þ„ÞªÞ‹Þ¦',
            'Þ„ÞªÞƒÞ§ÞÞ°ÞŠÞ¦ÞŒÞ¨',
            'Þ€ÞªÞ†ÞªÞƒÞª',
            'Þ€Þ®Þ‚Þ¨Þ€Þ¨ÞƒÞª',
        ];

    var dv = moment.defineLocale('dv', {
        months: months,
        monthsShort: months,
        weekdays: weekdays,
        weekdaysShort: weekdays,
        weekdaysMin: 'Þ‡Þ§Þ‹Þ¨_Þ€Þ¯Þ‰Þ¦_Þ‡Þ¦Þ‚Þ°_Þ„ÞªÞ‹Þ¦_Þ„ÞªÞƒÞ§_Þ€ÞªÞ†Þª_Þ€Þ®Þ‚Þ¨'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/M/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Þ‰Þ†|Þ‰ÞŠ/,
        isPM: function (input) {
            return 'Þ‰ÞŠ' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Þ‰Þ†';
            } else {
                return 'Þ‰ÞŠ';
            }
        },
        calendar: {
            sameDay: '[Þ‰Þ¨Þ‡Þ¦Þ‹Þª] LT',
            nextDay: '[Þ‰Þ§Þ‹Þ¦Þ‰Þ§] LT',
            nextWeek: 'dddd LT',
            lastDay: '[Þ‡Þ¨Þ‡Þ°Þ”Þ¬] LT',
            lastWeek: '[ÞŠÞ§Þ‡Þ¨ÞŒÞªÞˆÞ¨] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÞŒÞ¬ÞƒÞ­ÞŽÞ¦Þ‡Þ¨ %s',
            past: 'Þ†ÞªÞƒÞ¨Þ‚Þ° %s',
            s: 'ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞªÞ†Þ®Þ…Þ¬Þ‡Þ°',
            ss: 'd% ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞª',
            m: 'Þ‰Þ¨Þ‚Þ¨Þ“Þ¬Þ‡Þ°',
            mm: 'Þ‰Þ¨Þ‚Þ¨Þ“Þª %d',
            h: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞ¬Þ‡Þ°',
            hh: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞª %d',
            d: 'Þ‹ÞªÞˆÞ¦Þ€Þ¬Þ‡Þ°',
            dd: 'Þ‹ÞªÞˆÞ¦ÞÞ° %d',
            M: 'Þ‰Þ¦Þ€Þ¬Þ‡Þ°',
            MM: 'Þ‰Þ¦ÞÞ° %d',
            y: 'Þ‡Þ¦Þ€Þ¦ÞƒÞ¬Þ‡Þ°',
            yy: 'Þ‡Þ¦Þ€Þ¦ÞƒÞª %d',
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 7, // Sunday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    return dv;

})));
//! moment.js locale configuration
//! locale : Greek [el]
//! author : Aggelos Karalias : https://github.com/mehiel

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function isFunction(input) {
        return (
            (typeof Function !== 'undefined' && input instanceof Function) ||
            Object.prototype.toString.call(input) === '[object Function]'
        );
    }

    var el = moment.defineLocale('el', {
        monthsNominativeEl: 'Î™Î±Î½Î¿Ï…Î¬ÏÎ¹Î¿Ï‚_Î¦ÎµÎ²ÏÎ¿Ï…Î¬ÏÎ¹Î¿Ï‚_ÎœÎ¬ÏÏ„Î¹Î¿Ï‚_Î‘Ï€ÏÎ¯Î»Î¹Î¿Ï‚_ÎœÎ¬Î¹Î¿Ï‚_Î™Î¿ÏÎ½Î¹Î¿Ï‚_Î™Î¿ÏÎ»Î¹Î¿Ï‚_Î‘ÏÎ³Î¿Ï…ÏƒÏ„Î¿Ï‚_Î£ÎµÏ€Ï„Î­Î¼Î²ÏÎ¹Î¿Ï‚_ÎŸÎºÏ„ÏŽÎ²ÏÎ¹Î¿Ï‚_ÎÎ¿Î­Î¼Î²ÏÎ¹Î¿Ï‚_Î”ÎµÎºÎ­Î¼Î²ÏÎ¹Î¿Ï‚'.split(
            '_'
        ),
        monthsGenitiveEl: 'Î™Î±Î½Î¿Ï…Î±ÏÎ¯Î¿Ï…_Î¦ÎµÎ²ÏÎ¿Ï…Î±ÏÎ¯Î¿Ï…_ÎœÎ±ÏÏ„Î¯Î¿Ï…_Î‘Ï€ÏÎ¹Î»Î¯Î¿Ï…_ÎœÎ±ÎÎ¿Ï…_Î™Î¿Ï…Î½Î¯Î¿Ï…_Î™Î¿Ï…Î»Î¯Î¿Ï…_Î‘Ï…Î³Î¿ÏÏƒÏ„Î¿Ï…_Î£ÎµÏ€Ï„ÎµÎ¼Î²ÏÎ¯Î¿Ï…_ÎŸÎºÏ„Ï‰Î²ÏÎ¯Î¿Ï…_ÎÎ¿ÎµÎ¼Î²ÏÎ¯Î¿Ï…_Î”ÎµÎºÎµÎ¼Î²ÏÎ¯Î¿Ï…'.split(
            '_'
        ),
        months: function (momentToFormat, format) {
            if (!momentToFormat) {
                return this._monthsNominativeEl;
            } else if (
                typeof format === 'string' &&
                /D/.test(format.substring(0, format.indexOf('MMMM')))
            ) {
                // if there is a day number before 'MMMM'
                return this._monthsGenitiveEl[momentToFormat.month()];
            } else {
                return this._monthsNominativeEl[momentToFormat.month()];
            }
        },
        monthsShort: 'Î™Î±Î½_Î¦ÎµÎ²_ÎœÎ±Ï_Î‘Ï€Ï_ÎœÎ±ÏŠ_Î™Î¿Ï…Î½_Î™Î¿Ï…Î»_Î‘Ï…Î³_Î£ÎµÏ€_ÎŸÎºÏ„_ÎÎ¿Îµ_Î”ÎµÎº'.split('_'),
        weekdays: 'ÎšÏ…ÏÎ¹Î±ÎºÎ®_Î”ÎµÏ…Ï„Î­ÏÎ±_Î¤ÏÎ¯Ï„Î·_Î¤ÎµÏ„Î¬ÏÏ„Î·_Î Î­Î¼Ï€Ï„Î·_Î Î±ÏÎ±ÏƒÎºÎµÏ…Î®_Î£Î¬Î²Î²Î±Ï„Î¿'.split(
            '_'
        ),
        weekdaysShort: 'ÎšÏ…Ï_Î”ÎµÏ…_Î¤ÏÎ¹_Î¤ÎµÏ„_Î ÎµÎ¼_Î Î±Ï_Î£Î±Î²'.split('_'),
        weekdaysMin: 'ÎšÏ…_Î”Îµ_Î¤Ï_Î¤Îµ_Î Îµ_Î Î±_Î£Î±'.split('_'),
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? 'Î¼Î¼' : 'ÎœÎœ';
            } else {
                return isLower ? 'Ï€Î¼' : 'Î Îœ';
            }
        },
        isPM: function (input) {
            return (input + '').toLowerCase()[0] === 'Î¼';
        },
        meridiemParse: /[Î Îœ]\.?Îœ?\.?/i,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendarEl: {
            sameDay: '[Î£Î®Î¼ÎµÏÎ± {}] LT',
            nextDay: '[Î‘ÏÏÎ¹Î¿ {}] LT',
            nextWeek: 'dddd [{}] LT',
            lastDay: '[Î§Î¸ÎµÏ‚ {}] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 6:
                        return '[Ï„Î¿ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î¿] dddd [{}] LT';
                    default:
                        return '[Ï„Î·Î½ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î·] dddd [{}] LT';
                }
            },
            sameElse: 'L',
        },
        calendar: function (key, mom) {
            var output = this._calendarEl[key],
                hours = mom && mom.hours();
            if (isFunction(output)) {
                output = output.apply(mom);
            }
            return output.replace('{}', hours % 12 === 1 ? 'ÏƒÏ„Î·' : 'ÏƒÏ„Î¹Ï‚');
        },
        relativeTime: {
            future: 'ÏƒÎµ %s',
            past: '%s Ï€ÏÎ¹Î½',
            s: 'Î»Î¯Î³Î± Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
            ss: '%d Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
            m: 'Î­Î½Î± Î»ÎµÏ€Ï„ÏŒ',
            mm: '%d Î»ÎµÏ€Ï„Î¬',
            h: 'Î¼Î¯Î± ÏŽÏÎ±',
            hh: '%d ÏŽÏÎµÏ‚',
            d: 'Î¼Î¯Î± Î¼Î­ÏÎ±',
            dd: '%d Î¼Î­ÏÎµÏ‚',
            M: 'Î­Î½Î±Ï‚ Î¼Î®Î½Î±Ï‚',
            MM: '%d Î¼Î®Î½ÎµÏ‚',
            y: 'Î­Î½Î±Ï‚ Ï‡ÏÏŒÎ½Î¿Ï‚',
            yy: '%d Ï‡ÏÏŒÎ½Î¹Î±',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Î·/,
        ordinal: '%dÎ·',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4st is the first week of the year.
        },
    });

    return el;

})));
//! moment.js locale configuration
//! locale : English (Australia) [en-au]
//! author : Jared Morse : https://github.com/jarcoal

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var enAu = moment.defineLocale('en-au', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return enAu;

})));
//! moment.js locale configuration
//! locale : English (Canada) [en-ca]
//! author : Jonathan Abourbih : https://github.com/jonbca

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var enCa = moment.defineLocale('en-ca', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'YYYY-MM-DD',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY h:mm A',
            LLLL: 'dddd, MMMM D, YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
    });

    return enCa;

})));
//! moment.js locale configuration
//! locale : English (United Kingdom) [en-gb]
//! author : Chris Gedrim : https://github.com/chrisgedrim

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var enGb = moment.defineLocale('en-gb', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return enGb;

})));
//! moment.js locale configuration
//! locale : English (Ireland) [en-ie]
//! author : Chris Cartlidge : https://github.com/chriscartlidge

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var enIe = moment.defineLocale('en-ie', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return enIe;

})));
//! moment.js locale configuration
//! locale : English (Israel) [en-il]
//! author : Chris Gedrim : https://github.com/chrisgedrim

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var enIl = moment.defineLocale('en-il', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
    });

    return enIl;

})));
//! moment.js locale configuration
//! locale : English (India) [en-in]
//! author : Jatin Agrawal : https://github.com/jatinag22

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var enIn = moment.defineLocale('en-in', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 1st is the first week of the year.
        },
    });

    return enIn;

})));
//! moment.js locale configuration
//! locale : English (New Zealand) [en-nz]
//! author : Luke McGregor : https://github.com/lukemcgregor

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var enNz = moment.defineLocale('en-nz', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return enNz;

})));
//! moment.js locale configuration
//! locale : English (Singapore) [en-sg]
//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var enSg = moment.defineLocale('en-sg', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return enSg;

})));
//! moment.js locale configuration
//! locale : Esperanto [eo]
//! author : Colin Dean : https://github.com/colindean
//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
//! comment : miestasmia corrected the translation by colindean
//! comment : Vivakvo corrected the translation by colindean and miestasmia

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var eo = moment.defineLocale('eo', {
        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aÅ­g_sept_okt_nov_dec'.split('_'),
        weekdays: 'dimanÄ‰o_lundo_mardo_merkredo_ÄµaÅ­do_vendredo_sabato'.split('_'),
        weekdaysShort: 'dim_lun_mard_merk_ÄµaÅ­_ven_sab'.split('_'),
        weekdaysMin: 'di_lu_ma_me_Äµa_ve_sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: '[la] D[-an de] MMMM, YYYY',
            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
        },
        meridiemParse: /[ap]\.t\.m/i,
        isPM: function (input) {
            return input.charAt(0).toLowerCase() === 'p';
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? 'p.t.m.' : 'P.T.M.';
            } else {
                return isLower ? 'a.t.m.' : 'A.T.M.';
            }
        },
        calendar: {
            sameDay: '[HodiaÅ­ je] LT',
            nextDay: '[MorgaÅ­ je] LT',
            nextWeek: 'dddd[n je] LT',
            lastDay: '[HieraÅ­ je] LT',
            lastWeek: '[pasintan] dddd[n je] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'post %s',
            past: 'antaÅ­ %s',
            s: 'kelkaj sekundoj',
            ss: '%d sekundoj',
            m: 'unu minuto',
            mm: '%d minutoj',
            h: 'unu horo',
            hh: '%d horoj',
            d: 'unu tago', //ne 'diurno', Ä‰ar estas uzita por proksimumo
            dd: '%d tagoj',
            M: 'unu monato',
            MM: '%d monatoj',
            y: 'unu jaro',
            yy: '%d jaroj',
        },
        dayOfMonthOrdinalParse: /\d{1,2}a/,
        ordinal: '%da',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return eo;

})));
//! moment.js locale configuration
//! locale : Spanish (Dominican Republic) [es-do]

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    var esDo = moment.defineLocale('es-do', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
                return monthsShort[m.month()];
            } else {
                return monthsShortDot[m.month()];
            }
        },
        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY h:mm A',
            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return esDo;

})));
//! moment.js locale configuration
//! locale : Spanish (Mexico) [es-mx]
//! author : JC Franco : https://github.com/jcfranco

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    var esMx = moment.defineLocale('es-mx', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
                return monthsShort[m.month()];
            } else {
                return monthsShortDot[m.month()];
            }
        },
        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
        invalidDate: 'Fecha invÃ¡lida',
    });

    return esMx;

})));
//! moment.js locale configuration
//! locale : Spanish (United States) [es-us]
//! author : bustta : https://github.com/bustta
//! author : chrisrodz : https://github.com/chrisrodz

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    var esUs = moment.defineLocale('es-us', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
                return monthsShort[m.month()];
            } else {
                return monthsShortDot[m.month()];
            }
        },
        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'MM/DD/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY h:mm A',
            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return esUs;

})));
//! moment.js locale configuration
//! locale : Spanish [es]
//! author : Julio NapurÃ­ : https://github.com/julionc

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    var es = moment.defineLocale('es', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
                return monthsShort[m.month()];
            } else {
                return monthsShortDot[m.month()];
            }
        },
        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
        invalidDate: 'Fecha invÃ¡lida',
    });

    return es;

})));
//! moment.js locale configuration
//! locale : Estonian [et]
//! author : Henry Kehlmann : https://github.com/madhenry
//! improvements : Illimar Tambek : https://github.com/ragulka

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['mÃµne sekundi', 'mÃµni sekund', 'paar sekundit'],
            ss: [number + 'sekundi', number + 'sekundit'],
            m: ['Ã¼he minuti', 'Ã¼ks minut'],
            mm: [number + ' minuti', number + ' minutit'],
            h: ['Ã¼he tunni', 'tund aega', 'Ã¼ks tund'],
            hh: [number + ' tunni', number + ' tundi'],
            d: ['Ã¼he pÃ¤eva', 'Ã¼ks pÃ¤ev'],
            M: ['kuu aja', 'kuu aega', 'Ã¼ks kuu'],
            MM: [number + ' kuu', number + ' kuud'],
            y: ['Ã¼he aasta', 'aasta', 'Ã¼ks aasta'],
            yy: [number + ' aasta', number + ' aastat'],
        };
        if (withoutSuffix) {
            return format[key][2] ? format[key][2] : format[key][1];
        }
        return isFuture ? format[key][0] : format[key][1];
    }

    var et = moment.defineLocale('et', {
        months: 'jaanuar_veebruar_mÃ¤rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
            '_'
        ),
        monthsShort: 'jaan_veebr_mÃ¤rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(
            '_'
        ),
        weekdays: 'pÃ¼hapÃ¤ev_esmaspÃ¤ev_teisipÃ¤ev_kolmapÃ¤ev_neljapÃ¤ev_reede_laupÃ¤ev'.split(
            '_'
        ),
        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[TÃ¤na,] LT',
            nextDay: '[Homme,] LT',
            nextWeek: '[JÃ¤rgmine] dddd LT',
            lastDay: '[Eile,] LT',
            lastWeek: '[Eelmine] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s pÃ¤rast',
            past: '%s tagasi',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: '%d pÃ¤eva',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return et;

})));
//! moment.js locale configuration
//! locale : Basque [eu]
//! author : Eneko Illarramendi : https://github.com/eillarra

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var eu = moment.defineLocale('eu', {
        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
            '_'
        ),
        monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
            '_'
        ),
        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY[ko] MMMM[ren] D[a]',
            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
            l: 'YYYY-M-D',
            ll: 'YYYY[ko] MMM D[a]',
            lll: 'YYYY[ko] MMM D[a] HH:mm',
            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
        },
        calendar: {
            sameDay: '[gaur] LT[etan]',
            nextDay: '[bihar] LT[etan]',
            nextWeek: 'dddd LT[etan]',
            lastDay: '[atzo] LT[etan]',
            lastWeek: '[aurreko] dddd LT[etan]',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s barru',
            past: 'duela %s',
            s: 'segundo batzuk',
            ss: '%d segundo',
            m: 'minutu bat',
            mm: '%d minutu',
            h: 'ordu bat',
            hh: '%d ordu',
            d: 'egun bat',
            dd: '%d egun',
            M: 'hilabete bat',
            MM: '%d hilabete',
            y: 'urte bat',
            yy: '%d urte',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return eu;

})));
//! moment.js locale configuration
//! locale : Persian [fa]
//! author : Ebrahim Byagowi : https://github.com/ebraminio

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'Û±',
            2: 'Û²',
            3: 'Û³',
            4: 'Û´',
            5: 'Ûµ',
            6: 'Û¶',
            7: 'Û·',
            8: 'Û¸',
            9: 'Û¹',
            0: 'Û°',
        },
        numberMap = {
            'Û±': '1',
            'Û²': '2',
            'Û³': '3',
            'Û´': '4',
            'Ûµ': '5',
            'Û¶': '6',
            'Û·': '7',
            'Û¸': '8',
            'Û¹': '9',
            'Û°': '0',
        };

    var fa = moment.defineLocale('fa', {
        months: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
            '_'
        ),
        weekdaysShort: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
            '_'
        ),
        weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ø¬_Ø´'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        meridiemParse: /Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±|Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/,
        isPM: function (input) {
            return /Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±';
            } else {
                return 'Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù…Ø±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
            nextDay: '[ÙØ±Ø¯Ø§ Ø³Ø§Ø¹Øª] LT',
            nextWeek: 'dddd [Ø³Ø§Ø¹Øª] LT',
            lastDay: '[Ø¯ÛŒØ±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
            lastWeek: 'dddd [Ù¾ÛŒØ´] [Ø³Ø§Ø¹Øª] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¯Ø± %s',
            past: '%s Ù¾ÛŒØ´',
            s: 'Ú†Ù†Ø¯ Ø«Ø§Ù†ÛŒÙ‡',
            ss: '%d Ø«Ø§Ù†ÛŒÙ‡',
            m: 'ÛŒÚ© Ø¯Ù‚ÛŒÙ‚Ù‡',
            mm: '%d Ø¯Ù‚ÛŒÙ‚Ù‡',
            h: 'ÛŒÚ© Ø³Ø§Ø¹Øª',
            hh: '%d Ø³Ø§Ø¹Øª',
            d: 'ÛŒÚ© Ø±ÙˆØ²',
            dd: '%d Ø±ÙˆØ²',
            M: 'ÛŒÚ© Ù…Ø§Ù‡',
            MM: '%d Ù…Ø§Ù‡',
            y: 'ÛŒÚ© Ø³Ø§Ù„',
            yy: '%d Ø³Ø§Ù„',
        },
        preparse: function (string) {
            return string
                .replace(/[Û°-Û¹]/g, function (match) {
                    return numberMap[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        dayOfMonthOrdinalParse: /\d{1,2}Ù…/,
        ordinal: '%dÙ…',
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    return fa;

})));
//! moment.js locale configuration
//! locale : Finnish [fi]
//! author : Tarmo Aidantausta : https://github.com/bleadof

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var numbersPast = 'nolla yksi kaksi kolme neljÃ¤ viisi kuusi seitsemÃ¤n kahdeksan yhdeksÃ¤n'.split(
            ' '
        ),
        numbersFuture = [
            'nolla',
            'yhden',
            'kahden',
            'kolmen',
            'neljÃ¤n',
            'viiden',
            'kuuden',
            numbersPast[7],
            numbersPast[8],
            numbersPast[9],
        ];
    function translate(number, withoutSuffix, key, isFuture) {
        var result = '';
        switch (key) {
            case 's':
                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
            case 'ss':
                result = isFuture ? 'sekunnin' : 'sekuntia';
                break;
            case 'm':
                return isFuture ? 'minuutin' : 'minuutti';
            case 'mm':
                result = isFuture ? 'minuutin' : 'minuuttia';
                break;
            case 'h':
                return isFuture ? 'tunnin' : 'tunti';
            case 'hh':
                result = isFuture ? 'tunnin' : 'tuntia';
                break;
            case 'd':
                return isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤';
            case 'dd':
                result = isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤Ã¤';
                break;
            case 'M':
                return isFuture ? 'kuukauden' : 'kuukausi';
            case 'MM':
                result = isFuture ? 'kuukauden' : 'kuukautta';
                break;
            case 'y':
                return isFuture ? 'vuoden' : 'vuosi';
            case 'yy':
                result = isFuture ? 'vuoden' : 'vuotta';
                break;
        }
        result = verbalNumber(number, isFuture) + ' ' + result;
        return result;
    }
    function verbalNumber(number, isFuture) {
        return number < 10
            ? isFuture
                ? numbersFuture[number]
                : numbersPast[number]
            : number;
    }

    var fi = moment.defineLocale('fi', {
        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesÃ¤kuu_heinÃ¤kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
            '_'
        ),
        monthsShort: 'tammi_helmi_maalis_huhti_touko_kesÃ¤_heinÃ¤_elo_syys_loka_marras_joulu'.split(
            '_'
        ),
        weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
            '_'
        ),
        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD.MM.YYYY',
            LL: 'Do MMMM[ta] YYYY',
            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
            l: 'D.M.YYYY',
            ll: 'Do MMM YYYY',
            lll: 'Do MMM YYYY, [klo] HH.mm',
            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
        },
        calendar: {
            sameDay: '[tÃ¤nÃ¤Ã¤n] [klo] LT',
            nextDay: '[huomenna] [klo] LT',
            nextWeek: 'dddd [klo] LT',
            lastDay: '[eilen] [klo] LT',
            lastWeek: '[viime] dddd[na] [klo] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s pÃ¤Ã¤stÃ¤',
            past: '%s sitten',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return fi;

})));
//! moment.js locale configuration
//! locale : Filipino [fil]
//! author : Dan Hagman : https://github.com/hagmandan
//! author : Matthew Co : https://github.com/matthewdeeco

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var fil = moment.defineLocale('fil', {
        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
            '_'
        ),
        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
            '_'
        ),
        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'MM/D/YYYY',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY HH:mm',
            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
        },
        calendar: {
            sameDay: 'LT [ngayong araw]',
            nextDay: '[Bukas ng] LT',
            nextWeek: 'LT [sa susunod na] dddd',
            lastDay: 'LT [kahapon]',
            lastWeek: 'LT [noong nakaraang] dddd',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'sa loob ng %s',
            past: '%s ang nakalipas',
            s: 'ilang segundo',
            ss: '%d segundo',
            m: 'isang minuto',
            mm: '%d minuto',
            h: 'isang oras',
            hh: '%d oras',
            d: 'isang araw',
            dd: '%d araw',
            M: 'isang buwan',
            MM: '%d buwan',
            y: 'isang taon',
            yy: '%d taon',
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: function (number) {
            return number;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return fil;

})));
//! moment.js locale configuration
//! locale : Faroese [fo]
//! author : Ragnar Johannesen : https://github.com/ragnar123
//! author : Kristian Sakarisson : https://github.com/sakarisson

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var fo = moment.defineLocale('fo', {
        months: 'januar_februar_mars_aprÃ­l_mai_juni_juli_august_september_oktober_november_desember'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
        weekdays: 'sunnudagur_mÃ¡nadagur_tÃ½sdagur_mikudagur_hÃ³sdagur_frÃ­ggjadagur_leygardagur'.split(
            '_'
        ),
        weekdaysShort: 'sun_mÃ¡n_tÃ½s_mik_hÃ³s_frÃ­_ley'.split('_'),
        weekdaysMin: 'su_mÃ¡_tÃ½_mi_hÃ³_fr_le'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D. MMMM, YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ã dag kl.] LT',
            nextDay: '[Ã morgin kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[Ã gjÃ¡r kl.] LT',
            lastWeek: '[sÃ­Ã°stu] dddd [kl] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'um %s',
            past: '%s sÃ­Ã°ani',
            s: 'fÃ¡ sekund',
            ss: '%d sekundir',
            m: 'ein minuttur',
            mm: '%d minuttir',
            h: 'ein tÃ­mi',
            hh: '%d tÃ­mar',
            d: 'ein dagur',
            dd: '%d dagar',
            M: 'ein mÃ¡naÃ°ur',
            MM: '%d mÃ¡naÃ°ir',
            y: 'eitt Ã¡r',
            yy: '%d Ã¡r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return fo;

})));
//! moment.js locale configuration
//! locale : French (Canada) [fr-ca]
//! author : Jonathan Abourbih : https://github.com/jonbca

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var frCa = moment.defineLocale('fr-ca', {
        months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
            '_'
        ),
        monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Aujourdâ€™hui Ã ] LT',
            nextDay: '[Demain Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[Hier Ã ] LT',
            lastWeek: 'dddd [dernier Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
        ordinal: function (number, period) {
            switch (period) {
                // Words with masculine grammatical gender: mois, trimestre, jour
                default:
                case 'M':
                case 'Q':
                case 'D':
                case 'DDD':
                case 'd':
                    return number + (number === 1 ? 'er' : 'e');

                // Words with feminine grammatical gender: semaine
                case 'w':
                case 'W':
                    return number + (number === 1 ? 're' : 'e');
            }
        },
    });

    return frCa;

})));
//! moment.js locale configuration
//! locale : French (Switzerland) [fr-ch]
//! author : Gaspard Bucher : https://github.com/gaspard

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var frCh = moment.defineLocale('fr-ch', {
        months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
            '_'
        ),
        monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Aujourdâ€™hui Ã ] LT',
            nextDay: '[Demain Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[Hier Ã ] LT',
            lastWeek: 'dddd [dernier Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
        ordinal: function (number, period) {
            switch (period) {
                // Words with masculine grammatical gender: mois, trimestre, jour
                default:
                case 'M':
                case 'Q':
                case 'D':
                case 'DDD':
                case 'd':
                    return number + (number === 1 ? 'er' : 'e');

                // Words with feminine grammatical gender: semaine
                case 'w':
                case 'W':
                    return number + (number === 1 ? 're' : 'e');
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return frCh;

})));
//! moment.js locale configuration
//! locale : French [fr]
//! author : John Fischer : https://github.com/jfroffice

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var monthsStrictRegex = /^(janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
        monthsShortStrictRegex = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?)/i,
        monthsRegex = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?|janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
        monthsParse = [
            /^janv/i,
            /^fÃ©vr/i,
            /^mars/i,
            /^avr/i,
            /^mai/i,
            /^juin/i,
            /^juil/i,
            /^aoÃ»t/i,
            /^sept/i,
            /^oct/i,
            /^nov/i,
            /^dÃ©c/i,
        ];

    var fr = moment.defineLocale('fr', {
        months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
            '_'
        ),
        monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
            '_'
        ),
        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        monthsStrictRegex: monthsStrictRegex,
        monthsShortStrictRegex: monthsShortStrictRegex,
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,
        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Aujourdâ€™hui Ã ] LT',
            nextDay: '[Demain Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[Hier Ã ] LT',
            lastWeek: 'dddd [dernier Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            w: 'une semaine',
            ww: '%d semaines',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
        ordinal: function (number, period) {
            switch (period) {
                // TODO: Return 'e' when day of month > 1. Move this case inside
                // block for masculine words below.
                // See https://github.com/moment/moment/issues/3375
                case 'D':
                    return number + (number === 1 ? 'er' : '');

                // Words with masculine grammatical gender: mois, trimestre, jour
                default:
                case 'M':
                case 'Q':
                case 'DDD':
                case 'd':
                    return number + (number === 1 ? 'er' : 'e');

                // Words with feminine grammatical gender: semaine
                case 'w':
                case 'W':
                    return number + (number === 1 ? 're' : 'e');
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return fr;

})));
//! moment.js locale configuration
//! locale : Frisian [fy]
//! author : Robin van der Vliet : https://github.com/robin0van0der0v

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(
            '_'
        ),
        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(
            '_'
        );

    var fy = moment.defineLocale('fy', {
        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortWithDots;
            } else if (/-MMM-/.test(format)) {
                return monthsShortWithoutDots[m.month()];
            } else {
                return monthsShortWithDots[m.month()];
            }
        },
        monthsParseExact: true,
        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
            '_'
        ),
        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[hjoed om] LT',
            nextDay: '[moarn om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[juster om] LT',
            lastWeek: '[Ã´frÃ»ne] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'oer %s',
            past: '%s lyn',
            s: 'in pear sekonden',
            ss: '%d sekonden',
            m: 'ien minÃºt',
            mm: '%d minuten',
            h: 'ien oere',
            hh: '%d oeren',
            d: 'ien dei',
            dd: '%d dagen',
            M: 'ien moanne',
            MM: '%d moannen',
            y: 'ien jier',
            yy: '%d jierren',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            );
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return fy;

})));
//! moment.js locale configuration
//! locale : Irish or Irish Gaelic [ga]
//! author : AndrÃ© Silva : https://github.com/askpt

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var months = [
            'EanÃ¡ir',
            'Feabhra',
            'MÃ¡rta',
            'AibreÃ¡n',
            'Bealtaine',
            'Meitheamh',
            'IÃºil',
            'LÃºnasa',
            'MeÃ¡n FÃ³mhair',
            'Deireadh FÃ³mhair',
            'Samhain',
            'Nollaig',
        ],
        monthsShort = [
            'Ean',
            'Feabh',
            'MÃ¡rt',
            'Aib',
            'Beal',
            'Meith',
            'IÃºil',
            'LÃºn',
            'M.F.',
            'D.F.',
            'Samh',
            'Noll',
        ],
        weekdays = [
            'DÃ© Domhnaigh',
            'DÃ© Luain',
            'DÃ© MÃ¡irt',
            'DÃ© CÃ©adaoin',
            'DÃ©ardaoin',
            'DÃ© hAoine',
            'DÃ© Sathairn',
        ],
        weekdaysShort = ['Domh', 'Luan', 'MÃ¡irt', 'CÃ©ad', 'DÃ©ar', 'Aoine', 'Sath'],
        weekdaysMin = ['Do', 'Lu', 'MÃ¡', 'CÃ©', 'DÃ©', 'A', 'Sa'];

    var ga = moment.defineLocale('ga', {
        months: months,
        monthsShort: monthsShort,
        monthsParseExact: true,
        weekdays: weekdays,
        weekdaysShort: weekdaysShort,
        weekdaysMin: weekdaysMin,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Inniu ag] LT',
            nextDay: '[AmÃ¡rach ag] LT',
            nextWeek: 'dddd [ag] LT',
            lastDay: '[InnÃ© ag] LT',
            lastWeek: 'dddd [seo caite] [ag] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'i %s',
            past: '%s Ã³ shin',
            s: 'cÃºpla soicind',
            ss: '%d soicind',
            m: 'nÃ³imÃ©ad',
            mm: '%d nÃ³imÃ©ad',
            h: 'uair an chloig',
            hh: '%d uair an chloig',
            d: 'lÃ¡',
            dd: '%d lÃ¡',
            M: 'mÃ­',
            MM: '%d mÃ­onna',
            y: 'bliain',
            yy: '%d bliain',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
        ordinal: function (number) {
            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return ga;

})));
//! moment.js locale configuration
//! locale : Scottish Gaelic [gd]
//! author : Jon Ashdown : https://github.com/jonashdown

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var months = [
            'Am Faoilleach',
            'An Gearran',
            'Am MÃ rt',
            'An Giblean',
            'An CÃ¨itean',
            'An t-Ã’gmhios',
            'An t-Iuchar',
            'An LÃ¹nastal',
            'An t-Sultain',
            'An DÃ mhair',
            'An t-Samhain',
            'An DÃ¹bhlachd',
        ],
        monthsShort = [
            'Faoi',
            'Gear',
            'MÃ rt',
            'Gibl',
            'CÃ¨it',
            'Ã’gmh',
            'Iuch',
            'LÃ¹n',
            'Sult',
            'DÃ mh',
            'Samh',
            'DÃ¹bh',
        ],
        weekdays = [
            'DidÃ²mhnaich',
            'Diluain',
            'DimÃ irt',
            'Diciadain',
            'Diardaoin',
            'Dihaoine',
            'Disathairne',
        ],
        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
        weekdaysMin = ['DÃ²', 'Lu', 'MÃ ', 'Ci', 'Ar', 'Ha', 'Sa'];

    var gd = moment.defineLocale('gd', {
        months: months,
        monthsShort: monthsShort,
        monthsParseExact: true,
        weekdays: weekdays,
        weekdaysShort: weekdaysShort,
        weekdaysMin: weekdaysMin,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[An-diugh aig] LT',
            nextDay: '[A-mÃ ireach aig] LT',
            nextWeek: 'dddd [aig] LT',
            lastDay: '[An-dÃ¨ aig] LT',
            lastWeek: 'dddd [seo chaidh] [aig] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ann an %s',
            past: 'bho chionn %s',
            s: 'beagan diogan',
            ss: '%d diogan',
            m: 'mionaid',
            mm: '%d mionaidean',
            h: 'uair',
            hh: '%d uairean',
            d: 'latha',
            dd: '%d latha',
            M: 'mÃ¬os',
            MM: '%d mÃ¬osan',
            y: 'bliadhna',
            yy: '%d bliadhna',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
        ordinal: function (number) {
            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return gd;

})));
//! moment.js locale configuration
//! locale : Galician [gl]
//! author : Juan G. Hurtado : https://github.com/juanghurtado

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var gl = moment.defineLocale('gl', {
        months: 'xaneiro_febreiro_marzo_abril_maio_xuÃ±o_xullo_agosto_setembro_outubro_novembro_decembro'.split(
            '_'
        ),
        monthsShort: 'xan._feb._mar._abr._mai._xuÃ±._xul._ago._set._out._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'domingo_luns_martes_mÃ©rcores_xoves_venres_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._mÃ©r._xov._ven._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mÃ©_xo_ve_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[hoxe ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±Ã¡ ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT';
            },
            lastDay: function () {
                return '[onte ' + (this.hours() !== 1 ? 'Ã¡' : 'a') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: function (str) {
                if (str.indexOf('un') === 0) {
                    return 'n' + str;
                }
                return 'en ' + str;
            },
            past: 'hai %s',
            s: 'uns segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'unha hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            M: 'un mes',
            MM: '%d meses',
            y: 'un ano',
            yy: '%d anos',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return gl;

})));
//! moment.js locale configuration
//! locale : Konkani Devanagari script [gom-deva]
//! author : The Discoverer : https://github.com/WikiDiscoverer

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['à¤¥à¥‹à¤¡à¤¯à¤¾ à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', 'à¤¥à¥‹à¤¡à¥‡ à¤¸à¥…à¤•à¤‚à¤¡'],
            ss: [number + ' à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', number + ' à¤¸à¥…à¤•à¤‚à¤¡'],
            m: ['à¤à¤•à¤¾ à¤®à¤¿à¤£à¤Ÿà¤¾à¤¨', 'à¤à¤• à¤®à¤¿à¤¨à¥‚à¤Ÿ'],
            mm: [number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚à¤¨à¥€', number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚'],
            h: ['à¤à¤•à¤¾ à¤µà¤°à¤¾à¤¨', 'à¤à¤• à¤µà¤°'],
            hh: [number + ' à¤µà¤°à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¤¾à¤‚'],
            d: ['à¤à¤•à¤¾ à¤¦à¤¿à¤¸à¤¾à¤¨', 'à¤à¤• à¤¦à¥€à¤¸'],
            dd: [number + ' à¤¦à¤¿à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤¦à¥€à¤¸'],
            M: ['à¤à¤•à¤¾ à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨', 'à¤à¤• à¤®à¥à¤¹à¤¯à¤¨à¥‹'],
            MM: [number + ' à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨à¥€', number + ' à¤®à¥à¤¹à¤¯à¤¨à¥‡'],
            y: ['à¤à¤•à¤¾ à¤µà¤°à¥à¤¸à¤¾à¤¨', 'à¤à¤• à¤µà¤°à¥à¤¸'],
            yy: [number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚'],
        };
        return isFuture ? format[key][0] : format[key][1];
    }

    var gomDeva = moment.defineLocale('gom-deva', {
        months: {
            standalone: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¯_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
                '_'
            ),
            format: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤®à¤¾à¤°à¥à¤šà¤¾à¤šà¥à¤¯à¤¾_à¤à¤ªà¥à¤°à¥€à¤²à¤¾à¤šà¥à¤¯à¤¾_à¤®à¥‡à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥‚à¤¨à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥à¤²à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤—à¤¸à¥à¤Ÿà¤¾à¤šà¥à¤¯à¤¾_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾'.split(
                '_'
            ),
            isFormat: /MMMM(\s)+D[oD]?/,
        },
        monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€._à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¤†à¤¯à¤¤à¤¾à¤°_à¤¸à¥‹à¤®à¤¾à¤°_à¤®à¤‚à¤—à¤³à¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤¬à¤¿à¤°à¥‡à¤¸à¥à¤¤à¤¾à¤°_à¤¸à¥à¤•à¥à¤°à¤¾à¤°_à¤¶à¥‡à¤¨à¤µà¤¾à¤°'.split('_'),
        weekdaysShort: 'à¤†à¤¯à¤¤._à¤¸à¥‹à¤®._à¤®à¤‚à¤—à¤³._à¤¬à¥à¤§._à¤¬à¥à¤°à¥‡à¤¸à¥à¤¤._à¤¸à¥à¤•à¥à¤°._à¤¶à¥‡à¤¨.'.split('_'),
        weekdaysMin: 'à¤†_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤¬à¥à¤°à¥‡_à¤¸à¥_à¤¶à¥‡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            LTS: 'A h:mm:ss [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            llll: 'ddd, D MMM YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        },
        calendar: {
            sameDay: '[à¤†à¤¯à¤œ] LT',
            nextDay: '[à¤«à¤¾à¤²à¥à¤¯à¤¾à¤‚] LT',
            nextWeek: '[à¤«à¥à¤¡à¤²à¥‹] dddd[,] LT',
            lastDay: '[à¤•à¤¾à¤²] LT',
            lastWeek: '[à¤«à¤¾à¤Ÿà¤²à¥‹] dddd[,] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s',
            past: '%s à¤†à¤¦à¥€à¤‚',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: processRelativeTime,
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}(à¤µà¥‡à¤°)/,
        ordinal: function (number, period) {
            switch (period) {
                // the ordinal 'à¤µà¥‡à¤°' only applies to day of the month
                case 'D':
                    return number + 'à¤µà¥‡à¤°';
                default:
                case 'M':
                case 'Q':
                case 'DDD':
                case 'd':
                case 'w':
                case 'W':
                    return number;
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week
            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
        },
        meridiemParse: /à¤°à¤¾à¤¤à¥€|à¤¸à¤•à¤¾à¤³à¥€à¤‚|à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚|à¤¸à¤¾à¤‚à¤œà¥‡/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤°à¤¾à¤¤à¥€') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¤•à¤¾à¤³à¥€à¤‚') {
                return hour;
            } else if (meridiem === 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚') {
                return hour > 12 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¤¾à¤‚à¤œà¥‡') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¤°à¤¾à¤¤à¥€';
            } else if (hour < 12) {
                return 'à¤¸à¤•à¤¾à¤³à¥€à¤‚';
            } else if (hour < 16) {
                return 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚';
            } else if (hour < 20) {
                return 'à¤¸à¤¾à¤‚à¤œà¥‡';
            } else {
                return 'à¤°à¤¾à¤¤à¥€';
            }
        },
    });

    return gomDeva;

})));
//! moment.js locale configuration
//! locale : Konkani Latin script [gom-latn]
//! author : The Discoverer : https://github.com/WikiDiscoverer

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['thoddea sekondamni', 'thodde sekond'],
            ss: [number + ' sekondamni', number + ' sekond'],
            m: ['eka mintan', 'ek minut'],
            mm: [number + ' mintamni', number + ' mintam'],
            h: ['eka voran', 'ek vor'],
            hh: [number + ' voramni', number + ' voram'],
            d: ['eka disan', 'ek dis'],
            dd: [number + ' disamni', number + ' dis'],
            M: ['eka mhoinean', 'ek mhoino'],
            MM: [number + ' mhoineamni', number + ' mhoine'],
            y: ['eka vorsan', 'ek voros'],
            yy: [number + ' vorsamni', number + ' vorsam'],
        };
        return isFuture ? format[key][0] : format[key][1];
    }

    var gomLatn = moment.defineLocale('gom-latn', {
        months: {
            standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
                '_'
            ),
            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
                '_'
            ),
            isFormat: /MMMM(\s)+D[oD]?/,
        },
        monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'A h:mm [vazta]',
            LTS: 'A h:mm:ss [vazta]',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY A h:mm [vazta]',
            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
        },
        calendar: {
            sameDay: '[Aiz] LT',
            nextDay: '[Faleam] LT',
            nextWeek: '[Fuddlo] dddd[,] LT',
            lastDay: '[Kal] LT',
            lastWeek: '[Fattlo] dddd[,] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s',
            past: '%s adim',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: processRelativeTime,
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er)/,
        ordinal: function (number, period) {
            switch (period) {
                // the ordinal 'er' only applies to day of the month
                case 'D':
                    return number + 'er';
                default:
                case 'M':
                case 'Q':
                case 'DDD':
                case 'd':
                case 'w':
                case 'W':
                    return number;
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week
            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
        },
        meridiemParse: /rati|sokallim|donparam|sanje/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'rati') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'sokallim') {
                return hour;
            } else if (meridiem === 'donparam') {
                return hour > 12 ? hour : hour + 12;
            } else if (meridiem === 'sanje') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'rati';
            } else if (hour < 12) {
                return 'sokallim';
            } else if (hour < 16) {
                return 'donparam';
            } else if (hour < 20) {
                return 'sanje';
            } else {
                return 'rati';
            }
        },
    });

    return gomLatn;

})));
//! moment.js locale configuration
//! locale : Gujarati [gu]
//! author : Kaushik Thanki : https://github.com/Kaushik1987

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à«§',
            2: 'à«¨',
            3: 'à«©',
            4: 'à«ª',
            5: 'à««',
            6: 'à«¬',
            7: 'à«­',
            8: 'à«®',
            9: 'à«¯',
            0: 'à«¦',
        },
        numberMap = {
            'à«§': '1',
            'à«¨': '2',
            'à«©': '3',
            'à«ª': '4',
            'à««': '5',
            'à«¬': '6',
            'à«­': '7',
            'à«®': '8',
            'à«¯': '9',
            'à«¦': '0',
        };

    var gu = moment.defineLocale('gu', {
        months: 'àªœàª¾àª¨à«àª¯à«àª†àª°à«€_àª«à«‡àª¬à«àª°à«àª†àª°à«€_àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿àª²_àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾àªˆ_àª‘àª—àª¸à«àªŸ_àª¸àªªà«àªŸà«‡àª®à«àª¬àª°_àª‘àª•à«àªŸà«àª¬àª°_àª¨àªµà«‡àª®à«àª¬àª°_àª¡àª¿àª¸à«‡àª®à«àª¬àª°'.split(
            '_'
        ),
        monthsShort: 'àªœàª¾àª¨à«àª¯à«._àª«à«‡àª¬à«àª°à«._àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿._àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾._àª‘àª—._àª¸àªªà«àªŸà«‡._àª‘àª•à«àªŸà«._àª¨àªµà«‡._àª¡àª¿àª¸à«‡.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'àª°àªµàª¿àªµàª¾àª°_àª¸à«‹àª®àªµàª¾àª°_àª®àª‚àª—àª³àªµàª¾àª°_àª¬à«àª§à«àªµàª¾àª°_àª—à«àª°à«àªµàª¾àª°_àª¶à«àª•à«àª°àªµàª¾àª°_àª¶àª¨àª¿àªµàª¾àª°'.split(
            '_'
        ),
        weekdaysShort: 'àª°àªµàª¿_àª¸à«‹àª®_àª®àª‚àª—àª³_àª¬à«àª§à«_àª—à«àª°à«_àª¶à«àª•à«àª°_àª¶àª¨àª¿'.split('_'),
        weekdaysMin: 'àª°_àª¸à«‹_àª®àª‚_àª¬à«_àª—à«_àª¶à«_àª¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm àªµàª¾àª—à«àª¯à«‡',
            LTS: 'A h:mm:ss àªµàª¾àª—à«àª¯à«‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
            LLLL: 'dddd, D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
        },
        calendar: {
            sameDay: '[àª†àªœ] LT',
            nextDay: '[àª•àª¾àª²à«‡] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[àª—àª‡àª•àª¾àª²à«‡] LT',
            lastWeek: '[àªªàª¾àª›àª²àª¾] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s àª®àª¾',
            past: '%s àªªàª¹à«‡àª²àª¾',
            s: 'àª…àª®à«àª• àªªàª³à«‹',
            ss: '%d àª¸à«‡àª•àª‚àª¡',
            m: 'àªàª• àª®àª¿àª¨àª¿àªŸ',
            mm: '%d àª®àª¿àª¨àª¿àªŸ',
            h: 'àªàª• àª•àª²àª¾àª•',
            hh: '%d àª•àª²àª¾àª•',
            d: 'àªàª• àª¦àª¿àªµàª¸',
            dd: '%d àª¦àª¿àªµàª¸',
            M: 'àªàª• àª®àª¹àª¿àª¨à«‹',
            MM: '%d àª®àª¹àª¿àª¨à«‹',
            y: 'àªàª• àªµàª°à«àª·',
            yy: '%d àªµàª°à«àª·',
        },
        preparse: function (string) {
            return string.replace(/[à«§à«¨à«©à«ªà««à«¬à«­à«®à«¯à«¦]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
        meridiemParse: /àª°àª¾àª¤|àª¬àªªà«‹àª°|àª¸àªµàª¾àª°|àª¸àª¾àª‚àªœ/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'àª°àª¾àª¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'àª¸àªµàª¾àª°') {
                return hour;
            } else if (meridiem === 'àª¬àªªà«‹àª°') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'àª¸àª¾àª‚àªœ') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'àª°àª¾àª¤';
            } else if (hour < 10) {
                return 'àª¸àªµàª¾àª°';
            } else if (hour < 17) {
                return 'àª¬àªªà«‹àª°';
            } else if (hour < 20) {
                return 'àª¸àª¾àª‚àªœ';
            } else {
                return 'àª°àª¾àª¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return gu;

})));
//! moment.js locale configuration
//! locale : Hebrew [he]
//! author : Tomer Cohen : https://github.com/tomer
//! author : Moshe Simantov : https://github.com/DevelopmentIL
//! author : Tal Ater : https://github.com/TalAter

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var he = moment.defineLocale('he', {
        months: '×™× ×•××¨_×¤×‘×¨×•××¨_×ž×¨×¥_××¤×¨×™×œ_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×•×¡×˜_×¡×¤×˜×ž×‘×¨_××•×§×˜×•×‘×¨_× ×•×‘×ž×‘×¨_×“×¦×ž×‘×¨'.split(
            '_'
        ),
        monthsShort: '×™× ×•×³_×¤×‘×¨×³_×ž×¨×¥_××¤×¨×³_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×³_×¡×¤×˜×³_××•×§×³_× ×•×‘×³_×“×¦×ž×³'.split(
            '_'
        ),
        weekdays: '×¨××©×•×Ÿ_×©× ×™_×©×œ×™×©×™_×¨×‘×™×¢×™_×—×ž×™×©×™_×©×™×©×™_×©×‘×ª'.split('_'),
        weekdaysShort: '××³_×‘×³_×’×³_×“×³_×”×³_×•×³_×©×³'.split('_'),
        weekdaysMin: '×_×‘_×’_×“_×”_×•_×©'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [×‘]MMMM YYYY',
            LLL: 'D [×‘]MMMM YYYY HH:mm',
            LLLL: 'dddd, D [×‘]MMMM YYYY HH:mm',
            l: 'D/M/YYYY',
            ll: 'D MMM YYYY',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd, D MMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[×”×™×•× ×‘Ö¾]LT',
            nextDay: '[×ž×—×¨ ×‘Ö¾]LT',
            nextWeek: 'dddd [×‘×©×¢×”] LT',
            lastDay: '[××ª×ž×•×œ ×‘Ö¾]LT',
            lastWeek: '[×‘×™×•×] dddd [×”××—×¨×•×Ÿ ×‘×©×¢×”] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '×‘×¢×•×“ %s',
            past: '×œ×¤× ×™ %s',
            s: '×ž×¡×¤×¨ ×©× ×™×•×ª',
            ss: '%d ×©× ×™×•×ª',
            m: '×“×§×”',
            mm: '%d ×“×§×•×ª',
            h: '×©×¢×”',
            hh: function (number) {
                if (number === 2) {
                    return '×©×¢×ª×™×™×';
                }
                return number + ' ×©×¢×•×ª';
            },
            d: '×™×•×',
            dd: function (number) {
                if (number === 2) {
                    return '×™×•×ž×™×™×';
                }
                return number + ' ×™×ž×™×';
            },
            M: '×—×•×“×©',
            MM: function (number) {
                if (number === 2) {
                    return '×—×•×“×©×™×™×';
                }
                return number + ' ×—×•×“×©×™×';
            },
            y: '×©× ×”',
            yy: function (number) {
                if (number === 2) {
                    return '×©× ×ª×™×™×';
                } else if (number % 10 === 0 && number !== 10) {
                    return number + ' ×©× ×”';
                }
                return number + ' ×©× ×™×';
            },
        },
        meridiemParse: /××—×”"×¦|×œ×¤× ×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×œ×¤× ×™ ×”×¦×”×¨×™×™×|×œ×¤× ×•×ª ×‘×•×§×¨|×‘×‘×•×§×¨|×‘×¢×¨×‘/i,
        isPM: function (input) {
            return /^(××—×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×‘×¢×¨×‘)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 5) {
                return '×œ×¤× ×•×ª ×‘×•×§×¨';
            } else if (hour < 10) {
                return '×‘×‘×•×§×¨';
            } else if (hour < 12) {
                return isLower ? '×œ×¤× ×”"×¦' : '×œ×¤× ×™ ×”×¦×”×¨×™×™×';
            } else if (hour < 18) {
                return isLower ? '××—×”"×¦' : '××—×¨×™ ×”×¦×”×¨×™×™×';
            } else {
                return '×‘×¢×¨×‘';
            }
        },
    });

    return he;

})));
//! moment.js locale configuration
//! locale : Hindi [hi]
//! author : Mayank Singhal : https://github.com/mayanksinghal

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à¥§',
            2: 'à¥¨',
            3: 'à¥©',
            4: 'à¥ª',
            5: 'à¥«',
            6: 'à¥¬',
            7: 'à¥­',
            8: 'à¥®',
            9: 'à¥¯',
            0: 'à¥¦',
        },
        numberMap = {
            'à¥§': '1',
            'à¥¨': '2',
            'à¥©': '3',
            'à¥ª': '4',
            'à¥«': '5',
            'à¥¬': '6',
            'à¥­': '7',
            'à¥®': '8',
            'à¥¯': '9',
            'à¥¦': '0',
        },
        monthsParse = [
            /^à¤œà¤¨/i,
            /^à¤«à¤¼à¤°|à¤«à¤°/i,
            /^à¤®à¤¾à¤°à¥à¤š/i,
            /^à¤…à¤ªà¥à¤°à¥ˆ/i,
            /^à¤®à¤ˆ/i,
            /^à¤œà¥‚à¤¨/i,
            /^à¤œà¥à¤²/i,
            /^à¤…à¤—/i,
            /^à¤¸à¤¿à¤¤à¤‚|à¤¸à¤¿à¤¤/i,
            /^à¤…à¤•à¥à¤Ÿà¥‚/i,
            /^à¤¨à¤µ|à¤¨à¤µà¤‚/i,
            /^à¤¦à¤¿à¤¸à¤‚|à¤¦à¤¿à¤¸/i,
        ],
        shortMonthsParse = [
            /^à¤œà¤¨/i,
            /^à¤«à¤¼à¤°/i,
            /^à¤®à¤¾à¤°à¥à¤š/i,
            /^à¤…à¤ªà¥à¤°à¥ˆ/i,
            /^à¤®à¤ˆ/i,
            /^à¤œà¥‚à¤¨/i,
            /^à¤œà¥à¤²/i,
            /^à¤…à¤—/i,
            /^à¤¸à¤¿à¤¤/i,
            /^à¤…à¤•à¥à¤Ÿà¥‚/i,
            /^à¤¨à¤µ/i,
            /^à¤¦à¤¿à¤¸/i,
        ];

    var hi = moment.defineLocale('hi', {
        months: {
            format: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤¼à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤®à¥à¤¬à¤°_à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°'.split(
                '_'
            ),
            standalone: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤‚à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤‚à¤¬à¤°_à¤¦à¤¿à¤¸à¤‚à¤¬à¤°'.split(
                '_'
            ),
        },
        monthsShort: 'à¤œà¤¨._à¤«à¤¼à¤°._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆ._à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤…à¤—._à¤¸à¤¿à¤¤._à¤…à¤•à¥à¤Ÿà¥‚._à¤¨à¤µ._à¤¦à¤¿à¤¸.'.split(
            '_'
        ),
        weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤²à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
        weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤²_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
        weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¤¬à¤œà¥‡',
            LTS: 'A h:mm:ss à¤¬à¤œà¥‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
        },

        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: shortMonthsParse,

        monthsRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

        monthsShortRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

        monthsStrictRegex: /^(à¤œà¤¨à¤µà¤°à¥€?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ?|à¤…à¤—à¤¸à¥à¤¤?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤?\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°?)/i,

        monthsShortStrictRegex: /^(à¤œà¤¨\.?|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²\.?|à¤…à¤—\.?|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸\.?)/i,

        calendar: {
            sameDay: '[à¤†à¤œ] LT',
            nextDay: '[à¤•à¤²] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¤•à¤²] LT',
            lastWeek: '[à¤ªà¤¿à¤›à¤²à¥‡] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¤®à¥‡à¤‚',
            past: '%s à¤ªà¤¹à¤²à¥‡',
            s: 'à¤•à¥à¤› à¤¹à¥€ à¤•à¥à¤·à¤£',
            ss: '%d à¤¸à¥‡à¤•à¤‚à¤¡',
            m: 'à¤à¤• à¤®à¤¿à¤¨à¤Ÿ',
            mm: '%d à¤®à¤¿à¤¨à¤Ÿ',
            h: 'à¤à¤• à¤˜à¤‚à¤Ÿà¤¾',
            hh: '%d à¤˜à¤‚à¤Ÿà¥‡',
            d: 'à¤à¤• à¤¦à¤¿à¤¨',
            dd: '%d à¤¦à¤¿à¤¨',
            M: 'à¤à¤• à¤®à¤¹à¥€à¤¨à¥‡',
            MM: '%d à¤®à¤¹à¥€à¤¨à¥‡',
            y: 'à¤à¤• à¤µà¤°à¥à¤·',
            yy: '%d à¤µà¤°à¥à¤·',
        },
        preparse: function (string) {
            return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
        meridiemParse: /à¤°à¤¾à¤¤|à¤¸à¥à¤¬à¤¹|à¤¦à¥‹à¤ªà¤¹à¤°|à¤¶à¤¾à¤®/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤°à¤¾à¤¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¥à¤¬à¤¹') {
                return hour;
            } else if (meridiem === 'à¤¦à¥‹à¤ªà¤¹à¤°') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à¤¶à¤¾à¤®') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¤°à¤¾à¤¤';
            } else if (hour < 10) {
                return 'à¤¸à¥à¤¬à¤¹';
            } else if (hour < 17) {
                return 'à¤¦à¥‹à¤ªà¤¹à¤°';
            } else if (hour < 20) {
                return 'à¤¶à¤¾à¤®';
            } else {
                return 'à¤°à¤¾à¤¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return hi;

})));
//! moment.js locale configuration
//! locale : Croatian [hr]
//! author : Bojan MarkoviÄ‡ : https://github.com/bmarkovic

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function translate(number, withoutSuffix, key) {
        var result = number + ' ';
        switch (key) {
            case 'ss':
                if (number === 1) {
                    result += 'sekunda';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sekunde';
                } else {
                    result += 'sekundi';
                }
                return result;
            case 'm':
                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
            case 'mm':
                if (number === 1) {
                    result += 'minuta';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'minute';
                } else {
                    result += 'minuta';
                }
                return result;
            case 'h':
                return withoutSuffix ? 'jedan sat' : 'jednog sata';
            case 'hh':
                if (number === 1) {
                    result += 'sat';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sata';
                } else {
                    result += 'sati';
                }
                return result;
            case 'dd':
                if (number === 1) {
                    result += 'dan';
                } else {
                    result += 'dana';
                }
                return result;
            case 'MM':
                if (number === 1) {
                    result += 'mjesec';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'mjeseca';
                } else {
                    result += 'mjeseci';
                }
                return result;
            case 'yy':
                if (number === 1) {
                    result += 'godina';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'godine';
                } else {
                    result += 'godina';
                }
                return result;
        }
    }

    var hr = moment.defineLocale('hr', {
        months: {
            format: 'sijeÄnja_veljaÄe_oÅ¾ujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
                '_'
            ),
            standalone: 'sijeÄanj_veljaÄa_oÅ¾ujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
                '_'
            ),
        },
        monthsShort: 'sij._velj._oÅ¾u._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'Do MMMM YYYY',
            LLL: 'Do MMMM YYYY H:mm',
            LLLL: 'dddd, Do MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedjelju] [u] LT';
                    case 3:
                        return '[u] [srijedu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄer u] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[proÅ¡lu] [nedjelju] [u] LT';
                    case 3:
                        return '[proÅ¡lu] [srijedu] [u] LT';
                    case 6:
                        return '[proÅ¡le] [subote] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[proÅ¡li] dddd [u] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'par sekundi',
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: 'dan',
            dd: translate,
            M: 'mjesec',
            MM: translate,
            y: 'godinu',
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return hr;

})));
//! moment.js locale configuration
//! locale : Hungarian [hu]
//! author : Adam Brunner : https://github.com/adambrunner
//! author : Peter Viszt  : https://github.com/passatgt

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var weekEndings = 'vasÃ¡rnap hÃ©tfÅ‘n kedden szerdÃ¡n csÃ¼tÃ¶rtÃ¶kÃ¶n pÃ©nteken szombaton'.split(
        ' '
    );
    function translate(number, withoutSuffix, key, isFuture) {
        var num = number;
        switch (key) {
            case 's':
                return isFuture || withoutSuffix
                    ? 'nÃ©hÃ¡ny mÃ¡sodperc'
                    : 'nÃ©hÃ¡ny mÃ¡sodperce';
            case 'ss':
                return num + (isFuture || withoutSuffix)
                    ? ' mÃ¡sodperc'
                    : ' mÃ¡sodperce';
            case 'm':
                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
            case 'mm':
                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
            case 'h':
                return 'egy' + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
            case 'hh':
                return num + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
            case 'd':
                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
            case 'dd':
                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
            case 'M':
                return 'egy' + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
            case 'MM':
                return num + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
            case 'y':
                return 'egy' + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
            case 'yy':
                return num + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
        }
        return '';
    }
    function week(isFuture) {
        return (
            (isFuture ? '' : '[mÃºlt] ') +
            '[' +
            weekEndings[this.day()] +
            '] LT[-kor]'
        );
    }

    var hu = moment.defineLocale('hu', {
        months: 'januÃ¡r_februÃ¡r_mÃ¡rcius_Ã¡prilis_mÃ¡jus_jÃºnius_jÃºlius_augusztus_szeptember_oktÃ³ber_november_december'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mÃ¡rc._Ã¡pr._mÃ¡j._jÃºn._jÃºl._aug._szept._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'vasÃ¡rnap_hÃ©tfÅ‘_kedd_szerda_csÃ¼tÃ¶rtÃ¶k_pÃ©ntek_szombat'.split('_'),
        weekdaysShort: 'vas_hÃ©t_kedd_sze_csÃ¼t_pÃ©n_szo'.split('_'),
        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'YYYY.MM.DD.',
            LL: 'YYYY. MMMM D.',
            LLL: 'YYYY. MMMM D. H:mm',
            LLLL: 'YYYY. MMMM D., dddd H:mm',
        },
        meridiemParse: /de|du/i,
        isPM: function (input) {
            return input.charAt(1).toLowerCase() === 'u';
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower === true ? 'de' : 'DE';
            } else {
                return isLower === true ? 'du' : 'DU';
            }
        },
        calendar: {
            sameDay: '[ma] LT[-kor]',
            nextDay: '[holnap] LT[-kor]',
            nextWeek: function () {
                return week.call(this, true);
            },
            lastDay: '[tegnap] LT[-kor]',
            lastWeek: function () {
                return week.call(this, false);
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s mÃºlva',
            past: '%s',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return hu;

})));
//! moment.js locale configuration
//! locale : Armenian [hy-am]
//! author : Armendarabyan : https://github.com/armendarabyan

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var hyAm = moment.defineLocale('hy-am', {
        months: {
            format: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€Õ«_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€Õ«_Õ´Õ¡Ö€Õ¿Õ«_Õ¡ÕºÖ€Õ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸Ö‚Õ¶Õ«Õ½Õ«_Õ°Õ¸Ö‚Õ¬Õ«Õ½Õ«_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«'.split(
                '_'
            ),
            standalone: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€_Õ´Õ¡Ö€Õ¿_Õ¡ÕºÖ€Õ«Õ¬_Õ´Õ¡ÕµÕ«Õ½_Õ°Õ¸Ö‚Õ¶Õ«Õ½_Õ°Õ¸Ö‚Õ¬Õ«Õ½_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'.split(
                '_'
            ),
        },
        monthsShort: 'Õ°Õ¶Õ¾_ÖƒÕ¿Ö€_Õ´Ö€Õ¿_Õ¡ÕºÖ€_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö…Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿'.split('_'),
        weekdays: 'Õ¯Õ«Ö€Õ¡Õ¯Õ«_Õ¥Ö€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«_Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸Ö‚Ö€Õ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©'.split(
            '_'
        ),
        weekdaysShort: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
        weekdaysMin: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Õ©.',
            LLL: 'D MMMM YYYY Õ©., HH:mm',
            LLLL: 'dddd, D MMMM YYYY Õ©., HH:mm',
        },
        calendar: {
            sameDay: '[Õ¡ÕµÕ½Ö…Ö€] LT',
            nextDay: '[Õ¾Õ¡Õ²Õ¨] LT',
            lastDay: '[Õ¥Ö€Õ¥Õ¯] LT',
            nextWeek: function () {
                return 'dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
            },
            lastWeek: function () {
                return '[Õ¡Õ¶ÖÕ¡Õ®] dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Õ°Õ¥Õ¿Õ¸',
            past: '%s Õ¡Õ¼Õ¡Õ»',
            s: 'Õ´Õ« Ö„Õ¡Õ¶Õ« Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
            ss: '%d Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
            m: 'Ö€Õ¸ÕºÕ¥',
            mm: '%d Ö€Õ¸ÕºÕ¥',
            h: 'ÕªÕ¡Õ´',
            hh: '%d ÕªÕ¡Õ´',
            d: 'Ö…Ö€',
            dd: '%d Ö…Ö€',
            M: 'Õ¡Õ´Õ«Õ½',
            MM: '%d Õ¡Õ´Õ«Õ½',
            y: 'Õ¿Õ¡Ö€Õ«',
            yy: '%d Õ¿Õ¡Ö€Õ«',
        },
        meridiemParse: /Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶/,
        isPM: function (input) {
            return /^(ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶)$/.test(input);
        },
        meridiem: function (hour) {
            if (hour < 4) {
                return 'Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡';
            } else if (hour < 12) {
                return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡';
            } else if (hour < 17) {
                return 'ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡';
            } else {
                return 'Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(Õ«Õ¶|Ö€Õ¤)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'DDD':
                case 'w':
                case 'W':
                case 'DDDo':
                    if (number === 1) {
                        return number + '-Õ«Õ¶';
                    }
                    return number + '-Ö€Õ¤';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return hyAm;

})));
//! moment.js locale configuration
//! locale : Indonesian [id]
//! author : Mohammad Satrio Utomo : https://github.com/tyok
//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var id = moment.defineLocale('id', {
        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /pagi|siang|sore|malam/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'pagi') {
                return hour;
            } else if (meridiem === 'siang') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'sore' || meridiem === 'malam') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'pagi';
            } else if (hours < 15) {
                return 'siang';
            } else if (hours < 19) {
                return 'sore';
            } else {
                return 'malam';
            }
        },
        calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Besok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kemarin pukul] LT',
            lastWeek: 'dddd [lalu pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dalam %s',
            past: '%s yang lalu',
            s: 'beberapa detik',
            ss: '%d detik',
            m: 'semenit',
            mm: '%d menit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun',
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return id;

})));
//! moment.js locale configuration
//! locale : Icelandic [is]
//! author : Hinrik Ã–rn SigurÃ°sson : https://github.com/hinrik

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function plural(n) {
        if (n % 100 === 11) {
            return true;
        } else if (n % 10 === 1) {
            return false;
        }
        return true;
    }
    function translate(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's':
                return withoutSuffix || isFuture
                    ? 'nokkrar sekÃºndur'
                    : 'nokkrum sekÃºndum';
            case 'ss':
                if (plural(number)) {
                    return (
                        result +
                        (withoutSuffix || isFuture ? 'sekÃºndur' : 'sekÃºndum')
                    );
                }
                return result + 'sekÃºnda';
            case 'm':
                return withoutSuffix ? 'mÃ­nÃºta' : 'mÃ­nÃºtu';
            case 'mm':
                if (plural(number)) {
                    return (
                        result + (withoutSuffix || isFuture ? 'mÃ­nÃºtur' : 'mÃ­nÃºtum')
                    );
                } else if (withoutSuffix) {
                    return result + 'mÃ­nÃºta';
                }
                return result + 'mÃ­nÃºtu';
            case 'hh':
                if (plural(number)) {
                    return (
                        result +
                        (withoutSuffix || isFuture
                            ? 'klukkustundir'
                            : 'klukkustundum')
                    );
                }
                return result + 'klukkustund';
            case 'd':
                if (withoutSuffix) {
                    return 'dagur';
                }
                return isFuture ? 'dag' : 'degi';
            case 'dd':
                if (plural(number)) {
                    if (withoutSuffix) {
                        return result + 'dagar';
                    }
                    return result + (isFuture ? 'daga' : 'dÃ¶gum');
                } else if (withoutSuffix) {
                    return result + 'dagur';
                }
                return result + (isFuture ? 'dag' : 'degi');
            case 'M':
                if (withoutSuffix) {
                    return 'mÃ¡nuÃ°ur';
                }
                return isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i';
            case 'MM':
                if (plural(number)) {
                    if (withoutSuffix) {
                        return result + 'mÃ¡nuÃ°ir';
                    }
                    return result + (isFuture ? 'mÃ¡nuÃ°i' : 'mÃ¡nuÃ°um');
                } else if (withoutSuffix) {
                    return result + 'mÃ¡nuÃ°ur';
                }
                return result + (isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i');
            case 'y':
                return withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri';
            case 'yy':
                if (plural(number)) {
                    return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡rum');
                }
                return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri');
        }
    }

    var is = moment.defineLocale('is', {
        months: 'janÃºar_febrÃºar_mars_aprÃ­l_maÃ­_jÃºnÃ­_jÃºlÃ­_Ã¡gÃºst_september_oktÃ³ber_nÃ³vember_desember'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_maÃ­_jÃºn_jÃºl_Ã¡gÃº_sep_okt_nÃ³v_des'.split('_'),
        weekdays: 'sunnudagur_mÃ¡nudagur_Ã¾riÃ°judagur_miÃ°vikudagur_fimmtudagur_fÃ¶studagur_laugardagur'.split(
            '_'
        ),
        weekdaysShort: 'sun_mÃ¡n_Ã¾ri_miÃ°_fim_fÃ¶s_lau'.split('_'),
        weekdaysMin: 'Su_MÃ¡_Ãžr_Mi_Fi_FÃ¶_La'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] H:mm',
            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
        },
        calendar: {
            sameDay: '[Ã­ dag kl.] LT',
            nextDay: '[Ã¡ morgun kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[Ã­ gÃ¦r kl.] LT',
            lastWeek: '[sÃ­Ã°asta] dddd [kl.] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'eftir %s',
            past: 'fyrir %s sÃ­Ã°an',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: 'klukkustund',
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return is;

})));
//! moment.js locale configuration
//! locale : Italian (Switzerland) [it-ch]
//! author : xfh : https://github.com/xfh

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var itCh = moment.defineLocale('it-ch', {
        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
            '_'
        ),
        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
        weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
            '_'
        ),
        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Oggi alle] LT',
            nextDay: '[Domani alle] LT',
            nextWeek: 'dddd [alle] LT',
            lastDay: '[Ieri alle] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[la scorsa] dddd [alle] LT';
                    default:
                        return '[lo scorso] dddd [alle] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: function (s) {
                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
            },
            past: '%s fa',
            s: 'alcuni secondi',
            ss: '%d secondi',
            m: 'un minuto',
            mm: '%d minuti',
            h: "un'ora",
            hh: '%d ore',
            d: 'un giorno',
            dd: '%d giorni',
            M: 'un mese',
            MM: '%d mesi',
            y: 'un anno',
            yy: '%d anni',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return itCh;

})));
//! moment.js locale configuration
//! locale : Italian [it]
//! author : Lorenzo : https://github.com/aliem
//! author: Mattia Larentis: https://github.com/nostalgiaz
//! author: Marco : https://github.com/Manfre98

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var it = moment.defineLocale('it', {
        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
            '_'
        ),
        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
        weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
            '_'
        ),
        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: function () {
                return (
                    '[Oggi a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            nextDay: function () {
                return (
                    '[Domani a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            nextWeek: function () {
                return (
                    'dddd [a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            lastDay: function () {
                return (
                    '[Ieri a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return (
                            '[La scorsa] dddd [a' +
                            (this.hours() > 1
                                ? 'lle '
                                : this.hours() === 0
                                ? ' '
                                : "ll'") +
                            ']LT'
                        );
                    default:
                        return (
                            '[Lo scorso] dddd [a' +
                            (this.hours() > 1
                                ? 'lle '
                                : this.hours() === 0
                                ? ' '
                                : "ll'") +
                            ']LT'
                        );
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'tra %s',
            past: '%s fa',
            s: 'alcuni secondi',
            ss: '%d secondi',
            m: 'un minuto',
            mm: '%d minuti',
            h: "un'ora",
            hh: '%d ore',
            d: 'un giorno',
            dd: '%d giorni',
            w: 'una settimana',
            ww: '%d settimane',
            M: 'un mese',
            MM: '%d mesi',
            y: 'un anno',
            yy: '%d anni',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return it;

})));
//! moment.js locale configuration
//! locale : Japanese [ja]
//! author : LI Long : https://github.com/baryon

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ja = moment.defineLocale('ja', {
        eras: [
            {
                since: '2019-05-01',
                offset: 1,
                name: 'ä»¤å’Œ',
                narrow: 'ã‹¿',
                abbr: 'R',
            },
            {
                since: '1989-01-08',
                until: '2019-04-30',
                offset: 1,
                name: 'å¹³æˆ',
                narrow: 'ã»',
                abbr: 'H',
            },
            {
                since: '1926-12-25',
                until: '1989-01-07',
                offset: 1,
                name: 'æ˜­å’Œ',
                narrow: 'ã¼',
                abbr: 'S',
            },
            {
                since: '1912-07-30',
                until: '1926-12-24',
                offset: 1,
                name: 'å¤§æ­£',
                narrow: 'ã½',
                abbr: 'T',
            },
            {
                since: '1873-01-01',
                until: '1912-07-29',
                offset: 6,
                name: 'æ˜Žæ²»',
                narrow: 'ã¾',
                abbr: 'M',
            },
            {
                since: '0001-01-01',
                until: '1873-12-31',
                offset: 1,
                name: 'è¥¿æš¦',
                narrow: 'AD',
                abbr: 'AD',
            },
            {
                since: '0000-12-31',
                until: -Infinity,
                offset: 1,
                name: 'ç´€å…ƒå‰',
                narrow: 'BC',
                abbr: 'BC',
            },
        ],
        eraYearOrdinalRegex: /(å…ƒ|\d+)å¹´/,
        eraYearOrdinalParse: function (input, match) {
            return match[1] === 'å…ƒ' ? 1 : parseInt(match[1] || input, 10);
        },
        months: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split('_'),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ—¥æ›œæ—¥_æœˆæ›œæ—¥_ç«æ›œæ—¥_æ°´æ›œæ—¥_æœ¨æ›œæ—¥_é‡‘æ›œæ—¥_åœŸæ›œæ—¥'.split('_'),
        weekdaysShort: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
        weekdaysMin: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥ dddd HH:mm',
            l: 'YYYY/MM/DD',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥(ddd) HH:mm',
        },
        meridiemParse: /åˆå‰|åˆå¾Œ/i,
        isPM: function (input) {
            return input === 'åˆå¾Œ';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'åˆå‰';
            } else {
                return 'åˆå¾Œ';
            }
        },
        calendar: {
            sameDay: '[ä»Šæ—¥] LT',
            nextDay: '[æ˜Žæ—¥] LT',
            nextWeek: function (now) {
                if (now.week() !== this.week()) {
                    return '[æ¥é€±]dddd LT';
                } else {
                    return 'dddd LT';
                }
            },
            lastDay: '[æ˜¨æ—¥] LT',
            lastWeek: function (now) {
                if (this.week() !== now.week()) {
                    return '[å…ˆé€±]dddd LT';
                } else {
                    return 'dddd LT';
                }
            },
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}æ—¥/,
        ordinal: function (number, period) {
            switch (period) {
                case 'y':
                    return number === 1 ? 'å…ƒå¹´' : number + 'å¹´';
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så¾Œ',
            past: '%så‰',
            s: 'æ•°ç§’',
            ss: '%dç§’',
            m: '1åˆ†',
            mm: '%dåˆ†',
            h: '1æ™‚é–“',
            hh: '%dæ™‚é–“',
            d: '1æ—¥',
            dd: '%dæ—¥',
            M: '1ãƒ¶æœˆ',
            MM: '%dãƒ¶æœˆ',
            y: '1å¹´',
            yy: '%då¹´',
        },
    });

    return ja;

})));
//! moment.js locale configuration
//! locale : Javanese [jv]
//! author : Rony Lantip : https://github.com/lantip
//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var jv = moment.defineLocale('jv', {
        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /enjing|siyang|sonten|ndalu/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'enjing') {
                return hour;
            } else if (meridiem === 'siyang') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'enjing';
            } else if (hours < 15) {
                return 'siyang';
            } else if (hours < 19) {
                return 'sonten';
            } else {
                return 'ndalu';
            }
        },
        calendar: {
            sameDay: '[Dinten puniko pukul] LT',
            nextDay: '[Mbenjang pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kala wingi pukul] LT',
            lastWeek: 'dddd [kepengker pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'wonten ing %s',
            past: '%s ingkang kepengker',
            s: 'sawetawis detik',
            ss: '%d detik',
            m: 'setunggal menit',
            mm: '%d menit',
            h: 'setunggal jam',
            hh: '%d jam',
            d: 'sedinten',
            dd: '%d dinten',
            M: 'sewulan',
            MM: '%d wulan',
            y: 'setaun',
            yy: '%d taun',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return jv;

})));
//! moment.js locale configuration
//! locale : Georgian [ka]
//! author : Irakli Janiashvili : https://github.com/IrakliJani

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ka = moment.defineLocale('ka', {
        months: 'áƒ˜áƒáƒœáƒ•áƒáƒ áƒ˜_áƒ—áƒ”áƒ‘áƒ”áƒ áƒ•áƒáƒšáƒ˜_áƒ›áƒáƒ áƒ¢áƒ˜_áƒáƒžáƒ áƒ˜áƒšáƒ˜_áƒ›áƒáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒœáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒšáƒ˜áƒ¡áƒ˜_áƒáƒ’áƒ•áƒ˜áƒ¡áƒ¢áƒ_áƒ¡áƒ”áƒ¥áƒ¢áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘áƒ”áƒ áƒ˜_áƒœáƒáƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒ“áƒ”áƒ™áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜'.split(
            '_'
        ),
        monthsShort: 'áƒ˜áƒáƒœ_áƒ—áƒ”áƒ‘_áƒ›áƒáƒ _áƒáƒžáƒ _áƒ›áƒáƒ˜_áƒ˜áƒ•áƒœ_áƒ˜áƒ•áƒš_áƒáƒ’áƒ•_áƒ¡áƒ”áƒ¥_áƒáƒ¥áƒ¢_áƒœáƒáƒ”_áƒ“áƒ”áƒ™'.split('_'),
        weekdays: {
            standalone: 'áƒ™áƒ•áƒ˜áƒ áƒ_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ˜_áƒ¨áƒáƒ‘áƒáƒ—áƒ˜'.split(
                '_'
            ),
            format: 'áƒ™áƒ•áƒ˜áƒ áƒáƒ¡_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ¡_áƒ¨áƒáƒ‘áƒáƒ—áƒ¡'.split(
                '_'
            ),
            isFormat: /(áƒ¬áƒ˜áƒœáƒ|áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’)/,
        },
        weekdaysShort: 'áƒ™áƒ•áƒ˜_áƒáƒ áƒ¨_áƒ¡áƒáƒ›_áƒáƒ—áƒ®_áƒ®áƒ£áƒ—_áƒžáƒáƒ _áƒ¨áƒáƒ‘'.split('_'),
        weekdaysMin: 'áƒ™áƒ•_áƒáƒ _áƒ¡áƒ_áƒáƒ—_áƒ®áƒ£_áƒžáƒ_áƒ¨áƒ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[áƒ“áƒ¦áƒ”áƒ¡] LT[-áƒ–áƒ”]',
            nextDay: '[áƒ®áƒ•áƒáƒš] LT[-áƒ–áƒ”]',
            lastDay: '[áƒ’áƒ£áƒ¨áƒ˜áƒœ] LT[-áƒ–áƒ”]',
            nextWeek: '[áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’] dddd LT[-áƒ–áƒ”]',
            lastWeek: '[áƒ¬áƒ˜áƒœáƒ] dddd LT-áƒ–áƒ”',
            sameElse: 'L',
        },
        relativeTime: {
            future: function (s) {
                return s.replace(/(áƒ¬áƒáƒ›|áƒ¬áƒ£áƒ—|áƒ¡áƒáƒáƒ—|áƒ¬áƒ”áƒš|áƒ“áƒ¦|áƒ—áƒ•)(áƒ˜|áƒ”)/, function (
                    $0,
                    $1,
                    $2
                ) {
                    return $2 === 'áƒ˜' ? $1 + 'áƒ¨áƒ˜' : $1 + $2 + 'áƒ¨áƒ˜';
                });
            },
            past: function (s) {
                if (/(áƒ¬áƒáƒ›áƒ˜|áƒ¬áƒ£áƒ—áƒ˜|áƒ¡áƒáƒáƒ—áƒ˜|áƒ“áƒ¦áƒ”|áƒ—áƒ•áƒ”)/.test(s)) {
                    return s.replace(/(áƒ˜|áƒ”)$/, 'áƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
                }
                if (/áƒ¬áƒ”áƒšáƒ˜/.test(s)) {
                    return s.replace(/áƒ¬áƒ”áƒšáƒ˜$/, 'áƒ¬áƒšáƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
                }
                return s;
            },
            s: 'áƒ áƒáƒ›áƒ“áƒ”áƒœáƒ˜áƒ›áƒ” áƒ¬áƒáƒ›áƒ˜',
            ss: '%d áƒ¬áƒáƒ›áƒ˜',
            m: 'áƒ¬áƒ£áƒ—áƒ˜',
            mm: '%d áƒ¬áƒ£áƒ—áƒ˜',
            h: 'áƒ¡áƒáƒáƒ—áƒ˜',
            hh: '%d áƒ¡áƒáƒáƒ—áƒ˜',
            d: 'áƒ“áƒ¦áƒ”',
            dd: '%d áƒ“áƒ¦áƒ”',
            M: 'áƒ—áƒ•áƒ”',
            MM: '%d áƒ—áƒ•áƒ”',
            y: 'áƒ¬áƒ”áƒšáƒ˜',
            yy: '%d áƒ¬áƒ”áƒšáƒ˜',
        },
        dayOfMonthOrdinalParse: /0|1-áƒšáƒ˜|áƒ›áƒ”-\d{1,2}|\d{1,2}-áƒ”/,
        ordinal: function (number) {
            if (number === 0) {
                return number;
            }
            if (number === 1) {
                return number + '-áƒšáƒ˜';
            }
            if (
                number < 20 ||
                (number <= 100 && number % 20 === 0) ||
                number % 100 === 0
            ) {
                return 'áƒ›áƒ”-' + number;
            }
            return number + '-áƒ”';
        },
        week: {
            dow: 1,
            doy: 7,
        },
    });

    return ka;

})));
//! moment.js locale configuration
//! locale : Kazakh [kk]
//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var suffixes = {
        0: '-ÑˆÑ–',
        1: '-ÑˆÑ–',
        2: '-ÑˆÑ–',
        3: '-ÑˆÑ–',
        4: '-ÑˆÑ–',
        5: '-ÑˆÑ–',
        6: '-ÑˆÑ‹',
        7: '-ÑˆÑ–',
        8: '-ÑˆÑ–',
        9: '-ÑˆÑ‹',
        10: '-ÑˆÑ‹',
        20: '-ÑˆÑ‹',
        30: '-ÑˆÑ‹',
        40: '-ÑˆÑ‹',
        50: '-ÑˆÑ–',
        60: '-ÑˆÑ‹',
        70: '-ÑˆÑ–',
        80: '-ÑˆÑ–',
        90: '-ÑˆÑ‹',
        100: '-ÑˆÑ–',
    };

    var kk = moment.defineLocale('kk', {
        months: 'Ò›Ð°Ò£Ñ‚Ð°Ñ€_Ð°Ò›Ð¿Ð°Ð½_Ð½Ð°ÑƒÑ€Ñ‹Ð·_ÑÓ™ÑƒÑ–Ñ€_Ð¼Ð°Ð¼Ñ‹Ñ€_Ð¼Ð°ÑƒÑÑ‹Ð¼_ÑˆÑ–Ð»Ð´Ðµ_Ñ‚Ð°Ð¼Ñ‹Ð·_Ò›Ñ‹Ñ€ÐºÒ¯Ð¹ÐµÐº_Ò›Ð°Ð·Ð°Ð½_Ò›Ð°Ñ€Ð°ÑˆÐ°_Ð¶ÐµÐ»Ñ‚Ð¾Ò›ÑÐ°Ð½'.split(
            '_'
        ),
        monthsShort: 'Ò›Ð°Ò£_Ð°Ò›Ð¿_Ð½Ð°Ñƒ_ÑÓ™Ñƒ_Ð¼Ð°Ð¼_Ð¼Ð°Ñƒ_ÑˆÑ–Ð»_Ñ‚Ð°Ð¼_Ò›Ñ‹Ñ€_Ò›Ð°Ð·_Ò›Ð°Ñ€_Ð¶ÐµÐ»'.split('_'),
        weekdays: 'Ð¶ÐµÐºÑÐµÐ½Ð±Ñ–_Ð´Ò¯Ð¹ÑÐµÐ½Ð±Ñ–_ÑÐµÐ¹ÑÐµÐ½Ð±Ñ–_ÑÓ™Ñ€ÑÐµÐ½Ð±Ñ–_Ð±ÐµÐ¹ÑÐµÐ½Ð±Ñ–_Ð¶Ò±Ð¼Ð°_ÑÐµÐ½Ð±Ñ–'.split(
            '_'
        ),
        weekdaysShort: 'Ð¶ÐµÐº_Ð´Ò¯Ð¹_ÑÐµÐ¹_ÑÓ™Ñ€_Ð±ÐµÐ¹_Ð¶Ò±Ð¼_ÑÐµÐ½'.split('_'),
        weekdaysMin: 'Ð¶Ðº_Ð´Ð¹_ÑÐ¹_ÑÑ€_Ð±Ð¹_Ð¶Ð¼_ÑÐ½'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ð‘Ò¯Ð³Ñ–Ð½ ÑÐ°Ò“Ð°Ñ‚] LT',
            nextDay: '[Ð•Ñ€Ñ‚ÐµÒ£ ÑÐ°Ò“Ð°Ñ‚] LT',
            nextWeek: 'dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
            lastDay: '[ÐšÐµÑˆÐµ ÑÐ°Ò“Ð°Ñ‚] LT',
            lastWeek: '[Ó¨Ñ‚ÐºÐµÐ½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ò£] dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ñ–ÑˆÑ–Ð½Ð´Ðµ',
            past: '%s Ð±Ò±Ñ€Ñ‹Ð½',
            s: 'Ð±Ñ–Ñ€Ð½ÐµÑˆÐµ ÑÐµÐºÑƒÐ½Ð´',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´',
            m: 'Ð±Ñ–Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
            h: 'Ð±Ñ–Ñ€ ÑÐ°Ò“Ð°Ñ‚',
            hh: '%d ÑÐ°Ò“Ð°Ñ‚',
            d: 'Ð±Ñ–Ñ€ ÐºÒ¯Ð½',
            dd: '%d ÐºÒ¯Ð½',
            M: 'Ð±Ñ–Ñ€ Ð°Ð¹',
            MM: '%d Ð°Ð¹',
            y: 'Ð±Ñ–Ñ€ Ð¶Ñ‹Ð»',
            yy: '%d Ð¶Ñ‹Ð»',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÑˆÑ–|ÑˆÑ‹)/,
        ordinal: function (number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return kk;

})));
//! moment.js locale configuration
//! locale : Cambodian [km]
//! author : Kruy Vanna : https://github.com/kruyvanna

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'áŸ¡',
            2: 'áŸ¢',
            3: 'áŸ£',
            4: 'áŸ¤',
            5: 'áŸ¥',
            6: 'áŸ¦',
            7: 'áŸ§',
            8: 'áŸ¨',
            9: 'áŸ©',
            0: 'áŸ ',
        },
        numberMap = {
            'áŸ¡': '1',
            'áŸ¢': '2',
            'áŸ£': '3',
            'áŸ¤': '4',
            'áŸ¥': '5',
            'áŸ¦': '6',
            'áŸ§': '7',
            'áŸ¨': '8',
            'áŸ©': '9',
            'áŸ ': '0',
        };

    var km = moment.defineLocale('km', {
        months: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
            '_'
        ),
        monthsShort: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
            '_'
        ),
        weekdays: 'áž¢áž¶áž‘áž·ážáŸ’áž™_áž…áŸáž“áŸ’áž‘_áž¢áž„áŸ’áž‚áž¶ážš_áž–áž»áž’_áž–áŸ’ážšáž ážŸáŸ’áž”ážáž·áŸ_ážŸáž»áž€áŸ’ážš_ážŸáŸ…ážšáŸ'.split('_'),
        weekdaysShort: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
        weekdaysMin: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        meridiemParse: /áž–áŸ’ážšáž¹áž€|áž›áŸ’áž„áž¶áž…/,
        isPM: function (input) {
            return input === 'áž›áŸ’áž„áž¶áž…';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'áž–áŸ’ážšáž¹áž€';
            } else {
                return 'áž›áŸ’áž„áž¶áž…';
            }
        },
        calendar: {
            sameDay: '[ážáŸ’áž„áŸƒáž“áŸáŸ‡ áž˜áŸ‰áŸ„áž„] LT',
            nextDay: '[ážŸáŸ’áž¢áŸ‚áž€ áž˜áŸ‰áŸ„áž„] LT',
            nextWeek: 'dddd [áž˜áŸ‰áŸ„áž„] LT',
            lastDay: '[áž˜áŸ’ážŸáž·áž›áž˜áž·áž‰ áž˜áŸ‰áŸ„áž„] LT',
            lastWeek: 'dddd [ážŸáž”áŸ’ážáž¶áž áŸáž˜áž»áž“] [áž˜áŸ‰áŸ„áž„] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sáž‘áŸ€áž',
            past: '%sáž˜áž»áž“',
            s: 'áž”áŸ‰áž»áž“áŸ’áž˜áž¶áž“ážœáž·áž“áž¶áž‘áž¸',
            ss: '%d ážœáž·áž“áž¶áž‘áž¸',
            m: 'áž˜áž½áž™áž“áž¶áž‘áž¸',
            mm: '%d áž“áž¶áž‘áž¸',
            h: 'áž˜áž½áž™áž˜áŸ‰áŸ„áž„',
            hh: '%d áž˜áŸ‰áŸ„áž„',
            d: 'áž˜áž½áž™ážáŸ’áž„áŸƒ',
            dd: '%d ážáŸ’áž„áŸƒ',
            M: 'áž˜áž½áž™ážáŸ‚',
            MM: '%d ážáŸ‚',
            y: 'áž˜áž½áž™áž†áŸ’áž“áž¶áŸ†',
            yy: '%d áž†áŸ’áž“áž¶áŸ†',
        },
        dayOfMonthOrdinalParse: /áž‘áž¸\d{1,2}/,
        ordinal: 'áž‘áž¸%d',
        preparse: function (string) {
            return string.replace(/[áŸ¡áŸ¢áŸ£áŸ¤áŸ¥áŸ¦áŸ§áŸ¨áŸ©áŸ ]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return km;

})));
//! moment.js locale configuration
//! locale : Kannada [kn]
//! author : Rajeev Naik : https://github.com/rajeevnaikte

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à³§',
            2: 'à³¨',
            3: 'à³©',
            4: 'à³ª',
            5: 'à³«',
            6: 'à³¬',
            7: 'à³­',
            8: 'à³®',
            9: 'à³¯',
            0: 'à³¦',
        },
        numberMap = {
            'à³§': '1',
            'à³¨': '2',
            'à³©': '3',
            'à³ª': '4',
            'à³«': '5',
            'à³¬': '6',
            'à³­': '7',
            'à³®': '8',
            'à³¯': '9',
            'à³¦': '0',
        };

    var kn = moment.defineLocale('kn', {
        months: 'à²œà²¨à²µà²°à²¿_à²«à³†à²¬à³à²°à²µà²°à²¿_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚à²¬à²°à³_à²…à²•à³à²Ÿà³†à³‚à³•à²¬à²°à³_à²¨à²µà³†à²‚à²¬à²°à³_à²¡à²¿à²¸à³†à²‚à²¬à²°à³'.split(
            '_'
        ),
        monthsShort: 'à²œà²¨_à²«à³†à²¬à³à²°_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚_à²…à²•à³à²Ÿà³†à³‚à³•_à²¨à²µà³†à²‚_à²¡à²¿à²¸à³†à²‚'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à²­à²¾à²¨à³à²µà²¾à²°_à²¸à³†à³‚à³•à²®à²µà²¾à²°_à²®à²‚à²—à²³à²µà²¾à²°_à²¬à³à²§à²µà²¾à²°_à²—à³à²°à³à²µà²¾à²°_à²¶à³à²•à³à²°à²µà²¾à²°_à²¶à²¨à²¿à²µà²¾à²°'.split(
            '_'
        ),
        weekdaysShort: 'à²­à²¾à²¨à³_à²¸à³†à³‚à³•à²®_à²®à²‚à²—à²³_à²¬à³à²§_à²—à³à²°à³_à²¶à³à²•à³à²°_à²¶à²¨à²¿'.split('_'),
        weekdaysMin: 'à²­à²¾_à²¸à³†à³‚à³•_à²®à²‚_à²¬à³_à²—à³_à²¶à³_à²¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm',
        },
        calendar: {
            sameDay: '[à²‡à²‚à²¦à³] LT',
            nextDay: '[à²¨à²¾à²³à³†] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à²¨à²¿à²¨à³à²¨à³†] LT',
            lastWeek: '[à²•à³†à³‚à²¨à³†à²¯] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à²¨à²‚à²¤à²°',
            past: '%s à²¹à²¿à²‚à²¦à³†',
            s: 'à²•à³†à²²à²µà³ à²•à³à²·à²£à²—à²³à³',
            ss: '%d à²¸à³†à²•à³†à²‚à²¡à³à²—à²³à³',
            m: 'à²’à²‚à²¦à³ à²¨à²¿à²®à²¿à²·',
            mm: '%d à²¨à²¿à²®à²¿à²·',
            h: 'à²’à²‚à²¦à³ à²—à²‚à²Ÿà³†',
            hh: '%d à²—à²‚à²Ÿà³†',
            d: 'à²’à²‚à²¦à³ à²¦à²¿à²¨',
            dd: '%d à²¦à²¿à²¨',
            M: 'à²’à²‚à²¦à³ à²¤à²¿à²‚à²—à²³à³',
            MM: '%d à²¤à²¿à²‚à²—à²³à³',
            y: 'à²’à²‚à²¦à³ à²µà²°à³à²·',
            yy: '%d à²µà²°à³à²·',
        },
        preparse: function (string) {
            return string.replace(/[à³§à³¨à³©à³ªà³«à³¬à³­à³®à³¯à³¦]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        meridiemParse: /à²°à²¾à²¤à³à²°à²¿|à²¬à³†à²³à²¿à²—à³à²—à³†|à²®à²§à³à²¯à²¾à²¹à³à²¨|à²¸à²‚à²œà³†/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à²°à²¾à²¤à³à²°à²¿') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à²¬à³†à²³à²¿à²—à³à²—à³†') {
                return hour;
            } else if (meridiem === 'à²®à²§à³à²¯à²¾à²¹à³à²¨') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à²¸à²‚à²œà³†') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à²°à²¾à²¤à³à²°à²¿';
            } else if (hour < 10) {
                return 'à²¬à³†à²³à²¿à²—à³à²—à³†';
            } else if (hour < 17) {
                return 'à²®à²§à³à²¯à²¾à²¹à³à²¨';
            } else if (hour < 20) {
                return 'à²¸à²‚à²œà³†';
            } else {
                return 'à²°à²¾à²¤à³à²°à²¿';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}(à²¨à³†à³•)/,
        ordinal: function (number) {
            return number + 'à²¨à³†à³•';
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return kn;

})));
//! moment.js locale configuration
//! locale : Korean [ko]
//! author : Kyungwook, Park : https://github.com/kyungw00k
//! author : Jeeeyul Lee <jeeeyul@gmail.com>

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ko = moment.defineLocale('ko', {
        months: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split('_'),
        monthsShort: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split(
            '_'
        ),
        weekdays: 'ì¼ìš”ì¼_ì›”ìš”ì¼_í™”ìš”ì¼_ìˆ˜ìš”ì¼_ëª©ìš”ì¼_ê¸ˆìš”ì¼_í† ìš”ì¼'.split('_'),
        weekdaysShort: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
        weekdaysMin: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'YYYY.MM.DD.',
            LL: 'YYYYë…„ MMMM Dì¼',
            LLL: 'YYYYë…„ MMMM Dì¼ A h:mm',
            LLLL: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
            l: 'YYYY.MM.DD.',
            ll: 'YYYYë…„ MMMM Dì¼',
            lll: 'YYYYë…„ MMMM Dì¼ A h:mm',
            llll: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
        },
        calendar: {
            sameDay: 'ì˜¤ëŠ˜ LT',
            nextDay: 'ë‚´ì¼ LT',
            nextWeek: 'dddd LT',
            lastDay: 'ì–´ì œ LT',
            lastWeek: 'ì§€ë‚œì£¼ dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s í›„',
            past: '%s ì „',
            s: 'ëª‡ ì´ˆ',
            ss: '%dì´ˆ',
            m: '1ë¶„',
            mm: '%dë¶„',
            h: 'í•œ ì‹œê°„',
            hh: '%dì‹œê°„',
            d: 'í•˜ë£¨',
            dd: '%dì¼',
            M: 'í•œ ë‹¬',
            MM: '%dë‹¬',
            y: 'ì¼ ë…„',
            yy: '%dë…„',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ì¼|ì›”|ì£¼)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'ì¼';
                case 'M':
                    return number + 'ì›”';
                case 'w':
                case 'W':
                    return number + 'ì£¼';
                default:
                    return number;
            }
        },
        meridiemParse: /ì˜¤ì „|ì˜¤í›„/,
        isPM: function (token) {
            return token === 'ì˜¤í›„';
        },
        meridiem: function (hour, minute, isUpper) {
            return hour < 12 ? 'ì˜¤ì „' : 'ì˜¤í›„';
        },
    });

    return ko;

})));
//! moment.js locale configuration
//! locale : Kurdish [ku]
//! author : Shahram Mebashar : https://github.com/ShahramMebashar

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'Ù¡',
            2: 'Ù¢',
            3: 'Ù£',
            4: 'Ù¤',
            5: 'Ù¥',
            6: 'Ù¦',
            7: 'Ù§',
            8: 'Ù¨',
            9: 'Ù©',
            0: 'Ù ',
        },
        numberMap = {
            'Ù¡': '1',
            'Ù¢': '2',
            'Ù£': '3',
            'Ù¤': '4',
            'Ù¥': '5',
            'Ù¦': '6',
            'Ù§': '7',
            'Ù¨': '8',
            'Ù©': '9',
            'Ù ': '0',
        },
        months = [
            'Ú©Ø§Ù†ÙˆÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
            'Ø´ÙˆØ¨Ø§Øª',
            'Ø¦Ø§Ø²Ø§Ø±',
            'Ù†ÛŒØ³Ø§Ù†',
            'Ø¦Ø§ÛŒØ§Ø±',
            'Ø­ÙˆØ²Û•ÛŒØ±Ø§Ù†',
            'ØªÛ•Ù…Ù…ÙˆØ²',
            'Ø¦Ø§Ø¨',
            'Ø¦Û•ÛŒÙ„ÙˆÙˆÙ„',
            'ØªØ´Ø±ÛŒÙ†ÛŒ ÛŒÛ•ÙƒÛ•Ù…',
            'ØªØ´Ø±ÛŒÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
            'ÙƒØ§Ù†ÙˆÙ†ÛŒ ÛŒÛ•Ú©Û•Ù…',
        ];

    var ku = moment.defineLocale('ku', {
        months: months,
        monthsShort: months,
        weekdays: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø³ÛŽØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
            '_'
        ),
        weekdaysShort: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…_Ø³ÛŽØ´Ù‡â€ŒÙ…_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
            '_'
        ),
        weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ù‡_Ø´'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        meridiemParse: /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ|Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ/,
        isPM: function (input) {
            return /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ';
            } else {
                return 'Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ';
            }
        },
        calendar: {
            sameDay: '[Ø¦Ù‡â€ŒÙ…Ø±Û† ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            nextDay: '[Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            nextWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            lastDay: '[Ø¯ÙˆÛŽÙ†ÛŽ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            lastWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ù„Ù‡â€Œ %s',
            past: '%s',
            s: 'Ú†Ù‡â€ŒÙ†Ø¯ Ú†Ø±ÙƒÙ‡â€ŒÛŒÙ‡â€ŒÙƒ',
            ss: 'Ú†Ø±ÙƒÙ‡â€Œ %d',
            m: 'ÛŒÙ‡â€ŒÙƒ Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
            mm: '%d Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
            h: 'ÛŒÙ‡â€ŒÙƒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
            hh: '%d ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
            d: 'ÛŒÙ‡â€ŒÙƒ Ú•Û†Ú˜',
            dd: '%d Ú•Û†Ú˜',
            M: 'ÛŒÙ‡â€ŒÙƒ Ù…Ø§Ù†Ú¯',
            MM: '%d Ù…Ø§Ù†Ú¯',
            y: 'ÛŒÙ‡â€ŒÙƒ Ø³Ø§Úµ',
            yy: '%d Ø³Ø§Úµ',
        },
        preparse: function (string) {
            return string
                .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                    return numberMap[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    return ku;

})));
//! moment.js locale configuration
//! locale : Kyrgyz [ky]
//! author : Chyngyz Arystan uulu : https://github.com/chyngyz

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var suffixes = {
        0: '-Ñ‡Ò¯',
        1: '-Ñ‡Ð¸',
        2: '-Ñ‡Ð¸',
        3: '-Ñ‡Ò¯',
        4: '-Ñ‡Ò¯',
        5: '-Ñ‡Ð¸',
        6: '-Ñ‡Ñ‹',
        7: '-Ñ‡Ð¸',
        8: '-Ñ‡Ð¸',
        9: '-Ñ‡Ñƒ',
        10: '-Ñ‡Ñƒ',
        20: '-Ñ‡Ñ‹',
        30: '-Ñ‡Ñƒ',
        40: '-Ñ‡Ñ‹',
        50: '-Ñ‡Ò¯',
        60: '-Ñ‡Ñ‹',
        70: '-Ñ‡Ð¸',
        80: '-Ñ‡Ð¸',
        90: '-Ñ‡Ñƒ',
        100: '-Ñ‡Ò¯',
    };

    var ky = moment.defineLocale('ky', {
        months: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
            '_'
        ),
        monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split(
            '_'
        ),
        weekdays: 'Ð–ÐµÐºÑˆÐµÐ¼Ð±Ð¸_Ð”Ò¯Ð¹ÑˆÓ©Ð¼Ð±Ò¯_Ð¨ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð¨Ð°Ñ€ÑˆÐµÐ¼Ð±Ð¸_Ð‘ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð–ÑƒÐ¼Ð°_Ð˜ÑˆÐµÐ¼Ð±Ð¸'.split(
            '_'
        ),
        weekdaysShort: 'Ð–ÐµÐº_Ð”Ò¯Ð¹_Ð¨ÐµÐ¹_Ð¨Ð°Ñ€_Ð‘ÐµÐ¹_Ð–ÑƒÐ¼_Ð˜ÑˆÐµ'.split('_'),
        weekdaysMin: 'Ð–Ðº_Ð”Ð¹_Ð¨Ð¹_Ð¨Ñ€_Ð‘Ð¹_Ð–Ð¼_Ð˜Ñˆ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ð‘Ò¯Ð³Ò¯Ð½ ÑÐ°Ð°Ñ‚] LT',
            nextDay: '[Ð­Ñ€Ñ‚ÐµÒ£ ÑÐ°Ð°Ñ‚] LT',
            nextWeek: 'dddd [ÑÐ°Ð°Ñ‚] LT',
            lastDay: '[ÐšÐµÑ‡ÑÑ ÑÐ°Ð°Ñ‚] LT',
            lastWeek: '[Ó¨Ñ‚ÐºÓ©Ð½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ð½] dddd [ÐºÒ¯Ð½Ò¯] [ÑÐ°Ð°Ñ‚] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ð¸Ñ‡Ð¸Ð½Ð´Ðµ',
            past: '%s Ð¼ÑƒÑ€ÑƒÐ½',
            s: 'Ð±Ð¸Ñ€Ð½ÐµÑ‡Ðµ ÑÐµÐºÑƒÐ½Ð´',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´',
            m: 'Ð±Ð¸Ñ€ Ð¼Ò¯Ð½Ó©Ñ‚',
            mm: '%d Ð¼Ò¯Ð½Ó©Ñ‚',
            h: 'Ð±Ð¸Ñ€ ÑÐ°Ð°Ñ‚',
            hh: '%d ÑÐ°Ð°Ñ‚',
            d: 'Ð±Ð¸Ñ€ ÐºÒ¯Ð½',
            dd: '%d ÐºÒ¯Ð½',
            M: 'Ð±Ð¸Ñ€ Ð°Ð¹',
            MM: '%d Ð°Ð¹',
            y: 'Ð±Ð¸Ñ€ Ð¶Ñ‹Ð»',
            yy: '%d Ð¶Ñ‹Ð»',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ñ‡Ð¸|Ñ‡Ñ‹|Ñ‡Ò¯|Ñ‡Ñƒ)/,
        ordinal: function (number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return ky;

})));
//! moment.js locale configuration
//! locale : Luxembourgish [lb]
//! author : mweimerskirch : https://github.com/mweimerskirch
//! author : David Raison : https://github.com/kwisatz

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eng Minutt', 'enger Minutt'],
            h: ['eng Stonn', 'enger Stonn'],
            d: ['een Dag', 'engem Dag'],
            M: ['ee Mount', 'engem Mount'],
            y: ['ee Joer', 'engem Joer'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }
    function processFutureTime(string) {
        var number = string.substr(0, string.indexOf(' '));
        if (eifelerRegelAppliesToNumber(number)) {
            return 'a ' + string;
        }
        return 'an ' + string;
    }
    function processPastTime(string) {
        var number = string.substr(0, string.indexOf(' '));
        if (eifelerRegelAppliesToNumber(number)) {
            return 'viru ' + string;
        }
        return 'virun ' + string;
    }
    /**
     * Returns true if the word before the given number loses the '-n' ending.
     * e.g. 'an 10 Deeg' but 'a 5 Deeg'
     *
     * @param number {integer}
     * @returns {boolean}
     */
    function eifelerRegelAppliesToNumber(number) {
        number = parseInt(number, 10);
        if (isNaN(number)) {
            return false;
        }
        if (number < 0) {
            // Negative Number --> always true
            return true;
        } else if (number < 10) {
            // Only 1 digit
            if (4 <= number && number <= 7) {
                return true;
            }
            return false;
        } else if (number < 100) {
            // 2 digits
            var lastDigit = number % 10,
                firstDigit = number / 10;
            if (lastDigit === 0) {
                return eifelerRegelAppliesToNumber(firstDigit);
            }
            return eifelerRegelAppliesToNumber(lastDigit);
        } else if (number < 10000) {
            // 3 or 4 digits --> recursively check first digit
            while (number >= 10) {
                number = number / 10;
            }
            return eifelerRegelAppliesToNumber(number);
        } else {
            // Anything larger than 4 digits: recursively check first n-3 digits
            number = number / 1000;
            return eifelerRegelAppliesToNumber(number);
        }
    }

    var lb = moment.defineLocale('lb', {
        months: 'Januar_Februar_MÃ¤erz_AbrÃ«ll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonndeg_MÃ©indeg_DÃ«nschdeg_MÃ«ttwoch_Donneschdeg_Freideg_Samschdeg'.split(
            '_'
        ),
        weekdaysShort: 'So._MÃ©._DÃ«._MÃ«._Do._Fr._Sa.'.split('_'),
        weekdaysMin: 'So_MÃ©_DÃ«_MÃ«_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm [Auer]',
            LTS: 'H:mm:ss [Auer]',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm [Auer]',
            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
        },
        calendar: {
            sameDay: '[Haut um] LT',
            sameElse: 'L',
            nextDay: '[Muer um] LT',
            nextWeek: 'dddd [um] LT',
            lastDay: '[GÃ«schter um] LT',
            lastWeek: function () {
                // Different date string for 'DÃ«nschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
                switch (this.day()) {
                    case 2:
                    case 4:
                        return '[Leschten] dddd [um] LT';
                    default:
                        return '[Leschte] dddd [um] LT';
                }
            },
        },
        relativeTime: {
            future: processFutureTime,
            past: processPastTime,
            s: 'e puer Sekonnen',
            ss: '%d Sekonnen',
            m: processRelativeTime,
            mm: '%d Minutten',
            h: processRelativeTime,
            hh: '%d Stonnen',
            d: processRelativeTime,
            dd: '%d Deeg',
            M: processRelativeTime,
            MM: '%d MÃ©int',
            y: processRelativeTime,
            yy: '%d Joer',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return lb;

})));
//! moment.js locale configuration
//! locale : Lao [lo]
//! author : Ryan Hart : https://github.com/ryanhart2

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var lo = moment.defineLocale('lo', {
        months: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
            '_'
        ),
        monthsShort: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
            '_'
        ),
        weekdays: 'àº­àº²àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
        weekdaysShort: 'àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
        weekdaysMin: 'àº—_àºˆ_àº­àº„_àºž_àºžàº«_àºªàº_àºª'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'àº§àº±àº™dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /àº•àº­àº™à»€àºŠàº»à»‰àº²|àº•àº­àº™à»àº¥àº‡/,
        isPM: function (input) {
            return input === 'àº•àº­àº™à»àº¥àº‡';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'àº•àº­àº™à»€àºŠàº»à»‰àº²';
            } else {
                return 'àº•àº­àº™à»àº¥àº‡';
            }
        },
        calendar: {
            sameDay: '[àº¡àº·à»‰àº™àºµà»‰à»€àº§àº¥àº²] LT',
            nextDay: '[àº¡àº·à»‰àº­àº·à»ˆàº™à»€àº§àº¥àº²] LT',
            nextWeek: '[àº§àº±àº™]dddd[à»œà»‰àº²à»€àº§àº¥àº²] LT',
            lastDay: '[àº¡àº·à»‰àº§àº²àº™àº™àºµà»‰à»€àº§àº¥àº²] LT',
            lastWeek: '[àº§àº±àº™]dddd[à»àº¥à»‰àº§àº™àºµà»‰à»€àº§àº¥àº²] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'àº­àºµàº %s',
            past: '%sàºœà»ˆàº²àº™àº¡àº²',
            s: 'àºšà»à»ˆà»€àº—àº»à»ˆàº²à»ƒàº”àº§àº´àº™àº²àº—àºµ',
            ss: '%d àº§àº´àº™àº²àº—àºµ',
            m: '1 àº™àº²àº—àºµ',
            mm: '%d àº™àº²àº—àºµ',
            h: '1 àºŠàº»à»ˆàº§à»‚àº¡àº‡',
            hh: '%d àºŠàº»à»ˆàº§à»‚àº¡àº‡',
            d: '1 àº¡àº·à»‰',
            dd: '%d àº¡àº·à»‰',
            M: '1 à»€àº”àº·àº­àº™',
            MM: '%d à»€àº”àº·àº­àº™',
            y: '1 àº›àºµ',
            yy: '%d àº›àºµ',
        },
        dayOfMonthOrdinalParse: /(àº—àºµà»ˆ)\d{1,2}/,
        ordinal: function (number) {
            return 'àº—àºµà»ˆ' + number;
        },
    });

    return lo;

})));
//! moment.js locale configuration
//! locale : Lithuanian [lt]
//! author : Mindaugas MozÅ«ras : https://github.com/mmozuras

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var units = {
        ss: 'sekundÄ—_sekundÅ¾iÅ³_sekundes',
        m: 'minutÄ—_minutÄ—s_minutÄ™',
        mm: 'minutÄ—s_minuÄiÅ³_minutes',
        h: 'valanda_valandos_valandÄ…',
        hh: 'valandos_valandÅ³_valandas',
        d: 'diena_dienos_dienÄ…',
        dd: 'dienos_dienÅ³_dienas',
        M: 'mÄ—nuo_mÄ—nesio_mÄ—nesÄ¯',
        MM: 'mÄ—nesiai_mÄ—nesiÅ³_mÄ—nesius',
        y: 'metai_metÅ³_metus',
        yy: 'metai_metÅ³_metus',
    };
    function translateSeconds(number, withoutSuffix, key, isFuture) {
        if (withoutSuffix) {
            return 'kelios sekundÄ—s';
        } else {
            return isFuture ? 'keliÅ³ sekundÅ¾iÅ³' : 'kelias sekundes';
        }
    }
    function translateSingular(number, withoutSuffix, key, isFuture) {
        return withoutSuffix
            ? forms(key)[0]
            : isFuture
            ? forms(key)[1]
            : forms(key)[2];
    }
    function special(number) {
        return number % 10 === 0 || (number > 10 && number < 20);
    }
    function forms(key) {
        return units[key].split('_');
    }
    function translate(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        if (number === 1) {
            return (
                result + translateSingular(number, withoutSuffix, key[0], isFuture)
            );
        } else if (withoutSuffix) {
            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
        } else {
            if (isFuture) {
                return result + forms(key)[1];
            } else {
                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
            }
        }
    }
    var lt = moment.defineLocale('lt', {
        months: {
            format: 'sausio_vasario_kovo_balandÅ¾io_geguÅ¾Ä—s_birÅ¾elio_liepos_rugpjÅ«Äio_rugsÄ—jo_spalio_lapkriÄio_gruodÅ¾io'.split(
                '_'
            ),
            standalone: 'sausis_vasaris_kovas_balandis_geguÅ¾Ä—_birÅ¾elis_liepa_rugpjÅ«tis_rugsÄ—jis_spalis_lapkritis_gruodis'.split(
                '_'
            ),
            isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
        },
        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
        weekdays: {
            format: 'sekmadienÄ¯_pirmadienÄ¯_antradienÄ¯_treÄiadienÄ¯_ketvirtadienÄ¯_penktadienÄ¯_Å¡eÅ¡tadienÄ¯'.split(
                '_'
            ),
            standalone: 'sekmadienis_pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis'.split(
                '_'
            ),
            isFormat: /dddd HH:mm/,
        },
        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡'.split('_'),
        weekdaysMin: 'S_P_A_T_K_Pn_Å '.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY [m.] MMMM D [d.]',
            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
            l: 'YYYY-MM-DD',
            ll: 'YYYY [m.] MMMM D [d.]',
            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
        },
        calendar: {
            sameDay: '[Å iandien] LT',
            nextDay: '[Rytoj] LT',
            nextWeek: 'dddd LT',
            lastDay: '[Vakar] LT',
            lastWeek: '[PraÄ—jusÄ¯] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'po %s',
            past: 'prieÅ¡ %s',
            s: translateSeconds,
            ss: translate,
            m: translateSingular,
            mm: translate,
            h: translateSingular,
            hh: translate,
            d: translateSingular,
            dd: translate,
            M: translateSingular,
            MM: translate,
            y: translateSingular,
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}-oji/,
        ordinal: function (number) {
            return number + '-oji';
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return lt;

})));
//! moment.js locale configuration
//! locale : Latvian [lv]
//! author : Kristaps Karlsons : https://github.com/skakri
//! author : JÄnis Elmeris : https://github.com/JanisE

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var units = {
        ss: 'sekundes_sekundÄ“m_sekunde_sekundes'.split('_'),
        m: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
        mm: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
        h: 'stundas_stundÄm_stunda_stundas'.split('_'),
        hh: 'stundas_stundÄm_stunda_stundas'.split('_'),
        d: 'dienas_dienÄm_diena_dienas'.split('_'),
        dd: 'dienas_dienÄm_diena_dienas'.split('_'),
        M: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
        MM: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
        y: 'gada_gadiem_gads_gadi'.split('_'),
        yy: 'gada_gadiem_gads_gadi'.split('_'),
    };
    /**
     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
     */
    function format(forms, number, withoutSuffix) {
        if (withoutSuffix) {
            // E.g. "21 minÅ«te", "3 minÅ«tes".
            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
        } else {
            // E.g. "21 minÅ«tes" as in "pÄ“c 21 minÅ«tes".
            // E.g. "3 minÅ«tÄ“m" as in "pÄ“c 3 minÅ«tÄ“m".
            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
        }
    }
    function relativeTimeWithPlural(number, withoutSuffix, key) {
        return number + ' ' + format(units[key], number, withoutSuffix);
    }
    function relativeTimeWithSingular(number, withoutSuffix, key) {
        return format(units[key], number, withoutSuffix);
    }
    function relativeSeconds(number, withoutSuffix) {
        return withoutSuffix ? 'daÅ¾as sekundes' : 'daÅ¾Äm sekundÄ“m';
    }

    var lv = moment.defineLocale('lv', {
        months: 'janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec'.split('_'),
        weekdays: 'svÄ“tdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena'.split(
            '_'
        ),
        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY.',
            LL: 'YYYY. [gada] D. MMMM',
            LLL: 'YYYY. [gada] D. MMMM, HH:mm',
            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
        },
        calendar: {
            sameDay: '[Å odien pulksten] LT',
            nextDay: '[RÄ«t pulksten] LT',
            nextWeek: 'dddd [pulksten] LT',
            lastDay: '[Vakar pulksten] LT',
            lastWeek: '[PagÄjuÅ¡Ä] dddd [pulksten] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'pÄ“c %s',
            past: 'pirms %s',
            s: relativeSeconds,
            ss: relativeTimeWithPlural,
            m: relativeTimeWithSingular,
            mm: relativeTimeWithPlural,
            h: relativeTimeWithSingular,
            hh: relativeTimeWithPlural,
            d: relativeTimeWithSingular,
            dd: relativeTimeWithPlural,
            M: relativeTimeWithSingular,
            MM: relativeTimeWithPlural,
            y: relativeTimeWithSingular,
            yy: relativeTimeWithPlural,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return lv;

})));
//! moment.js locale configuration
//! locale : Montenegrin [me]
//! author : Miodrag NikaÄ <miodrag@restartit.me> : https://github.com/miodragnikac

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var translator = {
        words: {
            //Different grammatical cases
            ss: ['sekund', 'sekunda', 'sekundi'],
            m: ['jedan minut', 'jednog minuta'],
            mm: ['minut', 'minuta', 'minuta'],
            h: ['jedan sat', 'jednog sata'],
            hh: ['sat', 'sata', 'sati'],
            dd: ['dan', 'dana', 'dana'],
            MM: ['mjesec', 'mjeseca', 'mjeseci'],
            yy: ['godina', 'godine', 'godina'],
        },
        correctGrammaticalCase: function (number, wordKey) {
            return number === 1
                ? wordKey[0]
                : number >= 2 && number <= 4
                ? wordKey[1]
                : wordKey[2];
        },
        translate: function (number, withoutSuffix, key) {
            var wordKey = translator.words[key];
            if (key.length === 1) {
                return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
                return (
                    number +
                    ' ' +
                    translator.correctGrammaticalCase(number, wordKey)
                );
            }
        },
    };

    var me = moment.defineLocale('me', {
        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sjutra u] LT',

            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedjelju] [u] LT';
                    case 3:
                        return '[u] [srijedu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄe u] LT',
            lastWeek: function () {
                var lastWeekDays = [
                    '[proÅ¡le] [nedjelje] [u] LT',
                    '[proÅ¡log] [ponedjeljka] [u] LT',
                    '[proÅ¡log] [utorka] [u] LT',
                    '[proÅ¡le] [srijede] [u] LT',
                    '[proÅ¡log] [Äetvrtka] [u] LT',
                    '[proÅ¡log] [petka] [u] LT',
                    '[proÅ¡le] [subote] [u] LT',
                ];
                return lastWeekDays[this.day()];
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'nekoliko sekundi',
            ss: translator.translate,
            m: translator.translate,
            mm: translator.translate,
            h: translator.translate,
            hh: translator.translate,
            d: 'dan',
            dd: translator.translate,
            M: 'mjesec',
            MM: translator.translate,
            y: 'godinu',
            yy: translator.translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return me;

})));
//! moment.js locale configuration
//! locale : Maori [mi]
//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var mi = moment.defineLocale('mi', {
        months: 'Kohi-tÄte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whÄwhÄ_Haratua_Pipiri_HÅngoingoi_Here-turi-kÅkÄ_Mahuru_Whiringa-Ä-nuku_Whiringa-Ä-rangi_Hakihea'.split(
            '_'
        ),
        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_HÅngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
            '_'
        ),
        monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
        monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
        monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
        monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
        weekdays: 'RÄtapu_Mane_TÅ«rei_Wenerei_TÄite_Paraire_HÄtarei'.split('_'),
        weekdaysShort: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
        weekdaysMin: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [i] HH:mm',
            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
        },
        calendar: {
            sameDay: '[i teie mahana, i] LT',
            nextDay: '[apopo i] LT',
            nextWeek: 'dddd [i] LT',
            lastDay: '[inanahi i] LT',
            lastWeek: 'dddd [whakamutunga i] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'i roto i %s',
            past: '%s i mua',
            s: 'te hÄ“kona ruarua',
            ss: '%d hÄ“kona',
            m: 'he meneti',
            mm: '%d meneti',
            h: 'te haora',
            hh: '%d haora',
            d: 'he ra',
            dd: '%d ra',
            M: 'he marama',
            MM: '%d marama',
            y: 'he tau',
            yy: '%d tau',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return mi;

})));
//! moment.js locale configuration
//! locale : Macedonian [mk]
//! author : Borislav Mickov : https://github.com/B0k0
//! author : Sashko Todorov : https://github.com/bkyceh

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var mk = moment.defineLocale('mk', {
        months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½Ð¸_Ñ˜ÑƒÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
            '_'
        ),
        monthsShort: 'Ñ˜Ð°Ð½_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
        weekdays: 'Ð½ÐµÐ´ÐµÐ»Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð¾Ðº_Ð¿ÐµÑ‚Ð¾Ðº_ÑÐ°Ð±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ðµ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÐ°Ð±'.split('_'),
        weekdaysMin: 'Ð½e_Ð¿o_Ð²Ñ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_Ña'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[Ð”ÐµÐ½ÐµÑ Ð²Ð¾] LT',
            nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²Ð¾] LT',
            nextWeek: '[Ð’Ð¾] dddd [Ð²Ð¾] LT',
            lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²Ð¾] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 6:
                        return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð°Ñ‚Ð°] dddd [Ð²Ð¾] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð¸Ð¾Ñ‚] dddd [Ð²Ð¾] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð·Ð° %s',
            past: 'Ð¿Ñ€ÐµÐ´ %s',
            s: 'Ð½ÐµÐºÐ¾Ð»ÐºÑƒ ÑÐµÐºÑƒÐ½Ð´Ð¸',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
            m: 'ÐµÐ´Ð½Ð° Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
            h: 'ÐµÐ´ÐµÐ½ Ñ‡Ð°Ñ',
            hh: '%d Ñ‡Ð°ÑÐ°',
            d: 'ÐµÐ´ÐµÐ½ Ð´ÐµÐ½',
            dd: '%d Ð´ÐµÐ½Ð°',
            M: 'ÐµÐ´ÐµÐ½ Ð¼ÐµÑÐµÑ†',
            MM: '%d Ð¼ÐµÑÐµÑ†Ð¸',
            y: 'ÐµÐ´Ð½Ð° Ð³Ð¾Ð´Ð¸Ð½Ð°',
            yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
        ordinal: function (number) {
            var lastDigit = number % 10,
                last2Digits = number % 100;
            if (number === 0) {
                return number + '-ÐµÐ²';
            } else if (last2Digits === 0) {
                return number + '-ÐµÐ½';
            } else if (last2Digits > 10 && last2Digits < 20) {
                return number + '-Ñ‚Ð¸';
            } else if (lastDigit === 1) {
                return number + '-Ð²Ð¸';
            } else if (lastDigit === 2) {
                return number + '-Ñ€Ð¸';
            } else if (lastDigit === 7 || lastDigit === 8) {
                return number + '-Ð¼Ð¸';
            } else {
                return number + '-Ñ‚Ð¸';
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return mk;

})));
//! moment.js locale configuration
//! locale : Malayalam [ml]
//! author : Floyd Pink : https://github.com/floydpink

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ml = moment.defineLocale('ml', {
        months: 'à´œà´¨àµà´µà´°à´¿_à´«àµ†à´¬àµà´°àµà´µà´°à´¿_à´®à´¾àµ¼à´šàµà´šàµ_à´à´ªàµà´°à´¿àµ½_à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ_à´“à´—à´¸àµà´±àµà´±àµ_à´¸àµ†à´ªàµà´±àµà´±à´‚à´¬àµ¼_à´’à´•àµà´Ÿàµ‹à´¬àµ¼_à´¨à´µà´‚à´¬àµ¼_à´¡à´¿à´¸à´‚à´¬àµ¼'.split(
            '_'
        ),
        monthsShort: 'à´œà´¨àµ._à´«àµ†à´¬àµà´°àµ._à´®à´¾àµ¼._à´à´ªàµà´°à´¿._à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ._à´“à´—._à´¸àµ†à´ªàµà´±àµà´±._à´’à´•àµà´Ÿàµ‹._à´¨à´µà´‚._à´¡à´¿à´¸à´‚.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à´žà´¾à´¯à´±à´¾à´´àµà´š_à´¤à´¿à´™àµà´•à´³à´¾à´´àµà´š_à´šàµŠà´µàµà´µà´¾à´´àµà´š_à´¬àµà´§à´¨à´¾à´´àµà´š_à´µàµà´¯à´¾à´´à´¾à´´àµà´š_à´µàµ†à´³àµà´³à´¿à´¯à´¾à´´àµà´š_à´¶à´¨à´¿à´¯à´¾à´´àµà´š'.split(
            '_'
        ),
        weekdaysShort: 'à´žà´¾à´¯àµ¼_à´¤à´¿à´™àµà´•àµ¾_à´šàµŠà´µàµà´µ_à´¬àµà´§àµ»_à´µàµà´¯à´¾à´´à´‚_à´µàµ†à´³àµà´³à´¿_à´¶à´¨à´¿'.split('_'),
        weekdaysMin: 'à´žà´¾_à´¤à´¿_à´šàµŠ_à´¬àµ_à´µàµà´¯à´¾_à´µàµ†_à´¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm -à´¨àµ',
            LTS: 'A h:mm:ss -à´¨àµ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm -à´¨àµ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm -à´¨àµ',
        },
        calendar: {
            sameDay: '[à´‡à´¨àµà´¨àµ] LT',
            nextDay: '[à´¨à´¾à´³àµ†] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à´‡à´¨àµà´¨à´²àµ†] LT',
            lastWeek: '[à´•à´´à´¿à´žàµà´ž] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à´•à´´à´¿à´žàµà´žàµ',
            past: '%s à´®àµàµ»à´ªàµ',
            s: 'à´…àµ½à´ª à´¨à´¿à´®à´¿à´·à´™àµà´™àµ¾',
            ss: '%d à´¸àµ†à´•àµà´•àµ»à´¡àµ',
            m: 'à´’à´°àµ à´®à´¿à´¨à´¿à´±àµà´±àµ',
            mm: '%d à´®à´¿à´¨à´¿à´±àµà´±àµ',
            h: 'à´’à´°àµ à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
            hh: '%d à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
            d: 'à´’à´°àµ à´¦à´¿à´µà´¸à´‚',
            dd: '%d à´¦à´¿à´µà´¸à´‚',
            M: 'à´’à´°àµ à´®à´¾à´¸à´‚',
            MM: '%d à´®à´¾à´¸à´‚',
            y: 'à´’à´°àµ à´µàµ¼à´·à´‚',
            yy: '%d à´µàµ¼à´·à´‚',
        },
        meridiemParse: /à´°à´¾à´¤àµà´°à´¿|à´°à´¾à´µà´¿à´²àµ†|à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ|à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚|à´°à´¾à´¤àµà´°à´¿/i,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                (meridiem === 'à´°à´¾à´¤àµà´°à´¿' && hour >= 4) ||
                meridiem === 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ' ||
                meridiem === 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚'
            ) {
                return hour + 12;
            } else {
                return hour;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à´°à´¾à´¤àµà´°à´¿';
            } else if (hour < 12) {
                return 'à´°à´¾à´µà´¿à´²àµ†';
            } else if (hour < 17) {
                return 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ';
            } else if (hour < 20) {
                return 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚';
            } else {
                return 'à´°à´¾à´¤àµà´°à´¿';
            }
        },
    });

    return ml;

})));
//! moment.js locale configuration
//! locale : Mongolian [mn]
//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function translate(number, withoutSuffix, key, isFuture) {
        switch (key) {
            case 's':
                return withoutSuffix ? 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´' : 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½';
            case 'ss':
                return number + (withoutSuffix ? ' ÑÐµÐºÑƒÐ½Ð´' : ' ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½');
            case 'm':
            case 'mm':
                return number + (withoutSuffix ? ' Ð¼Ð¸Ð½ÑƒÑ‚' : ' Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹Ð½');
            case 'h':
            case 'hh':
                return number + (withoutSuffix ? ' Ñ†Ð°Ð³' : ' Ñ†Ð°Ð³Ð¸Ð¹Ð½');
            case 'd':
            case 'dd':
                return number + (withoutSuffix ? ' Ó©Ð´Ó©Ñ€' : ' Ó©Ð´Ñ€Ð¸Ð¹Ð½');
            case 'M':
            case 'MM':
                return number + (withoutSuffix ? ' ÑÐ°Ñ€' : ' ÑÐ°Ñ€Ñ‹Ð½');
            case 'y':
            case 'yy':
                return number + (withoutSuffix ? ' Ð¶Ð¸Ð»' : ' Ð¶Ð¸Ð»Ð¸Ð¹Ð½');
            default:
                return number;
        }
    }

    var mn = moment.defineLocale('mn', {
        months: 'ÐÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¥Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð“ÑƒÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ó©Ñ€Ó©Ð²Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¢Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð—ÑƒÑ€Ð³Ð°Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ð¾Ð»Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÐ°Ð¹Ð¼Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð•ÑÐ´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ð½ÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ñ…Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€'.split(
            '_'
        ),
        monthsShort: '1 ÑÐ°Ñ€_2 ÑÐ°Ñ€_3 ÑÐ°Ñ€_4 ÑÐ°Ñ€_5 ÑÐ°Ñ€_6 ÑÐ°Ñ€_7 ÑÐ°Ñ€_8 ÑÐ°Ñ€_9 ÑÐ°Ñ€_10 ÑÐ°Ñ€_11 ÑÐ°Ñ€_12 ÑÐ°Ñ€'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'ÐÑÐ¼_Ð”Ð°Ð²Ð°Ð°_ÐœÑÐ³Ð¼Ð°Ñ€_Ð›Ñ…Ð°Ð³Ð²Ð°_ÐŸÒ¯Ñ€ÑÐ²_Ð‘Ð°Ð°ÑÐ°Ð½_Ð‘ÑÐ¼Ð±Ð°'.split('_'),
        weekdaysShort: 'ÐÑÐ¼_Ð”Ð°Ð²_ÐœÑÐ³_Ð›Ñ…Ð°_ÐŸÒ¯Ñ€_Ð‘Ð°Ð°_Ð‘ÑÐ¼'.split('_'),
        weekdaysMin: 'ÐÑ_Ð”Ð°_ÐœÑ_Ð›Ñ…_ÐŸÒ¯_Ð‘Ð°_Ð‘Ñ'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D',
            LLL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
            LLLL: 'dddd, YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
        },
        meridiemParse: /Ò®Ó¨|Ò®Ð¥/i,
        isPM: function (input) {
            return input === 'Ò®Ð¥';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Ò®Ó¨';
            } else {
                return 'Ò®Ð¥';
            }
        },
        calendar: {
            sameDay: '[Ó¨Ð½Ó©Ó©Ð´Ó©Ñ€] LT',
            nextDay: '[ÐœÐ°Ñ€Ð³Ð°Ð°Ñˆ] LT',
            nextWeek: '[Ð˜Ñ€ÑÑ…] dddd LT',
            lastDay: '[Ó¨Ñ‡Ð¸Ð³Ð´Ó©Ñ€] LT',
            lastWeek: '[Ó¨Ð½Ð³Ó©Ñ€ÑÓ©Ð½] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ð´Ð°Ñ€Ð°Ð°',
            past: '%s Ó©Ð¼Ð½Ó©',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2} Ó©Ð´Ó©Ñ€/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + ' Ó©Ð´Ó©Ñ€';
                default:
                    return number;
            }
        },
    });

    return mn;

})));
//! moment.js locale configuration
//! locale : Marathi [mr]
//! author : Harshad Kale : https://github.com/kalehv
//! author : Vivek Athalye : https://github.com/vnathalye

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à¥§',
            2: 'à¥¨',
            3: 'à¥©',
            4: 'à¥ª',
            5: 'à¥«',
            6: 'à¥¬',
            7: 'à¥­',
            8: 'à¥®',
            9: 'à¥¯',
            0: 'à¥¦',
        },
        numberMap = {
            'à¥§': '1',
            'à¥¨': '2',
            'à¥©': '3',
            'à¥ª': '4',
            'à¥«': '5',
            'à¥¬': '6',
            'à¥­': '7',
            'à¥®': '8',
            'à¥¯': '9',
            'à¥¦': '0',
        };

    function relativeTimeMr(number, withoutSuffix, string, isFuture) {
        var output = '';
        if (withoutSuffix) {
            switch (string) {
                case 's':
                    output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦';
                    break;
                case 'ss':
                    output = '%d à¤¸à¥‡à¤•à¤‚à¤¦';
                    break;
                case 'm':
                    output = 'à¤à¤• à¤®à¤¿à¤¨à¤¿à¤Ÿ';
                    break;
                case 'mm':
                    output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¥‡';
                    break;
                case 'h':
                    output = 'à¤à¤• à¤¤à¤¾à¤¸';
                    break;
                case 'hh':
                    output = '%d à¤¤à¤¾à¤¸';
                    break;
                case 'd':
                    output = 'à¤à¤• à¤¦à¤¿à¤µà¤¸';
                    break;
                case 'dd':
                    output = '%d à¤¦à¤¿à¤µà¤¸';
                    break;
                case 'M':
                    output = 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾';
                    break;
                case 'MM':
                    output = '%d à¤®à¤¹à¤¿à¤¨à¥‡';
                    break;
                case 'y':
                    output = 'à¤à¤• à¤µà¤°à¥à¤·';
                    break;
                case 'yy':
                    output = '%d à¤µà¤°à¥à¤·à¥‡';
                    break;
            }
        } else {
            switch (string) {
                case 's':
                    output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                    break;
                case 'ss':
                    output = '%d à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                    break;
                case 'm':
                    output = 'à¤à¤•à¤¾ à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾';
                    break;
                case 'mm':
                    output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾à¤‚';
                    break;
                case 'h':
                    output = 'à¤à¤•à¤¾ à¤¤à¤¾à¤¸à¤¾';
                    break;
                case 'hh':
                    output = '%d à¤¤à¤¾à¤¸à¤¾à¤‚';
                    break;
                case 'd':
                    output = 'à¤à¤•à¤¾ à¤¦à¤¿à¤µà¤¸à¤¾';
                    break;
                case 'dd':
                    output = '%d à¤¦à¤¿à¤µà¤¸à¤¾à¤‚';
                    break;
                case 'M':
                    output = 'à¤à¤•à¤¾ à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾';
                    break;
                case 'MM':
                    output = '%d à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾à¤‚';
                    break;
                case 'y':
                    output = 'à¤à¤•à¤¾ à¤µà¤°à¥à¤·à¤¾';
                    break;
                case 'yy':
                    output = '%d à¤µà¤°à¥à¤·à¤¾à¤‚';
                    break;
            }
        }
        return output.replace(/%d/i, number);
    }

    var mr = moment.defineLocale('mr', {
        months: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¤¿à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¥ˆ_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
            '_'
        ),
        monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š._à¤à¤ªà¥à¤°à¤¿._à¤®à¥‡._à¤œà¥‚à¤¨._à¤œà¥à¤²à¥ˆ._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤³à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
        weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤³_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
        weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
            LTS: 'A h:mm:ss à¤µà¤¾à¤œà¤¤à¤¾',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
        },
        calendar: {
            sameDay: '[à¤†à¤œ] LT',
            nextDay: '[à¤‰à¤¦à¥à¤¯à¤¾] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¤•à¤¾à¤²] LT',
            lastWeek: '[à¤®à¤¾à¤—à¥€à¤²] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sà¤®à¤§à¥à¤¯à¥‡',
            past: '%sà¤ªà¥‚à¤°à¥à¤µà¥€',
            s: relativeTimeMr,
            ss: relativeTimeMr,
            m: relativeTimeMr,
            mm: relativeTimeMr,
            h: relativeTimeMr,
            hh: relativeTimeMr,
            d: relativeTimeMr,
            dd: relativeTimeMr,
            M: relativeTimeMr,
            MM: relativeTimeMr,
            y: relativeTimeMr,
            yy: relativeTimeMr,
        },
        preparse: function (string) {
            return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        meridiemParse: /à¤ªà¤¹à¤¾à¤Ÿà¥‡|à¤¸à¤•à¤¾à¤³à¥€|à¤¦à¥à¤ªà¤¾à¤°à¥€|à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€|à¤°à¤¾à¤¤à¥à¤°à¥€/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤ªà¤¹à¤¾à¤Ÿà¥‡' || meridiem === 'à¤¸à¤•à¤¾à¤³à¥€') {
                return hour;
            } else if (
                meridiem === 'à¤¦à¥à¤ªà¤¾à¤°à¥€' ||
                meridiem === 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€' ||
                meridiem === 'à¤°à¤¾à¤¤à¥à¤°à¥€'
            ) {
                return hour >= 12 ? hour : hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour >= 0 && hour < 6) {
                return 'à¤ªà¤¹à¤¾à¤Ÿà¥‡';
            } else if (hour < 12) {
                return 'à¤¸à¤•à¤¾à¤³à¥€';
            } else if (hour < 17) {
                return 'à¤¦à¥à¤ªà¤¾à¤°à¥€';
            } else if (hour < 20) {
                return 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€';
            } else {
                return 'à¤°à¤¾à¤¤à¥à¤°à¥€';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return mr;

})));
//! moment.js locale configuration
//! locale : Malay [ms-my]
//! note : DEPRECATED, the correct one is [ms]
//! author : Weldan Jamili : https://github.com/weldan

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var msMy = moment.defineLocale('ms-my', {
        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /pagi|tengahari|petang|malam/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'pagi') {
                return hour;
            } else if (meridiem === 'tengahari') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'petang' || meridiem === 'malam') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'pagi';
            } else if (hours < 15) {
                return 'tengahari';
            } else if (hours < 19) {
                return 'petang';
            } else {
                return 'malam';
            }
        },
        calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Esok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kelmarin pukul] LT',
            lastWeek: 'dddd [lepas pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dalam %s',
            past: '%s yang lepas',
            s: 'beberapa saat',
            ss: '%d saat',
            m: 'seminit',
            mm: '%d minit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return msMy;

})));
//! moment.js locale configuration
//! locale : Malay [ms]
//! author : Weldan Jamili : https://github.com/weldan

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ms = moment.defineLocale('ms', {
        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /pagi|tengahari|petang|malam/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'pagi') {
                return hour;
            } else if (meridiem === 'tengahari') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'petang' || meridiem === 'malam') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'pagi';
            } else if (hours < 15) {
                return 'tengahari';
            } else if (hours < 19) {
                return 'petang';
            } else {
                return 'malam';
            }
        },
        calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Esok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kelmarin pukul] LT',
            lastWeek: 'dddd [lepas pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dalam %s',
            past: '%s yang lepas',
            s: 'beberapa saat',
            ss: '%d saat',
            m: 'seminit',
            mm: '%d minit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return ms;

})));
//! moment.js locale configuration
//! locale : Maltese (Malta) [mt]
//! author : Alessandro Maruccia : https://github.com/alesma

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var mt = moment.defineLocale('mt', {
        months: 'Jannar_Frar_Marzu_April_Mejju_Ä unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_DiÄ‹embru'.split(
            '_'
        ),
        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ä un_Lul_Aww_Set_Ott_Nov_DiÄ‹'.split('_'),
        weekdays: 'Il-Ä¦add_It-Tnejn_It-Tlieta_L-ErbgÄ§a_Il-Ä¦amis_Il-Ä imgÄ§a_Is-Sibt'.split(
            '_'
        ),
        weekdaysShort: 'Ä¦ad_Tne_Tli_Erb_Ä¦am_Ä im_Sib'.split('_'),
        weekdaysMin: 'Ä¦a_Tn_Tl_Er_Ä¦a_Ä i_Si'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Illum fil-]LT',
            nextDay: '[GÄ§ada fil-]LT',
            nextWeek: 'dddd [fil-]LT',
            lastDay: '[Il-bieraÄ§ fil-]LT',
            lastWeek: 'dddd [li gÄ§adda] [fil-]LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'fâ€™ %s',
            past: '%s ilu',
            s: 'ftit sekondi',
            ss: '%d sekondi',
            m: 'minuta',
            mm: '%d minuti',
            h: 'siegÄ§a',
            hh: '%d siegÄ§at',
            d: 'Ä¡urnata',
            dd: '%d Ä¡ranet',
            M: 'xahar',
            MM: '%d xhur',
            y: 'sena',
            yy: '%d sni',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return mt;

})));
//! moment.js locale configuration
//! locale : Burmese [my]
//! author : Squar team, mysquar.com
//! author : David Rossellat : https://github.com/gholadr
//! author : Tin Aung Lin : https://github.com/thanyawzinmin

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'á',
            2: 'á‚',
            3: 'áƒ',
            4: 'á„',
            5: 'á…',
            6: 'á†',
            7: 'á‡',
            8: 'áˆ',
            9: 'á‰',
            0: 'á€',
        },
        numberMap = {
            'á': '1',
            'á‚': '2',
            'áƒ': '3',
            'á„': '4',
            'á…': '5',
            'á†': '6',
            'á‡': '7',
            'áˆ': '8',
            'á‰': '9',
            'á€': '0',
        };

    var my = moment.defineLocale('my', {
        months: 'á€‡á€”á€ºá€”á€á€«á€›á€®_á€–á€±á€–á€±á€¬á€ºá€á€«á€›á€®_á€™á€á€º_á€§á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€‡á€°á€œá€­á€¯á€„á€º_á€žá€¼á€‚á€¯á€á€º_á€…á€€á€ºá€á€„á€ºá€˜á€¬_á€¡á€±á€¬á€€á€ºá€á€­á€¯á€˜á€¬_á€”á€­á€¯á€á€„á€ºá€˜á€¬_á€’á€®á€‡á€„á€ºá€˜á€¬'.split(
            '_'
        ),
        monthsShort: 'á€‡á€”á€º_á€–á€±_á€™á€á€º_á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€œá€­á€¯á€„á€º_á€žá€¼_á€…á€€á€º_á€¡á€±á€¬á€€á€º_á€”á€­á€¯_á€’á€®'.split('_'),
        weekdays: 'á€á€”á€„á€ºá€¹á€‚á€”á€½á€±_á€á€”á€„á€ºá€¹á€œá€¬_á€¡á€„á€ºá€¹á€‚á€«_á€—á€¯á€’á€¹á€“á€Ÿá€°á€¸_á€€á€¼á€¬á€žá€•á€á€±á€¸_á€žá€±á€¬á€€á€¼á€¬_á€…á€”á€±'.split(
            '_'
        ),
        weekdaysShort: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),
        weekdaysMin: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),

        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[á€šá€”á€±.] LT [á€™á€¾á€¬]',
            nextDay: '[á€™á€”á€€á€ºá€–á€¼á€”á€º] LT [á€™á€¾á€¬]',
            nextWeek: 'dddd LT [á€™á€¾á€¬]',
            lastDay: '[á€™á€”á€±.á€€] LT [á€™á€¾á€¬]',
            lastWeek: '[á€•á€¼á€®á€¸á€á€²á€·á€žá€±á€¬] dddd LT [á€™á€¾á€¬]',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'á€œá€¬á€™á€Šá€ºá€· %s á€™á€¾á€¬',
            past: 'á€œá€½á€”á€ºá€á€²á€·á€žá€±á€¬ %s á€€',
            s: 'á€…á€€á€¹á€€á€”á€º.á€¡á€”á€Šá€ºá€¸á€„á€šá€º',
            ss: '%d á€…á€€á€¹á€€á€”á€·á€º',
            m: 'á€á€…á€ºá€™á€­á€”á€…á€º',
            mm: '%d á€™á€­á€”á€…á€º',
            h: 'á€á€…á€ºá€”á€¬á€›á€®',
            hh: '%d á€”á€¬á€›á€®',
            d: 'á€á€…á€ºá€›á€€á€º',
            dd: '%d á€›á€€á€º',
            M: 'á€á€…á€ºá€œ',
            MM: '%d á€œ',
            y: 'á€á€…á€ºá€”á€¾á€…á€º',
            yy: '%d á€”á€¾á€…á€º',
        },
        preparse: function (string) {
            return string.replace(/[áá‚áƒá„á…á†á‡áˆá‰á€]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return my;

})));
//! moment.js locale configuration
//! locale : Norwegian BokmÃ¥l [nb]
//! authors : Espen Hovlandsdal : https://github.com/rexxars
//!           Sigurd Gartmann : https://github.com/sigurdga
//!           Stephen Ramthun : https://github.com/stephenramthun

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var nb = moment.defineLocale('nb', {
        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
        weekdaysShort: 'sÃ¸._ma._ti._on._to._fr._lÃ¸.'.split('_'),
        weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] HH:mm',
            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
        },
        calendar: {
            sameDay: '[i dag kl.] LT',
            nextDay: '[i morgen kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[i gÃ¥r kl.] LT',
            lastWeek: '[forrige] dddd [kl.] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: '%s siden',
            s: 'noen sekunder',
            ss: '%d sekunder',
            m: 'ett minutt',
            mm: '%d minutter',
            h: 'en time',
            hh: '%d timer',
            d: 'en dag',
            dd: '%d dager',
            w: 'en uke',
            ww: '%d uker',
            M: 'en mÃ¥ned',
            MM: '%d mÃ¥neder',
            y: 'ett Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return nb;

})));
//! moment.js locale configuration
//! locale : Nepalese [ne]
//! author : suvash : https://github.com/suvash

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à¥§',
            2: 'à¥¨',
            3: 'à¥©',
            4: 'à¥ª',
            5: 'à¥«',
            6: 'à¥¬',
            7: 'à¥­',
            8: 'à¥®',
            9: 'à¥¯',
            0: 'à¥¦',
        },
        numberMap = {
            'à¥§': '1',
            'à¥¨': '2',
            'à¥©': '3',
            'à¥ª': '4',
            'à¥«': '5',
            'à¥¬': '6',
            'à¥­': '7',
            'à¥®': '8',
            'à¥¯': '9',
            'à¥¦': '0',
        };

    var ne = moment.defineLocale('ne', {
        months: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿à¤²_à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤·à¥à¤Ÿ_à¤¸à¥‡à¤ªà¥à¤Ÿà¥‡à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤­à¥‡à¤®à¥à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤®à¥à¤¬à¤°'.split(
            '_'
        ),
        monthsShort: 'à¤œà¤¨._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿._à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ._à¤…à¤—._à¤¸à¥‡à¤ªà¥à¤Ÿ._à¤…à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤­à¥‡._à¤¡à¤¿à¤¸à¥‡.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¤†à¤‡à¤¤à¤¬à¤¾à¤°_à¤¸à¥‹à¤®à¤¬à¤¾à¤°_à¤®à¤™à¥à¤—à¤²à¤¬à¤¾à¤°_à¤¬à¥à¤§à¤¬à¤¾à¤°_à¤¬à¤¿à¤¹à¤¿à¤¬à¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤¬à¤¾à¤°_à¤¶à¤¨à¤¿à¤¬à¤¾à¤°'.split(
            '_'
        ),
        weekdaysShort: 'à¤†à¤‡à¤¤._à¤¸à¥‹à¤®._à¤®à¤™à¥à¤—à¤²._à¤¬à¥à¤§._à¤¬à¤¿à¤¹à¤¿._à¤¶à¥à¤•à¥à¤°._à¤¶à¤¨à¤¿.'.split('_'),
        weekdaysMin: 'à¤†._à¤¸à¥‹._à¤®à¤‚._à¤¬à¥._à¤¬à¤¿._à¤¶à¥._à¤¶.'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
            LTS: 'Aà¤•à¥‹ h:mm:ss à¤¬à¤œà¥‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
            LLLL: 'dddd, D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
        },
        preparse: function (string) {
            return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        meridiemParse: /à¤°à¤¾à¤¤à¤¿|à¤¬à¤¿à¤¹à¤¾à¤¨|à¤¦à¤¿à¤‰à¤à¤¸à¥‹|à¤¸à¤¾à¤à¤/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤°à¤¾à¤¤à¤¿') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¤¬à¤¿à¤¹à¤¾à¤¨') {
                return hour;
            } else if (meridiem === 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¤¾à¤à¤') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 3) {
                return 'à¤°à¤¾à¤¤à¤¿';
            } else if (hour < 12) {
                return 'à¤¬à¤¿à¤¹à¤¾à¤¨';
            } else if (hour < 16) {
                return 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹';
            } else if (hour < 20) {
                return 'à¤¸à¤¾à¤à¤';
            } else {
                return 'à¤°à¤¾à¤¤à¤¿';
            }
        },
        calendar: {
            sameDay: '[à¤†à¤œ] LT',
            nextDay: '[à¤­à¥‹à¤²à¤¿] LT',
            nextWeek: '[à¤†à¤‰à¤à¤¦à¥‹] dddd[,] LT',
            lastDay: '[à¤¹à¤¿à¤œà¥‹] LT',
            lastWeek: '[à¤—à¤à¤•à¥‹] dddd[,] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sà¤®à¤¾',
            past: '%s à¤…à¤—à¤¾à¤¡à¤¿',
            s: 'à¤•à¥‡à¤¹à¥€ à¤•à¥à¤·à¤£',
            ss: '%d à¤¸à¥‡à¤•à¥‡à¤£à¥à¤¡',
            m: 'à¤à¤• à¤®à¤¿à¤¨à¥‡à¤Ÿ',
            mm: '%d à¤®à¤¿à¤¨à¥‡à¤Ÿ',
            h: 'à¤à¤• à¤˜à¤£à¥à¤Ÿà¤¾',
            hh: '%d à¤˜à¤£à¥à¤Ÿà¤¾',
            d: 'à¤à¤• à¤¦à¤¿à¤¨',
            dd: '%d à¤¦à¤¿à¤¨',
            M: 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾',
            MM: '%d à¤®à¤¹à¤¿à¤¨à¤¾',
            y: 'à¤à¤• à¤¬à¤°à¥à¤·',
            yy: '%d à¤¬à¤°à¥à¤·',
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return ne;

})));
//! moment.js locale configuration
//! locale : Dutch (Belgium) [nl-be]
//! author : Joris RÃ¶ling : https://github.com/jorisroling
//! author : Jacob Middag : https://github.com/middagj

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
            '_'
        ),
        monthsParse = [
            /^jan/i,
            /^feb/i,
            /^maart|mrt.?$/i,
            /^apr/i,
            /^mei$/i,
            /^jun[i.]?$/i,
            /^jul[i.]?$/i,
            /^aug/i,
            /^sep/i,
            /^okt/i,
            /^nov/i,
            /^dec/i,
        ],
        monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

    var nlBe = moment.defineLocale('nl-be', {
        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortWithDots;
            } else if (/-MMM-/.test(format)) {
                return monthsShortWithoutDots[m.month()];
            } else {
                return monthsShortWithDots[m.month()];
            }
        },

        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,

        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
            '_'
        ),
        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[vandaag om] LT',
            nextDay: '[morgen om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[gisteren om] LT',
            lastWeek: '[afgelopen] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'over %s',
            past: '%s geleden',
            s: 'een paar seconden',
            ss: '%d seconden',
            m: 'Ã©Ã©n minuut',
            mm: '%d minuten',
            h: 'Ã©Ã©n uur',
            hh: '%d uur',
            d: 'Ã©Ã©n dag',
            dd: '%d dagen',
            M: 'Ã©Ã©n maand',
            MM: '%d maanden',
            y: 'Ã©Ã©n jaar',
            yy: '%d jaar',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            );
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return nlBe;

})));
//! moment.js locale configuration
//! locale : Dutch [nl]
//! author : Joris RÃ¶ling : https://github.com/jorisroling
//! author : Jacob Middag : https://github.com/middagj

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
            '_'
        ),
        monthsParse = [
            /^jan/i,
            /^feb/i,
            /^maart|mrt.?$/i,
            /^apr/i,
            /^mei$/i,
            /^jun[i.]?$/i,
            /^jul[i.]?$/i,
            /^aug/i,
            /^sep/i,
            /^okt/i,
            /^nov/i,
            /^dec/i,
        ],
        monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

    var nl = moment.defineLocale('nl', {
        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortWithDots;
            } else if (/-MMM-/.test(format)) {
                return monthsShortWithoutDots[m.month()];
            } else {
                return monthsShortWithDots[m.month()];
            }
        },

        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,

        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
            '_'
        ),
        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[vandaag om] LT',
            nextDay: '[morgen om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[gisteren om] LT',
            lastWeek: '[afgelopen] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'over %s',
            past: '%s geleden',
            s: 'een paar seconden',
            ss: '%d seconden',
            m: 'Ã©Ã©n minuut',
            mm: '%d minuten',
            h: 'Ã©Ã©n uur',
            hh: '%d uur',
            d: 'Ã©Ã©n dag',
            dd: '%d dagen',
            w: 'Ã©Ã©n week',
            ww: '%d weken',
            M: 'Ã©Ã©n maand',
            MM: '%d maanden',
            y: 'Ã©Ã©n jaar',
            yy: '%d jaar',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            );
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return nl;

})));
//! moment.js locale configuration
//! locale : Nynorsk [nn]
//! authors : https://github.com/mechuwind
//!           Stephen Ramthun : https://github.com/stephenramthun

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var nn = moment.defineLocale('nn', {
        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
        weekdaysShort: 'su._mÃ¥._ty._on._to._fr._lau.'.split('_'),
        weekdaysMin: 'su_mÃ¥_ty_on_to_fr_la'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] H:mm',
            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
        },
        calendar: {
            sameDay: '[I dag klokka] LT',
            nextDay: '[I morgon klokka] LT',
            nextWeek: 'dddd [klokka] LT',
            lastDay: '[I gÃ¥r klokka] LT',
            lastWeek: '[FÃ¸regÃ¥ande] dddd [klokka] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: '%s sidan',
            s: 'nokre sekund',
            ss: '%d sekund',
            m: 'eit minutt',
            mm: '%d minutt',
            h: 'ein time',
            hh: '%d timar',
            d: 'ein dag',
            dd: '%d dagar',
            w: 'ei veke',
            ww: '%d veker',
            M: 'ein mÃ¥nad',
            MM: '%d mÃ¥nader',
            y: 'eit Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return nn;

})));
//! moment.js locale configuration
//! locale : Occitan, lengadocian dialecte [oc-lnc]
//! author : Quentin PAGÃˆS : https://github.com/Quenty31

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ocLnc = moment.defineLocale('oc-lnc', {
        months: {
            standalone: 'geniÃ¨r_febriÃ¨r_marÃ§_abril_mai_junh_julhet_agost_setembre_octÃ²bre_novembre_decembre'.split(
                '_'
            ),
            format: "de geniÃ¨r_de febriÃ¨r_de marÃ§_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octÃ²bre_de novembre_de decembre".split(
                '_'
            ),
            isFormat: /D[oD]?(\s)+MMMM/,
        },
        monthsShort: 'gen._febr._marÃ§_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'dimenge_diluns_dimars_dimÃ¨cres_dijÃ²us_divendres_dissabte'.split(
            '_'
        ),
        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [de] YYYY',
            ll: 'D MMM YYYY',
            LLL: 'D MMMM [de] YYYY [a] H:mm',
            lll: 'D MMM YYYY, H:mm',
            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
            llll: 'ddd D MMM YYYY, H:mm',
        },
        calendar: {
            sameDay: '[uÃ¨i a] LT',
            nextDay: '[deman a] LT',
            nextWeek: 'dddd [a] LT',
            lastDay: '[iÃ¨r a] LT',
            lastWeek: 'dddd [passat a] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: "d'aquÃ­ %s",
            past: 'fa %s',
            s: 'unas segondas',
            ss: '%d segondas',
            m: 'una minuta',
            mm: '%d minutas',
            h: 'una ora',
            hh: '%d oras',
            d: 'un jorn',
            dd: '%d jorns',
            M: 'un mes',
            MM: '%d meses',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
        ordinal: function (number, period) {
            var output =
                number === 1
                    ? 'r'
                    : number === 2
                    ? 'n'
                    : number === 3
                    ? 'r'
                    : number === 4
                    ? 't'
                    : 'Ã¨';
            if (period === 'w' || period === 'W') {
                output = 'a';
            }
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4,
        },
    });

    return ocLnc;

})));
//! moment.js locale configuration
//! locale : Punjabi (India) [pa-in]
//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à©§',
            2: 'à©¨',
            3: 'à©©',
            4: 'à©ª',
            5: 'à©«',
            6: 'à©¬',
            7: 'à©­',
            8: 'à©®',
            9: 'à©¯',
            0: 'à©¦',
        },
        numberMap = {
            'à©§': '1',
            'à©¨': '2',
            'à©©': '3',
            'à©ª': '4',
            'à©«': '5',
            'à©¬': '6',
            'à©­': '7',
            'à©®': '8',
            'à©¯': '9',
            'à©¦': '0',
        };

    var paIn = moment.defineLocale('pa-in', {
        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
        months: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
            '_'
        ),
        monthsShort: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
            '_'
        ),
        weekdays: 'à¨à¨¤à¨µà¨¾à¨°_à¨¸à©‹à¨®à¨µà¨¾à¨°_à¨®à©°à¨—à¨²à¨µà¨¾à¨°_à¨¬à©à¨§à¨µà¨¾à¨°_à¨µà©€à¨°à¨µà¨¾à¨°_à¨¸à¨¼à©à©±à¨•à¨°à¨µà¨¾à¨°_à¨¸à¨¼à¨¨à©€à¨šà¨°à¨µà¨¾à¨°'.split(
            '_'
        ),
        weekdaysShort: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
        weekdaysMin: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¨µà¨œà©‡',
            LTS: 'A h:mm:ss à¨µà¨œà©‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¨µà¨œà©‡',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¨µà¨œà©‡',
        },
        calendar: {
            sameDay: '[à¨…à¨œ] LT',
            nextDay: '[à¨•à¨²] LT',
            nextWeek: '[à¨…à¨—à¨²à¨¾] dddd, LT',
            lastDay: '[à¨•à¨²] LT',
            lastWeek: '[à¨ªà¨¿à¨›à¨²à©‡] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¨µà¨¿à©±à¨š',
            past: '%s à¨ªà¨¿à¨›à¨²à©‡',
            s: 'à¨•à©à¨ à¨¸à¨•à¨¿à©°à¨Ÿ',
            ss: '%d à¨¸à¨•à¨¿à©°à¨Ÿ',
            m: 'à¨‡à¨• à¨®à¨¿à©°à¨Ÿ',
            mm: '%d à¨®à¨¿à©°à¨Ÿ',
            h: 'à¨‡à©±à¨• à¨˜à©°à¨Ÿà¨¾',
            hh: '%d à¨˜à©°à¨Ÿà©‡',
            d: 'à¨‡à©±à¨• à¨¦à¨¿à¨¨',
            dd: '%d à¨¦à¨¿à¨¨',
            M: 'à¨‡à©±à¨• à¨®à¨¹à©€à¨¨à¨¾',
            MM: '%d à¨®à¨¹à©€à¨¨à©‡',
            y: 'à¨‡à©±à¨• à¨¸à¨¾à¨²',
            yy: '%d à¨¸à¨¾à¨²',
        },
        preparse: function (string) {
            return string.replace(/[à©§à©¨à©©à©ªà©«à©¬à©­à©®à©¯à©¦]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
        meridiemParse: /à¨°à¨¾à¨¤|à¨¸à¨µà©‡à¨°|à¨¦à©à¨ªà¨¹à¨¿à¨°|à¨¸à¨¼à¨¾à¨®/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¨°à¨¾à¨¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¨¸à¨µà©‡à¨°') {
                return hour;
            } else if (meridiem === 'à¨¦à©à¨ªà¨¹à¨¿à¨°') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à¨¸à¨¼à¨¾à¨®') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¨°à¨¾à¨¤';
            } else if (hour < 10) {
                return 'à¨¸à¨µà©‡à¨°';
            } else if (hour < 17) {
                return 'à¨¦à©à¨ªà¨¹à¨¿à¨°';
            } else if (hour < 20) {
                return 'à¨¸à¨¼à¨¾à¨®';
            } else {
                return 'à¨°à¨¾à¨¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return paIn;

})));
//! moment.js locale configuration
//! locale : Polish [pl]
//! author : Rafal Hirsz : https://github.com/evoL

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var monthsNominative = 'styczeÅ„_luty_marzec_kwiecieÅ„_maj_czerwiec_lipiec_sierpieÅ„_wrzesieÅ„_paÅºdziernik_listopad_grudzieÅ„'.split(
            '_'
        ),
        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrzeÅ›nia_paÅºdziernika_listopada_grudnia'.split(
            '_'
        ),
        monthsParse = [
            /^sty/i,
            /^lut/i,
            /^mar/i,
            /^kwi/i,
            /^maj/i,
            /^cze/i,
            /^lip/i,
            /^sie/i,
            /^wrz/i,
            /^paÅº/i,
            /^lis/i,
            /^gru/i,
        ];
    function plural(n) {
        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
    }
    function translate(number, withoutSuffix, key) {
        var result = number + ' ';
        switch (key) {
            case 'ss':
                return result + (plural(number) ? 'sekundy' : 'sekund');
            case 'm':
                return withoutSuffix ? 'minuta' : 'minutÄ™';
            case 'mm':
                return result + (plural(number) ? 'minuty' : 'minut');
            case 'h':
                return withoutSuffix ? 'godzina' : 'godzinÄ™';
            case 'hh':
                return result + (plural(number) ? 'godziny' : 'godzin');
            case 'ww':
                return result + (plural(number) ? 'tygodnie' : 'tygodni');
            case 'MM':
                return result + (plural(number) ? 'miesiÄ…ce' : 'miesiÄ™cy');
            case 'yy':
                return result + (plural(number) ? 'lata' : 'lat');
        }
    }

    var pl = moment.defineLocale('pl', {
        months: function (momentToFormat, format) {
            if (!momentToFormat) {
                return monthsNominative;
            } else if (/D MMMM/.test(format)) {
                return monthsSubjective[momentToFormat.month()];
            } else {
                return monthsNominative[momentToFormat.month()];
            }
        },
        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paÅº_lis_gru'.split('_'),
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,
        weekdays: 'niedziela_poniedziaÅ‚ek_wtorek_Å›roda_czwartek_piÄ…tek_sobota'.split(
            '_'
        ),
        weekdaysShort: 'ndz_pon_wt_Å›r_czw_pt_sob'.split('_'),
        weekdaysMin: 'Nd_Pn_Wt_Åšr_Cz_Pt_So'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[DziÅ› o] LT',
            nextDay: '[Jutro o] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[W niedzielÄ™ o] LT';

                    case 2:
                        return '[We wtorek o] LT';

                    case 3:
                        return '[W Å›rodÄ™ o] LT';

                    case 6:
                        return '[W sobotÄ™ o] LT';

                    default:
                        return '[W] dddd [o] LT';
                }
            },
            lastDay: '[Wczoraj o] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[W zeszÅ‚Ä… niedzielÄ™ o] LT';
                    case 3:
                        return '[W zeszÅ‚Ä… Å›rodÄ™ o] LT';
                    case 6:
                        return '[W zeszÅ‚Ä… sobotÄ™ o] LT';
                    default:
                        return '[W zeszÅ‚y] dddd [o] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: '%s temu',
            s: 'kilka sekund',
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: '1 dzieÅ„',
            dd: '%d dni',
            w: 'tydzieÅ„',
            ww: translate,
            M: 'miesiÄ…c',
            MM: translate,
            y: 'rok',
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return pl;

})));
//! moment.js locale configuration
//! locale : Portuguese (Brazil) [pt-br]
//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ptBr = moment.defineLocale('pt-br', {
        months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
            '_'
        ),
        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
        weekdays: 'domingo_segunda-feira_terÃ§a-feira_quarta-feira_quinta-feira_sexta-feira_sÃ¡bado'.split(
            '_'
        ),
        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sÃ¡b'.split('_'),
        weekdaysMin: 'do_2Âª_3Âª_4Âª_5Âª_6Âª_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY [Ã s] HH:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY [Ã s] HH:mm',
        },
        calendar: {
            sameDay: '[Hoje Ã s] LT',
            nextDay: '[AmanhÃ£ Ã s] LT',
            nextWeek: 'dddd [Ã s] LT',
            lastDay: '[Ontem Ã s] LT',
            lastWeek: function () {
                return this.day() === 0 || this.day() === 6
                    ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                    : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'em %s',
            past: 'hÃ¡ %s',
            s: 'poucos segundos',
            ss: '%d segundos',
            m: 'um minuto',
            mm: '%d minutos',
            h: 'uma hora',
            hh: '%d horas',
            d: 'um dia',
            dd: '%d dias',
            M: 'um mÃªs',
            MM: '%d meses',
            y: 'um ano',
            yy: '%d anos',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        invalidDate: 'Data invÃ¡lida',
    });

    return ptBr;

})));
//! moment.js locale configuration
//! locale : Portuguese [pt]
//! author : Jefferson : https://github.com/jalex79

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var pt = moment.defineLocale('pt', {
        months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
            '_'
        ),
        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
        weekdays: 'Domingo_Segunda-feira_TerÃ§a-feira_Quarta-feira_Quinta-feira_Sexta-feira_SÃ¡bado'.split(
            '_'
        ),
        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_SÃ¡b'.split('_'),
        weekdaysMin: 'Do_2Âª_3Âª_4Âª_5Âª_6Âª_SÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY HH:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Hoje Ã s] LT',
            nextDay: '[AmanhÃ£ Ã s] LT',
            nextWeek: 'dddd [Ã s] LT',
            lastDay: '[Ontem Ã s] LT',
            lastWeek: function () {
                return this.day() === 0 || this.day() === 6
                    ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                    : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'em %s',
            past: 'hÃ¡ %s',
            s: 'segundos',
            ss: '%d segundos',
            m: 'um minuto',
            mm: '%d minutos',
            h: 'uma hora',
            hh: '%d horas',
            d: 'um dia',
            dd: '%d dias',
            w: 'uma semana',
            ww: '%d semanas',
            M: 'um mÃªs',
            MM: '%d meses',
            y: 'um ano',
            yy: '%d anos',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return pt;

})));
//! moment.js locale configuration
//! locale : Romanian [ro]
//! author : Vlad Gurdiga : https://github.com/gurdiga
//! author : Valentin Agachi : https://github.com/avaly
//! author : Emanuel Cepoi : https://github.com/cepem

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function relativeTimeWithPlural(number, withoutSuffix, key) {
        var format = {
                ss: 'secunde',
                mm: 'minute',
                hh: 'ore',
                dd: 'zile',
                ww: 'sÄƒptÄƒmÃ¢ni',
                MM: 'luni',
                yy: 'ani',
            },
            separator = ' ';
        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
            separator = ' de ';
        }
        return number + separator + format[key];
    }

    var ro = moment.defineLocale('ro', {
        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
            '_'
        ),
        monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'duminicÄƒ_luni_marÈ›i_miercuri_joi_vineri_sÃ¢mbÄƒtÄƒ'.split('_'),
        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_SÃ¢m'.split('_'),
        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_SÃ¢'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[azi la] LT',
            nextDay: '[mÃ¢ine la] LT',
            nextWeek: 'dddd [la] LT',
            lastDay: '[ieri la] LT',
            lastWeek: '[fosta] dddd [la] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'peste %s',
            past: '%s Ã®n urmÄƒ',
            s: 'cÃ¢teva secunde',
            ss: relativeTimeWithPlural,
            m: 'un minut',
            mm: relativeTimeWithPlural,
            h: 'o orÄƒ',
            hh: relativeTimeWithPlural,
            d: 'o zi',
            dd: relativeTimeWithPlural,
            w: 'o sÄƒptÄƒmÃ¢nÄƒ',
            ww: relativeTimeWithPlural,
            M: 'o lunÄƒ',
            MM: relativeTimeWithPlural,
            y: 'un an',
            yy: relativeTimeWithPlural,
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return ro;

})));
//! moment.js locale configuration
//! locale : Russian [ru]
//! author : Viktorminator : https://github.com/Viktorminator
//! author : Menelion ElensÃºle : https://github.com/Oire
//! author : ÐšÐ¾Ñ€ÐµÐ½Ð±ÐµÑ€Ð³ ÐœÐ°Ñ€Ðº : https://github.com/socketpair

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function plural(word, num) {
        var forms = word.split('_');
        return num % 10 === 1 && num % 100 !== 11
            ? forms[0]
            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
            ? forms[1]
            : forms[2];
    }
    function relativeTimeWithPlural(number, withoutSuffix, key) {
        var format = {
            ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
            mm: withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚',
            hh: 'Ñ‡Ð°Ñ_Ñ‡Ð°ÑÐ°_Ñ‡Ð°ÑÐ¾Ð²',
            dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ_Ð´Ð½ÐµÐ¹',
            ww: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð½ÐµÐ´ÐµÐ»Ð¸_Ð½ÐµÐ´ÐµÐ»ÑŒ',
            MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ð°_Ð¼ÐµÑÑÑ†ÐµÐ²',
            yy: 'Ð³Ð¾Ð´_Ð³Ð¾Ð´Ð°_Ð»ÐµÑ‚',
        };
        if (key === 'm') {
            return withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ';
        } else {
            return number + ' ' + plural(format[key], +number);
        }
    }
    var monthsParse = [
        /^ÑÐ½Ð²/i,
        /^Ñ„ÐµÐ²/i,
        /^Ð¼Ð°Ñ€/i,
        /^Ð°Ð¿Ñ€/i,
        /^Ð¼Ð°[Ð¹Ñ]/i,
        /^Ð¸ÑŽÐ½/i,
        /^Ð¸ÑŽÐ»/i,
        /^Ð°Ð²Ð³/i,
        /^ÑÐµÐ½/i,
        /^Ð¾ÐºÑ‚/i,
        /^Ð½Ð¾Ñ/i,
        /^Ð´ÐµÐº/i,
    ];

    // http://new.gramota.ru/spravka/rules/139-prop : Â§ 103
    // Ð¡Ð¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÑÑÑ†ÐµÐ²: http://new.gramota.ru/spravka/buro/search-answer?s=242637
    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
    var ru = moment.defineLocale('ru', {
        months: {
            format: 'ÑÐ½Ð²Ð°Ñ€Ñ_Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ_Ð¼Ð°Ñ€Ñ‚Ð°_Ð°Ð¿Ñ€ÐµÐ»Ñ_Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³ÑƒÑÑ‚Ð°_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ñ_Ð¾ÐºÑ‚ÑÐ±Ñ€Ñ_Ð½Ð¾ÑÐ±Ñ€Ñ_Ð´ÐµÐºÐ°Ð±Ñ€Ñ'.split(
                '_'
            ),
            standalone: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
                '_'
            ),
        },
        monthsShort: {
            // Ð¿Ð¾ CLDR Ð¸Ð¼ÐµÐ½Ð½Ð¾ "Ð¸ÑŽÐ»." Ð¸ "Ð¸ÑŽÐ½.", Ð½Ð¾ ÐºÐ°ÐºÐ¾Ð¹ ÑÐ¼Ñ‹ÑÐ» Ð¼ÐµÐ½ÑÑ‚ÑŒ Ð±ÑƒÐºÐ²Ñƒ Ð½Ð° Ñ‚Ð¾Ñ‡ÐºÑƒ?
            format: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
                '_'
            ),
            standalone: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€._Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
                '_'
            ),
        },
        weekdays: {
            standalone: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ð°_ÑÑƒÐ±Ð±Ð¾Ñ‚Ð°'.split(
                '_'
            ),
            format: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ñƒ_ÑÑƒÐ±Ð±Ð¾Ñ‚Ñƒ'.split(
                '_'
            ),
            isFormat: /\[ ?[Ð’Ð²] ?(?:Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ|ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ|ÑÑ‚Ñƒ)? ?] ?dddd/,
        },
        weekdaysShort: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        weekdaysMin: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,

        // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸, Ð¿Ð¾ Ñ‚Ñ€Ð¸ Ð±ÑƒÐºÐ²Ñ‹, Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ…, Ð¿Ð¾ 4 Ð±ÑƒÐºÐ²Ñ‹, ÑÐ¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¸ Ð±ÐµÐ· Ñ‚Ð¾Ñ‡ÐºÐ¸
        monthsRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

        // ÐºÐ¾Ð¿Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ³Ð¾
        monthsShortRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

        // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸
        monthsStrictRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑÑŒ]|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑÑŒ]|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð°Ð¿Ñ€ÐµÐ»[ÑÑŒ]|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑÑŒ]|Ð¸ÑŽÐ»[ÑÑŒ]|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑÑŒ]|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑÑŒ]|Ð½Ð¾ÑÐ±Ñ€[ÑÑŒ]|Ð´ÐµÐºÐ°Ð±Ñ€[ÑÑŒ])/i,

        // Ð’Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ðµ ÑÐ¾Ð¾Ñ‚Ð²ÐµÑ‚ÑÑ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ ÑÐ¾ÐºÑ€Ð°Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ð¼
        monthsShortStrictRegex: /^(ÑÐ½Ð²\.|Ñ„ÐµÐ²Ñ€?\.|Ð¼Ð°Ñ€[Ñ‚.]|Ð°Ð¿Ñ€\.|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑŒÑ.]|Ð¸ÑŽÐ»[ÑŒÑ.]|Ð°Ð²Ð³\.|ÑÐµÐ½Ñ‚?\.|Ð¾ÐºÑ‚\.|Ð½Ð¾ÑÐ±?\.|Ð´ÐµÐº\.)/i,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Ð³.',
            LLL: 'D MMMM YYYY Ð³., H:mm',
            LLLL: 'dddd, D MMMM YYYY Ð³., H:mm',
        },
        calendar: {
            sameDay: '[Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ, Ð²] LT',
            nextDay: '[Ð—Ð°Ð²Ñ‚Ñ€Ð°, Ð²] LT',
            lastDay: '[Ð’Ñ‡ÐµÑ€Ð°, Ð²] LT',
            nextWeek: function (now) {
                if (now.week() !== this.week()) {
                    switch (this.day()) {
                        case 0:
                            return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐµ] dddd, [Ð²] LT';
                        case 1:
                        case 2:
                        case 4:
                            return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ð¹] dddd, [Ð²] LT';
                        case 3:
                        case 5:
                        case 6:
                            return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ] dddd, [Ð²] LT';
                    }
                } else {
                    if (this.day() === 2) {
                        return '[Ð’Ð¾] dddd, [Ð²] LT';
                    } else {
                        return '[Ð’] dddd, [Ð²] LT';
                    }
                }
            },
            lastWeek: function (now) {
                if (now.week() !== this.week()) {
                    switch (this.day()) {
                        case 0:
                            return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ðµ] dddd, [Ð²] LT';
                        case 1:
                        case 2:
                        case 4:
                            return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ñ‹Ð¹] dddd, [Ð²] LT';
                        case 3:
                        case 5:
                        case 6:
                            return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ] dddd, [Ð²] LT';
                    }
                } else {
                    if (this.day() === 2) {
                        return '[Ð’Ð¾] dddd, [Ð²] LT';
                    } else {
                        return '[Ð’] dddd, [Ð²] LT';
                    }
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ñ‡ÐµÑ€ÐµÐ· %s',
            past: '%s Ð½Ð°Ð·Ð°Ð´',
            s: 'Ð½ÐµÑÐºÐ¾Ð»ÑŒÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´',
            ss: relativeTimeWithPlural,
            m: relativeTimeWithPlural,
            mm: relativeTimeWithPlural,
            h: 'Ñ‡Ð°Ñ',
            hh: relativeTimeWithPlural,
            d: 'Ð´ÐµÐ½ÑŒ',
            dd: relativeTimeWithPlural,
            w: 'Ð½ÐµÐ´ÐµÐ»Ñ',
            ww: relativeTimeWithPlural,
            M: 'Ð¼ÐµÑÑÑ†',
            MM: relativeTimeWithPlural,
            y: 'Ð³Ð¾Ð´',
            yy: relativeTimeWithPlural,
        },
        meridiemParse: /Ð½Ð¾Ñ‡Ð¸|ÑƒÑ‚Ñ€Ð°|Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°/i,
        isPM: function (input) {
            return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'Ð½Ð¾Ñ‡Ð¸';
            } else if (hour < 12) {
                return 'ÑƒÑ‚Ñ€Ð°';
            } else if (hour < 17) {
                return 'Ð´Ð½Ñ';
            } else {
                return 'Ð²ÐµÑ‡ÐµÑ€Ð°';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾|Ñ)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'M':
                case 'd':
                case 'DDD':
                    return number + '-Ð¹';
                case 'D':
                    return number + '-Ð³Ð¾';
                case 'w':
                case 'W':
                    return number + '-Ñ';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return ru;

})));
//! moment.js locale configuration
//! locale : Sindhi [sd]
//! author : Narain Sagar : https://github.com/narainsagar

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var months = [
            'Ø¬Ù†ÙˆØ±ÙŠ',
            'ÙÙŠØ¨Ø±ÙˆØ±ÙŠ',
            'Ù…Ø§Ø±Ú†',
            'Ø§Ù¾Ø±ÙŠÙ„',
            'Ù…Ø¦ÙŠ',
            'Ø¬ÙˆÙ†',
            'Ø¬ÙˆÙ„Ø§Ø¡Ù',
            'Ø¢Ú¯Ø³Ù½',
            'Ø³ÙŠÙ¾Ù½Ù…Ø¨Ø±',
            'Ø¢ÚªÙ½ÙˆØ¨Ø±',
            'Ù†ÙˆÙ…Ø¨Ø±',
            'ÚŠØ³Ù…Ø¨Ø±',
        ],
        days = ['Ø¢Ú†Ø±', 'Ø³ÙˆÙ…Ø±', 'Ø§Ú±Ø§Ø±Ùˆ', 'Ø§Ø±Ø¨Ø¹', 'Ø®Ù…ÙŠØ³', 'Ø¬Ù…Ø¹', 'Ú‡Ù†Ú‡Ø±'];

    var sd = moment.defineLocale('sd', {
        months: months,
        monthsShort: months,
        weekdays: days,
        weekdaysShort: days,
        weekdaysMin: days,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
        },
        meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
        isPM: function (input) {
            return 'Ø´Ø§Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'ØµØ¨Ø­';
            }
            return 'Ø´Ø§Ù…';
        },
        calendar: {
            sameDay: '[Ø§Ú„] LT',
            nextDay: '[Ø³Ú€Ø§Ú»ÙŠ] LT',
            nextWeek: 'dddd [Ø§Ú³ÙŠÙ† Ù‡ÙØªÙŠ ØªÙŠ] LT',
            lastDay: '[ÚªØ§Ù„Ù‡Ù‡] LT',
            lastWeek: '[Ú¯Ø²Ø±ÙŠÙ„ Ù‡ÙØªÙŠ] dddd [ØªÙŠ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ù¾ÙˆØ¡',
            past: '%s Ø§Ú³',
            s: 'Ú†Ù†Ø¯ Ø³ÙŠÚªÙ†ÚŠ',
            ss: '%d Ø³ÙŠÚªÙ†ÚŠ',
            m: 'Ù‡Úª Ù…Ù†Ù½',
            mm: '%d Ù…Ù†Ù½',
            h: 'Ù‡Úª ÚªÙ„Ø§Úª',
            hh: '%d ÚªÙ„Ø§Úª',
            d: 'Ù‡Úª ÚÙŠÙ†Ù‡Ù†',
            dd: '%d ÚÙŠÙ†Ù‡Ù†',
            M: 'Ù‡Úª Ù…Ù‡ÙŠÙ†Ùˆ',
            MM: '%d Ù…Ù‡ÙŠÙ†Ø§',
            y: 'Ù‡Úª Ø³Ø§Ù„',
            yy: '%d Ø³Ø§Ù„',
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return sd;

})));
//! moment.js locale configuration
//! locale : Northern Sami [se]
//! authors : BÃ¥rd Rolstad Henriksen : https://github.com/karamell

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var se = moment.defineLocale('se', {
        months: 'oÄ‘Ä‘ajagemÃ¡nnu_guovvamÃ¡nnu_njukÄamÃ¡nnu_cuoÅ‹omÃ¡nnu_miessemÃ¡nnu_geassemÃ¡nnu_suoidnemÃ¡nnu_borgemÃ¡nnu_ÄakÄamÃ¡nnu_golggotmÃ¡nnu_skÃ¡bmamÃ¡nnu_juovlamÃ¡nnu'.split(
            '_'
        ),
        monthsShort: 'oÄ‘Ä‘j_guov_njuk_cuo_mies_geas_suoi_borg_ÄakÄ_golg_skÃ¡b_juov'.split(
            '_'
        ),
        weekdays: 'sotnabeaivi_vuossÃ¡rga_maÅ‹Å‹ebÃ¡rga_gaskavahkku_duorastat_bearjadat_lÃ¡vvardat'.split(
            '_'
        ),
        weekdaysShort: 'sotn_vuos_maÅ‹_gask_duor_bear_lÃ¡v'.split('_'),
        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'MMMM D. [b.] YYYY',
            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
        },
        calendar: {
            sameDay: '[otne ti] LT',
            nextDay: '[ihttin ti] LT',
            nextWeek: 'dddd [ti] LT',
            lastDay: '[ikte ti] LT',
            lastWeek: '[ovddit] dddd [ti] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s geaÅ¾es',
            past: 'maÅ‹it %s',
            s: 'moadde sekunddat',
            ss: '%d sekunddat',
            m: 'okta minuhta',
            mm: '%d minuhtat',
            h: 'okta diimmu',
            hh: '%d diimmut',
            d: 'okta beaivi',
            dd: '%d beaivvit',
            M: 'okta mÃ¡nnu',
            MM: '%d mÃ¡nut',
            y: 'okta jahki',
            yy: '%d jagit',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return se;

})));
//! moment.js locale configuration
//! locale : Sinhalese [si]
//! author : Sampath Sitinamaluwa : https://github.com/sampathsris

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    /*jshint -W100*/
    var si = moment.defineLocale('si', {
        months: 'à¶¢à¶±à·€à·à¶»à·’_à¶´à·™à¶¶à¶»à·€à·à¶»à·’_à¶¸à·à¶»à·Šà¶­à·”_à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·à·ƒà·Šà¶­à·”_à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š_à¶”à¶šà·Šà¶­à·à¶¶à¶»à·Š_à¶±à·œà·€à·à¶¸à·Šà¶¶à¶»à·Š_à¶¯à·™à·ƒà·à¶¸à·Šà¶¶à¶»à·Š'.split(
            '_'
        ),
        monthsShort: 'à¶¢à¶±_à¶´à·™à¶¶_à¶¸à·à¶»à·Š_à¶…à¶´à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·_à·ƒà·à¶´à·Š_à¶”à¶šà·Š_à¶±à·œà·€à·_à¶¯à·™à·ƒà·'.split(
            '_'
        ),
        weekdays: 'à¶‰à¶»à·’à¶¯à·_à·ƒà¶³à·”à¶¯à·_à¶…à¶Ÿà·„à¶»à·”à·€à·à¶¯à·_à¶¶à¶¯à·à¶¯à·_à¶¶à·Šâ€à¶»à·„à·ƒà·Šà¶´à¶­à·’à¶±à·Šà¶¯à·_à·ƒà·’à¶šà·”à¶»à·à¶¯à·_à·ƒà·™à¶±à·ƒà·”à¶»à·à¶¯à·'.split(
            '_'
        ),
        weekdaysShort: 'à¶‰à¶»à·’_à·ƒà¶³à·”_à¶…à¶Ÿ_à¶¶à¶¯à·_à¶¶à·Šâ€à¶»à·„_à·ƒà·’à¶šà·”_à·ƒà·™à¶±'.split('_'),
        weekdaysMin: 'à¶‰_à·ƒ_à¶…_à¶¶_à¶¶à·Šâ€à¶»_à·ƒà·’_à·ƒà·™'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'a h:mm',
            LTS: 'a h:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYY MMMM D',
            LLL: 'YYYY MMMM D, a h:mm',
            LLLL: 'YYYY MMMM D [à·€à·à¶±à·’] dddd, a h:mm:ss',
        },
        calendar: {
            sameDay: '[à¶…à¶¯] LT[à¶§]',
            nextDay: '[à·„à·™à¶§] LT[à¶§]',
            nextWeek: 'dddd LT[à¶§]',
            lastDay: '[à¶Šà¶ºà·š] LT[à¶§]',
            lastWeek: '[à¶´à·ƒà·”à¶œà·’à¶º] dddd LT[à¶§]',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sà¶šà·’à¶±à·Š',
            past: '%sà¶šà¶§ à¶´à·™à¶»',
            s: 'à¶­à¶­à·Šà¶´à¶» à¶šà·’à·„à·’à¶´à¶º',
            ss: 'à¶­à¶­à·Šà¶´à¶» %d',
            m: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·”à·€',
            mm: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·” %d',
            h: 'à¶´à·à¶º',
            hh: 'à¶´à·à¶º %d',
            d: 'à¶¯à·’à¶±à¶º',
            dd: 'à¶¯à·’à¶± %d',
            M: 'à¶¸à·à·ƒà¶º',
            MM: 'à¶¸à·à·ƒ %d',
            y: 'à·€à·ƒà¶»',
            yy: 'à·€à·ƒà¶» %d',
        },
        dayOfMonthOrdinalParse: /\d{1,2} à·€à·à¶±à·’/,
        ordinal: function (number) {
            return number + ' à·€à·à¶±à·’';
        },
        meridiemParse: /à¶´à·™à¶» à·€à¶»à·”|à¶´à·ƒà·Š à·€à¶»à·”|à¶´à·™.à·€|à¶´.à·€./,
        isPM: function (input) {
            return input === 'à¶´.à·€.' || input === 'à¶´à·ƒà·Š à·€à¶»à·”';
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? 'à¶´.à·€.' : 'à¶´à·ƒà·Š à·€à¶»à·”';
            } else {
                return isLower ? 'à¶´à·™.à·€.' : 'à¶´à·™à¶» à·€à¶»à·”';
            }
        },
    });

    return si;

})));
//! moment.js locale configuration
//! locale : Slovak [sk]
//! author : Martin Minka : https://github.com/k2s
//! based on work of petrbela : https://github.com/petrbela

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var months = 'januÃ¡r_februÃ¡r_marec_aprÃ­l_mÃ¡j_jÃºn_jÃºl_august_september_oktÃ³ber_november_december'.split(
            '_'
        ),
        monthsShort = 'jan_feb_mar_apr_mÃ¡j_jÃºn_jÃºl_aug_sep_okt_nov_dec'.split('_');
    function plural(n) {
        return n > 1 && n < 5;
    }
    function translate(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's': // a few seconds / in a few seconds / a few seconds ago
                return withoutSuffix || isFuture ? 'pÃ¡r sekÃºnd' : 'pÃ¡r sekundami';
            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'sekundy' : 'sekÃºnd');
                } else {
                    return result + 'sekundami';
                }
            case 'm': // a minute / in a minute / a minute ago
                return withoutSuffix ? 'minÃºta' : isFuture ? 'minÃºtu' : 'minÃºtou';
            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'minÃºty' : 'minÃºt');
                } else {
                    return result + 'minÃºtami';
                }
            case 'h': // an hour / in an hour / an hour ago
                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
            case 'hh': // 9 hours / in 9 hours / 9 hours ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'hodiny' : 'hodÃ­n');
                } else {
                    return result + 'hodinami';
                }
            case 'd': // a day / in a day / a day ago
                return withoutSuffix || isFuture ? 'deÅˆ' : 'dÅˆom';
            case 'dd': // 9 days / in 9 days / 9 days ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'dni' : 'dnÃ­');
                } else {
                    return result + 'dÅˆami';
                }
            case 'M': // a month / in a month / a month ago
                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
            case 'MM': // 9 months / in 9 months / 9 months ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'mesiace' : 'mesiacov');
                } else {
                    return result + 'mesiacmi';
                }
            case 'y': // a year / in a year / a year ago
                return withoutSuffix || isFuture ? 'rok' : 'rokom';
            case 'yy': // 9 years / in 9 years / 9 years ago
                if (withoutSuffix || isFuture) {
                    return result + (plural(number) ? 'roky' : 'rokov');
                } else {
                    return result + 'rokmi';
                }
        }
    }

    var sk = moment.defineLocale('sk', {
        months: months,
        monthsShort: monthsShort,
        weekdays: 'nedeÄ¾a_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota'.split('_'),
        weekdaysShort: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
        weekdaysMin: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[dnes o] LT',
            nextDay: '[zajtra o] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[v nedeÄ¾u o] LT';
                    case 1:
                    case 2:
                        return '[v] dddd [o] LT';
                    case 3:
                        return '[v stredu o] LT';
                    case 4:
                        return '[vo Å¡tvrtok o] LT';
                    case 5:
                        return '[v piatok o] LT';
                    case 6:
                        return '[v sobotu o] LT';
                }
            },
            lastDay: '[vÄera o] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[minulÃº nedeÄ¾u o] LT';
                    case 1:
                    case 2:
                        return '[minulÃ½] dddd [o] LT';
                    case 3:
                        return '[minulÃº stredu o] LT';
                    case 4:
                    case 5:
                        return '[minulÃ½] dddd [o] LT';
                    case 6:
                        return '[minulÃº sobotu o] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'pred %s',
            s: translate,
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: translate,
            dd: translate,
            M: translate,
            MM: translate,
            y: translate,
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return sk;

})));
//! moment.js locale configuration
//! locale : Slovenian [sl]
//! author : Robert SedovÅ¡ek : https://github.com/sedovsek

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's':
                return withoutSuffix || isFuture
                    ? 'nekaj sekund'
                    : 'nekaj sekundami';
            case 'ss':
                if (number === 1) {
                    result += withoutSuffix ? 'sekundo' : 'sekundi';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
                } else {
                    result += 'sekund';
                }
                return result;
            case 'm':
                return withoutSuffix ? 'ena minuta' : 'eno minuto';
            case 'mm':
                if (number === 1) {
                    result += withoutSuffix ? 'minuta' : 'minuto';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';
                } else {
                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';
                }
                return result;
            case 'h':
                return withoutSuffix ? 'ena ura' : 'eno uro';
            case 'hh':
                if (number === 1) {
                    result += withoutSuffix ? 'ura' : 'uro';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'uri' : 'urama';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'ure' : 'urami';
                } else {
                    result += withoutSuffix || isFuture ? 'ur' : 'urami';
                }
                return result;
            case 'd':
                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
            case 'dd':
                if (number === 1) {
                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
                } else {
                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
                }
                return result;
            case 'M':
                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
            case 'MM':
                if (number === 1) {
                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
                } else {
                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
                }
                return result;
            case 'y':
                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
            case 'yy':
                if (number === 1) {
                    result += withoutSuffix || isFuture ? 'leto' : 'letom';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'leta' : 'leti';
                } else {
                    result += withoutSuffix || isFuture ? 'let' : 'leti';
                }
                return result;
        }
    }

    var sl = moment.defineLocale('sl', {
        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota'.split('_'),
        weekdaysShort: 'ned._pon._tor._sre._Äet._pet._sob.'.split('_'),
        weekdaysMin: 'ne_po_to_sr_Äe_pe_so'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD. MM. YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danes ob] LT',
            nextDay: '[jutri ob] LT',

            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[v] [nedeljo] [ob] LT';
                    case 3:
                        return '[v] [sredo] [ob] LT';
                    case 6:
                        return '[v] [soboto] [ob] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[v] dddd [ob] LT';
                }
            },
            lastDay: '[vÄeraj ob] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[prejÅ¡njo] [nedeljo] [ob] LT';
                    case 3:
                        return '[prejÅ¡njo] [sredo] [ob] LT';
                    case 6:
                        return '[prejÅ¡njo] [soboto] [ob] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[prejÅ¡nji] dddd [ob] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Äez %s',
            past: 'pred %s',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: processRelativeTime,
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return sl;

})));
//! moment.js locale configuration
//! locale : Albanian [sq]
//! author : FlakÃ«rim Ismani : https://github.com/flakerimi
//! author : Menelion ElensÃºle : https://github.com/Oire
//! author : Oerd Cukalla : https://github.com/oerd

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var sq = moment.defineLocale('sq', {
        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_NÃ«ntor_Dhjetor'.split(
            '_'
        ),
        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_NÃ«n_Dhj'.split('_'),
        weekdays: 'E Diel_E HÃ«nÃ«_E MartÃ«_E MÃ«rkurÃ«_E Enjte_E Premte_E ShtunÃ«'.split(
            '_'
        ),
        weekdaysShort: 'Die_HÃ«n_Mar_MÃ«r_Enj_Pre_Sht'.split('_'),
        weekdaysMin: 'D_H_Ma_MÃ«_E_P_Sh'.split('_'),
        weekdaysParseExact: true,
        meridiemParse: /PD|MD/,
        isPM: function (input) {
            return input.charAt(0) === 'M';
        },
        meridiem: function (hours, minutes, isLower) {
            return hours < 12 ? 'PD' : 'MD';
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Sot nÃ«] LT',
            nextDay: '[NesÃ«r nÃ«] LT',
            nextWeek: 'dddd [nÃ«] LT',
            lastDay: '[Dje nÃ«] LT',
            lastWeek: 'dddd [e kaluar nÃ«] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'nÃ« %s',
            past: '%s mÃ« parÃ«',
            s: 'disa sekonda',
            ss: '%d sekonda',
            m: 'njÃ« minutÃ«',
            mm: '%d minuta',
            h: 'njÃ« orÃ«',
            hh: '%d orÃ«',
            d: 'njÃ« ditÃ«',
            dd: '%d ditÃ«',
            M: 'njÃ« muaj',
            MM: '%d muaj',
            y: 'njÃ« vit',
            yy: '%d vite',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return sq;

})));
//! moment.js locale configuration
//! locale : Serbian Cyrillic [sr-cyrl]
//! author : Milan JanaÄkoviÄ‡<milanjanackovic@gmail.com> : https://github.com/milan-j
//! author : Stefan CrnjakoviÄ‡ <stefan@hotmail.rs> : https://github.com/crnjakovic

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var translator = {
        words: {
            //Different grammatical cases
            ss: ['ÑÐµÐºÑƒÐ½Ð´Ð°', 'ÑÐµÐºÑƒÐ½Ð´Ðµ', 'ÑÐµÐºÑƒÐ½Ð´Ð¸'],
            m: ['Ñ˜ÐµÐ´Ð°Ð½ Ð¼Ð¸Ð½ÑƒÑ‚', 'Ñ˜ÐµÐ´Ð½Ðµ Ð¼Ð¸Ð½ÑƒÑ‚Ðµ'],
            mm: ['Ð¼Ð¸Ð½ÑƒÑ‚', 'Ð¼Ð¸Ð½ÑƒÑ‚Ðµ', 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°'],
            h: ['Ñ˜ÐµÐ´Ð°Ð½ ÑÐ°Ñ‚', 'Ñ˜ÐµÐ´Ð½Ð¾Ð³ ÑÐ°Ñ‚Ð°'],
            hh: ['ÑÐ°Ñ‚', 'ÑÐ°Ñ‚Ð°', 'ÑÐ°Ñ‚Ð¸'],
            dd: ['Ð´Ð°Ð½', 'Ð´Ð°Ð½Ð°', 'Ð´Ð°Ð½Ð°'],
            MM: ['Ð¼ÐµÑÐµÑ†', 'Ð¼ÐµÑÐµÑ†Ð°', 'Ð¼ÐµÑÐµÑ†Ð¸'],
            yy: ['Ð³Ð¾Ð´Ð¸Ð½Ð°', 'Ð³Ð¾Ð´Ð¸Ð½Ðµ', 'Ð³Ð¾Ð´Ð¸Ð½Ð°'],
        },
        correctGrammaticalCase: function (number, wordKey) {
            return number === 1
                ? wordKey[0]
                : number >= 2 && number <= 4
                ? wordKey[1]
                : wordKey[2];
        },
        translate: function (number, withoutSuffix, key) {
            var wordKey = translator.words[key];
            if (key.length === 1) {
                return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
                return (
                    number +
                    ' ' +
                    translator.correctGrammaticalCase(number, wordKey)
                );
            }
        },
    };

    var srCyrl = moment.defineLocale('sr-cyrl', {
        months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€_Ñ„ÐµÐ±Ñ€ÑƒÐ°Ñ€_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð±Ð°Ñ€_Ð¾ÐºÑ‚Ð¾Ð±Ð°Ñ€_Ð½Ð¾Ð²ÐµÐ¼Ð±Ð°Ñ€_Ð´ÐµÑ†ÐµÐ¼Ð±Ð°Ñ€'.split(
            '_'
        ),
        monthsShort: 'Ñ˜Ð°Ð½._Ñ„ÐµÐ±._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³._ÑÐµÐ¿._Ð¾ÐºÑ‚._Ð½Ð¾Ð²._Ð´ÐµÑ†.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Ð½ÐµÐ´ÐµÑ™Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™Ð°Ðº_ÑƒÑ‚Ð¾Ñ€Ð°Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð°Ðº_Ð¿ÐµÑ‚Ð°Ðº_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split('_'),
        weekdaysShort: 'Ð½ÐµÐ´._Ð¿Ð¾Ð½._ÑƒÑ‚Ð¾._ÑÑ€Ðµ._Ñ‡ÐµÑ‚._Ð¿ÐµÑ‚._ÑÑƒÐ±.'.split('_'),
        weekdaysMin: 'Ð½Ðµ_Ð¿Ð¾_ÑƒÑ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_ÑÑƒ'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D. M. YYYY.',
            LL: 'D. MMMM YYYY.',
            LLL: 'D. MMMM YYYY. H:mm',
            LLLL: 'dddd, D. MMMM YYYY. H:mm',
        },
        calendar: {
            sameDay: '[Ð´Ð°Ð½Ð°Ñ Ñƒ] LT',
            nextDay: '[ÑÑƒÑ‚Ñ€Ð° Ñƒ] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[Ñƒ] [Ð½ÐµÐ´ÐµÑ™Ñƒ] [Ñƒ] LT';
                    case 3:
                        return '[Ñƒ] [ÑÑ€ÐµÐ´Ñƒ] [Ñƒ] LT';
                    case 6:
                        return '[Ñƒ] [ÑÑƒÐ±Ð¾Ñ‚Ñƒ] [Ñƒ] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[Ñƒ] dddd [Ñƒ] LT';
                }
            },
            lastDay: '[Ñ˜ÑƒÑ‡Ðµ Ñƒ] LT',
            lastWeek: function () {
                var lastWeekDays = [
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [Ð½ÐµÐ´ÐµÑ™Ðµ] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [ÑƒÑ‚Ð¾Ñ€ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑ€ÐµÐ´Ðµ] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿ÐµÑ‚ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑƒÐ±Ð¾Ñ‚Ðµ] [Ñƒ] LT',
                ];
                return lastWeekDays[this.day()];
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð·Ð° %s',
            past: 'Ð¿Ñ€Ðµ %s',
            s: 'Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
            ss: translator.translate,
            m: translator.translate,
            mm: translator.translate,
            h: translator.translate,
            hh: translator.translate,
            d: 'Ð´Ð°Ð½',
            dd: translator.translate,
            M: 'Ð¼ÐµÑÐµÑ†',
            MM: translator.translate,
            y: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
            yy: translator.translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 1st is the first week of the year.
        },
    });

    return srCyrl;

})));
//! moment.js locale configuration
//! locale : Serbian [sr]
//! author : Milan JanaÄkoviÄ‡<milanjanackovic@gmail.com> : https://github.com/milan-j
//! author : Stefan CrnjakoviÄ‡ <stefan@hotmail.rs> : https://github.com/crnjakovic

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var translator = {
        words: {
            //Different grammatical cases
            ss: ['sekunda', 'sekunde', 'sekundi'],
            m: ['jedan minut', 'jedne minute'],
            mm: ['minut', 'minute', 'minuta'],
            h: ['jedan sat', 'jednog sata'],
            hh: ['sat', 'sata', 'sati'],
            dd: ['dan', 'dana', 'dana'],
            MM: ['mesec', 'meseca', 'meseci'],
            yy: ['godina', 'godine', 'godina'],
        },
        correctGrammaticalCase: function (number, wordKey) {
            return number === 1
                ? wordKey[0]
                : number >= 2 && number <= 4
                ? wordKey[1]
                : wordKey[2];
        },
        translate: function (number, withoutSuffix, key) {
            var wordKey = translator.words[key];
            if (key.length === 1) {
                return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
                return (
                    number +
                    ' ' +
                    translator.correctGrammaticalCase(number, wordKey)
                );
            }
        },
    };

    var sr = moment.defineLocale('sr', {
        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedelja_ponedeljak_utorak_sreda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sre._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D. M. YYYY.',
            LL: 'D. MMMM YYYY.',
            LLL: 'D. MMMM YYYY. H:mm',
            LLLL: 'dddd, D. MMMM YYYY. H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedelju] [u] LT';
                    case 3:
                        return '[u] [sredu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄe u] LT',
            lastWeek: function () {
                var lastWeekDays = [
                    '[proÅ¡le] [nedelje] [u] LT',
                    '[proÅ¡log] [ponedeljka] [u] LT',
                    '[proÅ¡log] [utorka] [u] LT',
                    '[proÅ¡le] [srede] [u] LT',
                    '[proÅ¡log] [Äetvrtka] [u] LT',
                    '[proÅ¡log] [petka] [u] LT',
                    '[proÅ¡le] [subote] [u] LT',
                ];
                return lastWeekDays[this.day()];
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'pre %s',
            s: 'nekoliko sekundi',
            ss: translator.translate,
            m: translator.translate,
            mm: translator.translate,
            h: translator.translate,
            hh: translator.translate,
            d: 'dan',
            dd: translator.translate,
            M: 'mesec',
            MM: translator.translate,
            y: 'godinu',
            yy: translator.translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return sr;

})));
//! moment.js locale configuration
//! locale : siSwati [ss]
//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ss = moment.defineLocale('ss', {
        months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
            '_'
        ),
        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
        weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
            '_'
        ),
        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Namuhla nga] LT',
            nextDay: '[Kusasa nga] LT',
            nextWeek: 'dddd [nga] LT',
            lastDay: '[Itolo nga] LT',
            lastWeek: 'dddd [leliphelile] [nga] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'nga %s',
            past: 'wenteka nga %s',
            s: 'emizuzwana lomcane',
            ss: '%d mzuzwana',
            m: 'umzuzu',
            mm: '%d emizuzu',
            h: 'lihora',
            hh: '%d emahora',
            d: 'lilanga',
            dd: '%d emalanga',
            M: 'inyanga',
            MM: '%d tinyanga',
            y: 'umnyaka',
            yy: '%d iminyaka',
        },
        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'ekuseni';
            } else if (hours < 15) {
                return 'emini';
            } else if (hours < 19) {
                return 'entsambama';
            } else {
                return 'ebusuku';
            }
        },
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'ekuseni') {
                return hour;
            } else if (meridiem === 'emini') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
                if (hour === 0) {
                    return 0;
                }
                return hour + 12;
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: '%d',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return ss;

})));
//! moment.js locale configuration
//! locale : Swedish [sv]
//! author : Jens Alm : https://github.com/ulmus

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var sv = moment.defineLocale('sv', {
        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
        weekdays: 'sÃ¶ndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lÃ¶rdag'.split('_'),
        weekdaysShort: 'sÃ¶n_mÃ¥n_tis_ons_tor_fre_lÃ¶r'.split('_'),
        weekdaysMin: 'sÃ¶_mÃ¥_ti_on_to_fr_lÃ¶'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [kl.] HH:mm',
            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd D MMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Idag] LT',
            nextDay: '[Imorgon] LT',
            lastDay: '[IgÃ¥r] LT',
            nextWeek: '[PÃ¥] dddd LT',
            lastWeek: '[I] dddd[s] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: 'fÃ¶r %s sedan',
            s: 'nÃ¥gra sekunder',
            ss: '%d sekunder',
            m: 'en minut',
            mm: '%d minuter',
            h: 'en timme',
            hh: '%d timmar',
            d: 'en dag',
            dd: '%d dagar',
            M: 'en mÃ¥nad',
            MM: '%d mÃ¥nader',
            y: 'ett Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? ':e'
                        : b === 1
                        ? ':a'
                        : b === 2
                        ? ':a'
                        : b === 3
                        ? ':e'
                        : ':e';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return sv;

})));
//! moment.js locale configuration
//! locale : Swahili [sw]
//! author : Fahad Kassim : https://github.com/fadsel

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var sw = moment.defineLocale('sw', {
        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
        weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
            '_'
        ),
        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'hh:mm A',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[leo saa] LT',
            nextDay: '[kesho saa] LT',
            nextWeek: '[wiki ijayo] dddd [saat] LT',
            lastDay: '[jana] LT',
            lastWeek: '[wiki iliyopita] dddd [saat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s baadaye',
            past: 'tokea %s',
            s: 'hivi punde',
            ss: 'sekunde %d',
            m: 'dakika moja',
            mm: 'dakika %d',
            h: 'saa limoja',
            hh: 'masaa %d',
            d: 'siku moja',
            dd: 'siku %d',
            M: 'mwezi mmoja',
            MM: 'miezi %d',
            y: 'mwaka mmoja',
            yy: 'miaka %d',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return sw;

})));
//! moment.js locale configuration
//! locale : Tamil [ta]
//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var symbolMap = {
            1: 'à¯§',
            2: 'à¯¨',
            3: 'à¯©',
            4: 'à¯ª',
            5: 'à¯«',
            6: 'à¯¬',
            7: 'à¯­',
            8: 'à¯®',
            9: 'à¯¯',
            0: 'à¯¦',
        },
        numberMap = {
            'à¯§': '1',
            'à¯¨': '2',
            'à¯©': '3',
            'à¯ª': '4',
            'à¯«': '5',
            'à¯¬': '6',
            'à¯­': '7',
            'à¯®': '8',
            'à¯¯': '9',
            'à¯¦': '0',
        };

    var ta = moment.defineLocale('ta', {
        months: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
            '_'
        ),
        monthsShort: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
            '_'
        ),
        weekdays: 'à®žà®¾à®¯à®¿à®±à¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ_à®¤à®¿à®™à¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ_à®šà¯†à®µà¯à®µà®¾à®¯à¯à®•à®¿à®´à®®à¯ˆ_à®ªà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ_à®µà®¿à®¯à®¾à®´à®•à¯à®•à®¿à®´à®®à¯ˆ_à®µà¯†à®³à¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ_à®šà®©à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ'.split(
            '_'
        ),
        weekdaysShort: 'à®žà®¾à®¯à®¿à®±à¯_à®¤à®¿à®™à¯à®•à®³à¯_à®šà¯†à®µà¯à®µà®¾à®¯à¯_à®ªà¯à®¤à®©à¯_à®µà®¿à®¯à®¾à®´à®©à¯_à®µà¯†à®³à¯à®³à®¿_à®šà®©à®¿'.split(
            '_'
        ),
        weekdaysMin: 'à®žà®¾_à®¤à®¿_à®šà¯†_à®ªà¯_à®µà®¿_à®µà¯†_à®š'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, HH:mm',
            LLLL: 'dddd, D MMMM YYYY, HH:mm',
        },
        calendar: {
            sameDay: '[à®‡à®©à¯à®±à¯] LT',
            nextDay: '[à®¨à®¾à®³à¯ˆ] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à®¨à¯‡à®±à¯à®±à¯] LT',
            lastWeek: '[à®•à®Ÿà®¨à¯à®¤ à®µà®¾à®°à®®à¯] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à®‡à®²à¯',
            past: '%s à®®à¯à®©à¯',
            s: 'à®’à®°à¯ à®šà®¿à®² à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
            ss: '%d à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
            m: 'à®’à®°à¯ à®¨à®¿à®®à®¿à®Ÿà®®à¯',
            mm: '%d à®¨à®¿à®®à®¿à®Ÿà®™à¯à®•à®³à¯',
            h: 'à®’à®°à¯ à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
            hh: '%d à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
            d: 'à®’à®°à¯ à®¨à®¾à®³à¯',
            dd: '%d à®¨à®¾à®Ÿà¯à®•à®³à¯',
            M: 'à®’à®°à¯ à®®à®¾à®¤à®®à¯',
            MM: '%d à®®à®¾à®¤à®™à¯à®•à®³à¯',
            y: 'à®’à®°à¯ à®µà®°à¯à®Ÿà®®à¯',
            yy: '%d à®†à®£à¯à®Ÿà¯à®•à®³à¯',
        },
        dayOfMonthOrdinalParse: /\d{1,2}à®µà®¤à¯/,
        ordinal: function (number) {
            return number + 'à®µà®¤à¯';
        },
        preparse: function (string) {
            return string.replace(/[à¯§à¯¨à¯©à¯ªà¯«à¯¬à¯­à¯®à¯¯à¯¦]/g, function (match) {
                return numberMap[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap[match];
            });
        },
        // refer http://ta.wikipedia.org/s/1er1
        meridiemParse: /à®¯à®¾à®®à®®à¯|à®µà¯ˆà®•à®±à¯ˆ|à®•à®¾à®²à¯ˆ|à®¨à®£à¯à®ªà®•à®²à¯|à®Žà®±à¯à®ªà®¾à®Ÿà¯|à®®à®¾à®²à¯ˆ/,
        meridiem: function (hour, minute, isLower) {
            if (hour < 2) {
                return ' à®¯à®¾à®®à®®à¯';
            } else if (hour < 6) {
                return ' à®µà¯ˆà®•à®±à¯ˆ'; // à®µà¯ˆà®•à®±à¯ˆ
            } else if (hour < 10) {
                return ' à®•à®¾à®²à¯ˆ'; // à®•à®¾à®²à¯ˆ
            } else if (hour < 14) {
                return ' à®¨à®£à¯à®ªà®•à®²à¯'; // à®¨à®£à¯à®ªà®•à®²à¯
            } else if (hour < 18) {
                return ' à®Žà®±à¯à®ªà®¾à®Ÿà¯'; // à®Žà®±à¯à®ªà®¾à®Ÿà¯
            } else if (hour < 22) {
                return ' à®®à®¾à®²à¯ˆ'; // à®®à®¾à®²à¯ˆ
            } else {
                return ' à®¯à®¾à®®à®®à¯';
            }
        },
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à®¯à®¾à®®à®®à¯') {
                return hour < 2 ? hour : hour + 12;
            } else if (meridiem === 'à®µà¯ˆà®•à®±à¯ˆ' || meridiem === 'à®•à®¾à®²à¯ˆ') {
                return hour;
            } else if (meridiem === 'à®¨à®£à¯à®ªà®•à®²à¯') {
                return hour >= 10 ? hour : hour + 12;
            } else {
                return hour + 12;
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return ta;

})));
//! moment.js locale configuration
//! locale : Telugu [te]
//! author : Krishna Chaitanya Thota : https://github.com/kcthota

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var te = moment.defineLocale('te', {
        months: 'à°œà°¨à°µà°°à°¿_à°«à°¿à°¬à±à°°à°µà°°à°¿_à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿à°²à±_à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—à°¸à±à°Ÿà±_à°¸à±†à°ªà±à°Ÿà±†à°‚à°¬à°°à±_à°…à°•à±à°Ÿà±‹à°¬à°°à±_à°¨à°µà°‚à°¬à°°à±_à°¡à°¿à°¸à±†à°‚à°¬à°°à±'.split(
            '_'
        ),
        monthsShort: 'à°œà°¨._à°«à°¿à°¬à±à°°._à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿._à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—._à°¸à±†à°ªà±._à°…à°•à±à°Ÿà±‹._à°¨à°µ._à°¡à°¿à°¸à±†.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à°†à°¦à°¿à°µà°¾à°°à°‚_à°¸à±‹à°®à°µà°¾à°°à°‚_à°®à°‚à°—à°³à°µà°¾à°°à°‚_à°¬à±à°§à°µà°¾à°°à°‚_à°—à±à°°à±à°µà°¾à°°à°‚_à°¶à±à°•à±à°°à°µà°¾à°°à°‚_à°¶à°¨à°¿à°µà°¾à°°à°‚'.split(
            '_'
        ),
        weekdaysShort: 'à°†à°¦à°¿_à°¸à±‹à°®_à°®à°‚à°—à°³_à°¬à±à°§_à°—à±à°°à±_à°¶à±à°•à±à°°_à°¶à°¨à°¿'.split('_'),
        weekdaysMin: 'à°†_à°¸à±‹_à°®à°‚_à°¬à±_à°—à±_à°¶à±_à°¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm',
        },
        calendar: {
            sameDay: '[à°¨à±‡à°¡à±] LT',
            nextDay: '[à°°à±‡à°ªà±] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à°¨à°¿à°¨à±à°¨] LT',
            lastWeek: '[à°—à°¤] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à°²à±‹',
            past: '%s à°•à±à°°à°¿à°¤à°‚',
            s: 'à°•à±Šà°¨à±à°¨à°¿ à°•à±à°·à°£à°¾à°²à±',
            ss: '%d à°¸à±†à°•à°¨à±à°²à±',
            m: 'à°’à°• à°¨à°¿à°®à°¿à°·à°‚',
            mm: '%d à°¨à°¿à°®à°¿à°·à°¾à°²à±',
            h: 'à°’à°• à°—à°‚à°Ÿ',
            hh: '%d à°—à°‚à°Ÿà°²à±',
            d: 'à°’à°• à°°à±‹à°œà±',
            dd: '%d à°°à±‹à°œà±à°²à±',
            M: 'à°’à°• à°¨à±†à°²',
            MM: '%d à°¨à±†à°²à°²à±',
            y: 'à°’à°• à°¸à°‚à°µà°¤à±à°¸à°°à°‚',
            yy: '%d à°¸à°‚à°µà°¤à±à°¸à°°à°¾à°²à±',
        },
        dayOfMonthOrdinalParse: /\d{1,2}à°µ/,
        ordinal: '%dà°µ',
        meridiemParse: /à°°à°¾à°¤à±à°°à°¿|à°‰à°¦à°¯à°‚|à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚|à°¸à°¾à°¯à°‚à°¤à±à°°à°‚/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à°°à°¾à°¤à±à°°à°¿') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à°‰à°¦à°¯à°‚') {
                return hour;
            } else if (meridiem === 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à°°à°¾à°¤à±à°°à°¿';
            } else if (hour < 10) {
                return 'à°‰à°¦à°¯à°‚';
            } else if (hour < 17) {
                return 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚';
            } else if (hour < 20) {
                return 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚';
            } else {
                return 'à°°à°¾à°¤à±à°°à°¿';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    return te;

})));
//! moment.js locale configuration
//! locale : Tetun Dili (East Timor) [tet]
//! author : Joshua Brooks : https://github.com/joshbrooks
//! author : Onorio De J. Afonso : https://github.com/marobo
//! author : Sonia Simoes : https://github.com/soniasimoes

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var tet = moment.defineLocale('tet', {
        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_JuÃ±u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
            '_'
        ),
        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ohin iha] LT',
            nextDay: '[Aban iha] LT',
            nextWeek: 'dddd [iha] LT',
            lastDay: '[Horiseik iha] LT',
            lastWeek: 'dddd [semana kotuk] [iha] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'iha %s',
            past: '%s liuba',
            s: 'segundu balun',
            ss: 'segundu %d',
            m: 'minutu ida',
            mm: 'minutu %d',
            h: 'oras ida',
            hh: 'oras %d',
            d: 'loron ida',
            dd: 'loron %d',
            M: 'fulan ida',
            MM: 'fulan %d',
            y: 'tinan ida',
            yy: 'tinan %d',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return tet;

})));
//! moment.js locale configuration
//! locale : Tajik [tg]
//! author : Orif N. Jr. : https://github.com/orif-jr

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var suffixes = {
        0: '-ÑƒÐ¼',
        1: '-ÑƒÐ¼',
        2: '-ÑŽÐ¼',
        3: '-ÑŽÐ¼',
        4: '-ÑƒÐ¼',
        5: '-ÑƒÐ¼',
        6: '-ÑƒÐ¼',
        7: '-ÑƒÐ¼',
        8: '-ÑƒÐ¼',
        9: '-ÑƒÐ¼',
        10: '-ÑƒÐ¼',
        12: '-ÑƒÐ¼',
        13: '-ÑƒÐ¼',
        20: '-ÑƒÐ¼',
        30: '-ÑŽÐ¼',
        40: '-ÑƒÐ¼',
        50: '-ÑƒÐ¼',
        60: '-ÑƒÐ¼',
        70: '-ÑƒÐ¼',
        80: '-ÑƒÐ¼',
        90: '-ÑƒÐ¼',
        100: '-ÑƒÐ¼',
    };

    var tg = moment.defineLocale('tg', {
        months: {
            format: 'ÑÐ½Ð²Ð°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€Ð°Ð»Ð¸_Ð¼Ð°Ñ€Ñ‚Ð¸_Ð°Ð¿Ñ€ÐµÐ»Ð¸_Ð¼Ð°Ð¹Ð¸_Ð¸ÑŽÐ½Ð¸_Ð¸ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚Ð¸_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ð¸_Ð¾ÐºÑ‚ÑÐ±Ñ€Ð¸_Ð½Ð¾ÑÐ±Ñ€Ð¸_Ð´ÐµÐºÐ°Ð±Ñ€Ð¸'.split(
                '_'
            ),
            standalone: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
                '_'
            ),
        },
        monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
        weekdays: 'ÑÐºÑˆÐ°Ð½Ð±Ðµ_Ð´ÑƒÑˆÐ°Ð½Ð±Ðµ_ÑÐµÑˆÐ°Ð½Ð±Ðµ_Ñ‡Ð¾Ñ€ÑˆÐ°Ð½Ð±Ðµ_Ð¿Ð°Ð½Ò·ÑˆÐ°Ð½Ð±Ðµ_Ò·ÑƒÐ¼ÑŠÐ°_ÑˆÐ°Ð½Ð±Ðµ'.split(
            '_'
        ),
        weekdaysShort: 'ÑÑˆÐ±_Ð´ÑˆÐ±_ÑÑˆÐ±_Ñ‡ÑˆÐ±_Ð¿ÑˆÐ±_Ò·ÑƒÐ¼_ÑˆÐ½Ð±'.split('_'),
        weekdaysMin: 'ÑÑˆ_Ð´Ñˆ_ÑÑˆ_Ñ‡Ñˆ_Ð¿Ñˆ_Ò·Ð¼_ÑˆÐ±'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ð˜Ð¼Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
            nextDay: '[Ð¤Ð°Ñ€Ð´Ð¾ ÑÐ¾Ð°Ñ‚Ð¸] LT',
            lastDay: '[Ð”Ð¸Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
            nextWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð¾ÑÐ½Ð´Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
            lastWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð³ÑƒÐ·Ð°ÑˆÑ‚Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð±Ð°ÑŠÐ´Ð¸ %s',
            past: '%s Ð¿ÐµÑˆ',
            s: 'ÑÐºÑ‡Ð°Ð½Ð´ ÑÐ¾Ð½Ð¸Ñ',
            m: 'ÑÐº Ð´Ð°Ò›Ð¸Ò›Ð°',
            mm: '%d Ð´Ð°Ò›Ð¸Ò›Ð°',
            h: 'ÑÐº ÑÐ¾Ð°Ñ‚',
            hh: '%d ÑÐ¾Ð°Ñ‚',
            d: 'ÑÐº Ñ€Ó¯Ð·',
            dd: '%d Ñ€Ó¯Ð·',
            M: 'ÑÐº Ð¼Ð¾Ò³',
            MM: '%d Ð¼Ð¾Ò³',
            y: 'ÑÐº ÑÐ¾Ð»',
            yy: '%d ÑÐ¾Ð»',
        },
        meridiemParse: /ÑˆÐ°Ð±|ÑÑƒÐ±Ò³|Ñ€Ó¯Ð·|Ð±ÐµÐ³Ð¾Ò³/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'ÑˆÐ°Ð±') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'ÑÑƒÐ±Ò³') {
                return hour;
            } else if (meridiem === 'Ñ€Ó¯Ð·') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'Ð±ÐµÐ³Ð¾Ò³') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'ÑˆÐ°Ð±';
            } else if (hour < 11) {
                return 'ÑÑƒÐ±Ò³';
            } else if (hour < 16) {
                return 'Ñ€Ó¯Ð·';
            } else if (hour < 19) {
                return 'Ð±ÐµÐ³Ð¾Ò³';
            } else {
                return 'ÑˆÐ°Ð±';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÑƒÐ¼|ÑŽÐ¼)/,
        ordinal: function (number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 1th is the first week of the year.
        },
    });

    return tg;

})));
//! moment.js locale configuration
//! locale : Thai [th]
//! author : Kridsada Thanabulpong : https://github.com/sirn

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var th = moment.defineLocale('th', {
        months: 'à¸¡à¸à¸£à¸²à¸„à¸¡_à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ_à¸¡à¸µà¸™à¸²à¸„à¸¡_à¹€à¸¡à¸©à¸²à¸¢à¸™_à¸žà¸¤à¸©à¸ à¸²à¸„à¸¡_à¸¡à¸´à¸–à¸¸à¸™à¸²à¸¢à¸™_à¸à¸£à¸à¸Žà¸²à¸„à¸¡_à¸ªà¸´à¸‡à¸«à¸²à¸„à¸¡_à¸à¸±à¸™à¸¢à¸²à¸¢à¸™_à¸•à¸¸à¸¥à¸²à¸„à¸¡_à¸žà¸¤à¸¨à¸ˆà¸´à¸à¸²à¸¢à¸™_à¸˜à¸±à¸™à¸§à¸²à¸„à¸¡'.split(
            '_'
        ),
        monthsShort: 'à¸¡.à¸„._à¸.à¸ž._à¸¡à¸µ.à¸„._à¹€à¸¡.à¸¢._à¸ž.à¸„._à¸¡à¸´.à¸¢._à¸.à¸„._à¸ª.à¸„._à¸.à¸¢._à¸•.à¸„._à¸ž.à¸¢._à¸˜.à¸„.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ªà¸šà¸”à¸µ_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'),
        weekdaysShort: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ª_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'), // yes, three characters difference
        weekdaysMin: 'à¸­à¸²._à¸ˆ._à¸­._à¸ž._à¸žà¸¤._à¸¨._à¸ª.'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
            LLLL: 'à¸§à¸±à¸™ddddà¸—à¸µà¹ˆ D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
        },
        meridiemParse: /à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡|à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡/,
        isPM: function (input) {
            return input === 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
            } else {
                return 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
            }
        },
        calendar: {
            sameDay: '[à¸§à¸±à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
            nextDay: '[à¸žà¸£à¸¸à¹ˆà¸‡à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
            nextWeek: 'dddd[à¸«à¸™à¹‰à¸² à¹€à¸§à¸¥à¸²] LT',
            lastDay: '[à¹€à¸¡à¸·à¹ˆà¸­à¸§à¸²à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
            lastWeek: '[à¸§à¸±à¸™]dddd[à¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§ à¹€à¸§à¸¥à¸²] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'à¸­à¸µà¸ %s',
            past: '%sà¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§',
            s: 'à¹„à¸¡à¹ˆà¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—à¸µ',
            ss: '%d à¸§à¸´à¸™à¸²à¸—à¸µ',
            m: '1 à¸™à¸²à¸—à¸µ',
            mm: '%d à¸™à¸²à¸—à¸µ',
            h: '1 à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
            hh: '%d à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
            d: '1 à¸§à¸±à¸™',
            dd: '%d à¸§à¸±à¸™',
            w: '1 à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
            ww: '%d à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
            M: '1 à¹€à¸”à¸·à¸­à¸™',
            MM: '%d à¹€à¸”à¸·à¸­à¸™',
            y: '1 à¸›à¸µ',
            yy: '%d à¸›à¸µ',
        },
    });

    return th;

})));
//! moment.js locale configuration
//! locale : Turkmen [tk]
//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var suffixes = {
        1: "'inji",
        5: "'inji",
        8: "'inji",
        70: "'inji",
        80: "'inji",
        2: "'nji",
        7: "'nji",
        20: "'nji",
        50: "'nji",
        3: "'Ã¼nji",
        4: "'Ã¼nji",
        100: "'Ã¼nji",
        6: "'njy",
        9: "'unjy",
        10: "'unjy",
        30: "'unjy",
        60: "'ynjy",
        90: "'ynjy",
    };

    var tk = moment.defineLocale('tk', {
        months: 'Ãanwar_Fewral_Mart_Aprel_MaÃ½_IÃ½un_IÃ½ul_Awgust_SentÃ½abr_OktÃ½abr_NoÃ½abr_Dekabr'.split(
            '_'
        ),
        monthsShort: 'Ãan_Few_Mar_Apr_MaÃ½_IÃ½n_IÃ½l_Awg_Sen_Okt_NoÃ½_Dek'.split('_'),
        weekdays: 'ÃekÅŸenbe_DuÅŸenbe_SiÅŸenbe_Ã‡arÅŸenbe_PenÅŸenbe_Anna_Åženbe'.split(
            '_'
        ),
        weekdaysShort: 'Ãek_DuÅŸ_SiÅŸ_Ã‡ar_Pen_Ann_Åžen'.split('_'),
        weekdaysMin: 'Ãk_DÅŸ_SÅŸ_Ã‡r_Pn_An_Åžn'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[bugÃ¼n sagat] LT',
            nextDay: '[ertir sagat] LT',
            nextWeek: '[indiki] dddd [sagat] LT',
            lastDay: '[dÃ¼Ã½n] LT',
            lastWeek: '[geÃ§en] dddd [sagat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s soÅˆ',
            past: '%s Ã¶Åˆ',
            s: 'birnÃ¤Ã§e sekunt',
            m: 'bir minut',
            mm: '%d minut',
            h: 'bir sagat',
            hh: '%d sagat',
            d: 'bir gÃ¼n',
            dd: '%d gÃ¼n',
            M: 'bir aÃ½',
            MM: '%d aÃ½',
            y: 'bir Ã½yl',
            yy: '%d Ã½yl',
        },
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'Do':
                case 'DD':
                    return number;
                default:
                    if (number === 0) {
                        // special case for zero
                        return number + "'unjy";
                    }
                    var a = number % 10,
                        b = (number % 100) - a,
                        c = number >= 100 ? 100 : null;
                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return tk;

})));
//! moment.js locale configuration
//! locale : Tagalog (Philippines) [tl-ph]
//! author : Dan Hagman : https://github.com/hagmandan

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var tlPh = moment.defineLocale('tl-ph', {
        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
            '_'
        ),
        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
            '_'
        ),
        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'MM/D/YYYY',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY HH:mm',
            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
        },
        calendar: {
            sameDay: 'LT [ngayong araw]',
            nextDay: '[Bukas ng] LT',
            nextWeek: 'LT [sa susunod na] dddd',
            lastDay: 'LT [kahapon]',
            lastWeek: 'LT [noong nakaraang] dddd',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'sa loob ng %s',
            past: '%s ang nakalipas',
            s: 'ilang segundo',
            ss: '%d segundo',
            m: 'isang minuto',
            mm: '%d minuto',
            h: 'isang oras',
            hh: '%d oras',
            d: 'isang araw',
            dd: '%d araw',
            M: 'isang buwan',
            MM: '%d buwan',
            y: 'isang taon',
            yy: '%d taon',
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: function (number) {
            return number;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return tlPh;

})));
//! moment.js locale configuration
//! locale : Klingon [tlh]
//! author : Dominika Kruk : https://github.com/amaranthrose

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var numbersNouns = 'pagh_waâ€™_chaâ€™_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');

    function translateFuture(output) {
        var time = output;
        time =
            output.indexOf('jaj') !== -1
                ? time.slice(0, -3) + 'leS'
                : output.indexOf('jar') !== -1
                ? time.slice(0, -3) + 'waQ'
                : output.indexOf('DIS') !== -1
                ? time.slice(0, -3) + 'nem'
                : time + ' pIq';
        return time;
    }

    function translatePast(output) {
        var time = output;
        time =
            output.indexOf('jaj') !== -1
                ? time.slice(0, -3) + 'Huâ€™'
                : output.indexOf('jar') !== -1
                ? time.slice(0, -3) + 'wen'
                : output.indexOf('DIS') !== -1
                ? time.slice(0, -3) + 'ben'
                : time + ' ret';
        return time;
    }

    function translate(number, withoutSuffix, string, isFuture) {
        var numberNoun = numberAsNoun(number);
        switch (string) {
            case 'ss':
                return numberNoun + ' lup';
            case 'mm':
                return numberNoun + ' tup';
            case 'hh':
                return numberNoun + ' rep';
            case 'dd':
                return numberNoun + ' jaj';
            case 'MM':
                return numberNoun + ' jar';
            case 'yy':
                return numberNoun + ' DIS';
        }
    }

    function numberAsNoun(number) {
        var hundred = Math.floor((number % 1000) / 100),
            ten = Math.floor((number % 100) / 10),
            one = number % 10,
            word = '';
        if (hundred > 0) {
            word += numbersNouns[hundred] + 'vatlh';
        }
        if (ten > 0) {
            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
        }
        if (one > 0) {
            word += (word !== '' ? ' ' : '') + numbersNouns[one];
        }
        return word === '' ? 'pagh' : word;
    }

    var tlh = moment.defineLocale('tlh', {
        months: 'teraâ€™ jar waâ€™_teraâ€™ jar chaâ€™_teraâ€™ jar wej_teraâ€™ jar loS_teraâ€™ jar vagh_teraâ€™ jar jav_teraâ€™ jar Soch_teraâ€™ jar chorgh_teraâ€™ jar Hut_teraâ€™ jar waâ€™maH_teraâ€™ jar waâ€™maH waâ€™_teraâ€™ jar waâ€™maH chaâ€™'.split(
            '_'
        ),
        monthsShort: 'jar waâ€™_jar chaâ€™_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar waâ€™maH_jar waâ€™maH waâ€™_jar waâ€™maH chaâ€™'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
            '_'
        ),
        weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
            '_'
        ),
        weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
            '_'
        ),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[DaHjaj] LT',
            nextDay: '[waâ€™leS] LT',
            nextWeek: 'LLL',
            lastDay: '[waâ€™Huâ€™] LT',
            lastWeek: 'LLL',
            sameElse: 'L',
        },
        relativeTime: {
            future: translateFuture,
            past: translatePast,
            s: 'puS lup',
            ss: translate,
            m: 'waâ€™ tup',
            mm: translate,
            h: 'waâ€™ rep',
            hh: translate,
            d: 'waâ€™ jaj',
            dd: translate,
            M: 'waâ€™ jar',
            MM: translate,
            y: 'waâ€™ DIS',
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return tlh;

})));
//! moment.js locale configuration
//! locale : Turkish [tr]
//! authors : Erhan Gundogan : https://github.com/erhangundogan,
//!           Burak YiÄŸit Kaya: https://github.com/BYK

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var suffixes = {
        1: "'inci",
        5: "'inci",
        8: "'inci",
        70: "'inci",
        80: "'inci",
        2: "'nci",
        7: "'nci",
        20: "'nci",
        50: "'nci",
        3: "'Ã¼ncÃ¼",
        4: "'Ã¼ncÃ¼",
        100: "'Ã¼ncÃ¼",
        6: "'ncÄ±",
        9: "'uncu",
        10: "'uncu",
        30: "'uncu",
        60: "'Ä±ncÄ±",
        90: "'Ä±ncÄ±",
    };

    var tr = moment.defineLocale('tr', {
        months: 'Ocak_Åžubat_Mart_Nisan_MayÄ±s_Haziran_Temmuz_AÄŸustos_EylÃ¼l_Ekim_KasÄ±m_AralÄ±k'.split(
            '_'
        ),
        monthsShort: 'Oca_Åžub_Mar_Nis_May_Haz_Tem_AÄŸu_Eyl_Eki_Kas_Ara'.split('_'),
        weekdays: 'Pazar_Pazartesi_SalÄ±_Ã‡arÅŸamba_PerÅŸembe_Cuma_Cumartesi'.split(
            '_'
        ),
        weekdaysShort: 'Paz_Pts_Sal_Ã‡ar_Per_Cum_Cts'.split('_'),
        weekdaysMin: 'Pz_Pt_Sa_Ã‡a_Pe_Cu_Ct'.split('_'),
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower ? 'Ã¶Ã¶' : 'Ã–Ã–';
            } else {
                return isLower ? 'Ã¶s' : 'Ã–S';
            }
        },
        meridiemParse: /Ã¶Ã¶|Ã–Ã–|Ã¶s|Ã–S/,
        isPM: function (input) {
            return input === 'Ã¶s' || input === 'Ã–S';
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[bugÃ¼n saat] LT',
            nextDay: '[yarÄ±n saat] LT',
            nextWeek: '[gelecek] dddd [saat] LT',
            lastDay: '[dÃ¼n] LT',
            lastWeek: '[geÃ§en] dddd [saat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s sonra',
            past: '%s Ã¶nce',
            s: 'birkaÃ§ saniye',
            ss: '%d saniye',
            m: 'bir dakika',
            mm: '%d dakika',
            h: 'bir saat',
            hh: '%d saat',
            d: 'bir gÃ¼n',
            dd: '%d gÃ¼n',
            w: 'bir hafta',
            ww: '%d hafta',
            M: 'bir ay',
            MM: '%d ay',
            y: 'bir yÄ±l',
            yy: '%d yÄ±l',
        },
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'Do':
                case 'DD':
                    return number;
                default:
                    if (number === 0) {
                        // special case for zero
                        return number + "'Ä±ncÄ±";
                    }
                    var a = number % 10,
                        b = (number % 100) - a,
                        c = number >= 100 ? 100 : null;
                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return tr;

})));
//! moment.js locale configuration
//! locale : Talossan [tzl]
//! author : Robin van der Vliet : https://github.com/robin0van0der0v
//! author : IustÃ¬ Canun

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
    // This is currently too difficult (maybe even impossible) to add.
    var tzl = moment.defineLocale('tzl', {
        months: 'Januar_Fevraglh_MarÃ§_AvrÃ¯u_Mai_GÃ¼n_Julia_Guscht_Setemvar_ListopÃ¤ts_Noemvar_Zecemvar'.split(
            '_'
        ),
        monthsShort: 'Jan_Fev_Mar_Avr_Mai_GÃ¼n_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
        weekdays: 'SÃºladi_LÃºneÃ§i_Maitzi_MÃ¡rcuri_XhÃºadi_ViÃ©nerÃ§i_SÃ¡turi'.split('_'),
        weekdaysShort: 'SÃºl_LÃºn_Mai_MÃ¡r_XhÃº_ViÃ©_SÃ¡t'.split('_'),
        weekdaysMin: 'SÃº_LÃº_Ma_MÃ¡_Xh_Vi_SÃ¡'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM [dallas] YYYY',
            LLL: 'D. MMMM [dallas] YYYY HH.mm',
            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
        },
        meridiemParse: /d\'o|d\'a/i,
        isPM: function (input) {
            return "d'o" === input.toLowerCase();
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? "d'o" : "D'O";
            } else {
                return isLower ? "d'a" : "D'A";
            }
        },
        calendar: {
            sameDay: '[oxhi Ã ] LT',
            nextDay: '[demÃ  Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[ieiri Ã ] LT',
            lastWeek: '[sÃ¼r el] dddd [lasteu Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'osprei %s',
            past: 'ja%s',
            s: processRelativeTime,
            ss: processRelativeTime,
            m: processRelativeTime,
            mm: processRelativeTime,
            h: processRelativeTime,
            hh: processRelativeTime,
            d: processRelativeTime,
            dd: processRelativeTime,
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['viensas secunds', "'iensas secunds"],
            ss: [number + ' secunds', '' + number + ' secunds'],
            m: ["'n mÃ­ut", "'iens mÃ­ut"],
            mm: [number + ' mÃ­uts', '' + number + ' mÃ­uts'],
            h: ["'n Ã¾ora", "'iensa Ã¾ora"],
            hh: [number + ' Ã¾oras', '' + number + ' Ã¾oras'],
            d: ["'n ziua", "'iensa ziua"],
            dd: [number + ' ziuas', '' + number + ' ziuas'],
            M: ["'n mes", "'iens mes"],
            MM: [number + ' mesen', '' + number + ' mesen'],
            y: ["'n ar", "'iens ar"],
            yy: [number + ' ars', '' + number + ' ars'],
        };
        return isFuture
            ? format[key][0]
            : withoutSuffix
            ? format[key][0]
            : format[key][1];
    }

    return tzl;

})));
//! moment.js locale configuration
//! locale : Central Atlas Tamazight Latin [tzm-latn]
//! author : Abdel Said : https://github.com/abdelsaid

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var tzmLatn = moment.defineLocale('tzm-latn', {
        months: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
            '_'
        ),
        monthsShort: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
            '_'
        ),
        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[asdkh g] LT',
            nextDay: '[aska g] LT',
            nextWeek: 'dddd [g] LT',
            lastDay: '[assant g] LT',
            lastWeek: 'dddd [g] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dadkh s yan %s',
            past: 'yan %s',
            s: 'imik',
            ss: '%d imik',
            m: 'minuá¸',
            mm: '%d minuá¸',
            h: 'saÉ›a',
            hh: '%d tassaÉ›in',
            d: 'ass',
            dd: '%d ossan',
            M: 'ayowr',
            MM: '%d iyyirn',
            y: 'asgas',
            yy: '%d isgasn',
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    return tzmLatn;

})));
//! moment.js locale configuration
//! locale : Central Atlas Tamazight [tzm]
//! author : Abdel Said : https://github.com/abdelsaid

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var tzm = moment.defineLocale('tzm', {
        months: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
            '_'
        ),
        monthsShort: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
            '_'
        ),
        weekdays: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
        weekdaysShort: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
        weekdaysMin: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[â´°âµ™â´·âµ… â´´] LT',
            nextDay: '[â´°âµ™â´½â´° â´´] LT',
            nextWeek: 'dddd [â´´] LT',
            lastDay: '[â´°âµšâ´°âµâµœ â´´] LT',
            lastWeek: 'dddd [â´´] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'â´·â´°â´·âµ… âµ™ âµ¢â´°âµ %s',
            past: 'âµ¢â´°âµ %s',
            s: 'âµ‰âµŽâµ‰â´½',
            ss: '%d âµ‰âµŽâµ‰â´½',
            m: 'âµŽâµ‰âµâµ“â´º',
            mm: '%d âµŽâµ‰âµâµ“â´º',
            h: 'âµ™â´°âµ„â´°',
            hh: '%d âµœâ´°âµ™âµ™â´°âµ„âµ‰âµ',
            d: 'â´°âµ™âµ™',
            dd: '%d oâµ™âµ™â´°âµ',
            M: 'â´°âµ¢oâµ“âµ”',
            MM: '%d âµ‰âµ¢âµ¢âµ‰âµ”âµ',
            y: 'â´°âµ™â´³â´°âµ™',
            yy: '%d âµ‰âµ™â´³â´°âµ™âµ',
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    return tzm;

})));
//! moment.js locale configuration
//! locale : Uyghur (China) [ug-cn]
//! author: boyaq : https://github.com/boyaq

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var ugCn = moment.defineLocale('ug-cn', {
        months: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
            '_'
        ),
        weekdays: 'ÙŠÛ•ÙƒØ´Û•Ù†Ø¨Û•_Ø¯ÛˆØ´Û•Ù†Ø¨Û•_Ø³Û•ÙŠØ´Û•Ù†Ø¨Û•_Ú†Ø§Ø±Ø´Û•Ù†Ø¨Û•_Ù¾Û•ÙŠØ´Û•Ù†Ø¨Û•_Ø¬ÛˆÙ…Û•_Ø´Û•Ù†Ø¨Û•'.split(
            '_'
        ),
        weekdaysShort: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
        weekdaysMin: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰',
            LLL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
            LLLL: 'ddddØŒ YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
        },
        meridiemParse: /ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•|Ø³Û•Ú¾Û•Ø±|Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†|Ú†ÛˆØ´|Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†|ÙƒÛ•Ú†/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                meridiem === 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•' ||
                meridiem === 'Ø³Û•Ú¾Û•Ø±' ||
                meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†'
            ) {
                return hour;
            } else if (meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†' || meridiem === 'ÙƒÛ•Ú†') {
                return hour + 12;
            } else {
                return hour >= 11 ? hour : hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•';
            } else if (hm < 900) {
                return 'Ø³Û•Ú¾Û•Ø±';
            } else if (hm < 1130) {
                return 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†';
            } else if (hm < 1230) {
                return 'Ú†ÛˆØ´';
            } else if (hm < 1800) {
                return 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†';
            } else {
                return 'ÙƒÛ•Ú†';
            }
        },
        calendar: {
            sameDay: '[Ø¨ÛˆÚ¯ÛˆÙ† Ø³Ø§Ø¦Û•Øª] LT',
            nextDay: '[Ø¦Û•ØªÛ• Ø³Ø§Ø¦Û•Øª] LT',
            nextWeek: '[ÙƒÛÙ„Û•Ø±ÙƒÙ‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
            lastDay: '[ØªÛ†Ù†ÛˆÚ¯ÛˆÙ†] LT',
            lastWeek: '[Ø¦Ø§Ù„Ø¯Ù‰Ù†Ù‚Ù‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s ÙƒÛÙŠÙ‰Ù†',
            past: '%s Ø¨Û‡Ø±Û‡Ù†',
            s: 'Ù†Û•Ú†Ú†Û• Ø³ÛÙƒÙˆÙ†Øª',
            ss: '%d Ø³ÛÙƒÙˆÙ†Øª',
            m: 'Ø¨Ù‰Ø± Ù…Ù‰Ù†Û‡Øª',
            mm: '%d Ù…Ù‰Ù†Û‡Øª',
            h: 'Ø¨Ù‰Ø± Ø³Ø§Ø¦Û•Øª',
            hh: '%d Ø³Ø§Ø¦Û•Øª',
            d: 'Ø¨Ù‰Ø± ÙƒÛˆÙ†',
            dd: '%d ÙƒÛˆÙ†',
            M: 'Ø¨Ù‰Ø± Ø¦Ø§ÙŠ',
            MM: '%d Ø¦Ø§ÙŠ',
            y: 'Ø¨Ù‰Ø± ÙŠÙ‰Ù„',
            yy: '%d ÙŠÙ‰Ù„',
        },

        dayOfMonthOrdinalParse: /\d{1,2}(-ÙƒÛˆÙ†Ù‰|-Ø¦Ø§ÙŠ|-Ú¾Û•Ù¾ØªÛ•)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + '-ÙƒÛˆÙ†Ù‰';
                case 'w':
                case 'W':
                    return number + '-Ú¾Û•Ù¾ØªÛ•';
                default:
                    return number;
            }
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 1st is the first week of the year.
        },
    });

    return ugCn;

})));
//! moment.js locale configuration
//! locale : Ukrainian [uk]
//! author : zemlanin : https://github.com/zemlanin
//! Author : Menelion ElensÃºle : https://github.com/Oire

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    function plural(word, num) {
        var forms = word.split('_');
        return num % 10 === 1 && num % 100 !== 11
            ? forms[0]
            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
            ? forms[1]
            : forms[2];
    }
    function relativeTimeWithPlural(number, withoutSuffix, key) {
        var format = {
            ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´',
            mm: withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½',
            hh: withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½',
            dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð½Ñ–Ð²',
            MM: 'Ð¼Ñ–ÑÑÑ†ÑŒ_Ð¼Ñ–ÑÑÑ†Ñ–_Ð¼Ñ–ÑÑÑ†Ñ–Ð²',
            yy: 'Ñ€Ñ–Ðº_Ñ€Ð¾ÐºÐ¸_Ñ€Ð¾ÐºÑ–Ð²',
        };
        if (key === 'm') {
            return withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ';
        } else if (key === 'h') {
            return withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ';
        } else {
            return number + ' ' + plural(format[key], +number);
        }
    }
    function weekdaysCaseReplace(m, format) {
        var weekdays = {
                nominative: 'Ð½ÐµÐ´Ñ–Ð»Ñ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
                    '_'
                ),
                accusative: 'Ð½ÐµÐ´Ñ–Ð»ÑŽ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†ÑŽ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
                    '_'
                ),
                genitive: 'Ð½ÐµÐ´Ñ–Ð»Ñ–_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»ÐºÐ°_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€ÐºÐ°_ÑÐµÑ€ÐµÐ´Ð¸_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³Ð°_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ–_ÑÑƒÐ±Ð¾Ñ‚Ð¸'.split(
                    '_'
                ),
            },
            nounCase;

        if (m === true) {
            return weekdays['nominative']
                .slice(1, 7)
                .concat(weekdays['nominative'].slice(0, 1));
        }
        if (!m) {
            return weekdays['nominative'];
        }

        nounCase = /(\[[Ð’Ð²Ð£Ñƒ]\]) ?dddd/.test(format)
            ? 'accusative'
            : /\[?(?:Ð¼Ð¸Ð½ÑƒÐ»Ð¾Ñ—|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½Ð¾Ñ—)? ?\] ?dddd/.test(format)
            ? 'genitive'
            : 'nominative';
        return weekdays[nounCase][m.day()];
    }
    function processHoursFunction(str) {
        return function () {
            return str + 'Ð¾' + (this.hours() === 11 ? 'Ð±' : '') + '] LT';
        };
    }

    var uk = moment.defineLocale('uk', {
        months: {
            format: 'ÑÑ–Ñ‡Ð½Ñ_Ð»ÑŽÑ‚Ð¾Ð³Ð¾_Ð±ÐµÑ€ÐµÐ·Ð½Ñ_ÐºÐ²Ñ–Ñ‚Ð½Ñ_Ñ‚Ñ€Ð°Ð²Ð½Ñ_Ñ‡ÐµÑ€Ð²Ð½Ñ_Ð»Ð¸Ð¿Ð½Ñ_ÑÐµÑ€Ð¿Ð½Ñ_Ð²ÐµÑ€ÐµÑÐ½Ñ_Ð¶Ð¾Ð²Ñ‚Ð½Ñ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´Ð°_Ð³Ñ€ÑƒÐ´Ð½Ñ'.split(
                '_'
            ),
            standalone: 'ÑÑ–Ñ‡ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ð¸Ð¹_Ð±ÐµÑ€ÐµÐ·ÐµÐ½ÑŒ_ÐºÐ²Ñ–Ñ‚ÐµÐ½ÑŒ_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÐµÑ€Ð²ÐµÐ½ÑŒ_Ð»Ð¸Ð¿ÐµÐ½ÑŒ_ÑÐµÑ€Ð¿ÐµÐ½ÑŒ_Ð²ÐµÑ€ÐµÑÐµÐ½ÑŒ_Ð¶Ð¾Ð²Ñ‚ÐµÐ½ÑŒ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´_Ð³Ñ€ÑƒÐ´ÐµÐ½ÑŒ'.split(
                '_'
            ),
        },
        monthsShort: 'ÑÑ–Ñ‡_Ð»ÑŽÑ‚_Ð±ÐµÑ€_ÐºÐ²Ñ–Ñ‚_Ñ‚Ñ€Ð°Ð²_Ñ‡ÐµÑ€Ð²_Ð»Ð¸Ð¿_ÑÐµÑ€Ð¿_Ð²ÐµÑ€_Ð¶Ð¾Ð²Ñ‚_Ð»Ð¸ÑÑ‚_Ð³Ñ€ÑƒÐ´'.split(
            '_'
        ),
        weekdays: weekdaysCaseReplace,
        weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Ñ€.',
            LLL: 'D MMMM YYYY Ñ€., HH:mm',
            LLLL: 'dddd, D MMMM YYYY Ñ€., HH:mm',
        },
        calendar: {
            sameDay: processHoursFunction('[Ð¡ÑŒÐ¾Ð³Ð¾Ð´Ð½Ñ– '),
            nextDay: processHoursFunction('[Ð—Ð°Ð²Ñ‚Ñ€Ð° '),
            lastDay: processHoursFunction('[Ð’Ñ‡Ð¾Ñ€Ð° '),
            nextWeek: processHoursFunction('[Ð£] dddd ['),
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 5:
                    case 6:
                        return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ñ—] dddd [').call(this);
                    case 1:
                    case 2:
                    case 4:
                        return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ð³Ð¾] dddd [').call(this);
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð·Ð° %s',
            past: '%s Ñ‚Ð¾Ð¼Ñƒ',
            s: 'Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° ÑÐµÐºÑƒÐ½Ð´',
            ss: relativeTimeWithPlural,
            m: relativeTimeWithPlural,
            mm: relativeTimeWithPlural,
            h: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
            hh: relativeTimeWithPlural,
            d: 'Ð´ÐµÐ½ÑŒ',
            dd: relativeTimeWithPlural,
            M: 'Ð¼Ñ–ÑÑÑ†ÑŒ',
            MM: relativeTimeWithPlural,
            y: 'Ñ€Ñ–Ðº',
            yy: relativeTimeWithPlural,
        },
        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
        meridiemParse: /Ð½Ð¾Ñ‡Ñ–|Ñ€Ð°Ð½ÐºÑƒ|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°/,
        isPM: function (input) {
            return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'Ð½Ð¾Ñ‡Ñ–';
            } else if (hour < 12) {
                return 'Ñ€Ð°Ð½ÐºÑƒ';
            } else if (hour < 17) {
                return 'Ð´Ð½Ñ';
            } else {
                return 'Ð²ÐµÑ‡Ð¾Ñ€Ð°';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'M':
                case 'd':
                case 'DDD':
                case 'w':
                case 'W':
                    return number + '-Ð¹';
                case 'D':
                    return number + '-Ð³Ð¾';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return uk;

})));
//! moment.js locale configuration
//! locale : Urdu [ur]
//! author : Sawood Alam : https://github.com/ibnesayeed
//! author : Zack : https://github.com/ZackVision

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var months = [
            'Ø¬Ù†ÙˆØ±ÛŒ',
            'ÙØ±ÙˆØ±ÛŒ',
            'Ù…Ø§Ø±Ú†',
            'Ø§Ù¾Ø±ÛŒÙ„',
            'Ù…Ø¦ÛŒ',
            'Ø¬ÙˆÙ†',
            'Ø¬ÙˆÙ„Ø§Ø¦ÛŒ',
            'Ø§Ú¯Ø³Øª',
            'Ø³ØªÙ…Ø¨Ø±',
            'Ø§Ú©ØªÙˆØ¨Ø±',
            'Ù†ÙˆÙ…Ø¨Ø±',
            'Ø¯Ø³Ù…Ø¨Ø±',
        ],
        days = ['Ø§ØªÙˆØ§Ø±', 'Ù¾ÛŒØ±', 'Ù…Ù†Ú¯Ù„', 'Ø¨Ø¯Ú¾', 'Ø¬Ù…Ø¹Ø±Ø§Øª', 'Ø¬Ù…Ø¹Û', 'ÛÙØªÛ'];

    var ur = moment.defineLocale('ur', {
        months: months,
        monthsShort: months,
        weekdays: days,
        weekdaysShort: days,
        weekdaysMin: days,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
        },
        meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
        isPM: function (input) {
            return 'Ø´Ø§Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'ØµØ¨Ø­';
            }
            return 'Ø´Ø§Ù…';
        },
        calendar: {
            sameDay: '[Ø¢Ø¬ Ø¨ÙˆÙ‚Øª] LT',
            nextDay: '[Ú©Ù„ Ø¨ÙˆÙ‚Øª] LT',
            nextWeek: 'dddd [Ø¨ÙˆÙ‚Øª] LT',
            lastDay: '[Ú¯Ø°Ø´ØªÛ Ø±ÙˆØ² Ø¨ÙˆÙ‚Øª] LT',
            lastWeek: '[Ú¯Ø°Ø´ØªÛ] dddd [Ø¨ÙˆÙ‚Øª] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ø¨Ø¹Ø¯',
            past: '%s Ù‚Ø¨Ù„',
            s: 'Ú†Ù†Ø¯ Ø³ÛŒÚ©Ù†Úˆ',
            ss: '%d Ø³ÛŒÚ©Ù†Úˆ',
            m: 'Ø§ÛŒÚ© Ù…Ù†Ù¹',
            mm: '%d Ù…Ù†Ù¹',
            h: 'Ø§ÛŒÚ© Ú¯Ú¾Ù†Ù¹Û',
            hh: '%d Ú¯Ú¾Ù†Ù¹Û’',
            d: 'Ø§ÛŒÚ© Ø¯Ù†',
            dd: '%d Ø¯Ù†',
            M: 'Ø§ÛŒÚ© Ù…Ø§Û',
            MM: '%d Ù…Ø§Û',
            y: 'Ø§ÛŒÚ© Ø³Ø§Ù„',
            yy: '%d Ø³Ø§Ù„',
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return ur;

})));
//! moment.js locale configuration
//! locale : Uzbek Latin [uz-latn]
//! author : Rasulbek Mirzayev : github.com/Rasulbeeek

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var uzLatn = moment.defineLocale('uz-latn', {
        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
            '_'
        ),
        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
        weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
            '_'
        ),
        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'D MMMM YYYY, dddd HH:mm',
        },
        calendar: {
            sameDay: '[Bugun soat] LT [da]',
            nextDay: '[Ertaga] LT [da]',
            nextWeek: 'dddd [kuni soat] LT [da]',
            lastDay: '[Kecha soat] LT [da]',
            lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Yaqin %s ichida',
            past: 'Bir necha %s oldin',
            s: 'soniya',
            ss: '%d soniya',
            m: 'bir daqiqa',
            mm: '%d daqiqa',
            h: 'bir soat',
            hh: '%d soat',
            d: 'bir kun',
            dd: '%d kun',
            M: 'bir oy',
            MM: '%d oy',
            y: 'bir yil',
            yy: '%d yil',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    return uzLatn;

})));
//! moment.js locale configuration
//! locale : Uzbek [uz]
//! author : Sardor Muminov : https://github.com/muminoff

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var uz = moment.defineLocale('uz', {
        months: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
            '_'
        ),
        monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
        weekdays: 'Ð¯ÐºÑˆÐ°Ð½Ð±Ð°_Ð”ÑƒÑˆÐ°Ð½Ð±Ð°_Ð¡ÐµÑˆÐ°Ð½Ð±Ð°_Ð§Ð¾Ñ€ÑˆÐ°Ð½Ð±Ð°_ÐŸÐ°Ð¹ÑˆÐ°Ð½Ð±Ð°_Ð–ÑƒÐ¼Ð°_Ð¨Ð°Ð½Ð±Ð°'.split('_'),
        weekdaysShort: 'Ð¯ÐºÑˆ_Ð”ÑƒÑˆ_Ð¡ÐµÑˆ_Ð§Ð¾Ñ€_ÐŸÐ°Ð¹_Ð–ÑƒÐ¼_Ð¨Ð°Ð½'.split('_'),
        weekdaysMin: 'Ð¯Ðº_Ð”Ñƒ_Ð¡Ðµ_Ð§Ð¾_ÐŸÐ°_Ð–Ñƒ_Ð¨Ð°'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'D MMMM YYYY, dddd HH:mm',
        },
        calendar: {
            sameDay: '[Ð‘ÑƒÐ³ÑƒÐ½ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            nextDay: '[Ð­Ñ€Ñ‚Ð°Ð³Ð°] LT [Ð´Ð°]',
            nextWeek: 'dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            lastDay: '[ÐšÐµÑ‡Ð° ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            lastWeek: '[Ð£Ñ‚Ð³Ð°Ð½] dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð¯ÐºÐ¸Ð½ %s Ð¸Ñ‡Ð¸Ð´Ð°',
            past: 'Ð‘Ð¸Ñ€ Ð½ÐµÑ‡Ð° %s Ð¾Ð»Ð´Ð¸Ð½',
            s: 'Ñ„ÑƒÑ€ÑÐ°Ñ‚',
            ss: '%d Ñ„ÑƒÑ€ÑÐ°Ñ‚',
            m: 'Ð±Ð¸Ñ€ Ð´Ð°ÐºÐ¸ÐºÐ°',
            mm: '%d Ð´Ð°ÐºÐ¸ÐºÐ°',
            h: 'Ð±Ð¸Ñ€ ÑÐ¾Ð°Ñ‚',
            hh: '%d ÑÐ¾Ð°Ñ‚',
            d: 'Ð±Ð¸Ñ€ ÐºÑƒÐ½',
            dd: '%d ÐºÑƒÐ½',
            M: 'Ð±Ð¸Ñ€ Ð¾Ð¹',
            MM: '%d Ð¾Ð¹',
            y: 'Ð±Ð¸Ñ€ Ð¹Ð¸Ð»',
            yy: '%d Ð¹Ð¸Ð»',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return uz;

})));
//! moment.js locale configuration
//! locale : Vietnamese [vi]
//! author : Bang Nguyen : https://github.com/bangnk
//! author : Chien Kira : https://github.com/chienkira

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var vi = moment.defineLocale('vi', {
        months: 'thÃ¡ng 1_thÃ¡ng 2_thÃ¡ng 3_thÃ¡ng 4_thÃ¡ng 5_thÃ¡ng 6_thÃ¡ng 7_thÃ¡ng 8_thÃ¡ng 9_thÃ¡ng 10_thÃ¡ng 11_thÃ¡ng 12'.split(
            '_'
        ),
        monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'chá»§ nháº­t_thá»© hai_thá»© ba_thá»© tÆ°_thá»© nÄƒm_thá»© sÃ¡u_thá»© báº£y'.split(
            '_'
        ),
        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
        weekdaysParseExact: true,
        meridiemParse: /sa|ch/i,
        isPM: function (input) {
            return /^ch$/i.test(input);
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower ? 'sa' : 'SA';
            } else {
                return isLower ? 'ch' : 'CH';
            }
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [nÄƒm] YYYY',
            LLL: 'D MMMM [nÄƒm] YYYY HH:mm',
            LLLL: 'dddd, D MMMM [nÄƒm] YYYY HH:mm',
            l: 'DD/M/YYYY',
            ll: 'D MMM YYYY',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd, D MMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[HÃ´m nay lÃºc] LT',
            nextDay: '[NgÃ y mai lÃºc] LT',
            nextWeek: 'dddd [tuáº§n tá»›i lÃºc] LT',
            lastDay: '[HÃ´m qua lÃºc] LT',
            lastWeek: 'dddd [tuáº§n trÆ°á»›c lÃºc] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s tá»›i',
            past: '%s trÆ°á»›c',
            s: 'vÃ i giÃ¢y',
            ss: '%d giÃ¢y',
            m: 'má»™t phÃºt',
            mm: '%d phÃºt',
            h: 'má»™t giá»',
            hh: '%d giá»',
            d: 'má»™t ngÃ y',
            dd: '%d ngÃ y',
            w: 'má»™t tuáº§n',
            ww: '%d tuáº§n',
            M: 'má»™t thÃ¡ng',
            MM: '%d thÃ¡ng',
            y: 'má»™t nÄƒm',
            yy: '%d nÄƒm',
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: function (number) {
            return number;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return vi;

})));
//! moment.js locale configuration
//! locale : Pseudo [x-pseudo]
//! author : Andrew Hood : https://github.com/andrewhood125

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var xPseudo = moment.defineLocale('x-pseudo', {
        months: 'J~Ã¡Ã±ÃºÃ¡~rÃ½_F~Ã©brÃº~Ã¡rÃ½_~MÃ¡rc~h_Ãp~rÃ­l_~MÃ¡Ã½_~JÃºÃ±Ã©~_JÃºl~Ã½_ÃÃº~gÃºst~_SÃ©p~tÃ©mb~Ã©r_Ã“~ctÃ³b~Ã©r_Ã‘~Ã³vÃ©m~bÃ©r_~DÃ©cÃ©~mbÃ©r'.split(
            '_'
        ),
        monthsShort: 'J~Ã¡Ã±_~FÃ©b_~MÃ¡r_~Ãpr_~MÃ¡Ã½_~JÃºÃ±_~JÃºl_~ÃÃºg_~SÃ©p_~Ã“ct_~Ã‘Ã³v_~DÃ©c'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'S~ÃºÃ±dÃ¡~Ã½_MÃ³~Ã±dÃ¡Ã½~_TÃºÃ©~sdÃ¡Ã½~_WÃ©d~Ã±Ã©sd~Ã¡Ã½_T~hÃºrs~dÃ¡Ã½_~FrÃ­d~Ã¡Ã½_S~Ã¡tÃºr~dÃ¡Ã½'.split(
            '_'
        ),
        weekdaysShort: 'S~ÃºÃ±_~MÃ³Ã±_~TÃºÃ©_~WÃ©d_~ThÃº_~FrÃ­_~SÃ¡t'.split('_'),
        weekdaysMin: 'S~Ãº_MÃ³~_TÃº_~WÃ©_T~h_Fr~_SÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[T~Ã³dÃ¡~Ã½ Ã¡t] LT',
            nextDay: '[T~Ã³mÃ³~rrÃ³~w Ã¡t] LT',
            nextWeek: 'dddd [Ã¡t] LT',
            lastDay: '[Ã~Ã©st~Ã©rdÃ¡~Ã½ Ã¡t] LT',
            lastWeek: '[L~Ã¡st] dddd [Ã¡t] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ã­~Ã± %s',
            past: '%s Ã¡~gÃ³',
            s: 'Ã¡ ~fÃ©w ~sÃ©cÃ³~Ã±ds',
            ss: '%d s~Ã©cÃ³Ã±~ds',
            m: 'Ã¡ ~mÃ­Ã±~ÃºtÃ©',
            mm: '%d m~Ã­Ã±Ãº~tÃ©s',
            h: 'Ã¡~Ã± hÃ³~Ãºr',
            hh: '%d h~Ã³Ãºrs',
            d: 'Ã¡ ~dÃ¡Ã½',
            dd: '%d d~Ã¡Ã½s',
            M: 'Ã¡ ~mÃ³Ã±~th',
            MM: '%d m~Ã³Ã±t~hs',
            y: 'Ã¡ ~Ã½Ã©Ã¡r',
            yy: '%d Ã½~Ã©Ã¡rs',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return xPseudo;

})));
//! moment.js locale configuration
//! locale : Yoruba Nigeria [yo]
//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var yo = moment.defineLocale('yo', {
        months: 'Sáº¹Ìráº¹Ì_EÌ€reÌ€leÌ€_áº¸ráº¹Ì€naÌ€_IÌ€gbeÌ_EÌ€bibi_OÌ€kuÌ€du_Agáº¹mo_OÌ€guÌn_Owewe_á»ŒÌ€waÌ€raÌ€_BeÌluÌ_á»ŒÌ€páº¹Ì€Ì€'.split(
            '_'
        ),
        monthsShort: 'Sáº¹Ìr_EÌ€rl_áº¸rn_IÌ€gb_EÌ€bi_OÌ€kuÌ€_Agáº¹_OÌ€guÌ_Owe_á»ŒÌ€waÌ€_BeÌl_á»ŒÌ€páº¹Ì€Ì€'.split('_'),
        weekdays: 'AÌ€iÌ€kuÌ_AjeÌ_IÌ€sáº¹Ìgun_á»Œjá»ÌruÌ_á»Œjá»Ìbá»_áº¸tiÌ€_AÌ€baÌmáº¹Ìta'.split('_'),
        weekdaysShort: 'AÌ€iÌ€k_AjeÌ_IÌ€sáº¹Ì_á»Œjr_á»Œjb_áº¸tiÌ€_AÌ€baÌ'.split('_'),
        weekdaysMin: 'AÌ€iÌ€_Aj_IÌ€s_á»Œr_á»Œb_áº¸t_AÌ€b'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[OÌ€niÌ€ ni] LT',
            nextDay: '[á»ŒÌ€la ni] LT',
            nextWeek: "dddd [á»Œsáº¹Ì€ toÌn'bá»] [ni] LT",
            lastDay: '[AÌ€na ni] LT',
            lastWeek: 'dddd [á»Œsáº¹Ì€ toÌlá»Ì] [ni] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'niÌ %s',
            past: '%s ká»jaÌ',
            s: 'iÌ€sáº¹juÌ aayaÌ die',
            ss: 'aayaÌ %d',
            m: 'iÌ€sáº¹juÌ kan',
            mm: 'iÌ€sáº¹juÌ %d',
            h: 'waÌkati kan',
            hh: 'waÌkati %d',
            d: 'á»já»Ì kan',
            dd: 'á»já»Ì %d',
            M: 'osuÌ€ kan',
            MM: 'osuÌ€ %d',
            y: 'á»duÌn kan',
            yy: 'á»duÌn %d',
        },
        dayOfMonthOrdinalParse: /á»já»Ì\s\d{1,2}/,
        ordinal: 'á»já»Ì %d',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return yo;

})));
//! moment.js locale configuration
//! locale : Chinese (China) [zh-cn]
//! author : suupic : https://github.com/suupic
//! author : Zeno Zeng : https://github.com/zenozeng
//! author : uu109 : https://github.com/uu109

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var zhCn = moment.defineLocale('zh-cn', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'å‘¨æ—¥_å‘¨ä¸€_å‘¨äºŒ_å‘¨ä¸‰_å‘¨å››_å‘¨äº”_å‘¨å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥Ahç‚¹mmåˆ†',
            LLLL: 'YYYYå¹´MæœˆDæ—¥ddddAhç‚¹mmåˆ†',
            l: 'YYYY/M/D',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            } else {
                // 'ä¸­åˆ'
                return hour >= 11 ? hour : hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1130) {
                return 'ä¸Šåˆ';
            } else if (hm < 1230) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©]LT',
            nextDay: '[æ˜Žå¤©]LT',
            nextWeek: function (now) {
                if (now.week() !== this.week()) {
                    return '[ä¸‹]dddLT';
                } else {
                    return '[æœ¬]dddLT';
                }
            },
            lastDay: '[æ˜¨å¤©]LT',
            lastWeek: function (now) {
                if (this.week() !== now.week()) {
                    return '[ä¸Š]dddLT';
                } else {
                    return '[æœ¬]dddLT';
                }
            },
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|å‘¨)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'å‘¨';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så‰',
            past: '%så‰',
            s: 'å‡ ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é’Ÿ',
            mm: '%d åˆ†é’Ÿ',
            h: '1 å°æ—¶',
            hh: '%d å°æ—¶',
            d: '1 å¤©',
            dd: '%d å¤©',
            w: '1 å‘¨',
            ww: '%d å‘¨',
            M: '1 ä¸ªæœˆ',
            MM: '%d ä¸ªæœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
        week: {
            // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    return zhCn;

})));
//! moment.js locale configuration
//! locale : Chinese (Hong Kong) [zh-hk]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
//! author : Konstantin : https://github.com/skfd
//! author : Anthony : https://github.com/anthonylau

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var zhHk = moment.defineLocale('zh-hk', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
            l: 'YYYY/M/D',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸­åˆ') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1200) {
                return 'ä¸Šåˆ';
            } else if (hm === 1200) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©]LT',
            nextDay: '[æ˜Žå¤©]LT',
            nextWeek: '[ä¸‹]ddddLT',
            lastDay: '[æ˜¨å¤©]LT',
            lastWeek: '[ä¸Š]ddddLT',
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'é€±';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så¾Œ',
            past: '%så‰',
            s: 'å¹¾ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é˜',
            mm: '%d åˆ†é˜',
            h: '1 å°æ™‚',
            hh: '%d å°æ™‚',
            d: '1 å¤©',
            dd: '%d å¤©',
            M: '1 å€‹æœˆ',
            MM: '%d å€‹æœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
    });

    return zhHk;

})));
//! moment.js locale configuration
//! locale : Chinese (Macau) [zh-mo]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
//! author : Tan Yuanhong : https://github.com/le0tan

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var zhMo = moment.defineLocale('zh-mo', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
            l: 'D/M/YYYY',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸­åˆ') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1130) {
                return 'ä¸Šåˆ';
            } else if (hm < 1230) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©] LT',
            nextDay: '[æ˜Žå¤©] LT',
            nextWeek: '[ä¸‹]dddd LT',
            lastDay: '[æ˜¨å¤©] LT',
            lastWeek: '[ä¸Š]dddd LT',
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'é€±';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så…§',
            past: '%så‰',
            s: 'å¹¾ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é˜',
            mm: '%d åˆ†é˜',
            h: '1 å°æ™‚',
            hh: '%d å°æ™‚',
            d: '1 å¤©',
            dd: '%d å¤©',
            M: '1 å€‹æœˆ',
            MM: '%d å€‹æœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
    });

    return zhMo;

})));
//! moment.js locale configuration
//! locale : Chinese (Taiwan) [zh-tw]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    var zhTw = moment.defineLocale('zh-tw', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
            l: 'YYYY/M/D',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸­åˆ') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1130) {
                return 'ä¸Šåˆ';
            } else if (hm < 1230) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©] LT',
            nextDay: '[æ˜Žå¤©] LT',
            nextWeek: '[ä¸‹]dddd LT',
            lastDay: '[æ˜¨å¤©] LT',
            lastWeek: '[ä¸Š]dddd LT',
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'é€±';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så¾Œ',
            past: '%så‰',
            s: 'å¹¾ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é˜',
            mm: '%d åˆ†é˜',
            h: '1 å°æ™‚',
            hh: '%d å°æ™‚',
            d: '1 å¤©',
            dd: '%d å¤©',
            M: '1 å€‹æœˆ',
            MM: '%d å€‹æœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
    });

    return zhTw;

})));
;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';

    //! moment.js locale configuration

    moment.defineLocale('af', {
        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
            '_'
        ),
        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
        meridiemParse: /vm|nm/i,
        isPM: function (input) {
            return /^nm$/i.test(input);
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower ? 'vm' : 'VM';
            } else {
                return isLower ? 'nm' : 'NM';
            }
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Vandag om] LT',
            nextDay: '[MÃ´re om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[Gister om] LT',
            lastWeek: '[Laas] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'oor %s',
            past: '%s gelede',
            s: "'n paar sekondes",
            ss: '%d sekondes',
            m: "'n minuut",
            mm: '%d minute',
            h: "'n uur",
            hh: '%d ure',
            d: "'n dag",
            dd: '%d dae',
            M: "'n maand",
            MM: '%d maande',
            y: "'n jaar",
            yy: '%d jaar',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            ); // Thanks to Joris RÃ¶ling : https://github.com/jjupiter
        },
        week: {
            dow: 1, // Maandag is die eerste dag van die week.
            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
        },
    });

    //! moment.js locale configuration

    var pluralForm = function (n) {
            return n === 0
                ? 0
                : n === 1
                ? 1
                : n === 2
                ? 2
                : n % 100 >= 3 && n % 100 <= 10
                ? 3
                : n % 100 >= 11
                ? 4
                : 5;
        },
        plurals = {
            s: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
                'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
                '%d Ø«ÙˆØ§Ù†',
                '%d Ø«Ø§Ù†ÙŠØ©',
                '%d Ø«Ø§Ù†ÙŠØ©',
            ],
            m: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
                'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
                '%d Ø¯Ù‚Ø§Ø¦Ù‚',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            ],
            h: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
                'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
                '%d Ø³Ø§Ø¹Ø§Øª',
                '%d Ø³Ø§Ø¹Ø©',
                '%d Ø³Ø§Ø¹Ø©',
            ],
            d: [
                'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
                'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
                ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
                '%d Ø£ÙŠØ§Ù…',
                '%d ÙŠÙˆÙ…Ù‹Ø§',
                '%d ÙŠÙˆÙ…',
            ],
            M: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
                'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
                ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
                '%d Ø£Ø´Ù‡Ø±',
                '%d Ø´Ù‡Ø±Ø§',
                '%d Ø´Ù‡Ø±',
            ],
            y: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
                'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
                ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
                '%d Ø£Ø¹ÙˆØ§Ù…',
                '%d Ø¹Ø§Ù…Ù‹Ø§',
                '%d Ø¹Ø§Ù…',
            ],
        },
        pluralize = function (u) {
            return function (number, withoutSuffix, string, isFuture) {
                var f = pluralForm(number),
                    str = plurals[u][pluralForm(number)];
                if (f === 2) {
                    str = str[withoutSuffix ? 0 : 1];
                }
                return str.replace(/%d/i, number);
            };
        },
        months = [
            'Ø¬Ø§Ù†ÙÙŠ',
            'ÙÙŠÙØ±ÙŠ',
            'Ù…Ø§Ø±Ø³',
            'Ø£ÙØ±ÙŠÙ„',
            'Ù…Ø§ÙŠ',
            'Ø¬ÙˆØ§Ù†',
            'Ø¬ÙˆÙŠÙ„ÙŠØ©',
            'Ø£ÙˆØª',
            'Ø³Ø¨ØªÙ…Ø¨Ø±',
            'Ø£ÙƒØªÙˆØ¨Ø±',
            'Ù†ÙˆÙÙ…Ø¨Ø±',
            'Ø¯ÙŠØ³Ù…Ø¨Ø±',
        ];

    moment.defineLocale('ar-dz', {
        months: months,
        monthsShort: months,
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/\u200FM/\u200FYYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¨Ø¹Ø¯ %s',
            past: 'Ù…Ù†Ø° %s',
            s: pluralize('s'),
            ss: pluralize('s'),
            m: pluralize('m'),
            mm: pluralize('m'),
            h: pluralize('h'),
            hh: pluralize('h'),
            d: pluralize('d'),
            dd: pluralize('d'),
            M: pluralize('M'),
            MM: pluralize('M'),
            y: pluralize('y'),
            yy: pluralize('y'),
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ar-kw', {
        months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥ØªÙ†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø§Ø­Ø¯_Ø§ØªÙ†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap = {
            1: '1',
            2: '2',
            3: '3',
            4: '4',
            5: '5',
            6: '6',
            7: '7',
            8: '8',
            9: '9',
            0: '0',
        },
        pluralForm$1 = function (n) {
            return n === 0
                ? 0
                : n === 1
                ? 1
                : n === 2
                ? 2
                : n % 100 >= 3 && n % 100 <= 10
                ? 3
                : n % 100 >= 11
                ? 4
                : 5;
        },
        plurals$1 = {
            s: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
                'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
                '%d Ø«ÙˆØ§Ù†',
                '%d Ø«Ø§Ù†ÙŠØ©',
                '%d Ø«Ø§Ù†ÙŠØ©',
            ],
            m: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
                'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
                '%d Ø¯Ù‚Ø§Ø¦Ù‚',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            ],
            h: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
                'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
                '%d Ø³Ø§Ø¹Ø§Øª',
                '%d Ø³Ø§Ø¹Ø©',
                '%d Ø³Ø§Ø¹Ø©',
            ],
            d: [
                'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
                'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
                ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
                '%d Ø£ÙŠØ§Ù…',
                '%d ÙŠÙˆÙ…Ù‹Ø§',
                '%d ÙŠÙˆÙ…',
            ],
            M: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
                'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
                ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
                '%d Ø£Ø´Ù‡Ø±',
                '%d Ø´Ù‡Ø±Ø§',
                '%d Ø´Ù‡Ø±',
            ],
            y: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
                'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
                ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
                '%d Ø£Ø¹ÙˆØ§Ù…',
                '%d Ø¹Ø§Ù…Ù‹Ø§',
                '%d Ø¹Ø§Ù…',
            ],
        },
        pluralize$1 = function (u) {
            return function (number, withoutSuffix, string, isFuture) {
                var f = pluralForm$1(number),
                    str = plurals$1[u][pluralForm$1(number)];
                if (f === 2) {
                    str = str[withoutSuffix ? 0 : 1];
                }
                return str.replace(/%d/i, number);
            };
        },
        months$1 = [
            'ÙŠÙ†Ø§ÙŠØ±',
            'ÙØ¨Ø±Ø§ÙŠØ±',
            'Ù…Ø§Ø±Ø³',
            'Ø£Ø¨Ø±ÙŠÙ„',
            'Ù…Ø§ÙŠÙˆ',
            'ÙŠÙˆÙ†ÙŠÙˆ',
            'ÙŠÙˆÙ„ÙŠÙˆ',
            'Ø£ØºØ³Ø·Ø³',
            'Ø³Ø¨ØªÙ…Ø¨Ø±',
            'Ø£ÙƒØªÙˆØ¨Ø±',
            'Ù†ÙˆÙÙ…Ø¨Ø±',
            'Ø¯ÙŠØ³Ù…Ø¨Ø±',
        ];

    moment.defineLocale('ar-ly', {
        months: months$1,
        monthsShort: months$1,
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/\u200FM/\u200FYYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¨Ø¹Ø¯ %s',
            past: 'Ù…Ù†Ø° %s',
            s: pluralize$1('s'),
            ss: pluralize$1('s'),
            m: pluralize$1('m'),
            mm: pluralize$1('m'),
            h: pluralize$1('h'),
            hh: pluralize$1('h'),
            d: pluralize$1('d'),
            dd: pluralize$1('d'),
            M: pluralize$1('M'),
            MM: pluralize$1('M'),
            y: pluralize$1('y'),
            yy: pluralize$1('y'),
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ar-ma', {
        months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø§Ø­Ø¯_Ø§Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$1 = {
            1: 'Ù¡',
            2: 'Ù¢',
            3: 'Ù£',
            4: 'Ù¤',
            5: 'Ù¥',
            6: 'Ù¦',
            7: 'Ù§',
            8: 'Ù¨',
            9: 'Ù©',
            0: 'Ù ',
        },
        numberMap = {
            'Ù¡': '1',
            'Ù¢': '2',
            'Ù£': '3',
            'Ù¤': '4',
            'Ù¥': '5',
            'Ù¦': '6',
            'Ù§': '7',
            'Ù¨': '8',
            'Ù©': '9',
            'Ù ': '0',
        };

    moment.defineLocale('ar-sa', {
        months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        preparse: function (string) {
            return string
                .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                    return numberMap[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap$1[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ar-tn', {
        months: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$2 = {
            1: 'Ù¡',
            2: 'Ù¢',
            3: 'Ù£',
            4: 'Ù¤',
            5: 'Ù¥',
            6: 'Ù¦',
            7: 'Ù§',
            8: 'Ù¨',
            9: 'Ù©',
            0: 'Ù ',
        },
        numberMap$1 = {
            'Ù¡': '1',
            'Ù¢': '2',
            'Ù£': '3',
            'Ù¤': '4',
            'Ù¥': '5',
            'Ù¦': '6',
            'Ù§': '7',
            'Ù¨': '8',
            'Ù©': '9',
            'Ù ': '0',
        },
        pluralForm$2 = function (n) {
            return n === 0
                ? 0
                : n === 1
                ? 1
                : n === 2
                ? 2
                : n % 100 >= 3 && n % 100 <= 10
                ? 3
                : n % 100 >= 11
                ? 4
                : 5;
        },
        plurals$2 = {
            s: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
                'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
                '%d Ø«ÙˆØ§Ù†',
                '%d Ø«Ø§Ù†ÙŠØ©',
                '%d Ø«Ø§Ù†ÙŠØ©',
            ],
            m: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
                'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
                '%d Ø¯Ù‚Ø§Ø¦Ù‚',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            ],
            h: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
                'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
                '%d Ø³Ø§Ø¹Ø§Øª',
                '%d Ø³Ø§Ø¹Ø©',
                '%d Ø³Ø§Ø¹Ø©',
            ],
            d: [
                'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
                'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
                ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
                '%d Ø£ÙŠØ§Ù…',
                '%d ÙŠÙˆÙ…Ù‹Ø§',
                '%d ÙŠÙˆÙ…',
            ],
            M: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
                'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
                ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
                '%d Ø£Ø´Ù‡Ø±',
                '%d Ø´Ù‡Ø±Ø§',
                '%d Ø´Ù‡Ø±',
            ],
            y: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
                'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
                ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
                '%d Ø£Ø¹ÙˆØ§Ù…',
                '%d Ø¹Ø§Ù…Ù‹Ø§',
                '%d Ø¹Ø§Ù…',
            ],
        },
        pluralize$2 = function (u) {
            return function (number, withoutSuffix, string, isFuture) {
                var f = pluralForm$2(number),
                    str = plurals$2[u][pluralForm$2(number)];
                if (f === 2) {
                    str = str[withoutSuffix ? 0 : 1];
                }
                return str.replace(/%d/i, number);
            };
        },
        months$2 = [
            'ÙŠÙ†Ø§ÙŠØ±',
            'ÙØ¨Ø±Ø§ÙŠØ±',
            'Ù…Ø§Ø±Ø³',
            'Ø£Ø¨Ø±ÙŠÙ„',
            'Ù…Ø§ÙŠÙˆ',
            'ÙŠÙˆÙ†ÙŠÙˆ',
            'ÙŠÙˆÙ„ÙŠÙˆ',
            'Ø£ØºØ³Ø·Ø³',
            'Ø³Ø¨ØªÙ…Ø¨Ø±',
            'Ø£ÙƒØªÙˆØ¨Ø±',
            'Ù†ÙˆÙÙ…Ø¨Ø±',
            'Ø¯ÙŠØ³Ù…Ø¨Ø±',
        ];

    moment.defineLocale('ar', {
        months: months$2,
        monthsShort: months$2,
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/\u200FM/\u200FYYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¨Ø¹Ø¯ %s',
            past: 'Ù…Ù†Ø° %s',
            s: pluralize$2('s'),
            ss: pluralize$2('s'),
            m: pluralize$2('m'),
            mm: pluralize$2('m'),
            h: pluralize$2('h'),
            hh: pluralize$2('h'),
            d: pluralize$2('d'),
            dd: pluralize$2('d'),
            M: pluralize$2('M'),
            MM: pluralize$2('M'),
            y: pluralize$2('y'),
            yy: pluralize$2('y'),
        },
        preparse: function (string) {
            return string
                .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                    return numberMap$1[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap$2[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var suffixes = {
        1: '-inci',
        5: '-inci',
        8: '-inci',
        70: '-inci',
        80: '-inci',
        2: '-nci',
        7: '-nci',
        20: '-nci',
        50: '-nci',
        3: '-Ã¼ncÃ¼',
        4: '-Ã¼ncÃ¼',
        100: '-Ã¼ncÃ¼',
        6: '-ncÄ±',
        9: '-uncu',
        10: '-uncu',
        30: '-uncu',
        60: '-Ä±ncÄ±',
        90: '-Ä±ncÄ±',
    };

    moment.defineLocale('az', {
        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
            '_'
        ),
        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
        weekdays: 'Bazar_Bazar ertÉ™si_Ã‡É™rÅŸÉ™nbÉ™ axÅŸamÄ±_Ã‡É™rÅŸÉ™nbÉ™_CÃ¼mÉ™ axÅŸamÄ±_CÃ¼mÉ™_ÅžÉ™nbÉ™'.split(
            '_'
        ),
        weekdaysShort: 'Baz_BzE_Ã‡Ax_Ã‡É™r_CAx_CÃ¼m_ÅžÉ™n'.split('_'),
        weekdaysMin: 'Bz_BE_Ã‡A_Ã‡É™_CA_CÃ¼_ÅžÉ™'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[bugÃ¼n saat] LT',
            nextDay: '[sabah saat] LT',
            nextWeek: '[gÉ™lÉ™n hÉ™ftÉ™] dddd [saat] LT',
            lastDay: '[dÃ¼nÉ™n] LT',
            lastWeek: '[keÃ§É™n hÉ™ftÉ™] dddd [saat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s sonra',
            past: '%s É™vvÉ™l',
            s: 'bir neÃ§É™ saniyÉ™',
            ss: '%d saniyÉ™',
            m: 'bir dÉ™qiqÉ™',
            mm: '%d dÉ™qiqÉ™',
            h: 'bir saat',
            hh: '%d saat',
            d: 'bir gÃ¼n',
            dd: '%d gÃ¼n',
            M: 'bir ay',
            MM: '%d ay',
            y: 'bir il',
            yy: '%d il',
        },
        meridiemParse: /gecÉ™|sÉ™hÉ™r|gÃ¼ndÃ¼z|axÅŸam/,
        isPM: function (input) {
            return /^(gÃ¼ndÃ¼z|axÅŸam)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'gecÉ™';
            } else if (hour < 12) {
                return 'sÉ™hÉ™r';
            } else if (hour < 17) {
                return 'gÃ¼ndÃ¼z';
            } else {
                return 'axÅŸam';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ä±ncÄ±|inci|nci|Ã¼ncÃ¼|ncÄ±|uncu)/,
        ordinal: function (number) {
            if (number === 0) {
                // special case for zero
                return number + '-Ä±ncÄ±';
            }
            var a = number % 10,
                b = (number % 100) - a,
                c = number >= 100 ? 100 : null;
            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function plural(word, num) {
        var forms = word.split('_');
        return num % 10 === 1 && num % 100 !== 11
            ? forms[0]
            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
            ? forms[1]
            : forms[2];
    }
    function relativeTimeWithPlural(number, withoutSuffix, key) {
        var format = {
            ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
            mm: withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½',
            hh: withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½',
            dd: 'Ð´Ð·ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð·Ñ‘Ð½',
            MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ñ‹_Ð¼ÐµÑÑÑ†Ð°Ñž',
            yy: 'Ð³Ð¾Ð´_Ð³Ð°Ð´Ñ‹_Ð³Ð°Ð´Ð¾Ñž',
        };
        if (key === 'm') {
            return withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ';
        } else if (key === 'h') {
            return withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ';
        } else {
            return number + ' ' + plural(format[key], +number);
        }
    }

    moment.defineLocale('be', {
        months: {
            format: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½Ñ_Ð»ÑŽÑ‚Ð°Ð³Ð°_ÑÐ°ÐºÐ°Ð²Ñ–ÐºÐ°_ÐºÑ€Ð°ÑÐ°Ð²Ñ–ÐºÐ°_Ñ‚Ñ€Ð°ÑžÐ½Ñ_Ñ‡ÑÑ€Ð²ÐµÐ½Ñ_Ð»Ñ–Ð¿ÐµÐ½Ñ_Ð¶Ð½Ñ–ÑžÐ½Ñ_Ð²ÐµÑ€Ð°ÑÐ½Ñ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–ÐºÐ°_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´Ð°_ÑÐ½ÐµÐ¶Ð½Ñ'.split(
                '_'
            ),
            standalone: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ñ‹_ÑÐ°ÐºÐ°Ð²Ñ–Ðº_ÐºÑ€Ð°ÑÐ°Ð²Ñ–Ðº_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÑÑ€Ð²ÐµÐ½ÑŒ_Ð»Ñ–Ð¿ÐµÐ½ÑŒ_Ð¶Ð½Ñ–Ð²ÐµÐ½ÑŒ_Ð²ÐµÑ€Ð°ÑÐµÐ½ÑŒ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–Ðº_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´_ÑÐ½ÐµÐ¶Ð°Ð½ÑŒ'.split(
                '_'
            ),
        },
        monthsShort: 'ÑÑ‚ÑƒÐ´_Ð»ÑŽÑ‚_ÑÐ°Ðº_ÐºÑ€Ð°Ñ_Ñ‚Ñ€Ð°Ð²_Ñ‡ÑÑ€Ð²_Ð»Ñ–Ð¿_Ð¶Ð½Ñ–Ð²_Ð²ÐµÑ€_ÐºÐ°ÑÑ‚_Ð»Ñ–ÑÑ‚_ÑÐ½ÐµÐ¶'.split(
            '_'
        ),
        weekdays: {
            format: 'Ð½ÑÐ´Ð·ÐµÐ»ÑŽ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ñƒ_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ñƒ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
                '_'
            ),
            standalone: 'Ð½ÑÐ´Ð·ÐµÐ»Ñ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ð°_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ð°_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
                '_'
            ),
            isFormat: /\[ ?[Ð£ÑƒÑž] ?(?:Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½ÑƒÑŽ)? ?\] ?dddd/,
        },
        weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
        weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Ð³.',
            LLL: 'D MMMM YYYY Ð³., HH:mm',
            LLLL: 'dddd, D MMMM YYYY Ð³., HH:mm',
        },
        calendar: {
            sameDay: '[Ð¡Ñ‘Ð½Ð½Ñ Ñž] LT',
            nextDay: '[Ð—Ð°ÑžÑ‚Ñ€Ð° Ñž] LT',
            lastDay: '[Ð£Ñ‡Ð¾Ñ€Ð° Ñž] LT',
            nextWeek: function () {
                return '[Ð£] dddd [Ñž] LT';
            },
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 5:
                    case 6:
                        return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ] dddd [Ñž] LT';
                    case 1:
                    case 2:
                    case 4:
                        return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»Ñ‹] dddd [Ñž] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð¿Ñ€Ð°Ð· %s',
            past: '%s Ñ‚Ð°Ð¼Ñƒ',
            s: 'Ð½ÐµÐºÐ°Ð»ÑŒÐºÑ– ÑÐµÐºÑƒÐ½Ð´',
            m: relativeTimeWithPlural,
            mm: relativeTimeWithPlural,
            h: relativeTimeWithPlural,
            hh: relativeTimeWithPlural,
            d: 'Ð´Ð·ÐµÐ½ÑŒ',
            dd: relativeTimeWithPlural,
            M: 'Ð¼ÐµÑÑÑ†',
            MM: relativeTimeWithPlural,
            y: 'Ð³Ð¾Ð´',
            yy: relativeTimeWithPlural,
        },
        meridiemParse: /Ð½Ð¾Ñ‡Ñ‹|Ñ€Ð°Ð½Ñ–Ñ†Ñ‹|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°/,
        isPM: function (input) {
            return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'Ð½Ð¾Ñ‡Ñ‹';
            } else if (hour < 12) {
                return 'Ñ€Ð°Ð½Ñ–Ñ†Ñ‹';
            } else if (hour < 17) {
                return 'Ð´Ð½Ñ';
            } else {
                return 'Ð²ÐµÑ‡Ð°Ñ€Ð°';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ñ–|Ñ‹|Ð³Ð°)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'M':
                case 'd':
                case 'DDD':
                case 'w':
                case 'W':
                    return (number % 10 === 2 || number % 10 === 3) &&
                        number % 100 !== 12 &&
                        number % 100 !== 13
                        ? number + '-Ñ–'
                        : number + '-Ñ‹';
                case 'D':
                    return number + '-Ð³Ð°';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('bg', {
        months: 'ÑÐ½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
            '_'
        ),
        monthsShort: 'ÑÐ½Ñƒ_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
        weekdays: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÑÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÑŠÑ€Ñ‚ÑŠÐº_Ð¿ÐµÑ‚ÑŠÐº_ÑÑŠÐ±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ñ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÑŠÐ±'.split('_'),
        weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[Ð”Ð½ÐµÑ Ð²] LT',
            nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²] LT',
            nextWeek: 'dddd [Ð²] LT',
            lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 6:
                        return '[ÐœÐ¸Ð½Ð°Ð»Ð°Ñ‚Ð°] dddd [Ð²] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[ÐœÐ¸Ð½Ð°Ð»Ð¸Ñ] dddd [Ð²] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÑÐ»ÐµÐ´ %s',
            past: 'Ð¿Ñ€ÐµÐ´Ð¸ %s',
            s: 'Ð½ÑÐºÐ¾Ð»ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
            m: 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
            h: 'Ñ‡Ð°Ñ',
            hh: '%d Ñ‡Ð°ÑÐ°',
            d: 'Ð´ÐµÐ½',
            dd: '%d Ð´ÐµÐ½Ð°',
            w: 'ÑÐµÐ´Ð¼Ð¸Ñ†Ð°',
            ww: '%d ÑÐµÐ´Ð¼Ð¸Ñ†Ð¸',
            M: 'Ð¼ÐµÑÐµÑ†',
            MM: '%d Ð¼ÐµÑÐµÑ†Ð°',
            y: 'Ð³Ð¾Ð´Ð¸Ð½Ð°',
            yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
        ordinal: function (number) {
            var lastDigit = number % 10,
                last2Digits = number % 100;
            if (number === 0) {
                return number + '-ÐµÐ²';
            } else if (last2Digits === 0) {
                return number + '-ÐµÐ½';
            } else if (last2Digits > 10 && last2Digits < 20) {
                return number + '-Ñ‚Ð¸';
            } else if (lastDigit === 1) {
                return number + '-Ð²Ð¸';
            } else if (lastDigit === 2) {
                return number + '-Ñ€Ð¸';
            } else if (lastDigit === 7 || lastDigit === 8) {
                return number + '-Ð¼Ð¸';
            } else {
                return number + '-Ñ‚Ð¸';
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('bm', {
        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_MÉ›kalo_ZuwÉ›nkalo_Zuluyekalo_Utikalo_SÉ›tanburukalo_É”kutÉ”burukalo_Nowanburukalo_Desanburukalo'.split(
            '_'
        ),
        monthsShort: 'Zan_Few_Mar_Awi_MÉ›_Zuw_Zul_Uti_SÉ›t_É”ku_Now_Des'.split('_'),
        weekdays: 'Kari_NtÉ›nÉ›n_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
        weekdaysShort: 'Kar_NtÉ›_Tar_Ara_Ala_Jum_Sib'.split('_'),
        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'MMMM [tile] D [san] YYYY',
            LLL: 'MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
            LLLL: 'dddd MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
        },
        calendar: {
            sameDay: '[Bi lÉ›rÉ›] LT',
            nextDay: '[Sini lÉ›rÉ›] LT',
            nextWeek: 'dddd [don lÉ›rÉ›] LT',
            lastDay: '[Kunu lÉ›rÉ›] LT',
            lastWeek: 'dddd [tÉ›mÉ›nen lÉ›rÉ›] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s kÉ”nÉ”',
            past: 'a bÉ› %s bÉ”',
            s: 'sanga dama dama',
            ss: 'sekondi %d',
            m: 'miniti kelen',
            mm: 'miniti %d',
            h: 'lÉ›rÉ› kelen',
            hh: 'lÉ›rÉ› %d',
            d: 'tile kelen',
            dd: 'tile %d',
            M: 'kalo kelen',
            MM: 'kalo %d',
            y: 'san kelen',
            yy: 'san %d',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$3 = {
            1: 'à§§',
            2: 'à§¨',
            3: 'à§©',
            4: 'à§ª',
            5: 'à§«',
            6: 'à§¬',
            7: 'à§­',
            8: 'à§®',
            9: 'à§¯',
            0: 'à§¦',
        },
        numberMap$2 = {
            'à§§': '1',
            'à§¨': '2',
            'à§©': '3',
            'à§ª': '4',
            'à§«': '5',
            'à§¬': '6',
            'à§­': '7',
            'à§®': '8',
            'à§¯': '9',
            'à§¦': '0',
        };

    moment.defineLocale('bn-bd', {
        months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
            '_'
        ),
        monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
            '_'
        ),
        weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
            '_'
        ),
        weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¦¸à¦®à§Ÿ',
            LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        },
        calendar: {
            sameDay: '[à¦†à¦œ] LT',
            nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
            lastWeek: '[à¦—à¦¤] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¦ªà¦°à§‡',
            past: '%s à¦†à¦—à§‡',
            s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
            hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
            d: 'à¦à¦• à¦¦à¦¿à¦¨',
            dd: '%d à¦¦à¦¿à¦¨',
            M: 'à¦à¦• à¦®à¦¾à¦¸',
            MM: '%d à¦®à¦¾à¦¸',
            y: 'à¦à¦• à¦¬à¦›à¦°',
            yy: '%d à¦¬à¦›à¦°',
        },
        preparse: function (string) {
            return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
                return numberMap$2[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$3[match];
            });
        },

        meridiemParse: /à¦°à¦¾à¦¤|à¦­à§‹à¦°|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦¸à¦¨à§à¦§à§à¦¯à¦¾|à¦°à¦¾à¦¤/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¦°à¦¾à¦¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¦­à§‹à¦°') {
                return hour;
            } else if (meridiem === 'à¦¸à¦•à¦¾à¦²') {
                return hour;
            } else if (meridiem === 'à¦¦à§à¦ªà§à¦°') {
                return hour >= 3 ? hour : hour + 12;
            } else if (meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²') {
                return hour + 12;
            } else if (meridiem === 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾') {
                return hour + 12;
            }
        },

        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¦°à¦¾à¦¤';
            } else if (hour < 6) {
                return 'à¦­à§‹à¦°';
            } else if (hour < 12) {
                return 'à¦¸à¦•à¦¾à¦²';
            } else if (hour < 15) {
                return 'à¦¦à§à¦ªà§à¦°';
            } else if (hour < 18) {
                return 'à¦¬à¦¿à¦•à¦¾à¦²';
            } else if (hour < 20) {
                return 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾';
            } else {
                return 'à¦°à¦¾à¦¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$4 = {
            1: 'à§§',
            2: 'à§¨',
            3: 'à§©',
            4: 'à§ª',
            5: 'à§«',
            6: 'à§¬',
            7: 'à§­',
            8: 'à§®',
            9: 'à§¯',
            0: 'à§¦',
        },
        numberMap$3 = {
            'à§§': '1',
            'à§¨': '2',
            'à§©': '3',
            'à§ª': '4',
            'à§«': '5',
            'à§¬': '6',
            'à§­': '7',
            'à§®': '8',
            'à§¯': '9',
            'à§¦': '0',
        };

    moment.defineLocale('bn', {
        months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
            '_'
        ),
        monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
            '_'
        ),
        weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
            '_'
        ),
        weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¦¸à¦®à§Ÿ',
            LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        },
        calendar: {
            sameDay: '[à¦†à¦œ] LT',
            nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
            lastWeek: '[à¦—à¦¤] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¦ªà¦°à§‡',
            past: '%s à¦†à¦—à§‡',
            s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
            hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
            d: 'à¦à¦• à¦¦à¦¿à¦¨',
            dd: '%d à¦¦à¦¿à¦¨',
            M: 'à¦à¦• à¦®à¦¾à¦¸',
            MM: '%d à¦®à¦¾à¦¸',
            y: 'à¦à¦• à¦¬à¦›à¦°',
            yy: '%d à¦¬à¦›à¦°',
        },
        preparse: function (string) {
            return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
                return numberMap$3[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$4[match];
            });
        },
        meridiemParse: /à¦°à¦¾à¦¤|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦°à¦¾à¦¤/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                (meridiem === 'à¦°à¦¾à¦¤' && hour >= 4) ||
                (meridiem === 'à¦¦à§à¦ªà§à¦°' && hour < 5) ||
                meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²'
            ) {
                return hour + 12;
            } else {
                return hour;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¦°à¦¾à¦¤';
            } else if (hour < 10) {
                return 'à¦¸à¦•à¦¾à¦²';
            } else if (hour < 17) {
                return 'à¦¦à§à¦ªà§à¦°';
            } else if (hour < 20) {
                return 'à¦¬à¦¿à¦•à¦¾à¦²';
            } else {
                return 'à¦°à¦¾à¦¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$5 = {
            1: 'à¼¡',
            2: 'à¼¢',
            3: 'à¼£',
            4: 'à¼¤',
            5: 'à¼¥',
            6: 'à¼¦',
            7: 'à¼§',
            8: 'à¼¨',
            9: 'à¼©',
            0: 'à¼ ',
        },
        numberMap$4 = {
            'à¼¡': '1',
            'à¼¢': '2',
            'à¼£': '3',
            'à¼¤': '4',
            'à¼¥': '5',
            'à¼¦': '6',
            'à¼§': '7',
            'à¼¨': '8',
            'à¼©': '9',
            'à¼ ': '0',
        };

    moment.defineLocale('bo', {
        months: 'à½Ÿà¾³à¼‹à½–à¼‹à½‘à½„à¼‹à½”à½¼_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½‰à½²à½¦à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½¦à½´à½˜à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½žà½²à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½£à¾”à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à¾²à½´à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½‘à½´à½“à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½¢à¾’à¾±à½‘à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à½‚à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½…à½²à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½‰à½²à½¦à¼‹à½”'.split(
            '_'
        ),
        monthsShort: 'à½Ÿà¾³à¼‹1_à½Ÿà¾³à¼‹2_à½Ÿà¾³à¼‹3_à½Ÿà¾³à¼‹4_à½Ÿà¾³à¼‹5_à½Ÿà¾³à¼‹6_à½Ÿà¾³à¼‹7_à½Ÿà¾³à¼‹8_à½Ÿà¾³à¼‹9_à½Ÿà¾³à¼‹10_à½Ÿà¾³à¼‹11_à½Ÿà¾³à¼‹12'.split(
            '_'
        ),
        monthsShortRegex: /^(à½Ÿà¾³à¼‹\d{1,2})/,
        monthsParseExact: true,
        weekdays: 'à½‚à½Ÿà½ à¼‹à½‰à½²à¼‹à½˜à¼‹_à½‚à½Ÿà½ à¼‹à½Ÿà¾³à¼‹à½–à¼‹_à½‚à½Ÿà½ à¼‹à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½‚à½Ÿà½ à¼‹à½£à¾·à½‚à¼‹à½”à¼‹_à½‚à½Ÿà½ à¼‹à½•à½´à½¢à¼‹à½–à½´_à½‚à½Ÿà½ à¼‹à½”à¼‹à½¦à½„à½¦à¼‹_à½‚à½Ÿà½ à¼‹à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
            '_'
        ),
        weekdaysShort: 'à½‰à½²à¼‹à½˜à¼‹_à½Ÿà¾³à¼‹à½–à¼‹_à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½£à¾·à½‚à¼‹à½”à¼‹_à½•à½´à½¢à¼‹à½–à½´_à½”à¼‹à½¦à½„à½¦à¼‹_à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
            '_'
        ),
        weekdaysMin: 'à½‰à½²_à½Ÿà¾³_à½˜à½²à½‚_à½£à¾·à½‚_à½•à½´à½¢_à½¦à½„à½¦_à½¦à¾¤à½ºà½“'.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm',
        },
        calendar: {
            sameDay: '[à½‘à½²à¼‹à½¢à½²à½„] LT',
            nextDay: '[à½¦à½„à¼‹à½‰à½²à½“] LT',
            nextWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½¢à¾—à½ºà½¦à¼‹à½˜], LT',
            lastDay: '[à½à¼‹à½¦à½„] LT',
            lastWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½˜à½à½ à¼‹à½˜] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à½£à¼‹',
            past: '%s à½¦à¾”à½“à¼‹à½£',
            s: 'à½£à½˜à¼‹à½¦à½„',
            ss: '%d à½¦à¾à½¢à¼‹à½†à¼',
            m: 'à½¦à¾à½¢à¼‹à½˜à¼‹à½‚à½…à½²à½‚',
            mm: '%d à½¦à¾à½¢à¼‹à½˜',
            h: 'à½†à½´à¼‹à½šà½¼à½‘à¼‹à½‚à½…à½²à½‚',
            hh: '%d à½†à½´à¼‹à½šà½¼à½‘',
            d: 'à½‰à½²à½“à¼‹à½‚à½…à½²à½‚',
            dd: '%d à½‰à½²à½“à¼‹',
            M: 'à½Ÿà¾³à¼‹à½–à¼‹à½‚à½…à½²à½‚',
            MM: '%d à½Ÿà¾³à¼‹à½–',
            y: 'à½£à½¼à¼‹à½‚à½…à½²à½‚',
            yy: '%d à½£à½¼',
        },
        preparse: function (string) {
            return string.replace(/[à¼¡à¼¢à¼£à¼¤à¼¥à¼¦à¼§à¼¨à¼©à¼ ]/g, function (match) {
                return numberMap$4[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$5[match];
            });
        },
        meridiemParse: /à½˜à½šà½“à¼‹à½˜à½¼|à½žà½¼à½‚à½¦à¼‹à½€à½¦|à½‰à½²à½“à¼‹à½‚à½´à½„|à½‘à½‚à½¼à½„à¼‹à½‘à½‚|à½˜à½šà½“à¼‹à½˜à½¼/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                (meridiem === 'à½˜à½šà½“à¼‹à½˜à½¼' && hour >= 4) ||
                (meridiem === 'à½‰à½²à½“à¼‹à½‚à½´à½„' && hour < 5) ||
                meridiem === 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚'
            ) {
                return hour + 12;
            } else {
                return hour;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à½˜à½šà½“à¼‹à½˜à½¼';
            } else if (hour < 10) {
                return 'à½žà½¼à½‚à½¦à¼‹à½€à½¦';
            } else if (hour < 17) {
                return 'à½‰à½²à½“à¼‹à½‚à½´à½„';
            } else if (hour < 20) {
                return 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚';
            } else {
                return 'à½˜à½šà½“à¼‹à½˜à½¼';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function relativeTimeWithMutation(number, withoutSuffix, key) {
        var format = {
            mm: 'munutenn',
            MM: 'miz',
            dd: 'devezh',
        };
        return number + ' ' + mutation(format[key], number);
    }
    function specialMutationForYears(number) {
        switch (lastNumber(number)) {
            case 1:
            case 3:
            case 4:
            case 5:
            case 9:
                return number + ' bloaz';
            default:
                return number + ' vloaz';
        }
    }
    function lastNumber(number) {
        if (number > 9) {
            return lastNumber(number % 10);
        }
        return number;
    }
    function mutation(text, number) {
        if (number === 2) {
            return softMutation(text);
        }
        return text;
    }
    function softMutation(text) {
        var mutationTable = {
            m: 'v',
            b: 'v',
            d: 'z',
        };
        if (mutationTable[text.charAt(0)] === undefined) {
            return text;
        }
        return mutationTable[text.charAt(0)] + text.substring(1);
    }

    var monthsParse = [
            /^gen/i,
            /^c[Ê¼\']hwe/i,
            /^meu/i,
            /^ebr/i,
            /^mae/i,
            /^(mez|eve)/i,
            /^gou/i,
            /^eos/i,
            /^gwe/i,
            /^her/i,
            /^du/i,
            /^ker/i,
        ],
        monthsRegex = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
        monthsStrictRegex = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
        monthsShortStrictRegex = /^(gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
        fullWeekdaysParse = [
            /^sul/i,
            /^lun/i,
            /^meurzh/i,
            /^merc[Ê¼\']her/i,
            /^yaou/i,
            /^gwener/i,
            /^sadorn/i,
        ],
        shortWeekdaysParse = [
            /^Sul/i,
            /^Lun/i,
            /^Meu/i,
            /^Mer/i,
            /^Yao/i,
            /^Gwe/i,
            /^Sad/i,
        ],
        minWeekdaysParse = [
            /^Su/i,
            /^Lu/i,
            /^Me([^r]|$)/i,
            /^Mer/i,
            /^Ya/i,
            /^Gw/i,
            /^Sa/i,
        ];

    moment.defineLocale('br', {
        months: 'Genver_CÊ¼hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
            '_'
        ),
        monthsShort: 'Gen_CÊ¼hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
        weekdays: 'Sul_Lun_Meurzh_MercÊ¼her_Yaou_Gwener_Sadorn'.split('_'),
        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
        weekdaysParse: minWeekdaysParse,
        fullWeekdaysParse: fullWeekdaysParse,
        shortWeekdaysParse: shortWeekdaysParse,
        minWeekdaysParse: minWeekdaysParse,

        monthsRegex: monthsRegex,
        monthsShortRegex: monthsRegex,
        monthsStrictRegex: monthsStrictRegex,
        monthsShortStrictRegex: monthsShortStrictRegex,
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,

        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [a viz] MMMM YYYY',
            LLL: 'D [a viz] MMMM YYYY HH:mm',
            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Hiziv da] LT',
            nextDay: '[WarcÊ¼hoazh da] LT',
            nextWeek: 'dddd [da] LT',
            lastDay: '[DecÊ¼h da] LT',
            lastWeek: 'dddd [paset da] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'a-benn %s',
            past: '%s Ê¼zo',
            s: 'un nebeud segondennoÃ¹',
            ss: '%d eilenn',
            m: 'ur vunutenn',
            mm: relativeTimeWithMutation,
            h: 'un eur',
            hh: '%d eur',
            d: 'un devezh',
            dd: relativeTimeWithMutation,
            M: 'ur miz',
            MM: relativeTimeWithMutation,
            y: 'ur bloaz',
            yy: specialMutationForYears,
        },
        dayOfMonthOrdinalParse: /\d{1,2}(aÃ±|vet)/,
        ordinal: function (number) {
            var output = number === 1 ? 'aÃ±' : 'vet';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
        isPM: function (token) {
            return token === 'g.m.';
        },
        meridiem: function (hour, minute, isLower) {
            return hour < 12 ? 'a.m.' : 'g.m.';
        },
    });

    //! moment.js locale configuration

    function translate(number, withoutSuffix, key) {
        var result = number + ' ';
        switch (key) {
            case 'ss':
                if (number === 1) {
                    result += 'sekunda';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sekunde';
                } else {
                    result += 'sekundi';
                }
                return result;
            case 'm':
                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
            case 'mm':
                if (number === 1) {
                    result += 'minuta';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'minute';
                } else {
                    result += 'minuta';
                }
                return result;
            case 'h':
                return withoutSuffix ? 'jedan sat' : 'jednog sata';
            case 'hh':
                if (number === 1) {
                    result += 'sat';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sata';
                } else {
                    result += 'sati';
                }
                return result;
            case 'dd':
                if (number === 1) {
                    result += 'dan';
                } else {
                    result += 'dana';
                }
                return result;
            case 'MM':
                if (number === 1) {
                    result += 'mjesec';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'mjeseca';
                } else {
                    result += 'mjeseci';
                }
                return result;
            case 'yy':
                if (number === 1) {
                    result += 'godina';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'godine';
                } else {
                    result += 'godina';
                }
                return result;
        }
    }

    moment.defineLocale('bs', {
        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedjelju] [u] LT';
                    case 3:
                        return '[u] [srijedu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄer u] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                        return '[proÅ¡lu] dddd [u] LT';
                    case 6:
                        return '[proÅ¡le] [subote] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[proÅ¡li] dddd [u] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'par sekundi',
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: 'dan',
            dd: translate,
            M: 'mjesec',
            MM: translate,
            y: 'godinu',
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ca', {
        months: {
            standalone: 'gener_febrer_marÃ§_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
                '_'
            ),
            format: "de gener_de febrer_de marÃ§_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
                '_'
            ),
            isFormat: /D[oD]?(\s)+MMMM/,
        },
        monthsShort: 'gen._febr._marÃ§_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
            '_'
        ),
        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [de] YYYY',
            ll: 'D MMM YYYY',
            LLL: 'D MMMM [de] YYYY [a les] H:mm',
            lll: 'D MMM YYYY, H:mm',
            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
            llll: 'ddd D MMM YYYY, H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            nextDay: function () {
                return '[demÃ  a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            lastDay: function () {
                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [passat a ' +
                    (this.hours() !== 1 ? 'les' : 'la') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: "d'aquÃ­ %s",
            past: 'fa %s',
            s: 'uns segons',
            ss: '%d segons',
            m: 'un minut',
            mm: '%d minuts',
            h: 'una hora',
            hh: '%d hores',
            d: 'un dia',
            dd: '%d dies',
            M: 'un mes',
            MM: '%d mesos',
            y: 'un any',
            yy: '%d anys',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
        ordinal: function (number, period) {
            var output =
                number === 1
                    ? 'r'
                    : number === 2
                    ? 'n'
                    : number === 3
                    ? 'r'
                    : number === 4
                    ? 't'
                    : 'Ã¨';
            if (period === 'w' || period === 'W') {
                output = 'a';
            }
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$3 = 'leden_Ãºnor_bÅ™ezen_duben_kvÄ›ten_Äerven_Äervenec_srpen_zÃ¡Å™Ã­_Å™Ã­jen_listopad_prosinec'.split(
            '_'
        ),
        monthsShort = 'led_Ãºno_bÅ™e_dub_kvÄ›_Ävn_Ävc_srp_zÃ¡Å™_Å™Ã­j_lis_pro'.split('_'),
        monthsParse$1 = [
            /^led/i,
            /^Ãºno/i,
            /^bÅ™e/i,
            /^dub/i,
            /^kvÄ›/i,
            /^(Ävn|Äerven$|Äervna)/i,
            /^(Ävc|Äervenec|Äervence)/i,
            /^srp/i,
            /^zÃ¡Å™/i,
            /^Å™Ã­j/i,
            /^lis/i,
            /^pro/i,
        ],
        // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
        // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
        monthsRegex$1 = /^(leden|Ãºnor|bÅ™ezen|duben|kvÄ›ten|Äervenec|Äervence|Äerven|Äervna|srpen|zÃ¡Å™Ã­|Å™Ã­jen|listopad|prosinec|led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i;

    function plural$1(n) {
        return n > 1 && n < 5 && ~~(n / 10) !== 1;
    }
    function translate$1(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's': // a few seconds / in a few seconds / a few seconds ago
                return withoutSuffix || isFuture ? 'pÃ¡r sekund' : 'pÃ¡r sekundami';
            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'sekundy' : 'sekund');
                } else {
                    return result + 'sekundami';
                }
            case 'm': // a minute / in a minute / a minute ago
                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'minuty' : 'minut');
                } else {
                    return result + 'minutami';
                }
            case 'h': // an hour / in an hour / an hour ago
                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
            case 'hh': // 9 hours / in 9 hours / 9 hours ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'hodiny' : 'hodin');
                } else {
                    return result + 'hodinami';
                }
            case 'd': // a day / in a day / a day ago
                return withoutSuffix || isFuture ? 'den' : 'dnem';
            case 'dd': // 9 days / in 9 days / 9 days ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'dny' : 'dnÃ­');
                } else {
                    return result + 'dny';
                }
            case 'M': // a month / in a month / a month ago
                return withoutSuffix || isFuture ? 'mÄ›sÃ­c' : 'mÄ›sÃ­cem';
            case 'MM': // 9 months / in 9 months / 9 months ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'mÄ›sÃ­ce' : 'mÄ›sÃ­cÅ¯');
                } else {
                    return result + 'mÄ›sÃ­ci';
                }
            case 'y': // a year / in a year / a year ago
                return withoutSuffix || isFuture ? 'rok' : 'rokem';
            case 'yy': // 9 years / in 9 years / 9 years ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'roky' : 'let');
                } else {
                    return result + 'lety';
                }
        }
    }

    moment.defineLocale('cs', {
        months: months$3,
        monthsShort: monthsShort,
        monthsRegex: monthsRegex$1,
        monthsShortRegex: monthsRegex$1,
        // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
        // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
        monthsStrictRegex: /^(leden|ledna|Ãºnora|Ãºnor|bÅ™ezen|bÅ™ezna|duben|dubna|kvÄ›ten|kvÄ›tna|Äervenec|Äervence|Äerven|Äervna|srpen|srpna|zÃ¡Å™Ã­|Å™Ã­jen|Å™Ã­jna|listopadu|listopad|prosinec|prosince)/i,
        monthsShortStrictRegex: /^(led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i,
        monthsParse: monthsParse$1,
        longMonthsParse: monthsParse$1,
        shortMonthsParse: monthsParse$1,
        weekdays: 'nedÄ›le_pondÄ›lÃ­_ÃºterÃ½_stÅ™eda_Ätvrtek_pÃ¡tek_sobota'.split('_'),
        weekdaysShort: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
        weekdaysMin: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd D. MMMM YYYY H:mm',
            l: 'D. M. YYYY',
        },
        calendar: {
            sameDay: '[dnes v] LT',
            nextDay: '[zÃ­tra v] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[v nedÄ›li v] LT';
                    case 1:
                    case 2:
                        return '[v] dddd [v] LT';
                    case 3:
                        return '[ve stÅ™edu v] LT';
                    case 4:
                        return '[ve Ätvrtek v] LT';
                    case 5:
                        return '[v pÃ¡tek v] LT';
                    case 6:
                        return '[v sobotu v] LT';
                }
            },
            lastDay: '[vÄera v] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[minulou nedÄ›li v] LT';
                    case 1:
                    case 2:
                        return '[minulÃ©] dddd [v] LT';
                    case 3:
                        return '[minulou stÅ™edu v] LT';
                    case 4:
                    case 5:
                        return '[minulÃ½] dddd [v] LT';
                    case 6:
                        return '[minulou sobotu v] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'pÅ™ed %s',
            s: translate$1,
            ss: translate$1,
            m: translate$1,
            mm: translate$1,
            h: translate$1,
            hh: translate$1,
            d: translate$1,
            dd: translate$1,
            M: translate$1,
            MM: translate$1,
            y: translate$1,
            yy: translate$1,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('cv', {
        months: 'ÐºÓ‘Ñ€Ð»Ð°Ñ‡_Ð½Ð°Ñ€Ó‘Ñ_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€Ñ‚Ð¼Ðµ_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€Ð»Ð°_Ð°Ð²Ó‘Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°ÑˆÑ‚Ð°Ð²'.split(
            '_'
        ),
        monthsShort: 'ÐºÓ‘Ñ€_Ð½Ð°Ñ€_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€_Ð°Ð²Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°Ñˆ'.split('_'),
        weekdays: 'Ð²Ñ‹Ñ€ÑÐ°Ñ€Ð½Ð¸ÐºÑƒÐ½_Ñ‚ÑƒÐ½Ñ‚Ð¸ÐºÑƒÐ½_Ñ‹Ñ‚Ð»Ð°Ñ€Ð¸ÐºÑƒÐ½_ÑŽÐ½ÐºÑƒÐ½_ÐºÓ—Ò«Ð½ÐµÑ€Ð½Ð¸ÐºÑƒÐ½_ÑÑ€Ð½ÐµÐºÑƒÐ½_ÑˆÓ‘Ð¼Ð°Ñ‚ÐºÑƒÐ½'.split(
            '_'
        ),
        weekdaysShort: 'Ð²Ñ‹Ñ€_Ñ‚ÑƒÐ½_Ñ‹Ñ‚Ð»_ÑŽÐ½_ÐºÓ—Ò«_ÑÑ€Ð½_ÑˆÓ‘Ð¼'.split('_'),
        weekdaysMin: 'Ð²Ñ€_Ñ‚Ð½_Ñ‹Ñ‚_ÑŽÐ½_ÐºÒ«_ÑÑ€_ÑˆÐ¼'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—]',
            LLL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
            LLLL: 'dddd, YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
        },
        calendar: {
            sameDay: '[ÐŸÐ°ÑÐ½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            nextDay: '[Ð«Ñ€Ð°Ð½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            lastDay: '[Ó–Ð½ÐµÑ€] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            nextWeek: '[ÒªÐ¸Ñ‚ÐµÑ] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            lastWeek: '[Ð˜Ñ€Ñ‚Ð½Ó—] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            sameElse: 'L',
        },
        relativeTime: {
            future: function (output) {
                var affix = /ÑÐµÑ…ÐµÑ‚$/i.exec(output)
                    ? 'Ñ€ÐµÐ½'
                    : /Ò«ÑƒÐ»$/i.exec(output)
                    ? 'Ñ‚Ð°Ð½'
                    : 'Ñ€Ð°Ð½';
                return output + affix;
            },
            past: '%s ÐºÐ°ÑÐ»Ð»Ð°',
            s: 'Ð¿Ó—Ñ€-Ð¸Ðº Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
            ss: '%d Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
            m: 'Ð¿Ó—Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
            h: 'Ð¿Ó—Ñ€ ÑÐµÑ…ÐµÑ‚',
            hh: '%d ÑÐµÑ…ÐµÑ‚',
            d: 'Ð¿Ó—Ñ€ ÐºÑƒÐ½',
            dd: '%d ÐºÑƒÐ½',
            M: 'Ð¿Ó—Ñ€ ÑƒÐ¹Ó‘Ñ…',
            MM: '%d ÑƒÐ¹Ó‘Ñ…',
            y: 'Ð¿Ó—Ñ€ Ò«ÑƒÐ»',
            yy: '%d Ò«ÑƒÐ»',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-Ð¼Ó—Ñˆ/,
        ordinal: '%d-Ð¼Ó—Ñˆ',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('cy', {
        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
            '_'
        ),
        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
            '_'
        ),
        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
            '_'
        ),
        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
        weekdaysParseExact: true,
        // time formats are the same as en-gb
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Heddiw am] LT',
            nextDay: '[Yfory am] LT',
            nextWeek: 'dddd [am] LT',
            lastDay: '[Ddoe am] LT',
            lastWeek: 'dddd [diwethaf am] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'mewn %s',
            past: '%s yn Ã´l',
            s: 'ychydig eiliadau',
            ss: '%d eiliad',
            m: 'munud',
            mm: '%d munud',
            h: 'awr',
            hh: '%d awr',
            d: 'diwrnod',
            dd: '%d diwrnod',
            M: 'mis',
            MM: '%d mis',
            y: 'blwyddyn',
            yy: '%d flynedd',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
        ordinal: function (number) {
            var b = number,
                output = '',
                lookup = [
                    '',
                    'af',
                    'il',
                    'ydd',
                    'ydd',
                    'ed',
                    'ed',
                    'ed',
                    'fed',
                    'fed',
                    'fed', // 1af to 10fed
                    'eg',
                    'fed',
                    'eg',
                    'eg',
                    'fed',
                    'eg',
                    'eg',
                    'fed',
                    'eg',
                    'fed', // 11eg to 20fed
                ];
            if (b > 20) {
                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
                    output = 'fed'; // not 30ain, 70ain or 90ain
                } else {
                    output = 'ain';
                }
            } else if (b > 0) {
                output = lookup[b];
            }
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('da', {
        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
        weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
        weekdaysShort: 'sÃ¸n_man_tir_ons_tor_fre_lÃ¸r'.split('_'),
        weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
        },
        calendar: {
            sameDay: '[i dag kl.] LT',
            nextDay: '[i morgen kl.] LT',
            nextWeek: 'pÃ¥ dddd [kl.] LT',
            lastDay: '[i gÃ¥r kl.] LT',
            lastWeek: '[i] dddd[s kl.] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: '%s siden',
            s: 'fÃ¥ sekunder',
            ss: '%d sekunder',
            m: 'et minut',
            mm: '%d minutter',
            h: 'en time',
            hh: '%d timer',
            d: 'en dag',
            dd: '%d dage',
            M: 'en mÃ¥ned',
            MM: '%d mÃ¥neder',
            y: 'et Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }

    moment.defineLocale('de-at', {
        months: 'JÃ¤nner_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'JÃ¤n._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
            '_'
        ),
        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]',
        },
        relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime,
            mm: '%d Minuten',
            h: processRelativeTime,
            hh: '%d Stunden',
            d: processRelativeTime,
            dd: processRelativeTime,
            w: processRelativeTime,
            ww: '%d Wochen',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$1(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }

    moment.defineLocale('de-ch', {
        months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
            '_'
        ),
        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]',
        },
        relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime$1,
            mm: '%d Minuten',
            h: processRelativeTime$1,
            hh: '%d Stunden',
            d: processRelativeTime$1,
            dd: processRelativeTime$1,
            w: processRelativeTime$1,
            ww: '%d Wochen',
            M: processRelativeTime$1,
            MM: processRelativeTime$1,
            y: processRelativeTime$1,
            yy: processRelativeTime$1,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$2(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }

    moment.defineLocale('de', {
        months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
            '_'
        ),
        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]',
        },
        relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime$2,
            mm: '%d Minuten',
            h: processRelativeTime$2,
            hh: '%d Stunden',
            d: processRelativeTime$2,
            dd: processRelativeTime$2,
            w: processRelativeTime$2,
            ww: '%d Wochen',
            M: processRelativeTime$2,
            MM: processRelativeTime$2,
            y: processRelativeTime$2,
            yy: processRelativeTime$2,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$4 = [
            'Þ–Þ¬Þ‚ÞªÞ‡Þ¦ÞƒÞ©',
            'ÞŠÞ¬Þ„Þ°ÞƒÞªÞ‡Þ¦ÞƒÞ©',
            'Þ‰Þ§ÞƒÞ¨Þ—Þª',
            'Þ‡Þ­Þ•Þ°ÞƒÞ©ÞÞª',
            'Þ‰Þ­',
            'Þ–Þ«Þ‚Þ°',
            'Þ–ÞªÞÞ¦Þ‡Þ¨',
            'Þ‡Þ¯ÞŽÞ¦ÞÞ°Þ“Þª',
            'ÞÞ¬Þ•Þ°Þ“Þ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
            'Þ‡Þ®Þ†Þ°Þ“Þ¯Þ„Þ¦ÞƒÞª',
            'Þ‚Þ®ÞˆÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
            'Þ‘Þ¨ÞÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
        ],
        weekdays = [
            'Þ‡Þ§Þ‹Þ¨Þ‡Þ°ÞŒÞ¦',
            'Þ€Þ¯Þ‰Þ¦',
            'Þ‡Þ¦Þ‚Þ°ÞŽÞ§ÞƒÞ¦',
            'Þ„ÞªÞ‹Þ¦',
            'Þ„ÞªÞƒÞ§ÞÞ°ÞŠÞ¦ÞŒÞ¨',
            'Þ€ÞªÞ†ÞªÞƒÞª',
            'Þ€Þ®Þ‚Þ¨Þ€Þ¨ÞƒÞª',
        ];

    moment.defineLocale('dv', {
        months: months$4,
        monthsShort: months$4,
        weekdays: weekdays,
        weekdaysShort: weekdays,
        weekdaysMin: 'Þ‡Þ§Þ‹Þ¨_Þ€Þ¯Þ‰Þ¦_Þ‡Þ¦Þ‚Þ°_Þ„ÞªÞ‹Þ¦_Þ„ÞªÞƒÞ§_Þ€ÞªÞ†Þª_Þ€Þ®Þ‚Þ¨'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/M/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Þ‰Þ†|Þ‰ÞŠ/,
        isPM: function (input) {
            return 'Þ‰ÞŠ' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Þ‰Þ†';
            } else {
                return 'Þ‰ÞŠ';
            }
        },
        calendar: {
            sameDay: '[Þ‰Þ¨Þ‡Þ¦Þ‹Þª] LT',
            nextDay: '[Þ‰Þ§Þ‹Þ¦Þ‰Þ§] LT',
            nextWeek: 'dddd LT',
            lastDay: '[Þ‡Þ¨Þ‡Þ°Þ”Þ¬] LT',
            lastWeek: '[ÞŠÞ§Þ‡Þ¨ÞŒÞªÞˆÞ¨] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÞŒÞ¬ÞƒÞ­ÞŽÞ¦Þ‡Þ¨ %s',
            past: 'Þ†ÞªÞƒÞ¨Þ‚Þ° %s',
            s: 'ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞªÞ†Þ®Þ…Þ¬Þ‡Þ°',
            ss: 'd% ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞª',
            m: 'Þ‰Þ¨Þ‚Þ¨Þ“Þ¬Þ‡Þ°',
            mm: 'Þ‰Þ¨Þ‚Þ¨Þ“Þª %d',
            h: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞ¬Þ‡Þ°',
            hh: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞª %d',
            d: 'Þ‹ÞªÞˆÞ¦Þ€Þ¬Þ‡Þ°',
            dd: 'Þ‹ÞªÞˆÞ¦ÞÞ° %d',
            M: 'Þ‰Þ¦Þ€Þ¬Þ‡Þ°',
            MM: 'Þ‰Þ¦ÞÞ° %d',
            y: 'Þ‡Þ¦Þ€Þ¦ÞƒÞ¬Þ‡Þ°',
            yy: 'Þ‡Þ¦Þ€Þ¦ÞƒÞª %d',
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 7, // Sunday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function isFunction(input) {
        return (
            (typeof Function !== 'undefined' && input instanceof Function) ||
            Object.prototype.toString.call(input) === '[object Function]'
        );
    }

    moment.defineLocale('el', {
        monthsNominativeEl: 'Î™Î±Î½Î¿Ï…Î¬ÏÎ¹Î¿Ï‚_Î¦ÎµÎ²ÏÎ¿Ï…Î¬ÏÎ¹Î¿Ï‚_ÎœÎ¬ÏÏ„Î¹Î¿Ï‚_Î‘Ï€ÏÎ¯Î»Î¹Î¿Ï‚_ÎœÎ¬Î¹Î¿Ï‚_Î™Î¿ÏÎ½Î¹Î¿Ï‚_Î™Î¿ÏÎ»Î¹Î¿Ï‚_Î‘ÏÎ³Î¿Ï…ÏƒÏ„Î¿Ï‚_Î£ÎµÏ€Ï„Î­Î¼Î²ÏÎ¹Î¿Ï‚_ÎŸÎºÏ„ÏŽÎ²ÏÎ¹Î¿Ï‚_ÎÎ¿Î­Î¼Î²ÏÎ¹Î¿Ï‚_Î”ÎµÎºÎ­Î¼Î²ÏÎ¹Î¿Ï‚'.split(
            '_'
        ),
        monthsGenitiveEl: 'Î™Î±Î½Î¿Ï…Î±ÏÎ¯Î¿Ï…_Î¦ÎµÎ²ÏÎ¿Ï…Î±ÏÎ¯Î¿Ï…_ÎœÎ±ÏÏ„Î¯Î¿Ï…_Î‘Ï€ÏÎ¹Î»Î¯Î¿Ï…_ÎœÎ±ÎÎ¿Ï…_Î™Î¿Ï…Î½Î¯Î¿Ï…_Î™Î¿Ï…Î»Î¯Î¿Ï…_Î‘Ï…Î³Î¿ÏÏƒÏ„Î¿Ï…_Î£ÎµÏ€Ï„ÎµÎ¼Î²ÏÎ¯Î¿Ï…_ÎŸÎºÏ„Ï‰Î²ÏÎ¯Î¿Ï…_ÎÎ¿ÎµÎ¼Î²ÏÎ¯Î¿Ï…_Î”ÎµÎºÎµÎ¼Î²ÏÎ¯Î¿Ï…'.split(
            '_'
        ),
        months: function (momentToFormat, format) {
            if (!momentToFormat) {
                return this._monthsNominativeEl;
            } else if (
                typeof format === 'string' &&
                /D/.test(format.substring(0, format.indexOf('MMMM')))
            ) {
                // if there is a day number before 'MMMM'
                return this._monthsGenitiveEl[momentToFormat.month()];
            } else {
                return this._monthsNominativeEl[momentToFormat.month()];
            }
        },
        monthsShort: 'Î™Î±Î½_Î¦ÎµÎ²_ÎœÎ±Ï_Î‘Ï€Ï_ÎœÎ±ÏŠ_Î™Î¿Ï…Î½_Î™Î¿Ï…Î»_Î‘Ï…Î³_Î£ÎµÏ€_ÎŸÎºÏ„_ÎÎ¿Îµ_Î”ÎµÎº'.split('_'),
        weekdays: 'ÎšÏ…ÏÎ¹Î±ÎºÎ®_Î”ÎµÏ…Ï„Î­ÏÎ±_Î¤ÏÎ¯Ï„Î·_Î¤ÎµÏ„Î¬ÏÏ„Î·_Î Î­Î¼Ï€Ï„Î·_Î Î±ÏÎ±ÏƒÎºÎµÏ…Î®_Î£Î¬Î²Î²Î±Ï„Î¿'.split(
            '_'
        ),
        weekdaysShort: 'ÎšÏ…Ï_Î”ÎµÏ…_Î¤ÏÎ¹_Î¤ÎµÏ„_Î ÎµÎ¼_Î Î±Ï_Î£Î±Î²'.split('_'),
        weekdaysMin: 'ÎšÏ…_Î”Îµ_Î¤Ï_Î¤Îµ_Î Îµ_Î Î±_Î£Î±'.split('_'),
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? 'Î¼Î¼' : 'ÎœÎœ';
            } else {
                return isLower ? 'Ï€Î¼' : 'Î Îœ';
            }
        },
        isPM: function (input) {
            return (input + '').toLowerCase()[0] === 'Î¼';
        },
        meridiemParse: /[Î Îœ]\.?Îœ?\.?/i,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendarEl: {
            sameDay: '[Î£Î®Î¼ÎµÏÎ± {}] LT',
            nextDay: '[Î‘ÏÏÎ¹Î¿ {}] LT',
            nextWeek: 'dddd [{}] LT',
            lastDay: '[Î§Î¸ÎµÏ‚ {}] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 6:
                        return '[Ï„Î¿ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î¿] dddd [{}] LT';
                    default:
                        return '[Ï„Î·Î½ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î·] dddd [{}] LT';
                }
            },
            sameElse: 'L',
        },
        calendar: function (key, mom) {
            var output = this._calendarEl[key],
                hours = mom && mom.hours();
            if (isFunction(output)) {
                output = output.apply(mom);
            }
            return output.replace('{}', hours % 12 === 1 ? 'ÏƒÏ„Î·' : 'ÏƒÏ„Î¹Ï‚');
        },
        relativeTime: {
            future: 'ÏƒÎµ %s',
            past: '%s Ï€ÏÎ¹Î½',
            s: 'Î»Î¯Î³Î± Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
            ss: '%d Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
            m: 'Î­Î½Î± Î»ÎµÏ€Ï„ÏŒ',
            mm: '%d Î»ÎµÏ€Ï„Î¬',
            h: 'Î¼Î¯Î± ÏŽÏÎ±',
            hh: '%d ÏŽÏÎµÏ‚',
            d: 'Î¼Î¯Î± Î¼Î­ÏÎ±',
            dd: '%d Î¼Î­ÏÎµÏ‚',
            M: 'Î­Î½Î±Ï‚ Î¼Î®Î½Î±Ï‚',
            MM: '%d Î¼Î®Î½ÎµÏ‚',
            y: 'Î­Î½Î±Ï‚ Ï‡ÏÏŒÎ½Î¿Ï‚',
            yy: '%d Ï‡ÏÏŒÎ½Î¹Î±',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Î·/,
        ordinal: '%dÎ·',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4st is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('en-au', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('en-ca', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'YYYY-MM-DD',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY h:mm A',
            LLLL: 'dddd, MMMM D, YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('en-gb', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('en-ie', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('en-il', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('en-in', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 1st is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('en-nz', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('en-sg', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('eo', {
        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aÅ­g_sept_okt_nov_dec'.split('_'),
        weekdays: 'dimanÄ‰o_lundo_mardo_merkredo_ÄµaÅ­do_vendredo_sabato'.split('_'),
        weekdaysShort: 'dim_lun_mard_merk_ÄµaÅ­_ven_sab'.split('_'),
        weekdaysMin: 'di_lu_ma_me_Äµa_ve_sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: '[la] D[-an de] MMMM, YYYY',
            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
        },
        meridiemParse: /[ap]\.t\.m/i,
        isPM: function (input) {
            return input.charAt(0).toLowerCase() === 'p';
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? 'p.t.m.' : 'P.T.M.';
            } else {
                return isLower ? 'a.t.m.' : 'A.T.M.';
            }
        },
        calendar: {
            sameDay: '[HodiaÅ­ je] LT',
            nextDay: '[MorgaÅ­ je] LT',
            nextWeek: 'dddd[n je] LT',
            lastDay: '[HieraÅ­ je] LT',
            lastWeek: '[pasintan] dddd[n je] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'post %s',
            past: 'antaÅ­ %s',
            s: 'kelkaj sekundoj',
            ss: '%d sekundoj',
            m: 'unu minuto',
            mm: '%d minutoj',
            h: 'unu horo',
            hh: '%d horoj',
            d: 'unu tago', //ne 'diurno', Ä‰ar estas uzita por proksimumo
            dd: '%d tagoj',
            M: 'unu monato',
            MM: '%d monatoj',
            y: 'unu jaro',
            yy: '%d jaroj',
        },
        dayOfMonthOrdinalParse: /\d{1,2}a/,
        ordinal: '%da',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse$2 = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex$2 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    moment.defineLocale('es-do', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
                return monthsShort$1[m.month()];
            } else {
                return monthsShortDot[m.month()];
            }
        },
        monthsRegex: monthsRegex$2,
        monthsShortRegex: monthsRegex$2,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse$2,
        longMonthsParse: monthsParse$2,
        shortMonthsParse: monthsParse$2,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY h:mm A',
            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse$3 = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex$3 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    moment.defineLocale('es-mx', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot$1;
            } else if (/-MMM-/.test(format)) {
                return monthsShort$2[m.month()];
            } else {
                return monthsShortDot$1[m.month()];
            }
        },
        monthsRegex: monthsRegex$3,
        monthsShortRegex: monthsRegex$3,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse$3,
        longMonthsParse: monthsParse$3,
        shortMonthsParse: monthsParse$3,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
        invalidDate: 'Fecha invÃ¡lida',
    });

    //! moment.js locale configuration

    var monthsShortDot$2 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse$4 = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex$4 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    moment.defineLocale('es-us', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot$2;
            } else if (/-MMM-/.test(format)) {
                return monthsShort$3[m.month()];
            } else {
                return monthsShortDot$2[m.month()];
            }
        },
        monthsRegex: monthsRegex$4,
        monthsShortRegex: monthsRegex$4,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse$4,
        longMonthsParse: monthsParse$4,
        shortMonthsParse: monthsParse$4,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'MM/DD/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY h:mm A',
            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortDot$3 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort$4 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse$5 = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex$5 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    moment.defineLocale('es', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot$3;
            } else if (/-MMM-/.test(format)) {
                return monthsShort$4[m.month()];
            } else {
                return monthsShortDot$3[m.month()];
            }
        },
        monthsRegex: monthsRegex$5,
        monthsShortRegex: monthsRegex$5,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse$5,
        longMonthsParse: monthsParse$5,
        shortMonthsParse: monthsParse$5,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
        invalidDate: 'Fecha invÃ¡lida',
    });

    //! moment.js locale configuration

    function processRelativeTime$3(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['mÃµne sekundi', 'mÃµni sekund', 'paar sekundit'],
            ss: [number + 'sekundi', number + 'sekundit'],
            m: ['Ã¼he minuti', 'Ã¼ks minut'],
            mm: [number + ' minuti', number + ' minutit'],
            h: ['Ã¼he tunni', 'tund aega', 'Ã¼ks tund'],
            hh: [number + ' tunni', number + ' tundi'],
            d: ['Ã¼he pÃ¤eva', 'Ã¼ks pÃ¤ev'],
            M: ['kuu aja', 'kuu aega', 'Ã¼ks kuu'],
            MM: [number + ' kuu', number + ' kuud'],
            y: ['Ã¼he aasta', 'aasta', 'Ã¼ks aasta'],
            yy: [number + ' aasta', number + ' aastat'],
        };
        if (withoutSuffix) {
            return format[key][2] ? format[key][2] : format[key][1];
        }
        return isFuture ? format[key][0] : format[key][1];
    }

    moment.defineLocale('et', {
        months: 'jaanuar_veebruar_mÃ¤rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
            '_'
        ),
        monthsShort: 'jaan_veebr_mÃ¤rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(
            '_'
        ),
        weekdays: 'pÃ¼hapÃ¤ev_esmaspÃ¤ev_teisipÃ¤ev_kolmapÃ¤ev_neljapÃ¤ev_reede_laupÃ¤ev'.split(
            '_'
        ),
        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[TÃ¤na,] LT',
            nextDay: '[Homme,] LT',
            nextWeek: '[JÃ¤rgmine] dddd LT',
            lastDay: '[Eile,] LT',
            lastWeek: '[Eelmine] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s pÃ¤rast',
            past: '%s tagasi',
            s: processRelativeTime$3,
            ss: processRelativeTime$3,
            m: processRelativeTime$3,
            mm: processRelativeTime$3,
            h: processRelativeTime$3,
            hh: processRelativeTime$3,
            d: processRelativeTime$3,
            dd: '%d pÃ¤eva',
            M: processRelativeTime$3,
            MM: processRelativeTime$3,
            y: processRelativeTime$3,
            yy: processRelativeTime$3,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('eu', {
        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
            '_'
        ),
        monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
            '_'
        ),
        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY[ko] MMMM[ren] D[a]',
            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
            l: 'YYYY-M-D',
            ll: 'YYYY[ko] MMM D[a]',
            lll: 'YYYY[ko] MMM D[a] HH:mm',
            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
        },
        calendar: {
            sameDay: '[gaur] LT[etan]',
            nextDay: '[bihar] LT[etan]',
            nextWeek: 'dddd LT[etan]',
            lastDay: '[atzo] LT[etan]',
            lastWeek: '[aurreko] dddd LT[etan]',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s barru',
            past: 'duela %s',
            s: 'segundo batzuk',
            ss: '%d segundo',
            m: 'minutu bat',
            mm: '%d minutu',
            h: 'ordu bat',
            hh: '%d ordu',
            d: 'egun bat',
            dd: '%d egun',
            M: 'hilabete bat',
            MM: '%d hilabete',
            y: 'urte bat',
            yy: '%d urte',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$6 = {
            1: 'Û±',
            2: 'Û²',
            3: 'Û³',
            4: 'Û´',
            5: 'Ûµ',
            6: 'Û¶',
            7: 'Û·',
            8: 'Û¸',
            9: 'Û¹',
            0: 'Û°',
        },
        numberMap$5 = {
            'Û±': '1',
            'Û²': '2',
            'Û³': '3',
            'Û´': '4',
            'Ûµ': '5',
            'Û¶': '6',
            'Û·': '7',
            'Û¸': '8',
            'Û¹': '9',
            'Û°': '0',
        };

    moment.defineLocale('fa', {
        months: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
            '_'
        ),
        weekdaysShort: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
            '_'
        ),
        weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ø¬_Ø´'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        meridiemParse: /Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±|Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/,
        isPM: function (input) {
            return /Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±';
            } else {
                return 'Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù…Ø±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
            nextDay: '[ÙØ±Ø¯Ø§ Ø³Ø§Ø¹Øª] LT',
            nextWeek: 'dddd [Ø³Ø§Ø¹Øª] LT',
            lastDay: '[Ø¯ÛŒØ±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
            lastWeek: 'dddd [Ù¾ÛŒØ´] [Ø³Ø§Ø¹Øª] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¯Ø± %s',
            past: '%s Ù¾ÛŒØ´',
            s: 'Ú†Ù†Ø¯ Ø«Ø§Ù†ÛŒÙ‡',
            ss: '%d Ø«Ø§Ù†ÛŒÙ‡',
            m: 'ÛŒÚ© Ø¯Ù‚ÛŒÙ‚Ù‡',
            mm: '%d Ø¯Ù‚ÛŒÙ‚Ù‡',
            h: 'ÛŒÚ© Ø³Ø§Ø¹Øª',
            hh: '%d Ø³Ø§Ø¹Øª',
            d: 'ÛŒÚ© Ø±ÙˆØ²',
            dd: '%d Ø±ÙˆØ²',
            M: 'ÛŒÚ© Ù…Ø§Ù‡',
            MM: '%d Ù…Ø§Ù‡',
            y: 'ÛŒÚ© Ø³Ø§Ù„',
            yy: '%d Ø³Ø§Ù„',
        },
        preparse: function (string) {
            return string
                .replace(/[Û°-Û¹]/g, function (match) {
                    return numberMap$5[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap$6[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        dayOfMonthOrdinalParse: /\d{1,2}Ù…/,
        ordinal: '%dÙ…',
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var numbersPast = 'nolla yksi kaksi kolme neljÃ¤ viisi kuusi seitsemÃ¤n kahdeksan yhdeksÃ¤n'.split(
            ' '
        ),
        numbersFuture = [
            'nolla',
            'yhden',
            'kahden',
            'kolmen',
            'neljÃ¤n',
            'viiden',
            'kuuden',
            numbersPast[7],
            numbersPast[8],
            numbersPast[9],
        ];
    function translate$2(number, withoutSuffix, key, isFuture) {
        var result = '';
        switch (key) {
            case 's':
                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
            case 'ss':
                result = isFuture ? 'sekunnin' : 'sekuntia';
                break;
            case 'm':
                return isFuture ? 'minuutin' : 'minuutti';
            case 'mm':
                result = isFuture ? 'minuutin' : 'minuuttia';
                break;
            case 'h':
                return isFuture ? 'tunnin' : 'tunti';
            case 'hh':
                result = isFuture ? 'tunnin' : 'tuntia';
                break;
            case 'd':
                return isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤';
            case 'dd':
                result = isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤Ã¤';
                break;
            case 'M':
                return isFuture ? 'kuukauden' : 'kuukausi';
            case 'MM':
                result = isFuture ? 'kuukauden' : 'kuukautta';
                break;
            case 'y':
                return isFuture ? 'vuoden' : 'vuosi';
            case 'yy':
                result = isFuture ? 'vuoden' : 'vuotta';
                break;
        }
        result = verbalNumber(number, isFuture) + ' ' + result;
        return result;
    }
    function verbalNumber(number, isFuture) {
        return number < 10
            ? isFuture
                ? numbersFuture[number]
                : numbersPast[number]
            : number;
    }

    moment.defineLocale('fi', {
        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesÃ¤kuu_heinÃ¤kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
            '_'
        ),
        monthsShort: 'tammi_helmi_maalis_huhti_touko_kesÃ¤_heinÃ¤_elo_syys_loka_marras_joulu'.split(
            '_'
        ),
        weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
            '_'
        ),
        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD.MM.YYYY',
            LL: 'Do MMMM[ta] YYYY',
            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
            l: 'D.M.YYYY',
            ll: 'Do MMM YYYY',
            lll: 'Do MMM YYYY, [klo] HH.mm',
            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
        },
        calendar: {
            sameDay: '[tÃ¤nÃ¤Ã¤n] [klo] LT',
            nextDay: '[huomenna] [klo] LT',
            nextWeek: 'dddd [klo] LT',
            lastDay: '[eilen] [klo] LT',
            lastWeek: '[viime] dddd[na] [klo] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s pÃ¤Ã¤stÃ¤',
            past: '%s sitten',
            s: translate$2,
            ss: translate$2,
            m: translate$2,
            mm: translate$2,
            h: translate$2,
            hh: translate$2,
            d: translate$2,
            dd: translate$2,
            M: translate$2,
            MM: translate$2,
            y: translate$2,
            yy: translate$2,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('fil', {
        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
            '_'
        ),
        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
            '_'
        ),
        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'MM/D/YYYY',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY HH:mm',
            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
        },
        calendar: {
            sameDay: 'LT [ngayong araw]',
            nextDay: '[Bukas ng] LT',
            nextWeek: 'LT [sa susunod na] dddd',
            lastDay: 'LT [kahapon]',
            lastWeek: 'LT [noong nakaraang] dddd',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'sa loob ng %s',
            past: '%s ang nakalipas',
            s: 'ilang segundo',
            ss: '%d segundo',
            m: 'isang minuto',
            mm: '%d minuto',
            h: 'isang oras',
            hh: '%d oras',
            d: 'isang araw',
            dd: '%d araw',
            M: 'isang buwan',
            MM: '%d buwan',
            y: 'isang taon',
            yy: '%d taon',
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: function (number) {
            return number;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('fo', {
        months: 'januar_februar_mars_aprÃ­l_mai_juni_juli_august_september_oktober_november_desember'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
        weekdays: 'sunnudagur_mÃ¡nadagur_tÃ½sdagur_mikudagur_hÃ³sdagur_frÃ­ggjadagur_leygardagur'.split(
            '_'
        ),
        weekdaysShort: 'sun_mÃ¡n_tÃ½s_mik_hÃ³s_frÃ­_ley'.split('_'),
        weekdaysMin: 'su_mÃ¡_tÃ½_mi_hÃ³_fr_le'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D. MMMM, YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ã dag kl.] LT',
            nextDay: '[Ã morgin kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[Ã gjÃ¡r kl.] LT',
            lastWeek: '[sÃ­Ã°stu] dddd [kl] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'um %s',
            past: '%s sÃ­Ã°ani',
            s: 'fÃ¡ sekund',
            ss: '%d sekundir',
            m: 'ein minuttur',
            mm: '%d minuttir',
            h: 'ein tÃ­mi',
            hh: '%d tÃ­mar',
            d: 'ein dagur',
            dd: '%d dagar',
            M: 'ein mÃ¡naÃ°ur',
            MM: '%d mÃ¡naÃ°ir',
            y: 'eitt Ã¡r',
            yy: '%d Ã¡r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('fr-ca', {
        months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
            '_'
        ),
        monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Aujourdâ€™hui Ã ] LT',
            nextDay: '[Demain Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[Hier Ã ] LT',
            lastWeek: 'dddd [dernier Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
        ordinal: function (number, period) {
            switch (period) {
                // Words with masculine grammatical gender: mois, trimestre, jour
                default:
                case 'M':
                case 'Q':
                case 'D':
                case 'DDD':
                case 'd':
                    return number + (number === 1 ? 'er' : 'e');

                // Words with feminine grammatical gender: semaine
                case 'w':
                case 'W':
                    return number + (number === 1 ? 're' : 'e');
            }
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('fr-ch', {
        months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
            '_'
        ),
        monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Aujourdâ€™hui Ã ] LT',
            nextDay: '[Demain Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[Hier Ã ] LT',
            lastWeek: 'dddd [dernier Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
        ordinal: function (number, period) {
            switch (period) {
                // Words with masculine grammatical gender: mois, trimestre, jour
                default:
                case 'M':
                case 'Q':
                case 'D':
                case 'DDD':
                case 'd':
                    return number + (number === 1 ? 'er' : 'e');

                // Words with feminine grammatical gender: semaine
                case 'w':
                case 'W':
                    return number + (number === 1 ? 're' : 'e');
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsStrictRegex$1 = /^(janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
        monthsShortStrictRegex$1 = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?)/i,
        monthsRegex$6 = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?|janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
        monthsParse$6 = [
            /^janv/i,
            /^fÃ©vr/i,
            /^mars/i,
            /^avr/i,
            /^mai/i,
            /^juin/i,
            /^juil/i,
            /^aoÃ»t/i,
            /^sept/i,
            /^oct/i,
            /^nov/i,
            /^dÃ©c/i,
        ];

    moment.defineLocale('fr', {
        months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
            '_'
        ),
        monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
            '_'
        ),
        monthsRegex: monthsRegex$6,
        monthsShortRegex: monthsRegex$6,
        monthsStrictRegex: monthsStrictRegex$1,
        monthsShortStrictRegex: monthsShortStrictRegex$1,
        monthsParse: monthsParse$6,
        longMonthsParse: monthsParse$6,
        shortMonthsParse: monthsParse$6,
        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Aujourdâ€™hui Ã ] LT',
            nextDay: '[Demain Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[Hier Ã ] LT',
            lastWeek: 'dddd [dernier Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            w: 'une semaine',
            ww: '%d semaines',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
        ordinal: function (number, period) {
            switch (period) {
                // TODO: Return 'e' when day of month > 1. Move this case inside
                // block for masculine words below.
                // See https://github.com/moment/moment/issues/3375
                case 'D':
                    return number + (number === 1 ? 'er' : '');

                // Words with masculine grammatical gender: mois, trimestre, jour
                default:
                case 'M':
                case 'Q':
                case 'DDD':
                case 'd':
                    return number + (number === 1 ? 'er' : 'e');

                // Words with feminine grammatical gender: semaine
                case 'w':
                case 'W':
                    return number + (number === 1 ? 're' : 'e');
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(
            '_'
        ),
        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(
            '_'
        );

    moment.defineLocale('fy', {
        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortWithDots;
            } else if (/-MMM-/.test(format)) {
                return monthsShortWithoutDots[m.month()];
            } else {
                return monthsShortWithDots[m.month()];
            }
        },
        monthsParseExact: true,
        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
            '_'
        ),
        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[hjoed om] LT',
            nextDay: '[moarn om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[juster om] LT',
            lastWeek: '[Ã´frÃ»ne] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'oer %s',
            past: '%s lyn',
            s: 'in pear sekonden',
            ss: '%d sekonden',
            m: 'ien minÃºt',
            mm: '%d minuten',
            h: 'ien oere',
            hh: '%d oeren',
            d: 'ien dei',
            dd: '%d dagen',
            M: 'ien moanne',
            MM: '%d moannen',
            y: 'ien jier',
            yy: '%d jierren',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            );
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$5 = [
            'EanÃ¡ir',
            'Feabhra',
            'MÃ¡rta',
            'AibreÃ¡n',
            'Bealtaine',
            'Meitheamh',
            'IÃºil',
            'LÃºnasa',
            'MeÃ¡n FÃ³mhair',
            'Deireadh FÃ³mhair',
            'Samhain',
            'Nollaig',
        ],
        monthsShort$5 = [
            'Ean',
            'Feabh',
            'MÃ¡rt',
            'Aib',
            'Beal',
            'Meith',
            'IÃºil',
            'LÃºn',
            'M.F.',
            'D.F.',
            'Samh',
            'Noll',
        ],
        weekdays$1 = [
            'DÃ© Domhnaigh',
            'DÃ© Luain',
            'DÃ© MÃ¡irt',
            'DÃ© CÃ©adaoin',
            'DÃ©ardaoin',
            'DÃ© hAoine',
            'DÃ© Sathairn',
        ],
        weekdaysShort = ['Domh', 'Luan', 'MÃ¡irt', 'CÃ©ad', 'DÃ©ar', 'Aoine', 'Sath'],
        weekdaysMin = ['Do', 'Lu', 'MÃ¡', 'CÃ©', 'DÃ©', 'A', 'Sa'];

    moment.defineLocale('ga', {
        months: months$5,
        monthsShort: monthsShort$5,
        monthsParseExact: true,
        weekdays: weekdays$1,
        weekdaysShort: weekdaysShort,
        weekdaysMin: weekdaysMin,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Inniu ag] LT',
            nextDay: '[AmÃ¡rach ag] LT',
            nextWeek: 'dddd [ag] LT',
            lastDay: '[InnÃ© ag] LT',
            lastWeek: 'dddd [seo caite] [ag] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'i %s',
            past: '%s Ã³ shin',
            s: 'cÃºpla soicind',
            ss: '%d soicind',
            m: 'nÃ³imÃ©ad',
            mm: '%d nÃ³imÃ©ad',
            h: 'uair an chloig',
            hh: '%d uair an chloig',
            d: 'lÃ¡',
            dd: '%d lÃ¡',
            M: 'mÃ­',
            MM: '%d mÃ­onna',
            y: 'bliain',
            yy: '%d bliain',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
        ordinal: function (number) {
            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$6 = [
            'Am Faoilleach',
            'An Gearran',
            'Am MÃ rt',
            'An Giblean',
            'An CÃ¨itean',
            'An t-Ã’gmhios',
            'An t-Iuchar',
            'An LÃ¹nastal',
            'An t-Sultain',
            'An DÃ mhair',
            'An t-Samhain',
            'An DÃ¹bhlachd',
        ],
        monthsShort$6 = [
            'Faoi',
            'Gear',
            'MÃ rt',
            'Gibl',
            'CÃ¨it',
            'Ã’gmh',
            'Iuch',
            'LÃ¹n',
            'Sult',
            'DÃ mh',
            'Samh',
            'DÃ¹bh',
        ],
        weekdays$2 = [
            'DidÃ²mhnaich',
            'Diluain',
            'DimÃ irt',
            'Diciadain',
            'Diardaoin',
            'Dihaoine',
            'Disathairne',
        ],
        weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
        weekdaysMin$1 = ['DÃ²', 'Lu', 'MÃ ', 'Ci', 'Ar', 'Ha', 'Sa'];

    moment.defineLocale('gd', {
        months: months$6,
        monthsShort: monthsShort$6,
        monthsParseExact: true,
        weekdays: weekdays$2,
        weekdaysShort: weekdaysShort$1,
        weekdaysMin: weekdaysMin$1,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[An-diugh aig] LT',
            nextDay: '[A-mÃ ireach aig] LT',
            nextWeek: 'dddd [aig] LT',
            lastDay: '[An-dÃ¨ aig] LT',
            lastWeek: 'dddd [seo chaidh] [aig] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ann an %s',
            past: 'bho chionn %s',
            s: 'beagan diogan',
            ss: '%d diogan',
            m: 'mionaid',
            mm: '%d mionaidean',
            h: 'uair',
            hh: '%d uairean',
            d: 'latha',
            dd: '%d latha',
            M: 'mÃ¬os',
            MM: '%d mÃ¬osan',
            y: 'bliadhna',
            yy: '%d bliadhna',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
        ordinal: function (number) {
            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('gl', {
        months: 'xaneiro_febreiro_marzo_abril_maio_xuÃ±o_xullo_agosto_setembro_outubro_novembro_decembro'.split(
            '_'
        ),
        monthsShort: 'xan._feb._mar._abr._mai._xuÃ±._xul._ago._set._out._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'domingo_luns_martes_mÃ©rcores_xoves_venres_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._mÃ©r._xov._ven._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mÃ©_xo_ve_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[hoxe ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±Ã¡ ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT';
            },
            lastDay: function () {
                return '[onte ' + (this.hours() !== 1 ? 'Ã¡' : 'a') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: function (str) {
                if (str.indexOf('un') === 0) {
                    return 'n' + str;
                }
                return 'en ' + str;
            },
            past: 'hai %s',
            s: 'uns segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'unha hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            M: 'un mes',
            MM: '%d meses',
            y: 'un ano',
            yy: '%d anos',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$4(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['à¤¥à¥‹à¤¡à¤¯à¤¾ à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', 'à¤¥à¥‹à¤¡à¥‡ à¤¸à¥…à¤•à¤‚à¤¡'],
            ss: [number + ' à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', number + ' à¤¸à¥…à¤•à¤‚à¤¡'],
            m: ['à¤à¤•à¤¾ à¤®à¤¿à¤£à¤Ÿà¤¾à¤¨', 'à¤à¤• à¤®à¤¿à¤¨à¥‚à¤Ÿ'],
            mm: [number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚à¤¨à¥€', number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚'],
            h: ['à¤à¤•à¤¾ à¤µà¤°à¤¾à¤¨', 'à¤à¤• à¤µà¤°'],
            hh: [number + ' à¤µà¤°à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¤¾à¤‚'],
            d: ['à¤à¤•à¤¾ à¤¦à¤¿à¤¸à¤¾à¤¨', 'à¤à¤• à¤¦à¥€à¤¸'],
            dd: [number + ' à¤¦à¤¿à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤¦à¥€à¤¸'],
            M: ['à¤à¤•à¤¾ à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨', 'à¤à¤• à¤®à¥à¤¹à¤¯à¤¨à¥‹'],
            MM: [number + ' à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨à¥€', number + ' à¤®à¥à¤¹à¤¯à¤¨à¥‡'],
            y: ['à¤à¤•à¤¾ à¤µà¤°à¥à¤¸à¤¾à¤¨', 'à¤à¤• à¤µà¤°à¥à¤¸'],
            yy: [number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚'],
        };
        return isFuture ? format[key][0] : format[key][1];
    }

    moment.defineLocale('gom-deva', {
        months: {
            standalone: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¯_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
                '_'
            ),
            format: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤®à¤¾à¤°à¥à¤šà¤¾à¤šà¥à¤¯à¤¾_à¤à¤ªà¥à¤°à¥€à¤²à¤¾à¤šà¥à¤¯à¤¾_à¤®à¥‡à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥‚à¤¨à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥à¤²à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤—à¤¸à¥à¤Ÿà¤¾à¤šà¥à¤¯à¤¾_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾'.split(
                '_'
            ),
            isFormat: /MMMM(\s)+D[oD]?/,
        },
        monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€._à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¤†à¤¯à¤¤à¤¾à¤°_à¤¸à¥‹à¤®à¤¾à¤°_à¤®à¤‚à¤—à¤³à¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤¬à¤¿à¤°à¥‡à¤¸à¥à¤¤à¤¾à¤°_à¤¸à¥à¤•à¥à¤°à¤¾à¤°_à¤¶à¥‡à¤¨à¤µà¤¾à¤°'.split('_'),
        weekdaysShort: 'à¤†à¤¯à¤¤._à¤¸à¥‹à¤®._à¤®à¤‚à¤—à¤³._à¤¬à¥à¤§._à¤¬à¥à¤°à¥‡à¤¸à¥à¤¤._à¤¸à¥à¤•à¥à¤°._à¤¶à¥‡à¤¨.'.split('_'),
        weekdaysMin: 'à¤†_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤¬à¥à¤°à¥‡_à¤¸à¥_à¤¶à¥‡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            LTS: 'A h:mm:ss [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            llll: 'ddd, D MMM YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        },
        calendar: {
            sameDay: '[à¤†à¤¯à¤œ] LT',
            nextDay: '[à¤«à¤¾à¤²à¥à¤¯à¤¾à¤‚] LT',
            nextWeek: '[à¤«à¥à¤¡à¤²à¥‹] dddd[,] LT',
            lastDay: '[à¤•à¤¾à¤²] LT',
            lastWeek: '[à¤«à¤¾à¤Ÿà¤²à¥‹] dddd[,] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s',
            past: '%s à¤†à¤¦à¥€à¤‚',
            s: processRelativeTime$4,
            ss: processRelativeTime$4,
            m: processRelativeTime$4,
            mm: processRelativeTime$4,
            h: processRelativeTime$4,
            hh: processRelativeTime$4,
            d: processRelativeTime$4,
            dd: processRelativeTime$4,
            M: processRelativeTime$4,
            MM: processRelativeTime$4,
            y: processRelativeTime$4,
            yy: processRelativeTime$4,
        },
        dayOfMonthOrdinalParse: /\d{1,2}(à¤µà¥‡à¤°)/,
        ordinal: function (number, period) {
            switch (period) {
                // the ordinal 'à¤µà¥‡à¤°' only applies to day of the month
                case 'D':
                    return number + 'à¤µà¥‡à¤°';
                default:
                case 'M':
                case 'Q':
                case 'DDD':
                case 'd':
                case 'w':
                case 'W':
                    return number;
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week
            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
        },
        meridiemParse: /à¤°à¤¾à¤¤à¥€|à¤¸à¤•à¤¾à¤³à¥€à¤‚|à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚|à¤¸à¤¾à¤‚à¤œà¥‡/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤°à¤¾à¤¤à¥€') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¤•à¤¾à¤³à¥€à¤‚') {
                return hour;
            } else if (meridiem === 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚') {
                return hour > 12 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¤¾à¤‚à¤œà¥‡') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¤°à¤¾à¤¤à¥€';
            } else if (hour < 12) {
                return 'à¤¸à¤•à¤¾à¤³à¥€à¤‚';
            } else if (hour < 16) {
                return 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚';
            } else if (hour < 20) {
                return 'à¤¸à¤¾à¤‚à¤œà¥‡';
            } else {
                return 'à¤°à¤¾à¤¤à¥€';
            }
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$5(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['thoddea sekondamni', 'thodde sekond'],
            ss: [number + ' sekondamni', number + ' sekond'],
            m: ['eka mintan', 'ek minut'],
            mm: [number + ' mintamni', number + ' mintam'],
            h: ['eka voran', 'ek vor'],
            hh: [number + ' voramni', number + ' voram'],
            d: ['eka disan', 'ek dis'],
            dd: [number + ' disamni', number + ' dis'],
            M: ['eka mhoinean', 'ek mhoino'],
            MM: [number + ' mhoineamni', number + ' mhoine'],
            y: ['eka vorsan', 'ek voros'],
            yy: [number + ' vorsamni', number + ' vorsam'],
        };
        return isFuture ? format[key][0] : format[key][1];
    }

    moment.defineLocale('gom-latn', {
        months: {
            standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
                '_'
            ),
            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
                '_'
            ),
            isFormat: /MMMM(\s)+D[oD]?/,
        },
        monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'A h:mm [vazta]',
            LTS: 'A h:mm:ss [vazta]',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY A h:mm [vazta]',
            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
        },
        calendar: {
            sameDay: '[Aiz] LT',
            nextDay: '[Faleam] LT',
            nextWeek: '[Fuddlo] dddd[,] LT',
            lastDay: '[Kal] LT',
            lastWeek: '[Fattlo] dddd[,] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s',
            past: '%s adim',
            s: processRelativeTime$5,
            ss: processRelativeTime$5,
            m: processRelativeTime$5,
            mm: processRelativeTime$5,
            h: processRelativeTime$5,
            hh: processRelativeTime$5,
            d: processRelativeTime$5,
            dd: processRelativeTime$5,
            M: processRelativeTime$5,
            MM: processRelativeTime$5,
            y: processRelativeTime$5,
            yy: processRelativeTime$5,
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er)/,
        ordinal: function (number, period) {
            switch (period) {
                // the ordinal 'er' only applies to day of the month
                case 'D':
                    return number + 'er';
                default:
                case 'M':
                case 'Q':
                case 'DDD':
                case 'd':
                case 'w':
                case 'W':
                    return number;
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week
            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
        },
        meridiemParse: /rati|sokallim|donparam|sanje/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'rati') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'sokallim') {
                return hour;
            } else if (meridiem === 'donparam') {
                return hour > 12 ? hour : hour + 12;
            } else if (meridiem === 'sanje') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'rati';
            } else if (hour < 12) {
                return 'sokallim';
            } else if (hour < 16) {
                return 'donparam';
            } else if (hour < 20) {
                return 'sanje';
            } else {
                return 'rati';
            }
        },
    });

    //! moment.js locale configuration

    var symbolMap$7 = {
            1: 'à«§',
            2: 'à«¨',
            3: 'à«©',
            4: 'à«ª',
            5: 'à««',
            6: 'à«¬',
            7: 'à«­',
            8: 'à«®',
            9: 'à«¯',
            0: 'à«¦',
        },
        numberMap$6 = {
            'à«§': '1',
            'à«¨': '2',
            'à«©': '3',
            'à«ª': '4',
            'à««': '5',
            'à«¬': '6',
            'à«­': '7',
            'à«®': '8',
            'à«¯': '9',
            'à«¦': '0',
        };

    moment.defineLocale('gu', {
        months: 'àªœàª¾àª¨à«àª¯à«àª†àª°à«€_àª«à«‡àª¬à«àª°à«àª†àª°à«€_àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿àª²_àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾àªˆ_àª‘àª—àª¸à«àªŸ_àª¸àªªà«àªŸà«‡àª®à«àª¬àª°_àª‘àª•à«àªŸà«àª¬àª°_àª¨àªµà«‡àª®à«àª¬àª°_àª¡àª¿àª¸à«‡àª®à«àª¬àª°'.split(
            '_'
        ),
        monthsShort: 'àªœàª¾àª¨à«àª¯à«._àª«à«‡àª¬à«àª°à«._àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿._àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾._àª‘àª—._àª¸àªªà«àªŸà«‡._àª‘àª•à«àªŸà«._àª¨àªµà«‡._àª¡àª¿àª¸à«‡.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'àª°àªµàª¿àªµàª¾àª°_àª¸à«‹àª®àªµàª¾àª°_àª®àª‚àª—àª³àªµàª¾àª°_àª¬à«àª§à«àªµàª¾àª°_àª—à«àª°à«àªµàª¾àª°_àª¶à«àª•à«àª°àªµàª¾àª°_àª¶àª¨àª¿àªµàª¾àª°'.split(
            '_'
        ),
        weekdaysShort: 'àª°àªµàª¿_àª¸à«‹àª®_àª®àª‚àª—àª³_àª¬à«àª§à«_àª—à«àª°à«_àª¶à«àª•à«àª°_àª¶àª¨àª¿'.split('_'),
        weekdaysMin: 'àª°_àª¸à«‹_àª®àª‚_àª¬à«_àª—à«_àª¶à«_àª¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm àªµàª¾àª—à«àª¯à«‡',
            LTS: 'A h:mm:ss àªµàª¾àª—à«àª¯à«‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
            LLLL: 'dddd, D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
        },
        calendar: {
            sameDay: '[àª†àªœ] LT',
            nextDay: '[àª•àª¾àª²à«‡] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[àª—àª‡àª•àª¾àª²à«‡] LT',
            lastWeek: '[àªªàª¾àª›àª²àª¾] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s àª®àª¾',
            past: '%s àªªàª¹à«‡àª²àª¾',
            s: 'àª…àª®à«àª• àªªàª³à«‹',
            ss: '%d àª¸à«‡àª•àª‚àª¡',
            m: 'àªàª• àª®àª¿àª¨àª¿àªŸ',
            mm: '%d àª®àª¿àª¨àª¿àªŸ',
            h: 'àªàª• àª•àª²àª¾àª•',
            hh: '%d àª•àª²àª¾àª•',
            d: 'àªàª• àª¦àª¿àªµàª¸',
            dd: '%d àª¦àª¿àªµàª¸',
            M: 'àªàª• àª®àª¹àª¿àª¨à«‹',
            MM: '%d àª®àª¹àª¿àª¨à«‹',
            y: 'àªàª• àªµàª°à«àª·',
            yy: '%d àªµàª°à«àª·',
        },
        preparse: function (string) {
            return string.replace(/[à«§à«¨à«©à«ªà««à«¬à«­à«®à«¯à«¦]/g, function (match) {
                return numberMap$6[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$7[match];
            });
        },
        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
        meridiemParse: /àª°àª¾àª¤|àª¬àªªà«‹àª°|àª¸àªµàª¾àª°|àª¸àª¾àª‚àªœ/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'àª°àª¾àª¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'àª¸àªµàª¾àª°') {
                return hour;
            } else if (meridiem === 'àª¬àªªà«‹àª°') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'àª¸àª¾àª‚àªœ') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'àª°àª¾àª¤';
            } else if (hour < 10) {
                return 'àª¸àªµàª¾àª°';
            } else if (hour < 17) {
                return 'àª¬àªªà«‹àª°';
            } else if (hour < 20) {
                return 'àª¸àª¾àª‚àªœ';
            } else {
                return 'àª°àª¾àª¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('he', {
        months: '×™× ×•××¨_×¤×‘×¨×•××¨_×ž×¨×¥_××¤×¨×™×œ_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×•×¡×˜_×¡×¤×˜×ž×‘×¨_××•×§×˜×•×‘×¨_× ×•×‘×ž×‘×¨_×“×¦×ž×‘×¨'.split(
            '_'
        ),
        monthsShort: '×™× ×•×³_×¤×‘×¨×³_×ž×¨×¥_××¤×¨×³_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×³_×¡×¤×˜×³_××•×§×³_× ×•×‘×³_×“×¦×ž×³'.split(
            '_'
        ),
        weekdays: '×¨××©×•×Ÿ_×©× ×™_×©×œ×™×©×™_×¨×‘×™×¢×™_×—×ž×™×©×™_×©×™×©×™_×©×‘×ª'.split('_'),
        weekdaysShort: '××³_×‘×³_×’×³_×“×³_×”×³_×•×³_×©×³'.split('_'),
        weekdaysMin: '×_×‘_×’_×“_×”_×•_×©'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [×‘]MMMM YYYY',
            LLL: 'D [×‘]MMMM YYYY HH:mm',
            LLLL: 'dddd, D [×‘]MMMM YYYY HH:mm',
            l: 'D/M/YYYY',
            ll: 'D MMM YYYY',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd, D MMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[×”×™×•× ×‘Ö¾]LT',
            nextDay: '[×ž×—×¨ ×‘Ö¾]LT',
            nextWeek: 'dddd [×‘×©×¢×”] LT',
            lastDay: '[××ª×ž×•×œ ×‘Ö¾]LT',
            lastWeek: '[×‘×™×•×] dddd [×”××—×¨×•×Ÿ ×‘×©×¢×”] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '×‘×¢×•×“ %s',
            past: '×œ×¤× ×™ %s',
            s: '×ž×¡×¤×¨ ×©× ×™×•×ª',
            ss: '%d ×©× ×™×•×ª',
            m: '×“×§×”',
            mm: '%d ×“×§×•×ª',
            h: '×©×¢×”',
            hh: function (number) {
                if (number === 2) {
                    return '×©×¢×ª×™×™×';
                }
                return number + ' ×©×¢×•×ª';
            },
            d: '×™×•×',
            dd: function (number) {
                if (number === 2) {
                    return '×™×•×ž×™×™×';
                }
                return number + ' ×™×ž×™×';
            },
            M: '×—×•×“×©',
            MM: function (number) {
                if (number === 2) {
                    return '×—×•×“×©×™×™×';
                }
                return number + ' ×—×•×“×©×™×';
            },
            y: '×©× ×”',
            yy: function (number) {
                if (number === 2) {
                    return '×©× ×ª×™×™×';
                } else if (number % 10 === 0 && number !== 10) {
                    return number + ' ×©× ×”';
                }
                return number + ' ×©× ×™×';
            },
        },
        meridiemParse: /××—×”"×¦|×œ×¤× ×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×œ×¤× ×™ ×”×¦×”×¨×™×™×|×œ×¤× ×•×ª ×‘×•×§×¨|×‘×‘×•×§×¨|×‘×¢×¨×‘/i,
        isPM: function (input) {
            return /^(××—×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×‘×¢×¨×‘)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 5) {
                return '×œ×¤× ×•×ª ×‘×•×§×¨';
            } else if (hour < 10) {
                return '×‘×‘×•×§×¨';
            } else if (hour < 12) {
                return isLower ? '×œ×¤× ×”"×¦' : '×œ×¤× ×™ ×”×¦×”×¨×™×™×';
            } else if (hour < 18) {
                return isLower ? '××—×”"×¦' : '××—×¨×™ ×”×¦×”×¨×™×™×';
            } else {
                return '×‘×¢×¨×‘';
            }
        },
    });

    //! moment.js locale configuration

    var symbolMap$8 = {
            1: 'à¥§',
            2: 'à¥¨',
            3: 'à¥©',
            4: 'à¥ª',
            5: 'à¥«',
            6: 'à¥¬',
            7: 'à¥­',
            8: 'à¥®',
            9: 'à¥¯',
            0: 'à¥¦',
        },
        numberMap$7 = {
            'à¥§': '1',
            'à¥¨': '2',
            'à¥©': '3',
            'à¥ª': '4',
            'à¥«': '5',
            'à¥¬': '6',
            'à¥­': '7',
            'à¥®': '8',
            'à¥¯': '9',
            'à¥¦': '0',
        },
        monthsParse$7 = [
            /^à¤œà¤¨/i,
            /^à¤«à¤¼à¤°|à¤«à¤°/i,
            /^à¤®à¤¾à¤°à¥à¤š/i,
            /^à¤…à¤ªà¥à¤°à¥ˆ/i,
            /^à¤®à¤ˆ/i,
            /^à¤œà¥‚à¤¨/i,
            /^à¤œà¥à¤²/i,
            /^à¤…à¤—/i,
            /^à¤¸à¤¿à¤¤à¤‚|à¤¸à¤¿à¤¤/i,
            /^à¤…à¤•à¥à¤Ÿà¥‚/i,
            /^à¤¨à¤µ|à¤¨à¤µà¤‚/i,
            /^à¤¦à¤¿à¤¸à¤‚|à¤¦à¤¿à¤¸/i,
        ],
        shortMonthsParse = [
            /^à¤œà¤¨/i,
            /^à¤«à¤¼à¤°/i,
            /^à¤®à¤¾à¤°à¥à¤š/i,
            /^à¤…à¤ªà¥à¤°à¥ˆ/i,
            /^à¤®à¤ˆ/i,
            /^à¤œà¥‚à¤¨/i,
            /^à¤œà¥à¤²/i,
            /^à¤…à¤—/i,
            /^à¤¸à¤¿à¤¤/i,
            /^à¤…à¤•à¥à¤Ÿà¥‚/i,
            /^à¤¨à¤µ/i,
            /^à¤¦à¤¿à¤¸/i,
        ];

    moment.defineLocale('hi', {
        months: {
            format: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤¼à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤®à¥à¤¬à¤°_à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°'.split(
                '_'
            ),
            standalone: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤‚à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤‚à¤¬à¤°_à¤¦à¤¿à¤¸à¤‚à¤¬à¤°'.split(
                '_'
            ),
        },
        monthsShort: 'à¤œà¤¨._à¤«à¤¼à¤°._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆ._à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤…à¤—._à¤¸à¤¿à¤¤._à¤…à¤•à¥à¤Ÿà¥‚._à¤¨à¤µ._à¤¦à¤¿à¤¸.'.split(
            '_'
        ),
        weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤²à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
        weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤²_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
        weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¤¬à¤œà¥‡',
            LTS: 'A h:mm:ss à¤¬à¤œà¥‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
        },

        monthsParse: monthsParse$7,
        longMonthsParse: monthsParse$7,
        shortMonthsParse: shortMonthsParse,

        monthsRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

        monthsShortRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

        monthsStrictRegex: /^(à¤œà¤¨à¤µà¤°à¥€?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ?|à¤…à¤—à¤¸à¥à¤¤?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤?\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°?)/i,

        monthsShortStrictRegex: /^(à¤œà¤¨\.?|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²\.?|à¤…à¤—\.?|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸\.?)/i,

        calendar: {
            sameDay: '[à¤†à¤œ] LT',
            nextDay: '[à¤•à¤²] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¤•à¤²] LT',
            lastWeek: '[à¤ªà¤¿à¤›à¤²à¥‡] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¤®à¥‡à¤‚',
            past: '%s à¤ªà¤¹à¤²à¥‡',
            s: 'à¤•à¥à¤› à¤¹à¥€ à¤•à¥à¤·à¤£',
            ss: '%d à¤¸à¥‡à¤•à¤‚à¤¡',
            m: 'à¤à¤• à¤®à¤¿à¤¨à¤Ÿ',
            mm: '%d à¤®à¤¿à¤¨à¤Ÿ',
            h: 'à¤à¤• à¤˜à¤‚à¤Ÿà¤¾',
            hh: '%d à¤˜à¤‚à¤Ÿà¥‡',
            d: 'à¤à¤• à¤¦à¤¿à¤¨',
            dd: '%d à¤¦à¤¿à¤¨',
            M: 'à¤à¤• à¤®à¤¹à¥€à¤¨à¥‡',
            MM: '%d à¤®à¤¹à¥€à¤¨à¥‡',
            y: 'à¤à¤• à¤µà¤°à¥à¤·',
            yy: '%d à¤µà¤°à¥à¤·',
        },
        preparse: function (string) {
            return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
                return numberMap$7[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$8[match];
            });
        },
        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
        meridiemParse: /à¤°à¤¾à¤¤|à¤¸à¥à¤¬à¤¹|à¤¦à¥‹à¤ªà¤¹à¤°|à¤¶à¤¾à¤®/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤°à¤¾à¤¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¥à¤¬à¤¹') {
                return hour;
            } else if (meridiem === 'à¤¦à¥‹à¤ªà¤¹à¤°') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à¤¶à¤¾à¤®') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¤°à¤¾à¤¤';
            } else if (hour < 10) {
                return 'à¤¸à¥à¤¬à¤¹';
            } else if (hour < 17) {
                return 'à¤¦à¥‹à¤ªà¤¹à¤°';
            } else if (hour < 20) {
                return 'à¤¶à¤¾à¤®';
            } else {
                return 'à¤°à¤¾à¤¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function translate$3(number, withoutSuffix, key) {
        var result = number + ' ';
        switch (key) {
            case 'ss':
                if (number === 1) {
                    result += 'sekunda';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sekunde';
                } else {
                    result += 'sekundi';
                }
                return result;
            case 'm':
                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
            case 'mm':
                if (number === 1) {
                    result += 'minuta';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'minute';
                } else {
                    result += 'minuta';
                }
                return result;
            case 'h':
                return withoutSuffix ? 'jedan sat' : 'jednog sata';
            case 'hh':
                if (number === 1) {
                    result += 'sat';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sata';
                } else {
                    result += 'sati';
                }
                return result;
            case 'dd':
                if (number === 1) {
                    result += 'dan';
                } else {
                    result += 'dana';
                }
                return result;
            case 'MM':
                if (number === 1) {
                    result += 'mjesec';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'mjeseca';
                } else {
                    result += 'mjeseci';
                }
                return result;
            case 'yy':
                if (number === 1) {
                    result += 'godina';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'godine';
                } else {
                    result += 'godina';
                }
                return result;
        }
    }

    moment.defineLocale('hr', {
        months: {
            format: 'sijeÄnja_veljaÄe_oÅ¾ujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
                '_'
            ),
            standalone: 'sijeÄanj_veljaÄa_oÅ¾ujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
                '_'
            ),
        },
        monthsShort: 'sij._velj._oÅ¾u._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'Do MMMM YYYY',
            LLL: 'Do MMMM YYYY H:mm',
            LLLL: 'dddd, Do MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedjelju] [u] LT';
                    case 3:
                        return '[u] [srijedu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄer u] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[proÅ¡lu] [nedjelju] [u] LT';
                    case 3:
                        return '[proÅ¡lu] [srijedu] [u] LT';
                    case 6:
                        return '[proÅ¡le] [subote] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[proÅ¡li] dddd [u] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'par sekundi',
            ss: translate$3,
            m: translate$3,
            mm: translate$3,
            h: translate$3,
            hh: translate$3,
            d: 'dan',
            dd: translate$3,
            M: 'mjesec',
            MM: translate$3,
            y: 'godinu',
            yy: translate$3,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var weekEndings = 'vasÃ¡rnap hÃ©tfÅ‘n kedden szerdÃ¡n csÃ¼tÃ¶rtÃ¶kÃ¶n pÃ©nteken szombaton'.split(
        ' '
    );
    function translate$4(number, withoutSuffix, key, isFuture) {
        var num = number;
        switch (key) {
            case 's':
                return isFuture || withoutSuffix
                    ? 'nÃ©hÃ¡ny mÃ¡sodperc'
                    : 'nÃ©hÃ¡ny mÃ¡sodperce';
            case 'ss':
                return num + (isFuture || withoutSuffix)
                    ? ' mÃ¡sodperc'
                    : ' mÃ¡sodperce';
            case 'm':
                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
            case 'mm':
                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
            case 'h':
                return 'egy' + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
            case 'hh':
                return num + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
            case 'd':
                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
            case 'dd':
                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
            case 'M':
                return 'egy' + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
            case 'MM':
                return num + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
            case 'y':
                return 'egy' + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
            case 'yy':
                return num + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
        }
        return '';
    }
    function week(isFuture) {
        return (
            (isFuture ? '' : '[mÃºlt] ') +
            '[' +
            weekEndings[this.day()] +
            '] LT[-kor]'
        );
    }

    moment.defineLocale('hu', {
        months: 'januÃ¡r_februÃ¡r_mÃ¡rcius_Ã¡prilis_mÃ¡jus_jÃºnius_jÃºlius_augusztus_szeptember_oktÃ³ber_november_december'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mÃ¡rc._Ã¡pr._mÃ¡j._jÃºn._jÃºl._aug._szept._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'vasÃ¡rnap_hÃ©tfÅ‘_kedd_szerda_csÃ¼tÃ¶rtÃ¶k_pÃ©ntek_szombat'.split('_'),
        weekdaysShort: 'vas_hÃ©t_kedd_sze_csÃ¼t_pÃ©n_szo'.split('_'),
        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'YYYY.MM.DD.',
            LL: 'YYYY. MMMM D.',
            LLL: 'YYYY. MMMM D. H:mm',
            LLLL: 'YYYY. MMMM D., dddd H:mm',
        },
        meridiemParse: /de|du/i,
        isPM: function (input) {
            return input.charAt(1).toLowerCase() === 'u';
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower === true ? 'de' : 'DE';
            } else {
                return isLower === true ? 'du' : 'DU';
            }
        },
        calendar: {
            sameDay: '[ma] LT[-kor]',
            nextDay: '[holnap] LT[-kor]',
            nextWeek: function () {
                return week.call(this, true);
            },
            lastDay: '[tegnap] LT[-kor]',
            lastWeek: function () {
                return week.call(this, false);
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s mÃºlva',
            past: '%s',
            s: translate$4,
            ss: translate$4,
            m: translate$4,
            mm: translate$4,
            h: translate$4,
            hh: translate$4,
            d: translate$4,
            dd: translate$4,
            M: translate$4,
            MM: translate$4,
            y: translate$4,
            yy: translate$4,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('hy-am', {
        months: {
            format: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€Õ«_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€Õ«_Õ´Õ¡Ö€Õ¿Õ«_Õ¡ÕºÖ€Õ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸Ö‚Õ¶Õ«Õ½Õ«_Õ°Õ¸Ö‚Õ¬Õ«Õ½Õ«_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«'.split(
                '_'
            ),
            standalone: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€_Õ´Õ¡Ö€Õ¿_Õ¡ÕºÖ€Õ«Õ¬_Õ´Õ¡ÕµÕ«Õ½_Õ°Õ¸Ö‚Õ¶Õ«Õ½_Õ°Õ¸Ö‚Õ¬Õ«Õ½_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'.split(
                '_'
            ),
        },
        monthsShort: 'Õ°Õ¶Õ¾_ÖƒÕ¿Ö€_Õ´Ö€Õ¿_Õ¡ÕºÖ€_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö…Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿'.split('_'),
        weekdays: 'Õ¯Õ«Ö€Õ¡Õ¯Õ«_Õ¥Ö€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«_Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸Ö‚Ö€Õ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©'.split(
            '_'
        ),
        weekdaysShort: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
        weekdaysMin: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Õ©.',
            LLL: 'D MMMM YYYY Õ©., HH:mm',
            LLLL: 'dddd, D MMMM YYYY Õ©., HH:mm',
        },
        calendar: {
            sameDay: '[Õ¡ÕµÕ½Ö…Ö€] LT',
            nextDay: '[Õ¾Õ¡Õ²Õ¨] LT',
            lastDay: '[Õ¥Ö€Õ¥Õ¯] LT',
            nextWeek: function () {
                return 'dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
            },
            lastWeek: function () {
                return '[Õ¡Õ¶ÖÕ¡Õ®] dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Õ°Õ¥Õ¿Õ¸',
            past: '%s Õ¡Õ¼Õ¡Õ»',
            s: 'Õ´Õ« Ö„Õ¡Õ¶Õ« Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
            ss: '%d Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
            m: 'Ö€Õ¸ÕºÕ¥',
            mm: '%d Ö€Õ¸ÕºÕ¥',
            h: 'ÕªÕ¡Õ´',
            hh: '%d ÕªÕ¡Õ´',
            d: 'Ö…Ö€',
            dd: '%d Ö…Ö€',
            M: 'Õ¡Õ´Õ«Õ½',
            MM: '%d Õ¡Õ´Õ«Õ½',
            y: 'Õ¿Õ¡Ö€Õ«',
            yy: '%d Õ¿Õ¡Ö€Õ«',
        },
        meridiemParse: /Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶/,
        isPM: function (input) {
            return /^(ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶)$/.test(input);
        },
        meridiem: function (hour) {
            if (hour < 4) {
                return 'Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡';
            } else if (hour < 12) {
                return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡';
            } else if (hour < 17) {
                return 'ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡';
            } else {
                return 'Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(Õ«Õ¶|Ö€Õ¤)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'DDD':
                case 'w':
                case 'W':
                case 'DDDo':
                    if (number === 1) {
                        return number + '-Õ«Õ¶';
                    }
                    return number + '-Ö€Õ¤';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('id', {
        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /pagi|siang|sore|malam/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'pagi') {
                return hour;
            } else if (meridiem === 'siang') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'sore' || meridiem === 'malam') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'pagi';
            } else if (hours < 15) {
                return 'siang';
            } else if (hours < 19) {
                return 'sore';
            } else {
                return 'malam';
            }
        },
        calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Besok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kemarin pukul] LT',
            lastWeek: 'dddd [lalu pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dalam %s',
            past: '%s yang lalu',
            s: 'beberapa detik',
            ss: '%d detik',
            m: 'semenit',
            mm: '%d menit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun',
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function plural$2(n) {
        if (n % 100 === 11) {
            return true;
        } else if (n % 10 === 1) {
            return false;
        }
        return true;
    }
    function translate$5(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's':
                return withoutSuffix || isFuture
                    ? 'nokkrar sekÃºndur'
                    : 'nokkrum sekÃºndum';
            case 'ss':
                if (plural$2(number)) {
                    return (
                        result +
                        (withoutSuffix || isFuture ? 'sekÃºndur' : 'sekÃºndum')
                    );
                }
                return result + 'sekÃºnda';
            case 'm':
                return withoutSuffix ? 'mÃ­nÃºta' : 'mÃ­nÃºtu';
            case 'mm':
                if (plural$2(number)) {
                    return (
                        result + (withoutSuffix || isFuture ? 'mÃ­nÃºtur' : 'mÃ­nÃºtum')
                    );
                } else if (withoutSuffix) {
                    return result + 'mÃ­nÃºta';
                }
                return result + 'mÃ­nÃºtu';
            case 'hh':
                if (plural$2(number)) {
                    return (
                        result +
                        (withoutSuffix || isFuture
                            ? 'klukkustundir'
                            : 'klukkustundum')
                    );
                }
                return result + 'klukkustund';
            case 'd':
                if (withoutSuffix) {
                    return 'dagur';
                }
                return isFuture ? 'dag' : 'degi';
            case 'dd':
                if (plural$2(number)) {
                    if (withoutSuffix) {
                        return result + 'dagar';
                    }
                    return result + (isFuture ? 'daga' : 'dÃ¶gum');
                } else if (withoutSuffix) {
                    return result + 'dagur';
                }
                return result + (isFuture ? 'dag' : 'degi');
            case 'M':
                if (withoutSuffix) {
                    return 'mÃ¡nuÃ°ur';
                }
                return isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i';
            case 'MM':
                if (plural$2(number)) {
                    if (withoutSuffix) {
                        return result + 'mÃ¡nuÃ°ir';
                    }
                    return result + (isFuture ? 'mÃ¡nuÃ°i' : 'mÃ¡nuÃ°um');
                } else if (withoutSuffix) {
                    return result + 'mÃ¡nuÃ°ur';
                }
                return result + (isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i');
            case 'y':
                return withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri';
            case 'yy':
                if (plural$2(number)) {
                    return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡rum');
                }
                return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri');
        }
    }

    moment.defineLocale('is', {
        months: 'janÃºar_febrÃºar_mars_aprÃ­l_maÃ­_jÃºnÃ­_jÃºlÃ­_Ã¡gÃºst_september_oktÃ³ber_nÃ³vember_desember'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_maÃ­_jÃºn_jÃºl_Ã¡gÃº_sep_okt_nÃ³v_des'.split('_'),
        weekdays: 'sunnudagur_mÃ¡nudagur_Ã¾riÃ°judagur_miÃ°vikudagur_fimmtudagur_fÃ¶studagur_laugardagur'.split(
            '_'
        ),
        weekdaysShort: 'sun_mÃ¡n_Ã¾ri_miÃ°_fim_fÃ¶s_lau'.split('_'),
        weekdaysMin: 'Su_MÃ¡_Ãžr_Mi_Fi_FÃ¶_La'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] H:mm',
            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
        },
        calendar: {
            sameDay: '[Ã­ dag kl.] LT',
            nextDay: '[Ã¡ morgun kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[Ã­ gÃ¦r kl.] LT',
            lastWeek: '[sÃ­Ã°asta] dddd [kl.] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'eftir %s',
            past: 'fyrir %s sÃ­Ã°an',
            s: translate$5,
            ss: translate$5,
            m: translate$5,
            mm: translate$5,
            h: 'klukkustund',
            hh: translate$5,
            d: translate$5,
            dd: translate$5,
            M: translate$5,
            MM: translate$5,
            y: translate$5,
            yy: translate$5,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('it-ch', {
        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
            '_'
        ),
        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
        weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
            '_'
        ),
        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Oggi alle] LT',
            nextDay: '[Domani alle] LT',
            nextWeek: 'dddd [alle] LT',
            lastDay: '[Ieri alle] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[la scorsa] dddd [alle] LT';
                    default:
                        return '[lo scorso] dddd [alle] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: function (s) {
                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
            },
            past: '%s fa',
            s: 'alcuni secondi',
            ss: '%d secondi',
            m: 'un minuto',
            mm: '%d minuti',
            h: "un'ora",
            hh: '%d ore',
            d: 'un giorno',
            dd: '%d giorni',
            M: 'un mese',
            MM: '%d mesi',
            y: 'un anno',
            yy: '%d anni',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('it', {
        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
            '_'
        ),
        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
        weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
            '_'
        ),
        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: function () {
                return (
                    '[Oggi a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            nextDay: function () {
                return (
                    '[Domani a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            nextWeek: function () {
                return (
                    'dddd [a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            lastDay: function () {
                return (
                    '[Ieri a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return (
                            '[La scorsa] dddd [a' +
                            (this.hours() > 1
                                ? 'lle '
                                : this.hours() === 0
                                ? ' '
                                : "ll'") +
                            ']LT'
                        );
                    default:
                        return (
                            '[Lo scorso] dddd [a' +
                            (this.hours() > 1
                                ? 'lle '
                                : this.hours() === 0
                                ? ' '
                                : "ll'") +
                            ']LT'
                        );
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'tra %s',
            past: '%s fa',
            s: 'alcuni secondi',
            ss: '%d secondi',
            m: 'un minuto',
            mm: '%d minuti',
            h: "un'ora",
            hh: '%d ore',
            d: 'un giorno',
            dd: '%d giorni',
            w: 'una settimana',
            ww: '%d settimane',
            M: 'un mese',
            MM: '%d mesi',
            y: 'un anno',
            yy: '%d anni',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ja', {
        eras: [
            {
                since: '2019-05-01',
                offset: 1,
                name: 'ä»¤å’Œ',
                narrow: 'ã‹¿',
                abbr: 'R',
            },
            {
                since: '1989-01-08',
                until: '2019-04-30',
                offset: 1,
                name: 'å¹³æˆ',
                narrow: 'ã»',
                abbr: 'H',
            },
            {
                since: '1926-12-25',
                until: '1989-01-07',
                offset: 1,
                name: 'æ˜­å’Œ',
                narrow: 'ã¼',
                abbr: 'S',
            },
            {
                since: '1912-07-30',
                until: '1926-12-24',
                offset: 1,
                name: 'å¤§æ­£',
                narrow: 'ã½',
                abbr: 'T',
            },
            {
                since: '1873-01-01',
                until: '1912-07-29',
                offset: 6,
                name: 'æ˜Žæ²»',
                narrow: 'ã¾',
                abbr: 'M',
            },
            {
                since: '0001-01-01',
                until: '1873-12-31',
                offset: 1,
                name: 'è¥¿æš¦',
                narrow: 'AD',
                abbr: 'AD',
            },
            {
                since: '0000-12-31',
                until: -Infinity,
                offset: 1,
                name: 'ç´€å…ƒå‰',
                narrow: 'BC',
                abbr: 'BC',
            },
        ],
        eraYearOrdinalRegex: /(å…ƒ|\d+)å¹´/,
        eraYearOrdinalParse: function (input, match) {
            return match[1] === 'å…ƒ' ? 1 : parseInt(match[1] || input, 10);
        },
        months: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split('_'),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ—¥æ›œæ—¥_æœˆæ›œæ—¥_ç«æ›œæ—¥_æ°´æ›œæ—¥_æœ¨æ›œæ—¥_é‡‘æ›œæ—¥_åœŸæ›œæ—¥'.split('_'),
        weekdaysShort: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
        weekdaysMin: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥ dddd HH:mm',
            l: 'YYYY/MM/DD',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥(ddd) HH:mm',
        },
        meridiemParse: /åˆå‰|åˆå¾Œ/i,
        isPM: function (input) {
            return input === 'åˆå¾Œ';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'åˆå‰';
            } else {
                return 'åˆå¾Œ';
            }
        },
        calendar: {
            sameDay: '[ä»Šæ—¥] LT',
            nextDay: '[æ˜Žæ—¥] LT',
            nextWeek: function (now) {
                if (now.week() !== this.week()) {
                    return '[æ¥é€±]dddd LT';
                } else {
                    return 'dddd LT';
                }
            },
            lastDay: '[æ˜¨æ—¥] LT',
            lastWeek: function (now) {
                if (this.week() !== now.week()) {
                    return '[å…ˆé€±]dddd LT';
                } else {
                    return 'dddd LT';
                }
            },
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}æ—¥/,
        ordinal: function (number, period) {
            switch (period) {
                case 'y':
                    return number === 1 ? 'å…ƒå¹´' : number + 'å¹´';
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så¾Œ',
            past: '%så‰',
            s: 'æ•°ç§’',
            ss: '%dç§’',
            m: '1åˆ†',
            mm: '%dåˆ†',
            h: '1æ™‚é–“',
            hh: '%dæ™‚é–“',
            d: '1æ—¥',
            dd: '%dæ—¥',
            M: '1ãƒ¶æœˆ',
            MM: '%dãƒ¶æœˆ',
            y: '1å¹´',
            yy: '%då¹´',
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('jv', {
        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /enjing|siyang|sonten|ndalu/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'enjing') {
                return hour;
            } else if (meridiem === 'siyang') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'enjing';
            } else if (hours < 15) {
                return 'siyang';
            } else if (hours < 19) {
                return 'sonten';
            } else {
                return 'ndalu';
            }
        },
        calendar: {
            sameDay: '[Dinten puniko pukul] LT',
            nextDay: '[Mbenjang pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kala wingi pukul] LT',
            lastWeek: 'dddd [kepengker pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'wonten ing %s',
            past: '%s ingkang kepengker',
            s: 'sawetawis detik',
            ss: '%d detik',
            m: 'setunggal menit',
            mm: '%d menit',
            h: 'setunggal jam',
            hh: '%d jam',
            d: 'sedinten',
            dd: '%d dinten',
            M: 'sewulan',
            MM: '%d wulan',
            y: 'setaun',
            yy: '%d taun',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ka', {
        months: 'áƒ˜áƒáƒœáƒ•áƒáƒ áƒ˜_áƒ—áƒ”áƒ‘áƒ”áƒ áƒ•áƒáƒšáƒ˜_áƒ›áƒáƒ áƒ¢áƒ˜_áƒáƒžáƒ áƒ˜áƒšáƒ˜_áƒ›áƒáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒœáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒšáƒ˜áƒ¡áƒ˜_áƒáƒ’áƒ•áƒ˜áƒ¡áƒ¢áƒ_áƒ¡áƒ”áƒ¥áƒ¢áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘áƒ”áƒ áƒ˜_áƒœáƒáƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒ“áƒ”áƒ™áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜'.split(
            '_'
        ),
        monthsShort: 'áƒ˜áƒáƒœ_áƒ—áƒ”áƒ‘_áƒ›áƒáƒ _áƒáƒžáƒ _áƒ›áƒáƒ˜_áƒ˜áƒ•áƒœ_áƒ˜áƒ•áƒš_áƒáƒ’áƒ•_áƒ¡áƒ”áƒ¥_áƒáƒ¥áƒ¢_áƒœáƒáƒ”_áƒ“áƒ”áƒ™'.split('_'),
        weekdays: {
            standalone: 'áƒ™áƒ•áƒ˜áƒ áƒ_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ˜_áƒ¨áƒáƒ‘áƒáƒ—áƒ˜'.split(
                '_'
            ),
            format: 'áƒ™áƒ•áƒ˜áƒ áƒáƒ¡_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ¡_áƒ¨áƒáƒ‘áƒáƒ—áƒ¡'.split(
                '_'
            ),
            isFormat: /(áƒ¬áƒ˜áƒœáƒ|áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’)/,
        },
        weekdaysShort: 'áƒ™áƒ•áƒ˜_áƒáƒ áƒ¨_áƒ¡áƒáƒ›_áƒáƒ—áƒ®_áƒ®áƒ£áƒ—_áƒžáƒáƒ _áƒ¨áƒáƒ‘'.split('_'),
        weekdaysMin: 'áƒ™áƒ•_áƒáƒ _áƒ¡áƒ_áƒáƒ—_áƒ®áƒ£_áƒžáƒ_áƒ¨áƒ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[áƒ“áƒ¦áƒ”áƒ¡] LT[-áƒ–áƒ”]',
            nextDay: '[áƒ®áƒ•áƒáƒš] LT[-áƒ–áƒ”]',
            lastDay: '[áƒ’áƒ£áƒ¨áƒ˜áƒœ] LT[-áƒ–áƒ”]',
            nextWeek: '[áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’] dddd LT[-áƒ–áƒ”]',
            lastWeek: '[áƒ¬áƒ˜áƒœáƒ] dddd LT-áƒ–áƒ”',
            sameElse: 'L',
        },
        relativeTime: {
            future: function (s) {
                return s.replace(/(áƒ¬áƒáƒ›|áƒ¬áƒ£áƒ—|áƒ¡áƒáƒáƒ—|áƒ¬áƒ”áƒš|áƒ“áƒ¦|áƒ—áƒ•)(áƒ˜|áƒ”)/, function (
                    $0,
                    $1,
                    $2
                ) {
                    return $2 === 'áƒ˜' ? $1 + 'áƒ¨áƒ˜' : $1 + $2 + 'áƒ¨áƒ˜';
                });
            },
            past: function (s) {
                if (/(áƒ¬áƒáƒ›áƒ˜|áƒ¬áƒ£áƒ—áƒ˜|áƒ¡áƒáƒáƒ—áƒ˜|áƒ“áƒ¦áƒ”|áƒ—áƒ•áƒ”)/.test(s)) {
                    return s.replace(/(áƒ˜|áƒ”)$/, 'áƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
                }
                if (/áƒ¬áƒ”áƒšáƒ˜/.test(s)) {
                    return s.replace(/áƒ¬áƒ”áƒšáƒ˜$/, 'áƒ¬áƒšáƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
                }
                return s;
            },
            s: 'áƒ áƒáƒ›áƒ“áƒ”áƒœáƒ˜áƒ›áƒ” áƒ¬áƒáƒ›áƒ˜',
            ss: '%d áƒ¬áƒáƒ›áƒ˜',
            m: 'áƒ¬áƒ£áƒ—áƒ˜',
            mm: '%d áƒ¬áƒ£áƒ—áƒ˜',
            h: 'áƒ¡áƒáƒáƒ—áƒ˜',
            hh: '%d áƒ¡áƒáƒáƒ—áƒ˜',
            d: 'áƒ“áƒ¦áƒ”',
            dd: '%d áƒ“áƒ¦áƒ”',
            M: 'áƒ—áƒ•áƒ”',
            MM: '%d áƒ—áƒ•áƒ”',
            y: 'áƒ¬áƒ”áƒšáƒ˜',
            yy: '%d áƒ¬áƒ”áƒšáƒ˜',
        },
        dayOfMonthOrdinalParse: /0|1-áƒšáƒ˜|áƒ›áƒ”-\d{1,2}|\d{1,2}-áƒ”/,
        ordinal: function (number) {
            if (number === 0) {
                return number;
            }
            if (number === 1) {
                return number + '-áƒšáƒ˜';
            }
            if (
                number < 20 ||
                (number <= 100 && number % 20 === 0) ||
                number % 100 === 0
            ) {
                return 'áƒ›áƒ”-' + number;
            }
            return number + '-áƒ”';
        },
        week: {
            dow: 1,
            doy: 7,
        },
    });

    //! moment.js locale configuration

    var suffixes$1 = {
        0: '-ÑˆÑ–',
        1: '-ÑˆÑ–',
        2: '-ÑˆÑ–',
        3: '-ÑˆÑ–',
        4: '-ÑˆÑ–',
        5: '-ÑˆÑ–',
        6: '-ÑˆÑ‹',
        7: '-ÑˆÑ–',
        8: '-ÑˆÑ–',
        9: '-ÑˆÑ‹',
        10: '-ÑˆÑ‹',
        20: '-ÑˆÑ‹',
        30: '-ÑˆÑ‹',
        40: '-ÑˆÑ‹',
        50: '-ÑˆÑ–',
        60: '-ÑˆÑ‹',
        70: '-ÑˆÑ–',
        80: '-ÑˆÑ–',
        90: '-ÑˆÑ‹',
        100: '-ÑˆÑ–',
    };

    moment.defineLocale('kk', {
        months: 'Ò›Ð°Ò£Ñ‚Ð°Ñ€_Ð°Ò›Ð¿Ð°Ð½_Ð½Ð°ÑƒÑ€Ñ‹Ð·_ÑÓ™ÑƒÑ–Ñ€_Ð¼Ð°Ð¼Ñ‹Ñ€_Ð¼Ð°ÑƒÑÑ‹Ð¼_ÑˆÑ–Ð»Ð´Ðµ_Ñ‚Ð°Ð¼Ñ‹Ð·_Ò›Ñ‹Ñ€ÐºÒ¯Ð¹ÐµÐº_Ò›Ð°Ð·Ð°Ð½_Ò›Ð°Ñ€Ð°ÑˆÐ°_Ð¶ÐµÐ»Ñ‚Ð¾Ò›ÑÐ°Ð½'.split(
            '_'
        ),
        monthsShort: 'Ò›Ð°Ò£_Ð°Ò›Ð¿_Ð½Ð°Ñƒ_ÑÓ™Ñƒ_Ð¼Ð°Ð¼_Ð¼Ð°Ñƒ_ÑˆÑ–Ð»_Ñ‚Ð°Ð¼_Ò›Ñ‹Ñ€_Ò›Ð°Ð·_Ò›Ð°Ñ€_Ð¶ÐµÐ»'.split('_'),
        weekdays: 'Ð¶ÐµÐºÑÐµÐ½Ð±Ñ–_Ð´Ò¯Ð¹ÑÐµÐ½Ð±Ñ–_ÑÐµÐ¹ÑÐµÐ½Ð±Ñ–_ÑÓ™Ñ€ÑÐµÐ½Ð±Ñ–_Ð±ÐµÐ¹ÑÐµÐ½Ð±Ñ–_Ð¶Ò±Ð¼Ð°_ÑÐµÐ½Ð±Ñ–'.split(
            '_'
        ),
        weekdaysShort: 'Ð¶ÐµÐº_Ð´Ò¯Ð¹_ÑÐµÐ¹_ÑÓ™Ñ€_Ð±ÐµÐ¹_Ð¶Ò±Ð¼_ÑÐµÐ½'.split('_'),
        weekdaysMin: 'Ð¶Ðº_Ð´Ð¹_ÑÐ¹_ÑÑ€_Ð±Ð¹_Ð¶Ð¼_ÑÐ½'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ð‘Ò¯Ð³Ñ–Ð½ ÑÐ°Ò“Ð°Ñ‚] LT',
            nextDay: '[Ð•Ñ€Ñ‚ÐµÒ£ ÑÐ°Ò“Ð°Ñ‚] LT',
            nextWeek: 'dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
            lastDay: '[ÐšÐµÑˆÐµ ÑÐ°Ò“Ð°Ñ‚] LT',
            lastWeek: '[Ó¨Ñ‚ÐºÐµÐ½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ò£] dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ñ–ÑˆÑ–Ð½Ð´Ðµ',
            past: '%s Ð±Ò±Ñ€Ñ‹Ð½',
            s: 'Ð±Ñ–Ñ€Ð½ÐµÑˆÐµ ÑÐµÐºÑƒÐ½Ð´',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´',
            m: 'Ð±Ñ–Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
            h: 'Ð±Ñ–Ñ€ ÑÐ°Ò“Ð°Ñ‚',
            hh: '%d ÑÐ°Ò“Ð°Ñ‚',
            d: 'Ð±Ñ–Ñ€ ÐºÒ¯Ð½',
            dd: '%d ÐºÒ¯Ð½',
            M: 'Ð±Ñ–Ñ€ Ð°Ð¹',
            MM: '%d Ð°Ð¹',
            y: 'Ð±Ñ–Ñ€ Ð¶Ñ‹Ð»',
            yy: '%d Ð¶Ñ‹Ð»',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÑˆÑ–|ÑˆÑ‹)/,
        ordinal: function (number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$9 = {
            1: 'áŸ¡',
            2: 'áŸ¢',
            3: 'áŸ£',
            4: 'áŸ¤',
            5: 'áŸ¥',
            6: 'áŸ¦',
            7: 'áŸ§',
            8: 'áŸ¨',
            9: 'áŸ©',
            0: 'áŸ ',
        },
        numberMap$8 = {
            'áŸ¡': '1',
            'áŸ¢': '2',
            'áŸ£': '3',
            'áŸ¤': '4',
            'áŸ¥': '5',
            'áŸ¦': '6',
            'áŸ§': '7',
            'áŸ¨': '8',
            'áŸ©': '9',
            'áŸ ': '0',
        };

    moment.defineLocale('km', {
        months: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
            '_'
        ),
        monthsShort: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
            '_'
        ),
        weekdays: 'áž¢áž¶áž‘áž·ážáŸ’áž™_áž…áŸáž“áŸ’áž‘_áž¢áž„áŸ’áž‚áž¶ážš_áž–áž»áž’_áž–áŸ’ážšáž ážŸáŸ’áž”ážáž·áŸ_ážŸáž»áž€áŸ’ážš_ážŸáŸ…ážšáŸ'.split('_'),
        weekdaysShort: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
        weekdaysMin: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        meridiemParse: /áž–áŸ’ážšáž¹áž€|áž›áŸ’áž„áž¶áž…/,
        isPM: function (input) {
            return input === 'áž›áŸ’áž„áž¶áž…';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'áž–áŸ’ážšáž¹áž€';
            } else {
                return 'áž›áŸ’áž„áž¶áž…';
            }
        },
        calendar: {
            sameDay: '[ážáŸ’áž„áŸƒáž“áŸáŸ‡ áž˜áŸ‰áŸ„áž„] LT',
            nextDay: '[ážŸáŸ’áž¢áŸ‚áž€ áž˜áŸ‰áŸ„áž„] LT',
            nextWeek: 'dddd [áž˜áŸ‰áŸ„áž„] LT',
            lastDay: '[áž˜áŸ’ážŸáž·áž›áž˜áž·áž‰ áž˜áŸ‰áŸ„áž„] LT',
            lastWeek: 'dddd [ážŸáž”áŸ’ážáž¶áž áŸáž˜áž»áž“] [áž˜áŸ‰áŸ„áž„] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sáž‘áŸ€áž',
            past: '%sáž˜áž»áž“',
            s: 'áž”áŸ‰áž»áž“áŸ’áž˜áž¶áž“ážœáž·áž“áž¶áž‘áž¸',
            ss: '%d ážœáž·áž“áž¶áž‘áž¸',
            m: 'áž˜áž½áž™áž“áž¶áž‘áž¸',
            mm: '%d áž“áž¶áž‘áž¸',
            h: 'áž˜áž½áž™áž˜áŸ‰áŸ„áž„',
            hh: '%d áž˜áŸ‰áŸ„áž„',
            d: 'áž˜áž½áž™ážáŸ’áž„áŸƒ',
            dd: '%d ážáŸ’áž„áŸƒ',
            M: 'áž˜áž½áž™ážáŸ‚',
            MM: '%d ážáŸ‚',
            y: 'áž˜áž½áž™áž†áŸ’áž“áž¶áŸ†',
            yy: '%d áž†áŸ’áž“áž¶áŸ†',
        },
        dayOfMonthOrdinalParse: /áž‘áž¸\d{1,2}/,
        ordinal: 'áž‘áž¸%d',
        preparse: function (string) {
            return string.replace(/[áŸ¡áŸ¢áŸ£áŸ¤áŸ¥áŸ¦áŸ§áŸ¨áŸ©áŸ ]/g, function (match) {
                return numberMap$8[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$9[match];
            });
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$a = {
            1: 'à³§',
            2: 'à³¨',
            3: 'à³©',
            4: 'à³ª',
            5: 'à³«',
            6: 'à³¬',
            7: 'à³­',
            8: 'à³®',
            9: 'à³¯',
            0: 'à³¦',
        },
        numberMap$9 = {
            'à³§': '1',
            'à³¨': '2',
            'à³©': '3',
            'à³ª': '4',
            'à³«': '5',
            'à³¬': '6',
            'à³­': '7',
            'à³®': '8',
            'à³¯': '9',
            'à³¦': '0',
        };

    moment.defineLocale('kn', {
        months: 'à²œà²¨à²µà²°à²¿_à²«à³†à²¬à³à²°à²µà²°à²¿_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚à²¬à²°à³_à²…à²•à³à²Ÿà³†à³‚à³•à²¬à²°à³_à²¨à²µà³†à²‚à²¬à²°à³_à²¡à²¿à²¸à³†à²‚à²¬à²°à³'.split(
            '_'
        ),
        monthsShort: 'à²œà²¨_à²«à³†à²¬à³à²°_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚_à²…à²•à³à²Ÿà³†à³‚à³•_à²¨à²µà³†à²‚_à²¡à²¿à²¸à³†à²‚'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à²­à²¾à²¨à³à²µà²¾à²°_à²¸à³†à³‚à³•à²®à²µà²¾à²°_à²®à²‚à²—à²³à²µà²¾à²°_à²¬à³à²§à²µà²¾à²°_à²—à³à²°à³à²µà²¾à²°_à²¶à³à²•à³à²°à²µà²¾à²°_à²¶à²¨à²¿à²µà²¾à²°'.split(
            '_'
        ),
        weekdaysShort: 'à²­à²¾à²¨à³_à²¸à³†à³‚à³•à²®_à²®à²‚à²—à²³_à²¬à³à²§_à²—à³à²°à³_à²¶à³à²•à³à²°_à²¶à²¨à²¿'.split('_'),
        weekdaysMin: 'à²­à²¾_à²¸à³†à³‚à³•_à²®à²‚_à²¬à³_à²—à³_à²¶à³_à²¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm',
        },
        calendar: {
            sameDay: '[à²‡à²‚à²¦à³] LT',
            nextDay: '[à²¨à²¾à²³à³†] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à²¨à²¿à²¨à³à²¨à³†] LT',
            lastWeek: '[à²•à³†à³‚à²¨à³†à²¯] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à²¨à²‚à²¤à²°',
            past: '%s à²¹à²¿à²‚à²¦à³†',
            s: 'à²•à³†à²²à²µà³ à²•à³à²·à²£à²—à²³à³',
            ss: '%d à²¸à³†à²•à³†à²‚à²¡à³à²—à²³à³',
            m: 'à²’à²‚à²¦à³ à²¨à²¿à²®à²¿à²·',
            mm: '%d à²¨à²¿à²®à²¿à²·',
            h: 'à²’à²‚à²¦à³ à²—à²‚à²Ÿà³†',
            hh: '%d à²—à²‚à²Ÿà³†',
            d: 'à²’à²‚à²¦à³ à²¦à²¿à²¨',
            dd: '%d à²¦à²¿à²¨',
            M: 'à²’à²‚à²¦à³ à²¤à²¿à²‚à²—à²³à³',
            MM: '%d à²¤à²¿à²‚à²—à²³à³',
            y: 'à²’à²‚à²¦à³ à²µà²°à³à²·',
            yy: '%d à²µà²°à³à²·',
        },
        preparse: function (string) {
            return string.replace(/[à³§à³¨à³©à³ªà³«à³¬à³­à³®à³¯à³¦]/g, function (match) {
                return numberMap$9[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$a[match];
            });
        },
        meridiemParse: /à²°à²¾à²¤à³à²°à²¿|à²¬à³†à²³à²¿à²—à³à²—à³†|à²®à²§à³à²¯à²¾à²¹à³à²¨|à²¸à²‚à²œà³†/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à²°à²¾à²¤à³à²°à²¿') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à²¬à³†à²³à²¿à²—à³à²—à³†') {
                return hour;
            } else if (meridiem === 'à²®à²§à³à²¯à²¾à²¹à³à²¨') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à²¸à²‚à²œà³†') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à²°à²¾à²¤à³à²°à²¿';
            } else if (hour < 10) {
                return 'à²¬à³†à²³à²¿à²—à³à²—à³†';
            } else if (hour < 17) {
                return 'à²®à²§à³à²¯à²¾à²¹à³à²¨';
            } else if (hour < 20) {
                return 'à²¸à²‚à²œà³†';
            } else {
                return 'à²°à²¾à²¤à³à²°à²¿';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}(à²¨à³†à³•)/,
        ordinal: function (number) {
            return number + 'à²¨à³†à³•';
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ko', {
        months: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split('_'),
        monthsShort: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split(
            '_'
        ),
        weekdays: 'ì¼ìš”ì¼_ì›”ìš”ì¼_í™”ìš”ì¼_ìˆ˜ìš”ì¼_ëª©ìš”ì¼_ê¸ˆìš”ì¼_í† ìš”ì¼'.split('_'),
        weekdaysShort: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
        weekdaysMin: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'YYYY.MM.DD.',
            LL: 'YYYYë…„ MMMM Dì¼',
            LLL: 'YYYYë…„ MMMM Dì¼ A h:mm',
            LLLL: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
            l: 'YYYY.MM.DD.',
            ll: 'YYYYë…„ MMMM Dì¼',
            lll: 'YYYYë…„ MMMM Dì¼ A h:mm',
            llll: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
        },
        calendar: {
            sameDay: 'ì˜¤ëŠ˜ LT',
            nextDay: 'ë‚´ì¼ LT',
            nextWeek: 'dddd LT',
            lastDay: 'ì–´ì œ LT',
            lastWeek: 'ì§€ë‚œì£¼ dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s í›„',
            past: '%s ì „',
            s: 'ëª‡ ì´ˆ',
            ss: '%dì´ˆ',
            m: '1ë¶„',
            mm: '%dë¶„',
            h: 'í•œ ì‹œê°„',
            hh: '%dì‹œê°„',
            d: 'í•˜ë£¨',
            dd: '%dì¼',
            M: 'í•œ ë‹¬',
            MM: '%dë‹¬',
            y: 'ì¼ ë…„',
            yy: '%dë…„',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ì¼|ì›”|ì£¼)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'ì¼';
                case 'M':
                    return number + 'ì›”';
                case 'w':
                case 'W':
                    return number + 'ì£¼';
                default:
                    return number;
            }
        },
        meridiemParse: /ì˜¤ì „|ì˜¤í›„/,
        isPM: function (token) {
            return token === 'ì˜¤í›„';
        },
        meridiem: function (hour, minute, isUpper) {
            return hour < 12 ? 'ì˜¤ì „' : 'ì˜¤í›„';
        },
    });

    //! moment.js locale configuration

    var symbolMap$b = {
            1: 'Ù¡',
            2: 'Ù¢',
            3: 'Ù£',
            4: 'Ù¤',
            5: 'Ù¥',
            6: 'Ù¦',
            7: 'Ù§',
            8: 'Ù¨',
            9: 'Ù©',
            0: 'Ù ',
        },
        numberMap$a = {
            'Ù¡': '1',
            'Ù¢': '2',
            'Ù£': '3',
            'Ù¤': '4',
            'Ù¥': '5',
            'Ù¦': '6',
            'Ù§': '7',
            'Ù¨': '8',
            'Ù©': '9',
            'Ù ': '0',
        },
        months$7 = [
            'Ú©Ø§Ù†ÙˆÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
            'Ø´ÙˆØ¨Ø§Øª',
            'Ø¦Ø§Ø²Ø§Ø±',
            'Ù†ÛŒØ³Ø§Ù†',
            'Ø¦Ø§ÛŒØ§Ø±',
            'Ø­ÙˆØ²Û•ÛŒØ±Ø§Ù†',
            'ØªÛ•Ù…Ù…ÙˆØ²',
            'Ø¦Ø§Ø¨',
            'Ø¦Û•ÛŒÙ„ÙˆÙˆÙ„',
            'ØªØ´Ø±ÛŒÙ†ÛŒ ÛŒÛ•ÙƒÛ•Ù…',
            'ØªØ´Ø±ÛŒÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
            'ÙƒØ§Ù†ÙˆÙ†ÛŒ ÛŒÛ•Ú©Û•Ù…',
        ];

    moment.defineLocale('ku', {
        months: months$7,
        monthsShort: months$7,
        weekdays: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø³ÛŽØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
            '_'
        ),
        weekdaysShort: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…_Ø³ÛŽØ´Ù‡â€ŒÙ…_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
            '_'
        ),
        weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ù‡_Ø´'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        meridiemParse: /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ|Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ/,
        isPM: function (input) {
            return /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ';
            } else {
                return 'Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ';
            }
        },
        calendar: {
            sameDay: '[Ø¦Ù‡â€ŒÙ…Ø±Û† ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            nextDay: '[Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            nextWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            lastDay: '[Ø¯ÙˆÛŽÙ†ÛŽ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            lastWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ù„Ù‡â€Œ %s',
            past: '%s',
            s: 'Ú†Ù‡â€ŒÙ†Ø¯ Ú†Ø±ÙƒÙ‡â€ŒÛŒÙ‡â€ŒÙƒ',
            ss: 'Ú†Ø±ÙƒÙ‡â€Œ %d',
            m: 'ÛŒÙ‡â€ŒÙƒ Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
            mm: '%d Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
            h: 'ÛŒÙ‡â€ŒÙƒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
            hh: '%d ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
            d: 'ÛŒÙ‡â€ŒÙƒ Ú•Û†Ú˜',
            dd: '%d Ú•Û†Ú˜',
            M: 'ÛŒÙ‡â€ŒÙƒ Ù…Ø§Ù†Ú¯',
            MM: '%d Ù…Ø§Ù†Ú¯',
            y: 'ÛŒÙ‡â€ŒÙƒ Ø³Ø§Úµ',
            yy: '%d Ø³Ø§Úµ',
        },
        preparse: function (string) {
            return string
                .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                    return numberMap$a[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap$b[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var suffixes$2 = {
        0: '-Ñ‡Ò¯',
        1: '-Ñ‡Ð¸',
        2: '-Ñ‡Ð¸',
        3: '-Ñ‡Ò¯',
        4: '-Ñ‡Ò¯',
        5: '-Ñ‡Ð¸',
        6: '-Ñ‡Ñ‹',
        7: '-Ñ‡Ð¸',
        8: '-Ñ‡Ð¸',
        9: '-Ñ‡Ñƒ',
        10: '-Ñ‡Ñƒ',
        20: '-Ñ‡Ñ‹',
        30: '-Ñ‡Ñƒ',
        40: '-Ñ‡Ñ‹',
        50: '-Ñ‡Ò¯',
        60: '-Ñ‡Ñ‹',
        70: '-Ñ‡Ð¸',
        80: '-Ñ‡Ð¸',
        90: '-Ñ‡Ñƒ',
        100: '-Ñ‡Ò¯',
    };

    moment.defineLocale('ky', {
        months: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
            '_'
        ),
        monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split(
            '_'
        ),
        weekdays: 'Ð–ÐµÐºÑˆÐµÐ¼Ð±Ð¸_Ð”Ò¯Ð¹ÑˆÓ©Ð¼Ð±Ò¯_Ð¨ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð¨Ð°Ñ€ÑˆÐµÐ¼Ð±Ð¸_Ð‘ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð–ÑƒÐ¼Ð°_Ð˜ÑˆÐµÐ¼Ð±Ð¸'.split(
            '_'
        ),
        weekdaysShort: 'Ð–ÐµÐº_Ð”Ò¯Ð¹_Ð¨ÐµÐ¹_Ð¨Ð°Ñ€_Ð‘ÐµÐ¹_Ð–ÑƒÐ¼_Ð˜ÑˆÐµ'.split('_'),
        weekdaysMin: 'Ð–Ðº_Ð”Ð¹_Ð¨Ð¹_Ð¨Ñ€_Ð‘Ð¹_Ð–Ð¼_Ð˜Ñˆ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ð‘Ò¯Ð³Ò¯Ð½ ÑÐ°Ð°Ñ‚] LT',
            nextDay: '[Ð­Ñ€Ñ‚ÐµÒ£ ÑÐ°Ð°Ñ‚] LT',
            nextWeek: 'dddd [ÑÐ°Ð°Ñ‚] LT',
            lastDay: '[ÐšÐµÑ‡ÑÑ ÑÐ°Ð°Ñ‚] LT',
            lastWeek: '[Ó¨Ñ‚ÐºÓ©Ð½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ð½] dddd [ÐºÒ¯Ð½Ò¯] [ÑÐ°Ð°Ñ‚] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ð¸Ñ‡Ð¸Ð½Ð´Ðµ',
            past: '%s Ð¼ÑƒÑ€ÑƒÐ½',
            s: 'Ð±Ð¸Ñ€Ð½ÐµÑ‡Ðµ ÑÐµÐºÑƒÐ½Ð´',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´',
            m: 'Ð±Ð¸Ñ€ Ð¼Ò¯Ð½Ó©Ñ‚',
            mm: '%d Ð¼Ò¯Ð½Ó©Ñ‚',
            h: 'Ð±Ð¸Ñ€ ÑÐ°Ð°Ñ‚',
            hh: '%d ÑÐ°Ð°Ñ‚',
            d: 'Ð±Ð¸Ñ€ ÐºÒ¯Ð½',
            dd: '%d ÐºÒ¯Ð½',
            M: 'Ð±Ð¸Ñ€ Ð°Ð¹',
            MM: '%d Ð°Ð¹',
            y: 'Ð±Ð¸Ñ€ Ð¶Ñ‹Ð»',
            yy: '%d Ð¶Ñ‹Ð»',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ñ‡Ð¸|Ñ‡Ñ‹|Ñ‡Ò¯|Ñ‡Ñƒ)/,
        ordinal: function (number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$6(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eng Minutt', 'enger Minutt'],
            h: ['eng Stonn', 'enger Stonn'],
            d: ['een Dag', 'engem Dag'],
            M: ['ee Mount', 'engem Mount'],
            y: ['ee Joer', 'engem Joer'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }
    function processFutureTime(string) {
        var number = string.substr(0, string.indexOf(' '));
        if (eifelerRegelAppliesToNumber(number)) {
            return 'a ' + string;
        }
        return 'an ' + string;
    }
    function processPastTime(string) {
        var number = string.substr(0, string.indexOf(' '));
        if (eifelerRegelAppliesToNumber(number)) {
            return 'viru ' + string;
        }
        return 'virun ' + string;
    }
    /**
     * Returns true if the word before the given number loses the '-n' ending.
     * e.g. 'an 10 Deeg' but 'a 5 Deeg'
     *
     * @param number {integer}
     * @returns {boolean}
     */
    function eifelerRegelAppliesToNumber(number) {
        number = parseInt(number, 10);
        if (isNaN(number)) {
            return false;
        }
        if (number < 0) {
            // Negative Number --> always true
            return true;
        } else if (number < 10) {
            // Only 1 digit
            if (4 <= number && number <= 7) {
                return true;
            }
            return false;
        } else if (number < 100) {
            // 2 digits
            var lastDigit = number % 10,
                firstDigit = number / 10;
            if (lastDigit === 0) {
                return eifelerRegelAppliesToNumber(firstDigit);
            }
            return eifelerRegelAppliesToNumber(lastDigit);
        } else if (number < 10000) {
            // 3 or 4 digits --> recursively check first digit
            while (number >= 10) {
                number = number / 10;
            }
            return eifelerRegelAppliesToNumber(number);
        } else {
            // Anything larger than 4 digits: recursively check first n-3 digits
            number = number / 1000;
            return eifelerRegelAppliesToNumber(number);
        }
    }

    moment.defineLocale('lb', {
        months: 'Januar_Februar_MÃ¤erz_AbrÃ«ll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonndeg_MÃ©indeg_DÃ«nschdeg_MÃ«ttwoch_Donneschdeg_Freideg_Samschdeg'.split(
            '_'
        ),
        weekdaysShort: 'So._MÃ©._DÃ«._MÃ«._Do._Fr._Sa.'.split('_'),
        weekdaysMin: 'So_MÃ©_DÃ«_MÃ«_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm [Auer]',
            LTS: 'H:mm:ss [Auer]',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm [Auer]',
            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
        },
        calendar: {
            sameDay: '[Haut um] LT',
            sameElse: 'L',
            nextDay: '[Muer um] LT',
            nextWeek: 'dddd [um] LT',
            lastDay: '[GÃ«schter um] LT',
            lastWeek: function () {
                // Different date string for 'DÃ«nschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
                switch (this.day()) {
                    case 2:
                    case 4:
                        return '[Leschten] dddd [um] LT';
                    default:
                        return '[Leschte] dddd [um] LT';
                }
            },
        },
        relativeTime: {
            future: processFutureTime,
            past: processPastTime,
            s: 'e puer Sekonnen',
            ss: '%d Sekonnen',
            m: processRelativeTime$6,
            mm: '%d Minutten',
            h: processRelativeTime$6,
            hh: '%d Stonnen',
            d: processRelativeTime$6,
            dd: '%d Deeg',
            M: processRelativeTime$6,
            MM: '%d MÃ©int',
            y: processRelativeTime$6,
            yy: '%d Joer',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('lo', {
        months: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
            '_'
        ),
        monthsShort: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
            '_'
        ),
        weekdays: 'àº­àº²àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
        weekdaysShort: 'àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
        weekdaysMin: 'àº—_àºˆ_àº­àº„_àºž_àºžàº«_àºªàº_àºª'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'àº§àº±àº™dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /àº•àº­àº™à»€àºŠàº»à»‰àº²|àº•àº­àº™à»àº¥àº‡/,
        isPM: function (input) {
            return input === 'àº•àº­àº™à»àº¥àº‡';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'àº•àº­àº™à»€àºŠàº»à»‰àº²';
            } else {
                return 'àº•àº­àº™à»àº¥àº‡';
            }
        },
        calendar: {
            sameDay: '[àº¡àº·à»‰àº™àºµà»‰à»€àº§àº¥àº²] LT',
            nextDay: '[àº¡àº·à»‰àº­àº·à»ˆàº™à»€àº§àº¥àº²] LT',
            nextWeek: '[àº§àº±àº™]dddd[à»œà»‰àº²à»€àº§àº¥àº²] LT',
            lastDay: '[àº¡àº·à»‰àº§àº²àº™àº™àºµà»‰à»€àº§àº¥àº²] LT',
            lastWeek: '[àº§àº±àº™]dddd[à»àº¥à»‰àº§àº™àºµà»‰à»€àº§àº¥àº²] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'àº­àºµàº %s',
            past: '%sàºœà»ˆàº²àº™àº¡àº²',
            s: 'àºšà»à»ˆà»€àº—àº»à»ˆàº²à»ƒàº”àº§àº´àº™àº²àº—àºµ',
            ss: '%d àº§àº´àº™àº²àº—àºµ',
            m: '1 àº™àº²àº—àºµ',
            mm: '%d àº™àº²àº—àºµ',
            h: '1 àºŠàº»à»ˆàº§à»‚àº¡àº‡',
            hh: '%d àºŠàº»à»ˆàº§à»‚àº¡àº‡',
            d: '1 àº¡àº·à»‰',
            dd: '%d àº¡àº·à»‰',
            M: '1 à»€àº”àº·àº­àº™',
            MM: '%d à»€àº”àº·àº­àº™',
            y: '1 àº›àºµ',
            yy: '%d àº›àºµ',
        },
        dayOfMonthOrdinalParse: /(àº—àºµà»ˆ)\d{1,2}/,
        ordinal: function (number) {
            return 'àº—àºµà»ˆ' + number;
        },
    });

    //! moment.js locale configuration

    var units = {
        ss: 'sekundÄ—_sekundÅ¾iÅ³_sekundes',
        m: 'minutÄ—_minutÄ—s_minutÄ™',
        mm: 'minutÄ—s_minuÄiÅ³_minutes',
        h: 'valanda_valandos_valandÄ…',
        hh: 'valandos_valandÅ³_valandas',
        d: 'diena_dienos_dienÄ…',
        dd: 'dienos_dienÅ³_dienas',
        M: 'mÄ—nuo_mÄ—nesio_mÄ—nesÄ¯',
        MM: 'mÄ—nesiai_mÄ—nesiÅ³_mÄ—nesius',
        y: 'metai_metÅ³_metus',
        yy: 'metai_metÅ³_metus',
    };
    function translateSeconds(number, withoutSuffix, key, isFuture) {
        if (withoutSuffix) {
            return 'kelios sekundÄ—s';
        } else {
            return isFuture ? 'keliÅ³ sekundÅ¾iÅ³' : 'kelias sekundes';
        }
    }
    function translateSingular(number, withoutSuffix, key, isFuture) {
        return withoutSuffix
            ? forms(key)[0]
            : isFuture
            ? forms(key)[1]
            : forms(key)[2];
    }
    function special(number) {
        return number % 10 === 0 || (number > 10 && number < 20);
    }
    function forms(key) {
        return units[key].split('_');
    }
    function translate$6(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        if (number === 1) {
            return (
                result + translateSingular(number, withoutSuffix, key[0], isFuture)
            );
        } else if (withoutSuffix) {
            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
        } else {
            if (isFuture) {
                return result + forms(key)[1];
            } else {
                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
            }
        }
    }
    moment.defineLocale('lt', {
        months: {
            format: 'sausio_vasario_kovo_balandÅ¾io_geguÅ¾Ä—s_birÅ¾elio_liepos_rugpjÅ«Äio_rugsÄ—jo_spalio_lapkriÄio_gruodÅ¾io'.split(
                '_'
            ),
            standalone: 'sausis_vasaris_kovas_balandis_geguÅ¾Ä—_birÅ¾elis_liepa_rugpjÅ«tis_rugsÄ—jis_spalis_lapkritis_gruodis'.split(
                '_'
            ),
            isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
        },
        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
        weekdays: {
            format: 'sekmadienÄ¯_pirmadienÄ¯_antradienÄ¯_treÄiadienÄ¯_ketvirtadienÄ¯_penktadienÄ¯_Å¡eÅ¡tadienÄ¯'.split(
                '_'
            ),
            standalone: 'sekmadienis_pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis'.split(
                '_'
            ),
            isFormat: /dddd HH:mm/,
        },
        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡'.split('_'),
        weekdaysMin: 'S_P_A_T_K_Pn_Å '.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY [m.] MMMM D [d.]',
            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
            l: 'YYYY-MM-DD',
            ll: 'YYYY [m.] MMMM D [d.]',
            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
        },
        calendar: {
            sameDay: '[Å iandien] LT',
            nextDay: '[Rytoj] LT',
            nextWeek: 'dddd LT',
            lastDay: '[Vakar] LT',
            lastWeek: '[PraÄ—jusÄ¯] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'po %s',
            past: 'prieÅ¡ %s',
            s: translateSeconds,
            ss: translate$6,
            m: translateSingular,
            mm: translate$6,
            h: translateSingular,
            hh: translate$6,
            d: translateSingular,
            dd: translate$6,
            M: translateSingular,
            MM: translate$6,
            y: translateSingular,
            yy: translate$6,
        },
        dayOfMonthOrdinalParse: /\d{1,2}-oji/,
        ordinal: function (number) {
            return number + '-oji';
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var units$1 = {
        ss: 'sekundes_sekundÄ“m_sekunde_sekundes'.split('_'),
        m: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
        mm: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
        h: 'stundas_stundÄm_stunda_stundas'.split('_'),
        hh: 'stundas_stundÄm_stunda_stundas'.split('_'),
        d: 'dienas_dienÄm_diena_dienas'.split('_'),
        dd: 'dienas_dienÄm_diena_dienas'.split('_'),
        M: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
        MM: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
        y: 'gada_gadiem_gads_gadi'.split('_'),
        yy: 'gada_gadiem_gads_gadi'.split('_'),
    };
    /**
     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
     */
    function format(forms, number, withoutSuffix) {
        if (withoutSuffix) {
            // E.g. "21 minÅ«te", "3 minÅ«tes".
            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
        } else {
            // E.g. "21 minÅ«tes" as in "pÄ“c 21 minÅ«tes".
            // E.g. "3 minÅ«tÄ“m" as in "pÄ“c 3 minÅ«tÄ“m".
            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
        }
    }
    function relativeTimeWithPlural$1(number, withoutSuffix, key) {
        return number + ' ' + format(units$1[key], number, withoutSuffix);
    }
    function relativeTimeWithSingular(number, withoutSuffix, key) {
        return format(units$1[key], number, withoutSuffix);
    }
    function relativeSeconds(number, withoutSuffix) {
        return withoutSuffix ? 'daÅ¾as sekundes' : 'daÅ¾Äm sekundÄ“m';
    }

    moment.defineLocale('lv', {
        months: 'janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec'.split('_'),
        weekdays: 'svÄ“tdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena'.split(
            '_'
        ),
        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY.',
            LL: 'YYYY. [gada] D. MMMM',
            LLL: 'YYYY. [gada] D. MMMM, HH:mm',
            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
        },
        calendar: {
            sameDay: '[Å odien pulksten] LT',
            nextDay: '[RÄ«t pulksten] LT',
            nextWeek: 'dddd [pulksten] LT',
            lastDay: '[Vakar pulksten] LT',
            lastWeek: '[PagÄjuÅ¡Ä] dddd [pulksten] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'pÄ“c %s',
            past: 'pirms %s',
            s: relativeSeconds,
            ss: relativeTimeWithPlural$1,
            m: relativeTimeWithSingular,
            mm: relativeTimeWithPlural$1,
            h: relativeTimeWithSingular,
            hh: relativeTimeWithPlural$1,
            d: relativeTimeWithSingular,
            dd: relativeTimeWithPlural$1,
            M: relativeTimeWithSingular,
            MM: relativeTimeWithPlural$1,
            y: relativeTimeWithSingular,
            yy: relativeTimeWithPlural$1,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var translator = {
        words: {
            //Different grammatical cases
            ss: ['sekund', 'sekunda', 'sekundi'],
            m: ['jedan minut', 'jednog minuta'],
            mm: ['minut', 'minuta', 'minuta'],
            h: ['jedan sat', 'jednog sata'],
            hh: ['sat', 'sata', 'sati'],
            dd: ['dan', 'dana', 'dana'],
            MM: ['mjesec', 'mjeseca', 'mjeseci'],
            yy: ['godina', 'godine', 'godina'],
        },
        correctGrammaticalCase: function (number, wordKey) {
            return number === 1
                ? wordKey[0]
                : number >= 2 && number <= 4
                ? wordKey[1]
                : wordKey[2];
        },
        translate: function (number, withoutSuffix, key) {
            var wordKey = translator.words[key];
            if (key.length === 1) {
                return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
                return (
                    number +
                    ' ' +
                    translator.correctGrammaticalCase(number, wordKey)
                );
            }
        },
    };

    moment.defineLocale('me', {
        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sjutra u] LT',

            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedjelju] [u] LT';
                    case 3:
                        return '[u] [srijedu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄe u] LT',
            lastWeek: function () {
                var lastWeekDays = [
                    '[proÅ¡le] [nedjelje] [u] LT',
                    '[proÅ¡log] [ponedjeljka] [u] LT',
                    '[proÅ¡log] [utorka] [u] LT',
                    '[proÅ¡le] [srijede] [u] LT',
                    '[proÅ¡log] [Äetvrtka] [u] LT',
                    '[proÅ¡log] [petka] [u] LT',
                    '[proÅ¡le] [subote] [u] LT',
                ];
                return lastWeekDays[this.day()];
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'nekoliko sekundi',
            ss: translator.translate,
            m: translator.translate,
            mm: translator.translate,
            h: translator.translate,
            hh: translator.translate,
            d: 'dan',
            dd: translator.translate,
            M: 'mjesec',
            MM: translator.translate,
            y: 'godinu',
            yy: translator.translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('mi', {
        months: 'Kohi-tÄte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whÄwhÄ_Haratua_Pipiri_HÅngoingoi_Here-turi-kÅkÄ_Mahuru_Whiringa-Ä-nuku_Whiringa-Ä-rangi_Hakihea'.split(
            '_'
        ),
        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_HÅngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
            '_'
        ),
        monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
        monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
        monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
        monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
        weekdays: 'RÄtapu_Mane_TÅ«rei_Wenerei_TÄite_Paraire_HÄtarei'.split('_'),
        weekdaysShort: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
        weekdaysMin: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [i] HH:mm',
            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
        },
        calendar: {
            sameDay: '[i teie mahana, i] LT',
            nextDay: '[apopo i] LT',
            nextWeek: 'dddd [i] LT',
            lastDay: '[inanahi i] LT',
            lastWeek: 'dddd [whakamutunga i] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'i roto i %s',
            past: '%s i mua',
            s: 'te hÄ“kona ruarua',
            ss: '%d hÄ“kona',
            m: 'he meneti',
            mm: '%d meneti',
            h: 'te haora',
            hh: '%d haora',
            d: 'he ra',
            dd: '%d ra',
            M: 'he marama',
            MM: '%d marama',
            y: 'he tau',
            yy: '%d tau',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('mk', {
        months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½Ð¸_Ñ˜ÑƒÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
            '_'
        ),
        monthsShort: 'Ñ˜Ð°Ð½_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
        weekdays: 'Ð½ÐµÐ´ÐµÐ»Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð¾Ðº_Ð¿ÐµÑ‚Ð¾Ðº_ÑÐ°Ð±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ðµ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÐ°Ð±'.split('_'),
        weekdaysMin: 'Ð½e_Ð¿o_Ð²Ñ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_Ña'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[Ð”ÐµÐ½ÐµÑ Ð²Ð¾] LT',
            nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²Ð¾] LT',
            nextWeek: '[Ð’Ð¾] dddd [Ð²Ð¾] LT',
            lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²Ð¾] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 6:
                        return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð°Ñ‚Ð°] dddd [Ð²Ð¾] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð¸Ð¾Ñ‚] dddd [Ð²Ð¾] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð·Ð° %s',
            past: 'Ð¿Ñ€ÐµÐ´ %s',
            s: 'Ð½ÐµÐºÐ¾Ð»ÐºÑƒ ÑÐµÐºÑƒÐ½Ð´Ð¸',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
            m: 'ÐµÐ´Ð½Ð° Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
            h: 'ÐµÐ´ÐµÐ½ Ñ‡Ð°Ñ',
            hh: '%d Ñ‡Ð°ÑÐ°',
            d: 'ÐµÐ´ÐµÐ½ Ð´ÐµÐ½',
            dd: '%d Ð´ÐµÐ½Ð°',
            M: 'ÐµÐ´ÐµÐ½ Ð¼ÐµÑÐµÑ†',
            MM: '%d Ð¼ÐµÑÐµÑ†Ð¸',
            y: 'ÐµÐ´Ð½Ð° Ð³Ð¾Ð´Ð¸Ð½Ð°',
            yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
        ordinal: function (number) {
            var lastDigit = number % 10,
                last2Digits = number % 100;
            if (number === 0) {
                return number + '-ÐµÐ²';
            } else if (last2Digits === 0) {
                return number + '-ÐµÐ½';
            } else if (last2Digits > 10 && last2Digits < 20) {
                return number + '-Ñ‚Ð¸';
            } else if (lastDigit === 1) {
                return number + '-Ð²Ð¸';
            } else if (lastDigit === 2) {
                return number + '-Ñ€Ð¸';
            } else if (lastDigit === 7 || lastDigit === 8) {
                return number + '-Ð¼Ð¸';
            } else {
                return number + '-Ñ‚Ð¸';
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ml', {
        months: 'à´œà´¨àµà´µà´°à´¿_à´«àµ†à´¬àµà´°àµà´µà´°à´¿_à´®à´¾àµ¼à´šàµà´šàµ_à´à´ªàµà´°à´¿àµ½_à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ_à´“à´—à´¸àµà´±àµà´±àµ_à´¸àµ†à´ªàµà´±àµà´±à´‚à´¬àµ¼_à´’à´•àµà´Ÿàµ‹à´¬àµ¼_à´¨à´µà´‚à´¬àµ¼_à´¡à´¿à´¸à´‚à´¬àµ¼'.split(
            '_'
        ),
        monthsShort: 'à´œà´¨àµ._à´«àµ†à´¬àµà´°àµ._à´®à´¾àµ¼._à´à´ªàµà´°à´¿._à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ._à´“à´—._à´¸àµ†à´ªàµà´±àµà´±._à´’à´•àµà´Ÿàµ‹._à´¨à´µà´‚._à´¡à´¿à´¸à´‚.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à´žà´¾à´¯à´±à´¾à´´àµà´š_à´¤à´¿à´™àµà´•à´³à´¾à´´àµà´š_à´šàµŠà´µàµà´µà´¾à´´àµà´š_à´¬àµà´§à´¨à´¾à´´àµà´š_à´µàµà´¯à´¾à´´à´¾à´´àµà´š_à´µàµ†à´³àµà´³à´¿à´¯à´¾à´´àµà´š_à´¶à´¨à´¿à´¯à´¾à´´àµà´š'.split(
            '_'
        ),
        weekdaysShort: 'à´žà´¾à´¯àµ¼_à´¤à´¿à´™àµà´•àµ¾_à´šàµŠà´µàµà´µ_à´¬àµà´§àµ»_à´µàµà´¯à´¾à´´à´‚_à´µàµ†à´³àµà´³à´¿_à´¶à´¨à´¿'.split('_'),
        weekdaysMin: 'à´žà´¾_à´¤à´¿_à´šàµŠ_à´¬àµ_à´µàµà´¯à´¾_à´µàµ†_à´¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm -à´¨àµ',
            LTS: 'A h:mm:ss -à´¨àµ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm -à´¨àµ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm -à´¨àµ',
        },
        calendar: {
            sameDay: '[à´‡à´¨àµà´¨àµ] LT',
            nextDay: '[à´¨à´¾à´³àµ†] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à´‡à´¨àµà´¨à´²àµ†] LT',
            lastWeek: '[à´•à´´à´¿à´žàµà´ž] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à´•à´´à´¿à´žàµà´žàµ',
            past: '%s à´®àµàµ»à´ªàµ',
            s: 'à´…àµ½à´ª à´¨à´¿à´®à´¿à´·à´™àµà´™àµ¾',
            ss: '%d à´¸àµ†à´•àµà´•àµ»à´¡àµ',
            m: 'à´’à´°àµ à´®à´¿à´¨à´¿à´±àµà´±àµ',
            mm: '%d à´®à´¿à´¨à´¿à´±àµà´±àµ',
            h: 'à´’à´°àµ à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
            hh: '%d à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
            d: 'à´’à´°àµ à´¦à´¿à´µà´¸à´‚',
            dd: '%d à´¦à´¿à´µà´¸à´‚',
            M: 'à´’à´°àµ à´®à´¾à´¸à´‚',
            MM: '%d à´®à´¾à´¸à´‚',
            y: 'à´’à´°àµ à´µàµ¼à´·à´‚',
            yy: '%d à´µàµ¼à´·à´‚',
        },
        meridiemParse: /à´°à´¾à´¤àµà´°à´¿|à´°à´¾à´µà´¿à´²àµ†|à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ|à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚|à´°à´¾à´¤àµà´°à´¿/i,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                (meridiem === 'à´°à´¾à´¤àµà´°à´¿' && hour >= 4) ||
                meridiem === 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ' ||
                meridiem === 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚'
            ) {
                return hour + 12;
            } else {
                return hour;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à´°à´¾à´¤àµà´°à´¿';
            } else if (hour < 12) {
                return 'à´°à´¾à´µà´¿à´²àµ†';
            } else if (hour < 17) {
                return 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ';
            } else if (hour < 20) {
                return 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚';
            } else {
                return 'à´°à´¾à´¤àµà´°à´¿';
            }
        },
    });

    //! moment.js locale configuration

    function translate$7(number, withoutSuffix, key, isFuture) {
        switch (key) {
            case 's':
                return withoutSuffix ? 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´' : 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½';
            case 'ss':
                return number + (withoutSuffix ? ' ÑÐµÐºÑƒÐ½Ð´' : ' ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½');
            case 'm':
            case 'mm':
                return number + (withoutSuffix ? ' Ð¼Ð¸Ð½ÑƒÑ‚' : ' Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹Ð½');
            case 'h':
            case 'hh':
                return number + (withoutSuffix ? ' Ñ†Ð°Ð³' : ' Ñ†Ð°Ð³Ð¸Ð¹Ð½');
            case 'd':
            case 'dd':
                return number + (withoutSuffix ? ' Ó©Ð´Ó©Ñ€' : ' Ó©Ð´Ñ€Ð¸Ð¹Ð½');
            case 'M':
            case 'MM':
                return number + (withoutSuffix ? ' ÑÐ°Ñ€' : ' ÑÐ°Ñ€Ñ‹Ð½');
            case 'y':
            case 'yy':
                return number + (withoutSuffix ? ' Ð¶Ð¸Ð»' : ' Ð¶Ð¸Ð»Ð¸Ð¹Ð½');
            default:
                return number;
        }
    }

    moment.defineLocale('mn', {
        months: 'ÐÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¥Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð“ÑƒÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ó©Ñ€Ó©Ð²Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¢Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð—ÑƒÑ€Ð³Ð°Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ð¾Ð»Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÐ°Ð¹Ð¼Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð•ÑÐ´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ð½ÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ñ…Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€'.split(
            '_'
        ),
        monthsShort: '1 ÑÐ°Ñ€_2 ÑÐ°Ñ€_3 ÑÐ°Ñ€_4 ÑÐ°Ñ€_5 ÑÐ°Ñ€_6 ÑÐ°Ñ€_7 ÑÐ°Ñ€_8 ÑÐ°Ñ€_9 ÑÐ°Ñ€_10 ÑÐ°Ñ€_11 ÑÐ°Ñ€_12 ÑÐ°Ñ€'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'ÐÑÐ¼_Ð”Ð°Ð²Ð°Ð°_ÐœÑÐ³Ð¼Ð°Ñ€_Ð›Ñ…Ð°Ð³Ð²Ð°_ÐŸÒ¯Ñ€ÑÐ²_Ð‘Ð°Ð°ÑÐ°Ð½_Ð‘ÑÐ¼Ð±Ð°'.split('_'),
        weekdaysShort: 'ÐÑÐ¼_Ð”Ð°Ð²_ÐœÑÐ³_Ð›Ñ…Ð°_ÐŸÒ¯Ñ€_Ð‘Ð°Ð°_Ð‘ÑÐ¼'.split('_'),
        weekdaysMin: 'ÐÑ_Ð”Ð°_ÐœÑ_Ð›Ñ…_ÐŸÒ¯_Ð‘Ð°_Ð‘Ñ'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D',
            LLL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
            LLLL: 'dddd, YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
        },
        meridiemParse: /Ò®Ó¨|Ò®Ð¥/i,
        isPM: function (input) {
            return input === 'Ò®Ð¥';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Ò®Ó¨';
            } else {
                return 'Ò®Ð¥';
            }
        },
        calendar: {
            sameDay: '[Ó¨Ð½Ó©Ó©Ð´Ó©Ñ€] LT',
            nextDay: '[ÐœÐ°Ñ€Ð³Ð°Ð°Ñˆ] LT',
            nextWeek: '[Ð˜Ñ€ÑÑ…] dddd LT',
            lastDay: '[Ó¨Ñ‡Ð¸Ð³Ð´Ó©Ñ€] LT',
            lastWeek: '[Ó¨Ð½Ð³Ó©Ñ€ÑÓ©Ð½] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ð´Ð°Ñ€Ð°Ð°',
            past: '%s Ó©Ð¼Ð½Ó©',
            s: translate$7,
            ss: translate$7,
            m: translate$7,
            mm: translate$7,
            h: translate$7,
            hh: translate$7,
            d: translate$7,
            dd: translate$7,
            M: translate$7,
            MM: translate$7,
            y: translate$7,
            yy: translate$7,
        },
        dayOfMonthOrdinalParse: /\d{1,2} Ó©Ð´Ó©Ñ€/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + ' Ó©Ð´Ó©Ñ€';
                default:
                    return number;
            }
        },
    });

    //! moment.js locale configuration

    var symbolMap$c = {
            1: 'à¥§',
            2: 'à¥¨',
            3: 'à¥©',
            4: 'à¥ª',
            5: 'à¥«',
            6: 'à¥¬',
            7: 'à¥­',
            8: 'à¥®',
            9: 'à¥¯',
            0: 'à¥¦',
        },
        numberMap$b = {
            'à¥§': '1',
            'à¥¨': '2',
            'à¥©': '3',
            'à¥ª': '4',
            'à¥«': '5',
            'à¥¬': '6',
            'à¥­': '7',
            'à¥®': '8',
            'à¥¯': '9',
            'à¥¦': '0',
        };

    function relativeTimeMr(number, withoutSuffix, string, isFuture) {
        var output = '';
        if (withoutSuffix) {
            switch (string) {
                case 's':
                    output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦';
                    break;
                case 'ss':
                    output = '%d à¤¸à¥‡à¤•à¤‚à¤¦';
                    break;
                case 'm':
                    output = 'à¤à¤• à¤®à¤¿à¤¨à¤¿à¤Ÿ';
                    break;
                case 'mm':
                    output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¥‡';
                    break;
                case 'h':
                    output = 'à¤à¤• à¤¤à¤¾à¤¸';
                    break;
                case 'hh':
                    output = '%d à¤¤à¤¾à¤¸';
                    break;
                case 'd':
                    output = 'à¤à¤• à¤¦à¤¿à¤µà¤¸';
                    break;
                case 'dd':
                    output = '%d à¤¦à¤¿à¤µà¤¸';
                    break;
                case 'M':
                    output = 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾';
                    break;
                case 'MM':
                    output = '%d à¤®à¤¹à¤¿à¤¨à¥‡';
                    break;
                case 'y':
                    output = 'à¤à¤• à¤µà¤°à¥à¤·';
                    break;
                case 'yy':
                    output = '%d à¤µà¤°à¥à¤·à¥‡';
                    break;
            }
        } else {
            switch (string) {
                case 's':
                    output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                    break;
                case 'ss':
                    output = '%d à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                    break;
                case 'm':
                    output = 'à¤à¤•à¤¾ à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾';
                    break;
                case 'mm':
                    output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾à¤‚';
                    break;
                case 'h':
                    output = 'à¤à¤•à¤¾ à¤¤à¤¾à¤¸à¤¾';
                    break;
                case 'hh':
                    output = '%d à¤¤à¤¾à¤¸à¤¾à¤‚';
                    break;
                case 'd':
                    output = 'à¤à¤•à¤¾ à¤¦à¤¿à¤µà¤¸à¤¾';
                    break;
                case 'dd':
                    output = '%d à¤¦à¤¿à¤µà¤¸à¤¾à¤‚';
                    break;
                case 'M':
                    output = 'à¤à¤•à¤¾ à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾';
                    break;
                case 'MM':
                    output = '%d à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾à¤‚';
                    break;
                case 'y':
                    output = 'à¤à¤•à¤¾ à¤µà¤°à¥à¤·à¤¾';
                    break;
                case 'yy':
                    output = '%d à¤µà¤°à¥à¤·à¤¾à¤‚';
                    break;
            }
        }
        return output.replace(/%d/i, number);
    }

    moment.defineLocale('mr', {
        months: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¤¿à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¥ˆ_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
            '_'
        ),
        monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š._à¤à¤ªà¥à¤°à¤¿._à¤®à¥‡._à¤œà¥‚à¤¨._à¤œà¥à¤²à¥ˆ._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤³à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
        weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤³_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
        weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
            LTS: 'A h:mm:ss à¤µà¤¾à¤œà¤¤à¤¾',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
        },
        calendar: {
            sameDay: '[à¤†à¤œ] LT',
            nextDay: '[à¤‰à¤¦à¥à¤¯à¤¾] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¤•à¤¾à¤²] LT',
            lastWeek: '[à¤®à¤¾à¤—à¥€à¤²] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sà¤®à¤§à¥à¤¯à¥‡',
            past: '%sà¤ªà¥‚à¤°à¥à¤µà¥€',
            s: relativeTimeMr,
            ss: relativeTimeMr,
            m: relativeTimeMr,
            mm: relativeTimeMr,
            h: relativeTimeMr,
            hh: relativeTimeMr,
            d: relativeTimeMr,
            dd: relativeTimeMr,
            M: relativeTimeMr,
            MM: relativeTimeMr,
            y: relativeTimeMr,
            yy: relativeTimeMr,
        },
        preparse: function (string) {
            return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
                return numberMap$b[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$c[match];
            });
        },
        meridiemParse: /à¤ªà¤¹à¤¾à¤Ÿà¥‡|à¤¸à¤•à¤¾à¤³à¥€|à¤¦à¥à¤ªà¤¾à¤°à¥€|à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€|à¤°à¤¾à¤¤à¥à¤°à¥€/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤ªà¤¹à¤¾à¤Ÿà¥‡' || meridiem === 'à¤¸à¤•à¤¾à¤³à¥€') {
                return hour;
            } else if (
                meridiem === 'à¤¦à¥à¤ªà¤¾à¤°à¥€' ||
                meridiem === 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€' ||
                meridiem === 'à¤°à¤¾à¤¤à¥à¤°à¥€'
            ) {
                return hour >= 12 ? hour : hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour >= 0 && hour < 6) {
                return 'à¤ªà¤¹à¤¾à¤Ÿà¥‡';
            } else if (hour < 12) {
                return 'à¤¸à¤•à¤¾à¤³à¥€';
            } else if (hour < 17) {
                return 'à¤¦à¥à¤ªà¤¾à¤°à¥€';
            } else if (hour < 20) {
                return 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€';
            } else {
                return 'à¤°à¤¾à¤¤à¥à¤°à¥€';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ms-my', {
        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /pagi|tengahari|petang|malam/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'pagi') {
                return hour;
            } else if (meridiem === 'tengahari') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'petang' || meridiem === 'malam') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'pagi';
            } else if (hours < 15) {
                return 'tengahari';
            } else if (hours < 19) {
                return 'petang';
            } else {
                return 'malam';
            }
        },
        calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Esok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kelmarin pukul] LT',
            lastWeek: 'dddd [lepas pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dalam %s',
            past: '%s yang lepas',
            s: 'beberapa saat',
            ss: '%d saat',
            m: 'seminit',
            mm: '%d minit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ms', {
        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /pagi|tengahari|petang|malam/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'pagi') {
                return hour;
            } else if (meridiem === 'tengahari') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'petang' || meridiem === 'malam') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'pagi';
            } else if (hours < 15) {
                return 'tengahari';
            } else if (hours < 19) {
                return 'petang';
            } else {
                return 'malam';
            }
        },
        calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Esok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kelmarin pukul] LT',
            lastWeek: 'dddd [lepas pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dalam %s',
            past: '%s yang lepas',
            s: 'beberapa saat',
            ss: '%d saat',
            m: 'seminit',
            mm: '%d minit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('mt', {
        months: 'Jannar_Frar_Marzu_April_Mejju_Ä unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_DiÄ‹embru'.split(
            '_'
        ),
        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ä un_Lul_Aww_Set_Ott_Nov_DiÄ‹'.split('_'),
        weekdays: 'Il-Ä¦add_It-Tnejn_It-Tlieta_L-ErbgÄ§a_Il-Ä¦amis_Il-Ä imgÄ§a_Is-Sibt'.split(
            '_'
        ),
        weekdaysShort: 'Ä¦ad_Tne_Tli_Erb_Ä¦am_Ä im_Sib'.split('_'),
        weekdaysMin: 'Ä¦a_Tn_Tl_Er_Ä¦a_Ä i_Si'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Illum fil-]LT',
            nextDay: '[GÄ§ada fil-]LT',
            nextWeek: 'dddd [fil-]LT',
            lastDay: '[Il-bieraÄ§ fil-]LT',
            lastWeek: 'dddd [li gÄ§adda] [fil-]LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'fâ€™ %s',
            past: '%s ilu',
            s: 'ftit sekondi',
            ss: '%d sekondi',
            m: 'minuta',
            mm: '%d minuti',
            h: 'siegÄ§a',
            hh: '%d siegÄ§at',
            d: 'Ä¡urnata',
            dd: '%d Ä¡ranet',
            M: 'xahar',
            MM: '%d xhur',
            y: 'sena',
            yy: '%d sni',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$d = {
            1: 'á',
            2: 'á‚',
            3: 'áƒ',
            4: 'á„',
            5: 'á…',
            6: 'á†',
            7: 'á‡',
            8: 'áˆ',
            9: 'á‰',
            0: 'á€',
        },
        numberMap$c = {
            'á': '1',
            'á‚': '2',
            'áƒ': '3',
            'á„': '4',
            'á…': '5',
            'á†': '6',
            'á‡': '7',
            'áˆ': '8',
            'á‰': '9',
            'á€': '0',
        };

    moment.defineLocale('my', {
        months: 'á€‡á€”á€ºá€”á€á€«á€›á€®_á€–á€±á€–á€±á€¬á€ºá€á€«á€›á€®_á€™á€á€º_á€§á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€‡á€°á€œá€­á€¯á€„á€º_á€žá€¼á€‚á€¯á€á€º_á€…á€€á€ºá€á€„á€ºá€˜á€¬_á€¡á€±á€¬á€€á€ºá€á€­á€¯á€˜á€¬_á€”á€­á€¯á€á€„á€ºá€˜á€¬_á€’á€®á€‡á€„á€ºá€˜á€¬'.split(
            '_'
        ),
        monthsShort: 'á€‡á€”á€º_á€–á€±_á€™á€á€º_á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€œá€­á€¯á€„á€º_á€žá€¼_á€…á€€á€º_á€¡á€±á€¬á€€á€º_á€”á€­á€¯_á€’á€®'.split('_'),
        weekdays: 'á€á€”á€„á€ºá€¹á€‚á€”á€½á€±_á€á€”á€„á€ºá€¹á€œá€¬_á€¡á€„á€ºá€¹á€‚á€«_á€—á€¯á€’á€¹á€“á€Ÿá€°á€¸_á€€á€¼á€¬á€žá€•á€á€±á€¸_á€žá€±á€¬á€€á€¼á€¬_á€…á€”á€±'.split(
            '_'
        ),
        weekdaysShort: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),
        weekdaysMin: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),

        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[á€šá€”á€±.] LT [á€™á€¾á€¬]',
            nextDay: '[á€™á€”á€€á€ºá€–á€¼á€”á€º] LT [á€™á€¾á€¬]',
            nextWeek: 'dddd LT [á€™á€¾á€¬]',
            lastDay: '[á€™á€”á€±.á€€] LT [á€™á€¾á€¬]',
            lastWeek: '[á€•á€¼á€®á€¸á€á€²á€·á€žá€±á€¬] dddd LT [á€™á€¾á€¬]',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'á€œá€¬á€™á€Šá€ºá€· %s á€™á€¾á€¬',
            past: 'á€œá€½á€”á€ºá€á€²á€·á€žá€±á€¬ %s á€€',
            s: 'á€…á€€á€¹á€€á€”á€º.á€¡á€”á€Šá€ºá€¸á€„á€šá€º',
            ss: '%d á€…á€€á€¹á€€á€”á€·á€º',
            m: 'á€á€…á€ºá€™á€­á€”á€…á€º',
            mm: '%d á€™á€­á€”á€…á€º',
            h: 'á€á€…á€ºá€”á€¬á€›á€®',
            hh: '%d á€”á€¬á€›á€®',
            d: 'á€á€…á€ºá€›á€€á€º',
            dd: '%d á€›á€€á€º',
            M: 'á€á€…á€ºá€œ',
            MM: '%d á€œ',
            y: 'á€á€…á€ºá€”á€¾á€…á€º',
            yy: '%d á€”á€¾á€…á€º',
        },
        preparse: function (string) {
            return string.replace(/[áá‚áƒá„á…á†á‡áˆá‰á€]/g, function (match) {
                return numberMap$c[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$d[match];
            });
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('nb', {
        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
        weekdaysShort: 'sÃ¸._ma._ti._on._to._fr._lÃ¸.'.split('_'),
        weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] HH:mm',
            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
        },
        calendar: {
            sameDay: '[i dag kl.] LT',
            nextDay: '[i morgen kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[i gÃ¥r kl.] LT',
            lastWeek: '[forrige] dddd [kl.] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: '%s siden',
            s: 'noen sekunder',
            ss: '%d sekunder',
            m: 'ett minutt',
            mm: '%d minutter',
            h: 'en time',
            hh: '%d timer',
            d: 'en dag',
            dd: '%d dager',
            w: 'en uke',
            ww: '%d uker',
            M: 'en mÃ¥ned',
            MM: '%d mÃ¥neder',
            y: 'ett Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$e = {
            1: 'à¥§',
            2: 'à¥¨',
            3: 'à¥©',
            4: 'à¥ª',
            5: 'à¥«',
            6: 'à¥¬',
            7: 'à¥­',
            8: 'à¥®',
            9: 'à¥¯',
            0: 'à¥¦',
        },
        numberMap$d = {
            'à¥§': '1',
            'à¥¨': '2',
            'à¥©': '3',
            'à¥ª': '4',
            'à¥«': '5',
            'à¥¬': '6',
            'à¥­': '7',
            'à¥®': '8',
            'à¥¯': '9',
            'à¥¦': '0',
        };

    moment.defineLocale('ne', {
        months: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿à¤²_à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤·à¥à¤Ÿ_à¤¸à¥‡à¤ªà¥à¤Ÿà¥‡à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤­à¥‡à¤®à¥à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤®à¥à¤¬à¤°'.split(
            '_'
        ),
        monthsShort: 'à¤œà¤¨._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿._à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ._à¤…à¤—._à¤¸à¥‡à¤ªà¥à¤Ÿ._à¤…à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤­à¥‡._à¤¡à¤¿à¤¸à¥‡.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¤†à¤‡à¤¤à¤¬à¤¾à¤°_à¤¸à¥‹à¤®à¤¬à¤¾à¤°_à¤®à¤™à¥à¤—à¤²à¤¬à¤¾à¤°_à¤¬à¥à¤§à¤¬à¤¾à¤°_à¤¬à¤¿à¤¹à¤¿à¤¬à¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤¬à¤¾à¤°_à¤¶à¤¨à¤¿à¤¬à¤¾à¤°'.split(
            '_'
        ),
        weekdaysShort: 'à¤†à¤‡à¤¤._à¤¸à¥‹à¤®._à¤®à¤™à¥à¤—à¤²._à¤¬à¥à¤§._à¤¬à¤¿à¤¹à¤¿._à¤¶à¥à¤•à¥à¤°._à¤¶à¤¨à¤¿.'.split('_'),
        weekdaysMin: 'à¤†._à¤¸à¥‹._à¤®à¤‚._à¤¬à¥._à¤¬à¤¿._à¤¶à¥._à¤¶.'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
            LTS: 'Aà¤•à¥‹ h:mm:ss à¤¬à¤œà¥‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
            LLLL: 'dddd, D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
        },
        preparse: function (string) {
            return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
                return numberMap$d[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$e[match];
            });
        },
        meridiemParse: /à¤°à¤¾à¤¤à¤¿|à¤¬à¤¿à¤¹à¤¾à¤¨|à¤¦à¤¿à¤‰à¤à¤¸à¥‹|à¤¸à¤¾à¤à¤/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤°à¤¾à¤¤à¤¿') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¤¬à¤¿à¤¹à¤¾à¤¨') {
                return hour;
            } else if (meridiem === 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¤¾à¤à¤') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 3) {
                return 'à¤°à¤¾à¤¤à¤¿';
            } else if (hour < 12) {
                return 'à¤¬à¤¿à¤¹à¤¾à¤¨';
            } else if (hour < 16) {
                return 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹';
            } else if (hour < 20) {
                return 'à¤¸à¤¾à¤à¤';
            } else {
                return 'à¤°à¤¾à¤¤à¤¿';
            }
        },
        calendar: {
            sameDay: '[à¤†à¤œ] LT',
            nextDay: '[à¤­à¥‹à¤²à¤¿] LT',
            nextWeek: '[à¤†à¤‰à¤à¤¦à¥‹] dddd[,] LT',
            lastDay: '[à¤¹à¤¿à¤œà¥‹] LT',
            lastWeek: '[à¤—à¤à¤•à¥‹] dddd[,] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sà¤®à¤¾',
            past: '%s à¤…à¤—à¤¾à¤¡à¤¿',
            s: 'à¤•à¥‡à¤¹à¥€ à¤•à¥à¤·à¤£',
            ss: '%d à¤¸à¥‡à¤•à¥‡à¤£à¥à¤¡',
            m: 'à¤à¤• à¤®à¤¿à¤¨à¥‡à¤Ÿ',
            mm: '%d à¤®à¤¿à¤¨à¥‡à¤Ÿ',
            h: 'à¤à¤• à¤˜à¤£à¥à¤Ÿà¤¾',
            hh: '%d à¤˜à¤£à¥à¤Ÿà¤¾',
            d: 'à¤à¤• à¤¦à¤¿à¤¨',
            dd: '%d à¤¦à¤¿à¤¨',
            M: 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾',
            MM: '%d à¤®à¤¹à¤¿à¤¨à¤¾',
            y: 'à¤à¤• à¤¬à¤°à¥à¤·',
            yy: '%d à¤¬à¤°à¥à¤·',
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
            '_'
        ),
        monthsParse$8 = [
            /^jan/i,
            /^feb/i,
            /^maart|mrt.?$/i,
            /^apr/i,
            /^mei$/i,
            /^jun[i.]?$/i,
            /^jul[i.]?$/i,
            /^aug/i,
            /^sep/i,
            /^okt/i,
            /^nov/i,
            /^dec/i,
        ],
        monthsRegex$7 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

    moment.defineLocale('nl-be', {
        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortWithDots$1;
            } else if (/-MMM-/.test(format)) {
                return monthsShortWithoutDots$1[m.month()];
            } else {
                return monthsShortWithDots$1[m.month()];
            }
        },

        monthsRegex: monthsRegex$7,
        monthsShortRegex: monthsRegex$7,
        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

        monthsParse: monthsParse$8,
        longMonthsParse: monthsParse$8,
        shortMonthsParse: monthsParse$8,

        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
            '_'
        ),
        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[vandaag om] LT',
            nextDay: '[morgen om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[gisteren om] LT',
            lastWeek: '[afgelopen] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'over %s',
            past: '%s geleden',
            s: 'een paar seconden',
            ss: '%d seconden',
            m: 'Ã©Ã©n minuut',
            mm: '%d minuten',
            h: 'Ã©Ã©n uur',
            hh: '%d uur',
            d: 'Ã©Ã©n dag',
            dd: '%d dagen',
            M: 'Ã©Ã©n maand',
            MM: '%d maanden',
            y: 'Ã©Ã©n jaar',
            yy: '%d jaar',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            );
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
            '_'
        ),
        monthsParse$9 = [
            /^jan/i,
            /^feb/i,
            /^maart|mrt.?$/i,
            /^apr/i,
            /^mei$/i,
            /^jun[i.]?$/i,
            /^jul[i.]?$/i,
            /^aug/i,
            /^sep/i,
            /^okt/i,
            /^nov/i,
            /^dec/i,
        ],
        monthsRegex$8 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

    moment.defineLocale('nl', {
        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortWithDots$2;
            } else if (/-MMM-/.test(format)) {
                return monthsShortWithoutDots$2[m.month()];
            } else {
                return monthsShortWithDots$2[m.month()];
            }
        },

        monthsRegex: monthsRegex$8,
        monthsShortRegex: monthsRegex$8,
        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

        monthsParse: monthsParse$9,
        longMonthsParse: monthsParse$9,
        shortMonthsParse: monthsParse$9,

        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
            '_'
        ),
        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[vandaag om] LT',
            nextDay: '[morgen om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[gisteren om] LT',
            lastWeek: '[afgelopen] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'over %s',
            past: '%s geleden',
            s: 'een paar seconden',
            ss: '%d seconden',
            m: 'Ã©Ã©n minuut',
            mm: '%d minuten',
            h: 'Ã©Ã©n uur',
            hh: '%d uur',
            d: 'Ã©Ã©n dag',
            dd: '%d dagen',
            w: 'Ã©Ã©n week',
            ww: '%d weken',
            M: 'Ã©Ã©n maand',
            MM: '%d maanden',
            y: 'Ã©Ã©n jaar',
            yy: '%d jaar',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            );
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('nn', {
        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
        weekdaysShort: 'su._mÃ¥._ty._on._to._fr._lau.'.split('_'),
        weekdaysMin: 'su_mÃ¥_ty_on_to_fr_la'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] H:mm',
            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
        },
        calendar: {
            sameDay: '[I dag klokka] LT',
            nextDay: '[I morgon klokka] LT',
            nextWeek: 'dddd [klokka] LT',
            lastDay: '[I gÃ¥r klokka] LT',
            lastWeek: '[FÃ¸regÃ¥ande] dddd [klokka] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: '%s sidan',
            s: 'nokre sekund',
            ss: '%d sekund',
            m: 'eit minutt',
            mm: '%d minutt',
            h: 'ein time',
            hh: '%d timar',
            d: 'ein dag',
            dd: '%d dagar',
            w: 'ei veke',
            ww: '%d veker',
            M: 'ein mÃ¥nad',
            MM: '%d mÃ¥nader',
            y: 'eit Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('oc-lnc', {
        months: {
            standalone: 'geniÃ¨r_febriÃ¨r_marÃ§_abril_mai_junh_julhet_agost_setembre_octÃ²bre_novembre_decembre'.split(
                '_'
            ),
            format: "de geniÃ¨r_de febriÃ¨r_de marÃ§_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octÃ²bre_de novembre_de decembre".split(
                '_'
            ),
            isFormat: /D[oD]?(\s)+MMMM/,
        },
        monthsShort: 'gen._febr._marÃ§_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'dimenge_diluns_dimars_dimÃ¨cres_dijÃ²us_divendres_dissabte'.split(
            '_'
        ),
        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [de] YYYY',
            ll: 'D MMM YYYY',
            LLL: 'D MMMM [de] YYYY [a] H:mm',
            lll: 'D MMM YYYY, H:mm',
            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
            llll: 'ddd D MMM YYYY, H:mm',
        },
        calendar: {
            sameDay: '[uÃ¨i a] LT',
            nextDay: '[deman a] LT',
            nextWeek: 'dddd [a] LT',
            lastDay: '[iÃ¨r a] LT',
            lastWeek: 'dddd [passat a] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: "d'aquÃ­ %s",
            past: 'fa %s',
            s: 'unas segondas',
            ss: '%d segondas',
            m: 'una minuta',
            mm: '%d minutas',
            h: 'una ora',
            hh: '%d oras',
            d: 'un jorn',
            dd: '%d jorns',
            M: 'un mes',
            MM: '%d meses',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
        ordinal: function (number, period) {
            var output =
                number === 1
                    ? 'r'
                    : number === 2
                    ? 'n'
                    : number === 3
                    ? 'r'
                    : number === 4
                    ? 't'
                    : 'Ã¨';
            if (period === 'w' || period === 'W') {
                output = 'a';
            }
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4,
        },
    });

    //! moment.js locale configuration

    var symbolMap$f = {
            1: 'à©§',
            2: 'à©¨',
            3: 'à©©',
            4: 'à©ª',
            5: 'à©«',
            6: 'à©¬',
            7: 'à©­',
            8: 'à©®',
            9: 'à©¯',
            0: 'à©¦',
        },
        numberMap$e = {
            'à©§': '1',
            'à©¨': '2',
            'à©©': '3',
            'à©ª': '4',
            'à©«': '5',
            'à©¬': '6',
            'à©­': '7',
            'à©®': '8',
            'à©¯': '9',
            'à©¦': '0',
        };

    moment.defineLocale('pa-in', {
        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
        months: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
            '_'
        ),
        monthsShort: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
            '_'
        ),
        weekdays: 'à¨à¨¤à¨µà¨¾à¨°_à¨¸à©‹à¨®à¨µà¨¾à¨°_à¨®à©°à¨—à¨²à¨µà¨¾à¨°_à¨¬à©à¨§à¨µà¨¾à¨°_à¨µà©€à¨°à¨µà¨¾à¨°_à¨¸à¨¼à©à©±à¨•à¨°à¨µà¨¾à¨°_à¨¸à¨¼à¨¨à©€à¨šà¨°à¨µà¨¾à¨°'.split(
            '_'
        ),
        weekdaysShort: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
        weekdaysMin: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¨µà¨œà©‡',
            LTS: 'A h:mm:ss à¨µà¨œà©‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¨µà¨œà©‡',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¨µà¨œà©‡',
        },
        calendar: {
            sameDay: '[à¨…à¨œ] LT',
            nextDay: '[à¨•à¨²] LT',
            nextWeek: '[à¨…à¨—à¨²à¨¾] dddd, LT',
            lastDay: '[à¨•à¨²] LT',
            lastWeek: '[à¨ªà¨¿à¨›à¨²à©‡] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¨µà¨¿à©±à¨š',
            past: '%s à¨ªà¨¿à¨›à¨²à©‡',
            s: 'à¨•à©à¨ à¨¸à¨•à¨¿à©°à¨Ÿ',
            ss: '%d à¨¸à¨•à¨¿à©°à¨Ÿ',
            m: 'à¨‡à¨• à¨®à¨¿à©°à¨Ÿ',
            mm: '%d à¨®à¨¿à©°à¨Ÿ',
            h: 'à¨‡à©±à¨• à¨˜à©°à¨Ÿà¨¾',
            hh: '%d à¨˜à©°à¨Ÿà©‡',
            d: 'à¨‡à©±à¨• à¨¦à¨¿à¨¨',
            dd: '%d à¨¦à¨¿à¨¨',
            M: 'à¨‡à©±à¨• à¨®à¨¹à©€à¨¨à¨¾',
            MM: '%d à¨®à¨¹à©€à¨¨à©‡',
            y: 'à¨‡à©±à¨• à¨¸à¨¾à¨²',
            yy: '%d à¨¸à¨¾à¨²',
        },
        preparse: function (string) {
            return string.replace(/[à©§à©¨à©©à©ªà©«à©¬à©­à©®à©¯à©¦]/g, function (match) {
                return numberMap$e[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$f[match];
            });
        },
        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
        meridiemParse: /à¨°à¨¾à¨¤|à¨¸à¨µà©‡à¨°|à¨¦à©à¨ªà¨¹à¨¿à¨°|à¨¸à¨¼à¨¾à¨®/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¨°à¨¾à¨¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¨¸à¨µà©‡à¨°') {
                return hour;
            } else if (meridiem === 'à¨¦à©à¨ªà¨¹à¨¿à¨°') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à¨¸à¨¼à¨¾à¨®') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¨°à¨¾à¨¤';
            } else if (hour < 10) {
                return 'à¨¸à¨µà©‡à¨°';
            } else if (hour < 17) {
                return 'à¨¦à©à¨ªà¨¹à¨¿à¨°';
            } else if (hour < 20) {
                return 'à¨¸à¨¼à¨¾à¨®';
            } else {
                return 'à¨°à¨¾à¨¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsNominative = 'styczeÅ„_luty_marzec_kwiecieÅ„_maj_czerwiec_lipiec_sierpieÅ„_wrzesieÅ„_paÅºdziernik_listopad_grudzieÅ„'.split(
            '_'
        ),
        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrzeÅ›nia_paÅºdziernika_listopada_grudnia'.split(
            '_'
        ),
        monthsParse$a = [
            /^sty/i,
            /^lut/i,
            /^mar/i,
            /^kwi/i,
            /^maj/i,
            /^cze/i,
            /^lip/i,
            /^sie/i,
            /^wrz/i,
            /^paÅº/i,
            /^lis/i,
            /^gru/i,
        ];
    function plural$3(n) {
        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
    }
    function translate$8(number, withoutSuffix, key) {
        var result = number + ' ';
        switch (key) {
            case 'ss':
                return result + (plural$3(number) ? 'sekundy' : 'sekund');
            case 'm':
                return withoutSuffix ? 'minuta' : 'minutÄ™';
            case 'mm':
                return result + (plural$3(number) ? 'minuty' : 'minut');
            case 'h':
                return withoutSuffix ? 'godzina' : 'godzinÄ™';
            case 'hh':
                return result + (plural$3(number) ? 'godziny' : 'godzin');
            case 'ww':
                return result + (plural$3(number) ? 'tygodnie' : 'tygodni');
            case 'MM':
                return result + (plural$3(number) ? 'miesiÄ…ce' : 'miesiÄ™cy');
            case 'yy':
                return result + (plural$3(number) ? 'lata' : 'lat');
        }
    }

    moment.defineLocale('pl', {
        months: function (momentToFormat, format) {
            if (!momentToFormat) {
                return monthsNominative;
            } else if (/D MMMM/.test(format)) {
                return monthsSubjective[momentToFormat.month()];
            } else {
                return monthsNominative[momentToFormat.month()];
            }
        },
        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paÅº_lis_gru'.split('_'),
        monthsParse: monthsParse$a,
        longMonthsParse: monthsParse$a,
        shortMonthsParse: monthsParse$a,
        weekdays: 'niedziela_poniedziaÅ‚ek_wtorek_Å›roda_czwartek_piÄ…tek_sobota'.split(
            '_'
        ),
        weekdaysShort: 'ndz_pon_wt_Å›r_czw_pt_sob'.split('_'),
        weekdaysMin: 'Nd_Pn_Wt_Åšr_Cz_Pt_So'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[DziÅ› o] LT',
            nextDay: '[Jutro o] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[W niedzielÄ™ o] LT';

                    case 2:
                        return '[We wtorek o] LT';

                    case 3:
                        return '[W Å›rodÄ™ o] LT';

                    case 6:
                        return '[W sobotÄ™ o] LT';

                    default:
                        return '[W] dddd [o] LT';
                }
            },
            lastDay: '[Wczoraj o] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[W zeszÅ‚Ä… niedzielÄ™ o] LT';
                    case 3:
                        return '[W zeszÅ‚Ä… Å›rodÄ™ o] LT';
                    case 6:
                        return '[W zeszÅ‚Ä… sobotÄ™ o] LT';
                    default:
                        return '[W zeszÅ‚y] dddd [o] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: '%s temu',
            s: 'kilka sekund',
            ss: translate$8,
            m: translate$8,
            mm: translate$8,
            h: translate$8,
            hh: translate$8,
            d: '1 dzieÅ„',
            dd: '%d dni',
            w: 'tydzieÅ„',
            ww: translate$8,
            M: 'miesiÄ…c',
            MM: translate$8,
            y: 'rok',
            yy: translate$8,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('pt-br', {
        months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
            '_'
        ),
        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
        weekdays: 'domingo_segunda-feira_terÃ§a-feira_quarta-feira_quinta-feira_sexta-feira_sÃ¡bado'.split(
            '_'
        ),
        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sÃ¡b'.split('_'),
        weekdaysMin: 'do_2Âª_3Âª_4Âª_5Âª_6Âª_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY [Ã s] HH:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY [Ã s] HH:mm',
        },
        calendar: {
            sameDay: '[Hoje Ã s] LT',
            nextDay: '[AmanhÃ£ Ã s] LT',
            nextWeek: 'dddd [Ã s] LT',
            lastDay: '[Ontem Ã s] LT',
            lastWeek: function () {
                return this.day() === 0 || this.day() === 6
                    ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                    : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'em %s',
            past: 'hÃ¡ %s',
            s: 'poucos segundos',
            ss: '%d segundos',
            m: 'um minuto',
            mm: '%d minutos',
            h: 'uma hora',
            hh: '%d horas',
            d: 'um dia',
            dd: '%d dias',
            M: 'um mÃªs',
            MM: '%d meses',
            y: 'um ano',
            yy: '%d anos',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        invalidDate: 'Data invÃ¡lida',
    });

    //! moment.js locale configuration

    moment.defineLocale('pt', {
        months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
            '_'
        ),
        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
        weekdays: 'Domingo_Segunda-feira_TerÃ§a-feira_Quarta-feira_Quinta-feira_Sexta-feira_SÃ¡bado'.split(
            '_'
        ),
        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_SÃ¡b'.split('_'),
        weekdaysMin: 'Do_2Âª_3Âª_4Âª_5Âª_6Âª_SÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY HH:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Hoje Ã s] LT',
            nextDay: '[AmanhÃ£ Ã s] LT',
            nextWeek: 'dddd [Ã s] LT',
            lastDay: '[Ontem Ã s] LT',
            lastWeek: function () {
                return this.day() === 0 || this.day() === 6
                    ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                    : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'em %s',
            past: 'hÃ¡ %s',
            s: 'segundos',
            ss: '%d segundos',
            m: 'um minuto',
            mm: '%d minutos',
            h: 'uma hora',
            hh: '%d horas',
            d: 'um dia',
            dd: '%d dias',
            w: 'uma semana',
            ww: '%d semanas',
            M: 'um mÃªs',
            MM: '%d meses',
            y: 'um ano',
            yy: '%d anos',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function relativeTimeWithPlural$2(number, withoutSuffix, key) {
        var format = {
                ss: 'secunde',
                mm: 'minute',
                hh: 'ore',
                dd: 'zile',
                ww: 'sÄƒptÄƒmÃ¢ni',
                MM: 'luni',
                yy: 'ani',
            },
            separator = ' ';
        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
            separator = ' de ';
        }
        return number + separator + format[key];
    }

    moment.defineLocale('ro', {
        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
            '_'
        ),
        monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'duminicÄƒ_luni_marÈ›i_miercuri_joi_vineri_sÃ¢mbÄƒtÄƒ'.split('_'),
        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_SÃ¢m'.split('_'),
        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_SÃ¢'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[azi la] LT',
            nextDay: '[mÃ¢ine la] LT',
            nextWeek: 'dddd [la] LT',
            lastDay: '[ieri la] LT',
            lastWeek: '[fosta] dddd [la] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'peste %s',
            past: '%s Ã®n urmÄƒ',
            s: 'cÃ¢teva secunde',
            ss: relativeTimeWithPlural$2,
            m: 'un minut',
            mm: relativeTimeWithPlural$2,
            h: 'o orÄƒ',
            hh: relativeTimeWithPlural$2,
            d: 'o zi',
            dd: relativeTimeWithPlural$2,
            w: 'o sÄƒptÄƒmÃ¢nÄƒ',
            ww: relativeTimeWithPlural$2,
            M: 'o lunÄƒ',
            MM: relativeTimeWithPlural$2,
            y: 'un an',
            yy: relativeTimeWithPlural$2,
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function plural$4(word, num) {
        var forms = word.split('_');
        return num % 10 === 1 && num % 100 !== 11
            ? forms[0]
            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
            ? forms[1]
            : forms[2];
    }
    function relativeTimeWithPlural$3(number, withoutSuffix, key) {
        var format = {
            ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
            mm: withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚',
            hh: 'Ñ‡Ð°Ñ_Ñ‡Ð°ÑÐ°_Ñ‡Ð°ÑÐ¾Ð²',
            dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ_Ð´Ð½ÐµÐ¹',
            ww: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð½ÐµÐ´ÐµÐ»Ð¸_Ð½ÐµÐ´ÐµÐ»ÑŒ',
            MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ð°_Ð¼ÐµÑÑÑ†ÐµÐ²',
            yy: 'Ð³Ð¾Ð´_Ð³Ð¾Ð´Ð°_Ð»ÐµÑ‚',
        };
        if (key === 'm') {
            return withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ';
        } else {
            return number + ' ' + plural$4(format[key], +number);
        }
    }
    var monthsParse$b = [
        /^ÑÐ½Ð²/i,
        /^Ñ„ÐµÐ²/i,
        /^Ð¼Ð°Ñ€/i,
        /^Ð°Ð¿Ñ€/i,
        /^Ð¼Ð°[Ð¹Ñ]/i,
        /^Ð¸ÑŽÐ½/i,
        /^Ð¸ÑŽÐ»/i,
        /^Ð°Ð²Ð³/i,
        /^ÑÐµÐ½/i,
        /^Ð¾ÐºÑ‚/i,
        /^Ð½Ð¾Ñ/i,
        /^Ð´ÐµÐº/i,
    ];

    // http://new.gramota.ru/spravka/rules/139-prop : Â§ 103
    // Ð¡Ð¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÑÑÑ†ÐµÐ²: http://new.gramota.ru/spravka/buro/search-answer?s=242637
    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
    moment.defineLocale('ru', {
        months: {
            format: 'ÑÐ½Ð²Ð°Ñ€Ñ_Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ_Ð¼Ð°Ñ€Ñ‚Ð°_Ð°Ð¿Ñ€ÐµÐ»Ñ_Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³ÑƒÑÑ‚Ð°_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ñ_Ð¾ÐºÑ‚ÑÐ±Ñ€Ñ_Ð½Ð¾ÑÐ±Ñ€Ñ_Ð´ÐµÐºÐ°Ð±Ñ€Ñ'.split(
                '_'
            ),
            standalone: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
                '_'
            ),
        },
        monthsShort: {
            // Ð¿Ð¾ CLDR Ð¸Ð¼ÐµÐ½Ð½Ð¾ "Ð¸ÑŽÐ»." Ð¸ "Ð¸ÑŽÐ½.", Ð½Ð¾ ÐºÐ°ÐºÐ¾Ð¹ ÑÐ¼Ñ‹ÑÐ» Ð¼ÐµÐ½ÑÑ‚ÑŒ Ð±ÑƒÐºÐ²Ñƒ Ð½Ð° Ñ‚Ð¾Ñ‡ÐºÑƒ?
            format: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
                '_'
            ),
            standalone: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€._Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
                '_'
            ),
        },
        weekdays: {
            standalone: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ð°_ÑÑƒÐ±Ð±Ð¾Ñ‚Ð°'.split(
                '_'
            ),
            format: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ñƒ_ÑÑƒÐ±Ð±Ð¾Ñ‚Ñƒ'.split(
                '_'
            ),
            isFormat: /\[ ?[Ð’Ð²] ?(?:Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ|ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ|ÑÑ‚Ñƒ)? ?] ?dddd/,
        },
        weekdaysShort: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        weekdaysMin: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        monthsParse: monthsParse$b,
        longMonthsParse: monthsParse$b,
        shortMonthsParse: monthsParse$b,

        // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸, Ð¿Ð¾ Ñ‚Ñ€Ð¸ Ð±ÑƒÐºÐ²Ñ‹, Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ…, Ð¿Ð¾ 4 Ð±ÑƒÐºÐ²Ñ‹, ÑÐ¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¸ Ð±ÐµÐ· Ñ‚Ð¾Ñ‡ÐºÐ¸
        monthsRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

        // ÐºÐ¾Ð¿Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ³Ð¾
        monthsShortRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

        // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸
        monthsStrictRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑÑŒ]|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑÑŒ]|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð°Ð¿Ñ€ÐµÐ»[ÑÑŒ]|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑÑŒ]|Ð¸ÑŽÐ»[ÑÑŒ]|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑÑŒ]|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑÑŒ]|Ð½Ð¾ÑÐ±Ñ€[ÑÑŒ]|Ð´ÐµÐºÐ°Ð±Ñ€[ÑÑŒ])/i,

        // Ð’Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ðµ ÑÐ¾Ð¾Ñ‚Ð²ÐµÑ‚ÑÑ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ ÑÐ¾ÐºÑ€Ð°Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ð¼
        monthsShortStrictRegex: /^(ÑÐ½Ð²\.|Ñ„ÐµÐ²Ñ€?\.|Ð¼Ð°Ñ€[Ñ‚.]|Ð°Ð¿Ñ€\.|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑŒÑ.]|Ð¸ÑŽÐ»[ÑŒÑ.]|Ð°Ð²Ð³\.|ÑÐµÐ½Ñ‚?\.|Ð¾ÐºÑ‚\.|Ð½Ð¾ÑÐ±?\.|Ð´ÐµÐº\.)/i,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Ð³.',
            LLL: 'D MMMM YYYY Ð³., H:mm',
            LLLL: 'dddd, D MMMM YYYY Ð³., H:mm',
        },
        calendar: {
            sameDay: '[Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ, Ð²] LT',
            nextDay: '[Ð—Ð°Ð²Ñ‚Ñ€Ð°, Ð²] LT',
            lastDay: '[Ð’Ñ‡ÐµÑ€Ð°, Ð²] LT',
            nextWeek: function (now) {
                if (now.week() !== this.week()) {
                    switch (this.day()) {
                        case 0:
                            return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐµ] dddd, [Ð²] LT';
                        case 1:
                        case 2:
                        case 4:
                            return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ð¹] dddd, [Ð²] LT';
                        case 3:
                        case 5:
                        case 6:
                            return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ] dddd, [Ð²] LT';
                    }
                } else {
                    if (this.day() === 2) {
                        return '[Ð’Ð¾] dddd, [Ð²] LT';
                    } else {
                        return '[Ð’] dddd, [Ð²] LT';
                    }
                }
            },
            lastWeek: function (now) {
                if (now.week() !== this.week()) {
                    switch (this.day()) {
                        case 0:
                            return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ðµ] dddd, [Ð²] LT';
                        case 1:
                        case 2:
                        case 4:
                            return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ñ‹Ð¹] dddd, [Ð²] LT';
                        case 3:
                        case 5:
                        case 6:
                            return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ] dddd, [Ð²] LT';
                    }
                } else {
                    if (this.day() === 2) {
                        return '[Ð’Ð¾] dddd, [Ð²] LT';
                    } else {
                        return '[Ð’] dddd, [Ð²] LT';
                    }
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ñ‡ÐµÑ€ÐµÐ· %s',
            past: '%s Ð½Ð°Ð·Ð°Ð´',
            s: 'Ð½ÐµÑÐºÐ¾Ð»ÑŒÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´',
            ss: relativeTimeWithPlural$3,
            m: relativeTimeWithPlural$3,
            mm: relativeTimeWithPlural$3,
            h: 'Ñ‡Ð°Ñ',
            hh: relativeTimeWithPlural$3,
            d: 'Ð´ÐµÐ½ÑŒ',
            dd: relativeTimeWithPlural$3,
            w: 'Ð½ÐµÐ´ÐµÐ»Ñ',
            ww: relativeTimeWithPlural$3,
            M: 'Ð¼ÐµÑÑÑ†',
            MM: relativeTimeWithPlural$3,
            y: 'Ð³Ð¾Ð´',
            yy: relativeTimeWithPlural$3,
        },
        meridiemParse: /Ð½Ð¾Ñ‡Ð¸|ÑƒÑ‚Ñ€Ð°|Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°/i,
        isPM: function (input) {
            return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'Ð½Ð¾Ñ‡Ð¸';
            } else if (hour < 12) {
                return 'ÑƒÑ‚Ñ€Ð°';
            } else if (hour < 17) {
                return 'Ð´Ð½Ñ';
            } else {
                return 'Ð²ÐµÑ‡ÐµÑ€Ð°';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾|Ñ)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'M':
                case 'd':
                case 'DDD':
                    return number + '-Ð¹';
                case 'D':
                    return number + '-Ð³Ð¾';
                case 'w':
                case 'W':
                    return number + '-Ñ';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$8 = [
            'Ø¬Ù†ÙˆØ±ÙŠ',
            'ÙÙŠØ¨Ø±ÙˆØ±ÙŠ',
            'Ù…Ø§Ø±Ú†',
            'Ø§Ù¾Ø±ÙŠÙ„',
            'Ù…Ø¦ÙŠ',
            'Ø¬ÙˆÙ†',
            'Ø¬ÙˆÙ„Ø§Ø¡Ù',
            'Ø¢Ú¯Ø³Ù½',
            'Ø³ÙŠÙ¾Ù½Ù…Ø¨Ø±',
            'Ø¢ÚªÙ½ÙˆØ¨Ø±',
            'Ù†ÙˆÙ…Ø¨Ø±',
            'ÚŠØ³Ù…Ø¨Ø±',
        ],
        days = ['Ø¢Ú†Ø±', 'Ø³ÙˆÙ…Ø±', 'Ø§Ú±Ø§Ø±Ùˆ', 'Ø§Ø±Ø¨Ø¹', 'Ø®Ù…ÙŠØ³', 'Ø¬Ù…Ø¹', 'Ú‡Ù†Ú‡Ø±'];

    moment.defineLocale('sd', {
        months: months$8,
        monthsShort: months$8,
        weekdays: days,
        weekdaysShort: days,
        weekdaysMin: days,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
        },
        meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
        isPM: function (input) {
            return 'Ø´Ø§Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'ØµØ¨Ø­';
            }
            return 'Ø´Ø§Ù…';
        },
        calendar: {
            sameDay: '[Ø§Ú„] LT',
            nextDay: '[Ø³Ú€Ø§Ú»ÙŠ] LT',
            nextWeek: 'dddd [Ø§Ú³ÙŠÙ† Ù‡ÙØªÙŠ ØªÙŠ] LT',
            lastDay: '[ÚªØ§Ù„Ù‡Ù‡] LT',
            lastWeek: '[Ú¯Ø²Ø±ÙŠÙ„ Ù‡ÙØªÙŠ] dddd [ØªÙŠ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ù¾ÙˆØ¡',
            past: '%s Ø§Ú³',
            s: 'Ú†Ù†Ø¯ Ø³ÙŠÚªÙ†ÚŠ',
            ss: '%d Ø³ÙŠÚªÙ†ÚŠ',
            m: 'Ù‡Úª Ù…Ù†Ù½',
            mm: '%d Ù…Ù†Ù½',
            h: 'Ù‡Úª ÚªÙ„Ø§Úª',
            hh: '%d ÚªÙ„Ø§Úª',
            d: 'Ù‡Úª ÚÙŠÙ†Ù‡Ù†',
            dd: '%d ÚÙŠÙ†Ù‡Ù†',
            M: 'Ù‡Úª Ù…Ù‡ÙŠÙ†Ùˆ',
            MM: '%d Ù…Ù‡ÙŠÙ†Ø§',
            y: 'Ù‡Úª Ø³Ø§Ù„',
            yy: '%d Ø³Ø§Ù„',
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('se', {
        months: 'oÄ‘Ä‘ajagemÃ¡nnu_guovvamÃ¡nnu_njukÄamÃ¡nnu_cuoÅ‹omÃ¡nnu_miessemÃ¡nnu_geassemÃ¡nnu_suoidnemÃ¡nnu_borgemÃ¡nnu_ÄakÄamÃ¡nnu_golggotmÃ¡nnu_skÃ¡bmamÃ¡nnu_juovlamÃ¡nnu'.split(
            '_'
        ),
        monthsShort: 'oÄ‘Ä‘j_guov_njuk_cuo_mies_geas_suoi_borg_ÄakÄ_golg_skÃ¡b_juov'.split(
            '_'
        ),
        weekdays: 'sotnabeaivi_vuossÃ¡rga_maÅ‹Å‹ebÃ¡rga_gaskavahkku_duorastat_bearjadat_lÃ¡vvardat'.split(
            '_'
        ),
        weekdaysShort: 'sotn_vuos_maÅ‹_gask_duor_bear_lÃ¡v'.split('_'),
        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'MMMM D. [b.] YYYY',
            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
        },
        calendar: {
            sameDay: '[otne ti] LT',
            nextDay: '[ihttin ti] LT',
            nextWeek: 'dddd [ti] LT',
            lastDay: '[ikte ti] LT',
            lastWeek: '[ovddit] dddd [ti] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s geaÅ¾es',
            past: 'maÅ‹it %s',
            s: 'moadde sekunddat',
            ss: '%d sekunddat',
            m: 'okta minuhta',
            mm: '%d minuhtat',
            h: 'okta diimmu',
            hh: '%d diimmut',
            d: 'okta beaivi',
            dd: '%d beaivvit',
            M: 'okta mÃ¡nnu',
            MM: '%d mÃ¡nut',
            y: 'okta jahki',
            yy: '%d jagit',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    /*jshint -W100*/
    moment.defineLocale('si', {
        months: 'à¶¢à¶±à·€à·à¶»à·’_à¶´à·™à¶¶à¶»à·€à·à¶»à·’_à¶¸à·à¶»à·Šà¶­à·”_à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·à·ƒà·Šà¶­à·”_à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š_à¶”à¶šà·Šà¶­à·à¶¶à¶»à·Š_à¶±à·œà·€à·à¶¸à·Šà¶¶à¶»à·Š_à¶¯à·™à·ƒà·à¶¸à·Šà¶¶à¶»à·Š'.split(
            '_'
        ),
        monthsShort: 'à¶¢à¶±_à¶´à·™à¶¶_à¶¸à·à¶»à·Š_à¶…à¶´à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·_à·ƒà·à¶´à·Š_à¶”à¶šà·Š_à¶±à·œà·€à·_à¶¯à·™à·ƒà·'.split(
            '_'
        ),
        weekdays: 'à¶‰à¶»à·’à¶¯à·_à·ƒà¶³à·”à¶¯à·_à¶…à¶Ÿà·„à¶»à·”à·€à·à¶¯à·_à¶¶à¶¯à·à¶¯à·_à¶¶à·Šâ€à¶»à·„à·ƒà·Šà¶´à¶­à·’à¶±à·Šà¶¯à·_à·ƒà·’à¶šà·”à¶»à·à¶¯à·_à·ƒà·™à¶±à·ƒà·”à¶»à·à¶¯à·'.split(
            '_'
        ),
        weekdaysShort: 'à¶‰à¶»à·’_à·ƒà¶³à·”_à¶…à¶Ÿ_à¶¶à¶¯à·_à¶¶à·Šâ€à¶»à·„_à·ƒà·’à¶šà·”_à·ƒà·™à¶±'.split('_'),
        weekdaysMin: 'à¶‰_à·ƒ_à¶…_à¶¶_à¶¶à·Šâ€à¶»_à·ƒà·’_à·ƒà·™'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'a h:mm',
            LTS: 'a h:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYY MMMM D',
            LLL: 'YYYY MMMM D, a h:mm',
            LLLL: 'YYYY MMMM D [à·€à·à¶±à·’] dddd, a h:mm:ss',
        },
        calendar: {
            sameDay: '[à¶…à¶¯] LT[à¶§]',
            nextDay: '[à·„à·™à¶§] LT[à¶§]',
            nextWeek: 'dddd LT[à¶§]',
            lastDay: '[à¶Šà¶ºà·š] LT[à¶§]',
            lastWeek: '[à¶´à·ƒà·”à¶œà·’à¶º] dddd LT[à¶§]',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sà¶šà·’à¶±à·Š',
            past: '%sà¶šà¶§ à¶´à·™à¶»',
            s: 'à¶­à¶­à·Šà¶´à¶» à¶šà·’à·„à·’à¶´à¶º',
            ss: 'à¶­à¶­à·Šà¶´à¶» %d',
            m: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·”à·€',
            mm: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·” %d',
            h: 'à¶´à·à¶º',
            hh: 'à¶´à·à¶º %d',
            d: 'à¶¯à·’à¶±à¶º',
            dd: 'à¶¯à·’à¶± %d',
            M: 'à¶¸à·à·ƒà¶º',
            MM: 'à¶¸à·à·ƒ %d',
            y: 'à·€à·ƒà¶»',
            yy: 'à·€à·ƒà¶» %d',
        },
        dayOfMonthOrdinalParse: /\d{1,2} à·€à·à¶±à·’/,
        ordinal: function (number) {
            return number + ' à·€à·à¶±à·’';
        },
        meridiemParse: /à¶´à·™à¶» à·€à¶»à·”|à¶´à·ƒà·Š à·€à¶»à·”|à¶´à·™.à·€|à¶´.à·€./,
        isPM: function (input) {
            return input === 'à¶´.à·€.' || input === 'à¶´à·ƒà·Š à·€à¶»à·”';
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? 'à¶´.à·€.' : 'à¶´à·ƒà·Š à·€à¶»à·”';
            } else {
                return isLower ? 'à¶´à·™.à·€.' : 'à¶´à·™à¶» à·€à¶»à·”';
            }
        },
    });

    //! moment.js locale configuration

    var months$9 = 'januÃ¡r_februÃ¡r_marec_aprÃ­l_mÃ¡j_jÃºn_jÃºl_august_september_oktÃ³ber_november_december'.split(
            '_'
        ),
        monthsShort$7 = 'jan_feb_mar_apr_mÃ¡j_jÃºn_jÃºl_aug_sep_okt_nov_dec'.split('_');
    function plural$5(n) {
        return n > 1 && n < 5;
    }
    function translate$9(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's': // a few seconds / in a few seconds / a few seconds ago
                return withoutSuffix || isFuture ? 'pÃ¡r sekÃºnd' : 'pÃ¡r sekundami';
            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'sekundy' : 'sekÃºnd');
                } else {
                    return result + 'sekundami';
                }
            case 'm': // a minute / in a minute / a minute ago
                return withoutSuffix ? 'minÃºta' : isFuture ? 'minÃºtu' : 'minÃºtou';
            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'minÃºty' : 'minÃºt');
                } else {
                    return result + 'minÃºtami';
                }
            case 'h': // an hour / in an hour / an hour ago
                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
            case 'hh': // 9 hours / in 9 hours / 9 hours ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'hodiny' : 'hodÃ­n');
                } else {
                    return result + 'hodinami';
                }
            case 'd': // a day / in a day / a day ago
                return withoutSuffix || isFuture ? 'deÅˆ' : 'dÅˆom';
            case 'dd': // 9 days / in 9 days / 9 days ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'dni' : 'dnÃ­');
                } else {
                    return result + 'dÅˆami';
                }
            case 'M': // a month / in a month / a month ago
                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
            case 'MM': // 9 months / in 9 months / 9 months ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'mesiace' : 'mesiacov');
                } else {
                    return result + 'mesiacmi';
                }
            case 'y': // a year / in a year / a year ago
                return withoutSuffix || isFuture ? 'rok' : 'rokom';
            case 'yy': // 9 years / in 9 years / 9 years ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'roky' : 'rokov');
                } else {
                    return result + 'rokmi';
                }
        }
    }

    moment.defineLocale('sk', {
        months: months$9,
        monthsShort: monthsShort$7,
        weekdays: 'nedeÄ¾a_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota'.split('_'),
        weekdaysShort: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
        weekdaysMin: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[dnes o] LT',
            nextDay: '[zajtra o] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[v nedeÄ¾u o] LT';
                    case 1:
                    case 2:
                        return '[v] dddd [o] LT';
                    case 3:
                        return '[v stredu o] LT';
                    case 4:
                        return '[vo Å¡tvrtok o] LT';
                    case 5:
                        return '[v piatok o] LT';
                    case 6:
                        return '[v sobotu o] LT';
                }
            },
            lastDay: '[vÄera o] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[minulÃº nedeÄ¾u o] LT';
                    case 1:
                    case 2:
                        return '[minulÃ½] dddd [o] LT';
                    case 3:
                        return '[minulÃº stredu o] LT';
                    case 4:
                    case 5:
                        return '[minulÃ½] dddd [o] LT';
                    case 6:
                        return '[minulÃº sobotu o] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'pred %s',
            s: translate$9,
            ss: translate$9,
            m: translate$9,
            mm: translate$9,
            h: translate$9,
            hh: translate$9,
            d: translate$9,
            dd: translate$9,
            M: translate$9,
            MM: translate$9,
            y: translate$9,
            yy: translate$9,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$7(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's':
                return withoutSuffix || isFuture
                    ? 'nekaj sekund'
                    : 'nekaj sekundami';
            case 'ss':
                if (number === 1) {
                    result += withoutSuffix ? 'sekundo' : 'sekundi';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
                } else {
                    result += 'sekund';
                }
                return result;
            case 'm':
                return withoutSuffix ? 'ena minuta' : 'eno minuto';
            case 'mm':
                if (number === 1) {
                    result += withoutSuffix ? 'minuta' : 'minuto';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';
                } else {
                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';
                }
                return result;
            case 'h':
                return withoutSuffix ? 'ena ura' : 'eno uro';
            case 'hh':
                if (number === 1) {
                    result += withoutSuffix ? 'ura' : 'uro';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'uri' : 'urama';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'ure' : 'urami';
                } else {
                    result += withoutSuffix || isFuture ? 'ur' : 'urami';
                }
                return result;
            case 'd':
                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
            case 'dd':
                if (number === 1) {
                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
                } else {
                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
                }
                return result;
            case 'M':
                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
            case 'MM':
                if (number === 1) {
                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
                } else {
                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
                }
                return result;
            case 'y':
                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
            case 'yy':
                if (number === 1) {
                    result += withoutSuffix || isFuture ? 'leto' : 'letom';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'leta' : 'leti';
                } else {
                    result += withoutSuffix || isFuture ? 'let' : 'leti';
                }
                return result;
        }
    }

    moment.defineLocale('sl', {
        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota'.split('_'),
        weekdaysShort: 'ned._pon._tor._sre._Äet._pet._sob.'.split('_'),
        weekdaysMin: 'ne_po_to_sr_Äe_pe_so'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD. MM. YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danes ob] LT',
            nextDay: '[jutri ob] LT',

            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[v] [nedeljo] [ob] LT';
                    case 3:
                        return '[v] [sredo] [ob] LT';
                    case 6:
                        return '[v] [soboto] [ob] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[v] dddd [ob] LT';
                }
            },
            lastDay: '[vÄeraj ob] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[prejÅ¡njo] [nedeljo] [ob] LT';
                    case 3:
                        return '[prejÅ¡njo] [sredo] [ob] LT';
                    case 6:
                        return '[prejÅ¡njo] [soboto] [ob] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[prejÅ¡nji] dddd [ob] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Äez %s',
            past: 'pred %s',
            s: processRelativeTime$7,
            ss: processRelativeTime$7,
            m: processRelativeTime$7,
            mm: processRelativeTime$7,
            h: processRelativeTime$7,
            hh: processRelativeTime$7,
            d: processRelativeTime$7,
            dd: processRelativeTime$7,
            M: processRelativeTime$7,
            MM: processRelativeTime$7,
            y: processRelativeTime$7,
            yy: processRelativeTime$7,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('sq', {
        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_NÃ«ntor_Dhjetor'.split(
            '_'
        ),
        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_NÃ«n_Dhj'.split('_'),
        weekdays: 'E Diel_E HÃ«nÃ«_E MartÃ«_E MÃ«rkurÃ«_E Enjte_E Premte_E ShtunÃ«'.split(
            '_'
        ),
        weekdaysShort: 'Die_HÃ«n_Mar_MÃ«r_Enj_Pre_Sht'.split('_'),
        weekdaysMin: 'D_H_Ma_MÃ«_E_P_Sh'.split('_'),
        weekdaysParseExact: true,
        meridiemParse: /PD|MD/,
        isPM: function (input) {
            return input.charAt(0) === 'M';
        },
        meridiem: function (hours, minutes, isLower) {
            return hours < 12 ? 'PD' : 'MD';
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Sot nÃ«] LT',
            nextDay: '[NesÃ«r nÃ«] LT',
            nextWeek: 'dddd [nÃ«] LT',
            lastDay: '[Dje nÃ«] LT',
            lastWeek: 'dddd [e kaluar nÃ«] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'nÃ« %s',
            past: '%s mÃ« parÃ«',
            s: 'disa sekonda',
            ss: '%d sekonda',
            m: 'njÃ« minutÃ«',
            mm: '%d minuta',
            h: 'njÃ« orÃ«',
            hh: '%d orÃ«',
            d: 'njÃ« ditÃ«',
            dd: '%d ditÃ«',
            M: 'njÃ« muaj',
            MM: '%d muaj',
            y: 'njÃ« vit',
            yy: '%d vite',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var translator$1 = {
        words: {
            //Different grammatical cases
            ss: ['ÑÐµÐºÑƒÐ½Ð´Ð°', 'ÑÐµÐºÑƒÐ½Ð´Ðµ', 'ÑÐµÐºÑƒÐ½Ð´Ð¸'],
            m: ['Ñ˜ÐµÐ´Ð°Ð½ Ð¼Ð¸Ð½ÑƒÑ‚', 'Ñ˜ÐµÐ´Ð½Ðµ Ð¼Ð¸Ð½ÑƒÑ‚Ðµ'],
            mm: ['Ð¼Ð¸Ð½ÑƒÑ‚', 'Ð¼Ð¸Ð½ÑƒÑ‚Ðµ', 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°'],
            h: ['Ñ˜ÐµÐ´Ð°Ð½ ÑÐ°Ñ‚', 'Ñ˜ÐµÐ´Ð½Ð¾Ð³ ÑÐ°Ñ‚Ð°'],
            hh: ['ÑÐ°Ñ‚', 'ÑÐ°Ñ‚Ð°', 'ÑÐ°Ñ‚Ð¸'],
            dd: ['Ð´Ð°Ð½', 'Ð´Ð°Ð½Ð°', 'Ð´Ð°Ð½Ð°'],
            MM: ['Ð¼ÐµÑÐµÑ†', 'Ð¼ÐµÑÐµÑ†Ð°', 'Ð¼ÐµÑÐµÑ†Ð¸'],
            yy: ['Ð³Ð¾Ð´Ð¸Ð½Ð°', 'Ð³Ð¾Ð´Ð¸Ð½Ðµ', 'Ð³Ð¾Ð´Ð¸Ð½Ð°'],
        },
        correctGrammaticalCase: function (number, wordKey) {
            return number === 1
                ? wordKey[0]
                : number >= 2 && number <= 4
                ? wordKey[1]
                : wordKey[2];
        },
        translate: function (number, withoutSuffix, key) {
            var wordKey = translator$1.words[key];
            if (key.length === 1) {
                return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
                return (
                    number +
                    ' ' +
                    translator$1.correctGrammaticalCase(number, wordKey)
                );
            }
        },
    };

    moment.defineLocale('sr-cyrl', {
        months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€_Ñ„ÐµÐ±Ñ€ÑƒÐ°Ñ€_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð±Ð°Ñ€_Ð¾ÐºÑ‚Ð¾Ð±Ð°Ñ€_Ð½Ð¾Ð²ÐµÐ¼Ð±Ð°Ñ€_Ð´ÐµÑ†ÐµÐ¼Ð±Ð°Ñ€'.split(
            '_'
        ),
        monthsShort: 'Ñ˜Ð°Ð½._Ñ„ÐµÐ±._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³._ÑÐµÐ¿._Ð¾ÐºÑ‚._Ð½Ð¾Ð²._Ð´ÐµÑ†.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Ð½ÐµÐ´ÐµÑ™Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™Ð°Ðº_ÑƒÑ‚Ð¾Ñ€Ð°Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð°Ðº_Ð¿ÐµÑ‚Ð°Ðº_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split('_'),
        weekdaysShort: 'Ð½ÐµÐ´._Ð¿Ð¾Ð½._ÑƒÑ‚Ð¾._ÑÑ€Ðµ._Ñ‡ÐµÑ‚._Ð¿ÐµÑ‚._ÑÑƒÐ±.'.split('_'),
        weekdaysMin: 'Ð½Ðµ_Ð¿Ð¾_ÑƒÑ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_ÑÑƒ'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D. M. YYYY.',
            LL: 'D. MMMM YYYY.',
            LLL: 'D. MMMM YYYY. H:mm',
            LLLL: 'dddd, D. MMMM YYYY. H:mm',
        },
        calendar: {
            sameDay: '[Ð´Ð°Ð½Ð°Ñ Ñƒ] LT',
            nextDay: '[ÑÑƒÑ‚Ñ€Ð° Ñƒ] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[Ñƒ] [Ð½ÐµÐ´ÐµÑ™Ñƒ] [Ñƒ] LT';
                    case 3:
                        return '[Ñƒ] [ÑÑ€ÐµÐ´Ñƒ] [Ñƒ] LT';
                    case 6:
                        return '[Ñƒ] [ÑÑƒÐ±Ð¾Ñ‚Ñƒ] [Ñƒ] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[Ñƒ] dddd [Ñƒ] LT';
                }
            },
            lastDay: '[Ñ˜ÑƒÑ‡Ðµ Ñƒ] LT',
            lastWeek: function () {
                var lastWeekDays = [
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [Ð½ÐµÐ´ÐµÑ™Ðµ] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [ÑƒÑ‚Ð¾Ñ€ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑ€ÐµÐ´Ðµ] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿ÐµÑ‚ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑƒÐ±Ð¾Ñ‚Ðµ] [Ñƒ] LT',
                ];
                return lastWeekDays[this.day()];
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð·Ð° %s',
            past: 'Ð¿Ñ€Ðµ %s',
            s: 'Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
            ss: translator$1.translate,
            m: translator$1.translate,
            mm: translator$1.translate,
            h: translator$1.translate,
            hh: translator$1.translate,
            d: 'Ð´Ð°Ð½',
            dd: translator$1.translate,
            M: 'Ð¼ÐµÑÐµÑ†',
            MM: translator$1.translate,
            y: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
            yy: translator$1.translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 1st is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var translator$2 = {
        words: {
            //Different grammatical cases
            ss: ['sekunda', 'sekunde', 'sekundi'],
            m: ['jedan minut', 'jedne minute'],
            mm: ['minut', 'minute', 'minuta'],
            h: ['jedan sat', 'jednog sata'],
            hh: ['sat', 'sata', 'sati'],
            dd: ['dan', 'dana', 'dana'],
            MM: ['mesec', 'meseca', 'meseci'],
            yy: ['godina', 'godine', 'godina'],
        },
        correctGrammaticalCase: function (number, wordKey) {
            return number === 1
                ? wordKey[0]
                : number >= 2 && number <= 4
                ? wordKey[1]
                : wordKey[2];
        },
        translate: function (number, withoutSuffix, key) {
            var wordKey = translator$2.words[key];
            if (key.length === 1) {
                return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
                return (
                    number +
                    ' ' +
                    translator$2.correctGrammaticalCase(number, wordKey)
                );
            }
        },
    };

    moment.defineLocale('sr', {
        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedelja_ponedeljak_utorak_sreda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sre._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D. M. YYYY.',
            LL: 'D. MMMM YYYY.',
            LLL: 'D. MMMM YYYY. H:mm',
            LLLL: 'dddd, D. MMMM YYYY. H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedelju] [u] LT';
                    case 3:
                        return '[u] [sredu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄe u] LT',
            lastWeek: function () {
                var lastWeekDays = [
                    '[proÅ¡le] [nedelje] [u] LT',
                    '[proÅ¡log] [ponedeljka] [u] LT',
                    '[proÅ¡log] [utorka] [u] LT',
                    '[proÅ¡le] [srede] [u] LT',
                    '[proÅ¡log] [Äetvrtka] [u] LT',
                    '[proÅ¡log] [petka] [u] LT',
                    '[proÅ¡le] [subote] [u] LT',
                ];
                return lastWeekDays[this.day()];
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'pre %s',
            s: 'nekoliko sekundi',
            ss: translator$2.translate,
            m: translator$2.translate,
            mm: translator$2.translate,
            h: translator$2.translate,
            hh: translator$2.translate,
            d: 'dan',
            dd: translator$2.translate,
            M: 'mesec',
            MM: translator$2.translate,
            y: 'godinu',
            yy: translator$2.translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ss', {
        months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
            '_'
        ),
        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
        weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
            '_'
        ),
        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Namuhla nga] LT',
            nextDay: '[Kusasa nga] LT',
            nextWeek: 'dddd [nga] LT',
            lastDay: '[Itolo nga] LT',
            lastWeek: 'dddd [leliphelile] [nga] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'nga %s',
            past: 'wenteka nga %s',
            s: 'emizuzwana lomcane',
            ss: '%d mzuzwana',
            m: 'umzuzu',
            mm: '%d emizuzu',
            h: 'lihora',
            hh: '%d emahora',
            d: 'lilanga',
            dd: '%d emalanga',
            M: 'inyanga',
            MM: '%d tinyanga',
            y: 'umnyaka',
            yy: '%d iminyaka',
        },
        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'ekuseni';
            } else if (hours < 15) {
                return 'emini';
            } else if (hours < 19) {
                return 'entsambama';
            } else {
                return 'ebusuku';
            }
        },
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'ekuseni') {
                return hour;
            } else if (meridiem === 'emini') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
                if (hour === 0) {
                    return 0;
                }
                return hour + 12;
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: '%d',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('sv', {
        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
        weekdays: 'sÃ¶ndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lÃ¶rdag'.split('_'),
        weekdaysShort: 'sÃ¶n_mÃ¥n_tis_ons_tor_fre_lÃ¶r'.split('_'),
        weekdaysMin: 'sÃ¶_mÃ¥_ti_on_to_fr_lÃ¶'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [kl.] HH:mm',
            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd D MMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Idag] LT',
            nextDay: '[Imorgon] LT',
            lastDay: '[IgÃ¥r] LT',
            nextWeek: '[PÃ¥] dddd LT',
            lastWeek: '[I] dddd[s] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: 'fÃ¶r %s sedan',
            s: 'nÃ¥gra sekunder',
            ss: '%d sekunder',
            m: 'en minut',
            mm: '%d minuter',
            h: 'en timme',
            hh: '%d timmar',
            d: 'en dag',
            dd: '%d dagar',
            M: 'en mÃ¥nad',
            MM: '%d mÃ¥nader',
            y: 'ett Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? ':e'
                        : b === 1
                        ? ':a'
                        : b === 2
                        ? ':a'
                        : b === 3
                        ? ':e'
                        : ':e';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('sw', {
        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
        weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
            '_'
        ),
        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'hh:mm A',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[leo saa] LT',
            nextDay: '[kesho saa] LT',
            nextWeek: '[wiki ijayo] dddd [saat] LT',
            lastDay: '[jana] LT',
            lastWeek: '[wiki iliyopita] dddd [saat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s baadaye',
            past: 'tokea %s',
            s: 'hivi punde',
            ss: 'sekunde %d',
            m: 'dakika moja',
            mm: 'dakika %d',
            h: 'saa limoja',
            hh: 'masaa %d',
            d: 'siku moja',
            dd: 'siku %d',
            M: 'mwezi mmoja',
            MM: 'miezi %d',
            y: 'mwaka mmoja',
            yy: 'miaka %d',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$g = {
            1: 'à¯§',
            2: 'à¯¨',
            3: 'à¯©',
            4: 'à¯ª',
            5: 'à¯«',
            6: 'à¯¬',
            7: 'à¯­',
            8: 'à¯®',
            9: 'à¯¯',
            0: 'à¯¦',
        },
        numberMap$f = {
            'à¯§': '1',
            'à¯¨': '2',
            'à¯©': '3',
            'à¯ª': '4',
            'à¯«': '5',
            'à¯¬': '6',
            'à¯­': '7',
            'à¯®': '8',
            'à¯¯': '9',
            'à¯¦': '0',
        };

    moment.defineLocale('ta', {
        months: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
            '_'
        ),
        monthsShort: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
            '_'
        ),
        weekdays: 'à®žà®¾à®¯à®¿à®±à¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ_à®¤à®¿à®™à¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ_à®šà¯†à®µà¯à®µà®¾à®¯à¯à®•à®¿à®´à®®à¯ˆ_à®ªà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ_à®µà®¿à®¯à®¾à®´à®•à¯à®•à®¿à®´à®®à¯ˆ_à®µà¯†à®³à¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ_à®šà®©à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ'.split(
            '_'
        ),
        weekdaysShort: 'à®žà®¾à®¯à®¿à®±à¯_à®¤à®¿à®™à¯à®•à®³à¯_à®šà¯†à®µà¯à®µà®¾à®¯à¯_à®ªà¯à®¤à®©à¯_à®µà®¿à®¯à®¾à®´à®©à¯_à®µà¯†à®³à¯à®³à®¿_à®šà®©à®¿'.split(
            '_'
        ),
        weekdaysMin: 'à®žà®¾_à®¤à®¿_à®šà¯†_à®ªà¯_à®µà®¿_à®µà¯†_à®š'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, HH:mm',
            LLLL: 'dddd, D MMMM YYYY, HH:mm',
        },
        calendar: {
            sameDay: '[à®‡à®©à¯à®±à¯] LT',
            nextDay: '[à®¨à®¾à®³à¯ˆ] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à®¨à¯‡à®±à¯à®±à¯] LT',
            lastWeek: '[à®•à®Ÿà®¨à¯à®¤ à®µà®¾à®°à®®à¯] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à®‡à®²à¯',
            past: '%s à®®à¯à®©à¯',
            s: 'à®’à®°à¯ à®šà®¿à®² à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
            ss: '%d à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
            m: 'à®’à®°à¯ à®¨à®¿à®®à®¿à®Ÿà®®à¯',
            mm: '%d à®¨à®¿à®®à®¿à®Ÿà®™à¯à®•à®³à¯',
            h: 'à®’à®°à¯ à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
            hh: '%d à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
            d: 'à®’à®°à¯ à®¨à®¾à®³à¯',
            dd: '%d à®¨à®¾à®Ÿà¯à®•à®³à¯',
            M: 'à®’à®°à¯ à®®à®¾à®¤à®®à¯',
            MM: '%d à®®à®¾à®¤à®™à¯à®•à®³à¯',
            y: 'à®’à®°à¯ à®µà®°à¯à®Ÿà®®à¯',
            yy: '%d à®†à®£à¯à®Ÿà¯à®•à®³à¯',
        },
        dayOfMonthOrdinalParse: /\d{1,2}à®µà®¤à¯/,
        ordinal: function (number) {
            return number + 'à®µà®¤à¯';
        },
        preparse: function (string) {
            return string.replace(/[à¯§à¯¨à¯©à¯ªà¯«à¯¬à¯­à¯®à¯¯à¯¦]/g, function (match) {
                return numberMap$f[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$g[match];
            });
        },
        // refer http://ta.wikipedia.org/s/1er1
        meridiemParse: /à®¯à®¾à®®à®®à¯|à®µà¯ˆà®•à®±à¯ˆ|à®•à®¾à®²à¯ˆ|à®¨à®£à¯à®ªà®•à®²à¯|à®Žà®±à¯à®ªà®¾à®Ÿà¯|à®®à®¾à®²à¯ˆ/,
        meridiem: function (hour, minute, isLower) {
            if (hour < 2) {
                return ' à®¯à®¾à®®à®®à¯';
            } else if (hour < 6) {
                return ' à®µà¯ˆà®•à®±à¯ˆ'; // à®µà¯ˆà®•à®±à¯ˆ
            } else if (hour < 10) {
                return ' à®•à®¾à®²à¯ˆ'; // à®•à®¾à®²à¯ˆ
            } else if (hour < 14) {
                return ' à®¨à®£à¯à®ªà®•à®²à¯'; // à®¨à®£à¯à®ªà®•à®²à¯
            } else if (hour < 18) {
                return ' à®Žà®±à¯à®ªà®¾à®Ÿà¯'; // à®Žà®±à¯à®ªà®¾à®Ÿà¯
            } else if (hour < 22) {
                return ' à®®à®¾à®²à¯ˆ'; // à®®à®¾à®²à¯ˆ
            } else {
                return ' à®¯à®¾à®®à®®à¯';
            }
        },
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à®¯à®¾à®®à®®à¯') {
                return hour < 2 ? hour : hour + 12;
            } else if (meridiem === 'à®µà¯ˆà®•à®±à¯ˆ' || meridiem === 'à®•à®¾à®²à¯ˆ') {
                return hour;
            } else if (meridiem === 'à®¨à®£à¯à®ªà®•à®²à¯') {
                return hour >= 10 ? hour : hour + 12;
            } else {
                return hour + 12;
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('te', {
        months: 'à°œà°¨à°µà°°à°¿_à°«à°¿à°¬à±à°°à°µà°°à°¿_à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿à°²à±_à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—à°¸à±à°Ÿà±_à°¸à±†à°ªà±à°Ÿà±†à°‚à°¬à°°à±_à°…à°•à±à°Ÿà±‹à°¬à°°à±_à°¨à°µà°‚à°¬à°°à±_à°¡à°¿à°¸à±†à°‚à°¬à°°à±'.split(
            '_'
        ),
        monthsShort: 'à°œà°¨._à°«à°¿à°¬à±à°°._à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿._à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—._à°¸à±†à°ªà±._à°…à°•à±à°Ÿà±‹._à°¨à°µ._à°¡à°¿à°¸à±†.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à°†à°¦à°¿à°µà°¾à°°à°‚_à°¸à±‹à°®à°µà°¾à°°à°‚_à°®à°‚à°—à°³à°µà°¾à°°à°‚_à°¬à±à°§à°µà°¾à°°à°‚_à°—à±à°°à±à°µà°¾à°°à°‚_à°¶à±à°•à±à°°à°µà°¾à°°à°‚_à°¶à°¨à°¿à°µà°¾à°°à°‚'.split(
            '_'
        ),
        weekdaysShort: 'à°†à°¦à°¿_à°¸à±‹à°®_à°®à°‚à°—à°³_à°¬à±à°§_à°—à±à°°à±_à°¶à±à°•à±à°°_à°¶à°¨à°¿'.split('_'),
        weekdaysMin: 'à°†_à°¸à±‹_à°®à°‚_à°¬à±_à°—à±_à°¶à±_à°¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm',
        },
        calendar: {
            sameDay: '[à°¨à±‡à°¡à±] LT',
            nextDay: '[à°°à±‡à°ªà±] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à°¨à°¿à°¨à±à°¨] LT',
            lastWeek: '[à°—à°¤] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à°²à±‹',
            past: '%s à°•à±à°°à°¿à°¤à°‚',
            s: 'à°•à±Šà°¨à±à°¨à°¿ à°•à±à°·à°£à°¾à°²à±',
            ss: '%d à°¸à±†à°•à°¨à±à°²à±',
            m: 'à°’à°• à°¨à°¿à°®à°¿à°·à°‚',
            mm: '%d à°¨à°¿à°®à°¿à°·à°¾à°²à±',
            h: 'à°’à°• à°—à°‚à°Ÿ',
            hh: '%d à°—à°‚à°Ÿà°²à±',
            d: 'à°’à°• à°°à±‹à°œà±',
            dd: '%d à°°à±‹à°œà±à°²à±',
            M: 'à°’à°• à°¨à±†à°²',
            MM: '%d à°¨à±†à°²à°²à±',
            y: 'à°’à°• à°¸à°‚à°µà°¤à±à°¸à°°à°‚',
            yy: '%d à°¸à°‚à°µà°¤à±à°¸à°°à°¾à°²à±',
        },
        dayOfMonthOrdinalParse: /\d{1,2}à°µ/,
        ordinal: '%dà°µ',
        meridiemParse: /à°°à°¾à°¤à±à°°à°¿|à°‰à°¦à°¯à°‚|à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚|à°¸à°¾à°¯à°‚à°¤à±à°°à°‚/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à°°à°¾à°¤à±à°°à°¿') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à°‰à°¦à°¯à°‚') {
                return hour;
            } else if (meridiem === 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à°°à°¾à°¤à±à°°à°¿';
            } else if (hour < 10) {
                return 'à°‰à°¦à°¯à°‚';
            } else if (hour < 17) {
                return 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚';
            } else if (hour < 20) {
                return 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚';
            } else {
                return 'à°°à°¾à°¤à±à°°à°¿';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('tet', {
        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_JuÃ±u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
            '_'
        ),
        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ohin iha] LT',
            nextDay: '[Aban iha] LT',
            nextWeek: 'dddd [iha] LT',
            lastDay: '[Horiseik iha] LT',
            lastWeek: 'dddd [semana kotuk] [iha] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'iha %s',
            past: '%s liuba',
            s: 'segundu balun',
            ss: 'segundu %d',
            m: 'minutu ida',
            mm: 'minutu %d',
            h: 'oras ida',
            hh: 'oras %d',
            d: 'loron ida',
            dd: 'loron %d',
            M: 'fulan ida',
            MM: 'fulan %d',
            y: 'tinan ida',
            yy: 'tinan %d',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var suffixes$3 = {
        0: '-ÑƒÐ¼',
        1: '-ÑƒÐ¼',
        2: '-ÑŽÐ¼',
        3: '-ÑŽÐ¼',
        4: '-ÑƒÐ¼',
        5: '-ÑƒÐ¼',
        6: '-ÑƒÐ¼',
        7: '-ÑƒÐ¼',
        8: '-ÑƒÐ¼',
        9: '-ÑƒÐ¼',
        10: '-ÑƒÐ¼',
        12: '-ÑƒÐ¼',
        13: '-ÑƒÐ¼',
        20: '-ÑƒÐ¼',
        30: '-ÑŽÐ¼',
        40: '-ÑƒÐ¼',
        50: '-ÑƒÐ¼',
        60: '-ÑƒÐ¼',
        70: '-ÑƒÐ¼',
        80: '-ÑƒÐ¼',
        90: '-ÑƒÐ¼',
        100: '-ÑƒÐ¼',
    };

    moment.defineLocale('tg', {
        months: {
            format: 'ÑÐ½Ð²Ð°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€Ð°Ð»Ð¸_Ð¼Ð°Ñ€Ñ‚Ð¸_Ð°Ð¿Ñ€ÐµÐ»Ð¸_Ð¼Ð°Ð¹Ð¸_Ð¸ÑŽÐ½Ð¸_Ð¸ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚Ð¸_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ð¸_Ð¾ÐºÑ‚ÑÐ±Ñ€Ð¸_Ð½Ð¾ÑÐ±Ñ€Ð¸_Ð´ÐµÐºÐ°Ð±Ñ€Ð¸'.split(
                '_'
            ),
            standalone: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
                '_'
            ),
        },
        monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
        weekdays: 'ÑÐºÑˆÐ°Ð½Ð±Ðµ_Ð´ÑƒÑˆÐ°Ð½Ð±Ðµ_ÑÐµÑˆÐ°Ð½Ð±Ðµ_Ñ‡Ð¾Ñ€ÑˆÐ°Ð½Ð±Ðµ_Ð¿Ð°Ð½Ò·ÑˆÐ°Ð½Ð±Ðµ_Ò·ÑƒÐ¼ÑŠÐ°_ÑˆÐ°Ð½Ð±Ðµ'.split(
            '_'
        ),
        weekdaysShort: 'ÑÑˆÐ±_Ð´ÑˆÐ±_ÑÑˆÐ±_Ñ‡ÑˆÐ±_Ð¿ÑˆÐ±_Ò·ÑƒÐ¼_ÑˆÐ½Ð±'.split('_'),
        weekdaysMin: 'ÑÑˆ_Ð´Ñˆ_ÑÑˆ_Ñ‡Ñˆ_Ð¿Ñˆ_Ò·Ð¼_ÑˆÐ±'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ð˜Ð¼Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
            nextDay: '[Ð¤Ð°Ñ€Ð´Ð¾ ÑÐ¾Ð°Ñ‚Ð¸] LT',
            lastDay: '[Ð”Ð¸Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
            nextWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð¾ÑÐ½Ð´Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
            lastWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð³ÑƒÐ·Ð°ÑˆÑ‚Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð±Ð°ÑŠÐ´Ð¸ %s',
            past: '%s Ð¿ÐµÑˆ',
            s: 'ÑÐºÑ‡Ð°Ð½Ð´ ÑÐ¾Ð½Ð¸Ñ',
            m: 'ÑÐº Ð´Ð°Ò›Ð¸Ò›Ð°',
            mm: '%d Ð´Ð°Ò›Ð¸Ò›Ð°',
            h: 'ÑÐº ÑÐ¾Ð°Ñ‚',
            hh: '%d ÑÐ¾Ð°Ñ‚',
            d: 'ÑÐº Ñ€Ó¯Ð·',
            dd: '%d Ñ€Ó¯Ð·',
            M: 'ÑÐº Ð¼Ð¾Ò³',
            MM: '%d Ð¼Ð¾Ò³',
            y: 'ÑÐº ÑÐ¾Ð»',
            yy: '%d ÑÐ¾Ð»',
        },
        meridiemParse: /ÑˆÐ°Ð±|ÑÑƒÐ±Ò³|Ñ€Ó¯Ð·|Ð±ÐµÐ³Ð¾Ò³/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'ÑˆÐ°Ð±') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'ÑÑƒÐ±Ò³') {
                return hour;
            } else if (meridiem === 'Ñ€Ó¯Ð·') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'Ð±ÐµÐ³Ð¾Ò³') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'ÑˆÐ°Ð±';
            } else if (hour < 11) {
                return 'ÑÑƒÐ±Ò³';
            } else if (hour < 16) {
                return 'Ñ€Ó¯Ð·';
            } else if (hour < 19) {
                return 'Ð±ÐµÐ³Ð¾Ò³';
            } else {
                return 'ÑˆÐ°Ð±';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÑƒÐ¼|ÑŽÐ¼)/,
        ordinal: function (number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 1th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('th', {
        months: 'à¸¡à¸à¸£à¸²à¸„à¸¡_à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ_à¸¡à¸µà¸™à¸²à¸„à¸¡_à¹€à¸¡à¸©à¸²à¸¢à¸™_à¸žà¸¤à¸©à¸ à¸²à¸„à¸¡_à¸¡à¸´à¸–à¸¸à¸™à¸²à¸¢à¸™_à¸à¸£à¸à¸Žà¸²à¸„à¸¡_à¸ªà¸´à¸‡à¸«à¸²à¸„à¸¡_à¸à¸±à¸™à¸¢à¸²à¸¢à¸™_à¸•à¸¸à¸¥à¸²à¸„à¸¡_à¸žà¸¤à¸¨à¸ˆà¸´à¸à¸²à¸¢à¸™_à¸˜à¸±à¸™à¸§à¸²à¸„à¸¡'.split(
            '_'
        ),
        monthsShort: 'à¸¡.à¸„._à¸.à¸ž._à¸¡à¸µ.à¸„._à¹€à¸¡.à¸¢._à¸ž.à¸„._à¸¡à¸´.à¸¢._à¸.à¸„._à¸ª.à¸„._à¸.à¸¢._à¸•.à¸„._à¸ž.à¸¢._à¸˜.à¸„.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ªà¸šà¸”à¸µ_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'),
        weekdaysShort: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ª_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'), // yes, three characters difference
        weekdaysMin: 'à¸­à¸²._à¸ˆ._à¸­._à¸ž._à¸žà¸¤._à¸¨._à¸ª.'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
            LLLL: 'à¸§à¸±à¸™ddddà¸—à¸µà¹ˆ D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
        },
        meridiemParse: /à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡|à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡/,
        isPM: function (input) {
            return input === 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
            } else {
                return 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
            }
        },
        calendar: {
            sameDay: '[à¸§à¸±à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
            nextDay: '[à¸žà¸£à¸¸à¹ˆà¸‡à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
            nextWeek: 'dddd[à¸«à¸™à¹‰à¸² à¹€à¸§à¸¥à¸²] LT',
            lastDay: '[à¹€à¸¡à¸·à¹ˆà¸­à¸§à¸²à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
            lastWeek: '[à¸§à¸±à¸™]dddd[à¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§ à¹€à¸§à¸¥à¸²] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'à¸­à¸µà¸ %s',
            past: '%sà¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§',
            s: 'à¹„à¸¡à¹ˆà¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—à¸µ',
            ss: '%d à¸§à¸´à¸™à¸²à¸—à¸µ',
            m: '1 à¸™à¸²à¸—à¸µ',
            mm: '%d à¸™à¸²à¸—à¸µ',
            h: '1 à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
            hh: '%d à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
            d: '1 à¸§à¸±à¸™',
            dd: '%d à¸§à¸±à¸™',
            w: '1 à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
            ww: '%d à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
            M: '1 à¹€à¸”à¸·à¸­à¸™',
            MM: '%d à¹€à¸”à¸·à¸­à¸™',
            y: '1 à¸›à¸µ',
            yy: '%d à¸›à¸µ',
        },
    });

    //! moment.js locale configuration

    var suffixes$4 = {
        1: "'inji",
        5: "'inji",
        8: "'inji",
        70: "'inji",
        80: "'inji",
        2: "'nji",
        7: "'nji",
        20: "'nji",
        50: "'nji",
        3: "'Ã¼nji",
        4: "'Ã¼nji",
        100: "'Ã¼nji",
        6: "'njy",
        9: "'unjy",
        10: "'unjy",
        30: "'unjy",
        60: "'ynjy",
        90: "'ynjy",
    };

    moment.defineLocale('tk', {
        months: 'Ãanwar_Fewral_Mart_Aprel_MaÃ½_IÃ½un_IÃ½ul_Awgust_SentÃ½abr_OktÃ½abr_NoÃ½abr_Dekabr'.split(
            '_'
        ),
        monthsShort: 'Ãan_Few_Mar_Apr_MaÃ½_IÃ½n_IÃ½l_Awg_Sen_Okt_NoÃ½_Dek'.split('_'),
        weekdays: 'ÃekÅŸenbe_DuÅŸenbe_SiÅŸenbe_Ã‡arÅŸenbe_PenÅŸenbe_Anna_Åženbe'.split(
            '_'
        ),
        weekdaysShort: 'Ãek_DuÅŸ_SiÅŸ_Ã‡ar_Pen_Ann_Åžen'.split('_'),
        weekdaysMin: 'Ãk_DÅŸ_SÅŸ_Ã‡r_Pn_An_Åžn'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[bugÃ¼n sagat] LT',
            nextDay: '[ertir sagat] LT',
            nextWeek: '[indiki] dddd [sagat] LT',
            lastDay: '[dÃ¼Ã½n] LT',
            lastWeek: '[geÃ§en] dddd [sagat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s soÅˆ',
            past: '%s Ã¶Åˆ',
            s: 'birnÃ¤Ã§e sekunt',
            m: 'bir minut',
            mm: '%d minut',
            h: 'bir sagat',
            hh: '%d sagat',
            d: 'bir gÃ¼n',
            dd: '%d gÃ¼n',
            M: 'bir aÃ½',
            MM: '%d aÃ½',
            y: 'bir Ã½yl',
            yy: '%d Ã½yl',
        },
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'Do':
                case 'DD':
                    return number;
                default:
                    if (number === 0) {
                        // special case for zero
                        return number + "'unjy";
                    }
                    var a = number % 10,
                        b = (number % 100) - a,
                        c = number >= 100 ? 100 : null;
                    return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]);
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('tl-ph', {
        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
            '_'
        ),
        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
            '_'
        ),
        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'MM/D/YYYY',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY HH:mm',
            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
        },
        calendar: {
            sameDay: 'LT [ngayong araw]',
            nextDay: '[Bukas ng] LT',
            nextWeek: 'LT [sa susunod na] dddd',
            lastDay: 'LT [kahapon]',
            lastWeek: 'LT [noong nakaraang] dddd',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'sa loob ng %s',
            past: '%s ang nakalipas',
            s: 'ilang segundo',
            ss: '%d segundo',
            m: 'isang minuto',
            mm: '%d minuto',
            h: 'isang oras',
            hh: '%d oras',
            d: 'isang araw',
            dd: '%d araw',
            M: 'isang buwan',
            MM: '%d buwan',
            y: 'isang taon',
            yy: '%d taon',
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: function (number) {
            return number;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var numbersNouns = 'pagh_waâ€™_chaâ€™_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');

    function translateFuture(output) {
        var time = output;
        time =
            output.indexOf('jaj') !== -1
                ? time.slice(0, -3) + 'leS'
                : output.indexOf('jar') !== -1
                ? time.slice(0, -3) + 'waQ'
                : output.indexOf('DIS') !== -1
                ? time.slice(0, -3) + 'nem'
                : time + ' pIq';
        return time;
    }

    function translatePast(output) {
        var time = output;
        time =
            output.indexOf('jaj') !== -1
                ? time.slice(0, -3) + 'Huâ€™'
                : output.indexOf('jar') !== -1
                ? time.slice(0, -3) + 'wen'
                : output.indexOf('DIS') !== -1
                ? time.slice(0, -3) + 'ben'
                : time + ' ret';
        return time;
    }

    function translate$a(number, withoutSuffix, string, isFuture) {
        var numberNoun = numberAsNoun(number);
        switch (string) {
            case 'ss':
                return numberNoun + ' lup';
            case 'mm':
                return numberNoun + ' tup';
            case 'hh':
                return numberNoun + ' rep';
            case 'dd':
                return numberNoun + ' jaj';
            case 'MM':
                return numberNoun + ' jar';
            case 'yy':
                return numberNoun + ' DIS';
        }
    }

    function numberAsNoun(number) {
        var hundred = Math.floor((number % 1000) / 100),
            ten = Math.floor((number % 100) / 10),
            one = number % 10,
            word = '';
        if (hundred > 0) {
            word += numbersNouns[hundred] + 'vatlh';
        }
        if (ten > 0) {
            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
        }
        if (one > 0) {
            word += (word !== '' ? ' ' : '') + numbersNouns[one];
        }
        return word === '' ? 'pagh' : word;
    }

    moment.defineLocale('tlh', {
        months: 'teraâ€™ jar waâ€™_teraâ€™ jar chaâ€™_teraâ€™ jar wej_teraâ€™ jar loS_teraâ€™ jar vagh_teraâ€™ jar jav_teraâ€™ jar Soch_teraâ€™ jar chorgh_teraâ€™ jar Hut_teraâ€™ jar waâ€™maH_teraâ€™ jar waâ€™maH waâ€™_teraâ€™ jar waâ€™maH chaâ€™'.split(
            '_'
        ),
        monthsShort: 'jar waâ€™_jar chaâ€™_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar waâ€™maH_jar waâ€™maH waâ€™_jar waâ€™maH chaâ€™'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
            '_'
        ),
        weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
            '_'
        ),
        weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
            '_'
        ),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[DaHjaj] LT',
            nextDay: '[waâ€™leS] LT',
            nextWeek: 'LLL',
            lastDay: '[waâ€™Huâ€™] LT',
            lastWeek: 'LLL',
            sameElse: 'L',
        },
        relativeTime: {
            future: translateFuture,
            past: translatePast,
            s: 'puS lup',
            ss: translate$a,
            m: 'waâ€™ tup',
            mm: translate$a,
            h: 'waâ€™ rep',
            hh: translate$a,
            d: 'waâ€™ jaj',
            dd: translate$a,
            M: 'waâ€™ jar',
            MM: translate$a,
            y: 'waâ€™ DIS',
            yy: translate$a,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var suffixes$5 = {
        1: "'inci",
        5: "'inci",
        8: "'inci",
        70: "'inci",
        80: "'inci",
        2: "'nci",
        7: "'nci",
        20: "'nci",
        50: "'nci",
        3: "'Ã¼ncÃ¼",
        4: "'Ã¼ncÃ¼",
        100: "'Ã¼ncÃ¼",
        6: "'ncÄ±",
        9: "'uncu",
        10: "'uncu",
        30: "'uncu",
        60: "'Ä±ncÄ±",
        90: "'Ä±ncÄ±",
    };

    moment.defineLocale('tr', {
        months: 'Ocak_Åžubat_Mart_Nisan_MayÄ±s_Haziran_Temmuz_AÄŸustos_EylÃ¼l_Ekim_KasÄ±m_AralÄ±k'.split(
            '_'
        ),
        monthsShort: 'Oca_Åžub_Mar_Nis_May_Haz_Tem_AÄŸu_Eyl_Eki_Kas_Ara'.split('_'),
        weekdays: 'Pazar_Pazartesi_SalÄ±_Ã‡arÅŸamba_PerÅŸembe_Cuma_Cumartesi'.split(
            '_'
        ),
        weekdaysShort: 'Paz_Pts_Sal_Ã‡ar_Per_Cum_Cts'.split('_'),
        weekdaysMin: 'Pz_Pt_Sa_Ã‡a_Pe_Cu_Ct'.split('_'),
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower ? 'Ã¶Ã¶' : 'Ã–Ã–';
            } else {
                return isLower ? 'Ã¶s' : 'Ã–S';
            }
        },
        meridiemParse: /Ã¶Ã¶|Ã–Ã–|Ã¶s|Ã–S/,
        isPM: function (input) {
            return input === 'Ã¶s' || input === 'Ã–S';
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[bugÃ¼n saat] LT',
            nextDay: '[yarÄ±n saat] LT',
            nextWeek: '[gelecek] dddd [saat] LT',
            lastDay: '[dÃ¼n] LT',
            lastWeek: '[geÃ§en] dddd [saat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s sonra',
            past: '%s Ã¶nce',
            s: 'birkaÃ§ saniye',
            ss: '%d saniye',
            m: 'bir dakika',
            mm: '%d dakika',
            h: 'bir saat',
            hh: '%d saat',
            d: 'bir gÃ¼n',
            dd: '%d gÃ¼n',
            w: 'bir hafta',
            ww: '%d hafta',
            M: 'bir ay',
            MM: '%d ay',
            y: 'bir yÄ±l',
            yy: '%d yÄ±l',
        },
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'Do':
                case 'DD':
                    return number;
                default:
                    if (number === 0) {
                        // special case for zero
                        return number + "'Ä±ncÄ±";
                    }
                    var a = number % 10,
                        b = (number % 100) - a,
                        c = number >= 100 ? 100 : null;
                    return number + (suffixes$5[a] || suffixes$5[b] || suffixes$5[c]);
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
    // This is currently too difficult (maybe even impossible) to add.
    moment.defineLocale('tzl', {
        months: 'Januar_Fevraglh_MarÃ§_AvrÃ¯u_Mai_GÃ¼n_Julia_Guscht_Setemvar_ListopÃ¤ts_Noemvar_Zecemvar'.split(
            '_'
        ),
        monthsShort: 'Jan_Fev_Mar_Avr_Mai_GÃ¼n_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
        weekdays: 'SÃºladi_LÃºneÃ§i_Maitzi_MÃ¡rcuri_XhÃºadi_ViÃ©nerÃ§i_SÃ¡turi'.split('_'),
        weekdaysShort: 'SÃºl_LÃºn_Mai_MÃ¡r_XhÃº_ViÃ©_SÃ¡t'.split('_'),
        weekdaysMin: 'SÃº_LÃº_Ma_MÃ¡_Xh_Vi_SÃ¡'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM [dallas] YYYY',
            LLL: 'D. MMMM [dallas] YYYY HH.mm',
            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
        },
        meridiemParse: /d\'o|d\'a/i,
        isPM: function (input) {
            return "d'o" === input.toLowerCase();
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? "d'o" : "D'O";
            } else {
                return isLower ? "d'a" : "D'A";
            }
        },
        calendar: {
            sameDay: '[oxhi Ã ] LT',
            nextDay: '[demÃ  Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[ieiri Ã ] LT',
            lastWeek: '[sÃ¼r el] dddd [lasteu Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'osprei %s',
            past: 'ja%s',
            s: processRelativeTime$8,
            ss: processRelativeTime$8,
            m: processRelativeTime$8,
            mm: processRelativeTime$8,
            h: processRelativeTime$8,
            hh: processRelativeTime$8,
            d: processRelativeTime$8,
            dd: processRelativeTime$8,
            M: processRelativeTime$8,
            MM: processRelativeTime$8,
            y: processRelativeTime$8,
            yy: processRelativeTime$8,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    function processRelativeTime$8(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['viensas secunds', "'iensas secunds"],
            ss: [number + ' secunds', '' + number + ' secunds'],
            m: ["'n mÃ­ut", "'iens mÃ­ut"],
            mm: [number + ' mÃ­uts', '' + number + ' mÃ­uts'],
            h: ["'n Ã¾ora", "'iensa Ã¾ora"],
            hh: [number + ' Ã¾oras', '' + number + ' Ã¾oras'],
            d: ["'n ziua", "'iensa ziua"],
            dd: [number + ' ziuas', '' + number + ' ziuas'],
            M: ["'n mes", "'iens mes"],
            MM: [number + ' mesen', '' + number + ' mesen'],
            y: ["'n ar", "'iens ar"],
            yy: [number + ' ars', '' + number + ' ars'],
        };
        return isFuture
            ? format[key][0]
            : withoutSuffix
            ? format[key][0]
            : format[key][1];
    }

    //! moment.js locale configuration

    moment.defineLocale('tzm-latn', {
        months: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
            '_'
        ),
        monthsShort: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
            '_'
        ),
        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[asdkh g] LT',
            nextDay: '[aska g] LT',
            nextWeek: 'dddd [g] LT',
            lastDay: '[assant g] LT',
            lastWeek: 'dddd [g] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dadkh s yan %s',
            past: 'yan %s',
            s: 'imik',
            ss: '%d imik',
            m: 'minuá¸',
            mm: '%d minuá¸',
            h: 'saÉ›a',
            hh: '%d tassaÉ›in',
            d: 'ass',
            dd: '%d ossan',
            M: 'ayowr',
            MM: '%d iyyirn',
            y: 'asgas',
            yy: '%d isgasn',
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('tzm', {
        months: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
            '_'
        ),
        monthsShort: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
            '_'
        ),
        weekdays: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
        weekdaysShort: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
        weekdaysMin: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[â´°âµ™â´·âµ… â´´] LT',
            nextDay: '[â´°âµ™â´½â´° â´´] LT',
            nextWeek: 'dddd [â´´] LT',
            lastDay: '[â´°âµšâ´°âµâµœ â´´] LT',
            lastWeek: 'dddd [â´´] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'â´·â´°â´·âµ… âµ™ âµ¢â´°âµ %s',
            past: 'âµ¢â´°âµ %s',
            s: 'âµ‰âµŽâµ‰â´½',
            ss: '%d âµ‰âµŽâµ‰â´½',
            m: 'âµŽâµ‰âµâµ“â´º',
            mm: '%d âµŽâµ‰âµâµ“â´º',
            h: 'âµ™â´°âµ„â´°',
            hh: '%d âµœâ´°âµ™âµ™â´°âµ„âµ‰âµ',
            d: 'â´°âµ™âµ™',
            dd: '%d oâµ™âµ™â´°âµ',
            M: 'â´°âµ¢oâµ“âµ”',
            MM: '%d âµ‰âµ¢âµ¢âµ‰âµ”âµ',
            y: 'â´°âµ™â´³â´°âµ™',
            yy: '%d âµ‰âµ™â´³â´°âµ™âµ',
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('ug-cn', {
        months: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
            '_'
        ),
        weekdays: 'ÙŠÛ•ÙƒØ´Û•Ù†Ø¨Û•_Ø¯ÛˆØ´Û•Ù†Ø¨Û•_Ø³Û•ÙŠØ´Û•Ù†Ø¨Û•_Ú†Ø§Ø±Ø´Û•Ù†Ø¨Û•_Ù¾Û•ÙŠØ´Û•Ù†Ø¨Û•_Ø¬ÛˆÙ…Û•_Ø´Û•Ù†Ø¨Û•'.split(
            '_'
        ),
        weekdaysShort: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
        weekdaysMin: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰',
            LLL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
            LLLL: 'ddddØŒ YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
        },
        meridiemParse: /ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•|Ø³Û•Ú¾Û•Ø±|Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†|Ú†ÛˆØ´|Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†|ÙƒÛ•Ú†/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                meridiem === 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•' ||
                meridiem === 'Ø³Û•Ú¾Û•Ø±' ||
                meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†'
            ) {
                return hour;
            } else if (meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†' || meridiem === 'ÙƒÛ•Ú†') {
                return hour + 12;
            } else {
                return hour >= 11 ? hour : hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•';
            } else if (hm < 900) {
                return 'Ø³Û•Ú¾Û•Ø±';
            } else if (hm < 1130) {
                return 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†';
            } else if (hm < 1230) {
                return 'Ú†ÛˆØ´';
            } else if (hm < 1800) {
                return 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†';
            } else {
                return 'ÙƒÛ•Ú†';
            }
        },
        calendar: {
            sameDay: '[Ø¨ÛˆÚ¯ÛˆÙ† Ø³Ø§Ø¦Û•Øª] LT',
            nextDay: '[Ø¦Û•ØªÛ• Ø³Ø§Ø¦Û•Øª] LT',
            nextWeek: '[ÙƒÛÙ„Û•Ø±ÙƒÙ‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
            lastDay: '[ØªÛ†Ù†ÛˆÚ¯ÛˆÙ†] LT',
            lastWeek: '[Ø¦Ø§Ù„Ø¯Ù‰Ù†Ù‚Ù‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s ÙƒÛÙŠÙ‰Ù†',
            past: '%s Ø¨Û‡Ø±Û‡Ù†',
            s: 'Ù†Û•Ú†Ú†Û• Ø³ÛÙƒÙˆÙ†Øª',
            ss: '%d Ø³ÛÙƒÙˆÙ†Øª',
            m: 'Ø¨Ù‰Ø± Ù…Ù‰Ù†Û‡Øª',
            mm: '%d Ù…Ù‰Ù†Û‡Øª',
            h: 'Ø¨Ù‰Ø± Ø³Ø§Ø¦Û•Øª',
            hh: '%d Ø³Ø§Ø¦Û•Øª',
            d: 'Ø¨Ù‰Ø± ÙƒÛˆÙ†',
            dd: '%d ÙƒÛˆÙ†',
            M: 'Ø¨Ù‰Ø± Ø¦Ø§ÙŠ',
            MM: '%d Ø¦Ø§ÙŠ',
            y: 'Ø¨Ù‰Ø± ÙŠÙ‰Ù„',
            yy: '%d ÙŠÙ‰Ù„',
        },

        dayOfMonthOrdinalParse: /\d{1,2}(-ÙƒÛˆÙ†Ù‰|-Ø¦Ø§ÙŠ|-Ú¾Û•Ù¾ØªÛ•)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + '-ÙƒÛˆÙ†Ù‰';
                case 'w':
                case 'W':
                    return number + '-Ú¾Û•Ù¾ØªÛ•';
                default:
                    return number;
            }
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 1st is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function plural$6(word, num) {
        var forms = word.split('_');
        return num % 10 === 1 && num % 100 !== 11
            ? forms[0]
            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
            ? forms[1]
            : forms[2];
    }
    function relativeTimeWithPlural$4(number, withoutSuffix, key) {
        var format = {
            ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´',
            mm: withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½',
            hh: withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½',
            dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð½Ñ–Ð²',
            MM: 'Ð¼Ñ–ÑÑÑ†ÑŒ_Ð¼Ñ–ÑÑÑ†Ñ–_Ð¼Ñ–ÑÑÑ†Ñ–Ð²',
            yy: 'Ñ€Ñ–Ðº_Ñ€Ð¾ÐºÐ¸_Ñ€Ð¾ÐºÑ–Ð²',
        };
        if (key === 'm') {
            return withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ';
        } else if (key === 'h') {
            return withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ';
        } else {
            return number + ' ' + plural$6(format[key], +number);
        }
    }
    function weekdaysCaseReplace(m, format) {
        var weekdays = {
                nominative: 'Ð½ÐµÐ´Ñ–Ð»Ñ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
                    '_'
                ),
                accusative: 'Ð½ÐµÐ´Ñ–Ð»ÑŽ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†ÑŽ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
                    '_'
                ),
                genitive: 'Ð½ÐµÐ´Ñ–Ð»Ñ–_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»ÐºÐ°_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€ÐºÐ°_ÑÐµÑ€ÐµÐ´Ð¸_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³Ð°_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ–_ÑÑƒÐ±Ð¾Ñ‚Ð¸'.split(
                    '_'
                ),
            },
            nounCase;

        if (m === true) {
            return weekdays['nominative']
                .slice(1, 7)
                .concat(weekdays['nominative'].slice(0, 1));
        }
        if (!m) {
            return weekdays['nominative'];
        }

        nounCase = /(\[[Ð’Ð²Ð£Ñƒ]\]) ?dddd/.test(format)
            ? 'accusative'
            : /\[?(?:Ð¼Ð¸Ð½ÑƒÐ»Ð¾Ñ—|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½Ð¾Ñ—)? ?\] ?dddd/.test(format)
            ? 'genitive'
            : 'nominative';
        return weekdays[nounCase][m.day()];
    }
    function processHoursFunction(str) {
        return function () {
            return str + 'Ð¾' + (this.hours() === 11 ? 'Ð±' : '') + '] LT';
        };
    }

    moment.defineLocale('uk', {
        months: {
            format: 'ÑÑ–Ñ‡Ð½Ñ_Ð»ÑŽÑ‚Ð¾Ð³Ð¾_Ð±ÐµÑ€ÐµÐ·Ð½Ñ_ÐºÐ²Ñ–Ñ‚Ð½Ñ_Ñ‚Ñ€Ð°Ð²Ð½Ñ_Ñ‡ÐµÑ€Ð²Ð½Ñ_Ð»Ð¸Ð¿Ð½Ñ_ÑÐµÑ€Ð¿Ð½Ñ_Ð²ÐµÑ€ÐµÑÐ½Ñ_Ð¶Ð¾Ð²Ñ‚Ð½Ñ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´Ð°_Ð³Ñ€ÑƒÐ´Ð½Ñ'.split(
                '_'
            ),
            standalone: 'ÑÑ–Ñ‡ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ð¸Ð¹_Ð±ÐµÑ€ÐµÐ·ÐµÐ½ÑŒ_ÐºÐ²Ñ–Ñ‚ÐµÐ½ÑŒ_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÐµÑ€Ð²ÐµÐ½ÑŒ_Ð»Ð¸Ð¿ÐµÐ½ÑŒ_ÑÐµÑ€Ð¿ÐµÐ½ÑŒ_Ð²ÐµÑ€ÐµÑÐµÐ½ÑŒ_Ð¶Ð¾Ð²Ñ‚ÐµÐ½ÑŒ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´_Ð³Ñ€ÑƒÐ´ÐµÐ½ÑŒ'.split(
                '_'
            ),
        },
        monthsShort: 'ÑÑ–Ñ‡_Ð»ÑŽÑ‚_Ð±ÐµÑ€_ÐºÐ²Ñ–Ñ‚_Ñ‚Ñ€Ð°Ð²_Ñ‡ÐµÑ€Ð²_Ð»Ð¸Ð¿_ÑÐµÑ€Ð¿_Ð²ÐµÑ€_Ð¶Ð¾Ð²Ñ‚_Ð»Ð¸ÑÑ‚_Ð³Ñ€ÑƒÐ´'.split(
            '_'
        ),
        weekdays: weekdaysCaseReplace,
        weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Ñ€.',
            LLL: 'D MMMM YYYY Ñ€., HH:mm',
            LLLL: 'dddd, D MMMM YYYY Ñ€., HH:mm',
        },
        calendar: {
            sameDay: processHoursFunction('[Ð¡ÑŒÐ¾Ð³Ð¾Ð´Ð½Ñ– '),
            nextDay: processHoursFunction('[Ð—Ð°Ð²Ñ‚Ñ€Ð° '),
            lastDay: processHoursFunction('[Ð’Ñ‡Ð¾Ñ€Ð° '),
            nextWeek: processHoursFunction('[Ð£] dddd ['),
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 5:
                    case 6:
                        return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ñ—] dddd [').call(this);
                    case 1:
                    case 2:
                    case 4:
                        return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ð³Ð¾] dddd [').call(this);
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð·Ð° %s',
            past: '%s Ñ‚Ð¾Ð¼Ñƒ',
            s: 'Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° ÑÐµÐºÑƒÐ½Ð´',
            ss: relativeTimeWithPlural$4,
            m: relativeTimeWithPlural$4,
            mm: relativeTimeWithPlural$4,
            h: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
            hh: relativeTimeWithPlural$4,
            d: 'Ð´ÐµÐ½ÑŒ',
            dd: relativeTimeWithPlural$4,
            M: 'Ð¼Ñ–ÑÑÑ†ÑŒ',
            MM: relativeTimeWithPlural$4,
            y: 'Ñ€Ñ–Ðº',
            yy: relativeTimeWithPlural$4,
        },
        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
        meridiemParse: /Ð½Ð¾Ñ‡Ñ–|Ñ€Ð°Ð½ÐºÑƒ|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°/,
        isPM: function (input) {
            return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'Ð½Ð¾Ñ‡Ñ–';
            } else if (hour < 12) {
                return 'Ñ€Ð°Ð½ÐºÑƒ';
            } else if (hour < 17) {
                return 'Ð´Ð½Ñ';
            } else {
                return 'Ð²ÐµÑ‡Ð¾Ñ€Ð°';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'M':
                case 'd':
                case 'DDD':
                case 'w':
                case 'W':
                    return number + '-Ð¹';
                case 'D':
                    return number + '-Ð³Ð¾';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$a = [
            'Ø¬Ù†ÙˆØ±ÛŒ',
            'ÙØ±ÙˆØ±ÛŒ',
            'Ù…Ø§Ø±Ú†',
            'Ø§Ù¾Ø±ÛŒÙ„',
            'Ù…Ø¦ÛŒ',
            'Ø¬ÙˆÙ†',
            'Ø¬ÙˆÙ„Ø§Ø¦ÛŒ',
            'Ø§Ú¯Ø³Øª',
            'Ø³ØªÙ…Ø¨Ø±',
            'Ø§Ú©ØªÙˆØ¨Ø±',
            'Ù†ÙˆÙ…Ø¨Ø±',
            'Ø¯Ø³Ù…Ø¨Ø±',
        ],
        days$1 = ['Ø§ØªÙˆØ§Ø±', 'Ù¾ÛŒØ±', 'Ù…Ù†Ú¯Ù„', 'Ø¨Ø¯Ú¾', 'Ø¬Ù…Ø¹Ø±Ø§Øª', 'Ø¬Ù…Ø¹Û', 'ÛÙØªÛ'];

    moment.defineLocale('ur', {
        months: months$a,
        monthsShort: months$a,
        weekdays: days$1,
        weekdaysShort: days$1,
        weekdaysMin: days$1,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
        },
        meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
        isPM: function (input) {
            return 'Ø´Ø§Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'ØµØ¨Ø­';
            }
            return 'Ø´Ø§Ù…';
        },
        calendar: {
            sameDay: '[Ø¢Ø¬ Ø¨ÙˆÙ‚Øª] LT',
            nextDay: '[Ú©Ù„ Ø¨ÙˆÙ‚Øª] LT',
            nextWeek: 'dddd [Ø¨ÙˆÙ‚Øª] LT',
            lastDay: '[Ú¯Ø°Ø´ØªÛ Ø±ÙˆØ² Ø¨ÙˆÙ‚Øª] LT',
            lastWeek: '[Ú¯Ø°Ø´ØªÛ] dddd [Ø¨ÙˆÙ‚Øª] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ø¨Ø¹Ø¯',
            past: '%s Ù‚Ø¨Ù„',
            s: 'Ú†Ù†Ø¯ Ø³ÛŒÚ©Ù†Úˆ',
            ss: '%d Ø³ÛŒÚ©Ù†Úˆ',
            m: 'Ø§ÛŒÚ© Ù…Ù†Ù¹',
            mm: '%d Ù…Ù†Ù¹',
            h: 'Ø§ÛŒÚ© Ú¯Ú¾Ù†Ù¹Û',
            hh: '%d Ú¯Ú¾Ù†Ù¹Û’',
            d: 'Ø§ÛŒÚ© Ø¯Ù†',
            dd: '%d Ø¯Ù†',
            M: 'Ø§ÛŒÚ© Ù…Ø§Û',
            MM: '%d Ù…Ø§Û',
            y: 'Ø§ÛŒÚ© Ø³Ø§Ù„',
            yy: '%d Ø³Ø§Ù„',
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('uz-latn', {
        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
            '_'
        ),
        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
        weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
            '_'
        ),
        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'D MMMM YYYY, dddd HH:mm',
        },
        calendar: {
            sameDay: '[Bugun soat] LT [da]',
            nextDay: '[Ertaga] LT [da]',
            nextWeek: 'dddd [kuni soat] LT [da]',
            lastDay: '[Kecha soat] LT [da]',
            lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Yaqin %s ichida',
            past: 'Bir necha %s oldin',
            s: 'soniya',
            ss: '%d soniya',
            m: 'bir daqiqa',
            mm: '%d daqiqa',
            h: 'bir soat',
            hh: '%d soat',
            d: 'bir kun',
            dd: '%d kun',
            M: 'bir oy',
            MM: '%d oy',
            y: 'bir yil',
            yy: '%d yil',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('uz', {
        months: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
            '_'
        ),
        monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
        weekdays: 'Ð¯ÐºÑˆÐ°Ð½Ð±Ð°_Ð”ÑƒÑˆÐ°Ð½Ð±Ð°_Ð¡ÐµÑˆÐ°Ð½Ð±Ð°_Ð§Ð¾Ñ€ÑˆÐ°Ð½Ð±Ð°_ÐŸÐ°Ð¹ÑˆÐ°Ð½Ð±Ð°_Ð–ÑƒÐ¼Ð°_Ð¨Ð°Ð½Ð±Ð°'.split('_'),
        weekdaysShort: 'Ð¯ÐºÑˆ_Ð”ÑƒÑˆ_Ð¡ÐµÑˆ_Ð§Ð¾Ñ€_ÐŸÐ°Ð¹_Ð–ÑƒÐ¼_Ð¨Ð°Ð½'.split('_'),
        weekdaysMin: 'Ð¯Ðº_Ð”Ñƒ_Ð¡Ðµ_Ð§Ð¾_ÐŸÐ°_Ð–Ñƒ_Ð¨Ð°'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'D MMMM YYYY, dddd HH:mm',
        },
        calendar: {
            sameDay: '[Ð‘ÑƒÐ³ÑƒÐ½ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            nextDay: '[Ð­Ñ€Ñ‚Ð°Ð³Ð°] LT [Ð´Ð°]',
            nextWeek: 'dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            lastDay: '[ÐšÐµÑ‡Ð° ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            lastWeek: '[Ð£Ñ‚Ð³Ð°Ð½] dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð¯ÐºÐ¸Ð½ %s Ð¸Ñ‡Ð¸Ð´Ð°',
            past: 'Ð‘Ð¸Ñ€ Ð½ÐµÑ‡Ð° %s Ð¾Ð»Ð´Ð¸Ð½',
            s: 'Ñ„ÑƒÑ€ÑÐ°Ñ‚',
            ss: '%d Ñ„ÑƒÑ€ÑÐ°Ñ‚',
            m: 'Ð±Ð¸Ñ€ Ð´Ð°ÐºÐ¸ÐºÐ°',
            mm: '%d Ð´Ð°ÐºÐ¸ÐºÐ°',
            h: 'Ð±Ð¸Ñ€ ÑÐ¾Ð°Ñ‚',
            hh: '%d ÑÐ¾Ð°Ñ‚',
            d: 'Ð±Ð¸Ñ€ ÐºÑƒÐ½',
            dd: '%d ÐºÑƒÐ½',
            M: 'Ð±Ð¸Ñ€ Ð¾Ð¹',
            MM: '%d Ð¾Ð¹',
            y: 'Ð±Ð¸Ñ€ Ð¹Ð¸Ð»',
            yy: '%d Ð¹Ð¸Ð»',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('vi', {
        months: 'thÃ¡ng 1_thÃ¡ng 2_thÃ¡ng 3_thÃ¡ng 4_thÃ¡ng 5_thÃ¡ng 6_thÃ¡ng 7_thÃ¡ng 8_thÃ¡ng 9_thÃ¡ng 10_thÃ¡ng 11_thÃ¡ng 12'.split(
            '_'
        ),
        monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'chá»§ nháº­t_thá»© hai_thá»© ba_thá»© tÆ°_thá»© nÄƒm_thá»© sÃ¡u_thá»© báº£y'.split(
            '_'
        ),
        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
        weekdaysParseExact: true,
        meridiemParse: /sa|ch/i,
        isPM: function (input) {
            return /^ch$/i.test(input);
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower ? 'sa' : 'SA';
            } else {
                return isLower ? 'ch' : 'CH';
            }
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [nÄƒm] YYYY',
            LLL: 'D MMMM [nÄƒm] YYYY HH:mm',
            LLLL: 'dddd, D MMMM [nÄƒm] YYYY HH:mm',
            l: 'DD/M/YYYY',
            ll: 'D MMM YYYY',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd, D MMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[HÃ´m nay lÃºc] LT',
            nextDay: '[NgÃ y mai lÃºc] LT',
            nextWeek: 'dddd [tuáº§n tá»›i lÃºc] LT',
            lastDay: '[HÃ´m qua lÃºc] LT',
            lastWeek: 'dddd [tuáº§n trÆ°á»›c lÃºc] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s tá»›i',
            past: '%s trÆ°á»›c',
            s: 'vÃ i giÃ¢y',
            ss: '%d giÃ¢y',
            m: 'má»™t phÃºt',
            mm: '%d phÃºt',
            h: 'má»™t giá»',
            hh: '%d giá»',
            d: 'má»™t ngÃ y',
            dd: '%d ngÃ y',
            w: 'má»™t tuáº§n',
            ww: '%d tuáº§n',
            M: 'má»™t thÃ¡ng',
            MM: '%d thÃ¡ng',
            y: 'má»™t nÄƒm',
            yy: '%d nÄƒm',
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: function (number) {
            return number;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('x-pseudo', {
        months: 'J~Ã¡Ã±ÃºÃ¡~rÃ½_F~Ã©brÃº~Ã¡rÃ½_~MÃ¡rc~h_Ãp~rÃ­l_~MÃ¡Ã½_~JÃºÃ±Ã©~_JÃºl~Ã½_ÃÃº~gÃºst~_SÃ©p~tÃ©mb~Ã©r_Ã“~ctÃ³b~Ã©r_Ã‘~Ã³vÃ©m~bÃ©r_~DÃ©cÃ©~mbÃ©r'.split(
            '_'
        ),
        monthsShort: 'J~Ã¡Ã±_~FÃ©b_~MÃ¡r_~Ãpr_~MÃ¡Ã½_~JÃºÃ±_~JÃºl_~ÃÃºg_~SÃ©p_~Ã“ct_~Ã‘Ã³v_~DÃ©c'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'S~ÃºÃ±dÃ¡~Ã½_MÃ³~Ã±dÃ¡Ã½~_TÃºÃ©~sdÃ¡Ã½~_WÃ©d~Ã±Ã©sd~Ã¡Ã½_T~hÃºrs~dÃ¡Ã½_~FrÃ­d~Ã¡Ã½_S~Ã¡tÃºr~dÃ¡Ã½'.split(
            '_'
        ),
        weekdaysShort: 'S~ÃºÃ±_~MÃ³Ã±_~TÃºÃ©_~WÃ©d_~ThÃº_~FrÃ­_~SÃ¡t'.split('_'),
        weekdaysMin: 'S~Ãº_MÃ³~_TÃº_~WÃ©_T~h_Fr~_SÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[T~Ã³dÃ¡~Ã½ Ã¡t] LT',
            nextDay: '[T~Ã³mÃ³~rrÃ³~w Ã¡t] LT',
            nextWeek: 'dddd [Ã¡t] LT',
            lastDay: '[Ã~Ã©st~Ã©rdÃ¡~Ã½ Ã¡t] LT',
            lastWeek: '[L~Ã¡st] dddd [Ã¡t] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ã­~Ã± %s',
            past: '%s Ã¡~gÃ³',
            s: 'Ã¡ ~fÃ©w ~sÃ©cÃ³~Ã±ds',
            ss: '%d s~Ã©cÃ³Ã±~ds',
            m: 'Ã¡ ~mÃ­Ã±~ÃºtÃ©',
            mm: '%d m~Ã­Ã±Ãº~tÃ©s',
            h: 'Ã¡~Ã± hÃ³~Ãºr',
            hh: '%d h~Ã³Ãºrs',
            d: 'Ã¡ ~dÃ¡Ã½',
            dd: '%d d~Ã¡Ã½s',
            M: 'Ã¡ ~mÃ³Ã±~th',
            MM: '%d m~Ã³Ã±t~hs',
            y: 'Ã¡ ~Ã½Ã©Ã¡r',
            yy: '%d Ã½~Ã©Ã¡rs',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('yo', {
        months: 'Sáº¹Ìráº¹Ì_EÌ€reÌ€leÌ€_áº¸ráº¹Ì€naÌ€_IÌ€gbeÌ_EÌ€bibi_OÌ€kuÌ€du_Agáº¹mo_OÌ€guÌn_Owewe_á»ŒÌ€waÌ€raÌ€_BeÌluÌ_á»ŒÌ€páº¹Ì€Ì€'.split(
            '_'
        ),
        monthsShort: 'Sáº¹Ìr_EÌ€rl_áº¸rn_IÌ€gb_EÌ€bi_OÌ€kuÌ€_Agáº¹_OÌ€guÌ_Owe_á»ŒÌ€waÌ€_BeÌl_á»ŒÌ€páº¹Ì€Ì€'.split('_'),
        weekdays: 'AÌ€iÌ€kuÌ_AjeÌ_IÌ€sáº¹Ìgun_á»Œjá»ÌruÌ_á»Œjá»Ìbá»_áº¸tiÌ€_AÌ€baÌmáº¹Ìta'.split('_'),
        weekdaysShort: 'AÌ€iÌ€k_AjeÌ_IÌ€sáº¹Ì_á»Œjr_á»Œjb_áº¸tiÌ€_AÌ€baÌ'.split('_'),
        weekdaysMin: 'AÌ€iÌ€_Aj_IÌ€s_á»Œr_á»Œb_áº¸t_AÌ€b'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[OÌ€niÌ€ ni] LT',
            nextDay: '[á»ŒÌ€la ni] LT',
            nextWeek: "dddd [á»Œsáº¹Ì€ toÌn'bá»] [ni] LT",
            lastDay: '[AÌ€na ni] LT',
            lastWeek: 'dddd [á»Œsáº¹Ì€ toÌlá»Ì] [ni] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'niÌ %s',
            past: '%s ká»jaÌ',
            s: 'iÌ€sáº¹juÌ aayaÌ die',
            ss: 'aayaÌ %d',
            m: 'iÌ€sáº¹juÌ kan',
            mm: 'iÌ€sáº¹juÌ %d',
            h: 'waÌkati kan',
            hh: 'waÌkati %d',
            d: 'á»já»Ì kan',
            dd: 'á»já»Ì %d',
            M: 'osuÌ€ kan',
            MM: 'osuÌ€ %d',
            y: 'á»duÌn kan',
            yy: 'á»duÌn %d',
        },
        dayOfMonthOrdinalParse: /á»já»Ì\s\d{1,2}/,
        ordinal: 'á»já»Ì %d',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('zh-cn', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'å‘¨æ—¥_å‘¨ä¸€_å‘¨äºŒ_å‘¨ä¸‰_å‘¨å››_å‘¨äº”_å‘¨å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥Ahç‚¹mmåˆ†',
            LLLL: 'YYYYå¹´MæœˆDæ—¥ddddAhç‚¹mmåˆ†',
            l: 'YYYY/M/D',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            } else {
                // 'ä¸­åˆ'
                return hour >= 11 ? hour : hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1130) {
                return 'ä¸Šåˆ';
            } else if (hm < 1230) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©]LT',
            nextDay: '[æ˜Žå¤©]LT',
            nextWeek: function (now) {
                if (now.week() !== this.week()) {
                    return '[ä¸‹]dddLT';
                } else {
                    return '[æœ¬]dddLT';
                }
            },
            lastDay: '[æ˜¨å¤©]LT',
            lastWeek: function (now) {
                if (this.week() !== now.week()) {
                    return '[ä¸Š]dddLT';
                } else {
                    return '[æœ¬]dddLT';
                }
            },
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|å‘¨)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'å‘¨';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%såŽ',
            past: '%så‰',
            s: 'å‡ ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é’Ÿ',
            mm: '%d åˆ†é’Ÿ',
            h: '1 å°æ—¶',
            hh: '%d å°æ—¶',
            d: '1 å¤©',
            dd: '%d å¤©',
            w: '1 å‘¨',
            ww: '%d å‘¨',
            M: '1 ä¸ªæœˆ',
            MM: '%d ä¸ªæœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
        week: {
            // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('zh-hk', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
            l: 'YYYY/M/D',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸­åˆ') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1200) {
                return 'ä¸Šåˆ';
            } else if (hm === 1200) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©]LT',
            nextDay: '[æ˜Žå¤©]LT',
            nextWeek: '[ä¸‹]ddddLT',
            lastDay: '[æ˜¨å¤©]LT',
            lastWeek: '[ä¸Š]ddddLT',
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'é€±';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så¾Œ',
            past: '%så‰',
            s: 'å¹¾ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é˜',
            mm: '%d åˆ†é˜',
            h: '1 å°æ™‚',
            hh: '%d å°æ™‚',
            d: '1 å¤©',
            dd: '%d å¤©',
            M: '1 å€‹æœˆ',
            MM: '%d å€‹æœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('zh-mo', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
            l: 'D/M/YYYY',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸­åˆ') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1130) {
                return 'ä¸Šåˆ';
            } else if (hm < 1230) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©] LT',
            nextDay: '[æ˜Žå¤©] LT',
            nextWeek: '[ä¸‹]dddd LT',
            lastDay: '[æ˜¨å¤©] LT',
            lastWeek: '[ä¸Š]dddd LT',
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'é€±';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så…§',
            past: '%så‰',
            s: 'å¹¾ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é˜',
            mm: '%d åˆ†é˜',
            h: '1 å°æ™‚',
            hh: '%d å°æ™‚',
            d: '1 å¤©',
            dd: '%d å¤©',
            M: '1 å€‹æœˆ',
            MM: '%d å€‹æœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
    });

    //! moment.js locale configuration

    moment.defineLocale('zh-tw', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
            l: 'YYYY/M/D',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸­åˆ') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1130) {
                return 'ä¸Šåˆ';
            } else if (hm < 1230) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©] LT',
            nextDay: '[æ˜Žå¤©] LT',
            nextWeek: '[ä¸‹]dddd LT',
            lastDay: '[æ˜¨å¤©] LT',
            lastWeek: '[ä¸Š]dddd LT',
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'é€±';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så¾Œ',
            past: '%så‰',
            s: 'å¹¾ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é˜',
            mm: '%d åˆ†é˜',
            h: '1 å°æ™‚',
            hh: '%d å°æ™‚',
            d: '1 å¤©',
            dd: '%d å¤©',
            M: '1 å€‹æœˆ',
            MM: '%d å€‹æœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
    });

    moment.locale('en');

    return moment;

})));
!function(e,a){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?a(require("../moment")):"function"==typeof define&&define.amd?define(["../moment"],a):a(e.moment)}(this,function(e){"use strict";e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,_){return e<12?_?"vm":"VM":_?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});function r(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function a(n){return function(e,a,_,s){var d=r(e),t=i[n][r(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var i={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},_=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar-dz",{months:_,monthsShort:_,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:0,doy:4}}),e.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}});function m(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function s(n){return function(e,a,_,s){var d=m(e),t=o[n][m(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var d={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},o={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},t=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar-ly",{months:t,monthsShort:t,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:s("s"),ss:s("s"),m:s("m"),mm:s("m"),h:s("h"),hh:s("h"),d:s("d"),dd:s("d"),M:s("M"),MM:s("M"),y:s("y"),yy:s("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return d[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),e.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}});var n={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},u={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};e.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return u[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return n[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),e.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}});function l(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function M(n){return function(e,a,_,s){var d=l(e),t=h[n][l(e)];return 2===d&&(t=t[a?0:1]),t.replace(/%d/i,e)}}var L={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},Y={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},h={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},y=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];e.defineLocale("ar",{months:y,monthsShort:y,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:M("s"),ss:M("s"),m:M("m"),mm:M("m"),h:M("h"),hh:M("h"),d:M("d"),dd:M("d"),M:M("M"),MM:M("M"),y:M("y"),yy:M("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Y[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return L[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var c={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};function k(e,a,_){var s,d;return"m"===_?a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===_?a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(s=+e,d={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[_].split("_"),s%10==1&&s%100!=11?d[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?d[1]:d[2])}e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,a,_){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){if(0===e)return e+"-\u0131nc\u0131";var a=e%10;return e+(c[a]||c[e%100-a]||c[100<=e?100:null])},week:{dow:1,doy:7}}),e.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:k,mm:k,h:k,hh:k,d:"\u0434\u0437\u0435\u043d\u044c",dd:k,M:"\u043c\u0435\u0441\u044f\u0446",MM:k,y:"\u0433\u043e\u0434",yy:k},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,a,_){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}}),e.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",w:"\u0441\u0435\u0434\u043c\u0438\u0446\u0430",ww:"%d \u0441\u0435\u0434\u043c\u0438\u0446\u0438",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,_=e%100;return 0===e?e+"-\u0435\u0432":0==_?e+"-\u0435\u043d":10<_&&_<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});var D={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},p={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};e.defineLocale("bn-bd",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return p[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return D[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09ad\u09cb\u09b0|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a?e<4?e:e+12:"\u09ad\u09cb\u09b0"===a||"\u09b8\u0995\u09be\u09b2"===a?e:"\u09a6\u09c1\u09aa\u09c1\u09b0"===a?3<=e?e:e+12:"\u09ac\u09bf\u0995\u09be\u09b2"===a||"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u09b0\u09be\u09a4":e<6?"\u09ad\u09cb\u09b0":e<12?"\u09b8\u0995\u09be\u09b2":e<15?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<18?"\u09ac\u09bf\u0995\u09be\u09b2":e<20?"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}});var T={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},f={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};e.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return f[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return T[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a&&4<=e||"\u09a6\u09c1\u09aa\u09c1\u09b0"===a&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}});var w={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},g={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};function H(e,a,_){var s;return e+" "+(s={mm:"munutenn",MM:"miz",dd:"devezh"}[_],2!==e?s:function(e){var a={m:"v",b:"v",d:"z"};return void 0!==a[e.charAt(0)]?a[e.charAt(0)]+e.substring(1):e}(s))}e.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return g[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return w[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===a&&4<=e||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===a&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}});var b=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],v=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,S=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];function j(e,a,_){var s=e+" ";switch(_){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}e.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:S,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:S,monthsRegex:v,monthsShortRegex:v,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:b,longMonthsParse:b,shortMonthsParse:b,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:H,h:"un eur",hh:"%d eur",d:"un devezh",dd:H,M:"ur miz",MM:H,y:"ur bloaz",yy:function(e){switch(function e(a){if(9<a)return e(a%10);return a}(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(e){return e+(1===e?"a\xf1":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,a,_){return e<12?"a.m.":"g.m."}}),e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:j,m:j,mm:j,h:j,hh:j,d:"dan",dd:j,M:"mjesec",MM:j,y:"godinu",yy:j},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),e.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});var x="leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),P="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_"),W=[/^led/i,/^\xfano/i,/^b\u0159e/i,/^dub/i,/^kv\u011b/i,/^(\u010dvn|\u010derven$|\u010dervna)/i,/^(\u010dvc|\u010dervenec|\u010dervence)/i,/^srp/i,/^z\xe1\u0159/i,/^\u0159\xedj/i,/^lis/i,/^pro/i],A=/^(leden|\xfanor|b\u0159ezen|duben|kv\u011bten|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|z\xe1\u0159\xed|\u0159\xedjen|listopad|prosinec|led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i;function O(e){return 1<e&&e<5&&1!=~~(e/10)}function E(e,a,_,s){var d=e+" ";switch(_){case"s":return a||s?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return a||s?d+(O(e)?"sekundy":"sekund"):d+"sekundami";case"m":return a?"minuta":s?"minutu":"minutou";case"mm":return a||s?d+(O(e)?"minuty":"minut"):d+"minutami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?d+(O(e)?"hodiny":"hodin"):d+"hodinami";case"d":return a||s?"den":"dnem";case"dd":return a||s?d+(O(e)?"dny":"dn\xed"):d+"dny";case"M":return a||s?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return a||s?d+(O(e)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):d+"m\u011bs\xedci";case"y":return a||s?"rok":"rokem";case"yy":return a||s?d+(O(e)?"roky":"let"):d+"lety"}}function F(e,a,_,s){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?d[_][0]:d[_][1]}function z(e,a,_,s){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?d[_][0]:d[_][1]}function J(e,a,_,s){var d={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?d[_][0]:d[_][1]}e.defineLocale("cs",{months:x,monthsShort:P,monthsRegex:A,monthsShortRegex:A,monthsStrictRegex:/^(leden|ledna|\xfanora|\xfanor|b\u0159ezen|b\u0159ezna|duben|dubna|kv\u011bten|kv\u011btna|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|srpna|z\xe1\u0159\xed|\u0159\xedjen|\u0159\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i,monthsParse:W,longMonthsParse:W,shortMonthsParse:W,weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:E,ss:E,m:E,mm:E,h:E,hh:E,d:E,dd:E,M:E,MM:E,y:E,yy:E},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(e){return e+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(e)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(e)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}}),e.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var a="";return 20<e?a=40===e||50===e||60===e||80===e||100===e?"fed":"ain":0<e&&(a=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+a},week:{dow:1,doy:4}}),e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:F,mm:"%d Minuten",h:F,hh:"%d Stunden",d:F,dd:F,w:F,ww:"%d Wochen",M:F,MM:F,y:F,yy:F},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:z,mm:"%d Minuten",h:z,hh:"%d Stunden",d:z,dd:z,w:z,ww:"%d Wochen",M:z,MM:z,y:z,yy:z},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:J,mm:"%d Minuten",h:J,hh:"%d Stunden",d:J,dd:J,w:J,ww:"%d Wochen",M:J,MM:J,y:J,yy:J},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var I=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],N=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];e.defineLocale("dv",{months:I,monthsShort:I,weekdays:N,weekdaysShort:N,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,a,_){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}}),e.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(e,a){return e?"string"==typeof a&&/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(e,a,_){return 11<e?_?"\u03bc\u03bc":"\u039c\u039c":_?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(e){return"\u03bc"===(e+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT";default:return"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,a){var _,s=this._calendarEl[e],d=a&&a.hours();return _=s,("undefined"!=typeof Function&&_ instanceof Function||"[object Function]"===Object.prototype.toString.call(_))&&(s=s.apply(a)),s.replace("{}",d%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}}),e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:4}}),e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),e.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:6}}),e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_a\u016dg_sept_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,a,_){return 11<e?_?"p.t.m.":"P.T.M.":_?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}});var R="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),C="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),K=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],G=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?C[e.month()]:R[e.month()]:R},monthsRegex:G,monthsShortRegex:G,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:K,longMonthsParse:K,shortMonthsParse:K,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var B="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),q="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),U=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],$=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?q[e.month()]:B[e.month()]:B},monthsRegex:$,monthsShortRegex:$,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:U,longMonthsParse:U,shortMonthsParse:U,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:4},invalidDate:"Fecha inv\xe1lida"});var Q="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),V="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),Z=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],X=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?V[e.month()]:Q[e.month()]:Q},monthsRegex:X,monthsShortRegex:X,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:Z,longMonthsParse:Z,shortMonthsParse:Z,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}});var ee="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),ae="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),_e=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],se=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;function de(e,a,_,s){var d={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[e+" minuti",e+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[e+" tunni",e+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[e+" kuu",e+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[e+" aasta",e+" aastat"]};return a?d[_][2]?d[_][2]:d[_][1]:s?d[_][0]:d[_][1]}e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?ae[e.month()]:ee[e.month()]:ee},monthsRegex:se,monthsShortRegex:se,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:_e,longMonthsParse:_e,shortMonthsParse:_e,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4},invalidDate:"Fecha inv\xe1lida"}),e.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:de,ss:de,m:de,mm:de,h:de,hh:de,d:de,dd:"%d p\xe4eva",M:de,MM:de,y:de,yy:de},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var te={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},ne={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"};e.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,a,_){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"%d \u062b\u0627\u0646\u06cc\u0647",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(e){return ne[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return te[e]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}});var re="nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" "),ie=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",re[7],re[8],re[9]];function me(e,a,_,s){var d,t,n="";switch(_){case"s":return s?"muutaman sekunnin":"muutama sekunti";case"ss":n=s?"sekunnin":"sekuntia";break;case"m":return s?"minuutin":"minuutti";case"mm":n=s?"minuutin":"minuuttia";break;case"h":return s?"tunnin":"tunti";case"hh":n=s?"tunnin":"tuntia";break;case"d":return s?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":n=s?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return s?"kuukauden":"kuukausi";case"MM":n=s?"kuukauden":"kuukautta";break;case"y":return s?"vuoden":"vuosi";case"yy":n=s?"vuoden":"vuotta";break}return t=s,n=((d=e)<10?t?ie[d]:re[d]:d)+" "+n}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:me,ss:me,m:me,mm:me,h:me,hh:me,d:me,dd:me,M:me,MM:me,y:me,yy:me},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),e.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0ur",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}}),e.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var oe=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?|janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,ue=[/^janv/i,/^f\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\xe9c/i];e.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsRegex:oe,monthsShortRegex:oe,monthsStrictRegex:/^(janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,monthsShortStrictRegex:/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?)/i,monthsParse:ue,longMonthsParse:ue,shortMonthsParse:ue,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var le="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),Me="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Me[e.month()]:le[e.month()]:le},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});e.defineLocale("ga",{months:["Ean\xe1ir","Feabhra","M\xe1rta","Aibre\xe1n","Bealtaine","Meitheamh","I\xfail","L\xfanasa","Me\xe1n F\xf3mhair","Deireadh F\xf3mhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","M\xe1rt","Aib","Beal","Meith","I\xfail","L\xfan","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["D\xe9 Domhnaigh","D\xe9 Luain","D\xe9 M\xe1irt","D\xe9 C\xe9adaoin","D\xe9ardaoin","D\xe9 hAoine","D\xe9 Sathairn"],weekdaysShort:["Domh","Luan","M\xe1irt","C\xe9ad","D\xe9ar","Aoine","Sath"],weekdaysMin:["Do","Lu","M\xe1","C\xe9","D\xe9","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Am\xe1rach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inn\xe9 ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s \xf3 shin",s:"c\xfapla soicind",ss:"%d soicind",m:"n\xf3im\xe9ad",mm:"%d n\xf3im\xe9ad",h:"uair an chloig",hh:"%d uair an chloig",d:"l\xe1",dd:"%d l\xe1",M:"m\xed",MM:"%d m\xedonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}});function Le(e,a,_,s){var d={s:["\u0925\u094b\u0921\u092f\u093e \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940","\u0925\u094b\u0921\u0947 \u0938\u0945\u0915\u0902\u0921"],ss:[e+" \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940",e+" \u0938\u0945\u0915\u0902\u0921"],m:["\u090f\u0915\u093e \u092e\u093f\u0923\u091f\u093e\u0928","\u090f\u0915 \u092e\u093f\u0928\u0942\u091f"],mm:[e+" \u092e\u093f\u0923\u091f\u093e\u0902\u0928\u0940",e+" \u092e\u093f\u0923\u091f\u093e\u0902"],h:["\u090f\u0915\u093e \u0935\u0930\u093e\u0928","\u090f\u0915 \u0935\u0930"],hh:[e+" \u0935\u0930\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u093e\u0902"],d:["\u090f\u0915\u093e \u0926\u093f\u0938\u093e\u0928","\u090f\u0915 \u0926\u0940\u0938"],dd:[e+" \u0926\u093f\u0938\u093e\u0902\u0928\u0940",e+" \u0926\u0940\u0938"],M:["\u090f\u0915\u093e \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928","\u090f\u0915 \u092e\u094d\u0939\u092f\u0928\u094b"],MM:[e+" \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928\u0940",e+" \u092e\u094d\u0939\u092f\u0928\u0947"],y:["\u090f\u0915\u093e \u0935\u0930\u094d\u0938\u093e\u0928","\u090f\u0915 \u0935\u0930\u094d\u0938"],yy:[e+" \u0935\u0930\u094d\u0938\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u094d\u0938\u093e\u0902"]};return s?d[_][0]:d[_][1]}function Ye(e,a,_,s){var d={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return s?d[_][0]:d[_][1]}e.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}}),e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("gom-deva",{months:{standalone:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u092f_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),format:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092e\u093e\u0930\u094d\u091a\u093e\u091a\u094d\u092f\u093e_\u090f\u092a\u094d\u0930\u0940\u0932\u093e\u091a\u094d\u092f\u093e_\u092e\u0947\u092f\u093e\u091a\u094d\u092f\u093e_\u091c\u0942\u0928\u093e\u091a\u094d\u092f\u093e_\u091c\u0941\u0932\u092f\u093e\u091a\u094d\u092f\u093e_\u0911\u0917\u0938\u094d\u091f\u093e\u091a\u094d\u092f\u093e_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0911\u0915\u094d\u091f\u094b\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0921\u093f\u0938\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940._\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u092f\u0924\u093e\u0930_\u0938\u094b\u092e\u093e\u0930_\u092e\u0902\u0917\u0933\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u092c\u093f\u0930\u0947\u0938\u094d\u0924\u093e\u0930_\u0938\u0941\u0915\u094d\u0930\u093e\u0930_\u0936\u0947\u0928\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0906\u092f\u0924._\u0938\u094b\u092e._\u092e\u0902\u0917\u0933._\u092c\u0941\u0927._\u092c\u094d\u0930\u0947\u0938\u094d\u0924._\u0938\u0941\u0915\u094d\u0930._\u0936\u0947\u0928.".split("_"),weekdaysMin:"\u0906_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u092c\u094d\u0930\u0947_\u0938\u0941_\u0936\u0947".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LTS:"A h:mm:ss [\u0935\u093e\u091c\u0924\u093e\u0902]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",llll:"ddd, D MMM YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]"},calendar:{sameDay:"[\u0906\u092f\u091c] LT",nextDay:"[\u092b\u093e\u0932\u094d\u092f\u093e\u0902] LT",nextWeek:"[\u092b\u0941\u0921\u0932\u094b] dddd[,] LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092b\u093e\u091f\u0932\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s \u0906\u0926\u0940\u0902",s:Le,ss:Le,m:Le,mm:Le,h:Le,hh:Le,d:Le,dd:Le,M:Le,MM:Le,y:Le,yy:Le},dayOfMonthOrdinalParse:/\d{1,2}(\u0935\u0947\u0930)/,ordinal:function(e,a){switch(a){case"D":return e+"\u0935\u0947\u0930";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/\u0930\u093e\u0924\u0940|\u0938\u0915\u093e\u0933\u0940\u0902|\u0926\u0928\u092a\u093e\u0930\u093e\u0902|\u0938\u093e\u0902\u091c\u0947/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u0940"===a?e<4?e:e+12:"\u0938\u0915\u093e\u0933\u0940\u0902"===a?e:"\u0926\u0928\u092a\u093e\u0930\u093e\u0902"===a?12<e?e:e+12:"\u0938\u093e\u0902\u091c\u0947"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0930\u093e\u0924\u0940":e<12?"\u0938\u0915\u093e\u0933\u0940\u0902":e<16?"\u0926\u0928\u092a\u093e\u0930\u093e\u0902":e<20?"\u0938\u093e\u0902\u091c\u0947":"\u0930\u093e\u0924\u0940"}}),e.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:Ye,ss:Ye,m:Ye,mm:Ye,h:Ye,hh:Ye,d:Ye,dd:Ye,M:Ye,MM:Ye,y:Ye,yy:Ye},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,a){switch(a){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,a){return 12===e&&(e=0),"rati"===a?e<4?e:e+12:"sokallim"===a?e:"donparam"===a?12<e?e:e+12:"sanje"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}});var he={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},ye={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"};e.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(e){return ye[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return he[e]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===a?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===a?e:"\u0aac\u0aaa\u0acb\u0ab0"===a?10<=e?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}}),e.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(e){return 2===e?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":e+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(e){return 2===e?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":e+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(e){return 2===e?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":e+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(e){return 2===e?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":e%10==0&&10!==e?e+" \u05e9\u05e0\u05d4":e+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(e){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(e)},meridiem:function(e,a,_){return e<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":e<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":e<12?_?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":e<18?_?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}});var ce={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},ke={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"},De=[/^\u091c\u0928/i,/^\u092b\u093c\u0930|\u092b\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924\u0902|\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935|\u0928\u0935\u0902/i,/^\u0926\u093f\u0938\u0902|\u0926\u093f\u0938/i];function pe(e,a,_){var s=e+" ";switch(_){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}e.defineLocale("hi",{months:{format:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),standalone:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u0902\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u0902\u092c\u0930_\u0926\u093f\u0938\u0902\u092c\u0930".split("_")},monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},monthsParse:De,longMonthsParse:De,shortMonthsParse:[/^\u091c\u0928/i,/^\u092b\u093c\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935/i,/^\u0926\u093f\u0938/i],monthsRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsShortRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsStrictRegex:/^(\u091c\u0928\u0935\u0930\u0940?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908?|\u0905\u0917\u0938\u094d\u0924?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924?\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930?)/i,monthsShortStrictRegex:/^(\u091c\u0928\.?|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\.?|\u0905\u0917\.?|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\.?|\u0926\u093f\u0938\.?)/i,calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return ke[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ce[e]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924"===a?e<4?e:e+12:"\u0938\u0941\u092c\u0939"===a?e:"\u0926\u094b\u092a\u0939\u0930"===a?10<=e?e:e+12:"\u0936\u093e\u092e"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0930\u093e\u0924":e<10?"\u0938\u0941\u092c\u0939":e<17?"\u0926\u094b\u092a\u0939\u0930":e<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}}),e.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:return"[pro\u0161lu] [nedjelju] [u] LT";case 3:return"[pro\u0161lu] [srijedu] [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:pe,m:pe,mm:pe,h:pe,hh:pe,d:"dan",dd:pe,M:"mjesec",MM:pe,y:"godinu",yy:pe},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var Te="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function fe(e,a,_,s){var d=e;switch(_){case"s":return s||a?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return d+(s||a)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(s||a?" perc":" perce");case"mm":return d+(s||a?" perc":" perce");case"h":return"egy"+(s||a?" \xf3ra":" \xf3r\xe1ja");case"hh":return d+(s||a?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(s||a?" nap":" napja");case"dd":return d+(s||a?" nap":" napja");case"M":return"egy"+(s||a?" h\xf3nap":" h\xf3napja");case"MM":return d+(s||a?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(s||a?" \xe9v":" \xe9ve");case"yy":return d+(s||a?" \xe9v":" \xe9ve")}return""}function we(e){return(e?"":"[m\xfalt] ")+"["+Te[this.day()]+"] LT[-kor]"}function ge(e){return e%100==11||e%10!=1}function He(e,a,_,s){var d=e+" ";switch(_){case"s":return a||s?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return ge(e)?d+(a||s?"sek\xfandur":"sek\xfandum"):d+"sek\xfanda";case"m":return a?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return ge(e)?d+(a||s?"m\xedn\xfatur":"m\xedn\xfatum"):a?d+"m\xedn\xfata":d+"m\xedn\xfatu";case"hh":return ge(e)?d+(a||s?"klukkustundir":"klukkustundum"):d+"klukkustund";case"d":return a?"dagur":s?"dag":"degi";case"dd":return ge(e)?a?d+"dagar":d+(s?"daga":"d\xf6gum"):a?d+"dagur":d+(s?"dag":"degi");case"M":return a?"m\xe1nu\xf0ur":s?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return ge(e)?a?d+"m\xe1nu\xf0ir":d+(s?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):a?d+"m\xe1nu\xf0ur":d+(s?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return a||s?"\xe1r":"\xe1ri";case"yy":return ge(e)?d+(a||s?"\xe1r":"\xe1rum"):d+(a||s?"\xe1r":"\xe1ri")}}e.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan._feb._m\xe1rc._\xe1pr._m\xe1j._j\xfan._j\xfal._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,_){return e<12?!0===_?"de":"DE":!0===_?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return we.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return we.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:fe,ss:fe,m:fe,mm:fe,h:fe,hh:fe,d:fe,dd:fe,M:fe,MM:fe,y:fe,yy:fe},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(e){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(e)},meridiem:function(e){return e<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":e<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":e<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(e,a){switch(a){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-\u056b\u0576":e+"-\u0580\u0564";default:return e}},week:{dow:1,doy:7}}),e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?11<=e?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,_){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}}),e.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:He,ss:He,m:He,mm:He,h:"klukkustund",hh:He,d:He,dd:He,M:He,MM:He,y:He,yy:He},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){switch(this.day()){case 0:return"[La scorsa] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT";default:return"[Lo scorso] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"}},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"\u4ee4\u548c",narrow:"\u32ff",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"\u5e73\u6210",narrow:"\u337b",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"\u662d\u548c",narrow:"\u337c",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"\u5927\u6b63",narrow:"\u337d",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"\u660e\u6cbb",narrow:"\u337e",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"\u897f\u66a6",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"\u7d00\u5143\u524d",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(\u5143|\d+)\u5e74/,eraYearOrdinalParse:function(e,a){return"\u5143"===a[1]?1:parseInt(a[1]||e,10)},months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(e){return"\u5348\u5f8c"===e},meridiem:function(e,a,_){return e<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(e){return e.week()!==this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(e){return this.week()!==e.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(e,a){switch(a){case"y":return 1===e?"\u5143\u5e74":e+"\u5e74";case"d":case"D":case"DDD":return e+"\u65e5";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}}),e.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,a){return 12===e&&(e=0),"enjing"===a?e:"siyang"===a?11<=e?e:e+12:"sonten"===a||"ndalu"===a?e+12:void 0},meridiem:function(e,a,_){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),e.defineLocale("ka",{months:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(\u10ec\u10d0\u10db|\u10ec\u10e3\u10d7|\u10e1\u10d0\u10d0\u10d7|\u10ec\u10d4\u10da|\u10d3\u10e6|\u10d7\u10d5)(\u10d8|\u10d4)/,function(e,a,_){return"\u10d8"===_?a+"\u10e8\u10d8":a+_+"\u10e8\u10d8"})},past:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(e)?e.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(e)?e.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):e},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(e){return 0===e?e:1===e?e+"-\u10da\u10d8":e<20||e<=100&&e%20==0||e%100==0?"\u10db\u10d4-"+e:e+"-\u10d4"},week:{dow:1,doy:7}});var be={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"};e.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(e){return e+(be[e]||be[e%10]||be[100<=e?100:null])},week:{dow:1,doy:7}});var ve={1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"},Se={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"};e.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,a,_){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(e){return Se[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ve[e]})},week:{dow:1,doy:4}});var je={1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"},xe={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};e.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(e){return xe[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return je[e]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===a?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===a?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===a?10<=e?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}}),e.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\uc77c";case"M":return e+"\uc6d4";case"w":case"W":return e+"\uc8fc";default:return e}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(e){return"\uc624\ud6c4"===e},meridiem:function(e,a,_){return e<12?"\uc624\uc804":"\uc624\ud6c4"}});var Pe={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},We={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},Ae=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"];e.defineLocale("ku",{months:Ae,monthsShort:Ae,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(e){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(e)},meridiem:function(e,a,_){return e<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return We[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Pe[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var Oe={0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"};function Ee(e,a,_,s){var d={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?d[_][0]:d[_][1]}function Fe(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10;return 0==a?Fe(e/10):Fe(a)}if(e<1e4){for(;10<=e;)e/=10;return Fe(e)}return Fe(e/=1e3)}e.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(e){return e+(Oe[e]||Oe[e%10]||Oe[100<=e?100:null])},week:{dow:1,doy:7}}),e.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return Fe(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return Fe(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:Ee,mm:"%d Minutten",h:Ee,hh:"%d Stonnen",d:Ee,dd:"%d Deeg",M:Ee,MM:"%d M\xe9int",y:Ee,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(e){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===e},meridiem:function(e,a,_){return e<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(e){return"\u0e97\u0eb5\u0ec8"+e}});var ze={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function Je(e,a,_,s){return a?Ne(_)[0]:s?Ne(_)[1]:Ne(_)[2]}function Ie(e){return e%10==0||10<e&&e<20}function Ne(e){return ze[e].split("_")}function Re(e,a,_,s){var d=e+" ";return 1===e?d+Je(0,a,_[0],s):a?d+(Ie(e)?Ne(_)[1]:Ne(_)[0]):s?d+Ne(_)[1]:d+(Ie(e)?Ne(_)[1]:Ne(_)[2])}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function(e,a,_,s){return a?"kelios sekund\u0117s":s?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:Re,m:Je,mm:Re,h:Je,hh:Re,d:Je,dd:Re,M:Je,MM:Re,y:Je,yy:Re},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}});var Ce={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function Ke(e,a,_){return _?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function Ge(e,a,_){return e+" "+Ke(Ce[_],e,a)}function Be(e,a,_){return Ke(Ce[_],e,a)}e.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function(e,a){return a?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:Ge,m:Be,mm:Ge,h:Be,hh:Ge,d:Be,dd:Ge,M:Be,MM:Ge,y:Be,yy:Ge},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var qe={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,_){var s=qe.words[_];return 1===_.length?a?s[0]:s[1]:e+" "+qe.correctGrammaticalCase(e,s)}};function Ue(e,a,_,s){switch(_){case"s":return a?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return e+(a?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return e+(a?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return e+(a?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return e+(a?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return e+(a?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return e+(a?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return e}}e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:qe.translate,m:qe.translate,mm:qe.translate,h:qe.translate,hh:qe.translate,d:"dan",dd:qe.translate,M:"mjesec",MM:qe.translate,y:"godinu",yy:qe.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),e.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u0435\u0434\u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0435\u0434\u0435\u043d \u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0435\u0434\u0435\u043d \u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,_=e%100;return 0===e?e+"-\u0435\u0432":0==_?e+"-\u0435\u043d":10<_&&_<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),e.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===a&&4<=e||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===a||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===a?e+12:e},meridiem:function(e,a,_){return e<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":e<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":e<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":e<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}}),e.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(e){return"\u04ae\u0425"===e},meridiem:function(e,a,_){return e<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:Ue,ss:Ue,m:Ue,mm:Ue,h:Ue,hh:Ue,d:Ue,dd:Ue,M:Ue,MM:Ue,y:Ue,yy:Ue},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+" \u04e9\u0434\u04e9\u0440";default:return e}}});var $e={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Qe={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function Ve(e,a,_,s){var d="";if(a)switch(_){case"s":d="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":d="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":d="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":d="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":d="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":d="%d \u0924\u093e\u0938";break;case"d":d="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":d="%d \u0926\u093f\u0935\u0938";break;case"M":d="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":d="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":d="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":d="%d \u0935\u0930\u094d\u0937\u0947";break}else switch(_){case"s":d="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":d="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":d="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":d="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":d="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":d="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":d="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":d="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":d="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":d="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":d="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":d="%d \u0935\u0930\u094d\u0937\u093e\u0902";break}return d.replace(/%d/i,e)}e.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:Ve,ss:Ve,m:Ve,mm:Ve,h:Ve,hh:Ve,d:Ve,dd:Ve,M:Ve,MM:Ve,y:Ve,yy:Ve},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Qe[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return $e[e]})},meridiemParse:/\u092a\u0939\u093e\u091f\u0947|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940|\u0930\u093e\u0924\u094d\u0930\u0940/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u092a\u0939\u093e\u091f\u0947"===a||"\u0938\u0915\u093e\u0933\u0940"===a?e:"\u0926\u0941\u092a\u093e\u0930\u0940"===a||"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===a||"\u0930\u093e\u0924\u094d\u0930\u0940"===a?12<=e?e:e+12:void 0},meridiem:function(e,a,_){return 0<=e&&e<6?"\u092a\u0939\u093e\u091f\u0947":e<12?"\u0938\u0915\u093e\u0933\u0940":e<17?"\u0926\u0941\u092a\u093e\u0930\u0940":e<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}}),e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,_){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,_){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),e.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var Ze={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},Xe={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"};e.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(e){return Xe[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Ze[e]})},week:{dow:1,doy:4}}),e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",w:"en uke",ww:"%d uker",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var ea={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},aa={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};e.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return aa[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ea[e]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===a?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===a?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===a?10<=e?e:e+12:"\u0938\u093e\u0901\u091d"===a?e+12:void 0},meridiem:function(e,a,_){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}});var _a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),sa="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),da=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],ta=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?sa[e.month()]:_a[e.month()]:_a},monthsRegex:ta,monthsShortRegex:ta,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:da,longMonthsParse:da,shortMonthsParse:da,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});var na="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),ra="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),ia=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],ma=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?ra[e.month()]:na[e.month()]:na},monthsRegex:ma,monthsShortRegex:ma,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:ia,longMonthsParse:ia,shortMonthsParse:ia,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",w:"\xe9\xe9n week",ww:"%d weken",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._m\xe5._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("oc-lnc",{months:{standalone:"geni\xe8r_febri\xe8r_mar\xe7_abril_mai_junh_julhet_agost_setembre_oct\xf2bre_novembre_decembre".split("_"),format:"de geni\xe8r_de febri\xe8r_de mar\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\xf2bre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dim\xe8cres_dij\xf2us_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[u\xe8i a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[i\xe8r a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});var oa={1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"},ua={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"};e.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(e){return ua[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return oa[e]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===a?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===a?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===a?10<=e?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}});var la="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_"),Ma="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_"),La=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^pa\u017a/i,/^lis/i,/^gru/i];function Ya(e){return e%10<5&&1<e%10&&~~(e/10)%10!=1}function ha(e,a,_){var s=e+" ";switch(_){case"ss":return s+(Ya(e)?"sekundy":"sekund");case"m":return a?"minuta":"minut\u0119";case"mm":return s+(Ya(e)?"minuty":"minut");case"h":return a?"godzina":"godzin\u0119";case"hh":return s+(Ya(e)?"godziny":"godzin");case"ww":return s+(Ya(e)?"tygodnie":"tygodni");case"MM":return s+(Ya(e)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return s+(Ya(e)?"lata":"lat")}}function ya(e,a,_){return e+(20<=e%100||100<=e&&e%100==0?" de ":" ")+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"s\u0103pt\u0103m\xe2ni",MM:"luni",yy:"ani"}[_]}function ca(e,a,_){var s,d;return"m"===_?a?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":e+" "+(s=+e,d={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",ww:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043d\u0435\u0434\u0435\u043b\u0438_\u043d\u0435\u0434\u0435\u043b\u044c",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[_].split("_"),s%10==1&&s%100!=11?d[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?d[1]:d[2])}e.defineLocale("pl",{months:function(e,a){return e?/D MMMM/.test(a)?Ma[e.month()]:la[e.month()]:la},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),monthsParse:La,longMonthsParse:La,shortMonthsParse:La,weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:ha,m:ha,mm:ha,h:ha,hh:ha,d:"1 dzie\u0144",dd:"%d dni",w:"tydzie\u0144",ww:ha,M:"miesi\u0105c",MM:ha,y:"rok",yy:ha},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_ter\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xe1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xe1b".split("_"),weekdaysMin:"do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",invalidDate:"Data inv\xe1lida"}),e.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:ya,m:"un minut",mm:ya,h:"o or\u0103",hh:ya,d:"o zi",dd:ya,w:"o s\u0103pt\u0103m\xe2n\u0103",ww:ya,M:"o lun\u0103",MM:ya,y:"un an",yy:ya},week:{dow:1,doy:7}});var ka=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i];e.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:ka,longMonthsParse:ka,shortMonthsParse:ka,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:ca,m:ca,mm:ca,h:"\u0447\u0430\u0441",hh:ca,d:"\u0434\u0435\u043d\u044c",dd:ca,w:"\u043d\u0435\u0434\u0435\u043b\u044f",ww:ca,M:"\u043c\u0435\u0441\u044f\u0446",MM:ca,y:"\u0433\u043e\u0434",yy:ca},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(e)},meridiem:function(e,a,_){return e<4?"\u043d\u043e\u0447\u0438":e<12?"\u0443\u0442\u0440\u0430":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-\u0439";case"D":return e+"-\u0433\u043e";case"w":case"W":return e+"-\u044f";default:return e}},week:{dow:1,doy:4}});var Da=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],pa=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"];e.defineLocale("sd",{months:Da,monthsShort:Da,weekdays:pa,weekdaysShort:pa,weekdaysMin:pa,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),e.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(e){return e+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(e){return"\u0db4.\u0dc0."===e||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===e},meridiem:function(e,a,_){return 11<e?_?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":_?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}});var Ta="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),fa="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function wa(e){return 1<e&&e<5}function ga(e,a,_,s){var d=e+" ";switch(_){case"s":return a||s?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return a||s?d+(wa(e)?"sekundy":"sek\xfand"):d+"sekundami";case"m":return a?"min\xfata":s?"min\xfatu":"min\xfatou";case"mm":return a||s?d+(wa(e)?"min\xfaty":"min\xfat"):d+"min\xfatami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?d+(wa(e)?"hodiny":"hod\xedn"):d+"hodinami";case"d":return a||s?"de\u0148":"d\u0148om";case"dd":return a||s?d+(wa(e)?"dni":"dn\xed"):d+"d\u0148ami";case"M":return a||s?"mesiac":"mesiacom";case"MM":return a||s?d+(wa(e)?"mesiace":"mesiacov"):d+"mesiacmi";case"y":return a||s?"rok":"rokom";case"yy":return a||s?d+(wa(e)?"roky":"rokov"):d+"rokmi"}}function Ha(e,a,_,s){var d=e+" ";switch(_){case"s":return a||s?"nekaj sekund":"nekaj sekundami";case"ss":return d+=1===e?a?"sekundo":"sekundi":2===e?a||s?"sekundi":"sekundah":e<5?a||s?"sekunde":"sekundah":"sekund";case"m":return a?"ena minuta":"eno minuto";case"mm":return d+=1===e?a?"minuta":"minuto":2===e?a||s?"minuti":"minutama":e<5?a||s?"minute":"minutami":a||s?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return d+=1===e?a?"ura":"uro":2===e?a||s?"uri":"urama":e<5?a||s?"ure":"urami":a||s?"ur":"urami";case"d":return a||s?"en dan":"enim dnem";case"dd":return d+=1===e?a||s?"dan":"dnem":2===e?a||s?"dni":"dnevoma":a||s?"dni":"dnevi";case"M":return a||s?"en mesec":"enim mesecem";case"MM":return d+=1===e?a||s?"mesec":"mesecem":2===e?a||s?"meseca":"mesecema":e<5?a||s?"mesece":"meseci":a||s?"mesecev":"meseci";case"y":return a||s?"eno leto":"enim letom";case"yy":return d+=1===e?a||s?"leto":"letom":2===e?a||s?"leti":"letoma":e<5?a||s?"leta":"leti":a||s?"let":"leti"}}e.defineLocale("sk",{months:Ta,monthsShort:fa,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 4:case 5:return"[minul\xfd] dddd [o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:ga,ss:ga,m:ga,mm:ga,h:ga,hh:ga,d:ga,dd:ga,M:ga,MM:ga,y:ga,yy:ga},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:Ha,ss:Ha,m:Ha,mm:Ha,h:Ha,hh:Ha,d:Ha,dd:Ha,M:Ha,MM:Ha,y:Ha,yy:Ha},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,a,_){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var ba={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u0435 \u043c\u0438\u043d\u0443\u0442\u0435"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0435","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],yy:["\u0433\u043e\u0434\u0438\u043d\u0430","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,_){var s=ba.words[_];return 1===_.length?a?s[0]:s[1]:e+" "+ba.correctGrammaticalCase(e,s)}};e.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:ba.translate,m:ba.translate,mm:ba.translate,h:ba.translate,hh:ba.translate,d:"\u0434\u0430\u043d",dd:ba.translate,M:"\u043c\u0435\u0441\u0435\u0446",MM:ba.translate,y:"\u0433\u043e\u0434\u0438\u043d\u0443",yy:ba.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var va={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,_){var s=va.words[_];return 1===_.length?a?s[0]:s[1]:e+" "+va.correctGrammaticalCase(e,s)}};e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:va.translate,m:va.translate,mm:va.translate,h:va.translate,hh:va.translate,d:"dan",dd:va.translate,M:"mesec",MM:va.translate,y:"godinu",yy:va.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),e.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,a,_){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,a){return 12===e&&(e=0),"ekuseni"===a?e:"emini"===a?11<=e?e:e+12:"entsambama"===a||"ebusuku"===a?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}),e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var a=e%10;return e+(1!=~~(e%100/10)&&(1==a||2==a)?":a":":e")},week:{dow:1,doy:4}}),e.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}});var Sa={1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"},ja={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"};e.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(e){return ja[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Sa[e]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,a,_){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,a){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===a?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===a||"\u0b95\u0bbe\u0bb2\u0bc8"===a||"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===a&&10<=e?e:e+12},week:{dow:0,doy:6}}),e.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===a?e<4?e:e+12:"\u0c09\u0c26\u0c2f\u0c02"===a?e:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===a?10<=e?e:e+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":e<10?"\u0c09\u0c26\u0c2f\u0c02":e<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":e<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}}),e.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}});var xa={0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"};e.defineLocale("tg",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0430\u043b\u0438_\u043c\u0430\u0440\u0442\u0438_\u0430\u043f\u0440\u0435\u043b\u0438_\u043c\u0430\u0439\u0438_\u0438\u044e\u043d\u0438_\u0438\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442\u0438_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0438_\u043e\u043a\u0442\u044f\u0431\u0440\u0438_\u043d\u043e\u044f\u0431\u0440\u0438_\u0434\u0435\u043a\u0430\u0431\u0440\u0438".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_")},monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u0424\u0430\u0440\u0434\u043e \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0448\u0430\u0431"===a?e<4?e:e+12:"\u0441\u0443\u0431\u04b3"===a?e:"\u0440\u04ef\u0437"===a?11<=e?e:e+12:"\u0431\u0435\u0433\u043e\u04b3"===a?e+12:void 0},meridiem:function(e,a,_){return e<4?"\u0448\u0430\u0431":e<11?"\u0441\u0443\u0431\u04b3":e<16?"\u0440\u04ef\u0437":e<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(e){return e+(xa[e]||xa[e%10]||xa[100<=e?100:null])},week:{dow:1,doy:7}}),e.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(e){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===e},meridiem:function(e,a,_){return e<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",w:"1 \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",ww:"%d \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}});var Pa={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'\xfcnji",4:"'\xfcnji",100:"'\xfcnji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};e.defineLocale("tk",{months:"\xddanwar_Fewral_Mart_Aprel_Ma\xfd_I\xfdun_I\xfdul_Awgust_Sent\xfdabr_Okt\xfdabr_No\xfdabr_Dekabr".split("_"),monthsShort:"\xddan_Few_Mar_Apr_Ma\xfd_I\xfdn_I\xfdl_Awg_Sen_Okt_No\xfd_Dek".split("_"),weekdays:"\xddek\u015fenbe_Du\u015fenbe_Si\u015fenbe_\xc7ar\u015fenbe_Pen\u015fenbe_Anna_\u015eenbe".split("_"),weekdaysShort:"\xddek_Du\u015f_Si\u015f_\xc7ar_Pen_Ann_\u015een".split("_"),weekdaysMin:"\xddk_D\u015f_S\u015f_\xc7r_Pn_An_\u015en".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[d\xfc\xfdn] LT",lastWeek:"[ge\xe7en] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s so\u0148",past:"%s \xf6\u0148",s:"birn\xe4\xe7e sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir a\xfd",MM:"%d a\xfd",y:"bir \xfdyl",yy:"%d \xfdyl"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'unjy";var _=e%10;return e+(Pa[_]||Pa[e%100-_]||Pa[100<=e?100:null])}},week:{dow:1,doy:7}}),e.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}});var Wa="pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function Aa(e,a,_,s){var d=function(e){var a=Math.floor(e%1e3/100),_=Math.floor(e%100/10),s=e%10,d="";0<a&&(d+=Wa[a]+"vatlh");0<_&&(d+=(""!==d?" ":"")+Wa[_]+"maH");0<s&&(d+=(""!==d?" ":"")+Wa[s]);return""===d?"pagh":d}(e);switch(_){case"ss":return d+" lup";case"mm":return d+" tup";case"hh":return d+" rep";case"dd":return d+" jaj";case"MM":return d+" jar";case"yy":return d+" DIS"}}e.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"leS":-1!==e.indexOf("jar")?a.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?a.slice(0,-3)+"nem":a+" pIq"},past:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"Hu\u2019":-1!==e.indexOf("jar")?a.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?a.slice(0,-3)+"ben":a+" ret"},s:"puS lup",ss:Aa,m:"wa\u2019 tup",mm:Aa,h:"wa\u2019 rep",hh:Aa,d:"wa\u2019 jaj",dd:Aa,M:"wa\u2019 jar",MM:Aa,y:"wa\u2019 DIS",yy:Aa},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var Oa={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};function Ea(e,a,_,s){var d={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[e+" m\xeduts",e+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[e+" \xfeoras",e+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return s||a?d[_][0]:d[_][1]}function Fa(e,a,_){var s,d;return"m"===_?a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===_?a?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":e+" "+(s=+e,d={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:a?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[_].split("_"),s%10==1&&s%100!=11?d[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?d[1]:d[2])}function za(e){return function(){return e+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}e.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xc7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),meridiem:function(e,a,_){return e<12?_?"\xf6\xf6":"\xd6\xd6":_?"\xf6s":"\xd6S"},meridiemParse:/\xf6\xf6|\xd6\xd6|\xf6s|\xd6S/,isPM:function(e){return"\xf6s"===e||"\xd6S"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'\u0131nc\u0131";var _=e%10;return e+(Oa[_]||Oa[e%100-_]||Oa[100<=e?100:null])}},week:{dow:1,doy:7}}),e.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,a,_){return 11<e?_?"d'o":"D'O":_?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:Ea,ss:Ea,m:Ea,mm:Ea,h:Ea,hh:Ea,d:Ea,dd:Ea,M:Ea,MM:Ea,y:Ea,yy:Ea},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),e.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),e.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}}),e.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===a||"\u0633\u06d5\u06be\u06d5\u0631"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"!==a&&"\u0643\u06d5\u0686"!==a&&11<=e?e:e+12},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":s<900?"\u0633\u06d5\u06be\u06d5\u0631":s<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":s<1230?"\u0686\u06c8\u0634":s<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return e+"-\u06be\u06d5\u067e\u062a\u06d5";default:return e}},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:7}}),e.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function(e,a){var _={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return!0===e?_.nominative.slice(1,7).concat(_.nominative.slice(0,1)):e?_[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(a)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(a)?"genitive":"nominative"][e.day()]:_.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:za("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:za("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:za("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:za("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return za("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return za("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:Fa,m:Fa,mm:Fa,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:Fa,d:"\u0434\u0435\u043d\u044c",dd:Fa,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:Fa,y:"\u0440\u0456\u043a",yy:Fa},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(e)},meridiem:function(e,a,_){return e<4?"\u043d\u043e\u0447\u0456":e<12?"\u0440\u0430\u043d\u043a\u0443":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-\u0439";case"D":return e+"-\u0433\u043e";default:return e}},week:{dow:1,doy:7}});var Ja=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],Ia=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];return e.defineLocale("ur",{months:Ja,monthsShort:Ja,weekdays:Ia,weekdaysShort:Ia,weekdaysMin:Ia,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,_){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),e.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),e.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}}),e.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,_){return e<12?_?"sa":"SA":_?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n tr\u01b0\u1edbc l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",w:"m\u1ed9t tu\u1ea7n",ww:"%d tu\u1ea7n",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),e.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),e.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}}),e.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a||"\u4e0b\u5348"!==a&&"\u665a\u4e0a"!==a&&11<=e?e:e+12},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:function(e){return e.week()!==this.week()?"[\u4e0b]dddLT":"[\u672c]dddLT"},lastDay:"[\u6628\u5929]LT",lastWeek:function(e){return this.week()!==e.week()?"[\u4e0a]dddLT":"[\u672c]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u5468";default:return e}},relativeTime:{future:"%s\u540e",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",w:"1 \u5468",ww:"%d \u5468",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}}),e.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1200?"\u4e0a\u5348":1200===s?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),e.defineLocale("zh-mo",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"D/M/YYYY",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),e.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,_){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),e.locale("en"),e});
//# sourceMappingURL=locales.min.js.map{"version":3,"file":"locales.min.js","sources":["locales.js"],"names":["global","factory","exports","module","require","define","amd","moment","this","defineLocale","months","split","monthsShort","weekdays","weekdaysShort","weekdaysMin","meridiemParse","isPM","input","test","meridiem","hours","minutes","isLower","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","s","ss","m","mm","h","hh","d","dd","M","MM","y","yy","dayOfMonthOrdinalParse","ordinal","number","week","dow","doy","pluralForm","n","pluralize","u","withoutSuffix","string","isFuture","f","str","plurals","replace","weekdaysParseExact","hour","minute","postformat","pluralForm$1","pluralize$1","plurals$1","symbolMap","1","2","3","4","5","6","7","8","9","0","months$1","preparse","match","symbolMap$1","numberMap","Ù¡","Ù¢","Ù£","Ù¤","Ù¥","Ù¦","Ù§","Ù¨","Ù©","Ù ","pluralForm$2","pluralize$2","plurals$2","symbolMap$2","numberMap$1","months$2","suffixes","70","80","20","50","100","10","30","60","90","relativeTimeWithPlural","key","num","forms","a","format","standalone","isFormat","day","period","w","ww","lastDigit","last2Digits","symbolMap$3","numberMap$2","à§§","à§¨","à§©","à§ª","à§«","à§¬","à§­","à§®","à§¯","à§¦","meridiemHour","symbolMap$4","numberMap$3","symbolMap$5","numberMap$4","à¼¡","à¼¢","à¼£","à¼¤","à¼¥","à¼¦","à¼§","à¼¨","à¼©","à¼ ","relativeTimeWithMutation","text","mutationTable","b","undefined","charAt","substring","softMutation","monthsShortRegex","monthsParseExact","monthsParse","monthsRegex","minWeekdaysParse","translate","result","weekdaysParse","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","lastNumber","token","ll","lll","llll","months$3","monthsParse$1","monthsRegex$1","plural$1","translate$1","processRelativeTime","processRelativeTime$1","processRelativeTime$2","l","output","exec","months$4","monthsNominativeEl","monthsGenitiveEl","momentToFormat","indexOf","_monthsGenitiveEl","month","_monthsNominativeEl","toLowerCase","calendarEl","mom","_calendarEl","Function","Object","prototype","toString","call","apply","monthsShortDot","monthsShort$1","monthsParse$2","monthsRegex$2","monthsShortDot$1","monthsShort$2","monthsParse$3","monthsRegex$3","invalidDate","monthsShortDot$2","monthsShort$3","monthsParse$4","monthsRegex$4","monthsShortDot$3","monthsShort$4","monthsParse$5","monthsRegex$5","processRelativeTime$3","symbolMap$6","numberMap$5","Û±","Û²","Û³","Û´","Ûµ","Û¶","Û·","Û¸","Û¹","Û°","numbersPast","numbersFuture","translate$2","monthsRegex$6","monthsParse$6","monthsShortWithDots","monthsShortWithoutDots","processRelativeTime$4","processRelativeTime$5","symbolMap$7","numberMap$6","à«§","à«¨","à«©","à«ª","à««","à«¬","à«­","à«®","à«¯","à«¦","symbolMap$8","numberMap$7","à¥§","à¥¨","à¥©","à¥ª","à¥«","à¥¬","à¥­","à¥®","à¥¯","à¥¦","monthsParse$7","translate$3","weekEndings","translate$4","plural$2","translate$5","eras","since","offset","name","narrow","abbr","until","Infinity","eraYearOrdinalRegex","eraYearOrdinalParse","parseInt","now","$0","$1","$2","suffixes$1","40","symbolMap$9","numberMap$8","áŸ¡","áŸ¢","áŸ£","áŸ¤","áŸ¥","áŸ¦","áŸ§","áŸ¨","áŸ©","áŸ ","symbolMap$a","numberMap$9","à³§","à³¨","à³©","à³ª","à³«","à³¬","à³­","à³®","à³¯","à³¦","isUpper","symbolMap$b","numberMap$a","months$7","suffixes$2","processRelativeTime$6","eifelerRegelAppliesToNumber","isNaN","substr","units","translateSingular","special","translate$6","units$1","relativeTimeWithPlural$1","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","length","translate$7","symbolMap$c","numberMap$b","relativeTimeMr","symbolMap$d","numberMap$c","á","á‚","áƒ","á„","á…","á†","á‡","áˆ","á‰","á€","symbolMap$e","numberMap$d","monthsShortWithDots$1","monthsShortWithoutDots$1","monthsParse$8","monthsRegex$7","monthsShortWithDots$2","monthsShortWithoutDots$2","monthsParse$9","monthsRegex$8","symbolMap$f","numberMap$e","à©§","à©¨","à©©","à©ª","à©«","à©¬","à©­","à©®","à©¯","à©¦","monthsNominative","monthsSubjective","monthsParse$a","plural$3","translate$8","relativeTimeWithPlural$2","relativeTimeWithPlural$3","monthsParse$b","months$8","days","months$9","monthsShort$7","plural$5","translate$9","processRelativeTime$7","translator$1","translator$2","symbolMap$g","numberMap$f","à¯§","à¯¨","à¯©","à¯ª","à¯«","à¯¬","à¯­","à¯®","à¯¯","à¯¦","suffixes$3","12","13","suffixes$4","numbersNouns","translate$a","numberNoun","hundred","Math","floor","ten","one","word","numberAsNoun","time","slice","suffixes$5","processRelativeTime$8","relativeTimeWithPlural$4","processHoursFunction","hm","nominative","accusative","genitive","concat","months$a","days$1","locale"],"mappings":"CAAE,SAAUA,EAAQC,GACE,iBAAZC,SAA0C,oBAAXC,QACZ,mBAAZC,QAAyBH,EAAQG,QAAQ,cACrC,mBAAXC,QAAyBA,OAAOC,IAAMD,OAAO,CAAC,aAAcJ,GACnEA,EAAQD,EAAOO,QAJjB,CAKCC,KAAM,SAAWD,gBAIfA,EAAOE,aAAa,KAAM,CACtBC,OAAQ,8FAA8FC,MAClG,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,4DAA4DF,MAClE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,cAAe,SACfC,KAAM,SAAUC,GACZ,MAAO,QAAQC,KAAKD,IAExBE,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACDE,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhCC,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,kBACTC,SAAU,eACVC,QAAS,iBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,YACNC,EAAG,mBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,YACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,SACJC,EAAG,WACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WAERC,uBAAwB,kBACxBC,QAAS,SAAUC,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMI,SAAbC,EAAuBC,GACnB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDE,SAAZC,EAAsBC,GAClB,OAAO,SAAUP,EAAQQ,EAAeC,EAAQC,GAC5C,IAAIC,EAAIP,EAAWJ,GACfY,EAAMC,EAAQN,GAAGH,EAAWJ,IAIhC,OAHU,IAANW,IACAC,EAAMA,EAAIJ,EAAgB,EAAI,IAE3BI,EAAIE,QAAQ,MAAOd,IAtEtC,IAaIa,EAAU,CACN3B,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJE,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJE,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaRzC,EAAS,CACL,iCACA,iCACA,2BACA,iCACA,qBACA,2BACA,uCACA,qBACA,uCACA,uCACA,uCACA,wCAGRH,EAAOE,aAAa,QAAS,CACzBC,OAAQA,EACRE,YAAaF,EACbG,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,gBACfC,KAAM,SAAUC,GACZ,MAAO,WAAQA,GAEnBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,SAEA,UAGfxC,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAGoB,EAAU,KACbnB,GAAImB,EAAU,KACdlB,EAAGkB,EAAU,KACbjB,GAAIiB,EAAU,KACdhB,EAAGgB,EAAU,KACbf,GAAIe,EAAU,KACdd,EAAGc,EAAU,KACbb,GAAIa,EAAU,KACdZ,EAAGY,EAAU,KACbX,GAAIW,EAAU,KACdV,EAAGU,EAAU,KACbT,GAAIS,EAAU,MAElBY,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0WAAwEC,MAC5E,KAEJC,YAAa,0WAAwED,MACjF,KAEJE,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,oCACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,qCAERI,KAAM,CACFC,IAAK,EACLC,IAAK,MAkBM,SAAfgB,EAAyBd,GACrB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDI,SAAde,EAAwBb,GACpB,OAAO,SAAUP,EAAQQ,EAAeC,EAAQC,GAC5C,IAAIC,EAAIQ,EAAanB,GACjBY,EAAMS,EAAUd,GAAGY,EAAanB,IAIpC,OAHU,IAANW,IACAC,EAAMA,EAAIJ,EAAgB,EAAI,IAE3BI,EAAIE,QAAQ,MAAOd,IAlFtC,IAAIsB,EAAY,CACRC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KAePX,EAAY,CACRnC,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJE,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJE,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaRqC,EAAW,CACP,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGRjF,EAAOE,aAAa,QAAS,CACzBC,OAAQ8E,EACR5E,YAAa4E,EACb3E,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,gBACfC,KAAM,SAAUC,GACZ,MAAO,WAAQA,GAEnBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,SAEA,UAGfxC,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAGkC,EAAY,KACfjC,GAAIiC,EAAY,KAChBhC,EAAGgC,EAAY,KACf/B,GAAI+B,EAAY,KAChB9B,EAAG8B,EAAY,KACf7B,GAAI6B,EAAY,KAChB5B,EAAG4B,EAAY,KACf3B,GAAI2B,EAAY,KAChB1B,EAAG0B,EAAY,KACfzB,GAAIyB,EAAY,KAChBxB,EAAGwB,EAAY,KACfvB,GAAIuB,EAAY,MAEpBc,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAOb,EAAUa,KAEpBrB,QAAQ,KAAM,WAEvBb,KAAM,CACFC,IAAK,EACLC,IAAK,MAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0WAAwEC,MAC5E,KAEJC,YAAa,0WAAwED,MACjF,KAEJE,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,oCACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,qCAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIiC,EAAc,CACVb,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPK,EAAY,CACRC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb/F,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wYAA6EC,MACjF,KAEJC,YAAa,wYAA6ED,MACtF,KAEJE,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,gBACfC,KAAM,SAAUC,GACZ,MAAO,WAAQA,GAEnBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,SAEA,UAGfxC,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,oCACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,qCAERqC,SAAU,SAAUzB,GAChB,OAAOA,EACFK,QAAQ,kEAAiB,SAAUqB,GAChC,OAAOE,EAAUF,KAEpBrB,QAAQ,UAAM,MAEvBI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAOC,EAAYD,KAEtBrB,QAAQ,KAAM,WAEvBb,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,gXAAyEC,MAC7E,KAEJC,YAAa,gXAAyED,MAClF,KAEJE,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,oCACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,qCAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KA8BM,SAAf6C,EAAyB3C,GACrB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDI,SAAd4C,EAAwB1C,GACpB,OAAO,SAAUP,EAAQQ,EAAeC,EAAQC,GAC5C,IAAIC,EAAIqC,EAAahD,GACjBY,EAAMsC,EAAU3C,GAAGyC,EAAahD,IAIpC,OAHU,IAANW,IACAC,EAAMA,EAAIJ,EAAgB,EAAI,IAE3BI,EAAIE,QAAQ,MAAOd,IA9FtC,IAAImD,EAAc,CACV5B,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPoB,EAAc,CACVd,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAeTG,EAAY,CACRhE,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJE,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJE,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJE,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaRyD,EAAW,CACP,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGRrG,EAAOE,aAAa,KAAM,CACtBC,OAAQkG,EACRhG,YAAagG,EACb/F,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,mMAAwCH,MAAM,KAC7DI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,gBACfC,KAAM,SAAUC,GACZ,MAAO,WAAQA,GAEnBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,SAEA,UAGfxC,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAG+D,EAAY,KACf9D,GAAI8D,EAAY,KAChB7D,EAAG6D,EAAY,KACf5D,GAAI4D,EAAY,KAChB3D,EAAG2D,EAAY,KACf1D,GAAI0D,EAAY,KAChBzD,EAAGyD,EAAY,KACfxD,GAAIwD,EAAY,KAChBvD,EAAGuD,EAAY,KACftD,GAAIsD,EAAY,KAChBrD,EAAGqD,EAAY,KACfpD,GAAIoD,EAAY,MAEpBf,SAAU,SAAUzB,GAChB,OAAOA,EACFK,QAAQ,kEAAiB,SAAUqB,GAChC,OAAOiB,EAAYjB,KAEtBrB,QAAQ,UAAM,MAEvBI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAOgB,EAAYhB,KAEtBrB,QAAQ,KAAM,WAEvBb,KAAM,CACFC,IAAK,EACLC,IAAK,MAMb,IAAImD,EAAW,CACX/B,EAAG,QACHI,EAAG,QACHG,EAAG,QACHyB,GAAI,QACJC,GAAI,QACJhC,EAAG,OACHK,EAAG,OACH4B,GAAI,OACJC,GAAI,OACJjC,EAAG,cACHC,EAAG,cACHiC,IAAK,cACL/B,EAAG,YACHG,EAAG,QACH6B,GAAI,QACJC,GAAI,QACJC,GAAI,kBACJC,GAAI,mBAwFR,SAASC,EAAuBhE,EAAQQ,EAAeyD,GACnD,IATkBC,EACdC,EAgBJ,MAAY,MAARF,EACOzD,EAAgB,6CAAY,6CACpB,MAARyD,EACAzD,EAAgB,6CAAY,6CAE5BR,EAAS,KAtBFkE,GAsB6BlE,EArB3CmE,EAQS,CACThF,GAAIqB,EAAgB,6HAA2B,6HAC/CnB,GAAImB,EAAgB,6HAA2B,6HAC/CjB,GAAIiB,EAAgB,6HAA2B,6HAC/Cf,GAAI,6EACJE,GAAI,iHACJE,GAAI,8EAOgCoE,GArBvB7G,MAAM,KAChB8G,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAnFhBnH,EAAOE,aAAa,KAAM,CACtBC,OAAQ,+EAA+EC,MACnF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2KAAqEF,MAC3E,KAEJG,cAAe,sDAA8BH,MAAM,KACnDI,YAAa,+CAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,qBACTC,QAAS,kBACTC,SAAU,mDACVC,QAAS,qBACTC,SAAU,iDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,qBACNC,EAAG,+BACHC,GAAI,iBACJC,EAAG,uBACHC,GAAI,sBACJC,EAAG,WACHC,GAAI,UACJC,EAAG,aACHC,GAAI,YACJC,EAAG,SACHC,GAAI,QACJC,EAAG,SACHC,GAAI,SAERpC,cAAe,oDACfC,KAAM,SAAUC,GACZ,MAAO,8BAAmBC,KAAKD,IAEnCE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,YACAA,EAAO,GACP,kBACAA,EAAO,GACP,eAEA,cAGflB,uBAAwB,6DACxBC,QAAS,SAAUC,GACf,GAAe,IAAXA,EAEA,OAAOA,EAAS,kBAEpB,IAAIoE,EAAIpE,EAAS,GAGjB,OAAOA,GAAUsD,EAASc,IAAMd,EAFvBtD,EAAS,IAAOoE,IAEsBd,EAD7B,KAAVtD,EAAgB,IAAM,QAGlCC,KAAM,CACFC,IAAK,EACLC,IAAK,KAgCbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,oiBAAuGjH,MAC3G,KAEJkH,WAAY,whBAAqGlH,MAC7G,MAGRC,YAAa,sRAA0DD,MACnE,KAEJE,SAAU,CACN+G,OAAQ,+SAA0DjH,MAC9D,KAEJkH,WAAY,+SAA0DlH,MAClE,KAEJmH,SAAU,8IAEdhH,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,6CACTC,QAAS,mDACTE,QAAS,6CACTD,SAAU,WACN,MAAO,6BAEXE,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,uEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,mEAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNC,EAAG,wFACHE,EAAG4E,EACH3E,GAAI2E,EACJ1E,EAAG0E,EACHzE,GAAIyE,EACJxE,EAAG,iCACHC,GAAIuE,EACJtE,EAAG,iCACHC,GAAIqE,EACJpE,EAAG,qBACHC,GAAImE,GAERvG,cAAe,wHACfC,KAAM,SAAUC,GACZ,MAAO,8DAAiBC,KAAKD,IAEjCE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,qBAEA,wCAGflB,uBAAwB,uCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACD,OAAQzE,EAAS,IAAO,GAAKA,EAAS,IAAO,GACzCA,EAAS,KAAQ,IACjBA,EAAS,KAAQ,GAEfA,EAAS,UADTA,EAAS,UAEnB,IAAK,IACD,OAAOA,EAAS,gBACpB,QACI,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,kbAAoFC,MACxF,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,uCACTC,QAAS,uCACTC,SAAU,mBACVC,QAAS,6CACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,sEACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,kEAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNC,EAAG,wFACHC,GAAI,gDACJC,EAAG,uCACHC,GAAI,0CACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,8BACJiF,EAAG,6CACHC,GAAI,gDACJjF,EAAG,iCACHC,GAAI,0CACJC,EAAG,uCACHC,GAAI,2CAERC,uBAAwB,0FACxBC,QAAS,SAAUC,GACf,IAAI4E,EAAY5E,EAAS,GACrB6E,EAAc7E,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,gBACO,GAAhB6E,EACA7E,EAAS,gBACK,GAAd6E,GAAoBA,EAAc,GAClC7E,EAAS,gBACK,GAAd4E,EACA5E,EAAS,gBACK,GAAd4E,EACA5E,EAAS,gBACK,GAAd4E,GAAiC,GAAdA,EACnB5E,EAAS,gBAETA,EAAS,iBAGxBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,uKAA8IC,MAClJ,KAEJC,YAAa,gEAAiDD,MAAM,KACpEE,SAAU,yDAA+CF,MAAM,KAC/DG,cAAe,mCAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,kDACLC,KAAM,wDAEVC,SAAU,CACNC,QAAS,yBACTC,QAAS,2BACTC,SAAU,+BACVC,QAAS,2BACTC,SAAU,6CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,oBACRC,KAAM,uBACNC,EAAG,kBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,uBACHC,GAAI,oBACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,YACHC,GAAI,UAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI2E,EAAc,CACVvD,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEP+C,EAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbzI,EAAOE,aAAa,QAAS,CACzBC,OAAQ,sdAA0FC,MAC9F,KAEJC,YAAa,4UAAmED,MAC5E,KAEJE,SAAU,2TAA4DF,MAClE,KAEJG,cAAe,6LAAuCH,MAAM,KAC5DI,YAAa,+JAAkCJ,MAAM,KACrDa,eAAgB,CACZC,GAAI,4BACJC,IAAK,+BACLC,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,wDACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAG,sEACHC,GAAI,gDACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO4C,EAAY5C,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAO2C,EAAY3C,MAI3B1E,cAAe,6LACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,uBAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,uBAAbnD,GAEa,6BAAbA,EADAmD,EAGa,mCAAbnD,EACQ,GAARmD,EAAYA,EAAOA,EAAO,GACb,mCAAbnD,GAEa,+CAAbA,EADAmD,EAAO,QACX,GAKXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,EACP,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,iCACAA,EAAO,GACP,6CAEA,sBAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIwF,EAAc,CACVpE,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEP4D,EAAc,CACVZ,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbzI,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sdAA0FC,MAC9F,KAEJC,YAAa,4UAAmED,MAC5E,KAEJE,SAAU,2TAA4DF,MAClE,KAEJG,cAAe,6LAAuCH,MAAM,KAC5DI,YAAa,+JAAkCJ,MAAM,KACrDa,eAAgB,CACZC,GAAI,4BACJC,IAAK,+BACLC,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,wDACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAG,sEACHC,GAAI,gDACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOyD,EAAYzD,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOwD,EAAYxD,MAG3B1E,cAAe,+HACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAGO,uBAAbnD,GAA8B,GAARmD,GACT,mCAAbnD,GAAwBmD,EAAO,GACnB,mCAAbnD,EAEOmD,EAAO,GAEPA,GAGfnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,iCAEA,sBAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI0F,EAAc,CACVtE,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEP8D,EAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAiGb,SAASC,EAAyBzG,EAAQQ,EAAeyD,GACrD,IAyBcyC,EApBd,OAAO1G,EAAS,KAoBF0G,EAzBD,CACTrH,GAAI,WACJM,GAAI,MACJF,GAAI,UAE8BwE,GAqBvB,IArB6BjE,EAwBrC0G,EAEX,SAAsBA,GAClB,IAAIC,EAAgB,CAChBvH,EAAG,IACHwH,EAAG,IACHpH,EAAG,KAEP,YAAsCqH,IAAlCF,EAAcD,EAAKI,OAAO,IAGvBH,EAAcD,EAAKI,OAAO,IAAMJ,EAAKK,UAAU,GAF3CL,EAXAM,CAAaN,IA1H5B1J,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wzBAAqJC,MACzJ,KAEJC,YAAa,qPAAiED,MAC1E,KAEJ6J,iBAAkB,+BAClBC,kBAAkB,EAClB5J,SAAU,mbAAgFF,MACtF,KAEJG,cAAe,2QAAoDH,MAC/D,KAEJI,YAAa,iIAA6BJ,MAAM,KAChDa,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,4CACTC,QAAS,4CACTC,SAAU,mGACVC,QAAS,gCACTC,SAAU,kGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,oCACNC,EAAG,iCACHC,GAAI,0CACJC,EAAG,+DACHC,GAAI,oCACJC,EAAG,qEACHC,GAAI,0CACJC,EAAG,mDACHC,GAAI,8BACJC,EAAG,yDACHC,GAAI,8BACJC,EAAG,6CACHC,GAAI,mBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO2D,EAAY3D,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAO0D,EAAY1D,MAG3B1E,cAAe,6MACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAGO,yCAAbnD,GAAiC,GAARmD,GACZ,+CAAbnD,GAA0BmD,EAAO,GACrB,+CAAbnD,EAEOmD,EAAO,GAEPA,GAGfnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,uCACAA,EAAO,GACP,6CACAA,EAAO,GACP,6CACAA,EAAO,GACP,6CAEA,wCAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAkDb,IAAIgH,EAAc,CACV,QACA,mBACA,QACA,QACA,QACA,cACA,QACA,QACA,QACA,QACA,OACA,SAEJC,EAAc,uJAqBdC,EAAmB,CACf,OACA,OACA,eACA,QACA,OACA,OACA,QA4ER,SAASC,EAAUtH,EAAQQ,EAAeyD,GACtC,IAAIsD,EAASvH,EAAS,IACtB,OAAQiE,GACJ,IAAK,KAQD,OANIsD,GADW,IAAXvH,EACU,UACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,IACD,OAAOQ,EAAgB,eAAiB,eAC5C,IAAK,KAQD,OANI+G,GADW,IAAXvH,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,SAOlB,IAAK,IACD,OAAOQ,EAAgB,YAAc,cACzC,IAAK,KAQD,OANI+G,GADW,IAAXvH,EACU,MACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,OAEA,OAGlB,IAAK,KAMD,OAJIuH,GADW,IAAXvH,EACU,MAEA,OAGlB,IAAK,KAQD,OANIuH,GADW,IAAXvH,EACU,SACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,KAQD,OANIuH,GADW,IAAXvH,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,UA7H1BhD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qFAAgFC,MACpF,KAEJC,YAAa,wDAAmDD,MAAM,KACtEE,SAAU,kDAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,wBAAwBJ,MAAM,KAC3CoK,cAAeH,EACfI,kBArCoB,CAChB,QACA,QACA,WACA,sBACA,SACA,WACA,YA+BJC,mBA7BqB,CACjB,QACA,QACA,QACA,QACA,QACA,QACA,SAuBJL,iBAAkBA,EAElBD,YAAaA,EACbH,iBAAkBG,EAClBO,kBA7CoB,6FA8CpBC,uBA7CyB,gEA8CzBT,YAAaA,EACbU,gBAAiBV,EACjBW,iBAAkBX,EAElBlJ,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,mCAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,0BACTC,SAAU,eACVC,QAAS,qBACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,cACNC,EAAG,2BACHC,GAAI,YACJC,EAAG,cACHC,GAAIoH,EACJnH,EAAG,SACHC,GAAI,SACJC,EAAG,YACHC,GAAIgH,EACJ/G,EAAG,SACHC,GAAI8G,EACJ7G,EAAG,WACHC,GApIR,SAAiCG,GAC7B,OAWJ,SAAS+H,EAAW/H,GAChB,GAAa,EAATA,EACA,OAAO+H,EAAW/H,EAAS,IAE/B,OAAOA,EAfC+H,CAAW/H,IACf,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOA,EAAS,SACpB,QACI,OAAOA,EAAS,YA6HxBF,uBAAwB,qBACxBC,QAAS,SAAUC,GAEf,OAAOA,GADiB,IAAXA,EAAe,QAAO,QAGvCC,KAAM,CACFC,IAAK,EACLC,IAAK,GAET1C,cAAe,YACfC,KAAM,SAAUsK,GACZ,MAAiB,SAAVA,GAEXnK,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAOgD,EAAO,GAAK,OAAS,UAoEpChE,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qFAAqFC,MACzF,KAEJC,YAAa,8DAA8DD,MACvE,KAEJ8J,kBAAkB,EAClB5J,SAAU,iEAA4DF,MAClE,KAEJG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB5F,QAAS,oBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACD,MAAO,4BACX,KAAK,EACD,MAAO,gCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,cACHC,GAAImI,EACJlI,EAAGkI,EACHjI,GAAIiI,EACJhI,EAAGgI,EACH/H,GAAI+H,EACJ9H,EAAG,MACHC,GAAI6H,EACJ5H,EAAG,SACHC,GAAI2H,EACJ1H,EAAG,SACHC,GAAIyH,GAERxH,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJmH,WAAY,uFAAoFlH,MAC5F,KAEJiH,OAAQ,wHAAqHjH,MACzH,KAEJmH,SAAU,mBAEdlH,YAAa,iEAA8DD,MACvE,KAEJ8J,kBAAkB,EAClB5J,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,mBACJ4J,GAAI,aACJ3J,IAAK,gCACL4J,IAAK,mBACL3J,KAAM,qCACN4J,KAAM,wBAEV3J,SAAU,CACNC,QAAS,WACL,MAAO,YAA+B,IAAjBxB,KAAKa,QAAgB,MAAQ,MAAQ,QAE9DY,QAAS,WACL,MAAO,eAA+B,IAAjBzB,KAAKa,QAAgB,MAAQ,MAAQ,QAE9Da,SAAU,WACN,MAAO,YAA+B,IAAjB1B,KAAKa,QAAgB,MAAQ,MAAQ,QAE9Dc,QAAS,WACL,MAAO,YAA+B,IAAjB3B,KAAKa,QAAgB,MAAQ,MAAQ,QAE9De,SAAU,WACN,MACI,wBACkB,IAAjB5B,KAAKa,QAAgB,MAAQ,MAC9B,QAGRgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,eACRC,KAAM,QACNC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,YACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERC,uBAAwB,wBACxBC,QAAS,SAAUC,EAAQyE,GAcvB,OAAOzE,GAHQ,MAAXyE,GAA6B,MAAXA,EATP,IAAXzE,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,OAEG,MAIjBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIiI,EAAW,8HAAoFhL,MAC3F,KAEJC,EAAc,yFAAkDD,MAAM,KACtEiL,EAAgB,CACZ,QACA,WACA,aACA,QACA,aACA,wCACA,2CACA,QACA,gBACA,gBACA,QACA,SAIJC,EAAgB,mPAEpB,SAASC,EAASlI,GACd,OAAW,EAAJA,GAASA,EAAI,GAAoB,MAAZA,EAAI,IAEpC,SAASmI,EAAYxI,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAI6G,EAASvH,EAAS,IACtB,OAAQiE,GACJ,IAAK,IACD,OAAOzD,GAAiBE,EAAW,gBAAe,mBACtD,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAUgB,EAASvI,GAAU,UAAY,UAEzCuH,EAAS,YAExB,IAAK,IACD,OAAO/G,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAUgB,EAASvI,GAAU,SAAW,SAExCuH,EAAS,WAExB,IAAK,IACD,OAAO/G,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAUgB,EAASvI,GAAU,SAAW,SAExCuH,EAAS,WAExB,IAAK,IACD,OAAO/G,GAAiBE,EAAW,MAAQ,OAC/C,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAUgB,EAASvI,GAAU,MAAQ,UAErCuH,EAAS,MAExB,IAAK,IACD,OAAO/G,GAAiBE,EAAW,gBAAU,kBACjD,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAUgB,EAASvI,GAAU,iBAAW,uBAExCuH,EAAS,iBAExB,IAAK,IACD,OAAO/G,GAAiBE,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAUgB,EAASvI,GAAU,OAAS,OAEtCuH,EAAS,QAwShC,SAASkB,EAAoBzI,EAAQQ,EAAeyD,EAAKvD,GACrD,IAAI2D,EAAS,CACTjF,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACO,EAAS,QAASA,EAAS,UAChC0E,EAAG,CAAC,aAAc,eAClBhF,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACK,EAAS,UAAWA,EAAS,YAClCJ,EAAG,CAAC,WAAY,cAChBC,GAAI,CAACG,EAAS,SAAUA,EAAS,YAErC,OAAOQ,EAAgB6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GA6DxD,SAASyE,EAAsB1I,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTjF,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACO,EAAS,QAASA,EAAS,UAChC0E,EAAG,CAAC,aAAc,eAClBhF,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACK,EAAS,UAAWA,EAAS,YAClCJ,EAAG,CAAC,WAAY,cAChBC,GAAI,CAACG,EAAS,SAAUA,EAAS,YAErC,OAAOQ,EAAgB6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GA6DxD,SAAS0E,EAAsB3I,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTjF,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACO,EAAS,QAASA,EAAS,UAChC0E,EAAG,CAAC,aAAc,eAClBhF,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACK,EAAS,UAAWA,EAAS,YAClCJ,EAAG,CAAC,WAAY,cAChBC,GAAI,CAACG,EAAS,SAAUA,EAAS,YAErC,OAAOQ,EAAgB6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAjcxDjH,EAAOE,aAAa,KAAM,CACtBC,OAAQiL,EACR/K,YAAaA,EACb+J,YAAakB,EACbrB,iBAAkBqB,EAGlBX,kBAAmB,gPACnBC,uBAAwB,6FACxBT,YAAakB,EACbR,gBAAiBQ,EACjBP,iBAAkBO,EAClB/K,SAAU,mFAAmDF,MAAM,KACnEG,cAAe,kCAAuBH,MAAM,KAC5CI,YAAa,kCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,yBACNqK,EAAG,cAEPpK,SAAU,CACNC,QAAS,cACTC,QAAS,kBACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,yBACX,KAAK,EACD,MAAO,oBACX,KAAK,EACD,MAAO,oBAGnB5F,QAAS,oBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,0BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,eACNC,EAAGsJ,EACHrJ,GAAIqJ,EACJpJ,EAAGoJ,EACHnJ,GAAImJ,EACJlJ,EAAGkJ,EACHjJ,GAAIiJ,EACJhJ,EAAGgJ,EACH/I,GAAI+I,EACJ9I,EAAG8I,EACH7I,GAAI6I,EACJ5I,EAAG4I,EACH3I,GAAI2I,GAER1I,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0TAAgEC,MACpE,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,2WAAoEF,MAC1E,KAEJG,cAAe,iIAA6BH,MAAM,KAClDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,iHACJC,IAAK,wHACLC,KAAM,+HAEVC,SAAU,CACNC,QAAS,6EACTC,QAAS,6EACTE,QAAS,6EACTD,SAAU,wFACVE,SAAU,wFACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAU6J,GAMd,OAAOA,GALK,mCAAUC,KAAKD,GACrB,qBACA,uBAAQC,KAAKD,GACb,qBACA,uBAGV5J,KAAM,0CACNC,EAAG,6EACHC,GAAI,gDACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,yBAERC,uBAAwB,6BACxBC,QAAS,wBACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,qDAAqDD,MAC9D,KAEJE,SAAU,+EAA+EF,MACrF,KAEJG,cAAe,+BAA+BH,MAAM,KACpDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EAEpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,cACNC,EAAG,mBACHC,GAAI,YACJC,EAAG,QACHC,GAAI,WACJC,EAAG,MACHC,GAAI,SACJC,EAAG,UACHC,GAAI,aACJC,EAAG,MACHC,GAAI,SACJC,EAAG,WACHC,GAAI,cAERC,uBAAwB,mCAExBC,QAAS,SAAUC,GACf,IACI6I,EAAS,GAiCb,OATQ,GAzBA7I,EA2BA6I,EADM,KA1BN7I,GA0BkB,KA1BlBA,GA0B8B,KA1B9BA,GA0B0C,KA1B1CA,GA0BsD,MA1BtDA,EA2BS,MAEA,MAEF,EA/BPA,IAgCJ6I,EA9BS,CACL,GACA,KACA,KACA,MACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,KACA,KACA,MACA,KACA,OAvBA7I,IAkCDA,EAAS6I,GAEpB5I,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sFAAsFC,MAC1F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAAqDF,MAAM,KACrEG,cAAe,oCAA8BH,MAAM,KACnDI,YAAa,6BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,sBACVC,QAAS,oBACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,iBACHC,GAAI,cACJC,EAAG,WACHC,GAAI,cACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,cACHC,GAAI,gBACJC,EAAG,WACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAqBbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,2FAAqFC,MACzF,KAEJC,YAAa,mEAA6DD,MACtE,KAEJ8J,kBAAkB,EAClB5J,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdE,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,oBACHC,GAAI,cACJC,EAAGqJ,EACHpJ,GAAI,aACJC,EAAGmJ,EACHlJ,GAAI,aACJC,EAAGiJ,EACHhJ,GAAIgJ,EACJ/D,EAAG+D,EACH9D,GAAI,YACJjF,EAAG+I,EACH9I,GAAI8I,EACJ7I,EAAG6I,EACH5I,GAAI4I,GAER3I,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAqBbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAqFC,MACzF,KAEJC,YAAa,gEAA6DD,MACtE,KAEJ8J,kBAAkB,EAClB5J,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdE,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,oBACHC,GAAI,cACJC,EAAGsJ,EACHrJ,GAAI,aACJC,EAAGoJ,EACHnJ,GAAI,aACJC,EAAGkJ,EACHjJ,GAAIiJ,EACJhE,EAAGgE,EACH/D,GAAI,YACJjF,EAAGgJ,EACH/I,GAAI+I,EACJ9I,EAAG8I,EACH7I,GAAI6I,GAER5I,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAqBbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wFAAqFC,MACzF,KAEJC,YAAa,gEAA6DD,MACtE,KAEJ8J,kBAAkB,EAClB5J,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdE,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,oBACHC,GAAI,cACJC,EAAGuJ,EACHtJ,GAAI,aACJC,EAAGqJ,EACHpJ,GAAI,aACJC,EAAGmJ,EACHlJ,GAAIkJ,EACJjE,EAAGiE,EACHhE,GAAI,YACJjF,EAAGiJ,EACHhJ,GAAIgJ,EACJ/I,EAAG+I,EACH9I,GAAI8I,GAER7I,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI4I,EAAW,CACP,mDACA,+DACA,uCACA,mDACA,eACA,2BACA,uCACA,mDACA,2EACA,+DACA,+DACA,gEAEJzL,EAAW,CACP,mDACA,2BACA,mDACA,2BACA,+DACA,uCACA,oDAGRN,EAAOE,aAAa,KAAM,CACtBC,OAAQ4L,EACR1L,YAAa0L,EACbzL,SAAUA,EACVC,cAAeD,EACfE,YAAa,iLAAqCJ,MAAM,KACxDa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,WACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVd,cAAe,4BACfC,KAAM,SAAUC,GACZ,MAAO,iBAASA,GAEpBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,eAEA,gBAGfxC,SAAU,CACNC,QAAS,4CACTC,QAAS,4CACTC,SAAU,UACVC,QAAS,4CACTC,SAAU,6DACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,sDACRC,KAAM,0CACNC,EAAG,uFACHC,GAAI,sDACJC,EAAG,mDACHC,GAAI,0CACJC,EAAG,+DACHC,GAAI,sDACJC,EAAG,mDACHC,GAAI,0CACJC,EAAG,uCACHC,GAAI,8BACJC,EAAG,mDACHC,GAAI,2CAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CACFC,IAAK,EACLC,IAAK,MAabnD,EAAOE,aAAa,KAAM,CACtB8L,mBAAoB,wnBAAqH5L,MACrI,KAEJ6L,iBAAkB,wnBAAqH7L,MACnI,KAEJD,OAAQ,SAAU+L,EAAgB7E,GAC9B,OAAK6E,EAGiB,iBAAX7E,GACP,IAAIzG,KAAKyG,EAAO0C,UAAU,EAAG1C,EAAO8E,QAAQ,UAGrClM,KAAKmM,kBAAkBF,EAAeG,SAEtCpM,KAAKqM,oBAAoBJ,EAAeG,SARxCpM,KAAKqM,qBAWpBjM,YAAa,kPAAoDD,MAAM,KACvEE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1CS,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAY,GAARF,EACOE,EAAU,eAAO,eAEjBA,EAAU,eAAO,gBAGhCN,KAAM,SAAUC,GACZ,MAAyC,YAAjCA,EAAQ,IAAI4L,cAAc,IAEtC9L,cAAe,+BACfQ,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEViL,WAAY,CACR/K,QAAS,+CACTC,QAAS,yCACTC,SAAU,eACVC,QAAS,mCACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,iGACX,QACI,MAAO,yGAGnB1F,SAAU,KAEdN,SAAU,SAAUyF,EAAKwF,GACrB,IApEY9L,EAoERkL,EAAS5L,KAAKyM,YAAYzF,GAC1BnG,EAAQ2L,GAAOA,EAAI3L,QAIvB,OAzEYH,EAsEGkL,GApEM,oBAAbc,UAA4BhM,aAAiBgM,UACX,sBAA1CC,OAAOC,UAAUC,SAASC,KAAKpM,MAoE3BkL,EAASA,EAAOmB,MAAMP,IAEnBZ,EAAO/H,QAAQ,KAAMhD,EAAQ,IAAO,EAAI,qBAAQ,6BAE3DiB,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNC,EAAG,oGACHC,GAAI,8EACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,0DACHC,GAAI,oCACJC,EAAG,gEACHC,GAAI,2CAERC,uBAAwB,gBACxBC,QAAS,WACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlB3G,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtB5J,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlB3G,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlB3G,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtB5J,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlB3G,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlB3G,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlB3G,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,kGAA6FC,MACjG,KAEJC,YAAa,yDAAoDD,MAAM,KACvEE,SAAU,oEAAqDF,MAAM,KACrEG,cAAe,0CAAgCH,MAAM,KACrDI,YAAa,4BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,4BACJC,IAAK,kCACLC,KAAM,2CACN4J,KAAM,uCAEV1K,cAAe,cACfC,KAAM,SAAUC,GACZ,MAAyC,MAAlCA,EAAMmJ,OAAO,GAAGyC,eAE3B1L,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAY,GAARF,EACOE,EAAU,SAAW,SAErBA,EAAU,SAAW,UAGpCQ,SAAU,CACNC,QAAS,sBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,sBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,gBACNC,EAAG,kBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,aACHC,GAAI,aACJC,EAAG,WACHC,GAAI,YAERC,uBAAwB,WACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI8J,EAAiB,8DAA8D7M,MAC3E,KAEJ8M,EAAgB,kDAAkD9M,MAAM,KACxE+M,EAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EAAgB,mLAEpBpN,EAAOE,aAAa,QAAS,CACzBC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACb6F,EAAc9K,EAAEiK,SAEhBY,EAAe7K,EAAEiK,SAJjBY,GAOf7C,YAAagD,EACbnD,iBAAkBmD,EAClBzC,kBAAmB,+FACnBC,uBAAwB,0FACxBT,YAAagD,EACbtC,gBAAiBsC,EACjBrC,iBAAkBqC,EAClB7M,SAAU,6DAAuDF,MAAM,KACvEG,cAAe,2CAAqCH,MAAM,KAC1DI,YAAa,0BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBxB,KAAKa,QAAgB,IAAM,IAAM,QAE3DY,QAAS,WACL,MAAO,mBAAmC,IAAjBzB,KAAKa,QAAgB,IAAM,IAAM,QAE9Da,SAAU,WACN,MAAO,cAAiC,IAAjB1B,KAAKa,QAAgB,IAAM,IAAM,QAE5Dc,QAAS,WACL,MAAO,cAAiC,IAAjB3B,KAAKa,QAAgB,IAAM,IAAM,QAE5De,SAAU,WACN,MACI,0BACkB,IAAjB5B,KAAKa,QAAgB,IAAM,IAC5B,QAGRgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJiF,EAAG,aACHC,GAAI,aACJjF,EAAG,SACHC,GAAI,WACJC,EAAG,YACHC,GAAI,cAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIkK,EAAmB,8DAA8DjN,MAC7E,KAEJkN,EAAgB,kDAAkDlN,MAAM,KACxEmN,EAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EAAgB,mLAEpBxN,EAAOE,aAAa,QAAS,CACzBC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACbiG,EAAclL,EAAEiK,SAEhBgB,EAAiBjL,EAAEiK,SAJnBgB,GAOfjD,YAAaoD,EACbvD,iBAAkBuD,EAClB7C,kBAAmB,+FACnBC,uBAAwB,0FACxBT,YAAaoD,EACb1C,gBAAiB0C,EACjBzC,iBAAkByC,EAClBjN,SAAU,6DAAuDF,MAAM,KACvEG,cAAe,2CAAqCH,MAAM,KAC1DI,YAAa,0BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBxB,KAAKa,QAAgB,IAAM,IAAM,QAE3DY,QAAS,WACL,MAAO,mBAAmC,IAAjBzB,KAAKa,QAAgB,IAAM,IAAM,QAE9Da,SAAU,WACN,MAAO,cAAiC,IAAjB1B,KAAKa,QAAgB,IAAM,IAAM,QAE5Dc,QAAS,WACL,MAAO,cAAiC,IAAjB3B,KAAKa,QAAgB,IAAM,IAAM,QAE5De,SAAU,WACN,MACI,0BACkB,IAAjB5B,KAAKa,QAAgB,IAAM,IAC5B,QAGRgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJiF,EAAG,aACHC,GAAI,aACJjF,EAAG,SACHC,GAAI,WACJC,EAAG,YACHC,GAAI,cAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,GAETsK,YAAa,sBAKjB,IAAIC,EAAmB,8DAA8DtN,MAC7E,KAEJuN,EAAgB,kDAAkDvN,MAAM,KACxEwN,EAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EAAgB,mLAEpB7N,EAAOE,aAAa,QAAS,CACzBC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACbsG,EAAcvL,EAAEiK,SAEhBqB,EAAiBtL,EAAEiK,SAJnBqB,GAOftD,YAAayD,EACb5D,iBAAkB4D,EAClBlD,kBAAmB,+FACnBC,uBAAwB,0FACxBT,YAAayD,EACb/C,gBAAiB+C,EACjB9C,iBAAkB8C,EAClBtN,SAAU,6DAAuDF,MAAM,KACvEG,cAAe,2CAAqCH,MAAM,KAC1DI,YAAa,0BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBxB,KAAKa,QAAgB,IAAM,IAAM,QAE3DY,QAAS,WACL,MAAO,mBAAmC,IAAjBzB,KAAKa,QAAgB,IAAM,IAAM,QAE9Da,SAAU,WACN,MAAO,cAAiC,IAAjB1B,KAAKa,QAAgB,IAAM,IAAM,QAE5Dc,QAAS,WACL,MAAO,cAAiC,IAAjB3B,KAAKa,QAAgB,IAAM,IAAM,QAE5De,SAAU,WACN,MACI,0BACkB,IAAjB5B,KAAKa,QAAgB,IAAM,IAC5B,QAGRgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJiF,EAAG,aACHC,GAAI,aACJjF,EAAG,SACHC,GAAI,WACJC,EAAG,YACHC,GAAI,cAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI2K,GAAmB,8DAA8D1N,MAC7E,KAEJ2N,GAAgB,kDAAkD3N,MAAM,KACxE4N,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,mLAqFpB,SAASC,GAAsBlL,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTnF,EAAG,CAAC,kBAAgB,iBAAe,iBACnCC,GAAI,CAACa,EAAS,UAAWA,EAAS,YAClCZ,EAAG,CAAC,gBAAc,gBAClBC,GAAI,CAACW,EAAS,UAAWA,EAAS,YAClCV,EAAG,CAAC,eAAa,YAAa,eAC9BC,GAAI,CAACS,EAAS,SAAUA,EAAS,UACjCR,EAAG,CAAC,kBAAa,kBACjBE,EAAG,CAAC,UAAW,WAAY,cAC3BC,GAAI,CAACK,EAAS,OAAQA,EAAS,SAC/BJ,EAAG,CAAC,eAAa,QAAS,gBAC1BC,GAAI,CAACG,EAAS,SAAUA,EAAS,YAErC,OAAIQ,EACO6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAElDvD,EAAW2D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GApGnDjH,EAAOE,aAAa,KAAM,CACtBC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACb0G,GAAc3L,EAAEiK,SAEhByB,GAAiB1L,EAAEiK,SAJnByB,IAOf1D,YAAa6D,GACbhE,iBAAkBgE,GAClBtD,kBAAmB,+FACnBC,uBAAwB,0FACxBT,YAAa6D,GACbnD,gBAAiBmD,GACjBlD,iBAAkBkD,GAClB1N,SAAU,6DAAuDF,MAAM,KACvEG,cAAe,2CAAqCH,MAAM,KAC1DI,YAAa,0BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBxB,KAAKa,QAAgB,IAAM,IAAM,QAE3DY,QAAS,WACL,MAAO,mBAAmC,IAAjBzB,KAAKa,QAAgB,IAAM,IAAM,QAE9Da,SAAU,WACN,MAAO,cAAiC,IAAjB1B,KAAKa,QAAgB,IAAM,IAAM,QAE5Dc,QAAS,WACL,MAAO,cAAiC,IAAjB3B,KAAKa,QAAgB,IAAM,IAAM,QAE5De,SAAU,WACN,MACI,0BACkB,IAAjB5B,KAAKa,QAAgB,IAAM,IAC5B,QAGRgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJiF,EAAG,aACHC,GAAI,aACJjF,EAAG,SACHC,GAAI,WACJC,EAAG,YACHC,GAAI,cAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,GAETsK,YAAa,sBAyBjBzN,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gGAA6FC,MACjG,KAEJC,YAAa,gEAA6DD,MACtE,KAEJE,SAAU,sFAAiEF,MACvE,KAEJG,cAAe,gBAAgBH,MAAM,KACrCI,YAAa,gBAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,cACTC,SAAU,wBACVC,QAAS,aACTC,SAAU,oBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,eACRC,KAAM,YACNC,EAAGgM,GACH/L,GAAI+L,GACJ9L,EAAG8L,GACH7L,GAAI6L,GACJ5L,EAAG4L,GACH3L,GAAI2L,GACJ1L,EAAG0L,GACHzL,GAAI,cACJC,EAAGwL,GACHvL,GAAIuL,GACJtL,EAAGsL,GACHrL,GAAIqL,IAERpL,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,+FAA+FC,MACnG,KAEJC,YAAa,8DAA8DD,MACvE,KAEJ8J,kBAAkB,EAClB5J,SAAU,sEAAsEF,MAC5E,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,0BACJC,IAAK,gCACLC,KAAM,sCACNqK,EAAG,WACHX,GAAI,oBACJC,IAAK,0BACLC,KAAM,gCAEV3J,SAAU,CACNC,QAAS,kBACTC,QAAS,mBACTC,SAAU,gBACVC,QAAS,kBACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,WACHC,GAAI,UACJC,EAAG,eACHC,GAAI,cACJC,EAAG,WACHC,GAAI,WAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIgL,GAAc,CACV5J,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPoJ,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb9O,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0WAAwEC,MAC5E,KAEJC,YAAa,0WAAwED,MACjF,KAEJE,SAAU,iRAAoEF,MAC1E,KAEJG,cAAe,iRAAoEH,MAC/E,KAEJI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVd,cAAe,wGACfC,KAAM,SAAUC,GACZ,MAAO,qDAAaC,KAAKD,IAE7BE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,qDAEA,sDAGfxC,SAAU,CACNC,QAAS,+DACTC,QAAS,yDACTC,SAAU,qCACVC,QAAS,+DACTC,SAAU,0DACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,oDACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EACFK,QAAQ,mBAAU,SAAUqB,GACzB,OAAOiJ,GAAYjJ,KAEtBrB,QAAQ,UAAM,MAEvBI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAOgJ,GAAYhJ,KAEtBrB,QAAQ,KAAM,WAEvBhB,uBAAwB,gBACxBC,QAAS,WACTE,KAAM,CACFC,IAAK,EACLC,IAAK,MAMb,IAAI4L,GAAc,iFAAwE3O,MAClF,KAEJ4O,GAAgB,CACZ,QACA,QACA,SACA,SACA,YACA,SACA,SACAD,GAAY,GACZA,GAAY,GACZA,GAAY,IAEpB,SAASE,GAAYjM,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAoCkBV,EAAQU,EApCtB6G,EAAS,GACb,OAAQtD,GACJ,IAAK,IACD,OAAOvD,EAAW,oBAAsB,kBAC5C,IAAK,KACD6G,EAAS7G,EAAW,WAAa,WACjC,MACJ,IAAK,IACD,OAAOA,EAAW,WAAa,WACnC,IAAK,KACD6G,EAAS7G,EAAW,WAAa,YACjC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACD6G,EAAS7G,EAAW,SAAW,SAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,eAAW,cACjC,IAAK,KACD6G,EAAS7G,EAAW,eAAW,kBAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,YAAc,WACpC,IAAK,KACD6G,EAAS7G,EAAW,YAAc,YAClC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACD6G,EAAS7G,EAAW,SAAW,SAC/B,MAGR,OAE0BA,EAHIA,EAA9B6G,IAGkBvH,EAHIA,GAIN,GACVU,EACIsL,GAAchM,GACd+L,GAAY/L,GAChBA,GARoC,IAAMuH,EAWpDvK,EAAOE,aAAa,KAAM,CACtBC,OAAQ,iHAA2GC,MAC/G,KAEJC,YAAa,6EAAuED,MAChF,KAEJE,SAAU,qEAAqEF,MAC3E,KAEJG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,mBACJC,IAAK,gCACLC,KAAM,sCACNqK,EAAG,WACHX,GAAI,cACJC,IAAK,2BACLC,KAAM,iCAEV3J,SAAU,CACNC,QAAS,6BACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,mBACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,qBACRC,KAAM,YACNC,EAAG+M,GACH9M,GAAI8M,GACJ7M,EAAG6M,GACH5M,GAAI4M,GACJ3M,EAAG2M,GACH1M,GAAI0M,GACJzM,EAAGyM,GACHxM,GAAIwM,GACJvM,EAAGuM,GACHtM,GAAIsM,GACJrM,EAAGqM,GACHpM,GAAIoM,IAERnM,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,MAAO,CACvBC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,wBAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,cACHC,GAAI,WACJC,EAAG,aACHC,GAAI,WAERC,uBAAwB,UACxBC,QAAS,SAAUC,GACf,OAAOA,GAEXC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wFAAqFC,MACzF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,wFAA4EF,MAClF,KAEJG,cAAe,0CAA8BH,MAAM,KACnDI,YAAa,gCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,gBACVC,QAAS,wBACTC,SAAU,8BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,kBACNC,EAAG,eACHC,GAAI,cACJC,EAAG,eACHC,GAAI,cACJC,EAAG,cACHC,GAAI,cACJC,EAAG,YACHC,GAAI,WACJC,EAAG,oBACHC,GAAI,mBACJC,EAAG,aACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,gGAAuFC,MAC3F,KAEJC,YAAa,0EAAiED,MAC1E,KAEJ8J,kBAAkB,EAClB5J,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERC,uBAAwB,gBACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOzE,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,SAOvDhD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,gGAAuFC,MAC3F,KAEJC,YAAa,0EAAiED,MAC1E,KAEJ8J,kBAAkB,EAClB5J,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERC,uBAAwB,gBACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOzE,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAEI+L,GAAgB,2LAChBC,GAAgB,CACZ,SACA,YACA,SACA,QACA,QACA,SACA,SACA,YACA,SACA,QACA,QACA,YAGRnP,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gGAAuFC,MAC3F,KAEJC,YAAa,0EAAiED,MAC1E,KAEJgK,YAAa8E,GACbjF,iBAAkBiF,GAClBvE,kBA3BsB,oGA4BtBC,uBA3B2B,6FA4B3BT,YAAagF,GACbtE,gBAAiBsE,GACjBrE,iBAAkBqE,GAClB7O,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJiF,EAAG,cACHC,GAAI,cACJjF,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERC,uBAAwB,eACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAIJ,IAAK,IACD,OAAOzE,GAAqB,IAAXA,EAAe,KAAO,IAG3C,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIiM,GAAsB,6DAA6DhP,MAC/E,KAEJiP,GAAyB,kDAAkDjP,MACvE,KAGRJ,EAAOE,aAAa,KAAM,CACtBC,OAAQ,iGAAiGC,MACrG,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACbgI,GAAuBjN,EAAEiK,SAEzB+C,GAAoBhN,EAAEiK,SAJtB+C,IAOflF,kBAAkB,EAClB5J,SAAU,wDAAwDF,MAC9D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,iBACTC,SAAU,8BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAG,mBACHC,GAAI,cACJC,EAAG,eACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,aACHC,GAAI,aACJC,EAAG,WACHC,GAAI,cAERC,uBAAwB,kBACxBC,QAAS,SAAUC,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEC,KAAM,CACFC,IAAK,EACLC,IAAK,KA8CbnD,EAAOE,aAAa,KAAM,CACtBC,OAzCW,CACP,YACA,UACA,WACA,aACA,YACA,YACA,UACA,YACA,qBACA,sBACA,UACA,WA8BJE,YA5BgB,CACZ,MACA,QACA,UACA,MACA,OACA,QACA,UACA,SACA,OACA,OACA,OACA,QAiBJ6J,kBAAkB,EAClB5J,SAhBa,CACT,kBACA,cACA,iBACA,oBACA,eACA,eACA,kBAUJC,cARgB,CAAC,OAAQ,OAAQ,WAAS,UAAQ,UAAQ,QAAS,QASnEC,YARc,CAAC,KAAM,KAAM,QAAM,QAAM,QAAM,IAAK,MASlDS,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,qBACTC,SAAU,eACVC,QAAS,kBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,OACRC,KAAM,eACNC,EAAG,mBACHC,GAAI,aACJC,EAAG,gBACHC,GAAI,mBACJC,EAAG,iBACHC,GAAI,oBACJC,EAAG,QACHC,GAAI,WACJC,EAAG,QACHC,GAAI,eACJC,EAAG,SACHC,GAAI,aAERC,uBAAwB,mBACxBC,QAAS,SAAUC,GAEf,OAAOA,GADiB,IAAXA,EAAe,IAAMA,EAAS,IAAO,EAAI,KAAO,OAGjEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAyKb,SAASmM,GAAsBtM,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTnF,EAAG,CAAC,wFAAmB,2DACvBC,GAAI,CAACa,EAAS,0DAAcA,EAAS,mCACrCZ,EAAG,CAAC,0DAAc,+CAClBC,GAAI,CAACW,EAAS,oDAAaA,EAAS,yCACpCV,EAAG,CAAC,8CAAY,6BAChBC,GAAI,CAACS,EAAS,wCAAWA,EAAS,6BAClCR,EAAG,CAAC,oDAAa,mCACjBC,GAAI,CAACO,EAAS,8CAAYA,EAAS,uBACnCN,EAAG,CAAC,4EAAiB,qDACrBC,GAAI,CAACK,EAAS,gEAAeA,EAAS,yCACtCJ,EAAG,CAAC,0DAAc,yCAClBC,GAAI,CAACG,EAAS,oDAAaA,EAAS,0CAExC,OAAOU,EAAW2D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GA0GnD,SAASsI,GAAsBvM,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTnF,EAAG,CAAC,qBAAsB,iBAC1BC,GAAI,CAACa,EAAS,cAAeA,EAAS,WACtCZ,EAAG,CAAC,aAAc,YAClBC,GAAI,CAACW,EAAS,YAAaA,EAAS,WACpCV,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACS,EAAS,WAAYA,EAAS,UACnCR,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACO,EAAS,WAAYA,EAAS,QACnCN,EAAG,CAAC,eAAgB,aACpBC,GAAI,CAACK,EAAS,cAAeA,EAAS,WACtCJ,EAAG,CAAC,aAAc,YAClBC,GAAI,CAACG,EAAS,YAAaA,EAAS,YAExC,OAAOU,EAAW2D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAnQnDjH,EAAOE,aAAa,KAAM,CACtBC,OAzCW,CACP,gBACA,aACA,aACA,aACA,gBACA,kBACA,cACA,iBACA,eACA,gBACA,eACA,mBA8BJE,YA5BgB,CACZ,OACA,OACA,UACA,OACA,UACA,UACA,OACA,SACA,OACA,UACA,OACA,WAiBJ6J,kBAAkB,EAClB5J,SAhBa,CACT,iBACA,UACA,aACA,YACA,YACA,WACA,eAUJC,cARkB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAS7DC,YARgB,CAAC,QAAM,KAAM,QAAM,KAAM,KAAM,KAAM,MASrDS,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,yBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,gBACNC,EAAG,gBACHC,GAAI,YACJC,EAAG,UACHC,GAAI,gBACJC,EAAG,OACHC,GAAI,aACJC,EAAG,QACHC,GAAI,WACJC,EAAG,UACHC,GAAI,eACJC,EAAG,WACHC,GAAI,eAERC,uBAAwB,mBACxBC,QAAS,SAAUC,GAEf,OAAOA,GADiB,IAAXA,EAAe,IAAMA,EAAS,IAAO,EAAI,KAAO,OAGjEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,4FAAyFC,MAC7F,KAEJC,YAAa,iEAA8DD,MACvE,KAEJ8J,kBAAkB,EAClB5J,SAAU,yDAAmDF,MAAM,KACnEG,cAAe,2CAAqCH,MAAM,KAC1DI,YAAa,6BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,UAA6B,IAAjBxB,KAAKa,QAAgB,QAAO,QAAO,QAE1DY,QAAS,WACL,MAAO,gBAA6B,IAAjBzB,KAAKa,QAAgB,QAAO,QAAO,QAE1Da,SAAU,WACN,MAAO,UAA6B,IAAjB1B,KAAKa,QAAgB,QAAO,KAAO,QAE1Dc,QAAS,WACL,MAAO,UAA6B,IAAjB3B,KAAKa,QAAgB,OAAM,KAAO,QAEzDe,SAAU,WACN,MACI,qBAAwC,IAAjB5B,KAAKa,QAAgB,QAAO,KAAO,QAGlEgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAU4B,GACd,OAA0B,IAAtBA,EAAIuI,QAAQ,MACL,IAAMvI,EAEV,MAAQA,GAEnB3B,KAAM,SACNC,EAAG,eACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,aACJC,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAwBbnD,EAAOE,aAAa,WAAY,CAC5BC,OAAQ,CACJmH,WAAY,0cAAwFlH,MAChG,KAEJiH,OAAQ,4yBAAmJjH,MACvJ,KAEJmH,SAAU,mBAEdlH,YAAa,qVAA4ED,MACrF,KAEJ8J,kBAAkB,EAClB5J,SAAU,iRAAqDF,MAAM,KACrEG,cAAe,wLAA4CH,MAAM,KACjEI,YAAa,mGAAwBJ,MAAM,KAC3C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,gDACJC,IAAK,mDACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4DACLC,KAAM,qEACN4J,KAAM,kEAEV3J,SAAU,CACNC,QAAS,0BACTC,QAAS,kDACTC,SAAU,8CACVC,QAAS,0BACTC,SAAU,8CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,KACRC,KAAM,8BACNC,EAAGoN,GACHnN,GAAImN,GACJlN,EAAGkN,GACHjN,GAAIiN,GACJhN,EAAGgN,GACH/M,GAAI+M,GACJ9M,EAAG8M,GACH7M,GAAI6M,GACJ5M,EAAG4M,GACH3M,GAAI2M,GACJ1M,EAAG0M,GACHzM,GAAIyM,IAERxM,uBAAwB,8BACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAOzE,EAAS,qBACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,GAET1C,cAAe,0IACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,6BAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,yCAAbnD,EACAmD,EACa,+CAAbnD,EACO,GAAPmD,EAAYA,EAAOA,EAAO,GACb,mCAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,6CACAA,EAAO,GACP,iCAEA,8BAyBnBhE,EAAOE,aAAa,WAAY,CAC5BC,OAAQ,CACJmH,WAAY,4EAA4ElH,MACpF,KAEJiH,OAAQ,wIAAwIjH,MAC5I,KAEJmH,SAAU,mBAEdlH,YAAa,4DAA4DD,MACrE,KAEJ8J,kBAAkB,EAClB5J,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,iBACJC,IAAK,oBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,6BACLC,KAAM,sCACN4J,KAAM,mCAEV3J,SAAU,CACNC,QAAS,WACTC,QAAS,cACTC,SAAU,sBACVC,QAAS,WACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,KACRC,KAAM,UACNC,EAAGqN,GACHpN,GAAIoN,GACJnN,EAAGmN,GACHlN,GAAIkN,GACJjN,EAAGiN,GACHhN,GAAIgN,GACJ/M,EAAG+M,GACH9M,GAAI8M,GACJ7M,EAAG6M,GACH5M,GAAI4M,GACJ3M,EAAG2M,GACH1M,GAAI0M,IAERzM,uBAAwB,cACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAOzE,EAAS,KACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,GAET1C,cAAe,+BACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,SAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,aAAbnD,EACAmD,EACa,aAAbnD,EACO,GAAPmD,EAAYA,EAAOA,EAAO,GACb,UAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,OACAA,EAAO,GACP,WACAA,EAAO,GACP,WACAA,EAAO,GACP,QAEA,UAOnB,IAAIwL,GAAc,CACVjL,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPyK,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbnQ,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gdAAyFC,MAC7F,KAEJC,YAAa,mUAAyED,MAClF,KAEJ8J,kBAAkB,EAClB5J,SAAU,mSAAwDF,MAC9D,KAEJG,cAAe,qKAAmCH,MAAM,KACxDI,YAAa,iFAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,8CACJC,IAAK,iDACLC,EAAG,aACHC,GAAI,cACJC,IAAK,2DACLC,KAAM,kEAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,4CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,oCACNC,EAAG,8CACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,+BAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOsK,GAAYtK,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOqK,GAAYrK,MAK3B1E,cAAe,gGACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,uBAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,6BAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,6BAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,2BACAA,EAAO,GACP,2BAEA,sBAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sXAA0EC,MAC9E,KAEJC,YAAa,kSAA4DD,MACrE,KAEJE,SAAU,6LAAuCF,MAAM,KACvDG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,kCACNqK,EAAG,WACHX,GAAI,aACJC,IAAK,mBACLC,KAAM,yBAEV3J,SAAU,CACNC,QAAS,4CACTC,QAAS,sCACTC,SAAU,qCACVC,QAAS,kDACTC,SAAU,qGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNC,EAAG,0DACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,SAAUS,GACV,OAAe,IAAXA,EACO,uCAEJA,EAAS,6BAEpBR,EAAG,qBACHC,GAAI,SAAUO,GACV,OAAe,IAAXA,EACO,uCAEJA,EAAS,6BAEpBN,EAAG,2BACHC,GAAI,SAAUK,GACV,OAAe,IAAXA,EACO,6CAEJA,EAAS,yCAEpBJ,EAAG,qBACHC,GAAI,SAAUG,GACV,OAAe,IAAXA,EACO,uCACAA,EAAS,IAAO,GAAgB,KAAXA,EACrBA,EAAS,sBAEbA,EAAS,8BAGxBvC,cAAe,qTACfC,KAAM,SAAUC,GACZ,MAAO,6HAA8BC,KAAKD,IAE9CE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,0DACAA,EAAO,GACP,iCACAA,EAAO,GACPhD,EAAU,kCAAW,sEACrBgD,EAAO,GACPhD,EAAU,4BAAU,sEAEpB,8BAOnB,IAAIoP,GAAc,CACV7L,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPqL,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAETC,GAAgB,CACZ,iBACA,oCACA,mCACA,mCACA,iBACA,uBACA,uBACA,iBACA,gDACA,mCACA,oCACA,iDA6HR,SAASC,GAAYjO,EAAQQ,EAAeyD,GACxC,IAAIsD,EAASvH,EAAS,IACtB,OAAQiE,GACJ,IAAK,KAQD,OANIsD,GADW,IAAXvH,EACU,UACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,IACD,OAAOQ,EAAgB,eAAiB,eAC5C,IAAK,KAQD,OANI+G,GADW,IAAXvH,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,SAOlB,IAAK,IACD,OAAOQ,EAAgB,YAAc,cACzC,IAAK,KAQD,OANI+G,GADW,IAAXvH,EACU,MACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,OAEA,OAGlB,IAAK,KAMD,OAJIuH,GADW,IAAXvH,EACU,MAEA,OAGlB,IAAK,KAQD,OANIuH,GADW,IAAXvH,EACU,SACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,KAQD,OANIuH,GADW,IAAXvH,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,UAhK1BhD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,8YAA8EjH,MAClF,KAEJkH,WAAY,sXAA0ElH,MAClF,MAGRC,YAAa,2PAA6DD,MACtE,KAEJE,SAAU,6RAAuDF,MAAM,KACvEG,cAAe,+JAAkCH,MAAM,KACvDI,YAAa,iFAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,4BACJC,IAAK,+BACLC,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAGV4I,YAAa6G,GACbnG,gBAAiBmG,GACjBlG,iBAzCmB,CACf,iBACA,uBACA,mCACA,mCACA,iBACA,uBACA,uBACA,iBACA,uBACA,mCACA,iBACA,wBA+BJV,YAAa,yuBAEbH,iBAAkB,yuBAElBU,kBAAmB,6lBAEnBC,uBAAwB,oRAExBpJ,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,WACVC,QAAS,oBACTC,SAAU,4CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,8BACNC,EAAG,2DACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,+BAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOkL,GAAYlL,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOiL,GAAYjL,MAK3B1E,cAAe,gGACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,uBAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,mCAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,uBAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,qBAEA,sBAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAoEbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,mHAAoGjH,MACxG,KAEJkH,WAAY,+GAAgGlH,MACxG,MAGRC,YAAa,oEAA+DD,MACxE,KAEJ8J,kBAAkB,EAClB5J,SAAU,iEAA4DF,MAClE,KAEJG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB5F,QAAS,oBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,kCACX,KAAK,EACD,MAAO,iCACX,KAAK,EACD,MAAO,gCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,cACHC,GAAI8O,GACJ7O,EAAG6O,GACH5O,GAAI4O,GACJ3O,EAAG2O,GACH1O,GAAI0O,GACJzO,EAAG,MACHC,GAAIwO,GACJvO,EAAG,SACHC,GAAIsO,GACJrO,EAAG,SACHC,GAAIoO,IAERnO,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI+N,GAAc,6FAAgE9Q,MAC9E,KAEJ,SAAS+Q,GAAYnO,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAIwD,EAAMlE,EACV,OAAQiE,GACJ,IAAK,IACD,OAAOvD,GAAYF,EACb,4BACA,6BACV,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,GACpB,gBACA,iBACV,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,QAAU,UAC1D,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,QAAU,UACxD,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,UAAS,gBACzD,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,UAAS,gBACvD,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,OAAS,UACzD,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,OAAS,UACvD,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,YAAW,eAC3D,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,YAAW,eACzD,IAAK,IACD,MAAO,OAASE,GAAYF,EAAgB,SAAQ,WACxD,IAAK,KACD,OAAO0D,GAAOxD,GAAYF,EAAgB,SAAQ,WAE1D,MAAO,GAEX,SAASP,GAAKS,GACV,OACKA,EAAW,GAAK,cACjB,IACAwN,GAAYjR,KAAKuH,OACjB,aAyOR,SAAS4J,GAAS/N,GACd,OAAIA,EAAI,KAAQ,IAELA,EAAI,IAAO,EAK1B,SAASgO,GAAYrO,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAI6G,EAASvH,EAAS,IACtB,OAAQiE,GACJ,IAAK,IACD,OAAOzD,GAAiBE,EAClB,sBACA,sBACV,IAAK,KACD,OAAI0N,GAASpO,GAELuH,GACC/G,GAAiBE,EAAW,cAAa,eAG3C6G,EAAS,aACpB,IAAK,IACD,OAAO/G,EAAgB,eAAW,eACtC,IAAK,KACD,OAAI4N,GAASpO,GAELuH,GAAU/G,GAAiBE,EAAW,gBAAY,iBAE/CF,EACA+G,EAAS,eAEbA,EAAS,eACpB,IAAK,KACD,OAAI6G,GAASpO,GAELuH,GACC/G,GAAiBE,EACZ,gBACA,iBAGP6G,EAAS,cACpB,IAAK,IACD,OAAI/G,EACO,QAEJE,EAAW,MAAQ,OAC9B,IAAK,KACD,OAAI0N,GAASpO,GACLQ,EACO+G,EAAS,QAEbA,GAAU7G,EAAW,OAAS,YAC9BF,EACA+G,EAAS,QAEbA,GAAU7G,EAAW,MAAQ,QACxC,IAAK,IACD,OAAIF,EACO,gBAEJE,EAAW,cAAU,eAChC,IAAK,KACD,OAAI0N,GAASpO,GACLQ,EACO+G,EAAS,gBAEbA,GAAU7G,EAAW,eAAW,iBAChCF,EACA+G,EAAS,gBAEbA,GAAU7G,EAAW,cAAU,gBAC1C,IAAK,IACD,OAAOF,GAAiBE,EAAW,QAAO,SAC9C,IAAK,KACD,OAAI0N,GAASpO,GACFuH,GAAU/G,GAAiBE,EAAW,QAAO,WAEjD6G,GAAU/G,GAAiBE,EAAW,QAAO,WArThE1D,EAAOE,aAAa,KAAM,CACtBC,OAAQ,4HAAoGC,MACxG,KAEJC,YAAa,gFAAiED,MAC1E,KAEJ8J,kBAAkB,EAClB5J,SAAU,6EAAsDF,MAAM,KACtEG,cAAe,yCAAgCH,MAAM,KACrDI,YAAa,qBAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVd,cAAe,SACfC,KAAM,SAAUC,GACZ,MAAyC,MAAlCA,EAAMmJ,OAAO,GAAGyC,eAE3B1L,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,IACW,IAAZE,EAAmB,KAAO,MAEd,IAAZA,EAAmB,KAAO,MAGzCQ,SAAU,CACNC,QAAS,gBACTC,QAAS,oBACTC,SAAU,WACN,OAAOsB,GAAK8J,KAAK9M,MAAM,IAE3B2B,QAAS,oBACTC,SAAU,WACN,OAAOoB,GAAK8J,KAAK9M,MAAM,IAE3B6B,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,KACNC,EAAGiP,GACHhP,GAAIgP,GACJ/O,EAAG+O,GACH9O,GAAI8O,GACJ7O,EAAG6O,GACH5O,GAAI4O,GACJ3O,EAAG2O,GACH1O,GAAI0O,GACJzO,EAAGyO,GACHxO,GAAIwO,GACJvO,EAAGuO,GACHtO,GAAIsO,IAERrO,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,CACJkH,OAAQ,kkBAA4GjH,MAChH,KAEJkH,WAAY,0fAAgGlH,MACxG,MAGRC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,mVAAgEF,MACtE,KAEJG,cAAe,6IAA+BH,MAAM,KACpDI,YAAa,6IAA+BJ,MAAM,KAClDa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTE,QAAS,gCACTD,SAAU,WACN,MAAO,yDAEXE,SAAU,WACN,MAAO,0FAEXC,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNC,EAAG,yFACHC,GAAI,sDACJC,EAAG,2BACHC,GAAI,8BACJC,EAAG,qBACHC,GAAI,wBACJC,EAAG,eACHC,GAAI,kBACJC,EAAG,2BACHC,GAAI,8BACJC,EAAG,2BACHC,GAAI,+BAERpC,cAAe,0LACfC,KAAM,SAAUC,GACZ,MAAO,kGAAuBC,KAAKD,IAEvCE,SAAU,SAAUmD,GAChB,OAAIA,EAAO,EACA,6CACAA,EAAO,GACP,mDACAA,EAAO,GACP,6CAEA,oDAGflB,uBAAwB,8CACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,OACD,OAAe,IAAXzE,EACOA,EAAS,gBAEbA,EAAS,gBACpB,QACI,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,6CAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVd,cAAe,wBACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,SAAbnD,EACOmD,EACa,UAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,SAAbnD,GAAoC,UAAbA,EACvBmD,EAAO,QADX,GAIXnD,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,OACAA,EAAQ,GACR,QACAA,EAAQ,GACR,OAEA,SAGfU,SAAU,CACNC,QAAS,sBACTC,QAAS,mBACTC,SAAU,kBACVC,QAAS,qBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,eACNC,EAAG,iBACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KA0FbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wHAAoFC,MACxF,KAEJC,YAAa,oEAAkDD,MAAM,KACrEE,SAAU,kGAAmFF,MACzF,KAEJG,cAAe,0CAA8BH,MAAM,KACnDI,YAAa,gCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,gBACVC,QAAS,uBACTC,SAAU,gCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,uBACNC,EAAGmP,GACHlP,GAAIkP,GACJjP,EAAGiP,GACHhP,GAAIgP,GACJ/O,EAAG,cACHC,GAAI8O,GACJ7O,EAAG6O,GACH5O,GAAI4O,GACJ3O,EAAG2O,GACH1O,GAAI0O,GACJzO,EAAGyO,GACHxO,GAAIwO,IAERvO,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,gGAAgGC,MACpG,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,0EAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,6BACX,QACI,MAAO,+BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAUE,GACd,OAAQ,YAAYtB,KAAKsB,GAAK,MAAQ,MAAQ,IAAMA,GAExDD,KAAM,QACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,SACHC,GAAI,SACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gGAAgGC,MACpG,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,0EAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,WACL,MACI,WACgB,EAAfxB,KAAKa,QAAc,OAA0B,IAAjBb,KAAKa,QAAgB,IAAM,OACxD,OAGRY,QAAS,WACL,MACI,aACgB,EAAfzB,KAAKa,QAAc,OAA0B,IAAjBb,KAAKa,QAAgB,IAAM,OACxD,OAGRa,SAAU,WACN,MACI,WACgB,EAAf1B,KAAKa,QAAc,OAA0B,IAAjBb,KAAKa,QAAgB,IAAM,OACxD,OAGRc,QAAS,WACL,MACI,WACgB,EAAf3B,KAAKa,QAAc,OAA0B,IAAjBb,KAAKa,QAAgB,IAAM,OACxD,OAGRe,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MACI,uBACgB,EAAfvH,KAAKa,QACA,OACiB,IAAjBb,KAAKa,QACL,IACA,OACN,MAER,QACI,MACI,uBACgB,EAAfb,KAAKa,QACA,OACiB,IAAjBb,KAAKa,QACL,IACA,OACN,QAIhBgB,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,QACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,SACHC,GAAI,SACJC,EAAG,YACHC,GAAI,YACJiF,EAAG,gBACHC,GAAI,eACJjF,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBoR,KAAM,CACF,CACIC,MAAO,aACPC,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,SACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,eACNC,OAAQ,KACRC,KAAM,MAEV,CACIJ,MAAO,aACPK,OAAQC,EAAAA,EACRL,OAAQ,EACRC,KAAM,qBACNC,OAAQ,KACRC,KAAM,OAGdG,oBAAqB,qBACrBC,oBAAqB,SAAUpR,EAAOwE,GAClC,MAAoB,WAAbA,EAAM,GAAa,EAAI6M,SAAS7M,EAAM,IAAMxE,EAAO,KAE9DR,OAAQ,qGAAyCC,MAAM,KACvDC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,mDAAgBH,MAAM,KACrCI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCACNqK,EAAG,aACHX,GAAI,2BACJC,IAAK,iCACLC,KAAM,uCAEV1K,cAAe,6BACfC,KAAM,SAAUC,GACZ,MAAiB,iBAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,eAEA,gBAGfxC,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,SAAUsQ,GAChB,OAAIA,EAAIhP,SAAWhD,KAAKgD,OACb,wBAEA,WAGfrB,QAAS,oBACTC,SAAU,SAAUoQ,GAChB,OAAIhS,KAAKgD,SAAWgP,EAAIhP,OACb,wBAEA,WAGfnB,SAAU,KAEdgB,uBAAwB,gBACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACD,OAAkB,IAAXzE,EAAe,eAAOA,EAAS,SAC1C,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,iBACJC,EAAG,UACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,iBACJC,EAAG,UACHC,GAAI,cAMZ7C,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,+CAA+CF,MAAM,KAC/DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVd,cAAe,6BACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,WAAbnD,EACOmD,EACa,WAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,WAAbnD,GAAsC,UAAbA,EACzBmD,EAAO,QADX,GAIXnD,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,SACAA,EAAQ,GACR,SACAA,EAAQ,GACR,SAEA,SAGfU,SAAU,CACNC,QAAS,2BACTC,QAAS,sBACTC,SAAU,kBACVC,QAAS,wBACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,uBACNC,EAAG,kBACHC,GAAI,WACJC,EAAG,kBACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,SACJC,EAAG,WACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,whBAAqGC,MACzG,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,CACNgH,WAAY,mVAAgElH,MACxE,KAEJiH,OAAQ,yVAAiEjH,MACrE,KAEJmH,SAAU,mEAEdhH,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,+CACTC,QAAS,+CACTE,QAAS,qDACTD,SAAU,gEACVE,SAAU,kDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAUE,GACd,OAAOA,EAAE4B,QAAQ,+HAAiC,SAC9CoO,EACAC,EACAC,GAEA,MAAc,WAAPA,EAAaD,EAAK,eAAOA,EAAKC,EAAK,kBAGlDnQ,KAAM,SAAUC,GACZ,MAAI,2HAA4BtB,KAAKsB,GAC1BA,EAAE4B,QAAQ,mBAAU,mCAE3B,2BAAOlD,KAAKsB,GACLA,EAAE4B,QAAQ,4BAAS,+CAEvB5B,GAEXA,EAAG,kFACHC,GAAI,8BACJC,EAAG,2BACHC,GAAI,8BACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,qBACHC,GAAI,wBACJC,EAAG,qBACHC,GAAI,wBACJC,EAAG,2BACHC,GAAI,+BAERC,uBAAwB,uDACxBC,QAAS,SAAUC,GACf,OAAe,IAAXA,EACOA,EAEI,IAAXA,EACOA,EAAS,gBAGhBA,EAAS,IACRA,GAAU,KAAOA,EAAS,IAAO,GAClCA,EAAS,KAAQ,EAEV,gBAAQA,EAEZA,EAAS,WAEpBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIkP,GAAa,CACbrN,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH6B,GAAI,gBACJH,GAAI,gBACJI,GAAI,gBACJyL,GAAI,gBACJ5L,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBAGT3G,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wbAAqFC,MACzF,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,+SAA0DF,MAChE,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,qEACTC,QAAS,qEACTC,SAAU,2CACVC,QAAS,+DACTC,SAAU,uHACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,0CACRC,KAAM,oCACNC,EAAG,kFACHC,GAAI,0CACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,kBACJC,EAAG,wCACHC,GAAI,yBAERC,uBAAwB,sCACxBC,QAAS,SAAUC,GAGf,OAAOA,GAAUqP,GAAWrP,IAAWqP,GAF/BrP,EAAS,KAEuCqP,GADtC,KAAVrP,EAAgB,IAAM,QAGlCC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIoP,GAAc,CACVhO,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPwN,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGblT,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gXAAyEC,MAC7E,KAEJC,YAAa,gXAAyED,MAClF,KAEJE,SAAU,yPAAiDF,MAAM,KACjEG,cAAe,2EAAoBH,MAAM,KACzCI,YAAa,2EAAoBJ,MAAM,KACvC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVd,cAAe,gEACfC,KAAM,SAAUC,GACZ,MAAiB,mCAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,iCAEA,kCAGfxC,SAAU,CACNC,QAAS,2EACTC,QAAS,+DACTC,SAAU,qCACVC,QAAS,iFACTC,SAAU,oGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,uBACRC,KAAM,uBACNC,EAAG,uFACHC,GAAI,0CACJC,EAAG,6CACHC,GAAI,8BACJC,EAAG,6CACHC,GAAI,8BACJC,EAAG,6CACHC,GAAI,8BACJC,EAAG,iCACHC,GAAI,kBACJC,EAAG,mDACHC,GAAI,qCAERC,uBAAwB,sBACxBC,QAAS,iBACTmC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOqN,GAAYrN,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOoN,GAAYpN,MAG3BlC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIgQ,GAAc,CACV5O,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPoO,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb9T,EAAOE,aAAa,KAAM,CACtBC,OAAQ,weAA6FC,MACjG,KAEJC,YAAa,4XAA2ED,MACpF,KAEJ8J,kBAAkB,EAClB5J,SAAU,+SAA0DF,MAChE,KAEJG,cAAe,iLAAqCH,MAAM,KAC1DI,YAAa,mGAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,gCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,kDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNC,EAAG,4EACHC,GAAI,kEACJC,EAAG,0DACHC,GAAI,oCACJC,EAAG,oDACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,wBACJC,EAAG,gEACHC,GAAI,0CACJC,EAAG,oDACHC,GAAI,+BAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOiO,GAAYjO,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOgO,GAAYhO,MAG3B1E,cAAe,kKACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,yCAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,qDAAbnD,EACAmD,EACa,qDAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,6BAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,uCACAA,EAAO,GACP,mDACAA,EAAO,GACP,mDACAA,EAAO,GACP,2BAEA,wCAGflB,uBAAwB,8BACxBC,QAAS,SAAUC,GACf,OAAOA,EAAS,sBAEpBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qGAAyCC,MAAM,KACvDC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,mDAAgBH,MAAM,KACrCI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,cACHC,GAAI,0BACJC,IAAK,iCACLC,KAAM,sCACNqK,EAAG,cACHX,GAAI,0BACJC,IAAK,iCACLC,KAAM,uCAEV3J,SAAU,CACNC,QAAS,kBACTC,QAAS,kBACTC,SAAU,UACVC,QAAS,kBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,YACNC,EAAG,gBACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,sBACHC,GAAI,iBACJC,EAAG,eACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,WACJC,EAAG,gBACHC,GAAI,YAERC,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBvC,cAAe,4BACfC,KAAM,SAAUsK,GACZ,MAAiB,iBAAVA,GAEXnK,SAAU,SAAUmD,EAAMC,EAAQ8P,GAC9B,OAAO/P,EAAO,GAAK,eAAO,kBAMlC,IAAIgQ,GAAc,CACVzP,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPiP,GAAc,CACV3O,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAETmO,GAAW,CACP,sEACA,iCACA,iCACA,iCACA,iCACA,mDACA,uCACA,qBACA,6CACA,sEACA,sEACA,uEAGRlU,EAAOE,aAAa,KAAM,CACtBC,OAAQ+T,GACR7T,YAAa6T,GACb5T,SAAU,+YAA0EF,MAChF,KAEJG,cAAe,qTAA2DH,MACtE,KAEJI,YAAa,mDAAgBJ,MAAM,KACnC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVd,cAAe,wFACfC,KAAM,SAAUC,GACZ,MAAO,6CAAUC,KAAKD,IAE1BE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,6CAEA,8CAGfxC,SAAU,CACNC,QAAS,uFACTC,QAAS,6FACTC,SAAU,uDACVC,QAAS,iFACTC,SAAU,uDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,KACNC,EAAG,wFACHC,GAAI,oCACJC,EAAG,gEACHC,GAAI,0CACJC,EAAG,sEACHC,GAAI,gDACJC,EAAG,8CACHC,GAAI,wBACJC,EAAG,oDACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EACFK,QAAQ,kEAAiB,SAAUqB,GAChC,OAAO8O,GAAY9O,KAEtBrB,QAAQ,UAAM,MAEvBI,WAAY,SAAUT,GAClB,OAAOA,EACFK,QAAQ,MAAO,SAAUqB,GACtB,OAAO6O,GAAY7O,KAEtBrB,QAAQ,KAAM,WAEvBb,KAAM,CACFC,IAAK,EACLC,IAAK,MAMb,IAAIgR,GAAa,CACbnP,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH6B,GAAI,gBACJH,GAAI,gBACJI,GAAI,gBACJyL,GAAI,gBACJ5L,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBA6DT,SAASyN,GAAsBpR,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTjF,EAAG,CAAC,aAAc,gBAClBE,EAAG,CAAC,YAAa,eACjBE,EAAG,CAAC,UAAW,aACfE,EAAG,CAAC,WAAY,eAChBE,EAAG,CAAC,UAAW,eAEnB,OAAOY,EAAgB6D,EAAOJ,GAAK,GAAKI,EAAOJ,GAAK,GAuBxD,SAASoN,GAA4BrR,GAEjC,GADAA,EAASgP,SAAShP,EAAQ,IACtBsR,MAAMtR,GACN,OAAO,EAEX,GAAIA,EAAS,EAET,OAAO,EACJ,GAAIA,EAAS,GAEhB,OAAI,GAAKA,GAAUA,GAAU,EAI1B,GAAIA,EAAS,IAAK,CAErB,IAAI4E,EAAY5E,EAAS,GAEzB,OAAkB,GAAd4E,EACOyM,GAFMrR,EAAS,IAInBqR,GAA4BzM,GAChC,GAAI5E,EAAS,IAAO,CAEvB,KAAiB,IAAVA,GACHA,GAAkB,GAEtB,OAAOqR,GAA4BrR,GAInC,OAAOqR,GADPrR,GAAkB,KAvH1BhD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,saAAkFC,MACtF,KAEJC,YAAa,wPAAqDD,MAC9D,KAEJE,SAAU,qTAA2DF,MACjE,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,+DACTC,QAAS,+DACTC,SAAU,qCACVC,QAAS,+DACTC,SAAU,4IACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,0CACRC,KAAM,oCACNC,EAAG,kFACHC,GAAI,0CACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,kBACJC,EAAG,wCACHC,GAAI,yBAERC,uBAAwB,gEACxBC,QAAS,SAAUC,GAGf,OAAOA,GAAUmR,GAAWnR,IAAWmR,GAF/BnR,EAAS,KAEuCmR,GADtC,KAAVnR,EAAgB,IAAM,QAGlCC,KAAM,CACFC,IAAK,EACLC,IAAK,KAwEbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,6FAAuFC,MAC3F,KAEJC,YAAa,+DAA+DD,MACxE,KAEJ8J,kBAAkB,EAClB5J,SAAU,4EAAmEF,MACzE,KAEJG,cAAe,uCAA8BH,MAAM,KACnDI,YAAa,gCAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,cACJC,IAAK,iBACLC,EAAG,aACHC,GAAI,eACJC,IAAK,2BACLC,KAAM,kCAEVC,SAAU,CACNC,QAAS,eACTK,SAAU,IACVJ,QAAS,eACTC,SAAU,eACVC,QAAS,sBACTC,SAAU,WAEN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACD,MAAO,0BACX,QACI,MAAO,4BAIvBzF,aAAc,CACVC,OAhGR,SAA2ByB,GAEvB,OAAI4Q,GADS5Q,EAAO8Q,OAAO,EAAG9Q,EAAO0I,QAAQ,OAElC,KAAO1I,EAEX,MAAQA,GA4FXxB,KA1FR,SAAyBwB,GAErB,OAAI4Q,GADS5Q,EAAO8Q,OAAO,EAAG9Q,EAAO0I,QAAQ,OAElC,QAAU1I,EAEd,SAAWA,GAsFdvB,EAAG,kBACHC,GAAI,cACJC,EAAGgS,GACH/R,GAAI,cACJC,EAAG8R,GACH7R,GAAI,aACJC,EAAG4R,GACH3R,GAAI,UACJC,EAAG0R,GACHzR,GAAI,cACJC,EAAGwR,GACHvR,GAAI,WAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wYAA6EC,MACjF,KAEJC,YAAa,wYAA6ED,MACtF,KAEJE,SAAU,uLAAsCF,MAAM,KACtDG,cAAe,2KAAoCH,MAAM,KACzDI,YAAa,qEAAmBJ,MAAM,KACtC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4CAEVd,cAAe,wFACfC,KAAM,SAAUC,GACZ,MAAiB,yCAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,mDAEA,wCAGfxC,SAAU,CACNC,QAAS,oEACTC,QAAS,0EACTC,SAAU,0EACVC,QAAS,sFACTC,SAAU,kGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,yCACNC,EAAG,mGACHC,GAAI,0CACJC,EAAG,6BACHC,GAAI,8BACJC,EAAG,+CACHC,GAAI,gDACJC,EAAG,uBACHC,GAAI,wBACJC,EAAG,mCACHC,GAAI,oCACJC,EAAG,iBACHC,GAAI,mBAERC,uBAAwB,8BACxBC,QAAS,SAAUC,GACf,MAAO,qBAAQA,KAMvB,IAAIwR,GAAQ,CACRrS,GAAI,4CACJC,EAAG,uCACHC,GAAI,yCACJC,EAAG,gCACHC,GAAI,iCACJC,EAAG,0BACHC,GAAI,2BACJC,EAAG,2CACHC,GAAI,gDACJC,EAAG,wBACHC,GAAI,yBASR,SAAS4R,GAAkBzR,EAAQQ,EAAeyD,EAAKvD,GACnD,OAAOF,EACD2D,GAAMF,GAAK,GACXvD,EACAyD,GAAMF,GAAK,GACXE,GAAMF,GAAK,GAErB,SAASyN,GAAQ1R,GACb,OAAOA,EAAS,IAAO,GAAe,GAATA,GAAeA,EAAS,GAEzD,SAASmE,GAAMF,GACX,OAAOuN,GAAMvN,GAAK7G,MAAM,KAE5B,SAASuU,GAAY3R,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAI6G,EAASvH,EAAS,IACtB,OAAe,IAAXA,EAEIuH,EAASkK,GAAkBzR,EAAQQ,EAAeyD,EAAI,GAAIvD,GAEvDF,EACA+G,GAAUmK,GAAQ1R,GAAUmE,GAAMF,GAAK,GAAKE,GAAMF,GAAK,IAE1DvD,EACO6G,EAASpD,GAAMF,GAAK,GAEpBsD,GAAUmK,GAAQ1R,GAAUmE,GAAMF,GAAK,GAAKE,GAAMF,GAAK,IAI1EjH,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,iJAAoGjH,MACxG,KAEJkH,WAAY,2HAAkGlH,MAC1G,KAEJmH,SAAU,+DAEdlH,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,CACN+G,OAAQ,sIAAoFjH,MACxF,KAEJkH,WAAY,0GAA2FlH,MACnG,KAEJmH,SAAU,cAEdhH,cAAe,wCAA8BH,MAAM,KACnDI,YAAa,sBAAiBJ,MAAM,KACpC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,sCACLC,KAAM,4CACNqK,EAAG,aACHX,GAAI,wBACJC,IAAK,sCACLC,KAAM,4CAEV3J,SAAU,CACNC,QAAS,qBACTC,QAAS,aACTC,SAAU,UACVC,QAAS,aACTC,SAAU,+BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,gBACNC,EAlFR,SAA0Bc,EAAQQ,EAAeyD,EAAKvD,GAClD,OAAIF,EACO,uBAEAE,EAAW,iCAAoB,mBA+EtCvB,GAAIwS,GACJvS,EAAGqS,GACHpS,GAAIsS,GACJrS,EAAGmS,GACHlS,GAAIoS,GACJnS,EAAGiS,GACHhS,GAAIkS,GACJjS,EAAG+R,GACH9R,GAAIgS,GACJ/R,EAAG6R,GACH5R,GAAI8R,IAER7R,uBAAwB,cACxBC,QAAS,SAAUC,GACf,OAAOA,EAAS,QAEpBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIyR,GAAU,CACVzS,GAAI,0CAAqC/B,MAAM,KAC/CgC,EAAG,0DAAiChC,MAAM,KAC1CiC,GAAI,0DAAiCjC,MAAM,KAC3CkC,EAAG,sCAAiClC,MAAM,KAC1CmC,GAAI,sCAAiCnC,MAAM,KAC3CoC,EAAG,kCAA6BpC,MAAM,KACtCqC,GAAI,kCAA6BrC,MAAM,KACvCsC,EAAG,oEAAiCtC,MAAM,KAC1CuC,GAAI,oEAAiCvC,MAAM,KAC3CwC,EAAG,wBAAwBxC,MAAM,KACjCyC,GAAI,wBAAwBzC,MAAM,MAKtC,SAASiH,GAAOF,EAAOnE,EAAQQ,GAC3B,OAAIA,EAEOR,EAAS,IAAO,GAAKA,EAAS,KAAQ,GAAKmE,EAAM,GAAKA,EAAM,GAI5DnE,EAAS,IAAO,GAAKA,EAAS,KAAQ,GAAKmE,EAAM,GAAKA,EAAM,GAG3E,SAAS0N,GAAyB7R,EAAQQ,EAAeyD,GACrD,OAAOjE,EAAS,IAAMqE,GAAOuN,GAAQ3N,GAAMjE,EAAQQ,GAEvD,SAASsR,GAAyB9R,EAAQQ,EAAeyD,GACrD,OAAOI,GAAOuN,GAAQ3N,GAAMjE,EAAQQ,GAMxCxD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gIAAuGC,MAC3G,KAEJC,YAAa,4DAAkDD,MAAM,KACrEE,SAAU,oFAA0EF,MAChF,KAEJG,cAAe,kBAAkBH,MAAM,KACvCI,YAAa,kBAAkBJ,MAAM,KACrC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,cACHC,GAAI,uBACJC,IAAK,8BACLC,KAAM,qCAEVC,SAAU,CACNC,QAAS,4BACTC,QAAS,yBACTC,SAAU,qBACVC,QAAS,sBACTC,SAAU,+CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,WACNC,EAlCR,SAAyBc,EAAQQ,GAC7B,OAAOA,EAAgB,sBAAmB,iCAkCtCrB,GAAI0S,GACJzS,EAAG0S,GACHzS,GAAIwS,GACJvS,EAAGwS,GACHvS,GAAIsS,GACJrS,EAAGsS,GACHrS,GAAIoS,GACJnS,EAAGoS,GACHnS,GAAIkS,GACJjS,EAAGkS,GACHjS,GAAIgS,IAER/R,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI4R,GAAa,CACbC,MAAO,CAEH7S,GAAI,CAAC,SAAU,UAAW,WAC1BC,EAAG,CAAC,cAAe,iBACnBC,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,SAAU,UAAW,WAC1BE,GAAI,CAAC,SAAU,SAAU,WAE7BoS,uBAAwB,SAAUjS,EAAQkS,GACtC,OAAkB,IAAXlS,EACDkS,EAAQ,GACE,GAAVlS,GAAeA,GAAU,EACzBkS,EAAQ,GACRA,EAAQ,IAElB5K,UAAW,SAAUtH,EAAQQ,EAAeyD,GACxC,IAAIiO,EAAUH,GAAWC,MAAM/N,GAC/B,OAAmB,IAAfA,EAAIkO,OACG3R,EAAgB0R,EAAQ,GAAKA,EAAQ,GAGxClS,EACA,IACA+R,GAAWE,uBAAuBjS,EAAQkS,KA+S1D,SAASE,GAAYpS,EAAQQ,EAAeyD,EAAKvD,GAC7C,OAAQuD,GACJ,IAAK,IACD,OAAOzD,EAAgB,4EAAkB,wFAC7C,IAAK,KACD,OAAOR,GAAUQ,EAAgB,wCAAY,qDACjD,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,kCAAW,+CAChD,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,sBAAS,yCAC9C,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,4BAAU,yCAC/C,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,sBAAS,mCAC9C,IAAK,IACL,IAAK,KACD,OAAOR,GAAUQ,EAAgB,sBAAS,yCAC9C,QACI,OAAOR,GA/TnBhD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,mFAAmFC,MACvF,KAEJC,YAAa,2DAA2DD,MACpE,KAEJ8J,kBAAkB,EAClB5J,SAAU,iEAA4DF,MAClE,KAEJG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,gBAETC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB5F,QAAS,mBACTC,SAAU,WAUN,MATmB,CACf,kCACA,sCACA,iCACA,iCACA,wCACA,gCACA,iCAEgB5B,KAAKuH,QAE7B1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,mBACHC,GAAI4S,GAAWzK,UACflI,EAAG2S,GAAWzK,UACdjI,GAAI0S,GAAWzK,UACfhI,EAAGyS,GAAWzK,UACd/H,GAAIwS,GAAWzK,UACf9H,EAAG,MACHC,GAAIsS,GAAWzK,UACf5H,EAAG,SACHC,GAAIoS,GAAWzK,UACf1H,EAAG,SACHC,GAAIkS,GAAWzK,WAEnBxH,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,2LAA8IC,MAClJ,KAEJC,YAAa,sEAAiED,MAC1E,KAEJgK,YAAa,yCACbO,kBAAmB,yCACnBV,iBAAkB,yCAClBW,uBAAwB,yCACxBtK,SAAU,sEAAkDF,MAAM,KAClEG,cAAe,uCAAwBH,MAAM,KAC7CI,YAAa,uCAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,wBACLC,KAAM,+BAEVC,SAAU,CACNC,QAAS,wBACTC,QAAS,eACTC,SAAU,cACVC,QAAS,iBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,WACNC,EAAG,wBACHC,GAAI,iBACJC,EAAG,YACHC,GAAI,YACJC,EAAG,WACHC,GAAI,WACJC,EAAG,QACHC,GAAI,QACJC,EAAG,YACHC,GAAI,YACJC,EAAG,SACHC,GAAI,UAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,ocAAuFC,MAC3F,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,mSAAwDF,MAC9D,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,8EAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,mDACTC,QAAS,6CACTC,SAAU,wCACVC,QAAS,mDACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,wFACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0FAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNC,EAAG,wFACHC,GAAI,gDACJC,EAAG,gEACHC,GAAI,0CACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,0DACHC,GAAI,0CACJC,EAAG,gEACHC,GAAI,2CAERC,uBAAwB,0FACxBC,QAAS,SAAUC,GACf,IAAI4E,EAAY5E,EAAS,GACrB6E,EAAc7E,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,gBACO,GAAhB6E,EACA7E,EAAS,gBACK,GAAd6E,GAAoBA,EAAc,GAClC7E,EAAS,gBACK,GAAd4E,EACA5E,EAAS,gBACK,GAAd4E,EACA5E,EAAS,gBACK,GAAd4E,GAAiC,GAAdA,EACnB5E,EAAS,gBAETA,EAAS,iBAGxBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gdAAyFC,MAC7F,KAEJC,YAAa,8TAAyED,MAClF,KAEJ8J,kBAAkB,EAClB5J,SAAU,mYAAwEF,MAC9E,KAEJG,cAAe,qNAA2CH,MAAM,KAChEI,YAAa,mGAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,uBACJC,IAAK,0BACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oCACLC,KAAM,2CAEVC,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,kDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gDACRC,KAAM,oCACNC,EAAG,4EACHC,GAAI,sDACJC,EAAG,sEACHC,GAAI,sDACJC,EAAG,sEACHC,GAAI,sDACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,+BAERpC,cAAe,mPACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAGO,yCAAbnD,GAAiC,GAARmD,GACb,wEAAbnD,GACa,iEAAbA,EAEOmD,EAAO,GAEPA,GAGfnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,uCACAA,EAAO,GACP,uCACAA,EAAO,GACP,sEACAA,EAAO,GACP,+DAEA,0CAiCnBhE,EAAOE,aAAa,KAAM,CACtBC,OAAQ,8+BAA+LC,MACnM,KAEJC,YAAa,iQAA6ED,MACtF,KAEJ8J,kBAAkB,EAClB5J,SAAU,iOAA6CF,MAAM,KAC7DG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,6CACJC,IAAK,mDACLC,KAAM,0DAEVd,cAAe,6BACfC,KAAM,SAAUC,GACZ,MAAiB,iBAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,eAEA,gBAGfxC,SAAU,CACNC,QAAS,kDACTC,QAAS,kDACTC,SAAU,qCACVC,QAAS,kDACTC,SAAU,6DACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,oCACRC,KAAM,8BACNC,EAAGkT,GACHjT,GAAIiT,GACJhT,EAAGgT,GACH/S,GAAI+S,GACJ9S,EAAG8S,GACH7S,GAAI6S,GACJ5S,EAAG4S,GACH3S,GAAI2S,GACJ1S,EAAG0S,GACHzS,GAAIyS,GACJxS,EAAGwS,GACHvS,GAAIuS,IAERtS,uBAAwB,mCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,4BACpB,QACI,OAAOA,MAOvB,IAAIqS,GAAc,CACV9Q,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPsQ,GAAc,CACVhF,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb,SAASwE,GAAevS,EAAQQ,EAAeC,EAAQC,GACnD,IAAImI,EAAS,GACb,GAAIrI,EACA,OAAQC,GACJ,IAAK,IACDoI,EAAS,0DACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,0CACT,MACJ,IAAK,IACDA,EAAS,kCACT,MACJ,IAAK,KACDA,EAAS,wBACT,MACJ,IAAK,IACDA,EAAS,wCACT,MACJ,IAAK,KACDA,EAAS,8BACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,wCACT,MACJ,IAAK,KACDA,EAAS,oCACT,WAGR,OAAQpI,GACJ,IAAK,IACDoI,EAAS,sEACT,MACJ,IAAK,KACDA,EAAS,gDACT,MACJ,IAAK,IACDA,EAAS,0DACT,MACJ,IAAK,KACDA,EAAS,gDACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,oDACT,MACJ,IAAK,KACDA,EAAS,0CACT,MACJ,IAAK,IACDA,EAAS,gEACT,MACJ,IAAK,KACDA,EAAS,sDACT,MACJ,IAAK,IACDA,EAAS,oDACT,MACJ,IAAK,KACDA,EAAS,0CACT,MAGZ,OAAOA,EAAO/H,QAAQ,MAAOd,GAGjChD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0cAAwFC,MAC5F,KAEJC,YAAa,8VAAgFD,MACzF,KAEJ8J,kBAAkB,EAClB5J,SAAU,6RAAuDF,MAAM,KACvEG,cAAe,+JAAkCH,MAAM,KACvDI,YAAa,iFAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,wCACJC,IAAK,2CACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qDACLC,KAAM,4DAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,sCACTC,SAAU,WACVC,QAAS,0BACTC,SAAU,4CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,mCACRC,KAAM,yCACNC,EAAGqT,GACHpT,GAAIoT,GACJnT,EAAGmT,GACHlT,GAAIkT,GACJjT,EAAGiT,GACHhT,GAAIgT,GACJ/S,EAAG+S,GACH9S,GAAI8S,GACJ7S,EAAG6S,GACH5S,GAAI4S,GACJ3S,EAAG2S,GACH1S,GAAI0S,IAERrQ,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOmQ,GAAYnQ,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOkQ,GAAYlQ,MAG3B1E,cAAe,2LACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,mCAAbnD,GAAqC,mCAAbA,EACjBmD,EAEM,yCAAbnD,GACa,qDAAbA,GACa,yCAAbA,EAEe,IAARmD,EAAaA,EAAOA,EAAO,QAL/B,GAQXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAY,GAARgD,GAAaA,EAAO,EACb,iCACAA,EAAO,GACP,iCACAA,EAAO,GACP,uCACAA,EAAO,GACP,mDAEA,wCAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,oFAAoFC,MACxF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,6CAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVd,cAAe,8BACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,SAAbnD,EACOmD,EACa,cAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,WAAbnD,GAAsC,UAAbA,EACzBmD,EAAO,QADX,GAIXnD,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,OACAA,EAAQ,GACR,YACAA,EAAQ,GACR,SAEA,SAGfU,SAAU,CACNC,QAAS,sBACTC,QAAS,kBACTC,SAAU,kBACVC,QAAS,sBACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,gBACNC,EAAG,gBACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,oFAAoFC,MACxF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,6CAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVd,cAAe,8BACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,SAAbnD,EACOmD,EACa,cAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,WAAbnD,GAAsC,UAAbA,EACzBmD,EAAO,QADX,GAIXnD,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,OACAA,EAAQ,GACR,YACAA,EAAQ,GACR,SAEA,SAGfU,SAAU,CACNC,QAAS,sBACTC,QAAS,kBACTC,SAAU,kBACVC,QAAS,sBACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,gBACNC,EAAG,gBACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,kGAAwFC,MAC5F,KAEJC,YAAa,4DAAkDD,MAAM,KACrEE,SAAU,0FAAiEF,MACvE,KAEJG,cAAe,6CAA8BH,MAAM,KACnDI,YAAa,sCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,0BACTC,SAAU,iCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,aACRC,KAAM,SACNC,EAAG,eACHC,GAAI,aACJC,EAAG,SACHC,GAAI,YACJC,EAAG,cACHC,GAAI,kBACJC,EAAG,eACHC,GAAI,iBACJC,EAAG,QACHC,GAAI,UACJC,EAAG,OACHC,GAAI,UAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIqS,GAAc,CACVjR,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPyQ,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbnW,EAAOE,aAAa,KAAM,CACtBC,OAAQ,4dAA2FC,MAC/F,KAEJC,YAAa,4OAAmDD,MAAM,KACtEE,SAAU,mSAAwDF,MAC9D,KAEJG,cAAe,qHAA2BH,MAAM,KAChDI,YAAa,qHAA2BJ,MAAM,KAE9Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,gDACTC,QAAS,6EACTC,SAAU,+BACVC,QAAS,sDACTC,SAAU,8FACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,6DACRC,KAAM,yEACNC,EAAG,wFACHC,GAAI,gDACJC,EAAG,mDACHC,GAAI,oCACJC,EAAG,6CACHC,GAAI,8BACJC,EAAG,uCACHC,GAAI,wBACJC,EAAG,2BACHC,GAAI,YACJC,EAAG,6CACHC,GAAI,+BAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOsQ,GAAYtQ,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOqQ,GAAYrQ,MAG3BlC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qFAAqFC,MACzF,KAEJC,YAAa,6DAA6DD,MACtE,KAEJ8J,kBAAkB,EAClB5J,SAAU,2DAAqDF,MAAM,KACrEG,cAAe,oCAA8BH,MAAM,KACnDI,YAAa,6BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,2BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,cACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WACJiF,EAAG,SACHC,GAAI,UACJjF,EAAG,cACHC,GAAI,gBACJC,EAAG,YACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIiT,GAAc,CACV7R,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPqR,GAAc,CACV/F,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb/Q,EAAOE,aAAa,KAAM,CACtBC,OAAQ,ocAAuFC,MAC3F,KAEJC,YAAa,uTAAuED,MAChF,KAEJ8J,kBAAkB,EAClB5J,SAAU,mSAAwDF,MAC9D,KAEJG,cAAe,4KAA0CH,MAAM,KAC/DI,YAAa,wFAA4BJ,MAAM,KAC/C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,wCACJC,IAAK,2CACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qDACLC,KAAM,4DAEV2D,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOkR,GAAYlR,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOiR,GAAYjR,MAG3B1E,cAAe,wHACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,6BAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,mCAAbnD,EACAmD,EACa,yCAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,6BAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,uCACAA,EAAO,GACP,2BAEA,4BAGfxC,SAAU,CACNC,QAAS,oBACTC,QAAS,gCACTC,SAAU,8CACVC,QAAS,gCACTC,SAAU,wCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,iBACRC,KAAM,oCACNC,EAAG,oDACHC,GAAI,gDACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,+BAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAImT,GAAwB,6DAA6DlW,MACjF,KAEJmW,GAA2B,kDAAkDnW,MACzE,KAEJoW,GAAgB,CACZ,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,qKAEpBzW,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACbkP,GAAyBnU,EAAEiK,SAE3BiK,GAAsBlU,EAAEiK,SAJxBiK,IAQflM,YAAaqM,GACbxM,iBAAkBwM,GAClB9L,kBAAmB,4FACnBC,uBAAwB,mFAExBT,YAAaqM,GACb3L,gBAAiB2L,GACjB1L,iBAAkB0L,GAElBlW,SAAU,6DAA6DF,MACnE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,mBACHC,GAAI,aACJC,EAAG,gBACHC,GAAI,SACJC,EAAG,gBACHC,GAAI,WACJC,EAAG,kBACHC,GAAI,aACJC,EAAG,iBACHC,GAAI,WAERC,uBAAwB,kBACxBC,QAAS,SAAUC,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIuT,GAAwB,6DAA6DtW,MACjF,KAEJuW,GAA2B,kDAAkDvW,MACzE,KAEJwW,GAAgB,CACZ,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,qKAEpB7W,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,SAAU+B,EAAGiF,GACtB,OAAKjF,EAEM,QAAQxB,KAAKyG,GACbsP,GAAyBvU,EAAEiK,SAE3BqK,GAAsBtU,EAAEiK,SAJxBqK,IAQftM,YAAayM,GACb5M,iBAAkB4M,GAClBlM,kBAAmB,4FACnBC,uBAAwB,mFAExBT,YAAayM,GACb/L,gBAAiB+L,GACjB9L,iBAAkB8L,GAElBtW,SAAU,6DAA6DF,MACnE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,mBACHC,GAAI,aACJC,EAAG,gBACHC,GAAI,SACJC,EAAG,gBACHC,GAAI,WACJiF,EAAG,iBACHC,GAAI,WACJjF,EAAG,kBACHC,GAAI,aACJC,EAAG,iBACHC,GAAI,WAERC,uBAAwB,kBACxBC,QAAS,SAAUC,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,qFAAqFC,MACzF,KAEJC,YAAa,6DAA6DD,MACtE,KAEJ8J,kBAAkB,EAClB5J,SAAU,wDAAqDF,MAAM,KACrEG,cAAe,kCAA+BH,MAAM,KACpDI,YAAa,0BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,mBACVC,QAAS,uBACTC,SAAU,sCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,WACJiF,EAAG,UACHC,GAAI,WACJjF,EAAG,eACHC,GAAI,gBACJC,EAAG,YACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,SAAU,CAC1BC,OAAQ,CACJmH,WAAY,iGAAqFlH,MAC7F,KAEJiH,OAAQ,kIAAsHjH,MAC1H,KAEJmH,SAAU,mBAEdlH,YAAa,kEAA+DD,MACxE,KAEJ8J,kBAAkB,EAClB5J,SAAU,iEAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,mBACJ4J,GAAI,aACJ3J,IAAK,4BACL4J,IAAK,mBACL3J,KAAM,iCACN4J,KAAM,wBAEV3J,SAAU,CACNC,QAAS,gBACTC,QAAS,eACTC,SAAU,cACVC,QAAS,gBACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,eACRC,KAAM,QACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UAERC,uBAAwB,wBACxBC,QAAS,SAAUC,EAAQyE,GAcvB,OAAOzE,GAHQ,MAAXyE,GAA6B,MAAXA,EATP,IAAXzE,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,OAEG,MAIjBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI2T,GAAc,CACVvS,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEP+R,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbzX,EAAOE,aAAa,QAAS,CAEzBC,OAAQ,8VAAsEC,MAC1E,KAEJC,YAAa,8VAAsED,MAC/E,KAEJE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,yJAAiCH,MAAM,KACtDI,YAAa,yJAAiCJ,MAAM,KACpDa,eAAgB,CACZC,GAAI,4BACJC,IAAK,+BACLC,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,sCACVC,QAAS,oBACTC,SAAU,4CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAO4R,GAAY5R,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAO2R,GAAY3R,MAK3B1E,cAAe,4GACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,uBAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,yCAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,6BAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,2BAEA,sBAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIuU,GAAmB,iIAAmGtX,MAClH,KAEJuX,GAAmB,+GAAqGvX,MACpH,KAEJwX,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,aACA,QACA,SAER,SAASC,GAASxU,GACd,OAAOA,EAAI,GAAK,GAAc,EAATA,EAAI,OAAaA,EAAI,IAAM,IAAO,EAE3D,SAASyU,GAAY9U,EAAQQ,EAAeyD,GACxC,IAAIsD,EAASvH,EAAS,IACtB,OAAQiE,GACJ,IAAK,KACD,OAAOsD,GAAUsN,GAAS7U,GAAU,UAAY,UACpD,IAAK,IACD,OAAOQ,EAAgB,SAAW,cACtC,IAAK,KACD,OAAO+G,GAAUsN,GAAS7U,GAAU,SAAW,SACnD,IAAK,IACD,OAAOQ,EAAgB,UAAY,eACvC,IAAK,KACD,OAAO+G,GAAUsN,GAAS7U,GAAU,UAAY,UACpD,IAAK,KACD,OAAOuH,GAAUsN,GAAS7U,GAAU,WAAa,WACrD,IAAK,KACD,OAAOuH,GAAUsN,GAAS7U,GAAU,gBAAa,iBACrD,IAAK,KACD,OAAOuH,GAAUsN,GAAS7U,GAAU,OAAS,QAgNzD,SAAS+U,GAAyB/U,EAAQQ,EAAeyD,GAcrD,OAAOjE,GAHa,IAAhBA,EAAS,KAAwB,KAAVA,GAAiBA,EAAS,KAAQ,EAC7C,OAFA,KATH,CACLb,GAAI,UACJE,GAAI,SACJE,GAAI,MACJE,GAAI,OACJkF,GAAI,yBACJhF,GAAI,OACJE,GAAI,OAMuBoE,GAgEvC,SAAS+Q,GAAyBhV,EAAQQ,EAAeyD,GACrD,IAToBC,EAChBC,EAiBJ,MAAY,MAARF,EACOzD,EAAgB,uCAAW,uCAE3BR,EAAS,KArBAkE,GAqB6BlE,EApB7CmE,EAQS,CACThF,GAAIqB,EAAgB,6HAA2B,6HAC/CnB,GAAImB,EAAgB,2GAAwB,2GAC5CjB,GAAI,6EACJE,GAAI,uEACJkF,GAAI,iHACJhF,GAAI,iHACJE,GAAI,kEAKkCoE,GApBzB7G,MAAM,KAChB8G,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAxRhBnH,EAAOE,aAAa,KAAM,CACtBC,OAAQ,SAAU+L,EAAgB7E,GAC9B,OAAK6E,EAEM,SAAStL,KAAKyG,GACdsQ,GAAiBzL,EAAeG,SAEhCqL,GAAiBxL,EAAeG,SAJhCqL,IAOfrX,YAAa,uDAAkDD,MAAM,KACrE+J,YAAayN,GACb/M,gBAAiB+M,GACjB9M,iBAAkB8M,GAClBtX,SAAU,4EAA6DF,MACnE,KAEJG,cAAe,gCAA2BH,MAAM,KAChDI,YAAa,4BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,mBACTC,QAAS,eACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,0BAEX,KAAK,EACD,MAAO,mBAEX,KAAK,EACD,MAAO,2BAEX,KAAK,EACD,MAAO,uBAEX,QACI,MAAO,oBAGnB5F,QAAS,iBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,2CACX,KAAK,EACD,MAAO,4CACX,KAAK,EACD,MAAO,wCACX,QACI,MAAO,gCAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,eACHC,GAAI2V,GACJ1V,EAAG0V,GACHzV,GAAIyV,GACJxV,EAAGwV,GACHvV,GAAIuV,GACJtV,EAAG,eACHC,GAAI,SACJiF,EAAG,eACHC,GAAImQ,GACJpV,EAAG,eACHC,GAAImV,GACJlV,EAAG,MACHC,GAAIiV,IAERhV,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,8FAA2FC,MAC/F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,uFAAiFF,MACvF,KAEJG,cAAe,iCAA8BH,MAAM,KACnDI,YAAa,yCAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,sCACLC,KAAM,6CAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,uBACTC,SAAU,kBACVC,QAAS,mBACTC,SAAU,WACN,OAAsB,IAAf5B,KAAKuH,OAA8B,IAAfvH,KAAKuH,MAC1B,8BACA,+BAEV1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,kBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,YACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,SACT0K,YAAa,qBAKjBzN,EAAOE,aAAa,KAAM,CACtBC,OAAQ,8FAA2FC,MAC/F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,uFAAiFF,MACvF,KAEJG,cAAe,iCAA8BH,MAAM,KACnDI,YAAa,yCAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,qCAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,uBACTC,SAAU,kBACVC,QAAS,mBACTC,SAAU,WACN,OAAsB,IAAf5B,KAAKuH,OAA8B,IAAfvH,KAAKuH,MAC1B,8BACA,+BAEV1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,WACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJiF,EAAG,aACHC,GAAI,aACJjF,EAAG,YACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERC,uBAAwB,cACxBC,QAAS,SACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAuBbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,oGAAoGC,MACxG,KAEJC,YAAa,+DAA+DD,MACxE,KAEJ8J,kBAAkB,EAClB5J,SAAU,yEAAkDF,MAAM,KAClEG,cAAe,iCAA8BH,MAAM,KACnDI,YAAa,0BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,qBACNC,EAAG,oBACHC,GAAI4V,GACJ3V,EAAG,WACHC,GAAI0V,GACJzV,EAAG,aACHC,GAAIwV,GACJvV,EAAG,OACHC,GAAIsV,GACJrQ,EAAG,gCACHC,GAAIoQ,GACJrV,EAAG,cACHC,GAAIoV,GACJnV,EAAG,QACHC,GAAIkV,IAER9U,KAAM,CACFC,IAAK,EACLC,IAAK,KA8Bb,IAAI8U,GAAgB,CAChB,uBACA,uBACA,uBACA,uBACA,+BACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,wBAMJjY,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,kbAAoFjH,MACxF,KAEJkH,WAAY,saAAkFlH,MAC1F,MAGRC,YAAa,CAETgH,OAAQ,6QAAgEjH,MACpE,KAEJkH,WAAY,kRAAgElH,MACxE,MAGRE,SAAU,CACNgH,WAAY,mVAAgElH,MACxE,KAEJiH,OAAQ,mVAAgEjH,MACpE,KAEJmH,SAAU,0JAEdhH,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,6FAAuBJ,MAAM,KAC1C+J,YAAa8N,GACbpN,gBAAiBoN,GACjBnN,iBAAkBmN,GAGlB7N,YAAa,+wBAGbH,iBAAkB,+wBAGlBU,kBAAmB,wgBAGnBC,uBAAwB,8TACxB3J,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,mCAEVC,SAAU,CACNC,QAAS,0DACTC,QAAS,oDACTE,QAAS,8CACTD,SAAU,SAAUsQ,GAChB,GAAIA,EAAIhP,SAAWhD,KAAKgD,OAcpB,OAAmB,IAAfhD,KAAKuH,MACE,mCAEA,6BAhBX,OAAQvH,KAAKuH,OACT,KAAK,EACD,MAAO,oFACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oFACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,sFAUvB3F,SAAU,SAAUoQ,GAChB,GAAIA,EAAIhP,SAAWhD,KAAKgD,OAcpB,OAAmB,IAAfhD,KAAKuH,MACE,mCAEA,6BAhBX,OAAQvH,KAAKuH,OACT,KAAK,EACD,MAAO,wEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,wEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0EAUvB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,oCACRC,KAAM,oCACNC,EAAG,8FACHC,GAAI6V,GACJ5V,EAAG4V,GACH3V,GAAI2V,GACJ1V,EAAG,qBACHC,GAAIyV,GACJxV,EAAG,2BACHC,GAAIuV,GACJtQ,EAAG,uCACHC,GAAIqQ,GACJtV,EAAG,iCACHC,GAAIqV,GACJpV,EAAG,qBACHC,GAAImV,IAERvX,cAAe,6GACfC,KAAM,SAAUC,GACZ,MAAO,8DAAiBC,KAAKD,IAEjCE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,2BACAA,EAAO,GACP,qBAEA,wCAGflB,uBAAwB,uCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,UACpB,IAAK,IACD,OAAOA,EAAS,gBACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,UACpB,QACI,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI+U,GAAW,CACP,iCACA,6CACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,6CACA,uCACA,iCACA,kCAEJC,GAAO,CAAC,qBAAO,2BAAQ,iCAAS,2BAAQ,2BAAQ,qBAAO,4BAE3DnY,EAAOE,aAAa,KAAM,CACtBC,OAAQ+X,GACR7X,YAAa6X,GACb5X,SAAU6X,GACV5X,cAAe4X,GACf3X,YAAa2X,GACblX,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,gCAEVd,cAAe,wCACfC,KAAM,SAAUC,GACZ,MAAO,uBAAUA,GAErBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,qBAEJ,sBAEXxC,SAAU,CACNC,QAAS,oBACTC,QAAS,sCACTC,SAAU,2EACVC,QAAS,sCACTC,SAAU,mFACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,kBACNC,EAAG,oDACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wNAAmJC,MACvJ,KAEJC,YAAa,oFAA6DD,MACtE,KAEJE,SAAU,gGAA6EF,MACnF,KAEJG,cAAe,2CAAmCH,MAAM,KACxDI,YAAa,gBAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,oBACJC,IAAK,gCACLC,KAAM,uCAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,iBACRC,KAAM,gBACNC,EAAG,mBACHC,GAAI,eACJC,EAAG,eACHC,GAAI,cACJC,EAAG,cACHC,GAAI,aACJC,EAAG,cACHC,GAAI,cACJC,EAAG,gBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,YAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAObnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sgBAAkGC,MACtG,KAEJC,YAAa,0QAAwDD,MACjE,KAEJE,SAAU,mVAAgEF,MACtE,KAEJG,cAAe,mJAAgCH,MAAM,KACrDI,YAAa,iFAAqBJ,MAAM,KACxC2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,0DAEVC,SAAU,CACNC,QAAS,4BACTC,QAAS,kCACTC,SAAU,kBACVC,QAAS,kCACTC,SAAU,yDACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,6BACRC,KAAM,oCACNC,EAAG,sEACHC,GAAI,oCACJC,EAAG,yDACHC,GAAI,sDACJC,EAAG,qBACHC,GAAI,wBACJC,EAAG,2BACHC,GAAI,wBACJC,EAAG,2BACHC,GAAI,wBACJC,EAAG,qBACHC,GAAI,yBAERC,uBAAwB,mCACxBC,QAAS,SAAUC,GACf,OAAOA,EAAS,6BAEpBvC,cAAe,iHACfC,KAAM,SAAUC,GACZ,MAAiB,mBAAVA,GAA8B,0CAAVA,GAE/BE,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAY,GAARF,EACOE,EAAU,iBAAS,wCAEnBA,EAAU,uBAAU,2CAOvC,IAAIoX,GAAW,yGAAoFhY,MAC3F,KAEJiY,GAAgB,2DAAkDjY,MAAM,KAC5E,SAASkY,GAASjV,GACd,OAAW,EAAJA,GAASA,EAAI,EAExB,SAASkV,GAAYvV,EAAQQ,EAAeyD,EAAKvD,GAC7C,IAAI6G,EAASvH,EAAS,IACtB,OAAQiE,GACJ,IAAK,IACD,OAAOzD,GAAiBE,EAAW,mBAAe,mBACtD,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAU+N,GAAStV,GAAU,UAAY,aAEzCuH,EAAS,YAExB,IAAK,IACD,OAAO/G,EAAgB,YAAWE,EAAW,YAAW,aAC5D,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAU+N,GAAStV,GAAU,YAAW,YAExCuH,EAAS,cAExB,IAAK,IACD,OAAO/G,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAU+N,GAAStV,GAAU,SAAW,YAExCuH,EAAS,WAExB,IAAK,IACD,OAAO/G,GAAiBE,EAAW,WAAQ,YAC/C,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAU+N,GAAStV,GAAU,MAAQ,UAErCuH,EAAS,aAExB,IAAK,IACD,OAAO/G,GAAiBE,EAAW,SAAW,WAClD,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAU+N,GAAStV,GAAU,UAAY,YAEzCuH,EAAS,WAExB,IAAK,IACD,OAAO/G,GAAiBE,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAIF,GAAiBE,EACV6G,GAAU+N,GAAStV,GAAU,OAAS,SAEtCuH,EAAS,SAoFhC,SAASiO,GAAsBxV,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI6G,EAASvH,EAAS,IACtB,OAAQiE,GACJ,IAAK,IACD,OAAOzD,GAAiBE,EAClB,eACA,kBACV,IAAK,KAUD,OARI6G,GADW,IAAXvH,EACUQ,EAAgB,UAAY,UACpB,IAAXR,EACGQ,GAAiBE,EAAW,UAAY,WAC3CV,EAAS,EACNQ,GAAiBE,EAAW,UAAY,WAExC,SAGlB,IAAK,IACD,OAAOF,EAAgB,aAAe,aAC1C,IAAK,KAUD,OARI+G,GADW,IAAXvH,EACUQ,EAAgB,SAAW,SACnB,IAAXR,EACGQ,GAAiBE,EAAW,SAAW,WAC1CV,EAAS,EACNQ,GAAiBE,EAAW,SAAW,WAEvCF,GAAiBE,EAAW,QAAU,WAGxD,IAAK,IACD,OAAOF,EAAgB,UAAY,UACvC,IAAK,KAUD,OARI+G,GADW,IAAXvH,EACUQ,EAAgB,MAAQ,MAChB,IAAXR,EACGQ,GAAiBE,EAAW,MAAQ,QACvCV,EAAS,EACNQ,GAAiBE,EAAW,MAAQ,QAEpCF,GAAiBE,EAAW,KAAO,QAGrD,IAAK,IACD,OAAOF,GAAiBE,EAAW,SAAW,YAClD,IAAK,KAQD,OANI6G,GADW,IAAXvH,EACUQ,GAAiBE,EAAW,MAAQ,OAC5B,IAAXV,EACGQ,GAAiBE,EAAW,MAAQ,UAEpCF,GAAiBE,EAAW,MAAQ,QAGtD,IAAK,IACD,OAAOF,GAAiBE,EAAW,WAAa,eACpD,IAAK,KAUD,OARI6G,GADW,IAAXvH,EACUQ,GAAiBE,EAAW,QAAU,UAC9B,IAAXV,EACGQ,GAAiBE,EAAW,SAAW,WAC1CV,EAAS,EACNQ,GAAiBE,EAAW,SAAW,SAEvCF,GAAiBE,EAAW,UAAY,SAG1D,IAAK,IACD,OAAOF,GAAiBE,EAAW,WAAa,aACpD,IAAK,KAUD,OARI6G,GADW,IAAXvH,EACUQ,GAAiBE,EAAW,OAAS,QAC7B,IAAXV,EACGQ,GAAiBE,EAAW,OAAS,SACxCV,EAAS,EACNQ,GAAiBE,EAAW,OAAS,OAErCF,GAAiBE,EAAW,MAAQ,QA7J9D1D,EAAOE,aAAa,KAAM,CACtBC,OAAQiY,GACR/X,YAAagY,GACb/X,SAAU,gEAAsDF,MAAM,KACtEG,cAAe,4BAAuBH,MAAM,KAC5CI,YAAa,4BAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,gBACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,yBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,oBAGnB5F,QAAS,oBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,+BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,0BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,4BAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAGqW,GACHpW,GAAIoW,GACJnW,EAAGmW,GACHlW,GAAIkW,GACJjW,EAAGiW,GACHhW,GAAIgW,GACJ/V,EAAG+V,GACH9V,GAAI8V,GACJ7V,EAAG6V,GACH5V,GAAI4V,GACJ3V,EAAG2V,GACH1V,GAAI0V,IAERzV,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KA0FbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,8DAA8DD,MACvE,KAEJ8J,kBAAkB,EAClB5J,SAAU,2DAAsDF,MAAM,KACtEG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,eACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,gBAETC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,qBAGnB5F,QAAS,sBACTC,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACD,MAAO,oCACX,KAAK,EACD,MAAO,kCACX,KAAK,EACD,MAAO,mCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,iCAGnB1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,UACNC,EAAGsW,GACHrW,GAAIqW,GACJpW,EAAGoW,GACHnW,GAAImW,GACJlW,EAAGkW,GACHjW,GAAIiW,GACJhW,EAAGgW,GACH/V,GAAI+V,GACJ9V,EAAG8V,GACH7V,GAAI6V,GACJ5V,EAAG4V,GACH3V,GAAI2V,IAER1V,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,mFAAgFC,MACpF,KAEJC,YAAa,qDAAkDD,MAAM,KACrEE,SAAU,8EAA4DF,MAClE,KAEJG,cAAe,oCAA8BH,MAAM,KACnDI,YAAa,sBAAmBJ,MAAM,KACtC2D,oBAAoB,EACpBtD,cAAe,QACfC,KAAM,SAAUC,GACZ,MAA2B,MAApBA,EAAMmJ,OAAO,IAExBjJ,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAOF,EAAQ,GAAK,KAAO,MAE/BG,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,sBACTC,SAAU,kBACVC,QAAS,iBACTC,SAAU,2BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,mBACNC,EAAG,eACHC,GAAI,aACJC,EAAG,mBACHC,GAAI,YACJC,EAAG,gBACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,aACJC,EAAG,cACHC,GAAI,UACJC,EAAG,aACHC,GAAI,WAERC,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIsV,GAAe,CACfzD,MAAO,CAEH7S,GAAI,CAAC,6CAAW,6CAAW,8CAC3BC,EAAG,CAAC,gEAAe,uEACnBC,GAAI,CAAC,iCAAS,uCAAU,wCACxBC,EAAG,CAAC,oDAAa,iEACjBC,GAAI,CAAC,qBAAO,2BAAQ,4BACpBE,GAAI,CAAC,qBAAO,2BAAQ,4BACpBE,GAAI,CAAC,iCAAS,uCAAU,wCACxBE,GAAI,CAAC,uCAAU,uCAAU,yCAE7BoS,uBAAwB,SAAUjS,EAAQkS,GACtC,OAAkB,IAAXlS,EACDkS,EAAQ,GACE,GAAVlS,GAAeA,GAAU,EACzBkS,EAAQ,GACRA,EAAQ,IAElB5K,UAAW,SAAUtH,EAAQQ,EAAeyD,GACxC,IAAIiO,EAAUuD,GAAazD,MAAM/N,GACjC,OAAmB,IAAfA,EAAIkO,OACG3R,EAAgB0R,EAAQ,GAAKA,EAAQ,GAGxClS,EACA,IACAyV,GAAaxD,uBAAuBjS,EAAQkS,KAM5DlV,EAAOE,aAAa,UAAW,CAC3BC,OAAQ,4aAAmFC,MACvF,KAEJC,YAAa,+OAA2DD,MACpE,KAEJ8J,kBAAkB,EAClB5J,SAAU,uRAAsDF,MAAM,KACtEG,cAAe,8IAAqCH,MAAM,KAC1DI,YAAa,6FAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,6CACTC,QAAS,6CACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,8DACX,KAAK,EACD,MAAO,wDACX,KAAK,EACD,MAAO,8DACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB5F,QAAS,uCACTC,SAAU,WAUN,MATmB,CACf,4FACA,oHACA,kGACA,sFACA,8GACA,4FACA,6FAEgB5B,KAAKuH,QAE7B1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNC,EAAG,8FACHC,GAAIsW,GAAanO,UACjBlI,EAAGqW,GAAanO,UAChBjI,GAAIoW,GAAanO,UACjBhI,EAAGmW,GAAanO,UAChB/H,GAAIkW,GAAanO,UACjB9H,EAAG,qBACHC,GAAIgW,GAAanO,UACjB5H,EAAG,iCACHC,GAAI8V,GAAanO,UACjB1H,EAAG,uCACHC,GAAI4V,GAAanO,WAErBxH,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIuV,GAAe,CACf1D,MAAO,CAEH7S,GAAI,CAAC,UAAW,UAAW,WAC3BC,EAAG,CAAC,cAAe,gBACnBC,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,QAAS,SAAU,UACxBE,GAAI,CAAC,SAAU,SAAU,WAE7BoS,uBAAwB,SAAUjS,EAAQkS,GACtC,OAAkB,IAAXlS,EACDkS,EAAQ,GACE,GAAVlS,GAAeA,GAAU,EACzBkS,EAAQ,GACRA,EAAQ,IAElB5K,UAAW,SAAUtH,EAAQQ,EAAeyD,GACxC,IAAIiO,EAAUwD,GAAa1D,MAAM/N,GACjC,OAAmB,IAAfA,EAAIkO,OACG3R,EAAgB0R,EAAQ,GAAKA,EAAQ,GAGxClS,EACA,IACA0V,GAAazD,uBAAuBjS,EAAQkS,KAM5DlV,EAAOE,aAAa,KAAM,CACtBC,OAAQ,mFAAmFC,MACvF,KAEJC,YAAa,2DAA2DD,MACpE,KAEJ8J,kBAAkB,EAClB5J,SAAU,6DAAwDF,MAC9D,KAEJG,cAAe,0CAAqCH,MAAM,KAC1DI,YAAa,4BAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQ1B,KAAKuH,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,qBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB5F,QAAS,mBACTC,SAAU,WAUN,MATmB,CACf,iCACA,qCACA,iCACA,+BACA,wCACA,gCACA,iCAEgB5B,KAAKuH,QAE7B1F,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,mBACHC,GAAIuW,GAAapO,UACjBlI,EAAGsW,GAAapO,UAChBjI,GAAIqW,GAAapO,UACjBhI,EAAGoW,GAAapO,UAChB/H,GAAImW,GAAapO,UACjB9H,EAAG,MACHC,GAAIiW,GAAapO,UACjB5H,EAAG,QACHC,GAAI+V,GAAapO,UACjB1H,EAAG,SACHC,GAAI6V,GAAapO,WAErBxH,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,mHAAmHC,MACvH,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,sEAAsEF,MAC5E,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,mBACTC,QAAS,kBACTC,SAAU,gBACVC,QAAS,iBACTC,SAAU,8BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,iBACNC,EAAG,qBACHC,GAAI,cACJC,EAAG,SACHC,GAAI,aACJC,EAAG,SACHC,GAAI,aACJC,EAAG,UACHC,GAAI,cACJC,EAAG,UACHC,GAAI,cACJC,EAAG,UACHC,GAAI,eAERpC,cAAe,mCACfI,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACD,UACAA,EAAQ,GACR,QACAA,EAAQ,GACR,aAEA,WAGf4H,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,YAAbnD,EACOmD,EACa,UAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,eAAbnD,GAA0C,YAAbA,EACvB,IAATmD,EACO,EAEJA,EAAO,QAJX,GAOXlB,uBAAwB,UACxBC,QAAS,KACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,6DAAoDF,MAAM,KACpEG,cAAe,uCAA8BH,MAAM,KACnDI,YAAa,gCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,+BACN2J,IAAK,mBACLC,KAAM,wBAEV3J,SAAU,CACNC,QAAS,YACTC,QAAS,eACTE,QAAS,eACTD,SAAU,kBACVE,SAAU,iBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,kBACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,WACHC,GAAI,aACJC,EAAG,WACHC,GAAI,YACJC,EAAG,SACHC,GAAI,WACJC,EAAG,cACHC,GAAI,gBACJC,EAAG,YACHC,GAAI,YAERC,uBAAwB,mBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,MAER,GAAN4G,GAEM,GAANA,GADA,KAFA,OAUlB3G,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sFAAsFC,MAC1F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,8DAA8DF,MACpE,KAEJG,cAAe,kCAAkCH,MAAM,KACvDI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,UACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,8BACVC,QAAS,YACTC,SAAU,kCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,aACRC,KAAM,WACNC,EAAG,aACHC,GAAI,aACJC,EAAG,cACHC,GAAI,YACJC,EAAG,aACHC,GAAI,WACJC,EAAG,YACHC,GAAI,UACJC,EAAG,cACHC,GAAI,WACJC,EAAG,cACHC,GAAI,YAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIwV,GAAc,CACVpU,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEP4T,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbtZ,EAAOE,aAAa,KAAM,CACtBC,OAAQ,sdAA0FC,MAC9F,KAEJC,YAAa,sdAA0FD,MACnG,KAEJE,SAAU,ugBAA8FF,MACpG,KAEJG,cAAe,qQAAmDH,MAC9D,KAEJI,YAAa,uFAAsBJ,MAAM,KACzCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,2EACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,8BACNC,EAAG,+FACHC,GAAI,4DACJC,EAAG,gEACHC,GAAI,kEACJC,EAAG,uEACHC,GAAI,uDACJC,EAAG,8CACHC,GAAI,gDACJC,EAAG,oDACHC,GAAI,sDACJC,EAAG,0DACHC,GAAI,uDAERC,uBAAwB,4BACxBC,QAAS,SAAUC,GACf,OAAOA,EAAS,sBAEpBkC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,kEAAiB,SAAUqB,GAC7C,OAAOyT,GAAYzT,MAG3BjB,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,MAAO,SAAUqB,GACnC,OAAOwT,GAAYxT,MAI3B1E,cAAe,wMACfI,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,kCACAA,EAAO,EACP,kCACAA,EAAO,GACP,4BACAA,EAAO,GACP,8CACAA,EAAO,GACP,8CACAA,EAAO,GACP,4BAEA,mCAGf0E,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,mCAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,mCAAbnD,GAAqC,6BAAbA,GAEX,+CAAbA,GACQ,IAARmD,EAFAA,EAIAA,EAAO,IAGtBf,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,0cAAwFC,MAC5F,KAEJC,YAAa,oSAAmED,MAC5E,KAEJ8J,kBAAkB,EAClB5J,SAAU,uUAA8DF,MACpE,KAEJG,cAAe,+JAAkCH,MAAM,KACvDI,YAAa,iFAAqBJ,MAAM,KACxCa,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,gCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,0CACNC,EAAG,kFACHC,GAAI,gDACJC,EAAG,oDACHC,GAAI,sDACJC,EAAG,kCACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,0CACJC,EAAG,kCACHC,GAAI,oCACJC,EAAG,gEACHC,GAAI,mEAERC,uBAAwB,gBACxBC,QAAS,WACTtC,cAAe,wKACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,yCAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,2DAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,qDAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,uCACAA,EAAO,GACP,2BACAA,EAAO,GACP,yDACAA,EAAO,GACP,mDAEA,wCAGff,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,MAAO,CACvBC,OAAQ,6FAA0FC,MAC9F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,kDAAkDF,MAAM,KAClEG,cAAe,iCAAiCH,MAAM,KACtDI,YAAa,yBAAyBJ,MAAM,KAC5Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,gBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,+BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,WACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,YAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlB3G,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIoW,GAAa,CACbvU,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH6B,GAAI,gBACJ4S,GAAI,gBACJC,GAAI,gBACJhT,GAAI,gBACJI,GAAI,gBACJyL,GAAI,gBACJ5L,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBAGT3G,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,wbAAqFjH,MACzF,KAEJkH,WAAY,gXAAyElH,MACjF,MAGRC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,qEACTC,QAAS,qEACTE,QAAS,qEACTD,SAAU,uHACVE,SAAU,mIACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,oCACRC,KAAM,wBACNC,EAAG,sEACHE,EAAG,oDACHC,GAAI,0CACJC,EAAG,wCACHC,GAAI,8BACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,yBAERpC,cAAe,gGACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,uBAAbnD,EACOmD,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAbnD,EACAmD,EACa,uBAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,mCAAbnD,EACAmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,qBACAA,EAAO,GACP,iCAEA,sBAGflB,uBAAwB,sCACxBC,QAAS,SAAUC,GAGf,OAAOA,GAAUuW,GAAWvW,IAAWuW,GAF/BvW,EAAS,KAEuCuW,GADtC,KAAVvW,EAAgB,IAAM,QAGlCC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,khBAAoGC,MACxG,KAEJC,YAAa,wMAAiED,MAC1E,KAEJ8J,kBAAkB,EAClB5J,SAAU,yPAAiDF,MAAM,KACjEG,cAAe,uOAA8CH,MAAM,KACnEI,YAAa,sEAAyBJ,MAAM,KAC5C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,cACJC,IAAK,4CACLC,KAAM,sFAEVd,cAAe,4HACfC,KAAM,SAAUC,GACZ,MAAiB,iEAAVA,GAEXE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,+DAEA,gEAGfxC,SAAU,CACNC,QAAS,qEACTC,QAAS,iFACTC,SAAU,6DACVC,QAAS,mGACTC,SAAU,mGACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,+CACNC,EAAG,2EACHC,GAAI,0CACJC,EAAG,6BACHC,GAAI,8BACJC,EAAG,+CACHC,GAAI,gDACJC,EAAG,uBACHC,GAAI,wBACJiF,EAAG,+CACHC,GAAI,gDACJjF,EAAG,mCACHC,GAAI,oCACJC,EAAG,iBACHC,GAAI,qBAMZ,IAAI6W,GAAa,CACbnV,EAAG,QACHI,EAAG,QACHG,EAAG,QACHyB,GAAI,QACJC,GAAI,QACJhC,EAAG,OACHK,EAAG,OACH4B,GAAI,OACJC,GAAI,OACJjC,EAAG,WACHC,EAAG,WACHiC,IAAK,WACL/B,EAAG,OACHG,EAAG,QACH6B,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,SAGR/G,EAAOE,aAAa,KAAM,CACtBC,OAAQ,oGAA+EC,MACnF,KAEJC,YAAa,iEAAkDD,MAAM,KACrEE,SAAU,4FAAwDF,MAC9D,KAEJG,cAAe,mDAA8BH,MAAM,KACnDI,YAAa,4CAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,sBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,kBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,gBACNC,EAAG,uBACHE,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,WACJC,EAAG,aACHC,GAAI,YACJC,EAAG,YACHC,GAAI,WACJC,EAAG,aACHC,GAAI,aAERE,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAOzE,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,QAEpB,IAAIoE,EAAIpE,EAAS,GAGjB,OAAOA,GAAU0W,GAAWtS,IAAMsS,GAFzB1W,EAAS,IAAOoE,IAE0BsS,GADjC,KAAV1W,EAAgB,IAAM,SAI1CC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,wBAAwBJ,MAAM,KAC3Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,cACHC,GAAI,WACJC,EAAG,aACHC,GAAI,WAERC,uBAAwB,UACxBC,QAAS,SAAUC,GACf,OAAOA,GAEXC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIwW,GAAe,2DAAiDvZ,MAAM,KA4B1E,SAASwZ,GAAY5W,EAAQQ,EAAeC,EAAQC,GAChD,IAAImW,EAiBR,SAAsB7W,GAClB,IAAI8W,EAAUC,KAAKC,MAAOhX,EAAS,IAAQ,KACvCiX,EAAMF,KAAKC,MAAOhX,EAAS,IAAO,IAClCkX,EAAMlX,EAAS,GACfmX,EAAO,GACG,EAAVL,IACAK,GAAQR,GAAaG,GAAW,SAE1B,EAANG,IACAE,IAAkB,KAATA,EAAc,IAAM,IAAMR,GAAaM,GAAO,OAEjD,EAANC,IACAC,IAAkB,KAATA,EAAc,IAAM,IAAMR,GAAaO,IAEpD,MAAgB,KAATC,EAAc,OAASA,EA/BbC,CAAapX,GAC9B,OAAQS,GACJ,IAAK,KACD,OAAOoW,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,QAqBhC7Z,EAAOE,aAAa,MAAO,CACvBC,OAAQ,iSAAkMC,MACtM,KAEJC,YAAa,6JAA0HD,MACnI,KAEJ8J,kBAAkB,EAClB5J,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,2DAA2DH,MACtE,KAEJI,YAAa,2DAA2DJ,MACpE,KAEJa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,mBACTC,SAAU,MACVC,QAAS,wBACTC,SAAU,MACVC,SAAU,KAEdC,aAAc,CACVC,OA/FR,SAAyB6J,GACrB,IAAIwO,EAAOxO,EASX,OARAwO,GAC+B,IAA3BxO,EAAOM,QAAQ,OACTkO,EAAKC,MAAM,GAAI,GAAK,OACO,IAA3BzO,EAAOM,QAAQ,OACfkO,EAAKC,MAAM,GAAI,GAAK,OACO,IAA3BzO,EAAOM,QAAQ,OACfkO,EAAKC,MAAM,GAAI,GAAK,MACpBD,EAAO,QAuFbpY,KAnFR,SAAuB4J,GACnB,IAAIwO,EAAOxO,EASX,OARAwO,GAC+B,IAA3BxO,EAAOM,QAAQ,OACTkO,EAAKC,MAAM,GAAI,GAAK,YACO,IAA3BzO,EAAOM,QAAQ,OACfkO,EAAKC,MAAM,GAAI,GAAK,OACO,IAA3BzO,EAAOM,QAAQ,OACfkO,EAAKC,MAAM,GAAI,GAAK,MACpBD,EAAO,QA2EbnY,EAAG,UACHC,GAAIyX,GACJxX,EAAG,eACHC,GAAIuX,GACJtX,EAAG,eACHC,GAAIqX,GACJpX,EAAG,eACHC,GAAImX,GACJlX,EAAG,eACHC,GAAIiX,GACJhX,EAAG,eACHC,GAAI+W,IAER9W,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAIoX,GAAa,CACbhW,EAAG,QACHI,EAAG,QACHG,EAAG,QACHyB,GAAI,QACJC,GAAI,QACJhC,EAAG,OACHK,EAAG,OACH4B,GAAI,OACJC,GAAI,OACJjC,EAAG,cACHC,EAAG,cACHiC,IAAK,cACL/B,EAAG,YACHG,EAAG,QACH6B,GAAI,QACJC,GAAI,QACJC,GAAI,kBACJC,GAAI,mBAiJR,SAASyT,GAAsBxX,EAAQQ,EAAeyD,EAAKvD,GACvD,IAAI2D,EAAS,CACTnF,EAAG,CAAC,kBAAmB,mBACvBC,GAAI,CAACa,EAAS,WAAiBA,EAAS,YACxCZ,EAAG,CAAC,aAAW,iBACfC,GAAI,CAACW,EAAS,YAAeA,EAAS,aACtCV,EAAG,CAAC,aAAW,kBACfC,GAAI,CAACS,EAAS,YAAeA,EAAS,aACtCR,EAAG,CAAC,UAAW,eACfC,GAAI,CAACO,EAAS,SAAeA,EAAS,UACtCN,EAAG,CAAC,SAAU,aACdC,GAAI,CAACK,EAAS,SAAeA,EAAS,UACtCJ,EAAG,CAAC,QAAS,YACbC,GAAI,CAACG,EAAS,OAAaA,EAAS,SAExC,OAAOU,GAEDF,EADA6D,EAAOJ,GAAK,GAGZI,EAAOJ,GAAK,GA4NtB,SAASwT,GAAyBzX,EAAQQ,EAAeyD,GACrD,IAToBC,EAChBC,EAgBJ,MAAY,MAARF,EACOzD,EAAgB,6CAAY,6CACpB,MAARyD,EACAzD,EAAgB,uCAAW,uCAE3BR,EAAS,KAtBAkE,GAsB6BlE,EArB7CmE,EAQS,CACThF,GAAIqB,EAAgB,6HAA2B,6HAC/CnB,GAAImB,EAAgB,6HAA2B,6HAC/CjB,GAAIiB,EAAgB,2GAAwB,2GAC5Cf,GAAI,uEACJE,GAAI,uHACJE,GAAI,8EAOkCoE,GArBzB7G,MAAM,KAChB8G,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAiDhB,SAASuT,GAAqB9W,GAC1B,OAAO,WACH,OAAOA,EAAM,UAAwB,KAAjB3D,KAAKa,QAAiB,SAAM,IAAM,QA9a9Dd,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yGAA6EC,MACjF,KAEJC,YAAa,4DAAkDD,MAAM,KACrEE,SAAU,0EAAwDF,MAC9D,KAEJG,cAAe,iCAA8BH,MAAM,KACnDI,YAAa,0BAAuBJ,MAAM,KAC1CS,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACDE,EAAU,WAAO,WAEjBA,EAAU,QAAO,SAGhCP,cAAe,gCACfC,KAAM,SAAUC,GACZ,MAAiB,UAAVA,GAA4B,UAAVA,GAE7BM,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,qBACTC,QAAS,uBACTC,SAAU,2BACVC,QAAS,cACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,aACNC,EAAG,mBACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,aACHC,GAAI,YACJiF,EAAG,YACHC,GAAI,WACJjF,EAAG,SACHC,GAAI,QACJC,EAAG,eACHC,GAAI,eAERE,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAOzE,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,kBAEpB,IAAIoE,EAAIpE,EAAS,GAGjB,OAAOA,GAAUuX,GAAWnT,IAAMmT,GAFzBvX,EAAS,IAAOoE,IAE0BmT,GADjC,KAAVvX,EAAgB,IAAM,SAI1CC,KAAM,CACFC,IAAK,EACLC,IAAK,KAQbnD,EAAOE,aAAa,MAAO,CACvBC,OAAQ,kGAAsFC,MAC1F,KAEJC,YAAa,qDAAkDD,MAAM,KACrEE,SAAU,8EAAsDF,MAAM,KACtEG,cAAe,gDAA8BH,MAAM,KACnDI,YAAa,mCAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,0CAEVd,cAAe,aACfC,KAAM,SAAUC,GACZ,MAAO,QAAUA,EAAM4L,eAE3B1L,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAY,GAARF,EACOE,EAAU,MAAQ,MAElBA,EAAU,MAAQ,OAGjCQ,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,iBACVC,QAAS,kBACTC,SAAU,oCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,OACNC,EAAGsY,GACHrY,GAAIqY,GACJpY,EAAGoY,GACHnY,GAAImY,GACJlY,EAAGkY,GACHjY,GAAIiY,GACJhY,EAAGgY,GACH/X,GAAI+X,GACJ9X,EAAG8X,GACH7X,GAAI6X,GACJ5X,EAAG4X,GACH3X,GAAI2X,IAER1X,uBAAwB,YACxBC,QAAS,MACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KA4BbnD,EAAOE,aAAa,WAAY,CAC5BC,OAAQ,qIAAwFC,MAC5F,KAEJC,YAAa,qIAAwFD,MACjG,KAEJE,SAAU,uDAAkDF,MAAM,KAClEG,cAAe,uDAAkDH,MAAM,KACvEI,YAAa,uDAAkDJ,MAAM,KACrEa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,cACTC,SAAU,cACVC,QAAS,gBACTC,SAAU,cACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,iBACRC,KAAM,SACNC,EAAG,OACHC,GAAI,UACJC,EAAG,aACHC,GAAI,gBACJC,EAAG,YACHC,GAAI,mBACJC,EAAG,MACHC,GAAI,WACJC,EAAG,QACHC,GAAI,YACJC,EAAG,QACHC,GAAI,aAERI,KAAM,CACFC,IAAK,EACLC,IAAK,MAMbnD,EAAOE,aAAa,MAAO,CACvBC,OAAQ,saAAkFC,MACtF,KAEJC,YAAa,saAAkFD,MAC3F,KAEJE,SAAU,+PAAkDF,MAAM,KAClEG,cAAe,+PAAkDH,MAAM,KACvEI,YAAa,+PAAkDJ,MAAM,KACrEa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,uCACTC,QAAS,uCACTC,SAAU,mBACVC,QAAS,6CACTC,SAAU,mBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wDACRC,KAAM,wBACNC,EAAG,2BACHC,GAAI,8BACJC,EAAG,iCACHC,GAAI,oCACJC,EAAG,2BACHC,GAAI,sDACJC,EAAG,qBACHC,GAAI,+BACJC,EAAG,4BACHC,GAAI,0CACJC,EAAG,iCACHC,GAAI,2CAERI,KAAM,CACFC,IAAK,EACLC,IAAK,MAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,8bAAsFC,MAC1F,KAEJC,YAAa,8bAAsFD,MAC/F,KAEJE,SAAU,ySAAyDF,MAC/D,KAEJG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,gGACJC,IAAK,4GACLC,KAAM,wHAEVd,cAAe,uQACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAGM,4DAAbnD,GACa,mCAAbA,GACa,wEAAbA,GAGoB,wEAAbA,GAA4C,uBAAbA,GAGvB,IAARmD,EAJAA,EAEAA,EAAO,IAKtBnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAI2Z,EAAY,IAAP3W,EAAaC,EACtB,OAAI0W,EAAK,IACE,0DACAA,EAAK,IACL,iCACAA,EAAK,KACL,sEACAA,EAAK,KACL,qBACAA,EAAK,KACL,sEAEA,sBAGfnZ,SAAU,CACNC,QAAS,qEACTC,QAAS,+DACTC,SAAU,wFACVC,QAAS,kDACTC,SAAU,8FACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,oCACRC,KAAM,oCACNC,EAAG,sEACHC,GAAI,0CACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,wCACHC,GAAI,yBAGRC,uBAAwB,yFACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,4BACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,kCACpB,QACI,OAAOA,IAGnBkC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CAEFC,IAAK,EACLC,IAAK,KAmEbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,CACJkH,OAAQ,gdAAyFjH,MAC7F,KAEJkH,WAAY,ggBAAiGlH,MACzG,MAGRC,YAAa,gRAAyDD,MAClE,KAEJE,SAhDJ,SAA6B8B,EAAGiF,GAC5B,IAAI/G,EAAW,CACPsa,WAAY,+SAA0Dxa,MAClE,KAEJya,WAAY,+SAA0Dza,MAClE,KAEJ0a,SAAU,2TAA4D1a,MAClE,MAKZ,OAAU,IAANgC,EACO9B,EAAqB,WACvBga,MAAM,EAAG,GACTS,OAAOza,EAAqB,WAAEga,MAAM,EAAG,IAE3ClY,EASE9B,EALI,yCAAqBM,KAAKyG,GAC/B,aACA,sHAAsCzG,KAAKyG,GAC3C,WACA,cACoBjF,EAAEoF,OARjBlH,EAAqB,YA6BhCC,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAASiZ,GAAqB,sDAC9BhZ,QAASgZ,GAAqB,0CAC9B9Y,QAAS8Y,GAAqB,oCAC9B/Y,SAAU+Y,GAAqB,mBAC/B7Y,SAAU,WACN,OAAQ5B,KAAKuH,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOkT,GAAqB,uDAAoB3N,KAAK9M,MACzD,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOya,GAAqB,6DAAqB3N,KAAK9M,QAGlE6B,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNC,EAAG,wFACHC,GAAIsY,GACJrY,EAAGqY,GACHpY,GAAIoY,GACJnY,EAAG,uCACHC,GAAIkY,GACJjY,EAAG,2BACHC,GAAIgY,GACJ/X,EAAG,uCACHC,GAAI8X,GACJ7X,EAAG,qBACHC,GAAI4X,IAGRha,cAAe,kHACfC,KAAM,SAAUC,GACZ,MAAO,8DAAiBC,KAAKD,IAEjCE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,EACA,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,qBAEA,wCAGflB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACD,OAAOzE,EAAS,UACpB,IAAK,IACD,OAAOA,EAAS,gBACpB,QACI,OAAOA,IAGnBC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMb,IAAI6X,GAAW,CACP,iCACA,iCACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,iCACA,uCACA,iCACA,kCAEJC,GAAS,CAAC,iCAAS,qBAAO,2BAAQ,qBAAO,uCAAU,2BAAQ,4BAmvB/D,OAjvBAjb,EAAOE,aAAa,KAAM,CACtBC,OAAQ6a,GACR3a,YAAa2a,GACb1a,SAAU2a,GACV1a,cAAe0a,GACfza,YAAaya,GACbha,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,gCAEVd,cAAe,wCACfC,KAAM,SAAUC,GACZ,MAAO,uBAAUA,GAErBE,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,OAAIgD,EAAO,GACA,qBAEJ,sBAEXxC,SAAU,CACNC,QAAS,6CACTC,QAAS,6CACTC,SAAU,qCACVC,QAAS,kFACTC,SAAU,sEACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNC,EAAG,oDACHC,GAAI,oCACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,oDACHC,GAAI,oCACJC,EAAG,kCACHC,GAAI,kBACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,wCACHC,GAAI,yBAERqC,SAAU,SAAUzB,GAChB,OAAOA,EAAOK,QAAQ,UAAM,MAEhCI,WAAY,SAAUT,GAClB,OAAOA,EAAOK,QAAQ,KAAM,WAEhCb,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,UAAW,CAC3BC,OAAQ,6EAA6EC,MACjF,KAEJC,YAAa,oDAAoDD,MAAM,KACvEE,SAAU,+DAA+DF,MACrE,KAEJG,cAAe,kCAAkCH,MAAM,KACvDI,YAAa,yBAAyBJ,MAAM,KAC5Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,uBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,uBACTC,SAAU,oCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,qBACNC,EAAG,SACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SACJC,EAAG,SACHC,GAAI,QACJC,EAAG,UACHC,GAAI,UAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gXAAyEC,MAC7E,KAEJC,YAAa,sOAAkDD,MAAM,KACrEE,SAAU,6RAAuDF,MAAM,KACvEG,cAAe,uIAA8BH,MAAM,KACnDI,YAAa,6FAAuBJ,MAAM,KAC1Ca,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,8EACTC,QAAS,2DACTC,SAAU,6EACVC,QAAS,wEACTC,SAAU,8GACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,6DACRC,KAAM,gFACNC,EAAG,uCACHC,GAAI,0CACJC,EAAG,0DACHC,GAAI,0CACJC,EAAG,8CACHC,GAAI,8BACJC,EAAG,wCACHC,GAAI,wBACJC,EAAG,kCACHC,GAAI,kBACJC,EAAG,wCACHC,GAAI,yBAERI,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,yIAAqGC,MACzG,KAEJC,YAAa,sFAAsFD,MAC/F,KAEJ8J,kBAAkB,EAClB5J,SAAU,mHAAyDF,MAC/D,KAEJG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1C2D,oBAAoB,EACpBtD,cAAe,SACfC,KAAM,SAAUC,GACZ,MAAO,QAAQC,KAAKD,IAExBE,SAAU,SAAUC,EAAOC,EAASC,GAChC,OAAIF,EAAQ,GACDE,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhCC,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,yBACJC,IAAK,+BACLC,KAAM,qCACNqK,EAAG,YACHX,GAAI,aACJC,IAAK,mBACLC,KAAM,yBAEV3J,SAAU,CACNC,QAAS,yBACTC,QAAS,0BACTC,SAAU,sCACVC,QAAS,yBACTC,SAAU,6CACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,qBACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,mBACHC,GAAI,aACJC,EAAG,oBACHC,GAAI,cACJC,EAAG,mBACHC,GAAI,aACJiF,EAAG,qBACHC,GAAI,eACJjF,EAAG,oBACHC,GAAI,cACJC,EAAG,oBACHC,GAAI,eAERC,uBAAwB,UACxBC,QAAS,SAAUC,GACf,OAAOA,GAEXC,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,WAAY,CAC5BC,OAAQ,sNAA6GC,MACjH,KAEJC,YAAa,iHAA8DD,MACvE,KAEJ8J,kBAAkB,EAClB5J,SAAU,0JAAyEF,MAC/E,KAEJG,cAAe,mEAAqCH,MAAM,KAC1DI,YAAa,2CAA4BJ,MAAM,KAC/C2D,oBAAoB,EACpB9C,eAAgB,CACZC,GAAI,QACJE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,8BACTC,QAAS,kCACTC,SAAU,kBACVC,QAAS,yCACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,eACRC,KAAM,gBACNC,EAAG,kCACHC,GAAI,wBACJC,EAAG,4BACHC,GAAI,2BACJC,EAAG,wBACHC,GAAI,kBACJC,EAAG,kBACHC,GAAI,iBACJC,EAAG,qBACHC,GAAI,oBACJC,EAAG,sBACHC,GAAI,sBAERC,uBAAwB,uBACxBC,QAAS,SAAUC,GACf,IAAI4G,EAAI5G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN4G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlB3G,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,KAAM,CACtBC,OAAQ,gPAA0FC,MAC9F,KAEJC,YAAa,oKAAgED,MAAM,KACnFE,SAAU,gKAAuDF,MAAM,KACvEG,cAAe,kGAAsCH,MAAM,KAC3DI,YAAa,8DAA2BJ,MAAM,KAC9Ca,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,0BACTC,QAAS,yBACTC,SAAU,uDACVC,QAAS,oBACTC,SAAU,2DACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,cACRC,KAAM,qBACNC,EAAG,wCACHC,GAAI,gBACJC,EAAG,6BACHC,GAAI,4BACJC,EAAG,mBACHC,GAAI,kBACJC,EAAG,0BACHC,GAAI,yBACJC,EAAG,gBACHC,GAAI,eACJC,EAAG,sBACHC,GAAI,sBAERC,uBAAwB,+BACxBC,QAAS,yBACTE,KAAM,CACFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0KAAwCC,MAC5C,KAEJC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,2CACLC,KAAM,+CACNqK,EAAG,WACHX,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV1K,cAAe,gFACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,iBAAbnD,GAAkC,iBAAbA,GAAkC,iBAAbA,GAEtB,iBAAbA,GAAkC,iBAAbA,GAIb,IAARmD,EALAA,EAEAA,EAAO,IAMtBnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAI2Z,EAAY,IAAP3W,EAAaC,EACtB,OAAI0W,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGfnZ,SAAU,CACNC,QAAS,mBACTC,QAAS,mBACTC,SAAU,SAAUsQ,GAChB,OAAIA,EAAIhP,SAAWhD,KAAKgD,OACb,gBAEA,iBAGfrB,QAAS,mBACTC,SAAU,SAAUoQ,GAChB,OAAIhS,KAAKgD,SAAWgP,EAAIhP,OACb,gBAEA,iBAGfnB,SAAU,KAEdgB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,YACJiF,EAAG,WACHC,GAAI,YACJjF,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,aAERI,KAAM,CAEFC,IAAK,EACLC,IAAK,KAMbnD,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0KAAwCC,MAC5C,KAEJC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNqK,EAAG,WACHX,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV1K,cAAe,gFACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,iBAAbnD,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnCmD,EACa,iBAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,iBAAbnD,GAAkC,iBAAbA,EACrBmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAI2Z,EAAY,IAAP3W,EAAaC,EACtB,OAAI0W,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACO,OAAPA,EACA,eACAA,EAAK,KACL,eAEA,gBAGfnZ,SAAU,CACNC,QAAS,mBACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,mBACTC,SAAU,iBACVC,SAAU,KAEdgB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,eAMZ7C,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0KAAwCC,MAC5C,KAEJC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNqK,EAAG,WACHX,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV1K,cAAe,gFACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,iBAAbnD,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnCmD,EACa,iBAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,iBAAbnD,GAAkC,iBAAbA,EACrBmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAI2Z,EAAY,IAAP3W,EAAaC,EACtB,OAAI0W,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGfnZ,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,kBACVC,QAAS,oBACTC,SAAU,kBACVC,SAAU,KAEdgB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,eAMZ7C,EAAOE,aAAa,QAAS,CACzBC,OAAQ,0KAAwCC,MAC5C,KAEJC,YAAa,qGAAyCD,MAClD,KAEJE,SAAU,uIAA8BF,MAAM,KAC9CG,cAAe,6FAAuBH,MAAM,KAC5CI,YAAa,mDAAgBJ,MAAM,KACnCa,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNqK,EAAG,WACHX,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV1K,cAAe,gFACfiI,aAAc,SAAU1E,EAAMnD,GAI1B,OAHa,KAATmD,IACAA,EAAO,GAEM,iBAAbnD,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnCmD,EACa,iBAAbnD,EACQ,IAARmD,EAAaA,EAAOA,EAAO,GACd,iBAAbnD,GAAkC,iBAAbA,EACrBmD,EAAO,QADX,GAIXnD,SAAU,SAAUmD,EAAMC,EAAQjD,GAC9B,IAAI2Z,EAAY,IAAP3W,EAAaC,EACtB,OAAI0W,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGfnZ,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,kBACVC,QAAS,oBACTC,SAAU,kBACVC,SAAU,KAEdgB,uBAAwB,gCACxBC,QAAS,SAAUC,EAAQyE,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOzE,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBjB,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,eACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJC,EAAG,WACHC,GAAI,eAIZ7C,EAAOkb,OAAO,MAEPlb"};(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
    typeof define === 'function' && define.amd ? define(factory) :
    global.moment = factory()
}(this, (function () { 'use strict';

    var hookCallback;

    function hooks() {
        return hookCallback.apply(null, arguments);
    }

    // This is done to register the method called with moment()
    // without creating circular dependencies.
    function setHookCallback(callback) {
        hookCallback = callback;
    }

    function isArray(input) {
        return (
            input instanceof Array ||
            Object.prototype.toString.call(input) === '[object Array]'
        );
    }

    function isObject(input) {
        // IE8 will treat undefined and null as object if it wasn't for
        // input != null
        return (
            input != null &&
            Object.prototype.toString.call(input) === '[object Object]'
        );
    }

    function hasOwnProp(a, b) {
        return Object.prototype.hasOwnProperty.call(a, b);
    }

    function isObjectEmpty(obj) {
        if (Object.getOwnPropertyNames) {
            return Object.getOwnPropertyNames(obj).length === 0;
        } else {
            var k;
            for (k in obj) {
                if (hasOwnProp(obj, k)) {
                    return false;
                }
            }
            return true;
        }
    }

    function isUndefined(input) {
        return input === void 0;
    }

    function isNumber(input) {
        return (
            typeof input === 'number' ||
            Object.prototype.toString.call(input) === '[object Number]'
        );
    }

    function isDate(input) {
        return (
            input instanceof Date ||
            Object.prototype.toString.call(input) === '[object Date]'
        );
    }

    function map(arr, fn) {
        var res = [],
            i;
        for (i = 0; i < arr.length; ++i) {
            res.push(fn(arr[i], i));
        }
        return res;
    }

    function extend(a, b) {
        for (var i in b) {
            if (hasOwnProp(b, i)) {
                a[i] = b[i];
            }
        }

        if (hasOwnProp(b, 'toString')) {
            a.toString = b.toString;
        }

        if (hasOwnProp(b, 'valueOf')) {
            a.valueOf = b.valueOf;
        }

        return a;
    }

    function createUTC(input, format, locale, strict) {
        return createLocalOrUTC(input, format, locale, strict, true).utc();
    }

    function defaultParsingFlags() {
        // We need to deep clone this object.
        return {
            empty: false,
            unusedTokens: [],
            unusedInput: [],
            overflow: -2,
            charsLeftOver: 0,
            nullInput: false,
            invalidEra: null,
            invalidMonth: null,
            invalidFormat: false,
            userInvalidated: false,
            iso: false,
            parsedDateParts: [],
            era: null,
            meridiem: null,
            rfc2822: false,
            weekdayMismatch: false,
        };
    }

    function getParsingFlags(m) {
        if (m._pf == null) {
            m._pf = defaultParsingFlags();
        }
        return m._pf;
    }

    var some;
    if (Array.prototype.some) {
        some = Array.prototype.some;
    } else {
        some = function (fun) {
            var t = Object(this),
                len = t.length >>> 0,
                i;

            for (i = 0; i < len; i++) {
                if (i in t && fun.call(this, t[i], i, t)) {
                    return true;
                }
            }

            return false;
        };
    }

    function isValid(m) {
        if (m._isValid == null) {
            var flags = getParsingFlags(m),
                parsedParts = some.call(flags.parsedDateParts, function (i) {
                    return i != null;
                }),
                isNowValid =
                    !isNaN(m._d.getTime()) &&
                    flags.overflow < 0 &&
                    !flags.empty &&
                    !flags.invalidEra &&
                    !flags.invalidMonth &&
                    !flags.invalidWeekday &&
                    !flags.weekdayMismatch &&
                    !flags.nullInput &&
                    !flags.invalidFormat &&
                    !flags.userInvalidated &&
                    (!flags.meridiem || (flags.meridiem && parsedParts));

            if (m._strict) {
                isNowValid =
                    isNowValid &&
                    flags.charsLeftOver === 0 &&
                    flags.unusedTokens.length === 0 &&
                    flags.bigHour === undefined;
            }

            if (Object.isFrozen == null || !Object.isFrozen(m)) {
                m._isValid = isNowValid;
            } else {
                return isNowValid;
            }
        }
        return m._isValid;
    }

    function createInvalid(flags) {
        var m = createUTC(NaN);
        if (flags != null) {
            extend(getParsingFlags(m), flags);
        } else {
            getParsingFlags(m).userInvalidated = true;
        }

        return m;
    }

    // Plugins that add properties should also add the key here (null value),
    // so we can properly clone ourselves.
    var momentProperties = (hooks.momentProperties = []),
        updateInProgress = false;

    function copyConfig(to, from) {
        var i, prop, val;

        if (!isUndefined(from._isAMomentObject)) {
            to._isAMomentObject = from._isAMomentObject;
        }
        if (!isUndefined(from._i)) {
            to._i = from._i;
        }
        if (!isUndefined(from._f)) {
            to._f = from._f;
        }
        if (!isUndefined(from._l)) {
            to._l = from._l;
        }
        if (!isUndefined(from._strict)) {
            to._strict = from._strict;
        }
        if (!isUndefined(from._tzm)) {
            to._tzm = from._tzm;
        }
        if (!isUndefined(from._isUTC)) {
            to._isUTC = from._isUTC;
        }
        if (!isUndefined(from._offset)) {
            to._offset = from._offset;
        }
        if (!isUndefined(from._pf)) {
            to._pf = getParsingFlags(from);
        }
        if (!isUndefined(from._locale)) {
            to._locale = from._locale;
        }

        if (momentProperties.length > 0) {
            for (i = 0; i < momentProperties.length; i++) {
                prop = momentProperties[i];
                val = from[prop];
                if (!isUndefined(val)) {
                    to[prop] = val;
                }
            }
        }

        return to;
    }

    // Moment prototype object
    function Moment(config) {
        copyConfig(this, config);
        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
        if (!this.isValid()) {
            this._d = new Date(NaN);
        }
        // Prevent infinite loop in case updateOffset creates new moment
        // objects.
        if (updateInProgress === false) {
            updateInProgress = true;
            hooks.updateOffset(this);
            updateInProgress = false;
        }
    }

    function isMoment(obj) {
        return (
            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
        );
    }

    function warn(msg) {
        if (
            hooks.suppressDeprecationWarnings === false &&
            typeof console !== 'undefined' &&
            console.warn
        ) {
            console.warn('Deprecation warning: ' + msg);
        }
    }

    function deprecate(msg, fn) {
        var firstTime = true;

        return extend(function () {
            if (hooks.deprecationHandler != null) {
                hooks.deprecationHandler(null, msg);
            }
            if (firstTime) {
                var args = [],
                    arg,
                    i,
                    key;
                for (i = 0; i < arguments.length; i++) {
                    arg = '';
                    if (typeof arguments[i] === 'object') {
                        arg += '\n[' + i + '] ';
                        for (key in arguments[0]) {
                            if (hasOwnProp(arguments[0], key)) {
                                arg += key + ': ' + arguments[0][key] + ', ';
                            }
                        }
                        arg = arg.slice(0, -2); // Remove trailing comma and space
                    } else {
                        arg = arguments[i];
                    }
                    args.push(arg);
                }
                warn(
                    msg +
                        '\nArguments: ' +
                        Array.prototype.slice.call(args).join('') +
                        '\n' +
                        new Error().stack
                );
                firstTime = false;
            }
            return fn.apply(this, arguments);
        }, fn);
    }

    var deprecations = {};

    function deprecateSimple(name, msg) {
        if (hooks.deprecationHandler != null) {
            hooks.deprecationHandler(name, msg);
        }
        if (!deprecations[name]) {
            warn(msg);
            deprecations[name] = true;
        }
    }

    hooks.suppressDeprecationWarnings = false;
    hooks.deprecationHandler = null;

    function isFunction(input) {
        return (
            (typeof Function !== 'undefined' && input instanceof Function) ||
            Object.prototype.toString.call(input) === '[object Function]'
        );
    }

    function set(config) {
        var prop, i;
        for (i in config) {
            if (hasOwnProp(config, i)) {
                prop = config[i];
                if (isFunction(prop)) {
                    this[i] = prop;
                } else {
                    this['_' + i] = prop;
                }
            }
        }
        this._config = config;
        // Lenient ordinal parsing accepts just a number in addition to
        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
        // TODO: Remove "ordinalParse" fallback in next major release.
        this._dayOfMonthOrdinalParseLenient = new RegExp(
            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
                '|' +
                /\d{1,2}/.source
        );
    }

    function mergeConfigs(parentConfig, childConfig) {
        var res = extend({}, parentConfig),
            prop;
        for (prop in childConfig) {
            if (hasOwnProp(childConfig, prop)) {
                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
                    res[prop] = {};
                    extend(res[prop], parentConfig[prop]);
                    extend(res[prop], childConfig[prop]);
                } else if (childConfig[prop] != null) {
                    res[prop] = childConfig[prop];
                } else {
                    delete res[prop];
                }
            }
        }
        for (prop in parentConfig) {
            if (
                hasOwnProp(parentConfig, prop) &&
                !hasOwnProp(childConfig, prop) &&
                isObject(parentConfig[prop])
            ) {
                // make sure changes to properties don't modify parent config
                res[prop] = extend({}, res[prop]);
            }
        }
        return res;
    }

    function Locale(config) {
        if (config != null) {
            this.set(config);
        }
    }

    var keys;

    if (Object.keys) {
        keys = Object.keys;
    } else {
        keys = function (obj) {
            var i,
                res = [];
            for (i in obj) {
                if (hasOwnProp(obj, i)) {
                    res.push(i);
                }
            }
            return res;
        };
    }

    var defaultCalendar = {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    };

    function calendar(key, mom, now) {
        var output = this._calendar[key] || this._calendar['sameElse'];
        return isFunction(output) ? output.call(mom, now) : output;
    }

    function zeroFill(number, targetLength, forceSign) {
        var absNumber = '' + Math.abs(number),
            zerosToFill = targetLength - absNumber.length,
            sign = number >= 0;
        return (
            (sign ? (forceSign ? '+' : '') : '-') +
            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
            absNumber
        );
    }

    var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
        formatFunctions = {},
        formatTokenFunctions = {};

    // token:    'M'
    // padded:   ['MM', 2]
    // ordinal:  'Mo'
    // callback: function () { this.month() + 1 }
    function addFormatToken(token, padded, ordinal, callback) {
        var func = callback;
        if (typeof callback === 'string') {
            func = function () {
                return this[callback]();
            };
        }
        if (token) {
            formatTokenFunctions[token] = func;
        }
        if (padded) {
            formatTokenFunctions[padded[0]] = function () {
                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
            };
        }
        if (ordinal) {
            formatTokenFunctions[ordinal] = function () {
                return this.localeData().ordinal(
                    func.apply(this, arguments),
                    token
                );
            };
        }
    }

    function removeFormattingTokens(input) {
        if (input.match(/\[[\s\S]/)) {
            return input.replace(/^\[|\]$/g, '');
        }
        return input.replace(/\\/g, '');
    }

    function makeFormatFunction(format) {
        var array = format.match(formattingTokens),
            i,
            length;

        for (i = 0, length = array.length; i < length; i++) {
            if (formatTokenFunctions[array[i]]) {
                array[i] = formatTokenFunctions[array[i]];
            } else {
                array[i] = removeFormattingTokens(array[i]);
            }
        }

        return function (mom) {
            var output = '',
                i;
            for (i = 0; i < length; i++) {
                output += isFunction(array[i])
                    ? array[i].call(mom, format)
                    : array[i];
            }
            return output;
        };
    }

    // format date using native date object
    function formatMoment(m, format) {
        if (!m.isValid()) {
            return m.localeData().invalidDate();
        }

        format = expandFormat(format, m.localeData());
        formatFunctions[format] =
            formatFunctions[format] || makeFormatFunction(format);

        return formatFunctions[format](m);
    }

    function expandFormat(format, locale) {
        var i = 5;

        function replaceLongDateFormatTokens(input) {
            return locale.longDateFormat(input) || input;
        }

        localFormattingTokens.lastIndex = 0;
        while (i >= 0 && localFormattingTokens.test(format)) {
            format = format.replace(
                localFormattingTokens,
                replaceLongDateFormatTokens
            );
            localFormattingTokens.lastIndex = 0;
            i -= 1;
        }

        return format;
    }

    var defaultLongDateFormat = {
        LTS: 'h:mm:ss A',
        LT: 'h:mm A',
        L: 'MM/DD/YYYY',
        LL: 'MMMM D, YYYY',
        LLL: 'MMMM D, YYYY h:mm A',
        LLLL: 'dddd, MMMM D, YYYY h:mm A',
    };

    function longDateFormat(key) {
        var format = this._longDateFormat[key],
            formatUpper = this._longDateFormat[key.toUpperCase()];

        if (format || !formatUpper) {
            return format;
        }

        this._longDateFormat[key] = formatUpper
            .match(formattingTokens)
            .map(function (tok) {
                if (
                    tok === 'MMMM' ||
                    tok === 'MM' ||
                    tok === 'DD' ||
                    tok === 'dddd'
                ) {
                    return tok.slice(1);
                }
                return tok;
            })
            .join('');

        return this._longDateFormat[key];
    }

    var defaultInvalidDate = 'Invalid date';

    function invalidDate() {
        return this._invalidDate;
    }

    var defaultOrdinal = '%d',
        defaultDayOfMonthOrdinalParse = /\d{1,2}/;

    function ordinal(number) {
        return this._ordinal.replace('%d', number);
    }

    var defaultRelativeTime = {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        w: 'a week',
        ww: '%d weeks',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    };

    function relativeTime(number, withoutSuffix, string, isFuture) {
        var output = this._relativeTime[string];
        return isFunction(output)
            ? output(number, withoutSuffix, string, isFuture)
            : output.replace(/%d/i, number);
    }

    function pastFuture(diff, output) {
        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
    }

    var aliases = {};

    function addUnitAlias(unit, shorthand) {
        var lowerCase = unit.toLowerCase();
        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
    }

    function normalizeUnits(units) {
        return typeof units === 'string'
            ? aliases[units] || aliases[units.toLowerCase()]
            : undefined;
    }

    function normalizeObjectUnits(inputObject) {
        var normalizedInput = {},
            normalizedProp,
            prop;

        for (prop in inputObject) {
            if (hasOwnProp(inputObject, prop)) {
                normalizedProp = normalizeUnits(prop);
                if (normalizedProp) {
                    normalizedInput[normalizedProp] = inputObject[prop];
                }
            }
        }

        return normalizedInput;
    }

    var priorities = {};

    function addUnitPriority(unit, priority) {
        priorities[unit] = priority;
    }

    function getPrioritizedUnits(unitsObj) {
        var units = [],
            u;
        for (u in unitsObj) {
            if (hasOwnProp(unitsObj, u)) {
                units.push({ unit: u, priority: priorities[u] });
            }
        }
        units.sort(function (a, b) {
            return a.priority - b.priority;
        });
        return units;
    }

    function isLeapYear(year) {
        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
    }

    function absFloor(number) {
        if (number < 0) {
            // -0 -> 0
            return Math.ceil(number) || 0;
        } else {
            return Math.floor(number);
        }
    }

    function toInt(argumentForCoercion) {
        var coercedNumber = +argumentForCoercion,
            value = 0;

        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
            value = absFloor(coercedNumber);
        }

        return value;
    }

    function makeGetSet(unit, keepTime) {
        return function (value) {
            if (value != null) {
                set$1(this, unit, value);
                hooks.updateOffset(this, keepTime);
                return this;
            } else {
                return get(this, unit);
            }
        };
    }

    function get(mom, unit) {
        return mom.isValid()
            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
            : NaN;
    }

    function set$1(mom, unit, value) {
        if (mom.isValid() && !isNaN(value)) {
            if (
                unit === 'FullYear' &&
                isLeapYear(mom.year()) &&
                mom.month() === 1 &&
                mom.date() === 29
            ) {
                value = toInt(value);
                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
                    value,
                    mom.month(),
                    daysInMonth(value, mom.month())
                );
            } else {
                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
            }
        }
    }

    // MOMENTS

    function stringGet(units) {
        units = normalizeUnits(units);
        if (isFunction(this[units])) {
            return this[units]();
        }
        return this;
    }

    function stringSet(units, value) {
        if (typeof units === 'object') {
            units = normalizeObjectUnits(units);
            var prioritized = getPrioritizedUnits(units),
                i;
            for (i = 0; i < prioritized.length; i++) {
                this[prioritized[i].unit](units[prioritized[i].unit]);
            }
        } else {
            units = normalizeUnits(units);
            if (isFunction(this[units])) {
                return this[units](value);
            }
        }
        return this;
    }

    var match1 = /\d/, //       0 - 9
        match2 = /\d\d/, //      00 - 99
        match3 = /\d{3}/, //     000 - 999
        match4 = /\d{4}/, //    0000 - 9999
        match6 = /[+-]?\d{6}/, // -999999 - 999999
        match1to2 = /\d\d?/, //       0 - 99
        match3to4 = /\d\d\d\d?/, //     999 - 9999
        match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
        match1to3 = /\d{1,3}/, //       0 - 999
        match1to4 = /\d{1,4}/, //       0 - 9999
        match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
        matchUnsigned = /\d+/, //       0 - inf
        matchSigned = /[+-]?\d+/, //    -inf - inf
        matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
        matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
        matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
        // any word (or two) characters or numbers including two/three word month in arabic.
        // includes scottish gaelic two word and hyphenated months
        matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
        regexes;

    regexes = {};

    function addRegexToken(token, regex, strictRegex) {
        regexes[token] = isFunction(regex)
            ? regex
            : function (isStrict, localeData) {
                  return isStrict && strictRegex ? strictRegex : regex;
              };
    }

    function getParseRegexForToken(token, config) {
        if (!hasOwnProp(regexes, token)) {
            return new RegExp(unescapeFormat(token));
        }

        return regexes[token](config._strict, config._locale);
    }

    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
    function unescapeFormat(s) {
        return regexEscape(
            s
                .replace('\\', '')
                .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
                    matched,
                    p1,
                    p2,
                    p3,
                    p4
                ) {
                    return p1 || p2 || p3 || p4;
                })
        );
    }

    function regexEscape(s) {
        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    }

    var tokens = {};

    function addParseToken(token, callback) {
        var i,
            func = callback;
        if (typeof token === 'string') {
            token = [token];
        }
        if (isNumber(callback)) {
            func = function (input, array) {
                array[callback] = toInt(input);
            };
        }
        for (i = 0; i < token.length; i++) {
            tokens[token[i]] = func;
        }
    }

    function addWeekParseToken(token, callback) {
        addParseToken(token, function (input, array, config, token) {
            config._w = config._w || {};
            callback(input, config._w, config, token);
        });
    }

    function addTimeToArrayFromToken(token, input, config) {
        if (input != null && hasOwnProp(tokens, token)) {
            tokens[token](input, config._a, config, token);
        }
    }

    var YEAR = 0,
        MONTH = 1,
        DATE = 2,
        HOUR = 3,
        MINUTE = 4,
        SECOND = 5,
        MILLISECOND = 6,
        WEEK = 7,
        WEEKDAY = 8;

    function mod(n, x) {
        return ((n % x) + x) % x;
    }

    var indexOf;

    if (Array.prototype.indexOf) {
        indexOf = Array.prototype.indexOf;
    } else {
        indexOf = function (o) {
            // I know
            var i;
            for (i = 0; i < this.length; ++i) {
                if (this[i] === o) {
                    return i;
                }
            }
            return -1;
        };
    }

    function daysInMonth(year, month) {
        if (isNaN(year) || isNaN(month)) {
            return NaN;
        }
        var modMonth = mod(month, 12);
        year += (month - modMonth) / 12;
        return modMonth === 1
            ? isLeapYear(year)
                ? 29
                : 28
            : 31 - ((modMonth % 7) % 2);
    }

    // FORMATTING

    addFormatToken('M', ['MM', 2], 'Mo', function () {
        return this.month() + 1;
    });

    addFormatToken('MMM', 0, 0, function (format) {
        return this.localeData().monthsShort(this, format);
    });

    addFormatToken('MMMM', 0, 0, function (format) {
        return this.localeData().months(this, format);
    });

    // ALIASES

    addUnitAlias('month', 'M');

    // PRIORITY

    addUnitPriority('month', 8);

    // PARSING

    addRegexToken('M', match1to2);
    addRegexToken('MM', match1to2, match2);
    addRegexToken('MMM', function (isStrict, locale) {
        return locale.monthsShortRegex(isStrict);
    });
    addRegexToken('MMMM', function (isStrict, locale) {
        return locale.monthsRegex(isStrict);
    });

    addParseToken(['M', 'MM'], function (input, array) {
        array[MONTH] = toInt(input) - 1;
    });

    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
        var month = config._locale.monthsParse(input, token, config._strict);
        // if we didn't find a month name, mark the date as invalid.
        if (month != null) {
            array[MONTH] = month;
        } else {
            getParsingFlags(config).invalidMonth = input;
        }
    });

    // LOCALES

    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
            '_'
        ),
        MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
        defaultMonthsShortRegex = matchWord,
        defaultMonthsRegex = matchWord;

    function localeMonths(m, format) {
        if (!m) {
            return isArray(this._months)
                ? this._months
                : this._months['standalone'];
        }
        return isArray(this._months)
            ? this._months[m.month()]
            : this._months[
                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
                      ? 'format'
                      : 'standalone'
              ][m.month()];
    }

    function localeMonthsShort(m, format) {
        if (!m) {
            return isArray(this._monthsShort)
                ? this._monthsShort
                : this._monthsShort['standalone'];
        }
        return isArray(this._monthsShort)
            ? this._monthsShort[m.month()]
            : this._monthsShort[
                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
              ][m.month()];
    }

    function handleStrictParse(monthName, format, strict) {
        var i,
            ii,
            mom,
            llc = monthName.toLocaleLowerCase();
        if (!this._monthsParse) {
            // this is not used
            this._monthsParse = [];
            this._longMonthsParse = [];
            this._shortMonthsParse = [];
            for (i = 0; i < 12; ++i) {
                mom = createUTC([2000, i]);
                this._shortMonthsParse[i] = this.monthsShort(
                    mom,
                    ''
                ).toLocaleLowerCase();
                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
            }
        }

        if (strict) {
            if (format === 'MMM') {
                ii = indexOf.call(this._shortMonthsParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._longMonthsParse, llc);
                return ii !== -1 ? ii : null;
            }
        } else {
            if (format === 'MMM') {
                ii = indexOf.call(this._shortMonthsParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._longMonthsParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._longMonthsParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._shortMonthsParse, llc);
                return ii !== -1 ? ii : null;
            }
        }
    }

    function localeMonthsParse(monthName, format, strict) {
        var i, mom, regex;

        if (this._monthsParseExact) {
            return handleStrictParse.call(this, monthName, format, strict);
        }

        if (!this._monthsParse) {
            this._monthsParse = [];
            this._longMonthsParse = [];
            this._shortMonthsParse = [];
        }

        // TODO: add sorting
        // Sorting makes sure if one month (or abbr) is a prefix of another
        // see sorting in computeMonthsParse
        for (i = 0; i < 12; i++) {
            // make the regex if we don't have it already
            mom = createUTC([2000, i]);
            if (strict && !this._longMonthsParse[i]) {
                this._longMonthsParse[i] = new RegExp(
                    '^' + this.months(mom, '').replace('.', '') + '$',
                    'i'
                );
                this._shortMonthsParse[i] = new RegExp(
                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',
                    'i'
                );
            }
            if (!strict && !this._monthsParse[i]) {
                regex =
                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
            }
            // test the regex
            if (
                strict &&
                format === 'MMMM' &&
                this._longMonthsParse[i].test(monthName)
            ) {
                return i;
            } else if (
                strict &&
                format === 'MMM' &&
                this._shortMonthsParse[i].test(monthName)
            ) {
                return i;
            } else if (!strict && this._monthsParse[i].test(monthName)) {
                return i;
            }
        }
    }

    // MOMENTS

    function setMonth(mom, value) {
        var dayOfMonth;

        if (!mom.isValid()) {
            // No op
            return mom;
        }

        if (typeof value === 'string') {
            if (/^\d+$/.test(value)) {
                value = toInt(value);
            } else {
                value = mom.localeData().monthsParse(value);
                // TODO: Another silent failure?
                if (!isNumber(value)) {
                    return mom;
                }
            }
        }

        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
        return mom;
    }

    function getSetMonth(value) {
        if (value != null) {
            setMonth(this, value);
            hooks.updateOffset(this, true);
            return this;
        } else {
            return get(this, 'Month');
        }
    }

    function getDaysInMonth() {
        return daysInMonth(this.year(), this.month());
    }

    function monthsShortRegex(isStrict) {
        if (this._monthsParseExact) {
            if (!hasOwnProp(this, '_monthsRegex')) {
                computeMonthsParse.call(this);
            }
            if (isStrict) {
                return this._monthsShortStrictRegex;
            } else {
                return this._monthsShortRegex;
            }
        } else {
            if (!hasOwnProp(this, '_monthsShortRegex')) {
                this._monthsShortRegex = defaultMonthsShortRegex;
            }
            return this._monthsShortStrictRegex && isStrict
                ? this._monthsShortStrictRegex
                : this._monthsShortRegex;
        }
    }

    function monthsRegex(isStrict) {
        if (this._monthsParseExact) {
            if (!hasOwnProp(this, '_monthsRegex')) {
                computeMonthsParse.call(this);
            }
            if (isStrict) {
                return this._monthsStrictRegex;
            } else {
                return this._monthsRegex;
            }
        } else {
            if (!hasOwnProp(this, '_monthsRegex')) {
                this._monthsRegex = defaultMonthsRegex;
            }
            return this._monthsStrictRegex && isStrict
                ? this._monthsStrictRegex
                : this._monthsRegex;
        }
    }

    function computeMonthsParse() {
        function cmpLenRev(a, b) {
            return b.length - a.length;
        }

        var shortPieces = [],
            longPieces = [],
            mixedPieces = [],
            i,
            mom;
        for (i = 0; i < 12; i++) {
            // make the regex if we don't have it already
            mom = createUTC([2000, i]);
            shortPieces.push(this.monthsShort(mom, ''));
            longPieces.push(this.months(mom, ''));
            mixedPieces.push(this.months(mom, ''));
            mixedPieces.push(this.monthsShort(mom, ''));
        }
        // Sorting makes sure if one month (or abbr) is a prefix of another it
        // will match the longer piece.
        shortPieces.sort(cmpLenRev);
        longPieces.sort(cmpLenRev);
        mixedPieces.sort(cmpLenRev);
        for (i = 0; i < 12; i++) {
            shortPieces[i] = regexEscape(shortPieces[i]);
            longPieces[i] = regexEscape(longPieces[i]);
        }
        for (i = 0; i < 24; i++) {
            mixedPieces[i] = regexEscape(mixedPieces[i]);
        }

        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
        this._monthsShortRegex = this._monthsRegex;
        this._monthsStrictRegex = new RegExp(
            '^(' + longPieces.join('|') + ')',
            'i'
        );
        this._monthsShortStrictRegex = new RegExp(
            '^(' + shortPieces.join('|') + ')',
            'i'
        );
    }

    // FORMATTING

    addFormatToken('Y', 0, 0, function () {
        var y = this.year();
        return y <= 9999 ? zeroFill(y, 4) : '+' + y;
    });

    addFormatToken(0, ['YY', 2], 0, function () {
        return this.year() % 100;
    });

    addFormatToken(0, ['YYYY', 4], 0, 'year');
    addFormatToken(0, ['YYYYY', 5], 0, 'year');
    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');

    // ALIASES

    addUnitAlias('year', 'y');

    // PRIORITIES

    addUnitPriority('year', 1);

    // PARSING

    addRegexToken('Y', matchSigned);
    addRegexToken('YY', match1to2, match2);
    addRegexToken('YYYY', match1to4, match4);
    addRegexToken('YYYYY', match1to6, match6);
    addRegexToken('YYYYYY', match1to6, match6);

    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
    addParseToken('YYYY', function (input, array) {
        array[YEAR] =
            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
    });
    addParseToken('YY', function (input, array) {
        array[YEAR] = hooks.parseTwoDigitYear(input);
    });
    addParseToken('Y', function (input, array) {
        array[YEAR] = parseInt(input, 10);
    });

    // HELPERS

    function daysInYear(year) {
        return isLeapYear(year) ? 366 : 365;
    }

    // HOOKS

    hooks.parseTwoDigitYear = function (input) {
        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
    };

    // MOMENTS

    var getSetYear = makeGetSet('FullYear', true);

    function getIsLeapYear() {
        return isLeapYear(this.year());
    }

    function createDate(y, m, d, h, M, s, ms) {
        // can't just apply() to create a date:
        // https://stackoverflow.com/q/181348
        var date;
        // the date constructor remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            // preserve leap years using a full 400 year cycle, then reset
            date = new Date(y + 400, m, d, h, M, s, ms);
            if (isFinite(date.getFullYear())) {
                date.setFullYear(y);
            }
        } else {
            date = new Date(y, m, d, h, M, s, ms);
        }

        return date;
    }

    function createUTCDate(y) {
        var date, args;
        // the Date.UTC function remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            args = Array.prototype.slice.call(arguments);
            // preserve leap years using a full 400 year cycle, then reset
            args[0] = y + 400;
            date = new Date(Date.UTC.apply(null, args));
            if (isFinite(date.getUTCFullYear())) {
                date.setUTCFullYear(y);
            }
        } else {
            date = new Date(Date.UTC.apply(null, arguments));
        }

        return date;
    }

    // start-of-first-week - start-of-year
    function firstWeekOffset(year, dow, doy) {
        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
            fwd = 7 + dow - doy,
            // first-week day local weekday -- which local weekday is fwd
            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;

        return -fwdlw + fwd - 1;
    }

    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
        var localWeekday = (7 + weekday - dow) % 7,
            weekOffset = firstWeekOffset(year, dow, doy),
            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
            resYear,
            resDayOfYear;

        if (dayOfYear <= 0) {
            resYear = year - 1;
            resDayOfYear = daysInYear(resYear) + dayOfYear;
        } else if (dayOfYear > daysInYear(year)) {
            resYear = year + 1;
            resDayOfYear = dayOfYear - daysInYear(year);
        } else {
            resYear = year;
            resDayOfYear = dayOfYear;
        }

        return {
            year: resYear,
            dayOfYear: resDayOfYear,
        };
    }

    function weekOfYear(mom, dow, doy) {
        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
            resWeek,
            resYear;

        if (week < 1) {
            resYear = mom.year() - 1;
            resWeek = week + weeksInYear(resYear, dow, doy);
        } else if (week > weeksInYear(mom.year(), dow, doy)) {
            resWeek = week - weeksInYear(mom.year(), dow, doy);
            resYear = mom.year() + 1;
        } else {
            resYear = mom.year();
            resWeek = week;
        }

        return {
            week: resWeek,
            year: resYear,
        };
    }

    function weeksInYear(year, dow, doy) {
        var weekOffset = firstWeekOffset(year, dow, doy),
            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
    }

    // FORMATTING

    addFormatToken('w', ['ww', 2], 'wo', 'week');
    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');

    // ALIASES

    addUnitAlias('week', 'w');
    addUnitAlias('isoWeek', 'W');

    // PRIORITIES

    addUnitPriority('week', 5);
    addUnitPriority('isoWeek', 5);

    // PARSING

    addRegexToken('w', match1to2);
    addRegexToken('ww', match1to2, match2);
    addRegexToken('W', match1to2);
    addRegexToken('WW', match1to2, match2);

    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
        input,
        week,
        config,
        token
    ) {
        week[token.substr(0, 1)] = toInt(input);
    });

    // HELPERS

    // LOCALES

    function localeWeek(mom) {
        return weekOfYear(mom, this._week.dow, this._week.doy).week;
    }

    var defaultLocaleWeek = {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    };

    function localeFirstDayOfWeek() {
        return this._week.dow;
    }

    function localeFirstDayOfYear() {
        return this._week.doy;
    }

    // MOMENTS

    function getSetWeek(input) {
        var week = this.localeData().week(this);
        return input == null ? week : this.add((input - week) * 7, 'd');
    }

    function getSetISOWeek(input) {
        var week = weekOfYear(this, 1, 4).week;
        return input == null ? week : this.add((input - week) * 7, 'd');
    }

    // FORMATTING

    addFormatToken('d', 0, 'do', 'day');

    addFormatToken('dd', 0, 0, function (format) {
        return this.localeData().weekdaysMin(this, format);
    });

    addFormatToken('ddd', 0, 0, function (format) {
        return this.localeData().weekdaysShort(this, format);
    });

    addFormatToken('dddd', 0, 0, function (format) {
        return this.localeData().weekdays(this, format);
    });

    addFormatToken('e', 0, 0, 'weekday');
    addFormatToken('E', 0, 0, 'isoWeekday');

    // ALIASES

    addUnitAlias('day', 'd');
    addUnitAlias('weekday', 'e');
    addUnitAlias('isoWeekday', 'E');

    // PRIORITY
    addUnitPriority('day', 11);
    addUnitPriority('weekday', 11);
    addUnitPriority('isoWeekday', 11);

    // PARSING

    addRegexToken('d', match1to2);
    addRegexToken('e', match1to2);
    addRegexToken('E', match1to2);
    addRegexToken('dd', function (isStrict, locale) {
        return locale.weekdaysMinRegex(isStrict);
    });
    addRegexToken('ddd', function (isStrict, locale) {
        return locale.weekdaysShortRegex(isStrict);
    });
    addRegexToken('dddd', function (isStrict, locale) {
        return locale.weekdaysRegex(isStrict);
    });

    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
        var weekday = config._locale.weekdaysParse(input, token, config._strict);
        // if we didn't get a weekday name, mark the date as invalid
        if (weekday != null) {
            week.d = weekday;
        } else {
            getParsingFlags(config).invalidWeekday = input;
        }
    });

    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
        week[token] = toInt(input);
    });

    // HELPERS

    function parseWeekday(input, locale) {
        if (typeof input !== 'string') {
            return input;
        }

        if (!isNaN(input)) {
            return parseInt(input, 10);
        }

        input = locale.weekdaysParse(input);
        if (typeof input === 'number') {
            return input;
        }

        return null;
    }

    function parseIsoWeekday(input, locale) {
        if (typeof input === 'string') {
            return locale.weekdaysParse(input) % 7 || 7;
        }
        return isNaN(input) ? null : input;
    }

    // LOCALES
    function shiftWeekdays(ws, n) {
        return ws.slice(n, 7).concat(ws.slice(0, n));
    }

    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        defaultWeekdaysRegex = matchWord,
        defaultWeekdaysShortRegex = matchWord,
        defaultWeekdaysMinRegex = matchWord;

    function localeWeekdays(m, format) {
        var weekdays = isArray(this._weekdays)
            ? this._weekdays
            : this._weekdays[
                  m && m !== true && this._weekdays.isFormat.test(format)
                      ? 'format'
                      : 'standalone'
              ];
        return m === true
            ? shiftWeekdays(weekdays, this._week.dow)
            : m
            ? weekdays[m.day()]
            : weekdays;
    }

    function localeWeekdaysShort(m) {
        return m === true
            ? shiftWeekdays(this._weekdaysShort, this._week.dow)
            : m
            ? this._weekdaysShort[m.day()]
            : this._weekdaysShort;
    }

    function localeWeekdaysMin(m) {
        return m === true
            ? shiftWeekdays(this._weekdaysMin, this._week.dow)
            : m
            ? this._weekdaysMin[m.day()]
            : this._weekdaysMin;
    }

    function handleStrictParse$1(weekdayName, format, strict) {
        var i,
            ii,
            mom,
            llc = weekdayName.toLocaleLowerCase();
        if (!this._weekdaysParse) {
            this._weekdaysParse = [];
            this._shortWeekdaysParse = [];
            this._minWeekdaysParse = [];

            for (i = 0; i < 7; ++i) {
                mom = createUTC([2000, 1]).day(i);
                this._minWeekdaysParse[i] = this.weekdaysMin(
                    mom,
                    ''
                ).toLocaleLowerCase();
                this._shortWeekdaysParse[i] = this.weekdaysShort(
                    mom,
                    ''
                ).toLocaleLowerCase();
                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
            }
        }

        if (strict) {
            if (format === 'dddd') {
                ii = indexOf.call(this._weekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else if (format === 'ddd') {
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            }
        } else {
            if (format === 'dddd') {
                ii = indexOf.call(this._weekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else if (format === 'ddd') {
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._weekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._minWeekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._weekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            }
        }
    }

    function localeWeekdaysParse(weekdayName, format, strict) {
        var i, mom, regex;

        if (this._weekdaysParseExact) {
            return handleStrictParse$1.call(this, weekdayName, format, strict);
        }

        if (!this._weekdaysParse) {
            this._weekdaysParse = [];
            this._minWeekdaysParse = [];
            this._shortWeekdaysParse = [];
            this._fullWeekdaysParse = [];
        }

        for (i = 0; i < 7; i++) {
            // make the regex if we don't have it already

            mom = createUTC([2000, 1]).day(i);
            if (strict && !this._fullWeekdaysParse[i]) {
                this._fullWeekdaysParse[i] = new RegExp(
                    '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
                    'i'
                );
                this._shortWeekdaysParse[i] = new RegExp(
                    '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
                    'i'
                );
                this._minWeekdaysParse[i] = new RegExp(
                    '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
                    'i'
                );
            }
            if (!this._weekdaysParse[i]) {
                regex =
                    '^' +
                    this.weekdays(mom, '') +
                    '|^' +
                    this.weekdaysShort(mom, '') +
                    '|^' +
                    this.weekdaysMin(mom, '');
                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
            }
            // test the regex
            if (
                strict &&
                format === 'dddd' &&
                this._fullWeekdaysParse[i].test(weekdayName)
            ) {
                return i;
            } else if (
                strict &&
                format === 'ddd' &&
                this._shortWeekdaysParse[i].test(weekdayName)
            ) {
                return i;
            } else if (
                strict &&
                format === 'dd' &&
                this._minWeekdaysParse[i].test(weekdayName)
            ) {
                return i;
            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
                return i;
            }
        }
    }

    // MOMENTS

    function getSetDayOfWeek(input) {
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }
        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
        if (input != null) {
            input = parseWeekday(input, this.localeData());
            return this.add(input - day, 'd');
        } else {
            return day;
        }
    }

    function getSetLocaleDayOfWeek(input) {
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }
        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
        return input == null ? weekday : this.add(input - weekday, 'd');
    }

    function getSetISODayOfWeek(input) {
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }

        // behaves the same as moment#day except
        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
        // as a setter, sunday should belong to the previous week.

        if (input != null) {
            var weekday = parseIsoWeekday(input, this.localeData());
            return this.day(this.day() % 7 ? weekday : weekday - 7);
        } else {
            return this.day() || 7;
        }
    }

    function weekdaysRegex(isStrict) {
        if (this._weekdaysParseExact) {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
            }
            if (isStrict) {
                return this._weekdaysStrictRegex;
            } else {
                return this._weekdaysRegex;
            }
        } else {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                this._weekdaysRegex = defaultWeekdaysRegex;
            }
            return this._weekdaysStrictRegex && isStrict
                ? this._weekdaysStrictRegex
                : this._weekdaysRegex;
        }
    }

    function weekdaysShortRegex(isStrict) {
        if (this._weekdaysParseExact) {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
            }
            if (isStrict) {
                return this._weekdaysShortStrictRegex;
            } else {
                return this._weekdaysShortRegex;
            }
        } else {
            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
            }
            return this._weekdaysShortStrictRegex && isStrict
                ? this._weekdaysShortStrictRegex
                : this._weekdaysShortRegex;
        }
    }

    function weekdaysMinRegex(isStrict) {
        if (this._weekdaysParseExact) {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
            }
            if (isStrict) {
                return this._weekdaysMinStrictRegex;
            } else {
                return this._weekdaysMinRegex;
            }
        } else {
            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
            }
            return this._weekdaysMinStrictRegex && isStrict
                ? this._weekdaysMinStrictRegex
                : this._weekdaysMinRegex;
        }
    }

    function computeWeekdaysParse() {
        function cmpLenRev(a, b) {
            return b.length - a.length;
        }

        var minPieces = [],
            shortPieces = [],
            longPieces = [],
            mixedPieces = [],
            i,
            mom,
            minp,
            shortp,
            longp;
        for (i = 0; i < 7; i++) {
            // make the regex if we don't have it already
            mom = createUTC([2000, 1]).day(i);
            minp = regexEscape(this.weekdaysMin(mom, ''));
            shortp = regexEscape(this.weekdaysShort(mom, ''));
            longp = regexEscape(this.weekdays(mom, ''));
            minPieces.push(minp);
            shortPieces.push(shortp);
            longPieces.push(longp);
            mixedPieces.push(minp);
            mixedPieces.push(shortp);
            mixedPieces.push(longp);
        }
        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
        // will match the longer piece.
        minPieces.sort(cmpLenRev);
        shortPieces.sort(cmpLenRev);
        longPieces.sort(cmpLenRev);
        mixedPieces.sort(cmpLenRev);

        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
        this._weekdaysShortRegex = this._weekdaysRegex;
        this._weekdaysMinRegex = this._weekdaysRegex;

        this._weekdaysStrictRegex = new RegExp(
            '^(' + longPieces.join('|') + ')',
            'i'
        );
        this._weekdaysShortStrictRegex = new RegExp(
            '^(' + shortPieces.join('|') + ')',
            'i'
        );
        this._weekdaysMinStrictRegex = new RegExp(
            '^(' + minPieces.join('|') + ')',
            'i'
        );
    }

    // FORMATTING

    function hFormat() {
        return this.hours() % 12 || 12;
    }

    function kFormat() {
        return this.hours() || 24;
    }

    addFormatToken('H', ['HH', 2], 0, 'hour');
    addFormatToken('h', ['hh', 2], 0, hFormat);
    addFormatToken('k', ['kk', 2], 0, kFormat);

    addFormatToken('hmm', 0, 0, function () {
        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
    });

    addFormatToken('hmmss', 0, 0, function () {
        return (
            '' +
            hFormat.apply(this) +
            zeroFill(this.minutes(), 2) +
            zeroFill(this.seconds(), 2)
        );
    });

    addFormatToken('Hmm', 0, 0, function () {
        return '' + this.hours() + zeroFill(this.minutes(), 2);
    });

    addFormatToken('Hmmss', 0, 0, function () {
        return (
            '' +
            this.hours() +
            zeroFill(this.minutes(), 2) +
            zeroFill(this.seconds(), 2)
        );
    });

    function meridiem(token, lowercase) {
        addFormatToken(token, 0, 0, function () {
            return this.localeData().meridiem(
                this.hours(),
                this.minutes(),
                lowercase
            );
        });
    }

    meridiem('a', true);
    meridiem('A', false);

    // ALIASES

    addUnitAlias('hour', 'h');

    // PRIORITY
    addUnitPriority('hour', 13);

    // PARSING

    function matchMeridiem(isStrict, locale) {
        return locale._meridiemParse;
    }

    addRegexToken('a', matchMeridiem);
    addRegexToken('A', matchMeridiem);
    addRegexToken('H', match1to2);
    addRegexToken('h', match1to2);
    addRegexToken('k', match1to2);
    addRegexToken('HH', match1to2, match2);
    addRegexToken('hh', match1to2, match2);
    addRegexToken('kk', match1to2, match2);

    addRegexToken('hmm', match3to4);
    addRegexToken('hmmss', match5to6);
    addRegexToken('Hmm', match3to4);
    addRegexToken('Hmmss', match5to6);

    addParseToken(['H', 'HH'], HOUR);
    addParseToken(['k', 'kk'], function (input, array, config) {
        var kInput = toInt(input);
        array[HOUR] = kInput === 24 ? 0 : kInput;
    });
    addParseToken(['a', 'A'], function (input, array, config) {
        config._isPm = config._locale.isPM(input);
        config._meridiem = input;
    });
    addParseToken(['h', 'hh'], function (input, array, config) {
        array[HOUR] = toInt(input);
        getParsingFlags(config).bigHour = true;
    });
    addParseToken('hmm', function (input, array, config) {
        var pos = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos));
        array[MINUTE] = toInt(input.substr(pos));
        getParsingFlags(config).bigHour = true;
    });
    addParseToken('hmmss', function (input, array, config) {
        var pos1 = input.length - 4,
            pos2 = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos1));
        array[MINUTE] = toInt(input.substr(pos1, 2));
        array[SECOND] = toInt(input.substr(pos2));
        getParsingFlags(config).bigHour = true;
    });
    addParseToken('Hmm', function (input, array, config) {
        var pos = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos));
        array[MINUTE] = toInt(input.substr(pos));
    });
    addParseToken('Hmmss', function (input, array, config) {
        var pos1 = input.length - 4,
            pos2 = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos1));
        array[MINUTE] = toInt(input.substr(pos1, 2));
        array[SECOND] = toInt(input.substr(pos2));
    });

    // LOCALES

    function localeIsPM(input) {
        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
        // Using charAt should be more compatible.
        return (input + '').toLowerCase().charAt(0) === 'p';
    }

    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
        // Setting the hour should keep the time, because the user explicitly
        // specified which hour they want. So trying to maintain the same hour (in
        // a new timezone) makes sense. Adding/subtracting hours does not follow
        // this rule.
        getSetHour = makeGetSet('Hours', true);

    function localeMeridiem(hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? 'pm' : 'PM';
        } else {
            return isLower ? 'am' : 'AM';
        }
    }

    var baseConfig = {
        calendar: defaultCalendar,
        longDateFormat: defaultLongDateFormat,
        invalidDate: defaultInvalidDate,
        ordinal: defaultOrdinal,
        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
        relativeTime: defaultRelativeTime,

        months: defaultLocaleMonths,
        monthsShort: defaultLocaleMonthsShort,

        week: defaultLocaleWeek,

        weekdays: defaultLocaleWeekdays,
        weekdaysMin: defaultLocaleWeekdaysMin,
        weekdaysShort: defaultLocaleWeekdaysShort,

        meridiemParse: defaultLocaleMeridiemParse,
    };

    // internal storage for locale config files
    var locales = {},
        localeFamilies = {},
        globalLocale;

    function commonPrefix(arr1, arr2) {
        var i,
            minl = Math.min(arr1.length, arr2.length);
        for (i = 0; i < minl; i += 1) {
            if (arr1[i] !== arr2[i]) {
                return i;
            }
        }
        return minl;
    }

    function normalizeLocale(key) {
        return key ? key.toLowerCase().replace('_', '-') : key;
    }

    // pick the locale from the array
    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
    function chooseLocale(names) {
        var i = 0,
            j,
            next,
            locale,
            split;

        while (i < names.length) {
            split = normalizeLocale(names[i]).split('-');
            j = split.length;
            next = normalizeLocale(names[i + 1]);
            next = next ? next.split('-') : null;
            while (j > 0) {
                locale = loadLocale(split.slice(0, j).join('-'));
                if (locale) {
                    return locale;
                }
                if (
                    next &&
                    next.length >= j &&
                    commonPrefix(split, next) >= j - 1
                ) {
                    //the next array item is better than a shallower substring of this one
                    break;
                }
                j--;
            }
            i++;
        }
        return globalLocale;
    }

    function loadLocale(name) {
        var oldLocale = null,
            aliasedRequire;
        // TODO: Find a better way to register and load all the locales in Node
        if (
            locales[name] === undefined &&
            typeof module !== 'undefined' &&
            module &&
            module.exports
        ) {
            try {
                oldLocale = globalLocale._abbr;
                aliasedRequire = require;
                aliasedRequire('./locale/' + name);
                getSetGlobalLocale(oldLocale);
            } catch (e) {
                // mark as not found to avoid repeating expensive file require call causing high CPU
                // when trying to find en-US, en_US, en-us for every format call
                locales[name] = null; // null means not found
            }
        }
        return locales[name];
    }

    // This function will load locale and then set the global locale.  If
    // no arguments are passed in, it will simply return the current global
    // locale key.
    function getSetGlobalLocale(key, values) {
        var data;
        if (key) {
            if (isUndefined(values)) {
                data = getLocale(key);
            } else {
                data = defineLocale(key, values);
            }

            if (data) {
                // moment.duration._locale = moment._locale = data;
                globalLocale = data;
            } else {
                if (typeof console !== 'undefined' && console.warn) {
                    //warn user if arguments are passed but the locale could not be set
                    console.warn(
                        'Locale ' + key + ' not found. Did you forget to load it?'
                    );
                }
            }
        }

        return globalLocale._abbr;
    }

    function defineLocale(name, config) {
        if (config !== null) {
            var locale,
                parentConfig = baseConfig;
            config.abbr = name;
            if (locales[name] != null) {
                deprecateSimple(
                    'defineLocaleOverride',
                    'use moment.updateLocale(localeName, config) to change ' +
                        'an existing locale. moment.defineLocale(localeName, ' +
                        'config) should only be used for creating a new locale ' +
                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
                );
                parentConfig = locales[name]._config;
            } else if (config.parentLocale != null) {
                if (locales[config.parentLocale] != null) {
                    parentConfig = locales[config.parentLocale]._config;
                } else {
                    locale = loadLocale(config.parentLocale);
                    if (locale != null) {
                        parentConfig = locale._config;
                    } else {
                        if (!localeFamilies[config.parentLocale]) {
                            localeFamilies[config.parentLocale] = [];
                        }
                        localeFamilies[config.parentLocale].push({
                            name: name,
                            config: config,
                        });
                        return null;
                    }
                }
            }
            locales[name] = new Locale(mergeConfigs(parentConfig, config));

            if (localeFamilies[name]) {
                localeFamilies[name].forEach(function (x) {
                    defineLocale(x.name, x.config);
                });
            }

            // backwards compat for now: also set the locale
            // make sure we set the locale AFTER all child locales have been
            // created, so we won't end up with the child locale set.
            getSetGlobalLocale(name);

            return locales[name];
        } else {
            // useful for testing
            delete locales[name];
            return null;
        }
    }

    function updateLocale(name, config) {
        if (config != null) {
            var locale,
                tmpLocale,
                parentConfig = baseConfig;

            if (locales[name] != null && locales[name].parentLocale != null) {
                // Update existing child locale in-place to avoid memory-leaks
                locales[name].set(mergeConfigs(locales[name]._config, config));
            } else {
                // MERGE
                tmpLocale = loadLocale(name);
                if (tmpLocale != null) {
                    parentConfig = tmpLocale._config;
                }
                config = mergeConfigs(parentConfig, config);
                if (tmpLocale == null) {
                    // updateLocale is called for creating a new locale
                    // Set abbr so it will have a name (getters return
                    // undefined otherwise).
                    config.abbr = name;
                }
                locale = new Locale(config);
                locale.parentLocale = locales[name];
                locales[name] = locale;
            }

            // backwards compat for now: also set the locale
            getSetGlobalLocale(name);
        } else {
            // pass null for config to unupdate, useful for tests
            if (locales[name] != null) {
                if (locales[name].parentLocale != null) {
                    locales[name] = locales[name].parentLocale;
                    if (name === getSetGlobalLocale()) {
                        getSetGlobalLocale(name);
                    }
                } else if (locales[name] != null) {
                    delete locales[name];
                }
            }
        }
        return locales[name];
    }

    // returns locale data
    function getLocale(key) {
        var locale;

        if (key && key._locale && key._locale._abbr) {
            key = key._locale._abbr;
        }

        if (!key) {
            return globalLocale;
        }

        if (!isArray(key)) {
            //short-circuit everything else
            locale = loadLocale(key);
            if (locale) {
                return locale;
            }
            key = [key];
        }

        return chooseLocale(key);
    }

    function listLocales() {
        return keys(locales);
    }

    function checkOverflow(m) {
        var overflow,
            a = m._a;

        if (a && getParsingFlags(m).overflow === -2) {
            overflow =
                a[MONTH] < 0 || a[MONTH] > 11
                    ? MONTH
                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
                    ? DATE
                    : a[HOUR] < 0 ||
                      a[HOUR] > 24 ||
                      (a[HOUR] === 24 &&
                          (a[MINUTE] !== 0 ||
                              a[SECOND] !== 0 ||
                              a[MILLISECOND] !== 0))
                    ? HOUR
                    : a[MINUTE] < 0 || a[MINUTE] > 59
                    ? MINUTE
                    : a[SECOND] < 0 || a[SECOND] > 59
                    ? SECOND
                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
                    ? MILLISECOND
                    : -1;

            if (
                getParsingFlags(m)._overflowDayOfYear &&
                (overflow < YEAR || overflow > DATE)
            ) {
                overflow = DATE;
            }
            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
                overflow = WEEK;
            }
            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
                overflow = WEEKDAY;
            }

            getParsingFlags(m).overflow = overflow;
        }

        return m;
    }

    // iso 8601 regex
    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
    var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
        basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
        tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
        isoDates = [
            ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
            ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
            ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
            ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
            ['YYYY-DDD', /\d{4}-\d{3}/],
            ['YYYY-MM', /\d{4}-\d\d/, false],
            ['YYYYYYMMDD', /[+-]\d{10}/],
            ['YYYYMMDD', /\d{8}/],
            ['GGGG[W]WWE', /\d{4}W\d{3}/],
            ['GGGG[W]WW', /\d{4}W\d{2}/, false],
            ['YYYYDDD', /\d{7}/],
            ['YYYYMM', /\d{6}/, false],
            ['YYYY', /\d{4}/, false],
        ],
        // iso time formats and regexes
        isoTimes = [
            ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
            ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
            ['HH:mm:ss', /\d\d:\d\d:\d\d/],
            ['HH:mm', /\d\d:\d\d/],
            ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
            ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
            ['HHmmss', /\d\d\d\d\d\d/],
            ['HHmm', /\d\d\d\d/],
            ['HH', /\d\d/],
        ],
        aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
        rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
        obsOffsets = {
            UT: 0,
            GMT: 0,
            EDT: -4 * 60,
            EST: -5 * 60,
            CDT: -5 * 60,
            CST: -6 * 60,
            MDT: -6 * 60,
            MST: -7 * 60,
            PDT: -7 * 60,
            PST: -8 * 60,
        };

    // date from iso format
    function configFromISO(config) {
        var i,
            l,
            string = config._i,
            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
            allowTime,
            dateFormat,
            timeFormat,
            tzFormat;

        if (match) {
            getParsingFlags(config).iso = true;

            for (i = 0, l = isoDates.length; i < l; i++) {
                if (isoDates[i][1].exec(match[1])) {
                    dateFormat = isoDates[i][0];
                    allowTime = isoDates[i][2] !== false;
                    break;
                }
            }
            if (dateFormat == null) {
                config._isValid = false;
                return;
            }
            if (match[3]) {
                for (i = 0, l = isoTimes.length; i < l; i++) {
                    if (isoTimes[i][1].exec(match[3])) {
                        // match[2] should be 'T' or space
                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
                        break;
                    }
                }
                if (timeFormat == null) {
                    config._isValid = false;
                    return;
                }
            }
            if (!allowTime && timeFormat != null) {
                config._isValid = false;
                return;
            }
            if (match[4]) {
                if (tzRegex.exec(match[4])) {
                    tzFormat = 'Z';
                } else {
                    config._isValid = false;
                    return;
                }
            }
            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
            configFromStringAndFormat(config);
        } else {
            config._isValid = false;
        }
    }

    function extractFromRFC2822Strings(
        yearStr,
        monthStr,
        dayStr,
        hourStr,
        minuteStr,
        secondStr
    ) {
        var result = [
            untruncateYear(yearStr),
            defaultLocaleMonthsShort.indexOf(monthStr),
            parseInt(dayStr, 10),
            parseInt(hourStr, 10),
            parseInt(minuteStr, 10),
        ];

        if (secondStr) {
            result.push(parseInt(secondStr, 10));
        }

        return result;
    }

    function untruncateYear(yearStr) {
        var year = parseInt(yearStr, 10);
        if (year <= 49) {
            return 2000 + year;
        } else if (year <= 999) {
            return 1900 + year;
        }
        return year;
    }

    function preprocessRFC2822(s) {
        // Remove comments and folding whitespace and replace multiple-spaces with a single space
        return s
            .replace(/\([^)]*\)|[\n\t]/g, ' ')
            .replace(/(\s\s+)/g, ' ')
            .replace(/^\s\s*/, '')
            .replace(/\s\s*$/, '');
    }

    function checkWeekday(weekdayStr, parsedInput, config) {
        if (weekdayStr) {
            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
                weekdayActual = new Date(
                    parsedInput[0],
                    parsedInput[1],
                    parsedInput[2]
                ).getDay();
            if (weekdayProvided !== weekdayActual) {
                getParsingFlags(config).weekdayMismatch = true;
                config._isValid = false;
                return false;
            }
        }
        return true;
    }

    function calculateOffset(obsOffset, militaryOffset, numOffset) {
        if (obsOffset) {
            return obsOffsets[obsOffset];
        } else if (militaryOffset) {
            // the only allowed military tz is Z
            return 0;
        } else {
            var hm = parseInt(numOffset, 10),
                m = hm % 100,
                h = (hm - m) / 100;
            return h * 60 + m;
        }
    }

    // date and time from ref 2822 format
    function configFromRFC2822(config) {
        var match = rfc2822.exec(preprocessRFC2822(config._i)),
            parsedArray;
        if (match) {
            parsedArray = extractFromRFC2822Strings(
                match[4],
                match[3],
                match[2],
                match[5],
                match[6],
                match[7]
            );
            if (!checkWeekday(match[1], parsedArray, config)) {
                return;
            }

            config._a = parsedArray;
            config._tzm = calculateOffset(match[8], match[9], match[10]);

            config._d = createUTCDate.apply(null, config._a);
            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);

            getParsingFlags(config).rfc2822 = true;
        } else {
            config._isValid = false;
        }
    }

    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
    function configFromString(config) {
        var matched = aspNetJsonRegex.exec(config._i);
        if (matched !== null) {
            config._d = new Date(+matched[1]);
            return;
        }

        configFromISO(config);
        if (config._isValid === false) {
            delete config._isValid;
        } else {
            return;
        }

        configFromRFC2822(config);
        if (config._isValid === false) {
            delete config._isValid;
        } else {
            return;
        }

        if (config._strict) {
            config._isValid = false;
        } else {
            // Final attempt, use Input Fallback
            hooks.createFromInputFallback(config);
        }
    }

    hooks.createFromInputFallback = deprecate(
        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
        function (config) {
            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
        }
    );

    // Pick the first defined of two or three arguments.
    function defaults(a, b, c) {
        if (a != null) {
            return a;
        }
        if (b != null) {
            return b;
        }
        return c;
    }

    function currentDateArray(config) {
        // hooks is actually the exported moment object
        var nowValue = new Date(hooks.now());
        if (config._useUTC) {
            return [
                nowValue.getUTCFullYear(),
                nowValue.getUTCMonth(),
                nowValue.getUTCDate(),
            ];
        }
        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
    }

    // convert an array to a date.
    // the array should mirror the parameters below
    // note: all values past the year are optional and will default to the lowest possible value.
    // [year, month, day , hour, minute, second, millisecond]
    function configFromArray(config) {
        var i,
            date,
            input = [],
            currentDate,
            expectedWeekday,
            yearToUse;

        if (config._d) {
            return;
        }

        currentDate = currentDateArray(config);

        //compute day of the year from weeks and weekdays
        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
            dayOfYearFromWeekInfo(config);
        }

        //if the day of the year is set, figure out what it is
        if (config._dayOfYear != null) {
            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);

            if (
                config._dayOfYear > daysInYear(yearToUse) ||
                config._dayOfYear === 0
            ) {
                getParsingFlags(config)._overflowDayOfYear = true;
            }

            date = createUTCDate(yearToUse, 0, config._dayOfYear);
            config._a[MONTH] = date.getUTCMonth();
            config._a[DATE] = date.getUTCDate();
        }

        // Default to current date.
        // * if no year, month, day of month are given, default to today
        // * if day of month is given, default month and year
        // * if month is given, default only year
        // * if year is given, don't default anything
        for (i = 0; i < 3 && config._a[i] == null; ++i) {
            config._a[i] = input[i] = currentDate[i];
        }

        // Zero out whatever was not defaulted, including time
        for (; i < 7; i++) {
            config._a[i] = input[i] =
                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
        }

        // Check for 24:00:00.000
        if (
            config._a[HOUR] === 24 &&
            config._a[MINUTE] === 0 &&
            config._a[SECOND] === 0 &&
            config._a[MILLISECOND] === 0
        ) {
            config._nextDay = true;
            config._a[HOUR] = 0;
        }

        config._d = (config._useUTC ? createUTCDate : createDate).apply(
            null,
            input
        );
        expectedWeekday = config._useUTC
            ? config._d.getUTCDay()
            : config._d.getDay();

        // Apply timezone offset from input. The actual utcOffset can be changed
        // with parseZone.
        if (config._tzm != null) {
            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
        }

        if (config._nextDay) {
            config._a[HOUR] = 24;
        }

        // check for mismatching day of week
        if (
            config._w &&
            typeof config._w.d !== 'undefined' &&
            config._w.d !== expectedWeekday
        ) {
            getParsingFlags(config).weekdayMismatch = true;
        }
    }

    function dayOfYearFromWeekInfo(config) {
        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;

        w = config._w;
        if (w.GG != null || w.W != null || w.E != null) {
            dow = 1;
            doy = 4;

            // TODO: We need to take the current isoWeekYear, but that depends on
            // how we interpret now (local, utc, fixed offset). So create
            // a now version of current config (take local/utc/offset flags, and
            // create now).
            weekYear = defaults(
                w.GG,
                config._a[YEAR],
                weekOfYear(createLocal(), 1, 4).year
            );
            week = defaults(w.W, 1);
            weekday = defaults(w.E, 1);
            if (weekday < 1 || weekday > 7) {
                weekdayOverflow = true;
            }
        } else {
            dow = config._locale._week.dow;
            doy = config._locale._week.doy;

            curWeek = weekOfYear(createLocal(), dow, doy);

            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);

            // Default to current week.
            week = defaults(w.w, curWeek.week);

            if (w.d != null) {
                // weekday -- low day numbers are considered next week
                weekday = w.d;
                if (weekday < 0 || weekday > 6) {
                    weekdayOverflow = true;
                }
            } else if (w.e != null) {
                // local weekday -- counting starts from beginning of week
                weekday = w.e + dow;
                if (w.e < 0 || w.e > 6) {
                    weekdayOverflow = true;
                }
            } else {
                // default to beginning of week
                weekday = dow;
            }
        }
        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
            getParsingFlags(config)._overflowWeeks = true;
        } else if (weekdayOverflow != null) {
            getParsingFlags(config)._overflowWeekday = true;
        } else {
            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
            config._a[YEAR] = temp.year;
            config._dayOfYear = temp.dayOfYear;
        }
    }

    // constant that refers to the ISO standard
    hooks.ISO_8601 = function () {};

    // constant that refers to the RFC 2822 form
    hooks.RFC_2822 = function () {};

    // date from string and format string
    function configFromStringAndFormat(config) {
        // TODO: Move this to another part of the creation flow to prevent circular deps
        if (config._f === hooks.ISO_8601) {
            configFromISO(config);
            return;
        }
        if (config._f === hooks.RFC_2822) {
            configFromRFC2822(config);
            return;
        }
        config._a = [];
        getParsingFlags(config).empty = true;

        // This array is used to make a Date, either with `new Date` or `Date.UTC`
        var string = '' + config._i,
            i,
            parsedInput,
            tokens,
            token,
            skipped,
            stringLength = string.length,
            totalParsedInputLength = 0,
            era;

        tokens =
            expandFormat(config._f, config._locale).match(formattingTokens) || [];

        for (i = 0; i < tokens.length; i++) {
            token = tokens[i];
            parsedInput = (string.match(getParseRegexForToken(token, config)) ||
                [])[0];
            if (parsedInput) {
                skipped = string.substr(0, string.indexOf(parsedInput));
                if (skipped.length > 0) {
                    getParsingFlags(config).unusedInput.push(skipped);
                }
                string = string.slice(
                    string.indexOf(parsedInput) + parsedInput.length
                );
                totalParsedInputLength += parsedInput.length;
            }
            // don't parse if it's not a known token
            if (formatTokenFunctions[token]) {
                if (parsedInput) {
                    getParsingFlags(config).empty = false;
                } else {
                    getParsingFlags(config).unusedTokens.push(token);
                }
                addTimeToArrayFromToken(token, parsedInput, config);
            } else if (config._strict && !parsedInput) {
                getParsingFlags(config).unusedTokens.push(token);
            }
        }

        // add remaining unparsed input length to the string
        getParsingFlags(config).charsLeftOver =
            stringLength - totalParsedInputLength;
        if (string.length > 0) {
            getParsingFlags(config).unusedInput.push(string);
        }

        // clear _12h flag if hour is <= 12
        if (
            config._a[HOUR] <= 12 &&
            getParsingFlags(config).bigHour === true &&
            config._a[HOUR] > 0
        ) {
            getParsingFlags(config).bigHour = undefined;
        }

        getParsingFlags(config).parsedDateParts = config._a.slice(0);
        getParsingFlags(config).meridiem = config._meridiem;
        // handle meridiem
        config._a[HOUR] = meridiemFixWrap(
            config._locale,
            config._a[HOUR],
            config._meridiem
        );

        // handle era
        era = getParsingFlags(config).era;
        if (era !== null) {
            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
        }

        configFromArray(config);
        checkOverflow(config);
    }

    function meridiemFixWrap(locale, hour, meridiem) {
        var isPm;

        if (meridiem == null) {
            // nothing to do
            return hour;
        }
        if (locale.meridiemHour != null) {
            return locale.meridiemHour(hour, meridiem);
        } else if (locale.isPM != null) {
            // Fallback
            isPm = locale.isPM(meridiem);
            if (isPm && hour < 12) {
                hour += 12;
            }
            if (!isPm && hour === 12) {
                hour = 0;
            }
            return hour;
        } else {
            // this is not supposed to happen
            return hour;
        }
    }

    // date from string and array of format strings
    function configFromStringAndArray(config) {
        var tempConfig,
            bestMoment,
            scoreToBeat,
            i,
            currentScore,
            validFormatFound,
            bestFormatIsValid = false;

        if (config._f.length === 0) {
            getParsingFlags(config).invalidFormat = true;
            config._d = new Date(NaN);
            return;
        }

        for (i = 0; i < config._f.length; i++) {
            currentScore = 0;
            validFormatFound = false;
            tempConfig = copyConfig({}, config);
            if (config._useUTC != null) {
                tempConfig._useUTC = config._useUTC;
            }
            tempConfig._f = config._f[i];
            configFromStringAndFormat(tempConfig);

            if (isValid(tempConfig)) {
                validFormatFound = true;
            }

            // if there is any input that was not parsed add a penalty for that format
            currentScore += getParsingFlags(tempConfig).charsLeftOver;

            //or tokens
            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;

            getParsingFlags(tempConfig).score = currentScore;

            if (!bestFormatIsValid) {
                if (
                    scoreToBeat == null ||
                    currentScore < scoreToBeat ||
                    validFormatFound
                ) {
                    scoreToBeat = currentScore;
                    bestMoment = tempConfig;
                    if (validFormatFound) {
                        bestFormatIsValid = true;
                    }
                }
            } else {
                if (currentScore < scoreToBeat) {
                    scoreToBeat = currentScore;
                    bestMoment = tempConfig;
                }
            }
        }

        extend(config, bestMoment || tempConfig);
    }

    function configFromObject(config) {
        if (config._d) {
            return;
        }

        var i = normalizeObjectUnits(config._i),
            dayOrDate = i.day === undefined ? i.date : i.day;
        config._a = map(
            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
            function (obj) {
                return obj && parseInt(obj, 10);
            }
        );

        configFromArray(config);
    }

    function createFromConfig(config) {
        var res = new Moment(checkOverflow(prepareConfig(config)));
        if (res._nextDay) {
            // Adding is smart enough around DST
            res.add(1, 'd');
            res._nextDay = undefined;
        }

        return res;
    }

    function prepareConfig(config) {
        var input = config._i,
            format = config._f;

        config._locale = config._locale || getLocale(config._l);

        if (input === null || (format === undefined && input === '')) {
            return createInvalid({ nullInput: true });
        }

        if (typeof input === 'string') {
            config._i = input = config._locale.preparse(input);
        }

        if (isMoment(input)) {
            return new Moment(checkOverflow(input));
        } else if (isDate(input)) {
            config._d = input;
        } else if (isArray(format)) {
            configFromStringAndArray(config);
        } else if (format) {
            configFromStringAndFormat(config);
        } else {
            configFromInput(config);
        }

        if (!isValid(config)) {
            config._d = null;
        }

        return config;
    }

    function configFromInput(config) {
        var input = config._i;
        if (isUndefined(input)) {
            config._d = new Date(hooks.now());
        } else if (isDate(input)) {
            config._d = new Date(input.valueOf());
        } else if (typeof input === 'string') {
            configFromString(config);
        } else if (isArray(input)) {
            config._a = map(input.slice(0), function (obj) {
                return parseInt(obj, 10);
            });
            configFromArray(config);
        } else if (isObject(input)) {
            configFromObject(config);
        } else if (isNumber(input)) {
            // from milliseconds
            config._d = new Date(input);
        } else {
            hooks.createFromInputFallback(config);
        }
    }

    function createLocalOrUTC(input, format, locale, strict, isUTC) {
        var c = {};

        if (format === true || format === false) {
            strict = format;
            format = undefined;
        }

        if (locale === true || locale === false) {
            strict = locale;
            locale = undefined;
        }

        if (
            (isObject(input) && isObjectEmpty(input)) ||
            (isArray(input) && input.length === 0)
        ) {
            input = undefined;
        }
        // object construction must be done this way.
        // https://github.com/moment/moment/issues/1423
        c._isAMomentObject = true;
        c._useUTC = c._isUTC = isUTC;
        c._l = locale;
        c._i = input;
        c._f = format;
        c._strict = strict;

        return createFromConfig(c);
    }

    function createLocal(input, format, locale, strict) {
        return createLocalOrUTC(input, format, locale, strict, false);
    }

    var prototypeMin = deprecate(
            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
            function () {
                var other = createLocal.apply(null, arguments);
                if (this.isValid() && other.isValid()) {
                    return other < this ? this : other;
                } else {
                    return createInvalid();
                }
            }
        ),
        prototypeMax = deprecate(
            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
            function () {
                var other = createLocal.apply(null, arguments);
                if (this.isValid() && other.isValid()) {
                    return other > this ? this : other;
                } else {
                    return createInvalid();
                }
            }
        );

    // Pick a moment m from moments so that m[fn](other) is true for all
    // other. This relies on the function fn to be transitive.
    //
    // moments should either be an array of moment objects or an array, whose
    // first element is an array of moment objects.
    function pickBy(fn, moments) {
        var res, i;
        if (moments.length === 1 && isArray(moments[0])) {
            moments = moments[0];
        }
        if (!moments.length) {
            return createLocal();
        }
        res = moments[0];
        for (i = 1; i < moments.length; ++i) {
            if (!moments[i].isValid() || moments[i][fn](res)) {
                res = moments[i];
            }
        }
        return res;
    }

    // TODO: Use [].sort instead?
    function min() {
        var args = [].slice.call(arguments, 0);

        return pickBy('isBefore', args);
    }

    function max() {
        var args = [].slice.call(arguments, 0);

        return pickBy('isAfter', args);
    }

    var now = function () {
        return Date.now ? Date.now() : +new Date();
    };

    var ordering = [
        'year',
        'quarter',
        'month',
        'week',
        'day',
        'hour',
        'minute',
        'second',
        'millisecond',
    ];

    function isDurationValid(m) {
        var key,
            unitHasDecimal = false,
            i;
        for (key in m) {
            if (
                hasOwnProp(m, key) &&
                !(
                    indexOf.call(ordering, key) !== -1 &&
                    (m[key] == null || !isNaN(m[key]))
                )
            ) {
                return false;
            }
        }

        for (i = 0; i < ordering.length; ++i) {
            if (m[ordering[i]]) {
                if (unitHasDecimal) {
                    return false; // only allow non-integers for smallest unit
                }
                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
                    unitHasDecimal = true;
                }
            }
        }

        return true;
    }

    function isValid$1() {
        return this._isValid;
    }

    function createInvalid$1() {
        return createDuration(NaN);
    }

    function Duration(duration) {
        var normalizedInput = normalizeObjectUnits(duration),
            years = normalizedInput.year || 0,
            quarters = normalizedInput.quarter || 0,
            months = normalizedInput.month || 0,
            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
            days = normalizedInput.day || 0,
            hours = normalizedInput.hour || 0,
            minutes = normalizedInput.minute || 0,
            seconds = normalizedInput.second || 0,
            milliseconds = normalizedInput.millisecond || 0;

        this._isValid = isDurationValid(normalizedInput);

        // representation for dateAddRemove
        this._milliseconds =
            +milliseconds +
            seconds * 1e3 + // 1000
            minutes * 6e4 + // 1000 * 60
            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
        // Because of dateAddRemove treats 24 hours as different from a
        // day when working around DST, we need to store them separately
        this._days = +days + weeks * 7;
        // It is impossible to translate months into days without knowing
        // which months you are are talking about, so we have to store
        // it separately.
        this._months = +months + quarters * 3 + years * 12;

        this._data = {};

        this._locale = getLocale();

        this._bubble();
    }

    function isDuration(obj) {
        return obj instanceof Duration;
    }

    function absRound(number) {
        if (number < 0) {
            return Math.round(-1 * number) * -1;
        } else {
            return Math.round(number);
        }
    }

    // compare two arrays, return the number of differences
    function compareArrays(array1, array2, dontConvert) {
        var len = Math.min(array1.length, array2.length),
            lengthDiff = Math.abs(array1.length - array2.length),
            diffs = 0,
            i;
        for (i = 0; i < len; i++) {
            if (
                (dontConvert && array1[i] !== array2[i]) ||
                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
            ) {
                diffs++;
            }
        }
        return diffs + lengthDiff;
    }

    // FORMATTING

    function offset(token, separator) {
        addFormatToken(token, 0, 0, function () {
            var offset = this.utcOffset(),
                sign = '+';
            if (offset < 0) {
                offset = -offset;
                sign = '-';
            }
            return (
                sign +
                zeroFill(~~(offset / 60), 2) +
                separator +
                zeroFill(~~offset % 60, 2)
            );
        });
    }

    offset('Z', ':');
    offset('ZZ', '');

    // PARSING

    addRegexToken('Z', matchShortOffset);
    addRegexToken('ZZ', matchShortOffset);
    addParseToken(['Z', 'ZZ'], function (input, array, config) {
        config._useUTC = true;
        config._tzm = offsetFromString(matchShortOffset, input);
    });

    // HELPERS

    // timezone chunker
    // '+10:00' > ['10',  '00']
    // '-1530'  > ['-15', '30']
    var chunkOffset = /([\+\-]|\d\d)/gi;

    function offsetFromString(matcher, string) {
        var matches = (string || '').match(matcher),
            chunk,
            parts,
            minutes;

        if (matches === null) {
            return null;
        }

        chunk = matches[matches.length - 1] || [];
        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
        minutes = +(parts[1] * 60) + toInt(parts[2]);

        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
    }

    // Return a moment from input, that is local/utc/zone equivalent to model.
    function cloneWithOffset(input, model) {
        var res, diff;
        if (model._isUTC) {
            res = model.clone();
            diff =
                (isMoment(input) || isDate(input)
                    ? input.valueOf()
                    : createLocal(input).valueOf()) - res.valueOf();
            // Use low-level api, because this fn is low-level api.
            res._d.setTime(res._d.valueOf() + diff);
            hooks.updateOffset(res, false);
            return res;
        } else {
            return createLocal(input).local();
        }
    }

    function getDateOffset(m) {
        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
        // https://github.com/moment/moment/pull/1871
        return -Math.round(m._d.getTimezoneOffset());
    }

    // HOOKS

    // This function will be called whenever a moment is mutated.
    // It is intended to keep the offset in sync with the timezone.
    hooks.updateOffset = function () {};

    // MOMENTS

    // keepLocalTime = true means only change the timezone, without
    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
    // +0200, so we adjust the time as needed, to be valid.
    //
    // Keeping the time actually adds/subtracts (one hour)
    // from the actual represented time. That is why we call updateOffset
    // a second time. In case it wants us to change the offset again
    // _changeInProgress == true case, then we have to adjust, because
    // there is no such time in the given timezone.
    function getSetOffset(input, keepLocalTime, keepMinutes) {
        var offset = this._offset || 0,
            localAdjust;
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }
        if (input != null) {
            if (typeof input === 'string') {
                input = offsetFromString(matchShortOffset, input);
                if (input === null) {
                    return this;
                }
            } else if (Math.abs(input) < 16 && !keepMinutes) {
                input = input * 60;
            }
            if (!this._isUTC && keepLocalTime) {
                localAdjust = getDateOffset(this);
            }
            this._offset = input;
            this._isUTC = true;
            if (localAdjust != null) {
                this.add(localAdjust, 'm');
            }
            if (offset !== input) {
                if (!keepLocalTime || this._changeInProgress) {
                    addSubtract(
                        this,
                        createDuration(input - offset, 'm'),
                        1,
                        false
                    );
                } else if (!this._changeInProgress) {
                    this._changeInProgress = true;
                    hooks.updateOffset(this, true);
                    this._changeInProgress = null;
                }
            }
            return this;
        } else {
            return this._isUTC ? offset : getDateOffset(this);
        }
    }

    function getSetZone(input, keepLocalTime) {
        if (input != null) {
            if (typeof input !== 'string') {
                input = -input;
            }

            this.utcOffset(input, keepLocalTime);

            return this;
        } else {
            return -this.utcOffset();
        }
    }

    function setOffsetToUTC(keepLocalTime) {
        return this.utcOffset(0, keepLocalTime);
    }

    function setOffsetToLocal(keepLocalTime) {
        if (this._isUTC) {
            this.utcOffset(0, keepLocalTime);
            this._isUTC = false;

            if (keepLocalTime) {
                this.subtract(getDateOffset(this), 'm');
            }
        }
        return this;
    }

    function setOffsetToParsedOffset() {
        if (this._tzm != null) {
            this.utcOffset(this._tzm, false, true);
        } else if (typeof this._i === 'string') {
            var tZone = offsetFromString(matchOffset, this._i);
            if (tZone != null) {
                this.utcOffset(tZone);
            } else {
                this.utcOffset(0, true);
            }
        }
        return this;
    }

    function hasAlignedHourOffset(input) {
        if (!this.isValid()) {
            return false;
        }
        input = input ? createLocal(input).utcOffset() : 0;

        return (this.utcOffset() - input) % 60 === 0;
    }

    function isDaylightSavingTime() {
        return (
            this.utcOffset() > this.clone().month(0).utcOffset() ||
            this.utcOffset() > this.clone().month(5).utcOffset()
        );
    }

    function isDaylightSavingTimeShifted() {
        if (!isUndefined(this._isDSTShifted)) {
            return this._isDSTShifted;
        }

        var c = {},
            other;

        copyConfig(c, this);
        c = prepareConfig(c);

        if (c._a) {
            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
            this._isDSTShifted =
                this.isValid() && compareArrays(c._a, other.toArray()) > 0;
        } else {
            this._isDSTShifted = false;
        }

        return this._isDSTShifted;
    }

    function isLocal() {
        return this.isValid() ? !this._isUTC : false;
    }

    function isUtcOffset() {
        return this.isValid() ? this._isUTC : false;
    }

    function isUtc() {
        return this.isValid() ? this._isUTC && this._offset === 0 : false;
    }

    // ASP.NET json date format regex
    var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
        // and further modified to allow for strings containing both week and day
        isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;

    function createDuration(input, key) {
        var duration = input,
            // matching against regexp is expensive, do it on demand
            match = null,
            sign,
            ret,
            diffRes;

        if (isDuration(input)) {
            duration = {
                ms: input._milliseconds,
                d: input._days,
                M: input._months,
            };
        } else if (isNumber(input) || !isNaN(+input)) {
            duration = {};
            if (key) {
                duration[key] = +input;
            } else {
                duration.milliseconds = +input;
            }
        } else if ((match = aspNetRegex.exec(input))) {
            sign = match[1] === '-' ? -1 : 1;
            duration = {
                y: 0,
                d: toInt(match[DATE]) * sign,
                h: toInt(match[HOUR]) * sign,
                m: toInt(match[MINUTE]) * sign,
                s: toInt(match[SECOND]) * sign,
                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
            };
        } else if ((match = isoRegex.exec(input))) {
            sign = match[1] === '-' ? -1 : 1;
            duration = {
                y: parseIso(match[2], sign),
                M: parseIso(match[3], sign),
                w: parseIso(match[4], sign),
                d: parseIso(match[5], sign),
                h: parseIso(match[6], sign),
                m: parseIso(match[7], sign),
                s: parseIso(match[8], sign),
            };
        } else if (duration == null) {
            // checks for null or undefined
            duration = {};
        } else if (
            typeof duration === 'object' &&
            ('from' in duration || 'to' in duration)
        ) {
            diffRes = momentsDifference(
                createLocal(duration.from),
                createLocal(duration.to)
            );

            duration = {};
            duration.ms = diffRes.milliseconds;
            duration.M = diffRes.months;
        }

        ret = new Duration(duration);

        if (isDuration(input) && hasOwnProp(input, '_locale')) {
            ret._locale = input._locale;
        }

        if (isDuration(input) && hasOwnProp(input, '_isValid')) {
            ret._isValid = input._isValid;
        }

        return ret;
    }

    createDuration.fn = Duration.prototype;
    createDuration.invalid = createInvalid$1;

    function parseIso(inp, sign) {
        // We'd normally use ~~inp for this, but unfortunately it also
        // converts floats to ints.
        // inp may be undefined, so careful calling replace on it.
        var res = inp && parseFloat(inp.replace(',', '.'));
        // apply sign while we're at it
        return (isNaN(res) ? 0 : res) * sign;
    }

    function positiveMomentsDifference(base, other) {
        var res = {};

        res.months =
            other.month() - base.month() + (other.year() - base.year()) * 12;
        if (base.clone().add(res.months, 'M').isAfter(other)) {
            --res.months;
        }

        res.milliseconds = +other - +base.clone().add(res.months, 'M');

        return res;
    }

    function momentsDifference(base, other) {
        var res;
        if (!(base.isValid() && other.isValid())) {
            return { milliseconds: 0, months: 0 };
        }

        other = cloneWithOffset(other, base);
        if (base.isBefore(other)) {
            res = positiveMomentsDifference(base, other);
        } else {
            res = positiveMomentsDifference(other, base);
            res.milliseconds = -res.milliseconds;
            res.months = -res.months;
        }

        return res;
    }

    // TODO: remove 'name' arg after deprecation is removed
    function createAdder(direction, name) {
        return function (val, period) {
            var dur, tmp;
            //invert the arguments, but complain about it
            if (period !== null && !isNaN(+period)) {
                deprecateSimple(
                    name,
                    'moment().' +
                        name +
                        '(period, number) is deprecated. Please use moment().' +
                        name +
                        '(number, period). ' +
                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
                );
                tmp = val;
                val = period;
                period = tmp;
            }

            dur = createDuration(val, period);
            addSubtract(this, dur, direction);
            return this;
        };
    }

    function addSubtract(mom, duration, isAdding, updateOffset) {
        var milliseconds = duration._milliseconds,
            days = absRound(duration._days),
            months = absRound(duration._months);

        if (!mom.isValid()) {
            // No op
            return;
        }

        updateOffset = updateOffset == null ? true : updateOffset;

        if (months) {
            setMonth(mom, get(mom, 'Month') + months * isAdding);
        }
        if (days) {
            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
        }
        if (milliseconds) {
            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
        }
        if (updateOffset) {
            hooks.updateOffset(mom, days || months);
        }
    }

    var add = createAdder(1, 'add'),
        subtract = createAdder(-1, 'subtract');

    function isString(input) {
        return typeof input === 'string' || input instanceof String;
    }

    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
    function isMomentInput(input) {
        return (
            isMoment(input) ||
            isDate(input) ||
            isString(input) ||
            isNumber(input) ||
            isNumberOrStringArray(input) ||
            isMomentInputObject(input) ||
            input === null ||
            input === undefined
        );
    }

    function isMomentInputObject(input) {
        var objectTest = isObject(input) && !isObjectEmpty(input),
            propertyTest = false,
            properties = [
                'years',
                'year',
                'y',
                'months',
                'month',
                'M',
                'days',
                'day',
                'd',
                'dates',
                'date',
                'D',
                'hours',
                'hour',
                'h',
                'minutes',
                'minute',
                'm',
                'seconds',
                'second',
                's',
                'milliseconds',
                'millisecond',
                'ms',
            ],
            i,
            property;

        for (i = 0; i < properties.length; i += 1) {
            property = properties[i];
            propertyTest = propertyTest || hasOwnProp(input, property);
        }

        return objectTest && propertyTest;
    }

    function isNumberOrStringArray(input) {
        var arrayTest = isArray(input),
            dataTypeTest = false;
        if (arrayTest) {
            dataTypeTest =
                input.filter(function (item) {
                    return !isNumber(item) && isString(input);
                }).length === 0;
        }
        return arrayTest && dataTypeTest;
    }

    function isCalendarSpec(input) {
        var objectTest = isObject(input) && !isObjectEmpty(input),
            propertyTest = false,
            properties = [
                'sameDay',
                'nextDay',
                'lastDay',
                'nextWeek',
                'lastWeek',
                'sameElse',
            ],
            i,
            property;

        for (i = 0; i < properties.length; i += 1) {
            property = properties[i];
            propertyTest = propertyTest || hasOwnProp(input, property);
        }

        return objectTest && propertyTest;
    }

    function getCalendarFormat(myMoment, now) {
        var diff = myMoment.diff(now, 'days', true);
        return diff < -6
            ? 'sameElse'
            : diff < -1
            ? 'lastWeek'
            : diff < 0
            ? 'lastDay'
            : diff < 1
            ? 'sameDay'
            : diff < 2
            ? 'nextDay'
            : diff < 7
            ? 'nextWeek'
            : 'sameElse';
    }

    function calendar$1(time, formats) {
        // Support for single parameter, formats only overload to the calendar function
        if (arguments.length === 1) {
            if (!arguments[0]) {
                time = undefined;
                formats = undefined;
            } else if (isMomentInput(arguments[0])) {
                time = arguments[0];
                formats = undefined;
            } else if (isCalendarSpec(arguments[0])) {
                formats = arguments[0];
                time = undefined;
            }
        }
        // We want to compare the start of today, vs this.
        // Getting start-of-today depends on whether we're local/utc/offset or not.
        var now = time || createLocal(),
            sod = cloneWithOffset(now, this).startOf('day'),
            format = hooks.calendarFormat(this, sod) || 'sameElse',
            output =
                formats &&
                (isFunction(formats[format])
                    ? formats[format].call(this, now)
                    : formats[format]);

        return this.format(
            output || this.localeData().calendar(format, this, createLocal(now))
        );
    }

    function clone() {
        return new Moment(this);
    }

    function isAfter(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input);
        if (!(this.isValid() && localInput.isValid())) {
            return false;
        }
        units = normalizeUnits(units) || 'millisecond';
        if (units === 'millisecond') {
            return this.valueOf() > localInput.valueOf();
        } else {
            return localInput.valueOf() < this.clone().startOf(units).valueOf();
        }
    }

    function isBefore(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input);
        if (!(this.isValid() && localInput.isValid())) {
            return false;
        }
        units = normalizeUnits(units) || 'millisecond';
        if (units === 'millisecond') {
            return this.valueOf() < localInput.valueOf();
        } else {
            return this.clone().endOf(units).valueOf() < localInput.valueOf();
        }
    }

    function isBetween(from, to, units, inclusivity) {
        var localFrom = isMoment(from) ? from : createLocal(from),
            localTo = isMoment(to) ? to : createLocal(to);
        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
            return false;
        }
        inclusivity = inclusivity || '()';
        return (
            (inclusivity[0] === '('
                ? this.isAfter(localFrom, units)
                : !this.isBefore(localFrom, units)) &&
            (inclusivity[1] === ')'
                ? this.isBefore(localTo, units)
                : !this.isAfter(localTo, units))
        );
    }

    function isSame(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input),
            inputMs;
        if (!(this.isValid() && localInput.isValid())) {
            return false;
        }
        units = normalizeUnits(units) || 'millisecond';
        if (units === 'millisecond') {
            return this.valueOf() === localInput.valueOf();
        } else {
            inputMs = localInput.valueOf();
            return (
                this.clone().startOf(units).valueOf() <= inputMs &&
                inputMs <= this.clone().endOf(units).valueOf()
            );
        }
    }

    function isSameOrAfter(input, units) {
        return this.isSame(input, units) || this.isAfter(input, units);
    }

    function isSameOrBefore(input, units) {
        return this.isSame(input, units) || this.isBefore(input, units);
    }

    function diff(input, units, asFloat) {
        var that, zoneDelta, output;

        if (!this.isValid()) {
            return NaN;
        }

        that = cloneWithOffset(input, this);

        if (!that.isValid()) {
            return NaN;
        }

        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;

        units = normalizeUnits(units);

        switch (units) {
            case 'year':
                output = monthDiff(this, that) / 12;
                break;
            case 'month':
                output = monthDiff(this, that);
                break;
            case 'quarter':
                output = monthDiff(this, that) / 3;
                break;
            case 'second':
                output = (this - that) / 1e3;
                break; // 1000
            case 'minute':
                output = (this - that) / 6e4;
                break; // 1000 * 60
            case 'hour':
                output = (this - that) / 36e5;
                break; // 1000 * 60 * 60
            case 'day':
                output = (this - that - zoneDelta) / 864e5;
                break; // 1000 * 60 * 60 * 24, negate dst
            case 'week':
                output = (this - that - zoneDelta) / 6048e5;
                break; // 1000 * 60 * 60 * 24 * 7, negate dst
            default:
                output = this - that;
        }

        return asFloat ? output : absFloor(output);
    }

    function monthDiff(a, b) {
        if (a.date() < b.date()) {
            // end-of-month calculations work correct when the start month has more
            // days than the end month.
            return -monthDiff(b, a);
        }
        // difference in months
        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
            // b is in (anchor - 1 month, anchor + 1 month)
            anchor = a.clone().add(wholeMonthDiff, 'months'),
            anchor2,
            adjust;

        if (b - anchor < 0) {
            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
            // linear across the month
            adjust = (b - anchor) / (anchor - anchor2);
        } else {
            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
            // linear across the month
            adjust = (b - anchor) / (anchor2 - anchor);
        }

        //check for negative zero, return zero if negative zero
        return -(wholeMonthDiff + adjust) || 0;
    }

    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';

    function toString() {
        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
    }

    function toISOString(keepOffset) {
        if (!this.isValid()) {
            return null;
        }
        var utc = keepOffset !== true,
            m = utc ? this.clone().utc() : this;
        if (m.year() < 0 || m.year() > 9999) {
            return formatMoment(
                m,
                utc
                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
            );
        }
        if (isFunction(Date.prototype.toISOString)) {
            // native implementation is ~50x faster, use it when we can
            if (utc) {
                return this.toDate().toISOString();
            } else {
                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
                    .toISOString()
                    .replace('Z', formatMoment(m, 'Z'));
            }
        }
        return formatMoment(
            m,
            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
        );
    }

    /**
     * Return a human readable representation of a moment that can
     * also be evaluated to get a new moment which is the same
     *
     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
     */
    function inspect() {
        if (!this.isValid()) {
            return 'moment.invalid(/* ' + this._i + ' */)';
        }
        var func = 'moment',
            zone = '',
            prefix,
            year,
            datetime,
            suffix;
        if (!this.isLocal()) {
            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
            zone = 'Z';
        }
        prefix = '[' + func + '("]';
        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
        datetime = '-MM-DD[T]HH:mm:ss.SSS';
        suffix = zone + '[")]';

        return this.format(prefix + year + datetime + suffix);
    }

    function format(inputString) {
        if (!inputString) {
            inputString = this.isUtc()
                ? hooks.defaultFormatUtc
                : hooks.defaultFormat;
        }
        var output = formatMoment(this, inputString);
        return this.localeData().postformat(output);
    }

    function from(time, withoutSuffix) {
        if (
            this.isValid() &&
            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
        ) {
            return createDuration({ to: this, from: time })
                .locale(this.locale())
                .humanize(!withoutSuffix);
        } else {
            return this.localeData().invalidDate();
        }
    }

    function fromNow(withoutSuffix) {
        return this.from(createLocal(), withoutSuffix);
    }

    function to(time, withoutSuffix) {
        if (
            this.isValid() &&
            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
        ) {
            return createDuration({ from: this, to: time })
                .locale(this.locale())
                .humanize(!withoutSuffix);
        } else {
            return this.localeData().invalidDate();
        }
    }

    function toNow(withoutSuffix) {
        return this.to(createLocal(), withoutSuffix);
    }

    // If passed a locale key, it will set the locale for this
    // instance.  Otherwise, it will return the locale configuration
    // variables for this instance.
    function locale(key) {
        var newLocaleData;

        if (key === undefined) {
            return this._locale._abbr;
        } else {
            newLocaleData = getLocale(key);
            if (newLocaleData != null) {
                this._locale = newLocaleData;
            }
            return this;
        }
    }

    var lang = deprecate(
        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
        function (key) {
            if (key === undefined) {
                return this.localeData();
            } else {
                return this.locale(key);
            }
        }
    );

    function localeData() {
        return this._locale;
    }

    var MS_PER_SECOND = 1000,
        MS_PER_MINUTE = 60 * MS_PER_SECOND,
        MS_PER_HOUR = 60 * MS_PER_MINUTE,
        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;

    // actual modulo - handles negative numbers (for dates before 1970):
    function mod$1(dividend, divisor) {
        return ((dividend % divisor) + divisor) % divisor;
    }

    function localStartOfDate(y, m, d) {
        // the date constructor remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            // preserve leap years using a full 400 year cycle, then reset
            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
        } else {
            return new Date(y, m, d).valueOf();
        }
    }

    function utcStartOfDate(y, m, d) {
        // Date.UTC remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            // preserve leap years using a full 400 year cycle, then reset
            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
        } else {
            return Date.UTC(y, m, d);
        }
    }

    function startOf(units) {
        var time, startOfDate;
        units = normalizeUnits(units);
        if (units === undefined || units === 'millisecond' || !this.isValid()) {
            return this;
        }

        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

        switch (units) {
            case 'year':
                time = startOfDate(this.year(), 0, 1);
                break;
            case 'quarter':
                time = startOfDate(
                    this.year(),
                    this.month() - (this.month() % 3),
                    1
                );
                break;
            case 'month':
                time = startOfDate(this.year(), this.month(), 1);
                break;
            case 'week':
                time = startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - this.weekday()
                );
                break;
            case 'isoWeek':
                time = startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - (this.isoWeekday() - 1)
                );
                break;
            case 'day':
            case 'date':
                time = startOfDate(this.year(), this.month(), this.date());
                break;
            case 'hour':
                time = this._d.valueOf();
                time -= mod$1(
                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                    MS_PER_HOUR
                );
                break;
            case 'minute':
                time = this._d.valueOf();
                time -= mod$1(time, MS_PER_MINUTE);
                break;
            case 'second':
                time = this._d.valueOf();
                time -= mod$1(time, MS_PER_SECOND);
                break;
        }

        this._d.setTime(time);
        hooks.updateOffset(this, true);
        return this;
    }

    function endOf(units) {
        var time, startOfDate;
        units = normalizeUnits(units);
        if (units === undefined || units === 'millisecond' || !this.isValid()) {
            return this;
        }

        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

        switch (units) {
            case 'year':
                time = startOfDate(this.year() + 1, 0, 1) - 1;
                break;
            case 'quarter':
                time =
                    startOfDate(
                        this.year(),
                        this.month() - (this.month() % 3) + 3,
                        1
                    ) - 1;
                break;
            case 'month':
                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
                break;
            case 'week':
                time =
                    startOfDate(
                        this.year(),
                        this.month(),
                        this.date() - this.weekday() + 7
                    ) - 1;
                break;
            case 'isoWeek':
                time =
                    startOfDate(
                        this.year(),
                        this.month(),
                        this.date() - (this.isoWeekday() - 1) + 7
                    ) - 1;
                break;
            case 'day':
            case 'date':
                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
                break;
            case 'hour':
                time = this._d.valueOf();
                time +=
                    MS_PER_HOUR -
                    mod$1(
                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                        MS_PER_HOUR
                    ) -
                    1;
                break;
            case 'minute':
                time = this._d.valueOf();
                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
                break;
            case 'second':
                time = this._d.valueOf();
                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
                break;
        }

        this._d.setTime(time);
        hooks.updateOffset(this, true);
        return this;
    }

    function valueOf() {
        return this._d.valueOf() - (this._offset || 0) * 60000;
    }

    function unix() {
        return Math.floor(this.valueOf() / 1000);
    }

    function toDate() {
        return new Date(this.valueOf());
    }

    function toArray() {
        var m = this;
        return [
            m.year(),
            m.month(),
            m.date(),
            m.hour(),
            m.minute(),
            m.second(),
            m.millisecond(),
        ];
    }

    function toObject() {
        var m = this;
        return {
            years: m.year(),
            months: m.month(),
            date: m.date(),
            hours: m.hours(),
            minutes: m.minutes(),
            seconds: m.seconds(),
            milliseconds: m.milliseconds(),
        };
    }

    function toJSON() {
        // new Date(NaN).toJSON() === null
        return this.isValid() ? this.toISOString() : null;
    }

    function isValid$2() {
        return isValid(this);
    }

    function parsingFlags() {
        return extend({}, getParsingFlags(this));
    }

    function invalidAt() {
        return getParsingFlags(this).overflow;
    }

    function creationData() {
        return {
            input: this._i,
            format: this._f,
            locale: this._locale,
            isUTC: this._isUTC,
            strict: this._strict,
        };
    }

    addFormatToken('N', 0, 0, 'eraAbbr');
    addFormatToken('NN', 0, 0, 'eraAbbr');
    addFormatToken('NNN', 0, 0, 'eraAbbr');
    addFormatToken('NNNN', 0, 0, 'eraName');
    addFormatToken('NNNNN', 0, 0, 'eraNarrow');

    addFormatToken('y', ['y', 1], 'yo', 'eraYear');
    addFormatToken('y', ['yy', 2], 0, 'eraYear');
    addFormatToken('y', ['yyy', 3], 0, 'eraYear');
    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');

    addRegexToken('N', matchEraAbbr);
    addRegexToken('NN', matchEraAbbr);
    addRegexToken('NNN', matchEraAbbr);
    addRegexToken('NNNN', matchEraName);
    addRegexToken('NNNNN', matchEraNarrow);

    addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
        input,
        array,
        config,
        token
    ) {
        var era = config._locale.erasParse(input, token, config._strict);
        if (era) {
            getParsingFlags(config).era = era;
        } else {
            getParsingFlags(config).invalidEra = input;
        }
    });

    addRegexToken('y', matchUnsigned);
    addRegexToken('yy', matchUnsigned);
    addRegexToken('yyy', matchUnsigned);
    addRegexToken('yyyy', matchUnsigned);
    addRegexToken('yo', matchEraYearOrdinal);

    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
    addParseToken(['yo'], function (input, array, config, token) {
        var match;
        if (config._locale._eraYearOrdinalRegex) {
            match = input.match(config._locale._eraYearOrdinalRegex);
        }

        if (config._locale.eraYearOrdinalParse) {
            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
        } else {
            array[YEAR] = parseInt(input, 10);
        }
    });

    function localeEras(m, format) {
        var i,
            l,
            date,
            eras = this._eras || getLocale('en')._eras;
        for (i = 0, l = eras.length; i < l; ++i) {
            switch (typeof eras[i].since) {
                case 'string':
                    // truncate time
                    date = hooks(eras[i].since).startOf('day');
                    eras[i].since = date.valueOf();
                    break;
            }

            switch (typeof eras[i].until) {
                case 'undefined':
                    eras[i].until = +Infinity;
                    break;
                case 'string':
                    // truncate time
                    date = hooks(eras[i].until).startOf('day').valueOf();
                    eras[i].until = date.valueOf();
                    break;
            }
        }
        return eras;
    }

    function localeErasParse(eraName, format, strict) {
        var i,
            l,
            eras = this.eras(),
            name,
            abbr,
            narrow;
        eraName = eraName.toUpperCase();

        for (i = 0, l = eras.length; i < l; ++i) {
            name = eras[i].name.toUpperCase();
            abbr = eras[i].abbr.toUpperCase();
            narrow = eras[i].narrow.toUpperCase();

            if (strict) {
                switch (format) {
                    case 'N':
                    case 'NN':
                    case 'NNN':
                        if (abbr === eraName) {
                            return eras[i];
                        }
                        break;

                    case 'NNNN':
                        if (name === eraName) {
                            return eras[i];
                        }
                        break;

                    case 'NNNNN':
                        if (narrow === eraName) {
                            return eras[i];
                        }
                        break;
                }
            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
                return eras[i];
            }
        }
    }

    function localeErasConvertYear(era, year) {
        var dir = era.since <= era.until ? +1 : -1;
        if (year === undefined) {
            return hooks(era.since).year();
        } else {
            return hooks(era.since).year() + (year - era.offset) * dir;
        }
    }

    function getEraName() {
        var i,
            l,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].name;
            }
            if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].name;
            }
        }

        return '';
    }

    function getEraNarrow() {
        var i,
            l,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].narrow;
            }
            if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].narrow;
            }
        }

        return '';
    }

    function getEraAbbr() {
        var i,
            l,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].abbr;
            }
            if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].abbr;
            }
        }

        return '';
    }

    function getEraYear() {
        var i,
            l,
            dir,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            dir = eras[i].since <= eras[i].until ? +1 : -1;

            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (
                (eras[i].since <= val && val <= eras[i].until) ||
                (eras[i].until <= val && val <= eras[i].since)
            ) {
                return (
                    (this.year() - hooks(eras[i].since).year()) * dir +
                    eras[i].offset
                );
            }
        }

        return this.year();
    }

    function erasNameRegex(isStrict) {
        if (!hasOwnProp(this, '_erasNameRegex')) {
            computeErasParse.call(this);
        }
        return isStrict ? this._erasNameRegex : this._erasRegex;
    }

    function erasAbbrRegex(isStrict) {
        if (!hasOwnProp(this, '_erasAbbrRegex')) {
            computeErasParse.call(this);
        }
        return isStrict ? this._erasAbbrRegex : this._erasRegex;
    }

    function erasNarrowRegex(isStrict) {
        if (!hasOwnProp(this, '_erasNarrowRegex')) {
            computeErasParse.call(this);
        }
        return isStrict ? this._erasNarrowRegex : this._erasRegex;
    }

    function matchEraAbbr(isStrict, locale) {
        return locale.erasAbbrRegex(isStrict);
    }

    function matchEraName(isStrict, locale) {
        return locale.erasNameRegex(isStrict);
    }

    function matchEraNarrow(isStrict, locale) {
        return locale.erasNarrowRegex(isStrict);
    }

    function matchEraYearOrdinal(isStrict, locale) {
        return locale._eraYearOrdinalRegex || matchUnsigned;
    }

    function computeErasParse() {
        var abbrPieces = [],
            namePieces = [],
            narrowPieces = [],
            mixedPieces = [],
            i,
            l,
            eras = this.eras();

        for (i = 0, l = eras.length; i < l; ++i) {
            namePieces.push(regexEscape(eras[i].name));
            abbrPieces.push(regexEscape(eras[i].abbr));
            narrowPieces.push(regexEscape(eras[i].narrow));

            mixedPieces.push(regexEscape(eras[i].name));
            mixedPieces.push(regexEscape(eras[i].abbr));
            mixedPieces.push(regexEscape(eras[i].narrow));
        }

        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
        this._erasNarrowRegex = new RegExp(
            '^(' + narrowPieces.join('|') + ')',
            'i'
        );
    }

    // FORMATTING

    addFormatToken(0, ['gg', 2], 0, function () {
        return this.weekYear() % 100;
    });

    addFormatToken(0, ['GG', 2], 0, function () {
        return this.isoWeekYear() % 100;
    });

    function addWeekYearFormatToken(token, getter) {
        addFormatToken(0, [token, token.length], 0, getter);
    }

    addWeekYearFormatToken('gggg', 'weekYear');
    addWeekYearFormatToken('ggggg', 'weekYear');
    addWeekYearFormatToken('GGGG', 'isoWeekYear');
    addWeekYearFormatToken('GGGGG', 'isoWeekYear');

    // ALIASES

    addUnitAlias('weekYear', 'gg');
    addUnitAlias('isoWeekYear', 'GG');

    // PRIORITY

    addUnitPriority('weekYear', 1);
    addUnitPriority('isoWeekYear', 1);

    // PARSING

    addRegexToken('G', matchSigned);
    addRegexToken('g', matchSigned);
    addRegexToken('GG', match1to2, match2);
    addRegexToken('gg', match1to2, match2);
    addRegexToken('GGGG', match1to4, match4);
    addRegexToken('gggg', match1to4, match4);
    addRegexToken('GGGGG', match1to6, match6);
    addRegexToken('ggggg', match1to6, match6);

    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
        input,
        week,
        config,
        token
    ) {
        week[token.substr(0, 2)] = toInt(input);
    });

    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
        week[token] = hooks.parseTwoDigitYear(input);
    });

    // MOMENTS

    function getSetWeekYear(input) {
        return getSetWeekYearHelper.call(
            this,
            input,
            this.week(),
            this.weekday(),
            this.localeData()._week.dow,
            this.localeData()._week.doy
        );
    }

    function getSetISOWeekYear(input) {
        return getSetWeekYearHelper.call(
            this,
            input,
            this.isoWeek(),
            this.isoWeekday(),
            1,
            4
        );
    }

    function getISOWeeksInYear() {
        return weeksInYear(this.year(), 1, 4);
    }

    function getISOWeeksInISOWeekYear() {
        return weeksInYear(this.isoWeekYear(), 1, 4);
    }

    function getWeeksInYear() {
        var weekInfo = this.localeData()._week;
        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
    }

    function getWeeksInWeekYear() {
        var weekInfo = this.localeData()._week;
        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
    }

    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
        var weeksTarget;
        if (input == null) {
            return weekOfYear(this, dow, doy).year;
        } else {
            weeksTarget = weeksInYear(input, dow, doy);
            if (week > weeksTarget) {
                week = weeksTarget;
            }
            return setWeekAll.call(this, input, week, weekday, dow, doy);
        }
    }

    function setWeekAll(weekYear, week, weekday, dow, doy) {
        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);

        this.year(date.getUTCFullYear());
        this.month(date.getUTCMonth());
        this.date(date.getUTCDate());
        return this;
    }

    // FORMATTING

    addFormatToken('Q', 0, 'Qo', 'quarter');

    // ALIASES

    addUnitAlias('quarter', 'Q');

    // PRIORITY

    addUnitPriority('quarter', 7);

    // PARSING

    addRegexToken('Q', match1);
    addParseToken('Q', function (input, array) {
        array[MONTH] = (toInt(input) - 1) * 3;
    });

    // MOMENTS

    function getSetQuarter(input) {
        return input == null
            ? Math.ceil((this.month() + 1) / 3)
            : this.month((input - 1) * 3 + (this.month() % 3));
    }

    // FORMATTING

    addFormatToken('D', ['DD', 2], 'Do', 'date');

    // ALIASES

    addUnitAlias('date', 'D');

    // PRIORITY
    addUnitPriority('date', 9);

    // PARSING

    addRegexToken('D', match1to2);
    addRegexToken('DD', match1to2, match2);
    addRegexToken('Do', function (isStrict, locale) {
        // TODO: Remove "ordinalParse" fallback in next major release.
        return isStrict
            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
            : locale._dayOfMonthOrdinalParseLenient;
    });

    addParseToken(['D', 'DD'], DATE);
    addParseToken('Do', function (input, array) {
        array[DATE] = toInt(input.match(match1to2)[0]);
    });

    // MOMENTS

    var getSetDayOfMonth = makeGetSet('Date', true);

    // FORMATTING

    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');

    // ALIASES

    addUnitAlias('dayOfYear', 'DDD');

    // PRIORITY
    addUnitPriority('dayOfYear', 4);

    // PARSING

    addRegexToken('DDD', match1to3);
    addRegexToken('DDDD', match3);
    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
        config._dayOfYear = toInt(input);
    });

    // HELPERS

    // MOMENTS

    function getSetDayOfYear(input) {
        var dayOfYear =
            Math.round(
                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
            ) + 1;
        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
    }

    // FORMATTING

    addFormatToken('m', ['mm', 2], 0, 'minute');

    // ALIASES

    addUnitAlias('minute', 'm');

    // PRIORITY

    addUnitPriority('minute', 14);

    // PARSING

    addRegexToken('m', match1to2);
    addRegexToken('mm', match1to2, match2);
    addParseToken(['m', 'mm'], MINUTE);

    // MOMENTS

    var getSetMinute = makeGetSet('Minutes', false);

    // FORMATTING

    addFormatToken('s', ['ss', 2], 0, 'second');

    // ALIASES

    addUnitAlias('second', 's');

    // PRIORITY

    addUnitPriority('second', 15);

    // PARSING

    addRegexToken('s', match1to2);
    addRegexToken('ss', match1to2, match2);
    addParseToken(['s', 'ss'], SECOND);

    // MOMENTS

    var getSetSecond = makeGetSet('Seconds', false);

    // FORMATTING

    addFormatToken('S', 0, 0, function () {
        return ~~(this.millisecond() / 100);
    });

    addFormatToken(0, ['SS', 2], 0, function () {
        return ~~(this.millisecond() / 10);
    });

    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
    addFormatToken(0, ['SSSS', 4], 0, function () {
        return this.millisecond() * 10;
    });
    addFormatToken(0, ['SSSSS', 5], 0, function () {
        return this.millisecond() * 100;
    });
    addFormatToken(0, ['SSSSSS', 6], 0, function () {
        return this.millisecond() * 1000;
    });
    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
        return this.millisecond() * 10000;
    });
    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
        return this.millisecond() * 100000;
    });
    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
        return this.millisecond() * 1000000;
    });

    // ALIASES

    addUnitAlias('millisecond', 'ms');

    // PRIORITY

    addUnitPriority('millisecond', 16);

    // PARSING

    addRegexToken('S', match1to3, match1);
    addRegexToken('SS', match1to3, match2);
    addRegexToken('SSS', match1to3, match3);

    var token, getSetMillisecond;
    for (token = 'SSSS'; token.length <= 9; token += 'S') {
        addRegexToken(token, matchUnsigned);
    }

    function parseMs(input, array) {
        array[MILLISECOND] = toInt(('0.' + input) * 1000);
    }

    for (token = 'S'; token.length <= 9; token += 'S') {
        addParseToken(token, parseMs);
    }

    getSetMillisecond = makeGetSet('Milliseconds', false);

    // FORMATTING

    addFormatToken('z', 0, 0, 'zoneAbbr');
    addFormatToken('zz', 0, 0, 'zoneName');

    // MOMENTS

    function getZoneAbbr() {
        return this._isUTC ? 'UTC' : '';
    }

    function getZoneName() {
        return this._isUTC ? 'Coordinated Universal Time' : '';
    }

    var proto = Moment.prototype;

    proto.add = add;
    proto.calendar = calendar$1;
    proto.clone = clone;
    proto.diff = diff;
    proto.endOf = endOf;
    proto.format = format;
    proto.from = from;
    proto.fromNow = fromNow;
    proto.to = to;
    proto.toNow = toNow;
    proto.get = stringGet;
    proto.invalidAt = invalidAt;
    proto.isAfter = isAfter;
    proto.isBefore = isBefore;
    proto.isBetween = isBetween;
    proto.isSame = isSame;
    proto.isSameOrAfter = isSameOrAfter;
    proto.isSameOrBefore = isSameOrBefore;
    proto.isValid = isValid$2;
    proto.lang = lang;
    proto.locale = locale;
    proto.localeData = localeData;
    proto.max = prototypeMax;
    proto.min = prototypeMin;
    proto.parsingFlags = parsingFlags;
    proto.set = stringSet;
    proto.startOf = startOf;
    proto.subtract = subtract;
    proto.toArray = toArray;
    proto.toObject = toObject;
    proto.toDate = toDate;
    proto.toISOString = toISOString;
    proto.inspect = inspect;
    if (typeof Symbol !== 'undefined' && Symbol.for != null) {
        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
            return 'Moment<' + this.format() + '>';
        };
    }
    proto.toJSON = toJSON;
    proto.toString = toString;
    proto.unix = unix;
    proto.valueOf = valueOf;
    proto.creationData = creationData;
    proto.eraName = getEraName;
    proto.eraNarrow = getEraNarrow;
    proto.eraAbbr = getEraAbbr;
    proto.eraYear = getEraYear;
    proto.year = getSetYear;
    proto.isLeapYear = getIsLeapYear;
    proto.weekYear = getSetWeekYear;
    proto.isoWeekYear = getSetISOWeekYear;
    proto.quarter = proto.quarters = getSetQuarter;
    proto.month = getSetMonth;
    proto.daysInMonth = getDaysInMonth;
    proto.week = proto.weeks = getSetWeek;
    proto.isoWeek = proto.isoWeeks = getSetISOWeek;
    proto.weeksInYear = getWeeksInYear;
    proto.weeksInWeekYear = getWeeksInWeekYear;
    proto.isoWeeksInYear = getISOWeeksInYear;
    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
    proto.date = getSetDayOfMonth;
    proto.day = proto.days = getSetDayOfWeek;
    proto.weekday = getSetLocaleDayOfWeek;
    proto.isoWeekday = getSetISODayOfWeek;
    proto.dayOfYear = getSetDayOfYear;
    proto.hour = proto.hours = getSetHour;
    proto.minute = proto.minutes = getSetMinute;
    proto.second = proto.seconds = getSetSecond;
    proto.millisecond = proto.milliseconds = getSetMillisecond;
    proto.utcOffset = getSetOffset;
    proto.utc = setOffsetToUTC;
    proto.local = setOffsetToLocal;
    proto.parseZone = setOffsetToParsedOffset;
    proto.hasAlignedHourOffset = hasAlignedHourOffset;
    proto.isDST = isDaylightSavingTime;
    proto.isLocal = isLocal;
    proto.isUtcOffset = isUtcOffset;
    proto.isUtc = isUtc;
    proto.isUTC = isUtc;
    proto.zoneAbbr = getZoneAbbr;
    proto.zoneName = getZoneName;
    proto.dates = deprecate(
        'dates accessor is deprecated. Use date instead.',
        getSetDayOfMonth
    );
    proto.months = deprecate(
        'months accessor is deprecated. Use month instead',
        getSetMonth
    );
    proto.years = deprecate(
        'years accessor is deprecated. Use year instead',
        getSetYear
    );
    proto.zone = deprecate(
        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
        getSetZone
    );
    proto.isDSTShifted = deprecate(
        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
        isDaylightSavingTimeShifted
    );

    function createUnix(input) {
        return createLocal(input * 1000);
    }

    function createInZone() {
        return createLocal.apply(null, arguments).parseZone();
    }

    function preParsePostFormat(string) {
        return string;
    }

    var proto$1 = Locale.prototype;

    proto$1.calendar = calendar;
    proto$1.longDateFormat = longDateFormat;
    proto$1.invalidDate = invalidDate;
    proto$1.ordinal = ordinal;
    proto$1.preparse = preParsePostFormat;
    proto$1.postformat = preParsePostFormat;
    proto$1.relativeTime = relativeTime;
    proto$1.pastFuture = pastFuture;
    proto$1.set = set;
    proto$1.eras = localeEras;
    proto$1.erasParse = localeErasParse;
    proto$1.erasConvertYear = localeErasConvertYear;
    proto$1.erasAbbrRegex = erasAbbrRegex;
    proto$1.erasNameRegex = erasNameRegex;
    proto$1.erasNarrowRegex = erasNarrowRegex;

    proto$1.months = localeMonths;
    proto$1.monthsShort = localeMonthsShort;
    proto$1.monthsParse = localeMonthsParse;
    proto$1.monthsRegex = monthsRegex;
    proto$1.monthsShortRegex = monthsShortRegex;
    proto$1.week = localeWeek;
    proto$1.firstDayOfYear = localeFirstDayOfYear;
    proto$1.firstDayOfWeek = localeFirstDayOfWeek;

    proto$1.weekdays = localeWeekdays;
    proto$1.weekdaysMin = localeWeekdaysMin;
    proto$1.weekdaysShort = localeWeekdaysShort;
    proto$1.weekdaysParse = localeWeekdaysParse;

    proto$1.weekdaysRegex = weekdaysRegex;
    proto$1.weekdaysShortRegex = weekdaysShortRegex;
    proto$1.weekdaysMinRegex = weekdaysMinRegex;

    proto$1.isPM = localeIsPM;
    proto$1.meridiem = localeMeridiem;

    function get$1(format, index, field, setter) {
        var locale = getLocale(),
            utc = createUTC().set(setter, index);
        return locale[field](utc, format);
    }

    function listMonthsImpl(format, index, field) {
        if (isNumber(format)) {
            index = format;
            format = undefined;
        }

        format = format || '';

        if (index != null) {
            return get$1(format, index, field, 'month');
        }

        var i,
            out = [];
        for (i = 0; i < 12; i++) {
            out[i] = get$1(format, i, field, 'month');
        }
        return out;
    }

    // ()
    // (5)
    // (fmt, 5)
    // (fmt)
    // (true)
    // (true, 5)
    // (true, fmt, 5)
    // (true, fmt)
    function listWeekdaysImpl(localeSorted, format, index, field) {
        if (typeof localeSorted === 'boolean') {
            if (isNumber(format)) {
                index = format;
                format = undefined;
            }

            format = format || '';
        } else {
            format = localeSorted;
            index = format;
            localeSorted = false;

            if (isNumber(format)) {
                index = format;
                format = undefined;
            }

            format = format || '';
        }

        var locale = getLocale(),
            shift = localeSorted ? locale._week.dow : 0,
            i,
            out = [];

        if (index != null) {
            return get$1(format, (index + shift) % 7, field, 'day');
        }

        for (i = 0; i < 7; i++) {
            out[i] = get$1(format, (i + shift) % 7, field, 'day');
        }
        return out;
    }

    function listMonths(format, index) {
        return listMonthsImpl(format, index, 'months');
    }

    function listMonthsShort(format, index) {
        return listMonthsImpl(format, index, 'monthsShort');
    }

    function listWeekdays(localeSorted, format, index) {
        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
    }

    function listWeekdaysShort(localeSorted, format, index) {
        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
    }

    function listWeekdaysMin(localeSorted, format, index) {
        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
    }

    getSetGlobalLocale('en', {
        eras: [
            {
                since: '0001-01-01',
                until: +Infinity,
                offset: 1,
                name: 'Anno Domini',
                narrow: 'AD',
                abbr: 'AD',
            },
            {
                since: '0000-12-31',
                until: -Infinity,
                offset: 1,
                name: 'Before Christ',
                narrow: 'BC',
                abbr: 'BC',
            },
        ],
        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    toInt((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
    });

    // Side effect imports

    hooks.lang = deprecate(
        'moment.lang is deprecated. Use moment.locale instead.',
        getSetGlobalLocale
    );
    hooks.langData = deprecate(
        'moment.langData is deprecated. Use moment.localeData instead.',
        getLocale
    );

    var mathAbs = Math.abs;

    function abs() {
        var data = this._data;

        this._milliseconds = mathAbs(this._milliseconds);
        this._days = mathAbs(this._days);
        this._months = mathAbs(this._months);

        data.milliseconds = mathAbs(data.milliseconds);
        data.seconds = mathAbs(data.seconds);
        data.minutes = mathAbs(data.minutes);
        data.hours = mathAbs(data.hours);
        data.months = mathAbs(data.months);
        data.years = mathAbs(data.years);

        return this;
    }

    function addSubtract$1(duration, input, value, direction) {
        var other = createDuration(input, value);

        duration._milliseconds += direction * other._milliseconds;
        duration._days += direction * other._days;
        duration._months += direction * other._months;

        return duration._bubble();
    }

    // supports only 2.0-style add(1, 's') or add(duration)
    function add$1(input, value) {
        return addSubtract$1(this, input, value, 1);
    }

    // supports only 2.0-style subtract(1, 's') or subtract(duration)
    function subtract$1(input, value) {
        return addSubtract$1(this, input, value, -1);
    }

    function absCeil(number) {
        if (number < 0) {
            return Math.floor(number);
        } else {
            return Math.ceil(number);
        }
    }

    function bubble() {
        var milliseconds = this._milliseconds,
            days = this._days,
            months = this._months,
            data = this._data,
            seconds,
            minutes,
            hours,
            years,
            monthsFromDays;

        // if we have a mix of positive and negative values, bubble down first
        // check: https://github.com/moment/moment/issues/2166
        if (
            !(
                (milliseconds >= 0 && days >= 0 && months >= 0) ||
                (milliseconds <= 0 && days <= 0 && months <= 0)
            )
        ) {
            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
            days = 0;
            months = 0;
        }

        // The following code bubbles up values, see the tests for
        // examples of what that means.
        data.milliseconds = milliseconds % 1000;

        seconds = absFloor(milliseconds / 1000);
        data.seconds = seconds % 60;

        minutes = absFloor(seconds / 60);
        data.minutes = minutes % 60;

        hours = absFloor(minutes / 60);
        data.hours = hours % 24;

        days += absFloor(hours / 24);

        // convert days to months
        monthsFromDays = absFloor(daysToMonths(days));
        months += monthsFromDays;
        days -= absCeil(monthsToDays(monthsFromDays));

        // 12 months -> 1 year
        years = absFloor(months / 12);
        months %= 12;

        data.days = days;
        data.months = months;
        data.years = years;

        return this;
    }

    function daysToMonths(days) {
        // 400 years have 146097 days (taking into account leap year rules)
        // 400 years have 12 months === 4800
        return (days * 4800) / 146097;
    }

    function monthsToDays(months) {
        // the reverse of daysToMonths
        return (months * 146097) / 4800;
    }

    function as(units) {
        if (!this.isValid()) {
            return NaN;
        }
        var days,
            months,
            milliseconds = this._milliseconds;

        units = normalizeUnits(units);

        if (units === 'month' || units === 'quarter' || units === 'year') {
            days = this._days + milliseconds / 864e5;
            months = this._months + daysToMonths(days);
            switch (units) {
                case 'month':
                    return months;
                case 'quarter':
                    return months / 3;
                case 'year':
                    return months / 12;
            }
        } else {
            // handle milliseconds separately because of floating point math errors (issue #1867)
            days = this._days + Math.round(monthsToDays(this._months));
            switch (units) {
                case 'week':
                    return days / 7 + milliseconds / 6048e5;
                case 'day':
                    return days + milliseconds / 864e5;
                case 'hour':
                    return days * 24 + milliseconds / 36e5;
                case 'minute':
                    return days * 1440 + milliseconds / 6e4;
                case 'second':
                    return days * 86400 + milliseconds / 1000;
                // Math.floor prevents floating point math errors here
                case 'millisecond':
                    return Math.floor(days * 864e5) + milliseconds;
                default:
                    throw new Error('Unknown unit ' + units);
            }
        }
    }

    // TODO: Use this.as('ms')?
    function valueOf$1() {
        if (!this.isValid()) {
            return NaN;
        }
        return (
            this._milliseconds +
            this._days * 864e5 +
            (this._months % 12) * 2592e6 +
            toInt(this._months / 12) * 31536e6
        );
    }

    function makeAs(alias) {
        return function () {
            return this.as(alias);
        };
    }

    var asMilliseconds = makeAs('ms'),
        asSeconds = makeAs('s'),
        asMinutes = makeAs('m'),
        asHours = makeAs('h'),
        asDays = makeAs('d'),
        asWeeks = makeAs('w'),
        asMonths = makeAs('M'),
        asQuarters = makeAs('Q'),
        asYears = makeAs('y');

    function clone$1() {
        return createDuration(this);
    }

    function get$2(units) {
        units = normalizeUnits(units);
        return this.isValid() ? this[units + 's']() : NaN;
    }

    function makeGetter(name) {
        return function () {
            return this.isValid() ? this._data[name] : NaN;
        };
    }

    var milliseconds = makeGetter('milliseconds'),
        seconds = makeGetter('seconds'),
        minutes = makeGetter('minutes'),
        hours = makeGetter('hours'),
        days = makeGetter('days'),
        months = makeGetter('months'),
        years = makeGetter('years');

    function weeks() {
        return absFloor(this.days() / 7);
    }

    var round = Math.round,
        thresholds = {
            ss: 44, // a few seconds to seconds
            s: 45, // seconds to minute
            m: 45, // minutes to hour
            h: 22, // hours to day
            d: 26, // days to month/week
            w: null, // weeks to month
            M: 11, // months to year
        };

    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
    }

    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
        var duration = createDuration(posNegDuration).abs(),
            seconds = round(duration.as('s')),
            minutes = round(duration.as('m')),
            hours = round(duration.as('h')),
            days = round(duration.as('d')),
            months = round(duration.as('M')),
            weeks = round(duration.as('w')),
            years = round(duration.as('y')),
            a =
                (seconds <= thresholds.ss && ['s', seconds]) ||
                (seconds < thresholds.s && ['ss', seconds]) ||
                (minutes <= 1 && ['m']) ||
                (minutes < thresholds.m && ['mm', minutes]) ||
                (hours <= 1 && ['h']) ||
                (hours < thresholds.h && ['hh', hours]) ||
                (days <= 1 && ['d']) ||
                (days < thresholds.d && ['dd', days]);

        if (thresholds.w != null) {
            a =
                a ||
                (weeks <= 1 && ['w']) ||
                (weeks < thresholds.w && ['ww', weeks]);
        }
        a = a ||
            (months <= 1 && ['M']) ||
            (months < thresholds.M && ['MM', months]) ||
            (years <= 1 && ['y']) || ['yy', years];

        a[2] = withoutSuffix;
        a[3] = +posNegDuration > 0;
        a[4] = locale;
        return substituteTimeAgo.apply(null, a);
    }

    // This function allows you to set the rounding function for relative time strings
    function getSetRelativeTimeRounding(roundingFunction) {
        if (roundingFunction === undefined) {
            return round;
        }
        if (typeof roundingFunction === 'function') {
            round = roundingFunction;
            return true;
        }
        return false;
    }

    // This function allows you to set a threshold for relative time strings
    function getSetRelativeTimeThreshold(threshold, limit) {
        if (thresholds[threshold] === undefined) {
            return false;
        }
        if (limit === undefined) {
            return thresholds[threshold];
        }
        thresholds[threshold] = limit;
        if (threshold === 's') {
            thresholds.ss = limit - 1;
        }
        return true;
    }

    function humanize(argWithSuffix, argThresholds) {
        if (!this.isValid()) {
            return this.localeData().invalidDate();
        }

        var withSuffix = false,
            th = thresholds,
            locale,
            output;

        if (typeof argWithSuffix === 'object') {
            argThresholds = argWithSuffix;
            argWithSuffix = false;
        }
        if (typeof argWithSuffix === 'boolean') {
            withSuffix = argWithSuffix;
        }
        if (typeof argThresholds === 'object') {
            th = Object.assign({}, thresholds, argThresholds);
            if (argThresholds.s != null && argThresholds.ss == null) {
                th.ss = argThresholds.s - 1;
            }
        }

        locale = this.localeData();
        output = relativeTime$1(this, !withSuffix, th, locale);

        if (withSuffix) {
            output = locale.pastFuture(+this, output);
        }

        return locale.postformat(output);
    }

    var abs$1 = Math.abs;

    function sign(x) {
        return (x > 0) - (x < 0) || +x;
    }

    function toISOString$1() {
        // for ISO strings we do not use the normal bubbling rules:
        //  * milliseconds bubble up until they become hours
        //  * days do not bubble at all
        //  * months bubble up until they become years
        // This is because there is no context-free conversion between hours and days
        // (think of clock changes)
        // and also not between days and months (28-31 days per month)
        if (!this.isValid()) {
            return this.localeData().invalidDate();
        }

        var seconds = abs$1(this._milliseconds) / 1000,
            days = abs$1(this._days),
            months = abs$1(this._months),
            minutes,
            hours,
            years,
            s,
            total = this.asSeconds(),
            totalSign,
            ymSign,
            daysSign,
            hmsSign;

        if (!total) {
            // this is the same as C#'s (Noda) and python (isodate)...
            // but not other JS (goog.date)
            return 'P0D';
        }

        // 3600 seconds -> 60 minutes -> 1 hour
        minutes = absFloor(seconds / 60);
        hours = absFloor(minutes / 60);
        seconds %= 60;
        minutes %= 60;

        // 12 months -> 1 year
        years = absFloor(months / 12);
        months %= 12;

        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
        s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';

        totalSign = total < 0 ? '-' : '';
        ymSign = sign(this._months) !== sign(total) ? '-' : '';
        daysSign = sign(this._days) !== sign(total) ? '-' : '';
        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';

        return (
            totalSign +
            'P' +
            (years ? ymSign + years + 'Y' : '') +
            (months ? ymSign + months + 'M' : '') +
            (days ? daysSign + days + 'D' : '') +
            (hours || minutes || seconds ? 'T' : '') +
            (hours ? hmsSign + hours + 'H' : '') +
            (minutes ? hmsSign + minutes + 'M' : '') +
            (seconds ? hmsSign + s + 'S' : '')
        );
    }

    var proto$2 = Duration.prototype;

    proto$2.isValid = isValid$1;
    proto$2.abs = abs;
    proto$2.add = add$1;
    proto$2.subtract = subtract$1;
    proto$2.as = as;
    proto$2.asMilliseconds = asMilliseconds;
    proto$2.asSeconds = asSeconds;
    proto$2.asMinutes = asMinutes;
    proto$2.asHours = asHours;
    proto$2.asDays = asDays;
    proto$2.asWeeks = asWeeks;
    proto$2.asMonths = asMonths;
    proto$2.asQuarters = asQuarters;
    proto$2.asYears = asYears;
    proto$2.valueOf = valueOf$1;
    proto$2._bubble = bubble;
    proto$2.clone = clone$1;
    proto$2.get = get$2;
    proto$2.milliseconds = milliseconds;
    proto$2.seconds = seconds;
    proto$2.minutes = minutes;
    proto$2.hours = hours;
    proto$2.days = days;
    proto$2.weeks = weeks;
    proto$2.months = months;
    proto$2.years = years;
    proto$2.humanize = humanize;
    proto$2.toISOString = toISOString$1;
    proto$2.toString = toISOString$1;
    proto$2.toJSON = toISOString$1;
    proto$2.locale = locale;
    proto$2.localeData = localeData;

    proto$2.toIsoString = deprecate(
        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
        toISOString$1
    );
    proto$2.lang = lang;

    // FORMATTING

    addFormatToken('X', 0, 0, 'unix');
    addFormatToken('x', 0, 0, 'valueOf');

    // PARSING

    addRegexToken('x', matchSigned);
    addRegexToken('X', matchTimestamp);
    addParseToken('X', function (input, array, config) {
        config._d = new Date(parseFloat(input) * 1000);
    });
    addParseToken('x', function (input, array, config) {
        config._d = new Date(toInt(input));
    });

    //! moment.js

    hooks.version = '2.29.1';

    setHookCallback(createLocal);

    hooks.fn = proto;
    hooks.min = min;
    hooks.max = max;
    hooks.now = now;
    hooks.utc = createUTC;
    hooks.unix = createUnix;
    hooks.months = listMonths;
    hooks.isDate = isDate;
    hooks.locale = getSetGlobalLocale;
    hooks.invalid = createInvalid;
    hooks.duration = createDuration;
    hooks.isMoment = isMoment;
    hooks.weekdays = listWeekdays;
    hooks.parseZone = createInZone;
    hooks.localeData = getLocale;
    hooks.isDuration = isDuration;
    hooks.monthsShort = listMonthsShort;
    hooks.weekdaysMin = listWeekdaysMin;
    hooks.defineLocale = defineLocale;
    hooks.updateLocale = updateLocale;
    hooks.locales = listLocales;
    hooks.weekdaysShort = listWeekdaysShort;
    hooks.normalizeUnits = normalizeUnits;
    hooks.relativeTimeRounding = getSetRelativeTimeRounding;
    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
    hooks.calendarFormat = getCalendarFormat;
    hooks.prototype = proto;

    // currently HTML5 input type only supports 24-hour formats
    hooks.HTML5_FMT = {
        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
        DATE: 'YYYY-MM-DD', // <input type="date" />
        TIME: 'HH:mm', // <input type="time" />
        TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
        TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
        WEEK: 'GGGG-[W]WW', // <input type="week" />
        MONTH: 'YYYY-MM', // <input type="month" />
    };

    //! moment.js locale configuration

    hooks.defineLocale('af', {
        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
            '_'
        ),
        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
        meridiemParse: /vm|nm/i,
        isPM: function (input) {
            return /^nm$/i.test(input);
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower ? 'vm' : 'VM';
            } else {
                return isLower ? 'nm' : 'NM';
            }
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Vandag om] LT',
            nextDay: '[MÃ´re om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[Gister om] LT',
            lastWeek: '[Laas] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'oor %s',
            past: '%s gelede',
            s: "'n paar sekondes",
            ss: '%d sekondes',
            m: "'n minuut",
            mm: '%d minute',
            h: "'n uur",
            hh: '%d ure',
            d: "'n dag",
            dd: '%d dae',
            M: "'n maand",
            MM: '%d maande',
            y: "'n jaar",
            yy: '%d jaar',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            ); // Thanks to Joris RÃ¶ling : https://github.com/jjupiter
        },
        week: {
            dow: 1, // Maandag is die eerste dag van die week.
            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
        },
    });

    //! moment.js locale configuration

    var pluralForm = function (n) {
            return n === 0
                ? 0
                : n === 1
                ? 1
                : n === 2
                ? 2
                : n % 100 >= 3 && n % 100 <= 10
                ? 3
                : n % 100 >= 11
                ? 4
                : 5;
        },
        plurals = {
            s: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
                'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
                '%d Ø«ÙˆØ§Ù†',
                '%d Ø«Ø§Ù†ÙŠØ©',
                '%d Ø«Ø§Ù†ÙŠØ©',
            ],
            m: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
                'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
                '%d Ø¯Ù‚Ø§Ø¦Ù‚',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            ],
            h: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
                'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
                '%d Ø³Ø§Ø¹Ø§Øª',
                '%d Ø³Ø§Ø¹Ø©',
                '%d Ø³Ø§Ø¹Ø©',
            ],
            d: [
                'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
                'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
                ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
                '%d Ø£ÙŠØ§Ù…',
                '%d ÙŠÙˆÙ…Ù‹Ø§',
                '%d ÙŠÙˆÙ…',
            ],
            M: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
                'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
                ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
                '%d Ø£Ø´Ù‡Ø±',
                '%d Ø´Ù‡Ø±Ø§',
                '%d Ø´Ù‡Ø±',
            ],
            y: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
                'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
                ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
                '%d Ø£Ø¹ÙˆØ§Ù…',
                '%d Ø¹Ø§Ù…Ù‹Ø§',
                '%d Ø¹Ø§Ù…',
            ],
        },
        pluralize = function (u) {
            return function (number, withoutSuffix, string, isFuture) {
                var f = pluralForm(number),
                    str = plurals[u][pluralForm(number)];
                if (f === 2) {
                    str = str[withoutSuffix ? 0 : 1];
                }
                return str.replace(/%d/i, number);
            };
        },
        months$1 = [
            'Ø¬Ø§Ù†ÙÙŠ',
            'ÙÙŠÙØ±ÙŠ',
            'Ù…Ø§Ø±Ø³',
            'Ø£ÙØ±ÙŠÙ„',
            'Ù…Ø§ÙŠ',
            'Ø¬ÙˆØ§Ù†',
            'Ø¬ÙˆÙŠÙ„ÙŠØ©',
            'Ø£ÙˆØª',
            'Ø³Ø¨ØªÙ…Ø¨Ø±',
            'Ø£ÙƒØªÙˆØ¨Ø±',
            'Ù†ÙˆÙÙ…Ø¨Ø±',
            'Ø¯ÙŠØ³Ù…Ø¨Ø±',
        ];

    hooks.defineLocale('ar-dz', {
        months: months$1,
        monthsShort: months$1,
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/\u200FM/\u200FYYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¨Ø¹Ø¯ %s',
            past: 'Ù…Ù†Ø° %s',
            s: pluralize('s'),
            ss: pluralize('s'),
            m: pluralize('m'),
            mm: pluralize('m'),
            h: pluralize('h'),
            hh: pluralize('h'),
            d: pluralize('d'),
            dd: pluralize('d'),
            M: pluralize('M'),
            MM: pluralize('M'),
            y: pluralize('y'),
            yy: pluralize('y'),
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ar-kw', {
        months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥ØªÙ†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø§Ø­Ø¯_Ø§ØªÙ†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap = {
            1: '1',
            2: '2',
            3: '3',
            4: '4',
            5: '5',
            6: '6',
            7: '7',
            8: '8',
            9: '9',
            0: '0',
        },
        pluralForm$1 = function (n) {
            return n === 0
                ? 0
                : n === 1
                ? 1
                : n === 2
                ? 2
                : n % 100 >= 3 && n % 100 <= 10
                ? 3
                : n % 100 >= 11
                ? 4
                : 5;
        },
        plurals$1 = {
            s: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
                'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
                '%d Ø«ÙˆØ§Ù†',
                '%d Ø«Ø§Ù†ÙŠØ©',
                '%d Ø«Ø§Ù†ÙŠØ©',
            ],
            m: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
                'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
                '%d Ø¯Ù‚Ø§Ø¦Ù‚',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            ],
            h: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
                'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
                '%d Ø³Ø§Ø¹Ø§Øª',
                '%d Ø³Ø§Ø¹Ø©',
                '%d Ø³Ø§Ø¹Ø©',
            ],
            d: [
                'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
                'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
                ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
                '%d Ø£ÙŠØ§Ù…',
                '%d ÙŠÙˆÙ…Ù‹Ø§',
                '%d ÙŠÙˆÙ…',
            ],
            M: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
                'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
                ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
                '%d Ø£Ø´Ù‡Ø±',
                '%d Ø´Ù‡Ø±Ø§',
                '%d Ø´Ù‡Ø±',
            ],
            y: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
                'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
                ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
                '%d Ø£Ø¹ÙˆØ§Ù…',
                '%d Ø¹Ø§Ù…Ù‹Ø§',
                '%d Ø¹Ø§Ù…',
            ],
        },
        pluralize$1 = function (u) {
            return function (number, withoutSuffix, string, isFuture) {
                var f = pluralForm$1(number),
                    str = plurals$1[u][pluralForm$1(number)];
                if (f === 2) {
                    str = str[withoutSuffix ? 0 : 1];
                }
                return str.replace(/%d/i, number);
            };
        },
        months$2 = [
            'ÙŠÙ†Ø§ÙŠØ±',
            'ÙØ¨Ø±Ø§ÙŠØ±',
            'Ù…Ø§Ø±Ø³',
            'Ø£Ø¨Ø±ÙŠÙ„',
            'Ù…Ø§ÙŠÙˆ',
            'ÙŠÙˆÙ†ÙŠÙˆ',
            'ÙŠÙˆÙ„ÙŠÙˆ',
            'Ø£ØºØ³Ø·Ø³',
            'Ø³Ø¨ØªÙ…Ø¨Ø±',
            'Ø£ÙƒØªÙˆØ¨Ø±',
            'Ù†ÙˆÙÙ…Ø¨Ø±',
            'Ø¯ÙŠØ³Ù…Ø¨Ø±',
        ];

    hooks.defineLocale('ar-ly', {
        months: months$2,
        monthsShort: months$2,
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/\u200FM/\u200FYYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¨Ø¹Ø¯ %s',
            past: 'Ù…Ù†Ø° %s',
            s: pluralize$1('s'),
            ss: pluralize$1('s'),
            m: pluralize$1('m'),
            mm: pluralize$1('m'),
            h: pluralize$1('h'),
            hh: pluralize$1('h'),
            d: pluralize$1('d'),
            dd: pluralize$1('d'),
            M: pluralize$1('M'),
            MM: pluralize$1('M'),
            y: pluralize$1('y'),
            yy: pluralize$1('y'),
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ar-ma', {
        months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø§Ø­Ø¯_Ø§Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$1 = {
            1: 'Ù¡',
            2: 'Ù¢',
            3: 'Ù£',
            4: 'Ù¤',
            5: 'Ù¥',
            6: 'Ù¦',
            7: 'Ù§',
            8: 'Ù¨',
            9: 'Ù©',
            0: 'Ù ',
        },
        numberMap = {
            'Ù¡': '1',
            'Ù¢': '2',
            'Ù£': '3',
            'Ù¤': '4',
            'Ù¥': '5',
            'Ù¦': '6',
            'Ù§': '7',
            'Ù¨': '8',
            'Ù©': '9',
            'Ù ': '0',
        };

    hooks.defineLocale('ar-sa', {
        months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        preparse: function (string) {
            return string
                .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                    return numberMap[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap$1[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ar-tn', {
        months: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÙÙŠ %s',
            past: 'Ù…Ù†Ø° %s',
            s: 'Ø«ÙˆØ§Ù†',
            ss: '%d Ø«Ø§Ù†ÙŠØ©',
            m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
            mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            h: 'Ø³Ø§Ø¹Ø©',
            hh: '%d Ø³Ø§Ø¹Ø§Øª',
            d: 'ÙŠÙˆÙ…',
            dd: '%d Ø£ÙŠØ§Ù…',
            M: 'Ø´Ù‡Ø±',
            MM: '%d Ø£Ø´Ù‡Ø±',
            y: 'Ø³Ù†Ø©',
            yy: '%d Ø³Ù†ÙˆØ§Øª',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$2 = {
            1: 'Ù¡',
            2: 'Ù¢',
            3: 'Ù£',
            4: 'Ù¤',
            5: 'Ù¥',
            6: 'Ù¦',
            7: 'Ù§',
            8: 'Ù¨',
            9: 'Ù©',
            0: 'Ù ',
        },
        numberMap$1 = {
            'Ù¡': '1',
            'Ù¢': '2',
            'Ù£': '3',
            'Ù¤': '4',
            'Ù¥': '5',
            'Ù¦': '6',
            'Ù§': '7',
            'Ù¨': '8',
            'Ù©': '9',
            'Ù ': '0',
        },
        pluralForm$2 = function (n) {
            return n === 0
                ? 0
                : n === 1
                ? 1
                : n === 2
                ? 2
                : n % 100 >= 3 && n % 100 <= 10
                ? 3
                : n % 100 >= 11
                ? 4
                : 5;
        },
        plurals$2 = {
            s: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
                'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
                '%d Ø«ÙˆØ§Ù†',
                '%d Ø«Ø§Ù†ÙŠØ©',
                '%d Ø«Ø§Ù†ÙŠØ©',
            ],
            m: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
                'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
                '%d Ø¯Ù‚Ø§Ø¦Ù‚',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
                '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            ],
            h: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
                'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
                ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
                '%d Ø³Ø§Ø¹Ø§Øª',
                '%d Ø³Ø§Ø¹Ø©',
                '%d Ø³Ø§Ø¹Ø©',
            ],
            d: [
                'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
                'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
                ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
                '%d Ø£ÙŠØ§Ù…',
                '%d ÙŠÙˆÙ…Ù‹Ø§',
                '%d ÙŠÙˆÙ…',
            ],
            M: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
                'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
                ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
                '%d Ø£Ø´Ù‡Ø±',
                '%d Ø´Ù‡Ø±Ø§',
                '%d Ø´Ù‡Ø±',
            ],
            y: [
                'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
                'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
                ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
                '%d Ø£Ø¹ÙˆØ§Ù…',
                '%d Ø¹Ø§Ù…Ù‹Ø§',
                '%d Ø¹Ø§Ù…',
            ],
        },
        pluralize$2 = function (u) {
            return function (number, withoutSuffix, string, isFuture) {
                var f = pluralForm$2(number),
                    str = plurals$2[u][pluralForm$2(number)];
                if (f === 2) {
                    str = str[withoutSuffix ? 0 : 1];
                }
                return str.replace(/%d/i, number);
            };
        },
        months$3 = [
            'ÙŠÙ†Ø§ÙŠØ±',
            'ÙØ¨Ø±Ø§ÙŠØ±',
            'Ù…Ø§Ø±Ø³',
            'Ø£Ø¨Ø±ÙŠÙ„',
            'Ù…Ø§ÙŠÙˆ',
            'ÙŠÙˆÙ†ÙŠÙˆ',
            'ÙŠÙˆÙ„ÙŠÙˆ',
            'Ø£ØºØ³Ø·Ø³',
            'Ø³Ø¨ØªÙ…Ø¨Ø±',
            'Ø£ÙƒØªÙˆØ¨Ø±',
            'Ù†ÙˆÙÙ…Ø¨Ø±',
            'Ø¯ÙŠØ³Ù…Ø¨Ø±',
        ];

    hooks.defineLocale('ar', {
        months: months$3,
        monthsShort: months$3,
        weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
        weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
        weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/\u200FM/\u200FYYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Øµ|Ù…/,
        isPM: function (input) {
            return 'Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Øµ';
            } else {
                return 'Ù…';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¨Ø¹Ø¯ %s',
            past: 'Ù…Ù†Ø° %s',
            s: pluralize$2('s'),
            ss: pluralize$2('s'),
            m: pluralize$2('m'),
            mm: pluralize$2('m'),
            h: pluralize$2('h'),
            hh: pluralize$2('h'),
            d: pluralize$2('d'),
            dd: pluralize$2('d'),
            M: pluralize$2('M'),
            MM: pluralize$2('M'),
            y: pluralize$2('y'),
            yy: pluralize$2('y'),
        },
        preparse: function (string) {
            return string
                .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                    return numberMap$1[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap$2[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var suffixes = {
        1: '-inci',
        5: '-inci',
        8: '-inci',
        70: '-inci',
        80: '-inci',
        2: '-nci',
        7: '-nci',
        20: '-nci',
        50: '-nci',
        3: '-Ã¼ncÃ¼',
        4: '-Ã¼ncÃ¼',
        100: '-Ã¼ncÃ¼',
        6: '-ncÄ±',
        9: '-uncu',
        10: '-uncu',
        30: '-uncu',
        60: '-Ä±ncÄ±',
        90: '-Ä±ncÄ±',
    };

    hooks.defineLocale('az', {
        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
            '_'
        ),
        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
        weekdays: 'Bazar_Bazar ertÉ™si_Ã‡É™rÅŸÉ™nbÉ™ axÅŸamÄ±_Ã‡É™rÅŸÉ™nbÉ™_CÃ¼mÉ™ axÅŸamÄ±_CÃ¼mÉ™_ÅžÉ™nbÉ™'.split(
            '_'
        ),
        weekdaysShort: 'Baz_BzE_Ã‡Ax_Ã‡É™r_CAx_CÃ¼m_ÅžÉ™n'.split('_'),
        weekdaysMin: 'Bz_BE_Ã‡A_Ã‡É™_CA_CÃ¼_ÅžÉ™'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[bugÃ¼n saat] LT',
            nextDay: '[sabah saat] LT',
            nextWeek: '[gÉ™lÉ™n hÉ™ftÉ™] dddd [saat] LT',
            lastDay: '[dÃ¼nÉ™n] LT',
            lastWeek: '[keÃ§É™n hÉ™ftÉ™] dddd [saat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s sonra',
            past: '%s É™vvÉ™l',
            s: 'bir neÃ§É™ saniyÉ™',
            ss: '%d saniyÉ™',
            m: 'bir dÉ™qiqÉ™',
            mm: '%d dÉ™qiqÉ™',
            h: 'bir saat',
            hh: '%d saat',
            d: 'bir gÃ¼n',
            dd: '%d gÃ¼n',
            M: 'bir ay',
            MM: '%d ay',
            y: 'bir il',
            yy: '%d il',
        },
        meridiemParse: /gecÉ™|sÉ™hÉ™r|gÃ¼ndÃ¼z|axÅŸam/,
        isPM: function (input) {
            return /^(gÃ¼ndÃ¼z|axÅŸam)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'gecÉ™';
            } else if (hour < 12) {
                return 'sÉ™hÉ™r';
            } else if (hour < 17) {
                return 'gÃ¼ndÃ¼z';
            } else {
                return 'axÅŸam';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ä±ncÄ±|inci|nci|Ã¼ncÃ¼|ncÄ±|uncu)/,
        ordinal: function (number) {
            if (number === 0) {
                // special case for zero
                return number + '-Ä±ncÄ±';
            }
            var a = number % 10,
                b = (number % 100) - a,
                c = number >= 100 ? 100 : null;
            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function plural(word, num) {
        var forms = word.split('_');
        return num % 10 === 1 && num % 100 !== 11
            ? forms[0]
            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
            ? forms[1]
            : forms[2];
    }
    function relativeTimeWithPlural(number, withoutSuffix, key) {
        var format = {
            ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
            mm: withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½',
            hh: withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½',
            dd: 'Ð´Ð·ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð·Ñ‘Ð½',
            MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ñ‹_Ð¼ÐµÑÑÑ†Ð°Ñž',
            yy: 'Ð³Ð¾Ð´_Ð³Ð°Ð´Ñ‹_Ð³Ð°Ð´Ð¾Ñž',
        };
        if (key === 'm') {
            return withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ';
        } else if (key === 'h') {
            return withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ';
        } else {
            return number + ' ' + plural(format[key], +number);
        }
    }

    hooks.defineLocale('be', {
        months: {
            format: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½Ñ_Ð»ÑŽÑ‚Ð°Ð³Ð°_ÑÐ°ÐºÐ°Ð²Ñ–ÐºÐ°_ÐºÑ€Ð°ÑÐ°Ð²Ñ–ÐºÐ°_Ñ‚Ñ€Ð°ÑžÐ½Ñ_Ñ‡ÑÑ€Ð²ÐµÐ½Ñ_Ð»Ñ–Ð¿ÐµÐ½Ñ_Ð¶Ð½Ñ–ÑžÐ½Ñ_Ð²ÐµÑ€Ð°ÑÐ½Ñ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–ÐºÐ°_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´Ð°_ÑÐ½ÐµÐ¶Ð½Ñ'.split(
                '_'
            ),
            standalone: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ñ‹_ÑÐ°ÐºÐ°Ð²Ñ–Ðº_ÐºÑ€Ð°ÑÐ°Ð²Ñ–Ðº_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÑÑ€Ð²ÐµÐ½ÑŒ_Ð»Ñ–Ð¿ÐµÐ½ÑŒ_Ð¶Ð½Ñ–Ð²ÐµÐ½ÑŒ_Ð²ÐµÑ€Ð°ÑÐµÐ½ÑŒ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–Ðº_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´_ÑÐ½ÐµÐ¶Ð°Ð½ÑŒ'.split(
                '_'
            ),
        },
        monthsShort: 'ÑÑ‚ÑƒÐ´_Ð»ÑŽÑ‚_ÑÐ°Ðº_ÐºÑ€Ð°Ñ_Ñ‚Ñ€Ð°Ð²_Ñ‡ÑÑ€Ð²_Ð»Ñ–Ð¿_Ð¶Ð½Ñ–Ð²_Ð²ÐµÑ€_ÐºÐ°ÑÑ‚_Ð»Ñ–ÑÑ‚_ÑÐ½ÐµÐ¶'.split(
            '_'
        ),
        weekdays: {
            format: 'Ð½ÑÐ´Ð·ÐµÐ»ÑŽ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ñƒ_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ñƒ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
                '_'
            ),
            standalone: 'Ð½ÑÐ´Ð·ÐµÐ»Ñ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ð°_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ð°_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
                '_'
            ),
            isFormat: /\[ ?[Ð£ÑƒÑž] ?(?:Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½ÑƒÑŽ)? ?\] ?dddd/,
        },
        weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
        weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Ð³.',
            LLL: 'D MMMM YYYY Ð³., HH:mm',
            LLLL: 'dddd, D MMMM YYYY Ð³., HH:mm',
        },
        calendar: {
            sameDay: '[Ð¡Ñ‘Ð½Ð½Ñ Ñž] LT',
            nextDay: '[Ð—Ð°ÑžÑ‚Ñ€Ð° Ñž] LT',
            lastDay: '[Ð£Ñ‡Ð¾Ñ€Ð° Ñž] LT',
            nextWeek: function () {
                return '[Ð£] dddd [Ñž] LT';
            },
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 5:
                    case 6:
                        return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ] dddd [Ñž] LT';
                    case 1:
                    case 2:
                    case 4:
                        return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»Ñ‹] dddd [Ñž] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð¿Ñ€Ð°Ð· %s',
            past: '%s Ñ‚Ð°Ð¼Ñƒ',
            s: 'Ð½ÐµÐºÐ°Ð»ÑŒÐºÑ– ÑÐµÐºÑƒÐ½Ð´',
            m: relativeTimeWithPlural,
            mm: relativeTimeWithPlural,
            h: relativeTimeWithPlural,
            hh: relativeTimeWithPlural,
            d: 'Ð´Ð·ÐµÐ½ÑŒ',
            dd: relativeTimeWithPlural,
            M: 'Ð¼ÐµÑÑÑ†',
            MM: relativeTimeWithPlural,
            y: 'Ð³Ð¾Ð´',
            yy: relativeTimeWithPlural,
        },
        meridiemParse: /Ð½Ð¾Ñ‡Ñ‹|Ñ€Ð°Ð½Ñ–Ñ†Ñ‹|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°/,
        isPM: function (input) {
            return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'Ð½Ð¾Ñ‡Ñ‹';
            } else if (hour < 12) {
                return 'Ñ€Ð°Ð½Ñ–Ñ†Ñ‹';
            } else if (hour < 17) {
                return 'Ð´Ð½Ñ';
            } else {
                return 'Ð²ÐµÑ‡Ð°Ñ€Ð°';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ñ–|Ñ‹|Ð³Ð°)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'M':
                case 'd':
                case 'DDD':
                case 'w':
                case 'W':
                    return (number % 10 === 2 || number % 10 === 3) &&
                        number % 100 !== 12 &&
                        number % 100 !== 13
                        ? number + '-Ñ–'
                        : number + '-Ñ‹';
                case 'D':
                    return number + '-Ð³Ð°';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('bg', {
        months: 'ÑÐ½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
            '_'
        ),
        monthsShort: 'ÑÐ½Ñƒ_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
        weekdays: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÑÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÑŠÑ€Ñ‚ÑŠÐº_Ð¿ÐµÑ‚ÑŠÐº_ÑÑŠÐ±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ñ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÑŠÐ±'.split('_'),
        weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[Ð”Ð½ÐµÑ Ð²] LT',
            nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²] LT',
            nextWeek: 'dddd [Ð²] LT',
            lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 6:
                        return '[ÐœÐ¸Ð½Ð°Ð»Ð°Ñ‚Ð°] dddd [Ð²] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[ÐœÐ¸Ð½Ð°Ð»Ð¸Ñ] dddd [Ð²] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÑÐ»ÐµÐ´ %s',
            past: 'Ð¿Ñ€ÐµÐ´Ð¸ %s',
            s: 'Ð½ÑÐºÐ¾Ð»ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
            m: 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
            h: 'Ñ‡Ð°Ñ',
            hh: '%d Ñ‡Ð°ÑÐ°',
            d: 'Ð´ÐµÐ½',
            dd: '%d Ð´ÐµÐ½Ð°',
            w: 'ÑÐµÐ´Ð¼Ð¸Ñ†Ð°',
            ww: '%d ÑÐµÐ´Ð¼Ð¸Ñ†Ð¸',
            M: 'Ð¼ÐµÑÐµÑ†',
            MM: '%d Ð¼ÐµÑÐµÑ†Ð°',
            y: 'Ð³Ð¾Ð´Ð¸Ð½Ð°',
            yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
        ordinal: function (number) {
            var lastDigit = number % 10,
                last2Digits = number % 100;
            if (number === 0) {
                return number + '-ÐµÐ²';
            } else if (last2Digits === 0) {
                return number + '-ÐµÐ½';
            } else if (last2Digits > 10 && last2Digits < 20) {
                return number + '-Ñ‚Ð¸';
            } else if (lastDigit === 1) {
                return number + '-Ð²Ð¸';
            } else if (lastDigit === 2) {
                return number + '-Ñ€Ð¸';
            } else if (lastDigit === 7 || lastDigit === 8) {
                return number + '-Ð¼Ð¸';
            } else {
                return number + '-Ñ‚Ð¸';
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('bm', {
        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_MÉ›kalo_ZuwÉ›nkalo_Zuluyekalo_Utikalo_SÉ›tanburukalo_É”kutÉ”burukalo_Nowanburukalo_Desanburukalo'.split(
            '_'
        ),
        monthsShort: 'Zan_Few_Mar_Awi_MÉ›_Zuw_Zul_Uti_SÉ›t_É”ku_Now_Des'.split('_'),
        weekdays: 'Kari_NtÉ›nÉ›n_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
        weekdaysShort: 'Kar_NtÉ›_Tar_Ara_Ala_Jum_Sib'.split('_'),
        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'MMMM [tile] D [san] YYYY',
            LLL: 'MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
            LLLL: 'dddd MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
        },
        calendar: {
            sameDay: '[Bi lÉ›rÉ›] LT',
            nextDay: '[Sini lÉ›rÉ›] LT',
            nextWeek: 'dddd [don lÉ›rÉ›] LT',
            lastDay: '[Kunu lÉ›rÉ›] LT',
            lastWeek: 'dddd [tÉ›mÉ›nen lÉ›rÉ›] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s kÉ”nÉ”',
            past: 'a bÉ› %s bÉ”',
            s: 'sanga dama dama',
            ss: 'sekondi %d',
            m: 'miniti kelen',
            mm: 'miniti %d',
            h: 'lÉ›rÉ› kelen',
            hh: 'lÉ›rÉ› %d',
            d: 'tile kelen',
            dd: 'tile %d',
            M: 'kalo kelen',
            MM: 'kalo %d',
            y: 'san kelen',
            yy: 'san %d',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$3 = {
            1: 'à§§',
            2: 'à§¨',
            3: 'à§©',
            4: 'à§ª',
            5: 'à§«',
            6: 'à§¬',
            7: 'à§­',
            8: 'à§®',
            9: 'à§¯',
            0: 'à§¦',
        },
        numberMap$2 = {
            'à§§': '1',
            'à§¨': '2',
            'à§©': '3',
            'à§ª': '4',
            'à§«': '5',
            'à§¬': '6',
            'à§­': '7',
            'à§®': '8',
            'à§¯': '9',
            'à§¦': '0',
        };

    hooks.defineLocale('bn-bd', {
        months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
            '_'
        ),
        monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
            '_'
        ),
        weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
            '_'
        ),
        weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¦¸à¦®à§Ÿ',
            LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        },
        calendar: {
            sameDay: '[à¦†à¦œ] LT',
            nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
            lastWeek: '[à¦—à¦¤] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¦ªà¦°à§‡',
            past: '%s à¦†à¦—à§‡',
            s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
            hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
            d: 'à¦à¦• à¦¦à¦¿à¦¨',
            dd: '%d à¦¦à¦¿à¦¨',
            M: 'à¦à¦• à¦®à¦¾à¦¸',
            MM: '%d à¦®à¦¾à¦¸',
            y: 'à¦à¦• à¦¬à¦›à¦°',
            yy: '%d à¦¬à¦›à¦°',
        },
        preparse: function (string) {
            return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
                return numberMap$2[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$3[match];
            });
        },

        meridiemParse: /à¦°à¦¾à¦¤|à¦­à§‹à¦°|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦¸à¦¨à§à¦§à§à¦¯à¦¾|à¦°à¦¾à¦¤/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¦°à¦¾à¦¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¦­à§‹à¦°') {
                return hour;
            } else if (meridiem === 'à¦¸à¦•à¦¾à¦²') {
                return hour;
            } else if (meridiem === 'à¦¦à§à¦ªà§à¦°') {
                return hour >= 3 ? hour : hour + 12;
            } else if (meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²') {
                return hour + 12;
            } else if (meridiem === 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾') {
                return hour + 12;
            }
        },

        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¦°à¦¾à¦¤';
            } else if (hour < 6) {
                return 'à¦­à§‹à¦°';
            } else if (hour < 12) {
                return 'à¦¸à¦•à¦¾à¦²';
            } else if (hour < 15) {
                return 'à¦¦à§à¦ªà§à¦°';
            } else if (hour < 18) {
                return 'à¦¬à¦¿à¦•à¦¾à¦²';
            } else if (hour < 20) {
                return 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾';
            } else {
                return 'à¦°à¦¾à¦¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$4 = {
            1: 'à§§',
            2: 'à§¨',
            3: 'à§©',
            4: 'à§ª',
            5: 'à§«',
            6: 'à§¬',
            7: 'à§­',
            8: 'à§®',
            9: 'à§¯',
            0: 'à§¦',
        },
        numberMap$3 = {
            'à§§': '1',
            'à§¨': '2',
            'à§©': '3',
            'à§ª': '4',
            'à§«': '5',
            'à§¬': '6',
            'à§­': '7',
            'à§®': '8',
            'à§¯': '9',
            'à§¦': '0',
        };

    hooks.defineLocale('bn', {
        months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
            '_'
        ),
        monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
            '_'
        ),
        weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
            '_'
        ),
        weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¦¸à¦®à§Ÿ',
            LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        },
        calendar: {
            sameDay: '[à¦†à¦œ] LT',
            nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
            lastWeek: '[à¦—à¦¤] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¦ªà¦°à§‡',
            past: '%s à¦†à¦—à§‡',
            s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
            m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
            h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
            hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
            d: 'à¦à¦• à¦¦à¦¿à¦¨',
            dd: '%d à¦¦à¦¿à¦¨',
            M: 'à¦à¦• à¦®à¦¾à¦¸',
            MM: '%d à¦®à¦¾à¦¸',
            y: 'à¦à¦• à¦¬à¦›à¦°',
            yy: '%d à¦¬à¦›à¦°',
        },
        preparse: function (string) {
            return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
                return numberMap$3[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$4[match];
            });
        },
        meridiemParse: /à¦°à¦¾à¦¤|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦°à¦¾à¦¤/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                (meridiem === 'à¦°à¦¾à¦¤' && hour >= 4) ||
                (meridiem === 'à¦¦à§à¦ªà§à¦°' && hour < 5) ||
                meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²'
            ) {
                return hour + 12;
            } else {
                return hour;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¦°à¦¾à¦¤';
            } else if (hour < 10) {
                return 'à¦¸à¦•à¦¾à¦²';
            } else if (hour < 17) {
                return 'à¦¦à§à¦ªà§à¦°';
            } else if (hour < 20) {
                return 'à¦¬à¦¿à¦•à¦¾à¦²';
            } else {
                return 'à¦°à¦¾à¦¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$5 = {
            1: 'à¼¡',
            2: 'à¼¢',
            3: 'à¼£',
            4: 'à¼¤',
            5: 'à¼¥',
            6: 'à¼¦',
            7: 'à¼§',
            8: 'à¼¨',
            9: 'à¼©',
            0: 'à¼ ',
        },
        numberMap$4 = {
            'à¼¡': '1',
            'à¼¢': '2',
            'à¼£': '3',
            'à¼¤': '4',
            'à¼¥': '5',
            'à¼¦': '6',
            'à¼§': '7',
            'à¼¨': '8',
            'à¼©': '9',
            'à¼ ': '0',
        };

    hooks.defineLocale('bo', {
        months: 'à½Ÿà¾³à¼‹à½–à¼‹à½‘à½„à¼‹à½”à½¼_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½‰à½²à½¦à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½¦à½´à½˜à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½žà½²à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½£à¾”à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à¾²à½´à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½‘à½´à½“à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½¢à¾’à¾±à½‘à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à½‚à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½…à½²à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½‰à½²à½¦à¼‹à½”'.split(
            '_'
        ),
        monthsShort: 'à½Ÿà¾³à¼‹1_à½Ÿà¾³à¼‹2_à½Ÿà¾³à¼‹3_à½Ÿà¾³à¼‹4_à½Ÿà¾³à¼‹5_à½Ÿà¾³à¼‹6_à½Ÿà¾³à¼‹7_à½Ÿà¾³à¼‹8_à½Ÿà¾³à¼‹9_à½Ÿà¾³à¼‹10_à½Ÿà¾³à¼‹11_à½Ÿà¾³à¼‹12'.split(
            '_'
        ),
        monthsShortRegex: /^(à½Ÿà¾³à¼‹\d{1,2})/,
        monthsParseExact: true,
        weekdays: 'à½‚à½Ÿà½ à¼‹à½‰à½²à¼‹à½˜à¼‹_à½‚à½Ÿà½ à¼‹à½Ÿà¾³à¼‹à½–à¼‹_à½‚à½Ÿà½ à¼‹à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½‚à½Ÿà½ à¼‹à½£à¾·à½‚à¼‹à½”à¼‹_à½‚à½Ÿà½ à¼‹à½•à½´à½¢à¼‹à½–à½´_à½‚à½Ÿà½ à¼‹à½”à¼‹à½¦à½„à½¦à¼‹_à½‚à½Ÿà½ à¼‹à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
            '_'
        ),
        weekdaysShort: 'à½‰à½²à¼‹à½˜à¼‹_à½Ÿà¾³à¼‹à½–à¼‹_à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½£à¾·à½‚à¼‹à½”à¼‹_à½•à½´à½¢à¼‹à½–à½´_à½”à¼‹à½¦à½„à½¦à¼‹_à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
            '_'
        ),
        weekdaysMin: 'à½‰à½²_à½Ÿà¾³_à½˜à½²à½‚_à½£à¾·à½‚_à½•à½´à½¢_à½¦à½„à½¦_à½¦à¾¤à½ºà½“'.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm',
        },
        calendar: {
            sameDay: '[à½‘à½²à¼‹à½¢à½²à½„] LT',
            nextDay: '[à½¦à½„à¼‹à½‰à½²à½“] LT',
            nextWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½¢à¾—à½ºà½¦à¼‹à½˜], LT',
            lastDay: '[à½à¼‹à½¦à½„] LT',
            lastWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½˜à½à½ à¼‹à½˜] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à½£à¼‹',
            past: '%s à½¦à¾”à½“à¼‹à½£',
            s: 'à½£à½˜à¼‹à½¦à½„',
            ss: '%d à½¦à¾à½¢à¼‹à½†à¼',
            m: 'à½¦à¾à½¢à¼‹à½˜à¼‹à½‚à½…à½²à½‚',
            mm: '%d à½¦à¾à½¢à¼‹à½˜',
            h: 'à½†à½´à¼‹à½šà½¼à½‘à¼‹à½‚à½…à½²à½‚',
            hh: '%d à½†à½´à¼‹à½šà½¼à½‘',
            d: 'à½‰à½²à½“à¼‹à½‚à½…à½²à½‚',
            dd: '%d à½‰à½²à½“à¼‹',
            M: 'à½Ÿà¾³à¼‹à½–à¼‹à½‚à½…à½²à½‚',
            MM: '%d à½Ÿà¾³à¼‹à½–',
            y: 'à½£à½¼à¼‹à½‚à½…à½²à½‚',
            yy: '%d à½£à½¼',
        },
        preparse: function (string) {
            return string.replace(/[à¼¡à¼¢à¼£à¼¤à¼¥à¼¦à¼§à¼¨à¼©à¼ ]/g, function (match) {
                return numberMap$4[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$5[match];
            });
        },
        meridiemParse: /à½˜à½šà½“à¼‹à½˜à½¼|à½žà½¼à½‚à½¦à¼‹à½€à½¦|à½‰à½²à½“à¼‹à½‚à½´à½„|à½‘à½‚à½¼à½„à¼‹à½‘à½‚|à½˜à½šà½“à¼‹à½˜à½¼/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                (meridiem === 'à½˜à½šà½“à¼‹à½˜à½¼' && hour >= 4) ||
                (meridiem === 'à½‰à½²à½“à¼‹à½‚à½´à½„' && hour < 5) ||
                meridiem === 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚'
            ) {
                return hour + 12;
            } else {
                return hour;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à½˜à½šà½“à¼‹à½˜à½¼';
            } else if (hour < 10) {
                return 'à½žà½¼à½‚à½¦à¼‹à½€à½¦';
            } else if (hour < 17) {
                return 'à½‰à½²à½“à¼‹à½‚à½´à½„';
            } else if (hour < 20) {
                return 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚';
            } else {
                return 'à½˜à½šà½“à¼‹à½˜à½¼';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function relativeTimeWithMutation(number, withoutSuffix, key) {
        var format = {
            mm: 'munutenn',
            MM: 'miz',
            dd: 'devezh',
        };
        return number + ' ' + mutation(format[key], number);
    }
    function specialMutationForYears(number) {
        switch (lastNumber(number)) {
            case 1:
            case 3:
            case 4:
            case 5:
            case 9:
                return number + ' bloaz';
            default:
                return number + ' vloaz';
        }
    }
    function lastNumber(number) {
        if (number > 9) {
            return lastNumber(number % 10);
        }
        return number;
    }
    function mutation(text, number) {
        if (number === 2) {
            return softMutation(text);
        }
        return text;
    }
    function softMutation(text) {
        var mutationTable = {
            m: 'v',
            b: 'v',
            d: 'z',
        };
        if (mutationTable[text.charAt(0)] === undefined) {
            return text;
        }
        return mutationTable[text.charAt(0)] + text.substring(1);
    }

    var monthsParse = [
            /^gen/i,
            /^c[Ê¼\']hwe/i,
            /^meu/i,
            /^ebr/i,
            /^mae/i,
            /^(mez|eve)/i,
            /^gou/i,
            /^eos/i,
            /^gwe/i,
            /^her/i,
            /^du/i,
            /^ker/i,
        ],
        monthsRegex$1 = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
        monthsStrictRegex = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
        monthsShortStrictRegex = /^(gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
        fullWeekdaysParse = [
            /^sul/i,
            /^lun/i,
            /^meurzh/i,
            /^merc[Ê¼\']her/i,
            /^yaou/i,
            /^gwener/i,
            /^sadorn/i,
        ],
        shortWeekdaysParse = [
            /^Sul/i,
            /^Lun/i,
            /^Meu/i,
            /^Mer/i,
            /^Yao/i,
            /^Gwe/i,
            /^Sad/i,
        ],
        minWeekdaysParse = [
            /^Su/i,
            /^Lu/i,
            /^Me([^r]|$)/i,
            /^Mer/i,
            /^Ya/i,
            /^Gw/i,
            /^Sa/i,
        ];

    hooks.defineLocale('br', {
        months: 'Genver_CÊ¼hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
            '_'
        ),
        monthsShort: 'Gen_CÊ¼hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
        weekdays: 'Sul_Lun_Meurzh_MercÊ¼her_Yaou_Gwener_Sadorn'.split('_'),
        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
        weekdaysParse: minWeekdaysParse,
        fullWeekdaysParse: fullWeekdaysParse,
        shortWeekdaysParse: shortWeekdaysParse,
        minWeekdaysParse: minWeekdaysParse,

        monthsRegex: monthsRegex$1,
        monthsShortRegex: monthsRegex$1,
        monthsStrictRegex: monthsStrictRegex,
        monthsShortStrictRegex: monthsShortStrictRegex,
        monthsParse: monthsParse,
        longMonthsParse: monthsParse,
        shortMonthsParse: monthsParse,

        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [a viz] MMMM YYYY',
            LLL: 'D [a viz] MMMM YYYY HH:mm',
            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Hiziv da] LT',
            nextDay: '[WarcÊ¼hoazh da] LT',
            nextWeek: 'dddd [da] LT',
            lastDay: '[DecÊ¼h da] LT',
            lastWeek: 'dddd [paset da] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'a-benn %s',
            past: '%s Ê¼zo',
            s: 'un nebeud segondennoÃ¹',
            ss: '%d eilenn',
            m: 'ur vunutenn',
            mm: relativeTimeWithMutation,
            h: 'un eur',
            hh: '%d eur',
            d: 'un devezh',
            dd: relativeTimeWithMutation,
            M: 'ur miz',
            MM: relativeTimeWithMutation,
            y: 'ur bloaz',
            yy: specialMutationForYears,
        },
        dayOfMonthOrdinalParse: /\d{1,2}(aÃ±|vet)/,
        ordinal: function (number) {
            var output = number === 1 ? 'aÃ±' : 'vet';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
        isPM: function (token) {
            return token === 'g.m.';
        },
        meridiem: function (hour, minute, isLower) {
            return hour < 12 ? 'a.m.' : 'g.m.';
        },
    });

    //! moment.js locale configuration

    function translate(number, withoutSuffix, key) {
        var result = number + ' ';
        switch (key) {
            case 'ss':
                if (number === 1) {
                    result += 'sekunda';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sekunde';
                } else {
                    result += 'sekundi';
                }
                return result;
            case 'm':
                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
            case 'mm':
                if (number === 1) {
                    result += 'minuta';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'minute';
                } else {
                    result += 'minuta';
                }
                return result;
            case 'h':
                return withoutSuffix ? 'jedan sat' : 'jednog sata';
            case 'hh':
                if (number === 1) {
                    result += 'sat';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sata';
                } else {
                    result += 'sati';
                }
                return result;
            case 'dd':
                if (number === 1) {
                    result += 'dan';
                } else {
                    result += 'dana';
                }
                return result;
            case 'MM':
                if (number === 1) {
                    result += 'mjesec';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'mjeseca';
                } else {
                    result += 'mjeseci';
                }
                return result;
            case 'yy':
                if (number === 1) {
                    result += 'godina';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'godine';
                } else {
                    result += 'godina';
                }
                return result;
        }
    }

    hooks.defineLocale('bs', {
        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedjelju] [u] LT';
                    case 3:
                        return '[u] [srijedu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄer u] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                        return '[proÅ¡lu] dddd [u] LT';
                    case 6:
                        return '[proÅ¡le] [subote] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[proÅ¡li] dddd [u] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'par sekundi',
            ss: translate,
            m: translate,
            mm: translate,
            h: translate,
            hh: translate,
            d: 'dan',
            dd: translate,
            M: 'mjesec',
            MM: translate,
            y: 'godinu',
            yy: translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ca', {
        months: {
            standalone: 'gener_febrer_marÃ§_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
                '_'
            ),
            format: "de gener_de febrer_de marÃ§_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
                '_'
            ),
            isFormat: /D[oD]?(\s)+MMMM/,
        },
        monthsShort: 'gen._febr._marÃ§_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
            '_'
        ),
        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [de] YYYY',
            ll: 'D MMM YYYY',
            LLL: 'D MMMM [de] YYYY [a les] H:mm',
            lll: 'D MMM YYYY, H:mm',
            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
            llll: 'ddd D MMM YYYY, H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            nextDay: function () {
                return '[demÃ  a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            lastDay: function () {
                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [passat a ' +
                    (this.hours() !== 1 ? 'les' : 'la') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: "d'aquÃ­ %s",
            past: 'fa %s',
            s: 'uns segons',
            ss: '%d segons',
            m: 'un minut',
            mm: '%d minuts',
            h: 'una hora',
            hh: '%d hores',
            d: 'un dia',
            dd: '%d dies',
            M: 'un mes',
            MM: '%d mesos',
            y: 'un any',
            yy: '%d anys',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
        ordinal: function (number, period) {
            var output =
                number === 1
                    ? 'r'
                    : number === 2
                    ? 'n'
                    : number === 3
                    ? 'r'
                    : number === 4
                    ? 't'
                    : 'Ã¨';
            if (period === 'w' || period === 'W') {
                output = 'a';
            }
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$4 = 'leden_Ãºnor_bÅ™ezen_duben_kvÄ›ten_Äerven_Äervenec_srpen_zÃ¡Å™Ã­_Å™Ã­jen_listopad_prosinec'.split(
            '_'
        ),
        monthsShort = 'led_Ãºno_bÅ™e_dub_kvÄ›_Ävn_Ävc_srp_zÃ¡Å™_Å™Ã­j_lis_pro'.split('_'),
        monthsParse$1 = [
            /^led/i,
            /^Ãºno/i,
            /^bÅ™e/i,
            /^dub/i,
            /^kvÄ›/i,
            /^(Ävn|Äerven$|Äervna)/i,
            /^(Ävc|Äervenec|Äervence)/i,
            /^srp/i,
            /^zÃ¡Å™/i,
            /^Å™Ã­j/i,
            /^lis/i,
            /^pro/i,
        ],
        // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
        // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
        monthsRegex$2 = /^(leden|Ãºnor|bÅ™ezen|duben|kvÄ›ten|Äervenec|Äervence|Äerven|Äervna|srpen|zÃ¡Å™Ã­|Å™Ã­jen|listopad|prosinec|led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i;

    function plural$1(n) {
        return n > 1 && n < 5 && ~~(n / 10) !== 1;
    }
    function translate$1(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's': // a few seconds / in a few seconds / a few seconds ago
                return withoutSuffix || isFuture ? 'pÃ¡r sekund' : 'pÃ¡r sekundami';
            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'sekundy' : 'sekund');
                } else {
                    return result + 'sekundami';
                }
            case 'm': // a minute / in a minute / a minute ago
                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'minuty' : 'minut');
                } else {
                    return result + 'minutami';
                }
            case 'h': // an hour / in an hour / an hour ago
                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
            case 'hh': // 9 hours / in 9 hours / 9 hours ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'hodiny' : 'hodin');
                } else {
                    return result + 'hodinami';
                }
            case 'd': // a day / in a day / a day ago
                return withoutSuffix || isFuture ? 'den' : 'dnem';
            case 'dd': // 9 days / in 9 days / 9 days ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'dny' : 'dnÃ­');
                } else {
                    return result + 'dny';
                }
            case 'M': // a month / in a month / a month ago
                return withoutSuffix || isFuture ? 'mÄ›sÃ­c' : 'mÄ›sÃ­cem';
            case 'MM': // 9 months / in 9 months / 9 months ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'mÄ›sÃ­ce' : 'mÄ›sÃ­cÅ¯');
                } else {
                    return result + 'mÄ›sÃ­ci';
                }
            case 'y': // a year / in a year / a year ago
                return withoutSuffix || isFuture ? 'rok' : 'rokem';
            case 'yy': // 9 years / in 9 years / 9 years ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$1(number) ? 'roky' : 'let');
                } else {
                    return result + 'lety';
                }
        }
    }

    hooks.defineLocale('cs', {
        months: months$4,
        monthsShort: monthsShort,
        monthsRegex: monthsRegex$2,
        monthsShortRegex: monthsRegex$2,
        // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
        // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
        monthsStrictRegex: /^(leden|ledna|Ãºnora|Ãºnor|bÅ™ezen|bÅ™ezna|duben|dubna|kvÄ›ten|kvÄ›tna|Äervenec|Äervence|Äerven|Äervna|srpen|srpna|zÃ¡Å™Ã­|Å™Ã­jen|Å™Ã­jna|listopadu|listopad|prosinec|prosince)/i,
        monthsShortStrictRegex: /^(led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i,
        monthsParse: monthsParse$1,
        longMonthsParse: monthsParse$1,
        shortMonthsParse: monthsParse$1,
        weekdays: 'nedÄ›le_pondÄ›lÃ­_ÃºterÃ½_stÅ™eda_Ätvrtek_pÃ¡tek_sobota'.split('_'),
        weekdaysShort: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
        weekdaysMin: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd D. MMMM YYYY H:mm',
            l: 'D. M. YYYY',
        },
        calendar: {
            sameDay: '[dnes v] LT',
            nextDay: '[zÃ­tra v] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[v nedÄ›li v] LT';
                    case 1:
                    case 2:
                        return '[v] dddd [v] LT';
                    case 3:
                        return '[ve stÅ™edu v] LT';
                    case 4:
                        return '[ve Ätvrtek v] LT';
                    case 5:
                        return '[v pÃ¡tek v] LT';
                    case 6:
                        return '[v sobotu v] LT';
                }
            },
            lastDay: '[vÄera v] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[minulou nedÄ›li v] LT';
                    case 1:
                    case 2:
                        return '[minulÃ©] dddd [v] LT';
                    case 3:
                        return '[minulou stÅ™edu v] LT';
                    case 4:
                    case 5:
                        return '[minulÃ½] dddd [v] LT';
                    case 6:
                        return '[minulou sobotu v] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'pÅ™ed %s',
            s: translate$1,
            ss: translate$1,
            m: translate$1,
            mm: translate$1,
            h: translate$1,
            hh: translate$1,
            d: translate$1,
            dd: translate$1,
            M: translate$1,
            MM: translate$1,
            y: translate$1,
            yy: translate$1,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('cv', {
        months: 'ÐºÓ‘Ñ€Ð»Ð°Ñ‡_Ð½Ð°Ñ€Ó‘Ñ_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€Ñ‚Ð¼Ðµ_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€Ð»Ð°_Ð°Ð²Ó‘Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°ÑˆÑ‚Ð°Ð²'.split(
            '_'
        ),
        monthsShort: 'ÐºÓ‘Ñ€_Ð½Ð°Ñ€_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€_Ð°Ð²Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°Ñˆ'.split('_'),
        weekdays: 'Ð²Ñ‹Ñ€ÑÐ°Ñ€Ð½Ð¸ÐºÑƒÐ½_Ñ‚ÑƒÐ½Ñ‚Ð¸ÐºÑƒÐ½_Ñ‹Ñ‚Ð»Ð°Ñ€Ð¸ÐºÑƒÐ½_ÑŽÐ½ÐºÑƒÐ½_ÐºÓ—Ò«Ð½ÐµÑ€Ð½Ð¸ÐºÑƒÐ½_ÑÑ€Ð½ÐµÐºÑƒÐ½_ÑˆÓ‘Ð¼Ð°Ñ‚ÐºÑƒÐ½'.split(
            '_'
        ),
        weekdaysShort: 'Ð²Ñ‹Ñ€_Ñ‚ÑƒÐ½_Ñ‹Ñ‚Ð»_ÑŽÐ½_ÐºÓ—Ò«_ÑÑ€Ð½_ÑˆÓ‘Ð¼'.split('_'),
        weekdaysMin: 'Ð²Ñ€_Ñ‚Ð½_Ñ‹Ñ‚_ÑŽÐ½_ÐºÒ«_ÑÑ€_ÑˆÐ¼'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—]',
            LLL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
            LLLL: 'dddd, YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
        },
        calendar: {
            sameDay: '[ÐŸÐ°ÑÐ½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            nextDay: '[Ð«Ñ€Ð°Ð½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            lastDay: '[Ó–Ð½ÐµÑ€] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            nextWeek: '[ÒªÐ¸Ñ‚ÐµÑ] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            lastWeek: '[Ð˜Ñ€Ñ‚Ð½Ó—] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
            sameElse: 'L',
        },
        relativeTime: {
            future: function (output) {
                var affix = /ÑÐµÑ…ÐµÑ‚$/i.exec(output)
                    ? 'Ñ€ÐµÐ½'
                    : /Ò«ÑƒÐ»$/i.exec(output)
                    ? 'Ñ‚Ð°Ð½'
                    : 'Ñ€Ð°Ð½';
                return output + affix;
            },
            past: '%s ÐºÐ°ÑÐ»Ð»Ð°',
            s: 'Ð¿Ó—Ñ€-Ð¸Ðº Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
            ss: '%d Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
            m: 'Ð¿Ó—Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
            h: 'Ð¿Ó—Ñ€ ÑÐµÑ…ÐµÑ‚',
            hh: '%d ÑÐµÑ…ÐµÑ‚',
            d: 'Ð¿Ó—Ñ€ ÐºÑƒÐ½',
            dd: '%d ÐºÑƒÐ½',
            M: 'Ð¿Ó—Ñ€ ÑƒÐ¹Ó‘Ñ…',
            MM: '%d ÑƒÐ¹Ó‘Ñ…',
            y: 'Ð¿Ó—Ñ€ Ò«ÑƒÐ»',
            yy: '%d Ò«ÑƒÐ»',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-Ð¼Ó—Ñˆ/,
        ordinal: '%d-Ð¼Ó—Ñˆ',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('cy', {
        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
            '_'
        ),
        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
            '_'
        ),
        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
            '_'
        ),
        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
        weekdaysParseExact: true,
        // time formats are the same as en-gb
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Heddiw am] LT',
            nextDay: '[Yfory am] LT',
            nextWeek: 'dddd [am] LT',
            lastDay: '[Ddoe am] LT',
            lastWeek: 'dddd [diwethaf am] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'mewn %s',
            past: '%s yn Ã´l',
            s: 'ychydig eiliadau',
            ss: '%d eiliad',
            m: 'munud',
            mm: '%d munud',
            h: 'awr',
            hh: '%d awr',
            d: 'diwrnod',
            dd: '%d diwrnod',
            M: 'mis',
            MM: '%d mis',
            y: 'blwyddyn',
            yy: '%d flynedd',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
        ordinal: function (number) {
            var b = number,
                output = '',
                lookup = [
                    '',
                    'af',
                    'il',
                    'ydd',
                    'ydd',
                    'ed',
                    'ed',
                    'ed',
                    'fed',
                    'fed',
                    'fed', // 1af to 10fed
                    'eg',
                    'fed',
                    'eg',
                    'eg',
                    'fed',
                    'eg',
                    'eg',
                    'fed',
                    'eg',
                    'fed', // 11eg to 20fed
                ];
            if (b > 20) {
                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
                    output = 'fed'; // not 30ain, 70ain or 90ain
                } else {
                    output = 'ain';
                }
            } else if (b > 0) {
                output = lookup[b];
            }
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('da', {
        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
        weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
        weekdaysShort: 'sÃ¸n_man_tir_ons_tor_fre_lÃ¸r'.split('_'),
        weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
        },
        calendar: {
            sameDay: '[i dag kl.] LT',
            nextDay: '[i morgen kl.] LT',
            nextWeek: 'pÃ¥ dddd [kl.] LT',
            lastDay: '[i gÃ¥r kl.] LT',
            lastWeek: '[i] dddd[s kl.] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: '%s siden',
            s: 'fÃ¥ sekunder',
            ss: '%d sekunder',
            m: 'et minut',
            mm: '%d minutter',
            h: 'en time',
            hh: '%d timer',
            d: 'en dag',
            dd: '%d dage',
            M: 'en mÃ¥ned',
            MM: '%d mÃ¥neder',
            y: 'et Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }

    hooks.defineLocale('de-at', {
        months: 'JÃ¤nner_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'JÃ¤n._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
            '_'
        ),
        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]',
        },
        relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime,
            mm: '%d Minuten',
            h: processRelativeTime,
            hh: '%d Stunden',
            d: processRelativeTime,
            dd: processRelativeTime,
            w: processRelativeTime,
            ww: '%d Wochen',
            M: processRelativeTime,
            MM: processRelativeTime,
            y: processRelativeTime,
            yy: processRelativeTime,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$1(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }

    hooks.defineLocale('de-ch', {
        months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
            '_'
        ),
        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]',
        },
        relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime$1,
            mm: '%d Minuten',
            h: processRelativeTime$1,
            hh: '%d Stunden',
            d: processRelativeTime$1,
            dd: processRelativeTime$1,
            w: processRelativeTime$1,
            ww: '%d Wochen',
            M: processRelativeTime$1,
            MM: processRelativeTime$1,
            y: processRelativeTime$1,
            yy: processRelativeTime$1,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$2(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eine Minute', 'einer Minute'],
            h: ['eine Stunde', 'einer Stunde'],
            d: ['ein Tag', 'einem Tag'],
            dd: [number + ' Tage', number + ' Tagen'],
            w: ['eine Woche', 'einer Woche'],
            M: ['ein Monat', 'einem Monat'],
            MM: [number + ' Monate', number + ' Monaten'],
            y: ['ein Jahr', 'einem Jahr'],
            yy: [number + ' Jahre', number + ' Jahren'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }

    hooks.defineLocale('de', {
        months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
            '_'
        ),
        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY HH:mm',
            LLLL: 'dddd, D. MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[heute um] LT [Uhr]',
            sameElse: 'L',
            nextDay: '[morgen um] LT [Uhr]',
            nextWeek: 'dddd [um] LT [Uhr]',
            lastDay: '[gestern um] LT [Uhr]',
            lastWeek: '[letzten] dddd [um] LT [Uhr]',
        },
        relativeTime: {
            future: 'in %s',
            past: 'vor %s',
            s: 'ein paar Sekunden',
            ss: '%d Sekunden',
            m: processRelativeTime$2,
            mm: '%d Minuten',
            h: processRelativeTime$2,
            hh: '%d Stunden',
            d: processRelativeTime$2,
            dd: processRelativeTime$2,
            w: processRelativeTime$2,
            ww: '%d Wochen',
            M: processRelativeTime$2,
            MM: processRelativeTime$2,
            y: processRelativeTime$2,
            yy: processRelativeTime$2,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$5 = [
            'Þ–Þ¬Þ‚ÞªÞ‡Þ¦ÞƒÞ©',
            'ÞŠÞ¬Þ„Þ°ÞƒÞªÞ‡Þ¦ÞƒÞ©',
            'Þ‰Þ§ÞƒÞ¨Þ—Þª',
            'Þ‡Þ­Þ•Þ°ÞƒÞ©ÞÞª',
            'Þ‰Þ­',
            'Þ–Þ«Þ‚Þ°',
            'Þ–ÞªÞÞ¦Þ‡Þ¨',
            'Þ‡Þ¯ÞŽÞ¦ÞÞ°Þ“Þª',
            'ÞÞ¬Þ•Þ°Þ“Þ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
            'Þ‡Þ®Þ†Þ°Þ“Þ¯Þ„Þ¦ÞƒÞª',
            'Þ‚Þ®ÞˆÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
            'Þ‘Þ¨ÞÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
        ],
        weekdays = [
            'Þ‡Þ§Þ‹Þ¨Þ‡Þ°ÞŒÞ¦',
            'Þ€Þ¯Þ‰Þ¦',
            'Þ‡Þ¦Þ‚Þ°ÞŽÞ§ÞƒÞ¦',
            'Þ„ÞªÞ‹Þ¦',
            'Þ„ÞªÞƒÞ§ÞÞ°ÞŠÞ¦ÞŒÞ¨',
            'Þ€ÞªÞ†ÞªÞƒÞª',
            'Þ€Þ®Þ‚Þ¨Þ€Þ¨ÞƒÞª',
        ];

    hooks.defineLocale('dv', {
        months: months$5,
        monthsShort: months$5,
        weekdays: weekdays,
        weekdaysShort: weekdays,
        weekdaysMin: 'Þ‡Þ§Þ‹Þ¨_Þ€Þ¯Þ‰Þ¦_Þ‡Þ¦Þ‚Þ°_Þ„ÞªÞ‹Þ¦_Þ„ÞªÞƒÞ§_Þ€ÞªÞ†Þª_Þ€Þ®Þ‚Þ¨'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'D/M/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /Þ‰Þ†|Þ‰ÞŠ/,
        isPM: function (input) {
            return 'Þ‰ÞŠ' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Þ‰Þ†';
            } else {
                return 'Þ‰ÞŠ';
            }
        },
        calendar: {
            sameDay: '[Þ‰Þ¨Þ‡Þ¦Þ‹Þª] LT',
            nextDay: '[Þ‰Þ§Þ‹Þ¦Þ‰Þ§] LT',
            nextWeek: 'dddd LT',
            lastDay: '[Þ‡Þ¨Þ‡Þ°Þ”Þ¬] LT',
            lastWeek: '[ÞŠÞ§Þ‡Þ¨ÞŒÞªÞˆÞ¨] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ÞŒÞ¬ÞƒÞ­ÞŽÞ¦Þ‡Þ¨ %s',
            past: 'Þ†ÞªÞƒÞ¨Þ‚Þ° %s',
            s: 'ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞªÞ†Þ®Þ…Þ¬Þ‡Þ°',
            ss: 'd% ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞª',
            m: 'Þ‰Þ¨Þ‚Þ¨Þ“Þ¬Þ‡Þ°',
            mm: 'Þ‰Þ¨Þ‚Þ¨Þ“Þª %d',
            h: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞ¬Þ‡Þ°',
            hh: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞª %d',
            d: 'Þ‹ÞªÞˆÞ¦Þ€Þ¬Þ‡Þ°',
            dd: 'Þ‹ÞªÞˆÞ¦ÞÞ° %d',
            M: 'Þ‰Þ¦Þ€Þ¬Þ‡Þ°',
            MM: 'Þ‰Þ¦ÞÞ° %d',
            y: 'Þ‡Þ¦Þ€Þ¦ÞƒÞ¬Þ‡Þ°',
            yy: 'Þ‡Þ¦Þ€Þ¦ÞƒÞª %d',
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 7, // Sunday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function isFunction$1(input) {
        return (
            (typeof Function !== 'undefined' && input instanceof Function) ||
            Object.prototype.toString.call(input) === '[object Function]'
        );
    }

    hooks.defineLocale('el', {
        monthsNominativeEl: 'Î™Î±Î½Î¿Ï…Î¬ÏÎ¹Î¿Ï‚_Î¦ÎµÎ²ÏÎ¿Ï…Î¬ÏÎ¹Î¿Ï‚_ÎœÎ¬ÏÏ„Î¹Î¿Ï‚_Î‘Ï€ÏÎ¯Î»Î¹Î¿Ï‚_ÎœÎ¬Î¹Î¿Ï‚_Î™Î¿ÏÎ½Î¹Î¿Ï‚_Î™Î¿ÏÎ»Î¹Î¿Ï‚_Î‘ÏÎ³Î¿Ï…ÏƒÏ„Î¿Ï‚_Î£ÎµÏ€Ï„Î­Î¼Î²ÏÎ¹Î¿Ï‚_ÎŸÎºÏ„ÏŽÎ²ÏÎ¹Î¿Ï‚_ÎÎ¿Î­Î¼Î²ÏÎ¹Î¿Ï‚_Î”ÎµÎºÎ­Î¼Î²ÏÎ¹Î¿Ï‚'.split(
            '_'
        ),
        monthsGenitiveEl: 'Î™Î±Î½Î¿Ï…Î±ÏÎ¯Î¿Ï…_Î¦ÎµÎ²ÏÎ¿Ï…Î±ÏÎ¯Î¿Ï…_ÎœÎ±ÏÏ„Î¯Î¿Ï…_Î‘Ï€ÏÎ¹Î»Î¯Î¿Ï…_ÎœÎ±ÎÎ¿Ï…_Î™Î¿Ï…Î½Î¯Î¿Ï…_Î™Î¿Ï…Î»Î¯Î¿Ï…_Î‘Ï…Î³Î¿ÏÏƒÏ„Î¿Ï…_Î£ÎµÏ€Ï„ÎµÎ¼Î²ÏÎ¯Î¿Ï…_ÎŸÎºÏ„Ï‰Î²ÏÎ¯Î¿Ï…_ÎÎ¿ÎµÎ¼Î²ÏÎ¯Î¿Ï…_Î”ÎµÎºÎµÎ¼Î²ÏÎ¯Î¿Ï…'.split(
            '_'
        ),
        months: function (momentToFormat, format) {
            if (!momentToFormat) {
                return this._monthsNominativeEl;
            } else if (
                typeof format === 'string' &&
                /D/.test(format.substring(0, format.indexOf('MMMM')))
            ) {
                // if there is a day number before 'MMMM'
                return this._monthsGenitiveEl[momentToFormat.month()];
            } else {
                return this._monthsNominativeEl[momentToFormat.month()];
            }
        },
        monthsShort: 'Î™Î±Î½_Î¦ÎµÎ²_ÎœÎ±Ï_Î‘Ï€Ï_ÎœÎ±ÏŠ_Î™Î¿Ï…Î½_Î™Î¿Ï…Î»_Î‘Ï…Î³_Î£ÎµÏ€_ÎŸÎºÏ„_ÎÎ¿Îµ_Î”ÎµÎº'.split('_'),
        weekdays: 'ÎšÏ…ÏÎ¹Î±ÎºÎ®_Î”ÎµÏ…Ï„Î­ÏÎ±_Î¤ÏÎ¯Ï„Î·_Î¤ÎµÏ„Î¬ÏÏ„Î·_Î Î­Î¼Ï€Ï„Î·_Î Î±ÏÎ±ÏƒÎºÎµÏ…Î®_Î£Î¬Î²Î²Î±Ï„Î¿'.split(
            '_'
        ),
        weekdaysShort: 'ÎšÏ…Ï_Î”ÎµÏ…_Î¤ÏÎ¹_Î¤ÎµÏ„_Î ÎµÎ¼_Î Î±Ï_Î£Î±Î²'.split('_'),
        weekdaysMin: 'ÎšÏ…_Î”Îµ_Î¤Ï_Î¤Îµ_Î Îµ_Î Î±_Î£Î±'.split('_'),
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? 'Î¼Î¼' : 'ÎœÎœ';
            } else {
                return isLower ? 'Ï€Î¼' : 'Î Îœ';
            }
        },
        isPM: function (input) {
            return (input + '').toLowerCase()[0] === 'Î¼';
        },
        meridiemParse: /[Î Îœ]\.?Îœ?\.?/i,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendarEl: {
            sameDay: '[Î£Î®Î¼ÎµÏÎ± {}] LT',
            nextDay: '[Î‘ÏÏÎ¹Î¿ {}] LT',
            nextWeek: 'dddd [{}] LT',
            lastDay: '[Î§Î¸ÎµÏ‚ {}] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 6:
                        return '[Ï„Î¿ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î¿] dddd [{}] LT';
                    default:
                        return '[Ï„Î·Î½ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î·] dddd [{}] LT';
                }
            },
            sameElse: 'L',
        },
        calendar: function (key, mom) {
            var output = this._calendarEl[key],
                hours = mom && mom.hours();
            if (isFunction$1(output)) {
                output = output.apply(mom);
            }
            return output.replace('{}', hours % 12 === 1 ? 'ÏƒÏ„Î·' : 'ÏƒÏ„Î¹Ï‚');
        },
        relativeTime: {
            future: 'ÏƒÎµ %s',
            past: '%s Ï€ÏÎ¹Î½',
            s: 'Î»Î¯Î³Î± Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
            ss: '%d Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
            m: 'Î­Î½Î± Î»ÎµÏ€Ï„ÏŒ',
            mm: '%d Î»ÎµÏ€Ï„Î¬',
            h: 'Î¼Î¯Î± ÏŽÏÎ±',
            hh: '%d ÏŽÏÎµÏ‚',
            d: 'Î¼Î¯Î± Î¼Î­ÏÎ±',
            dd: '%d Î¼Î­ÏÎµÏ‚',
            M: 'Î­Î½Î±Ï‚ Î¼Î®Î½Î±Ï‚',
            MM: '%d Î¼Î®Î½ÎµÏ‚',
            y: 'Î­Î½Î±Ï‚ Ï‡ÏÏŒÎ½Î¿Ï‚',
            yy: '%d Ï‡ÏÏŒÎ½Î¹Î±',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Î·/,
        ordinal: '%dÎ·',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4st is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('en-au', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('en-ca', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'YYYY-MM-DD',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY h:mm A',
            LLLL: 'dddd, MMMM D, YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('en-gb', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('en-ie', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('en-il', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('en-in', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 1st is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('en-nz', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('en-sg', {
        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Today at] LT',
            nextDay: '[Tomorrow at] LT',
            nextWeek: 'dddd [at] LT',
            lastDay: '[Yesterday at] LT',
            lastWeek: '[Last] dddd [at] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'in %s',
            past: '%s ago',
            s: 'a few seconds',
            ss: '%d seconds',
            m: 'a minute',
            mm: '%d minutes',
            h: 'an hour',
            hh: '%d hours',
            d: 'a day',
            dd: '%d days',
            M: 'a month',
            MM: '%d months',
            y: 'a year',
            yy: '%d years',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('eo', {
        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aÅ­g_sept_okt_nov_dec'.split('_'),
        weekdays: 'dimanÄ‰o_lundo_mardo_merkredo_ÄµaÅ­do_vendredo_sabato'.split('_'),
        weekdaysShort: 'dim_lun_mard_merk_ÄµaÅ­_ven_sab'.split('_'),
        weekdaysMin: 'di_lu_ma_me_Äµa_ve_sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: '[la] D[-an de] MMMM, YYYY',
            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
        },
        meridiemParse: /[ap]\.t\.m/i,
        isPM: function (input) {
            return input.charAt(0).toLowerCase() === 'p';
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? 'p.t.m.' : 'P.T.M.';
            } else {
                return isLower ? 'a.t.m.' : 'A.T.M.';
            }
        },
        calendar: {
            sameDay: '[HodiaÅ­ je] LT',
            nextDay: '[MorgaÅ­ je] LT',
            nextWeek: 'dddd[n je] LT',
            lastDay: '[HieraÅ­ je] LT',
            lastWeek: '[pasintan] dddd[n je] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'post %s',
            past: 'antaÅ­ %s',
            s: 'kelkaj sekundoj',
            ss: '%d sekundoj',
            m: 'unu minuto',
            mm: '%d minutoj',
            h: 'unu horo',
            hh: '%d horoj',
            d: 'unu tago', //ne 'diurno', Ä‰ar estas uzita por proksimumo
            dd: '%d tagoj',
            M: 'unu monato',
            MM: '%d monatoj',
            y: 'unu jaro',
            yy: '%d jaroj',
        },
        dayOfMonthOrdinalParse: /\d{1,2}a/,
        ordinal: '%da',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse$2 = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex$3 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    hooks.defineLocale('es-do', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot;
            } else if (/-MMM-/.test(format)) {
                return monthsShort$1[m.month()];
            } else {
                return monthsShortDot[m.month()];
            }
        },
        monthsRegex: monthsRegex$3,
        monthsShortRegex: monthsRegex$3,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse$2,
        longMonthsParse: monthsParse$2,
        shortMonthsParse: monthsParse$2,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY h:mm A',
            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse$3 = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex$4 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    hooks.defineLocale('es-mx', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot$1;
            } else if (/-MMM-/.test(format)) {
                return monthsShort$2[m.month()];
            } else {
                return monthsShortDot$1[m.month()];
            }
        },
        monthsRegex: monthsRegex$4,
        monthsShortRegex: monthsRegex$4,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse$3,
        longMonthsParse: monthsParse$3,
        shortMonthsParse: monthsParse$3,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
        invalidDate: 'Fecha invÃ¡lida',
    });

    //! moment.js locale configuration

    var monthsShortDot$2 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse$4 = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex$5 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    hooks.defineLocale('es-us', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot$2;
            } else if (/-MMM-/.test(format)) {
                return monthsShort$3[m.month()];
            } else {
                return monthsShortDot$2[m.month()];
            }
        },
        monthsRegex: monthsRegex$5,
        monthsShortRegex: monthsRegex$5,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse$4,
        longMonthsParse: monthsParse$4,
        shortMonthsParse: monthsParse$4,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'MM/DD/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY h:mm A',
            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortDot$3 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
            '_'
        ),
        monthsShort$4 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
        monthsParse$5 = [
            /^ene/i,
            /^feb/i,
            /^mar/i,
            /^abr/i,
            /^may/i,
            /^jun/i,
            /^jul/i,
            /^ago/i,
            /^sep/i,
            /^oct/i,
            /^nov/i,
            /^dic/i,
        ],
        monthsRegex$6 = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

    hooks.defineLocale('es', {
        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortDot$3;
            } else if (/-MMM-/.test(format)) {
                return monthsShort$4[m.month()];
            } else {
                return monthsShortDot$3[m.month()];
            }
        },
        monthsRegex: monthsRegex$6,
        monthsShortRegex: monthsRegex$6,
        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
        monthsParse: monthsParse$5,
        longMonthsParse: monthsParse$5,
        shortMonthsParse: monthsParse$5,
        weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastDay: function () {
                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[el] dddd [pasado a la' +
                    (this.hours() !== 1 ? 's' : '') +
                    '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'en %s',
            past: 'hace %s',
            s: 'unos segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'una hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            w: 'una semana',
            ww: '%d semanas',
            M: 'un mes',
            MM: '%d meses',
            y: 'un aÃ±o',
            yy: '%d aÃ±os',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
        invalidDate: 'Fecha invÃ¡lida',
    });

    //! moment.js locale configuration

    function processRelativeTime$3(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['mÃµne sekundi', 'mÃµni sekund', 'paar sekundit'],
            ss: [number + 'sekundi', number + 'sekundit'],
            m: ['Ã¼he minuti', 'Ã¼ks minut'],
            mm: [number + ' minuti', number + ' minutit'],
            h: ['Ã¼he tunni', 'tund aega', 'Ã¼ks tund'],
            hh: [number + ' tunni', number + ' tundi'],
            d: ['Ã¼he pÃ¤eva', 'Ã¼ks pÃ¤ev'],
            M: ['kuu aja', 'kuu aega', 'Ã¼ks kuu'],
            MM: [number + ' kuu', number + ' kuud'],
            y: ['Ã¼he aasta', 'aasta', 'Ã¼ks aasta'],
            yy: [number + ' aasta', number + ' aastat'],
        };
        if (withoutSuffix) {
            return format[key][2] ? format[key][2] : format[key][1];
        }
        return isFuture ? format[key][0] : format[key][1];
    }

    hooks.defineLocale('et', {
        months: 'jaanuar_veebruar_mÃ¤rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
            '_'
        ),
        monthsShort: 'jaan_veebr_mÃ¤rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(
            '_'
        ),
        weekdays: 'pÃ¼hapÃ¤ev_esmaspÃ¤ev_teisipÃ¤ev_kolmapÃ¤ev_neljapÃ¤ev_reede_laupÃ¤ev'.split(
            '_'
        ),
        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[TÃ¤na,] LT',
            nextDay: '[Homme,] LT',
            nextWeek: '[JÃ¤rgmine] dddd LT',
            lastDay: '[Eile,] LT',
            lastWeek: '[Eelmine] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s pÃ¤rast',
            past: '%s tagasi',
            s: processRelativeTime$3,
            ss: processRelativeTime$3,
            m: processRelativeTime$3,
            mm: processRelativeTime$3,
            h: processRelativeTime$3,
            hh: processRelativeTime$3,
            d: processRelativeTime$3,
            dd: '%d pÃ¤eva',
            M: processRelativeTime$3,
            MM: processRelativeTime$3,
            y: processRelativeTime$3,
            yy: processRelativeTime$3,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('eu', {
        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
            '_'
        ),
        monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
            '_'
        ),
        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY[ko] MMMM[ren] D[a]',
            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
            l: 'YYYY-M-D',
            ll: 'YYYY[ko] MMM D[a]',
            lll: 'YYYY[ko] MMM D[a] HH:mm',
            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
        },
        calendar: {
            sameDay: '[gaur] LT[etan]',
            nextDay: '[bihar] LT[etan]',
            nextWeek: 'dddd LT[etan]',
            lastDay: '[atzo] LT[etan]',
            lastWeek: '[aurreko] dddd LT[etan]',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s barru',
            past: 'duela %s',
            s: 'segundo batzuk',
            ss: '%d segundo',
            m: 'minutu bat',
            mm: '%d minutu',
            h: 'ordu bat',
            hh: '%d ordu',
            d: 'egun bat',
            dd: '%d egun',
            M: 'hilabete bat',
            MM: '%d hilabete',
            y: 'urte bat',
            yy: '%d urte',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$6 = {
            1: 'Û±',
            2: 'Û²',
            3: 'Û³',
            4: 'Û´',
            5: 'Ûµ',
            6: 'Û¶',
            7: 'Û·',
            8: 'Û¸',
            9: 'Û¹',
            0: 'Û°',
        },
        numberMap$5 = {
            'Û±': '1',
            'Û²': '2',
            'Û³': '3',
            'Û´': '4',
            'Ûµ': '5',
            'Û¶': '6',
            'Û·': '7',
            'Û¸': '8',
            'Û¹': '9',
            'Û°': '0',
        };

    hooks.defineLocale('fa', {
        months: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
            '_'
        ),
        monthsShort: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
            '_'
        ),
        weekdays: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
            '_'
        ),
        weekdaysShort: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
            '_'
        ),
        weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ø¬_Ø´'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        meridiemParse: /Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±|Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/,
        isPM: function (input) {
            return /Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±';
            } else {
                return 'Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±';
            }
        },
        calendar: {
            sameDay: '[Ø§Ù…Ø±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
            nextDay: '[ÙØ±Ø¯Ø§ Ø³Ø§Ø¹Øª] LT',
            nextWeek: 'dddd [Ø³Ø§Ø¹Øª] LT',
            lastDay: '[Ø¯ÛŒØ±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
            lastWeek: 'dddd [Ù¾ÛŒØ´] [Ø³Ø§Ø¹Øª] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ø¯Ø± %s',
            past: '%s Ù¾ÛŒØ´',
            s: 'Ú†Ù†Ø¯ Ø«Ø§Ù†ÛŒÙ‡',
            ss: '%d Ø«Ø§Ù†ÛŒÙ‡',
            m: 'ÛŒÚ© Ø¯Ù‚ÛŒÙ‚Ù‡',
            mm: '%d Ø¯Ù‚ÛŒÙ‚Ù‡',
            h: 'ÛŒÚ© Ø³Ø§Ø¹Øª',
            hh: '%d Ø³Ø§Ø¹Øª',
            d: 'ÛŒÚ© Ø±ÙˆØ²',
            dd: '%d Ø±ÙˆØ²',
            M: 'ÛŒÚ© Ù…Ø§Ù‡',
            MM: '%d Ù…Ø§Ù‡',
            y: 'ÛŒÚ© Ø³Ø§Ù„',
            yy: '%d Ø³Ø§Ù„',
        },
        preparse: function (string) {
            return string
                .replace(/[Û°-Û¹]/g, function (match) {
                    return numberMap$5[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap$6[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        dayOfMonthOrdinalParse: /\d{1,2}Ù…/,
        ordinal: '%dÙ…',
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var numbersPast = 'nolla yksi kaksi kolme neljÃ¤ viisi kuusi seitsemÃ¤n kahdeksan yhdeksÃ¤n'.split(
            ' '
        ),
        numbersFuture = [
            'nolla',
            'yhden',
            'kahden',
            'kolmen',
            'neljÃ¤n',
            'viiden',
            'kuuden',
            numbersPast[7],
            numbersPast[8],
            numbersPast[9],
        ];
    function translate$2(number, withoutSuffix, key, isFuture) {
        var result = '';
        switch (key) {
            case 's':
                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
            case 'ss':
                result = isFuture ? 'sekunnin' : 'sekuntia';
                break;
            case 'm':
                return isFuture ? 'minuutin' : 'minuutti';
            case 'mm':
                result = isFuture ? 'minuutin' : 'minuuttia';
                break;
            case 'h':
                return isFuture ? 'tunnin' : 'tunti';
            case 'hh':
                result = isFuture ? 'tunnin' : 'tuntia';
                break;
            case 'd':
                return isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤';
            case 'dd':
                result = isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤Ã¤';
                break;
            case 'M':
                return isFuture ? 'kuukauden' : 'kuukausi';
            case 'MM':
                result = isFuture ? 'kuukauden' : 'kuukautta';
                break;
            case 'y':
                return isFuture ? 'vuoden' : 'vuosi';
            case 'yy':
                result = isFuture ? 'vuoden' : 'vuotta';
                break;
        }
        result = verbalNumber(number, isFuture) + ' ' + result;
        return result;
    }
    function verbalNumber(number, isFuture) {
        return number < 10
            ? isFuture
                ? numbersFuture[number]
                : numbersPast[number]
            : number;
    }

    hooks.defineLocale('fi', {
        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesÃ¤kuu_heinÃ¤kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
            '_'
        ),
        monthsShort: 'tammi_helmi_maalis_huhti_touko_kesÃ¤_heinÃ¤_elo_syys_loka_marras_joulu'.split(
            '_'
        ),
        weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
            '_'
        ),
        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD.MM.YYYY',
            LL: 'Do MMMM[ta] YYYY',
            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
            l: 'D.M.YYYY',
            ll: 'Do MMM YYYY',
            lll: 'Do MMM YYYY, [klo] HH.mm',
            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
        },
        calendar: {
            sameDay: '[tÃ¤nÃ¤Ã¤n] [klo] LT',
            nextDay: '[huomenna] [klo] LT',
            nextWeek: 'dddd [klo] LT',
            lastDay: '[eilen] [klo] LT',
            lastWeek: '[viime] dddd[na] [klo] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s pÃ¤Ã¤stÃ¤',
            past: '%s sitten',
            s: translate$2,
            ss: translate$2,
            m: translate$2,
            mm: translate$2,
            h: translate$2,
            hh: translate$2,
            d: translate$2,
            dd: translate$2,
            M: translate$2,
            MM: translate$2,
            y: translate$2,
            yy: translate$2,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('fil', {
        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
            '_'
        ),
        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
            '_'
        ),
        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'MM/D/YYYY',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY HH:mm',
            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
        },
        calendar: {
            sameDay: 'LT [ngayong araw]',
            nextDay: '[Bukas ng] LT',
            nextWeek: 'LT [sa susunod na] dddd',
            lastDay: 'LT [kahapon]',
            lastWeek: 'LT [noong nakaraang] dddd',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'sa loob ng %s',
            past: '%s ang nakalipas',
            s: 'ilang segundo',
            ss: '%d segundo',
            m: 'isang minuto',
            mm: '%d minuto',
            h: 'isang oras',
            hh: '%d oras',
            d: 'isang araw',
            dd: '%d araw',
            M: 'isang buwan',
            MM: '%d buwan',
            y: 'isang taon',
            yy: '%d taon',
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: function (number) {
            return number;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('fo', {
        months: 'januar_februar_mars_aprÃ­l_mai_juni_juli_august_september_oktober_november_desember'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
        weekdays: 'sunnudagur_mÃ¡nadagur_tÃ½sdagur_mikudagur_hÃ³sdagur_frÃ­ggjadagur_leygardagur'.split(
            '_'
        ),
        weekdaysShort: 'sun_mÃ¡n_tÃ½s_mik_hÃ³s_frÃ­_ley'.split('_'),
        weekdaysMin: 'su_mÃ¡_tÃ½_mi_hÃ³_fr_le'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D. MMMM, YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ã dag kl.] LT',
            nextDay: '[Ã morgin kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[Ã gjÃ¡r kl.] LT',
            lastWeek: '[sÃ­Ã°stu] dddd [kl] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'um %s',
            past: '%s sÃ­Ã°ani',
            s: 'fÃ¡ sekund',
            ss: '%d sekundir',
            m: 'ein minuttur',
            mm: '%d minuttir',
            h: 'ein tÃ­mi',
            hh: '%d tÃ­mar',
            d: 'ein dagur',
            dd: '%d dagar',
            M: 'ein mÃ¡naÃ°ur',
            MM: '%d mÃ¡naÃ°ir',
            y: 'eitt Ã¡r',
            yy: '%d Ã¡r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('fr-ca', {
        months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
            '_'
        ),
        monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Aujourdâ€™hui Ã ] LT',
            nextDay: '[Demain Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[Hier Ã ] LT',
            lastWeek: 'dddd [dernier Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
        ordinal: function (number, period) {
            switch (period) {
                // Words with masculine grammatical gender: mois, trimestre, jour
                default:
                case 'M':
                case 'Q':
                case 'D':
                case 'DDD':
                case 'd':
                    return number + (number === 1 ? 'er' : 'e');

                // Words with feminine grammatical gender: semaine
                case 'w':
                case 'W':
                    return number + (number === 1 ? 're' : 'e');
            }
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('fr-ch', {
        months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
            '_'
        ),
        monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Aujourdâ€™hui Ã ] LT',
            nextDay: '[Demain Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[Hier Ã ] LT',
            lastWeek: 'dddd [dernier Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
        ordinal: function (number, period) {
            switch (period) {
                // Words with masculine grammatical gender: mois, trimestre, jour
                default:
                case 'M':
                case 'Q':
                case 'D':
                case 'DDD':
                case 'd':
                    return number + (number === 1 ? 'er' : 'e');

                // Words with feminine grammatical gender: semaine
                case 'w':
                case 'W':
                    return number + (number === 1 ? 're' : 'e');
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsStrictRegex$1 = /^(janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
        monthsShortStrictRegex$1 = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?)/i,
        monthsRegex$7 = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?|janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
        monthsParse$6 = [
            /^janv/i,
            /^fÃ©vr/i,
            /^mars/i,
            /^avr/i,
            /^mai/i,
            /^juin/i,
            /^juil/i,
            /^aoÃ»t/i,
            /^sept/i,
            /^oct/i,
            /^nov/i,
            /^dÃ©c/i,
        ];

    hooks.defineLocale('fr', {
        months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
            '_'
        ),
        monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
            '_'
        ),
        monthsRegex: monthsRegex$7,
        monthsShortRegex: monthsRegex$7,
        monthsStrictRegex: monthsStrictRegex$1,
        monthsShortStrictRegex: monthsShortStrictRegex$1,
        monthsParse: monthsParse$6,
        longMonthsParse: monthsParse$6,
        shortMonthsParse: monthsParse$6,
        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Aujourdâ€™hui Ã ] LT',
            nextDay: '[Demain Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[Hier Ã ] LT',
            lastWeek: 'dddd [dernier Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dans %s',
            past: 'il y a %s',
            s: 'quelques secondes',
            ss: '%d secondes',
            m: 'une minute',
            mm: '%d minutes',
            h: 'une heure',
            hh: '%d heures',
            d: 'un jour',
            dd: '%d jours',
            w: 'une semaine',
            ww: '%d semaines',
            M: 'un mois',
            MM: '%d mois',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
        ordinal: function (number, period) {
            switch (period) {
                // TODO: Return 'e' when day of month > 1. Move this case inside
                // block for masculine words below.
                // See https://github.com/moment/moment/issues/3375
                case 'D':
                    return number + (number === 1 ? 'er' : '');

                // Words with masculine grammatical gender: mois, trimestre, jour
                default:
                case 'M':
                case 'Q':
                case 'DDD':
                case 'd':
                    return number + (number === 1 ? 'er' : 'e');

                // Words with feminine grammatical gender: semaine
                case 'w':
                case 'W':
                    return number + (number === 1 ? 're' : 'e');
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(
            '_'
        ),
        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(
            '_'
        );

    hooks.defineLocale('fy', {
        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortWithDots;
            } else if (/-MMM-/.test(format)) {
                return monthsShortWithoutDots[m.month()];
            } else {
                return monthsShortWithDots[m.month()];
            }
        },
        monthsParseExact: true,
        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
            '_'
        ),
        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[hjoed om] LT',
            nextDay: '[moarn om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[juster om] LT',
            lastWeek: '[Ã´frÃ»ne] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'oer %s',
            past: '%s lyn',
            s: 'in pear sekonden',
            ss: '%d sekonden',
            m: 'ien minÃºt',
            mm: '%d minuten',
            h: 'ien oere',
            hh: '%d oeren',
            d: 'ien dei',
            dd: '%d dagen',
            M: 'ien moanne',
            MM: '%d moannen',
            y: 'ien jier',
            yy: '%d jierren',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            );
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$6 = [
            'EanÃ¡ir',
            'Feabhra',
            'MÃ¡rta',
            'AibreÃ¡n',
            'Bealtaine',
            'Meitheamh',
            'IÃºil',
            'LÃºnasa',
            'MeÃ¡n FÃ³mhair',
            'Deireadh FÃ³mhair',
            'Samhain',
            'Nollaig',
        ],
        monthsShort$5 = [
            'Ean',
            'Feabh',
            'MÃ¡rt',
            'Aib',
            'Beal',
            'Meith',
            'IÃºil',
            'LÃºn',
            'M.F.',
            'D.F.',
            'Samh',
            'Noll',
        ],
        weekdays$1 = [
            'DÃ© Domhnaigh',
            'DÃ© Luain',
            'DÃ© MÃ¡irt',
            'DÃ© CÃ©adaoin',
            'DÃ©ardaoin',
            'DÃ© hAoine',
            'DÃ© Sathairn',
        ],
        weekdaysShort = ['Domh', 'Luan', 'MÃ¡irt', 'CÃ©ad', 'DÃ©ar', 'Aoine', 'Sath'],
        weekdaysMin = ['Do', 'Lu', 'MÃ¡', 'CÃ©', 'DÃ©', 'A', 'Sa'];

    hooks.defineLocale('ga', {
        months: months$6,
        monthsShort: monthsShort$5,
        monthsParseExact: true,
        weekdays: weekdays$1,
        weekdaysShort: weekdaysShort,
        weekdaysMin: weekdaysMin,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Inniu ag] LT',
            nextDay: '[AmÃ¡rach ag] LT',
            nextWeek: 'dddd [ag] LT',
            lastDay: '[InnÃ© ag] LT',
            lastWeek: 'dddd [seo caite] [ag] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'i %s',
            past: '%s Ã³ shin',
            s: 'cÃºpla soicind',
            ss: '%d soicind',
            m: 'nÃ³imÃ©ad',
            mm: '%d nÃ³imÃ©ad',
            h: 'uair an chloig',
            hh: '%d uair an chloig',
            d: 'lÃ¡',
            dd: '%d lÃ¡',
            M: 'mÃ­',
            MM: '%d mÃ­onna',
            y: 'bliain',
            yy: '%d bliain',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
        ordinal: function (number) {
            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$7 = [
            'Am Faoilleach',
            'An Gearran',
            'Am MÃ rt',
            'An Giblean',
            'An CÃ¨itean',
            'An t-Ã’gmhios',
            'An t-Iuchar',
            'An LÃ¹nastal',
            'An t-Sultain',
            'An DÃ mhair',
            'An t-Samhain',
            'An DÃ¹bhlachd',
        ],
        monthsShort$6 = [
            'Faoi',
            'Gear',
            'MÃ rt',
            'Gibl',
            'CÃ¨it',
            'Ã’gmh',
            'Iuch',
            'LÃ¹n',
            'Sult',
            'DÃ mh',
            'Samh',
            'DÃ¹bh',
        ],
        weekdays$2 = [
            'DidÃ²mhnaich',
            'Diluain',
            'DimÃ irt',
            'Diciadain',
            'Diardaoin',
            'Dihaoine',
            'Disathairne',
        ],
        weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
        weekdaysMin$1 = ['DÃ²', 'Lu', 'MÃ ', 'Ci', 'Ar', 'Ha', 'Sa'];

    hooks.defineLocale('gd', {
        months: months$7,
        monthsShort: monthsShort$6,
        monthsParseExact: true,
        weekdays: weekdays$2,
        weekdaysShort: weekdaysShort$1,
        weekdaysMin: weekdaysMin$1,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[An-diugh aig] LT',
            nextDay: '[A-mÃ ireach aig] LT',
            nextWeek: 'dddd [aig] LT',
            lastDay: '[An-dÃ¨ aig] LT',
            lastWeek: 'dddd [seo chaidh] [aig] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'ann an %s',
            past: 'bho chionn %s',
            s: 'beagan diogan',
            ss: '%d diogan',
            m: 'mionaid',
            mm: '%d mionaidean',
            h: 'uair',
            hh: '%d uairean',
            d: 'latha',
            dd: '%d latha',
            M: 'mÃ¬os',
            MM: '%d mÃ¬osan',
            y: 'bliadhna',
            yy: '%d bliadhna',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
        ordinal: function (number) {
            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('gl', {
        months: 'xaneiro_febreiro_marzo_abril_maio_xuÃ±o_xullo_agosto_setembro_outubro_novembro_decembro'.split(
            '_'
        ),
        monthsShort: 'xan._feb._mar._abr._mai._xuÃ±._xul._ago._set._out._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'domingo_luns_martes_mÃ©rcores_xoves_venres_sÃ¡bado'.split('_'),
        weekdaysShort: 'dom._lun._mar._mÃ©r._xov._ven._sÃ¡b.'.split('_'),
        weekdaysMin: 'do_lu_ma_mÃ©_xo_ve_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY H:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
        },
        calendar: {
            sameDay: function () {
                return '[hoxe ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
            },
            nextDay: function () {
                return '[maÃ±Ã¡ ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
            },
            nextWeek: function () {
                return 'dddd [' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT';
            },
            lastDay: function () {
                return '[onte ' + (this.hours() !== 1 ? 'Ã¡' : 'a') + '] LT';
            },
            lastWeek: function () {
                return (
                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT'
                );
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: function (str) {
                if (str.indexOf('un') === 0) {
                    return 'n' + str;
                }
                return 'en ' + str;
            },
            past: 'hai %s',
            s: 'uns segundos',
            ss: '%d segundos',
            m: 'un minuto',
            mm: '%d minutos',
            h: 'unha hora',
            hh: '%d horas',
            d: 'un dÃ­a',
            dd: '%d dÃ­as',
            M: 'un mes',
            MM: '%d meses',
            y: 'un ano',
            yy: '%d anos',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$4(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['à¤¥à¥‹à¤¡à¤¯à¤¾ à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', 'à¤¥à¥‹à¤¡à¥‡ à¤¸à¥…à¤•à¤‚à¤¡'],
            ss: [number + ' à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', number + ' à¤¸à¥…à¤•à¤‚à¤¡'],
            m: ['à¤à¤•à¤¾ à¤®à¤¿à¤£à¤Ÿà¤¾à¤¨', 'à¤à¤• à¤®à¤¿à¤¨à¥‚à¤Ÿ'],
            mm: [number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚à¤¨à¥€', number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚'],
            h: ['à¤à¤•à¤¾ à¤µà¤°à¤¾à¤¨', 'à¤à¤• à¤µà¤°'],
            hh: [number + ' à¤µà¤°à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¤¾à¤‚'],
            d: ['à¤à¤•à¤¾ à¤¦à¤¿à¤¸à¤¾à¤¨', 'à¤à¤• à¤¦à¥€à¤¸'],
            dd: [number + ' à¤¦à¤¿à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤¦à¥€à¤¸'],
            M: ['à¤à¤•à¤¾ à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨', 'à¤à¤• à¤®à¥à¤¹à¤¯à¤¨à¥‹'],
            MM: [number + ' à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨à¥€', number + ' à¤®à¥à¤¹à¤¯à¤¨à¥‡'],
            y: ['à¤à¤•à¤¾ à¤µà¤°à¥à¤¸à¤¾à¤¨', 'à¤à¤• à¤µà¤°à¥à¤¸'],
            yy: [number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚'],
        };
        return isFuture ? format[key][0] : format[key][1];
    }

    hooks.defineLocale('gom-deva', {
        months: {
            standalone: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¯_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
                '_'
            ),
            format: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤®à¤¾à¤°à¥à¤šà¤¾à¤šà¥à¤¯à¤¾_à¤à¤ªà¥à¤°à¥€à¤²à¤¾à¤šà¥à¤¯à¤¾_à¤®à¥‡à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥‚à¤¨à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥à¤²à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤—à¤¸à¥à¤Ÿà¤¾à¤šà¥à¤¯à¤¾_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾'.split(
                '_'
            ),
            isFormat: /MMMM(\s)+D[oD]?/,
        },
        monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€._à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¤†à¤¯à¤¤à¤¾à¤°_à¤¸à¥‹à¤®à¤¾à¤°_à¤®à¤‚à¤—à¤³à¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤¬à¤¿à¤°à¥‡à¤¸à¥à¤¤à¤¾à¤°_à¤¸à¥à¤•à¥à¤°à¤¾à¤°_à¤¶à¥‡à¤¨à¤µà¤¾à¤°'.split('_'),
        weekdaysShort: 'à¤†à¤¯à¤¤._à¤¸à¥‹à¤®._à¤®à¤‚à¤—à¤³._à¤¬à¥à¤§._à¤¬à¥à¤°à¥‡à¤¸à¥à¤¤._à¤¸à¥à¤•à¥à¤°._à¤¶à¥‡à¤¨.'.split('_'),
        weekdaysMin: 'à¤†_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤¬à¥à¤°à¥‡_à¤¸à¥_à¤¶à¥‡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            LTS: 'A h:mm:ss [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
            llll: 'ddd, D MMM YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        },
        calendar: {
            sameDay: '[à¤†à¤¯à¤œ] LT',
            nextDay: '[à¤«à¤¾à¤²à¥à¤¯à¤¾à¤‚] LT',
            nextWeek: '[à¤«à¥à¤¡à¤²à¥‹] dddd[,] LT',
            lastDay: '[à¤•à¤¾à¤²] LT',
            lastWeek: '[à¤«à¤¾à¤Ÿà¤²à¥‹] dddd[,] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s',
            past: '%s à¤†à¤¦à¥€à¤‚',
            s: processRelativeTime$4,
            ss: processRelativeTime$4,
            m: processRelativeTime$4,
            mm: processRelativeTime$4,
            h: processRelativeTime$4,
            hh: processRelativeTime$4,
            d: processRelativeTime$4,
            dd: processRelativeTime$4,
            M: processRelativeTime$4,
            MM: processRelativeTime$4,
            y: processRelativeTime$4,
            yy: processRelativeTime$4,
        },
        dayOfMonthOrdinalParse: /\d{1,2}(à¤µà¥‡à¤°)/,
        ordinal: function (number, period) {
            switch (period) {
                // the ordinal 'à¤µà¥‡à¤°' only applies to day of the month
                case 'D':
                    return number + 'à¤µà¥‡à¤°';
                default:
                case 'M':
                case 'Q':
                case 'DDD':
                case 'd':
                case 'w':
                case 'W':
                    return number;
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week
            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
        },
        meridiemParse: /à¤°à¤¾à¤¤à¥€|à¤¸à¤•à¤¾à¤³à¥€à¤‚|à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚|à¤¸à¤¾à¤‚à¤œà¥‡/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤°à¤¾à¤¤à¥€') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¤•à¤¾à¤³à¥€à¤‚') {
                return hour;
            } else if (meridiem === 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚') {
                return hour > 12 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¤¾à¤‚à¤œà¥‡') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¤°à¤¾à¤¤à¥€';
            } else if (hour < 12) {
                return 'à¤¸à¤•à¤¾à¤³à¥€à¤‚';
            } else if (hour < 16) {
                return 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚';
            } else if (hour < 20) {
                return 'à¤¸à¤¾à¤‚à¤œà¥‡';
            } else {
                return 'à¤°à¤¾à¤¤à¥€';
            }
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$5(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['thoddea sekondamni', 'thodde sekond'],
            ss: [number + ' sekondamni', number + ' sekond'],
            m: ['eka mintan', 'ek minut'],
            mm: [number + ' mintamni', number + ' mintam'],
            h: ['eka voran', 'ek vor'],
            hh: [number + ' voramni', number + ' voram'],
            d: ['eka disan', 'ek dis'],
            dd: [number + ' disamni', number + ' dis'],
            M: ['eka mhoinean', 'ek mhoino'],
            MM: [number + ' mhoineamni', number + ' mhoine'],
            y: ['eka vorsan', 'ek voros'],
            yy: [number + ' vorsamni', number + ' vorsam'],
        };
        return isFuture ? format[key][0] : format[key][1];
    }

    hooks.defineLocale('gom-latn', {
        months: {
            standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
                '_'
            ),
            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
                '_'
            ),
            isFormat: /MMMM(\s)+D[oD]?/,
        },
        monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'A h:mm [vazta]',
            LTS: 'A h:mm:ss [vazta]',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY A h:mm [vazta]',
            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
        },
        calendar: {
            sameDay: '[Aiz] LT',
            nextDay: '[Faleam] LT',
            nextWeek: '[Fuddlo] dddd[,] LT',
            lastDay: '[Kal] LT',
            lastWeek: '[Fattlo] dddd[,] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s',
            past: '%s adim',
            s: processRelativeTime$5,
            ss: processRelativeTime$5,
            m: processRelativeTime$5,
            mm: processRelativeTime$5,
            h: processRelativeTime$5,
            hh: processRelativeTime$5,
            d: processRelativeTime$5,
            dd: processRelativeTime$5,
            M: processRelativeTime$5,
            MM: processRelativeTime$5,
            y: processRelativeTime$5,
            yy: processRelativeTime$5,
        },
        dayOfMonthOrdinalParse: /\d{1,2}(er)/,
        ordinal: function (number, period) {
            switch (period) {
                // the ordinal 'er' only applies to day of the month
                case 'D':
                    return number + 'er';
                default:
                case 'M':
                case 'Q':
                case 'DDD':
                case 'd':
                case 'w':
                case 'W':
                    return number;
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week
            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
        },
        meridiemParse: /rati|sokallim|donparam|sanje/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'rati') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'sokallim') {
                return hour;
            } else if (meridiem === 'donparam') {
                return hour > 12 ? hour : hour + 12;
            } else if (meridiem === 'sanje') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'rati';
            } else if (hour < 12) {
                return 'sokallim';
            } else if (hour < 16) {
                return 'donparam';
            } else if (hour < 20) {
                return 'sanje';
            } else {
                return 'rati';
            }
        },
    });

    //! moment.js locale configuration

    var symbolMap$7 = {
            1: 'à«§',
            2: 'à«¨',
            3: 'à«©',
            4: 'à«ª',
            5: 'à««',
            6: 'à«¬',
            7: 'à«­',
            8: 'à«®',
            9: 'à«¯',
            0: 'à«¦',
        },
        numberMap$6 = {
            'à«§': '1',
            'à«¨': '2',
            'à«©': '3',
            'à«ª': '4',
            'à««': '5',
            'à«¬': '6',
            'à«­': '7',
            'à«®': '8',
            'à«¯': '9',
            'à«¦': '0',
        };

    hooks.defineLocale('gu', {
        months: 'àªœàª¾àª¨à«àª¯à«àª†àª°à«€_àª«à«‡àª¬à«àª°à«àª†àª°à«€_àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿àª²_àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾àªˆ_àª‘àª—àª¸à«àªŸ_àª¸àªªà«àªŸà«‡àª®à«àª¬àª°_àª‘àª•à«àªŸà«àª¬àª°_àª¨àªµà«‡àª®à«àª¬àª°_àª¡àª¿àª¸à«‡àª®à«àª¬àª°'.split(
            '_'
        ),
        monthsShort: 'àªœàª¾àª¨à«àª¯à«._àª«à«‡àª¬à«àª°à«._àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿._àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾._àª‘àª—._àª¸àªªà«àªŸà«‡._àª‘àª•à«àªŸà«._àª¨àªµà«‡._àª¡àª¿àª¸à«‡.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'àª°àªµàª¿àªµàª¾àª°_àª¸à«‹àª®àªµàª¾àª°_àª®àª‚àª—àª³àªµàª¾àª°_àª¬à«àª§à«àªµàª¾àª°_àª—à«àª°à«àªµàª¾àª°_àª¶à«àª•à«àª°àªµàª¾àª°_àª¶àª¨àª¿àªµàª¾àª°'.split(
            '_'
        ),
        weekdaysShort: 'àª°àªµàª¿_àª¸à«‹àª®_àª®àª‚àª—àª³_àª¬à«àª§à«_àª—à«àª°à«_àª¶à«àª•à«àª°_àª¶àª¨àª¿'.split('_'),
        weekdaysMin: 'àª°_àª¸à«‹_àª®àª‚_àª¬à«_àª—à«_àª¶à«_àª¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm àªµàª¾àª—à«àª¯à«‡',
            LTS: 'A h:mm:ss àªµàª¾àª—à«àª¯à«‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
            LLLL: 'dddd, D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
        },
        calendar: {
            sameDay: '[àª†àªœ] LT',
            nextDay: '[àª•àª¾àª²à«‡] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[àª—àª‡àª•àª¾àª²à«‡] LT',
            lastWeek: '[àªªàª¾àª›àª²àª¾] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s àª®àª¾',
            past: '%s àªªàª¹à«‡àª²àª¾',
            s: 'àª…àª®à«àª• àªªàª³à«‹',
            ss: '%d àª¸à«‡àª•àª‚àª¡',
            m: 'àªàª• àª®àª¿àª¨àª¿àªŸ',
            mm: '%d àª®àª¿àª¨àª¿àªŸ',
            h: 'àªàª• àª•àª²àª¾àª•',
            hh: '%d àª•àª²àª¾àª•',
            d: 'àªàª• àª¦àª¿àªµàª¸',
            dd: '%d àª¦àª¿àªµàª¸',
            M: 'àªàª• àª®àª¹àª¿àª¨à«‹',
            MM: '%d àª®àª¹àª¿àª¨à«‹',
            y: 'àªàª• àªµàª°à«àª·',
            yy: '%d àªµàª°à«àª·',
        },
        preparse: function (string) {
            return string.replace(/[à«§à«¨à«©à«ªà««à«¬à«­à«®à«¯à«¦]/g, function (match) {
                return numberMap$6[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$7[match];
            });
        },
        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
        meridiemParse: /àª°àª¾àª¤|àª¬àªªà«‹àª°|àª¸àªµàª¾àª°|àª¸àª¾àª‚àªœ/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'àª°àª¾àª¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'àª¸àªµàª¾àª°') {
                return hour;
            } else if (meridiem === 'àª¬àªªà«‹àª°') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'àª¸àª¾àª‚àªœ') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'àª°àª¾àª¤';
            } else if (hour < 10) {
                return 'àª¸àªµàª¾àª°';
            } else if (hour < 17) {
                return 'àª¬àªªà«‹àª°';
            } else if (hour < 20) {
                return 'àª¸àª¾àª‚àªœ';
            } else {
                return 'àª°àª¾àª¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('he', {
        months: '×™× ×•××¨_×¤×‘×¨×•××¨_×ž×¨×¥_××¤×¨×™×œ_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×•×¡×˜_×¡×¤×˜×ž×‘×¨_××•×§×˜×•×‘×¨_× ×•×‘×ž×‘×¨_×“×¦×ž×‘×¨'.split(
            '_'
        ),
        monthsShort: '×™× ×•×³_×¤×‘×¨×³_×ž×¨×¥_××¤×¨×³_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×³_×¡×¤×˜×³_××•×§×³_× ×•×‘×³_×“×¦×ž×³'.split(
            '_'
        ),
        weekdays: '×¨××©×•×Ÿ_×©× ×™_×©×œ×™×©×™_×¨×‘×™×¢×™_×—×ž×™×©×™_×©×™×©×™_×©×‘×ª'.split('_'),
        weekdaysShort: '××³_×‘×³_×’×³_×“×³_×”×³_×•×³_×©×³'.split('_'),
        weekdaysMin: '×_×‘_×’_×“_×”_×•_×©'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [×‘]MMMM YYYY',
            LLL: 'D [×‘]MMMM YYYY HH:mm',
            LLLL: 'dddd, D [×‘]MMMM YYYY HH:mm',
            l: 'D/M/YYYY',
            ll: 'D MMM YYYY',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd, D MMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[×”×™×•× ×‘Ö¾]LT',
            nextDay: '[×ž×—×¨ ×‘Ö¾]LT',
            nextWeek: 'dddd [×‘×©×¢×”] LT',
            lastDay: '[××ª×ž×•×œ ×‘Ö¾]LT',
            lastWeek: '[×‘×™×•×] dddd [×”××—×¨×•×Ÿ ×‘×©×¢×”] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '×‘×¢×•×“ %s',
            past: '×œ×¤× ×™ %s',
            s: '×ž×¡×¤×¨ ×©× ×™×•×ª',
            ss: '%d ×©× ×™×•×ª',
            m: '×“×§×”',
            mm: '%d ×“×§×•×ª',
            h: '×©×¢×”',
            hh: function (number) {
                if (number === 2) {
                    return '×©×¢×ª×™×™×';
                }
                return number + ' ×©×¢×•×ª';
            },
            d: '×™×•×',
            dd: function (number) {
                if (number === 2) {
                    return '×™×•×ž×™×™×';
                }
                return number + ' ×™×ž×™×';
            },
            M: '×—×•×“×©',
            MM: function (number) {
                if (number === 2) {
                    return '×—×•×“×©×™×™×';
                }
                return number + ' ×—×•×“×©×™×';
            },
            y: '×©× ×”',
            yy: function (number) {
                if (number === 2) {
                    return '×©× ×ª×™×™×';
                } else if (number % 10 === 0 && number !== 10) {
                    return number + ' ×©× ×”';
                }
                return number + ' ×©× ×™×';
            },
        },
        meridiemParse: /××—×”"×¦|×œ×¤× ×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×œ×¤× ×™ ×”×¦×”×¨×™×™×|×œ×¤× ×•×ª ×‘×•×§×¨|×‘×‘×•×§×¨|×‘×¢×¨×‘/i,
        isPM: function (input) {
            return /^(××—×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×‘×¢×¨×‘)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 5) {
                return '×œ×¤× ×•×ª ×‘×•×§×¨';
            } else if (hour < 10) {
                return '×‘×‘×•×§×¨';
            } else if (hour < 12) {
                return isLower ? '×œ×¤× ×”"×¦' : '×œ×¤× ×™ ×”×¦×”×¨×™×™×';
            } else if (hour < 18) {
                return isLower ? '××—×”"×¦' : '××—×¨×™ ×”×¦×”×¨×™×™×';
            } else {
                return '×‘×¢×¨×‘';
            }
        },
    });

    //! moment.js locale configuration

    var symbolMap$8 = {
            1: 'à¥§',
            2: 'à¥¨',
            3: 'à¥©',
            4: 'à¥ª',
            5: 'à¥«',
            6: 'à¥¬',
            7: 'à¥­',
            8: 'à¥®',
            9: 'à¥¯',
            0: 'à¥¦',
        },
        numberMap$7 = {
            'à¥§': '1',
            'à¥¨': '2',
            'à¥©': '3',
            'à¥ª': '4',
            'à¥«': '5',
            'à¥¬': '6',
            'à¥­': '7',
            'à¥®': '8',
            'à¥¯': '9',
            'à¥¦': '0',
        },
        monthsParse$7 = [
            /^à¤œà¤¨/i,
            /^à¤«à¤¼à¤°|à¤«à¤°/i,
            /^à¤®à¤¾à¤°à¥à¤š/i,
            /^à¤…à¤ªà¥à¤°à¥ˆ/i,
            /^à¤®à¤ˆ/i,
            /^à¤œà¥‚à¤¨/i,
            /^à¤œà¥à¤²/i,
            /^à¤…à¤—/i,
            /^à¤¸à¤¿à¤¤à¤‚|à¤¸à¤¿à¤¤/i,
            /^à¤…à¤•à¥à¤Ÿà¥‚/i,
            /^à¤¨à¤µ|à¤¨à¤µà¤‚/i,
            /^à¤¦à¤¿à¤¸à¤‚|à¤¦à¤¿à¤¸/i,
        ],
        shortMonthsParse = [
            /^à¤œà¤¨/i,
            /^à¤«à¤¼à¤°/i,
            /^à¤®à¤¾à¤°à¥à¤š/i,
            /^à¤…à¤ªà¥à¤°à¥ˆ/i,
            /^à¤®à¤ˆ/i,
            /^à¤œà¥‚à¤¨/i,
            /^à¤œà¥à¤²/i,
            /^à¤…à¤—/i,
            /^à¤¸à¤¿à¤¤/i,
            /^à¤…à¤•à¥à¤Ÿà¥‚/i,
            /^à¤¨à¤µ/i,
            /^à¤¦à¤¿à¤¸/i,
        ];

    hooks.defineLocale('hi', {
        months: {
            format: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤¼à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤®à¥à¤¬à¤°_à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°'.split(
                '_'
            ),
            standalone: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤‚à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤‚à¤¬à¤°_à¤¦à¤¿à¤¸à¤‚à¤¬à¤°'.split(
                '_'
            ),
        },
        monthsShort: 'à¤œà¤¨._à¤«à¤¼à¤°._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆ._à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤…à¤—._à¤¸à¤¿à¤¤._à¤…à¤•à¥à¤Ÿà¥‚._à¤¨à¤µ._à¤¦à¤¿à¤¸.'.split(
            '_'
        ),
        weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤²à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
        weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤²_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
        weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¤¬à¤œà¥‡',
            LTS: 'A h:mm:ss à¤¬à¤œà¥‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
        },

        monthsParse: monthsParse$7,
        longMonthsParse: monthsParse$7,
        shortMonthsParse: shortMonthsParse,

        monthsRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

        monthsShortRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

        monthsStrictRegex: /^(à¤œà¤¨à¤µà¤°à¥€?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ?|à¤…à¤—à¤¸à¥à¤¤?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤?\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°?)/i,

        monthsShortStrictRegex: /^(à¤œà¤¨\.?|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²\.?|à¤…à¤—\.?|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸\.?)/i,

        calendar: {
            sameDay: '[à¤†à¤œ] LT',
            nextDay: '[à¤•à¤²] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¤•à¤²] LT',
            lastWeek: '[à¤ªà¤¿à¤›à¤²à¥‡] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¤®à¥‡à¤‚',
            past: '%s à¤ªà¤¹à¤²à¥‡',
            s: 'à¤•à¥à¤› à¤¹à¥€ à¤•à¥à¤·à¤£',
            ss: '%d à¤¸à¥‡à¤•à¤‚à¤¡',
            m: 'à¤à¤• à¤®à¤¿à¤¨à¤Ÿ',
            mm: '%d à¤®à¤¿à¤¨à¤Ÿ',
            h: 'à¤à¤• à¤˜à¤‚à¤Ÿà¤¾',
            hh: '%d à¤˜à¤‚à¤Ÿà¥‡',
            d: 'à¤à¤• à¤¦à¤¿à¤¨',
            dd: '%d à¤¦à¤¿à¤¨',
            M: 'à¤à¤• à¤®à¤¹à¥€à¤¨à¥‡',
            MM: '%d à¤®à¤¹à¥€à¤¨à¥‡',
            y: 'à¤à¤• à¤µà¤°à¥à¤·',
            yy: '%d à¤µà¤°à¥à¤·',
        },
        preparse: function (string) {
            return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
                return numberMap$7[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$8[match];
            });
        },
        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
        meridiemParse: /à¤°à¤¾à¤¤|à¤¸à¥à¤¬à¤¹|à¤¦à¥‹à¤ªà¤¹à¤°|à¤¶à¤¾à¤®/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤°à¤¾à¤¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¥à¤¬à¤¹') {
                return hour;
            } else if (meridiem === 'à¤¦à¥‹à¤ªà¤¹à¤°') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à¤¶à¤¾à¤®') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¤°à¤¾à¤¤';
            } else if (hour < 10) {
                return 'à¤¸à¥à¤¬à¤¹';
            } else if (hour < 17) {
                return 'à¤¦à¥‹à¤ªà¤¹à¤°';
            } else if (hour < 20) {
                return 'à¤¶à¤¾à¤®';
            } else {
                return 'à¤°à¤¾à¤¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function translate$3(number, withoutSuffix, key) {
        var result = number + ' ';
        switch (key) {
            case 'ss':
                if (number === 1) {
                    result += 'sekunda';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sekunde';
                } else {
                    result += 'sekundi';
                }
                return result;
            case 'm':
                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
            case 'mm':
                if (number === 1) {
                    result += 'minuta';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'minute';
                } else {
                    result += 'minuta';
                }
                return result;
            case 'h':
                return withoutSuffix ? 'jedan sat' : 'jednog sata';
            case 'hh':
                if (number === 1) {
                    result += 'sat';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'sata';
                } else {
                    result += 'sati';
                }
                return result;
            case 'dd':
                if (number === 1) {
                    result += 'dan';
                } else {
                    result += 'dana';
                }
                return result;
            case 'MM':
                if (number === 1) {
                    result += 'mjesec';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'mjeseca';
                } else {
                    result += 'mjeseci';
                }
                return result;
            case 'yy':
                if (number === 1) {
                    result += 'godina';
                } else if (number === 2 || number === 3 || number === 4) {
                    result += 'godine';
                } else {
                    result += 'godina';
                }
                return result;
        }
    }

    hooks.defineLocale('hr', {
        months: {
            format: 'sijeÄnja_veljaÄe_oÅ¾ujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
                '_'
            ),
            standalone: 'sijeÄanj_veljaÄa_oÅ¾ujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
                '_'
            ),
        },
        monthsShort: 'sij._velj._oÅ¾u._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'Do MMMM YYYY',
            LLL: 'Do MMMM YYYY H:mm',
            LLLL: 'dddd, Do MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedjelju] [u] LT';
                    case 3:
                        return '[u] [srijedu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄer u] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[proÅ¡lu] [nedjelju] [u] LT';
                    case 3:
                        return '[proÅ¡lu] [srijedu] [u] LT';
                    case 6:
                        return '[proÅ¡le] [subote] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[proÅ¡li] dddd [u] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'par sekundi',
            ss: translate$3,
            m: translate$3,
            mm: translate$3,
            h: translate$3,
            hh: translate$3,
            d: 'dan',
            dd: translate$3,
            M: 'mjesec',
            MM: translate$3,
            y: 'godinu',
            yy: translate$3,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var weekEndings = 'vasÃ¡rnap hÃ©tfÅ‘n kedden szerdÃ¡n csÃ¼tÃ¶rtÃ¶kÃ¶n pÃ©nteken szombaton'.split(
        ' '
    );
    function translate$4(number, withoutSuffix, key, isFuture) {
        var num = number;
        switch (key) {
            case 's':
                return isFuture || withoutSuffix
                    ? 'nÃ©hÃ¡ny mÃ¡sodperc'
                    : 'nÃ©hÃ¡ny mÃ¡sodperce';
            case 'ss':
                return num + (isFuture || withoutSuffix)
                    ? ' mÃ¡sodperc'
                    : ' mÃ¡sodperce';
            case 'm':
                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
            case 'mm':
                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
            case 'h':
                return 'egy' + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
            case 'hh':
                return num + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
            case 'd':
                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
            case 'dd':
                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
            case 'M':
                return 'egy' + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
            case 'MM':
                return num + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
            case 'y':
                return 'egy' + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
            case 'yy':
                return num + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
        }
        return '';
    }
    function week(isFuture) {
        return (
            (isFuture ? '' : '[mÃºlt] ') +
            '[' +
            weekEndings[this.day()] +
            '] LT[-kor]'
        );
    }

    hooks.defineLocale('hu', {
        months: 'januÃ¡r_februÃ¡r_mÃ¡rcius_Ã¡prilis_mÃ¡jus_jÃºnius_jÃºlius_augusztus_szeptember_oktÃ³ber_november_december'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mÃ¡rc._Ã¡pr._mÃ¡j._jÃºn._jÃºl._aug._szept._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'vasÃ¡rnap_hÃ©tfÅ‘_kedd_szerda_csÃ¼tÃ¶rtÃ¶k_pÃ©ntek_szombat'.split('_'),
        weekdaysShort: 'vas_hÃ©t_kedd_sze_csÃ¼t_pÃ©n_szo'.split('_'),
        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'YYYY.MM.DD.',
            LL: 'YYYY. MMMM D.',
            LLL: 'YYYY. MMMM D. H:mm',
            LLLL: 'YYYY. MMMM D., dddd H:mm',
        },
        meridiemParse: /de|du/i,
        isPM: function (input) {
            return input.charAt(1).toLowerCase() === 'u';
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower === true ? 'de' : 'DE';
            } else {
                return isLower === true ? 'du' : 'DU';
            }
        },
        calendar: {
            sameDay: '[ma] LT[-kor]',
            nextDay: '[holnap] LT[-kor]',
            nextWeek: function () {
                return week.call(this, true);
            },
            lastDay: '[tegnap] LT[-kor]',
            lastWeek: function () {
                return week.call(this, false);
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s mÃºlva',
            past: '%s',
            s: translate$4,
            ss: translate$4,
            m: translate$4,
            mm: translate$4,
            h: translate$4,
            hh: translate$4,
            d: translate$4,
            dd: translate$4,
            M: translate$4,
            MM: translate$4,
            y: translate$4,
            yy: translate$4,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('hy-am', {
        months: {
            format: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€Õ«_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€Õ«_Õ´Õ¡Ö€Õ¿Õ«_Õ¡ÕºÖ€Õ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸Ö‚Õ¶Õ«Õ½Õ«_Õ°Õ¸Ö‚Õ¬Õ«Õ½Õ«_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«'.split(
                '_'
            ),
            standalone: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€_Õ´Õ¡Ö€Õ¿_Õ¡ÕºÖ€Õ«Õ¬_Õ´Õ¡ÕµÕ«Õ½_Õ°Õ¸Ö‚Õ¶Õ«Õ½_Õ°Õ¸Ö‚Õ¬Õ«Õ½_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'.split(
                '_'
            ),
        },
        monthsShort: 'Õ°Õ¶Õ¾_ÖƒÕ¿Ö€_Õ´Ö€Õ¿_Õ¡ÕºÖ€_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö…Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿'.split('_'),
        weekdays: 'Õ¯Õ«Ö€Õ¡Õ¯Õ«_Õ¥Ö€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«_Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸Ö‚Ö€Õ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©'.split(
            '_'
        ),
        weekdaysShort: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
        weekdaysMin: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Õ©.',
            LLL: 'D MMMM YYYY Õ©., HH:mm',
            LLLL: 'dddd, D MMMM YYYY Õ©., HH:mm',
        },
        calendar: {
            sameDay: '[Õ¡ÕµÕ½Ö…Ö€] LT',
            nextDay: '[Õ¾Õ¡Õ²Õ¨] LT',
            lastDay: '[Õ¥Ö€Õ¥Õ¯] LT',
            nextWeek: function () {
                return 'dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
            },
            lastWeek: function () {
                return '[Õ¡Õ¶ÖÕ¡Õ®] dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Õ°Õ¥Õ¿Õ¸',
            past: '%s Õ¡Õ¼Õ¡Õ»',
            s: 'Õ´Õ« Ö„Õ¡Õ¶Õ« Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
            ss: '%d Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
            m: 'Ö€Õ¸ÕºÕ¥',
            mm: '%d Ö€Õ¸ÕºÕ¥',
            h: 'ÕªÕ¡Õ´',
            hh: '%d ÕªÕ¡Õ´',
            d: 'Ö…Ö€',
            dd: '%d Ö…Ö€',
            M: 'Õ¡Õ´Õ«Õ½',
            MM: '%d Õ¡Õ´Õ«Õ½',
            y: 'Õ¿Õ¡Ö€Õ«',
            yy: '%d Õ¿Õ¡Ö€Õ«',
        },
        meridiemParse: /Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶/,
        isPM: function (input) {
            return /^(ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶)$/.test(input);
        },
        meridiem: function (hour) {
            if (hour < 4) {
                return 'Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡';
            } else if (hour < 12) {
                return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡';
            } else if (hour < 17) {
                return 'ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡';
            } else {
                return 'Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(Õ«Õ¶|Ö€Õ¤)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'DDD':
                case 'w':
                case 'W':
                case 'DDDo':
                    if (number === 1) {
                        return number + '-Õ«Õ¶';
                    }
                    return number + '-Ö€Õ¤';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('id', {
        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /pagi|siang|sore|malam/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'pagi') {
                return hour;
            } else if (meridiem === 'siang') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'sore' || meridiem === 'malam') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'pagi';
            } else if (hours < 15) {
                return 'siang';
            } else if (hours < 19) {
                return 'sore';
            } else {
                return 'malam';
            }
        },
        calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Besok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kemarin pukul] LT',
            lastWeek: 'dddd [lalu pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dalam %s',
            past: '%s yang lalu',
            s: 'beberapa detik',
            ss: '%d detik',
            m: 'semenit',
            mm: '%d menit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun',
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function plural$2(n) {
        if (n % 100 === 11) {
            return true;
        } else if (n % 10 === 1) {
            return false;
        }
        return true;
    }
    function translate$5(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's':
                return withoutSuffix || isFuture
                    ? 'nokkrar sekÃºndur'
                    : 'nokkrum sekÃºndum';
            case 'ss':
                if (plural$2(number)) {
                    return (
                        result +
                        (withoutSuffix || isFuture ? 'sekÃºndur' : 'sekÃºndum')
                    );
                }
                return result + 'sekÃºnda';
            case 'm':
                return withoutSuffix ? 'mÃ­nÃºta' : 'mÃ­nÃºtu';
            case 'mm':
                if (plural$2(number)) {
                    return (
                        result + (withoutSuffix || isFuture ? 'mÃ­nÃºtur' : 'mÃ­nÃºtum')
                    );
                } else if (withoutSuffix) {
                    return result + 'mÃ­nÃºta';
                }
                return result + 'mÃ­nÃºtu';
            case 'hh':
                if (plural$2(number)) {
                    return (
                        result +
                        (withoutSuffix || isFuture
                            ? 'klukkustundir'
                            : 'klukkustundum')
                    );
                }
                return result + 'klukkustund';
            case 'd':
                if (withoutSuffix) {
                    return 'dagur';
                }
                return isFuture ? 'dag' : 'degi';
            case 'dd':
                if (plural$2(number)) {
                    if (withoutSuffix) {
                        return result + 'dagar';
                    }
                    return result + (isFuture ? 'daga' : 'dÃ¶gum');
                } else if (withoutSuffix) {
                    return result + 'dagur';
                }
                return result + (isFuture ? 'dag' : 'degi');
            case 'M':
                if (withoutSuffix) {
                    return 'mÃ¡nuÃ°ur';
                }
                return isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i';
            case 'MM':
                if (plural$2(number)) {
                    if (withoutSuffix) {
                        return result + 'mÃ¡nuÃ°ir';
                    }
                    return result + (isFuture ? 'mÃ¡nuÃ°i' : 'mÃ¡nuÃ°um');
                } else if (withoutSuffix) {
                    return result + 'mÃ¡nuÃ°ur';
                }
                return result + (isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i');
            case 'y':
                return withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri';
            case 'yy':
                if (plural$2(number)) {
                    return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡rum');
                }
                return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri');
        }
    }

    hooks.defineLocale('is', {
        months: 'janÃºar_febrÃºar_mars_aprÃ­l_maÃ­_jÃºnÃ­_jÃºlÃ­_Ã¡gÃºst_september_oktÃ³ber_nÃ³vember_desember'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_maÃ­_jÃºn_jÃºl_Ã¡gÃº_sep_okt_nÃ³v_des'.split('_'),
        weekdays: 'sunnudagur_mÃ¡nudagur_Ã¾riÃ°judagur_miÃ°vikudagur_fimmtudagur_fÃ¶studagur_laugardagur'.split(
            '_'
        ),
        weekdaysShort: 'sun_mÃ¡n_Ã¾ri_miÃ°_fim_fÃ¶s_lau'.split('_'),
        weekdaysMin: 'Su_MÃ¡_Ãžr_Mi_Fi_FÃ¶_La'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] H:mm',
            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
        },
        calendar: {
            sameDay: '[Ã­ dag kl.] LT',
            nextDay: '[Ã¡ morgun kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[Ã­ gÃ¦r kl.] LT',
            lastWeek: '[sÃ­Ã°asta] dddd [kl.] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'eftir %s',
            past: 'fyrir %s sÃ­Ã°an',
            s: translate$5,
            ss: translate$5,
            m: translate$5,
            mm: translate$5,
            h: 'klukkustund',
            hh: translate$5,
            d: translate$5,
            dd: translate$5,
            M: translate$5,
            MM: translate$5,
            y: translate$5,
            yy: translate$5,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('it-ch', {
        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
            '_'
        ),
        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
        weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
            '_'
        ),
        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Oggi alle] LT',
            nextDay: '[Domani alle] LT',
            nextWeek: 'dddd [alle] LT',
            lastDay: '[Ieri alle] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[la scorsa] dddd [alle] LT';
                    default:
                        return '[lo scorso] dddd [alle] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: function (s) {
                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
            },
            past: '%s fa',
            s: 'alcuni secondi',
            ss: '%d secondi',
            m: 'un minuto',
            mm: '%d minuti',
            h: "un'ora",
            hh: '%d ore',
            d: 'un giorno',
            dd: '%d giorni',
            M: 'un mese',
            MM: '%d mesi',
            y: 'un anno',
            yy: '%d anni',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('it', {
        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
            '_'
        ),
        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
        weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
            '_'
        ),
        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: function () {
                return (
                    '[Oggi a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            nextDay: function () {
                return (
                    '[Domani a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            nextWeek: function () {
                return (
                    'dddd [a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            lastDay: function () {
                return (
                    '[Ieri a' +
                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                    ']LT'
                );
            },
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return (
                            '[La scorsa] dddd [a' +
                            (this.hours() > 1
                                ? 'lle '
                                : this.hours() === 0
                                ? ' '
                                : "ll'") +
                            ']LT'
                        );
                    default:
                        return (
                            '[Lo scorso] dddd [a' +
                            (this.hours() > 1
                                ? 'lle '
                                : this.hours() === 0
                                ? ' '
                                : "ll'") +
                            ']LT'
                        );
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'tra %s',
            past: '%s fa',
            s: 'alcuni secondi',
            ss: '%d secondi',
            m: 'un minuto',
            mm: '%d minuti',
            h: "un'ora",
            hh: '%d ore',
            d: 'un giorno',
            dd: '%d giorni',
            w: 'una settimana',
            ww: '%d settimane',
            M: 'un mese',
            MM: '%d mesi',
            y: 'un anno',
            yy: '%d anni',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ja', {
        eras: [
            {
                since: '2019-05-01',
                offset: 1,
                name: 'ä»¤å’Œ',
                narrow: 'ã‹¿',
                abbr: 'R',
            },
            {
                since: '1989-01-08',
                until: '2019-04-30',
                offset: 1,
                name: 'å¹³æˆ',
                narrow: 'ã»',
                abbr: 'H',
            },
            {
                since: '1926-12-25',
                until: '1989-01-07',
                offset: 1,
                name: 'æ˜­å’Œ',
                narrow: 'ã¼',
                abbr: 'S',
            },
            {
                since: '1912-07-30',
                until: '1926-12-24',
                offset: 1,
                name: 'å¤§æ­£',
                narrow: 'ã½',
                abbr: 'T',
            },
            {
                since: '1873-01-01',
                until: '1912-07-29',
                offset: 6,
                name: 'æ˜Žæ²»',
                narrow: 'ã¾',
                abbr: 'M',
            },
            {
                since: '0001-01-01',
                until: '1873-12-31',
                offset: 1,
                name: 'è¥¿æš¦',
                narrow: 'AD',
                abbr: 'AD',
            },
            {
                since: '0000-12-31',
                until: -Infinity,
                offset: 1,
                name: 'ç´€å…ƒå‰',
                narrow: 'BC',
                abbr: 'BC',
            },
        ],
        eraYearOrdinalRegex: /(å…ƒ|\d+)å¹´/,
        eraYearOrdinalParse: function (input, match) {
            return match[1] === 'å…ƒ' ? 1 : parseInt(match[1] || input, 10);
        },
        months: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split('_'),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ—¥æ›œæ—¥_æœˆæ›œæ—¥_ç«æ›œæ—¥_æ°´æ›œæ—¥_æœ¨æ›œæ—¥_é‡‘æ›œæ—¥_åœŸæ›œæ—¥'.split('_'),
        weekdaysShort: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
        weekdaysMin: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥ dddd HH:mm',
            l: 'YYYY/MM/DD',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥(ddd) HH:mm',
        },
        meridiemParse: /åˆå‰|åˆå¾Œ/i,
        isPM: function (input) {
            return input === 'åˆå¾Œ';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'åˆå‰';
            } else {
                return 'åˆå¾Œ';
            }
        },
        calendar: {
            sameDay: '[ä»Šæ—¥] LT',
            nextDay: '[æ˜Žæ—¥] LT',
            nextWeek: function (now) {
                if (now.week() !== this.week()) {
                    return '[æ¥é€±]dddd LT';
                } else {
                    return 'dddd LT';
                }
            },
            lastDay: '[æ˜¨æ—¥] LT',
            lastWeek: function (now) {
                if (this.week() !== now.week()) {
                    return '[å…ˆé€±]dddd LT';
                } else {
                    return 'dddd LT';
                }
            },
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}æ—¥/,
        ordinal: function (number, period) {
            switch (period) {
                case 'y':
                    return number === 1 ? 'å…ƒå¹´' : number + 'å¹´';
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så¾Œ',
            past: '%så‰',
            s: 'æ•°ç§’',
            ss: '%dç§’',
            m: '1åˆ†',
            mm: '%dåˆ†',
            h: '1æ™‚é–“',
            hh: '%dæ™‚é–“',
            d: '1æ—¥',
            dd: '%dæ—¥',
            M: '1ãƒ¶æœˆ',
            MM: '%dãƒ¶æœˆ',
            y: '1å¹´',
            yy: '%då¹´',
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('jv', {
        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /enjing|siyang|sonten|ndalu/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'enjing') {
                return hour;
            } else if (meridiem === 'siyang') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'enjing';
            } else if (hours < 15) {
                return 'siyang';
            } else if (hours < 19) {
                return 'sonten';
            } else {
                return 'ndalu';
            }
        },
        calendar: {
            sameDay: '[Dinten puniko pukul] LT',
            nextDay: '[Mbenjang pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kala wingi pukul] LT',
            lastWeek: 'dddd [kepengker pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'wonten ing %s',
            past: '%s ingkang kepengker',
            s: 'sawetawis detik',
            ss: '%d detik',
            m: 'setunggal menit',
            mm: '%d menit',
            h: 'setunggal jam',
            hh: '%d jam',
            d: 'sedinten',
            dd: '%d dinten',
            M: 'sewulan',
            MM: '%d wulan',
            y: 'setaun',
            yy: '%d taun',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ka', {
        months: 'áƒ˜áƒáƒœáƒ•áƒáƒ áƒ˜_áƒ—áƒ”áƒ‘áƒ”áƒ áƒ•áƒáƒšáƒ˜_áƒ›áƒáƒ áƒ¢áƒ˜_áƒáƒžáƒ áƒ˜áƒšáƒ˜_áƒ›áƒáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒœáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒšáƒ˜áƒ¡áƒ˜_áƒáƒ’áƒ•áƒ˜áƒ¡áƒ¢áƒ_áƒ¡áƒ”áƒ¥áƒ¢áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘áƒ”áƒ áƒ˜_áƒœáƒáƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒ“áƒ”áƒ™áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜'.split(
            '_'
        ),
        monthsShort: 'áƒ˜áƒáƒœ_áƒ—áƒ”áƒ‘_áƒ›áƒáƒ _áƒáƒžáƒ _áƒ›áƒáƒ˜_áƒ˜áƒ•áƒœ_áƒ˜áƒ•áƒš_áƒáƒ’áƒ•_áƒ¡áƒ”áƒ¥_áƒáƒ¥áƒ¢_áƒœáƒáƒ”_áƒ“áƒ”áƒ™'.split('_'),
        weekdays: {
            standalone: 'áƒ™áƒ•áƒ˜áƒ áƒ_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ˜_áƒ¨áƒáƒ‘áƒáƒ—áƒ˜'.split(
                '_'
            ),
            format: 'áƒ™áƒ•áƒ˜áƒ áƒáƒ¡_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ¡_áƒ¨áƒáƒ‘áƒáƒ—áƒ¡'.split(
                '_'
            ),
            isFormat: /(áƒ¬áƒ˜áƒœáƒ|áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’)/,
        },
        weekdaysShort: 'áƒ™áƒ•áƒ˜_áƒáƒ áƒ¨_áƒ¡áƒáƒ›_áƒáƒ—áƒ®_áƒ®áƒ£áƒ—_áƒžáƒáƒ _áƒ¨áƒáƒ‘'.split('_'),
        weekdaysMin: 'áƒ™áƒ•_áƒáƒ _áƒ¡áƒ_áƒáƒ—_áƒ®áƒ£_áƒžáƒ_áƒ¨áƒ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[áƒ“áƒ¦áƒ”áƒ¡] LT[-áƒ–áƒ”]',
            nextDay: '[áƒ®áƒ•áƒáƒš] LT[-áƒ–áƒ”]',
            lastDay: '[áƒ’áƒ£áƒ¨áƒ˜áƒœ] LT[-áƒ–áƒ”]',
            nextWeek: '[áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’] dddd LT[-áƒ–áƒ”]',
            lastWeek: '[áƒ¬áƒ˜áƒœáƒ] dddd LT-áƒ–áƒ”',
            sameElse: 'L',
        },
        relativeTime: {
            future: function (s) {
                return s.replace(/(áƒ¬áƒáƒ›|áƒ¬áƒ£áƒ—|áƒ¡áƒáƒáƒ—|áƒ¬áƒ”áƒš|áƒ“áƒ¦|áƒ—áƒ•)(áƒ˜|áƒ”)/, function (
                    $0,
                    $1,
                    $2
                ) {
                    return $2 === 'áƒ˜' ? $1 + 'áƒ¨áƒ˜' : $1 + $2 + 'áƒ¨áƒ˜';
                });
            },
            past: function (s) {
                if (/(áƒ¬áƒáƒ›áƒ˜|áƒ¬áƒ£áƒ—áƒ˜|áƒ¡áƒáƒáƒ—áƒ˜|áƒ“áƒ¦áƒ”|áƒ—áƒ•áƒ”)/.test(s)) {
                    return s.replace(/(áƒ˜|áƒ”)$/, 'áƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
                }
                if (/áƒ¬áƒ”áƒšáƒ˜/.test(s)) {
                    return s.replace(/áƒ¬áƒ”áƒšáƒ˜$/, 'áƒ¬áƒšáƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
                }
                return s;
            },
            s: 'áƒ áƒáƒ›áƒ“áƒ”áƒœáƒ˜áƒ›áƒ” áƒ¬áƒáƒ›áƒ˜',
            ss: '%d áƒ¬áƒáƒ›áƒ˜',
            m: 'áƒ¬áƒ£áƒ—áƒ˜',
            mm: '%d áƒ¬áƒ£áƒ—áƒ˜',
            h: 'áƒ¡áƒáƒáƒ—áƒ˜',
            hh: '%d áƒ¡áƒáƒáƒ—áƒ˜',
            d: 'áƒ“áƒ¦áƒ”',
            dd: '%d áƒ“áƒ¦áƒ”',
            M: 'áƒ—áƒ•áƒ”',
            MM: '%d áƒ—áƒ•áƒ”',
            y: 'áƒ¬áƒ”áƒšáƒ˜',
            yy: '%d áƒ¬áƒ”áƒšáƒ˜',
        },
        dayOfMonthOrdinalParse: /0|1-áƒšáƒ˜|áƒ›áƒ”-\d{1,2}|\d{1,2}-áƒ”/,
        ordinal: function (number) {
            if (number === 0) {
                return number;
            }
            if (number === 1) {
                return number + '-áƒšáƒ˜';
            }
            if (
                number < 20 ||
                (number <= 100 && number % 20 === 0) ||
                number % 100 === 0
            ) {
                return 'áƒ›áƒ”-' + number;
            }
            return number + '-áƒ”';
        },
        week: {
            dow: 1,
            doy: 7,
        },
    });

    //! moment.js locale configuration

    var suffixes$1 = {
        0: '-ÑˆÑ–',
        1: '-ÑˆÑ–',
        2: '-ÑˆÑ–',
        3: '-ÑˆÑ–',
        4: '-ÑˆÑ–',
        5: '-ÑˆÑ–',
        6: '-ÑˆÑ‹',
        7: '-ÑˆÑ–',
        8: '-ÑˆÑ–',
        9: '-ÑˆÑ‹',
        10: '-ÑˆÑ‹',
        20: '-ÑˆÑ‹',
        30: '-ÑˆÑ‹',
        40: '-ÑˆÑ‹',
        50: '-ÑˆÑ–',
        60: '-ÑˆÑ‹',
        70: '-ÑˆÑ–',
        80: '-ÑˆÑ–',
        90: '-ÑˆÑ‹',
        100: '-ÑˆÑ–',
    };

    hooks.defineLocale('kk', {
        months: 'Ò›Ð°Ò£Ñ‚Ð°Ñ€_Ð°Ò›Ð¿Ð°Ð½_Ð½Ð°ÑƒÑ€Ñ‹Ð·_ÑÓ™ÑƒÑ–Ñ€_Ð¼Ð°Ð¼Ñ‹Ñ€_Ð¼Ð°ÑƒÑÑ‹Ð¼_ÑˆÑ–Ð»Ð´Ðµ_Ñ‚Ð°Ð¼Ñ‹Ð·_Ò›Ñ‹Ñ€ÐºÒ¯Ð¹ÐµÐº_Ò›Ð°Ð·Ð°Ð½_Ò›Ð°Ñ€Ð°ÑˆÐ°_Ð¶ÐµÐ»Ñ‚Ð¾Ò›ÑÐ°Ð½'.split(
            '_'
        ),
        monthsShort: 'Ò›Ð°Ò£_Ð°Ò›Ð¿_Ð½Ð°Ñƒ_ÑÓ™Ñƒ_Ð¼Ð°Ð¼_Ð¼Ð°Ñƒ_ÑˆÑ–Ð»_Ñ‚Ð°Ð¼_Ò›Ñ‹Ñ€_Ò›Ð°Ð·_Ò›Ð°Ñ€_Ð¶ÐµÐ»'.split('_'),
        weekdays: 'Ð¶ÐµÐºÑÐµÐ½Ð±Ñ–_Ð´Ò¯Ð¹ÑÐµÐ½Ð±Ñ–_ÑÐµÐ¹ÑÐµÐ½Ð±Ñ–_ÑÓ™Ñ€ÑÐµÐ½Ð±Ñ–_Ð±ÐµÐ¹ÑÐµÐ½Ð±Ñ–_Ð¶Ò±Ð¼Ð°_ÑÐµÐ½Ð±Ñ–'.split(
            '_'
        ),
        weekdaysShort: 'Ð¶ÐµÐº_Ð´Ò¯Ð¹_ÑÐµÐ¹_ÑÓ™Ñ€_Ð±ÐµÐ¹_Ð¶Ò±Ð¼_ÑÐµÐ½'.split('_'),
        weekdaysMin: 'Ð¶Ðº_Ð´Ð¹_ÑÐ¹_ÑÑ€_Ð±Ð¹_Ð¶Ð¼_ÑÐ½'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ð‘Ò¯Ð³Ñ–Ð½ ÑÐ°Ò“Ð°Ñ‚] LT',
            nextDay: '[Ð•Ñ€Ñ‚ÐµÒ£ ÑÐ°Ò“Ð°Ñ‚] LT',
            nextWeek: 'dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
            lastDay: '[ÐšÐµÑˆÐµ ÑÐ°Ò“Ð°Ñ‚] LT',
            lastWeek: '[Ó¨Ñ‚ÐºÐµÐ½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ò£] dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ñ–ÑˆÑ–Ð½Ð´Ðµ',
            past: '%s Ð±Ò±Ñ€Ñ‹Ð½',
            s: 'Ð±Ñ–Ñ€Ð½ÐµÑˆÐµ ÑÐµÐºÑƒÐ½Ð´',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´',
            m: 'Ð±Ñ–Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
            h: 'Ð±Ñ–Ñ€ ÑÐ°Ò“Ð°Ñ‚',
            hh: '%d ÑÐ°Ò“Ð°Ñ‚',
            d: 'Ð±Ñ–Ñ€ ÐºÒ¯Ð½',
            dd: '%d ÐºÒ¯Ð½',
            M: 'Ð±Ñ–Ñ€ Ð°Ð¹',
            MM: '%d Ð°Ð¹',
            y: 'Ð±Ñ–Ñ€ Ð¶Ñ‹Ð»',
            yy: '%d Ð¶Ñ‹Ð»',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÑˆÑ–|ÑˆÑ‹)/,
        ordinal: function (number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$9 = {
            1: 'áŸ¡',
            2: 'áŸ¢',
            3: 'áŸ£',
            4: 'áŸ¤',
            5: 'áŸ¥',
            6: 'áŸ¦',
            7: 'áŸ§',
            8: 'áŸ¨',
            9: 'áŸ©',
            0: 'áŸ ',
        },
        numberMap$8 = {
            'áŸ¡': '1',
            'áŸ¢': '2',
            'áŸ£': '3',
            'áŸ¤': '4',
            'áŸ¥': '5',
            'áŸ¦': '6',
            'áŸ§': '7',
            'áŸ¨': '8',
            'áŸ©': '9',
            'áŸ ': '0',
        };

    hooks.defineLocale('km', {
        months: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
            '_'
        ),
        monthsShort: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
            '_'
        ),
        weekdays: 'áž¢áž¶áž‘áž·ážáŸ’áž™_áž…áŸáž“áŸ’áž‘_áž¢áž„áŸ’áž‚áž¶ážš_áž–áž»áž’_áž–áŸ’ážšáž ážŸáŸ’áž”ážáž·áŸ_ážŸáž»áž€áŸ’ážš_ážŸáŸ…ážšáŸ'.split('_'),
        weekdaysShort: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
        weekdaysMin: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        meridiemParse: /áž–áŸ’ážšáž¹áž€|áž›áŸ’áž„áž¶áž…/,
        isPM: function (input) {
            return input === 'áž›áŸ’áž„áž¶áž…';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'áž–áŸ’ážšáž¹áž€';
            } else {
                return 'áž›áŸ’áž„áž¶áž…';
            }
        },
        calendar: {
            sameDay: '[ážáŸ’áž„áŸƒáž“áŸáŸ‡ áž˜áŸ‰áŸ„áž„] LT',
            nextDay: '[ážŸáŸ’áž¢áŸ‚áž€ áž˜áŸ‰áŸ„áž„] LT',
            nextWeek: 'dddd [áž˜áŸ‰áŸ„áž„] LT',
            lastDay: '[áž˜áŸ’ážŸáž·áž›áž˜áž·áž‰ áž˜áŸ‰áŸ„áž„] LT',
            lastWeek: 'dddd [ážŸáž”áŸ’ážáž¶áž áŸáž˜áž»áž“] [áž˜áŸ‰áŸ„áž„] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sáž‘áŸ€áž',
            past: '%sáž˜áž»áž“',
            s: 'áž”áŸ‰áž»áž“áŸ’áž˜áž¶áž“ážœáž·áž“áž¶áž‘áž¸',
            ss: '%d ážœáž·áž“áž¶áž‘áž¸',
            m: 'áž˜áž½áž™áž“áž¶áž‘áž¸',
            mm: '%d áž“áž¶áž‘áž¸',
            h: 'áž˜áž½áž™áž˜áŸ‰áŸ„áž„',
            hh: '%d áž˜áŸ‰áŸ„áž„',
            d: 'áž˜áž½áž™ážáŸ’áž„áŸƒ',
            dd: '%d ážáŸ’áž„áŸƒ',
            M: 'áž˜áž½áž™ážáŸ‚',
            MM: '%d ážáŸ‚',
            y: 'áž˜áž½áž™áž†áŸ’áž“áž¶áŸ†',
            yy: '%d áž†áŸ’áž“áž¶áŸ†',
        },
        dayOfMonthOrdinalParse: /áž‘áž¸\d{1,2}/,
        ordinal: 'áž‘áž¸%d',
        preparse: function (string) {
            return string.replace(/[áŸ¡áŸ¢áŸ£áŸ¤áŸ¥áŸ¦áŸ§áŸ¨áŸ©áŸ ]/g, function (match) {
                return numberMap$8[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$9[match];
            });
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$a = {
            1: 'à³§',
            2: 'à³¨',
            3: 'à³©',
            4: 'à³ª',
            5: 'à³«',
            6: 'à³¬',
            7: 'à³­',
            8: 'à³®',
            9: 'à³¯',
            0: 'à³¦',
        },
        numberMap$9 = {
            'à³§': '1',
            'à³¨': '2',
            'à³©': '3',
            'à³ª': '4',
            'à³«': '5',
            'à³¬': '6',
            'à³­': '7',
            'à³®': '8',
            'à³¯': '9',
            'à³¦': '0',
        };

    hooks.defineLocale('kn', {
        months: 'à²œà²¨à²µà²°à²¿_à²«à³†à²¬à³à²°à²µà²°à²¿_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚à²¬à²°à³_à²…à²•à³à²Ÿà³†à³‚à³•à²¬à²°à³_à²¨à²µà³†à²‚à²¬à²°à³_à²¡à²¿à²¸à³†à²‚à²¬à²°à³'.split(
            '_'
        ),
        monthsShort: 'à²œà²¨_à²«à³†à²¬à³à²°_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚_à²…à²•à³à²Ÿà³†à³‚à³•_à²¨à²µà³†à²‚_à²¡à²¿à²¸à³†à²‚'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à²­à²¾à²¨à³à²µà²¾à²°_à²¸à³†à³‚à³•à²®à²µà²¾à²°_à²®à²‚à²—à²³à²µà²¾à²°_à²¬à³à²§à²µà²¾à²°_à²—à³à²°à³à²µà²¾à²°_à²¶à³à²•à³à²°à²µà²¾à²°_à²¶à²¨à²¿à²µà²¾à²°'.split(
            '_'
        ),
        weekdaysShort: 'à²­à²¾à²¨à³_à²¸à³†à³‚à³•à²®_à²®à²‚à²—à²³_à²¬à³à²§_à²—à³à²°à³_à²¶à³à²•à³à²°_à²¶à²¨à²¿'.split('_'),
        weekdaysMin: 'à²­à²¾_à²¸à³†à³‚à³•_à²®à²‚_à²¬à³_à²—à³_à²¶à³_à²¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm',
        },
        calendar: {
            sameDay: '[à²‡à²‚à²¦à³] LT',
            nextDay: '[à²¨à²¾à²³à³†] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à²¨à²¿à²¨à³à²¨à³†] LT',
            lastWeek: '[à²•à³†à³‚à²¨à³†à²¯] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à²¨à²‚à²¤à²°',
            past: '%s à²¹à²¿à²‚à²¦à³†',
            s: 'à²•à³†à²²à²µà³ à²•à³à²·à²£à²—à²³à³',
            ss: '%d à²¸à³†à²•à³†à²‚à²¡à³à²—à²³à³',
            m: 'à²’à²‚à²¦à³ à²¨à²¿à²®à²¿à²·',
            mm: '%d à²¨à²¿à²®à²¿à²·',
            h: 'à²’à²‚à²¦à³ à²—à²‚à²Ÿà³†',
            hh: '%d à²—à²‚à²Ÿà³†',
            d: 'à²’à²‚à²¦à³ à²¦à²¿à²¨',
            dd: '%d à²¦à²¿à²¨',
            M: 'à²’à²‚à²¦à³ à²¤à²¿à²‚à²—à²³à³',
            MM: '%d à²¤à²¿à²‚à²—à²³à³',
            y: 'à²’à²‚à²¦à³ à²µà²°à³à²·',
            yy: '%d à²µà²°à³à²·',
        },
        preparse: function (string) {
            return string.replace(/[à³§à³¨à³©à³ªà³«à³¬à³­à³®à³¯à³¦]/g, function (match) {
                return numberMap$9[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$a[match];
            });
        },
        meridiemParse: /à²°à²¾à²¤à³à²°à²¿|à²¬à³†à²³à²¿à²—à³à²—à³†|à²®à²§à³à²¯à²¾à²¹à³à²¨|à²¸à²‚à²œà³†/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à²°à²¾à²¤à³à²°à²¿') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à²¬à³†à²³à²¿à²—à³à²—à³†') {
                return hour;
            } else if (meridiem === 'à²®à²§à³à²¯à²¾à²¹à³à²¨') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à²¸à²‚à²œà³†') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à²°à²¾à²¤à³à²°à²¿';
            } else if (hour < 10) {
                return 'à²¬à³†à²³à²¿à²—à³à²—à³†';
            } else if (hour < 17) {
                return 'à²®à²§à³à²¯à²¾à²¹à³à²¨';
            } else if (hour < 20) {
                return 'à²¸à²‚à²œà³†';
            } else {
                return 'à²°à²¾à²¤à³à²°à²¿';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}(à²¨à³†à³•)/,
        ordinal: function (number) {
            return number + 'à²¨à³†à³•';
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ko', {
        months: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split('_'),
        monthsShort: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split(
            '_'
        ),
        weekdays: 'ì¼ìš”ì¼_ì›”ìš”ì¼_í™”ìš”ì¼_ìˆ˜ìš”ì¼_ëª©ìš”ì¼_ê¸ˆìš”ì¼_í† ìš”ì¼'.split('_'),
        weekdaysShort: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
        weekdaysMin: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'YYYY.MM.DD.',
            LL: 'YYYYë…„ MMMM Dì¼',
            LLL: 'YYYYë…„ MMMM Dì¼ A h:mm',
            LLLL: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
            l: 'YYYY.MM.DD.',
            ll: 'YYYYë…„ MMMM Dì¼',
            lll: 'YYYYë…„ MMMM Dì¼ A h:mm',
            llll: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
        },
        calendar: {
            sameDay: 'ì˜¤ëŠ˜ LT',
            nextDay: 'ë‚´ì¼ LT',
            nextWeek: 'dddd LT',
            lastDay: 'ì–´ì œ LT',
            lastWeek: 'ì§€ë‚œì£¼ dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s í›„',
            past: '%s ì „',
            s: 'ëª‡ ì´ˆ',
            ss: '%dì´ˆ',
            m: '1ë¶„',
            mm: '%dë¶„',
            h: 'í•œ ì‹œê°„',
            hh: '%dì‹œê°„',
            d: 'í•˜ë£¨',
            dd: '%dì¼',
            M: 'í•œ ë‹¬',
            MM: '%dë‹¬',
            y: 'ì¼ ë…„',
            yy: '%dë…„',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ì¼|ì›”|ì£¼)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'ì¼';
                case 'M':
                    return number + 'ì›”';
                case 'w':
                case 'W':
                    return number + 'ì£¼';
                default:
                    return number;
            }
        },
        meridiemParse: /ì˜¤ì „|ì˜¤í›„/,
        isPM: function (token) {
            return token === 'ì˜¤í›„';
        },
        meridiem: function (hour, minute, isUpper) {
            return hour < 12 ? 'ì˜¤ì „' : 'ì˜¤í›„';
        },
    });

    //! moment.js locale configuration

    var symbolMap$b = {
            1: 'Ù¡',
            2: 'Ù¢',
            3: 'Ù£',
            4: 'Ù¤',
            5: 'Ù¥',
            6: 'Ù¦',
            7: 'Ù§',
            8: 'Ù¨',
            9: 'Ù©',
            0: 'Ù ',
        },
        numberMap$a = {
            'Ù¡': '1',
            'Ù¢': '2',
            'Ù£': '3',
            'Ù¤': '4',
            'Ù¥': '5',
            'Ù¦': '6',
            'Ù§': '7',
            'Ù¨': '8',
            'Ù©': '9',
            'Ù ': '0',
        },
        months$8 = [
            'Ú©Ø§Ù†ÙˆÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
            'Ø´ÙˆØ¨Ø§Øª',
            'Ø¦Ø§Ø²Ø§Ø±',
            'Ù†ÛŒØ³Ø§Ù†',
            'Ø¦Ø§ÛŒØ§Ø±',
            'Ø­ÙˆØ²Û•ÛŒØ±Ø§Ù†',
            'ØªÛ•Ù…Ù…ÙˆØ²',
            'Ø¦Ø§Ø¨',
            'Ø¦Û•ÛŒÙ„ÙˆÙˆÙ„',
            'ØªØ´Ø±ÛŒÙ†ÛŒ ÛŒÛ•ÙƒÛ•Ù…',
            'ØªØ´Ø±ÛŒÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
            'ÙƒØ§Ù†ÙˆÙ†ÛŒ ÛŒÛ•Ú©Û•Ù…',
        ];

    hooks.defineLocale('ku', {
        months: months$8,
        monthsShort: months$8,
        weekdays: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø³ÛŽØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
            '_'
        ),
        weekdaysShort: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…_Ø³ÛŽØ´Ù‡â€ŒÙ…_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
            '_'
        ),
        weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ù‡_Ø´'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        meridiemParse: /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ|Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ/,
        isPM: function (input) {
            return /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ';
            } else {
                return 'Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ';
            }
        },
        calendar: {
            sameDay: '[Ø¦Ù‡â€ŒÙ…Ø±Û† ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            nextDay: '[Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            nextWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            lastDay: '[Ø¯ÙˆÛŽÙ†ÛŽ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            lastWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ù„Ù‡â€Œ %s',
            past: '%s',
            s: 'Ú†Ù‡â€ŒÙ†Ø¯ Ú†Ø±ÙƒÙ‡â€ŒÛŒÙ‡â€ŒÙƒ',
            ss: 'Ú†Ø±ÙƒÙ‡â€Œ %d',
            m: 'ÛŒÙ‡â€ŒÙƒ Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
            mm: '%d Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
            h: 'ÛŒÙ‡â€ŒÙƒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
            hh: '%d ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
            d: 'ÛŒÙ‡â€ŒÙƒ Ú•Û†Ú˜',
            dd: '%d Ú•Û†Ú˜',
            M: 'ÛŒÙ‡â€ŒÙƒ Ù…Ø§Ù†Ú¯',
            MM: '%d Ù…Ø§Ù†Ú¯',
            y: 'ÛŒÙ‡â€ŒÙƒ Ø³Ø§Úµ',
            yy: '%d Ø³Ø§Úµ',
        },
        preparse: function (string) {
            return string
                .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                    return numberMap$a[match];
                })
                .replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string
                .replace(/\d/g, function (match) {
                    return symbolMap$b[match];
                })
                .replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var suffixes$2 = {
        0: '-Ñ‡Ò¯',
        1: '-Ñ‡Ð¸',
        2: '-Ñ‡Ð¸',
        3: '-Ñ‡Ò¯',
        4: '-Ñ‡Ò¯',
        5: '-Ñ‡Ð¸',
        6: '-Ñ‡Ñ‹',
        7: '-Ñ‡Ð¸',
        8: '-Ñ‡Ð¸',
        9: '-Ñ‡Ñƒ',
        10: '-Ñ‡Ñƒ',
        20: '-Ñ‡Ñ‹',
        30: '-Ñ‡Ñƒ',
        40: '-Ñ‡Ñ‹',
        50: '-Ñ‡Ò¯',
        60: '-Ñ‡Ñ‹',
        70: '-Ñ‡Ð¸',
        80: '-Ñ‡Ð¸',
        90: '-Ñ‡Ñƒ',
        100: '-Ñ‡Ò¯',
    };

    hooks.defineLocale('ky', {
        months: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
            '_'
        ),
        monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split(
            '_'
        ),
        weekdays: 'Ð–ÐµÐºÑˆÐµÐ¼Ð±Ð¸_Ð”Ò¯Ð¹ÑˆÓ©Ð¼Ð±Ò¯_Ð¨ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð¨Ð°Ñ€ÑˆÐµÐ¼Ð±Ð¸_Ð‘ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð–ÑƒÐ¼Ð°_Ð˜ÑˆÐµÐ¼Ð±Ð¸'.split(
            '_'
        ),
        weekdaysShort: 'Ð–ÐµÐº_Ð”Ò¯Ð¹_Ð¨ÐµÐ¹_Ð¨Ð°Ñ€_Ð‘ÐµÐ¹_Ð–ÑƒÐ¼_Ð˜ÑˆÐµ'.split('_'),
        weekdaysMin: 'Ð–Ðº_Ð”Ð¹_Ð¨Ð¹_Ð¨Ñ€_Ð‘Ð¹_Ð–Ð¼_Ð˜Ñˆ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ð‘Ò¯Ð³Ò¯Ð½ ÑÐ°Ð°Ñ‚] LT',
            nextDay: '[Ð­Ñ€Ñ‚ÐµÒ£ ÑÐ°Ð°Ñ‚] LT',
            nextWeek: 'dddd [ÑÐ°Ð°Ñ‚] LT',
            lastDay: '[ÐšÐµÑ‡ÑÑ ÑÐ°Ð°Ñ‚] LT',
            lastWeek: '[Ó¨Ñ‚ÐºÓ©Ð½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ð½] dddd [ÐºÒ¯Ð½Ò¯] [ÑÐ°Ð°Ñ‚] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ð¸Ñ‡Ð¸Ð½Ð´Ðµ',
            past: '%s Ð¼ÑƒÑ€ÑƒÐ½',
            s: 'Ð±Ð¸Ñ€Ð½ÐµÑ‡Ðµ ÑÐµÐºÑƒÐ½Ð´',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´',
            m: 'Ð±Ð¸Ñ€ Ð¼Ò¯Ð½Ó©Ñ‚',
            mm: '%d Ð¼Ò¯Ð½Ó©Ñ‚',
            h: 'Ð±Ð¸Ñ€ ÑÐ°Ð°Ñ‚',
            hh: '%d ÑÐ°Ð°Ñ‚',
            d: 'Ð±Ð¸Ñ€ ÐºÒ¯Ð½',
            dd: '%d ÐºÒ¯Ð½',
            M: 'Ð±Ð¸Ñ€ Ð°Ð¹',
            MM: '%d Ð°Ð¹',
            y: 'Ð±Ð¸Ñ€ Ð¶Ñ‹Ð»',
            yy: '%d Ð¶Ñ‹Ð»',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ñ‡Ð¸|Ñ‡Ñ‹|Ñ‡Ò¯|Ñ‡Ñƒ)/,
        ordinal: function (number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$6(number, withoutSuffix, key, isFuture) {
        var format = {
            m: ['eng Minutt', 'enger Minutt'],
            h: ['eng Stonn', 'enger Stonn'],
            d: ['een Dag', 'engem Dag'],
            M: ['ee Mount', 'engem Mount'],
            y: ['ee Joer', 'engem Joer'],
        };
        return withoutSuffix ? format[key][0] : format[key][1];
    }
    function processFutureTime(string) {
        var number = string.substr(0, string.indexOf(' '));
        if (eifelerRegelAppliesToNumber(number)) {
            return 'a ' + string;
        }
        return 'an ' + string;
    }
    function processPastTime(string) {
        var number = string.substr(0, string.indexOf(' '));
        if (eifelerRegelAppliesToNumber(number)) {
            return 'viru ' + string;
        }
        return 'virun ' + string;
    }
    /**
     * Returns true if the word before the given number loses the '-n' ending.
     * e.g. 'an 10 Deeg' but 'a 5 Deeg'
     *
     * @param number {integer}
     * @returns {boolean}
     */
    function eifelerRegelAppliesToNumber(number) {
        number = parseInt(number, 10);
        if (isNaN(number)) {
            return false;
        }
        if (number < 0) {
            // Negative Number --> always true
            return true;
        } else if (number < 10) {
            // Only 1 digit
            if (4 <= number && number <= 7) {
                return true;
            }
            return false;
        } else if (number < 100) {
            // 2 digits
            var lastDigit = number % 10,
                firstDigit = number / 10;
            if (lastDigit === 0) {
                return eifelerRegelAppliesToNumber(firstDigit);
            }
            return eifelerRegelAppliesToNumber(lastDigit);
        } else if (number < 10000) {
            // 3 or 4 digits --> recursively check first digit
            while (number >= 10) {
                number = number / 10;
            }
            return eifelerRegelAppliesToNumber(number);
        } else {
            // Anything larger than 4 digits: recursively check first n-3 digits
            number = number / 1000;
            return eifelerRegelAppliesToNumber(number);
        }
    }

    hooks.defineLocale('lb', {
        months: 'Januar_Februar_MÃ¤erz_AbrÃ«ll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
            '_'
        ),
        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Sonndeg_MÃ©indeg_DÃ«nschdeg_MÃ«ttwoch_Donneschdeg_Freideg_Samschdeg'.split(
            '_'
        ),
        weekdaysShort: 'So._MÃ©._DÃ«._MÃ«._Do._Fr._Sa.'.split('_'),
        weekdaysMin: 'So_MÃ©_DÃ«_MÃ«_Do_Fr_Sa'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm [Auer]',
            LTS: 'H:mm:ss [Auer]',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm [Auer]',
            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
        },
        calendar: {
            sameDay: '[Haut um] LT',
            sameElse: 'L',
            nextDay: '[Muer um] LT',
            nextWeek: 'dddd [um] LT',
            lastDay: '[GÃ«schter um] LT',
            lastWeek: function () {
                // Different date string for 'DÃ«nschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
                switch (this.day()) {
                    case 2:
                    case 4:
                        return '[Leschten] dddd [um] LT';
                    default:
                        return '[Leschte] dddd [um] LT';
                }
            },
        },
        relativeTime: {
            future: processFutureTime,
            past: processPastTime,
            s: 'e puer Sekonnen',
            ss: '%d Sekonnen',
            m: processRelativeTime$6,
            mm: '%d Minutten',
            h: processRelativeTime$6,
            hh: '%d Stonnen',
            d: processRelativeTime$6,
            dd: '%d Deeg',
            M: processRelativeTime$6,
            MM: '%d MÃ©int',
            y: processRelativeTime$6,
            yy: '%d Joer',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('lo', {
        months: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
            '_'
        ),
        monthsShort: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
            '_'
        ),
        weekdays: 'àº­àº²àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
        weekdaysShort: 'àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
        weekdaysMin: 'àº—_àºˆ_àº­àº„_àºž_àºžàº«_àºªàº_àºª'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'àº§àº±àº™dddd D MMMM YYYY HH:mm',
        },
        meridiemParse: /àº•àº­àº™à»€àºŠàº»à»‰àº²|àº•àº­àº™à»àº¥àº‡/,
        isPM: function (input) {
            return input === 'àº•àº­àº™à»àº¥àº‡';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'àº•àº­àº™à»€àºŠàº»à»‰àº²';
            } else {
                return 'àº•àº­àº™à»àº¥àº‡';
            }
        },
        calendar: {
            sameDay: '[àº¡àº·à»‰àº™àºµà»‰à»€àº§àº¥àº²] LT',
            nextDay: '[àº¡àº·à»‰àº­àº·à»ˆàº™à»€àº§àº¥àº²] LT',
            nextWeek: '[àº§àº±àº™]dddd[à»œà»‰àº²à»€àº§àº¥àº²] LT',
            lastDay: '[àº¡àº·à»‰àº§àº²àº™àº™àºµà»‰à»€àº§àº¥àº²] LT',
            lastWeek: '[àº§àº±àº™]dddd[à»àº¥à»‰àº§àº™àºµà»‰à»€àº§àº¥àº²] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'àº­àºµàº %s',
            past: '%sàºœà»ˆàº²àº™àº¡àº²',
            s: 'àºšà»à»ˆà»€àº—àº»à»ˆàº²à»ƒàº”àº§àº´àº™àº²àº—àºµ',
            ss: '%d àº§àº´àº™àº²àº—àºµ',
            m: '1 àº™àº²àº—àºµ',
            mm: '%d àº™àº²àº—àºµ',
            h: '1 àºŠàº»à»ˆàº§à»‚àº¡àº‡',
            hh: '%d àºŠàº»à»ˆàº§à»‚àº¡àº‡',
            d: '1 àº¡àº·à»‰',
            dd: '%d àº¡àº·à»‰',
            M: '1 à»€àº”àº·àº­àº™',
            MM: '%d à»€àº”àº·àº­àº™',
            y: '1 àº›àºµ',
            yy: '%d àº›àºµ',
        },
        dayOfMonthOrdinalParse: /(àº—àºµà»ˆ)\d{1,2}/,
        ordinal: function (number) {
            return 'àº—àºµà»ˆ' + number;
        },
    });

    //! moment.js locale configuration

    var units = {
        ss: 'sekundÄ—_sekundÅ¾iÅ³_sekundes',
        m: 'minutÄ—_minutÄ—s_minutÄ™',
        mm: 'minutÄ—s_minuÄiÅ³_minutes',
        h: 'valanda_valandos_valandÄ…',
        hh: 'valandos_valandÅ³_valandas',
        d: 'diena_dienos_dienÄ…',
        dd: 'dienos_dienÅ³_dienas',
        M: 'mÄ—nuo_mÄ—nesio_mÄ—nesÄ¯',
        MM: 'mÄ—nesiai_mÄ—nesiÅ³_mÄ—nesius',
        y: 'metai_metÅ³_metus',
        yy: 'metai_metÅ³_metus',
    };
    function translateSeconds(number, withoutSuffix, key, isFuture) {
        if (withoutSuffix) {
            return 'kelios sekundÄ—s';
        } else {
            return isFuture ? 'keliÅ³ sekundÅ¾iÅ³' : 'kelias sekundes';
        }
    }
    function translateSingular(number, withoutSuffix, key, isFuture) {
        return withoutSuffix
            ? forms(key)[0]
            : isFuture
            ? forms(key)[1]
            : forms(key)[2];
    }
    function special(number) {
        return number % 10 === 0 || (number > 10 && number < 20);
    }
    function forms(key) {
        return units[key].split('_');
    }
    function translate$6(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        if (number === 1) {
            return (
                result + translateSingular(number, withoutSuffix, key[0], isFuture)
            );
        } else if (withoutSuffix) {
            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
        } else {
            if (isFuture) {
                return result + forms(key)[1];
            } else {
                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
            }
        }
    }
    hooks.defineLocale('lt', {
        months: {
            format: 'sausio_vasario_kovo_balandÅ¾io_geguÅ¾Ä—s_birÅ¾elio_liepos_rugpjÅ«Äio_rugsÄ—jo_spalio_lapkriÄio_gruodÅ¾io'.split(
                '_'
            ),
            standalone: 'sausis_vasaris_kovas_balandis_geguÅ¾Ä—_birÅ¾elis_liepa_rugpjÅ«tis_rugsÄ—jis_spalis_lapkritis_gruodis'.split(
                '_'
            ),
            isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
        },
        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
        weekdays: {
            format: 'sekmadienÄ¯_pirmadienÄ¯_antradienÄ¯_treÄiadienÄ¯_ketvirtadienÄ¯_penktadienÄ¯_Å¡eÅ¡tadienÄ¯'.split(
                '_'
            ),
            standalone: 'sekmadienis_pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis'.split(
                '_'
            ),
            isFormat: /dddd HH:mm/,
        },
        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡'.split('_'),
        weekdaysMin: 'S_P_A_T_K_Pn_Å '.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY [m.] MMMM D [d.]',
            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
            l: 'YYYY-MM-DD',
            ll: 'YYYY [m.] MMMM D [d.]',
            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
        },
        calendar: {
            sameDay: '[Å iandien] LT',
            nextDay: '[Rytoj] LT',
            nextWeek: 'dddd LT',
            lastDay: '[Vakar] LT',
            lastWeek: '[PraÄ—jusÄ¯] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'po %s',
            past: 'prieÅ¡ %s',
            s: translateSeconds,
            ss: translate$6,
            m: translateSingular,
            mm: translate$6,
            h: translateSingular,
            hh: translate$6,
            d: translateSingular,
            dd: translate$6,
            M: translateSingular,
            MM: translate$6,
            y: translateSingular,
            yy: translate$6,
        },
        dayOfMonthOrdinalParse: /\d{1,2}-oji/,
        ordinal: function (number) {
            return number + '-oji';
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var units$1 = {
        ss: 'sekundes_sekundÄ“m_sekunde_sekundes'.split('_'),
        m: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
        mm: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
        h: 'stundas_stundÄm_stunda_stundas'.split('_'),
        hh: 'stundas_stundÄm_stunda_stundas'.split('_'),
        d: 'dienas_dienÄm_diena_dienas'.split('_'),
        dd: 'dienas_dienÄm_diena_dienas'.split('_'),
        M: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
        MM: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
        y: 'gada_gadiem_gads_gadi'.split('_'),
        yy: 'gada_gadiem_gads_gadi'.split('_'),
    };
    /**
     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
     */
    function format$1(forms, number, withoutSuffix) {
        if (withoutSuffix) {
            // E.g. "21 minÅ«te", "3 minÅ«tes".
            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
        } else {
            // E.g. "21 minÅ«tes" as in "pÄ“c 21 minÅ«tes".
            // E.g. "3 minÅ«tÄ“m" as in "pÄ“c 3 minÅ«tÄ“m".
            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
        }
    }
    function relativeTimeWithPlural$1(number, withoutSuffix, key) {
        return number + ' ' + format$1(units$1[key], number, withoutSuffix);
    }
    function relativeTimeWithSingular(number, withoutSuffix, key) {
        return format$1(units$1[key], number, withoutSuffix);
    }
    function relativeSeconds(number, withoutSuffix) {
        return withoutSuffix ? 'daÅ¾as sekundes' : 'daÅ¾Äm sekundÄ“m';
    }

    hooks.defineLocale('lv', {
        months: 'janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec'.split('_'),
        weekdays: 'svÄ“tdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena'.split(
            '_'
        ),
        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY.',
            LL: 'YYYY. [gada] D. MMMM',
            LLL: 'YYYY. [gada] D. MMMM, HH:mm',
            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
        },
        calendar: {
            sameDay: '[Å odien pulksten] LT',
            nextDay: '[RÄ«t pulksten] LT',
            nextWeek: 'dddd [pulksten] LT',
            lastDay: '[Vakar pulksten] LT',
            lastWeek: '[PagÄjuÅ¡Ä] dddd [pulksten] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'pÄ“c %s',
            past: 'pirms %s',
            s: relativeSeconds,
            ss: relativeTimeWithPlural$1,
            m: relativeTimeWithSingular,
            mm: relativeTimeWithPlural$1,
            h: relativeTimeWithSingular,
            hh: relativeTimeWithPlural$1,
            d: relativeTimeWithSingular,
            dd: relativeTimeWithPlural$1,
            M: relativeTimeWithSingular,
            MM: relativeTimeWithPlural$1,
            y: relativeTimeWithSingular,
            yy: relativeTimeWithPlural$1,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var translator = {
        words: {
            //Different grammatical cases
            ss: ['sekund', 'sekunda', 'sekundi'],
            m: ['jedan minut', 'jednog minuta'],
            mm: ['minut', 'minuta', 'minuta'],
            h: ['jedan sat', 'jednog sata'],
            hh: ['sat', 'sata', 'sati'],
            dd: ['dan', 'dana', 'dana'],
            MM: ['mjesec', 'mjeseca', 'mjeseci'],
            yy: ['godina', 'godine', 'godina'],
        },
        correctGrammaticalCase: function (number, wordKey) {
            return number === 1
                ? wordKey[0]
                : number >= 2 && number <= 4
                ? wordKey[1]
                : wordKey[2];
        },
        translate: function (number, withoutSuffix, key) {
            var wordKey = translator.words[key];
            if (key.length === 1) {
                return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
                return (
                    number +
                    ' ' +
                    translator.correctGrammaticalCase(number, wordKey)
                );
            }
        },
    };

    hooks.defineLocale('me', {
        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sjutra u] LT',

            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedjelju] [u] LT';
                    case 3:
                        return '[u] [srijedu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄe u] LT',
            lastWeek: function () {
                var lastWeekDays = [
                    '[proÅ¡le] [nedjelje] [u] LT',
                    '[proÅ¡log] [ponedjeljka] [u] LT',
                    '[proÅ¡log] [utorka] [u] LT',
                    '[proÅ¡le] [srijede] [u] LT',
                    '[proÅ¡log] [Äetvrtka] [u] LT',
                    '[proÅ¡log] [petka] [u] LT',
                    '[proÅ¡le] [subote] [u] LT',
                ];
                return lastWeekDays[this.day()];
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'prije %s',
            s: 'nekoliko sekundi',
            ss: translator.translate,
            m: translator.translate,
            mm: translator.translate,
            h: translator.translate,
            hh: translator.translate,
            d: 'dan',
            dd: translator.translate,
            M: 'mjesec',
            MM: translator.translate,
            y: 'godinu',
            yy: translator.translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('mi', {
        months: 'Kohi-tÄte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whÄwhÄ_Haratua_Pipiri_HÅngoingoi_Here-turi-kÅkÄ_Mahuru_Whiringa-Ä-nuku_Whiringa-Ä-rangi_Hakihea'.split(
            '_'
        ),
        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_HÅngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
            '_'
        ),
        monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
        monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
        monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
        monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
        weekdays: 'RÄtapu_Mane_TÅ«rei_Wenerei_TÄite_Paraire_HÄtarei'.split('_'),
        weekdaysShort: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
        weekdaysMin: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [i] HH:mm',
            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
        },
        calendar: {
            sameDay: '[i teie mahana, i] LT',
            nextDay: '[apopo i] LT',
            nextWeek: 'dddd [i] LT',
            lastDay: '[inanahi i] LT',
            lastWeek: 'dddd [whakamutunga i] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'i roto i %s',
            past: '%s i mua',
            s: 'te hÄ“kona ruarua',
            ss: '%d hÄ“kona',
            m: 'he meneti',
            mm: '%d meneti',
            h: 'te haora',
            hh: '%d haora',
            d: 'he ra',
            dd: '%d ra',
            M: 'he marama',
            MM: '%d marama',
            y: 'he tau',
            yy: '%d tau',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('mk', {
        months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½Ð¸_Ñ˜ÑƒÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
            '_'
        ),
        monthsShort: 'Ñ˜Ð°Ð½_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
        weekdays: 'Ð½ÐµÐ´ÐµÐ»Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð¾Ðº_Ð¿ÐµÑ‚Ð¾Ðº_ÑÐ°Ð±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ðµ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÐ°Ð±'.split('_'),
        weekdaysMin: 'Ð½e_Ð¿o_Ð²Ñ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_Ña'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[Ð”ÐµÐ½ÐµÑ Ð²Ð¾] LT',
            nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²Ð¾] LT',
            nextWeek: '[Ð’Ð¾] dddd [Ð²Ð¾] LT',
            lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²Ð¾] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 6:
                        return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð°Ñ‚Ð°] dddd [Ð²Ð¾] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð¸Ð¾Ñ‚] dddd [Ð²Ð¾] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð·Ð° %s',
            past: 'Ð¿Ñ€ÐµÐ´ %s',
            s: 'Ð½ÐµÐºÐ¾Ð»ÐºÑƒ ÑÐµÐºÑƒÐ½Ð´Ð¸',
            ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
            m: 'ÐµÐ´Ð½Ð° Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
            mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
            h: 'ÐµÐ´ÐµÐ½ Ñ‡Ð°Ñ',
            hh: '%d Ñ‡Ð°ÑÐ°',
            d: 'ÐµÐ´ÐµÐ½ Ð´ÐµÐ½',
            dd: '%d Ð´ÐµÐ½Ð°',
            M: 'ÐµÐ´ÐµÐ½ Ð¼ÐµÑÐµÑ†',
            MM: '%d Ð¼ÐµÑÐµÑ†Ð¸',
            y: 'ÐµÐ´Ð½Ð° Ð³Ð¾Ð´Ð¸Ð½Ð°',
            yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
        ordinal: function (number) {
            var lastDigit = number % 10,
                last2Digits = number % 100;
            if (number === 0) {
                return number + '-ÐµÐ²';
            } else if (last2Digits === 0) {
                return number + '-ÐµÐ½';
            } else if (last2Digits > 10 && last2Digits < 20) {
                return number + '-Ñ‚Ð¸';
            } else if (lastDigit === 1) {
                return number + '-Ð²Ð¸';
            } else if (lastDigit === 2) {
                return number + '-Ñ€Ð¸';
            } else if (lastDigit === 7 || lastDigit === 8) {
                return number + '-Ð¼Ð¸';
            } else {
                return number + '-Ñ‚Ð¸';
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ml', {
        months: 'à´œà´¨àµà´µà´°à´¿_à´«àµ†à´¬àµà´°àµà´µà´°à´¿_à´®à´¾àµ¼à´šàµà´šàµ_à´à´ªàµà´°à´¿àµ½_à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ_à´“à´—à´¸àµà´±àµà´±àµ_à´¸àµ†à´ªàµà´±àµà´±à´‚à´¬àµ¼_à´’à´•àµà´Ÿàµ‹à´¬àµ¼_à´¨à´µà´‚à´¬àµ¼_à´¡à´¿à´¸à´‚à´¬àµ¼'.split(
            '_'
        ),
        monthsShort: 'à´œà´¨àµ._à´«àµ†à´¬àµà´°àµ._à´®à´¾àµ¼._à´à´ªàµà´°à´¿._à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ._à´“à´—._à´¸àµ†à´ªàµà´±àµà´±._à´’à´•àµà´Ÿàµ‹._à´¨à´µà´‚._à´¡à´¿à´¸à´‚.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à´žà´¾à´¯à´±à´¾à´´àµà´š_à´¤à´¿à´™àµà´•à´³à´¾à´´àµà´š_à´šàµŠà´µàµà´µà´¾à´´àµà´š_à´¬àµà´§à´¨à´¾à´´àµà´š_à´µàµà´¯à´¾à´´à´¾à´´àµà´š_à´µàµ†à´³àµà´³à´¿à´¯à´¾à´´àµà´š_à´¶à´¨à´¿à´¯à´¾à´´àµà´š'.split(
            '_'
        ),
        weekdaysShort: 'à´žà´¾à´¯àµ¼_à´¤à´¿à´™àµà´•àµ¾_à´šàµŠà´µàµà´µ_à´¬àµà´§àµ»_à´µàµà´¯à´¾à´´à´‚_à´µàµ†à´³àµà´³à´¿_à´¶à´¨à´¿'.split('_'),
        weekdaysMin: 'à´žà´¾_à´¤à´¿_à´šàµŠ_à´¬àµ_à´µàµà´¯à´¾_à´µàµ†_à´¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm -à´¨àµ',
            LTS: 'A h:mm:ss -à´¨àµ',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm -à´¨àµ',
            LLLL: 'dddd, D MMMM YYYY, A h:mm -à´¨àµ',
        },
        calendar: {
            sameDay: '[à´‡à´¨àµà´¨àµ] LT',
            nextDay: '[à´¨à´¾à´³àµ†] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à´‡à´¨àµà´¨à´²àµ†] LT',
            lastWeek: '[à´•à´´à´¿à´žàµà´ž] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à´•à´´à´¿à´žàµà´žàµ',
            past: '%s à´®àµàµ»à´ªàµ',
            s: 'à´…àµ½à´ª à´¨à´¿à´®à´¿à´·à´™àµà´™àµ¾',
            ss: '%d à´¸àµ†à´•àµà´•àµ»à´¡àµ',
            m: 'à´’à´°àµ à´®à´¿à´¨à´¿à´±àµà´±àµ',
            mm: '%d à´®à´¿à´¨à´¿à´±àµà´±àµ',
            h: 'à´’à´°àµ à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
            hh: '%d à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
            d: 'à´’à´°àµ à´¦à´¿à´µà´¸à´‚',
            dd: '%d à´¦à´¿à´µà´¸à´‚',
            M: 'à´’à´°àµ à´®à´¾à´¸à´‚',
            MM: '%d à´®à´¾à´¸à´‚',
            y: 'à´’à´°àµ à´µàµ¼à´·à´‚',
            yy: '%d à´µàµ¼à´·à´‚',
        },
        meridiemParse: /à´°à´¾à´¤àµà´°à´¿|à´°à´¾à´µà´¿à´²àµ†|à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ|à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚|à´°à´¾à´¤àµà´°à´¿/i,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                (meridiem === 'à´°à´¾à´¤àµà´°à´¿' && hour >= 4) ||
                meridiem === 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ' ||
                meridiem === 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚'
            ) {
                return hour + 12;
            } else {
                return hour;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à´°à´¾à´¤àµà´°à´¿';
            } else if (hour < 12) {
                return 'à´°à´¾à´µà´¿à´²àµ†';
            } else if (hour < 17) {
                return 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ';
            } else if (hour < 20) {
                return 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚';
            } else {
                return 'à´°à´¾à´¤àµà´°à´¿';
            }
        },
    });

    //! moment.js locale configuration

    function translate$7(number, withoutSuffix, key, isFuture) {
        switch (key) {
            case 's':
                return withoutSuffix ? 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´' : 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½';
            case 'ss':
                return number + (withoutSuffix ? ' ÑÐµÐºÑƒÐ½Ð´' : ' ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½');
            case 'm':
            case 'mm':
                return number + (withoutSuffix ? ' Ð¼Ð¸Ð½ÑƒÑ‚' : ' Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹Ð½');
            case 'h':
            case 'hh':
                return number + (withoutSuffix ? ' Ñ†Ð°Ð³' : ' Ñ†Ð°Ð³Ð¸Ð¹Ð½');
            case 'd':
            case 'dd':
                return number + (withoutSuffix ? ' Ó©Ð´Ó©Ñ€' : ' Ó©Ð´Ñ€Ð¸Ð¹Ð½');
            case 'M':
            case 'MM':
                return number + (withoutSuffix ? ' ÑÐ°Ñ€' : ' ÑÐ°Ñ€Ñ‹Ð½');
            case 'y':
            case 'yy':
                return number + (withoutSuffix ? ' Ð¶Ð¸Ð»' : ' Ð¶Ð¸Ð»Ð¸Ð¹Ð½');
            default:
                return number;
        }
    }

    hooks.defineLocale('mn', {
        months: 'ÐÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¥Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð“ÑƒÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ó©Ñ€Ó©Ð²Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¢Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð—ÑƒÑ€Ð³Ð°Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ð¾Ð»Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÐ°Ð¹Ð¼Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð•ÑÐ´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ð½ÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ñ…Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€'.split(
            '_'
        ),
        monthsShort: '1 ÑÐ°Ñ€_2 ÑÐ°Ñ€_3 ÑÐ°Ñ€_4 ÑÐ°Ñ€_5 ÑÐ°Ñ€_6 ÑÐ°Ñ€_7 ÑÐ°Ñ€_8 ÑÐ°Ñ€_9 ÑÐ°Ñ€_10 ÑÐ°Ñ€_11 ÑÐ°Ñ€_12 ÑÐ°Ñ€'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'ÐÑÐ¼_Ð”Ð°Ð²Ð°Ð°_ÐœÑÐ³Ð¼Ð°Ñ€_Ð›Ñ…Ð°Ð³Ð²Ð°_ÐŸÒ¯Ñ€ÑÐ²_Ð‘Ð°Ð°ÑÐ°Ð½_Ð‘ÑÐ¼Ð±Ð°'.split('_'),
        weekdaysShort: 'ÐÑÐ¼_Ð”Ð°Ð²_ÐœÑÐ³_Ð›Ñ…Ð°_ÐŸÒ¯Ñ€_Ð‘Ð°Ð°_Ð‘ÑÐ¼'.split('_'),
        weekdaysMin: 'ÐÑ_Ð”Ð°_ÐœÑ_Ð›Ñ…_ÐŸÒ¯_Ð‘Ð°_Ð‘Ñ'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D',
            LLL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
            LLLL: 'dddd, YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
        },
        meridiemParse: /Ò®Ó¨|Ò®Ð¥/i,
        isPM: function (input) {
            return input === 'Ò®Ð¥';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'Ò®Ó¨';
            } else {
                return 'Ò®Ð¥';
            }
        },
        calendar: {
            sameDay: '[Ó¨Ð½Ó©Ó©Ð´Ó©Ñ€] LT',
            nextDay: '[ÐœÐ°Ñ€Ð³Ð°Ð°Ñˆ] LT',
            nextWeek: '[Ð˜Ñ€ÑÑ…] dddd LT',
            lastDay: '[Ó¨Ñ‡Ð¸Ð³Ð´Ó©Ñ€] LT',
            lastWeek: '[Ó¨Ð½Ð³Ó©Ñ€ÑÓ©Ð½] dddd LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ð´Ð°Ñ€Ð°Ð°',
            past: '%s Ó©Ð¼Ð½Ó©',
            s: translate$7,
            ss: translate$7,
            m: translate$7,
            mm: translate$7,
            h: translate$7,
            hh: translate$7,
            d: translate$7,
            dd: translate$7,
            M: translate$7,
            MM: translate$7,
            y: translate$7,
            yy: translate$7,
        },
        dayOfMonthOrdinalParse: /\d{1,2} Ó©Ð´Ó©Ñ€/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + ' Ó©Ð´Ó©Ñ€';
                default:
                    return number;
            }
        },
    });

    //! moment.js locale configuration

    var symbolMap$c = {
            1: 'à¥§',
            2: 'à¥¨',
            3: 'à¥©',
            4: 'à¥ª',
            5: 'à¥«',
            6: 'à¥¬',
            7: 'à¥­',
            8: 'à¥®',
            9: 'à¥¯',
            0: 'à¥¦',
        },
        numberMap$b = {
            'à¥§': '1',
            'à¥¨': '2',
            'à¥©': '3',
            'à¥ª': '4',
            'à¥«': '5',
            'à¥¬': '6',
            'à¥­': '7',
            'à¥®': '8',
            'à¥¯': '9',
            'à¥¦': '0',
        };

    function relativeTimeMr(number, withoutSuffix, string, isFuture) {
        var output = '';
        if (withoutSuffix) {
            switch (string) {
                case 's':
                    output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦';
                    break;
                case 'ss':
                    output = '%d à¤¸à¥‡à¤•à¤‚à¤¦';
                    break;
                case 'm':
                    output = 'à¤à¤• à¤®à¤¿à¤¨à¤¿à¤Ÿ';
                    break;
                case 'mm':
                    output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¥‡';
                    break;
                case 'h':
                    output = 'à¤à¤• à¤¤à¤¾à¤¸';
                    break;
                case 'hh':
                    output = '%d à¤¤à¤¾à¤¸';
                    break;
                case 'd':
                    output = 'à¤à¤• à¤¦à¤¿à¤µà¤¸';
                    break;
                case 'dd':
                    output = '%d à¤¦à¤¿à¤µà¤¸';
                    break;
                case 'M':
                    output = 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾';
                    break;
                case 'MM':
                    output = '%d à¤®à¤¹à¤¿à¤¨à¥‡';
                    break;
                case 'y':
                    output = 'à¤à¤• à¤µà¤°à¥à¤·';
                    break;
                case 'yy':
                    output = '%d à¤µà¤°à¥à¤·à¥‡';
                    break;
            }
        } else {
            switch (string) {
                case 's':
                    output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                    break;
                case 'ss':
                    output = '%d à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                    break;
                case 'm':
                    output = 'à¤à¤•à¤¾ à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾';
                    break;
                case 'mm':
                    output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾à¤‚';
                    break;
                case 'h':
                    output = 'à¤à¤•à¤¾ à¤¤à¤¾à¤¸à¤¾';
                    break;
                case 'hh':
                    output = '%d à¤¤à¤¾à¤¸à¤¾à¤‚';
                    break;
                case 'd':
                    output = 'à¤à¤•à¤¾ à¤¦à¤¿à¤µà¤¸à¤¾';
                    break;
                case 'dd':
                    output = '%d à¤¦à¤¿à¤µà¤¸à¤¾à¤‚';
                    break;
                case 'M':
                    output = 'à¤à¤•à¤¾ à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾';
                    break;
                case 'MM':
                    output = '%d à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾à¤‚';
                    break;
                case 'y':
                    output = 'à¤à¤•à¤¾ à¤µà¤°à¥à¤·à¤¾';
                    break;
                case 'yy':
                    output = '%d à¤µà¤°à¥à¤·à¤¾à¤‚';
                    break;
            }
        }
        return output.replace(/%d/i, number);
    }

    hooks.defineLocale('mr', {
        months: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¤¿à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¥ˆ_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
            '_'
        ),
        monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š._à¤à¤ªà¥à¤°à¤¿._à¤®à¥‡._à¤œà¥‚à¤¨._à¤œà¥à¤²à¥ˆ._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤³à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
        weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤³_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
        weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
            LTS: 'A h:mm:ss à¤µà¤¾à¤œà¤¤à¤¾',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
        },
        calendar: {
            sameDay: '[à¤†à¤œ] LT',
            nextDay: '[à¤‰à¤¦à¥à¤¯à¤¾] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à¤•à¤¾à¤²] LT',
            lastWeek: '[à¤®à¤¾à¤—à¥€à¤²] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sà¤®à¤§à¥à¤¯à¥‡',
            past: '%sà¤ªà¥‚à¤°à¥à¤µà¥€',
            s: relativeTimeMr,
            ss: relativeTimeMr,
            m: relativeTimeMr,
            mm: relativeTimeMr,
            h: relativeTimeMr,
            hh: relativeTimeMr,
            d: relativeTimeMr,
            dd: relativeTimeMr,
            M: relativeTimeMr,
            MM: relativeTimeMr,
            y: relativeTimeMr,
            yy: relativeTimeMr,
        },
        preparse: function (string) {
            return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
                return numberMap$b[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$c[match];
            });
        },
        meridiemParse: /à¤ªà¤¹à¤¾à¤Ÿà¥‡|à¤¸à¤•à¤¾à¤³à¥€|à¤¦à¥à¤ªà¤¾à¤°à¥€|à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€|à¤°à¤¾à¤¤à¥à¤°à¥€/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤ªà¤¹à¤¾à¤Ÿà¥‡' || meridiem === 'à¤¸à¤•à¤¾à¤³à¥€') {
                return hour;
            } else if (
                meridiem === 'à¤¦à¥à¤ªà¤¾à¤°à¥€' ||
                meridiem === 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€' ||
                meridiem === 'à¤°à¤¾à¤¤à¥à¤°à¥€'
            ) {
                return hour >= 12 ? hour : hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour >= 0 && hour < 6) {
                return 'à¤ªà¤¹à¤¾à¤Ÿà¥‡';
            } else if (hour < 12) {
                return 'à¤¸à¤•à¤¾à¤³à¥€';
            } else if (hour < 17) {
                return 'à¤¦à¥à¤ªà¤¾à¤°à¥€';
            } else if (hour < 20) {
                return 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€';
            } else {
                return 'à¤°à¤¾à¤¤à¥à¤°à¥€';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ms-my', {
        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /pagi|tengahari|petang|malam/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'pagi') {
                return hour;
            } else if (meridiem === 'tengahari') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'petang' || meridiem === 'malam') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'pagi';
            } else if (hours < 15) {
                return 'tengahari';
            } else if (hours < 19) {
                return 'petang';
            } else {
                return 'malam';
            }
        },
        calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Esok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kelmarin pukul] LT',
            lastWeek: 'dddd [lepas pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dalam %s',
            past: '%s yang lepas',
            s: 'beberapa saat',
            ss: '%d saat',
            m: 'seminit',
            mm: '%d minit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ms', {
        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [pukul] HH.mm',
            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
        },
        meridiemParse: /pagi|tengahari|petang|malam/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'pagi') {
                return hour;
            } else if (meridiem === 'tengahari') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'petang' || meridiem === 'malam') {
                return hour + 12;
            }
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'pagi';
            } else if (hours < 15) {
                return 'tengahari';
            } else if (hours < 19) {
                return 'petang';
            } else {
                return 'malam';
            }
        },
        calendar: {
            sameDay: '[Hari ini pukul] LT',
            nextDay: '[Esok pukul] LT',
            nextWeek: 'dddd [pukul] LT',
            lastDay: '[Kelmarin pukul] LT',
            lastWeek: 'dddd [lepas pukul] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dalam %s',
            past: '%s yang lepas',
            s: 'beberapa saat',
            ss: '%d saat',
            m: 'seminit',
            mm: '%d minit',
            h: 'sejam',
            hh: '%d jam',
            d: 'sehari',
            dd: '%d hari',
            M: 'sebulan',
            MM: '%d bulan',
            y: 'setahun',
            yy: '%d tahun',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('mt', {
        months: 'Jannar_Frar_Marzu_April_Mejju_Ä unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_DiÄ‹embru'.split(
            '_'
        ),
        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ä un_Lul_Aww_Set_Ott_Nov_DiÄ‹'.split('_'),
        weekdays: 'Il-Ä¦add_It-Tnejn_It-Tlieta_L-ErbgÄ§a_Il-Ä¦amis_Il-Ä imgÄ§a_Is-Sibt'.split(
            '_'
        ),
        weekdaysShort: 'Ä¦ad_Tne_Tli_Erb_Ä¦am_Ä im_Sib'.split('_'),
        weekdaysMin: 'Ä¦a_Tn_Tl_Er_Ä¦a_Ä i_Si'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Illum fil-]LT',
            nextDay: '[GÄ§ada fil-]LT',
            nextWeek: 'dddd [fil-]LT',
            lastDay: '[Il-bieraÄ§ fil-]LT',
            lastWeek: 'dddd [li gÄ§adda] [fil-]LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'fâ€™ %s',
            past: '%s ilu',
            s: 'ftit sekondi',
            ss: '%d sekondi',
            m: 'minuta',
            mm: '%d minuti',
            h: 'siegÄ§a',
            hh: '%d siegÄ§at',
            d: 'Ä¡urnata',
            dd: '%d Ä¡ranet',
            M: 'xahar',
            MM: '%d xhur',
            y: 'sena',
            yy: '%d sni',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$d = {
            1: 'á',
            2: 'á‚',
            3: 'áƒ',
            4: 'á„',
            5: 'á…',
            6: 'á†',
            7: 'á‡',
            8: 'áˆ',
            9: 'á‰',
            0: 'á€',
        },
        numberMap$c = {
            'á': '1',
            'á‚': '2',
            'áƒ': '3',
            'á„': '4',
            'á…': '5',
            'á†': '6',
            'á‡': '7',
            'áˆ': '8',
            'á‰': '9',
            'á€': '0',
        };

    hooks.defineLocale('my', {
        months: 'á€‡á€”á€ºá€”á€á€«á€›á€®_á€–á€±á€–á€±á€¬á€ºá€á€«á€›á€®_á€™á€á€º_á€§á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€‡á€°á€œá€­á€¯á€„á€º_á€žá€¼á€‚á€¯á€á€º_á€…á€€á€ºá€á€„á€ºá€˜á€¬_á€¡á€±á€¬á€€á€ºá€á€­á€¯á€˜á€¬_á€”á€­á€¯á€á€„á€ºá€˜á€¬_á€’á€®á€‡á€„á€ºá€˜á€¬'.split(
            '_'
        ),
        monthsShort: 'á€‡á€”á€º_á€–á€±_á€™á€á€º_á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€œá€­á€¯á€„á€º_á€žá€¼_á€…á€€á€º_á€¡á€±á€¬á€€á€º_á€”á€­á€¯_á€’á€®'.split('_'),
        weekdays: 'á€á€”á€„á€ºá€¹á€‚á€”á€½á€±_á€á€”á€„á€ºá€¹á€œá€¬_á€¡á€„á€ºá€¹á€‚á€«_á€—á€¯á€’á€¹á€“á€Ÿá€°á€¸_á€€á€¼á€¬á€žá€•á€á€±á€¸_á€žá€±á€¬á€€á€¼á€¬_á€…á€”á€±'.split(
            '_'
        ),
        weekdaysShort: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),
        weekdaysMin: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),

        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[á€šá€”á€±.] LT [á€™á€¾á€¬]',
            nextDay: '[á€™á€”á€€á€ºá€–á€¼á€”á€º] LT [á€™á€¾á€¬]',
            nextWeek: 'dddd LT [á€™á€¾á€¬]',
            lastDay: '[á€™á€”á€±.á€€] LT [á€™á€¾á€¬]',
            lastWeek: '[á€•á€¼á€®á€¸á€á€²á€·á€žá€±á€¬] dddd LT [á€™á€¾á€¬]',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'á€œá€¬á€™á€Šá€ºá€· %s á€™á€¾á€¬',
            past: 'á€œá€½á€”á€ºá€á€²á€·á€žá€±á€¬ %s á€€',
            s: 'á€…á€€á€¹á€€á€”á€º.á€¡á€”á€Šá€ºá€¸á€„á€šá€º',
            ss: '%d á€…á€€á€¹á€€á€”á€·á€º',
            m: 'á€á€…á€ºá€™á€­á€”á€…á€º',
            mm: '%d á€™á€­á€”á€…á€º',
            h: 'á€á€…á€ºá€”á€¬á€›á€®',
            hh: '%d á€”á€¬á€›á€®',
            d: 'á€á€…á€ºá€›á€€á€º',
            dd: '%d á€›á€€á€º',
            M: 'á€á€…á€ºá€œ',
            MM: '%d á€œ',
            y: 'á€á€…á€ºá€”á€¾á€…á€º',
            yy: '%d á€”á€¾á€…á€º',
        },
        preparse: function (string) {
            return string.replace(/[áá‚áƒá„á…á†á‡áˆá‰á€]/g, function (match) {
                return numberMap$c[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$d[match];
            });
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('nb', {
        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
        weekdaysShort: 'sÃ¸._ma._ti._on._to._fr._lÃ¸.'.split('_'),
        weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] HH:mm',
            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
        },
        calendar: {
            sameDay: '[i dag kl.] LT',
            nextDay: '[i morgen kl.] LT',
            nextWeek: 'dddd [kl.] LT',
            lastDay: '[i gÃ¥r kl.] LT',
            lastWeek: '[forrige] dddd [kl.] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: '%s siden',
            s: 'noen sekunder',
            ss: '%d sekunder',
            m: 'ett minutt',
            mm: '%d minutter',
            h: 'en time',
            hh: '%d timer',
            d: 'en dag',
            dd: '%d dager',
            w: 'en uke',
            ww: '%d uker',
            M: 'en mÃ¥ned',
            MM: '%d mÃ¥neder',
            y: 'ett Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$e = {
            1: 'à¥§',
            2: 'à¥¨',
            3: 'à¥©',
            4: 'à¥ª',
            5: 'à¥«',
            6: 'à¥¬',
            7: 'à¥­',
            8: 'à¥®',
            9: 'à¥¯',
            0: 'à¥¦',
        },
        numberMap$d = {
            'à¥§': '1',
            'à¥¨': '2',
            'à¥©': '3',
            'à¥ª': '4',
            'à¥«': '5',
            'à¥¬': '6',
            'à¥­': '7',
            'à¥®': '8',
            'à¥¯': '9',
            'à¥¦': '0',
        };

    hooks.defineLocale('ne', {
        months: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿à¤²_à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤·à¥à¤Ÿ_à¤¸à¥‡à¤ªà¥à¤Ÿà¥‡à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤­à¥‡à¤®à¥à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤®à¥à¤¬à¤°'.split(
            '_'
        ),
        monthsShort: 'à¤œà¤¨._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿._à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ._à¤…à¤—._à¤¸à¥‡à¤ªà¥à¤Ÿ._à¤…à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤­à¥‡._à¤¡à¤¿à¤¸à¥‡.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¤†à¤‡à¤¤à¤¬à¤¾à¤°_à¤¸à¥‹à¤®à¤¬à¤¾à¤°_à¤®à¤™à¥à¤—à¤²à¤¬à¤¾à¤°_à¤¬à¥à¤§à¤¬à¤¾à¤°_à¤¬à¤¿à¤¹à¤¿à¤¬à¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤¬à¤¾à¤°_à¤¶à¤¨à¤¿à¤¬à¤¾à¤°'.split(
            '_'
        ),
        weekdaysShort: 'à¤†à¤‡à¤¤._à¤¸à¥‹à¤®._à¤®à¤™à¥à¤—à¤²._à¤¬à¥à¤§._à¤¬à¤¿à¤¹à¤¿._à¤¶à¥à¤•à¥à¤°._à¤¶à¤¨à¤¿.'.split('_'),
        weekdaysMin: 'à¤†._à¤¸à¥‹._à¤®à¤‚._à¤¬à¥._à¤¬à¤¿._à¤¶à¥._à¤¶.'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
            LTS: 'Aà¤•à¥‹ h:mm:ss à¤¬à¤œà¥‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
            LLLL: 'dddd, D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
        },
        preparse: function (string) {
            return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
                return numberMap$d[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$e[match];
            });
        },
        meridiemParse: /à¤°à¤¾à¤¤à¤¿|à¤¬à¤¿à¤¹à¤¾à¤¨|à¤¦à¤¿à¤‰à¤à¤¸à¥‹|à¤¸à¤¾à¤à¤/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¤°à¤¾à¤¤à¤¿') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¤¬à¤¿à¤¹à¤¾à¤¨') {
                return hour;
            } else if (meridiem === 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à¤¸à¤¾à¤à¤') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 3) {
                return 'à¤°à¤¾à¤¤à¤¿';
            } else if (hour < 12) {
                return 'à¤¬à¤¿à¤¹à¤¾à¤¨';
            } else if (hour < 16) {
                return 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹';
            } else if (hour < 20) {
                return 'à¤¸à¤¾à¤à¤';
            } else {
                return 'à¤°à¤¾à¤¤à¤¿';
            }
        },
        calendar: {
            sameDay: '[à¤†à¤œ] LT',
            nextDay: '[à¤­à¥‹à¤²à¤¿] LT',
            nextWeek: '[à¤†à¤‰à¤à¤¦à¥‹] dddd[,] LT',
            lastDay: '[à¤¹à¤¿à¤œà¥‹] LT',
            lastWeek: '[à¤—à¤à¤•à¥‹] dddd[,] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sà¤®à¤¾',
            past: '%s à¤…à¤—à¤¾à¤¡à¤¿',
            s: 'à¤•à¥‡à¤¹à¥€ à¤•à¥à¤·à¤£',
            ss: '%d à¤¸à¥‡à¤•à¥‡à¤£à¥à¤¡',
            m: 'à¤à¤• à¤®à¤¿à¤¨à¥‡à¤Ÿ',
            mm: '%d à¤®à¤¿à¤¨à¥‡à¤Ÿ',
            h: 'à¤à¤• à¤˜à¤£à¥à¤Ÿà¤¾',
            hh: '%d à¤˜à¤£à¥à¤Ÿà¤¾',
            d: 'à¤à¤• à¤¦à¤¿à¤¨',
            dd: '%d à¤¦à¤¿à¤¨',
            M: 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾',
            MM: '%d à¤®à¤¹à¤¿à¤¨à¤¾',
            y: 'à¤à¤• à¤¬à¤°à¥à¤·',
            yy: '%d à¤¬à¤°à¥à¤·',
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
            '_'
        ),
        monthsParse$8 = [
            /^jan/i,
            /^feb/i,
            /^maart|mrt.?$/i,
            /^apr/i,
            /^mei$/i,
            /^jun[i.]?$/i,
            /^jul[i.]?$/i,
            /^aug/i,
            /^sep/i,
            /^okt/i,
            /^nov/i,
            /^dec/i,
        ],
        monthsRegex$8 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

    hooks.defineLocale('nl-be', {
        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortWithDots$1;
            } else if (/-MMM-/.test(format)) {
                return monthsShortWithoutDots$1[m.month()];
            } else {
                return monthsShortWithDots$1[m.month()];
            }
        },

        monthsRegex: monthsRegex$8,
        monthsShortRegex: monthsRegex$8,
        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

        monthsParse: monthsParse$8,
        longMonthsParse: monthsParse$8,
        shortMonthsParse: monthsParse$8,

        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
            '_'
        ),
        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[vandaag om] LT',
            nextDay: '[morgen om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[gisteren om] LT',
            lastWeek: '[afgelopen] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'over %s',
            past: '%s geleden',
            s: 'een paar seconden',
            ss: '%d seconden',
            m: 'Ã©Ã©n minuut',
            mm: '%d minuten',
            h: 'Ã©Ã©n uur',
            hh: '%d uur',
            d: 'Ã©Ã©n dag',
            dd: '%d dagen',
            M: 'Ã©Ã©n maand',
            MM: '%d maanden',
            y: 'Ã©Ã©n jaar',
            yy: '%d jaar',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            );
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
            '_'
        ),
        monthsParse$9 = [
            /^jan/i,
            /^feb/i,
            /^maart|mrt.?$/i,
            /^apr/i,
            /^mei$/i,
            /^jun[i.]?$/i,
            /^jul[i.]?$/i,
            /^aug/i,
            /^sep/i,
            /^okt/i,
            /^nov/i,
            /^dec/i,
        ],
        monthsRegex$9 = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

    hooks.defineLocale('nl', {
        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: function (m, format) {
            if (!m) {
                return monthsShortWithDots$2;
            } else if (/-MMM-/.test(format)) {
                return monthsShortWithoutDots$2[m.month()];
            } else {
                return monthsShortWithDots$2[m.month()];
            }
        },

        monthsRegex: monthsRegex$9,
        monthsShortRegex: monthsRegex$9,
        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

        monthsParse: monthsParse$9,
        longMonthsParse: monthsParse$9,
        shortMonthsParse: monthsParse$9,

        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
            '_'
        ),
        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD-MM-YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[vandaag om] LT',
            nextDay: '[morgen om] LT',
            nextWeek: 'dddd [om] LT',
            lastDay: '[gisteren om] LT',
            lastWeek: '[afgelopen] dddd [om] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'over %s',
            past: '%s geleden',
            s: 'een paar seconden',
            ss: '%d seconden',
            m: 'Ã©Ã©n minuut',
            mm: '%d minuten',
            h: 'Ã©Ã©n uur',
            hh: '%d uur',
            d: 'Ã©Ã©n dag',
            dd: '%d dagen',
            w: 'Ã©Ã©n week',
            ww: '%d weken',
            M: 'Ã©Ã©n maand',
            MM: '%d maanden',
            y: 'Ã©Ã©n jaar',
            yy: '%d jaar',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
        ordinal: function (number) {
            return (
                number +
                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
            );
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('nn', {
        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
        weekdaysShort: 'su._mÃ¥._ty._on._to._fr._lau.'.split('_'),
        weekdaysMin: 'su_mÃ¥_ty_on_to_fr_la'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY [kl.] H:mm',
            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
        },
        calendar: {
            sameDay: '[I dag klokka] LT',
            nextDay: '[I morgon klokka] LT',
            nextWeek: 'dddd [klokka] LT',
            lastDay: '[I gÃ¥r klokka] LT',
            lastWeek: '[FÃ¸regÃ¥ande] dddd [klokka] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: '%s sidan',
            s: 'nokre sekund',
            ss: '%d sekund',
            m: 'eit minutt',
            mm: '%d minutt',
            h: 'ein time',
            hh: '%d timar',
            d: 'ein dag',
            dd: '%d dagar',
            w: 'ei veke',
            ww: '%d veker',
            M: 'ein mÃ¥nad',
            MM: '%d mÃ¥nader',
            y: 'eit Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('oc-lnc', {
        months: {
            standalone: 'geniÃ¨r_febriÃ¨r_marÃ§_abril_mai_junh_julhet_agost_setembre_octÃ²bre_novembre_decembre'.split(
                '_'
            ),
            format: "de geniÃ¨r_de febriÃ¨r_de marÃ§_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octÃ²bre_de novembre_de decembre".split(
                '_'
            ),
            isFormat: /D[oD]?(\s)+MMMM/,
        },
        monthsShort: 'gen._febr._marÃ§_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'dimenge_diluns_dimars_dimÃ¨cres_dijÃ²us_divendres_dissabte'.split(
            '_'
        ),
        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [de] YYYY',
            ll: 'D MMM YYYY',
            LLL: 'D MMMM [de] YYYY [a] H:mm',
            lll: 'D MMM YYYY, H:mm',
            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
            llll: 'ddd D MMM YYYY, H:mm',
        },
        calendar: {
            sameDay: '[uÃ¨i a] LT',
            nextDay: '[deman a] LT',
            nextWeek: 'dddd [a] LT',
            lastDay: '[iÃ¨r a] LT',
            lastWeek: 'dddd [passat a] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: "d'aquÃ­ %s",
            past: 'fa %s',
            s: 'unas segondas',
            ss: '%d segondas',
            m: 'una minuta',
            mm: '%d minutas',
            h: 'una ora',
            hh: '%d oras',
            d: 'un jorn',
            dd: '%d jorns',
            M: 'un mes',
            MM: '%d meses',
            y: 'un an',
            yy: '%d ans',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
        ordinal: function (number, period) {
            var output =
                number === 1
                    ? 'r'
                    : number === 2
                    ? 'n'
                    : number === 3
                    ? 'r'
                    : number === 4
                    ? 't'
                    : 'Ã¨';
            if (period === 'w' || period === 'W') {
                output = 'a';
            }
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4,
        },
    });

    //! moment.js locale configuration

    var symbolMap$f = {
            1: 'à©§',
            2: 'à©¨',
            3: 'à©©',
            4: 'à©ª',
            5: 'à©«',
            6: 'à©¬',
            7: 'à©­',
            8: 'à©®',
            9: 'à©¯',
            0: 'à©¦',
        },
        numberMap$e = {
            'à©§': '1',
            'à©¨': '2',
            'à©©': '3',
            'à©ª': '4',
            'à©«': '5',
            'à©¬': '6',
            'à©­': '7',
            'à©®': '8',
            'à©¯': '9',
            'à©¦': '0',
        };

    hooks.defineLocale('pa-in', {
        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
        months: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
            '_'
        ),
        monthsShort: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
            '_'
        ),
        weekdays: 'à¨à¨¤à¨µà¨¾à¨°_à¨¸à©‹à¨®à¨µà¨¾à¨°_à¨®à©°à¨—à¨²à¨µà¨¾à¨°_à¨¬à©à¨§à¨µà¨¾à¨°_à¨µà©€à¨°à¨µà¨¾à¨°_à¨¸à¨¼à©à©±à¨•à¨°à¨µà¨¾à¨°_à¨¸à¨¼à¨¨à©€à¨šà¨°à¨µà¨¾à¨°'.split(
            '_'
        ),
        weekdaysShort: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
        weekdaysMin: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
        longDateFormat: {
            LT: 'A h:mm à¨µà¨œà©‡',
            LTS: 'A h:mm:ss à¨µà¨œà©‡',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm à¨µà¨œà©‡',
            LLLL: 'dddd, D MMMM YYYY, A h:mm à¨µà¨œà©‡',
        },
        calendar: {
            sameDay: '[à¨…à¨œ] LT',
            nextDay: '[à¨•à¨²] LT',
            nextWeek: '[à¨…à¨—à¨²à¨¾] dddd, LT',
            lastDay: '[à¨•à¨²] LT',
            lastWeek: '[à¨ªà¨¿à¨›à¨²à©‡] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à¨µà¨¿à©±à¨š',
            past: '%s à¨ªà¨¿à¨›à¨²à©‡',
            s: 'à¨•à©à¨ à¨¸à¨•à¨¿à©°à¨Ÿ',
            ss: '%d à¨¸à¨•à¨¿à©°à¨Ÿ',
            m: 'à¨‡à¨• à¨®à¨¿à©°à¨Ÿ',
            mm: '%d à¨®à¨¿à©°à¨Ÿ',
            h: 'à¨‡à©±à¨• à¨˜à©°à¨Ÿà¨¾',
            hh: '%d à¨˜à©°à¨Ÿà©‡',
            d: 'à¨‡à©±à¨• à¨¦à¨¿à¨¨',
            dd: '%d à¨¦à¨¿à¨¨',
            M: 'à¨‡à©±à¨• à¨®à¨¹à©€à¨¨à¨¾',
            MM: '%d à¨®à¨¹à©€à¨¨à©‡',
            y: 'à¨‡à©±à¨• à¨¸à¨¾à¨²',
            yy: '%d à¨¸à¨¾à¨²',
        },
        preparse: function (string) {
            return string.replace(/[à©§à©¨à©©à©ªà©«à©¬à©­à©®à©¯à©¦]/g, function (match) {
                return numberMap$e[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$f[match];
            });
        },
        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
        meridiemParse: /à¨°à¨¾à¨¤|à¨¸à¨µà©‡à¨°|à¨¦à©à¨ªà¨¹à¨¿à¨°|à¨¸à¨¼à¨¾à¨®/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à¨°à¨¾à¨¤') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à¨¸à¨µà©‡à¨°') {
                return hour;
            } else if (meridiem === 'à¨¦à©à¨ªà¨¹à¨¿à¨°') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à¨¸à¨¼à¨¾à¨®') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à¨°à¨¾à¨¤';
            } else if (hour < 10) {
                return 'à¨¸à¨µà©‡à¨°';
            } else if (hour < 17) {
                return 'à¨¦à©à¨ªà¨¹à¨¿à¨°';
            } else if (hour < 20) {
                return 'à¨¸à¨¼à¨¾à¨®';
            } else {
                return 'à¨°à¨¾à¨¤';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var monthsNominative = 'styczeÅ„_luty_marzec_kwiecieÅ„_maj_czerwiec_lipiec_sierpieÅ„_wrzesieÅ„_paÅºdziernik_listopad_grudzieÅ„'.split(
            '_'
        ),
        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrzeÅ›nia_paÅºdziernika_listopada_grudnia'.split(
            '_'
        ),
        monthsParse$a = [
            /^sty/i,
            /^lut/i,
            /^mar/i,
            /^kwi/i,
            /^maj/i,
            /^cze/i,
            /^lip/i,
            /^sie/i,
            /^wrz/i,
            /^paÅº/i,
            /^lis/i,
            /^gru/i,
        ];
    function plural$3(n) {
        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
    }
    function translate$8(number, withoutSuffix, key) {
        var result = number + ' ';
        switch (key) {
            case 'ss':
                return result + (plural$3(number) ? 'sekundy' : 'sekund');
            case 'm':
                return withoutSuffix ? 'minuta' : 'minutÄ™';
            case 'mm':
                return result + (plural$3(number) ? 'minuty' : 'minut');
            case 'h':
                return withoutSuffix ? 'godzina' : 'godzinÄ™';
            case 'hh':
                return result + (plural$3(number) ? 'godziny' : 'godzin');
            case 'ww':
                return result + (plural$3(number) ? 'tygodnie' : 'tygodni');
            case 'MM':
                return result + (plural$3(number) ? 'miesiÄ…ce' : 'miesiÄ™cy');
            case 'yy':
                return result + (plural$3(number) ? 'lata' : 'lat');
        }
    }

    hooks.defineLocale('pl', {
        months: function (momentToFormat, format) {
            if (!momentToFormat) {
                return monthsNominative;
            } else if (/D MMMM/.test(format)) {
                return monthsSubjective[momentToFormat.month()];
            } else {
                return monthsNominative[momentToFormat.month()];
            }
        },
        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paÅº_lis_gru'.split('_'),
        monthsParse: monthsParse$a,
        longMonthsParse: monthsParse$a,
        shortMonthsParse: monthsParse$a,
        weekdays: 'niedziela_poniedziaÅ‚ek_wtorek_Å›roda_czwartek_piÄ…tek_sobota'.split(
            '_'
        ),
        weekdaysShort: 'ndz_pon_wt_Å›r_czw_pt_sob'.split('_'),
        weekdaysMin: 'Nd_Pn_Wt_Åšr_Cz_Pt_So'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[DziÅ› o] LT',
            nextDay: '[Jutro o] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[W niedzielÄ™ o] LT';

                    case 2:
                        return '[We wtorek o] LT';

                    case 3:
                        return '[W Å›rodÄ™ o] LT';

                    case 6:
                        return '[W sobotÄ™ o] LT';

                    default:
                        return '[W] dddd [o] LT';
                }
            },
            lastDay: '[Wczoraj o] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[W zeszÅ‚Ä… niedzielÄ™ o] LT';
                    case 3:
                        return '[W zeszÅ‚Ä… Å›rodÄ™ o] LT';
                    case 6:
                        return '[W zeszÅ‚Ä… sobotÄ™ o] LT';
                    default:
                        return '[W zeszÅ‚y] dddd [o] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: '%s temu',
            s: 'kilka sekund',
            ss: translate$8,
            m: translate$8,
            mm: translate$8,
            h: translate$8,
            hh: translate$8,
            d: '1 dzieÅ„',
            dd: '%d dni',
            w: 'tydzieÅ„',
            ww: translate$8,
            M: 'miesiÄ…c',
            MM: translate$8,
            y: 'rok',
            yy: translate$8,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('pt-br', {
        months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
            '_'
        ),
        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
        weekdays: 'domingo_segunda-feira_terÃ§a-feira_quarta-feira_quinta-feira_sexta-feira_sÃ¡bado'.split(
            '_'
        ),
        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sÃ¡b'.split('_'),
        weekdaysMin: 'do_2Âª_3Âª_4Âª_5Âª_6Âª_sÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY [Ã s] HH:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY [Ã s] HH:mm',
        },
        calendar: {
            sameDay: '[Hoje Ã s] LT',
            nextDay: '[AmanhÃ£ Ã s] LT',
            nextWeek: 'dddd [Ã s] LT',
            lastDay: '[Ontem Ã s] LT',
            lastWeek: function () {
                return this.day() === 0 || this.day() === 6
                    ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                    : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'em %s',
            past: 'hÃ¡ %s',
            s: 'poucos segundos',
            ss: '%d segundos',
            m: 'um minuto',
            mm: '%d minutos',
            h: 'uma hora',
            hh: '%d horas',
            d: 'um dia',
            dd: '%d dias',
            M: 'um mÃªs',
            MM: '%d meses',
            y: 'um ano',
            yy: '%d anos',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        invalidDate: 'Data invÃ¡lida',
    });

    //! moment.js locale configuration

    hooks.defineLocale('pt', {
        months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
            '_'
        ),
        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
        weekdays: 'Domingo_Segunda-feira_TerÃ§a-feira_Quarta-feira_Quinta-feira_Sexta-feira_SÃ¡bado'.split(
            '_'
        ),
        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_SÃ¡b'.split('_'),
        weekdaysMin: 'Do_2Âª_3Âª_4Âª_5Âª_6Âª_SÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D [de] MMMM [de] YYYY',
            LLL: 'D [de] MMMM [de] YYYY HH:mm',
            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Hoje Ã s] LT',
            nextDay: '[AmanhÃ£ Ã s] LT',
            nextWeek: 'dddd [Ã s] LT',
            lastDay: '[Ontem Ã s] LT',
            lastWeek: function () {
                return this.day() === 0 || this.day() === 6
                    ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                    : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'em %s',
            past: 'hÃ¡ %s',
            s: 'segundos',
            ss: '%d segundos',
            m: 'um minuto',
            mm: '%d minutos',
            h: 'uma hora',
            hh: '%d horas',
            d: 'um dia',
            dd: '%d dias',
            w: 'uma semana',
            ww: '%d semanas',
            M: 'um mÃªs',
            MM: '%d meses',
            y: 'um ano',
            yy: '%d anos',
        },
        dayOfMonthOrdinalParse: /\d{1,2}Âº/,
        ordinal: '%dÂº',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function relativeTimeWithPlural$2(number, withoutSuffix, key) {
        var format = {
                ss: 'secunde',
                mm: 'minute',
                hh: 'ore',
                dd: 'zile',
                ww: 'sÄƒptÄƒmÃ¢ni',
                MM: 'luni',
                yy: 'ani',
            },
            separator = ' ';
        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
            separator = ' de ';
        }
        return number + separator + format[key];
    }

    hooks.defineLocale('ro', {
        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
            '_'
        ),
        monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'duminicÄƒ_luni_marÈ›i_miercuri_joi_vineri_sÃ¢mbÄƒtÄƒ'.split('_'),
        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_SÃ¢m'.split('_'),
        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_SÃ¢'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY H:mm',
            LLLL: 'dddd, D MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[azi la] LT',
            nextDay: '[mÃ¢ine la] LT',
            nextWeek: 'dddd [la] LT',
            lastDay: '[ieri la] LT',
            lastWeek: '[fosta] dddd [la] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'peste %s',
            past: '%s Ã®n urmÄƒ',
            s: 'cÃ¢teva secunde',
            ss: relativeTimeWithPlural$2,
            m: 'un minut',
            mm: relativeTimeWithPlural$2,
            h: 'o orÄƒ',
            hh: relativeTimeWithPlural$2,
            d: 'o zi',
            dd: relativeTimeWithPlural$2,
            w: 'o sÄƒptÄƒmÃ¢nÄƒ',
            ww: relativeTimeWithPlural$2,
            M: 'o lunÄƒ',
            MM: relativeTimeWithPlural$2,
            y: 'un an',
            yy: relativeTimeWithPlural$2,
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function plural$4(word, num) {
        var forms = word.split('_');
        return num % 10 === 1 && num % 100 !== 11
            ? forms[0]
            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
            ? forms[1]
            : forms[2];
    }
    function relativeTimeWithPlural$3(number, withoutSuffix, key) {
        var format = {
            ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
            mm: withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚',
            hh: 'Ñ‡Ð°Ñ_Ñ‡Ð°ÑÐ°_Ñ‡Ð°ÑÐ¾Ð²',
            dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ_Ð´Ð½ÐµÐ¹',
            ww: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð½ÐµÐ´ÐµÐ»Ð¸_Ð½ÐµÐ´ÐµÐ»ÑŒ',
            MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ð°_Ð¼ÐµÑÑÑ†ÐµÐ²',
            yy: 'Ð³Ð¾Ð´_Ð³Ð¾Ð´Ð°_Ð»ÐµÑ‚',
        };
        if (key === 'm') {
            return withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ';
        } else {
            return number + ' ' + plural$4(format[key], +number);
        }
    }
    var monthsParse$b = [
        /^ÑÐ½Ð²/i,
        /^Ñ„ÐµÐ²/i,
        /^Ð¼Ð°Ñ€/i,
        /^Ð°Ð¿Ñ€/i,
        /^Ð¼Ð°[Ð¹Ñ]/i,
        /^Ð¸ÑŽÐ½/i,
        /^Ð¸ÑŽÐ»/i,
        /^Ð°Ð²Ð³/i,
        /^ÑÐµÐ½/i,
        /^Ð¾ÐºÑ‚/i,
        /^Ð½Ð¾Ñ/i,
        /^Ð´ÐµÐº/i,
    ];

    // http://new.gramota.ru/spravka/rules/139-prop : Â§ 103
    // Ð¡Ð¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÑÑÑ†ÐµÐ²: http://new.gramota.ru/spravka/buro/search-answer?s=242637
    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
    hooks.defineLocale('ru', {
        months: {
            format: 'ÑÐ½Ð²Ð°Ñ€Ñ_Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ_Ð¼Ð°Ñ€Ñ‚Ð°_Ð°Ð¿Ñ€ÐµÐ»Ñ_Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³ÑƒÑÑ‚Ð°_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ñ_Ð¾ÐºÑ‚ÑÐ±Ñ€Ñ_Ð½Ð¾ÑÐ±Ñ€Ñ_Ð´ÐµÐºÐ°Ð±Ñ€Ñ'.split(
                '_'
            ),
            standalone: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
                '_'
            ),
        },
        monthsShort: {
            // Ð¿Ð¾ CLDR Ð¸Ð¼ÐµÐ½Ð½Ð¾ "Ð¸ÑŽÐ»." Ð¸ "Ð¸ÑŽÐ½.", Ð½Ð¾ ÐºÐ°ÐºÐ¾Ð¹ ÑÐ¼Ñ‹ÑÐ» Ð¼ÐµÐ½ÑÑ‚ÑŒ Ð±ÑƒÐºÐ²Ñƒ Ð½Ð° Ñ‚Ð¾Ñ‡ÐºÑƒ?
            format: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
                '_'
            ),
            standalone: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€._Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
                '_'
            ),
        },
        weekdays: {
            standalone: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ð°_ÑÑƒÐ±Ð±Ð¾Ñ‚Ð°'.split(
                '_'
            ),
            format: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ñƒ_ÑÑƒÐ±Ð±Ð¾Ñ‚Ñƒ'.split(
                '_'
            ),
            isFormat: /\[ ?[Ð’Ð²] ?(?:Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ|ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ|ÑÑ‚Ñƒ)? ?] ?dddd/,
        },
        weekdaysShort: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        weekdaysMin: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        monthsParse: monthsParse$b,
        longMonthsParse: monthsParse$b,
        shortMonthsParse: monthsParse$b,

        // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸, Ð¿Ð¾ Ñ‚Ñ€Ð¸ Ð±ÑƒÐºÐ²Ñ‹, Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ…, Ð¿Ð¾ 4 Ð±ÑƒÐºÐ²Ñ‹, ÑÐ¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¸ Ð±ÐµÐ· Ñ‚Ð¾Ñ‡ÐºÐ¸
        monthsRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

        // ÐºÐ¾Ð¿Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ³Ð¾
        monthsShortRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

        // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸
        monthsStrictRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑÑŒ]|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑÑŒ]|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð°Ð¿Ñ€ÐµÐ»[ÑÑŒ]|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑÑŒ]|Ð¸ÑŽÐ»[ÑÑŒ]|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑÑŒ]|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑÑŒ]|Ð½Ð¾ÑÐ±Ñ€[ÑÑŒ]|Ð´ÐµÐºÐ°Ð±Ñ€[ÑÑŒ])/i,

        // Ð’Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ðµ ÑÐ¾Ð¾Ñ‚Ð²ÐµÑ‚ÑÑ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ ÑÐ¾ÐºÑ€Ð°Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ð¼
        monthsShortStrictRegex: /^(ÑÐ½Ð²\.|Ñ„ÐµÐ²Ñ€?\.|Ð¼Ð°Ñ€[Ñ‚.]|Ð°Ð¿Ñ€\.|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑŒÑ.]|Ð¸ÑŽÐ»[ÑŒÑ.]|Ð°Ð²Ð³\.|ÑÐµÐ½Ñ‚?\.|Ð¾ÐºÑ‚\.|Ð½Ð¾ÑÐ±?\.|Ð´ÐµÐº\.)/i,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Ð³.',
            LLL: 'D MMMM YYYY Ð³., H:mm',
            LLLL: 'dddd, D MMMM YYYY Ð³., H:mm',
        },
        calendar: {
            sameDay: '[Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ, Ð²] LT',
            nextDay: '[Ð—Ð°Ð²Ñ‚Ñ€Ð°, Ð²] LT',
            lastDay: '[Ð’Ñ‡ÐµÑ€Ð°, Ð²] LT',
            nextWeek: function (now) {
                if (now.week() !== this.week()) {
                    switch (this.day()) {
                        case 0:
                            return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐµ] dddd, [Ð²] LT';
                        case 1:
                        case 2:
                        case 4:
                            return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ð¹] dddd, [Ð²] LT';
                        case 3:
                        case 5:
                        case 6:
                            return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ] dddd, [Ð²] LT';
                    }
                } else {
                    if (this.day() === 2) {
                        return '[Ð’Ð¾] dddd, [Ð²] LT';
                    } else {
                        return '[Ð’] dddd, [Ð²] LT';
                    }
                }
            },
            lastWeek: function (now) {
                if (now.week() !== this.week()) {
                    switch (this.day()) {
                        case 0:
                            return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ðµ] dddd, [Ð²] LT';
                        case 1:
                        case 2:
                        case 4:
                            return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ñ‹Ð¹] dddd, [Ð²] LT';
                        case 3:
                        case 5:
                        case 6:
                            return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ] dddd, [Ð²] LT';
                    }
                } else {
                    if (this.day() === 2) {
                        return '[Ð’Ð¾] dddd, [Ð²] LT';
                    } else {
                        return '[Ð’] dddd, [Ð²] LT';
                    }
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ñ‡ÐµÑ€ÐµÐ· %s',
            past: '%s Ð½Ð°Ð·Ð°Ð´',
            s: 'Ð½ÐµÑÐºÐ¾Ð»ÑŒÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´',
            ss: relativeTimeWithPlural$3,
            m: relativeTimeWithPlural$3,
            mm: relativeTimeWithPlural$3,
            h: 'Ñ‡Ð°Ñ',
            hh: relativeTimeWithPlural$3,
            d: 'Ð´ÐµÐ½ÑŒ',
            dd: relativeTimeWithPlural$3,
            w: 'Ð½ÐµÐ´ÐµÐ»Ñ',
            ww: relativeTimeWithPlural$3,
            M: 'Ð¼ÐµÑÑÑ†',
            MM: relativeTimeWithPlural$3,
            y: 'Ð³Ð¾Ð´',
            yy: relativeTimeWithPlural$3,
        },
        meridiemParse: /Ð½Ð¾Ñ‡Ð¸|ÑƒÑ‚Ñ€Ð°|Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°/i,
        isPM: function (input) {
            return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'Ð½Ð¾Ñ‡Ð¸';
            } else if (hour < 12) {
                return 'ÑƒÑ‚Ñ€Ð°';
            } else if (hour < 17) {
                return 'Ð´Ð½Ñ';
            } else {
                return 'Ð²ÐµÑ‡ÐµÑ€Ð°';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾|Ñ)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'M':
                case 'd':
                case 'DDD':
                    return number + '-Ð¹';
                case 'D':
                    return number + '-Ð³Ð¾';
                case 'w':
                case 'W':
                    return number + '-Ñ';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$9 = [
            'Ø¬Ù†ÙˆØ±ÙŠ',
            'ÙÙŠØ¨Ø±ÙˆØ±ÙŠ',
            'Ù…Ø§Ø±Ú†',
            'Ø§Ù¾Ø±ÙŠÙ„',
            'Ù…Ø¦ÙŠ',
            'Ø¬ÙˆÙ†',
            'Ø¬ÙˆÙ„Ø§Ø¡Ù',
            'Ø¢Ú¯Ø³Ù½',
            'Ø³ÙŠÙ¾Ù½Ù…Ø¨Ø±',
            'Ø¢ÚªÙ½ÙˆØ¨Ø±',
            'Ù†ÙˆÙ…Ø¨Ø±',
            'ÚŠØ³Ù…Ø¨Ø±',
        ],
        days$1 = ['Ø¢Ú†Ø±', 'Ø³ÙˆÙ…Ø±', 'Ø§Ú±Ø§Ø±Ùˆ', 'Ø§Ø±Ø¨Ø¹', 'Ø®Ù…ÙŠØ³', 'Ø¬Ù…Ø¹', 'Ú‡Ù†Ú‡Ø±'];

    hooks.defineLocale('sd', {
        months: months$9,
        monthsShort: months$9,
        weekdays: days$1,
        weekdaysShort: days$1,
        weekdaysMin: days$1,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
        },
        meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
        isPM: function (input) {
            return 'Ø´Ø§Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'ØµØ¨Ø­';
            }
            return 'Ø´Ø§Ù…';
        },
        calendar: {
            sameDay: '[Ø§Ú„] LT',
            nextDay: '[Ø³Ú€Ø§Ú»ÙŠ] LT',
            nextWeek: 'dddd [Ø§Ú³ÙŠÙ† Ù‡ÙØªÙŠ ØªÙŠ] LT',
            lastDay: '[ÚªØ§Ù„Ù‡Ù‡] LT',
            lastWeek: '[Ú¯Ø²Ø±ÙŠÙ„ Ù‡ÙØªÙŠ] dddd [ØªÙŠ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ù¾ÙˆØ¡',
            past: '%s Ø§Ú³',
            s: 'Ú†Ù†Ø¯ Ø³ÙŠÚªÙ†ÚŠ',
            ss: '%d Ø³ÙŠÚªÙ†ÚŠ',
            m: 'Ù‡Úª Ù…Ù†Ù½',
            mm: '%d Ù…Ù†Ù½',
            h: 'Ù‡Úª ÚªÙ„Ø§Úª',
            hh: '%d ÚªÙ„Ø§Úª',
            d: 'Ù‡Úª ÚÙŠÙ†Ù‡Ù†',
            dd: '%d ÚÙŠÙ†Ù‡Ù†',
            M: 'Ù‡Úª Ù…Ù‡ÙŠÙ†Ùˆ',
            MM: '%d Ù…Ù‡ÙŠÙ†Ø§',
            y: 'Ù‡Úª Ø³Ø§Ù„',
            yy: '%d Ø³Ø§Ù„',
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('se', {
        months: 'oÄ‘Ä‘ajagemÃ¡nnu_guovvamÃ¡nnu_njukÄamÃ¡nnu_cuoÅ‹omÃ¡nnu_miessemÃ¡nnu_geassemÃ¡nnu_suoidnemÃ¡nnu_borgemÃ¡nnu_ÄakÄamÃ¡nnu_golggotmÃ¡nnu_skÃ¡bmamÃ¡nnu_juovlamÃ¡nnu'.split(
            '_'
        ),
        monthsShort: 'oÄ‘Ä‘j_guov_njuk_cuo_mies_geas_suoi_borg_ÄakÄ_golg_skÃ¡b_juov'.split(
            '_'
        ),
        weekdays: 'sotnabeaivi_vuossÃ¡rga_maÅ‹Å‹ebÃ¡rga_gaskavahkku_duorastat_bearjadat_lÃ¡vvardat'.split(
            '_'
        ),
        weekdaysShort: 'sotn_vuos_maÅ‹_gask_duor_bear_lÃ¡v'.split('_'),
        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'MMMM D. [b.] YYYY',
            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
        },
        calendar: {
            sameDay: '[otne ti] LT',
            nextDay: '[ihttin ti] LT',
            nextWeek: 'dddd [ti] LT',
            lastDay: '[ikte ti] LT',
            lastWeek: '[ovddit] dddd [ti] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s geaÅ¾es',
            past: 'maÅ‹it %s',
            s: 'moadde sekunddat',
            ss: '%d sekunddat',
            m: 'okta minuhta',
            mm: '%d minuhtat',
            h: 'okta diimmu',
            hh: '%d diimmut',
            d: 'okta beaivi',
            dd: '%d beaivvit',
            M: 'okta mÃ¡nnu',
            MM: '%d mÃ¡nut',
            y: 'okta jahki',
            yy: '%d jagit',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    /*jshint -W100*/
    hooks.defineLocale('si', {
        months: 'à¶¢à¶±à·€à·à¶»à·’_à¶´à·™à¶¶à¶»à·€à·à¶»à·’_à¶¸à·à¶»à·Šà¶­à·”_à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·à·ƒà·Šà¶­à·”_à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š_à¶”à¶šà·Šà¶­à·à¶¶à¶»à·Š_à¶±à·œà·€à·à¶¸à·Šà¶¶à¶»à·Š_à¶¯à·™à·ƒà·à¶¸à·Šà¶¶à¶»à·Š'.split(
            '_'
        ),
        monthsShort: 'à¶¢à¶±_à¶´à·™à¶¶_à¶¸à·à¶»à·Š_à¶…à¶´à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·_à·ƒà·à¶´à·Š_à¶”à¶šà·Š_à¶±à·œà·€à·_à¶¯à·™à·ƒà·'.split(
            '_'
        ),
        weekdays: 'à¶‰à¶»à·’à¶¯à·_à·ƒà¶³à·”à¶¯à·_à¶…à¶Ÿà·„à¶»à·”à·€à·à¶¯à·_à¶¶à¶¯à·à¶¯à·_à¶¶à·Šâ€à¶»à·„à·ƒà·Šà¶´à¶­à·’à¶±à·Šà¶¯à·_à·ƒà·’à¶šà·”à¶»à·à¶¯à·_à·ƒà·™à¶±à·ƒà·”à¶»à·à¶¯à·'.split(
            '_'
        ),
        weekdaysShort: 'à¶‰à¶»à·’_à·ƒà¶³à·”_à¶…à¶Ÿ_à¶¶à¶¯à·_à¶¶à·Šâ€à¶»à·„_à·ƒà·’à¶šà·”_à·ƒà·™à¶±'.split('_'),
        weekdaysMin: 'à¶‰_à·ƒ_à¶…_à¶¶_à¶¶à·Šâ€à¶»_à·ƒà·’_à·ƒà·™'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'a h:mm',
            LTS: 'a h:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYY MMMM D',
            LLL: 'YYYY MMMM D, a h:mm',
            LLLL: 'YYYY MMMM D [à·€à·à¶±à·’] dddd, a h:mm:ss',
        },
        calendar: {
            sameDay: '[à¶…à¶¯] LT[à¶§]',
            nextDay: '[à·„à·™à¶§] LT[à¶§]',
            nextWeek: 'dddd LT[à¶§]',
            lastDay: '[à¶Šà¶ºà·š] LT[à¶§]',
            lastWeek: '[à¶´à·ƒà·”à¶œà·’à¶º] dddd LT[à¶§]',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%sà¶šà·’à¶±à·Š',
            past: '%sà¶šà¶§ à¶´à·™à¶»',
            s: 'à¶­à¶­à·Šà¶´à¶» à¶šà·’à·„à·’à¶´à¶º',
            ss: 'à¶­à¶­à·Šà¶´à¶» %d',
            m: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·”à·€',
            mm: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·” %d',
            h: 'à¶´à·à¶º',
            hh: 'à¶´à·à¶º %d',
            d: 'à¶¯à·’à¶±à¶º',
            dd: 'à¶¯à·’à¶± %d',
            M: 'à¶¸à·à·ƒà¶º',
            MM: 'à¶¸à·à·ƒ %d',
            y: 'à·€à·ƒà¶»',
            yy: 'à·€à·ƒà¶» %d',
        },
        dayOfMonthOrdinalParse: /\d{1,2} à·€à·à¶±à·’/,
        ordinal: function (number) {
            return number + ' à·€à·à¶±à·’';
        },
        meridiemParse: /à¶´à·™à¶» à·€à¶»à·”|à¶´à·ƒà·Š à·€à¶»à·”|à¶´à·™.à·€|à¶´.à·€./,
        isPM: function (input) {
            return input === 'à¶´.à·€.' || input === 'à¶´à·ƒà·Š à·€à¶»à·”';
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? 'à¶´.à·€.' : 'à¶´à·ƒà·Š à·€à¶»à·”';
            } else {
                return isLower ? 'à¶´à·™.à·€.' : 'à¶´à·™à¶» à·€à¶»à·”';
            }
        },
    });

    //! moment.js locale configuration

    var months$a = 'januÃ¡r_februÃ¡r_marec_aprÃ­l_mÃ¡j_jÃºn_jÃºl_august_september_oktÃ³ber_november_december'.split(
            '_'
        ),
        monthsShort$7 = 'jan_feb_mar_apr_mÃ¡j_jÃºn_jÃºl_aug_sep_okt_nov_dec'.split('_');
    function plural$5(n) {
        return n > 1 && n < 5;
    }
    function translate$9(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's': // a few seconds / in a few seconds / a few seconds ago
                return withoutSuffix || isFuture ? 'pÃ¡r sekÃºnd' : 'pÃ¡r sekundami';
            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'sekundy' : 'sekÃºnd');
                } else {
                    return result + 'sekundami';
                }
            case 'm': // a minute / in a minute / a minute ago
                return withoutSuffix ? 'minÃºta' : isFuture ? 'minÃºtu' : 'minÃºtou';
            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'minÃºty' : 'minÃºt');
                } else {
                    return result + 'minÃºtami';
                }
            case 'h': // an hour / in an hour / an hour ago
                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
            case 'hh': // 9 hours / in 9 hours / 9 hours ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'hodiny' : 'hodÃ­n');
                } else {
                    return result + 'hodinami';
                }
            case 'd': // a day / in a day / a day ago
                return withoutSuffix || isFuture ? 'deÅˆ' : 'dÅˆom';
            case 'dd': // 9 days / in 9 days / 9 days ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'dni' : 'dnÃ­');
                } else {
                    return result + 'dÅˆami';
                }
            case 'M': // a month / in a month / a month ago
                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
            case 'MM': // 9 months / in 9 months / 9 months ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'mesiace' : 'mesiacov');
                } else {
                    return result + 'mesiacmi';
                }
            case 'y': // a year / in a year / a year ago
                return withoutSuffix || isFuture ? 'rok' : 'rokom';
            case 'yy': // 9 years / in 9 years / 9 years ago
                if (withoutSuffix || isFuture) {
                    return result + (plural$5(number) ? 'roky' : 'rokov');
                } else {
                    return result + 'rokmi';
                }
        }
    }

    hooks.defineLocale('sk', {
        months: months$a,
        monthsShort: monthsShort$7,
        weekdays: 'nedeÄ¾a_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota'.split('_'),
        weekdaysShort: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
        weekdaysMin: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[dnes o] LT',
            nextDay: '[zajtra o] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[v nedeÄ¾u o] LT';
                    case 1:
                    case 2:
                        return '[v] dddd [o] LT';
                    case 3:
                        return '[v stredu o] LT';
                    case 4:
                        return '[vo Å¡tvrtok o] LT';
                    case 5:
                        return '[v piatok o] LT';
                    case 6:
                        return '[v sobotu o] LT';
                }
            },
            lastDay: '[vÄera o] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[minulÃº nedeÄ¾u o] LT';
                    case 1:
                    case 2:
                        return '[minulÃ½] dddd [o] LT';
                    case 3:
                        return '[minulÃº stredu o] LT';
                    case 4:
                    case 5:
                        return '[minulÃ½] dddd [o] LT';
                    case 6:
                        return '[minulÃº sobotu o] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'pred %s',
            s: translate$9,
            ss: translate$9,
            m: translate$9,
            mm: translate$9,
            h: translate$9,
            hh: translate$9,
            d: translate$9,
            dd: translate$9,
            M: translate$9,
            MM: translate$9,
            y: translate$9,
            yy: translate$9,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function processRelativeTime$7(number, withoutSuffix, key, isFuture) {
        var result = number + ' ';
        switch (key) {
            case 's':
                return withoutSuffix || isFuture
                    ? 'nekaj sekund'
                    : 'nekaj sekundami';
            case 'ss':
                if (number === 1) {
                    result += withoutSuffix ? 'sekundo' : 'sekundi';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
                } else {
                    result += 'sekund';
                }
                return result;
            case 'm':
                return withoutSuffix ? 'ena minuta' : 'eno minuto';
            case 'mm':
                if (number === 1) {
                    result += withoutSuffix ? 'minuta' : 'minuto';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';
                } else {
                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';
                }
                return result;
            case 'h':
                return withoutSuffix ? 'ena ura' : 'eno uro';
            case 'hh':
                if (number === 1) {
                    result += withoutSuffix ? 'ura' : 'uro';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'uri' : 'urama';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'ure' : 'urami';
                } else {
                    result += withoutSuffix || isFuture ? 'ur' : 'urami';
                }
                return result;
            case 'd':
                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
            case 'dd':
                if (number === 1) {
                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
                } else {
                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
                }
                return result;
            case 'M':
                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
            case 'MM':
                if (number === 1) {
                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
                } else {
                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
                }
                return result;
            case 'y':
                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
            case 'yy':
                if (number === 1) {
                    result += withoutSuffix || isFuture ? 'leto' : 'letom';
                } else if (number === 2) {
                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';
                } else if (number < 5) {
                    result += withoutSuffix || isFuture ? 'leta' : 'leti';
                } else {
                    result += withoutSuffix || isFuture ? 'let' : 'leti';
                }
                return result;
        }
    }

    hooks.defineLocale('sl', {
        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota'.split('_'),
        weekdaysShort: 'ned._pon._tor._sre._Äet._pet._sob.'.split('_'),
        weekdaysMin: 'ne_po_to_sr_Äe_pe_so'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD. MM. YYYY',
            LL: 'D. MMMM YYYY',
            LLL: 'D. MMMM YYYY H:mm',
            LLLL: 'dddd, D. MMMM YYYY H:mm',
        },
        calendar: {
            sameDay: '[danes ob] LT',
            nextDay: '[jutri ob] LT',

            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[v] [nedeljo] [ob] LT';
                    case 3:
                        return '[v] [sredo] [ob] LT';
                    case 6:
                        return '[v] [soboto] [ob] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[v] dddd [ob] LT';
                }
            },
            lastDay: '[vÄeraj ob] LT',
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[prejÅ¡njo] [nedeljo] [ob] LT';
                    case 3:
                        return '[prejÅ¡njo] [sredo] [ob] LT';
                    case 6:
                        return '[prejÅ¡njo] [soboto] [ob] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[prejÅ¡nji] dddd [ob] LT';
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Äez %s',
            past: 'pred %s',
            s: processRelativeTime$7,
            ss: processRelativeTime$7,
            m: processRelativeTime$7,
            mm: processRelativeTime$7,
            h: processRelativeTime$7,
            hh: processRelativeTime$7,
            d: processRelativeTime$7,
            dd: processRelativeTime$7,
            M: processRelativeTime$7,
            MM: processRelativeTime$7,
            y: processRelativeTime$7,
            yy: processRelativeTime$7,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('sq', {
        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_NÃ«ntor_Dhjetor'.split(
            '_'
        ),
        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_NÃ«n_Dhj'.split('_'),
        weekdays: 'E Diel_E HÃ«nÃ«_E MartÃ«_E MÃ«rkurÃ«_E Enjte_E Premte_E ShtunÃ«'.split(
            '_'
        ),
        weekdaysShort: 'Die_HÃ«n_Mar_MÃ«r_Enj_Pre_Sht'.split('_'),
        weekdaysMin: 'D_H_Ma_MÃ«_E_P_Sh'.split('_'),
        weekdaysParseExact: true,
        meridiemParse: /PD|MD/,
        isPM: function (input) {
            return input.charAt(0) === 'M';
        },
        meridiem: function (hours, minutes, isLower) {
            return hours < 12 ? 'PD' : 'MD';
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Sot nÃ«] LT',
            nextDay: '[NesÃ«r nÃ«] LT',
            nextWeek: 'dddd [nÃ«] LT',
            lastDay: '[Dje nÃ«] LT',
            lastWeek: 'dddd [e kaluar nÃ«] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'nÃ« %s',
            past: '%s mÃ« parÃ«',
            s: 'disa sekonda',
            ss: '%d sekonda',
            m: 'njÃ« minutÃ«',
            mm: '%d minuta',
            h: 'njÃ« orÃ«',
            hh: '%d orÃ«',
            d: 'njÃ« ditÃ«',
            dd: '%d ditÃ«',
            M: 'njÃ« muaj',
            MM: '%d muaj',
            y: 'njÃ« vit',
            yy: '%d vite',
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var translator$1 = {
        words: {
            //Different grammatical cases
            ss: ['ÑÐµÐºÑƒÐ½Ð´Ð°', 'ÑÐµÐºÑƒÐ½Ð´Ðµ', 'ÑÐµÐºÑƒÐ½Ð´Ð¸'],
            m: ['Ñ˜ÐµÐ´Ð°Ð½ Ð¼Ð¸Ð½ÑƒÑ‚', 'Ñ˜ÐµÐ´Ð½Ðµ Ð¼Ð¸Ð½ÑƒÑ‚Ðµ'],
            mm: ['Ð¼Ð¸Ð½ÑƒÑ‚', 'Ð¼Ð¸Ð½ÑƒÑ‚Ðµ', 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°'],
            h: ['Ñ˜ÐµÐ´Ð°Ð½ ÑÐ°Ñ‚', 'Ñ˜ÐµÐ´Ð½Ð¾Ð³ ÑÐ°Ñ‚Ð°'],
            hh: ['ÑÐ°Ñ‚', 'ÑÐ°Ñ‚Ð°', 'ÑÐ°Ñ‚Ð¸'],
            dd: ['Ð´Ð°Ð½', 'Ð´Ð°Ð½Ð°', 'Ð´Ð°Ð½Ð°'],
            MM: ['Ð¼ÐµÑÐµÑ†', 'Ð¼ÐµÑÐµÑ†Ð°', 'Ð¼ÐµÑÐµÑ†Ð¸'],
            yy: ['Ð³Ð¾Ð´Ð¸Ð½Ð°', 'Ð³Ð¾Ð´Ð¸Ð½Ðµ', 'Ð³Ð¾Ð´Ð¸Ð½Ð°'],
        },
        correctGrammaticalCase: function (number, wordKey) {
            return number === 1
                ? wordKey[0]
                : number >= 2 && number <= 4
                ? wordKey[1]
                : wordKey[2];
        },
        translate: function (number, withoutSuffix, key) {
            var wordKey = translator$1.words[key];
            if (key.length === 1) {
                return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
                return (
                    number +
                    ' ' +
                    translator$1.correctGrammaticalCase(number, wordKey)
                );
            }
        },
    };

    hooks.defineLocale('sr-cyrl', {
        months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€_Ñ„ÐµÐ±Ñ€ÑƒÐ°Ñ€_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð±Ð°Ñ€_Ð¾ÐºÑ‚Ð¾Ð±Ð°Ñ€_Ð½Ð¾Ð²ÐµÐ¼Ð±Ð°Ñ€_Ð´ÐµÑ†ÐµÐ¼Ð±Ð°Ñ€'.split(
            '_'
        ),
        monthsShort: 'Ñ˜Ð°Ð½._Ñ„ÐµÐ±._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³._ÑÐµÐ¿._Ð¾ÐºÑ‚._Ð½Ð¾Ð²._Ð´ÐµÑ†.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'Ð½ÐµÐ´ÐµÑ™Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™Ð°Ðº_ÑƒÑ‚Ð¾Ñ€Ð°Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð°Ðº_Ð¿ÐµÑ‚Ð°Ðº_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split('_'),
        weekdaysShort: 'Ð½ÐµÐ´._Ð¿Ð¾Ð½._ÑƒÑ‚Ð¾._ÑÑ€Ðµ._Ñ‡ÐµÑ‚._Ð¿ÐµÑ‚._ÑÑƒÐ±.'.split('_'),
        weekdaysMin: 'Ð½Ðµ_Ð¿Ð¾_ÑƒÑ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_ÑÑƒ'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D. M. YYYY.',
            LL: 'D. MMMM YYYY.',
            LLL: 'D. MMMM YYYY. H:mm',
            LLLL: 'dddd, D. MMMM YYYY. H:mm',
        },
        calendar: {
            sameDay: '[Ð´Ð°Ð½Ð°Ñ Ñƒ] LT',
            nextDay: '[ÑÑƒÑ‚Ñ€Ð° Ñƒ] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[Ñƒ] [Ð½ÐµÐ´ÐµÑ™Ñƒ] [Ñƒ] LT';
                    case 3:
                        return '[Ñƒ] [ÑÑ€ÐµÐ´Ñƒ] [Ñƒ] LT';
                    case 6:
                        return '[Ñƒ] [ÑÑƒÐ±Ð¾Ñ‚Ñƒ] [Ñƒ] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[Ñƒ] dddd [Ñƒ] LT';
                }
            },
            lastDay: '[Ñ˜ÑƒÑ‡Ðµ Ñƒ] LT',
            lastWeek: function () {
                var lastWeekDays = [
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [Ð½ÐµÐ´ÐµÑ™Ðµ] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [ÑƒÑ‚Ð¾Ñ€ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑ€ÐµÐ´Ðµ] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿ÐµÑ‚ÐºÐ°] [Ñƒ] LT',
                    '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑƒÐ±Ð¾Ñ‚Ðµ] [Ñƒ] LT',
                ];
                return lastWeekDays[this.day()];
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð·Ð° %s',
            past: 'Ð¿Ñ€Ðµ %s',
            s: 'Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
            ss: translator$1.translate,
            m: translator$1.translate,
            mm: translator$1.translate,
            h: translator$1.translate,
            hh: translator$1.translate,
            d: 'Ð´Ð°Ð½',
            dd: translator$1.translate,
            M: 'Ð¼ÐµÑÐµÑ†',
            MM: translator$1.translate,
            y: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
            yy: translator$1.translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 1st is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var translator$2 = {
        words: {
            //Different grammatical cases
            ss: ['sekunda', 'sekunde', 'sekundi'],
            m: ['jedan minut', 'jedne minute'],
            mm: ['minut', 'minute', 'minuta'],
            h: ['jedan sat', 'jednog sata'],
            hh: ['sat', 'sata', 'sati'],
            dd: ['dan', 'dana', 'dana'],
            MM: ['mesec', 'meseca', 'meseci'],
            yy: ['godina', 'godine', 'godina'],
        },
        correctGrammaticalCase: function (number, wordKey) {
            return number === 1
                ? wordKey[0]
                : number >= 2 && number <= 4
                ? wordKey[1]
                : wordKey[2];
        },
        translate: function (number, withoutSuffix, key) {
            var wordKey = translator$2.words[key];
            if (key.length === 1) {
                return withoutSuffix ? wordKey[0] : wordKey[1];
            } else {
                return (
                    number +
                    ' ' +
                    translator$2.correctGrammaticalCase(number, wordKey)
                );
            }
        },
    };

    hooks.defineLocale('sr', {
        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
            '_'
        ),
        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'nedelja_ponedeljak_utorak_sreda_Äetvrtak_petak_subota'.split(
            '_'
        ),
        weekdaysShort: 'ned._pon._uto._sre._Äet._pet._sub.'.split('_'),
        weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'D. M. YYYY.',
            LL: 'D. MMMM YYYY.',
            LLL: 'D. MMMM YYYY. H:mm',
            LLLL: 'dddd, D. MMMM YYYY. H:mm',
        },
        calendar: {
            sameDay: '[danas u] LT',
            nextDay: '[sutra u] LT',
            nextWeek: function () {
                switch (this.day()) {
                    case 0:
                        return '[u] [nedelju] [u] LT';
                    case 3:
                        return '[u] [sredu] [u] LT';
                    case 6:
                        return '[u] [subotu] [u] LT';
                    case 1:
                    case 2:
                    case 4:
                    case 5:
                        return '[u] dddd [u] LT';
                }
            },
            lastDay: '[juÄe u] LT',
            lastWeek: function () {
                var lastWeekDays = [
                    '[proÅ¡le] [nedelje] [u] LT',
                    '[proÅ¡log] [ponedeljka] [u] LT',
                    '[proÅ¡log] [utorka] [u] LT',
                    '[proÅ¡le] [srede] [u] LT',
                    '[proÅ¡log] [Äetvrtka] [u] LT',
                    '[proÅ¡log] [petka] [u] LT',
                    '[proÅ¡le] [subote] [u] LT',
                ];
                return lastWeekDays[this.day()];
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'za %s',
            past: 'pre %s',
            s: 'nekoliko sekundi',
            ss: translator$2.translate,
            m: translator$2.translate,
            mm: translator$2.translate,
            h: translator$2.translate,
            hh: translator$2.translate,
            d: 'dan',
            dd: translator$2.translate,
            M: 'mesec',
            MM: translator$2.translate,
            y: 'godinu',
            yy: translator$2.translate,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ss', {
        months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
            '_'
        ),
        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
        weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
            '_'
        ),
        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[Namuhla nga] LT',
            nextDay: '[Kusasa nga] LT',
            nextWeek: 'dddd [nga] LT',
            lastDay: '[Itolo nga] LT',
            lastWeek: 'dddd [leliphelile] [nga] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'nga %s',
            past: 'wenteka nga %s',
            s: 'emizuzwana lomcane',
            ss: '%d mzuzwana',
            m: 'umzuzu',
            mm: '%d emizuzu',
            h: 'lihora',
            hh: '%d emahora',
            d: 'lilanga',
            dd: '%d emalanga',
            M: 'inyanga',
            MM: '%d tinyanga',
            y: 'umnyaka',
            yy: '%d iminyaka',
        },
        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
        meridiem: function (hours, minutes, isLower) {
            if (hours < 11) {
                return 'ekuseni';
            } else if (hours < 15) {
                return 'emini';
            } else if (hours < 19) {
                return 'entsambama';
            } else {
                return 'ebusuku';
            }
        },
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'ekuseni') {
                return hour;
            } else if (meridiem === 'emini') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
                if (hour === 0) {
                    return 0;
                }
                return hour + 12;
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: '%d',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('sv', {
        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
            '_'
        ),
        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
        weekdays: 'sÃ¶ndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lÃ¶rdag'.split('_'),
        weekdaysShort: 'sÃ¶n_mÃ¥n_tis_ons_tor_fre_lÃ¶r'.split('_'),
        weekdaysMin: 'sÃ¶_mÃ¥_ti_on_to_fr_lÃ¶'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY [kl.] HH:mm',
            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd D MMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Idag] LT',
            nextDay: '[Imorgon] LT',
            lastDay: '[IgÃ¥r] LT',
            nextWeek: '[PÃ¥] dddd LT',
            lastWeek: '[I] dddd[s] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'om %s',
            past: 'fÃ¶r %s sedan',
            s: 'nÃ¥gra sekunder',
            ss: '%d sekunder',
            m: 'en minut',
            mm: '%d minuter',
            h: 'en timme',
            hh: '%d timmar',
            d: 'en dag',
            dd: '%d dagar',
            M: 'en mÃ¥nad',
            MM: '%d mÃ¥nader',
            y: 'ett Ã¥r',
            yy: '%d Ã¥r',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? ':e'
                        : b === 1
                        ? ':a'
                        : b === 2
                        ? ':a'
                        : b === 3
                        ? ':e'
                        : ':e';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('sw', {
        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
            '_'
        ),
        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
        weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
            '_'
        ),
        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'hh:mm A',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[leo saa] LT',
            nextDay: '[kesho saa] LT',
            nextWeek: '[wiki ijayo] dddd [saat] LT',
            lastDay: '[jana] LT',
            lastWeek: '[wiki iliyopita] dddd [saat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s baadaye',
            past: 'tokea %s',
            s: 'hivi punde',
            ss: 'sekunde %d',
            m: 'dakika moja',
            mm: 'dakika %d',
            h: 'saa limoja',
            hh: 'masaa %d',
            d: 'siku moja',
            dd: 'siku %d',
            M: 'mwezi mmoja',
            MM: 'miezi %d',
            y: 'mwaka mmoja',
            yy: 'miaka %d',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var symbolMap$g = {
            1: 'à¯§',
            2: 'à¯¨',
            3: 'à¯©',
            4: 'à¯ª',
            5: 'à¯«',
            6: 'à¯¬',
            7: 'à¯­',
            8: 'à¯®',
            9: 'à¯¯',
            0: 'à¯¦',
        },
        numberMap$f = {
            'à¯§': '1',
            'à¯¨': '2',
            'à¯©': '3',
            'à¯ª': '4',
            'à¯«': '5',
            'à¯¬': '6',
            'à¯­': '7',
            'à¯®': '8',
            'à¯¯': '9',
            'à¯¦': '0',
        };

    hooks.defineLocale('ta', {
        months: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
            '_'
        ),
        monthsShort: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
            '_'
        ),
        weekdays: 'à®žà®¾à®¯à®¿à®±à¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ_à®¤à®¿à®™à¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ_à®šà¯†à®µà¯à®µà®¾à®¯à¯à®•à®¿à®´à®®à¯ˆ_à®ªà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ_à®µà®¿à®¯à®¾à®´à®•à¯à®•à®¿à®´à®®à¯ˆ_à®µà¯†à®³à¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ_à®šà®©à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ'.split(
            '_'
        ),
        weekdaysShort: 'à®žà®¾à®¯à®¿à®±à¯_à®¤à®¿à®™à¯à®•à®³à¯_à®šà¯†à®µà¯à®µà®¾à®¯à¯_à®ªà¯à®¤à®©à¯_à®µà®¿à®¯à®¾à®´à®©à¯_à®µà¯†à®³à¯à®³à®¿_à®šà®©à®¿'.split(
            '_'
        ),
        weekdaysMin: 'à®žà®¾_à®¤à®¿_à®šà¯†_à®ªà¯_à®µà®¿_à®µà¯†_à®š'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, HH:mm',
            LLLL: 'dddd, D MMMM YYYY, HH:mm',
        },
        calendar: {
            sameDay: '[à®‡à®©à¯à®±à¯] LT',
            nextDay: '[à®¨à®¾à®³à¯ˆ] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à®¨à¯‡à®±à¯à®±à¯] LT',
            lastWeek: '[à®•à®Ÿà®¨à¯à®¤ à®µà®¾à®°à®®à¯] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à®‡à®²à¯',
            past: '%s à®®à¯à®©à¯',
            s: 'à®’à®°à¯ à®šà®¿à®² à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
            ss: '%d à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
            m: 'à®’à®°à¯ à®¨à®¿à®®à®¿à®Ÿà®®à¯',
            mm: '%d à®¨à®¿à®®à®¿à®Ÿà®™à¯à®•à®³à¯',
            h: 'à®’à®°à¯ à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
            hh: '%d à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
            d: 'à®’à®°à¯ à®¨à®¾à®³à¯',
            dd: '%d à®¨à®¾à®Ÿà¯à®•à®³à¯',
            M: 'à®’à®°à¯ à®®à®¾à®¤à®®à¯',
            MM: '%d à®®à®¾à®¤à®™à¯à®•à®³à¯',
            y: 'à®’à®°à¯ à®µà®°à¯à®Ÿà®®à¯',
            yy: '%d à®†à®£à¯à®Ÿà¯à®•à®³à¯',
        },
        dayOfMonthOrdinalParse: /\d{1,2}à®µà®¤à¯/,
        ordinal: function (number) {
            return number + 'à®µà®¤à¯';
        },
        preparse: function (string) {
            return string.replace(/[à¯§à¯¨à¯©à¯ªà¯«à¯¬à¯­à¯®à¯¯à¯¦]/g, function (match) {
                return numberMap$f[match];
            });
        },
        postformat: function (string) {
            return string.replace(/\d/g, function (match) {
                return symbolMap$g[match];
            });
        },
        // refer http://ta.wikipedia.org/s/1er1
        meridiemParse: /à®¯à®¾à®®à®®à¯|à®µà¯ˆà®•à®±à¯ˆ|à®•à®¾à®²à¯ˆ|à®¨à®£à¯à®ªà®•à®²à¯|à®Žà®±à¯à®ªà®¾à®Ÿà¯|à®®à®¾à®²à¯ˆ/,
        meridiem: function (hour, minute, isLower) {
            if (hour < 2) {
                return ' à®¯à®¾à®®à®®à¯';
            } else if (hour < 6) {
                return ' à®µà¯ˆà®•à®±à¯ˆ'; // à®µà¯ˆà®•à®±à¯ˆ
            } else if (hour < 10) {
                return ' à®•à®¾à®²à¯ˆ'; // à®•à®¾à®²à¯ˆ
            } else if (hour < 14) {
                return ' à®¨à®£à¯à®ªà®•à®²à¯'; // à®¨à®£à¯à®ªà®•à®²à¯
            } else if (hour < 18) {
                return ' à®Žà®±à¯à®ªà®¾à®Ÿà¯'; // à®Žà®±à¯à®ªà®¾à®Ÿà¯
            } else if (hour < 22) {
                return ' à®®à®¾à®²à¯ˆ'; // à®®à®¾à®²à¯ˆ
            } else {
                return ' à®¯à®¾à®®à®®à¯';
            }
        },
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à®¯à®¾à®®à®®à¯') {
                return hour < 2 ? hour : hour + 12;
            } else if (meridiem === 'à®µà¯ˆà®•à®±à¯ˆ' || meridiem === 'à®•à®¾à®²à¯ˆ') {
                return hour;
            } else if (meridiem === 'à®¨à®£à¯à®ªà®•à®²à¯') {
                return hour >= 10 ? hour : hour + 12;
            } else {
                return hour + 12;
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('te', {
        months: 'à°œà°¨à°µà°°à°¿_à°«à°¿à°¬à±à°°à°µà°°à°¿_à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿à°²à±_à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—à°¸à±à°Ÿà±_à°¸à±†à°ªà±à°Ÿà±†à°‚à°¬à°°à±_à°…à°•à±à°Ÿà±‹à°¬à°°à±_à°¨à°µà°‚à°¬à°°à±_à°¡à°¿à°¸à±†à°‚à°¬à°°à±'.split(
            '_'
        ),
        monthsShort: 'à°œà°¨._à°«à°¿à°¬à±à°°._à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿._à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—._à°¸à±†à°ªà±._à°…à°•à±à°Ÿà±‹._à°¨à°µ._à°¡à°¿à°¸à±†.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à°†à°¦à°¿à°µà°¾à°°à°‚_à°¸à±‹à°®à°µà°¾à°°à°‚_à°®à°‚à°—à°³à°µà°¾à°°à°‚_à°¬à±à°§à°µà°¾à°°à°‚_à°—à±à°°à±à°µà°¾à°°à°‚_à°¶à±à°•à±à°°à°µà°¾à°°à°‚_à°¶à°¨à°¿à°µà°¾à°°à°‚'.split(
            '_'
        ),
        weekdaysShort: 'à°†à°¦à°¿_à°¸à±‹à°®_à°®à°‚à°—à°³_à°¬à±à°§_à°—à±à°°à±_à°¶à±à°•à±à°°_à°¶à°¨à°¿'.split('_'),
        weekdaysMin: 'à°†_à°¸à±‹_à°®à°‚_à°¬à±_à°—à±_à°¶à±_à°¶'.split('_'),
        longDateFormat: {
            LT: 'A h:mm',
            LTS: 'A h:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY, A h:mm',
            LLLL: 'dddd, D MMMM YYYY, A h:mm',
        },
        calendar: {
            sameDay: '[à°¨à±‡à°¡à±] LT',
            nextDay: '[à°°à±‡à°ªà±] LT',
            nextWeek: 'dddd, LT',
            lastDay: '[à°¨à°¿à°¨à±à°¨] LT',
            lastWeek: '[à°—à°¤] dddd, LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s à°²à±‹',
            past: '%s à°•à±à°°à°¿à°¤à°‚',
            s: 'à°•à±Šà°¨à±à°¨à°¿ à°•à±à°·à°£à°¾à°²à±',
            ss: '%d à°¸à±†à°•à°¨à±à°²à±',
            m: 'à°’à°• à°¨à°¿à°®à°¿à°·à°‚',
            mm: '%d à°¨à°¿à°®à°¿à°·à°¾à°²à±',
            h: 'à°’à°• à°—à°‚à°Ÿ',
            hh: '%d à°—à°‚à°Ÿà°²à±',
            d: 'à°’à°• à°°à±‹à°œà±',
            dd: '%d à°°à±‹à°œà±à°²à±',
            M: 'à°’à°• à°¨à±†à°²',
            MM: '%d à°¨à±†à°²à°²à±',
            y: 'à°’à°• à°¸à°‚à°µà°¤à±à°¸à°°à°‚',
            yy: '%d à°¸à°‚à°µà°¤à±à°¸à°°à°¾à°²à±',
        },
        dayOfMonthOrdinalParse: /\d{1,2}à°µ/,
        ordinal: '%dà°µ',
        meridiemParse: /à°°à°¾à°¤à±à°°à°¿|à°‰à°¦à°¯à°‚|à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚|à°¸à°¾à°¯à°‚à°¤à±à°°à°‚/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'à°°à°¾à°¤à±à°°à°¿') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'à°‰à°¦à°¯à°‚') {
                return hour;
            } else if (meridiem === 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚') {
                return hour >= 10 ? hour : hour + 12;
            } else if (meridiem === 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'à°°à°¾à°¤à±à°°à°¿';
            } else if (hour < 10) {
                return 'à°‰à°¦à°¯à°‚';
            } else if (hour < 17) {
                return 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚';
            } else if (hour < 20) {
                return 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚';
            } else {
                return 'à°°à°¾à°¤à±à°°à°¿';
            }
        },
        week: {
            dow: 0, // Sunday is the first day of the week.
            doy: 6, // The week that contains Jan 6th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('tet', {
        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_JuÃ±u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
            '_'
        ),
        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ohin iha] LT',
            nextDay: '[Aban iha] LT',
            nextWeek: 'dddd [iha] LT',
            lastDay: '[Horiseik iha] LT',
            lastWeek: 'dddd [semana kotuk] [iha] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'iha %s',
            past: '%s liuba',
            s: 'segundu balun',
            ss: 'segundu %d',
            m: 'minutu ida',
            mm: 'minutu %d',
            h: 'oras ida',
            hh: 'oras %d',
            d: 'loron ida',
            dd: 'loron %d',
            M: 'fulan ida',
            MM: 'fulan %d',
            y: 'tinan ida',
            yy: 'tinan %d',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var suffixes$3 = {
        0: '-ÑƒÐ¼',
        1: '-ÑƒÐ¼',
        2: '-ÑŽÐ¼',
        3: '-ÑŽÐ¼',
        4: '-ÑƒÐ¼',
        5: '-ÑƒÐ¼',
        6: '-ÑƒÐ¼',
        7: '-ÑƒÐ¼',
        8: '-ÑƒÐ¼',
        9: '-ÑƒÐ¼',
        10: '-ÑƒÐ¼',
        12: '-ÑƒÐ¼',
        13: '-ÑƒÐ¼',
        20: '-ÑƒÐ¼',
        30: '-ÑŽÐ¼',
        40: '-ÑƒÐ¼',
        50: '-ÑƒÐ¼',
        60: '-ÑƒÐ¼',
        70: '-ÑƒÐ¼',
        80: '-ÑƒÐ¼',
        90: '-ÑƒÐ¼',
        100: '-ÑƒÐ¼',
    };

    hooks.defineLocale('tg', {
        months: {
            format: 'ÑÐ½Ð²Ð°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€Ð°Ð»Ð¸_Ð¼Ð°Ñ€Ñ‚Ð¸_Ð°Ð¿Ñ€ÐµÐ»Ð¸_Ð¼Ð°Ð¹Ð¸_Ð¸ÑŽÐ½Ð¸_Ð¸ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚Ð¸_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ð¸_Ð¾ÐºÑ‚ÑÐ±Ñ€Ð¸_Ð½Ð¾ÑÐ±Ñ€Ð¸_Ð´ÐµÐºÐ°Ð±Ñ€Ð¸'.split(
                '_'
            ),
            standalone: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
                '_'
            ),
        },
        monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
        weekdays: 'ÑÐºÑˆÐ°Ð½Ð±Ðµ_Ð´ÑƒÑˆÐ°Ð½Ð±Ðµ_ÑÐµÑˆÐ°Ð½Ð±Ðµ_Ñ‡Ð¾Ñ€ÑˆÐ°Ð½Ð±Ðµ_Ð¿Ð°Ð½Ò·ÑˆÐ°Ð½Ð±Ðµ_Ò·ÑƒÐ¼ÑŠÐ°_ÑˆÐ°Ð½Ð±Ðµ'.split(
            '_'
        ),
        weekdaysShort: 'ÑÑˆÐ±_Ð´ÑˆÐ±_ÑÑˆÐ±_Ñ‡ÑˆÐ±_Ð¿ÑˆÐ±_Ò·ÑƒÐ¼_ÑˆÐ½Ð±'.split('_'),
        weekdaysMin: 'ÑÑˆ_Ð´Ñˆ_ÑÑˆ_Ñ‡Ñˆ_Ð¿Ñˆ_Ò·Ð¼_ÑˆÐ±'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[Ð˜Ð¼Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
            nextDay: '[Ð¤Ð°Ñ€Ð´Ð¾ ÑÐ¾Ð°Ñ‚Ð¸] LT',
            lastDay: '[Ð”Ð¸Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
            nextWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð¾ÑÐ½Ð´Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
            lastWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð³ÑƒÐ·Ð°ÑˆÑ‚Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð±Ð°ÑŠÐ´Ð¸ %s',
            past: '%s Ð¿ÐµÑˆ',
            s: 'ÑÐºÑ‡Ð°Ð½Ð´ ÑÐ¾Ð½Ð¸Ñ',
            m: 'ÑÐº Ð´Ð°Ò›Ð¸Ò›Ð°',
            mm: '%d Ð´Ð°Ò›Ð¸Ò›Ð°',
            h: 'ÑÐº ÑÐ¾Ð°Ñ‚',
            hh: '%d ÑÐ¾Ð°Ñ‚',
            d: 'ÑÐº Ñ€Ó¯Ð·',
            dd: '%d Ñ€Ó¯Ð·',
            M: 'ÑÐº Ð¼Ð¾Ò³',
            MM: '%d Ð¼Ð¾Ò³',
            y: 'ÑÐº ÑÐ¾Ð»',
            yy: '%d ÑÐ¾Ð»',
        },
        meridiemParse: /ÑˆÐ°Ð±|ÑÑƒÐ±Ò³|Ñ€Ó¯Ð·|Ð±ÐµÐ³Ð¾Ò³/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'ÑˆÐ°Ð±') {
                return hour < 4 ? hour : hour + 12;
            } else if (meridiem === 'ÑÑƒÐ±Ò³') {
                return hour;
            } else if (meridiem === 'Ñ€Ó¯Ð·') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'Ð±ÐµÐ³Ð¾Ò³') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'ÑˆÐ°Ð±';
            } else if (hour < 11) {
                return 'ÑÑƒÐ±Ò³';
            } else if (hour < 16) {
                return 'Ñ€Ó¯Ð·';
            } else if (hour < 19) {
                return 'Ð±ÐµÐ³Ð¾Ò³';
            } else {
                return 'ÑˆÐ°Ð±';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(ÑƒÐ¼|ÑŽÐ¼)/,
        ordinal: function (number) {
            var a = number % 10,
                b = number >= 100 ? 100 : null;
            return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]);
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 1th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('th', {
        months: 'à¸¡à¸à¸£à¸²à¸„à¸¡_à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ_à¸¡à¸µà¸™à¸²à¸„à¸¡_à¹€à¸¡à¸©à¸²à¸¢à¸™_à¸žà¸¤à¸©à¸ à¸²à¸„à¸¡_à¸¡à¸´à¸–à¸¸à¸™à¸²à¸¢à¸™_à¸à¸£à¸à¸Žà¸²à¸„à¸¡_à¸ªà¸´à¸‡à¸«à¸²à¸„à¸¡_à¸à¸±à¸™à¸¢à¸²à¸¢à¸™_à¸•à¸¸à¸¥à¸²à¸„à¸¡_à¸žà¸¤à¸¨à¸ˆà¸´à¸à¸²à¸¢à¸™_à¸˜à¸±à¸™à¸§à¸²à¸„à¸¡'.split(
            '_'
        ),
        monthsShort: 'à¸¡.à¸„._à¸.à¸ž._à¸¡à¸µ.à¸„._à¹€à¸¡.à¸¢._à¸ž.à¸„._à¸¡à¸´.à¸¢._à¸.à¸„._à¸ª.à¸„._à¸.à¸¢._à¸•.à¸„._à¸ž.à¸¢._à¸˜.à¸„.'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ªà¸šà¸”à¸µ_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'),
        weekdaysShort: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ª_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'), // yes, three characters difference
        weekdaysMin: 'à¸­à¸²._à¸ˆ._à¸­._à¸ž._à¸žà¸¤._à¸¨._à¸ª.'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'H:mm',
            LTS: 'H:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
            LLLL: 'à¸§à¸±à¸™ddddà¸—à¸µà¹ˆ D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
        },
        meridiemParse: /à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡|à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡/,
        isPM: function (input) {
            return input === 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
            } else {
                return 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
            }
        },
        calendar: {
            sameDay: '[à¸§à¸±à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
            nextDay: '[à¸žà¸£à¸¸à¹ˆà¸‡à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
            nextWeek: 'dddd[à¸«à¸™à¹‰à¸² à¹€à¸§à¸¥à¸²] LT',
            lastDay: '[à¹€à¸¡à¸·à¹ˆà¸­à¸§à¸²à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
            lastWeek: '[à¸§à¸±à¸™]dddd[à¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§ à¹€à¸§à¸¥à¸²] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'à¸­à¸µà¸ %s',
            past: '%sà¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§',
            s: 'à¹„à¸¡à¹ˆà¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—à¸µ',
            ss: '%d à¸§à¸´à¸™à¸²à¸—à¸µ',
            m: '1 à¸™à¸²à¸—à¸µ',
            mm: '%d à¸™à¸²à¸—à¸µ',
            h: '1 à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
            hh: '%d à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
            d: '1 à¸§à¸±à¸™',
            dd: '%d à¸§à¸±à¸™',
            w: '1 à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
            ww: '%d à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
            M: '1 à¹€à¸”à¸·à¸­à¸™',
            MM: '%d à¹€à¸”à¸·à¸­à¸™',
            y: '1 à¸›à¸µ',
            yy: '%d à¸›à¸µ',
        },
    });

    //! moment.js locale configuration

    var suffixes$4 = {
        1: "'inji",
        5: "'inji",
        8: "'inji",
        70: "'inji",
        80: "'inji",
        2: "'nji",
        7: "'nji",
        20: "'nji",
        50: "'nji",
        3: "'Ã¼nji",
        4: "'Ã¼nji",
        100: "'Ã¼nji",
        6: "'njy",
        9: "'unjy",
        10: "'unjy",
        30: "'unjy",
        60: "'ynjy",
        90: "'ynjy",
    };

    hooks.defineLocale('tk', {
        months: 'Ãanwar_Fewral_Mart_Aprel_MaÃ½_IÃ½un_IÃ½ul_Awgust_SentÃ½abr_OktÃ½abr_NoÃ½abr_Dekabr'.split(
            '_'
        ),
        monthsShort: 'Ãan_Few_Mar_Apr_MaÃ½_IÃ½n_IÃ½l_Awg_Sen_Okt_NoÃ½_Dek'.split('_'),
        weekdays: 'ÃekÅŸenbe_DuÅŸenbe_SiÅŸenbe_Ã‡arÅŸenbe_PenÅŸenbe_Anna_Åženbe'.split(
            '_'
        ),
        weekdaysShort: 'Ãek_DuÅŸ_SiÅŸ_Ã‡ar_Pen_Ann_Åžen'.split('_'),
        weekdaysMin: 'Ãk_DÅŸ_SÅŸ_Ã‡r_Pn_An_Åžn'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[bugÃ¼n sagat] LT',
            nextDay: '[ertir sagat] LT',
            nextWeek: '[indiki] dddd [sagat] LT',
            lastDay: '[dÃ¼Ã½n] LT',
            lastWeek: '[geÃ§en] dddd [sagat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s soÅˆ',
            past: '%s Ã¶Åˆ',
            s: 'birnÃ¤Ã§e sekunt',
            m: 'bir minut',
            mm: '%d minut',
            h: 'bir sagat',
            hh: '%d sagat',
            d: 'bir gÃ¼n',
            dd: '%d gÃ¼n',
            M: 'bir aÃ½',
            MM: '%d aÃ½',
            y: 'bir Ã½yl',
            yy: '%d Ã½yl',
        },
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'Do':
                case 'DD':
                    return number;
                default:
                    if (number === 0) {
                        // special case for zero
                        return number + "'unjy";
                    }
                    var a = number % 10,
                        b = (number % 100) - a,
                        c = number >= 100 ? 100 : null;
                    return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]);
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('tl-ph', {
        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
            '_'
        ),
        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
            '_'
        ),
        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'MM/D/YYYY',
            LL: 'MMMM D, YYYY',
            LLL: 'MMMM D, YYYY HH:mm',
            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
        },
        calendar: {
            sameDay: 'LT [ngayong araw]',
            nextDay: '[Bukas ng] LT',
            nextWeek: 'LT [sa susunod na] dddd',
            lastDay: 'LT [kahapon]',
            lastWeek: 'LT [noong nakaraang] dddd',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'sa loob ng %s',
            past: '%s ang nakalipas',
            s: 'ilang segundo',
            ss: '%d segundo',
            m: 'isang minuto',
            mm: '%d minuto',
            h: 'isang oras',
            hh: '%d oras',
            d: 'isang araw',
            dd: '%d araw',
            M: 'isang buwan',
            MM: '%d buwan',
            y: 'isang taon',
            yy: '%d taon',
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: function (number) {
            return number;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var numbersNouns = 'pagh_waâ€™_chaâ€™_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');

    function translateFuture(output) {
        var time = output;
        time =
            output.indexOf('jaj') !== -1
                ? time.slice(0, -3) + 'leS'
                : output.indexOf('jar') !== -1
                ? time.slice(0, -3) + 'waQ'
                : output.indexOf('DIS') !== -1
                ? time.slice(0, -3) + 'nem'
                : time + ' pIq';
        return time;
    }

    function translatePast(output) {
        var time = output;
        time =
            output.indexOf('jaj') !== -1
                ? time.slice(0, -3) + 'Huâ€™'
                : output.indexOf('jar') !== -1
                ? time.slice(0, -3) + 'wen'
                : output.indexOf('DIS') !== -1
                ? time.slice(0, -3) + 'ben'
                : time + ' ret';
        return time;
    }

    function translate$a(number, withoutSuffix, string, isFuture) {
        var numberNoun = numberAsNoun(number);
        switch (string) {
            case 'ss':
                return numberNoun + ' lup';
            case 'mm':
                return numberNoun + ' tup';
            case 'hh':
                return numberNoun + ' rep';
            case 'dd':
                return numberNoun + ' jaj';
            case 'MM':
                return numberNoun + ' jar';
            case 'yy':
                return numberNoun + ' DIS';
        }
    }

    function numberAsNoun(number) {
        var hundred = Math.floor((number % 1000) / 100),
            ten = Math.floor((number % 100) / 10),
            one = number % 10,
            word = '';
        if (hundred > 0) {
            word += numbersNouns[hundred] + 'vatlh';
        }
        if (ten > 0) {
            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
        }
        if (one > 0) {
            word += (word !== '' ? ' ' : '') + numbersNouns[one];
        }
        return word === '' ? 'pagh' : word;
    }

    hooks.defineLocale('tlh', {
        months: 'teraâ€™ jar waâ€™_teraâ€™ jar chaâ€™_teraâ€™ jar wej_teraâ€™ jar loS_teraâ€™ jar vagh_teraâ€™ jar jav_teraâ€™ jar Soch_teraâ€™ jar chorgh_teraâ€™ jar Hut_teraâ€™ jar waâ€™maH_teraâ€™ jar waâ€™maH waâ€™_teraâ€™ jar waâ€™maH chaâ€™'.split(
            '_'
        ),
        monthsShort: 'jar waâ€™_jar chaâ€™_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar waâ€™maH_jar waâ€™maH waâ€™_jar waâ€™maH chaâ€™'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
            '_'
        ),
        weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
            '_'
        ),
        weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
            '_'
        ),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[DaHjaj] LT',
            nextDay: '[waâ€™leS] LT',
            nextWeek: 'LLL',
            lastDay: '[waâ€™Huâ€™] LT',
            lastWeek: 'LLL',
            sameElse: 'L',
        },
        relativeTime: {
            future: translateFuture,
            past: translatePast,
            s: 'puS lup',
            ss: translate$a,
            m: 'waâ€™ tup',
            mm: translate$a,
            h: 'waâ€™ rep',
            hh: translate$a,
            d: 'waâ€™ jaj',
            dd: translate$a,
            M: 'waâ€™ jar',
            MM: translate$a,
            y: 'waâ€™ DIS',
            yy: translate$a,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var suffixes$5 = {
        1: "'inci",
        5: "'inci",
        8: "'inci",
        70: "'inci",
        80: "'inci",
        2: "'nci",
        7: "'nci",
        20: "'nci",
        50: "'nci",
        3: "'Ã¼ncÃ¼",
        4: "'Ã¼ncÃ¼",
        100: "'Ã¼ncÃ¼",
        6: "'ncÄ±",
        9: "'uncu",
        10: "'uncu",
        30: "'uncu",
        60: "'Ä±ncÄ±",
        90: "'Ä±ncÄ±",
    };

    hooks.defineLocale('tr', {
        months: 'Ocak_Åžubat_Mart_Nisan_MayÄ±s_Haziran_Temmuz_AÄŸustos_EylÃ¼l_Ekim_KasÄ±m_AralÄ±k'.split(
            '_'
        ),
        monthsShort: 'Oca_Åžub_Mar_Nis_May_Haz_Tem_AÄŸu_Eyl_Eki_Kas_Ara'.split('_'),
        weekdays: 'Pazar_Pazartesi_SalÄ±_Ã‡arÅŸamba_PerÅŸembe_Cuma_Cumartesi'.split(
            '_'
        ),
        weekdaysShort: 'Paz_Pts_Sal_Ã‡ar_Per_Cum_Cts'.split('_'),
        weekdaysMin: 'Pz_Pt_Sa_Ã‡a_Pe_Cu_Ct'.split('_'),
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower ? 'Ã¶Ã¶' : 'Ã–Ã–';
            } else {
                return isLower ? 'Ã¶s' : 'Ã–S';
            }
        },
        meridiemParse: /Ã¶Ã¶|Ã–Ã–|Ã¶s|Ã–S/,
        isPM: function (input) {
            return input === 'Ã¶s' || input === 'Ã–S';
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[bugÃ¼n saat] LT',
            nextDay: '[yarÄ±n saat] LT',
            nextWeek: '[gelecek] dddd [saat] LT',
            lastDay: '[dÃ¼n] LT',
            lastWeek: '[geÃ§en] dddd [saat] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s sonra',
            past: '%s Ã¶nce',
            s: 'birkaÃ§ saniye',
            ss: '%d saniye',
            m: 'bir dakika',
            mm: '%d dakika',
            h: 'bir saat',
            hh: '%d saat',
            d: 'bir gÃ¼n',
            dd: '%d gÃ¼n',
            w: 'bir hafta',
            ww: '%d hafta',
            M: 'bir ay',
            MM: '%d ay',
            y: 'bir yÄ±l',
            yy: '%d yÄ±l',
        },
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'Do':
                case 'DD':
                    return number;
                default:
                    if (number === 0) {
                        // special case for zero
                        return number + "'Ä±ncÄ±";
                    }
                    var a = number % 10,
                        b = (number % 100) - a,
                        c = number >= 100 ? 100 : null;
                    return number + (suffixes$5[a] || suffixes$5[b] || suffixes$5[c]);
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
    // This is currently too difficult (maybe even impossible) to add.
    hooks.defineLocale('tzl', {
        months: 'Januar_Fevraglh_MarÃ§_AvrÃ¯u_Mai_GÃ¼n_Julia_Guscht_Setemvar_ListopÃ¤ts_Noemvar_Zecemvar'.split(
            '_'
        ),
        monthsShort: 'Jan_Fev_Mar_Avr_Mai_GÃ¼n_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
        weekdays: 'SÃºladi_LÃºneÃ§i_Maitzi_MÃ¡rcuri_XhÃºadi_ViÃ©nerÃ§i_SÃ¡turi'.split('_'),
        weekdaysShort: 'SÃºl_LÃºn_Mai_MÃ¡r_XhÃº_ViÃ©_SÃ¡t'.split('_'),
        weekdaysMin: 'SÃº_LÃº_Ma_MÃ¡_Xh_Vi_SÃ¡'.split('_'),
        longDateFormat: {
            LT: 'HH.mm',
            LTS: 'HH.mm.ss',
            L: 'DD.MM.YYYY',
            LL: 'D. MMMM [dallas] YYYY',
            LLL: 'D. MMMM [dallas] YYYY HH.mm',
            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
        },
        meridiemParse: /d\'o|d\'a/i,
        isPM: function (input) {
            return "d'o" === input.toLowerCase();
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours > 11) {
                return isLower ? "d'o" : "D'O";
            } else {
                return isLower ? "d'a" : "D'A";
            }
        },
        calendar: {
            sameDay: '[oxhi Ã ] LT',
            nextDay: '[demÃ  Ã ] LT',
            nextWeek: 'dddd [Ã ] LT',
            lastDay: '[ieiri Ã ] LT',
            lastWeek: '[sÃ¼r el] dddd [lasteu Ã ] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'osprei %s',
            past: 'ja%s',
            s: processRelativeTime$8,
            ss: processRelativeTime$8,
            m: processRelativeTime$8,
            mm: processRelativeTime$8,
            h: processRelativeTime$8,
            hh: processRelativeTime$8,
            d: processRelativeTime$8,
            dd: processRelativeTime$8,
            M: processRelativeTime$8,
            MM: processRelativeTime$8,
            y: processRelativeTime$8,
            yy: processRelativeTime$8,
        },
        dayOfMonthOrdinalParse: /\d{1,2}\./,
        ordinal: '%d.',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    function processRelativeTime$8(number, withoutSuffix, key, isFuture) {
        var format = {
            s: ['viensas secunds', "'iensas secunds"],
            ss: [number + ' secunds', '' + number + ' secunds'],
            m: ["'n mÃ­ut", "'iens mÃ­ut"],
            mm: [number + ' mÃ­uts', '' + number + ' mÃ­uts'],
            h: ["'n Ã¾ora", "'iensa Ã¾ora"],
            hh: [number + ' Ã¾oras', '' + number + ' Ã¾oras'],
            d: ["'n ziua", "'iensa ziua"],
            dd: [number + ' ziuas', '' + number + ' ziuas'],
            M: ["'n mes", "'iens mes"],
            MM: [number + ' mesen', '' + number + ' mesen'],
            y: ["'n ar", "'iens ar"],
            yy: [number + ' ars', '' + number + ' ars'],
        };
        return isFuture
            ? format[key][0]
            : withoutSuffix
            ? format[key][0]
            : format[key][1];
    }

    //! moment.js locale configuration

    hooks.defineLocale('tzm-latn', {
        months: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
            '_'
        ),
        monthsShort: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
            '_'
        ),
        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[asdkh g] LT',
            nextDay: '[aska g] LT',
            nextWeek: 'dddd [g] LT',
            lastDay: '[assant g] LT',
            lastWeek: 'dddd [g] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'dadkh s yan %s',
            past: 'yan %s',
            s: 'imik',
            ss: '%d imik',
            m: 'minuá¸',
            mm: '%d minuá¸',
            h: 'saÉ›a',
            hh: '%d tassaÉ›in',
            d: 'ass',
            dd: '%d ossan',
            M: 'ayowr',
            MM: '%d iyyirn',
            y: 'asgas',
            yy: '%d isgasn',
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('tzm', {
        months: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
            '_'
        ),
        monthsShort: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
            '_'
        ),
        weekdays: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
        weekdaysShort: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
        weekdaysMin: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[â´°âµ™â´·âµ… â´´] LT',
            nextDay: '[â´°âµ™â´½â´° â´´] LT',
            nextWeek: 'dddd [â´´] LT',
            lastDay: '[â´°âµšâ´°âµâµœ â´´] LT',
            lastWeek: 'dddd [â´´] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'â´·â´°â´·âµ… âµ™ âµ¢â´°âµ %s',
            past: 'âµ¢â´°âµ %s',
            s: 'âµ‰âµŽâµ‰â´½',
            ss: '%d âµ‰âµŽâµ‰â´½',
            m: 'âµŽâµ‰âµâµ“â´º',
            mm: '%d âµŽâµ‰âµâµ“â´º',
            h: 'âµ™â´°âµ„â´°',
            hh: '%d âµœâ´°âµ™âµ™â´°âµ„âµ‰âµ',
            d: 'â´°âµ™âµ™',
            dd: '%d oâµ™âµ™â´°âµ',
            M: 'â´°âµ¢oâµ“âµ”',
            MM: '%d âµ‰âµ¢âµ¢âµ‰âµ”âµ',
            y: 'â´°âµ™â´³â´°âµ™',
            yy: '%d âµ‰âµ™â´³â´°âµ™âµ',
        },
        week: {
            dow: 6, // Saturday is the first day of the week.
            doy: 12, // The week that contains Jan 12th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('ug-cn', {
        months: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
            '_'
        ),
        monthsShort: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
            '_'
        ),
        weekdays: 'ÙŠÛ•ÙƒØ´Û•Ù†Ø¨Û•_Ø¯ÛˆØ´Û•Ù†Ø¨Û•_Ø³Û•ÙŠØ´Û•Ù†Ø¨Û•_Ú†Ø§Ø±Ø´Û•Ù†Ø¨Û•_Ù¾Û•ÙŠØ´Û•Ù†Ø¨Û•_Ø¬ÛˆÙ…Û•_Ø´Û•Ù†Ø¨Û•'.split(
            '_'
        ),
        weekdaysShort: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
        weekdaysMin: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY-MM-DD',
            LL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰',
            LLL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
            LLLL: 'ddddØŒ YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
        },
        meridiemParse: /ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•|Ø³Û•Ú¾Û•Ø±|Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†|Ú†ÛˆØ´|Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†|ÙƒÛ•Ú†/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (
                meridiem === 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•' ||
                meridiem === 'Ø³Û•Ú¾Û•Ø±' ||
                meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†'
            ) {
                return hour;
            } else if (meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†' || meridiem === 'ÙƒÛ•Ú†') {
                return hour + 12;
            } else {
                return hour >= 11 ? hour : hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•';
            } else if (hm < 900) {
                return 'Ø³Û•Ú¾Û•Ø±';
            } else if (hm < 1130) {
                return 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†';
            } else if (hm < 1230) {
                return 'Ú†ÛˆØ´';
            } else if (hm < 1800) {
                return 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†';
            } else {
                return 'ÙƒÛ•Ú†';
            }
        },
        calendar: {
            sameDay: '[Ø¨ÛˆÚ¯ÛˆÙ† Ø³Ø§Ø¦Û•Øª] LT',
            nextDay: '[Ø¦Û•ØªÛ• Ø³Ø§Ø¦Û•Øª] LT',
            nextWeek: '[ÙƒÛÙ„Û•Ø±ÙƒÙ‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
            lastDay: '[ØªÛ†Ù†ÛˆÚ¯ÛˆÙ†] LT',
            lastWeek: '[Ø¦Ø§Ù„Ø¯Ù‰Ù†Ù‚Ù‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s ÙƒÛÙŠÙ‰Ù†',
            past: '%s Ø¨Û‡Ø±Û‡Ù†',
            s: 'Ù†Û•Ú†Ú†Û• Ø³ÛÙƒÙˆÙ†Øª',
            ss: '%d Ø³ÛÙƒÙˆÙ†Øª',
            m: 'Ø¨Ù‰Ø± Ù…Ù‰Ù†Û‡Øª',
            mm: '%d Ù…Ù‰Ù†Û‡Øª',
            h: 'Ø¨Ù‰Ø± Ø³Ø§Ø¦Û•Øª',
            hh: '%d Ø³Ø§Ø¦Û•Øª',
            d: 'Ø¨Ù‰Ø± ÙƒÛˆÙ†',
            dd: '%d ÙƒÛˆÙ†',
            M: 'Ø¨Ù‰Ø± Ø¦Ø§ÙŠ',
            MM: '%d Ø¦Ø§ÙŠ',
            y: 'Ø¨Ù‰Ø± ÙŠÙ‰Ù„',
            yy: '%d ÙŠÙ‰Ù„',
        },

        dayOfMonthOrdinalParse: /\d{1,2}(-ÙƒÛˆÙ†Ù‰|-Ø¦Ø§ÙŠ|-Ú¾Û•Ù¾ØªÛ•)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + '-ÙƒÛˆÙ†Ù‰';
                case 'w':
                case 'W':
                    return number + '-Ú¾Û•Ù¾ØªÛ•';
                default:
                    return number;
            }
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 1st is the first week of the year.
        },
    });

    //! moment.js locale configuration

    function plural$6(word, num) {
        var forms = word.split('_');
        return num % 10 === 1 && num % 100 !== 11
            ? forms[0]
            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
            ? forms[1]
            : forms[2];
    }
    function relativeTimeWithPlural$4(number, withoutSuffix, key) {
        var format = {
            ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´',
            mm: withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½',
            hh: withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½',
            dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð½Ñ–Ð²',
            MM: 'Ð¼Ñ–ÑÑÑ†ÑŒ_Ð¼Ñ–ÑÑÑ†Ñ–_Ð¼Ñ–ÑÑÑ†Ñ–Ð²',
            yy: 'Ñ€Ñ–Ðº_Ñ€Ð¾ÐºÐ¸_Ñ€Ð¾ÐºÑ–Ð²',
        };
        if (key === 'm') {
            return withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ';
        } else if (key === 'h') {
            return withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ';
        } else {
            return number + ' ' + plural$6(format[key], +number);
        }
    }
    function weekdaysCaseReplace(m, format) {
        var weekdays = {
                nominative: 'Ð½ÐµÐ´Ñ–Ð»Ñ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
                    '_'
                ),
                accusative: 'Ð½ÐµÐ´Ñ–Ð»ÑŽ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†ÑŽ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
                    '_'
                ),
                genitive: 'Ð½ÐµÐ´Ñ–Ð»Ñ–_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»ÐºÐ°_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€ÐºÐ°_ÑÐµÑ€ÐµÐ´Ð¸_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³Ð°_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ–_ÑÑƒÐ±Ð¾Ñ‚Ð¸'.split(
                    '_'
                ),
            },
            nounCase;

        if (m === true) {
            return weekdays['nominative']
                .slice(1, 7)
                .concat(weekdays['nominative'].slice(0, 1));
        }
        if (!m) {
            return weekdays['nominative'];
        }

        nounCase = /(\[[Ð’Ð²Ð£Ñƒ]\]) ?dddd/.test(format)
            ? 'accusative'
            : /\[?(?:Ð¼Ð¸Ð½ÑƒÐ»Ð¾Ñ—|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½Ð¾Ñ—)? ?\] ?dddd/.test(format)
            ? 'genitive'
            : 'nominative';
        return weekdays[nounCase][m.day()];
    }
    function processHoursFunction(str) {
        return function () {
            return str + 'Ð¾' + (this.hours() === 11 ? 'Ð±' : '') + '] LT';
        };
    }

    hooks.defineLocale('uk', {
        months: {
            format: 'ÑÑ–Ñ‡Ð½Ñ_Ð»ÑŽÑ‚Ð¾Ð³Ð¾_Ð±ÐµÑ€ÐµÐ·Ð½Ñ_ÐºÐ²Ñ–Ñ‚Ð½Ñ_Ñ‚Ñ€Ð°Ð²Ð½Ñ_Ñ‡ÐµÑ€Ð²Ð½Ñ_Ð»Ð¸Ð¿Ð½Ñ_ÑÐµÑ€Ð¿Ð½Ñ_Ð²ÐµÑ€ÐµÑÐ½Ñ_Ð¶Ð¾Ð²Ñ‚Ð½Ñ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´Ð°_Ð³Ñ€ÑƒÐ´Ð½Ñ'.split(
                '_'
            ),
            standalone: 'ÑÑ–Ñ‡ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ð¸Ð¹_Ð±ÐµÑ€ÐµÐ·ÐµÐ½ÑŒ_ÐºÐ²Ñ–Ñ‚ÐµÐ½ÑŒ_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÐµÑ€Ð²ÐµÐ½ÑŒ_Ð»Ð¸Ð¿ÐµÐ½ÑŒ_ÑÐµÑ€Ð¿ÐµÐ½ÑŒ_Ð²ÐµÑ€ÐµÑÐµÐ½ÑŒ_Ð¶Ð¾Ð²Ñ‚ÐµÐ½ÑŒ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´_Ð³Ñ€ÑƒÐ´ÐµÐ½ÑŒ'.split(
                '_'
            ),
        },
        monthsShort: 'ÑÑ–Ñ‡_Ð»ÑŽÑ‚_Ð±ÐµÑ€_ÐºÐ²Ñ–Ñ‚_Ñ‚Ñ€Ð°Ð²_Ñ‡ÐµÑ€Ð²_Ð»Ð¸Ð¿_ÑÐµÑ€Ð¿_Ð²ÐµÑ€_Ð¶Ð¾Ð²Ñ‚_Ð»Ð¸ÑÑ‚_Ð³Ñ€ÑƒÐ´'.split(
            '_'
        ),
        weekdays: weekdaysCaseReplace,
        weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD.MM.YYYY',
            LL: 'D MMMM YYYY Ñ€.',
            LLL: 'D MMMM YYYY Ñ€., HH:mm',
            LLLL: 'dddd, D MMMM YYYY Ñ€., HH:mm',
        },
        calendar: {
            sameDay: processHoursFunction('[Ð¡ÑŒÐ¾Ð³Ð¾Ð´Ð½Ñ– '),
            nextDay: processHoursFunction('[Ð—Ð°Ð²Ñ‚Ñ€Ð° '),
            lastDay: processHoursFunction('[Ð’Ñ‡Ð¾Ñ€Ð° '),
            nextWeek: processHoursFunction('[Ð£] dddd ['),
            lastWeek: function () {
                switch (this.day()) {
                    case 0:
                    case 3:
                    case 5:
                    case 6:
                        return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ñ—] dddd [').call(this);
                    case 1:
                    case 2:
                    case 4:
                        return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ð³Ð¾] dddd [').call(this);
                }
            },
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð·Ð° %s',
            past: '%s Ñ‚Ð¾Ð¼Ñƒ',
            s: 'Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° ÑÐµÐºÑƒÐ½Ð´',
            ss: relativeTimeWithPlural$4,
            m: relativeTimeWithPlural$4,
            mm: relativeTimeWithPlural$4,
            h: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
            hh: relativeTimeWithPlural$4,
            d: 'Ð´ÐµÐ½ÑŒ',
            dd: relativeTimeWithPlural$4,
            M: 'Ð¼Ñ–ÑÑÑ†ÑŒ',
            MM: relativeTimeWithPlural$4,
            y: 'Ñ€Ñ–Ðº',
            yy: relativeTimeWithPlural$4,
        },
        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
        meridiemParse: /Ð½Ð¾Ñ‡Ñ–|Ñ€Ð°Ð½ÐºÑƒ|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°/,
        isPM: function (input) {
            return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°)$/.test(input);
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 4) {
                return 'Ð½Ð¾Ñ‡Ñ–';
            } else if (hour < 12) {
                return 'Ñ€Ð°Ð½ÐºÑƒ';
            } else if (hour < 17) {
                return 'Ð´Ð½Ñ';
            } else {
                return 'Ð²ÐµÑ‡Ð¾Ñ€Ð°';
            }
        },
        dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'M':
                case 'd':
                case 'DDD':
                case 'w':
                case 'W':
                    return number + '-Ð¹';
                case 'D':
                    return number + '-Ð³Ð¾';
                default:
                    return number;
            }
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    var months$b = [
            'Ø¬Ù†ÙˆØ±ÛŒ',
            'ÙØ±ÙˆØ±ÛŒ',
            'Ù…Ø§Ø±Ú†',
            'Ø§Ù¾Ø±ÛŒÙ„',
            'Ù…Ø¦ÛŒ',
            'Ø¬ÙˆÙ†',
            'Ø¬ÙˆÙ„Ø§Ø¦ÛŒ',
            'Ø§Ú¯Ø³Øª',
            'Ø³ØªÙ…Ø¨Ø±',
            'Ø§Ú©ØªÙˆØ¨Ø±',
            'Ù†ÙˆÙ…Ø¨Ø±',
            'Ø¯Ø³Ù…Ø¨Ø±',
        ],
        days$2 = ['Ø§ØªÙˆØ§Ø±', 'Ù¾ÛŒØ±', 'Ù…Ù†Ú¯Ù„', 'Ø¨Ø¯Ú¾', 'Ø¬Ù…Ø¹Ø±Ø§Øª', 'Ø¬Ù…Ø¹Û', 'ÛÙØªÛ'];

    hooks.defineLocale('ur', {
        months: months$b,
        monthsShort: months$b,
        weekdays: days$2,
        weekdaysShort: days$2,
        weekdaysMin: days$2,
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
        },
        meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
        isPM: function (input) {
            return 'Ø´Ø§Ù…' === input;
        },
        meridiem: function (hour, minute, isLower) {
            if (hour < 12) {
                return 'ØµØ¨Ø­';
            }
            return 'Ø´Ø§Ù…';
        },
        calendar: {
            sameDay: '[Ø¢Ø¬ Ø¨ÙˆÙ‚Øª] LT',
            nextDay: '[Ú©Ù„ Ø¨ÙˆÙ‚Øª] LT',
            nextWeek: 'dddd [Ø¨ÙˆÙ‚Øª] LT',
            lastDay: '[Ú¯Ø°Ø´ØªÛ Ø±ÙˆØ² Ø¨ÙˆÙ‚Øª] LT',
            lastWeek: '[Ú¯Ø°Ø´ØªÛ] dddd [Ø¨ÙˆÙ‚Øª] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s Ø¨Ø¹Ø¯',
            past: '%s Ù‚Ø¨Ù„',
            s: 'Ú†Ù†Ø¯ Ø³ÛŒÚ©Ù†Úˆ',
            ss: '%d Ø³ÛŒÚ©Ù†Úˆ',
            m: 'Ø§ÛŒÚ© Ù…Ù†Ù¹',
            mm: '%d Ù…Ù†Ù¹',
            h: 'Ø§ÛŒÚ© Ú¯Ú¾Ù†Ù¹Û',
            hh: '%d Ú¯Ú¾Ù†Ù¹Û’',
            d: 'Ø§ÛŒÚ© Ø¯Ù†',
            dd: '%d Ø¯Ù†',
            M: 'Ø§ÛŒÚ© Ù…Ø§Û',
            MM: '%d Ù…Ø§Û',
            y: 'Ø§ÛŒÚ© Ø³Ø§Ù„',
            yy: '%d Ø³Ø§Ù„',
        },
        preparse: function (string) {
            return string.replace(/ØŒ/g, ',');
        },
        postformat: function (string) {
            return string.replace(/,/g, 'ØŒ');
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('uz-latn', {
        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
            '_'
        ),
        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
        weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
            '_'
        ),
        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'D MMMM YYYY, dddd HH:mm',
        },
        calendar: {
            sameDay: '[Bugun soat] LT [da]',
            nextDay: '[Ertaga] LT [da]',
            nextWeek: 'dddd [kuni soat] LT [da]',
            lastDay: '[Kecha soat] LT [da]',
            lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Yaqin %s ichida',
            past: 'Bir necha %s oldin',
            s: 'soniya',
            ss: '%d soniya',
            m: 'bir daqiqa',
            mm: '%d daqiqa',
            h: 'bir soat',
            hh: '%d soat',
            d: 'bir kun',
            dd: '%d kun',
            M: 'bir oy',
            MM: '%d oy',
            y: 'bir yil',
            yy: '%d yil',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 7th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('uz', {
        months: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
            '_'
        ),
        monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
        weekdays: 'Ð¯ÐºÑˆÐ°Ð½Ð±Ð°_Ð”ÑƒÑˆÐ°Ð½Ð±Ð°_Ð¡ÐµÑˆÐ°Ð½Ð±Ð°_Ð§Ð¾Ñ€ÑˆÐ°Ð½Ð±Ð°_ÐŸÐ°Ð¹ÑˆÐ°Ð½Ð±Ð°_Ð–ÑƒÐ¼Ð°_Ð¨Ð°Ð½Ð±Ð°'.split('_'),
        weekdaysShort: 'Ð¯ÐºÑˆ_Ð”ÑƒÑˆ_Ð¡ÐµÑˆ_Ð§Ð¾Ñ€_ÐŸÐ°Ð¹_Ð–ÑƒÐ¼_Ð¨Ð°Ð½'.split('_'),
        weekdaysMin: 'Ð¯Ðº_Ð”Ñƒ_Ð¡Ðµ_Ð§Ð¾_ÐŸÐ°_Ð–Ñƒ_Ð¨Ð°'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'D MMMM YYYY, dddd HH:mm',
        },
        calendar: {
            sameDay: '[Ð‘ÑƒÐ³ÑƒÐ½ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            nextDay: '[Ð­Ñ€Ñ‚Ð°Ð³Ð°] LT [Ð´Ð°]',
            nextWeek: 'dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            lastDay: '[ÐšÐµÑ‡Ð° ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            lastWeek: '[Ð£Ñ‚Ð³Ð°Ð½] dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ð¯ÐºÐ¸Ð½ %s Ð¸Ñ‡Ð¸Ð´Ð°',
            past: 'Ð‘Ð¸Ñ€ Ð½ÐµÑ‡Ð° %s Ð¾Ð»Ð´Ð¸Ð½',
            s: 'Ñ„ÑƒÑ€ÑÐ°Ñ‚',
            ss: '%d Ñ„ÑƒÑ€ÑÐ°Ñ‚',
            m: 'Ð±Ð¸Ñ€ Ð´Ð°ÐºÐ¸ÐºÐ°',
            mm: '%d Ð´Ð°ÐºÐ¸ÐºÐ°',
            h: 'Ð±Ð¸Ñ€ ÑÐ¾Ð°Ñ‚',
            hh: '%d ÑÐ¾Ð°Ñ‚',
            d: 'Ð±Ð¸Ñ€ ÐºÑƒÐ½',
            dd: '%d ÐºÑƒÐ½',
            M: 'Ð±Ð¸Ñ€ Ð¾Ð¹',
            MM: '%d Ð¾Ð¹',
            y: 'Ð±Ð¸Ñ€ Ð¹Ð¸Ð»',
            yy: '%d Ð¹Ð¸Ð»',
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 7, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('vi', {
        months: 'thÃ¡ng 1_thÃ¡ng 2_thÃ¡ng 3_thÃ¡ng 4_thÃ¡ng 5_thÃ¡ng 6_thÃ¡ng 7_thÃ¡ng 8_thÃ¡ng 9_thÃ¡ng 10_thÃ¡ng 11_thÃ¡ng 12'.split(
            '_'
        ),
        monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'chá»§ nháº­t_thá»© hai_thá»© ba_thá»© tÆ°_thá»© nÄƒm_thá»© sÃ¡u_thá»© báº£y'.split(
            '_'
        ),
        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
        weekdaysParseExact: true,
        meridiemParse: /sa|ch/i,
        isPM: function (input) {
            return /^ch$/i.test(input);
        },
        meridiem: function (hours, minutes, isLower) {
            if (hours < 12) {
                return isLower ? 'sa' : 'SA';
            } else {
                return isLower ? 'ch' : 'CH';
            }
        },
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM [nÄƒm] YYYY',
            LLL: 'D MMMM [nÄƒm] YYYY HH:mm',
            LLLL: 'dddd, D MMMM [nÄƒm] YYYY HH:mm',
            l: 'DD/M/YYYY',
            ll: 'D MMM YYYY',
            lll: 'D MMM YYYY HH:mm',
            llll: 'ddd, D MMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[HÃ´m nay lÃºc] LT',
            nextDay: '[NgÃ y mai lÃºc] LT',
            nextWeek: 'dddd [tuáº§n tá»›i lÃºc] LT',
            lastDay: '[HÃ´m qua lÃºc] LT',
            lastWeek: 'dddd [tuáº§n trÆ°á»›c lÃºc] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: '%s tá»›i',
            past: '%s trÆ°á»›c',
            s: 'vÃ i giÃ¢y',
            ss: '%d giÃ¢y',
            m: 'má»™t phÃºt',
            mm: '%d phÃºt',
            h: 'má»™t giá»',
            hh: '%d giá»',
            d: 'má»™t ngÃ y',
            dd: '%d ngÃ y',
            w: 'má»™t tuáº§n',
            ww: '%d tuáº§n',
            M: 'má»™t thÃ¡ng',
            MM: '%d thÃ¡ng',
            y: 'má»™t nÄƒm',
            yy: '%d nÄƒm',
        },
        dayOfMonthOrdinalParse: /\d{1,2}/,
        ordinal: function (number) {
            return number;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('x-pseudo', {
        months: 'J~Ã¡Ã±ÃºÃ¡~rÃ½_F~Ã©brÃº~Ã¡rÃ½_~MÃ¡rc~h_Ãp~rÃ­l_~MÃ¡Ã½_~JÃºÃ±Ã©~_JÃºl~Ã½_ÃÃº~gÃºst~_SÃ©p~tÃ©mb~Ã©r_Ã“~ctÃ³b~Ã©r_Ã‘~Ã³vÃ©m~bÃ©r_~DÃ©cÃ©~mbÃ©r'.split(
            '_'
        ),
        monthsShort: 'J~Ã¡Ã±_~FÃ©b_~MÃ¡r_~Ãpr_~MÃ¡Ã½_~JÃºÃ±_~JÃºl_~ÃÃºg_~SÃ©p_~Ã“ct_~Ã‘Ã³v_~DÃ©c'.split(
            '_'
        ),
        monthsParseExact: true,
        weekdays: 'S~ÃºÃ±dÃ¡~Ã½_MÃ³~Ã±dÃ¡Ã½~_TÃºÃ©~sdÃ¡Ã½~_WÃ©d~Ã±Ã©sd~Ã¡Ã½_T~hÃºrs~dÃ¡Ã½_~FrÃ­d~Ã¡Ã½_S~Ã¡tÃºr~dÃ¡Ã½'.split(
            '_'
        ),
        weekdaysShort: 'S~ÃºÃ±_~MÃ³Ã±_~TÃºÃ©_~WÃ©d_~ThÃº_~FrÃ­_~SÃ¡t'.split('_'),
        weekdaysMin: 'S~Ãº_MÃ³~_TÃº_~WÃ©_T~h_Fr~_SÃ¡'.split('_'),
        weekdaysParseExact: true,
        longDateFormat: {
            LT: 'HH:mm',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY HH:mm',
            LLLL: 'dddd, D MMMM YYYY HH:mm',
        },
        calendar: {
            sameDay: '[T~Ã³dÃ¡~Ã½ Ã¡t] LT',
            nextDay: '[T~Ã³mÃ³~rrÃ³~w Ã¡t] LT',
            nextWeek: 'dddd [Ã¡t] LT',
            lastDay: '[Ã~Ã©st~Ã©rdÃ¡~Ã½ Ã¡t] LT',
            lastWeek: '[L~Ã¡st] dddd [Ã¡t] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'Ã­~Ã± %s',
            past: '%s Ã¡~gÃ³',
            s: 'Ã¡ ~fÃ©w ~sÃ©cÃ³~Ã±ds',
            ss: '%d s~Ã©cÃ³Ã±~ds',
            m: 'Ã¡ ~mÃ­Ã±~ÃºtÃ©',
            mm: '%d m~Ã­Ã±Ãº~tÃ©s',
            h: 'Ã¡~Ã± hÃ³~Ãºr',
            hh: '%d h~Ã³Ãºrs',
            d: 'Ã¡ ~dÃ¡Ã½',
            dd: '%d d~Ã¡Ã½s',
            M: 'Ã¡ ~mÃ³Ã±~th',
            MM: '%d m~Ã³Ã±t~hs',
            y: 'Ã¡ ~Ã½Ã©Ã¡r',
            yy: '%d Ã½~Ã©Ã¡rs',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    ~~((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('yo', {
        months: 'Sáº¹Ìráº¹Ì_EÌ€reÌ€leÌ€_áº¸ráº¹Ì€naÌ€_IÌ€gbeÌ_EÌ€bibi_OÌ€kuÌ€du_Agáº¹mo_OÌ€guÌn_Owewe_á»ŒÌ€waÌ€raÌ€_BeÌluÌ_á»ŒÌ€páº¹Ì€Ì€'.split(
            '_'
        ),
        monthsShort: 'Sáº¹Ìr_EÌ€rl_áº¸rn_IÌ€gb_EÌ€bi_OÌ€kuÌ€_Agáº¹_OÌ€guÌ_Owe_á»ŒÌ€waÌ€_BeÌl_á»ŒÌ€páº¹Ì€Ì€'.split('_'),
        weekdays: 'AÌ€iÌ€kuÌ_AjeÌ_IÌ€sáº¹Ìgun_á»Œjá»ÌruÌ_á»Œjá»Ìbá»_áº¸tiÌ€_AÌ€baÌmáº¹Ìta'.split('_'),
        weekdaysShort: 'AÌ€iÌ€k_AjeÌ_IÌ€sáº¹Ì_á»Œjr_á»Œjb_áº¸tiÌ€_AÌ€baÌ'.split('_'),
        weekdaysMin: 'AÌ€iÌ€_Aj_IÌ€s_á»Œr_á»Œb_áº¸t_AÌ€b'.split('_'),
        longDateFormat: {
            LT: 'h:mm A',
            LTS: 'h:mm:ss A',
            L: 'DD/MM/YYYY',
            LL: 'D MMMM YYYY',
            LLL: 'D MMMM YYYY h:mm A',
            LLLL: 'dddd, D MMMM YYYY h:mm A',
        },
        calendar: {
            sameDay: '[OÌ€niÌ€ ni] LT',
            nextDay: '[á»ŒÌ€la ni] LT',
            nextWeek: "dddd [á»Œsáº¹Ì€ toÌn'bá»] [ni] LT",
            lastDay: '[AÌ€na ni] LT',
            lastWeek: 'dddd [á»Œsáº¹Ì€ toÌlá»Ì] [ni] LT',
            sameElse: 'L',
        },
        relativeTime: {
            future: 'niÌ %s',
            past: '%s ká»jaÌ',
            s: 'iÌ€sáº¹juÌ aayaÌ die',
            ss: 'aayaÌ %d',
            m: 'iÌ€sáº¹juÌ kan',
            mm: 'iÌ€sáº¹juÌ %d',
            h: 'waÌkati kan',
            hh: 'waÌkati %d',
            d: 'á»já»Ì kan',
            dd: 'á»já»Ì %d',
            M: 'osuÌ€ kan',
            MM: 'osuÌ€ %d',
            y: 'á»duÌn kan',
            yy: 'á»duÌn %d',
        },
        dayOfMonthOrdinalParse: /á»já»Ì\s\d{1,2}/,
        ordinal: 'á»já»Ì %d',
        week: {
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('zh-cn', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'å‘¨æ—¥_å‘¨ä¸€_å‘¨äºŒ_å‘¨ä¸‰_å‘¨å››_å‘¨äº”_å‘¨å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥Ahç‚¹mmåˆ†',
            LLLL: 'YYYYå¹´MæœˆDæ—¥ddddAhç‚¹mmåˆ†',
            l: 'YYYY/M/D',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            } else {
                // 'ä¸­åˆ'
                return hour >= 11 ? hour : hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1130) {
                return 'ä¸Šåˆ';
            } else if (hm < 1230) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©]LT',
            nextDay: '[æ˜Žå¤©]LT',
            nextWeek: function (now) {
                if (now.week() !== this.week()) {
                    return '[ä¸‹]dddLT';
                } else {
                    return '[æœ¬]dddLT';
                }
            },
            lastDay: '[æ˜¨å¤©]LT',
            lastWeek: function (now) {
                if (this.week() !== now.week()) {
                    return '[ä¸Š]dddLT';
                } else {
                    return '[æœ¬]dddLT';
                }
            },
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|å‘¨)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'å‘¨';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%såŽ',
            past: '%så‰',
            s: 'å‡ ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é’Ÿ',
            mm: '%d åˆ†é’Ÿ',
            h: '1 å°æ—¶',
            hh: '%d å°æ—¶',
            d: '1 å¤©',
            dd: '%d å¤©',
            w: '1 å‘¨',
            ww: '%d å‘¨',
            M: '1 ä¸ªæœˆ',
            MM: '%d ä¸ªæœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
        week: {
            // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
            dow: 1, // Monday is the first day of the week.
            doy: 4, // The week that contains Jan 4th is the first week of the year.
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('zh-hk', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
            l: 'YYYY/M/D',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸­åˆ') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1200) {
                return 'ä¸Šåˆ';
            } else if (hm === 1200) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©]LT',
            nextDay: '[æ˜Žå¤©]LT',
            nextWeek: '[ä¸‹]ddddLT',
            lastDay: '[æ˜¨å¤©]LT',
            lastWeek: '[ä¸Š]ddddLT',
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'é€±';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så¾Œ',
            past: '%så‰',
            s: 'å¹¾ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é˜',
            mm: '%d åˆ†é˜',
            h: '1 å°æ™‚',
            hh: '%d å°æ™‚',
            d: '1 å¤©',
            dd: '%d å¤©',
            M: '1 å€‹æœˆ',
            MM: '%d å€‹æœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('zh-mo', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'DD/MM/YYYY',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
            l: 'D/M/YYYY',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸­åˆ') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1130) {
                return 'ä¸Šåˆ';
            } else if (hm < 1230) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©] LT',
            nextDay: '[æ˜Žå¤©] LT',
            nextWeek: '[ä¸‹]dddd LT',
            lastDay: '[æ˜¨å¤©] LT',
            lastWeek: '[ä¸Š]dddd LT',
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'é€±';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så…§',
            past: '%så‰',
            s: 'å¹¾ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é˜',
            mm: '%d åˆ†é˜',
            h: '1 å°æ™‚',
            hh: '%d å°æ™‚',
            d: '1 å¤©',
            dd: '%d å¤©',
            M: '1 å€‹æœˆ',
            MM: '%d å€‹æœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
    });

    //! moment.js locale configuration

    hooks.defineLocale('zh-tw', {
        months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
            '_'
        ),
        monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
            '_'
        ),
        weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
        weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
        weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
        longDateFormat: {
            LT: 'HH:mm',
            LTS: 'HH:mm:ss',
            L: 'YYYY/MM/DD',
            LL: 'YYYYå¹´MæœˆDæ—¥',
            LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
            l: 'YYYY/M/D',
            ll: 'YYYYå¹´MæœˆDæ—¥',
            lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
            llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        },
        meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
        meridiemHour: function (hour, meridiem) {
            if (hour === 12) {
                hour = 0;
            }
            if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
                return hour;
            } else if (meridiem === 'ä¸­åˆ') {
                return hour >= 11 ? hour : hour + 12;
            } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
                return hour + 12;
            }
        },
        meridiem: function (hour, minute, isLower) {
            var hm = hour * 100 + minute;
            if (hm < 600) {
                return 'å‡Œæ™¨';
            } else if (hm < 900) {
                return 'æ—©ä¸Š';
            } else if (hm < 1130) {
                return 'ä¸Šåˆ';
            } else if (hm < 1230) {
                return 'ä¸­åˆ';
            } else if (hm < 1800) {
                return 'ä¸‹åˆ';
            } else {
                return 'æ™šä¸Š';
            }
        },
        calendar: {
            sameDay: '[ä»Šå¤©] LT',
            nextDay: '[æ˜Žå¤©] LT',
            nextWeek: '[ä¸‹]dddd LT',
            lastDay: '[æ˜¨å¤©] LT',
            lastWeek: '[ä¸Š]dddd LT',
            sameElse: 'L',
        },
        dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
        ordinal: function (number, period) {
            switch (period) {
                case 'd':
                case 'D':
                case 'DDD':
                    return number + 'æ—¥';
                case 'M':
                    return number + 'æœˆ';
                case 'w':
                case 'W':
                    return number + 'é€±';
                default:
                    return number;
            }
        },
        relativeTime: {
            future: '%så¾Œ',
            past: '%så‰',
            s: 'å¹¾ç§’',
            ss: '%d ç§’',
            m: '1 åˆ†é˜',
            mm: '%d åˆ†é˜',
            h: '1 å°æ™‚',
            hh: '%d å°æ™‚',
            d: '1 å¤©',
            dd: '%d å¤©',
            M: '1 å€‹æœˆ',
            MM: '%d å€‹æœˆ',
            y: '1 å¹´',
            yy: '%d å¹´',
        },
    });

    hooks.locale('en');

    return hooks;

})));
!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.moment=a()}(this,function(){"use strict";var e,n;function M(){return e.apply(null,arguments)}function i(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function _(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function h(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function o(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var a in e)if(h(e,a))return;return 1}function r(e){return void 0===e}function m(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function u(e,a){for(var t=[],s=0;s<e.length;++s)t.push(a(e[s],s));return t}function l(e,a){for(var t in a)h(a,t)&&(e[t]=a[t]);return h(a,"toString")&&(e.toString=a.toString),h(a,"valueOf")&&(e.valueOf=a.valueOf),e}function c(e,a,t,s){return Sa(e,a,t,s,!0).utc()}function L(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function Y(e){if(null==e._isValid){var a=L(e),t=n.call(a.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&a.overflow<0&&!a.empty&&!a.invalidEra&&!a.invalidMonth&&!a.invalidWeekday&&!a.weekdayMismatch&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&t);if(e._strict&&(s=s&&0===a.charsLeftOver&&0===a.unusedTokens.length&&void 0===a.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function y(e){var a=c(NaN);return null!=e?l(L(a),e):L(a).userInvalidated=!0,a}n=Array.prototype.some?Array.prototype.some:function(e){for(var a=Object(this),t=a.length>>>0,s=0;s<t;s++)if(s in a&&e.call(this,a[s],s,a))return!0;return!1};var f=M.momentProperties=[],a=!1;function p(e,a){var t,s,n;if(r(a._isAMomentObject)||(e._isAMomentObject=a._isAMomentObject),r(a._i)||(e._i=a._i),r(a._f)||(e._f=a._f),r(a._l)||(e._l=a._l),r(a._strict)||(e._strict=a._strict),r(a._tzm)||(e._tzm=a._tzm),r(a._isUTC)||(e._isUTC=a._isUTC),r(a._offset)||(e._offset=a._offset),r(a._pf)||(e._pf=L(a)),r(a._locale)||(e._locale=a._locale),0<f.length)for(t=0;t<f.length;t++)r(n=a[s=f[t]])||(e[s]=n);return e}function k(e){p(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===a&&(a=!0,M.updateOffset(this),a=!1)}function D(e){return e instanceof k||null!=e&&null!=e._isAMomentObject}function T(e){!1===M.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function t(n,r){var d=!0;return l(function(){if(null!=M.deprecationHandler&&M.deprecationHandler(null,n),d){for(var e,a,t=[],s=0;s<arguments.length;s++){if(e="","object"==typeof arguments[s]){for(a in e+="\n["+s+"] ",arguments[0])h(arguments[0],a)&&(e+=a+": "+arguments[0][a]+", ");e=e.slice(0,-2)}else e=arguments[s];t.push(e)}T(n+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),d=!1}return r.apply(this,arguments)},r)}var s,g={};function w(e,a){null!=M.deprecationHandler&&M.deprecationHandler(e,a),g[e]||(T(a),g[e]=!0)}function v(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function b(e,a){var t,s=l({},e);for(t in a)h(a,t)&&(_(e[t])&&_(a[t])?(s[t]={},l(s[t],e[t]),l(s[t],a[t])):null!=a[t]?s[t]=a[t]:delete s[t]);for(t in e)h(e,t)&&!h(a,t)&&_(e[t])&&(s[t]=l({},s[t]));return s}function S(e){null!=e&&this.set(e)}M.suppressDeprecationWarnings=!1,M.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var a,t=[];for(a in e)h(e,a)&&t.push(a);return t};function H(e,a,t){var s=""+Math.abs(e),n=a-s.length;return(0<=e?t?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+s}var j=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,x=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,P={},O={};function W(e,a,t,s){var n="string"==typeof s?function(){return this[s]()}:s;e&&(O[e]=n),a&&(O[a[0]]=function(){return H(n.apply(this,arguments),a[1],a[2])}),t&&(O[t]=function(){return this.localeData().ordinal(n.apply(this,arguments),e)})}function A(e,a){return e.isValid()?(a=E(a,e.localeData()),P[a]=P[a]||function(s){for(var e,n=s.match(j),a=0,r=n.length;a<r;a++)O[n[a]]?n[a]=O[n[a]]:n[a]=(e=n[a]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var a="",t=0;t<r;t++)a+=v(n[t])?n[t].call(e,s):n[t];return a}}(a),P[a](e)):e.localeData().invalidDate()}function E(e,a){var t=5;function s(e){return a.longDateFormat(e)||e}for(x.lastIndex=0;0<=t&&x.test(e);)e=e.replace(x,s),x.lastIndex=0,--t;return e}var F={};function z(e,a){var t=e.toLowerCase();F[t]=F[t+"s"]=F[a]=e}function N(e){return"string"==typeof e?F[e]||F[e.toLowerCase()]:void 0}function J(e){var a,t,s={};for(t in e)h(e,t)&&(a=N(t))&&(s[a]=e[t]);return s}var R={};function C(e,a){R[e]=a}function I(e){return e%4==0&&e%100!=0||e%400==0}function U(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function G(e){var a=+e,t=0;return 0!=a&&isFinite(a)&&(t=U(a)),t}function V(a,t){return function(e){return null!=e?(K(this,a,e),M.updateOffset(this,t),this):B(this,a)}}function B(e,a){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+a]():NaN}function K(e,a,t){e.isValid()&&!isNaN(t)&&("FullYear"===a&&I(e.year())&&1===e.month()&&29===e.date()?(t=G(t),e._d["set"+(e._isUTC?"UTC":"")+a](t,e.month(),Se(t,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+a](t))}var q,Z=/\d/,$=/\d\d/,Q=/\d{3}/,X=/\d{4}/,ee=/[+-]?\d{6}/,ae=/\d\d?/,te=/\d\d\d\d?/,se=/\d\d\d\d\d\d?/,ne=/\d{1,3}/,re=/\d{1,4}/,de=/[+-]?\d{1,6}/,ie=/\d+/,_e=/[+-]?\d+/,oe=/Z|[+-]\d\d:?\d\d/gi,me=/Z|[+-]\d\d(?::?\d\d)?/gi,ue=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function le(e,t,s){q[e]=v(t)?t:function(e,a){return e&&s?s:t}}function Me(e,a){return h(q,e)?q[e](a._strict,a._locale):new RegExp(he(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,a,t,s,n){return a||t||s||n})))}function he(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}q={};var ce={};function Le(e,t){var a,s=t;for("string"==typeof e&&(e=[e]),m(t)&&(s=function(e,a){a[t]=G(e)}),a=0;a<e.length;a++)ce[e[a]]=s}function Ye(e,n){Le(e,function(e,a,t,s){t._w=t._w||{},n(e,t._w,t,s)})}var ye,fe=0,pe=1,ke=2,De=3,Te=4,ge=5,we=6,ve=7,be=8;function Se(e,a){if(isNaN(e)||isNaN(a))return NaN;var t,s=(a%(t=12)+t)%t;return e+=(a-s)/12,1==s?I(e)?29:28:31-s%7%2}ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){for(var a=0;a<this.length;++a)if(this[a]===e)return a;return-1},W("M",["MM",2],"Mo",function(){return this.month()+1}),W("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),W("MMMM",0,0,function(e){return this.localeData().months(this,e)}),z("month","M"),C("month",8),le("M",ae),le("MM",ae,$),le("MMM",function(e,a){return a.monthsShortRegex(e)}),le("MMMM",function(e,a){return a.monthsRegex(e)}),Le(["M","MM"],function(e,a){a[pe]=G(e)-1}),Le(["MMM","MMMM"],function(e,a,t,s){var n=t._locale.monthsParse(e,s,t._strict);null!=n?a[pe]=n:L(t).invalidMonth=e});var He="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),je="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),xe=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Pe=ue,Oe=ue;function We(e,a){var t;if(!e.isValid())return e;if("string"==typeof a)if(/^\d+$/.test(a))a=G(a);else if(!m(a=e.localeData().monthsParse(a)))return e;return t=Math.min(e.date(),Se(e.year(),a)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](a,t),e}function Ae(e){return null!=e?(We(this,e),M.updateOffset(this,!0),this):B(this,"Month")}function Ee(){function e(e,a){return a.length-e.length}for(var a,t=[],s=[],n=[],r=0;r<12;r++)a=c([2e3,r]),t.push(this.monthsShort(a,"")),s.push(this.months(a,"")),n.push(this.months(a,"")),n.push(this.monthsShort(a,""));for(t.sort(e),s.sort(e),n.sort(e),r=0;r<12;r++)t[r]=he(t[r]),s[r]=he(s[r]);for(r=0;r<24;r++)n[r]=he(n[r]);this._monthsRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+t.join("|")+")","i")}function Fe(e){return I(e)?366:365}W("Y",0,0,function(){var e=this.year();return e<=9999?H(e,4):"+"+e}),W(0,["YY",2],0,function(){return this.year()%100}),W(0,["YYYY",4],0,"year"),W(0,["YYYYY",5],0,"year"),W(0,["YYYYYY",6,!0],0,"year"),z("year","y"),C("year",1),le("Y",_e),le("YY",ae,$),le("YYYY",re,X),le("YYYYY",de,ee),le("YYYYYY",de,ee),Le(["YYYYY","YYYYYY"],fe),Le("YYYY",function(e,a){a[fe]=2===e.length?M.parseTwoDigitYear(e):G(e)}),Le("YY",function(e,a){a[fe]=M.parseTwoDigitYear(e)}),Le("Y",function(e,a){a[fe]=parseInt(e,10)}),M.parseTwoDigitYear=function(e){return G(e)+(68<G(e)?1900:2e3)};var ze=V("FullYear",!0);function Ne(e){var a,t;return e<100&&0<=e?((t=Array.prototype.slice.call(arguments))[0]=e+400,a=new Date(Date.UTC.apply(null,t)),isFinite(a.getUTCFullYear())&&a.setUTCFullYear(e)):a=new Date(Date.UTC.apply(null,arguments)),a}function Je(e,a,t){var s=7+a-t;return s-(7+Ne(e,0,s).getUTCDay()-a)%7-1}function Re(e,a,t,s,n){var r,d=1+7*(a-1)+(7+t-s)%7+Je(e,s,n),i=d<=0?Fe(r=e-1)+d:d>Fe(e)?(r=e+1,d-Fe(e)):(r=e,d);return{year:r,dayOfYear:i}}function Ce(e,a,t){var s,n,r=Je(e.year(),a,t),d=Math.floor((e.dayOfYear()-r-1)/7)+1;return d<1?s=d+Ie(n=e.year()-1,a,t):d>Ie(e.year(),a,t)?(s=d-Ie(e.year(),a,t),n=e.year()+1):(n=e.year(),s=d),{week:s,year:n}}function Ie(e,a,t){var s=Je(e,a,t),n=Je(e+1,a,t);return(Fe(e)-s+n)/7}W("w",["ww",2],"wo","week"),W("W",["WW",2],"Wo","isoWeek"),z("week","w"),z("isoWeek","W"),C("week",5),C("isoWeek",5),le("w",ae),le("ww",ae,$),le("W",ae),le("WW",ae,$),Ye(["w","ww","W","WW"],function(e,a,t,s){a[s.substr(0,1)]=G(e)});function Ue(e,a){return e.slice(a,7).concat(e.slice(0,a))}W("d",0,"do","day"),W("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),W("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),W("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),W("e",0,0,"weekday"),W("E",0,0,"isoWeekday"),z("day","d"),z("weekday","e"),z("isoWeekday","E"),C("day",11),C("weekday",11),C("isoWeekday",11),le("d",ae),le("e",ae),le("E",ae),le("dd",function(e,a){return a.weekdaysMinRegex(e)}),le("ddd",function(e,a){return a.weekdaysShortRegex(e)}),le("dddd",function(e,a){return a.weekdaysRegex(e)}),Ye(["dd","ddd","dddd"],function(e,a,t,s){var n=t._locale.weekdaysParse(e,s,t._strict);null!=n?a.d=n:L(t).invalidWeekday=e}),Ye(["d","e","E"],function(e,a,t,s){a[s]=G(e)});var Ge="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ve="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Be="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=ue,qe=ue,Ze=ue;function $e(){function e(e,a){return a.length-e.length}for(var a,t,s,n,r=[],d=[],i=[],_=[],o=0;o<7;o++)a=c([2e3,1]).day(o),t=he(this.weekdaysMin(a,"")),s=he(this.weekdaysShort(a,"")),n=he(this.weekdays(a,"")),r.push(t),d.push(s),i.push(n),_.push(t),_.push(s),_.push(n);r.sort(e),d.sort(e),i.sort(e),_.sort(e),this._weekdaysRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,a){W(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function ea(e,a){return a._meridiemParse}W("H",["HH",2],0,"hour"),W("h",["hh",2],0,Qe),W("k",["kk",2],0,function(){return this.hours()||24}),W("hmm",0,0,function(){return""+Qe.apply(this)+H(this.minutes(),2)}),W("hmmss",0,0,function(){return""+Qe.apply(this)+H(this.minutes(),2)+H(this.seconds(),2)}),W("Hmm",0,0,function(){return""+this.hours()+H(this.minutes(),2)}),W("Hmmss",0,0,function(){return""+this.hours()+H(this.minutes(),2)+H(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),z("hour","h"),C("hour",13),le("a",ea),le("A",ea),le("H",ae),le("h",ae),le("k",ae),le("HH",ae,$),le("hh",ae,$),le("kk",ae,$),le("hmm",te),le("hmmss",se),le("Hmm",te),le("Hmmss",se),Le(["H","HH"],De),Le(["k","kk"],function(e,a,t){var s=G(e);a[De]=24===s?0:s}),Le(["a","A"],function(e,a,t){t._isPm=t._locale.isPM(e),t._meridiem=e}),Le(["h","hh"],function(e,a,t){a[De]=G(e),L(t).bigHour=!0}),Le("hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s)),L(t).bigHour=!0}),Le("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n)),L(t).bigHour=!0}),Le("Hmm",function(e,a,t){var s=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s))}),Le("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[De]=G(e.substr(0,s)),a[Te]=G(e.substr(s,2)),a[ge]=G(e.substr(n))});var aa=V("Hours",!0);var ta,sa={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:He,monthsShort:je,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Be,weekdaysShort:Ve,meridiemParse:/[ap]\.?m?\.?/i},na={},ra={};function da(e){return e?e.toLowerCase().replace("_","-"):e}function ia(e){for(var a,t,s,n,r=0;r<e.length;){for(a=(n=da(e[r]).split("-")).length,t=(t=da(e[r+1]))?t.split("-"):null;0<a;){if(s=_a(n.slice(0,a).join("-")))return s;if(t&&t.length>=a&&function(e,a){for(var t=Math.min(e.length,a.length),s=0;s<t;s+=1)if(e[s]!==a[s])return s;return t}(n,t)>=a-1)break;a--}r++}return ta}function _a(a){var e;if(void 0===na[a]&&"undefined"!=typeof module&&module&&module.exports)try{e=ta._abbr,require("./locale/"+a),oa(e)}catch(e){na[a]=null}return na[a]}function oa(e,a){var t;return e&&((t=r(a)?ua(e):ma(e,a))?ta=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ta._abbr}function ma(e,a){if(null===a)return delete na[e],null;var t,s=sa;if(a.abbr=e,null!=na[e])w("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=na[e]._config;else if(null!=a.parentLocale)if(null!=na[a.parentLocale])s=na[a.parentLocale]._config;else{if(null==(t=_a(a.parentLocale)))return ra[a.parentLocale]||(ra[a.parentLocale]=[]),ra[a.parentLocale].push({name:e,config:a}),null;s=t._config}return na[e]=new S(b(s,a)),ra[e]&&ra[e].forEach(function(e){ma(e.name,e.config)}),oa(e),na[e]}function ua(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return ta;if(!i(e)){if(a=_a(e))return a;e=[e]}return ia(e)}function la(e){var a,t=e._a;return t&&-2===L(e).overflow&&(a=t[pe]<0||11<t[pe]?pe:t[ke]<1||t[ke]>Se(t[fe],t[pe])?ke:t[De]<0||24<t[De]||24===t[De]&&(0!==t[Te]||0!==t[ge]||0!==t[we])?De:t[Te]<0||59<t[Te]?Te:t[ge]<0||59<t[ge]?ge:t[we]<0||999<t[we]?we:-1,L(e)._overflowDayOfYear&&(a<fe||ke<a)&&(a=ke),L(e)._overflowWeeks&&-1===a&&(a=ve),L(e)._overflowWeekday&&-1===a&&(a=be),L(e).overflow=a),e}var Ma=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ha=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ca=/Z|[+-]\d\d(?::?\d\d)?/,La=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Ya=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],ya=/^\/?Date\((-?\d+)/i,fa=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,pa={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function ka(e){var a,t,s,n,r,d,i=e._i,_=Ma.exec(i)||ha.exec(i);if(_){for(L(e).iso=!0,a=0,t=La.length;a<t;a++)if(La[a][1].exec(_[1])){n=La[a][0],s=!1!==La[a][2];break}if(null==n)return void(e._isValid=!1);if(_[3]){for(a=0,t=Ya.length;a<t;a++)if(Ya[a][1].exec(_[3])){r=(_[2]||" ")+Ya[a][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(_[4]){if(!ca.exec(_[4]))return void(e._isValid=!1);d="Z"}e._f=n+(r||"")+(d||""),va(e)}else e._isValid=!1}function Da(e,a,t,s,n,r){var d=[function(e){var a=parseInt(e,10);{if(a<=49)return 2e3+a;if(a<=999)return 1900+a}return a}(e),je.indexOf(a),parseInt(t,10),parseInt(s,10),parseInt(n,10)];return r&&d.push(parseInt(r,10)),d}function Ta(e){var a,t,s,n,r=fa.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(r){if(a=Da(r[4],r[3],r[2],r[5],r[6],r[7]),t=r[1],s=a,n=e,t&&Ve.indexOf(t)!==new Date(s[0],s[1],s[2]).getDay()&&(L(n).weekdayMismatch=!0,!void(n._isValid=!1)))return;e._a=a,e._tzm=function(e,a,t){if(e)return pa[e];if(a)return 0;var s=parseInt(t,10),n=s%100;return 60*((s-n)/100)+n}(r[8],r[9],r[10]),e._d=Ne.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),L(e).rfc2822=!0}else e._isValid=!1}function ga(e,a,t){return null!=e?e:null!=a?a:t}function wa(e){var a,t,s,n,r,d,i,_=[];if(!e._d){for(d=e,i=new Date(M.now()),s=d._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()],e._w&&null==e._a[ke]&&null==e._a[pe]&&function(e){var a,t,s,n,r,d,i,_,o;null!=(a=e._w).GG||null!=a.W||null!=a.E?(r=1,d=4,t=ga(a.GG,e._a[fe],Ce(Ha(),1,4).year),s=ga(a.W,1),((n=ga(a.E,1))<1||7<n)&&(_=!0)):(r=e._locale._week.dow,d=e._locale._week.doy,o=Ce(Ha(),r,d),t=ga(a.gg,e._a[fe],o.year),s=ga(a.w,o.week),null!=a.d?((n=a.d)<0||6<n)&&(_=!0):null!=a.e?(n=a.e+r,(a.e<0||6<a.e)&&(_=!0)):n=r);s<1||s>Ie(t,r,d)?L(e)._overflowWeeks=!0:null!=_?L(e)._overflowWeekday=!0:(i=Re(t,s,n,r,d),e._a[fe]=i.year,e._dayOfYear=i.dayOfYear)}(e),null!=e._dayOfYear&&(r=ga(e._a[fe],s[fe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(L(e)._overflowDayOfYear=!0),t=Ne(r,0,e._dayOfYear),e._a[pe]=t.getUTCMonth(),e._a[ke]=t.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=_[a]=s[a];for(;a<7;a++)e._a[a]=_[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[De]&&0===e._a[Te]&&0===e._a[ge]&&0===e._a[we]&&(e._nextDay=!0,e._a[De]=0),e._d=(e._useUTC?Ne:function(e,a,t,s,n,r,d){var i;return e<100&&0<=e?(i=new Date(e+400,a,t,s,n,r,d),isFinite(i.getFullYear())&&i.setFullYear(e)):i=new Date(e,a,t,s,n,r,d),i}).apply(null,_),n=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[De]=24),e._w&&void 0!==e._w.d&&e._w.d!==n&&(L(e).weekdayMismatch=!0)}}function va(e){if(e._f!==M.ISO_8601)if(e._f!==M.RFC_2822){e._a=[],L(e).empty=!0;for(var a,t,s,n,r,d,i,_=""+e._i,o=_.length,m=0,u=E(e._f,e._locale).match(j)||[],l=0;l<u.length;l++)t=u[l],(a=(_.match(Me(t,e))||[])[0])&&(0<(s=_.substr(0,_.indexOf(a))).length&&L(e).unusedInput.push(s),_=_.slice(_.indexOf(a)+a.length),m+=a.length),O[t]?(a?L(e).empty=!1:L(e).unusedTokens.push(t),r=t,i=e,null!=(d=a)&&h(ce,r)&&ce[r](d,i._a,i,r)):e._strict&&!a&&L(e).unusedTokens.push(t);L(e).charsLeftOver=o-m,0<_.length&&L(e).unusedInput.push(_),e._a[De]<=12&&!0===L(e).bigHour&&0<e._a[De]&&(L(e).bigHour=void 0),L(e).parsedDateParts=e._a.slice(0),L(e).meridiem=e._meridiem,e._a[De]=function(e,a,t){var s;if(null==t)return a;return null!=e.meridiemHour?e.meridiemHour(a,t):(null!=e.isPM&&((s=e.isPM(t))&&a<12&&(a+=12),s||12!==a||(a=0)),a)}(e._locale,e._a[De],e._meridiem),null!==(n=L(e).era)&&(e._a[fe]=e._locale.erasConvertYear(n,e._a[fe])),wa(e),la(e)}else Ta(e);else ka(e)}function ba(e){var a,t,s=e._i,n=e._f;return e._locale=e._locale||ua(e._l),null===s||void 0===n&&""===s?y({nullInput:!0}):("string"==typeof s&&(e._i=s=e._locale.preparse(s)),D(s)?new k(la(s)):(d(s)?e._d=s:i(n)?function(e){var a,t,s,n,r,d,i=!1;if(0===e._f.length)return L(e).invalidFormat=!0,e._d=new Date(NaN);for(n=0;n<e._f.length;n++)r=0,d=!1,a=p({},e),null!=e._useUTC&&(a._useUTC=e._useUTC),a._f=e._f[n],va(a),Y(a)&&(d=!0),r+=L(a).charsLeftOver,r+=10*L(a).unusedTokens.length,L(a).score=r,i?r<s&&(s=r,t=a):(null==s||r<s||d)&&(s=r,t=a,d&&(i=!0));l(e,t||a)}(e):n?va(e):r(t=(a=e)._i)?a._d=new Date(M.now()):d(t)?a._d=new Date(t.valueOf()):"string"==typeof t?function(e){var a=ya.exec(e._i);null===a?(ka(e),!1===e._isValid&&(delete e._isValid,Ta(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:M.createFromInputFallback(e)))):e._d=new Date(+a[1])}(a):i(t)?(a._a=u(t.slice(0),function(e){return parseInt(e,10)}),wa(a)):_(t)?function(e){var a,t;e._d||(t=void 0===(a=J(e._i)).day?a.date:a.day,e._a=u([a.year,a.month,t,a.hour,a.minute,a.second,a.millisecond],function(e){return e&&parseInt(e,10)}),wa(e))}(a):m(t)?a._d=new Date(t):M.createFromInputFallback(a),Y(e)||(e._d=null),e))}function Sa(e,a,t,s,n){var r,d={};return!0!==a&&!1!==a||(s=a,a=void 0),!0!==t&&!1!==t||(s=t,t=void 0),(_(e)&&o(e)||i(e)&&0===e.length)&&(e=void 0),d._isAMomentObject=!0,d._useUTC=d._isUTC=n,d._l=t,d._i=e,d._f=a,d._strict=s,(r=new k(la(ba(d))))._nextDay&&(r.add(1,"d"),r._nextDay=void 0),r}function Ha(e,a,t,s){return Sa(e,a,t,s,!1)}M.createFromInputFallback=t("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),M.ISO_8601=function(){},M.RFC_2822=function(){};var ja=t("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ha.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:y()}),xa=t("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Ha.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:y()});function Pa(e,a){var t,s;if(1===a.length&&i(a[0])&&(a=a[0]),!a.length)return Ha();for(t=a[0],s=1;s<a.length;++s)a[s].isValid()&&!a[s][e](t)||(t=a[s]);return t}var Oa=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Wa(e){var a=J(e),t=a.year||0,s=a.quarter||0,n=a.month||0,r=a.week||a.isoWeek||0,d=a.day||0,i=a.hour||0,_=a.minute||0,o=a.second||0,m=a.millisecond||0;this._isValid=function(e){var a,t,s=!1;for(a in e)if(h(e,a)&&(-1===ye.call(Oa,a)||null!=e[a]&&isNaN(e[a])))return!1;for(t=0;t<Oa.length;++t)if(e[Oa[t]]){if(s)return!1;parseFloat(e[Oa[t]])!==G(e[Oa[t]])&&(s=!0)}return!0}(a),this._milliseconds=+m+1e3*o+6e4*_+1e3*i*60*60,this._days=+d+7*r,this._months=+n+3*s+12*t,this._data={},this._locale=ua(),this._bubble()}function Aa(e){return e instanceof Wa}function Ea(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Fa(e,t){W(e,0,0,function(){var e=this.utcOffset(),a="+";return e<0&&(e=-e,a="-"),a+H(~~(e/60),2)+t+H(~~e%60,2)})}Fa("Z",":"),Fa("ZZ",""),le("Z",me),le("ZZ",me),Le(["Z","ZZ"],function(e,a,t){t._useUTC=!0,t._tzm=Na(me,e)});var za=/([\+\-]|\d\d)/gi;function Na(e,a){var t,s,n=(a||"").match(e);return null===n?null:0===(s=60*(t=((n[n.length-1]||[])+"").match(za)||["-",0,0])[1]+G(t[2]))?0:"+"===t[0]?s:-s}function Ja(e,a){var t,s;return a._isUTC?(t=a.clone(),s=(D(e)||d(e)?e.valueOf():Ha(e).valueOf())-t.valueOf(),t._d.setTime(t._d.valueOf()+s),M.updateOffset(t,!1),t):Ha(e).local()}function Ra(e){return-Math.round(e._d.getTimezoneOffset())}function Ca(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}M.updateOffset=function(){};var Ia=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Ua=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ga(e,a){var t,s,n,r=e,d=null;return Aa(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:m(e)||!isNaN(+e)?(r={},a?r[a]=+e:r.milliseconds=+e):(d=Ia.exec(e))?(t="-"===d[1]?-1:1,r={y:0,d:G(d[ke])*t,h:G(d[De])*t,m:G(d[Te])*t,s:G(d[ge])*t,ms:G(Ea(1e3*d[we]))*t}):(d=Ua.exec(e))?(t="-"===d[1]?-1:1,r={y:Va(d[2],t),M:Va(d[3],t),w:Va(d[4],t),d:Va(d[5],t),h:Va(d[6],t),m:Va(d[7],t),s:Va(d[8],t)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(n=function(e,a){var t;if(!e.isValid()||!a.isValid())return{milliseconds:0,months:0};a=Ja(a,e),e.isBefore(a)?t=Ba(e,a):((t=Ba(a,e)).milliseconds=-t.milliseconds,t.months=-t.months);return t}(Ha(r.from),Ha(r.to)),(r={}).ms=n.milliseconds,r.M=n.months),s=new Wa(r),Aa(e)&&h(e,"_locale")&&(s._locale=e._locale),Aa(e)&&h(e,"_isValid")&&(s._isValid=e._isValid),s}function Va(e,a){var t=e&&parseFloat(e.replace(",","."));return(isNaN(t)?0:t)*a}function Ba(e,a){var t={};return t.months=a.month()-e.month()+12*(a.year()-e.year()),e.clone().add(t.months,"M").isAfter(a)&&--t.months,t.milliseconds=a-e.clone().add(t.months,"M"),t}function Ka(s,n){return function(e,a){var t;return null===a||isNaN(+a)||(w(n,"moment()."+n+"(period, number) is deprecated. Please use moment()."+n+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),t=e,e=a,a=t),qa(this,Ga(e,a),s),this}}function qa(e,a,t,s){var n=a._milliseconds,r=Ea(a._days),d=Ea(a._months);e.isValid()&&(s=null==s||s,d&&We(e,B(e,"Month")+d*t),r&&K(e,"Date",B(e,"Date")+r*t),n&&e._d.setTime(e._d.valueOf()+n*t),s&&M.updateOffset(e,r||d))}Ga.fn=Wa.prototype,Ga.invalid=function(){return Ga(NaN)};var Za=Ka(1,"add"),$a=Ka(-1,"subtract");function Qa(e){return"string"==typeof e||e instanceof String}function Xa(e){return D(e)||d(e)||Qa(e)||m(e)||function(a){var e=i(a),t=!1;e&&(t=0===a.filter(function(e){return!m(e)&&Qa(a)}).length);return e&&t}(e)||function(e){var a,t,s=_(e)&&!o(e),n=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(a=0;a<r.length;a+=1)t=r[a],n=n||h(e,t);return s&&n}(e)||null==e}function et(e,a){if(e.date()<a.date())return-et(a,e);var t=12*(a.year()-e.year())+(a.month()-e.month()),s=e.clone().add(t,"months"),n=a-s<0?(a-s)/(s-e.clone().add(t-1,"months")):(a-s)/(e.clone().add(1+t,"months")-s);return-(t+n)||0}function at(e){var a;return void 0===e?this._locale._abbr:(null!=(a=ua(e))&&(this._locale=a),this)}M.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",M.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var tt=t("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function st(){return this._locale}var nt=126227808e5;function rt(e,a){return(e%a+a)%a}function dt(e,a,t){return e<100&&0<=e?new Date(e+400,a,t)-nt:new Date(e,a,t).valueOf()}function it(e,a,t){return e<100&&0<=e?Date.UTC(e+400,a,t)-nt:Date.UTC(e,a,t)}function _t(e,a){return a.erasAbbrRegex(e)}function ot(){for(var e=[],a=[],t=[],s=[],n=this.eras(),r=0,d=n.length;r<d;++r)a.push(he(n[r].name)),e.push(he(n[r].abbr)),t.push(he(n[r].narrow)),s.push(he(n[r].name)),s.push(he(n[r].abbr)),s.push(he(n[r].narrow));this._erasRegex=new RegExp("^("+s.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+a.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+e.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+t.join("|")+")","i")}function mt(e,a){W(0,[e,e.length],0,a)}function ut(e,a,t,s,n){var r;return null==e?Ce(this,s,n).year:((r=Ie(e,s,n))<a&&(a=r),function(e,a,t,s,n){var r=Re(e,a,t,s,n),d=Ne(r.year,0,r.dayOfYear);return this.year(d.getUTCFullYear()),this.month(d.getUTCMonth()),this.date(d.getUTCDate()),this}.call(this,e,a,t,s,n))}W("N",0,0,"eraAbbr"),W("NN",0,0,"eraAbbr"),W("NNN",0,0,"eraAbbr"),W("NNNN",0,0,"eraName"),W("NNNNN",0,0,"eraNarrow"),W("y",["y",1],"yo","eraYear"),W("y",["yy",2],0,"eraYear"),W("y",["yyy",3],0,"eraYear"),W("y",["yyyy",4],0,"eraYear"),le("N",_t),le("NN",_t),le("NNN",_t),le("NNNN",function(e,a){return a.erasNameRegex(e)}),le("NNNNN",function(e,a){return a.erasNarrowRegex(e)}),Le(["N","NN","NNN","NNNN","NNNNN"],function(e,a,t,s){var n=t._locale.erasParse(e,s,t._strict);n?L(t).era=n:L(t).invalidEra=e}),le("y",ie),le("yy",ie),le("yyy",ie),le("yyyy",ie),le("yo",function(e,a){return a._eraYearOrdinalRegex||ie}),Le(["y","yy","yyy","yyyy"],fe),Le(["yo"],function(e,a,t,s){var n;t._locale._eraYearOrdinalRegex&&(n=e.match(t._locale._eraYearOrdinalRegex)),t._locale.eraYearOrdinalParse?a[fe]=t._locale.eraYearOrdinalParse(e,n):a[fe]=parseInt(e,10)}),W(0,["gg",2],0,function(){return this.weekYear()%100}),W(0,["GG",2],0,function(){return this.isoWeekYear()%100}),mt("gggg","weekYear"),mt("ggggg","weekYear"),mt("GGGG","isoWeekYear"),mt("GGGGG","isoWeekYear"),z("weekYear","gg"),z("isoWeekYear","GG"),C("weekYear",1),C("isoWeekYear",1),le("G",_e),le("g",_e),le("GG",ae,$),le("gg",ae,$),le("GGGG",re,X),le("gggg",re,X),le("GGGGG",de,ee),le("ggggg",de,ee),Ye(["gggg","ggggg","GGGG","GGGGG"],function(e,a,t,s){a[s.substr(0,2)]=G(e)}),Ye(["gg","GG"],function(e,a,t,s){a[s]=M.parseTwoDigitYear(e)}),W("Q",0,"Qo","quarter"),z("quarter","Q"),C("quarter",7),le("Q",Z),Le("Q",function(e,a){a[pe]=3*(G(e)-1)}),W("D",["DD",2],"Do","date"),z("date","D"),C("date",9),le("D",ae),le("DD",ae,$),le("Do",function(e,a){return e?a._dayOfMonthOrdinalParse||a._ordinalParse:a._dayOfMonthOrdinalParseLenient}),Le(["D","DD"],ke),Le("Do",function(e,a){a[ke]=G(e.match(ae)[0])});var lt=V("Date",!0);W("DDD",["DDDD",3],"DDDo","dayOfYear"),z("dayOfYear","DDD"),C("dayOfYear",4),le("DDD",ne),le("DDDD",Q),Le(["DDD","DDDD"],function(e,a,t){t._dayOfYear=G(e)}),W("m",["mm",2],0,"minute"),z("minute","m"),C("minute",14),le("m",ae),le("mm",ae,$),Le(["m","mm"],Te);var Mt=V("Minutes",!1);W("s",["ss",2],0,"second"),z("second","s"),C("second",15),le("s",ae),le("ss",ae,$),Le(["s","ss"],ge);var ht,ct,Lt=V("Seconds",!1);for(W("S",0,0,function(){return~~(this.millisecond()/100)}),W(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),W(0,["SSS",3],0,"millisecond"),W(0,["SSSS",4],0,function(){return 10*this.millisecond()}),W(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),W(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),W(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),W(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),W(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),z("millisecond","ms"),C("millisecond",16),le("S",ne,Z),le("SS",ne,$),le("SSS",ne,Q),ht="SSSS";ht.length<=9;ht+="S")le(ht,ie);function Yt(e,a){a[we]=G(1e3*("0."+e))}for(ht="S";ht.length<=9;ht+="S")Le(ht,Yt);ct=V("Milliseconds",!1),W("z",0,0,"zoneAbbr"),W("zz",0,0,"zoneName");var yt=k.prototype;function ft(e){return e}yt.add=Za,yt.calendar=function(e,a){1===arguments.length&&(arguments[0]?Xa(arguments[0])?(e=arguments[0],a=void 0):function(e){for(var a=_(e)&&!o(e),t=!1,s=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],n=0;n<s.length;n+=1)t=t||h(e,s[n]);return a&&t}(arguments[0])&&(a=arguments[0],e=void 0):a=e=void 0);var t=e||Ha(),s=Ja(t,this).startOf("day"),n=M.calendarFormat(this,s)||"sameElse",r=a&&(v(a[n])?a[n].call(this,t):a[n]);return this.format(r||this.localeData().calendar(n,this,Ha(t)))},yt.clone=function(){return new k(this)},yt.diff=function(e,a,t){var s,n,r;if(!this.isValid())return NaN;if(!(s=Ja(e,this)).isValid())return NaN;switch(n=6e4*(s.utcOffset()-this.utcOffset()),a=N(a)){case"year":r=et(this,s)/12;break;case"month":r=et(this,s);break;case"quarter":r=et(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-n)/864e5;break;case"week":r=(this-s-n)/6048e5;break;default:r=this-s}return t?r:U(r)},yt.endOf=function(e){var a,t;if(void 0===(e=N(e))||"millisecond"===e||!this.isValid())return this;switch(t=this._isUTC?it:dt,e){case"year":a=t(this.year()+1,0,1)-1;break;case"quarter":a=t(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":a=t(this.year(),this.month()+1,1)-1;break;case"week":a=t(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":a=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":a=t(this.year(),this.month(),this.date()+1)-1;break;case"hour":a=this._d.valueOf(),a+=36e5-rt(a+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":a=this._d.valueOf(),a+=6e4-rt(a,6e4)-1;break;case"second":a=this._d.valueOf(),a+=1e3-rt(a,1e3)-1;break}return this._d.setTime(a),M.updateOffset(this,!0),this},yt.format=function(e){e=e||(this.isUtc()?M.defaultFormatUtc:M.defaultFormat);var a=A(this,e);return this.localeData().postformat(a)},yt.from=function(e,a){return this.isValid()&&(D(e)&&e.isValid()||Ha(e).isValid())?Ga({to:this,from:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},yt.fromNow=function(e){return this.from(Ha(),e)},yt.to=function(e,a){return this.isValid()&&(D(e)&&e.isValid()||Ha(e).isValid())?Ga({from:this,to:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},yt.toNow=function(e){return this.to(Ha(),e)},yt.get=function(e){return v(this[e=N(e)])?this[e]():this},yt.invalidAt=function(){return L(this).overflow},yt.isAfter=function(e,a){var t=D(e)?e:Ha(e);return!(!this.isValid()||!t.isValid())&&("millisecond"===(a=N(a)||"millisecond")?this.valueOf()>t.valueOf():t.valueOf()<this.clone().startOf(a).valueOf())},yt.isBefore=function(e,a){var t=D(e)?e:Ha(e);return!(!this.isValid()||!t.isValid())&&("millisecond"===(a=N(a)||"millisecond")?this.valueOf()<t.valueOf():this.clone().endOf(a).valueOf()<t.valueOf())},yt.isBetween=function(e,a,t,s){var n=D(e)?e:Ha(e),r=D(a)?a:Ha(a);return!!(this.isValid()&&n.isValid()&&r.isValid())&&(("("===(s=s||"()")[0]?this.isAfter(n,t):!this.isBefore(n,t))&&(")"===s[1]?this.isBefore(r,t):!this.isAfter(r,t)))},yt.isSame=function(e,a){var t,s=D(e)?e:Ha(e);return!(!this.isValid()||!s.isValid())&&("millisecond"===(a=N(a)||"millisecond")?this.valueOf()===s.valueOf():(t=s.valueOf(),this.clone().startOf(a).valueOf()<=t&&t<=this.clone().endOf(a).valueOf()))},yt.isSameOrAfter=function(e,a){return this.isSame(e,a)||this.isAfter(e,a)},yt.isSameOrBefore=function(e,a){return this.isSame(e,a)||this.isBefore(e,a)},yt.isValid=function(){return Y(this)},yt.lang=tt,yt.locale=at,yt.localeData=st,yt.max=xa,yt.min=ja,yt.parsingFlags=function(){return l({},L(this))},yt.set=function(e,a){if("object"==typeof e)for(var t=function(e){var a,t=[];for(a in e)h(e,a)&&t.push({unit:a,priority:R[a]});return t.sort(function(e,a){return e.priority-a.priority}),t}(e=J(e)),s=0;s<t.length;s++)this[t[s].unit](e[t[s].unit]);else if(v(this[e=N(e)]))return this[e](a);return this},yt.startOf=function(e){var a,t;if(void 0===(e=N(e))||"millisecond"===e||!this.isValid())return this;switch(t=this._isUTC?it:dt,e){case"year":a=t(this.year(),0,1);break;case"quarter":a=t(this.year(),this.month()-this.month()%3,1);break;case"month":a=t(this.year(),this.month(),1);break;case"week":a=t(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":a=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":a=t(this.year(),this.month(),this.date());break;case"hour":a=this._d.valueOf(),a-=rt(a+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":a=this._d.valueOf(),a-=rt(a,6e4);break;case"second":a=this._d.valueOf(),a-=rt(a,1e3);break}return this._d.setTime(a),M.updateOffset(this,!0),this},yt.subtract=$a,yt.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},yt.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},yt.toDate=function(){return new Date(this.valueOf())},yt.toISOString=function(e){if(!this.isValid())return null;var a=!0!==e,t=a?this.clone().utc():this;return t.year()<0||9999<t.year()?A(t,a?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):v(Date.prototype.toISOString)?a?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",A(t,"Z")):A(t,a?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},yt.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,a,t,s="moment",n="";return this.isLocal()||(s=0===this.utcOffset()?"moment.utc":"moment.parseZone",n="Z"),e="["+s+'("]',a=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",t=n+'[")]',this.format(e+a+"-MM-DD[T]HH:mm:ss.SSS"+t)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(yt[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),yt.toJSON=function(){return this.isValid()?this.toISOString():null},yt.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},yt.unix=function(){return Math.floor(this.valueOf()/1e3)},yt.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},yt.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},yt.eraName=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].name;if(a[t].until<=e&&e<=a[t].since)return a[t].name}return""},yt.eraNarrow=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].narrow;if(a[t].until<=e&&e<=a[t].since)return a[t].narrow}return""},yt.eraAbbr=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].abbr;if(a[t].until<=e&&e<=a[t].since)return a[t].abbr}return""},yt.eraYear=function(){for(var e,a,t=this.localeData().eras(),s=0,n=t.length;s<n;++s)if(e=t[s].since<=t[s].until?1:-1,a=this.clone().startOf("day").valueOf(),t[s].since<=a&&a<=t[s].until||t[s].until<=a&&a<=t[s].since)return(this.year()-M(t[s].since).year())*e+t[s].offset;return this.year()},yt.year=ze,yt.isLeapYear=function(){return I(this.year())},yt.weekYear=function(e){return ut.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},yt.isoWeekYear=function(e){return ut.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},yt.quarter=yt.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},yt.month=Ae,yt.daysInMonth=function(){return Se(this.year(),this.month())},yt.week=yt.weeks=function(e){var a=this.localeData().week(this);return null==e?a:this.add(7*(e-a),"d")},yt.isoWeek=yt.isoWeeks=function(e){var a=Ce(this,1,4).week;return null==e?a:this.add(7*(e-a),"d")},yt.weeksInYear=function(){var e=this.localeData()._week;return Ie(this.year(),e.dow,e.doy)},yt.weeksInWeekYear=function(){var e=this.localeData()._week;return Ie(this.weekYear(),e.dow,e.doy)},yt.isoWeeksInYear=function(){return Ie(this.year(),1,4)},yt.isoWeeksInISOWeekYear=function(){return Ie(this.isoWeekYear(),1,4)},yt.date=lt,yt.day=yt.days=function(e){if(!this.isValid())return null!=e?this:NaN;var a,t,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(a=e,t=this.localeData(),e="string"!=typeof a?a:isNaN(a)?"number"==typeof(a=t.weekdaysParse(a))?a:null:parseInt(a,10),this.add(e-s,"d")):s},yt.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var a=(this.day()+7-this.localeData()._week.dow)%7;return null==e?a:this.add(e-a,"d")},yt.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null==e)return this.day()||7;var a,t,s=(a=e,t=this.localeData(),"string"==typeof a?t.weekdaysParse(a)%7||7:isNaN(a)?null:a);return this.day(this.day()%7?s:s-7)},yt.dayOfYear=function(e){var a=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?a:this.add(e-a,"d")},yt.hour=yt.hours=aa,yt.minute=yt.minutes=Mt,yt.second=yt.seconds=Lt,yt.millisecond=yt.milliseconds=ct,yt.utcOffset=function(e,a,t){var s,n=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?n:Ra(this);if("string"==typeof e){if(null===(e=Na(me,e)))return this}else Math.abs(e)<16&&!t&&(e*=60);return!this._isUTC&&a&&(s=Ra(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),n!==e&&(!a||this._changeInProgress?qa(this,Ga(e-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,M.updateOffset(this,!0),this._changeInProgress=null)),this},yt.utc=function(e){return this.utcOffset(0,e)},yt.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Ra(this),"m")),this},yt.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(e=Na(oe,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},yt.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Ha(e).utcOffset():0,(this.utcOffset()-e)%60==0)},yt.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},yt.isLocal=function(){return!!this.isValid()&&!this._isUTC},yt.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},yt.isUtc=Ca,yt.isUTC=Ca,yt.zoneAbbr=function(){return this._isUTC?"UTC":""},yt.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},yt.dates=t("dates accessor is deprecated. Use date instead.",lt),yt.months=t("months accessor is deprecated. Use month instead",Ae),yt.years=t("years accessor is deprecated. Use year instead",ze),yt.zone=t("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,a){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,a),this):-this.utcOffset()}),yt.isDSTShifted=t("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,a={};return p(a,this),(a=ba(a))._a?(e=(a._isUTC?c:Ha)(a._a),this._isDSTShifted=this.isValid()&&0<function(e,a,t){for(var s=Math.min(e.length,a.length),n=Math.abs(e.length-a.length),r=0,d=0;d<s;d++)(t&&e[d]!==a[d]||!t&&G(e[d])!==G(a[d]))&&r++;return r+n}(a._a,e.toArray())):this._isDSTShifted=!1,this._isDSTShifted});var pt=S.prototype;function kt(e,a,t,s){var n=ua(),r=c().set(s,a);return n[t](r,e)}function Dt(e,a,t){if(m(e)&&(a=e,e=void 0),e=e||"",null!=a)return kt(e,a,t,"month");for(var s=[],n=0;n<12;n++)s[n]=kt(e,n,t,"month");return s}function Tt(e,a,t,s){a=("boolean"==typeof e?m(a)&&(t=a,a=void 0):(a=e,e=!1,m(t=a)&&(t=a,a=void 0)),a||"");var n,r=ua(),d=e?r._week.dow:0,i=[];if(null!=t)return kt(a,(t+d)%7,s,"day");for(n=0;n<7;n++)i[n]=kt(a,(n+d)%7,s,"day");return i}pt.calendar=function(e,a,t){var s=this._calendar[e]||this._calendar.sameElse;return v(s)?s.call(a,t):s},pt.longDateFormat=function(e){var a=this._longDateFormat[e],t=this._longDateFormat[e.toUpperCase()];return a||!t?a:(this._longDateFormat[e]=t.match(j).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e])},pt.invalidDate=function(){return this._invalidDate},pt.ordinal=function(e){return this._ordinal.replace("%d",e)},pt.preparse=ft,pt.postformat=ft,pt.relativeTime=function(e,a,t,s){var n=this._relativeTime[t];return v(n)?n(e,a,t,s):n.replace(/%d/i,e)},pt.pastFuture=function(e,a){var t=this._relativeTime[0<e?"future":"past"];return v(t)?t(a):t.replace(/%s/i,a)},pt.set=function(e){var a,t;for(t in e)h(e,t)&&(v(a=e[t])?this[t]=a:this["_"+t]=a);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},pt.eras=function(e,a){for(var t,s=this._eras||ua("en")._eras,n=0,r=s.length;n<r;++n){switch(typeof s[n].since){case"string":t=M(s[n].since).startOf("day"),s[n].since=t.valueOf();break}switch(typeof s[n].until){case"undefined":s[n].until=1/0;break;case"string":t=M(s[n].until).startOf("day").valueOf(),s[n].until=t.valueOf();break}}return s},pt.erasParse=function(e,a,t){var s,n,r,d,i,_=this.eras();for(e=e.toUpperCase(),s=0,n=_.length;s<n;++s)if(r=_[s].name.toUpperCase(),d=_[s].abbr.toUpperCase(),i=_[s].narrow.toUpperCase(),t)switch(a){case"N":case"NN":case"NNN":if(d===e)return _[s];break;case"NNNN":if(r===e)return _[s];break;case"NNNNN":if(i===e)return _[s];break}else if(0<=[r,d,i].indexOf(e))return _[s]},pt.erasConvertYear=function(e,a){var t=e.since<=e.until?1:-1;return void 0===a?M(e.since).year():M(e.since).year()+(a-e.offset)*t},pt.erasAbbrRegex=function(e){return h(this,"_erasAbbrRegex")||ot.call(this),e?this._erasAbbrRegex:this._erasRegex},pt.erasNameRegex=function(e){return h(this,"_erasNameRegex")||ot.call(this),e?this._erasNameRegex:this._erasRegex},pt.erasNarrowRegex=function(e){return h(this,"_erasNarrowRegex")||ot.call(this),e?this._erasNarrowRegex:this._erasRegex},pt.months=function(e,a){return e?i(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||xe).test(a)?"format":"standalone"][e.month()]:i(this._months)?this._months:this._months.standalone},pt.monthsShort=function(e,a){return e?i(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[xe.test(a)?"format":"standalone"][e.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},pt.monthsParse=function(e,a,t){var s,n,r;if(this._monthsParseExact)return function(e,a,t){var s,n,r,d=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=c([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return t?"MMM"===a?-1!==(n=ye.call(this._shortMonthsParse,d))?n:null:-1!==(n=ye.call(this._longMonthsParse,d))?n:null:"MMM"===a?-1!==(n=ye.call(this._shortMonthsParse,d))||-1!==(n=ye.call(this._longMonthsParse,d))?n:null:-1!==(n=ye.call(this._longMonthsParse,d))||-1!==(n=ye.call(this._shortMonthsParse,d))?n:null}.call(this,e,a,t);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(n=c([2e3,s]),t&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),t||this._monthsParse[s]||(r="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[s]=new RegExp(r.replace(".",""),"i")),t&&"MMMM"===a&&this._longMonthsParse[s].test(e))return s;if(t&&"MMM"===a&&this._shortMonthsParse[s].test(e))return s;if(!t&&this._monthsParse[s].test(e))return s}},pt.monthsRegex=function(e){return this._monthsParseExact?(h(this,"_monthsRegex")||Ee.call(this),e?this._monthsStrictRegex:this._monthsRegex):(h(this,"_monthsRegex")||(this._monthsRegex=Oe),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},pt.monthsShortRegex=function(e){return this._monthsParseExact?(h(this,"_monthsRegex")||Ee.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,"_monthsShortRegex")||(this._monthsShortRegex=Pe),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},pt.week=function(e){return Ce(e,this._week.dow,this._week.doy).week},pt.firstDayOfYear=function(){return this._week.doy},pt.firstDayOfWeek=function(){return this._week.dow},pt.weekdays=function(e,a){var t=i(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(a)?"format":"standalone"];return!0===e?Ue(t,this._week.dow):e?t[e.day()]:t},pt.weekdaysMin=function(e){return!0===e?Ue(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},pt.weekdaysShort=function(e){return!0===e?Ue(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},pt.weekdaysParse=function(e,a,t){var s,n,r;if(this._weekdaysParseExact)return function(e,a,t){var s,n,r,d=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=c([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return t?"dddd"===a?-1!==(n=ye.call(this._weekdaysParse,d))?n:null:"ddd"===a?-1!==(n=ye.call(this._shortWeekdaysParse,d))?n:null:-1!==(n=ye.call(this._minWeekdaysParse,d))?n:null:"dddd"===a?-1!==(n=ye.call(this._weekdaysParse,d))||-1!==(n=ye.call(this._shortWeekdaysParse,d))||-1!==(n=ye.call(this._minWeekdaysParse,d))?n:null:"ddd"===a?-1!==(n=ye.call(this._shortWeekdaysParse,d))||-1!==(n=ye.call(this._weekdaysParse,d))||-1!==(n=ye.call(this._minWeekdaysParse,d))?n:null:-1!==(n=ye.call(this._minWeekdaysParse,d))||-1!==(n=ye.call(this._weekdaysParse,d))||-1!==(n=ye.call(this._shortWeekdaysParse,d))?n:null}.call(this,e,a,t);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(n=c([2e3,1]).day(s),t&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(n,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(n,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(n,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(r="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[s]=new RegExp(r.replace(".",""),"i")),t&&"dddd"===a&&this._fullWeekdaysParse[s].test(e))return s;if(t&&"ddd"===a&&this._shortWeekdaysParse[s].test(e))return s;if(t&&"dd"===a&&this._minWeekdaysParse[s].test(e))return s;if(!t&&this._weekdaysParse[s].test(e))return s}},pt.weekdaysRegex=function(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||$e.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,"_weekdaysRegex")||(this._weekdaysRegex=Ke),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},pt.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||$e.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=qe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},pt.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||$e.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ze),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},pt.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},pt.meridiem=function(e,a,t){return 11<e?t?"pm":"PM":t?"am":"AM"},oa("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1===G(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),M.lang=t("moment.lang is deprecated. Use moment.locale instead.",oa),M.langData=t("moment.langData is deprecated. Use moment.localeData instead.",ua);var gt=Math.abs;function wt(e,a,t,s){var n=Ga(a,t);return e._milliseconds+=s*n._milliseconds,e._days+=s*n._days,e._months+=s*n._months,e._bubble()}function vt(e){return e<0?Math.floor(e):Math.ceil(e)}function bt(e){return 4800*e/146097}function St(e){return 146097*e/4800}function Ht(e){return function(){return this.as(e)}}var jt=Ht("ms"),xt=Ht("s"),Pt=Ht("m"),Ot=Ht("h"),Wt=Ht("d"),At=Ht("w"),Et=Ht("M"),Ft=Ht("Q"),zt=Ht("y");function Nt(e){return function(){return this.isValid()?this._data[e]:NaN}}var Jt=Nt("milliseconds"),Rt=Nt("seconds"),Ct=Nt("minutes"),It=Nt("hours"),Ut=Nt("days"),Gt=Nt("months"),Vt=Nt("years");var Bt=Math.round,Kt={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function qt(e,a,t,s){var n=Ga(e).abs(),r=Bt(n.as("s")),d=Bt(n.as("m")),i=Bt(n.as("h")),_=Bt(n.as("d")),o=Bt(n.as("M")),m=Bt(n.as("w")),u=Bt(n.as("y")),l=(r<=t.ss?["s",r]:r<t.s&&["ss",r])||d<=1&&["m"]||d<t.m&&["mm",d]||i<=1&&["h"]||i<t.h&&["hh",i]||_<=1&&["d"]||_<t.d&&["dd",_];return null!=t.w&&(l=l||m<=1&&["w"]||m<t.w&&["ww",m]),(l=l||o<=1&&["M"]||o<t.M&&["MM",o]||u<=1&&["y"]||["yy",u])[2]=a,l[3]=0<+e,l[4]=s,function(e,a,t,s,n){return n.relativeTime(a||1,!!t,e,s)}.apply(null,l)}var Zt=Math.abs;function $t(e){return(0<e)-(e<0)||+e}function Qt(){if(!this.isValid())return this.localeData().invalidDate();var e,a,t,s,n,r,d,i,_=Zt(this._milliseconds)/1e3,o=Zt(this._days),m=Zt(this._months),u=this.asSeconds();return u?(e=U(_/60),a=U(e/60),_%=60,e%=60,t=U(m/12),m%=12,s=_?_.toFixed(3).replace(/\.?0+$/,""):"",n=u<0?"-":"",r=$t(this._months)!==$t(u)?"-":"",d=$t(this._days)!==$t(u)?"-":"",i=$t(this._milliseconds)!==$t(u)?"-":"",n+"P"+(t?r+t+"Y":"")+(m?r+m+"M":"")+(o?d+o+"D":"")+(a||e||_?"T":"")+(a?i+a+"H":"")+(e?i+e+"M":"")+(_?i+s+"S":"")):"P0D"}var Xt=Wa.prototype;Xt.isValid=function(){return this._isValid},Xt.abs=function(){var e=this._data;return this._milliseconds=gt(this._milliseconds),this._days=gt(this._days),this._months=gt(this._months),e.milliseconds=gt(e.milliseconds),e.seconds=gt(e.seconds),e.minutes=gt(e.minutes),e.hours=gt(e.hours),e.months=gt(e.months),e.years=gt(e.years),this},Xt.add=function(e,a){return wt(this,e,a,1)},Xt.subtract=function(e,a){return wt(this,e,a,-1)},Xt.as=function(e){if(!this.isValid())return NaN;var a,t,s=this._milliseconds;if("month"===(e=N(e))||"quarter"===e||"year"===e)switch(a=this._days+s/864e5,t=this._months+bt(a),e){case"month":return t;case"quarter":return t/3;case"year":return t/12}else switch(a=this._days+Math.round(St(this._months)),e){case"week":return a/7+s/6048e5;case"day":return a+s/864e5;case"hour":return 24*a+s/36e5;case"minute":return 1440*a+s/6e4;case"second":return 86400*a+s/1e3;case"millisecond":return Math.floor(864e5*a)+s;default:throw new Error("Unknown unit "+e)}},Xt.asMilliseconds=jt,Xt.asSeconds=xt,Xt.asMinutes=Pt,Xt.asHours=Ot,Xt.asDays=Wt,Xt.asWeeks=At,Xt.asMonths=Et,Xt.asQuarters=Ft,Xt.asYears=zt,Xt.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*G(this._months/12):NaN},Xt._bubble=function(){var e,a,t,s,n,r=this._milliseconds,d=this._days,i=this._months,_=this._data;return 0<=r&&0<=d&&0<=i||r<=0&&d<=0&&i<=0||(r+=864e5*vt(St(i)+d),i=d=0),_.milliseconds=r%1e3,e=U(r/1e3),_.seconds=e%60,a=U(e/60),_.minutes=a%60,t=U(a/60),_.hours=t%24,d+=U(t/24),i+=n=U(bt(d)),d-=vt(St(n)),s=U(i/12),i%=12,_.days=d,_.months=i,_.years=s,this},Xt.clone=function(){return Ga(this)},Xt.get=function(e){return e=N(e),this.isValid()?this[e+"s"]():NaN},Xt.milliseconds=Jt,Xt.seconds=Rt,Xt.minutes=Ct,Xt.hours=It,Xt.days=Ut,Xt.weeks=function(){return U(this.days()/7)},Xt.months=Gt,Xt.years=Vt,Xt.humanize=function(e,a){if(!this.isValid())return this.localeData().invalidDate();var t,s,n=!1,r=Kt;return"object"==typeof e&&(a=e,e=!1),"boolean"==typeof e&&(n=e),"object"==typeof a&&(r=Object.assign({},Kt,a),null!=a.s&&null==a.ss&&(r.ss=a.s-1)),t=this.localeData(),s=qt(this,!n,r,t),n&&(s=t.pastFuture(+this,s)),t.postformat(s)},Xt.toISOString=Qt,Xt.toString=Qt,Xt.toJSON=Qt,Xt.locale=at,Xt.localeData=st,Xt.toIsoString=t("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Qt),Xt.lang=tt,W("X",0,0,"unix"),W("x",0,0,"valueOf"),le("x",_e),le("X",/[+-]?\d+(\.\d{1,3})?/),Le("X",function(e,a,t){t._d=new Date(1e3*parseFloat(e))}),Le("x",function(e,a,t){t._d=new Date(G(e))}),M.version="2.29.1",e=Ha,M.fn=yt,M.min=function(){return Pa("isBefore",[].slice.call(arguments,0))},M.max=function(){return Pa("isAfter",[].slice.call(arguments,0))},M.now=function(){return Date.now?Date.now():+new Date},M.utc=c,M.unix=function(e){return Ha(1e3*e)},M.months=function(e,a){return Dt(e,a,"months")},M.isDate=d,M.locale=oa,M.invalid=y,M.duration=Ga,M.isMoment=D,M.weekdays=function(e,a,t){return Tt(e,a,t,"weekdays")},M.parseZone=function(){return Ha.apply(null,arguments).parseZone()},M.localeData=ua,M.isDuration=Aa,M.monthsShort=function(e,a){return Dt(e,a,"monthsShort")},M.weekdaysMin=function(e,a,t){return Tt(e,a,t,"weekdaysMin")},M.defineLocale=ma,M.updateLocale=function(e,a){var t,s,n;return null!=a?(n=sa,null!=na[e]&&null!=na[e].parentLocale?na[e].set(b(na[e]._config,a)):(null!=(s=_a(e))&&(n=s._config),a=b(n,a),null==s&&(a.abbr=e),(t=new S(a)).parentLocale=na[e],na[e]=t),oa(e)):null!=na[e]&&(null!=na[e].parentLocale?(na[e]=na[e].parentLocale,e===oa()&&oa(e)):null!=na[e]&&delete na[e]),na[e]},M.locales=function(){return s(na)},M.weekdaysShort=function(e,a,t){return Tt(e,a,t,"weekdaysShort")},M.normalizeUnits=N,M.relativeTimeRounding=function(e){return void 0===e?Bt:"function"==typeof e&&(Bt=e,!0)},M.relativeTimeThreshold=function(e,a){return void 0!==Kt[e]&&(void 0===a?Kt[e]:(Kt[e]=a,"s"===e&&(Kt.ss=a-1),!0))},M.calendarFormat=function(e,a){var t=e.diff(a,"days",!0);return t<-6?"sameElse":t<-1?"lastWeek":t<0?"lastDay":t<1?"sameDay":t<2?"nextDay":t<7?"nextWeek":"sameElse"},M.prototype=yt,M.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},M.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});function es(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function as(d){return function(e,a,t,s){var n=es(e),r=ts[d][es(e)];return 2===n&&(r=r[a?0:1]),r.replace(/%d/i,e)}}var ts={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},ss=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];M.defineLocale("ar-dz",{months:ss,monthsShort:ss,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:as("s"),ss:as("s"),m:as("m"),mm:as("m"),h:as("h"),hh:as("h"),d:as("d"),dd:as("d"),M:as("M"),MM:as("M"),y:as("y"),yy:as("y")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:0,doy:4}}),M.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}});function ns(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function rs(d){return function(e,a,t,s){var n=ns(e),r=is[d][ns(e)];return 2===n&&(r=r[a?0:1]),r.replace(/%d/i,e)}}var ds={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},is={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},_s=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];M.defineLocale("ar-ly",{months:_s,monthsShort:_s,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:rs("s"),ss:rs("s"),m:rs("m"),mm:rs("m"),h:rs("h"),hh:rs("h"),d:rs("d"),dd:rs("d"),M:rs("M"),MM:rs("M"),y:rs("y"),yy:rs("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return ds[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),M.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}});var os={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},ms={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};M.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return ms[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return os[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),M.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}});function us(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function ls(d){return function(e,a,t,s){var n=us(e),r=cs[d][us(e)];return 2===n&&(r=r[a?0:1]),r.replace(/%d/i,e)}}var Ms={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},hs={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},cs={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},Ls=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];M.defineLocale("ar",{months:Ls,monthsShort:Ls,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:ls("s"),ss:ls("s"),m:ls("m"),mm:ls("m"),h:ls("h"),hh:ls("h"),d:ls("d"),dd:ls("d"),M:ls("M"),MM:ls("M"),y:ls("y"),yy:ls("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return hs[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Ms[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var Ys={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};function ys(e,a,t){var s,n;return"m"===t?a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===t?a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(s=+e,n={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[t].split("_"),s%10==1&&s%100!=11?n[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?n[1]:n[2])}M.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,a,t){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){if(0===e)return e+"-\u0131nc\u0131";var a=e%10;return e+(Ys[a]||Ys[e%100-a]||Ys[100<=e?100:null])},week:{dow:1,doy:7}}),M.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:ys,mm:ys,h:ys,hh:ys,d:"\u0434\u0437\u0435\u043d\u044c",dd:ys,M:"\u043c\u0435\u0441\u044f\u0446",MM:ys,y:"\u0433\u043e\u0434",yy:ys},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}}),M.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",w:"\u0441\u0435\u0434\u043c\u0438\u0446\u0430",ww:"%d \u0441\u0435\u0434\u043c\u0438\u0446\u0438",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0==t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),M.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});var fs={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},ps={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};M.defineLocale("bn-bd",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return ps[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return fs[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09ad\u09cb\u09b0|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a?e<4?e:e+12:"\u09ad\u09cb\u09b0"===a||"\u09b8\u0995\u09be\u09b2"===a?e:"\u09a6\u09c1\u09aa\u09c1\u09b0"===a?3<=e?e:e+12:"\u09ac\u09bf\u0995\u09be\u09b2"===a||"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u09b0\u09be\u09a4":e<6?"\u09ad\u09cb\u09b0":e<12?"\u09b8\u0995\u09be\u09b2":e<15?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<18?"\u09ac\u09bf\u0995\u09be\u09b2":e<20?"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}});var ks={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},Ds={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};M.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return Ds[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ks[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a&&4<=e||"\u09a6\u09c1\u09aa\u09c1\u09b0"===a&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}});var Ts={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},gs={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};function ws(e,a,t){var s;return e+" "+(s={mm:"munutenn",MM:"miz",dd:"devezh"}[t],2!==e?s:function(e){var a={m:"v",b:"v",d:"z"};return void 0!==a[e.charAt(0)]?a[e.charAt(0)]+e.substring(1):e}(s))}M.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return gs[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Ts[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===a&&4<=e||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===a&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}});var vs=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],bs=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,Ss=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];function Hs(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}M.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:Ss,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:Ss,monthsRegex:bs,monthsShortRegex:bs,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:vs,longMonthsParse:vs,shortMonthsParse:vs,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:ws,h:"un eur",hh:"%d eur",d:"un devezh",dd:ws,M:"ur miz",MM:ws,y:"ur bloaz",yy:function(e){switch(function e(a){if(9<a)return e(a%10);return a}(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(e){return e+(1===e?"a\xf1":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,a,t){return e<12?"a.m.":"g.m."}}),M.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:Hs,m:Hs,mm:Hs,h:Hs,hh:Hs,d:"dan",dd:Hs,M:"mjesec",MM:Hs,y:"godinu",yy:Hs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});var js="leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),xs="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_"),Ps=[/^led/i,/^\xfano/i,/^b\u0159e/i,/^dub/i,/^kv\u011b/i,/^(\u010dvn|\u010derven$|\u010dervna)/i,/^(\u010dvc|\u010dervenec|\u010dervence)/i,/^srp/i,/^z\xe1\u0159/i,/^\u0159\xedj/i,/^lis/i,/^pro/i],Os=/^(leden|\xfanor|b\u0159ezen|duben|kv\u011bten|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|z\xe1\u0159\xed|\u0159\xedjen|listopad|prosinec|led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i;function Ws(e){return 1<e&&e<5&&1!=~~(e/10)}function As(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return a||s?n+(Ws(e)?"sekundy":"sekund"):n+"sekundami";case"m":return a?"minuta":s?"minutu":"minutou";case"mm":return a||s?n+(Ws(e)?"minuty":"minut"):n+"minutami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(Ws(e)?"hodiny":"hodin"):n+"hodinami";case"d":return a||s?"den":"dnem";case"dd":return a||s?n+(Ws(e)?"dny":"dn\xed"):n+"dny";case"M":return a||s?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return a||s?n+(Ws(e)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):n+"m\u011bs\xedci";case"y":return a||s?"rok":"rokem";case"yy":return a||s?n+(Ws(e)?"roky":"let"):n+"lety"}}function Es(e,a,t,s){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?n[t][0]:n[t][1]}function Fs(e,a,t,s){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?n[t][0]:n[t][1]}function zs(e,a,t,s){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?n[t][0]:n[t][1]}M.defineLocale("cs",{months:js,monthsShort:xs,monthsRegex:Os,monthsShortRegex:Os,monthsStrictRegex:/^(leden|ledna|\xfanora|\xfanor|b\u0159ezen|b\u0159ezna|duben|dubna|kv\u011bten|kv\u011btna|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|srpna|z\xe1\u0159\xed|\u0159\xedjen|\u0159\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i,monthsParse:Ps,longMonthsParse:Ps,shortMonthsParse:Ps,weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:As,ss:As,m:As,mm:As,h:As,hh:As,d:As,dd:As,M:As,MM:As,y:As,yy:As},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(e){return e+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(e)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(e)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}}),M.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var a="";return 20<e?a=40===e||50===e||60===e||80===e||100===e?"fed":"ain":0<e&&(a=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+a},week:{dow:1,doy:4}}),M.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:Es,mm:"%d Minuten",h:Es,hh:"%d Stunden",d:Es,dd:Es,w:Es,ww:"%d Wochen",M:Es,MM:Es,y:Es,yy:Es},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:Fs,mm:"%d Minuten",h:Fs,hh:"%d Stunden",d:Fs,dd:Fs,w:Fs,ww:"%d Wochen",M:Fs,MM:Fs,y:Fs,yy:Fs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:zs,mm:"%d Minuten",h:zs,hh:"%d Stunden",d:zs,dd:zs,w:zs,ww:"%d Wochen",M:zs,MM:zs,y:zs,yy:zs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var Ns=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],Js=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];M.defineLocale("dv",{months:Ns,monthsShort:Ns,weekdays:Js,weekdaysShort:Js,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,a,t){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}}),M.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(e,a){return e?"string"==typeof a&&/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(e,a,t){return 11<e?t?"\u03bc\u03bc":"\u039c\u039c":t?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(e){return"\u03bc"===(e+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT";default:return"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,a){var t,s=this._calendarEl[e],n=a&&a.hours();return t=s,("undefined"!=typeof Function&&t instanceof Function||"[object Function]"===Object.prototype.toString.call(t))&&(s=s.apply(a)),s.replace("{}",n%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}}),M.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:4}}),M.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),M.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),M.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:6}}),M.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_a\u016dg_sept_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"p.t.m.":"P.T.M.":t?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}});var Rs="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Cs="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),Is=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],Us=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;M.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Cs[e.month()]:Rs[e.month()]:Rs},monthsRegex:Us,monthsShortRegex:Us,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:Is,longMonthsParse:Is,shortMonthsParse:Is,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var Gs="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Vs="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),Bs=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],Ks=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;M.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Vs[e.month()]:Gs[e.month()]:Gs},monthsRegex:Ks,monthsShortRegex:Ks,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:Bs,longMonthsParse:Bs,shortMonthsParse:Bs,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:4},invalidDate:"Fecha inv\xe1lida"});var qs="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Zs="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),$s=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],Qs=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;M.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Zs[e.month()]:qs[e.month()]:qs},monthsRegex:Qs,monthsShortRegex:Qs,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:$s,longMonthsParse:$s,shortMonthsParse:$s,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}});var Xs="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),en="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),an=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],tn=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;function sn(e,a,t,s){var n={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[e+" minuti",e+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[e+" tunni",e+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[e+" kuu",e+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[e+" aasta",e+" aastat"]};return a?n[t][2]?n[t][2]:n[t][1]:s?n[t][0]:n[t][1]}M.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?en[e.month()]:Xs[e.month()]:Xs},monthsRegex:tn,monthsShortRegex:tn,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:an,longMonthsParse:an,shortMonthsParse:an,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4},invalidDate:"Fecha inv\xe1lida"}),M.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:sn,ss:sn,m:sn,mm:sn,h:sn,hh:sn,d:sn,dd:"%d p\xe4eva",M:sn,MM:sn,y:sn,yy:sn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var nn={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},rn={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"};M.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,a,t){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"%d \u062b\u0627\u0646\u06cc\u0647",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(e){return rn[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return nn[e]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}});var dn="nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" "),_n=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",dn[7],dn[8],dn[9]];function on(e,a,t,s){var n,r,d="";switch(t){case"s":return s?"muutaman sekunnin":"muutama sekunti";case"ss":d=s?"sekunnin":"sekuntia";break;case"m":return s?"minuutin":"minuutti";case"mm":d=s?"minuutin":"minuuttia";break;case"h":return s?"tunnin":"tunti";case"hh":d=s?"tunnin":"tuntia";break;case"d":return s?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":d=s?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return s?"kuukauden":"kuukausi";case"MM":d=s?"kuukauden":"kuukautta";break;case"y":return s?"vuoden":"vuosi";case"yy":d=s?"vuoden":"vuotta";break}return r=s,d=((n=e)<10?r?_n[n]:dn[n]:n)+" "+d}M.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:on,ss:on,m:on,mm:on,h:on,hh:on,d:on,dd:on,M:on,MM:on,y:on,yy:on},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),M.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0ur",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}}),M.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var mn=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?|janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,un=[/^janv/i,/^f\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\xe9c/i];M.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsRegex:mn,monthsShortRegex:mn,monthsStrictRegex:/^(janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,monthsShortStrictRegex:/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?)/i,monthsParse:un,longMonthsParse:un,shortMonthsParse:un,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var ln="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),Mn="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");M.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Mn[e.month()]:ln[e.month()]:ln},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});M.defineLocale("ga",{months:["Ean\xe1ir","Feabhra","M\xe1rta","Aibre\xe1n","Bealtaine","Meitheamh","I\xfail","L\xfanasa","Me\xe1n F\xf3mhair","Deireadh F\xf3mhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","M\xe1rt","Aib","Beal","Meith","I\xfail","L\xfan","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["D\xe9 Domhnaigh","D\xe9 Luain","D\xe9 M\xe1irt","D\xe9 C\xe9adaoin","D\xe9ardaoin","D\xe9 hAoine","D\xe9 Sathairn"],weekdaysShort:["Domh","Luan","M\xe1irt","C\xe9ad","D\xe9ar","Aoine","Sath"],weekdaysMin:["Do","Lu","M\xe1","C\xe9","D\xe9","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Am\xe1rach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inn\xe9 ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s \xf3 shin",s:"c\xfapla soicind",ss:"%d soicind",m:"n\xf3im\xe9ad",mm:"%d n\xf3im\xe9ad",h:"uair an chloig",hh:"%d uair an chloig",d:"l\xe1",dd:"%d l\xe1",M:"m\xed",MM:"%d m\xedonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}});function hn(e,a,t,s){var n={s:["\u0925\u094b\u0921\u092f\u093e \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940","\u0925\u094b\u0921\u0947 \u0938\u0945\u0915\u0902\u0921"],ss:[e+" \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940",e+" \u0938\u0945\u0915\u0902\u0921"],m:["\u090f\u0915\u093e \u092e\u093f\u0923\u091f\u093e\u0928","\u090f\u0915 \u092e\u093f\u0928\u0942\u091f"],mm:[e+" \u092e\u093f\u0923\u091f\u093e\u0902\u0928\u0940",e+" \u092e\u093f\u0923\u091f\u093e\u0902"],h:["\u090f\u0915\u093e \u0935\u0930\u093e\u0928","\u090f\u0915 \u0935\u0930"],hh:[e+" \u0935\u0930\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u093e\u0902"],d:["\u090f\u0915\u093e \u0926\u093f\u0938\u093e\u0928","\u090f\u0915 \u0926\u0940\u0938"],dd:[e+" \u0926\u093f\u0938\u093e\u0902\u0928\u0940",e+" \u0926\u0940\u0938"],M:["\u090f\u0915\u093e \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928","\u090f\u0915 \u092e\u094d\u0939\u092f\u0928\u094b"],MM:[e+" \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928\u0940",e+" \u092e\u094d\u0939\u092f\u0928\u0947"],y:["\u090f\u0915\u093e \u0935\u0930\u094d\u0938\u093e\u0928","\u090f\u0915 \u0935\u0930\u094d\u0938"],yy:[e+" \u0935\u0930\u094d\u0938\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u094d\u0938\u093e\u0902"]};return s?n[t][0]:n[t][1]}function cn(e,a,t,s){var n={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return s?n[t][0]:n[t][1]}M.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}}),M.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("gom-deva",{months:{standalone:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u092f_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),format:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092e\u093e\u0930\u094d\u091a\u093e\u091a\u094d\u092f\u093e_\u090f\u092a\u094d\u0930\u0940\u0932\u093e\u091a\u094d\u092f\u093e_\u092e\u0947\u092f\u093e\u091a\u094d\u092f\u093e_\u091c\u0942\u0928\u093e\u091a\u094d\u092f\u093e_\u091c\u0941\u0932\u092f\u093e\u091a\u094d\u092f\u093e_\u0911\u0917\u0938\u094d\u091f\u093e\u091a\u094d\u092f\u093e_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0911\u0915\u094d\u091f\u094b\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0921\u093f\u0938\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940._\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u092f\u0924\u093e\u0930_\u0938\u094b\u092e\u093e\u0930_\u092e\u0902\u0917\u0933\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u092c\u093f\u0930\u0947\u0938\u094d\u0924\u093e\u0930_\u0938\u0941\u0915\u094d\u0930\u093e\u0930_\u0936\u0947\u0928\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0906\u092f\u0924._\u0938\u094b\u092e._\u092e\u0902\u0917\u0933._\u092c\u0941\u0927._\u092c\u094d\u0930\u0947\u0938\u094d\u0924._\u0938\u0941\u0915\u094d\u0930._\u0936\u0947\u0928.".split("_"),weekdaysMin:"\u0906_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u092c\u094d\u0930\u0947_\u0938\u0941_\u0936\u0947".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LTS:"A h:mm:ss [\u0935\u093e\u091c\u0924\u093e\u0902]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",llll:"ddd, D MMM YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]"},calendar:{sameDay:"[\u0906\u092f\u091c] LT",nextDay:"[\u092b\u093e\u0932\u094d\u092f\u093e\u0902] LT",nextWeek:"[\u092b\u0941\u0921\u0932\u094b] dddd[,] LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092b\u093e\u091f\u0932\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s \u0906\u0926\u0940\u0902",s:hn,ss:hn,m:hn,mm:hn,h:hn,hh:hn,d:hn,dd:hn,M:hn,MM:hn,y:hn,yy:hn},dayOfMonthOrdinalParse:/\d{1,2}(\u0935\u0947\u0930)/,ordinal:function(e,a){switch(a){case"D":return e+"\u0935\u0947\u0930";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/\u0930\u093e\u0924\u0940|\u0938\u0915\u093e\u0933\u0940\u0902|\u0926\u0928\u092a\u093e\u0930\u093e\u0902|\u0938\u093e\u0902\u091c\u0947/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u0940"===a?e<4?e:e+12:"\u0938\u0915\u093e\u0933\u0940\u0902"===a?e:"\u0926\u0928\u092a\u093e\u0930\u093e\u0902"===a?12<e?e:e+12:"\u0938\u093e\u0902\u091c\u0947"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924\u0940":e<12?"\u0938\u0915\u093e\u0933\u0940\u0902":e<16?"\u0926\u0928\u092a\u093e\u0930\u093e\u0902":e<20?"\u0938\u093e\u0902\u091c\u0947":"\u0930\u093e\u0924\u0940"}}),M.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:cn,ss:cn,m:cn,mm:cn,h:cn,hh:cn,d:cn,dd:cn,M:cn,MM:cn,y:cn,yy:cn},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,a){switch(a){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,a){return 12===e&&(e=0),"rati"===a?e<4?e:e+12:"sokallim"===a?e:"donparam"===a?12<e?e:e+12:"sanje"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}});var Ln={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},Yn={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"};M.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(e){return Yn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Ln[e]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===a?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===a?e:"\u0aac\u0aaa\u0acb\u0ab0"===a?10<=e?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}}),M.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(e){return 2===e?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":e+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(e){return 2===e?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":e+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(e){return 2===e?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":e+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(e){return 2===e?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":e%10==0&&10!==e?e+" \u05e9\u05e0\u05d4":e+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(e){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(e)},meridiem:function(e,a,t){return e<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":e<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":e<12?t?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":e<18?t?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}});var yn={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},fn={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"},pn=[/^\u091c\u0928/i,/^\u092b\u093c\u0930|\u092b\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924\u0902|\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935|\u0928\u0935\u0902/i,/^\u0926\u093f\u0938\u0902|\u0926\u093f\u0938/i];function kn(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}M.defineLocale("hi",{months:{format:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),standalone:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u0902\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u0902\u092c\u0930_\u0926\u093f\u0938\u0902\u092c\u0930".split("_")},monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},monthsParse:pn,longMonthsParse:pn,shortMonthsParse:[/^\u091c\u0928/i,/^\u092b\u093c\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935/i,/^\u0926\u093f\u0938/i],monthsRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsShortRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsStrictRegex:/^(\u091c\u0928\u0935\u0930\u0940?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908?|\u0905\u0917\u0938\u094d\u0924?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924?\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930?)/i,monthsShortStrictRegex:/^(\u091c\u0928\.?|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\.?|\u0905\u0917\.?|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\.?|\u0926\u093f\u0938\.?)/i,calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return fn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return yn[e]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924"===a?e<4?e:e+12:"\u0938\u0941\u092c\u0939"===a?e:"\u0926\u094b\u092a\u0939\u0930"===a?10<=e?e:e+12:"\u0936\u093e\u092e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924":e<10?"\u0938\u0941\u092c\u0939":e<17?"\u0926\u094b\u092a\u0939\u0930":e<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}}),M.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:return"[pro\u0161lu] [nedjelju] [u] LT";case 3:return"[pro\u0161lu] [srijedu] [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:kn,m:kn,mm:kn,h:kn,hh:kn,d:"dan",dd:kn,M:"mjesec",MM:kn,y:"godinu",yy:kn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var Dn="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function Tn(e,a,t,s){var n=e;switch(t){case"s":return s||a?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return n+(s||a)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(s||a?" perc":" perce");case"mm":return n+(s||a?" perc":" perce");case"h":return"egy"+(s||a?" \xf3ra":" \xf3r\xe1ja");case"hh":return n+(s||a?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(s||a?" nap":" napja");case"dd":return n+(s||a?" nap":" napja");case"M":return"egy"+(s||a?" h\xf3nap":" h\xf3napja");case"MM":return n+(s||a?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(s||a?" \xe9v":" \xe9ve");case"yy":return n+(s||a?" \xe9v":" \xe9ve")}return""}function gn(e){return(e?"":"[m\xfalt] ")+"["+Dn[this.day()]+"] LT[-kor]"}function wn(e){return e%100==11||e%10!=1}function vn(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return wn(e)?n+(a||s?"sek\xfandur":"sek\xfandum"):n+"sek\xfanda";case"m":return a?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return wn(e)?n+(a||s?"m\xedn\xfatur":"m\xedn\xfatum"):a?n+"m\xedn\xfata":n+"m\xedn\xfatu";case"hh":return wn(e)?n+(a||s?"klukkustundir":"klukkustundum"):n+"klukkustund";case"d":return a?"dagur":s?"dag":"degi";case"dd":return wn(e)?a?n+"dagar":n+(s?"daga":"d\xf6gum"):a?n+"dagur":n+(s?"dag":"degi");case"M":return a?"m\xe1nu\xf0ur":s?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return wn(e)?a?n+"m\xe1nu\xf0ir":n+(s?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):a?n+"m\xe1nu\xf0ur":n+(s?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return a||s?"\xe1r":"\xe1ri";case"yy":return wn(e)?n+(a||s?"\xe1r":"\xe1rum"):n+(a||s?"\xe1r":"\xe1ri")}}M.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan._feb._m\xe1rc._\xe1pr._m\xe1j._j\xfan._j\xfal._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?"de":"DE":!0===t?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return gn.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return gn.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:Tn,ss:Tn,m:Tn,mm:Tn,h:Tn,hh:Tn,d:Tn,dd:Tn,M:Tn,MM:Tn,y:Tn,yy:Tn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(e){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(e)},meridiem:function(e){return e<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":e<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":e<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(e,a){switch(a){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-\u056b\u0576":e+"-\u0580\u0564";default:return e}},week:{dow:1,doy:7}}),M.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?11<=e?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}}),M.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:vn,ss:vn,m:vn,mm:vn,h:"klukkustund",hh:vn,d:vn,dd:vn,M:vn,MM:vn,y:vn,yy:vn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){switch(this.day()){case 0:return"[La scorsa] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT";default:return"[Lo scorso] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"}},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"\u4ee4\u548c",narrow:"\u32ff",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"\u5e73\u6210",narrow:"\u337b",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"\u662d\u548c",narrow:"\u337c",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"\u5927\u6b63",narrow:"\u337d",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"\u660e\u6cbb",narrow:"\u337e",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"\u897f\u66a6",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"\u7d00\u5143\u524d",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(\u5143|\d+)\u5e74/,eraYearOrdinalParse:function(e,a){return"\u5143"===a[1]?1:parseInt(a[1]||e,10)},months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(e){return"\u5348\u5f8c"===e},meridiem:function(e,a,t){return e<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(e){return e.week()!==this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(e){return this.week()!==e.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(e,a){switch(a){case"y":return 1===e?"\u5143\u5e74":e+"\u5e74";case"d":case"D":case"DDD":return e+"\u65e5";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}}),M.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,a){return 12===e&&(e=0),"enjing"===a?e:"siyang"===a?11<=e?e:e+12:"sonten"===a||"ndalu"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),M.defineLocale("ka",{months:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(\u10ec\u10d0\u10db|\u10ec\u10e3\u10d7|\u10e1\u10d0\u10d0\u10d7|\u10ec\u10d4\u10da|\u10d3\u10e6|\u10d7\u10d5)(\u10d8|\u10d4)/,function(e,a,t){return"\u10d8"===t?a+"\u10e8\u10d8":a+t+"\u10e8\u10d8"})},past:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(e)?e.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(e)?e.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):e},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(e){return 0===e?e:1===e?e+"-\u10da\u10d8":e<20||e<=100&&e%20==0||e%100==0?"\u10db\u10d4-"+e:e+"-\u10d4"},week:{dow:1,doy:7}});var bn={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"};M.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(e){return e+(bn[e]||bn[e%10]||bn[100<=e?100:null])},week:{dow:1,doy:7}});var Sn={1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"},Hn={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"};M.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,a,t){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(e){return Hn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Sn[e]})},week:{dow:1,doy:4}});var jn={1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"},xn={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};M.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(e){return xn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return jn[e]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===a?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===a?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===a?10<=e?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}}),M.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\uc77c";case"M":return e+"\uc6d4";case"w":case"W":return e+"\uc8fc";default:return e}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(e){return"\uc624\ud6c4"===e},meridiem:function(e,a,t){return e<12?"\uc624\uc804":"\uc624\ud6c4"}});var Pn={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},On={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},Wn=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"];M.defineLocale("ku",{months:Wn,monthsShort:Wn,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(e){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(e)},meridiem:function(e,a,t){return e<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return On[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Pn[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}});var An={0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"};function En(e,a,t,s){var n={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?n[t][0]:n[t][1]}function Fn(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10;return 0==a?Fn(e/10):Fn(a)}if(e<1e4){for(;10<=e;)e/=10;return Fn(e)}return Fn(e/=1e3)}M.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(e){return e+(An[e]||An[e%10]||An[100<=e?100:null])},week:{dow:1,doy:7}}),M.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return Fn(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return Fn(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:En,mm:"%d Minutten",h:En,hh:"%d Stonnen",d:En,dd:"%d Deeg",M:En,MM:"%d M\xe9int",y:En,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(e){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===e},meridiem:function(e,a,t){return e<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(e){return"\u0e97\u0eb5\u0ec8"+e}});var zn={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function Nn(e,a,t,s){return a?Rn(t)[0]:s?Rn(t)[1]:Rn(t)[2]}function Jn(e){return e%10==0||10<e&&e<20}function Rn(e){return zn[e].split("_")}function Cn(e,a,t,s){var n=e+" ";return 1===e?n+Nn(0,a,t[0],s):a?n+(Jn(e)?Rn(t)[1]:Rn(t)[0]):s?n+Rn(t)[1]:n+(Jn(e)?Rn(t)[1]:Rn(t)[2])}M.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function(e,a,t,s){return a?"kelios sekund\u0117s":s?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:Cn,m:Nn,mm:Cn,h:Nn,hh:Cn,d:Nn,dd:Cn,M:Nn,MM:Cn,y:Nn,yy:Cn},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}});var In={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function Un(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function Gn(e,a,t){return e+" "+Un(In[t],e,a)}function Vn(e,a,t){return Un(In[t],e,a)}M.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function(e,a){return a?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:Gn,m:Vn,mm:Gn,h:Vn,hh:Gn,d:Vn,dd:Gn,M:Vn,MM:Gn,y:Vn,yy:Gn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var Bn={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=Bn.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+Bn.correctGrammaticalCase(e,s)}};function Kn(e,a,t,s){switch(t){case"s":return a?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return e+(a?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return e+(a?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return e+(a?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return e+(a?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return e+(a?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return e+(a?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return e}}M.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:Bn.translate,m:Bn.translate,mm:Bn.translate,h:Bn.translate,hh:Bn.translate,d:"dan",dd:Bn.translate,M:"mjesec",MM:Bn.translate,y:"godinu",yy:Bn.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u0435\u0434\u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0435\u0434\u0435\u043d \u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0435\u0434\u0435\u043d \u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0==t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),M.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===a&&4<=e||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===a||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":e<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":e<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":e<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}}),M.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(e){return"\u04ae\u0425"===e},meridiem:function(e,a,t){return e<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:Kn,ss:Kn,m:Kn,mm:Kn,h:Kn,hh:Kn,d:Kn,dd:Kn,M:Kn,MM:Kn,y:Kn,yy:Kn},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+" \u04e9\u0434\u04e9\u0440";default:return e}}});var qn={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},Zn={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function $n(e,a,t,s){var n="";if(a)switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":n="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":n="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":n="%d \u0924\u093e\u0938";break;case"d":n="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":n="%d \u0926\u093f\u0935\u0938";break;case"M":n="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":n="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u0947";break}else switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":n="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":n="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":n="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":n="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":n="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":n="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":n="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u093e\u0902";break}return n.replace(/%d/i,e)}M.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:$n,ss:$n,m:$n,mm:$n,h:$n,hh:$n,d:$n,dd:$n,M:$n,MM:$n,y:$n,yy:$n},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return Zn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return qn[e]})},meridiemParse:/\u092a\u0939\u093e\u091f\u0947|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940|\u0930\u093e\u0924\u094d\u0930\u0940/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u092a\u0939\u093e\u091f\u0947"===a||"\u0938\u0915\u093e\u0933\u0940"===a?e:"\u0926\u0941\u092a\u093e\u0930\u0940"===a||"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===a||"\u0930\u093e\u0924\u094d\u0930\u0940"===a?12<=e?e:e+12:void 0},meridiem:function(e,a,t){return 0<=e&&e<6?"\u092a\u0939\u093e\u091f\u0947":e<12?"\u0938\u0915\u093e\u0933\u0940":e<17?"\u0926\u0941\u092a\u093e\u0930\u0940":e<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}}),M.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),M.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),M.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var Qn={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},Xn={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"};M.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(e){return Xn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Qn[e]})},week:{dow:1,doy:4}}),M.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",w:"en uke",ww:"%d uker",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var er={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},ar={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};M.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return ar[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return er[e]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===a?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===a?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===a?10<=e?e:e+12:"\u0938\u093e\u0901\u091d"===a?e+12:void 0},meridiem:function(e,a,t){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}});var tr="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),sr="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),nr=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],rr=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;M.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?sr[e.month()]:tr[e.month()]:tr},monthsRegex:rr,monthsShortRegex:rr,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:nr,longMonthsParse:nr,shortMonthsParse:nr,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}});var dr="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),ir="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),_r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],or=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;M.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?/-MMM-/.test(a)?ir[e.month()]:dr[e.month()]:dr},monthsRegex:or,monthsShortRegex:or,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:_r,longMonthsParse:_r,shortMonthsParse:_r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",w:"\xe9\xe9n week",ww:"%d weken",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),M.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._m\xe5._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("oc-lnc",{months:{standalone:"geni\xe8r_febri\xe8r_mar\xe7_abril_mai_junh_julhet_agost_setembre_oct\xf2bre_novembre_decembre".split("_"),format:"de geni\xe8r_de febri\xe8r_de mar\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\xf2bre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dim\xe8cres_dij\xf2us_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[u\xe8i a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[i\xe8r a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});var mr={1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"},ur={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"};M.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(e){return ur[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return mr[e]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===a?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===a?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===a?10<=e?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}});var lr="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_"),Mr="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_"),hr=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^pa\u017a/i,/^lis/i,/^gru/i];function cr(e){return e%10<5&&1<e%10&&~~(e/10)%10!=1}function Lr(e,a,t){var s=e+" ";switch(t){case"ss":return s+(cr(e)?"sekundy":"sekund");case"m":return a?"minuta":"minut\u0119";case"mm":return s+(cr(e)?"minuty":"minut");case"h":return a?"godzina":"godzin\u0119";case"hh":return s+(cr(e)?"godziny":"godzin");case"ww":return s+(cr(e)?"tygodnie":"tygodni");case"MM":return s+(cr(e)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return s+(cr(e)?"lata":"lat")}}function Yr(e,a,t){return e+(20<=e%100||100<=e&&e%100==0?" de ":" ")+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"s\u0103pt\u0103m\xe2ni",MM:"luni",yy:"ani"}[t]}function yr(e,a,t){var s,n;return"m"===t?a?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":e+" "+(s=+e,n={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",ww:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043d\u0435\u0434\u0435\u043b\u0438_\u043d\u0435\u0434\u0435\u043b\u044c",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[t].split("_"),s%10==1&&s%100!=11?n[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?n[1]:n[2])}M.defineLocale("pl",{months:function(e,a){return e?/D MMMM/.test(a)?Mr[e.month()]:lr[e.month()]:lr},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),monthsParse:hr,longMonthsParse:hr,shortMonthsParse:hr,weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:Lr,m:Lr,mm:Lr,h:Lr,hh:Lr,d:"1 dzie\u0144",dd:"%d dni",w:"tydzie\u0144",ww:Lr,M:"miesi\u0105c",MM:Lr,y:"rok",yy:Lr},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_ter\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xe1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xe1b".split("_"),weekdaysMin:"do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",invalidDate:"Data inv\xe1lida"}),M.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),M.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:Yr,m:"un minut",mm:Yr,h:"o or\u0103",hh:Yr,d:"o zi",dd:Yr,w:"o s\u0103pt\u0103m\xe2n\u0103",ww:Yr,M:"o lun\u0103",MM:Yr,y:"un an",yy:Yr},week:{dow:1,doy:7}});var fr=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i];M.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:fr,longMonthsParse:fr,shortMonthsParse:fr,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:yr,m:yr,mm:yr,h:"\u0447\u0430\u0441",hh:yr,d:"\u0434\u0435\u043d\u044c",dd:yr,w:"\u043d\u0435\u0434\u0435\u043b\u044f",ww:yr,M:"\u043c\u0435\u0441\u044f\u0446",MM:yr,y:"\u0433\u043e\u0434",yy:yr},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0438":e<12?"\u0443\u0442\u0440\u0430":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-\u0439";case"D":return e+"-\u0433\u043e";case"w":case"W":return e+"-\u044f";default:return e}},week:{dow:1,doy:4}});var pr=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],kr=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"];M.defineLocale("sd",{months:pr,monthsShort:pr,weekdays:kr,weekdaysShort:kr,weekdaysMin:kr,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),M.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(e){return e+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(e){return"\u0db4.\u0dc0."===e||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===e},meridiem:function(e,a,t){return 11<e?t?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":t?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}});var Dr="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),Tr="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function gr(e){return 1<e&&e<5}function wr(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return a||s?n+(gr(e)?"sekundy":"sek\xfand"):n+"sekundami";case"m":return a?"min\xfata":s?"min\xfatu":"min\xfatou";case"mm":return a||s?n+(gr(e)?"min\xfaty":"min\xfat"):n+"min\xfatami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(gr(e)?"hodiny":"hod\xedn"):n+"hodinami";case"d":return a||s?"de\u0148":"d\u0148om";case"dd":return a||s?n+(gr(e)?"dni":"dn\xed"):n+"d\u0148ami";case"M":return a||s?"mesiac":"mesiacom";case"MM":return a||s?n+(gr(e)?"mesiace":"mesiacov"):n+"mesiacmi";case"y":return a||s?"rok":"rokom";case"yy":return a||s?n+(gr(e)?"roky":"rokov"):n+"rokmi"}}function vr(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nekaj sekund":"nekaj sekundami";case"ss":return n+=1===e?a?"sekundo":"sekundi":2===e?a||s?"sekundi":"sekundah":e<5?a||s?"sekunde":"sekundah":"sekund";case"m":return a?"ena minuta":"eno minuto";case"mm":return n+=1===e?a?"minuta":"minuto":2===e?a||s?"minuti":"minutama":e<5?a||s?"minute":"minutami":a||s?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return n+=1===e?a?"ura":"uro":2===e?a||s?"uri":"urama":e<5?a||s?"ure":"urami":a||s?"ur":"urami";case"d":return a||s?"en dan":"enim dnem";case"dd":return n+=1===e?a||s?"dan":"dnem":2===e?a||s?"dni":"dnevoma":a||s?"dni":"dnevi";case"M":return a||s?"en mesec":"enim mesecem";case"MM":return n+=1===e?a||s?"mesec":"mesecem":2===e?a||s?"meseca":"mesecema":e<5?a||s?"mesece":"meseci":a||s?"mesecev":"meseci";case"y":return a||s?"eno leto":"enim letom";case"yy":return n+=1===e?a||s?"leto":"letom":2===e?a||s?"leti":"letoma":e<5?a||s?"leta":"leti":a||s?"let":"leti"}}M.defineLocale("sk",{months:Dr,monthsShort:Tr,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 4:case 5:return"[minul\xfd] dddd [o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:wr,ss:wr,m:wr,mm:wr,h:wr,hh:wr,d:wr,dd:wr,M:wr,MM:wr,y:wr,yy:wr},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:vr,ss:vr,m:vr,mm:vr,h:vr,hh:vr,d:vr,dd:vr,M:vr,MM:vr,y:vr,yy:vr},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,a,t){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var br={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u0435 \u043c\u0438\u043d\u0443\u0442\u0435"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0435","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],yy:["\u0433\u043e\u0434\u0438\u043d\u0430","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=br.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+br.correctGrammaticalCase(e,s)}};M.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:br.translate,m:br.translate,mm:br.translate,h:br.translate,hh:br.translate,d:"\u0434\u0430\u043d",dd:br.translate,M:"\u043c\u0435\u0441\u0435\u0446",MM:br.translate,y:"\u0433\u043e\u0434\u0438\u043d\u0443",yy:br.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var Sr={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=Sr.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+Sr.correctGrammaticalCase(e,s)}};M.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:Sr.translate,m:Sr.translate,mm:Sr.translate,h:Sr.translate,hh:Sr.translate,d:"dan",dd:Sr.translate,M:"mesec",MM:Sr.translate,y:"godinu",yy:Sr.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),M.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,a,t){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,a){return 12===e&&(e=0),"ekuseni"===a?e:"emini"===a?11<=e?e:e+12:"entsambama"===a||"ebusuku"===a?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}),M.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var a=e%10;return e+(1!=~~(e%100/10)&&(1==a||2==a)?":a":":e")},week:{dow:1,doy:4}}),M.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}});var Hr={1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"},jr={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"};M.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(e){return jr[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Hr[e]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,a,t){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,a){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===a?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===a||"\u0b95\u0bbe\u0bb2\u0bc8"===a||"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===a&&10<=e?e:e+12},week:{dow:0,doy:6}}),M.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===a?e<4?e:e+12:"\u0c09\u0c26\u0c2f\u0c02"===a?e:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===a?10<=e?e:e+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":e<10?"\u0c09\u0c26\u0c2f\u0c02":e<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":e<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}}),M.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}});var xr={0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"};M.defineLocale("tg",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0430\u043b\u0438_\u043c\u0430\u0440\u0442\u0438_\u0430\u043f\u0440\u0435\u043b\u0438_\u043c\u0430\u0439\u0438_\u0438\u044e\u043d\u0438_\u0438\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442\u0438_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0438_\u043e\u043a\u0442\u044f\u0431\u0440\u0438_\u043d\u043e\u044f\u0431\u0440\u0438_\u0434\u0435\u043a\u0430\u0431\u0440\u0438".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_")},monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u0424\u0430\u0440\u0434\u043e \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0448\u0430\u0431"===a?e<4?e:e+12:"\u0441\u0443\u0431\u04b3"===a?e:"\u0440\u04ef\u0437"===a?11<=e?e:e+12:"\u0431\u0435\u0433\u043e\u04b3"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0448\u0430\u0431":e<11?"\u0441\u0443\u0431\u04b3":e<16?"\u0440\u04ef\u0437":e<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(e){return e+(xr[e]||xr[e%10]||xr[100<=e?100:null])},week:{dow:1,doy:7}}),M.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(e){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===e},meridiem:function(e,a,t){return e<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",w:"1 \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",ww:"%d \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}});var Pr={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'\xfcnji",4:"'\xfcnji",100:"'\xfcnji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};M.defineLocale("tk",{months:"\xddanwar_Fewral_Mart_Aprel_Ma\xfd_I\xfdun_I\xfdul_Awgust_Sent\xfdabr_Okt\xfdabr_No\xfdabr_Dekabr".split("_"),monthsShort:"\xddan_Few_Mar_Apr_Ma\xfd_I\xfdn_I\xfdl_Awg_Sen_Okt_No\xfd_Dek".split("_"),weekdays:"\xddek\u015fenbe_Du\u015fenbe_Si\u015fenbe_\xc7ar\u015fenbe_Pen\u015fenbe_Anna_\u015eenbe".split("_"),weekdaysShort:"\xddek_Du\u015f_Si\u015f_\xc7ar_Pen_Ann_\u015een".split("_"),weekdaysMin:"\xddk_D\u015f_S\u015f_\xc7r_Pn_An_\u015en".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[d\xfc\xfdn] LT",lastWeek:"[ge\xe7en] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s so\u0148",past:"%s \xf6\u0148",s:"birn\xe4\xe7e sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir a\xfd",MM:"%d a\xfd",y:"bir \xfdyl",yy:"%d \xfdyl"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'unjy";var t=e%10;return e+(Pr[t]||Pr[e%100-t]||Pr[100<=e?100:null])}},week:{dow:1,doy:7}}),M.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}});var Or="pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function Wr(e,a,t,s){var n=function(e){var a=Math.floor(e%1e3/100),t=Math.floor(e%100/10),s=e%10,n="";0<a&&(n+=Or[a]+"vatlh");0<t&&(n+=(""!==n?" ":"")+Or[t]+"maH");0<s&&(n+=(""!==n?" ":"")+Or[s]);return""===n?"pagh":n}(e);switch(t){case"ss":return n+" lup";case"mm":return n+" tup";case"hh":return n+" rep";case"dd":return n+" jaj";case"MM":return n+" jar";case"yy":return n+" DIS"}}M.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"leS":-1!==e.indexOf("jar")?a.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?a.slice(0,-3)+"nem":a+" pIq"},past:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"Hu\u2019":-1!==e.indexOf("jar")?a.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?a.slice(0,-3)+"ben":a+" ret"},s:"puS lup",ss:Wr,m:"wa\u2019 tup",mm:Wr,h:"wa\u2019 rep",hh:Wr,d:"wa\u2019 jaj",dd:Wr,M:"wa\u2019 jar",MM:Wr,y:"wa\u2019 DIS",yy:Wr},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var Ar={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};function Er(e,a,t,s){var n={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[e+" m\xeduts",e+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[e+" \xfeoras",e+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return s||a?n[t][0]:n[t][1]}function Fr(e,a,t){var s,n;return"m"===t?a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===t?a?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":e+" "+(s=+e,n={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:a?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[t].split("_"),s%10==1&&s%100!=11?n[0]:2<=s%10&&s%10<=4&&(s%100<10||20<=s%100)?n[1]:n[2])}function zr(e){return function(){return e+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}M.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_\xc7ar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),meridiem:function(e,a,t){return e<12?t?"\xf6\xf6":"\xd6\xd6":t?"\xf6s":"\xd6S"},meridiemParse:/\xf6\xf6|\xd6\xd6|\xf6s|\xd6S/,isPM:function(e){return"\xf6s"===e||"\xd6S"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'\u0131nc\u0131";var t=e%10;return e+(Ar[t]||Ar[e%100-t]||Ar[100<=e?100:null])}},week:{dow:1,doy:7}}),M.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"d'o":"D'O":t?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:Er,ss:Er,m:Er,mm:Er,h:Er,hh:Er,d:Er,dd:Er,M:Er,MM:Er,y:Er,yy:Er},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),M.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),M.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}}),M.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===a||"\u0633\u06d5\u06be\u06d5\u0631"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"!==a&&"\u0643\u06d5\u0686"!==a&&11<=e?e:e+12},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":s<900?"\u0633\u06d5\u06be\u06d5\u0631":s<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":s<1230?"\u0686\u06c8\u0634":s<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return e+"-\u06be\u06d5\u067e\u062a\u06d5";default:return e}},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:7}}),M.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function(e,a){var t={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return!0===e?t.nominative.slice(1,7).concat(t.nominative.slice(0,1)):e?t[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(a)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(a)?"genitive":"nominative"][e.day()]:t.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:zr("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:zr("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:zr("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:zr("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return zr("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return zr("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:Fr,m:Fr,mm:Fr,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:Fr,d:"\u0434\u0435\u043d\u044c",dd:Fr,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:Fr,y:"\u0440\u0456\u043a",yy:Fr},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0456":e<12?"\u0440\u0430\u043d\u043a\u0443":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-\u0439";case"D":return e+"-\u0433\u043e";default:return e}},week:{dow:1,doy:7}});var Nr=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],Jr=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];return M.defineLocale("ur",{months:Nr,monthsShort:Nr,weekdays:Jr,weekdaysShort:Jr,weekdaysMin:Jr,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),M.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),M.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}}),M.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"sa":"SA":t?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n tr\u01b0\u1edbc l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",w:"m\u1ed9t tu\u1ea7n",ww:"%d tu\u1ea7n",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),M.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),M.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}}),M.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a||"\u4e0b\u5348"!==a&&"\u665a\u4e0a"!==a&&11<=e?e:e+12},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:function(e){return e.week()!==this.week()?"[\u4e0b]dddLT":"[\u672c]dddLT"},lastDay:"[\u6628\u5929]LT",lastWeek:function(e){return this.week()!==e.week()?"[\u4e0a]dddLT":"[\u672c]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u5468";default:return e}},relativeTime:{future:"%s\u540e",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",w:"1 \u5468",ww:"%d \u5468",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}}),M.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1200?"\u4e0a\u5348":1200===s?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),M.defineLocale("zh-mo",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"D/M/YYYY",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),M.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){var s=100*e+a;return s<600?"\u51cc\u6668":s<900?"\u65e9\u4e0a":s<1130?"\u4e0a\u5348":s<1230?"\u4e2d\u5348":s<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),M.locale("en"),M});
//# sourceMappingURL=moment-with-locales.min.js.map{"version":3,"file":"moment-with-locales.min.js","sources":["moment-with-locales.js"],"names":["global","factory","exports","module","define","amd","moment","this","hookCallback","some","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","res","i","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","createInvalid","NaN","fun","t","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","slice","join","Error","stack","keys","deprecations","deprecateSimple","name","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","makeGetSet","keepTime","set$1","get","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","s","tokens","addParseToken","addWeekParseToken","_w","indexOf","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","y","parseTwoDigitYear","parseInt","getSetYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","dayOfYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","d","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","day","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","getSetHour","globalLocale","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","h","hh","dd","w","ww","M","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","chooseLocale","names","j","next","loadLocale","arr1","arr2","minl","commonPrefix","oldLocale","_abbr","require","getSetGlobalLocale","e","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","checkOverflow","_a","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","configFromRFC2822","parsedArray","weekdayStr","parsedInput","getDay","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getFullYear","getMonth","getDate","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ms","setFullYear","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","isUTC","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","parseIso","base","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","isNumberOrStringArray","property","objectTest","propertyTest","properties","isMomentInputObject","monthDiff","wholeMonthDiff","anchor","adjust","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","isCalendarSpec","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","suffix","zone","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","Infinity","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","relativeTime$1","posNegDuration","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","pluralForm","pluralize","f","str","plurals","months$1","weekdaysParseExact","pluralForm$1","pluralize$1","plurals$1","symbolMap","1","2","3","4","5","6","7","8","9","0","months$2","symbolMap$1","numberMap","Ù¡","Ù¢","Ù£","Ù¤","Ù¥","Ù¦","Ù§","Ù¨","Ù©","Ù ","pluralForm$2","pluralize$2","plurals$2","symbolMap$2","numberMap$1","months$3","suffixes","70","80","20","50","100","10","30","60","90","relativeTimeWithPlural","num","forms","standalone","lastDigit","last2Digits","symbolMap$3","numberMap$2","à§§","à§¨","à§©","à§ª","à§«","à§¬","à§­","à§®","à§¯","à§¦","symbolMap$4","numberMap$3","symbolMap$5","numberMap$4","à¼¡","à¼¢","à¼£","à¼¤","à¼¥","à¼¦","à¼§","à¼¨","à¼©","à¼ ","relativeTimeWithMutation","text","mutationTable","substring","softMutation","monthsParseExact","monthsRegex$1","minWeekdaysParse","translate","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","lastNumber","ll","lll","llll","months$4","monthsParse$1","monthsRegex$2","plural$1","translate$1","processRelativeTime","processRelativeTime$1","processRelativeTime$2","months$5","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","monthsShort$1","monthsParse$2","monthsRegex$3","monthsShortDot$1","monthsShort$2","monthsParse$3","monthsRegex$4","monthsShortDot$2","monthsShort$3","monthsParse$4","monthsRegex$5","monthsShortDot$3","monthsShort$4","monthsParse$5","monthsRegex$6","processRelativeTime$3","symbolMap$6","numberMap$5","Û±","Û²","Û³","Û´","Ûµ","Û¶","Û·","Û¸","Û¹","Û°","numbersPast","numbersFuture","translate$2","monthsRegex$7","monthsParse$6","monthsShortWithDots","monthsShortWithoutDots","processRelativeTime$4","processRelativeTime$5","symbolMap$7","numberMap$6","à«§","à«¨","à«©","à«ª","à««","à«¬","à«­","à«®","à«¯","à«¦","symbolMap$8","numberMap$7","à¥§","à¥¨","à¥©","à¥ª","à¥«","à¥¬","à¥­","à¥®","à¥¯","à¥¦","monthsParse$7","translate$3","weekEndings","translate$4","plural$2","translate$5","eraYearOrdinalRegex","$0","$1","$2","suffixes$1","40","symbolMap$9","numberMap$8","áŸ¡","áŸ¢","áŸ£","áŸ¤","áŸ¥","áŸ¦","áŸ§","áŸ¨","áŸ©","áŸ ","symbolMap$a","numberMap$9","à³§","à³¨","à³©","à³ª","à³«","à³¬","à³­","à³®","à³¯","à³¦","isUpper","symbolMap$b","numberMap$a","months$8","suffixes$2","processRelativeTime$6","eifelerRegelAppliesToNumber","translateSingular","special","translate$6","units$1","format$1","relativeTimeWithPlural$1","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","translate$7","symbolMap$c","numberMap$b","relativeTimeMr","symbolMap$d","numberMap$c","á","á‚","áƒ","á„","á…","á†","á‡","áˆ","á‰","á€","symbolMap$e","numberMap$d","monthsShortWithDots$1","monthsShortWithoutDots$1","monthsParse$8","monthsRegex$8","monthsShortWithDots$2","monthsShortWithoutDots$2","monthsParse$9","monthsRegex$9","symbolMap$f","numberMap$e","à©§","à©¨","à©©","à©ª","à©«","à©¬","à©­","à©®","à©¯","à©¦","monthsNominative","monthsSubjective","monthsParse$a","plural$3","translate$8","relativeTimeWithPlural$2","relativeTimeWithPlural$3","monthsParse$b","months$9","days$1","months$a","monthsShort$7","plural$5","translate$9","processRelativeTime$7","translator$1","translator$2","symbolMap$g","numberMap$f","à¯§","à¯¨","à¯©","à¯ª","à¯«","à¯¬","à¯­","à¯®","à¯¯","à¯¦","suffixes$3","12","13","suffixes$4","numbersNouns","translate$a","numberNoun","hundred","ten","one","word","numberAsNoun","suffixes$5","processRelativeTime$8","relativeTimeWithPlural$4","processHoursFunction","nominative","accusative","genitive","months$b","days$2"],"mappings":"CAAE,SAAUA,EAAQC,GACG,iBAAZC,SAA0C,oBAAXC,OAAyBA,OAAOD,QAAUD,IAC9D,mBAAXG,QAAyBA,OAAOC,IAAMD,OAAOH,GACpDD,EAAOM,OAASL,IAHnB,CAICM,KAAM,wBAEJ,IAAIC,EA4HAC,EA1HJ,SAASC,IACL,OAAOF,EAAaG,MAAM,KAAMC,WASpC,SAASC,EAAQC,GACb,OACIA,aAAiBC,OACyB,mBAA1CC,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASM,EAASN,GAGd,OACa,MAATA,GAC0C,oBAA1CE,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASO,EAAWC,EAAGC,GACnB,OAAOP,OAAOC,UAAUO,eAAeL,KAAKG,EAAGC,GAGnD,SAASE,EAAcC,GACnB,GAAIV,OAAOW,oBACP,OAAkD,IAA3CX,OAAOW,oBAAoBD,GAAKE,OAGvC,IADA,IAAIC,KACMH,EACN,GAAIL,EAAWK,EAAKG,GAChB,OAGR,OAAO,EAIf,SAASC,EAAYhB,GACjB,YAAiB,IAAVA,EAGX,SAASiB,EAASjB,GACd,MACqB,iBAAVA,GACmC,oBAA1CE,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASkB,EAAOlB,GACZ,OACIA,aAAiBmB,MACyB,kBAA1CjB,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASoB,EAAIC,EAAKC,GAGd,IAFA,IAAIC,EAAM,GAELC,EAAI,EAAGA,EAAIH,EAAIP,SAAUU,EAC1BD,EAAIE,KAAKH,EAAGD,EAAIG,GAAIA,IAExB,OAAOD,EAGX,SAASG,EAAOlB,EAAGC,GACf,IAAK,IAAIe,KAAKf,EACNF,EAAWE,EAAGe,KACdhB,EAAEgB,GAAKf,EAAEe,IAYjB,OARIjB,EAAWE,EAAG,cACdD,EAAEJ,SAAWK,EAAEL,UAGfG,EAAWE,EAAG,aACdD,EAAEmB,QAAUlB,EAAEkB,SAGXnB,EAGX,SAASoB,EAAU5B,EAAO6B,EAAQC,EAAQC,GACtC,OAAOC,GAAiBhC,EAAO6B,EAAQC,EAAQC,GAAQ,GAAME,MAyBjE,SAASC,EAAgBC,GAIrB,OAHa,MAATA,EAAEC,MACFD,EAAEC,IAtBC,CACHC,OAAO,EACPC,aAAc,GACdC,YAAa,GACbC,UAAW,EACXC,cAAe,EACfC,WAAW,EACXC,WAAY,KACZC,aAAc,KACdC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,EACLC,gBAAiB,GACjBC,IAAK,KACLC,SAAU,KACVC,SAAS,EACTC,iBAAiB,IAQdjB,EAAEC,IAsBb,SAASiB,EAAQlB,GACb,GAAkB,MAAdA,EAAEmB,SAAkB,CACpB,IAAIC,EAAQrB,EAAgBC,GACxBqB,EAAc7D,EAAKU,KAAKkD,EAAMP,gBAAiB,SAAUxB,GACrD,OAAY,MAALA,IAEXiC,GACKC,MAAMvB,EAAEwB,GAAGC,YACZL,EAAMf,SAAW,IAChBe,EAAMlB,QACNkB,EAAMZ,aACNY,EAAMX,eACNW,EAAMM,iBACNN,EAAMH,kBACNG,EAAMb,YACNa,EAAMV,gBACNU,EAAMT,mBACLS,EAAML,UAAaK,EAAML,UAAYM,GAU/C,GARIrB,EAAE2B,UACFL,EACIA,GACwB,IAAxBF,EAAMd,eACwB,IAA9Bc,EAAMjB,aAAaxB,aACDiD,IAAlBR,EAAMS,SAGS,MAAnB9D,OAAO+D,UAAqB/D,OAAO+D,SAAS9B,GAG5C,OAAOsB,EAFPtB,EAAEmB,SAAWG,EAKrB,OAAOtB,EAAEmB,SAGb,SAASY,EAAcX,GACnB,IAAIpB,EAAIP,EAAUuC,KAOlB,OANa,MAATZ,EACA7B,EAAOQ,EAAgBC,GAAIoB,GAE3BrB,EAAgBC,GAAGW,iBAAkB,EAGlCX,EA7DPxC,EADAM,MAAME,UAAUR,KACTM,MAAME,UAAUR,KAEhB,SAAUyE,GAKb,IAJA,IAAIC,EAAInE,OAAOT,MACX6E,EAAMD,EAAEvD,SAAW,EAGlBU,EAAI,EAAGA,EAAI8C,EAAK9C,IACjB,GAAIA,KAAK6C,GAAKD,EAAI/D,KAAKZ,KAAM4E,EAAE7C,GAAIA,EAAG6C,GAClC,OAAO,EAIf,OAAO,GAqDf,IAAIE,EAAoB3E,EAAM2E,iBAAmB,GAC7CC,GAAmB,EAEvB,SAASC,EAAWC,EAAIC,GACpB,IAAInD,EAAGoD,EAAMC,EAiCb,GA/BK7D,EAAY2D,EAAKG,oBAClBJ,EAAGI,iBAAmBH,EAAKG,kBAE1B9D,EAAY2D,EAAKI,MAClBL,EAAGK,GAAKJ,EAAKI,IAEZ/D,EAAY2D,EAAKK,MAClBN,EAAGM,GAAKL,EAAKK,IAEZhE,EAAY2D,EAAKM,MAClBP,EAAGO,GAAKN,EAAKM,IAEZjE,EAAY2D,EAAKb,WAClBY,EAAGZ,QAAUa,EAAKb,SAEjB9C,EAAY2D,EAAKO,QAClBR,EAAGQ,KAAOP,EAAKO,MAEdlE,EAAY2D,EAAKQ,UAClBT,EAAGS,OAASR,EAAKQ,QAEhBnE,EAAY2D,EAAKS,WAClBV,EAAGU,QAAUT,EAAKS,SAEjBpE,EAAY2D,EAAKvC,OAClBsC,EAAGtC,IAAMF,EAAgByC,IAExB3D,EAAY2D,EAAKU,WAClBX,EAAGW,QAAUV,EAAKU,SAGQ,EAA1Bd,EAAiBzD,OACjB,IAAKU,EAAI,EAAGA,EAAI+C,EAAiBzD,OAAQU,IAGhCR,EADL6D,EAAMF,EADNC,EAAOL,EAAiB/C,OAGpBkD,EAAGE,GAAQC,GAKvB,OAAOH,EAIX,SAASY,EAAOC,GACZd,EAAWhF,KAAM8F,GACjB9F,KAAKkE,GAAK,IAAIxC,KAAkB,MAAboE,EAAO5B,GAAa4B,EAAO5B,GAAGC,UAAYO,KACxD1E,KAAK4D,YACN5D,KAAKkE,GAAK,IAAIxC,KAAKgD,OAIE,IAArBK,IACAA,GAAmB,EACnB5E,EAAM4F,aAAa/F,MACnB+E,GAAmB,GAI3B,SAASiB,EAAS7E,GACd,OACIA,aAAe0E,GAAkB,MAAP1E,GAAuC,MAAxBA,EAAIkE,iBAIrD,SAASY,EAAKC,IAEgC,IAAtC/F,EAAMgG,6BACa,oBAAZC,SACPA,QAAQH,MAERG,QAAQH,KAAK,wBAA0BC,GAI/C,SAASG,EAAUH,EAAKrE,GACpB,IAAIyE,GAAY,EAEhB,OAAOrE,EAAO,WAIV,GAHgC,MAA5B9B,EAAMoG,oBACNpG,EAAMoG,mBAAmB,KAAML,GAE/BI,EAAW,CAKX,IAJA,IACIE,EAEAC,EAHAC,EAAO,GAIN3E,EAAI,EAAGA,EAAI1B,UAAUgB,OAAQU,IAAK,CAEnC,GADAyE,EAAM,GACsB,iBAAjBnG,UAAU0B,GAAiB,CAElC,IAAK0E,KADLD,GAAO,MAAQzE,EAAI,KACP1B,UAAU,GACdS,EAAWT,UAAU,GAAIoG,KACzBD,GAAOC,EAAM,KAAOpG,UAAU,GAAGoG,GAAO,MAGhDD,EAAMA,EAAIG,MAAM,GAAI,QAEpBH,EAAMnG,UAAU0B,GAEpB2E,EAAK1E,KAAKwE,GAEdP,EACIC,EACI,gBACA1F,MAAME,UAAUiG,MAAM/F,KAAK8F,GAAME,KAAK,IACtC,MACA,IAAIC,OAAQC,OAEpBR,GAAY,EAEhB,OAAOzE,EAAGzB,MAAMJ,KAAMK,YACvBwB,GAGP,IAgFIkF,EAhFAC,EAAe,GAEnB,SAASC,EAAgBC,EAAMhB,GACK,MAA5B/F,EAAMoG,oBACNpG,EAAMoG,mBAAmBW,EAAMhB,GAE9Bc,EAAaE,KACdjB,EAAKC,GACLc,EAAaE,IAAQ,GAO7B,SAASC,EAAW5G,GAChB,MACyB,oBAAb6G,UAA4B7G,aAAiB6G,UACX,sBAA1C3G,OAAOC,UAAUC,SAASC,KAAKL,GA2BvC,SAAS8G,EAAaC,EAAcC,GAChC,IACIpC,EADArD,EAAMG,EAAO,GAAIqF,GAErB,IAAKnC,KAAQoC,EACLzG,EAAWyG,EAAapC,KACpBtE,EAASyG,EAAanC,KAAUtE,EAAS0G,EAAYpC,KACrDrD,EAAIqD,GAAQ,GACZlD,EAAOH,EAAIqD,GAAOmC,EAAanC,IAC/BlD,EAAOH,EAAIqD,GAAOoC,EAAYpC,KACF,MAArBoC,EAAYpC,GACnBrD,EAAIqD,GAAQoC,EAAYpC,UAEjBrD,EAAIqD,IAIvB,IAAKA,KAAQmC,EAELxG,EAAWwG,EAAcnC,KACxBrE,EAAWyG,EAAapC,IACzBtE,EAASyG,EAAanC,MAGtBrD,EAAIqD,GAAQlD,EAAO,GAAIH,EAAIqD,KAGnC,OAAOrD,EAGX,SAAS0F,EAAO1B,GACE,MAAVA,GACA9F,KAAKyH,IAAI3B,GAhEjB3F,EAAMgG,6BAA8B,EACpChG,EAAMoG,mBAAqB,KAsEvBQ,EADAtG,OAAOsG,KACAtG,OAAOsG,KAEP,SAAU5F,GACb,IAAIY,EACAD,EAAM,GACV,IAAKC,KAAKZ,EACFL,EAAWK,EAAKY,IAChBD,EAAIE,KAAKD,GAGjB,OAAOD,GAkBf,SAAS4F,EAASC,EAAQC,EAAcC,GACpC,IAAIC,EAAY,GAAKC,KAAKC,IAAIL,GAC1BM,EAAcL,EAAeE,EAAUzG,OAE3C,OADqB,GAAVsG,EAEEE,EAAY,IAAM,GAAM,KACjCE,KAAKG,IAAI,GAAIH,KAAKI,IAAI,EAAGF,IAActH,WAAWyH,OAAO,GACzDN,EAIR,IAAIO,EAAmB,yMACnBC,EAAwB,6CACxBC,EAAkB,GAClBC,EAAuB,GAM3B,SAASC,EAAeC,EAAOC,EAAQC,EAASC,GAC5C,IAAIC,EACoB,iBAAbD,EACA,WACH,OAAO7I,KAAK6I,MAHTA,EAMPH,IACAF,EAAqBE,GAASI,GAE9BH,IACAH,EAAqBG,EAAO,IAAM,WAC9B,OAAOjB,EAASoB,EAAK1I,MAAMJ,KAAMK,WAAYsI,EAAO,GAAIA,EAAO,MAGnEC,IACAJ,EAAqBI,GAAW,WAC5B,OAAO5I,KAAK+I,aAAaH,QACrBE,EAAK1I,MAAMJ,KAAMK,WACjBqI,KAuChB,SAASM,EAAatG,EAAGN,GACrB,OAAKM,EAAEkB,WAIPxB,EAAS6G,EAAa7G,EAAQM,EAAEqG,cAChCR,EAAgBnG,GACZmG,EAAgBnG,IAjCxB,SAA4BA,GAKxB,IAJA,IAR4B7B,EAQxB2I,EAAQ9G,EAAO+G,MAAMd,GAIpBtG,EAAI,EAAGV,EAAS6H,EAAM7H,OAAQU,EAAIV,EAAQU,IACvCyG,EAAqBU,EAAMnH,IAC3BmH,EAAMnH,GAAKyG,EAAqBU,EAAMnH,IAEtCmH,EAAMnH,IAhBcxB,EAgBc2I,EAAMnH,IAftCoH,MAAM,YACL5I,EAAM6I,QAAQ,WAAY,IAE9B7I,EAAM6I,QAAQ,MAAO,IAgB5B,OAAO,SAAUC,GAGb,IAFA,IAAIC,EAAS,GAERvH,EAAI,EAAGA,EAAIV,EAAQU,IACpBuH,GAAUnC,EAAW+B,EAAMnH,IACrBmH,EAAMnH,GAAGnB,KAAKyI,EAAKjH,GACnB8G,EAAMnH,GAEhB,OAAOuH,GAYoBC,CAAmBnH,GAE3CmG,EAAgBnG,GAAQM,IAPpBA,EAAEqG,aAAaS,cAU9B,SAASP,EAAa7G,EAAQC,GAC1B,IAAIN,EAAI,EAER,SAAS0H,EAA4BlJ,GACjC,OAAO8B,EAAOqH,eAAenJ,IAAUA,EAI3C,IADA+H,EAAsBqB,UAAY,EACtB,GAAL5H,GAAUuG,EAAsBsB,KAAKxH,IACxCA,EAASA,EAAOgH,QACZd,EACAmB,GAEJnB,EAAsBqB,UAAY,IAClC5H,EAGJ,OAAOK,EAkFX,IAAIyH,EAAU,GAEd,SAASC,EAAaC,EAAMC,GACxB,IAAIC,EAAYF,EAAKG,cACrBL,EAAQI,GAAaJ,EAAQI,EAAY,KAAOJ,EAAQG,GAAaD,EAGzE,SAASI,EAAeC,GACpB,MAAwB,iBAAVA,EACRP,EAAQO,IAAUP,EAAQO,EAAMF,oBAChC5F,EAGV,SAAS+F,EAAqBC,GAC1B,IACIC,EACApF,EAFAqF,EAAkB,GAItB,IAAKrF,KAAQmF,EACLxJ,EAAWwJ,EAAanF,KACxBoF,EAAiBJ,EAAehF,MAE5BqF,EAAgBD,GAAkBD,EAAYnF,IAK1D,OAAOqF,EAGX,IAAIC,EAAa,GAEjB,SAASC,EAAgBX,EAAMY,GAC3BF,EAAWV,GAAQY,EAiBvB,SAASC,EAAWC,GAChB,OAAQA,EAAO,GAAM,GAAKA,EAAO,KAAQ,GAAMA,EAAO,KAAQ,EAGlE,SAASC,EAASnD,GACd,OAAIA,EAAS,EAEFI,KAAKgD,KAAKpD,IAAW,EAErBI,KAAKiD,MAAMrD,GAI1B,SAASsD,EAAMC,GACX,IAAIC,GAAiBD,EACjBE,EAAQ,EAMZ,OAJsB,GAAlBD,GAAuBE,SAASF,KAChCC,EAAQN,EAASK,IAGdC,EAGX,SAASE,EAAWvB,EAAMwB,GACtB,OAAO,SAAUH,GACb,OAAa,MAATA,GACAI,EAAMxL,KAAM+J,EAAMqB,GAClBjL,EAAM4F,aAAa/F,KAAMuL,GAClBvL,MAEAyL,EAAIzL,KAAM+J,IAK7B,SAAS0B,EAAIpC,EAAKU,GACd,OAAOV,EAAIzF,UACLyF,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,KAC3CrF,IAGV,SAAS8G,EAAMnC,EAAKU,EAAMqB,GAClB/B,EAAIzF,YAAcK,MAAMmH,KAEX,aAATrB,GACAa,EAAWvB,EAAIwB,SACC,IAAhBxB,EAAIqC,SACW,KAAfrC,EAAIsC,QAEJP,EAAQH,EAAMG,GACd/B,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,GACvCqB,EACA/B,EAAIqC,QACJE,GAAYR,EAAO/B,EAAIqC,WAG3BrC,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,GAAMqB,IAgC7D,IAmBIS,EAnBAC,EAAS,KACTC,EAAS,OACTC,EAAS,QACTC,EAAS,QACTC,GAAS,aACTC,GAAY,QACZC,GAAY,YACZC,GAAY,gBACZC,GAAY,UACZC,GAAY,UACZC,GAAY,eACZC,GAAgB,MAChBC,GAAc,WACdC,GAAc,qBACdC,GAAmB,0BAInBC,GAAY,wJAKhB,SAASC,GAAcpE,EAAOqE,EAAOC,GACjCnB,EAAQnD,GAASvB,EAAW4F,GACtBA,EACA,SAAUE,EAAUlE,GAChB,OAAOkE,GAAYD,EAAcA,EAAcD,GAI7D,SAASG,GAAsBxE,EAAO5C,GAClC,OAAKhF,EAAW+K,EAASnD,GAIlBmD,EAAQnD,GAAO5C,EAAOzB,QAASyB,EAAOF,SAHlC,IAAIuH,OAQRC,GAR8B1E,EAU5BU,QAAQ,KAAM,IACdA,QAAQ,sCAAuC,SAC5CiE,EACAC,EACAC,EACAC,EACAC,GAEA,OAAOH,GAAMC,GAAMC,GAAMC,MAKzC,SAASL,GAAYM,GACjB,OAAOA,EAAEtE,QAAQ,yBAA0B,QApC/CyC,EAAU,GAuCV,IAAI8B,GAAS,GAEb,SAASC,GAAclF,EAAOG,GAC1B,IAAI9G,EACA+G,EAAOD,EASX,IARqB,iBAAVH,IACPA,EAAQ,CAACA,IAETlH,EAASqH,KACTC,EAAO,SAAUvI,EAAO2I,GACpBA,EAAML,GAAYoC,EAAM1K,KAG3BwB,EAAI,EAAGA,EAAI2G,EAAMrH,OAAQU,IAC1B4L,GAAOjF,EAAM3G,IAAM+G,EAI3B,SAAS+E,GAAkBnF,EAAOG,GAC9B+E,GAAclF,EAAO,SAAUnI,EAAO2I,EAAOpD,EAAQ4C,GACjD5C,EAAOgI,GAAKhI,EAAOgI,IAAM,GACzBjF,EAAStI,EAAOuF,EAAOgI,GAAIhI,EAAQ4C,KAU3C,IAcIqF,GAdAC,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdC,GAAO,EACPC,GAAU,EAuBd,SAAS5C,GAAYf,EAAMa,GACvB,GAAIzH,MAAM4G,IAAS5G,MAAMyH,GACrB,OAAOhH,IAEX,IAzBY+J,EAyBRC,GAAehD,GAzBP+C,EAyBc,IAxBRA,GAAKA,EA0BvB,OADA5D,IAASa,EAAQgD,GAAY,GACT,GAAbA,EACD9D,EAAWC,GACP,GACA,GACJ,GAAO6D,EAAW,EAAK,EAxB7BX,GADAvN,MAAME,UAAUqN,QACNvN,MAAME,UAAUqN,QAEhB,SAAUY,GAGhB,IADA,IACK5M,EAAI,EAAGA,EAAI/B,KAAKqB,SAAUU,EAC3B,GAAI/B,KAAK+B,KAAO4M,EACZ,OAAO5M,EAGf,OAAQ,GAmBhB0G,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WACjC,OAAOzI,KAAK0L,QAAU,IAG1BjD,EAAe,MAAO,EAAG,EAAG,SAAUrG,GAClC,OAAOpC,KAAK+I,aAAa6F,YAAY5O,KAAMoC,KAG/CqG,EAAe,OAAQ,EAAG,EAAG,SAAUrG,GACnC,OAAOpC,KAAK+I,aAAa8F,OAAO7O,KAAMoC,KAK1C0H,EAAa,QAAS,KAItBY,EAAgB,QAAS,GAIzBoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,MAAO,SAAUG,EAAU5K,GACrC,OAAOA,EAAOyM,iBAAiB7B,KAEnCH,GAAc,OAAQ,SAAUG,EAAU5K,GACtC,OAAOA,EAAO0M,YAAY9B,KAG9BW,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,GACxCA,EAAM+E,IAAShD,EAAM1K,GAAS,IAGlCqN,GAAc,CAAC,MAAO,QAAS,SAAUrN,EAAO2I,EAAOpD,EAAQ4C,GAC3D,IAAIgD,EAAQ5F,EAAOF,QAAQoJ,YAAYzO,EAAOmI,EAAO5C,EAAOzB,SAE/C,MAATqH,EACAxC,EAAM+E,IAASvC,EAEfjJ,EAAgBqD,GAAQ3C,aAAe5C,IAM/C,IAAI0O,GAAsB,wFAAwFC,MAC1G,KAEJC,GAA2B,kDAAkDD,MACzE,KAEJE,GAAmB,gCACnBC,GAA0BxC,GAC1ByC,GAAqBzC,GAoIzB,SAAS0C,GAASlG,EAAK+B,GACnB,IAAIoE,EAEJ,IAAKnG,EAAIzF,UAEL,OAAOyF,EAGX,GAAqB,iBAAV+B,EACP,GAAI,QAAQxB,KAAKwB,GACbA,EAAQH,EAAMG,QAId,IAAK5J,EAFL4J,EAAQ/B,EAAIN,aAAaiG,YAAY5D,IAGjC,OAAO/B,EAOnB,OAFAmG,EAAazH,KAAK0H,IAAIpG,EAAIsC,OAAQC,GAAYvC,EAAIwB,OAAQO,IAC1D/B,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAM,SAAS0F,EAAOoE,GACpDnG,EAGX,SAASqG,GAAYtE,GACjB,OAAa,MAATA,GACAmE,GAASvP,KAAMoL,GACfjL,EAAM4F,aAAa/F,MAAM,GAClBA,MAEAyL,EAAIzL,KAAM,SAgDzB,SAAS2P,KACL,SAASC,EAAU7O,EAAGC,GAClB,OAAOA,EAAEK,OAASN,EAAEM,OAQxB,IALA,IAIIgI,EAJAwG,EAAc,GACdC,EAAa,GACbC,EAAc,GAGbhO,EAAI,EAAGA,EAAI,GAAIA,IAEhBsH,EAAMlH,EAAU,CAAC,IAAMJ,IACvB8N,EAAY7N,KAAKhC,KAAK4O,YAAYvF,EAAK,KACvCyG,EAAW9N,KAAKhC,KAAK6O,OAAOxF,EAAK,KACjC0G,EAAY/N,KAAKhC,KAAK6O,OAAOxF,EAAK,KAClC0G,EAAY/N,KAAKhC,KAAK4O,YAAYvF,EAAK,KAO3C,IAHAwG,EAAYG,KAAKJ,GACjBE,EAAWE,KAAKJ,GAChBG,EAAYC,KAAKJ,GACZ7N,EAAI,EAAGA,EAAI,GAAIA,IAChB8N,EAAY9N,GAAKqL,GAAYyC,EAAY9N,IACzC+N,EAAW/N,GAAKqL,GAAY0C,EAAW/N,IAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBgO,EAAYhO,GAAKqL,GAAY2C,EAAYhO,IAG7C/B,KAAKiQ,aAAe,IAAI9C,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACnE5G,KAAKkQ,kBAAoBlQ,KAAKiQ,aAC9BjQ,KAAKmQ,mBAAqB,IAAIhD,OAC1B,KAAO2C,EAAWlJ,KAAK,KAAO,IAC9B,KAEJ5G,KAAKoQ,wBAA0B,IAAIjD,OAC/B,KAAO0C,EAAYjJ,KAAK,KAAO,IAC/B,KAiDR,SAASyJ,GAAWxF,GAChB,OAAOD,EAAWC,GAAQ,IAAM,IA5CpCpC,EAAe,IAAK,EAAG,EAAG,WACtB,IAAI6H,EAAItQ,KAAK6K,OACb,OAAOyF,GAAK,KAAO5I,EAAS4I,EAAG,GAAK,IAAMA,IAG9C7H,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAK6K,OAAS,MAGzBpC,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,QAClCA,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,QACnCA,EAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1CqB,EAAa,OAAQ,KAIrBY,EAAgB,OAAQ,GAIxBoC,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,GACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,SAAUN,GAAWN,IAEnC0B,GAAc,CAAC,QAAS,UAAWI,IACnCJ,GAAc,OAAQ,SAAUrN,EAAO2I,GACnCA,EAAM8E,IACe,IAAjBzN,EAAMc,OAAelB,EAAMoQ,kBAAkBhQ,GAAS0K,EAAM1K,KAEpEqN,GAAc,KAAM,SAAUrN,EAAO2I,GACjCA,EAAM8E,IAAQ7N,EAAMoQ,kBAAkBhQ,KAE1CqN,GAAc,IAAK,SAAUrN,EAAO2I,GAChCA,EAAM8E,IAAQwC,SAASjQ,EAAO,MAWlCJ,EAAMoQ,kBAAoB,SAAUhQ,GAChC,OAAO0K,EAAM1K,IAAyB,GAAf0K,EAAM1K,GAAc,KAAO,MAKtD,IAAIkQ,GAAanF,EAAW,YAAY,GAwBxC,SAASoF,GAAcJ,GACnB,IAAI3E,EAAMjF,EAcV,OAZI4J,EAAI,KAAY,GAALA,IACX5J,EAAOlG,MAAME,UAAUiG,MAAM/F,KAAKP,YAE7B,GAAKiQ,EAAI,IACd3E,EAAO,IAAIjK,KAAKA,KAAKiP,IAAIvQ,MAAM,KAAMsG,IACjC2E,SAASM,EAAKiF,mBACdjF,EAAKkF,eAAeP,IAGxB3E,EAAO,IAAIjK,KAAKA,KAAKiP,IAAIvQ,MAAM,KAAMC,YAGlCsL,EAIX,SAASmF,GAAgBjG,EAAMkG,EAAKC,GAChC,IACIC,EAAM,EAAIF,EAAMC,EAIpB,OAAgBC,GAFH,EAAIP,GAAc7F,EAAM,EAAGoG,GAAKC,YAAcH,GAAO,EAE5C,EAI1B,SAASI,GAAmBtG,EAAMuG,EAAMC,EAASN,EAAKC,GAClD,IAGIM,EADAC,EAAY,EAAI,GAAKH,EAAO,IAFZ,EAAIC,EAAUN,GAAO,EACxBD,GAAgBjG,EAAMkG,EAAKC,GAOxCQ,EAFAD,GAAa,EAEElB,GADfiB,EAAUzG,EAAO,GACoB0G,EAC9BA,EAAYlB,GAAWxF,IAC9ByG,EAAUzG,EAAO,EACF0G,EAAYlB,GAAWxF,KAEtCyG,EAAUzG,EACK0G,GAGnB,MAAO,CACH1G,KAAMyG,EACNC,UAAWC,GAInB,SAASC,GAAWpI,EAAK0H,EAAKC,GAC1B,IAEIU,EACAJ,EAHAK,EAAab,GAAgBzH,EAAIwB,OAAQkG,EAAKC,GAC9CI,EAAOrJ,KAAKiD,OAAO3B,EAAIkI,YAAcI,EAAa,GAAK,GAAK,EAehE,OAXIP,EAAO,EAEPM,EAAUN,EAAOQ,GADjBN,EAAUjI,EAAIwB,OAAS,EACekG,EAAKC,GACpCI,EAAOQ,GAAYvI,EAAIwB,OAAQkG,EAAKC,IAC3CU,EAAUN,EAAOQ,GAAYvI,EAAIwB,OAAQkG,EAAKC,GAC9CM,EAAUjI,EAAIwB,OAAS,IAEvByG,EAAUjI,EAAIwB,OACd6G,EAAUN,GAGP,CACHA,KAAMM,EACN7G,KAAMyG,GAId,SAASM,GAAY/G,EAAMkG,EAAKC,GAC5B,IAAIW,EAAab,GAAgBjG,EAAMkG,EAAKC,GACxCa,EAAiBf,GAAgBjG,EAAO,EAAGkG,EAAKC,GACpD,OAAQX,GAAWxF,GAAQ8G,EAAaE,GAAkB,EAK9DpJ,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrCqB,EAAa,OAAQ,KACrBA,EAAa,UAAW,KAIxBY,EAAgB,OAAQ,GACxBA,EAAgB,UAAW,GAI3BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAE/B8B,GAAkB,CAAC,IAAK,KAAM,IAAK,MAAO,SACtCtN,EACA6Q,EACAtL,EACA4C,GAEA0I,EAAK1I,EAAMN,OAAO,EAAG,IAAM6C,EAAM1K,KA0HrC,SAASuR,GAAcC,EAAIC,GACvB,OAAOD,EAAGpL,MAAMqL,EAAG,GAAGC,OAAOF,EAAGpL,MAAM,EAAGqL,IArF7CvJ,EAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,EAAG,SAAUrG,GACjC,OAAOpC,KAAK+I,aAAamJ,YAAYlS,KAAMoC,KAG/CqG,EAAe,MAAO,EAAG,EAAG,SAAUrG,GAClC,OAAOpC,KAAK+I,aAAaoJ,cAAcnS,KAAMoC,KAGjDqG,EAAe,OAAQ,EAAG,EAAG,SAAUrG,GACnC,OAAOpC,KAAK+I,aAAaqJ,SAASpS,KAAMoC,KAG5CqG,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1BqB,EAAa,MAAO,KACpBA,EAAa,UAAW,KACxBA,EAAa,aAAc,KAG3BY,EAAgB,MAAO,IACvBA,EAAgB,UAAW,IAC3BA,EAAgB,aAAc,IAI9BoC,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,KAAM,SAAUG,EAAU5K,GACpC,OAAOA,EAAOgQ,iBAAiBpF,KAEnCH,GAAc,MAAO,SAAUG,EAAU5K,GACrC,OAAOA,EAAOiQ,mBAAmBrF,KAErCH,GAAc,OAAQ,SAAUG,EAAU5K,GACtC,OAAOA,EAAOkQ,cAActF,KAGhCY,GAAkB,CAAC,KAAM,MAAO,QAAS,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GACpE,IAAI2I,EAAUvL,EAAOF,QAAQ4M,cAAcjS,EAAOmI,EAAO5C,EAAOzB,SAEjD,MAAXgN,EACAD,EAAKqB,EAAIpB,EAET5O,EAAgBqD,GAAQ1B,eAAiB7D,IAIjDsN,GAAkB,CAAC,IAAK,IAAK,KAAM,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GAC9D0I,EAAK1I,GAASuC,EAAM1K,KAkCxB,IAAImS,GAAwB,2DAA2DxD,MAC/E,KAEJyD,GAA6B,8BAA8BzD,MAAM,KACjE0D,GAA2B,uBAAuB1D,MAAM,KACxD2D,GAAuBhG,GACvBiG,GAA4BjG,GAC5BkG,GAA0BlG,GAiR9B,SAASmG,KACL,SAASpD,EAAU7O,EAAGC,GAClB,OAAOA,EAAEK,OAASN,EAAEM,OAYxB,IATA,IAKIgI,EACA4J,EACAC,EACAC,EARAC,EAAY,GACZvD,EAAc,GACdC,EAAa,GACbC,EAAc,GAMbhO,EAAI,EAAGA,EAAI,EAAGA,IAEfsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC/BkR,EAAO7F,GAAYpN,KAAKkS,YAAY7I,EAAK,KACzC6J,EAAS9F,GAAYpN,KAAKmS,cAAc9I,EAAK,KAC7C8J,EAAQ/F,GAAYpN,KAAKoS,SAAS/I,EAAK,KACvC+J,EAAUpR,KAAKiR,GACfpD,EAAY7N,KAAKkR,GACjBpD,EAAW9N,KAAKmR,GAChBpD,EAAY/N,KAAKiR,GACjBlD,EAAY/N,KAAKkR,GACjBnD,EAAY/N,KAAKmR,GAIrBC,EAAUpD,KAAKJ,GACfC,EAAYG,KAAKJ,GACjBE,EAAWE,KAAKJ,GAChBG,EAAYC,KAAKJ,GAEjB5P,KAAKsT,eAAiB,IAAInG,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACrE5G,KAAKuT,oBAAsBvT,KAAKsT,eAChCtT,KAAKwT,kBAAoBxT,KAAKsT,eAE9BtT,KAAKyT,qBAAuB,IAAItG,OAC5B,KAAO2C,EAAWlJ,KAAK,KAAO,IAC9B,KAEJ5G,KAAK0T,0BAA4B,IAAIvG,OACjC,KAAO0C,EAAYjJ,KAAK,KAAO,IAC/B,KAEJ5G,KAAK2T,wBAA0B,IAAIxG,OAC/B,KAAOiG,EAAUxM,KAAK,KAAO,IAC7B,KAMR,SAASgN,KACL,OAAO5T,KAAK6T,QAAU,IAAM,GAqChC,SAASpQ,GAASiF,EAAOoL,GACrBrL,EAAeC,EAAO,EAAG,EAAG,WACxB,OAAO1I,KAAK+I,aAAatF,SACrBzD,KAAK6T,QACL7T,KAAK+T,UACLD,KAiBZ,SAASE,GAAc/G,EAAU5K,GAC7B,OAAOA,EAAO4R,eArDlBxL,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGmL,IAClCnL,EAAe,IAAK,CAAC,KAAM,GAAI,EAN/B,WACI,OAAOzI,KAAK6T,SAAW,KAO3BpL,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAKmL,GAAQxT,MAAMJ,MAAQ0H,EAAS1H,KAAK+T,UAAW,KAG/DtL,EAAe,QAAS,EAAG,EAAG,WAC1B,MACI,GACAmL,GAAQxT,MAAMJ,MACd0H,EAAS1H,KAAK+T,UAAW,GACzBrM,EAAS1H,KAAKkU,UAAW,KAIjCzL,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAKzI,KAAK6T,QAAUnM,EAAS1H,KAAK+T,UAAW,KAGxDtL,EAAe,QAAS,EAAG,EAAG,WAC1B,MACI,GACAzI,KAAK6T,QACLnM,EAAS1H,KAAK+T,UAAW,GACzBrM,EAAS1H,KAAKkU,UAAW,KAcjCzQ,GAAS,KAAK,GACdA,GAAS,KAAK,GAIdqG,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,IAQxBoC,GAAc,IAAKkH,IACnBlH,GAAc,IAAKkH,IACnBlH,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAE/Be,GAAc,MAAOV,IACrBU,GAAc,QAAST,IACvBS,GAAc,MAAOV,IACrBU,GAAc,QAAST,IAEvBuB,GAAc,CAAC,IAAK,MAAOO,IAC3BP,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/C,IAAIqO,EAASlJ,EAAM1K,GACnB2I,EAAMiF,IAAmB,KAAXgG,EAAgB,EAAIA,IAEtCvG,GAAc,CAAC,IAAK,KAAM,SAAUrN,EAAO2I,EAAOpD,GAC9CA,EAAOsO,MAAQtO,EAAOF,QAAQyO,KAAK9T,GACnCuF,EAAOwO,UAAY/T,IAEvBqN,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/CoD,EAAMiF,IAAQlD,EAAM1K,GACpBkC,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,MAAO,SAAUrN,EAAO2I,EAAOpD,GACzC,IAAIyO,EAAMhU,EAAMc,OAAS,EACzB6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGmM,IACpCrL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOmM,IACnC9R,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,QAAS,SAAUrN,EAAO2I,EAAOpD,GAC3C,IAAI0O,EAAOjU,EAAMc,OAAS,EACtBoT,EAAOlU,EAAMc,OAAS,EAC1B6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGoM,IACpCtL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOoM,EAAM,IACzCtL,EAAMmF,IAAUpD,EAAM1K,EAAM6H,OAAOqM,IACnChS,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,MAAO,SAAUrN,EAAO2I,EAAOpD,GACzC,IAAIyO,EAAMhU,EAAMc,OAAS,EACzB6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGmM,IACpCrL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOmM,MAEvC3G,GAAc,QAAS,SAAUrN,EAAO2I,EAAOpD,GAC3C,IAAI0O,EAAOjU,EAAMc,OAAS,EACtBoT,EAAOlU,EAAMc,OAAS,EAC1B6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGoM,IACpCtL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOoM,EAAM,IACzCtL,EAAMmF,IAAUpD,EAAM1K,EAAM6H,OAAOqM,MAWvC,IAKIC,GAAapJ,EAAW,SAAS,GAUrC,IAuBIqJ,GAvBAC,GAAa,CACbC,SA7iDkB,CAClBC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAwiDVzL,eAl7CwB,CACxB0L,IAAK,YACLC,GAAI,SACJC,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BA66CNjM,YAh5CqB,eAi5CrBZ,QA34CiB,KA44CjB8M,uBA34CgC,UA44ChCC,aAt4CsB,CACtBC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAw3CJ1H,OAAQI,GACRL,YAAaO,GAEbiC,KAzlBoB,CACpBL,IAAK,EACLC,IAAK,GAylBLoB,SAAUM,GACVR,YAAaU,GACbT,cAAeQ,GAEf6D,cAhC6B,iBAoC7BC,GAAU,GACVC,GAAiB,GAcrB,SAASC,GAAgBlQ,GACrB,OAAOA,EAAMA,EAAIyD,cAAcd,QAAQ,IAAK,KAAO3C,EAMvD,SAASmQ,GAAaC,GAOlB,IANA,IACIC,EACAC,EACA1U,EACA6M,EAJAnN,EAAI,EAMDA,EAAI8U,EAAMxV,QAAQ,CAKrB,IAHAyV,GADA5H,EAAQyH,GAAgBE,EAAM9U,IAAImN,MAAM,MAC9B7N,OAEV0V,GADAA,EAAOJ,GAAgBE,EAAM9U,EAAI,KACnBgV,EAAK7H,MAAM,KAAO,KACrB,EAAJ4H,GAAO,CAEV,GADAzU,EAAS2U,GAAW9H,EAAMvI,MAAM,EAAGmQ,GAAGlQ,KAAK,MAEvC,OAAOvE,EAEX,GACI0U,GACAA,EAAK1V,QAAUyV,GArC/B,SAAsBG,EAAMC,GAGxB,IAFA,IACIC,EAAOpP,KAAK0H,IAAIwH,EAAK5V,OAAQ6V,EAAK7V,QACjCU,EAAI,EAAGA,EAAIoV,EAAMpV,GAAK,EACvB,GAAIkV,EAAKlV,KAAOmV,EAAKnV,GACjB,OAAOA,EAGf,OAAOoV,EA8BKC,CAAalI,EAAO6H,IAASD,EAAI,EAGjC,MAEJA,IAEJ/U,IAEJ,OAAO4S,GAGX,SAASqC,GAAW9P,GAChB,IAAImQ,EAGJ,QACsB/S,IAAlBmS,GAAQvP,IACU,oBAAXtH,QACPA,QACAA,OAAOD,QAEP,IACI0X,EAAY1C,GAAa2C,MACRC,QACF,YAAcrQ,GAC7BsQ,GAAmBH,GACrB,MAAOI,GAGLhB,GAAQvP,GAAQ,KAGxB,OAAOuP,GAAQvP,GAMnB,SAASsQ,GAAmB/Q,EAAKiR,GAC7B,IAAIC,EAqBJ,OApBIlR,KAEIkR,EADApW,EAAYmW,GACLE,GAAUnR,GAEVoR,GAAapR,EAAKiR,IAKzB/C,GAAegD,EAEQ,oBAAZvR,SAA2BA,QAAQH,MAE1CG,QAAQH,KACJ,UAAYQ,EAAM,2CAM3BkO,GAAa2C,MAGxB,SAASO,GAAa3Q,EAAMpB,GACxB,GAAe,OAAXA,EAiDA,cADO2Q,GAAQvP,GACR,KAhDP,IAAI7E,EACAiF,EAAesN,GAEnB,GADA9O,EAAOgS,KAAO5Q,EACO,MAAjBuP,GAAQvP,GACRD,EACI,uBACA,2OAKJK,EAAemP,GAAQvP,GAAM6Q,aAC1B,GAA2B,MAAvBjS,EAAOkS,aACd,GAAoC,MAAhCvB,GAAQ3Q,EAAOkS,cACf1Q,EAAemP,GAAQ3Q,EAAOkS,cAAcD,YACzC,CAEH,GAAc,OADd1V,EAAS2U,GAAWlR,EAAOkS,eAWvB,OAPKtB,GAAe5Q,EAAOkS,gBACvBtB,GAAe5Q,EAAOkS,cAAgB,IAE1CtB,GAAe5Q,EAAOkS,cAAchW,KAAK,CACrCkF,KAAMA,EACNpB,OAAQA,IAEL,KATPwB,EAAejF,EAAO0V,QA0BlC,OAbAtB,GAAQvP,GAAQ,IAAIM,EAAOH,EAAaC,EAAcxB,IAElD4Q,GAAexP,IACfwP,GAAexP,GAAM+Q,QAAQ,SAAUxJ,GACnCoJ,GAAapJ,EAAEvH,KAAMuH,EAAE3I,UAO/B0R,GAAmBtQ,GAEZuP,GAAQvP,GAsDvB,SAAS0Q,GAAUnR,GACf,IAAIpE,EAMJ,GAJIoE,GAAOA,EAAIb,SAAWa,EAAIb,QAAQ0R,QAClC7Q,EAAMA,EAAIb,QAAQ0R,QAGjB7Q,EACD,OAAOkO,GAGX,IAAKrU,EAAQmG,GAAM,CAGf,GADApE,EAAS2U,GAAWvQ,GAEhB,OAAOpE,EAEXoE,EAAM,CAACA,GAGX,OAAOmQ,GAAanQ,GAOxB,SAASyR,GAAcxV,GACnB,IAAIK,EACAhC,EAAI2B,EAAEyV,GAuCV,OArCIpX,IAAsC,IAAjC0B,EAAgBC,GAAGK,WACxBA,EACIhC,EAAEkN,IAAS,GAAgB,GAAXlN,EAAEkN,IACZA,GACAlN,EAAEmN,IAAQ,GAAKnN,EAAEmN,IAAQtC,GAAY7K,EAAEiN,IAAOjN,EAAEkN,KAChDC,GACAnN,EAAEoN,IAAQ,GACA,GAAVpN,EAAEoN,KACW,KAAZpN,EAAEoN,MACgB,IAAdpN,EAAEqN,KACe,IAAdrN,EAAEsN,KACiB,IAAnBtN,EAAEuN,KACVH,GACApN,EAAEqN,IAAU,GAAiB,GAAZrN,EAAEqN,IACnBA,GACArN,EAAEsN,IAAU,GAAiB,GAAZtN,EAAEsN,IACnBA,GACAtN,EAAEuN,IAAe,GAAsB,IAAjBvN,EAAEuN,IACxBA,IACC,EAGP7L,EAAgBC,GAAG0V,qBAClBrV,EAAWiL,IAAmBE,GAAXnL,KAEpBA,EAAWmL,IAEXzL,EAAgBC,GAAG2V,iBAAgC,IAAdtV,IACrCA,EAAWwL,IAEX9L,EAAgBC,GAAG4V,mBAAkC,IAAdvV,IACvCA,EAAWyL,IAGf/L,EAAgBC,GAAGK,SAAWA,GAG3BL,EAKX,IAAI6V,GAAmB,iJACnBC,GAAgB,6IAChBC,GAAU,wBACVC,GAAW,CACP,CAAC,eAAgB,uBACjB,CAAC,aAAc,mBACf,CAAC,eAAgB,kBACjB,CAAC,aAAc,eAAe,GAC9B,CAAC,WAAY,eACb,CAAC,UAAW,cAAc,GAC1B,CAAC,aAAc,cACf,CAAC,WAAY,SACb,CAAC,aAAc,eACf,CAAC,YAAa,eAAe,GAC7B,CAAC,UAAW,SACZ,CAAC,SAAU,SAAS,GACpB,CAAC,OAAQ,SAAS,IAGtBC,GAAW,CACP,CAAC,gBAAiB,uBAClB,CAAC,gBAAiB,sBAClB,CAAC,WAAY,kBACb,CAAC,QAAS,aACV,CAAC,cAAe,qBAChB,CAAC,cAAe,oBAChB,CAAC,SAAU,gBACX,CAAC,OAAQ,YACT,CAAC,KAAM,SAEXC,GAAkB,qBAElBlV,GAAU,0LACVmV,GAAa,CACTC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAIb,SAASC,GAAc1T,GACnB,IAAI/D,EACA0X,EAGAC,EACAC,EACAC,EACAC,EALAC,EAAShU,EAAOR,GAChB6D,EAAQoP,GAAiBwB,KAAKD,IAAWtB,GAAcuB,KAAKD,GAMhE,GAAI3Q,EAAO,CAGP,IAFA1G,EAAgBqD,GAAQxC,KAAM,EAEzBvB,EAAI,EAAG0X,EAAIf,GAASrX,OAAQU,EAAI0X,EAAG1X,IACpC,GAAI2W,GAAS3W,GAAG,GAAGgY,KAAK5Q,EAAM,IAAK,CAC/BwQ,EAAajB,GAAS3W,GAAG,GACzB2X,GAA+B,IAAnBhB,GAAS3W,GAAG,GACxB,MAGR,GAAkB,MAAd4X,EAEA,YADA7T,EAAOjC,UAAW,GAGtB,GAAIsF,EAAM,GAAI,CACV,IAAKpH,EAAI,EAAG0X,EAAId,GAAStX,OAAQU,EAAI0X,EAAG1X,IACpC,GAAI4W,GAAS5W,GAAG,GAAGgY,KAAK5Q,EAAM,IAAK,CAE/ByQ,GAAczQ,EAAM,IAAM,KAAOwP,GAAS5W,GAAG,GAC7C,MAGR,GAAkB,MAAd6X,EAEA,YADA9T,EAAOjC,UAAW,GAI1B,IAAK6V,GAA2B,MAAdE,EAEd,YADA9T,EAAOjC,UAAW,GAGtB,GAAIsF,EAAM,GAAI,CACV,IAAIsP,GAAQsB,KAAK5Q,EAAM,IAInB,YADArD,EAAOjC,UAAW,GAFlBgW,EAAW,IAMnB/T,EAAOP,GAAKoU,GAAcC,GAAc,KAAOC,GAAY,IAC3DG,GAA0BlU,QAE1BA,EAAOjC,UAAW,EAI1B,SAASoW,GACLC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIC,EAAS,CAejB,SAAwBN,GACpB,IAAIrP,EAAO2F,SAAS0J,EAAS,IAC7B,CAAA,GAAIrP,GAAQ,GACR,OAAO,IAAOA,EACX,GAAIA,GAAQ,IACf,OAAO,KAAOA,EAElB,OAAOA,EArBH4P,CAAeP,GACf/K,GAAyBpB,QAAQoM,GACjC3J,SAAS4J,EAAQ,IACjB5J,SAAS6J,EAAS,IAClB7J,SAAS8J,EAAW,KAOxB,OAJIC,GACAC,EAAOxY,KAAKwO,SAAS+J,EAAW,KAG7BC,EAuDX,SAASE,GAAkB5U,GACvB,IACI6U,EAnCcC,EAAYC,EAAa/U,EAkCvCqD,EAAQzF,GAAQqW,KAAuBjU,EAAOR,GAxC7C8D,QAAQ,oBAAqB,KAC7BA,QAAQ,WAAY,KACpBA,QAAQ,SAAU,IAClBA,QAAQ,SAAU,KAuCvB,GAAID,EAAO,CASP,GARAwR,EAAcV,GACV9Q,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,IA3CIyR,EA6CIzR,EAAM,GA7CE0R,EA6CEF,EA7CW7U,EA6CEA,EA5CzC8U,GAEsBjI,GAA2B5E,QAAQ6M,KACrC,IAAIlZ,KAChBmZ,EAAY,GACZA,EAAY,GACZA,EAAY,IACdC,WAEFrY,EAAgBqD,GAAQnC,iBAAkB,QAC1CmC,EAAOjC,UAAW,IAmClB,OAGJiC,EAAOqS,GAAKwC,EACZ7U,EAAOL,KAhCf,SAAyBsV,EAAWC,EAAgBC,GAChD,GAAIF,EACA,OAAOlC,GAAWkC,GACf,GAAIC,EAEP,OAAO,EAEP,IAAIE,EAAK1K,SAASyK,EAAW,IACzBvY,EAAIwY,EAAK,IAEb,OAAW,KADFA,EAAKxY,GAAK,KACHA,EAsBFyY,CAAgBhS,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAExDrD,EAAO5B,GAAKwM,GAActQ,MAAM,KAAM0F,EAAOqS,IAC7CrS,EAAO5B,GAAGkX,cAActV,EAAO5B,GAAGmX,gBAAkBvV,EAAOL,MAE3DhD,EAAgBqD,GAAQpC,SAAU,OAElCoC,EAAOjC,UAAW,EA4C1B,SAASyX,GAASva,EAAGC,EAAGua,GACpB,OAAS,MAALxa,EACOA,EAEF,MAALC,EACOA,EAEJua,EAoBX,SAASC,GAAgB1V,GACrB,IAAI/D,EACA4J,EAEA8P,EACAC,EACAC,EAvBkB7V,EAElB8V,EAkBArb,EAAQ,GAKZ,IAAIuF,EAAO5B,GAAX,CAgCA,IAzDsB4B,EA6BSA,EA3B3B8V,EAAW,IAAIla,KAAKvB,EAAM0b,OA2B9BJ,EA1BI3V,EAAOgW,QACA,CACHF,EAAShL,iBACTgL,EAASG,cACTH,EAASI,cAGV,CAACJ,EAASK,cAAeL,EAASM,WAAYN,EAASO,WAsB1DrW,EAAOgI,IAAyB,MAAnBhI,EAAOqS,GAAGjK,KAAqC,MAApBpI,EAAOqS,GAAGlK,KA0E1D,SAA+BnI,GAC3B,IAAIqQ,EAAGiG,EAAUhL,EAAMC,EAASN,EAAKC,EAAKqL,EAAMC,EAAiBC,EAGrD,OADZpG,EAAIrQ,EAAOgI,IACL0O,IAAqB,MAAPrG,EAAEsG,GAAoB,MAAPtG,EAAEuG,GACjC3L,EAAM,EACNC,EAAM,EAMNoL,EAAWd,GACPnF,EAAEqG,GACF1W,EAAOqS,GAAGnK,IACVyD,GAAWkL,KAAe,EAAG,GAAG9R,MAEpCuG,EAAOkK,GAASnF,EAAEsG,EAAG,KACrBpL,EAAUiK,GAASnF,EAAEuG,EAAG,IACV,GAAe,EAAVrL,KACfiL,GAAkB,KAGtBvL,EAAMjL,EAAOF,QAAQgX,MAAM7L,IAC3BC,EAAMlL,EAAOF,QAAQgX,MAAM5L,IAE3BuL,EAAU9K,GAAWkL,KAAe5L,EAAKC,GAEzCoL,EAAWd,GAASnF,EAAE0G,GAAI/W,EAAOqS,GAAGnK,IAAOuO,EAAQ1R,MAGnDuG,EAAOkK,GAASnF,EAAEA,EAAGoG,EAAQnL,MAElB,MAAP+E,EAAE1D,IAEFpB,EAAU8E,EAAE1D,GACE,GAAe,EAAVpB,KACfiL,GAAkB,GAER,MAAPnG,EAAEsB,GAETpG,EAAU8E,EAAEsB,EAAI1G,GACZoF,EAAEsB,EAAI,GAAW,EAANtB,EAAEsB,KACb6E,GAAkB,IAItBjL,EAAUN,GAGdK,EAAO,GAAKA,EAAOQ,GAAYwK,EAAUrL,EAAKC,GAC9CvO,EAAgBqD,GAAQuS,gBAAiB,EACf,MAAnBiE,EACP7Z,EAAgBqD,GAAQwS,kBAAmB,GAE3C+D,EAAOlL,GAAmBiL,EAAUhL,EAAMC,EAASN,EAAKC,GACxDlL,EAAOqS,GAAGnK,IAAQqO,EAAKxR,KACvB/E,EAAOgX,WAAaT,EAAK9K,WAlIzBwL,CAAsBjX,GAID,MAArBA,EAAOgX,aACPnB,EAAYL,GAASxV,EAAOqS,GAAGnK,IAAOyN,EAAYzN,MAG9ClI,EAAOgX,WAAazM,GAAWsL,IACT,IAAtB7V,EAAOgX,cAEPra,EAAgBqD,GAAQsS,oBAAqB,GAGjDzM,EAAO+E,GAAciL,EAAW,EAAG7V,EAAOgX,YAC1ChX,EAAOqS,GAAGlK,IAAStC,EAAKoQ,cACxBjW,EAAOqS,GAAGjK,IAAQvC,EAAKqQ,cAQtBja,EAAI,EAAGA,EAAI,GAAqB,MAAhB+D,EAAOqS,GAAGpW,KAAcA,EACzC+D,EAAOqS,GAAGpW,GAAKxB,EAAMwB,GAAK0Z,EAAY1Z,GAI1C,KAAOA,EAAI,EAAGA,IACV+D,EAAOqS,GAAGpW,GAAKxB,EAAMwB,GACD,MAAhB+D,EAAOqS,GAAGpW,GAAoB,IAANA,EAAU,EAAI,EAAK+D,EAAOqS,GAAGpW,GAKrC,KAApB+D,EAAOqS,GAAGhK,KACY,IAAtBrI,EAAOqS,GAAG/J,KACY,IAAtBtI,EAAOqS,GAAG9J,KACiB,IAA3BvI,EAAOqS,GAAG7J,MAEVxI,EAAOkX,UAAW,EAClBlX,EAAOqS,GAAGhK,IAAQ,GAGtBrI,EAAO5B,IAAM4B,EAAOgW,QAAUpL,GAn1ClC,SAAoBJ,EAAG5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GAGlC,IAAItR,EAYJ,OAVI2E,EAAI,KAAY,GAALA,GAEX3E,EAAO,IAAIjK,KAAK4O,EAAI,IAAK5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GACpC5R,SAASM,EAAKsQ,gBACdtQ,EAAKuR,YAAY5M,IAGrB3E,EAAO,IAAIjK,KAAK4O,EAAG5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GAG/BtR,IAo0CmDvL,MACtD,KACAG,GAEJmb,EAAkB5V,EAAOgW,QACnBhW,EAAO5B,GAAGgN,YACVpL,EAAO5B,GAAG4W,SAIG,MAAfhV,EAAOL,MACPK,EAAO5B,GAAGkX,cAActV,EAAO5B,GAAGmX,gBAAkBvV,EAAOL,MAG3DK,EAAOkX,WACPlX,EAAOqS,GAAGhK,IAAQ,IAKlBrI,EAAOgI,SACgB,IAAhBhI,EAAOgI,GAAG2E,GACjB3M,EAAOgI,GAAG2E,IAAMiJ,IAEhBjZ,EAAgBqD,GAAQnC,iBAAkB,IAwElD,SAASqW,GAA0BlU,GAE/B,GAAIA,EAAOP,KAAOpF,EAAMgd,SAIxB,GAAIrX,EAAOP,KAAOpF,EAAMid,SAAxB,CAIAtX,EAAOqS,GAAK,GACZ1V,EAAgBqD,GAAQlD,OAAQ,EAgBhC,IAbA,IAEIiY,EAEAnS,EACA2U,EAGA7Z,EAj3DyBkF,EAAOnI,EAAOuF,EAy2DvCgU,EAAS,GAAKhU,EAAOR,GAMrBgY,EAAexD,EAAOzY,OACtBkc,EAAyB,EAG7B5P,EACI1E,EAAanD,EAAOP,GAAIO,EAAOF,SAASuD,MAAMd,IAAqB,GAElEtG,EAAI,EAAGA,EAAI4L,EAAOtM,OAAQU,IAC3B2G,EAAQiF,EAAO5L,IACf8Y,GAAef,EAAO3Q,MAAM+D,GAAsBxE,EAAO5C,KACrD,IAAI,MAGiB,GADrBuX,EAAUvD,EAAO1R,OAAO,EAAG0R,EAAO/L,QAAQ8M,KAC9BxZ,QACRoB,EAAgBqD,GAAQhD,YAAYd,KAAKqb,GAE7CvD,EAASA,EAAOnT,MACZmT,EAAO/L,QAAQ8M,GAAeA,EAAYxZ,QAE9Ckc,GAA0B1C,EAAYxZ,QAGtCmH,EAAqBE,IACjBmS,EACApY,EAAgBqD,GAAQlD,OAAQ,EAEhCH,EAAgBqD,GAAQjD,aAAab,KAAK0G,GAz4DzBA,EA24DGA,EA34DW5C,EA24DSA,EA14DvC,OADuBvF,EA24DGsa,IA14DlB/Z,EAAW6M,GAAQjF,IACpCiF,GAAOjF,GAAOnI,EAAOuF,EAAOqS,GAAIrS,EAAQ4C,IA04D7B5C,EAAOzB,UAAYwW,GAC1BpY,EAAgBqD,GAAQjD,aAAab,KAAK0G,GAKlDjG,EAAgBqD,GAAQ9C,cACpBsa,EAAeC,EACC,EAAhBzD,EAAOzY,QACPoB,EAAgBqD,GAAQhD,YAAYd,KAAK8X,GAKzChU,EAAOqS,GAAGhK,KAAS,KACiB,IAApC1L,EAAgBqD,GAAQvB,SACN,EAAlBuB,EAAOqS,GAAGhK,MAEV1L,EAAgBqD,GAAQvB,aAAUD,GAGtC7B,EAAgBqD,GAAQvC,gBAAkBuC,EAAOqS,GAAGxR,MAAM,GAC1DlE,EAAgBqD,GAAQrC,SAAWqC,EAAOwO,UAE1CxO,EAAOqS,GAAGhK,IAgBd,SAAyB9L,EAAQmb,EAAM/Z,GACnC,IAAIga,EAEJ,GAAgB,MAAZha,EAEA,OAAO+Z,EAEX,OAA2B,MAAvBnb,EAAOqb,aACArb,EAAOqb,aAAaF,EAAM/Z,IACX,MAAfpB,EAAOgS,QAEdoJ,EAAOpb,EAAOgS,KAAK5Q,KACP+Z,EAAO,KACfA,GAAQ,IAEPC,GAAiB,KAATD,IACTA,EAAO,IAEJA,GAlCOG,CACd7X,EAAOF,QACPE,EAAOqS,GAAGhK,IACVrI,EAAOwO,WAKC,QADZ9Q,EAAMf,EAAgBqD,GAAQtC,OAE1BsC,EAAOqS,GAAGnK,IAAQlI,EAAOF,QAAQgY,gBAAgBpa,EAAKsC,EAAOqS,GAAGnK,MAGpEwN,GAAgB1V,GAChBoS,GAAcpS,QA/EV4U,GAAkB5U,QAJlB0T,GAAc1T,GAwMtB,SAAS+X,GAAc/X,GACnB,IAgCqBA,EACjBvF,EAjCAA,EAAQuF,EAAOR,GACflD,EAAS0D,EAAOP,GAIpB,OAFAO,EAAOF,QAAUE,EAAOF,SAAWgS,GAAU9R,EAAON,IAEtC,OAAVjF,QAA8B+D,IAAXlC,GAAkC,KAAV7B,EACpCkE,EAAc,CAAExB,WAAW,KAGjB,iBAAV1C,IACPuF,EAAOR,GAAK/E,EAAQuF,EAAOF,QAAQkY,SAASvd,IAG5CyF,EAASzF,GACF,IAAIsF,EAAOqS,GAAc3X,KACzBkB,EAAOlB,GACduF,EAAO5B,GAAK3D,EACLD,EAAQ8B,GA1GvB,SAAkC0D,GAC9B,IAAIiY,EACAC,EACAC,EACAlc,EACAmc,EACAC,EACAC,GAAoB,EAExB,GAAyB,IAArBtY,EAAOP,GAAGlE,OAGV,OAFAoB,EAAgBqD,GAAQ1C,eAAgB,EACxC0C,EAAO5B,GAAK,IAAIxC,KAAKgD,KAIzB,IAAK3C,EAAI,EAAGA,EAAI+D,EAAOP,GAAGlE,OAAQU,IAC9Bmc,EAAe,EACfC,GAAmB,EACnBJ,EAAa/Y,EAAW,GAAIc,GACN,MAAlBA,EAAOgW,UACPiC,EAAWjC,QAAUhW,EAAOgW,SAEhCiC,EAAWxY,GAAKO,EAAOP,GAAGxD,GAC1BiY,GAA0B+D,GAEtBna,EAAQma,KACRI,GAAmB,GAIvBD,GAAgBzb,EAAgBsb,GAAY/a,cAG5Ckb,GAAkE,GAAlDzb,EAAgBsb,GAAYlb,aAAaxB,OAEzDoB,EAAgBsb,GAAYM,MAAQH,EAE/BE,EAaGF,EAAeD,IACfA,EAAcC,EACdF,EAAaD,IAbE,MAAfE,GACAC,EAAeD,GACfE,KAEAF,EAAcC,EACdF,EAAaD,EACTI,IACAC,GAAoB,IAWpCnc,EAAO6D,EAAQkY,GAAcD,GAkDzBO,CAAyBxY,GAClB1D,EACP4X,GAA0BlU,GAc1BvE,EADAhB,GADiBuF,EAVDA,GAWDR,IAEfQ,EAAO5B,GAAK,IAAIxC,KAAKvB,EAAM0b,OACpBpa,EAAOlB,GACduF,EAAO5B,GAAK,IAAIxC,KAAKnB,EAAM2B,WACH,iBAAV3B,EAjdtB,SAA0BuF,GACtB,IAAIuH,EAAUuL,GAAgBmB,KAAKjU,EAAOR,IAC1B,OAAZ+H,GAKJmM,GAAc1T,IACU,IAApBA,EAAOjC,kBACAiC,EAAOjC,SAKlB6W,GAAkB5U,IACM,IAApBA,EAAOjC,kBACAiC,EAAOjC,SAKdiC,EAAOzB,QACPyB,EAAOjC,UAAW,EAGlB1D,EAAMoe,wBAAwBzY,MAtB9BA,EAAO5B,GAAK,IAAIxC,MAAM2L,EAAQ,IA+c9BmR,CAAiB1Y,GACVxF,EAAQC,IACfuF,EAAOqS,GAAKxW,EAAIpB,EAAMoG,MAAM,GAAI,SAAUxF,GACtC,OAAOqP,SAASrP,EAAK,MAEzBqa,GAAgB1V,IACTjF,EAASN,GA1ExB,SAA0BuF,GACtB,IAII/D,EACA0c,EALA3Y,EAAO5B,KAKPua,OAAsBna,KADtBvC,EAAIsI,EAAqBvE,EAAOR,KAClB+N,IAAoBtR,EAAE4J,KAAO5J,EAAEsR,IACjDvN,EAAOqS,GAAKxW,EACR,CAACI,EAAE8I,KAAM9I,EAAE2J,MAAO+S,EAAW1c,EAAEyb,KAAMzb,EAAE2c,OAAQ3c,EAAE4c,OAAQ5c,EAAE6c,aAC3D,SAAUzd,GACN,OAAOA,GAAOqP,SAASrP,EAAK,MAIpCqa,GAAgB1V,IA6DZ+Y,CAAiB/Y,GACVtE,EAASjB,GAEhBuF,EAAO5B,GAAK,IAAIxC,KAAKnB,GAErBJ,EAAMoe,wBAAwBzY,GA1B7BlC,EAAQkC,KACTA,EAAO5B,GAAK,MAGT4B,IA0BX,SAASvD,GAAiBhC,EAAO6B,EAAQC,EAAQC,EAAQwc,GACrD,IAnEIhd,EAmEAyZ,EAAI,GA2BR,OAzBe,IAAXnZ,IAA8B,IAAXA,IACnBE,EAASF,EACTA,OAASkC,IAGE,IAAXjC,IAA8B,IAAXA,IACnBC,EAASD,EACTA,OAASiC,IAIRzD,EAASN,IAAUW,EAAcX,IACjCD,EAAQC,IAA2B,IAAjBA,EAAMc,UAEzBd,OAAQ+D,GAIZiX,EAAElW,kBAAmB,EACrBkW,EAAEO,QAAUP,EAAE7V,OAASoZ,EACvBvD,EAAE/V,GAAKnD,EACPkZ,EAAEjW,GAAK/E,EACPgb,EAAEhW,GAAKnD,EACPmZ,EAAElX,QAAU/B,GA5FRR,EAAM,IAAI+D,EAAOqS,GAAc2F,GA8FXtC,MA7FhByB,WAEJlb,EAAIid,IAAI,EAAG,KACXjd,EAAIkb,cAAW1Y,GAGZxC,EA0FX,SAAS6a,GAAYpc,EAAO6B,EAAQC,EAAQC,GACxC,OAAOC,GAAiBhC,EAAO6B,EAAQC,EAAQC,GAAQ,GAre3DnC,EAAMoe,wBAA0BlY,EAC5B,gSAGA,SAAUP,GACNA,EAAO5B,GAAK,IAAIxC,KAAKoE,EAAOR,IAAMQ,EAAOgW,QAAU,OAAS,OAuLpE3b,EAAMgd,SAAW,aAGjBhd,EAAMid,SAAW,aAySjB,IAAI4B,GAAe3Y,EACX,qGACA,WACI,IAAI4Y,EAAQtC,GAAYvc,MAAM,KAAMC,WACpC,OAAIL,KAAK4D,WAAaqb,EAAMrb,UACjBqb,EAAQjf,KAAOA,KAAOif,EAEtBxa,MAInBya,GAAe7Y,EACX,qGACA,WACI,IAAI4Y,EAAQtC,GAAYvc,MAAM,KAAMC,WACpC,OAAIL,KAAK4D,WAAaqb,EAAMrb,UACT5D,KAARif,EAAejf,KAAOif,EAEtBxa,MAUvB,SAAS0a,GAAOtd,EAAIud,GAChB,IAAItd,EAAKC,EAIT,GAHuB,IAAnBqd,EAAQ/d,QAAgBf,EAAQ8e,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQ/d,OACT,OAAOsb,KAGX,IADA7a,EAAMsd,EAAQ,GACTrd,EAAI,EAAGA,EAAIqd,EAAQ/d,SAAUU,EACzBqd,EAAQrd,GAAG6B,YAAawb,EAAQrd,GAAGF,GAAIC,KACxCA,EAAMsd,EAAQrd,IAGtB,OAAOD,EAgBX,IAIIud,GAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eAyCJ,SAASC,GAASC,GACd,IAAI/U,EAAkBH,EAAqBkV,GACvCC,EAAQhV,EAAgBK,MAAQ,EAChC4U,EAAWjV,EAAgBkV,SAAW,EACtC7Q,EAASrE,EAAgBkB,OAAS,EAClCiU,EAAQnV,EAAgB4G,MAAQ5G,EAAgBoV,SAAW,EAC3DC,EAAOrV,EAAgB6I,KAAO,EAC9BQ,EAAQrJ,EAAgBgT,MAAQ,EAChCzJ,EAAUvJ,EAAgBkU,QAAU,EACpCxK,EAAU1J,EAAgBmU,QAAU,EACpCmB,EAAetV,EAAgBoU,aAAe,EAElD5e,KAAK6D,SAlDT,SAAyBnB,GACrB,IAAI+D,EAEA1E,EADAge,GAAiB,EAErB,IAAKtZ,KAAO/D,EACR,GACI5B,EAAW4B,EAAG+D,MAEuB,IAAjCsH,GAAQnN,KAAKye,GAAU5Y,IACZ,MAAV/D,EAAE+D,IAAiBxC,MAAMvB,EAAE+D,KAGhC,OAAO,EAIf,IAAK1E,EAAI,EAAGA,EAAIsd,GAAShe,SAAUU,EAC/B,GAAIW,EAAE2c,GAAStd,IAAK,CAChB,GAAIge,EACA,OAAO,EAEPC,WAAWtd,EAAE2c,GAAStd,OAASkJ,EAAMvI,EAAE2c,GAAStd,OAChDge,GAAiB,GAK7B,OAAO,EAuBSE,CAAgBzV,GAGhCxK,KAAKkgB,eACAJ,EACS,IAAV5L,EACU,IAAVH,EACQ,IAARF,EAAe,GAAK,GAGxB7T,KAAKmgB,OAASN,EAAe,EAARF,EAIrB3f,KAAKogB,SAAWvR,EAAoB,EAAX4Q,EAAuB,GAARD,EAExCxf,KAAKqgB,MAAQ,GAEbrgB,KAAK4F,QAAUgS,KAEf5X,KAAKsgB,UAGT,SAASC,GAAWpf,GAChB,OAAOA,aAAeme,GAG1B,SAASkB,GAAS7Y,GACd,OAAIA,EAAS,GACyB,EAA3BI,KAAK0Y,OAAO,EAAI9Y,GAEhBI,KAAK0Y,MAAM9Y,GAuB1B,SAAS+Y,GAAOhY,EAAOiY,GACnBlY,EAAeC,EAAO,EAAG,EAAG,WACxB,IAAIgY,EAAS1gB,KAAK4gB,YACdC,EAAO,IAKX,OAJIH,EAAS,IACTA,GAAUA,EACVG,EAAO,KAGPA,EACAnZ,KAAYgZ,EAAS,IAAK,GAC1BC,EACAjZ,IAAWgZ,EAAS,GAAI,KAKpCA,GAAO,IAAK,KACZA,GAAO,KAAM,IAIb5T,GAAc,IAAKF,IACnBE,GAAc,KAAMF,IACpBgB,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/CA,EAAOgW,SAAU,EACjBhW,EAAOL,KAAOqb,GAAiBlU,GAAkBrM,KAQrD,IAAIwgB,GAAc,kBAElB,SAASD,GAAiBE,EAASlH,GAC/B,IAEImH,EACAlN,EAHAmN,GAAWpH,GAAU,IAAI3Q,MAAM6X,GAKnC,OAAgB,OAAZE,EACO,KAOQ,KAFnBnN,EAAuB,IADvBkN,IADQC,EAAQA,EAAQ7f,OAAS,IAAM,IACtB,IAAI8H,MAAM4X,KAAgB,CAAC,IAAK,EAAG,IAClC,GAAW9V,EAAMgW,EAAM,KAElB,EAAiB,MAAbA,EAAM,GAAalN,GAAWA,EAI7D,SAASoN,GAAgB5gB,EAAO6gB,GAC5B,IAAItf,EAAKuf,EACT,OAAID,EAAM1b,QACN5D,EAAMsf,EAAME,QACZD,GACKrb,EAASzF,IAAUkB,EAAOlB,GACrBA,EAAM2B,UACNya,GAAYpc,GAAO2B,WAAaJ,EAAII,UAE9CJ,EAAIoC,GAAGqd,QAAQzf,EAAIoC,GAAGhC,UAAYmf,GAClClhB,EAAM4F,aAAajE,GAAK,GACjBA,GAEA6a,GAAYpc,GAAOihB,QAIlC,SAASC,GAAc/e,GAGnB,OAAQqF,KAAK0Y,MAAM/d,EAAEwB,GAAGwd,qBA0J5B,SAASC,KACL,QAAO3hB,KAAK4D,YAAY5D,KAAK0F,QAA2B,IAAjB1F,KAAK2F,SApJhDxF,EAAM4F,aAAe,aAwJrB,IAAI6b,GAAc,wDAIdC,GAAW,sKAEf,SAASC,GAAevhB,EAAOkG,GAC3B,IAGIoa,EACAkB,EACAC,EALAzC,EAAWhf,EAEX4I,EAAQ,KAkEZ,OA7DIoX,GAAWhgB,GACXgf,EAAW,CACPtC,GAAI1c,EAAM2f,cACVzN,EAAGlS,EAAM4f,MACT9J,EAAG9V,EAAM6f,SAEN5e,EAASjB,KAAW0D,OAAO1D,IAClCgf,EAAW,GACP9Y,EACA8Y,EAAS9Y,IAAQlG,EAEjBgf,EAASO,cAAgBvf,IAErB4I,EAAQyY,GAAY7H,KAAKxZ,KACjCsgB,EAAoB,MAAb1X,EAAM,IAAc,EAAI,EAC/BoW,EAAW,CACPjP,EAAG,EACHmC,EAAGxH,EAAM9B,EAAM+E,KAAS2S,EACxB7K,EAAG/K,EAAM9B,EAAMgF,KAAS0S,EACxBne,EAAGuI,EAAM9B,EAAMiF,KAAWyS,EAC1BnT,EAAGzC,EAAM9B,EAAMkF,KAAWwS,EAC1B5D,GAAIhS,EAAMuV,GAA8B,IAArBrX,EAAMmF,MAAwBuS,KAE7C1X,EAAQ0Y,GAAS9H,KAAKxZ,KAC9BsgB,EAAoB,MAAb1X,EAAM,IAAc,EAAI,EAC/BoW,EAAW,CACPjP,EAAG2R,GAAS9Y,EAAM,GAAI0X,GACtBxK,EAAG4L,GAAS9Y,EAAM,GAAI0X,GACtB1K,EAAG8L,GAAS9Y,EAAM,GAAI0X,GACtBpO,EAAGwP,GAAS9Y,EAAM,GAAI0X,GACtB7K,EAAGiM,GAAS9Y,EAAM,GAAI0X,GACtBne,EAAGuf,GAAS9Y,EAAM,GAAI0X,GACtBnT,EAAGuU,GAAS9Y,EAAM,GAAI0X,KAEP,MAAZtB,EAEPA,EAAW,GAES,iBAAbA,IACN,SAAUA,GAAY,OAAQA,KAE/ByC,EAiDR,SAA2BE,EAAMjD,GAC7B,IAAInd,EACJ,IAAMogB,EAAKte,YAAaqb,EAAMrb,UAC1B,MAAO,CAAEkc,aAAc,EAAGjR,OAAQ,GAGtCoQ,EAAQkC,GAAgBlC,EAAOiD,GAC3BA,EAAKC,SAASlD,GACdnd,EAAMsgB,GAA0BF,EAAMjD,KAEtCnd,EAAMsgB,GAA0BnD,EAAOiD,IACnCpC,cAAgBhe,EAAIge,aACxBhe,EAAI+M,QAAU/M,EAAI+M,QAGtB,OAAO/M,EAhEOugB,CACN1F,GAAY4C,EAASra,MACrByX,GAAY4C,EAASta,MAGzBsa,EAAW,IACFtC,GAAK+E,EAAQlC,aACtBP,EAASlJ,EAAI2L,EAAQnT,QAGzBkT,EAAM,IAAIzC,GAASC,GAEfgB,GAAWhgB,IAAUO,EAAWP,EAAO,aACvCwhB,EAAInc,QAAUrF,EAAMqF,SAGpB2a,GAAWhgB,IAAUO,EAAWP,EAAO,cACvCwhB,EAAIle,SAAWtD,EAAMsD,UAGlBke,EAMX,SAASE,GAASK,EAAKzB,GAInB,IAAI/e,EAAMwgB,GAAOtC,WAAWsC,EAAIlZ,QAAQ,IAAK,MAE7C,OAAQnF,MAAMnC,GAAO,EAAIA,GAAO+e,EAGpC,SAASuB,GAA0BF,EAAMjD,GACrC,IAAInd,EAAM,GAUV,OARAA,EAAI+M,OACAoQ,EAAMvT,QAAUwW,EAAKxW,QAAyC,IAA9BuT,EAAMpU,OAASqX,EAAKrX,QACpDqX,EAAKZ,QAAQvC,IAAIjd,EAAI+M,OAAQ,KAAK0T,QAAQtD,MACxCnd,EAAI+M,OAGV/M,EAAIge,aAAgBb,EAASiD,EAAKZ,QAAQvC,IAAIjd,EAAI+M,OAAQ,KAEnD/M,EAsBX,SAAS0gB,GAAYC,EAAWvb,GAC5B,OAAO,SAAU9B,EAAKsd,GAClB,IAASC,EAmBT,OAjBe,OAAXD,GAAoBze,OAAOye,KAC3Bzb,EACIC,EACA,YACIA,EACA,uDACAA,EACA,kGAGRyb,EAAMvd,EACNA,EAAMsd,EACNA,EAASC,GAIbC,GAAY5iB,KADN8hB,GAAe1c,EAAKsd,GACHD,GAChBziB,MAIf,SAAS4iB,GAAYvZ,EAAKkW,EAAUsD,EAAU9c,GAC1C,IAAI+Z,EAAeP,EAASW,cACxBL,EAAOW,GAASjB,EAASY,OACzBtR,EAAS2R,GAASjB,EAASa,SAE1B/W,EAAIzF,YAKTmC,EAA+B,MAAhBA,GAA8BA,EAEzC8I,GACAU,GAASlG,EAAKoC,EAAIpC,EAAK,SAAWwF,EAASgU,GAE3ChD,GACArU,EAAMnC,EAAK,OAAQoC,EAAIpC,EAAK,QAAUwW,EAAOgD,GAE7C/C,GACAzW,EAAInF,GAAGqd,QAAQlY,EAAInF,GAAGhC,UAAY4d,EAAe+C,GAEjD9c,GACA5F,EAAM4F,aAAasD,EAAKwW,GAAQhR,IA5FxCiT,GAAejgB,GAAKyd,GAAS5e,UAC7BohB,GAAegB,QA9Xf,WACI,OAAOhB,GAAepd,MA4d1B,IAAIqa,GAAMyD,GAAY,EAAG,OACrBO,GAAWP,IAAa,EAAG,YAE/B,SAASQ,GAASziB,GACd,MAAwB,iBAAVA,GAAsBA,aAAiB0iB,OAIzD,SAASC,GAAc3iB,GACnB,OACIyF,EAASzF,IACTkB,EAAOlB,IACPyiB,GAASziB,IACTiB,EAASjB,IAgDjB,SAA+BA,GAC3B,IAAI4iB,EAAY7iB,EAAQC,GACpB6iB,GAAe,EACfD,IACAC,EAGkB,IAFd7iB,EAAM8iB,OAAO,SAAUC,GACnB,OAAQ9hB,EAAS8hB,IAASN,GAASziB,KACpCc,QAEX,OAAO8hB,GAAaC,EAxDhBG,CAAsBhjB,IAO9B,SAA6BA,GACzB,IA4BIwB,EACAyhB,EA7BAC,EAAa5iB,EAASN,KAAWW,EAAcX,GAC/CmjB,GAAe,EACfC,EAAa,CACT,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MAKR,IAAK5hB,EAAI,EAAGA,EAAI4hB,EAAWtiB,OAAQU,GAAK,EACpCyhB,EAAWG,EAAW5hB,GACtB2hB,EAAeA,GAAgB5iB,EAAWP,EAAOijB,GAGrD,OAAOC,GAAcC,EA3CjBE,CAAoBrjB,IANjB,MAOHA,EAwPR,SAASsjB,GAAU9iB,EAAGC,GAClB,GAAID,EAAE4K,OAAS3K,EAAE2K,OAGb,OAAQkY,GAAU7iB,EAAGD,GAGzB,IAAI+iB,EAAyC,IAAvB9iB,EAAE6J,OAAS9J,EAAE8J,SAAgB7J,EAAE0K,QAAU3K,EAAE2K,SAE7DqY,EAAShjB,EAAEugB,QAAQvC,IAAI+E,EAAgB,UAOvCE,EAHAhjB,EAAI+iB,EAAS,GAGH/iB,EAAI+iB,IAAWA,EAFfhjB,EAAEugB,QAAQvC,IAAI+E,EAAiB,EAAG,YAMlC9iB,EAAI+iB,IAFJhjB,EAAEugB,QAAQvC,IAAqB,EAAjB+E,EAAoB,UAETC,GAIvC,QAASD,EAAiBE,IAAW,EAmHzC,SAAS3hB,GAAOoE,GACZ,IAAIwd,EAEJ,YAAY3f,IAARmC,EACOzG,KAAK4F,QAAQ0R,OAGC,OADrB2M,EAAgBrM,GAAUnR,MAEtBzG,KAAK4F,QAAUqe,GAEZjkB,MA1HfG,EAAM+jB,cAAgB,uBACtB/jB,EAAMgkB,iBAAmB,yBA6HzB,IAAIC,GAAO/d,EACP,kJACA,SAAUI,GACN,YAAYnC,IAARmC,EACOzG,KAAK+I,aAEL/I,KAAKqC,OAAOoE,KAK/B,SAASsC,KACL,OAAO/I,KAAK4F,QAGhB,IAGIye,GAAmB,YAGvB,SAASC,GAAMC,EAAUC,GACrB,OAASD,EAAWC,EAAWA,GAAWA,EAG9C,SAASC,GAAiBnU,EAAG5N,EAAG+P,GAE5B,OAAInC,EAAI,KAAY,GAALA,EAEJ,IAAI5O,KAAK4O,EAAI,IAAK5N,EAAG+P,GAAK4R,GAE1B,IAAI3iB,KAAK4O,EAAG5N,EAAG+P,GAAGvQ,UAIjC,SAASwiB,GAAepU,EAAG5N,EAAG+P,GAE1B,OAAInC,EAAI,KAAY,GAALA,EAEJ5O,KAAKiP,IAAIL,EAAI,IAAK5N,EAAG+P,GAAK4R,GAE1B3iB,KAAKiP,IAAIL,EAAG5N,EAAG+P,GAsb9B,SAASkS,GAAa1X,EAAU5K,GAC5B,OAAOA,EAAOuiB,cAAc3X,GAehC,SAAS4X,KASL,IARA,IAAIC,EAAa,GACbC,EAAa,GACbC,EAAe,GACfjV,EAAc,GAGdkV,EAAOjlB,KAAKilB,OAEXljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAClCgjB,EAAW/iB,KAAKoL,GAAY6X,EAAKljB,GAAGmF,OACpC4d,EAAW9iB,KAAKoL,GAAY6X,EAAKljB,GAAG+V,OACpCkN,EAAahjB,KAAKoL,GAAY6X,EAAKljB,GAAGmjB,SAEtCnV,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAGmF,OACrC6I,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAG+V,OACrC/H,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAGmjB,SAGzCllB,KAAKmlB,WAAa,IAAIhY,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACjE5G,KAAKolB,eAAiB,IAAIjY,OAAO,KAAO4X,EAAWne,KAAK,KAAO,IAAK,KACpE5G,KAAKqlB,eAAiB,IAAIlY,OAAO,KAAO2X,EAAWle,KAAK,KAAO,IAAK,KACpE5G,KAAKslB,iBAAmB,IAAInY,OACxB,KAAO6X,EAAape,KAAK,KAAO,IAChC,KAcR,SAAS2e,GAAuB7c,EAAO8c,GACnC/c,EAAe,EAAG,CAACC,EAAOA,EAAMrH,QAAS,EAAGmkB,GAoFhD,SAASC,GAAqBllB,EAAO6Q,EAAMC,EAASN,EAAKC,GACrD,IAAI0U,EACJ,OAAa,MAATnlB,EACOkR,GAAWzR,KAAM+Q,EAAKC,GAAKnG,OAElC6a,EAAc9T,GAAYrR,EAAOwQ,EAAKC,IAClCI,IACAA,EAAOsU,GAMnB,SAAoBtJ,EAAUhL,EAAMC,EAASN,EAAKC,GAC9C,IAAI2U,EAAgBxU,GAAmBiL,EAAUhL,EAAMC,EAASN,EAAKC,GACjErF,EAAO+E,GAAciV,EAAc9a,KAAM,EAAG8a,EAAcpU,WAK9D,OAHAvR,KAAK6K,KAAKc,EAAKiF,kBACf5Q,KAAK0L,MAAMC,EAAKoQ,eAChB/b,KAAK2L,KAAKA,EAAKqQ,cACRhc,MAXeY,KAAKZ,KAAMO,EAAO6Q,EAAMC,EAASN,EAAKC,IAjYhEvI,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,KAAM,EAAG,EAAG,WAC3BA,EAAe,MAAO,EAAG,EAAG,WAC5BA,EAAe,OAAQ,EAAG,EAAG,WAC7BA,EAAe,QAAS,EAAG,EAAG,aAE9BA,EAAe,IAAK,CAAC,IAAK,GAAI,KAAM,WACpCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,WAClCA,EAAe,IAAK,CAAC,MAAO,GAAI,EAAG,WACnCA,EAAe,IAAK,CAAC,OAAQ,GAAI,EAAG,WAEpCqE,GAAc,IAAK6X,IACnB7X,GAAc,KAAM6X,IACpB7X,GAAc,MAAO6X,IACrB7X,GAAc,OAmOd,SAAsBG,EAAU5K,GAC5B,OAAOA,EAAOujB,cAAc3Y,KAnOhCH,GAAc,QAsOd,SAAwBG,EAAU5K,GAC9B,OAAOA,EAAOwjB,gBAAgB5Y,KArOlCW,GAAc,CAAC,IAAK,KAAM,MAAO,OAAQ,SAAU,SAC/CrN,EACA2I,EACApD,EACA4C,GAEA,IAAIlF,EAAMsC,EAAOF,QAAQkgB,UAAUvlB,EAAOmI,EAAO5C,EAAOzB,SACpDb,EACAf,EAAgBqD,GAAQtC,IAAMA,EAE9Bf,EAAgBqD,GAAQ5C,WAAa3C,IAI7CuM,GAAc,IAAKL,IACnBK,GAAc,KAAML,IACpBK,GAAc,MAAOL,IACrBK,GAAc,OAAQL,IACtBK,GAAc,KAsNd,SAA6BG,EAAU5K,GACnC,OAAOA,EAAO0jB,sBAAwBtZ,KArN1CmB,GAAc,CAAC,IAAK,KAAM,MAAO,QAASI,IAC1CJ,GAAc,CAAC,MAAO,SAAUrN,EAAO2I,EAAOpD,EAAQ4C,GAClD,IAAIS,EACArD,EAAOF,QAAQmgB,uBACf5c,EAAQ5I,EAAM4I,MAAMrD,EAAOF,QAAQmgB,uBAGnCjgB,EAAOF,QAAQogB,oBACf9c,EAAM8E,IAAQlI,EAAOF,QAAQogB,oBAAoBzlB,EAAO4I,GAExDD,EAAM8E,IAAQwC,SAASjQ,EAAO,MA4OtCkI,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAKoc,WAAa,MAG7B3T,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAKimB,cAAgB,MAOhCV,GAAuB,OAAQ,YAC/BA,GAAuB,QAAS,YAChCA,GAAuB,OAAQ,eAC/BA,GAAuB,QAAS,eAIhCzb,EAAa,WAAY,MACzBA,EAAa,cAAe,MAI5BY,EAAgB,WAAY,GAC5BA,EAAgB,cAAe,GAI/BoC,GAAc,IAAKJ,IACnBI,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,GACjCa,GAAc,OAAQP,GAAWN,GACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,QAASN,GAAWN,IAElC2B,GAAkB,CAAC,OAAQ,QAAS,OAAQ,SAAU,SAClDtN,EACA6Q,EACAtL,EACA4C,GAEA0I,EAAK1I,EAAMN,OAAO,EAAG,IAAM6C,EAAM1K,KAGrCsN,GAAkB,CAAC,KAAM,MAAO,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GAC3D0I,EAAK1I,GAASvI,EAAMoQ,kBAAkBhQ,KAsE1CkI,EAAe,IAAK,EAAG,KAAM,WAI7BqB,EAAa,UAAW,KAIxBY,EAAgB,UAAW,GAI3BoC,GAAc,IAAKhB,GACnB8B,GAAc,IAAK,SAAUrN,EAAO2I,GAChCA,EAAM+E,IAA8B,GAApBhD,EAAM1K,GAAS,KAanCkI,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrCqB,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,GAIxBoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAM,SAAUG,EAAU5K,GAEpC,OAAO4K,EACD5K,EAAO6jB,yBAA2B7jB,EAAO8jB,cACzC9jB,EAAO+jB,iCAGjBxY,GAAc,CAAC,IAAK,MAAOM,IAC3BN,GAAc,KAAM,SAAUrN,EAAO2I,GACjCA,EAAMgF,IAAQjD,EAAM1K,EAAM4I,MAAMgD,IAAW,MAK/C,IAAIka,GAAmB/a,EAAW,QAAQ,GAI1C7C,EAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3CqB,EAAa,YAAa,OAG1BY,EAAgB,YAAa,GAI7BoC,GAAc,MAAOR,IACrBQ,GAAc,OAAQd,GACtB4B,GAAc,CAAC,MAAO,QAAS,SAAUrN,EAAO2I,EAAOpD,GACnDA,EAAOgX,WAAa7R,EAAM1K,KAiB9BkI,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCqB,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/B6B,GAAc,CAAC,IAAK,MAAOQ,IAI3B,IAAIkY,GAAehb,EAAW,WAAW,GAIzC7C,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCqB,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/B6B,GAAc,CAAC,IAAK,MAAOS,IAI3B,IA8CI3F,GAAO6d,GA9CPC,GAAelb,EAAW,WAAW,GA+CzC,IA3CA7C,EAAe,IAAK,EAAG,EAAG,WACtB,SAAUzI,KAAK4e,cAAgB,OAGnCnW,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,SAAUzI,KAAK4e,cAAgB,MAGnCnW,EAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,WAC9B,OAA4B,GAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,WAC/B,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,SAAU,GAAI,EAAG,WAChC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,UAAW,GAAI,EAAG,WACjC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,WAAY,GAAI,EAAG,WAClC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,YAAa,GAAI,EAAG,WACnC,OAA4B,IAArBzI,KAAK4e,gBAKhB9U,EAAa,cAAe,MAI5BY,EAAgB,cAAe,IAI/BoC,GAAc,IAAKR,GAAWR,GAC9BgB,GAAc,KAAMR,GAAWP,GAC/Be,GAAc,MAAOR,GAAWN,GAG3BtD,GAAQ,OAAQA,GAAMrH,QAAU,EAAGqH,IAAS,IAC7CoE,GAAcpE,GAAO+D,IAGzB,SAASga,GAAQlmB,EAAO2I,GACpBA,EAAMoF,IAAerD,EAAuB,KAAhB,KAAO1K,IAGvC,IAAKmI,GAAQ,IAAKA,GAAMrH,QAAU,EAAGqH,IAAS,IAC1CkF,GAAclF,GAAO+d,IAGzBF,GAAoBjb,EAAW,gBAAgB,GAI/C7C,EAAe,IAAK,EAAG,EAAG,YAC1BA,EAAe,KAAM,EAAG,EAAG,YAY3B,IAAIie,GAAQ7gB,EAAOnF,UAgHnB,SAASimB,GAAmB7M,GACxB,OAAOA,EA/GX4M,GAAM3H,IAAMA,GACZ2H,GAAM7R,SApoCN,SAAoB+R,EAAMC,GAEG,IAArBxmB,UAAUgB,SACLhB,UAAU,GAGJ6iB,GAAc7iB,UAAU,KAC/BumB,EAAOvmB,UAAU,GACjBwmB,OAAUviB,GA/CtB,SAAwB/D,GAcpB,IAbA,IAAIkjB,EAAa5iB,EAASN,KAAWW,EAAcX,GAC/CmjB,GAAe,EACfC,EAAa,CACT,UACA,UACA,UACA,WACA,WACA,YAKH5hB,EAAI,EAAGA,EAAI4hB,EAAWtiB,OAAQU,GAAK,EAEpC2hB,EAAeA,GAAgB5iB,EAAWP,EAD/BojB,EAAW5hB,IAI1B,OAAO0hB,GAAcC,EA6BNoD,CAAezmB,UAAU,MAChCwmB,EAAUxmB,UAAU,GACpBumB,OAAOtiB,GANPuiB,EADAD,OAAOtiB,GAYf,IAAIuX,EAAM+K,GAAQjK,KACdoK,EAAM5F,GAAgBtF,EAAK7b,MAAMgnB,QAAQ,OACzC5kB,EAASjC,EAAM8mB,eAAejnB,KAAM+mB,IAAQ,WAC5Czd,EACIud,IACC1f,EAAW0f,EAAQzkB,IACdykB,EAAQzkB,GAAQxB,KAAKZ,KAAM6b,GAC3BgL,EAAQzkB,IAEtB,OAAOpC,KAAKoC,OACRkH,GAAUtJ,KAAK+I,aAAa8L,SAASzS,EAAQpC,KAAM2c,GAAYd,MA2mCvE6K,GAAMpF,MAvmCN,WACI,OAAO,IAAIzb,EAAO7F,OAumCtB0mB,GAAMrF,KA/hCN,SAAc9gB,EAAO6J,EAAO8c,GACxB,IAAIC,EAAMC,EAAW9d,EAErB,IAAKtJ,KAAK4D,UACN,OAAOc,IAKX,KAFAyiB,EAAOhG,GAAgB5gB,EAAOP,OAEpB4D,UACN,OAAOc,IAOX,OAJA0iB,EAAoD,KAAvCD,EAAKvG,YAAc5gB,KAAK4gB,aAErCxW,EAAQD,EAAeC,IAGnB,IAAK,OACDd,EAASua,GAAU7jB,KAAMmnB,GAAQ,GACjC,MACJ,IAAK,QACD7d,EAASua,GAAU7jB,KAAMmnB,GACzB,MACJ,IAAK,UACD7d,EAASua,GAAU7jB,KAAMmnB,GAAQ,EACjC,MACJ,IAAK,SACD7d,GAAUtJ,KAAOmnB,GAAQ,IACzB,MACJ,IAAK,SACD7d,GAAUtJ,KAAOmnB,GAAQ,IACzB,MACJ,IAAK,OACD7d,GAAUtJ,KAAOmnB,GAAQ,KACzB,MACJ,IAAK,MACD7d,GAAUtJ,KAAOmnB,EAAOC,GAAa,MACrC,MACJ,IAAK,OACD9d,GAAUtJ,KAAOmnB,EAAOC,GAAa,OACrC,MACJ,QACI9d,EAAStJ,KAAOmnB,EAGxB,OAAOD,EAAU5d,EAASwB,EAASxB,IAk/BvCod,GAAMW,MA1uBN,SAAejd,GACX,IAAIwc,EAAMU,EAEV,QAAchjB,KADd8F,EAAQD,EAAeC,KACc,gBAAVA,IAA4BpK,KAAK4D,UACxD,OAAO5D,KAKX,OAFAsnB,EAActnB,KAAK0F,OAASgf,GAAiBD,GAErCra,GACJ,IAAK,OACDwc,EAAOU,EAAYtnB,KAAK6K,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACD+b,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QAAW1L,KAAK0L,QAAU,EAAK,EACpC,GACA,EACR,MACJ,IAAK,QACDkb,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACDkb,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,OAAS3L,KAAKqR,UAAY,GAC/B,EACR,MACJ,IAAK,UACDuV,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,QAAU3L,KAAKunB,aAAe,GAAK,GACxC,EACR,MACJ,IAAK,MACL,IAAK,OACDX,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS1L,KAAK2L,OAAS,GAAK,EACjE,MACJ,IAAK,OACDib,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAzIM,KA2IFtC,GACIsC,GAAQ5mB,KAAK0F,OAAS,EA7ItB,IA6I0B1F,KAAK4gB,aA5IjC,MA+IF,EACJ,MACJ,IAAK,SACDgG,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GApJQ,IAoJgBtC,GAAMsC,EApJtB,KAoJ6C,EACrD,MACJ,IAAK,SACDA,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAzJQ,IAyJgBtC,GAAMsC,EAzJtB,KAyJ6C,EACrD,MAKR,OAFA5mB,KAAKkE,GAAGqd,QAAQqF,GAChBzmB,EAAM4F,aAAa/F,MAAM,GAClBA,MAyqBX0mB,GAAMtkB,OAp5BN,SAAgBolB,GAERA,EADCA,IACaxnB,KAAK2hB,QACbxhB,EAAMgkB,iBACNhkB,EAAM+jB,eAEhB,IAAI5a,EAASN,EAAahJ,KAAMwnB,GAChC,OAAOxnB,KAAK+I,aAAa0e,WAAWne,IA84BxCod,GAAMxhB,KA34BN,SAAc0hB,EAAMc,GAChB,OACI1nB,KAAK4D,YACHoC,EAAS4gB,IAASA,EAAKhjB,WAAc+Y,GAAYiK,GAAMhjB,WAElDke,GAAe,CAAE7c,GAAIjF,KAAMkF,KAAM0hB,IACnCvkB,OAAOrC,KAAKqC,UACZslB,UAAUD,GAER1nB,KAAK+I,aAAaS,eAm4BjCkd,GAAMkB,QA/3BN,SAAiBF,GACb,OAAO1nB,KAAKkF,KAAKyX,KAAe+K,IA+3BpChB,GAAMzhB,GA53BN,SAAY2hB,EAAMc,GACd,OACI1nB,KAAK4D,YACHoC,EAAS4gB,IAASA,EAAKhjB,WAAc+Y,GAAYiK,GAAMhjB,WAElDke,GAAe,CAAE5c,KAAMlF,KAAMiF,GAAI2hB,IACnCvkB,OAAOrC,KAAKqC,UACZslB,UAAUD,GAER1nB,KAAK+I,aAAaS,eAo3BjCkd,GAAMmB,MAh3BN,SAAeH,GACX,OAAO1nB,KAAKiF,GAAG0X,KAAe+K,IAg3BlChB,GAAMjb,IArjIN,SAAmBrB,GAEf,OAAIjD,EAAWnH,KADfoK,EAAQD,EAAeC,KAEZpK,KAAKoK,KAETpK,MAijIX0mB,GAAMoB,UAznBN,WACI,OAAOrlB,EAAgBzC,MAAM+C,UAynBjC2jB,GAAMnE,QA7mCN,SAAiBhiB,EAAO6J,GACpB,IAAI2d,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GACvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,UAAY6lB,EAAW7lB,UAE5B6lB,EAAW7lB,UAAYlC,KAAKshB,QAAQ0F,QAAQ5c,GAAOlI,YAqmClEwkB,GAAMvE,SAjmCN,SAAkB5hB,EAAO6J,GACrB,IAAI2d,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GACvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,UAAY6lB,EAAW7lB,UAE5BlC,KAAKshB,QAAQ+F,MAAMjd,GAAOlI,UAAY6lB,EAAW7lB,YAylChEwkB,GAAMsB,UArlCN,SAAmB9iB,EAAMD,EAAImF,EAAO6d,GAChC,IAAIC,EAAYliB,EAASd,GAAQA,EAAOyX,GAAYzX,GAChDijB,EAAUniB,EAASf,GAAMA,EAAK0X,GAAY1X,GAC9C,SAAMjF,KAAK4D,WAAaskB,EAAUtkB,WAAaukB,EAAQvkB,cAK/B,OAFxBqkB,EAAcA,GAAe,MAEZ,GACPjoB,KAAKuiB,QAAQ2F,EAAW9d,IACvBpK,KAAKmiB,SAAS+F,EAAW9d,MACZ,MAAnB6d,EAAY,GACPjoB,KAAKmiB,SAASgG,EAAS/d,IACtBpK,KAAKuiB,QAAQ4F,EAAS/d,MAykCrCsc,GAAM0B,OArkCN,SAAgB7nB,EAAO6J,GACnB,IACIie,EADAN,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GAEvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,YAAc6lB,EAAW7lB,WAErCmmB,EAAUN,EAAW7lB,UAEjBlC,KAAKshB,QAAQ0F,QAAQ5c,GAAOlI,WAAammB,GACzCA,GAAWroB,KAAKshB,QAAQ+F,MAAMjd,GAAOlI,aAyjCjDwkB,GAAM4B,cApjCN,SAAuB/nB,EAAO6J,GAC1B,OAAOpK,KAAKooB,OAAO7nB,EAAO6J,IAAUpK,KAAKuiB,QAAQhiB,EAAO6J,IAojC5Dsc,GAAM6B,eAjjCN,SAAwBhoB,EAAO6J,GAC3B,OAAOpK,KAAKooB,OAAO7nB,EAAO6J,IAAUpK,KAAKmiB,SAAS5hB,EAAO6J,IAijC7Dsc,GAAM9iB,QAxoBN,WACI,OAAOA,EAAQ5D,OAwoBnB0mB,GAAMtC,KAAOA,GACbsC,GAAMrkB,OAASA,GACfqkB,GAAM3d,WAAaA,GACnB2d,GAAMve,IAAM+W,GACZwH,GAAMjX,IAAMuP,GACZ0H,GAAM8B,aA1oBN,WACI,OAAOvmB,EAAO,GAAIQ,EAAgBzC,QA0oBtC0mB,GAAMjf,IA5jIN,SAAmB2C,EAAOgB,GACtB,GAAqB,iBAAVhB,EAIP,IAFA,IAAIqe,EAzFZ,SAA6BC,GACzB,IACIC,EADAve,EAAQ,GAEZ,IAAKue,KAAKD,EACF5nB,EAAW4nB,EAAUC,IACrBve,EAAMpI,KAAK,CAAE+H,KAAM4e,EAAGhe,SAAUF,EAAWke,KAMnD,OAHAve,EAAM4F,KAAK,SAAUjP,EAAGC,GACpB,OAAOD,EAAE4J,SAAW3J,EAAE2J,WAEnBP,EA8Eewe,CADlBxe,EAAQC,EAAqBD,IAGxBrI,EAAI,EAAGA,EAAI0mB,EAAYpnB,OAAQU,IAChC/B,KAAKyoB,EAAY1mB,GAAGgI,MAAMK,EAAMqe,EAAY1mB,GAAGgI,YAInD,GAAI5C,EAAWnH,KADfoK,EAAQD,EAAeC,KAEnB,OAAOpK,KAAKoK,GAAOgB,GAG3B,OAAOpL,MA+iIX0mB,GAAMM,QA/zBN,SAAiB5c,GACb,IAAIwc,EAAMU,EAEV,QAAchjB,KADd8F,EAAQD,EAAeC,KACc,gBAAVA,IAA4BpK,KAAK4D,UACxD,OAAO5D,KAKX,OAFAsnB,EAActnB,KAAK0F,OAASgf,GAAiBD,GAErCra,GACJ,IAAK,OACDwc,EAAOU,EAAYtnB,KAAK6K,OAAQ,EAAG,GACnC,MACJ,IAAK,UACD+b,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QAAW1L,KAAK0L,QAAU,EAC/B,GAEJ,MACJ,IAAK,QACDkb,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS,GAC9C,MACJ,IAAK,OACDkb,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,OAAS3L,KAAKqR,WAEvB,MACJ,IAAK,UACDuV,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,QAAU3L,KAAKunB,aAAe,IAEvC,MACJ,IAAK,MACL,IAAK,OACDX,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS1L,KAAK2L,QACnD,MACJ,IAAK,OACDib,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GACJsC,GAAQ5mB,KAAK0F,OAAS,EAzElB,IAyEsB1F,KAAK4gB,aAxE7B,MA2EN,MACJ,IAAK,SACDgG,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GAAMsC,EA/EN,KAgFR,MACJ,IAAK,SACDA,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GAAMsC,EApFN,KAqFR,MAKR,OAFA5mB,KAAKkE,GAAGqd,QAAQqF,GAChBzmB,EAAM4F,aAAa/F,MAAM,GAClBA,MAowBX0mB,GAAM3D,SAAWA,GACjB2D,GAAMmC,QAjrBN,WACI,IAAInmB,EAAI1C,KACR,MAAO,CACH0C,EAAEmI,OACFnI,EAAEgJ,QACFhJ,EAAEiJ,OACFjJ,EAAE8a,OACF9a,EAAEgc,SACFhc,EAAEic,SACFjc,EAAEkc,gBAyqBV8H,GAAMoC,SArqBN,WACI,IAAIpmB,EAAI1C,KACR,MAAO,CACHwf,MAAO9c,EAAEmI,OACTgE,OAAQnM,EAAEgJ,QACVC,KAAMjJ,EAAEiJ,OACRkI,MAAOnR,EAAEmR,QACTE,QAASrR,EAAEqR,UACXG,QAASxR,EAAEwR,UACX4L,aAAcpd,EAAEod,iBA6pBxB4G,GAAMqC,OAvrBN,WACI,OAAO,IAAIrnB,KAAK1B,KAAKkC,YAurBzBwkB,GAAMsC,YAx+BN,SAAqBC,GACjB,IAAKjpB,KAAK4D,UACN,OAAO,KAEX,IAAIpB,GAAqB,IAAfymB,EACNvmB,EAAIF,EAAMxC,KAAKshB,QAAQ9e,MAAQxC,KACnC,OAAI0C,EAAEmI,OAAS,GAAgB,KAAXnI,EAAEmI,OACX7B,EACHtG,EACAF,EACM,iCACA,gCAGV2E,EAAWzF,KAAKhB,UAAUsoB,aAEtBxmB,EACOxC,KAAK+oB,SAASC,cAEd,IAAItnB,KAAK1B,KAAKkC,UAA+B,GAAnBlC,KAAK4gB,YAAmB,KACpDoI,cACA5f,QAAQ,IAAKJ,EAAatG,EAAG,MAGnCsG,EACHtG,EACAF,EAAM,+BAAiC,+BA+8B/CkkB,GAAMwC,QAr8BN,WACI,IAAKlpB,KAAK4D,UACN,MAAO,qBAAuB5D,KAAKsF,GAAK,OAE5C,IAEI6jB,EACAte,EAEAue,EALAtgB,EAAO,SACPugB,EAAO,GAcX,OATKrpB,KAAKspB,YACNxgB,EAA4B,IAArB9I,KAAK4gB,YAAoB,aAAe,mBAC/CyI,EAAO,KAEXF,EAAS,IAAMrgB,EAAO,MACtB+B,EAAO,GAAK7K,KAAK6K,QAAU7K,KAAK6K,QAAU,KAAO,OAAS,SAE1Due,EAASC,EAAO,OAETrpB,KAAKoC,OAAO+mB,EAASte,EAHjB,wBAGmCue,IAm7B5B,oBAAXG,QAAwC,MAAdA,OAAOC,MACxC9C,GAAM6C,OAAOC,IAAI,+BAAiC,WAC9C,MAAO,UAAYxpB,KAAKoC,SAAW,MAG3CskB,GAAM+C,OAjqBN,WAEI,OAAOzpB,KAAK4D,UAAY5D,KAAKgpB,cAAgB,MAgqBjDtC,GAAM/lB,SAp/BN,WACI,OAAOX,KAAKshB,QAAQjf,OAAO,MAAMD,OAAO,qCAo/B5CskB,GAAMgD,KArsBN,WACI,OAAO3hB,KAAKiD,MAAMhL,KAAKkC,UAAY,MAqsBvCwkB,GAAMxkB,QA1sBN,WACI,OAAOlC,KAAKkE,GAAGhC,UAAkC,KAArBlC,KAAK2F,SAAW,IA0sBhD+gB,GAAMiD,aAppBN,WACI,MAAO,CACHppB,MAAOP,KAAKsF,GACZlD,OAAQpC,KAAKuF,GACblD,OAAQrC,KAAK4F,QACbkZ,MAAO9e,KAAK0F,OACZpD,OAAQtC,KAAKqE,UA+oBrBqiB,GAAMkD,QAzgBN,WAKI,IAJA,IAEIxkB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAGmF,KAEnB,GAAI+d,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAGmF,KAIvB,MAAO,IAyfXwf,GAAMqD,UAtfN,WAKI,IAJA,IAEI3kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAGmjB,OAEnB,GAAID,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAGmjB,OAIvB,MAAO,IAseXwB,GAAMsD,QAneN,WAKI,IAJA,IAEI5kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAG+V,KAEnB,GAAImN,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAG+V,KAIvB,MAAO,IAmdX4O,GAAMuD,QAhdN,WAMI,IALA,IAEIC,EACA9kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAMlC,GALAmoB,EAAMjF,EAAKljB,GAAG8nB,OAAS5E,EAAKljB,GAAG+nB,MAAQ,GAAM,EAG7C1kB,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAG7B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,OACvC7E,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MAExC,OACK7pB,KAAK6K,OAAS1K,EAAM8kB,EAAKljB,GAAG8nB,OAAOhf,QAAUqf,EAC9CjF,EAAKljB,GAAG2e,OAKpB,OAAO1gB,KAAK6K,QA0bhB6b,GAAM7b,KAAO4F,GACbiW,GAAM9b,WAzkHN,WACI,OAAOA,EAAW5K,KAAK6K,SAykH3B6b,GAAMtK,SAjUN,SAAwB7b,GACpB,OAAOklB,GAAqB7kB,KACxBZ,KACAO,EACAP,KAAKoR,OACLpR,KAAKqR,UACLrR,KAAK+I,aAAa6T,MAAM7L,IACxB/Q,KAAK+I,aAAa6T,MAAM5L,MA2ThC0V,GAAMT,YAvTN,SAA2B1lB,GACvB,OAAOklB,GAAqB7kB,KACxBZ,KACAO,EACAP,KAAK4f,UACL5f,KAAKunB,aACL,EACA,IAiTRb,GAAMhH,QAAUgH,GAAMjH,SA/OtB,SAAuBlf,GACnB,OAAgB,MAATA,EACDwH,KAAKgD,MAAM/K,KAAK0L,QAAU,GAAK,GAC/B1L,KAAK0L,MAAoB,GAAbnL,EAAQ,GAAUP,KAAK0L,QAAU,IA6OvDgb,GAAMhb,MAAQgE,GACdgX,GAAM9a,YAhuHN,WACI,OAAOA,GAAY5L,KAAK6K,OAAQ7K,KAAK0L,UAguHzCgb,GAAMtV,KAAOsV,GAAM/G,MAj7GnB,SAAoBpf,GAChB,IAAI6Q,EAAOpR,KAAK+I,aAAaqI,KAAKpR,MAClC,OAAgB,MAATO,EAAgB6Q,EAAOpR,KAAK+e,IAAqB,GAAhBxe,EAAQ6Q,GAAW,MAg7G/DsV,GAAM9G,QAAU8G,GAAMyD,SA76GtB,SAAuB5pB,GACnB,IAAI6Q,EAAOK,GAAWzR,KAAM,EAAG,GAAGoR,KAClC,OAAgB,MAAT7Q,EAAgB6Q,EAAOpR,KAAK+e,IAAqB,GAAhBxe,EAAQ6Q,GAAW,MA46G/DsV,GAAM9U,YA1SN,WACI,IAAIwY,EAAWpqB,KAAK+I,aAAa6T,MACjC,OAAOhL,GAAY5R,KAAK6K,OAAQuf,EAASrZ,IAAKqZ,EAASpZ,MAyS3D0V,GAAM2D,gBAtSN,WACI,IAAID,EAAWpqB,KAAK+I,aAAa6T,MACjC,OAAOhL,GAAY5R,KAAKoc,WAAYgO,EAASrZ,IAAKqZ,EAASpZ,MAqS/D0V,GAAM4D,eApTN,WACI,OAAO1Y,GAAY5R,KAAK6K,OAAQ,EAAG,IAoTvC6b,GAAM6D,sBAjTN,WACI,OAAO3Y,GAAY5R,KAAKimB,cAAe,EAAG,IAiT9CS,GAAM/a,KAAO0a,GACbK,GAAMrT,IAAMqT,GAAM7G,KA9pGlB,SAAyBtf,GACrB,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,IAvNkBnE,EAAO8B,EAuNrBgR,EAAMrT,KAAK0F,OAAS1F,KAAKkE,GAAGgN,YAAclR,KAAKkE,GAAG4W,SACtD,OAAa,MAATva,GAxNcA,EAyNOA,EAzNA8B,EAyNOrC,KAAK+I,aAAjCxI,EAxNiB,iBAAVA,EACAA,EAGN0D,MAAM1D,GAKU,iBADrBA,EAAQ8B,EAAOmQ,cAAcjS,IAElBA,EAGJ,KARIiQ,SAASjQ,EAAO,IAoNhBP,KAAK+e,IAAIxe,EAAQ8S,EAAK,MAEtBA,GAspGfqT,GAAMrV,QAlpGN,SAA+B9Q,GAC3B,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,IAAI2M,GAAWrR,KAAKqT,MAAQ,EAAIrT,KAAK+I,aAAa6T,MAAM7L,KAAO,EAC/D,OAAgB,MAATxQ,EAAgB8Q,EAAUrR,KAAK+e,IAAIxe,EAAQ8Q,EAAS,MA8oG/DqV,GAAMa,WA3oGN,SAA4BhnB,GACxB,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAOlC,GAAa,MAATnE,EAIA,OAAOP,KAAKqT,OAAS,EAHrB,IAjOiB9S,EAAO8B,EAiOpBgP,GAjOa9Q,EAiOaA,EAjON8B,EAiOarC,KAAK+I,aAhOzB,iBAAVxI,EACA8B,EAAOmQ,cAAcjS,GAAS,GAAK,EAEvC0D,MAAM1D,GAAS,KAAOA,GA8NzB,OAAOP,KAAKqT,IAAIrT,KAAKqT,MAAQ,EAAIhC,EAAUA,EAAU,IAioG7DqV,GAAMnV,UAhMN,SAAyBhR,GACrB,IAAIgR,EACAxJ,KAAK0Y,OACAzgB,KAAKshB,QAAQ0F,QAAQ,OAAShnB,KAAKshB,QAAQ0F,QAAQ,SAAW,OAC/D,EACR,OAAgB,MAATzmB,EAAgBgR,EAAYvR,KAAK+e,IAAIxe,EAAQgR,EAAW,MA4LnEmV,GAAMlJ,KAAOkJ,GAAM7S,MAAQa,GAC3BgS,GAAMhI,OAASgI,GAAM3S,QAAUuS,GAC/BI,GAAM/H,OAAS+H,GAAMxS,QAAUsS,GAC/BE,GAAM9H,YAAc8H,GAAM5G,aAAeyG,GACzCG,GAAM9F,UAhnDN,SAAsBrgB,EAAOiqB,EAAeC,GACxC,IACIC,EADAhK,EAAS1gB,KAAK2F,SAAW,EAE7B,IAAK3F,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,GAAa,MAATnE,EAiCA,OAAOP,KAAK0F,OAASgb,EAASe,GAAczhB,MAhC5C,GAAqB,iBAAVO,GAEP,GAAc,QADdA,EAAQugB,GAAiBlU,GAAkBrM,IAEvC,OAAOP,UAEJ+H,KAAKC,IAAIzH,GAAS,KAAOkqB,IAChClqB,GAAgB,IAwBpB,OAtBKP,KAAK0F,QAAU8kB,IAChBE,EAAcjJ,GAAczhB,OAEhCA,KAAK2F,QAAUpF,EACfP,KAAK0F,QAAS,EACK,MAAfglB,GACA1qB,KAAK+e,IAAI2L,EAAa,KAEtBhK,IAAWngB,KACNiqB,GAAiBxqB,KAAK2qB,kBACvB/H,GACI5iB,KACA8hB,GAAevhB,EAAQmgB,EAAQ,KAC/B,GACA,GAEI1gB,KAAK2qB,oBACb3qB,KAAK2qB,mBAAoB,EACzBxqB,EAAM4F,aAAa/F,MAAM,GACzBA,KAAK2qB,kBAAoB,OAG1B3qB,MA4kDf0mB,GAAMlkB,IAxjDN,SAAwBgoB,GACpB,OAAOxqB,KAAK4gB,UAAU,EAAG4J,IAwjD7B9D,GAAMlF,MArjDN,SAA0BgJ,GAStB,OARIxqB,KAAK0F,SACL1F,KAAK4gB,UAAU,EAAG4J,GAClBxqB,KAAK0F,QAAS,EAEV8kB,GACAxqB,KAAK+iB,SAAStB,GAAczhB,MAAO,MAGpCA,MA6iDX0mB,GAAMkE,UA1iDN,WACI,IAGQC,EAOR,OAViB,MAAb7qB,KAAKyF,KACLzF,KAAK4gB,UAAU5gB,KAAKyF,MAAM,GAAO,GACP,iBAAZzF,KAAKsF,KAEN,OADTulB,EAAQ/J,GAAiBnU,GAAa3M,KAAKsF,KAE3CtF,KAAK4gB,UAAUiK,GAEf7qB,KAAK4gB,UAAU,GAAG,IAGnB5gB,MAgiDX0mB,GAAMoE,qBA7hDN,SAA8BvqB,GAC1B,QAAKP,KAAK4D,YAGVrD,EAAQA,EAAQoc,GAAYpc,GAAOqgB,YAAc,GAEzC5gB,KAAK4gB,YAAcrgB,GAAS,IAAO,IAwhD/CmmB,GAAMqE,MArhDN,WACI,OACI/qB,KAAK4gB,YAAc5gB,KAAKshB,QAAQ5V,MAAM,GAAGkV,aACzC5gB,KAAK4gB,YAAc5gB,KAAKshB,QAAQ5V,MAAM,GAAGkV,aAmhDjD8F,GAAM4C,QAz/CN,WACI,QAAOtpB,KAAK4D,YAAa5D,KAAK0F,QAy/ClCghB,GAAMsE,YAt/CN,WACI,QAAOhrB,KAAK4D,WAAY5D,KAAK0F,QAs/CjCghB,GAAM/E,MAAQA,GACd+E,GAAM5H,MAAQ6C,GACd+E,GAAMuE,SAzFN,WACI,OAAOjrB,KAAK0F,OAAS,MAAQ,IAyFjCghB,GAAMwE,SAtFN,WACI,OAAOlrB,KAAK0F,OAAS,6BAA+B,IAsFxDghB,GAAMyE,MAAQ9kB,EACV,kDACAggB,IAEJK,GAAM7X,OAASxI,EACX,mDACAqJ,IAEJgX,GAAMlH,MAAQnZ,EACV,iDACAoK,IAEJiW,GAAM2C,KAAOhjB,EACT,2GA9lDJ,SAAoB9F,EAAOiqB,GACvB,OAAa,MAATjqB,GACqB,iBAAVA,IACPA,GAASA,GAGbP,KAAK4gB,UAAUrgB,EAAOiqB,GAEfxqB,OAECA,KAAK4gB,cAulDrB8F,GAAM0E,aAAe/kB,EACjB,0GAtiDJ,WACI,IAAK9E,EAAYvB,KAAKqrB,eAClB,OAAOrrB,KAAKqrB,cAGhB,IACIpM,EADA1D,EAAI,GAcR,OAXAvW,EAAWuW,EAAGvb,OACdub,EAAIsC,GAActC,IAEZpD,IACF8G,GAAQ1D,EAAE7V,OAASvD,EAAkBwa,IAARpB,EAAEpD,IAC/BnY,KAAKqrB,cACDrrB,KAAK4D,WAAoD,EAtOrE,SAAuB0nB,EAAQC,EAAQC,GAKnC,IAJA,IAAI3mB,EAAMkD,KAAK0H,IAAI6b,EAAOjqB,OAAQkqB,EAAOlqB,QACrCoqB,EAAa1jB,KAAKC,IAAIsjB,EAAOjqB,OAASkqB,EAAOlqB,QAC7CqqB,EAAQ,EAEP3pB,EAAI,EAAGA,EAAI8C,EAAK9C,KAEZypB,GAAeF,EAAOvpB,KAAOwpB,EAAOxpB,KACnCypB,GAAevgB,EAAMqgB,EAAOvpB,MAAQkJ,EAAMsgB,EAAOxpB,MAEnD2pB,IAGR,OAAOA,EAAQD,EAyNWE,CAAcpQ,EAAEpD,GAAI8G,EAAM4J,YAEhD7oB,KAAKqrB,eAAgB,EAGlBrrB,KAAKqrB,gBAmiDhB,IAAIO,GAAUpkB,EAAO9G,UAuCrB,SAASmrB,GAAMzpB,EAAQ0pB,EAAOC,EAAOC,GACjC,IAAI3pB,EAASuV,KACTpV,EAAML,IAAYsF,IAAIukB,EAAQF,GAClC,OAAOzpB,EAAO0pB,GAAOvpB,EAAKJ,GAG9B,SAAS6pB,GAAe7pB,EAAQ0pB,EAAOC,GAQnC,GAPIvqB,EAASY,KACT0pB,EAAQ1pB,EACRA,OAASkC,GAGblC,EAASA,GAAU,GAEN,MAAT0pB,EACA,OAAOD,GAAMzpB,EAAQ0pB,EAAOC,EAAO,SAKvC,IAFA,IACIG,EAAM,GACLnqB,EAAI,EAAGA,EAAI,GAAIA,IAChBmqB,EAAInqB,GAAK8pB,GAAMzpB,EAAQL,EAAGgqB,EAAO,SAErC,OAAOG,EAWX,SAASC,GAAiBC,EAAchqB,EAAQ0pB,EAAOC,GAO/C3pB,GANwB,kBAAjBgqB,EACH5qB,EAASY,KACT0pB,EAAQ1pB,EACRA,OAASkC,IAKblC,EAASgqB,EAETA,GAAe,EAEX5qB,EAHJsqB,EAAQ1pB,KAIJ0pB,EAAQ1pB,EACRA,OAASkC,IARJlC,GAAU,IAcvB,IAEIL,EAFAM,EAASuV,KACTyU,EAAQD,EAAe/pB,EAAOua,MAAM7L,IAAM,EAE1Cmb,EAAM,GAEV,GAAa,MAATJ,EACA,OAAOD,GAAMzpB,GAAS0pB,EAAQO,GAAS,EAAGN,EAAO,OAGrD,IAAKhqB,EAAI,EAAGA,EAAI,EAAGA,IACfmqB,EAAInqB,GAAK8pB,GAAMzpB,GAASL,EAAIsqB,GAAS,EAAGN,EAAO,OAEnD,OAAOG,EAxGXN,GAAQ/W,SAn9IR,SAAkBpO,EAAK4C,EAAKwS,GACxB,IAAIvS,EAAStJ,KAAKssB,UAAU7lB,IAAQzG,KAAKssB,UAAoB,SAC7D,OAAOnlB,EAAWmC,GAAUA,EAAO1I,KAAKyI,EAAKwS,GAAOvS,GAk9IxDsiB,GAAQliB,eAx1IR,SAAwBjD,GACpB,IAAIrE,EAASpC,KAAKusB,gBAAgB9lB,GAC9B+lB,EAAcxsB,KAAKusB,gBAAgB9lB,EAAIgmB,eAE3C,OAAIrqB,IAAWoqB,EACJpqB,GAGXpC,KAAKusB,gBAAgB9lB,GAAO+lB,EACvBrjB,MAAMd,GACN1G,IAAI,SAAU+qB,GACX,MACY,SAARA,GACQ,OAARA,GACQ,OAARA,GACQ,SAARA,EAEOA,EAAI/lB,MAAM,GAEd+lB,IAEV9lB,KAAK,IAEH5G,KAAKusB,gBAAgB9lB,KAk0IhCmlB,GAAQpiB,YA7zIR,WACI,OAAOxJ,KAAK2sB,cA6zIhBf,GAAQhjB,QAvzIR,SAAiBjB,GACb,OAAO3H,KAAK4sB,SAASxjB,QAAQ,KAAMzB,IAuzIvCikB,GAAQ9N,SAAW6I,GACnBiF,GAAQnE,WAAad,GACrBiF,GAAQjW,aAnyIR,SAAsBhO,EAAQ+f,EAAe5N,EAAQ+S,GACjD,IAAIvjB,EAAStJ,KAAK8sB,cAAchT,GAChC,OAAO3S,EAAWmC,GACZA,EAAO3B,EAAQ+f,EAAe5N,EAAQ+S,GACtCvjB,EAAOF,QAAQ,MAAOzB,IAgyIhCikB,GAAQmB,WA7xIR,SAAoB1L,EAAM/X,GACtB,IAAIlH,EAASpC,KAAK8sB,cAAqB,EAAPzL,EAAW,SAAW,QACtD,OAAOla,EAAW/E,GAAUA,EAAOkH,GAAUlH,EAAOgH,QAAQ,MAAOE,IA4xIvEsiB,GAAQnkB,IA/iJR,SAAa3B,GACT,IAAIX,EAAMpD,EACV,IAAKA,KAAK+D,EACFhF,EAAWgF,EAAQ/D,KAEfoF,EADJhC,EAAOW,EAAO/D,IAEV/B,KAAK+B,GAAKoD,EAEVnF,KAAK,IAAM+B,GAAKoD,GAI5BnF,KAAK+X,QAAUjS,EAIf9F,KAAKomB,+BAAiC,IAAIjZ,QACrCnN,KAAKkmB,wBAAwB8G,QAAUhtB,KAAKmmB,cAAc6G,QACvD,IACA,UAAUA,SA6hJtBpB,GAAQ3G,KA1qBR,SAAoBviB,EAAGN,GAKnB,IAJA,IAEIuJ,EACAsZ,EAAOjlB,KAAKitB,OAASrV,GAAU,MAAMqV,MACpClrB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CACrC,cAAekjB,EAAKljB,GAAG8nB,OACnB,IAAK,SAEDle,EAAOxL,EAAM8kB,EAAKljB,GAAG8nB,OAAO7C,QAAQ,OACpC/B,EAAKljB,GAAG8nB,MAAQle,EAAKzJ,UACrB,MAGR,cAAe+iB,EAAKljB,GAAG+nB,OACnB,IAAK,YACD7E,EAAKljB,GAAG+nB,MAASoD,EAAAA,EACjB,MACJ,IAAK,SAEDvhB,EAAOxL,EAAM8kB,EAAKljB,GAAG+nB,OAAO9C,QAAQ,OAAO9kB,UAC3C+iB,EAAKljB,GAAG+nB,MAAQne,EAAKzJ,UACrB,OAGZ,OAAO+iB,GAkpBX2G,GAAQ9F,UA/oBR,SAAyB8D,EAASxnB,EAAQE,GACtC,IAAIP,EACA0X,EAEAvS,EACA4Q,EACAoN,EAHAD,EAAOjlB,KAAKilB,OAMhB,IAFA2E,EAAUA,EAAQ6C,cAEb1qB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAKlC,GAJAmF,EAAO+d,EAAKljB,GAAGmF,KAAKulB,cACpB3U,EAAOmN,EAAKljB,GAAG+V,KAAK2U,cACpBvH,EAASD,EAAKljB,GAAGmjB,OAAOuH,cAEpBnqB,EACA,OAAQF,GACJ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAI0V,IAAS8R,EACT,OAAO3E,EAAKljB,GAEhB,MAEJ,IAAK,OACD,GAAImF,IAAS0iB,EACT,OAAO3E,EAAKljB,GAEhB,MAEJ,IAAK,QACD,GAAImjB,IAAW0E,EACX,OAAO3E,EAAKljB,GAEhB,WAEL,GAA6C,GAAzC,CAACmF,EAAM4Q,EAAMoN,GAAQnX,QAAQ6b,GACpC,OAAO3E,EAAKljB,IA2mBxB6pB,GAAQhO,gBAtmBR,SAA+Bpa,EAAKqH,GAChC,IAAIqf,EAAM1mB,EAAIqmB,OAASrmB,EAAIsmB,MAAQ,GAAM,EACzC,YAAaxlB,IAATuG,EACO1K,EAAMqD,EAAIqmB,OAAOhf,OAEjB1K,EAAMqD,EAAIqmB,OAAOhf,QAAUA,EAAOrH,EAAIkd,QAAUwJ,GAkmB/D0B,GAAQhH,cAjgBR,SAAuB3X,GAInB,OAHKnM,EAAWd,KAAM,mBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKqlB,eAAiBrlB,KAAKmlB,YA8fjDyG,GAAQhG,cAzgBR,SAAuB3Y,GAInB,OAHKnM,EAAWd,KAAM,mBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKolB,eAAiBplB,KAAKmlB,YAsgBjDyG,GAAQ/F,gBA5fR,SAAyB5Y,GAIrB,OAHKnM,EAAWd,KAAM,qBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKslB,iBAAmBtlB,KAAKmlB,YA0fnDyG,GAAQ/c,OAp9HR,SAAsBnM,EAAGN,GACrB,OAAKM,EAKEpC,EAAQN,KAAKogB,SACdpgB,KAAKogB,QAAQ1d,EAAEgJ,SACf1L,KAAKogB,SACApgB,KAAKogB,QAAQ+M,UAAY/d,IAAkBxF,KAAKxH,GAC3C,SACA,cACRM,EAAEgJ,SAVCpL,EAAQN,KAAKogB,SACdpgB,KAAKogB,QACLpgB,KAAKogB,QAAoB,YAi9HvCwL,GAAQhd,YAt8HR,SAA2BlM,EAAGN,GAC1B,OAAKM,EAKEpC,EAAQN,KAAKotB,cACdptB,KAAKotB,aAAa1qB,EAAEgJ,SACpB1L,KAAKotB,aACDhe,GAAiBxF,KAAKxH,GAAU,SAAW,cAC7CM,EAAEgJ,SARCpL,EAAQN,KAAKotB,cACdptB,KAAKotB,aACLptB,KAAKotB,aAAyB,YAm8H5CxB,GAAQ5c,YA34HR,SAA2Bqe,EAAWjrB,EAAQE,GAC1C,IAAIP,EAAGsH,EAAK0D,EAEZ,GAAI/M,KAAKstB,kBACL,OAnDR,SAA2BD,EAAWjrB,EAAQE,GAC1C,IAAIP,EACAwrB,EACAlkB,EACAmkB,EAAMH,EAAUI,oBACpB,IAAKztB,KAAK0tB,aAKN,IAHA1tB,KAAK0tB,aAAe,GACpB1tB,KAAK2tB,iBAAmB,GACxB3tB,KAAK4tB,kBAAoB,GACpB7rB,EAAI,EAAGA,EAAI,KAAMA,EAClBsH,EAAMlH,EAAU,CAAC,IAAMJ,IACvB/B,KAAK4tB,kBAAkB7rB,GAAK/B,KAAK4O,YAC7BvF,EACA,IACFokB,oBACFztB,KAAK2tB,iBAAiB5rB,GAAK/B,KAAK6O,OAAOxF,EAAK,IAAIokB,oBAIxD,OAAInrB,EACe,QAAXF,GAEe,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,IACvBD,EAAK,MAGT,KADfA,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,IACtBD,EAAK,KAGb,QAAXnrB,GAEY,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,MAK3B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,IAF9BD,EAGa,MAGZ,KADZA,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,MAK1B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,IAF/BD,EAGa,MASH3sB,KAAKZ,KAAMqtB,EAAWjrB,EAAQE,GAY3D,IATKtC,KAAK0tB,eACN1tB,KAAK0tB,aAAe,GACpB1tB,KAAK2tB,iBAAmB,GACxB3tB,KAAK4tB,kBAAoB,IAMxB7rB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBAsH,EAAMlH,EAAU,CAAC,IAAMJ,IACnBO,IAAWtC,KAAK2tB,iBAAiB5rB,KACjC/B,KAAK2tB,iBAAiB5rB,GAAK,IAAIoL,OAC3B,IAAMnN,KAAK6O,OAAOxF,EAAK,IAAID,QAAQ,IAAK,IAAM,IAC9C,KAEJpJ,KAAK4tB,kBAAkB7rB,GAAK,IAAIoL,OAC5B,IAAMnN,KAAK4O,YAAYvF,EAAK,IAAID,QAAQ,IAAK,IAAM,IACnD,MAGH9G,GAAWtC,KAAK0tB,aAAa3rB,KAC9BgL,EACI,IAAM/M,KAAK6O,OAAOxF,EAAK,IAAM,KAAOrJ,KAAK4O,YAAYvF,EAAK,IAC9DrJ,KAAK0tB,aAAa3rB,GAAK,IAAIoL,OAAOJ,EAAM3D,QAAQ,IAAK,IAAK,MAI1D9G,GACW,SAAXF,GACApC,KAAK2tB,iBAAiB5rB,GAAG6H,KAAKyjB,GAE9B,OAAOtrB,EACJ,GACHO,GACW,QAAXF,GACApC,KAAK4tB,kBAAkB7rB,GAAG6H,KAAKyjB,GAE/B,OAAOtrB,EACJ,IAAKO,GAAUtC,KAAK0tB,aAAa3rB,GAAG6H,KAAKyjB,GAC5C,OAAOtrB,IA41HnB6pB,GAAQ7c,YA1xHR,SAAqB9B,GACjB,OAAIjN,KAAKstB,mBACAxsB,EAAWd,KAAM,iBAClB2P,GAAmB/O,KAAKZ,MAExBiN,EACOjN,KAAKmQ,mBAELnQ,KAAKiQ,eAGXnP,EAAWd,KAAM,kBAClBA,KAAKiQ,aAAeX,IAEjBtP,KAAKmQ,oBAAsBlD,EAC5BjN,KAAKmQ,mBACLnQ,KAAKiQ,eA2wHnB2b,GAAQ9c,iBA/yHR,SAA0B7B,GACtB,OAAIjN,KAAKstB,mBACAxsB,EAAWd,KAAM,iBAClB2P,GAAmB/O,KAAKZ,MAExBiN,EACOjN,KAAKoQ,wBAELpQ,KAAKkQ,oBAGXpP,EAAWd,KAAM,uBAClBA,KAAKkQ,kBAAoBb,IAEtBrP,KAAKoQ,yBAA2BnD,EACjCjN,KAAKoQ,wBACLpQ,KAAKkQ,oBAgyHnB0b,GAAQxa,KAvhHR,SAAoB/H,GAChB,OAAOoI,GAAWpI,EAAKrJ,KAAK4c,MAAM7L,IAAK/Q,KAAK4c,MAAM5L,KAAKI,MAuhH3Dwa,GAAQiC,eA3gHR,WACI,OAAO7tB,KAAK4c,MAAM5L,KA2gHtB4a,GAAQkC,eAhhHR,WACI,OAAO9tB,KAAK4c,MAAM7L,KAihHtB6a,GAAQxZ,SA35GR,SAAwB1P,EAAGN,GACvB,IAAIgQ,EAAW9R,EAAQN,KAAK+tB,WACtB/tB,KAAK+tB,UACL/tB,KAAK+tB,UACDrrB,IAAW,IAANA,GAAc1C,KAAK+tB,UAAUZ,SAASvjB,KAAKxH,GAC1C,SACA,cAEhB,OAAa,IAANM,EACDoP,GAAcM,EAAUpS,KAAK4c,MAAM7L,KACnCrO,EACA0P,EAAS1P,EAAE2Q,OACXjB,GAg5GVwZ,GAAQ1Z,YAr4GR,SAA2BxP,GACvB,OAAa,IAANA,EACDoP,GAAc9R,KAAKguB,aAAchuB,KAAK4c,MAAM7L,KAC5CrO,EACA1C,KAAKguB,aAAatrB,EAAE2Q,OACpBrT,KAAKguB,cAi4GfpC,GAAQzZ,cA94GR,SAA6BzP,GACzB,OAAa,IAANA,EACDoP,GAAc9R,KAAKiuB,eAAgBjuB,KAAK4c,MAAM7L,KAC9CrO,EACA1C,KAAKiuB,eAAevrB,EAAE2Q,OACtBrT,KAAKiuB,gBA04GfrC,GAAQpZ,cAtzGR,SAA6B0b,EAAa9rB,EAAQE,GAC9C,IAAIP,EAAGsH,EAAK0D,EAEZ,GAAI/M,KAAKmuB,oBACL,OA7ER,SAA6BD,EAAa9rB,EAAQE,GAC9C,IAAIP,EACAwrB,EACAlkB,EACAmkB,EAAMU,EAAYT,oBACtB,IAAKztB,KAAKouB,eAKN,IAJApuB,KAAKouB,eAAiB,GACtBpuB,KAAKquB,oBAAsB,GAC3BruB,KAAKsuB,kBAAoB,GAEpBvsB,EAAI,EAAGA,EAAI,IAAKA,EACjBsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC/B/B,KAAKsuB,kBAAkBvsB,GAAK/B,KAAKkS,YAC7B7I,EACA,IACFokB,oBACFztB,KAAKquB,oBAAoBtsB,GAAK/B,KAAKmS,cAC/B9I,EACA,IACFokB,oBACFztB,KAAKouB,eAAersB,GAAK/B,KAAKoS,SAAS/I,EAAK,IAAIokB,oBAIxD,OAAInrB,EACe,SAAXF,GAEe,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,IACpBD,EAAK,KACN,QAAXnrB,GAEQ,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,IACzBD,EAAK,MAGT,KADfA,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IACvBD,EAAK,KAGb,SAAXnrB,GAEY,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAK3B,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,MAK7B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IAN/BD,EAOa,KACN,QAAXnrB,GAEK,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,MAKhC,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAKxB,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IAN/BD,EAOa,MAGZ,KADZA,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,MAK9B,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAKxB,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,IANjCD,EAOa,MASD3sB,KAAKZ,KAAMkuB,EAAa9rB,EAAQE,GAU/D,IAPKtC,KAAKouB,iBACNpuB,KAAKouB,eAAiB,GACtBpuB,KAAKsuB,kBAAoB,GACzBtuB,KAAKquB,oBAAsB,GAC3BruB,KAAKuuB,mBAAqB,IAGzBxsB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BAsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC3BO,IAAWtC,KAAKuuB,mBAAmBxsB,KACnC/B,KAAKuuB,mBAAmBxsB,GAAK,IAAIoL,OAC7B,IAAMnN,KAAKoS,SAAS/I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACpD,KAEJpJ,KAAKquB,oBAAoBtsB,GAAK,IAAIoL,OAC9B,IAAMnN,KAAKmS,cAAc9I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACzD,KAEJpJ,KAAKsuB,kBAAkBvsB,GAAK,IAAIoL,OAC5B,IAAMnN,KAAKkS,YAAY7I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACvD,MAGHpJ,KAAKouB,eAAersB,KACrBgL,EACI,IACA/M,KAAKoS,SAAS/I,EAAK,IACnB,KACArJ,KAAKmS,cAAc9I,EAAK,IACxB,KACArJ,KAAKkS,YAAY7I,EAAK,IAC1BrJ,KAAKouB,eAAersB,GAAK,IAAIoL,OAAOJ,EAAM3D,QAAQ,IAAK,IAAK,MAI5D9G,GACW,SAAXF,GACApC,KAAKuuB,mBAAmBxsB,GAAG6H,KAAKskB,GAEhC,OAAOnsB,EACJ,GACHO,GACW,QAAXF,GACApC,KAAKquB,oBAAoBtsB,GAAG6H,KAAKskB,GAEjC,OAAOnsB,EACJ,GACHO,GACW,OAAXF,GACApC,KAAKsuB,kBAAkBvsB,GAAG6H,KAAKskB,GAE/B,OAAOnsB,EACJ,IAAKO,GAAUtC,KAAKouB,eAAersB,GAAG6H,KAAKskB,GAC9C,OAAOnsB,IA0vGnB6pB,GAAQrZ,cA7sGR,SAAuBtF,GACnB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAKyT,qBAELzT,KAAKsT,iBAGXxS,EAAWd,KAAM,oBAClBA,KAAKsT,eAAiBT,IAEnB7S,KAAKyT,sBAAwBxG,EAC9BjN,KAAKyT,qBACLzT,KAAKsT,iBA8rGnBsY,GAAQtZ,mBA1rGR,SAA4BrF,GACxB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAK0T,0BAEL1T,KAAKuT,sBAGXzS,EAAWd,KAAM,yBAClBA,KAAKuT,oBAAsBT,IAExB9S,KAAK0T,2BAA6BzG,EACnCjN,KAAK0T,0BACL1T,KAAKuT,sBA2qGnBqY,GAAQvZ,iBAvqGR,SAA0BpF,GACtB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAK2T,wBAEL3T,KAAKwT,oBAGX1S,EAAWd,KAAM,uBAClBA,KAAKwT,kBAAoBT,IAEtB/S,KAAK2T,yBAA2B1G,EACjCjN,KAAK2T,wBACL3T,KAAKwT,oBAypGnBoY,GAAQvX,KAv+FR,SAAoB9T,GAGhB,MAAgD,OAAxCA,EAAQ,IAAI2J,cAAcskB,OAAO,IAq+F7C5C,GAAQnoB,SA39FR,SAAwBoQ,EAAOE,EAAS0a,GACpC,OAAY,GAAR5a,EACO4a,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAmjGhCjX,GAAmB,KAAM,CACrByN,KAAM,CACF,CACI4E,MAAO,aACPC,MAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,cACNge,OAAQ,KACRpN,KAAM,MAEV,CACI+R,MAAO,aACPC,OAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,gBACNge,OAAQ,KACRpN,KAAM,OAGdpC,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GATgC,IAA/BsD,EAAOtD,EAAS,IAAO,IACjB,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBb,EAAMikB,KAAO/d,EACT,wDACAmR,IAEJrX,EAAMuuB,SAAWroB,EACb,gEACAuR,IAGJ,IAAI+W,GAAU5mB,KAAKC,IAmBnB,SAAS4mB,GAAcrP,EAAUhf,EAAO6K,EAAOqX,GAC3C,IAAIxD,EAAQ6C,GAAevhB,EAAO6K,GAMlC,OAJAmU,EAASW,eAAiBuC,EAAYxD,EAAMiB,cAC5CX,EAASY,OAASsC,EAAYxD,EAAMkB,MACpCZ,EAASa,SAAWqC,EAAYxD,EAAMmB,QAE/Bb,EAASe,UAapB,SAASuO,GAAQlnB,GACb,OAAIA,EAAS,EACFI,KAAKiD,MAAMrD,GAEXI,KAAKgD,KAAKpD,GA2DzB,SAASmnB,GAAajP,GAGlB,OAAe,KAAPA,EAAe,OAG3B,SAASkP,GAAalgB,GAElB,OAAiB,OAATA,EAAmB,KA4D/B,SAASmgB,GAAOC,GACZ,OAAO,WACH,OAAOjvB,KAAKkvB,GAAGD,IAIvB,IAAIE,GAAiBH,GAAO,MACxBI,GAAYJ,GAAO,KACnBK,GAAYL,GAAO,KACnBM,GAAUN,GAAO,KACjBO,GAASP,GAAO,KAChBQ,GAAUR,GAAO,KACjBS,GAAWT,GAAO,KAClBU,GAAaV,GAAO,KACpBW,GAAUX,GAAO,KAWrB,SAASY,GAAW1oB,GAChB,OAAO,WACH,OAAOlH,KAAK4D,UAAY5D,KAAKqgB,MAAMnZ,GAAQxC,KAInD,IAAIob,GAAe8P,GAAW,gBAC1B1b,GAAU0b,GAAW,WACrB7b,GAAU6b,GAAW,WACrB/b,GAAQ+b,GAAW,SACnB/P,GAAO+P,GAAW,QAClB/gB,GAAS+gB,GAAW,UACpBpQ,GAAQoQ,GAAW,SAMvB,IAAInP,GAAQ1Y,KAAK0Y,MACboP,GAAa,CACT/Z,GAAI,GACJpI,EAAG,GACHhL,EAAG,GACHsT,EAAG,GACHvD,EAAG,GACH0D,EAAG,KACHE,EAAG,IAQX,SAASyZ,GAAeC,EAAgBrI,EAAemI,EAAYxtB,GAC/D,IAAIkd,EAAWuC,GAAeiO,GAAgB/nB,MAC1CkM,EAAUuM,GAAMlB,EAAS2P,GAAG,MAC5Bnb,EAAU0M,GAAMlB,EAAS2P,GAAG,MAC5Brb,EAAQ4M,GAAMlB,EAAS2P,GAAG,MAC1BrP,EAAOY,GAAMlB,EAAS2P,GAAG,MACzBrgB,EAAS4R,GAAMlB,EAAS2P,GAAG,MAC3BvP,EAAQc,GAAMlB,EAAS2P,GAAG,MAC1B1P,EAAQiB,GAAMlB,EAAS2P,GAAG,MAC1BnuB,GACKmT,GAAW2b,EAAW/Z,GAAM,CAAC,IAAK5B,GAClCA,EAAU2b,EAAWniB,GAAK,CAAC,KAAMwG,KACjCH,GAAW,GAAK,CAAC,MACjBA,EAAU8b,EAAWntB,GAAK,CAAC,KAAMqR,IACjCF,GAAS,GAAK,CAAC,MACfA,EAAQgc,EAAW7Z,GAAK,CAAC,KAAMnC,IAC/BgM,GAAQ,GAAK,CAAC,MACdA,EAAOgQ,EAAWpd,GAAK,CAAC,KAAMoN,GAgBvC,OAdoB,MAAhBgQ,EAAW1Z,IACXpV,EACIA,GACC4e,GAAS,GAAK,CAAC,MACfA,EAAQkQ,EAAW1Z,GAAK,CAAC,KAAMwJ,KAExC5e,EAAIA,GACC8N,GAAU,GAAK,CAAC,MAChBA,EAASghB,EAAWxZ,GAAK,CAAC,KAAMxH,IAChC2Q,GAAS,GAAK,CAAC,MAAS,CAAC,KAAMA,IAElC,GAAKkI,EACP3mB,EAAE,GAAuB,GAAjBgvB,EACRhvB,EAAE,GAAKsB,EApCX,SAA2ByX,EAAQnS,EAAQ+f,EAAemF,EAAUxqB,GAChE,OAAOA,EAAOsT,aAAahO,GAAU,IAAK+f,EAAe5N,EAAQ+S,IAoCxCzsB,MAAM,KAAMW,GAgEzC,IAAIivB,GAAQjoB,KAAKC,IAEjB,SAAS6Y,GAAKpS,GACV,OAAY,EAAJA,IAAUA,EAAI,KAAOA,EAGjC,SAASwhB,KAQL,IAAKjwB,KAAK4D,UACN,OAAO5D,KAAK+I,aAAaS,cAG7B,IAGIuK,EACAF,EACA2L,EACA9R,EAEAwiB,EACAC,EACAC,EACAC,EAXAnc,EAAU8b,GAAMhwB,KAAKkgB,eAAiB,IACtCL,EAAOmQ,GAAMhwB,KAAKmgB,OAClBtR,EAASmhB,GAAMhwB,KAAKogB,SAKpBkQ,EAAQtwB,KAAKovB,YAMjB,OAAKkB,GAOLvc,EAAUjJ,EAASoJ,EAAU,IAC7BL,EAAQ/I,EAASiJ,EAAU,IAC3BG,GAAW,GACXH,GAAW,GAGXyL,EAAQ1U,EAAS+D,EAAS,IAC1BA,GAAU,GAGVnB,EAAIwG,EAAUA,EAAQqc,QAAQ,GAAGnnB,QAAQ,SAAU,IAAM,GAEzD8mB,EAAYI,EAAQ,EAAI,IAAM,GAC9BH,EAAStP,GAAK7gB,KAAKogB,WAAaS,GAAKyP,GAAS,IAAM,GACpDF,EAAWvP,GAAK7gB,KAAKmgB,SAAWU,GAAKyP,GAAS,IAAM,GACpDD,EAAUxP,GAAK7gB,KAAKkgB,iBAAmBW,GAAKyP,GAAS,IAAM,GAGvDJ,EACA,KACC1Q,EAAQ2Q,EAAS3Q,EAAQ,IAAM,KAC/B3Q,EAASshB,EAASthB,EAAS,IAAM,KACjCgR,EAAOuQ,EAAWvQ,EAAO,IAAM,KAC/BhM,GAASE,GAAWG,EAAU,IAAM,KACpCL,EAAQwc,EAAUxc,EAAQ,IAAM,KAChCE,EAAUsc,EAAUtc,EAAU,IAAM,KACpCG,EAAUmc,EAAU3iB,EAAI,IAAM,KA9BxB,MAkCf,IAAI8iB,GAAUlR,GAAS5e,UAEvB8vB,GAAQ5sB,QAl4ER,WACI,OAAO5D,KAAK6D,UAk4EhB2sB,GAAQxoB,IA3YR,WACI,IAAI2P,EAAO3X,KAAKqgB,MAahB,OAXArgB,KAAKkgB,cAAgByO,GAAQ3uB,KAAKkgB,eAClClgB,KAAKmgB,MAAQwO,GAAQ3uB,KAAKmgB,OAC1BngB,KAAKogB,QAAUuO,GAAQ3uB,KAAKogB,SAE5BzI,EAAKmI,aAAe6O,GAAQhX,EAAKmI,cACjCnI,EAAKzD,QAAUya,GAAQhX,EAAKzD,SAC5ByD,EAAK5D,QAAU4a,GAAQhX,EAAK5D,SAC5B4D,EAAK9D,MAAQ8a,GAAQhX,EAAK9D,OAC1B8D,EAAK9I,OAAS8f,GAAQhX,EAAK9I,QAC3B8I,EAAK6H,MAAQmP,GAAQhX,EAAK6H,OAEnBxf,MA8XXwwB,GAAQzR,IAhXR,SAAexe,EAAO6K,GAClB,OAAOwjB,GAAc5uB,KAAMO,EAAO6K,EAAO,IAgX7ColB,GAAQzN,SA5WR,SAAoBxiB,EAAO6K,GACvB,OAAOwjB,GAAc5uB,KAAMO,EAAO6K,GAAQ,IA4W9ColB,GAAQtB,GA/RR,SAAY9kB,GACR,IAAKpK,KAAK4D,UACN,OAAOc,IAEX,IAAImb,EACAhR,EACAiR,EAAe9f,KAAKkgB,cAIxB,GAAc,WAFd9V,EAAQD,EAAeC,KAEY,YAAVA,GAAiC,SAAVA,EAG5C,OAFAyV,EAAO7f,KAAKmgB,MAAQL,EAAe,MACnCjR,EAAS7O,KAAKogB,QAAU0O,GAAajP,GAC7BzV,GACJ,IAAK,QACD,OAAOyE,EACX,IAAK,UACD,OAAOA,EAAS,EACpB,IAAK,OACD,OAAOA,EAAS,QAKxB,OADAgR,EAAO7f,KAAKmgB,MAAQpY,KAAK0Y,MAAMsO,GAAa/uB,KAAKogB,UACzChW,GACJ,IAAK,OACD,OAAOyV,EAAO,EAAIC,EAAe,OACrC,IAAK,MACD,OAAOD,EAAOC,EAAe,MACjC,IAAK,OACD,OAAc,GAAPD,EAAYC,EAAe,KACtC,IAAK,SACD,OAAc,KAAPD,EAAcC,EAAe,IACxC,IAAK,SACD,OAAc,MAAPD,EAAeC,EAAe,IAEzC,IAAK,cACD,OAAO/X,KAAKiD,MAAa,MAAP6U,GAAgBC,EACtC,QACI,MAAM,IAAIjZ,MAAM,gBAAkBuD,KAyPlDomB,GAAQrB,eAAiBA,GACzBqB,GAAQpB,UAAYA,GACpBoB,GAAQnB,UAAYA,GACpBmB,GAAQlB,QAAUA,GAClBkB,GAAQjB,OAASA,GACjBiB,GAAQhB,QAAUA,GAClBgB,GAAQf,SAAWA,GACnBe,GAAQd,WAAaA,GACrBc,GAAQb,QAAUA,GAClBa,GAAQtuB,QA5PR,WACI,OAAKlC,KAAK4D,UAIN5D,KAAKkgB,cACQ,MAAblgB,KAAKmgB,MACJngB,KAAKogB,QAAU,GAAM,OACK,QAA3BnV,EAAMjL,KAAKogB,QAAU,IANd1b,KA2Pf8rB,GAAQlQ,QA5WR,WACI,IAIIpM,EACAH,EACAF,EACA2L,EACAiR,EARA3Q,EAAe9f,KAAKkgB,cACpBL,EAAO7f,KAAKmgB,MACZtR,EAAS7O,KAAKogB,QACdzI,EAAO3X,KAAKqgB,MAgDhB,OArCyB,GAAhBP,GAA6B,GAARD,GAAuB,GAAVhR,GAClCiR,GAAgB,GAAKD,GAAQ,GAAKhR,GAAU,IAGjDiR,GAAuD,MAAvC+O,GAAQE,GAAalgB,GAAUgR,GAE/ChR,EADAgR,EAAO,GAMXlI,EAAKmI,aAAeA,EAAe,IAEnC5L,EAAUpJ,EAASgV,EAAe,KAClCnI,EAAKzD,QAAUA,EAAU,GAEzBH,EAAUjJ,EAASoJ,EAAU,IAC7ByD,EAAK5D,QAAUA,EAAU,GAEzBF,EAAQ/I,EAASiJ,EAAU,IAC3B4D,EAAK9D,MAAQA,EAAQ,GAErBgM,GAAQ/U,EAAS+I,EAAQ,IAIzBhF,GADA4hB,EAAiB3lB,EAASgkB,GAAajP,IAEvCA,GAAQgP,GAAQE,GAAa0B,IAG7BjR,EAAQ1U,EAAS+D,EAAS,IAC1BA,GAAU,GAEV8I,EAAKkI,KAAOA,EACZlI,EAAK9I,OAASA,EACd8I,EAAK6H,MAAQA,EAENxf,MAyTXwwB,GAAQlP,MAlOR,WACI,OAAOQ,GAAe9hB,OAkO1BwwB,GAAQ/kB,IA/NR,SAAerB,GAEX,OADAA,EAAQD,EAAeC,GAChBpK,KAAK4D,UAAY5D,KAAKoK,EAAQ,OAAS1F,KA8NlD8rB,GAAQ1Q,aAAeA,GACvB0Q,GAAQtc,QAAUA,GAClBsc,GAAQzc,QAAUA,GAClByc,GAAQ3c,MAAQA,GAChB2c,GAAQ3Q,KAAOA,GACf2Q,GAAQ7Q,MAlNR,WACI,OAAO7U,EAAS9K,KAAK6f,OAAS,IAkNlC2Q,GAAQ3hB,OAASA,GACjB2hB,GAAQhR,MAAQA,GAChBgR,GAAQ7I,SAlIR,SAAkB+I,EAAeC,GAC7B,IAAK3wB,KAAK4D,UACN,OAAO5D,KAAK+I,aAAaS,cAG7B,IAEInH,EACAiH,EAHAsnB,GAAa,EACbC,EAAKhB,GAyBT,MArB6B,iBAAlBa,IACPC,EAAgBD,EAChBA,GAAgB,GAES,kBAAlBA,IACPE,EAAaF,GAEY,iBAAlBC,IACPE,EAAKpwB,OAAOqwB,OAAO,GAAIjB,GAAYc,GACZ,MAAnBA,EAAcjjB,GAAiC,MAApBijB,EAAc7a,KACzC+a,EAAG/a,GAAK6a,EAAcjjB,EAAI,IAIlCrL,EAASrC,KAAK+I,aACdO,EAASwmB,GAAe9vB,MAAO4wB,EAAYC,EAAIxuB,GAE3CuuB,IACAtnB,EAASjH,EAAO0qB,YAAY/sB,KAAMsJ,IAG/BjH,EAAOolB,WAAWne,IAoG7BknB,GAAQxH,YAAciH,GACtBO,GAAQ7vB,SAAWsvB,GACnBO,GAAQ/G,OAASwG,GACjBO,GAAQnuB,OAASA,GACjBmuB,GAAQznB,WAAaA,GAErBynB,GAAQO,YAAc1qB,EAClB,sFACA4pB,IAEJO,GAAQpM,KAAOA,GAIf3b,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1BqE,GAAc,IAAKJ,IACnBI,GAAc,IAhuJO,wBAiuJrBc,GAAc,IAAK,SAAUrN,EAAO2I,EAAOpD,GACvCA,EAAO5B,GAAK,IAAIxC,KAAyB,IAApBse,WAAWzf,MAEpCqN,GAAc,IAAK,SAAUrN,EAAO2I,EAAOpD,GACvCA,EAAO5B,GAAK,IAAIxC,KAAKuJ,EAAM1K,MAK/BJ,EAAM6wB,QAAU,SAj+KZ/wB,EAm+KY0c,GAEhBxc,EAAM0B,GAAK6kB,GACXvmB,EAAMsP,IA1/EN,WAGI,OAAO0P,GAAO,WAFH,GAAGxY,MAAM/F,KAAKP,UAAW,KA0/ExCF,EAAMgI,IAr/EN,WAGI,OAAOgX,GAAO,UAFH,GAAGxY,MAAM/F,KAAKP,UAAW,KAq/ExCF,EAAM0b,IAh/EI,WACN,OAAOna,KAAKma,IAAMna,KAAKma,OAAS,IAAIna,MAg/ExCvB,EAAMqC,IAAML,EACZhC,EAAMupB,KA1oBN,SAAoBnpB,GAChB,OAAOoc,GAAoB,IAARpc,IA0oBvBJ,EAAM0O,OAlhBN,SAAoBzM,EAAQ0pB,GACxB,OAAOG,GAAe7pB,EAAQ0pB,EAAO,WAkhBzC3rB,EAAMsB,OAASA,EACftB,EAAMkC,OAASmV,GACfrX,EAAM2iB,QAAUre,EAChBtE,EAAMof,SAAWuC,GACjB3hB,EAAM6F,SAAWA,EACjB7F,EAAMiS,SAhhBN,SAAsBga,EAAchqB,EAAQ0pB,GACxC,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,aAghBzD3rB,EAAMyqB,UA9oBN,WACI,OAAOjO,GAAYvc,MAAM,KAAMC,WAAWuqB,aA8oB9CzqB,EAAM4I,WAAa6O,GACnBzX,EAAMogB,WAAaA,GACnBpgB,EAAMyO,YAxhBN,SAAyBxM,EAAQ0pB,GAC7B,OAAOG,GAAe7pB,EAAQ0pB,EAAO,gBAwhBzC3rB,EAAM+R,YA7gBN,SAAyBka,EAAchqB,EAAQ0pB,GAC3C,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,gBA6gBzD3rB,EAAM0X,aAAeA,GACrB1X,EAAM8wB,aAr4GN,SAAsB/pB,EAAMpB,GACxB,IACQzD,EACA6uB,EACA5pB,EAsCR,OAzCc,MAAVxB,GAGIwB,EAAesN,GAEE,MAAjB6B,GAAQvP,IAA+C,MAA9BuP,GAAQvP,GAAM8Q,aAEvCvB,GAAQvP,GAAMO,IAAIJ,EAAaoP,GAAQvP,GAAM6Q,QAASjS,KAIrC,OADjBorB,EAAYla,GAAW9P,MAEnBI,EAAe4pB,EAAUnZ,SAE7BjS,EAASuB,EAAaC,EAAcxB,GACnB,MAAborB,IAIAprB,EAAOgS,KAAO5Q,IAElB7E,EAAS,IAAImF,EAAO1B,IACbkS,aAAevB,GAAQvP,GAC9BuP,GAAQvP,GAAQ7E,GAIpBmV,GAAmBtQ,IAGE,MAAjBuP,GAAQvP,KAC0B,MAA9BuP,GAAQvP,GAAM8Q,cACdvB,GAAQvP,GAAQuP,GAAQvP,GAAM8Q,aAC1B9Q,IAASsQ,MACTA,GAAmBtQ,IAEC,MAAjBuP,GAAQvP,WACRuP,GAAQvP,IAIpBuP,GAAQvP,IA41GnB/G,EAAMsW,QAj0GN,WACI,OAAO1P,EAAK0P,KAi0GhBtW,EAAMgS,cArhBN,SAA2Bia,EAAchqB,EAAQ0pB,GAC7C,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,kBAqhBzD3rB,EAAMgK,eAAiBA,EACvBhK,EAAMgxB,qBAtNN,SAAoCC,GAChC,YAAyB9sB,IAArB8sB,EACO3Q,GAEqB,mBAArB2Q,IACP3Q,GAAQ2Q,GACD,IAiNfjxB,EAAMkxB,sBA3MN,SAAqCC,EAAWC,GAC5C,YAA8BjtB,IAA1BurB,GAAWyB,UAGDhtB,IAAVitB,EACO1B,GAAWyB,IAEtBzB,GAAWyB,GAAaC,EACN,MAAdD,IACAzB,GAAW/Z,GAAKyb,EAAQ,IAErB,KAiMXpxB,EAAM8mB,eAx5DN,SAA2BuK,EAAU3V,GACjC,IAAIwF,EAAOmQ,EAASnQ,KAAKxF,EAAK,QAAQ,GACtC,OAAOwF,GAAQ,EACT,WACAA,GAAQ,EACR,WACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,WACA,YA24DVlhB,EAAMO,UAAYgmB,GAGlBvmB,EAAMsxB,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnB1jB,KAAM,aACN2jB,KAAM,QACNC,aAAc,WACdC,QAAS,eACTxjB,KAAM,aACNN,MAAO,WAKX9N,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,8FAA8FK,MAClG,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,4DAA4DlD,MAClE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CsH,cAAe,SACfnC,KAAM,SAAU9T,GACZ,MAAO,QAAQqJ,KAAKrJ,IAExBkD,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD4a,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhC/kB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,kBACTC,SAAU,eACVC,QAAS,iBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,YACNnI,EAAG,mBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,YACJC,EAAG,SACHC,GAAI,SACJxD,EAAG,SACHyD,GAAI,SACJG,EAAG,WACHC,GAAI,YACJhG,EAAG,UACHiG,GAAI,WAERb,uBAAwB,kBACxB9M,QAAS,SAAUjB,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMI,SAAbghB,GAAuBhgB,GACnB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDE,SAAZigB,GAAsBtJ,GAClB,OAAO,SAAUhhB,EAAQ+f,EAAe5N,EAAQ+S,GAC5C,IAAIqF,EAAIF,GAAWrqB,GACfwqB,EAAMC,GAAQzJ,GAAGqJ,GAAWrqB,IAIhC,OAHU,IAANuqB,IACAC,EAAMA,EAAIzK,EAAgB,EAAI,IAE3ByK,EAAI/oB,QAAQ,MAAOzB,IAtEtC,IAaIyqB,GAAU,CACN1kB,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJhL,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJsT,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJvD,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJ4D,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJ/F,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaR+hB,GAAW,CACP,iCACA,iCACA,2BACA,iCACA,qBACA,2BACA,uCACA,qBACA,uCACA,uCACA,uCACA,wCAGRlyB,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQwjB,GACRzjB,YAAayjB,GACbjgB,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,gBACfnC,KAAM,SAAU9T,GACZ,MAAO,WAAQA,GAEnBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,SAEA,UAGf3I,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAGukB,GAAU,KACbnc,GAAImc,GAAU,KACdvvB,EAAGuvB,GAAU,KACblc,GAAIkc,GAAU,KACdjc,EAAGic,GAAU,KACbhc,GAAIgc,GAAU,KACdxf,EAAGwf,GAAU,KACb/b,GAAI+b,GAAU,KACd5b,EAAG4b,GAAU,KACb3b,GAAI2b,GAAU,KACd3hB,EAAG2hB,GAAU,KACb1b,GAAI0b,GAAU,MAElBxK,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0WAAwEK,MAC5E,KAEJN,YAAa,0WAAwEM,MACjF,KAEJkD,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,oCACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,8BACJG,EAAG,qBACHC,GAAI,8BACJhG,EAAG,qBACHiG,GAAI,qCAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,MAkBM,SAAfuhB,GAAyBvgB,GACrB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDI,SAAdwgB,GAAwB7J,GACpB,OAAO,SAAUhhB,EAAQ+f,EAAe5N,EAAQ+S,GAC5C,IAAIqF,EAAIK,GAAa5qB,GACjBwqB,EAAMM,GAAU9J,GAAG4J,GAAa5qB,IAIpC,OAHU,IAANuqB,IACAC,EAAMA,EAAIzK,EAAgB,EAAI,IAE3ByK,EAAI/oB,QAAQ,MAAOzB,IAlFtC,IAAI+qB,GAAY,CACRC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,IACHC,EAAG,KAePX,GAAY,CACR/kB,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJhL,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJsT,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJvD,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJ4D,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJ/F,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaR+iB,GAAW,CACP,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGRlzB,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQwkB,GACRzkB,YAAaykB,GACbjhB,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,gBACfnC,KAAM,SAAU9T,GACZ,MAAO,WAAQA,GAEnBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,SAEA,UAGf3I,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAG8kB,GAAY,KACf1c,GAAI0c,GAAY,KAChB9vB,EAAG8vB,GAAY,KACfzc,GAAIyc,GAAY,KAChBxc,EAAGwc,GAAY,KACfvc,GAAIuc,GAAY,KAChB/f,EAAG+f,GAAY,KACftc,GAAIsc,GAAY,KAChBnc,EAAGmc,GAAY,KACflc,GAAIkc,GAAY,KAChBliB,EAAGkiB,GAAY,KACfjc,GAAIic,GAAY,MAEpB1U,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAOupB,GAAUvpB,KAEpBC,QAAQ,KAAM,WAEvBgI,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0WAAwEK,MAC5E,KAEJN,YAAa,0WAAwEM,MACjF,KAEJkD,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,oCACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,8BACJG,EAAG,qBACHC,GAAI,8BACJhG,EAAG,qBACHiG,GAAI,qCAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIsiB,GAAc,CACVX,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPG,GAAY,CACRC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb9zB,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wYAA6EK,MACjF,KAEJN,YAAa,wYAA6EM,MACtF,KAEJkD,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,gBACfnC,KAAM,SAAU9T,GACZ,MAAO,WAAQA,GAEnBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,SAEA,UAGf3I,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,oCACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,8BACJG,EAAG,qBACHC,GAAI,8BACJhG,EAAG,qBACHiG,GAAI,qCAERuH,SAAU,SAAUhE,GAChB,OAAOA,EACF1Q,QAAQ,kEAAiB,SAAUD,GAChC,OAAOoqB,GAAUpqB,KAEpBC,QAAQ,UAAM,MAEvBqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAOmqB,GAAYnqB,KAEtBC,QAAQ,KAAM,WAEvBgI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,gXAAyEK,MAC7E,KAEJN,YAAa,gXAAyEM,MAClF,KAEJkD,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,8FACTC,QAAS,kFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,oCACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,8BACJG,EAAG,qBACHC,GAAI,8BACJhG,EAAG,qBACHiG,GAAI,qCAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KA8BM,SAAfkjB,GAAyBliB,GACrB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACW,GAAXA,EAAI,KAAYA,EAAI,KAAO,GAC3B,EACW,IAAXA,EAAI,IACJ,EACA,EAoDI,SAAdmiB,GAAwBxL,GACpB,OAAO,SAAUhhB,EAAQ+f,EAAe5N,EAAQ+S,GAC5C,IAAIqF,EAAIgC,GAAavsB,GACjBwqB,EAAMiC,GAAUzL,GAAGuL,GAAavsB,IAIpC,OAHU,IAANuqB,IACAC,EAAMA,EAAIzK,EAAgB,EAAI,IAE3ByK,EAAI/oB,QAAQ,MAAOzB,IA9FtC,IAAI0sB,GAAc,CACV1B,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPkB,GAAc,CACVd,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAeTG,GAAY,CACR1mB,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,8BACA,oCACA,qCAEJhL,EAAG,CACC,iEACA,gEACA,CAAC,6CAAW,8CACZ,oCACA,oCACA,qCAEJsT,EAAG,CACC,2DACA,0DACA,CAAC,uCAAU,wCACX,oCACA,8BACA,+BAEJvD,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,oCACA,yBAEJ4D,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,8BACA,8BACA,yBAEJ/F,EAAG,CACC,qDACA,8CACA,CAAC,iCAAS,kCACV,oCACA,oCACA,0BAaRikB,GAAW,CACP,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGRp0B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ0lB,GACR3lB,YAAa2lB,GACbniB,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,mMAAwCjD,MAAM,KAC7DgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,uBACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,gBACfnC,KAAM,SAAU9T,GACZ,MAAO,WAAQA,GAEnBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,SAEA,UAGf3I,SAAU,CACNC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAGymB,GAAY,KACfre,GAAIqe,GAAY,KAChBzxB,EAAGyxB,GAAY,KACfpe,GAAIoe,GAAY,KAChBne,EAAGme,GAAY,KACfle,GAAIke,GAAY,KAChB1hB,EAAG0hB,GAAY,KACfje,GAAIie,GAAY,KAChB9d,EAAG8d,GAAY,KACf7d,GAAI6d,GAAY,KAChB7jB,EAAG6jB,GAAY,KACf5d,GAAI4d,GAAY,MAEpBrW,SAAU,SAAUhE,GAChB,OAAOA,EACF1Q,QAAQ,kEAAiB,SAAUD,GAChC,OAAOmrB,GAAYnrB,KAEtBC,QAAQ,UAAM,MAEvBqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAOkrB,GAAYlrB,KAEtBC,QAAQ,KAAM,WAEvBgI,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb,IAAIwjB,GAAW,CACX7B,EAAG,QACHI,EAAG,QACHG,EAAG,QACHuB,GAAI,QACJC,GAAI,QACJ9B,EAAG,OACHK,EAAG,OACH0B,GAAI,OACJC,GAAI,OACJ/B,EAAG,cACHC,EAAG,cACH+B,IAAK,cACL7B,EAAG,YACHG,EAAG,QACH2B,GAAI,QACJC,GAAI,QACJC,GAAI,kBACJC,GAAI,mBAwFR,SAASC,GAAuBvtB,EAAQ+f,EAAejhB,GACnD,IATkB0uB,EACdC,EAgBJ,MAAY,MAAR3uB,EACOihB,EAAgB,6CAAY,6CACpB,MAARjhB,EACAihB,EAAgB,6CAAY,6CAE5B/f,EAAS,KAtBFwtB,GAsB6BxtB,EArB3CytB,EAQS,CACTtf,GAAI4R,EAAgB,6HAA2B,6HAC/C3R,GAAI2R,EAAgB,6HAA2B,6HAC/CzR,GAAIyR,EAAgB,6HAA2B,6HAC/CxR,GAAI,6EACJI,GAAI,iHACJC,GAAI,8EAOgC9P,GArBvByI,MAAM,KAChBimB,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAnFhBj1B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,+EAA+EK,MACnF,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2KAAqElD,MAC3E,KAEJiD,cAAe,sDAA8BjD,MAAM,KACnDgD,YAAa,+CAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,qBACTC,QAAS,kBACTC,SAAU,mDACVC,QAAS,qBACTC,SAAU,iDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,qBACNnI,EAAG,+BACHoI,GAAI,iBACJpT,EAAG,uBACHqT,GAAI,sBACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,aACHyD,GAAI,YACJG,EAAG,SACHC,GAAI,QACJhG,EAAG,SACHiG,GAAI,SAERC,cAAe,oDACfnC,KAAM,SAAU9T,GACZ,MAAO,8BAAmBqJ,KAAKrJ,IAEnCkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,YACAA,EAAO,GACP,kBACAA,EAAO,GACP,eAEA,cAGf9H,uBAAwB,6DACxB9M,QAAS,SAAUjB,GACf,GAAe,IAAXA,EAEA,OAAOA,EAAS,kBAEpB,IAAI5G,EAAI4G,EAAS,GAGjB,OAAOA,GAAU6sB,GAASzzB,IAAMyzB,GAFvB7sB,EAAS,IAAO5G,IAEsByzB,GAD7B,KAAV7sB,EAAgB,IAAM,QAGlCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAgCb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,oiBAAuG8M,MAC3G,KAEJmmB,WAAY,whBAAqGnmB,MAC7G,MAGRN,YAAa,sRAA0DM,MACnE,KAEJkD,SAAU,CACNhQ,OAAQ,+SAA0D8M,MAC9D,KAEJmmB,WAAY,+SAA0DnmB,MAClE,KAEJie,SAAU,8IAEdhb,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS,6CACTC,QAAS,mDACTE,QAAS,6CACTD,SAAU,WACN,MAAO,6BAEXE,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,uEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,mEAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNnI,EAAG,wFACHhL,EAAGwyB,GACHnf,GAAImf,GACJlf,EAAGkf,GACHjf,GAAIif,GACJziB,EAAG,iCACHyD,GAAIgf,GACJ7e,EAAG,iCACHC,GAAI4e,GACJ5kB,EAAG,qBACHiG,GAAI2e,IAER1e,cAAe,wHACfnC,KAAM,SAAU9T,GACZ,MAAO,8DAAiBqJ,KAAKrJ,IAEjCkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,qBAEA,wCAGf9H,uBAAwB,uCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACD,OAAQ/a,EAAS,IAAO,GAAKA,EAAS,IAAO,GACzCA,EAAS,KAAQ,IACjBA,EAAS,KAAQ,GAEfA,EAAS,UADTA,EAAS,UAEnB,IAAK,IACD,OAAOA,EAAS,gBACpB,QACI,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,kbAAoFK,MACxF,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,uCACTC,QAAS,uCACTC,SAAU,mBACVC,QAAS,6CACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,sEACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,kEAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNnI,EAAG,wFACHoI,GAAI,gDACJpT,EAAG,uCACHqT,GAAI,0CACJC,EAAG,qBACHC,GAAI,8BACJxD,EAAG,qBACHyD,GAAI,8BACJC,EAAG,6CACHC,GAAI,gDACJC,EAAG,iCACHC,GAAI,0CACJhG,EAAG,uCACHiG,GAAI,2CAERb,uBAAwB,0FACxB9M,QAAS,SAAUjB,GACf,IAAI2tB,EAAY3tB,EAAS,GACrB4tB,EAAc5tB,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,gBACO,GAAhB4tB,EACA5tB,EAAS,gBACK,GAAd4tB,GAAoBA,EAAc,GAClC5tB,EAAS,gBACK,GAAd2tB,EACA3tB,EAAS,gBACK,GAAd2tB,EACA3tB,EAAS,gBACK,GAAd2tB,GAAiC,GAAdA,EACnB3tB,EAAS,gBAETA,EAAS,iBAGxByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,uKAA8IK,MAClJ,KAEJN,YAAa,gEAAiDM,MAAM,KACpEkD,SAAU,yDAA+ClD,MAAM,KAC/DiD,cAAe,mCAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,kDACLC,KAAM,wDAEVZ,SAAU,CACNC,QAAS,yBACTC,QAAS,2BACTC,SAAU,+BACVC,QAAS,2BACTC,SAAU,6CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oBACRC,KAAM,uBACNnI,EAAG,kBACHoI,GAAI,aACJpT,EAAG,eACHqT,GAAI,YACJC,EAAG,uBACHC,GAAI,oBACJxD,EAAG,aACHyD,GAAI,UACJG,EAAG,aACHC,GAAI,UACJhG,EAAG,YACHiG,GAAI,UAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIwkB,GAAc,CACV7C,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPqC,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbh2B,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,sdAA0FK,MAC9F,KAEJN,YAAa,4UAAmEM,MAC5E,KAEJkD,SAAU,2TAA4DlD,MAClE,KAEJiD,cAAe,6LAAuCjD,MAAM,KAC5DgD,YAAa,+JAAkChD,MAAM,KACrDxF,eAAgB,CACZ2L,GAAI,4BACJD,IAAK,+BACLE,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,wDACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAG,sEACHoI,GAAI,gDACJpT,EAAG,8CACHqT,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,wBACJhG,EAAG,kCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOssB,GAAYtsB,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOqsB,GAAYrsB,MAI3BqN,cAAe,6LACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,uBAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,uBAAb/Z,GAEa,6BAAbA,EADA+Z,EAGa,mCAAb/Z,EACQ,GAAR+Z,EAAYA,EAAOA,EAAO,GACb,mCAAb/Z,GAEa,+CAAbA,EADA+Z,EAAO,QACX,GAKX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,EACP,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,iCACAA,EAAO,GACP,6CAEA,sBAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIolB,GAAc,CACVzD,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPiD,GAAc,CACVX,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbh2B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sdAA0FK,MAC9F,KAEJN,YAAa,4UAAmEM,MAC5E,KAEJkD,SAAU,2TAA4DlD,MAClE,KAEJiD,cAAe,6LAAuCjD,MAAM,KAC5DgD,YAAa,+JAAkChD,MAAM,KACrDxF,eAAgB,CACZ2L,GAAI,4BACJD,IAAK,+BACLE,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,wDACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAG,sEACHoI,GAAI,gDACJpT,EAAG,8CACHqT,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,wBACJhG,EAAG,kCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOktB,GAAYltB,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOitB,GAAYjtB,MAG3BqN,cAAe,+HACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAGO,uBAAb/Z,GAA8B,GAAR+Z,GACT,mCAAb/Z,GAAwB+Z,EAAO,GACnB,mCAAb/Z,EAEO+Z,EAAO,GAEPA,GAGf/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,iCAEA,sBAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIslB,GAAc,CACV3D,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPmD,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAiGb,SAASC,GAAyBvvB,EAAQ+f,EAAejhB,GACrD,IAyBc0wB,EApBd,OAAOxvB,EAAS,KAoBFwvB,EAzBD,CACTphB,GAAI,WACJO,GAAI,MACJJ,GAAI,UAE8BzP,GAqBvB,IArB6BkB,EAwBrCwvB,EAEX,SAAsBA,GAClB,IAAIC,EAAgB,CAChB10B,EAAG,IACH1B,EAAG,IACHyR,EAAG,KAEP,YAAsCnO,IAAlC8yB,EAAcD,EAAK3I,OAAO,IAGvB4I,EAAcD,EAAK3I,OAAO,IAAM2I,EAAKE,UAAU,GAF3CF,EAXAG,CAAaH,IA1H5Bh3B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wzBAAqJK,MACzJ,KAEJN,YAAa,qPAAiEM,MAC1E,KAEJJ,iBAAkB,+BAClByoB,kBAAkB,EAClBnlB,SAAU,mbAAgFlD,MACtF,KAEJiD,cAAe,2QAAoDjD,MAC/D,KAEJgD,YAAa,iIAA6BhD,MAAM,KAChDxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,4CACTC,QAAS,4CACTC,SAAU,mGACVC,QAAS,gCACTC,SAAU,kGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,oCACNnI,EAAG,iCACHoI,GAAI,0CACJpT,EAAG,+DACHqT,GAAI,oCACJC,EAAG,qEACHC,GAAI,0CACJxD,EAAG,mDACHyD,GAAI,8BACJG,EAAG,yDACHC,GAAI,8BACJhG,EAAG,6CACHiG,GAAI,mBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOotB,GAAYptB,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOmtB,GAAYntB,MAG3BqN,cAAe,6MACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAGO,yCAAb/Z,GAAiC,GAAR+Z,GACZ,+CAAb/Z,GAA0B+Z,EAAO,GACrB,+CAAb/Z,EAEO+Z,EAAO,GAEPA,GAGf/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,uCACAA,EAAO,GACP,6CACAA,EAAO,GACP,6CACAA,EAAO,GACP,6CAEA,wCAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAkDb,IAAIhC,GAAc,CACV,QACA,mBACA,QACA,QACA,QACA,cACA,QACA,QACA,QACA,QACA,OACA,SAEJwoB,GAAgB,uJAqBhBC,GAAmB,CACf,OACA,OACA,eACA,QACA,OACA,OACA,QA4ER,SAASC,GAAU/vB,EAAQ+f,EAAejhB,GACtC,IAAI+T,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,KAQD,OANI+T,GADW,IAAX7S,EACU,UACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,IACD,OAAO+f,EAAgB,eAAiB,eAC5C,IAAK,KAQD,OANIlN,GADW,IAAX7S,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,SAOlB,IAAK,IACD,OAAO+f,EAAgB,YAAc,cACzC,IAAK,KAQD,OANIlN,GADW,IAAX7S,EACU,MACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,OAEA,OAGlB,IAAK,KAMD,OAJI6S,GADW,IAAX7S,EACU,MAEA,OAGlB,IAAK,KAQD,OANI6S,GADW,IAAX7S,EACU,SACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,KAQD,OANI6S,GADW,IAAX7S,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,UA7H1BxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qFAAgFK,MACpF,KAEJN,YAAa,wDAAmDM,MAAM,KACtEkD,SAAU,kDAA6ClD,MAAM,KAC7DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,wBAAwBhD,MAAM,KAC3CsD,cAAeilB,GACfE,kBArCoB,CAChB,QACA,QACA,WACA,sBACA,SACA,WACA,YA+BJC,mBA7BqB,CACjB,QACA,QACA,QACA,QACA,QACA,QACA,SAuBJH,iBAAkBA,GAElB1oB,YAAayoB,GACb1oB,iBAAkB0oB,GAClBK,kBA7CoB,6FA8CpBC,uBA7CyB,gEA8CzB9oB,YAAaA,GACb+oB,gBAAiB/oB,GACjBgpB,iBAAkBhpB,GAElBtF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,mCAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,0BACTC,SAAU,eACVC,QAAS,qBACTC,SAAU,qBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,YACRC,KAAM,cACNnI,EAAG,2BACHoI,GAAI,YACJpT,EAAG,cACHqT,GAAImhB,GACJlhB,EAAG,SACHC,GAAI,SACJxD,EAAG,YACHyD,GAAIghB,GACJ7gB,EAAG,SACHC,GAAI4gB,GACJ5mB,EAAG,WACHiG,GApIR,SAAiC5O,GAC7B,OAWJ,SAASswB,EAAWtwB,GAChB,GAAa,EAATA,EACA,OAAOswB,EAAWtwB,EAAS,IAE/B,OAAOA,EAfCswB,CAAWtwB,IACf,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOA,EAAS,SACpB,QACI,OAAOA,EAAS,YA6HxB+N,uBAAwB,qBACxB9M,QAAS,SAAUjB,GAEf,OAAOA,GADiB,IAAXA,EAAe,QAAO,QAGvCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,GAETwF,cAAe,YACfnC,KAAM,SAAU3L,GACZ,MAAiB,SAAVA,GAEXjF,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAOjR,EAAO,GAAK,OAAS,UAoEpCrd,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qFAAqFK,MACzF,KAEJN,YAAa,8DAA8DM,MACvE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,iEAA4DlD,MAClE,KAEJiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB4B,QAAS,oBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACD,MAAO,4BACX,KAAK,EACD,MAAO,gCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,cACHoI,GAAI4hB,GACJh1B,EAAGg1B,GACH3hB,GAAI2hB,GACJ1hB,EAAG0hB,GACHzhB,GAAIyhB,GACJjlB,EAAG,MACHyD,GAAIwhB,GACJrhB,EAAG,SACHC,GAAIohB,GACJpnB,EAAG,SACHiG,GAAImhB,IAERhiB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJwmB,WAAY,uFAAoFnmB,MAC5F,KAEJ9M,OAAQ,wHAAqH8M,MACzH,KAEJie,SAAU,mBAEdve,YAAa,iEAA8DM,MACvE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,mBACJ2iB,GAAI,aACJ1iB,IAAK,gCACL2iB,IAAK,mBACL1iB,KAAM,qCACN2iB,KAAM,wBAEVvjB,SAAU,CACNC,QAAS,WACL,MAAO,YAA+B,IAAjB9U,KAAK6T,QAAgB,MAAQ,MAAQ,QAE9DkB,QAAS,WACL,MAAO,eAA+B,IAAjB/U,KAAK6T,QAAgB,MAAQ,MAAQ,QAE9DmB,SAAU,WACN,MAAO,YAA+B,IAAjBhV,KAAK6T,QAAgB,MAAQ,MAAQ,QAE9DoB,QAAS,WACL,MAAO,YAA+B,IAAjBjV,KAAK6T,QAAgB,MAAQ,MAAQ,QAE9DqB,SAAU,WACN,MACI,wBACkB,IAAjBlV,KAAK6T,QAAgB,MAAQ,MAC9B,QAGRsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,eACRC,KAAM,QACNnI,EAAG,aACHoI,GAAI,YACJpT,EAAG,WACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,SACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERb,uBAAwB,wBACxB9M,QAAS,SAAUjB,EAAQ+a,GAcvB,OAAO/a,GAHQ,MAAX+a,GAA6B,MAAXA,EATP,IAAX/a,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,OAEG,MAIjByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIqnB,GAAW,8HAAoFnpB,MAC3F,KAEJN,GAAc,yFAAkDM,MAAM,KACtEopB,GAAgB,CACZ,QACA,WACA,aACA,QACA,aACA,wCACA,2CACA,QACA,gBACA,gBACA,QACA,SAIJC,GAAgB,mPAEpB,SAASC,GAASxmB,GACd,OAAW,EAAJA,GAASA,EAAI,GAAoB,MAAZA,EAAI,IAEpC,SAASymB,GAAY9wB,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIrS,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,IACD,OAAOihB,GAAiBmF,EAAW,gBAAe,mBACtD,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUge,GAAS7wB,GAAU,UAAY,UAEzC6S,EAAS,YAExB,IAAK,IACD,OAAOkN,EAAgB,SAAWmF,EAAW,SAAW,UAC5D,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUge,GAAS7wB,GAAU,SAAW,SAExC6S,EAAS,WAExB,IAAK,IACD,OAAOkN,EAAgB,SAAWmF,EAAW,SAAW,UAC5D,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUge,GAAS7wB,GAAU,SAAW,SAExC6S,EAAS,WAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,MAAQ,OAC/C,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUge,GAAS7wB,GAAU,MAAQ,UAErC6S,EAAS,MAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,gBAAU,kBACjD,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUge,GAAS7wB,GAAU,iBAAW,uBAExC6S,EAAS,iBAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUge,GAAS7wB,GAAU,OAAS,OAEtC6S,EAAS,QAwShC,SAASke,GAAoB/wB,EAAQ+f,EAAejhB,EAAKomB,GACrD,IAAIzqB,EAAS,CACTM,EAAG,CAAC,cAAe,gBACnBsT,EAAG,CAAC,cAAe,gBACnBvD,EAAG,CAAC,UAAW,aACfyD,GAAI,CAACvO,EAAS,QAASA,EAAS,UAChCwO,EAAG,CAAC,aAAc,eAClBE,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC3O,EAAS,UAAWA,EAAS,YAClC2I,EAAG,CAAC,WAAY,cAChBiG,GAAI,CAAC5O,EAAS,SAAUA,EAAS,YAErC,OAAO+f,EAAgBtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GA6DxD,SAASkyB,GAAsBhxB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTM,EAAG,CAAC,cAAe,gBACnBsT,EAAG,CAAC,cAAe,gBACnBvD,EAAG,CAAC,UAAW,aACfyD,GAAI,CAACvO,EAAS,QAASA,EAAS,UAChCwO,EAAG,CAAC,aAAc,eAClBE,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC3O,EAAS,UAAWA,EAAS,YAClC2I,EAAG,CAAC,WAAY,cAChBiG,GAAI,CAAC5O,EAAS,SAAUA,EAAS,YAErC,OAAO+f,EAAgBtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GA6DxD,SAASmyB,GAAsBjxB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTM,EAAG,CAAC,cAAe,gBACnBsT,EAAG,CAAC,cAAe,gBACnBvD,EAAG,CAAC,UAAW,aACfyD,GAAI,CAACvO,EAAS,QAASA,EAAS,UAChCwO,EAAG,CAAC,aAAc,eAClBE,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC3O,EAAS,UAAWA,EAAS,YAClC2I,EAAG,CAAC,WAAY,cAChBiG,GAAI,CAAC5O,EAAS,SAAUA,EAAS,YAErC,OAAO+f,EAAgBtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAjcxDtG,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQwpB,GACRzpB,YAAaA,GACbG,YAAawpB,GACbzpB,iBAAkBypB,GAGlBV,kBAAmB,gPACnBC,uBAAwB,6FACxB9oB,YAAaspB,GACbP,gBAAiBO,GACjBN,iBAAkBM,GAClBlmB,SAAU,mFAAmDlD,MAAM,KACnEiD,cAAe,kCAAuBjD,MAAM,KAC5CgD,YAAa,kCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,yBACNgE,EAAG,cAEP5E,SAAU,CACNC,QAAS,cACTC,QAAS,kBACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,yBACX,KAAK,EACD,MAAO,oBACX,KAAK,EACD,MAAO,oBAGnB4B,QAAS,oBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,0BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,eACNnI,EAAG+qB,GACH3iB,GAAI2iB,GACJ/1B,EAAG+1B,GACH1iB,GAAI0iB,GACJziB,EAAGyiB,GACHxiB,GAAIwiB,GACJhmB,EAAGgmB,GACHviB,GAAIuiB,GACJpiB,EAAGoiB,GACHniB,GAAImiB,GACJnoB,EAAGmoB,GACHliB,GAAIkiB,IAER/iB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0TAAgEK,MACpE,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,2WAAoElD,MAC1E,KAEJiD,cAAe,iIAA6BjD,MAAM,KAClDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,iHACJC,IAAK,wHACLC,KAAM,+HAEVZ,SAAU,CACNC,QAAS,6EACTC,QAAS,6EACTE,QAAS,6EACTD,SAAU,wFACVE,SAAU,wFACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SAAUtM,GAMd,OAAOA,GALK,mCAAUyQ,KAAKzQ,GACrB,qBACA,uBAAQyQ,KAAKzQ,GACb,qBACA,uBAGVuM,KAAM,0CACNnI,EAAG,6EACHoI,GAAI,gDACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,8CACHC,GAAI,8BACJhG,EAAG,wCACHiG,GAAI,yBAERb,uBAAwB,6BACxB9M,QAAS,wBACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yFAAyFK,MAC7F,KAEJN,YAAa,qDAAqDM,MAC9D,KAEJkD,SAAU,+EAA+ElD,MACrF,KAEJiD,cAAe,+BAA+BjD,MAAM,KACpDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EAEpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,cACNnI,EAAG,mBACHoI,GAAI,YACJpT,EAAG,QACHqT,GAAI,WACJC,EAAG,MACHC,GAAI,SACJxD,EAAG,UACHyD,GAAI,aACJG,EAAG,MACHC,GAAI,SACJhG,EAAG,WACHiG,GAAI,cAERb,uBAAwB,mCAExB9M,QAAS,SAAUjB,GACf,IACI2B,EAAS,GAiCb,OATQ,GAzBA3B,EA2BA2B,EADM,KA1BN3B,GA0BkB,KA1BlBA,GA0B8B,KA1B9BA,GA0B0C,KA1B1CA,GA0BsD,MA1BtDA,EA2BS,MAEA,MAEF,EA/BPA,IAgCJ2B,EA9BS,CACL,GACA,KACA,KACA,MACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,KACA,KACA,MACA,KACA,OAvBA3B,IAkCDA,EAAS2B,GAEpB8H,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sFAAsFK,MAC1F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAAqDlD,MAAM,KACrEiD,cAAe,oCAA8BjD,MAAM,KACnDgD,YAAa,6BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,sCAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,sBACVC,QAAS,oBACTC,SAAU,qBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,iBACHoI,GAAI,cACJpT,EAAG,WACHqT,GAAI,cACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,cACHC,GAAI,gBACJhG,EAAG,WACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAqBb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,2FAAqFK,MACzF,KAEJN,YAAa,mEAA6DM,MACtE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdS,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAGg2B,GACH3iB,GAAI,aACJC,EAAG0iB,GACHziB,GAAI,aACJxD,EAAGimB,GACHxiB,GAAIwiB,GACJviB,EAAGuiB,GACHtiB,GAAI,YACJC,EAAGqiB,GACHpiB,GAAIoiB,GACJpoB,EAAGooB,GACHniB,GAAImiB,IAERhjB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAqBb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAqFK,MACzF,KAEJN,YAAa,gEAA6DM,MACtE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,uBAAuBjD,MAAM,KAC5CgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdS,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAGi2B,GACH5iB,GAAI,aACJC,EAAG2iB,GACH1iB,GAAI,aACJxD,EAAGkmB,GACHziB,GAAIyiB,GACJxiB,EAAGwiB,GACHviB,GAAI,YACJC,EAAGsiB,GACHriB,GAAIqiB,GACJroB,EAAGqoB,GACHpiB,GAAIoiB,IAERjjB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAqBb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wFAAqFK,MACzF,KAEJN,YAAa,gEAA6DM,MACtE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,sBACTK,SAAU,IACVJ,QAAS,uBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,gCAEdS,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAGk2B,GACH7iB,GAAI,aACJC,EAAG4iB,GACH3iB,GAAI,aACJxD,EAAGmmB,GACH1iB,GAAI0iB,GACJziB,EAAGyiB,GACHxiB,GAAI,YACJC,EAAGuiB,GACHtiB,GAAIsiB,GACJtoB,EAAGsoB,GACHriB,GAAIqiB,IAERljB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI6nB,GAAW,CACP,mDACA,+DACA,uCACA,mDACA,eACA,2BACA,uCACA,mDACA,2EACA,+DACA,+DACA,gEAEJzmB,GAAW,CACP,mDACA,2BACA,mDACA,2BACA,+DACA,uCACA,oDAGRjS,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQgqB,GACRjqB,YAAaiqB,GACbzmB,SAAUA,GACVD,cAAeC,GACfF,YAAa,iLAAqChD,MAAM,KACxDxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,WACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVe,cAAe,4BACfnC,KAAM,SAAU9T,GACZ,MAAO,iBAASA,GAEpBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,eAEA,gBAGf3I,SAAU,CACNC,QAAS,4CACTC,QAAS,4CACTC,SAAU,UACVC,QAAS,4CACTC,SAAU,6DACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,sDACRC,KAAM,0CACNnI,EAAG,uFACHoI,GAAI,sDACJpT,EAAG,mDACHqT,GAAI,0CACJC,EAAG,+DACHC,GAAI,sDACJxD,EAAG,mDACHyD,GAAI,0CACJG,EAAG,uCACHC,GAAI,8BACJhG,EAAG,mDACHiG,GAAI,2CAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CACFL,IAAK,EACLC,IAAK,MAab7Q,EAAM0X,aAAa,KAAM,CACrBihB,mBAAoB,wnBAAqH5pB,MACrI,KAEJ6pB,iBAAkB,wnBAAqH7pB,MACnI,KAEJL,OAAQ,SAAUmqB,EAAgB52B,GAC9B,OAAK42B,EAGiB,iBAAX52B,GACP,IAAIwH,KAAKxH,EAAOi1B,UAAU,EAAGj1B,EAAO2L,QAAQ,UAGrC/N,KAAKi5B,kBAAkBD,EAAettB,SAEtC1L,KAAKk5B,oBAAoBF,EAAettB,SARxC1L,KAAKk5B,qBAWpBtqB,YAAa,kPAAoDM,MAAM,KACvEkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CzL,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAY,GAAR5a,EACO4a,EAAU,eAAO,eAEjBA,EAAU,eAAO,gBAGhCpa,KAAM,SAAU9T,GACZ,MAAyC,YAAjCA,EAAQ,IAAI2J,cAAc,IAEtCsM,cAAe,+BACf9M,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEV0jB,WAAY,CACRrkB,QAAS,+CACTC,QAAS,yCACTC,SAAU,eACVC,QAAS,mCACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,iGACX,QACI,MAAO,yGAGnB8B,SAAU,KAEdN,SAAU,SAAUpO,EAAK4C,GACrB,IApEc9I,EAoEV+I,EAAStJ,KAAKo5B,YAAY3yB,GAC1BoN,EAAQxK,GAAOA,EAAIwK,QAIvB,OAzEctT,EAsEG+I,GApEI,oBAAblC,UAA4B7G,aAAiB6G,UACX,sBAA1C3G,OAAOC,UAAUC,SAASC,KAAKL,MAoE3B+I,EAASA,EAAOlJ,MAAMiJ,IAEnBC,EAAOF,QAAQ,KAAMyK,EAAQ,IAAO,EAAI,qBAAQ,6BAE3D8B,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNnI,EAAG,oGACHoI,GAAI,8EACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,8CACHyD,GAAI,oCACJG,EAAG,0DACHC,GAAI,oCACJhG,EAAG,gEACHiG,GAAI,2CAERb,uBAAwB,gBACxB9M,QAAS,WACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBb,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBb,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,kGAA6FK,MACjG,KAEJN,YAAa,yDAAoDM,MAAM,KACvEkD,SAAU,oEAAqDlD,MAAM,KACrEiD,cAAe,0CAAgCjD,MAAM,KACrDgD,YAAa,4BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,4BACJC,IAAK,kCACLC,KAAM,2CACN2iB,KAAM,uCAEV5hB,cAAe,cACfnC,KAAM,SAAU9T,GACZ,MAAyC,MAAlCA,EAAMiuB,OAAO,GAAGtkB,eAE3BzG,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAY,GAAR5a,EACO4a,EAAU,SAAW,SAErBA,EAAU,SAAW,UAGpC5Z,SAAU,CACNC,QAAS,sBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,sBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,gBACNnI,EAAG,kBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,WACHyD,GAAI,WACJG,EAAG,aACHC,GAAI,aACJhG,EAAG,WACHiG,GAAI,YAERb,uBAAwB,WACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIqoB,GAAiB,8DAA8DnqB,MAC3E,KAEJoqB,GAAgB,kDAAkDpqB,MAAM,KACxEqqB,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,mLAEpBr5B,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,2FAA2FK,MAC/F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACbk3B,GAAc52B,EAAEgJ,SAEhB2tB,GAAe32B,EAAEgJ,SAJjB2tB,IAOftqB,YAAayqB,GACb1qB,iBAAkB0qB,GAClB3B,kBAAmB,+FACnBC,uBAAwB,0FACxB9oB,YAAauqB,GACbxB,gBAAiBwB,GACjBvB,iBAAkBuB,GAClBnnB,SAAU,6DAAuDlD,MAAM,KACvEiD,cAAe,2CAAqCjD,MAAM,KAC1DgD,YAAa,0BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVZ,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjB9U,KAAK6T,QAAgB,IAAM,IAAM,QAE3DkB,QAAS,WACL,MAAO,mBAAmC,IAAjB/U,KAAK6T,QAAgB,IAAM,IAAM,QAE9DmB,SAAU,WACN,MAAO,cAAiC,IAAjBhV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DoB,QAAS,WACL,MAAO,cAAiC,IAAjBjV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DqB,SAAU,WACN,MACI,0BACkB,IAAjBlV,KAAK6T,QAAgB,IAAM,IAC5B,QAGRsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,aACJC,EAAG,aACHC,GAAI,aACJC,EAAG,SACHC,GAAI,WACJhG,EAAG,YACHiG,GAAI,cAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIyoB,GAAmB,8DAA8DvqB,MAC7E,KAEJwqB,GAAgB,kDAAkDxqB,MAAM,KACxEyqB,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,mLAEpBz5B,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,2FAA2FK,MAC/F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACbs3B,GAAch3B,EAAEgJ,SAEhB+tB,GAAiB/2B,EAAEgJ,SAJnB+tB,IAOf1qB,YAAa6qB,GACb9qB,iBAAkB8qB,GAClB/B,kBAAmB,+FACnBC,uBAAwB,0FACxB9oB,YAAa2qB,GACb5B,gBAAiB4B,GACjB3B,iBAAkB2B,GAClBvnB,SAAU,6DAAuDlD,MAAM,KACvEiD,cAAe,2CAAqCjD,MAAM,KAC1DgD,YAAa,0BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjB9U,KAAK6T,QAAgB,IAAM,IAAM,QAE3DkB,QAAS,WACL,MAAO,mBAAmC,IAAjB/U,KAAK6T,QAAgB,IAAM,IAAM,QAE9DmB,SAAU,WACN,MAAO,cAAiC,IAAjBhV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DoB,QAAS,WACL,MAAO,cAAiC,IAAjBjV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DqB,SAAU,WACN,MACI,0BACkB,IAAjBlV,KAAK6T,QAAgB,IAAM,IAC5B,QAGRsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,aACJC,EAAG,aACHC,GAAI,aACJC,EAAG,SACHC,GAAI,WACJhG,EAAG,YACHiG,GAAI,cAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,GAETxH,YAAa,sBAKjB,IAAIqwB,GAAmB,8DAA8D3qB,MAC7E,KAEJ4qB,GAAgB,kDAAkD5qB,MAAM,KACxE6qB,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,mLAEpB75B,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,2FAA2FK,MAC/F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACb03B,GAAcp3B,EAAEgJ,SAEhBmuB,GAAiBn3B,EAAEgJ,SAJnBmuB,IAOf9qB,YAAairB,GACblrB,iBAAkBkrB,GAClBnC,kBAAmB,+FACnBC,uBAAwB,0FACxB9oB,YAAa+qB,GACbhC,gBAAiBgC,GACjB/B,iBAAkB+B,GAClB3nB,SAAU,6DAAuDlD,MAAM,KACvEiD,cAAe,2CAAqCjD,MAAM,KAC1DgD,YAAa,0BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVZ,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjB9U,KAAK6T,QAAgB,IAAM,IAAM,QAE3DkB,QAAS,WACL,MAAO,mBAAmC,IAAjB/U,KAAK6T,QAAgB,IAAM,IAAM,QAE9DmB,SAAU,WACN,MAAO,cAAiC,IAAjBhV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DoB,QAAS,WACL,MAAO,cAAiC,IAAjBjV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DqB,SAAU,WACN,MACI,0BACkB,IAAjBlV,KAAK6T,QAAgB,IAAM,IAC5B,QAGRsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,aACJC,EAAG,aACHC,GAAI,aACJC,EAAG,SACHC,GAAI,WACJhG,EAAG,YACHiG,GAAI,cAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIipB,GAAmB,8DAA8D/qB,MAC7E,KAEJgrB,GAAgB,kDAAkDhrB,MAAM,KACxEirB,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,mLAqFpB,SAASC,GAAsB1yB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTsL,EAAG,CAAC,kBAAgB,iBAAe,iBACnCoI,GAAI,CAACnO,EAAS,UAAWA,EAAS,YAClCjF,EAAG,CAAC,gBAAc,gBAClBqT,GAAI,CAACpO,EAAS,UAAWA,EAAS,YAClCqO,EAAG,CAAC,eAAa,YAAa,eAC9BC,GAAI,CAACtO,EAAS,SAAUA,EAAS,UACjC8K,EAAG,CAAC,kBAAa,kBACjB4D,EAAG,CAAC,UAAW,WAAY,cAC3BC,GAAI,CAAC3O,EAAS,OAAQA,EAAS,SAC/B2I,EAAG,CAAC,eAAa,QAAS,gBAC1BiG,GAAI,CAAC5O,EAAS,SAAUA,EAAS,YAErC,OAAI+f,EACOtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAElDomB,EAAWzqB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GApGnDtG,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,2FAA2FK,MAC/F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACb83B,GAAcx3B,EAAEgJ,SAEhBuuB,GAAiBv3B,EAAEgJ,SAJnBuuB,IAOflrB,YAAaqrB,GACbtrB,iBAAkBsrB,GAClBvC,kBAAmB,+FACnBC,uBAAwB,0FACxB9oB,YAAamrB,GACbpC,gBAAiBoC,GACjBnC,iBAAkBmC,GAClB/nB,SAAU,6DAAuDlD,MAAM,KACvEiD,cAAe,2CAAqCjD,MAAM,KAC1DgD,YAAa,0BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjB9U,KAAK6T,QAAgB,IAAM,IAAM,QAE3DkB,QAAS,WACL,MAAO,mBAAmC,IAAjB/U,KAAK6T,QAAgB,IAAM,IAAM,QAE9DmB,SAAU,WACN,MAAO,cAAiC,IAAjBhV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DoB,QAAS,WACL,MAAO,cAAiC,IAAjBjV,KAAK6T,QAAgB,IAAM,IAAM,QAE5DqB,SAAU,WACN,MACI,0BACkB,IAAjBlV,KAAK6T,QAAgB,IAAM,IAC5B,QAGRsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,aACJC,EAAG,aACHC,GAAI,aACJC,EAAG,SACHC,GAAI,WACJhG,EAAG,YACHiG,GAAI,cAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,GAETxH,YAAa,sBAyBjBrJ,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gGAA6FK,MACjG,KAEJN,YAAa,gEAA6DM,MACtE,KAEJkD,SAAU,sFAAiElD,MACvE,KAEJiD,cAAe,gBAAgBjD,MAAM,KACrCgD,YAAa,gBAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,cACTC,SAAU,wBACVC,QAAS,aACTC,SAAU,oBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,eACRC,KAAM,YACNnI,EAAG2sB,GACHvkB,GAAIukB,GACJ33B,EAAG23B,GACHtkB,GAAIskB,GACJrkB,EAAGqkB,GACHpkB,GAAIokB,GACJ5nB,EAAG4nB,GACHnkB,GAAI,cACJG,EAAGgkB,GACH/jB,GAAI+jB,GACJ/pB,EAAG+pB,GACH9jB,GAAI8jB,IAER3kB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,+FAA+FK,MACnG,KAEJN,YAAa,8DAA8DM,MACvE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,sEAAsElD,MAC5E,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,0BACJC,IAAK,gCACLC,KAAM,sCACNgE,EAAG,WACHye,GAAI,oBACJC,IAAK,0BACLC,KAAM,gCAEVvjB,SAAU,CACNC,QAAS,kBACTC,QAAS,mBACTC,SAAU,gBACVC,QAAS,kBACTC,SAAU,0BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,iBACHoI,GAAI,aACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,WACHyD,GAAI,UACJG,EAAG,eACHC,GAAI,cACJhG,EAAG,WACHiG,GAAI,WAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIspB,GAAc,CACV3H,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPmH,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb96B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0WAAwEK,MAC5E,KAEJN,YAAa,0WAAwEM,MACjF,KAEJkD,SAAU,iRAAoElD,MAC1E,KAEJiD,cAAe,iRAAoEjD,MAC/E,KAEJgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVe,cAAe,wGACfnC,KAAM,SAAU9T,GACZ,MAAO,qDAAaqJ,KAAKrJ,IAE7BkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,qDAEA,sDAGf3I,SAAU,CACNC,QAAS,+DACTC,QAAS,yDACTC,SAAU,qCACVC,QAAS,+DACTC,SAAU,0DACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,oDACHoI,GAAI,oCACJpT,EAAG,8CACHqT,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,wBACJhG,EAAG,kCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EACF1Q,QAAQ,mBAAU,SAAUD,GACzB,OAAOoxB,GAAYpxB,KAEtBC,QAAQ,UAAM,MAEvBqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAOmxB,GAAYnxB,KAEtBC,QAAQ,KAAM,WAEvBsM,uBAAwB,gBACxB9M,QAAS,WACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb,IAAIkqB,GAAc,iFAAwEhsB,MAClF,KAEJisB,GAAgB,CACZ,QACA,QACA,SACA,SACA,YACA,SACA,SACAD,GAAY,GACZA,GAAY,GACZA,GAAY,IAEpB,SAASE,GAAYzzB,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAoCkBllB,EAAQklB,EApCtBrS,EAAS,GACb,OAAQ/T,GACJ,IAAK,IACD,OAAOomB,EAAW,oBAAsB,kBAC5C,IAAK,KACDrS,EAASqS,EAAW,WAAa,WACjC,MACJ,IAAK,IACD,OAAOA,EAAW,WAAa,WACnC,IAAK,KACDrS,EAASqS,EAAW,WAAa,YACjC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDrS,EAASqS,EAAW,SAAW,SAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,eAAW,cACjC,IAAK,KACDrS,EAASqS,EAAW,eAAW,kBAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,YAAc,WACpC,IAAK,KACDrS,EAASqS,EAAW,YAAc,YAClC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDrS,EAASqS,EAAW,SAAW,SAC/B,MAGR,OAE0BA,EAHIA,EAA9BrS,IAGkB7S,EAHIA,GAIN,GACVklB,EACIsO,GAAcxzB,GACduzB,GAAYvzB,GAChBA,GARoC,IAAM6S,EAWpDra,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,iHAA2GK,MAC/G,KAEJN,YAAa,6EAAuEM,MAChF,KAEJkD,SAAU,qEAAqElD,MAC3E,KAEJiD,cAAe,uBAAuBjD,MAAM,KAC5CgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,mBACJC,IAAK,gCACLC,KAAM,sCACNgE,EAAG,WACHye,GAAI,cACJC,IAAK,2BACLC,KAAM,iCAEVvjB,SAAU,CACNC,QAAS,6BACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,mBACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,qBACRC,KAAM,YACNnI,EAAG0tB,GACHtlB,GAAIslB,GACJ14B,EAAG04B,GACHrlB,GAAIqlB,GACJplB,EAAGolB,GACHnlB,GAAImlB,GACJ3oB,EAAG2oB,GACHllB,GAAIklB,GACJ/kB,EAAG+kB,GACH9kB,GAAI8kB,GACJ9qB,EAAG8qB,GACH7kB,GAAI6kB,IAER1lB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,0FAA0FK,MAC9F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,yDAAyDlD,MAC/D,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,wBAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,eACHqT,GAAI,YACJC,EAAG,aACHC,GAAI,UACJxD,EAAG,aACHyD,GAAI,UACJG,EAAG,cACHC,GAAI,WACJhG,EAAG,aACHiG,GAAI,WAERb,uBAAwB,UACxB9M,QAAS,SAAUjB,GACf,OAAOA,GAEXyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wFAAqFK,MACzF,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,wFAA4ElD,MAClF,KAEJiD,cAAe,0CAA8BjD,MAAM,KACnDgD,YAAa,gCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,gBACVC,QAAS,wBACTC,SAAU,8BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,kBACNnI,EAAG,eACHoI,GAAI,cACJpT,EAAG,eACHqT,GAAI,cACJC,EAAG,cACHC,GAAI,cACJxD,EAAG,YACHyD,GAAI,WACJG,EAAG,oBACHC,GAAI,mBACJhG,EAAG,aACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,gGAAuFK,MAC3F,KAEJN,YAAa,0EAAiEM,MAC1E,KAEJqoB,kBAAkB,EAClBnlB,SAAU,sDAAsDlD,MAAM,KACtEiD,cAAe,qCAAqCjD,MAAM,KAC1DgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,YACHC,GAAI,YACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,UACHC,GAAI,UACJhG,EAAG,QACHiG,GAAI,UAERb,uBAAwB,gBACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAO/a,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,SAOvDxH,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,gGAAuFK,MAC3F,KAEJN,YAAa,0EAAiEM,MAC1E,KAEJqoB,kBAAkB,EAClBnlB,SAAU,sDAAsDlD,MAAM,KACtEiD,cAAe,qCAAqCjD,MAAM,KAC1DgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,YACHC,GAAI,YACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,UACHC,GAAI,UACJhG,EAAG,QACHiG,GAAI,UAERb,uBAAwB,gBACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAO/a,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAEIqqB,GAAgB,2LAChBC,GAAgB,CACZ,SACA,YACA,SACA,QACA,QACA,SACA,SACA,YACA,SACA,QACA,QACA,YAGRn7B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gGAAuFK,MAC3F,KAEJN,YAAa,0EAAiEM,MAC1E,KAEJH,YAAassB,GACbvsB,iBAAkBusB,GAClBxD,kBA3BsB,oGA4BtBC,uBA3B2B,6FA4B3B9oB,YAAassB,GACbvD,gBAAiBuD,GACjBtD,iBAAkBsD,GAClBlpB,SAAU,sDAAsDlD,MAAM,KACtEiD,cAAe,qCAAqCjD,MAAM,KAC1DgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,6BACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,YACHC,GAAI,YACJxD,EAAG,UACHyD,GAAI,WACJC,EAAG,cACHC,GAAI,cACJC,EAAG,UACHC,GAAI,UACJhG,EAAG,QACHiG,GAAI,UAERb,uBAAwB,eACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAIJ,IAAK,IACD,OAAO/a,GAAqB,IAAXA,EAAe,KAAO,IAG3C,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIuqB,GAAsB,6DAA6DrsB,MAC/E,KAEJssB,GAAyB,kDAAkDtsB,MACvE,KAGR/O,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,iGAAiGK,MACrG,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACbo5B,GAAuB94B,EAAEgJ,SAEzB6vB,GAAoB74B,EAAEgJ,SAJtB6vB,IAOfhE,kBAAkB,EAClBnlB,SAAU,wDAAwDlD,MAC9D,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,iBACTC,SAAU,8BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNnI,EAAG,mBACHoI,GAAI,cACJpT,EAAG,eACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,aACHC,GAAI,aACJhG,EAAG,WACHiG,GAAI,cAERb,uBAAwB,kBACxB9M,QAAS,SAAUjB,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KA8Cb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAzCW,CACP,YACA,UACA,WACA,aACA,YACA,YACA,UACA,YACA,qBACA,sBACA,UACA,WA8BJD,YA5BgB,CACZ,MACA,QACA,UACA,MACA,OACA,QACA,UACA,SACA,OACA,OACA,OACA,QAiBJ2oB,kBAAkB,EAClBnlB,SAhBa,CACT,kBACA,cACA,iBACA,oBACA,eACA,eACA,kBAUJD,cARgB,CAAC,OAAQ,OAAQ,WAAS,UAAQ,UAAQ,QAAS,QASnED,YARc,CAAC,KAAM,KAAM,QAAM,QAAM,QAAM,IAAK,MASlDxI,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,qBACTC,SAAU,eACVC,QAAS,kBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,OACRC,KAAM,eACNnI,EAAG,mBACHoI,GAAI,aACJpT,EAAG,gBACHqT,GAAI,mBACJC,EAAG,iBACHC,GAAI,oBACJxD,EAAG,QACHyD,GAAI,WACJG,EAAG,QACHC,GAAI,eACJhG,EAAG,SACHiG,GAAI,aAERb,uBAAwB,mBACxB9M,QAAS,SAAUjB,GAEf,OAAOA,GADiB,IAAXA,EAAe,IAAMA,EAAS,IAAO,EAAI,KAAO,OAGjEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAyKb,SAASyqB,GAAsB9zB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTsL,EAAG,CAAC,wFAAmB,2DACvBoI,GAAI,CAACnO,EAAS,0DAAcA,EAAS,mCACrCjF,EAAG,CAAC,0DAAc,+CAClBqT,GAAI,CAACpO,EAAS,oDAAaA,EAAS,yCACpCqO,EAAG,CAAC,8CAAY,6BAChBC,GAAI,CAACtO,EAAS,wCAAWA,EAAS,6BAClC8K,EAAG,CAAC,oDAAa,mCACjByD,GAAI,CAACvO,EAAS,8CAAYA,EAAS,uBACnC0O,EAAG,CAAC,4EAAiB,qDACrBC,GAAI,CAAC3O,EAAS,gEAAeA,EAAS,yCACtC2I,EAAG,CAAC,0DAAc,yCAClBiG,GAAI,CAAC5O,EAAS,oDAAaA,EAAS,0CAExC,OAAOklB,EAAWzqB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GA0GnD,SAASi1B,GAAsB/zB,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTsL,EAAG,CAAC,qBAAsB,iBAC1BoI,GAAI,CAACnO,EAAS,cAAeA,EAAS,WACtCjF,EAAG,CAAC,aAAc,YAClBqT,GAAI,CAACpO,EAAS,YAAaA,EAAS,WACpCqO,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACtO,EAAS,WAAYA,EAAS,UACnC8K,EAAG,CAAC,YAAa,UACjByD,GAAI,CAACvO,EAAS,WAAYA,EAAS,QACnC0O,EAAG,CAAC,eAAgB,aACpBC,GAAI,CAAC3O,EAAS,cAAeA,EAAS,WACtC2I,EAAG,CAAC,aAAc,YAClBiG,GAAI,CAAC5O,EAAS,YAAaA,EAAS,YAExC,OAAOklB,EAAWzqB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAnQnDtG,EAAM0X,aAAa,KAAM,CACrBhJ,OAzCW,CACP,gBACA,aACA,aACA,aACA,gBACA,kBACA,cACA,iBACA,eACA,gBACA,eACA,mBA8BJD,YA5BgB,CACZ,OACA,OACA,UACA,OACA,UACA,UACA,OACA,SACA,OACA,UACA,OACA,WAiBJ2oB,kBAAkB,EAClBnlB,SAhBa,CACT,iBACA,UACA,aACA,YACA,YACA,WACA,eAUJD,cARkB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAS7DD,YARgB,CAAC,QAAM,KAAM,QAAM,KAAM,KAAM,KAAM,MASrDxI,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,yBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,6BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,YACRC,KAAM,gBACNnI,EAAG,gBACHoI,GAAI,YACJpT,EAAG,UACHqT,GAAI,gBACJC,EAAG,OACHC,GAAI,aACJxD,EAAG,QACHyD,GAAI,WACJG,EAAG,UACHC,GAAI,eACJhG,EAAG,WACHiG,GAAI,eAERb,uBAAwB,mBACxB9M,QAAS,SAAUjB,GAEf,OAAOA,GADiB,IAAXA,EAAe,IAAMA,EAAS,IAAO,EAAI,KAAO,OAGjEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,4FAAyFK,MAC7F,KAEJN,YAAa,iEAA8DM,MACvE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,yDAAmDlD,MAAM,KACnEiD,cAAe,2CAAqCjD,MAAM,KAC1DgD,YAAa,6BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS,WACL,MAAO,UAA6B,IAAjB9U,KAAK6T,QAAgB,QAAO,QAAO,QAE1DkB,QAAS,WACL,MAAO,gBAA6B,IAAjB/U,KAAK6T,QAAgB,QAAO,QAAO,QAE1DmB,SAAU,WACN,MAAO,UAA6B,IAAjBhV,KAAK6T,QAAgB,QAAO,KAAO,QAE1DoB,QAAS,WACL,MAAO,UAA6B,IAAjBjV,KAAK6T,QAAgB,OAAM,KAAO,QAEzDqB,SAAU,WACN,MACI,qBAAwC,IAAjBlV,KAAK6T,QAAgB,QAAO,KAAO,QAGlEsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SAAUuc,GACd,OAA0B,IAAtBA,EAAIpkB,QAAQ,MACL,IAAMokB,EAEV,MAAQA,GAEnBtc,KAAM,SACNnI,EAAG,eACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,YACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,aACJG,EAAG,SACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAwBb7Q,EAAM0X,aAAa,WAAY,CAC3BhJ,OAAQ,CACJwmB,WAAY,0cAAwFnmB,MAChG,KAEJ9M,OAAQ,4yBAAmJ8M,MACvJ,KAEJie,SAAU,mBAEdve,YAAa,qVAA4EM,MACrF,KAEJqoB,kBAAkB,EAClBnlB,SAAU,iRAAqDlD,MAAM,KACrEiD,cAAe,wLAA4CjD,MAAM,KACjEgD,YAAa,mGAAwBhD,MAAM,KAC3CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,gDACJD,IAAK,mDACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4DACLC,KAAM,qEACN2iB,KAAM,kEAEVvjB,SAAU,CACNC,QAAS,0BACTC,QAAS,kDACTC,SAAU,8CACVC,QAAS,0BACTC,SAAU,8CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,KACRC,KAAM,8BACNnI,EAAG+tB,GACH3lB,GAAI2lB,GACJ/4B,EAAG+4B,GACH1lB,GAAI0lB,GACJzlB,EAAGylB,GACHxlB,GAAIwlB,GACJhpB,EAAGgpB,GACHvlB,GAAIulB,GACJplB,EAAGolB,GACHnlB,GAAImlB,GACJnrB,EAAGmrB,GACHllB,GAAIklB,IAER/lB,uBAAwB,8BACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAO/a,EAAS,qBACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,GAETwF,cAAe,0IACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,6BAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,yCAAb/Z,EACA+Z,EACa,+CAAb/Z,EACO,GAAP+Z,EAAYA,EAAOA,EAAO,GACb,mCAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,6CACAA,EAAO,GACP,iCAEA,8BAyBnBrd,EAAM0X,aAAa,WAAY,CAC3BhJ,OAAQ,CACJwmB,WAAY,4EAA4EnmB,MACpF,KAEJ9M,OAAQ,wIAAwI8M,MAC5I,KAEJie,SAAU,mBAEdve,YAAa,4DAA4DM,MACrE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,uDAAuDlD,MAAM,KACvEiD,cAAe,qCAAqCjD,MAAM,KAC1DgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,iBACJD,IAAK,oBACLE,EAAG,aACHC,GAAI,cACJC,IAAK,6BACLC,KAAM,sCACN2iB,KAAM,mCAEVvjB,SAAU,CACNC,QAAS,WACTC,QAAS,cACTC,SAAU,sBACVC,QAAS,WACTC,SAAU,sBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,KACRC,KAAM,UACNnI,EAAGguB,GACH5lB,GAAI4lB,GACJh5B,EAAGg5B,GACH3lB,GAAI2lB,GACJ1lB,EAAG0lB,GACHzlB,GAAIylB,GACJjpB,EAAGipB,GACHxlB,GAAIwlB,GACJrlB,EAAGqlB,GACHplB,GAAIolB,GACJprB,EAAGorB,GACHnlB,GAAImlB,IAERhmB,uBAAwB,cACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAO/a,EAAS,KACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,GAETwF,cAAe,+BACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,SAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,aAAb/Z,EACA+Z,EACa,aAAb/Z,EACO,GAAP+Z,EAAYA,EAAOA,EAAO,GACb,UAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,OACAA,EAAO,GACP,WACAA,EAAO,GACP,WACAA,EAAO,GACP,QAEA,UAOnB,IAAIme,GAAc,CACVhJ,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPwI,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbn8B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gdAAyFK,MAC7F,KAEJN,YAAa,mUAAyEM,MAClF,KAEJqoB,kBAAkB,EAClBnlB,SAAU,mSAAwDlD,MAC9D,KAEJiD,cAAe,qKAAmCjD,MAAM,KACxDgD,YAAa,iFAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,8CACJD,IAAK,iDACLE,EAAG,aACHC,GAAI,cACJC,IAAK,2DACLC,KAAM,kEAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,4CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,oCACNnI,EAAG,8CACHoI,GAAI,oCACJpT,EAAG,8CACHqT,GAAI,oCACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,wCACHyD,GAAI,8BACJG,EAAG,8CACHC,GAAI,oCACJhG,EAAG,wCACHiG,GAAI,+BAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOyyB,GAAYzyB,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOwyB,GAAYxyB,MAK3BqN,cAAe,gGACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,uBAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,6BAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,6BAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,2BACAA,EAAO,GACP,2BAEA,sBAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sXAA0EK,MAC9E,KAEJN,YAAa,kSAA4DM,MACrE,KAEJkD,SAAU,6LAAuClD,MAAM,KACvDiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,kCACNgE,EAAG,WACHye,GAAI,aACJC,IAAK,mBACLC,KAAM,yBAEVvjB,SAAU,CACNC,QAAS,4CACTC,QAAS,sCACTC,SAAU,qCACVC,QAAS,kDACTC,SAAU,qGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNnI,EAAG,0DACHoI,GAAI,oCACJpT,EAAG,qBACHqT,GAAI,8BACJC,EAAG,qBACHC,GAAI,SAAUtO,GACV,OAAe,IAAXA,EACO,uCAEJA,EAAS,6BAEpB8K,EAAG,qBACHyD,GAAI,SAAUvO,GACV,OAAe,IAAXA,EACO,uCAEJA,EAAS,6BAEpB0O,EAAG,2BACHC,GAAI,SAAU3O,GACV,OAAe,IAAXA,EACO,6CAEJA,EAAS,yCAEpB2I,EAAG,qBACHiG,GAAI,SAAU5O,GACV,OAAe,IAAXA,EACO,uCACAA,EAAS,IAAO,GAAgB,KAAXA,EACrBA,EAAS,sBAEbA,EAAS,8BAGxB6O,cAAe,qTACfnC,KAAM,SAAU9T,GACZ,MAAO,6HAA8BqJ,KAAKrJ,IAE9CkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,0DACAA,EAAO,GACP,iCACAA,EAAO,GACPiR,EAAU,kCAAW,sEACrBjR,EAAO,GACPiR,EAAU,4BAAU,sEAEpB,8BAOnB,IAAI8N,GAAc,CACV5J,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPoJ,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAETC,GAAgB,CACZ,iBACA,oCACA,mCACA,mCACA,iBACA,uBACA,uBACA,iBACA,gDACA,mCACA,oCACA,iDA6HR,SAASC,GAAYz1B,EAAQ+f,EAAejhB,GACxC,IAAI+T,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,KAQD,OANI+T,GADW,IAAX7S,EACU,UACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,IACD,OAAO+f,EAAgB,eAAiB,eAC5C,IAAK,KAQD,OANIlN,GADW,IAAX7S,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,SAOlB,IAAK,IACD,OAAO+f,EAAgB,YAAc,cACzC,IAAK,KAQD,OANIlN,GADW,IAAX7S,EACU,MACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,OAEA,OAGlB,IAAK,KAMD,OAJI6S,GADW,IAAX7S,EACU,MAEA,OAGlB,IAAK,KAQD,OANI6S,GADW,IAAX7S,EACU,SACQ,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,EAC7B,UAEA,UAGlB,IAAK,KAQD,OANI6S,GADW,IAAX7S,IAEkB,IAAXA,GAA2B,IAAXA,GAA2B,IAAXA,GAC7B,SAFA,UAhK1BxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,8YAA8E8M,MAClF,KAEJmmB,WAAY,sXAA0EnmB,MAClF,MAGRN,YAAa,2PAA6DM,MACtE,KAEJkD,SAAU,6RAAuDlD,MAAM,KACvEiD,cAAe,+JAAkCjD,MAAM,KACvDgD,YAAa,iFAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,4BACJD,IAAK,+BACLE,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAGVzG,YAAamuB,GACbpF,gBAAiBoF,GACjBnF,iBAzCmB,CACf,iBACA,uBACA,mCACA,mCACA,iBACA,uBACA,uBACA,iBACA,uBACA,mCACA,iBACA,wBA+BJjpB,YAAa,yuBAEbD,iBAAkB,yuBAElB+oB,kBAAmB,6lBAEnBC,uBAAwB,oRAExBjjB,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,WACVC,QAAS,oBACTC,SAAU,4CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,8BACNnI,EAAG,2DACHoI,GAAI,oCACJpT,EAAG,wCACHqT,GAAI,8BACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,8CACHC,GAAI,oCACJhG,EAAG,wCACHiG,GAAI,+BAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOqzB,GAAYrzB,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOozB,GAAYpzB,MAK3BqN,cAAe,gGACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,uBAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,mCAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,uBAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,qBAEA,sBAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAoEb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,mHAAoG8M,MACxG,KAEJmmB,WAAY,+GAAgGnmB,MACxG,MAGRN,YAAa,oEAA+DM,MACxE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,iEAA4DlD,MAClE,KAEJiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB4B,QAAS,oBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,kCACX,KAAK,EACD,MAAO,iCACX,KAAK,EACD,MAAO,gCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,cACHoI,GAAIsnB,GACJ16B,EAAG06B,GACHrnB,GAAIqnB,GACJpnB,EAAGonB,GACHnnB,GAAImnB,GACJ3qB,EAAG,MACHyD,GAAIknB,GACJ/mB,EAAG,SACHC,GAAI8mB,GACJ9sB,EAAG,SACHiG,GAAI6mB,IAER1nB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIqsB,GAAc,6FAAgEnuB,MAC9E,KAEJ,SAASouB,GAAY31B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIsI,EAAMxtB,EACV,OAAQlB,GACJ,IAAK,IACD,OAAOomB,GAAYnF,EACb,4BACA,6BACV,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,GACpB,gBACA,iBACV,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,QAAU,UAC1D,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,QAAU,UACxD,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,UAAS,gBACzD,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,UAAS,gBACvD,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,OAAS,UACzD,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,OAAS,UACvD,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,YAAW,eAC3D,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,YAAW,eACzD,IAAK,IACD,MAAO,OAASmF,GAAYnF,EAAgB,SAAQ,WACxD,IAAK,KACD,OAAOyN,GAAOtI,GAAYnF,EAAgB,SAAQ,WAE1D,MAAO,GAEX,SAAStW,GAAKyb,GACV,OACKA,EAAW,GAAK,cACjB,IACAwQ,GAAYr9B,KAAKqT,OACjB,aAyOR,SAASkqB,GAASvrB,GACd,OAAIA,EAAI,KAAQ,IAELA,EAAI,IAAO,EAK1B,SAASwrB,GAAY71B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIrS,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,IACD,OAAOihB,GAAiBmF,EAClB,sBACA,sBACV,IAAK,KACD,OAAI0Q,GAAS51B,GAEL6S,GACCkN,GAAiBmF,EAAW,cAAa,eAG3CrS,EAAS,aACpB,IAAK,IACD,OAAOkN,EAAgB,eAAW,eACtC,IAAK,KACD,OAAI6V,GAAS51B,GAEL6S,GAAUkN,GAAiBmF,EAAW,gBAAY,iBAE/CnF,EACAlN,EAAS,eAEbA,EAAS,eACpB,IAAK,KACD,OAAI+iB,GAAS51B,GAEL6S,GACCkN,GAAiBmF,EACZ,gBACA,iBAGPrS,EAAS,cACpB,IAAK,IACD,OAAIkN,EACO,QAEJmF,EAAW,MAAQ,OAC9B,IAAK,KACD,OAAI0Q,GAAS51B,GACL+f,EACOlN,EAAS,QAEbA,GAAUqS,EAAW,OAAS,YAC9BnF,EACAlN,EAAS,QAEbA,GAAUqS,EAAW,MAAQ,QACxC,IAAK,IACD,OAAInF,EACO,gBAEJmF,EAAW,cAAU,eAChC,IAAK,KACD,OAAI0Q,GAAS51B,GACL+f,EACOlN,EAAS,gBAEbA,GAAUqS,EAAW,eAAW,iBAChCnF,EACAlN,EAAS,gBAEbA,GAAUqS,EAAW,cAAU,gBAC1C,IAAK,IACD,OAAOnF,GAAiBmF,EAAW,QAAO,SAC9C,IAAK,KACD,OAAI0Q,GAAS51B,GACF6S,GAAUkN,GAAiBmF,EAAW,QAAO,WAEjDrS,GAAUkN,GAAiBmF,EAAW,QAAO,WArThE1sB,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,4HAAoGK,MACxG,KAEJN,YAAa,gFAAiEM,MAC1E,KAEJqoB,kBAAkB,EAClBnlB,SAAU,6EAAsDlD,MAAM,KACtEiD,cAAe,yCAAgCjD,MAAM,KACrDgD,YAAa,qBAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVe,cAAe,SACfnC,KAAM,SAAU9T,GACZ,MAAyC,MAAlCA,EAAMiuB,OAAO,GAAGtkB,eAE3BzG,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,IACW,IAAZ4a,EAAmB,KAAO,MAEd,IAAZA,EAAmB,KAAO,MAGzC5Z,SAAU,CACNC,QAAS,gBACTC,QAAS,oBACTC,SAAU,WACN,OAAO5D,GAAKxQ,KAAKZ,MAAM,IAE3BiV,QAAS,oBACTC,SAAU,WACN,OAAO9D,GAAKxQ,KAAKZ,MAAM,IAE3BmV,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,KACNnI,EAAG4vB,GACHxnB,GAAIwnB,GACJ56B,EAAG46B,GACHvnB,GAAIunB,GACJtnB,EAAGsnB,GACHrnB,GAAIqnB,GACJ7qB,EAAG6qB,GACHpnB,GAAIonB,GACJjnB,EAAGinB,GACHhnB,GAAIgnB,GACJhtB,EAAGgtB,GACH/mB,GAAI+mB,IAER5nB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,CACJzM,OAAQ,kkBAA4G8M,MAChH,KAEJmmB,WAAY,0fAAgGnmB,MACxG,MAGRN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,mVAAgElD,MACtE,KAEJiD,cAAe,6IAA+BjD,MAAM,KACpDgD,YAAa,6IAA+BhD,MAAM,KAClDxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTE,QAAS,gCACTD,SAAU,WACN,MAAO,yDAEXE,SAAU,WACN,MAAO,0FAEXC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,8BACNnI,EAAG,yFACHoI,GAAI,sDACJpT,EAAG,2BACHqT,GAAI,8BACJC,EAAG,qBACHC,GAAI,wBACJxD,EAAG,eACHyD,GAAI,kBACJG,EAAG,2BACHC,GAAI,8BACJhG,EAAG,2BACHiG,GAAI,+BAERC,cAAe,0LACfnC,KAAM,SAAU9T,GACZ,MAAO,kGAAuBqJ,KAAKrJ,IAEvCkD,SAAU,SAAU+Z,GAChB,OAAIA,EAAO,EACA,6CACAA,EAAO,GACP,mDACAA,EAAO,GACP,6CAEA,oDAGf9H,uBAAwB,8CACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,OACD,OAAe,IAAX/a,EACOA,EAAS,gBAEbA,EAAS,gBACpB,QACI,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yFAAyFK,MAC7F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,6CAA6ClD,MAAM,KAC7DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVe,cAAe,wBACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,SAAb/Z,EACO+Z,EACa,UAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,SAAb/Z,GAAoC,UAAbA,EACvB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,OACAA,EAAQ,GACR,QACAA,EAAQ,GACR,OAEA,SAGfgB,SAAU,CACNC,QAAS,sBACTC,QAAS,mBACTC,SAAU,kBACVC,QAAS,qBACTC,SAAU,uBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,eACNnI,EAAG,iBACHoI,GAAI,WACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,QACHC,GAAI,SACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,WACJhG,EAAG,UACHiG,GAAI,YAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KA0Fb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wHAAoFK,MACxF,KAEJN,YAAa,oEAAkDM,MAAM,KACrEkD,SAAU,kGAAmFlD,MACzF,KAEJiD,cAAe,0CAA8BjD,MAAM,KACnDgD,YAAa,gCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,gBACVC,QAAS,uBACTC,SAAU,gCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,uBACNnI,EAAG8vB,GACH1nB,GAAI0nB,GACJ96B,EAAG86B,GACHznB,GAAIynB,GACJxnB,EAAG,cACHC,GAAIunB,GACJ/qB,EAAG+qB,GACHtnB,GAAIsnB,GACJnnB,EAAGmnB,GACHlnB,GAAIknB,GACJltB,EAAGktB,GACHjnB,GAAIinB,IAER9nB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,gGAAgGK,MACpG,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,0EAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,iBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,6BACX,QACI,MAAO,+BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SAAUlI,GACd,OAAQ,YAAY9D,KAAK8D,GAAK,MAAQ,MAAQ,IAAMA,GAExDmI,KAAM,QACNnI,EAAG,iBACHoI,GAAI,aACJpT,EAAG,YACHqT,GAAI,YACJC,EAAG,SACHC,GAAI,SACJxD,EAAG,YACHyD,GAAI,YACJG,EAAG,UACHC,GAAI,UACJhG,EAAG,UACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gGAAgGK,MACpG,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,0EAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,WACL,MACI,WACgB,EAAf9U,KAAK6T,QAAc,OAA0B,IAAjB7T,KAAK6T,QAAgB,IAAM,OACxD,OAGRkB,QAAS,WACL,MACI,aACgB,EAAf/U,KAAK6T,QAAc,OAA0B,IAAjB7T,KAAK6T,QAAgB,IAAM,OACxD,OAGRmB,SAAU,WACN,MACI,WACgB,EAAfhV,KAAK6T,QAAc,OAA0B,IAAjB7T,KAAK6T,QAAgB,IAAM,OACxD,OAGRoB,QAAS,WACL,MACI,WACgB,EAAfjV,KAAK6T,QAAc,OAA0B,IAAjB7T,KAAK6T,QAAgB,IAAM,OACxD,OAGRqB,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MACI,uBACgB,EAAfrT,KAAK6T,QACA,OACiB,IAAjB7T,KAAK6T,QACL,IACA,OACN,MAER,QACI,MACI,uBACgB,EAAf7T,KAAK6T,QACA,OACiB,IAAjB7T,KAAK6T,QACL,IACA,OACN,QAIhBsB,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,QACNnI,EAAG,iBACHoI,GAAI,aACJpT,EAAG,YACHqT,GAAI,YACJC,EAAG,SACHC,GAAI,SACJxD,EAAG,YACHyD,GAAI,YACJC,EAAG,gBACHC,GAAI,eACJC,EAAG,UACHC,GAAI,UACJhG,EAAG,UACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBoN,KAAM,CACF,CACI4E,MAAO,aACPnJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,SACRpN,KAAM,KAEV,CACI+R,MAAO,aACPC,MAAO,aACPpJ,OAAQ,EACRxZ,KAAM,eACNge,OAAQ,KACRpN,KAAM,MAEV,CACI+R,MAAO,aACPC,OAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,qBACNge,OAAQ,KACRpN,KAAM,OAGd2lB,oBAAqB,qBACrBzX,oBAAqB,SAAUzlB,EAAO4I,GAClC,MAAoB,WAAbA,EAAM,GAAa,EAAIqH,SAASrH,EAAM,IAAM5I,EAAO,KAE9DsO,OAAQ,qGAAyCK,MAAM,KACvDN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,mDAAgBjD,MAAM,KACrCgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCACNgE,EAAG,aACHye,GAAI,2BACJC,IAAK,iCACLC,KAAM,uCAEV5hB,cAAe,6BACfnC,KAAM,SAAU9T,GACZ,MAAiB,iBAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,eAEA,gBAGf3I,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,SAAU6G,GAChB,OAAIA,EAAIzK,SAAWpR,KAAKoR,OACb,wBAEA,WAGf6D,QAAS,oBACTC,SAAU,SAAU2G,GAChB,OAAI7b,KAAKoR,SAAWyK,EAAIzK,OACb,wBAEA,WAGf+D,SAAU,KAEdO,uBAAwB,gBACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACD,OAAkB,IAAX/a,EAAe,eAAOA,EAAS,SAC1C,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,WACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,gBACHC,GAAI,iBACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,gBACHC,GAAI,iBACJhG,EAAG,UACHiG,GAAI,cAMZpW,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yFAAyFK,MAC7F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,+CAA+ClD,MAAM,KAC/DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVe,cAAe,6BACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,WAAb/Z,EACO+Z,EACa,WAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,WAAb/Z,GAAsC,UAAbA,EACzB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,SACAA,EAAQ,GACR,SACAA,EAAQ,GACR,SAEA,SAGfgB,SAAU,CACNC,QAAS,2BACTC,QAAS,sBACTC,SAAU,kBACVC,QAAS,wBACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,gBACRC,KAAM,uBACNnI,EAAG,kBACHoI,GAAI,WACJpT,EAAG,kBACHqT,GAAI,WACJC,EAAG,gBACHC,GAAI,SACJxD,EAAG,WACHyD,GAAI,YACJG,EAAG,UACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,whBAAqGK,MACzG,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,CACNijB,WAAY,mVAAgEnmB,MACxE,KAEJ9M,OAAQ,yVAAiE8M,MACrE,KAEJie,SAAU,mEAEdhb,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,+CACTC,QAAS,+CACTE,QAAS,qDACTD,SAAU,gEACVE,SAAU,kDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SAAUlI,GACd,OAAOA,EAAEtE,QAAQ,+HAAiC,SAC9Cs0B,EACAC,EACAC,GAEA,MAAc,WAAPA,EAAaD,EAAK,eAAOA,EAAKC,EAAK,kBAGlD/nB,KAAM,SAAUnI,GACZ,MAAI,2HAA4B9D,KAAK8D,GAC1BA,EAAEtE,QAAQ,mBAAU,mCAE3B,2BAAOQ,KAAK8D,GACLA,EAAEtE,QAAQ,4BAAS,+CAEvBsE,GAEXA,EAAG,kFACHoI,GAAI,8BACJpT,EAAG,2BACHqT,GAAI,8BACJC,EAAG,iCACHC,GAAI,oCACJxD,EAAG,qBACHyD,GAAI,wBACJG,EAAG,qBACHC,GAAI,wBACJhG,EAAG,2BACHiG,GAAI,+BAERb,uBAAwB,uDACxB9M,QAAS,SAAUjB,GACf,OAAe,IAAXA,EACOA,EAEI,IAAXA,EACOA,EAAS,gBAGhBA,EAAS,IACRA,GAAU,KAAOA,EAAS,IAAO,GAClCA,EAAS,KAAQ,EAEV,gBAAQA,EAEZA,EAAS,WAEpByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI6sB,GAAa,CACbzK,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH2B,GAAI,gBACJH,GAAI,gBACJI,GAAI,gBACJ+I,GAAI,gBACJlJ,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBAGT10B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wbAAqFK,MACzF,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,+SAA0DlD,MAChE,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,qEACTC,QAAS,qEACTC,SAAU,2CACVC,QAAS,+DACTC,SAAU,uHACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,0CACRC,KAAM,oCACNnI,EAAG,kFACHoI,GAAI,0CACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,kBACJhG,EAAG,wCACHiG,GAAI,yBAERb,uBAAwB,sCACxB9M,QAAS,SAAUjB,GAGf,OAAOA,GAAUk2B,GAAWl2B,IAAWk2B,GAF/Bl2B,EAAS,KAEuCk2B,GADtC,KAAVl2B,EAAgB,IAAM,QAGlCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI+sB,GAAc,CACVpL,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEP4K,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbv+B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gXAAyEK,MAC7E,KAEJN,YAAa,gXAAyEM,MAClF,KAEJkD,SAAU,yPAAiDlD,MAAM,KACjEiD,cAAe,2EAAoBjD,MAAM,KACzCgD,YAAa,2EAAoBhD,MAAM,KACvCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVe,cAAe,gEACfnC,KAAM,SAAU9T,GACZ,MAAiB,mCAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,iCAEA,kCAGf3I,SAAU,CACNC,QAAS,2EACTC,QAAS,+DACTC,SAAU,qCACVC,QAAS,iFACTC,SAAU,oGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,uBACRC,KAAM,uBACNnI,EAAG,uFACHoI,GAAI,0CACJpT,EAAG,6CACHqT,GAAI,8BACJC,EAAG,6CACHC,GAAI,8BACJxD,EAAG,6CACHyD,GAAI,8BACJG,EAAG,iCACHC,GAAI,kBACJhG,EAAG,mDACHiG,GAAI,qCAERb,uBAAwB,sBACxB9M,QAAS,iBACTkV,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAO60B,GAAY70B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAO40B,GAAY50B,MAG3BiI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI2tB,GAAc,CACVhM,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPwL,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbn/B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,weAA6FK,MACjG,KAEJN,YAAa,4XAA2EM,MACpF,KAEJqoB,kBAAkB,EAClBnlB,SAAU,+SAA0DlD,MAChE,KAEJiD,cAAe,iLAAqCjD,MAAM,KAC1DgD,YAAa,mGAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,gCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,kDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNnI,EAAG,4EACHoI,GAAI,kEACJpT,EAAG,0DACHqT,GAAI,oCACJC,EAAG,oDACHC,GAAI,8BACJxD,EAAG,8CACHyD,GAAI,wBACJG,EAAG,gEACHC,GAAI,0CACJhG,EAAG,oDACHiG,GAAI,+BAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOy1B,GAAYz1B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOw1B,GAAYx1B,MAG3BqN,cAAe,kKACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,yCAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,qDAAb/Z,EACA+Z,EACa,qDAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,6BAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,uCACAA,EAAO,GACP,mDACAA,EAAO,GACP,mDACAA,EAAO,GACP,2BAEA,wCAGf9H,uBAAwB,8BACxB9M,QAAS,SAAUjB,GACf,OAAOA,EAAS,sBAEpByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qGAAyCK,MAAM,KACvDN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,mDAAgBjD,MAAM,KACrCgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,cACHC,GAAI,0BACJC,IAAK,iCACLC,KAAM,sCACNgE,EAAG,cACHye,GAAI,0BACJC,IAAK,iCACLC,KAAM,uCAEVvjB,SAAU,CACNC,QAAS,kBACTC,QAAS,kBACTC,SAAU,UACVC,QAAS,kBACTC,SAAU,6BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,YACRC,KAAM,YACNnI,EAAG,gBACHoI,GAAI,WACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,sBACHC,GAAI,iBACJxD,EAAG,eACHyD,GAAI,WACJG,EAAG,gBACHC,GAAI,WACJhG,EAAG,gBACHiG,GAAI,YAERb,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnB6O,cAAe,4BACfnC,KAAM,SAAU3L,GACZ,MAAiB,iBAAVA,GAEXjF,SAAU,SAAU+Z,EAAMkB,EAAQ6gB,GAC9B,OAAO/hB,EAAO,GAAK,eAAO,kBAMlC,IAAIgiB,GAAc,CACV7M,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPqM,GAAc,CACVjM,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAETyL,GAAW,CACP,sEACA,iCACA,iCACA,iCACA,iCACA,mDACA,uCACA,qBACA,6CACA,sEACA,sEACA,uEAGRv/B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ6wB,GACR9wB,YAAa8wB,GACbttB,SAAU,+YAA0ElD,MAChF,KAEJiD,cAAe,qTAA2DjD,MACtE,KAEJgD,YAAa,mDAAgBhD,MAAM,KACnCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVe,cAAe,wFACfnC,KAAM,SAAU9T,GACZ,MAAO,6CAAUqJ,KAAKrJ,IAE1BkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,6CAEA,8CAGf3I,SAAU,CACNC,QAAS,uFACTC,QAAS,6FACTC,SAAU,uDACVC,QAAS,iFACTC,SAAU,uDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,KACNnI,EAAG,wFACHoI,GAAI,oCACJpT,EAAG,gEACHqT,GAAI,0CACJC,EAAG,sEACHC,GAAI,gDACJxD,EAAG,8CACHyD,GAAI,wBACJG,EAAG,oDACHC,GAAI,8BACJhG,EAAG,8CACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EACF1Q,QAAQ,kEAAiB,SAAUD,GAChC,OAAOs2B,GAAYt2B,KAEtBC,QAAQ,UAAM,MAEvBqe,WAAY,SAAU3N,GAClB,OAAOA,EACF1Q,QAAQ,MAAO,SAAUD,GACtB,OAAOq2B,GAAYr2B,KAEtBC,QAAQ,KAAM,WAEvBgI,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb,IAAI2uB,GAAa,CACbvM,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH2B,GAAI,gBACJH,GAAI,gBACJI,GAAI,gBACJ+I,GAAI,gBACJlJ,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBA6DT,SAAS+K,GAAsBj4B,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTM,EAAG,CAAC,aAAc,gBAClBsT,EAAG,CAAC,YAAa,eACjBvD,EAAG,CAAC,UAAW,aACf4D,EAAG,CAAC,WAAY,eAChB/F,EAAG,CAAC,UAAW,eAEnB,OAAOoX,EAAgBtlB,EAAOqE,GAAK,GAAKrE,EAAOqE,GAAK,GAuBxD,SAASo5B,GAA4Bl4B,GAEjC,GADAA,EAAS6I,SAAS7I,EAAQ,IACtB1D,MAAM0D,GACN,OAAO,EAEX,GAAIA,EAAS,EAET,OAAO,EACJ,GAAIA,EAAS,GAEhB,OAAI,GAAKA,GAAUA,GAAU,EAI1B,GAAIA,EAAS,IAAK,CAErB,IAAI2tB,EAAY3tB,EAAS,GAEzB,OAAkB,GAAd2tB,EACOuK,GAFMl4B,EAAS,IAInBk4B,GAA4BvK,GAChC,GAAI3tB,EAAS,IAAO,CAEvB,KAAiB,IAAVA,GACHA,GAAkB,GAEtB,OAAOk4B,GAA4Bl4B,GAInC,OAAOk4B,GADPl4B,GAAkB,KAvH1BxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,saAAkFK,MACtF,KAEJN,YAAa,wPAAqDM,MAC9D,KAEJkD,SAAU,qTAA2DlD,MACjE,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,+DACTC,QAAS,+DACTC,SAAU,qCACVC,QAAS,+DACTC,SAAU,4IACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,0CACRC,KAAM,oCACNnI,EAAG,kFACHoI,GAAI,0CACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,8CACHC,GAAI,8BACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,kBACJhG,EAAG,wCACHiG,GAAI,yBAERb,uBAAwB,gEACxB9M,QAAS,SAAUjB,GAGf,OAAOA,GAAUg4B,GAAWh4B,IAAWg4B,GAF/Bh4B,EAAS,KAEuCg4B,GADtC,KAAVh4B,EAAgB,IAAM,QAGlCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAwEb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,6FAAuFK,MAC3F,KAEJN,YAAa,+DAA+DM,MACxE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,4EAAmElD,MACzE,KAEJiD,cAAe,uCAA8BjD,MAAM,KACnDgD,YAAa,gCAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,cACJD,IAAK,iBACLE,EAAG,aACHC,GAAI,eACJC,IAAK,2BACLC,KAAM,kCAEVZ,SAAU,CACNC,QAAS,eACTK,SAAU,IACVJ,QAAS,eACTC,SAAU,eACVC,QAAS,sBACTC,SAAU,WAEN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACD,MAAO,0BACX,QACI,MAAO,4BAIvBsC,aAAc,CACVC,OAhGR,SAA2BkE,GAEvB,OAAI+lB,GADS/lB,EAAO1R,OAAO,EAAG0R,EAAO/L,QAAQ,OAElC,KAAO+L,EAEX,MAAQA,GA4FXjE,KA1FR,SAAyBiE,GAErB,OAAI+lB,GADS/lB,EAAO1R,OAAO,EAAG0R,EAAO/L,QAAQ,OAElC,QAAU+L,EAEd,SAAWA,GAsFdpM,EAAG,kBACHoI,GAAI,cACJpT,EAAGk9B,GACH7pB,GAAI,cACJC,EAAG4pB,GACH3pB,GAAI,aACJxD,EAAGmtB,GACH1pB,GAAI,UACJG,EAAGupB,GACHtpB,GAAI,cACJhG,EAAGsvB,GACHrpB,GAAI,WAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wYAA6EK,MACjF,KAEJN,YAAa,wYAA6EM,MACtF,KAEJkD,SAAU,uLAAsClD,MAAM,KACtDiD,cAAe,2KAAoCjD,MAAM,KACzDgD,YAAa,qEAAmBhD,MAAM,KACtCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4CAEVe,cAAe,wFACfnC,KAAM,SAAU9T,GACZ,MAAiB,yCAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,mDAEA,wCAGf3I,SAAU,CACNC,QAAS,oEACTC,QAAS,0EACTC,SAAU,0EACVC,QAAS,sFACTC,SAAU,kGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,yCACNnI,EAAG,mGACHoI,GAAI,0CACJpT,EAAG,6BACHqT,GAAI,8BACJC,EAAG,+CACHC,GAAI,gDACJxD,EAAG,uBACHyD,GAAI,wBACJG,EAAG,mCACHC,GAAI,oCACJhG,EAAG,iBACHiG,GAAI,mBAERb,uBAAwB,8BACxB9M,QAAS,SAAUjB,GACf,MAAO,qBAAQA,KAMvB,IAAIyC,GAAQ,CACR0L,GAAI,4CACJpT,EAAG,uCACHqT,GAAI,yCACJC,EAAG,gCACHC,GAAI,iCACJxD,EAAG,0BACHyD,GAAI,2BACJG,EAAG,2CACHC,GAAI,gDACJhG,EAAG,wBACHiG,GAAI,yBASR,SAASupB,GAAkBn4B,EAAQ+f,EAAejhB,EAAKomB,GACnD,OAAOnF,EACD0N,GAAM3uB,GAAK,GACXomB,EACAuI,GAAM3uB,GAAK,GACX2uB,GAAM3uB,GAAK,GAErB,SAASs5B,GAAQp4B,GACb,OAAOA,EAAS,IAAO,GAAe,GAATA,GAAeA,EAAS,GAEzD,SAASytB,GAAM3uB,GACX,OAAO2D,GAAM3D,GAAKyI,MAAM,KAE5B,SAAS8wB,GAAYr4B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIrS,EAAS7S,EAAS,IACtB,OAAe,IAAXA,EAEI6S,EAASslB,GAAkBn4B,EAAQ+f,EAAejhB,EAAI,GAAIomB,GAEvDnF,EACAlN,GAAUulB,GAAQp4B,GAAUytB,GAAM3uB,GAAK,GAAK2uB,GAAM3uB,GAAK,IAE1DomB,EACOrS,EAAS4a,GAAM3uB,GAAK,GAEpB+T,GAAUulB,GAAQp4B,GAAUytB,GAAM3uB,GAAK,GAAK2uB,GAAM3uB,GAAK,IAI1EtG,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,iJAAoG8M,MACxG,KAEJmmB,WAAY,2HAAkGnmB,MAC1G,KAEJie,SAAU,+DAEdve,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,CACNhQ,OAAQ,sIAAoF8M,MACxF,KAEJmmB,WAAY,0GAA2FnmB,MACnG,KAEJie,SAAU,cAEdhb,cAAe,wCAA8BjD,MAAM,KACnDgD,YAAa,sBAAiBhD,MAAM,KACpCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,sCACLC,KAAM,4CACNgE,EAAG,aACHye,GAAI,wBACJC,IAAK,sCACLC,KAAM,4CAEVvjB,SAAU,CACNC,QAAS,qBACTC,QAAS,aACTC,SAAU,UACVC,QAAS,aACTC,SAAU,+BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,gBACNnI,EAlFR,SAA0B/F,EAAQ+f,EAAejhB,EAAKomB,GAClD,OAAInF,EACO,uBAEAmF,EAAW,iCAAoB,mBA+EtC/W,GAAIkqB,GACJt9B,EAAGo9B,GACH/pB,GAAIiqB,GACJhqB,EAAG8pB,GACH7pB,GAAI+pB,GACJvtB,EAAGqtB,GACH5pB,GAAI8pB,GACJ3pB,EAAGypB,GACHxpB,GAAI0pB,GACJ1vB,EAAGwvB,GACHvpB,GAAIypB,IAERtqB,uBAAwB,cACxB9M,QAAS,SAAUjB,GACf,OAAOA,EAAS,QAEpByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIivB,GAAU,CACVnqB,GAAI,0CAAqC5G,MAAM,KAC/CxM,EAAG,0DAAiCwM,MAAM,KAC1C6G,GAAI,0DAAiC7G,MAAM,KAC3C8G,EAAG,sCAAiC9G,MAAM,KAC1C+G,GAAI,sCAAiC/G,MAAM,KAC3CuD,EAAG,kCAA6BvD,MAAM,KACtCgH,GAAI,kCAA6BhH,MAAM,KACvCmH,EAAG,oEAAiCnH,MAAM,KAC1CoH,GAAI,oEAAiCpH,MAAM,KAC3CoB,EAAG,wBAAwBpB,MAAM,KACjCqH,GAAI,wBAAwBrH,MAAM,MAKtC,SAASgxB,GAAS9K,EAAOztB,EAAQ+f,GAC7B,OAAIA,EAEO/f,EAAS,IAAO,GAAKA,EAAS,KAAQ,GAAKytB,EAAM,GAAKA,EAAM,GAI5DztB,EAAS,IAAO,GAAKA,EAAS,KAAQ,GAAKytB,EAAM,GAAKA,EAAM,GAG3E,SAAS+K,GAAyBx4B,EAAQ+f,EAAejhB,GACrD,OAAOkB,EAAS,IAAMu4B,GAASD,GAAQx5B,GAAMkB,EAAQ+f,GAEzD,SAAS0Y,GAAyBz4B,EAAQ+f,EAAejhB,GACrD,OAAOy5B,GAASD,GAAQx5B,GAAMkB,EAAQ+f,GAM1CvnB,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gIAAuGK,MAC3G,KAEJN,YAAa,4DAAkDM,MAAM,KACrEkD,SAAU,oFAA0ElD,MAChF,KAEJiD,cAAe,kBAAkBjD,MAAM,KACvCgD,YAAa,kBAAkBhD,MAAM,KACrCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,cACHC,GAAI,uBACJC,IAAK,8BACLC,KAAM,qCAEVZ,SAAU,CACNC,QAAS,4BACTC,QAAS,yBACTC,SAAU,qBACVC,QAAS,sBACTC,SAAU,+CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,WACNnI,EAlCR,SAAyB/F,EAAQ+f,GAC7B,OAAOA,EAAgB,sBAAmB,iCAkCtC5R,GAAIqqB,GACJz9B,EAAG09B,GACHrqB,GAAIoqB,GACJnqB,EAAGoqB,GACHnqB,GAAIkqB,GACJ1tB,EAAG2tB,GACHlqB,GAAIiqB,GACJ9pB,EAAG+pB,GACH9pB,GAAI6pB,GACJ7vB,EAAG8vB,GACH7pB,GAAI4pB,IAERzqB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIqvB,GAAa,CACbC,MAAO,CAEHxqB,GAAI,CAAC,SAAU,UAAW,WAC1BpT,EAAG,CAAC,cAAe,iBACnBqT,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBC,GAAI,CAAC,MAAO,OAAQ,QACpBI,GAAI,CAAC,SAAU,UAAW,WAC1BC,GAAI,CAAC,SAAU,SAAU,WAE7BgqB,uBAAwB,SAAU54B,EAAQ64B,GACtC,OAAkB,IAAX74B,EACD64B,EAAQ,GACE,GAAV74B,GAAeA,GAAU,EACzB64B,EAAQ,GACRA,EAAQ,IAElB9I,UAAW,SAAU/vB,EAAQ+f,EAAejhB,GACxC,IAAI+5B,EAAUH,GAAWC,MAAM75B,GAC/B,OAAmB,IAAfA,EAAIpF,OACGqmB,EAAgB8Y,EAAQ,GAAKA,EAAQ,GAGxC74B,EACA,IACA04B,GAAWE,uBAAuB54B,EAAQ64B,KA+S1D,SAASC,GAAY94B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,OAAQpmB,GACJ,IAAK,IACD,OAAOihB,EAAgB,4EAAkB,wFAC7C,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,wCAAY,qDACjD,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,kCAAW,+CAChD,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,sBAAS,yCAC9C,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,4BAAU,yCAC/C,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,sBAAS,mCAC9C,IAAK,IACL,IAAK,KACD,OAAO/f,GAAU+f,EAAgB,sBAAS,yCAC9C,QACI,OAAO/f,GA/TnBxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,mFAAmFK,MACvF,KAEJN,YAAa,2DAA2DM,MACpE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,iEAA4DlD,MAClE,KAEJiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,gBAETC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB4B,QAAS,mBACTC,SAAU,WAUN,MATmB,CACf,kCACA,sCACA,iCACA,iCACA,wCACA,gCACA,iCAEgBlV,KAAKqT,QAE7B8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,mBACHoI,GAAIuqB,GAAW3I,UACfh1B,EAAG29B,GAAW3I,UACd3hB,GAAIsqB,GAAW3I,UACf1hB,EAAGqqB,GAAW3I,UACdzhB,GAAIoqB,GAAW3I,UACfjlB,EAAG,MACHyD,GAAImqB,GAAW3I,UACfrhB,EAAG,SACHC,GAAI+pB,GAAW3I,UACfpnB,EAAG,SACHiG,GAAI8pB,GAAW3I,WAEnBhiB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,2LAA8IK,MAClJ,KAEJN,YAAa,sEAAiEM,MAC1E,KAEJH,YAAa,yCACb8oB,kBAAmB,yCACnB/oB,iBAAkB,yCAClBgpB,uBAAwB,yCACxB1lB,SAAU,sEAAkDlD,MAAM,KAClEiD,cAAe,uCAAwBjD,MAAM,KAC7CgD,YAAa,uCAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,wBACLC,KAAM,+BAEVZ,SAAU,CACNC,QAAS,wBACTC,QAAS,eACTC,SAAU,cACVC,QAAS,iBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,WACNnI,EAAG,wBACHoI,GAAI,iBACJpT,EAAG,YACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,QACJG,EAAG,YACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,UAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,ocAAuFK,MAC3F,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,mSAAwDlD,MAC9D,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,8EAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,mDACTC,QAAS,6CACTC,SAAU,wCACVC,QAAS,mDACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,wFACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0FAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNnI,EAAG,wFACHoI,GAAI,gDACJpT,EAAG,gEACHqT,GAAI,0CACJC,EAAG,8CACHC,GAAI,8BACJxD,EAAG,8CACHyD,GAAI,8BACJG,EAAG,0DACHC,GAAI,0CACJhG,EAAG,gEACHiG,GAAI,2CAERb,uBAAwB,0FACxB9M,QAAS,SAAUjB,GACf,IAAI2tB,EAAY3tB,EAAS,GACrB4tB,EAAc5tB,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,gBACO,GAAhB4tB,EACA5tB,EAAS,gBACK,GAAd4tB,GAAoBA,EAAc,GAClC5tB,EAAS,gBACK,GAAd2tB,EACA3tB,EAAS,gBACK,GAAd2tB,EACA3tB,EAAS,gBACK,GAAd2tB,GAAiC,GAAdA,EACnB3tB,EAAS,gBAETA,EAAS,iBAGxByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gdAAyFK,MAC7F,KAEJN,YAAa,8TAAyEM,MAClF,KAEJqoB,kBAAkB,EAClBnlB,SAAU,mYAAwElD,MAC9E,KAEJiD,cAAe,qNAA2CjD,MAAM,KAChEgD,YAAa,mGAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,uBACJD,IAAK,0BACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oCACLC,KAAM,2CAEVZ,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,kDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,gDACRC,KAAM,oCACNnI,EAAG,4EACHoI,GAAI,sDACJpT,EAAG,sEACHqT,GAAI,sDACJC,EAAG,sEACHC,GAAI,sDACJxD,EAAG,oDACHyD,GAAI,oCACJG,EAAG,8CACHC,GAAI,8BACJhG,EAAG,8CACHiG,GAAI,+BAERC,cAAe,mPACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAGO,yCAAb/Z,GAAiC,GAAR+Z,GACb,wEAAb/Z,GACa,iEAAbA,EAEO+Z,EAAO,GAEPA,GAGf/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,uCACAA,EAAO,GACP,uCACAA,EAAO,GACP,sEACAA,EAAO,GACP,+DAEA,0CAiCnBrd,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,8+BAA+LK,MACnM,KAEJN,YAAa,iQAA6EM,MACtF,KAEJqoB,kBAAkB,EAClBnlB,SAAU,iOAA6ClD,MAAM,KAC7DiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,6CACJC,IAAK,mDACLC,KAAM,0DAEVe,cAAe,6BACfnC,KAAM,SAAU9T,GACZ,MAAiB,iBAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,eAEA,gBAGf3I,SAAU,CACNC,QAAS,kDACTC,QAAS,kDACTC,SAAU,qCACVC,QAAS,kDACTC,SAAU,6DACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oCACRC,KAAM,8BACNnI,EAAG+yB,GACH3qB,GAAI2qB,GACJ/9B,EAAG+9B,GACH1qB,GAAI0qB,GACJzqB,EAAGyqB,GACHxqB,GAAIwqB,GACJhuB,EAAGguB,GACHvqB,GAAIuqB,GACJpqB,EAAGoqB,GACHnqB,GAAImqB,GACJnwB,EAAGmwB,GACHlqB,GAAIkqB,IAER/qB,uBAAwB,mCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,4BACpB,QACI,OAAOA,MAOvB,IAAI+4B,GAAc,CACV/N,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPuN,GAAc,CACVlE,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb,SAAS0D,GAAej5B,EAAQ+f,EAAe5N,EAAQ+S,GACnD,IAAIvjB,EAAS,GACb,GAAIoe,EACA,OAAQ5N,GACJ,IAAK,IACDxQ,EAAS,0DACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,0CACT,MACJ,IAAK,IACDA,EAAS,kCACT,MACJ,IAAK,KACDA,EAAS,wBACT,MACJ,IAAK,IACDA,EAAS,wCACT,MACJ,IAAK,KACDA,EAAS,8BACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,wCACT,MACJ,IAAK,KACDA,EAAS,oCACT,WAGR,OAAQwQ,GACJ,IAAK,IACDxQ,EAAS,sEACT,MACJ,IAAK,KACDA,EAAS,gDACT,MACJ,IAAK,IACDA,EAAS,0DACT,MACJ,IAAK,KACDA,EAAS,gDACT,MACJ,IAAK,IACDA,EAAS,8CACT,MACJ,IAAK,KACDA,EAAS,oCACT,MACJ,IAAK,IACDA,EAAS,oDACT,MACJ,IAAK,KACDA,EAAS,0CACT,MACJ,IAAK,IACDA,EAAS,gEACT,MACJ,IAAK,KACDA,EAAS,sDACT,MACJ,IAAK,IACDA,EAAS,oDACT,MACJ,IAAK,KACDA,EAAS,0CACT,MAGZ,OAAOA,EAAOF,QAAQ,MAAOzB,GAGjCxH,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0cAAwFK,MAC5F,KAEJN,YAAa,8VAAgFM,MACzF,KAEJqoB,kBAAkB,EAClBnlB,SAAU,6RAAuDlD,MAAM,KACvEiD,cAAe,+JAAkCjD,MAAM,KACvDgD,YAAa,iFAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,wCACJD,IAAK,2CACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qDACLC,KAAM,4DAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,sCACTC,SAAU,WACVC,QAAS,0BACTC,SAAU,4CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,mCACRC,KAAM,yCACNnI,EAAGkzB,GACH9qB,GAAI8qB,GACJl+B,EAAGk+B,GACH7qB,GAAI6qB,GACJ5qB,EAAG4qB,GACH3qB,GAAI2qB,GACJnuB,EAAGmuB,GACH1qB,GAAI0qB,GACJvqB,EAAGuqB,GACHtqB,GAAIsqB,GACJtwB,EAAGswB,GACHrqB,GAAIqqB,IAER9iB,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOw3B,GAAYx3B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOu3B,GAAYv3B,MAG3BqN,cAAe,2LACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,mCAAb/Z,GAAqC,mCAAbA,EACjB+Z,EAEM,yCAAb/Z,GACa,qDAAbA,GACa,yCAAbA,EAEe,IAAR+Z,EAAaA,EAAOA,EAAO,QAL/B,GAQX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAY,GAARjR,GAAaA,EAAO,EACb,iCACAA,EAAO,GACP,iCACAA,EAAO,GACP,uCACAA,EAAO,GACP,mDAEA,wCAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,oFAAoFK,MACxF,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,6CAA6ClD,MAAM,KAC7DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVe,cAAe,8BACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,SAAb/Z,EACO+Z,EACa,cAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,WAAb/Z,GAAsC,UAAbA,EACzB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,OACAA,EAAQ,GACR,YACAA,EAAQ,GACR,SAEA,SAGfgB,SAAU,CACNC,QAAS,sBACTC,QAAS,kBACTC,SAAU,kBACVC,QAAS,sBACTC,SAAU,wBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,gBACNnI,EAAG,gBACHoI,GAAI,UACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,QACHC,GAAI,SACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,WACJhG,EAAG,UACHiG,GAAI,YAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,oFAAoFK,MACxF,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,6CAA6ClD,MAAM,KAC7DiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4BACLC,KAAM,mCAEVe,cAAe,8BACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,SAAb/Z,EACO+Z,EACa,cAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,WAAb/Z,GAAsC,UAAbA,EACzB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,OACAA,EAAQ,GACR,YACAA,EAAQ,GACR,SAEA,SAGfgB,SAAU,CACNC,QAAS,sBACTC,QAAS,kBACTC,SAAU,kBACVC,QAAS,sBACTC,SAAU,wBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,gBACNnI,EAAG,gBACHoI,GAAI,UACJpT,EAAG,UACHqT,GAAI,WACJC,EAAG,QACHC,GAAI,SACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,UACHC,GAAI,WACJhG,EAAG,UACHiG,GAAI,YAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,kGAAwFK,MAC5F,KAEJN,YAAa,4DAAkDM,MAAM,KACrEkD,SAAU,0FAAiElD,MACvE,KAEJiD,cAAe,6CAA8BjD,MAAM,KACnDgD,YAAa,sCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,0BACTC,SAAU,iCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,aACRC,KAAM,SACNnI,EAAG,eACHoI,GAAI,aACJpT,EAAG,SACHqT,GAAI,YACJC,EAAG,cACHC,GAAI,kBACJxD,EAAG,eACHyD,GAAI,iBACJG,EAAG,QACHC,GAAI,UACJhG,EAAG,OACHiG,GAAI,UAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI6vB,GAAc,CACVlO,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEP0N,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbrhC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,4dAA2FK,MAC/F,KAEJN,YAAa,4OAAmDM,MAAM,KACtEkD,SAAU,mSAAwDlD,MAC9D,KAEJiD,cAAe,qHAA2BjD,MAAM,KAChDgD,YAAa,qHAA2BhD,MAAM,KAE9CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,gDACTC,QAAS,6EACTC,SAAU,+BACVC,QAAS,sDACTC,SAAU,8FACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,6DACRC,KAAM,yEACNnI,EAAG,wFACHoI,GAAI,gDACJpT,EAAG,mDACHqT,GAAI,oCACJC,EAAG,6CACHC,GAAI,8BACJxD,EAAG,uCACHyD,GAAI,wBACJG,EAAG,2BACHC,GAAI,YACJhG,EAAG,6CACHiG,GAAI,+BAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAO23B,GAAY33B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAO03B,GAAY13B,MAG3BiI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qFAAqFK,MACzF,KAEJN,YAAa,6DAA6DM,MACtE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,2DAAqDlD,MAAM,KACrEiD,cAAe,oCAA8BjD,MAAM,KACnDgD,YAAa,6BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,2BACLC,KAAM,iCAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,0BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,cACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,cACHC,GAAI,gBACJhG,EAAG,YACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIywB,GAAc,CACV9O,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPsO,GAAc,CACVjF,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb/8B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,ocAAuFK,MAC3F,KAEJN,YAAa,uTAAuEM,MAChF,KAEJqoB,kBAAkB,EAClBnlB,SAAU,mSAAwDlD,MAC9D,KAEJiD,cAAe,4KAA0CjD,MAAM,KAC/DgD,YAAa,wFAA4BhD,MAAM,KAC/CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,wCACJD,IAAK,2CACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qDACLC,KAAM,4DAEVqI,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOu4B,GAAYv4B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOs4B,GAAYt4B,MAG3BqN,cAAe,wHACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,6BAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,mCAAb/Z,EACA+Z,EACa,yCAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,6BAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,uCACAA,EAAO,GACP,2BAEA,4BAGf3I,SAAU,CACNC,QAAS,oBACTC,QAAS,gCACTC,SAAU,8CACVC,QAAS,gCACTC,SAAU,wCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,iBACRC,KAAM,oCACNnI,EAAG,oDACHoI,GAAI,gDACJpT,EAAG,8CACHqT,GAAI,oCACJC,EAAG,8CACHC,GAAI,oCACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,8CACHC,GAAI,oCACJhG,EAAG,wCACHiG,GAAI,+BAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI2wB,GAAwB,6DAA6DzyB,MACjF,KAEJ0yB,GAA2B,kDAAkD1yB,MACzE,KAEJ2yB,GAAgB,CACZ,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,qKAEpB3hC,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0FAA0FK,MAC9F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACbw/B,GAAyBl/B,EAAEgJ,SAE3Bi2B,GAAsBj/B,EAAEgJ,SAJxBi2B,IAQf5yB,YAAa+yB,GACbhzB,iBAAkBgzB,GAClBjK,kBAAmB,4FACnBC,uBAAwB,mFAExB9oB,YAAa6yB,GACb9J,gBAAiB8J,GACjB7J,iBAAkB6J,GAElBzvB,SAAU,6DAA6DlD,MACnE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,mBACHqT,GAAI,aACJC,EAAG,gBACHC,GAAI,SACJxD,EAAG,gBACHyD,GAAI,WACJG,EAAG,kBACHC,GAAI,aACJhG,EAAG,iBACHiG,GAAI,WAERb,uBAAwB,kBACxB9M,QAAS,SAAUjB,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI+wB,GAAwB,6DAA6D7yB,MACjF,KAEJ8yB,GAA2B,kDAAkD9yB,MACzE,KAEJ+yB,GAAgB,CACZ,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEJC,GAAgB,qKAEpB/hC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0FAA0FK,MAC9F,KAEJN,YAAa,SAAUlM,EAAGN,GACtB,OAAKM,EAEM,QAAQkH,KAAKxH,GACb4/B,GAAyBt/B,EAAEgJ,SAE3Bq2B,GAAsBr/B,EAAEgJ,SAJxBq2B,IAQfhzB,YAAamzB,GACbpzB,iBAAkBozB,GAClBrK,kBAAmB,4FACnBC,uBAAwB,mFAExB9oB,YAAaizB,GACblK,gBAAiBkK,GACjBjK,iBAAkBiK,GAElB7vB,SAAU,6DAA6DlD,MACnE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,mBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,mBACHqT,GAAI,aACJC,EAAG,gBACHC,GAAI,SACJxD,EAAG,gBACHyD,GAAI,WACJC,EAAG,iBACHC,GAAI,WACJC,EAAG,kBACHC,GAAI,aACJhG,EAAG,iBACHiG,GAAI,WAERb,uBAAwB,kBACxB9M,QAAS,SAAUjB,GACf,OACIA,GACY,IAAXA,GAA2B,IAAXA,GAA0B,IAAVA,EAAe,MAAQ,OAGhEyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,qFAAqFK,MACzF,KAEJN,YAAa,6DAA6DM,MACtE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,wDAAqDlD,MAAM,KACrEiD,cAAe,kCAA+BjD,MAAM,KACpDgD,YAAa,0BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,uBACTC,SAAU,mBACVC,QAAS,uBACTC,SAAU,sCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,UACHyD,GAAI,WACJC,EAAG,UACHC,GAAI,WACJC,EAAG,eACHC,GAAI,gBACJhG,EAAG,YACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,SAAU,CACzBhJ,OAAQ,CACJwmB,WAAY,iGAAqFnmB,MAC7F,KAEJ9M,OAAQ,kIAAsH8M,MAC1H,KAEJie,SAAU,mBAEdve,YAAa,kEAA+DM,MACxE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,iEAA2DlD,MACjE,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,mBACJ2iB,GAAI,aACJ1iB,IAAK,4BACL2iB,IAAK,mBACL1iB,KAAM,iCACN2iB,KAAM,wBAEVvjB,SAAU,CACNC,QAAS,gBACTC,QAAS,eACTC,SAAU,cACVC,QAAS,gBACTC,SAAU,qBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,eACRC,KAAM,QACNnI,EAAG,gBACHoI,GAAI,cACJpT,EAAG,aACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,UACJxD,EAAG,UACHyD,GAAI,WACJG,EAAG,SACHC,GAAI,WACJhG,EAAG,QACHiG,GAAI,UAERb,uBAAwB,wBACxB9M,QAAS,SAAUjB,EAAQ+a,GAcvB,OAAO/a,GAHQ,MAAX+a,GAA6B,MAAXA,EATP,IAAX/a,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,OAEG,MAIjByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAImxB,GAAc,CACVxP,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEPgP,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGb3iC,EAAM0X,aAAa,QAAS,CAExBhJ,OAAQ,8VAAsEK,MAC1E,KAEJN,YAAa,8VAAsEM,MAC/E,KAEJkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,yJAAiCjD,MAAM,KACtDgD,YAAa,yJAAiChD,MAAM,KACpDxF,eAAgB,CACZ2L,GAAI,4BACJD,IAAK,+BACLE,EAAG,aACHC,GAAI,cACJC,IAAK,yCACLC,KAAM,gDAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,sCACVC,QAAS,oBACTC,SAAU,4CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,8BACRC,KAAM,oCACNnI,EAAG,oDACHoI,GAAI,oCACJpT,EAAG,wCACHqT,GAAI,8BACJC,EAAG,8CACHC,GAAI,8BACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,oDACHC,GAAI,oCACJhG,EAAG,wCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAOi5B,GAAYj5B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAOg5B,GAAYh5B,MAK3BqN,cAAe,4GACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,uBAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,yCAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,6BAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,uCACAA,EAAO,GACP,2BAEA,sBAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI+xB,GAAmB,iIAAmG7zB,MAClH,KAEJ8zB,GAAmB,+GAAqG9zB,MACpH,KAEJ+zB,GAAgB,CACZ,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,aACA,QACA,SAER,SAASC,GAASlxB,GACd,OAAOA,EAAI,GAAK,GAAc,EAATA,EAAI,OAAaA,EAAI,IAAM,IAAO,EAE3D,SAASmxB,GAAYx7B,EAAQ+f,EAAejhB,GACxC,IAAI+T,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,KACD,OAAO+T,GAAU0oB,GAASv7B,GAAU,UAAY,UACpD,IAAK,IACD,OAAO+f,EAAgB,SAAW,cACtC,IAAK,KACD,OAAOlN,GAAU0oB,GAASv7B,GAAU,SAAW,SACnD,IAAK,IACD,OAAO+f,EAAgB,UAAY,eACvC,IAAK,KACD,OAAOlN,GAAU0oB,GAASv7B,GAAU,UAAY,UACpD,IAAK,KACD,OAAO6S,GAAU0oB,GAASv7B,GAAU,WAAa,WACrD,IAAK,KACD,OAAO6S,GAAU0oB,GAASv7B,GAAU,gBAAa,iBACrD,IAAK,KACD,OAAO6S,GAAU0oB,GAASv7B,GAAU,OAAS,QAgNzD,SAASy7B,GAAyBz7B,EAAQ+f,EAAejhB,GAcrD,OAAOkB,GAHa,IAAhBA,EAAS,KAAwB,KAAVA,GAAiBA,EAAS,KAAQ,EAC7C,OAFA,KATH,CACLmO,GAAI,UACJC,GAAI,SACJE,GAAI,MACJC,GAAI,OACJE,GAAI,yBACJE,GAAI,OACJC,GAAI,OAMuB9P,GAgEvC,SAAS48B,GAAyB17B,EAAQ+f,EAAejhB,GACrD,IAToB0uB,EAChBC,EAiBJ,MAAY,MAAR3uB,EACOihB,EAAgB,uCAAW,uCAE3B/f,EAAS,KArBAwtB,GAqB6BxtB,EApB7CytB,EAQS,CACTtf,GAAI4R,EAAgB,6HAA2B,6HAC/C3R,GAAI2R,EAAgB,2GAAwB,2GAC5CzR,GAAI,6EACJC,GAAI,uEACJE,GAAI,iHACJE,GAAI,iHACJC,GAAI,kEAKkC9P,GApBzByI,MAAM,KAChBimB,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAxRhBj1B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,SAAUmqB,EAAgB52B,GAC9B,OAAK42B,EAEM,SAASpvB,KAAKxH,GACd4gC,GAAiBhK,EAAettB,SAEhCq3B,GAAiB/J,EAAettB,SAJhCq3B,IAOfn0B,YAAa,uDAAkDM,MAAM,KACrEF,YAAai0B,GACblL,gBAAiBkL,GACjBjL,iBAAkBiL,GAClB7wB,SAAU,4EAA6DlD,MACnE,KAEJiD,cAAe,gCAA2BjD,MAAM,KAChDgD,YAAa,4BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,mBACTC,QAAS,eACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,0BAEX,KAAK,EACD,MAAO,mBAEX,KAAK,EACD,MAAO,2BAEX,KAAK,EACD,MAAO,uBAEX,QACI,MAAO,oBAGnB4B,QAAS,iBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,2CACX,KAAK,EACD,MAAO,4CACX,KAAK,EACD,MAAO,wCACX,QACI,MAAO,gCAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAG,eACHoI,GAAIqtB,GACJzgC,EAAGygC,GACHptB,GAAIotB,GACJntB,EAAGmtB,GACHltB,GAAIktB,GACJ1wB,EAAG,eACHyD,GAAI,SACJC,EAAG,eACHC,GAAI+sB,GACJ9sB,EAAG,eACHC,GAAI6sB,GACJ7yB,EAAG,MACHiG,GAAI4sB,IAERztB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,8FAA2FK,MAC/F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,uFAAiFlD,MACvF,KAEJiD,cAAe,iCAA8BjD,MAAM,KACnDgD,YAAa,yCAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,sCACLC,KAAM,6CAEVZ,SAAU,CACNC,QAAS,kBACTC,QAAS,uBACTC,SAAU,kBACVC,QAAS,mBACTC,SAAU,WACN,OAAsB,IAAflV,KAAKqT,OAA8B,IAAfrT,KAAKqT,MAC1B,8BACA,+BAEV8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,kBACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,UACJG,EAAG,YACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,SACTY,YAAa,qBAKjBrJ,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,8FAA2FK,MAC/F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,uFAAiFlD,MACvF,KAEJiD,cAAe,iCAA8BjD,MAAM,KACnDgD,YAAa,yCAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,qCAEVZ,SAAU,CACNC,QAAS,kBACTC,QAAS,uBACTC,SAAU,kBACVC,QAAS,mBACTC,SAAU,WACN,OAAsB,IAAflV,KAAKqT,OAA8B,IAAfrT,KAAKqT,MAC1B,8BACA,+BAEV8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNnI,EAAG,WACHoI,GAAI,cACJpT,EAAG,YACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,WACJxD,EAAG,SACHyD,GAAI,UACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,WACJhG,EAAG,SACHiG,GAAI,WAERb,uBAAwB,cACxB9M,QAAS,SACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAuBb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,oGAAoGK,MACxG,KAEJN,YAAa,+DAA+DM,MACxE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,yEAAkDlD,MAAM,KAClEiD,cAAe,iCAA8BjD,MAAM,KACnDgD,YAAa,0BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,cACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,uBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,qBACNnI,EAAG,oBACHoI,GAAIstB,GACJ1gC,EAAG,WACHqT,GAAIqtB,GACJptB,EAAG,aACHC,GAAImtB,GACJ3wB,EAAG,OACHyD,GAAIktB,GACJjtB,EAAG,gCACHC,GAAIgtB,GACJ/sB,EAAG,cACHC,GAAI8sB,GACJ9yB,EAAG,QACHiG,GAAI6sB,IAERhyB,KAAM,CACFL,IAAK,EACLC,IAAK,KA8Bb,IAAIsyB,GAAgB,CAChB,uBACA,uBACA,uBACA,uBACA,+BACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,wBAMJnjC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,kbAAoF8M,MACxF,KAEJmmB,WAAY,saAAkFnmB,MAC1F,MAGRN,YAAa,CAETxM,OAAQ,6QAAgE8M,MACpE,KAEJmmB,WAAY,kRAAgEnmB,MACxE,MAGRkD,SAAU,CACNijB,WAAY,mVAAgEnmB,MACxE,KAEJ9M,OAAQ,mVAAgE8M,MACpE,KAEJie,SAAU,0JAEdhb,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,6FAAuBhD,MAAM,KAC1CF,YAAas0B,GACbvL,gBAAiBuL,GACjBtL,iBAAkBsL,GAGlBv0B,YAAa,+wBAGbD,iBAAkB,+wBAGlB+oB,kBAAmB,wgBAGnBC,uBAAwB,8TACxBpuB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,4BACLC,KAAM,mCAEVZ,SAAU,CACNC,QAAS,0DACTC,QAAS,oDACTE,QAAS,8CACTD,SAAU,SAAU6G,GAChB,GAAIA,EAAIzK,SAAWpR,KAAKoR,OAcpB,OAAmB,IAAfpR,KAAKqT,MACE,mCAEA,6BAhBX,OAAQrT,KAAKqT,OACT,KAAK,EACD,MAAO,oFACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oFACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,sFAUvB6B,SAAU,SAAU2G,GAChB,GAAIA,EAAIzK,SAAWpR,KAAKoR,OAcpB,OAAmB,IAAfpR,KAAKqT,MACE,mCAEA,6BAhBX,OAAQrT,KAAKqT,OACT,KAAK,EACD,MAAO,wEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,wEACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0EAUvB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oCACRC,KAAM,oCACNnI,EAAG,8FACHoI,GAAIutB,GACJ3gC,EAAG2gC,GACHttB,GAAIstB,GACJrtB,EAAG,qBACHC,GAAIotB,GACJ5wB,EAAG,2BACHyD,GAAImtB,GACJltB,EAAG,uCACHC,GAAIitB,GACJhtB,EAAG,iCACHC,GAAI+sB,GACJ/yB,EAAG,qBACHiG,GAAI8sB,IAER7sB,cAAe,6GACfnC,KAAM,SAAU9T,GACZ,MAAO,8DAAiBqJ,KAAKrJ,IAEjCkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,2BACAA,EAAO,GACP,qBAEA,wCAGf9H,uBAAwB,uCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,UACpB,IAAK,IACD,OAAOA,EAAS,gBACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,UACpB,QACI,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIuyB,GAAW,CACP,iCACA,6CACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,6CACA,uCACA,iCACA,kCAEJC,GAAS,CAAC,qBAAO,2BAAQ,iCAAS,2BAAQ,2BAAQ,qBAAO,4BAE7DrjC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ00B,GACR30B,YAAa20B,GACbnxB,SAAUoxB,GACVrxB,cAAeqxB,GACftxB,YAAasxB,GACb95B,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,gCAEVe,cAAe,wCACfnC,KAAM,SAAU9T,GACZ,MAAO,uBAAUA,GAErBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,qBAEJ,sBAEX3I,SAAU,CACNC,QAAS,oBACTC,QAAS,sCACTC,SAAU,2EACVC,QAAS,sCACTC,SAAU,mFACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,kBACNnI,EAAG,oDACHoI,GAAI,oCACJpT,EAAG,kCACHqT,GAAI,wBACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,8CACHyD,GAAI,oCACJG,EAAG,8CACHC,GAAI,oCACJhG,EAAG,kCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wNAAmJK,MACvJ,KAEJN,YAAa,oFAA6DM,MACtE,KAEJkD,SAAU,gGAA6ElD,MACnF,KAEJiD,cAAe,2CAAmCjD,MAAM,KACxDgD,YAAa,gBAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,oBACJC,IAAK,gCACLC,KAAM,uCAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,iBACRC,KAAM,gBACNnI,EAAG,mBACHoI,GAAI,eACJpT,EAAG,eACHqT,GAAI,cACJC,EAAG,cACHC,GAAI,aACJxD,EAAG,cACHyD,GAAI,cACJG,EAAG,gBACHC,GAAI,cACJhG,EAAG,aACHiG,GAAI,YAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAOb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sgBAAkGK,MACtG,KAEJN,YAAa,0QAAwDM,MACjE,KAEJkD,SAAU,mVAAgElD,MACtE,KAEJiD,cAAe,mJAAgCjD,MAAM,KACrDgD,YAAa,iFAAqBhD,MAAM,KACxCojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,0DAEVZ,SAAU,CACNC,QAAS,4BACTC,QAAS,kCACTC,SAAU,kBACVC,QAAS,kCACTC,SAAU,yDACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,6BACRC,KAAM,oCACNnI,EAAG,sEACHoI,GAAI,oCACJpT,EAAG,yDACHqT,GAAI,sDACJC,EAAG,qBACHC,GAAI,wBACJxD,EAAG,2BACHyD,GAAI,wBACJG,EAAG,2BACHC,GAAI,wBACJhG,EAAG,qBACHiG,GAAI,yBAERb,uBAAwB,mCACxB9M,QAAS,SAAUjB,GACf,OAAOA,EAAS,6BAEpB6O,cAAe,iHACfnC,KAAM,SAAU9T,GACZ,MAAiB,mBAAVA,GAA8B,0CAAVA,GAE/BkD,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAY,GAAR5a,EACO4a,EAAU,iBAAS,wCAEnBA,EAAU,uBAAU,2CAOvC,IAAIgV,GAAW,yGAAoFv0B,MAC3F,KAEJw0B,GAAgB,2DAAkDx0B,MAAM,KAC5E,SAASy0B,GAAS3xB,GACd,OAAW,EAAJA,GAASA,EAAI,EAExB,SAAS4xB,GAAYj8B,EAAQ+f,EAAejhB,EAAKomB,GAC7C,IAAIrS,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,IACD,OAAOihB,GAAiBmF,EAAW,mBAAe,mBACtD,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUmpB,GAASh8B,GAAU,UAAY,aAEzC6S,EAAS,YAExB,IAAK,IACD,OAAOkN,EAAgB,YAAWmF,EAAW,YAAW,aAC5D,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUmpB,GAASh8B,GAAU,YAAW,YAExC6S,EAAS,cAExB,IAAK,IACD,OAAOkN,EAAgB,SAAWmF,EAAW,SAAW,UAC5D,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUmpB,GAASh8B,GAAU,SAAW,YAExC6S,EAAS,WAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,WAAQ,YAC/C,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUmpB,GAASh8B,GAAU,MAAQ,UAErC6S,EAAS,aAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,SAAW,WAClD,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUmpB,GAASh8B,GAAU,UAAY,YAEzC6S,EAAS,WAExB,IAAK,IACD,OAAOkN,GAAiBmF,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAInF,GAAiBmF,EACVrS,GAAUmpB,GAASh8B,GAAU,OAAS,SAEtC6S,EAAS,SAoFhC,SAASqpB,GAAsBl8B,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIrS,EAAS7S,EAAS,IACtB,OAAQlB,GACJ,IAAK,IACD,OAAOihB,GAAiBmF,EAClB,eACA,kBACV,IAAK,KAUD,OARIrS,GADW,IAAX7S,EACU+f,EAAgB,UAAY,UACpB,IAAX/f,EACG+f,GAAiBmF,EAAW,UAAY,WAC3CllB,EAAS,EACN+f,GAAiBmF,EAAW,UAAY,WAExC,SAGlB,IAAK,IACD,OAAOnF,EAAgB,aAAe,aAC1C,IAAK,KAUD,OARIlN,GADW,IAAX7S,EACU+f,EAAgB,SAAW,SACnB,IAAX/f,EACG+f,GAAiBmF,EAAW,SAAW,WAC1CllB,EAAS,EACN+f,GAAiBmF,EAAW,SAAW,WAEvCnF,GAAiBmF,EAAW,QAAU,WAGxD,IAAK,IACD,OAAOnF,EAAgB,UAAY,UACvC,IAAK,KAUD,OARIlN,GADW,IAAX7S,EACU+f,EAAgB,MAAQ,MAChB,IAAX/f,EACG+f,GAAiBmF,EAAW,MAAQ,QACvCllB,EAAS,EACN+f,GAAiBmF,EAAW,MAAQ,QAEpCnF,GAAiBmF,EAAW,KAAO,QAGrD,IAAK,IACD,OAAOnF,GAAiBmF,EAAW,SAAW,YAClD,IAAK,KAQD,OANIrS,GADW,IAAX7S,EACU+f,GAAiBmF,EAAW,MAAQ,OAC5B,IAAXllB,EACG+f,GAAiBmF,EAAW,MAAQ,UAEpCnF,GAAiBmF,EAAW,MAAQ,QAGtD,IAAK,IACD,OAAOnF,GAAiBmF,EAAW,WAAa,eACpD,IAAK,KAUD,OARIrS,GADW,IAAX7S,EACU+f,GAAiBmF,EAAW,QAAU,UAC9B,IAAXllB,EACG+f,GAAiBmF,EAAW,SAAW,WAC1CllB,EAAS,EACN+f,GAAiBmF,EAAW,SAAW,SAEvCnF,GAAiBmF,EAAW,UAAY,SAG1D,IAAK,IACD,OAAOnF,GAAiBmF,EAAW,WAAa,aACpD,IAAK,KAUD,OARIrS,GADW,IAAX7S,EACU+f,GAAiBmF,EAAW,OAAS,QAC7B,IAAXllB,EACG+f,GAAiBmF,EAAW,OAAS,SACxCllB,EAAS,EACN+f,GAAiBmF,EAAW,OAAS,OAErCnF,GAAiBmF,EAAW,MAAQ,QA7J9D1sB,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ40B,GACR70B,YAAa80B,GACbtxB,SAAU,gEAAsDlD,MAAM,KACtEiD,cAAe,4BAAuBjD,MAAM,KAC5CgD,YAAa,4BAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,cACTC,QAAS,gBACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,yBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,oBAGnB4B,QAAS,oBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,+BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,0BACX,KAAK,EACL,KAAK,EACD,MAAO,0BACX,KAAK,EACD,MAAO,4BAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNnI,EAAGk2B,GACH9tB,GAAI8tB,GACJlhC,EAAGkhC,GACH7tB,GAAI6tB,GACJ5tB,EAAG4tB,GACH3tB,GAAI2tB,GACJnxB,EAAGmxB,GACH1tB,GAAI0tB,GACJvtB,EAAGutB,GACHttB,GAAIstB,GACJtzB,EAAGszB,GACHrtB,GAAIqtB,IAERluB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KA0Fb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,8DAA8DM,MACvE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,2DAAsDlD,MAAM,KACtEiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,eACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,gBAETC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,qBAGnB4B,QAAS,sBACTC,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACD,MAAO,oCACX,KAAK,EACD,MAAO,kCACX,KAAK,EACD,MAAO,mCACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,iCAGnB8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,UACNnI,EAAGm2B,GACH/tB,GAAI+tB,GACJnhC,EAAGmhC,GACH9tB,GAAI8tB,GACJ7tB,EAAG6tB,GACH5tB,GAAI4tB,GACJpxB,EAAGoxB,GACH3tB,GAAI2tB,GACJxtB,EAAGwtB,GACHvtB,GAAIutB,GACJvzB,EAAGuzB,GACHttB,GAAIstB,IAERnuB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,mFAAgFK,MACpF,KAEJN,YAAa,qDAAkDM,MAAM,KACrEkD,SAAU,8EAA4DlD,MAClE,KAEJiD,cAAe,oCAA8BjD,MAAM,KACnDgD,YAAa,sBAAmBhD,MAAM,KACtCojB,oBAAoB,EACpB9b,cAAe,QACfnC,KAAM,SAAU9T,GACZ,MAA2B,MAApBA,EAAMiuB,OAAO,IAExB/qB,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAO5a,EAAQ,GAAK,KAAO,MAE/BnK,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,iBACTC,QAAS,sBACTC,SAAU,kBACVC,QAAS,iBACTC,SAAU,2BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,mBACNnI,EAAG,eACHoI,GAAI,aACJpT,EAAG,mBACHqT,GAAI,YACJC,EAAG,gBACHC,GAAI,YACJxD,EAAG,iBACHyD,GAAI,aACJG,EAAG,cACHC,GAAI,UACJhG,EAAG,aACHiG,GAAI,WAERb,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI8yB,GAAe,CACfxD,MAAO,CAEHxqB,GAAI,CAAC,6CAAW,6CAAW,8CAC3BpT,EAAG,CAAC,gEAAe,uEACnBqT,GAAI,CAAC,iCAAS,uCAAU,wCACxBC,EAAG,CAAC,oDAAa,iEACjBC,GAAI,CAAC,qBAAO,2BAAQ,4BACpBC,GAAI,CAAC,qBAAO,2BAAQ,4BACpBI,GAAI,CAAC,iCAAS,uCAAU,wCACxBC,GAAI,CAAC,uCAAU,uCAAU,yCAE7BgqB,uBAAwB,SAAU54B,EAAQ64B,GACtC,OAAkB,IAAX74B,EACD64B,EAAQ,GACE,GAAV74B,GAAeA,GAAU,EACzB64B,EAAQ,GACRA,EAAQ,IAElB9I,UAAW,SAAU/vB,EAAQ+f,EAAejhB,GACxC,IAAI+5B,EAAUsD,GAAaxD,MAAM75B,GACjC,OAAmB,IAAfA,EAAIpF,OACGqmB,EAAgB8Y,EAAQ,GAAKA,EAAQ,GAGxC74B,EACA,IACAm8B,GAAavD,uBAAuB54B,EAAQ64B,KAM5DrgC,EAAM0X,aAAa,UAAW,CAC1BhJ,OAAQ,4aAAmFK,MACvF,KAEJN,YAAa,+OAA2DM,MACpE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,uRAAsDlD,MAAM,KACtEiD,cAAe,8IAAqCjD,MAAM,KAC1DgD,YAAa,6FAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,6CACTC,QAAS,6CACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,8DACX,KAAK,EACD,MAAO,wDACX,KAAK,EACD,MAAO,8DACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,8BAGnB4B,QAAS,uCACTC,SAAU,WAUN,MATmB,CACf,4FACA,oHACA,kGACA,sFACA,8GACA,4FACA,6FAEgBlV,KAAKqT,QAE7B8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,wBACNnI,EAAG,8FACHoI,GAAIguB,GAAapM,UACjBh1B,EAAGohC,GAAapM,UAChB3hB,GAAI+tB,GAAapM,UACjB1hB,EAAG8tB,GAAapM,UAChBzhB,GAAI6tB,GAAapM,UACjBjlB,EAAG,qBACHyD,GAAI4tB,GAAapM,UACjBrhB,EAAG,iCACHC,GAAIwtB,GAAapM,UACjBpnB,EAAG,uCACHiG,GAAIutB,GAAapM,WAErBhiB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI+yB,GAAe,CACfzD,MAAO,CAEHxqB,GAAI,CAAC,UAAW,UAAW,WAC3BpT,EAAG,CAAC,cAAe,gBACnBqT,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBC,GAAI,CAAC,MAAO,OAAQ,QACpBI,GAAI,CAAC,QAAS,SAAU,UACxBC,GAAI,CAAC,SAAU,SAAU,WAE7BgqB,uBAAwB,SAAU54B,EAAQ64B,GACtC,OAAkB,IAAX74B,EACD64B,EAAQ,GACE,GAAV74B,GAAeA,GAAU,EACzB64B,EAAQ,GACRA,EAAQ,IAElB9I,UAAW,SAAU/vB,EAAQ+f,EAAejhB,GACxC,IAAI+5B,EAAUuD,GAAazD,MAAM75B,GACjC,OAAmB,IAAfA,EAAIpF,OACGqmB,EAAgB8Y,EAAQ,GAAKA,EAAQ,GAGxC74B,EACA,IACAo8B,GAAaxD,uBAAuB54B,EAAQ64B,KAM5DrgC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,mFAAmFK,MACvF,KAEJN,YAAa,2DAA2DM,MACpE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,6DAAwDlD,MAC9D,KAEJiD,cAAe,0CAAqCjD,MAAM,KAC1DgD,YAAa,4BAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQhV,KAAKqT,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,qBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnB4B,QAAS,mBACTC,SAAU,WAUN,MATmB,CACf,iCACA,qCACA,iCACA,+BACA,wCACA,gCACA,iCAEgBlV,KAAKqT,QAE7B8B,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNnI,EAAG,mBACHoI,GAAIiuB,GAAarM,UACjBh1B,EAAGqhC,GAAarM,UAChB3hB,GAAIguB,GAAarM,UACjB1hB,EAAG+tB,GAAarM,UAChBzhB,GAAI8tB,GAAarM,UACjBjlB,EAAG,MACHyD,GAAI6tB,GAAarM,UACjBrhB,EAAG,QACHC,GAAIytB,GAAarM,UACjBpnB,EAAG,SACHiG,GAAIwtB,GAAarM,WAErBhiB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,mHAAmHK,MACvH,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,sEAAsElD,MAC5E,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,mBACTC,QAAS,kBACTC,SAAU,gBACVC,QAAS,iBACTC,SAAU,8BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,iBACNnI,EAAG,qBACHoI,GAAI,cACJpT,EAAG,SACHqT,GAAI,aACJC,EAAG,SACHC,GAAI,aACJxD,EAAG,UACHyD,GAAI,cACJG,EAAG,UACHC,GAAI,cACJhG,EAAG,UACHiG,GAAI,eAERC,cAAe,mCACf/S,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD,UACAA,EAAQ,GACR,QACAA,EAAQ,GACR,aAEA,WAGf6J,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,YAAb/Z,EACO+Z,EACa,UAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,eAAb/Z,GAA0C,YAAbA,EACvB,IAAT+Z,EACO,EAEJA,EAAO,QAJX,GAOX9H,uBAAwB,UACxB9M,QAAS,KACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,wFAAwFK,MAC5F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,6DAAoDlD,MAAM,KACpEiD,cAAe,uCAA8BjD,MAAM,KACnDgD,YAAa,gCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,+BACN0iB,IAAK,mBACLC,KAAM,wBAEVvjB,SAAU,CACNC,QAAS,YACTC,QAAS,eACTE,QAAS,eACTD,SAAU,kBACVE,SAAU,iBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,QACRC,KAAM,kBACNnI,EAAG,oBACHoI,GAAI,cACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,WACHC,GAAI,YACJxD,EAAG,SACHyD,GAAI,WACJG,EAAG,cACHC,GAAI,gBACJhG,EAAG,YACHiG,GAAI,YAERb,uBAAwB,mBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,MAER,GAAN3G,GAEM,GAANA,GADA,KAFA,OAUlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sFAAsFK,MAC1F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,8DAA8DlD,MACpE,KAEJiD,cAAe,kCAAkCjD,MAAM,KACvDgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,UACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,8BACVC,QAAS,YACTC,SAAU,kCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,aACRC,KAAM,WACNnI,EAAG,aACHoI,GAAI,aACJpT,EAAG,cACHqT,GAAI,YACJC,EAAG,aACHC,GAAI,WACJxD,EAAG,YACHyD,GAAI,UACJG,EAAG,cACHC,GAAI,WACJhG,EAAG,cACHiG,GAAI,YAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIgzB,GAAc,CACVrR,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,SACHC,EAAG,UAEP6Q,GAAc,CACVC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,IACLC,SAAK,KAGbxkC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,sdAA0FK,MAC9F,KAEJN,YAAa,sdAA0FM,MACnG,KAEJkD,SAAU,ugBAA8FlD,MACpG,KAEJiD,cAAe,qQAAmDjD,MAC9D,KAEJgD,YAAa,uFAAsBhD,MAAM,KACzCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,sCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,4CACTC,SAAU,2EACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,8BACNnI,EAAG,+FACHoI,GAAI,4DACJpT,EAAG,gEACHqT,GAAI,kEACJC,EAAG,uEACHC,GAAI,uDACJxD,EAAG,8CACHyD,GAAI,gDACJG,EAAG,oDACHC,GAAI,sDACJhG,EAAG,0DACHiG,GAAI,uDAERb,uBAAwB,4BACxB9M,QAAS,SAAUjB,GACf,OAAOA,EAAS,sBAEpBmW,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,kEAAiB,SAAUD,GAC7C,OAAO86B,GAAY96B,MAG3Bse,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,MAAO,SAAUD,GACnC,OAAO66B,GAAY76B,MAI3BqN,cAAe,wMACf/S,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,kCACAA,EAAO,EACP,kCACAA,EAAO,GACP,4BACAA,EAAO,GACP,8CACAA,EAAO,GACP,8CACAA,EAAO,GACP,4BAEA,mCAGfE,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,mCAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,mCAAb/Z,GAAqC,6BAAbA,GAEX,+CAAbA,GACQ,IAAR+Z,EAFAA,EAIAA,EAAO,IAGtBpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,0cAAwFK,MAC5F,KAEJN,YAAa,oSAAmEM,MAC5E,KAEJqoB,kBAAkB,EAClBnlB,SAAU,uUAA8DlD,MACpE,KAEJiD,cAAe,+JAAkCjD,MAAM,KACvDgD,YAAa,iFAAqBhD,MAAM,KACxCxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,sBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,gCACTC,QAAS,gCACTC,SAAU,WACVC,QAAS,sCACTC,SAAU,0BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,0CACNnI,EAAG,kFACHoI,GAAI,gDACJpT,EAAG,oDACHqT,GAAI,sDACJC,EAAG,kCACHC,GAAI,oCACJxD,EAAG,wCACHyD,GAAI,0CACJG,EAAG,kCACHC,GAAI,oCACJhG,EAAG,gEACHiG,GAAI,mEAERb,uBAAwB,gBACxB9M,QAAS,WACT4N,cAAe,wKACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,yCAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,2DAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,qDAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,uCACAA,EAAO,GACP,2BACAA,EAAO,GACP,yDACAA,EAAO,GACP,mDAEA,wCAGfpM,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,6FAA0FK,MAC9F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,kDAAkDlD,MAAM,KAClEiD,cAAe,iCAAiCjD,MAAM,KACtDgD,YAAa,yBAAyBhD,MAAM,KAC5CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,gBACTC,QAAS,gBACTC,SAAU,gBACVC,QAAS,oBACTC,SAAU,+BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,SACRC,KAAM,WACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,YACHyD,GAAI,WACJG,EAAG,YACHC,GAAI,WACJhG,EAAG,YACHiG,GAAI,YAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI4zB,GAAa,CACbxR,EAAG,gBACHT,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACHC,EAAG,gBACH2B,GAAI,gBACJ+P,GAAI,gBACJC,GAAI,gBACJnQ,GAAI,gBACJI,GAAI,gBACJ+I,GAAI,gBACJlJ,GAAI,gBACJI,GAAI,gBACJP,GAAI,gBACJC,GAAI,gBACJO,GAAI,gBACJJ,IAAK,iBAGT10B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,wbAAqF8M,MACzF,KAEJmmB,WAAY,gXAAyEnmB,MACjF,MAGRN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,qEACTC,QAAS,qEACTE,QAAS,qEACTD,SAAU,uHACVE,SAAU,mIACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oCACRC,KAAM,wBACNnI,EAAG,sEACHhL,EAAG,oDACHqT,GAAI,0CACJC,EAAG,wCACHC,GAAI,8BACJxD,EAAG,kCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,wBACJhG,EAAG,kCACHiG,GAAI,yBAERC,cAAe,gGACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,uBAAb/Z,EACO+Z,EAAO,EAAIA,EAAOA,EAAO,GACZ,6BAAb/Z,EACA+Z,EACa,uBAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,mCAAb/Z,EACA+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,qBACAA,EAAO,GACP,2BACAA,EAAO,GACP,qBACAA,EAAO,GACP,iCAEA,sBAGf9H,uBAAwB,sCACxB9M,QAAS,SAAUjB,GAGf,OAAOA,GAAUi9B,GAAWj9B,IAAWi9B,GAF/Bj9B,EAAS,KAEuCi9B,GADtC,KAAVj9B,EAAgB,IAAM,QAGlCyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,khBAAoGK,MACxG,KAEJN,YAAa,wMAAiEM,MAC1E,KAEJqoB,kBAAkB,EAClBnlB,SAAU,yPAAiDlD,MAAM,KACjEiD,cAAe,uOAA8CjD,MAAM,KACnEgD,YAAa,sEAAyBhD,MAAM,KAC5CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,OACJD,IAAK,UACLE,EAAG,aACHC,GAAI,cACJC,IAAK,4CACLC,KAAM,sFAEVe,cAAe,4HACfnC,KAAM,SAAU9T,GACZ,MAAiB,iEAAVA,GAEXkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,+DAEA,gEAGf3I,SAAU,CACNC,QAAS,qEACTC,QAAS,iFACTC,SAAU,6DACVC,QAAS,mGACTC,SAAU,mGACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,+CACNnI,EAAG,2EACHoI,GAAI,0CACJpT,EAAG,6BACHqT,GAAI,8BACJC,EAAG,+CACHC,GAAI,gDACJxD,EAAG,uBACHyD,GAAI,wBACJC,EAAG,+CACHC,GAAI,gDACJC,EAAG,mCACHC,GAAI,oCACJhG,EAAG,iBACHiG,GAAI,qBAMZ,IAAIwuB,GAAa,CACbpS,EAAG,QACHI,EAAG,QACHG,EAAG,QACHuB,GAAI,QACJC,GAAI,QACJ9B,EAAG,OACHK,EAAG,OACH0B,GAAI,OACJC,GAAI,OACJ/B,EAAG,WACHC,EAAG,WACH+B,IAAK,WACL7B,EAAG,OACHG,EAAG,QACH2B,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,SAGR90B,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,oGAA+EK,MACnF,KAEJN,YAAa,iEAAkDM,MAAM,KACrEkD,SAAU,4FAAwDlD,MAC9D,KAEJiD,cAAe,mDAA8BjD,MAAM,KACnDgD,YAAa,4CAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,sBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,kBACTC,SAAU,6BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,gBACNnI,EAAG,uBACHhL,EAAG,YACHqT,GAAI,WACJC,EAAG,YACHC,GAAI,WACJxD,EAAG,aACHyD,GAAI,YACJG,EAAG,YACHC,GAAI,WACJhG,EAAG,aACHiG,GAAI,aAER3N,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAO/a,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,QAEpB,IAAI5G,EAAI4G,EAAS,GAGjB,OAAOA,GAAUo9B,GAAWhkC,IAAMgkC,GAFzBp9B,EAAS,IAAO5G,IAE0BgkC,GADjC,KAAVp9B,EAAgB,IAAM,SAI1CyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0FAA0FK,MAC9F,KAEJN,YAAa,kDAAkDM,MAAM,KACrEkD,SAAU,yDAAyDlD,MAC/D,KAEJiD,cAAe,8BAA8BjD,MAAM,KACnDgD,YAAa,wBAAwBhD,MAAM,KAC3CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVZ,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,eACHqT,GAAI,YACJC,EAAG,aACHC,GAAI,UACJxD,EAAG,aACHyD,GAAI,UACJG,EAAG,cACHC,GAAI,WACJhG,EAAG,aACHiG,GAAI,WAERb,uBAAwB,UACxB9M,QAAS,SAAUjB,GACf,OAAOA,GAEXyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIg0B,GAAe,2DAAiD91B,MAAM,KA4B1E,SAAS+1B,GAAYt9B,EAAQ+f,EAAe5N,EAAQ+S,GAChD,IAAIqY,EAiBR,SAAsBv9B,GAClB,IAAIw9B,EAAUp9B,KAAKiD,MAAOrD,EAAS,IAAQ,KACvCy9B,EAAMr9B,KAAKiD,MAAOrD,EAAS,IAAO,IAClC09B,EAAM19B,EAAS,GACf29B,EAAO,GACG,EAAVH,IACAG,GAAQN,GAAaG,GAAW,SAE1B,EAANC,IACAE,IAAkB,KAATA,EAAc,IAAM,IAAMN,GAAaI,GAAO,OAEjD,EAANC,IACAC,IAAkB,KAATA,EAAc,IAAM,IAAMN,GAAaK,IAEpD,MAAgB,KAATC,EAAc,OAASA,EA/BbC,CAAa59B,GAC9B,OAAQmS,GACJ,IAAK,KACD,OAAOorB,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,OACxB,IAAK,KACD,OAAOA,EAAa,QAqBhC/kC,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,iSAAkMK,MACtM,KAEJN,YAAa,6JAA0HM,MACnI,KAEJqoB,kBAAkB,EAClBnlB,SAAU,2DAA2DlD,MACjE,KAEJiD,cAAe,2DAA2DjD,MACtE,KAEJgD,YAAa,2DAA2DhD,MACpE,KAEJxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,cACTC,QAAS,mBACTC,SAAU,MACVC,QAAS,wBACTC,SAAU,MACVC,SAAU,KAEdQ,aAAc,CACVC,OA/FR,SAAyBtM,GACrB,IAAIsd,EAAOtd,EASX,OARAsd,GAC+B,IAA3Btd,EAAOyE,QAAQ,OACT6Y,EAAKjgB,MAAM,GAAI,GAAK,OACO,IAA3B2C,EAAOyE,QAAQ,OACf6Y,EAAKjgB,MAAM,GAAI,GAAK,OACO,IAA3B2C,EAAOyE,QAAQ,OACf6Y,EAAKjgB,MAAM,GAAI,GAAK,MACpBigB,EAAO,QAuFb/Q,KAnFR,SAAuBvM,GACnB,IAAIsd,EAAOtd,EASX,OARAsd,GAC+B,IAA3Btd,EAAOyE,QAAQ,OACT6Y,EAAKjgB,MAAM,GAAI,GAAK,YACO,IAA3B2C,EAAOyE,QAAQ,OACf6Y,EAAKjgB,MAAM,GAAI,GAAK,OACO,IAA3B2C,EAAOyE,QAAQ,OACf6Y,EAAKjgB,MAAM,GAAI,GAAK,MACpBigB,EAAO,QA2EblZ,EAAG,UACHoI,GAAImvB,GACJviC,EAAG,eACHqT,GAAIkvB,GACJjvB,EAAG,eACHC,GAAIgvB,GACJxyB,EAAG,eACHyD,GAAI+uB,GACJ5uB,EAAG,eACHC,GAAI2uB,GACJ30B,EAAG,eACHiG,GAAI0uB,IAERvvB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAIw0B,GAAa,CACb7S,EAAG,QACHI,EAAG,QACHG,EAAG,QACHuB,GAAI,QACJC,GAAI,QACJ9B,EAAG,OACHK,EAAG,OACH0B,GAAI,OACJC,GAAI,OACJ/B,EAAG,cACHC,EAAG,cACH+B,IAAK,cACL7B,EAAG,YACHG,EAAG,QACH2B,GAAI,QACJC,GAAI,QACJC,GAAI,kBACJC,GAAI,mBAiJR,SAASwQ,GAAsB99B,EAAQ+f,EAAejhB,EAAKomB,GACvD,IAAIzqB,EAAS,CACTsL,EAAG,CAAC,kBAAmB,mBACvBoI,GAAI,CAACnO,EAAS,WAAiBA,EAAS,YACxCjF,EAAG,CAAC,aAAW,iBACfqT,GAAI,CAACpO,EAAS,YAAeA,EAAS,aACtCqO,EAAG,CAAC,aAAW,kBACfC,GAAI,CAACtO,EAAS,YAAeA,EAAS,aACtC8K,EAAG,CAAC,UAAW,eACfyD,GAAI,CAACvO,EAAS,SAAeA,EAAS,UACtC0O,EAAG,CAAC,SAAU,aACdC,GAAI,CAAC3O,EAAS,SAAeA,EAAS,UACtC2I,EAAG,CAAC,QAAS,YACbiG,GAAI,CAAC5O,EAAS,OAAaA,EAAS,SAExC,OAAOklB,GAEDnF,EADAtlB,EAAOqE,GAAK,GAGZrE,EAAOqE,GAAK,GA4NtB,SAASi/B,GAAyB/9B,EAAQ+f,EAAejhB,GACrD,IAToB0uB,EAChBC,EAgBJ,MAAY,MAAR3uB,EACOihB,EAAgB,6CAAY,6CACpB,MAARjhB,EACAihB,EAAgB,uCAAW,uCAE3B/f,EAAS,KAtBAwtB,GAsB6BxtB,EArB7CytB,EAQS,CACTtf,GAAI4R,EAAgB,6HAA2B,6HAC/C3R,GAAI2R,EAAgB,6HAA2B,6HAC/CzR,GAAIyR,EAAgB,2GAAwB,2GAC5CxR,GAAI,uEACJI,GAAI,uHACJC,GAAI,8EAOkC9P,GArBzByI,MAAM,KAChBimB,EAAM,IAAO,GAAKA,EAAM,KAAQ,GACjCC,EAAM,GACM,GAAZD,EAAM,IAAWA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAmB,IAAbA,EAAM,KAC3DC,EAAM,GACNA,EAAM,IAiDhB,SAASuQ,GAAqBxT,GAC1B,OAAO,WACH,OAAOA,EAAM,UAAwB,KAAjBnyB,KAAK6T,QAAiB,SAAM,IAAM,QA9a9D1T,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yGAA6EK,MACjF,KAEJN,YAAa,4DAAkDM,MAAM,KACrEkD,SAAU,0EAAwDlD,MAC9D,KAEJiD,cAAe,iCAA8BjD,MAAM,KACnDgD,YAAa,0BAAuBhD,MAAM,KAC1CzL,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD4a,EAAU,WAAO,WAEjBA,EAAU,QAAO,SAGhCjY,cAAe,gCACfnC,KAAM,SAAU9T,GACZ,MAAiB,UAAVA,GAA4B,UAAVA,GAE7BmJ,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,qBACTC,QAAS,uBACTC,SAAU,2BACVC,QAAS,cACTC,SAAU,4BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,WACRC,KAAM,aACNnI,EAAG,mBACHoI,GAAI,YACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,aACHyD,GAAI,YACJC,EAAG,YACHC,GAAI,WACJC,EAAG,SACHC,GAAI,QACJhG,EAAG,eACHiG,GAAI,eAER3N,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAO/a,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,kBAEpB,IAAI5G,EAAI4G,EAAS,GAGjB,OAAOA,GAAU69B,GAAWzkC,IAAMykC,GAFzB79B,EAAS,IAAO5G,IAE0BykC,GADjC,KAAV79B,EAAgB,IAAM,SAI1CyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAQb7Q,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,kGAAsFK,MAC1F,KAEJN,YAAa,qDAAkDM,MAAM,KACrEkD,SAAU,8EAAsDlD,MAAM,KACtEiD,cAAe,gDAA8BjD,MAAM,KACnDgD,YAAa,mCAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,wBACJC,IAAK,8BACLC,KAAM,0CAEVe,cAAe,aACfnC,KAAM,SAAU9T,GACZ,MAAO,QAAUA,EAAM2J,eAE3BzG,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAY,GAAR5a,EACO4a,EAAU,MAAQ,MAElBA,EAAU,MAAQ,OAGjC5Z,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,iBACVC,QAAS,kBACTC,SAAU,oCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,YACRC,KAAM,OACNnI,EAAG+3B,GACH3vB,GAAI2vB,GACJ/iC,EAAG+iC,GACH1vB,GAAI0vB,GACJzvB,EAAGyvB,GACHxvB,GAAIwvB,GACJhzB,EAAGgzB,GACHvvB,GAAIuvB,GACJpvB,EAAGovB,GACHnvB,GAAImvB,GACJn1B,EAAGm1B,GACHlvB,GAAIkvB,IAER/vB,uBAAwB,YACxB9M,QAAS,MACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KA4Bb7Q,EAAM0X,aAAa,WAAY,CAC3BhJ,OAAQ,qIAAwFK,MAC5F,KAEJN,YAAa,qIAAwFM,MACjG,KAEJkD,SAAU,uDAAkDlD,MAAM,KAClEiD,cAAe,uDAAkDjD,MAAM,KACvEgD,YAAa,uDAAkDhD,MAAM,KACrExF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,eACTC,QAAS,cACTC,SAAU,cACVC,QAAS,gBACTC,SAAU,cACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,iBACRC,KAAM,SACNnI,EAAG,OACHoI,GAAI,UACJpT,EAAG,aACHqT,GAAI,gBACJC,EAAG,YACHC,GAAI,mBACJxD,EAAG,MACHyD,GAAI,WACJG,EAAG,QACHC,GAAI,YACJhG,EAAG,QACHiG,GAAI,aAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb7Q,EAAM0X,aAAa,MAAO,CACtBhJ,OAAQ,saAAkFK,MACtF,KAEJN,YAAa,saAAkFM,MAC3F,KAEJkD,SAAU,+PAAkDlD,MAAM,KAClEiD,cAAe,+PAAkDjD,MAAM,KACvEgD,YAAa,+PAAkDhD,MAAM,KACrExF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVZ,SAAU,CACNC,QAAS,uCACTC,QAAS,uCACTC,SAAU,mBACVC,QAAS,6CACTC,SAAU,mBACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wDACRC,KAAM,wBACNnI,EAAG,2BACHoI,GAAI,8BACJpT,EAAG,iCACHqT,GAAI,oCACJC,EAAG,2BACHC,GAAI,sDACJxD,EAAG,qBACHyD,GAAI,+BACJG,EAAG,4BACHC,GAAI,0CACJhG,EAAG,iCACHiG,GAAI,2CAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,MAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,8bAAsFK,MAC1F,KAEJN,YAAa,8bAAsFM,MAC/F,KAEJkD,SAAU,ySAAyDlD,MAC/D,KAEJiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,gGACJC,IAAK,4GACLC,KAAM,wHAEVe,cAAe,uQACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAGM,4DAAb/Z,GACa,mCAAbA,GACa,wEAAbA,GAGoB,wEAAbA,GAA4C,uBAAbA,GAGvB,IAAR+Z,EAJAA,EAEAA,EAAO,IAKtB/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,0DACAA,EAAK,IACL,iCACAA,EAAK,KACL,sEACAA,EAAK,KACL,qBACAA,EAAK,KACL,sEAEA,sBAGfrG,SAAU,CACNC,QAAS,qEACTC,QAAS,+DACTC,SAAU,wFACVC,QAAS,kDACTC,SAAU,8FACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,oCACRC,KAAM,oCACNnI,EAAG,sEACHoI,GAAI,0CACJpT,EAAG,oDACHqT,GAAI,oCACJC,EAAG,oDACHC,GAAI,oCACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,wCACHC,GAAI,wBACJhG,EAAG,wCACHiG,GAAI,yBAGRb,uBAAwB,yFACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,4BACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,kCACpB,QACI,OAAOA,IAGnBmW,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CAEFL,IAAK,EACLC,IAAK,KAmEb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,CACJzM,OAAQ,gdAAyF8M,MAC7F,KAEJmmB,WAAY,ggBAAiGnmB,MACzG,MAGRN,YAAa,gRAAyDM,MAClE,KAEJkD,SAhDJ,SAA6B1P,EAAGN,GAC5B,IAAIgQ,EAAW,CACPwzB,WAAY,+SAA0D12B,MAClE,KAEJ22B,WAAY,+SAA0D32B,MAClE,KAEJ42B,SAAU,2TAA4D52B,MAClE,MAKZ,OAAU,IAANxM,EACO0P,EAAqB,WACvBzL,MAAM,EAAG,GACTsL,OAAOG,EAAqB,WAAEzL,MAAM,EAAG,IAE3CjE,EASE0P,EALI,yCAAqBxI,KAAKxH,GAC/B,aACA,sHAAsCwH,KAAKxH,GAC3C,WACA,cACoBM,EAAE2Q,OARjBjB,EAAqB,YA6BhCD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,sBACJC,IAAK,6BACLC,KAAM,oCAEVZ,SAAU,CACNC,QAAS6wB,GAAqB,sDAC9B5wB,QAAS4wB,GAAqB,0CAC9B1wB,QAAS0wB,GAAqB,oCAC9B3wB,SAAU2wB,GAAqB,mBAC/BzwB,SAAU,WACN,OAAQlV,KAAKqT,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAOsyB,GAAqB,uDAAoB/kC,KAAKZ,MACzD,KAAK,EACL,KAAK,EACL,KAAK,EACD,OAAO2lC,GAAqB,6DAAqB/kC,KAAKZ,QAGlEmV,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,8BACNnI,EAAG,wFACHoI,GAAI4vB,GACJhjC,EAAGgjC,GACH3vB,GAAI2vB,GACJ1vB,EAAG,uCACHC,GAAIyvB,GACJjzB,EAAG,2BACHyD,GAAIwvB,GACJrvB,EAAG,uCACHC,GAAIovB,GACJp1B,EAAG,qBACHiG,GAAImvB,IAGRlvB,cAAe,kHACfnC,KAAM,SAAU9T,GACZ,MAAO,8DAAiBqJ,KAAKrJ,IAEjCkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,EACA,2BACAA,EAAO,GACP,iCACAA,EAAO,GACP,qBAEA,wCAGf9H,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACD,OAAO/a,EAAS,UACpB,IAAK,IACD,OAAOA,EAAS,gBACpB,QACI,OAAOA,IAGnByJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb,IAAI+0B,GAAW,CACP,iCACA,iCACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,iCACA,uCACA,iCACA,kCAEJC,GAAS,CAAC,iCAAS,qBAAO,2BAAQ,qBAAO,uCAAU,2BAAQ,4BAmvB/D,OAjvBA7lC,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQk3B,GACRn3B,YAAam3B,GACb3zB,SAAU4zB,GACV7zB,cAAe6zB,GACf9zB,YAAa8zB,GACbt8B,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,gCAEVe,cAAe,wCACfnC,KAAM,SAAU9T,GACZ,MAAO,uBAAUA,GAErBkD,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,OAAIjR,EAAO,GACA,qBAEJ,sBAEX3I,SAAU,CACNC,QAAS,6CACTC,QAAS,6CACTC,SAAU,qCACVC,QAAS,kFACTC,SAAU,sEACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,wBACRC,KAAM,wBACNnI,EAAG,oDACHoI,GAAI,oCACJpT,EAAG,wCACHqT,GAAI,wBACJC,EAAG,oDACHC,GAAI,oCACJxD,EAAG,kCACHyD,GAAI,kBACJG,EAAG,wCACHC,GAAI,wBACJhG,EAAG,wCACHiG,GAAI,yBAERuH,SAAU,SAAUhE,GAChB,OAAOA,EAAO1Q,QAAQ,UAAM,MAEhCqe,WAAY,SAAU3N,GAClB,OAAOA,EAAO1Q,QAAQ,KAAM,WAEhCgI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,UAAW,CAC1BhJ,OAAQ,6EAA6EK,MACjF,KAEJN,YAAa,oDAAoDM,MAAM,KACvEkD,SAAU,+DAA+DlD,MACrE,KAEJiD,cAAe,kCAAkCjD,MAAM,KACvDgD,YAAa,yBAAyBhD,MAAM,KAC5CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,uBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,uBACTC,SAAU,oCACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,kBACRC,KAAM,qBACNnI,EAAG,SACHoI,GAAI,YACJpT,EAAG,aACHqT,GAAI,YACJC,EAAG,WACHC,GAAI,UACJxD,EAAG,UACHyD,GAAI,SACJG,EAAG,SACHC,GAAI,QACJhG,EAAG,UACHiG,GAAI,UAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gXAAyEK,MAC7E,KAEJN,YAAa,sOAAkDM,MAAM,KACrEkD,SAAU,6RAAuDlD,MAAM,KACvEiD,cAAe,uIAA8BjD,MAAM,KACnDgD,YAAa,6FAAuBhD,MAAM,KAC1CxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,8EACTC,QAAS,2DACTC,SAAU,6EACVC,QAAS,wEACTC,SAAU,8GACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,6DACRC,KAAM,gFACNnI,EAAG,uCACHoI,GAAI,0CACJpT,EAAG,0DACHqT,GAAI,0CACJC,EAAG,8CACHC,GAAI,8BACJxD,EAAG,wCACHyD,GAAI,wBACJG,EAAG,kCACHC,GAAI,kBACJhG,EAAG,wCACHiG,GAAI,yBAERnF,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,yIAAqGK,MACzG,KAEJN,YAAa,sFAAsFM,MAC/F,KAEJqoB,kBAAkB,EAClBnlB,SAAU,mHAAyDlD,MAC/D,KAEJiD,cAAe,uBAAuBjD,MAAM,KAC5CgD,YAAa,uBAAuBhD,MAAM,KAC1CojB,oBAAoB,EACpB9b,cAAe,SACfnC,KAAM,SAAU9T,GACZ,MAAO,QAAQqJ,KAAKrJ,IAExBkD,SAAU,SAAUoQ,EAAOE,EAAS0a,GAChC,OAAI5a,EAAQ,GACD4a,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhC/kB,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,yBACJC,IAAK,+BACLC,KAAM,qCACNgE,EAAG,YACHye,GAAI,aACJC,IAAK,mBACLC,KAAM,yBAEVvjB,SAAU,CACNC,QAAS,yBACTC,QAAS,0BACTC,SAAU,sCACVC,QAAS,yBACTC,SAAU,6CACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,qBACNnI,EAAG,iBACHoI,GAAI,aACJpT,EAAG,mBACHqT,GAAI,aACJC,EAAG,oBACHC,GAAI,cACJxD,EAAG,mBACHyD,GAAI,aACJC,EAAG,qBACHC,GAAI,eACJC,EAAG,oBACHC,GAAI,cACJhG,EAAG,oBACHiG,GAAI,eAERb,uBAAwB,UACxB9M,QAAS,SAAUjB,GACf,OAAOA,GAEXyJ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,WAAY,CAC3BhJ,OAAQ,sNAA6GK,MACjH,KAEJN,YAAa,iHAA8DM,MACvE,KAEJqoB,kBAAkB,EAClBnlB,SAAU,0JAAyElD,MAC/E,KAEJiD,cAAe,mEAAqCjD,MAAM,KAC1DgD,YAAa,2CAA4BhD,MAAM,KAC/CojB,oBAAoB,EACpB5oB,eAAgB,CACZ2L,GAAI,QACJC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVZ,SAAU,CACNC,QAAS,8BACTC,QAAS,kCACTC,SAAU,kBACVC,QAAS,yCACTC,SAAU,6BACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,eACRC,KAAM,gBACNnI,EAAG,kCACHoI,GAAI,wBACJpT,EAAG,4BACHqT,GAAI,2BACJC,EAAG,wBACHC,GAAI,kBACJxD,EAAG,kBACHyD,GAAI,iBACJG,EAAG,qBACHC,GAAI,oBACJhG,EAAG,sBACHiG,GAAI,sBAERb,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GAT6B,MAAxBA,EAAS,IAAO,IACd,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,OAGlBoQ,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,KAAM,CACrBhJ,OAAQ,gPAA0FK,MAC9F,KAEJN,YAAa,oKAAgEM,MAAM,KACnFkD,SAAU,gKAAuDlD,MAAM,KACvEiD,cAAe,kGAAsCjD,MAAM,KAC3DgD,YAAa,8DAA2BhD,MAAM,KAC9CxF,eAAgB,CACZ2L,GAAI,SACJD,IAAK,YACLE,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVZ,SAAU,CACNC,QAAS,0BACTC,QAAS,yBACTC,SAAU,uDACVC,QAAS,oBACTC,SAAU,2DACVC,SAAU,KAEdQ,aAAc,CACVC,OAAQ,cACRC,KAAM,qBACNnI,EAAG,wCACHoI,GAAI,gBACJpT,EAAG,6BACHqT,GAAI,4BACJC,EAAG,mBACHC,GAAI,kBACJxD,EAAG,0BACHyD,GAAI,yBACJG,EAAG,gBACHC,GAAI,eACJhG,EAAG,sBACHiG,GAAI,sBAERb,uBAAwB,+BACxB9M,QAAS,yBACTwI,KAAM,CACFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0KAAwCK,MAC5C,KAEJN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,2CACLC,KAAM,+CACNgE,EAAG,WACHye,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV5hB,cAAe,gFACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,iBAAb/Z,GAAkC,iBAAbA,GAAkC,iBAAbA,GAEtB,iBAAbA,GAAkC,iBAAbA,GAIb,IAAR+Z,EALAA,EAEAA,EAAO,IAMtB/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGfrG,SAAU,CACNC,QAAS,mBACTC,QAAS,mBACTC,SAAU,SAAU6G,GAChB,OAAIA,EAAIzK,SAAWpR,KAAKoR,OACb,gBAEA,iBAGf6D,QAAS,mBACTC,SAAU,SAAU2G,GAChB,OAAI7b,KAAKoR,SAAWyK,EAAIzK,OACb,gBAEA,iBAGf+D,SAAU,KAEdO,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,iBACHqT,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJxD,EAAG,WACHyD,GAAI,YACJC,EAAG,WACHC,GAAI,YACJC,EAAG,iBACHC,GAAI,kBACJhG,EAAG,WACHiG,GAAI,aAERnF,KAAM,CAEFL,IAAK,EACLC,IAAK,KAMb7Q,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0KAAwCK,MAC5C,KAEJN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNgE,EAAG,WACHye,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV5hB,cAAe,gFACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,iBAAb/Z,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnC+Z,EACa,iBAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,iBAAb/Z,GAAkC,iBAAbA,EACrB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACO,OAAPA,EACA,eACAA,EAAK,KACL,eAEA,gBAGfrG,SAAU,CACNC,QAAS,mBACTC,QAAS,mBACTC,SAAU,iBACVC,QAAS,mBACTC,SAAU,iBACVC,SAAU,KAEdO,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,iBACHqT,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJxD,EAAG,WACHyD,GAAI,YACJG,EAAG,iBACHC,GAAI,kBACJhG,EAAG,WACHiG,GAAI,eAMZpW,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0KAAwCK,MAC5C,KAEJN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNgE,EAAG,WACHye,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV5hB,cAAe,gFACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,iBAAb/Z,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnC+Z,EACa,iBAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,iBAAb/Z,GAAkC,iBAAbA,EACrB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGfrG,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,kBACVC,QAAS,oBACTC,SAAU,kBACVC,SAAU,KAEdO,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,iBACHqT,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJxD,EAAG,WACHyD,GAAI,YACJG,EAAG,iBACHC,GAAI,kBACJhG,EAAG,WACHiG,GAAI,eAMZpW,EAAM0X,aAAa,QAAS,CACxBhJ,OAAQ,0KAAwCK,MAC5C,KAEJN,YAAa,qGAAyCM,MAClD,KAEJkD,SAAU,uIAA8BlD,MAAM,KAC9CiD,cAAe,6FAAuBjD,MAAM,KAC5CgD,YAAa,mDAAgBhD,MAAM,KACnCxF,eAAgB,CACZ2L,GAAI,QACJD,IAAK,WACLE,EAAG,aACHC,GAAI,2BACJC,IAAK,iCACLC,KAAM,qCACNgE,EAAG,WACHye,GAAI,2BACJC,IAAK,iCACLC,KAAM,sCAEV5hB,cAAe,gFACfkH,aAAc,SAAUF,EAAM/Z,GAI1B,OAHa,KAAT+Z,IACAA,EAAO,GAEM,iBAAb/Z,GAAkC,iBAAbA,GAAkC,iBAAbA,EACnC+Z,EACa,iBAAb/Z,EACQ,IAAR+Z,EAAaA,EAAOA,EAAO,GACd,iBAAb/Z,GAAkC,iBAAbA,EACrB+Z,EAAO,QADX,GAIX/Z,SAAU,SAAU+Z,EAAMkB,EAAQ+P,GAC9B,IAAIvT,EAAY,IAAPsC,EAAakB,EACtB,OAAIxD,EAAK,IACE,eACAA,EAAK,IACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eACAA,EAAK,KACL,eAEA,gBAGfrG,SAAU,CACNC,QAAS,oBACTC,QAAS,oBACTC,SAAU,kBACVC,QAAS,oBACTC,SAAU,kBACVC,SAAU,KAEdO,uBAAwB,gCACxB9M,QAAS,SAAUjB,EAAQ+a,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO/a,EAAS,SACpB,IAAK,IACD,OAAOA,EAAS,SACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,SACpB,QACI,OAAOA,IAGnBgO,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNnI,EAAG,eACHoI,GAAI,YACJpT,EAAG,iBACHqT,GAAI,kBACJC,EAAG,iBACHC,GAAI,kBACJxD,EAAG,WACHyD,GAAI,YACJG,EAAG,iBACHC,GAAI,kBACJhG,EAAG,WACHiG,GAAI,eAIZpW,EAAMkC,OAAO,MAENlC"}!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function f(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(m(e,t))return;return 1}function r(e){return void 0===e}function h(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function a(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){for(var n=[],s=0;s<e.length;++s)n.push(t(e[s],s));return n}function c(e,t){for(var n in t)m(t,n)&&(e[n]=t[n]);return m(t,"toString")&&(e.toString=t.toString),m(t,"valueOf")&&(e.valueOf=t.valueOf),e}function _(e,t,n,s){return xt(e,t,n,s,!0).utc()}function y(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function g(e){if(null==e._isValid){var t=y(e),n=i.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function w(e){var t=_(NaN);return null!=e?c(y(t),e):y(t).userInvalidated=!0,t}i=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};var p=f.momentProperties=[],t=!1;function v(e,t){var n,s,i;if(r(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),r(t._i)||(e._i=t._i),r(t._f)||(e._f=t._f),r(t._l)||(e._l=t._l),r(t._strict)||(e._strict=t._strict),r(t._tzm)||(e._tzm=t._tzm),r(t._isUTC)||(e._isUTC=t._isUTC),r(t._offset)||(e._offset=t._offset),r(t._pf)||(e._pf=y(t)),r(t._locale)||(e._locale=t._locale),0<p.length)for(n=0;n<p.length;n++)r(i=t[s=p[n]])||(e[s]=i);return e}function k(e){v(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,f.updateOffset(this),t=!1)}function M(e){return e instanceof k||null!=e&&null!=e._isAMomentObject}function D(e){!1===f.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function n(i,r){var a=!0;return c(function(){if(null!=f.deprecationHandler&&f.deprecationHandler(null,i),a){for(var e,t,n=[],s=0;s<arguments.length;s++){if(e="","object"==typeof arguments[s]){for(t in e+="\n["+s+"] ",arguments[0])m(arguments[0],t)&&(e+=t+": "+arguments[0][t]+", ");e=e.slice(0,-2)}else e=arguments[s];n.push(e)}D(i+"\nArguments: "+Array.prototype.slice.call(n).join("")+"\n"+(new Error).stack),a=!1}return r.apply(this,arguments)},r)}var s,S={};function Y(e,t){null!=f.deprecationHandler&&f.deprecationHandler(e,t),S[e]||(D(t),S[e]=!0)}function O(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function b(e,t){var n,s=c({},e);for(n in t)m(t,n)&&(u(e[n])&&u(t[n])?(s[n]={},c(s[n],e[n]),c(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)m(e,n)&&!m(t,n)&&u(e[n])&&(s[n]=c({},s[n]));return s}function x(e){null!=e&&this.set(e)}f.suppressDeprecationWarnings=!1,f.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)m(e,t)&&n.push(t);return n};function T(e,t,n){var s=""+Math.abs(e),i=t-s.length;return(0<=e?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}var N=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,P=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,R={},W={};function C(e,t,n,s){var i="string"==typeof s?function(){return this[s]()}:s;e&&(W[e]=i),t&&(W[t[0]]=function(){return T(i.apply(this,arguments),t[1],t[2])}),n&&(W[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function U(e,t){return e.isValid()?(t=H(t,e.localeData()),R[t]=R[t]||function(s){for(var e,i=s.match(N),t=0,r=i.length;t<r;t++)W[i[t]]?i[t]=W[i[t]]:i[t]=(e=i[t]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var t="",n=0;n<r;n++)t+=O(i[n])?i[n].call(e,s):i[n];return t}}(t),R[t](e)):e.localeData().invalidDate()}function H(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(P.lastIndex=0;0<=n&&P.test(e);)e=e.replace(P,s),P.lastIndex=0,--n;return e}var F={};function L(e,t){var n=e.toLowerCase();F[n]=F[n+"s"]=F[t]=e}function V(e){return"string"==typeof e?F[e]||F[e.toLowerCase()]:void 0}function G(e){var t,n,s={};for(n in e)m(e,n)&&(t=V(n))&&(s[t]=e[n]);return s}var E={};function A(e,t){E[e]=t}function j(e){return e%4==0&&e%100!=0||e%400==0}function I(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function Z(e){var t=+e,n=0;return 0!=t&&isFinite(t)&&(n=I(t)),n}function z(t,n){return function(e){return null!=e?(q(this,t,e),f.updateOffset(this,n),this):$(this,t)}}function $(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function q(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&j(e.year())&&1===e.month()&&29===e.date()?(n=Z(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),xe(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}var B,J=/\d/,Q=/\d\d/,X=/\d{3}/,K=/\d{4}/,ee=/[+-]?\d{6}/,te=/\d\d?/,ne=/\d\d\d\d?/,se=/\d\d\d\d\d\d?/,ie=/\d{1,3}/,re=/\d{1,4}/,ae=/[+-]?\d{1,6}/,oe=/\d+/,ue=/[+-]?\d+/,le=/Z|[+-]\d\d:?\d\d/gi,he=/Z|[+-]\d\d(?::?\d\d)?/gi,de=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function ce(e,n,s){B[e]=O(n)?n:function(e,t){return e&&s?s:n}}function fe(e,t){return m(B,e)?B[e](t._strict,t._locale):new RegExp(me(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function me(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}B={};var _e={};function ye(e,n){var t,s=n;for("string"==typeof e&&(e=[e]),h(n)&&(s=function(e,t){t[n]=Z(e)}),t=0;t<e.length;t++)_e[e[t]]=s}function ge(e,i){ye(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}var we,pe=0,ve=1,ke=2,Me=3,De=4,Se=5,Ye=6,Oe=7,be=8;function xe(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,s=(t%(n=12)+n)%n;return e+=(t-s)/12,1==s?j(e)?29:28:31-s%7%2}we=Array.prototype.indexOf?Array.prototype.indexOf:function(e){for(var t=0;t<this.length;++t)if(this[t]===e)return t;return-1},C("M",["MM",2],"Mo",function(){return this.month()+1}),C("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),C("MMMM",0,0,function(e){return this.localeData().months(this,e)}),L("month","M"),A("month",8),ce("M",te),ce("MM",te,Q),ce("MMM",function(e,t){return t.monthsShortRegex(e)}),ce("MMMM",function(e,t){return t.monthsRegex(e)}),ye(["M","MM"],function(e,t){t[ve]=Z(e)-1}),ye(["MMM","MMMM"],function(e,t,n,s){var i=n._locale.monthsParse(e,s,n._strict);null!=i?t[ve]=i:y(n).invalidMonth=e});var Te="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ne="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Pe=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Re=de,We=de;function Ce(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=Z(t);else if(!h(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),xe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function Ue(e){return null!=e?(Ce(this,e),f.updateOffset(this,!0),this):$(this,"Month")}function He(){function e(e,t){return t.length-e.length}for(var t,n=[],s=[],i=[],r=0;r<12;r++)t=_([2e3,r]),n.push(this.monthsShort(t,"")),s.push(this.months(t,"")),i.push(this.months(t,"")),i.push(this.monthsShort(t,""));for(n.sort(e),s.sort(e),i.sort(e),r=0;r<12;r++)n[r]=me(n[r]),s[r]=me(s[r]);for(r=0;r<24;r++)i[r]=me(i[r]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+n.join("|")+")","i")}function Fe(e){return j(e)?366:365}C("Y",0,0,function(){var e=this.year();return e<=9999?T(e,4):"+"+e}),C(0,["YY",2],0,function(){return this.year()%100}),C(0,["YYYY",4],0,"year"),C(0,["YYYYY",5],0,"year"),C(0,["YYYYYY",6,!0],0,"year"),L("year","y"),A("year",1),ce("Y",ue),ce("YY",te,Q),ce("YYYY",re,K),ce("YYYYY",ae,ee),ce("YYYYYY",ae,ee),ye(["YYYYY","YYYYYY"],pe),ye("YYYY",function(e,t){t[pe]=2===e.length?f.parseTwoDigitYear(e):Z(e)}),ye("YY",function(e,t){t[pe]=f.parseTwoDigitYear(e)}),ye("Y",function(e,t){t[pe]=parseInt(e,10)}),f.parseTwoDigitYear=function(e){return Z(e)+(68<Z(e)?1900:2e3)};var Le=z("FullYear",!0);function Ve(e){var t,n;return e<100&&0<=e?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Ge(e,t,n){var s=7+t-n;return s-(7+Ve(e,0,s).getUTCDay()-t)%7-1}function Ee(e,t,n,s,i){var r,a=1+7*(t-1)+(7+n-s)%7+Ge(e,s,i),o=a<=0?Fe(r=e-1)+a:a>Fe(e)?(r=e+1,a-Fe(e)):(r=e,a);return{year:r,dayOfYear:o}}function Ae(e,t,n){var s,i,r=Ge(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+je(i=e.year()-1,t,n):a>je(e.year(),t,n)?(s=a-je(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function je(e,t,n){var s=Ge(e,t,n),i=Ge(e+1,t,n);return(Fe(e)-s+i)/7}C("w",["ww",2],"wo","week"),C("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),A("week",5),A("isoWeek",5),ce("w",te),ce("ww",te,Q),ce("W",te),ce("WW",te,Q),ge(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=Z(e)});function Ie(e,t){return e.slice(t,7).concat(e.slice(0,t))}C("d",0,"do","day"),C("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),C("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),C("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),C("e",0,0,"weekday"),C("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),A("day",11),A("weekday",11),A("isoWeekday",11),ce("d",te),ce("e",te),ce("E",te),ce("dd",function(e,t){return t.weekdaysMinRegex(e)}),ce("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ce("dddd",function(e,t){return t.weekdaysRegex(e)}),ge(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:y(n).invalidWeekday=e}),ge(["d","e","E"],function(e,t,n,s){t[s]=Z(e)});var Ze="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),$e="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),qe=de,Be=de,Je=de;function Qe(){function e(e,t){return t.length-e.length}for(var t,n,s,i,r=[],a=[],o=[],u=[],l=0;l<7;l++)t=_([2e3,1]).day(l),n=me(this.weekdaysMin(t,"")),s=me(this.weekdaysShort(t,"")),i=me(this.weekdays(t,"")),r.push(n),a.push(s),o.push(i),u.push(n),u.push(s),u.push(i);r.sort(e),a.sort(e),o.sort(e),u.sort(e),this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Xe(){return this.hours()%12||12}function Ke(e,t){C(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function et(e,t){return t._meridiemParse}C("H",["HH",2],0,"hour"),C("h",["hh",2],0,Xe),C("k",["kk",2],0,function(){return this.hours()||24}),C("hmm",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)}),C("hmmss",0,0,function(){return""+Xe.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),C("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),C("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ke("a",!0),Ke("A",!1),L("hour","h"),A("hour",13),ce("a",et),ce("A",et),ce("H",te),ce("h",te),ce("k",te),ce("HH",te,Q),ce("hh",te,Q),ce("kk",te,Q),ce("hmm",ne),ce("hmmss",se),ce("Hmm",ne),ce("Hmmss",se),ye(["H","HH"],Me),ye(["k","kk"],function(e,t,n){var s=Z(e);t[Me]=24===s?0:s}),ye(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ye(["h","hh"],function(e,t,n){t[Me]=Z(e),y(n).bigHour=!0}),ye("hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s)),y(n).bigHour=!0}),ye("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i)),y(n).bigHour=!0}),ye("Hmm",function(e,t,n){var s=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s))}),ye("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Me]=Z(e.substr(0,s)),t[De]=Z(e.substr(s,2)),t[Se]=Z(e.substr(i))});var tt=z("Hours",!0);var nt,st={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Te,monthsShort:Ne,week:{dow:0,doy:6},weekdays:Ze,weekdaysMin:$e,weekdaysShort:ze,meridiemParse:/[ap]\.?m?\.?/i},it={},rt={};function at(e){return e?e.toLowerCase().replace("_","-"):e}function ot(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=at(e[r]).split("-")).length,n=(n=at(e[r+1]))?n.split("-"):null;0<t;){if(s=ut(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s<n;s+=1)if(e[s]!==t[s])return s;return n}(i,n)>=t-1)break;t--}r++}return nt}function ut(t){var e;if(void 0===it[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=nt._abbr,require("./locale/"+t),lt(e)}catch(e){it[t]=null}return it[t]}function lt(e,t){var n;return e&&((n=r(t)?dt(e):ht(e,t))?nt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),nt._abbr}function ht(e,t){if(null===t)return delete it[e],null;var n,s=st;if(t.abbr=e,null!=it[e])Y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=it[e]._config;else if(null!=t.parentLocale)if(null!=it[t.parentLocale])s=it[t.parentLocale]._config;else{if(null==(n=ut(t.parentLocale)))return rt[t.parentLocale]||(rt[t.parentLocale]=[]),rt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return it[e]=new x(b(s,t)),rt[e]&&rt[e].forEach(function(e){ht(e.name,e.config)}),lt(e),it[e]}function dt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return nt;if(!o(e)){if(t=ut(e))return t;e=[e]}return ot(e)}function ct(e){var t,n=e._a;return n&&-2===y(e).overflow&&(t=n[ve]<0||11<n[ve]?ve:n[ke]<1||n[ke]>xe(n[pe],n[ve])?ke:n[Me]<0||24<n[Me]||24===n[Me]&&(0!==n[De]||0!==n[Se]||0!==n[Ye])?Me:n[De]<0||59<n[De]?De:n[Se]<0||59<n[Se]?Se:n[Ye]<0||999<n[Ye]?Ye:-1,y(e)._overflowDayOfYear&&(t<pe||ke<t)&&(t=ke),y(e)._overflowWeeks&&-1===t&&(t=Oe),y(e)._overflowWeekday&&-1===t&&(t=be),y(e).overflow=t),e}var ft=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_t=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],gt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],wt=/^\/?Date\((-?\d+)/i,pt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,vt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function kt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(y(e).iso=!0,t=0,n=yt.length;t<n;t++)if(yt[t][1].exec(u[1])){i=yt[t][0],s=!1!==yt[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=gt.length;t<n;t++)if(gt[t][1].exec(u[3])){r=(u[2]||" ")+gt[t][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(u[4]){if(!_t.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(r||"")+(a||""),Ot(e)}else e._isValid=!1}function Mt(e,t,n,s,i,r){var a=[function(e){var t=parseInt(e,10);{if(t<=49)return 2e3+t;if(t<=999)return 1900+t}return t}(e),Ne.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&a.push(parseInt(r,10)),a}function Dt(e){var t,n,s,i,r=pt.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(r){if(t=Mt(r[4],r[3],r[2],r[5],r[6],r[7]),n=r[1],s=t,i=e,n&&ze.indexOf(n)!==new Date(s[0],s[1],s[2]).getDay()&&(y(i).weekdayMismatch=!0,!void(i._isValid=!1)))return;e._a=t,e._tzm=function(e,t,n){if(e)return vt[e];if(t)return 0;var s=parseInt(n,10),i=s%100;return 60*((s-i)/100)+i}(r[8],r[9],r[10]),e._d=Ve.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),y(e).rfc2822=!0}else e._isValid=!1}function St(e,t,n){return null!=e?e:null!=t?t:n}function Yt(e){var t,n,s,i,r,a,o,u=[];if(!e._d){for(a=e,o=new Date(f.now()),s=a._useUTC?[o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()]:[o.getFullYear(),o.getMonth(),o.getDate()],e._w&&null==e._a[ke]&&null==e._a[ve]&&function(e){var t,n,s,i,r,a,o,u,l;null!=(t=e._w).GG||null!=t.W||null!=t.E?(r=1,a=4,n=St(t.GG,e._a[pe],Ae(Tt(),1,4).year),s=St(t.W,1),((i=St(t.E,1))<1||7<i)&&(u=!0)):(r=e._locale._week.dow,a=e._locale._week.doy,l=Ae(Tt(),r,a),n=St(t.gg,e._a[pe],l.year),s=St(t.w,l.week),null!=t.d?((i=t.d)<0||6<i)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||6<t.e)&&(u=!0)):i=r);s<1||s>je(n,r,a)?y(e)._overflowWeeks=!0:null!=u?y(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[pe]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=St(e._a[pe],s[pe]),(e._dayOfYear>Fe(r)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),n=Ve(r,0,e._dayOfYear),e._a[ve]=n.getUTCMonth(),e._a[ke]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=u[t]=s[t];for(;t<7;t++)e._a[t]=u[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Me]&&0===e._a[De]&&0===e._a[Se]&&0===e._a[Ye]&&(e._nextDay=!0,e._a[Me]=0),e._d=(e._useUTC?Ve:function(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}).apply(null,u),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Me]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(y(e).weekdayMismatch=!0)}}function Ot(e){if(e._f!==f.ISO_8601)if(e._f!==f.RFC_2822){e._a=[],y(e).empty=!0;for(var t,n,s,i,r,a,o,u=""+e._i,l=u.length,h=0,d=H(e._f,e._locale).match(N)||[],c=0;c<d.length;c++)n=d[c],(t=(u.match(fe(n,e))||[])[0])&&(0<(s=u.substr(0,u.indexOf(t))).length&&y(e).unusedInput.push(s),u=u.slice(u.indexOf(t)+t.length),h+=t.length),W[n]?(t?y(e).empty=!1:y(e).unusedTokens.push(n),r=n,o=e,null!=(a=t)&&m(_e,r)&&_e[r](a,o._a,o,r)):e._strict&&!t&&y(e).unusedTokens.push(n);y(e).charsLeftOver=l-h,0<u.length&&y(e).unusedInput.push(u),e._a[Me]<=12&&!0===y(e).bigHour&&0<e._a[Me]&&(y(e).bigHour=void 0),y(e).parsedDateParts=e._a.slice(0),y(e).meridiem=e._meridiem,e._a[Me]=function(e,t,n){var s;if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):(null!=e.isPM&&((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0)),t)}(e._locale,e._a[Me],e._meridiem),null!==(i=y(e).era)&&(e._a[pe]=e._locale.erasConvertYear(i,e._a[pe])),Yt(e),ct(e)}else Dt(e);else kt(e)}function bt(e){var t,n,s=e._i,i=e._f;return e._locale=e._locale||dt(e._l),null===s||void 0===i&&""===s?w({nullInput:!0}):("string"==typeof s&&(e._i=s=e._locale.preparse(s)),M(s)?new k(ct(s)):(a(s)?e._d=s:o(i)?function(e){var t,n,s,i,r,a,o=!1;if(0===e._f.length)return y(e).invalidFormat=!0,e._d=new Date(NaN);for(i=0;i<e._f.length;i++)r=0,a=!1,t=v({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],Ot(t),g(t)&&(a=!0),r+=y(t).charsLeftOver,r+=10*y(t).unusedTokens.length,y(t).score=r,o?r<s&&(s=r,n=t):(null==s||r<s||a)&&(s=r,n=t,a&&(o=!0));c(e,n||t)}(e):i?Ot(e):r(n=(t=e)._i)?t._d=new Date(f.now()):a(n)?t._d=new Date(n.valueOf()):"string"==typeof n?function(e){var t=wt.exec(e._i);null===t?(kt(e),!1===e._isValid&&(delete e._isValid,Dt(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:f.createFromInputFallback(e)))):e._d=new Date(+t[1])}(t):o(n)?(t._a=d(n.slice(0),function(e){return parseInt(e,10)}),Yt(t)):u(n)?function(e){var t,n;e._d||(n=void 0===(t=G(e._i)).day?t.date:t.day,e._a=d([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),Yt(e))}(t):h(n)?t._d=new Date(n):f.createFromInputFallback(t),g(e)||(e._d=null),e))}function xt(e,t,n,s,i){var r,a={};return!0!==t&&!1!==t||(s=t,t=void 0),!0!==n&&!1!==n||(s=n,n=void 0),(u(e)&&l(e)||o(e)&&0===e.length)&&(e=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=i,a._l=n,a._i=e,a._f=t,a._strict=s,(r=new k(ct(bt(a))))._nextDay&&(r.add(1,"d"),r._nextDay=void 0),r}function Tt(e,t,n,s){return xt(e,t,n,s,!1)}f.createFromInputFallback=n("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),f.ISO_8601=function(){},f.RFC_2822=function(){};var Nt=n("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:w()}),Pt=n("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:w()});function Rt(e,t){var n,s;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Tt();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Wt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ct(e){var t=G(e),n=t.year||0,s=t.quarter||0,i=t.month||0,r=t.week||t.isoWeek||0,a=t.day||0,o=t.hour||0,u=t.minute||0,l=t.second||0,h=t.millisecond||0;this._isValid=function(e){var t,n,s=!1;for(t in e)if(m(e,t)&&(-1===we.call(Wt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<Wt.length;++n)if(e[Wt[n]]){if(s)return!1;parseFloat(e[Wt[n]])!==Z(e[Wt[n]])&&(s=!0)}return!0}(t),this._milliseconds=+h+1e3*l+6e4*u+1e3*o*60*60,this._days=+a+7*r,this._months=+i+3*s+12*n,this._data={},this._locale=dt(),this._bubble()}function Ut(e){return e instanceof Ct}function Ht(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){C(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+T(~~(e/60),2)+n+T(~~e%60,2)})}Ft("Z",":"),Ft("ZZ",""),ce("Z",he),ce("ZZ",he),ye(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Vt(he,e)});var Lt=/([\+\-]|\d\d)/gi;function Vt(e,t){var n,s,i=(t||"").match(e);return null===i?null:0===(s=60*(n=((i[i.length-1]||[])+"").match(Lt)||["-",0,0])[1]+Z(n[2]))?0:"+"===n[0]?s:-s}function Gt(e,t){var n,s;return t._isUTC?(n=t.clone(),s=(M(e)||a(e)?e.valueOf():Tt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+s),f.updateOffset(n,!1),n):Tt(e).local()}function Et(e){return-Math.round(e._d.getTimezoneOffset())}function At(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}f.updateOffset=function(){};var jt=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,It=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Zt(e,t){var n,s,i,r=e,a=null;return Ut(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:h(e)||!isNaN(+e)?(r={},t?r[t]=+e:r.milliseconds=+e):(a=jt.exec(e))?(n="-"===a[1]?-1:1,r={y:0,d:Z(a[ke])*n,h:Z(a[Me])*n,m:Z(a[De])*n,s:Z(a[Se])*n,ms:Z(Ht(1e3*a[Ye]))*n}):(a=It.exec(e))?(n="-"===a[1]?-1:1,r={y:zt(a[2],n),M:zt(a[3],n),w:zt(a[4],n),d:zt(a[5],n),h:zt(a[6],n),m:zt(a[7],n),s:zt(a[8],n)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(i=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Gt(t,e),e.isBefore(t)?n=$t(e,t):((n=$t(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(Tt(r.from),Tt(r.to)),(r={}).ms=i.milliseconds,r.M=i.months),s=new Ct(r),Ut(e)&&m(e,"_locale")&&(s._locale=e._locale),Ut(e)&&m(e,"_isValid")&&(s._isValid=e._isValid),s}function zt(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function $t(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=t-e.clone().add(n.months,"M"),n}function qt(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(Y(i,"moment()."+i+"(period, number) is deprecated. Please use moment()."+i+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=e,e=t,t=n),Bt(this,Zt(e,t),s),this}}function Bt(e,t,n,s){var i=t._milliseconds,r=Ht(t._days),a=Ht(t._months);e.isValid()&&(s=null==s||s,a&&Ce(e,$(e,"Month")+a*n),r&&q(e,"Date",$(e,"Date")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s&&f.updateOffset(e,r||a))}Zt.fn=Ct.prototype,Zt.invalid=function(){return Zt(NaN)};var Jt=qt(1,"add"),Qt=qt(-1,"subtract");function Xt(e){return"string"==typeof e||e instanceof String}function Kt(e){return M(e)||a(e)||Xt(e)||h(e)||function(t){var e=o(t),n=!1;e&&(n=0===t.filter(function(e){return!h(e)&&Xt(t)}).length);return e&&n}(e)||function(e){var t,n,s=u(e)&&!l(e),i=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(t=0;t<r.length;t+=1)n=r[t],i=i||m(e,n);return s&&i}(e)||null==e}function en(e,t){if(e.date()<t.date())return-en(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),s=e.clone().add(n,"months"),i=t-s<0?(t-s)/(s-e.clone().add(n-1,"months")):(t-s)/(e.clone().add(1+n,"months")-s);return-(n+i)||0}function tn(e){var t;return void 0===e?this._locale._abbr:(null!=(t=dt(e))&&(this._locale=t),this)}f.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",f.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var nn=n("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function sn(){return this._locale}var rn=126227808e5;function an(e,t){return(e%t+t)%t}function on(e,t,n){return e<100&&0<=e?new Date(e+400,t,n)-rn:new Date(e,t,n).valueOf()}function un(e,t,n){return e<100&&0<=e?Date.UTC(e+400,t,n)-rn:Date.UTC(e,t,n)}function ln(e,t){return t.erasAbbrRegex(e)}function hn(){for(var e=[],t=[],n=[],s=[],i=this.eras(),r=0,a=i.length;r<a;++r)t.push(me(i[r].name)),e.push(me(i[r].abbr)),n.push(me(i[r].narrow)),s.push(me(i[r].name)),s.push(me(i[r].abbr)),s.push(me(i[r].narrow));this._erasRegex=new RegExp("^("+s.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+t.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+e.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+n.join("|")+")","i")}function dn(e,t){C(0,[e,e.length],0,t)}function cn(e,t,n,s,i){var r;return null==e?Ae(this,s,i).year:((r=je(e,s,i))<t&&(t=r),function(e,t,n,s,i){var r=Ee(e,t,n,s,i),a=Ve(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,s,i))}C("N",0,0,"eraAbbr"),C("NN",0,0,"eraAbbr"),C("NNN",0,0,"eraAbbr"),C("NNNN",0,0,"eraName"),C("NNNNN",0,0,"eraNarrow"),C("y",["y",1],"yo","eraYear"),C("y",["yy",2],0,"eraYear"),C("y",["yyy",3],0,"eraYear"),C("y",["yyyy",4],0,"eraYear"),ce("N",ln),ce("NN",ln),ce("NNN",ln),ce("NNNN",function(e,t){return t.erasNameRegex(e)}),ce("NNNNN",function(e,t){return t.erasNarrowRegex(e)}),ye(["N","NN","NNN","NNNN","NNNNN"],function(e,t,n,s){var i=n._locale.erasParse(e,s,n._strict);i?y(n).era=i:y(n).invalidEra=e}),ce("y",oe),ce("yy",oe),ce("yyy",oe),ce("yyyy",oe),ce("yo",function(e,t){return t._eraYearOrdinalRegex||oe}),ye(["y","yy","yyy","yyyy"],pe),ye(["yo"],function(e,t,n,s){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[pe]=n._locale.eraYearOrdinalParse(e,i):t[pe]=parseInt(e,10)}),C(0,["gg",2],0,function(){return this.weekYear()%100}),C(0,["GG",2],0,function(){return this.isoWeekYear()%100}),dn("gggg","weekYear"),dn("ggggg","weekYear"),dn("GGGG","isoWeekYear"),dn("GGGGG","isoWeekYear"),L("weekYear","gg"),L("isoWeekYear","GG"),A("weekYear",1),A("isoWeekYear",1),ce("G",ue),ce("g",ue),ce("GG",te,Q),ce("gg",te,Q),ce("GGGG",re,K),ce("gggg",re,K),ce("GGGGG",ae,ee),ce("ggggg",ae,ee),ge(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=Z(e)}),ge(["gg","GG"],function(e,t,n,s){t[s]=f.parseTwoDigitYear(e)}),C("Q",0,"Qo","quarter"),L("quarter","Q"),A("quarter",7),ce("Q",J),ye("Q",function(e,t){t[ve]=3*(Z(e)-1)}),C("D",["DD",2],"Do","date"),L("date","D"),A("date",9),ce("D",te),ce("DD",te,Q),ce("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),ye(["D","DD"],ke),ye("Do",function(e,t){t[ke]=Z(e.match(te)[0])});var fn=z("Date",!0);C("DDD",["DDDD",3],"DDDo","dayOfYear"),L("dayOfYear","DDD"),A("dayOfYear",4),ce("DDD",ie),ce("DDDD",X),ye(["DDD","DDDD"],function(e,t,n){n._dayOfYear=Z(e)}),C("m",["mm",2],0,"minute"),L("minute","m"),A("minute",14),ce("m",te),ce("mm",te,Q),ye(["m","mm"],De);var mn=z("Minutes",!1);C("s",["ss",2],0,"second"),L("second","s"),A("second",15),ce("s",te),ce("ss",te,Q),ye(["s","ss"],Se);var _n,yn,gn=z("Seconds",!1);for(C("S",0,0,function(){return~~(this.millisecond()/100)}),C(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),C(0,["SSS",3],0,"millisecond"),C(0,["SSSS",4],0,function(){return 10*this.millisecond()}),C(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),C(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),C(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),C(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),C(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),L("millisecond","ms"),A("millisecond",16),ce("S",ie,J),ce("SS",ie,Q),ce("SSS",ie,X),_n="SSSS";_n.length<=9;_n+="S")ce(_n,oe);function wn(e,t){t[Ye]=Z(1e3*("0."+e))}for(_n="S";_n.length<=9;_n+="S")ye(_n,wn);yn=z("Milliseconds",!1),C("z",0,0,"zoneAbbr"),C("zz",0,0,"zoneName");var pn=k.prototype;function vn(e){return e}pn.add=Jt,pn.calendar=function(e,t){1===arguments.length&&(arguments[0]?Kt(arguments[0])?(e=arguments[0],t=void 0):function(e){for(var t=u(e)&&!l(e),n=!1,s=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],i=0;i<s.length;i+=1)n=n||m(e,s[i]);return t&&n}(arguments[0])&&(t=arguments[0],e=void 0):t=e=void 0);var n=e||Tt(),s=Gt(n,this).startOf("day"),i=f.calendarFormat(this,s)||"sameElse",r=t&&(O(t[i])?t[i].call(this,n):t[i]);return this.format(r||this.localeData().calendar(i,this,Tt(n)))},pn.clone=function(){return new k(this)},pn.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Gt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=V(t)){case"year":r=en(this,s)/12;break;case"month":r=en(this,s);break;case"quarter":r=en(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:I(r)},pn.endOf=function(e){var t,n;if(void 0===(e=V(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?un:on,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-an(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-an(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-an(t,1e3)-1;break}return this._d.setTime(t),f.updateOffset(this,!0),this},pn.format=function(e){e=e||(this.isUtc()?f.defaultFormatUtc:f.defaultFormat);var t=U(this,e);return this.localeData().postformat(t)},pn.from=function(e,t){return this.isValid()&&(M(e)&&e.isValid()||Tt(e).isValid())?Zt({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},pn.fromNow=function(e){return this.from(Tt(),e)},pn.to=function(e,t){return this.isValid()&&(M(e)&&e.isValid()||Tt(e).isValid())?Zt({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},pn.toNow=function(e){return this.to(Tt(),e)},pn.get=function(e){return O(this[e=V(e)])?this[e]():this},pn.invalidAt=function(){return y(this).overflow},pn.isAfter=function(e,t){var n=M(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=V(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},pn.isBefore=function(e,t){var n=M(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=V(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},pn.isBetween=function(e,t,n,s){var i=M(e)?e:Tt(e),r=M(t)?t:Tt(t);return!!(this.isValid()&&i.isValid()&&r.isValid())&&(("("===(s=s||"()")[0]?this.isAfter(i,n):!this.isBefore(i,n))&&(")"===s[1]?this.isBefore(r,n):!this.isAfter(r,n)))},pn.isSame=function(e,t){var n,s=M(e)?e:Tt(e);return!(!this.isValid()||!s.isValid())&&("millisecond"===(t=V(t)||"millisecond")?this.valueOf()===s.valueOf():(n=s.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},pn.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},pn.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},pn.isValid=function(){return g(this)},pn.lang=nn,pn.locale=tn,pn.localeData=sn,pn.max=Pt,pn.min=Nt,pn.parsingFlags=function(){return c({},y(this))},pn.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t,n=[];for(t in e)m(e,t)&&n.push({unit:t,priority:E[t]});return n.sort(function(e,t){return e.priority-t.priority}),n}(e=G(e)),s=0;s<n.length;s++)this[n[s].unit](e[n[s].unit]);else if(O(this[e=V(e)]))return this[e](t);return this},pn.startOf=function(e){var t,n;if(void 0===(e=V(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?un:on,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=an(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=an(t,6e4);break;case"second":t=this._d.valueOf(),t-=an(t,1e3);break}return this._d.setTime(t),f.updateOffset(this,!0),this},pn.subtract=Qt,pn.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},pn.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},pn.toDate=function(){return new Date(this.valueOf())},pn.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||9999<n.year()?U(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):O(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",U(n,"Z")):U(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},pn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,s="moment",i="";return this.isLocal()||(s=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+s+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=i+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+n)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(pn[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),pn.toJSON=function(){return this.isValid()?this.toISOString():null},pn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},pn.unix=function(){return Math.floor(this.valueOf()/1e3)},pn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},pn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},pn.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].name;if(t[n].until<=e&&e<=t[n].since)return t[n].name}return""},pn.eraNarrow=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].narrow;if(t[n].until<=e&&e<=t[n].since)return t[n].narrow}return""},pn.eraAbbr=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].abbr;if(t[n].until<=e&&e<=t[n].since)return t[n].abbr}return""},pn.eraYear=function(){for(var e,t,n=this.localeData().eras(),s=0,i=n.length;s<i;++s)if(e=n[s].since<=n[s].until?1:-1,t=this.clone().startOf("day").valueOf(),n[s].since<=t&&t<=n[s].until||n[s].until<=t&&t<=n[s].since)return(this.year()-f(n[s].since).year())*e+n[s].offset;return this.year()},pn.year=Le,pn.isLeapYear=function(){return j(this.year())},pn.weekYear=function(e){return cn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},pn.isoWeekYear=function(e){return cn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},pn.quarter=pn.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},pn.month=Ue,pn.daysInMonth=function(){return xe(this.year(),this.month())},pn.week=pn.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},pn.isoWeek=pn.isoWeeks=function(e){var t=Ae(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},pn.weeksInYear=function(){var e=this.localeData()._week;return je(this.year(),e.dow,e.doy)},pn.weeksInWeekYear=function(){var e=this.localeData()._week;return je(this.weekYear(),e.dow,e.doy)},pn.isoWeeksInYear=function(){return je(this.year(),1,4)},pn.isoWeeksInISOWeekYear=function(){return je(this.isoWeekYear(),1,4)},pn.date=fn,pn.day=pn.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,n,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,n=this.localeData(),e="string"!=typeof t?t:isNaN(t)?"number"==typeof(t=n.weekdaysParse(t))?t:null:parseInt(t,10),this.add(e-s,"d")):s},pn.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},pn.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null==e)return this.day()||7;var t,n,s=(t=e,n=this.localeData(),"string"==typeof t?n.weekdaysParse(t)%7||7:isNaN(t)?null:t);return this.day(this.day()%7?s:s-7)},pn.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},pn.hour=pn.hours=tt,pn.minute=pn.minutes=mn,pn.second=pn.seconds=gn,pn.millisecond=pn.milliseconds=yn,pn.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?i:Et(this);if("string"==typeof e){if(null===(e=Vt(he,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Et(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),i!==e&&(!t||this._changeInProgress?Bt(this,Zt(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,f.updateOffset(this,!0),this._changeInProgress=null)),this},pn.utc=function(e){return this.utcOffset(0,e)},pn.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Et(this),"m")),this},pn.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(e=Vt(le,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},pn.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Tt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},pn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},pn.isLocal=function(){return!!this.isValid()&&!this._isUTC},pn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},pn.isUtc=At,pn.isUTC=At,pn.zoneAbbr=function(){return this._isUTC?"UTC":""},pn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},pn.dates=n("dates accessor is deprecated. Use date instead.",fn),pn.months=n("months accessor is deprecated. Use month instead",Ue),pn.years=n("years accessor is deprecated. Use year instead",Le),pn.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),pn.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!r(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=bt(t))._a?(e=(t._isUTC?_:Tt)(t._a),this._isDSTShifted=this.isValid()&&0<function(e,t,n){for(var s=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),r=0,a=0;a<s;a++)(n&&e[a]!==t[a]||!n&&Z(e[a])!==Z(t[a]))&&r++;return r+i}(t._a,e.toArray())):this._isDSTShifted=!1,this._isDSTShifted});var kn=x.prototype;function Mn(e,t,n,s){var i=dt(),r=_().set(s,t);return i[n](r,e)}function Dn(e,t,n){if(h(e)&&(t=e,e=void 0),e=e||"",null!=t)return Mn(e,t,n,"month");for(var s=[],i=0;i<12;i++)s[i]=Mn(e,i,n,"month");return s}function Sn(e,t,n,s){t=("boolean"==typeof e?h(t)&&(n=t,t=void 0):(t=e,e=!1,h(n=t)&&(n=t,t=void 0)),t||"");var i,r=dt(),a=e?r._week.dow:0,o=[];if(null!=n)return Mn(t,(n+a)%7,s,"day");for(i=0;i<7;i++)o[i]=Mn(t,(i+a)%7,s,"day");return o}kn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return O(s)?s.call(t,n):s},kn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(N).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e])},kn.invalidDate=function(){return this._invalidDate},kn.ordinal=function(e){return this._ordinal.replace("%d",e)},kn.preparse=vn,kn.postformat=vn,kn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return O(i)?i(e,t,n,s):i.replace(/%d/i,e)},kn.pastFuture=function(e,t){var n=this._relativeTime[0<e?"future":"past"];return O(n)?n(t):n.replace(/%s/i,t)},kn.set=function(e){var t,n;for(n in e)m(e,n)&&(O(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},kn.eras=function(e,t){for(var n,s=this._eras||dt("en")._eras,i=0,r=s.length;i<r;++i){switch(typeof s[i].since){case"string":n=f(s[i].since).startOf("day"),s[i].since=n.valueOf();break}switch(typeof s[i].until){case"undefined":s[i].until=1/0;break;case"string":n=f(s[i].until).startOf("day").valueOf(),s[i].until=n.valueOf();break}}return s},kn.erasParse=function(e,t,n){var s,i,r,a,o,u=this.eras();for(e=e.toUpperCase(),s=0,i=u.length;s<i;++s)if(r=u[s].name.toUpperCase(),a=u[s].abbr.toUpperCase(),o=u[s].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(a===e)return u[s];break;case"NNNN":if(r===e)return u[s];break;case"NNNNN":if(o===e)return u[s];break}else if(0<=[r,a,o].indexOf(e))return u[s]},kn.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?f(e.since).year():f(e.since).year()+(t-e.offset)*n},kn.erasAbbrRegex=function(e){return m(this,"_erasAbbrRegex")||hn.call(this),e?this._erasAbbrRegex:this._erasRegex},kn.erasNameRegex=function(e){return m(this,"_erasNameRegex")||hn.call(this),e?this._erasNameRegex:this._erasRegex},kn.erasNarrowRegex=function(e){return m(this,"_erasNarrowRegex")||hn.call(this),e?this._erasNarrowRegex:this._erasRegex},kn.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Pe).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone},kn.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Pe.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},kn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=_([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=we.call(this._shortMonthsParse,a))?i:null:-1!==(i=we.call(this._longMonthsParse,a))?i:null:"MMM"===t?-1!==(i=we.call(this._shortMonthsParse,a))||-1!==(i=we.call(this._longMonthsParse,a))?i:null:-1!==(i=we.call(this._longMonthsParse,a))||-1!==(i=we.call(this._shortMonthsParse,a))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=_([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(r="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},kn.monthsRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||He.call(this),e?this._monthsStrictRegex:this._monthsRegex):(m(this,"_monthsRegex")||(this._monthsRegex=We),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},kn.monthsShortRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||He.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(m(this,"_monthsShortRegex")||(this._monthsShortRegex=Re),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},kn.week=function(e){return Ae(e,this._week.dow,this._week.doy).week},kn.firstDayOfYear=function(){return this._week.doy},kn.firstDayOfWeek=function(){return this._week.dow},kn.weekdays=function(e,t){var n=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Ie(n,this._week.dow):e?n[e.day()]:n},kn.weekdaysMin=function(e){return!0===e?Ie(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},kn.weekdaysShort=function(e){return!0===e?Ie(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},kn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=_([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=we.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=we.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=we.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=we.call(this._weekdaysParse,a))||-1!==(i=we.call(this._shortWeekdaysParse,a))||-1!==(i=we.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=we.call(this._shortWeekdaysParse,a))||-1!==(i=we.call(this._weekdaysParse,a))||-1!==(i=we.call(this._minWeekdaysParse,a))?i:null:-1!==(i=we.call(this._minWeekdaysParse,a))||-1!==(i=we.call(this._weekdaysParse,a))||-1!==(i=we.call(this._shortWeekdaysParse,a))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=_([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(r="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},kn.weekdaysRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(m(this,"_weekdaysRegex")||(this._weekdaysRegex=qe),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},kn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(m(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Be),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},kn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Qe.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(m(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Je),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},kn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},kn.meridiem=function(e,t,n){return 11<e?n?"pm":"PM":n?"am":"AM"},lt("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===Z(e%100/10)?"th":1==t?"st":2==t?"nd":3==t?"rd":"th")}}),f.lang=n("moment.lang is deprecated. Use moment.locale instead.",lt),f.langData=n("moment.langData is deprecated. Use moment.localeData instead.",dt);var Yn=Math.abs;function On(e,t,n,s){var i=Zt(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function bn(e){return e<0?Math.floor(e):Math.ceil(e)}function xn(e){return 4800*e/146097}function Tn(e){return 146097*e/4800}function Nn(e){return function(){return this.as(e)}}var Pn=Nn("ms"),Rn=Nn("s"),Wn=Nn("m"),Cn=Nn("h"),Un=Nn("d"),Hn=Nn("w"),Fn=Nn("M"),Ln=Nn("Q"),Vn=Nn("y");function Gn(e){return function(){return this.isValid()?this._data[e]:NaN}}var En=Gn("milliseconds"),An=Gn("seconds"),jn=Gn("minutes"),In=Gn("hours"),Zn=Gn("days"),zn=Gn("months"),$n=Gn("years");var qn=Math.round,Bn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Jn(e,t,n,s){var i=Zt(e).abs(),r=qn(i.as("s")),a=qn(i.as("m")),o=qn(i.as("h")),u=qn(i.as("d")),l=qn(i.as("M")),h=qn(i.as("w")),d=qn(i.as("y")),c=(r<=n.ss?["s",r]:r<n.s&&["ss",r])||a<=1&&["m"]||a<n.m&&["mm",a]||o<=1&&["h"]||o<n.h&&["hh",o]||u<=1&&["d"]||u<n.d&&["dd",u];return null!=n.w&&(c=c||h<=1&&["w"]||h<n.w&&["ww",h]),(c=c||l<=1&&["M"]||l<n.M&&["MM",l]||d<=1&&["y"]||["yy",d])[2]=t,c[3]=0<+e,c[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,c)}var Qn=Math.abs;function Xn(e){return(0<e)-(e<0)||+e}function Kn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,s,i,r,a,o,u=Qn(this._milliseconds)/1e3,l=Qn(this._days),h=Qn(this._months),d=this.asSeconds();return d?(e=I(u/60),t=I(e/60),u%=60,e%=60,n=I(h/12),h%=12,s=u?u.toFixed(3).replace(/\.?0+$/,""):"",i=d<0?"-":"",r=Xn(this._months)!==Xn(d)?"-":"",a=Xn(this._days)!==Xn(d)?"-":"",o=Xn(this._milliseconds)!==Xn(d)?"-":"",i+"P"+(n?r+n+"Y":"")+(h?r+h+"M":"")+(l?a+l+"D":"")+(t||e||u?"T":"")+(t?o+t+"H":"")+(e?o+e+"M":"")+(u?o+s+"S":"")):"P0D"}var es=Ct.prototype;return es.isValid=function(){return this._isValid},es.abs=function(){var e=this._data;return this._milliseconds=Yn(this._milliseconds),this._days=Yn(this._days),this._months=Yn(this._months),e.milliseconds=Yn(e.milliseconds),e.seconds=Yn(e.seconds),e.minutes=Yn(e.minutes),e.hours=Yn(e.hours),e.months=Yn(e.months),e.years=Yn(e.years),this},es.add=function(e,t){return On(this,e,t,1)},es.subtract=function(e,t){return On(this,e,t,-1)},es.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=V(e))||"quarter"===e||"year"===e)switch(t=this._days+s/864e5,n=this._months+xn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Tn(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},es.asMilliseconds=Pn,es.asSeconds=Rn,es.asMinutes=Wn,es.asHours=Cn,es.asDays=Un,es.asWeeks=Hn,es.asMonths=Fn,es.asQuarters=Ln,es.asYears=Vn,es.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*Z(this._months/12):NaN},es._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return 0<=r&&0<=a&&0<=o||r<=0&&a<=0&&o<=0||(r+=864e5*bn(Tn(o)+a),o=a=0),u.milliseconds=r%1e3,e=I(r/1e3),u.seconds=e%60,t=I(e/60),u.minutes=t%60,n=I(t/60),u.hours=n%24,a+=I(n/24),o+=i=I(xn(a)),a-=bn(Tn(i)),s=I(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},es.clone=function(){return Zt(this)},es.get=function(e){return e=V(e),this.isValid()?this[e+"s"]():NaN},es.milliseconds=En,es.seconds=An,es.minutes=jn,es.hours=In,es.days=Zn,es.weeks=function(){return I(this.days()/7)},es.months=zn,es.years=$n,es.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,s,i=!1,r=Bn;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(i=e),"object"==typeof t&&(r=Object.assign({},Bn,t),null!=t.s&&null==t.ss&&(r.ss=t.s-1)),n=this.localeData(),s=Jn(this,!i,r,n),i&&(s=n.pastFuture(+this,s)),n.postformat(s)},es.toISOString=Kn,es.toString=Kn,es.toJSON=Kn,es.locale=tn,es.localeData=sn,es.toIsoString=n("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Kn),es.lang=nn,C("X",0,0,"unix"),C("x",0,0,"valueOf"),ce("x",ue),ce("X",/[+-]?\d+(\.\d{1,3})?/),ye("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e))}),ye("x",function(e,t,n){n._d=new Date(Z(e))}),f.version="2.29.1",e=Tt,f.fn=pn,f.min=function(){return Rt("isBefore",[].slice.call(arguments,0))},f.max=function(){return Rt("isAfter",[].slice.call(arguments,0))},f.now=function(){return Date.now?Date.now():+new Date},f.utc=_,f.unix=function(e){return Tt(1e3*e)},f.months=function(e,t){return Dn(e,t,"months")},f.isDate=a,f.locale=lt,f.invalid=w,f.duration=Zt,f.isMoment=M,f.weekdays=function(e,t,n){return Sn(e,t,n,"weekdays")},f.parseZone=function(){return Tt.apply(null,arguments).parseZone()},f.localeData=dt,f.isDuration=Ut,f.monthsShort=function(e,t){return Dn(e,t,"monthsShort")},f.weekdaysMin=function(e,t,n){return Sn(e,t,n,"weekdaysMin")},f.defineLocale=ht,f.updateLocale=function(e,t){var n,s,i;return null!=t?(i=st,null!=it[e]&&null!=it[e].parentLocale?it[e].set(b(it[e]._config,t)):(null!=(s=ut(e))&&(i=s._config),t=b(i,t),null==s&&(t.abbr=e),(n=new x(t)).parentLocale=it[e],it[e]=n),lt(e)):null!=it[e]&&(null!=it[e].parentLocale?(it[e]=it[e].parentLocale,e===lt()&&lt(e)):null!=it[e]&&delete it[e]),it[e]},f.locales=function(){return s(it)},f.weekdaysShort=function(e,t,n){return Sn(e,t,n,"weekdaysShort")},f.normalizeUnits=V,f.relativeTimeRounding=function(e){return void 0===e?qn:"function"==typeof e&&(qn=e,!0)},f.relativeTimeThreshold=function(e,t){return void 0!==Bn[e]&&(void 0===t?Bn[e]:(Bn[e]=t,"s"===e&&(Bn.ss=t-1),!0))},f.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},f.prototype=pn,f.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},f});
//# sourceMappingURL=moment.min.js.map{"version":3,"file":"moment.min.js","sources":["../moment.js"],"names":["global","factory","exports","module","define","amd","moment","this","hookCallback","some","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","res","i","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","createInvalid","NaN","fun","t","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","slice","join","Error","stack","keys","deprecations","deprecateSimple","name","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","makeGetSet","keepTime","set$1","get","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","s","tokens","addParseToken","addWeekParseToken","_w","indexOf","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","y","parseTwoDigitYear","parseInt","getSetYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","dayOfYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","d","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","day","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","getSetHour","globalLocale","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","h","hh","dd","w","ww","M","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","chooseLocale","names","j","next","loadLocale","arr1","arr2","minl","commonPrefix","oldLocale","_abbr","require","getSetGlobalLocale","e","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","checkOverflow","_a","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","configFromRFC2822","parsedArray","weekdayStr","parsedInput","getDay","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getFullYear","getMonth","getDate","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ms","setFullYear","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","isUTC","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","parseIso","base","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","isNumberOrStringArray","property","objectTest","propertyTest","properties","isMomentInputObject","monthDiff","wholeMonthDiff","anchor","adjust","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","isCalendarSpec","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","suffix","zone","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","Infinity","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","relativeTime$1","posNegDuration","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS"],"mappings":"CAME,SAAUA,EAAQC,GACG,iBAAZC,SAA0C,oBAAXC,OAAyBA,OAAOD,QAAUD,IAC9D,mBAAXG,QAAyBA,OAAOC,IAAMD,OAAOH,GACpDD,EAAOM,OAASL,IAHnB,CAICM,KAAM,wBAEJ,IAAIC,EA4HAC,EA1HJ,SAASC,IACL,OAAOF,EAAaG,MAAM,KAAMC,WASpC,SAASC,EAAQC,GACb,OACIA,aAAiBC,OACyB,mBAA1CC,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASM,EAASN,GAGd,OACa,MAATA,GAC0C,oBAA1CE,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASO,EAAWC,EAAGC,GACnB,OAAOP,OAAOC,UAAUO,eAAeL,KAAKG,EAAGC,GAGnD,SAASE,EAAcC,GACnB,GAAIV,OAAOW,oBACP,OAAkD,IAA3CX,OAAOW,oBAAoBD,GAAKE,OAGvC,IADA,IAAIC,KACMH,EACN,GAAIL,EAAWK,EAAKG,GAChB,OAGR,OAAO,EAIf,SAASC,EAAYhB,GACjB,YAAiB,IAAVA,EAGX,SAASiB,EAASjB,GACd,MACqB,iBAAVA,GACmC,oBAA1CE,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASkB,EAAOlB,GACZ,OACIA,aAAiBmB,MACyB,kBAA1CjB,OAAOC,UAAUC,SAASC,KAAKL,GAIvC,SAASoB,EAAIC,EAAKC,GAGd,IAFA,IAAIC,EAAM,GAELC,EAAI,EAAGA,EAAIH,EAAIP,SAAUU,EAC1BD,EAAIE,KAAKH,EAAGD,EAAIG,GAAIA,IAExB,OAAOD,EAGX,SAASG,EAAOlB,EAAGC,GACf,IAAK,IAAIe,KAAKf,EACNF,EAAWE,EAAGe,KACdhB,EAAEgB,GAAKf,EAAEe,IAYjB,OARIjB,EAAWE,EAAG,cACdD,EAAEJ,SAAWK,EAAEL,UAGfG,EAAWE,EAAG,aACdD,EAAEmB,QAAUlB,EAAEkB,SAGXnB,EAGX,SAASoB,EAAU5B,EAAO6B,EAAQC,EAAQC,GACtC,OAAOC,GAAiBhC,EAAO6B,EAAQC,EAAQC,GAAQ,GAAME,MAyBjE,SAASC,EAAgBC,GAIrB,OAHa,MAATA,EAAEC,MACFD,EAAEC,IAtBC,CACHC,OAAO,EACPC,aAAc,GACdC,YAAa,GACbC,UAAW,EACXC,cAAe,EACfC,WAAW,EACXC,WAAY,KACZC,aAAc,KACdC,eAAe,EACfC,iBAAiB,EACjBC,KAAK,EACLC,gBAAiB,GACjBC,IAAK,KACLC,SAAU,KACVC,SAAS,EACTC,iBAAiB,IAQdjB,EAAEC,IAsBb,SAASiB,EAAQlB,GACb,GAAkB,MAAdA,EAAEmB,SAAkB,CACpB,IAAIC,EAAQrB,EAAgBC,GACxBqB,EAAc7D,EAAKU,KAAKkD,EAAMP,gBAAiB,SAAUxB,GACrD,OAAY,MAALA,IAEXiC,GACKC,MAAMvB,EAAEwB,GAAGC,YACZL,EAAMf,SAAW,IAChBe,EAAMlB,QACNkB,EAAMZ,aACNY,EAAMX,eACNW,EAAMM,iBACNN,EAAMH,kBACNG,EAAMb,YACNa,EAAMV,gBACNU,EAAMT,mBACLS,EAAML,UAAaK,EAAML,UAAYM,GAU/C,GARIrB,EAAE2B,UACFL,EACIA,GACwB,IAAxBF,EAAMd,eACwB,IAA9Bc,EAAMjB,aAAaxB,aACDiD,IAAlBR,EAAMS,SAGS,MAAnB9D,OAAO+D,UAAqB/D,OAAO+D,SAAS9B,GAG5C,OAAOsB,EAFPtB,EAAEmB,SAAWG,EAKrB,OAAOtB,EAAEmB,SAGb,SAASY,EAAcX,GACnB,IAAIpB,EAAIP,EAAUuC,KAOlB,OANa,MAATZ,EACA7B,EAAOQ,EAAgBC,GAAIoB,GAE3BrB,EAAgBC,GAAGW,iBAAkB,EAGlCX,EA7DPxC,EADAM,MAAME,UAAUR,KACTM,MAAME,UAAUR,KAEhB,SAAUyE,GAKb,IAJA,IAAIC,EAAInE,OAAOT,MACX6E,EAAMD,EAAEvD,SAAW,EAGlBU,EAAI,EAAGA,EAAI8C,EAAK9C,IACjB,GAAIA,KAAK6C,GAAKD,EAAI/D,KAAKZ,KAAM4E,EAAE7C,GAAIA,EAAG6C,GAClC,OAAO,EAIf,OAAO,GAqDf,IAAIE,EAAoB3E,EAAM2E,iBAAmB,GAC7CC,GAAmB,EAEvB,SAASC,EAAWC,EAAIC,GACpB,IAAInD,EAAGoD,EAAMC,EAiCb,GA/BK7D,EAAY2D,EAAKG,oBAClBJ,EAAGI,iBAAmBH,EAAKG,kBAE1B9D,EAAY2D,EAAKI,MAClBL,EAAGK,GAAKJ,EAAKI,IAEZ/D,EAAY2D,EAAKK,MAClBN,EAAGM,GAAKL,EAAKK,IAEZhE,EAAY2D,EAAKM,MAClBP,EAAGO,GAAKN,EAAKM,IAEZjE,EAAY2D,EAAKb,WAClBY,EAAGZ,QAAUa,EAAKb,SAEjB9C,EAAY2D,EAAKO,QAClBR,EAAGQ,KAAOP,EAAKO,MAEdlE,EAAY2D,EAAKQ,UAClBT,EAAGS,OAASR,EAAKQ,QAEhBnE,EAAY2D,EAAKS,WAClBV,EAAGU,QAAUT,EAAKS,SAEjBpE,EAAY2D,EAAKvC,OAClBsC,EAAGtC,IAAMF,EAAgByC,IAExB3D,EAAY2D,EAAKU,WAClBX,EAAGW,QAAUV,EAAKU,SAGQ,EAA1Bd,EAAiBzD,OACjB,IAAKU,EAAI,EAAGA,EAAI+C,EAAiBzD,OAAQU,IAGhCR,EADL6D,EAAMF,EADNC,EAAOL,EAAiB/C,OAGpBkD,EAAGE,GAAQC,GAKvB,OAAOH,EAIX,SAASY,EAAOC,GACZd,EAAWhF,KAAM8F,GACjB9F,KAAKkE,GAAK,IAAIxC,KAAkB,MAAboE,EAAO5B,GAAa4B,EAAO5B,GAAGC,UAAYO,KACxD1E,KAAK4D,YACN5D,KAAKkE,GAAK,IAAIxC,KAAKgD,OAIE,IAArBK,IACAA,GAAmB,EACnB5E,EAAM4F,aAAa/F,MACnB+E,GAAmB,GAI3B,SAASiB,EAAS7E,GACd,OACIA,aAAe0E,GAAkB,MAAP1E,GAAuC,MAAxBA,EAAIkE,iBAIrD,SAASY,EAAKC,IAEgC,IAAtC/F,EAAMgG,6BACa,oBAAZC,SACPA,QAAQH,MAERG,QAAQH,KAAK,wBAA0BC,GAI/C,SAASG,EAAUH,EAAKrE,GACpB,IAAIyE,GAAY,EAEhB,OAAOrE,EAAO,WAIV,GAHgC,MAA5B9B,EAAMoG,oBACNpG,EAAMoG,mBAAmB,KAAML,GAE/BI,EAAW,CAKX,IAJA,IACIE,EAEAC,EAHAC,EAAO,GAIN3E,EAAI,EAAGA,EAAI1B,UAAUgB,OAAQU,IAAK,CAEnC,GADAyE,EAAM,GACsB,iBAAjBnG,UAAU0B,GAAiB,CAElC,IAAK0E,KADLD,GAAO,MAAQzE,EAAI,KACP1B,UAAU,GACdS,EAAWT,UAAU,GAAIoG,KACzBD,GAAOC,EAAM,KAAOpG,UAAU,GAAGoG,GAAO,MAGhDD,EAAMA,EAAIG,MAAM,GAAI,QAEpBH,EAAMnG,UAAU0B,GAEpB2E,EAAK1E,KAAKwE,GAEdP,EACIC,EACI,gBACA1F,MAAME,UAAUiG,MAAM/F,KAAK8F,GAAME,KAAK,IACtC,MACA,IAAIC,OAAQC,OAEpBR,GAAY,EAEhB,OAAOzE,EAAGzB,MAAMJ,KAAMK,YACvBwB,GAGP,IAgFIkF,EAhFAC,EAAe,GAEnB,SAASC,EAAgBC,EAAMhB,GACK,MAA5B/F,EAAMoG,oBACNpG,EAAMoG,mBAAmBW,EAAMhB,GAE9Bc,EAAaE,KACdjB,EAAKC,GACLc,EAAaE,IAAQ,GAO7B,SAASC,EAAW5G,GAChB,MACyB,oBAAb6G,UAA4B7G,aAAiB6G,UACX,sBAA1C3G,OAAOC,UAAUC,SAASC,KAAKL,GA2BvC,SAAS8G,EAAaC,EAAcC,GAChC,IACIpC,EADArD,EAAMG,EAAO,GAAIqF,GAErB,IAAKnC,KAAQoC,EACLzG,EAAWyG,EAAapC,KACpBtE,EAASyG,EAAanC,KAAUtE,EAAS0G,EAAYpC,KACrDrD,EAAIqD,GAAQ,GACZlD,EAAOH,EAAIqD,GAAOmC,EAAanC,IAC/BlD,EAAOH,EAAIqD,GAAOoC,EAAYpC,KACF,MAArBoC,EAAYpC,GACnBrD,EAAIqD,GAAQoC,EAAYpC,UAEjBrD,EAAIqD,IAIvB,IAAKA,KAAQmC,EAELxG,EAAWwG,EAAcnC,KACxBrE,EAAWyG,EAAapC,IACzBtE,EAASyG,EAAanC,MAGtBrD,EAAIqD,GAAQlD,EAAO,GAAIH,EAAIqD,KAGnC,OAAOrD,EAGX,SAAS0F,EAAO1B,GACE,MAAVA,GACA9F,KAAKyH,IAAI3B,GAhEjB3F,EAAMgG,6BAA8B,EACpChG,EAAMoG,mBAAqB,KAsEvBQ,EADAtG,OAAOsG,KACAtG,OAAOsG,KAEP,SAAU5F,GACb,IAAIY,EACAD,EAAM,GACV,IAAKC,KAAKZ,EACFL,EAAWK,EAAKY,IAChBD,EAAIE,KAAKD,GAGjB,OAAOD,GAkBf,SAAS4F,EAASC,EAAQC,EAAcC,GACpC,IAAIC,EAAY,GAAKC,KAAKC,IAAIL,GAC1BM,EAAcL,EAAeE,EAAUzG,OAE3C,OADqB,GAAVsG,EAEEE,EAAY,IAAM,GAAM,KACjCE,KAAKG,IAAI,GAAIH,KAAKI,IAAI,EAAGF,IAActH,WAAWyH,OAAO,GACzDN,EAIR,IAAIO,EAAmB,yMACnBC,EAAwB,6CACxBC,EAAkB,GAClBC,EAAuB,GAM3B,SAASC,EAAeC,EAAOC,EAAQC,EAASC,GAC5C,IAAIC,EACoB,iBAAbD,EACA,WACH,OAAO7I,KAAK6I,MAHTA,EAMPH,IACAF,EAAqBE,GAASI,GAE9BH,IACAH,EAAqBG,EAAO,IAAM,WAC9B,OAAOjB,EAASoB,EAAK1I,MAAMJ,KAAMK,WAAYsI,EAAO,GAAIA,EAAO,MAGnEC,IACAJ,EAAqBI,GAAW,WAC5B,OAAO5I,KAAK+I,aAAaH,QACrBE,EAAK1I,MAAMJ,KAAMK,WACjBqI,KAuChB,SAASM,EAAatG,EAAGN,GACrB,OAAKM,EAAEkB,WAIPxB,EAAS6G,EAAa7G,EAAQM,EAAEqG,cAChCR,EAAgBnG,GACZmG,EAAgBnG,IAjCxB,SAA4BA,GAKxB,IAJA,IAR4B7B,EAQxB2I,EAAQ9G,EAAO+G,MAAMd,GAIpBtG,EAAI,EAAGV,EAAS6H,EAAM7H,OAAQU,EAAIV,EAAQU,IACvCyG,EAAqBU,EAAMnH,IAC3BmH,EAAMnH,GAAKyG,EAAqBU,EAAMnH,IAEtCmH,EAAMnH,IAhBcxB,EAgBc2I,EAAMnH,IAftCoH,MAAM,YACL5I,EAAM6I,QAAQ,WAAY,IAE9B7I,EAAM6I,QAAQ,MAAO,IAgB5B,OAAO,SAAUC,GAGb,IAFA,IAAIC,EAAS,GAERvH,EAAI,EAAGA,EAAIV,EAAQU,IACpBuH,GAAUnC,EAAW+B,EAAMnH,IACrBmH,EAAMnH,GAAGnB,KAAKyI,EAAKjH,GACnB8G,EAAMnH,GAEhB,OAAOuH,GAYoBC,CAAmBnH,GAE3CmG,EAAgBnG,GAAQM,IAPpBA,EAAEqG,aAAaS,cAU9B,SAASP,EAAa7G,EAAQC,GAC1B,IAAIN,EAAI,EAER,SAAS0H,EAA4BlJ,GACjC,OAAO8B,EAAOqH,eAAenJ,IAAUA,EAI3C,IADA+H,EAAsBqB,UAAY,EACtB,GAAL5H,GAAUuG,EAAsBsB,KAAKxH,IACxCA,EAASA,EAAOgH,QACZd,EACAmB,GAEJnB,EAAsBqB,UAAY,IAClC5H,EAGJ,OAAOK,EAkFX,IAAIyH,EAAU,GAEd,SAASC,EAAaC,EAAMC,GACxB,IAAIC,EAAYF,EAAKG,cACrBL,EAAQI,GAAaJ,EAAQI,EAAY,KAAOJ,EAAQG,GAAaD,EAGzE,SAASI,EAAeC,GACpB,MAAwB,iBAAVA,EACRP,EAAQO,IAAUP,EAAQO,EAAMF,oBAChC5F,EAGV,SAAS+F,EAAqBC,GAC1B,IACIC,EACApF,EAFAqF,EAAkB,GAItB,IAAKrF,KAAQmF,EACLxJ,EAAWwJ,EAAanF,KACxBoF,EAAiBJ,EAAehF,MAE5BqF,EAAgBD,GAAkBD,EAAYnF,IAK1D,OAAOqF,EAGX,IAAIC,EAAa,GAEjB,SAASC,EAAgBX,EAAMY,GAC3BF,EAAWV,GAAQY,EAiBvB,SAASC,EAAWC,GAChB,OAAQA,EAAO,GAAM,GAAKA,EAAO,KAAQ,GAAMA,EAAO,KAAQ,EAGlE,SAASC,EAASnD,GACd,OAAIA,EAAS,EAEFI,KAAKgD,KAAKpD,IAAW,EAErBI,KAAKiD,MAAMrD,GAI1B,SAASsD,EAAMC,GACX,IAAIC,GAAiBD,EACjBE,EAAQ,EAMZ,OAJsB,GAAlBD,GAAuBE,SAASF,KAChCC,EAAQN,EAASK,IAGdC,EAGX,SAASE,EAAWvB,EAAMwB,GACtB,OAAO,SAAUH,GACb,OAAa,MAATA,GACAI,EAAMxL,KAAM+J,EAAMqB,GAClBjL,EAAM4F,aAAa/F,KAAMuL,GAClBvL,MAEAyL,EAAIzL,KAAM+J,IAK7B,SAAS0B,EAAIpC,EAAKU,GACd,OAAOV,EAAIzF,UACLyF,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,KAC3CrF,IAGV,SAAS8G,EAAMnC,EAAKU,EAAMqB,GAClB/B,EAAIzF,YAAcK,MAAMmH,KAEX,aAATrB,GACAa,EAAWvB,EAAIwB,SACC,IAAhBxB,EAAIqC,SACW,KAAfrC,EAAIsC,QAEJP,EAAQH,EAAMG,GACd/B,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,GACvCqB,EACA/B,EAAIqC,QACJE,GAAYR,EAAO/B,EAAIqC,WAG3BrC,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAMqE,GAAMqB,IAgC7D,IAmBIS,EAnBAC,EAAS,KACTC,EAAS,OACTC,EAAS,QACTC,EAAS,QACTC,GAAS,aACTC,GAAY,QACZC,GAAY,YACZC,GAAY,gBACZC,GAAY,UACZC,GAAY,UACZC,GAAY,eACZC,GAAgB,MAChBC,GAAc,WACdC,GAAc,qBACdC,GAAmB,0BAInBC,GAAY,wJAKhB,SAASC,GAAcpE,EAAOqE,EAAOC,GACjCnB,EAAQnD,GAASvB,EAAW4F,GACtBA,EACA,SAAUE,EAAUlE,GAChB,OAAOkE,GAAYD,EAAcA,EAAcD,GAI7D,SAASG,GAAsBxE,EAAO5C,GAClC,OAAKhF,EAAW+K,EAASnD,GAIlBmD,EAAQnD,GAAO5C,EAAOzB,QAASyB,EAAOF,SAHlC,IAAIuH,OAQRC,GAR8B1E,EAU5BU,QAAQ,KAAM,IACdA,QAAQ,sCAAuC,SAC5CiE,EACAC,EACAC,EACAC,EACAC,GAEA,OAAOH,GAAMC,GAAMC,GAAMC,MAKzC,SAASL,GAAYM,GACjB,OAAOA,EAAEtE,QAAQ,yBAA0B,QApC/CyC,EAAU,GAuCV,IAAI8B,GAAS,GAEb,SAASC,GAAclF,EAAOG,GAC1B,IAAI9G,EACA+G,EAAOD,EASX,IARqB,iBAAVH,IACPA,EAAQ,CAACA,IAETlH,EAASqH,KACTC,EAAO,SAAUvI,EAAO2I,GACpBA,EAAML,GAAYoC,EAAM1K,KAG3BwB,EAAI,EAAGA,EAAI2G,EAAMrH,OAAQU,IAC1B4L,GAAOjF,EAAM3G,IAAM+G,EAI3B,SAAS+E,GAAkBnF,EAAOG,GAC9B+E,GAAclF,EAAO,SAAUnI,EAAO2I,EAAOpD,EAAQ4C,GACjD5C,EAAOgI,GAAKhI,EAAOgI,IAAM,GACzBjF,EAAStI,EAAOuF,EAAOgI,GAAIhI,EAAQ4C,KAU3C,IAcIqF,GAdAC,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdC,GAAO,EACPC,GAAU,EAuBd,SAAS5C,GAAYf,EAAMa,GACvB,GAAIzH,MAAM4G,IAAS5G,MAAMyH,GACrB,OAAOhH,IAEX,IAzBY+J,EAyBRC,GAAehD,GAzBP+C,EAyBc,IAxBRA,GAAKA,EA0BvB,OADA5D,IAASa,EAAQgD,GAAY,GACT,GAAbA,EACD9D,EAAWC,GACP,GACA,GACJ,GAAO6D,EAAW,EAAK,EAxB7BX,GADAvN,MAAME,UAAUqN,QACNvN,MAAME,UAAUqN,QAEhB,SAAUY,GAGhB,IADA,IACK5M,EAAI,EAAGA,EAAI/B,KAAKqB,SAAUU,EAC3B,GAAI/B,KAAK+B,KAAO4M,EACZ,OAAO5M,EAGf,OAAQ,GAmBhB0G,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WACjC,OAAOzI,KAAK0L,QAAU,IAG1BjD,EAAe,MAAO,EAAG,EAAG,SAAUrG,GAClC,OAAOpC,KAAK+I,aAAa6F,YAAY5O,KAAMoC,KAG/CqG,EAAe,OAAQ,EAAG,EAAG,SAAUrG,GACnC,OAAOpC,KAAK+I,aAAa8F,OAAO7O,KAAMoC,KAK1C0H,EAAa,QAAS,KAItBY,EAAgB,QAAS,GAIzBoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,MAAO,SAAUG,EAAU5K,GACrC,OAAOA,EAAOyM,iBAAiB7B,KAEnCH,GAAc,OAAQ,SAAUG,EAAU5K,GACtC,OAAOA,EAAO0M,YAAY9B,KAG9BW,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,GACxCA,EAAM+E,IAAShD,EAAM1K,GAAS,IAGlCqN,GAAc,CAAC,MAAO,QAAS,SAAUrN,EAAO2I,EAAOpD,EAAQ4C,GAC3D,IAAIgD,EAAQ5F,EAAOF,QAAQoJ,YAAYzO,EAAOmI,EAAO5C,EAAOzB,SAE/C,MAATqH,EACAxC,EAAM+E,IAASvC,EAEfjJ,EAAgBqD,GAAQ3C,aAAe5C,IAM/C,IAAI0O,GAAsB,wFAAwFC,MAC1G,KAEJC,GAA2B,kDAAkDD,MACzE,KAEJE,GAAmB,gCACnBC,GAA0BxC,GAC1ByC,GAAqBzC,GAoIzB,SAAS0C,GAASlG,EAAK+B,GACnB,IAAIoE,EAEJ,IAAKnG,EAAIzF,UAEL,OAAOyF,EAGX,GAAqB,iBAAV+B,EACP,GAAI,QAAQxB,KAAKwB,GACbA,EAAQH,EAAMG,QAId,IAAK5J,EAFL4J,EAAQ/B,EAAIN,aAAaiG,YAAY5D,IAGjC,OAAO/B,EAOnB,OAFAmG,EAAazH,KAAK0H,IAAIpG,EAAIsC,OAAQC,GAAYvC,EAAIwB,OAAQO,IAC1D/B,EAAInF,GAAG,OAASmF,EAAI3D,OAAS,MAAQ,IAAM,SAAS0F,EAAOoE,GACpDnG,EAGX,SAASqG,GAAYtE,GACjB,OAAa,MAATA,GACAmE,GAASvP,KAAMoL,GACfjL,EAAM4F,aAAa/F,MAAM,GAClBA,MAEAyL,EAAIzL,KAAM,SAgDzB,SAAS2P,KACL,SAASC,EAAU7O,EAAGC,GAClB,OAAOA,EAAEK,OAASN,EAAEM,OAQxB,IALA,IAIIgI,EAJAwG,EAAc,GACdC,EAAa,GACbC,EAAc,GAGbhO,EAAI,EAAGA,EAAI,GAAIA,IAEhBsH,EAAMlH,EAAU,CAAC,IAAMJ,IACvB8N,EAAY7N,KAAKhC,KAAK4O,YAAYvF,EAAK,KACvCyG,EAAW9N,KAAKhC,KAAK6O,OAAOxF,EAAK,KACjC0G,EAAY/N,KAAKhC,KAAK6O,OAAOxF,EAAK,KAClC0G,EAAY/N,KAAKhC,KAAK4O,YAAYvF,EAAK,KAO3C,IAHAwG,EAAYG,KAAKJ,GACjBE,EAAWE,KAAKJ,GAChBG,EAAYC,KAAKJ,GACZ7N,EAAI,EAAGA,EAAI,GAAIA,IAChB8N,EAAY9N,GAAKqL,GAAYyC,EAAY9N,IACzC+N,EAAW/N,GAAKqL,GAAY0C,EAAW/N,IAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBgO,EAAYhO,GAAKqL,GAAY2C,EAAYhO,IAG7C/B,KAAKiQ,aAAe,IAAI9C,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACnE5G,KAAKkQ,kBAAoBlQ,KAAKiQ,aAC9BjQ,KAAKmQ,mBAAqB,IAAIhD,OAC1B,KAAO2C,EAAWlJ,KAAK,KAAO,IAC9B,KAEJ5G,KAAKoQ,wBAA0B,IAAIjD,OAC/B,KAAO0C,EAAYjJ,KAAK,KAAO,IAC/B,KAiDR,SAASyJ,GAAWxF,GAChB,OAAOD,EAAWC,GAAQ,IAAM,IA5CpCpC,EAAe,IAAK,EAAG,EAAG,WACtB,IAAI6H,EAAItQ,KAAK6K,OACb,OAAOyF,GAAK,KAAO5I,EAAS4I,EAAG,GAAK,IAAMA,IAG9C7H,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAK6K,OAAS,MAGzBpC,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,QAClCA,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,QACnCA,EAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1CqB,EAAa,OAAQ,KAIrBY,EAAgB,OAAQ,GAIxBoC,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,GACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,SAAUN,GAAWN,IAEnC0B,GAAc,CAAC,QAAS,UAAWI,IACnCJ,GAAc,OAAQ,SAAUrN,EAAO2I,GACnCA,EAAM8E,IACe,IAAjBzN,EAAMc,OAAelB,EAAMoQ,kBAAkBhQ,GAAS0K,EAAM1K,KAEpEqN,GAAc,KAAM,SAAUrN,EAAO2I,GACjCA,EAAM8E,IAAQ7N,EAAMoQ,kBAAkBhQ,KAE1CqN,GAAc,IAAK,SAAUrN,EAAO2I,GAChCA,EAAM8E,IAAQwC,SAASjQ,EAAO,MAWlCJ,EAAMoQ,kBAAoB,SAAUhQ,GAChC,OAAO0K,EAAM1K,IAAyB,GAAf0K,EAAM1K,GAAc,KAAO,MAKtD,IAAIkQ,GAAanF,EAAW,YAAY,GAwBxC,SAASoF,GAAcJ,GACnB,IAAI3E,EAAMjF,EAcV,OAZI4J,EAAI,KAAY,GAALA,IACX5J,EAAOlG,MAAME,UAAUiG,MAAM/F,KAAKP,YAE7B,GAAKiQ,EAAI,IACd3E,EAAO,IAAIjK,KAAKA,KAAKiP,IAAIvQ,MAAM,KAAMsG,IACjC2E,SAASM,EAAKiF,mBACdjF,EAAKkF,eAAeP,IAGxB3E,EAAO,IAAIjK,KAAKA,KAAKiP,IAAIvQ,MAAM,KAAMC,YAGlCsL,EAIX,SAASmF,GAAgBjG,EAAMkG,EAAKC,GAChC,IACIC,EAAM,EAAIF,EAAMC,EAIpB,OAAgBC,GAFH,EAAIP,GAAc7F,EAAM,EAAGoG,GAAKC,YAAcH,GAAO,EAE5C,EAI1B,SAASI,GAAmBtG,EAAMuG,EAAMC,EAASN,EAAKC,GAClD,IAGIM,EADAC,EAAY,EAAI,GAAKH,EAAO,IAFZ,EAAIC,EAAUN,GAAO,EACxBD,GAAgBjG,EAAMkG,EAAKC,GAOxCQ,EAFAD,GAAa,EAEElB,GADfiB,EAAUzG,EAAO,GACoB0G,EAC9BA,EAAYlB,GAAWxF,IAC9ByG,EAAUzG,EAAO,EACF0G,EAAYlB,GAAWxF,KAEtCyG,EAAUzG,EACK0G,GAGnB,MAAO,CACH1G,KAAMyG,EACNC,UAAWC,GAInB,SAASC,GAAWpI,EAAK0H,EAAKC,GAC1B,IAEIU,EACAJ,EAHAK,EAAab,GAAgBzH,EAAIwB,OAAQkG,EAAKC,GAC9CI,EAAOrJ,KAAKiD,OAAO3B,EAAIkI,YAAcI,EAAa,GAAK,GAAK,EAehE,OAXIP,EAAO,EAEPM,EAAUN,EAAOQ,GADjBN,EAAUjI,EAAIwB,OAAS,EACekG,EAAKC,GACpCI,EAAOQ,GAAYvI,EAAIwB,OAAQkG,EAAKC,IAC3CU,EAAUN,EAAOQ,GAAYvI,EAAIwB,OAAQkG,EAAKC,GAC9CM,EAAUjI,EAAIwB,OAAS,IAEvByG,EAAUjI,EAAIwB,OACd6G,EAAUN,GAGP,CACHA,KAAMM,EACN7G,KAAMyG,GAId,SAASM,GAAY/G,EAAMkG,EAAKC,GAC5B,IAAIW,EAAab,GAAgBjG,EAAMkG,EAAKC,GACxCa,EAAiBf,GAAgBjG,EAAO,EAAGkG,EAAKC,GACpD,OAAQX,GAAWxF,GAAQ8G,EAAaE,GAAkB,EAK9DpJ,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrCqB,EAAa,OAAQ,KACrBA,EAAa,UAAW,KAIxBY,EAAgB,OAAQ,GACxBA,EAAgB,UAAW,GAI3BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAE/B8B,GAAkB,CAAC,IAAK,KAAM,IAAK,MAAO,SACtCtN,EACA6Q,EACAtL,EACA4C,GAEA0I,EAAK1I,EAAMN,OAAO,EAAG,IAAM6C,EAAM1K,KA0HrC,SAASuR,GAAcC,EAAIC,GACvB,OAAOD,EAAGpL,MAAMqL,EAAG,GAAGC,OAAOF,EAAGpL,MAAM,EAAGqL,IArF7CvJ,EAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,EAAG,SAAUrG,GACjC,OAAOpC,KAAK+I,aAAamJ,YAAYlS,KAAMoC,KAG/CqG,EAAe,MAAO,EAAG,EAAG,SAAUrG,GAClC,OAAOpC,KAAK+I,aAAaoJ,cAAcnS,KAAMoC,KAGjDqG,EAAe,OAAQ,EAAG,EAAG,SAAUrG,GACnC,OAAOpC,KAAK+I,aAAaqJ,SAASpS,KAAMoC,KAG5CqG,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1BqB,EAAa,MAAO,KACpBA,EAAa,UAAW,KACxBA,EAAa,aAAc,KAG3BY,EAAgB,MAAO,IACvBA,EAAgB,UAAW,IAC3BA,EAAgB,aAAc,IAI9BoC,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,KAAM,SAAUG,EAAU5K,GACpC,OAAOA,EAAOgQ,iBAAiBpF,KAEnCH,GAAc,MAAO,SAAUG,EAAU5K,GACrC,OAAOA,EAAOiQ,mBAAmBrF,KAErCH,GAAc,OAAQ,SAAUG,EAAU5K,GACtC,OAAOA,EAAOkQ,cAActF,KAGhCY,GAAkB,CAAC,KAAM,MAAO,QAAS,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GACpE,IAAI2I,EAAUvL,EAAOF,QAAQ4M,cAAcjS,EAAOmI,EAAO5C,EAAOzB,SAEjD,MAAXgN,EACAD,EAAKqB,EAAIpB,EAET5O,EAAgBqD,GAAQ1B,eAAiB7D,IAIjDsN,GAAkB,CAAC,IAAK,IAAK,KAAM,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GAC9D0I,EAAK1I,GAASuC,EAAM1K,KAkCxB,IAAImS,GAAwB,2DAA2DxD,MAC/E,KAEJyD,GAA6B,8BAA8BzD,MAAM,KACjE0D,GAA2B,uBAAuB1D,MAAM,KACxD2D,GAAuBhG,GACvBiG,GAA4BjG,GAC5BkG,GAA0BlG,GAiR9B,SAASmG,KACL,SAASpD,EAAU7O,EAAGC,GAClB,OAAOA,EAAEK,OAASN,EAAEM,OAYxB,IATA,IAKIgI,EACA4J,EACAC,EACAC,EARAC,EAAY,GACZvD,EAAc,GACdC,EAAa,GACbC,EAAc,GAMbhO,EAAI,EAAGA,EAAI,EAAGA,IAEfsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC/BkR,EAAO7F,GAAYpN,KAAKkS,YAAY7I,EAAK,KACzC6J,EAAS9F,GAAYpN,KAAKmS,cAAc9I,EAAK,KAC7C8J,EAAQ/F,GAAYpN,KAAKoS,SAAS/I,EAAK,KACvC+J,EAAUpR,KAAKiR,GACfpD,EAAY7N,KAAKkR,GACjBpD,EAAW9N,KAAKmR,GAChBpD,EAAY/N,KAAKiR,GACjBlD,EAAY/N,KAAKkR,GACjBnD,EAAY/N,KAAKmR,GAIrBC,EAAUpD,KAAKJ,GACfC,EAAYG,KAAKJ,GACjBE,EAAWE,KAAKJ,GAChBG,EAAYC,KAAKJ,GAEjB5P,KAAKsT,eAAiB,IAAInG,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACrE5G,KAAKuT,oBAAsBvT,KAAKsT,eAChCtT,KAAKwT,kBAAoBxT,KAAKsT,eAE9BtT,KAAKyT,qBAAuB,IAAItG,OAC5B,KAAO2C,EAAWlJ,KAAK,KAAO,IAC9B,KAEJ5G,KAAK0T,0BAA4B,IAAIvG,OACjC,KAAO0C,EAAYjJ,KAAK,KAAO,IAC/B,KAEJ5G,KAAK2T,wBAA0B,IAAIxG,OAC/B,KAAOiG,EAAUxM,KAAK,KAAO,IAC7B,KAMR,SAASgN,KACL,OAAO5T,KAAK6T,QAAU,IAAM,GAqChC,SAASpQ,GAASiF,EAAOoL,GACrBrL,EAAeC,EAAO,EAAG,EAAG,WACxB,OAAO1I,KAAK+I,aAAatF,SACrBzD,KAAK6T,QACL7T,KAAK+T,UACLD,KAiBZ,SAASE,GAAc/G,EAAU5K,GAC7B,OAAOA,EAAO4R,eArDlBxL,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAGmL,IAClCnL,EAAe,IAAK,CAAC,KAAM,GAAI,EAN/B,WACI,OAAOzI,KAAK6T,SAAW,KAO3BpL,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAKmL,GAAQxT,MAAMJ,MAAQ0H,EAAS1H,KAAK+T,UAAW,KAG/DtL,EAAe,QAAS,EAAG,EAAG,WAC1B,MACI,GACAmL,GAAQxT,MAAMJ,MACd0H,EAAS1H,KAAK+T,UAAW,GACzBrM,EAAS1H,KAAKkU,UAAW,KAIjCzL,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAKzI,KAAK6T,QAAUnM,EAAS1H,KAAK+T,UAAW,KAGxDtL,EAAe,QAAS,EAAG,EAAG,WAC1B,MACI,GACAzI,KAAK6T,QACLnM,EAAS1H,KAAK+T,UAAW,GACzBrM,EAAS1H,KAAKkU,UAAW,KAcjCzQ,GAAS,KAAK,GACdA,GAAS,KAAK,GAIdqG,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,IAQxBoC,GAAc,IAAKkH,IACnBlH,GAAc,IAAKkH,IACnBlH,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAE/Be,GAAc,MAAOV,IACrBU,GAAc,QAAST,IACvBS,GAAc,MAAOV,IACrBU,GAAc,QAAST,IAEvBuB,GAAc,CAAC,IAAK,MAAOO,IAC3BP,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/C,IAAIqO,EAASlJ,EAAM1K,GACnB2I,EAAMiF,IAAmB,KAAXgG,EAAgB,EAAIA,IAEtCvG,GAAc,CAAC,IAAK,KAAM,SAAUrN,EAAO2I,EAAOpD,GAC9CA,EAAOsO,MAAQtO,EAAOF,QAAQyO,KAAK9T,GACnCuF,EAAOwO,UAAY/T,IAEvBqN,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/CoD,EAAMiF,IAAQlD,EAAM1K,GACpBkC,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,MAAO,SAAUrN,EAAO2I,EAAOpD,GACzC,IAAIyO,EAAMhU,EAAMc,OAAS,EACzB6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGmM,IACpCrL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOmM,IACnC9R,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,QAAS,SAAUrN,EAAO2I,EAAOpD,GAC3C,IAAI0O,EAAOjU,EAAMc,OAAS,EACtBoT,EAAOlU,EAAMc,OAAS,EAC1B6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGoM,IACpCtL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOoM,EAAM,IACzCtL,EAAMmF,IAAUpD,EAAM1K,EAAM6H,OAAOqM,IACnChS,EAAgBqD,GAAQvB,SAAU,IAEtCqJ,GAAc,MAAO,SAAUrN,EAAO2I,EAAOpD,GACzC,IAAIyO,EAAMhU,EAAMc,OAAS,EACzB6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGmM,IACpCrL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOmM,MAEvC3G,GAAc,QAAS,SAAUrN,EAAO2I,EAAOpD,GAC3C,IAAI0O,EAAOjU,EAAMc,OAAS,EACtBoT,EAAOlU,EAAMc,OAAS,EAC1B6H,EAAMiF,IAAQlD,EAAM1K,EAAM6H,OAAO,EAAGoM,IACpCtL,EAAMkF,IAAUnD,EAAM1K,EAAM6H,OAAOoM,EAAM,IACzCtL,EAAMmF,IAAUpD,EAAM1K,EAAM6H,OAAOqM,MAWvC,IAKIC,GAAapJ,EAAW,SAAS,GAUrC,IAuBIqJ,GAvBAC,GAAa,CACbC,SA7iDkB,CAClBC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAwiDVzL,eAl7CwB,CACxB0L,IAAK,YACLC,GAAI,SACJC,EAAG,aACHC,GAAI,eACJC,IAAK,sBACLC,KAAM,6BA66CNjM,YAh5CqB,eAi5CrBZ,QA34CiB,KA44CjB8M,uBA34CgC,UA44ChCC,aAt4CsB,CACtBC,OAAQ,QACRC,KAAM,SACNnI,EAAG,gBACHoI,GAAI,aACJpT,EAAG,WACHqT,GAAI,aACJC,EAAG,UACHC,GAAI,WACJxD,EAAG,QACHyD,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,UACHC,GAAI,YACJhG,EAAG,SACHiG,GAAI,YAw3CJ1H,OAAQI,GACRL,YAAaO,GAEbiC,KAzlBoB,CACpBL,IAAK,EACLC,IAAK,GAylBLoB,SAAUM,GACVR,YAAaU,GACbT,cAAeQ,GAEf6D,cAhC6B,iBAoC7BC,GAAU,GACVC,GAAiB,GAcrB,SAASC,GAAgBlQ,GACrB,OAAOA,EAAMA,EAAIyD,cAAcd,QAAQ,IAAK,KAAO3C,EAMvD,SAASmQ,GAAaC,GAOlB,IANA,IACIC,EACAC,EACA1U,EACA6M,EAJAnN,EAAI,EAMDA,EAAI8U,EAAMxV,QAAQ,CAKrB,IAHAyV,GADA5H,EAAQyH,GAAgBE,EAAM9U,IAAImN,MAAM,MAC9B7N,OAEV0V,GADAA,EAAOJ,GAAgBE,EAAM9U,EAAI,KACnBgV,EAAK7H,MAAM,KAAO,KACrB,EAAJ4H,GAAO,CAEV,GADAzU,EAAS2U,GAAW9H,EAAMvI,MAAM,EAAGmQ,GAAGlQ,KAAK,MAEvC,OAAOvE,EAEX,GACI0U,GACAA,EAAK1V,QAAUyV,GArC/B,SAAsBG,EAAMC,GAGxB,IAFA,IACIC,EAAOpP,KAAK0H,IAAIwH,EAAK5V,OAAQ6V,EAAK7V,QACjCU,EAAI,EAAGA,EAAIoV,EAAMpV,GAAK,EACvB,GAAIkV,EAAKlV,KAAOmV,EAAKnV,GACjB,OAAOA,EAGf,OAAOoV,EA8BKC,CAAalI,EAAO6H,IAASD,EAAI,EAGjC,MAEJA,IAEJ/U,IAEJ,OAAO4S,GAGX,SAASqC,GAAW9P,GAChB,IAAImQ,EAGJ,QACsB/S,IAAlBmS,GAAQvP,IACU,oBAAXtH,QACPA,QACAA,OAAOD,QAEP,IACI0X,EAAY1C,GAAa2C,MACRC,QACF,YAAcrQ,GAC7BsQ,GAAmBH,GACrB,MAAOI,GAGLhB,GAAQvP,GAAQ,KAGxB,OAAOuP,GAAQvP,GAMnB,SAASsQ,GAAmB/Q,EAAKiR,GAC7B,IAAIC,EAqBJ,OApBIlR,KAEIkR,EADApW,EAAYmW,GACLE,GAAUnR,GAEVoR,GAAapR,EAAKiR,IAKzB/C,GAAegD,EAEQ,oBAAZvR,SAA2BA,QAAQH,MAE1CG,QAAQH,KACJ,UAAYQ,EAAM,2CAM3BkO,GAAa2C,MAGxB,SAASO,GAAa3Q,EAAMpB,GACxB,GAAe,OAAXA,EAiDA,cADO2Q,GAAQvP,GACR,KAhDP,IAAI7E,EACAiF,EAAesN,GAEnB,GADA9O,EAAOgS,KAAO5Q,EACO,MAAjBuP,GAAQvP,GACRD,EACI,uBACA,2OAKJK,EAAemP,GAAQvP,GAAM6Q,aAC1B,GAA2B,MAAvBjS,EAAOkS,aACd,GAAoC,MAAhCvB,GAAQ3Q,EAAOkS,cACf1Q,EAAemP,GAAQ3Q,EAAOkS,cAAcD,YACzC,CAEH,GAAc,OADd1V,EAAS2U,GAAWlR,EAAOkS,eAWvB,OAPKtB,GAAe5Q,EAAOkS,gBACvBtB,GAAe5Q,EAAOkS,cAAgB,IAE1CtB,GAAe5Q,EAAOkS,cAAchW,KAAK,CACrCkF,KAAMA,EACNpB,OAAQA,IAEL,KATPwB,EAAejF,EAAO0V,QA0BlC,OAbAtB,GAAQvP,GAAQ,IAAIM,EAAOH,EAAaC,EAAcxB,IAElD4Q,GAAexP,IACfwP,GAAexP,GAAM+Q,QAAQ,SAAUxJ,GACnCoJ,GAAapJ,EAAEvH,KAAMuH,EAAE3I,UAO/B0R,GAAmBtQ,GAEZuP,GAAQvP,GAsDvB,SAAS0Q,GAAUnR,GACf,IAAIpE,EAMJ,GAJIoE,GAAOA,EAAIb,SAAWa,EAAIb,QAAQ0R,QAClC7Q,EAAMA,EAAIb,QAAQ0R,QAGjB7Q,EACD,OAAOkO,GAGX,IAAKrU,EAAQmG,GAAM,CAGf,GADApE,EAAS2U,GAAWvQ,GAEhB,OAAOpE,EAEXoE,EAAM,CAACA,GAGX,OAAOmQ,GAAanQ,GAOxB,SAASyR,GAAcxV,GACnB,IAAIK,EACAhC,EAAI2B,EAAEyV,GAuCV,OArCIpX,IAAsC,IAAjC0B,EAAgBC,GAAGK,WACxBA,EACIhC,EAAEkN,IAAS,GAAgB,GAAXlN,EAAEkN,IACZA,GACAlN,EAAEmN,IAAQ,GAAKnN,EAAEmN,IAAQtC,GAAY7K,EAAEiN,IAAOjN,EAAEkN,KAChDC,GACAnN,EAAEoN,IAAQ,GACA,GAAVpN,EAAEoN,KACW,KAAZpN,EAAEoN,MACgB,IAAdpN,EAAEqN,KACe,IAAdrN,EAAEsN,KACiB,IAAnBtN,EAAEuN,KACVH,GACApN,EAAEqN,IAAU,GAAiB,GAAZrN,EAAEqN,IACnBA,GACArN,EAAEsN,IAAU,GAAiB,GAAZtN,EAAEsN,IACnBA,GACAtN,EAAEuN,IAAe,GAAsB,IAAjBvN,EAAEuN,IACxBA,IACC,EAGP7L,EAAgBC,GAAG0V,qBAClBrV,EAAWiL,IAAmBE,GAAXnL,KAEpBA,EAAWmL,IAEXzL,EAAgBC,GAAG2V,iBAAgC,IAAdtV,IACrCA,EAAWwL,IAEX9L,EAAgBC,GAAG4V,mBAAkC,IAAdvV,IACvCA,EAAWyL,IAGf/L,EAAgBC,GAAGK,SAAWA,GAG3BL,EAKX,IAAI6V,GAAmB,iJACnBC,GAAgB,6IAChBC,GAAU,wBACVC,GAAW,CACP,CAAC,eAAgB,uBACjB,CAAC,aAAc,mBACf,CAAC,eAAgB,kBACjB,CAAC,aAAc,eAAe,GAC9B,CAAC,WAAY,eACb,CAAC,UAAW,cAAc,GAC1B,CAAC,aAAc,cACf,CAAC,WAAY,SACb,CAAC,aAAc,eACf,CAAC,YAAa,eAAe,GAC7B,CAAC,UAAW,SACZ,CAAC,SAAU,SAAS,GACpB,CAAC,OAAQ,SAAS,IAGtBC,GAAW,CACP,CAAC,gBAAiB,uBAClB,CAAC,gBAAiB,sBAClB,CAAC,WAAY,kBACb,CAAC,QAAS,aACV,CAAC,cAAe,qBAChB,CAAC,cAAe,oBAChB,CAAC,SAAU,gBACX,CAAC,OAAQ,YACT,CAAC,KAAM,SAEXC,GAAkB,qBAElBlV,GAAU,0LACVmV,GAAa,CACTC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAIb,SAASC,GAAc1T,GACnB,IAAI/D,EACA0X,EAGAC,EACAC,EACAC,EACAC,EALAC,EAAShU,EAAOR,GAChB6D,EAAQoP,GAAiBwB,KAAKD,IAAWtB,GAAcuB,KAAKD,GAMhE,GAAI3Q,EAAO,CAGP,IAFA1G,EAAgBqD,GAAQxC,KAAM,EAEzBvB,EAAI,EAAG0X,EAAIf,GAASrX,OAAQU,EAAI0X,EAAG1X,IACpC,GAAI2W,GAAS3W,GAAG,GAAGgY,KAAK5Q,EAAM,IAAK,CAC/BwQ,EAAajB,GAAS3W,GAAG,GACzB2X,GAA+B,IAAnBhB,GAAS3W,GAAG,GACxB,MAGR,GAAkB,MAAd4X,EAEA,YADA7T,EAAOjC,UAAW,GAGtB,GAAIsF,EAAM,GAAI,CACV,IAAKpH,EAAI,EAAG0X,EAAId,GAAStX,OAAQU,EAAI0X,EAAG1X,IACpC,GAAI4W,GAAS5W,GAAG,GAAGgY,KAAK5Q,EAAM,IAAK,CAE/ByQ,GAAczQ,EAAM,IAAM,KAAOwP,GAAS5W,GAAG,GAC7C,MAGR,GAAkB,MAAd6X,EAEA,YADA9T,EAAOjC,UAAW,GAI1B,IAAK6V,GAA2B,MAAdE,EAEd,YADA9T,EAAOjC,UAAW,GAGtB,GAAIsF,EAAM,GAAI,CACV,IAAIsP,GAAQsB,KAAK5Q,EAAM,IAInB,YADArD,EAAOjC,UAAW,GAFlBgW,EAAW,IAMnB/T,EAAOP,GAAKoU,GAAcC,GAAc,KAAOC,GAAY,IAC3DG,GAA0BlU,QAE1BA,EAAOjC,UAAW,EAI1B,SAASoW,GACLC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIC,EAAS,CAejB,SAAwBN,GACpB,IAAIrP,EAAO2F,SAAS0J,EAAS,IAC7B,CAAA,GAAIrP,GAAQ,GACR,OAAO,IAAOA,EACX,GAAIA,GAAQ,IACf,OAAO,KAAOA,EAElB,OAAOA,EArBH4P,CAAeP,GACf/K,GAAyBpB,QAAQoM,GACjC3J,SAAS4J,EAAQ,IACjB5J,SAAS6J,EAAS,IAClB7J,SAAS8J,EAAW,KAOxB,OAJIC,GACAC,EAAOxY,KAAKwO,SAAS+J,EAAW,KAG7BC,EAuDX,SAASE,GAAkB5U,GACvB,IACI6U,EAnCcC,EAAYC,EAAa/U,EAkCvCqD,EAAQzF,GAAQqW,KAAuBjU,EAAOR,GAxC7C8D,QAAQ,oBAAqB,KAC7BA,QAAQ,WAAY,KACpBA,QAAQ,SAAU,IAClBA,QAAQ,SAAU,KAuCvB,GAAID,EAAO,CASP,GARAwR,EAAcV,GACV9Q,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,GACNA,EAAM,IA3CIyR,EA6CIzR,EAAM,GA7CE0R,EA6CEF,EA7CW7U,EA6CEA,EA5CzC8U,GAEsBjI,GAA2B5E,QAAQ6M,KACrC,IAAIlZ,KAChBmZ,EAAY,GACZA,EAAY,GACZA,EAAY,IACdC,WAEFrY,EAAgBqD,GAAQnC,iBAAkB,QAC1CmC,EAAOjC,UAAW,IAmClB,OAGJiC,EAAOqS,GAAKwC,EACZ7U,EAAOL,KAhCf,SAAyBsV,EAAWC,EAAgBC,GAChD,GAAIF,EACA,OAAOlC,GAAWkC,GACf,GAAIC,EAEP,OAAO,EAEP,IAAIE,EAAK1K,SAASyK,EAAW,IACzBvY,EAAIwY,EAAK,IAEb,OAAW,KADFA,EAAKxY,GAAK,KACHA,EAsBFyY,CAAgBhS,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAExDrD,EAAO5B,GAAKwM,GAActQ,MAAM,KAAM0F,EAAOqS,IAC7CrS,EAAO5B,GAAGkX,cAActV,EAAO5B,GAAGmX,gBAAkBvV,EAAOL,MAE3DhD,EAAgBqD,GAAQpC,SAAU,OAElCoC,EAAOjC,UAAW,EA4C1B,SAASyX,GAASva,EAAGC,EAAGua,GACpB,OAAS,MAALxa,EACOA,EAEF,MAALC,EACOA,EAEJua,EAoBX,SAASC,GAAgB1V,GACrB,IAAI/D,EACA4J,EAEA8P,EACAC,EACAC,EAvBkB7V,EAElB8V,EAkBArb,EAAQ,GAKZ,IAAIuF,EAAO5B,GAAX,CAgCA,IAzDsB4B,EA6BSA,EA3B3B8V,EAAW,IAAIla,KAAKvB,EAAM0b,OA2B9BJ,EA1BI3V,EAAOgW,QACA,CACHF,EAAShL,iBACTgL,EAASG,cACTH,EAASI,cAGV,CAACJ,EAASK,cAAeL,EAASM,WAAYN,EAASO,WAsB1DrW,EAAOgI,IAAyB,MAAnBhI,EAAOqS,GAAGjK,KAAqC,MAApBpI,EAAOqS,GAAGlK,KA0E1D,SAA+BnI,GAC3B,IAAIqQ,EAAGiG,EAAUhL,EAAMC,EAASN,EAAKC,EAAKqL,EAAMC,EAAiBC,EAGrD,OADZpG,EAAIrQ,EAAOgI,IACL0O,IAAqB,MAAPrG,EAAEsG,GAAoB,MAAPtG,EAAEuG,GACjC3L,EAAM,EACNC,EAAM,EAMNoL,EAAWd,GACPnF,EAAEqG,GACF1W,EAAOqS,GAAGnK,IACVyD,GAAWkL,KAAe,EAAG,GAAG9R,MAEpCuG,EAAOkK,GAASnF,EAAEsG,EAAG,KACrBpL,EAAUiK,GAASnF,EAAEuG,EAAG,IACV,GAAe,EAAVrL,KACfiL,GAAkB,KAGtBvL,EAAMjL,EAAOF,QAAQgX,MAAM7L,IAC3BC,EAAMlL,EAAOF,QAAQgX,MAAM5L,IAE3BuL,EAAU9K,GAAWkL,KAAe5L,EAAKC,GAEzCoL,EAAWd,GAASnF,EAAE0G,GAAI/W,EAAOqS,GAAGnK,IAAOuO,EAAQ1R,MAGnDuG,EAAOkK,GAASnF,EAAEA,EAAGoG,EAAQnL,MAElB,MAAP+E,EAAE1D,IAEFpB,EAAU8E,EAAE1D,GACE,GAAe,EAAVpB,KACfiL,GAAkB,GAER,MAAPnG,EAAEsB,GAETpG,EAAU8E,EAAEsB,EAAI1G,GACZoF,EAAEsB,EAAI,GAAW,EAANtB,EAAEsB,KACb6E,GAAkB,IAItBjL,EAAUN,GAGdK,EAAO,GAAKA,EAAOQ,GAAYwK,EAAUrL,EAAKC,GAC9CvO,EAAgBqD,GAAQuS,gBAAiB,EACf,MAAnBiE,EACP7Z,EAAgBqD,GAAQwS,kBAAmB,GAE3C+D,EAAOlL,GAAmBiL,EAAUhL,EAAMC,EAASN,EAAKC,GACxDlL,EAAOqS,GAAGnK,IAAQqO,EAAKxR,KACvB/E,EAAOgX,WAAaT,EAAK9K,WAlIzBwL,CAAsBjX,GAID,MAArBA,EAAOgX,aACPnB,EAAYL,GAASxV,EAAOqS,GAAGnK,IAAOyN,EAAYzN,MAG9ClI,EAAOgX,WAAazM,GAAWsL,IACT,IAAtB7V,EAAOgX,cAEPra,EAAgBqD,GAAQsS,oBAAqB,GAGjDzM,EAAO+E,GAAciL,EAAW,EAAG7V,EAAOgX,YAC1ChX,EAAOqS,GAAGlK,IAAStC,EAAKoQ,cACxBjW,EAAOqS,GAAGjK,IAAQvC,EAAKqQ,cAQtBja,EAAI,EAAGA,EAAI,GAAqB,MAAhB+D,EAAOqS,GAAGpW,KAAcA,EACzC+D,EAAOqS,GAAGpW,GAAKxB,EAAMwB,GAAK0Z,EAAY1Z,GAI1C,KAAOA,EAAI,EAAGA,IACV+D,EAAOqS,GAAGpW,GAAKxB,EAAMwB,GACD,MAAhB+D,EAAOqS,GAAGpW,GAAoB,IAANA,EAAU,EAAI,EAAK+D,EAAOqS,GAAGpW,GAKrC,KAApB+D,EAAOqS,GAAGhK,KACY,IAAtBrI,EAAOqS,GAAG/J,KACY,IAAtBtI,EAAOqS,GAAG9J,KACiB,IAA3BvI,EAAOqS,GAAG7J,MAEVxI,EAAOkX,UAAW,EAClBlX,EAAOqS,GAAGhK,IAAQ,GAGtBrI,EAAO5B,IAAM4B,EAAOgW,QAAUpL,GAn1ClC,SAAoBJ,EAAG5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GAGlC,IAAItR,EAYJ,OAVI2E,EAAI,KAAY,GAALA,GAEX3E,EAAO,IAAIjK,KAAK4O,EAAI,IAAK5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GACpC5R,SAASM,EAAKsQ,gBACdtQ,EAAKuR,YAAY5M,IAGrB3E,EAAO,IAAIjK,KAAK4O,EAAG5N,EAAG+P,EAAGuD,EAAGK,EAAG3I,EAAGuP,GAG/BtR,IAo0CmDvL,MACtD,KACAG,GAEJmb,EAAkB5V,EAAOgW,QACnBhW,EAAO5B,GAAGgN,YACVpL,EAAO5B,GAAG4W,SAIG,MAAfhV,EAAOL,MACPK,EAAO5B,GAAGkX,cAActV,EAAO5B,GAAGmX,gBAAkBvV,EAAOL,MAG3DK,EAAOkX,WACPlX,EAAOqS,GAAGhK,IAAQ,IAKlBrI,EAAOgI,SACgB,IAAhBhI,EAAOgI,GAAG2E,GACjB3M,EAAOgI,GAAG2E,IAAMiJ,IAEhBjZ,EAAgBqD,GAAQnC,iBAAkB,IAwElD,SAASqW,GAA0BlU,GAE/B,GAAIA,EAAOP,KAAOpF,EAAMgd,SAIxB,GAAIrX,EAAOP,KAAOpF,EAAMid,SAAxB,CAIAtX,EAAOqS,GAAK,GACZ1V,EAAgBqD,GAAQlD,OAAQ,EAgBhC,IAbA,IAEIiY,EAEAnS,EACA2U,EAGA7Z,EAj3DyBkF,EAAOnI,EAAOuF,EAy2DvCgU,EAAS,GAAKhU,EAAOR,GAMrBgY,EAAexD,EAAOzY,OACtBkc,EAAyB,EAG7B5P,EACI1E,EAAanD,EAAOP,GAAIO,EAAOF,SAASuD,MAAMd,IAAqB,GAElEtG,EAAI,EAAGA,EAAI4L,EAAOtM,OAAQU,IAC3B2G,EAAQiF,EAAO5L,IACf8Y,GAAef,EAAO3Q,MAAM+D,GAAsBxE,EAAO5C,KACrD,IAAI,MAGiB,GADrBuX,EAAUvD,EAAO1R,OAAO,EAAG0R,EAAO/L,QAAQ8M,KAC9BxZ,QACRoB,EAAgBqD,GAAQhD,YAAYd,KAAKqb,GAE7CvD,EAASA,EAAOnT,MACZmT,EAAO/L,QAAQ8M,GAAeA,EAAYxZ,QAE9Ckc,GAA0B1C,EAAYxZ,QAGtCmH,EAAqBE,IACjBmS,EACApY,EAAgBqD,GAAQlD,OAAQ,EAEhCH,EAAgBqD,GAAQjD,aAAab,KAAK0G,GAz4DzBA,EA24DGA,EA34DW5C,EA24DSA,EA14DvC,OADuBvF,EA24DGsa,IA14DlB/Z,EAAW6M,GAAQjF,IACpCiF,GAAOjF,GAAOnI,EAAOuF,EAAOqS,GAAIrS,EAAQ4C,IA04D7B5C,EAAOzB,UAAYwW,GAC1BpY,EAAgBqD,GAAQjD,aAAab,KAAK0G,GAKlDjG,EAAgBqD,GAAQ9C,cACpBsa,EAAeC,EACC,EAAhBzD,EAAOzY,QACPoB,EAAgBqD,GAAQhD,YAAYd,KAAK8X,GAKzChU,EAAOqS,GAAGhK,KAAS,KACiB,IAApC1L,EAAgBqD,GAAQvB,SACN,EAAlBuB,EAAOqS,GAAGhK,MAEV1L,EAAgBqD,GAAQvB,aAAUD,GAGtC7B,EAAgBqD,GAAQvC,gBAAkBuC,EAAOqS,GAAGxR,MAAM,GAC1DlE,EAAgBqD,GAAQrC,SAAWqC,EAAOwO,UAE1CxO,EAAOqS,GAAGhK,IAgBd,SAAyB9L,EAAQmb,EAAM/Z,GACnC,IAAIga,EAEJ,GAAgB,MAAZha,EAEA,OAAO+Z,EAEX,OAA2B,MAAvBnb,EAAOqb,aACArb,EAAOqb,aAAaF,EAAM/Z,IACX,MAAfpB,EAAOgS,QAEdoJ,EAAOpb,EAAOgS,KAAK5Q,KACP+Z,EAAO,KACfA,GAAQ,IAEPC,GAAiB,KAATD,IACTA,EAAO,IAEJA,GAlCOG,CACd7X,EAAOF,QACPE,EAAOqS,GAAGhK,IACVrI,EAAOwO,WAKC,QADZ9Q,EAAMf,EAAgBqD,GAAQtC,OAE1BsC,EAAOqS,GAAGnK,IAAQlI,EAAOF,QAAQgY,gBAAgBpa,EAAKsC,EAAOqS,GAAGnK,MAGpEwN,GAAgB1V,GAChBoS,GAAcpS,QA/EV4U,GAAkB5U,QAJlB0T,GAAc1T,GAwMtB,SAAS+X,GAAc/X,GACnB,IAgCqBA,EACjBvF,EAjCAA,EAAQuF,EAAOR,GACflD,EAAS0D,EAAOP,GAIpB,OAFAO,EAAOF,QAAUE,EAAOF,SAAWgS,GAAU9R,EAAON,IAEtC,OAAVjF,QAA8B+D,IAAXlC,GAAkC,KAAV7B,EACpCkE,EAAc,CAAExB,WAAW,KAGjB,iBAAV1C,IACPuF,EAAOR,GAAK/E,EAAQuF,EAAOF,QAAQkY,SAASvd,IAG5CyF,EAASzF,GACF,IAAIsF,EAAOqS,GAAc3X,KACzBkB,EAAOlB,GACduF,EAAO5B,GAAK3D,EACLD,EAAQ8B,GA1GvB,SAAkC0D,GAC9B,IAAIiY,EACAC,EACAC,EACAlc,EACAmc,EACAC,EACAC,GAAoB,EAExB,GAAyB,IAArBtY,EAAOP,GAAGlE,OAGV,OAFAoB,EAAgBqD,GAAQ1C,eAAgB,EACxC0C,EAAO5B,GAAK,IAAIxC,KAAKgD,KAIzB,IAAK3C,EAAI,EAAGA,EAAI+D,EAAOP,GAAGlE,OAAQU,IAC9Bmc,EAAe,EACfC,GAAmB,EACnBJ,EAAa/Y,EAAW,GAAIc,GACN,MAAlBA,EAAOgW,UACPiC,EAAWjC,QAAUhW,EAAOgW,SAEhCiC,EAAWxY,GAAKO,EAAOP,GAAGxD,GAC1BiY,GAA0B+D,GAEtBna,EAAQma,KACRI,GAAmB,GAIvBD,GAAgBzb,EAAgBsb,GAAY/a,cAG5Ckb,GAAkE,GAAlDzb,EAAgBsb,GAAYlb,aAAaxB,OAEzDoB,EAAgBsb,GAAYM,MAAQH,EAE/BE,EAaGF,EAAeD,IACfA,EAAcC,EACdF,EAAaD,IAbE,MAAfE,GACAC,EAAeD,GACfE,KAEAF,EAAcC,EACdF,EAAaD,EACTI,IACAC,GAAoB,IAWpCnc,EAAO6D,EAAQkY,GAAcD,GAkDzBO,CAAyBxY,GAClB1D,EACP4X,GAA0BlU,GAc1BvE,EADAhB,GADiBuF,EAVDA,GAWDR,IAEfQ,EAAO5B,GAAK,IAAIxC,KAAKvB,EAAM0b,OACpBpa,EAAOlB,GACduF,EAAO5B,GAAK,IAAIxC,KAAKnB,EAAM2B,WACH,iBAAV3B,EAjdtB,SAA0BuF,GACtB,IAAIuH,EAAUuL,GAAgBmB,KAAKjU,EAAOR,IAC1B,OAAZ+H,GAKJmM,GAAc1T,IACU,IAApBA,EAAOjC,kBACAiC,EAAOjC,SAKlB6W,GAAkB5U,IACM,IAApBA,EAAOjC,kBACAiC,EAAOjC,SAKdiC,EAAOzB,QACPyB,EAAOjC,UAAW,EAGlB1D,EAAMoe,wBAAwBzY,MAtB9BA,EAAO5B,GAAK,IAAIxC,MAAM2L,EAAQ,IA+c9BmR,CAAiB1Y,GACVxF,EAAQC,IACfuF,EAAOqS,GAAKxW,EAAIpB,EAAMoG,MAAM,GAAI,SAAUxF,GACtC,OAAOqP,SAASrP,EAAK,MAEzBqa,GAAgB1V,IACTjF,EAASN,GA1ExB,SAA0BuF,GACtB,IAII/D,EACA0c,EALA3Y,EAAO5B,KAKPua,OAAsBna,KADtBvC,EAAIsI,EAAqBvE,EAAOR,KAClB+N,IAAoBtR,EAAE4J,KAAO5J,EAAEsR,IACjDvN,EAAOqS,GAAKxW,EACR,CAACI,EAAE8I,KAAM9I,EAAE2J,MAAO+S,EAAW1c,EAAEyb,KAAMzb,EAAE2c,OAAQ3c,EAAE4c,OAAQ5c,EAAE6c,aAC3D,SAAUzd,GACN,OAAOA,GAAOqP,SAASrP,EAAK,MAIpCqa,GAAgB1V,IA6DZ+Y,CAAiB/Y,GACVtE,EAASjB,GAEhBuF,EAAO5B,GAAK,IAAIxC,KAAKnB,GAErBJ,EAAMoe,wBAAwBzY,GA1B7BlC,EAAQkC,KACTA,EAAO5B,GAAK,MAGT4B,IA0BX,SAASvD,GAAiBhC,EAAO6B,EAAQC,EAAQC,EAAQwc,GACrD,IAnEIhd,EAmEAyZ,EAAI,GA2BR,OAzBe,IAAXnZ,IAA8B,IAAXA,IACnBE,EAASF,EACTA,OAASkC,IAGE,IAAXjC,IAA8B,IAAXA,IACnBC,EAASD,EACTA,OAASiC,IAIRzD,EAASN,IAAUW,EAAcX,IACjCD,EAAQC,IAA2B,IAAjBA,EAAMc,UAEzBd,OAAQ+D,GAIZiX,EAAElW,kBAAmB,EACrBkW,EAAEO,QAAUP,EAAE7V,OAASoZ,EACvBvD,EAAE/V,GAAKnD,EACPkZ,EAAEjW,GAAK/E,EACPgb,EAAEhW,GAAKnD,EACPmZ,EAAElX,QAAU/B,GA5FRR,EAAM,IAAI+D,EAAOqS,GAAc2F,GA8FXtC,MA7FhByB,WAEJlb,EAAIid,IAAI,EAAG,KACXjd,EAAIkb,cAAW1Y,GAGZxC,EA0FX,SAAS6a,GAAYpc,EAAO6B,EAAQC,EAAQC,GACxC,OAAOC,GAAiBhC,EAAO6B,EAAQC,EAAQC,GAAQ,GAre3DnC,EAAMoe,wBAA0BlY,EAC5B,gSAGA,SAAUP,GACNA,EAAO5B,GAAK,IAAIxC,KAAKoE,EAAOR,IAAMQ,EAAOgW,QAAU,OAAS,OAuLpE3b,EAAMgd,SAAW,aAGjBhd,EAAMid,SAAW,aAySjB,IAAI4B,GAAe3Y,EACX,qGACA,WACI,IAAI4Y,EAAQtC,GAAYvc,MAAM,KAAMC,WACpC,OAAIL,KAAK4D,WAAaqb,EAAMrb,UACjBqb,EAAQjf,KAAOA,KAAOif,EAEtBxa,MAInBya,GAAe7Y,EACX,qGACA,WACI,IAAI4Y,EAAQtC,GAAYvc,MAAM,KAAMC,WACpC,OAAIL,KAAK4D,WAAaqb,EAAMrb,UACT5D,KAARif,EAAejf,KAAOif,EAEtBxa,MAUvB,SAAS0a,GAAOtd,EAAIud,GAChB,IAAItd,EAAKC,EAIT,GAHuB,IAAnBqd,EAAQ/d,QAAgBf,EAAQ8e,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQ/d,OACT,OAAOsb,KAGX,IADA7a,EAAMsd,EAAQ,GACTrd,EAAI,EAAGA,EAAIqd,EAAQ/d,SAAUU,EACzBqd,EAAQrd,GAAG6B,YAAawb,EAAQrd,GAAGF,GAAIC,KACxCA,EAAMsd,EAAQrd,IAGtB,OAAOD,EAgBX,IAIIud,GAAW,CACX,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eAyCJ,SAASC,GAASC,GACd,IAAI/U,EAAkBH,EAAqBkV,GACvCC,EAAQhV,EAAgBK,MAAQ,EAChC4U,EAAWjV,EAAgBkV,SAAW,EACtC7Q,EAASrE,EAAgBkB,OAAS,EAClCiU,EAAQnV,EAAgB4G,MAAQ5G,EAAgBoV,SAAW,EAC3DC,EAAOrV,EAAgB6I,KAAO,EAC9BQ,EAAQrJ,EAAgBgT,MAAQ,EAChCzJ,EAAUvJ,EAAgBkU,QAAU,EACpCxK,EAAU1J,EAAgBmU,QAAU,EACpCmB,EAAetV,EAAgBoU,aAAe,EAElD5e,KAAK6D,SAlDT,SAAyBnB,GACrB,IAAI+D,EAEA1E,EADAge,GAAiB,EAErB,IAAKtZ,KAAO/D,EACR,GACI5B,EAAW4B,EAAG+D,MAEuB,IAAjCsH,GAAQnN,KAAKye,GAAU5Y,IACZ,MAAV/D,EAAE+D,IAAiBxC,MAAMvB,EAAE+D,KAGhC,OAAO,EAIf,IAAK1E,EAAI,EAAGA,EAAIsd,GAAShe,SAAUU,EAC/B,GAAIW,EAAE2c,GAAStd,IAAK,CAChB,GAAIge,EACA,OAAO,EAEPC,WAAWtd,EAAE2c,GAAStd,OAASkJ,EAAMvI,EAAE2c,GAAStd,OAChDge,GAAiB,GAK7B,OAAO,EAuBSE,CAAgBzV,GAGhCxK,KAAKkgB,eACAJ,EACS,IAAV5L,EACU,IAAVH,EACQ,IAARF,EAAe,GAAK,GAGxB7T,KAAKmgB,OAASN,EAAe,EAARF,EAIrB3f,KAAKogB,SAAWvR,EAAoB,EAAX4Q,EAAuB,GAARD,EAExCxf,KAAKqgB,MAAQ,GAEbrgB,KAAK4F,QAAUgS,KAEf5X,KAAKsgB,UAGT,SAASC,GAAWpf,GAChB,OAAOA,aAAeme,GAG1B,SAASkB,GAAS7Y,GACd,OAAIA,EAAS,GACyB,EAA3BI,KAAK0Y,OAAO,EAAI9Y,GAEhBI,KAAK0Y,MAAM9Y,GAuB1B,SAAS+Y,GAAOhY,EAAOiY,GACnBlY,EAAeC,EAAO,EAAG,EAAG,WACxB,IAAIgY,EAAS1gB,KAAK4gB,YACdC,EAAO,IAKX,OAJIH,EAAS,IACTA,GAAUA,EACVG,EAAO,KAGPA,EACAnZ,KAAYgZ,EAAS,IAAK,GAC1BC,EACAjZ,IAAWgZ,EAAS,GAAI,KAKpCA,GAAO,IAAK,KACZA,GAAO,KAAM,IAIb5T,GAAc,IAAKF,IACnBE,GAAc,KAAMF,IACpBgB,GAAc,CAAC,IAAK,MAAO,SAAUrN,EAAO2I,EAAOpD,GAC/CA,EAAOgW,SAAU,EACjBhW,EAAOL,KAAOqb,GAAiBlU,GAAkBrM,KAQrD,IAAIwgB,GAAc,kBAElB,SAASD,GAAiBE,EAASlH,GAC/B,IAEImH,EACAlN,EAHAmN,GAAWpH,GAAU,IAAI3Q,MAAM6X,GAKnC,OAAgB,OAAZE,EACO,KAOQ,KAFnBnN,EAAuB,IADvBkN,IADQC,EAAQA,EAAQ7f,OAAS,IAAM,IACtB,IAAI8H,MAAM4X,KAAgB,CAAC,IAAK,EAAG,IAClC,GAAW9V,EAAMgW,EAAM,KAElB,EAAiB,MAAbA,EAAM,GAAalN,GAAWA,EAI7D,SAASoN,GAAgB5gB,EAAO6gB,GAC5B,IAAItf,EAAKuf,EACT,OAAID,EAAM1b,QACN5D,EAAMsf,EAAME,QACZD,GACKrb,EAASzF,IAAUkB,EAAOlB,GACrBA,EAAM2B,UACNya,GAAYpc,GAAO2B,WAAaJ,EAAII,UAE9CJ,EAAIoC,GAAGqd,QAAQzf,EAAIoC,GAAGhC,UAAYmf,GAClClhB,EAAM4F,aAAajE,GAAK,GACjBA,GAEA6a,GAAYpc,GAAOihB,QAIlC,SAASC,GAAc/e,GAGnB,OAAQqF,KAAK0Y,MAAM/d,EAAEwB,GAAGwd,qBA0J5B,SAASC,KACL,QAAO3hB,KAAK4D,YAAY5D,KAAK0F,QAA2B,IAAjB1F,KAAK2F,SApJhDxF,EAAM4F,aAAe,aAwJrB,IAAI6b,GAAc,wDAIdC,GAAW,sKAEf,SAASC,GAAevhB,EAAOkG,GAC3B,IAGIoa,EACAkB,EACAC,EALAzC,EAAWhf,EAEX4I,EAAQ,KAkEZ,OA7DIoX,GAAWhgB,GACXgf,EAAW,CACPtC,GAAI1c,EAAM2f,cACVzN,EAAGlS,EAAM4f,MACT9J,EAAG9V,EAAM6f,SAEN5e,EAASjB,KAAW0D,OAAO1D,IAClCgf,EAAW,GACP9Y,EACA8Y,EAAS9Y,IAAQlG,EAEjBgf,EAASO,cAAgBvf,IAErB4I,EAAQyY,GAAY7H,KAAKxZ,KACjCsgB,EAAoB,MAAb1X,EAAM,IAAc,EAAI,EAC/BoW,EAAW,CACPjP,EAAG,EACHmC,EAAGxH,EAAM9B,EAAM+E,KAAS2S,EACxB7K,EAAG/K,EAAM9B,EAAMgF,KAAS0S,EACxBne,EAAGuI,EAAM9B,EAAMiF,KAAWyS,EAC1BnT,EAAGzC,EAAM9B,EAAMkF,KAAWwS,EAC1B5D,GAAIhS,EAAMuV,GAA8B,IAArBrX,EAAMmF,MAAwBuS,KAE7C1X,EAAQ0Y,GAAS9H,KAAKxZ,KAC9BsgB,EAAoB,MAAb1X,EAAM,IAAc,EAAI,EAC/BoW,EAAW,CACPjP,EAAG2R,GAAS9Y,EAAM,GAAI0X,GACtBxK,EAAG4L,GAAS9Y,EAAM,GAAI0X,GACtB1K,EAAG8L,GAAS9Y,EAAM,GAAI0X,GACtBpO,EAAGwP,GAAS9Y,EAAM,GAAI0X,GACtB7K,EAAGiM,GAAS9Y,EAAM,GAAI0X,GACtBne,EAAGuf,GAAS9Y,EAAM,GAAI0X,GACtBnT,EAAGuU,GAAS9Y,EAAM,GAAI0X,KAEP,MAAZtB,EAEPA,EAAW,GAES,iBAAbA,IACN,SAAUA,GAAY,OAAQA,KAE/ByC,EAiDR,SAA2BE,EAAMjD,GAC7B,IAAInd,EACJ,IAAMogB,EAAKte,YAAaqb,EAAMrb,UAC1B,MAAO,CAAEkc,aAAc,EAAGjR,OAAQ,GAGtCoQ,EAAQkC,GAAgBlC,EAAOiD,GAC3BA,EAAKC,SAASlD,GACdnd,EAAMsgB,GAA0BF,EAAMjD,KAEtCnd,EAAMsgB,GAA0BnD,EAAOiD,IACnCpC,cAAgBhe,EAAIge,aACxBhe,EAAI+M,QAAU/M,EAAI+M,QAGtB,OAAO/M,EAhEOugB,CACN1F,GAAY4C,EAASra,MACrByX,GAAY4C,EAASta,MAGzBsa,EAAW,IACFtC,GAAK+E,EAAQlC,aACtBP,EAASlJ,EAAI2L,EAAQnT,QAGzBkT,EAAM,IAAIzC,GAASC,GAEfgB,GAAWhgB,IAAUO,EAAWP,EAAO,aACvCwhB,EAAInc,QAAUrF,EAAMqF,SAGpB2a,GAAWhgB,IAAUO,EAAWP,EAAO,cACvCwhB,EAAIle,SAAWtD,EAAMsD,UAGlBke,EAMX,SAASE,GAASK,EAAKzB,GAInB,IAAI/e,EAAMwgB,GAAOtC,WAAWsC,EAAIlZ,QAAQ,IAAK,MAE7C,OAAQnF,MAAMnC,GAAO,EAAIA,GAAO+e,EAGpC,SAASuB,GAA0BF,EAAMjD,GACrC,IAAInd,EAAM,GAUV,OARAA,EAAI+M,OACAoQ,EAAMvT,QAAUwW,EAAKxW,QAAyC,IAA9BuT,EAAMpU,OAASqX,EAAKrX,QACpDqX,EAAKZ,QAAQvC,IAAIjd,EAAI+M,OAAQ,KAAK0T,QAAQtD,MACxCnd,EAAI+M,OAGV/M,EAAIge,aAAgBb,EAASiD,EAAKZ,QAAQvC,IAAIjd,EAAI+M,OAAQ,KAEnD/M,EAsBX,SAAS0gB,GAAYC,EAAWvb,GAC5B,OAAO,SAAU9B,EAAKsd,GAClB,IAASC,EAmBT,OAjBe,OAAXD,GAAoBze,OAAOye,KAC3Bzb,EACIC,EACA,YACIA,EACA,uDACAA,EACA,kGAGRyb,EAAMvd,EACNA,EAAMsd,EACNA,EAASC,GAIbC,GAAY5iB,KADN8hB,GAAe1c,EAAKsd,GACHD,GAChBziB,MAIf,SAAS4iB,GAAYvZ,EAAKkW,EAAUsD,EAAU9c,GAC1C,IAAI+Z,EAAeP,EAASW,cACxBL,EAAOW,GAASjB,EAASY,OACzBtR,EAAS2R,GAASjB,EAASa,SAE1B/W,EAAIzF,YAKTmC,EAA+B,MAAhBA,GAA8BA,EAEzC8I,GACAU,GAASlG,EAAKoC,EAAIpC,EAAK,SAAWwF,EAASgU,GAE3ChD,GACArU,EAAMnC,EAAK,OAAQoC,EAAIpC,EAAK,QAAUwW,EAAOgD,GAE7C/C,GACAzW,EAAInF,GAAGqd,QAAQlY,EAAInF,GAAGhC,UAAY4d,EAAe+C,GAEjD9c,GACA5F,EAAM4F,aAAasD,EAAKwW,GAAQhR,IA5FxCiT,GAAejgB,GAAKyd,GAAS5e,UAC7BohB,GAAegB,QA9Xf,WACI,OAAOhB,GAAepd,MA4d1B,IAAIqa,GAAMyD,GAAY,EAAG,OACrBO,GAAWP,IAAa,EAAG,YAE/B,SAASQ,GAASziB,GACd,MAAwB,iBAAVA,GAAsBA,aAAiB0iB,OAIzD,SAASC,GAAc3iB,GACnB,OACIyF,EAASzF,IACTkB,EAAOlB,IACPyiB,GAASziB,IACTiB,EAASjB,IAgDjB,SAA+BA,GAC3B,IAAI4iB,EAAY7iB,EAAQC,GACpB6iB,GAAe,EACfD,IACAC,EAGkB,IAFd7iB,EAAM8iB,OAAO,SAAUC,GACnB,OAAQ9hB,EAAS8hB,IAASN,GAASziB,KACpCc,QAEX,OAAO8hB,GAAaC,EAxDhBG,CAAsBhjB,IAO9B,SAA6BA,GACzB,IA4BIwB,EACAyhB,EA7BAC,EAAa5iB,EAASN,KAAWW,EAAcX,GAC/CmjB,GAAe,EACfC,EAAa,CACT,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MAKR,IAAK5hB,EAAI,EAAGA,EAAI4hB,EAAWtiB,OAAQU,GAAK,EACpCyhB,EAAWG,EAAW5hB,GACtB2hB,EAAeA,GAAgB5iB,EAAWP,EAAOijB,GAGrD,OAAOC,GAAcC,EA3CjBE,CAAoBrjB,IANjB,MAOHA,EAwPR,SAASsjB,GAAU9iB,EAAGC,GAClB,GAAID,EAAE4K,OAAS3K,EAAE2K,OAGb,OAAQkY,GAAU7iB,EAAGD,GAGzB,IAAI+iB,EAAyC,IAAvB9iB,EAAE6J,OAAS9J,EAAE8J,SAAgB7J,EAAE0K,QAAU3K,EAAE2K,SAE7DqY,EAAShjB,EAAEugB,QAAQvC,IAAI+E,EAAgB,UAOvCE,EAHAhjB,EAAI+iB,EAAS,GAGH/iB,EAAI+iB,IAAWA,EAFfhjB,EAAEugB,QAAQvC,IAAI+E,EAAiB,EAAG,YAMlC9iB,EAAI+iB,IAFJhjB,EAAEugB,QAAQvC,IAAqB,EAAjB+E,EAAoB,UAETC,GAIvC,QAASD,EAAiBE,IAAW,EAmHzC,SAAS3hB,GAAOoE,GACZ,IAAIwd,EAEJ,YAAY3f,IAARmC,EACOzG,KAAK4F,QAAQ0R,OAGC,OADrB2M,EAAgBrM,GAAUnR,MAEtBzG,KAAK4F,QAAUqe,GAEZjkB,MA1HfG,EAAM+jB,cAAgB,uBACtB/jB,EAAMgkB,iBAAmB,yBA6HzB,IAAIC,GAAO/d,EACP,kJACA,SAAUI,GACN,YAAYnC,IAARmC,EACOzG,KAAK+I,aAEL/I,KAAKqC,OAAOoE,KAK/B,SAASsC,KACL,OAAO/I,KAAK4F,QAGhB,IAGIye,GAAmB,YAGvB,SAASC,GAAMC,EAAUC,GACrB,OAASD,EAAWC,EAAWA,GAAWA,EAG9C,SAASC,GAAiBnU,EAAG5N,EAAG+P,GAE5B,OAAInC,EAAI,KAAY,GAALA,EAEJ,IAAI5O,KAAK4O,EAAI,IAAK5N,EAAG+P,GAAK4R,GAE1B,IAAI3iB,KAAK4O,EAAG5N,EAAG+P,GAAGvQ,UAIjC,SAASwiB,GAAepU,EAAG5N,EAAG+P,GAE1B,OAAInC,EAAI,KAAY,GAALA,EAEJ5O,KAAKiP,IAAIL,EAAI,IAAK5N,EAAG+P,GAAK4R,GAE1B3iB,KAAKiP,IAAIL,EAAG5N,EAAG+P,GAsb9B,SAASkS,GAAa1X,EAAU5K,GAC5B,OAAOA,EAAOuiB,cAAc3X,GAehC,SAAS4X,KASL,IARA,IAAIC,EAAa,GACbC,EAAa,GACbC,EAAe,GACfjV,EAAc,GAGdkV,EAAOjlB,KAAKilB,OAEXljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAClCgjB,EAAW/iB,KAAKoL,GAAY6X,EAAKljB,GAAGmF,OACpC4d,EAAW9iB,KAAKoL,GAAY6X,EAAKljB,GAAG+V,OACpCkN,EAAahjB,KAAKoL,GAAY6X,EAAKljB,GAAGmjB,SAEtCnV,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAGmF,OACrC6I,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAG+V,OACrC/H,EAAY/N,KAAKoL,GAAY6X,EAAKljB,GAAGmjB,SAGzCllB,KAAKmlB,WAAa,IAAIhY,OAAO,KAAO4C,EAAYnJ,KAAK,KAAO,IAAK,KACjE5G,KAAKolB,eAAiB,IAAIjY,OAAO,KAAO4X,EAAWne,KAAK,KAAO,IAAK,KACpE5G,KAAKqlB,eAAiB,IAAIlY,OAAO,KAAO2X,EAAWle,KAAK,KAAO,IAAK,KACpE5G,KAAKslB,iBAAmB,IAAInY,OACxB,KAAO6X,EAAape,KAAK,KAAO,IAChC,KAcR,SAAS2e,GAAuB7c,EAAO8c,GACnC/c,EAAe,EAAG,CAACC,EAAOA,EAAMrH,QAAS,EAAGmkB,GAoFhD,SAASC,GAAqBllB,EAAO6Q,EAAMC,EAASN,EAAKC,GACrD,IAAI0U,EACJ,OAAa,MAATnlB,EACOkR,GAAWzR,KAAM+Q,EAAKC,GAAKnG,OAElC6a,EAAc9T,GAAYrR,EAAOwQ,EAAKC,IAClCI,IACAA,EAAOsU,GAMnB,SAAoBtJ,EAAUhL,EAAMC,EAASN,EAAKC,GAC9C,IAAI2U,EAAgBxU,GAAmBiL,EAAUhL,EAAMC,EAASN,EAAKC,GACjErF,EAAO+E,GAAciV,EAAc9a,KAAM,EAAG8a,EAAcpU,WAK9D,OAHAvR,KAAK6K,KAAKc,EAAKiF,kBACf5Q,KAAK0L,MAAMC,EAAKoQ,eAChB/b,KAAK2L,KAAKA,EAAKqQ,cACRhc,MAXeY,KAAKZ,KAAMO,EAAO6Q,EAAMC,EAASN,EAAKC,IAjYhEvI,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,KAAM,EAAG,EAAG,WAC3BA,EAAe,MAAO,EAAG,EAAG,WAC5BA,EAAe,OAAQ,EAAG,EAAG,WAC7BA,EAAe,QAAS,EAAG,EAAG,aAE9BA,EAAe,IAAK,CAAC,IAAK,GAAI,KAAM,WACpCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,WAClCA,EAAe,IAAK,CAAC,MAAO,GAAI,EAAG,WACnCA,EAAe,IAAK,CAAC,OAAQ,GAAI,EAAG,WAEpCqE,GAAc,IAAK6X,IACnB7X,GAAc,KAAM6X,IACpB7X,GAAc,MAAO6X,IACrB7X,GAAc,OAmOd,SAAsBG,EAAU5K,GAC5B,OAAOA,EAAOujB,cAAc3Y,KAnOhCH,GAAc,QAsOd,SAAwBG,EAAU5K,GAC9B,OAAOA,EAAOwjB,gBAAgB5Y,KArOlCW,GAAc,CAAC,IAAK,KAAM,MAAO,OAAQ,SAAU,SAC/CrN,EACA2I,EACApD,EACA4C,GAEA,IAAIlF,EAAMsC,EAAOF,QAAQkgB,UAAUvlB,EAAOmI,EAAO5C,EAAOzB,SACpDb,EACAf,EAAgBqD,GAAQtC,IAAMA,EAE9Bf,EAAgBqD,GAAQ5C,WAAa3C,IAI7CuM,GAAc,IAAKL,IACnBK,GAAc,KAAML,IACpBK,GAAc,MAAOL,IACrBK,GAAc,OAAQL,IACtBK,GAAc,KAsNd,SAA6BG,EAAU5K,GACnC,OAAOA,EAAO0jB,sBAAwBtZ,KArN1CmB,GAAc,CAAC,IAAK,KAAM,MAAO,QAASI,IAC1CJ,GAAc,CAAC,MAAO,SAAUrN,EAAO2I,EAAOpD,EAAQ4C,GAClD,IAAIS,EACArD,EAAOF,QAAQmgB,uBACf5c,EAAQ5I,EAAM4I,MAAMrD,EAAOF,QAAQmgB,uBAGnCjgB,EAAOF,QAAQogB,oBACf9c,EAAM8E,IAAQlI,EAAOF,QAAQogB,oBAAoBzlB,EAAO4I,GAExDD,EAAM8E,IAAQwC,SAASjQ,EAAO,MA4OtCkI,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAKoc,WAAa,MAG7B3T,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,OAAOzI,KAAKimB,cAAgB,MAOhCV,GAAuB,OAAQ,YAC/BA,GAAuB,QAAS,YAChCA,GAAuB,OAAQ,eAC/BA,GAAuB,QAAS,eAIhCzb,EAAa,WAAY,MACzBA,EAAa,cAAe,MAI5BY,EAAgB,WAAY,GAC5BA,EAAgB,cAAe,GAI/BoC,GAAc,IAAKJ,IACnBI,GAAc,IAAKJ,IACnBI,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,OAAQP,GAAWN,GACjCa,GAAc,OAAQP,GAAWN,GACjCa,GAAc,QAASN,GAAWN,IAClCY,GAAc,QAASN,GAAWN,IAElC2B,GAAkB,CAAC,OAAQ,QAAS,OAAQ,SAAU,SAClDtN,EACA6Q,EACAtL,EACA4C,GAEA0I,EAAK1I,EAAMN,OAAO,EAAG,IAAM6C,EAAM1K,KAGrCsN,GAAkB,CAAC,KAAM,MAAO,SAAUtN,EAAO6Q,EAAMtL,EAAQ4C,GAC3D0I,EAAK1I,GAASvI,EAAMoQ,kBAAkBhQ,KAsE1CkI,EAAe,IAAK,EAAG,KAAM,WAI7BqB,EAAa,UAAW,KAIxBY,EAAgB,UAAW,GAI3BoC,GAAc,IAAKhB,GACnB8B,GAAc,IAAK,SAAUrN,EAAO2I,GAChCA,EAAM+E,IAA8B,GAApBhD,EAAM1K,GAAS,KAanCkI,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrCqB,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,GAIxBoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/Be,GAAc,KAAM,SAAUG,EAAU5K,GAEpC,OAAO4K,EACD5K,EAAO6jB,yBAA2B7jB,EAAO8jB,cACzC9jB,EAAO+jB,iCAGjBxY,GAAc,CAAC,IAAK,MAAOM,IAC3BN,GAAc,KAAM,SAAUrN,EAAO2I,GACjCA,EAAMgF,IAAQjD,EAAM1K,EAAM4I,MAAMgD,IAAW,MAK/C,IAAIka,GAAmB/a,EAAW,QAAQ,GAI1C7C,EAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3CqB,EAAa,YAAa,OAG1BY,EAAgB,YAAa,GAI7BoC,GAAc,MAAOR,IACrBQ,GAAc,OAAQd,GACtB4B,GAAc,CAAC,MAAO,QAAS,SAAUrN,EAAO2I,EAAOpD,GACnDA,EAAOgX,WAAa7R,EAAM1K,KAiB9BkI,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCqB,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/B6B,GAAc,CAAC,IAAK,MAAOQ,IAI3B,IAAIkY,GAAehb,EAAW,WAAW,GAIzC7C,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCqB,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BoC,GAAc,IAAKX,IACnBW,GAAc,KAAMX,GAAWJ,GAC/B6B,GAAc,CAAC,IAAK,MAAOS,IAI3B,IA8CI3F,GAAO6d,GA9CPC,GAAelb,EAAW,WAAW,GA+CzC,IA3CA7C,EAAe,IAAK,EAAG,EAAG,WACtB,SAAUzI,KAAK4e,cAAgB,OAGnCnW,EAAe,EAAG,CAAC,KAAM,GAAI,EAAG,WAC5B,SAAUzI,KAAK4e,cAAgB,MAGnCnW,EAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,EAAe,EAAG,CAAC,OAAQ,GAAI,EAAG,WAC9B,OAA4B,GAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,QAAS,GAAI,EAAG,WAC/B,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,SAAU,GAAI,EAAG,WAChC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,UAAW,GAAI,EAAG,WACjC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,WAAY,GAAI,EAAG,WAClC,OAA4B,IAArBzI,KAAK4e,gBAEhBnW,EAAe,EAAG,CAAC,YAAa,GAAI,EAAG,WACnC,OAA4B,IAArBzI,KAAK4e,gBAKhB9U,EAAa,cAAe,MAI5BY,EAAgB,cAAe,IAI/BoC,GAAc,IAAKR,GAAWR,GAC9BgB,GAAc,KAAMR,GAAWP,GAC/Be,GAAc,MAAOR,GAAWN,GAG3BtD,GAAQ,OAAQA,GAAMrH,QAAU,EAAGqH,IAAS,IAC7CoE,GAAcpE,GAAO+D,IAGzB,SAASga,GAAQlmB,EAAO2I,GACpBA,EAAMoF,IAAerD,EAAuB,KAAhB,KAAO1K,IAGvC,IAAKmI,GAAQ,IAAKA,GAAMrH,QAAU,EAAGqH,IAAS,IAC1CkF,GAAclF,GAAO+d,IAGzBF,GAAoBjb,EAAW,gBAAgB,GAI/C7C,EAAe,IAAK,EAAG,EAAG,YAC1BA,EAAe,KAAM,EAAG,EAAG,YAY3B,IAAIie,GAAQ7gB,EAAOnF,UAgHnB,SAASimB,GAAmB7M,GACxB,OAAOA,EA/GX4M,GAAM3H,IAAMA,GACZ2H,GAAM7R,SApoCN,SAAoB+R,EAAMC,GAEG,IAArBxmB,UAAUgB,SACLhB,UAAU,GAGJ6iB,GAAc7iB,UAAU,KAC/BumB,EAAOvmB,UAAU,GACjBwmB,OAAUviB,GA/CtB,SAAwB/D,GAcpB,IAbA,IAAIkjB,EAAa5iB,EAASN,KAAWW,EAAcX,GAC/CmjB,GAAe,EACfC,EAAa,CACT,UACA,UACA,UACA,WACA,WACA,YAKH5hB,EAAI,EAAGA,EAAI4hB,EAAWtiB,OAAQU,GAAK,EAEpC2hB,EAAeA,GAAgB5iB,EAAWP,EAD/BojB,EAAW5hB,IAI1B,OAAO0hB,GAAcC,EA6BNoD,CAAezmB,UAAU,MAChCwmB,EAAUxmB,UAAU,GACpBumB,OAAOtiB,GANPuiB,EADAD,OAAOtiB,GAYf,IAAIuX,EAAM+K,GAAQjK,KACdoK,EAAM5F,GAAgBtF,EAAK7b,MAAMgnB,QAAQ,OACzC5kB,EAASjC,EAAM8mB,eAAejnB,KAAM+mB,IAAQ,WAC5Czd,EACIud,IACC1f,EAAW0f,EAAQzkB,IACdykB,EAAQzkB,GAAQxB,KAAKZ,KAAM6b,GAC3BgL,EAAQzkB,IAEtB,OAAOpC,KAAKoC,OACRkH,GAAUtJ,KAAK+I,aAAa8L,SAASzS,EAAQpC,KAAM2c,GAAYd,MA2mCvE6K,GAAMpF,MAvmCN,WACI,OAAO,IAAIzb,EAAO7F,OAumCtB0mB,GAAMrF,KA/hCN,SAAc9gB,EAAO6J,EAAO8c,GACxB,IAAIC,EAAMC,EAAW9d,EAErB,IAAKtJ,KAAK4D,UACN,OAAOc,IAKX,KAFAyiB,EAAOhG,GAAgB5gB,EAAOP,OAEpB4D,UACN,OAAOc,IAOX,OAJA0iB,EAAoD,KAAvCD,EAAKvG,YAAc5gB,KAAK4gB,aAErCxW,EAAQD,EAAeC,IAGnB,IAAK,OACDd,EAASua,GAAU7jB,KAAMmnB,GAAQ,GACjC,MACJ,IAAK,QACD7d,EAASua,GAAU7jB,KAAMmnB,GACzB,MACJ,IAAK,UACD7d,EAASua,GAAU7jB,KAAMmnB,GAAQ,EACjC,MACJ,IAAK,SACD7d,GAAUtJ,KAAOmnB,GAAQ,IACzB,MACJ,IAAK,SACD7d,GAAUtJ,KAAOmnB,GAAQ,IACzB,MACJ,IAAK,OACD7d,GAAUtJ,KAAOmnB,GAAQ,KACzB,MACJ,IAAK,MACD7d,GAAUtJ,KAAOmnB,EAAOC,GAAa,MACrC,MACJ,IAAK,OACD9d,GAAUtJ,KAAOmnB,EAAOC,GAAa,OACrC,MACJ,QACI9d,EAAStJ,KAAOmnB,EAGxB,OAAOD,EAAU5d,EAASwB,EAASxB,IAk/BvCod,GAAMW,MA1uBN,SAAejd,GACX,IAAIwc,EAAMU,EAEV,QAAchjB,KADd8F,EAAQD,EAAeC,KACc,gBAAVA,IAA4BpK,KAAK4D,UACxD,OAAO5D,KAKX,OAFAsnB,EAActnB,KAAK0F,OAASgf,GAAiBD,GAErCra,GACJ,IAAK,OACDwc,EAAOU,EAAYtnB,KAAK6K,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACD+b,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QAAW1L,KAAK0L,QAAU,EAAK,EACpC,GACA,EACR,MACJ,IAAK,QACDkb,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACDkb,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,OAAS3L,KAAKqR,UAAY,GAC/B,EACR,MACJ,IAAK,UACDuV,EACIU,EACItnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,QAAU3L,KAAKunB,aAAe,GAAK,GACxC,EACR,MACJ,IAAK,MACL,IAAK,OACDX,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS1L,KAAK2L,OAAS,GAAK,EACjE,MACJ,IAAK,OACDib,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAzIM,KA2IFtC,GACIsC,GAAQ5mB,KAAK0F,OAAS,EA7ItB,IA6I0B1F,KAAK4gB,aA5IjC,MA+IF,EACJ,MACJ,IAAK,SACDgG,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GApJQ,IAoJgBtC,GAAMsC,EApJtB,KAoJ6C,EACrD,MACJ,IAAK,SACDA,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAzJQ,IAyJgBtC,GAAMsC,EAzJtB,KAyJ6C,EACrD,MAKR,OAFA5mB,KAAKkE,GAAGqd,QAAQqF,GAChBzmB,EAAM4F,aAAa/F,MAAM,GAClBA,MAyqBX0mB,GAAMtkB,OAp5BN,SAAgBolB,GAERA,EADCA,IACaxnB,KAAK2hB,QACbxhB,EAAMgkB,iBACNhkB,EAAM+jB,eAEhB,IAAI5a,EAASN,EAAahJ,KAAMwnB,GAChC,OAAOxnB,KAAK+I,aAAa0e,WAAWne,IA84BxCod,GAAMxhB,KA34BN,SAAc0hB,EAAMc,GAChB,OACI1nB,KAAK4D,YACHoC,EAAS4gB,IAASA,EAAKhjB,WAAc+Y,GAAYiK,GAAMhjB,WAElDke,GAAe,CAAE7c,GAAIjF,KAAMkF,KAAM0hB,IACnCvkB,OAAOrC,KAAKqC,UACZslB,UAAUD,GAER1nB,KAAK+I,aAAaS,eAm4BjCkd,GAAMkB,QA/3BN,SAAiBF,GACb,OAAO1nB,KAAKkF,KAAKyX,KAAe+K,IA+3BpChB,GAAMzhB,GA53BN,SAAY2hB,EAAMc,GACd,OACI1nB,KAAK4D,YACHoC,EAAS4gB,IAASA,EAAKhjB,WAAc+Y,GAAYiK,GAAMhjB,WAElDke,GAAe,CAAE5c,KAAMlF,KAAMiF,GAAI2hB,IACnCvkB,OAAOrC,KAAKqC,UACZslB,UAAUD,GAER1nB,KAAK+I,aAAaS,eAo3BjCkd,GAAMmB,MAh3BN,SAAeH,GACX,OAAO1nB,KAAKiF,GAAG0X,KAAe+K,IAg3BlChB,GAAMjb,IArjIN,SAAmBrB,GAEf,OAAIjD,EAAWnH,KADfoK,EAAQD,EAAeC,KAEZpK,KAAKoK,KAETpK,MAijIX0mB,GAAMoB,UAznBN,WACI,OAAOrlB,EAAgBzC,MAAM+C,UAynBjC2jB,GAAMnE,QA7mCN,SAAiBhiB,EAAO6J,GACpB,IAAI2d,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GACvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,UAAY6lB,EAAW7lB,UAE5B6lB,EAAW7lB,UAAYlC,KAAKshB,QAAQ0F,QAAQ5c,GAAOlI,YAqmClEwkB,GAAMvE,SAjmCN,SAAkB5hB,EAAO6J,GACrB,IAAI2d,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GACvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,UAAY6lB,EAAW7lB,UAE5BlC,KAAKshB,QAAQ+F,MAAMjd,GAAOlI,UAAY6lB,EAAW7lB,YAylChEwkB,GAAMsB,UArlCN,SAAmB9iB,EAAMD,EAAImF,EAAO6d,GAChC,IAAIC,EAAYliB,EAASd,GAAQA,EAAOyX,GAAYzX,GAChDijB,EAAUniB,EAASf,GAAMA,EAAK0X,GAAY1X,GAC9C,SAAMjF,KAAK4D,WAAaskB,EAAUtkB,WAAaukB,EAAQvkB,cAK/B,OAFxBqkB,EAAcA,GAAe,MAEZ,GACPjoB,KAAKuiB,QAAQ2F,EAAW9d,IACvBpK,KAAKmiB,SAAS+F,EAAW9d,MACZ,MAAnB6d,EAAY,GACPjoB,KAAKmiB,SAASgG,EAAS/d,IACtBpK,KAAKuiB,QAAQ4F,EAAS/d,MAykCrCsc,GAAM0B,OArkCN,SAAgB7nB,EAAO6J,GACnB,IACIie,EADAN,EAAa/hB,EAASzF,GAASA,EAAQoc,GAAYpc,GAEvD,SAAMP,KAAK4D,YAAamkB,EAAWnkB,aAIrB,iBADdwG,EAAQD,EAAeC,IAAU,eAEtBpK,KAAKkC,YAAc6lB,EAAW7lB,WAErCmmB,EAAUN,EAAW7lB,UAEjBlC,KAAKshB,QAAQ0F,QAAQ5c,GAAOlI,WAAammB,GACzCA,GAAWroB,KAAKshB,QAAQ+F,MAAMjd,GAAOlI,aAyjCjDwkB,GAAM4B,cApjCN,SAAuB/nB,EAAO6J,GAC1B,OAAOpK,KAAKooB,OAAO7nB,EAAO6J,IAAUpK,KAAKuiB,QAAQhiB,EAAO6J,IAojC5Dsc,GAAM6B,eAjjCN,SAAwBhoB,EAAO6J,GAC3B,OAAOpK,KAAKooB,OAAO7nB,EAAO6J,IAAUpK,KAAKmiB,SAAS5hB,EAAO6J,IAijC7Dsc,GAAM9iB,QAxoBN,WACI,OAAOA,EAAQ5D,OAwoBnB0mB,GAAMtC,KAAOA,GACbsC,GAAMrkB,OAASA,GACfqkB,GAAM3d,WAAaA,GACnB2d,GAAMve,IAAM+W,GACZwH,GAAMjX,IAAMuP,GACZ0H,GAAM8B,aA1oBN,WACI,OAAOvmB,EAAO,GAAIQ,EAAgBzC,QA0oBtC0mB,GAAMjf,IA5jIN,SAAmB2C,EAAOgB,GACtB,GAAqB,iBAAVhB,EAIP,IAFA,IAAIqe,EAzFZ,SAA6BC,GACzB,IACIC,EADAve,EAAQ,GAEZ,IAAKue,KAAKD,EACF5nB,EAAW4nB,EAAUC,IACrBve,EAAMpI,KAAK,CAAE+H,KAAM4e,EAAGhe,SAAUF,EAAWke,KAMnD,OAHAve,EAAM4F,KAAK,SAAUjP,EAAGC,GACpB,OAAOD,EAAE4J,SAAW3J,EAAE2J,WAEnBP,EA8Eewe,CADlBxe,EAAQC,EAAqBD,IAGxBrI,EAAI,EAAGA,EAAI0mB,EAAYpnB,OAAQU,IAChC/B,KAAKyoB,EAAY1mB,GAAGgI,MAAMK,EAAMqe,EAAY1mB,GAAGgI,YAInD,GAAI5C,EAAWnH,KADfoK,EAAQD,EAAeC,KAEnB,OAAOpK,KAAKoK,GAAOgB,GAG3B,OAAOpL,MA+iIX0mB,GAAMM,QA/zBN,SAAiB5c,GACb,IAAIwc,EAAMU,EAEV,QAAchjB,KADd8F,EAAQD,EAAeC,KACc,gBAAVA,IAA4BpK,KAAK4D,UACxD,OAAO5D,KAKX,OAFAsnB,EAActnB,KAAK0F,OAASgf,GAAiBD,GAErCra,GACJ,IAAK,OACDwc,EAAOU,EAAYtnB,KAAK6K,OAAQ,EAAG,GACnC,MACJ,IAAK,UACD+b,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QAAW1L,KAAK0L,QAAU,EAC/B,GAEJ,MACJ,IAAK,QACDkb,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS,GAC9C,MACJ,IAAK,OACDkb,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,OAAS3L,KAAKqR,WAEvB,MACJ,IAAK,UACDuV,EAAOU,EACHtnB,KAAK6K,OACL7K,KAAK0L,QACL1L,KAAK2L,QAAU3L,KAAKunB,aAAe,IAEvC,MACJ,IAAK,MACL,IAAK,OACDX,EAAOU,EAAYtnB,KAAK6K,OAAQ7K,KAAK0L,QAAS1L,KAAK2L,QACnD,MACJ,IAAK,OACDib,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GACJsC,GAAQ5mB,KAAK0F,OAAS,EAzElB,IAyEsB1F,KAAK4gB,aAxE7B,MA2EN,MACJ,IAAK,SACDgG,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GAAMsC,EA/EN,KAgFR,MACJ,IAAK,SACDA,EAAO5mB,KAAKkE,GAAGhC,UACf0kB,GAAQtC,GAAMsC,EApFN,KAqFR,MAKR,OAFA5mB,KAAKkE,GAAGqd,QAAQqF,GAChBzmB,EAAM4F,aAAa/F,MAAM,GAClBA,MAowBX0mB,GAAM3D,SAAWA,GACjB2D,GAAMmC,QAjrBN,WACI,IAAInmB,EAAI1C,KACR,MAAO,CACH0C,EAAEmI,OACFnI,EAAEgJ,QACFhJ,EAAEiJ,OACFjJ,EAAE8a,OACF9a,EAAEgc,SACFhc,EAAEic,SACFjc,EAAEkc,gBAyqBV8H,GAAMoC,SArqBN,WACI,IAAIpmB,EAAI1C,KACR,MAAO,CACHwf,MAAO9c,EAAEmI,OACTgE,OAAQnM,EAAEgJ,QACVC,KAAMjJ,EAAEiJ,OACRkI,MAAOnR,EAAEmR,QACTE,QAASrR,EAAEqR,UACXG,QAASxR,EAAEwR,UACX4L,aAAcpd,EAAEod,iBA6pBxB4G,GAAMqC,OAvrBN,WACI,OAAO,IAAIrnB,KAAK1B,KAAKkC,YAurBzBwkB,GAAMsC,YAx+BN,SAAqBC,GACjB,IAAKjpB,KAAK4D,UACN,OAAO,KAEX,IAAIpB,GAAqB,IAAfymB,EACNvmB,EAAIF,EAAMxC,KAAKshB,QAAQ9e,MAAQxC,KACnC,OAAI0C,EAAEmI,OAAS,GAAgB,KAAXnI,EAAEmI,OACX7B,EACHtG,EACAF,EACM,iCACA,gCAGV2E,EAAWzF,KAAKhB,UAAUsoB,aAEtBxmB,EACOxC,KAAK+oB,SAASC,cAEd,IAAItnB,KAAK1B,KAAKkC,UAA+B,GAAnBlC,KAAK4gB,YAAmB,KACpDoI,cACA5f,QAAQ,IAAKJ,EAAatG,EAAG,MAGnCsG,EACHtG,EACAF,EAAM,+BAAiC,+BA+8B/CkkB,GAAMwC,QAr8BN,WACI,IAAKlpB,KAAK4D,UACN,MAAO,qBAAuB5D,KAAKsF,GAAK,OAE5C,IAEI6jB,EACAte,EAEAue,EALAtgB,EAAO,SACPugB,EAAO,GAcX,OATKrpB,KAAKspB,YACNxgB,EAA4B,IAArB9I,KAAK4gB,YAAoB,aAAe,mBAC/CyI,EAAO,KAEXF,EAAS,IAAMrgB,EAAO,MACtB+B,EAAO,GAAK7K,KAAK6K,QAAU7K,KAAK6K,QAAU,KAAO,OAAS,SAE1Due,EAASC,EAAO,OAETrpB,KAAKoC,OAAO+mB,EAASte,EAHjB,wBAGmCue,IAm7B5B,oBAAXG,QAAwC,MAAdA,OAAOC,MACxC9C,GAAM6C,OAAOC,IAAI,+BAAiC,WAC9C,MAAO,UAAYxpB,KAAKoC,SAAW,MAG3CskB,GAAM+C,OAjqBN,WAEI,OAAOzpB,KAAK4D,UAAY5D,KAAKgpB,cAAgB,MAgqBjDtC,GAAM/lB,SAp/BN,WACI,OAAOX,KAAKshB,QAAQjf,OAAO,MAAMD,OAAO,qCAo/B5CskB,GAAMgD,KArsBN,WACI,OAAO3hB,KAAKiD,MAAMhL,KAAKkC,UAAY,MAqsBvCwkB,GAAMxkB,QA1sBN,WACI,OAAOlC,KAAKkE,GAAGhC,UAAkC,KAArBlC,KAAK2F,SAAW,IA0sBhD+gB,GAAMiD,aAppBN,WACI,MAAO,CACHppB,MAAOP,KAAKsF,GACZlD,OAAQpC,KAAKuF,GACblD,OAAQrC,KAAK4F,QACbkZ,MAAO9e,KAAK0F,OACZpD,OAAQtC,KAAKqE,UA+oBrBqiB,GAAMkD,QAzgBN,WAKI,IAJA,IAEIxkB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAGmF,KAEnB,GAAI+d,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAGmF,KAIvB,MAAO,IAyfXwf,GAAMqD,UAtfN,WAKI,IAJA,IAEI3kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAGmjB,OAEnB,GAAID,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAGmjB,OAIvB,MAAO,IAseXwB,GAAMsD,QAneN,WAKI,IAJA,IAEI5kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CAIrC,GAFAqD,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAE9B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,MACvC,OAAO7E,EAAKljB,GAAG+V,KAEnB,GAAImN,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MACvC,OAAO5E,EAAKljB,GAAG+V,KAIvB,MAAO,IAmdX4O,GAAMuD,QAhdN,WAMI,IALA,IAEIC,EACA9kB,EACA6f,EAAOjlB,KAAK+I,aAAakc,OACxBljB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAMlC,GALAmoB,EAAMjF,EAAKljB,GAAG8nB,OAAS5E,EAAKljB,GAAG+nB,MAAQ,GAAM,EAG7C1kB,EAAMpF,KAAKshB,QAAQ0F,QAAQ,OAAO9kB,UAG7B+iB,EAAKljB,GAAG8nB,OAASzkB,GAAOA,GAAO6f,EAAKljB,GAAG+nB,OACvC7E,EAAKljB,GAAG+nB,OAAS1kB,GAAOA,GAAO6f,EAAKljB,GAAG8nB,MAExC,OACK7pB,KAAK6K,OAAS1K,EAAM8kB,EAAKljB,GAAG8nB,OAAOhf,QAAUqf,EAC9CjF,EAAKljB,GAAG2e,OAKpB,OAAO1gB,KAAK6K,QA0bhB6b,GAAM7b,KAAO4F,GACbiW,GAAM9b,WAzkHN,WACI,OAAOA,EAAW5K,KAAK6K,SAykH3B6b,GAAMtK,SAjUN,SAAwB7b,GACpB,OAAOklB,GAAqB7kB,KACxBZ,KACAO,EACAP,KAAKoR,OACLpR,KAAKqR,UACLrR,KAAK+I,aAAa6T,MAAM7L,IACxB/Q,KAAK+I,aAAa6T,MAAM5L,MA2ThC0V,GAAMT,YAvTN,SAA2B1lB,GACvB,OAAOklB,GAAqB7kB,KACxBZ,KACAO,EACAP,KAAK4f,UACL5f,KAAKunB,aACL,EACA,IAiTRb,GAAMhH,QAAUgH,GAAMjH,SA/OtB,SAAuBlf,GACnB,OAAgB,MAATA,EACDwH,KAAKgD,MAAM/K,KAAK0L,QAAU,GAAK,GAC/B1L,KAAK0L,MAAoB,GAAbnL,EAAQ,GAAUP,KAAK0L,QAAU,IA6OvDgb,GAAMhb,MAAQgE,GACdgX,GAAM9a,YAhuHN,WACI,OAAOA,GAAY5L,KAAK6K,OAAQ7K,KAAK0L,UAguHzCgb,GAAMtV,KAAOsV,GAAM/G,MAj7GnB,SAAoBpf,GAChB,IAAI6Q,EAAOpR,KAAK+I,aAAaqI,KAAKpR,MAClC,OAAgB,MAATO,EAAgB6Q,EAAOpR,KAAK+e,IAAqB,GAAhBxe,EAAQ6Q,GAAW,MAg7G/DsV,GAAM9G,QAAU8G,GAAMyD,SA76GtB,SAAuB5pB,GACnB,IAAI6Q,EAAOK,GAAWzR,KAAM,EAAG,GAAGoR,KAClC,OAAgB,MAAT7Q,EAAgB6Q,EAAOpR,KAAK+e,IAAqB,GAAhBxe,EAAQ6Q,GAAW,MA46G/DsV,GAAM9U,YA1SN,WACI,IAAIwY,EAAWpqB,KAAK+I,aAAa6T,MACjC,OAAOhL,GAAY5R,KAAK6K,OAAQuf,EAASrZ,IAAKqZ,EAASpZ,MAyS3D0V,GAAM2D,gBAtSN,WACI,IAAID,EAAWpqB,KAAK+I,aAAa6T,MACjC,OAAOhL,GAAY5R,KAAKoc,WAAYgO,EAASrZ,IAAKqZ,EAASpZ,MAqS/D0V,GAAM4D,eApTN,WACI,OAAO1Y,GAAY5R,KAAK6K,OAAQ,EAAG,IAoTvC6b,GAAM6D,sBAjTN,WACI,OAAO3Y,GAAY5R,KAAKimB,cAAe,EAAG,IAiT9CS,GAAM/a,KAAO0a,GACbK,GAAMrT,IAAMqT,GAAM7G,KA9pGlB,SAAyBtf,GACrB,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,IAvNkBnE,EAAO8B,EAuNrBgR,EAAMrT,KAAK0F,OAAS1F,KAAKkE,GAAGgN,YAAclR,KAAKkE,GAAG4W,SACtD,OAAa,MAATva,GAxNcA,EAyNOA,EAzNA8B,EAyNOrC,KAAK+I,aAAjCxI,EAxNiB,iBAAVA,EACAA,EAGN0D,MAAM1D,GAKU,iBADrBA,EAAQ8B,EAAOmQ,cAAcjS,IAElBA,EAGJ,KARIiQ,SAASjQ,EAAO,IAoNhBP,KAAK+e,IAAIxe,EAAQ8S,EAAK,MAEtBA,GAspGfqT,GAAMrV,QAlpGN,SAA+B9Q,GAC3B,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,IAAI2M,GAAWrR,KAAKqT,MAAQ,EAAIrT,KAAK+I,aAAa6T,MAAM7L,KAAO,EAC/D,OAAgB,MAATxQ,EAAgB8Q,EAAUrR,KAAK+e,IAAIxe,EAAQ8Q,EAAS,MA8oG/DqV,GAAMa,WA3oGN,SAA4BhnB,GACxB,IAAKP,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAOlC,GAAa,MAATnE,EAIA,OAAOP,KAAKqT,OAAS,EAHrB,IAjOiB9S,EAAO8B,EAiOpBgP,GAjOa9Q,EAiOaA,EAjON8B,EAiOarC,KAAK+I,aAhOzB,iBAAVxI,EACA8B,EAAOmQ,cAAcjS,GAAS,GAAK,EAEvC0D,MAAM1D,GAAS,KAAOA,GA8NzB,OAAOP,KAAKqT,IAAIrT,KAAKqT,MAAQ,EAAIhC,EAAUA,EAAU,IAioG7DqV,GAAMnV,UAhMN,SAAyBhR,GACrB,IAAIgR,EACAxJ,KAAK0Y,OACAzgB,KAAKshB,QAAQ0F,QAAQ,OAAShnB,KAAKshB,QAAQ0F,QAAQ,SAAW,OAC/D,EACR,OAAgB,MAATzmB,EAAgBgR,EAAYvR,KAAK+e,IAAIxe,EAAQgR,EAAW,MA4LnEmV,GAAMlJ,KAAOkJ,GAAM7S,MAAQa,GAC3BgS,GAAMhI,OAASgI,GAAM3S,QAAUuS,GAC/BI,GAAM/H,OAAS+H,GAAMxS,QAAUsS,GAC/BE,GAAM9H,YAAc8H,GAAM5G,aAAeyG,GACzCG,GAAM9F,UAhnDN,SAAsBrgB,EAAOiqB,EAAeC,GACxC,IACIC,EADAhK,EAAS1gB,KAAK2F,SAAW,EAE7B,IAAK3F,KAAK4D,UACN,OAAgB,MAATrD,EAAgBP,KAAO0E,IAElC,GAAa,MAATnE,EAiCA,OAAOP,KAAK0F,OAASgb,EAASe,GAAczhB,MAhC5C,GAAqB,iBAAVO,GAEP,GAAc,QADdA,EAAQugB,GAAiBlU,GAAkBrM,IAEvC,OAAOP,UAEJ+H,KAAKC,IAAIzH,GAAS,KAAOkqB,IAChClqB,GAAgB,IAwBpB,OAtBKP,KAAK0F,QAAU8kB,IAChBE,EAAcjJ,GAAczhB,OAEhCA,KAAK2F,QAAUpF,EACfP,KAAK0F,QAAS,EACK,MAAfglB,GACA1qB,KAAK+e,IAAI2L,EAAa,KAEtBhK,IAAWngB,KACNiqB,GAAiBxqB,KAAK2qB,kBACvB/H,GACI5iB,KACA8hB,GAAevhB,EAAQmgB,EAAQ,KAC/B,GACA,GAEI1gB,KAAK2qB,oBACb3qB,KAAK2qB,mBAAoB,EACzBxqB,EAAM4F,aAAa/F,MAAM,GACzBA,KAAK2qB,kBAAoB,OAG1B3qB,MA4kDf0mB,GAAMlkB,IAxjDN,SAAwBgoB,GACpB,OAAOxqB,KAAK4gB,UAAU,EAAG4J,IAwjD7B9D,GAAMlF,MArjDN,SAA0BgJ,GAStB,OARIxqB,KAAK0F,SACL1F,KAAK4gB,UAAU,EAAG4J,GAClBxqB,KAAK0F,QAAS,EAEV8kB,GACAxqB,KAAK+iB,SAAStB,GAAczhB,MAAO,MAGpCA,MA6iDX0mB,GAAMkE,UA1iDN,WACI,IAGQC,EAOR,OAViB,MAAb7qB,KAAKyF,KACLzF,KAAK4gB,UAAU5gB,KAAKyF,MAAM,GAAO,GACP,iBAAZzF,KAAKsF,KAEN,OADTulB,EAAQ/J,GAAiBnU,GAAa3M,KAAKsF,KAE3CtF,KAAK4gB,UAAUiK,GAEf7qB,KAAK4gB,UAAU,GAAG,IAGnB5gB,MAgiDX0mB,GAAMoE,qBA7hDN,SAA8BvqB,GAC1B,QAAKP,KAAK4D,YAGVrD,EAAQA,EAAQoc,GAAYpc,GAAOqgB,YAAc,GAEzC5gB,KAAK4gB,YAAcrgB,GAAS,IAAO,IAwhD/CmmB,GAAMqE,MArhDN,WACI,OACI/qB,KAAK4gB,YAAc5gB,KAAKshB,QAAQ5V,MAAM,GAAGkV,aACzC5gB,KAAK4gB,YAAc5gB,KAAKshB,QAAQ5V,MAAM,GAAGkV,aAmhDjD8F,GAAM4C,QAz/CN,WACI,QAAOtpB,KAAK4D,YAAa5D,KAAK0F,QAy/ClCghB,GAAMsE,YAt/CN,WACI,QAAOhrB,KAAK4D,WAAY5D,KAAK0F,QAs/CjCghB,GAAM/E,MAAQA,GACd+E,GAAM5H,MAAQ6C,GACd+E,GAAMuE,SAzFN,WACI,OAAOjrB,KAAK0F,OAAS,MAAQ,IAyFjCghB,GAAMwE,SAtFN,WACI,OAAOlrB,KAAK0F,OAAS,6BAA+B,IAsFxDghB,GAAMyE,MAAQ9kB,EACV,kDACAggB,IAEJK,GAAM7X,OAASxI,EACX,mDACAqJ,IAEJgX,GAAMlH,MAAQnZ,EACV,iDACAoK,IAEJiW,GAAM2C,KAAOhjB,EACT,2GA9lDJ,SAAoB9F,EAAOiqB,GACvB,OAAa,MAATjqB,GACqB,iBAAVA,IACPA,GAASA,GAGbP,KAAK4gB,UAAUrgB,EAAOiqB,GAEfxqB,OAECA,KAAK4gB,cAulDrB8F,GAAM0E,aAAe/kB,EACjB,0GAtiDJ,WACI,IAAK9E,EAAYvB,KAAKqrB,eAClB,OAAOrrB,KAAKqrB,cAGhB,IACIpM,EADA1D,EAAI,GAcR,OAXAvW,EAAWuW,EAAGvb,OACdub,EAAIsC,GAActC,IAEZpD,IACF8G,GAAQ1D,EAAE7V,OAASvD,EAAkBwa,IAARpB,EAAEpD,IAC/BnY,KAAKqrB,cACDrrB,KAAK4D,WAAoD,EAtOrE,SAAuB0nB,EAAQC,EAAQC,GAKnC,IAJA,IAAI3mB,EAAMkD,KAAK0H,IAAI6b,EAAOjqB,OAAQkqB,EAAOlqB,QACrCoqB,EAAa1jB,KAAKC,IAAIsjB,EAAOjqB,OAASkqB,EAAOlqB,QAC7CqqB,EAAQ,EAEP3pB,EAAI,EAAGA,EAAI8C,EAAK9C,KAEZypB,GAAeF,EAAOvpB,KAAOwpB,EAAOxpB,KACnCypB,GAAevgB,EAAMqgB,EAAOvpB,MAAQkJ,EAAMsgB,EAAOxpB,MAEnD2pB,IAGR,OAAOA,EAAQD,EAyNWE,CAAcpQ,EAAEpD,GAAI8G,EAAM4J,YAEhD7oB,KAAKqrB,eAAgB,EAGlBrrB,KAAKqrB,gBAmiDhB,IAAIO,GAAUpkB,EAAO9G,UAuCrB,SAASmrB,GAAMzpB,EAAQ0pB,EAAOC,EAAOC,GACjC,IAAI3pB,EAASuV,KACTpV,EAAML,IAAYsF,IAAIukB,EAAQF,GAClC,OAAOzpB,EAAO0pB,GAAOvpB,EAAKJ,GAG9B,SAAS6pB,GAAe7pB,EAAQ0pB,EAAOC,GAQnC,GAPIvqB,EAASY,KACT0pB,EAAQ1pB,EACRA,OAASkC,GAGblC,EAASA,GAAU,GAEN,MAAT0pB,EACA,OAAOD,GAAMzpB,EAAQ0pB,EAAOC,EAAO,SAKvC,IAFA,IACIG,EAAM,GACLnqB,EAAI,EAAGA,EAAI,GAAIA,IAChBmqB,EAAInqB,GAAK8pB,GAAMzpB,EAAQL,EAAGgqB,EAAO,SAErC,OAAOG,EAWX,SAASC,GAAiBC,EAAchqB,EAAQ0pB,EAAOC,GAO/C3pB,GANwB,kBAAjBgqB,EACH5qB,EAASY,KACT0pB,EAAQ1pB,EACRA,OAASkC,IAKblC,EAASgqB,EAETA,GAAe,EAEX5qB,EAHJsqB,EAAQ1pB,KAIJ0pB,EAAQ1pB,EACRA,OAASkC,IARJlC,GAAU,IAcvB,IAEIL,EAFAM,EAASuV,KACTyU,EAAQD,EAAe/pB,EAAOua,MAAM7L,IAAM,EAE1Cmb,EAAM,GAEV,GAAa,MAATJ,EACA,OAAOD,GAAMzpB,GAAS0pB,EAAQO,GAAS,EAAGN,EAAO,OAGrD,IAAKhqB,EAAI,EAAGA,EAAI,EAAGA,IACfmqB,EAAInqB,GAAK8pB,GAAMzpB,GAASL,EAAIsqB,GAAS,EAAGN,EAAO,OAEnD,OAAOG,EAxGXN,GAAQ/W,SAn9IR,SAAkBpO,EAAK4C,EAAKwS,GACxB,IAAIvS,EAAStJ,KAAKssB,UAAU7lB,IAAQzG,KAAKssB,UAAoB,SAC7D,OAAOnlB,EAAWmC,GAAUA,EAAO1I,KAAKyI,EAAKwS,GAAOvS,GAk9IxDsiB,GAAQliB,eAx1IR,SAAwBjD,GACpB,IAAIrE,EAASpC,KAAKusB,gBAAgB9lB,GAC9B+lB,EAAcxsB,KAAKusB,gBAAgB9lB,EAAIgmB,eAE3C,OAAIrqB,IAAWoqB,EACJpqB,GAGXpC,KAAKusB,gBAAgB9lB,GAAO+lB,EACvBrjB,MAAMd,GACN1G,IAAI,SAAU+qB,GACX,MACY,SAARA,GACQ,OAARA,GACQ,OAARA,GACQ,SAARA,EAEOA,EAAI/lB,MAAM,GAEd+lB,IAEV9lB,KAAK,IAEH5G,KAAKusB,gBAAgB9lB,KAk0IhCmlB,GAAQpiB,YA7zIR,WACI,OAAOxJ,KAAK2sB,cA6zIhBf,GAAQhjB,QAvzIR,SAAiBjB,GACb,OAAO3H,KAAK4sB,SAASxjB,QAAQ,KAAMzB,IAuzIvCikB,GAAQ9N,SAAW6I,GACnBiF,GAAQnE,WAAad,GACrBiF,GAAQjW,aAnyIR,SAAsBhO,EAAQ+f,EAAe5N,EAAQ+S,GACjD,IAAIvjB,EAAStJ,KAAK8sB,cAAchT,GAChC,OAAO3S,EAAWmC,GACZA,EAAO3B,EAAQ+f,EAAe5N,EAAQ+S,GACtCvjB,EAAOF,QAAQ,MAAOzB,IAgyIhCikB,GAAQmB,WA7xIR,SAAoB1L,EAAM/X,GACtB,IAAIlH,EAASpC,KAAK8sB,cAAqB,EAAPzL,EAAW,SAAW,QACtD,OAAOla,EAAW/E,GAAUA,EAAOkH,GAAUlH,EAAOgH,QAAQ,MAAOE,IA4xIvEsiB,GAAQnkB,IA/iJR,SAAa3B,GACT,IAAIX,EAAMpD,EACV,IAAKA,KAAK+D,EACFhF,EAAWgF,EAAQ/D,KAEfoF,EADJhC,EAAOW,EAAO/D,IAEV/B,KAAK+B,GAAKoD,EAEVnF,KAAK,IAAM+B,GAAKoD,GAI5BnF,KAAK+X,QAAUjS,EAIf9F,KAAKomB,+BAAiC,IAAIjZ,QACrCnN,KAAKkmB,wBAAwB8G,QAAUhtB,KAAKmmB,cAAc6G,QACvD,IACA,UAAUA,SA6hJtBpB,GAAQ3G,KA1qBR,SAAoBviB,EAAGN,GAKnB,IAJA,IAEIuJ,EACAsZ,EAAOjlB,KAAKitB,OAASrV,GAAU,MAAMqV,MACpClrB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAAG,CACrC,cAAekjB,EAAKljB,GAAG8nB,OACnB,IAAK,SAEDle,EAAOxL,EAAM8kB,EAAKljB,GAAG8nB,OAAO7C,QAAQ,OACpC/B,EAAKljB,GAAG8nB,MAAQle,EAAKzJ,UACrB,MAGR,cAAe+iB,EAAKljB,GAAG+nB,OACnB,IAAK,YACD7E,EAAKljB,GAAG+nB,MAASoD,EAAAA,EACjB,MACJ,IAAK,SAEDvhB,EAAOxL,EAAM8kB,EAAKljB,GAAG+nB,OAAO9C,QAAQ,OAAO9kB,UAC3C+iB,EAAKljB,GAAG+nB,MAAQne,EAAKzJ,UACrB,OAGZ,OAAO+iB,GAkpBX2G,GAAQ9F,UA/oBR,SAAyB8D,EAASxnB,EAAQE,GACtC,IAAIP,EACA0X,EAEAvS,EACA4Q,EACAoN,EAHAD,EAAOjlB,KAAKilB,OAMhB,IAFA2E,EAAUA,EAAQ6C,cAEb1qB,EAAI,EAAG0X,EAAIwL,EAAK5jB,OAAQU,EAAI0X,IAAK1X,EAKlC,GAJAmF,EAAO+d,EAAKljB,GAAGmF,KAAKulB,cACpB3U,EAAOmN,EAAKljB,GAAG+V,KAAK2U,cACpBvH,EAASD,EAAKljB,GAAGmjB,OAAOuH,cAEpBnqB,EACA,OAAQF,GACJ,IAAK,IACL,IAAK,KACL,IAAK,MACD,GAAI0V,IAAS8R,EACT,OAAO3E,EAAKljB,GAEhB,MAEJ,IAAK,OACD,GAAImF,IAAS0iB,EACT,OAAO3E,EAAKljB,GAEhB,MAEJ,IAAK,QACD,GAAImjB,IAAW0E,EACX,OAAO3E,EAAKljB,GAEhB,WAEL,GAA6C,GAAzC,CAACmF,EAAM4Q,EAAMoN,GAAQnX,QAAQ6b,GACpC,OAAO3E,EAAKljB,IA2mBxB6pB,GAAQhO,gBAtmBR,SAA+Bpa,EAAKqH,GAChC,IAAIqf,EAAM1mB,EAAIqmB,OAASrmB,EAAIsmB,MAAQ,GAAM,EACzC,YAAaxlB,IAATuG,EACO1K,EAAMqD,EAAIqmB,OAAOhf,OAEjB1K,EAAMqD,EAAIqmB,OAAOhf,QAAUA,EAAOrH,EAAIkd,QAAUwJ,GAkmB/D0B,GAAQhH,cAjgBR,SAAuB3X,GAInB,OAHKnM,EAAWd,KAAM,mBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKqlB,eAAiBrlB,KAAKmlB,YA8fjDyG,GAAQhG,cAzgBR,SAAuB3Y,GAInB,OAHKnM,EAAWd,KAAM,mBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKolB,eAAiBplB,KAAKmlB,YAsgBjDyG,GAAQ/F,gBA5fR,SAAyB5Y,GAIrB,OAHKnM,EAAWd,KAAM,qBAClB6kB,GAAiBjkB,KAAKZ,MAEnBiN,EAAWjN,KAAKslB,iBAAmBtlB,KAAKmlB,YA0fnDyG,GAAQ/c,OAp9HR,SAAsBnM,EAAGN,GACrB,OAAKM,EAKEpC,EAAQN,KAAKogB,SACdpgB,KAAKogB,QAAQ1d,EAAEgJ,SACf1L,KAAKogB,SACApgB,KAAKogB,QAAQ+M,UAAY/d,IAAkBxF,KAAKxH,GAC3C,SACA,cACRM,EAAEgJ,SAVCpL,EAAQN,KAAKogB,SACdpgB,KAAKogB,QACLpgB,KAAKogB,QAAoB,YAi9HvCwL,GAAQhd,YAt8HR,SAA2BlM,EAAGN,GAC1B,OAAKM,EAKEpC,EAAQN,KAAKotB,cACdptB,KAAKotB,aAAa1qB,EAAEgJ,SACpB1L,KAAKotB,aACDhe,GAAiBxF,KAAKxH,GAAU,SAAW,cAC7CM,EAAEgJ,SARCpL,EAAQN,KAAKotB,cACdptB,KAAKotB,aACLptB,KAAKotB,aAAyB,YAm8H5CxB,GAAQ5c,YA34HR,SAA2Bqe,EAAWjrB,EAAQE,GAC1C,IAAIP,EAAGsH,EAAK0D,EAEZ,GAAI/M,KAAKstB,kBACL,OAnDR,SAA2BD,EAAWjrB,EAAQE,GAC1C,IAAIP,EACAwrB,EACAlkB,EACAmkB,EAAMH,EAAUI,oBACpB,IAAKztB,KAAK0tB,aAKN,IAHA1tB,KAAK0tB,aAAe,GACpB1tB,KAAK2tB,iBAAmB,GACxB3tB,KAAK4tB,kBAAoB,GACpB7rB,EAAI,EAAGA,EAAI,KAAMA,EAClBsH,EAAMlH,EAAU,CAAC,IAAMJ,IACvB/B,KAAK4tB,kBAAkB7rB,GAAK/B,KAAK4O,YAC7BvF,EACA,IACFokB,oBACFztB,KAAK2tB,iBAAiB5rB,GAAK/B,KAAK6O,OAAOxF,EAAK,IAAIokB,oBAIxD,OAAInrB,EACe,QAAXF,GAEe,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,IACvBD,EAAK,MAGT,KADfA,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,IACtBD,EAAK,KAGb,QAAXnrB,GAEY,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,MAK3B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,IAF9BD,EAGa,MAGZ,KADZA,EAAKxf,GAAQnN,KAAKZ,KAAK2tB,iBAAkBH,MAK1B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAK4tB,kBAAmBJ,IAF/BD,EAGa,MASH3sB,KAAKZ,KAAMqtB,EAAWjrB,EAAQE,GAY3D,IATKtC,KAAK0tB,eACN1tB,KAAK0tB,aAAe,GACpB1tB,KAAK2tB,iBAAmB,GACxB3tB,KAAK4tB,kBAAoB,IAMxB7rB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAmBrB,GAjBAsH,EAAMlH,EAAU,CAAC,IAAMJ,IACnBO,IAAWtC,KAAK2tB,iBAAiB5rB,KACjC/B,KAAK2tB,iBAAiB5rB,GAAK,IAAIoL,OAC3B,IAAMnN,KAAK6O,OAAOxF,EAAK,IAAID,QAAQ,IAAK,IAAM,IAC9C,KAEJpJ,KAAK4tB,kBAAkB7rB,GAAK,IAAIoL,OAC5B,IAAMnN,KAAK4O,YAAYvF,EAAK,IAAID,QAAQ,IAAK,IAAM,IACnD,MAGH9G,GAAWtC,KAAK0tB,aAAa3rB,KAC9BgL,EACI,IAAM/M,KAAK6O,OAAOxF,EAAK,IAAM,KAAOrJ,KAAK4O,YAAYvF,EAAK,IAC9DrJ,KAAK0tB,aAAa3rB,GAAK,IAAIoL,OAAOJ,EAAM3D,QAAQ,IAAK,IAAK,MAI1D9G,GACW,SAAXF,GACApC,KAAK2tB,iBAAiB5rB,GAAG6H,KAAKyjB,GAE9B,OAAOtrB,EACJ,GACHO,GACW,QAAXF,GACApC,KAAK4tB,kBAAkB7rB,GAAG6H,KAAKyjB,GAE/B,OAAOtrB,EACJ,IAAKO,GAAUtC,KAAK0tB,aAAa3rB,GAAG6H,KAAKyjB,GAC5C,OAAOtrB,IA41HnB6pB,GAAQ7c,YA1xHR,SAAqB9B,GACjB,OAAIjN,KAAKstB,mBACAxsB,EAAWd,KAAM,iBAClB2P,GAAmB/O,KAAKZ,MAExBiN,EACOjN,KAAKmQ,mBAELnQ,KAAKiQ,eAGXnP,EAAWd,KAAM,kBAClBA,KAAKiQ,aAAeX,IAEjBtP,KAAKmQ,oBAAsBlD,EAC5BjN,KAAKmQ,mBACLnQ,KAAKiQ,eA2wHnB2b,GAAQ9c,iBA/yHR,SAA0B7B,GACtB,OAAIjN,KAAKstB,mBACAxsB,EAAWd,KAAM,iBAClB2P,GAAmB/O,KAAKZ,MAExBiN,EACOjN,KAAKoQ,wBAELpQ,KAAKkQ,oBAGXpP,EAAWd,KAAM,uBAClBA,KAAKkQ,kBAAoBb,IAEtBrP,KAAKoQ,yBAA2BnD,EACjCjN,KAAKoQ,wBACLpQ,KAAKkQ,oBAgyHnB0b,GAAQxa,KAvhHR,SAAoB/H,GAChB,OAAOoI,GAAWpI,EAAKrJ,KAAK4c,MAAM7L,IAAK/Q,KAAK4c,MAAM5L,KAAKI,MAuhH3Dwa,GAAQiC,eA3gHR,WACI,OAAO7tB,KAAK4c,MAAM5L,KA2gHtB4a,GAAQkC,eAhhHR,WACI,OAAO9tB,KAAK4c,MAAM7L,KAihHtB6a,GAAQxZ,SA35GR,SAAwB1P,EAAGN,GACvB,IAAIgQ,EAAW9R,EAAQN,KAAK+tB,WACtB/tB,KAAK+tB,UACL/tB,KAAK+tB,UACDrrB,IAAW,IAANA,GAAc1C,KAAK+tB,UAAUZ,SAASvjB,KAAKxH,GAC1C,SACA,cAEhB,OAAa,IAANM,EACDoP,GAAcM,EAAUpS,KAAK4c,MAAM7L,KACnCrO,EACA0P,EAAS1P,EAAE2Q,OACXjB,GAg5GVwZ,GAAQ1Z,YAr4GR,SAA2BxP,GACvB,OAAa,IAANA,EACDoP,GAAc9R,KAAKguB,aAAchuB,KAAK4c,MAAM7L,KAC5CrO,EACA1C,KAAKguB,aAAatrB,EAAE2Q,OACpBrT,KAAKguB,cAi4GfpC,GAAQzZ,cA94GR,SAA6BzP,GACzB,OAAa,IAANA,EACDoP,GAAc9R,KAAKiuB,eAAgBjuB,KAAK4c,MAAM7L,KAC9CrO,EACA1C,KAAKiuB,eAAevrB,EAAE2Q,OACtBrT,KAAKiuB,gBA04GfrC,GAAQpZ,cAtzGR,SAA6B0b,EAAa9rB,EAAQE,GAC9C,IAAIP,EAAGsH,EAAK0D,EAEZ,GAAI/M,KAAKmuB,oBACL,OA7ER,SAA6BD,EAAa9rB,EAAQE,GAC9C,IAAIP,EACAwrB,EACAlkB,EACAmkB,EAAMU,EAAYT,oBACtB,IAAKztB,KAAKouB,eAKN,IAJApuB,KAAKouB,eAAiB,GACtBpuB,KAAKquB,oBAAsB,GAC3BruB,KAAKsuB,kBAAoB,GAEpBvsB,EAAI,EAAGA,EAAI,IAAKA,EACjBsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC/B/B,KAAKsuB,kBAAkBvsB,GAAK/B,KAAKkS,YAC7B7I,EACA,IACFokB,oBACFztB,KAAKquB,oBAAoBtsB,GAAK/B,KAAKmS,cAC/B9I,EACA,IACFokB,oBACFztB,KAAKouB,eAAersB,GAAK/B,KAAKoS,SAAS/I,EAAK,IAAIokB,oBAIxD,OAAInrB,EACe,SAAXF,GAEe,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,IACpBD,EAAK,KACN,QAAXnrB,GAEQ,KADfmrB,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,IACzBD,EAAK,MAGT,KADfA,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IACvBD,EAAK,KAGb,SAAXnrB,GAEY,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAK3B,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,MAK7B,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IAN/BD,EAOa,KACN,QAAXnrB,GAEK,KADZmrB,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,MAKhC,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAKxB,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,IAN/BD,EAOa,MAGZ,KADZA,EAAKxf,GAAQnN,KAAKZ,KAAKsuB,kBAAmBd,MAK9B,KADZD,EAAKxf,GAAQnN,KAAKZ,KAAKouB,eAAgBZ,MAKxB,KADfD,EAAKxf,GAAQnN,KAAKZ,KAAKquB,oBAAqBb,IANjCD,EAOa,MASD3sB,KAAKZ,KAAMkuB,EAAa9rB,EAAQE,GAU/D,IAPKtC,KAAKouB,iBACNpuB,KAAKouB,eAAiB,GACtBpuB,KAAKsuB,kBAAoB,GACzBtuB,KAAKquB,oBAAsB,GAC3BruB,KAAKuuB,mBAAqB,IAGzBxsB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CA6BpB,GA1BAsH,EAAMlH,EAAU,CAAC,IAAM,IAAIkR,IAAItR,GAC3BO,IAAWtC,KAAKuuB,mBAAmBxsB,KACnC/B,KAAKuuB,mBAAmBxsB,GAAK,IAAIoL,OAC7B,IAAMnN,KAAKoS,SAAS/I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACpD,KAEJpJ,KAAKquB,oBAAoBtsB,GAAK,IAAIoL,OAC9B,IAAMnN,KAAKmS,cAAc9I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACzD,KAEJpJ,KAAKsuB,kBAAkBvsB,GAAK,IAAIoL,OAC5B,IAAMnN,KAAKkS,YAAY7I,EAAK,IAAID,QAAQ,IAAK,QAAU,IACvD,MAGHpJ,KAAKouB,eAAersB,KACrBgL,EACI,IACA/M,KAAKoS,SAAS/I,EAAK,IACnB,KACArJ,KAAKmS,cAAc9I,EAAK,IACxB,KACArJ,KAAKkS,YAAY7I,EAAK,IAC1BrJ,KAAKouB,eAAersB,GAAK,IAAIoL,OAAOJ,EAAM3D,QAAQ,IAAK,IAAK,MAI5D9G,GACW,SAAXF,GACApC,KAAKuuB,mBAAmBxsB,GAAG6H,KAAKskB,GAEhC,OAAOnsB,EACJ,GACHO,GACW,QAAXF,GACApC,KAAKquB,oBAAoBtsB,GAAG6H,KAAKskB,GAEjC,OAAOnsB,EACJ,GACHO,GACW,OAAXF,GACApC,KAAKsuB,kBAAkBvsB,GAAG6H,KAAKskB,GAE/B,OAAOnsB,EACJ,IAAKO,GAAUtC,KAAKouB,eAAersB,GAAG6H,KAAKskB,GAC9C,OAAOnsB,IA0vGnB6pB,GAAQrZ,cA7sGR,SAAuBtF,GACnB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAKyT,qBAELzT,KAAKsT,iBAGXxS,EAAWd,KAAM,oBAClBA,KAAKsT,eAAiBT,IAEnB7S,KAAKyT,sBAAwBxG,EAC9BjN,KAAKyT,qBACLzT,KAAKsT,iBA8rGnBsY,GAAQtZ,mBA1rGR,SAA4BrF,GACxB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAK0T,0BAEL1T,KAAKuT,sBAGXzS,EAAWd,KAAM,yBAClBA,KAAKuT,oBAAsBT,IAExB9S,KAAK0T,2BAA6BzG,EACnCjN,KAAK0T,0BACL1T,KAAKuT,sBA2qGnBqY,GAAQvZ,iBAvqGR,SAA0BpF,GACtB,OAAIjN,KAAKmuB,qBACArtB,EAAWd,KAAM,mBAClBgT,GAAqBpS,KAAKZ,MAE1BiN,EACOjN,KAAK2T,wBAEL3T,KAAKwT,oBAGX1S,EAAWd,KAAM,uBAClBA,KAAKwT,kBAAoBT,IAEtB/S,KAAK2T,yBAA2B1G,EACjCjN,KAAK2T,wBACL3T,KAAKwT,oBAypGnBoY,GAAQvX,KAv+FR,SAAoB9T,GAGhB,MAAgD,OAAxCA,EAAQ,IAAI2J,cAAcskB,OAAO,IAq+F7C5C,GAAQnoB,SA39FR,SAAwBoQ,EAAOE,EAAS0a,GACpC,OAAY,GAAR5a,EACO4a,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAmjGhCjX,GAAmB,KAAM,CACrByN,KAAM,CACF,CACI4E,MAAO,aACPC,MAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,cACNge,OAAQ,KACRpN,KAAM,MAEV,CACI+R,MAAO,aACPC,OAAQoD,EAAAA,EACRxM,OAAQ,EACRxZ,KAAM,gBACNge,OAAQ,KACRpN,KAAM,OAGdpC,uBAAwB,uBACxB9M,QAAS,SAAUjB,GACf,IAAI3G,EAAI2G,EAAS,GAWjB,OAAOA,GATgC,IAA/BsD,EAAOtD,EAAS,IAAO,IACjB,KACM,GAAN3G,EACA,KACM,GAANA,EACA,KACM,GAANA,EACA,KACA,SAOtBb,EAAMikB,KAAO/d,EACT,wDACAmR,IAEJrX,EAAMuuB,SAAWroB,EACb,gEACAuR,IAGJ,IAAI+W,GAAU5mB,KAAKC,IAmBnB,SAAS4mB,GAAcrP,EAAUhf,EAAO6K,EAAOqX,GAC3C,IAAIxD,EAAQ6C,GAAevhB,EAAO6K,GAMlC,OAJAmU,EAASW,eAAiBuC,EAAYxD,EAAMiB,cAC5CX,EAASY,OAASsC,EAAYxD,EAAMkB,MACpCZ,EAASa,SAAWqC,EAAYxD,EAAMmB,QAE/Bb,EAASe,UAapB,SAASuO,GAAQlnB,GACb,OAAIA,EAAS,EACFI,KAAKiD,MAAMrD,GAEXI,KAAKgD,KAAKpD,GA2DzB,SAASmnB,GAAajP,GAGlB,OAAe,KAAPA,EAAe,OAG3B,SAASkP,GAAalgB,GAElB,OAAiB,OAATA,EAAmB,KA4D/B,SAASmgB,GAAOC,GACZ,OAAO,WACH,OAAOjvB,KAAKkvB,GAAGD,IAIvB,IAAIE,GAAiBH,GAAO,MACxBI,GAAYJ,GAAO,KACnBK,GAAYL,GAAO,KACnBM,GAAUN,GAAO,KACjBO,GAASP,GAAO,KAChBQ,GAAUR,GAAO,KACjBS,GAAWT,GAAO,KAClBU,GAAaV,GAAO,KACpBW,GAAUX,GAAO,KAWrB,SAASY,GAAW1oB,GAChB,OAAO,WACH,OAAOlH,KAAK4D,UAAY5D,KAAKqgB,MAAMnZ,GAAQxC,KAInD,IAAIob,GAAe8P,GAAW,gBAC1B1b,GAAU0b,GAAW,WACrB7b,GAAU6b,GAAW,WACrB/b,GAAQ+b,GAAW,SACnB/P,GAAO+P,GAAW,QAClB/gB,GAAS+gB,GAAW,UACpBpQ,GAAQoQ,GAAW,SAMvB,IAAInP,GAAQ1Y,KAAK0Y,MACboP,GAAa,CACT/Z,GAAI,GACJpI,EAAG,GACHhL,EAAG,GACHsT,EAAG,GACHvD,EAAG,GACH0D,EAAG,KACHE,EAAG,IAQX,SAASyZ,GAAeC,EAAgBrI,EAAemI,EAAYxtB,GAC/D,IAAIkd,EAAWuC,GAAeiO,GAAgB/nB,MAC1CkM,EAAUuM,GAAMlB,EAAS2P,GAAG,MAC5Bnb,EAAU0M,GAAMlB,EAAS2P,GAAG,MAC5Brb,EAAQ4M,GAAMlB,EAAS2P,GAAG,MAC1BrP,EAAOY,GAAMlB,EAAS2P,GAAG,MACzBrgB,EAAS4R,GAAMlB,EAAS2P,GAAG,MAC3BvP,EAAQc,GAAMlB,EAAS2P,GAAG,MAC1B1P,EAAQiB,GAAMlB,EAAS2P,GAAG,MAC1BnuB,GACKmT,GAAW2b,EAAW/Z,GAAM,CAAC,IAAK5B,GAClCA,EAAU2b,EAAWniB,GAAK,CAAC,KAAMwG,KACjCH,GAAW,GAAK,CAAC,MACjBA,EAAU8b,EAAWntB,GAAK,CAAC,KAAMqR,IACjCF,GAAS,GAAK,CAAC,MACfA,EAAQgc,EAAW7Z,GAAK,CAAC,KAAMnC,IAC/BgM,GAAQ,GAAK,CAAC,MACdA,EAAOgQ,EAAWpd,GAAK,CAAC,KAAMoN,GAgBvC,OAdoB,MAAhBgQ,EAAW1Z,IACXpV,EACIA,GACC4e,GAAS,GAAK,CAAC,MACfA,EAAQkQ,EAAW1Z,GAAK,CAAC,KAAMwJ,KAExC5e,EAAIA,GACC8N,GAAU,GAAK,CAAC,MAChBA,EAASghB,EAAWxZ,GAAK,CAAC,KAAMxH,IAChC2Q,GAAS,GAAK,CAAC,MAAS,CAAC,KAAMA,IAElC,GAAKkI,EACP3mB,EAAE,GAAuB,GAAjBgvB,EACRhvB,EAAE,GAAKsB,EApCX,SAA2ByX,EAAQnS,EAAQ+f,EAAemF,EAAUxqB,GAChE,OAAOA,EAAOsT,aAAahO,GAAU,IAAK+f,EAAe5N,EAAQ+S,IAoCxCzsB,MAAM,KAAMW,GAgEzC,IAAIivB,GAAQjoB,KAAKC,IAEjB,SAAS6Y,GAAKpS,GACV,OAAY,EAAJA,IAAUA,EAAI,KAAOA,EAGjC,SAASwhB,KAQL,IAAKjwB,KAAK4D,UACN,OAAO5D,KAAK+I,aAAaS,cAG7B,IAGIuK,EACAF,EACA2L,EACA9R,EAEAwiB,EACAC,EACAC,EACAC,EAXAnc,EAAU8b,GAAMhwB,KAAKkgB,eAAiB,IACtCL,EAAOmQ,GAAMhwB,KAAKmgB,OAClBtR,EAASmhB,GAAMhwB,KAAKogB,SAKpBkQ,EAAQtwB,KAAKovB,YAMjB,OAAKkB,GAOLvc,EAAUjJ,EAASoJ,EAAU,IAC7BL,EAAQ/I,EAASiJ,EAAU,IAC3BG,GAAW,GACXH,GAAW,GAGXyL,EAAQ1U,EAAS+D,EAAS,IAC1BA,GAAU,GAGVnB,EAAIwG,EAAUA,EAAQqc,QAAQ,GAAGnnB,QAAQ,SAAU,IAAM,GAEzD8mB,EAAYI,EAAQ,EAAI,IAAM,GAC9BH,EAAStP,GAAK7gB,KAAKogB,WAAaS,GAAKyP,GAAS,IAAM,GACpDF,EAAWvP,GAAK7gB,KAAKmgB,SAAWU,GAAKyP,GAAS,IAAM,GACpDD,EAAUxP,GAAK7gB,KAAKkgB,iBAAmBW,GAAKyP,GAAS,IAAM,GAGvDJ,EACA,KACC1Q,EAAQ2Q,EAAS3Q,EAAQ,IAAM,KAC/B3Q,EAASshB,EAASthB,EAAS,IAAM,KACjCgR,EAAOuQ,EAAWvQ,EAAO,IAAM,KAC/BhM,GAASE,GAAWG,EAAU,IAAM,KACpCL,EAAQwc,EAAUxc,EAAQ,IAAM,KAChCE,EAAUsc,EAAUtc,EAAU,IAAM,KACpCG,EAAUmc,EAAU3iB,EAAI,IAAM,KA9BxB,MAkCf,IAAI8iB,GAAUlR,GAAS5e,UAwGvB,OAtGA8vB,GAAQ5sB,QAl4ER,WACI,OAAO5D,KAAK6D,UAk4EhB2sB,GAAQxoB,IA3YR,WACI,IAAI2P,EAAO3X,KAAKqgB,MAahB,OAXArgB,KAAKkgB,cAAgByO,GAAQ3uB,KAAKkgB,eAClClgB,KAAKmgB,MAAQwO,GAAQ3uB,KAAKmgB,OAC1BngB,KAAKogB,QAAUuO,GAAQ3uB,KAAKogB,SAE5BzI,EAAKmI,aAAe6O,GAAQhX,EAAKmI,cACjCnI,EAAKzD,QAAUya,GAAQhX,EAAKzD,SAC5ByD,EAAK5D,QAAU4a,GAAQhX,EAAK5D,SAC5B4D,EAAK9D,MAAQ8a,GAAQhX,EAAK9D,OAC1B8D,EAAK9I,OAAS8f,GAAQhX,EAAK9I,QAC3B8I,EAAK6H,MAAQmP,GAAQhX,EAAK6H,OAEnBxf,MA8XXwwB,GAAQzR,IAhXR,SAAexe,EAAO6K,GAClB,OAAOwjB,GAAc5uB,KAAMO,EAAO6K,EAAO,IAgX7ColB,GAAQzN,SA5WR,SAAoBxiB,EAAO6K,GACvB,OAAOwjB,GAAc5uB,KAAMO,EAAO6K,GAAQ,IA4W9ColB,GAAQtB,GA/RR,SAAY9kB,GACR,IAAKpK,KAAK4D,UACN,OAAOc,IAEX,IAAImb,EACAhR,EACAiR,EAAe9f,KAAKkgB,cAIxB,GAAc,WAFd9V,EAAQD,EAAeC,KAEY,YAAVA,GAAiC,SAAVA,EAG5C,OAFAyV,EAAO7f,KAAKmgB,MAAQL,EAAe,MACnCjR,EAAS7O,KAAKogB,QAAU0O,GAAajP,GAC7BzV,GACJ,IAAK,QACD,OAAOyE,EACX,IAAK,UACD,OAAOA,EAAS,EACpB,IAAK,OACD,OAAOA,EAAS,QAKxB,OADAgR,EAAO7f,KAAKmgB,MAAQpY,KAAK0Y,MAAMsO,GAAa/uB,KAAKogB,UACzChW,GACJ,IAAK,OACD,OAAOyV,EAAO,EAAIC,EAAe,OACrC,IAAK,MACD,OAAOD,EAAOC,EAAe,MACjC,IAAK,OACD,OAAc,GAAPD,EAAYC,EAAe,KACtC,IAAK,SACD,OAAc,KAAPD,EAAcC,EAAe,IACxC,IAAK,SACD,OAAc,MAAPD,EAAeC,EAAe,IAEzC,IAAK,cACD,OAAO/X,KAAKiD,MAAa,MAAP6U,GAAgBC,EACtC,QACI,MAAM,IAAIjZ,MAAM,gBAAkBuD,KAyPlDomB,GAAQrB,eAAiBA,GACzBqB,GAAQpB,UAAYA,GACpBoB,GAAQnB,UAAYA,GACpBmB,GAAQlB,QAAUA,GAClBkB,GAAQjB,OAASA,GACjBiB,GAAQhB,QAAUA,GAClBgB,GAAQf,SAAWA,GACnBe,GAAQd,WAAaA,GACrBc,GAAQb,QAAUA,GAClBa,GAAQtuB,QA5PR,WACI,OAAKlC,KAAK4D,UAIN5D,KAAKkgB,cACQ,MAAblgB,KAAKmgB,MACJngB,KAAKogB,QAAU,GAAM,OACK,QAA3BnV,EAAMjL,KAAKogB,QAAU,IANd1b,KA2Pf8rB,GAAQlQ,QA5WR,WACI,IAIIpM,EACAH,EACAF,EACA2L,EACAiR,EARA3Q,EAAe9f,KAAKkgB,cACpBL,EAAO7f,KAAKmgB,MACZtR,EAAS7O,KAAKogB,QACdzI,EAAO3X,KAAKqgB,MAgDhB,OArCyB,GAAhBP,GAA6B,GAARD,GAAuB,GAAVhR,GAClCiR,GAAgB,GAAKD,GAAQ,GAAKhR,GAAU,IAGjDiR,GAAuD,MAAvC+O,GAAQE,GAAalgB,GAAUgR,GAE/ChR,EADAgR,EAAO,GAMXlI,EAAKmI,aAAeA,EAAe,IAEnC5L,EAAUpJ,EAASgV,EAAe,KAClCnI,EAAKzD,QAAUA,EAAU,GAEzBH,EAAUjJ,EAASoJ,EAAU,IAC7ByD,EAAK5D,QAAUA,EAAU,GAEzBF,EAAQ/I,EAASiJ,EAAU,IAC3B4D,EAAK9D,MAAQA,EAAQ,GAErBgM,GAAQ/U,EAAS+I,EAAQ,IAIzBhF,GADA4hB,EAAiB3lB,EAASgkB,GAAajP,IAEvCA,GAAQgP,GAAQE,GAAa0B,IAG7BjR,EAAQ1U,EAAS+D,EAAS,IAC1BA,GAAU,GAEV8I,EAAKkI,KAAOA,EACZlI,EAAK9I,OAASA,EACd8I,EAAK6H,MAAQA,EAENxf,MAyTXwwB,GAAQlP,MAlOR,WACI,OAAOQ,GAAe9hB,OAkO1BwwB,GAAQ/kB,IA/NR,SAAerB,GAEX,OADAA,EAAQD,EAAeC,GAChBpK,KAAK4D,UAAY5D,KAAKoK,EAAQ,OAAS1F,KA8NlD8rB,GAAQ1Q,aAAeA,GACvB0Q,GAAQtc,QAAUA,GAClBsc,GAAQzc,QAAUA,GAClByc,GAAQ3c,MAAQA,GAChB2c,GAAQ3Q,KAAOA,GACf2Q,GAAQ7Q,MAlNR,WACI,OAAO7U,EAAS9K,KAAK6f,OAAS,IAkNlC2Q,GAAQ3hB,OAASA,GACjB2hB,GAAQhR,MAAQA,GAChBgR,GAAQ7I,SAlIR,SAAkB+I,EAAeC,GAC7B,IAAK3wB,KAAK4D,UACN,OAAO5D,KAAK+I,aAAaS,cAG7B,IAEInH,EACAiH,EAHAsnB,GAAa,EACbC,EAAKhB,GAyBT,MArB6B,iBAAlBa,IACPC,EAAgBD,EAChBA,GAAgB,GAES,kBAAlBA,IACPE,EAAaF,GAEY,iBAAlBC,IACPE,EAAKpwB,OAAOqwB,OAAO,GAAIjB,GAAYc,GACZ,MAAnBA,EAAcjjB,GAAiC,MAApBijB,EAAc7a,KACzC+a,EAAG/a,GAAK6a,EAAcjjB,EAAI,IAIlCrL,EAASrC,KAAK+I,aACdO,EAASwmB,GAAe9vB,MAAO4wB,EAAYC,EAAIxuB,GAE3CuuB,IACAtnB,EAASjH,EAAO0qB,YAAY/sB,KAAMsJ,IAG/BjH,EAAOolB,WAAWne,IAoG7BknB,GAAQxH,YAAciH,GACtBO,GAAQ7vB,SAAWsvB,GACnBO,GAAQ/G,OAASwG,GACjBO,GAAQnuB,OAASA,GACjBmuB,GAAQznB,WAAaA,GAErBynB,GAAQO,YAAc1qB,EAClB,sFACA4pB,IAEJO,GAAQpM,KAAOA,GAIf3b,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1BqE,GAAc,IAAKJ,IACnBI,GAAc,IAhuJO,wBAiuJrBc,GAAc,IAAK,SAAUrN,EAAO2I,EAAOpD,GACvCA,EAAO5B,GAAK,IAAIxC,KAAyB,IAApBse,WAAWzf,MAEpCqN,GAAc,IAAK,SAAUrN,EAAO2I,EAAOpD,GACvCA,EAAO5B,GAAK,IAAIxC,KAAKuJ,EAAM1K,MAK/BJ,EAAM6wB,QAAU,SAj+KZ/wB,EAm+KY0c,GAEhBxc,EAAM0B,GAAK6kB,GACXvmB,EAAMsP,IA1/EN,WAGI,OAAO0P,GAAO,WAFH,GAAGxY,MAAM/F,KAAKP,UAAW,KA0/ExCF,EAAMgI,IAr/EN,WAGI,OAAOgX,GAAO,UAFH,GAAGxY,MAAM/F,KAAKP,UAAW,KAq/ExCF,EAAM0b,IAh/EI,WACN,OAAOna,KAAKma,IAAMna,KAAKma,OAAS,IAAIna,MAg/ExCvB,EAAMqC,IAAML,EACZhC,EAAMupB,KA1oBN,SAAoBnpB,GAChB,OAAOoc,GAAoB,IAARpc,IA0oBvBJ,EAAM0O,OAlhBN,SAAoBzM,EAAQ0pB,GACxB,OAAOG,GAAe7pB,EAAQ0pB,EAAO,WAkhBzC3rB,EAAMsB,OAASA,EACftB,EAAMkC,OAASmV,GACfrX,EAAM2iB,QAAUre,EAChBtE,EAAMof,SAAWuC,GACjB3hB,EAAM6F,SAAWA,EACjB7F,EAAMiS,SAhhBN,SAAsBga,EAAchqB,EAAQ0pB,GACxC,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,aAghBzD3rB,EAAMyqB,UA9oBN,WACI,OAAOjO,GAAYvc,MAAM,KAAMC,WAAWuqB,aA8oB9CzqB,EAAM4I,WAAa6O,GACnBzX,EAAMogB,WAAaA,GACnBpgB,EAAMyO,YAxhBN,SAAyBxM,EAAQ0pB,GAC7B,OAAOG,GAAe7pB,EAAQ0pB,EAAO,gBAwhBzC3rB,EAAM+R,YA7gBN,SAAyBka,EAAchqB,EAAQ0pB,GAC3C,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,gBA6gBzD3rB,EAAM0X,aAAeA,GACrB1X,EAAM8wB,aAr4GN,SAAsB/pB,EAAMpB,GACxB,IACQzD,EACA6uB,EACA5pB,EAsCR,OAzCc,MAAVxB,GAGIwB,EAAesN,GAEE,MAAjB6B,GAAQvP,IAA+C,MAA9BuP,GAAQvP,GAAM8Q,aAEvCvB,GAAQvP,GAAMO,IAAIJ,EAAaoP,GAAQvP,GAAM6Q,QAASjS,KAIrC,OADjBorB,EAAYla,GAAW9P,MAEnBI,EAAe4pB,EAAUnZ,SAE7BjS,EAASuB,EAAaC,EAAcxB,GACnB,MAAborB,IAIAprB,EAAOgS,KAAO5Q,IAElB7E,EAAS,IAAImF,EAAO1B,IACbkS,aAAevB,GAAQvP,GAC9BuP,GAAQvP,GAAQ7E,GAIpBmV,GAAmBtQ,IAGE,MAAjBuP,GAAQvP,KAC0B,MAA9BuP,GAAQvP,GAAM8Q,cACdvB,GAAQvP,GAAQuP,GAAQvP,GAAM8Q,aAC1B9Q,IAASsQ,MACTA,GAAmBtQ,IAEC,MAAjBuP,GAAQvP,WACRuP,GAAQvP,IAIpBuP,GAAQvP,IA41GnB/G,EAAMsW,QAj0GN,WACI,OAAO1P,EAAK0P,KAi0GhBtW,EAAMgS,cArhBN,SAA2Bia,EAAchqB,EAAQ0pB,GAC7C,OAAOK,GAAiBC,EAAchqB,EAAQ0pB,EAAO,kBAqhBzD3rB,EAAMgK,eAAiBA,EACvBhK,EAAMgxB,qBAtNN,SAAoCC,GAChC,YAAyB9sB,IAArB8sB,EACO3Q,GAEqB,mBAArB2Q,IACP3Q,GAAQ2Q,GACD,IAiNfjxB,EAAMkxB,sBA3MN,SAAqCC,EAAWC,GAC5C,YAA8BjtB,IAA1BurB,GAAWyB,UAGDhtB,IAAVitB,EACO1B,GAAWyB,IAEtBzB,GAAWyB,GAAaC,EACN,MAAdD,IACAzB,GAAW/Z,GAAKyb,EAAQ,IAErB,KAiMXpxB,EAAM8mB,eAx5DN,SAA2BuK,EAAU3V,GACjC,IAAIwF,EAAOmQ,EAASnQ,KAAKxF,EAAK,QAAQ,GACtC,OAAOwF,GAAQ,EACT,WACAA,GAAQ,EACR,WACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,UACAA,EAAO,EACP,WACA,YA24DVlhB,EAAMO,UAAYgmB,GAGlBvmB,EAAMsxB,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnB1jB,KAAM,aACN2jB,KAAM,QACNC,aAAc,WACdC,QAAS,eACTxjB,KAAM,aACNN,MAAO,WAGJ9N"}//! moment.js
//! version : 2.29.1
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com

;(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
    typeof define === 'function' && define.amd ? define(factory) :
    global.moment = factory()
}(this, (function () { 'use strict';

    var hookCallback;

    function hooks() {
        return hookCallback.apply(null, arguments);
    }

    // This is done to register the method called with moment()
    // without creating circular dependencies.
    function setHookCallback(callback) {
        hookCallback = callback;
    }

    function isArray(input) {
        return (
            input instanceof Array ||
            Object.prototype.toString.call(input) === '[object Array]'
        );
    }

    function isObject(input) {
        // IE8 will treat undefined and null as object if it wasn't for
        // input != null
        return (
            input != null &&
            Object.prototype.toString.call(input) === '[object Object]'
        );
    }

    function hasOwnProp(a, b) {
        return Object.prototype.hasOwnProperty.call(a, b);
    }

    function isObjectEmpty(obj) {
        if (Object.getOwnPropertyNames) {
            return Object.getOwnPropertyNames(obj).length === 0;
        } else {
            var k;
            for (k in obj) {
                if (hasOwnProp(obj, k)) {
                    return false;
                }
            }
            return true;
        }
    }

    function isUndefined(input) {
        return input === void 0;
    }

    function isNumber(input) {
        return (
            typeof input === 'number' ||
            Object.prototype.toString.call(input) === '[object Number]'
        );
    }

    function isDate(input) {
        return (
            input instanceof Date ||
            Object.prototype.toString.call(input) === '[object Date]'
        );
    }

    function map(arr, fn) {
        var res = [],
            i;
        for (i = 0; i < arr.length; ++i) {
            res.push(fn(arr[i], i));
        }
        return res;
    }

    function extend(a, b) {
        for (var i in b) {
            if (hasOwnProp(b, i)) {
                a[i] = b[i];
            }
        }

        if (hasOwnProp(b, 'toString')) {
            a.toString = b.toString;
        }

        if (hasOwnProp(b, 'valueOf')) {
            a.valueOf = b.valueOf;
        }

        return a;
    }

    function createUTC(input, format, locale, strict) {
        return createLocalOrUTC(input, format, locale, strict, true).utc();
    }

    function defaultParsingFlags() {
        // We need to deep clone this object.
        return {
            empty: false,
            unusedTokens: [],
            unusedInput: [],
            overflow: -2,
            charsLeftOver: 0,
            nullInput: false,
            invalidEra: null,
            invalidMonth: null,
            invalidFormat: false,
            userInvalidated: false,
            iso: false,
            parsedDateParts: [],
            era: null,
            meridiem: null,
            rfc2822: false,
            weekdayMismatch: false,
        };
    }

    function getParsingFlags(m) {
        if (m._pf == null) {
            m._pf = defaultParsingFlags();
        }
        return m._pf;
    }

    var some;
    if (Array.prototype.some) {
        some = Array.prototype.some;
    } else {
        some = function (fun) {
            var t = Object(this),
                len = t.length >>> 0,
                i;

            for (i = 0; i < len; i++) {
                if (i in t && fun.call(this, t[i], i, t)) {
                    return true;
                }
            }

            return false;
        };
    }

    function isValid(m) {
        if (m._isValid == null) {
            var flags = getParsingFlags(m),
                parsedParts = some.call(flags.parsedDateParts, function (i) {
                    return i != null;
                }),
                isNowValid =
                    !isNaN(m._d.getTime()) &&
                    flags.overflow < 0 &&
                    !flags.empty &&
                    !flags.invalidEra &&
                    !flags.invalidMonth &&
                    !flags.invalidWeekday &&
                    !flags.weekdayMismatch &&
                    !flags.nullInput &&
                    !flags.invalidFormat &&
                    !flags.userInvalidated &&
                    (!flags.meridiem || (flags.meridiem && parsedParts));

            if (m._strict) {
                isNowValid =
                    isNowValid &&
                    flags.charsLeftOver === 0 &&
                    flags.unusedTokens.length === 0 &&
                    flags.bigHour === undefined;
            }

            if (Object.isFrozen == null || !Object.isFrozen(m)) {
                m._isValid = isNowValid;
            } else {
                return isNowValid;
            }
        }
        return m._isValid;
    }

    function createInvalid(flags) {
        var m = createUTC(NaN);
        if (flags != null) {
            extend(getParsingFlags(m), flags);
        } else {
            getParsingFlags(m).userInvalidated = true;
        }

        return m;
    }

    // Plugins that add properties should also add the key here (null value),
    // so we can properly clone ourselves.
    var momentProperties = (hooks.momentProperties = []),
        updateInProgress = false;

    function copyConfig(to, from) {
        var i, prop, val;

        if (!isUndefined(from._isAMomentObject)) {
            to._isAMomentObject = from._isAMomentObject;
        }
        if (!isUndefined(from._i)) {
            to._i = from._i;
        }
        if (!isUndefined(from._f)) {
            to._f = from._f;
        }
        if (!isUndefined(from._l)) {
            to._l = from._l;
        }
        if (!isUndefined(from._strict)) {
            to._strict = from._strict;
        }
        if (!isUndefined(from._tzm)) {
            to._tzm = from._tzm;
        }
        if (!isUndefined(from._isUTC)) {
            to._isUTC = from._isUTC;
        }
        if (!isUndefined(from._offset)) {
            to._offset = from._offset;
        }
        if (!isUndefined(from._pf)) {
            to._pf = getParsingFlags(from);
        }
        if (!isUndefined(from._locale)) {
            to._locale = from._locale;
        }

        if (momentProperties.length > 0) {
            for (i = 0; i < momentProperties.length; i++) {
                prop = momentProperties[i];
                val = from[prop];
                if (!isUndefined(val)) {
                    to[prop] = val;
                }
            }
        }

        return to;
    }

    // Moment prototype object
    function Moment(config) {
        copyConfig(this, config);
        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
        if (!this.isValid()) {
            this._d = new Date(NaN);
        }
        // Prevent infinite loop in case updateOffset creates new moment
        // objects.
        if (updateInProgress === false) {
            updateInProgress = true;
            hooks.updateOffset(this);
            updateInProgress = false;
        }
    }

    function isMoment(obj) {
        return (
            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
        );
    }

    function warn(msg) {
        if (
            hooks.suppressDeprecationWarnings === false &&
            typeof console !== 'undefined' &&
            console.warn
        ) {
            console.warn('Deprecation warning: ' + msg);
        }
    }

    function deprecate(msg, fn) {
        var firstTime = true;

        return extend(function () {
            if (hooks.deprecationHandler != null) {
                hooks.deprecationHandler(null, msg);
            }
            if (firstTime) {
                var args = [],
                    arg,
                    i,
                    key;
                for (i = 0; i < arguments.length; i++) {
                    arg = '';
                    if (typeof arguments[i] === 'object') {
                        arg += '\n[' + i + '] ';
                        for (key in arguments[0]) {
                            if (hasOwnProp(arguments[0], key)) {
                                arg += key + ': ' + arguments[0][key] + ', ';
                            }
                        }
                        arg = arg.slice(0, -2); // Remove trailing comma and space
                    } else {
                        arg = arguments[i];
                    }
                    args.push(arg);
                }
                warn(
                    msg +
                        '\nArguments: ' +
                        Array.prototype.slice.call(args).join('') +
                        '\n' +
                        new Error().stack
                );
                firstTime = false;
            }
            return fn.apply(this, arguments);
        }, fn);
    }

    var deprecations = {};

    function deprecateSimple(name, msg) {
        if (hooks.deprecationHandler != null) {
            hooks.deprecationHandler(name, msg);
        }
        if (!deprecations[name]) {
            warn(msg);
            deprecations[name] = true;
        }
    }

    hooks.suppressDeprecationWarnings = false;
    hooks.deprecationHandler = null;

    function isFunction(input) {
        return (
            (typeof Function !== 'undefined' && input instanceof Function) ||
            Object.prototype.toString.call(input) === '[object Function]'
        );
    }

    function set(config) {
        var prop, i;
        for (i in config) {
            if (hasOwnProp(config, i)) {
                prop = config[i];
                if (isFunction(prop)) {
                    this[i] = prop;
                } else {
                    this['_' + i] = prop;
                }
            }
        }
        this._config = config;
        // Lenient ordinal parsing accepts just a number in addition to
        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
        // TODO: Remove "ordinalParse" fallback in next major release.
        this._dayOfMonthOrdinalParseLenient = new RegExp(
            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
                '|' +
                /\d{1,2}/.source
        );
    }

    function mergeConfigs(parentConfig, childConfig) {
        var res = extend({}, parentConfig),
            prop;
        for (prop in childConfig) {
            if (hasOwnProp(childConfig, prop)) {
                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
                    res[prop] = {};
                    extend(res[prop], parentConfig[prop]);
                    extend(res[prop], childConfig[prop]);
                } else if (childConfig[prop] != null) {
                    res[prop] = childConfig[prop];
                } else {
                    delete res[prop];
                }
            }
        }
        for (prop in parentConfig) {
            if (
                hasOwnProp(parentConfig, prop) &&
                !hasOwnProp(childConfig, prop) &&
                isObject(parentConfig[prop])
            ) {
                // make sure changes to properties don't modify parent config
                res[prop] = extend({}, res[prop]);
            }
        }
        return res;
    }

    function Locale(config) {
        if (config != null) {
            this.set(config);
        }
    }

    var keys;

    if (Object.keys) {
        keys = Object.keys;
    } else {
        keys = function (obj) {
            var i,
                res = [];
            for (i in obj) {
                if (hasOwnProp(obj, i)) {
                    res.push(i);
                }
            }
            return res;
        };
    }

    var defaultCalendar = {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    };

    function calendar(key, mom, now) {
        var output = this._calendar[key] || this._calendar['sameElse'];
        return isFunction(output) ? output.call(mom, now) : output;
    }

    function zeroFill(number, targetLength, forceSign) {
        var absNumber = '' + Math.abs(number),
            zerosToFill = targetLength - absNumber.length,
            sign = number >= 0;
        return (
            (sign ? (forceSign ? '+' : '') : '-') +
            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
            absNumber
        );
    }

    var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
        formatFunctions = {},
        formatTokenFunctions = {};

    // token:    'M'
    // padded:   ['MM', 2]
    // ordinal:  'Mo'
    // callback: function () { this.month() + 1 }
    function addFormatToken(token, padded, ordinal, callback) {
        var func = callback;
        if (typeof callback === 'string') {
            func = function () {
                return this[callback]();
            };
        }
        if (token) {
            formatTokenFunctions[token] = func;
        }
        if (padded) {
            formatTokenFunctions[padded[0]] = function () {
                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
            };
        }
        if (ordinal) {
            formatTokenFunctions[ordinal] = function () {
                return this.localeData().ordinal(
                    func.apply(this, arguments),
                    token
                );
            };
        }
    }

    function removeFormattingTokens(input) {
        if (input.match(/\[[\s\S]/)) {
            return input.replace(/^\[|\]$/g, '');
        }
        return input.replace(/\\/g, '');
    }

    function makeFormatFunction(format) {
        var array = format.match(formattingTokens),
            i,
            length;

        for (i = 0, length = array.length; i < length; i++) {
            if (formatTokenFunctions[array[i]]) {
                array[i] = formatTokenFunctions[array[i]];
            } else {
                array[i] = removeFormattingTokens(array[i]);
            }
        }

        return function (mom) {
            var output = '',
                i;
            for (i = 0; i < length; i++) {
                output += isFunction(array[i])
                    ? array[i].call(mom, format)
                    : array[i];
            }
            return output;
        };
    }

    // format date using native date object
    function formatMoment(m, format) {
        if (!m.isValid()) {
            return m.localeData().invalidDate();
        }

        format = expandFormat(format, m.localeData());
        formatFunctions[format] =
            formatFunctions[format] || makeFormatFunction(format);

        return formatFunctions[format](m);
    }

    function expandFormat(format, locale) {
        var i = 5;

        function replaceLongDateFormatTokens(input) {
            return locale.longDateFormat(input) || input;
        }

        localFormattingTokens.lastIndex = 0;
        while (i >= 0 && localFormattingTokens.test(format)) {
            format = format.replace(
                localFormattingTokens,
                replaceLongDateFormatTokens
            );
            localFormattingTokens.lastIndex = 0;
            i -= 1;
        }

        return format;
    }

    var defaultLongDateFormat = {
        LTS: 'h:mm:ss A',
        LT: 'h:mm A',
        L: 'MM/DD/YYYY',
        LL: 'MMMM D, YYYY',
        LLL: 'MMMM D, YYYY h:mm A',
        LLLL: 'dddd, MMMM D, YYYY h:mm A',
    };

    function longDateFormat(key) {
        var format = this._longDateFormat[key],
            formatUpper = this._longDateFormat[key.toUpperCase()];

        if (format || !formatUpper) {
            return format;
        }

        this._longDateFormat[key] = formatUpper
            .match(formattingTokens)
            .map(function (tok) {
                if (
                    tok === 'MMMM' ||
                    tok === 'MM' ||
                    tok === 'DD' ||
                    tok === 'dddd'
                ) {
                    return tok.slice(1);
                }
                return tok;
            })
            .join('');

        return this._longDateFormat[key];
    }

    var defaultInvalidDate = 'Invalid date';

    function invalidDate() {
        return this._invalidDate;
    }

    var defaultOrdinal = '%d',
        defaultDayOfMonthOrdinalParse = /\d{1,2}/;

    function ordinal(number) {
        return this._ordinal.replace('%d', number);
    }

    var defaultRelativeTime = {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        w: 'a week',
        ww: '%d weeks',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    };

    function relativeTime(number, withoutSuffix, string, isFuture) {
        var output = this._relativeTime[string];
        return isFunction(output)
            ? output(number, withoutSuffix, string, isFuture)
            : output.replace(/%d/i, number);
    }

    function pastFuture(diff, output) {
        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
    }

    var aliases = {};

    function addUnitAlias(unit, shorthand) {
        var lowerCase = unit.toLowerCase();
        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
    }

    function normalizeUnits(units) {
        return typeof units === 'string'
            ? aliases[units] || aliases[units.toLowerCase()]
            : undefined;
    }

    function normalizeObjectUnits(inputObject) {
        var normalizedInput = {},
            normalizedProp,
            prop;

        for (prop in inputObject) {
            if (hasOwnProp(inputObject, prop)) {
                normalizedProp = normalizeUnits(prop);
                if (normalizedProp) {
                    normalizedInput[normalizedProp] = inputObject[prop];
                }
            }
        }

        return normalizedInput;
    }

    var priorities = {};

    function addUnitPriority(unit, priority) {
        priorities[unit] = priority;
    }

    function getPrioritizedUnits(unitsObj) {
        var units = [],
            u;
        for (u in unitsObj) {
            if (hasOwnProp(unitsObj, u)) {
                units.push({ unit: u, priority: priorities[u] });
            }
        }
        units.sort(function (a, b) {
            return a.priority - b.priority;
        });
        return units;
    }

    function isLeapYear(year) {
        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
    }

    function absFloor(number) {
        if (number < 0) {
            // -0 -> 0
            return Math.ceil(number) || 0;
        } else {
            return Math.floor(number);
        }
    }

    function toInt(argumentForCoercion) {
        var coercedNumber = +argumentForCoercion,
            value = 0;

        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
            value = absFloor(coercedNumber);
        }

        return value;
    }

    function makeGetSet(unit, keepTime) {
        return function (value) {
            if (value != null) {
                set$1(this, unit, value);
                hooks.updateOffset(this, keepTime);
                return this;
            } else {
                return get(this, unit);
            }
        };
    }

    function get(mom, unit) {
        return mom.isValid()
            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
            : NaN;
    }

    function set$1(mom, unit, value) {
        if (mom.isValid() && !isNaN(value)) {
            if (
                unit === 'FullYear' &&
                isLeapYear(mom.year()) &&
                mom.month() === 1 &&
                mom.date() === 29
            ) {
                value = toInt(value);
                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
                    value,
                    mom.month(),
                    daysInMonth(value, mom.month())
                );
            } else {
                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
            }
        }
    }

    // MOMENTS

    function stringGet(units) {
        units = normalizeUnits(units);
        if (isFunction(this[units])) {
            return this[units]();
        }
        return this;
    }

    function stringSet(units, value) {
        if (typeof units === 'object') {
            units = normalizeObjectUnits(units);
            var prioritized = getPrioritizedUnits(units),
                i;
            for (i = 0; i < prioritized.length; i++) {
                this[prioritized[i].unit](units[prioritized[i].unit]);
            }
        } else {
            units = normalizeUnits(units);
            if (isFunction(this[units])) {
                return this[units](value);
            }
        }
        return this;
    }

    var match1 = /\d/, //       0 - 9
        match2 = /\d\d/, //      00 - 99
        match3 = /\d{3}/, //     000 - 999
        match4 = /\d{4}/, //    0000 - 9999
        match6 = /[+-]?\d{6}/, // -999999 - 999999
        match1to2 = /\d\d?/, //       0 - 99
        match3to4 = /\d\d\d\d?/, //     999 - 9999
        match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
        match1to3 = /\d{1,3}/, //       0 - 999
        match1to4 = /\d{1,4}/, //       0 - 9999
        match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
        matchUnsigned = /\d+/, //       0 - inf
        matchSigned = /[+-]?\d+/, //    -inf - inf
        matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
        matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
        matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
        // any word (or two) characters or numbers including two/three word month in arabic.
        // includes scottish gaelic two word and hyphenated months
        matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
        regexes;

    regexes = {};

    function addRegexToken(token, regex, strictRegex) {
        regexes[token] = isFunction(regex)
            ? regex
            : function (isStrict, localeData) {
                  return isStrict && strictRegex ? strictRegex : regex;
              };
    }

    function getParseRegexForToken(token, config) {
        if (!hasOwnProp(regexes, token)) {
            return new RegExp(unescapeFormat(token));
        }

        return regexes[token](config._strict, config._locale);
    }

    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
    function unescapeFormat(s) {
        return regexEscape(
            s
                .replace('\\', '')
                .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
                    matched,
                    p1,
                    p2,
                    p3,
                    p4
                ) {
                    return p1 || p2 || p3 || p4;
                })
        );
    }

    function regexEscape(s) {
        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    }

    var tokens = {};

    function addParseToken(token, callback) {
        var i,
            func = callback;
        if (typeof token === 'string') {
            token = [token];
        }
        if (isNumber(callback)) {
            func = function (input, array) {
                array[callback] = toInt(input);
            };
        }
        for (i = 0; i < token.length; i++) {
            tokens[token[i]] = func;
        }
    }

    function addWeekParseToken(token, callback) {
        addParseToken(token, function (input, array, config, token) {
            config._w = config._w || {};
            callback(input, config._w, config, token);
        });
    }

    function addTimeToArrayFromToken(token, input, config) {
        if (input != null && hasOwnProp(tokens, token)) {
            tokens[token](input, config._a, config, token);
        }
    }

    var YEAR = 0,
        MONTH = 1,
        DATE = 2,
        HOUR = 3,
        MINUTE = 4,
        SECOND = 5,
        MILLISECOND = 6,
        WEEK = 7,
        WEEKDAY = 8;

    function mod(n, x) {
        return ((n % x) + x) % x;
    }

    var indexOf;

    if (Array.prototype.indexOf) {
        indexOf = Array.prototype.indexOf;
    } else {
        indexOf = function (o) {
            // I know
            var i;
            for (i = 0; i < this.length; ++i) {
                if (this[i] === o) {
                    return i;
                }
            }
            return -1;
        };
    }

    function daysInMonth(year, month) {
        if (isNaN(year) || isNaN(month)) {
            return NaN;
        }
        var modMonth = mod(month, 12);
        year += (month - modMonth) / 12;
        return modMonth === 1
            ? isLeapYear(year)
                ? 29
                : 28
            : 31 - ((modMonth % 7) % 2);
    }

    // FORMATTING

    addFormatToken('M', ['MM', 2], 'Mo', function () {
        return this.month() + 1;
    });

    addFormatToken('MMM', 0, 0, function (format) {
        return this.localeData().monthsShort(this, format);
    });

    addFormatToken('MMMM', 0, 0, function (format) {
        return this.localeData().months(this, format);
    });

    // ALIASES

    addUnitAlias('month', 'M');

    // PRIORITY

    addUnitPriority('month', 8);

    // PARSING

    addRegexToken('M', match1to2);
    addRegexToken('MM', match1to2, match2);
    addRegexToken('MMM', function (isStrict, locale) {
        return locale.monthsShortRegex(isStrict);
    });
    addRegexToken('MMMM', function (isStrict, locale) {
        return locale.monthsRegex(isStrict);
    });

    addParseToken(['M', 'MM'], function (input, array) {
        array[MONTH] = toInt(input) - 1;
    });

    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
        var month = config._locale.monthsParse(input, token, config._strict);
        // if we didn't find a month name, mark the date as invalid.
        if (month != null) {
            array[MONTH] = month;
        } else {
            getParsingFlags(config).invalidMonth = input;
        }
    });

    // LOCALES

    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
            '_'
        ),
        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
            '_'
        ),
        MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
        defaultMonthsShortRegex = matchWord,
        defaultMonthsRegex = matchWord;

    function localeMonths(m, format) {
        if (!m) {
            return isArray(this._months)
                ? this._months
                : this._months['standalone'];
        }
        return isArray(this._months)
            ? this._months[m.month()]
            : this._months[
                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
                      ? 'format'
                      : 'standalone'
              ][m.month()];
    }

    function localeMonthsShort(m, format) {
        if (!m) {
            return isArray(this._monthsShort)
                ? this._monthsShort
                : this._monthsShort['standalone'];
        }
        return isArray(this._monthsShort)
            ? this._monthsShort[m.month()]
            : this._monthsShort[
                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
              ][m.month()];
    }

    function handleStrictParse(monthName, format, strict) {
        var i,
            ii,
            mom,
            llc = monthName.toLocaleLowerCase();
        if (!this._monthsParse) {
            // this is not used
            this._monthsParse = [];
            this._longMonthsParse = [];
            this._shortMonthsParse = [];
            for (i = 0; i < 12; ++i) {
                mom = createUTC([2000, i]);
                this._shortMonthsParse[i] = this.monthsShort(
                    mom,
                    ''
                ).toLocaleLowerCase();
                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
            }
        }

        if (strict) {
            if (format === 'MMM') {
                ii = indexOf.call(this._shortMonthsParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._longMonthsParse, llc);
                return ii !== -1 ? ii : null;
            }
        } else {
            if (format === 'MMM') {
                ii = indexOf.call(this._shortMonthsParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._longMonthsParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._longMonthsParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._shortMonthsParse, llc);
                return ii !== -1 ? ii : null;
            }
        }
    }

    function localeMonthsParse(monthName, format, strict) {
        var i, mom, regex;

        if (this._monthsParseExact) {
            return handleStrictParse.call(this, monthName, format, strict);
        }

        if (!this._monthsParse) {
            this._monthsParse = [];
            this._longMonthsParse = [];
            this._shortMonthsParse = [];
        }

        // TODO: add sorting
        // Sorting makes sure if one month (or abbr) is a prefix of another
        // see sorting in computeMonthsParse
        for (i = 0; i < 12; i++) {
            // make the regex if we don't have it already
            mom = createUTC([2000, i]);
            if (strict && !this._longMonthsParse[i]) {
                this._longMonthsParse[i] = new RegExp(
                    '^' + this.months(mom, '').replace('.', '') + '$',
                    'i'
                );
                this._shortMonthsParse[i] = new RegExp(
                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',
                    'i'
                );
            }
            if (!strict && !this._monthsParse[i]) {
                regex =
                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
            }
            // test the regex
            if (
                strict &&
                format === 'MMMM' &&
                this._longMonthsParse[i].test(monthName)
            ) {
                return i;
            } else if (
                strict &&
                format === 'MMM' &&
                this._shortMonthsParse[i].test(monthName)
            ) {
                return i;
            } else if (!strict && this._monthsParse[i].test(monthName)) {
                return i;
            }
        }
    }

    // MOMENTS

    function setMonth(mom, value) {
        var dayOfMonth;

        if (!mom.isValid()) {
            // No op
            return mom;
        }

        if (typeof value === 'string') {
            if (/^\d+$/.test(value)) {
                value = toInt(value);
            } else {
                value = mom.localeData().monthsParse(value);
                // TODO: Another silent failure?
                if (!isNumber(value)) {
                    return mom;
                }
            }
        }

        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
        return mom;
    }

    function getSetMonth(value) {
        if (value != null) {
            setMonth(this, value);
            hooks.updateOffset(this, true);
            return this;
        } else {
            return get(this, 'Month');
        }
    }

    function getDaysInMonth() {
        return daysInMonth(this.year(), this.month());
    }

    function monthsShortRegex(isStrict) {
        if (this._monthsParseExact) {
            if (!hasOwnProp(this, '_monthsRegex')) {
                computeMonthsParse.call(this);
            }
            if (isStrict) {
                return this._monthsShortStrictRegex;
            } else {
                return this._monthsShortRegex;
            }
        } else {
            if (!hasOwnProp(this, '_monthsShortRegex')) {
                this._monthsShortRegex = defaultMonthsShortRegex;
            }
            return this._monthsShortStrictRegex && isStrict
                ? this._monthsShortStrictRegex
                : this._monthsShortRegex;
        }
    }

    function monthsRegex(isStrict) {
        if (this._monthsParseExact) {
            if (!hasOwnProp(this, '_monthsRegex')) {
                computeMonthsParse.call(this);
            }
            if (isStrict) {
                return this._monthsStrictRegex;
            } else {
                return this._monthsRegex;
            }
        } else {
            if (!hasOwnProp(this, '_monthsRegex')) {
                this._monthsRegex = defaultMonthsRegex;
            }
            return this._monthsStrictRegex && isStrict
                ? this._monthsStrictRegex
                : this._monthsRegex;
        }
    }

    function computeMonthsParse() {
        function cmpLenRev(a, b) {
            return b.length - a.length;
        }

        var shortPieces = [],
            longPieces = [],
            mixedPieces = [],
            i,
            mom;
        for (i = 0; i < 12; i++) {
            // make the regex if we don't have it already
            mom = createUTC([2000, i]);
            shortPieces.push(this.monthsShort(mom, ''));
            longPieces.push(this.months(mom, ''));
            mixedPieces.push(this.months(mom, ''));
            mixedPieces.push(this.monthsShort(mom, ''));
        }
        // Sorting makes sure if one month (or abbr) is a prefix of another it
        // will match the longer piece.
        shortPieces.sort(cmpLenRev);
        longPieces.sort(cmpLenRev);
        mixedPieces.sort(cmpLenRev);
        for (i = 0; i < 12; i++) {
            shortPieces[i] = regexEscape(shortPieces[i]);
            longPieces[i] = regexEscape(longPieces[i]);
        }
        for (i = 0; i < 24; i++) {
            mixedPieces[i] = regexEscape(mixedPieces[i]);
        }

        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
        this._monthsShortRegex = this._monthsRegex;
        this._monthsStrictRegex = new RegExp(
            '^(' + longPieces.join('|') + ')',
            'i'
        );
        this._monthsShortStrictRegex = new RegExp(
            '^(' + shortPieces.join('|') + ')',
            'i'
        );
    }

    // FORMATTING

    addFormatToken('Y', 0, 0, function () {
        var y = this.year();
        return y <= 9999 ? zeroFill(y, 4) : '+' + y;
    });

    addFormatToken(0, ['YY', 2], 0, function () {
        return this.year() % 100;
    });

    addFormatToken(0, ['YYYY', 4], 0, 'year');
    addFormatToken(0, ['YYYYY', 5], 0, 'year');
    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');

    // ALIASES

    addUnitAlias('year', 'y');

    // PRIORITIES

    addUnitPriority('year', 1);

    // PARSING

    addRegexToken('Y', matchSigned);
    addRegexToken('YY', match1to2, match2);
    addRegexToken('YYYY', match1to4, match4);
    addRegexToken('YYYYY', match1to6, match6);
    addRegexToken('YYYYYY', match1to6, match6);

    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
    addParseToken('YYYY', function (input, array) {
        array[YEAR] =
            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
    });
    addParseToken('YY', function (input, array) {
        array[YEAR] = hooks.parseTwoDigitYear(input);
    });
    addParseToken('Y', function (input, array) {
        array[YEAR] = parseInt(input, 10);
    });

    // HELPERS

    function daysInYear(year) {
        return isLeapYear(year) ? 366 : 365;
    }

    // HOOKS

    hooks.parseTwoDigitYear = function (input) {
        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
    };

    // MOMENTS

    var getSetYear = makeGetSet('FullYear', true);

    function getIsLeapYear() {
        return isLeapYear(this.year());
    }

    function createDate(y, m, d, h, M, s, ms) {
        // can't just apply() to create a date:
        // https://stackoverflow.com/q/181348
        var date;
        // the date constructor remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            // preserve leap years using a full 400 year cycle, then reset
            date = new Date(y + 400, m, d, h, M, s, ms);
            if (isFinite(date.getFullYear())) {
                date.setFullYear(y);
            }
        } else {
            date = new Date(y, m, d, h, M, s, ms);
        }

        return date;
    }

    function createUTCDate(y) {
        var date, args;
        // the Date.UTC function remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            args = Array.prototype.slice.call(arguments);
            // preserve leap years using a full 400 year cycle, then reset
            args[0] = y + 400;
            date = new Date(Date.UTC.apply(null, args));
            if (isFinite(date.getUTCFullYear())) {
                date.setUTCFullYear(y);
            }
        } else {
            date = new Date(Date.UTC.apply(null, arguments));
        }

        return date;
    }

    // start-of-first-week - start-of-year
    function firstWeekOffset(year, dow, doy) {
        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
            fwd = 7 + dow - doy,
            // first-week day local weekday -- which local weekday is fwd
            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;

        return -fwdlw + fwd - 1;
    }

    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
        var localWeekday = (7 + weekday - dow) % 7,
            weekOffset = firstWeekOffset(year, dow, doy),
            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
            resYear,
            resDayOfYear;

        if (dayOfYear <= 0) {
            resYear = year - 1;
            resDayOfYear = daysInYear(resYear) + dayOfYear;
        } else if (dayOfYear > daysInYear(year)) {
            resYear = year + 1;
            resDayOfYear = dayOfYear - daysInYear(year);
        } else {
            resYear = year;
            resDayOfYear = dayOfYear;
        }

        return {
            year: resYear,
            dayOfYear: resDayOfYear,
        };
    }

    function weekOfYear(mom, dow, doy) {
        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
            resWeek,
            resYear;

        if (week < 1) {
            resYear = mom.year() - 1;
            resWeek = week + weeksInYear(resYear, dow, doy);
        } else if (week > weeksInYear(mom.year(), dow, doy)) {
            resWeek = week - weeksInYear(mom.year(), dow, doy);
            resYear = mom.year() + 1;
        } else {
            resYear = mom.year();
            resWeek = week;
        }

        return {
            week: resWeek,
            year: resYear,
        };
    }

    function weeksInYear(year, dow, doy) {
        var weekOffset = firstWeekOffset(year, dow, doy),
            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
    }

    // FORMATTING

    addFormatToken('w', ['ww', 2], 'wo', 'week');
    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');

    // ALIASES

    addUnitAlias('week', 'w');
    addUnitAlias('isoWeek', 'W');

    // PRIORITIES

    addUnitPriority('week', 5);
    addUnitPriority('isoWeek', 5);

    // PARSING

    addRegexToken('w', match1to2);
    addRegexToken('ww', match1to2, match2);
    addRegexToken('W', match1to2);
    addRegexToken('WW', match1to2, match2);

    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
        input,
        week,
        config,
        token
    ) {
        week[token.substr(0, 1)] = toInt(input);
    });

    // HELPERS

    // LOCALES

    function localeWeek(mom) {
        return weekOfYear(mom, this._week.dow, this._week.doy).week;
    }

    var defaultLocaleWeek = {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    };

    function localeFirstDayOfWeek() {
        return this._week.dow;
    }

    function localeFirstDayOfYear() {
        return this._week.doy;
    }

    // MOMENTS

    function getSetWeek(input) {
        var week = this.localeData().week(this);
        return input == null ? week : this.add((input - week) * 7, 'd');
    }

    function getSetISOWeek(input) {
        var week = weekOfYear(this, 1, 4).week;
        return input == null ? week : this.add((input - week) * 7, 'd');
    }

    // FORMATTING

    addFormatToken('d', 0, 'do', 'day');

    addFormatToken('dd', 0, 0, function (format) {
        return this.localeData().weekdaysMin(this, format);
    });

    addFormatToken('ddd', 0, 0, function (format) {
        return this.localeData().weekdaysShort(this, format);
    });

    addFormatToken('dddd', 0, 0, function (format) {
        return this.localeData().weekdays(this, format);
    });

    addFormatToken('e', 0, 0, 'weekday');
    addFormatToken('E', 0, 0, 'isoWeekday');

    // ALIASES

    addUnitAlias('day', 'd');
    addUnitAlias('weekday', 'e');
    addUnitAlias('isoWeekday', 'E');

    // PRIORITY
    addUnitPriority('day', 11);
    addUnitPriority('weekday', 11);
    addUnitPriority('isoWeekday', 11);

    // PARSING

    addRegexToken('d', match1to2);
    addRegexToken('e', match1to2);
    addRegexToken('E', match1to2);
    addRegexToken('dd', function (isStrict, locale) {
        return locale.weekdaysMinRegex(isStrict);
    });
    addRegexToken('ddd', function (isStrict, locale) {
        return locale.weekdaysShortRegex(isStrict);
    });
    addRegexToken('dddd', function (isStrict, locale) {
        return locale.weekdaysRegex(isStrict);
    });

    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
        var weekday = config._locale.weekdaysParse(input, token, config._strict);
        // if we didn't get a weekday name, mark the date as invalid
        if (weekday != null) {
            week.d = weekday;
        } else {
            getParsingFlags(config).invalidWeekday = input;
        }
    });

    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
        week[token] = toInt(input);
    });

    // HELPERS

    function parseWeekday(input, locale) {
        if (typeof input !== 'string') {
            return input;
        }

        if (!isNaN(input)) {
            return parseInt(input, 10);
        }

        input = locale.weekdaysParse(input);
        if (typeof input === 'number') {
            return input;
        }

        return null;
    }

    function parseIsoWeekday(input, locale) {
        if (typeof input === 'string') {
            return locale.weekdaysParse(input) % 7 || 7;
        }
        return isNaN(input) ? null : input;
    }

    // LOCALES
    function shiftWeekdays(ws, n) {
        return ws.slice(n, 7).concat(ws.slice(0, n));
    }

    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
            '_'
        ),
        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
        defaultWeekdaysRegex = matchWord,
        defaultWeekdaysShortRegex = matchWord,
        defaultWeekdaysMinRegex = matchWord;

    function localeWeekdays(m, format) {
        var weekdays = isArray(this._weekdays)
            ? this._weekdays
            : this._weekdays[
                  m && m !== true && this._weekdays.isFormat.test(format)
                      ? 'format'
                      : 'standalone'
              ];
        return m === true
            ? shiftWeekdays(weekdays, this._week.dow)
            : m
            ? weekdays[m.day()]
            : weekdays;
    }

    function localeWeekdaysShort(m) {
        return m === true
            ? shiftWeekdays(this._weekdaysShort, this._week.dow)
            : m
            ? this._weekdaysShort[m.day()]
            : this._weekdaysShort;
    }

    function localeWeekdaysMin(m) {
        return m === true
            ? shiftWeekdays(this._weekdaysMin, this._week.dow)
            : m
            ? this._weekdaysMin[m.day()]
            : this._weekdaysMin;
    }

    function handleStrictParse$1(weekdayName, format, strict) {
        var i,
            ii,
            mom,
            llc = weekdayName.toLocaleLowerCase();
        if (!this._weekdaysParse) {
            this._weekdaysParse = [];
            this._shortWeekdaysParse = [];
            this._minWeekdaysParse = [];

            for (i = 0; i < 7; ++i) {
                mom = createUTC([2000, 1]).day(i);
                this._minWeekdaysParse[i] = this.weekdaysMin(
                    mom,
                    ''
                ).toLocaleLowerCase();
                this._shortWeekdaysParse[i] = this.weekdaysShort(
                    mom,
                    ''
                ).toLocaleLowerCase();
                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
            }
        }

        if (strict) {
            if (format === 'dddd') {
                ii = indexOf.call(this._weekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else if (format === 'ddd') {
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            }
        } else {
            if (format === 'dddd') {
                ii = indexOf.call(this._weekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else if (format === 'ddd') {
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._weekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._minWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            } else {
                ii = indexOf.call(this._minWeekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._weekdaysParse, llc);
                if (ii !== -1) {
                    return ii;
                }
                ii = indexOf.call(this._shortWeekdaysParse, llc);
                return ii !== -1 ? ii : null;
            }
        }
    }

    function localeWeekdaysParse(weekdayName, format, strict) {
        var i, mom, regex;

        if (this._weekdaysParseExact) {
            return handleStrictParse$1.call(this, weekdayName, format, strict);
        }

        if (!this._weekdaysParse) {
            this._weekdaysParse = [];
            this._minWeekdaysParse = [];
            this._shortWeekdaysParse = [];
            this._fullWeekdaysParse = [];
        }

        for (i = 0; i < 7; i++) {
            // make the regex if we don't have it already

            mom = createUTC([2000, 1]).day(i);
            if (strict && !this._fullWeekdaysParse[i]) {
                this._fullWeekdaysParse[i] = new RegExp(
                    '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
                    'i'
                );
                this._shortWeekdaysParse[i] = new RegExp(
                    '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
                    'i'
                );
                this._minWeekdaysParse[i] = new RegExp(
                    '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
                    'i'
                );
            }
            if (!this._weekdaysParse[i]) {
                regex =
                    '^' +
                    this.weekdays(mom, '') +
                    '|^' +
                    this.weekdaysShort(mom, '') +
                    '|^' +
                    this.weekdaysMin(mom, '');
                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
            }
            // test the regex
            if (
                strict &&
                format === 'dddd' &&
                this._fullWeekdaysParse[i].test(weekdayName)
            ) {
                return i;
            } else if (
                strict &&
                format === 'ddd' &&
                this._shortWeekdaysParse[i].test(weekdayName)
            ) {
                return i;
            } else if (
                strict &&
                format === 'dd' &&
                this._minWeekdaysParse[i].test(weekdayName)
            ) {
                return i;
            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
                return i;
            }
        }
    }

    // MOMENTS

    function getSetDayOfWeek(input) {
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }
        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
        if (input != null) {
            input = parseWeekday(input, this.localeData());
            return this.add(input - day, 'd');
        } else {
            return day;
        }
    }

    function getSetLocaleDayOfWeek(input) {
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }
        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
        return input == null ? weekday : this.add(input - weekday, 'd');
    }

    function getSetISODayOfWeek(input) {
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }

        // behaves the same as moment#day except
        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
        // as a setter, sunday should belong to the previous week.

        if (input != null) {
            var weekday = parseIsoWeekday(input, this.localeData());
            return this.day(this.day() % 7 ? weekday : weekday - 7);
        } else {
            return this.day() || 7;
        }
    }

    function weekdaysRegex(isStrict) {
        if (this._weekdaysParseExact) {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
            }
            if (isStrict) {
                return this._weekdaysStrictRegex;
            } else {
                return this._weekdaysRegex;
            }
        } else {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                this._weekdaysRegex = defaultWeekdaysRegex;
            }
            return this._weekdaysStrictRegex && isStrict
                ? this._weekdaysStrictRegex
                : this._weekdaysRegex;
        }
    }

    function weekdaysShortRegex(isStrict) {
        if (this._weekdaysParseExact) {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
            }
            if (isStrict) {
                return this._weekdaysShortStrictRegex;
            } else {
                return this._weekdaysShortRegex;
            }
        } else {
            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
            }
            return this._weekdaysShortStrictRegex && isStrict
                ? this._weekdaysShortStrictRegex
                : this._weekdaysShortRegex;
        }
    }

    function weekdaysMinRegex(isStrict) {
        if (this._weekdaysParseExact) {
            if (!hasOwnProp(this, '_weekdaysRegex')) {
                computeWeekdaysParse.call(this);
            }
            if (isStrict) {
                return this._weekdaysMinStrictRegex;
            } else {
                return this._weekdaysMinRegex;
            }
        } else {
            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
            }
            return this._weekdaysMinStrictRegex && isStrict
                ? this._weekdaysMinStrictRegex
                : this._weekdaysMinRegex;
        }
    }

    function computeWeekdaysParse() {
        function cmpLenRev(a, b) {
            return b.length - a.length;
        }

        var minPieces = [],
            shortPieces = [],
            longPieces = [],
            mixedPieces = [],
            i,
            mom,
            minp,
            shortp,
            longp;
        for (i = 0; i < 7; i++) {
            // make the regex if we don't have it already
            mom = createUTC([2000, 1]).day(i);
            minp = regexEscape(this.weekdaysMin(mom, ''));
            shortp = regexEscape(this.weekdaysShort(mom, ''));
            longp = regexEscape(this.weekdays(mom, ''));
            minPieces.push(minp);
            shortPieces.push(shortp);
            longPieces.push(longp);
            mixedPieces.push(minp);
            mixedPieces.push(shortp);
            mixedPieces.push(longp);
        }
        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
        // will match the longer piece.
        minPieces.sort(cmpLenRev);
        shortPieces.sort(cmpLenRev);
        longPieces.sort(cmpLenRev);
        mixedPieces.sort(cmpLenRev);

        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
        this._weekdaysShortRegex = this._weekdaysRegex;
        this._weekdaysMinRegex = this._weekdaysRegex;

        this._weekdaysStrictRegex = new RegExp(
            '^(' + longPieces.join('|') + ')',
            'i'
        );
        this._weekdaysShortStrictRegex = new RegExp(
            '^(' + shortPieces.join('|') + ')',
            'i'
        );
        this._weekdaysMinStrictRegex = new RegExp(
            '^(' + minPieces.join('|') + ')',
            'i'
        );
    }

    // FORMATTING

    function hFormat() {
        return this.hours() % 12 || 12;
    }

    function kFormat() {
        return this.hours() || 24;
    }

    addFormatToken('H', ['HH', 2], 0, 'hour');
    addFormatToken('h', ['hh', 2], 0, hFormat);
    addFormatToken('k', ['kk', 2], 0, kFormat);

    addFormatToken('hmm', 0, 0, function () {
        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
    });

    addFormatToken('hmmss', 0, 0, function () {
        return (
            '' +
            hFormat.apply(this) +
            zeroFill(this.minutes(), 2) +
            zeroFill(this.seconds(), 2)
        );
    });

    addFormatToken('Hmm', 0, 0, function () {
        return '' + this.hours() + zeroFill(this.minutes(), 2);
    });

    addFormatToken('Hmmss', 0, 0, function () {
        return (
            '' +
            this.hours() +
            zeroFill(this.minutes(), 2) +
            zeroFill(this.seconds(), 2)
        );
    });

    function meridiem(token, lowercase) {
        addFormatToken(token, 0, 0, function () {
            return this.localeData().meridiem(
                this.hours(),
                this.minutes(),
                lowercase
            );
        });
    }

    meridiem('a', true);
    meridiem('A', false);

    // ALIASES

    addUnitAlias('hour', 'h');

    // PRIORITY
    addUnitPriority('hour', 13);

    // PARSING

    function matchMeridiem(isStrict, locale) {
        return locale._meridiemParse;
    }

    addRegexToken('a', matchMeridiem);
    addRegexToken('A', matchMeridiem);
    addRegexToken('H', match1to2);
    addRegexToken('h', match1to2);
    addRegexToken('k', match1to2);
    addRegexToken('HH', match1to2, match2);
    addRegexToken('hh', match1to2, match2);
    addRegexToken('kk', match1to2, match2);

    addRegexToken('hmm', match3to4);
    addRegexToken('hmmss', match5to6);
    addRegexToken('Hmm', match3to4);
    addRegexToken('Hmmss', match5to6);

    addParseToken(['H', 'HH'], HOUR);
    addParseToken(['k', 'kk'], function (input, array, config) {
        var kInput = toInt(input);
        array[HOUR] = kInput === 24 ? 0 : kInput;
    });
    addParseToken(['a', 'A'], function (input, array, config) {
        config._isPm = config._locale.isPM(input);
        config._meridiem = input;
    });
    addParseToken(['h', 'hh'], function (input, array, config) {
        array[HOUR] = toInt(input);
        getParsingFlags(config).bigHour = true;
    });
    addParseToken('hmm', function (input, array, config) {
        var pos = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos));
        array[MINUTE] = toInt(input.substr(pos));
        getParsingFlags(config).bigHour = true;
    });
    addParseToken('hmmss', function (input, array, config) {
        var pos1 = input.length - 4,
            pos2 = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos1));
        array[MINUTE] = toInt(input.substr(pos1, 2));
        array[SECOND] = toInt(input.substr(pos2));
        getParsingFlags(config).bigHour = true;
    });
    addParseToken('Hmm', function (input, array, config) {
        var pos = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos));
        array[MINUTE] = toInt(input.substr(pos));
    });
    addParseToken('Hmmss', function (input, array, config) {
        var pos1 = input.length - 4,
            pos2 = input.length - 2;
        array[HOUR] = toInt(input.substr(0, pos1));
        array[MINUTE] = toInt(input.substr(pos1, 2));
        array[SECOND] = toInt(input.substr(pos2));
    });

    // LOCALES

    function localeIsPM(input) {
        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
        // Using charAt should be more compatible.
        return (input + '').toLowerCase().charAt(0) === 'p';
    }

    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
        // Setting the hour should keep the time, because the user explicitly
        // specified which hour they want. So trying to maintain the same hour (in
        // a new timezone) makes sense. Adding/subtracting hours does not follow
        // this rule.
        getSetHour = makeGetSet('Hours', true);

    function localeMeridiem(hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? 'pm' : 'PM';
        } else {
            return isLower ? 'am' : 'AM';
        }
    }

    var baseConfig = {
        calendar: defaultCalendar,
        longDateFormat: defaultLongDateFormat,
        invalidDate: defaultInvalidDate,
        ordinal: defaultOrdinal,
        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
        relativeTime: defaultRelativeTime,

        months: defaultLocaleMonths,
        monthsShort: defaultLocaleMonthsShort,

        week: defaultLocaleWeek,

        weekdays: defaultLocaleWeekdays,
        weekdaysMin: defaultLocaleWeekdaysMin,
        weekdaysShort: defaultLocaleWeekdaysShort,

        meridiemParse: defaultLocaleMeridiemParse,
    };

    // internal storage for locale config files
    var locales = {},
        localeFamilies = {},
        globalLocale;

    function commonPrefix(arr1, arr2) {
        var i,
            minl = Math.min(arr1.length, arr2.length);
        for (i = 0; i < minl; i += 1) {
            if (arr1[i] !== arr2[i]) {
                return i;
            }
        }
        return minl;
    }

    function normalizeLocale(key) {
        return key ? key.toLowerCase().replace('_', '-') : key;
    }

    // pick the locale from the array
    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
    function chooseLocale(names) {
        var i = 0,
            j,
            next,
            locale,
            split;

        while (i < names.length) {
            split = normalizeLocale(names[i]).split('-');
            j = split.length;
            next = normalizeLocale(names[i + 1]);
            next = next ? next.split('-') : null;
            while (j > 0) {
                locale = loadLocale(split.slice(0, j).join('-'));
                if (locale) {
                    return locale;
                }
                if (
                    next &&
                    next.length >= j &&
                    commonPrefix(split, next) >= j - 1
                ) {
                    //the next array item is better than a shallower substring of this one
                    break;
                }
                j--;
            }
            i++;
        }
        return globalLocale;
    }

    function loadLocale(name) {
        var oldLocale = null,
            aliasedRequire;
        // TODO: Find a better way to register and load all the locales in Node
        if (
            locales[name] === undefined &&
            typeof module !== 'undefined' &&
            module &&
            module.exports
        ) {
            try {
                oldLocale = globalLocale._abbr;
                aliasedRequire = require;
                aliasedRequire('./locale/' + name);
                getSetGlobalLocale(oldLocale);
            } catch (e) {
                // mark as not found to avoid repeating expensive file require call causing high CPU
                // when trying to find en-US, en_US, en-us for every format call
                locales[name] = null; // null means not found
            }
        }
        return locales[name];
    }

    // This function will load locale and then set the global locale.  If
    // no arguments are passed in, it will simply return the current global
    // locale key.
    function getSetGlobalLocale(key, values) {
        var data;
        if (key) {
            if (isUndefined(values)) {
                data = getLocale(key);
            } else {
                data = defineLocale(key, values);
            }

            if (data) {
                // moment.duration._locale = moment._locale = data;
                globalLocale = data;
            } else {
                if (typeof console !== 'undefined' && console.warn) {
                    //warn user if arguments are passed but the locale could not be set
                    console.warn(
                        'Locale ' + key + ' not found. Did you forget to load it?'
                    );
                }
            }
        }

        return globalLocale._abbr;
    }

    function defineLocale(name, config) {
        if (config !== null) {
            var locale,
                parentConfig = baseConfig;
            config.abbr = name;
            if (locales[name] != null) {
                deprecateSimple(
                    'defineLocaleOverride',
                    'use moment.updateLocale(localeName, config) to change ' +
                        'an existing locale. moment.defineLocale(localeName, ' +
                        'config) should only be used for creating a new locale ' +
                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
                );
                parentConfig = locales[name]._config;
            } else if (config.parentLocale != null) {
                if (locales[config.parentLocale] != null) {
                    parentConfig = locales[config.parentLocale]._config;
                } else {
                    locale = loadLocale(config.parentLocale);
                    if (locale != null) {
                        parentConfig = locale._config;
                    } else {
                        if (!localeFamilies[config.parentLocale]) {
                            localeFamilies[config.parentLocale] = [];
                        }
                        localeFamilies[config.parentLocale].push({
                            name: name,
                            config: config,
                        });
                        return null;
                    }
                }
            }
            locales[name] = new Locale(mergeConfigs(parentConfig, config));

            if (localeFamilies[name]) {
                localeFamilies[name].forEach(function (x) {
                    defineLocale(x.name, x.config);
                });
            }

            // backwards compat for now: also set the locale
            // make sure we set the locale AFTER all child locales have been
            // created, so we won't end up with the child locale set.
            getSetGlobalLocale(name);

            return locales[name];
        } else {
            // useful for testing
            delete locales[name];
            return null;
        }
    }

    function updateLocale(name, config) {
        if (config != null) {
            var locale,
                tmpLocale,
                parentConfig = baseConfig;

            if (locales[name] != null && locales[name].parentLocale != null) {
                // Update existing child locale in-place to avoid memory-leaks
                locales[name].set(mergeConfigs(locales[name]._config, config));
            } else {
                // MERGE
                tmpLocale = loadLocale(name);
                if (tmpLocale != null) {
                    parentConfig = tmpLocale._config;
                }
                config = mergeConfigs(parentConfig, config);
                if (tmpLocale == null) {
                    // updateLocale is called for creating a new locale
                    // Set abbr so it will have a name (getters return
                    // undefined otherwise).
                    config.abbr = name;
                }
                locale = new Locale(config);
                locale.parentLocale = locales[name];
                locales[name] = locale;
            }

            // backwards compat for now: also set the locale
            getSetGlobalLocale(name);
        } else {
            // pass null for config to unupdate, useful for tests
            if (locales[name] != null) {
                if (locales[name].parentLocale != null) {
                    locales[name] = locales[name].parentLocale;
                    if (name === getSetGlobalLocale()) {
                        getSetGlobalLocale(name);
                    }
                } else if (locales[name] != null) {
                    delete locales[name];
                }
            }
        }
        return locales[name];
    }

    // returns locale data
    function getLocale(key) {
        var locale;

        if (key && key._locale && key._locale._abbr) {
            key = key._locale._abbr;
        }

        if (!key) {
            return globalLocale;
        }

        if (!isArray(key)) {
            //short-circuit everything else
            locale = loadLocale(key);
            if (locale) {
                return locale;
            }
            key = [key];
        }

        return chooseLocale(key);
    }

    function listLocales() {
        return keys(locales);
    }

    function checkOverflow(m) {
        var overflow,
            a = m._a;

        if (a && getParsingFlags(m).overflow === -2) {
            overflow =
                a[MONTH] < 0 || a[MONTH] > 11
                    ? MONTH
                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
                    ? DATE
                    : a[HOUR] < 0 ||
                      a[HOUR] > 24 ||
                      (a[HOUR] === 24 &&
                          (a[MINUTE] !== 0 ||
                              a[SECOND] !== 0 ||
                              a[MILLISECOND] !== 0))
                    ? HOUR
                    : a[MINUTE] < 0 || a[MINUTE] > 59
                    ? MINUTE
                    : a[SECOND] < 0 || a[SECOND] > 59
                    ? SECOND
                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
                    ? MILLISECOND
                    : -1;

            if (
                getParsingFlags(m)._overflowDayOfYear &&
                (overflow < YEAR || overflow > DATE)
            ) {
                overflow = DATE;
            }
            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
                overflow = WEEK;
            }
            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
                overflow = WEEKDAY;
            }

            getParsingFlags(m).overflow = overflow;
        }

        return m;
    }

    // iso 8601 regex
    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
    var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
        basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
        tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
        isoDates = [
            ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
            ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
            ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
            ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
            ['YYYY-DDD', /\d{4}-\d{3}/],
            ['YYYY-MM', /\d{4}-\d\d/, false],
            ['YYYYYYMMDD', /[+-]\d{10}/],
            ['YYYYMMDD', /\d{8}/],
            ['GGGG[W]WWE', /\d{4}W\d{3}/],
            ['GGGG[W]WW', /\d{4}W\d{2}/, false],
            ['YYYYDDD', /\d{7}/],
            ['YYYYMM', /\d{6}/, false],
            ['YYYY', /\d{4}/, false],
        ],
        // iso time formats and regexes
        isoTimes = [
            ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
            ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
            ['HH:mm:ss', /\d\d:\d\d:\d\d/],
            ['HH:mm', /\d\d:\d\d/],
            ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
            ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
            ['HHmmss', /\d\d\d\d\d\d/],
            ['HHmm', /\d\d\d\d/],
            ['HH', /\d\d/],
        ],
        aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
        rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
        obsOffsets = {
            UT: 0,
            GMT: 0,
            EDT: -4 * 60,
            EST: -5 * 60,
            CDT: -5 * 60,
            CST: -6 * 60,
            MDT: -6 * 60,
            MST: -7 * 60,
            PDT: -7 * 60,
            PST: -8 * 60,
        };

    // date from iso format
    function configFromISO(config) {
        var i,
            l,
            string = config._i,
            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
            allowTime,
            dateFormat,
            timeFormat,
            tzFormat;

        if (match) {
            getParsingFlags(config).iso = true;

            for (i = 0, l = isoDates.length; i < l; i++) {
                if (isoDates[i][1].exec(match[1])) {
                    dateFormat = isoDates[i][0];
                    allowTime = isoDates[i][2] !== false;
                    break;
                }
            }
            if (dateFormat == null) {
                config._isValid = false;
                return;
            }
            if (match[3]) {
                for (i = 0, l = isoTimes.length; i < l; i++) {
                    if (isoTimes[i][1].exec(match[3])) {
                        // match[2] should be 'T' or space
                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
                        break;
                    }
                }
                if (timeFormat == null) {
                    config._isValid = false;
                    return;
                }
            }
            if (!allowTime && timeFormat != null) {
                config._isValid = false;
                return;
            }
            if (match[4]) {
                if (tzRegex.exec(match[4])) {
                    tzFormat = 'Z';
                } else {
                    config._isValid = false;
                    return;
                }
            }
            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
            configFromStringAndFormat(config);
        } else {
            config._isValid = false;
        }
    }

    function extractFromRFC2822Strings(
        yearStr,
        monthStr,
        dayStr,
        hourStr,
        minuteStr,
        secondStr
    ) {
        var result = [
            untruncateYear(yearStr),
            defaultLocaleMonthsShort.indexOf(monthStr),
            parseInt(dayStr, 10),
            parseInt(hourStr, 10),
            parseInt(minuteStr, 10),
        ];

        if (secondStr) {
            result.push(parseInt(secondStr, 10));
        }

        return result;
    }

    function untruncateYear(yearStr) {
        var year = parseInt(yearStr, 10);
        if (year <= 49) {
            return 2000 + year;
        } else if (year <= 999) {
            return 1900 + year;
        }
        return year;
    }

    function preprocessRFC2822(s) {
        // Remove comments and folding whitespace and replace multiple-spaces with a single space
        return s
            .replace(/\([^)]*\)|[\n\t]/g, ' ')
            .replace(/(\s\s+)/g, ' ')
            .replace(/^\s\s*/, '')
            .replace(/\s\s*$/, '');
    }

    function checkWeekday(weekdayStr, parsedInput, config) {
        if (weekdayStr) {
            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
                weekdayActual = new Date(
                    parsedInput[0],
                    parsedInput[1],
                    parsedInput[2]
                ).getDay();
            if (weekdayProvided !== weekdayActual) {
                getParsingFlags(config).weekdayMismatch = true;
                config._isValid = false;
                return false;
            }
        }
        return true;
    }

    function calculateOffset(obsOffset, militaryOffset, numOffset) {
        if (obsOffset) {
            return obsOffsets[obsOffset];
        } else if (militaryOffset) {
            // the only allowed military tz is Z
            return 0;
        } else {
            var hm = parseInt(numOffset, 10),
                m = hm % 100,
                h = (hm - m) / 100;
            return h * 60 + m;
        }
    }

    // date and time from ref 2822 format
    function configFromRFC2822(config) {
        var match = rfc2822.exec(preprocessRFC2822(config._i)),
            parsedArray;
        if (match) {
            parsedArray = extractFromRFC2822Strings(
                match[4],
                match[3],
                match[2],
                match[5],
                match[6],
                match[7]
            );
            if (!checkWeekday(match[1], parsedArray, config)) {
                return;
            }

            config._a = parsedArray;
            config._tzm = calculateOffset(match[8], match[9], match[10]);

            config._d = createUTCDate.apply(null, config._a);
            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);

            getParsingFlags(config).rfc2822 = true;
        } else {
            config._isValid = false;
        }
    }

    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
    function configFromString(config) {
        var matched = aspNetJsonRegex.exec(config._i);
        if (matched !== null) {
            config._d = new Date(+matched[1]);
            return;
        }

        configFromISO(config);
        if (config._isValid === false) {
            delete config._isValid;
        } else {
            return;
        }

        configFromRFC2822(config);
        if (config._isValid === false) {
            delete config._isValid;
        } else {
            return;
        }

        if (config._strict) {
            config._isValid = false;
        } else {
            // Final attempt, use Input Fallback
            hooks.createFromInputFallback(config);
        }
    }

    hooks.createFromInputFallback = deprecate(
        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
        function (config) {
            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
        }
    );

    // Pick the first defined of two or three arguments.
    function defaults(a, b, c) {
        if (a != null) {
            return a;
        }
        if (b != null) {
            return b;
        }
        return c;
    }

    function currentDateArray(config) {
        // hooks is actually the exported moment object
        var nowValue = new Date(hooks.now());
        if (config._useUTC) {
            return [
                nowValue.getUTCFullYear(),
                nowValue.getUTCMonth(),
                nowValue.getUTCDate(),
            ];
        }
        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
    }

    // convert an array to a date.
    // the array should mirror the parameters below
    // note: all values past the year are optional and will default to the lowest possible value.
    // [year, month, day , hour, minute, second, millisecond]
    function configFromArray(config) {
        var i,
            date,
            input = [],
            currentDate,
            expectedWeekday,
            yearToUse;

        if (config._d) {
            return;
        }

        currentDate = currentDateArray(config);

        //compute day of the year from weeks and weekdays
        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
            dayOfYearFromWeekInfo(config);
        }

        //if the day of the year is set, figure out what it is
        if (config._dayOfYear != null) {
            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);

            if (
                config._dayOfYear > daysInYear(yearToUse) ||
                config._dayOfYear === 0
            ) {
                getParsingFlags(config)._overflowDayOfYear = true;
            }

            date = createUTCDate(yearToUse, 0, config._dayOfYear);
            config._a[MONTH] = date.getUTCMonth();
            config._a[DATE] = date.getUTCDate();
        }

        // Default to current date.
        // * if no year, month, day of month are given, default to today
        // * if day of month is given, default month and year
        // * if month is given, default only year
        // * if year is given, don't default anything
        for (i = 0; i < 3 && config._a[i] == null; ++i) {
            config._a[i] = input[i] = currentDate[i];
        }

        // Zero out whatever was not defaulted, including time
        for (; i < 7; i++) {
            config._a[i] = input[i] =
                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
        }

        // Check for 24:00:00.000
        if (
            config._a[HOUR] === 24 &&
            config._a[MINUTE] === 0 &&
            config._a[SECOND] === 0 &&
            config._a[MILLISECOND] === 0
        ) {
            config._nextDay = true;
            config._a[HOUR] = 0;
        }

        config._d = (config._useUTC ? createUTCDate : createDate).apply(
            null,
            input
        );
        expectedWeekday = config._useUTC
            ? config._d.getUTCDay()
            : config._d.getDay();

        // Apply timezone offset from input. The actual utcOffset can be changed
        // with parseZone.
        if (config._tzm != null) {
            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
        }

        if (config._nextDay) {
            config._a[HOUR] = 24;
        }

        // check for mismatching day of week
        if (
            config._w &&
            typeof config._w.d !== 'undefined' &&
            config._w.d !== expectedWeekday
        ) {
            getParsingFlags(config).weekdayMismatch = true;
        }
    }

    function dayOfYearFromWeekInfo(config) {
        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;

        w = config._w;
        if (w.GG != null || w.W != null || w.E != null) {
            dow = 1;
            doy = 4;

            // TODO: We need to take the current isoWeekYear, but that depends on
            // how we interpret now (local, utc, fixed offset). So create
            // a now version of current config (take local/utc/offset flags, and
            // create now).
            weekYear = defaults(
                w.GG,
                config._a[YEAR],
                weekOfYear(createLocal(), 1, 4).year
            );
            week = defaults(w.W, 1);
            weekday = defaults(w.E, 1);
            if (weekday < 1 || weekday > 7) {
                weekdayOverflow = true;
            }
        } else {
            dow = config._locale._week.dow;
            doy = config._locale._week.doy;

            curWeek = weekOfYear(createLocal(), dow, doy);

            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);

            // Default to current week.
            week = defaults(w.w, curWeek.week);

            if (w.d != null) {
                // weekday -- low day numbers are considered next week
                weekday = w.d;
                if (weekday < 0 || weekday > 6) {
                    weekdayOverflow = true;
                }
            } else if (w.e != null) {
                // local weekday -- counting starts from beginning of week
                weekday = w.e + dow;
                if (w.e < 0 || w.e > 6) {
                    weekdayOverflow = true;
                }
            } else {
                // default to beginning of week
                weekday = dow;
            }
        }
        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
            getParsingFlags(config)._overflowWeeks = true;
        } else if (weekdayOverflow != null) {
            getParsingFlags(config)._overflowWeekday = true;
        } else {
            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
            config._a[YEAR] = temp.year;
            config._dayOfYear = temp.dayOfYear;
        }
    }

    // constant that refers to the ISO standard
    hooks.ISO_8601 = function () {};

    // constant that refers to the RFC 2822 form
    hooks.RFC_2822 = function () {};

    // date from string and format string
    function configFromStringAndFormat(config) {
        // TODO: Move this to another part of the creation flow to prevent circular deps
        if (config._f === hooks.ISO_8601) {
            configFromISO(config);
            return;
        }
        if (config._f === hooks.RFC_2822) {
            configFromRFC2822(config);
            return;
        }
        config._a = [];
        getParsingFlags(config).empty = true;

        // This array is used to make a Date, either with `new Date` or `Date.UTC`
        var string = '' + config._i,
            i,
            parsedInput,
            tokens,
            token,
            skipped,
            stringLength = string.length,
            totalParsedInputLength = 0,
            era;

        tokens =
            expandFormat(config._f, config._locale).match(formattingTokens) || [];

        for (i = 0; i < tokens.length; i++) {
            token = tokens[i];
            parsedInput = (string.match(getParseRegexForToken(token, config)) ||
                [])[0];
            if (parsedInput) {
                skipped = string.substr(0, string.indexOf(parsedInput));
                if (skipped.length > 0) {
                    getParsingFlags(config).unusedInput.push(skipped);
                }
                string = string.slice(
                    string.indexOf(parsedInput) + parsedInput.length
                );
                totalParsedInputLength += parsedInput.length;
            }
            // don't parse if it's not a known token
            if (formatTokenFunctions[token]) {
                if (parsedInput) {
                    getParsingFlags(config).empty = false;
                } else {
                    getParsingFlags(config).unusedTokens.push(token);
                }
                addTimeToArrayFromToken(token, parsedInput, config);
            } else if (config._strict && !parsedInput) {
                getParsingFlags(config).unusedTokens.push(token);
            }
        }

        // add remaining unparsed input length to the string
        getParsingFlags(config).charsLeftOver =
            stringLength - totalParsedInputLength;
        if (string.length > 0) {
            getParsingFlags(config).unusedInput.push(string);
        }

        // clear _12h flag if hour is <= 12
        if (
            config._a[HOUR] <= 12 &&
            getParsingFlags(config).bigHour === true &&
            config._a[HOUR] > 0
        ) {
            getParsingFlags(config).bigHour = undefined;
        }

        getParsingFlags(config).parsedDateParts = config._a.slice(0);
        getParsingFlags(config).meridiem = config._meridiem;
        // handle meridiem
        config._a[HOUR] = meridiemFixWrap(
            config._locale,
            config._a[HOUR],
            config._meridiem
        );

        // handle era
        era = getParsingFlags(config).era;
        if (era !== null) {
            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
        }

        configFromArray(config);
        checkOverflow(config);
    }

    function meridiemFixWrap(locale, hour, meridiem) {
        var isPm;

        if (meridiem == null) {
            // nothing to do
            return hour;
        }
        if (locale.meridiemHour != null) {
            return locale.meridiemHour(hour, meridiem);
        } else if (locale.isPM != null) {
            // Fallback
            isPm = locale.isPM(meridiem);
            if (isPm && hour < 12) {
                hour += 12;
            }
            if (!isPm && hour === 12) {
                hour = 0;
            }
            return hour;
        } else {
            // this is not supposed to happen
            return hour;
        }
    }

    // date from string and array of format strings
    function configFromStringAndArray(config) {
        var tempConfig,
            bestMoment,
            scoreToBeat,
            i,
            currentScore,
            validFormatFound,
            bestFormatIsValid = false;

        if (config._f.length === 0) {
            getParsingFlags(config).invalidFormat = true;
            config._d = new Date(NaN);
            return;
        }

        for (i = 0; i < config._f.length; i++) {
            currentScore = 0;
            validFormatFound = false;
            tempConfig = copyConfig({}, config);
            if (config._useUTC != null) {
                tempConfig._useUTC = config._useUTC;
            }
            tempConfig._f = config._f[i];
            configFromStringAndFormat(tempConfig);

            if (isValid(tempConfig)) {
                validFormatFound = true;
            }

            // if there is any input that was not parsed add a penalty for that format
            currentScore += getParsingFlags(tempConfig).charsLeftOver;

            //or tokens
            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;

            getParsingFlags(tempConfig).score = currentScore;

            if (!bestFormatIsValid) {
                if (
                    scoreToBeat == null ||
                    currentScore < scoreToBeat ||
                    validFormatFound
                ) {
                    scoreToBeat = currentScore;
                    bestMoment = tempConfig;
                    if (validFormatFound) {
                        bestFormatIsValid = true;
                    }
                }
            } else {
                if (currentScore < scoreToBeat) {
                    scoreToBeat = currentScore;
                    bestMoment = tempConfig;
                }
            }
        }

        extend(config, bestMoment || tempConfig);
    }

    function configFromObject(config) {
        if (config._d) {
            return;
        }

        var i = normalizeObjectUnits(config._i),
            dayOrDate = i.day === undefined ? i.date : i.day;
        config._a = map(
            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
            function (obj) {
                return obj && parseInt(obj, 10);
            }
        );

        configFromArray(config);
    }

    function createFromConfig(config) {
        var res = new Moment(checkOverflow(prepareConfig(config)));
        if (res._nextDay) {
            // Adding is smart enough around DST
            res.add(1, 'd');
            res._nextDay = undefined;
        }

        return res;
    }

    function prepareConfig(config) {
        var input = config._i,
            format = config._f;

        config._locale = config._locale || getLocale(config._l);

        if (input === null || (format === undefined && input === '')) {
            return createInvalid({ nullInput: true });
        }

        if (typeof input === 'string') {
            config._i = input = config._locale.preparse(input);
        }

        if (isMoment(input)) {
            return new Moment(checkOverflow(input));
        } else if (isDate(input)) {
            config._d = input;
        } else if (isArray(format)) {
            configFromStringAndArray(config);
        } else if (format) {
            configFromStringAndFormat(config);
        } else {
            configFromInput(config);
        }

        if (!isValid(config)) {
            config._d = null;
        }

        return config;
    }

    function configFromInput(config) {
        var input = config._i;
        if (isUndefined(input)) {
            config._d = new Date(hooks.now());
        } else if (isDate(input)) {
            config._d = new Date(input.valueOf());
        } else if (typeof input === 'string') {
            configFromString(config);
        } else if (isArray(input)) {
            config._a = map(input.slice(0), function (obj) {
                return parseInt(obj, 10);
            });
            configFromArray(config);
        } else if (isObject(input)) {
            configFromObject(config);
        } else if (isNumber(input)) {
            // from milliseconds
            config._d = new Date(input);
        } else {
            hooks.createFromInputFallback(config);
        }
    }

    function createLocalOrUTC(input, format, locale, strict, isUTC) {
        var c = {};

        if (format === true || format === false) {
            strict = format;
            format = undefined;
        }

        if (locale === true || locale === false) {
            strict = locale;
            locale = undefined;
        }

        if (
            (isObject(input) && isObjectEmpty(input)) ||
            (isArray(input) && input.length === 0)
        ) {
            input = undefined;
        }
        // object construction must be done this way.
        // https://github.com/moment/moment/issues/1423
        c._isAMomentObject = true;
        c._useUTC = c._isUTC = isUTC;
        c._l = locale;
        c._i = input;
        c._f = format;
        c._strict = strict;

        return createFromConfig(c);
    }

    function createLocal(input, format, locale, strict) {
        return createLocalOrUTC(input, format, locale, strict, false);
    }

    var prototypeMin = deprecate(
            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
            function () {
                var other = createLocal.apply(null, arguments);
                if (this.isValid() && other.isValid()) {
                    return other < this ? this : other;
                } else {
                    return createInvalid();
                }
            }
        ),
        prototypeMax = deprecate(
            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
            function () {
                var other = createLocal.apply(null, arguments);
                if (this.isValid() && other.isValid()) {
                    return other > this ? this : other;
                } else {
                    return createInvalid();
                }
            }
        );

    // Pick a moment m from moments so that m[fn](other) is true for all
    // other. This relies on the function fn to be transitive.
    //
    // moments should either be an array of moment objects or an array, whose
    // first element is an array of moment objects.
    function pickBy(fn, moments) {
        var res, i;
        if (moments.length === 1 && isArray(moments[0])) {
            moments = moments[0];
        }
        if (!moments.length) {
            return createLocal();
        }
        res = moments[0];
        for (i = 1; i < moments.length; ++i) {
            if (!moments[i].isValid() || moments[i][fn](res)) {
                res = moments[i];
            }
        }
        return res;
    }

    // TODO: Use [].sort instead?
    function min() {
        var args = [].slice.call(arguments, 0);

        return pickBy('isBefore', args);
    }

    function max() {
        var args = [].slice.call(arguments, 0);

        return pickBy('isAfter', args);
    }

    var now = function () {
        return Date.now ? Date.now() : +new Date();
    };

    var ordering = [
        'year',
        'quarter',
        'month',
        'week',
        'day',
        'hour',
        'minute',
        'second',
        'millisecond',
    ];

    function isDurationValid(m) {
        var key,
            unitHasDecimal = false,
            i;
        for (key in m) {
            if (
                hasOwnProp(m, key) &&
                !(
                    indexOf.call(ordering, key) !== -1 &&
                    (m[key] == null || !isNaN(m[key]))
                )
            ) {
                return false;
            }
        }

        for (i = 0; i < ordering.length; ++i) {
            if (m[ordering[i]]) {
                if (unitHasDecimal) {
                    return false; // only allow non-integers for smallest unit
                }
                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
                    unitHasDecimal = true;
                }
            }
        }

        return true;
    }

    function isValid$1() {
        return this._isValid;
    }

    function createInvalid$1() {
        return createDuration(NaN);
    }

    function Duration(duration) {
        var normalizedInput = normalizeObjectUnits(duration),
            years = normalizedInput.year || 0,
            quarters = normalizedInput.quarter || 0,
            months = normalizedInput.month || 0,
            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
            days = normalizedInput.day || 0,
            hours = normalizedInput.hour || 0,
            minutes = normalizedInput.minute || 0,
            seconds = normalizedInput.second || 0,
            milliseconds = normalizedInput.millisecond || 0;

        this._isValid = isDurationValid(normalizedInput);

        // representation for dateAddRemove
        this._milliseconds =
            +milliseconds +
            seconds * 1e3 + // 1000
            minutes * 6e4 + // 1000 * 60
            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
        // Because of dateAddRemove treats 24 hours as different from a
        // day when working around DST, we need to store them separately
        this._days = +days + weeks * 7;
        // It is impossible to translate months into days without knowing
        // which months you are are talking about, so we have to store
        // it separately.
        this._months = +months + quarters * 3 + years * 12;

        this._data = {};

        this._locale = getLocale();

        this._bubble();
    }

    function isDuration(obj) {
        return obj instanceof Duration;
    }

    function absRound(number) {
        if (number < 0) {
            return Math.round(-1 * number) * -1;
        } else {
            return Math.round(number);
        }
    }

    // compare two arrays, return the number of differences
    function compareArrays(array1, array2, dontConvert) {
        var len = Math.min(array1.length, array2.length),
            lengthDiff = Math.abs(array1.length - array2.length),
            diffs = 0,
            i;
        for (i = 0; i < len; i++) {
            if (
                (dontConvert && array1[i] !== array2[i]) ||
                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
            ) {
                diffs++;
            }
        }
        return diffs + lengthDiff;
    }

    // FORMATTING

    function offset(token, separator) {
        addFormatToken(token, 0, 0, function () {
            var offset = this.utcOffset(),
                sign = '+';
            if (offset < 0) {
                offset = -offset;
                sign = '-';
            }
            return (
                sign +
                zeroFill(~~(offset / 60), 2) +
                separator +
                zeroFill(~~offset % 60, 2)
            );
        });
    }

    offset('Z', ':');
    offset('ZZ', '');

    // PARSING

    addRegexToken('Z', matchShortOffset);
    addRegexToken('ZZ', matchShortOffset);
    addParseToken(['Z', 'ZZ'], function (input, array, config) {
        config._useUTC = true;
        config._tzm = offsetFromString(matchShortOffset, input);
    });

    // HELPERS

    // timezone chunker
    // '+10:00' > ['10',  '00']
    // '-1530'  > ['-15', '30']
    var chunkOffset = /([\+\-]|\d\d)/gi;

    function offsetFromString(matcher, string) {
        var matches = (string || '').match(matcher),
            chunk,
            parts,
            minutes;

        if (matches === null) {
            return null;
        }

        chunk = matches[matches.length - 1] || [];
        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
        minutes = +(parts[1] * 60) + toInt(parts[2]);

        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
    }

    // Return a moment from input, that is local/utc/zone equivalent to model.
    function cloneWithOffset(input, model) {
        var res, diff;
        if (model._isUTC) {
            res = model.clone();
            diff =
                (isMoment(input) || isDate(input)
                    ? input.valueOf()
                    : createLocal(input).valueOf()) - res.valueOf();
            // Use low-level api, because this fn is low-level api.
            res._d.setTime(res._d.valueOf() + diff);
            hooks.updateOffset(res, false);
            return res;
        } else {
            return createLocal(input).local();
        }
    }

    function getDateOffset(m) {
        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
        // https://github.com/moment/moment/pull/1871
        return -Math.round(m._d.getTimezoneOffset());
    }

    // HOOKS

    // This function will be called whenever a moment is mutated.
    // It is intended to keep the offset in sync with the timezone.
    hooks.updateOffset = function () {};

    // MOMENTS

    // keepLocalTime = true means only change the timezone, without
    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
    // +0200, so we adjust the time as needed, to be valid.
    //
    // Keeping the time actually adds/subtracts (one hour)
    // from the actual represented time. That is why we call updateOffset
    // a second time. In case it wants us to change the offset again
    // _changeInProgress == true case, then we have to adjust, because
    // there is no such time in the given timezone.
    function getSetOffset(input, keepLocalTime, keepMinutes) {
        var offset = this._offset || 0,
            localAdjust;
        if (!this.isValid()) {
            return input != null ? this : NaN;
        }
        if (input != null) {
            if (typeof input === 'string') {
                input = offsetFromString(matchShortOffset, input);
                if (input === null) {
                    return this;
                }
            } else if (Math.abs(input) < 16 && !keepMinutes) {
                input = input * 60;
            }
            if (!this._isUTC && keepLocalTime) {
                localAdjust = getDateOffset(this);
            }
            this._offset = input;
            this._isUTC = true;
            if (localAdjust != null) {
                this.add(localAdjust, 'm');
            }
            if (offset !== input) {
                if (!keepLocalTime || this._changeInProgress) {
                    addSubtract(
                        this,
                        createDuration(input - offset, 'm'),
                        1,
                        false
                    );
                } else if (!this._changeInProgress) {
                    this._changeInProgress = true;
                    hooks.updateOffset(this, true);
                    this._changeInProgress = null;
                }
            }
            return this;
        } else {
            return this._isUTC ? offset : getDateOffset(this);
        }
    }

    function getSetZone(input, keepLocalTime) {
        if (input != null) {
            if (typeof input !== 'string') {
                input = -input;
            }

            this.utcOffset(input, keepLocalTime);

            return this;
        } else {
            return -this.utcOffset();
        }
    }

    function setOffsetToUTC(keepLocalTime) {
        return this.utcOffset(0, keepLocalTime);
    }

    function setOffsetToLocal(keepLocalTime) {
        if (this._isUTC) {
            this.utcOffset(0, keepLocalTime);
            this._isUTC = false;

            if (keepLocalTime) {
                this.subtract(getDateOffset(this), 'm');
            }
        }
        return this;
    }

    function setOffsetToParsedOffset() {
        if (this._tzm != null) {
            this.utcOffset(this._tzm, false, true);
        } else if (typeof this._i === 'string') {
            var tZone = offsetFromString(matchOffset, this._i);
            if (tZone != null) {
                this.utcOffset(tZone);
            } else {
                this.utcOffset(0, true);
            }
        }
        return this;
    }

    function hasAlignedHourOffset(input) {
        if (!this.isValid()) {
            return false;
        }
        input = input ? createLocal(input).utcOffset() : 0;

        return (this.utcOffset() - input) % 60 === 0;
    }

    function isDaylightSavingTime() {
        return (
            this.utcOffset() > this.clone().month(0).utcOffset() ||
            this.utcOffset() > this.clone().month(5).utcOffset()
        );
    }

    function isDaylightSavingTimeShifted() {
        if (!isUndefined(this._isDSTShifted)) {
            return this._isDSTShifted;
        }

        var c = {},
            other;

        copyConfig(c, this);
        c = prepareConfig(c);

        if (c._a) {
            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
            this._isDSTShifted =
                this.isValid() && compareArrays(c._a, other.toArray()) > 0;
        } else {
            this._isDSTShifted = false;
        }

        return this._isDSTShifted;
    }

    function isLocal() {
        return this.isValid() ? !this._isUTC : false;
    }

    function isUtcOffset() {
        return this.isValid() ? this._isUTC : false;
    }

    function isUtc() {
        return this.isValid() ? this._isUTC && this._offset === 0 : false;
    }

    // ASP.NET json date format regex
    var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
        // and further modified to allow for strings containing both week and day
        isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;

    function createDuration(input, key) {
        var duration = input,
            // matching against regexp is expensive, do it on demand
            match = null,
            sign,
            ret,
            diffRes;

        if (isDuration(input)) {
            duration = {
                ms: input._milliseconds,
                d: input._days,
                M: input._months,
            };
        } else if (isNumber(input) || !isNaN(+input)) {
            duration = {};
            if (key) {
                duration[key] = +input;
            } else {
                duration.milliseconds = +input;
            }
        } else if ((match = aspNetRegex.exec(input))) {
            sign = match[1] === '-' ? -1 : 1;
            duration = {
                y: 0,
                d: toInt(match[DATE]) * sign,
                h: toInt(match[HOUR]) * sign,
                m: toInt(match[MINUTE]) * sign,
                s: toInt(match[SECOND]) * sign,
                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
            };
        } else if ((match = isoRegex.exec(input))) {
            sign = match[1] === '-' ? -1 : 1;
            duration = {
                y: parseIso(match[2], sign),
                M: parseIso(match[3], sign),
                w: parseIso(match[4], sign),
                d: parseIso(match[5], sign),
                h: parseIso(match[6], sign),
                m: parseIso(match[7], sign),
                s: parseIso(match[8], sign),
            };
        } else if (duration == null) {
            // checks for null or undefined
            duration = {};
        } else if (
            typeof duration === 'object' &&
            ('from' in duration || 'to' in duration)
        ) {
            diffRes = momentsDifference(
                createLocal(duration.from),
                createLocal(duration.to)
            );

            duration = {};
            duration.ms = diffRes.milliseconds;
            duration.M = diffRes.months;
        }

        ret = new Duration(duration);

        if (isDuration(input) && hasOwnProp(input, '_locale')) {
            ret._locale = input._locale;
        }

        if (isDuration(input) && hasOwnProp(input, '_isValid')) {
            ret._isValid = input._isValid;
        }

        return ret;
    }

    createDuration.fn = Duration.prototype;
    createDuration.invalid = createInvalid$1;

    function parseIso(inp, sign) {
        // We'd normally use ~~inp for this, but unfortunately it also
        // converts floats to ints.
        // inp may be undefined, so careful calling replace on it.
        var res = inp && parseFloat(inp.replace(',', '.'));
        // apply sign while we're at it
        return (isNaN(res) ? 0 : res) * sign;
    }

    function positiveMomentsDifference(base, other) {
        var res = {};

        res.months =
            other.month() - base.month() + (other.year() - base.year()) * 12;
        if (base.clone().add(res.months, 'M').isAfter(other)) {
            --res.months;
        }

        res.milliseconds = +other - +base.clone().add(res.months, 'M');

        return res;
    }

    function momentsDifference(base, other) {
        var res;
        if (!(base.isValid() && other.isValid())) {
            return { milliseconds: 0, months: 0 };
        }

        other = cloneWithOffset(other, base);
        if (base.isBefore(other)) {
            res = positiveMomentsDifference(base, other);
        } else {
            res = positiveMomentsDifference(other, base);
            res.milliseconds = -res.milliseconds;
            res.months = -res.months;
        }

        return res;
    }

    // TODO: remove 'name' arg after deprecation is removed
    function createAdder(direction, name) {
        return function (val, period) {
            var dur, tmp;
            //invert the arguments, but complain about it
            if (period !== null && !isNaN(+period)) {
                deprecateSimple(
                    name,
                    'moment().' +
                        name +
                        '(period, number) is deprecated. Please use moment().' +
                        name +
                        '(number, period). ' +
                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
                );
                tmp = val;
                val = period;
                period = tmp;
            }

            dur = createDuration(val, period);
            addSubtract(this, dur, direction);
            return this;
        };
    }

    function addSubtract(mom, duration, isAdding, updateOffset) {
        var milliseconds = duration._milliseconds,
            days = absRound(duration._days),
            months = absRound(duration._months);

        if (!mom.isValid()) {
            // No op
            return;
        }

        updateOffset = updateOffset == null ? true : updateOffset;

        if (months) {
            setMonth(mom, get(mom, 'Month') + months * isAdding);
        }
        if (days) {
            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
        }
        if (milliseconds) {
            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
        }
        if (updateOffset) {
            hooks.updateOffset(mom, days || months);
        }
    }

    var add = createAdder(1, 'add'),
        subtract = createAdder(-1, 'subtract');

    function isString(input) {
        return typeof input === 'string' || input instanceof String;
    }

    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
    function isMomentInput(input) {
        return (
            isMoment(input) ||
            isDate(input) ||
            isString(input) ||
            isNumber(input) ||
            isNumberOrStringArray(input) ||
            isMomentInputObject(input) ||
            input === null ||
            input === undefined
        );
    }

    function isMomentInputObject(input) {
        var objectTest = isObject(input) && !isObjectEmpty(input),
            propertyTest = false,
            properties = [
                'years',
                'year',
                'y',
                'months',
                'month',
                'M',
                'days',
                'day',
                'd',
                'dates',
                'date',
                'D',
                'hours',
                'hour',
                'h',
                'minutes',
                'minute',
                'm',
                'seconds',
                'second',
                's',
                'milliseconds',
                'millisecond',
                'ms',
            ],
            i,
            property;

        for (i = 0; i < properties.length; i += 1) {
            property = properties[i];
            propertyTest = propertyTest || hasOwnProp(input, property);
        }

        return objectTest && propertyTest;
    }

    function isNumberOrStringArray(input) {
        var arrayTest = isArray(input),
            dataTypeTest = false;
        if (arrayTest) {
            dataTypeTest =
                input.filter(function (item) {
                    return !isNumber(item) && isString(input);
                }).length === 0;
        }
        return arrayTest && dataTypeTest;
    }

    function isCalendarSpec(input) {
        var objectTest = isObject(input) && !isObjectEmpty(input),
            propertyTest = false,
            properties = [
                'sameDay',
                'nextDay',
                'lastDay',
                'nextWeek',
                'lastWeek',
                'sameElse',
            ],
            i,
            property;

        for (i = 0; i < properties.length; i += 1) {
            property = properties[i];
            propertyTest = propertyTest || hasOwnProp(input, property);
        }

        return objectTest && propertyTest;
    }

    function getCalendarFormat(myMoment, now) {
        var diff = myMoment.diff(now, 'days', true);
        return diff < -6
            ? 'sameElse'
            : diff < -1
            ? 'lastWeek'
            : diff < 0
            ? 'lastDay'
            : diff < 1
            ? 'sameDay'
            : diff < 2
            ? 'nextDay'
            : diff < 7
            ? 'nextWeek'
            : 'sameElse';
    }

    function calendar$1(time, formats) {
        // Support for single parameter, formats only overload to the calendar function
        if (arguments.length === 1) {
            if (!arguments[0]) {
                time = undefined;
                formats = undefined;
            } else if (isMomentInput(arguments[0])) {
                time = arguments[0];
                formats = undefined;
            } else if (isCalendarSpec(arguments[0])) {
                formats = arguments[0];
                time = undefined;
            }
        }
        // We want to compare the start of today, vs this.
        // Getting start-of-today depends on whether we're local/utc/offset or not.
        var now = time || createLocal(),
            sod = cloneWithOffset(now, this).startOf('day'),
            format = hooks.calendarFormat(this, sod) || 'sameElse',
            output =
                formats &&
                (isFunction(formats[format])
                    ? formats[format].call(this, now)
                    : formats[format]);

        return this.format(
            output || this.localeData().calendar(format, this, createLocal(now))
        );
    }

    function clone() {
        return new Moment(this);
    }

    function isAfter(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input);
        if (!(this.isValid() && localInput.isValid())) {
            return false;
        }
        units = normalizeUnits(units) || 'millisecond';
        if (units === 'millisecond') {
            return this.valueOf() > localInput.valueOf();
        } else {
            return localInput.valueOf() < this.clone().startOf(units).valueOf();
        }
    }

    function isBefore(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input);
        if (!(this.isValid() && localInput.isValid())) {
            return false;
        }
        units = normalizeUnits(units) || 'millisecond';
        if (units === 'millisecond') {
            return this.valueOf() < localInput.valueOf();
        } else {
            return this.clone().endOf(units).valueOf() < localInput.valueOf();
        }
    }

    function isBetween(from, to, units, inclusivity) {
        var localFrom = isMoment(from) ? from : createLocal(from),
            localTo = isMoment(to) ? to : createLocal(to);
        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
            return false;
        }
        inclusivity = inclusivity || '()';
        return (
            (inclusivity[0] === '('
                ? this.isAfter(localFrom, units)
                : !this.isBefore(localFrom, units)) &&
            (inclusivity[1] === ')'
                ? this.isBefore(localTo, units)
                : !this.isAfter(localTo, units))
        );
    }

    function isSame(input, units) {
        var localInput = isMoment(input) ? input : createLocal(input),
            inputMs;
        if (!(this.isValid() && localInput.isValid())) {
            return false;
        }
        units = normalizeUnits(units) || 'millisecond';
        if (units === 'millisecond') {
            return this.valueOf() === localInput.valueOf();
        } else {
            inputMs = localInput.valueOf();
            return (
                this.clone().startOf(units).valueOf() <= inputMs &&
                inputMs <= this.clone().endOf(units).valueOf()
            );
        }
    }

    function isSameOrAfter(input, units) {
        return this.isSame(input, units) || this.isAfter(input, units);
    }

    function isSameOrBefore(input, units) {
        return this.isSame(input, units) || this.isBefore(input, units);
    }

    function diff(input, units, asFloat) {
        var that, zoneDelta, output;

        if (!this.isValid()) {
            return NaN;
        }

        that = cloneWithOffset(input, this);

        if (!that.isValid()) {
            return NaN;
        }

        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;

        units = normalizeUnits(units);

        switch (units) {
            case 'year':
                output = monthDiff(this, that) / 12;
                break;
            case 'month':
                output = monthDiff(this, that);
                break;
            case 'quarter':
                output = monthDiff(this, that) / 3;
                break;
            case 'second':
                output = (this - that) / 1e3;
                break; // 1000
            case 'minute':
                output = (this - that) / 6e4;
                break; // 1000 * 60
            case 'hour':
                output = (this - that) / 36e5;
                break; // 1000 * 60 * 60
            case 'day':
                output = (this - that - zoneDelta) / 864e5;
                break; // 1000 * 60 * 60 * 24, negate dst
            case 'week':
                output = (this - that - zoneDelta) / 6048e5;
                break; // 1000 * 60 * 60 * 24 * 7, negate dst
            default:
                output = this - that;
        }

        return asFloat ? output : absFloor(output);
    }

    function monthDiff(a, b) {
        if (a.date() < b.date()) {
            // end-of-month calculations work correct when the start month has more
            // days than the end month.
            return -monthDiff(b, a);
        }
        // difference in months
        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
            // b is in (anchor - 1 month, anchor + 1 month)
            anchor = a.clone().add(wholeMonthDiff, 'months'),
            anchor2,
            adjust;

        if (b - anchor < 0) {
            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
            // linear across the month
            adjust = (b - anchor) / (anchor - anchor2);
        } else {
            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
            // linear across the month
            adjust = (b - anchor) / (anchor2 - anchor);
        }

        //check for negative zero, return zero if negative zero
        return -(wholeMonthDiff + adjust) || 0;
    }

    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';

    function toString() {
        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
    }

    function toISOString(keepOffset) {
        if (!this.isValid()) {
            return null;
        }
        var utc = keepOffset !== true,
            m = utc ? this.clone().utc() : this;
        if (m.year() < 0 || m.year() > 9999) {
            return formatMoment(
                m,
                utc
                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
            );
        }
        if (isFunction(Date.prototype.toISOString)) {
            // native implementation is ~50x faster, use it when we can
            if (utc) {
                return this.toDate().toISOString();
            } else {
                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
                    .toISOString()
                    .replace('Z', formatMoment(m, 'Z'));
            }
        }
        return formatMoment(
            m,
            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
        );
    }

    /**
     * Return a human readable representation of a moment that can
     * also be evaluated to get a new moment which is the same
     *
     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
     */
    function inspect() {
        if (!this.isValid()) {
            return 'moment.invalid(/* ' + this._i + ' */)';
        }
        var func = 'moment',
            zone = '',
            prefix,
            year,
            datetime,
            suffix;
        if (!this.isLocal()) {
            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
            zone = 'Z';
        }
        prefix = '[' + func + '("]';
        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
        datetime = '-MM-DD[T]HH:mm:ss.SSS';
        suffix = zone + '[")]';

        return this.format(prefix + year + datetime + suffix);
    }

    function format(inputString) {
        if (!inputString) {
            inputString = this.isUtc()
                ? hooks.defaultFormatUtc
                : hooks.defaultFormat;
        }
        var output = formatMoment(this, inputString);
        return this.localeData().postformat(output);
    }

    function from(time, withoutSuffix) {
        if (
            this.isValid() &&
            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
        ) {
            return createDuration({ to: this, from: time })
                .locale(this.locale())
                .humanize(!withoutSuffix);
        } else {
            return this.localeData().invalidDate();
        }
    }

    function fromNow(withoutSuffix) {
        return this.from(createLocal(), withoutSuffix);
    }

    function to(time, withoutSuffix) {
        if (
            this.isValid() &&
            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
        ) {
            return createDuration({ from: this, to: time })
                .locale(this.locale())
                .humanize(!withoutSuffix);
        } else {
            return this.localeData().invalidDate();
        }
    }

    function toNow(withoutSuffix) {
        return this.to(createLocal(), withoutSuffix);
    }

    // If passed a locale key, it will set the locale for this
    // instance.  Otherwise, it will return the locale configuration
    // variables for this instance.
    function locale(key) {
        var newLocaleData;

        if (key === undefined) {
            return this._locale._abbr;
        } else {
            newLocaleData = getLocale(key);
            if (newLocaleData != null) {
                this._locale = newLocaleData;
            }
            return this;
        }
    }

    var lang = deprecate(
        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
        function (key) {
            if (key === undefined) {
                return this.localeData();
            } else {
                return this.locale(key);
            }
        }
    );

    function localeData() {
        return this._locale;
    }

    var MS_PER_SECOND = 1000,
        MS_PER_MINUTE = 60 * MS_PER_SECOND,
        MS_PER_HOUR = 60 * MS_PER_MINUTE,
        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;

    // actual modulo - handles negative numbers (for dates before 1970):
    function mod$1(dividend, divisor) {
        return ((dividend % divisor) + divisor) % divisor;
    }

    function localStartOfDate(y, m, d) {
        // the date constructor remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            // preserve leap years using a full 400 year cycle, then reset
            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
        } else {
            return new Date(y, m, d).valueOf();
        }
    }

    function utcStartOfDate(y, m, d) {
        // Date.UTC remaps years 0-99 to 1900-1999
        if (y < 100 && y >= 0) {
            // preserve leap years using a full 400 year cycle, then reset
            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
        } else {
            return Date.UTC(y, m, d);
        }
    }

    function startOf(units) {
        var time, startOfDate;
        units = normalizeUnits(units);
        if (units === undefined || units === 'millisecond' || !this.isValid()) {
            return this;
        }

        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

        switch (units) {
            case 'year':
                time = startOfDate(this.year(), 0, 1);
                break;
            case 'quarter':
                time = startOfDate(
                    this.year(),
                    this.month() - (this.month() % 3),
                    1
                );
                break;
            case 'month':
                time = startOfDate(this.year(), this.month(), 1);
                break;
            case 'week':
                time = startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - this.weekday()
                );
                break;
            case 'isoWeek':
                time = startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - (this.isoWeekday() - 1)
                );
                break;
            case 'day':
            case 'date':
                time = startOfDate(this.year(), this.month(), this.date());
                break;
            case 'hour':
                time = this._d.valueOf();
                time -= mod$1(
                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                    MS_PER_HOUR
                );
                break;
            case 'minute':
                time = this._d.valueOf();
                time -= mod$1(time, MS_PER_MINUTE);
                break;
            case 'second':
                time = this._d.valueOf();
                time -= mod$1(time, MS_PER_SECOND);
                break;
        }

        this._d.setTime(time);
        hooks.updateOffset(this, true);
        return this;
    }

    function endOf(units) {
        var time, startOfDate;
        units = normalizeUnits(units);
        if (units === undefined || units === 'millisecond' || !this.isValid()) {
            return this;
        }

        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

        switch (units) {
            case 'year':
                time = startOfDate(this.year() + 1, 0, 1) - 1;
                break;
            case 'quarter':
                time =
                    startOfDate(
                        this.year(),
                        this.month() - (this.month() % 3) + 3,
                        1
                    ) - 1;
                break;
            case 'month':
                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
                break;
            case 'week':
                time =
                    startOfDate(
                        this.year(),
                        this.month(),
                        this.date() - this.weekday() + 7
                    ) - 1;
                break;
            case 'isoWeek':
                time =
                    startOfDate(
                        this.year(),
                        this.month(),
                        this.date() - (this.isoWeekday() - 1) + 7
                    ) - 1;
                break;
            case 'day':
            case 'date':
                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
                break;
            case 'hour':
                time = this._d.valueOf();
                time +=
                    MS_PER_HOUR -
                    mod$1(
                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                        MS_PER_HOUR
                    ) -
                    1;
                break;
            case 'minute':
                time = this._d.valueOf();
                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
                break;
            case 'second':
                time = this._d.valueOf();
                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
                break;
        }

        this._d.setTime(time);
        hooks.updateOffset(this, true);
        return this;
    }

    function valueOf() {
        return this._d.valueOf() - (this._offset || 0) * 60000;
    }

    function unix() {
        return Math.floor(this.valueOf() / 1000);
    }

    function toDate() {
        return new Date(this.valueOf());
    }

    function toArray() {
        var m = this;
        return [
            m.year(),
            m.month(),
            m.date(),
            m.hour(),
            m.minute(),
            m.second(),
            m.millisecond(),
        ];
    }

    function toObject() {
        var m = this;
        return {
            years: m.year(),
            months: m.month(),
            date: m.date(),
            hours: m.hours(),
            minutes: m.minutes(),
            seconds: m.seconds(),
            milliseconds: m.milliseconds(),
        };
    }

    function toJSON() {
        // new Date(NaN).toJSON() === null
        return this.isValid() ? this.toISOString() : null;
    }

    function isValid$2() {
        return isValid(this);
    }

    function parsingFlags() {
        return extend({}, getParsingFlags(this));
    }

    function invalidAt() {
        return getParsingFlags(this).overflow;
    }

    function creationData() {
        return {
            input: this._i,
            format: this._f,
            locale: this._locale,
            isUTC: this._isUTC,
            strict: this._strict,
        };
    }

    addFormatToken('N', 0, 0, 'eraAbbr');
    addFormatToken('NN', 0, 0, 'eraAbbr');
    addFormatToken('NNN', 0, 0, 'eraAbbr');
    addFormatToken('NNNN', 0, 0, 'eraName');
    addFormatToken('NNNNN', 0, 0, 'eraNarrow');

    addFormatToken('y', ['y', 1], 'yo', 'eraYear');
    addFormatToken('y', ['yy', 2], 0, 'eraYear');
    addFormatToken('y', ['yyy', 3], 0, 'eraYear');
    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');

    addRegexToken('N', matchEraAbbr);
    addRegexToken('NN', matchEraAbbr);
    addRegexToken('NNN', matchEraAbbr);
    addRegexToken('NNNN', matchEraName);
    addRegexToken('NNNNN', matchEraNarrow);

    addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
        input,
        array,
        config,
        token
    ) {
        var era = config._locale.erasParse(input, token, config._strict);
        if (era) {
            getParsingFlags(config).era = era;
        } else {
            getParsingFlags(config).invalidEra = input;
        }
    });

    addRegexToken('y', matchUnsigned);
    addRegexToken('yy', matchUnsigned);
    addRegexToken('yyy', matchUnsigned);
    addRegexToken('yyyy', matchUnsigned);
    addRegexToken('yo', matchEraYearOrdinal);

    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
    addParseToken(['yo'], function (input, array, config, token) {
        var match;
        if (config._locale._eraYearOrdinalRegex) {
            match = input.match(config._locale._eraYearOrdinalRegex);
        }

        if (config._locale.eraYearOrdinalParse) {
            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
        } else {
            array[YEAR] = parseInt(input, 10);
        }
    });

    function localeEras(m, format) {
        var i,
            l,
            date,
            eras = this._eras || getLocale('en')._eras;
        for (i = 0, l = eras.length; i < l; ++i) {
            switch (typeof eras[i].since) {
                case 'string':
                    // truncate time
                    date = hooks(eras[i].since).startOf('day');
                    eras[i].since = date.valueOf();
                    break;
            }

            switch (typeof eras[i].until) {
                case 'undefined':
                    eras[i].until = +Infinity;
                    break;
                case 'string':
                    // truncate time
                    date = hooks(eras[i].until).startOf('day').valueOf();
                    eras[i].until = date.valueOf();
                    break;
            }
        }
        return eras;
    }

    function localeErasParse(eraName, format, strict) {
        var i,
            l,
            eras = this.eras(),
            name,
            abbr,
            narrow;
        eraName = eraName.toUpperCase();

        for (i = 0, l = eras.length; i < l; ++i) {
            name = eras[i].name.toUpperCase();
            abbr = eras[i].abbr.toUpperCase();
            narrow = eras[i].narrow.toUpperCase();

            if (strict) {
                switch (format) {
                    case 'N':
                    case 'NN':
                    case 'NNN':
                        if (abbr === eraName) {
                            return eras[i];
                        }
                        break;

                    case 'NNNN':
                        if (name === eraName) {
                            return eras[i];
                        }
                        break;

                    case 'NNNNN':
                        if (narrow === eraName) {
                            return eras[i];
                        }
                        break;
                }
            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
                return eras[i];
            }
        }
    }

    function localeErasConvertYear(era, year) {
        var dir = era.since <= era.until ? +1 : -1;
        if (year === undefined) {
            return hooks(era.since).year();
        } else {
            return hooks(era.since).year() + (year - era.offset) * dir;
        }
    }

    function getEraName() {
        var i,
            l,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].name;
            }
            if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].name;
            }
        }

        return '';
    }

    function getEraNarrow() {
        var i,
            l,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].narrow;
            }
            if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].narrow;
            }
        }

        return '';
    }

    function getEraAbbr() {
        var i,
            l,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (eras[i].since <= val && val <= eras[i].until) {
                return eras[i].abbr;
            }
            if (eras[i].until <= val && val <= eras[i].since) {
                return eras[i].abbr;
            }
        }

        return '';
    }

    function getEraYear() {
        var i,
            l,
            dir,
            val,
            eras = this.localeData().eras();
        for (i = 0, l = eras.length; i < l; ++i) {
            dir = eras[i].since <= eras[i].until ? +1 : -1;

            // truncate time
            val = this.clone().startOf('day').valueOf();

            if (
                (eras[i].since <= val && val <= eras[i].until) ||
                (eras[i].until <= val && val <= eras[i].since)
            ) {
                return (
                    (this.year() - hooks(eras[i].since).year()) * dir +
                    eras[i].offset
                );
            }
        }

        return this.year();
    }

    function erasNameRegex(isStrict) {
        if (!hasOwnProp(this, '_erasNameRegex')) {
            computeErasParse.call(this);
        }
        return isStrict ? this._erasNameRegex : this._erasRegex;
    }

    function erasAbbrRegex(isStrict) {
        if (!hasOwnProp(this, '_erasAbbrRegex')) {
            computeErasParse.call(this);
        }
        return isStrict ? this._erasAbbrRegex : this._erasRegex;
    }

    function erasNarrowRegex(isStrict) {
        if (!hasOwnProp(this, '_erasNarrowRegex')) {
            computeErasParse.call(this);
        }
        return isStrict ? this._erasNarrowRegex : this._erasRegex;
    }

    function matchEraAbbr(isStrict, locale) {
        return locale.erasAbbrRegex(isStrict);
    }

    function matchEraName(isStrict, locale) {
        return locale.erasNameRegex(isStrict);
    }

    function matchEraNarrow(isStrict, locale) {
        return locale.erasNarrowRegex(isStrict);
    }

    function matchEraYearOrdinal(isStrict, locale) {
        return locale._eraYearOrdinalRegex || matchUnsigned;
    }

    function computeErasParse() {
        var abbrPieces = [],
            namePieces = [],
            narrowPieces = [],
            mixedPieces = [],
            i,
            l,
            eras = this.eras();

        for (i = 0, l = eras.length; i < l; ++i) {
            namePieces.push(regexEscape(eras[i].name));
            abbrPieces.push(regexEscape(eras[i].abbr));
            narrowPieces.push(regexEscape(eras[i].narrow));

            mixedPieces.push(regexEscape(eras[i].name));
            mixedPieces.push(regexEscape(eras[i].abbr));
            mixedPieces.push(regexEscape(eras[i].narrow));
        }

        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
        this._erasNarrowRegex = new RegExp(
            '^(' + narrowPieces.join('|') + ')',
            'i'
        );
    }

    // FORMATTING

    addFormatToken(0, ['gg', 2], 0, function () {
        return this.weekYear() % 100;
    });

    addFormatToken(0, ['GG', 2], 0, function () {
        return this.isoWeekYear() % 100;
    });

    function addWeekYearFormatToken(token, getter) {
        addFormatToken(0, [token, token.length], 0, getter);
    }

    addWeekYearFormatToken('gggg', 'weekYear');
    addWeekYearFormatToken('ggggg', 'weekYear');
    addWeekYearFormatToken('GGGG', 'isoWeekYear');
    addWeekYearFormatToken('GGGGG', 'isoWeekYear');

    // ALIASES

    addUnitAlias('weekYear', 'gg');
    addUnitAlias('isoWeekYear', 'GG');

    // PRIORITY

    addUnitPriority('weekYear', 1);
    addUnitPriority('isoWeekYear', 1);

    // PARSING

    addRegexToken('G', matchSigned);
    addRegexToken('g', matchSigned);
    addRegexToken('GG', match1to2, match2);
    addRegexToken('gg', match1to2, match2);
    addRegexToken('GGGG', match1to4, match4);
    addRegexToken('gggg', match1to4, match4);
    addRegexToken('GGGGG', match1to6, match6);
    addRegexToken('ggggg', match1to6, match6);

    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
        input,
        week,
        config,
        token
    ) {
        week[token.substr(0, 2)] = toInt(input);
    });

    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
        week[token] = hooks.parseTwoDigitYear(input);
    });

    // MOMENTS

    function getSetWeekYear(input) {
        return getSetWeekYearHelper.call(
            this,
            input,
            this.week(),
            this.weekday(),
            this.localeData()._week.dow,
            this.localeData()._week.doy
        );
    }

    function getSetISOWeekYear(input) {
        return getSetWeekYearHelper.call(
            this,
            input,
            this.isoWeek(),
            this.isoWeekday(),
            1,
            4
        );
    }

    function getISOWeeksInYear() {
        return weeksInYear(this.year(), 1, 4);
    }

    function getISOWeeksInISOWeekYear() {
        return weeksInYear(this.isoWeekYear(), 1, 4);
    }

    function getWeeksInYear() {
        var weekInfo = this.localeData()._week;
        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
    }

    function getWeeksInWeekYear() {
        var weekInfo = this.localeData()._week;
        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
    }

    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
        var weeksTarget;
        if (input == null) {
            return weekOfYear(this, dow, doy).year;
        } else {
            weeksTarget = weeksInYear(input, dow, doy);
            if (week > weeksTarget) {
                week = weeksTarget;
            }
            return setWeekAll.call(this, input, week, weekday, dow, doy);
        }
    }

    function setWeekAll(weekYear, week, weekday, dow, doy) {
        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);

        this.year(date.getUTCFullYear());
        this.month(date.getUTCMonth());
        this.date(date.getUTCDate());
        return this;
    }

    // FORMATTING

    addFormatToken('Q', 0, 'Qo', 'quarter');

    // ALIASES

    addUnitAlias('quarter', 'Q');

    // PRIORITY

    addUnitPriority('quarter', 7);

    // PARSING

    addRegexToken('Q', match1);
    addParseToken('Q', function (input, array) {
        array[MONTH] = (toInt(input) - 1) * 3;
    });

    // MOMENTS

    function getSetQuarter(input) {
        return input == null
            ? Math.ceil((this.month() + 1) / 3)
            : this.month((input - 1) * 3 + (this.month() % 3));
    }

    // FORMATTING

    addFormatToken('D', ['DD', 2], 'Do', 'date');

    // ALIASES

    addUnitAlias('date', 'D');

    // PRIORITY
    addUnitPriority('date', 9);

    // PARSING

    addRegexToken('D', match1to2);
    addRegexToken('DD', match1to2, match2);
    addRegexToken('Do', function (isStrict, locale) {
        // TODO: Remove "ordinalParse" fallback in next major release.
        return isStrict
            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
            : locale._dayOfMonthOrdinalParseLenient;
    });

    addParseToken(['D', 'DD'], DATE);
    addParseToken('Do', function (input, array) {
        array[DATE] = toInt(input.match(match1to2)[0]);
    });

    // MOMENTS

    var getSetDayOfMonth = makeGetSet('Date', true);

    // FORMATTING

    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');

    // ALIASES

    addUnitAlias('dayOfYear', 'DDD');

    // PRIORITY
    addUnitPriority('dayOfYear', 4);

    // PARSING

    addRegexToken('DDD', match1to3);
    addRegexToken('DDDD', match3);
    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
        config._dayOfYear = toInt(input);
    });

    // HELPERS

    // MOMENTS

    function getSetDayOfYear(input) {
        var dayOfYear =
            Math.round(
                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
            ) + 1;
        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
    }

    // FORMATTING

    addFormatToken('m', ['mm', 2], 0, 'minute');

    // ALIASES

    addUnitAlias('minute', 'm');

    // PRIORITY

    addUnitPriority('minute', 14);

    // PARSING

    addRegexToken('m', match1to2);
    addRegexToken('mm', match1to2, match2);
    addParseToken(['m', 'mm'], MINUTE);

    // MOMENTS

    var getSetMinute = makeGetSet('Minutes', false);

    // FORMATTING

    addFormatToken('s', ['ss', 2], 0, 'second');

    // ALIASES

    addUnitAlias('second', 's');

    // PRIORITY

    addUnitPriority('second', 15);

    // PARSING

    addRegexToken('s', match1to2);
    addRegexToken('ss', match1to2, match2);
    addParseToken(['s', 'ss'], SECOND);

    // MOMENTS

    var getSetSecond = makeGetSet('Seconds', false);

    // FORMATTING

    addFormatToken('S', 0, 0, function () {
        return ~~(this.millisecond() / 100);
    });

    addFormatToken(0, ['SS', 2], 0, function () {
        return ~~(this.millisecond() / 10);
    });

    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
    addFormatToken(0, ['SSSS', 4], 0, function () {
        return this.millisecond() * 10;
    });
    addFormatToken(0, ['SSSSS', 5], 0, function () {
        return this.millisecond() * 100;
    });
    addFormatToken(0, ['SSSSSS', 6], 0, function () {
        return this.millisecond() * 1000;
    });
    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
        return this.millisecond() * 10000;
    });
    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
        return this.millisecond() * 100000;
    });
    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
        return this.millisecond() * 1000000;
    });

    // ALIASES

    addUnitAlias('millisecond', 'ms');

    // PRIORITY

    addUnitPriority('millisecond', 16);

    // PARSING

    addRegexToken('S', match1to3, match1);
    addRegexToken('SS', match1to3, match2);
    addRegexToken('SSS', match1to3, match3);

    var token, getSetMillisecond;
    for (token = 'SSSS'; token.length <= 9; token += 'S') {
        addRegexToken(token, matchUnsigned);
    }

    function parseMs(input, array) {
        array[MILLISECOND] = toInt(('0.' + input) * 1000);
    }

    for (token = 'S'; token.length <= 9; token += 'S') {
        addParseToken(token, parseMs);
    }

    getSetMillisecond = makeGetSet('Milliseconds', false);

    // FORMATTING

    addFormatToken('z', 0, 0, 'zoneAbbr');
    addFormatToken('zz', 0, 0, 'zoneName');

    // MOMENTS

    function getZoneAbbr() {
        return this._isUTC ? 'UTC' : '';
    }

    function getZoneName() {
        return this._isUTC ? 'Coordinated Universal Time' : '';
    }

    var proto = Moment.prototype;

    proto.add = add;
    proto.calendar = calendar$1;
    proto.clone = clone;
    proto.diff = diff;
    proto.endOf = endOf;
    proto.format = format;
    proto.from = from;
    proto.fromNow = fromNow;
    proto.to = to;
    proto.toNow = toNow;
    proto.get = stringGet;
    proto.invalidAt = invalidAt;
    proto.isAfter = isAfter;
    proto.isBefore = isBefore;
    proto.isBetween = isBetween;
    proto.isSame = isSame;
    proto.isSameOrAfter = isSameOrAfter;
    proto.isSameOrBefore = isSameOrBefore;
    proto.isValid = isValid$2;
    proto.lang = lang;
    proto.locale = locale;
    proto.localeData = localeData;
    proto.max = prototypeMax;
    proto.min = prototypeMin;
    proto.parsingFlags = parsingFlags;
    proto.set = stringSet;
    proto.startOf = startOf;
    proto.subtract = subtract;
    proto.toArray = toArray;
    proto.toObject = toObject;
    proto.toDate = toDate;
    proto.toISOString = toISOString;
    proto.inspect = inspect;
    if (typeof Symbol !== 'undefined' && Symbol.for != null) {
        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
            return 'Moment<' + this.format() + '>';
        };
    }
    proto.toJSON = toJSON;
    proto.toString = toString;
    proto.unix = unix;
    proto.valueOf = valueOf;
    proto.creationData = creationData;
    proto.eraName = getEraName;
    proto.eraNarrow = getEraNarrow;
    proto.eraAbbr = getEraAbbr;
    proto.eraYear = getEraYear;
    proto.year = getSetYear;
    proto.isLeapYear = getIsLeapYear;
    proto.weekYear = getSetWeekYear;
    proto.isoWeekYear = getSetISOWeekYear;
    proto.quarter = proto.quarters = getSetQuarter;
    proto.month = getSetMonth;
    proto.daysInMonth = getDaysInMonth;
    proto.week = proto.weeks = getSetWeek;
    proto.isoWeek = proto.isoWeeks = getSetISOWeek;
    proto.weeksInYear = getWeeksInYear;
    proto.weeksInWeekYear = getWeeksInWeekYear;
    proto.isoWeeksInYear = getISOWeeksInYear;
    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
    proto.date = getSetDayOfMonth;
    proto.day = proto.days = getSetDayOfWeek;
    proto.weekday = getSetLocaleDayOfWeek;
    proto.isoWeekday = getSetISODayOfWeek;
    proto.dayOfYear = getSetDayOfYear;
    proto.hour = proto.hours = getSetHour;
    proto.minute = proto.minutes = getSetMinute;
    proto.second = proto.seconds = getSetSecond;
    proto.millisecond = proto.milliseconds = getSetMillisecond;
    proto.utcOffset = getSetOffset;
    proto.utc = setOffsetToUTC;
    proto.local = setOffsetToLocal;
    proto.parseZone = setOffsetToParsedOffset;
    proto.hasAlignedHourOffset = hasAlignedHourOffset;
    proto.isDST = isDaylightSavingTime;
    proto.isLocal = isLocal;
    proto.isUtcOffset = isUtcOffset;
    proto.isUtc = isUtc;
    proto.isUTC = isUtc;
    proto.zoneAbbr = getZoneAbbr;
    proto.zoneName = getZoneName;
    proto.dates = deprecate(
        'dates accessor is deprecated. Use date instead.',
        getSetDayOfMonth
    );
    proto.months = deprecate(
        'months accessor is deprecated. Use month instead',
        getSetMonth
    );
    proto.years = deprecate(
        'years accessor is deprecated. Use year instead',
        getSetYear
    );
    proto.zone = deprecate(
        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
        getSetZone
    );
    proto.isDSTShifted = deprecate(
        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
        isDaylightSavingTimeShifted
    );

    function createUnix(input) {
        return createLocal(input * 1000);
    }

    function createInZone() {
        return createLocal.apply(null, arguments).parseZone();
    }

    function preParsePostFormat(string) {
        return string;
    }

    var proto$1 = Locale.prototype;

    proto$1.calendar = calendar;
    proto$1.longDateFormat = longDateFormat;
    proto$1.invalidDate = invalidDate;
    proto$1.ordinal = ordinal;
    proto$1.preparse = preParsePostFormat;
    proto$1.postformat = preParsePostFormat;
    proto$1.relativeTime = relativeTime;
    proto$1.pastFuture = pastFuture;
    proto$1.set = set;
    proto$1.eras = localeEras;
    proto$1.erasParse = localeErasParse;
    proto$1.erasConvertYear = localeErasConvertYear;
    proto$1.erasAbbrRegex = erasAbbrRegex;
    proto$1.erasNameRegex = erasNameRegex;
    proto$1.erasNarrowRegex = erasNarrowRegex;

    proto$1.months = localeMonths;
    proto$1.monthsShort = localeMonthsShort;
    proto$1.monthsParse = localeMonthsParse;
    proto$1.monthsRegex = monthsRegex;
    proto$1.monthsShortRegex = monthsShortRegex;
    proto$1.week = localeWeek;
    proto$1.firstDayOfYear = localeFirstDayOfYear;
    proto$1.firstDayOfWeek = localeFirstDayOfWeek;

    proto$1.weekdays = localeWeekdays;
    proto$1.weekdaysMin = localeWeekdaysMin;
    proto$1.weekdaysShort = localeWeekdaysShort;
    proto$1.weekdaysParse = localeWeekdaysParse;

    proto$1.weekdaysRegex = weekdaysRegex;
    proto$1.weekdaysShortRegex = weekdaysShortRegex;
    proto$1.weekdaysMinRegex = weekdaysMinRegex;

    proto$1.isPM = localeIsPM;
    proto$1.meridiem = localeMeridiem;

    function get$1(format, index, field, setter) {
        var locale = getLocale(),
            utc = createUTC().set(setter, index);
        return locale[field](utc, format);
    }

    function listMonthsImpl(format, index, field) {
        if (isNumber(format)) {
            index = format;
            format = undefined;
        }

        format = format || '';

        if (index != null) {
            return get$1(format, index, field, 'month');
        }

        var i,
            out = [];
        for (i = 0; i < 12; i++) {
            out[i] = get$1(format, i, field, 'month');
        }
        return out;
    }

    // ()
    // (5)
    // (fmt, 5)
    // (fmt)
    // (true)
    // (true, 5)
    // (true, fmt, 5)
    // (true, fmt)
    function listWeekdaysImpl(localeSorted, format, index, field) {
        if (typeof localeSorted === 'boolean') {
            if (isNumber(format)) {
                index = format;
                format = undefined;
            }

            format = format || '';
        } else {
            format = localeSorted;
            index = format;
            localeSorted = false;

            if (isNumber(format)) {
                index = format;
                format = undefined;
            }

            format = format || '';
        }

        var locale = getLocale(),
            shift = localeSorted ? locale._week.dow : 0,
            i,
            out = [];

        if (index != null) {
            return get$1(format, (index + shift) % 7, field, 'day');
        }

        for (i = 0; i < 7; i++) {
            out[i] = get$1(format, (i + shift) % 7, field, 'day');
        }
        return out;
    }

    function listMonths(format, index) {
        return listMonthsImpl(format, index, 'months');
    }

    function listMonthsShort(format, index) {
        return listMonthsImpl(format, index, 'monthsShort');
    }

    function listWeekdays(localeSorted, format, index) {
        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
    }

    function listWeekdaysShort(localeSorted, format, index) {
        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
    }

    function listWeekdaysMin(localeSorted, format, index) {
        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
    }

    getSetGlobalLocale('en', {
        eras: [
            {
                since: '0001-01-01',
                until: +Infinity,
                offset: 1,
                name: 'Anno Domini',
                narrow: 'AD',
                abbr: 'AD',
            },
            {
                since: '0000-12-31',
                until: -Infinity,
                offset: 1,
                name: 'Before Christ',
                narrow: 'BC',
                abbr: 'BC',
            },
        ],
        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
        ordinal: function (number) {
            var b = number % 10,
                output =
                    toInt((number % 100) / 10) === 1
                        ? 'th'
                        : b === 1
                        ? 'st'
                        : b === 2
                        ? 'nd'
                        : b === 3
                        ? 'rd'
                        : 'th';
            return number + output;
        },
    });

    // Side effect imports

    hooks.lang = deprecate(
        'moment.lang is deprecated. Use moment.locale instead.',
        getSetGlobalLocale
    );
    hooks.langData = deprecate(
        'moment.langData is deprecated. Use moment.localeData instead.',
        getLocale
    );

    var mathAbs = Math.abs;

    function abs() {
        var data = this._data;

        this._milliseconds = mathAbs(this._milliseconds);
        this._days = mathAbs(this._days);
        this._months = mathAbs(this._months);

        data.milliseconds = mathAbs(data.milliseconds);
        data.seconds = mathAbs(data.seconds);
        data.minutes = mathAbs(data.minutes);
        data.hours = mathAbs(data.hours);
        data.months = mathAbs(data.months);
        data.years = mathAbs(data.years);

        return this;
    }

    function addSubtract$1(duration, input, value, direction) {
        var other = createDuration(input, value);

        duration._milliseconds += direction * other._milliseconds;
        duration._days += direction * other._days;
        duration._months += direction * other._months;

        return duration._bubble();
    }

    // supports only 2.0-style add(1, 's') or add(duration)
    function add$1(input, value) {
        return addSubtract$1(this, input, value, 1);
    }

    // supports only 2.0-style subtract(1, 's') or subtract(duration)
    function subtract$1(input, value) {
        return addSubtract$1(this, input, value, -1);
    }

    function absCeil(number) {
        if (number < 0) {
            return Math.floor(number);
        } else {
            return Math.ceil(number);
        }
    }

    function bubble() {
        var milliseconds = this._milliseconds,
            days = this._days,
            months = this._months,
            data = this._data,
            seconds,
            minutes,
            hours,
            years,
            monthsFromDays;

        // if we have a mix of positive and negative values, bubble down first
        // check: https://github.com/moment/moment/issues/2166
        if (
            !(
                (milliseconds >= 0 && days >= 0 && months >= 0) ||
                (milliseconds <= 0 && days <= 0 && months <= 0)
            )
        ) {
            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
            days = 0;
            months = 0;
        }

        // The following code bubbles up values, see the tests for
        // examples of what that means.
        data.milliseconds = milliseconds % 1000;

        seconds = absFloor(milliseconds / 1000);
        data.seconds = seconds % 60;

        minutes = absFloor(seconds / 60);
        data.minutes = minutes % 60;

        hours = absFloor(minutes / 60);
        data.hours = hours % 24;

        days += absFloor(hours / 24);

        // convert days to months
        monthsFromDays = absFloor(daysToMonths(days));
        months += monthsFromDays;
        days -= absCeil(monthsToDays(monthsFromDays));

        // 12 months -> 1 year
        years = absFloor(months / 12);
        months %= 12;

        data.days = days;
        data.months = months;
        data.years = years;

        return this;
    }

    function daysToMonths(days) {
        // 400 years have 146097 days (taking into account leap year rules)
        // 400 years have 12 months === 4800
        return (days * 4800) / 146097;
    }

    function monthsToDays(months) {
        // the reverse of daysToMonths
        return (months * 146097) / 4800;
    }

    function as(units) {
        if (!this.isValid()) {
            return NaN;
        }
        var days,
            months,
            milliseconds = this._milliseconds;

        units = normalizeUnits(units);

        if (units === 'month' || units === 'quarter' || units === 'year') {
            days = this._days + milliseconds / 864e5;
            months = this._months + daysToMonths(days);
            switch (units) {
                case 'month':
                    return months;
                case 'quarter':
                    return months / 3;
                case 'year':
                    return months / 12;
            }
        } else {
            // handle milliseconds separately because of floating point math errors (issue #1867)
            days = this._days + Math.round(monthsToDays(this._months));
            switch (units) {
                case 'week':
                    return days / 7 + milliseconds / 6048e5;
                case 'day':
                    return days + milliseconds / 864e5;
                case 'hour':
                    return days * 24 + milliseconds / 36e5;
                case 'minute':
                    return days * 1440 + milliseconds / 6e4;
                case 'second':
                    return days * 86400 + milliseconds / 1000;
                // Math.floor prevents floating point math errors here
                case 'millisecond':
                    return Math.floor(days * 864e5) + milliseconds;
                default:
                    throw new Error('Unknown unit ' + units);
            }
        }
    }

    // TODO: Use this.as('ms')?
    function valueOf$1() {
        if (!this.isValid()) {
            return NaN;
        }
        return (
            this._milliseconds +
            this._days * 864e5 +
            (this._months % 12) * 2592e6 +
            toInt(this._months / 12) * 31536e6
        );
    }

    function makeAs(alias) {
        return function () {
            return this.as(alias);
        };
    }

    var asMilliseconds = makeAs('ms'),
        asSeconds = makeAs('s'),
        asMinutes = makeAs('m'),
        asHours = makeAs('h'),
        asDays = makeAs('d'),
        asWeeks = makeAs('w'),
        asMonths = makeAs('M'),
        asQuarters = makeAs('Q'),
        asYears = makeAs('y');

    function clone$1() {
        return createDuration(this);
    }

    function get$2(units) {
        units = normalizeUnits(units);
        return this.isValid() ? this[units + 's']() : NaN;
    }

    function makeGetter(name) {
        return function () {
            return this.isValid() ? this._data[name] : NaN;
        };
    }

    var milliseconds = makeGetter('milliseconds'),
        seconds = makeGetter('seconds'),
        minutes = makeGetter('minutes'),
        hours = makeGetter('hours'),
        days = makeGetter('days'),
        months = makeGetter('months'),
        years = makeGetter('years');

    function weeks() {
        return absFloor(this.days() / 7);
    }

    var round = Math.round,
        thresholds = {
            ss: 44, // a few seconds to seconds
            s: 45, // seconds to minute
            m: 45, // minutes to hour
            h: 22, // hours to day
            d: 26, // days to month/week
            w: null, // weeks to month
            M: 11, // months to year
        };

    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
    }

    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
        var duration = createDuration(posNegDuration).abs(),
            seconds = round(duration.as('s')),
            minutes = round(duration.as('m')),
            hours = round(duration.as('h')),
            days = round(duration.as('d')),
            months = round(duration.as('M')),
            weeks = round(duration.as('w')),
            years = round(duration.as('y')),
            a =
                (seconds <= thresholds.ss && ['s', seconds]) ||
                (seconds < thresholds.s && ['ss', seconds]) ||
                (minutes <= 1 && ['m']) ||
                (minutes < thresholds.m && ['mm', minutes]) ||
                (hours <= 1 && ['h']) ||
                (hours < thresholds.h && ['hh', hours]) ||
                (days <= 1 && ['d']) ||
                (days < thresholds.d && ['dd', days]);

        if (thresholds.w != null) {
            a =
                a ||
                (weeks <= 1 && ['w']) ||
                (weeks < thresholds.w && ['ww', weeks]);
        }
        a = a ||
            (months <= 1 && ['M']) ||
            (months < thresholds.M && ['MM', months]) ||
            (years <= 1 && ['y']) || ['yy', years];

        a[2] = withoutSuffix;
        a[3] = +posNegDuration > 0;
        a[4] = locale;
        return substituteTimeAgo.apply(null, a);
    }

    // This function allows you to set the rounding function for relative time strings
    function getSetRelativeTimeRounding(roundingFunction) {
        if (roundingFunction === undefined) {
            return round;
        }
        if (typeof roundingFunction === 'function') {
            round = roundingFunction;
            return true;
        }
        return false;
    }

    // This function allows you to set a threshold for relative time strings
    function getSetRelativeTimeThreshold(threshold, limit) {
        if (thresholds[threshold] === undefined) {
            return false;
        }
        if (limit === undefined) {
            return thresholds[threshold];
        }
        thresholds[threshold] = limit;
        if (threshold === 's') {
            thresholds.ss = limit - 1;
        }
        return true;
    }

    function humanize(argWithSuffix, argThresholds) {
        if (!this.isValid()) {
            return this.localeData().invalidDate();
        }

        var withSuffix = false,
            th = thresholds,
            locale,
            output;

        if (typeof argWithSuffix === 'object') {
            argThresholds = argWithSuffix;
            argWithSuffix = false;
        }
        if (typeof argWithSuffix === 'boolean') {
            withSuffix = argWithSuffix;
        }
        if (typeof argThresholds === 'object') {
            th = Object.assign({}, thresholds, argThresholds);
            if (argThresholds.s != null && argThresholds.ss == null) {
                th.ss = argThresholds.s - 1;
            }
        }

        locale = this.localeData();
        output = relativeTime$1(this, !withSuffix, th, locale);

        if (withSuffix) {
            output = locale.pastFuture(+this, output);
        }

        return locale.postformat(output);
    }

    var abs$1 = Math.abs;

    function sign(x) {
        return (x > 0) - (x < 0) || +x;
    }

    function toISOString$1() {
        // for ISO strings we do not use the normal bubbling rules:
        //  * milliseconds bubble up until they become hours
        //  * days do not bubble at all
        //  * months bubble up until they become years
        // This is because there is no context-free conversion between hours and days
        // (think of clock changes)
        // and also not between days and months (28-31 days per month)
        if (!this.isValid()) {
            return this.localeData().invalidDate();
        }

        var seconds = abs$1(this._milliseconds) / 1000,
            days = abs$1(this._days),
            months = abs$1(this._months),
            minutes,
            hours,
            years,
            s,
            total = this.asSeconds(),
            totalSign,
            ymSign,
            daysSign,
            hmsSign;

        if (!total) {
            // this is the same as C#'s (Noda) and python (isodate)...
            // but not other JS (goog.date)
            return 'P0D';
        }

        // 3600 seconds -> 60 minutes -> 1 hour
        minutes = absFloor(seconds / 60);
        hours = absFloor(minutes / 60);
        seconds %= 60;
        minutes %= 60;

        // 12 months -> 1 year
        years = absFloor(months / 12);
        months %= 12;

        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
        s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';

        totalSign = total < 0 ? '-' : '';
        ymSign = sign(this._months) !== sign(total) ? '-' : '';
        daysSign = sign(this._days) !== sign(total) ? '-' : '';
        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';

        return (
            totalSign +
            'P' +
            (years ? ymSign + years + 'Y' : '') +
            (months ? ymSign + months + 'M' : '') +
            (days ? daysSign + days + 'D' : '') +
            (hours || minutes || seconds ? 'T' : '') +
            (hours ? hmsSign + hours + 'H' : '') +
            (minutes ? hmsSign + minutes + 'M' : '') +
            (seconds ? hmsSign + s + 'S' : '')
        );
    }

    var proto$2 = Duration.prototype;

    proto$2.isValid = isValid$1;
    proto$2.abs = abs;
    proto$2.add = add$1;
    proto$2.subtract = subtract$1;
    proto$2.as = as;
    proto$2.asMilliseconds = asMilliseconds;
    proto$2.asSeconds = asSeconds;
    proto$2.asMinutes = asMinutes;
    proto$2.asHours = asHours;
    proto$2.asDays = asDays;
    proto$2.asWeeks = asWeeks;
    proto$2.asMonths = asMonths;
    proto$2.asQuarters = asQuarters;
    proto$2.asYears = asYears;
    proto$2.valueOf = valueOf$1;
    proto$2._bubble = bubble;
    proto$2.clone = clone$1;
    proto$2.get = get$2;
    proto$2.milliseconds = milliseconds;
    proto$2.seconds = seconds;
    proto$2.minutes = minutes;
    proto$2.hours = hours;
    proto$2.days = days;
    proto$2.weeks = weeks;
    proto$2.months = months;
    proto$2.years = years;
    proto$2.humanize = humanize;
    proto$2.toISOString = toISOString$1;
    proto$2.toString = toISOString$1;
    proto$2.toJSON = toISOString$1;
    proto$2.locale = locale;
    proto$2.localeData = localeData;

    proto$2.toIsoString = deprecate(
        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
        toISOString$1
    );
    proto$2.lang = lang;

    // FORMATTING

    addFormatToken('X', 0, 0, 'unix');
    addFormatToken('x', 0, 0, 'valueOf');

    // PARSING

    addRegexToken('x', matchSigned);
    addRegexToken('X', matchTimestamp);
    addParseToken('X', function (input, array, config) {
        config._d = new Date(parseFloat(input) * 1000);
    });
    addParseToken('x', function (input, array, config) {
        config._d = new Date(toInt(input));
    });

    //! moment.js

    hooks.version = '2.29.1';

    setHookCallback(createLocal);

    hooks.fn = proto;
    hooks.min = min;
    hooks.max = max;
    hooks.now = now;
    hooks.utc = createUTC;
    hooks.unix = createUnix;
    hooks.months = listMonths;
    hooks.isDate = isDate;
    hooks.locale = getSetGlobalLocale;
    hooks.invalid = createInvalid;
    hooks.duration = createDuration;
    hooks.isMoment = isMoment;
    hooks.weekdays = listWeekdays;
    hooks.parseZone = createInZone;
    hooks.localeData = getLocale;
    hooks.isDuration = isDuration;
    hooks.monthsShort = listMonthsShort;
    hooks.weekdaysMin = listWeekdaysMin;
    hooks.defineLocale = defineLocale;
    hooks.updateLocale = updateLocale;
    hooks.locales = listLocales;
    hooks.weekdaysShort = listWeekdaysShort;
    hooks.normalizeUnits = normalizeUnits;
    hooks.relativeTimeRounding = getSetRelativeTimeRounding;
    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
    hooks.calendarFormat = getCalendarFormat;
    hooks.prototype = proto;

    // currently HTML5 input type only supports 24-hour formats
    hooks.HTML5_FMT = {
        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
        DATE: 'YYYY-MM-DD', // <input type="date" />
        TIME: 'HH:mm', // <input type="time" />
        TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
        TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
        WEEK: 'GGGG-[W]WW', // <input type="week" />
        MONTH: 'YYYY-MM', // <input type="month" />
    };

    return hooks;

})));
var profile = {
    resourceTags: {
        ignore: function(filename, mid){
            // only include moment/moment
            return mid != "moment/moment";
        },
        amd: function(filename, mid){
            return /\.js$/.test(filename);
        }
    }
};
{
  "name": "moment",
  "version": "2.29.1",
  "description": "Parse, validate, manipulate, and display dates",
  "homepage": "https://momentjs.com",
  "author": "Iskren Ivov Chernev <iskren.chernev@gmail.com> (https://github.com/ichernev)",
  "main": "./moment.js",
  "jsnext:main": "./dist/moment.js",
  "typings": "./moment.d.ts",
  "typesVersions": {
    ">=3.1": {
      "*": [
        "ts3.1-typings/*"
      ]
    }
  },
  "engines": {
    "node": "*"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/moment/moment.git"
  },
  "license": "MIT",
  "devDependencies": {
    "benchmark": "latest",
    "coveralls": "latest",
    "cross-env": "^6.0.3",
    "es6-promise": "latest",
    "eslint": "~6",
    "grunt": "latest",
    "grunt-benchmark": "latest",
    "grunt-cli": "latest",
    "grunt-contrib-clean": "latest",
    "grunt-contrib-concat": "latest",
    "grunt-contrib-copy": "latest",
    "grunt-contrib-uglify": "latest",
    "grunt-contrib-watch": "latest",
    "grunt-env": "latest",
    "grunt-exec": "latest",
    "grunt-karma": "latest",
    "grunt-nuget": "latest",
    "grunt-string-replace": "latest",
    "karma": "latest",
    "karma-chrome-launcher": "latest",
    "karma-firefox-launcher": "latest",
    "karma-qunit": "latest",
    "karma-sauce-launcher": "4.1.4",
    "load-grunt-tasks": "latest",
    "lodash": ">=4.17.19",
    "node-qunit": "latest",
    "nyc": "latest",
    "prettier": "latest",
    "qunit": "^2.10.0",
    "rollup": "2.17.1",
    "typescript": "^1.8.10",
    "typescript3": "npm:typescript@^3.1.6",
    "uglify-js": "latest"
  },
  "ender": "./ender.js",
  "dojoBuild": "package.js",
  "spm": {
    "main": "moment.js",
    "output": [
      "locale/*.js"
    ]
  }
}import { daysInMonth } from '../units/month';
import {
    YEAR,
    MONTH,
    DATE,
    HOUR,
    MINUTE,
    SECOND,
    MILLISECOND,
    WEEK,
    WEEKDAY,
} from '../units/constants';
import getParsingFlags from '../create/parsing-flags';

export default function checkOverflow(m) {
    var overflow,
        a = m._a;

    if (a && getParsingFlags(m).overflow === -2) {
        overflow =
            a[MONTH] < 0 || a[MONTH] > 11
                ? MONTH
                : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
                ? DATE
                : a[HOUR] < 0 ||
                  a[HOUR] > 24 ||
                  (a[HOUR] === 24 &&
                      (a[MINUTE] !== 0 ||
                          a[SECOND] !== 0 ||
                          a[MILLISECOND] !== 0))
                ? HOUR
                : a[MINUTE] < 0 || a[MINUTE] > 59
                ? MINUTE
                : a[SECOND] < 0 || a[SECOND] > 59
                ? SECOND
                : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
                ? MILLISECOND
                : -1;

        if (
            getParsingFlags(m)._overflowDayOfYear &&
            (overflow < YEAR || overflow > DATE)
        ) {
            overflow = DATE;
        }
        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
            overflow = WEEK;
        }
        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
            overflow = WEEKDAY;
        }

        getParsingFlags(m).overflow = overflow;
    }

    return m;
}
export function createDate(y, m, d, h, M, s, ms) {
    // can't just apply() to create a date:
    // https://stackoverflow.com/q/181348
    var date;
    // the date constructor remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
        // preserve leap years using a full 400 year cycle, then reset
        date = new Date(y + 400, m, d, h, M, s, ms);
        if (isFinite(date.getFullYear())) {
            date.setFullYear(y);
        }
    } else {
        date = new Date(y, m, d, h, M, s, ms);
    }

    return date;
}

export function createUTCDate(y) {
    var date, args;
    // the Date.UTC function remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
        args = Array.prototype.slice.call(arguments);
        // preserve leap years using a full 400 year cycle, then reset
        args[0] = y + 400;
        date = new Date(Date.UTC.apply(null, args));
        if (isFinite(date.getUTCFullYear())) {
            date.setUTCFullYear(y);
        }
    } else {
        date = new Date(Date.UTC.apply(null, arguments));
    }

    return date;
}
import isArray from '../utils/is-array';
import isObject from '../utils/is-object';
import isObjectEmpty from '../utils/is-object-empty';
import isUndefined from '../utils/is-undefined';
import isNumber from '../utils/is-number';
import isDate from '../utils/is-date';
import map from '../utils/map';
import { createInvalid } from './valid';
import { Moment, isMoment } from '../moment/constructor';
import { getLocale } from '../locale/locales';
import { hooks } from '../utils/hooks';
import checkOverflow from './check-overflow';
import { isValid } from './valid';

import { configFromStringAndArray } from './from-string-and-array';
import { configFromStringAndFormat } from './from-string-and-format';
import { configFromString } from './from-string';
import { configFromArray } from './from-array';
import { configFromObject } from './from-object';

function createFromConfig(config) {
    var res = new Moment(checkOverflow(prepareConfig(config)));
    if (res._nextDay) {
        // Adding is smart enough around DST
        res.add(1, 'd');
        res._nextDay = undefined;
    }

    return res;
}

export function prepareConfig(config) {
    var input = config._i,
        format = config._f;

    config._locale = config._locale || getLocale(config._l);

    if (input === null || (format === undefined && input === '')) {
        return createInvalid({ nullInput: true });
    }

    if (typeof input === 'string') {
        config._i = input = config._locale.preparse(input);
    }

    if (isMoment(input)) {
        return new Moment(checkOverflow(input));
    } else if (isDate(input)) {
        config._d = input;
    } else if (isArray(format)) {
        configFromStringAndArray(config);
    } else if (format) {
        configFromStringAndFormat(config);
    } else {
        configFromInput(config);
    }

    if (!isValid(config)) {
        config._d = null;
    }

    return config;
}

function configFromInput(config) {
    var input = config._i;
    if (isUndefined(input)) {
        config._d = new Date(hooks.now());
    } else if (isDate(input)) {
        config._d = new Date(input.valueOf());
    } else if (typeof input === 'string') {
        configFromString(config);
    } else if (isArray(input)) {
        config._a = map(input.slice(0), function (obj) {
            return parseInt(obj, 10);
        });
        configFromArray(config);
    } else if (isObject(input)) {
        configFromObject(config);
    } else if (isNumber(input)) {
        // from milliseconds
        config._d = new Date(input);
    } else {
        hooks.createFromInputFallback(config);
    }
}

export function createLocalOrUTC(input, format, locale, strict, isUTC) {
    var c = {};

    if (format === true || format === false) {
        strict = format;
        format = undefined;
    }

    if (locale === true || locale === false) {
        strict = locale;
        locale = undefined;
    }

    if (
        (isObject(input) && isObjectEmpty(input)) ||
        (isArray(input) && input.length === 0)
    ) {
        input = undefined;
    }
    // object construction must be done this way.
    // https://github.com/moment/moment/issues/1423
    c._isAMomentObject = true;
    c._useUTC = c._isUTC = isUTC;
    c._l = locale;
    c._i = input;
    c._f = format;
    c._strict = strict;

    return createFromConfig(c);
}
import { hooks } from '../utils/hooks';
import { createDate, createUTCDate } from './date-from-array';
import { daysInYear } from '../units/year';
import {
    weekOfYear,
    weeksInYear,
    dayOfYearFromWeeks,
} from '../units/week-calendar-utils';
import {
    YEAR,
    MONTH,
    DATE,
    HOUR,
    MINUTE,
    SECOND,
    MILLISECOND,
} from '../units/constants';
import { createLocal } from './local';
import defaults from '../utils/defaults';
import getParsingFlags from './parsing-flags';

function currentDateArray(config) {
    // hooks is actually the exported moment object
    var nowValue = new Date(hooks.now());
    if (config._useUTC) {
        return [
            nowValue.getUTCFullYear(),
            nowValue.getUTCMonth(),
            nowValue.getUTCDate(),
        ];
    }
    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
}

// convert an array to a date.
// the array should mirror the parameters below
// note: all values past the year are optional and will default to the lowest possible value.
// [year, month, day , hour, minute, second, millisecond]
export function configFromArray(config) {
    var i,
        date,
        input = [],
        currentDate,
        expectedWeekday,
        yearToUse;

    if (config._d) {
        return;
    }

    currentDate = currentDateArray(config);

    //compute day of the year from weeks and weekdays
    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
        dayOfYearFromWeekInfo(config);
    }

    //if the day of the year is set, figure out what it is
    if (config._dayOfYear != null) {
        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);

        if (
            config._dayOfYear > daysInYear(yearToUse) ||
            config._dayOfYear === 0
        ) {
            getParsingFlags(config)._overflowDayOfYear = true;
        }

        date = createUTCDate(yearToUse, 0, config._dayOfYear);
        config._a[MONTH] = date.getUTCMonth();
        config._a[DATE] = date.getUTCDate();
    }

    // Default to current date.
    // * if no year, month, day of month are given, default to today
    // * if day of month is given, default month and year
    // * if month is given, default only year
    // * if year is given, don't default anything
    for (i = 0; i < 3 && config._a[i] == null; ++i) {
        config._a[i] = input[i] = currentDate[i];
    }

    // Zero out whatever was not defaulted, including time
    for (; i < 7; i++) {
        config._a[i] = input[i] =
            config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
    }

    // Check for 24:00:00.000
    if (
        config._a[HOUR] === 24 &&
        config._a[MINUTE] === 0 &&
        config._a[SECOND] === 0 &&
        config._a[MILLISECOND] === 0
    ) {
        config._nextDay = true;
        config._a[HOUR] = 0;
    }

    config._d = (config._useUTC ? createUTCDate : createDate).apply(
        null,
        input
    );
    expectedWeekday = config._useUTC
        ? config._d.getUTCDay()
        : config._d.getDay();

    // Apply timezone offset from input. The actual utcOffset can be changed
    // with parseZone.
    if (config._tzm != null) {
        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
    }

    if (config._nextDay) {
        config._a[HOUR] = 24;
    }

    // check for mismatching day of week
    if (
        config._w &&
        typeof config._w.d !== 'undefined' &&
        config._w.d !== expectedWeekday
    ) {
        getParsingFlags(config).weekdayMismatch = true;
    }
}

function dayOfYearFromWeekInfo(config) {
    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;

    w = config._w;
    if (w.GG != null || w.W != null || w.E != null) {
        dow = 1;
        doy = 4;

        // TODO: We need to take the current isoWeekYear, but that depends on
        // how we interpret now (local, utc, fixed offset). So create
        // a now version of current config (take local/utc/offset flags, and
        // create now).
        weekYear = defaults(
            w.GG,
            config._a[YEAR],
            weekOfYear(createLocal(), 1, 4).year
        );
        week = defaults(w.W, 1);
        weekday = defaults(w.E, 1);
        if (weekday < 1 || weekday > 7) {
            weekdayOverflow = true;
        }
    } else {
        dow = config._locale._week.dow;
        doy = config._locale._week.doy;

        curWeek = weekOfYear(createLocal(), dow, doy);

        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);

        // Default to current week.
        week = defaults(w.w, curWeek.week);

        if (w.d != null) {
            // weekday -- low day numbers are considered next week
            weekday = w.d;
            if (weekday < 0 || weekday > 6) {
                weekdayOverflow = true;
            }
        } else if (w.e != null) {
            // local weekday -- counting starts from beginning of week
            weekday = w.e + dow;
            if (w.e < 0 || w.e > 6) {
                weekdayOverflow = true;
            }
        } else {
            // default to beginning of week
            weekday = dow;
        }
    }
    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
        getParsingFlags(config)._overflowWeeks = true;
    } else if (weekdayOverflow != null) {
        getParsingFlags(config)._overflowWeekday = true;
    } else {
        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
        config._a[YEAR] = temp.year;
        config._dayOfYear = temp.dayOfYear;
    }
}
import { normalizeObjectUnits } from '../units/aliases';
import { configFromArray } from './from-array';
import map from '../utils/map';

export function configFromObject(config) {
    if (config._d) {
        return;
    }

    var i = normalizeObjectUnits(config._i),
        dayOrDate = i.day === undefined ? i.date : i.day;
    config._a = map(
        [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
        function (obj) {
            return obj && parseInt(obj, 10);
        }
    );

    configFromArray(config);
}
import { copyConfig } from '../moment/constructor';
import { configFromStringAndFormat } from './from-string-and-format';
import getParsingFlags from './parsing-flags';
import { isValid } from './valid';
import extend from '../utils/extend';

// date from string and array of format strings
export function configFromStringAndArray(config) {
    var tempConfig,
        bestMoment,
        scoreToBeat,
        i,
        currentScore,
        validFormatFound,
        bestFormatIsValid = false;

    if (config._f.length === 0) {
        getParsingFlags(config).invalidFormat = true;
        config._d = new Date(NaN);
        return;
    }

    for (i = 0; i < config._f.length; i++) {
        currentScore = 0;
        validFormatFound = false;
        tempConfig = copyConfig({}, config);
        if (config._useUTC != null) {
            tempConfig._useUTC = config._useUTC;
        }
        tempConfig._f = config._f[i];
        configFromStringAndFormat(tempConfig);

        if (isValid(tempConfig)) {
            validFormatFound = true;
        }

        // if there is any input that was not parsed add a penalty for that format
        currentScore += getParsingFlags(tempConfig).charsLeftOver;

        //or tokens
        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;

        getParsingFlags(tempConfig).score = currentScore;

        if (!bestFormatIsValid) {
            if (
                scoreToBeat == null ||
                currentScore < scoreToBeat ||
                validFormatFound
            ) {
                scoreToBeat = currentScore;
                bestMoment = tempConfig;
                if (validFormatFound) {
                    bestFormatIsValid = true;
                }
            }
        } else {
            if (currentScore < scoreToBeat) {
                scoreToBeat = currentScore;
                bestMoment = tempConfig;
            }
        }
    }

    extend(config, bestMoment || tempConfig);
}
import { configFromISO, configFromRFC2822 } from './from-string';
import { configFromArray } from './from-array';
import { getParseRegexForToken } from '../parse/regex';
import { addTimeToArrayFromToken } from '../parse/token';
import {
    expandFormat,
    formatTokenFunctions,
    formattingTokens,
} from '../format/format';
import checkOverflow from './check-overflow';
import { YEAR, HOUR } from '../units/constants';
import { hooks } from '../utils/hooks';
import getParsingFlags from './parsing-flags';

// constant that refers to the ISO standard
hooks.ISO_8601 = function () {};

// constant that refers to the RFC 2822 form
hooks.RFC_2822 = function () {};

// date from string and format string
export function configFromStringAndFormat(config) {
    // TODO: Move this to another part of the creation flow to prevent circular deps
    if (config._f === hooks.ISO_8601) {
        configFromISO(config);
        return;
    }
    if (config._f === hooks.RFC_2822) {
        configFromRFC2822(config);
        return;
    }
    config._a = [];
    getParsingFlags(config).empty = true;

    // This array is used to make a Date, either with `new Date` or `Date.UTC`
    var string = '' + config._i,
        i,
        parsedInput,
        tokens,
        token,
        skipped,
        stringLength = string.length,
        totalParsedInputLength = 0,
        era;

    tokens =
        expandFormat(config._f, config._locale).match(formattingTokens) || [];

    for (i = 0; i < tokens.length; i++) {
        token = tokens[i];
        parsedInput = (string.match(getParseRegexForToken(token, config)) ||
            [])[0];
        if (parsedInput) {
            skipped = string.substr(0, string.indexOf(parsedInput));
            if (skipped.length > 0) {
                getParsingFlags(config).unusedInput.push(skipped);
            }
            string = string.slice(
                string.indexOf(parsedInput) + parsedInput.length
            );
            totalParsedInputLength += parsedInput.length;
        }
        // don't parse if it's not a known token
        if (formatTokenFunctions[token]) {
            if (parsedInput) {
                getParsingFlags(config).empty = false;
            } else {
                getParsingFlags(config).unusedTokens.push(token);
            }
            addTimeToArrayFromToken(token, parsedInput, config);
        } else if (config._strict && !parsedInput) {
            getParsingFlags(config).unusedTokens.push(token);
        }
    }

    // add remaining unparsed input length to the string
    getParsingFlags(config).charsLeftOver =
        stringLength - totalParsedInputLength;
    if (string.length > 0) {
        getParsingFlags(config).unusedInput.push(string);
    }

    // clear _12h flag if hour is <= 12
    if (
        config._a[HOUR] <= 12 &&
        getParsingFlags(config).bigHour === true &&
        config._a[HOUR] > 0
    ) {
        getParsingFlags(config).bigHour = undefined;
    }

    getParsingFlags(config).parsedDateParts = config._a.slice(0);
    getParsingFlags(config).meridiem = config._meridiem;
    // handle meridiem
    config._a[HOUR] = meridiemFixWrap(
        config._locale,
        config._a[HOUR],
        config._meridiem
    );

    // handle era
    era = getParsingFlags(config).era;
    if (era !== null) {
        config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
    }

    configFromArray(config);
    checkOverflow(config);
}

function meridiemFixWrap(locale, hour, meridiem) {
    var isPm;

    if (meridiem == null) {
        // nothing to do
        return hour;
    }
    if (locale.meridiemHour != null) {
        return locale.meridiemHour(hour, meridiem);
    } else if (locale.isPM != null) {
        // Fallback
        isPm = locale.isPM(meridiem);
        if (isPm && hour < 12) {
            hour += 12;
        }
        if (!isPm && hour === 12) {
            hour = 0;
        }
        return hour;
    } else {
        // this is not supposed to happen
        return hour;
    }
}
import { configFromStringAndFormat } from './from-string-and-format';
import { createUTCDate } from './date-from-array';
import { hooks } from '../utils/hooks';
import { deprecate } from '../utils/deprecate';
import getParsingFlags from './parsing-flags';
import { defaultLocaleMonthsShort } from '../units/month';
import { defaultLocaleWeekdaysShort } from '../units/day-of-week';

// iso 8601 regex
// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
    basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
    tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
    isoDates = [
        ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
        ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
        ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
        ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
        ['YYYY-DDD', /\d{4}-\d{3}/],
        ['YYYY-MM', /\d{4}-\d\d/, false],
        ['YYYYYYMMDD', /[+-]\d{10}/],
        ['YYYYMMDD', /\d{8}/],
        ['GGGG[W]WWE', /\d{4}W\d{3}/],
        ['GGGG[W]WW', /\d{4}W\d{2}/, false],
        ['YYYYDDD', /\d{7}/],
        ['YYYYMM', /\d{6}/, false],
        ['YYYY', /\d{4}/, false],
    ],
    // iso time formats and regexes
    isoTimes = [
        ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
        ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
        ['HH:mm:ss', /\d\d:\d\d:\d\d/],
        ['HH:mm', /\d\d:\d\d/],
        ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
        ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
        ['HHmmss', /\d\d\d\d\d\d/],
        ['HHmm', /\d\d\d\d/],
        ['HH', /\d\d/],
    ],
    aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
    rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
    obsOffsets = {
        UT: 0,
        GMT: 0,
        EDT: -4 * 60,
        EST: -5 * 60,
        CDT: -5 * 60,
        CST: -6 * 60,
        MDT: -6 * 60,
        MST: -7 * 60,
        PDT: -7 * 60,
        PST: -8 * 60,
    };

// date from iso format
export function configFromISO(config) {
    var i,
        l,
        string = config._i,
        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
        allowTime,
        dateFormat,
        timeFormat,
        tzFormat;

    if (match) {
        getParsingFlags(config).iso = true;

        for (i = 0, l = isoDates.length; i < l; i++) {
            if (isoDates[i][1].exec(match[1])) {
                dateFormat = isoDates[i][0];
                allowTime = isoDates[i][2] !== false;
                break;
            }
        }
        if (dateFormat == null) {
            config._isValid = false;
            return;
        }
        if (match[3]) {
            for (i = 0, l = isoTimes.length; i < l; i++) {
                if (isoTimes[i][1].exec(match[3])) {
                    // match[2] should be 'T' or space
                    timeFormat = (match[2] || ' ') + isoTimes[i][0];
                    break;
                }
            }
            if (timeFormat == null) {
                config._isValid = false;
                return;
            }
        }
        if (!allowTime && timeFormat != null) {
            config._isValid = false;
            return;
        }
        if (match[4]) {
            if (tzRegex.exec(match[4])) {
                tzFormat = 'Z';
            } else {
                config._isValid = false;
                return;
            }
        }
        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
        configFromStringAndFormat(config);
    } else {
        config._isValid = false;
    }
}

function extractFromRFC2822Strings(
    yearStr,
    monthStr,
    dayStr,
    hourStr,
    minuteStr,
    secondStr
) {
    var result = [
        untruncateYear(yearStr),
        defaultLocaleMonthsShort.indexOf(monthStr),
        parseInt(dayStr, 10),
        parseInt(hourStr, 10),
        parseInt(minuteStr, 10),
    ];

    if (secondStr) {
        result.push(parseInt(secondStr, 10));
    }

    return result;
}

function untruncateYear(yearStr) {
    var year = parseInt(yearStr, 10);
    if (year <= 49) {
        return 2000 + year;
    } else if (year <= 999) {
        return 1900 + year;
    }
    return year;
}

function preprocessRFC2822(s) {
    // Remove comments and folding whitespace and replace multiple-spaces with a single space
    return s
        .replace(/\([^)]*\)|[\n\t]/g, ' ')
        .replace(/(\s\s+)/g, ' ')
        .replace(/^\s\s*/, '')
        .replace(/\s\s*$/, '');
}

function checkWeekday(weekdayStr, parsedInput, config) {
    if (weekdayStr) {
        // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
        var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
            weekdayActual = new Date(
                parsedInput[0],
                parsedInput[1],
                parsedInput[2]
            ).getDay();
        if (weekdayProvided !== weekdayActual) {
            getParsingFlags(config).weekdayMismatch = true;
            config._isValid = false;
            return false;
        }
    }
    return true;
}

function calculateOffset(obsOffset, militaryOffset, numOffset) {
    if (obsOffset) {
        return obsOffsets[obsOffset];
    } else if (militaryOffset) {
        // the only allowed military tz is Z
        return 0;
    } else {
        var hm = parseInt(numOffset, 10),
            m = hm % 100,
            h = (hm - m) / 100;
        return h * 60 + m;
    }
}

// date and time from ref 2822 format
export function configFromRFC2822(config) {
    var match = rfc2822.exec(preprocessRFC2822(config._i)),
        parsedArray;
    if (match) {
        parsedArray = extractFromRFC2822Strings(
            match[4],
            match[3],
            match[2],
            match[5],
            match[6],
            match[7]
        );
        if (!checkWeekday(match[1], parsedArray, config)) {
            return;
        }

        config._a = parsedArray;
        config._tzm = calculateOffset(match[8], match[9], match[10]);

        config._d = createUTCDate.apply(null, config._a);
        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);

        getParsingFlags(config).rfc2822 = true;
    } else {
        config._isValid = false;
    }
}

// date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
export function configFromString(config) {
    var matched = aspNetJsonRegex.exec(config._i);
    if (matched !== null) {
        config._d = new Date(+matched[1]);
        return;
    }

    configFromISO(config);
    if (config._isValid === false) {
        delete config._isValid;
    } else {
        return;
    }

    configFromRFC2822(config);
    if (config._isValid === false) {
        delete config._isValid;
    } else {
        return;
    }

    if (config._strict) {
        config._isValid = false;
    } else {
        // Final attempt, use Input Fallback
        hooks.createFromInputFallback(config);
    }
}

hooks.createFromInputFallback = deprecate(
    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
        'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
    function (config) {
        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
    }
);
import { createLocalOrUTC } from './from-anything';

export function createLocal(input, format, locale, strict) {
    return createLocalOrUTC(input, format, locale, strict, false);
}
function defaultParsingFlags() {
    // We need to deep clone this object.
    return {
        empty: false,
        unusedTokens: [],
        unusedInput: [],
        overflow: -2,
        charsLeftOver: 0,
        nullInput: false,
        invalidEra: null,
        invalidMonth: null,
        invalidFormat: false,
        userInvalidated: false,
        iso: false,
        parsedDateParts: [],
        era: null,
        meridiem: null,
        rfc2822: false,
        weekdayMismatch: false,
    };
}

export default function getParsingFlags(m) {
    if (m._pf == null) {
        m._pf = defaultParsingFlags();
    }
    return m._pf;
}
import { createLocalOrUTC } from './from-anything';

export function createUTC(input, format, locale, strict) {
    return createLocalOrUTC(input, format, locale, strict, true).utc();
}
import extend from '../utils/extend';
import { createUTC } from './utc';
import getParsingFlags from '../create/parsing-flags';
import some from '../utils/some';

export function isValid(m) {
    if (m._isValid == null) {
        var flags = getParsingFlags(m),
            parsedParts = some.call(flags.parsedDateParts, function (i) {
                return i != null;
            }),
            isNowValid =
                !isNaN(m._d.getTime()) &&
                flags.overflow < 0 &&
                !flags.empty &&
                !flags.invalidEra &&
                !flags.invalidMonth &&
                !flags.invalidWeekday &&
                !flags.weekdayMismatch &&
                !flags.nullInput &&
                !flags.invalidFormat &&
                !flags.userInvalidated &&
                (!flags.meridiem || (flags.meridiem && parsedParts));

        if (m._strict) {
            isNowValid =
                isNowValid &&
                flags.charsLeftOver === 0 &&
                flags.unusedTokens.length === 0 &&
                flags.bigHour === undefined;
        }

        if (Object.isFrozen == null || !Object.isFrozen(m)) {
            m._isValid = isNowValid;
        } else {
            return isNowValid;
        }
    }
    return m._isValid;
}

export function createInvalid(flags) {
    var m = createUTC(NaN);
    if (flags != null) {
        extend(getParsingFlags(m), flags);
    } else {
        getParsingFlags(m).userInvalidated = true;
    }

    return m;
}
var mathAbs = Math.abs;

export function abs() {
    var data = this._data;

    this._milliseconds = mathAbs(this._milliseconds);
    this._days = mathAbs(this._days);
    this._months = mathAbs(this._months);

    data.milliseconds = mathAbs(data.milliseconds);
    data.seconds = mathAbs(data.seconds);
    data.minutes = mathAbs(data.minutes);
    data.hours = mathAbs(data.hours);
    data.months = mathAbs(data.months);
    data.years = mathAbs(data.years);

    return this;
}
import { createDuration } from './create';

function addSubtract(duration, input, value, direction) {
    var other = createDuration(input, value);

    duration._milliseconds += direction * other._milliseconds;
    duration._days += direction * other._days;
    duration._months += direction * other._months;

    return duration._bubble();
}

// supports only 2.0-style add(1, 's') or add(duration)
export function add(input, value) {
    return addSubtract(this, input, value, 1);
}

// supports only 2.0-style subtract(1, 's') or subtract(duration)
export function subtract(input, value) {
    return addSubtract(this, input, value, -1);
}
import { daysToMonths, monthsToDays } from './bubble';
import { normalizeUnits } from '../units/aliases';
import toInt from '../utils/to-int';

export function as(units) {
    if (!this.isValid()) {
        return NaN;
    }
    var days,
        months,
        milliseconds = this._milliseconds;

    units = normalizeUnits(units);

    if (units === 'month' || units === 'quarter' || units === 'year') {
        days = this._days + milliseconds / 864e5;
        months = this._months + daysToMonths(days);
        switch (units) {
            case 'month':
                return months;
            case 'quarter':
                return months / 3;
            case 'year':
                return months / 12;
        }
    } else {
        // handle milliseconds separately because of floating point math errors (issue #1867)
        days = this._days + Math.round(monthsToDays(this._months));
        switch (units) {
            case 'week':
                return days / 7 + milliseconds / 6048e5;
            case 'day':
                return days + milliseconds / 864e5;
            case 'hour':
                return days * 24 + milliseconds / 36e5;
            case 'minute':
                return days * 1440 + milliseconds / 6e4;
            case 'second':
                return days * 86400 + milliseconds / 1000;
            // Math.floor prevents floating point math errors here
            case 'millisecond':
                return Math.floor(days * 864e5) + milliseconds;
            default:
                throw new Error('Unknown unit ' + units);
        }
    }
}

// TODO: Use this.as('ms')?
export function valueOf() {
    if (!this.isValid()) {
        return NaN;
    }
    return (
        this._milliseconds +
        this._days * 864e5 +
        (this._months % 12) * 2592e6 +
        toInt(this._months / 12) * 31536e6
    );
}

function makeAs(alias) {
    return function () {
        return this.as(alias);
    };
}

var asMilliseconds = makeAs('ms'),
    asSeconds = makeAs('s'),
    asMinutes = makeAs('m'),
    asHours = makeAs('h'),
    asDays = makeAs('d'),
    asWeeks = makeAs('w'),
    asMonths = makeAs('M'),
    asQuarters = makeAs('Q'),
    asYears = makeAs('y');

export {
    asMilliseconds,
    asSeconds,
    asMinutes,
    asHours,
    asDays,
    asWeeks,
    asMonths,
    asQuarters,
    asYears,
};
import absFloor from '../utils/abs-floor';
import absCeil from '../utils/abs-ceil';

export function bubble() {
    var milliseconds = this._milliseconds,
        days = this._days,
        months = this._months,
        data = this._data,
        seconds,
        minutes,
        hours,
        years,
        monthsFromDays;

    // if we have a mix of positive and negative values, bubble down first
    // check: https://github.com/moment/moment/issues/2166
    if (
        !(
            (milliseconds >= 0 && days >= 0 && months >= 0) ||
            (milliseconds <= 0 && days <= 0 && months <= 0)
        )
    ) {
        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
        days = 0;
        months = 0;
    }

    // The following code bubbles up values, see the tests for
    // examples of what that means.
    data.milliseconds = milliseconds % 1000;

    seconds = absFloor(milliseconds / 1000);
    data.seconds = seconds % 60;

    minutes = absFloor(seconds / 60);
    data.minutes = minutes % 60;

    hours = absFloor(minutes / 60);
    data.hours = hours % 24;

    days += absFloor(hours / 24);

    // convert days to months
    monthsFromDays = absFloor(daysToMonths(days));
    months += monthsFromDays;
    days -= absCeil(monthsToDays(monthsFromDays));

    // 12 months -> 1 year
    years = absFloor(months / 12);
    months %= 12;

    data.days = days;
    data.months = months;
    data.years = years;

    return this;
}

export function daysToMonths(days) {
    // 400 years have 146097 days (taking into account leap year rules)
    // 400 years have 12 months === 4800
    return (days * 4800) / 146097;
}

export function monthsToDays(months) {
    // the reverse of daysToMonths
    return (months * 146097) / 4800;
}
import { createDuration } from './create';

export function clone() {
    return createDuration(this);
}
import { normalizeObjectUnits } from '../units/aliases';
import { getLocale } from '../locale/locales';
import isDurationValid from './valid.js';

export function Duration(duration) {
    var normalizedInput = normalizeObjectUnits(duration),
        years = normalizedInput.year || 0,
        quarters = normalizedInput.quarter || 0,
        months = normalizedInput.month || 0,
        weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
        days = normalizedInput.day || 0,
        hours = normalizedInput.hour || 0,
        minutes = normalizedInput.minute || 0,
        seconds = normalizedInput.second || 0,
        milliseconds = normalizedInput.millisecond || 0;

    this._isValid = isDurationValid(normalizedInput);

    // representation for dateAddRemove
    this._milliseconds =
        +milliseconds +
        seconds * 1e3 + // 1000
        minutes * 6e4 + // 1000 * 60
        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
    // Because of dateAddRemove treats 24 hours as different from a
    // day when working around DST, we need to store them separately
    this._days = +days + weeks * 7;
    // It is impossible to translate months into days without knowing
    // which months you are are talking about, so we have to store
    // it separately.
    this._months = +months + quarters * 3 + years * 12;

    this._data = {};

    this._locale = getLocale();

    this._bubble();
}

export function isDuration(obj) {
    return obj instanceof Duration;
}
import { Duration, isDuration } from './constructor';
import isNumber from '../utils/is-number';
import toInt from '../utils/to-int';
import absRound from '../utils/abs-round';
import hasOwnProp from '../utils/has-own-prop';
import { DATE, HOUR, MINUTE, SECOND, MILLISECOND } from '../units/constants';
import { cloneWithOffset } from '../units/offset';
import { createLocal } from '../create/local';
import { createInvalid as invalid } from './valid';

// ASP.NET json date format regex
var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
    // and further modified to allow for strings containing both week and day
    isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;

export function createDuration(input, key) {
    var duration = input,
        // matching against regexp is expensive, do it on demand
        match = null,
        sign,
        ret,
        diffRes;

    if (isDuration(input)) {
        duration = {
            ms: input._milliseconds,
            d: input._days,
            M: input._months,
        };
    } else if (isNumber(input) || !isNaN(+input)) {
        duration = {};
        if (key) {
            duration[key] = +input;
        } else {
            duration.milliseconds = +input;
        }
    } else if ((match = aspNetRegex.exec(input))) {
        sign = match[1] === '-' ? -1 : 1;
        duration = {
            y: 0,
            d: toInt(match[DATE]) * sign,
            h: toInt(match[HOUR]) * sign,
            m: toInt(match[MINUTE]) * sign,
            s: toInt(match[SECOND]) * sign,
            ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
        };
    } else if ((match = isoRegex.exec(input))) {
        sign = match[1] === '-' ? -1 : 1;
        duration = {
            y: parseIso(match[2], sign),
            M: parseIso(match[3], sign),
            w: parseIso(match[4], sign),
            d: parseIso(match[5], sign),
            h: parseIso(match[6], sign),
            m: parseIso(match[7], sign),
            s: parseIso(match[8], sign),
        };
    } else if (duration == null) {
        // checks for null or undefined
        duration = {};
    } else if (
        typeof duration === 'object' &&
        ('from' in duration || 'to' in duration)
    ) {
        diffRes = momentsDifference(
            createLocal(duration.from),
            createLocal(duration.to)
        );

        duration = {};
        duration.ms = diffRes.milliseconds;
        duration.M = diffRes.months;
    }

    ret = new Duration(duration);

    if (isDuration(input) && hasOwnProp(input, '_locale')) {
        ret._locale = input._locale;
    }

    if (isDuration(input) && hasOwnProp(input, '_isValid')) {
        ret._isValid = input._isValid;
    }

    return ret;
}

createDuration.fn = Duration.prototype;
createDuration.invalid = invalid;

function parseIso(inp, sign) {
    // We'd normally use ~~inp for this, but unfortunately it also
    // converts floats to ints.
    // inp may be undefined, so careful calling replace on it.
    var res = inp && parseFloat(inp.replace(',', '.'));
    // apply sign while we're at it
    return (isNaN(res) ? 0 : res) * sign;
}

function positiveMomentsDifference(base, other) {
    var res = {};

    res.months =
        other.month() - base.month() + (other.year() - base.year()) * 12;
    if (base.clone().add(res.months, 'M').isAfter(other)) {
        --res.months;
    }

    res.milliseconds = +other - +base.clone().add(res.months, 'M');

    return res;
}

function momentsDifference(base, other) {
    var res;
    if (!(base.isValid() && other.isValid())) {
        return { milliseconds: 0, months: 0 };
    }

    other = cloneWithOffset(other, base);
    if (base.isBefore(other)) {
        res = positiveMomentsDifference(base, other);
    } else {
        res = positiveMomentsDifference(other, base);
        res.milliseconds = -res.milliseconds;
        res.months = -res.months;
    }

    return res;
}
// Side effect imports
import './prototype';

import { createDuration } from './create';
import { isDuration } from './constructor';
import {
    getSetRelativeTimeRounding,
    getSetRelativeTimeThreshold,
} from './humanize';

export {
    createDuration,
    isDuration,
    getSetRelativeTimeRounding,
    getSetRelativeTimeThreshold,
};
import { normalizeUnits } from '../units/aliases';
import absFloor from '../utils/abs-floor';

export function get(units) {
    units = normalizeUnits(units);
    return this.isValid() ? this[units + 's']() : NaN;
}

function makeGetter(name) {
    return function () {
        return this.isValid() ? this._data[name] : NaN;
    };
}

var milliseconds = makeGetter('milliseconds'),
    seconds = makeGetter('seconds'),
    minutes = makeGetter('minutes'),
    hours = makeGetter('hours'),
    days = makeGetter('days'),
    months = makeGetter('months'),
    years = makeGetter('years');

export { milliseconds, seconds, minutes, hours, days, months, years };

export function weeks() {
    return absFloor(this.days() / 7);
}
import { createDuration } from './create';

var round = Math.round,
    thresholds = {
        ss: 44, // a few seconds to seconds
        s: 45, // seconds to minute
        m: 45, // minutes to hour
        h: 22, // hours to day
        d: 26, // days to month/week
        w: null, // weeks to month
        M: 11, // months to year
    };

// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
}

function relativeTime(posNegDuration, withoutSuffix, thresholds, locale) {
    var duration = createDuration(posNegDuration).abs(),
        seconds = round(duration.as('s')),
        minutes = round(duration.as('m')),
        hours = round(duration.as('h')),
        days = round(duration.as('d')),
        months = round(duration.as('M')),
        weeks = round(duration.as('w')),
        years = round(duration.as('y')),
        a =
            (seconds <= thresholds.ss && ['s', seconds]) ||
            (seconds < thresholds.s && ['ss', seconds]) ||
            (minutes <= 1 && ['m']) ||
            (minutes < thresholds.m && ['mm', minutes]) ||
            (hours <= 1 && ['h']) ||
            (hours < thresholds.h && ['hh', hours]) ||
            (days <= 1 && ['d']) ||
            (days < thresholds.d && ['dd', days]);

    if (thresholds.w != null) {
        a =
            a ||
            (weeks <= 1 && ['w']) ||
            (weeks < thresholds.w && ['ww', weeks]);
    }
    a = a ||
        (months <= 1 && ['M']) ||
        (months < thresholds.M && ['MM', months]) ||
        (years <= 1 && ['y']) || ['yy', years];

    a[2] = withoutSuffix;
    a[3] = +posNegDuration > 0;
    a[4] = locale;
    return substituteTimeAgo.apply(null, a);
}

// This function allows you to set the rounding function for relative time strings
export function getSetRelativeTimeRounding(roundingFunction) {
    if (roundingFunction === undefined) {
        return round;
    }
    if (typeof roundingFunction === 'function') {
        round = roundingFunction;
        return true;
    }
    return false;
}

// This function allows you to set a threshold for relative time strings
export function getSetRelativeTimeThreshold(threshold, limit) {
    if (thresholds[threshold] === undefined) {
        return false;
    }
    if (limit === undefined) {
        return thresholds[threshold];
    }
    thresholds[threshold] = limit;
    if (threshold === 's') {
        thresholds.ss = limit - 1;
    }
    return true;
}

export function humanize(argWithSuffix, argThresholds) {
    if (!this.isValid()) {
        return this.localeData().invalidDate();
    }

    var withSuffix = false,
        th = thresholds,
        locale,
        output;

    if (typeof argWithSuffix === 'object') {
        argThresholds = argWithSuffix;
        argWithSuffix = false;
    }
    if (typeof argWithSuffix === 'boolean') {
        withSuffix = argWithSuffix;
    }
    if (typeof argThresholds === 'object') {
        th = Object.assign({}, thresholds, argThresholds);
        if (argThresholds.s != null && argThresholds.ss == null) {
            th.ss = argThresholds.s - 1;
        }
    }

    locale = this.localeData();
    output = relativeTime(this, !withSuffix, th, locale);

    if (withSuffix) {
        output = locale.pastFuture(+this, output);
    }

    return locale.postformat(output);
}
import absFloor from '../utils/abs-floor';
var abs = Math.abs;

function sign(x) {
    return (x > 0) - (x < 0) || +x;
}

export function toISOString() {
    // for ISO strings we do not use the normal bubbling rules:
    //  * milliseconds bubble up until they become hours
    //  * days do not bubble at all
    //  * months bubble up until they become years
    // This is because there is no context-free conversion between hours and days
    // (think of clock changes)
    // and also not between days and months (28-31 days per month)
    if (!this.isValid()) {
        return this.localeData().invalidDate();
    }

    var seconds = abs(this._milliseconds) / 1000,
        days = abs(this._days),
        months = abs(this._months),
        minutes,
        hours,
        years,
        s,
        total = this.asSeconds(),
        totalSign,
        ymSign,
        daysSign,
        hmsSign;

    if (!total) {
        // this is the same as C#'s (Noda) and python (isodate)...
        // but not other JS (goog.date)
        return 'P0D';
    }

    // 3600 seconds -> 60 minutes -> 1 hour
    minutes = absFloor(seconds / 60);
    hours = absFloor(minutes / 60);
    seconds %= 60;
    minutes %= 60;

    // 12 months -> 1 year
    years = absFloor(months / 12);
    months %= 12;

    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
    s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';

    totalSign = total < 0 ? '-' : '';
    ymSign = sign(this._months) !== sign(total) ? '-' : '';
    daysSign = sign(this._days) !== sign(total) ? '-' : '';
    hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';

    return (
        totalSign +
        'P' +
        (years ? ymSign + years + 'Y' : '') +
        (months ? ymSign + months + 'M' : '') +
        (days ? daysSign + days + 'D' : '') +
        (hours || minutes || seconds ? 'T' : '') +
        (hours ? hmsSign + hours + 'H' : '') +
        (minutes ? hmsSign + minutes + 'M' : '') +
        (seconds ? hmsSign + s + 'S' : '')
    );
}
import { Duration } from './constructor';

var proto = Duration.prototype;

import { abs } from './abs';
import { add, subtract } from './add-subtract';
import {
    as,
    asMilliseconds,
    asSeconds,
    asMinutes,
    asHours,
    asDays,
    asWeeks,
    asMonths,
    asQuarters,
    asYears,
    valueOf,
} from './as';
import { bubble } from './bubble';
import { clone } from './clone';
import {
    get,
    milliseconds,
    seconds,
    minutes,
    hours,
    days,
    months,
    years,
    weeks,
} from './get';
import { humanize } from './humanize';
import { toISOString } from './iso-string';
import { lang, locale, localeData } from '../moment/locale';
import { isValid } from './valid';

proto.isValid = isValid;
proto.abs = abs;
proto.add = add;
proto.subtract = subtract;
proto.as = as;
proto.asMilliseconds = asMilliseconds;
proto.asSeconds = asSeconds;
proto.asMinutes = asMinutes;
proto.asHours = asHours;
proto.asDays = asDays;
proto.asWeeks = asWeeks;
proto.asMonths = asMonths;
proto.asQuarters = asQuarters;
proto.asYears = asYears;
proto.valueOf = valueOf;
proto._bubble = bubble;
proto.clone = clone;
proto.get = get;
proto.milliseconds = milliseconds;
proto.seconds = seconds;
proto.minutes = minutes;
proto.hours = hours;
proto.days = days;
proto.weeks = weeks;
proto.months = months;
proto.years = years;
proto.humanize = humanize;
proto.toISOString = toISOString;
proto.toString = toISOString;
proto.toJSON = toISOString;
proto.locale = locale;
proto.localeData = localeData;

// Deprecations
import { deprecate } from '../utils/deprecate';

proto.toIsoString = deprecate(
    'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
    toISOString
);
proto.lang = lang;
import hasOwnProp from '../utils/has-own-prop';
import toInt from '../utils/to-int';
import indexOf from '../utils/index-of';
import { createDuration } from './create';

var ordering = [
    'year',
    'quarter',
    'month',
    'week',
    'day',
    'hour',
    'minute',
    'second',
    'millisecond',
];

export default function isDurationValid(m) {
    var key,
        unitHasDecimal = false,
        i;
    for (key in m) {
        if (
            hasOwnProp(m, key) &&
            !(
                indexOf.call(ordering, key) !== -1 &&
                (m[key] == null || !isNaN(m[key]))
            )
        ) {
            return false;
        }
    }

    for (i = 0; i < ordering.length; ++i) {
        if (m[ordering[i]]) {
            if (unitHasDecimal) {
                return false; // only allow non-integers for smallest unit
            }
            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
                unitHasDecimal = true;
            }
        }
    }

    return true;
}

export function isValid() {
    return this._isValid;
}

export function createInvalid() {
    return createDuration(NaN);
}
import zeroFill from '../utils/zero-fill';
import isFunction from '../utils/is-function';

var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
    localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
    formatFunctions = {},
    formatTokenFunctions = {};

export { formattingTokens, formatTokenFunctions };

// token:    'M'
// padded:   ['MM', 2]
// ordinal:  'Mo'
// callback: function () { this.month() + 1 }
export function addFormatToken(token, padded, ordinal, callback) {
    var func = callback;
    if (typeof callback === 'string') {
        func = function () {
            return this[callback]();
        };
    }
    if (token) {
        formatTokenFunctions[token] = func;
    }
    if (padded) {
        formatTokenFunctions[padded[0]] = function () {
            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
        };
    }
    if (ordinal) {
        formatTokenFunctions[ordinal] = function () {
            return this.localeData().ordinal(
                func.apply(this, arguments),
                token
            );
        };
    }
}

function removeFormattingTokens(input) {
    if (input.match(/\[[\s\S]/)) {
        return input.replace(/^\[|\]$/g, '');
    }
    return input.replace(/\\/g, '');
}

function makeFormatFunction(format) {
    var array = format.match(formattingTokens),
        i,
        length;

    for (i = 0, length = array.length; i < length; i++) {
        if (formatTokenFunctions[array[i]]) {
            array[i] = formatTokenFunctions[array[i]];
        } else {
            array[i] = removeFormattingTokens(array[i]);
        }
    }

    return function (mom) {
        var output = '',
            i;
        for (i = 0; i < length; i++) {
            output += isFunction(array[i])
                ? array[i].call(mom, format)
                : array[i];
        }
        return output;
    };
}

// format date using native date object
export function formatMoment(m, format) {
    if (!m.isValid()) {
        return m.localeData().invalidDate();
    }

    format = expandFormat(format, m.localeData());
    formatFunctions[format] =
        formatFunctions[format] || makeFormatFunction(format);

    return formatFunctions[format](m);
}

export function expandFormat(format, locale) {
    var i = 5;

    function replaceLongDateFormatTokens(input) {
        return locale.longDateFormat(input) || input;
    }

    localFormattingTokens.lastIndex = 0;
    while (i >= 0 && localFormattingTokens.test(format)) {
        format = format.replace(
            localFormattingTokens,
            replaceLongDateFormatTokens
        );
        localFormattingTokens.lastIndex = 0;
        i -= 1;
    }

    return format;
}
import { defaultCalendar } from './calendar';
import { defaultLongDateFormat } from './formats';
import { defaultInvalidDate } from './invalid';
import { defaultOrdinal, defaultDayOfMonthOrdinalParse } from './ordinal';
import { defaultRelativeTime } from './relative';

// months
import { defaultLocaleMonths, defaultLocaleMonthsShort } from '../units/month';

// week
import { defaultLocaleWeek } from '../units/week';

// weekdays
import {
    defaultLocaleWeekdays,
    defaultLocaleWeekdaysMin,
    defaultLocaleWeekdaysShort,
} from '../units/day-of-week';

// meridiem
import { defaultLocaleMeridiemParse } from '../units/hour';

export var baseConfig = {
    calendar: defaultCalendar,
    longDateFormat: defaultLongDateFormat,
    invalidDate: defaultInvalidDate,
    ordinal: defaultOrdinal,
    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
    relativeTime: defaultRelativeTime,

    months: defaultLocaleMonths,
    monthsShort: defaultLocaleMonthsShort,

    week: defaultLocaleWeek,

    weekdays: defaultLocaleWeekdays,
    weekdaysMin: defaultLocaleWeekdaysMin,
    weekdaysShort: defaultLocaleWeekdaysShort,

    meridiemParse: defaultLocaleMeridiemParse,
};
export var defaultCalendar = {
    sameDay: '[Today at] LT',
    nextDay: '[Tomorrow at] LT',
    nextWeek: 'dddd [at] LT',
    lastDay: '[Yesterday at] LT',
    lastWeek: '[Last] dddd [at] LT',
    sameElse: 'L',
};

import isFunction from '../utils/is-function';

export function calendar(key, mom, now) {
    var output = this._calendar[key] || this._calendar['sameElse'];
    return isFunction(output) ? output.call(mom, now) : output;
}
export function Locale(config) {
    if (config != null) {
        this.set(config);
    }
}
import './prototype';
import { getSetGlobalLocale } from './locales';
import toInt from '../utils/to-int';

getSetGlobalLocale('en', {
    eras: [
        {
            since: '0001-01-01',
            until: +Infinity,
            offset: 1,
            name: 'Anno Domini',
            narrow: 'AD',
            abbr: 'AD',
        },
        {
            since: '0000-12-31',
            until: -Infinity,
            offset: 1,
            name: 'Before Christ',
            narrow: 'BC',
            abbr: 'BC',
        },
    ],
    dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                toInt((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
});
import { formattingTokens } from '../format/format';

export var defaultLongDateFormat = {
    LTS: 'h:mm:ss A',
    LT: 'h:mm A',
    L: 'MM/DD/YYYY',
    LL: 'MMMM D, YYYY',
    LLL: 'MMMM D, YYYY h:mm A',
    LLLL: 'dddd, MMMM D, YYYY h:mm A',
};

export function longDateFormat(key) {
    var format = this._longDateFormat[key],
        formatUpper = this._longDateFormat[key.toUpperCase()];

    if (format || !formatUpper) {
        return format;
    }

    this._longDateFormat[key] = formatUpper
        .match(formattingTokens)
        .map(function (tok) {
            if (
                tok === 'MMMM' ||
                tok === 'MM' ||
                tok === 'DD' ||
                tok === 'dddd'
            ) {
                return tok.slice(1);
            }
            return tok;
        })
        .join('');

    return this._longDateFormat[key];
}
export var defaultInvalidDate = 'Invalid date';

export function invalidDate() {
    return this._invalidDate;
}
import isNumber from '../utils/is-number';
import { getLocale } from './locales';
import { createUTC } from '../create/utc';

function get(format, index, field, setter) {
    var locale = getLocale(),
        utc = createUTC().set(setter, index);
    return locale[field](utc, format);
}

function listMonthsImpl(format, index, field) {
    if (isNumber(format)) {
        index = format;
        format = undefined;
    }

    format = format || '';

    if (index != null) {
        return get(format, index, field, 'month');
    }

    var i,
        out = [];
    for (i = 0; i < 12; i++) {
        out[i] = get(format, i, field, 'month');
    }
    return out;
}

// ()
// (5)
// (fmt, 5)
// (fmt)
// (true)
// (true, 5)
// (true, fmt, 5)
// (true, fmt)
function listWeekdaysImpl(localeSorted, format, index, field) {
    if (typeof localeSorted === 'boolean') {
        if (isNumber(format)) {
            index = format;
            format = undefined;
        }

        format = format || '';
    } else {
        format = localeSorted;
        index = format;
        localeSorted = false;

        if (isNumber(format)) {
            index = format;
            format = undefined;
        }

        format = format || '';
    }

    var locale = getLocale(),
        shift = localeSorted ? locale._week.dow : 0,
        i,
        out = [];

    if (index != null) {
        return get(format, (index + shift) % 7, field, 'day');
    }

    for (i = 0; i < 7; i++) {
        out[i] = get(format, (i + shift) % 7, field, 'day');
    }
    return out;
}

export function listMonths(format, index) {
    return listMonthsImpl(format, index, 'months');
}

export function listMonthsShort(format, index) {
    return listMonthsImpl(format, index, 'monthsShort');
}

export function listWeekdays(localeSorted, format, index) {
    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
}

export function listWeekdaysShort(localeSorted, format, index) {
    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
}

export function listWeekdaysMin(localeSorted, format, index) {
    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
}
// Side effect imports
import './prototype';

import {
    getSetGlobalLocale,
    defineLocale,
    updateLocale,
    getLocale,
    listLocales,
} from './locales';

import {
    listMonths,
    listMonthsShort,
    listWeekdays,
    listWeekdaysShort,
    listWeekdaysMin,
} from './lists';

export {
    getSetGlobalLocale,
    defineLocale,
    updateLocale,
    getLocale,
    listLocales,
    listMonths,
    listMonthsShort,
    listWeekdays,
    listWeekdaysShort,
    listWeekdaysMin,
};

import { deprecate } from '../utils/deprecate';
import { hooks } from '../utils/hooks';

hooks.lang = deprecate(
    'moment.lang is deprecated. Use moment.locale instead.',
    getSetGlobalLocale
);
hooks.langData = deprecate(
    'moment.langData is deprecated. Use moment.localeData instead.',
    getLocale
);

import './en';
import isArray from '../utils/is-array';
import isUndefined from '../utils/is-undefined';
import { deprecateSimple } from '../utils/deprecate';
import { mergeConfigs } from './set';
import { Locale } from './constructor';
import keys from '../utils/keys';

import { baseConfig } from './base-config';

// internal storage for locale config files
var locales = {},
    localeFamilies = {},
    globalLocale;

function commonPrefix(arr1, arr2) {
    var i,
        minl = Math.min(arr1.length, arr2.length);
    for (i = 0; i < minl; i += 1) {
        if (arr1[i] !== arr2[i]) {
            return i;
        }
    }
    return minl;
}

function normalizeLocale(key) {
    return key ? key.toLowerCase().replace('_', '-') : key;
}

// pick the locale from the array
// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
function chooseLocale(names) {
    var i = 0,
        j,
        next,
        locale,
        split;

    while (i < names.length) {
        split = normalizeLocale(names[i]).split('-');
        j = split.length;
        next = normalizeLocale(names[i + 1]);
        next = next ? next.split('-') : null;
        while (j > 0) {
            locale = loadLocale(split.slice(0, j).join('-'));
            if (locale) {
                return locale;
            }
            if (
                next &&
                next.length >= j &&
                commonPrefix(split, next) >= j - 1
            ) {
                //the next array item is better than a shallower substring of this one
                break;
            }
            j--;
        }
        i++;
    }
    return globalLocale;
}

function loadLocale(name) {
    var oldLocale = null,
        aliasedRequire;
    // TODO: Find a better way to register and load all the locales in Node
    if (
        locales[name] === undefined &&
        typeof module !== 'undefined' &&
        module &&
        module.exports
    ) {
        try {
            oldLocale = globalLocale._abbr;
            aliasedRequire = require;
            aliasedRequire('./locale/' + name);
            getSetGlobalLocale(oldLocale);
        } catch (e) {
            // mark as not found to avoid repeating expensive file require call causing high CPU
            // when trying to find en-US, en_US, en-us for every format call
            locales[name] = null; // null means not found
        }
    }
    return locales[name];
}

// This function will load locale and then set the global locale.  If
// no arguments are passed in, it will simply return the current global
// locale key.
export function getSetGlobalLocale(key, values) {
    var data;
    if (key) {
        if (isUndefined(values)) {
            data = getLocale(key);
        } else {
            data = defineLocale(key, values);
        }

        if (data) {
            // moment.duration._locale = moment._locale = data;
            globalLocale = data;
        } else {
            if (typeof console !== 'undefined' && console.warn) {
                //warn user if arguments are passed but the locale could not be set
                console.warn(
                    'Locale ' + key + ' not found. Did you forget to load it?'
                );
            }
        }
    }

    return globalLocale._abbr;
}

export function defineLocale(name, config) {
    if (config !== null) {
        var locale,
            parentConfig = baseConfig;
        config.abbr = name;
        if (locales[name] != null) {
            deprecateSimple(
                'defineLocaleOverride',
                'use moment.updateLocale(localeName, config) to change ' +
                    'an existing locale. moment.defineLocale(localeName, ' +
                    'config) should only be used for creating a new locale ' +
                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
            );
            parentConfig = locales[name]._config;
        } else if (config.parentLocale != null) {
            if (locales[config.parentLocale] != null) {
                parentConfig = locales[config.parentLocale]._config;
            } else {
                locale = loadLocale(config.parentLocale);
                if (locale != null) {
                    parentConfig = locale._config;
                } else {
                    if (!localeFamilies[config.parentLocale]) {
                        localeFamilies[config.parentLocale] = [];
                    }
                    localeFamilies[config.parentLocale].push({
                        name: name,
                        config: config,
                    });
                    return null;
                }
            }
        }
        locales[name] = new Locale(mergeConfigs(parentConfig, config));

        if (localeFamilies[name]) {
            localeFamilies[name].forEach(function (x) {
                defineLocale(x.name, x.config);
            });
        }

        // backwards compat for now: also set the locale
        // make sure we set the locale AFTER all child locales have been
        // created, so we won't end up with the child locale set.
        getSetGlobalLocale(name);

        return locales[name];
    } else {
        // useful for testing
        delete locales[name];
        return null;
    }
}

export function updateLocale(name, config) {
    if (config != null) {
        var locale,
            tmpLocale,
            parentConfig = baseConfig;

        if (locales[name] != null && locales[name].parentLocale != null) {
            // Update existing child locale in-place to avoid memory-leaks
            locales[name].set(mergeConfigs(locales[name]._config, config));
        } else {
            // MERGE
            tmpLocale = loadLocale(name);
            if (tmpLocale != null) {
                parentConfig = tmpLocale._config;
            }
            config = mergeConfigs(parentConfig, config);
            if (tmpLocale == null) {
                // updateLocale is called for creating a new locale
                // Set abbr so it will have a name (getters return
                // undefined otherwise).
                config.abbr = name;
            }
            locale = new Locale(config);
            locale.parentLocale = locales[name];
            locales[name] = locale;
        }

        // backwards compat for now: also set the locale
        getSetGlobalLocale(name);
    } else {
        // pass null for config to unupdate, useful for tests
        if (locales[name] != null) {
            if (locales[name].parentLocale != null) {
                locales[name] = locales[name].parentLocale;
                if (name === getSetGlobalLocale()) {
                    getSetGlobalLocale(name);
                }
            } else if (locales[name] != null) {
                delete locales[name];
            }
        }
    }
    return locales[name];
}

// returns locale data
export function getLocale(key) {
    var locale;

    if (key && key._locale && key._locale._abbr) {
        key = key._locale._abbr;
    }

    if (!key) {
        return globalLocale;
    }

    if (!isArray(key)) {
        //short-circuit everything else
        locale = loadLocale(key);
        if (locale) {
            return locale;
        }
        key = [key];
    }

    return chooseLocale(key);
}

export function listLocales() {
    return keys(locales);
}
var defaultOrdinal = '%d',
    defaultDayOfMonthOrdinalParse = /\d{1,2}/;

export { defaultOrdinal, defaultDayOfMonthOrdinalParse };

export function ordinal(number) {
    return this._ordinal.replace('%d', number);
}
export function preParsePostFormat(string) {
    return string;
}
import { Locale } from './constructor';

var proto = Locale.prototype;

import { calendar } from './calendar';
import { longDateFormat } from './formats';
import { invalidDate } from './invalid';
import { ordinal } from './ordinal';
import { preParsePostFormat } from './pre-post-format';
import { relativeTime, pastFuture } from './relative';
import { set } from './set';

proto.calendar = calendar;
proto.longDateFormat = longDateFormat;
proto.invalidDate = invalidDate;
proto.ordinal = ordinal;
proto.preparse = preParsePostFormat;
proto.postformat = preParsePostFormat;
proto.relativeTime = relativeTime;
proto.pastFuture = pastFuture;
proto.set = set;

// Eras
import {
    localeEras,
    localeErasParse,
    localeErasConvertYear,
    erasAbbrRegex,
    erasNameRegex,
    erasNarrowRegex,
} from '../units/era';
proto.eras = localeEras;
proto.erasParse = localeErasParse;
proto.erasConvertYear = localeErasConvertYear;
proto.erasAbbrRegex = erasAbbrRegex;
proto.erasNameRegex = erasNameRegex;
proto.erasNarrowRegex = erasNarrowRegex;

// Month
import {
    localeMonthsParse,
    localeMonths,
    localeMonthsShort,
    monthsRegex,
    monthsShortRegex,
} from '../units/month';

proto.months = localeMonths;
proto.monthsShort = localeMonthsShort;
proto.monthsParse = localeMonthsParse;
proto.monthsRegex = monthsRegex;
proto.monthsShortRegex = monthsShortRegex;

// Week
import {
    localeWeek,
    localeFirstDayOfYear,
    localeFirstDayOfWeek,
} from '../units/week';
proto.week = localeWeek;
proto.firstDayOfYear = localeFirstDayOfYear;
proto.firstDayOfWeek = localeFirstDayOfWeek;

// Day of Week
import {
    localeWeekdaysParse,
    localeWeekdays,
    localeWeekdaysMin,
    localeWeekdaysShort,
    weekdaysRegex,
    weekdaysShortRegex,
    weekdaysMinRegex,
} from '../units/day-of-week';

proto.weekdays = localeWeekdays;
proto.weekdaysMin = localeWeekdaysMin;
proto.weekdaysShort = localeWeekdaysShort;
proto.weekdaysParse = localeWeekdaysParse;

proto.weekdaysRegex = weekdaysRegex;
proto.weekdaysShortRegex = weekdaysShortRegex;
proto.weekdaysMinRegex = weekdaysMinRegex;

// Hours
import { localeIsPM, localeMeridiem } from '../units/hour';

proto.isPM = localeIsPM;
proto.meridiem = localeMeridiem;
export var defaultRelativeTime = {
    future: 'in %s',
    past: '%s ago',
    s: 'a few seconds',
    ss: '%d seconds',
    m: 'a minute',
    mm: '%d minutes',
    h: 'an hour',
    hh: '%d hours',
    d: 'a day',
    dd: '%d days',
    w: 'a week',
    ww: '%d weeks',
    M: 'a month',
    MM: '%d months',
    y: 'a year',
    yy: '%d years',
};

import isFunction from '../utils/is-function';

export function relativeTime(number, withoutSuffix, string, isFuture) {
    var output = this._relativeTime[string];
    return isFunction(output)
        ? output(number, withoutSuffix, string, isFuture)
        : output.replace(/%d/i, number);
}

export function pastFuture(diff, output) {
    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
    return isFunction(format) ? format(output) : format.replace(/%s/i, output);
}
import isFunction from '../utils/is-function';
import extend from '../utils/extend';
import isObject from '../utils/is-object';
import hasOwnProp from '../utils/has-own-prop';

export function set(config) {
    var prop, i;
    for (i in config) {
        if (hasOwnProp(config, i)) {
            prop = config[i];
            if (isFunction(prop)) {
                this[i] = prop;
            } else {
                this['_' + i] = prop;
            }
        }
    }
    this._config = config;
    // Lenient ordinal parsing accepts just a number in addition to
    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
    // TODO: Remove "ordinalParse" fallback in next major release.
    this._dayOfMonthOrdinalParseLenient = new RegExp(
        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
            '|' +
            /\d{1,2}/.source
    );
}

export function mergeConfigs(parentConfig, childConfig) {
    var res = extend({}, parentConfig),
        prop;
    for (prop in childConfig) {
        if (hasOwnProp(childConfig, prop)) {
            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
                res[prop] = {};
                extend(res[prop], parentConfig[prop]);
                extend(res[prop], childConfig[prop]);
            } else if (childConfig[prop] != null) {
                res[prop] = childConfig[prop];
            } else {
                delete res[prop];
            }
        }
    }
    for (prop in parentConfig) {
        if (
            hasOwnProp(parentConfig, prop) &&
            !hasOwnProp(childConfig, prop) &&
            isObject(parentConfig[prop])
        ) {
            // make sure changes to properties don't modify parent config
            res[prop] = extend({}, res[prop]);
        }
    }
    return res;
}
import { get, set } from './get-set';
import { setMonth } from '../units/month';
import { createDuration } from '../duration/create';
import { deprecateSimple } from '../utils/deprecate';
import { hooks } from '../utils/hooks';
import absRound from '../utils/abs-round';

// TODO: remove 'name' arg after deprecation is removed
function createAdder(direction, name) {
    return function (val, period) {
        var dur, tmp;
        //invert the arguments, but complain about it
        if (period !== null && !isNaN(+period)) {
            deprecateSimple(
                name,
                'moment().' +
                    name +
                    '(period, number) is deprecated. Please use moment().' +
                    name +
                    '(number, period). ' +
                    'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
            );
            tmp = val;
            val = period;
            period = tmp;
        }

        dur = createDuration(val, period);
        addSubtract(this, dur, direction);
        return this;
    };
}

export function addSubtract(mom, duration, isAdding, updateOffset) {
    var milliseconds = duration._milliseconds,
        days = absRound(duration._days),
        months = absRound(duration._months);

    if (!mom.isValid()) {
        // No op
        return;
    }

    updateOffset = updateOffset == null ? true : updateOffset;

    if (months) {
        setMonth(mom, get(mom, 'Month') + months * isAdding);
    }
    if (days) {
        set(mom, 'Date', get(mom, 'Date') + days * isAdding);
    }
    if (milliseconds) {
        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
    }
    if (updateOffset) {
        hooks.updateOffset(mom, days || months);
    }
}

export var add = createAdder(1, 'add'),
    subtract = createAdder(-1, 'subtract');
import { createLocal } from '../create/local';
import { cloneWithOffset } from '../units/offset';
import isFunction from '../utils/is-function';
import { hooks } from '../utils/hooks';
import { isMomentInput } from '../utils/is-moment-input';
import isCalendarSpec from '../utils/is-calendar-spec';

export function getCalendarFormat(myMoment, now) {
    var diff = myMoment.diff(now, 'days', true);
    return diff < -6
        ? 'sameElse'
        : diff < -1
        ? 'lastWeek'
        : diff < 0
        ? 'lastDay'
        : diff < 1
        ? 'sameDay'
        : diff < 2
        ? 'nextDay'
        : diff < 7
        ? 'nextWeek'
        : 'sameElse';
}

export function calendar(time, formats) {
    // Support for single parameter, formats only overload to the calendar function
    if (arguments.length === 1) {
        if (!arguments[0]) {
            time = undefined;
            formats = undefined;
        } else if (isMomentInput(arguments[0])) {
            time = arguments[0];
            formats = undefined;
        } else if (isCalendarSpec(arguments[0])) {
            formats = arguments[0];
            time = undefined;
        }
    }
    // We want to compare the start of today, vs this.
    // Getting start-of-today depends on whether we're local/utc/offset or not.
    var now = time || createLocal(),
        sod = cloneWithOffset(now, this).startOf('day'),
        format = hooks.calendarFormat(this, sod) || 'sameElse',
        output =
            formats &&
            (isFunction(formats[format])
                ? formats[format].call(this, now)
                : formats[format]);

    return this.format(
        output || this.localeData().calendar(format, this, createLocal(now))
    );
}
import { Moment } from './constructor';

export function clone() {
    return new Moment(this);
}
import { isMoment } from './constructor';
import { normalizeUnits } from '../units/aliases';
import { createLocal } from '../create/local';

export function isAfter(input, units) {
    var localInput = isMoment(input) ? input : createLocal(input);
    if (!(this.isValid() && localInput.isValid())) {
        return false;
    }
    units = normalizeUnits(units) || 'millisecond';
    if (units === 'millisecond') {
        return this.valueOf() > localInput.valueOf();
    } else {
        return localInput.valueOf() < this.clone().startOf(units).valueOf();
    }
}

export function isBefore(input, units) {
    var localInput = isMoment(input) ? input : createLocal(input);
    if (!(this.isValid() && localInput.isValid())) {
        return false;
    }
    units = normalizeUnits(units) || 'millisecond';
    if (units === 'millisecond') {
        return this.valueOf() < localInput.valueOf();
    } else {
        return this.clone().endOf(units).valueOf() < localInput.valueOf();
    }
}

export function isBetween(from, to, units, inclusivity) {
    var localFrom = isMoment(from) ? from : createLocal(from),
        localTo = isMoment(to) ? to : createLocal(to);
    if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
        return false;
    }
    inclusivity = inclusivity || '()';
    return (
        (inclusivity[0] === '('
            ? this.isAfter(localFrom, units)
            : !this.isBefore(localFrom, units)) &&
        (inclusivity[1] === ')'
            ? this.isBefore(localTo, units)
            : !this.isAfter(localTo, units))
    );
}

export function isSame(input, units) {
    var localInput = isMoment(input) ? input : createLocal(input),
        inputMs;
    if (!(this.isValid() && localInput.isValid())) {
        return false;
    }
    units = normalizeUnits(units) || 'millisecond';
    if (units === 'millisecond') {
        return this.valueOf() === localInput.valueOf();
    } else {
        inputMs = localInput.valueOf();
        return (
            this.clone().startOf(units).valueOf() <= inputMs &&
            inputMs <= this.clone().endOf(units).valueOf()
        );
    }
}

export function isSameOrAfter(input, units) {
    return this.isSame(input, units) || this.isAfter(input, units);
}

export function isSameOrBefore(input, units) {
    return this.isSame(input, units) || this.isBefore(input, units);
}
import { hooks } from '../utils/hooks';
import isUndefined from '../utils/is-undefined';
import getParsingFlags from '../create/parsing-flags';

// Plugins that add properties should also add the key here (null value),
// so we can properly clone ourselves.
var momentProperties = (hooks.momentProperties = []),
    updateInProgress = false;

export function copyConfig(to, from) {
    var i, prop, val;

    if (!isUndefined(from._isAMomentObject)) {
        to._isAMomentObject = from._isAMomentObject;
    }
    if (!isUndefined(from._i)) {
        to._i = from._i;
    }
    if (!isUndefined(from._f)) {
        to._f = from._f;
    }
    if (!isUndefined(from._l)) {
        to._l = from._l;
    }
    if (!isUndefined(from._strict)) {
        to._strict = from._strict;
    }
    if (!isUndefined(from._tzm)) {
        to._tzm = from._tzm;
    }
    if (!isUndefined(from._isUTC)) {
        to._isUTC = from._isUTC;
    }
    if (!isUndefined(from._offset)) {
        to._offset = from._offset;
    }
    if (!isUndefined(from._pf)) {
        to._pf = getParsingFlags(from);
    }
    if (!isUndefined(from._locale)) {
        to._locale = from._locale;
    }

    if (momentProperties.length > 0) {
        for (i = 0; i < momentProperties.length; i++) {
            prop = momentProperties[i];
            val = from[prop];
            if (!isUndefined(val)) {
                to[prop] = val;
            }
        }
    }

    return to;
}

// Moment prototype object
export function Moment(config) {
    copyConfig(this, config);
    this._d = new Date(config._d != null ? config._d.getTime() : NaN);
    if (!this.isValid()) {
        this._d = new Date(NaN);
    }
    // Prevent infinite loop in case updateOffset creates new moment
    // objects.
    if (updateInProgress === false) {
        updateInProgress = true;
        hooks.updateOffset(this);
        updateInProgress = false;
    }
}

export function isMoment(obj) {
    return (
        obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
    );
}
export function creationData() {
    return {
        input: this._i,
        format: this._f,
        locale: this._locale,
        isUTC: this._isUTC,
        strict: this._strict,
    };
}
import absFloor from '../utils/abs-floor';
import { cloneWithOffset } from '../units/offset';
import { normalizeUnits } from '../units/aliases';

export function diff(input, units, asFloat) {
    var that, zoneDelta, output;

    if (!this.isValid()) {
        return NaN;
    }

    that = cloneWithOffset(input, this);

    if (!that.isValid()) {
        return NaN;
    }

    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;

    units = normalizeUnits(units);

    switch (units) {
        case 'year':
            output = monthDiff(this, that) / 12;
            break;
        case 'month':
            output = monthDiff(this, that);
            break;
        case 'quarter':
            output = monthDiff(this, that) / 3;
            break;
        case 'second':
            output = (this - that) / 1e3;
            break; // 1000
        case 'minute':
            output = (this - that) / 6e4;
            break; // 1000 * 60
        case 'hour':
            output = (this - that) / 36e5;
            break; // 1000 * 60 * 60
        case 'day':
            output = (this - that - zoneDelta) / 864e5;
            break; // 1000 * 60 * 60 * 24, negate dst
        case 'week':
            output = (this - that - zoneDelta) / 6048e5;
            break; // 1000 * 60 * 60 * 24 * 7, negate dst
        default:
            output = this - that;
    }

    return asFloat ? output : absFloor(output);
}

function monthDiff(a, b) {
    if (a.date() < b.date()) {
        // end-of-month calculations work correct when the start month has more
        // days than the end month.
        return -monthDiff(b, a);
    }
    // difference in months
    var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
        // b is in (anchor - 1 month, anchor + 1 month)
        anchor = a.clone().add(wholeMonthDiff, 'months'),
        anchor2,
        adjust;

    if (b - anchor < 0) {
        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
        // linear across the month
        adjust = (b - anchor) / (anchor - anchor2);
    } else {
        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
        // linear across the month
        adjust = (b - anchor) / (anchor2 - anchor);
    }

    //check for negative zero, return zero if negative zero
    return -(wholeMonthDiff + adjust) || 0;
}
import { formatMoment } from '../format/format';
import { hooks } from '../utils/hooks';
import isFunction from '../utils/is-function';

hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';

export function toString() {
    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
}

export function toISOString(keepOffset) {
    if (!this.isValid()) {
        return null;
    }
    var utc = keepOffset !== true,
        m = utc ? this.clone().utc() : this;
    if (m.year() < 0 || m.year() > 9999) {
        return formatMoment(
            m,
            utc
                ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
                : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
        );
    }
    if (isFunction(Date.prototype.toISOString)) {
        // native implementation is ~50x faster, use it when we can
        if (utc) {
            return this.toDate().toISOString();
        } else {
            return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
                .toISOString()
                .replace('Z', formatMoment(m, 'Z'));
        }
    }
    return formatMoment(
        m,
        utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
    );
}

/**
 * Return a human readable representation of a moment that can
 * also be evaluated to get a new moment which is the same
 *
 * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
 */
export function inspect() {
    if (!this.isValid()) {
        return 'moment.invalid(/* ' + this._i + ' */)';
    }
    var func = 'moment',
        zone = '',
        prefix,
        year,
        datetime,
        suffix;
    if (!this.isLocal()) {
        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
        zone = 'Z';
    }
    prefix = '[' + func + '("]';
    year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
    datetime = '-MM-DD[T]HH:mm:ss.SSS';
    suffix = zone + '[")]';

    return this.format(prefix + year + datetime + suffix);
}

export function format(inputString) {
    if (!inputString) {
        inputString = this.isUtc()
            ? hooks.defaultFormatUtc
            : hooks.defaultFormat;
    }
    var output = formatMoment(this, inputString);
    return this.localeData().postformat(output);
}
import { createDuration } from '../duration/create';
import { createLocal } from '../create/local';
import { isMoment } from '../moment/constructor';

export function from(time, withoutSuffix) {
    if (
        this.isValid() &&
        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
    ) {
        return createDuration({ to: this, from: time })
            .locale(this.locale())
            .humanize(!withoutSuffix);
    } else {
        return this.localeData().invalidDate();
    }
}

export function fromNow(withoutSuffix) {
    return this.from(createLocal(), withoutSuffix);
}
import { normalizeUnits, normalizeObjectUnits } from '../units/aliases';
import { getPrioritizedUnits } from '../units/priorities';
import { hooks } from '../utils/hooks';
import isFunction from '../utils/is-function';
import { daysInMonth } from '../units/month';
import { isLeapYear } from '../utils/is-leap-year';
import toInt from '../utils/to-int';

export function makeGetSet(unit, keepTime) {
    return function (value) {
        if (value != null) {
            set(this, unit, value);
            hooks.updateOffset(this, keepTime);
            return this;
        } else {
            return get(this, unit);
        }
    };
}

export function get(mom, unit) {
    return mom.isValid()
        ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
        : NaN;
}

export function set(mom, unit, value) {
    if (mom.isValid() && !isNaN(value)) {
        if (
            unit === 'FullYear' &&
            isLeapYear(mom.year()) &&
            mom.month() === 1 &&
            mom.date() === 29
        ) {
            value = toInt(value);
            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
                value,
                mom.month(),
                daysInMonth(value, mom.month())
            );
        } else {
            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
        }
    }
}

// MOMENTS

export function stringGet(units) {
    units = normalizeUnits(units);
    if (isFunction(this[units])) {
        return this[units]();
    }
    return this;
}

export function stringSet(units, value) {
    if (typeof units === 'object') {
        units = normalizeObjectUnits(units);
        var prioritized = getPrioritizedUnits(units),
            i;
        for (i = 0; i < prioritized.length; i++) {
            this[prioritized[i].unit](units[prioritized[i].unit]);
        }
    } else {
        units = normalizeUnits(units);
        if (isFunction(this[units])) {
            return this[units](value);
        }
    }
    return this;
}
import { getLocale } from '../locale/locales';
import { deprecate } from '../utils/deprecate';

// If passed a locale key, it will set the locale for this
// instance.  Otherwise, it will return the locale configuration
// variables for this instance.
export function locale(key) {
    var newLocaleData;

    if (key === undefined) {
        return this._locale._abbr;
    } else {
        newLocaleData = getLocale(key);
        if (newLocaleData != null) {
            this._locale = newLocaleData;
        }
        return this;
    }
}

export var lang = deprecate(
    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
    function (key) {
        if (key === undefined) {
            return this.localeData();
        } else {
            return this.locale(key);
        }
    }
);

export function localeData() {
    return this._locale;
}
import { deprecate } from '../utils/deprecate';
import isArray from '../utils/is-array';
import { createLocal } from '../create/local';
import { createInvalid } from '../create/valid';

export var prototypeMin = deprecate(
        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
        function () {
            var other = createLocal.apply(null, arguments);
            if (this.isValid() && other.isValid()) {
                return other < this ? this : other;
            } else {
                return createInvalid();
            }
        }
    ),
    prototypeMax = deprecate(
        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
        function () {
            var other = createLocal.apply(null, arguments);
            if (this.isValid() && other.isValid()) {
                return other > this ? this : other;
            } else {
                return createInvalid();
            }
        }
    );

// Pick a moment m from moments so that m[fn](other) is true for all
// other. This relies on the function fn to be transitive.
//
// moments should either be an array of moment objects or an array, whose
// first element is an array of moment objects.
function pickBy(fn, moments) {
    var res, i;
    if (moments.length === 1 && isArray(moments[0])) {
        moments = moments[0];
    }
    if (!moments.length) {
        return createLocal();
    }
    res = moments[0];
    for (i = 1; i < moments.length; ++i) {
        if (!moments[i].isValid() || moments[i][fn](res)) {
            res = moments[i];
        }
    }
    return res;
}

// TODO: Use [].sort instead?
export function min() {
    var args = [].slice.call(arguments, 0);

    return pickBy('isBefore', args);
}

export function max() {
    var args = [].slice.call(arguments, 0);

    return pickBy('isAfter', args);
}
import { createLocal } from '../create/local';
import { createUTC } from '../create/utc';
import { createInvalid } from '../create/valid';
import { isMoment } from './constructor';
import { min, max } from './min-max';
import { now } from './now';
import momentPrototype from './prototype';

function createUnix(input) {
    return createLocal(input * 1000);
}

function createInZone() {
    return createLocal.apply(null, arguments).parseZone();
}

export {
    now,
    min,
    max,
    isMoment,
    createUTC,
    createUnix,
    createLocal,
    createInZone,
    createInvalid,
    momentPrototype,
};
export var now = function () {
    return Date.now ? Date.now() : +new Date();
};
import { Moment } from './constructor';

var proto = Moment.prototype;

import { add, subtract } from './add-subtract';
import { calendar } from './calendar';
import { clone } from './clone';
import {
    isBefore,
    isBetween,
    isSame,
    isAfter,
    isSameOrAfter,
    isSameOrBefore,
} from './compare';
import { diff } from './diff';
import { format, toString, toISOString, inspect } from './format';
import { from, fromNow } from './from';
import { to, toNow } from './to';
import { stringGet, stringSet } from './get-set';
import { locale, localeData, lang } from './locale';
import { prototypeMin, prototypeMax } from './min-max';
import { startOf, endOf } from './start-end-of';
import { valueOf, toDate, toArray, toObject, toJSON, unix } from './to-type';
import { isValid, parsingFlags, invalidAt } from './valid';
import { creationData } from './creation-data';

proto.add = add;
proto.calendar = calendar;
proto.clone = clone;
proto.diff = diff;
proto.endOf = endOf;
proto.format = format;
proto.from = from;
proto.fromNow = fromNow;
proto.to = to;
proto.toNow = toNow;
proto.get = stringGet;
proto.invalidAt = invalidAt;
proto.isAfter = isAfter;
proto.isBefore = isBefore;
proto.isBetween = isBetween;
proto.isSame = isSame;
proto.isSameOrAfter = isSameOrAfter;
proto.isSameOrBefore = isSameOrBefore;
proto.isValid = isValid;
proto.lang = lang;
proto.locale = locale;
proto.localeData = localeData;
proto.max = prototypeMax;
proto.min = prototypeMin;
proto.parsingFlags = parsingFlags;
proto.set = stringSet;
proto.startOf = startOf;
proto.subtract = subtract;
proto.toArray = toArray;
proto.toObject = toObject;
proto.toDate = toDate;
proto.toISOString = toISOString;
proto.inspect = inspect;
if (typeof Symbol !== 'undefined' && Symbol.for != null) {
    proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
        return 'Moment<' + this.format() + '>';
    };
}
proto.toJSON = toJSON;
proto.toString = toString;
proto.unix = unix;
proto.valueOf = valueOf;
proto.creationData = creationData;

// Era
import { getEraName, getEraNarrow, getEraAbbr, getEraYear } from '../units/era';
proto.eraName = getEraName;
proto.eraNarrow = getEraNarrow;
proto.eraAbbr = getEraAbbr;
proto.eraYear = getEraYear;

// Year
import { getSetYear, getIsLeapYear } from '../units/year';
proto.year = getSetYear;
proto.isLeapYear = getIsLeapYear;

// Week Year
import {
    getSetWeekYear,
    getSetISOWeekYear,
    getWeeksInYear,
    getWeeksInWeekYear,
    getISOWeeksInYear,
    getISOWeeksInISOWeekYear,
} from '../units/week-year';
proto.weekYear = getSetWeekYear;
proto.isoWeekYear = getSetISOWeekYear;

// Quarter
import { getSetQuarter } from '../units/quarter';
proto.quarter = proto.quarters = getSetQuarter;

// Month
import { getSetMonth, getDaysInMonth } from '../units/month';
proto.month = getSetMonth;
proto.daysInMonth = getDaysInMonth;

// Week
import { getSetWeek, getSetISOWeek } from '../units/week';
proto.week = proto.weeks = getSetWeek;
proto.isoWeek = proto.isoWeeks = getSetISOWeek;
proto.weeksInYear = getWeeksInYear;
proto.weeksInWeekYear = getWeeksInWeekYear;
proto.isoWeeksInYear = getISOWeeksInYear;
proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;

// Day
import { getSetDayOfMonth } from '../units/day-of-month';
import {
    getSetDayOfWeek,
    getSetISODayOfWeek,
    getSetLocaleDayOfWeek,
} from '../units/day-of-week';
import { getSetDayOfYear } from '../units/day-of-year';
proto.date = getSetDayOfMonth;
proto.day = proto.days = getSetDayOfWeek;
proto.weekday = getSetLocaleDayOfWeek;
proto.isoWeekday = getSetISODayOfWeek;
proto.dayOfYear = getSetDayOfYear;

// Hour
import { getSetHour } from '../units/hour';
proto.hour = proto.hours = getSetHour;

// Minute
import { getSetMinute } from '../units/minute';
proto.minute = proto.minutes = getSetMinute;

// Second
import { getSetSecond } from '../units/second';
proto.second = proto.seconds = getSetSecond;

// Millisecond
import { getSetMillisecond } from '../units/millisecond';
proto.millisecond = proto.milliseconds = getSetMillisecond;

// Offset
import {
    getSetOffset,
    setOffsetToUTC,
    setOffsetToLocal,
    setOffsetToParsedOffset,
    hasAlignedHourOffset,
    isDaylightSavingTime,
    isDaylightSavingTimeShifted,
    getSetZone,
    isLocal,
    isUtcOffset,
    isUtc,
} from '../units/offset';
proto.utcOffset = getSetOffset;
proto.utc = setOffsetToUTC;
proto.local = setOffsetToLocal;
proto.parseZone = setOffsetToParsedOffset;
proto.hasAlignedHourOffset = hasAlignedHourOffset;
proto.isDST = isDaylightSavingTime;
proto.isLocal = isLocal;
proto.isUtcOffset = isUtcOffset;
proto.isUtc = isUtc;
proto.isUTC = isUtc;

// Timezone
import { getZoneAbbr, getZoneName } from '../units/timezone';
proto.zoneAbbr = getZoneAbbr;
proto.zoneName = getZoneName;

// Deprecations
import { deprecate } from '../utils/deprecate';
proto.dates = deprecate(
    'dates accessor is deprecated. Use date instead.',
    getSetDayOfMonth
);
proto.months = deprecate(
    'months accessor is deprecated. Use month instead',
    getSetMonth
);
proto.years = deprecate(
    'years accessor is deprecated. Use year instead',
    getSetYear
);
proto.zone = deprecate(
    'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
    getSetZone
);
proto.isDSTShifted = deprecate(
    'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
    isDaylightSavingTimeShifted
);

export default proto;
import { normalizeUnits } from '../units/aliases';
import { hooks } from '../utils/hooks';

var MS_PER_SECOND = 1000,
    MS_PER_MINUTE = 60 * MS_PER_SECOND,
    MS_PER_HOUR = 60 * MS_PER_MINUTE,
    MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;

// actual modulo - handles negative numbers (for dates before 1970):
function mod(dividend, divisor) {
    return ((dividend % divisor) + divisor) % divisor;
}

function localStartOfDate(y, m, d) {
    // the date constructor remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
        // preserve leap years using a full 400 year cycle, then reset
        return new Date(y + 400, m, d) - MS_PER_400_YEARS;
    } else {
        return new Date(y, m, d).valueOf();
    }
}

function utcStartOfDate(y, m, d) {
    // Date.UTC remaps years 0-99 to 1900-1999
    if (y < 100 && y >= 0) {
        // preserve leap years using a full 400 year cycle, then reset
        return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
    } else {
        return Date.UTC(y, m, d);
    }
}

export function startOf(units) {
    var time, startOfDate;
    units = normalizeUnits(units);
    if (units === undefined || units === 'millisecond' || !this.isValid()) {
        return this;
    }

    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

    switch (units) {
        case 'year':
            time = startOfDate(this.year(), 0, 1);
            break;
        case 'quarter':
            time = startOfDate(
                this.year(),
                this.month() - (this.month() % 3),
                1
            );
            break;
        case 'month':
            time = startOfDate(this.year(), this.month(), 1);
            break;
        case 'week':
            time = startOfDate(
                this.year(),
                this.month(),
                this.date() - this.weekday()
            );
            break;
        case 'isoWeek':
            time = startOfDate(
                this.year(),
                this.month(),
                this.date() - (this.isoWeekday() - 1)
            );
            break;
        case 'day':
        case 'date':
            time = startOfDate(this.year(), this.month(), this.date());
            break;
        case 'hour':
            time = this._d.valueOf();
            time -= mod(
                time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                MS_PER_HOUR
            );
            break;
        case 'minute':
            time = this._d.valueOf();
            time -= mod(time, MS_PER_MINUTE);
            break;
        case 'second':
            time = this._d.valueOf();
            time -= mod(time, MS_PER_SECOND);
            break;
    }

    this._d.setTime(time);
    hooks.updateOffset(this, true);
    return this;
}

export function endOf(units) {
    var time, startOfDate;
    units = normalizeUnits(units);
    if (units === undefined || units === 'millisecond' || !this.isValid()) {
        return this;
    }

    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;

    switch (units) {
        case 'year':
            time = startOfDate(this.year() + 1, 0, 1) - 1;
            break;
        case 'quarter':
            time =
                startOfDate(
                    this.year(),
                    this.month() - (this.month() % 3) + 3,
                    1
                ) - 1;
            break;
        case 'month':
            time = startOfDate(this.year(), this.month() + 1, 1) - 1;
            break;
        case 'week':
            time =
                startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - this.weekday() + 7
                ) - 1;
            break;
        case 'isoWeek':
            time =
                startOfDate(
                    this.year(),
                    this.month(),
                    this.date() - (this.isoWeekday() - 1) + 7
                ) - 1;
            break;
        case 'day':
        case 'date':
            time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
            break;
        case 'hour':
            time = this._d.valueOf();
            time +=
                MS_PER_HOUR -
                mod(
                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
                    MS_PER_HOUR
                ) -
                1;
            break;
        case 'minute':
            time = this._d.valueOf();
            time += MS_PER_MINUTE - mod(time, MS_PER_MINUTE) - 1;
            break;
        case 'second':
            time = this._d.valueOf();
            time += MS_PER_SECOND - mod(time, MS_PER_SECOND) - 1;
            break;
    }

    this._d.setTime(time);
    hooks.updateOffset(this, true);
    return this;
}
export function valueOf() {
    return this._d.valueOf() - (this._offset || 0) * 60000;
}

export function unix() {
    return Math.floor(this.valueOf() / 1000);
}

export function toDate() {
    return new Date(this.valueOf());
}

export function toArray() {
    var m = this;
    return [
        m.year(),
        m.month(),
        m.date(),
        m.hour(),
        m.minute(),
        m.second(),
        m.millisecond(),
    ];
}

export function toObject() {
    var m = this;
    return {
        years: m.year(),
        months: m.month(),
        date: m.date(),
        hours: m.hours(),
        minutes: m.minutes(),
        seconds: m.seconds(),
        milliseconds: m.milliseconds(),
    };
}

export function toJSON() {
    // new Date(NaN).toJSON() === null
    return this.isValid() ? this.toISOString() : null;
}
import { createDuration } from '../duration/create';
import { createLocal } from '../create/local';
import { isMoment } from '../moment/constructor';

export function to(time, withoutSuffix) {
    if (
        this.isValid() &&
        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
    ) {
        return createDuration({ from: this, to: time })
            .locale(this.locale())
            .humanize(!withoutSuffix);
    } else {
        return this.localeData().invalidDate();
    }
}

export function toNow(withoutSuffix) {
    return this.to(createLocal(), withoutSuffix);
}
import { isValid as _isValid } from '../create/valid';
import extend from '../utils/extend';
import getParsingFlags from '../create/parsing-flags';

export function isValid() {
    return _isValid(this);
}

export function parsingFlags() {
    return extend({}, getParsingFlags(this));
}

export function invalidAt() {
    return getParsingFlags(this).overflow;
}
var match1 = /\d/, //       0 - 9
    match2 = /\d\d/, //      00 - 99
    match3 = /\d{3}/, //     000 - 999
    match4 = /\d{4}/, //    0000 - 9999
    match6 = /[+-]?\d{6}/, // -999999 - 999999
    match1to2 = /\d\d?/, //       0 - 99
    match3to4 = /\d\d\d\d?/, //     999 - 9999
    match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
    match1to3 = /\d{1,3}/, //       0 - 999
    match1to4 = /\d{1,4}/, //       0 - 9999
    match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
    matchUnsigned = /\d+/, //       0 - inf
    matchSigned = /[+-]?\d+/, //    -inf - inf
    matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
    matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
    matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
    // any word (or two) characters or numbers including two/three word month in arabic.
    // includes scottish gaelic two word and hyphenated months
    matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
    regexes;

export {
    match1,
    match2,
    match3,
    match4,
    match6,
    match1to2,
    match3to4,
    match5to6,
    match1to3,
    match1to4,
    match1to6,
    matchUnsigned,
    matchSigned,
    matchOffset,
    matchShortOffset,
    matchTimestamp,
    matchWord,
};

import hasOwnProp from '../utils/has-own-prop';
import isFunction from '../utils/is-function';

regexes = {};

export function addRegexToken(token, regex, strictRegex) {
    regexes[token] = isFunction(regex)
        ? regex
        : function (isStrict, localeData) {
              return isStrict && strictRegex ? strictRegex : regex;
          };
}

export function getParseRegexForToken(token, config) {
    if (!hasOwnProp(regexes, token)) {
        return new RegExp(unescapeFormat(token));
    }

    return regexes[token](config._strict, config._locale);
}

// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
function unescapeFormat(s) {
    return regexEscape(
        s
            .replace('\\', '')
            .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
                matched,
                p1,
                p2,
                p3,
                p4
            ) {
                return p1 || p2 || p3 || p4;
            })
    );
}

export function regexEscape(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
import hasOwnProp from '../utils/has-own-prop';
import isNumber from '../utils/is-number';
import toInt from '../utils/to-int';

var tokens = {};

export function addParseToken(token, callback) {
    var i,
        func = callback;
    if (typeof token === 'string') {
        token = [token];
    }
    if (isNumber(callback)) {
        func = function (input, array) {
            array[callback] = toInt(input);
        };
    }
    for (i = 0; i < token.length; i++) {
        tokens[token[i]] = func;
    }
}

export function addWeekParseToken(token, callback) {
    addParseToken(token, function (input, array, config, token) {
        config._w = config._w || {};
        callback(input, config._w, config, token);
    });
}

export function addTimeToArrayFromToken(token, input, config) {
    if (input != null && hasOwnProp(tokens, token)) {
        tokens[token](input, config._a, config, token);
    }
}
import hasOwnProp from '../utils/has-own-prop';

var aliases = {};

export function addUnitAlias(unit, shorthand) {
    var lowerCase = unit.toLowerCase();
    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
}

export function normalizeUnits(units) {
    return typeof units === 'string'
        ? aliases[units] || aliases[units.toLowerCase()]
        : undefined;
}

export function normalizeObjectUnits(inputObject) {
    var normalizedInput = {},
        normalizedProp,
        prop;

    for (prop in inputObject) {
        if (hasOwnProp(inputObject, prop)) {
            normalizedProp = normalizeUnits(prop);
            if (normalizedProp) {
                normalizedInput[normalizedProp] = inputObject[prop];
            }
        }
    }

    return normalizedInput;
}
export var YEAR = 0,
    MONTH = 1,
    DATE = 2,
    HOUR = 3,
    MINUTE = 4,
    SECOND = 5,
    MILLISECOND = 6,
    WEEK = 7,
    WEEKDAY = 8;
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import { addRegexToken, match1to2, match2 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { DATE } from './constants';
import toInt from '../utils/to-int';

// FORMATTING

addFormatToken('D', ['DD', 2], 'Do', 'date');

// ALIASES

addUnitAlias('date', 'D');

// PRIORITY
addUnitPriority('date', 9);

// PARSING

addRegexToken('D', match1to2);
addRegexToken('DD', match1to2, match2);
addRegexToken('Do', function (isStrict, locale) {
    // TODO: Remove "ordinalParse" fallback in next major release.
    return isStrict
        ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
        : locale._dayOfMonthOrdinalParseLenient;
});

addParseToken(['D', 'DD'], DATE);
addParseToken('Do', function (input, array) {
    array[DATE] = toInt(input.match(match1to2)[0]);
});

// MOMENTS

export var getSetDayOfMonth = makeGetSet('Date', true);
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import {
    addRegexToken,
    match1to2,
    matchWord,
    regexEscape,
} from '../parse/regex';
import { addWeekParseToken } from '../parse/token';
import toInt from '../utils/to-int';
import isArray from '../utils/is-array';
import indexOf from '../utils/index-of';
import hasOwnProp from '../utils/has-own-prop';
import { createUTC } from '../create/utc';
import getParsingFlags from '../create/parsing-flags';

// FORMATTING

addFormatToken('d', 0, 'do', 'day');

addFormatToken('dd', 0, 0, function (format) {
    return this.localeData().weekdaysMin(this, format);
});

addFormatToken('ddd', 0, 0, function (format) {
    return this.localeData().weekdaysShort(this, format);
});

addFormatToken('dddd', 0, 0, function (format) {
    return this.localeData().weekdays(this, format);
});

addFormatToken('e', 0, 0, 'weekday');
addFormatToken('E', 0, 0, 'isoWeekday');

// ALIASES

addUnitAlias('day', 'd');
addUnitAlias('weekday', 'e');
addUnitAlias('isoWeekday', 'E');

// PRIORITY
addUnitPriority('day', 11);
addUnitPriority('weekday', 11);
addUnitPriority('isoWeekday', 11);

// PARSING

addRegexToken('d', match1to2);
addRegexToken('e', match1to2);
addRegexToken('E', match1to2);
addRegexToken('dd', function (isStrict, locale) {
    return locale.weekdaysMinRegex(isStrict);
});
addRegexToken('ddd', function (isStrict, locale) {
    return locale.weekdaysShortRegex(isStrict);
});
addRegexToken('dddd', function (isStrict, locale) {
    return locale.weekdaysRegex(isStrict);
});

addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
    var weekday = config._locale.weekdaysParse(input, token, config._strict);
    // if we didn't get a weekday name, mark the date as invalid
    if (weekday != null) {
        week.d = weekday;
    } else {
        getParsingFlags(config).invalidWeekday = input;
    }
});

addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
    week[token] = toInt(input);
});

// HELPERS

function parseWeekday(input, locale) {
    if (typeof input !== 'string') {
        return input;
    }

    if (!isNaN(input)) {
        return parseInt(input, 10);
    }

    input = locale.weekdaysParse(input);
    if (typeof input === 'number') {
        return input;
    }

    return null;
}

function parseIsoWeekday(input, locale) {
    if (typeof input === 'string') {
        return locale.weekdaysParse(input) % 7 || 7;
    }
    return isNaN(input) ? null : input;
}

// LOCALES
function shiftWeekdays(ws, n) {
    return ws.slice(n, 7).concat(ws.slice(0, n));
}

var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    defaultWeekdaysRegex = matchWord,
    defaultWeekdaysShortRegex = matchWord,
    defaultWeekdaysMinRegex = matchWord;

export {
    defaultLocaleWeekdays,
    defaultLocaleWeekdaysShort,
    defaultLocaleWeekdaysMin,
};

export function localeWeekdays(m, format) {
    var weekdays = isArray(this._weekdays)
        ? this._weekdays
        : this._weekdays[
              m && m !== true && this._weekdays.isFormat.test(format)
                  ? 'format'
                  : 'standalone'
          ];
    return m === true
        ? shiftWeekdays(weekdays, this._week.dow)
        : m
        ? weekdays[m.day()]
        : weekdays;
}

export function localeWeekdaysShort(m) {
    return m === true
        ? shiftWeekdays(this._weekdaysShort, this._week.dow)
        : m
        ? this._weekdaysShort[m.day()]
        : this._weekdaysShort;
}

export function localeWeekdaysMin(m) {
    return m === true
        ? shiftWeekdays(this._weekdaysMin, this._week.dow)
        : m
        ? this._weekdaysMin[m.day()]
        : this._weekdaysMin;
}

function handleStrictParse(weekdayName, format, strict) {
    var i,
        ii,
        mom,
        llc = weekdayName.toLocaleLowerCase();
    if (!this._weekdaysParse) {
        this._weekdaysParse = [];
        this._shortWeekdaysParse = [];
        this._minWeekdaysParse = [];

        for (i = 0; i < 7; ++i) {
            mom = createUTC([2000, 1]).day(i);
            this._minWeekdaysParse[i] = this.weekdaysMin(
                mom,
                ''
            ).toLocaleLowerCase();
            this._shortWeekdaysParse[i] = this.weekdaysShort(
                mom,
                ''
            ).toLocaleLowerCase();
            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
        }
    }

    if (strict) {
        if (format === 'dddd') {
            ii = indexOf.call(this._weekdaysParse, llc);
            return ii !== -1 ? ii : null;
        } else if (format === 'ddd') {
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        } else {
            ii = indexOf.call(this._minWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        }
    } else {
        if (format === 'dddd') {
            ii = indexOf.call(this._weekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._minWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        } else if (format === 'ddd') {
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._weekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._minWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        } else {
            ii = indexOf.call(this._minWeekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._weekdaysParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._shortWeekdaysParse, llc);
            return ii !== -1 ? ii : null;
        }
    }
}

export function localeWeekdaysParse(weekdayName, format, strict) {
    var i, mom, regex;

    if (this._weekdaysParseExact) {
        return handleStrictParse.call(this, weekdayName, format, strict);
    }

    if (!this._weekdaysParse) {
        this._weekdaysParse = [];
        this._minWeekdaysParse = [];
        this._shortWeekdaysParse = [];
        this._fullWeekdaysParse = [];
    }

    for (i = 0; i < 7; i++) {
        // make the regex if we don't have it already

        mom = createUTC([2000, 1]).day(i);
        if (strict && !this._fullWeekdaysParse[i]) {
            this._fullWeekdaysParse[i] = new RegExp(
                '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
                'i'
            );
            this._shortWeekdaysParse[i] = new RegExp(
                '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
                'i'
            );
            this._minWeekdaysParse[i] = new RegExp(
                '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
                'i'
            );
        }
        if (!this._weekdaysParse[i]) {
            regex =
                '^' +
                this.weekdays(mom, '') +
                '|^' +
                this.weekdaysShort(mom, '') +
                '|^' +
                this.weekdaysMin(mom, '');
            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
        }
        // test the regex
        if (
            strict &&
            format === 'dddd' &&
            this._fullWeekdaysParse[i].test(weekdayName)
        ) {
            return i;
        } else if (
            strict &&
            format === 'ddd' &&
            this._shortWeekdaysParse[i].test(weekdayName)
        ) {
            return i;
        } else if (
            strict &&
            format === 'dd' &&
            this._minWeekdaysParse[i].test(weekdayName)
        ) {
            return i;
        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
            return i;
        }
    }
}

// MOMENTS

export function getSetDayOfWeek(input) {
    if (!this.isValid()) {
        return input != null ? this : NaN;
    }
    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
    if (input != null) {
        input = parseWeekday(input, this.localeData());
        return this.add(input - day, 'd');
    } else {
        return day;
    }
}

export function getSetLocaleDayOfWeek(input) {
    if (!this.isValid()) {
        return input != null ? this : NaN;
    }
    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
    return input == null ? weekday : this.add(input - weekday, 'd');
}

export function getSetISODayOfWeek(input) {
    if (!this.isValid()) {
        return input != null ? this : NaN;
    }

    // behaves the same as moment#day except
    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
    // as a setter, sunday should belong to the previous week.

    if (input != null) {
        var weekday = parseIsoWeekday(input, this.localeData());
        return this.day(this.day() % 7 ? weekday : weekday - 7);
    } else {
        return this.day() || 7;
    }
}

export function weekdaysRegex(isStrict) {
    if (this._weekdaysParseExact) {
        if (!hasOwnProp(this, '_weekdaysRegex')) {
            computeWeekdaysParse.call(this);
        }
        if (isStrict) {
            return this._weekdaysStrictRegex;
        } else {
            return this._weekdaysRegex;
        }
    } else {
        if (!hasOwnProp(this, '_weekdaysRegex')) {
            this._weekdaysRegex = defaultWeekdaysRegex;
        }
        return this._weekdaysStrictRegex && isStrict
            ? this._weekdaysStrictRegex
            : this._weekdaysRegex;
    }
}

export function weekdaysShortRegex(isStrict) {
    if (this._weekdaysParseExact) {
        if (!hasOwnProp(this, '_weekdaysRegex')) {
            computeWeekdaysParse.call(this);
        }
        if (isStrict) {
            return this._weekdaysShortStrictRegex;
        } else {
            return this._weekdaysShortRegex;
        }
    } else {
        if (!hasOwnProp(this, '_weekdaysShortRegex')) {
            this._weekdaysShortRegex = defaultWeekdaysShortRegex;
        }
        return this._weekdaysShortStrictRegex && isStrict
            ? this._weekdaysShortStrictRegex
            : this._weekdaysShortRegex;
    }
}

export function weekdaysMinRegex(isStrict) {
    if (this._weekdaysParseExact) {
        if (!hasOwnProp(this, '_weekdaysRegex')) {
            computeWeekdaysParse.call(this);
        }
        if (isStrict) {
            return this._weekdaysMinStrictRegex;
        } else {
            return this._weekdaysMinRegex;
        }
    } else {
        if (!hasOwnProp(this, '_weekdaysMinRegex')) {
            this._weekdaysMinRegex = defaultWeekdaysMinRegex;
        }
        return this._weekdaysMinStrictRegex && isStrict
            ? this._weekdaysMinStrictRegex
            : this._weekdaysMinRegex;
    }
}

function computeWeekdaysParse() {
    function cmpLenRev(a, b) {
        return b.length - a.length;
    }

    var minPieces = [],
        shortPieces = [],
        longPieces = [],
        mixedPieces = [],
        i,
        mom,
        minp,
        shortp,
        longp;
    for (i = 0; i < 7; i++) {
        // make the regex if we don't have it already
        mom = createUTC([2000, 1]).day(i);
        minp = regexEscape(this.weekdaysMin(mom, ''));
        shortp = regexEscape(this.weekdaysShort(mom, ''));
        longp = regexEscape(this.weekdays(mom, ''));
        minPieces.push(minp);
        shortPieces.push(shortp);
        longPieces.push(longp);
        mixedPieces.push(minp);
        mixedPieces.push(shortp);
        mixedPieces.push(longp);
    }
    // Sorting makes sure if one weekday (or abbr) is a prefix of another it
    // will match the longer piece.
    minPieces.sort(cmpLenRev);
    shortPieces.sort(cmpLenRev);
    longPieces.sort(cmpLenRev);
    mixedPieces.sort(cmpLenRev);

    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
    this._weekdaysShortRegex = this._weekdaysRegex;
    this._weekdaysMinRegex = this._weekdaysRegex;

    this._weekdaysStrictRegex = new RegExp(
        '^(' + longPieces.join('|') + ')',
        'i'
    );
    this._weekdaysShortStrictRegex = new RegExp(
        '^(' + shortPieces.join('|') + ')',
        'i'
    );
    this._weekdaysMinStrictRegex = new RegExp(
        '^(' + minPieces.join('|') + ')',
        'i'
    );
}
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import { addRegexToken, match3, match1to3 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import toInt from '../utils/to-int';

// FORMATTING

addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');

// ALIASES

addUnitAlias('dayOfYear', 'DDD');

// PRIORITY
addUnitPriority('dayOfYear', 4);

// PARSING

addRegexToken('DDD', match1to3);
addRegexToken('DDDD', match3);
addParseToken(['DDD', 'DDDD'], function (input, array, config) {
    config._dayOfYear = toInt(input);
});

// HELPERS

// MOMENTS

export function getSetDayOfYear(input) {
    var dayOfYear =
        Math.round(
            (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
        ) + 1;
    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
}
import { addFormatToken } from '../format/format';
import { addRegexToken, matchUnsigned, regexEscape } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { YEAR } from './constants';
import { hooks as moment } from '../utils/hooks';
import { getLocale } from '../locale/locales';
import getParsingFlags from '../create/parsing-flags';
import hasOwnProp from '../utils/has-own-prop';

addFormatToken('N', 0, 0, 'eraAbbr');
addFormatToken('NN', 0, 0, 'eraAbbr');
addFormatToken('NNN', 0, 0, 'eraAbbr');
addFormatToken('NNNN', 0, 0, 'eraName');
addFormatToken('NNNNN', 0, 0, 'eraNarrow');

addFormatToken('y', ['y', 1], 'yo', 'eraYear');
addFormatToken('y', ['yy', 2], 0, 'eraYear');
addFormatToken('y', ['yyy', 3], 0, 'eraYear');
addFormatToken('y', ['yyyy', 4], 0, 'eraYear');

addRegexToken('N', matchEraAbbr);
addRegexToken('NN', matchEraAbbr);
addRegexToken('NNN', matchEraAbbr);
addRegexToken('NNNN', matchEraName);
addRegexToken('NNNNN', matchEraNarrow);

addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
    input,
    array,
    config,
    token
) {
    var era = config._locale.erasParse(input, token, config._strict);
    if (era) {
        getParsingFlags(config).era = era;
    } else {
        getParsingFlags(config).invalidEra = input;
    }
});

addRegexToken('y', matchUnsigned);
addRegexToken('yy', matchUnsigned);
addRegexToken('yyy', matchUnsigned);
addRegexToken('yyyy', matchUnsigned);
addRegexToken('yo', matchEraYearOrdinal);

addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
addParseToken(['yo'], function (input, array, config, token) {
    var match;
    if (config._locale._eraYearOrdinalRegex) {
        match = input.match(config._locale._eraYearOrdinalRegex);
    }

    if (config._locale.eraYearOrdinalParse) {
        array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
    } else {
        array[YEAR] = parseInt(input, 10);
    }
});

export function localeEras(m, format) {
    var i,
        l,
        date,
        eras = this._eras || getLocale('en')._eras;
    for (i = 0, l = eras.length; i < l; ++i) {
        switch (typeof eras[i].since) {
            case 'string':
                // truncate time
                date = moment(eras[i].since).startOf('day');
                eras[i].since = date.valueOf();
                break;
        }

        switch (typeof eras[i].until) {
            case 'undefined':
                eras[i].until = +Infinity;
                break;
            case 'string':
                // truncate time
                date = moment(eras[i].until).startOf('day').valueOf();
                eras[i].until = date.valueOf();
                break;
        }
    }
    return eras;
}

export function localeErasParse(eraName, format, strict) {
    var i,
        l,
        eras = this.eras(),
        name,
        abbr,
        narrow;
    eraName = eraName.toUpperCase();

    for (i = 0, l = eras.length; i < l; ++i) {
        name = eras[i].name.toUpperCase();
        abbr = eras[i].abbr.toUpperCase();
        narrow = eras[i].narrow.toUpperCase();

        if (strict) {
            switch (format) {
                case 'N':
                case 'NN':
                case 'NNN':
                    if (abbr === eraName) {
                        return eras[i];
                    }
                    break;

                case 'NNNN':
                    if (name === eraName) {
                        return eras[i];
                    }
                    break;

                case 'NNNNN':
                    if (narrow === eraName) {
                        return eras[i];
                    }
                    break;
            }
        } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
            return eras[i];
        }
    }
}

export function localeErasConvertYear(era, year) {
    var dir = era.since <= era.until ? +1 : -1;
    if (year === undefined) {
        return moment(era.since).year();
    } else {
        return moment(era.since).year() + (year - era.offset) * dir;
    }
}

export function getEraName() {
    var i,
        l,
        val,
        eras = this.localeData().eras();
    for (i = 0, l = eras.length; i < l; ++i) {
        // truncate time
        val = this.clone().startOf('day').valueOf();

        if (eras[i].since <= val && val <= eras[i].until) {
            return eras[i].name;
        }
        if (eras[i].until <= val && val <= eras[i].since) {
            return eras[i].name;
        }
    }

    return '';
}

export function getEraNarrow() {
    var i,
        l,
        val,
        eras = this.localeData().eras();
    for (i = 0, l = eras.length; i < l; ++i) {
        // truncate time
        val = this.clone().startOf('day').valueOf();

        if (eras[i].since <= val && val <= eras[i].until) {
            return eras[i].narrow;
        }
        if (eras[i].until <= val && val <= eras[i].since) {
            return eras[i].narrow;
        }
    }

    return '';
}

export function getEraAbbr() {
    var i,
        l,
        val,
        eras = this.localeData().eras();
    for (i = 0, l = eras.length; i < l; ++i) {
        // truncate time
        val = this.clone().startOf('day').valueOf();

        if (eras[i].since <= val && val <= eras[i].until) {
            return eras[i].abbr;
        }
        if (eras[i].until <= val && val <= eras[i].since) {
            return eras[i].abbr;
        }
    }

    return '';
}

export function getEraYear() {
    var i,
        l,
        dir,
        val,
        eras = this.localeData().eras();
    for (i = 0, l = eras.length; i < l; ++i) {
        dir = eras[i].since <= eras[i].until ? +1 : -1;

        // truncate time
        val = this.clone().startOf('day').valueOf();

        if (
            (eras[i].since <= val && val <= eras[i].until) ||
            (eras[i].until <= val && val <= eras[i].since)
        ) {
            return (
                (this.year() - moment(eras[i].since).year()) * dir +
                eras[i].offset
            );
        }
    }

    return this.year();
}

export function erasNameRegex(isStrict) {
    if (!hasOwnProp(this, '_erasNameRegex')) {
        computeErasParse.call(this);
    }
    return isStrict ? this._erasNameRegex : this._erasRegex;
}

export function erasAbbrRegex(isStrict) {
    if (!hasOwnProp(this, '_erasAbbrRegex')) {
        computeErasParse.call(this);
    }
    return isStrict ? this._erasAbbrRegex : this._erasRegex;
}

export function erasNarrowRegex(isStrict) {
    if (!hasOwnProp(this, '_erasNarrowRegex')) {
        computeErasParse.call(this);
    }
    return isStrict ? this._erasNarrowRegex : this._erasRegex;
}

function matchEraAbbr(isStrict, locale) {
    return locale.erasAbbrRegex(isStrict);
}

function matchEraName(isStrict, locale) {
    return locale.erasNameRegex(isStrict);
}

function matchEraNarrow(isStrict, locale) {
    return locale.erasNarrowRegex(isStrict);
}

function matchEraYearOrdinal(isStrict, locale) {
    return locale._eraYearOrdinalRegex || matchUnsigned;
}

function computeErasParse() {
    var abbrPieces = [],
        namePieces = [],
        narrowPieces = [],
        mixedPieces = [],
        i,
        l,
        eras = this.eras();

    for (i = 0, l = eras.length; i < l; ++i) {
        namePieces.push(regexEscape(eras[i].name));
        abbrPieces.push(regexEscape(eras[i].abbr));
        narrowPieces.push(regexEscape(eras[i].narrow));

        mixedPieces.push(regexEscape(eras[i].name));
        mixedPieces.push(regexEscape(eras[i].abbr));
        mixedPieces.push(regexEscape(eras[i].narrow));
    }

    this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
    this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
    this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
    this._erasNarrowRegex = new RegExp(
        '^(' + narrowPieces.join('|') + ')',
        'i'
    );
}
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import {
    addRegexToken,
    match1to2,
    match2,
    match3to4,
    match5to6,
} from '../parse/regex';
import { addParseToken } from '../parse/token';
import { HOUR, MINUTE, SECOND } from './constants';
import toInt from '../utils/to-int';
import zeroFill from '../utils/zero-fill';
import getParsingFlags from '../create/parsing-flags';

// FORMATTING

function hFormat() {
    return this.hours() % 12 || 12;
}

function kFormat() {
    return this.hours() || 24;
}

addFormatToken('H', ['HH', 2], 0, 'hour');
addFormatToken('h', ['hh', 2], 0, hFormat);
addFormatToken('k', ['kk', 2], 0, kFormat);

addFormatToken('hmm', 0, 0, function () {
    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
});

addFormatToken('hmmss', 0, 0, function () {
    return (
        '' +
        hFormat.apply(this) +
        zeroFill(this.minutes(), 2) +
        zeroFill(this.seconds(), 2)
    );
});

addFormatToken('Hmm', 0, 0, function () {
    return '' + this.hours() + zeroFill(this.minutes(), 2);
});

addFormatToken('Hmmss', 0, 0, function () {
    return (
        '' +
        this.hours() +
        zeroFill(this.minutes(), 2) +
        zeroFill(this.seconds(), 2)
    );
});

function meridiem(token, lowercase) {
    addFormatToken(token, 0, 0, function () {
        return this.localeData().meridiem(
            this.hours(),
            this.minutes(),
            lowercase
        );
    });
}

meridiem('a', true);
meridiem('A', false);

// ALIASES

addUnitAlias('hour', 'h');

// PRIORITY
addUnitPriority('hour', 13);

// PARSING

function matchMeridiem(isStrict, locale) {
    return locale._meridiemParse;
}

addRegexToken('a', matchMeridiem);
addRegexToken('A', matchMeridiem);
addRegexToken('H', match1to2);
addRegexToken('h', match1to2);
addRegexToken('k', match1to2);
addRegexToken('HH', match1to2, match2);
addRegexToken('hh', match1to2, match2);
addRegexToken('kk', match1to2, match2);

addRegexToken('hmm', match3to4);
addRegexToken('hmmss', match5to6);
addRegexToken('Hmm', match3to4);
addRegexToken('Hmmss', match5to6);

addParseToken(['H', 'HH'], HOUR);
addParseToken(['k', 'kk'], function (input, array, config) {
    var kInput = toInt(input);
    array[HOUR] = kInput === 24 ? 0 : kInput;
});
addParseToken(['a', 'A'], function (input, array, config) {
    config._isPm = config._locale.isPM(input);
    config._meridiem = input;
});
addParseToken(['h', 'hh'], function (input, array, config) {
    array[HOUR] = toInt(input);
    getParsingFlags(config).bigHour = true;
});
addParseToken('hmm', function (input, array, config) {
    var pos = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos));
    array[MINUTE] = toInt(input.substr(pos));
    getParsingFlags(config).bigHour = true;
});
addParseToken('hmmss', function (input, array, config) {
    var pos1 = input.length - 4,
        pos2 = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos1));
    array[MINUTE] = toInt(input.substr(pos1, 2));
    array[SECOND] = toInt(input.substr(pos2));
    getParsingFlags(config).bigHour = true;
});
addParseToken('Hmm', function (input, array, config) {
    var pos = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos));
    array[MINUTE] = toInt(input.substr(pos));
});
addParseToken('Hmmss', function (input, array, config) {
    var pos1 = input.length - 4,
        pos2 = input.length - 2;
    array[HOUR] = toInt(input.substr(0, pos1));
    array[MINUTE] = toInt(input.substr(pos1, 2));
    array[SECOND] = toInt(input.substr(pos2));
});

// LOCALES

export function localeIsPM(input) {
    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
    // Using charAt should be more compatible.
    return (input + '').toLowerCase().charAt(0) === 'p';
}

export var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
    // Setting the hour should keep the time, because the user explicitly
    // specified which hour they want. So trying to maintain the same hour (in
    // a new timezone) makes sense. Adding/subtracting hours does not follow
    // this rule.
    getSetHour = makeGetSet('Hours', true);

export function localeMeridiem(hours, minutes, isLower) {
    if (hours > 11) {
        return isLower ? 'pm' : 'PM';
    } else {
        return isLower ? 'am' : 'AM';
    }
}
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import {
    addRegexToken,
    match1,
    match2,
    match3,
    match1to3,
    matchUnsigned,
} from '../parse/regex';
import { addParseToken } from '../parse/token';
import { MILLISECOND } from './constants';
import toInt from '../utils/to-int';

// FORMATTING

addFormatToken('S', 0, 0, function () {
    return ~~(this.millisecond() / 100);
});

addFormatToken(0, ['SS', 2], 0, function () {
    return ~~(this.millisecond() / 10);
});

addFormatToken(0, ['SSS', 3], 0, 'millisecond');
addFormatToken(0, ['SSSS', 4], 0, function () {
    return this.millisecond() * 10;
});
addFormatToken(0, ['SSSSS', 5], 0, function () {
    return this.millisecond() * 100;
});
addFormatToken(0, ['SSSSSS', 6], 0, function () {
    return this.millisecond() * 1000;
});
addFormatToken(0, ['SSSSSSS', 7], 0, function () {
    return this.millisecond() * 10000;
});
addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
    return this.millisecond() * 100000;
});
addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
    return this.millisecond() * 1000000;
});

// ALIASES

addUnitAlias('millisecond', 'ms');

// PRIORITY

addUnitPriority('millisecond', 16);

// PARSING

addRegexToken('S', match1to3, match1);
addRegexToken('SS', match1to3, match2);
addRegexToken('SSS', match1to3, match3);

var token, getSetMillisecond;
for (token = 'SSSS'; token.length <= 9; token += 'S') {
    addRegexToken(token, matchUnsigned);
}

function parseMs(input, array) {
    array[MILLISECOND] = toInt(('0.' + input) * 1000);
}

for (token = 'S'; token.length <= 9; token += 'S') {
    addParseToken(token, parseMs);
}

getSetMillisecond = makeGetSet('Milliseconds', false);

export { getSetMillisecond };
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import { addRegexToken, match1to2, match2 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { MINUTE } from './constants';

// FORMATTING

addFormatToken('m', ['mm', 2], 0, 'minute');

// ALIASES

addUnitAlias('minute', 'm');

// PRIORITY

addUnitPriority('minute', 14);

// PARSING

addRegexToken('m', match1to2);
addRegexToken('mm', match1to2, match2);
addParseToken(['m', 'mm'], MINUTE);

// MOMENTS

export var getSetMinute = makeGetSet('Minutes', false);
import { get } from '../moment/get-set';
import hasOwnProp from '../utils/has-own-prop';
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import {
    addRegexToken,
    match1to2,
    match2,
    matchWord,
    regexEscape,
} from '../parse/regex';
import { addParseToken } from '../parse/token';
import { hooks } from '../utils/hooks';
import { MONTH } from './constants';
import toInt from '../utils/to-int';
import isArray from '../utils/is-array';
import isNumber from '../utils/is-number';
import mod from '../utils/mod';
import indexOf from '../utils/index-of';
import { createUTC } from '../create/utc';
import getParsingFlags from '../create/parsing-flags';
import { isLeapYear } from '../utils/is-leap-year';

export function daysInMonth(year, month) {
    if (isNaN(year) || isNaN(month)) {
        return NaN;
    }
    var modMonth = mod(month, 12);
    year += (month - modMonth) / 12;
    return modMonth === 1
        ? isLeapYear(year)
            ? 29
            : 28
        : 31 - ((modMonth % 7) % 2);
}

// FORMATTING

addFormatToken('M', ['MM', 2], 'Mo', function () {
    return this.month() + 1;
});

addFormatToken('MMM', 0, 0, function (format) {
    return this.localeData().monthsShort(this, format);
});

addFormatToken('MMMM', 0, 0, function (format) {
    return this.localeData().months(this, format);
});

// ALIASES

addUnitAlias('month', 'M');

// PRIORITY

addUnitPriority('month', 8);

// PARSING

addRegexToken('M', match1to2);
addRegexToken('MM', match1to2, match2);
addRegexToken('MMM', function (isStrict, locale) {
    return locale.monthsShortRegex(isStrict);
});
addRegexToken('MMMM', function (isStrict, locale) {
    return locale.monthsRegex(isStrict);
});

addParseToken(['M', 'MM'], function (input, array) {
    array[MONTH] = toInt(input) - 1;
});

addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
    var month = config._locale.monthsParse(input, token, config._strict);
    // if we didn't find a month name, mark the date as invalid.
    if (month != null) {
        array[MONTH] = month;
    } else {
        getParsingFlags(config).invalidMonth = input;
    }
});

// LOCALES

var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
        '_'
    ),
    MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
    defaultMonthsShortRegex = matchWord,
    defaultMonthsRegex = matchWord;

export { defaultLocaleMonths, defaultLocaleMonthsShort };

export function localeMonths(m, format) {
    if (!m) {
        return isArray(this._months)
            ? this._months
            : this._months['standalone'];
    }
    return isArray(this._months)
        ? this._months[m.month()]
        : this._months[
              (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
                  ? 'format'
                  : 'standalone'
          ][m.month()];
}

export function localeMonthsShort(m, format) {
    if (!m) {
        return isArray(this._monthsShort)
            ? this._monthsShort
            : this._monthsShort['standalone'];
    }
    return isArray(this._monthsShort)
        ? this._monthsShort[m.month()]
        : this._monthsShort[
              MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
          ][m.month()];
}

function handleStrictParse(monthName, format, strict) {
    var i,
        ii,
        mom,
        llc = monthName.toLocaleLowerCase();
    if (!this._monthsParse) {
        // this is not used
        this._monthsParse = [];
        this._longMonthsParse = [];
        this._shortMonthsParse = [];
        for (i = 0; i < 12; ++i) {
            mom = createUTC([2000, i]);
            this._shortMonthsParse[i] = this.monthsShort(
                mom,
                ''
            ).toLocaleLowerCase();
            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
        }
    }

    if (strict) {
        if (format === 'MMM') {
            ii = indexOf.call(this._shortMonthsParse, llc);
            return ii !== -1 ? ii : null;
        } else {
            ii = indexOf.call(this._longMonthsParse, llc);
            return ii !== -1 ? ii : null;
        }
    } else {
        if (format === 'MMM') {
            ii = indexOf.call(this._shortMonthsParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._longMonthsParse, llc);
            return ii !== -1 ? ii : null;
        } else {
            ii = indexOf.call(this._longMonthsParse, llc);
            if (ii !== -1) {
                return ii;
            }
            ii = indexOf.call(this._shortMonthsParse, llc);
            return ii !== -1 ? ii : null;
        }
    }
}

export function localeMonthsParse(monthName, format, strict) {
    var i, mom, regex;

    if (this._monthsParseExact) {
        return handleStrictParse.call(this, monthName, format, strict);
    }

    if (!this._monthsParse) {
        this._monthsParse = [];
        this._longMonthsParse = [];
        this._shortMonthsParse = [];
    }

    // TODO: add sorting
    // Sorting makes sure if one month (or abbr) is a prefix of another
    // see sorting in computeMonthsParse
    for (i = 0; i < 12; i++) {
        // make the regex if we don't have it already
        mom = createUTC([2000, i]);
        if (strict && !this._longMonthsParse[i]) {
            this._longMonthsParse[i] = new RegExp(
                '^' + this.months(mom, '').replace('.', '') + '$',
                'i'
            );
            this._shortMonthsParse[i] = new RegExp(
                '^' + this.monthsShort(mom, '').replace('.', '') + '$',
                'i'
            );
        }
        if (!strict && !this._monthsParse[i]) {
            regex =
                '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
        }
        // test the regex
        if (
            strict &&
            format === 'MMMM' &&
            this._longMonthsParse[i].test(monthName)
        ) {
            return i;
        } else if (
            strict &&
            format === 'MMM' &&
            this._shortMonthsParse[i].test(monthName)
        ) {
            return i;
        } else if (!strict && this._monthsParse[i].test(monthName)) {
            return i;
        }
    }
}

// MOMENTS

export function setMonth(mom, value) {
    var dayOfMonth;

    if (!mom.isValid()) {
        // No op
        return mom;
    }

    if (typeof value === 'string') {
        if (/^\d+$/.test(value)) {
            value = toInt(value);
        } else {
            value = mom.localeData().monthsParse(value);
            // TODO: Another silent failure?
            if (!isNumber(value)) {
                return mom;
            }
        }
    }

    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
    return mom;
}

export function getSetMonth(value) {
    if (value != null) {
        setMonth(this, value);
        hooks.updateOffset(this, true);
        return this;
    } else {
        return get(this, 'Month');
    }
}

export function getDaysInMonth() {
    return daysInMonth(this.year(), this.month());
}

export function monthsShortRegex(isStrict) {
    if (this._monthsParseExact) {
        if (!hasOwnProp(this, '_monthsRegex')) {
            computeMonthsParse.call(this);
        }
        if (isStrict) {
            return this._monthsShortStrictRegex;
        } else {
            return this._monthsShortRegex;
        }
    } else {
        if (!hasOwnProp(this, '_monthsShortRegex')) {
            this._monthsShortRegex = defaultMonthsShortRegex;
        }
        return this._monthsShortStrictRegex && isStrict
            ? this._monthsShortStrictRegex
            : this._monthsShortRegex;
    }
}

export function monthsRegex(isStrict) {
    if (this._monthsParseExact) {
        if (!hasOwnProp(this, '_monthsRegex')) {
            computeMonthsParse.call(this);
        }
        if (isStrict) {
            return this._monthsStrictRegex;
        } else {
            return this._monthsRegex;
        }
    } else {
        if (!hasOwnProp(this, '_monthsRegex')) {
            this._monthsRegex = defaultMonthsRegex;
        }
        return this._monthsStrictRegex && isStrict
            ? this._monthsStrictRegex
            : this._monthsRegex;
    }
}

function computeMonthsParse() {
    function cmpLenRev(a, b) {
        return b.length - a.length;
    }

    var shortPieces = [],
        longPieces = [],
        mixedPieces = [],
        i,
        mom;
    for (i = 0; i < 12; i++) {
        // make the regex if we don't have it already
        mom = createUTC([2000, i]);
        shortPieces.push(this.monthsShort(mom, ''));
        longPieces.push(this.months(mom, ''));
        mixedPieces.push(this.months(mom, ''));
        mixedPieces.push(this.monthsShort(mom, ''));
    }
    // Sorting makes sure if one month (or abbr) is a prefix of another it
    // will match the longer piece.
    shortPieces.sort(cmpLenRev);
    longPieces.sort(cmpLenRev);
    mixedPieces.sort(cmpLenRev);
    for (i = 0; i < 12; i++) {
        shortPieces[i] = regexEscape(shortPieces[i]);
        longPieces[i] = regexEscape(longPieces[i]);
    }
    for (i = 0; i < 24; i++) {
        mixedPieces[i] = regexEscape(mixedPieces[i]);
    }

    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
    this._monthsShortRegex = this._monthsRegex;
    this._monthsStrictRegex = new RegExp(
        '^(' + longPieces.join('|') + ')',
        'i'
    );
    this._monthsShortStrictRegex = new RegExp(
        '^(' + shortPieces.join('|') + ')',
        'i'
    );
}
import zeroFill from '../utils/zero-fill';
import { createDuration } from '../duration/create';
import { addSubtract } from '../moment/add-subtract';
import { isMoment, copyConfig } from '../moment/constructor';
import { addFormatToken } from '../format/format';
import { addRegexToken, matchOffset, matchShortOffset } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { createLocal } from '../create/local';
import { prepareConfig } from '../create/from-anything';
import { createUTC } from '../create/utc';
import isDate from '../utils/is-date';
import toInt from '../utils/to-int';
import isUndefined from '../utils/is-undefined';
import compareArrays from '../utils/compare-arrays';
import { hooks } from '../utils/hooks';

// FORMATTING

function offset(token, separator) {
    addFormatToken(token, 0, 0, function () {
        var offset = this.utcOffset(),
            sign = '+';
        if (offset < 0) {
            offset = -offset;
            sign = '-';
        }
        return (
            sign +
            zeroFill(~~(offset / 60), 2) +
            separator +
            zeroFill(~~offset % 60, 2)
        );
    });
}

offset('Z', ':');
offset('ZZ', '');

// PARSING

addRegexToken('Z', matchShortOffset);
addRegexToken('ZZ', matchShortOffset);
addParseToken(['Z', 'ZZ'], function (input, array, config) {
    config._useUTC = true;
    config._tzm = offsetFromString(matchShortOffset, input);
});

// HELPERS

// timezone chunker
// '+10:00' > ['10',  '00']
// '-1530'  > ['-15', '30']
var chunkOffset = /([\+\-]|\d\d)/gi;

function offsetFromString(matcher, string) {
    var matches = (string || '').match(matcher),
        chunk,
        parts,
        minutes;

    if (matches === null) {
        return null;
    }

    chunk = matches[matches.length - 1] || [];
    parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
    minutes = +(parts[1] * 60) + toInt(parts[2]);

    return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
}

// Return a moment from input, that is local/utc/zone equivalent to model.
export function cloneWithOffset(input, model) {
    var res, diff;
    if (model._isUTC) {
        res = model.clone();
        diff =
            (isMoment(input) || isDate(input)
                ? input.valueOf()
                : createLocal(input).valueOf()) - res.valueOf();
        // Use low-level api, because this fn is low-level api.
        res._d.setTime(res._d.valueOf() + diff);
        hooks.updateOffset(res, false);
        return res;
    } else {
        return createLocal(input).local();
    }
}

function getDateOffset(m) {
    // On Firefox.24 Date#getTimezoneOffset returns a floating point.
    // https://github.com/moment/moment/pull/1871
    return -Math.round(m._d.getTimezoneOffset());
}

// HOOKS

// This function will be called whenever a moment is mutated.
// It is intended to keep the offset in sync with the timezone.
hooks.updateOffset = function () {};

// MOMENTS

// keepLocalTime = true means only change the timezone, without
// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
// +0200, so we adjust the time as needed, to be valid.
//
// Keeping the time actually adds/subtracts (one hour)
// from the actual represented time. That is why we call updateOffset
// a second time. In case it wants us to change the offset again
// _changeInProgress == true case, then we have to adjust, because
// there is no such time in the given timezone.
export function getSetOffset(input, keepLocalTime, keepMinutes) {
    var offset = this._offset || 0,
        localAdjust;
    if (!this.isValid()) {
        return input != null ? this : NaN;
    }
    if (input != null) {
        if (typeof input === 'string') {
            input = offsetFromString(matchShortOffset, input);
            if (input === null) {
                return this;
            }
        } else if (Math.abs(input) < 16 && !keepMinutes) {
            input = input * 60;
        }
        if (!this._isUTC && keepLocalTime) {
            localAdjust = getDateOffset(this);
        }
        this._offset = input;
        this._isUTC = true;
        if (localAdjust != null) {
            this.add(localAdjust, 'm');
        }
        if (offset !== input) {
            if (!keepLocalTime || this._changeInProgress) {
                addSubtract(
                    this,
                    createDuration(input - offset, 'm'),
                    1,
                    false
                );
            } else if (!this._changeInProgress) {
                this._changeInProgress = true;
                hooks.updateOffset(this, true);
                this._changeInProgress = null;
            }
        }
        return this;
    } else {
        return this._isUTC ? offset : getDateOffset(this);
    }
}

export function getSetZone(input, keepLocalTime) {
    if (input != null) {
        if (typeof input !== 'string') {
            input = -input;
        }

        this.utcOffset(input, keepLocalTime);

        return this;
    } else {
        return -this.utcOffset();
    }
}

export function setOffsetToUTC(keepLocalTime) {
    return this.utcOffset(0, keepLocalTime);
}

export function setOffsetToLocal(keepLocalTime) {
    if (this._isUTC) {
        this.utcOffset(0, keepLocalTime);
        this._isUTC = false;

        if (keepLocalTime) {
            this.subtract(getDateOffset(this), 'm');
        }
    }
    return this;
}

export function setOffsetToParsedOffset() {
    if (this._tzm != null) {
        this.utcOffset(this._tzm, false, true);
    } else if (typeof this._i === 'string') {
        var tZone = offsetFromString(matchOffset, this._i);
        if (tZone != null) {
            this.utcOffset(tZone);
        } else {
            this.utcOffset(0, true);
        }
    }
    return this;
}

export function hasAlignedHourOffset(input) {
    if (!this.isValid()) {
        return false;
    }
    input = input ? createLocal(input).utcOffset() : 0;

    return (this.utcOffset() - input) % 60 === 0;
}

export function isDaylightSavingTime() {
    return (
        this.utcOffset() > this.clone().month(0).utcOffset() ||
        this.utcOffset() > this.clone().month(5).utcOffset()
    );
}

export function isDaylightSavingTimeShifted() {
    if (!isUndefined(this._isDSTShifted)) {
        return this._isDSTShifted;
    }

    var c = {},
        other;

    copyConfig(c, this);
    c = prepareConfig(c);

    if (c._a) {
        other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
        this._isDSTShifted =
            this.isValid() && compareArrays(c._a, other.toArray()) > 0;
    } else {
        this._isDSTShifted = false;
    }

    return this._isDSTShifted;
}

export function isLocal() {
    return this.isValid() ? !this._isUTC : false;
}

export function isUtcOffset() {
    return this.isValid() ? this._isUTC : false;
}

export function isUtc() {
    return this.isValid() ? this._isUTC && this._offset === 0 : false;
}
import hasOwnProp from '../utils/has-own-prop';

var priorities = {};

export function addUnitPriority(unit, priority) {
    priorities[unit] = priority;
}

export function getPrioritizedUnits(unitsObj) {
    var units = [],
        u;
    for (u in unitsObj) {
        if (hasOwnProp(unitsObj, u)) {
            units.push({ unit: u, priority: priorities[u] });
        }
    }
    units.sort(function (a, b) {
        return a.priority - b.priority;
    });
    return units;
}
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import { addRegexToken, match1 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { MONTH } from './constants';
import toInt from '../utils/to-int';

// FORMATTING

addFormatToken('Q', 0, 'Qo', 'quarter');

// ALIASES

addUnitAlias('quarter', 'Q');

// PRIORITY

addUnitPriority('quarter', 7);

// PARSING

addRegexToken('Q', match1);
addParseToken('Q', function (input, array) {
    array[MONTH] = (toInt(input) - 1) * 3;
});

// MOMENTS

export function getSetQuarter(input) {
    return input == null
        ? Math.ceil((this.month() + 1) / 3)
        : this.month((input - 1) * 3 + (this.month() % 3));
}
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import { addRegexToken, match1to2, match2 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { SECOND } from './constants';

// FORMATTING

addFormatToken('s', ['ss', 2], 0, 'second');

// ALIASES

addUnitAlias('second', 's');

// PRIORITY

addUnitPriority('second', 15);

// PARSING

addRegexToken('s', match1to2);
addRegexToken('ss', match1to2, match2);
addParseToken(['s', 'ss'], SECOND);

// MOMENTS

export var getSetSecond = makeGetSet('Seconds', false);
import { addFormatToken } from '../format/format';
import { addRegexToken, matchTimestamp, matchSigned } from '../parse/regex';
import { addParseToken } from '../parse/token';
import toInt from '../utils/to-int';

// FORMATTING

addFormatToken('X', 0, 0, 'unix');
addFormatToken('x', 0, 0, 'valueOf');

// PARSING

addRegexToken('x', matchSigned);
addRegexToken('X', matchTimestamp);
addParseToken('X', function (input, array, config) {
    config._d = new Date(parseFloat(input) * 1000);
});
addParseToken('x', function (input, array, config) {
    config._d = new Date(toInt(input));
});
import { addFormatToken } from '../format/format';

// FORMATTING

addFormatToken('z', 0, 0, 'zoneAbbr');
addFormatToken('zz', 0, 0, 'zoneName');

// MOMENTS

export function getZoneAbbr() {
    return this._isUTC ? 'UTC' : '';
}

export function getZoneName() {
    return this._isUTC ? 'Coordinated Universal Time' : '';
}
// Side effect imports
import './day-of-month';
import './day-of-week';
import './day-of-year';
import './hour';
import './millisecond';
import './minute';
import './month';
import './offset';
import './quarter';
import './second';
import './timestamp';
import './timezone';
import './week-year';
import './week';
import './year';

import { normalizeUnits } from './aliases';

export { normalizeUnits };
import { daysInYear } from './year';
import { createUTCDate } from '../create/date-from-array';

// start-of-first-week - start-of-year
function firstWeekOffset(year, dow, doy) {
    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
        fwd = 7 + dow - doy,
        // first-week day local weekday -- which local weekday is fwd
        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;

    return -fwdlw + fwd - 1;
}

// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
export function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
    var localWeekday = (7 + weekday - dow) % 7,
        weekOffset = firstWeekOffset(year, dow, doy),
        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
        resYear,
        resDayOfYear;

    if (dayOfYear <= 0) {
        resYear = year - 1;
        resDayOfYear = daysInYear(resYear) + dayOfYear;
    } else if (dayOfYear > daysInYear(year)) {
        resYear = year + 1;
        resDayOfYear = dayOfYear - daysInYear(year);
    } else {
        resYear = year;
        resDayOfYear = dayOfYear;
    }

    return {
        year: resYear,
        dayOfYear: resDayOfYear,
    };
}

export function weekOfYear(mom, dow, doy) {
    var weekOffset = firstWeekOffset(mom.year(), dow, doy),
        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
        resWeek,
        resYear;

    if (week < 1) {
        resYear = mom.year() - 1;
        resWeek = week + weeksInYear(resYear, dow, doy);
    } else if (week > weeksInYear(mom.year(), dow, doy)) {
        resWeek = week - weeksInYear(mom.year(), dow, doy);
        resYear = mom.year() + 1;
    } else {
        resYear = mom.year();
        resWeek = week;
    }

    return {
        week: resWeek,
        year: resYear,
    };
}

export function weeksInYear(year, dow, doy) {
    var weekOffset = firstWeekOffset(year, dow, doy),
        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
}
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import {
    addRegexToken,
    match1to2,
    match1to4,
    match1to6,
    match2,
    match4,
    match6,
    matchSigned,
} from '../parse/regex';
import { addWeekParseToken } from '../parse/token';
import {
    weekOfYear,
    weeksInYear,
    dayOfYearFromWeeks,
} from './week-calendar-utils';
import toInt from '../utils/to-int';
import { hooks } from '../utils/hooks';
import { createUTCDate } from '../create/date-from-array';

// FORMATTING

addFormatToken(0, ['gg', 2], 0, function () {
    return this.weekYear() % 100;
});

addFormatToken(0, ['GG', 2], 0, function () {
    return this.isoWeekYear() % 100;
});

function addWeekYearFormatToken(token, getter) {
    addFormatToken(0, [token, token.length], 0, getter);
}

addWeekYearFormatToken('gggg', 'weekYear');
addWeekYearFormatToken('ggggg', 'weekYear');
addWeekYearFormatToken('GGGG', 'isoWeekYear');
addWeekYearFormatToken('GGGGG', 'isoWeekYear');

// ALIASES

addUnitAlias('weekYear', 'gg');
addUnitAlias('isoWeekYear', 'GG');

// PRIORITY

addUnitPriority('weekYear', 1);
addUnitPriority('isoWeekYear', 1);

// PARSING

addRegexToken('G', matchSigned);
addRegexToken('g', matchSigned);
addRegexToken('GG', match1to2, match2);
addRegexToken('gg', match1to2, match2);
addRegexToken('GGGG', match1to4, match4);
addRegexToken('gggg', match1to4, match4);
addRegexToken('GGGGG', match1to6, match6);
addRegexToken('ggggg', match1to6, match6);

addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
    input,
    week,
    config,
    token
) {
    week[token.substr(0, 2)] = toInt(input);
});

addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
    week[token] = hooks.parseTwoDigitYear(input);
});

// MOMENTS

export function getSetWeekYear(input) {
    return getSetWeekYearHelper.call(
        this,
        input,
        this.week(),
        this.weekday(),
        this.localeData()._week.dow,
        this.localeData()._week.doy
    );
}

export function getSetISOWeekYear(input) {
    return getSetWeekYearHelper.call(
        this,
        input,
        this.isoWeek(),
        this.isoWeekday(),
        1,
        4
    );
}

export function getISOWeeksInYear() {
    return weeksInYear(this.year(), 1, 4);
}

export function getISOWeeksInISOWeekYear() {
    return weeksInYear(this.isoWeekYear(), 1, 4);
}

export function getWeeksInYear() {
    var weekInfo = this.localeData()._week;
    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
}

export function getWeeksInWeekYear() {
    var weekInfo = this.localeData()._week;
    return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
}

function getSetWeekYearHelper(input, week, weekday, dow, doy) {
    var weeksTarget;
    if (input == null) {
        return weekOfYear(this, dow, doy).year;
    } else {
        weeksTarget = weeksInYear(input, dow, doy);
        if (week > weeksTarget) {
            week = weeksTarget;
        }
        return setWeekAll.call(this, input, week, weekday, dow, doy);
    }
}

function setWeekAll(weekYear, week, weekday, dow, doy) {
    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);

    this.year(date.getUTCFullYear());
    this.month(date.getUTCMonth());
    this.date(date.getUTCDate());
    return this;
}
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import { addRegexToken, match1to2, match2 } from '../parse/regex';
import { addWeekParseToken } from '../parse/token';
import toInt from '../utils/to-int';
import { weekOfYear } from './week-calendar-utils';

// FORMATTING

addFormatToken('w', ['ww', 2], 'wo', 'week');
addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');

// ALIASES

addUnitAlias('week', 'w');
addUnitAlias('isoWeek', 'W');

// PRIORITIES

addUnitPriority('week', 5);
addUnitPriority('isoWeek', 5);

// PARSING

addRegexToken('w', match1to2);
addRegexToken('ww', match1to2, match2);
addRegexToken('W', match1to2);
addRegexToken('WW', match1to2, match2);

addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
    input,
    week,
    config,
    token
) {
    week[token.substr(0, 1)] = toInt(input);
});

// HELPERS

// LOCALES

export function localeWeek(mom) {
    return weekOfYear(mom, this._week.dow, this._week.doy).week;
}

export var defaultLocaleWeek = {
    dow: 0, // Sunday is the first day of the week.
    doy: 6, // The week that contains Jan 6th is the first week of the year.
};

export function localeFirstDayOfWeek() {
    return this._week.dow;
}

export function localeFirstDayOfYear() {
    return this._week.doy;
}

// MOMENTS

export function getSetWeek(input) {
    var week = this.localeData().week(this);
    return input == null ? week : this.add((input - week) * 7, 'd');
}

export function getSetISOWeek(input) {
    var week = weekOfYear(this, 1, 4).week;
    return input == null ? week : this.add((input - week) * 7, 'd');
}
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
import { addUnitAlias } from './aliases';
import { addUnitPriority } from './priorities';
import {
    addRegexToken,
    match1to2,
    match1to4,
    match1to6,
    match2,
    match4,
    match6,
    matchSigned,
} from '../parse/regex';
import { addParseToken } from '../parse/token';
import { isLeapYear } from '../utils/is-leap-year';
import { hooks } from '../utils/hooks';
import { YEAR } from './constants';
import toInt from '../utils/to-int';
import zeroFill from '../utils/zero-fill';

// FORMATTING

addFormatToken('Y', 0, 0, function () {
    var y = this.year();
    return y <= 9999 ? zeroFill(y, 4) : '+' + y;
});

addFormatToken(0, ['YY', 2], 0, function () {
    return this.year() % 100;
});

addFormatToken(0, ['YYYY', 4], 0, 'year');
addFormatToken(0, ['YYYYY', 5], 0, 'year');
addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');

// ALIASES

addUnitAlias('year', 'y');

// PRIORITIES

addUnitPriority('year', 1);

// PARSING

addRegexToken('Y', matchSigned);
addRegexToken('YY', match1to2, match2);
addRegexToken('YYYY', match1to4, match4);
addRegexToken('YYYYY', match1to6, match6);
addRegexToken('YYYYYY', match1to6, match6);

addParseToken(['YYYYY', 'YYYYYY'], YEAR);
addParseToken('YYYY', function (input, array) {
    array[YEAR] =
        input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
});
addParseToken('YY', function (input, array) {
    array[YEAR] = hooks.parseTwoDigitYear(input);
});
addParseToken('Y', function (input, array) {
    array[YEAR] = parseInt(input, 10);
});

// HELPERS

export function daysInYear(year) {
    return isLeapYear(year) ? 366 : 365;
}

export { isLeapYear };

// HOOKS

hooks.parseTwoDigitYear = function (input) {
    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
};

// MOMENTS

export var getSetYear = makeGetSet('FullYear', true);

export function getIsLeapYear() {
    return isLeapYear(this.year());
}
export default function absCeil(number) {
    if (number < 0) {
        return Math.floor(number);
    } else {
        return Math.ceil(number);
    }
}
export default function absFloor(number) {
    if (number < 0) {
        // -0 -> 0
        return Math.ceil(number) || 0;
    } else {
        return Math.floor(number);
    }
}
export default function absRound(number) {
    if (number < 0) {
        return Math.round(-1 * number) * -1;
    } else {
        return Math.round(number);
    }
}
import toInt from './to-int';

// compare two arrays, return the number of differences
export default function compareArrays(array1, array2, dontConvert) {
    var len = Math.min(array1.length, array2.length),
        lengthDiff = Math.abs(array1.length - array2.length),
        diffs = 0,
        i;
    for (i = 0; i < len; i++) {
        if (
            (dontConvert && array1[i] !== array2[i]) ||
            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
        ) {
            diffs++;
        }
    }
    return diffs + lengthDiff;
}
// Pick the first defined of two or three arguments.
export default function defaults(a, b, c) {
    if (a != null) {
        return a;
    }
    if (b != null) {
        return b;
    }
    return c;
}
import extend from './extend';
import { hooks } from './hooks';
import hasOwnProp from './has-own-prop';

function warn(msg) {
    if (
        hooks.suppressDeprecationWarnings === false &&
        typeof console !== 'undefined' &&
        console.warn
    ) {
        console.warn('Deprecation warning: ' + msg);
    }
}

export function deprecate(msg, fn) {
    var firstTime = true;

    return extend(function () {
        if (hooks.deprecationHandler != null) {
            hooks.deprecationHandler(null, msg);
        }
        if (firstTime) {
            var args = [],
                arg,
                i,
                key;
            for (i = 0; i < arguments.length; i++) {
                arg = '';
                if (typeof arguments[i] === 'object') {
                    arg += '\n[' + i + '] ';
                    for (key in arguments[0]) {
                        if (hasOwnProp(arguments[0], key)) {
                            arg += key + ': ' + arguments[0][key] + ', ';
                        }
                    }
                    arg = arg.slice(0, -2); // Remove trailing comma and space
                } else {
                    arg = arguments[i];
                }
                args.push(arg);
            }
            warn(
                msg +
                    '\nArguments: ' +
                    Array.prototype.slice.call(args).join('') +
                    '\n' +
                    new Error().stack
            );
            firstTime = false;
        }
        return fn.apply(this, arguments);
    }, fn);
}

var deprecations = {};

export function deprecateSimple(name, msg) {
    if (hooks.deprecationHandler != null) {
        hooks.deprecationHandler(name, msg);
    }
    if (!deprecations[name]) {
        warn(msg);
        deprecations[name] = true;
    }
}

hooks.suppressDeprecationWarnings = false;
hooks.deprecationHandler = null;
import hasOwnProp from './has-own-prop';

export default function extend(a, b) {
    for (var i in b) {
        if (hasOwnProp(b, i)) {
            a[i] = b[i];
        }
    }

    if (hasOwnProp(b, 'toString')) {
        a.toString = b.toString;
    }

    if (hasOwnProp(b, 'valueOf')) {
        a.valueOf = b.valueOf;
    }

    return a;
}
export default function hasOwnProp(a, b) {
    return Object.prototype.hasOwnProperty.call(a, b);
}
export { hooks, setHookCallback };

var hookCallback;

function hooks() {
    return hookCallback.apply(null, arguments);
}

// This is done to register the method called with moment()
// without creating circular dependencies.
function setHookCallback(callback) {
    hookCallback = callback;
}
var indexOf;

if (Array.prototype.indexOf) {
    indexOf = Array.prototype.indexOf;
} else {
    indexOf = function (o) {
        // I know
        var i;
        for (i = 0; i < this.length; ++i) {
            if (this[i] === o) {
                return i;
            }
        }
        return -1;
    };
}

export { indexOf as default };
export default function isArray(input) {
    return (
        input instanceof Array ||
        Object.prototype.toString.call(input) === '[object Array]'
    );
}
import isObjectEmpty from './is-object-empty';
import hasOwnProp from './has-own-prop';
import isObject from './is-object';

export default function isCalendarSpec(input) {
    var objectTest = isObject(input) && !isObjectEmpty(input),
        propertyTest = false,
        properties = [
            'sameDay',
            'nextDay',
            'lastDay',
            'nextWeek',
            'lastWeek',
            'sameElse',
        ],
        i,
        property;

    for (i = 0; i < properties.length; i += 1) {
        property = properties[i];
        propertyTest = propertyTest || hasOwnProp(input, property);
    }

    return objectTest && propertyTest;
}
export default function isDate(input) {
    return (
        input instanceof Date ||
        Object.prototype.toString.call(input) === '[object Date]'
    );
}
export default function isFunction(input) {
    return (
        (typeof Function !== 'undefined' && input instanceof Function) ||
        Object.prototype.toString.call(input) === '[object Function]'
    );
}
export function isLeapYear(year) {
    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
}
import isObjectEmpty from './is-object-empty';
import hasOwnProp from './has-own-prop';
import isObject from './is-object';
import isDate from './is-date';
import isNumber from './is-number';
import isString from './is-string';
import { isMoment } from '../moment/constructor';
import isArray from './is-array';

// type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
export function isMomentInput(input) {
    return (
        isMoment(input) ||
        isDate(input) ||
        isString(input) ||
        isNumber(input) ||
        isNumberOrStringArray(input) ||
        isMomentInputObject(input) ||
        input === null ||
        input === undefined
    );
}

export function isMomentInputObject(input) {
    var objectTest = isObject(input) && !isObjectEmpty(input),
        propertyTest = false,
        properties = [
            'years',
            'year',
            'y',
            'months',
            'month',
            'M',
            'days',
            'day',
            'd',
            'dates',
            'date',
            'D',
            'hours',
            'hour',
            'h',
            'minutes',
            'minute',
            'm',
            'seconds',
            'second',
            's',
            'milliseconds',
            'millisecond',
            'ms',
        ],
        i,
        property;

    for (i = 0; i < properties.length; i += 1) {
        property = properties[i];
        propertyTest = propertyTest || hasOwnProp(input, property);
    }

    return objectTest && propertyTest;
}

function isNumberOrStringArray(input) {
    var arrayTest = isArray(input),
        dataTypeTest = false;
    if (arrayTest) {
        dataTypeTest =
            input.filter(function (item) {
                return !isNumber(item) && isString(input);
            }).length === 0;
    }
    return arrayTest && dataTypeTest;
}
export default function isNumber(input) {
    return (
        typeof input === 'number' ||
        Object.prototype.toString.call(input) === '[object Number]'
    );
}
import hasOwnProp from './has-own-prop';

export default function isObjectEmpty(obj) {
    if (Object.getOwnPropertyNames) {
        return Object.getOwnPropertyNames(obj).length === 0;
    } else {
        var k;
        for (k in obj) {
            if (hasOwnProp(obj, k)) {
                return false;
            }
        }
        return true;
    }
}
export default function isObject(input) {
    // IE8 will treat undefined and null as object if it wasn't for
    // input != null
    return (
        input != null &&
        Object.prototype.toString.call(input) === '[object Object]'
    );
}
export default function isString(input) {
    return typeof input === 'string' || input instanceof String;
}
export default function isUndefined(input) {
    return input === void 0;
}
import hasOwnProp from './has-own-prop';

var keys;

if (Object.keys) {
    keys = Object.keys;
} else {
    keys = function (obj) {
        var i,
            res = [];
        for (i in obj) {
            if (hasOwnProp(obj, i)) {
                res.push(i);
            }
        }
        return res;
    };
}

export { keys as default };
export default function map(arr, fn) {
    var res = [],
        i;
    for (i = 0; i < arr.length; ++i) {
        res.push(fn(arr[i], i));
    }
    return res;
}
export default function mod(n, x) {
    return ((n % x) + x) % x;
}
var some;
if (Array.prototype.some) {
    some = Array.prototype.some;
} else {
    some = function (fun) {
        var t = Object(this),
            len = t.length >>> 0,
            i;

        for (i = 0; i < len; i++) {
            if (i in t && fun.call(this, t[i], i, t)) {
                return true;
            }
        }

        return false;
    };
}

export { some as default };
import absFloor from './abs-floor';

export default function toInt(argumentForCoercion) {
    var coercedNumber = +argumentForCoercion,
        value = 0;

    if (coercedNumber !== 0 && isFinite(coercedNumber)) {
        value = absFloor(coercedNumber);
    }

    return value;
}
export default function zeroFill(number, targetLength, forceSign) {
    var absNumber = '' + Math.abs(number),
        zerosToFill = targetLength - absNumber.length,
        sign = number >= 0;
    return (
        (sign ? (forceSign ? '+' : '') : '-') +
        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
        absNumber
    );
}
//! moment.js locale configuration
//! locale : Afrikaans [af]
//! author : Werner Mollentze : https://github.com/wernerm

import moment from '../moment';

export default moment.defineLocale('af', {
    months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
    weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
        '_'
    ),
    weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
    weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
    meridiemParse: /vm|nm/i,
    isPM: function (input) {
        return /^nm$/i.test(input);
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 12) {
            return isLower ? 'vm' : 'VM';
        } else {
            return isLower ? 'nm' : 'NM';
        }
    },
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Vandag om] LT',
        nextDay: '[MÃ´re om] LT',
        nextWeek: 'dddd [om] LT',
        lastDay: '[Gister om] LT',
        lastWeek: '[Laas] dddd [om] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'oor %s',
        past: '%s gelede',
        s: "'n paar sekondes",
        ss: '%d sekondes',
        m: "'n minuut",
        mm: '%d minute',
        h: "'n uur",
        hh: '%d ure',
        d: "'n dag",
        dd: '%d dae',
        M: "'n maand",
        MM: '%d maande',
        y: "'n jaar",
        yy: '%d jaar',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function (number) {
        return (
            number +
            (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
        ); // Thanks to Joris RÃ¶ling : https://github.com/jjupiter
    },
    week: {
        dow: 1, // Maandag is die eerste dag van die week.
        doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Algeria) [ar-dz]
//! author : Amine Roukh: https://github.com/Amine27
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi
//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem

import moment from '../moment';

var pluralForm = function (n) {
        return n === 0
            ? 0
            : n === 1
            ? 1
            : n === 2
            ? 2
            : n % 100 >= 3 && n % 100 <= 10
            ? 3
            : n % 100 >= 11
            ? 4
            : 5;
    },
    plurals = {
        s: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
            'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
            '%d Ø«ÙˆØ§Ù†',
            '%d Ø«Ø§Ù†ÙŠØ©',
            '%d Ø«Ø§Ù†ÙŠØ©',
        ],
        m: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
            'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
            '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
        ],
        h: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
            'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
            '%d Ø³Ø§Ø¹Ø§Øª',
            '%d Ø³Ø§Ø¹Ø©',
            '%d Ø³Ø§Ø¹Ø©',
        ],
        d: [
            'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
            'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
            ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
            '%d Ø£ÙŠØ§Ù…',
            '%d ÙŠÙˆÙ…Ù‹Ø§',
            '%d ÙŠÙˆÙ…',
        ],
        M: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
            'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
            ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
            '%d Ø£Ø´Ù‡Ø±',
            '%d Ø´Ù‡Ø±Ø§',
            '%d Ø´Ù‡Ø±',
        ],
        y: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
            'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
            ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
            '%d Ø£Ø¹ÙˆØ§Ù…',
            '%d Ø¹Ø§Ù…Ù‹Ø§',
            '%d Ø¹Ø§Ù…',
        ],
    },
    pluralize = function (u) {
        return function (number, withoutSuffix, string, isFuture) {
            var f = pluralForm(number),
                str = plurals[u][pluralForm(number)];
            if (f === 2) {
                str = str[withoutSuffix ? 0 : 1];
            }
            return str.replace(/%d/i, number);
        };
    },
    months = [
        'Ø¬Ø§Ù†ÙÙŠ',
        'ÙÙŠÙØ±ÙŠ',
        'Ù…Ø§Ø±Ø³',
        'Ø£ÙØ±ÙŠÙ„',
        'Ù…Ø§ÙŠ',
        'Ø¬ÙˆØ§Ù†',
        'Ø¬ÙˆÙŠÙ„ÙŠØ©',
        'Ø£ÙˆØª',
        'Ø³Ø¨ØªÙ…Ø¨Ø±',
        'Ø£ÙƒØªÙˆØ¨Ø±',
        'Ù†ÙˆÙÙ…Ø¨Ø±',
        'Ø¯ÙŠØ³Ù…Ø¨Ø±',
    ];

export default moment.defineLocale('ar-dz', {
    months: months,
    monthsShort: months,
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'D/\u200FM/\u200FYYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Øµ|Ù…/,
    isPM: function (input) {
        return 'Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Øµ';
        } else {
            return 'Ù…';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ø¨Ø¹Ø¯ %s',
        past: 'Ù…Ù†Ø° %s',
        s: pluralize('s'),
        ss: pluralize('s'),
        m: pluralize('m'),
        mm: pluralize('m'),
        h: pluralize('h'),
        hh: pluralize('h'),
        d: pluralize('d'),
        dd: pluralize('d'),
        M: pluralize('M'),
        MM: pluralize('M'),
        y: pluralize('y'),
        yy: pluralize('y'),
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Kuwait) [ar-kw]
//! author : Nusret Parlak: https://github.com/nusretparlak

import moment from '../moment';

export default moment.defineLocale('ar-kw', {
    months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥ØªÙ†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø§Ø­Ø¯_Ø§ØªÙ†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÙÙŠ %s',
        past: 'Ù…Ù†Ø° %s',
        s: 'Ø«ÙˆØ§Ù†',
        ss: '%d Ø«Ø§Ù†ÙŠØ©',
        m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
        mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
        h: 'Ø³Ø§Ø¹Ø©',
        hh: '%d Ø³Ø§Ø¹Ø§Øª',
        d: 'ÙŠÙˆÙ…',
        dd: '%d Ø£ÙŠØ§Ù…',
        M: 'Ø´Ù‡Ø±',
        MM: '%d Ø£Ø´Ù‡Ø±',
        y: 'Ø³Ù†Ø©',
        yy: '%d Ø³Ù†ÙˆØ§Øª',
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Lybia) [ar-ly]
//! author : Ali Hmer: https://github.com/kikoanis

import moment from '../moment';

var symbolMap = {
        1: '1',
        2: '2',
        3: '3',
        4: '4',
        5: '5',
        6: '6',
        7: '7',
        8: '8',
        9: '9',
        0: '0',
    },
    pluralForm = function (n) {
        return n === 0
            ? 0
            : n === 1
            ? 1
            : n === 2
            ? 2
            : n % 100 >= 3 && n % 100 <= 10
            ? 3
            : n % 100 >= 11
            ? 4
            : 5;
    },
    plurals = {
        s: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
            'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
            '%d Ø«ÙˆØ§Ù†',
            '%d Ø«Ø§Ù†ÙŠØ©',
            '%d Ø«Ø§Ù†ÙŠØ©',
        ],
        m: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
            'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
            '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
        ],
        h: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
            'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
            '%d Ø³Ø§Ø¹Ø§Øª',
            '%d Ø³Ø§Ø¹Ø©',
            '%d Ø³Ø§Ø¹Ø©',
        ],
        d: [
            'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
            'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
            ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
            '%d Ø£ÙŠØ§Ù…',
            '%d ÙŠÙˆÙ…Ù‹Ø§',
            '%d ÙŠÙˆÙ…',
        ],
        M: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
            'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
            ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
            '%d Ø£Ø´Ù‡Ø±',
            '%d Ø´Ù‡Ø±Ø§',
            '%d Ø´Ù‡Ø±',
        ],
        y: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
            'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
            ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
            '%d Ø£Ø¹ÙˆØ§Ù…',
            '%d Ø¹Ø§Ù…Ù‹Ø§',
            '%d Ø¹Ø§Ù…',
        ],
    },
    pluralize = function (u) {
        return function (number, withoutSuffix, string, isFuture) {
            var f = pluralForm(number),
                str = plurals[u][pluralForm(number)];
            if (f === 2) {
                str = str[withoutSuffix ? 0 : 1];
            }
            return str.replace(/%d/i, number);
        };
    },
    months = [
        'ÙŠÙ†Ø§ÙŠØ±',
        'ÙØ¨Ø±Ø§ÙŠØ±',
        'Ù…Ø§Ø±Ø³',
        'Ø£Ø¨Ø±ÙŠÙ„',
        'Ù…Ø§ÙŠÙˆ',
        'ÙŠÙˆÙ†ÙŠÙˆ',
        'ÙŠÙˆÙ„ÙŠÙˆ',
        'Ø£ØºØ³Ø·Ø³',
        'Ø³Ø¨ØªÙ…Ø¨Ø±',
        'Ø£ÙƒØªÙˆØ¨Ø±',
        'Ù†ÙˆÙÙ…Ø¨Ø±',
        'Ø¯ÙŠØ³Ù…Ø¨Ø±',
    ];

export default moment.defineLocale('ar-ly', {
    months: months,
    monthsShort: months,
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'D/\u200FM/\u200FYYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Øµ|Ù…/,
    isPM: function (input) {
        return 'Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Øµ';
        } else {
            return 'Ù…';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ø¨Ø¹Ø¯ %s',
        past: 'Ù…Ù†Ø° %s',
        s: pluralize('s'),
        ss: pluralize('s'),
        m: pluralize('m'),
        mm: pluralize('m'),
        h: pluralize('h'),
        hh: pluralize('h'),
        d: pluralize('d'),
        dd: pluralize('d'),
        M: pluralize('M'),
        MM: pluralize('M'),
        y: pluralize('y'),
        yy: pluralize('y'),
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Morocco) [ar-ma]
//! author : ElFadili Yassine : https://github.com/ElFadiliY
//! author : Abdel Said : https://github.com/abdelsaid

import moment from '../moment';

export default moment.defineLocale('ar-ma', {
    months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø§Ø­Ø¯_Ø§Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÙÙŠ %s',
        past: 'Ù…Ù†Ø° %s',
        s: 'Ø«ÙˆØ§Ù†',
        ss: '%d Ø«Ø§Ù†ÙŠØ©',
        m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
        mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
        h: 'Ø³Ø§Ø¹Ø©',
        hh: '%d Ø³Ø§Ø¹Ø§Øª',
        d: 'ÙŠÙˆÙ…',
        dd: '%d Ø£ÙŠØ§Ù…',
        M: 'Ø´Ù‡Ø±',
        MM: '%d Ø£Ø´Ù‡Ø±',
        y: 'Ø³Ù†Ø©',
        yy: '%d Ø³Ù†ÙˆØ§Øª',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic (Saudi Arabia) [ar-sa]
//! author : Suhail Alkowaileet : https://github.com/xsoh

import moment from '../moment';

var symbolMap = {
        1: 'Ù¡',
        2: 'Ù¢',
        3: 'Ù£',
        4: 'Ù¤',
        5: 'Ù¥',
        6: 'Ù¦',
        7: 'Ù§',
        8: 'Ù¨',
        9: 'Ù©',
        0: 'Ù ',
    },
    numberMap = {
        'Ù¡': '1',
        'Ù¢': '2',
        'Ù£': '3',
        'Ù¤': '4',
        'Ù¥': '5',
        'Ù¦': '6',
        'Ù§': '7',
        'Ù¨': '8',
        'Ù©': '9',
        'Ù ': '0',
    };

export default moment.defineLocale('ar-sa', {
    months: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Øµ|Ù…/,
    isPM: function (input) {
        return 'Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Øµ';
        } else {
            return 'Ù…';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÙÙŠ %s',
        past: 'Ù…Ù†Ø° %s',
        s: 'Ø«ÙˆØ§Ù†',
        ss: '%d Ø«Ø§Ù†ÙŠØ©',
        m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
        mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
        h: 'Ø³Ø§Ø¹Ø©',
        hh: '%d Ø³Ø§Ø¹Ø§Øª',
        d: 'ÙŠÙˆÙ…',
        dd: '%d Ø£ÙŠØ§Ù…',
        M: 'Ø´Ù‡Ø±',
        MM: '%d Ø£Ø´Ù‡Ø±',
        y: 'Ø³Ù†Ø©',
        yy: '%d Ø³Ù†ÙˆØ§Øª',
    },
    preparse: function (string) {
        return string
            .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                return numberMap[match];
            })
            .replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale  :  Arabic (Tunisia) [ar-tn]
//! author : Nader Toukabri : https://github.com/naderio

import moment from '../moment';

export default moment.defineLocale('ar-tn', {
    months: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÙÙŠ %s',
        past: 'Ù…Ù†Ø° %s',
        s: 'Ø«ÙˆØ§Ù†',
        ss: '%d Ø«Ø§Ù†ÙŠØ©',
        m: 'Ø¯Ù‚ÙŠÙ‚Ø©',
        mm: '%d Ø¯Ù‚Ø§Ø¦Ù‚',
        h: 'Ø³Ø§Ø¹Ø©',
        hh: '%d Ø³Ø§Ø¹Ø§Øª',
        d: 'ÙŠÙˆÙ…',
        dd: '%d Ø£ÙŠØ§Ù…',
        M: 'Ø´Ù‡Ø±',
        MM: '%d Ø£Ø´Ù‡Ø±',
        y: 'Ø³Ù†Ø©',
        yy: '%d Ø³Ù†ÙˆØ§Øª',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Arabic [ar]
//! author : Abdel Said: https://github.com/abdelsaid
//! author : Ahmed Elkhatib
//! author : forabi https://github.com/forabi

import moment from '../moment';

var symbolMap = {
        1: 'Ù¡',
        2: 'Ù¢',
        3: 'Ù£',
        4: 'Ù¤',
        5: 'Ù¥',
        6: 'Ù¦',
        7: 'Ù§',
        8: 'Ù¨',
        9: 'Ù©',
        0: 'Ù ',
    },
    numberMap = {
        'Ù¡': '1',
        'Ù¢': '2',
        'Ù£': '3',
        'Ù¤': '4',
        'Ù¥': '5',
        'Ù¦': '6',
        'Ù§': '7',
        'Ù¨': '8',
        'Ù©': '9',
        'Ù ': '0',
    },
    pluralForm = function (n) {
        return n === 0
            ? 0
            : n === 1
            ? 1
            : n === 2
            ? 2
            : n % 100 >= 3 && n % 100 <= 10
            ? 3
            : n % 100 >= 11
            ? 4
            : 5;
    },
    plurals = {
        s: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©',
            'Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø«Ø§Ù†ÙŠØªØ§Ù†', 'Ø«Ø§Ù†ÙŠØªÙŠÙ†'],
            '%d Ø«ÙˆØ§Ù†',
            '%d Ø«Ø§Ù†ÙŠØ©',
            '%d Ø«Ø§Ù†ÙŠØ©',
        ],
        m: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©',
            'Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†', 'Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†'],
            '%d Ø¯Ù‚Ø§Ø¦Ù‚',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
            '%d Ø¯Ù‚ÙŠÙ‚Ø©',
        ],
        h: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©',
            'Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©',
            ['Ø³Ø§Ø¹ØªØ§Ù†', 'Ø³Ø§Ø¹ØªÙŠÙ†'],
            '%d Ø³Ø§Ø¹Ø§Øª',
            '%d Ø³Ø§Ø¹Ø©',
            '%d Ø³Ø§Ø¹Ø©',
        ],
        d: [
            'Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…',
            'ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯',
            ['ÙŠÙˆÙ…Ø§Ù†', 'ÙŠÙˆÙ…ÙŠÙ†'],
            '%d Ø£ÙŠØ§Ù…',
            '%d ÙŠÙˆÙ…Ù‹Ø§',
            '%d ÙŠÙˆÙ…',
        ],
        M: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±',
            'Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯',
            ['Ø´Ù‡Ø±Ø§Ù†', 'Ø´Ù‡Ø±ÙŠÙ†'],
            '%d Ø£Ø´Ù‡Ø±',
            '%d Ø´Ù‡Ø±Ø§',
            '%d Ø´Ù‡Ø±',
        ],
        y: [
            'Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…',
            'Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯',
            ['Ø¹Ø§Ù…Ø§Ù†', 'Ø¹Ø§Ù…ÙŠÙ†'],
            '%d Ø£Ø¹ÙˆØ§Ù…',
            '%d Ø¹Ø§Ù…Ù‹Ø§',
            '%d Ø¹Ø§Ù…',
        ],
    },
    pluralize = function (u) {
        return function (number, withoutSuffix, string, isFuture) {
            var f = pluralForm(number),
                str = plurals[u][pluralForm(number)];
            if (f === 2) {
                str = str[withoutSuffix ? 0 : 1];
            }
            return str.replace(/%d/i, number);
        };
    },
    months = [
        'ÙŠÙ†Ø§ÙŠØ±',
        'ÙØ¨Ø±Ø§ÙŠØ±',
        'Ù…Ø§Ø±Ø³',
        'Ø£Ø¨Ø±ÙŠÙ„',
        'Ù…Ø§ÙŠÙˆ',
        'ÙŠÙˆÙ†ÙŠÙˆ',
        'ÙŠÙˆÙ„ÙŠÙˆ',
        'Ø£ØºØ³Ø·Ø³',
        'Ø³Ø¨ØªÙ…Ø¨Ø±',
        'Ø£ÙƒØªÙˆØ¨Ø±',
        'Ù†ÙˆÙÙ…Ø¨Ø±',
        'Ø¯ÙŠØ³Ù…Ø¨Ø±',
    ];

export default moment.defineLocale('ar', {
    months: months,
    monthsShort: months,
    weekdays: 'Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª'.split('_'),
    weekdaysShort: 'Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª'.split('_'),
    weekdaysMin: 'Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'D/\u200FM/\u200FYYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Øµ|Ù…/,
    isPM: function (input) {
        return 'Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Øµ';
        } else {
            return 'Ù…';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextDay: '[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        nextWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastDay: '[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        lastWeek: 'dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ø¨Ø¹Ø¯ %s',
        past: 'Ù…Ù†Ø° %s',
        s: pluralize('s'),
        ss: pluralize('s'),
        m: pluralize('m'),
        mm: pluralize('m'),
        h: pluralize('h'),
        hh: pluralize('h'),
        d: pluralize('d'),
        dd: pluralize('d'),
        M: pluralize('M'),
        MM: pluralize('M'),
        y: pluralize('y'),
        yy: pluralize('y'),
    },
    preparse: function (string) {
        return string
            .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                return numberMap[match];
            })
            .replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Azerbaijani [az]
//! author : topchiyev : https://github.com/topchiyev

import moment from '../moment';

var suffixes = {
    1: '-inci',
    5: '-inci',
    8: '-inci',
    70: '-inci',
    80: '-inci',
    2: '-nci',
    7: '-nci',
    20: '-nci',
    50: '-nci',
    3: '-Ã¼ncÃ¼',
    4: '-Ã¼ncÃ¼',
    100: '-Ã¼ncÃ¼',
    6: '-ncÄ±',
    9: '-uncu',
    10: '-uncu',
    30: '-uncu',
    60: '-Ä±ncÄ±',
    90: '-Ä±ncÄ±',
};

export default moment.defineLocale('az', {
    months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
        '_'
    ),
    monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
    weekdays: 'Bazar_Bazar ertÉ™si_Ã‡É™rÅŸÉ™nbÉ™ axÅŸamÄ±_Ã‡É™rÅŸÉ™nbÉ™_CÃ¼mÉ™ axÅŸamÄ±_CÃ¼mÉ™_ÅžÉ™nbÉ™'.split(
        '_'
    ),
    weekdaysShort: 'Baz_BzE_Ã‡Ax_Ã‡É™r_CAx_CÃ¼m_ÅžÉ™n'.split('_'),
    weekdaysMin: 'Bz_BE_Ã‡A_Ã‡É™_CA_CÃ¼_ÅžÉ™'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[bugÃ¼n saat] LT',
        nextDay: '[sabah saat] LT',
        nextWeek: '[gÉ™lÉ™n hÉ™ftÉ™] dddd [saat] LT',
        lastDay: '[dÃ¼nÉ™n] LT',
        lastWeek: '[keÃ§É™n hÉ™ftÉ™] dddd [saat] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s sonra',
        past: '%s É™vvÉ™l',
        s: 'bir neÃ§É™ saniyÉ™',
        ss: '%d saniyÉ™',
        m: 'bir dÉ™qiqÉ™',
        mm: '%d dÉ™qiqÉ™',
        h: 'bir saat',
        hh: '%d saat',
        d: 'bir gÃ¼n',
        dd: '%d gÃ¼n',
        M: 'bir ay',
        MM: '%d ay',
        y: 'bir il',
        yy: '%d il',
    },
    meridiemParse: /gecÉ™|sÉ™hÉ™r|gÃ¼ndÃ¼z|axÅŸam/,
    isPM: function (input) {
        return /^(gÃ¼ndÃ¼z|axÅŸam)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'gecÉ™';
        } else if (hour < 12) {
            return 'sÉ™hÉ™r';
        } else if (hour < 17) {
            return 'gÃ¼ndÃ¼z';
        } else {
            return 'axÅŸam';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ä±ncÄ±|inci|nci|Ã¼ncÃ¼|ncÄ±|uncu)/,
    ordinal: function (number) {
        if (number === 0) {
            // special case for zero
            return number + '-Ä±ncÄ±';
        }
        var a = number % 10,
            b = (number % 100) - a,
            c = number >= 100 ? 100 : null;
        return number + (suffixes[a] || suffixes[b] || suffixes[c]);
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Belarusian [be]
//! author : Dmitry Demidov : https://github.com/demidov91
//! author: Praleska: http://praleska.pro/
//! Author : Menelion ElensÃºle : https://github.com/Oire

import moment from '../moment';

function plural(word, num) {
    var forms = word.split('_');
    return num % 10 === 1 && num % 100 !== 11
        ? forms[0]
        : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
        ? forms[1]
        : forms[2];
}
function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
        ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
        mm: withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ_Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñ‹_Ñ…Ð²Ñ–Ð»Ñ–Ð½',
        hh: withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ_Ð³Ð°Ð´Ð·Ñ–Ð½Ñ‹_Ð³Ð°Ð´Ð·Ñ–Ð½',
        dd: 'Ð´Ð·ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð·Ñ‘Ð½',
        MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ñ‹_Ð¼ÐµÑÑÑ†Ð°Ñž',
        yy: 'Ð³Ð¾Ð´_Ð³Ð°Ð´Ñ‹_Ð³Ð°Ð´Ð¾Ñž',
    };
    if (key === 'm') {
        return withoutSuffix ? 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ð°' : 'Ñ…Ð²Ñ–Ð»Ñ–Ð½Ñƒ';
    } else if (key === 'h') {
        return withoutSuffix ? 'Ð³Ð°Ð´Ð·Ñ–Ð½Ð°' : 'Ð³Ð°Ð´Ð·Ñ–Ð½Ñƒ';
    } else {
        return number + ' ' + plural(format[key], +number);
    }
}

export default moment.defineLocale('be', {
    months: {
        format: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½Ñ_Ð»ÑŽÑ‚Ð°Ð³Ð°_ÑÐ°ÐºÐ°Ð²Ñ–ÐºÐ°_ÐºÑ€Ð°ÑÐ°Ð²Ñ–ÐºÐ°_Ñ‚Ñ€Ð°ÑžÐ½Ñ_Ñ‡ÑÑ€Ð²ÐµÐ½Ñ_Ð»Ñ–Ð¿ÐµÐ½Ñ_Ð¶Ð½Ñ–ÑžÐ½Ñ_Ð²ÐµÑ€Ð°ÑÐ½Ñ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–ÐºÐ°_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´Ð°_ÑÐ½ÐµÐ¶Ð½Ñ'.split(
            '_'
        ),
        standalone: 'ÑÑ‚ÑƒÐ´Ð·ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ñ‹_ÑÐ°ÐºÐ°Ð²Ñ–Ðº_ÐºÑ€Ð°ÑÐ°Ð²Ñ–Ðº_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÑÑ€Ð²ÐµÐ½ÑŒ_Ð»Ñ–Ð¿ÐµÐ½ÑŒ_Ð¶Ð½Ñ–Ð²ÐµÐ½ÑŒ_Ð²ÐµÑ€Ð°ÑÐµÐ½ÑŒ_ÐºÐ°ÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ–Ðº_Ð»Ñ–ÑÑ‚Ð°Ð¿Ð°Ð´_ÑÐ½ÐµÐ¶Ð°Ð½ÑŒ'.split(
            '_'
        ),
    },
    monthsShort: 'ÑÑ‚ÑƒÐ´_Ð»ÑŽÑ‚_ÑÐ°Ðº_ÐºÑ€Ð°Ñ_Ñ‚Ñ€Ð°Ð²_Ñ‡ÑÑ€Ð²_Ð»Ñ–Ð¿_Ð¶Ð½Ñ–Ð²_Ð²ÐµÑ€_ÐºÐ°ÑÑ‚_Ð»Ñ–ÑÑ‚_ÑÐ½ÐµÐ¶'.split(
        '_'
    ),
    weekdays: {
        format: 'Ð½ÑÐ´Ð·ÐµÐ»ÑŽ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ñƒ_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ñƒ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
            '_'
        ),
        standalone: 'Ð½ÑÐ´Ð·ÐµÐ»Ñ_Ð¿Ð°Ð½ÑÐ´Ð·ÐµÐ»Ð°Ðº_Ð°ÑžÑ‚Ð¾Ñ€Ð°Ðº_ÑÐµÑ€Ð°Ð´Ð°_Ñ‡Ð°Ñ†Ð²ÐµÑ€_Ð¿ÑÑ‚Ð½Ñ–Ñ†Ð°_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        isFormat: /\[ ?[Ð£ÑƒÑž] ?(?:Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½ÑƒÑŽ)? ?\] ?dddd/,
    },
    weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
    weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð°Ñ‚_ÑÑ€_Ñ‡Ñ†_Ð¿Ñ‚_ÑÐ±'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY Ð³.',
        LLL: 'D MMMM YYYY Ð³., HH:mm',
        LLLL: 'dddd, D MMMM YYYY Ð³., HH:mm',
    },
    calendar: {
        sameDay: '[Ð¡Ñ‘Ð½Ð½Ñ Ñž] LT',
        nextDay: '[Ð—Ð°ÑžÑ‚Ñ€Ð° Ñž] LT',
        lastDay: '[Ð£Ñ‡Ð¾Ñ€Ð° Ñž] LT',
        nextWeek: function () {
            return '[Ð£] dddd [Ñž] LT';
        },
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                case 5:
                case 6:
                    return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»ÑƒÑŽ] dddd [Ñž] LT';
                case 1:
                case 2:
                case 4:
                    return '[Ð£ Ð¼Ñ–Ð½ÑƒÐ»Ñ‹] dddd [Ñž] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð¿Ñ€Ð°Ð· %s',
        past: '%s Ñ‚Ð°Ð¼Ñƒ',
        s: 'Ð½ÐµÐºÐ°Ð»ÑŒÐºÑ– ÑÐµÐºÑƒÐ½Ð´',
        m: relativeTimeWithPlural,
        mm: relativeTimeWithPlural,
        h: relativeTimeWithPlural,
        hh: relativeTimeWithPlural,
        d: 'Ð´Ð·ÐµÐ½ÑŒ',
        dd: relativeTimeWithPlural,
        M: 'Ð¼ÐµÑÑÑ†',
        MM: relativeTimeWithPlural,
        y: 'Ð³Ð¾Ð´',
        yy: relativeTimeWithPlural,
    },
    meridiemParse: /Ð½Ð¾Ñ‡Ñ‹|Ñ€Ð°Ð½Ñ–Ñ†Ñ‹|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°/,
    isPM: function (input) {
        return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð°Ñ€Ð°)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'Ð½Ð¾Ñ‡Ñ‹';
        } else if (hour < 12) {
            return 'Ñ€Ð°Ð½Ñ–Ñ†Ñ‹';
        } else if (hour < 17) {
            return 'Ð´Ð½Ñ';
        } else {
            return 'Ð²ÐµÑ‡Ð°Ñ€Ð°';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ñ–|Ñ‹|Ð³Ð°)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'M':
            case 'd':
            case 'DDD':
            case 'w':
            case 'W':
                return (number % 10 === 2 || number % 10 === 3) &&
                    number % 100 !== 12 &&
                    number % 100 !== 13
                    ? number + '-Ñ–'
                    : number + '-Ñ‹';
            case 'D':
                return number + '-Ð³Ð°';
            default:
                return number;
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Bulgarian [bg]
//! author : Krasen Borisov : https://github.com/kraz

import moment from '../moment';

export default moment.defineLocale('bg', {
    months: 'ÑÐ½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
        '_'
    ),
    monthsShort: 'ÑÐ½Ñƒ_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
    weekdays: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÑÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÑŠÑ€Ñ‚ÑŠÐº_Ð¿ÐµÑ‚ÑŠÐº_ÑÑŠÐ±Ð¾Ñ‚Ð°'.split(
        '_'
    ),
    weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ñ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÑŠÐ±'.split('_'),
    weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'D.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY H:mm',
        LLLL: 'dddd, D MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[Ð”Ð½ÐµÑ Ð²] LT',
        nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²] LT',
        nextWeek: 'dddd [Ð²] LT',
        lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                case 6:
                    return '[ÐœÐ¸Ð½Ð°Ð»Ð°Ñ‚Ð°] dddd [Ð²] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[ÐœÐ¸Ð½Ð°Ð»Ð¸Ñ] dddd [Ð²] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÑÐ»ÐµÐ´ %s',
        past: 'Ð¿Ñ€ÐµÐ´Ð¸ %s',
        s: 'Ð½ÑÐºÐ¾Ð»ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
        ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
        m: 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
        mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
        h: 'Ñ‡Ð°Ñ',
        hh: '%d Ñ‡Ð°ÑÐ°',
        d: 'Ð´ÐµÐ½',
        dd: '%d Ð´ÐµÐ½Ð°',
        w: 'ÑÐµÐ´Ð¼Ð¸Ñ†Ð°',
        ww: '%d ÑÐµÐ´Ð¼Ð¸Ñ†Ð¸',
        M: 'Ð¼ÐµÑÐµÑ†',
        MM: '%d Ð¼ÐµÑÐµÑ†Ð°',
        y: 'Ð³Ð¾Ð´Ð¸Ð½Ð°',
        yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
    ordinal: function (number) {
        var lastDigit = number % 10,
            last2Digits = number % 100;
        if (number === 0) {
            return number + '-ÐµÐ²';
        } else if (last2Digits === 0) {
            return number + '-ÐµÐ½';
        } else if (last2Digits > 10 && last2Digits < 20) {
            return number + '-Ñ‚Ð¸';
        } else if (lastDigit === 1) {
            return number + '-Ð²Ð¸';
        } else if (lastDigit === 2) {
            return number + '-Ñ€Ð¸';
        } else if (lastDigit === 7 || lastDigit === 8) {
            return number + '-Ð¼Ð¸';
        } else {
            return number + '-Ñ‚Ð¸';
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Bambara [bm]
//! author : Estelle Comment : https://github.com/estellecomment
// Language contact person : Abdoufata Kane : https://github.com/abdoufata

import moment from '../moment';

export default moment.defineLocale('bm', {
    months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_MÉ›kalo_ZuwÉ›nkalo_Zuluyekalo_Utikalo_SÉ›tanburukalo_É”kutÉ”burukalo_Nowanburukalo_Desanburukalo'.split(
        '_'
    ),
    monthsShort: 'Zan_Few_Mar_Awi_MÉ›_Zuw_Zul_Uti_SÉ›t_É”ku_Now_Des'.split('_'),
    weekdays: 'Kari_NtÉ›nÉ›n_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
    weekdaysShort: 'Kar_NtÉ›_Tar_Ara_Ala_Jum_Sib'.split('_'),
    weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'MMMM [tile] D [san] YYYY',
        LLL: 'MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
        LLLL: 'dddd MMMM [tile] D [san] YYYY [lÉ›rÉ›] HH:mm',
    },
    calendar: {
        sameDay: '[Bi lÉ›rÉ›] LT',
        nextDay: '[Sini lÉ›rÉ›] LT',
        nextWeek: 'dddd [don lÉ›rÉ›] LT',
        lastDay: '[Kunu lÉ›rÉ›] LT',
        lastWeek: 'dddd [tÉ›mÉ›nen lÉ›rÉ›] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s kÉ”nÉ”',
        past: 'a bÉ› %s bÉ”',
        s: 'sanga dama dama',
        ss: 'sekondi %d',
        m: 'miniti kelen',
        mm: 'miniti %d',
        h: 'lÉ›rÉ› kelen',
        hh: 'lÉ›rÉ› %d',
        d: 'tile kelen',
        dd: 'tile %d',
        M: 'kalo kelen',
        MM: 'kalo %d',
        y: 'san kelen',
        yy: 'san %d',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Bengali (Bangladesh) [bn-bd]
//! author : Asraf Hossain Patoary : https://github.com/ashwoolford

import moment from '../moment';

var symbolMap = {
        1: 'à§§',
        2: 'à§¨',
        3: 'à§©',
        4: 'à§ª',
        5: 'à§«',
        6: 'à§¬',
        7: 'à§­',
        8: 'à§®',
        9: 'à§¯',
        0: 'à§¦',
    },
    numberMap = {
        'à§§': '1',
        'à§¨': '2',
        'à§©': '3',
        'à§ª': '4',
        'à§«': '5',
        'à§¬': '6',
        'à§­': '7',
        'à§®': '8',
        'à§¯': '9',
        'à§¦': '0',
    };

export default moment.defineLocale('bn-bd', {
    months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
        '_'
    ),
    monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
        '_'
    ),
    weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
        '_'
    ),
    weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
    weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¦¸à¦®à§Ÿ',
        LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
    },
    calendar: {
        sameDay: '[à¦†à¦œ] LT',
        nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
        lastWeek: '[à¦—à¦¤] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à¦ªà¦°à§‡',
        past: '%s à¦†à¦—à§‡',
        s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
        ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
        m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
        mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
        h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
        hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
        d: 'à¦à¦• à¦¦à¦¿à¦¨',
        dd: '%d à¦¦à¦¿à¦¨',
        M: 'à¦à¦• à¦®à¦¾à¦¸',
        MM: '%d à¦®à¦¾à¦¸',
        y: 'à¦à¦• à¦¬à¦›à¦°',
        yy: '%d à¦¬à¦›à¦°',
    },
    preparse: function (string) {
        return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },

    meridiemParse: /à¦°à¦¾à¦¤|à¦­à§‹à¦°|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦¸à¦¨à§à¦§à§à¦¯à¦¾|à¦°à¦¾à¦¤/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¦°à¦¾à¦¤') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¦­à§‹à¦°') {
            return hour;
        } else if (meridiem === 'à¦¸à¦•à¦¾à¦²') {
            return hour;
        } else if (meridiem === 'à¦¦à§à¦ªà§à¦°') {
            return hour >= 3 ? hour : hour + 12;
        } else if (meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²') {
            return hour + 12;
        } else if (meridiem === 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾') {
            return hour + 12;
        }
    },

    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¦°à¦¾à¦¤';
        } else if (hour < 6) {
            return 'à¦­à§‹à¦°';
        } else if (hour < 12) {
            return 'à¦¸à¦•à¦¾à¦²';
        } else if (hour < 15) {
            return 'à¦¦à§à¦ªà§à¦°';
        } else if (hour < 18) {
            return 'à¦¬à¦¿à¦•à¦¾à¦²';
        } else if (hour < 20) {
            return 'à¦¸à¦¨à§à¦§à§à¦¯à¦¾';
        } else {
            return 'à¦°à¦¾à¦¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Bengali [bn]
//! author : Kaushik Gandhi : https://github.com/kaushikgandhi

import moment from '../moment';

var symbolMap = {
        1: 'à§§',
        2: 'à§¨',
        3: 'à§©',
        4: 'à§ª',
        5: 'à§«',
        6: 'à§¬',
        7: 'à§­',
        8: 'à§®',
        9: 'à§¯',
        0: 'à§¦',
    },
    numberMap = {
        'à§§': '1',
        'à§¨': '2',
        'à§©': '3',
        'à§ª': '4',
        'à§«': '5',
        'à§¬': '6',
        'à§­': '7',
        'à§®': '8',
        'à§¯': '9',
        'à§¦': '0',
    };

export default moment.defineLocale('bn', {
    months: 'à¦œà¦¾à¦¨à§à§Ÿà¦¾à¦°à¦¿_à¦«à§‡à¦¬à§à¦°à§à§Ÿà¦¾à¦°à¦¿_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿà§‡à¦®à§à¦¬à¦°_à¦…à¦•à§à¦Ÿà§‹à¦¬à¦°_à¦¨à¦­à§‡à¦®à§à¦¬à¦°_à¦¡à¦¿à¦¸à§‡à¦®à§à¦¬à¦°'.split(
        '_'
    ),
    monthsShort: 'à¦œà¦¾à¦¨à§_à¦«à§‡à¦¬à§à¦°à§_à¦®à¦¾à¦°à§à¦š_à¦à¦ªà§à¦°à¦¿à¦²_à¦®à§‡_à¦œà§à¦¨_à¦œà§à¦²à¦¾à¦‡_à¦†à¦—à¦¸à§à¦Ÿ_à¦¸à§‡à¦ªà§à¦Ÿ_à¦…à¦•à§à¦Ÿà§‹_à¦¨à¦­à§‡_à¦¡à¦¿à¦¸à§‡'.split(
        '_'
    ),
    weekdays: 'à¦°à¦¬à¦¿à¦¬à¦¾à¦°_à¦¸à§‹à¦®à¦¬à¦¾à¦°_à¦®à¦™à§à¦—à¦²à¦¬à¦¾à¦°_à¦¬à§à¦§à¦¬à¦¾à¦°_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿à¦¬à¦¾à¦°_à¦¶à§à¦•à§à¦°à¦¬à¦¾à¦°_à¦¶à¦¨à¦¿à¦¬à¦¾à¦°'.split(
        '_'
    ),
    weekdaysShort: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹à¦¸à§à¦ªà¦¤à¦¿_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
    weekdaysMin: 'à¦°à¦¬à¦¿_à¦¸à§‹à¦®_à¦®à¦™à§à¦—à¦²_à¦¬à§à¦§_à¦¬à§ƒà¦¹_à¦¶à§à¦•à§à¦°_à¦¶à¦¨à¦¿'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¦¸à¦®à§Ÿ',
        LTS: 'A h:mm:ss à¦¸à¦®à§Ÿ',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¦¸à¦®à§Ÿ',
    },
    calendar: {
        sameDay: '[à¦†à¦œ] LT',
        nextDay: '[à¦†à¦—à¦¾à¦®à§€à¦•à¦¾à¦²] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à¦—à¦¤à¦•à¦¾à¦²] LT',
        lastWeek: '[à¦—à¦¤] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à¦ªà¦°à§‡',
        past: '%s à¦†à¦—à§‡',
        s: 'à¦•à§Ÿà§‡à¦• à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
        ss: '%d à¦¸à§‡à¦•à§‡à¦¨à§à¦¡',
        m: 'à¦à¦• à¦®à¦¿à¦¨à¦¿à¦Ÿ',
        mm: '%d à¦®à¦¿à¦¨à¦¿à¦Ÿ',
        h: 'à¦à¦• à¦˜à¦¨à§à¦Ÿà¦¾',
        hh: '%d à¦˜à¦¨à§à¦Ÿà¦¾',
        d: 'à¦à¦• à¦¦à¦¿à¦¨',
        dd: '%d à¦¦à¦¿à¦¨',
        M: 'à¦à¦• à¦®à¦¾à¦¸',
        MM: '%d à¦®à¦¾à¦¸',
        y: 'à¦à¦• à¦¬à¦›à¦°',
        yy: '%d à¦¬à¦›à¦°',
    },
    preparse: function (string) {
        return string.replace(/[à§§à§¨à§©à§ªà§«à§¬à§­à§®à§¯à§¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à¦°à¦¾à¦¤|à¦¸à¦•à¦¾à¦²|à¦¦à§à¦ªà§à¦°|à¦¬à¦¿à¦•à¦¾à¦²|à¦°à¦¾à¦¤/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (
            (meridiem === 'à¦°à¦¾à¦¤' && hour >= 4) ||
            (meridiem === 'à¦¦à§à¦ªà§à¦°' && hour < 5) ||
            meridiem === 'à¦¬à¦¿à¦•à¦¾à¦²'
        ) {
            return hour + 12;
        } else {
            return hour;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¦°à¦¾à¦¤';
        } else if (hour < 10) {
            return 'à¦¸à¦•à¦¾à¦²';
        } else if (hour < 17) {
            return 'à¦¦à§à¦ªà§à¦°';
        } else if (hour < 20) {
            return 'à¦¬à¦¿à¦•à¦¾à¦²';
        } else {
            return 'à¦°à¦¾à¦¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tibetan [bo]
//! author : Thupten N. Chakrishar : https://github.com/vajradog

import moment from '../moment';

var symbolMap = {
        1: 'à¼¡',
        2: 'à¼¢',
        3: 'à¼£',
        4: 'à¼¤',
        5: 'à¼¥',
        6: 'à¼¦',
        7: 'à¼§',
        8: 'à¼¨',
        9: 'à¼©',
        0: 'à¼ ',
    },
    numberMap = {
        'à¼¡': '1',
        'à¼¢': '2',
        'à¼£': '3',
        'à¼¤': '4',
        'à¼¥': '5',
        'à¼¦': '6',
        'à¼§': '7',
        'à¼¨': '8',
        'à¼©': '9',
        'à¼ ': '0',
    };

export default moment.defineLocale('bo', {
    months: 'à½Ÿà¾³à¼‹à½–à¼‹à½‘à½„à¼‹à½”à½¼_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½‰à½²à½¦à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‚à½¦à½´à½˜à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½žà½²à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½£à¾”à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à¾²à½´à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½‘à½´à½“à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½¢à¾’à¾±à½‘à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½‘à½‚à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½…à½²à½‚à¼‹à½”_à½Ÿà¾³à¼‹à½–à¼‹à½–à½…à½´à¼‹à½‚à½‰à½²à½¦à¼‹à½”'.split(
        '_'
    ),
    monthsShort: 'à½Ÿà¾³à¼‹1_à½Ÿà¾³à¼‹2_à½Ÿà¾³à¼‹3_à½Ÿà¾³à¼‹4_à½Ÿà¾³à¼‹5_à½Ÿà¾³à¼‹6_à½Ÿà¾³à¼‹7_à½Ÿà¾³à¼‹8_à½Ÿà¾³à¼‹9_à½Ÿà¾³à¼‹10_à½Ÿà¾³à¼‹11_à½Ÿà¾³à¼‹12'.split(
        '_'
    ),
    monthsShortRegex: /^(à½Ÿà¾³à¼‹\d{1,2})/,
    monthsParseExact: true,
    weekdays: 'à½‚à½Ÿà½ à¼‹à½‰à½²à¼‹à½˜à¼‹_à½‚à½Ÿà½ à¼‹à½Ÿà¾³à¼‹à½–à¼‹_à½‚à½Ÿà½ à¼‹à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½‚à½Ÿà½ à¼‹à½£à¾·à½‚à¼‹à½”à¼‹_à½‚à½Ÿà½ à¼‹à½•à½´à½¢à¼‹à½–à½´_à½‚à½Ÿà½ à¼‹à½”à¼‹à½¦à½„à½¦à¼‹_à½‚à½Ÿà½ à¼‹à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
        '_'
    ),
    weekdaysShort: 'à½‰à½²à¼‹à½˜à¼‹_à½Ÿà¾³à¼‹à½–à¼‹_à½˜à½²à½‚à¼‹à½‘à½˜à½¢à¼‹_à½£à¾·à½‚à¼‹à½”à¼‹_à½•à½´à½¢à¼‹à½–à½´_à½”à¼‹à½¦à½„à½¦à¼‹_à½¦à¾¤à½ºà½“à¼‹à½”à¼‹'.split(
        '_'
    ),
    weekdaysMin: 'à½‰à½²_à½Ÿà¾³_à½˜à½²à½‚_à½£à¾·à½‚_à½•à½´à½¢_à½¦à½„à½¦_à½¦à¾¤à½ºà½“'.split('_'),
    longDateFormat: {
        LT: 'A h:mm',
        LTS: 'A h:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm',
        LLLL: 'dddd, D MMMM YYYY, A h:mm',
    },
    calendar: {
        sameDay: '[à½‘à½²à¼‹à½¢à½²à½„] LT',
        nextDay: '[à½¦à½„à¼‹à½‰à½²à½“] LT',
        nextWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½¢à¾—à½ºà½¦à¼‹à½˜], LT',
        lastDay: '[à½à¼‹à½¦à½„] LT',
        lastWeek: '[à½–à½‘à½´à½“à¼‹à½•à¾²à½‚à¼‹à½˜à½à½ à¼‹à½˜] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à½£à¼‹',
        past: '%s à½¦à¾”à½“à¼‹à½£',
        s: 'à½£à½˜à¼‹à½¦à½„',
        ss: '%d à½¦à¾à½¢à¼‹à½†à¼',
        m: 'à½¦à¾à½¢à¼‹à½˜à¼‹à½‚à½…à½²à½‚',
        mm: '%d à½¦à¾à½¢à¼‹à½˜',
        h: 'à½†à½´à¼‹à½šà½¼à½‘à¼‹à½‚à½…à½²à½‚',
        hh: '%d à½†à½´à¼‹à½šà½¼à½‘',
        d: 'à½‰à½²à½“à¼‹à½‚à½…à½²à½‚',
        dd: '%d à½‰à½²à½“à¼‹',
        M: 'à½Ÿà¾³à¼‹à½–à¼‹à½‚à½…à½²à½‚',
        MM: '%d à½Ÿà¾³à¼‹à½–',
        y: 'à½£à½¼à¼‹à½‚à½…à½²à½‚',
        yy: '%d à½£à½¼',
    },
    preparse: function (string) {
        return string.replace(/[à¼¡à¼¢à¼£à¼¤à¼¥à¼¦à¼§à¼¨à¼©à¼ ]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à½˜à½šà½“à¼‹à½˜à½¼|à½žà½¼à½‚à½¦à¼‹à½€à½¦|à½‰à½²à½“à¼‹à½‚à½´à½„|à½‘à½‚à½¼à½„à¼‹à½‘à½‚|à½˜à½šà½“à¼‹à½˜à½¼/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (
            (meridiem === 'à½˜à½šà½“à¼‹à½˜à½¼' && hour >= 4) ||
            (meridiem === 'à½‰à½²à½“à¼‹à½‚à½´à½„' && hour < 5) ||
            meridiem === 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚'
        ) {
            return hour + 12;
        } else {
            return hour;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à½˜à½šà½“à¼‹à½˜à½¼';
        } else if (hour < 10) {
            return 'à½žà½¼à½‚à½¦à¼‹à½€à½¦';
        } else if (hour < 17) {
            return 'à½‰à½²à½“à¼‹à½‚à½´à½„';
        } else if (hour < 20) {
            return 'à½‘à½‚à½¼à½„à¼‹à½‘à½‚';
        } else {
            return 'à½˜à½šà½“à¼‹à½˜à½¼';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Breton [br]
//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou

import moment from '../moment';

function relativeTimeWithMutation(number, withoutSuffix, key) {
    var format = {
        mm: 'munutenn',
        MM: 'miz',
        dd: 'devezh',
    };
    return number + ' ' + mutation(format[key], number);
}
function specialMutationForYears(number) {
    switch (lastNumber(number)) {
        case 1:
        case 3:
        case 4:
        case 5:
        case 9:
            return number + ' bloaz';
        default:
            return number + ' vloaz';
    }
}
function lastNumber(number) {
    if (number > 9) {
        return lastNumber(number % 10);
    }
    return number;
}
function mutation(text, number) {
    if (number === 2) {
        return softMutation(text);
    }
    return text;
}
function softMutation(text) {
    var mutationTable = {
        m: 'v',
        b: 'v',
        d: 'z',
    };
    if (mutationTable[text.charAt(0)] === undefined) {
        return text;
    }
    return mutationTable[text.charAt(0)] + text.substring(1);
}

var monthsParse = [
        /^gen/i,
        /^c[Ê¼\']hwe/i,
        /^meu/i,
        /^ebr/i,
        /^mae/i,
        /^(mez|eve)/i,
        /^gou/i,
        /^eos/i,
        /^gwe/i,
        /^her/i,
        /^du/i,
        /^ker/i,
    ],
    monthsRegex = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
    monthsStrictRegex = /^(genver|c[Ê¼\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
    monthsShortStrictRegex = /^(gen|c[Ê¼\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
    fullWeekdaysParse = [
        /^sul/i,
        /^lun/i,
        /^meurzh/i,
        /^merc[Ê¼\']her/i,
        /^yaou/i,
        /^gwener/i,
        /^sadorn/i,
    ],
    shortWeekdaysParse = [
        /^Sul/i,
        /^Lun/i,
        /^Meu/i,
        /^Mer/i,
        /^Yao/i,
        /^Gwe/i,
        /^Sad/i,
    ],
    minWeekdaysParse = [
        /^Su/i,
        /^Lu/i,
        /^Me([^r]|$)/i,
        /^Mer/i,
        /^Ya/i,
        /^Gw/i,
        /^Sa/i,
    ];

export default moment.defineLocale('br', {
    months: 'Genver_CÊ¼hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
        '_'
    ),
    monthsShort: 'Gen_CÊ¼hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
    weekdays: 'Sul_Lun_Meurzh_MercÊ¼her_Yaou_Gwener_Sadorn'.split('_'),
    weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
    weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
    weekdaysParse: minWeekdaysParse,
    fullWeekdaysParse: fullWeekdaysParse,
    shortWeekdaysParse: shortWeekdaysParse,
    minWeekdaysParse: minWeekdaysParse,

    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: monthsStrictRegex,
    monthsShortStrictRegex: monthsShortStrictRegex,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,

    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [a viz] MMMM YYYY',
        LLL: 'D [a viz] MMMM YYYY HH:mm',
        LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Hiziv da] LT',
        nextDay: '[WarcÊ¼hoazh da] LT',
        nextWeek: 'dddd [da] LT',
        lastDay: '[DecÊ¼h da] LT',
        lastWeek: 'dddd [paset da] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'a-benn %s',
        past: '%s Ê¼zo',
        s: 'un nebeud segondennoÃ¹',
        ss: '%d eilenn',
        m: 'ur vunutenn',
        mm: relativeTimeWithMutation,
        h: 'un eur',
        hh: '%d eur',
        d: 'un devezh',
        dd: relativeTimeWithMutation,
        M: 'ur miz',
        MM: relativeTimeWithMutation,
        y: 'ur bloaz',
        yy: specialMutationForYears,
    },
    dayOfMonthOrdinalParse: /\d{1,2}(aÃ±|vet)/,
    ordinal: function (number) {
        var output = number === 1 ? 'aÃ±' : 'vet';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
    meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
    isPM: function (token) {
        return token === 'g.m.';
    },
    meridiem: function (hour, minute, isLower) {
        return hour < 12 ? 'a.m.' : 'g.m.';
    },
});
//! moment.js locale configuration
//! locale : Bosnian [bs]
//! author : Nedim Cholich : https://github.com/frontyard
//! based on (hr) translation by Bojan MarkoviÄ‡

import moment from '../moment';

function translate(number, withoutSuffix, key) {
    var result = number + ' ';
    switch (key) {
        case 'ss':
            if (number === 1) {
                result += 'sekunda';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'sekunde';
            } else {
                result += 'sekundi';
            }
            return result;
        case 'm':
            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
        case 'mm':
            if (number === 1) {
                result += 'minuta';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'minute';
            } else {
                result += 'minuta';
            }
            return result;
        case 'h':
            return withoutSuffix ? 'jedan sat' : 'jednog sata';
        case 'hh':
            if (number === 1) {
                result += 'sat';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'sata';
            } else {
                result += 'sati';
            }
            return result;
        case 'dd':
            if (number === 1) {
                result += 'dan';
            } else {
                result += 'dana';
            }
            return result;
        case 'MM':
            if (number === 1) {
                result += 'mjesec';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'mjeseca';
            } else {
                result += 'mjeseci';
            }
            return result;
        case 'yy':
            if (number === 1) {
                result += 'godina';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'godine';
            } else {
                result += 'godina';
            }
            return result;
    }
}

export default moment.defineLocale('bs', {
    months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
        '_'
    ),
    weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd, D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[danas u] LT',
        nextDay: '[sutra u] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[u] [nedjelju] [u] LT';
                case 3:
                    return '[u] [srijedu] [u] LT';
                case 6:
                    return '[u] [subotu] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[u] dddd [u] LT';
            }
        },
        lastDay: '[juÄer u] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                    return '[proÅ¡lu] dddd [u] LT';
                case 6:
                    return '[proÅ¡le] [subote] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[proÅ¡li] dddd [u] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'prije %s',
        s: 'par sekundi',
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: 'dan',
        dd: translate,
        M: 'mjesec',
        MM: translate,
        y: 'godinu',
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Catalan [ca]
//! author : Juan G. Hurtado : https://github.com/juanghurtado

import moment from '../moment';

export default moment.defineLocale('ca', {
    months: {
        standalone: 'gener_febrer_marÃ§_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
            '_'
        ),
        format: "de gener_de febrer_de marÃ§_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
            '_'
        ),
        isFormat: /D[oD]?(\s)+MMMM/,
    },
    monthsShort: 'gen._febr._marÃ§_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
        '_'
    ),
    weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
    weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM [de] YYYY',
        ll: 'D MMM YYYY',
        LLL: 'D MMMM [de] YYYY [a les] H:mm',
        lll: 'D MMM YYYY, H:mm',
        LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
        llll: 'ddd D MMM YYYY, H:mm',
    },
    calendar: {
        sameDay: function () {
            return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
        },
        nextDay: function () {
            return '[demÃ  a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
        },
        lastDay: function () {
            return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [passat a ' +
                (this.hours() !== 1 ? 'les' : 'la') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: "d'aquÃ­ %s",
        past: 'fa %s',
        s: 'uns segons',
        ss: '%d segons',
        m: 'un minut',
        mm: '%d minuts',
        h: 'una hora',
        hh: '%d hores',
        d: 'un dia',
        dd: '%d dies',
        M: 'un mes',
        MM: '%d mesos',
        y: 'un any',
        yy: '%d anys',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
    ordinal: function (number, period) {
        var output =
            number === 1
                ? 'r'
                : number === 2
                ? 'n'
                : number === 3
                ? 'r'
                : number === 4
                ? 't'
                : 'Ã¨';
        if (period === 'w' || period === 'W') {
            output = 'a';
        }
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Czech [cs]
//! author : petrbela : https://github.com/petrbela

import moment from '../moment';

var months = 'leden_Ãºnor_bÅ™ezen_duben_kvÄ›ten_Äerven_Äervenec_srpen_zÃ¡Å™Ã­_Å™Ã­jen_listopad_prosinec'.split(
        '_'
    ),
    monthsShort = 'led_Ãºno_bÅ™e_dub_kvÄ›_Ävn_Ävc_srp_zÃ¡Å™_Å™Ã­j_lis_pro'.split('_'),
    monthsParse = [
        /^led/i,
        /^Ãºno/i,
        /^bÅ™e/i,
        /^dub/i,
        /^kvÄ›/i,
        /^(Ävn|Äerven$|Äervna)/i,
        /^(Ävc|Äervenec|Äervence)/i,
        /^srp/i,
        /^zÃ¡Å™/i,
        /^Å™Ã­j/i,
        /^lis/i,
        /^pro/i,
    ],
    // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
    // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
    monthsRegex = /^(leden|Ãºnor|bÅ™ezen|duben|kvÄ›ten|Äervenec|Äervence|Äerven|Äervna|srpen|zÃ¡Å™Ã­|Å™Ã­jen|listopad|prosinec|led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i;

function plural(n) {
    return n > 1 && n < 5 && ~~(n / 10) !== 1;
}
function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    switch (key) {
        case 's': // a few seconds / in a few seconds / a few seconds ago
            return withoutSuffix || isFuture ? 'pÃ¡r sekund' : 'pÃ¡r sekundami';
        case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'sekundy' : 'sekund');
            } else {
                return result + 'sekundami';
            }
        case 'm': // a minute / in a minute / a minute ago
            return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'minuty' : 'minut');
            } else {
                return result + 'minutami';
            }
        case 'h': // an hour / in an hour / an hour ago
            return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
        case 'hh': // 9 hours / in 9 hours / 9 hours ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'hodiny' : 'hodin');
            } else {
                return result + 'hodinami';
            }
        case 'd': // a day / in a day / a day ago
            return withoutSuffix || isFuture ? 'den' : 'dnem';
        case 'dd': // 9 days / in 9 days / 9 days ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'dny' : 'dnÃ­');
            } else {
                return result + 'dny';
            }
        case 'M': // a month / in a month / a month ago
            return withoutSuffix || isFuture ? 'mÄ›sÃ­c' : 'mÄ›sÃ­cem';
        case 'MM': // 9 months / in 9 months / 9 months ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'mÄ›sÃ­ce' : 'mÄ›sÃ­cÅ¯');
            } else {
                return result + 'mÄ›sÃ­ci';
            }
        case 'y': // a year / in a year / a year ago
            return withoutSuffix || isFuture ? 'rok' : 'rokem';
        case 'yy': // 9 years / in 9 years / 9 years ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'roky' : 'let');
            } else {
                return result + 'lety';
            }
    }
}

export default moment.defineLocale('cs', {
    months: months,
    monthsShort: monthsShort,
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    // NOTE: 'Äerven' is substring of 'Äervenec'; therefore 'Äervenec' must precede 'Äerven' in the regex to be fully matched.
    // Otherwise parser matches '1. Äervenec' as '1. Äerven' + 'ec'.
    monthsStrictRegex: /^(leden|ledna|Ãºnora|Ãºnor|bÅ™ezen|bÅ™ezna|duben|dubna|kvÄ›ten|kvÄ›tna|Äervenec|Äervence|Äerven|Äervna|srpen|srpna|zÃ¡Å™Ã­|Å™Ã­jen|Å™Ã­jna|listopadu|listopad|prosinec|prosince)/i,
    monthsShortStrictRegex: /^(led|Ãºno|bÅ™e|dub|kvÄ›|Ävn|Ävc|srp|zÃ¡Å™|Å™Ã­j|lis|pro)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'nedÄ›le_pondÄ›lÃ­_ÃºterÃ½_stÅ™eda_Ätvrtek_pÃ¡tek_sobota'.split('_'),
    weekdaysShort: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
    weekdaysMin: 'ne_po_Ãºt_st_Ät_pÃ¡_so'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd D. MMMM YYYY H:mm',
        l: 'D. M. YYYY',
    },
    calendar: {
        sameDay: '[dnes v] LT',
        nextDay: '[zÃ­tra v] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[v nedÄ›li v] LT';
                case 1:
                case 2:
                    return '[v] dddd [v] LT';
                case 3:
                    return '[ve stÅ™edu v] LT';
                case 4:
                    return '[ve Ätvrtek v] LT';
                case 5:
                    return '[v pÃ¡tek v] LT';
                case 6:
                    return '[v sobotu v] LT';
            }
        },
        lastDay: '[vÄera v] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[minulou nedÄ›li v] LT';
                case 1:
                case 2:
                    return '[minulÃ©] dddd [v] LT';
                case 3:
                    return '[minulou stÅ™edu v] LT';
                case 4:
                case 5:
                    return '[minulÃ½] dddd [v] LT';
                case 6:
                    return '[minulou sobotu v] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'pÅ™ed %s',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Chuvash [cv]
//! author : Anatoly Mironov : https://github.com/mirontoli

import moment from '../moment';

export default moment.defineLocale('cv', {
    months: 'ÐºÓ‘Ñ€Ð»Ð°Ñ‡_Ð½Ð°Ñ€Ó‘Ñ_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€Ñ‚Ð¼Ðµ_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€Ð»Ð°_Ð°Ð²Ó‘Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°ÑˆÑ‚Ð°Ð²'.split(
        '_'
    ),
    monthsShort: 'ÐºÓ‘Ñ€_Ð½Ð°Ñ€_Ð¿ÑƒÑˆ_Ð°ÐºÐ°_Ð¼Ð°Ð¹_Ò«Ó—Ñ€_ÑƒÑ‚Ó‘_Ò«ÑƒÑ€_Ð°Ð²Ð½_ÑŽÐ¿Ð°_Ñ‡Ó³Ðº_Ñ€Ð°Ñˆ'.split('_'),
    weekdays: 'Ð²Ñ‹Ñ€ÑÐ°Ñ€Ð½Ð¸ÐºÑƒÐ½_Ñ‚ÑƒÐ½Ñ‚Ð¸ÐºÑƒÐ½_Ñ‹Ñ‚Ð»Ð°Ñ€Ð¸ÐºÑƒÐ½_ÑŽÐ½ÐºÑƒÐ½_ÐºÓ—Ò«Ð½ÐµÑ€Ð½Ð¸ÐºÑƒÐ½_ÑÑ€Ð½ÐµÐºÑƒÐ½_ÑˆÓ‘Ð¼Ð°Ñ‚ÐºÑƒÐ½'.split(
        '_'
    ),
    weekdaysShort: 'Ð²Ñ‹Ñ€_Ñ‚ÑƒÐ½_Ñ‹Ñ‚Ð»_ÑŽÐ½_ÐºÓ—Ò«_ÑÑ€Ð½_ÑˆÓ‘Ð¼'.split('_'),
    weekdaysMin: 'Ð²Ñ€_Ñ‚Ð½_Ñ‹Ñ‚_ÑŽÐ½_ÐºÒ«_ÑÑ€_ÑˆÐ¼'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD-MM-YYYY',
        LL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—]',
        LLL: 'YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
        LLLL: 'dddd, YYYY [Ò«ÑƒÐ»Ñ…Ð¸] MMMM [ÑƒÐ¹Ó‘Ñ…Ó—Ð½] D[-Ð¼Ó—ÑˆÓ—], HH:mm',
    },
    calendar: {
        sameDay: '[ÐŸÐ°ÑÐ½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        nextDay: '[Ð«Ñ€Ð°Ð½] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        lastDay: '[Ó–Ð½ÐµÑ€] LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        nextWeek: '[ÒªÐ¸Ñ‚ÐµÑ] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        lastWeek: '[Ð˜Ñ€Ñ‚Ð½Ó—] dddd LT [ÑÐµÑ…ÐµÑ‚Ñ€Ðµ]',
        sameElse: 'L',
    },
    relativeTime: {
        future: function (output) {
            var affix = /ÑÐµÑ…ÐµÑ‚$/i.exec(output)
                ? 'Ñ€ÐµÐ½'
                : /Ò«ÑƒÐ»$/i.exec(output)
                ? 'Ñ‚Ð°Ð½'
                : 'Ñ€Ð°Ð½';
            return output + affix;
        },
        past: '%s ÐºÐ°ÑÐ»Ð»Ð°',
        s: 'Ð¿Ó—Ñ€-Ð¸Ðº Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
        ss: '%d Ò«ÐµÐºÐºÑƒÐ½Ñ‚',
        m: 'Ð¿Ó—Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
        mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
        h: 'Ð¿Ó—Ñ€ ÑÐµÑ…ÐµÑ‚',
        hh: '%d ÑÐµÑ…ÐµÑ‚',
        d: 'Ð¿Ó—Ñ€ ÐºÑƒÐ½',
        dd: '%d ÐºÑƒÐ½',
        M: 'Ð¿Ó—Ñ€ ÑƒÐ¹Ó‘Ñ…',
        MM: '%d ÑƒÐ¹Ó‘Ñ…',
        y: 'Ð¿Ó—Ñ€ Ò«ÑƒÐ»',
        yy: '%d Ò«ÑƒÐ»',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-Ð¼Ó—Ñˆ/,
    ordinal: '%d-Ð¼Ó—Ñˆ',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Welsh [cy]
//! author : Robert Allen : https://github.com/robgallen
//! author : https://github.com/ryangreaves

import moment from '../moment';

export default moment.defineLocale('cy', {
    months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
        '_'
    ),
    monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
        '_'
    ),
    weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
        '_'
    ),
    weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
    weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
    weekdaysParseExact: true,
    // time formats are the same as en-gb
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Heddiw am] LT',
        nextDay: '[Yfory am] LT',
        nextWeek: 'dddd [am] LT',
        lastDay: '[Ddoe am] LT',
        lastWeek: 'dddd [diwethaf am] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'mewn %s',
        past: '%s yn Ã´l',
        s: 'ychydig eiliadau',
        ss: '%d eiliad',
        m: 'munud',
        mm: '%d munud',
        h: 'awr',
        hh: '%d awr',
        d: 'diwrnod',
        dd: '%d diwrnod',
        M: 'mis',
        MM: '%d mis',
        y: 'blwyddyn',
        yy: '%d flynedd',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
    // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
    ordinal: function (number) {
        var b = number,
            output = '',
            lookup = [
                '',
                'af',
                'il',
                'ydd',
                'ydd',
                'ed',
                'ed',
                'ed',
                'fed',
                'fed',
                'fed', // 1af to 10fed
                'eg',
                'fed',
                'eg',
                'eg',
                'fed',
                'eg',
                'eg',
                'fed',
                'eg',
                'fed', // 11eg to 20fed
            ];
        if (b > 20) {
            if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
                output = 'fed'; // not 30ain, 70ain or 90ain
            } else {
                output = 'ain';
            }
        } else if (b > 0) {
            output = lookup[b];
        }
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Danish [da]
//! author : Ulrik Nielsen : https://github.com/mrbase

import moment from '../moment';

export default moment.defineLocale('da', {
    months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
    weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
    weekdaysShort: 'sÃ¸n_man_tir_ons_tor_fre_lÃ¸r'.split('_'),
    weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY HH:mm',
        LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
    },
    calendar: {
        sameDay: '[i dag kl.] LT',
        nextDay: '[i morgen kl.] LT',
        nextWeek: 'pÃ¥ dddd [kl.] LT',
        lastDay: '[i gÃ¥r kl.] LT',
        lastWeek: '[i] dddd[s kl.] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'om %s',
        past: '%s siden',
        s: 'fÃ¥ sekunder',
        ss: '%d sekunder',
        m: 'et minut',
        mm: '%d minutter',
        h: 'en time',
        hh: '%d timer',
        d: 'en dag',
        dd: '%d dage',
        M: 'en mÃ¥ned',
        MM: '%d mÃ¥neder',
        y: 'et Ã¥r',
        yy: '%d Ã¥r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : German (Austria) [de-at]
//! author : lluchs : https://github.com/lluchs
//! author: Menelion ElensÃºle: https://github.com/Oire
//! author : Martin Groller : https://github.com/MadMG
//! author : Mikolaj Dadela : https://github.com/mik01aj

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        m: ['eine Minute', 'einer Minute'],
        h: ['eine Stunde', 'einer Stunde'],
        d: ['ein Tag', 'einem Tag'],
        dd: [number + ' Tage', number + ' Tagen'],
        w: ['eine Woche', 'einer Woche'],
        M: ['ein Monat', 'einem Monat'],
        MM: [number + ' Monate', number + ' Monaten'],
        y: ['ein Jahr', 'einem Jahr'],
        yy: [number + ' Jahre', number + ' Jahren'],
    };
    return withoutSuffix ? format[key][0] : format[key][1];
}

export default moment.defineLocale('de-at', {
    months: 'JÃ¤nner_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
        '_'
    ),
    monthsShort: 'JÃ¤n._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
        '_'
    ),
    weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY HH:mm',
        LLLL: 'dddd, D. MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[heute um] LT [Uhr]',
        sameElse: 'L',
        nextDay: '[morgen um] LT [Uhr]',
        nextWeek: 'dddd [um] LT [Uhr]',
        lastDay: '[gestern um] LT [Uhr]',
        lastWeek: '[letzten] dddd [um] LT [Uhr]',
    },
    relativeTime: {
        future: 'in %s',
        past: 'vor %s',
        s: 'ein paar Sekunden',
        ss: '%d Sekunden',
        m: processRelativeTime,
        mm: '%d Minuten',
        h: processRelativeTime,
        hh: '%d Stunden',
        d: processRelativeTime,
        dd: processRelativeTime,
        w: processRelativeTime,
        ww: '%d Wochen',
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : German (Switzerland) [de-ch]
//! author : sschueller : https://github.com/sschueller

// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de#

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        m: ['eine Minute', 'einer Minute'],
        h: ['eine Stunde', 'einer Stunde'],
        d: ['ein Tag', 'einem Tag'],
        dd: [number + ' Tage', number + ' Tagen'],
        w: ['eine Woche', 'einer Woche'],
        M: ['ein Monat', 'einem Monat'],
        MM: [number + ' Monate', number + ' Monaten'],
        y: ['ein Jahr', 'einem Jahr'],
        yy: [number + ' Jahre', number + ' Jahren'],
    };
    return withoutSuffix ? format[key][0] : format[key][1];
}

export default moment.defineLocale('de-ch', {
    months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
        '_'
    ),
    monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
        '_'
    ),
    weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY HH:mm',
        LLLL: 'dddd, D. MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[heute um] LT [Uhr]',
        sameElse: 'L',
        nextDay: '[morgen um] LT [Uhr]',
        nextWeek: 'dddd [um] LT [Uhr]',
        lastDay: '[gestern um] LT [Uhr]',
        lastWeek: '[letzten] dddd [um] LT [Uhr]',
    },
    relativeTime: {
        future: 'in %s',
        past: 'vor %s',
        s: 'ein paar Sekunden',
        ss: '%d Sekunden',
        m: processRelativeTime,
        mm: '%d Minuten',
        h: processRelativeTime,
        hh: '%d Stunden',
        d: processRelativeTime,
        dd: processRelativeTime,
        w: processRelativeTime,
        ww: '%d Wochen',
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : German [de]
//! author : lluchs : https://github.com/lluchs
//! author: Menelion ElensÃºle: https://github.com/Oire
//! author : Mikolaj Dadela : https://github.com/mik01aj

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        m: ['eine Minute', 'einer Minute'],
        h: ['eine Stunde', 'einer Stunde'],
        d: ['ein Tag', 'einem Tag'],
        dd: [number + ' Tage', number + ' Tagen'],
        w: ['eine Woche', 'einer Woche'],
        M: ['ein Monat', 'einem Monat'],
        MM: [number + ' Monate', number + ' Monaten'],
        y: ['ein Jahr', 'einem Jahr'],
        yy: [number + ' Jahre', number + ' Jahren'],
    };
    return withoutSuffix ? format[key][0] : format[key][1];
}

export default moment.defineLocale('de', {
    months: 'Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
        '_'
    ),
    monthsShort: 'Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
        '_'
    ),
    weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY HH:mm',
        LLLL: 'dddd, D. MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[heute um] LT [Uhr]',
        sameElse: 'L',
        nextDay: '[morgen um] LT [Uhr]',
        nextWeek: 'dddd [um] LT [Uhr]',
        lastDay: '[gestern um] LT [Uhr]',
        lastWeek: '[letzten] dddd [um] LT [Uhr]',
    },
    relativeTime: {
        future: 'in %s',
        past: 'vor %s',
        s: 'ein paar Sekunden',
        ss: '%d Sekunden',
        m: processRelativeTime,
        mm: '%d Minuten',
        h: processRelativeTime,
        hh: '%d Stunden',
        d: processRelativeTime,
        dd: processRelativeTime,
        w: processRelativeTime,
        ww: '%d Wochen',
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Maldivian [dv]
//! author : Jawish Hameed : https://github.com/jawish

import moment from '../moment';

var months = [
        'Þ–Þ¬Þ‚ÞªÞ‡Þ¦ÞƒÞ©',
        'ÞŠÞ¬Þ„Þ°ÞƒÞªÞ‡Þ¦ÞƒÞ©',
        'Þ‰Þ§ÞƒÞ¨Þ—Þª',
        'Þ‡Þ­Þ•Þ°ÞƒÞ©ÞÞª',
        'Þ‰Þ­',
        'Þ–Þ«Þ‚Þ°',
        'Þ–ÞªÞÞ¦Þ‡Þ¨',
        'Þ‡Þ¯ÞŽÞ¦ÞÞ°Þ“Þª',
        'ÞÞ¬Þ•Þ°Þ“Þ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
        'Þ‡Þ®Þ†Þ°Þ“Þ¯Þ„Þ¦ÞƒÞª',
        'Þ‚Þ®ÞˆÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
        'Þ‘Þ¨ÞÞ¬Þ‰Þ°Þ„Þ¦ÞƒÞª',
    ],
    weekdays = [
        'Þ‡Þ§Þ‹Þ¨Þ‡Þ°ÞŒÞ¦',
        'Þ€Þ¯Þ‰Þ¦',
        'Þ‡Þ¦Þ‚Þ°ÞŽÞ§ÞƒÞ¦',
        'Þ„ÞªÞ‹Þ¦',
        'Þ„ÞªÞƒÞ§ÞÞ°ÞŠÞ¦ÞŒÞ¨',
        'Þ€ÞªÞ†ÞªÞƒÞª',
        'Þ€Þ®Þ‚Þ¨Þ€Þ¨ÞƒÞª',
    ];

export default moment.defineLocale('dv', {
    months: months,
    monthsShort: months,
    weekdays: weekdays,
    weekdaysShort: weekdays,
    weekdaysMin: 'Þ‡Þ§Þ‹Þ¨_Þ€Þ¯Þ‰Þ¦_Þ‡Þ¦Þ‚Þ°_Þ„ÞªÞ‹Þ¦_Þ„ÞªÞƒÞ§_Þ€ÞªÞ†Þª_Þ€Þ®Þ‚Þ¨'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'D/M/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /Þ‰Þ†|Þ‰ÞŠ/,
    isPM: function (input) {
        return 'Þ‰ÞŠ' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Þ‰Þ†';
        } else {
            return 'Þ‰ÞŠ';
        }
    },
    calendar: {
        sameDay: '[Þ‰Þ¨Þ‡Þ¦Þ‹Þª] LT',
        nextDay: '[Þ‰Þ§Þ‹Þ¦Þ‰Þ§] LT',
        nextWeek: 'dddd LT',
        lastDay: '[Þ‡Þ¨Þ‡Þ°Þ”Þ¬] LT',
        lastWeek: '[ÞŠÞ§Þ‡Þ¨ÞŒÞªÞˆÞ¨] dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ÞŒÞ¬ÞƒÞ­ÞŽÞ¦Þ‡Þ¨ %s',
        past: 'Þ†ÞªÞƒÞ¨Þ‚Þ° %s',
        s: 'ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞªÞ†Þ®Þ…Þ¬Þ‡Þ°',
        ss: 'd% ÞÞ¨Þ†ÞªÞ‚Þ°ÞŒÞª',
        m: 'Þ‰Þ¨Þ‚Þ¨Þ“Þ¬Þ‡Þ°',
        mm: 'Þ‰Þ¨Þ‚Þ¨Þ“Þª %d',
        h: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞ¬Þ‡Þ°',
        hh: 'ÞŽÞ¦Þ‘Þ¨Þ‡Þ¨ÞƒÞª %d',
        d: 'Þ‹ÞªÞˆÞ¦Þ€Þ¬Þ‡Þ°',
        dd: 'Þ‹ÞªÞˆÞ¦ÞÞ° %d',
        M: 'Þ‰Þ¦Þ€Þ¬Þ‡Þ°',
        MM: 'Þ‰Þ¦ÞÞ° %d',
        y: 'Þ‡Þ¦Þ€Þ¦ÞƒÞ¬Þ‡Þ°',
        yy: 'Þ‡Þ¦Þ€Þ¦ÞƒÞª %d',
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 7, // Sunday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Greek [el]
//! author : Aggelos Karalias : https://github.com/mehiel

import moment from '../moment';

function isFunction(input) {
    return (
        (typeof Function !== 'undefined' && input instanceof Function) ||
        Object.prototype.toString.call(input) === '[object Function]'
    );
}

export default moment.defineLocale('el', {
    monthsNominativeEl: 'Î™Î±Î½Î¿Ï…Î¬ÏÎ¹Î¿Ï‚_Î¦ÎµÎ²ÏÎ¿Ï…Î¬ÏÎ¹Î¿Ï‚_ÎœÎ¬ÏÏ„Î¹Î¿Ï‚_Î‘Ï€ÏÎ¯Î»Î¹Î¿Ï‚_ÎœÎ¬Î¹Î¿Ï‚_Î™Î¿ÏÎ½Î¹Î¿Ï‚_Î™Î¿ÏÎ»Î¹Î¿Ï‚_Î‘ÏÎ³Î¿Ï…ÏƒÏ„Î¿Ï‚_Î£ÎµÏ€Ï„Î­Î¼Î²ÏÎ¹Î¿Ï‚_ÎŸÎºÏ„ÏŽÎ²ÏÎ¹Î¿Ï‚_ÎÎ¿Î­Î¼Î²ÏÎ¹Î¿Ï‚_Î”ÎµÎºÎ­Î¼Î²ÏÎ¹Î¿Ï‚'.split(
        '_'
    ),
    monthsGenitiveEl: 'Î™Î±Î½Î¿Ï…Î±ÏÎ¯Î¿Ï…_Î¦ÎµÎ²ÏÎ¿Ï…Î±ÏÎ¯Î¿Ï…_ÎœÎ±ÏÏ„Î¯Î¿Ï…_Î‘Ï€ÏÎ¹Î»Î¯Î¿Ï…_ÎœÎ±ÎÎ¿Ï…_Î™Î¿Ï…Î½Î¯Î¿Ï…_Î™Î¿Ï…Î»Î¯Î¿Ï…_Î‘Ï…Î³Î¿ÏÏƒÏ„Î¿Ï…_Î£ÎµÏ€Ï„ÎµÎ¼Î²ÏÎ¯Î¿Ï…_ÎŸÎºÏ„Ï‰Î²ÏÎ¯Î¿Ï…_ÎÎ¿ÎµÎ¼Î²ÏÎ¯Î¿Ï…_Î”ÎµÎºÎµÎ¼Î²ÏÎ¯Î¿Ï…'.split(
        '_'
    ),
    months: function (momentToFormat, format) {
        if (!momentToFormat) {
            return this._monthsNominativeEl;
        } else if (
            typeof format === 'string' &&
            /D/.test(format.substring(0, format.indexOf('MMMM')))
        ) {
            // if there is a day number before 'MMMM'
            return this._monthsGenitiveEl[momentToFormat.month()];
        } else {
            return this._monthsNominativeEl[momentToFormat.month()];
        }
    },
    monthsShort: 'Î™Î±Î½_Î¦ÎµÎ²_ÎœÎ±Ï_Î‘Ï€Ï_ÎœÎ±ÏŠ_Î™Î¿Ï…Î½_Î™Î¿Ï…Î»_Î‘Ï…Î³_Î£ÎµÏ€_ÎŸÎºÏ„_ÎÎ¿Îµ_Î”ÎµÎº'.split('_'),
    weekdays: 'ÎšÏ…ÏÎ¹Î±ÎºÎ®_Î”ÎµÏ…Ï„Î­ÏÎ±_Î¤ÏÎ¯Ï„Î·_Î¤ÎµÏ„Î¬ÏÏ„Î·_Î Î­Î¼Ï€Ï„Î·_Î Î±ÏÎ±ÏƒÎºÎµÏ…Î®_Î£Î¬Î²Î²Î±Ï„Î¿'.split(
        '_'
    ),
    weekdaysShort: 'ÎšÏ…Ï_Î”ÎµÏ…_Î¤ÏÎ¹_Î¤ÎµÏ„_Î ÎµÎ¼_Î Î±Ï_Î£Î±Î²'.split('_'),
    weekdaysMin: 'ÎšÏ…_Î”Îµ_Î¤Ï_Î¤Îµ_Î Îµ_Î Î±_Î£Î±'.split('_'),
    meridiem: function (hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? 'Î¼Î¼' : 'ÎœÎœ';
        } else {
            return isLower ? 'Ï€Î¼' : 'Î Îœ';
        }
    },
    isPM: function (input) {
        return (input + '').toLowerCase()[0] === 'Î¼';
    },
    meridiemParse: /[Î Îœ]\.?Îœ?\.?/i,
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendarEl: {
        sameDay: '[Î£Î®Î¼ÎµÏÎ± {}] LT',
        nextDay: '[Î‘ÏÏÎ¹Î¿ {}] LT',
        nextWeek: 'dddd [{}] LT',
        lastDay: '[Î§Î¸ÎµÏ‚ {}] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 6:
                    return '[Ï„Î¿ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î¿] dddd [{}] LT';
                default:
                    return '[Ï„Î·Î½ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î·] dddd [{}] LT';
            }
        },
        sameElse: 'L',
    },
    calendar: function (key, mom) {
        var output = this._calendarEl[key],
            hours = mom && mom.hours();
        if (isFunction(output)) {
            output = output.apply(mom);
        }
        return output.replace('{}', hours % 12 === 1 ? 'ÏƒÏ„Î·' : 'ÏƒÏ„Î¹Ï‚');
    },
    relativeTime: {
        future: 'ÏƒÎµ %s',
        past: '%s Ï€ÏÎ¹Î½',
        s: 'Î»Î¯Î³Î± Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
        ss: '%d Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±',
        m: 'Î­Î½Î± Î»ÎµÏ€Ï„ÏŒ',
        mm: '%d Î»ÎµÏ€Ï„Î¬',
        h: 'Î¼Î¯Î± ÏŽÏÎ±',
        hh: '%d ÏŽÏÎµÏ‚',
        d: 'Î¼Î¯Î± Î¼Î­ÏÎ±',
        dd: '%d Î¼Î­ÏÎµÏ‚',
        M: 'Î­Î½Î±Ï‚ Î¼Î®Î½Î±Ï‚',
        MM: '%d Î¼Î®Î½ÎµÏ‚',
        y: 'Î­Î½Î±Ï‚ Ï‡ÏÏŒÎ½Î¿Ï‚',
        yy: '%d Ï‡ÏÏŒÎ½Î¹Î±',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Î·/,
    ordinal: '%dÎ·',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4st is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Australia) [en-au]
//! author : Jared Morse : https://github.com/jarcoal

import moment from '../moment';

export default moment.defineLocale('en-au', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Canada) [en-ca]
//! author : Jonathan Abourbih : https://github.com/jonbca

import moment from '../moment';

export default moment.defineLocale('en-ca', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'YYYY-MM-DD',
        LL: 'MMMM D, YYYY',
        LLL: 'MMMM D, YYYY h:mm A',
        LLLL: 'dddd, MMMM D, YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
});
//! moment.js locale configuration
//! locale : English (United Kingdom) [en-gb]
//! author : Chris Gedrim : https://github.com/chrisgedrim

import moment from '../moment';

export default moment.defineLocale('en-gb', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Ireland) [en-ie]
//! author : Chris Cartlidge : https://github.com/chriscartlidge

import moment from '../moment';

export default moment.defineLocale('en-ie', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Israel) [en-il]
//! author : Chris Gedrim : https://github.com/chrisgedrim

import moment from '../moment';

export default moment.defineLocale('en-il', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
});
//! moment.js locale configuration
//! locale : English (India) [en-in]
//! author : Jatin Agrawal : https://github.com/jatinag22

import moment from '../moment';

export default moment.defineLocale('en-in', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 1st is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (New Zealand) [en-nz]
//! author : Luke McGregor : https://github.com/lukemcgregor

import moment from '../moment';

export default moment.defineLocale('en-nz', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : English (Singapore) [en-sg]
//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension

import moment from '../moment';

export default moment.defineLocale('en-sg', {
    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
        '_'
    ),
    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Today at] LT',
        nextDay: '[Tomorrow at] LT',
        nextWeek: 'dddd [at] LT',
        lastDay: '[Yesterday at] LT',
        lastWeek: '[Last] dddd [at] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'in %s',
        past: '%s ago',
        s: 'a few seconds',
        ss: '%d seconds',
        m: 'a minute',
        mm: '%d minutes',
        h: 'an hour',
        hh: '%d hours',
        d: 'a day',
        dd: '%d days',
        M: 'a month',
        MM: '%d months',
        y: 'a year',
        yy: '%d years',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Esperanto [eo]
//! author : Colin Dean : https://github.com/colindean
//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
//! comment : miestasmia corrected the translation by colindean
//! comment : Vivakvo corrected the translation by colindean and miestasmia

import moment from '../moment';

export default moment.defineLocale('eo', {
    months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aÅ­g_sept_okt_nov_dec'.split('_'),
    weekdays: 'dimanÄ‰o_lundo_mardo_merkredo_ÄµaÅ­do_vendredo_sabato'.split('_'),
    weekdaysShort: 'dim_lun_mard_merk_ÄµaÅ­_ven_sab'.split('_'),
    weekdaysMin: 'di_lu_ma_me_Äµa_ve_sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: '[la] D[-an de] MMMM, YYYY',
        LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
        LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
        llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
    },
    meridiemParse: /[ap]\.t\.m/i,
    isPM: function (input) {
        return input.charAt(0).toLowerCase() === 'p';
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? 'p.t.m.' : 'P.T.M.';
        } else {
            return isLower ? 'a.t.m.' : 'A.T.M.';
        }
    },
    calendar: {
        sameDay: '[HodiaÅ­ je] LT',
        nextDay: '[MorgaÅ­ je] LT',
        nextWeek: 'dddd[n je] LT',
        lastDay: '[HieraÅ­ je] LT',
        lastWeek: '[pasintan] dddd[n je] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'post %s',
        past: 'antaÅ­ %s',
        s: 'kelkaj sekundoj',
        ss: '%d sekundoj',
        m: 'unu minuto',
        mm: '%d minutoj',
        h: 'unu horo',
        hh: '%d horoj',
        d: 'unu tago', //ne 'diurno', Ä‰ar estas uzita por proksimumo
        dd: '%d tagoj',
        M: 'unu monato',
        MM: '%d monatoj',
        y: 'unu jaro',
        yy: '%d jaroj',
    },
    dayOfMonthOrdinalParse: /\d{1,2}a/,
    ordinal: '%da',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Spanish (Dominican Republic) [es-do]

import moment from '../moment';

var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
        '_'
    ),
    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
    monthsParse = [
        /^ene/i,
        /^feb/i,
        /^mar/i,
        /^abr/i,
        /^may/i,
        /^jun/i,
        /^jul/i,
        /^ago/i,
        /^sep/i,
        /^oct/i,
        /^nov/i,
        /^dic/i,
    ],
    monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

export default moment.defineLocale('es-do', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortDot;
        } else if (/-MMM-/.test(format)) {
            return monthsShort[m.month()];
        } else {
            return monthsShortDot[m.month()];
        }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY h:mm A',
        LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
    },
    calendar: {
        sameDay: function () {
            return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastDay: function () {
            return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [pasado a la' +
                (this.hours() !== 1 ? 's' : '') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'en %s',
        past: 'hace %s',
        s: 'unos segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'una hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        w: 'una semana',
        ww: '%d semanas',
        M: 'un mes',
        MM: '%d meses',
        y: 'un aÃ±o',
        yy: '%d aÃ±os',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Spanish (Mexico) [es-mx]
//! author : JC Franco : https://github.com/jcfranco

import moment from '../moment';

var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
        '_'
    ),
    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
    monthsParse = [
        /^ene/i,
        /^feb/i,
        /^mar/i,
        /^abr/i,
        /^may/i,
        /^jun/i,
        /^jul/i,
        /^ago/i,
        /^sep/i,
        /^oct/i,
        /^nov/i,
        /^dic/i,
    ],
    monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

export default moment.defineLocale('es-mx', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortDot;
        } else if (/-MMM-/.test(format)) {
            return monthsShort[m.month()];
        } else {
            return monthsShortDot[m.month()];
        }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY H:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
    },
    calendar: {
        sameDay: function () {
            return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastDay: function () {
            return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [pasado a la' +
                (this.hours() !== 1 ? 's' : '') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'en %s',
        past: 'hace %s',
        s: 'unos segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'una hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        w: 'una semana',
        ww: '%d semanas',
        M: 'un mes',
        MM: '%d meses',
        y: 'un aÃ±o',
        yy: '%d aÃ±os',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
    invalidDate: 'Fecha invÃ¡lida',
});
//! moment.js locale configuration
//! locale : Spanish (United States) [es-us]
//! author : bustta : https://github.com/bustta
//! author : chrisrodz : https://github.com/chrisrodz

import moment from '../moment';

var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
        '_'
    ),
    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
    monthsParse = [
        /^ene/i,
        /^feb/i,
        /^mar/i,
        /^abr/i,
        /^may/i,
        /^jun/i,
        /^jul/i,
        /^ago/i,
        /^sep/i,
        /^oct/i,
        /^nov/i,
        /^dic/i,
    ],
    monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

export default moment.defineLocale('es-us', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortDot;
        } else if (/-MMM-/.test(format)) {
            return monthsShort[m.month()];
        } else {
            return monthsShortDot[m.month()];
        }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'MM/DD/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY h:mm A',
        LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
    },
    calendar: {
        sameDay: function () {
            return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastDay: function () {
            return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [pasado a la' +
                (this.hours() !== 1 ? 's' : '') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'en %s',
        past: 'hace %s',
        s: 'unos segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'una hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        w: 'una semana',
        ww: '%d semanas',
        M: 'un mes',
        MM: '%d meses',
        y: 'un aÃ±o',
        yy: '%d aÃ±os',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Spanish [es]
//! author : Julio NapurÃ­ : https://github.com/julionc

import moment from '../moment';

var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
        '_'
    ),
    monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
    monthsParse = [
        /^ene/i,
        /^feb/i,
        /^mar/i,
        /^abr/i,
        /^may/i,
        /^jun/i,
        /^jul/i,
        /^ago/i,
        /^sep/i,
        /^oct/i,
        /^nov/i,
        /^dic/i,
    ],
    monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;

export default moment.defineLocale('es', {
    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortDot;
        } else if (/-MMM-/.test(format)) {
            return monthsShort[m.month()];
        } else {
            return monthsShortDot[m.month()];
        }
    },
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
    monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._miÃ©._jue._vie._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mi_ju_vi_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY H:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
    },
    calendar: {
        sameDay: function () {
            return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±ana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastDay: function () {
            return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
        },
        lastWeek: function () {
            return (
                '[el] dddd [pasado a la' +
                (this.hours() !== 1 ? 's' : '') +
                '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'en %s',
        past: 'hace %s',
        s: 'unos segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'una hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        w: 'una semana',
        ww: '%d semanas',
        M: 'un mes',
        MM: '%d meses',
        y: 'un aÃ±o',
        yy: '%d aÃ±os',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
    invalidDate: 'Fecha invÃ¡lida',
});
//! moment.js locale configuration
//! locale : Estonian [et]
//! author : Henry Kehlmann : https://github.com/madhenry
//! improvements : Illimar Tambek : https://github.com/ragulka

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        s: ['mÃµne sekundi', 'mÃµni sekund', 'paar sekundit'],
        ss: [number + 'sekundi', number + 'sekundit'],
        m: ['Ã¼he minuti', 'Ã¼ks minut'],
        mm: [number + ' minuti', number + ' minutit'],
        h: ['Ã¼he tunni', 'tund aega', 'Ã¼ks tund'],
        hh: [number + ' tunni', number + ' tundi'],
        d: ['Ã¼he pÃ¤eva', 'Ã¼ks pÃ¤ev'],
        M: ['kuu aja', 'kuu aega', 'Ã¼ks kuu'],
        MM: [number + ' kuu', number + ' kuud'],
        y: ['Ã¼he aasta', 'aasta', 'Ã¼ks aasta'],
        yy: [number + ' aasta', number + ' aastat'],
    };
    if (withoutSuffix) {
        return format[key][2] ? format[key][2] : format[key][1];
    }
    return isFuture ? format[key][0] : format[key][1];
}

export default moment.defineLocale('et', {
    months: 'jaanuar_veebruar_mÃ¤rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
        '_'
    ),
    monthsShort: 'jaan_veebr_mÃ¤rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(
        '_'
    ),
    weekdays: 'pÃ¼hapÃ¤ev_esmaspÃ¤ev_teisipÃ¤ev_kolmapÃ¤ev_neljapÃ¤ev_reede_laupÃ¤ev'.split(
        '_'
    ),
    weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
    weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd, D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[TÃ¤na,] LT',
        nextDay: '[Homme,] LT',
        nextWeek: '[JÃ¤rgmine] dddd LT',
        lastDay: '[Eile,] LT',
        lastWeek: '[Eelmine] dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s pÃ¤rast',
        past: '%s tagasi',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: '%d pÃ¤eva',
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Basque [eu]
//! author : Eneko Illarramendi : https://github.com/eillarra

import moment from '../moment';

export default moment.defineLocale('eu', {
    months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
        '_'
    ),
    monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
        '_'
    ),
    weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
    weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'YYYY[ko] MMMM[ren] D[a]',
        LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
        LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
        l: 'YYYY-M-D',
        ll: 'YYYY[ko] MMM D[a]',
        lll: 'YYYY[ko] MMM D[a] HH:mm',
        llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
    },
    calendar: {
        sameDay: '[gaur] LT[etan]',
        nextDay: '[bihar] LT[etan]',
        nextWeek: 'dddd LT[etan]',
        lastDay: '[atzo] LT[etan]',
        lastWeek: '[aurreko] dddd LT[etan]',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s barru',
        past: 'duela %s',
        s: 'segundo batzuk',
        ss: '%d segundo',
        m: 'minutu bat',
        mm: '%d minutu',
        h: 'ordu bat',
        hh: '%d ordu',
        d: 'egun bat',
        dd: '%d egun',
        M: 'hilabete bat',
        MM: '%d hilabete',
        y: 'urte bat',
        yy: '%d urte',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Persian [fa]
//! author : Ebrahim Byagowi : https://github.com/ebraminio

import moment from '../moment';

var symbolMap = {
        1: 'Û±',
        2: 'Û²',
        3: 'Û³',
        4: 'Û´',
        5: 'Ûµ',
        6: 'Û¶',
        7: 'Û·',
        8: 'Û¸',
        9: 'Û¹',
        0: 'Û°',
    },
    numberMap = {
        'Û±': '1',
        'Û²': '2',
        'Û³': '3',
        'Û´': '4',
        'Ûµ': '5',
        'Û¶': '6',
        'Û·': '7',
        'Û¸': '8',
        'Û¹': '9',
        'Û°': '0',
    };

export default moment.defineLocale('fa', {
    months: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
        '_'
    ),
    monthsShort: 'Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±'.split(
        '_'
    ),
    weekdays: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
        '_'
    ),
    weekdaysShort: 'ÛŒÚ©\u200cØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡\u200cØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬\u200cØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡'.split(
        '_'
    ),
    weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ø¬_Ø´'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    meridiemParse: /Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±|Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/,
    isPM: function (input) {
        return /Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±';
        } else {
            return 'Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±';
        }
    },
    calendar: {
        sameDay: '[Ø§Ù…Ø±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
        nextDay: '[ÙØ±Ø¯Ø§ Ø³Ø§Ø¹Øª] LT',
        nextWeek: 'dddd [Ø³Ø§Ø¹Øª] LT',
        lastDay: '[Ø¯ÛŒØ±ÙˆØ² Ø³Ø§Ø¹Øª] LT',
        lastWeek: 'dddd [Ù¾ÛŒØ´] [Ø³Ø§Ø¹Øª] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ø¯Ø± %s',
        past: '%s Ù¾ÛŒØ´',
        s: 'Ú†Ù†Ø¯ Ø«Ø§Ù†ÛŒÙ‡',
        ss: '%d Ø«Ø§Ù†ÛŒÙ‡',
        m: 'ÛŒÚ© Ø¯Ù‚ÛŒÙ‚Ù‡',
        mm: '%d Ø¯Ù‚ÛŒÙ‚Ù‡',
        h: 'ÛŒÚ© Ø³Ø§Ø¹Øª',
        hh: '%d Ø³Ø§Ø¹Øª',
        d: 'ÛŒÚ© Ø±ÙˆØ²',
        dd: '%d Ø±ÙˆØ²',
        M: 'ÛŒÚ© Ù…Ø§Ù‡',
        MM: '%d Ù…Ø§Ù‡',
        y: 'ÛŒÚ© Ø³Ø§Ù„',
        yy: '%d Ø³Ø§Ù„',
    },
    preparse: function (string) {
        return string
            .replace(/[Û°-Û¹]/g, function (match) {
                return numberMap[match];
            })
            .replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    dayOfMonthOrdinalParse: /\d{1,2}Ù…/,
    ordinal: '%dÙ…',
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Finnish [fi]
//! author : Tarmo Aidantausta : https://github.com/bleadof

import moment from '../moment';

var numbersPast = 'nolla yksi kaksi kolme neljÃ¤ viisi kuusi seitsemÃ¤n kahdeksan yhdeksÃ¤n'.split(
        ' '
    ),
    numbersFuture = [
        'nolla',
        'yhden',
        'kahden',
        'kolmen',
        'neljÃ¤n',
        'viiden',
        'kuuden',
        numbersPast[7],
        numbersPast[8],
        numbersPast[9],
    ];
function translate(number, withoutSuffix, key, isFuture) {
    var result = '';
    switch (key) {
        case 's':
            return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
        case 'ss':
            result = isFuture ? 'sekunnin' : 'sekuntia';
            break;
        case 'm':
            return isFuture ? 'minuutin' : 'minuutti';
        case 'mm':
            result = isFuture ? 'minuutin' : 'minuuttia';
            break;
        case 'h':
            return isFuture ? 'tunnin' : 'tunti';
        case 'hh':
            result = isFuture ? 'tunnin' : 'tuntia';
            break;
        case 'd':
            return isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤';
        case 'dd':
            result = isFuture ? 'pÃ¤ivÃ¤n' : 'pÃ¤ivÃ¤Ã¤';
            break;
        case 'M':
            return isFuture ? 'kuukauden' : 'kuukausi';
        case 'MM':
            result = isFuture ? 'kuukauden' : 'kuukautta';
            break;
        case 'y':
            return isFuture ? 'vuoden' : 'vuosi';
        case 'yy':
            result = isFuture ? 'vuoden' : 'vuotta';
            break;
    }
    result = verbalNumber(number, isFuture) + ' ' + result;
    return result;
}
function verbalNumber(number, isFuture) {
    return number < 10
        ? isFuture
            ? numbersFuture[number]
            : numbersPast[number]
        : number;
}

export default moment.defineLocale('fi', {
    months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesÃ¤kuu_heinÃ¤kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
        '_'
    ),
    monthsShort: 'tammi_helmi_maalis_huhti_touko_kesÃ¤_heinÃ¤_elo_syys_loka_marras_joulu'.split(
        '_'
    ),
    weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
        '_'
    ),
    weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
    weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD.MM.YYYY',
        LL: 'Do MMMM[ta] YYYY',
        LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
        LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
        l: 'D.M.YYYY',
        ll: 'Do MMM YYYY',
        lll: 'Do MMM YYYY, [klo] HH.mm',
        llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
    },
    calendar: {
        sameDay: '[tÃ¤nÃ¤Ã¤n] [klo] LT',
        nextDay: '[huomenna] [klo] LT',
        nextWeek: 'dddd [klo] LT',
        lastDay: '[eilen] [klo] LT',
        lastWeek: '[viime] dddd[na] [klo] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s pÃ¤Ã¤stÃ¤',
        past: '%s sitten',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Filipino [fil]
//! author : Dan Hagman : https://github.com/hagmandan
//! author : Matthew Co : https://github.com/matthewdeeco

import moment from '../moment';

export default moment.defineLocale('fil', {
    months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
        '_'
    ),
    monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
    weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
        '_'
    ),
    weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
    weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'MM/D/YYYY',
        LL: 'MMMM D, YYYY',
        LLL: 'MMMM D, YYYY HH:mm',
        LLLL: 'dddd, MMMM DD, YYYY HH:mm',
    },
    calendar: {
        sameDay: 'LT [ngayong araw]',
        nextDay: '[Bukas ng] LT',
        nextWeek: 'LT [sa susunod na] dddd',
        lastDay: 'LT [kahapon]',
        lastWeek: 'LT [noong nakaraang] dddd',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'sa loob ng %s',
        past: '%s ang nakalipas',
        s: 'ilang segundo',
        ss: '%d segundo',
        m: 'isang minuto',
        mm: '%d minuto',
        h: 'isang oras',
        hh: '%d oras',
        d: 'isang araw',
        dd: '%d araw',
        M: 'isang buwan',
        MM: '%d buwan',
        y: 'isang taon',
        yy: '%d taon',
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: function (number) {
        return number;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Faroese [fo]
//! author : Ragnar Johannesen : https://github.com/ragnar123
//! author : Kristian Sakarisson : https://github.com/sakarisson

import moment from '../moment';

export default moment.defineLocale('fo', {
    months: 'januar_februar_mars_aprÃ­l_mai_juni_juli_august_september_oktober_november_desember'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
    weekdays: 'sunnudagur_mÃ¡nadagur_tÃ½sdagur_mikudagur_hÃ³sdagur_frÃ­ggjadagur_leygardagur'.split(
        '_'
    ),
    weekdaysShort: 'sun_mÃ¡n_tÃ½s_mik_hÃ³s_frÃ­_ley'.split('_'),
    weekdaysMin: 'su_mÃ¡_tÃ½_mi_hÃ³_fr_le'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D. MMMM, YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ã dag kl.] LT',
        nextDay: '[Ã morgin kl.] LT',
        nextWeek: 'dddd [kl.] LT',
        lastDay: '[Ã gjÃ¡r kl.] LT',
        lastWeek: '[sÃ­Ã°stu] dddd [kl] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'um %s',
        past: '%s sÃ­Ã°ani',
        s: 'fÃ¡ sekund',
        ss: '%d sekundir',
        m: 'ein minuttur',
        mm: '%d minuttir',
        h: 'ein tÃ­mi',
        hh: '%d tÃ­mar',
        d: 'ein dagur',
        dd: '%d dagar',
        M: 'ein mÃ¡naÃ°ur',
        MM: '%d mÃ¡naÃ°ir',
        y: 'eitt Ã¡r',
        yy: '%d Ã¡r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : French (Canada) [fr-ca]
//! author : Jonathan Abourbih : https://github.com/jonbca

import moment from '../moment';

export default moment.defineLocale('fr-ca', {
    months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
        '_'
    ),
    monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Aujourdâ€™hui Ã ] LT',
        nextDay: '[Demain Ã ] LT',
        nextWeek: 'dddd [Ã ] LT',
        lastDay: '[Hier Ã ] LT',
        lastWeek: 'dddd [dernier Ã ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dans %s',
        past: 'il y a %s',
        s: 'quelques secondes',
        ss: '%d secondes',
        m: 'une minute',
        mm: '%d minutes',
        h: 'une heure',
        hh: '%d heures',
        d: 'un jour',
        dd: '%d jours',
        M: 'un mois',
        MM: '%d mois',
        y: 'un an',
        yy: '%d ans',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
    ordinal: function (number, period) {
        switch (period) {
            // Words with masculine grammatical gender: mois, trimestre, jour
            default:
            case 'M':
            case 'Q':
            case 'D':
            case 'DDD':
            case 'd':
                return number + (number === 1 ? 'er' : 'e');

            // Words with feminine grammatical gender: semaine
            case 'w':
            case 'W':
                return number + (number === 1 ? 're' : 'e');
        }
    },
});
//! moment.js locale configuration
//! locale : French (Switzerland) [fr-ch]
//! author : Gaspard Bucher : https://github.com/gaspard

import moment from '../moment';

export default moment.defineLocale('fr-ch', {
    months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
        '_'
    ),
    monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Aujourdâ€™hui Ã ] LT',
        nextDay: '[Demain Ã ] LT',
        nextWeek: 'dddd [Ã ] LT',
        lastDay: '[Hier Ã ] LT',
        lastWeek: 'dddd [dernier Ã ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dans %s',
        past: 'il y a %s',
        s: 'quelques secondes',
        ss: '%d secondes',
        m: 'une minute',
        mm: '%d minutes',
        h: 'une heure',
        hh: '%d heures',
        d: 'un jour',
        dd: '%d jours',
        M: 'un mois',
        MM: '%d mois',
        y: 'un an',
        yy: '%d ans',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
    ordinal: function (number, period) {
        switch (period) {
            // Words with masculine grammatical gender: mois, trimestre, jour
            default:
            case 'M':
            case 'Q':
            case 'D':
            case 'DDD':
            case 'd':
                return number + (number === 1 ? 'er' : 'e');

            // Words with feminine grammatical gender: semaine
            case 'w':
            case 'W':
                return number + (number === 1 ? 're' : 'e');
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : French [fr]
//! author : John Fischer : https://github.com/jfroffice

import moment from '../moment';

var monthsStrictRegex = /^(janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
    monthsShortStrictRegex = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?)/i,
    monthsRegex = /(janv\.?|fÃ©vr\.?|mars|avr\.?|mai|juin|juil\.?|aoÃ»t|sept\.?|oct\.?|nov\.?|dÃ©c\.?|janvier|fÃ©vrier|mars|avril|mai|juin|juillet|aoÃ»t|septembre|octobre|novembre|dÃ©cembre)/i,
    monthsParse = [
        /^janv/i,
        /^fÃ©vr/i,
        /^mars/i,
        /^avr/i,
        /^mai/i,
        /^juin/i,
        /^juil/i,
        /^aoÃ»t/i,
        /^sept/i,
        /^oct/i,
        /^nov/i,
        /^dÃ©c/i,
    ];

export default moment.defineLocale('fr', {
    months: 'janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre'.split(
        '_'
    ),
    monthsShort: 'janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.'.split(
        '_'
    ),
    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: monthsStrictRegex,
    monthsShortStrictRegex: monthsShortStrictRegex,
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Aujourdâ€™hui Ã ] LT',
        nextDay: '[Demain Ã ] LT',
        nextWeek: 'dddd [Ã ] LT',
        lastDay: '[Hier Ã ] LT',
        lastWeek: 'dddd [dernier Ã ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dans %s',
        past: 'il y a %s',
        s: 'quelques secondes',
        ss: '%d secondes',
        m: 'une minute',
        mm: '%d minutes',
        h: 'une heure',
        hh: '%d heures',
        d: 'un jour',
        dd: '%d jours',
        w: 'une semaine',
        ww: '%d semaines',
        M: 'un mois',
        MM: '%d mois',
        y: 'un an',
        yy: '%d ans',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
    ordinal: function (number, period) {
        switch (period) {
            // TODO: Return 'e' when day of month > 1. Move this case inside
            // block for masculine words below.
            // See https://github.com/moment/moment/issues/3375
            case 'D':
                return number + (number === 1 ? 'er' : '');

            // Words with masculine grammatical gender: mois, trimestre, jour
            default:
            case 'M':
            case 'Q':
            case 'DDD':
            case 'd':
                return number + (number === 1 ? 'er' : 'e');

            // Words with feminine grammatical gender: semaine
            case 'w':
            case 'W':
                return number + (number === 1 ? 're' : 'e');
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Frisian [fy]
//! author : Robin van der Vliet : https://github.com/robin0van0der0v

import moment from '../moment';

var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(
        '_'
    ),
    monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(
        '_'
    );

export default moment.defineLocale('fy', {
    months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortWithDots;
        } else if (/-MMM-/.test(format)) {
            return monthsShortWithoutDots[m.month()];
        } else {
            return monthsShortWithDots[m.month()];
        }
    },
    monthsParseExact: true,
    weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
        '_'
    ),
    weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
    weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD-MM-YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[hjoed om] LT',
        nextDay: '[moarn om] LT',
        nextWeek: 'dddd [om] LT',
        lastDay: '[juster om] LT',
        lastWeek: '[Ã´frÃ»ne] dddd [om] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'oer %s',
        past: '%s lyn',
        s: 'in pear sekonden',
        ss: '%d sekonden',
        m: 'ien minÃºt',
        mm: '%d minuten',
        h: 'ien oere',
        hh: '%d oeren',
        d: 'ien dei',
        dd: '%d dagen',
        M: 'ien moanne',
        MM: '%d moannen',
        y: 'ien jier',
        yy: '%d jierren',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function (number) {
        return (
            number +
            (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
        );
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Irish or Irish Gaelic [ga]
//! author : AndrÃ© Silva : https://github.com/askpt

import moment from '../moment';

var months = [
        'EanÃ¡ir',
        'Feabhra',
        'MÃ¡rta',
        'AibreÃ¡n',
        'Bealtaine',
        'Meitheamh',
        'IÃºil',
        'LÃºnasa',
        'MeÃ¡n FÃ³mhair',
        'Deireadh FÃ³mhair',
        'Samhain',
        'Nollaig',
    ],
    monthsShort = [
        'Ean',
        'Feabh',
        'MÃ¡rt',
        'Aib',
        'Beal',
        'Meith',
        'IÃºil',
        'LÃºn',
        'M.F.',
        'D.F.',
        'Samh',
        'Noll',
    ],
    weekdays = [
        'DÃ© Domhnaigh',
        'DÃ© Luain',
        'DÃ© MÃ¡irt',
        'DÃ© CÃ©adaoin',
        'DÃ©ardaoin',
        'DÃ© hAoine',
        'DÃ© Sathairn',
    ],
    weekdaysShort = ['Domh', 'Luan', 'MÃ¡irt', 'CÃ©ad', 'DÃ©ar', 'Aoine', 'Sath'],
    weekdaysMin = ['Do', 'Lu', 'MÃ¡', 'CÃ©', 'DÃ©', 'A', 'Sa'];

export default moment.defineLocale('ga', {
    months: months,
    monthsShort: monthsShort,
    monthsParseExact: true,
    weekdays: weekdays,
    weekdaysShort: weekdaysShort,
    weekdaysMin: weekdaysMin,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Inniu ag] LT',
        nextDay: '[AmÃ¡rach ag] LT',
        nextWeek: 'dddd [ag] LT',
        lastDay: '[InnÃ© ag] LT',
        lastWeek: 'dddd [seo caite] [ag] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'i %s',
        past: '%s Ã³ shin',
        s: 'cÃºpla soicind',
        ss: '%d soicind',
        m: 'nÃ³imÃ©ad',
        mm: '%d nÃ³imÃ©ad',
        h: 'uair an chloig',
        hh: '%d uair an chloig',
        d: 'lÃ¡',
        dd: '%d lÃ¡',
        M: 'mÃ­',
        MM: '%d mÃ­onna',
        y: 'bliain',
        yy: '%d bliain',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
    ordinal: function (number) {
        var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Scottish Gaelic [gd]
//! author : Jon Ashdown : https://github.com/jonashdown

import moment from '../moment';

var months = [
        'Am Faoilleach',
        'An Gearran',
        'Am MÃ rt',
        'An Giblean',
        'An CÃ¨itean',
        'An t-Ã’gmhios',
        'An t-Iuchar',
        'An LÃ¹nastal',
        'An t-Sultain',
        'An DÃ mhair',
        'An t-Samhain',
        'An DÃ¹bhlachd',
    ],
    monthsShort = [
        'Faoi',
        'Gear',
        'MÃ rt',
        'Gibl',
        'CÃ¨it',
        'Ã’gmh',
        'Iuch',
        'LÃ¹n',
        'Sult',
        'DÃ mh',
        'Samh',
        'DÃ¹bh',
    ],
    weekdays = [
        'DidÃ²mhnaich',
        'Diluain',
        'DimÃ irt',
        'Diciadain',
        'Diardaoin',
        'Dihaoine',
        'Disathairne',
    ],
    weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
    weekdaysMin = ['DÃ²', 'Lu', 'MÃ ', 'Ci', 'Ar', 'Ha', 'Sa'];

export default moment.defineLocale('gd', {
    months: months,
    monthsShort: monthsShort,
    monthsParseExact: true,
    weekdays: weekdays,
    weekdaysShort: weekdaysShort,
    weekdaysMin: weekdaysMin,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[An-diugh aig] LT',
        nextDay: '[A-mÃ ireach aig] LT',
        nextWeek: 'dddd [aig] LT',
        lastDay: '[An-dÃ¨ aig] LT',
        lastWeek: 'dddd [seo chaidh] [aig] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'ann an %s',
        past: 'bho chionn %s',
        s: 'beagan diogan',
        ss: '%d diogan',
        m: 'mionaid',
        mm: '%d mionaidean',
        h: 'uair',
        hh: '%d uairean',
        d: 'latha',
        dd: '%d latha',
        M: 'mÃ¬os',
        MM: '%d mÃ¬osan',
        y: 'bliadhna',
        yy: '%d bliadhna',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
    ordinal: function (number) {
        var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Galician [gl]
//! author : Juan G. Hurtado : https://github.com/juanghurtado

import moment from '../moment';

export default moment.defineLocale('gl', {
    months: 'xaneiro_febreiro_marzo_abril_maio_xuÃ±o_xullo_agosto_setembro_outubro_novembro_decembro'.split(
        '_'
    ),
    monthsShort: 'xan._feb._mar._abr._mai._xuÃ±._xul._ago._set._out._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'domingo_luns_martes_mÃ©rcores_xoves_venres_sÃ¡bado'.split('_'),
    weekdaysShort: 'dom._lun._mar._mÃ©r._xov._ven._sÃ¡b.'.split('_'),
    weekdaysMin: 'do_lu_ma_mÃ©_xo_ve_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY H:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
    },
    calendar: {
        sameDay: function () {
            return '[hoxe ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
        },
        nextDay: function () {
            return '[maÃ±Ã¡ ' + (this.hours() !== 1 ? 'Ã¡s' : 'Ã¡') + '] LT';
        },
        nextWeek: function () {
            return 'dddd [' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT';
        },
        lastDay: function () {
            return '[onte ' + (this.hours() !== 1 ? 'Ã¡' : 'a') + '] LT';
        },
        lastWeek: function () {
            return (
                '[o] dddd [pasado ' + (this.hours() !== 1 ? 'Ã¡s' : 'a') + '] LT'
            );
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: function (str) {
            if (str.indexOf('un') === 0) {
                return 'n' + str;
            }
            return 'en ' + str;
        },
        past: 'hai %s',
        s: 'uns segundos',
        ss: '%d segundos',
        m: 'un minuto',
        mm: '%d minutos',
        h: 'unha hora',
        hh: '%d horas',
        d: 'un dÃ­a',
        dd: '%d dÃ­as',
        M: 'un mes',
        MM: '%d meses',
        y: 'un ano',
        yy: '%d anos',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Konkani Devanagari script [gom-deva]
//! author : The Discoverer : https://github.com/WikiDiscoverer

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        s: ['à¤¥à¥‹à¤¡à¤¯à¤¾ à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', 'à¤¥à¥‹à¤¡à¥‡ à¤¸à¥…à¤•à¤‚à¤¡'],
        ss: [number + ' à¤¸à¥…à¤•à¤‚à¤¡à¤¾à¤‚à¤¨à¥€', number + ' à¤¸à¥…à¤•à¤‚à¤¡'],
        m: ['à¤à¤•à¤¾ à¤®à¤¿à¤£à¤Ÿà¤¾à¤¨', 'à¤à¤• à¤®à¤¿à¤¨à¥‚à¤Ÿ'],
        mm: [number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚à¤¨à¥€', number + ' à¤®à¤¿à¤£à¤Ÿà¤¾à¤‚'],
        h: ['à¤à¤•à¤¾ à¤µà¤°à¤¾à¤¨', 'à¤à¤• à¤µà¤°'],
        hh: [number + ' à¤µà¤°à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¤¾à¤‚'],
        d: ['à¤à¤•à¤¾ à¤¦à¤¿à¤¸à¤¾à¤¨', 'à¤à¤• à¤¦à¥€à¤¸'],
        dd: [number + ' à¤¦à¤¿à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤¦à¥€à¤¸'],
        M: ['à¤à¤•à¤¾ à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨', 'à¤à¤• à¤®à¥à¤¹à¤¯à¤¨à¥‹'],
        MM: [number + ' à¤®à¥à¤¹à¤¯à¤¨à¥à¤¯à¤¾à¤¨à¥€', number + ' à¤®à¥à¤¹à¤¯à¤¨à¥‡'],
        y: ['à¤à¤•à¤¾ à¤µà¤°à¥à¤¸à¤¾à¤¨', 'à¤à¤• à¤µà¤°à¥à¤¸'],
        yy: [number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚à¤¨à¥€', number + ' à¤µà¤°à¥à¤¸à¤¾à¤‚'],
    };
    return isFuture ? format[key][0] : format[key][1];
}

export default moment.defineLocale('gom-deva', {
    months: {
        standalone: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¯_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
            '_'
        ),
        format: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€à¤šà¥à¤¯à¤¾_à¤®à¤¾à¤°à¥à¤šà¤¾à¤šà¥à¤¯à¤¾_à¤à¤ªà¥à¤°à¥€à¤²à¤¾à¤šà¥à¤¯à¤¾_à¤®à¥‡à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥‚à¤¨à¤¾à¤šà¥à¤¯à¤¾_à¤œà¥à¤²à¤¯à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤—à¤¸à¥à¤Ÿà¤¾à¤šà¥à¤¯à¤¾_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°à¤¾à¤šà¥à¤¯à¤¾'.split(
            '_'
        ),
        isFormat: /MMMM(\s)+D[oD]?/,
    },
    monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¥€._à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à¤†à¤¯à¤¤à¤¾à¤°_à¤¸à¥‹à¤®à¤¾à¤°_à¤®à¤‚à¤—à¤³à¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤¬à¤¿à¤°à¥‡à¤¸à¥à¤¤à¤¾à¤°_à¤¸à¥à¤•à¥à¤°à¤¾à¤°_à¤¶à¥‡à¤¨à¤µà¤¾à¤°'.split('_'),
    weekdaysShort: 'à¤†à¤¯à¤¤._à¤¸à¥‹à¤®._à¤®à¤‚à¤—à¤³._à¤¬à¥à¤§._à¤¬à¥à¤°à¥‡à¤¸à¥à¤¤._à¤¸à¥à¤•à¥à¤°._à¤¶à¥‡à¤¨.'.split('_'),
    weekdaysMin: 'à¤†_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤¬à¥à¤°à¥‡_à¤¸à¥_à¤¶à¥‡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        LTS: 'A h:mm:ss [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        L: 'DD-MM-YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        LLLL: 'dddd, MMMM Do, YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
        llll: 'ddd, D MMM YYYY, A h:mm [à¤µà¤¾à¤œà¤¤à¤¾à¤‚]',
    },
    calendar: {
        sameDay: '[à¤†à¤¯à¤œ] LT',
        nextDay: '[à¤«à¤¾à¤²à¥à¤¯à¤¾à¤‚] LT',
        nextWeek: '[à¤«à¥à¤¡à¤²à¥‹] dddd[,] LT',
        lastDay: '[à¤•à¤¾à¤²] LT',
        lastWeek: '[à¤«à¤¾à¤Ÿà¤²à¥‹] dddd[,] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s',
        past: '%s à¤†à¤¦à¥€à¤‚',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: processRelativeTime,
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}(à¤µà¥‡à¤°)/,
    ordinal: function (number, period) {
        switch (period) {
            // the ordinal 'à¤µà¥‡à¤°' only applies to day of the month
            case 'D':
                return number + 'à¤µà¥‡à¤°';
            default:
            case 'M':
            case 'Q':
            case 'DDD':
            case 'd':
            case 'w':
            case 'W':
                return number;
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week
        doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
    },
    meridiemParse: /à¤°à¤¾à¤¤à¥€|à¤¸à¤•à¤¾à¤³à¥€à¤‚|à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚|à¤¸à¤¾à¤‚à¤œà¥‡/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¤°à¤¾à¤¤à¥€') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¤¸à¤•à¤¾à¤³à¥€à¤‚') {
            return hour;
        } else if (meridiem === 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚') {
            return hour > 12 ? hour : hour + 12;
        } else if (meridiem === 'à¤¸à¤¾à¤‚à¤œà¥‡') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¤°à¤¾à¤¤à¥€';
        } else if (hour < 12) {
            return 'à¤¸à¤•à¤¾à¤³à¥€à¤‚';
        } else if (hour < 16) {
            return 'à¤¦à¤¨à¤ªà¤¾à¤°à¤¾à¤‚';
        } else if (hour < 20) {
            return 'à¤¸à¤¾à¤‚à¤œà¥‡';
        } else {
            return 'à¤°à¤¾à¤¤à¥€';
        }
    },
});
//! moment.js locale configuration
//! locale : Konkani Latin script [gom-latn]
//! author : The Discoverer : https://github.com/WikiDiscoverer

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        s: ['thoddea sekondamni', 'thodde sekond'],
        ss: [number + ' sekondamni', number + ' sekond'],
        m: ['eka mintan', 'ek minut'],
        mm: [number + ' mintamni', number + ' mintam'],
        h: ['eka voran', 'ek vor'],
        hh: [number + ' voramni', number + ' voram'],
        d: ['eka disan', 'ek dis'],
        dd: [number + ' disamni', number + ' dis'],
        M: ['eka mhoinean', 'ek mhoino'],
        MM: [number + ' mhoineamni', number + ' mhoine'],
        y: ['eka vorsan', 'ek voros'],
        yy: [number + ' vorsamni', number + ' vorsam'],
    };
    return isFuture ? format[key][0] : format[key][1];
}

export default moment.defineLocale('gom-latn', {
    months: {
        standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
            '_'
        ),
        format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
            '_'
        ),
        isFormat: /MMMM(\s)+D[oD]?/,
    },
    monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
    weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
    weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'A h:mm [vazta]',
        LTS: 'A h:mm:ss [vazta]',
        L: 'DD-MM-YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY A h:mm [vazta]',
        LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
        llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
    },
    calendar: {
        sameDay: '[Aiz] LT',
        nextDay: '[Faleam] LT',
        nextWeek: '[Fuddlo] dddd[,] LT',
        lastDay: '[Kal] LT',
        lastWeek: '[Fattlo] dddd[,] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s',
        past: '%s adim',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: processRelativeTime,
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}(er)/,
    ordinal: function (number, period) {
        switch (period) {
            // the ordinal 'er' only applies to day of the month
            case 'D':
                return number + 'er';
            default:
            case 'M':
            case 'Q':
            case 'DDD':
            case 'd':
            case 'w':
            case 'W':
                return number;
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week
        doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
    },
    meridiemParse: /rati|sokallim|donparam|sanje/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'rati') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'sokallim') {
            return hour;
        } else if (meridiem === 'donparam') {
            return hour > 12 ? hour : hour + 12;
        } else if (meridiem === 'sanje') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'rati';
        } else if (hour < 12) {
            return 'sokallim';
        } else if (hour < 16) {
            return 'donparam';
        } else if (hour < 20) {
            return 'sanje';
        } else {
            return 'rati';
        }
    },
});
//! moment.js locale configuration
//! locale : Gujarati [gu]
//! author : Kaushik Thanki : https://github.com/Kaushik1987

import moment from '../moment';

var symbolMap = {
        1: 'à«§',
        2: 'à«¨',
        3: 'à«©',
        4: 'à«ª',
        5: 'à««',
        6: 'à«¬',
        7: 'à«­',
        8: 'à«®',
        9: 'à«¯',
        0: 'à«¦',
    },
    numberMap = {
        'à«§': '1',
        'à«¨': '2',
        'à«©': '3',
        'à«ª': '4',
        'à««': '5',
        'à«¬': '6',
        'à«­': '7',
        'à«®': '8',
        'à«¯': '9',
        'à«¦': '0',
    };

export default moment.defineLocale('gu', {
    months: 'àªœàª¾àª¨à«àª¯à«àª†àª°à«€_àª«à«‡àª¬à«àª°à«àª†àª°à«€_àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿àª²_àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾àªˆ_àª‘àª—àª¸à«àªŸ_àª¸àªªà«àªŸà«‡àª®à«àª¬àª°_àª‘àª•à«àªŸà«àª¬àª°_àª¨àªµà«‡àª®à«àª¬àª°_àª¡àª¿àª¸à«‡àª®à«àª¬àª°'.split(
        '_'
    ),
    monthsShort: 'àªœàª¾àª¨à«àª¯à«._àª«à«‡àª¬à«àª°à«._àª®àª¾àª°à«àªš_àªàªªà«àª°àª¿._àª®à«‡_àªœà«‚àª¨_àªœà«àª²àª¾._àª‘àª—._àª¸àªªà«àªŸà«‡._àª‘àª•à«àªŸà«._àª¨àªµà«‡._àª¡àª¿àª¸à«‡.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'àª°àªµàª¿àªµàª¾àª°_àª¸à«‹àª®àªµàª¾àª°_àª®àª‚àª—àª³àªµàª¾àª°_àª¬à«àª§à«àªµàª¾àª°_àª—à«àª°à«àªµàª¾àª°_àª¶à«àª•à«àª°àªµàª¾àª°_àª¶àª¨àª¿àªµàª¾àª°'.split(
        '_'
    ),
    weekdaysShort: 'àª°àªµàª¿_àª¸à«‹àª®_àª®àª‚àª—àª³_àª¬à«àª§à«_àª—à«àª°à«_àª¶à«àª•à«àª°_àª¶àª¨àª¿'.split('_'),
    weekdaysMin: 'àª°_àª¸à«‹_àª®àª‚_àª¬à«_àª—à«_àª¶à«_àª¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm àªµàª¾àª—à«àª¯à«‡',
        LTS: 'A h:mm:ss àªµàª¾àª—à«àª¯à«‡',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
        LLLL: 'dddd, D MMMM YYYY, A h:mm àªµàª¾àª—à«àª¯à«‡',
    },
    calendar: {
        sameDay: '[àª†àªœ] LT',
        nextDay: '[àª•àª¾àª²à«‡] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[àª—àª‡àª•àª¾àª²à«‡] LT',
        lastWeek: '[àªªàª¾àª›àª²àª¾] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s àª®àª¾',
        past: '%s àªªàª¹à«‡àª²àª¾',
        s: 'àª…àª®à«àª• àªªàª³à«‹',
        ss: '%d àª¸à«‡àª•àª‚àª¡',
        m: 'àªàª• àª®àª¿àª¨àª¿àªŸ',
        mm: '%d àª®àª¿àª¨àª¿àªŸ',
        h: 'àªàª• àª•àª²àª¾àª•',
        hh: '%d àª•àª²àª¾àª•',
        d: 'àªàª• àª¦àª¿àªµàª¸',
        dd: '%d àª¦àª¿àªµàª¸',
        M: 'àªàª• àª®àª¹àª¿àª¨à«‹',
        MM: '%d àª®àª¹àª¿àª¨à«‹',
        y: 'àªàª• àªµàª°à«àª·',
        yy: '%d àªµàª°à«àª·',
    },
    preparse: function (string) {
        return string.replace(/[à«§à«¨à«©à«ªà««à«¬à«­à«®à«¯à«¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
    meridiemParse: /àª°àª¾àª¤|àª¬àªªà«‹àª°|àª¸àªµàª¾àª°|àª¸àª¾àª‚àªœ/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'àª°àª¾àª¤') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'àª¸àªµàª¾àª°') {
            return hour;
        } else if (meridiem === 'àª¬àªªà«‹àª°') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'àª¸àª¾àª‚àªœ') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'àª°àª¾àª¤';
        } else if (hour < 10) {
            return 'àª¸àªµàª¾àª°';
        } else if (hour < 17) {
            return 'àª¬àªªà«‹àª°';
        } else if (hour < 20) {
            return 'àª¸àª¾àª‚àªœ';
        } else {
            return 'àª°àª¾àª¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Hebrew [he]
//! author : Tomer Cohen : https://github.com/tomer
//! author : Moshe Simantov : https://github.com/DevelopmentIL
//! author : Tal Ater : https://github.com/TalAter

import moment from '../moment';

export default moment.defineLocale('he', {
    months: '×™× ×•××¨_×¤×‘×¨×•××¨_×ž×¨×¥_××¤×¨×™×œ_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×•×¡×˜_×¡×¤×˜×ž×‘×¨_××•×§×˜×•×‘×¨_× ×•×‘×ž×‘×¨_×“×¦×ž×‘×¨'.split(
        '_'
    ),
    monthsShort: '×™× ×•×³_×¤×‘×¨×³_×ž×¨×¥_××¤×¨×³_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×³_×¡×¤×˜×³_××•×§×³_× ×•×‘×³_×“×¦×ž×³'.split(
        '_'
    ),
    weekdays: '×¨××©×•×Ÿ_×©× ×™_×©×œ×™×©×™_×¨×‘×™×¢×™_×—×ž×™×©×™_×©×™×©×™_×©×‘×ª'.split('_'),
    weekdaysShort: '××³_×‘×³_×’×³_×“×³_×”×³_×•×³_×©×³'.split('_'),
    weekdaysMin: '×_×‘_×’_×“_×”_×•_×©'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [×‘]MMMM YYYY',
        LLL: 'D [×‘]MMMM YYYY HH:mm',
        LLLL: 'dddd, D [×‘]MMMM YYYY HH:mm',
        l: 'D/M/YYYY',
        ll: 'D MMM YYYY',
        lll: 'D MMM YYYY HH:mm',
        llll: 'ddd, D MMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[×”×™×•× ×‘Ö¾]LT',
        nextDay: '[×ž×—×¨ ×‘Ö¾]LT',
        nextWeek: 'dddd [×‘×©×¢×”] LT',
        lastDay: '[××ª×ž×•×œ ×‘Ö¾]LT',
        lastWeek: '[×‘×™×•×] dddd [×”××—×¨×•×Ÿ ×‘×©×¢×”] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '×‘×¢×•×“ %s',
        past: '×œ×¤× ×™ %s',
        s: '×ž×¡×¤×¨ ×©× ×™×•×ª',
        ss: '%d ×©× ×™×•×ª',
        m: '×“×§×”',
        mm: '%d ×“×§×•×ª',
        h: '×©×¢×”',
        hh: function (number) {
            if (number === 2) {
                return '×©×¢×ª×™×™×';
            }
            return number + ' ×©×¢×•×ª';
        },
        d: '×™×•×',
        dd: function (number) {
            if (number === 2) {
                return '×™×•×ž×™×™×';
            }
            return number + ' ×™×ž×™×';
        },
        M: '×—×•×“×©',
        MM: function (number) {
            if (number === 2) {
                return '×—×•×“×©×™×™×';
            }
            return number + ' ×—×•×“×©×™×';
        },
        y: '×©× ×”',
        yy: function (number) {
            if (number === 2) {
                return '×©× ×ª×™×™×';
            } else if (number % 10 === 0 && number !== 10) {
                return number + ' ×©× ×”';
            }
            return number + ' ×©× ×™×';
        },
    },
    meridiemParse: /××—×”"×¦|×œ×¤× ×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×œ×¤× ×™ ×”×¦×”×¨×™×™×|×œ×¤× ×•×ª ×‘×•×§×¨|×‘×‘×•×§×¨|×‘×¢×¨×‘/i,
    isPM: function (input) {
        return /^(××—×”"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×‘×¢×¨×‘)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 5) {
            return '×œ×¤× ×•×ª ×‘×•×§×¨';
        } else if (hour < 10) {
            return '×‘×‘×•×§×¨';
        } else if (hour < 12) {
            return isLower ? '×œ×¤× ×”"×¦' : '×œ×¤× ×™ ×”×¦×”×¨×™×™×';
        } else if (hour < 18) {
            return isLower ? '××—×”"×¦' : '××—×¨×™ ×”×¦×”×¨×™×™×';
        } else {
            return '×‘×¢×¨×‘';
        }
    },
});
//! moment.js locale configuration
//! locale : Hindi [hi]
//! author : Mayank Singhal : https://github.com/mayanksinghal

import moment from '../moment';

var symbolMap = {
        1: 'à¥§',
        2: 'à¥¨',
        3: 'à¥©',
        4: 'à¥ª',
        5: 'à¥«',
        6: 'à¥¬',
        7: 'à¥­',
        8: 'à¥®',
        9: 'à¥¯',
        0: 'à¥¦',
    },
    numberMap = {
        'à¥§': '1',
        'à¥¨': '2',
        'à¥©': '3',
        'à¥ª': '4',
        'à¥«': '5',
        'à¥¬': '6',
        'à¥­': '7',
        'à¥®': '8',
        'à¥¯': '9',
        'à¥¦': '0',
    },
    monthsParse = [
        /^à¤œà¤¨/i,
        /^à¤«à¤¼à¤°|à¤«à¤°/i,
        /^à¤®à¤¾à¤°à¥à¤š/i,
        /^à¤…à¤ªà¥à¤°à¥ˆ/i,
        /^à¤®à¤ˆ/i,
        /^à¤œà¥‚à¤¨/i,
        /^à¤œà¥à¤²/i,
        /^à¤…à¤—/i,
        /^à¤¸à¤¿à¤¤à¤‚|à¤¸à¤¿à¤¤/i,
        /^à¤…à¤•à¥à¤Ÿà¥‚/i,
        /^à¤¨à¤µ|à¤¨à¤µà¤‚/i,
        /^à¤¦à¤¿à¤¸à¤‚|à¤¦à¤¿à¤¸/i,
    ],
    shortMonthsParse = [
        /^à¤œà¤¨/i,
        /^à¤«à¤¼à¤°/i,
        /^à¤®à¤¾à¤°à¥à¤š/i,
        /^à¤…à¤ªà¥à¤°à¥ˆ/i,
        /^à¤®à¤ˆ/i,
        /^à¤œà¥‚à¤¨/i,
        /^à¤œà¥à¤²/i,
        /^à¤…à¤—/i,
        /^à¤¸à¤¿à¤¤/i,
        /^à¤…à¤•à¥à¤Ÿà¥‚/i,
        /^à¤¨à¤µ/i,
        /^à¤¦à¤¿à¤¸/i,
    ];

export default moment.defineLocale('hi', {
    months: {
        format: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤¼à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤®à¥à¤¬à¤°_à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°'.split(
            '_'
        ),
        standalone: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤‚à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤‚à¤¬à¤°_à¤¦à¤¿à¤¸à¤‚à¤¬à¤°'.split(
            '_'
        ),
    },
    monthsShort: 'à¤œà¤¨._à¤«à¤¼à¤°._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆ._à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤…à¤—._à¤¸à¤¿à¤¤._à¤…à¤•à¥à¤Ÿà¥‚._à¤¨à¤µ._à¤¦à¤¿à¤¸.'.split(
        '_'
    ),
    weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤²à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
    weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤²_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
    weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¤¬à¤œà¥‡',
        LTS: 'A h:mm:ss à¤¬à¤œà¥‡',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¤¬à¤œà¥‡',
    },

    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: shortMonthsParse,

    monthsRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

    monthsShortRegex: /^(à¤œà¤¨à¤µà¤°à¥€|à¤œà¤¨\.?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ|à¤œà¥à¤²\.?|à¤…à¤—à¤¸à¥à¤¤|à¤…à¤—\.?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°|à¤¦à¤¿à¤¸\.?)/i,

    monthsStrictRegex: /^(à¤œà¤¨à¤µà¤°à¥€?|à¤«à¤¼à¤°à¤µà¤°à¥€|à¤«à¤°à¤µà¤°à¥€?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆà¤²?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²à¤¾à¤ˆ?|à¤…à¤—à¤¸à¥à¤¤?|à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°|à¤¸à¤¿à¤¤à¤‚à¤¬à¤°|à¤¸à¤¿à¤¤?\.?|à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µà¤®à¥à¤¬à¤°|à¤¨à¤µà¤‚à¤¬à¤°?|à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°|à¤¦à¤¿à¤¸à¤‚à¤¬à¤°?)/i,

    monthsShortStrictRegex: /^(à¤œà¤¨\.?|à¤«à¤¼à¤°\.?|à¤®à¤¾à¤°à¥à¤š?|à¤…à¤ªà¥à¤°à¥ˆ\.?|à¤®à¤ˆ?|à¤œà¥‚à¤¨?|à¤œà¥à¤²\.?|à¤…à¤—\.?|à¤¸à¤¿à¤¤\.?|à¤…à¤•à¥à¤Ÿà¥‚\.?|à¤¨à¤µ\.?|à¤¦à¤¿à¤¸\.?)/i,

    calendar: {
        sameDay: '[à¤†à¤œ] LT',
        nextDay: '[à¤•à¤²] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à¤•à¤²] LT',
        lastWeek: '[à¤ªà¤¿à¤›à¤²à¥‡] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à¤®à¥‡à¤‚',
        past: '%s à¤ªà¤¹à¤²à¥‡',
        s: 'à¤•à¥à¤› à¤¹à¥€ à¤•à¥à¤·à¤£',
        ss: '%d à¤¸à¥‡à¤•à¤‚à¤¡',
        m: 'à¤à¤• à¤®à¤¿à¤¨à¤Ÿ',
        mm: '%d à¤®à¤¿à¤¨à¤Ÿ',
        h: 'à¤à¤• à¤˜à¤‚à¤Ÿà¤¾',
        hh: '%d à¤˜à¤‚à¤Ÿà¥‡',
        d: 'à¤à¤• à¤¦à¤¿à¤¨',
        dd: '%d à¤¦à¤¿à¤¨',
        M: 'à¤à¤• à¤®à¤¹à¥€à¤¨à¥‡',
        MM: '%d à¤®à¤¹à¥€à¤¨à¥‡',
        y: 'à¤à¤• à¤µà¤°à¥à¤·',
        yy: '%d à¤µà¤°à¥à¤·',
    },
    preparse: function (string) {
        return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    // Hindi notation for meridiems are quite fuzzy in practice. While there exists
    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
    meridiemParse: /à¤°à¤¾à¤¤|à¤¸à¥à¤¬à¤¹|à¤¦à¥‹à¤ªà¤¹à¤°|à¤¶à¤¾à¤®/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¤°à¤¾à¤¤') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¤¸à¥à¤¬à¤¹') {
            return hour;
        } else if (meridiem === 'à¤¦à¥‹à¤ªà¤¹à¤°') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à¤¶à¤¾à¤®') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¤°à¤¾à¤¤';
        } else if (hour < 10) {
            return 'à¤¸à¥à¤¬à¤¹';
        } else if (hour < 17) {
            return 'à¤¦à¥‹à¤ªà¤¹à¤°';
        } else if (hour < 20) {
            return 'à¤¶à¤¾à¤®';
        } else {
            return 'à¤°à¤¾à¤¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Croatian [hr]
//! author : Bojan MarkoviÄ‡ : https://github.com/bmarkovic

import moment from '../moment';

function translate(number, withoutSuffix, key) {
    var result = number + ' ';
    switch (key) {
        case 'ss':
            if (number === 1) {
                result += 'sekunda';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'sekunde';
            } else {
                result += 'sekundi';
            }
            return result;
        case 'm':
            return withoutSuffix ? 'jedna minuta' : 'jedne minute';
        case 'mm':
            if (number === 1) {
                result += 'minuta';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'minute';
            } else {
                result += 'minuta';
            }
            return result;
        case 'h':
            return withoutSuffix ? 'jedan sat' : 'jednog sata';
        case 'hh':
            if (number === 1) {
                result += 'sat';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'sata';
            } else {
                result += 'sati';
            }
            return result;
        case 'dd':
            if (number === 1) {
                result += 'dan';
            } else {
                result += 'dana';
            }
            return result;
        case 'MM':
            if (number === 1) {
                result += 'mjesec';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'mjeseca';
            } else {
                result += 'mjeseci';
            }
            return result;
        case 'yy':
            if (number === 1) {
                result += 'godina';
            } else if (number === 2 || number === 3 || number === 4) {
                result += 'godine';
            } else {
                result += 'godina';
            }
            return result;
    }
}

export default moment.defineLocale('hr', {
    months: {
        format: 'sijeÄnja_veljaÄe_oÅ¾ujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
            '_'
        ),
        standalone: 'sijeÄanj_veljaÄa_oÅ¾ujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
            '_'
        ),
    },
    monthsShort: 'sij._velj._oÅ¾u._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
        '_'
    ),
    weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'Do MMMM YYYY',
        LLL: 'Do MMMM YYYY H:mm',
        LLLL: 'dddd, Do MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[danas u] LT',
        nextDay: '[sutra u] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[u] [nedjelju] [u] LT';
                case 3:
                    return '[u] [srijedu] [u] LT';
                case 6:
                    return '[u] [subotu] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[u] dddd [u] LT';
            }
        },
        lastDay: '[juÄer u] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[proÅ¡lu] [nedjelju] [u] LT';
                case 3:
                    return '[proÅ¡lu] [srijedu] [u] LT';
                case 6:
                    return '[proÅ¡le] [subote] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[proÅ¡li] dddd [u] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'prije %s',
        s: 'par sekundi',
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: 'dan',
        dd: translate,
        M: 'mjesec',
        MM: translate,
        y: 'godinu',
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Hungarian [hu]
//! author : Adam Brunner : https://github.com/adambrunner
//! author : Peter Viszt  : https://github.com/passatgt

import moment from '../moment';

var weekEndings = 'vasÃ¡rnap hÃ©tfÅ‘n kedden szerdÃ¡n csÃ¼tÃ¶rtÃ¶kÃ¶n pÃ©nteken szombaton'.split(
    ' '
);
function translate(number, withoutSuffix, key, isFuture) {
    var num = number;
    switch (key) {
        case 's':
            return isFuture || withoutSuffix
                ? 'nÃ©hÃ¡ny mÃ¡sodperc'
                : 'nÃ©hÃ¡ny mÃ¡sodperce';
        case 'ss':
            return num + (isFuture || withoutSuffix)
                ? ' mÃ¡sodperc'
                : ' mÃ¡sodperce';
        case 'm':
            return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
        case 'mm':
            return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
        case 'h':
            return 'egy' + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
        case 'hh':
            return num + (isFuture || withoutSuffix ? ' Ã³ra' : ' Ã³rÃ¡ja');
        case 'd':
            return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
        case 'dd':
            return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
        case 'M':
            return 'egy' + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
        case 'MM':
            return num + (isFuture || withoutSuffix ? ' hÃ³nap' : ' hÃ³napja');
        case 'y':
            return 'egy' + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
        case 'yy':
            return num + (isFuture || withoutSuffix ? ' Ã©v' : ' Ã©ve');
    }
    return '';
}
function week(isFuture) {
    return (
        (isFuture ? '' : '[mÃºlt] ') +
        '[' +
        weekEndings[this.day()] +
        '] LT[-kor]'
    );
}

export default moment.defineLocale('hu', {
    months: 'januÃ¡r_februÃ¡r_mÃ¡rcius_Ã¡prilis_mÃ¡jus_jÃºnius_jÃºlius_augusztus_szeptember_oktÃ³ber_november_december'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mÃ¡rc._Ã¡pr._mÃ¡j._jÃºn._jÃºl._aug._szept._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'vasÃ¡rnap_hÃ©tfÅ‘_kedd_szerda_csÃ¼tÃ¶rtÃ¶k_pÃ©ntek_szombat'.split('_'),
    weekdaysShort: 'vas_hÃ©t_kedd_sze_csÃ¼t_pÃ©n_szo'.split('_'),
    weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'YYYY.MM.DD.',
        LL: 'YYYY. MMMM D.',
        LLL: 'YYYY. MMMM D. H:mm',
        LLLL: 'YYYY. MMMM D., dddd H:mm',
    },
    meridiemParse: /de|du/i,
    isPM: function (input) {
        return input.charAt(1).toLowerCase() === 'u';
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 12) {
            return isLower === true ? 'de' : 'DE';
        } else {
            return isLower === true ? 'du' : 'DU';
        }
    },
    calendar: {
        sameDay: '[ma] LT[-kor]',
        nextDay: '[holnap] LT[-kor]',
        nextWeek: function () {
            return week.call(this, true);
        },
        lastDay: '[tegnap] LT[-kor]',
        lastWeek: function () {
            return week.call(this, false);
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s mÃºlva',
        past: '%s',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Armenian [hy-am]
//! author : Armendarabyan : https://github.com/armendarabyan

import moment from '../moment';

export default moment.defineLocale('hy-am', {
    months: {
        format: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€Õ«_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€Õ«_Õ´Õ¡Ö€Õ¿Õ«_Õ¡ÕºÖ€Õ«Õ¬Õ«_Õ´Õ¡ÕµÕ«Õ½Õ«_Õ°Õ¸Ö‚Õ¶Õ«Õ½Õ«_Õ°Õ¸Ö‚Õ¬Õ«Õ½Õ«_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€Õ«_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«'.split(
            '_'
        ),
        standalone: 'Õ°Õ¸Ö‚Õ¶Õ¾Õ¡Ö€_ÖƒÕ¥Õ¿Ö€Õ¾Õ¡Ö€_Õ´Õ¡Ö€Õ¿_Õ¡ÕºÖ€Õ«Õ¬_Õ´Õ¡ÕµÕ«Õ½_Õ°Õ¸Ö‚Õ¶Õ«Õ½_Õ°Õ¸Ö‚Õ¬Õ«Õ½_Ö…Õ£Õ¸Õ½Õ¿Õ¸Õ½_Õ½Õ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ°Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€_Õ¶Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€_Õ¤Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'.split(
            '_'
        ),
    },
    monthsShort: 'Õ°Õ¶Õ¾_ÖƒÕ¿Ö€_Õ´Ö€Õ¿_Õ¡ÕºÖ€_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_Ö…Õ£Õ½_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿'.split('_'),
    weekdays: 'Õ¯Õ«Ö€Õ¡Õ¯Õ«_Õ¥Ö€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«_Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_Õ¸Ö‚Ö€Õ¢Õ¡Õ©_Õ·Õ¡Õ¢Õ¡Õ©'.split(
        '_'
    ),
    weekdaysShort: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
    weekdaysMin: 'Õ¯Ö€Õ¯_Õ¥Ö€Õ¯_Õ¥Ö€Ö„_Õ¹Ö€Ö„_Õ°Õ¶Õ£_Õ¸Ö‚Ö€Õ¢_Õ·Õ¢Õ©'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY Õ©.',
        LLL: 'D MMMM YYYY Õ©., HH:mm',
        LLLL: 'dddd, D MMMM YYYY Õ©., HH:mm',
    },
    calendar: {
        sameDay: '[Õ¡ÕµÕ½Ö…Ö€] LT',
        nextDay: '[Õ¾Õ¡Õ²Õ¨] LT',
        lastDay: '[Õ¥Ö€Õ¥Õ¯] LT',
        nextWeek: function () {
            return 'dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
        },
        lastWeek: function () {
            return '[Õ¡Õ¶ÖÕ¡Õ®] dddd [Ö…Ö€Õ¨ ÕªÕ¡Õ´Õ¨] LT';
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Õ°Õ¥Õ¿Õ¸',
        past: '%s Õ¡Õ¼Õ¡Õ»',
        s: 'Õ´Õ« Ö„Õ¡Õ¶Õ« Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
        ss: '%d Õ¾Õ¡ÕµÖ€Õ¯ÕµÕ¡Õ¶',
        m: 'Ö€Õ¸ÕºÕ¥',
        mm: '%d Ö€Õ¸ÕºÕ¥',
        h: 'ÕªÕ¡Õ´',
        hh: '%d ÕªÕ¡Õ´',
        d: 'Ö…Ö€',
        dd: '%d Ö…Ö€',
        M: 'Õ¡Õ´Õ«Õ½',
        MM: '%d Õ¡Õ´Õ«Õ½',
        y: 'Õ¿Õ¡Ö€Õ«',
        yy: '%d Õ¿Õ¡Ö€Õ«',
    },
    meridiemParse: /Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶/,
    isPM: function (input) {
        return /^(ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡|Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶)$/.test(input);
    },
    meridiem: function (hour) {
        if (hour < 4) {
            return 'Õ£Õ«Õ·Õ¥Ö€Õ¾Õ¡';
        } else if (hour < 12) {
            return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡';
        } else if (hour < 17) {
            return 'ÖÕ¥Ö€Õ¥Õ¯Õ¾Õ¡';
        } else {
            return 'Õ¥Ö€Õ¥Õ¯Õ¸ÕµÕ¡Õ¶';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(Õ«Õ¶|Ö€Õ¤)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'DDD':
            case 'w':
            case 'W':
            case 'DDDo':
                if (number === 1) {
                    return number + '-Õ«Õ¶';
                }
                return number + '-Ö€Õ¤';
            default:
                return number;
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Indonesian [id]
//! author : Mohammad Satrio Utomo : https://github.com/tyok
//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan

import moment from '../moment';

export default moment.defineLocale('id', {
    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
    weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
    weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [pukul] HH.mm',
        LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
    },
    meridiemParse: /pagi|siang|sore|malam/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'pagi') {
            return hour;
        } else if (meridiem === 'siang') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'sore' || meridiem === 'malam') {
            return hour + 12;
        }
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'pagi';
        } else if (hours < 15) {
            return 'siang';
        } else if (hours < 19) {
            return 'sore';
        } else {
            return 'malam';
        }
    },
    calendar: {
        sameDay: '[Hari ini pukul] LT',
        nextDay: '[Besok pukul] LT',
        nextWeek: 'dddd [pukul] LT',
        lastDay: '[Kemarin pukul] LT',
        lastWeek: 'dddd [lalu pukul] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dalam %s',
        past: '%s yang lalu',
        s: 'beberapa detik',
        ss: '%d detik',
        m: 'semenit',
        mm: '%d menit',
        h: 'sejam',
        hh: '%d jam',
        d: 'sehari',
        dd: '%d hari',
        M: 'sebulan',
        MM: '%d bulan',
        y: 'setahun',
        yy: '%d tahun',
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Icelandic [is]
//! author : Hinrik Ã–rn SigurÃ°sson : https://github.com/hinrik

import moment from '../moment';

function plural(n) {
    if (n % 100 === 11) {
        return true;
    } else if (n % 10 === 1) {
        return false;
    }
    return true;
}
function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    switch (key) {
        case 's':
            return withoutSuffix || isFuture
                ? 'nokkrar sekÃºndur'
                : 'nokkrum sekÃºndum';
        case 'ss':
            if (plural(number)) {
                return (
                    result +
                    (withoutSuffix || isFuture ? 'sekÃºndur' : 'sekÃºndum')
                );
            }
            return result + 'sekÃºnda';
        case 'm':
            return withoutSuffix ? 'mÃ­nÃºta' : 'mÃ­nÃºtu';
        case 'mm':
            if (plural(number)) {
                return (
                    result + (withoutSuffix || isFuture ? 'mÃ­nÃºtur' : 'mÃ­nÃºtum')
                );
            } else if (withoutSuffix) {
                return result + 'mÃ­nÃºta';
            }
            return result + 'mÃ­nÃºtu';
        case 'hh':
            if (plural(number)) {
                return (
                    result +
                    (withoutSuffix || isFuture
                        ? 'klukkustundir'
                        : 'klukkustundum')
                );
            }
            return result + 'klukkustund';
        case 'd':
            if (withoutSuffix) {
                return 'dagur';
            }
            return isFuture ? 'dag' : 'degi';
        case 'dd':
            if (plural(number)) {
                if (withoutSuffix) {
                    return result + 'dagar';
                }
                return result + (isFuture ? 'daga' : 'dÃ¶gum');
            } else if (withoutSuffix) {
                return result + 'dagur';
            }
            return result + (isFuture ? 'dag' : 'degi');
        case 'M':
            if (withoutSuffix) {
                return 'mÃ¡nuÃ°ur';
            }
            return isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i';
        case 'MM':
            if (plural(number)) {
                if (withoutSuffix) {
                    return result + 'mÃ¡nuÃ°ir';
                }
                return result + (isFuture ? 'mÃ¡nuÃ°i' : 'mÃ¡nuÃ°um');
            } else if (withoutSuffix) {
                return result + 'mÃ¡nuÃ°ur';
            }
            return result + (isFuture ? 'mÃ¡nuÃ°' : 'mÃ¡nuÃ°i');
        case 'y':
            return withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri';
        case 'yy':
            if (plural(number)) {
                return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡rum');
            }
            return result + (withoutSuffix || isFuture ? 'Ã¡r' : 'Ã¡ri');
    }
}

export default moment.defineLocale('is', {
    months: 'janÃºar_febrÃºar_mars_aprÃ­l_maÃ­_jÃºnÃ­_jÃºlÃ­_Ã¡gÃºst_september_oktÃ³ber_nÃ³vember_desember'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_maÃ­_jÃºn_jÃºl_Ã¡gÃº_sep_okt_nÃ³v_des'.split('_'),
    weekdays: 'sunnudagur_mÃ¡nudagur_Ã¾riÃ°judagur_miÃ°vikudagur_fimmtudagur_fÃ¶studagur_laugardagur'.split(
        '_'
    ),
    weekdaysShort: 'sun_mÃ¡n_Ã¾ri_miÃ°_fim_fÃ¶s_lau'.split('_'),
    weekdaysMin: 'Su_MÃ¡_Ãžr_Mi_Fi_FÃ¶_La'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY [kl.] H:mm',
        LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
    },
    calendar: {
        sameDay: '[Ã­ dag kl.] LT',
        nextDay: '[Ã¡ morgun kl.] LT',
        nextWeek: 'dddd [kl.] LT',
        lastDay: '[Ã­ gÃ¦r kl.] LT',
        lastWeek: '[sÃ­Ã°asta] dddd [kl.] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'eftir %s',
        past: 'fyrir %s sÃ­Ã°an',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: 'klukkustund',
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Italian (Switzerland) [it-ch]
//! author : xfh : https://github.com/xfh

import moment from '../moment';

export default moment.defineLocale('it-ch', {
    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
        '_'
    ),
    monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
    weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
        '_'
    ),
    weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
    weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Oggi alle] LT',
        nextDay: '[Domani alle] LT',
        nextWeek: 'dddd [alle] LT',
        lastDay: '[Ieri alle] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[la scorsa] dddd [alle] LT';
                default:
                    return '[lo scorso] dddd [alle] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: function (s) {
            return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
        },
        past: '%s fa',
        s: 'alcuni secondi',
        ss: '%d secondi',
        m: 'un minuto',
        mm: '%d minuti',
        h: "un'ora",
        hh: '%d ore',
        d: 'un giorno',
        dd: '%d giorni',
        M: 'un mese',
        MM: '%d mesi',
        y: 'un anno',
        yy: '%d anni',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Italian [it]
//! author : Lorenzo : https://github.com/aliem
//! author: Mattia Larentis: https://github.com/nostalgiaz
//! author: Marco : https://github.com/Manfre98

import moment from '../moment';

export default moment.defineLocale('it', {
    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
        '_'
    ),
    monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
    weekdays: 'domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato'.split(
        '_'
    ),
    weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
    weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: function () {
            return (
                '[Oggi a' +
                (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                ']LT'
            );
        },
        nextDay: function () {
            return (
                '[Domani a' +
                (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                ']LT'
            );
        },
        nextWeek: function () {
            return (
                'dddd [a' +
                (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                ']LT'
            );
        },
        lastDay: function () {
            return (
                '[Ieri a' +
                (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
                ']LT'
            );
        },
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return (
                        '[La scorsa] dddd [a' +
                        (this.hours() > 1
                            ? 'lle '
                            : this.hours() === 0
                            ? ' '
                            : "ll'") +
                        ']LT'
                    );
                default:
                    return (
                        '[Lo scorso] dddd [a' +
                        (this.hours() > 1
                            ? 'lle '
                            : this.hours() === 0
                            ? ' '
                            : "ll'") +
                        ']LT'
                    );
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'tra %s',
        past: '%s fa',
        s: 'alcuni secondi',
        ss: '%d secondi',
        m: 'un minuto',
        mm: '%d minuti',
        h: "un'ora",
        hh: '%d ore',
        d: 'un giorno',
        dd: '%d giorni',
        w: 'una settimana',
        ww: '%d settimane',
        M: 'un mese',
        MM: '%d mesi',
        y: 'un anno',
        yy: '%d anni',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Japanese [ja]
//! author : LI Long : https://github.com/baryon

import moment from '../moment';

export default moment.defineLocale('ja', {
    eras: [
        {
            since: '2019-05-01',
            offset: 1,
            name: 'ä»¤å’Œ',
            narrow: 'ã‹¿',
            abbr: 'R',
        },
        {
            since: '1989-01-08',
            until: '2019-04-30',
            offset: 1,
            name: 'å¹³æˆ',
            narrow: 'ã»',
            abbr: 'H',
        },
        {
            since: '1926-12-25',
            until: '1989-01-07',
            offset: 1,
            name: 'æ˜­å’Œ',
            narrow: 'ã¼',
            abbr: 'S',
        },
        {
            since: '1912-07-30',
            until: '1926-12-24',
            offset: 1,
            name: 'å¤§æ­£',
            narrow: 'ã½',
            abbr: 'T',
        },
        {
            since: '1873-01-01',
            until: '1912-07-29',
            offset: 6,
            name: 'æ˜Žæ²»',
            narrow: 'ã¾',
            abbr: 'M',
        },
        {
            since: '0001-01-01',
            until: '1873-12-31',
            offset: 1,
            name: 'è¥¿æš¦',
            narrow: 'AD',
            abbr: 'AD',
        },
        {
            since: '0000-12-31',
            until: -Infinity,
            offset: 1,
            name: 'ç´€å…ƒå‰',
            narrow: 'BC',
            abbr: 'BC',
        },
    ],
    eraYearOrdinalRegex: /(å…ƒ|\d+)å¹´/,
    eraYearOrdinalParse: function (input, match) {
        return match[1] === 'å…ƒ' ? 1 : parseInt(match[1] || input, 10);
    },
    months: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split('_'),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ—¥æ›œæ—¥_æœˆæ›œæ—¥_ç«æ›œæ—¥_æ°´æ›œæ—¥_æœ¨æ›œæ—¥_é‡‘æ›œæ—¥_åœŸæ›œæ—¥'.split('_'),
    weekdaysShort: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
    weekdaysMin: 'æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        LLLL: 'YYYYå¹´MæœˆDæ—¥ dddd HH:mm',
        l: 'YYYY/MM/DD',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥(ddd) HH:mm',
    },
    meridiemParse: /åˆå‰|åˆå¾Œ/i,
    isPM: function (input) {
        return input === 'åˆå¾Œ';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'åˆå‰';
        } else {
            return 'åˆå¾Œ';
        }
    },
    calendar: {
        sameDay: '[ä»Šæ—¥] LT',
        nextDay: '[æ˜Žæ—¥] LT',
        nextWeek: function (now) {
            if (now.week() !== this.week()) {
                return '[æ¥é€±]dddd LT';
            } else {
                return 'dddd LT';
            }
        },
        lastDay: '[æ˜¨æ—¥] LT',
        lastWeek: function (now) {
            if (this.week() !== now.week()) {
                return '[å…ˆé€±]dddd LT';
            } else {
                return 'dddd LT';
            }
        },
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}æ—¥/,
    ordinal: function (number, period) {
        switch (period) {
            case 'y':
                return number === 1 ? 'å…ƒå¹´' : number + 'å¹´';
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%så¾Œ',
        past: '%så‰',
        s: 'æ•°ç§’',
        ss: '%dç§’',
        m: '1åˆ†',
        mm: '%dåˆ†',
        h: '1æ™‚é–“',
        hh: '%dæ™‚é–“',
        d: '1æ—¥',
        dd: '%dæ—¥',
        M: '1ãƒ¶æœˆ',
        MM: '%dãƒ¶æœˆ',
        y: '1å¹´',
        yy: '%då¹´',
    },
});
//! moment.js locale configuration
//! locale : Javanese [jv]
//! author : Rony Lantip : https://github.com/lantip
//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa

import moment from '../moment';

export default moment.defineLocale('jv', {
    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
    weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
    weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [pukul] HH.mm',
        LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
    },
    meridiemParse: /enjing|siyang|sonten|ndalu/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'enjing') {
            return hour;
        } else if (meridiem === 'siyang') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
            return hour + 12;
        }
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'enjing';
        } else if (hours < 15) {
            return 'siyang';
        } else if (hours < 19) {
            return 'sonten';
        } else {
            return 'ndalu';
        }
    },
    calendar: {
        sameDay: '[Dinten puniko pukul] LT',
        nextDay: '[Mbenjang pukul] LT',
        nextWeek: 'dddd [pukul] LT',
        lastDay: '[Kala wingi pukul] LT',
        lastWeek: 'dddd [kepengker pukul] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'wonten ing %s',
        past: '%s ingkang kepengker',
        s: 'sawetawis detik',
        ss: '%d detik',
        m: 'setunggal menit',
        mm: '%d menit',
        h: 'setunggal jam',
        hh: '%d jam',
        d: 'sedinten',
        dd: '%d dinten',
        M: 'sewulan',
        MM: '%d wulan',
        y: 'setaun',
        yy: '%d taun',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Georgian [ka]
//! author : Irakli Janiashvili : https://github.com/IrakliJani

import moment from '../moment';

export default moment.defineLocale('ka', {
    months: 'áƒ˜áƒáƒœáƒ•áƒáƒ áƒ˜_áƒ—áƒ”áƒ‘áƒ”áƒ áƒ•áƒáƒšáƒ˜_áƒ›áƒáƒ áƒ¢áƒ˜_áƒáƒžáƒ áƒ˜áƒšáƒ˜_áƒ›áƒáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒœáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒšáƒ˜áƒ¡áƒ˜_áƒáƒ’áƒ•áƒ˜áƒ¡áƒ¢áƒ_áƒ¡áƒ”áƒ¥áƒ¢áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘áƒ”áƒ áƒ˜_áƒœáƒáƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒ“áƒ”áƒ™áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜'.split(
        '_'
    ),
    monthsShort: 'áƒ˜áƒáƒœ_áƒ—áƒ”áƒ‘_áƒ›áƒáƒ _áƒáƒžáƒ _áƒ›áƒáƒ˜_áƒ˜áƒ•áƒœ_áƒ˜áƒ•áƒš_áƒáƒ’áƒ•_áƒ¡áƒ”áƒ¥_áƒáƒ¥áƒ¢_áƒœáƒáƒ”_áƒ“áƒ”áƒ™'.split('_'),
    weekdays: {
        standalone: 'áƒ™áƒ•áƒ˜áƒ áƒ_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ˜_áƒ¨áƒáƒ‘áƒáƒ—áƒ˜'.split(
            '_'
        ),
        format: 'áƒ™áƒ•áƒ˜áƒ áƒáƒ¡_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ¡_áƒ¨áƒáƒ‘áƒáƒ—áƒ¡'.split(
            '_'
        ),
        isFormat: /(áƒ¬áƒ˜áƒœáƒ|áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’)/,
    },
    weekdaysShort: 'áƒ™áƒ•áƒ˜_áƒáƒ áƒ¨_áƒ¡áƒáƒ›_áƒáƒ—áƒ®_áƒ®áƒ£áƒ—_áƒžáƒáƒ _áƒ¨áƒáƒ‘'.split('_'),
    weekdaysMin: 'áƒ™áƒ•_áƒáƒ _áƒ¡áƒ_áƒáƒ—_áƒ®áƒ£_áƒžáƒ_áƒ¨áƒ'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[áƒ“áƒ¦áƒ”áƒ¡] LT[-áƒ–áƒ”]',
        nextDay: '[áƒ®áƒ•áƒáƒš] LT[-áƒ–áƒ”]',
        lastDay: '[áƒ’áƒ£áƒ¨áƒ˜áƒœ] LT[-áƒ–áƒ”]',
        nextWeek: '[áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’] dddd LT[-áƒ–áƒ”]',
        lastWeek: '[áƒ¬áƒ˜áƒœáƒ] dddd LT-áƒ–áƒ”',
        sameElse: 'L',
    },
    relativeTime: {
        future: function (s) {
            return s.replace(/(áƒ¬áƒáƒ›|áƒ¬áƒ£áƒ—|áƒ¡áƒáƒáƒ—|áƒ¬áƒ”áƒš|áƒ“áƒ¦|áƒ—áƒ•)(áƒ˜|áƒ”)/, function (
                $0,
                $1,
                $2
            ) {
                return $2 === 'áƒ˜' ? $1 + 'áƒ¨áƒ˜' : $1 + $2 + 'áƒ¨áƒ˜';
            });
        },
        past: function (s) {
            if (/(áƒ¬áƒáƒ›áƒ˜|áƒ¬áƒ£áƒ—áƒ˜|áƒ¡áƒáƒáƒ—áƒ˜|áƒ“áƒ¦áƒ”|áƒ—áƒ•áƒ”)/.test(s)) {
                return s.replace(/(áƒ˜|áƒ”)$/, 'áƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
            }
            if (/áƒ¬áƒ”áƒšáƒ˜/.test(s)) {
                return s.replace(/áƒ¬áƒ”áƒšáƒ˜$/, 'áƒ¬áƒšáƒ˜áƒ¡ áƒ¬áƒ˜áƒœ');
            }
            return s;
        },
        s: 'áƒ áƒáƒ›áƒ“áƒ”áƒœáƒ˜áƒ›áƒ” áƒ¬áƒáƒ›áƒ˜',
        ss: '%d áƒ¬áƒáƒ›áƒ˜',
        m: 'áƒ¬áƒ£áƒ—áƒ˜',
        mm: '%d áƒ¬áƒ£áƒ—áƒ˜',
        h: 'áƒ¡áƒáƒáƒ—áƒ˜',
        hh: '%d áƒ¡áƒáƒáƒ—áƒ˜',
        d: 'áƒ“áƒ¦áƒ”',
        dd: '%d áƒ“áƒ¦áƒ”',
        M: 'áƒ—áƒ•áƒ”',
        MM: '%d áƒ—áƒ•áƒ”',
        y: 'áƒ¬áƒ”áƒšáƒ˜',
        yy: '%d áƒ¬áƒ”áƒšáƒ˜',
    },
    dayOfMonthOrdinalParse: /0|1-áƒšáƒ˜|áƒ›áƒ”-\d{1,2}|\d{1,2}-áƒ”/,
    ordinal: function (number) {
        if (number === 0) {
            return number;
        }
        if (number === 1) {
            return number + '-áƒšáƒ˜';
        }
        if (
            number < 20 ||
            (number <= 100 && number % 20 === 0) ||
            number % 100 === 0
        ) {
            return 'áƒ›áƒ”-' + number;
        }
        return number + '-áƒ”';
    },
    week: {
        dow: 1,
        doy: 7,
    },
});
//! moment.js locale configuration
//! locale : Kazakh [kk]
//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan

import moment from '../moment';

var suffixes = {
    0: '-ÑˆÑ–',
    1: '-ÑˆÑ–',
    2: '-ÑˆÑ–',
    3: '-ÑˆÑ–',
    4: '-ÑˆÑ–',
    5: '-ÑˆÑ–',
    6: '-ÑˆÑ‹',
    7: '-ÑˆÑ–',
    8: '-ÑˆÑ–',
    9: '-ÑˆÑ‹',
    10: '-ÑˆÑ‹',
    20: '-ÑˆÑ‹',
    30: '-ÑˆÑ‹',
    40: '-ÑˆÑ‹',
    50: '-ÑˆÑ–',
    60: '-ÑˆÑ‹',
    70: '-ÑˆÑ–',
    80: '-ÑˆÑ–',
    90: '-ÑˆÑ‹',
    100: '-ÑˆÑ–',
};

export default moment.defineLocale('kk', {
    months: 'Ò›Ð°Ò£Ñ‚Ð°Ñ€_Ð°Ò›Ð¿Ð°Ð½_Ð½Ð°ÑƒÑ€Ñ‹Ð·_ÑÓ™ÑƒÑ–Ñ€_Ð¼Ð°Ð¼Ñ‹Ñ€_Ð¼Ð°ÑƒÑÑ‹Ð¼_ÑˆÑ–Ð»Ð´Ðµ_Ñ‚Ð°Ð¼Ñ‹Ð·_Ò›Ñ‹Ñ€ÐºÒ¯Ð¹ÐµÐº_Ò›Ð°Ð·Ð°Ð½_Ò›Ð°Ñ€Ð°ÑˆÐ°_Ð¶ÐµÐ»Ñ‚Ð¾Ò›ÑÐ°Ð½'.split(
        '_'
    ),
    monthsShort: 'Ò›Ð°Ò£_Ð°Ò›Ð¿_Ð½Ð°Ñƒ_ÑÓ™Ñƒ_Ð¼Ð°Ð¼_Ð¼Ð°Ñƒ_ÑˆÑ–Ð»_Ñ‚Ð°Ð¼_Ò›Ñ‹Ñ€_Ò›Ð°Ð·_Ò›Ð°Ñ€_Ð¶ÐµÐ»'.split('_'),
    weekdays: 'Ð¶ÐµÐºÑÐµÐ½Ð±Ñ–_Ð´Ò¯Ð¹ÑÐµÐ½Ð±Ñ–_ÑÐµÐ¹ÑÐµÐ½Ð±Ñ–_ÑÓ™Ñ€ÑÐµÐ½Ð±Ñ–_Ð±ÐµÐ¹ÑÐµÐ½Ð±Ñ–_Ð¶Ò±Ð¼Ð°_ÑÐµÐ½Ð±Ñ–'.split(
        '_'
    ),
    weekdaysShort: 'Ð¶ÐµÐº_Ð´Ò¯Ð¹_ÑÐµÐ¹_ÑÓ™Ñ€_Ð±ÐµÐ¹_Ð¶Ò±Ð¼_ÑÐµÐ½'.split('_'),
    weekdaysMin: 'Ð¶Ðº_Ð´Ð¹_ÑÐ¹_ÑÑ€_Ð±Ð¹_Ð¶Ð¼_ÑÐ½'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ð‘Ò¯Ð³Ñ–Ð½ ÑÐ°Ò“Ð°Ñ‚] LT',
        nextDay: '[Ð•Ñ€Ñ‚ÐµÒ£ ÑÐ°Ò“Ð°Ñ‚] LT',
        nextWeek: 'dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
        lastDay: '[ÐšÐµÑˆÐµ ÑÐ°Ò“Ð°Ñ‚] LT',
        lastWeek: '[Ó¨Ñ‚ÐºÐµÐ½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ò£] dddd [ÑÐ°Ò“Ð°Ñ‚] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ñ–ÑˆÑ–Ð½Ð´Ðµ',
        past: '%s Ð±Ò±Ñ€Ñ‹Ð½',
        s: 'Ð±Ñ–Ñ€Ð½ÐµÑˆÐµ ÑÐµÐºÑƒÐ½Ð´',
        ss: '%d ÑÐµÐºÑƒÐ½Ð´',
        m: 'Ð±Ñ–Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚',
        mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚',
        h: 'Ð±Ñ–Ñ€ ÑÐ°Ò“Ð°Ñ‚',
        hh: '%d ÑÐ°Ò“Ð°Ñ‚',
        d: 'Ð±Ñ–Ñ€ ÐºÒ¯Ð½',
        dd: '%d ÐºÒ¯Ð½',
        M: 'Ð±Ñ–Ñ€ Ð°Ð¹',
        MM: '%d Ð°Ð¹',
        y: 'Ð±Ñ–Ñ€ Ð¶Ñ‹Ð»',
        yy: '%d Ð¶Ñ‹Ð»',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ÑˆÑ–|ÑˆÑ‹)/,
    ordinal: function (number) {
        var a = number % 10,
            b = number >= 100 ? 100 : null;
        return number + (suffixes[number] || suffixes[a] || suffixes[b]);
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Cambodian [km]
//! author : Kruy Vanna : https://github.com/kruyvanna

import moment from '../moment';

var symbolMap = {
        1: 'áŸ¡',
        2: 'áŸ¢',
        3: 'áŸ£',
        4: 'áŸ¤',
        5: 'áŸ¥',
        6: 'áŸ¦',
        7: 'áŸ§',
        8: 'áŸ¨',
        9: 'áŸ©',
        0: 'áŸ ',
    },
    numberMap = {
        'áŸ¡': '1',
        'áŸ¢': '2',
        'áŸ£': '3',
        'áŸ¤': '4',
        'áŸ¥': '5',
        'áŸ¦': '6',
        'áŸ§': '7',
        'áŸ¨': '8',
        'áŸ©': '9',
        'áŸ ': '0',
    };

export default moment.defineLocale('km', {
    months: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
        '_'
    ),
    monthsShort: 'áž˜áž€ážšáž¶_áž€áž»áž˜áŸ’áž—áŸˆ_áž˜áž¸áž“áž¶_áž˜áŸážŸáž¶_áž§ážŸáž—áž¶_áž˜áž·ážáž»áž“áž¶_áž€áž€áŸ’áž€ážŠáž¶_ážŸáž¸áž áž¶_áž€áž‰áŸ’áž‰áž¶_ážáž»áž›áž¶_ážœáž·áž…áŸ’áž†áž·áž€áž¶_áž’áŸ’áž“áž¼'.split(
        '_'
    ),
    weekdays: 'áž¢áž¶áž‘áž·ážáŸ’áž™_áž…áŸáž“áŸ’áž‘_áž¢áž„áŸ’áž‚áž¶ážš_áž–áž»áž’_áž–áŸ’ážšáž ážŸáŸ’áž”ážáž·áŸ_ážŸáž»áž€áŸ’ážš_ážŸáŸ…ážšáŸ'.split('_'),
    weekdaysShort: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
    weekdaysMin: 'áž¢áž¶_áž…_áž¢_áž–_áž–áŸ’ážš_ážŸáž»_ážŸ'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    meridiemParse: /áž–áŸ’ážšáž¹áž€|áž›áŸ’áž„áž¶áž…/,
    isPM: function (input) {
        return input === 'áž›áŸ’áž„áž¶áž…';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'áž–áŸ’ážšáž¹áž€';
        } else {
            return 'áž›áŸ’áž„áž¶áž…';
        }
    },
    calendar: {
        sameDay: '[ážáŸ’áž„áŸƒáž“áŸáŸ‡ áž˜áŸ‰áŸ„áž„] LT',
        nextDay: '[ážŸáŸ’áž¢áŸ‚áž€ áž˜áŸ‰áŸ„áž„] LT',
        nextWeek: 'dddd [áž˜áŸ‰áŸ„áž„] LT',
        lastDay: '[áž˜áŸ’ážŸáž·áž›áž˜áž·áž‰ áž˜áŸ‰áŸ„áž„] LT',
        lastWeek: 'dddd [ážŸáž”áŸ’ážáž¶áž áŸáž˜áž»áž“] [áž˜áŸ‰áŸ„áž„] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%sáž‘áŸ€áž',
        past: '%sáž˜áž»áž“',
        s: 'áž”áŸ‰áž»áž“áŸ’áž˜áž¶áž“ážœáž·áž“áž¶áž‘áž¸',
        ss: '%d ážœáž·áž“áž¶áž‘áž¸',
        m: 'áž˜áž½áž™áž“áž¶áž‘áž¸',
        mm: '%d áž“áž¶áž‘áž¸',
        h: 'áž˜áž½áž™áž˜áŸ‰áŸ„áž„',
        hh: '%d áž˜áŸ‰áŸ„áž„',
        d: 'áž˜áž½áž™ážáŸ’áž„áŸƒ',
        dd: '%d ážáŸ’áž„áŸƒ',
        M: 'áž˜áž½áž™ážáŸ‚',
        MM: '%d ážáŸ‚',
        y: 'áž˜áž½áž™áž†áŸ’áž“áž¶áŸ†',
        yy: '%d áž†áŸ’áž“áž¶áŸ†',
    },
    dayOfMonthOrdinalParse: /áž‘áž¸\d{1,2}/,
    ordinal: 'áž‘áž¸%d',
    preparse: function (string) {
        return string.replace(/[áŸ¡áŸ¢áŸ£áŸ¤áŸ¥áŸ¦áŸ§áŸ¨áŸ©áŸ ]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Kannada [kn]
//! author : Rajeev Naik : https://github.com/rajeevnaikte

import moment from '../moment';

var symbolMap = {
        1: 'à³§',
        2: 'à³¨',
        3: 'à³©',
        4: 'à³ª',
        5: 'à³«',
        6: 'à³¬',
        7: 'à³­',
        8: 'à³®',
        9: 'à³¯',
        0: 'à³¦',
    },
    numberMap = {
        'à³§': '1',
        'à³¨': '2',
        'à³©': '3',
        'à³ª': '4',
        'à³«': '5',
        'à³¬': '6',
        'à³­': '7',
        'à³®': '8',
        'à³¯': '9',
        'à³¦': '0',
    };

export default moment.defineLocale('kn', {
    months: 'à²œà²¨à²µà²°à²¿_à²«à³†à²¬à³à²°à²µà²°à²¿_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚à²¬à²°à³_à²…à²•à³à²Ÿà³†à³‚à³•à²¬à²°à³_à²¨à²µà³†à²‚à²¬à²°à³_à²¡à²¿à²¸à³†à²‚à²¬à²°à³'.split(
        '_'
    ),
    monthsShort: 'à²œà²¨_à²«à³†à²¬à³à²°_à²®à²¾à²°à³à²šà³_à²à²ªà³à²°à²¿à²²à³_à²®à³†à³•_à²œà³‚à²¨à³_à²œà³à²²à³†à³–_à²†à²—à²¸à³à²Ÿà³_à²¸à³†à²ªà³à²Ÿà³†à²‚_à²…à²•à³à²Ÿà³†à³‚à³•_à²¨à²µà³†à²‚_à²¡à²¿à²¸à³†à²‚'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à²­à²¾à²¨à³à²µà²¾à²°_à²¸à³†à³‚à³•à²®à²µà²¾à²°_à²®à²‚à²—à²³à²µà²¾à²°_à²¬à³à²§à²µà²¾à²°_à²—à³à²°à³à²µà²¾à²°_à²¶à³à²•à³à²°à²µà²¾à²°_à²¶à²¨à²¿à²µà²¾à²°'.split(
        '_'
    ),
    weekdaysShort: 'à²­à²¾à²¨à³_à²¸à³†à³‚à³•à²®_à²®à²‚à²—à²³_à²¬à³à²§_à²—à³à²°à³_à²¶à³à²•à³à²°_à²¶à²¨à²¿'.split('_'),
    weekdaysMin: 'à²­à²¾_à²¸à³†à³‚à³•_à²®à²‚_à²¬à³_à²—à³_à²¶à³_à²¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm',
        LTS: 'A h:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm',
        LLLL: 'dddd, D MMMM YYYY, A h:mm',
    },
    calendar: {
        sameDay: '[à²‡à²‚à²¦à³] LT',
        nextDay: '[à²¨à²¾à²³à³†] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à²¨à²¿à²¨à³à²¨à³†] LT',
        lastWeek: '[à²•à³†à³‚à²¨à³†à²¯] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à²¨à²‚à²¤à²°',
        past: '%s à²¹à²¿à²‚à²¦à³†',
        s: 'à²•à³†à²²à²µà³ à²•à³à²·à²£à²—à²³à³',
        ss: '%d à²¸à³†à²•à³†à²‚à²¡à³à²—à²³à³',
        m: 'à²’à²‚à²¦à³ à²¨à²¿à²®à²¿à²·',
        mm: '%d à²¨à²¿à²®à²¿à²·',
        h: 'à²’à²‚à²¦à³ à²—à²‚à²Ÿà³†',
        hh: '%d à²—à²‚à²Ÿà³†',
        d: 'à²’à²‚à²¦à³ à²¦à²¿à²¨',
        dd: '%d à²¦à²¿à²¨',
        M: 'à²’à²‚à²¦à³ à²¤à²¿à²‚à²—à²³à³',
        MM: '%d à²¤à²¿à²‚à²—à²³à³',
        y: 'à²’à²‚à²¦à³ à²µà²°à³à²·',
        yy: '%d à²µà²°à³à²·',
    },
    preparse: function (string) {
        return string.replace(/[à³§à³¨à³©à³ªà³«à³¬à³­à³®à³¯à³¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à²°à²¾à²¤à³à²°à²¿|à²¬à³†à²³à²¿à²—à³à²—à³†|à²®à²§à³à²¯à²¾à²¹à³à²¨|à²¸à²‚à²œà³†/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à²°à²¾à²¤à³à²°à²¿') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à²¬à³†à²³à²¿à²—à³à²—à³†') {
            return hour;
        } else if (meridiem === 'à²®à²§à³à²¯à²¾à²¹à³à²¨') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à²¸à²‚à²œà³†') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à²°à²¾à²¤à³à²°à²¿';
        } else if (hour < 10) {
            return 'à²¬à³†à²³à²¿à²—à³à²—à³†';
        } else if (hour < 17) {
            return 'à²®à²§à³à²¯à²¾à²¹à³à²¨';
        } else if (hour < 20) {
            return 'à²¸à²‚à²œà³†';
        } else {
            return 'à²°à²¾à²¤à³à²°à²¿';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}(à²¨à³†à³•)/,
    ordinal: function (number) {
        return number + 'à²¨à³†à³•';
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Korean [ko]
//! author : Kyungwook, Park : https://github.com/kyungw00k
//! author : Jeeeyul Lee <jeeeyul@gmail.com>

import moment from '../moment';

export default moment.defineLocale('ko', {
    months: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split('_'),
    monthsShort: '1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”'.split(
        '_'
    ),
    weekdays: 'ì¼ìš”ì¼_ì›”ìš”ì¼_í™”ìš”ì¼_ìˆ˜ìš”ì¼_ëª©ìš”ì¼_ê¸ˆìš”ì¼_í† ìš”ì¼'.split('_'),
    weekdaysShort: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
    weekdaysMin: 'ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† '.split('_'),
    longDateFormat: {
        LT: 'A h:mm',
        LTS: 'A h:mm:ss',
        L: 'YYYY.MM.DD.',
        LL: 'YYYYë…„ MMMM Dì¼',
        LLL: 'YYYYë…„ MMMM Dì¼ A h:mm',
        LLLL: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
        l: 'YYYY.MM.DD.',
        ll: 'YYYYë…„ MMMM Dì¼',
        lll: 'YYYYë…„ MMMM Dì¼ A h:mm',
        llll: 'YYYYë…„ MMMM Dì¼ dddd A h:mm',
    },
    calendar: {
        sameDay: 'ì˜¤ëŠ˜ LT',
        nextDay: 'ë‚´ì¼ LT',
        nextWeek: 'dddd LT',
        lastDay: 'ì–´ì œ LT',
        lastWeek: 'ì§€ë‚œì£¼ dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s í›„',
        past: '%s ì „',
        s: 'ëª‡ ì´ˆ',
        ss: '%dì´ˆ',
        m: '1ë¶„',
        mm: '%dë¶„',
        h: 'í•œ ì‹œê°„',
        hh: '%dì‹œê°„',
        d: 'í•˜ë£¨',
        dd: '%dì¼',
        M: 'í•œ ë‹¬',
        MM: '%dë‹¬',
        y: 'ì¼ ë…„',
        yy: '%dë…„',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ì¼|ì›”|ì£¼)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'ì¼';
            case 'M':
                return number + 'ì›”';
            case 'w':
            case 'W':
                return number + 'ì£¼';
            default:
                return number;
        }
    },
    meridiemParse: /ì˜¤ì „|ì˜¤í›„/,
    isPM: function (token) {
        return token === 'ì˜¤í›„';
    },
    meridiem: function (hour, minute, isUpper) {
        return hour < 12 ? 'ì˜¤ì „' : 'ì˜¤í›„';
    },
});
//! moment.js locale configuration
//! locale : Kurdish [ku]
//! author : Shahram Mebashar : https://github.com/ShahramMebashar

import moment from '../moment';

var symbolMap = {
        1: 'Ù¡',
        2: 'Ù¢',
        3: 'Ù£',
        4: 'Ù¤',
        5: 'Ù¥',
        6: 'Ù¦',
        7: 'Ù§',
        8: 'Ù¨',
        9: 'Ù©',
        0: 'Ù ',
    },
    numberMap = {
        'Ù¡': '1',
        'Ù¢': '2',
        'Ù£': '3',
        'Ù¤': '4',
        'Ù¥': '5',
        'Ù¦': '6',
        'Ù§': '7',
        'Ù¨': '8',
        'Ù©': '9',
        'Ù ': '0',
    },
    months = [
        'Ú©Ø§Ù†ÙˆÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
        'Ø´ÙˆØ¨Ø§Øª',
        'Ø¦Ø§Ø²Ø§Ø±',
        'Ù†ÛŒØ³Ø§Ù†',
        'Ø¦Ø§ÛŒØ§Ø±',
        'Ø­ÙˆØ²Û•ÛŒØ±Ø§Ù†',
        'ØªÛ•Ù…Ù…ÙˆØ²',
        'Ø¦Ø§Ø¨',
        'Ø¦Û•ÛŒÙ„ÙˆÙˆÙ„',
        'ØªØ´Ø±ÛŒÙ†ÛŒ ÛŒÛ•ÙƒÛ•Ù…',
        'ØªØ´Ø±ÛŒÙ†ÛŒ Ø¯ÙˆÙˆÛ•Ù…',
        'ÙƒØ§Ù†ÙˆÙ†ÛŒ ÛŒÛ•Ú©Û•Ù…',
    ];

export default moment.defineLocale('ku', {
    months: months,
    monthsShort: months,
    weekdays: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ø³ÛŽØ´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
        '_'
    ),
    weekdaysShort: 'ÛŒÙ‡â€ŒÙƒØ´Ù‡â€ŒÙ…_Ø¯ÙˆÙˆØ´Ù‡â€ŒÙ…_Ø³ÛŽØ´Ù‡â€ŒÙ…_Ú†ÙˆØ§Ø±Ø´Ù‡â€ŒÙ…_Ù¾ÛŽÙ†Ø¬Ø´Ù‡â€ŒÙ…_Ù‡Ù‡â€ŒÛŒÙ†ÛŒ_Ø´Ù‡â€ŒÙ…Ù…Ù‡â€Œ'.split(
        '_'
    ),
    weekdaysMin: 'ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ù‡_Ø´'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    meridiemParse: /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ|Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ/,
    isPM: function (input) {
        return /Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ';
        } else {
            return 'Ø¦ÛŽÙˆØ§Ø±Ù‡â€Œ';
        }
    },
    calendar: {
        sameDay: '[Ø¦Ù‡â€ŒÙ…Ø±Û† ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        nextDay: '[Ø¨Ù‡â€ŒÛŒØ§Ù†ÛŒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        nextWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        lastDay: '[Ø¯ÙˆÛŽÙ†ÛŽ ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        lastWeek: 'dddd [ÙƒØ§ØªÚ˜Ù…ÛŽØ±] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ù„Ù‡â€Œ %s',
        past: '%s',
        s: 'Ú†Ù‡â€ŒÙ†Ø¯ Ú†Ø±ÙƒÙ‡â€ŒÛŒÙ‡â€ŒÙƒ',
        ss: 'Ú†Ø±ÙƒÙ‡â€Œ %d',
        m: 'ÛŒÙ‡â€ŒÙƒ Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
        mm: '%d Ø®ÙˆÙ„Ù‡â€ŒÙƒ',
        h: 'ÛŒÙ‡â€ŒÙƒ ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
        hh: '%d ÙƒØ§ØªÚ˜Ù…ÛŽØ±',
        d: 'ÛŒÙ‡â€ŒÙƒ Ú•Û†Ú˜',
        dd: '%d Ú•Û†Ú˜',
        M: 'ÛŒÙ‡â€ŒÙƒ Ù…Ø§Ù†Ú¯',
        MM: '%d Ù…Ø§Ù†Ú¯',
        y: 'ÛŒÙ‡â€ŒÙƒ Ø³Ø§Úµ',
        yy: '%d Ø³Ø§Úµ',
    },
    preparse: function (string) {
        return string
            .replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g, function (match) {
                return numberMap[match];
            })
            .replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string
            .replace(/\d/g, function (match) {
                return symbolMap[match];
            })
            .replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Kyrgyz [ky]
//! author : Chyngyz Arystan uulu : https://github.com/chyngyz

import moment from '../moment';

var suffixes = {
    0: '-Ñ‡Ò¯',
    1: '-Ñ‡Ð¸',
    2: '-Ñ‡Ð¸',
    3: '-Ñ‡Ò¯',
    4: '-Ñ‡Ò¯',
    5: '-Ñ‡Ð¸',
    6: '-Ñ‡Ñ‹',
    7: '-Ñ‡Ð¸',
    8: '-Ñ‡Ð¸',
    9: '-Ñ‡Ñƒ',
    10: '-Ñ‡Ñƒ',
    20: '-Ñ‡Ñ‹',
    30: '-Ñ‡Ñƒ',
    40: '-Ñ‡Ñ‹',
    50: '-Ñ‡Ò¯',
    60: '-Ñ‡Ñ‹',
    70: '-Ñ‡Ð¸',
    80: '-Ñ‡Ð¸',
    90: '-Ñ‡Ñƒ',
    100: '-Ñ‡Ò¯',
};

export default moment.defineLocale('ky', {
    months: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
        '_'
    ),
    monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split(
        '_'
    ),
    weekdays: 'Ð–ÐµÐºÑˆÐµÐ¼Ð±Ð¸_Ð”Ò¯Ð¹ÑˆÓ©Ð¼Ð±Ò¯_Ð¨ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð¨Ð°Ñ€ÑˆÐµÐ¼Ð±Ð¸_Ð‘ÐµÐ¹ÑˆÐµÐ¼Ð±Ð¸_Ð–ÑƒÐ¼Ð°_Ð˜ÑˆÐµÐ¼Ð±Ð¸'.split(
        '_'
    ),
    weekdaysShort: 'Ð–ÐµÐº_Ð”Ò¯Ð¹_Ð¨ÐµÐ¹_Ð¨Ð°Ñ€_Ð‘ÐµÐ¹_Ð–ÑƒÐ¼_Ð˜ÑˆÐµ'.split('_'),
    weekdaysMin: 'Ð–Ðº_Ð”Ð¹_Ð¨Ð¹_Ð¨Ñ€_Ð‘Ð¹_Ð–Ð¼_Ð˜Ñˆ'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ð‘Ò¯Ð³Ò¯Ð½ ÑÐ°Ð°Ñ‚] LT',
        nextDay: '[Ð­Ñ€Ñ‚ÐµÒ£ ÑÐ°Ð°Ñ‚] LT',
        nextWeek: 'dddd [ÑÐ°Ð°Ñ‚] LT',
        lastDay: '[ÐšÐµÑ‡ÑÑ ÑÐ°Ð°Ñ‚] LT',
        lastWeek: '[Ó¨Ñ‚ÐºÓ©Ð½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ð½] dddd [ÐºÒ¯Ð½Ò¯] [ÑÐ°Ð°Ñ‚] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ð¸Ñ‡Ð¸Ð½Ð´Ðµ',
        past: '%s Ð¼ÑƒÑ€ÑƒÐ½',
        s: 'Ð±Ð¸Ñ€Ð½ÐµÑ‡Ðµ ÑÐµÐºÑƒÐ½Ð´',
        ss: '%d ÑÐµÐºÑƒÐ½Ð´',
        m: 'Ð±Ð¸Ñ€ Ð¼Ò¯Ð½Ó©Ñ‚',
        mm: '%d Ð¼Ò¯Ð½Ó©Ñ‚',
        h: 'Ð±Ð¸Ñ€ ÑÐ°Ð°Ñ‚',
        hh: '%d ÑÐ°Ð°Ñ‚',
        d: 'Ð±Ð¸Ñ€ ÐºÒ¯Ð½',
        dd: '%d ÐºÒ¯Ð½',
        M: 'Ð±Ð¸Ñ€ Ð°Ð¹',
        MM: '%d Ð°Ð¹',
        y: 'Ð±Ð¸Ñ€ Ð¶Ñ‹Ð»',
        yy: '%d Ð¶Ñ‹Ð»',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ñ‡Ð¸|Ñ‡Ñ‹|Ñ‡Ò¯|Ñ‡Ñƒ)/,
    ordinal: function (number) {
        var a = number % 10,
            b = number >= 100 ? 100 : null;
        return number + (suffixes[number] || suffixes[a] || suffixes[b]);
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Luxembourgish [lb]
//! author : mweimerskirch : https://github.com/mweimerskirch
//! author : David Raison : https://github.com/kwisatz

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        m: ['eng Minutt', 'enger Minutt'],
        h: ['eng Stonn', 'enger Stonn'],
        d: ['een Dag', 'engem Dag'],
        M: ['ee Mount', 'engem Mount'],
        y: ['ee Joer', 'engem Joer'],
    };
    return withoutSuffix ? format[key][0] : format[key][1];
}
function processFutureTime(string) {
    var number = string.substr(0, string.indexOf(' '));
    if (eifelerRegelAppliesToNumber(number)) {
        return 'a ' + string;
    }
    return 'an ' + string;
}
function processPastTime(string) {
    var number = string.substr(0, string.indexOf(' '));
    if (eifelerRegelAppliesToNumber(number)) {
        return 'viru ' + string;
    }
    return 'virun ' + string;
}
/**
 * Returns true if the word before the given number loses the '-n' ending.
 * e.g. 'an 10 Deeg' but 'a 5 Deeg'
 *
 * @param number {integer}
 * @returns {boolean}
 */
function eifelerRegelAppliesToNumber(number) {
    number = parseInt(number, 10);
    if (isNaN(number)) {
        return false;
    }
    if (number < 0) {
        // Negative Number --> always true
        return true;
    } else if (number < 10) {
        // Only 1 digit
        if (4 <= number && number <= 7) {
            return true;
        }
        return false;
    } else if (number < 100) {
        // 2 digits
        var lastDigit = number % 10,
            firstDigit = number / 10;
        if (lastDigit === 0) {
            return eifelerRegelAppliesToNumber(firstDigit);
        }
        return eifelerRegelAppliesToNumber(lastDigit);
    } else if (number < 10000) {
        // 3 or 4 digits --> recursively check first digit
        while (number >= 10) {
            number = number / 10;
        }
        return eifelerRegelAppliesToNumber(number);
    } else {
        // Anything larger than 4 digits: recursively check first n-3 digits
        number = number / 1000;
        return eifelerRegelAppliesToNumber(number);
    }
}

export default moment.defineLocale('lb', {
    months: 'Januar_Februar_MÃ¤erz_AbrÃ«ll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
        '_'
    ),
    monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Sonndeg_MÃ©indeg_DÃ«nschdeg_MÃ«ttwoch_Donneschdeg_Freideg_Samschdeg'.split(
        '_'
    ),
    weekdaysShort: 'So._MÃ©._DÃ«._MÃ«._Do._Fr._Sa.'.split('_'),
    weekdaysMin: 'So_MÃ©_DÃ«_MÃ«_Do_Fr_Sa'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm [Auer]',
        LTS: 'H:mm:ss [Auer]',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm [Auer]',
        LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
    },
    calendar: {
        sameDay: '[Haut um] LT',
        sameElse: 'L',
        nextDay: '[Muer um] LT',
        nextWeek: 'dddd [um] LT',
        lastDay: '[GÃ«schter um] LT',
        lastWeek: function () {
            // Different date string for 'DÃ«nschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
            switch (this.day()) {
                case 2:
                case 4:
                    return '[Leschten] dddd [um] LT';
                default:
                    return '[Leschte] dddd [um] LT';
            }
        },
    },
    relativeTime: {
        future: processFutureTime,
        past: processPastTime,
        s: 'e puer Sekonnen',
        ss: '%d Sekonnen',
        m: processRelativeTime,
        mm: '%d Minutten',
        h: processRelativeTime,
        hh: '%d Stonnen',
        d: processRelativeTime,
        dd: '%d Deeg',
        M: processRelativeTime,
        MM: '%d MÃ©int',
        y: processRelativeTime,
        yy: '%d Joer',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Lao [lo]
//! author : Ryan Hart : https://github.com/ryanhart2

import moment from '../moment';

export default moment.defineLocale('lo', {
    months: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
        '_'
    ),
    monthsShort: 'àº¡àº±àº‡àºàº­àº™_àºàº¸àº¡àºžàº²_àº¡àºµàº™àº²_à»€àº¡àºªàº²_àºžàº¶àº”àºªàº°àºžàº²_àº¡àº´àº–àº¸àº™àº²_àºà»àº¥àº°àºàº»àº”_àºªàº´àº‡àº«àº²_àºàº±àº™àºàº²_àº•àº¸àº¥àº²_àºžàº°àºˆàº´àº_àº—àº±àº™àº§àº²'.split(
        '_'
    ),
    weekdays: 'àº­àº²àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
    weekdaysShort: 'àº—àº´àº”_àºˆàº±àº™_àº­àº±àº‡àº„àº²àº™_àºžàº¸àº”_àºžàº°àº«àº±àº”_àºªàº¸àº_à»€àºªàº»àº²'.split('_'),
    weekdaysMin: 'àº—_àºˆ_àº­àº„_àºž_àºžàº«_àºªàº_àºª'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'àº§àº±àº™dddd D MMMM YYYY HH:mm',
    },
    meridiemParse: /àº•àº­àº™à»€àºŠàº»à»‰àº²|àº•àº­àº™à»àº¥àº‡/,
    isPM: function (input) {
        return input === 'àº•àº­àº™à»àº¥àº‡';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'àº•àº­àº™à»€àºŠàº»à»‰àº²';
        } else {
            return 'àº•àº­àº™à»àº¥àº‡';
        }
    },
    calendar: {
        sameDay: '[àº¡àº·à»‰àº™àºµà»‰à»€àº§àº¥àº²] LT',
        nextDay: '[àº¡àº·à»‰àº­àº·à»ˆàº™à»€àº§àº¥àº²] LT',
        nextWeek: '[àº§àº±àº™]dddd[à»œà»‰àº²à»€àº§àº¥àº²] LT',
        lastDay: '[àº¡àº·à»‰àº§àº²àº™àº™àºµà»‰à»€àº§àº¥àº²] LT',
        lastWeek: '[àº§àº±àº™]dddd[à»àº¥à»‰àº§àº™àºµà»‰à»€àº§àº¥àº²] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'àº­àºµàº %s',
        past: '%sàºœà»ˆàº²àº™àº¡àº²',
        s: 'àºšà»à»ˆà»€àº—àº»à»ˆàº²à»ƒàº”àº§àº´àº™àº²àº—àºµ',
        ss: '%d àº§àº´àº™àº²àº—àºµ',
        m: '1 àº™àº²àº—àºµ',
        mm: '%d àº™àº²àº—àºµ',
        h: '1 àºŠàº»à»ˆàº§à»‚àº¡àº‡',
        hh: '%d àºŠàº»à»ˆàº§à»‚àº¡àº‡',
        d: '1 àº¡àº·à»‰',
        dd: '%d àº¡àº·à»‰',
        M: '1 à»€àº”àº·àº­àº™',
        MM: '%d à»€àº”àº·àº­àº™',
        y: '1 àº›àºµ',
        yy: '%d àº›àºµ',
    },
    dayOfMonthOrdinalParse: /(àº—àºµà»ˆ)\d{1,2}/,
    ordinal: function (number) {
        return 'àº—àºµà»ˆ' + number;
    },
});
//! moment.js locale configuration
//! locale : Lithuanian [lt]
//! author : Mindaugas MozÅ«ras : https://github.com/mmozuras

import moment from '../moment';

var units = {
    ss: 'sekundÄ—_sekundÅ¾iÅ³_sekundes',
    m: 'minutÄ—_minutÄ—s_minutÄ™',
    mm: 'minutÄ—s_minuÄiÅ³_minutes',
    h: 'valanda_valandos_valandÄ…',
    hh: 'valandos_valandÅ³_valandas',
    d: 'diena_dienos_dienÄ…',
    dd: 'dienos_dienÅ³_dienas',
    M: 'mÄ—nuo_mÄ—nesio_mÄ—nesÄ¯',
    MM: 'mÄ—nesiai_mÄ—nesiÅ³_mÄ—nesius',
    y: 'metai_metÅ³_metus',
    yy: 'metai_metÅ³_metus',
};
function translateSeconds(number, withoutSuffix, key, isFuture) {
    if (withoutSuffix) {
        return 'kelios sekundÄ—s';
    } else {
        return isFuture ? 'keliÅ³ sekundÅ¾iÅ³' : 'kelias sekundes';
    }
}
function translateSingular(number, withoutSuffix, key, isFuture) {
    return withoutSuffix
        ? forms(key)[0]
        : isFuture
        ? forms(key)[1]
        : forms(key)[2];
}
function special(number) {
    return number % 10 === 0 || (number > 10 && number < 20);
}
function forms(key) {
    return units[key].split('_');
}
function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    if (number === 1) {
        return (
            result + translateSingular(number, withoutSuffix, key[0], isFuture)
        );
    } else if (withoutSuffix) {
        return result + (special(number) ? forms(key)[1] : forms(key)[0]);
    } else {
        if (isFuture) {
            return result + forms(key)[1];
        } else {
            return result + (special(number) ? forms(key)[1] : forms(key)[2]);
        }
    }
}
export default moment.defineLocale('lt', {
    months: {
        format: 'sausio_vasario_kovo_balandÅ¾io_geguÅ¾Ä—s_birÅ¾elio_liepos_rugpjÅ«Äio_rugsÄ—jo_spalio_lapkriÄio_gruodÅ¾io'.split(
            '_'
        ),
        standalone: 'sausis_vasaris_kovas_balandis_geguÅ¾Ä—_birÅ¾elis_liepa_rugpjÅ«tis_rugsÄ—jis_spalis_lapkritis_gruodis'.split(
            '_'
        ),
        isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
    },
    monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
    weekdays: {
        format: 'sekmadienÄ¯_pirmadienÄ¯_antradienÄ¯_treÄiadienÄ¯_ketvirtadienÄ¯_penktadienÄ¯_Å¡eÅ¡tadienÄ¯'.split(
            '_'
        ),
        standalone: 'sekmadienis_pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis'.split(
            '_'
        ),
        isFormat: /dddd HH:mm/,
    },
    weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡'.split('_'),
    weekdaysMin: 'S_P_A_T_K_Pn_Å '.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'YYYY [m.] MMMM D [d.]',
        LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
        LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
        l: 'YYYY-MM-DD',
        ll: 'YYYY [m.] MMMM D [d.]',
        lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
        llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
    },
    calendar: {
        sameDay: '[Å iandien] LT',
        nextDay: '[Rytoj] LT',
        nextWeek: 'dddd LT',
        lastDay: '[Vakar] LT',
        lastWeek: '[PraÄ—jusÄ¯] dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'po %s',
        past: 'prieÅ¡ %s',
        s: translateSeconds,
        ss: translate,
        m: translateSingular,
        mm: translate,
        h: translateSingular,
        hh: translate,
        d: translateSingular,
        dd: translate,
        M: translateSingular,
        MM: translate,
        y: translateSingular,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}-oji/,
    ordinal: function (number) {
        return number + '-oji';
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Latvian [lv]
//! author : Kristaps Karlsons : https://github.com/skakri
//! author : JÄnis Elmeris : https://github.com/JanisE

import moment from '../moment';

var units = {
    ss: 'sekundes_sekundÄ“m_sekunde_sekundes'.split('_'),
    m: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
    mm: 'minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes'.split('_'),
    h: 'stundas_stundÄm_stunda_stundas'.split('_'),
    hh: 'stundas_stundÄm_stunda_stundas'.split('_'),
    d: 'dienas_dienÄm_diena_dienas'.split('_'),
    dd: 'dienas_dienÄm_diena_dienas'.split('_'),
    M: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
    MM: 'mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i'.split('_'),
    y: 'gada_gadiem_gads_gadi'.split('_'),
    yy: 'gada_gadiem_gads_gadi'.split('_'),
};
/**
 * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
 */
function format(forms, number, withoutSuffix) {
    if (withoutSuffix) {
        // E.g. "21 minÅ«te", "3 minÅ«tes".
        return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
    } else {
        // E.g. "21 minÅ«tes" as in "pÄ“c 21 minÅ«tes".
        // E.g. "3 minÅ«tÄ“m" as in "pÄ“c 3 minÅ«tÄ“m".
        return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
    }
}
function relativeTimeWithPlural(number, withoutSuffix, key) {
    return number + ' ' + format(units[key], number, withoutSuffix);
}
function relativeTimeWithSingular(number, withoutSuffix, key) {
    return format(units[key], number, withoutSuffix);
}
function relativeSeconds(number, withoutSuffix) {
    return withoutSuffix ? 'daÅ¾as sekundes' : 'daÅ¾Äm sekundÄ“m';
}

export default moment.defineLocale('lv', {
    months: 'janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec'.split('_'),
    weekdays: 'svÄ“tdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena'.split(
        '_'
    ),
    weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
    weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY.',
        LL: 'YYYY. [gada] D. MMMM',
        LLL: 'YYYY. [gada] D. MMMM, HH:mm',
        LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
    },
    calendar: {
        sameDay: '[Å odien pulksten] LT',
        nextDay: '[RÄ«t pulksten] LT',
        nextWeek: 'dddd [pulksten] LT',
        lastDay: '[Vakar pulksten] LT',
        lastWeek: '[PagÄjuÅ¡Ä] dddd [pulksten] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'pÄ“c %s',
        past: 'pirms %s',
        s: relativeSeconds,
        ss: relativeTimeWithPlural,
        m: relativeTimeWithSingular,
        mm: relativeTimeWithPlural,
        h: relativeTimeWithSingular,
        hh: relativeTimeWithPlural,
        d: relativeTimeWithSingular,
        dd: relativeTimeWithPlural,
        M: relativeTimeWithSingular,
        MM: relativeTimeWithPlural,
        y: relativeTimeWithSingular,
        yy: relativeTimeWithPlural,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Montenegrin [me]
//! author : Miodrag NikaÄ <miodrag@restartit.me> : https://github.com/miodragnikac

import moment from '../moment';

var translator = {
    words: {
        //Different grammatical cases
        ss: ['sekund', 'sekunda', 'sekundi'],
        m: ['jedan minut', 'jednog minuta'],
        mm: ['minut', 'minuta', 'minuta'],
        h: ['jedan sat', 'jednog sata'],
        hh: ['sat', 'sata', 'sati'],
        dd: ['dan', 'dana', 'dana'],
        MM: ['mjesec', 'mjeseca', 'mjeseci'],
        yy: ['godina', 'godine', 'godina'],
    },
    correctGrammaticalCase: function (number, wordKey) {
        return number === 1
            ? wordKey[0]
            : number >= 2 && number <= 4
            ? wordKey[1]
            : wordKey[2];
    },
    translate: function (number, withoutSuffix, key) {
        var wordKey = translator.words[key];
        if (key.length === 1) {
            return withoutSuffix ? wordKey[0] : wordKey[1];
        } else {
            return (
                number +
                ' ' +
                translator.correctGrammaticalCase(number, wordKey)
            );
        }
    },
};

export default moment.defineLocale('me', {
    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota'.split(
        '_'
    ),
    weekdaysShort: 'ned._pon._uto._sri._Äet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd, D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[danas u] LT',
        nextDay: '[sjutra u] LT',

        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[u] [nedjelju] [u] LT';
                case 3:
                    return '[u] [srijedu] [u] LT';
                case 6:
                    return '[u] [subotu] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[u] dddd [u] LT';
            }
        },
        lastDay: '[juÄe u] LT',
        lastWeek: function () {
            var lastWeekDays = [
                '[proÅ¡le] [nedjelje] [u] LT',
                '[proÅ¡log] [ponedjeljka] [u] LT',
                '[proÅ¡log] [utorka] [u] LT',
                '[proÅ¡le] [srijede] [u] LT',
                '[proÅ¡log] [Äetvrtka] [u] LT',
                '[proÅ¡log] [petka] [u] LT',
                '[proÅ¡le] [subote] [u] LT',
            ];
            return lastWeekDays[this.day()];
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'prije %s',
        s: 'nekoliko sekundi',
        ss: translator.translate,
        m: translator.translate,
        mm: translator.translate,
        h: translator.translate,
        hh: translator.translate,
        d: 'dan',
        dd: translator.translate,
        M: 'mjesec',
        MM: translator.translate,
        y: 'godinu',
        yy: translator.translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Maori [mi]
//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal

import moment from '../moment';

export default moment.defineLocale('mi', {
    months: 'Kohi-tÄte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whÄwhÄ_Haratua_Pipiri_HÅngoingoi_Here-turi-kÅkÄ_Mahuru_Whiringa-Ä-nuku_Whiringa-Ä-rangi_Hakihea'.split(
        '_'
    ),
    monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_HÅngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
        '_'
    ),
    monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
    monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
    monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
    monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
    weekdays: 'RÄtapu_Mane_TÅ«rei_Wenerei_TÄite_Paraire_HÄtarei'.split('_'),
    weekdaysShort: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
    weekdaysMin: 'Ta_Ma_TÅ«_We_TÄi_Pa_HÄ'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [i] HH:mm',
        LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
    },
    calendar: {
        sameDay: '[i teie mahana, i] LT',
        nextDay: '[apopo i] LT',
        nextWeek: 'dddd [i] LT',
        lastDay: '[inanahi i] LT',
        lastWeek: 'dddd [whakamutunga i] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'i roto i %s',
        past: '%s i mua',
        s: 'te hÄ“kona ruarua',
        ss: '%d hÄ“kona',
        m: 'he meneti',
        mm: '%d meneti',
        h: 'te haora',
        hh: '%d haora',
        d: 'he ra',
        dd: '%d ra',
        M: 'he marama',
        MM: '%d marama',
        y: 'he tau',
        yy: '%d tau',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Macedonian [mk]
//! author : Borislav Mickov : https://github.com/B0k0
//! author : Sashko Todorov : https://github.com/bkyceh
import moment from '../moment';

export default moment.defineLocale('mk', {
    months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½Ð¸_Ñ˜ÑƒÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸'.split(
        '_'
    ),
    monthsShort: 'Ñ˜Ð°Ð½_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº'.split('_'),
    weekdays: 'Ð½ÐµÐ´ÐµÐ»Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð¾Ðº_Ð¿ÐµÑ‚Ð¾Ðº_ÑÐ°Ð±Ð¾Ñ‚Ð°'.split(
        '_'
    ),
    weekdaysShort: 'Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ðµ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÐ°Ð±'.split('_'),
    weekdaysMin: 'Ð½e_Ð¿o_Ð²Ñ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_Ña'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'D.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY H:mm',
        LLLL: 'dddd, D MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[Ð”ÐµÐ½ÐµÑ Ð²Ð¾] LT',
        nextDay: '[Ð£Ñ‚Ñ€Ðµ Ð²Ð¾] LT',
        nextWeek: '[Ð’Ð¾] dddd [Ð²Ð¾] LT',
        lastDay: '[Ð’Ñ‡ÐµÑ€Ð° Ð²Ð¾] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                case 6:
                    return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð°Ñ‚Ð°] dddd [Ð²Ð¾] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð¸Ð¾Ñ‚] dddd [Ð²Ð¾] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð·Ð° %s',
        past: 'Ð¿Ñ€ÐµÐ´ %s',
        s: 'Ð½ÐµÐºÐ¾Ð»ÐºÑƒ ÑÐµÐºÑƒÐ½Ð´Ð¸',
        ss: '%d ÑÐµÐºÑƒÐ½Ð´Ð¸',
        m: 'ÐµÐ´Ð½Ð° Ð¼Ð¸Ð½ÑƒÑ‚Ð°',
        mm: '%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸',
        h: 'ÐµÐ´ÐµÐ½ Ñ‡Ð°Ñ',
        hh: '%d Ñ‡Ð°ÑÐ°',
        d: 'ÐµÐ´ÐµÐ½ Ð´ÐµÐ½',
        dd: '%d Ð´ÐµÐ½Ð°',
        M: 'ÐµÐ´ÐµÐ½ Ð¼ÐµÑÐµÑ†',
        MM: '%d Ð¼ÐµÑÐµÑ†Ð¸',
        y: 'ÐµÐ´Ð½Ð° Ð³Ð¾Ð´Ð¸Ð½Ð°',
        yy: '%d Ð³Ð¾Ð´Ð¸Ð½Ð¸',
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,
    ordinal: function (number) {
        var lastDigit = number % 10,
            last2Digits = number % 100;
        if (number === 0) {
            return number + '-ÐµÐ²';
        } else if (last2Digits === 0) {
            return number + '-ÐµÐ½';
        } else if (last2Digits > 10 && last2Digits < 20) {
            return number + '-Ñ‚Ð¸';
        } else if (lastDigit === 1) {
            return number + '-Ð²Ð¸';
        } else if (lastDigit === 2) {
            return number + '-Ñ€Ð¸';
        } else if (lastDigit === 7 || lastDigit === 8) {
            return number + '-Ð¼Ð¸';
        } else {
            return number + '-Ñ‚Ð¸';
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Malayalam [ml]
//! author : Floyd Pink : https://github.com/floydpink

import moment from '../moment';

export default moment.defineLocale('ml', {
    months: 'à´œà´¨àµà´µà´°à´¿_à´«àµ†à´¬àµà´°àµà´µà´°à´¿_à´®à´¾àµ¼à´šàµà´šàµ_à´à´ªàµà´°à´¿àµ½_à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ_à´“à´—à´¸àµà´±àµà´±àµ_à´¸àµ†à´ªàµà´±àµà´±à´‚à´¬àµ¼_à´’à´•àµà´Ÿàµ‹à´¬àµ¼_à´¨à´µà´‚à´¬àµ¼_à´¡à´¿à´¸à´‚à´¬àµ¼'.split(
        '_'
    ),
    monthsShort: 'à´œà´¨àµ._à´«àµ†à´¬àµà´°àµ._à´®à´¾àµ¼._à´à´ªàµà´°à´¿._à´®àµ‡à´¯àµ_à´œàµ‚àµº_à´œàµ‚à´²àµˆ._à´“à´—._à´¸àµ†à´ªàµà´±àµà´±._à´’à´•àµà´Ÿàµ‹._à´¨à´µà´‚._à´¡à´¿à´¸à´‚.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à´žà´¾à´¯à´±à´¾à´´àµà´š_à´¤à´¿à´™àµà´•à´³à´¾à´´àµà´š_à´šàµŠà´µàµà´µà´¾à´´àµà´š_à´¬àµà´§à´¨à´¾à´´àµà´š_à´µàµà´¯à´¾à´´à´¾à´´àµà´š_à´µàµ†à´³àµà´³à´¿à´¯à´¾à´´àµà´š_à´¶à´¨à´¿à´¯à´¾à´´àµà´š'.split(
        '_'
    ),
    weekdaysShort: 'à´žà´¾à´¯àµ¼_à´¤à´¿à´™àµà´•àµ¾_à´šàµŠà´µàµà´µ_à´¬àµà´§àµ»_à´µàµà´¯à´¾à´´à´‚_à´µàµ†à´³àµà´³à´¿_à´¶à´¨à´¿'.split('_'),
    weekdaysMin: 'à´žà´¾_à´¤à´¿_à´šàµŠ_à´¬àµ_à´µàµà´¯à´¾_à´µàµ†_à´¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm -à´¨àµ',
        LTS: 'A h:mm:ss -à´¨àµ',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm -à´¨àµ',
        LLLL: 'dddd, D MMMM YYYY, A h:mm -à´¨àµ',
    },
    calendar: {
        sameDay: '[à´‡à´¨àµà´¨àµ] LT',
        nextDay: '[à´¨à´¾à´³àµ†] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à´‡à´¨àµà´¨à´²àµ†] LT',
        lastWeek: '[à´•à´´à´¿à´žàµà´ž] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à´•à´´à´¿à´žàµà´žàµ',
        past: '%s à´®àµàµ»à´ªàµ',
        s: 'à´…àµ½à´ª à´¨à´¿à´®à´¿à´·à´™àµà´™àµ¾',
        ss: '%d à´¸àµ†à´•àµà´•àµ»à´¡àµ',
        m: 'à´’à´°àµ à´®à´¿à´¨à´¿à´±àµà´±àµ',
        mm: '%d à´®à´¿à´¨à´¿à´±àµà´±àµ',
        h: 'à´’à´°àµ à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
        hh: '%d à´®à´£à´¿à´•àµà´•àµ‚àµ¼',
        d: 'à´’à´°àµ à´¦à´¿à´µà´¸à´‚',
        dd: '%d à´¦à´¿à´µà´¸à´‚',
        M: 'à´’à´°àµ à´®à´¾à´¸à´‚',
        MM: '%d à´®à´¾à´¸à´‚',
        y: 'à´’à´°àµ à´µàµ¼à´·à´‚',
        yy: '%d à´µàµ¼à´·à´‚',
    },
    meridiemParse: /à´°à´¾à´¤àµà´°à´¿|à´°à´¾à´µà´¿à´²àµ†|à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ|à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚|à´°à´¾à´¤àµà´°à´¿/i,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (
            (meridiem === 'à´°à´¾à´¤àµà´°à´¿' && hour >= 4) ||
            meridiem === 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ' ||
            meridiem === 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚'
        ) {
            return hour + 12;
        } else {
            return hour;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à´°à´¾à´¤àµà´°à´¿';
        } else if (hour < 12) {
            return 'à´°à´¾à´µà´¿à´²àµ†';
        } else if (hour < 17) {
            return 'à´‰à´šàµà´š à´•à´´à´¿à´žàµà´žàµ';
        } else if (hour < 20) {
            return 'à´µàµˆà´•àµà´¨àµà´¨àµ‡à´°à´‚';
        } else {
            return 'à´°à´¾à´¤àµà´°à´¿';
        }
    },
});
//! moment.js locale configuration
//! locale : Mongolian [mn]
//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7

import moment from '../moment';

function translate(number, withoutSuffix, key, isFuture) {
    switch (key) {
        case 's':
            return withoutSuffix ? 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´' : 'Ñ…ÑÐ´Ñ…ÑÐ½ ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½';
        case 'ss':
            return number + (withoutSuffix ? ' ÑÐµÐºÑƒÐ½Ð´' : ' ÑÐµÐºÑƒÐ½Ð´Ñ‹Ð½');
        case 'm':
        case 'mm':
            return number + (withoutSuffix ? ' Ð¼Ð¸Ð½ÑƒÑ‚' : ' Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹Ð½');
        case 'h':
        case 'hh':
            return number + (withoutSuffix ? ' Ñ†Ð°Ð³' : ' Ñ†Ð°Ð³Ð¸Ð¹Ð½');
        case 'd':
        case 'dd':
            return number + (withoutSuffix ? ' Ó©Ð´Ó©Ñ€' : ' Ó©Ð´Ñ€Ð¸Ð¹Ð½');
        case 'M':
        case 'MM':
            return number + (withoutSuffix ? ' ÑÐ°Ñ€' : ' ÑÐ°Ñ€Ñ‹Ð½');
        case 'y':
        case 'yy':
            return number + (withoutSuffix ? ' Ð¶Ð¸Ð»' : ' Ð¶Ð¸Ð»Ð¸Ð¹Ð½');
        default:
            return number;
    }
}

export default moment.defineLocale('mn', {
    months: 'ÐÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¥Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð“ÑƒÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ó©Ñ€Ó©Ð²Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_Ð¢Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð—ÑƒÑ€Ð³Ð°Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð”Ð¾Ð»Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÐ°Ð¹Ð¼Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_Ð•ÑÐ´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð°Ð²Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ð½ÑÐ³Ð´Ò¯Ð³ÑÑÑ€ ÑÐ°Ñ€_ÐÑ€Ð²Ð°Ð½ Ñ…Ð¾Ñ‘Ñ€Ð´ÑƒÐ³Ð°Ð°Ñ€ ÑÐ°Ñ€'.split(
        '_'
    ),
    monthsShort: '1 ÑÐ°Ñ€_2 ÑÐ°Ñ€_3 ÑÐ°Ñ€_4 ÑÐ°Ñ€_5 ÑÐ°Ñ€_6 ÑÐ°Ñ€_7 ÑÐ°Ñ€_8 ÑÐ°Ñ€_9 ÑÐ°Ñ€_10 ÑÐ°Ñ€_11 ÑÐ°Ñ€_12 ÑÐ°Ñ€'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'ÐÑÐ¼_Ð”Ð°Ð²Ð°Ð°_ÐœÑÐ³Ð¼Ð°Ñ€_Ð›Ñ…Ð°Ð³Ð²Ð°_ÐŸÒ¯Ñ€ÑÐ²_Ð‘Ð°Ð°ÑÐ°Ð½_Ð‘ÑÐ¼Ð±Ð°'.split('_'),
    weekdaysShort: 'ÐÑÐ¼_Ð”Ð°Ð²_ÐœÑÐ³_Ð›Ñ…Ð°_ÐŸÒ¯Ñ€_Ð‘Ð°Ð°_Ð‘ÑÐ¼'.split('_'),
    weekdaysMin: 'ÐÑ_Ð”Ð°_ÐœÑ_Ð›Ñ…_ÐŸÒ¯_Ð‘Ð°_Ð‘Ñ'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D',
        LLL: 'YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
        LLLL: 'dddd, YYYY Ð¾Ð½Ñ‹ MMMMÑ‹Ð½ D HH:mm',
    },
    meridiemParse: /Ò®Ó¨|Ò®Ð¥/i,
    isPM: function (input) {
        return input === 'Ò®Ð¥';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'Ò®Ó¨';
        } else {
            return 'Ò®Ð¥';
        }
    },
    calendar: {
        sameDay: '[Ó¨Ð½Ó©Ó©Ð´Ó©Ñ€] LT',
        nextDay: '[ÐœÐ°Ñ€Ð³Ð°Ð°Ñˆ] LT',
        nextWeek: '[Ð˜Ñ€ÑÑ…] dddd LT',
        lastDay: '[Ó¨Ñ‡Ð¸Ð³Ð´Ó©Ñ€] LT',
        lastWeek: '[Ó¨Ð½Ð³Ó©Ñ€ÑÓ©Ð½] dddd LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ð´Ð°Ñ€Ð°Ð°',
        past: '%s Ó©Ð¼Ð½Ó©',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2} Ó©Ð´Ó©Ñ€/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + ' Ó©Ð´Ó©Ñ€';
            default:
                return number;
        }
    },
});
//! moment.js locale configuration
//! locale : Marathi [mr]
//! author : Harshad Kale : https://github.com/kalehv
//! author : Vivek Athalye : https://github.com/vnathalye

import moment from '../moment';

var symbolMap = {
        1: 'à¥§',
        2: 'à¥¨',
        3: 'à¥©',
        4: 'à¥ª',
        5: 'à¥«',
        6: 'à¥¬',
        7: 'à¥­',
        8: 'à¥®',
        9: 'à¥¯',
        0: 'à¥¦',
    },
    numberMap = {
        'à¥§': '1',
        'à¥¨': '2',
        'à¥©': '3',
        'à¥ª': '4',
        'à¥«': '5',
        'à¥¬': '6',
        'à¥­': '7',
        'à¥®': '8',
        'à¥¯': '9',
        'à¥¦': '0',
    };

function relativeTimeMr(number, withoutSuffix, string, isFuture) {
    var output = '';
    if (withoutSuffix) {
        switch (string) {
            case 's':
                output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦';
                break;
            case 'ss':
                output = '%d à¤¸à¥‡à¤•à¤‚à¤¦';
                break;
            case 'm':
                output = 'à¤à¤• à¤®à¤¿à¤¨à¤¿à¤Ÿ';
                break;
            case 'mm':
                output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¥‡';
                break;
            case 'h':
                output = 'à¤à¤• à¤¤à¤¾à¤¸';
                break;
            case 'hh':
                output = '%d à¤¤à¤¾à¤¸';
                break;
            case 'd':
                output = 'à¤à¤• à¤¦à¤¿à¤µà¤¸';
                break;
            case 'dd':
                output = '%d à¤¦à¤¿à¤µà¤¸';
                break;
            case 'M':
                output = 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾';
                break;
            case 'MM':
                output = '%d à¤®à¤¹à¤¿à¤¨à¥‡';
                break;
            case 'y':
                output = 'à¤à¤• à¤µà¤°à¥à¤·';
                break;
            case 'yy':
                output = '%d à¤µà¤°à¥à¤·à¥‡';
                break;
        }
    } else {
        switch (string) {
            case 's':
                output = 'à¤•à¤¾à¤¹à¥€ à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                break;
            case 'ss':
                output = '%d à¤¸à¥‡à¤•à¤‚à¤¦à¤¾à¤‚';
                break;
            case 'm':
                output = 'à¤à¤•à¤¾ à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾';
                break;
            case 'mm':
                output = '%d à¤®à¤¿à¤¨à¤¿à¤Ÿà¤¾à¤‚';
                break;
            case 'h':
                output = 'à¤à¤•à¤¾ à¤¤à¤¾à¤¸à¤¾';
                break;
            case 'hh':
                output = '%d à¤¤à¤¾à¤¸à¤¾à¤‚';
                break;
            case 'd':
                output = 'à¤à¤•à¤¾ à¤¦à¤¿à¤µà¤¸à¤¾';
                break;
            case 'dd':
                output = '%d à¤¦à¤¿à¤µà¤¸à¤¾à¤‚';
                break;
            case 'M':
                output = 'à¤à¤•à¤¾ à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾';
                break;
            case 'MM':
                output = '%d à¤®à¤¹à¤¿à¤¨à¥à¤¯à¤¾à¤‚';
                break;
            case 'y':
                output = 'à¤à¤•à¤¾ à¤µà¤°à¥à¤·à¤¾';
                break;
            case 'yy':
                output = '%d à¤µà¤°à¥à¤·à¤¾à¤‚';
                break;
        }
    }
    return output.replace(/%d/i, number);
}

export default moment.defineLocale('mr', {
    months: 'à¤œà¤¾à¤¨à¥‡à¤µà¤¾à¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤¾à¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤à¤ªà¥à¤°à¤¿à¤²_à¤®à¥‡_à¤œà¥‚à¤¨_à¤œà¥à¤²à¥ˆ_à¤‘à¤—à¤¸à¥à¤Ÿ_à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚à¤¬à¤°_à¤‘à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤‚à¤¬à¤°'.split(
        '_'
    ),
    monthsShort: 'à¤œà¤¾à¤¨à¥‡._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š._à¤à¤ªà¥à¤°à¤¿._à¤®à¥‡._à¤œà¥‚à¤¨._à¤œà¥à¤²à¥ˆ._à¤‘à¤—._à¤¸à¤ªà¥à¤Ÿà¥‡à¤‚._à¤‘à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤µà¥à¤¹à¥‡à¤‚._à¤¡à¤¿à¤¸à¥‡à¤‚.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤³à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°'.split('_'),
    weekdaysShort: 'à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤³_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿'.split('_'),
    weekdaysMin: 'à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
        LTS: 'A h:mm:ss à¤µà¤¾à¤œà¤¤à¤¾',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¤µà¤¾à¤œà¤¤à¤¾',
    },
    calendar: {
        sameDay: '[à¤†à¤œ] LT',
        nextDay: '[à¤‰à¤¦à¥à¤¯à¤¾] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à¤•à¤¾à¤²] LT',
        lastWeek: '[à¤®à¤¾à¤—à¥€à¤²] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%sà¤®à¤§à¥à¤¯à¥‡',
        past: '%sà¤ªà¥‚à¤°à¥à¤µà¥€',
        s: relativeTimeMr,
        ss: relativeTimeMr,
        m: relativeTimeMr,
        mm: relativeTimeMr,
        h: relativeTimeMr,
        hh: relativeTimeMr,
        d: relativeTimeMr,
        dd: relativeTimeMr,
        M: relativeTimeMr,
        MM: relativeTimeMr,
        y: relativeTimeMr,
        yy: relativeTimeMr,
    },
    preparse: function (string) {
        return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à¤ªà¤¹à¤¾à¤Ÿà¥‡|à¤¸à¤•à¤¾à¤³à¥€|à¤¦à¥à¤ªà¤¾à¤°à¥€|à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€|à¤°à¤¾à¤¤à¥à¤°à¥€/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¤ªà¤¹à¤¾à¤Ÿà¥‡' || meridiem === 'à¤¸à¤•à¤¾à¤³à¥€') {
            return hour;
        } else if (
            meridiem === 'à¤¦à¥à¤ªà¤¾à¤°à¥€' ||
            meridiem === 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€' ||
            meridiem === 'à¤°à¤¾à¤¤à¥à¤°à¥€'
        ) {
            return hour >= 12 ? hour : hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour >= 0 && hour < 6) {
            return 'à¤ªà¤¹à¤¾à¤Ÿà¥‡';
        } else if (hour < 12) {
            return 'à¤¸à¤•à¤¾à¤³à¥€';
        } else if (hour < 17) {
            return 'à¤¦à¥à¤ªà¤¾à¤°à¥€';
        } else if (hour < 20) {
            return 'à¤¸à¤¾à¤¯à¤‚à¤•à¤¾à¤³à¥€';
        } else {
            return 'à¤°à¤¾à¤¤à¥à¤°à¥€';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Malay [ms-my]
//! note : DEPRECATED, the correct one is [ms]
//! author : Weldan Jamili : https://github.com/weldan

import moment from '../moment';

export default moment.defineLocale('ms-my', {
    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [pukul] HH.mm',
        LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
    },
    meridiemParse: /pagi|tengahari|petang|malam/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'pagi') {
            return hour;
        } else if (meridiem === 'tengahari') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'petang' || meridiem === 'malam') {
            return hour + 12;
        }
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'pagi';
        } else if (hours < 15) {
            return 'tengahari';
        } else if (hours < 19) {
            return 'petang';
        } else {
            return 'malam';
        }
    },
    calendar: {
        sameDay: '[Hari ini pukul] LT',
        nextDay: '[Esok pukul] LT',
        nextWeek: 'dddd [pukul] LT',
        lastDay: '[Kelmarin pukul] LT',
        lastWeek: 'dddd [lepas pukul] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dalam %s',
        past: '%s yang lepas',
        s: 'beberapa saat',
        ss: '%d saat',
        m: 'seminit',
        mm: '%d minit',
        h: 'sejam',
        hh: '%d jam',
        d: 'sehari',
        dd: '%d hari',
        M: 'sebulan',
        MM: '%d bulan',
        y: 'setahun',
        yy: '%d tahun',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Malay [ms]
//! author : Weldan Jamili : https://github.com/weldan

import moment from '../moment';

export default moment.defineLocale('ms', {
    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [pukul] HH.mm',
        LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
    },
    meridiemParse: /pagi|tengahari|petang|malam/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'pagi') {
            return hour;
        } else if (meridiem === 'tengahari') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'petang' || meridiem === 'malam') {
            return hour + 12;
        }
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'pagi';
        } else if (hours < 15) {
            return 'tengahari';
        } else if (hours < 19) {
            return 'petang';
        } else {
            return 'malam';
        }
    },
    calendar: {
        sameDay: '[Hari ini pukul] LT',
        nextDay: '[Esok pukul] LT',
        nextWeek: 'dddd [pukul] LT',
        lastDay: '[Kelmarin pukul] LT',
        lastWeek: 'dddd [lepas pukul] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dalam %s',
        past: '%s yang lepas',
        s: 'beberapa saat',
        ss: '%d saat',
        m: 'seminit',
        mm: '%d minit',
        h: 'sejam',
        hh: '%d jam',
        d: 'sehari',
        dd: '%d hari',
        M: 'sebulan',
        MM: '%d bulan',
        y: 'setahun',
        yy: '%d tahun',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Maltese (Malta) [mt]
//! author : Alessandro Maruccia : https://github.com/alesma

import moment from '../moment';

export default moment.defineLocale('mt', {
    months: 'Jannar_Frar_Marzu_April_Mejju_Ä unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_DiÄ‹embru'.split(
        '_'
    ),
    monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ä un_Lul_Aww_Set_Ott_Nov_DiÄ‹'.split('_'),
    weekdays: 'Il-Ä¦add_It-Tnejn_It-Tlieta_L-ErbgÄ§a_Il-Ä¦amis_Il-Ä imgÄ§a_Is-Sibt'.split(
        '_'
    ),
    weekdaysShort: 'Ä¦ad_Tne_Tli_Erb_Ä¦am_Ä im_Sib'.split('_'),
    weekdaysMin: 'Ä¦a_Tn_Tl_Er_Ä¦a_Ä i_Si'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Illum fil-]LT',
        nextDay: '[GÄ§ada fil-]LT',
        nextWeek: 'dddd [fil-]LT',
        lastDay: '[Il-bieraÄ§ fil-]LT',
        lastWeek: 'dddd [li gÄ§adda] [fil-]LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'fâ€™ %s',
        past: '%s ilu',
        s: 'ftit sekondi',
        ss: '%d sekondi',
        m: 'minuta',
        mm: '%d minuti',
        h: 'siegÄ§a',
        hh: '%d siegÄ§at',
        d: 'Ä¡urnata',
        dd: '%d Ä¡ranet',
        M: 'xahar',
        MM: '%d xhur',
        y: 'sena',
        yy: '%d sni',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Burmese [my]
//! author : Squar team, mysquar.com
//! author : David Rossellat : https://github.com/gholadr
//! author : Tin Aung Lin : https://github.com/thanyawzinmin

import moment from '../moment';

var symbolMap = {
        1: 'á',
        2: 'á‚',
        3: 'áƒ',
        4: 'á„',
        5: 'á…',
        6: 'á†',
        7: 'á‡',
        8: 'áˆ',
        9: 'á‰',
        0: 'á€',
    },
    numberMap = {
        'á': '1',
        'á‚': '2',
        'áƒ': '3',
        'á„': '4',
        'á…': '5',
        'á†': '6',
        'á‡': '7',
        'áˆ': '8',
        'á‰': '9',
        'á€': '0',
    };

export default moment.defineLocale('my', {
    months: 'á€‡á€”á€ºá€”á€á€«á€›á€®_á€–á€±á€–á€±á€¬á€ºá€á€«á€›á€®_á€™á€á€º_á€§á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€‡á€°á€œá€­á€¯á€„á€º_á€žá€¼á€‚á€¯á€á€º_á€…á€€á€ºá€á€„á€ºá€˜á€¬_á€¡á€±á€¬á€€á€ºá€á€­á€¯á€˜á€¬_á€”á€­á€¯á€á€„á€ºá€˜á€¬_á€’á€®á€‡á€„á€ºá€˜á€¬'.split(
        '_'
    ),
    monthsShort: 'á€‡á€”á€º_á€–á€±_á€™á€á€º_á€•á€¼á€®_á€™á€±_á€‡á€½á€”á€º_á€œá€­á€¯á€„á€º_á€žá€¼_á€…á€€á€º_á€¡á€±á€¬á€€á€º_á€”á€­á€¯_á€’á€®'.split('_'),
    weekdays: 'á€á€”á€„á€ºá€¹á€‚á€”á€½á€±_á€á€”á€„á€ºá€¹á€œá€¬_á€¡á€„á€ºá€¹á€‚á€«_á€—á€¯á€’á€¹á€“á€Ÿá€°á€¸_á€€á€¼á€¬á€žá€•á€á€±á€¸_á€žá€±á€¬á€€á€¼á€¬_á€…á€”á€±'.split(
        '_'
    ),
    weekdaysShort: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),
    weekdaysMin: 'á€”á€½á€±_á€œá€¬_á€‚á€«_á€Ÿá€°á€¸_á€€á€¼á€¬_á€žá€±á€¬_á€”á€±'.split('_'),

    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[á€šá€”á€±.] LT [á€™á€¾á€¬]',
        nextDay: '[á€™á€”á€€á€ºá€–á€¼á€”á€º] LT [á€™á€¾á€¬]',
        nextWeek: 'dddd LT [á€™á€¾á€¬]',
        lastDay: '[á€™á€”á€±.á€€] LT [á€™á€¾á€¬]',
        lastWeek: '[á€•á€¼á€®á€¸á€á€²á€·á€žá€±á€¬] dddd LT [á€™á€¾á€¬]',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'á€œá€¬á€™á€Šá€ºá€· %s á€™á€¾á€¬',
        past: 'á€œá€½á€”á€ºá€á€²á€·á€žá€±á€¬ %s á€€',
        s: 'á€…á€€á€¹á€€á€”á€º.á€¡á€”á€Šá€ºá€¸á€„á€šá€º',
        ss: '%d á€…á€€á€¹á€€á€”á€·á€º',
        m: 'á€á€…á€ºá€™á€­á€”á€…á€º',
        mm: '%d á€™á€­á€”á€…á€º',
        h: 'á€á€…á€ºá€”á€¬á€›á€®',
        hh: '%d á€”á€¬á€›á€®',
        d: 'á€á€…á€ºá€›á€€á€º',
        dd: '%d á€›á€€á€º',
        M: 'á€á€…á€ºá€œ',
        MM: '%d á€œ',
        y: 'á€á€…á€ºá€”á€¾á€…á€º',
        yy: '%d á€”á€¾á€…á€º',
    },
    preparse: function (string) {
        return string.replace(/[áá‚áƒá„á…á†á‡áˆá‰á€]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Norwegian BokmÃ¥l [nb]
//! authors : Espen Hovlandsdal : https://github.com/rexxars
//!           Sigurd Gartmann : https://github.com/sigurdga
//!           Stephen Ramthun : https://github.com/stephenramthun

import moment from '../moment';

export default moment.defineLocale('nb', {
    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag'.split('_'),
    weekdaysShort: 'sÃ¸._ma._ti._on._to._fr._lÃ¸.'.split('_'),
    weekdaysMin: 'sÃ¸_ma_ti_on_to_fr_lÃ¸'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY [kl.] HH:mm',
        LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
    },
    calendar: {
        sameDay: '[i dag kl.] LT',
        nextDay: '[i morgen kl.] LT',
        nextWeek: 'dddd [kl.] LT',
        lastDay: '[i gÃ¥r kl.] LT',
        lastWeek: '[forrige] dddd [kl.] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'om %s',
        past: '%s siden',
        s: 'noen sekunder',
        ss: '%d sekunder',
        m: 'ett minutt',
        mm: '%d minutter',
        h: 'en time',
        hh: '%d timer',
        d: 'en dag',
        dd: '%d dager',
        w: 'en uke',
        ww: '%d uker',
        M: 'en mÃ¥ned',
        MM: '%d mÃ¥neder',
        y: 'ett Ã¥r',
        yy: '%d Ã¥r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Nepalese [ne]
//! author : suvash : https://github.com/suvash

import moment from '../moment';

var symbolMap = {
        1: 'à¥§',
        2: 'à¥¨',
        3: 'à¥©',
        4: 'à¥ª',
        5: 'à¥«',
        6: 'à¥¬',
        7: 'à¥­',
        8: 'à¥®',
        9: 'à¥¯',
        0: 'à¥¦',
    },
    numberMap = {
        'à¥§': '1',
        'à¥¨': '2',
        'à¥©': '3',
        'à¥ª': '4',
        'à¥«': '5',
        'à¥¬': '6',
        'à¥­': '7',
        'à¥®': '8',
        'à¥¯': '9',
        'à¥¦': '0',
    };

export default moment.defineLocale('ne', {
    months: 'à¤œà¤¨à¤µà¤°à¥€_à¤«à¥‡à¤¬à¥à¤°à¥à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿à¤²_à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤·à¥à¤Ÿ_à¤¸à¥‡à¤ªà¥à¤Ÿà¥‡à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‹à¤¬à¤°_à¤¨à¥‹à¤­à¥‡à¤®à¥à¤¬à¤°_à¤¡à¤¿à¤¸à¥‡à¤®à¥à¤¬à¤°'.split(
        '_'
    ),
    monthsShort: 'à¤œà¤¨._à¤«à¥‡à¤¬à¥à¤°à¥._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¤¿._à¤®à¤ˆ_à¤œà¥à¤¨_à¤œà¥à¤²à¤¾à¤ˆ._à¤…à¤—._à¤¸à¥‡à¤ªà¥à¤Ÿ._à¤…à¤•à¥à¤Ÿà¥‹._à¤¨à¥‹à¤­à¥‡._à¤¡à¤¿à¤¸à¥‡.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à¤†à¤‡à¤¤à¤¬à¤¾à¤°_à¤¸à¥‹à¤®à¤¬à¤¾à¤°_à¤®à¤™à¥à¤—à¤²à¤¬à¤¾à¤°_à¤¬à¥à¤§à¤¬à¤¾à¤°_à¤¬à¤¿à¤¹à¤¿à¤¬à¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤¬à¤¾à¤°_à¤¶à¤¨à¤¿à¤¬à¤¾à¤°'.split(
        '_'
    ),
    weekdaysShort: 'à¤†à¤‡à¤¤._à¤¸à¥‹à¤®._à¤®à¤™à¥à¤—à¤²._à¤¬à¥à¤§._à¤¬à¤¿à¤¹à¤¿._à¤¶à¥à¤•à¥à¤°._à¤¶à¤¨à¤¿.'.split('_'),
    weekdaysMin: 'à¤†._à¤¸à¥‹._à¤®à¤‚._à¤¬à¥._à¤¬à¤¿._à¤¶à¥._à¤¶.'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
        LTS: 'Aà¤•à¥‹ h:mm:ss à¤¬à¤œà¥‡',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
        LLLL: 'dddd, D MMMM YYYY, Aà¤•à¥‹ h:mm à¤¬à¤œà¥‡',
    },
    preparse: function (string) {
        return string.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    meridiemParse: /à¤°à¤¾à¤¤à¤¿|à¤¬à¤¿à¤¹à¤¾à¤¨|à¤¦à¤¿à¤‰à¤à¤¸à¥‹|à¤¸à¤¾à¤à¤/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¤°à¤¾à¤¤à¤¿') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¤¬à¤¿à¤¹à¤¾à¤¨') {
            return hour;
        } else if (meridiem === 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à¤¸à¤¾à¤à¤') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 3) {
            return 'à¤°à¤¾à¤¤à¤¿';
        } else if (hour < 12) {
            return 'à¤¬à¤¿à¤¹à¤¾à¤¨';
        } else if (hour < 16) {
            return 'à¤¦à¤¿à¤‰à¤à¤¸à¥‹';
        } else if (hour < 20) {
            return 'à¤¸à¤¾à¤à¤';
        } else {
            return 'à¤°à¤¾à¤¤à¤¿';
        }
    },
    calendar: {
        sameDay: '[à¤†à¤œ] LT',
        nextDay: '[à¤­à¥‹à¤²à¤¿] LT',
        nextWeek: '[à¤†à¤‰à¤à¤¦à¥‹] dddd[,] LT',
        lastDay: '[à¤¹à¤¿à¤œà¥‹] LT',
        lastWeek: '[à¤—à¤à¤•à¥‹] dddd[,] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%sà¤®à¤¾',
        past: '%s à¤…à¤—à¤¾à¤¡à¤¿',
        s: 'à¤•à¥‡à¤¹à¥€ à¤•à¥à¤·à¤£',
        ss: '%d à¤¸à¥‡à¤•à¥‡à¤£à¥à¤¡',
        m: 'à¤à¤• à¤®à¤¿à¤¨à¥‡à¤Ÿ',
        mm: '%d à¤®à¤¿à¤¨à¥‡à¤Ÿ',
        h: 'à¤à¤• à¤˜à¤£à¥à¤Ÿà¤¾',
        hh: '%d à¤˜à¤£à¥à¤Ÿà¤¾',
        d: 'à¤à¤• à¤¦à¤¿à¤¨',
        dd: '%d à¤¦à¤¿à¤¨',
        M: 'à¤à¤• à¤®à¤¹à¤¿à¤¨à¤¾',
        MM: '%d à¤®à¤¹à¤¿à¤¨à¤¾',
        y: 'à¤à¤• à¤¬à¤°à¥à¤·',
        yy: '%d à¤¬à¤°à¥à¤·',
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Dutch (Belgium) [nl-be]
//! author : Joris RÃ¶ling : https://github.com/jorisroling
//! author : Jacob Middag : https://github.com/middagj

import moment from '../moment';

var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
        '_'
    ),
    monthsParse = [
        /^jan/i,
        /^feb/i,
        /^maart|mrt.?$/i,
        /^apr/i,
        /^mei$/i,
        /^jun[i.]?$/i,
        /^jul[i.]?$/i,
        /^aug/i,
        /^sep/i,
        /^okt/i,
        /^nov/i,
        /^dec/i,
    ],
    monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

export default moment.defineLocale('nl-be', {
    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortWithDots;
        } else if (/-MMM-/.test(format)) {
            return monthsShortWithoutDots[m.month()];
        } else {
            return monthsShortWithDots[m.month()];
        }
    },

    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
    monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,

    weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
        '_'
    ),
    weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
    weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[vandaag om] LT',
        nextDay: '[morgen om] LT',
        nextWeek: 'dddd [om] LT',
        lastDay: '[gisteren om] LT',
        lastWeek: '[afgelopen] dddd [om] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'over %s',
        past: '%s geleden',
        s: 'een paar seconden',
        ss: '%d seconden',
        m: 'Ã©Ã©n minuut',
        mm: '%d minuten',
        h: 'Ã©Ã©n uur',
        hh: '%d uur',
        d: 'Ã©Ã©n dag',
        dd: '%d dagen',
        M: 'Ã©Ã©n maand',
        MM: '%d maanden',
        y: 'Ã©Ã©n jaar',
        yy: '%d jaar',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function (number) {
        return (
            number +
            (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
        );
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Dutch [nl]
//! author : Joris RÃ¶ling : https://github.com/jorisroling
//! author : Jacob Middag : https://github.com/middagj

import moment from '../moment';

var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
        '_'
    ),
    monthsParse = [
        /^jan/i,
        /^feb/i,
        /^maart|mrt.?$/i,
        /^apr/i,
        /^mei$/i,
        /^jun[i.]?$/i,
        /^jul[i.]?$/i,
        /^aug/i,
        /^sep/i,
        /^okt/i,
        /^nov/i,
        /^dec/i,
    ],
    monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;

export default moment.defineLocale('nl', {
    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: function (m, format) {
        if (!m) {
            return monthsShortWithDots;
        } else if (/-MMM-/.test(format)) {
            return monthsShortWithoutDots[m.month()];
        } else {
            return monthsShortWithDots[m.month()];
        }
    },

    monthsRegex: monthsRegex,
    monthsShortRegex: monthsRegex,
    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
    monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,

    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,

    weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
        '_'
    ),
    weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
    weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD-MM-YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[vandaag om] LT',
        nextDay: '[morgen om] LT',
        nextWeek: 'dddd [om] LT',
        lastDay: '[gisteren om] LT',
        lastWeek: '[afgelopen] dddd [om] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'over %s',
        past: '%s geleden',
        s: 'een paar seconden',
        ss: '%d seconden',
        m: 'Ã©Ã©n minuut',
        mm: '%d minuten',
        h: 'Ã©Ã©n uur',
        hh: '%d uur',
        d: 'Ã©Ã©n dag',
        dd: '%d dagen',
        w: 'Ã©Ã©n week',
        ww: '%d weken',
        M: 'Ã©Ã©n maand',
        MM: '%d maanden',
        y: 'Ã©Ã©n jaar',
        yy: '%d jaar',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
    ordinal: function (number) {
        return (
            number +
            (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
        );
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Nynorsk [nn]
//! authors : https://github.com/mechuwind
//!           Stephen Ramthun : https://github.com/stephenramthun

import moment from '../moment';

export default moment.defineLocale('nn', {
    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
    weekdaysShort: 'su._mÃ¥._ty._on._to._fr._lau.'.split('_'),
    weekdaysMin: 'su_mÃ¥_ty_on_to_fr_la'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY [kl.] H:mm',
        LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
    },
    calendar: {
        sameDay: '[I dag klokka] LT',
        nextDay: '[I morgon klokka] LT',
        nextWeek: 'dddd [klokka] LT',
        lastDay: '[I gÃ¥r klokka] LT',
        lastWeek: '[FÃ¸regÃ¥ande] dddd [klokka] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'om %s',
        past: '%s sidan',
        s: 'nokre sekund',
        ss: '%d sekund',
        m: 'eit minutt',
        mm: '%d minutt',
        h: 'ein time',
        hh: '%d timar',
        d: 'ein dag',
        dd: '%d dagar',
        w: 'ei veke',
        ww: '%d veker',
        M: 'ein mÃ¥nad',
        MM: '%d mÃ¥nader',
        y: 'eit Ã¥r',
        yy: '%d Ã¥r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Occitan, lengadocian dialecte [oc-lnc]
//! author : Quentin PAGÃˆS : https://github.com/Quenty31

import moment from '../moment';

export default moment.defineLocale('oc-lnc', {
    months: {
        standalone: 'geniÃ¨r_febriÃ¨r_marÃ§_abril_mai_junh_julhet_agost_setembre_octÃ²bre_novembre_decembre'.split(
            '_'
        ),
        format: "de geniÃ¨r_de febriÃ¨r_de marÃ§_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octÃ²bre_de novembre_de decembre".split(
            '_'
        ),
        isFormat: /D[oD]?(\s)+MMMM/,
    },
    monthsShort: 'gen._febr._marÃ§_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'dimenge_diluns_dimars_dimÃ¨cres_dijÃ²us_divendres_dissabte'.split(
        '_'
    ),
    weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
    weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM [de] YYYY',
        ll: 'D MMM YYYY',
        LLL: 'D MMMM [de] YYYY [a] H:mm',
        lll: 'D MMM YYYY, H:mm',
        LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
        llll: 'ddd D MMM YYYY, H:mm',
    },
    calendar: {
        sameDay: '[uÃ¨i a] LT',
        nextDay: '[deman a] LT',
        nextWeek: 'dddd [a] LT',
        lastDay: '[iÃ¨r a] LT',
        lastWeek: 'dddd [passat a] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: "d'aquÃ­ %s",
        past: 'fa %s',
        s: 'unas segondas',
        ss: '%d segondas',
        m: 'una minuta',
        mm: '%d minutas',
        h: 'una ora',
        hh: '%d oras',
        d: 'un jorn',
        dd: '%d jorns',
        M: 'un mes',
        MM: '%d meses',
        y: 'un an',
        yy: '%d ans',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|Ã¨|a)/,
    ordinal: function (number, period) {
        var output =
            number === 1
                ? 'r'
                : number === 2
                ? 'n'
                : number === 3
                ? 'r'
                : number === 4
                ? 't'
                : 'Ã¨';
        if (period === 'w' || period === 'W') {
            output = 'a';
        }
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4,
    },
});
//! moment.js locale configuration
//! locale : Punjabi (India) [pa-in]
//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit

import moment from '../moment';

var symbolMap = {
        1: 'à©§',
        2: 'à©¨',
        3: 'à©©',
        4: 'à©ª',
        5: 'à©«',
        6: 'à©¬',
        7: 'à©­',
        8: 'à©®',
        9: 'à©¯',
        0: 'à©¦',
    },
    numberMap = {
        'à©§': '1',
        'à©¨': '2',
        'à©©': '3',
        'à©ª': '4',
        'à©«': '5',
        'à©¬': '6',
        'à©­': '7',
        'à©®': '8',
        'à©¯': '9',
        'à©¦': '0',
    };

export default moment.defineLocale('pa-in', {
    // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
    months: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
        '_'
    ),
    monthsShort: 'à¨œà¨¨à¨µà¨°à©€_à¨«à¨¼à¨°à¨µà¨°à©€_à¨®à¨¾à¨°à¨š_à¨…à¨ªà©à¨°à©ˆà¨²_à¨®à¨ˆ_à¨œà©‚à¨¨_à¨œà©à¨²à¨¾à¨ˆ_à¨…à¨—à¨¸à¨¤_à¨¸à¨¤à©°à¨¬à¨°_à¨…à¨•à¨¤à©‚à¨¬à¨°_à¨¨à¨µà©°à¨¬à¨°_à¨¦à¨¸à©°à¨¬à¨°'.split(
        '_'
    ),
    weekdays: 'à¨à¨¤à¨µà¨¾à¨°_à¨¸à©‹à¨®à¨µà¨¾à¨°_à¨®à©°à¨—à¨²à¨µà¨¾à¨°_à¨¬à©à¨§à¨µà¨¾à¨°_à¨µà©€à¨°à¨µà¨¾à¨°_à¨¸à¨¼à©à©±à¨•à¨°à¨µà¨¾à¨°_à¨¸à¨¼à¨¨à©€à¨šà¨°à¨µà¨¾à¨°'.split(
        '_'
    ),
    weekdaysShort: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
    weekdaysMin: 'à¨à¨¤_à¨¸à©‹à¨®_à¨®à©°à¨—à¨²_à¨¬à©à¨§_à¨µà©€à¨°_à¨¸à¨¼à©à¨•à¨°_à¨¸à¨¼à¨¨à©€'.split('_'),
    longDateFormat: {
        LT: 'A h:mm à¨µà¨œà©‡',
        LTS: 'A h:mm:ss à¨µà¨œà©‡',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm à¨µà¨œà©‡',
        LLLL: 'dddd, D MMMM YYYY, A h:mm à¨µà¨œà©‡',
    },
    calendar: {
        sameDay: '[à¨…à¨œ] LT',
        nextDay: '[à¨•à¨²] LT',
        nextWeek: '[à¨…à¨—à¨²à¨¾] dddd, LT',
        lastDay: '[à¨•à¨²] LT',
        lastWeek: '[à¨ªà¨¿à¨›à¨²à©‡] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à¨µà¨¿à©±à¨š',
        past: '%s à¨ªà¨¿à¨›à¨²à©‡',
        s: 'à¨•à©à¨ à¨¸à¨•à¨¿à©°à¨Ÿ',
        ss: '%d à¨¸à¨•à¨¿à©°à¨Ÿ',
        m: 'à¨‡à¨• à¨®à¨¿à©°à¨Ÿ',
        mm: '%d à¨®à¨¿à©°à¨Ÿ',
        h: 'à¨‡à©±à¨• à¨˜à©°à¨Ÿà¨¾',
        hh: '%d à¨˜à©°à¨Ÿà©‡',
        d: 'à¨‡à©±à¨• à¨¦à¨¿à¨¨',
        dd: '%d à¨¦à¨¿à¨¨',
        M: 'à¨‡à©±à¨• à¨®à¨¹à©€à¨¨à¨¾',
        MM: '%d à¨®à¨¹à©€à¨¨à©‡',
        y: 'à¨‡à©±à¨• à¨¸à¨¾à¨²',
        yy: '%d à¨¸à¨¾à¨²',
    },
    preparse: function (string) {
        return string.replace(/[à©§à©¨à©©à©ªà©«à©¬à©­à©®à©¯à©¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
    meridiemParse: /à¨°à¨¾à¨¤|à¨¸à¨µà©‡à¨°|à¨¦à©à¨ªà¨¹à¨¿à¨°|à¨¸à¨¼à¨¾à¨®/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à¨°à¨¾à¨¤') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à¨¸à¨µà©‡à¨°') {
            return hour;
        } else if (meridiem === 'à¨¦à©à¨ªà¨¹à¨¿à¨°') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à¨¸à¨¼à¨¾à¨®') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à¨°à¨¾à¨¤';
        } else if (hour < 10) {
            return 'à¨¸à¨µà©‡à¨°';
        } else if (hour < 17) {
            return 'à¨¦à©à¨ªà¨¹à¨¿à¨°';
        } else if (hour < 20) {
            return 'à¨¸à¨¼à¨¾à¨®';
        } else {
            return 'à¨°à¨¾à¨¤';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Polish [pl]
//! author : Rafal Hirsz : https://github.com/evoL

import moment from '../moment';

var monthsNominative = 'styczeÅ„_luty_marzec_kwiecieÅ„_maj_czerwiec_lipiec_sierpieÅ„_wrzesieÅ„_paÅºdziernik_listopad_grudzieÅ„'.split(
        '_'
    ),
    monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrzeÅ›nia_paÅºdziernika_listopada_grudnia'.split(
        '_'
    ),
    monthsParse = [
        /^sty/i,
        /^lut/i,
        /^mar/i,
        /^kwi/i,
        /^maj/i,
        /^cze/i,
        /^lip/i,
        /^sie/i,
        /^wrz/i,
        /^paÅº/i,
        /^lis/i,
        /^gru/i,
    ];
function plural(n) {
    return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
}
function translate(number, withoutSuffix, key) {
    var result = number + ' ';
    switch (key) {
        case 'ss':
            return result + (plural(number) ? 'sekundy' : 'sekund');
        case 'm':
            return withoutSuffix ? 'minuta' : 'minutÄ™';
        case 'mm':
            return result + (plural(number) ? 'minuty' : 'minut');
        case 'h':
            return withoutSuffix ? 'godzina' : 'godzinÄ™';
        case 'hh':
            return result + (plural(number) ? 'godziny' : 'godzin');
        case 'ww':
            return result + (plural(number) ? 'tygodnie' : 'tygodni');
        case 'MM':
            return result + (plural(number) ? 'miesiÄ…ce' : 'miesiÄ™cy');
        case 'yy':
            return result + (plural(number) ? 'lata' : 'lat');
    }
}

export default moment.defineLocale('pl', {
    months: function (momentToFormat, format) {
        if (!momentToFormat) {
            return monthsNominative;
        } else if (/D MMMM/.test(format)) {
            return monthsSubjective[momentToFormat.month()];
        } else {
            return monthsNominative[momentToFormat.month()];
        }
    },
    monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paÅº_lis_gru'.split('_'),
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,
    weekdays: 'niedziela_poniedziaÅ‚ek_wtorek_Å›roda_czwartek_piÄ…tek_sobota'.split(
        '_'
    ),
    weekdaysShort: 'ndz_pon_wt_Å›r_czw_pt_sob'.split('_'),
    weekdaysMin: 'Nd_Pn_Wt_Åšr_Cz_Pt_So'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[DziÅ› o] LT',
        nextDay: '[Jutro o] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[W niedzielÄ™ o] LT';

                case 2:
                    return '[We wtorek o] LT';

                case 3:
                    return '[W Å›rodÄ™ o] LT';

                case 6:
                    return '[W sobotÄ™ o] LT';

                default:
                    return '[W] dddd [o] LT';
            }
        },
        lastDay: '[Wczoraj o] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[W zeszÅ‚Ä… niedzielÄ™ o] LT';
                case 3:
                    return '[W zeszÅ‚Ä… Å›rodÄ™ o] LT';
                case 6:
                    return '[W zeszÅ‚Ä… sobotÄ™ o] LT';
                default:
                    return '[W zeszÅ‚y] dddd [o] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: '%s temu',
        s: 'kilka sekund',
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: '1 dzieÅ„',
        dd: '%d dni',
        w: 'tydzieÅ„',
        ww: translate,
        M: 'miesiÄ…c',
        MM: translate,
        y: 'rok',
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Portuguese (Brazil) [pt-br]
//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira

import moment from '../moment';

export default moment.defineLocale('pt-br', {
    months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
        '_'
    ),
    monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
    weekdays: 'domingo_segunda-feira_terÃ§a-feira_quarta-feira_quinta-feira_sexta-feira_sÃ¡bado'.split(
        '_'
    ),
    weekdaysShort: 'dom_seg_ter_qua_qui_sex_sÃ¡b'.split('_'),
    weekdaysMin: 'do_2Âª_3Âª_4Âª_5Âª_6Âª_sÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY [Ã s] HH:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY [Ã s] HH:mm',
    },
    calendar: {
        sameDay: '[Hoje Ã s] LT',
        nextDay: '[AmanhÃ£ Ã s] LT',
        nextWeek: 'dddd [Ã s] LT',
        lastDay: '[Ontem Ã s] LT',
        lastWeek: function () {
            return this.day() === 0 || this.day() === 6
                ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'em %s',
        past: 'hÃ¡ %s',
        s: 'poucos segundos',
        ss: '%d segundos',
        m: 'um minuto',
        mm: '%d minutos',
        h: 'uma hora',
        hh: '%d horas',
        d: 'um dia',
        dd: '%d dias',
        M: 'um mÃªs',
        MM: '%d meses',
        y: 'um ano',
        yy: '%d anos',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    invalidDate: 'Data invÃ¡lida',
});
//! moment.js locale configuration
//! locale : Portuguese [pt]
//! author : Jefferson : https://github.com/jalex79

import moment from '../moment';

export default moment.defineLocale('pt', {
    months: 'janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
        '_'
    ),
    monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
    weekdays: 'Domingo_Segunda-feira_TerÃ§a-feira_Quarta-feira_Quinta-feira_Sexta-feira_SÃ¡bado'.split(
        '_'
    ),
    weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_SÃ¡b'.split('_'),
    weekdaysMin: 'Do_2Âª_3Âª_4Âª_5Âª_6Âª_SÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D [de] MMMM [de] YYYY',
        LLL: 'D [de] MMMM [de] YYYY HH:mm',
        LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Hoje Ã s] LT',
        nextDay: '[AmanhÃ£ Ã s] LT',
        nextWeek: 'dddd [Ã s] LT',
        lastDay: '[Ontem Ã s] LT',
        lastWeek: function () {
            return this.day() === 0 || this.day() === 6
                ? '[Ãšltimo] dddd [Ã s] LT' // Saturday + Sunday
                : '[Ãšltima] dddd [Ã s] LT'; // Monday - Friday
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'em %s',
        past: 'hÃ¡ %s',
        s: 'segundos',
        ss: '%d segundos',
        m: 'um minuto',
        mm: '%d minutos',
        h: 'uma hora',
        hh: '%d horas',
        d: 'um dia',
        dd: '%d dias',
        w: 'uma semana',
        ww: '%d semanas',
        M: 'um mÃªs',
        MM: '%d meses',
        y: 'um ano',
        yy: '%d anos',
    },
    dayOfMonthOrdinalParse: /\d{1,2}Âº/,
    ordinal: '%dÂº',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Romanian [ro]
//! author : Vlad Gurdiga : https://github.com/gurdiga
//! author : Valentin Agachi : https://github.com/avaly
//! author : Emanuel Cepoi : https://github.com/cepem

import moment from '../moment';

function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
            ss: 'secunde',
            mm: 'minute',
            hh: 'ore',
            dd: 'zile',
            ww: 'sÄƒptÄƒmÃ¢ni',
            MM: 'luni',
            yy: 'ani',
        },
        separator = ' ';
    if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
        separator = ' de ';
    }
    return number + separator + format[key];
}

export default moment.defineLocale('ro', {
    months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
        '_'
    ),
    monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'duminicÄƒ_luni_marÈ›i_miercuri_joi_vineri_sÃ¢mbÄƒtÄƒ'.split('_'),
    weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_SÃ¢m'.split('_'),
    weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_SÃ¢'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY H:mm',
        LLLL: 'dddd, D MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[azi la] LT',
        nextDay: '[mÃ¢ine la] LT',
        nextWeek: 'dddd [la] LT',
        lastDay: '[ieri la] LT',
        lastWeek: '[fosta] dddd [la] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'peste %s',
        past: '%s Ã®n urmÄƒ',
        s: 'cÃ¢teva secunde',
        ss: relativeTimeWithPlural,
        m: 'un minut',
        mm: relativeTimeWithPlural,
        h: 'o orÄƒ',
        hh: relativeTimeWithPlural,
        d: 'o zi',
        dd: relativeTimeWithPlural,
        w: 'o sÄƒptÄƒmÃ¢nÄƒ',
        ww: relativeTimeWithPlural,
        M: 'o lunÄƒ',
        MM: relativeTimeWithPlural,
        y: 'un an',
        yy: relativeTimeWithPlural,
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Russian [ru]
//! author : Viktorminator : https://github.com/Viktorminator
//! author : Menelion ElensÃºle : https://github.com/Oire
//! author : ÐšÐ¾Ñ€ÐµÐ½Ð±ÐµÑ€Ð³ ÐœÐ°Ñ€Ðº : https://github.com/socketpair

import moment from '../moment';

function plural(word, num) {
    var forms = word.split('_');
    return num % 10 === 1 && num % 100 !== 11
        ? forms[0]
        : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
        ? forms[1]
        : forms[2];
}
function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
        ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´',
        mm: withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚',
        hh: 'Ñ‡Ð°Ñ_Ñ‡Ð°ÑÐ°_Ñ‡Ð°ÑÐ¾Ð²',
        dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ_Ð´Ð½ÐµÐ¹',
        ww: 'Ð½ÐµÐ´ÐµÐ»Ñ_Ð½ÐµÐ´ÐµÐ»Ð¸_Ð½ÐµÐ´ÐµÐ»ÑŒ',
        MM: 'Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ð°_Ð¼ÐµÑÑÑ†ÐµÐ²',
        yy: 'Ð³Ð¾Ð´_Ð³Ð¾Ð´Ð°_Ð»ÐµÑ‚',
    };
    if (key === 'm') {
        return withoutSuffix ? 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°' : 'Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ';
    } else {
        return number + ' ' + plural(format[key], +number);
    }
}
var monthsParse = [
    /^ÑÐ½Ð²/i,
    /^Ñ„ÐµÐ²/i,
    /^Ð¼Ð°Ñ€/i,
    /^Ð°Ð¿Ñ€/i,
    /^Ð¼Ð°[Ð¹Ñ]/i,
    /^Ð¸ÑŽÐ½/i,
    /^Ð¸ÑŽÐ»/i,
    /^Ð°Ð²Ð³/i,
    /^ÑÐµÐ½/i,
    /^Ð¾ÐºÑ‚/i,
    /^Ð½Ð¾Ñ/i,
    /^Ð´ÐµÐº/i,
];

// http://new.gramota.ru/spravka/rules/139-prop : Â§ 103
// Ð¡Ð¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÑÑÑ†ÐµÐ²: http://new.gramota.ru/spravka/buro/search-answer?s=242637
// CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
export default moment.defineLocale('ru', {
    months: {
        format: 'ÑÐ½Ð²Ð°Ñ€Ñ_Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ_Ð¼Ð°Ñ€Ñ‚Ð°_Ð°Ð¿Ñ€ÐµÐ»Ñ_Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³ÑƒÑÑ‚Ð°_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ñ_Ð¾ÐºÑ‚ÑÐ±Ñ€Ñ_Ð½Ð¾ÑÐ±Ñ€Ñ_Ð´ÐµÐºÐ°Ð±Ñ€Ñ'.split(
            '_'
        ),
        standalone: 'ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ'.split(
            '_'
        ),
    },
    monthsShort: {
        // Ð¿Ð¾ CLDR Ð¸Ð¼ÐµÐ½Ð½Ð¾ "Ð¸ÑŽÐ»." Ð¸ "Ð¸ÑŽÐ½.", Ð½Ð¾ ÐºÐ°ÐºÐ¾Ð¹ ÑÐ¼Ñ‹ÑÐ» Ð¼ÐµÐ½ÑÑ‚ÑŒ Ð±ÑƒÐºÐ²Ñƒ Ð½Ð° Ñ‚Ð¾Ñ‡ÐºÑƒ?
        format: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
            '_'
        ),
        standalone: 'ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€._Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.'.split(
            '_'
        ),
    },
    weekdays: {
        standalone: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ð°_ÑÑƒÐ±Ð±Ð¾Ñ‚Ð°'.split(
            '_'
        ),
        format: 'Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ñƒ_ÑÑƒÐ±Ð±Ð¾Ñ‚Ñƒ'.split(
            '_'
        ),
        isFormat: /\[ ?[Ð’Ð²] ?(?:Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ|ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ|ÑÑ‚Ñƒ)? ?] ?dddd/,
    },
    weekdaysShort: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    weekdaysMin: 'Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    monthsParse: monthsParse,
    longMonthsParse: monthsParse,
    shortMonthsParse: monthsParse,

    // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸, Ð¿Ð¾ Ñ‚Ñ€Ð¸ Ð±ÑƒÐºÐ²Ñ‹, Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ…, Ð¿Ð¾ 4 Ð±ÑƒÐºÐ²Ñ‹, ÑÐ¾ÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ Ð¸ Ð±ÐµÐ· Ñ‚Ð¾Ñ‡ÐºÐ¸
    monthsRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

    // ÐºÐ¾Ð¿Ð¸Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ³Ð¾
    monthsShortRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\.?)/i,

    // Ð¿Ð¾Ð»Ð½Ñ‹Ðµ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°Ð¼Ð¸
    monthsStrictRegex: /^(ÑÐ½Ð²Ð°Ñ€[ÑÑŒ]|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑÑŒ]|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð°Ð¿Ñ€ÐµÐ»[ÑÑŒ]|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑÑŒ]|Ð¸ÑŽÐ»[ÑÑŒ]|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑÑŒ]|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑÑŒ]|Ð½Ð¾ÑÐ±Ñ€[ÑÑŒ]|Ð´ÐµÐºÐ°Ð±Ñ€[ÑÑŒ])/i,

    // Ð’Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ðµ ÑÐ¾Ð¾Ñ‚Ð²ÐµÑ‚ÑÑ‚Ð²ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ ÑÐ¾ÐºÑ€Ð°Ñ‰Ñ‘Ð½Ð½Ñ‹Ð¼ Ñ„Ð¾Ñ€Ð¼Ð°Ð¼
    monthsShortStrictRegex: /^(ÑÐ½Ð²\.|Ñ„ÐµÐ²Ñ€?\.|Ð¼Ð°Ñ€[Ñ‚.]|Ð°Ð¿Ñ€\.|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑŒÑ.]|Ð¸ÑŽÐ»[ÑŒÑ.]|Ð°Ð²Ð³\.|ÑÐµÐ½Ñ‚?\.|Ð¾ÐºÑ‚\.|Ð½Ð¾ÑÐ±?\.|Ð´ÐµÐº\.)/i,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY Ð³.',
        LLL: 'D MMMM YYYY Ð³., H:mm',
        LLLL: 'dddd, D MMMM YYYY Ð³., H:mm',
    },
    calendar: {
        sameDay: '[Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ, Ð²] LT',
        nextDay: '[Ð—Ð°Ð²Ñ‚Ñ€Ð°, Ð²] LT',
        lastDay: '[Ð’Ñ‡ÐµÑ€Ð°, Ð²] LT',
        nextWeek: function (now) {
            if (now.week() !== this.week()) {
                switch (this.day()) {
                    case 0:
                        return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐµ] dddd, [Ð²] LT';
                    case 1:
                    case 2:
                    case 4:
                        return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ð¹] dddd, [Ð²] LT';
                    case 3:
                    case 5:
                    case 6:
                        return '[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ] dddd, [Ð²] LT';
                }
            } else {
                if (this.day() === 2) {
                    return '[Ð’Ð¾] dddd, [Ð²] LT';
                } else {
                    return '[Ð’] dddd, [Ð²] LT';
                }
            }
        },
        lastWeek: function (now) {
            if (now.week() !== this.week()) {
                switch (this.day()) {
                    case 0:
                        return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ðµ] dddd, [Ð²] LT';
                    case 1:
                    case 2:
                    case 4:
                        return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ñ‹Ð¹] dddd, [Ð²] LT';
                    case 3:
                    case 5:
                    case 6:
                        return '[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ] dddd, [Ð²] LT';
                }
            } else {
                if (this.day() === 2) {
                    return '[Ð’Ð¾] dddd, [Ð²] LT';
                } else {
                    return '[Ð’] dddd, [Ð²] LT';
                }
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ñ‡ÐµÑ€ÐµÐ· %s',
        past: '%s Ð½Ð°Ð·Ð°Ð´',
        s: 'Ð½ÐµÑÐºÐ¾Ð»ÑŒÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´',
        ss: relativeTimeWithPlural,
        m: relativeTimeWithPlural,
        mm: relativeTimeWithPlural,
        h: 'Ñ‡Ð°Ñ',
        hh: relativeTimeWithPlural,
        d: 'Ð´ÐµÐ½ÑŒ',
        dd: relativeTimeWithPlural,
        w: 'Ð½ÐµÐ´ÐµÐ»Ñ',
        ww: relativeTimeWithPlural,
        M: 'Ð¼ÐµÑÑÑ†',
        MM: relativeTimeWithPlural,
        y: 'Ð³Ð¾Ð´',
        yy: relativeTimeWithPlural,
    },
    meridiemParse: /Ð½Ð¾Ñ‡Ð¸|ÑƒÑ‚Ñ€Ð°|Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°/i,
    isPM: function (input) {
        return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'Ð½Ð¾Ñ‡Ð¸';
        } else if (hour < 12) {
            return 'ÑƒÑ‚Ñ€Ð°';
        } else if (hour < 17) {
            return 'Ð´Ð½Ñ';
        } else {
            return 'Ð²ÐµÑ‡ÐµÑ€Ð°';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾|Ñ)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'M':
            case 'd':
            case 'DDD':
                return number + '-Ð¹';
            case 'D':
                return number + '-Ð³Ð¾';
            case 'w':
            case 'W':
                return number + '-Ñ';
            default:
                return number;
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Sindhi [sd]
//! author : Narain Sagar : https://github.com/narainsagar

import moment from '../moment';

var months = [
        'Ø¬Ù†ÙˆØ±ÙŠ',
        'ÙÙŠØ¨Ø±ÙˆØ±ÙŠ',
        'Ù…Ø§Ø±Ú†',
        'Ø§Ù¾Ø±ÙŠÙ„',
        'Ù…Ø¦ÙŠ',
        'Ø¬ÙˆÙ†',
        'Ø¬ÙˆÙ„Ø§Ø¡Ù',
        'Ø¢Ú¯Ø³Ù½',
        'Ø³ÙŠÙ¾Ù½Ù…Ø¨Ø±',
        'Ø¢ÚªÙ½ÙˆØ¨Ø±',
        'Ù†ÙˆÙ…Ø¨Ø±',
        'ÚŠØ³Ù…Ø¨Ø±',
    ],
    days = ['Ø¢Ú†Ø±', 'Ø³ÙˆÙ…Ø±', 'Ø§Ú±Ø§Ø±Ùˆ', 'Ø§Ø±Ø¨Ø¹', 'Ø®Ù…ÙŠØ³', 'Ø¬Ù…Ø¹', 'Ú‡Ù†Ú‡Ø±'];

export default moment.defineLocale('sd', {
    months: months,
    monthsShort: months,
    weekdays: days,
    weekdaysShort: days,
    weekdaysMin: days,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
    },
    meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
    isPM: function (input) {
        return 'Ø´Ø§Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'ØµØ¨Ø­';
        }
        return 'Ø´Ø§Ù…';
    },
    calendar: {
        sameDay: '[Ø§Ú„] LT',
        nextDay: '[Ø³Ú€Ø§Ú»ÙŠ] LT',
        nextWeek: 'dddd [Ø§Ú³ÙŠÙ† Ù‡ÙØªÙŠ ØªÙŠ] LT',
        lastDay: '[ÚªØ§Ù„Ù‡Ù‡] LT',
        lastWeek: '[Ú¯Ø²Ø±ÙŠÙ„ Ù‡ÙØªÙŠ] dddd [ØªÙŠ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ù¾ÙˆØ¡',
        past: '%s Ø§Ú³',
        s: 'Ú†Ù†Ø¯ Ø³ÙŠÚªÙ†ÚŠ',
        ss: '%d Ø³ÙŠÚªÙ†ÚŠ',
        m: 'Ù‡Úª Ù…Ù†Ù½',
        mm: '%d Ù…Ù†Ù½',
        h: 'Ù‡Úª ÚªÙ„Ø§Úª',
        hh: '%d ÚªÙ„Ø§Úª',
        d: 'Ù‡Úª ÚÙŠÙ†Ù‡Ù†',
        dd: '%d ÚÙŠÙ†Ù‡Ù†',
        M: 'Ù‡Úª Ù…Ù‡ÙŠÙ†Ùˆ',
        MM: '%d Ù…Ù‡ÙŠÙ†Ø§',
        y: 'Ù‡Úª Ø³Ø§Ù„',
        yy: '%d Ø³Ø§Ù„',
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Northern Sami [se]
//! authors : BÃ¥rd Rolstad Henriksen : https://github.com/karamell

import moment from '../moment';

export default moment.defineLocale('se', {
    months: 'oÄ‘Ä‘ajagemÃ¡nnu_guovvamÃ¡nnu_njukÄamÃ¡nnu_cuoÅ‹omÃ¡nnu_miessemÃ¡nnu_geassemÃ¡nnu_suoidnemÃ¡nnu_borgemÃ¡nnu_ÄakÄamÃ¡nnu_golggotmÃ¡nnu_skÃ¡bmamÃ¡nnu_juovlamÃ¡nnu'.split(
        '_'
    ),
    monthsShort: 'oÄ‘Ä‘j_guov_njuk_cuo_mies_geas_suoi_borg_ÄakÄ_golg_skÃ¡b_juov'.split(
        '_'
    ),
    weekdays: 'sotnabeaivi_vuossÃ¡rga_maÅ‹Å‹ebÃ¡rga_gaskavahkku_duorastat_bearjadat_lÃ¡vvardat'.split(
        '_'
    ),
    weekdaysShort: 'sotn_vuos_maÅ‹_gask_duor_bear_lÃ¡v'.split('_'),
    weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'MMMM D. [b.] YYYY',
        LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
        LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
    },
    calendar: {
        sameDay: '[otne ti] LT',
        nextDay: '[ihttin ti] LT',
        nextWeek: 'dddd [ti] LT',
        lastDay: '[ikte ti] LT',
        lastWeek: '[ovddit] dddd [ti] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s geaÅ¾es',
        past: 'maÅ‹it %s',
        s: 'moadde sekunddat',
        ss: '%d sekunddat',
        m: 'okta minuhta',
        mm: '%d minuhtat',
        h: 'okta diimmu',
        hh: '%d diimmut',
        d: 'okta beaivi',
        dd: '%d beaivvit',
        M: 'okta mÃ¡nnu',
        MM: '%d mÃ¡nut',
        y: 'okta jahki',
        yy: '%d jagit',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Sinhalese [si]
//! author : Sampath Sitinamaluwa : https://github.com/sampathsris

import moment from '../moment';

/*jshint -W100*/
export default moment.defineLocale('si', {
    months: 'à¶¢à¶±à·€à·à¶»à·’_à¶´à·™à¶¶à¶»à·€à·à¶»à·’_à¶¸à·à¶»à·Šà¶­à·”_à¶…à¶´à·Šâ€à¶»à·šà¶½à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·à·ƒà·Šà¶­à·”_à·ƒà·à¶´à·Šà¶­à·à¶¸à·Šà¶¶à¶»à·Š_à¶”à¶šà·Šà¶­à·à¶¶à¶»à·Š_à¶±à·œà·€à·à¶¸à·Šà¶¶à¶»à·Š_à¶¯à·™à·ƒà·à¶¸à·Šà¶¶à¶»à·Š'.split(
        '_'
    ),
    monthsShort: 'à¶¢à¶±_à¶´à·™à¶¶_à¶¸à·à¶»à·Š_à¶…à¶´à·Š_à¶¸à·à¶ºà·’_à¶¢à·–à¶±à·’_à¶¢à·–à¶½à·’_à¶…à¶œà·_à·ƒà·à¶´à·Š_à¶”à¶šà·Š_à¶±à·œà·€à·_à¶¯à·™à·ƒà·'.split(
        '_'
    ),
    weekdays: 'à¶‰à¶»à·’à¶¯à·_à·ƒà¶³à·”à¶¯à·_à¶…à¶Ÿà·„à¶»à·”à·€à·à¶¯à·_à¶¶à¶¯à·à¶¯à·_à¶¶à·Šâ€à¶»à·„à·ƒà·Šà¶´à¶­à·’à¶±à·Šà¶¯à·_à·ƒà·’à¶šà·”à¶»à·à¶¯à·_à·ƒà·™à¶±à·ƒà·”à¶»à·à¶¯à·'.split(
        '_'
    ),
    weekdaysShort: 'à¶‰à¶»à·’_à·ƒà¶³à·”_à¶…à¶Ÿ_à¶¶à¶¯à·_à¶¶à·Šâ€à¶»à·„_à·ƒà·’à¶šà·”_à·ƒà·™à¶±'.split('_'),
    weekdaysMin: 'à¶‰_à·ƒ_à¶…_à¶¶_à¶¶à·Šâ€à¶»_à·ƒà·’_à·ƒà·™'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'a h:mm',
        LTS: 'a h:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYY MMMM D',
        LLL: 'YYYY MMMM D, a h:mm',
        LLLL: 'YYYY MMMM D [à·€à·à¶±à·’] dddd, a h:mm:ss',
    },
    calendar: {
        sameDay: '[à¶…à¶¯] LT[à¶§]',
        nextDay: '[à·„à·™à¶§] LT[à¶§]',
        nextWeek: 'dddd LT[à¶§]',
        lastDay: '[à¶Šà¶ºà·š] LT[à¶§]',
        lastWeek: '[à¶´à·ƒà·”à¶œà·’à¶º] dddd LT[à¶§]',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%sà¶šà·’à¶±à·Š',
        past: '%sà¶šà¶§ à¶´à·™à¶»',
        s: 'à¶­à¶­à·Šà¶´à¶» à¶šà·’à·„à·’à¶´à¶º',
        ss: 'à¶­à¶­à·Šà¶´à¶» %d',
        m: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·”à·€',
        mm: 'à¶¸à·’à¶±à·’à¶­à·Šà¶­à·” %d',
        h: 'à¶´à·à¶º',
        hh: 'à¶´à·à¶º %d',
        d: 'à¶¯à·’à¶±à¶º',
        dd: 'à¶¯à·’à¶± %d',
        M: 'à¶¸à·à·ƒà¶º',
        MM: 'à¶¸à·à·ƒ %d',
        y: 'à·€à·ƒà¶»',
        yy: 'à·€à·ƒà¶» %d',
    },
    dayOfMonthOrdinalParse: /\d{1,2} à·€à·à¶±à·’/,
    ordinal: function (number) {
        return number + ' à·€à·à¶±à·’';
    },
    meridiemParse: /à¶´à·™à¶» à·€à¶»à·”|à¶´à·ƒà·Š à·€à¶»à·”|à¶´à·™.à·€|à¶´.à·€./,
    isPM: function (input) {
        return input === 'à¶´.à·€.' || input === 'à¶´à·ƒà·Š à·€à¶»à·”';
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? 'à¶´.à·€.' : 'à¶´à·ƒà·Š à·€à¶»à·”';
        } else {
            return isLower ? 'à¶´à·™.à·€.' : 'à¶´à·™à¶» à·€à¶»à·”';
        }
    },
});
//! moment.js locale configuration
//! locale : Slovak [sk]
//! author : Martin Minka : https://github.com/k2s
//! based on work of petrbela : https://github.com/petrbela

import moment from '../moment';

var months = 'januÃ¡r_februÃ¡r_marec_aprÃ­l_mÃ¡j_jÃºn_jÃºl_august_september_oktÃ³ber_november_december'.split(
        '_'
    ),
    monthsShort = 'jan_feb_mar_apr_mÃ¡j_jÃºn_jÃºl_aug_sep_okt_nov_dec'.split('_');
function plural(n) {
    return n > 1 && n < 5;
}
function translate(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    switch (key) {
        case 's': // a few seconds / in a few seconds / a few seconds ago
            return withoutSuffix || isFuture ? 'pÃ¡r sekÃºnd' : 'pÃ¡r sekundami';
        case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'sekundy' : 'sekÃºnd');
            } else {
                return result + 'sekundami';
            }
        case 'm': // a minute / in a minute / a minute ago
            return withoutSuffix ? 'minÃºta' : isFuture ? 'minÃºtu' : 'minÃºtou';
        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'minÃºty' : 'minÃºt');
            } else {
                return result + 'minÃºtami';
            }
        case 'h': // an hour / in an hour / an hour ago
            return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
        case 'hh': // 9 hours / in 9 hours / 9 hours ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'hodiny' : 'hodÃ­n');
            } else {
                return result + 'hodinami';
            }
        case 'd': // a day / in a day / a day ago
            return withoutSuffix || isFuture ? 'deÅˆ' : 'dÅˆom';
        case 'dd': // 9 days / in 9 days / 9 days ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'dni' : 'dnÃ­');
            } else {
                return result + 'dÅˆami';
            }
        case 'M': // a month / in a month / a month ago
            return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
        case 'MM': // 9 months / in 9 months / 9 months ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'mesiace' : 'mesiacov');
            } else {
                return result + 'mesiacmi';
            }
        case 'y': // a year / in a year / a year ago
            return withoutSuffix || isFuture ? 'rok' : 'rokom';
        case 'yy': // 9 years / in 9 years / 9 years ago
            if (withoutSuffix || isFuture) {
                return result + (plural(number) ? 'roky' : 'rokov');
            } else {
                return result + 'rokmi';
            }
    }
}

export default moment.defineLocale('sk', {
    months: months,
    monthsShort: monthsShort,
    weekdays: 'nedeÄ¾a_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota'.split('_'),
    weekdaysShort: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
    weekdaysMin: 'ne_po_ut_st_Å¡t_pi_so'.split('_'),
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[dnes o] LT',
        nextDay: '[zajtra o] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[v nedeÄ¾u o] LT';
                case 1:
                case 2:
                    return '[v] dddd [o] LT';
                case 3:
                    return '[v stredu o] LT';
                case 4:
                    return '[vo Å¡tvrtok o] LT';
                case 5:
                    return '[v piatok o] LT';
                case 6:
                    return '[v sobotu o] LT';
            }
        },
        lastDay: '[vÄera o] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[minulÃº nedeÄ¾u o] LT';
                case 1:
                case 2:
                    return '[minulÃ½] dddd [o] LT';
                case 3:
                    return '[minulÃº stredu o] LT';
                case 4:
                case 5:
                    return '[minulÃ½] dddd [o] LT';
                case 6:
                    return '[minulÃº sobotu o] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'pred %s',
        s: translate,
        ss: translate,
        m: translate,
        mm: translate,
        h: translate,
        hh: translate,
        d: translate,
        dd: translate,
        M: translate,
        MM: translate,
        y: translate,
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Slovenian [sl]
//! author : Robert SedovÅ¡ek : https://github.com/sedovsek

import moment from '../moment';

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var result = number + ' ';
    switch (key) {
        case 's':
            return withoutSuffix || isFuture
                ? 'nekaj sekund'
                : 'nekaj sekundami';
        case 'ss':
            if (number === 1) {
                result += withoutSuffix ? 'sekundo' : 'sekundi';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
            } else {
                result += 'sekund';
            }
            return result;
        case 'm':
            return withoutSuffix ? 'ena minuta' : 'eno minuto';
        case 'mm':
            if (number === 1) {
                result += withoutSuffix ? 'minuta' : 'minuto';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'minute' : 'minutami';
            } else {
                result += withoutSuffix || isFuture ? 'minut' : 'minutami';
            }
            return result;
        case 'h':
            return withoutSuffix ? 'ena ura' : 'eno uro';
        case 'hh':
            if (number === 1) {
                result += withoutSuffix ? 'ura' : 'uro';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'uri' : 'urama';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'ure' : 'urami';
            } else {
                result += withoutSuffix || isFuture ? 'ur' : 'urami';
            }
            return result;
        case 'd':
            return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
        case 'dd':
            if (number === 1) {
                result += withoutSuffix || isFuture ? 'dan' : 'dnem';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
            } else {
                result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
            }
            return result;
        case 'M':
            return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
        case 'MM':
            if (number === 1) {
                result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
            } else {
                result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
            }
            return result;
        case 'y':
            return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
        case 'yy':
            if (number === 1) {
                result += withoutSuffix || isFuture ? 'leto' : 'letom';
            } else if (number === 2) {
                result += withoutSuffix || isFuture ? 'leti' : 'letoma';
            } else if (number < 5) {
                result += withoutSuffix || isFuture ? 'leta' : 'leti';
            } else {
                result += withoutSuffix || isFuture ? 'let' : 'leti';
            }
            return result;
    }
}

export default moment.defineLocale('sl', {
    months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota'.split('_'),
    weekdaysShort: 'ned._pon._tor._sre._Äet._pet._sob.'.split('_'),
    weekdaysMin: 'ne_po_to_sr_Äe_pe_so'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD. MM. YYYY',
        LL: 'D. MMMM YYYY',
        LLL: 'D. MMMM YYYY H:mm',
        LLLL: 'dddd, D. MMMM YYYY H:mm',
    },
    calendar: {
        sameDay: '[danes ob] LT',
        nextDay: '[jutri ob] LT',

        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[v] [nedeljo] [ob] LT';
                case 3:
                    return '[v] [sredo] [ob] LT';
                case 6:
                    return '[v] [soboto] [ob] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[v] dddd [ob] LT';
            }
        },
        lastDay: '[vÄeraj ob] LT',
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[prejÅ¡njo] [nedeljo] [ob] LT';
                case 3:
                    return '[prejÅ¡njo] [sredo] [ob] LT';
                case 6:
                    return '[prejÅ¡njo] [soboto] [ob] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[prejÅ¡nji] dddd [ob] LT';
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Äez %s',
        past: 'pred %s',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: processRelativeTime,
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Albanian [sq]
//! author : FlakÃ«rim Ismani : https://github.com/flakerimi
//! author : Menelion ElensÃºle : https://github.com/Oire
//! author : Oerd Cukalla : https://github.com/oerd

import moment from '../moment';

export default moment.defineLocale('sq', {
    months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_NÃ«ntor_Dhjetor'.split(
        '_'
    ),
    monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_NÃ«n_Dhj'.split('_'),
    weekdays: 'E Diel_E HÃ«nÃ«_E MartÃ«_E MÃ«rkurÃ«_E Enjte_E Premte_E ShtunÃ«'.split(
        '_'
    ),
    weekdaysShort: 'Die_HÃ«n_Mar_MÃ«r_Enj_Pre_Sht'.split('_'),
    weekdaysMin: 'D_H_Ma_MÃ«_E_P_Sh'.split('_'),
    weekdaysParseExact: true,
    meridiemParse: /PD|MD/,
    isPM: function (input) {
        return input.charAt(0) === 'M';
    },
    meridiem: function (hours, minutes, isLower) {
        return hours < 12 ? 'PD' : 'MD';
    },
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Sot nÃ«] LT',
        nextDay: '[NesÃ«r nÃ«] LT',
        nextWeek: 'dddd [nÃ«] LT',
        lastDay: '[Dje nÃ«] LT',
        lastWeek: 'dddd [e kaluar nÃ«] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'nÃ« %s',
        past: '%s mÃ« parÃ«',
        s: 'disa sekonda',
        ss: '%d sekonda',
        m: 'njÃ« minutÃ«',
        mm: '%d minuta',
        h: 'njÃ« orÃ«',
        hh: '%d orÃ«',
        d: 'njÃ« ditÃ«',
        dd: '%d ditÃ«',
        M: 'njÃ« muaj',
        MM: '%d muaj',
        y: 'njÃ« vit',
        yy: '%d vite',
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Serbian Cyrillic [sr-cyrl]
//! author : Milan JanaÄkoviÄ‡<milanjanackovic@gmail.com> : https://github.com/milan-j
//! author : Stefan CrnjakoviÄ‡ <stefan@hotmail.rs> : https://github.com/crnjakovic

import moment from '../moment';

var translator = {
    words: {
        //Different grammatical cases
        ss: ['ÑÐµÐºÑƒÐ½Ð´Ð°', 'ÑÐµÐºÑƒÐ½Ð´Ðµ', 'ÑÐµÐºÑƒÐ½Ð´Ð¸'],
        m: ['Ñ˜ÐµÐ´Ð°Ð½ Ð¼Ð¸Ð½ÑƒÑ‚', 'Ñ˜ÐµÐ´Ð½Ðµ Ð¼Ð¸Ð½ÑƒÑ‚Ðµ'],
        mm: ['Ð¼Ð¸Ð½ÑƒÑ‚', 'Ð¼Ð¸Ð½ÑƒÑ‚Ðµ', 'Ð¼Ð¸Ð½ÑƒÑ‚Ð°'],
        h: ['Ñ˜ÐµÐ´Ð°Ð½ ÑÐ°Ñ‚', 'Ñ˜ÐµÐ´Ð½Ð¾Ð³ ÑÐ°Ñ‚Ð°'],
        hh: ['ÑÐ°Ñ‚', 'ÑÐ°Ñ‚Ð°', 'ÑÐ°Ñ‚Ð¸'],
        dd: ['Ð´Ð°Ð½', 'Ð´Ð°Ð½Ð°', 'Ð´Ð°Ð½Ð°'],
        MM: ['Ð¼ÐµÑÐµÑ†', 'Ð¼ÐµÑÐµÑ†Ð°', 'Ð¼ÐµÑÐµÑ†Ð¸'],
        yy: ['Ð³Ð¾Ð´Ð¸Ð½Ð°', 'Ð³Ð¾Ð´Ð¸Ð½Ðµ', 'Ð³Ð¾Ð´Ð¸Ð½Ð°'],
    },
    correctGrammaticalCase: function (number, wordKey) {
        return number === 1
            ? wordKey[0]
            : number >= 2 && number <= 4
            ? wordKey[1]
            : wordKey[2];
    },
    translate: function (number, withoutSuffix, key) {
        var wordKey = translator.words[key];
        if (key.length === 1) {
            return withoutSuffix ? wordKey[0] : wordKey[1];
        } else {
            return (
                number +
                ' ' +
                translator.correctGrammaticalCase(number, wordKey)
            );
        }
    },
};

export default moment.defineLocale('sr-cyrl', {
    months: 'Ñ˜Ð°Ð½ÑƒÐ°Ñ€_Ñ„ÐµÐ±Ñ€ÑƒÐ°Ñ€_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð±Ð°Ñ€_Ð¾ÐºÑ‚Ð¾Ð±Ð°Ñ€_Ð½Ð¾Ð²ÐµÐ¼Ð±Ð°Ñ€_Ð´ÐµÑ†ÐµÐ¼Ð±Ð°Ñ€'.split(
        '_'
    ),
    monthsShort: 'Ñ˜Ð°Ð½._Ñ„ÐµÐ±._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³._ÑÐµÐ¿._Ð¾ÐºÑ‚._Ð½Ð¾Ð²._Ð´ÐµÑ†.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'Ð½ÐµÐ´ÐµÑ™Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™Ð°Ðº_ÑƒÑ‚Ð¾Ñ€Ð°Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð°Ðº_Ð¿ÐµÑ‚Ð°Ðº_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split('_'),
    weekdaysShort: 'Ð½ÐµÐ´._Ð¿Ð¾Ð½._ÑƒÑ‚Ð¾._ÑÑ€Ðµ._Ñ‡ÐµÑ‚._Ð¿ÐµÑ‚._ÑÑƒÐ±.'.split('_'),
    weekdaysMin: 'Ð½Ðµ_Ð¿Ð¾_ÑƒÑ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_ÑÑƒ'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'D. M. YYYY.',
        LL: 'D. MMMM YYYY.',
        LLL: 'D. MMMM YYYY. H:mm',
        LLLL: 'dddd, D. MMMM YYYY. H:mm',
    },
    calendar: {
        sameDay: '[Ð´Ð°Ð½Ð°Ñ Ñƒ] LT',
        nextDay: '[ÑÑƒÑ‚Ñ€Ð° Ñƒ] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[Ñƒ] [Ð½ÐµÐ´ÐµÑ™Ñƒ] [Ñƒ] LT';
                case 3:
                    return '[Ñƒ] [ÑÑ€ÐµÐ´Ñƒ] [Ñƒ] LT';
                case 6:
                    return '[Ñƒ] [ÑÑƒÐ±Ð¾Ñ‚Ñƒ] [Ñƒ] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[Ñƒ] dddd [Ñƒ] LT';
            }
        },
        lastDay: '[Ñ˜ÑƒÑ‡Ðµ Ñƒ] LT',
        lastWeek: function () {
            var lastWeekDays = [
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [Ð½ÐµÐ´ÐµÑ™Ðµ] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™ÐºÐ°] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [ÑƒÑ‚Ð¾Ñ€ÐºÐ°] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑ€ÐµÐ´Ðµ] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚ÐºÐ°] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿ÐµÑ‚ÐºÐ°] [Ñƒ] LT',
                '[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑƒÐ±Ð¾Ñ‚Ðµ] [Ñƒ] LT',
            ];
            return lastWeekDays[this.day()];
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð·Ð° %s',
        past: 'Ð¿Ñ€Ðµ %s',
        s: 'Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸',
        ss: translator.translate,
        m: translator.translate,
        mm: translator.translate,
        h: translator.translate,
        hh: translator.translate,
        d: 'Ð´Ð°Ð½',
        dd: translator.translate,
        M: 'Ð¼ÐµÑÐµÑ†',
        MM: translator.translate,
        y: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
        yy: translator.translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 1st is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Serbian [sr]
//! author : Milan JanaÄkoviÄ‡<milanjanackovic@gmail.com> : https://github.com/milan-j
//! author : Stefan CrnjakoviÄ‡ <stefan@hotmail.rs> : https://github.com/crnjakovic

import moment from '../moment';

var translator = {
    words: {
        //Different grammatical cases
        ss: ['sekunda', 'sekunde', 'sekundi'],
        m: ['jedan minut', 'jedne minute'],
        mm: ['minut', 'minute', 'minuta'],
        h: ['jedan sat', 'jednog sata'],
        hh: ['sat', 'sata', 'sati'],
        dd: ['dan', 'dana', 'dana'],
        MM: ['mesec', 'meseca', 'meseci'],
        yy: ['godina', 'godine', 'godina'],
    },
    correctGrammaticalCase: function (number, wordKey) {
        return number === 1
            ? wordKey[0]
            : number >= 2 && number <= 4
            ? wordKey[1]
            : wordKey[2];
    },
    translate: function (number, withoutSuffix, key) {
        var wordKey = translator.words[key];
        if (key.length === 1) {
            return withoutSuffix ? wordKey[0] : wordKey[1];
        } else {
            return (
                number +
                ' ' +
                translator.correctGrammaticalCase(number, wordKey)
            );
        }
    },
};

export default moment.defineLocale('sr', {
    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
        '_'
    ),
    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'nedelja_ponedeljak_utorak_sreda_Äetvrtak_petak_subota'.split(
        '_'
    ),
    weekdaysShort: 'ned._pon._uto._sre._Äet._pet._sub.'.split('_'),
    weekdaysMin: 'ne_po_ut_sr_Äe_pe_su'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'D. M. YYYY.',
        LL: 'D. MMMM YYYY.',
        LLL: 'D. MMMM YYYY. H:mm',
        LLLL: 'dddd, D. MMMM YYYY. H:mm',
    },
    calendar: {
        sameDay: '[danas u] LT',
        nextDay: '[sutra u] LT',
        nextWeek: function () {
            switch (this.day()) {
                case 0:
                    return '[u] [nedelju] [u] LT';
                case 3:
                    return '[u] [sredu] [u] LT';
                case 6:
                    return '[u] [subotu] [u] LT';
                case 1:
                case 2:
                case 4:
                case 5:
                    return '[u] dddd [u] LT';
            }
        },
        lastDay: '[juÄe u] LT',
        lastWeek: function () {
            var lastWeekDays = [
                '[proÅ¡le] [nedelje] [u] LT',
                '[proÅ¡log] [ponedeljka] [u] LT',
                '[proÅ¡log] [utorka] [u] LT',
                '[proÅ¡le] [srede] [u] LT',
                '[proÅ¡log] [Äetvrtka] [u] LT',
                '[proÅ¡log] [petka] [u] LT',
                '[proÅ¡le] [subote] [u] LT',
            ];
            return lastWeekDays[this.day()];
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'za %s',
        past: 'pre %s',
        s: 'nekoliko sekundi',
        ss: translator.translate,
        m: translator.translate,
        mm: translator.translate,
        h: translator.translate,
        hh: translator.translate,
        d: 'dan',
        dd: translator.translate,
        M: 'mesec',
        MM: translator.translate,
        y: 'godinu',
        yy: translator.translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : siSwati [ss]
//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies

import moment from '../moment';

export default moment.defineLocale('ss', {
    months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
        '_'
    ),
    monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
    weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
        '_'
    ),
    weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
    weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[Namuhla nga] LT',
        nextDay: '[Kusasa nga] LT',
        nextWeek: 'dddd [nga] LT',
        lastDay: '[Itolo nga] LT',
        lastWeek: 'dddd [leliphelile] [nga] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'nga %s',
        past: 'wenteka nga %s',
        s: 'emizuzwana lomcane',
        ss: '%d mzuzwana',
        m: 'umzuzu',
        mm: '%d emizuzu',
        h: 'lihora',
        hh: '%d emahora',
        d: 'lilanga',
        dd: '%d emalanga',
        M: 'inyanga',
        MM: '%d tinyanga',
        y: 'umnyaka',
        yy: '%d iminyaka',
    },
    meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
    meridiem: function (hours, minutes, isLower) {
        if (hours < 11) {
            return 'ekuseni';
        } else if (hours < 15) {
            return 'emini';
        } else if (hours < 19) {
            return 'entsambama';
        } else {
            return 'ebusuku';
        }
    },
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'ekuseni') {
            return hour;
        } else if (meridiem === 'emini') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
            if (hour === 0) {
                return 0;
            }
            return hour + 12;
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: '%d',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Swedish [sv]
//! author : Jens Alm : https://github.com/ulmus

import moment from '../moment';

export default moment.defineLocale('sv', {
    months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
        '_'
    ),
    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
    weekdays: 'sÃ¶ndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lÃ¶rdag'.split('_'),
    weekdaysShort: 'sÃ¶n_mÃ¥n_tis_ons_tor_fre_lÃ¶r'.split('_'),
    weekdaysMin: 'sÃ¶_mÃ¥_ti_on_to_fr_lÃ¶'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY [kl.] HH:mm',
        LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
        lll: 'D MMM YYYY HH:mm',
        llll: 'ddd D MMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Idag] LT',
        nextDay: '[Imorgon] LT',
        lastDay: '[IgÃ¥r] LT',
        nextWeek: '[PÃ¥] dddd LT',
        lastWeek: '[I] dddd[s] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'om %s',
        past: 'fÃ¶r %s sedan',
        s: 'nÃ¥gra sekunder',
        ss: '%d sekunder',
        m: 'en minut',
        mm: '%d minuter',
        h: 'en timme',
        hh: '%d timmar',
        d: 'en dag',
        dd: '%d dagar',
        M: 'en mÃ¥nad',
        MM: '%d mÃ¥nader',
        y: 'ett Ã¥r',
        yy: '%d Ã¥r',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? ':e'
                    : b === 1
                    ? ':a'
                    : b === 2
                    ? ':a'
                    : b === 3
                    ? ':e'
                    : ':e';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Swahili [sw]
//! author : Fahad Kassim : https://github.com/fadsel

import moment from '../moment';

export default moment.defineLocale('sw', {
    months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
        '_'
    ),
    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
    weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
        '_'
    ),
    weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
    weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'hh:mm A',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[leo saa] LT',
        nextDay: '[kesho saa] LT',
        nextWeek: '[wiki ijayo] dddd [saat] LT',
        lastDay: '[jana] LT',
        lastWeek: '[wiki iliyopita] dddd [saat] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s baadaye',
        past: 'tokea %s',
        s: 'hivi punde',
        ss: 'sekunde %d',
        m: 'dakika moja',
        mm: 'dakika %d',
        h: 'saa limoja',
        hh: 'masaa %d',
        d: 'siku moja',
        dd: 'siku %d',
        M: 'mwezi mmoja',
        MM: 'miezi %d',
        y: 'mwaka mmoja',
        yy: 'miaka %d',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tamil [ta]
//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404

import moment from '../moment';

var symbolMap = {
        1: 'à¯§',
        2: 'à¯¨',
        3: 'à¯©',
        4: 'à¯ª',
        5: 'à¯«',
        6: 'à¯¬',
        7: 'à¯­',
        8: 'à¯®',
        9: 'à¯¯',
        0: 'à¯¦',
    },
    numberMap = {
        'à¯§': '1',
        'à¯¨': '2',
        'à¯©': '3',
        'à¯ª': '4',
        'à¯«': '5',
        'à¯¬': '6',
        'à¯­': '7',
        'à¯®': '8',
        'à¯¯': '9',
        'à¯¦': '0',
    };

export default moment.defineLocale('ta', {
    months: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
        '_'
    ),
    monthsShort: 'à®œà®©à®µà®°à®¿_à®ªà®¿à®ªà¯à®°à®µà®°à®¿_à®®à®¾à®°à¯à®šà¯_à®à®ªà¯à®°à®²à¯_à®®à¯‡_à®œà¯‚à®©à¯_à®œà¯‚à®²à¯ˆ_à®†à®•à®¸à¯à®Ÿà¯_à®šà¯†à®ªà¯à®Ÿà¯†à®®à¯à®ªà®°à¯_à®…à®•à¯à®Ÿà¯‡à®¾à®ªà®°à¯_à®¨à®µà®®à¯à®ªà®°à¯_à®Ÿà®¿à®šà®®à¯à®ªà®°à¯'.split(
        '_'
    ),
    weekdays: 'à®žà®¾à®¯à®¿à®±à¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ_à®¤à®¿à®™à¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ_à®šà¯†à®µà¯à®µà®¾à®¯à¯à®•à®¿à®´à®®à¯ˆ_à®ªà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ_à®µà®¿à®¯à®¾à®´à®•à¯à®•à®¿à®´à®®à¯ˆ_à®µà¯†à®³à¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ_à®šà®©à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ'.split(
        '_'
    ),
    weekdaysShort: 'à®žà®¾à®¯à®¿à®±à¯_à®¤à®¿à®™à¯à®•à®³à¯_à®šà¯†à®µà¯à®µà®¾à®¯à¯_à®ªà¯à®¤à®©à¯_à®µà®¿à®¯à®¾à®´à®©à¯_à®µà¯†à®³à¯à®³à®¿_à®šà®©à®¿'.split(
        '_'
    ),
    weekdaysMin: 'à®žà®¾_à®¤à®¿_à®šà¯†_à®ªà¯_à®µà®¿_à®µà¯†_à®š'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, HH:mm',
        LLLL: 'dddd, D MMMM YYYY, HH:mm',
    },
    calendar: {
        sameDay: '[à®‡à®©à¯à®±à¯] LT',
        nextDay: '[à®¨à®¾à®³à¯ˆ] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à®¨à¯‡à®±à¯à®±à¯] LT',
        lastWeek: '[à®•à®Ÿà®¨à¯à®¤ à®µà®¾à®°à®®à¯] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à®‡à®²à¯',
        past: '%s à®®à¯à®©à¯',
        s: 'à®’à®°à¯ à®šà®¿à®² à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
        ss: '%d à®µà®¿à®¨à®¾à®Ÿà®¿à®•à®³à¯',
        m: 'à®’à®°à¯ à®¨à®¿à®®à®¿à®Ÿà®®à¯',
        mm: '%d à®¨à®¿à®®à®¿à®Ÿà®™à¯à®•à®³à¯',
        h: 'à®’à®°à¯ à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
        hh: '%d à®®à®£à®¿ à®¨à¯‡à®°à®®à¯',
        d: 'à®’à®°à¯ à®¨à®¾à®³à¯',
        dd: '%d à®¨à®¾à®Ÿà¯à®•à®³à¯',
        M: 'à®’à®°à¯ à®®à®¾à®¤à®®à¯',
        MM: '%d à®®à®¾à®¤à®™à¯à®•à®³à¯',
        y: 'à®’à®°à¯ à®µà®°à¯à®Ÿà®®à¯',
        yy: '%d à®†à®£à¯à®Ÿà¯à®•à®³à¯',
    },
    dayOfMonthOrdinalParse: /\d{1,2}à®µà®¤à¯/,
    ordinal: function (number) {
        return number + 'à®µà®¤à¯';
    },
    preparse: function (string) {
        return string.replace(/[à¯§à¯¨à¯©à¯ªà¯«à¯¬à¯­à¯®à¯¯à¯¦]/g, function (match) {
            return numberMap[match];
        });
    },
    postformat: function (string) {
        return string.replace(/\d/g, function (match) {
            return symbolMap[match];
        });
    },
    // refer http://ta.wikipedia.org/s/1er1
    meridiemParse: /à®¯à®¾à®®à®®à¯|à®µà¯ˆà®•à®±à¯ˆ|à®•à®¾à®²à¯ˆ|à®¨à®£à¯à®ªà®•à®²à¯|à®Žà®±à¯à®ªà®¾à®Ÿà¯|à®®à®¾à®²à¯ˆ/,
    meridiem: function (hour, minute, isLower) {
        if (hour < 2) {
            return ' à®¯à®¾à®®à®®à¯';
        } else if (hour < 6) {
            return ' à®µà¯ˆà®•à®±à¯ˆ'; // à®µà¯ˆà®•à®±à¯ˆ
        } else if (hour < 10) {
            return ' à®•à®¾à®²à¯ˆ'; // à®•à®¾à®²à¯ˆ
        } else if (hour < 14) {
            return ' à®¨à®£à¯à®ªà®•à®²à¯'; // à®¨à®£à¯à®ªà®•à®²à¯
        } else if (hour < 18) {
            return ' à®Žà®±à¯à®ªà®¾à®Ÿà¯'; // à®Žà®±à¯à®ªà®¾à®Ÿà¯
        } else if (hour < 22) {
            return ' à®®à®¾à®²à¯ˆ'; // à®®à®¾à®²à¯ˆ
        } else {
            return ' à®¯à®¾à®®à®®à¯';
        }
    },
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à®¯à®¾à®®à®®à¯') {
            return hour < 2 ? hour : hour + 12;
        } else if (meridiem === 'à®µà¯ˆà®•à®±à¯ˆ' || meridiem === 'à®•à®¾à®²à¯ˆ') {
            return hour;
        } else if (meridiem === 'à®¨à®£à¯à®ªà®•à®²à¯') {
            return hour >= 10 ? hour : hour + 12;
        } else {
            return hour + 12;
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Telugu [te]
//! author : Krishna Chaitanya Thota : https://github.com/kcthota

import moment from '../moment';

export default moment.defineLocale('te', {
    months: 'à°œà°¨à°µà°°à°¿_à°«à°¿à°¬à±à°°à°µà°°à°¿_à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿à°²à±_à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—à°¸à±à°Ÿà±_à°¸à±†à°ªà±à°Ÿà±†à°‚à°¬à°°à±_à°…à°•à±à°Ÿà±‹à°¬à°°à±_à°¨à°µà°‚à°¬à°°à±_à°¡à°¿à°¸à±†à°‚à°¬à°°à±'.split(
        '_'
    ),
    monthsShort: 'à°œà°¨._à°«à°¿à°¬à±à°°._à°®à°¾à°°à±à°šà°¿_à°à°ªà±à°°à°¿._à°®à±‡_à°œà±‚à°¨à±_à°œà±à°²à±ˆ_à°†à°—._à°¸à±†à°ªà±._à°…à°•à±à°Ÿà±‹._à°¨à°µ._à°¡à°¿à°¸à±†.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à°†à°¦à°¿à°µà°¾à°°à°‚_à°¸à±‹à°®à°µà°¾à°°à°‚_à°®à°‚à°—à°³à°µà°¾à°°à°‚_à°¬à±à°§à°µà°¾à°°à°‚_à°—à±à°°à±à°µà°¾à°°à°‚_à°¶à±à°•à±à°°à°µà°¾à°°à°‚_à°¶à°¨à°¿à°µà°¾à°°à°‚'.split(
        '_'
    ),
    weekdaysShort: 'à°†à°¦à°¿_à°¸à±‹à°®_à°®à°‚à°—à°³_à°¬à±à°§_à°—à±à°°à±_à°¶à±à°•à±à°°_à°¶à°¨à°¿'.split('_'),
    weekdaysMin: 'à°†_à°¸à±‹_à°®à°‚_à°¬à±_à°—à±_à°¶à±_à°¶'.split('_'),
    longDateFormat: {
        LT: 'A h:mm',
        LTS: 'A h:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY, A h:mm',
        LLLL: 'dddd, D MMMM YYYY, A h:mm',
    },
    calendar: {
        sameDay: '[à°¨à±‡à°¡à±] LT',
        nextDay: '[à°°à±‡à°ªà±] LT',
        nextWeek: 'dddd, LT',
        lastDay: '[à°¨à°¿à°¨à±à°¨] LT',
        lastWeek: '[à°—à°¤] dddd, LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s à°²à±‹',
        past: '%s à°•à±à°°à°¿à°¤à°‚',
        s: 'à°•à±Šà°¨à±à°¨à°¿ à°•à±à°·à°£à°¾à°²à±',
        ss: '%d à°¸à±†à°•à°¨à±à°²à±',
        m: 'à°’à°• à°¨à°¿à°®à°¿à°·à°‚',
        mm: '%d à°¨à°¿à°®à°¿à°·à°¾à°²à±',
        h: 'à°’à°• à°—à°‚à°Ÿ',
        hh: '%d à°—à°‚à°Ÿà°²à±',
        d: 'à°’à°• à°°à±‹à°œà±',
        dd: '%d à°°à±‹à°œà±à°²à±',
        M: 'à°’à°• à°¨à±†à°²',
        MM: '%d à°¨à±†à°²à°²à±',
        y: 'à°’à°• à°¸à°‚à°µà°¤à±à°¸à°°à°‚',
        yy: '%d à°¸à°‚à°µà°¤à±à°¸à°°à°¾à°²à±',
    },
    dayOfMonthOrdinalParse: /\d{1,2}à°µ/,
    ordinal: '%dà°µ',
    meridiemParse: /à°°à°¾à°¤à±à°°à°¿|à°‰à°¦à°¯à°‚|à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚|à°¸à°¾à°¯à°‚à°¤à±à°°à°‚/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'à°°à°¾à°¤à±à°°à°¿') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'à°‰à°¦à°¯à°‚') {
            return hour;
        } else if (meridiem === 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚') {
            return hour >= 10 ? hour : hour + 12;
        } else if (meridiem === 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'à°°à°¾à°¤à±à°°à°¿';
        } else if (hour < 10) {
            return 'à°‰à°¦à°¯à°‚';
        } else if (hour < 17) {
            return 'à°®à°§à±à°¯à°¾à°¹à±à°¨à°‚';
        } else if (hour < 20) {
            return 'à°¸à°¾à°¯à°‚à°¤à±à°°à°‚';
        } else {
            return 'à°°à°¾à°¤à±à°°à°¿';
        }
    },
    week: {
        dow: 0, // Sunday is the first day of the week.
        doy: 6, // The week that contains Jan 6th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tetun Dili (East Timor) [tet]
//! author : Joshua Brooks : https://github.com/joshbrooks
//! author : Onorio De J. Afonso : https://github.com/marobo
//! author : Sonia Simoes : https://github.com/soniasimoes

import moment from '../moment';

export default moment.defineLocale('tet', {
    months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_JuÃ±u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
        '_'
    ),
    monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
    weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
    weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
    weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ohin iha] LT',
        nextDay: '[Aban iha] LT',
        nextWeek: 'dddd [iha] LT',
        lastDay: '[Horiseik iha] LT',
        lastWeek: 'dddd [semana kotuk] [iha] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'iha %s',
        past: '%s liuba',
        s: 'segundu balun',
        ss: 'segundu %d',
        m: 'minutu ida',
        mm: 'minutu %d',
        h: 'oras ida',
        hh: 'oras %d',
        d: 'loron ida',
        dd: 'loron %d',
        M: 'fulan ida',
        MM: 'fulan %d',
        y: 'tinan ida',
        yy: 'tinan %d',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tajik [tg]
//! author : Orif N. Jr. : https://github.com/orif-jr

import moment from '../moment';

var suffixes = {
    0: '-ÑƒÐ¼',
    1: '-ÑƒÐ¼',
    2: '-ÑŽÐ¼',
    3: '-ÑŽÐ¼',
    4: '-ÑƒÐ¼',
    5: '-ÑƒÐ¼',
    6: '-ÑƒÐ¼',
    7: '-ÑƒÐ¼',
    8: '-ÑƒÐ¼',
    9: '-ÑƒÐ¼',
    10: '-ÑƒÐ¼',
    12: '-ÑƒÐ¼',
    13: '-ÑƒÐ¼',
    20: '-ÑƒÐ¼',
    30: '-ÑŽÐ¼',
    40: '-ÑƒÐ¼',
    50: '-ÑƒÐ¼',
    60: '-ÑƒÐ¼',
    70: '-ÑƒÐ¼',
    80: '-ÑƒÐ¼',
    90: '-ÑƒÐ¼',
    100: '-ÑƒÐ¼',
};

export default moment.defineLocale('tg', {
    months: {
        format: 'ÑÐ½Ð²Ð°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€Ð°Ð»Ð¸_Ð¼Ð°Ñ€Ñ‚Ð¸_Ð°Ð¿Ñ€ÐµÐ»Ð¸_Ð¼Ð°Ð¹Ð¸_Ð¸ÑŽÐ½Ð¸_Ð¸ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚Ð¸_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ð¸_Ð¾ÐºÑ‚ÑÐ±Ñ€Ð¸_Ð½Ð¾ÑÐ±Ñ€Ð¸_Ð´ÐµÐºÐ°Ð±Ñ€Ð¸'.split(
            '_'
        ),
        standalone: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
            '_'
        ),
    },
    monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
    weekdays: 'ÑÐºÑˆÐ°Ð½Ð±Ðµ_Ð´ÑƒÑˆÐ°Ð½Ð±Ðµ_ÑÐµÑˆÐ°Ð½Ð±Ðµ_Ñ‡Ð¾Ñ€ÑˆÐ°Ð½Ð±Ðµ_Ð¿Ð°Ð½Ò·ÑˆÐ°Ð½Ð±Ðµ_Ò·ÑƒÐ¼ÑŠÐ°_ÑˆÐ°Ð½Ð±Ðµ'.split(
        '_'
    ),
    weekdaysShort: 'ÑÑˆÐ±_Ð´ÑˆÐ±_ÑÑˆÐ±_Ñ‡ÑˆÐ±_Ð¿ÑˆÐ±_Ò·ÑƒÐ¼_ÑˆÐ½Ð±'.split('_'),
    weekdaysMin: 'ÑÑˆ_Ð´Ñˆ_ÑÑˆ_Ñ‡Ñˆ_Ð¿Ñˆ_Ò·Ð¼_ÑˆÐ±'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[Ð˜Ð¼Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
        nextDay: '[Ð¤Ð°Ñ€Ð´Ð¾ ÑÐ¾Ð°Ñ‚Ð¸] LT',
        lastDay: '[Ð”Ð¸Ñ€Ó¯Ð· ÑÐ¾Ð°Ñ‚Ð¸] LT',
        nextWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð¾ÑÐ½Ð´Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
        lastWeek: 'dddd[Ð¸] [Ò³Ð°Ñ„Ñ‚Ð°Ð¸ Ð³ÑƒÐ·Ð°ÑˆÑ‚Ð° ÑÐ¾Ð°Ñ‚Ð¸] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð±Ð°ÑŠÐ´Ð¸ %s',
        past: '%s Ð¿ÐµÑˆ',
        s: 'ÑÐºÑ‡Ð°Ð½Ð´ ÑÐ¾Ð½Ð¸Ñ',
        m: 'ÑÐº Ð´Ð°Ò›Ð¸Ò›Ð°',
        mm: '%d Ð´Ð°Ò›Ð¸Ò›Ð°',
        h: 'ÑÐº ÑÐ¾Ð°Ñ‚',
        hh: '%d ÑÐ¾Ð°Ñ‚',
        d: 'ÑÐº Ñ€Ó¯Ð·',
        dd: '%d Ñ€Ó¯Ð·',
        M: 'ÑÐº Ð¼Ð¾Ò³',
        MM: '%d Ð¼Ð¾Ò³',
        y: 'ÑÐº ÑÐ¾Ð»',
        yy: '%d ÑÐ¾Ð»',
    },
    meridiemParse: /ÑˆÐ°Ð±|ÑÑƒÐ±Ò³|Ñ€Ó¯Ð·|Ð±ÐµÐ³Ð¾Ò³/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'ÑˆÐ°Ð±') {
            return hour < 4 ? hour : hour + 12;
        } else if (meridiem === 'ÑÑƒÐ±Ò³') {
            return hour;
        } else if (meridiem === 'Ñ€Ó¯Ð·') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'Ð±ÐµÐ³Ð¾Ò³') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'ÑˆÐ°Ð±';
        } else if (hour < 11) {
            return 'ÑÑƒÐ±Ò³';
        } else if (hour < 16) {
            return 'Ñ€Ó¯Ð·';
        } else if (hour < 19) {
            return 'Ð±ÐµÐ³Ð¾Ò³';
        } else {
            return 'ÑˆÐ°Ð±';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(ÑƒÐ¼|ÑŽÐ¼)/,
    ordinal: function (number) {
        var a = number % 10,
            b = number >= 100 ? 100 : null;
        return number + (suffixes[number] || suffixes[a] || suffixes[b]);
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 1th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Thai [th]
//! author : Kridsada Thanabulpong : https://github.com/sirn

import moment from '../moment';

export default moment.defineLocale('th', {
    months: 'à¸¡à¸à¸£à¸²à¸„à¸¡_à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ_à¸¡à¸µà¸™à¸²à¸„à¸¡_à¹€à¸¡à¸©à¸²à¸¢à¸™_à¸žà¸¤à¸©à¸ à¸²à¸„à¸¡_à¸¡à¸´à¸–à¸¸à¸™à¸²à¸¢à¸™_à¸à¸£à¸à¸Žà¸²à¸„à¸¡_à¸ªà¸´à¸‡à¸«à¸²à¸„à¸¡_à¸à¸±à¸™à¸¢à¸²à¸¢à¸™_à¸•à¸¸à¸¥à¸²à¸„à¸¡_à¸žà¸¤à¸¨à¸ˆà¸´à¸à¸²à¸¢à¸™_à¸˜à¸±à¸™à¸§à¸²à¸„à¸¡'.split(
        '_'
    ),
    monthsShort: 'à¸¡.à¸„._à¸.à¸ž._à¸¡à¸µ.à¸„._à¹€à¸¡.à¸¢._à¸ž.à¸„._à¸¡à¸´.à¸¢._à¸.à¸„._à¸ª.à¸„._à¸.à¸¢._à¸•.à¸„._à¸ž.à¸¢._à¸˜.à¸„.'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ªà¸šà¸”à¸µ_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'),
    weekdaysShort: 'à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ª_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ'.split('_'), // yes, three characters difference
    weekdaysMin: 'à¸­à¸²._à¸ˆ._à¸­._à¸ž._à¸žà¸¤._à¸¨._à¸ª.'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'H:mm',
        LTS: 'H:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
        LLLL: 'à¸§à¸±à¸™ddddà¸—à¸µà¹ˆ D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm',
    },
    meridiemParse: /à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡|à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡/,
    isPM: function (input) {
        return input === 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
        } else {
            return 'à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡';
        }
    },
    calendar: {
        sameDay: '[à¸§à¸±à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
        nextDay: '[à¸žà¸£à¸¸à¹ˆà¸‡à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
        nextWeek: 'dddd[à¸«à¸™à¹‰à¸² à¹€à¸§à¸¥à¸²] LT',
        lastDay: '[à¹€à¸¡à¸·à¹ˆà¸­à¸§à¸²à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT',
        lastWeek: '[à¸§à¸±à¸™]dddd[à¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§ à¹€à¸§à¸¥à¸²] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'à¸­à¸µà¸ %s',
        past: '%sà¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§',
        s: 'à¹„à¸¡à¹ˆà¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—à¸µ',
        ss: '%d à¸§à¸´à¸™à¸²à¸—à¸µ',
        m: '1 à¸™à¸²à¸—à¸µ',
        mm: '%d à¸™à¸²à¸—à¸µ',
        h: '1 à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
        hh: '%d à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡',
        d: '1 à¸§à¸±à¸™',
        dd: '%d à¸§à¸±à¸™',
        w: '1 à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
        ww: '%d à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ',
        M: '1 à¹€à¸”à¸·à¸­à¸™',
        MM: '%d à¹€à¸”à¸·à¸­à¸™',
        y: '1 à¸›à¸µ',
        yy: '%d à¸›à¸µ',
    },
});
//! moment.js locale configuration
//! locale : Turkmen [tk]
//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy

import moment from '../moment';

var suffixes = {
    1: "'inji",
    5: "'inji",
    8: "'inji",
    70: "'inji",
    80: "'inji",
    2: "'nji",
    7: "'nji",
    20: "'nji",
    50: "'nji",
    3: "'Ã¼nji",
    4: "'Ã¼nji",
    100: "'Ã¼nji",
    6: "'njy",
    9: "'unjy",
    10: "'unjy",
    30: "'unjy",
    60: "'ynjy",
    90: "'ynjy",
};

export default moment.defineLocale('tk', {
    months: 'Ãanwar_Fewral_Mart_Aprel_MaÃ½_IÃ½un_IÃ½ul_Awgust_SentÃ½abr_OktÃ½abr_NoÃ½abr_Dekabr'.split(
        '_'
    ),
    monthsShort: 'Ãan_Few_Mar_Apr_MaÃ½_IÃ½n_IÃ½l_Awg_Sen_Okt_NoÃ½_Dek'.split('_'),
    weekdays: 'ÃekÅŸenbe_DuÅŸenbe_SiÅŸenbe_Ã‡arÅŸenbe_PenÅŸenbe_Anna_Åženbe'.split(
        '_'
    ),
    weekdaysShort: 'Ãek_DuÅŸ_SiÅŸ_Ã‡ar_Pen_Ann_Åžen'.split('_'),
    weekdaysMin: 'Ãk_DÅŸ_SÅŸ_Ã‡r_Pn_An_Åžn'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[bugÃ¼n sagat] LT',
        nextDay: '[ertir sagat] LT',
        nextWeek: '[indiki] dddd [sagat] LT',
        lastDay: '[dÃ¼Ã½n] LT',
        lastWeek: '[geÃ§en] dddd [sagat] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s soÅˆ',
        past: '%s Ã¶Åˆ',
        s: 'birnÃ¤Ã§e sekunt',
        m: 'bir minut',
        mm: '%d minut',
        h: 'bir sagat',
        hh: '%d sagat',
        d: 'bir gÃ¼n',
        dd: '%d gÃ¼n',
        M: 'bir aÃ½',
        MM: '%d aÃ½',
        y: 'bir Ã½yl',
        yy: '%d Ã½yl',
    },
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'Do':
            case 'DD':
                return number;
            default:
                if (number === 0) {
                    // special case for zero
                    return number + "'unjy";
                }
                var a = number % 10,
                    b = (number % 100) - a,
                    c = number >= 100 ? 100 : null;
                return number + (suffixes[a] || suffixes[b] || suffixes[c]);
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Tagalog (Philippines) [tl-ph]
//! author : Dan Hagman : https://github.com/hagmandan

import moment from '../moment';

export default moment.defineLocale('tl-ph', {
    months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
        '_'
    ),
    monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
    weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
        '_'
    ),
    weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
    weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'MM/D/YYYY',
        LL: 'MMMM D, YYYY',
        LLL: 'MMMM D, YYYY HH:mm',
        LLLL: 'dddd, MMMM DD, YYYY HH:mm',
    },
    calendar: {
        sameDay: 'LT [ngayong araw]',
        nextDay: '[Bukas ng] LT',
        nextWeek: 'LT [sa susunod na] dddd',
        lastDay: 'LT [kahapon]',
        lastWeek: 'LT [noong nakaraang] dddd',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'sa loob ng %s',
        past: '%s ang nakalipas',
        s: 'ilang segundo',
        ss: '%d segundo',
        m: 'isang minuto',
        mm: '%d minuto',
        h: 'isang oras',
        hh: '%d oras',
        d: 'isang araw',
        dd: '%d araw',
        M: 'isang buwan',
        MM: '%d buwan',
        y: 'isang taon',
        yy: '%d taon',
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: function (number) {
        return number;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Klingon [tlh]
//! author : Dominika Kruk : https://github.com/amaranthrose

import moment from '../moment';

var numbersNouns = 'pagh_waâ€™_chaâ€™_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');

function translateFuture(output) {
    var time = output;
    time =
        output.indexOf('jaj') !== -1
            ? time.slice(0, -3) + 'leS'
            : output.indexOf('jar') !== -1
            ? time.slice(0, -3) + 'waQ'
            : output.indexOf('DIS') !== -1
            ? time.slice(0, -3) + 'nem'
            : time + ' pIq';
    return time;
}

function translatePast(output) {
    var time = output;
    time =
        output.indexOf('jaj') !== -1
            ? time.slice(0, -3) + 'Huâ€™'
            : output.indexOf('jar') !== -1
            ? time.slice(0, -3) + 'wen'
            : output.indexOf('DIS') !== -1
            ? time.slice(0, -3) + 'ben'
            : time + ' ret';
    return time;
}

function translate(number, withoutSuffix, string, isFuture) {
    var numberNoun = numberAsNoun(number);
    switch (string) {
        case 'ss':
            return numberNoun + ' lup';
        case 'mm':
            return numberNoun + ' tup';
        case 'hh':
            return numberNoun + ' rep';
        case 'dd':
            return numberNoun + ' jaj';
        case 'MM':
            return numberNoun + ' jar';
        case 'yy':
            return numberNoun + ' DIS';
    }
}

function numberAsNoun(number) {
    var hundred = Math.floor((number % 1000) / 100),
        ten = Math.floor((number % 100) / 10),
        one = number % 10,
        word = '';
    if (hundred > 0) {
        word += numbersNouns[hundred] + 'vatlh';
    }
    if (ten > 0) {
        word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
    }
    if (one > 0) {
        word += (word !== '' ? ' ' : '') + numbersNouns[one];
    }
    return word === '' ? 'pagh' : word;
}

export default moment.defineLocale('tlh', {
    months: 'teraâ€™ jar waâ€™_teraâ€™ jar chaâ€™_teraâ€™ jar wej_teraâ€™ jar loS_teraâ€™ jar vagh_teraâ€™ jar jav_teraâ€™ jar Soch_teraâ€™ jar chorgh_teraâ€™ jar Hut_teraâ€™ jar waâ€™maH_teraâ€™ jar waâ€™maH waâ€™_teraâ€™ jar waâ€™maH chaâ€™'.split(
        '_'
    ),
    monthsShort: 'jar waâ€™_jar chaâ€™_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar waâ€™maH_jar waâ€™maH waâ€™_jar waâ€™maH chaâ€™'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
        '_'
    ),
    weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
        '_'
    ),
    weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
        '_'
    ),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[DaHjaj] LT',
        nextDay: '[waâ€™leS] LT',
        nextWeek: 'LLL',
        lastDay: '[waâ€™Huâ€™] LT',
        lastWeek: 'LLL',
        sameElse: 'L',
    },
    relativeTime: {
        future: translateFuture,
        past: translatePast,
        s: 'puS lup',
        ss: translate,
        m: 'waâ€™ tup',
        mm: translate,
        h: 'waâ€™ rep',
        hh: translate,
        d: 'waâ€™ jaj',
        dd: translate,
        M: 'waâ€™ jar',
        MM: translate,
        y: 'waâ€™ DIS',
        yy: translate,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Turkish [tr]
//! authors : Erhan Gundogan : https://github.com/erhangundogan,
//!           Burak YiÄŸit Kaya: https://github.com/BYK

import moment from '../moment';

var suffixes = {
    1: "'inci",
    5: "'inci",
    8: "'inci",
    70: "'inci",
    80: "'inci",
    2: "'nci",
    7: "'nci",
    20: "'nci",
    50: "'nci",
    3: "'Ã¼ncÃ¼",
    4: "'Ã¼ncÃ¼",
    100: "'Ã¼ncÃ¼",
    6: "'ncÄ±",
    9: "'uncu",
    10: "'uncu",
    30: "'uncu",
    60: "'Ä±ncÄ±",
    90: "'Ä±ncÄ±",
};

export default moment.defineLocale('tr', {
    months: 'Ocak_Åžubat_Mart_Nisan_MayÄ±s_Haziran_Temmuz_AÄŸustos_EylÃ¼l_Ekim_KasÄ±m_AralÄ±k'.split(
        '_'
    ),
    monthsShort: 'Oca_Åžub_Mar_Nis_May_Haz_Tem_AÄŸu_Eyl_Eki_Kas_Ara'.split('_'),
    weekdays: 'Pazar_Pazartesi_SalÄ±_Ã‡arÅŸamba_PerÅŸembe_Cuma_Cumartesi'.split(
        '_'
    ),
    weekdaysShort: 'Paz_Pts_Sal_Ã‡ar_Per_Cum_Cts'.split('_'),
    weekdaysMin: 'Pz_Pt_Sa_Ã‡a_Pe_Cu_Ct'.split('_'),
    meridiem: function (hours, minutes, isLower) {
        if (hours < 12) {
            return isLower ? 'Ã¶Ã¶' : 'Ã–Ã–';
        } else {
            return isLower ? 'Ã¶s' : 'Ã–S';
        }
    },
    meridiemParse: /Ã¶Ã¶|Ã–Ã–|Ã¶s|Ã–S/,
    isPM: function (input) {
        return input === 'Ã¶s' || input === 'Ã–S';
    },
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[bugÃ¼n saat] LT',
        nextDay: '[yarÄ±n saat] LT',
        nextWeek: '[gelecek] dddd [saat] LT',
        lastDay: '[dÃ¼n] LT',
        lastWeek: '[geÃ§en] dddd [saat] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s sonra',
        past: '%s Ã¶nce',
        s: 'birkaÃ§ saniye',
        ss: '%d saniye',
        m: 'bir dakika',
        mm: '%d dakika',
        h: 'bir saat',
        hh: '%d saat',
        d: 'bir gÃ¼n',
        dd: '%d gÃ¼n',
        w: 'bir hafta',
        ww: '%d hafta',
        M: 'bir ay',
        MM: '%d ay',
        y: 'bir yÄ±l',
        yy: '%d yÄ±l',
    },
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'Do':
            case 'DD':
                return number;
            default:
                if (number === 0) {
                    // special case for zero
                    return number + "'Ä±ncÄ±";
                }
                var a = number % 10,
                    b = (number % 100) - a,
                    c = number >= 100 ? 100 : null;
                return number + (suffixes[a] || suffixes[b] || suffixes[c]);
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Talossan [tzl]
//! author : Robin van der Vliet : https://github.com/robin0van0der0v
//! author : IustÃ¬ Canun

import moment from '../moment';

// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
// This is currently too difficult (maybe even impossible) to add.
export default moment.defineLocale('tzl', {
    months: 'Januar_Fevraglh_MarÃ§_AvrÃ¯u_Mai_GÃ¼n_Julia_Guscht_Setemvar_ListopÃ¤ts_Noemvar_Zecemvar'.split(
        '_'
    ),
    monthsShort: 'Jan_Fev_Mar_Avr_Mai_GÃ¼n_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
    weekdays: 'SÃºladi_LÃºneÃ§i_Maitzi_MÃ¡rcuri_XhÃºadi_ViÃ©nerÃ§i_SÃ¡turi'.split('_'),
    weekdaysShort: 'SÃºl_LÃºn_Mai_MÃ¡r_XhÃº_ViÃ©_SÃ¡t'.split('_'),
    weekdaysMin: 'SÃº_LÃº_Ma_MÃ¡_Xh_Vi_SÃ¡'.split('_'),
    longDateFormat: {
        LT: 'HH.mm',
        LTS: 'HH.mm.ss',
        L: 'DD.MM.YYYY',
        LL: 'D. MMMM [dallas] YYYY',
        LLL: 'D. MMMM [dallas] YYYY HH.mm',
        LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
    },
    meridiemParse: /d\'o|d\'a/i,
    isPM: function (input) {
        return "d'o" === input.toLowerCase();
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours > 11) {
            return isLower ? "d'o" : "D'O";
        } else {
            return isLower ? "d'a" : "D'A";
        }
    },
    calendar: {
        sameDay: '[oxhi Ã ] LT',
        nextDay: '[demÃ  Ã ] LT',
        nextWeek: 'dddd [Ã ] LT',
        lastDay: '[ieiri Ã ] LT',
        lastWeek: '[sÃ¼r el] dddd [lasteu Ã ] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'osprei %s',
        past: 'ja%s',
        s: processRelativeTime,
        ss: processRelativeTime,
        m: processRelativeTime,
        mm: processRelativeTime,
        h: processRelativeTime,
        hh: processRelativeTime,
        d: processRelativeTime,
        dd: processRelativeTime,
        M: processRelativeTime,
        MM: processRelativeTime,
        y: processRelativeTime,
        yy: processRelativeTime,
    },
    dayOfMonthOrdinalParse: /\d{1,2}\./,
    ordinal: '%d.',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});

function processRelativeTime(number, withoutSuffix, key, isFuture) {
    var format = {
        s: ['viensas secunds', "'iensas secunds"],
        ss: [number + ' secunds', '' + number + ' secunds'],
        m: ["'n mÃ­ut", "'iens mÃ­ut"],
        mm: [number + ' mÃ­uts', '' + number + ' mÃ­uts'],
        h: ["'n Ã¾ora", "'iensa Ã¾ora"],
        hh: [number + ' Ã¾oras', '' + number + ' Ã¾oras'],
        d: ["'n ziua", "'iensa ziua"],
        dd: [number + ' ziuas', '' + number + ' ziuas'],
        M: ["'n mes", "'iens mes"],
        MM: [number + ' mesen', '' + number + ' mesen'],
        y: ["'n ar", "'iens ar"],
        yy: [number + ' ars', '' + number + ' ars'],
    };
    return isFuture
        ? format[key][0]
        : withoutSuffix
        ? format[key][0]
        : format[key][1];
}
//! moment.js locale configuration
//! locale : Central Atlas Tamazight Latin [tzm-latn]
//! author : Abdel Said : https://github.com/abdelsaid

import moment from '../moment';

export default moment.defineLocale('tzm-latn', {
    months: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
        '_'
    ),
    monthsShort: 'innayr_brË¤ayrË¤_marË¤sË¤_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktË¤wbrË¤_nwwanbir_dwjnbir'.split(
        '_'
    ),
    weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
    weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
    weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiá¸yas'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[asdkh g] LT',
        nextDay: '[aska g] LT',
        nextWeek: 'dddd [g] LT',
        lastDay: '[assant g] LT',
        lastWeek: 'dddd [g] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'dadkh s yan %s',
        past: 'yan %s',
        s: 'imik',
        ss: '%d imik',
        m: 'minuá¸',
        mm: '%d minuá¸',
        h: 'saÉ›a',
        hh: '%d tassaÉ›in',
        d: 'ass',
        dd: '%d ossan',
        M: 'ayowr',
        MM: '%d iyyirn',
        y: 'asgas',
        yy: '%d isgasn',
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Central Atlas Tamazight [tzm]
//! author : Abdel Said : https://github.com/abdelsaid

import moment from '../moment';

export default moment.defineLocale('tzm', {
    months: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
        '_'
    ),
    monthsShort: 'âµ‰âµâµâ´°âµ¢âµ”_â´±âµ•â´°âµ¢âµ•_âµŽâ´°âµ•âµš_âµ‰â´±âµ”âµ‰âµ”_âµŽâ´°âµ¢âµ¢âµ“_âµ¢âµ“âµâµ¢âµ“_âµ¢âµ“âµâµ¢âµ“âµ£_âµ–âµ“âµ›âµœ_âµ›âµ“âµœâ´°âµâ´±âµ‰âµ”_â´½âµŸâµ“â´±âµ•_âµâµ“âµ¡â´°âµâ´±âµ‰âµ”_â´·âµ“âµŠâµâ´±âµ‰âµ”'.split(
        '_'
    ),
    weekdays: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
    weekdaysShort: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
    weekdaysMin: 'â´°âµ™â´°âµŽâ´°âµ™_â´°âµ¢âµâ´°âµ™_â´°âµ™âµ‰âµâ´°âµ™_â´°â´½âµ”â´°âµ™_â´°â´½âµ¡â´°âµ™_â´°âµ™âµ‰âµŽâµ¡â´°âµ™_â´°âµ™âµ‰â´¹âµ¢â´°âµ™'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[â´°âµ™â´·âµ… â´´] LT',
        nextDay: '[â´°âµ™â´½â´° â´´] LT',
        nextWeek: 'dddd [â´´] LT',
        lastDay: '[â´°âµšâ´°âµâµœ â´´] LT',
        lastWeek: 'dddd [â´´] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'â´·â´°â´·âµ… âµ™ âµ¢â´°âµ %s',
        past: 'âµ¢â´°âµ %s',
        s: 'âµ‰âµŽâµ‰â´½',
        ss: '%d âµ‰âµŽâµ‰â´½',
        m: 'âµŽâµ‰âµâµ“â´º',
        mm: '%d âµŽâµ‰âµâµ“â´º',
        h: 'âµ™â´°âµ„â´°',
        hh: '%d âµœâ´°âµ™âµ™â´°âµ„âµ‰âµ',
        d: 'â´°âµ™âµ™',
        dd: '%d oâµ™âµ™â´°âµ',
        M: 'â´°âµ¢oâµ“âµ”',
        MM: '%d âµ‰âµ¢âµ¢âµ‰âµ”âµ',
        y: 'â´°âµ™â´³â´°âµ™',
        yy: '%d âµ‰âµ™â´³â´°âµ™âµ',
    },
    week: {
        dow: 6, // Saturday is the first day of the week.
        doy: 12, // The week that contains Jan 12th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Uyghur (China) [ug-cn]
//! author: boyaq : https://github.com/boyaq

import moment from '../moment';

export default moment.defineLocale('ug-cn', {
    months: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
        '_'
    ),
    monthsShort: 'ÙŠØ§Ù†Û‹Ø§Ø±_ÙÛÛ‹Ø±Ø§Ù„_Ù…Ø§Ø±Øª_Ø¦Ø§Ù¾Ø±ÛÙ„_Ù…Ø§ÙŠ_Ø¦Ù‰ÙŠÛ‡Ù†_Ø¦Ù‰ÙŠÛ‡Ù„_Ø¦Ø§Û‹ØºÛ‡Ø³Øª_Ø³ÛÙ†ØªÛ•Ø¨Ù‰Ø±_Ø¦Û†ÙƒØªÛ•Ø¨Ù‰Ø±_Ù†ÙˆÙŠØ§Ø¨Ù‰Ø±_Ø¯ÛÙƒØ§Ø¨Ù‰Ø±'.split(
        '_'
    ),
    weekdays: 'ÙŠÛ•ÙƒØ´Û•Ù†Ø¨Û•_Ø¯ÛˆØ´Û•Ù†Ø¨Û•_Ø³Û•ÙŠØ´Û•Ù†Ø¨Û•_Ú†Ø§Ø±Ø´Û•Ù†Ø¨Û•_Ù¾Û•ÙŠØ´Û•Ù†Ø¨Û•_Ø¬ÛˆÙ…Û•_Ø´Û•Ù†Ø¨Û•'.split(
        '_'
    ),
    weekdaysShort: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
    weekdaysMin: 'ÙŠÛ•_Ø¯Ûˆ_Ø³Û•_Ú†Ø§_Ù¾Û•_Ø¬Ûˆ_Ø´Û•'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY-MM-DD',
        LL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰',
        LLL: 'YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
        LLLL: 'ddddØŒ YYYY-ÙŠÙ‰Ù„Ù‰M-Ø¦Ø§ÙŠÙ†Ù‰Ú­D-ÙƒÛˆÙ†Ù‰ØŒ HH:mm',
    },
    meridiemParse: /ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•|Ø³Û•Ú¾Û•Ø±|Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†|Ú†ÛˆØ´|Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†|ÙƒÛ•Ú†/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (
            meridiem === 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•' ||
            meridiem === 'Ø³Û•Ú¾Û•Ø±' ||
            meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†'
        ) {
            return hour;
        } else if (meridiem === 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†' || meridiem === 'ÙƒÛ•Ú†') {
            return hour + 12;
        } else {
            return hour >= 11 ? hour : hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'ÙŠÛØ±Ù‰Ù… ÙƒÛÚ†Û•';
        } else if (hm < 900) {
            return 'Ø³Û•Ú¾Û•Ø±';
        } else if (hm < 1130) {
            return 'Ú†ÛˆØ´ØªÙ‰Ù† Ø¨Û‡Ø±Û‡Ù†';
        } else if (hm < 1230) {
            return 'Ú†ÛˆØ´';
        } else if (hm < 1800) {
            return 'Ú†ÛˆØ´ØªÙ‰Ù† ÙƒÛÙŠÙ‰Ù†';
        } else {
            return 'ÙƒÛ•Ú†';
        }
    },
    calendar: {
        sameDay: '[Ø¨ÛˆÚ¯ÛˆÙ† Ø³Ø§Ø¦Û•Øª] LT',
        nextDay: '[Ø¦Û•ØªÛ• Ø³Ø§Ø¦Û•Øª] LT',
        nextWeek: '[ÙƒÛÙ„Û•Ø±ÙƒÙ‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
        lastDay: '[ØªÛ†Ù†ÛˆÚ¯ÛˆÙ†] LT',
        lastWeek: '[Ø¦Ø§Ù„Ø¯Ù‰Ù†Ù‚Ù‰] dddd [Ø³Ø§Ø¦Û•Øª] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s ÙƒÛÙŠÙ‰Ù†',
        past: '%s Ø¨Û‡Ø±Û‡Ù†',
        s: 'Ù†Û•Ú†Ú†Û• Ø³ÛÙƒÙˆÙ†Øª',
        ss: '%d Ø³ÛÙƒÙˆÙ†Øª',
        m: 'Ø¨Ù‰Ø± Ù…Ù‰Ù†Û‡Øª',
        mm: '%d Ù…Ù‰Ù†Û‡Øª',
        h: 'Ø¨Ù‰Ø± Ø³Ø§Ø¦Û•Øª',
        hh: '%d Ø³Ø§Ø¦Û•Øª',
        d: 'Ø¨Ù‰Ø± ÙƒÛˆÙ†',
        dd: '%d ÙƒÛˆÙ†',
        M: 'Ø¨Ù‰Ø± Ø¦Ø§ÙŠ',
        MM: '%d Ø¦Ø§ÙŠ',
        y: 'Ø¨Ù‰Ø± ÙŠÙ‰Ù„',
        yy: '%d ÙŠÙ‰Ù„',
    },

    dayOfMonthOrdinalParse: /\d{1,2}(-ÙƒÛˆÙ†Ù‰|-Ø¦Ø§ÙŠ|-Ú¾Û•Ù¾ØªÛ•)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + '-ÙƒÛˆÙ†Ù‰';
            case 'w':
            case 'W':
                return number + '-Ú¾Û•Ù¾ØªÛ•';
            default:
                return number;
        }
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 1st is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Ukrainian [uk]
//! author : zemlanin : https://github.com/zemlanin
//! Author : Menelion ElensÃºle : https://github.com/Oire

import moment from '../moment';

function plural(word, num) {
    var forms = word.split('_');
    return num % 10 === 1 && num % 100 !== 11
        ? forms[0]
        : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
        ? forms[1]
        : forms[2];
}
function relativeTimeWithPlural(number, withoutSuffix, key) {
    var format = {
        ss: withoutSuffix ? 'ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´' : 'ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´',
        mm: withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½',
        hh: withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½',
        dd: 'Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð½Ñ–Ð²',
        MM: 'Ð¼Ñ–ÑÑÑ†ÑŒ_Ð¼Ñ–ÑÑÑ†Ñ–_Ð¼Ñ–ÑÑÑ†Ñ–Ð²',
        yy: 'Ñ€Ñ–Ðº_Ñ€Ð¾ÐºÐ¸_Ñ€Ð¾ÐºÑ–Ð²',
    };
    if (key === 'm') {
        return withoutSuffix ? 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°' : 'Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ';
    } else if (key === 'h') {
        return withoutSuffix ? 'Ð³Ð¾Ð´Ð¸Ð½Ð°' : 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ';
    } else {
        return number + ' ' + plural(format[key], +number);
    }
}
function weekdaysCaseReplace(m, format) {
    var weekdays = {
            nominative: 'Ð½ÐµÐ´Ñ–Ð»Ñ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ_ÑÑƒÐ±Ð¾Ñ‚Ð°'.split(
                '_'
            ),
            accusative: 'Ð½ÐµÐ´Ñ–Ð»ÑŽ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†ÑŽ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ'.split(
                '_'
            ),
            genitive: 'Ð½ÐµÐ´Ñ–Ð»Ñ–_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»ÐºÐ°_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€ÐºÐ°_ÑÐµÑ€ÐµÐ´Ð¸_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³Ð°_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ–_ÑÑƒÐ±Ð¾Ñ‚Ð¸'.split(
                '_'
            ),
        },
        nounCase;

    if (m === true) {
        return weekdays['nominative']
            .slice(1, 7)
            .concat(weekdays['nominative'].slice(0, 1));
    }
    if (!m) {
        return weekdays['nominative'];
    }

    nounCase = /(\[[Ð’Ð²Ð£Ñƒ]\]) ?dddd/.test(format)
        ? 'accusative'
        : /\[?(?:Ð¼Ð¸Ð½ÑƒÐ»Ð¾Ñ—|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½Ð¾Ñ—)? ?\] ?dddd/.test(format)
        ? 'genitive'
        : 'nominative';
    return weekdays[nounCase][m.day()];
}
function processHoursFunction(str) {
    return function () {
        return str + 'Ð¾' + (this.hours() === 11 ? 'Ð±' : '') + '] LT';
    };
}

export default moment.defineLocale('uk', {
    months: {
        format: 'ÑÑ–Ñ‡Ð½Ñ_Ð»ÑŽÑ‚Ð¾Ð³Ð¾_Ð±ÐµÑ€ÐµÐ·Ð½Ñ_ÐºÐ²Ñ–Ñ‚Ð½Ñ_Ñ‚Ñ€Ð°Ð²Ð½Ñ_Ñ‡ÐµÑ€Ð²Ð½Ñ_Ð»Ð¸Ð¿Ð½Ñ_ÑÐµÑ€Ð¿Ð½Ñ_Ð²ÐµÑ€ÐµÑÐ½Ñ_Ð¶Ð¾Ð²Ñ‚Ð½Ñ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´Ð°_Ð³Ñ€ÑƒÐ´Ð½Ñ'.split(
            '_'
        ),
        standalone: 'ÑÑ–Ñ‡ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ð¸Ð¹_Ð±ÐµÑ€ÐµÐ·ÐµÐ½ÑŒ_ÐºÐ²Ñ–Ñ‚ÐµÐ½ÑŒ_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÐµÑ€Ð²ÐµÐ½ÑŒ_Ð»Ð¸Ð¿ÐµÐ½ÑŒ_ÑÐµÑ€Ð¿ÐµÐ½ÑŒ_Ð²ÐµÑ€ÐµÑÐµÐ½ÑŒ_Ð¶Ð¾Ð²Ñ‚ÐµÐ½ÑŒ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´_Ð³Ñ€ÑƒÐ´ÐµÐ½ÑŒ'.split(
            '_'
        ),
    },
    monthsShort: 'ÑÑ–Ñ‡_Ð»ÑŽÑ‚_Ð±ÐµÑ€_ÐºÐ²Ñ–Ñ‚_Ñ‚Ñ€Ð°Ð²_Ñ‡ÐµÑ€Ð²_Ð»Ð¸Ð¿_ÑÐµÑ€Ð¿_Ð²ÐµÑ€_Ð¶Ð¾Ð²Ñ‚_Ð»Ð¸ÑÑ‚_Ð³Ñ€ÑƒÐ´'.split(
        '_'
    ),
    weekdays: weekdaysCaseReplace,
    weekdaysShort: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    weekdaysMin: 'Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD.MM.YYYY',
        LL: 'D MMMM YYYY Ñ€.',
        LLL: 'D MMMM YYYY Ñ€., HH:mm',
        LLLL: 'dddd, D MMMM YYYY Ñ€., HH:mm',
    },
    calendar: {
        sameDay: processHoursFunction('[Ð¡ÑŒÐ¾Ð³Ð¾Ð´Ð½Ñ– '),
        nextDay: processHoursFunction('[Ð—Ð°Ð²Ñ‚Ñ€Ð° '),
        lastDay: processHoursFunction('[Ð’Ñ‡Ð¾Ñ€Ð° '),
        nextWeek: processHoursFunction('[Ð£] dddd ['),
        lastWeek: function () {
            switch (this.day()) {
                case 0:
                case 3:
                case 5:
                case 6:
                    return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ñ—] dddd [').call(this);
                case 1:
                case 2:
                case 4:
                    return processHoursFunction('[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ð³Ð¾] dddd [').call(this);
            }
        },
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð·Ð° %s',
        past: '%s Ñ‚Ð¾Ð¼Ñƒ',
        s: 'Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° ÑÐµÐºÑƒÐ½Ð´',
        ss: relativeTimeWithPlural,
        m: relativeTimeWithPlural,
        mm: relativeTimeWithPlural,
        h: 'Ð³Ð¾Ð´Ð¸Ð½Ñƒ',
        hh: relativeTimeWithPlural,
        d: 'Ð´ÐµÐ½ÑŒ',
        dd: relativeTimeWithPlural,
        M: 'Ð¼Ñ–ÑÑÑ†ÑŒ',
        MM: relativeTimeWithPlural,
        y: 'Ñ€Ñ–Ðº',
        yy: relativeTimeWithPlural,
    },
    // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
    meridiemParse: /Ð½Ð¾Ñ‡Ñ–|Ñ€Ð°Ð½ÐºÑƒ|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°/,
    isPM: function (input) {
        return /^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°)$/.test(input);
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 4) {
            return 'Ð½Ð¾Ñ‡Ñ–';
        } else if (hour < 12) {
            return 'Ñ€Ð°Ð½ÐºÑƒ';
        } else if (hour < 17) {
            return 'Ð´Ð½Ñ';
        } else {
            return 'Ð²ÐµÑ‡Ð¾Ñ€Ð°';
        }
    },
    dayOfMonthOrdinalParse: /\d{1,2}-(Ð¹|Ð³Ð¾)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'M':
            case 'd':
            case 'DDD':
            case 'w':
            case 'W':
                return number + '-Ð¹';
            case 'D':
                return number + '-Ð³Ð¾';
            default:
                return number;
        }
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Urdu [ur]
//! author : Sawood Alam : https://github.com/ibnesayeed
//! author : Zack : https://github.com/ZackVision

import moment from '../moment';

var months = [
        'Ø¬Ù†ÙˆØ±ÛŒ',
        'ÙØ±ÙˆØ±ÛŒ',
        'Ù…Ø§Ø±Ú†',
        'Ø§Ù¾Ø±ÛŒÙ„',
        'Ù…Ø¦ÛŒ',
        'Ø¬ÙˆÙ†',
        'Ø¬ÙˆÙ„Ø§Ø¦ÛŒ',
        'Ø§Ú¯Ø³Øª',
        'Ø³ØªÙ…Ø¨Ø±',
        'Ø§Ú©ØªÙˆØ¨Ø±',
        'Ù†ÙˆÙ…Ø¨Ø±',
        'Ø¯Ø³Ù…Ø¨Ø±',
    ],
    days = ['Ø§ØªÙˆØ§Ø±', 'Ù¾ÛŒØ±', 'Ù…Ù†Ú¯Ù„', 'Ø¨Ø¯Ú¾', 'Ø¬Ù…Ø¹Ø±Ø§Øª', 'Ø¬Ù…Ø¹Û', 'ÛÙØªÛ'];

export default moment.defineLocale('ur', {
    months: months,
    monthsShort: months,
    weekdays: days,
    weekdaysShort: days,
    weekdaysMin: days,
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'ddddØŒ D MMMM YYYY HH:mm',
    },
    meridiemParse: /ØµØ¨Ø­|Ø´Ø§Ù…/,
    isPM: function (input) {
        return 'Ø´Ø§Ù…' === input;
    },
    meridiem: function (hour, minute, isLower) {
        if (hour < 12) {
            return 'ØµØ¨Ø­';
        }
        return 'Ø´Ø§Ù…';
    },
    calendar: {
        sameDay: '[Ø¢Ø¬ Ø¨ÙˆÙ‚Øª] LT',
        nextDay: '[Ú©Ù„ Ø¨ÙˆÙ‚Øª] LT',
        nextWeek: 'dddd [Ø¨ÙˆÙ‚Øª] LT',
        lastDay: '[Ú¯Ø°Ø´ØªÛ Ø±ÙˆØ² Ø¨ÙˆÙ‚Øª] LT',
        lastWeek: '[Ú¯Ø°Ø´ØªÛ] dddd [Ø¨ÙˆÙ‚Øª] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s Ø¨Ø¹Ø¯',
        past: '%s Ù‚Ø¨Ù„',
        s: 'Ú†Ù†Ø¯ Ø³ÛŒÚ©Ù†Úˆ',
        ss: '%d Ø³ÛŒÚ©Ù†Úˆ',
        m: 'Ø§ÛŒÚ© Ù…Ù†Ù¹',
        mm: '%d Ù…Ù†Ù¹',
        h: 'Ø§ÛŒÚ© Ú¯Ú¾Ù†Ù¹Û',
        hh: '%d Ú¯Ú¾Ù†Ù¹Û’',
        d: 'Ø§ÛŒÚ© Ø¯Ù†',
        dd: '%d Ø¯Ù†',
        M: 'Ø§ÛŒÚ© Ù…Ø§Û',
        MM: '%d Ù…Ø§Û',
        y: 'Ø§ÛŒÚ© Ø³Ø§Ù„',
        yy: '%d Ø³Ø§Ù„',
    },
    preparse: function (string) {
        return string.replace(/ØŒ/g, ',');
    },
    postformat: function (string) {
        return string.replace(/,/g, 'ØŒ');
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Uzbek Latin [uz-latn]
//! author : Rasulbek Mirzayev : github.com/Rasulbeeek

import moment from '../moment';

export default moment.defineLocale('uz-latn', {
    months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
        '_'
    ),
    monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
    weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
        '_'
    ),
    weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
    weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'D MMMM YYYY, dddd HH:mm',
    },
    calendar: {
        sameDay: '[Bugun soat] LT [da]',
        nextDay: '[Ertaga] LT [da]',
        nextWeek: 'dddd [kuni soat] LT [da]',
        lastDay: '[Kecha soat] LT [da]',
        lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Yaqin %s ichida',
        past: 'Bir necha %s oldin',
        s: 'soniya',
        ss: '%d soniya',
        m: 'bir daqiqa',
        mm: '%d daqiqa',
        h: 'bir soat',
        hh: '%d soat',
        d: 'bir kun',
        dd: '%d kun',
        M: 'bir oy',
        MM: '%d oy',
        y: 'bir yil',
        yy: '%d yil',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 7th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Uzbek [uz]
//! author : Sardor Muminov : https://github.com/muminoff

import moment from '../moment';

export default moment.defineLocale('uz', {
    months: 'ÑÐ½Ð²Ð°Ñ€_Ñ„ÐµÐ²Ñ€Ð°Ð»_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€_Ð¾ÐºÑ‚ÑÐ±Ñ€_Ð½Ð¾ÑÐ±Ñ€_Ð´ÐµÐºÐ°Ð±Ñ€'.split(
        '_'
    ),
    monthsShort: 'ÑÐ½Ð²_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½_Ð¸ÑŽÐ»_Ð°Ð²Ð³_ÑÐµÐ½_Ð¾ÐºÑ‚_Ð½Ð¾Ñ_Ð´ÐµÐº'.split('_'),
    weekdays: 'Ð¯ÐºÑˆÐ°Ð½Ð±Ð°_Ð”ÑƒÑˆÐ°Ð½Ð±Ð°_Ð¡ÐµÑˆÐ°Ð½Ð±Ð°_Ð§Ð¾Ñ€ÑˆÐ°Ð½Ð±Ð°_ÐŸÐ°Ð¹ÑˆÐ°Ð½Ð±Ð°_Ð–ÑƒÐ¼Ð°_Ð¨Ð°Ð½Ð±Ð°'.split('_'),
    weekdaysShort: 'Ð¯ÐºÑˆ_Ð”ÑƒÑˆ_Ð¡ÐµÑˆ_Ð§Ð¾Ñ€_ÐŸÐ°Ð¹_Ð–ÑƒÐ¼_Ð¨Ð°Ð½'.split('_'),
    weekdaysMin: 'Ð¯Ðº_Ð”Ñƒ_Ð¡Ðµ_Ð§Ð¾_ÐŸÐ°_Ð–Ñƒ_Ð¨Ð°'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'D MMMM YYYY, dddd HH:mm',
    },
    calendar: {
        sameDay: '[Ð‘ÑƒÐ³ÑƒÐ½ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
        nextDay: '[Ð­Ñ€Ñ‚Ð°Ð³Ð°] LT [Ð´Ð°]',
        nextWeek: 'dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
        lastDay: '[ÐšÐµÑ‡Ð° ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
        lastWeek: '[Ð£Ñ‚Ð³Ð°Ð½] dddd [ÐºÑƒÐ½Ð¸ ÑÐ¾Ð°Ñ‚] LT [Ð´Ð°]',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ð¯ÐºÐ¸Ð½ %s Ð¸Ñ‡Ð¸Ð´Ð°',
        past: 'Ð‘Ð¸Ñ€ Ð½ÐµÑ‡Ð° %s Ð¾Ð»Ð´Ð¸Ð½',
        s: 'Ñ„ÑƒÑ€ÑÐ°Ñ‚',
        ss: '%d Ñ„ÑƒÑ€ÑÐ°Ñ‚',
        m: 'Ð±Ð¸Ñ€ Ð´Ð°ÐºÐ¸ÐºÐ°',
        mm: '%d Ð´Ð°ÐºÐ¸ÐºÐ°',
        h: 'Ð±Ð¸Ñ€ ÑÐ¾Ð°Ñ‚',
        hh: '%d ÑÐ¾Ð°Ñ‚',
        d: 'Ð±Ð¸Ñ€ ÐºÑƒÐ½',
        dd: '%d ÐºÑƒÐ½',
        M: 'Ð±Ð¸Ñ€ Ð¾Ð¹',
        MM: '%d Ð¾Ð¹',
        y: 'Ð±Ð¸Ñ€ Ð¹Ð¸Ð»',
        yy: '%d Ð¹Ð¸Ð»',
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 7, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Vietnamese [vi]
//! author : Bang Nguyen : https://github.com/bangnk
//! author : Chien Kira : https://github.com/chienkira

import moment from '../moment';

export default moment.defineLocale('vi', {
    months: 'thÃ¡ng 1_thÃ¡ng 2_thÃ¡ng 3_thÃ¡ng 4_thÃ¡ng 5_thÃ¡ng 6_thÃ¡ng 7_thÃ¡ng 8_thÃ¡ng 9_thÃ¡ng 10_thÃ¡ng 11_thÃ¡ng 12'.split(
        '_'
    ),
    monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'chá»§ nháº­t_thá»© hai_thá»© ba_thá»© tÆ°_thá»© nÄƒm_thá»© sÃ¡u_thá»© báº£y'.split(
        '_'
    ),
    weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
    weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
    weekdaysParseExact: true,
    meridiemParse: /sa|ch/i,
    isPM: function (input) {
        return /^ch$/i.test(input);
    },
    meridiem: function (hours, minutes, isLower) {
        if (hours < 12) {
            return isLower ? 'sa' : 'SA';
        } else {
            return isLower ? 'ch' : 'CH';
        }
    },
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM [nÄƒm] YYYY',
        LLL: 'D MMMM [nÄƒm] YYYY HH:mm',
        LLLL: 'dddd, D MMMM [nÄƒm] YYYY HH:mm',
        l: 'DD/M/YYYY',
        ll: 'D MMM YYYY',
        lll: 'D MMM YYYY HH:mm',
        llll: 'ddd, D MMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[HÃ´m nay lÃºc] LT',
        nextDay: '[NgÃ y mai lÃºc] LT',
        nextWeek: 'dddd [tuáº§n tá»›i lÃºc] LT',
        lastDay: '[HÃ´m qua lÃºc] LT',
        lastWeek: 'dddd [tuáº§n trÆ°á»›c lÃºc] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: '%s tá»›i',
        past: '%s trÆ°á»›c',
        s: 'vÃ i giÃ¢y',
        ss: '%d giÃ¢y',
        m: 'má»™t phÃºt',
        mm: '%d phÃºt',
        h: 'má»™t giá»',
        hh: '%d giá»',
        d: 'má»™t ngÃ y',
        dd: '%d ngÃ y',
        w: 'má»™t tuáº§n',
        ww: '%d tuáº§n',
        M: 'má»™t thÃ¡ng',
        MM: '%d thÃ¡ng',
        y: 'má»™t nÄƒm',
        yy: '%d nÄƒm',
    },
    dayOfMonthOrdinalParse: /\d{1,2}/,
    ordinal: function (number) {
        return number;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Pseudo [x-pseudo]
//! author : Andrew Hood : https://github.com/andrewhood125

import moment from '../moment';

export default moment.defineLocale('x-pseudo', {
    months: 'J~Ã¡Ã±ÃºÃ¡~rÃ½_F~Ã©brÃº~Ã¡rÃ½_~MÃ¡rc~h_Ãp~rÃ­l_~MÃ¡Ã½_~JÃºÃ±Ã©~_JÃºl~Ã½_ÃÃº~gÃºst~_SÃ©p~tÃ©mb~Ã©r_Ã“~ctÃ³b~Ã©r_Ã‘~Ã³vÃ©m~bÃ©r_~DÃ©cÃ©~mbÃ©r'.split(
        '_'
    ),
    monthsShort: 'J~Ã¡Ã±_~FÃ©b_~MÃ¡r_~Ãpr_~MÃ¡Ã½_~JÃºÃ±_~JÃºl_~ÃÃºg_~SÃ©p_~Ã“ct_~Ã‘Ã³v_~DÃ©c'.split(
        '_'
    ),
    monthsParseExact: true,
    weekdays: 'S~ÃºÃ±dÃ¡~Ã½_MÃ³~Ã±dÃ¡Ã½~_TÃºÃ©~sdÃ¡Ã½~_WÃ©d~Ã±Ã©sd~Ã¡Ã½_T~hÃºrs~dÃ¡Ã½_~FrÃ­d~Ã¡Ã½_S~Ã¡tÃºr~dÃ¡Ã½'.split(
        '_'
    ),
    weekdaysShort: 'S~ÃºÃ±_~MÃ³Ã±_~TÃºÃ©_~WÃ©d_~ThÃº_~FrÃ­_~SÃ¡t'.split('_'),
    weekdaysMin: 'S~Ãº_MÃ³~_TÃº_~WÃ©_T~h_Fr~_SÃ¡'.split('_'),
    weekdaysParseExact: true,
    longDateFormat: {
        LT: 'HH:mm',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY HH:mm',
        LLLL: 'dddd, D MMMM YYYY HH:mm',
    },
    calendar: {
        sameDay: '[T~Ã³dÃ¡~Ã½ Ã¡t] LT',
        nextDay: '[T~Ã³mÃ³~rrÃ³~w Ã¡t] LT',
        nextWeek: 'dddd [Ã¡t] LT',
        lastDay: '[Ã~Ã©st~Ã©rdÃ¡~Ã½ Ã¡t] LT',
        lastWeek: '[L~Ã¡st] dddd [Ã¡t] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'Ã­~Ã± %s',
        past: '%s Ã¡~gÃ³',
        s: 'Ã¡ ~fÃ©w ~sÃ©cÃ³~Ã±ds',
        ss: '%d s~Ã©cÃ³Ã±~ds',
        m: 'Ã¡ ~mÃ­Ã±~ÃºtÃ©',
        mm: '%d m~Ã­Ã±Ãº~tÃ©s',
        h: 'Ã¡~Ã± hÃ³~Ãºr',
        hh: '%d h~Ã³Ãºrs',
        d: 'Ã¡ ~dÃ¡Ã½',
        dd: '%d d~Ã¡Ã½s',
        M: 'Ã¡ ~mÃ³Ã±~th',
        MM: '%d m~Ã³Ã±t~hs',
        y: 'Ã¡ ~Ã½Ã©Ã¡r',
        yy: '%d Ã½~Ã©Ã¡rs',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
    ordinal: function (number) {
        var b = number % 10,
            output =
                ~~((number % 100) / 10) === 1
                    ? 'th'
                    : b === 1
                    ? 'st'
                    : b === 2
                    ? 'nd'
                    : b === 3
                    ? 'rd'
                    : 'th';
        return number + output;
    },
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Yoruba Nigeria [yo]
//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe

import moment from '../moment';

export default moment.defineLocale('yo', {
    months: 'Sáº¹Ìráº¹Ì_EÌ€reÌ€leÌ€_áº¸ráº¹Ì€naÌ€_IÌ€gbeÌ_EÌ€bibi_OÌ€kuÌ€du_Agáº¹mo_OÌ€guÌn_Owewe_á»ŒÌ€waÌ€raÌ€_BeÌluÌ_á»ŒÌ€páº¹Ì€Ì€'.split(
        '_'
    ),
    monthsShort: 'Sáº¹Ìr_EÌ€rl_áº¸rn_IÌ€gb_EÌ€bi_OÌ€kuÌ€_Agáº¹_OÌ€guÌ_Owe_á»ŒÌ€waÌ€_BeÌl_á»ŒÌ€páº¹Ì€Ì€'.split('_'),
    weekdays: 'AÌ€iÌ€kuÌ_AjeÌ_IÌ€sáº¹Ìgun_á»Œjá»ÌruÌ_á»Œjá»Ìbá»_áº¸tiÌ€_AÌ€baÌmáº¹Ìta'.split('_'),
    weekdaysShort: 'AÌ€iÌ€k_AjeÌ_IÌ€sáº¹Ì_á»Œjr_á»Œjb_áº¸tiÌ€_AÌ€baÌ'.split('_'),
    weekdaysMin: 'AÌ€iÌ€_Aj_IÌ€s_á»Œr_á»Œb_áº¸t_AÌ€b'.split('_'),
    longDateFormat: {
        LT: 'h:mm A',
        LTS: 'h:mm:ss A',
        L: 'DD/MM/YYYY',
        LL: 'D MMMM YYYY',
        LLL: 'D MMMM YYYY h:mm A',
        LLLL: 'dddd, D MMMM YYYY h:mm A',
    },
    calendar: {
        sameDay: '[OÌ€niÌ€ ni] LT',
        nextDay: '[á»ŒÌ€la ni] LT',
        nextWeek: "dddd [á»Œsáº¹Ì€ toÌn'bá»] [ni] LT",
        lastDay: '[AÌ€na ni] LT',
        lastWeek: 'dddd [á»Œsáº¹Ì€ toÌlá»Ì] [ni] LT',
        sameElse: 'L',
    },
    relativeTime: {
        future: 'niÌ %s',
        past: '%s ká»jaÌ',
        s: 'iÌ€sáº¹juÌ aayaÌ die',
        ss: 'aayaÌ %d',
        m: 'iÌ€sáº¹juÌ kan',
        mm: 'iÌ€sáº¹juÌ %d',
        h: 'waÌkati kan',
        hh: 'waÌkati %d',
        d: 'á»já»Ì kan',
        dd: 'á»já»Ì %d',
        M: 'osuÌ€ kan',
        MM: 'osuÌ€ %d',
        y: 'á»duÌn kan',
        yy: 'á»duÌn %d',
    },
    dayOfMonthOrdinalParse: /á»já»Ì\s\d{1,2}/,
    ordinal: 'á»já»Ì %d',
    week: {
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Chinese (China) [zh-cn]
//! author : suupic : https://github.com/suupic
//! author : Zeno Zeng : https://github.com/zenozeng
//! author : uu109 : https://github.com/uu109

import moment from '../moment';

export default moment.defineLocale('zh-cn', {
    months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
        '_'
    ),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
    weekdaysShort: 'å‘¨æ—¥_å‘¨ä¸€_å‘¨äºŒ_å‘¨ä¸‰_å‘¨å››_å‘¨äº”_å‘¨å…­'.split('_'),
    weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥Ahç‚¹mmåˆ†',
        LLLL: 'YYYYå¹´MæœˆDæ—¥ddddAhç‚¹mmåˆ†',
        l: 'YYYY/M/D',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
    },
    meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
            return hour;
        } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
            return hour + 12;
        } else {
            // 'ä¸­åˆ'
            return hour >= 11 ? hour : hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'å‡Œæ™¨';
        } else if (hm < 900) {
            return 'æ—©ä¸Š';
        } else if (hm < 1130) {
            return 'ä¸Šåˆ';
        } else if (hm < 1230) {
            return 'ä¸­åˆ';
        } else if (hm < 1800) {
            return 'ä¸‹åˆ';
        } else {
            return 'æ™šä¸Š';
        }
    },
    calendar: {
        sameDay: '[ä»Šå¤©]LT',
        nextDay: '[æ˜Žå¤©]LT',
        nextWeek: function (now) {
            if (now.week() !== this.week()) {
                return '[ä¸‹]dddLT';
            } else {
                return '[æœ¬]dddLT';
            }
        },
        lastDay: '[æ˜¨å¤©]LT',
        lastWeek: function (now) {
            if (this.week() !== now.week()) {
                return '[ä¸Š]dddLT';
            } else {
                return '[æœ¬]dddLT';
            }
        },
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|å‘¨)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            case 'M':
                return number + 'æœˆ';
            case 'w':
            case 'W':
                return number + 'å‘¨';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%såŽ',
        past: '%så‰',
        s: 'å‡ ç§’',
        ss: '%d ç§’',
        m: '1 åˆ†é’Ÿ',
        mm: '%d åˆ†é’Ÿ',
        h: '1 å°æ—¶',
        hh: '%d å°æ—¶',
        d: '1 å¤©',
        dd: '%d å¤©',
        w: '1 å‘¨',
        ww: '%d å‘¨',
        M: '1 ä¸ªæœˆ',
        MM: '%d ä¸ªæœˆ',
        y: '1 å¹´',
        yy: '%d å¹´',
    },
    week: {
        // GB/T 7408-1994ã€Šæ•°æ®å…ƒå’Œäº¤æ¢æ ¼å¼Â·ä¿¡æ¯äº¤æ¢Â·æ—¥æœŸå’Œæ—¶é—´è¡¨ç¤ºæ³•ã€‹ä¸ŽISO 8601:1988ç­‰æ•ˆ
        dow: 1, // Monday is the first day of the week.
        doy: 4, // The week that contains Jan 4th is the first week of the year.
    },
});
//! moment.js locale configuration
//! locale : Chinese (Hong Kong) [zh-hk]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
//! author : Konstantin : https://github.com/skfd
//! author : Anthony : https://github.com/anthonylau

import moment from '../moment';

export default moment.defineLocale('zh-hk', {
    months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
        '_'
    ),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
    weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
    weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        l: 'YYYY/M/D',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
    },
    meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
            return hour;
        } else if (meridiem === 'ä¸­åˆ') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'å‡Œæ™¨';
        } else if (hm < 900) {
            return 'æ—©ä¸Š';
        } else if (hm < 1200) {
            return 'ä¸Šåˆ';
        } else if (hm === 1200) {
            return 'ä¸­åˆ';
        } else if (hm < 1800) {
            return 'ä¸‹åˆ';
        } else {
            return 'æ™šä¸Š';
        }
    },
    calendar: {
        sameDay: '[ä»Šå¤©]LT',
        nextDay: '[æ˜Žå¤©]LT',
        nextWeek: '[ä¸‹]ddddLT',
        lastDay: '[æ˜¨å¤©]LT',
        lastWeek: '[ä¸Š]ddddLT',
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            case 'M':
                return number + 'æœˆ';
            case 'w':
            case 'W':
                return number + 'é€±';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%så¾Œ',
        past: '%så‰',
        s: 'å¹¾ç§’',
        ss: '%d ç§’',
        m: '1 åˆ†é˜',
        mm: '%d åˆ†é˜',
        h: '1 å°æ™‚',
        hh: '%d å°æ™‚',
        d: '1 å¤©',
        dd: '%d å¤©',
        M: '1 å€‹æœˆ',
        MM: '%d å€‹æœˆ',
        y: '1 å¹´',
        yy: '%d å¹´',
    },
});
//! moment.js locale configuration
//! locale : Chinese (Macau) [zh-mo]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
//! author : Tan Yuanhong : https://github.com/le0tan

import moment from '../moment';

export default moment.defineLocale('zh-mo', {
    months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
        '_'
    ),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
    weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
    weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'DD/MM/YYYY',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        l: 'D/M/YYYY',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
    },
    meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
            return hour;
        } else if (meridiem === 'ä¸­åˆ') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'å‡Œæ™¨';
        } else if (hm < 900) {
            return 'æ—©ä¸Š';
        } else if (hm < 1130) {
            return 'ä¸Šåˆ';
        } else if (hm < 1230) {
            return 'ä¸­åˆ';
        } else if (hm < 1800) {
            return 'ä¸‹åˆ';
        } else {
            return 'æ™šä¸Š';
        }
    },
    calendar: {
        sameDay: '[ä»Šå¤©] LT',
        nextDay: '[æ˜Žå¤©] LT',
        nextWeek: '[ä¸‹]dddd LT',
        lastDay: '[æ˜¨å¤©] LT',
        lastWeek: '[ä¸Š]dddd LT',
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            case 'M':
                return number + 'æœˆ';
            case 'w':
            case 'W':
                return number + 'é€±';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%så…§',
        past: '%så‰',
        s: 'å¹¾ç§’',
        ss: '%d ç§’',
        m: '1 åˆ†é˜',
        mm: '%d åˆ†é˜',
        h: '1 å°æ™‚',
        hh: '%d å°æ™‚',
        d: '1 å¤©',
        dd: '%d å¤©',
        M: '1 å€‹æœˆ',
        MM: '%d å€‹æœˆ',
        y: '1 å¹´',
        yy: '%d å¹´',
    },
});
//! moment.js locale configuration
//! locale : Chinese (Taiwan) [zh-tw]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris

import moment from '../moment';

export default moment.defineLocale('zh-tw', {
    months: 'ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ'.split(
        '_'
    ),
    monthsShort: '1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ'.split(
        '_'
    ),
    weekdays: 'æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­'.split('_'),
    weekdaysShort: 'é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­'.split('_'),
    weekdaysMin: 'æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­'.split('_'),
    longDateFormat: {
        LT: 'HH:mm',
        LTS: 'HH:mm:ss',
        L: 'YYYY/MM/DD',
        LL: 'YYYYå¹´MæœˆDæ—¥',
        LLL: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        LLLL: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
        l: 'YYYY/M/D',
        ll: 'YYYYå¹´MæœˆDæ—¥',
        lll: 'YYYYå¹´MæœˆDæ—¥ HH:mm',
        llll: 'YYYYå¹´MæœˆDæ—¥dddd HH:mm',
    },
    meridiemParse: /å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,
    meridiemHour: function (hour, meridiem) {
        if (hour === 12) {
            hour = 0;
        }
        if (meridiem === 'å‡Œæ™¨' || meridiem === 'æ—©ä¸Š' || meridiem === 'ä¸Šåˆ') {
            return hour;
        } else if (meridiem === 'ä¸­åˆ') {
            return hour >= 11 ? hour : hour + 12;
        } else if (meridiem === 'ä¸‹åˆ' || meridiem === 'æ™šä¸Š') {
            return hour + 12;
        }
    },
    meridiem: function (hour, minute, isLower) {
        var hm = hour * 100 + minute;
        if (hm < 600) {
            return 'å‡Œæ™¨';
        } else if (hm < 900) {
            return 'æ—©ä¸Š';
        } else if (hm < 1130) {
            return 'ä¸Šåˆ';
        } else if (hm < 1230) {
            return 'ä¸­åˆ';
        } else if (hm < 1800) {
            return 'ä¸‹åˆ';
        } else {
            return 'æ™šä¸Š';
        }
    },
    calendar: {
        sameDay: '[ä»Šå¤©] LT',
        nextDay: '[æ˜Žå¤©] LT',
        nextWeek: '[ä¸‹]dddd LT',
        lastDay: '[æ˜¨å¤©] LT',
        lastWeek: '[ä¸Š]dddd LT',
        sameElse: 'L',
    },
    dayOfMonthOrdinalParse: /\d{1,2}(æ—¥|æœˆ|é€±)/,
    ordinal: function (number, period) {
        switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
                return number + 'æ—¥';
            case 'M':
                return number + 'æœˆ';
            case 'w':
            case 'W':
                return number + 'é€±';
            default:
                return number;
        }
    },
    relativeTime: {
        future: '%så¾Œ',
        past: '%så‰',
        s: 'å¹¾ç§’',
        ss: '%d ç§’',
        m: '1 åˆ†é˜',
        mm: '%d åˆ†é˜',
        h: '1 å°æ™‚',
        hh: '%d å°æ™‚',
        d: '1 å¤©',
        dd: '%d å¤©',
        M: '1 å€‹æœˆ',
        MM: '%d å€‹æœˆ',
        y: '1 å¹´',
        yy: '%d å¹´',
    },
});
//! moment.js
//! version : 2.29.1
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com

import { hooks as moment, setHookCallback } from './lib/utils/hooks';

moment.version = '2.29.1';

import {
    min,
    max,
    now,
    isMoment,
    momentPrototype as fn,
    createUTC as utc,
    createUnix as unix,
    createLocal as local,
    createInvalid as invalid,
    createInZone as parseZone,
} from './lib/moment/moment';

import { getCalendarFormat } from './lib/moment/calendar';

import {
    defineLocale,
    updateLocale,
    getSetGlobalLocale as locale,
    getLocale as localeData,
    listLocales as locales,
    listMonths as months,
    listMonthsShort as monthsShort,
    listWeekdays as weekdays,
    listWeekdaysMin as weekdaysMin,
    listWeekdaysShort as weekdaysShort,
} from './lib/locale/locale';

import {
    isDuration,
    createDuration as duration,
    getSetRelativeTimeRounding as relativeTimeRounding,
    getSetRelativeTimeThreshold as relativeTimeThreshold,
} from './lib/duration/duration';

import { normalizeUnits } from './lib/units/units';

import isDate from './lib/utils/is-date';

setHookCallback(local);

moment.fn = fn;
moment.min = min;
moment.max = max;
moment.now = now;
moment.utc = utc;
moment.unix = unix;
moment.months = months;
moment.isDate = isDate;
moment.locale = locale;
moment.invalid = invalid;
moment.duration = duration;
moment.isMoment = isMoment;
moment.weekdays = weekdays;
moment.parseZone = parseZone;
moment.localeData = localeData;
moment.isDuration = isDuration;
moment.monthsShort = monthsShort;
moment.weekdaysMin = weekdaysMin;
moment.defineLocale = defineLocale;
moment.updateLocale = updateLocale;
moment.locales = locales;
moment.weekdaysShort = weekdaysShort;
moment.normalizeUnits = normalizeUnits;
moment.relativeTimeRounding = relativeTimeRounding;
moment.relativeTimeThreshold = relativeTimeThreshold;
moment.calendarFormat = getCalendarFormat;
moment.prototype = fn;

// currently HTML5 input type only supports 24-hour formats
moment.HTML5_FMT = {
    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
    DATE: 'YYYY-MM-DD', // <input type="date" />
    TIME: 'HH:mm', // <input type="time" />
    TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
    TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
    WEEK: 'GGGG-[W]WW', // <input type="week" />
    MONTH: 'YYYY-MM', // <input type="month" />
};

export default moment;
/*jshint node:true */
module.exports = function(grunt) {
    'use strict';

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        complexity: {
            options: {
                errorsOnly: false,
                cyclomatic: 10,
                halstead: 30,
                maintainability: 85
            },
            generic: {
                src: [
                    'mousetrap.js'
                ]
            },
            plugins: {
                src: [
                    'plugins/**/*.js',
                    '!plugins/**/tests/**',
                    '!plugins/**/*.min.js'
                ]
            }
        }
    });

    grunt.loadNpmTasks('grunt-complexity');

    grunt.registerTask('default', [
        'complexity'
    ]);
};

                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

--- Exceptions to the Apache 2.0 License ----

As an exception, if, as a result of your compiling your source code, portions
of this Software are embedded into an Object form of such source code, you
may redistribute such embedded portions in such Object form without complying
with the conditions of Sections 4(a), 4(b) and 4(d) of the License.

In addition, if you combine or link compiled forms of this Software with
software that is licensed under the GPLv2 ("Combined Software") and if a
court of competent jurisdiction determines that the patent provision (Section
3), the indemnity provision (Section 9) or other Section of the License
conflicts with the conditions of the GPLv2, you may retroactively and
prospectively choose to deem waived or otherwise exclude such Section(s) of
the License, but only in their entirety and only with respect to the Combined
Software.
/*global define:false */
/**
 * Copyright 2012-2017 Craig Campbell
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Mousetrap is a simple keyboard shortcut library for Javascript with
 * no external dependencies
 *
 * @version 1.6.5
 * @url craig.is/killing/mice
 */
(function(window, document, undefined) {

    // Check if mousetrap is used inside browser, if not, return
    if (!window) {
        return;
    }

    /**
     * mapping of special keycodes to their corresponding keys
     *
     * everything in this dictionary cannot use keypress events
     * so it has to be here to map to the correct keycodes for
     * keyup/keydown events
     *
     * @type {Object}
     */
    var _MAP = {
        8: 'backspace',
        9: 'tab',
        13: 'enter',
        16: 'shift',
        17: 'ctrl',
        18: 'alt',
        20: 'capslock',
        27: 'esc',
        32: 'space',
        33: 'pageup',
        34: 'pagedown',
        35: 'end',
        36: 'home',
        37: 'left',
        38: 'up',
        39: 'right',
        40: 'down',
        45: 'ins',
        46: 'del',
        91: 'meta',
        93: 'meta',
        224: 'meta'
    };

    /**
     * mapping for special characters so they can support
     *
     * this dictionary is only used incase you want to bind a
     * keyup or keydown event to one of these keys
     *
     * @type {Object}
     */
    var _KEYCODE_MAP = {
        106: '*',
        107: '+',
        109: '-',
        110: '.',
        111 : '/',
        186: ';',
        187: '=',
        188: ',',
        189: '-',
        190: '.',
        191: '/',
        192: '`',
        219: '[',
        220: '\\',
        221: ']',
        222: '\''
    };

    /**
     * this is a mapping of keys that require shift on a US keypad
     * back to the non shift equivelents
     *
     * this is so you can use keyup events with these keys
     *
     * note that this will only work reliably on US keyboards
     *
     * @type {Object}
     */
    var _SHIFT_MAP = {
        '~': '`',
        '!': '1',
        '@': '2',
        '#': '3',
        '$': '4',
        '%': '5',
        '^': '6',
        '&': '7',
        '*': '8',
        '(': '9',
        ')': '0',
        '_': '-',
        '+': '=',
        ':': ';',
        '\"': '\'',
        '<': ',',
        '>': '.',
        '?': '/',
        '|': '\\'
    };

    /**
     * this is a list of special strings you can use to map
     * to modifier keys when you specify your keyboard shortcuts
     *
     * @type {Object}
     */
    var _SPECIAL_ALIASES = {
        'option': 'alt',
        'command': 'meta',
        'return': 'enter',
        'escape': 'esc',
        'plus': '+',
        'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'
    };

    /**
     * variable to store the flipped version of _MAP from above
     * needed to check if we should use keypress or not when no action
     * is specified
     *
     * @type {Object|undefined}
     */
    var _REVERSE_MAP;

    /**
     * loop through the f keys, f1 to f19 and add them to the map
     * programatically
     */
    for (var i = 1; i < 20; ++i) {
        _MAP[111 + i] = 'f' + i;
    }

    /**
     * loop through to map numbers on the numeric keypad
     */
    for (i = 0; i <= 9; ++i) {

        // This needs to use a string cause otherwise since 0 is falsey
        // mousetrap will never fire for numpad 0 pressed as part of a keydown
        // event.
        //
        // @see https://github.com/ccampbell/mousetrap/pull/258
        _MAP[i + 96] = i.toString();
    }

    /**
     * cross browser add event method
     *
     * @param {Element|HTMLDocument} object
     * @param {string} type
     * @param {Function} callback
     * @returns void
     */
    function _addEvent(object, type, callback) {
        if (object.addEventListener) {
            object.addEventListener(type, callback, false);
            return;
        }

        object.attachEvent('on' + type, callback);
    }

    /**
     * takes the event and returns the key character
     *
     * @param {Event} e
     * @return {string}
     */
    function _characterFromEvent(e) {

        // for keypress events we should return the character as is
        if (e.type == 'keypress') {
            var character = String.fromCharCode(e.which);

            // if the shift key is not pressed then it is safe to assume
            // that we want the character to be lowercase.  this means if
            // you accidentally have caps lock on then your key bindings
            // will continue to work
            //
            // the only side effect that might not be desired is if you
            // bind something like 'A' cause you want to trigger an
            // event when capital A is pressed caps lock will no longer
            // trigger the event.  shift+a will though.
            if (!e.shiftKey) {
                character = character.toLowerCase();
            }

            return character;
        }

        // for non keypress events the special maps are needed
        if (_MAP[e.which]) {
            return _MAP[e.which];
        }

        if (_KEYCODE_MAP[e.which]) {
            return _KEYCODE_MAP[e.which];
        }

        // if it is not in the special map

        // with keydown and keyup events the character seems to always
        // come in as an uppercase character whether you are pressing shift
        // or not.  we should make sure it is always lowercase for comparisons
        return String.fromCharCode(e.which).toLowerCase();
    }

    /**
     * checks if two arrays are equal
     *
     * @param {Array} modifiers1
     * @param {Array} modifiers2
     * @returns {boolean}
     */
    function _modifiersMatch(modifiers1, modifiers2) {
        return modifiers1.sort().join(',') === modifiers2.sort().join(',');
    }

    /**
     * takes a key event and figures out what the modifiers are
     *
     * @param {Event} e
     * @returns {Array}
     */
    function _eventModifiers(e) {
        var modifiers = [];

        if (e.shiftKey) {
            modifiers.push('shift');
        }

        if (e.altKey) {
            modifiers.push('alt');
        }

        if (e.ctrlKey) {
            modifiers.push('ctrl');
        }

        if (e.metaKey) {
            modifiers.push('meta');
        }

        return modifiers;
    }

    /**
     * prevents default for this event
     *
     * @param {Event} e
     * @returns void
     */
    function _preventDefault(e) {
        if (e.preventDefault) {
            e.preventDefault();
            return;
        }

        e.returnValue = false;
    }

    /**
     * stops propogation for this event
     *
     * @param {Event} e
     * @returns void
     */
    function _stopPropagation(e) {
        if (e.stopPropagation) {
            e.stopPropagation();
            return;
        }

        e.cancelBubble = true;
    }

    /**
     * determines if the keycode specified is a modifier key or not
     *
     * @param {string} key
     * @returns {boolean}
     */
    function _isModifier(key) {
        return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';
    }

    /**
     * reverses the map lookup so that we can look for specific keys
     * to see what can and can't use keypress
     *
     * @return {Object}
     */
    function _getReverseMap() {
        if (!_REVERSE_MAP) {
            _REVERSE_MAP = {};
            for (var key in _MAP) {

                // pull out the numeric keypad from here cause keypress should
                // be able to detect the keys from the character
                if (key > 95 && key < 112) {
                    continue;
                }

                if (_MAP.hasOwnProperty(key)) {
                    _REVERSE_MAP[_MAP[key]] = key;
                }
            }
        }
        return _REVERSE_MAP;
    }

    /**
     * picks the best action based on the key combination
     *
     * @param {string} key - character for key
     * @param {Array} modifiers
     * @param {string=} action passed in
     */
    function _pickBestAction(key, modifiers, action) {

        // if no action was picked in we should try to pick the one
        // that we think would work best for this key
        if (!action) {
            action = _getReverseMap()[key] ? 'keydown' : 'keypress';
        }

        // modifier keys don't work as expected with keypress,
        // switch to keydown
        if (action == 'keypress' && modifiers.length) {
            action = 'keydown';
        }

        return action;
    }

    /**
     * Converts from a string key combination to an array
     *
     * @param  {string} combination like "command+shift+l"
     * @return {Array}
     */
    function _keysFromString(combination) {
        if (combination === '+') {
            return ['+'];
        }

        combination = combination.replace(/\+{2}/g, '+plus');
        return combination.split('+');
    }

    /**
     * Gets info for a specific key combination
     *
     * @param  {string} combination key combination ("command+s" or "a" or "*")
     * @param  {string=} action
     * @returns {Object}
     */
    function _getKeyInfo(combination, action) {
        var keys;
        var key;
        var i;
        var modifiers = [];

        // take the keys from this pattern and figure out what the actual
        // pattern is all about
        keys = _keysFromString(combination);

        for (i = 0; i < keys.length; ++i) {
            key = keys[i];

            // normalize key names
            if (_SPECIAL_ALIASES[key]) {
                key = _SPECIAL_ALIASES[key];
            }

            // if this is not a keypress event then we should
            // be smart about using shift keys
            // this will only work for US keyboards however
            if (action && action != 'keypress' && _SHIFT_MAP[key]) {
                key = _SHIFT_MAP[key];
                modifiers.push('shift');
            }

            // if this key is a modifier then add it to the list of modifiers
            if (_isModifier(key)) {
                modifiers.push(key);
            }
        }

        // depending on what the key combination is
        // we will try to pick the best event for it
        action = _pickBestAction(key, modifiers, action);

        return {
            key: key,
            modifiers: modifiers,
            action: action
        };
    }

    function _belongsTo(element, ancestor) {
        if (element === null || element === document) {
            return false;
        }

        if (element === ancestor) {
            return true;
        }

        return _belongsTo(element.parentNode, ancestor);
    }

    function Mousetrap(targetElement) {
        var self = this;

        targetElement = targetElement || document;

        if (!(self instanceof Mousetrap)) {
            return new Mousetrap(targetElement);
        }

        /**
         * element to attach key events to
         *
         * @type {Element}
         */
        self.target = targetElement;

        /**
         * a list of all the callbacks setup via Mousetrap.bind()
         *
         * @type {Object}
         */
        self._callbacks = {};

        /**
         * direct map of string combinations to callbacks used for trigger()
         *
         * @type {Object}
         */
        self._directMap = {};

        /**
         * keeps track of what level each sequence is at since multiple
         * sequences can start out with the same sequence
         *
         * @type {Object}
         */
        var _sequenceLevels = {};

        /**
         * variable to store the setTimeout call
         *
         * @type {null|number}
         */
        var _resetTimer;

        /**
         * temporary state where we will ignore the next keyup
         *
         * @type {boolean|string}
         */
        var _ignoreNextKeyup = false;

        /**
         * temporary state where we will ignore the next keypress
         *
         * @type {boolean}
         */
        var _ignoreNextKeypress = false;

        /**
         * are we currently inside of a sequence?
         * type of action ("keyup" or "keydown" or "keypress") or false
         *
         * @type {boolean|string}
         */
        var _nextExpectedAction = false;

        /**
         * resets all sequence counters except for the ones passed in
         *
         * @param {Object} doNotReset
         * @returns void
         */
        function _resetSequences(doNotReset) {
            doNotReset = doNotReset || {};

            var activeSequences = false,
                key;

            for (key in _sequenceLevels) {
                if (doNotReset[key]) {
                    activeSequences = true;
                    continue;
                }
                _sequenceLevels[key] = 0;
            }

            if (!activeSequences) {
                _nextExpectedAction = false;
            }
        }

        /**
         * finds all callbacks that match based on the keycode, modifiers,
         * and action
         *
         * @param {string} character
         * @param {Array} modifiers
         * @param {Event|Object} e
         * @param {string=} sequenceName - name of the sequence we are looking for
         * @param {string=} combination
         * @param {number=} level
         * @returns {Array}
         */
        function _getMatches(character, modifiers, e, sequenceName, combination, level) {
            var i;
            var callback;
            var matches = [];
            var action = e.type;

            // if there are no events related to this keycode
            if (!self._callbacks[character]) {
                return [];
            }

            // if a modifier key is coming up on its own we should allow it
            if (action == 'keyup' && _isModifier(character)) {
                modifiers = [character];
            }

            // loop through all callbacks for the key that was pressed
            // and see if any of them match
            for (i = 0; i < self._callbacks[character].length; ++i) {
                callback = self._callbacks[character][i];

                // if a sequence name is not specified, but this is a sequence at
                // the wrong level then move onto the next match
                if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {
                    continue;
                }

                // if the action we are looking for doesn't match the action we got
                // then we should keep going
                if (action != callback.action) {
                    continue;
                }

                // if this is a keypress event and the meta key and control key
                // are not pressed that means that we need to only look at the
                // character, otherwise check the modifiers as well
                //
                // chrome will not fire a keypress if meta or control is down
                // safari will fire a keypress if meta or meta+shift is down
                // firefox will fire a keypress if meta or control is down
                if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {

                    // when you bind a combination or sequence a second time it
                    // should overwrite the first one.  if a sequenceName or
                    // combination is specified in this call it does just that
                    //
                    // @todo make deleting its own method?
                    var deleteCombo = !sequenceName && callback.combo == combination;
                    var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;
                    if (deleteCombo || deleteSequence) {
                        self._callbacks[character].splice(i, 1);
                    }

                    matches.push(callback);
                }
            }

            return matches;
        }

        /**
         * actually calls the callback function
         *
         * if your callback function returns false this will use the jquery
         * convention - prevent default and stop propogation on the event
         *
         * @param {Function} callback
         * @param {Event} e
         * @returns void
         */
        function _fireCallback(callback, e, combo, sequence) {

            // if this event should not happen stop here
            if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {
                return;
            }

            if (callback(e, combo) === false) {
                _preventDefault(e);
                _stopPropagation(e);
            }
        }

        /**
         * handles a character key event
         *
         * @param {string} character
         * @param {Array} modifiers
         * @param {Event} e
         * @returns void
         */
        self._handleKey = function(character, modifiers, e) {
            var callbacks = _getMatches(character, modifiers, e);
            var i;
            var doNotReset = {};
            var maxLevel = 0;
            var processedSequenceCallback = false;

            // Calculate the maxLevel for sequences so we can only execute the longest callback sequence
            for (i = 0; i < callbacks.length; ++i) {
                if (callbacks[i].seq) {
                    maxLevel = Math.max(maxLevel, callbacks[i].level);
                }
            }

            // loop through matching callbacks for this key event
            for (i = 0; i < callbacks.length; ++i) {

                // fire for all sequence callbacks
                // this is because if for example you have multiple sequences
                // bound such as "g i" and "g t" they both need to fire the
                // callback for matching g cause otherwise you can only ever
                // match the first one
                if (callbacks[i].seq) {

                    // only fire callbacks for the maxLevel to prevent
                    // subsequences from also firing
                    //
                    // for example 'a option b' should not cause 'option b' to fire
                    // even though 'option b' is part of the other sequence
                    //
                    // any sequences that do not match here will be discarded
                    // below by the _resetSequences call
                    if (callbacks[i].level != maxLevel) {
                        continue;
                    }

                    processedSequenceCallback = true;

                    // keep a list of which sequences were matches for later
                    doNotReset[callbacks[i].seq] = 1;
                    _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);
                    continue;
                }

                // if there were no sequence matches but we are still here
                // that means this is a regular match so we should fire that
                if (!processedSequenceCallback) {
                    _fireCallback(callbacks[i].callback, e, callbacks[i].combo);
                }
            }

            // if the key you pressed matches the type of sequence without
            // being a modifier (ie "keyup" or "keypress") then we should
            // reset all sequences that were not matched by this event
            //
            // this is so, for example, if you have the sequence "h a t" and you
            // type "h e a r t" it does not match.  in this case the "e" will
            // cause the sequence to reset
            //
            // modifier keys are ignored because you can have a sequence
            // that contains modifiers such as "enter ctrl+space" and in most
            // cases the modifier key will be pressed before the next key
            //
            // also if you have a sequence such as "ctrl+b a" then pressing the
            // "b" key will trigger a "keypress" and a "keydown"
            //
            // the "keydown" is expected when there is a modifier, but the
            // "keypress" ends up matching the _nextExpectedAction since it occurs
            // after and that causes the sequence to reset
            //
            // we ignore keypresses in a sequence that directly follow a keydown
            // for the same character
            var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;
            if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {
                _resetSequences(doNotReset);
            }

            _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';
        };

        /**
         * handles a keydown event
         *
         * @param {Event} e
         * @returns void
         */
        function _handleKeyEvent(e) {

            // normalize e.which for key events
            // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion
            if (typeof e.which !== 'number') {
                e.which = e.keyCode;
            }

            var character = _characterFromEvent(e);

            // no character found then stop
            if (!character) {
                return;
            }

            // need to use === for the character check because the character can be 0
            if (e.type == 'keyup' && _ignoreNextKeyup === character) {
                _ignoreNextKeyup = false;
                return;
            }

            self.handleKey(character, _eventModifiers(e), e);
        }

        /**
         * called to set a 1 second timeout on the specified sequence
         *
         * this is so after each key press in the sequence you have 1 second
         * to press the next key before you have to start over
         *
         * @returns void
         */
        function _resetSequenceTimer() {
            clearTimeout(_resetTimer);
            _resetTimer = setTimeout(_resetSequences, 1000);
        }

        /**
         * binds a key sequence to an event
         *
         * @param {string} combo - combo specified in bind call
         * @param {Array} keys
         * @param {Function} callback
         * @param {string=} action
         * @returns void
         */
        function _bindSequence(combo, keys, callback, action) {

            // start off by adding a sequence level record for this combination
            // and setting the level to 0
            _sequenceLevels[combo] = 0;

            /**
             * callback to increase the sequence level for this sequence and reset
             * all other sequences that were active
             *
             * @param {string} nextAction
             * @returns {Function}
             */
            function _increaseSequence(nextAction) {
                return function() {
                    _nextExpectedAction = nextAction;
                    ++_sequenceLevels[combo];
                    _resetSequenceTimer();
                };
            }

            /**
             * wraps the specified callback inside of another function in order
             * to reset all sequence counters as soon as this sequence is done
             *
             * @param {Event} e
             * @returns void
             */
            function _callbackAndReset(e) {
                _fireCallback(callback, e, combo);

                // we should ignore the next key up if the action is key down
                // or keypress.  this is so if you finish a sequence and
                // release the key the final key will not trigger a keyup
                if (action !== 'keyup') {
                    _ignoreNextKeyup = _characterFromEvent(e);
                }

                // weird race condition if a sequence ends with the key
                // another sequence begins with
                setTimeout(_resetSequences, 10);
            }

            // loop through keys one at a time and bind the appropriate callback
            // function.  for any key leading up to the final one it should
            // increase the sequence. after the final, it should reset all sequences
            //
            // if an action is specified in the original bind call then that will
            // be used throughout.  otherwise we will pass the action that the
            // next key in the sequence should match.  this allows a sequence
            // to mix and match keypress and keydown events depending on which
            // ones are better suited to the key provided
            for (var i = 0; i < keys.length; ++i) {
                var isFinal = i + 1 === keys.length;
                var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);
                _bindSingle(keys[i], wrappedCallback, action, combo, i);
            }
        }

        /**
         * binds a single keyboard combination
         *
         * @param {string} combination
         * @param {Function} callback
         * @param {string=} action
         * @param {string=} sequenceName - name of sequence if part of sequence
         * @param {number=} level - what part of the sequence the command is
         * @returns void
         */
        function _bindSingle(combination, callback, action, sequenceName, level) {

            // store a direct mapped reference for use with Mousetrap.trigger
            self._directMap[combination + ':' + action] = callback;

            // make sure multiple spaces in a row become a single space
            combination = combination.replace(/\s+/g, ' ');

            var sequence = combination.split(' ');
            var info;

            // if this pattern is a sequence of keys then run through this method
            // to reprocess each pattern one key at a time
            if (sequence.length > 1) {
                _bindSequence(combination, sequence, callback, action);
                return;
            }

            info = _getKeyInfo(combination, action);

            // make sure to initialize array if this is the first time
            // a callback is added for this key
            self._callbacks[info.key] = self._callbacks[info.key] || [];

            // remove an existing match if there is one
            _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);

            // add this call back to the array
            // if it is a sequence put it at the beginning
            // if not put it at the end
            //
            // this is important because the way these are processed expects
            // the sequence ones to come first
            self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({
                callback: callback,
                modifiers: info.modifiers,
                action: info.action,
                seq: sequenceName,
                level: level,
                combo: combination
            });
        }

        /**
         * binds multiple combinations to the same callback
         *
         * @param {Array} combinations
         * @param {Function} callback
         * @param {string|undefined} action
         * @returns void
         */
        self._bindMultiple = function(combinations, callback, action) {
            for (var i = 0; i < combinations.length; ++i) {
                _bindSingle(combinations[i], callback, action);
            }
        };

        // start!
        _addEvent(targetElement, 'keypress', _handleKeyEvent);
        _addEvent(targetElement, 'keydown', _handleKeyEvent);
        _addEvent(targetElement, 'keyup', _handleKeyEvent);
    }

    /**
     * binds an event to mousetrap
     *
     * can be a single key, a combination of keys separated with +,
     * an array of keys, or a sequence of keys separated by spaces
     *
     * be sure to list the modifier keys first to make sure that the
     * correct key ends up getting bound (the last key in the pattern)
     *
     * @param {string|Array} keys
     * @param {Function} callback
     * @param {string=} action - 'keypress', 'keydown', or 'keyup'
     * @returns void
     */
    Mousetrap.prototype.bind = function(keys, callback, action) {
        var self = this;
        keys = keys instanceof Array ? keys : [keys];
        self._bindMultiple.call(self, keys, callback, action);
        return self;
    };

    /**
     * unbinds an event to mousetrap
     *
     * the unbinding sets the callback function of the specified key combo
     * to an empty function and deletes the corresponding key in the
     * _directMap dict.
     *
     * TODO: actually remove this from the _callbacks dictionary instead
     * of binding an empty function
     *
     * the keycombo+action has to be exactly the same as
     * it was defined in the bind method
     *
     * @param {string|Array} keys
     * @param {string} action
     * @returns void
     */
    Mousetrap.prototype.unbind = function(keys, action) {
        var self = this;
        return self.bind.call(self, keys, function() {}, action);
    };

    /**
     * triggers an event that has already been bound
     *
     * @param {string} keys
     * @param {string=} action
     * @returns void
     */
    Mousetrap.prototype.trigger = function(keys, action) {
        var self = this;
        if (self._directMap[keys + ':' + action]) {
            self._directMap[keys + ':' + action]({}, keys);
        }
        return self;
    };

    /**
     * resets the library back to its initial state.  this is useful
     * if you want to clear out the current keyboard shortcuts and bind
     * new ones - for example if you switch to another page
     *
     * @returns void
     */
    Mousetrap.prototype.reset = function() {
        var self = this;
        self._callbacks = {};
        self._directMap = {};
        return self;
    };

    /**
     * should we stop this event before firing off callbacks
     *
     * @param {Event} e
     * @param {Element} element
     * @return {boolean}
     */
    Mousetrap.prototype.stopCallback = function(e, element) {
        var self = this;

        // if the element has the class "mousetrap" then no need to stop
        if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {
            return false;
        }

        if (_belongsTo(element, self.target)) {
            return false;
        }

        // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,
        // not the initial event target in the shadow tree. Note that not all events cross the
        // shadow boundary.
        // For shadow trees with `mode: 'open'`, the initial event target is the first element in
        // the eventâ€™s composed path. For shadow trees with `mode: 'closed'`, the initial event
        // target cannot be obtained.
        if ('composedPath' in e && typeof e.composedPath === 'function') {
            // For open shadow trees, update `element` so that the following check works.
            var initialEventTarget = e.composedPath()[0];
            if (initialEventTarget !== e.target) {
                element = initialEventTarget;
            }
        }

        // stop for input, select, and textarea
        return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;
    };

    /**
     * exposes _handleKey publicly so it can be overwritten by extensions
     */
    Mousetrap.prototype.handleKey = function() {
        var self = this;
        return self._handleKey.apply(self, arguments);
    };

    /**
     * allow custom key mappings
     */
    Mousetrap.addKeycodes = function(object) {
        for (var key in object) {
            if (object.hasOwnProperty(key)) {
                _MAP[key] = object[key];
            }
        }
        _REVERSE_MAP = null;
    };

    /**
     * Init the global mousetrap functions
     *
     * This method is needed to allow the global mousetrap functions to work
     * now that mousetrap is a constructor function.
     */
    Mousetrap.init = function() {
        var documentMousetrap = Mousetrap(document);
        for (var method in documentMousetrap) {
            if (method.charAt(0) !== '_') {
                Mousetrap[method] = (function(method) {
                    return function() {
                        return documentMousetrap[method].apply(documentMousetrap, arguments);
                    };
                } (method));
            }
        }
    };

    Mousetrap.init();

    // expose mousetrap to the global object
    window.Mousetrap = Mousetrap;

    // expose as a common js module
    if (typeof module !== 'undefined' && module.exports) {
        module.exports = Mousetrap;
    }

    // expose mousetrap as an AMD module
    if (typeof define === 'function' && define.amd) {
        define(function() {
            return Mousetrap;
        });
    }
}) (typeof window !== 'undefined' ? window : null, typeof  window !== 'undefined' ? document : null);
/* mousetrap v1.6.5 craig.is/killing/mice */
(function(q,u,c){function v(a,b,g){a.addEventListener?a.addEventListener(b,g,!1):a.attachEvent("on"+b,g)}function z(a){if("keypress"==a.type){var b=String.fromCharCode(a.which);a.shiftKey||(b=b.toLowerCase());return b}return n[a.which]?n[a.which]:r[a.which]?r[a.which]:String.fromCharCode(a.which).toLowerCase()}function F(a){var b=[];a.shiftKey&&b.push("shift");a.altKey&&b.push("alt");a.ctrlKey&&b.push("ctrl");a.metaKey&&b.push("meta");return b}function w(a){return"shift"==a||"ctrl"==a||"alt"==a||
"meta"==a}function A(a,b){var g,d=[];var e=a;"+"===e?e=["+"]:(e=e.replace(/\+{2}/g,"+plus"),e=e.split("+"));for(g=0;g<e.length;++g){var m=e[g];B[m]&&(m=B[m]);b&&"keypress"!=b&&C[m]&&(m=C[m],d.push("shift"));w(m)&&d.push(m)}e=m;g=b;if(!g){if(!p){p={};for(var c in n)95<c&&112>c||n.hasOwnProperty(c)&&(p[n[c]]=c)}g=p[e]?"keydown":"keypress"}"keypress"==g&&d.length&&(g="keydown");return{key:m,modifiers:d,action:g}}function D(a,b){return null===a||a===u?!1:a===b?!0:D(a.parentNode,b)}function d(a){function b(a){a=
a||{};var b=!1,l;for(l in p)a[l]?b=!0:p[l]=0;b||(x=!1)}function g(a,b,t,f,g,d){var l,E=[],h=t.type;if(!k._callbacks[a])return[];"keyup"==h&&w(a)&&(b=[a]);for(l=0;l<k._callbacks[a].length;++l){var c=k._callbacks[a][l];if((f||!c.seq||p[c.seq]==c.level)&&h==c.action){var e;(e="keypress"==h&&!t.metaKey&&!t.ctrlKey)||(e=c.modifiers,e=b.sort().join(",")===e.sort().join(","));e&&(e=f&&c.seq==f&&c.level==d,(!f&&c.combo==g||e)&&k._callbacks[a].splice(l,1),E.push(c))}}return E}function c(a,b,c,f){k.stopCallback(b,
b.target||b.srcElement,c,f)||!1!==a(b,c)||(b.preventDefault?b.preventDefault():b.returnValue=!1,b.stopPropagation?b.stopPropagation():b.cancelBubble=!0)}function e(a){"number"!==typeof a.which&&(a.which=a.keyCode);var b=z(a);b&&("keyup"==a.type&&y===b?y=!1:k.handleKey(b,F(a),a))}function m(a,g,t,f){function h(c){return function(){x=c;++p[a];clearTimeout(q);q=setTimeout(b,1E3)}}function l(g){c(t,g,a);"keyup"!==f&&(y=z(g));setTimeout(b,10)}for(var d=p[a]=0;d<g.length;++d){var e=d+1===g.length?l:h(f||
A(g[d+1]).action);n(g[d],e,f,a,d)}}function n(a,b,c,f,d){k._directMap[a+":"+c]=b;a=a.replace(/\s+/g," ");var e=a.split(" ");1<e.length?m(a,e,b,c):(c=A(a,c),k._callbacks[c.key]=k._callbacks[c.key]||[],g(c.key,c.modifiers,{type:c.action},f,a,d),k._callbacks[c.key][f?"unshift":"push"]({callback:b,modifiers:c.modifiers,action:c.action,seq:f,level:d,combo:a}))}var k=this;a=a||u;if(!(k instanceof d))return new d(a);k.target=a;k._callbacks={};k._directMap={};var p={},q,y=!1,r=!1,x=!1;k._handleKey=function(a,
d,e){var f=g(a,d,e),h;d={};var k=0,l=!1;for(h=0;h<f.length;++h)f[h].seq&&(k=Math.max(k,f[h].level));for(h=0;h<f.length;++h)f[h].seq?f[h].level==k&&(l=!0,d[f[h].seq]=1,c(f[h].callback,e,f[h].combo,f[h].seq)):l||c(f[h].callback,e,f[h].combo);f="keypress"==e.type&&r;e.type!=x||w(a)||f||b(d);r=l&&"keydown"==e.type};k._bindMultiple=function(a,b,c){for(var d=0;d<a.length;++d)n(a[d],b,c)};v(a,"keypress",e);v(a,"keydown",e);v(a,"keyup",e)}if(q){var n={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",
18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},r={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},C={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},B={option:"alt",command:"meta","return":"enter",
escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},p;for(c=1;20>c;++c)n[111+c]="f"+c;for(c=0;9>=c;++c)n[c+96]=c.toString();d.prototype.bind=function(a,b,c){a=a instanceof Array?a:[a];this._bindMultiple.call(this,a,b,c);return this};d.prototype.unbind=function(a,b){return this.bind.call(this,a,function(){},b)};d.prototype.trigger=function(a,b){if(this._directMap[a+":"+b])this._directMap[a+":"+b]({},a);return this};d.prototype.reset=function(){this._callbacks={};
this._directMap={};return this};d.prototype.stopCallback=function(a,b){if(-1<(" "+b.className+" ").indexOf(" mousetrap ")||D(b,this.target))return!1;if("composedPath"in a&&"function"===typeof a.composedPath){var c=a.composedPath()[0];c!==a.target&&(b=c)}return"INPUT"==b.tagName||"SELECT"==b.tagName||"TEXTAREA"==b.tagName||b.isContentEditable};d.prototype.handleKey=function(){return this._handleKey.apply(this,arguments)};d.addKeycodes=function(a){for(var b in a)a.hasOwnProperty(b)&&(n[b]=a[b]);p=null};
d.init=function(){var a=d(u),b;for(b in a)"_"!==b.charAt(0)&&(d[b]=function(b){return function(){return a[b].apply(a,arguments)}}(b))};d.init();q.Mousetrap=d;"undefined"!==typeof module&&module.exports&&(module.exports=d);"function"===typeof define&&define.amd&&define(function(){return d})}})("undefined"!==typeof window?window:null,"undefined"!==typeof window?document:null);
{
    "settings":
    {
        "detect_indentation": true,
        "ensure_newline_at_eof_on_save": true,
        "tab_size": 4,
        "translate_tabs_to_spaces": true,
        "trim_automatic_white_space": false,
        "trim_trailing_white_space_on_save": true,
    },
    "folders":
    [
        {
            "path": "./",
            "folder_exclude_patterns": ["bin", "coverage", "node_modules"],
            "file_exclude_patterns": ["*.sublime-workspace"]
        }
    ]
}

{
  "name": "mousetrap",
  "version": "1.6.5",
  "description": "Simple library for handling keyboard shortcuts",
  "main": "mousetrap.js",
  "directories": {
    "test": "tests"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/ccampbell/mousetrap.git"
  },
  "author": "Craig Campbell",
  "license": "Apache-2.0 WITH LLVM-exception",
  "readmeFilename": "README.md",
  "devDependencies": {
    "chai": "^4.2.0",
    "grunt": "~1.0.3",
    "grunt-complexity": "~1.1.0",
    "jsdom": "^13.1.0",
    "jsdom-global": "^3.0.2",
    "mocha": "^5.2.0",
    "sinon": "^7.2.2"
  }
}/**
 * Overwrites default Mousetrap.bind method to optionally accept
 * an object to bind multiple key events in a single call
 *
 * You can pass it in like:
 *
 * Mousetrap.bind({
 *     'a': function() { console.log('a'); },
 *     'b': function() { console.log('b'); }
 * });
 *
 * And can optionally pass in 'keypress', 'keydown', or 'keyup'
 * as a second argument
 *
 */
/* global Mousetrap:true */
(function(Mousetrap) {
    var _oldBind = Mousetrap.prototype.bind;
    var args;

    Mousetrap.prototype.bind = function() {
        var self = this;
        args = arguments;

        // normal call
        if (typeof args[0] == 'string' || args[0] instanceof Array) {
            return _oldBind.call(self, args[0], args[1], args[2]);
        }

        // object passed in
        for (var key in args[0]) {
            if (args[0].hasOwnProperty(key)) {
                _oldBind.call(self, key, args[0][key], args[1]);
            }
        }
    };

    Mousetrap.init();
}) (Mousetrap);
(function(b){var c=b.prototype.bind,a;b.prototype.bind=function(){a=arguments;if("string"==typeof a[0]||a[0]instanceof Array)return c.call(this,a[0],a[1],a[2]);for(var b in a[0])a[0].hasOwnProperty(b)&&c.call(this,b,a[0][b],a[1])};b.init()})(Mousetrap);
# Bind Dictionary

This extension overwrites the default bind behavior and allows you to bind multiple combinations in a single bind call.

Usage looks like:

```javascript
Mousetrap.bind({
    'a': function() { console.log('a'); },
    'b': function() { console.log('b'); }
});
```

You can optionally pass in ``keypress``, ``keydown`` or ``keyup`` as a second argument.

Other bind calls work the same way as they do by default.
/**
 * adds a bindGlobal method to Mousetrap that allows you to
 * bind specific keyboard shortcuts that will still work
 * inside a text input field
 *
 * usage:
 * Mousetrap.bindGlobal('ctrl+s', _saveChanges);
 */
/* global Mousetrap:true */
(function(Mousetrap) {
    if (! Mousetrap) {
        return;
    }
    var _globalCallbacks = {};
    var _originalStopCallback = Mousetrap.prototype.stopCallback;

    Mousetrap.prototype.stopCallback = function(e, element, combo, sequence) {
        var self = this;

        if (self.paused) {
            return true;
        }

        if (_globalCallbacks[combo] || _globalCallbacks[sequence]) {
            return false;
        }

        return _originalStopCallback.call(self, e, element, combo);
    };

    Mousetrap.prototype.bindGlobal = function(keys, callback, action) {
        var self = this;
        self.bind(keys, callback, action);

        if (keys instanceof Array) {
            for (var i = 0; i < keys.length; i++) {
                _globalCallbacks[keys[i]] = true;
            }
            return;
        }

        _globalCallbacks[keys] = true;
    };

    Mousetrap.init();
}) (typeof Mousetrap !== "undefined" ? Mousetrap : undefined);
(function(a){var c={},d=a.prototype.stopCallback;a.prototype.stopCallback=function(e,b,a,f){return this.paused?!0:c[a]||c[f]?!1:d.call(this,e,b,a)};a.prototype.bindGlobal=function(a,b,d){this.bind(a,b,d);if(a instanceof Array)for(b=0;b<a.length;b++)c[a[b]]=!0;else c[a]=!0};a.init()})(Mousetrap);
# Global Bind

This extension allows you to specify keyboard events that will work anywhere including inside textarea/input fields.

Usage looks like:

```javascript
Mousetrap.bindGlobal('ctrl+s', function() {
    _save();
});
```

This means that a keyboard event bound using ``Mousetrap.bind`` will only work outside of form input fields, but using ``Moustrap.bindGlobal`` will work in both places.

If you wanted to create keyboard shortcuts that only work when you are inside a specific textarea you can do that too by creating your own extension.
/**
 * adds a pause and unpause method to Mousetrap
 * this allows you to enable or disable keyboard shortcuts
 * without having to reset Mousetrap and rebind everything
 */
/* global Mousetrap:true */
(function(Mousetrap) {
    var _originalStopCallback = Mousetrap.prototype.stopCallback;

    Mousetrap.prototype.stopCallback = function(e, element, combo) {
        var self = this;

        if (self.paused) {
            return true;
        }

        return _originalStopCallback.call(self, e, element, combo);
    };

    Mousetrap.prototype.pause = function() {
        var self = this;
        self.paused = true;
    };

    Mousetrap.prototype.unpause = function() {
        var self = this;
        self.paused = false;
    };

    Mousetrap.init();
}) (Mousetrap);
(function(a){var b=a.prototype.stopCallback;a.prototype.stopCallback=function(a,c,d){return this.paused?!0:b.call(this,a,c,d)};a.prototype.pause=function(){this.paused=!0};a.prototype.unpause=function(){this.paused=!1};a.init()})(Mousetrap);
# Pause/unpause

This extension allows Mousetrap to be paused and unpaused without having to reset keyboard shortcuts and rebind them.

Usage looks like:

```javascript
// stop Mousetrap events from firing
Mousetrap.pause();

// allow Mousetrap events to fire again
Mousetrap.unpause();
```
# Plugins

Plugins extend the functionality of Mousetrap.  To use a plugin just include the plugin after mousetrap.

```html
<script src="mousetrap.js"></script>
<script src="mousetrap-record.js"></script>
```

## Bind dictionary

Allows you to make multiple bindings in a single ``Mousetrap.bind`` call.

## Global bind

Allows you to set global bindings that work even inside of input fields.

## Pause/unpause

Allows you to temporarily prevent Mousetrap events from firing.

## Record

Allows you to capture a keyboard shortcut or sequence defined by a user.
/**
 * This extension allows you to record a sequence using Mousetrap.
 *
 * @author Dan Tao <daniel.tao@gmail.com>
 */
(function(Mousetrap) {
    /**
     * the sequence currently being recorded
     *
     * @type {Array}
     */
    var _recordedSequence = [],

        /**
         * a callback to invoke after recording a sequence
         *
         * @type {Function|null}
         */
        _recordedSequenceCallback = null,

        /**
         * a list of all of the keys currently held down
         *
         * @type {Array}
         */
        _currentRecordedKeys = [],

        /**
         * temporary state where we remember if we've already captured a
         * character key in the current combo
         *
         * @type {boolean}
         */
        _recordedCharacterKey = false,

        /**
         * a handle for the timer of the current recording
         *
         * @type {null|number}
         */
        _recordTimer = null,

        /**
         * the original handleKey method to override when Mousetrap.record() is
         * called
         *
         * @type {Function}
         */
        _origHandleKey = Mousetrap.prototype.handleKey;

    /**
     * handles a character key event
     *
     * @param {string} character
     * @param {Array} modifiers
     * @param {Event} e
     * @returns void
     */
    function _handleKey(character, modifiers, e) {
        var self = this;

        if (!self.recording) {
            _origHandleKey.apply(self, arguments);
            return;
        }

        // remember this character if we're currently recording a sequence
        if (e.type == 'keydown') {
            if (character.length === 1 && _recordedCharacterKey) {
                _recordCurrentCombo();
            }

            for (i = 0; i < modifiers.length; ++i) {
                _recordKey(modifiers[i]);
            }
            _recordKey(character);

        // once a key is released, all keys that were held down at the time
        // count as a keypress
        } else if (e.type == 'keyup' && _currentRecordedKeys.length > 0) {
            _recordCurrentCombo();
        }
    }

    /**
     * marks a character key as held down while recording a sequence
     *
     * @param {string} key
     * @returns void
     */
    function _recordKey(key) {
        var i;

        // one-off implementation of Array.indexOf, since IE6-9 don't support it
        for (i = 0; i < _currentRecordedKeys.length; ++i) {
            if (_currentRecordedKeys[i] === key) {
                return;
            }
        }

        _currentRecordedKeys.push(key);

        if (key.length === 1) {
            _recordedCharacterKey = true;
        }
    }

    /**
     * marks whatever key combination that's been recorded so far as finished
     * and gets ready for the next combo
     *
     * @returns void
     */
    function _recordCurrentCombo() {
        _recordedSequence.push(_currentRecordedKeys);
        _currentRecordedKeys = [];
        _recordedCharacterKey = false;
        _restartRecordTimer();
    }

    /**
     * ensures each combo in a sequence is in a predictable order and formats
     * key combos to be '+'-delimited
     *
     * modifies the sequence in-place
     *
     * @param {Array} sequence
     * @returns void
     */
    function _normalizeSequence(sequence) {
        var i;

        for (i = 0; i < sequence.length; ++i) {
            sequence[i].sort(function(x, y) {
                // modifier keys always come first, in alphabetical order
                if (x.length > 1 && y.length === 1) {
                    return -1;
                } else if (x.length === 1 && y.length > 1) {
                    return 1;
                }

                // character keys come next (list should contain no duplicates,
                // so no need for equality check)
                return x > y ? 1 : -1;
            });

            sequence[i] = sequence[i].join('+');
        }
    }

    /**
     * finishes the current recording, passes the recorded sequence to the stored
     * callback, and sets Mousetrap.handleKey back to its original function
     *
     * @returns void
     */
    function _finishRecording() {
        if (_recordedSequenceCallback) {
            _normalizeSequence(_recordedSequence);
            _recordedSequenceCallback(_recordedSequence);
        }

        // reset all recorded state
        _recordedSequence = [];
        _recordedSequenceCallback = null;
        _currentRecordedKeys = [];
    }

    /**
     * called to set a 1 second timeout on the current recording
     *
     * this is so after each key press in the sequence the recording will wait for
     * 1 more second before executing the callback
     *
     * @returns void
     */
    function _restartRecordTimer() {
        clearTimeout(_recordTimer);
        _recordTimer = setTimeout(_finishRecording, 1000);
    }

    /**
     * records the next sequence and passes it to a callback once it's
     * completed
     *
     * @param {Function} callback
     * @returns void
     */
    Mousetrap.prototype.record = function(callback) {
        var self = this;
        self.recording = true;
        _recordedSequenceCallback = function() {
            self.recording = false;
            callback.apply(self, arguments);
        };
    };

    Mousetrap.prototype.handleKey = function() {
        var self = this;
        _handleKey.apply(self, arguments);
    };

    Mousetrap.init();

})(Mousetrap);
(function(d){function n(b,a,h){if(this.recording)if("keydown"==h.type){1===b.length&&g&&k();for(i=0;i<a.length;++i)l(a[i]);l(b)}else"keyup"==h.type&&0<c.length&&k();else p.apply(this,arguments)}function l(b){var a;for(a=0;a<c.length;++a)if(c[a]===b)return;c.push(b);1===b.length&&(g=!0)}function k(){e.push(c);c=[];g=!1;clearTimeout(m);m=setTimeout(q,1E3)}function r(b){var a;for(a=0;a<b.length;++a)b[a].sort(function(a,b){return 1<a.length&&1===b.length?-1:1===a.length&&1<b.length?1:a>b?1:-1}),b[a]=
b[a].join("+")}function q(){f&&(r(e),f(e));e=[];f=null;c=[]}var e=[],f=null,c=[],g=!1,m=null,p=d.prototype.handleKey;d.prototype.record=function(b){var a=this;a.recording=!0;f=function(){a.recording=!1;b.apply(a,arguments)}};d.prototype.handleKey=function(){n.apply(this,arguments)};d.init()})(Mousetrap);
# Record

This extension lets you use Mousetrap to record keyboard sequences and play them back:

```html
<button onclick="recordSequence()">Record</button>

<script>
    function recordSequence() {
        Mousetrap.record(function(sequence) {
            // sequence is an array like ['ctrl+k', 'c']
            alert('You pressed: ' + sequence.join(' '));
        });
    }
</script>
```
<!DOCTYPE html>
<html>

    <head>
        <title>Jelly</title>
        <meta charset=utf-8>
        <link href="jelly.css" rel="stylesheet">
    </head>

    <body>
        <h1>Jelly</h1>

        <h2>For testing the <strong>record</strong> extension</h2>

        <p>Click "Record" to test recording a sequence.</p>
        <button class="test-record">Record</button>
        <div class="test-record-result"></div>

        <script type="text/javascript" src="../../../tests/libs/jquery-1.7.2.min.js"></script>
        <script type="text/javascript" src="../../../mousetrap.js"></script>
        <script type="text/javascript" src="../mousetrap-record.js"></script>
        <script type="text/javascript" src="jelly.js"></script>

        <script type="text/javascript">
            Jelly.spread();
        </script>
    </body>

</html>
body {
    font-family: helvetica, arial, sans-serif;
    line-height: 20px;
}

kbd {
    background-color: #ccc;
    display: inline-block;
    padding: 0.5ex 1em;
}

.test-record-result {
  margin-top: 20px;
}

.test-record-result span:nth-child(n+2) {
    margin-left: 10px;
}
/**
 * Peanut butter goes great with jelly.
 *
 * @author Dan Tao <daniel.tao@gmail.com>
 */
var Jelly = (function() {
    var recordButton = $("button.test-record"),
        recordResult = $("div.test-record-result");

    function _formatSequenceAsHtml(sequence) {
        var combos = [],
            i;

        for (i = 0; i < sequence.length; ++i) {
            combos.push('<span>' + _formatKeysAsHtml(sequence[i].split('+')) + '</span>');
        }

        return combos.join(' ');
    }

    function _formatKeysAsHtml(keys) {
        var htmlKeys = [],
            i;

        for (i = 0; i < keys.length; ++i) {
            htmlKeys.push('<kbd>' + keys[i] + '</kbd>');
        }

        return htmlKeys.join('+');
    }

    function _prepareRecordTest() {
        recordButton.prop('disabled', true);
        recordButton.text('Recording');

        Mousetrap.record(function(sequence) {
            recordResult.html(_formatSequenceAsHtml(sequence));
            recordButton.prop('disabled', false);
            recordButton.text('Record');
        });

        // take focus away from the button so that Mousetrap will actually
        // capture keystrokes
        recordButton.blur();
    }

    return {
        spread: function() {
            recordButton.click(_prepareRecordTest);
        }
    };

})();

require('thenify-all').withCallback(
  require('child_process'),
  exports, [
    'exec',
    'execFile',
  ]
)

require('thenify-all').withCallback(
  require('crypto'),
  exports, [
    'pbkdf2',
    'pseudoRandomBytes',
    'randomBytes'
  ]
)

require('thenify-all').withCallback(
  require('dns'),
  exports, [
    'lookup',
    'resolve',
    'resolve4',
    'resolve6',
    'resolveCname',
    'resolveMx',
    'resolveNs',
    'resolveSrv',
    'resolveTxt',
    'reverse'
  ]
)

var Promise = require('any-promise')
var fs
try {
  fs = require('graceful-fs')
} catch(err) {
  fs = require('fs')
}

var api = [
  'appendFile',
  'chmod',
  'chown',
  'close',
  'fchmod',
  'fchown',
  'fdatasync',
  'fstat',
  'fsync',
  'ftruncate',
  'futimes',
  'lchown',
  'link',
  'lstat',
  'mkdir',
  'open',
  'read',
  'readFile',
  'readdir',
  'readlink',
  'realpath',
  'rename',
  'rmdir',
  'stat',
  'symlink',
  'truncate',
  'unlink',
  'utimes',
  'write',
  'writeFile'
]

typeof fs.access === 'function' && api.push('access')
typeof fs.copyFile === 'function' && api.push('copyFile')
typeof fs.mkdtemp === 'function' && api.push('mkdtemp')

require('thenify-all').withCallback(fs, exports, api)

exports.exists = function (filename, callback) {
  // callback
  if (typeof callback === 'function') {
    return fs.stat(filename, function (err) {
      callback(null, !err);
    })
  }
  // or promise
  return new Promise(function (resolve) {
    fs.stat(filename, function (err) {
      resolve(!err)
    })
  })
}

2.7.0 / 2017-09-13
==================

  * feat: support fs.copyFile (#58)

2.6.0 / 2016-11-22
==================

  * Added fdatasync to fs api (#46)

2.5.0 / 2016-11-04
==================

  * feat: support fs.mkdtemp

2.4.0 / 2016-03-23
==================

  * add `fs.truncate()` [#34](https://github.com/normalize/mz/pull/34)

2.3.1 / 2016-02-01
==================

  * update `any-promise@v1`

2.3.0 / 2016-01-30
==================

  * feat(package): switch to `any-promise` to support more promise engines

2.2.0 / 2016-01-24
==================

  * feat(package): add index.js to files

2.1.0 / 2015-10-15
==================

 * support for readline library

2.0.0 / 2015-05-24
==================

 * support callbacks as well

1.2.0 / 2014-12-16
==================

 * refactor promisification to `thenify` and `thenify-all`

1.1.0 / 2014-11-14
==================

 * use `graceful-fs` if available

1.0.1 / 2014-08-18
==================

 * don't use `bluebird.promisify()` - unnecessarily wraps runtime errors, causing issues

1.0.0 / 2014-06-18
==================

 * use `bluebird` by default if found
 * support node 0.8
module.exports = {
  fs: require('./fs'),
  dns: require('./dns'),
  zlib: require('./zlib'),
  crypto: require('./crypto'),
  readline: require('./readline'),
  child_process: require('./child_process')
}

The MIT License (MIT)

Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "mz",
  "description": "modernize node.js to current ECMAScript standards",
  "version": "2.7.0",
  "author": {
    "name": "Jonathan Ong",
    "email": "me@jongleberry.com",
    "url": "http://jongleberry.com",
    "twitter": "https://twitter.com/jongleberry"
  },
  "license": "MIT",
  "repository": "normalize/mz",
  "dependencies": {
    "any-promise": "^1.0.0",
    "object-assign": "^4.0.1",
    "thenify-all": "^1.0.0"
  },
  "devDependencies": {
    "istanbul": "^0.4.0",
    "bluebird": "^3.0.0",
    "mocha": "^3.0.0"
  },
  "files": [
    "index.js",
    "child_process.js",
    "crypto.js",
    "dns.js",
    "fs.js",
    "readline.js",
    "zlib.js"
  ]
}var readline = require('readline')
var Promise = require('any-promise')
var objectAssign = require('object-assign')
var Interface = readline.Interface

function wrapCompleter (completer) {
  if (completer.length === 2) return completer

  return function (line, cb) {
    var result = completer(line)

    if (typeof result.then !== 'function') {
      return cb(null, result)
    }

    result.catch(cb).then(function (result) {
      process.nextTick(function () { cb(null, result) })
    })
  }
}

function InterfaceAsPromised (input, output, completer, terminal) {
  if (arguments.length === 1) {
    var options = input

    if (typeof options.completer === 'function') {
      options = objectAssign({}, options, {
        completer: wrapCompleter(options.completer)
      })
    }

    Interface.call(this, options)
  } else {
    if (typeof completer === 'function') {
      completer = wrapCompleter(completer)
    }

    Interface.call(this, input, output, completer, terminal)
  }
}

InterfaceAsPromised.prototype = Object.create(Interface.prototype)

InterfaceAsPromised.prototype.question = function (question, callback) {
  if (typeof callback === 'function') {
    return Interface.prototype.question.call(this, question, callback)
  }

  var self = this
  return new Promise(function (resolve) {
    Interface.prototype.question.call(self, question, resolve)
  })
}

objectAssign(exports, readline, {
  Interface: InterfaceAsPromised,
  createInterface: function (input, output, completer, terminal) {
    if (arguments.length === 1) {
      return new InterfaceAsPromised(input)
    }

    return new InterfaceAsPromised(input, output, completer, terminal)
  }
})

require('thenify-all').withCallback(
  require('zlib'),
  exports, [
    'deflate',
    'deflateRaw',
    'gzip',
    'gunzip',
    'inflate',
    'inflateRaw',
    'unzip',
  ]
)
0.6.2 / 2019-04-29
==================

  * Fix sorting charset, encoding, and language with extra parameters

0.6.1 / 2016-05-02
==================

  * perf: improve `Accept` parsing speed
  * perf: improve `Accept-Charset` parsing speed
  * perf: improve `Accept-Encoding` parsing speed
  * perf: improve `Accept-Language` parsing speed

0.6.0 / 2015-09-29
==================

  * Fix including type extensions in parameters in `Accept` parsing
  * Fix parsing `Accept` parameters with quoted equals
  * Fix parsing `Accept` parameters with quoted semicolons
  * Lazy-load modules from main entry point
  * perf: delay type concatenation until needed
  * perf: enable strict mode
  * perf: hoist regular expressions
  * perf: remove closures getting spec properties
  * perf: remove a closure from media type parsing
  * perf: remove property delete from media type parsing

0.5.3 / 2015-05-10
==================

  * Fix media type parameter matching to be case-insensitive

0.5.2 / 2015-05-06
==================

  * Fix comparing media types with quoted values
  * Fix splitting media types with quoted commas

0.5.1 / 2015-02-14
==================

  * Fix preference sorting to be stable for long acceptable lists

0.5.0 / 2014-12-18
==================

  * Fix list return order when large accepted list
  * Fix missing identity encoding when q=0 exists
  * Remove dynamic building of Negotiator class

0.4.9 / 2014-10-14
==================

  * Fix error when media type has invalid parameter

0.4.8 / 2014-09-28
==================

  * Fix all negotiations to be case-insensitive
  * Stable sort preferences of same quality according to client order
  * Support Node.js 0.6

0.4.7 / 2014-06-24
==================

  * Handle invalid provided languages
  * Handle invalid provided media types

0.4.6 / 2014-06-11
==================

  *  Order by specificity when quality is the same

0.4.5 / 2014-05-29
==================

  * Fix regression in empty header handling

0.4.4 / 2014-05-29
==================

  * Fix behaviors when headers are not present

0.4.3 / 2014-04-16
==================

  * Handle slashes on media params correctly

0.4.2 / 2014-02-28
==================

  * Fix media type sorting
  * Handle media types params strictly

0.4.1 / 2014-01-16
==================

  * Use most specific matches

0.4.0 / 2014-01-09
==================

  * Remove preferred prefix from methods
/*!
 * negotiator
 * Copyright(c) 2012 Federico Romero
 * Copyright(c) 2012-2014 Isaac Z. Schlueter
 * Copyright(c) 2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict';

/**
 * Cached loaded submodules.
 * @private
 */

var modules = Object.create(null);

/**
 * Module exports.
 * @public
 */

module.exports = Negotiator;
module.exports.Negotiator = Negotiator;

/**
 * Create a Negotiator instance from a request.
 * @param {object} request
 * @public
 */

function Negotiator(request) {
  if (!(this instanceof Negotiator)) {
    return new Negotiator(request);
  }

  this.request = request;
}

Negotiator.prototype.charset = function charset(available) {
  var set = this.charsets(available);
  return set && set[0];
};

Negotiator.prototype.charsets = function charsets(available) {
  var preferredCharsets = loadModule('charset').preferredCharsets;
  return preferredCharsets(this.request.headers['accept-charset'], available);
};

Negotiator.prototype.encoding = function encoding(available) {
  var set = this.encodings(available);
  return set && set[0];
};

Negotiator.prototype.encodings = function encodings(available) {
  var preferredEncodings = loadModule('encoding').preferredEncodings;
  return preferredEncodings(this.request.headers['accept-encoding'], available);
};

Negotiator.prototype.language = function language(available) {
  var set = this.languages(available);
  return set && set[0];
};

Negotiator.prototype.languages = function languages(available) {
  var preferredLanguages = loadModule('language').preferredLanguages;
  return preferredLanguages(this.request.headers['accept-language'], available);
};

Negotiator.prototype.mediaType = function mediaType(available) {
  var set = this.mediaTypes(available);
  return set && set[0];
};

Negotiator.prototype.mediaTypes = function mediaTypes(available) {
  var preferredMediaTypes = loadModule('mediaType').preferredMediaTypes;
  return preferredMediaTypes(this.request.headers.accept, available);
};

// Backwards compatibility
Negotiator.prototype.preferredCharset = Negotiator.prototype.charset;
Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;
Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;
Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;
Negotiator.prototype.preferredLanguage = Negotiator.prototype.language;
Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages;
Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;
Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;

/**
 * Load the given module.
 * @private
 */

function loadModule(moduleName) {
  var module = modules[moduleName];

  if (module !== undefined) {
    return module;
  }

  // This uses a switch for static require analysis
  switch (moduleName) {
    case 'charset':
      module = require('./lib/charset');
      break;
    case 'encoding':
      module = require('./lib/encoding');
      break;
    case 'language':
      module = require('./lib/language');
      break;
    case 'mediaType':
      module = require('./lib/mediaType');
      break;
    default:
      throw new Error('Cannot find module \'' + moduleName + '\'');
  }

  // Store to prevent invoking require()
  modules[moduleName] = module;

  return module;
}
/**
 * negotiator
 * Copyright(c) 2012 Isaac Z. Schlueter
 * Copyright(c) 2014 Federico Romero
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict';

/**
 * Module exports.
 * @public
 */

module.exports = preferredCharsets;
module.exports.preferredCharsets = preferredCharsets;

/**
 * Module variables.
 * @private
 */

var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;

/**
 * Parse the Accept-Charset header.
 * @private
 */

function parseAcceptCharset(accept) {
  var accepts = accept.split(',');

  for (var i = 0, j = 0; i < accepts.length; i++) {
    var charset = parseCharset(accepts[i].trim(), i);

    if (charset) {
      accepts[j++] = charset;
    }
  }

  // trim accepts
  accepts.length = j;

  return accepts;
}

/**
 * Parse a charset from the Accept-Charset header.
 * @private
 */

function parseCharset(str, i) {
  var match = simpleCharsetRegExp.exec(str);
  if (!match) return null;

  var charset = match[1];
  var q = 1;
  if (match[2]) {
    var params = match[2].split(';')
    for (var j = 0; j < params.length; j++) {
      var p = params[j].trim().split('=');
      if (p[0] === 'q') {
        q = parseFloat(p[1]);
        break;
      }
    }
  }

  return {
    charset: charset,
    q: q,
    i: i
  };
}

/**
 * Get the priority of a charset.
 * @private
 */

function getCharsetPriority(charset, accepted, index) {
  var priority = {o: -1, q: 0, s: 0};

  for (var i = 0; i < accepted.length; i++) {
    var spec = specify(charset, accepted[i], index);

    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
      priority = spec;
    }
  }

  return priority;
}

/**
 * Get the specificity of the charset.
 * @private
 */

function specify(charset, spec, index) {
  var s = 0;
  if(spec.charset.toLowerCase() === charset.toLowerCase()){
    s |= 1;
  } else if (spec.charset !== '*' ) {
    return null
  }

  return {
    i: index,
    o: spec.i,
    q: spec.q,
    s: s
  }
}

/**
 * Get the preferred charsets from an Accept-Charset header.
 * @public
 */

function preferredCharsets(accept, provided) {
  // RFC 2616 sec 14.2: no header = *
  var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');

  if (!provided) {
    // sorted list of all charsets
    return accepts
      .filter(isQuality)
      .sort(compareSpecs)
      .map(getFullCharset);
  }

  var priorities = provided.map(function getPriority(type, index) {
    return getCharsetPriority(type, accepts, index);
  });

  // sorted list of accepted charsets
  return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {
    return provided[priorities.indexOf(priority)];
  });
}

/**
 * Compare two specs.
 * @private
 */

function compareSpecs(a, b) {
  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
}

/**
 * Get full charset string.
 * @private
 */

function getFullCharset(spec) {
  return spec.charset;
}

/**
 * Check if a spec has any quality.
 * @private
 */

function isQuality(spec) {
  return spec.q > 0;
}
/**
 * negotiator
 * Copyright(c) 2012 Isaac Z. Schlueter
 * Copyright(c) 2014 Federico Romero
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict';

/**
 * Module exports.
 * @public
 */

module.exports = preferredEncodings;
module.exports.preferredEncodings = preferredEncodings;

/**
 * Module variables.
 * @private
 */

var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;

/**
 * Parse the Accept-Encoding header.
 * @private
 */

function parseAcceptEncoding(accept) {
  var accepts = accept.split(',');
  var hasIdentity = false;
  var minQuality = 1;

  for (var i = 0, j = 0; i < accepts.length; i++) {
    var encoding = parseEncoding(accepts[i].trim(), i);

    if (encoding) {
      accepts[j++] = encoding;
      hasIdentity = hasIdentity || specify('identity', encoding);
      minQuality = Math.min(minQuality, encoding.q || 1);
    }
  }

  if (!hasIdentity) {
    /*
     * If identity doesn't explicitly appear in the accept-encoding header,
     * it's added to the list of acceptable encoding with the lowest q
     */
    accepts[j++] = {
      encoding: 'identity',
      q: minQuality,
      i: i
    };
  }

  // trim accepts
  accepts.length = j;

  return accepts;
}

/**
 * Parse an encoding from the Accept-Encoding header.
 * @private
 */

function parseEncoding(str, i) {
  var match = simpleEncodingRegExp.exec(str);
  if (!match) return null;

  var encoding = match[1];
  var q = 1;
  if (match[2]) {
    var params = match[2].split(';');
    for (var j = 0; j < params.length; j++) {
      var p = params[j].trim().split('=');
      if (p[0] === 'q') {
        q = parseFloat(p[1]);
        break;
      }
    }
  }

  return {
    encoding: encoding,
    q: q,
    i: i
  };
}

/**
 * Get the priority of an encoding.
 * @private
 */

function getEncodingPriority(encoding, accepted, index) {
  var priority = {o: -1, q: 0, s: 0};

  for (var i = 0; i < accepted.length; i++) {
    var spec = specify(encoding, accepted[i], index);

    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
      priority = spec;
    }
  }

  return priority;
}

/**
 * Get the specificity of the encoding.
 * @private
 */

function specify(encoding, spec, index) {
  var s = 0;
  if(spec.encoding.toLowerCase() === encoding.toLowerCase()){
    s |= 1;
  } else if (spec.encoding !== '*' ) {
    return null
  }

  return {
    i: index,
    o: spec.i,
    q: spec.q,
    s: s
  }
};

/**
 * Get the preferred encodings from an Accept-Encoding header.
 * @public
 */

function preferredEncodings(accept, provided) {
  var accepts = parseAcceptEncoding(accept || '');

  if (!provided) {
    // sorted list of all encodings
    return accepts
      .filter(isQuality)
      .sort(compareSpecs)
      .map(getFullEncoding);
  }

  var priorities = provided.map(function getPriority(type, index) {
    return getEncodingPriority(type, accepts, index);
  });

  // sorted list of accepted encodings
  return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {
    return provided[priorities.indexOf(priority)];
  });
}

/**
 * Compare two specs.
 * @private
 */

function compareSpecs(a, b) {
  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
}

/**
 * Get full encoding string.
 * @private
 */

function getFullEncoding(spec) {
  return spec.encoding;
}

/**
 * Check if a spec has any quality.
 * @private
 */

function isQuality(spec) {
  return spec.q > 0;
}
/**
 * negotiator
 * Copyright(c) 2012 Isaac Z. Schlueter
 * Copyright(c) 2014 Federico Romero
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict';

/**
 * Module exports.
 * @public
 */

module.exports = preferredLanguages;
module.exports.preferredLanguages = preferredLanguages;

/**
 * Module variables.
 * @private
 */

var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/;

/**
 * Parse the Accept-Language header.
 * @private
 */

function parseAcceptLanguage(accept) {
  var accepts = accept.split(',');

  for (var i = 0, j = 0; i < accepts.length; i++) {
    var language = parseLanguage(accepts[i].trim(), i);

    if (language) {
      accepts[j++] = language;
    }
  }

  // trim accepts
  accepts.length = j;

  return accepts;
}

/**
 * Parse a language from the Accept-Language header.
 * @private
 */

function parseLanguage(str, i) {
  var match = simpleLanguageRegExp.exec(str);
  if (!match) return null;

  var prefix = match[1],
    suffix = match[2],
    full = prefix;

  if (suffix) full += "-" + suffix;

  var q = 1;
  if (match[3]) {
    var params = match[3].split(';')
    for (var j = 0; j < params.length; j++) {
      var p = params[j].split('=');
      if (p[0] === 'q') q = parseFloat(p[1]);
    }
  }

  return {
    prefix: prefix,
    suffix: suffix,
    q: q,
    i: i,
    full: full
  };
}

/**
 * Get the priority of a language.
 * @private
 */

function getLanguagePriority(language, accepted, index) {
  var priority = {o: -1, q: 0, s: 0};

  for (var i = 0; i < accepted.length; i++) {
    var spec = specify(language, accepted[i], index);

    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
      priority = spec;
    }
  }

  return priority;
}

/**
 * Get the specificity of the language.
 * @private
 */

function specify(language, spec, index) {
  var p = parseLanguage(language)
  if (!p) return null;
  var s = 0;
  if(spec.full.toLowerCase() === p.full.toLowerCase()){
    s |= 4;
  } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {
    s |= 2;
  } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {
    s |= 1;
  } else if (spec.full !== '*' ) {
    return null
  }

  return {
    i: index,
    o: spec.i,
    q: spec.q,
    s: s
  }
};

/**
 * Get the preferred languages from an Accept-Language header.
 * @public
 */

function preferredLanguages(accept, provided) {
  // RFC 2616 sec 14.4: no header = *
  var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');

  if (!provided) {
    // sorted list of all languages
    return accepts
      .filter(isQuality)
      .sort(compareSpecs)
      .map(getFullLanguage);
  }

  var priorities = provided.map(function getPriority(type, index) {
    return getLanguagePriority(type, accepts, index);
  });

  // sorted list of accepted languages
  return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {
    return provided[priorities.indexOf(priority)];
  });
}

/**
 * Compare two specs.
 * @private
 */

function compareSpecs(a, b) {
  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
}

/**
 * Get full language string.
 * @private
 */

function getFullLanguage(spec) {
  return spec.full;
}

/**
 * Check if a spec has any quality.
 * @private
 */

function isQuality(spec) {
  return spec.q > 0;
}
/**
 * negotiator
 * Copyright(c) 2012 Isaac Z. Schlueter
 * Copyright(c) 2014 Federico Romero
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict';

/**
 * Module exports.
 * @public
 */

module.exports = preferredMediaTypes;
module.exports.preferredMediaTypes = preferredMediaTypes;

/**
 * Module variables.
 * @private
 */

var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;

/**
 * Parse the Accept header.
 * @private
 */

function parseAccept(accept) {
  var accepts = splitMediaTypes(accept);

  for (var i = 0, j = 0; i < accepts.length; i++) {
    var mediaType = parseMediaType(accepts[i].trim(), i);

    if (mediaType) {
      accepts[j++] = mediaType;
    }
  }

  // trim accepts
  accepts.length = j;

  return accepts;
}

/**
 * Parse a media type from the Accept header.
 * @private
 */

function parseMediaType(str, i) {
  var match = simpleMediaTypeRegExp.exec(str);
  if (!match) return null;

  var params = Object.create(null);
  var q = 1;
  var subtype = match[2];
  var type = match[1];

  if (match[3]) {
    var kvps = splitParameters(match[3]).map(splitKeyValuePair);

    for (var j = 0; j < kvps.length; j++) {
      var pair = kvps[j];
      var key = pair[0].toLowerCase();
      var val = pair[1];

      // get the value, unwrapping quotes
      var value = val && val[0] === '"' && val[val.length - 1] === '"'
        ? val.substr(1, val.length - 2)
        : val;

      if (key === 'q') {
        q = parseFloat(value);
        break;
      }

      // store parameter
      params[key] = value;
    }
  }

  return {
    type: type,
    subtype: subtype,
    params: params,
    q: q,
    i: i
  };
}

/**
 * Get the priority of a media type.
 * @private
 */

function getMediaTypePriority(type, accepted, index) {
  var priority = {o: -1, q: 0, s: 0};

  for (var i = 0; i < accepted.length; i++) {
    var spec = specify(type, accepted[i], index);

    if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
      priority = spec;
    }
  }

  return priority;
}

/**
 * Get the specificity of the media type.
 * @private
 */

function specify(type, spec, index) {
  var p = parseMediaType(type);
  var s = 0;

  if (!p) {
    return null;
  }

  if(spec.type.toLowerCase() == p.type.toLowerCase()) {
    s |= 4
  } else if(spec.type != '*') {
    return null;
  }

  if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {
    s |= 2
  } else if(spec.subtype != '*') {
    return null;
  }

  var keys = Object.keys(spec.params);
  if (keys.length > 0) {
    if (keys.every(function (k) {
      return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();
    })) {
      s |= 1
    } else {
      return null
    }
  }

  return {
    i: index,
    o: spec.i,
    q: spec.q,
    s: s,
  }
}

/**
 * Get the preferred media types from an Accept header.
 * @public
 */

function preferredMediaTypes(accept, provided) {
  // RFC 2616 sec 14.2: no header = */*
  var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');

  if (!provided) {
    // sorted list of all types
    return accepts
      .filter(isQuality)
      .sort(compareSpecs)
      .map(getFullType);
  }

  var priorities = provided.map(function getPriority(type, index) {
    return getMediaTypePriority(type, accepts, index);
  });

  // sorted list of accepted types
  return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {
    return provided[priorities.indexOf(priority)];
  });
}

/**
 * Compare two specs.
 * @private
 */

function compareSpecs(a, b) {
  return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
}

/**
 * Get full type string.
 * @private
 */

function getFullType(spec) {
  return spec.type + '/' + spec.subtype;
}

/**
 * Check if a spec has any quality.
 * @private
 */

function isQuality(spec) {
  return spec.q > 0;
}

/**
 * Count the number of quotes in a string.
 * @private
 */

function quoteCount(string) {
  var count = 0;
  var index = 0;

  while ((index = string.indexOf('"', index)) !== -1) {
    count++;
    index++;
  }

  return count;
}

/**
 * Split a key value pair.
 * @private
 */

function splitKeyValuePair(str) {
  var index = str.indexOf('=');
  var key;
  var val;

  if (index === -1) {
    key = str;
  } else {
    key = str.substr(0, index);
    val = str.substr(index + 1);
  }

  return [key, val];
}

/**
 * Split an Accept header into media types.
 * @private
 */

function splitMediaTypes(accept) {
  var accepts = accept.split(',');

  for (var i = 1, j = 0; i < accepts.length; i++) {
    if (quoteCount(accepts[j]) % 2 == 0) {
      accepts[++j] = accepts[i];
    } else {
      accepts[j] += ',' + accepts[i];
    }
  }

  // trim accepts
  accepts.length = j + 1;

  return accepts;
}

/**
 * Split a string of parameters.
 * @private
 */

function splitParameters(str) {
  var parameters = str.split(';');

  for (var i = 1, j = 0; i < parameters.length; i++) {
    if (quoteCount(parameters[j]) % 2 == 0) {
      parameters[++j] = parameters[i];
    } else {
      parameters[j] += ';' + parameters[i];
    }
  }

  // trim parameters
  parameters.length = j + 1;

  for (var i = 0; i < parameters.length; i++) {
    parameters[i] = parameters[i].trim();
  }

  return parameters;
}
(The MIT License)

Copyright (c) 2012-2014 Federico Romero
Copyright (c) 2012-2014 Isaac Z. Schlueter
Copyright (c) 2014-2015 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "negotiator",
  "description": "HTTP content negotiation",
  "version": "0.6.2",
  "license": "MIT",
  "repository": "jshttp/negotiator",
  "devDependencies": {
    "eslint": "5.16.0",
    "eslint-plugin-markdown": "1.0.0",
    "mocha": "6.1.4",
    "nyc": "14.0.0"
  },
  "files": [
    "lib/",
    "HISTORY.md",
    "LICENSE",
    "index.js",
    "README.md"
  ],
  "engines": {
    "node": ">= 0.6"
  }
}{
  'variables': {
    'NAPI_VERSION%': "<!(node -p \"process.versions.napi\")",
    'disable_deprecated': "<!(node -p \"process.env['npm_config_disable_deprecated']\")"
  },
  'conditions': [
    ['NAPI_VERSION!=""', { 'defines': ['NAPI_VERSION=<@(NAPI_VERSION)'] } ],
    ['disable_deprecated=="true"', {
      'defines': ['NODE_ADDON_API_DISABLE_DEPRECATED']
    }],
    ['OS=="mac"', {
      'cflags+': ['-fvisibility=hidden'],
      'xcode_settings': {
        'OTHER_CFLAGS': ['-fvisibility=hidden']
      }
    }]
  ],
  'include_dirs': ["<!(node -p \"require('../').include_dir\")"],
  'cflags': [ '-Werror', '-Wall', '-Wextra', '-Wpedantic', '-Wunused-parameter' ],
  'cflags_cc': [ '-Werror', '-Wall', '-Wextra', '-Wpedantic', '-Wunused-parameter' ]
}
{
  'defines': [ 'NAPI_CPP_EXCEPTIONS' ],
  'cflags!': [ '-fno-exceptions' ],
  'cflags_cc!': [ '-fno-exceptions' ],
  'msvs_settings': {
    'VCCLCompilerTool': {
      'ExceptionHandling': 1,
      'EnablePREfast': 'true',
    },
  },
  'xcode_settings': {
    'CLANG_CXX_LIBRARY': 'libc++',
    'MACOSX_DEPLOYMENT_TARGET': '10.7',
    'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',
  },
}
const path = require('path');

const include_dir = path.relative('.', __dirname);

module.exports = {
  include: `"${__dirname}"`, // deprecated, can be removed as part of 4.0.0
  include_dir,
  gyp: path.join(include_dir, 'node_api.gyp:nothing'),
  isNodeApiBuiltin: true,
  needsFlag: false
};
The MIT License (MIT)
=====================

Copyright (c) 2017 Node.js API collaborators
-----------------------------------

*Node.js API collaborators listed at <https://github.com/nodejs/node-addon-api#collaborators>*

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.#ifndef SRC_NAPI_INL_DEPRECATED_H_
#define SRC_NAPI_INL_DEPRECATED_H_

////////////////////////////////////////////////////////////////////////////////
// PropertyDescriptor class
////////////////////////////////////////////////////////////////////////////////

template <typename Getter>
inline PropertyDescriptor
PropertyDescriptor::Accessor(const char* utf8name,
                             Getter getter,
                             napi_property_attributes attributes,
                             void* /*data*/) {
  using CbData = details::CallbackData<Getter, Napi::Value>;
  // TODO: Delete when the function is destroyed
  auto callbackData = new CbData({ getter, nullptr });

  return PropertyDescriptor({
    utf8name,
    nullptr,
    nullptr,
    CbData::Wrapper,
    nullptr,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Getter>
inline PropertyDescriptor PropertyDescriptor::Accessor(const std::string& utf8name,
                                                       Getter getter,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  return Accessor(utf8name.c_str(), getter, attributes, data);
}

template <typename Getter>
inline PropertyDescriptor PropertyDescriptor::Accessor(napi_value name,
                                                       Getter getter,
                                                       napi_property_attributes attributes,
                                                       void* /*data*/) {
  using CbData = details::CallbackData<Getter, Napi::Value>;
  // TODO: Delete when the function is destroyed
  auto callbackData = new CbData({ getter, nullptr });

  return PropertyDescriptor({
    nullptr,
    name,
    nullptr,
    CbData::Wrapper,
    nullptr,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Getter>
inline PropertyDescriptor PropertyDescriptor::Accessor(Name name,
                                                       Getter getter,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  napi_value nameValue = name;
  return PropertyDescriptor::Accessor(nameValue, getter, attributes, data);
}

template <typename Getter, typename Setter>
inline PropertyDescriptor PropertyDescriptor::Accessor(const char* utf8name,
                                                       Getter getter,
                                                       Setter setter,
                                                       napi_property_attributes attributes,
                                                       void* /*data*/) {
  using CbData = details::AccessorCallbackData<Getter, Setter>;
  // TODO: Delete when the function is destroyed
  auto callbackData = new CbData({ getter, setter, nullptr });

  return PropertyDescriptor({
    utf8name,
    nullptr,
    nullptr,
    CbData::GetterWrapper,
    CbData::SetterWrapper,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Getter, typename Setter>
inline PropertyDescriptor PropertyDescriptor::Accessor(const std::string& utf8name,
                                                       Getter getter,
                                                       Setter setter,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  return Accessor(utf8name.c_str(), getter, setter, attributes, data);
}

template <typename Getter, typename Setter>
inline PropertyDescriptor PropertyDescriptor::Accessor(napi_value name,
                                                       Getter getter,
                                                       Setter setter,
                                                       napi_property_attributes attributes,
                                                       void* /*data*/) {
  using CbData = details::AccessorCallbackData<Getter, Setter>;
  // TODO: Delete when the function is destroyed
  auto callbackData = new CbData({ getter, setter, nullptr });

  return PropertyDescriptor({
    nullptr,
    name,
    nullptr,
    CbData::GetterWrapper,
    CbData::SetterWrapper,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Getter, typename Setter>
inline PropertyDescriptor PropertyDescriptor::Accessor(Name name,
                                                       Getter getter,
                                                       Setter setter,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  napi_value nameValue = name;
  return PropertyDescriptor::Accessor(nameValue, getter, setter, attributes, data);
}

template <typename Callable>
inline PropertyDescriptor PropertyDescriptor::Function(const char* utf8name,
                                                       Callable cb,
                                                       napi_property_attributes attributes,
                                                       void* /*data*/) {
  using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr)));
  using CbData = details::CallbackData<Callable, ReturnType>;
  // TODO: Delete when the function is destroyed
  auto callbackData = new CbData({ cb, nullptr });

  return PropertyDescriptor({
    utf8name,
    nullptr,
    CbData::Wrapper,
    nullptr,
    nullptr,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Callable>
inline PropertyDescriptor PropertyDescriptor::Function(const std::string& utf8name,
                                                       Callable cb,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  return Function(utf8name.c_str(), cb, attributes, data);
}

template <typename Callable>
inline PropertyDescriptor PropertyDescriptor::Function(napi_value name,
                                                       Callable cb,
                                                       napi_property_attributes attributes,
                                                       void* /*data*/) {
  using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr)));
  using CbData = details::CallbackData<Callable, ReturnType>;
  // TODO: Delete when the function is destroyed
  auto callbackData = new CbData({ cb, nullptr });

  return PropertyDescriptor({
    nullptr,
    name,
    CbData::Wrapper,
    nullptr,
    nullptr,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Callable>
inline PropertyDescriptor PropertyDescriptor::Function(Name name,
                                                       Callable cb,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  napi_value nameValue = name;
  return PropertyDescriptor::Function(nameValue, cb, attributes, data);
}

#endif // !SRC_NAPI_INL_DEPRECATED_H_
#ifndef SRC_NAPI_INL_H_
#define SRC_NAPI_INL_H_

////////////////////////////////////////////////////////////////////////////////
// Node-API C++ Wrapper Classes
//
// Inline header-only implementations for "Node-API" ABI-stable C APIs for
// Node.js.
////////////////////////////////////////////////////////////////////////////////

// Note: Do not include this file directly! Include "napi.h" instead.

#include <algorithm>
#include <cstring>
#include <mutex>
#include <type_traits>

namespace Napi {

// Helpers to handle functions exposed from C++.
namespace details {

// Attach a data item to an object and delete it when the object gets
// garbage-collected.
// TODO: Replace this code with `napi_add_finalizer()` whenever it becomes
// available on all supported versions of Node.js.
template <typename FreeType>
static inline napi_status AttachData(napi_env env,
                                     napi_value obj,
                                     FreeType* data,
                                     napi_finalize finalizer = nullptr,
                                     void* hint = nullptr) {
  napi_status status;
  if (finalizer == nullptr) {
    finalizer = [](napi_env /*env*/, void* data, void* /*hint*/) {
      delete static_cast<FreeType*>(data);
    };
  }
#if (NAPI_VERSION < 5)
  napi_value symbol, external;
  status = napi_create_symbol(env, nullptr, &symbol);
  if (status == napi_ok) {
    status = napi_create_external(env,
                              data,
                              finalizer,
                              hint,
                              &external);
    if (status == napi_ok) {
      napi_property_descriptor desc = {
        nullptr,
        symbol,
        nullptr,
        nullptr,
        nullptr,
        external,
        napi_default,
        nullptr
      };
      status = napi_define_properties(env, obj, 1, &desc);
    }
  }
#else  // NAPI_VERSION >= 5
  status = napi_add_finalizer(env, obj, data, finalizer, hint, nullptr);
#endif
  return status;
}

// For use in JS to C++ callback wrappers to catch any Napi::Error exceptions
// and rethrow them as JavaScript exceptions before returning from the callback.
template <typename Callable>
inline napi_value WrapCallback(Callable callback) {
#ifdef NAPI_CPP_EXCEPTIONS
  try {
    return callback();
  } catch (const Error& e) {
    e.ThrowAsJavaScriptException();
    return nullptr;
  }
#else // NAPI_CPP_EXCEPTIONS
  // When C++ exceptions are disabled, errors are immediately thrown as JS
  // exceptions, so there is no need to catch and rethrow them here.
  return callback();
#endif // NAPI_CPP_EXCEPTIONS
}

// For use in JS to C++ void callback wrappers to catch any Napi::Error
// exceptions and rethrow them as JavaScript exceptions before returning from the
// callback.
template <typename Callable>
inline void WrapVoidCallback(Callable callback) {
#ifdef NAPI_CPP_EXCEPTIONS
  try {
    callback();
  } catch (const Error& e) {
    e.ThrowAsJavaScriptException();
  }
#else // NAPI_CPP_EXCEPTIONS
  // When C++ exceptions are disabled, errors are immediately thrown as JS
  // exceptions, so there is no need to catch and rethrow them here.
  callback();
#endif // NAPI_CPP_EXCEPTIONS
}

template <typename Callable, typename Return>
struct CallbackData {
  static inline
  napi_value Wrapper(napi_env env, napi_callback_info info) {
    return details::WrapCallback([&] {
      CallbackInfo callbackInfo(env, info);
      CallbackData* callbackData =
        static_cast<CallbackData*>(callbackInfo.Data());
      callbackInfo.SetData(callbackData->data);
      return callbackData->callback(callbackInfo);
    });
  }

  Callable callback;
  void* data;
};

template <typename Callable>
struct CallbackData<Callable, void> {
  static inline
  napi_value Wrapper(napi_env env, napi_callback_info info) {
    return details::WrapCallback([&] {
      CallbackInfo callbackInfo(env, info);
      CallbackData* callbackData =
        static_cast<CallbackData*>(callbackInfo.Data());
      callbackInfo.SetData(callbackData->data);
      callbackData->callback(callbackInfo);
      return nullptr;
    });
  }

  Callable callback;
  void* data;
};

template <void (*Callback)(const CallbackInfo& info)>
static napi_value
TemplatedVoidCallback(napi_env env, napi_callback_info info) NAPI_NOEXCEPT {
  return details::WrapCallback([&] {
    CallbackInfo cbInfo(env, info);
    Callback(cbInfo);
    return nullptr;
  });
}

template <Napi::Value (*Callback)(const CallbackInfo& info)>
static napi_value
TemplatedCallback(napi_env env, napi_callback_info info) NAPI_NOEXCEPT {
  return details::WrapCallback([&] {
    CallbackInfo cbInfo(env, info);
    return Callback(cbInfo);
  });
}

template <typename T,
          Napi::Value (T::*UnwrapCallback)(const CallbackInfo& info)>
static napi_value
TemplatedInstanceCallback(napi_env env, napi_callback_info info) NAPI_NOEXCEPT {
  return details::WrapCallback([&] {
    CallbackInfo cbInfo(env, info);
    T* instance = T::Unwrap(cbInfo.This().As<Object>());
    return (instance->*UnwrapCallback)(cbInfo);
  });
}

template <typename T, void (T::*UnwrapCallback)(const CallbackInfo& info)>
static napi_value
TemplatedInstanceVoidCallback(napi_env env,
                              napi_callback_info info) NAPI_NOEXCEPT {
  return details::WrapCallback([&] {
    CallbackInfo cbInfo(env, info);
    T* instance = T::Unwrap(cbInfo.This().As<Object>());
    (instance->*UnwrapCallback)(cbInfo);
    return nullptr;
  });
}

template <typename T, typename Finalizer, typename Hint = void>
struct FinalizeData {
  static inline void Wrapper(napi_env env,
                             void* data,
                             void* finalizeHint) NAPI_NOEXCEPT {
    WrapVoidCallback([&] {
      FinalizeData* finalizeData = static_cast<FinalizeData*>(finalizeHint);
      finalizeData->callback(Env(env), static_cast<T*>(data));
      delete finalizeData;
    });
  }

  static inline void WrapperWithHint(napi_env env,
                                     void* data,
                                     void* finalizeHint) NAPI_NOEXCEPT {
    WrapVoidCallback([&] {
      FinalizeData* finalizeData = static_cast<FinalizeData*>(finalizeHint);
      finalizeData->callback(Env(env), static_cast<T*>(data), finalizeData->hint);
      delete finalizeData;
    });
  }

  Finalizer callback;
  Hint* hint;
};

#if (NAPI_VERSION > 3 && !defined(__wasm32__))
template <typename ContextType=void,
          typename Finalizer=std::function<void(Env, void*, ContextType*)>,
          typename FinalizerDataType=void>
struct ThreadSafeFinalize {
  static inline
  void Wrapper(napi_env env, void* rawFinalizeData, void* /* rawContext */) {
    if (rawFinalizeData == nullptr)
      return;

    ThreadSafeFinalize* finalizeData =
        static_cast<ThreadSafeFinalize*>(rawFinalizeData);
    finalizeData->callback(Env(env));
    delete finalizeData;
  }

  static inline
  void FinalizeWrapperWithData(napi_env env,
                               void* rawFinalizeData,
                               void* /* rawContext */) {
    if (rawFinalizeData == nullptr)
      return;

    ThreadSafeFinalize* finalizeData =
        static_cast<ThreadSafeFinalize*>(rawFinalizeData);
    finalizeData->callback(Env(env), finalizeData->data);
    delete finalizeData;
  }

  static inline
  void FinalizeWrapperWithContext(napi_env env,
                                  void* rawFinalizeData,
                                  void* rawContext) {
    if (rawFinalizeData == nullptr)
      return;

    ThreadSafeFinalize* finalizeData =
        static_cast<ThreadSafeFinalize*>(rawFinalizeData);
    finalizeData->callback(Env(env), static_cast<ContextType*>(rawContext));
    delete finalizeData;
  }

  static inline
  void FinalizeFinalizeWrapperWithDataAndContext(napi_env env,
                                         void* rawFinalizeData,
                                         void* rawContext) {
    if (rawFinalizeData == nullptr)
      return;

    ThreadSafeFinalize* finalizeData =
        static_cast<ThreadSafeFinalize*>(rawFinalizeData);
    finalizeData->callback(Env(env), finalizeData->data,
        static_cast<ContextType*>(rawContext));
    delete finalizeData;
  }

  FinalizerDataType* data;
  Finalizer callback;
};

template <typename ContextType, typename DataType, typename CallJs, CallJs call>
typename std::enable_if<call != nullptr>::type static inline CallJsWrapper(
    napi_env env, napi_value jsCallback, void* context, void* data) {
  call(env,
       Function(env, jsCallback),
       static_cast<ContextType*>(context),
       static_cast<DataType*>(data));
}

template <typename ContextType, typename DataType, typename CallJs, CallJs call>
typename std::enable_if<call == nullptr>::type static inline CallJsWrapper(
    napi_env env, napi_value jsCallback, void* /*context*/, void* /*data*/) {
  if (jsCallback != nullptr) {
    Function(env, jsCallback).Call(0, nullptr);
  }
}

#if NAPI_VERSION > 4

template <typename CallbackType, typename TSFN>
napi_value DefaultCallbackWrapper(napi_env /*env*/, std::nullptr_t /*cb*/) {
  return nullptr;
}

template <typename CallbackType, typename TSFN>
napi_value DefaultCallbackWrapper(napi_env /*env*/, Napi::Function cb) {
  return cb;
}

#else
template <typename CallbackType, typename TSFN>
napi_value DefaultCallbackWrapper(napi_env env, Napi::Function cb) {
  if (cb.IsEmpty()) {
    return TSFN::EmptyFunctionFactory(env);
  }
  return cb;
}
#endif  // NAPI_VERSION > 4
#endif  // NAPI_VERSION > 3 && !defined(__wasm32__)

template <typename Getter, typename Setter>
struct AccessorCallbackData {
  static inline
  napi_value GetterWrapper(napi_env env, napi_callback_info info) {
    return details::WrapCallback([&] {
      CallbackInfo callbackInfo(env, info);
      AccessorCallbackData* callbackData =
        static_cast<AccessorCallbackData*>(callbackInfo.Data());
      callbackInfo.SetData(callbackData->data);
      return callbackData->getterCallback(callbackInfo);
    });
  }

  static inline
  napi_value SetterWrapper(napi_env env, napi_callback_info info) {
    return details::WrapCallback([&] {
      CallbackInfo callbackInfo(env, info);
      AccessorCallbackData* callbackData =
        static_cast<AccessorCallbackData*>(callbackInfo.Data());
      callbackInfo.SetData(callbackData->data);
      callbackData->setterCallback(callbackInfo);
      return nullptr;
    });
  }

  Getter getterCallback;
  Setter setterCallback;
  void* data;
};

}  // namespace details

#ifndef NODE_ADDON_API_DISABLE_DEPRECATED
# include "napi-inl.deprecated.h"
#endif // !NODE_ADDON_API_DISABLE_DEPRECATED

////////////////////////////////////////////////////////////////////////////////
// Module registration
////////////////////////////////////////////////////////////////////////////////

// Register an add-on based on an initializer function.
#define NODE_API_MODULE(modname, regfunc)                                      \
  static napi_value __napi_##regfunc(napi_env env, napi_value exports) {       \
    return Napi::RegisterModule(env, exports, regfunc);                        \
  }                                                                            \
  NAPI_MODULE(modname, __napi_##regfunc)

// Register an add-on based on a subclass of `Addon<T>` with a custom Node.js
// module name.
#define NODE_API_NAMED_ADDON(modname, classname)                 \
  static napi_value __napi_ ## classname(napi_env env,           \
                                         napi_value exports) {   \
    return Napi::RegisterModule(env, exports, &classname::Init); \
  }                                                              \
  NAPI_MODULE(modname, __napi_ ## classname)

// Register an add-on based on a subclass of `Addon<T>` with the Node.js module
// name given by node-gyp from the `target_name` in binding.gyp.
#define NODE_API_ADDON(classname) \
  NODE_API_NAMED_ADDON(NODE_GYP_MODULE_NAME, classname)

// Adapt the NAPI_MODULE registration function:
//  - Wrap the arguments in NAPI wrappers.
//  - Catch any NAPI errors and rethrow as JS exceptions.
inline napi_value RegisterModule(napi_env env,
                                 napi_value exports,
                                 ModuleRegisterCallback registerCallback) {
  return details::WrapCallback([&] {
    return napi_value(registerCallback(Napi::Env(env),
                                       Napi::Object(env, exports)));
  });
}

////////////////////////////////////////////////////////////////////////////////
// Env class
////////////////////////////////////////////////////////////////////////////////

inline Env::Env(napi_env env) : _env(env) {
}

inline Env::operator napi_env() const {
  return _env;
}

inline Object Env::Global() const {
  napi_value value;
  napi_status status = napi_get_global(*this, &value);
  NAPI_THROW_IF_FAILED(*this, status, Object());
  return Object(*this, value);
}

inline Value Env::Undefined() const {
  napi_value value;
  napi_status status = napi_get_undefined(*this, &value);
  NAPI_THROW_IF_FAILED(*this, status, Value());
  return Value(*this, value);
}

inline Value Env::Null() const {
  napi_value value;
  napi_status status = napi_get_null(*this, &value);
  NAPI_THROW_IF_FAILED(*this, status, Value());
  return Value(*this, value);
}

inline bool Env::IsExceptionPending() const {
  bool result;
  napi_status status = napi_is_exception_pending(_env, &result);
  if (status != napi_ok) result = false; // Checking for a pending exception shouldn't throw.
  return result;
}

inline Error Env::GetAndClearPendingException() {
  napi_value value;
  napi_status status = napi_get_and_clear_last_exception(_env, &value);
  if (status != napi_ok) {
    // Don't throw another exception when failing to get the exception!
    return Error();
  }
  return Error(_env, value);
}

inline Value Env::RunScript(const char* utf8script) {
  String script = String::New(_env, utf8script);
  return RunScript(script);
}

inline Value Env::RunScript(const std::string& utf8script) {
  return RunScript(utf8script.c_str());
}

inline Value Env::RunScript(String script) {
  napi_value result;
  napi_status status = napi_run_script(_env, script, &result);
  NAPI_THROW_IF_FAILED(_env, status, Undefined());
  return Value(_env, result);
}

#if NAPI_VERSION > 5
template <typename T, Env::Finalizer<T> fini>
inline void Env::SetInstanceData(T* data) {
  napi_status status =
    napi_set_instance_data(_env, data, [](napi_env env, void* data, void*) {
      fini(env, static_cast<T*>(data));
    }, nullptr);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

template <typename DataType,
          typename HintType,
          Napi::Env::FinalizerWithHint<DataType, HintType> fini>
inline void Env::SetInstanceData(DataType* data, HintType* hint) {
  napi_status status =
    napi_set_instance_data(_env, data,
      [](napi_env env, void* data, void* hint) {
        fini(env, static_cast<DataType*>(data), static_cast<HintType*>(hint));
      }, hint);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

template <typename T>
inline T* Env::GetInstanceData() {
  void* data = nullptr;

  napi_status status = napi_get_instance_data(_env, &data);
  NAPI_THROW_IF_FAILED(_env, status, nullptr);

  return static_cast<T*>(data);
}

template <typename T> void Env::DefaultFini(Env, T* data) {
  delete data;
}

template <typename DataType, typename HintType>
void Env::DefaultFiniWithHint(Env, DataType* data, HintType*) {
  delete data;
}
#endif  // NAPI_VERSION > 5

////////////////////////////////////////////////////////////////////////////////
// Value class
////////////////////////////////////////////////////////////////////////////////

inline Value::Value() : _env(nullptr), _value(nullptr) {
}

inline Value::Value(napi_env env, napi_value value) : _env(env), _value(value) {
}

inline Value::operator napi_value() const {
  return _value;
}

inline bool Value::operator ==(const Value& other) const {
  return StrictEquals(other);
}

inline bool Value::operator !=(const Value& other) const {
  return !this->operator ==(other);
}

inline bool Value::StrictEquals(const Value& other) const {
  bool result;
  napi_status status = napi_strict_equals(_env, *this, other, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline Napi::Env Value::Env() const {
  return Napi::Env(_env);
}

inline bool Value::IsEmpty() const {
  return _value == nullptr;
}

inline napi_valuetype Value::Type() const {
  if (IsEmpty()) {
    return napi_undefined;
  }

  napi_valuetype type;
  napi_status status = napi_typeof(_env, _value, &type);
  NAPI_THROW_IF_FAILED(_env, status, napi_undefined);
  return type;
}

inline bool Value::IsUndefined() const {
  return Type() == napi_undefined;
}

inline bool Value::IsNull() const {
  return Type() == napi_null;
}

inline bool Value::IsBoolean() const {
  return Type() == napi_boolean;
}

inline bool Value::IsNumber() const {
  return Type() == napi_number;
}

#if NAPI_VERSION > 5
inline bool Value::IsBigInt() const {
  return Type() == napi_bigint;
}
#endif  // NAPI_VERSION > 5

#if (NAPI_VERSION > 4)
inline bool Value::IsDate() const {
  if (IsEmpty()) {
    return false;
  }

  bool result;
  napi_status status = napi_is_date(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}
#endif

inline bool Value::IsString() const {
  return Type() == napi_string;
}

inline bool Value::IsSymbol() const {
  return Type() == napi_symbol;
}

inline bool Value::IsArray() const {
  if (IsEmpty()) {
    return false;
  }

  bool result;
  napi_status status = napi_is_array(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Value::IsArrayBuffer() const {
  if (IsEmpty()) {
    return false;
  }

  bool result;
  napi_status status = napi_is_arraybuffer(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Value::IsTypedArray() const {
  if (IsEmpty()) {
    return false;
  }

  bool result;
  napi_status status = napi_is_typedarray(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Value::IsObject() const {
  return Type() == napi_object || IsFunction();
}

inline bool Value::IsFunction() const {
  return Type() == napi_function;
}

inline bool Value::IsPromise() const {
  if (IsEmpty()) {
    return false;
  }

  bool result;
  napi_status status = napi_is_promise(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Value::IsDataView() const {
  if (IsEmpty()) {
    return false;
  }

  bool result;
  napi_status status = napi_is_dataview(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Value::IsBuffer() const {
  if (IsEmpty()) {
    return false;
  }

  bool result;
  napi_status status = napi_is_buffer(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Value::IsExternal() const {
  return Type() == napi_external;
}

template <typename T>
inline T Value::As() const {
  return T(_env, _value);
}

inline Boolean Value::ToBoolean() const {
  napi_value result;
  napi_status status = napi_coerce_to_bool(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, Boolean());
  return Boolean(_env, result);
}

inline Number Value::ToNumber() const {
  napi_value result;
  napi_status status = napi_coerce_to_number(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, Number());
  return Number(_env, result);
}

inline String Value::ToString() const {
  napi_value result;
  napi_status status = napi_coerce_to_string(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, String());
  return String(_env, result);
}

inline Object Value::ToObject() const {
  napi_value result;
  napi_status status = napi_coerce_to_object(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, Object());
  return Object(_env, result);
}

////////////////////////////////////////////////////////////////////////////////
// Boolean class
////////////////////////////////////////////////////////////////////////////////

inline Boolean Boolean::New(napi_env env, bool val) {
  napi_value value;
  napi_status status = napi_get_boolean(env, val, &value);
  NAPI_THROW_IF_FAILED(env, status, Boolean());
  return Boolean(env, value);
}

inline Boolean::Boolean() : Napi::Value() {
}

inline Boolean::Boolean(napi_env env, napi_value value) : Napi::Value(env, value) {
}

inline Boolean::operator bool() const {
  return Value();
}

inline bool Boolean::Value() const {
  bool result;
  napi_status status = napi_get_value_bool(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

////////////////////////////////////////////////////////////////////////////////
// Number class
////////////////////////////////////////////////////////////////////////////////

inline Number Number::New(napi_env env, double val) {
  napi_value value;
  napi_status status = napi_create_double(env, val, &value);
  NAPI_THROW_IF_FAILED(env, status, Number());
  return Number(env, value);
}

inline Number::Number() : Value() {
}

inline Number::Number(napi_env env, napi_value value) : Value(env, value) {
}

inline Number::operator int32_t() const {
  return Int32Value();
}

inline Number::operator uint32_t() const {
  return Uint32Value();
}

inline Number::operator int64_t() const {
  return Int64Value();
}

inline Number::operator float() const {
  return FloatValue();
}

inline Number::operator double() const {
  return DoubleValue();
}

inline int32_t Number::Int32Value() const {
  int32_t result;
  napi_status status = napi_get_value_int32(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return result;
}

inline uint32_t Number::Uint32Value() const {
  uint32_t result;
  napi_status status = napi_get_value_uint32(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return result;
}

inline int64_t Number::Int64Value() const {
  int64_t result;
  napi_status status = napi_get_value_int64(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return result;
}

inline float Number::FloatValue() const {
  return static_cast<float>(DoubleValue());
}

inline double Number::DoubleValue() const {
  double result;
  napi_status status = napi_get_value_double(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return result;
}

#if NAPI_VERSION > 5
////////////////////////////////////////////////////////////////////////////////
// BigInt Class
////////////////////////////////////////////////////////////////////////////////

inline BigInt BigInt::New(napi_env env, int64_t val) {
  napi_value value;
  napi_status status = napi_create_bigint_int64(env, val, &value);
  NAPI_THROW_IF_FAILED(env, status, BigInt());
  return BigInt(env, value);
}

inline BigInt BigInt::New(napi_env env, uint64_t val) {
  napi_value value;
  napi_status status = napi_create_bigint_uint64(env, val, &value);
  NAPI_THROW_IF_FAILED(env, status, BigInt());
  return BigInt(env, value);
}

inline BigInt BigInt::New(napi_env env, int sign_bit, size_t word_count, const uint64_t* words) {
  napi_value value;
  napi_status status = napi_create_bigint_words(env, sign_bit, word_count, words, &value);
  NAPI_THROW_IF_FAILED(env, status, BigInt());
  return BigInt(env, value);
}

inline BigInt::BigInt() : Value() {
}

inline BigInt::BigInt(napi_env env, napi_value value) : Value(env, value) {
}

inline int64_t BigInt::Int64Value(bool* lossless) const {
  int64_t result;
  napi_status status = napi_get_value_bigint_int64(
      _env, _value, &result, lossless);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return result;
}

inline uint64_t BigInt::Uint64Value(bool* lossless) const {
  uint64_t result;
  napi_status status = napi_get_value_bigint_uint64(
      _env, _value, &result, lossless);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return result;
}

inline size_t BigInt::WordCount() const {
  size_t word_count;
  napi_status status = napi_get_value_bigint_words(
      _env, _value, nullptr, &word_count, nullptr);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return word_count;
}

inline void BigInt::ToWords(int* sign_bit, size_t* word_count, uint64_t* words) {
  napi_status status = napi_get_value_bigint_words(
      _env, _value, sign_bit, word_count, words);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}
#endif  // NAPI_VERSION > 5

#if (NAPI_VERSION > 4)
////////////////////////////////////////////////////////////////////////////////
// Date Class
////////////////////////////////////////////////////////////////////////////////

inline Date Date::New(napi_env env, double val) {
  napi_value value;
  napi_status status = napi_create_date(env, val, &value);
  NAPI_THROW_IF_FAILED(env, status, Date());
  return Date(env, value);
}

inline Date::Date() : Value() {
}

inline Date::Date(napi_env env, napi_value value) : Value(env, value) {
}

inline Date::operator double() const {
  return ValueOf();
}

inline double Date::ValueOf() const {
  double result;
  napi_status status = napi_get_date_value(
      _env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return result;
}
#endif

////////////////////////////////////////////////////////////////////////////////
// Name class
////////////////////////////////////////////////////////////////////////////////

inline Name::Name() : Value() {
}

inline Name::Name(napi_env env, napi_value value) : Value(env, value) {
}

////////////////////////////////////////////////////////////////////////////////
// String class
////////////////////////////////////////////////////////////////////////////////

inline String String::New(napi_env env, const std::string& val) {
  return String::New(env, val.c_str(), val.size());
}

inline String String::New(napi_env env, const std::u16string& val) {
  return String::New(env, val.c_str(), val.size());
}

inline String String::New(napi_env env, const char* val) {
  napi_value value;
  napi_status status = napi_create_string_utf8(env, val, std::strlen(val), &value);
  NAPI_THROW_IF_FAILED(env, status, String());
  return String(env, value);
}

inline String String::New(napi_env env, const char16_t* val) {
  napi_value value;
  napi_status status = napi_create_string_utf16(env, val, std::u16string(val).size(), &value);
  NAPI_THROW_IF_FAILED(env, status, String());
  return String(env, value);
}

inline String String::New(napi_env env, const char* val, size_t length) {
  napi_value value;
  napi_status status = napi_create_string_utf8(env, val, length, &value);
  NAPI_THROW_IF_FAILED(env, status, String());
  return String(env, value);
}

inline String String::New(napi_env env, const char16_t* val, size_t length) {
  napi_value value;
  napi_status status = napi_create_string_utf16(env, val, length, &value);
  NAPI_THROW_IF_FAILED(env, status, String());
  return String(env, value);
}

inline String::String() : Name() {
}

inline String::String(napi_env env, napi_value value) : Name(env, value) {
}

inline String::operator std::string() const {
  return Utf8Value();
}

inline String::operator std::u16string() const {
  return Utf16Value();
}

inline std::string String::Utf8Value() const {
  size_t length;
  napi_status status = napi_get_value_string_utf8(_env, _value, nullptr, 0, &length);
  NAPI_THROW_IF_FAILED(_env, status, "");

  std::string value;
  value.reserve(length + 1);
  value.resize(length);
  status = napi_get_value_string_utf8(_env, _value, &value[0], value.capacity(), nullptr);
  NAPI_THROW_IF_FAILED(_env, status, "");
  return value;
}

inline std::u16string String::Utf16Value() const {
  size_t length;
  napi_status status = napi_get_value_string_utf16(_env, _value, nullptr, 0, &length);
  NAPI_THROW_IF_FAILED(_env, status, NAPI_WIDE_TEXT(""));

  std::u16string value;
  value.reserve(length + 1);
  value.resize(length);
  status = napi_get_value_string_utf16(_env, _value, &value[0], value.capacity(), nullptr);
  NAPI_THROW_IF_FAILED(_env, status, NAPI_WIDE_TEXT(""));
  return value;
}

////////////////////////////////////////////////////////////////////////////////
// Symbol class
////////////////////////////////////////////////////////////////////////////////

inline Symbol Symbol::New(napi_env env, const char* description) {
  napi_value descriptionValue = description != nullptr ?
    String::New(env, description) : static_cast<napi_value>(nullptr);
  return Symbol::New(env, descriptionValue);
}

inline Symbol Symbol::New(napi_env env, const std::string& description) {
  napi_value descriptionValue = String::New(env, description);
  return Symbol::New(env, descriptionValue);
}

inline Symbol Symbol::New(napi_env env, String description) {
  napi_value descriptionValue = description;
  return Symbol::New(env, descriptionValue);
}

inline Symbol Symbol::New(napi_env env, napi_value description) {
  napi_value value;
  napi_status status = napi_create_symbol(env, description, &value);
  NAPI_THROW_IF_FAILED(env, status, Symbol());
  return Symbol(env, value);
}

inline Symbol Symbol::WellKnown(napi_env env, const std::string& name) {
  return Napi::Env(env).Global().Get("Symbol").As<Object>().Get(name).As<Symbol>();
}

inline Symbol::Symbol() : Name() {
}

inline Symbol::Symbol(napi_env env, napi_value value) : Name(env, value) {
}

////////////////////////////////////////////////////////////////////////////////
// Automagic value creation
////////////////////////////////////////////////////////////////////////////////

namespace details {
template <typename T>
struct vf_number {
  static Number From(napi_env env, T value) {
    return Number::New(env, static_cast<double>(value));
  }
};

template<>
struct vf_number<bool> {
  static Boolean From(napi_env env, bool value) {
    return Boolean::New(env, value);
  }
};

struct vf_utf8_charp {
  static String From(napi_env env, const char* value) {
    return String::New(env, value);
  }
};

struct vf_utf16_charp {
  static String From(napi_env env, const char16_t* value) {
    return String::New(env, value);
  }
};
struct vf_utf8_string {
  static String From(napi_env env, const std::string& value) {
    return String::New(env, value);
  }
};

struct vf_utf16_string {
  static String From(napi_env env, const std::u16string& value) {
    return String::New(env, value);
  }
};

template <typename T>
struct vf_fallback {
  static Value From(napi_env env, const T& value) {
    return Value(env, value);
  }
};

template <typename...> struct disjunction : std::false_type {};
template <typename B> struct disjunction<B> : B {};
template <typename B, typename... Bs>
struct disjunction<B, Bs...>
    : std::conditional<bool(B::value), B, disjunction<Bs...>>::type {};

template <typename T>
struct can_make_string
    : disjunction<typename std::is_convertible<T, const char *>::type,
                  typename std::is_convertible<T, const char16_t *>::type,
                  typename std::is_convertible<T, std::string>::type,
                  typename std::is_convertible<T, std::u16string>::type> {};
}

template <typename T>
Value Value::From(napi_env env, const T& value) {
  using Helper = typename std::conditional<
    std::is_integral<T>::value || std::is_floating_point<T>::value,
    details::vf_number<T>,
    typename std::conditional<
      details::can_make_string<T>::value,
      String,
      details::vf_fallback<T>
    >::type
  >::type;
  return Helper::From(env, value);
}

template <typename T>
String String::From(napi_env env, const T& value) {
  struct Dummy {};
  using Helper = typename std::conditional<
    std::is_convertible<T, const char*>::value,
    details::vf_utf8_charp,
    typename std::conditional<
      std::is_convertible<T, const char16_t*>::value,
      details::vf_utf16_charp,
      typename std::conditional<
        std::is_convertible<T, std::string>::value,
        details::vf_utf8_string,
        typename std::conditional<
          std::is_convertible<T, std::u16string>::value,
          details::vf_utf16_string,
          Dummy
        >::type
      >::type
    >::type
  >::type;
  return Helper::From(env, value);
}

////////////////////////////////////////////////////////////////////////////////
// Object class
////////////////////////////////////////////////////////////////////////////////

template <typename Key>
inline Object::PropertyLValue<Key>::operator Value() const {
  return Object(_env, _object).Get(_key);
}

template <typename Key> template <typename ValueType>
inline Object::PropertyLValue<Key>& Object::PropertyLValue<Key>::operator =(ValueType value) {
  Object(_env, _object).Set(_key, value);
  return *this;
}

template <typename Key>
inline Object::PropertyLValue<Key>::PropertyLValue(Object object, Key key)
  : _env(object.Env()), _object(object), _key(key) {}

inline Object Object::New(napi_env env) {
  napi_value value;
  napi_status status = napi_create_object(env, &value);
  NAPI_THROW_IF_FAILED(env, status, Object());
  return Object(env, value);
}

inline Object::Object() : Value() {
}

inline Object::Object(napi_env env, napi_value value) : Value(env, value) {
}

inline Object::PropertyLValue<std::string> Object::operator [](const char* utf8name) {
  return PropertyLValue<std::string>(*this, utf8name);
}

inline Object::PropertyLValue<std::string> Object::operator [](const std::string& utf8name) {
  return PropertyLValue<std::string>(*this, utf8name);
}

inline Object::PropertyLValue<uint32_t> Object::operator [](uint32_t index) {
  return PropertyLValue<uint32_t>(*this, index);
}

inline Value Object::operator [](const char* utf8name) const {
  return Get(utf8name);
}

inline Value Object::operator [](const std::string& utf8name) const {
  return Get(utf8name);
}

inline Value Object::operator [](uint32_t index) const {
  return Get(index);
}

inline bool Object::Has(napi_value key) const {
  bool result;
  napi_status status = napi_has_property(_env, _value, key, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Object::Has(Value key) const {
  bool result;
  napi_status status = napi_has_property(_env, _value, key, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Object::Has(const char* utf8name) const {
  bool result;
  napi_status status = napi_has_named_property(_env, _value, utf8name, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Object::Has(const std::string& utf8name) const {
  return Has(utf8name.c_str());
}

inline bool Object::HasOwnProperty(napi_value key) const {
  bool result;
  napi_status status = napi_has_own_property(_env, _value, key, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Object::HasOwnProperty(Value key) const {
  bool result;
  napi_status status = napi_has_own_property(_env, _value, key, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Object::HasOwnProperty(const char* utf8name) const {
  napi_value key;
  napi_status status = napi_create_string_utf8(_env, utf8name, std::strlen(utf8name), &key);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return HasOwnProperty(key);
}

inline bool Object::HasOwnProperty(const std::string& utf8name) const {
  return HasOwnProperty(utf8name.c_str());
}

inline Value Object::Get(napi_value key) const {
  napi_value result;
  napi_status status = napi_get_property(_env, _value, key, &result);
  NAPI_THROW_IF_FAILED(_env, status, Value());
  return Value(_env, result);
}

inline Value Object::Get(Value key) const {
  napi_value result;
  napi_status status = napi_get_property(_env, _value, key, &result);
  NAPI_THROW_IF_FAILED(_env, status, Value());
  return Value(_env, result);
}

inline Value Object::Get(const char* utf8name) const {
  napi_value result;
  napi_status status = napi_get_named_property(_env, _value, utf8name, &result);
  NAPI_THROW_IF_FAILED(_env, status, Value());
  return Value(_env, result);
}

inline Value Object::Get(const std::string& utf8name) const {
  return Get(utf8name.c_str());
}

template <typename ValueType>
inline bool Object::Set(napi_value key, const ValueType& value) {
  napi_status status =
      napi_set_property(_env, _value, key, Value::From(_env, value));
  NAPI_THROW_IF_FAILED(_env, status, false);
  return true;
}

template <typename ValueType>
inline bool Object::Set(Value key, const ValueType& value) {
  napi_status status =
      napi_set_property(_env, _value, key, Value::From(_env, value));
  NAPI_THROW_IF_FAILED(_env, status, false);
  return true;
}

template <typename ValueType>
inline bool Object::Set(const char* utf8name, const ValueType& value) {
  napi_status status =
      napi_set_named_property(_env, _value, utf8name, Value::From(_env, value));
  NAPI_THROW_IF_FAILED(_env, status, false);
  return true;
}

template <typename ValueType>
inline bool Object::Set(const std::string& utf8name, const ValueType& value) {
  return Set(utf8name.c_str(), value);
}

inline bool Object::Delete(napi_value key) {
  bool result;
  napi_status status = napi_delete_property(_env, _value, key, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Object::Delete(Value key) {
  bool result;
  napi_status status = napi_delete_property(_env, _value, key, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline bool Object::Delete(const char* utf8name) {
  return Delete(String::New(_env, utf8name));
}

inline bool Object::Delete(const std::string& utf8name) {
  return Delete(String::New(_env, utf8name));
}

inline bool Object::Has(uint32_t index) const {
  bool result;
  napi_status status = napi_has_element(_env, _value, index, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline Value Object::Get(uint32_t index) const {
  napi_value value;
  napi_status status = napi_get_element(_env, _value, index, &value);
  NAPI_THROW_IF_FAILED(_env, status, Value());
  return Value(_env, value);
}

template <typename ValueType>
inline bool Object::Set(uint32_t index, const ValueType& value) {
  napi_status status =
      napi_set_element(_env, _value, index, Value::From(_env, value));
  NAPI_THROW_IF_FAILED(_env, status, false);
  return true;
}

inline bool Object::Delete(uint32_t index) {
  bool result;
  napi_status status = napi_delete_element(_env, _value, index, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

inline Array Object::GetPropertyNames() const {
  napi_value result;
  napi_status status = napi_get_property_names(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, Array());
  return Array(_env, result);
}

inline bool Object::DefineProperty(const PropertyDescriptor& property) {
  napi_status status = napi_define_properties(_env, _value, 1,
    reinterpret_cast<const napi_property_descriptor*>(&property));
  NAPI_THROW_IF_FAILED(_env, status, false);
  return true;
}

inline bool Object::DefineProperties(
    const std::initializer_list<PropertyDescriptor>& properties) {
  napi_status status = napi_define_properties(_env, _value, properties.size(),
    reinterpret_cast<const napi_property_descriptor*>(properties.begin()));
  NAPI_THROW_IF_FAILED(_env, status, false);
  return true;
}

inline bool Object::DefineProperties(
    const std::vector<PropertyDescriptor>& properties) {
  napi_status status = napi_define_properties(_env, _value, properties.size(),
    reinterpret_cast<const napi_property_descriptor*>(properties.data()));
  NAPI_THROW_IF_FAILED(_env, status, false);
  return true;
}

inline bool Object::InstanceOf(const Function& constructor) const {
  bool result;
  napi_status status = napi_instanceof(_env, _value, constructor, &result);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return result;
}

template <typename Finalizer, typename T>
inline void Object::AddFinalizer(Finalizer finalizeCallback, T* data) {
  details::FinalizeData<T, Finalizer>* finalizeData =
      new details::FinalizeData<T, Finalizer>(
          {std::move(finalizeCallback), nullptr});
  napi_status status =
      details::AttachData(_env,
                          *this,
                          data,
                          details::FinalizeData<T, Finalizer>::Wrapper,
                          finalizeData);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED_VOID(_env, status);
  }
}

template <typename Finalizer, typename T, typename Hint>
inline void Object::AddFinalizer(Finalizer finalizeCallback,
                                 T* data,
                                 Hint* finalizeHint) {
  details::FinalizeData<T, Finalizer, Hint>* finalizeData =
      new details::FinalizeData<T, Finalizer, Hint>(
          {std::move(finalizeCallback), finalizeHint});
  napi_status status =
      details::AttachData(_env,
                          *this,
                          data,
                          details::FinalizeData<T, Finalizer, Hint>::WrapperWithHint,
                          finalizeData);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED_VOID(_env, status);
  }
}

#if NAPI_VERSION >= 8
inline bool Object::Freeze() {
  napi_status status = napi_object_freeze(_env, _value);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return true;
}

inline bool Object::Seal() {
  napi_status status = napi_object_seal(_env, _value);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return true;
}
#endif  // NAPI_VERSION >= 8

////////////////////////////////////////////////////////////////////////////////
// External class
////////////////////////////////////////////////////////////////////////////////

template <typename T>
inline External<T> External<T>::New(napi_env env, T* data) {
  napi_value value;
  napi_status status = napi_create_external(env, data, nullptr, nullptr, &value);
  NAPI_THROW_IF_FAILED(env, status, External());
  return External(env, value);
}

template <typename T>
template <typename Finalizer>
inline External<T> External<T>::New(napi_env env,
                                    T* data,
                                    Finalizer finalizeCallback) {
  napi_value value;
  details::FinalizeData<T, Finalizer>* finalizeData =
      new details::FinalizeData<T, Finalizer>(
          {std::move(finalizeCallback), nullptr});
  napi_status status = napi_create_external(
    env,
    data,
    details::FinalizeData<T, Finalizer>::Wrapper,
    finalizeData,
    &value);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(env, status, External());
  }
  return External(env, value);
}

template <typename T>
template <typename Finalizer, typename Hint>
inline External<T> External<T>::New(napi_env env,
                                    T* data,
                                    Finalizer finalizeCallback,
                                    Hint* finalizeHint) {
  napi_value value;
  details::FinalizeData<T, Finalizer, Hint>* finalizeData =
      new details::FinalizeData<T, Finalizer, Hint>(
          {std::move(finalizeCallback), finalizeHint});
  napi_status status = napi_create_external(
    env,
    data,
    details::FinalizeData<T, Finalizer, Hint>::WrapperWithHint,
    finalizeData,
    &value);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(env, status, External());
  }
  return External(env, value);
}

template <typename T>
inline External<T>::External() : Value() {
}

template <typename T>
inline External<T>::External(napi_env env, napi_value value) : Value(env, value) {
}

template <typename T>
inline T* External<T>::Data() const {
  void* data;
  napi_status status = napi_get_value_external(_env, _value, &data);
  NAPI_THROW_IF_FAILED(_env, status, nullptr);
  return reinterpret_cast<T*>(data);
}

////////////////////////////////////////////////////////////////////////////////
// Array class
////////////////////////////////////////////////////////////////////////////////

inline Array Array::New(napi_env env) {
  napi_value value;
  napi_status status = napi_create_array(env, &value);
  NAPI_THROW_IF_FAILED(env, status, Array());
  return Array(env, value);
}

inline Array Array::New(napi_env env, size_t length) {
  napi_value value;
  napi_status status = napi_create_array_with_length(env, length, &value);
  NAPI_THROW_IF_FAILED(env, status, Array());
  return Array(env, value);
}

inline Array::Array() : Object() {
}

inline Array::Array(napi_env env, napi_value value) : Object(env, value) {
}

inline uint32_t Array::Length() const {
  uint32_t result;
  napi_status status = napi_get_array_length(_env, _value, &result);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return result;
}

////////////////////////////////////////////////////////////////////////////////
// ArrayBuffer class
////////////////////////////////////////////////////////////////////////////////

inline ArrayBuffer ArrayBuffer::New(napi_env env, size_t byteLength) {
  napi_value value;
  void* data;
  napi_status status = napi_create_arraybuffer(env, byteLength, &data, &value);
  NAPI_THROW_IF_FAILED(env, status, ArrayBuffer());

  return ArrayBuffer(env, value);
}

inline ArrayBuffer ArrayBuffer::New(napi_env env,
                                    void* externalData,
                                    size_t byteLength) {
  napi_value value;
  napi_status status = napi_create_external_arraybuffer(
    env, externalData, byteLength, nullptr, nullptr, &value);
  NAPI_THROW_IF_FAILED(env, status, ArrayBuffer());

  return ArrayBuffer(env, value);
}

template <typename Finalizer>
inline ArrayBuffer ArrayBuffer::New(napi_env env,
                                    void* externalData,
                                    size_t byteLength,
                                    Finalizer finalizeCallback) {
  napi_value value;
  details::FinalizeData<void, Finalizer>* finalizeData =
      new details::FinalizeData<void, Finalizer>(
          {std::move(finalizeCallback), nullptr});
  napi_status status = napi_create_external_arraybuffer(
    env,
    externalData,
    byteLength,
    details::FinalizeData<void, Finalizer>::Wrapper,
    finalizeData,
    &value);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(env, status, ArrayBuffer());
  }

  return ArrayBuffer(env, value);
}

template <typename Finalizer, typename Hint>
inline ArrayBuffer ArrayBuffer::New(napi_env env,
                                    void* externalData,
                                    size_t byteLength,
                                    Finalizer finalizeCallback,
                                    Hint* finalizeHint) {
  napi_value value;
  details::FinalizeData<void, Finalizer, Hint>* finalizeData =
      new details::FinalizeData<void, Finalizer, Hint>(
          {std::move(finalizeCallback), finalizeHint});
  napi_status status = napi_create_external_arraybuffer(
    env,
    externalData,
    byteLength,
    details::FinalizeData<void, Finalizer, Hint>::WrapperWithHint,
    finalizeData,
    &value);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(env, status, ArrayBuffer());
  }

  return ArrayBuffer(env, value);
}

inline ArrayBuffer::ArrayBuffer() : Object() {
}

inline ArrayBuffer::ArrayBuffer(napi_env env, napi_value value)
  : Object(env, value) {
}

inline void* ArrayBuffer::Data() {
  void* data;
  napi_status status = napi_get_arraybuffer_info(_env, _value, &data, nullptr);
  NAPI_THROW_IF_FAILED(_env, status, nullptr);
  return data;
}

inline size_t ArrayBuffer::ByteLength() {
  size_t length;
  napi_status status = napi_get_arraybuffer_info(_env, _value, nullptr, &length);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return length;
}

#if NAPI_VERSION >= 7
inline bool ArrayBuffer::IsDetached() const {
  bool detached;
  napi_status status = napi_is_detached_arraybuffer(_env, _value, &detached);
  NAPI_THROW_IF_FAILED(_env, status, false);
  return detached;
}

inline void ArrayBuffer::Detach() {
  napi_status status = napi_detach_arraybuffer(_env, _value);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}
#endif  // NAPI_VERSION >= 7

////////////////////////////////////////////////////////////////////////////////
// DataView class
////////////////////////////////////////////////////////////////////////////////
inline DataView DataView::New(napi_env env,
                              Napi::ArrayBuffer arrayBuffer) {
  return New(env, arrayBuffer, 0, arrayBuffer.ByteLength());
}

inline DataView DataView::New(napi_env env,
                              Napi::ArrayBuffer arrayBuffer,
                              size_t byteOffset) {
  if (byteOffset > arrayBuffer.ByteLength()) {
    NAPI_THROW(RangeError::New(env,
        "Start offset is outside the bounds of the buffer"),
        DataView());
  }
  return New(env, arrayBuffer, byteOffset,
      arrayBuffer.ByteLength() - byteOffset);
}

inline DataView DataView::New(napi_env env,
                              Napi::ArrayBuffer arrayBuffer,
                              size_t byteOffset,
                              size_t byteLength) {
  if (byteOffset + byteLength > arrayBuffer.ByteLength()) {
    NAPI_THROW(RangeError::New(env, "Invalid DataView length"),
               DataView());
  }
  napi_value value;
  napi_status status = napi_create_dataview(
    env, byteLength, arrayBuffer, byteOffset, &value);
  NAPI_THROW_IF_FAILED(env, status, DataView());
  return DataView(env, value);
}

inline DataView::DataView() : Object() {
}

inline DataView::DataView(napi_env env, napi_value value) : Object(env, value) {
  napi_status status = napi_get_dataview_info(
    _env,
    _value   /* dataView */,
    &_length /* byteLength */,
    &_data   /* data */,
    nullptr  /* arrayBuffer */,
    nullptr  /* byteOffset */);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline Napi::ArrayBuffer DataView::ArrayBuffer() const {
  napi_value arrayBuffer;
  napi_status status = napi_get_dataview_info(
    _env,
    _value       /* dataView */,
    nullptr      /* byteLength */,
    nullptr      /* data */,
    &arrayBuffer /* arrayBuffer */,
    nullptr      /* byteOffset */);
  NAPI_THROW_IF_FAILED(_env, status, Napi::ArrayBuffer());
  return Napi::ArrayBuffer(_env, arrayBuffer);
}

inline size_t DataView::ByteOffset() const {
  size_t byteOffset;
  napi_status status = napi_get_dataview_info(
    _env,
    _value      /* dataView */,
    nullptr     /* byteLength */,
    nullptr     /* data */,
    nullptr     /* arrayBuffer */,
    &byteOffset /* byteOffset */);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return byteOffset;
}

inline size_t DataView::ByteLength() const {
  return _length;
}

inline void* DataView::Data() const {
  return _data;
}

inline float DataView::GetFloat32(size_t byteOffset) const {
  return ReadData<float>(byteOffset);
}

inline double DataView::GetFloat64(size_t byteOffset) const {
  return ReadData<double>(byteOffset);
}

inline int8_t DataView::GetInt8(size_t byteOffset) const {
  return ReadData<int8_t>(byteOffset);
}

inline int16_t DataView::GetInt16(size_t byteOffset) const {
  return ReadData<int16_t>(byteOffset);
}

inline int32_t DataView::GetInt32(size_t byteOffset) const {
  return ReadData<int32_t>(byteOffset);
}

inline uint8_t DataView::GetUint8(size_t byteOffset) const {
  return ReadData<uint8_t>(byteOffset);
}

inline uint16_t DataView::GetUint16(size_t byteOffset) const {
  return ReadData<uint16_t>(byteOffset);
}

inline uint32_t DataView::GetUint32(size_t byteOffset) const {
  return ReadData<uint32_t>(byteOffset);
}

inline void DataView::SetFloat32(size_t byteOffset, float value) const {
  WriteData<float>(byteOffset, value);
}

inline void DataView::SetFloat64(size_t byteOffset, double value) const {
  WriteData<double>(byteOffset, value);
}

inline void DataView::SetInt8(size_t byteOffset, int8_t value) const {
  WriteData<int8_t>(byteOffset, value);
}

inline void DataView::SetInt16(size_t byteOffset, int16_t value) const {
  WriteData<int16_t>(byteOffset, value);
}

inline void DataView::SetInt32(size_t byteOffset, int32_t value) const {
  WriteData<int32_t>(byteOffset, value);
}

inline void DataView::SetUint8(size_t byteOffset, uint8_t value) const {
  WriteData<uint8_t>(byteOffset, value);
}

inline void DataView::SetUint16(size_t byteOffset, uint16_t value) const {
  WriteData<uint16_t>(byteOffset, value);
}

inline void DataView::SetUint32(size_t byteOffset, uint32_t value) const {
  WriteData<uint32_t>(byteOffset, value);
}

template <typename T>
inline T DataView::ReadData(size_t byteOffset) const {
  if (byteOffset + sizeof(T) > _length ||
      byteOffset + sizeof(T) < byteOffset) {  // overflow
    NAPI_THROW(RangeError::New(_env,
        "Offset is outside the bounds of the DataView"), 0);
  }

  return *reinterpret_cast<T*>(static_cast<uint8_t*>(_data) + byteOffset);
}

template <typename T>
inline void DataView::WriteData(size_t byteOffset, T value) const {
  if (byteOffset + sizeof(T) > _length ||
      byteOffset + sizeof(T) < byteOffset) {  // overflow
    NAPI_THROW_VOID(RangeError::New(_env,
        "Offset is outside the bounds of the DataView"));
  }

  *reinterpret_cast<T*>(static_cast<uint8_t*>(_data) + byteOffset) = value;
}

////////////////////////////////////////////////////////////////////////////////
// TypedArray class
////////////////////////////////////////////////////////////////////////////////

inline TypedArray::TypedArray()
  : Object(), _type(TypedArray::unknown_array_type), _length(0) {
}

inline TypedArray::TypedArray(napi_env env, napi_value value)
  : Object(env, value), _type(TypedArray::unknown_array_type), _length(0) {
}

inline TypedArray::TypedArray(napi_env env,
                              napi_value value,
                              napi_typedarray_type type,
                              size_t length)
  : Object(env, value), _type(type), _length(length) {
}

inline napi_typedarray_type TypedArray::TypedArrayType() const {
  if (_type == TypedArray::unknown_array_type) {
    napi_status status = napi_get_typedarray_info(_env, _value,
      &const_cast<TypedArray*>(this)->_type, &const_cast<TypedArray*>(this)->_length,
      nullptr, nullptr, nullptr);
    NAPI_THROW_IF_FAILED(_env, status, napi_int8_array);
  }

  return _type;
}

inline uint8_t TypedArray::ElementSize() const {
  switch (TypedArrayType()) {
    case napi_int8_array:
    case napi_uint8_array:
    case napi_uint8_clamped_array:
      return 1;
    case napi_int16_array:
    case napi_uint16_array:
      return 2;
    case napi_int32_array:
    case napi_uint32_array:
    case napi_float32_array:
      return 4;
    case napi_float64_array:
#if (NAPI_VERSION > 5)
    case napi_bigint64_array:
    case napi_biguint64_array:
#endif  // (NAPI_VERSION > 5)
      return 8;
    default:
      return 0;
  }
}

inline size_t TypedArray::ElementLength() const {
  if (_type == TypedArray::unknown_array_type) {
    napi_status status = napi_get_typedarray_info(_env, _value,
      &const_cast<TypedArray*>(this)->_type, &const_cast<TypedArray*>(this)->_length,
      nullptr, nullptr, nullptr);
    NAPI_THROW_IF_FAILED(_env, status, 0);
  }

  return _length;
}

inline size_t TypedArray::ByteOffset() const {
  size_t byteOffset;
  napi_status status = napi_get_typedarray_info(
    _env, _value, nullptr, nullptr, nullptr, nullptr, &byteOffset);
  NAPI_THROW_IF_FAILED(_env, status, 0);
  return byteOffset;
}

inline size_t TypedArray::ByteLength() const {
  return ElementSize() * ElementLength();
}

inline Napi::ArrayBuffer TypedArray::ArrayBuffer() const {
  napi_value arrayBuffer;
  napi_status status = napi_get_typedarray_info(
    _env, _value, nullptr, nullptr, nullptr, &arrayBuffer, nullptr);
  NAPI_THROW_IF_FAILED(_env, status, Napi::ArrayBuffer());
  return Napi::ArrayBuffer(_env, arrayBuffer);
}

////////////////////////////////////////////////////////////////////////////////
// TypedArrayOf<T> class
////////////////////////////////////////////////////////////////////////////////

template <typename T>
inline TypedArrayOf<T> TypedArrayOf<T>::New(napi_env env,
                                            size_t elementLength,
                                            napi_typedarray_type type) {
  Napi::ArrayBuffer arrayBuffer = Napi::ArrayBuffer::New(env, elementLength * sizeof (T));
  return New(env, elementLength, arrayBuffer, 0, type);
}

template <typename T>
inline TypedArrayOf<T> TypedArrayOf<T>::New(napi_env env,
                                            size_t elementLength,
                                            Napi::ArrayBuffer arrayBuffer,
                                            size_t bufferOffset,
                                            napi_typedarray_type type) {
  napi_value value;
  napi_status status = napi_create_typedarray(
    env, type, elementLength, arrayBuffer, bufferOffset, &value);
  NAPI_THROW_IF_FAILED(env, status, TypedArrayOf<T>());

  return TypedArrayOf<T>(
    env, value, type, elementLength,
    reinterpret_cast<T*>(reinterpret_cast<uint8_t*>(arrayBuffer.Data()) + bufferOffset));
}

template <typename T>
inline TypedArrayOf<T>::TypedArrayOf() : TypedArray(), _data(nullptr) {
}

template <typename T>
inline TypedArrayOf<T>::TypedArrayOf(napi_env env, napi_value value)
  : TypedArray(env, value), _data(nullptr) {
  napi_status status = napi_ok;
  if (value != nullptr) {
    status = napi_get_typedarray_info(
      _env, _value, &_type, &_length, reinterpret_cast<void**>(&_data), nullptr, nullptr);
  } else {
    _type = TypedArrayTypeForPrimitiveType<T>();
    _length = 0;
  }
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

template <typename T>
inline TypedArrayOf<T>::TypedArrayOf(napi_env env,
                                     napi_value value,
                                     napi_typedarray_type type,
                                     size_t length,
                                     T* data)
  : TypedArray(env, value, type, length), _data(data) {
  if (!(type == TypedArrayTypeForPrimitiveType<T>() ||
      (type == napi_uint8_clamped_array && std::is_same<T, uint8_t>::value))) {
    NAPI_THROW_VOID(TypeError::New(env, "Array type must match the template parameter. "
      "(Uint8 arrays may optionally have the \"clamped\" array type.)"));
  }
}

template <typename T>
inline T& TypedArrayOf<T>::operator [](size_t index) {
  return _data[index];
}

template <typename T>
inline const T& TypedArrayOf<T>::operator [](size_t index) const {
  return _data[index];
}

template <typename T>
inline T* TypedArrayOf<T>::Data() {
  return _data;
}

template <typename T>
inline const T* TypedArrayOf<T>::Data() const {
  return _data;
}

////////////////////////////////////////////////////////////////////////////////
// Function class
////////////////////////////////////////////////////////////////////////////////

template <typename CbData>
static inline napi_status
CreateFunction(napi_env env,
               const char* utf8name,
               napi_callback cb,
               CbData* data,
               napi_value* result) {
  napi_status status =
      napi_create_function(env, utf8name, NAPI_AUTO_LENGTH, cb, data, result);
  if (status == napi_ok) {
    status = Napi::details::AttachData(env, *result, data);
  }

  return status;
}

template <Function::VoidCallback cb>
inline Function Function::New(napi_env env, const char* utf8name, void* data) {
  napi_value result = nullptr;
  napi_status status = napi_create_function(env,
                                            utf8name,
                                            NAPI_AUTO_LENGTH,
                                            details::TemplatedVoidCallback<cb>,
                                            data,
                                            &result);
  NAPI_THROW_IF_FAILED(env, status, Function());
  return Function(env, result);
}

template <Function::Callback cb>
inline Function Function::New(napi_env env, const char* utf8name, void* data) {
  napi_value result = nullptr;
  napi_status status = napi_create_function(env,
                                            utf8name,
                                            NAPI_AUTO_LENGTH,
                                            details::TemplatedCallback<cb>,
                                            data,
                                            &result);
  NAPI_THROW_IF_FAILED(env, status, Function());
  return Function(env, result);
}

template <Function::VoidCallback cb>
inline Function Function::New(napi_env env,
                              const std::string& utf8name,
                              void* data) {
  return Function::New<cb>(env, utf8name.c_str(), data);
}

template <Function::Callback cb>
inline Function Function::New(napi_env env,
                              const std::string& utf8name,
                              void* data) {
  return Function::New<cb>(env, utf8name.c_str(), data);
}

template <typename Callable>
inline Function Function::New(napi_env env,
                              Callable cb,
                              const char* utf8name,
                              void* data) {
  using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr)));
  using CbData = details::CallbackData<Callable, ReturnType>;
  auto callbackData = new CbData({ cb, data });

  napi_value value;
  napi_status status = CreateFunction(env,
                                      utf8name,
                                      CbData::Wrapper,
                                      callbackData,
                                      &value);
  if (status != napi_ok) {
    delete callbackData;
    NAPI_THROW_IF_FAILED(env, status, Function());
  }

  return Function(env, value);
}

template <typename Callable>
inline Function Function::New(napi_env env,
                              Callable cb,
                              const std::string& utf8name,
                              void* data) {
  return New(env, cb, utf8name.c_str(), data);
}

inline Function::Function() : Object() {
}

inline Function::Function(napi_env env, napi_value value) : Object(env, value) {
}

inline Value Function::operator ()(const std::initializer_list<napi_value>& args) const {
  return Call(Env().Undefined(), args);
}

inline Value Function::Call(const std::initializer_list<napi_value>& args) const {
  return Call(Env().Undefined(), args);
}

inline Value Function::Call(const std::vector<napi_value>& args) const {
  return Call(Env().Undefined(), args);
}

inline Value Function::Call(size_t argc, const napi_value* args) const {
  return Call(Env().Undefined(), argc, args);
}

inline Value Function::Call(napi_value recv, const std::initializer_list<napi_value>& args) const {
  return Call(recv, args.size(), args.begin());
}

inline Value Function::Call(napi_value recv, const std::vector<napi_value>& args) const {
  return Call(recv, args.size(), args.data());
}

inline Value Function::Call(napi_value recv, size_t argc, const napi_value* args) const {
  napi_value result;
  napi_status status = napi_call_function(
    _env, recv, _value, argc, args, &result);
  NAPI_THROW_IF_FAILED(_env, status, Value());
  return Value(_env, result);
}

inline Value Function::MakeCallback(
    napi_value recv,
    const std::initializer_list<napi_value>& args,
    napi_async_context context) const {
  return MakeCallback(recv, args.size(), args.begin(), context);
}

inline Value Function::MakeCallback(
    napi_value recv,
    const std::vector<napi_value>& args,
    napi_async_context context) const {
  return MakeCallback(recv, args.size(), args.data(), context);
}

inline Value Function::MakeCallback(
    napi_value recv,
    size_t argc,
    const napi_value* args,
    napi_async_context context) const {
  napi_value result;
  napi_status status = napi_make_callback(
    _env, context, recv, _value, argc, args, &result);
  NAPI_THROW_IF_FAILED(_env, status, Value());
  return Value(_env, result);
}

inline Object Function::New(const std::initializer_list<napi_value>& args) const {
  return New(args.size(), args.begin());
}

inline Object Function::New(const std::vector<napi_value>& args) const {
  return New(args.size(), args.data());
}

inline Object Function::New(size_t argc, const napi_value* args) const {
  napi_value result;
  napi_status status = napi_new_instance(
    _env, _value, argc, args, &result);
  NAPI_THROW_IF_FAILED(_env, status, Object());
  return Object(_env, result);
}

////////////////////////////////////////////////////////////////////////////////
// Promise class
////////////////////////////////////////////////////////////////////////////////

inline Promise::Deferred Promise::Deferred::New(napi_env env) {
  return Promise::Deferred(env);
}

inline Promise::Deferred::Deferred(napi_env env) : _env(env) {
  napi_status status = napi_create_promise(_env, &_deferred, &_promise);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline Promise Promise::Deferred::Promise() const {
  return Napi::Promise(_env, _promise);
}

inline Napi::Env Promise::Deferred::Env() const {
  return Napi::Env(_env);
}

inline void Promise::Deferred::Resolve(napi_value value) const {
  napi_status status = napi_resolve_deferred(_env, _deferred, value);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline void Promise::Deferred::Reject(napi_value value) const {
  napi_status status = napi_reject_deferred(_env, _deferred, value);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline Promise::Promise(napi_env env, napi_value value) : Object(env, value) {
}

////////////////////////////////////////////////////////////////////////////////
// Buffer<T> class
////////////////////////////////////////////////////////////////////////////////

template <typename T>
inline Buffer<T> Buffer<T>::New(napi_env env, size_t length) {
  napi_value value;
  void* data;
  napi_status status = napi_create_buffer(env, length * sizeof (T), &data, &value);
  NAPI_THROW_IF_FAILED(env, status, Buffer<T>());
  return Buffer(env, value, length, static_cast<T*>(data));
}

template <typename T>
inline Buffer<T> Buffer<T>::New(napi_env env, T* data, size_t length) {
  napi_value value;
  napi_status status = napi_create_external_buffer(
    env, length * sizeof (T), data, nullptr, nullptr, &value);
  NAPI_THROW_IF_FAILED(env, status, Buffer<T>());
  return Buffer(env, value, length, data);
}

template <typename T>
template <typename Finalizer>
inline Buffer<T> Buffer<T>::New(napi_env env,
                                T* data,
                                size_t length,
                                Finalizer finalizeCallback) {
  napi_value value;
  details::FinalizeData<T, Finalizer>* finalizeData =
      new details::FinalizeData<T, Finalizer>(
          {std::move(finalizeCallback), nullptr});
  napi_status status = napi_create_external_buffer(
    env,
    length * sizeof (T),
    data,
    details::FinalizeData<T, Finalizer>::Wrapper,
    finalizeData,
    &value);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(env, status, Buffer());
  }
  return Buffer(env, value, length, data);
}

template <typename T>
template <typename Finalizer, typename Hint>
inline Buffer<T> Buffer<T>::New(napi_env env,
                                T* data,
                                size_t length,
                                Finalizer finalizeCallback,
                                Hint* finalizeHint) {
  napi_value value;
  details::FinalizeData<T, Finalizer, Hint>* finalizeData =
      new details::FinalizeData<T, Finalizer, Hint>(
          {std::move(finalizeCallback), finalizeHint});
  napi_status status = napi_create_external_buffer(
    env,
    length * sizeof (T),
    data,
    details::FinalizeData<T, Finalizer, Hint>::WrapperWithHint,
    finalizeData,
    &value);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(env, status, Buffer());
  }
  return Buffer(env, value, length, data);
}

template <typename T>
inline Buffer<T> Buffer<T>::Copy(napi_env env, const T* data, size_t length) {
  napi_value value;
  napi_status status = napi_create_buffer_copy(
    env, length * sizeof (T), data, nullptr, &value);
  NAPI_THROW_IF_FAILED(env, status, Buffer<T>());
  return Buffer<T>(env, value);
}

template <typename T>
inline Buffer<T>::Buffer() : Uint8Array(), _length(0), _data(nullptr) {
}

template <typename T>
inline Buffer<T>::Buffer(napi_env env, napi_value value)
  : Uint8Array(env, value), _length(0), _data(nullptr) {
}

template <typename T>
inline Buffer<T>::Buffer(napi_env env, napi_value value, size_t length, T* data)
  : Uint8Array(env, value), _length(length), _data(data) {
}

template <typename T>
inline size_t Buffer<T>::Length() const {
  EnsureInfo();
  return _length;
}

template <typename T>
inline T* Buffer<T>::Data() const {
  EnsureInfo();
  return _data;
}

template <typename T>
inline void Buffer<T>::EnsureInfo() const {
  // The Buffer instance may have been constructed from a napi_value whose
  // length/data are not yet known. Fetch and cache these values just once,
  // since they can never change during the lifetime of the Buffer.
  if (_data == nullptr) {
    size_t byteLength;
    void* voidData;
    napi_status status = napi_get_buffer_info(_env, _value, &voidData, &byteLength);
    NAPI_THROW_IF_FAILED_VOID(_env, status);
    _length = byteLength / sizeof (T);
    _data = static_cast<T*>(voidData);
  }
}

////////////////////////////////////////////////////////////////////////////////
// Error class
////////////////////////////////////////////////////////////////////////////////

inline Error Error::New(napi_env env) {
  napi_status status;
  napi_value error = nullptr;
  bool is_exception_pending;
  const napi_extended_error_info* info;

  // We must retrieve the last error info before doing anything else, because
  // doing anything else will replace the last error info.
  status = napi_get_last_error_info(env, &info);
  NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_get_last_error_info");

  status = napi_is_exception_pending(env, &is_exception_pending);
  NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_is_exception_pending");

  // A pending exception takes precedence over any internal error status.
  if (is_exception_pending) {
    status = napi_get_and_clear_last_exception(env, &error);
    NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_get_and_clear_last_exception");
  }
  else {
    const char* error_message = info->error_message != nullptr ?
      info->error_message : "Error in native callback";

    napi_value message;
    status = napi_create_string_utf8(
      env,
      error_message,
      std::strlen(error_message),
      &message);
    NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_create_string_utf8");

    switch (info->error_code) {
    case napi_object_expected:
    case napi_string_expected:
    case napi_boolean_expected:
    case napi_number_expected:
      status = napi_create_type_error(env, nullptr, message, &error);
      break;
    default:
      status = napi_create_error(env, nullptr,  message, &error);
      break;
    }
    NAPI_FATAL_IF_FAILED(status, "Error::New", "napi_create_error");
  }

  return Error(env, error);
}

inline Error Error::New(napi_env env, const char* message) {
  return Error::New<Error>(env, message, std::strlen(message), napi_create_error);
}

inline Error Error::New(napi_env env, const std::string& message) {
  return Error::New<Error>(env, message.c_str(), message.size(), napi_create_error);
}

inline NAPI_NO_RETURN void Error::Fatal(const char* location, const char* message) {
  napi_fatal_error(location, NAPI_AUTO_LENGTH, message, NAPI_AUTO_LENGTH);
}

inline Error::Error() : ObjectReference() {
}

inline Error::Error(napi_env env, napi_value value) : ObjectReference(env, nullptr) {
  if (value != nullptr) {
    napi_status status = napi_create_reference(env, value, 1, &_ref);

    // Avoid infinite recursion in the failure case.
    // Don't try to construct & throw another Error instance.
    NAPI_FATAL_IF_FAILED(status, "Error::Error", "napi_create_reference");
  }
}

inline Error::Error(Error&& other) : ObjectReference(std::move(other)) {
}

inline Error& Error::operator =(Error&& other) {
  static_cast<Reference<Object>*>(this)->operator=(std::move(other));
  return *this;
}

inline Error::Error(const Error& other) : ObjectReference(other) {
}

inline Error& Error::operator =(const Error& other) {
  Reset();

  _env = other.Env();
  HandleScope scope(_env);

  napi_value value = other.Value();
  if (value != nullptr) {
    napi_status status = napi_create_reference(_env, value, 1, &_ref);
    NAPI_THROW_IF_FAILED(_env, status, *this);
  }

  return *this;
}

inline const std::string& Error::Message() const NAPI_NOEXCEPT {
  if (_message.size() == 0 && _env != nullptr) {
#ifdef NAPI_CPP_EXCEPTIONS
    try {
      _message = Get("message").As<String>();
    }
    catch (...) {
      // Catch all errors here, to include e.g. a std::bad_alloc from
      // the std::string::operator=, because this method may not throw.
    }
#else // NAPI_CPP_EXCEPTIONS
    _message = Get("message").As<String>();
#endif // NAPI_CPP_EXCEPTIONS
  }
  return _message;
}

inline void Error::ThrowAsJavaScriptException() const {
  HandleScope scope(_env);
  if (!IsEmpty()) {

    // We intentionally don't use `NAPI_THROW_*` macros here to ensure
    // that there is no possible recursion as `ThrowAsJavaScriptException`
    // is part of `NAPI_THROW_*` macro definition for noexcept.

    napi_status status = napi_throw(_env, Value());

#ifdef NAPI_CPP_EXCEPTIONS
    if (status != napi_ok) {
      throw Error::New(_env);
    }
#else // NAPI_CPP_EXCEPTIONS
    NAPI_FATAL_IF_FAILED(status, "Error::ThrowAsJavaScriptException", "napi_throw");
#endif // NAPI_CPP_EXCEPTIONS
  }
}

#ifdef NAPI_CPP_EXCEPTIONS

inline const char* Error::what() const NAPI_NOEXCEPT {
  return Message().c_str();
}

#endif // NAPI_CPP_EXCEPTIONS

template <typename TError>
inline TError Error::New(napi_env env,
                         const char* message,
                         size_t length,
                         create_error_fn create_error) {
  napi_value str;
  napi_status status = napi_create_string_utf8(env, message, length, &str);
  NAPI_THROW_IF_FAILED(env, status, TError());

  napi_value error;
  status = create_error(env, nullptr, str, &error);
  NAPI_THROW_IF_FAILED(env, status, TError());

  return TError(env, error);
}

inline TypeError TypeError::New(napi_env env, const char* message) {
  return Error::New<TypeError>(env, message, std::strlen(message), napi_create_type_error);
}

inline TypeError TypeError::New(napi_env env, const std::string& message) {
  return Error::New<TypeError>(env, message.c_str(), message.size(), napi_create_type_error);
}

inline TypeError::TypeError() : Error() {
}

inline TypeError::TypeError(napi_env env, napi_value value) : Error(env, value) {
}

inline RangeError RangeError::New(napi_env env, const char* message) {
  return Error::New<RangeError>(env, message, std::strlen(message), napi_create_range_error);
}

inline RangeError RangeError::New(napi_env env, const std::string& message) {
  return Error::New<RangeError>(env, message.c_str(), message.size(), napi_create_range_error);
}

inline RangeError::RangeError() : Error() {
}

inline RangeError::RangeError(napi_env env, napi_value value) : Error(env, value) {
}

////////////////////////////////////////////////////////////////////////////////
// Reference<T> class
////////////////////////////////////////////////////////////////////////////////

template <typename T>
inline Reference<T> Reference<T>::New(const T& value, uint32_t initialRefcount) {
  napi_env env = value.Env();
  napi_value val = value;

  if (val == nullptr) {
    return Reference<T>(env, nullptr);
  }

  napi_ref ref;
  napi_status status = napi_create_reference(env, value, initialRefcount, &ref);
  NAPI_THROW_IF_FAILED(env, status, Reference<T>());

  return Reference<T>(env, ref);
}


template <typename T>
inline Reference<T>::Reference() : _env(nullptr), _ref(nullptr), _suppressDestruct(false) {
}

template <typename T>
inline Reference<T>::Reference(napi_env env, napi_ref ref)
  : _env(env), _ref(ref), _suppressDestruct(false) {
}

template <typename T>
inline Reference<T>::~Reference() {
  if (_ref != nullptr) {
    if (!_suppressDestruct) {
      napi_delete_reference(_env, _ref);
    }

    _ref = nullptr;
  }
}

template <typename T>
inline Reference<T>::Reference(Reference<T>&& other)
  : _env(other._env), _ref(other._ref), _suppressDestruct(other._suppressDestruct) {
  other._env = nullptr;
  other._ref = nullptr;
  other._suppressDestruct = false;
}

template <typename T>
inline Reference<T>& Reference<T>::operator =(Reference<T>&& other) {
  Reset();
  _env = other._env;
  _ref = other._ref;
  _suppressDestruct = other._suppressDestruct;
  other._env = nullptr;
  other._ref = nullptr;
  other._suppressDestruct = false;
  return *this;
}

template <typename T>
inline Reference<T>::Reference(const Reference<T>& other)
  : _env(other._env), _ref(nullptr), _suppressDestruct(false) {
  HandleScope scope(_env);

  napi_value value = other.Value();
  if (value != nullptr) {
    // Copying is a limited scenario (currently only used for Error object) and always creates a
    // strong reference to the given value even if the incoming reference is weak.
    napi_status status = napi_create_reference(_env, value, 1, &_ref);
    NAPI_FATAL_IF_FAILED(status, "Reference<T>::Reference", "napi_create_reference");
  }
}

template <typename T>
inline Reference<T>::operator napi_ref() const {
  return _ref;
}

template <typename T>
inline bool Reference<T>::operator ==(const Reference<T> &other) const {
  HandleScope scope(_env);
  return this->Value().StrictEquals(other.Value());
}

template <typename T>
inline bool Reference<T>::operator !=(const Reference<T> &other) const {
  return !this->operator ==(other);
}

template <typename T>
inline Napi::Env Reference<T>::Env() const {
  return Napi::Env(_env);
}

template <typename T>
inline bool Reference<T>::IsEmpty() const {
  return _ref == nullptr;
}

template <typename T>
inline T Reference<T>::Value() const {
  if (_ref == nullptr) {
    return T(_env, nullptr);
  }

  napi_value value;
  napi_status status = napi_get_reference_value(_env, _ref, &value);
  NAPI_THROW_IF_FAILED(_env, status, T());
  return T(_env, value);
}

template <typename T>
inline uint32_t Reference<T>::Ref() {
  uint32_t result;
  napi_status status = napi_reference_ref(_env, _ref, &result);
  NAPI_THROW_IF_FAILED(_env, status, 1);
  return result;
}

template <typename T>
inline uint32_t Reference<T>::Unref() {
  uint32_t result;
  napi_status status = napi_reference_unref(_env, _ref, &result);
  NAPI_THROW_IF_FAILED(_env, status, 1);
  return result;
}

template <typename T>
inline void Reference<T>::Reset() {
  if (_ref != nullptr) {
    napi_status status = napi_delete_reference(_env, _ref);
    NAPI_THROW_IF_FAILED_VOID(_env, status);
    _ref = nullptr;
  }
}

template <typename T>
inline void Reference<T>::Reset(const T& value, uint32_t refcount) {
  Reset();
  _env = value.Env();

  napi_value val = value;
  if (val != nullptr) {
    napi_status status = napi_create_reference(_env, value, refcount, &_ref);
    NAPI_THROW_IF_FAILED_VOID(_env, status);
  }
}

template <typename T>
inline void Reference<T>::SuppressDestruct() {
  _suppressDestruct = true;
}

template <typename T>
inline Reference<T> Weak(T value) {
  return Reference<T>::New(value, 0);
}

inline ObjectReference Weak(Object value) {
  return Reference<Object>::New(value, 0);
}

inline FunctionReference Weak(Function value) {
  return Reference<Function>::New(value, 0);
}

template <typename T>
inline Reference<T> Persistent(T value) {
  return Reference<T>::New(value, 1);
}

inline ObjectReference Persistent(Object value) {
  return Reference<Object>::New(value, 1);
}

inline FunctionReference Persistent(Function value) {
  return Reference<Function>::New(value, 1);
}

////////////////////////////////////////////////////////////////////////////////
// ObjectReference class
////////////////////////////////////////////////////////////////////////////////

inline ObjectReference::ObjectReference(): Reference<Object>() {
}

inline ObjectReference::ObjectReference(napi_env env, napi_ref ref): Reference<Object>(env, ref) {
}

inline ObjectReference::ObjectReference(Reference<Object>&& other)
  : Reference<Object>(std::move(other)) {
}

inline ObjectReference& ObjectReference::operator =(Reference<Object>&& other) {
  static_cast<Reference<Object>*>(this)->operator=(std::move(other));
  return *this;
}

inline ObjectReference::ObjectReference(ObjectReference&& other)
  : Reference<Object>(std::move(other)) {
}

inline ObjectReference& ObjectReference::operator =(ObjectReference&& other) {
  static_cast<Reference<Object>*>(this)->operator=(std::move(other));
  return *this;
}

inline ObjectReference::ObjectReference(const ObjectReference& other)
  : Reference<Object>(other) {
}

inline Napi::Value ObjectReference::Get(const char* utf8name) const {
  EscapableHandleScope scope(_env);
  return scope.Escape(Value().Get(utf8name));
}

inline Napi::Value ObjectReference::Get(const std::string& utf8name) const {
  EscapableHandleScope scope(_env);
  return scope.Escape(Value().Get(utf8name));
}

inline bool ObjectReference::Set(const char* utf8name, napi_value value) {
  HandleScope scope(_env);
  return Value().Set(utf8name, value);
}

inline bool ObjectReference::Set(const char* utf8name, Napi::Value value) {
  HandleScope scope(_env);
  return Value().Set(utf8name, value);
}

inline bool ObjectReference::Set(const char* utf8name, const char* utf8value) {
  HandleScope scope(_env);
  return Value().Set(utf8name, utf8value);
}

inline bool ObjectReference::Set(const char* utf8name, bool boolValue) {
  HandleScope scope(_env);
  return Value().Set(utf8name, boolValue);
}

inline bool ObjectReference::Set(const char* utf8name, double numberValue) {
  HandleScope scope(_env);
  return Value().Set(utf8name, numberValue);
}

inline bool ObjectReference::Set(const std::string& utf8name,
                                 napi_value value) {
  HandleScope scope(_env);
  return Value().Set(utf8name, value);
}

inline bool ObjectReference::Set(const std::string& utf8name,
                                 Napi::Value value) {
  HandleScope scope(_env);
  return Value().Set(utf8name, value);
}

inline bool ObjectReference::Set(const std::string& utf8name,
                                 std::string& utf8value) {
  HandleScope scope(_env);
  return Value().Set(utf8name, utf8value);
}

inline bool ObjectReference::Set(const std::string& utf8name, bool boolValue) {
  HandleScope scope(_env);
  return Value().Set(utf8name, boolValue);
}

inline bool ObjectReference::Set(const std::string& utf8name,
                                 double numberValue) {
  HandleScope scope(_env);
  return Value().Set(utf8name, numberValue);
}

inline Napi::Value ObjectReference::Get(uint32_t index) const {
  EscapableHandleScope scope(_env);
  return scope.Escape(Value().Get(index));
}

inline bool ObjectReference::Set(uint32_t index, napi_value value) {
  HandleScope scope(_env);
  return Value().Set(index, value);
}

inline bool ObjectReference::Set(uint32_t index, Napi::Value value) {
  HandleScope scope(_env);
  return Value().Set(index, value);
}

inline bool ObjectReference::Set(uint32_t index, const char* utf8value) {
  HandleScope scope(_env);
  return Value().Set(index, utf8value);
}

inline bool ObjectReference::Set(uint32_t index, const std::string& utf8value) {
  HandleScope scope(_env);
  return Value().Set(index, utf8value);
}

inline bool ObjectReference::Set(uint32_t index, bool boolValue) {
  HandleScope scope(_env);
  return Value().Set(index, boolValue);
}

inline bool ObjectReference::Set(uint32_t index, double numberValue) {
  HandleScope scope(_env);
  return Value().Set(index, numberValue);
}

////////////////////////////////////////////////////////////////////////////////
// FunctionReference class
////////////////////////////////////////////////////////////////////////////////

inline FunctionReference::FunctionReference(): Reference<Function>() {
}

inline FunctionReference::FunctionReference(napi_env env, napi_ref ref)
  : Reference<Function>(env, ref) {
}

inline FunctionReference::FunctionReference(Reference<Function>&& other)
  : Reference<Function>(std::move(other)) {
}

inline FunctionReference& FunctionReference::operator =(Reference<Function>&& other) {
  static_cast<Reference<Function>*>(this)->operator=(std::move(other));
  return *this;
}

inline FunctionReference::FunctionReference(FunctionReference&& other)
  : Reference<Function>(std::move(other)) {
}

inline FunctionReference& FunctionReference::operator =(FunctionReference&& other) {
  static_cast<Reference<Function>*>(this)->operator=(std::move(other));
  return *this;
}

inline Napi::Value FunctionReference::operator ()(
    const std::initializer_list<napi_value>& args) const {
  EscapableHandleScope scope(_env);
  return scope.Escape(Value()(args));
}

inline Napi::Value FunctionReference::Call(const std::initializer_list<napi_value>& args) const {
  EscapableHandleScope scope(_env);
  Napi::Value result = Value().Call(args);
  if (scope.Env().IsExceptionPending()) {
    return Value();
  }
  return scope.Escape(result);
}

inline Napi::Value FunctionReference::Call(const std::vector<napi_value>& args) const {
  EscapableHandleScope scope(_env);
  Napi::Value result = Value().Call(args);
  if (scope.Env().IsExceptionPending()) {
    return Value();
  }
  return scope.Escape(result);
}

inline Napi::Value FunctionReference::Call(
    napi_value recv, const std::initializer_list<napi_value>& args) const {
  EscapableHandleScope scope(_env);
  Napi::Value result = Value().Call(recv, args);
  if (scope.Env().IsExceptionPending()) {
    return Value();
  }
  return scope.Escape(result);
}

inline Napi::Value FunctionReference::Call(
    napi_value recv, const std::vector<napi_value>& args) const {
  EscapableHandleScope scope(_env);
  Napi::Value result = Value().Call(recv, args);
  if (scope.Env().IsExceptionPending()) {
    return Value();
  }
  return scope.Escape(result);
}

inline Napi::Value FunctionReference::Call(
    napi_value recv, size_t argc, const napi_value* args) const {
  EscapableHandleScope scope(_env);
  Napi::Value result = Value().Call(recv, argc, args);
  if (scope.Env().IsExceptionPending()) {
    return Value();
  }
  return scope.Escape(result);
}

inline Napi::Value FunctionReference::MakeCallback(
    napi_value recv,
    const std::initializer_list<napi_value>& args,
    napi_async_context context) const {
  EscapableHandleScope scope(_env);
  Napi::Value result = Value().MakeCallback(recv, args, context);
  if (scope.Env().IsExceptionPending()) {
    return Value();
  }
  return scope.Escape(result);
}

inline Napi::Value FunctionReference::MakeCallback(
    napi_value recv,
    const std::vector<napi_value>& args,
    napi_async_context context) const {
  EscapableHandleScope scope(_env);
  Napi::Value result = Value().MakeCallback(recv, args, context);
  if (scope.Env().IsExceptionPending()) {
    return Value();
  }
  return scope.Escape(result);
}

inline Napi::Value FunctionReference::MakeCallback(
    napi_value recv,
    size_t argc,
    const napi_value* args,
    napi_async_context context) const {
  EscapableHandleScope scope(_env);
  Napi::Value result = Value().MakeCallback(recv, argc, args, context);
  if (scope.Env().IsExceptionPending()) {
    return Value();
  }
  return scope.Escape(result);
}

inline Object FunctionReference::New(const std::initializer_list<napi_value>& args) const {
  EscapableHandleScope scope(_env);
  return scope.Escape(Value().New(args)).As<Object>();
}

inline Object FunctionReference::New(const std::vector<napi_value>& args) const {
  EscapableHandleScope scope(_env);
  return scope.Escape(Value().New(args)).As<Object>();
}

////////////////////////////////////////////////////////////////////////////////
// CallbackInfo class
////////////////////////////////////////////////////////////////////////////////

inline CallbackInfo::CallbackInfo(napi_env env, napi_callback_info info)
    : _env(env), _info(info), _this(nullptr), _dynamicArgs(nullptr), _data(nullptr) {
  _argc = _staticArgCount;
  _argv = _staticArgs;
  napi_status status = napi_get_cb_info(env, info, &_argc, _argv, &_this, &_data);
  NAPI_THROW_IF_FAILED_VOID(_env, status);

  if (_argc > _staticArgCount) {
    // Use either a fixed-size array (on the stack) or a dynamically-allocated
    // array (on the heap) depending on the number of args.
    _dynamicArgs = new napi_value[_argc];
    _argv = _dynamicArgs;

    status = napi_get_cb_info(env, info, &_argc, _argv, nullptr, nullptr);
    NAPI_THROW_IF_FAILED_VOID(_env, status);
  }
}

inline CallbackInfo::~CallbackInfo() {
  if (_dynamicArgs != nullptr) {
    delete[] _dynamicArgs;
  }
}

inline Value CallbackInfo::NewTarget() const {
  napi_value newTarget;
  napi_status status = napi_get_new_target(_env, _info, &newTarget);
  NAPI_THROW_IF_FAILED(_env, status, Value());
  return Value(_env, newTarget);
}

inline bool CallbackInfo::IsConstructCall() const {
  return !NewTarget().IsEmpty();
}

inline Napi::Env CallbackInfo::Env() const {
  return Napi::Env(_env);
}

inline size_t CallbackInfo::Length() const {
  return _argc;
}

inline const Value CallbackInfo::operator [](size_t index) const {
  return index < _argc ? Value(_env, _argv[index]) : Env().Undefined();
}

inline Value CallbackInfo::This() const {
  if (_this == nullptr) {
    return Env().Undefined();
  }
  return Object(_env, _this);
}

inline void* CallbackInfo::Data() const {
  return _data;
}

inline void CallbackInfo::SetData(void* data) {
  _data = data;
}

////////////////////////////////////////////////////////////////////////////////
// PropertyDescriptor class
////////////////////////////////////////////////////////////////////////////////

template <typename PropertyDescriptor::GetterCallback Getter>
PropertyDescriptor
PropertyDescriptor::Accessor(const char* utf8name,
                             napi_property_attributes attributes,
                             void* data) {
  napi_property_descriptor desc = napi_property_descriptor();

  desc.utf8name = utf8name;
  desc.getter = details::TemplatedCallback<Getter>;
  desc.attributes = attributes;
  desc.data = data;

  return desc;
}

template <typename PropertyDescriptor::GetterCallback Getter>
PropertyDescriptor
PropertyDescriptor::Accessor(const std::string& utf8name,
                             napi_property_attributes attributes,
                             void* data) {
  return Accessor<Getter>(utf8name.c_str(), attributes, data);
}

template <typename PropertyDescriptor::GetterCallback Getter>
PropertyDescriptor
PropertyDescriptor::Accessor(Name name,
                             napi_property_attributes attributes,
                             void* data) {
  napi_property_descriptor desc = napi_property_descriptor();

  desc.name = name;
  desc.getter = details::TemplatedCallback<Getter>;
  desc.attributes = attributes;
  desc.data = data;

  return desc;
}

template <
typename PropertyDescriptor::GetterCallback Getter,
typename PropertyDescriptor::SetterCallback Setter>
PropertyDescriptor
PropertyDescriptor::Accessor(const char* utf8name,
                             napi_property_attributes attributes,
                             void* data) {

  napi_property_descriptor desc = napi_property_descriptor();

  desc.utf8name = utf8name;
  desc.getter = details::TemplatedCallback<Getter>;
  desc.setter = details::TemplatedVoidCallback<Setter>;
  desc.attributes = attributes;
  desc.data = data;

  return desc;
}

template <
typename PropertyDescriptor::GetterCallback Getter,
typename PropertyDescriptor::SetterCallback Setter>
PropertyDescriptor
PropertyDescriptor::Accessor(const std::string& utf8name,
                             napi_property_attributes attributes,
                             void* data) {
  return Accessor<Getter, Setter>(utf8name.c_str(), attributes, data);
}

template <
typename PropertyDescriptor::GetterCallback Getter,
typename PropertyDescriptor::SetterCallback Setter>
PropertyDescriptor
PropertyDescriptor::Accessor(Name name,
                             napi_property_attributes attributes,
                             void* data) {
  napi_property_descriptor desc = napi_property_descriptor();

  desc.name = name;
  desc.getter = details::TemplatedCallback<Getter>;
  desc.setter = details::TemplatedVoidCallback<Setter>;
  desc.attributes = attributes;
  desc.data = data;

  return desc;
}

template <typename Getter>
inline PropertyDescriptor
PropertyDescriptor::Accessor(Napi::Env env,
                             Napi::Object object,
                             const char* utf8name,
                             Getter getter,
                             napi_property_attributes attributes,
                             void* data) {
  using CbData = details::CallbackData<Getter, Napi::Value>;
  auto callbackData = new CbData({ getter, data });

  napi_status status = AttachData(env, object, callbackData);
  if (status != napi_ok) {
    delete callbackData;
    NAPI_THROW_IF_FAILED(env, status, napi_property_descriptor());
  }

  return PropertyDescriptor({
    utf8name,
    nullptr,
    nullptr,
    CbData::Wrapper,
    nullptr,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Getter>
inline PropertyDescriptor PropertyDescriptor::Accessor(Napi::Env env,
                                                       Napi::Object object,
                                                       const std::string& utf8name,
                                                       Getter getter,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  return Accessor(env, object, utf8name.c_str(), getter, attributes, data);
}

template <typename Getter>
inline PropertyDescriptor PropertyDescriptor::Accessor(Napi::Env env,
                                                       Napi::Object object,
                                                       Name name,
                                                       Getter getter,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  using CbData = details::CallbackData<Getter, Napi::Value>;
  auto callbackData = new CbData({ getter, data });

  napi_status status = AttachData(env, object, callbackData);
  if (status != napi_ok) {
    delete callbackData;
    NAPI_THROW_IF_FAILED(env, status, napi_property_descriptor());
  }

  return PropertyDescriptor({
    nullptr,
    name,
    nullptr,
    CbData::Wrapper,
    nullptr,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Getter, typename Setter>
inline PropertyDescriptor PropertyDescriptor::Accessor(Napi::Env env,
                                                       Napi::Object object,
                                                       const char* utf8name,
                                                       Getter getter,
                                                       Setter setter,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  using CbData = details::AccessorCallbackData<Getter, Setter>;
  auto callbackData = new CbData({ getter, setter, data });

  napi_status status = AttachData(env, object, callbackData);
  if (status != napi_ok) {
    delete callbackData;
    NAPI_THROW_IF_FAILED(env, status, napi_property_descriptor());
  }

  return PropertyDescriptor({
    utf8name,
    nullptr,
    nullptr,
    CbData::GetterWrapper,
    CbData::SetterWrapper,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Getter, typename Setter>
inline PropertyDescriptor PropertyDescriptor::Accessor(Napi::Env env,
                                                       Napi::Object object,
                                                       const std::string& utf8name,
                                                       Getter getter,
                                                       Setter setter,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  return Accessor(env, object, utf8name.c_str(), getter, setter, attributes, data);
}

template <typename Getter, typename Setter>
inline PropertyDescriptor PropertyDescriptor::Accessor(Napi::Env env,
                                                       Napi::Object object,
                                                       Name name,
                                                       Getter getter,
                                                       Setter setter,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  using CbData = details::AccessorCallbackData<Getter, Setter>;
  auto callbackData = new CbData({ getter, setter, data });

  napi_status status = AttachData(env, object, callbackData);
  if (status != napi_ok) {
    delete callbackData;
    NAPI_THROW_IF_FAILED(env, status, napi_property_descriptor());
  }

  return PropertyDescriptor({
    nullptr,
    name,
    nullptr,
    CbData::GetterWrapper,
    CbData::SetterWrapper,
    nullptr,
    attributes,
    callbackData
  });
}

template <typename Callable>
inline PropertyDescriptor PropertyDescriptor::Function(Napi::Env env,
                                                       Napi::Object /*object*/,
                                                       const char* utf8name,
                                                       Callable cb,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  return PropertyDescriptor({
    utf8name,
    nullptr,
    nullptr,
    nullptr,
    nullptr,
    Napi::Function::New(env, cb, utf8name, data),
    attributes,
    nullptr
  });
}

template <typename Callable>
inline PropertyDescriptor PropertyDescriptor::Function(Napi::Env env,
                                                       Napi::Object object,
                                                       const std::string& utf8name,
                                                       Callable cb,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  return Function(env, object, utf8name.c_str(), cb, attributes, data);
}

template <typename Callable>
inline PropertyDescriptor PropertyDescriptor::Function(Napi::Env env,
                                                       Napi::Object /*object*/,
                                                       Name name,
                                                       Callable cb,
                                                       napi_property_attributes attributes,
                                                       void* data) {
  return PropertyDescriptor({
    nullptr,
    name,
    nullptr,
    nullptr,
    nullptr,
    Napi::Function::New(env, cb, nullptr, data),
    attributes,
    nullptr
  });
}

inline PropertyDescriptor PropertyDescriptor::Value(const char* utf8name,
                                                    napi_value value,
                                                    napi_property_attributes attributes) {
  return PropertyDescriptor({
    utf8name, nullptr, nullptr, nullptr, nullptr, value, attributes, nullptr
  });
}

inline PropertyDescriptor PropertyDescriptor::Value(const std::string& utf8name,
                                                    napi_value value,
                                                    napi_property_attributes attributes) {
  return Value(utf8name.c_str(), value, attributes);
}

inline PropertyDescriptor PropertyDescriptor::Value(napi_value name,
                                                    napi_value value,
                                                    napi_property_attributes attributes) {
  return PropertyDescriptor({
    nullptr, name, nullptr, nullptr, nullptr, value, attributes, nullptr
  });
}

inline PropertyDescriptor PropertyDescriptor::Value(Name name,
                                                    Napi::Value value,
                                                    napi_property_attributes attributes) {
  napi_value nameValue = name;
  napi_value valueValue = value;
  return PropertyDescriptor::Value(nameValue, valueValue, attributes);
}

inline PropertyDescriptor::PropertyDescriptor(napi_property_descriptor desc)
  : _desc(desc) {
}

inline PropertyDescriptor::operator napi_property_descriptor&() {
  return _desc;
}

inline PropertyDescriptor::operator const napi_property_descriptor&() const {
  return _desc;
}

////////////////////////////////////////////////////////////////////////////////
// InstanceWrap<T> class
////////////////////////////////////////////////////////////////////////////////

template <typename T>
inline void InstanceWrap<T>::AttachPropData(napi_env env,
                                       napi_value value,
                                       const napi_property_descriptor* prop) {
  napi_status status;
  if (!(prop->attributes & napi_static)) {
    if (prop->method == T::InstanceVoidMethodCallbackWrapper) {
      status = Napi::details::AttachData(env,
                    value,
                    static_cast<InstanceVoidMethodCallbackData*>(prop->data));
      NAPI_THROW_IF_FAILED_VOID(env, status);
    } else if (prop->method == T::InstanceMethodCallbackWrapper) {
      status = Napi::details::AttachData(env,
                        value,
                        static_cast<InstanceMethodCallbackData*>(prop->data));
      NAPI_THROW_IF_FAILED_VOID(env, status);
    } else if (prop->getter == T::InstanceGetterCallbackWrapper ||
        prop->setter == T::InstanceSetterCallbackWrapper) {
      status = Napi::details::AttachData(env,
                          value,
                          static_cast<InstanceAccessorCallbackData*>(prop->data));
      NAPI_THROW_IF_FAILED_VOID(env, status);
    }
  }
}

template <typename T>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceMethod(
    const char* utf8name,
    InstanceVoidMethodCallback method,
    napi_property_attributes attributes,
    void* data) {
  InstanceVoidMethodCallbackData* callbackData =
    new InstanceVoidMethodCallbackData({ method, data});

  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.method = T::InstanceVoidMethodCallbackWrapper;
  desc.data = callbackData;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceMethod(
    const char* utf8name,
    InstanceMethodCallback method,
    napi_property_attributes attributes,
    void* data) {
  InstanceMethodCallbackData* callbackData = new InstanceMethodCallbackData({ method, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.method = T::InstanceMethodCallbackWrapper;
  desc.data = callbackData;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceMethod(
    Symbol name,
    InstanceVoidMethodCallback method,
    napi_property_attributes attributes,
    void* data) {
  InstanceVoidMethodCallbackData* callbackData =
    new InstanceVoidMethodCallbackData({ method, data});

  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.method = T::InstanceVoidMethodCallbackWrapper;
  desc.data = callbackData;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceMethod(
    Symbol name,
    InstanceMethodCallback method,
    napi_property_attributes attributes,
    void* data) {
  InstanceMethodCallbackData* callbackData = new InstanceMethodCallbackData({ method, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.method = T::InstanceMethodCallbackWrapper;
  desc.data = callbackData;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
template <typename InstanceWrap<T>::InstanceVoidMethodCallback method>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceMethod(
    const char* utf8name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.method = details::TemplatedInstanceVoidCallback<T, method>;
  desc.data = data;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
template <typename InstanceWrap<T>::InstanceMethodCallback method>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceMethod(
    const char* utf8name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.method = details::TemplatedInstanceCallback<T, method>;
  desc.data = data;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
template <typename InstanceWrap<T>::InstanceVoidMethodCallback method>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceMethod(
    Symbol name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.method = details::TemplatedInstanceVoidCallback<T, method>;
  desc.data = data;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
template <typename InstanceWrap<T>::InstanceMethodCallback method>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceMethod(
    Symbol name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.method = details::TemplatedInstanceCallback<T, method>;
  desc.data = data;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceAccessor(
    const char* utf8name,
    InstanceGetterCallback getter,
    InstanceSetterCallback setter,
    napi_property_attributes attributes,
    void* data) {
  InstanceAccessorCallbackData* callbackData =
    new InstanceAccessorCallbackData({ getter, setter, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.getter = getter != nullptr ? T::InstanceGetterCallbackWrapper : nullptr;
  desc.setter = setter != nullptr ? T::InstanceSetterCallbackWrapper : nullptr;
  desc.data = callbackData;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceAccessor(
    Symbol name,
    InstanceGetterCallback getter,
    InstanceSetterCallback setter,
    napi_property_attributes attributes,
    void* data) {
  InstanceAccessorCallbackData* callbackData =
    new InstanceAccessorCallbackData({ getter, setter, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.getter = getter != nullptr ? T::InstanceGetterCallbackWrapper : nullptr;
  desc.setter = setter != nullptr ? T::InstanceSetterCallbackWrapper : nullptr;
  desc.data = callbackData;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
template <typename InstanceWrap<T>::InstanceGetterCallback getter,
          typename InstanceWrap<T>::InstanceSetterCallback setter>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceAccessor(
    const char* utf8name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.getter = details::TemplatedInstanceCallback<T, getter>;
  desc.setter = This::WrapSetter(This::SetterTag<setter>());
  desc.data = data;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
template <typename InstanceWrap<T>::InstanceGetterCallback getter,
          typename InstanceWrap<T>::InstanceSetterCallback setter>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceAccessor(
    Symbol name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.getter = details::TemplatedInstanceCallback<T, getter>;
  desc.setter = This::WrapSetter(This::SetterTag<setter>());
  desc.data = data;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceValue(
    const char* utf8name,
    Napi::Value value,
    napi_property_attributes attributes) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.value = value;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> InstanceWrap<T>::InstanceValue(
    Symbol name,
    Napi::Value value,
    napi_property_attributes attributes) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.value = value;
  desc.attributes = attributes;
  return desc;
}

template <typename T>
inline napi_value InstanceWrap<T>::InstanceVoidMethodCallbackWrapper(
    napi_env env,
    napi_callback_info info) {
  return details::WrapCallback([&] {
    CallbackInfo callbackInfo(env, info);
    InstanceVoidMethodCallbackData* callbackData =
      reinterpret_cast<InstanceVoidMethodCallbackData*>(callbackInfo.Data());
    callbackInfo.SetData(callbackData->data);
    T* instance = T::Unwrap(callbackInfo.This().As<Object>());
    auto cb = callbackData->callback;
    (instance->*cb)(callbackInfo);
    return nullptr;
  });
}

template <typename T>
inline napi_value InstanceWrap<T>::InstanceMethodCallbackWrapper(
    napi_env env,
    napi_callback_info info) {
  return details::WrapCallback([&] {
    CallbackInfo callbackInfo(env, info);
    InstanceMethodCallbackData* callbackData =
      reinterpret_cast<InstanceMethodCallbackData*>(callbackInfo.Data());
    callbackInfo.SetData(callbackData->data);
    T* instance = T::Unwrap(callbackInfo.This().As<Object>());
    auto cb = callbackData->callback;
    return (instance->*cb)(callbackInfo);
  });
}

template <typename T>
inline napi_value InstanceWrap<T>::InstanceGetterCallbackWrapper(
    napi_env env,
    napi_callback_info info) {
  return details::WrapCallback([&] {
    CallbackInfo callbackInfo(env, info);
    InstanceAccessorCallbackData* callbackData =
      reinterpret_cast<InstanceAccessorCallbackData*>(callbackInfo.Data());
    callbackInfo.SetData(callbackData->data);
    T* instance = T::Unwrap(callbackInfo.This().As<Object>());
    auto cb = callbackData->getterCallback;
    return (instance->*cb)(callbackInfo);
  });
}

template <typename T>
inline napi_value InstanceWrap<T>::InstanceSetterCallbackWrapper(
    napi_env env,
    napi_callback_info info) {
  return details::WrapCallback([&] {
    CallbackInfo callbackInfo(env, info);
    InstanceAccessorCallbackData* callbackData =
      reinterpret_cast<InstanceAccessorCallbackData*>(callbackInfo.Data());
    callbackInfo.SetData(callbackData->data);
    T* instance = T::Unwrap(callbackInfo.This().As<Object>());
    auto cb = callbackData->setterCallback;
    (instance->*cb)(callbackInfo, callbackInfo[0]);
    return nullptr;
  });
}

template <typename T>
template <typename InstanceWrap<T>::InstanceSetterCallback method>
inline napi_value InstanceWrap<T>::WrappedMethod(
    napi_env env, napi_callback_info info) NAPI_NOEXCEPT {
  return details::WrapCallback([&] {
    const CallbackInfo cbInfo(env, info);
    T* instance = T::Unwrap(cbInfo.This().As<Object>());
    (instance->*method)(cbInfo, cbInfo[0]);
    return nullptr;
  });
}

////////////////////////////////////////////////////////////////////////////////
// ObjectWrap<T> class
////////////////////////////////////////////////////////////////////////////////

template <typename T>
inline ObjectWrap<T>::ObjectWrap(const Napi::CallbackInfo& callbackInfo) {
  napi_env env = callbackInfo.Env();
  napi_value wrapper = callbackInfo.This();
  napi_status status;
  napi_ref ref;
  T* instance = static_cast<T*>(this);
  status = napi_wrap(env, wrapper, instance, FinalizeCallback, nullptr, &ref);
  NAPI_THROW_IF_FAILED_VOID(env, status);

  Reference<Object>* instanceRef = instance;
  *instanceRef = Reference<Object>(env, ref);
}

template <typename T>
inline ObjectWrap<T>::~ObjectWrap() {
  // If the JS object still exists at this point, remove the finalizer added
  // through `napi_wrap()`.
  if (!IsEmpty()) {
    Object object = Value();
    // It is not valid to call `napi_remove_wrap()` with an empty `object`.
    // This happens e.g. during garbage collection.
    if (!object.IsEmpty() && _construction_failed) {
      napi_remove_wrap(Env(), object, nullptr);
    }
  }
}

template<typename T>
inline T* ObjectWrap<T>::Unwrap(Object wrapper) {
  T* unwrapped;
  napi_status status = napi_unwrap(wrapper.Env(), wrapper, reinterpret_cast<void**>(&unwrapped));
  NAPI_THROW_IF_FAILED(wrapper.Env(), status, nullptr);
  return unwrapped;
}

template <typename T>
inline Function
ObjectWrap<T>::DefineClass(Napi::Env env,
                           const char* utf8name,
                           const size_t props_count,
                           const napi_property_descriptor* descriptors,
                           void* data) {
  napi_status status;
  std::vector<napi_property_descriptor> props(props_count);

  // We copy the descriptors to a local array because before defining the class
  // we must replace static method property descriptors with value property
  // descriptors such that the value is a function-valued `napi_value` created
  // with `CreateFunction()`.
  //
  // This replacement could be made for instance methods as well, but V8 aborts
  // if we do that, because it expects methods defined on the prototype template
  // to have `FunctionTemplate`s.
  for (size_t index = 0; index < props_count; index++) {
    props[index] = descriptors[index];
    napi_property_descriptor* prop = &props[index];
    if (prop->method == T::StaticMethodCallbackWrapper) {
      status = CreateFunction(env,
                             utf8name,
                             prop->method,
                             static_cast<StaticMethodCallbackData*>(prop->data),
               &(prop->value));
      NAPI_THROW_IF_FAILED(env, status, Function());
      prop->method = nullptr;
      prop->data = nullptr;
    } else if (prop->method == T::StaticVoidMethodCallbackWrapper) {
      status = CreateFunction(env,
                         utf8name,
                         prop->method,
                         static_cast<StaticVoidMethodCallbackData*>(prop->data),
                         &(prop->value));
      NAPI_THROW_IF_FAILED(env, status, Function());
      prop->method = nullptr;
      prop->data = nullptr;
    }
  }

  napi_value value;
  status = napi_define_class(env,
                             utf8name,
                             NAPI_AUTO_LENGTH,
                             T::ConstructorCallbackWrapper,
                             data,
                             props_count,
                             props.data(),
                             &value);
  NAPI_THROW_IF_FAILED(env, status, Function());

  // After defining the class we iterate once more over the property descriptors
  // and attach the data associated with accessors and instance methods to the
  // newly created JavaScript class.
  for (size_t idx = 0; idx < props_count; idx++) {
    const napi_property_descriptor* prop = &props[idx];

    if (prop->getter == T::StaticGetterCallbackWrapper ||
        prop->setter == T::StaticSetterCallbackWrapper) {
      status = Napi::details::AttachData(env,
                          value,
                          static_cast<StaticAccessorCallbackData*>(prop->data));
      NAPI_THROW_IF_FAILED(env, status, Function());
    } else {
      // InstanceWrap<T>::AttachPropData is responsible for attaching the data
      // of instance methods and accessors.
      T::AttachPropData(env, value, prop);
    }
  }

  return Function(env, value);
}

template <typename T>
inline Function ObjectWrap<T>::DefineClass(
    Napi::Env env,
    const char* utf8name,
    const std::initializer_list<ClassPropertyDescriptor<T>>& properties,
    void* data) {
  return DefineClass(env,
          utf8name,
          properties.size(),
          reinterpret_cast<const napi_property_descriptor*>(properties.begin()),
          data);
}

template <typename T>
inline Function ObjectWrap<T>::DefineClass(
    Napi::Env env,
    const char* utf8name,
    const std::vector<ClassPropertyDescriptor<T>>& properties,
    void* data) {
  return DefineClass(env,
           utf8name,
           properties.size(),
           reinterpret_cast<const napi_property_descriptor*>(properties.data()),
           data);
}

template <typename T>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticMethod(
    const char* utf8name,
    StaticVoidMethodCallback method,
    napi_property_attributes attributes,
    void* data) {
  StaticVoidMethodCallbackData* callbackData = new StaticVoidMethodCallbackData({ method, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.method = T::StaticVoidMethodCallbackWrapper;
  desc.data = callbackData;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticMethod(
    const char* utf8name,
    StaticMethodCallback method,
    napi_property_attributes attributes,
    void* data) {
  StaticMethodCallbackData* callbackData = new StaticMethodCallbackData({ method, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.method = T::StaticMethodCallbackWrapper;
  desc.data = callbackData;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticMethod(
    Symbol name,
    StaticVoidMethodCallback method,
    napi_property_attributes attributes,
    void* data) {
  StaticVoidMethodCallbackData* callbackData = new StaticVoidMethodCallbackData({ method, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.method = T::StaticVoidMethodCallbackWrapper;
  desc.data = callbackData;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticMethod(
    Symbol name,
    StaticMethodCallback method,
    napi_property_attributes attributes,
    void* data) {
  StaticMethodCallbackData* callbackData = new StaticMethodCallbackData({ method, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.method = T::StaticMethodCallbackWrapper;
  desc.data = callbackData;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
template <typename ObjectWrap<T>::StaticVoidMethodCallback method>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticMethod(
    const char* utf8name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.method = details::TemplatedVoidCallback<method>;
  desc.data = data;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
template <typename ObjectWrap<T>::StaticVoidMethodCallback method>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticMethod(
    Symbol name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.method = details::TemplatedVoidCallback<method>;
  desc.data = data;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
template <typename ObjectWrap<T>::StaticMethodCallback method>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticMethod(
    const char* utf8name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.method = details::TemplatedCallback<method>;
  desc.data = data;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
template <typename ObjectWrap<T>::StaticMethodCallback method>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticMethod(
    Symbol name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.method = details::TemplatedCallback<method>;
  desc.data = data;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticAccessor(
    const char* utf8name,
    StaticGetterCallback getter,
    StaticSetterCallback setter,
    napi_property_attributes attributes,
    void* data) {
  StaticAccessorCallbackData* callbackData =
    new StaticAccessorCallbackData({ getter, setter, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.getter = getter != nullptr ? T::StaticGetterCallbackWrapper : nullptr;
  desc.setter = setter != nullptr ? T::StaticSetterCallbackWrapper : nullptr;
  desc.data = callbackData;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticAccessor(
    Symbol name,
    StaticGetterCallback getter,
    StaticSetterCallback setter,
    napi_property_attributes attributes,
    void* data) {
  StaticAccessorCallbackData* callbackData =
    new StaticAccessorCallbackData({ getter, setter, data });

  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.getter = getter != nullptr ? T::StaticGetterCallbackWrapper : nullptr;
  desc.setter = setter != nullptr ? T::StaticSetterCallbackWrapper : nullptr;
  desc.data = callbackData;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
template <typename ObjectWrap<T>::StaticGetterCallback getter,
          typename ObjectWrap<T>::StaticSetterCallback setter>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticAccessor(
    const char* utf8name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.getter = details::TemplatedCallback<getter>;
  desc.setter = This::WrapStaticSetter(This::StaticSetterTag<setter>());
  desc.data = data;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
template <typename ObjectWrap<T>::StaticGetterCallback getter,
          typename ObjectWrap<T>::StaticSetterCallback setter>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticAccessor(
    Symbol name,
    napi_property_attributes attributes,
    void* data) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.getter = details::TemplatedCallback<getter>;
  desc.setter = This::WrapStaticSetter(This::StaticSetterTag<setter>());
  desc.data = data;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticValue(const char* utf8name,
    Napi::Value value, napi_property_attributes attributes) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.utf8name = utf8name;
  desc.value = value;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
inline ClassPropertyDescriptor<T> ObjectWrap<T>::StaticValue(Symbol name,
    Napi::Value value, napi_property_attributes attributes) {
  napi_property_descriptor desc = napi_property_descriptor();
  desc.name = name;
  desc.value = value;
  desc.attributes = static_cast<napi_property_attributes>(attributes | napi_static);
  return desc;
}

template <typename T>
inline void ObjectWrap<T>::Finalize(Napi::Env /*env*/) {}

template <typename T>
inline napi_value ObjectWrap<T>::ConstructorCallbackWrapper(
    napi_env env,
    napi_callback_info info) {
  napi_value new_target;
  napi_status status = napi_get_new_target(env, info, &new_target);
  if (status != napi_ok) return nullptr;

  bool isConstructCall = (new_target != nullptr);
  if (!isConstructCall) {
    napi_throw_type_error(env, nullptr, "Class constructors cannot be invoked without 'new'");
    return nullptr;
  }

  napi_value wrapper = details::WrapCallback([&] {
    CallbackInfo callbackInfo(env, info);
    T* instance = new T(callbackInfo);
#ifdef NAPI_CPP_EXCEPTIONS
    instance->_construction_failed = false;
#else
    if (callbackInfo.Env().IsExceptionPending()) {
      // We need to clear the exception so that removing the wrap might work.
      Error e = callbackInfo.Env().GetAndClearPendingException();
      delete instance;
      e.ThrowAsJavaScriptException();
    } else {
      instance->_construction_failed = false;
    }
# endif  // NAPI_CPP_EXCEPTIONS
    return callbackInfo.This();
  });

  return wrapper;
}

template <typename T>
inline napi_value ObjectWrap<T>::StaticVoidMethodCallbackWrapper(
    napi_env env,
    napi_callback_info info) {
  return details::WrapCallback([&] {
    CallbackInfo callbackInfo(env, info);
    StaticVoidMethodCallbackData* callbackData =
      reinterpret_cast<StaticVoidMethodCallbackData*>(callbackInfo.Data());
    callbackInfo.SetData(callbackData->data);
    callbackData->callback(callbackInfo);
    return nullptr;
  });
}

template <typename T>
inline napi_value ObjectWrap<T>::StaticMethodCallbackWrapper(
    napi_env env,
    napi_callback_info info) {
  return details::WrapCallback([&] {
    CallbackInfo callbackInfo(env, info);
    StaticMethodCallbackData* callbackData =
      reinterpret_cast<StaticMethodCallbackData*>(callbackInfo.Data());
    callbackInfo.SetData(callbackData->data);
    return callbackData->callback(callbackInfo);
  });
}

template <typename T>
inline napi_value ObjectWrap<T>::StaticGetterCallbackWrapper(
    napi_env env,
    napi_callback_info info) {
  return details::WrapCallback([&] {
    CallbackInfo callbackInfo(env, info);
    StaticAccessorCallbackData* callbackData =
      reinterpret_cast<StaticAccessorCallbackData*>(callbackInfo.Data());
    callbackInfo.SetData(callbackData->data);
    return callbackData->getterCallback(callbackInfo);
  });
}

template <typename T>
inline napi_value ObjectWrap<T>::StaticSetterCallbackWrapper(
    napi_env env,
    napi_callback_info info) {
  return details::WrapCallback([&] {
    CallbackInfo callbackInfo(env, info);
    StaticAccessorCallbackData* callbackData =
      reinterpret_cast<StaticAccessorCallbackData*>(callbackInfo.Data());
    callbackInfo.SetData(callbackData->data);
    callbackData->setterCallback(callbackInfo, callbackInfo[0]);
    return nullptr;
  });
}

template <typename T>
inline void ObjectWrap<T>::FinalizeCallback(napi_env env, void* data, void* /*hint*/) {
  HandleScope scope(env);
  T* instance = static_cast<T*>(data);
  instance->Finalize(Napi::Env(env));
  delete instance;
}

template <typename T>
template <typename ObjectWrap<T>::StaticSetterCallback method>
inline napi_value ObjectWrap<T>::WrappedMethod(
    napi_env env, napi_callback_info info) NAPI_NOEXCEPT {
  return details::WrapCallback([&] {
    const CallbackInfo cbInfo(env, info);
    method(cbInfo, cbInfo[0]);
    return nullptr;
  });
}

////////////////////////////////////////////////////////////////////////////////
// HandleScope class
////////////////////////////////////////////////////////////////////////////////

inline HandleScope::HandleScope(napi_env env, napi_handle_scope scope)
    : _env(env), _scope(scope) {
}

inline HandleScope::HandleScope(Napi::Env env) : _env(env) {
  napi_status status = napi_open_handle_scope(_env, &_scope);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline HandleScope::~HandleScope() {
  napi_status status = napi_close_handle_scope(_env, _scope);
  NAPI_FATAL_IF_FAILED(status,
                       "HandleScope::~HandleScope",
                       "napi_close_handle_scope");
}

inline HandleScope::operator napi_handle_scope() const {
  return _scope;
}

inline Napi::Env HandleScope::Env() const {
  return Napi::Env(_env);
}

////////////////////////////////////////////////////////////////////////////////
// EscapableHandleScope class
////////////////////////////////////////////////////////////////////////////////

inline EscapableHandleScope::EscapableHandleScope(
  napi_env env, napi_escapable_handle_scope scope) : _env(env), _scope(scope) {
}

inline EscapableHandleScope::EscapableHandleScope(Napi::Env env) : _env(env) {
  napi_status status = napi_open_escapable_handle_scope(_env, &_scope);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline EscapableHandleScope::~EscapableHandleScope() {
  napi_status status = napi_close_escapable_handle_scope(_env, _scope);
  NAPI_FATAL_IF_FAILED(status,
                       "EscapableHandleScope::~EscapableHandleScope",
                       "napi_close_escapable_handle_scope");
}

inline EscapableHandleScope::operator napi_escapable_handle_scope() const {
  return _scope;
}

inline Napi::Env EscapableHandleScope::Env() const {
  return Napi::Env(_env);
}

inline Value EscapableHandleScope::Escape(napi_value escapee) {
  napi_value result;
  napi_status status = napi_escape_handle(_env, _scope, escapee, &result);
  NAPI_THROW_IF_FAILED(_env, status, Value());
  return Value(_env, result);
}


#if (NAPI_VERSION > 2)
////////////////////////////////////////////////////////////////////////////////
// CallbackScope class
////////////////////////////////////////////////////////////////////////////////

inline CallbackScope::CallbackScope(
  napi_env env, napi_callback_scope scope) : _env(env), _scope(scope) {
}

inline CallbackScope::CallbackScope(napi_env env, napi_async_context context)
    : _env(env) {
  napi_status status = napi_open_callback_scope(
      _env, Object::New(env), context, &_scope);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline CallbackScope::~CallbackScope() {
  napi_status status = napi_close_callback_scope(_env, _scope);
  NAPI_FATAL_IF_FAILED(status,
                       "CallbackScope::~CallbackScope",
                       "napi_close_callback_scope");
}

inline CallbackScope::operator napi_callback_scope() const {
  return _scope;
}

inline Napi::Env CallbackScope::Env() const {
  return Napi::Env(_env);
}
#endif

////////////////////////////////////////////////////////////////////////////////
// AsyncContext class
////////////////////////////////////////////////////////////////////////////////

inline AsyncContext::AsyncContext(napi_env env, const char* resource_name)
  : AsyncContext(env, resource_name, Object::New(env)) {
}

inline AsyncContext::AsyncContext(napi_env env,
                                  const char* resource_name,
                                  const Object& resource)
    : _env(env), _context(nullptr) {
  napi_value resource_id;
  napi_status status = napi_create_string_utf8(
      _env, resource_name, NAPI_AUTO_LENGTH, &resource_id);
  NAPI_THROW_IF_FAILED_VOID(_env, status);

  status = napi_async_init(_env, resource, resource_id, &_context);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline AsyncContext::~AsyncContext() {
  if (_context != nullptr) {
    napi_async_destroy(_env, _context);
    _context = nullptr;
  }
}

inline AsyncContext::AsyncContext(AsyncContext&& other) {
  _env = other._env;
  other._env = nullptr;
  _context = other._context;
  other._context = nullptr;
}

inline AsyncContext& AsyncContext::operator =(AsyncContext&& other) {
  _env = other._env;
  other._env = nullptr;
  _context = other._context;
  other._context = nullptr;
  return *this;
}

inline AsyncContext::operator napi_async_context() const {
  return _context;
}

inline Napi::Env AsyncContext::Env() const {
  return Napi::Env(_env);
}

////////////////////////////////////////////////////////////////////////////////
// AsyncWorker class
////////////////////////////////////////////////////////////////////////////////

inline AsyncWorker::AsyncWorker(const Function& callback)
  : AsyncWorker(callback, "generic") {
}

inline AsyncWorker::AsyncWorker(const Function& callback,
                                const char* resource_name)
  : AsyncWorker(callback, resource_name, Object::New(callback.Env())) {
}

inline AsyncWorker::AsyncWorker(const Function& callback,
                                const char* resource_name,
                                const Object& resource)
  : AsyncWorker(Object::New(callback.Env()),
                callback,
                resource_name,
                resource) {
}

inline AsyncWorker::AsyncWorker(const Object& receiver,
                                const Function& callback)
  : AsyncWorker(receiver, callback, "generic") {
}

inline AsyncWorker::AsyncWorker(const Object& receiver,
                                const Function& callback,
                                const char* resource_name)
  : AsyncWorker(receiver,
                callback,
                resource_name,
                Object::New(callback.Env())) {
}

inline AsyncWorker::AsyncWorker(const Object& receiver,
                                const Function& callback,
                                const char* resource_name,
                                const Object& resource)
  : _env(callback.Env()),
    _receiver(Napi::Persistent(receiver)),
    _callback(Napi::Persistent(callback)),
    _suppress_destruct(false) {
  napi_value resource_id;
  napi_status status = napi_create_string_latin1(
      _env, resource_name, NAPI_AUTO_LENGTH, &resource_id);
  NAPI_THROW_IF_FAILED_VOID(_env, status);

  status = napi_create_async_work(_env, resource, resource_id, OnAsyncWorkExecute,
                                  OnAsyncWorkComplete, this, &_work);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline AsyncWorker::AsyncWorker(Napi::Env env)
  : AsyncWorker(env, "generic") {
}

inline AsyncWorker::AsyncWorker(Napi::Env env,
                                const char* resource_name)
  : AsyncWorker(env, resource_name, Object::New(env)) {
}

inline AsyncWorker::AsyncWorker(Napi::Env env,
                                const char* resource_name,
                                const Object& resource)
  : _env(env),
    _receiver(),
    _callback(),
    _suppress_destruct(false) {
  napi_value resource_id;
  napi_status status = napi_create_string_latin1(
      _env, resource_name, NAPI_AUTO_LENGTH, &resource_id);
  NAPI_THROW_IF_FAILED_VOID(_env, status);

  status = napi_create_async_work(_env, resource, resource_id, OnAsyncWorkExecute,
                                  OnAsyncWorkComplete, this, &_work);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline AsyncWorker::~AsyncWorker() {
  if (_work != nullptr) {
    napi_delete_async_work(_env, _work);
    _work = nullptr;
  }
}

inline void AsyncWorker::Destroy() {
  delete this;
}

inline AsyncWorker::AsyncWorker(AsyncWorker&& other) {
  _env = other._env;
  other._env = nullptr;
  _work = other._work;
  other._work = nullptr;
  _receiver = std::move(other._receiver);
  _callback = std::move(other._callback);
  _error = std::move(other._error);
  _suppress_destruct = other._suppress_destruct;
}

inline AsyncWorker& AsyncWorker::operator =(AsyncWorker&& other) {
  _env = other._env;
  other._env = nullptr;
  _work = other._work;
  other._work = nullptr;
  _receiver = std::move(other._receiver);
  _callback = std::move(other._callback);
  _error = std::move(other._error);
  _suppress_destruct = other._suppress_destruct;
  return *this;
}

inline AsyncWorker::operator napi_async_work() const {
  return _work;
}

inline Napi::Env AsyncWorker::Env() const {
  return Napi::Env(_env);
}

inline void AsyncWorker::Queue() {
  napi_status status = napi_queue_async_work(_env, _work);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline void AsyncWorker::Cancel() {
  napi_status status = napi_cancel_async_work(_env, _work);
  NAPI_THROW_IF_FAILED_VOID(_env, status);
}

inline ObjectReference& AsyncWorker::Receiver() {
  return _receiver;
}

inline FunctionReference& AsyncWorker::Callback() {
  return _callback;
}

inline void AsyncWorker::SuppressDestruct() {
  _suppress_destruct = true;
}

inline void AsyncWorker::OnOK() {
  if (!_callback.IsEmpty()) {
    _callback.Call(_receiver.Value(), GetResult(_callback.Env()));
  }
}

inline void AsyncWorker::OnError(const Error& e) {
  if (!_callback.IsEmpty()) {
    _callback.Call(_receiver.Value(), std::initializer_list<napi_value>{ e.Value() });
  }
}

inline void AsyncWorker::SetError(const std::string& error) {
  _error = error;
}

inline std::vector<napi_value> AsyncWorker::GetResult(Napi::Env /*env*/) {
  return {};
}
// The OnAsyncWorkExecute method receives an napi_env argument. However, do NOT
// use it within this method, as it does not run on the JavaScript thread and
// must not run any method that would cause JavaScript to run. In practice,
// this means that almost any use of napi_env will be incorrect.
inline void AsyncWorker::OnAsyncWorkExecute(napi_env env, void* asyncworker) {
  AsyncWorker* self = static_cast<AsyncWorker*>(asyncworker);
  self->OnExecute(env);
}
// The OnExecute method receives an napi_env argument. However, do NOT
// use it within this method, as it does not run on the JavaScript thread and
// must not run any method that would cause JavaScript to run. In practice,
// this means that almost any use of napi_env will be incorrect.
inline void AsyncWorker::OnExecute(Napi::Env /*DO_NOT_USE*/) {
#ifdef NAPI_CPP_EXCEPTIONS
  try {
    Execute();
  } catch (const std::exception& e) {
    SetError(e.what());
  }
#else // NAPI_CPP_EXCEPTIONS
  Execute();
#endif // NAPI_CPP_EXCEPTIONS
}

inline void AsyncWorker::OnAsyncWorkComplete(napi_env env,
                                             napi_status status,
                                             void* asyncworker) {
  AsyncWorker* self = static_cast<AsyncWorker*>(asyncworker);
  self->OnWorkComplete(env, status);
}
inline void AsyncWorker::OnWorkComplete(Napi::Env /*env*/, napi_status status) {
  if (status != napi_cancelled) {
    HandleScope scope(_env);
    details::WrapCallback([&] {
      if (_error.size() == 0) {
        OnOK();
      }
      else {
        OnError(Error::New(_env, _error));
      }
      return nullptr;
    });
  }
  if (!_suppress_destruct) {
    Destroy();
  }
}

#if (NAPI_VERSION > 3 && !defined(__wasm32__))
////////////////////////////////////////////////////////////////////////////////
// TypedThreadSafeFunction<ContextType,DataType,CallJs> class
////////////////////////////////////////////////////////////////////////////////

// Starting with NAPI 5, the JavaScript function `func` parameter of
// `napi_create_threadsafe_function` is optional.
#if NAPI_VERSION > 4
// static, with Callback [missing] Resource [missing] Finalizer [missing]
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
template <typename ResourceString>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>
TypedThreadSafeFunction<ContextType, DataType, CallJs>::New(
    napi_env env,
    ResourceString resourceName,
    size_t maxQueueSize,
    size_t initialThreadCount,
    ContextType* context) {
  TypedThreadSafeFunction<ContextType, DataType, CallJs> tsfn;

  napi_status status =
      napi_create_threadsafe_function(env,
                                      nullptr,
                                      nullptr,
                                      String::From(env, resourceName),
                                      maxQueueSize,
                                      initialThreadCount,
                                      nullptr,
                                      nullptr,
                                      context,
                                      CallJsInternal,
                                      &tsfn._tsfn);
  if (status != napi_ok) {
    NAPI_THROW_IF_FAILED(
        env, status, TypedThreadSafeFunction<ContextType, DataType, CallJs>());
  }

  return tsfn;
}

// static, with Callback [missing] Resource [passed] Finalizer [missing]
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
template <typename ResourceString>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>
TypedThreadSafeFunction<ContextType, DataType, CallJs>::New(
    napi_env env,
    const Object& resource,
    ResourceString resourceName,
    size_t maxQueueSize,
    size_t initialThreadCount,
    ContextType* context) {
  TypedThreadSafeFunction<ContextType, DataType, CallJs> tsfn;

  napi_status status =
      napi_create_threadsafe_function(env,
                                      nullptr,
                                      resource,
                                      String::From(env, resourceName),
                                      maxQueueSize,
                                      initialThreadCount,
                                      nullptr,
                                      nullptr,
                                      context,
                                      CallJsInternal,
                                      &tsfn._tsfn);
  if (status != napi_ok) {
    NAPI_THROW_IF_FAILED(
        env, status, TypedThreadSafeFunction<ContextType, DataType, CallJs>());
  }

  return tsfn;
}

// static, with Callback [missing] Resource [missing] Finalizer [passed]
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
template <typename ResourceString,
          typename Finalizer,
          typename FinalizerDataType>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>
TypedThreadSafeFunction<ContextType, DataType, CallJs>::New(
    napi_env env,
    ResourceString resourceName,
    size_t maxQueueSize,
    size_t initialThreadCount,
    ContextType* context,
    Finalizer finalizeCallback,
    FinalizerDataType* data) {
  TypedThreadSafeFunction<ContextType, DataType, CallJs> tsfn;

  auto* finalizeData = new details::
      ThreadSafeFinalize<ContextType, Finalizer, FinalizerDataType>(
          {data, finalizeCallback});
  napi_status status = napi_create_threadsafe_function(
      env,
      nullptr,
      nullptr,
      String::From(env, resourceName),
      maxQueueSize,
      initialThreadCount,
      finalizeData,
      details::ThreadSafeFinalize<ContextType, Finalizer, FinalizerDataType>::
          FinalizeFinalizeWrapperWithDataAndContext,
      context,
      CallJsInternal,
      &tsfn._tsfn);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(
        env, status, TypedThreadSafeFunction<ContextType, DataType, CallJs>());
  }

  return tsfn;
}

// static, with Callback [missing] Resource [passed] Finalizer [passed]
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
template <typename ResourceString,
          typename Finalizer,
          typename FinalizerDataType>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>
TypedThreadSafeFunction<ContextType, DataType, CallJs>::New(
    napi_env env,
    const Object& resource,
    ResourceString resourceName,
    size_t maxQueueSize,
    size_t initialThreadCount,
    ContextType* context,
    Finalizer finalizeCallback,
    FinalizerDataType* data) {
  TypedThreadSafeFunction<ContextType, DataType, CallJs> tsfn;

  auto* finalizeData = new details::
      ThreadSafeFinalize<ContextType, Finalizer, FinalizerDataType>(
          {data, finalizeCallback});
  napi_status status = napi_create_threadsafe_function(
      env,
      nullptr,
      resource,
      String::From(env, resourceName),
      maxQueueSize,
      initialThreadCount,
      finalizeData,
      details::ThreadSafeFinalize<ContextType, Finalizer, FinalizerDataType>::
          FinalizeFinalizeWrapperWithDataAndContext,
      context,
      CallJsInternal,
      &tsfn._tsfn);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(
        env, status, TypedThreadSafeFunction<ContextType, DataType, CallJs>());
  }

  return tsfn;
}
#endif

// static, with Callback [passed] Resource [missing] Finalizer [missing]
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
template <typename ResourceString>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>
TypedThreadSafeFunction<ContextType, DataType, CallJs>::New(
    napi_env env,
    const Function& callback,
    ResourceString resourceName,
    size_t maxQueueSize,
    size_t initialThreadCount,
    ContextType* context) {
  TypedThreadSafeFunction<ContextType, DataType, CallJs> tsfn;

  napi_status status =
      napi_create_threadsafe_function(env,
                                      callback,
                                      nullptr,
                                      String::From(env, resourceName),
                                      maxQueueSize,
                                      initialThreadCount,
                                      nullptr,
                                      nullptr,
                                      context,
                                      CallJsInternal,
                                      &tsfn._tsfn);
  if (status != napi_ok) {
    NAPI_THROW_IF_FAILED(
        env, status, TypedThreadSafeFunction<ContextType, DataType, CallJs>());
  }

  return tsfn;
}

// static, with Callback [passed] Resource [passed] Finalizer [missing]
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
template <typename ResourceString>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>
TypedThreadSafeFunction<ContextType, DataType, CallJs>::New(
    napi_env env,
    const Function& callback,
    const Object& resource,
    ResourceString resourceName,
    size_t maxQueueSize,
    size_t initialThreadCount,
    ContextType* context) {
  TypedThreadSafeFunction<ContextType, DataType, CallJs> tsfn;

  napi_status status =
      napi_create_threadsafe_function(env,
                                      callback,
                                      resource,
                                      String::From(env, resourceName),
                                      maxQueueSize,
                                      initialThreadCount,
                                      nullptr,
                                      nullptr,
                                      context,
                                      CallJsInternal,
                                      &tsfn._tsfn);
  if (status != napi_ok) {
    NAPI_THROW_IF_FAILED(
        env, status, TypedThreadSafeFunction<ContextType, DataType, CallJs>());
  }

  return tsfn;
}

// static, with Callback [passed] Resource [missing] Finalizer [passed]
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
template <typename ResourceString,
          typename Finalizer,
          typename FinalizerDataType>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>
TypedThreadSafeFunction<ContextType, DataType, CallJs>::New(
    napi_env env,
    const Function& callback,
    ResourceString resourceName,
    size_t maxQueueSize,
    size_t initialThreadCount,
    ContextType* context,
    Finalizer finalizeCallback,
    FinalizerDataType* data) {
  TypedThreadSafeFunction<ContextType, DataType, CallJs> tsfn;

  auto* finalizeData = new details::
      ThreadSafeFinalize<ContextType, Finalizer, FinalizerDataType>(
          {data, finalizeCallback});
  napi_status status = napi_create_threadsafe_function(
      env,
      callback,
      nullptr,
      String::From(env, resourceName),
      maxQueueSize,
      initialThreadCount,
      finalizeData,
      details::ThreadSafeFinalize<ContextType, Finalizer, FinalizerDataType>::
          FinalizeFinalizeWrapperWithDataAndContext,
      context,
      CallJsInternal,
      &tsfn._tsfn);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(
        env, status, TypedThreadSafeFunction<ContextType, DataType, CallJs>());
  }

  return tsfn;
}

// static, with: Callback [passed] Resource [passed] Finalizer [passed]
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
template <typename CallbackType,
          typename ResourceString,
          typename Finalizer,
          typename FinalizerDataType>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>
TypedThreadSafeFunction<ContextType, DataType, CallJs>::New(
    napi_env env,
    CallbackType callback,
    const Object& resource,
    ResourceString resourceName,
    size_t maxQueueSize,
    size_t initialThreadCount,
    ContextType* context,
    Finalizer finalizeCallback,
    FinalizerDataType* data) {
  TypedThreadSafeFunction<ContextType, DataType, CallJs> tsfn;

  auto* finalizeData = new details::
      ThreadSafeFinalize<ContextType, Finalizer, FinalizerDataType>(
          {data, finalizeCallback});
  napi_status status = napi_create_threadsafe_function(
      env,
      details::DefaultCallbackWrapper<
          CallbackType,
          TypedThreadSafeFunction<ContextType, DataType, CallJs>>(env,
                                                                  callback),
      resource,
      String::From(env, resourceName),
      maxQueueSize,
      initialThreadCount,
      finalizeData,
      details::ThreadSafeFinalize<ContextType, Finalizer, FinalizerDataType>::
          FinalizeFinalizeWrapperWithDataAndContext,
      context,
      CallJsInternal,
      &tsfn._tsfn);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(
        env, status, TypedThreadSafeFunction<ContextType, DataType, CallJs>());
  }

  return tsfn;
}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>::
    TypedThreadSafeFunction()
    : _tsfn() {}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>::
    TypedThreadSafeFunction(napi_threadsafe_function tsfn)
    : _tsfn(tsfn) {}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline TypedThreadSafeFunction<ContextType, DataType, CallJs>::
operator napi_threadsafe_function() const {
  return _tsfn;
}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline napi_status
TypedThreadSafeFunction<ContextType, DataType, CallJs>::BlockingCall(
    DataType* data) const {
  return napi_call_threadsafe_function(_tsfn, data, napi_tsfn_blocking);
}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline napi_status
TypedThreadSafeFunction<ContextType, DataType, CallJs>::NonBlockingCall(
    DataType* data) const {
  return napi_call_threadsafe_function(_tsfn, data, napi_tsfn_nonblocking);
}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline void TypedThreadSafeFunction<ContextType, DataType, CallJs>::Ref(
    napi_env env) const {
  if (_tsfn != nullptr) {
    napi_status status = napi_ref_threadsafe_function(env, _tsfn);
    NAPI_THROW_IF_FAILED_VOID(env, status);
  }
}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline void TypedThreadSafeFunction<ContextType, DataType, CallJs>::Unref(
    napi_env env) const {
  if (_tsfn != nullptr) {
    napi_status status = napi_unref_threadsafe_function(env, _tsfn);
    NAPI_THROW_IF_FAILED_VOID(env, status);
  }
}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline napi_status
TypedThreadSafeFunction<ContextType, DataType, CallJs>::Acquire() const {
  return napi_acquire_threadsafe_function(_tsfn);
}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline napi_status
TypedThreadSafeFunction<ContextType, DataType, CallJs>::Release() {
  return napi_release_threadsafe_function(_tsfn, napi_tsfn_release);
}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline napi_status
TypedThreadSafeFunction<ContextType, DataType, CallJs>::Abort() {
  return napi_release_threadsafe_function(_tsfn, napi_tsfn_abort);
}

template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
inline ContextType*
TypedThreadSafeFunction<ContextType, DataType, CallJs>::GetContext() const {
  void* context;
  napi_status status = napi_get_threadsafe_function_context(_tsfn, &context);
  NAPI_FATAL_IF_FAILED(status,
                       "TypedThreadSafeFunction::GetContext",
                       "napi_get_threadsafe_function_context");
  return static_cast<ContextType*>(context);
}

// static
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
void TypedThreadSafeFunction<ContextType, DataType, CallJs>::CallJsInternal(
    napi_env env, napi_value jsCallback, void* context, void* data) {
  details::CallJsWrapper<ContextType, DataType, decltype(CallJs), CallJs>(
      env, jsCallback, context, data);
}

#if NAPI_VERSION == 4
// static
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
Napi::Function
TypedThreadSafeFunction<ContextType, DataType, CallJs>::EmptyFunctionFactory(
    Napi::Env env) {
  return Napi::Function::New(env, [](const CallbackInfo& cb) {});
}

// static
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
Napi::Function
TypedThreadSafeFunction<ContextType, DataType, CallJs>::FunctionOrEmpty(
    Napi::Env env, Napi::Function& callback) {
  if (callback.IsEmpty()) {
    return EmptyFunctionFactory(env);
  }
  return callback;
}

#else
// static
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
std::nullptr_t
TypedThreadSafeFunction<ContextType, DataType, CallJs>::EmptyFunctionFactory(
    Napi::Env /*env*/) {
  return nullptr;
}

// static
template <typename ContextType,
          typename DataType,
          void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*)>
Napi::Function
TypedThreadSafeFunction<ContextType, DataType, CallJs>::FunctionOrEmpty(
    Napi::Env /*env*/, Napi::Function& callback) {
  return callback;
}

#endif

////////////////////////////////////////////////////////////////////////////////
// ThreadSafeFunction class
////////////////////////////////////////////////////////////////////////////////

// static
template <typename ResourceString>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount) {
  return New(env, callback, Object(), resourceName, maxQueueSize,
             initialThreadCount);
}

// static
template <typename ResourceString, typename ContextType>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context) {
  return New(env, callback, Object(), resourceName, maxQueueSize,
             initialThreadCount, context);
}

// static
template <typename ResourceString, typename Finalizer>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  Finalizer finalizeCallback) {
  return New(env, callback, Object(), resourceName, maxQueueSize,
             initialThreadCount, finalizeCallback);
}

// static
template <typename ResourceString, typename Finalizer,
          typename FinalizerDataType>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  Finalizer finalizeCallback,
                                  FinalizerDataType* data) {
  return New(env, callback, Object(), resourceName, maxQueueSize,
             initialThreadCount, finalizeCallback, data);
}

// static
template <typename ResourceString, typename ContextType, typename Finalizer>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context,
                                  Finalizer finalizeCallback) {
  return New(env, callback, Object(), resourceName, maxQueueSize,
             initialThreadCount, context, finalizeCallback);
}

// static
template <typename ResourceString, typename ContextType,
          typename Finalizer, typename FinalizerDataType>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                                  const Function& callback,
                                                  ResourceString resourceName,
                                                  size_t maxQueueSize,
                                                  size_t initialThreadCount,
                                                  ContextType* context,
                                                  Finalizer finalizeCallback,
                                                  FinalizerDataType* data) {
  return New(env, callback, Object(), resourceName, maxQueueSize,
             initialThreadCount, context, finalizeCallback, data);
}

// static
template <typename ResourceString>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount) {
  return New(env, callback, resource, resourceName, maxQueueSize,
             initialThreadCount, static_cast<void*>(nullptr) /* context */);
}

// static
template <typename ResourceString, typename ContextType>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context) {
  return New(env, callback, resource, resourceName, maxQueueSize,
             initialThreadCount, context,
             [](Env, ContextType*) {} /* empty finalizer */);
}

// static
template <typename ResourceString, typename Finalizer>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  Finalizer finalizeCallback) {
  return New(env, callback, resource, resourceName, maxQueueSize,
             initialThreadCount, static_cast<void*>(nullptr) /* context */,
             finalizeCallback, static_cast<void*>(nullptr) /* data */,
             details::ThreadSafeFinalize<void, Finalizer>::Wrapper);
}

// static
template <typename ResourceString, typename Finalizer,
          typename FinalizerDataType>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  Finalizer finalizeCallback,
                                  FinalizerDataType* data) {
  return New(env, callback, resource, resourceName, maxQueueSize,
             initialThreadCount, static_cast<void*>(nullptr) /* context */,
             finalizeCallback, data,
             details::ThreadSafeFinalize<
                 void, Finalizer, FinalizerDataType>::FinalizeWrapperWithData);
}

// static
template <typename ResourceString, typename ContextType, typename Finalizer>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context,
                                  Finalizer finalizeCallback) {
  return New(env, callback, resource, resourceName, maxQueueSize,
             initialThreadCount, context, finalizeCallback,
             static_cast<void*>(nullptr) /* data */,
             details::ThreadSafeFinalize<
                 ContextType, Finalizer>::FinalizeWrapperWithContext);
}

// static
template <typename ResourceString, typename ContextType,
          typename Finalizer, typename FinalizerDataType>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                                  const Function& callback,
                                                  const Object& resource,
                                                  ResourceString resourceName,
                                                  size_t maxQueueSize,
                                                  size_t initialThreadCount,
                                                  ContextType* context,
                                                  Finalizer finalizeCallback,
                                                  FinalizerDataType* data) {
  return New(env, callback, resource, resourceName, maxQueueSize,
             initialThreadCount, context, finalizeCallback, data,
             details::ThreadSafeFinalize<ContextType, Finalizer,
                 FinalizerDataType>::FinalizeFinalizeWrapperWithDataAndContext);
}

inline ThreadSafeFunction::ThreadSafeFunction()
  : _tsfn() {
}

inline ThreadSafeFunction::ThreadSafeFunction(
    napi_threadsafe_function tsfn)
  : _tsfn(tsfn) {
}

inline ThreadSafeFunction::operator napi_threadsafe_function() const {
  return _tsfn;
}

inline napi_status ThreadSafeFunction::BlockingCall() const {
  return CallInternal(nullptr, napi_tsfn_blocking);
}

template <>
inline napi_status ThreadSafeFunction::BlockingCall(
    void* data) const {
  return napi_call_threadsafe_function(_tsfn, data, napi_tsfn_blocking);
}

template <typename Callback>
inline napi_status ThreadSafeFunction::BlockingCall(
    Callback callback) const {
  return CallInternal(new CallbackWrapper(callback), napi_tsfn_blocking);
}

template <typename DataType, typename Callback>
inline napi_status ThreadSafeFunction::BlockingCall(
    DataType* data, Callback callback) const {
  auto wrapper = [data, callback](Env env, Function jsCallback) {
    callback(env, jsCallback, data);
  };
  return CallInternal(new CallbackWrapper(wrapper), napi_tsfn_blocking);
}

inline napi_status ThreadSafeFunction::NonBlockingCall() const {
  return CallInternal(nullptr, napi_tsfn_nonblocking);
}

template <>
inline napi_status ThreadSafeFunction::NonBlockingCall(
    void* data) const {
  return napi_call_threadsafe_function(_tsfn, data, napi_tsfn_nonblocking);
}

template <typename Callback>
inline napi_status ThreadSafeFunction::NonBlockingCall(
    Callback callback) const {
  return CallInternal(new CallbackWrapper(callback), napi_tsfn_nonblocking);
}

template <typename DataType, typename Callback>
inline napi_status ThreadSafeFunction::NonBlockingCall(
    DataType* data, Callback callback) const {
  auto wrapper = [data, callback](Env env, Function jsCallback) {
    callback(env, jsCallback, data);
  };
  return CallInternal(new CallbackWrapper(wrapper), napi_tsfn_nonblocking);
}

inline void ThreadSafeFunction::Ref(napi_env env) const {
  if (_tsfn != nullptr) {
    napi_status status = napi_ref_threadsafe_function(env, _tsfn);
    NAPI_THROW_IF_FAILED_VOID(env, status);
  }
}

inline void ThreadSafeFunction::Unref(napi_env env) const {
  if (_tsfn != nullptr) {
    napi_status status = napi_unref_threadsafe_function(env, _tsfn);
    NAPI_THROW_IF_FAILED_VOID(env, status);
  }
}

inline napi_status ThreadSafeFunction::Acquire() const {
  return napi_acquire_threadsafe_function(_tsfn);
}

inline napi_status ThreadSafeFunction::Release() {
  return napi_release_threadsafe_function(_tsfn, napi_tsfn_release);
}

inline napi_status ThreadSafeFunction::Abort() {
  return napi_release_threadsafe_function(_tsfn, napi_tsfn_abort);
}

inline ThreadSafeFunction::ConvertibleContext
ThreadSafeFunction::GetContext() const {
  void* context;
  napi_status status = napi_get_threadsafe_function_context(_tsfn, &context);
  NAPI_FATAL_IF_FAILED(status, "ThreadSafeFunction::GetContext", "napi_get_threadsafe_function_context");
  return ConvertibleContext({ context });
}

// static
template <typename ResourceString, typename ContextType,
          typename Finalizer, typename FinalizerDataType>
inline ThreadSafeFunction ThreadSafeFunction::New(napi_env env,
                                                  const Function& callback,
                                                  const Object& resource,
                                                  ResourceString resourceName,
                                                  size_t maxQueueSize,
                                                  size_t initialThreadCount,
                                                  ContextType* context,
                                                  Finalizer finalizeCallback,
                                                  FinalizerDataType* data,
                                                  napi_finalize wrapper) {
  static_assert(details::can_make_string<ResourceString>::value
      || std::is_convertible<ResourceString, napi_value>::value,
      "Resource name should be convertible to the string type");

  ThreadSafeFunction tsfn;
  auto* finalizeData = new details::ThreadSafeFinalize<ContextType, Finalizer,
      FinalizerDataType>({ data, finalizeCallback });
  napi_status status = napi_create_threadsafe_function(env, callback, resource,
      Value::From(env, resourceName), maxQueueSize, initialThreadCount,
      finalizeData, wrapper, context, CallJS, &tsfn._tsfn);
  if (status != napi_ok) {
    delete finalizeData;
    NAPI_THROW_IF_FAILED(env, status, ThreadSafeFunction());
  }

  return tsfn;
}

inline napi_status ThreadSafeFunction::CallInternal(
    CallbackWrapper* callbackWrapper,
    napi_threadsafe_function_call_mode mode) const {
  napi_status status = napi_call_threadsafe_function(
      _tsfn, callbackWrapper, mode);
  if (status != napi_ok && callbackWrapper != nullptr) {
    delete callbackWrapper;
  }

  return status;
}

// static
inline void ThreadSafeFunction::CallJS(napi_env env,
                                       napi_value jsCallback,
                                       void* /* context */,
                                       void* data) {
  if (env == nullptr && jsCallback == nullptr) {
    return;
  }

  if (data != nullptr) {
    auto* callbackWrapper = static_cast<CallbackWrapper*>(data);
    (*callbackWrapper)(env, Function(env, jsCallback));
    delete callbackWrapper;
  } else if (jsCallback != nullptr) {
    Function(env, jsCallback).Call({});
  }
}

////////////////////////////////////////////////////////////////////////////////
// Async Progress Worker Base class
////////////////////////////////////////////////////////////////////////////////
template <typename DataType>
inline AsyncProgressWorkerBase<DataType>::AsyncProgressWorkerBase(const Object& receiver,
                                                                  const Function& callback,
                                                                  const char* resource_name,
                                                                  const Object& resource,
                                                                  size_t queue_size)
  : AsyncWorker(receiver, callback, resource_name, resource) {
  // Fill all possible arguments to work around ambiguous ThreadSafeFunction::New signatures.
  _tsfn = ThreadSafeFunction::New(callback.Env(),
                                  callback,
                                  resource,
                                  resource_name,
                                  queue_size,
                                  /** initialThreadCount */ 1,
                                  /** context */ this,
                                  OnThreadSafeFunctionFinalize,
                                  /** finalizeData */ this);
}

#if NAPI_VERSION > 4
template <typename DataType>
inline AsyncProgressWorkerBase<DataType>::AsyncProgressWorkerBase(Napi::Env env,
                                                                  const char* resource_name,
                                                                  const Object& resource,
                                                                  size_t queue_size)
  : AsyncWorker(env, resource_name, resource) {
  // TODO: Once the changes to make the callback optional for threadsafe
  // functions are available on all versions we can remove the dummy Function here.
  Function callback;
  // Fill all possible arguments to work around ambiguous ThreadSafeFunction::New signatures.
  _tsfn = ThreadSafeFunction::New(env,
                                  callback,
                                  resource,
                                  resource_name,
                                  queue_size,
                                  /** initialThreadCount */ 1,
                                  /** context */ this,
                                  OnThreadSafeFunctionFinalize,
                                  /** finalizeData */ this);
}
#endif

template<typename DataType>
inline AsyncProgressWorkerBase<DataType>::~AsyncProgressWorkerBase() {
  // Abort pending tsfn call.
  // Don't send progress events after we've already completed.
  // It's ok to call ThreadSafeFunction::Abort and ThreadSafeFunction::Release duplicated.
  _tsfn.Abort();
}

template <typename DataType>
inline void AsyncProgressWorkerBase<DataType>::OnAsyncWorkProgress(Napi::Env /* env */,
                                Napi::Function /* jsCallback */,
                                void* data) {
  ThreadSafeData* tsd = static_cast<ThreadSafeData*>(data);
  tsd->asyncprogressworker()->OnWorkProgress(tsd->data());
  delete tsd;
}

template <typename DataType>
inline napi_status AsyncProgressWorkerBase<DataType>::NonBlockingCall(DataType* data) {
  auto tsd = new AsyncProgressWorkerBase::ThreadSafeData(this, data);
  return _tsfn.NonBlockingCall(tsd, OnAsyncWorkProgress);
}

template <typename DataType>
inline void AsyncProgressWorkerBase<DataType>::OnWorkComplete(Napi::Env /* env */, napi_status status) {
  _work_completed = true;
  _complete_status = status;
  _tsfn.Release();
}

template <typename DataType>
inline void AsyncProgressWorkerBase<DataType>::OnThreadSafeFunctionFinalize(Napi::Env env, void* /* data */, AsyncProgressWorkerBase* context) {
  if (context->_work_completed) {
    context->AsyncWorker::OnWorkComplete(env, context->_complete_status);
  }
}

////////////////////////////////////////////////////////////////////////////////
// Async Progress Worker class
////////////////////////////////////////////////////////////////////////////////
template<class T>
inline AsyncProgressWorker<T>::AsyncProgressWorker(const Function& callback)
  : AsyncProgressWorker(callback, "generic") {
}

template<class T>
inline AsyncProgressWorker<T>::AsyncProgressWorker(const Function& callback,
                                const char* resource_name)
  : AsyncProgressWorker(callback, resource_name, Object::New(callback.Env())) {
}

template<class T>
inline AsyncProgressWorker<T>::AsyncProgressWorker(const Function& callback,
                                const char* resource_name,
                                const Object& resource)
  : AsyncProgressWorker(Object::New(callback.Env()),
                callback,
                resource_name,
                resource) {
}

template<class T>
inline AsyncProgressWorker<T>::AsyncProgressWorker(const Object& receiver,
                                                   const Function& callback)
  : AsyncProgressWorker(receiver, callback, "generic") {
}

template<class T>
inline AsyncProgressWorker<T>::AsyncProgressWorker(const Object& receiver,
                                                   const Function& callback,
                                                   const char* resource_name)
  : AsyncProgressWorker(receiver,
                callback,
                resource_name,
                Object::New(callback.Env())) {
}

template<class T>
inline AsyncProgressWorker<T>::AsyncProgressWorker(const Object& receiver,
                                                   const Function& callback,
                                                   const char* resource_name,
                                                   const Object& resource)
  : AsyncProgressWorkerBase(receiver, callback, resource_name, resource),
    _asyncdata(nullptr),
    _asyncsize(0) {
}

#if NAPI_VERSION > 4
template<class T>
inline AsyncProgressWorker<T>::AsyncProgressWorker(Napi::Env env)
  : AsyncProgressWorker(env, "generic") {
}

template<class T>
inline AsyncProgressWorker<T>::AsyncProgressWorker(Napi::Env env,
                                                   const char* resource_name)
  : AsyncProgressWorker(env, resource_name, Object::New(env)) {
}

template<class T>
inline AsyncProgressWorker<T>::AsyncProgressWorker(Napi::Env env,
                                                   const char* resource_name,
                                                   const Object& resource)
  : AsyncProgressWorkerBase(env, resource_name, resource),
    _asyncdata(nullptr),
    _asyncsize(0) {
}
#endif

template<class T>
inline AsyncProgressWorker<T>::~AsyncProgressWorker() {
  {
    std::lock_guard<std::mutex> lock(this->_mutex);
    _asyncdata = nullptr;
    _asyncsize = 0;
  }
}

template<class T>
inline void AsyncProgressWorker<T>::Execute() {
  ExecutionProgress progress(this);
  Execute(progress);
}

template<class T>
inline void AsyncProgressWorker<T>::OnWorkProgress(void*) {
  T* data;
  size_t size;
  {
    std::lock_guard<std::mutex> lock(this->_mutex);
    data = this->_asyncdata;
    size = this->_asyncsize;
    this->_asyncdata = nullptr;
    this->_asyncsize = 0;
  }

  /**
   * The callback of ThreadSafeFunction is not been invoked immediately on the
   * callback of uv_async_t (uv io poll), rather the callback of TSFN is
   * invoked on the right next uv idle callback. There are chances that during
   * the deferring the signal of uv_async_t is been sent again, i.e. potential
   * not coalesced two calls of the TSFN callback.
   */
  if (data == nullptr) {
    return;
  }

  this->OnProgress(data, size);
  delete[] data;
}

template<class T>
inline void AsyncProgressWorker<T>::SendProgress_(const T* data, size_t count) {
    T* new_data = new T[count];
    std::copy(data, data + count, new_data);

    T* old_data;
    {
      std::lock_guard<std::mutex> lock(this->_mutex);
      old_data = _asyncdata;
      _asyncdata = new_data;
      _asyncsize = count;
    }
    this->NonBlockingCall(nullptr);

    delete[] old_data;
}

template<class T>
inline void AsyncProgressWorker<T>::Signal() const {
  this->NonBlockingCall(static_cast<T*>(nullptr));
}

template<class T>
inline void AsyncProgressWorker<T>::ExecutionProgress::Signal() const {
  _worker->Signal();
}

template<class T>
inline void AsyncProgressWorker<T>::ExecutionProgress::Send(const T* data, size_t count) const {
  _worker->SendProgress_(data, count);
}

////////////////////////////////////////////////////////////////////////////////
// Async Progress Queue Worker class
////////////////////////////////////////////////////////////////////////////////
template<class T>
inline AsyncProgressQueueWorker<T>::AsyncProgressQueueWorker(const Function& callback)
  : AsyncProgressQueueWorker(callback, "generic") {
}

template<class T>
inline AsyncProgressQueueWorker<T>::AsyncProgressQueueWorker(const Function& callback,
                                                             const char* resource_name)
  : AsyncProgressQueueWorker(callback, resource_name, Object::New(callback.Env())) {
}

template<class T>
inline AsyncProgressQueueWorker<T>::AsyncProgressQueueWorker(const Function& callback,
                                                             const char* resource_name,
                                                             const Object& resource)
  : AsyncProgressQueueWorker(Object::New(callback.Env()),
                             callback,
                             resource_name,
                             resource) {
}

template<class T>
inline AsyncProgressQueueWorker<T>::AsyncProgressQueueWorker(const Object& receiver,
                                                             const Function& callback)
  : AsyncProgressQueueWorker(receiver, callback, "generic") {
}

template<class T>
inline AsyncProgressQueueWorker<T>::AsyncProgressQueueWorker(const Object& receiver,
                                                             const Function& callback,
                                                             const char* resource_name)
  : AsyncProgressQueueWorker(receiver,
                             callback,
                             resource_name,
                             Object::New(callback.Env())) {
}

template<class T>
inline AsyncProgressQueueWorker<T>::AsyncProgressQueueWorker(const Object& receiver,
                                                             const Function& callback,
                                                             const char* resource_name,
                                                             const Object& resource)
  : AsyncProgressWorkerBase<std::pair<T*, size_t>>(receiver, callback, resource_name, resource, /** unlimited queue size */0) {
}

#if NAPI_VERSION > 4
template<class T>
inline AsyncProgressQueueWorker<T>::AsyncProgressQueueWorker(Napi::Env env)
  : AsyncProgressQueueWorker(env, "generic") {
}

template<class T>
inline AsyncProgressQueueWorker<T>::AsyncProgressQueueWorker(Napi::Env env,
                                const char* resource_name)
  : AsyncProgressQueueWorker(env, resource_name, Object::New(env)) {
}

template<class T>
inline AsyncProgressQueueWorker<T>::AsyncProgressQueueWorker(Napi::Env env,
                                                             const char* resource_name,
                                                             const Object& resource)
  : AsyncProgressWorkerBase<std::pair<T*, size_t>>(env, resource_name, resource, /** unlimited queue size */0) {
}
#endif

template<class T>
inline void AsyncProgressQueueWorker<T>::Execute() {
  ExecutionProgress progress(this);
  Execute(progress);
}

template<class T>
inline void AsyncProgressQueueWorker<T>::OnWorkProgress(std::pair<T*, size_t>* datapair) {
  if (datapair == nullptr) {
    return;
  }

  T *data = datapair->first;
  size_t size = datapair->second;

  this->OnProgress(data, size);
  delete datapair;
  delete[] data;
}

template<class T>
inline void AsyncProgressQueueWorker<T>::SendProgress_(const T* data, size_t count) {
    T* new_data = new T[count];
    std::copy(data, data + count, new_data);

    auto pair = new std::pair<T*, size_t>(new_data, count);
    this->NonBlockingCall(pair);
}

template<class T>
inline void AsyncProgressQueueWorker<T>::Signal() const {
  this->NonBlockingCall(nullptr);
}

template<class T>
inline void AsyncProgressQueueWorker<T>::OnWorkComplete(Napi::Env env, napi_status status) {
  // Draining queued items in TSFN.
  AsyncProgressWorkerBase<std::pair<T*, size_t>>::OnWorkComplete(env, status);
}

template<class T>
inline void AsyncProgressQueueWorker<T>::ExecutionProgress::Signal() const {
  _worker->Signal();
}

template<class T>
inline void AsyncProgressQueueWorker<T>::ExecutionProgress::Send(const T* data, size_t count) const {
  _worker->SendProgress_(data, count);
}
#endif  // NAPI_VERSION > 3 && !defined(__wasm32__)

////////////////////////////////////////////////////////////////////////////////
// Memory Management class
////////////////////////////////////////////////////////////////////////////////

inline int64_t MemoryManagement::AdjustExternalMemory(Env env, int64_t change_in_bytes) {
  int64_t result;
  napi_status status = napi_adjust_external_memory(env, change_in_bytes, &result);
  NAPI_THROW_IF_FAILED(env, status, 0);
  return result;
}

////////////////////////////////////////////////////////////////////////////////
// Version Management class
////////////////////////////////////////////////////////////////////////////////

inline uint32_t VersionManagement::GetNapiVersion(Env env) {
  uint32_t result;
  napi_status status = napi_get_version(env, &result);
  NAPI_THROW_IF_FAILED(env, status, 0);
  return result;
}

inline const napi_node_version* VersionManagement::GetNodeVersion(Env env) {
  const napi_node_version* result;
  napi_status status = napi_get_node_version(env, &result);
  NAPI_THROW_IF_FAILED(env, status, 0);
  return result;
}

#if NAPI_VERSION > 5
////////////////////////////////////////////////////////////////////////////////
// Addon<T> class
////////////////////////////////////////////////////////////////////////////////

template <typename T>
inline Object Addon<T>::Init(Env env, Object exports) {
  T* addon = new T(env, exports);
  env.SetInstanceData(addon);
  return addon->entry_point_;
}

template <typename T>
inline T* Addon<T>::Unwrap(Object wrapper) {
  return wrapper.Env().GetInstanceData<T>();
}

template <typename T>
inline void
Addon<T>::DefineAddon(Object exports,
                      const std::initializer_list<AddonProp>& props) {
  DefineProperties(exports, props);
  entry_point_ = exports;
}

template <typename T>
inline Napi::Object
Addon<T>::DefineProperties(Object object,
                           const std::initializer_list<AddonProp>& props) {
  const napi_property_descriptor* properties =
    reinterpret_cast<const napi_property_descriptor*>(props.begin());
  size_t size = props.size();
  napi_status status = napi_define_properties(object.Env(),
                                              object,
                                              size,
                                              properties);
  NAPI_THROW_IF_FAILED(object.Env(), status, object);
  for (size_t idx = 0; idx < size; idx++)
    T::AttachPropData(object.Env(), object, &properties[idx]);
  return object;
}
#endif  // NAPI_VERSION > 5

} // namespace Napi

#endif // SRC_NAPI_INL_H_
#ifndef SRC_NAPI_H_
#define SRC_NAPI_H_

#include <node_api.h>
#include <functional>
#include <initializer_list>
#include <memory>
#include <mutex>
#include <string>
#include <vector>

// VS2015 RTM has bugs with constexpr, so require min of VS2015 Update 3 (known good version)
#if !defined(_MSC_VER) || _MSC_FULL_VER >= 190024210
#define NAPI_HAS_CONSTEXPR 1
#endif

// VS2013 does not support char16_t literal strings, so we'll work around it using wchar_t strings
// and casting them. This is safe as long as the character sizes are the same.
#if defined(_MSC_VER) && _MSC_VER <= 1800
static_assert(sizeof(char16_t) == sizeof(wchar_t), "Size mismatch between char16_t and wchar_t");
#define NAPI_WIDE_TEXT(x) reinterpret_cast<char16_t*>(L ## x)
#else
#define NAPI_WIDE_TEXT(x) u ## x
#endif

// If C++ exceptions are not explicitly enabled or disabled, enable them
// if exceptions were enabled in the compiler settings.
#if !defined(NAPI_CPP_EXCEPTIONS) && !defined(NAPI_DISABLE_CPP_EXCEPTIONS)
  #if defined(_CPPUNWIND) || defined (__EXCEPTIONS)
    #define NAPI_CPP_EXCEPTIONS
  #else
    #error Exception support not detected. \
      Define either NAPI_CPP_EXCEPTIONS or NAPI_DISABLE_CPP_EXCEPTIONS.
  #endif
#endif

#ifdef _NOEXCEPT
  #define NAPI_NOEXCEPT _NOEXCEPT
#else
  #define NAPI_NOEXCEPT noexcept
#endif

#ifdef NAPI_CPP_EXCEPTIONS

// When C++ exceptions are enabled, Errors are thrown directly. There is no need
// to return anything after the throw statements. The variadic parameter is an
// optional return value that is ignored.
// We need _VOID versions of the macros to avoid warnings resulting from
// leaving the NAPI_THROW_* `...` argument empty.

#define NAPI_THROW(e, ...)  throw e
#define NAPI_THROW_VOID(e)  throw e

#define NAPI_THROW_IF_FAILED(env, status, ...)           \
  if ((status) != napi_ok) throw Napi::Error::New(env);

#define NAPI_THROW_IF_FAILED_VOID(env, status)           \
  if ((status) != napi_ok) throw Napi::Error::New(env);

#else // NAPI_CPP_EXCEPTIONS

// When C++ exceptions are disabled, Errors are thrown as JavaScript exceptions,
// which are pending until the callback returns to JS.  The variadic parameter
// is an optional return value; usually it is an empty result.
// We need _VOID versions of the macros to avoid warnings resulting from
// leaving the NAPI_THROW_* `...` argument empty.

#define NAPI_THROW(e, ...)                               \
  do {                                                   \
    (e).ThrowAsJavaScriptException();                    \
    return __VA_ARGS__;                                  \
  } while (0)

#define NAPI_THROW_VOID(e)                               \
  do {                                                   \
    (e).ThrowAsJavaScriptException();                    \
    return;                                              \
  } while (0)

#define NAPI_THROW_IF_FAILED(env, status, ...)           \
  if ((status) != napi_ok) {                             \
    Napi::Error::New(env).ThrowAsJavaScriptException();  \
    return __VA_ARGS__;                                  \
  }

#define NAPI_THROW_IF_FAILED_VOID(env, status)           \
  if ((status) != napi_ok) {                             \
    Napi::Error::New(env).ThrowAsJavaScriptException();  \
    return;                                              \
  }

#endif // NAPI_CPP_EXCEPTIONS

# define NAPI_DISALLOW_ASSIGN(CLASS) void operator=(const CLASS&) = delete;
# define NAPI_DISALLOW_COPY(CLASS) CLASS(const CLASS&) = delete;

#define NAPI_DISALLOW_ASSIGN_COPY(CLASS)  \
    NAPI_DISALLOW_ASSIGN(CLASS)           \
    NAPI_DISALLOW_COPY(CLASS)

#define NAPI_FATAL_IF_FAILED(status, location, message)  \
  do {                                                   \
    if ((status) != napi_ok) {                           \
      Napi::Error::Fatal((location), (message));         \
    }                                                    \
  } while (0)

////////////////////////////////////////////////////////////////////////////////
/// Node-API C++ Wrapper Classes
///
/// These classes wrap the "Node-API" ABI-stable C APIs for Node.js, providing a
/// C++ object model and C++ exception-handling semantics with low overhead.
/// The wrappers are all header-only so that they do not affect the ABI.
////////////////////////////////////////////////////////////////////////////////
namespace Napi {

  // Forward declarations
  class Env;
  class Value;
  class Boolean;
  class Number;
#if NAPI_VERSION > 5
  class BigInt;
#endif  // NAPI_VERSION > 5
#if (NAPI_VERSION > 4)
  class Date;
#endif
  class String;
  class Object;
  class Array;
  class ArrayBuffer;
  class Function;
  class Error;
  class PropertyDescriptor;
  class CallbackInfo;
  class TypedArray;
  template <typename T> class TypedArrayOf;

  using Int8Array =
      TypedArrayOf<int8_t>;  ///< Typed-array of signed 8-bit integers
  using Uint8Array =
      TypedArrayOf<uint8_t>;  ///< Typed-array of unsigned 8-bit integers
  using Int16Array =
      TypedArrayOf<int16_t>;  ///< Typed-array of signed 16-bit integers
  using Uint16Array =
      TypedArrayOf<uint16_t>;  ///< Typed-array of unsigned 16-bit integers
  using Int32Array =
      TypedArrayOf<int32_t>;  ///< Typed-array of signed 32-bit integers
  using Uint32Array =
      TypedArrayOf<uint32_t>;  ///< Typed-array of unsigned 32-bit integers
  using Float32Array =
      TypedArrayOf<float>;  ///< Typed-array of 32-bit floating-point values
  using Float64Array =
      TypedArrayOf<double>;  ///< Typed-array of 64-bit floating-point values
#if NAPI_VERSION > 5
  using BigInt64Array =
      TypedArrayOf<int64_t>;  ///< Typed array of signed 64-bit integers
  using BigUint64Array =
      TypedArrayOf<uint64_t>;  ///< Typed array of unsigned 64-bit integers
#endif  // NAPI_VERSION > 5

  /// Defines the signature of a Node-API C++ module's registration callback
  /// (init) function.
  using ModuleRegisterCallback = Object (*)(Env env, Object exports);

  class MemoryManagement;

  /// Environment for Node-API values and operations.
  ///
  /// All Node-API values and operations must be associated with an environment.
  /// An environment instance is always provided to callback functions; that
  /// environment must then be used for any creation of Node-API values or other
  /// Node-API operations within the callback. (Many methods infer the
  /// environment from the `this` instance that the method is called on.)
  ///
  /// In the future, multiple environments per process may be supported,
  /// although current implementations only support one environment per process.
  ///
  /// In the V8 JavaScript engine, a Node-API environment approximately
  /// corresponds to an Isolate.
  class Env {
#if NAPI_VERSION > 5
  private:
    template <typename T> static void DefaultFini(Env, T* data);
    template <typename DataType, typename HintType>
    static void DefaultFiniWithHint(Env, DataType* data, HintType* hint);
#endif  // NAPI_VERSION > 5
  public:
    Env(napi_env env);

    operator napi_env() const;

    Object Global() const;
    Value Undefined() const;
    Value Null() const;

    bool IsExceptionPending() const;
    Error GetAndClearPendingException();

    Value RunScript(const char* utf8script);
    Value RunScript(const std::string& utf8script);
    Value RunScript(String script);

#if NAPI_VERSION > 5
    template <typename T> T* GetInstanceData();

    template <typename T> using Finalizer = void (*)(Env, T*);
    template <typename T, Finalizer<T> fini = Env::DefaultFini<T>>
    void SetInstanceData(T* data);

    template <typename DataType, typename HintType>
    using FinalizerWithHint = void (*)(Env, DataType*, HintType*);
    template <typename DataType,
              typename HintType,
              FinalizerWithHint<DataType, HintType> fini =
                Env::DefaultFiniWithHint<DataType, HintType>>
    void SetInstanceData(DataType* data, HintType* hint);
#endif  // NAPI_VERSION > 5

  private:
    napi_env _env;
  };

  /// A JavaScript value of unknown type.
  ///
  /// For type-specific operations, convert to one of the Value subclasses using a `To*` or `As()`
  /// method. The `To*` methods do type coercion; the `As()` method does not.
  ///
  ///     Napi::Value value = ...
  ///     if (!value.IsString()) throw Napi::TypeError::New(env, "Invalid arg...");
  ///     Napi::String str = value.As<Napi::String>(); // Cast to a string value
  ///
  ///     Napi::Value anotherValue = ...
  ///     bool isTruthy = anotherValue.ToBoolean(); // Coerce to a boolean value
  class Value {
  public:
    Value();                               ///< Creates a new _empty_ Value instance.
    Value(napi_env env,
          napi_value value);  ///< Wraps a Node-API value primitive.

    /// Creates a JS value from a C++ primitive.
    ///
    /// `value` may be any of:
    /// - bool
    /// - Any integer type
    /// - Any floating point type
    /// - const char* (encoded using UTF-8, null-terminated)
    /// - const char16_t* (encoded using UTF-16-LE, null-terminated)
    /// - std::string (encoded using UTF-8)
    /// - std::u16string
    /// - napi::Value
    /// - napi_value
    template <typename T>
    static Value From(napi_env env, const T& value);

    /// Converts to a Node-API value primitive.
    ///
    /// If the instance is _empty_, this returns `nullptr`.
    operator napi_value() const;

    /// Tests if this value strictly equals another value.
    bool operator ==(const Value& other) const;

    /// Tests if this value does not strictly equal another value.
    bool operator !=(const Value& other) const;

    /// Tests if this value strictly equals another value.
    bool StrictEquals(const Value& other) const;

    /// Gets the environment the value is associated with.
    Napi::Env Env() const;

    /// Checks if the value is empty (uninitialized).
    ///
    /// An empty value is invalid, and most attempts to perform an operation on an empty value
    /// will result in an exception. Note an empty value is distinct from JavaScript `null` or
    /// `undefined`, which are valid values.
    ///
    /// When C++ exceptions are disabled at compile time, a method with a `Value` return type may
    /// return an empty value to indicate a pending exception. So when not using C++ exceptions,
    /// callers should check whether the value is empty before attempting to use it.
    bool IsEmpty() const;

    napi_valuetype Type() const; ///< Gets the type of the value.

    bool IsUndefined() const;   ///< Tests if a value is an undefined JavaScript value.
    bool IsNull() const;        ///< Tests if a value is a null JavaScript value.
    bool IsBoolean() const;     ///< Tests if a value is a JavaScript boolean.
    bool IsNumber() const;      ///< Tests if a value is a JavaScript number.
#if NAPI_VERSION > 5
    bool IsBigInt() const;      ///< Tests if a value is a JavaScript bigint.
#endif  // NAPI_VERSION > 5
#if (NAPI_VERSION > 4)
    bool IsDate() const;        ///< Tests if a value is a JavaScript date.
#endif
    bool IsString() const;      ///< Tests if a value is a JavaScript string.
    bool IsSymbol() const;      ///< Tests if a value is a JavaScript symbol.
    bool IsArray() const;       ///< Tests if a value is a JavaScript array.
    bool IsArrayBuffer() const; ///< Tests if a value is a JavaScript array buffer.
    bool IsTypedArray() const;  ///< Tests if a value is a JavaScript typed array.
    bool IsObject() const;      ///< Tests if a value is a JavaScript object.
    bool IsFunction() const;    ///< Tests if a value is a JavaScript function.
    bool IsPromise() const;     ///< Tests if a value is a JavaScript promise.
    bool IsDataView() const;    ///< Tests if a value is a JavaScript data view.
    bool IsBuffer() const;      ///< Tests if a value is a Node buffer.
    bool IsExternal() const;    ///< Tests if a value is a pointer to external data.

    /// Casts to another type of `Napi::Value`, when the actual type is known or assumed.
    ///
    /// This conversion does NOT coerce the type. Calling any methods inappropriate for the actual
    /// value type will throw `Napi::Error`.
    template <typename T> T As() const;

    Boolean ToBoolean() const; ///< Coerces a value to a JavaScript boolean.
    Number ToNumber() const;   ///< Coerces a value to a JavaScript number.
    String ToString() const;   ///< Coerces a value to a JavaScript string.
    Object ToObject() const;   ///< Coerces a value to a JavaScript object.

  protected:
    /// !cond INTERNAL
    napi_env _env;
    napi_value _value;
    /// !endcond
  };

  /// A JavaScript boolean value.
  class Boolean : public Value {
  public:
   static Boolean New(napi_env env,  ///< Node-API environment
                      bool value     ///< Boolean value
   );

   Boolean();  ///< Creates a new _empty_ Boolean instance.
   Boolean(napi_env env,
           napi_value value);  ///< Wraps a Node-API value primitive.

   operator bool() const;  ///< Converts a Boolean value to a boolean primitive.
   bool Value() const;     ///< Converts a Boolean value to a boolean primitive.
  };

  /// A JavaScript number value.
  class Number : public Value {
  public:
   static Number New(napi_env env,  ///< Node-API environment
                     double value   ///< Number value
   );

   Number();  ///< Creates a new _empty_ Number instance.
   Number(napi_env env,
          napi_value value);  ///< Wraps a Node-API value primitive.

   operator int32_t()
       const;  ///< Converts a Number value to a 32-bit signed integer value.
   operator uint32_t()
       const;  ///< Converts a Number value to a 32-bit unsigned integer value.
   operator int64_t()
       const;  ///< Converts a Number value to a 64-bit signed integer value.
   operator float()
       const;  ///< Converts a Number value to a 32-bit floating-point value.
   operator double()
       const;  ///< Converts a Number value to a 64-bit floating-point value.

   int32_t Int32Value()
       const;  ///< Converts a Number value to a 32-bit signed integer value.
   uint32_t Uint32Value()
       const;  ///< Converts a Number value to a 32-bit unsigned integer value.
   int64_t Int64Value()
       const;  ///< Converts a Number value to a 64-bit signed integer value.
   float FloatValue()
       const;  ///< Converts a Number value to a 32-bit floating-point value.
   double DoubleValue()
       const;  ///< Converts a Number value to a 64-bit floating-point value.
  };

#if NAPI_VERSION > 5
  /// A JavaScript bigint value.
  class BigInt : public Value {
  public:
   static BigInt New(napi_env env,  ///< Node-API environment
                     int64_t value  ///< Number value
   );
   static BigInt New(napi_env env,   ///< Node-API environment
                     uint64_t value  ///< Number value
   );

   /// Creates a new BigInt object using a specified sign bit and a
   /// specified list of digits/words.
   /// The resulting number is calculated as:
   /// (-1)^sign_bit * (words[0] * (2^64)^0 + words[1] * (2^64)^1 + ...)
   static BigInt New(napi_env env,          ///< Node-API environment
                     int sign_bit,          ///< Sign bit. 1 if negative.
                     size_t word_count,     ///< Number of words in array
                     const uint64_t* words  ///< Array of words
   );

   BigInt();  ///< Creates a new _empty_ BigInt instance.
   BigInt(napi_env env,
          napi_value value);  ///< Wraps a Node-API value primitive.

   int64_t Int64Value(bool* lossless)
       const;  ///< Converts a BigInt value to a 64-bit signed integer value.
   uint64_t Uint64Value(bool* lossless)
       const;  ///< Converts a BigInt value to a 64-bit unsigned integer value.

   size_t WordCount() const;  ///< The number of 64-bit words needed to store
                              ///< the result of ToWords().

   /// Writes the contents of this BigInt to a specified memory location.
   /// `sign_bit` must be provided and will be set to 1 if this BigInt is
   /// negative.
   /// `*word_count` has to be initialized to the length of the `words` array.
   /// Upon return, it will be set to the actual number of words that would
   /// be needed to store this BigInt (i.e. the return value of `WordCount()`).
   void ToWords(int* sign_bit, size_t* word_count, uint64_t* words);
  };
#endif  // NAPI_VERSION > 5

#if (NAPI_VERSION > 4)
  /// A JavaScript date value.
  class Date : public Value {
  public:
    /// Creates a new Date value from a double primitive.
   static Date New(napi_env env,  ///< Node-API environment
                   double value   ///< Number value
   );

   Date();  ///< Creates a new _empty_ Date instance.
   Date(napi_env env, napi_value value);  ///< Wraps a Node-API value primitive.
   operator double() const;  ///< Converts a Date value to double primitive

   double ValueOf() const;  ///< Converts a Date value to a double primitive.
  };
  #endif

  /// A JavaScript string or symbol value (that can be used as a property name).
  class Name : public Value {
  public:
    Name();                               ///< Creates a new _empty_ Name instance.
    Name(napi_env env,
         napi_value value);  ///< Wraps a Node-API value primitive.
  };

  /// A JavaScript string value.
  class String : public Name {
  public:
    /// Creates a new String value from a UTF-8 encoded C++ string.
   static String New(napi_env env,             ///< Node-API environment
                     const std::string& value  ///< UTF-8 encoded C++ string
   );

   /// Creates a new String value from a UTF-16 encoded C++ string.
   static String New(napi_env env,                ///< Node-API environment
                     const std::u16string& value  ///< UTF-16 encoded C++ string
   );

   /// Creates a new String value from a UTF-8 encoded C string.
   static String New(
       napi_env env,      ///< Node-API environment
       const char* value  ///< UTF-8 encoded null-terminated C string
   );

   /// Creates a new String value from a UTF-16 encoded C string.
   static String New(
       napi_env env,          ///< Node-API environment
       const char16_t* value  ///< UTF-16 encoded null-terminated C string
   );

   /// Creates a new String value from a UTF-8 encoded C string with specified
   /// length.
   static String New(napi_env env,       ///< Node-API environment
                     const char* value,  ///< UTF-8 encoded C string (not
                                         ///< necessarily null-terminated)
                     size_t length       ///< length of the string in bytes
   );

   /// Creates a new String value from a UTF-16 encoded C string with specified
   /// length.
   static String New(
       napi_env env,           ///< Node-API environment
       const char16_t* value,  ///< UTF-16 encoded C string (not necessarily
                               ///< null-terminated)
       size_t length           ///< Length of the string in 2-byte code units
   );

   /// Creates a new String based on the original object's type.
   ///
   /// `value` may be any of:
   /// - const char* (encoded using UTF-8, null-terminated)
   /// - const char16_t* (encoded using UTF-16-LE, null-terminated)
   /// - std::string (encoded using UTF-8)
   /// - std::u16string
   template <typename T>
   static String From(napi_env env, const T& value);

   String();  ///< Creates a new _empty_ String instance.
   String(napi_env env,
          napi_value value);  ///< Wraps a Node-API value primitive.

   operator std::string()
       const;  ///< Converts a String value to a UTF-8 encoded C++ string.
   operator std::u16string()
       const;  ///< Converts a String value to a UTF-16 encoded C++ string.
   std::string Utf8Value()
       const;  ///< Converts a String value to a UTF-8 encoded C++ string.
   std::u16string Utf16Value()
       const;  ///< Converts a String value to a UTF-16 encoded C++ string.
  };

  /// A JavaScript symbol value.
  class Symbol : public Name {
  public:
    /// Creates a new Symbol value with an optional description.
   static Symbol New(
       napi_env env,  ///< Node-API environment
       const char* description =
           nullptr  ///< Optional UTF-8 encoded null-terminated C string
                    ///  describing the symbol
   );

   /// Creates a new Symbol value with a description.
   static Symbol New(
       napi_env env,  ///< Node-API environment
       const std::string&
           description  ///< UTF-8 encoded C++ string describing the symbol
   );

   /// Creates a new Symbol value with a description.
   static Symbol New(napi_env env,       ///< Node-API environment
                     String description  ///< String value describing the symbol
   );

   /// Creates a new Symbol value with a description.
   static Symbol New(
       napi_env env,           ///< Node-API environment
       napi_value description  ///< String value describing the symbol
   );

   /// Get a public Symbol (e.g. Symbol.iterator).
   static Symbol WellKnown(napi_env, const std::string& name);

   Symbol();  ///< Creates a new _empty_ Symbol instance.
   Symbol(napi_env env,
          napi_value value);  ///< Wraps a Node-API value primitive.
  };

  /// A JavaScript object value.
  class Object : public Value {
  public:
    /// Enables property and element assignments using indexing syntax.
    ///
    /// Example:
    ///
    ///     Napi::Value propertyValue = object1['A'];
    ///     object2['A'] = propertyValue;
    ///     Napi::Value elementValue = array[0];
    ///     array[1] = elementValue;
    template <typename Key>
    class PropertyLValue {
    public:
      /// Converts an L-value to a value.
      operator Value() const;

      /// Assigns a value to the property. The type of value can be
      /// anything supported by `Object::Set`.
      template <typename ValueType>
      PropertyLValue& operator =(ValueType value);

    private:
      PropertyLValue() = delete;
      PropertyLValue(Object object, Key key);
      napi_env _env;
      napi_value _object;
      Key _key;

      friend class Napi::Object;
    };

    /// Creates a new Object value.
    static Object New(napi_env env  ///< Node-API environment
    );

    Object();                               ///< Creates a new _empty_ Object instance.
    Object(napi_env env,
           napi_value value);  ///< Wraps a Node-API value primitive.

    /// Gets or sets a named property.
    PropertyLValue<std::string> operator [](
      const char* utf8name ///< UTF-8 encoded null-terminated property name
    );

    /// Gets or sets a named property.
    PropertyLValue<std::string> operator [](
      const std::string& utf8name ///< UTF-8 encoded property name
    );

    /// Gets or sets an indexed property or array element.
    PropertyLValue<uint32_t> operator [](
      uint32_t index /// Property / element index
    );

    /// Gets a named property.
    Value operator [](
      const char* utf8name ///< UTF-8 encoded null-terminated property name
    ) const;

    /// Gets a named property.
    Value operator [](
      const std::string& utf8name ///< UTF-8 encoded property name
    ) const;

    /// Gets an indexed property or array element.
    Value operator [](
      uint32_t index ///< Property / element index
    ) const;

    /// Checks whether a property is present.
    bool Has(
      napi_value key ///< Property key primitive
    ) const;

    /// Checks whether a property is present.
    bool Has(
      Value key ///< Property key
    ) const;

    /// Checks whether a named property is present.
    bool Has(
      const char* utf8name ///< UTF-8 encoded null-terminated property name
    ) const;

    /// Checks whether a named property is present.
    bool Has(
      const std::string& utf8name ///< UTF-8 encoded property name
    ) const;

    /// Checks whether a own property is present.
    bool HasOwnProperty(
      napi_value key ///< Property key primitive
    ) const;

    /// Checks whether a own property is present.
    bool HasOwnProperty(
      Value key ///< Property key
    ) const;

    /// Checks whether a own property is present.
    bool HasOwnProperty(
      const char* utf8name ///< UTF-8 encoded null-terminated property name
    ) const;

    /// Checks whether a own property is present.
    bool HasOwnProperty(
      const std::string& utf8name ///< UTF-8 encoded property name
    ) const;

    /// Gets a property.
    Value Get(
      napi_value key ///< Property key primitive
    ) const;

    /// Gets a property.
    Value Get(
      Value key ///< Property key
    ) const;

    /// Gets a named property.
    Value Get(
      const char* utf8name ///< UTF-8 encoded null-terminated property name
    ) const;

    /// Gets a named property.
    Value Get(
      const std::string& utf8name ///< UTF-8 encoded property name
    ) const;

    /// Sets a property.
    template <typename ValueType>
    bool Set(napi_value key,         ///< Property key primitive
             const ValueType& value  ///< Property value primitive
    );

    /// Sets a property.
    template <typename ValueType>
    bool Set(Value key,              ///< Property key
             const ValueType& value  ///< Property value
    );

    /// Sets a named property.
    template <typename ValueType>
    bool Set(
        const char* utf8name,  ///< UTF-8 encoded null-terminated property name
        const ValueType& value);

    /// Sets a named property.
    template <typename ValueType>
    bool Set(const std::string& utf8name,  ///< UTF-8 encoded property name
             const ValueType& value        ///< Property value primitive
    );

    /// Delete property.
    bool Delete(
      napi_value key ///< Property key primitive
    );

    /// Delete property.
    bool Delete(
      Value key ///< Property key
    );

    /// Delete property.
    bool Delete(
      const char* utf8name ///< UTF-8 encoded null-terminated property name
    );

    /// Delete property.
    bool Delete(
      const std::string& utf8name ///< UTF-8 encoded property name
    );

    /// Checks whether an indexed property is present.
    bool Has(
      uint32_t index ///< Property / element index
    ) const;

    /// Gets an indexed property or array element.
    Value Get(
      uint32_t index ///< Property / element index
    ) const;

    /// Sets an indexed property or array element.
    template <typename ValueType>
    bool Set(uint32_t index,         ///< Property / element index
             const ValueType& value  ///< Property value primitive
    );

    /// Deletes an indexed property or array element.
    bool Delete(
      uint32_t index ///< Property / element index
    );

    Array GetPropertyNames() const; ///< Get all property names

    /// Defines a property on the object.
    bool DefineProperty(
        const PropertyDescriptor&
            property  ///< Descriptor for the property to be defined
    );

    /// Defines properties on the object.
    bool DefineProperties(
        const std::initializer_list<PropertyDescriptor>& properties
        ///< List of descriptors for the properties to be defined
    );

    /// Defines properties on the object.
    bool DefineProperties(
        const std::vector<PropertyDescriptor>& properties
        ///< Vector of descriptors for the properties to be defined
    );

    /// Checks if an object is an instance created by a constructor function.
    ///
    /// This is equivalent to the JavaScript `instanceof` operator.
    bool InstanceOf(
      const Function& constructor ///< Constructor function
    ) const;

    template <typename Finalizer, typename T>
    inline void AddFinalizer(Finalizer finalizeCallback, T* data);

    template <typename Finalizer, typename T, typename Hint>
    inline void AddFinalizer(Finalizer finalizeCallback,
                             T* data,
                             Hint* finalizeHint);
#if NAPI_VERSION >= 8
    bool Freeze();
    bool Seal();
#endif  // NAPI_VERSION >= 8
  };

  template <typename T>
  class External : public Value {
  public:
    static External New(napi_env env, T* data);

    // Finalizer must implement `void operator()(Env env, T* data)`.
    template <typename Finalizer>
    static External New(napi_env env,
                        T* data,
                        Finalizer finalizeCallback);
    // Finalizer must implement `void operator()(Env env, T* data, Hint* hint)`.
    template <typename Finalizer, typename Hint>
    static External New(napi_env env,
                        T* data,
                        Finalizer finalizeCallback,
                        Hint* finalizeHint);

    External();
    External(napi_env env, napi_value value);

    T* Data() const;
  };

  class Array : public Object {
  public:
    static Array New(napi_env env);
    static Array New(napi_env env, size_t length);

    Array();
    Array(napi_env env, napi_value value);

    uint32_t Length() const;
  };

  /// A JavaScript array buffer value.
  class ArrayBuffer : public Object {
  public:
    /// Creates a new ArrayBuffer instance over a new automatically-allocated buffer.
   static ArrayBuffer New(
       napi_env env,      ///< Node-API environment
       size_t byteLength  ///< Length of the buffer to be allocated, in bytes
   );

   /// Creates a new ArrayBuffer instance, using an external buffer with
   /// specified byte length.
   static ArrayBuffer New(
       napi_env env,        ///< Node-API environment
       void* externalData,  ///< Pointer to the external buffer to be used by
                            ///< the array
       size_t byteLength    ///< Length of the external buffer to be used by the
                            ///< array, in bytes
   );

   /// Creates a new ArrayBuffer instance, using an external buffer with
   /// specified byte length.
   template <typename Finalizer>
   static ArrayBuffer New(
       napi_env env,        ///< Node-API environment
       void* externalData,  ///< Pointer to the external buffer to be used by
                            ///< the array
       size_t byteLength,   ///< Length of the external buffer to be used by the
                            ///< array,
                            ///  in bytes
       Finalizer finalizeCallback  ///< Function to be called when the array
                                   ///< buffer is destroyed;
                                   ///  must implement `void operator()(Env env,
                                   ///  void* externalData)`
   );

   /// Creates a new ArrayBuffer instance, using an external buffer with
   /// specified byte length.
   template <typename Finalizer, typename Hint>
   static ArrayBuffer New(
       napi_env env,        ///< Node-API environment
       void* externalData,  ///< Pointer to the external buffer to be used by
                            ///< the array
       size_t byteLength,   ///< Length of the external buffer to be used by the
                            ///< array,
                            ///  in bytes
       Finalizer finalizeCallback,  ///< Function to be called when the array
                                    ///< buffer is destroyed;
                                    ///  must implement `void operator()(Env
                                    ///  env, void* externalData, Hint* hint)`
       Hint* finalizeHint  ///< Hint (second parameter) to be passed to the
                           ///< finalize callback
   );

   ArrayBuffer();  ///< Creates a new _empty_ ArrayBuffer instance.
   ArrayBuffer(napi_env env,
               napi_value value);  ///< Wraps a Node-API value primitive.

   void* Data();         ///< Gets a pointer to the data buffer.
   size_t ByteLength();  ///< Gets the length of the array buffer in bytes.

#if NAPI_VERSION >= 7
    bool IsDetached() const;
    void Detach();
#endif  // NAPI_VERSION >= 7
  };

  /// A JavaScript typed-array value with unknown array type.
  ///
  /// For type-specific operations, cast to a `TypedArrayOf<T>` instance using the `As()`
  /// method:
  ///
  ///     Napi::TypedArray array = ...
  ///     if (t.TypedArrayType() == napi_int32_array) {
  ///         Napi::Int32Array int32Array = t.As<Napi::Int32Array>();
  ///     }
  class TypedArray : public Object {
  public:
    TypedArray();                               ///< Creates a new _empty_ TypedArray instance.
    TypedArray(napi_env env,
               napi_value value);  ///< Wraps a Node-API value primitive.

    napi_typedarray_type TypedArrayType() const; ///< Gets the type of this typed-array.
    Napi::ArrayBuffer ArrayBuffer() const;       ///< Gets the backing array buffer.

    uint8_t ElementSize() const;  ///< Gets the size in bytes of one element in the array.
    size_t ElementLength() const; ///< Gets the number of elements in the array.
    size_t ByteOffset() const;    ///< Gets the offset into the buffer where the array starts.
    size_t ByteLength() const;    ///< Gets the length of the array in bytes.

  protected:
    /// !cond INTERNAL
    napi_typedarray_type _type;
    size_t _length;

    TypedArray(napi_env env, napi_value value, napi_typedarray_type type, size_t length);

    static const napi_typedarray_type unknown_array_type = static_cast<napi_typedarray_type>(-1);

    template <typename T>
    static
#if defined(NAPI_HAS_CONSTEXPR)
    constexpr
#endif
    napi_typedarray_type TypedArrayTypeForPrimitiveType() {
      return std::is_same<T, int8_t>::value ? napi_int8_array
        : std::is_same<T, uint8_t>::value ? napi_uint8_array
        : std::is_same<T, int16_t>::value ? napi_int16_array
        : std::is_same<T, uint16_t>::value ? napi_uint16_array
        : std::is_same<T, int32_t>::value ? napi_int32_array
        : std::is_same<T, uint32_t>::value ? napi_uint32_array
        : std::is_same<T, float>::value ? napi_float32_array
        : std::is_same<T, double>::value ? napi_float64_array
#if NAPI_VERSION > 5
        : std::is_same<T, int64_t>::value ? napi_bigint64_array
        : std::is_same<T, uint64_t>::value ? napi_biguint64_array
#endif  // NAPI_VERSION > 5
        : unknown_array_type;
    }
    /// !endcond
  };

  /// A JavaScript typed-array value with known array type.
  ///
  /// Note while it is possible to create and access Uint8 "clamped" arrays using this class,
  /// the _clamping_ behavior is only applied in JavaScript.
  template <typename T>
  class TypedArrayOf : public TypedArray {
  public:
    /// Creates a new TypedArray instance over a new automatically-allocated array buffer.
    ///
    /// The array type parameter can normally be omitted (because it is inferred from the template
    /// parameter T), except when creating a "clamped" array:
    ///
    ///     Uint8Array::New(env, length, napi_uint8_clamped_array)
   static TypedArrayOf New(
       napi_env env,          ///< Node-API environment
       size_t elementLength,  ///< Length of the created array, as a number of
                              ///< elements
#if defined(NAPI_HAS_CONSTEXPR)
       napi_typedarray_type type =
           TypedArray::TypedArrayTypeForPrimitiveType<T>()
#else
       napi_typedarray_type type
#endif
       ///< Type of array, if different from the default array type for the
       ///< template parameter T.
   );

    /// Creates a new TypedArray instance over a provided array buffer.
    ///
    /// The array type parameter can normally be omitted (because it is inferred from the template
    /// parameter T), except when creating a "clamped" array:
    ///
    ///     Uint8Array::New(env, length, buffer, 0, napi_uint8_clamped_array)
   static TypedArrayOf New(
       napi_env env,          ///< Node-API environment
       size_t elementLength,  ///< Length of the created array, as a number of
                              ///< elements
       Napi::ArrayBuffer arrayBuffer,  ///< Backing array buffer instance to use
       size_t bufferOffset,  ///< Offset into the array buffer where the
                             ///< typed-array starts
#if defined(NAPI_HAS_CONSTEXPR)
       napi_typedarray_type type =
           TypedArray::TypedArrayTypeForPrimitiveType<T>()
#else
       napi_typedarray_type type
#endif
       ///< Type of array, if different from the default array type for the
       ///< template parameter T.
   );

    TypedArrayOf();                               ///< Creates a new _empty_ TypedArrayOf instance.
    TypedArrayOf(napi_env env,
                 napi_value value);  ///< Wraps a Node-API value primitive.

    T& operator [](size_t index);             ///< Gets or sets an element in the array.
    const T& operator [](size_t index) const; ///< Gets an element in the array.

    /// Gets a pointer to the array's backing buffer.
    ///
    /// This is not necessarily the same as the `ArrayBuffer::Data()` pointer, because the
    /// typed-array may have a non-zero `ByteOffset()` into the `ArrayBuffer`.
    T* Data();

    /// Gets a pointer to the array's backing buffer.
    ///
    /// This is not necessarily the same as the `ArrayBuffer::Data()` pointer, because the
    /// typed-array may have a non-zero `ByteOffset()` into the `ArrayBuffer`.
    const T* Data() const;

  private:
    T* _data;

    TypedArrayOf(napi_env env,
                 napi_value value,
                 napi_typedarray_type type,
                 size_t length,
                 T* data);
  };

  /// The DataView provides a low-level interface for reading/writing multiple
  /// number types in an ArrayBuffer irrespective of the platform's endianness.
  class DataView : public Object {
  public:
    static DataView New(napi_env env,
                        Napi::ArrayBuffer arrayBuffer);
    static DataView New(napi_env env,
                        Napi::ArrayBuffer arrayBuffer,
                        size_t byteOffset);
    static DataView New(napi_env env,
                        Napi::ArrayBuffer arrayBuffer,
                        size_t byteOffset,
                        size_t byteLength);

    DataView();                               ///< Creates a new _empty_ DataView instance.
    DataView(napi_env env,
             napi_value value);  ///< Wraps a Node-API value primitive.

    Napi::ArrayBuffer ArrayBuffer() const;    ///< Gets the backing array buffer.
    size_t ByteOffset() const;    ///< Gets the offset into the buffer where the array starts.
    size_t ByteLength() const;    ///< Gets the length of the array in bytes.

    void* Data() const;

    float GetFloat32(size_t byteOffset) const;
    double GetFloat64(size_t byteOffset) const;
    int8_t GetInt8(size_t byteOffset) const;
    int16_t GetInt16(size_t byteOffset) const;
    int32_t GetInt32(size_t byteOffset) const;
    uint8_t GetUint8(size_t byteOffset) const;
    uint16_t GetUint16(size_t byteOffset) const;
    uint32_t GetUint32(size_t byteOffset) const;

    void SetFloat32(size_t byteOffset, float value) const;
    void SetFloat64(size_t byteOffset, double value) const;
    void SetInt8(size_t byteOffset, int8_t value) const;
    void SetInt16(size_t byteOffset, int16_t value) const;
    void SetInt32(size_t byteOffset, int32_t value) const;
    void SetUint8(size_t byteOffset, uint8_t value) const;
    void SetUint16(size_t byteOffset, uint16_t value) const;
    void SetUint32(size_t byteOffset, uint32_t value) const;

  private:
    template <typename T>
    T ReadData(size_t byteOffset) const;

    template <typename T>
    void WriteData(size_t byteOffset, T value) const;

    void* _data;
    size_t _length;
  };

  class Function : public Object {
  public:
   using VoidCallback = void (*)(const CallbackInfo& info);
   using Callback = Value (*)(const CallbackInfo& info);

   template <VoidCallback cb>
   static Function New(napi_env env,
                       const char* utf8name = nullptr,
                       void* data = nullptr);

   template <Callback cb>
   static Function New(napi_env env,
                       const char* utf8name = nullptr,
                       void* data = nullptr);

   template <VoidCallback cb>
   static Function New(napi_env env,
                       const std::string& utf8name,
                       void* data = nullptr);

   template <Callback cb>
   static Function New(napi_env env,
                       const std::string& utf8name,
                       void* data = nullptr);

   /// Callable must implement operator() accepting a const CallbackInfo&
   /// and return either void or Value.
   template <typename Callable>
   static Function New(napi_env env,
                       Callable cb,
                       const char* utf8name = nullptr,
                       void* data = nullptr);
   /// Callable must implement operator() accepting a const CallbackInfo&
   /// and return either void or Value.
   template <typename Callable>
   static Function New(napi_env env,
                       Callable cb,
                       const std::string& utf8name,
                       void* data = nullptr);

   Function();
   Function(napi_env env, napi_value value);

   Value operator()(const std::initializer_list<napi_value>& args) const;

   Value Call(const std::initializer_list<napi_value>& args) const;
   Value Call(const std::vector<napi_value>& args) const;
   Value Call(size_t argc, const napi_value* args) const;
   Value Call(napi_value recv,
              const std::initializer_list<napi_value>& args) const;
   Value Call(napi_value recv, const std::vector<napi_value>& args) const;
   Value Call(napi_value recv, size_t argc, const napi_value* args) const;

   Value MakeCallback(napi_value recv,
                      const std::initializer_list<napi_value>& args,
                      napi_async_context context = nullptr) const;
   Value MakeCallback(napi_value recv,
                      const std::vector<napi_value>& args,
                      napi_async_context context = nullptr) const;
   Value MakeCallback(napi_value recv,
                      size_t argc,
                      const napi_value* args,
                      napi_async_context context = nullptr) const;

   Object New(const std::initializer_list<napi_value>& args) const;
   Object New(const std::vector<napi_value>& args) const;
   Object New(size_t argc, const napi_value* args) const;
  };

  class Promise : public Object {
  public:
    class Deferred {
    public:
      static Deferred New(napi_env env);
      Deferred(napi_env env);

      Napi::Promise Promise() const;
      Napi::Env Env() const;

      void Resolve(napi_value value) const;
      void Reject(napi_value value) const;

    private:
      napi_env _env;
      napi_deferred _deferred;
      napi_value _promise;
    };

    Promise(napi_env env, napi_value value);
  };

  template <typename T>
  class Buffer : public Uint8Array {
  public:
    static Buffer<T> New(napi_env env, size_t length);
    static Buffer<T> New(napi_env env, T* data, size_t length);

    // Finalizer must implement `void operator()(Env env, T* data)`.
    template <typename Finalizer>
    static Buffer<T> New(napi_env env, T* data,
                         size_t length,
                         Finalizer finalizeCallback);
    // Finalizer must implement `void operator()(Env env, T* data, Hint* hint)`.
    template <typename Finalizer, typename Hint>
    static Buffer<T> New(napi_env env, T* data,
                         size_t length,
                         Finalizer finalizeCallback,
                         Hint* finalizeHint);

    static Buffer<T> Copy(napi_env env, const T* data, size_t length);

    Buffer();
    Buffer(napi_env env, napi_value value);
    size_t Length() const;
    T* Data() const;

  private:
    mutable size_t _length;
    mutable T* _data;

    Buffer(napi_env env, napi_value value, size_t length, T* data);
    void EnsureInfo() const;
  };

  /// Holds a counted reference to a value; initially a weak reference unless otherwise specified,
  /// may be changed to/from a strong reference by adjusting the refcount.
  ///
  /// The referenced value is not immediately destroyed when the reference count is zero; it is
  /// merely then eligible for garbage-collection if there are no other references to the value.
  template <typename T>
  class Reference {
  public:
    static Reference<T> New(const T& value, uint32_t initialRefcount = 0);

    Reference();
    Reference(napi_env env, napi_ref ref);
    ~Reference();

    // A reference can be moved but cannot be copied.
    Reference(Reference<T>&& other);
    Reference<T>& operator =(Reference<T>&& other);
    NAPI_DISALLOW_ASSIGN(Reference<T>)

    operator napi_ref() const;
    bool operator ==(const Reference<T> &other) const;
    bool operator !=(const Reference<T> &other) const;

    Napi::Env Env() const;
    bool IsEmpty() const;

    // Note when getting the value of a Reference it is usually correct to do so
    // within a HandleScope so that the value handle gets cleaned up efficiently.
    T Value() const;

    uint32_t Ref();
    uint32_t Unref();
    void Reset();
    void Reset(const T& value, uint32_t refcount = 0);

    // Call this on a reference that is declared as static data, to prevent its
    // destructor from running at program shutdown time, which would attempt to
    // reset the reference when the environment is no longer valid. Avoid using
    // this if at all possible. If you do need to use static data, MAKE SURE to
    // warn your users that your addon is NOT threadsafe.
    void SuppressDestruct();

  protected:
    Reference(const Reference<T>&);

    /// !cond INTERNAL
    napi_env _env;
    napi_ref _ref;
    /// !endcond

  private:
    bool _suppressDestruct;
  };

  class ObjectReference: public Reference<Object> {
  public:
    ObjectReference();
    ObjectReference(napi_env env, napi_ref ref);

    // A reference can be moved but cannot be copied.
    ObjectReference(Reference<Object>&& other);
    ObjectReference& operator =(Reference<Object>&& other);
    ObjectReference(ObjectReference&& other);
    ObjectReference& operator =(ObjectReference&& other);
    NAPI_DISALLOW_ASSIGN(ObjectReference)

    Napi::Value Get(const char* utf8name) const;
    Napi::Value Get(const std::string& utf8name) const;
    bool Set(const char* utf8name, napi_value value);
    bool Set(const char* utf8name, Napi::Value value);
    bool Set(const char* utf8name, const char* utf8value);
    bool Set(const char* utf8name, bool boolValue);
    bool Set(const char* utf8name, double numberValue);
    bool Set(const std::string& utf8name, napi_value value);
    bool Set(const std::string& utf8name, Napi::Value value);
    bool Set(const std::string& utf8name, std::string& utf8value);
    bool Set(const std::string& utf8name, bool boolValue);
    bool Set(const std::string& utf8name, double numberValue);

    Napi::Value Get(uint32_t index) const;
    bool Set(uint32_t index, const napi_value value);
    bool Set(uint32_t index, const Napi::Value value);
    bool Set(uint32_t index, const char* utf8value);
    bool Set(uint32_t index, const std::string& utf8value);
    bool Set(uint32_t index, bool boolValue);
    bool Set(uint32_t index, double numberValue);

   protected:
    ObjectReference(const ObjectReference&);
  };

  class FunctionReference: public Reference<Function> {
  public:
    FunctionReference();
    FunctionReference(napi_env env, napi_ref ref);

    // A reference can be moved but cannot be copied.
    FunctionReference(Reference<Function>&& other);
    FunctionReference& operator =(Reference<Function>&& other);
    FunctionReference(FunctionReference&& other);
    FunctionReference& operator =(FunctionReference&& other);
    NAPI_DISALLOW_ASSIGN_COPY(FunctionReference)

    Napi::Value operator ()(const std::initializer_list<napi_value>& args) const;

    Napi::Value Call(const std::initializer_list<napi_value>& args) const;
    Napi::Value Call(const std::vector<napi_value>& args) const;
    Napi::Value Call(napi_value recv, const std::initializer_list<napi_value>& args) const;
    Napi::Value Call(napi_value recv, const std::vector<napi_value>& args) const;
    Napi::Value Call(napi_value recv, size_t argc, const napi_value* args) const;

    Napi::Value MakeCallback(napi_value recv,
                             const std::initializer_list<napi_value>& args,
                             napi_async_context context = nullptr) const;
    Napi::Value MakeCallback(napi_value recv,
                             const std::vector<napi_value>& args,
                             napi_async_context context = nullptr) const;
    Napi::Value MakeCallback(napi_value recv,
                             size_t argc,
                             const napi_value* args,
                             napi_async_context context = nullptr) const;

    Object New(const std::initializer_list<napi_value>& args) const;
    Object New(const std::vector<napi_value>& args) const;
  };

  // Shortcuts to creating a new reference with inferred type and refcount = 0.
  template <typename T> Reference<T> Weak(T value);
  ObjectReference Weak(Object value);
  FunctionReference Weak(Function value);

  // Shortcuts to creating a new reference with inferred type and refcount = 1.
  template <typename T> Reference<T> Persistent(T value);
  ObjectReference Persistent(Object value);
  FunctionReference Persistent(Function value);

  /// A persistent reference to a JavaScript error object. Use of this class
  /// depends somewhat on whether C++ exceptions are enabled at compile time.
  ///
  /// ### Handling Errors With C++ Exceptions
  ///
  /// If C++ exceptions are enabled, then the `Error` class extends
  /// `std::exception` and enables integrated error-handling for C++ exceptions
  /// and JavaScript exceptions.
  ///
  /// If a Node-API call fails without executing any JavaScript code (for
  /// example due to an invalid argument), then the Node-API wrapper
  /// automatically converts and throws the error as a C++ exception of type
  /// `Napi::Error`. Or if a JavaScript function called by C++ code via Node-API
  /// throws a JavaScript exception, then the Node-API wrapper automatically
  /// converts and throws it as a C++ exception of type `Napi::Error`.
  ///
  /// If a C++ exception of type `Napi::Error` escapes from a Node-API C++
  /// callback, then the Node-API wrapper automatically converts and throws it
  /// as a JavaScript exception. Therefore, catching a C++ exception of type
  /// `Napi::Error` prevents a JavaScript exception from being thrown.
  ///
  /// #### Example 1A - Throwing a C++ exception:
  ///
  ///     Napi::Env env = ...
  ///     throw Napi::Error::New(env, "Example exception");
  ///
  /// Following C++ statements will not be executed. The exception will bubble
  /// up as a C++ exception of type `Napi::Error`, until it is either caught
  /// while still in C++, or else automatically propataged as a JavaScript
  /// exception when the callback returns to JavaScript.
  ///
  /// #### Example 2A - Propagating a Node-API C++ exception:
  ///
  ///     Napi::Function jsFunctionThatThrows = someObj.As<Napi::Function>();
  ///     Napi::Value result = jsFunctionThatThrows({ arg1, arg2 });
  ///
  /// Following C++ statements will not be executed. The exception will bubble
  /// up as a C++ exception of type `Napi::Error`, until it is either caught
  /// while still in C++, or else automatically propagated as a JavaScript
  /// exception when the callback returns to JavaScript.
  ///
  /// #### Example 3A - Handling a Node-API C++ exception:
  ///
  ///     Napi::Function jsFunctionThatThrows = someObj.As<Napi::Function>();
  ///     Napi::Value result;
  ///     try {
  ///        result = jsFunctionThatThrows({ arg1, arg2 });
  ///     } catch (const Napi::Error& e) {
  ///       cerr << "Caught JavaScript exception: " + e.what();
  ///     }
  ///
  /// Since the exception was caught here, it will not be propagated as a
  /// JavaScript exception.
  ///
  /// ### Handling Errors Without C++ Exceptions
  ///
  /// If C++ exceptions are disabled (by defining `NAPI_DISABLE_CPP_EXCEPTIONS`)
  /// then this class does not extend `std::exception`, and APIs in the `Napi`
  /// namespace do not throw C++ exceptions when they fail. Instead, they raise
  /// _pending_ JavaScript exceptions and return _empty_ `Value`s. Calling code
  /// should check `Value::IsEmpty()` before attempting to use a returned value,
  /// and may use methods on the `Env` class to check for, get, and clear a
  /// pending JavaScript exception. If the pending exception is not cleared, it
  /// will be thrown when the native callback returns to JavaScript.
  ///
  /// #### Example 1B - Throwing a JS exception
  ///
  ///     Napi::Env env = ...
  ///     Napi::Error::New(env, "Example
  ///     exception").ThrowAsJavaScriptException(); return;
  ///
  /// After throwing a JS exception, the code should generally return
  /// immediately from the native callback, after performing any necessary
  /// cleanup.
  ///
  /// #### Example 2B - Propagating a Node-API JS exception:
  ///
  ///     Napi::Function jsFunctionThatThrows = someObj.As<Napi::Function>();
  ///     Napi::Value result = jsFunctionThatThrows({ arg1, arg2 });
  ///     if (result.IsEmpty()) return;
  ///
  /// An empty value result from a Node-API call indicates an error occurred,
  /// and a JavaScript exception is pending. To let the exception propagate, the
  /// code should generally return immediately from the native callback, after
  /// performing any necessary cleanup.
  ///
  /// #### Example 3B - Handling a Node-API JS exception:
  ///
  ///     Napi::Function jsFunctionThatThrows = someObj.As<Napi::Function>();
  ///     Napi::Value result = jsFunctionThatThrows({ arg1, arg2 });
  ///     if (result.IsEmpty()) {
  ///       Napi::Error e = env.GetAndClearPendingException();
  ///       cerr << "Caught JavaScript exception: " + e.Message();
  ///     }
  ///
  /// Since the exception was cleared here, it will not be propagated as a
  /// JavaScript exception after the native callback returns.
  class Error : public ObjectReference
#ifdef NAPI_CPP_EXCEPTIONS
    , public std::exception
#endif // NAPI_CPP_EXCEPTIONS
    {
  public:
    static Error New(napi_env env);
    static Error New(napi_env env, const char* message);
    static Error New(napi_env env, const std::string& message);

    static NAPI_NO_RETURN void Fatal(const char* location, const char* message);

    Error();
    Error(napi_env env, napi_value value);

    // An error can be moved or copied.
    Error(Error&& other);
    Error& operator =(Error&& other);
    Error(const Error&);
    Error& operator =(const Error&);

    const std::string& Message() const NAPI_NOEXCEPT;
    void ThrowAsJavaScriptException() const;

#ifdef NAPI_CPP_EXCEPTIONS
    const char* what() const NAPI_NOEXCEPT override;
#endif // NAPI_CPP_EXCEPTIONS

  protected:
    /// !cond INTERNAL
   using create_error_fn = napi_status (*)(napi_env envb,
                                           napi_value code,
                                           napi_value msg,
                                           napi_value* result);

   template <typename TError>
   static TError New(napi_env env,
                     const char* message,
                     size_t length,
                     create_error_fn create_error);
   /// !endcond

  private:
    mutable std::string _message;
  };

  class TypeError : public Error {
  public:
    static TypeError New(napi_env env, const char* message);
    static TypeError New(napi_env env, const std::string& message);

    TypeError();
    TypeError(napi_env env, napi_value value);
  };

  class RangeError : public Error {
  public:
    static RangeError New(napi_env env, const char* message);
    static RangeError New(napi_env env, const std::string& message);

    RangeError();
    RangeError(napi_env env, napi_value value);
  };

  class CallbackInfo {
  public:
    CallbackInfo(napi_env env, napi_callback_info info);
    ~CallbackInfo();

    // Disallow copying to prevent multiple free of _dynamicArgs
    NAPI_DISALLOW_ASSIGN_COPY(CallbackInfo)

    Napi::Env Env() const;
    Value NewTarget() const;
    bool IsConstructCall() const;
    size_t Length() const;
    const Value operator [](size_t index) const;
    Value This() const;
    void* Data() const;
    void SetData(void* data);

  private:
    const size_t _staticArgCount = 6;
    napi_env _env;
    napi_callback_info _info;
    napi_value _this;
    size_t _argc;
    napi_value* _argv;
    napi_value _staticArgs[6];
    napi_value* _dynamicArgs;
    void* _data;
  };

  class PropertyDescriptor {
  public:
   using GetterCallback = Napi::Value (*)(const Napi::CallbackInfo& info);
   using SetterCallback = void (*)(const Napi::CallbackInfo& info);

#ifndef NODE_ADDON_API_DISABLE_DEPRECATED
    template <typename Getter>
    static PropertyDescriptor Accessor(const char* utf8name,
                                       Getter getter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter>
    static PropertyDescriptor Accessor(const std::string& utf8name,
                                       Getter getter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter>
    static PropertyDescriptor Accessor(napi_value name,
                                       Getter getter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter>
    static PropertyDescriptor Accessor(Name name,
                                       Getter getter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter, typename Setter>
    static PropertyDescriptor Accessor(const char* utf8name,
                                       Getter getter,
                                       Setter setter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter, typename Setter>
    static PropertyDescriptor Accessor(const std::string& utf8name,
                                       Getter getter,
                                       Setter setter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter, typename Setter>
    static PropertyDescriptor Accessor(napi_value name,
                                       Getter getter,
                                       Setter setter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter, typename Setter>
    static PropertyDescriptor Accessor(Name name,
                                       Getter getter,
                                       Setter setter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Callable>
    static PropertyDescriptor Function(const char* utf8name,
                                       Callable cb,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Callable>
    static PropertyDescriptor Function(const std::string& utf8name,
                                       Callable cb,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Callable>
    static PropertyDescriptor Function(napi_value name,
                                       Callable cb,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Callable>
    static PropertyDescriptor Function(Name name,
                                       Callable cb,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
#endif // !NODE_ADDON_API_DISABLE_DEPRECATED

    template <GetterCallback Getter>
    static PropertyDescriptor Accessor(const char* utf8name,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);

    template <GetterCallback Getter>
    static PropertyDescriptor Accessor(const std::string& utf8name,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);

    template <GetterCallback Getter>
    static PropertyDescriptor Accessor(Name name,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);

    template <GetterCallback Getter, SetterCallback Setter>
    static PropertyDescriptor Accessor(const char* utf8name,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);

    template <GetterCallback Getter, SetterCallback Setter>
    static PropertyDescriptor Accessor(const std::string& utf8name,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);

    template <GetterCallback Getter, SetterCallback Setter>
    static PropertyDescriptor Accessor(Name name,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);

    template <typename Getter>
    static PropertyDescriptor Accessor(Napi::Env env,
                                       Napi::Object object,
                                       const char* utf8name,
                                       Getter getter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter>
    static PropertyDescriptor Accessor(Napi::Env env,
                                       Napi::Object object,
                                       const std::string& utf8name,
                                       Getter getter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter>
    static PropertyDescriptor Accessor(Napi::Env env,
                                       Napi::Object object,
                                       Name name,
                                       Getter getter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter, typename Setter>
    static PropertyDescriptor Accessor(Napi::Env env,
                                       Napi::Object object,
                                       const char* utf8name,
                                       Getter getter,
                                       Setter setter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter, typename Setter>
    static PropertyDescriptor Accessor(Napi::Env env,
                                       Napi::Object object,
                                       const std::string& utf8name,
                                       Getter getter,
                                       Setter setter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Getter, typename Setter>
    static PropertyDescriptor Accessor(Napi::Env env,
                                       Napi::Object object,
                                       Name name,
                                       Getter getter,
                                       Setter setter,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Callable>
    static PropertyDescriptor Function(Napi::Env env,
                                       Napi::Object object,
                                       const char* utf8name,
                                       Callable cb,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Callable>
    static PropertyDescriptor Function(Napi::Env env,
                                       Napi::Object object,
                                       const std::string& utf8name,
                                       Callable cb,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    template <typename Callable>
    static PropertyDescriptor Function(Napi::Env env,
                                       Napi::Object object,
                                       Name name,
                                       Callable cb,
                                       napi_property_attributes attributes = napi_default,
                                       void* data = nullptr);
    static PropertyDescriptor Value(const char* utf8name,
                                    napi_value value,
                                    napi_property_attributes attributes = napi_default);
    static PropertyDescriptor Value(const std::string& utf8name,
                                    napi_value value,
                                    napi_property_attributes attributes = napi_default);
    static PropertyDescriptor Value(napi_value name,
                                    napi_value value,
                                    napi_property_attributes attributes = napi_default);
    static PropertyDescriptor Value(Name name,
                                    Napi::Value value,
                                    napi_property_attributes attributes = napi_default);

    PropertyDescriptor(napi_property_descriptor desc);

    operator napi_property_descriptor&();
    operator const napi_property_descriptor&() const;

  private:
    napi_property_descriptor _desc;
  };

  /// Property descriptor for use with `ObjectWrap::DefineClass()`.
  ///
  /// This is different from the standalone `PropertyDescriptor` because it is specific to each
  /// `ObjectWrap<T>` subclass. This prevents using descriptors from a different class when
  /// defining a new class (preventing the callbacks from having incorrect `this` pointers).
  template <typename T>
  class ClassPropertyDescriptor {
  public:
    ClassPropertyDescriptor(napi_property_descriptor desc) : _desc(desc) {}

    operator napi_property_descriptor&() { return _desc; }
    operator const napi_property_descriptor&() const { return _desc; }

  private:
    napi_property_descriptor _desc;
  };

  template <typename T, typename TCallback>
  struct MethodCallbackData {
    TCallback callback;
    void* data;
  };

  template <typename T, typename TGetterCallback, typename TSetterCallback>
  struct AccessorCallbackData {
    TGetterCallback getterCallback;
    TSetterCallback setterCallback;
    void* data;
  };

  template <typename T>
  class InstanceWrap {
   public:
    using InstanceVoidMethodCallback = void (T::*)(const CallbackInfo& info);
    using InstanceMethodCallback = Napi::Value (T::*)(const CallbackInfo& info);
    using InstanceGetterCallback = Napi::Value (T::*)(const CallbackInfo& info);
    using InstanceSetterCallback = void (T::*)(const CallbackInfo& info,
                                               const Napi::Value& value);

    using PropertyDescriptor = ClassPropertyDescriptor<T>;

    static PropertyDescriptor InstanceMethod(const char* utf8name,
                                             InstanceVoidMethodCallback method,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    static PropertyDescriptor InstanceMethod(const char* utf8name,
                                             InstanceMethodCallback method,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    static PropertyDescriptor InstanceMethod(Symbol name,
                                             InstanceVoidMethodCallback method,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    static PropertyDescriptor InstanceMethod(Symbol name,
                                             InstanceMethodCallback method,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    template <InstanceVoidMethodCallback method>
    static PropertyDescriptor InstanceMethod(const char* utf8name,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    template <InstanceMethodCallback method>
    static PropertyDescriptor InstanceMethod(const char* utf8name,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    template <InstanceVoidMethodCallback method>
    static PropertyDescriptor InstanceMethod(Symbol name,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    template <InstanceMethodCallback method>
    static PropertyDescriptor InstanceMethod(Symbol name,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    static PropertyDescriptor InstanceAccessor(const char* utf8name,
                                               InstanceGetterCallback getter,
                                               InstanceSetterCallback setter,
                                               napi_property_attributes attributes = napi_default,
                                               void* data = nullptr);
    static PropertyDescriptor InstanceAccessor(Symbol name,
                                               InstanceGetterCallback getter,
                                               InstanceSetterCallback setter,
                                               napi_property_attributes attributes = napi_default,
                                               void* data = nullptr);
    template <InstanceGetterCallback getter, InstanceSetterCallback setter=nullptr>
    static PropertyDescriptor InstanceAccessor(const char* utf8name,
                                               napi_property_attributes attributes = napi_default,
                                               void* data = nullptr);
    template <InstanceGetterCallback getter, InstanceSetterCallback setter=nullptr>
    static PropertyDescriptor InstanceAccessor(Symbol name,
                                               napi_property_attributes attributes = napi_default,
                                               void* data = nullptr);
    static PropertyDescriptor InstanceValue(const char* utf8name,
                                            Napi::Value value,
                                            napi_property_attributes attributes = napi_default);
    static PropertyDescriptor InstanceValue(Symbol name,
                                            Napi::Value value,
                                            napi_property_attributes attributes = napi_default);

   protected:
    static void AttachPropData(napi_env env, napi_value value, const napi_property_descriptor* prop);

   private:
    using This = InstanceWrap<T>;

    using InstanceVoidMethodCallbackData =
        MethodCallbackData<T, InstanceVoidMethodCallback>;
    using InstanceMethodCallbackData =
        MethodCallbackData<T, InstanceMethodCallback>;
    using InstanceAccessorCallbackData =
        AccessorCallbackData<T, InstanceGetterCallback, InstanceSetterCallback>;

    static napi_value InstanceVoidMethodCallbackWrapper(napi_env env, napi_callback_info info);
    static napi_value InstanceMethodCallbackWrapper(napi_env env, napi_callback_info info);
    static napi_value InstanceGetterCallbackWrapper(napi_env env, napi_callback_info info);
    static napi_value InstanceSetterCallbackWrapper(napi_env env, napi_callback_info info);

    template <InstanceSetterCallback method>
    static napi_value WrappedMethod(napi_env env,
                                    napi_callback_info info) NAPI_NOEXCEPT;

    template <InstanceSetterCallback setter> struct SetterTag {};

    template <InstanceSetterCallback setter>
    static napi_callback WrapSetter(SetterTag<setter>) NAPI_NOEXCEPT {
      return &This::WrappedMethod<setter>;
    }
    static napi_callback WrapSetter(SetterTag<nullptr>) NAPI_NOEXCEPT {
      return nullptr;
    }
  };

  /// Base class to be extended by C++ classes exposed to JavaScript; each C++ class instance gets
  /// "wrapped" by a JavaScript object that is managed by this class.
  ///
  /// At initialization time, the `DefineClass()` method must be used to
  /// hook up the accessor and method callbacks. It takes a list of
  /// property descriptors, which can be constructed via the various
  /// static methods on the base class.
  ///
  /// #### Example:
  ///
  ///     class Example: public Napi::ObjectWrap<Example> {
  ///       public:
  ///         static void Initialize(Napi::Env& env, Napi::Object& target) {
  ///           Napi::Function constructor = DefineClass(env, "Example", {
  ///             InstanceAccessor<&Example::GetSomething, &Example::SetSomething>("value"),
  ///             InstanceMethod<&Example::DoSomething>("doSomething"),
  ///           });
  ///           target.Set("Example", constructor);
  ///         }
  ///
  ///         Example(const Napi::CallbackInfo& info); // Constructor
  ///         Napi::Value GetSomething(const Napi::CallbackInfo& info);
  ///         void SetSomething(const Napi::CallbackInfo& info, const Napi::Value& value);
  ///         Napi::Value DoSomething(const Napi::CallbackInfo& info);
  ///     }
  template <typename T>
  class ObjectWrap : public InstanceWrap<T>, public Reference<Object> {
  public:
    ObjectWrap(const CallbackInfo& callbackInfo);
    virtual ~ObjectWrap();

    static T* Unwrap(Object wrapper);

    // Methods exposed to JavaScript must conform to one of these callback signatures.
    using StaticVoidMethodCallback = void (*)(const CallbackInfo& info);
    using StaticMethodCallback = Napi::Value (*)(const CallbackInfo& info);
    using StaticGetterCallback = Napi::Value (*)(const CallbackInfo& info);
    using StaticSetterCallback = void (*)(const CallbackInfo& info,
                                          const Napi::Value& value);

    using PropertyDescriptor = ClassPropertyDescriptor<T>;

    static Function DefineClass(Napi::Env env,
                                const char* utf8name,
                                const std::initializer_list<PropertyDescriptor>& properties,
                                void* data = nullptr);
    static Function DefineClass(Napi::Env env,
                                const char* utf8name,
                                const std::vector<PropertyDescriptor>& properties,
                                void* data = nullptr);
    static PropertyDescriptor StaticMethod(const char* utf8name,
                                           StaticVoidMethodCallback method,
                                           napi_property_attributes attributes = napi_default,
                                           void* data = nullptr);
    static PropertyDescriptor StaticMethod(const char* utf8name,
                                           StaticMethodCallback method,
                                           napi_property_attributes attributes = napi_default,
                                           void* data = nullptr);
    static PropertyDescriptor StaticMethod(Symbol name,
                                           StaticVoidMethodCallback method,
                                           napi_property_attributes attributes = napi_default,
                                           void* data = nullptr);
    static PropertyDescriptor StaticMethod(Symbol name,
                                           StaticMethodCallback method,
                                           napi_property_attributes attributes = napi_default,
                                           void* data = nullptr);
    template <StaticVoidMethodCallback method>
    static PropertyDescriptor StaticMethod(const char* utf8name,
                                           napi_property_attributes attributes = napi_default,
                                           void* data = nullptr);
    template <StaticVoidMethodCallback method>
    static PropertyDescriptor StaticMethod(Symbol name,
                                           napi_property_attributes attributes = napi_default,
                                           void* data = nullptr);
    template <StaticMethodCallback method>
    static PropertyDescriptor StaticMethod(const char* utf8name,
                                           napi_property_attributes attributes = napi_default,
                                           void* data = nullptr);
    template <StaticMethodCallback method>
    static PropertyDescriptor StaticMethod(Symbol name,
                                           napi_property_attributes attributes = napi_default,
                                           void* data = nullptr);
    static PropertyDescriptor StaticAccessor(const char* utf8name,
                                             StaticGetterCallback getter,
                                             StaticSetterCallback setter,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    static PropertyDescriptor StaticAccessor(Symbol name,
                                             StaticGetterCallback getter,
                                             StaticSetterCallback setter,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    template <StaticGetterCallback getter, StaticSetterCallback setter=nullptr>
    static PropertyDescriptor StaticAccessor(const char* utf8name,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    template <StaticGetterCallback getter, StaticSetterCallback setter=nullptr>
    static PropertyDescriptor StaticAccessor(Symbol name,
                                             napi_property_attributes attributes = napi_default,
                                             void* data = nullptr);
    static PropertyDescriptor StaticValue(const char* utf8name,
                                          Napi::Value value,
                                          napi_property_attributes attributes = napi_default);
    static PropertyDescriptor StaticValue(Symbol name,
                                          Napi::Value value,
                                          napi_property_attributes attributes = napi_default);
    virtual void Finalize(Napi::Env env);

  private:
    using This = ObjectWrap<T>;

    static napi_value ConstructorCallbackWrapper(napi_env env, napi_callback_info info);
    static napi_value StaticVoidMethodCallbackWrapper(napi_env env, napi_callback_info info);
    static napi_value StaticMethodCallbackWrapper(napi_env env, napi_callback_info info);
    static napi_value StaticGetterCallbackWrapper(napi_env env, napi_callback_info info);
    static napi_value StaticSetterCallbackWrapper(napi_env env, napi_callback_info info);
    static void FinalizeCallback(napi_env env, void* data, void* hint);
    static Function DefineClass(Napi::Env env,
                                const char* utf8name,
                                const size_t props_count,
                                const napi_property_descriptor* props,
                                void* data = nullptr);

    using StaticVoidMethodCallbackData =
        MethodCallbackData<T, StaticVoidMethodCallback>;
    using StaticMethodCallbackData =
        MethodCallbackData<T, StaticMethodCallback>;

    using StaticAccessorCallbackData =
        AccessorCallbackData<T, StaticGetterCallback, StaticSetterCallback>;

    template <StaticSetterCallback method>
    static napi_value WrappedMethod(napi_env env,
                                    napi_callback_info info) NAPI_NOEXCEPT;

    template <StaticSetterCallback setter> struct StaticSetterTag {};

    template <StaticSetterCallback setter>
    static napi_callback WrapStaticSetter(StaticSetterTag<setter>)
        NAPI_NOEXCEPT {
      return &This::WrappedMethod<setter>;
    }
    static napi_callback WrapStaticSetter(StaticSetterTag<nullptr>)
        NAPI_NOEXCEPT {
      return nullptr;
    }

    bool _construction_failed = true;
  };

  class HandleScope {
  public:
    HandleScope(napi_env env, napi_handle_scope scope);
    explicit HandleScope(Napi::Env env);
    ~HandleScope();

    // Disallow copying to prevent double close of napi_handle_scope
    NAPI_DISALLOW_ASSIGN_COPY(HandleScope)

    operator napi_handle_scope() const;

    Napi::Env Env() const;

  private:
    napi_env _env;
    napi_handle_scope _scope;
  };

  class EscapableHandleScope {
  public:
    EscapableHandleScope(napi_env env, napi_escapable_handle_scope scope);
    explicit EscapableHandleScope(Napi::Env env);
    ~EscapableHandleScope();

    // Disallow copying to prevent double close of napi_escapable_handle_scope
    NAPI_DISALLOW_ASSIGN_COPY(EscapableHandleScope)

    operator napi_escapable_handle_scope() const;

    Napi::Env Env() const;
    Value Escape(napi_value escapee);

  private:
    napi_env _env;
    napi_escapable_handle_scope _scope;
  };

#if (NAPI_VERSION > 2)
  class CallbackScope {
  public:
    CallbackScope(napi_env env, napi_callback_scope scope);
    CallbackScope(napi_env env, napi_async_context context);
    virtual ~CallbackScope();

    // Disallow copying to prevent double close of napi_callback_scope
    NAPI_DISALLOW_ASSIGN_COPY(CallbackScope)

    operator napi_callback_scope() const;

    Napi::Env Env() const;

  private:
    napi_env _env;
    napi_callback_scope _scope;
  };
#endif

  class AsyncContext {
  public:
    explicit AsyncContext(napi_env env, const char* resource_name);
    explicit AsyncContext(napi_env env, const char* resource_name, const Object& resource);
    virtual ~AsyncContext();

    AsyncContext(AsyncContext&& other);
    AsyncContext& operator =(AsyncContext&& other);
    NAPI_DISALLOW_ASSIGN_COPY(AsyncContext)

    operator napi_async_context() const;

    Napi::Env Env() const;

  private:
    napi_env _env;
    napi_async_context _context;
  };

  class AsyncWorker {
  public:
    virtual ~AsyncWorker();

    // An async worker can be moved but cannot be copied.
    AsyncWorker(AsyncWorker&& other);
    AsyncWorker& operator =(AsyncWorker&& other);
    NAPI_DISALLOW_ASSIGN_COPY(AsyncWorker)

    operator napi_async_work() const;

    Napi::Env Env() const;

    void Queue();
    void Cancel();
    void SuppressDestruct();

    ObjectReference& Receiver();
    FunctionReference& Callback();

    virtual void OnExecute(Napi::Env env);
    virtual void OnWorkComplete(Napi::Env env,
                                napi_status status);

  protected:
    explicit AsyncWorker(const Function& callback);
    explicit AsyncWorker(const Function& callback,
                         const char* resource_name);
    explicit AsyncWorker(const Function& callback,
                         const char* resource_name,
                         const Object& resource);
    explicit AsyncWorker(const Object& receiver,
                         const Function& callback);
    explicit AsyncWorker(const Object& receiver,
                         const Function& callback,
                         const char* resource_name);
    explicit AsyncWorker(const Object& receiver,
                         const Function& callback,
                         const char* resource_name,
                         const Object& resource);

    explicit AsyncWorker(Napi::Env env);
    explicit AsyncWorker(Napi::Env env,
                         const char* resource_name);
    explicit AsyncWorker(Napi::Env env,
                         const char* resource_name,
                         const Object& resource);

    virtual void Execute() = 0;
    virtual void OnOK();
    virtual void OnError(const Error& e);
    virtual void Destroy();
    virtual std::vector<napi_value> GetResult(Napi::Env env);

    void SetError(const std::string& error);

  private:
    static inline void OnAsyncWorkExecute(napi_env env, void* asyncworker);
    static inline void OnAsyncWorkComplete(napi_env env,
                                           napi_status status,
                                           void* asyncworker);

    napi_env _env;
    napi_async_work _work;
    ObjectReference _receiver;
    FunctionReference _callback;
    std::string _error;
    bool _suppress_destruct;
  };

  #if (NAPI_VERSION > 3 && !defined(__wasm32__))
  class ThreadSafeFunction {
  public:
    // This API may only be called from the main thread.
    template <typename ResourceString>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename ContextType>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename Finalizer>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  Finalizer finalizeCallback);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename Finalizer,
              typename FinalizerDataType>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  Finalizer finalizeCallback,
                                  FinalizerDataType* data);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename ContextType, typename Finalizer>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context,
                                  Finalizer finalizeCallback);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename ContextType,
              typename Finalizer, typename FinalizerDataType>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context,
                                  Finalizer finalizeCallback,
                                  FinalizerDataType* data);

    // This API may only be called from the main thread.
    template <typename ResourceString>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename ContextType>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename Finalizer>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  Finalizer finalizeCallback);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename Finalizer,
              typename FinalizerDataType>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  Finalizer finalizeCallback,
                                  FinalizerDataType* data);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename ContextType, typename Finalizer>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context,
                                  Finalizer finalizeCallback);

    // This API may only be called from the main thread.
    template <typename ResourceString, typename ContextType,
              typename Finalizer, typename FinalizerDataType>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context,
                                  Finalizer finalizeCallback,
                                  FinalizerDataType* data);

    ThreadSafeFunction();
    ThreadSafeFunction(napi_threadsafe_function tsFunctionValue);

    operator napi_threadsafe_function() const;

    // This API may be called from any thread.
    napi_status BlockingCall() const;

    // This API may be called from any thread.
    template <typename Callback>
    napi_status BlockingCall(Callback callback) const;

    // This API may be called from any thread.
    template <typename DataType, typename Callback>
    napi_status BlockingCall(DataType* data, Callback callback) const;

    // This API may be called from any thread.
    napi_status NonBlockingCall() const;

    // This API may be called from any thread.
    template <typename Callback>
    napi_status NonBlockingCall(Callback callback) const;

    // This API may be called from any thread.
    template <typename DataType, typename Callback>
    napi_status NonBlockingCall(DataType* data, Callback callback) const;

    // This API may only be called from the main thread.
    void Ref(napi_env env) const;

    // This API may only be called from the main thread.
    void Unref(napi_env env) const;

    // This API may be called from any thread.
    napi_status Acquire() const;

    // This API may be called from any thread.
    napi_status Release();

    // This API may be called from any thread.
    napi_status Abort();

    struct ConvertibleContext
    {
      template <class T>
      operator T*() { return static_cast<T*>(context); }
      void* context;
    };

    // This API may be called from any thread.
    ConvertibleContext GetContext() const;

  private:
    using CallbackWrapper = std::function<void(Napi::Env, Napi::Function)>;

    template <typename ResourceString, typename ContextType,
              typename Finalizer, typename FinalizerDataType>
    static ThreadSafeFunction New(napi_env env,
                                  const Function& callback,
                                  const Object& resource,
                                  ResourceString resourceName,
                                  size_t maxQueueSize,
                                  size_t initialThreadCount,
                                  ContextType* context,
                                  Finalizer finalizeCallback,
                                  FinalizerDataType* data,
                                  napi_finalize wrapper);

    napi_status CallInternal(CallbackWrapper* callbackWrapper,
                        napi_threadsafe_function_call_mode mode) const;

    static void CallJS(napi_env env,
                       napi_value jsCallback,
                       void* context,
                       void* data);

    napi_threadsafe_function _tsfn;
  };

  // A TypedThreadSafeFunction by default has no context (nullptr) and can
  // accept any type (void) to its CallJs.
  template <typename ContextType = std::nullptr_t,
            typename DataType = void,
            void (*CallJs)(Napi::Env, Napi::Function, ContextType*, DataType*) =
                nullptr>
  class TypedThreadSafeFunction {
   public:
    // This API may only be called from the main thread.
    // Helper function that returns nullptr if running Node-API 5+, otherwise a
    // non-empty, no-op Function. This provides the ability to specify at
    // compile-time a callback parameter to `New` that safely does no action
    // when targeting _any_ Node-API version.
#if NAPI_VERSION > 4
    static std::nullptr_t EmptyFunctionFactory(Napi::Env env);
#else
    static Napi::Function EmptyFunctionFactory(Napi::Env env);
#endif
    static Napi::Function FunctionOrEmpty(Napi::Env env,
                                          Napi::Function& callback);

#if NAPI_VERSION > 4
    // This API may only be called from the main thread.
    // Creates a new threadsafe function with:
    //   Callback [missing] Resource [missing] Finalizer [missing]
    template <typename ResourceString>
    static TypedThreadSafeFunction<ContextType, DataType, CallJs> New(
        napi_env env,
        ResourceString resourceName,
        size_t maxQueueSize,
        size_t initialThreadCount,
        ContextType* context = nullptr);

    // This API may only be called from the main thread.
    // Creates a new threadsafe function with:
    //   Callback [missing] Resource [passed] Finalizer [missing]
    template <typename ResourceString>
    static TypedThreadSafeFunction<ContextType, DataType, CallJs> New(
        napi_env env,
        const Object& resource,
        ResourceString resourceName,
        size_t maxQueueSize,
        size_t initialThreadCount,
        ContextType* context = nullptr);

    // This API may only be called from the main thread.
    // Creates a new threadsafe function with:
    //   Callback [missing] Resource [missing] Finalizer [passed]
    template <typename ResourceString,
              typename Finalizer,
              typename FinalizerDataType = void>
    static TypedThreadSafeFunction<ContextType, DataType, CallJs> New(
        napi_env env,
        ResourceString resourceName,
        size_t maxQueueSize,
        size_t initialThreadCount,
        ContextType* context,
        Finalizer finalizeCallback,
        FinalizerDataType* data = nullptr);

    // This API may only be called from the main thread.
    // Creates a new threadsafe function with:
    //   Callback [missing] Resource [passed] Finalizer [passed]
    template <typename ResourceString,
              typename Finalizer,
              typename FinalizerDataType = void>
    static TypedThreadSafeFunction<ContextType, DataType, CallJs> New(
        napi_env env,
        const Object& resource,
        ResourceString resourceName,
        size_t maxQueueSize,
        size_t initialThreadCount,
        ContextType* context,
        Finalizer finalizeCallback,
        FinalizerDataType* data = nullptr);
#endif

    // This API may only be called from the main thread.
    // Creates a new threadsafe function with:
    //   Callback [passed] Resource [missing] Finalizer [missing]
    template <typename ResourceString>
    static TypedThreadSafeFunction<ContextType, DataType, CallJs> New(
        napi_env env,
        const Function& callback,
        ResourceString resourceName,
        size_t maxQueueSize,
        size_t initialThreadCount,
        ContextType* context = nullptr);

    // This API may only be called from the main thread.
    // Creates a new threadsafe function with:
    //   Callback [passed] Resource [passed] Finalizer [missing]
    template <typename ResourceString>
    static TypedThreadSafeFunction<ContextType, DataType, CallJs> New(
        napi_env env,
        const Function& callback,
        const Object& resource,
        ResourceString resourceName,
        size_t maxQueueSize,
        size_t initialThreadCount,
        ContextType* context = nullptr);

    // This API may only be called from the main thread.
    // Creates a new threadsafe function with:
    //   Callback [passed] Resource [missing] Finalizer [passed]
    template <typename ResourceString,
              typename Finalizer,
              typename FinalizerDataType = void>
    static TypedThreadSafeFunction<ContextType, DataType, CallJs> New(
        napi_env env,
        const Function& callback,
        ResourceString resourceName,
        size_t maxQueueSize,
        size_t initialThreadCount,
        ContextType* context,
        Finalizer finalizeCallback,
        FinalizerDataType* data = nullptr);

    // This API may only be called from the main thread.
    // Creates a new threadsafe function with:
    //   Callback [passed] Resource [passed] Finalizer [passed]
    template <typename CallbackType,
              typename ResourceString,
              typename Finalizer,
              typename FinalizerDataType>
    static TypedThreadSafeFunction<ContextType, DataType, CallJs> New(
        napi_env env,
        CallbackType callback,
        const Object& resource,
        ResourceString resourceName,
        size_t maxQueueSize,
        size_t initialThreadCount,
        ContextType* context,
        Finalizer finalizeCallback,
        FinalizerDataType* data = nullptr);

    TypedThreadSafeFunction<ContextType, DataType, CallJs>();
    TypedThreadSafeFunction<ContextType, DataType, CallJs>(
        napi_threadsafe_function tsFunctionValue);

    operator napi_threadsafe_function() const;

    // This API may be called from any thread.
    napi_status BlockingCall(DataType* data = nullptr) const;

    // This API may be called from any thread.
    napi_status NonBlockingCall(DataType* data = nullptr) const;

    // This API may only be called from the main thread.
    void Ref(napi_env env) const;

    // This API may only be called from the main thread.
    void Unref(napi_env env) const;

    // This API may be called from any thread.
    napi_status Acquire() const;

    // This API may be called from any thread.
    napi_status Release();

    // This API may be called from any thread.
    napi_status Abort();

    // This API may be called from any thread.
    ContextType* GetContext() const;

   private:
    template <typename ResourceString,
              typename Finalizer,
              typename FinalizerDataType>
    static TypedThreadSafeFunction<ContextType, DataType, CallJs> New(
        napi_env env,
        const Function& callback,
        const Object& resource,
        ResourceString resourceName,
        size_t maxQueueSize,
        size_t initialThreadCount,
        ContextType* context,
        Finalizer finalizeCallback,
        FinalizerDataType* data,
        napi_finalize wrapper);

    static void CallJsInternal(napi_env env,
                               napi_value jsCallback,
                               void* context,
                               void* data);

   protected:
    napi_threadsafe_function _tsfn;
  };
  template <typename DataType>
  class AsyncProgressWorkerBase : public AsyncWorker {
    public:
     virtual void OnWorkProgress(DataType* data) = 0;
     class ThreadSafeData {
       public:
        ThreadSafeData(AsyncProgressWorkerBase* asyncprogressworker, DataType* data)
          : _asyncprogressworker(asyncprogressworker), _data(data) {}

        AsyncProgressWorkerBase* asyncprogressworker() { return _asyncprogressworker; };
        DataType* data() { return _data; };

       private:
        AsyncProgressWorkerBase* _asyncprogressworker;
        DataType* _data;
     };
     void OnWorkComplete(Napi::Env env, napi_status status) override;
    protected:
     explicit AsyncProgressWorkerBase(const Object& receiver,
                                      const Function& callback,
                                      const char* resource_name,
                                      const Object& resource,
                                      size_t queue_size = 1);
    virtual ~AsyncProgressWorkerBase();

// Optional callback of Napi::ThreadSafeFunction only available after NAPI_VERSION 4.
// Refs: https://github.com/nodejs/node/pull/27791
#if NAPI_VERSION > 4
     explicit AsyncProgressWorkerBase(Napi::Env env,
                                      const char* resource_name,
                                      const Object& resource,
                                      size_t queue_size = 1);
#endif

     static inline void OnAsyncWorkProgress(Napi::Env env,
                                            Napi::Function jsCallback,
                                            void* data);

     napi_status NonBlockingCall(DataType* data);

    private:
     ThreadSafeFunction _tsfn;
     bool _work_completed = false;
     napi_status _complete_status;
     static inline void OnThreadSafeFunctionFinalize(Napi::Env env, void* data, AsyncProgressWorkerBase* context);
  };

  template<class T>
  class AsyncProgressWorker : public AsyncProgressWorkerBase<void> {
    public:
     virtual ~AsyncProgressWorker();

     class ExecutionProgress {
        friend class AsyncProgressWorker;
       public:
        void Signal() const;
        void Send(const T* data, size_t count) const;
       private:
        explicit ExecutionProgress(AsyncProgressWorker* worker) : _worker(worker) {}
        AsyncProgressWorker* const _worker;
     };

     void OnWorkProgress(void*) override;

    protected:
     explicit AsyncProgressWorker(const Function& callback);
     explicit AsyncProgressWorker(const Function& callback,
                                  const char* resource_name);
     explicit AsyncProgressWorker(const Function& callback,
                                  const char* resource_name,
                                  const Object& resource);
     explicit AsyncProgressWorker(const Object& receiver,
                                  const Function& callback);
     explicit AsyncProgressWorker(const Object& receiver,
                                  const Function& callback,
                                  const char* resource_name);
     explicit AsyncProgressWorker(const Object& receiver,
                                  const Function& callback,
                                  const char* resource_name,
                                  const Object& resource);

// Optional callback of Napi::ThreadSafeFunction only available after NAPI_VERSION 4.
// Refs: https://github.com/nodejs/node/pull/27791
#if NAPI_VERSION > 4
     explicit AsyncProgressWorker(Napi::Env env);
     explicit AsyncProgressWorker(Napi::Env env,
                                  const char* resource_name);
     explicit AsyncProgressWorker(Napi::Env env,
                                  const char* resource_name,
                                  const Object& resource);
#endif
     virtual void Execute(const ExecutionProgress& progress) = 0;
     virtual void OnProgress(const T* data, size_t count) = 0;

    private:
     void Execute() override;
     void Signal() const;
     void SendProgress_(const T* data, size_t count);

     std::mutex _mutex;
     T* _asyncdata;
     size_t _asyncsize;
  };

  template<class T>
  class AsyncProgressQueueWorker : public AsyncProgressWorkerBase<std::pair<T*, size_t>> {
    public:
     virtual ~AsyncProgressQueueWorker() {};

     class ExecutionProgress {
        friend class AsyncProgressQueueWorker;
       public:
        void Signal() const;
        void Send(const T* data, size_t count) const;
       private:
        explicit ExecutionProgress(AsyncProgressQueueWorker* worker) : _worker(worker) {}
        AsyncProgressQueueWorker* const _worker;
     };

     void OnWorkComplete(Napi::Env env, napi_status status) override;
     void OnWorkProgress(std::pair<T*, size_t>*) override;

    protected:
     explicit AsyncProgressQueueWorker(const Function& callback);
     explicit AsyncProgressQueueWorker(const Function& callback,
                                       const char* resource_name);
     explicit AsyncProgressQueueWorker(const Function& callback,
                                       const char* resource_name,
                                       const Object& resource);
     explicit AsyncProgressQueueWorker(const Object& receiver,
                                       const Function& callback);
     explicit AsyncProgressQueueWorker(const Object& receiver,
                                       const Function& callback,
                                       const char* resource_name);
     explicit AsyncProgressQueueWorker(const Object& receiver,
                                       const Function& callback,
                                       const char* resource_name,
                                       const Object& resource);

// Optional callback of Napi::ThreadSafeFunction only available after NAPI_VERSION 4.
// Refs: https://github.com/nodejs/node/pull/27791
#if NAPI_VERSION > 4
     explicit AsyncProgressQueueWorker(Napi::Env env);
     explicit AsyncProgressQueueWorker(Napi::Env env,
                                       const char* resource_name);
     explicit AsyncProgressQueueWorker(Napi::Env env,
                                       const char* resource_name,
                                       const Object& resource);
#endif
     virtual void Execute(const ExecutionProgress& progress) = 0;
     virtual void OnProgress(const T* data, size_t count) = 0;

    private:
     void Execute() override;
     void Signal() const;
     void SendProgress_(const T* data, size_t count);
  };
  #endif  // NAPI_VERSION > 3 && !defined(__wasm32__)

  // Memory management.
  class MemoryManagement {
    public:
      static int64_t AdjustExternalMemory(Env env, int64_t change_in_bytes);
  };

  // Version management
  class VersionManagement {
    public:
      static uint32_t GetNapiVersion(Env env);
      static const napi_node_version* GetNodeVersion(Env env);
  };

#if NAPI_VERSION > 5
  template <typename T>
  class Addon : public InstanceWrap<T> {
   public:
    static inline Object Init(Env env, Object exports);
    static T* Unwrap(Object wrapper);

   protected:
    using AddonProp = ClassPropertyDescriptor<T>;
    void DefineAddon(Object exports,
                     const std::initializer_list<AddonProp>& props);
    Napi::Object DefineProperties(Object object,
                                 const std::initializer_list<AddonProp>& props);

   private:
    Object entry_point_;
  };
#endif  // NAPI_VERSION > 5

} // namespace Napi

// Inline implementations of all the above class methods are included here.
#include "napi-inl.h"

#endif // SRC_NAPI_H_
{
  'targets': [
    {
      'target_name': 'nothing',
      'type': 'static_library',
      'sources': [ 'nothing.c' ]
    }
  ]
}
{
  'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ],
  'cflags': [ '-fno-exceptions' ],
  'cflags_cc': [ '-fno-exceptions' ],
  'msvs_settings': {
    'VCCLCompilerTool': {
      'ExceptionHandling': 0,
      'EnablePREfast': 'true',
    },
  },
  'xcode_settings': {
    'CLANG_CXX_LIBRARY': 'libc++',
    'MACOSX_DEPLOYMENT_TARGET': '10.7',
    'GCC_ENABLE_CPP_EXCEPTIONS': 'NO',
  },
}
{
  "versions": [
    {
      "version": "*",
      "target": {
        "node": "active"
      },
      "response": {
        "type": "time-permitting",
        "paid": false,
        "contact": {
          "name": "node-addon-api team",
          "url": "https://github.com/nodejs/node-addon-api/issues"
        }
      },
      "backing": [ { "project": "https://github.com/nodejs" },
                   { "foundation": "https://openjsf.org/" }
      ]
    }
  ]
}
{
  "description": "Node.js API (Node-API)",
  "devDependencies": {
    "benchmark": "^2.1.4",
    "bindings": "^1.5.0",
    "clang-format": "^1.4.0",
    "fs-extra": "^9.0.1",
    "pre-commit": "^1.2.2",
    "safe-buffer": "^5.1.1"
  },
  "directories": {},
  "gypfile": false,
  "homepage": "https://github.com/nodejs/node-addon-api",
  "license": "MIT",
  "main": "index.js",
  "name": "node-addon-api",
  "optionalDependencies": {},
  "readme": "README.md",
  "repository": {
    "type": "git",
    "url": "git://github.com/nodejs/node-addon-api.git"
  },
  "files": [
    "*.{c,h,gyp,gypi}",
    "package-support.json",
    "tools/"
  ],
  "pre-commit": "lint",
  "version": "3.2.1",
  "support": true
}'use strict';
// Descend into a directory structure and, for each file matching *.node, output
// based on the imports found in the file whether it's an N-API module or not.

const fs = require('fs');
const path = require('path');
const child_process = require('child_process');

// Read the output of the command, break it into lines, and use the reducer to
// decide whether the file is an N-API module or not.
function checkFile(file, command, argv, reducer) {
  const child = child_process.spawn(command, argv, {
    stdio: ['inherit', 'pipe', 'inherit']
  });
  let leftover = '';
  let isNapi = undefined;
  child.stdout.on('data', (chunk) => {
    if (isNapi === undefined) {
      chunk = (leftover + chunk.toString()).split(/[\r\n]+/);
      leftover = chunk.pop();
      isNapi = chunk.reduce(reducer, isNapi);
      if (isNapi !== undefined) {
        child.kill();
      }
    }
  });
  child.on('close', (code, signal) => {
    if ((code === null && signal !== null) || (code !== 0)) {
      console.log(
        command + ' exited with code: '  + code + ' and signal: ' + signal);
    } else {
      // Green if it's a N-API module, red otherwise.
      console.log(
          '\x1b[' + (isNapi ? '42' : '41') + 'm' +
          (isNapi ? '    N-API' : 'Not N-API') +
          '\x1b[0m: ' + file);
    }
  });
}

// Use nm -a to list symbols.
function checkFileUNIX(file) {
  checkFile(file, 'nm', ['-a', file], (soFar, line) => {
    if (soFar === undefined) {
      line = line.match(/([0-9a-f]*)? ([a-zA-Z]) (.*$)/);
      if (line[2] === 'U') {
        if (/^napi/.test(line[3])) {
          soFar = true;
        }
      }
    }
    return soFar;
  });
}

// Use dumpbin /imports to list symbols.
function checkFileWin32(file) {
  checkFile(file, 'dumpbin', ['/imports', file], (soFar, line) => {
    if (soFar === undefined) {
      line = line.match(/([0-9a-f]*)? +([a-zA-Z0-9]) (.*$)/);
      if (line && /^napi/.test(line[line.length - 1])) {
        soFar = true;
      }
    }
    return soFar;
  });
}

// Descend into a directory structure and pass each file ending in '.node' to
// one of the above checks, depending on the OS.
function recurse(top) {
  fs.readdir(top, (error, items) => {
    if (error) {
      throw ("error reading directory " + top + ": " + error);
    }
    items.forEach((item) => {
      item = path.join(top, item);
      fs.stat(item, ((item) => (error, stats) => {
        if (error) {
          throw ("error about " + item + ": " + error);
        }
        if (stats.isDirectory()) {
          recurse(item);
        } else if (/[.]node$/.test(item) &&
            // Explicitly ignore files called 'nothing.node' because they are
            // artefacts of node-addon-api having identified a version of
            // Node.js that ships with a correct implementation of N-API.
            path.basename(item) !== 'nothing.node') {
          process.platform === 'win32' ?
              checkFileWin32(item) :
              checkFileUNIX(item);
        }
      })(item));
    });
  });
}

// Start with the directory given on the command line or the current directory
// if nothing was given.
recurse(process.argv.length > 3 ? process.argv[2] : '.');
#!/usr/bin/env node

const spawn = require('child_process').spawnSync;
const path = require('path');

const filesToCheck = ['*.h', '*.cc'];
const CLANG_FORMAT_START = process.env.CLANG_FORMAT_START || 'main';

function main(args) {
  let fix = false;
  while (args.length > 0) {
    switch (args[0]) {
      case '-f':
      case '--fix':
        fix = true;
      default:
    }
    args.shift();
  }

  let clangFormatPath = path.dirname(require.resolve('clang-format'));
  const options = ['--binary=node_modules/.bin/clang-format', '--style=file'];
  if (fix) {
    options.push(CLANG_FORMAT_START);
  } else {
    options.push('--diff', CLANG_FORMAT_START);
  }

  const gitClangFormatPath = path.join(clangFormatPath,
    'bin/git-clang-format');
  const result = spawn('python', [
    gitClangFormatPath,
    ...options,
    '--',
    ...filesToCheck
  ], { encoding: 'utf-8' });

  if (result.stderr) {
    console.error('Error running git-clang-format:', result.stderr);
    return 2;
  }

  const clangFormatOutput = result.stdout.trim();
  // Bail fast if in fix mode.
  if (fix) {
    console.log(clangFormatOutput);
    return 0;
  }
  // Detect if there is any complains from clang-format
  if (clangFormatOutput !== '' &&
      clangFormatOutput !== ('no modified files to format') &&
      clangFormatOutput !== ('clang-format did not modify any files')) {
    console.error(clangFormatOutput);
    const fixCmd = 'npm run lint:fix';
    console.error(`
      ERROR: please run "${fixCmd}" to format changes in your commit
        Note that when running the command locally, please keep your local
        main branch and working branch up to date with nodejs/node-addon-api
        to exclude un-related complains.
        Or you can run "env CLANG_FORMAT_START=upstream/main ${fixCmd}".`);
    return 1;
  }
}

if (require.main === module) {
  process.exitCode = main(process.argv.slice(2));
}
#! /usr/bin/env node

'use strict'

const fs = require('fs');
const path = require('path');

const args = process.argv.slice(2);
const dir = args[0];
if (!dir) {
  console.log('Usage: node ' + path.basename(__filename) + ' <target-dir>');
  process.exit(1);
}

const NodeApiVersion = require('../package.json').version;

const disable = args[1];
if (disable != "--disable" && dir != "--disable") {
  var ConfigFileOperations = {
    'package.json': [
       [ /([ ]*)"dependencies": {/g, '$1"dependencies": {\n$1  "node-addon-api": "' + NodeApiVersion + '",'],
       [ /[ ]*"nan": *"[^"]+"(,|)[\n\r]/g, '' ]
    ],
    'binding.gyp': [
       [ /([ ]*)'include_dirs': \[/g, '$1\'include_dirs\': [\n$1  \'<!(node -p "require(\\\'node-addon-api\\\').include_dir")\',' ],
       [ /([ ]*)"include_dirs": \[/g, '$1"include_dirs": [\n$1  "<!(node -p \\"require(\'node-addon-api\').include_dir\\")",' ],
       [ /[ ]*("|')<!\(node -e ("|'|\\"|\\')require\(("|'|\\"|\\')nan("|'|\\"|\\')\)("|'|\\"|\\')\)("|')(,|)[\r\n]/g, '' ],
       [ /([ ]*)("|')target_name("|'): ("|')(.+?)("|'),/g, '$1$2target_name$2: $4$5$6,\n      $2cflags!$2: [ $2-fno-exceptions$2 ],\n      $2cflags_cc!$2: [ $2-fno-exceptions$2 ],\n      $2xcode_settings$2: { $2GCC_ENABLE_CPP_EXCEPTIONS$2: $2YES$2,\n        $2CLANG_CXX_LIBRARY$2: $2libc++$2,\n        $2MACOSX_DEPLOYMENT_TARGET$2: $210.7$2,\n      },\n      $2msvs_settings$2: {\n        $2VCCLCompilerTool$2: { $2ExceptionHandling$2: 1 },\n      },' ],
    ]
  };
} else {
  var ConfigFileOperations = {
    'package.json': [
      [ /([ ]*)"dependencies": {/g, '$1"dependencies": {\n$1  "node-addon-api": "' + NodeApiVersion + '",'],
      [ /[ ]*"nan": *"[^"]+"(,|)[\n\r]/g, '' ]
    ],
    'binding.gyp': [
      [ /([ ]*)'include_dirs': \[/g, '$1\'include_dirs\': [\n$1  \'<!(node -p "require(\\\'node-addon-api\\\').include_dir")\',' ],
      [ /([ ]*)"include_dirs": \[/g, '$1"include_dirs": [\n$1  "<!(node -p \'require(\\\"node-addon-api\\\").include_dir\')",' ],
      [ /[ ]*("|')<!\(node -e ("|'|\\"|\\')require\(("|'|\\"|\\')nan("|'|\\"|\\')\)("|'|\\"|\\')\)("|')(,|)[\r\n]/g, '' ],
      [ /([ ]*)("|')target_name("|'): ("|')(.+?)("|'),/g, '$1$2target_name$2: $4$5$6,\n      $2cflags!$2: [ $2-fno-exceptions$2 ],\n      $2cflags_cc!$2: [ $2-fno-exceptions$2 ],\n      $2defines$2: [ $2NAPI_DISABLE_CPP_EXCEPTIONS$2 ],\n      $2conditions$2: [\n        [\'OS==\"win\"\', { $2defines$2: [ $2_HAS_EXCEPTIONS=1$2 ] }]\n      ]' ],
    ]
  };
}

var SourceFileOperations = [
  [ /Nan::SetMethod\(target,[\s]*\"(.*)\"[\s]*,[\s]*([^)]+)\)/g, 'exports.Set(Napi::String::New(env, \"$1\"), Napi::Function::New(env, $2))' ],

  [ /v8::Local<v8::FunctionTemplate>\s+(\w+)\s*=\s*Nan::New<FunctionTemplate>\([\w\d:]+\);(?:\w+->Reset\(\1\))?\s+\1->SetClassName\(Nan::String::New\("(\w+)"\)\);/g, 'Napi::Function $1 = DefineClass(env, "$2", {' ],
  [ /Local<FunctionTemplate>\s+(\w+)\s*=\s*Nan::New<FunctionTemplate>\([\w\d:]+\);\s+(\w+)\.Reset\((\1)\);\s+\1->SetClassName\((Nan::String::New|Nan::New<(v8::)*String>)\("(.+?)"\)\);/g, 'Napi::Function $1 = DefineClass(env, "$6", {'],
  [ /Local<FunctionTemplate>\s+(\w+)\s*=\s*Nan::New<FunctionTemplate>\([\w\d:]+\);(?:\w+->Reset\(\1\))?\s+\1->SetClassName\(Nan::String::New\("(\w+)"\)\);/g, 'Napi::Function $1 = DefineClass(env, "$2", {' ],
  [ /Nan::New<v8::FunctionTemplate>\(([\w\d:]+)\)->GetFunction\(\)/g, 'Napi::Function::New(env, $1)' ],
  [ /Nan::New<FunctionTemplate>\(([\w\d:]+)\)->GetFunction()/g, 'Napi::Function::New(env, $1);' ],
  [ /Nan::New<v8::FunctionTemplate>\(([\w\d:]+)\)/g, 'Napi::Function::New(env, $1)' ],
  [ /Nan::New<FunctionTemplate>\(([\w\d:]+)\)/g, 'Napi::Function::New(env, $1)' ],

  // FunctionTemplate to FunctionReference
  [ /Nan::Persistent<(v8::)*FunctionTemplate>/g, 'Napi::FunctionReference' ],
  [ /Nan::Persistent<(v8::)*Function>/g, 'Napi::FunctionReference' ],
  [ /v8::Local<v8::FunctionTemplate>/g, 'Napi::FunctionReference' ],
  [ /Local<FunctionTemplate>/g, 'Napi::FunctionReference' ],
  [ /v8::FunctionTemplate/g, 'Napi::FunctionReference' ],
  [ /FunctionTemplate/g, 'Napi::FunctionReference' ],


  [ /([ ]*)Nan::SetPrototypeMethod\(\w+, "(\w+)", (\w+)\);/g, '$1InstanceMethod("$2", &$3),' ],
  [ /([ ]*)(?:\w+\.Reset\(\w+\);\s+)?\(target\)\.Set\("(\w+)",\s*Nan::GetFunction\((\w+)\)\);/gm,
    '});\n\n' +
    '$1constructor = Napi::Persistent($3);\n' +
    '$1constructor.SuppressDestruct();\n' +
    '$1target.Set("$2", $3);' ],


  // TODO: Other attribute combinations
  [ /static_cast<PropertyAttribute>\(ReadOnly\s*\|\s*DontDelete\)/gm,
    'static_cast<napi_property_attributes>(napi_enumerable | napi_configurable)' ],

  [ /([\w\d:<>]+?)::Cast\((.+?)\)/g, '$2.As<$1>()' ],

  [ /\*Nan::Utf8String\(([^)]+)\)/g, '$1->As<Napi::String>().Utf8Value().c_str()' ],
  [ /Nan::Utf8String +(\w+)\(([^)]+)\)/g, 'std::string $1 = $2.As<Napi::String>()' ],
  [ /Nan::Utf8String/g, 'std::string' ],

  [ /v8::String::Utf8Value (.+?)\((.+?)\)/g, 'Napi::String $1(env, $2)' ],
  [ /String::Utf8Value (.+?)\((.+?)\)/g, 'Napi::String $1(env, $2)' ],
  [ /\.length\(\)/g, '.Length()' ],

  [ /Nan::MakeCallback\(([^,]+),[\s\\]+([^,]+),/gm, '$2.MakeCallback($1,' ],

  [ /class\s+(\w+)\s*:\s*public\s+Nan::ObjectWrap/g, 'class $1 : public Napi::ObjectWrap<$1>' ],
  [ /(\w+)\(([^\)]*)\)\s*:\s*Nan::ObjectWrap\(\)\s*(,)?/gm, '$1($2) : Napi::ObjectWrap<$1>()$3' ],

  // HandleOKCallback to OnOK
  [ /HandleOKCallback/g, 'OnOK' ],
  // HandleErrorCallback to OnError
  [ /HandleErrorCallback/g, 'OnError' ],

  // ex. .As<Function>() to .As<Napi::Object>()
  [ /\.As<v8::(Value|Boolean|String|Number|Object|Array|Symbol|External|Function)>\(\)/g, '.As<Napi::$1>()' ],
  [ /\.As<(Value|Boolean|String|Number|Object|Array|Symbol|External|Function)>\(\)/g, '.As<Napi::$1>()' ],

  // ex. Nan::New<Number>(info[0]) to Napi::Number::New(info[0])
  [ /Nan::New<(v8::)*Integer>\((.+?)\)/g, 'Napi::Number::New(env, $2)' ],
  [ /Nan::New\(([0-9\.]+)\)/g, 'Napi::Number::New(env, $1)' ],
  [ /Nan::New<(v8::)*String>\("(.+?)"\)/g, 'Napi::String::New(env, "$2")' ],
  [ /Nan::New\("(.+?)"\)/g, 'Napi::String::New(env, "$1")' ],
  [ /Nan::New<(v8::)*(.+?)>\(\)/g, 'Napi::$2::New(env)' ],
  [ /Nan::New<(.+?)>\(\)/g, 'Napi::$1::New(env)' ],
  [ /Nan::New<(v8::)*(.+?)>\(/g, 'Napi::$2::New(env, ' ],
  [ /Nan::New<(.+?)>\(/g, 'Napi::$1::New(env, ' ],
  [ /Nan::NewBuffer\(/g, 'Napi::Buffer<char>::New(env, ' ],
  // TODO: Properly handle this
  [ /Nan::New\(/g, 'Napi::New(env, ' ],

  [ /\.IsInt32\(\)/g, '.IsNumber()' ],
  [ /->IsInt32\(\)/g, '.IsNumber()' ],


  [ /(.+?)->BooleanValue\(\)/g, '$1.As<Napi::Boolean>().Value()' ],
  [ /(.+?)->Int32Value\(\)/g, '$1.As<Napi::Number>().Int32Value()' ],
  [ /(.+?)->Uint32Value\(\)/g, '$1.As<Napi::Number>().Uint32Value()' ],
  [ /(.+?)->IntegerValue\(\)/g, '$1.As<Napi::Number>().Int64Value()' ],
  [ /(.+?)->NumberValue\(\)/g, '$1.As<Napi::Number>().DoubleValue()' ],

  // ex. Nan::To<bool>(info[0]) to info[0].Value()
  [ /Nan::To<v8::(Boolean|String|Number|Object|Array|Symbol|Function)>\((.+?)\)/g, '$2.To<Napi::$1>()' ],
  [ /Nan::To<(Boolean|String|Number|Object|Array|Symbol|Function)>\((.+?)\)/g, '$2.To<Napi::$1>()' ],
  // ex. Nan::To<bool>(info[0]) to info[0].As<Napi::Boolean>().Value()
  [ /Nan::To<bool>\((.+?)\)/g, '$1.As<Napi::Boolean>().Value()' ],
  // ex. Nan::To<int>(info[0]) to info[0].As<Napi::Number>().Int32Value()
  [ /Nan::To<int>\((.+?)\)/g, '$1.As<Napi::Number>().Int32Value()' ],
  // ex. Nan::To<int32_t>(info[0]) to info[0].As<Napi::Number>().Int32Value()
  [ /Nan::To<int32_t>\((.+?)\)/g, '$1.As<Napi::Number>().Int32Value()' ],
  // ex. Nan::To<uint32_t>(info[0]) to info[0].As<Napi::Number>().Uint32Value()
  [ /Nan::To<uint32_t>\((.+?)\)/g, '$1.As<Napi::Number>().Uint32Value()' ],
  // ex. Nan::To<int64_t>(info[0]) to info[0].As<Napi::Number>().Int64Value()
  [ /Nan::To<int64_t>\((.+?)\)/g, '$1.As<Napi::Number>().Int64Value()' ],
  // ex. Nan::To<float>(info[0]) to info[0].As<Napi::Number>().FloatValue()
  [ /Nan::To<float>\((.+?)\)/g, '$1.As<Napi::Number>().FloatValue()' ],
  // ex. Nan::To<double>(info[0]) to info[0].As<Napi::Number>().DoubleValue()
  [ /Nan::To<double>\((.+?)\)/g, '$1.As<Napi::Number>().DoubleValue()' ],

  [ /Nan::New\((\w+)\)->HasInstance\((\w+)\)/g, '$2.InstanceOf($1.Value())' ],

  [ /Nan::Has\(([^,]+),\s*/gm, '($1).Has(' ],
  [ /\.Has\([\s|\\]*Nan::New<(v8::)*String>\(([^)]+)\)\)/gm, '.Has($1)' ],
  [ /\.Has\([\s|\\]*Nan::New\(([^)]+)\)\)/gm, '.Has($1)' ],

  [ /Nan::Get\(([^,]+),\s*/gm, '($1).Get(' ],
  [ /\.Get\([\s|\\]*Nan::New<(v8::)*String>\(([^)]+)\)\)/gm, '.Get($1)' ],
  [ /\.Get\([\s|\\]*Nan::New\(([^)]+)\)\)/gm, '.Get($1)' ],

  [ /Nan::Set\(([^,]+),\s*/gm, '($1).Set(' ],
  [ /\.Set\([\s|\\]*Nan::New<(v8::)*String>\(([^)]+)\)\s*,/gm, '.Set($1,' ],
  [ /\.Set\([\s|\\]*Nan::New\(([^)]+)\)\s*,/gm, '.Set($1,' ],


  // ex. node::Buffer::HasInstance(info[0]) to info[0].IsBuffer()
  [ /node::Buffer::HasInstance\((.+?)\)/g, '$1.IsBuffer()' ],
  // ex. node::Buffer::Length(info[0]) to info[0].Length()
  [ /node::Buffer::Length\((.+?)\)/g, '$1.As<Napi::Buffer<char>>().Length()' ],
  // ex. node::Buffer::Data(info[0]) to info[0].Data()
  [ /node::Buffer::Data\((.+?)\)/g, '$1.As<Napi::Buffer<char>>().Data()' ],
  [ /Nan::CopyBuffer\(/g, 'Napi::Buffer::Copy(env, ' ],

  // Nan::AsyncQueueWorker(worker)
  [ /Nan::AsyncQueueWorker\((.+)\);/g, '$1.Queue();' ],
  [ /Nan::(Undefined|Null|True|False)\(\)/g, 'env.$1()' ],

  // Nan::ThrowError(error) to Napi::Error::New(env, error).ThrowAsJavaScriptException()
  [ /([ ]*)return Nan::Throw(\w*?)Error\((.+?)\);/g, '$1Napi::$2Error::New(env, $3).ThrowAsJavaScriptException();\n$1return env.Null();' ],
  [ /Nan::Throw(\w*?)Error\((.+?)\);\n(\s*)return;/g, 'Napi::$1Error::New(env, $2).ThrowAsJavaScriptException();\n$3return env.Null();' ],
  [ /Nan::Throw(\w*?)Error\((.+?)\);/g, 'Napi::$1Error::New(env, $2).ThrowAsJavaScriptException();\n' ],
  // Nan::RangeError(error) to Napi::RangeError::New(env, error)
  [ /Nan::(\w*?)Error\((.+)\)/g, 'Napi::$1Error::New(env, $2)' ],

  [ /Nan::Set\((.+?),\n* *(.+?),\n* *(.+?),\n* *(.+?)\)/g, '$1.Set($2, $3, $4)' ],

  [ /Nan::(Escapable)?HandleScope\s+(\w+)\s*;/g, 'Napi::$1HandleScope $2(env);' ],
  [ /Nan::(Escapable)?HandleScope/g, 'Napi::$1HandleScope' ],
  [ /Nan::ForceSet\(([^,]+), ?/g, '$1->DefineProperty(' ],
  [ /\.ForceSet\(Napi::String::New\(env, "(\w+)"\),\s*?/g, '.DefineProperty("$1", ' ],
  // [ /Nan::GetPropertyNames\(([^,]+)\)/, '$1->GetPropertyNames()' ],
  [ /Nan::Equals\(([^,]+),/g, '$1.StrictEquals(' ],


  [ /(.+)->Set\(/g, '$1.Set\(' ],


  [ /Nan::Callback/g, 'Napi::FunctionReference' ],


  [ /Nan::Persistent<Object>/g, 'Napi::ObjectReference' ],
  [ /Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE target/g, 'Napi::Env& env, Napi::Object& target' ],

  [ /(\w+)\*\s+(\w+)\s*=\s*Nan::ObjectWrap::Unwrap<\w+>\(info\.This\(\)\);/g, '$1* $2 = this;' ],
  [ /Nan::ObjectWrap::Unwrap<(\w+)>\((.*)\);/g, '$2.Unwrap<$1>();' ],

  [ /Nan::NAN_METHOD_RETURN_TYPE/g, 'void' ],
  [ /NAN_INLINE/g, 'inline' ],

  [ /Nan::NAN_METHOD_ARGS_TYPE/g, 'const Napi::CallbackInfo&' ],
  [ /NAN_METHOD\(([\w\d:]+?)\)/g, 'Napi::Value $1(const Napi::CallbackInfo& info)'],
  [ /static\s*NAN_GETTER\(([\w\d:]+?)\)/g, 'Napi::Value $1(const Napi::CallbackInfo& info)' ],
  [ /NAN_GETTER\(([\w\d:]+?)\)/g, 'Napi::Value $1(const Napi::CallbackInfo& info)' ],
  [ /static\s*NAN_SETTER\(([\w\d:]+?)\)/g, 'void $1(const Napi::CallbackInfo& info, const Napi::Value& value)' ],
  [ /NAN_SETTER\(([\w\d:]+?)\)/g, 'void $1(const Napi::CallbackInfo& info, const Napi::Value& value)' ],
  [ /void Init\((v8::)*Local<(v8::)*Object> exports\)/g, 'Napi::Object Init(Napi::Env env, Napi::Object exports)' ],
  [ /NAN_MODULE_INIT\(([\w\d:]+?)\);/g, 'Napi::Object $1(Napi::Env env, Napi::Object exports);' ],
  [ /NAN_MODULE_INIT\(([\w\d:]+?)\)/g, 'Napi::Object $1(Napi::Env env, Napi::Object exports)' ],


  [ /::(Init(?:ialize)?)\(target\)/g, '::$1(env, target, module)' ],
  [ /constructor_template/g, 'constructor' ],

  [ /Nan::FunctionCallbackInfo<(v8::)?Value>[ ]*& [ ]*info\)[ ]*{\n*([ ]*)/gm, 'Napi::CallbackInfo& info) {\n$2Napi::Env env = info.Env();\n$2' ],
  [ /Nan::FunctionCallbackInfo<(v8::)*Value>\s*&\s*info\);/g, 'Napi::CallbackInfo& info);' ],
  [ /Nan::FunctionCallbackInfo<(v8::)*Value>\s*&/g, 'Napi::CallbackInfo&' ],

  [ /Buffer::HasInstance\(([^)]+)\)/g, '$1.IsBuffer()' ],

  [ /info\[(\d+)\]->/g, 'info[$1].' ],
  [ /info\[([\w\d]+)\]->/g, 'info[$1].' ],
  [ /info\.This\(\)->/g, 'info.This().' ],
  [ /->Is(Object|String|Int32|Number)\(\)/g, '.Is$1()' ],
  [ /info.GetReturnValue\(\).SetUndefined\(\)/g, 'return env.Undefined()' ],
  [ /info\.GetReturnValue\(\)\.Set\(((\n|.)+?)\);/g, 'return $1;' ],


  // ex. Local<Value> to Napi::Value
  [ /v8::Local<v8::(Value|Boolean|String|Number|Object|Array|Symbol|External|Function)>/g, 'Napi::$1' ],
  [ /Local<(Value|Boolean|String|Number|Object|Array|Symbol|External|Function)>/g, 'Napi::$1' ],

  // Declare an env in helper functions that take a Napi::Value
  [ /(\w+)\(Napi::Value (\w+)(,\s*[^\()]+)?\)\s*{\n*([ ]*)/gm, '$1(Napi::Value $2$3) {\n$4Napi::Env env = $2.Env();\n$4' ],

  // delete #include <node.h> and/or <v8.h>
  [ /#include +(<|")(?:node|nan).h("|>)/g, "#include $1napi.h$2\n#include $1uv.h$2" ],
  // NODE_MODULE to NODE_API_MODULE
  [ /NODE_MODULE/g, 'NODE_API_MODULE' ],
  [ /Nan::/g, 'Napi::' ],
  [ /nan.h/g, 'napi.h' ],

  // delete .FromJust()
  [ /\.FromJust\(\)/g, '' ],
  // delete .ToLocalCheck()
  [ /\.ToLocalChecked\(\)/g, '' ],
  [ /^.*->SetInternalFieldCount\(.*$/gm, '' ],

  // replace using node; and/or using v8; to using Napi;
  [ /using (node|v8);/g, 'using Napi;' ],
  [ /using namespace (node|Nan|v8);/g, 'using namespace Napi;' ],
  // delete using v8::Local;
  [ /using v8::Local;\n/g, '' ],
  // replace using v8::XXX; with using Napi::XXX
  [ /using v8::([A-Za-z]+);/g, 'using Napi::$1;' ],

];

var paths = listFiles(dir);
paths.forEach(function(dirEntry) {
  var filename = dirEntry.split('\\').pop().split('/').pop();

  // Check whether the file is a source file or a config file
  // then execute function accordingly
  var sourcePattern = /.+\.h|.+\.cc|.+\.cpp/;
  if (sourcePattern.test(filename)) {
    convertFile(dirEntry, SourceFileOperations);
  } else if (ConfigFileOperations[filename] != null) {
    convertFile(dirEntry, ConfigFileOperations[filename]);
  }
});

function listFiles(dir, filelist) {
  var files = fs.readdirSync(dir);
  filelist = filelist || [];
  files.forEach(function(file) {
    if (file === 'node_modules') {
      return
    }

    if (fs.statSync(path.join(dir, file)).isDirectory()) {
      filelist = listFiles(path.join(dir, file), filelist);
    } else {
      filelist.push(path.join(dir, file));
    }
  });
  return filelist;
}

function convert(content, operations) {
  for (let i = 0; i < operations.length; i ++) {
    let operation = operations[i];
    content = content.replace(operation[0], operation[1]);
  }
  return content;
}

function convertFile(fileName, operations) {
  fs.readFile(fileName, "utf-8", function (err, file) {
    if (err) throw err;

    file = convert(file, operations);

    fs.writeFile(fileName, file, function(err){
      if (err) throw err;
    });
  });
}
# Tools

## clang-format

The clang-format checking tools is designed to check changed lines of code compared to given git-refs.

## Migration Script

The migration tool is designed to reduce repetitive work in the migration process. However, the script is not aiming to convert every thing for you. There are usually some small fixes and major reconstruction required.

### How To Use

To run the conversion script, first make sure you have the latest `node-addon-api` in your `node_modules` directory.
```
npm install node-addon-api
```

Then run the script passing your project directory
```
node ./node_modules/node-addon-api/tools/conversion.js ./
```

After finish, recompile and debug things that are missed by the script.


### Quick Fixes
Here is the list of things that can be fixed easily.
  1. Change your methods' return value to void if it doesn't return value to JavaScript.
  2. Use `.` to access attribute or to invoke member function in Napi::Object instead of `->`.
  3. `Napi::New(env, value);` to `Napi::[Type]::New(env, value);


### Major Reconstructions
The implementation of `Napi::ObjectWrap` is significantly different from NAN's. `Napi::ObjectWrap` takes a pointer to the wrapped object and creates a reference to the wrapped object inside ObjectWrap constructor. `Napi::ObjectWrap` also associates wrapped object's instance methods to Javascript module instead of static methods like NAN.

So if you use Nan::ObjectWrap in your module, you will need to execute the following steps.

  1. Convert your [ClassName]::New function to a constructor function that takes a `Napi::CallbackInfo`. Declare it as
```
[ClassName](const Napi::CallbackInfo& info);
```
and define it as
```
[ClassName]::[ClassName](const Napi::CallbackInfo& info) : Napi::ObjectWrap<[ClassName]>(info){
  ...
}
```
This way, the `Napi::ObjectWrap` constructor will be invoked after the object has been instantiated and `Napi::ObjectWrap` can use the `this` pointer to create a reference to the wrapped object.

  2. Move your original constructor code into the new constructor. Delete your original constructor.
  3. In your class initialization function, associate native methods in the following way.
```
Napi::FunctionReference constructor;

void [ClassName]::Init(Napi::Env env, Napi::Object exports, Napi::Object module) {
  Napi::HandleScope scope(env);
  Napi::Function ctor = DefineClass(env, "Canvas", {
    InstanceMethod<&[ClassName]::Func1>("Func1"),
    InstanceMethod<&[ClassName]::Func2>("Func2"),
    InstanceAccessor<&[ClassName]::ValueGetter>("Value"),
    StaticMethod<&[ClassName]::StaticMethod>("MethodName"),
    InstanceValue("Value", Napi::[Type]::New(env, value)),
  });

  constructor = Napi::Persistent(ctor);
  constructor .SuppressDestruct();
  exports.Set("[ClassName]", ctor);
}
```
  4. In function where you need to Unwrap the ObjectWrap in NAN like `[ClassName]* native = Nan::ObjectWrap::Unwrap<[ClassName]>(info.This());`, use `this` pointer directly as the unwrapped object as each ObjectWrap instance is associated with a unique object instance.


If you still find issues after following this guide, please leave us an issue describing your problem and we will try to resolve it.
var __defProp = Object.defineProperty;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {
  __markAsModule(target);
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
__export(exports, {
  LCS: () => LCS,
  diff3Merge: () => diff3Merge,
  diff3MergeRegions: () => diff3MergeRegions,
  diffComm: () => diffComm,
  diffIndices: () => diffIndices,
  diffPatch: () => diffPatch,
  invertPatch: () => invertPatch,
  merge: () => merge,
  mergeDiff3: () => mergeDiff3,
  mergeDigIn: () => mergeDigIn,
  patch: () => patch,
  stripPatch: () => stripPatch
});
function LCS(buffer1, buffer2) {
  let equivalenceClasses = {};
  for (let j = 0; j < buffer2.length; j++) {
    const item = buffer2[j];
    if (equivalenceClasses[item]) {
      equivalenceClasses[item].push(j);
    } else {
      equivalenceClasses[item] = [j];
    }
  }
  const NULLRESULT = { buffer1index: -1, buffer2index: -1, chain: null };
  let candidates = [NULLRESULT];
  for (let i = 0; i < buffer1.length; i++) {
    const item = buffer1[i];
    const buffer2indices = equivalenceClasses[item] || [];
    let r = 0;
    let c = candidates[0];
    for (let jx = 0; jx < buffer2indices.length; jx++) {
      const j = buffer2indices[jx];
      let s;
      for (s = r; s < candidates.length; s++) {
        if (candidates[s].buffer2index < j && (s === candidates.length - 1 || candidates[s + 1].buffer2index > j)) {
          break;
        }
      }
      if (s < candidates.length) {
        const newCandidate = { buffer1index: i, buffer2index: j, chain: candidates[s] };
        if (r === candidates.length) {
          candidates.push(c);
        } else {
          candidates[r] = c;
        }
        r = s + 1;
        c = newCandidate;
        if (r === candidates.length) {
          break;
        }
      }
    }
    candidates[r] = c;
  }
  return candidates[candidates.length - 1];
}
function diffComm(buffer1, buffer2) {
  const lcs = LCS(buffer1, buffer2);
  let result = [];
  let tail1 = buffer1.length;
  let tail2 = buffer2.length;
  let common = { common: [] };
  function processCommon() {
    if (common.common.length) {
      common.common.reverse();
      result.push(common);
      common = { common: [] };
    }
  }
  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
    let different = { buffer1: [], buffer2: [] };
    while (--tail1 > candidate.buffer1index) {
      different.buffer1.push(buffer1[tail1]);
    }
    while (--tail2 > candidate.buffer2index) {
      different.buffer2.push(buffer2[tail2]);
    }
    if (different.buffer1.length || different.buffer2.length) {
      processCommon();
      different.buffer1.reverse();
      different.buffer2.reverse();
      result.push(different);
    }
    if (tail1 >= 0) {
      common.common.push(buffer1[tail1]);
    }
  }
  processCommon();
  result.reverse();
  return result;
}
function diffIndices(buffer1, buffer2) {
  const lcs = LCS(buffer1, buffer2);
  let result = [];
  let tail1 = buffer1.length;
  let tail2 = buffer2.length;
  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
    const mismatchLength1 = tail1 - candidate.buffer1index - 1;
    const mismatchLength2 = tail2 - candidate.buffer2index - 1;
    tail1 = candidate.buffer1index;
    tail2 = candidate.buffer2index;
    if (mismatchLength1 || mismatchLength2) {
      result.push({
        buffer1: [tail1 + 1, mismatchLength1],
        buffer1Content: buffer1.slice(tail1 + 1, tail1 + 1 + mismatchLength1),
        buffer2: [tail2 + 1, mismatchLength2],
        buffer2Content: buffer2.slice(tail2 + 1, tail2 + 1 + mismatchLength2)
      });
    }
  }
  result.reverse();
  return result;
}
function diffPatch(buffer1, buffer2) {
  const lcs = LCS(buffer1, buffer2);
  let result = [];
  let tail1 = buffer1.length;
  let tail2 = buffer2.length;
  function chunkDescription(buffer, offset, length) {
    let chunk = [];
    for (let i = 0; i < length; i++) {
      chunk.push(buffer[offset + i]);
    }
    return {
      offset,
      length,
      chunk
    };
  }
  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
    const mismatchLength1 = tail1 - candidate.buffer1index - 1;
    const mismatchLength2 = tail2 - candidate.buffer2index - 1;
    tail1 = candidate.buffer1index;
    tail2 = candidate.buffer2index;
    if (mismatchLength1 || mismatchLength2) {
      result.push({
        buffer1: chunkDescription(buffer1, candidate.buffer1index + 1, mismatchLength1),
        buffer2: chunkDescription(buffer2, candidate.buffer2index + 1, mismatchLength2)
      });
    }
  }
  result.reverse();
  return result;
}
function diff3MergeRegions(a, o, b) {
  let hunks = [];
  function addHunk(h, ab) {
    hunks.push({
      ab,
      oStart: h.buffer1[0],
      oLength: h.buffer1[1],
      abStart: h.buffer2[0],
      abLength: h.buffer2[1]
    });
  }
  diffIndices(o, a).forEach((item) => addHunk(item, "a"));
  diffIndices(o, b).forEach((item) => addHunk(item, "b"));
  hunks.sort((x, y) => x.oStart - y.oStart);
  let results = [];
  let currOffset = 0;
  function advanceTo(endOffset) {
    if (endOffset > currOffset) {
      results.push({
        stable: true,
        buffer: "o",
        bufferStart: currOffset,
        bufferLength: endOffset - currOffset,
        bufferContent: o.slice(currOffset, endOffset)
      });
      currOffset = endOffset;
    }
  }
  while (hunks.length) {
    let hunk = hunks.shift();
    let regionStart = hunk.oStart;
    let regionEnd = hunk.oStart + hunk.oLength;
    let regionHunks = [hunk];
    advanceTo(regionStart);
    while (hunks.length) {
      const nextHunk = hunks[0];
      const nextHunkStart = nextHunk.oStart;
      if (nextHunkStart > regionEnd)
        break;
      regionEnd = Math.max(regionEnd, nextHunkStart + nextHunk.oLength);
      regionHunks.push(hunks.shift());
    }
    if (regionHunks.length === 1) {
      if (hunk.abLength > 0) {
        const buffer = hunk.ab === "a" ? a : b;
        results.push({
          stable: true,
          buffer: hunk.ab,
          bufferStart: hunk.abStart,
          bufferLength: hunk.abLength,
          bufferContent: buffer.slice(hunk.abStart, hunk.abStart + hunk.abLength)
        });
      }
    } else {
      let bounds = {
        a: [a.length, -1, o.length, -1],
        b: [b.length, -1, o.length, -1]
      };
      while (regionHunks.length) {
        hunk = regionHunks.shift();
        const oStart = hunk.oStart;
        const oEnd = oStart + hunk.oLength;
        const abStart = hunk.abStart;
        const abEnd = abStart + hunk.abLength;
        let b2 = bounds[hunk.ab];
        b2[0] = Math.min(abStart, b2[0]);
        b2[1] = Math.max(abEnd, b2[1]);
        b2[2] = Math.min(oStart, b2[2]);
        b2[3] = Math.max(oEnd, b2[3]);
      }
      const aStart = bounds.a[0] + (regionStart - bounds.a[2]);
      const aEnd = bounds.a[1] + (regionEnd - bounds.a[3]);
      const bStart = bounds.b[0] + (regionStart - bounds.b[2]);
      const bEnd = bounds.b[1] + (regionEnd - bounds.b[3]);
      let result = {
        stable: false,
        aStart,
        aLength: aEnd - aStart,
        aContent: a.slice(aStart, aEnd),
        oStart: regionStart,
        oLength: regionEnd - regionStart,
        oContent: o.slice(regionStart, regionEnd),
        bStart,
        bLength: bEnd - bStart,
        bContent: b.slice(bStart, bEnd)
      };
      results.push(result);
    }
    currOffset = regionEnd;
  }
  advanceTo(o.length);
  return results;
}
function diff3Merge(a, o, b, options) {
  let defaults = {
    excludeFalseConflicts: true,
    stringSeparator: /\s+/
  };
  options = Object.assign(defaults, options);
  if (typeof a === "string")
    a = a.split(options.stringSeparator);
  if (typeof o === "string")
    o = o.split(options.stringSeparator);
  if (typeof b === "string")
    b = b.split(options.stringSeparator);
  let results = [];
  const regions = diff3MergeRegions(a, o, b);
  let okBuffer = [];
  function flushOk() {
    if (okBuffer.length) {
      results.push({ ok: okBuffer });
    }
    okBuffer = [];
  }
  function isFalseConflict(a2, b2) {
    if (a2.length !== b2.length)
      return false;
    for (let i = 0; i < a2.length; i++) {
      if (a2[i] !== b2[i])
        return false;
    }
    return true;
  }
  regions.forEach((region) => {
    if (region.stable) {
      okBuffer.push(...region.bufferContent);
    } else {
      if (options.excludeFalseConflicts && isFalseConflict(region.aContent, region.bContent)) {
        okBuffer.push(...region.aContent);
      } else {
        flushOk();
        results.push({
          conflict: {
            a: region.aContent,
            aIndex: region.aStart,
            o: region.oContent,
            oIndex: region.oStart,
            b: region.bContent,
            bIndex: region.bStart
          }
        });
      }
    }
  });
  flushOk();
  return results;
}
function mergeDiff3(a, o, b, options) {
  const defaults = {
    excludeFalseConflicts: true,
    stringSeparator: /\s+/,
    label: {}
  };
  options = Object.assign(defaults, options);
  const aSection = "<<<<<<<" + (options.label.a ? ` ${options.label.a}` : "");
  const oSection = "|||||||" + (options.label.o ? ` ${options.label.o}` : "");
  const xSection = "=======";
  const bSection = ">>>>>>>" + (options.label.b ? ` ${options.label.b}` : "");
  const regions = diff3Merge(a, o, b, options);
  let conflict = false;
  let result = [];
  regions.forEach((region) => {
    if (region.ok) {
      result = result.concat(region.ok);
    } else if (region.conflict) {
      conflict = true;
      result = result.concat([aSection], region.conflict.a, [oSection], region.conflict.o, [xSection], region.conflict.b, [bSection]);
    }
  });
  return {
    conflict,
    result
  };
}
function merge(a, o, b, options) {
  const defaults = {
    excludeFalseConflicts: true,
    stringSeparator: /\s+/,
    label: {}
  };
  options = Object.assign(defaults, options);
  const aSection = "<<<<<<<" + (options.label.a ? ` ${options.label.a}` : "");
  const xSection = "=======";
  const bSection = ">>>>>>>" + (options.label.b ? ` ${options.label.b}` : "");
  const regions = diff3Merge(a, o, b, options);
  let conflict = false;
  let result = [];
  regions.forEach((region) => {
    if (region.ok) {
      result = result.concat(region.ok);
    } else if (region.conflict) {
      conflict = true;
      result = result.concat([aSection], region.conflict.a, [xSection], region.conflict.b, [bSection]);
    }
  });
  return {
    conflict,
    result
  };
}
function mergeDigIn(a, o, b, options) {
  const defaults = {
    excludeFalseConflicts: true,
    stringSeparator: /\s+/,
    label: {}
  };
  options = Object.assign(defaults, options);
  const aSection = "<<<<<<<" + (options.label.a ? ` ${options.label.a}` : "");
  const xSection = "=======";
  const bSection = ">>>>>>>" + (options.label.b ? ` ${options.label.b}` : "");
  const regions = diff3Merge(a, o, b, options);
  let conflict = false;
  let result = [];
  regions.forEach((region) => {
    if (region.ok) {
      result = result.concat(region.ok);
    } else {
      const c = diffComm(region.conflict.a, region.conflict.b);
      for (let j = 0; j < c.length; j++) {
        let inner = c[j];
        if (inner.common) {
          result = result.concat(inner.common);
        } else {
          conflict = true;
          result = result.concat([aSection], inner.buffer1, [xSection], inner.buffer2, [bSection]);
        }
      }
    }
  });
  return {
    conflict,
    result
  };
}
function patch(buffer, patch2) {
  let result = [];
  let currOffset = 0;
  function advanceTo(targetOffset) {
    while (currOffset < targetOffset) {
      result.push(buffer[currOffset]);
      currOffset++;
    }
  }
  for (let chunkIndex = 0; chunkIndex < patch2.length; chunkIndex++) {
    let chunk = patch2[chunkIndex];
    advanceTo(chunk.buffer1.offset);
    for (let itemIndex = 0; itemIndex < chunk.buffer2.chunk.length; itemIndex++) {
      result.push(chunk.buffer2.chunk[itemIndex]);
    }
    currOffset += chunk.buffer1.length;
  }
  advanceTo(buffer.length);
  return result;
}
function stripPatch(patch2) {
  return patch2.map((chunk) => ({
    buffer1: { offset: chunk.buffer1.offset, length: chunk.buffer1.length },
    buffer2: { chunk: chunk.buffer2.chunk }
  }));
}
function invertPatch(patch2) {
  return patch2.map((chunk) => ({
    buffer1: chunk.buffer2,
    buffer2: chunk.buffer1
  }));
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
  LCS,
  diff3Merge,
  diff3MergeRegions,
  diffComm,
  diffIndices,
  diffPatch,
  invertPatch,
  merge,
  mergeDiff3,
  mergeDigIn,
  patch,
  stripPatch
});
//# sourceMappingURL=index.cjs.map
{
  "version": 3,
  "sources": ["../index.mjs"],
  "sourcesContent": ["export {\n  LCS,\n  diffComm,\n  diffIndices,\n  diffPatch,\n  diff3MergeRegions,\n  diff3Merge,\n  mergeDiff3,\n  merge,\n  mergeDigIn,\n  patch,\n  stripPatch,\n  invertPatch\n};\n\n\n// Text diff algorithm following Hunt and McIlroy 1976.\n// J. W. Hunt and M. D. McIlroy, An algorithm for differential buffer\n// comparison, Bell Telephone Laboratories CSTR #41 (1976)\n// http://www.cs.dartmouth.edu/~doug/\n// https://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n//\n// Expects two arrays, finds longest common sequence\nfunction LCS(buffer1, buffer2) {\n\n  let equivalenceClasses = {};\n  for (let j = 0; j < buffer2.length; j++) {\n    const item = buffer2[j];\n    if (equivalenceClasses[item]) {\n      equivalenceClasses[item].push(j);\n    } else {\n      equivalenceClasses[item] = [j];\n    }\n  }\n\n  const NULLRESULT = { buffer1index: -1, buffer2index: -1, chain: null };\n  let candidates = [NULLRESULT];\n\n  for (let i = 0; i < buffer1.length; i++) {\n    const item = buffer1[i];\n    const buffer2indices = equivalenceClasses[item] || [];\n    let r = 0;\n    let c = candidates[0];\n\n    for (let jx = 0; jx < buffer2indices.length; jx++) {\n      const j = buffer2indices[jx];\n\n      let s;\n      for (s = r; s < candidates.length; s++) {\n        if ((candidates[s].buffer2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].buffer2index > j))) {\n          break;\n        }\n      }\n\n      if (s < candidates.length) {\n        const newCandidate = { buffer1index: i, buffer2index: j, chain: candidates[s] };\n        if (r === candidates.length) {\n          candidates.push(c);\n        } else {\n          candidates[r] = c;\n        }\n        r = s + 1;\n        c = newCandidate;\n        if (r === candidates.length) {\n          break; // no point in examining further (j)s\n        }\n      }\n    }\n\n    candidates[r] = c;\n  }\n\n  // At this point, we know the LCS: it's in the reverse of the\n  // linked-list through .chain of candidates[candidates.length - 1].\n\n  return candidates[candidates.length - 1];\n}\n\n\n// We apply the LCS to build a 'comm'-style picture of the\n// differences between buffer1 and buffer2.\nfunction diffComm(buffer1, buffer2) {\n  const lcs = LCS(buffer1, buffer2);\n  let result = [];\n  let tail1 = buffer1.length;\n  let tail2 = buffer2.length;\n  let common = {common: []};\n\n  function processCommon() {\n    if (common.common.length) {\n      common.common.reverse();\n      result.push(common);\n      common = {common: []};\n    }\n  }\n\n  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n    let different = {buffer1: [], buffer2: []};\n\n    while (--tail1 > candidate.buffer1index) {\n      different.buffer1.push(buffer1[tail1]);\n    }\n\n    while (--tail2 > candidate.buffer2index) {\n      different.buffer2.push(buffer2[tail2]);\n    }\n\n    if (different.buffer1.length || different.buffer2.length) {\n      processCommon();\n      different.buffer1.reverse();\n      different.buffer2.reverse();\n      result.push(different);\n    }\n\n    if (tail1 >= 0) {\n      common.common.push(buffer1[tail1]);\n    }\n  }\n\n  processCommon();\n\n  result.reverse();\n  return result;\n}\n\n\n// We apply the LCS to give a simple representation of the\n// offsets and lengths of mismatched chunks in the input\n// buffers. This is used by diff3MergeRegions.\nfunction diffIndices(buffer1, buffer2) {\n  const lcs = LCS(buffer1, buffer2);\n  let result = [];\n  let tail1 = buffer1.length;\n  let tail2 = buffer2.length;\n\n  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n    const mismatchLength1 = tail1 - candidate.buffer1index - 1;\n    const mismatchLength2 = tail2 - candidate.buffer2index - 1;\n    tail1 = candidate.buffer1index;\n    tail2 = candidate.buffer2index;\n\n    if (mismatchLength1 || mismatchLength2) {\n      result.push({\n        buffer1: [tail1 + 1, mismatchLength1],\n        buffer1Content: buffer1.slice(tail1 + 1, tail1 + 1 + mismatchLength1),\n        buffer2: [tail2 + 1, mismatchLength2],\n        buffer2Content: buffer2.slice(tail2 + 1, tail2 + 1 + mismatchLength2)\n      });\n    }\n  }\n\n  result.reverse();\n  return result;\n}\n\n\n// We apply the LCS to build a JSON representation of a\n// diff(1)-style patch.\nfunction diffPatch(buffer1, buffer2) {\n  const lcs = LCS(buffer1, buffer2);\n  let result = [];\n  let tail1 = buffer1.length;\n  let tail2 = buffer2.length;\n\n  function chunkDescription(buffer, offset, length) {\n    let chunk = [];\n    for (let i = 0; i < length; i++) {\n      chunk.push(buffer[offset + i]);\n    }\n    return {\n      offset: offset,\n      length: length,\n      chunk: chunk\n    };\n  }\n\n  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n    const mismatchLength1 = tail1 - candidate.buffer1index - 1;\n    const mismatchLength2 = tail2 - candidate.buffer2index - 1;\n    tail1 = candidate.buffer1index;\n    tail2 = candidate.buffer2index;\n\n    if (mismatchLength1 || mismatchLength2) {\n      result.push({\n        buffer1: chunkDescription(buffer1, candidate.buffer1index + 1, mismatchLength1),\n        buffer2: chunkDescription(buffer2, candidate.buffer2index + 1, mismatchLength2)\n      });\n    }\n  }\n\n  result.reverse();\n  return result;\n}\n\n\n// Given three buffers, A, O, and B, where both A and B are\n// independently derived from O, returns a fairly complicated\n// internal representation of merge decisions it's taken. The\n// interested reader may wish to consult\n//\n// Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.\n// 'A Formal Investigation of ' In Arvind and Prasad,\n// editors, Foundations of Software Technology and Theoretical\n// Computer Science (FSTTCS), December 2007.\n//\n// (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)\n//\nfunction diff3MergeRegions(a, o, b) {\n\n  // \"hunks\" are array subsets where `a` or `b` are different from `o`\n  // https://www.gnu.org/software/diffutils/manual/html_node/diff3-Hunks.html\n  let hunks = [];\n  function addHunk(h, ab) {\n    hunks.push({\n      ab: ab,\n      oStart: h.buffer1[0],\n      oLength: h.buffer1[1],   // length of o to remove\n      abStart: h.buffer2[0],\n      abLength: h.buffer2[1]   // length of a/b to insert\n      // abContent: (ab === 'a' ? a : b).slice(h.buffer2[0], h.buffer2[0] + h.buffer2[1])\n    });\n  }\n\n  diffIndices(o, a).forEach(item => addHunk(item, 'a'));\n  diffIndices(o, b).forEach(item => addHunk(item, 'b'));\n  hunks.sort((x,y) => x.oStart - y.oStart);\n\n  let results = [];\n  let currOffset = 0;\n\n  function advanceTo(endOffset) {\n    if (endOffset > currOffset) {\n      results.push({\n        stable: true,\n        buffer: 'o',\n        bufferStart: currOffset,\n        bufferLength: endOffset - currOffset,\n        bufferContent: o.slice(currOffset, endOffset)\n      });\n      currOffset = endOffset;\n    }\n  }\n\n  while (hunks.length) {\n    let hunk = hunks.shift();\n    let regionStart = hunk.oStart;\n    let regionEnd = hunk.oStart + hunk.oLength;\n    let regionHunks = [hunk];\n    advanceTo(regionStart);\n\n    // Try to pull next overlapping hunk into this region\n    while (hunks.length) {\n      const nextHunk = hunks[0];\n      const nextHunkStart = nextHunk.oStart;\n      if (nextHunkStart > regionEnd) break;   // no overlap\n\n      regionEnd = Math.max(regionEnd, nextHunkStart + nextHunk.oLength);\n      regionHunks.push(hunks.shift());\n    }\n\n    if (regionHunks.length === 1) {\n      // Only one hunk touches this region, meaning that there is no conflict here.\n      // Either `a` or `b` is inserting into a region of `o` unchanged by the other.\n      if (hunk.abLength > 0) {\n        const buffer = (hunk.ab === 'a' ? a : b);\n        results.push({\n          stable: true,\n          buffer: hunk.ab,\n          bufferStart: hunk.abStart,\n          bufferLength: hunk.abLength,\n          bufferContent: buffer.slice(hunk.abStart, hunk.abStart + hunk.abLength)\n        });\n      }\n    } else {\n      // A true a/b conflict. Determine the bounds involved from `a`, `o`, and `b`.\n      // Effectively merge all the `a` hunks into one giant hunk, then do the\n      // same for the `b` hunks; then, correct for skew in the regions of `o`\n      // that each side changed, and report appropriate spans for the three sides.\n      let bounds = {\n        a: [a.length, -1, o.length, -1],\n        b: [b.length, -1, o.length, -1]\n      };\n      while (regionHunks.length) {\n        hunk = regionHunks.shift();\n        const oStart = hunk.oStart;\n        const oEnd = oStart + hunk.oLength;\n        const abStart = hunk.abStart;\n        const abEnd = abStart + hunk.abLength;\n        let b = bounds[hunk.ab];\n        b[0] = Math.min(abStart, b[0]);\n        b[1] = Math.max(abEnd, b[1]);\n        b[2] = Math.min(oStart, b[2]);\n        b[3] = Math.max(oEnd, b[3]);\n      }\n\n      const aStart = bounds.a[0] + (regionStart - bounds.a[2]);\n      const aEnd = bounds.a[1] + (regionEnd - bounds.a[3]);\n      const bStart = bounds.b[0] + (regionStart - bounds.b[2]);\n      const bEnd = bounds.b[1] + (regionEnd - bounds.b[3]);\n\n      let result = {\n        stable: false,\n        aStart: aStart,\n        aLength: aEnd - aStart,\n        aContent: a.slice(aStart, aEnd),\n        oStart: regionStart,\n        oLength: regionEnd - regionStart,\n        oContent: o.slice(regionStart, regionEnd),\n        bStart: bStart,\n        bLength: bEnd - bStart,\n        bContent: b.slice(bStart, bEnd)\n      };\n      results.push(result);\n    }\n    currOffset = regionEnd;\n  }\n\n  advanceTo(o.length);\n\n  return results;\n}\n\n\n// Applies the output of diff3MergeRegions to actually\n// construct the merged buffer; the returned result alternates\n// between 'ok' and 'conflict' blocks.\n// A \"false conflict\" is where `a` and `b` both change the same from `o`\nfunction diff3Merge(a, o, b, options) {\n  let defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/\n  };\n  options = Object.assign(defaults, options);\n\n  if (typeof a === 'string') a = a.split(options.stringSeparator);\n  if (typeof o === 'string') o = o.split(options.stringSeparator);\n  if (typeof b === 'string') b = b.split(options.stringSeparator);\n\n  let results = [];\n  const regions = diff3MergeRegions(a, o, b);\n\n  let okBuffer = [];\n  function flushOk() {\n    if (okBuffer.length) {\n      results.push({ ok: okBuffer });\n    }\n    okBuffer = [];\n  }\n\n  function isFalseConflict(a, b) {\n    if (a.length !== b.length) return false;\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n\n  regions.forEach(region =>  {\n    if (region.stable) {\n      okBuffer.push(...region.bufferContent);\n    } else {\n      if (options.excludeFalseConflicts && isFalseConflict(region.aContent, region.bContent)) {\n        okBuffer.push(...region.aContent);\n      } else {\n        flushOk();\n        results.push({\n          conflict: {\n            a: region.aContent,\n            aIndex: region.aStart,\n            o: region.oContent,\n            oIndex: region.oStart,\n            b: region.bContent,\n            bIndex: region.bStart\n          }\n        });\n      }\n    }\n  });\n\n  flushOk();\n  return results;\n}\n\n\nfunction mergeDiff3(a, o, b, options) {\n  const defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/,\n    label: {}\n  };\n  options = Object.assign(defaults, options);\n\n  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');\n  const oSection = '|||||||' + (options.label.o ? ` ${options.label.o}` : '');\n  const xSection = '=======';\n  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');\n\n  const regions = diff3Merge(a, o, b, options);\n  let conflict = false;\n  let result = [];\n\n  regions.forEach(region => {\n    if (region.ok) {\n      result = result.concat(region.ok);\n    } else if (region.conflict) {\n      conflict = true;\n      result = result.concat(\n        [aSection],\n        region.conflict.a,\n        [oSection],\n        region.conflict.o,\n        [xSection],\n        region.conflict.b,\n        [bSection]\n      );\n    }\n  });\n\n  return {\n    conflict: conflict,\n    result: result\n  };\n}\n\n\nfunction merge(a, o, b, options) {\n  const defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/,\n    label: {}\n  };\n  options = Object.assign(defaults, options);\n\n  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');\n  const xSection = '=======';\n  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');\n\n  const regions = diff3Merge(a, o, b, options);\n  let conflict = false;\n  let result = [];\n\n  regions.forEach(region => {\n    if (region.ok) {\n      result = result.concat(region.ok);\n    } else if (region.conflict) {\n      conflict = true;\n      result = result.concat(\n        [aSection],\n        region.conflict.a,\n        [xSection],\n        region.conflict.b,\n        [bSection]\n      );\n    }\n  });\n\n  return {\n    conflict: conflict,\n    result: result\n  };\n}\n\n\nfunction mergeDigIn(a, o, b, options) {\n  const defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/,\n    label: {}\n  };\n  options = Object.assign(defaults, options);\n\n  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');\n  const xSection = '=======';\n  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');\n\n  const regions = diff3Merge(a, o, b, options);\n  let conflict = false;\n  let result = [];\n\n  regions.forEach(region => {\n    if (region.ok) {\n      result = result.concat(region.ok);\n    } else {\n      const c = diffComm(region.conflict.a, region.conflict.b);\n      for (let j = 0; j < c.length; j++) {\n        let inner = c[j];\n        if (inner.common) {\n          result = result.concat(inner.common);\n        } else {\n          conflict = true;\n          result = result.concat(\n            [aSection],\n            inner.buffer1,\n            [xSection],\n            inner.buffer2,\n            [bSection]\n          );\n        }\n      }\n    }\n  });\n\n  return {\n    conflict: conflict,\n    result: result\n  };\n}\n\n\n// Applies a patch to a buffer.\n// Given buffer1 and buffer2, `patch(buffer1, diffPatch(buffer1, buffer2))` should give buffer2.\nfunction patch(buffer, patch) {\n  let result = [];\n  let currOffset = 0;\n\n  function advanceTo(targetOffset) {\n    while (currOffset < targetOffset) {\n      result.push(buffer[currOffset]);\n      currOffset++;\n    }\n  }\n\n  for (let chunkIndex = 0; chunkIndex < patch.length; chunkIndex++) {\n    let chunk = patch[chunkIndex];\n    advanceTo(chunk.buffer1.offset);\n    for (let itemIndex = 0; itemIndex < chunk.buffer2.chunk.length; itemIndex++) {\n      result.push(chunk.buffer2.chunk[itemIndex]);\n    }\n    currOffset += chunk.buffer1.length;\n  }\n\n  advanceTo(buffer.length);\n  return result;\n}\n\n\n// Takes the output of diffPatch(), and removes extra information from it.\n// It can still be used by patch(), below, but can no longer be inverted.\nfunction stripPatch(patch) {\n  return patch.map(chunk => ({\n    buffer1: { offset: chunk.buffer1.offset, length: chunk.buffer1.length },\n    buffer2: { chunk: chunk.buffer2.chunk }\n  }));\n}\n\n\n// Takes the output of diffPatch(), and inverts the sense of it, so that it\n// can be applied to buffer2 to give buffer1 rather than the other way around.\nfunction invertPatch(patch) {\n  return patch.map(chunk => ({\n    buffer1: chunk.buffer2,\n    buffer2: chunk.buffer1\n  }));\n}\n"],
  "mappings": ";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA,aAAa,SAAS,SAAS;AAE7B,MAAI,qBAAqB;AACzB,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,OAAO,QAAQ;AACrB,QAAI,mBAAmB,OAAO;AAC5B,yBAAmB,MAAM,KAAK;AAAA,WACzB;AACL,yBAAmB,QAAQ,CAAC;AAAA;AAAA;AAIhC,QAAM,aAAa,EAAE,cAAc,IAAI,cAAc,IAAI,OAAO;AAChE,MAAI,aAAa,CAAC;AAElB,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,OAAO,QAAQ;AACrB,UAAM,iBAAiB,mBAAmB,SAAS;AACnD,QAAI,IAAI;AACR,QAAI,IAAI,WAAW;AAEnB,aAAS,KAAK,GAAG,KAAK,eAAe,QAAQ,MAAM;AACjD,YAAM,IAAI,eAAe;AAEzB,UAAI;AACJ,WAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACtC,YAAK,WAAW,GAAG,eAAe,KAAQ,OAAM,WAAW,SAAS,KAAO,WAAW,IAAI,GAAG,eAAe,IAAK;AAC/G;AAAA;AAAA;AAIJ,UAAI,IAAI,WAAW,QAAQ;AACzB,cAAM,eAAe,EAAE,cAAc,GAAG,cAAc,GAAG,OAAO,WAAW;AAC3E,YAAI,MAAM,WAAW,QAAQ;AAC3B,qBAAW,KAAK;AAAA,eACX;AACL,qBAAW,KAAK;AAAA;AAElB,YAAI,IAAI;AACR,YAAI;AACJ,YAAI,MAAM,WAAW,QAAQ;AAC3B;AAAA;AAAA;AAAA;AAKN,eAAW,KAAK;AAAA;AAMlB,SAAO,WAAW,WAAW,SAAS;AAAA;AAMxC,kBAAkB,SAAS,SAAS;AAClC,QAAM,MAAM,IAAI,SAAS;AACzB,MAAI,SAAS;AACb,MAAI,QAAQ,QAAQ;AACpB,MAAI,QAAQ,QAAQ;AACpB,MAAI,SAAS,EAAC,QAAQ;AAEtB,2BAAyB;AACvB,QAAI,OAAO,OAAO,QAAQ;AACxB,aAAO,OAAO;AACd,aAAO,KAAK;AACZ,eAAS,EAAC,QAAQ;AAAA;AAAA;AAItB,WAAS,YAAY,KAAK,cAAc,MAAM,YAAY,UAAU,OAAO;AACzE,QAAI,YAAY,EAAC,SAAS,IAAI,SAAS;AAEvC,WAAO,EAAE,QAAQ,UAAU,cAAc;AACvC,gBAAU,QAAQ,KAAK,QAAQ;AAAA;AAGjC,WAAO,EAAE,QAAQ,UAAU,cAAc;AACvC,gBAAU,QAAQ,KAAK,QAAQ;AAAA;AAGjC,QAAI,UAAU,QAAQ,UAAU,UAAU,QAAQ,QAAQ;AACxD;AACA,gBAAU,QAAQ;AAClB,gBAAU,QAAQ;AAClB,aAAO,KAAK;AAAA;AAGd,QAAI,SAAS,GAAG;AACd,aAAO,OAAO,KAAK,QAAQ;AAAA;AAAA;AAI/B;AAEA,SAAO;AACP,SAAO;AAAA;AAOT,qBAAqB,SAAS,SAAS;AACrC,QAAM,MAAM,IAAI,SAAS;AACzB,MAAI,SAAS;AACb,MAAI,QAAQ,QAAQ;AACpB,MAAI,QAAQ,QAAQ;AAEpB,WAAS,YAAY,KAAK,cAAc,MAAM,YAAY,UAAU,OAAO;AACzE,UAAM,kBAAkB,QAAQ,UAAU,eAAe;AACzD,UAAM,kBAAkB,QAAQ,UAAU,eAAe;AACzD,YAAQ,UAAU;AAClB,YAAQ,UAAU;AAElB,QAAI,mBAAmB,iBAAiB;AACtC,aAAO,KAAK;AAAA,QACV,SAAS,CAAC,QAAQ,GAAG;AAAA,QACrB,gBAAgB,QAAQ,MAAM,QAAQ,GAAG,QAAQ,IAAI;AAAA,QACrD,SAAS,CAAC,QAAQ,GAAG;AAAA,QACrB,gBAAgB,QAAQ,MAAM,QAAQ,GAAG,QAAQ,IAAI;AAAA;AAAA;AAAA;AAK3D,SAAO;AACP,SAAO;AAAA;AAMT,mBAAmB,SAAS,SAAS;AACnC,QAAM,MAAM,IAAI,SAAS;AACzB,MAAI,SAAS;AACb,MAAI,QAAQ,QAAQ;AACpB,MAAI,QAAQ,QAAQ;AAEpB,4BAA0B,QAAQ,QAAQ,QAAQ;AAChD,QAAI,QAAQ;AACZ,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,YAAM,KAAK,OAAO,SAAS;AAAA;AAE7B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAIJ,WAAS,YAAY,KAAK,cAAc,MAAM,YAAY,UAAU,OAAO;AACzE,UAAM,kBAAkB,QAAQ,UAAU,eAAe;AACzD,UAAM,kBAAkB,QAAQ,UAAU,eAAe;AACzD,YAAQ,UAAU;AAClB,YAAQ,UAAU;AAElB,QAAI,mBAAmB,iBAAiB;AACtC,aAAO,KAAK;AAAA,QACV,SAAS,iBAAiB,SAAS,UAAU,eAAe,GAAG;AAAA,QAC/D,SAAS,iBAAiB,SAAS,UAAU,eAAe,GAAG;AAAA;AAAA;AAAA;AAKrE,SAAO;AACP,SAAO;AAAA;AAgBT,2BAA2B,GAAG,GAAG,GAAG;AAIlC,MAAI,QAAQ;AACZ,mBAAiB,GAAG,IAAI;AACtB,UAAM,KAAK;AAAA,MACT;AAAA,MACA,QAAQ,EAAE,QAAQ;AAAA,MAClB,SAAS,EAAE,QAAQ;AAAA,MACnB,SAAS,EAAE,QAAQ;AAAA,MACnB,UAAU,EAAE,QAAQ;AAAA;AAAA;AAKxB,cAAY,GAAG,GAAG,QAAQ,UAAQ,QAAQ,MAAM;AAChD,cAAY,GAAG,GAAG,QAAQ,UAAQ,QAAQ,MAAM;AAChD,QAAM,KAAK,CAAC,GAAE,MAAM,EAAE,SAAS,EAAE;AAEjC,MAAI,UAAU;AACd,MAAI,aAAa;AAEjB,qBAAmB,WAAW;AAC5B,QAAI,YAAY,YAAY;AAC1B,cAAQ,KAAK;AAAA,QACX,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,cAAc,YAAY;AAAA,QAC1B,eAAe,EAAE,MAAM,YAAY;AAAA;AAErC,mBAAa;AAAA;AAAA;AAIjB,SAAO,MAAM,QAAQ;AACnB,QAAI,OAAO,MAAM;AACjB,QAAI,cAAc,KAAK;AACvB,QAAI,YAAY,KAAK,SAAS,KAAK;AACnC,QAAI,cAAc,CAAC;AACnB,cAAU;AAGV,WAAO,MAAM,QAAQ;AACnB,YAAM,WAAW,MAAM;AACvB,YAAM,gBAAgB,SAAS;AAC/B,UAAI,gBAAgB;AAAW;AAE/B,kBAAY,KAAK,IAAI,WAAW,gBAAgB,SAAS;AACzD,kBAAY,KAAK,MAAM;AAAA;AAGzB,QAAI,YAAY,WAAW,GAAG;AAG5B,UAAI,KAAK,WAAW,GAAG;AACrB,cAAM,SAAU,KAAK,OAAO,MAAM,IAAI;AACtC,gBAAQ,KAAK;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ,KAAK;AAAA,UACb,aAAa,KAAK;AAAA,UAClB,cAAc,KAAK;AAAA,UACnB,eAAe,OAAO,MAAM,KAAK,SAAS,KAAK,UAAU,KAAK;AAAA;AAAA;AAAA,WAG7D;AAKL,UAAI,SAAS;AAAA,QACX,GAAG,CAAC,EAAE,QAAQ,IAAI,EAAE,QAAQ;AAAA,QAC5B,GAAG,CAAC,EAAE,QAAQ,IAAI,EAAE,QAAQ;AAAA;AAE9B,aAAO,YAAY,QAAQ;AACzB,eAAO,YAAY;AACnB,cAAM,SAAS,KAAK;AACpB,cAAM,OAAO,SAAS,KAAK;AAC3B,cAAM,UAAU,KAAK;AACrB,cAAM,QAAQ,UAAU,KAAK;AAC7B,YAAI,KAAI,OAAO,KAAK;AACpB,WAAE,KAAK,KAAK,IAAI,SAAS,GAAE;AAC3B,WAAE,KAAK,KAAK,IAAI,OAAO,GAAE;AACzB,WAAE,KAAK,KAAK,IAAI,QAAQ,GAAE;AAC1B,WAAE,KAAK,KAAK,IAAI,MAAM,GAAE;AAAA;AAG1B,YAAM,SAAS,OAAO,EAAE,KAAM,eAAc,OAAO,EAAE;AACrD,YAAM,OAAO,OAAO,EAAE,KAAM,aAAY,OAAO,EAAE;AACjD,YAAM,SAAS,OAAO,EAAE,KAAM,eAAc,OAAO,EAAE;AACrD,YAAM,OAAO,OAAO,EAAE,KAAM,aAAY,OAAO,EAAE;AAEjD,UAAI,SAAS;AAAA,QACX,QAAQ;AAAA,QACR;AAAA,QACA,SAAS,OAAO;AAAA,QAChB,UAAU,EAAE,MAAM,QAAQ;AAAA,QAC1B,QAAQ;AAAA,QACR,SAAS,YAAY;AAAA,QACrB,UAAU,EAAE,MAAM,aAAa;AAAA,QAC/B;AAAA,QACA,SAAS,OAAO;AAAA,QAChB,UAAU,EAAE,MAAM,QAAQ;AAAA;AAE5B,cAAQ,KAAK;AAAA;AAEf,iBAAa;AAAA;AAGf,YAAU,EAAE;AAEZ,SAAO;AAAA;AAQT,oBAAoB,GAAG,GAAG,GAAG,SAAS;AACpC,MAAI,WAAW;AAAA,IACb,uBAAuB;AAAA,IACvB,iBAAiB;AAAA;AAEnB,YAAU,OAAO,OAAO,UAAU;AAElC,MAAI,OAAO,MAAM;AAAU,QAAI,EAAE,MAAM,QAAQ;AAC/C,MAAI,OAAO,MAAM;AAAU,QAAI,EAAE,MAAM,QAAQ;AAC/C,MAAI,OAAO,MAAM;AAAU,QAAI,EAAE,MAAM,QAAQ;AAE/C,MAAI,UAAU;AACd,QAAM,UAAU,kBAAkB,GAAG,GAAG;AAExC,MAAI,WAAW;AACf,qBAAmB;AACjB,QAAI,SAAS,QAAQ;AACnB,cAAQ,KAAK,EAAE,IAAI;AAAA;AAErB,eAAW;AAAA;AAGb,2BAAyB,IAAG,IAAG;AAC7B,QAAI,GAAE,WAAW,GAAE;AAAQ,aAAO;AAClC,aAAS,IAAI,GAAG,IAAI,GAAE,QAAQ,KAAK;AACjC,UAAI,GAAE,OAAO,GAAE;AAAI,eAAO;AAAA;AAE5B,WAAO;AAAA;AAGT,UAAQ,QAAQ,YAAW;AACzB,QAAI,OAAO,QAAQ;AACjB,eAAS,KAAK,GAAG,OAAO;AAAA,WACnB;AACL,UAAI,QAAQ,yBAAyB,gBAAgB,OAAO,UAAU,OAAO,WAAW;AACtF,iBAAS,KAAK,GAAG,OAAO;AAAA,aACnB;AACL;AACA,gBAAQ,KAAK;AAAA,UACX,UAAU;AAAA,YACR,GAAG,OAAO;AAAA,YACV,QAAQ,OAAO;AAAA,YACf,GAAG,OAAO;AAAA,YACV,QAAQ,OAAO;AAAA,YACf,GAAG,OAAO;AAAA,YACV,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB;AACA,SAAO;AAAA;AAIT,oBAAoB,GAAG,GAAG,GAAG,SAAS;AACpC,QAAM,WAAW;AAAA,IACf,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,OAAO;AAAA;AAET,YAAU,OAAO,OAAO,UAAU;AAElC,QAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AACxE,QAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AACxE,QAAM,WAAW;AACjB,QAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AAExE,QAAM,UAAU,WAAW,GAAG,GAAG,GAAG;AACpC,MAAI,WAAW;AACf,MAAI,SAAS;AAEb,UAAQ,QAAQ,YAAU;AACxB,QAAI,OAAO,IAAI;AACb,eAAS,OAAO,OAAO,OAAO;AAAA,eACrB,OAAO,UAAU;AAC1B,iBAAW;AACX,eAAS,OAAO,OACd,CAAC,WACD,OAAO,SAAS,GAChB,CAAC,WACD,OAAO,SAAS,GAChB,CAAC,WACD,OAAO,SAAS,GAChB,CAAC;AAAA;AAAA;AAKP,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAKJ,eAAe,GAAG,GAAG,GAAG,SAAS;AAC/B,QAAM,WAAW;AAAA,IACf,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,OAAO;AAAA;AAET,YAAU,OAAO,OAAO,UAAU;AAElC,QAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AACxE,QAAM,WAAW;AACjB,QAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AAExE,QAAM,UAAU,WAAW,GAAG,GAAG,GAAG;AACpC,MAAI,WAAW;AACf,MAAI,SAAS;AAEb,UAAQ,QAAQ,YAAU;AACxB,QAAI,OAAO,IAAI;AACb,eAAS,OAAO,OAAO,OAAO;AAAA,eACrB,OAAO,UAAU;AAC1B,iBAAW;AACX,eAAS,OAAO,OACd,CAAC,WACD,OAAO,SAAS,GAChB,CAAC,WACD,OAAO,SAAS,GAChB,CAAC;AAAA;AAAA;AAKP,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAKJ,oBAAoB,GAAG,GAAG,GAAG,SAAS;AACpC,QAAM,WAAW;AAAA,IACf,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,IACjB,OAAO;AAAA;AAET,YAAU,OAAO,OAAO,UAAU;AAElC,QAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AACxE,QAAM,WAAW;AACjB,QAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AAExE,QAAM,UAAU,WAAW,GAAG,GAAG,GAAG;AACpC,MAAI,WAAW;AACf,MAAI,SAAS;AAEb,UAAQ,QAAQ,YAAU;AACxB,QAAI,OAAO,IAAI;AACb,eAAS,OAAO,OAAO,OAAO;AAAA,WACzB;AACL,YAAM,IAAI,SAAS,OAAO,SAAS,GAAG,OAAO,SAAS;AACtD,eAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,YAAI,QAAQ,EAAE;AACd,YAAI,MAAM,QAAQ;AAChB,mBAAS,OAAO,OAAO,MAAM;AAAA,eACxB;AACL,qBAAW;AACX,mBAAS,OAAO,OACd,CAAC,WACD,MAAM,SACN,CAAC,WACD,MAAM,SACN,CAAC;AAAA;AAAA;AAAA;AAAA;AAOX,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;AAOJ,eAAe,QAAQ,QAAO;AAC5B,MAAI,SAAS;AACb,MAAI,aAAa;AAEjB,qBAAmB,cAAc;AAC/B,WAAO,aAAa,cAAc;AAChC,aAAO,KAAK,OAAO;AACnB;AAAA;AAAA;AAIJ,WAAS,aAAa,GAAG,aAAa,OAAM,QAAQ,cAAc;AAChE,QAAI,QAAQ,OAAM;AAClB,cAAU,MAAM,QAAQ;AACxB,aAAS,YAAY,GAAG,YAAY,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAC3E,aAAO,KAAK,MAAM,QAAQ,MAAM;AAAA;AAElC,kBAAc,MAAM,QAAQ;AAAA;AAG9B,YAAU,OAAO;AACjB,SAAO;AAAA;AAMT,oBAAoB,QAAO;AACzB,SAAO,OAAM,IAAI,WAAU;AAAA,IACzB,SAAS,EAAE,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,MAAM,QAAQ;AAAA,IAC/D,SAAS,EAAE,OAAO,MAAM,QAAQ;AAAA;AAAA;AAOpC,qBAAqB,QAAO;AAC1B,SAAO,OAAM,IAAI,WAAU;AAAA,IACzB,SAAS,MAAM;AAAA,IACf,SAAS,MAAM;AAAA;AAAA;",
  "names": []
}
var Diff3 = (() => {
  var __defProp = Object.defineProperty;
  var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
  var __export = (target, all) => {
    __markAsModule(target);
    for (var name in all)
      __defProp(target, name, { get: all[name], enumerable: true });
  };

  // index.mjs
  var node_diff3_exports = {};
  __export(node_diff3_exports, {
    LCS: () => LCS,
    diff3Merge: () => diff3Merge,
    diff3MergeRegions: () => diff3MergeRegions,
    diffComm: () => diffComm,
    diffIndices: () => diffIndices,
    diffPatch: () => diffPatch,
    invertPatch: () => invertPatch,
    merge: () => merge,
    mergeDiff3: () => mergeDiff3,
    mergeDigIn: () => mergeDigIn,
    patch: () => patch,
    stripPatch: () => stripPatch
  });
  function LCS(buffer1, buffer2) {
    let equivalenceClasses = {};
    for (let j = 0; j < buffer2.length; j++) {
      const item = buffer2[j];
      if (equivalenceClasses[item]) {
        equivalenceClasses[item].push(j);
      } else {
        equivalenceClasses[item] = [j];
      }
    }
    const NULLRESULT = { buffer1index: -1, buffer2index: -1, chain: null };
    let candidates = [NULLRESULT];
    for (let i = 0; i < buffer1.length; i++) {
      const item = buffer1[i];
      const buffer2indices = equivalenceClasses[item] || [];
      let r = 0;
      let c = candidates[0];
      for (let jx = 0; jx < buffer2indices.length; jx++) {
        const j = buffer2indices[jx];
        let s;
        for (s = r; s < candidates.length; s++) {
          if (candidates[s].buffer2index < j && (s === candidates.length - 1 || candidates[s + 1].buffer2index > j)) {
            break;
          }
        }
        if (s < candidates.length) {
          const newCandidate = { buffer1index: i, buffer2index: j, chain: candidates[s] };
          if (r === candidates.length) {
            candidates.push(c);
          } else {
            candidates[r] = c;
          }
          r = s + 1;
          c = newCandidate;
          if (r === candidates.length) {
            break;
          }
        }
      }
      candidates[r] = c;
    }
    return candidates[candidates.length - 1];
  }
  function diffComm(buffer1, buffer2) {
    const lcs = LCS(buffer1, buffer2);
    let result = [];
    let tail1 = buffer1.length;
    let tail2 = buffer2.length;
    let common = { common: [] };
    function processCommon() {
      if (common.common.length) {
        common.common.reverse();
        result.push(common);
        common = { common: [] };
      }
    }
    for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
      let different = { buffer1: [], buffer2: [] };
      while (--tail1 > candidate.buffer1index) {
        different.buffer1.push(buffer1[tail1]);
      }
      while (--tail2 > candidate.buffer2index) {
        different.buffer2.push(buffer2[tail2]);
      }
      if (different.buffer1.length || different.buffer2.length) {
        processCommon();
        different.buffer1.reverse();
        different.buffer2.reverse();
        result.push(different);
      }
      if (tail1 >= 0) {
        common.common.push(buffer1[tail1]);
      }
    }
    processCommon();
    result.reverse();
    return result;
  }
  function diffIndices(buffer1, buffer2) {
    const lcs = LCS(buffer1, buffer2);
    let result = [];
    let tail1 = buffer1.length;
    let tail2 = buffer2.length;
    for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
      const mismatchLength1 = tail1 - candidate.buffer1index - 1;
      const mismatchLength2 = tail2 - candidate.buffer2index - 1;
      tail1 = candidate.buffer1index;
      tail2 = candidate.buffer2index;
      if (mismatchLength1 || mismatchLength2) {
        result.push({
          buffer1: [tail1 + 1, mismatchLength1],
          buffer1Content: buffer1.slice(tail1 + 1, tail1 + 1 + mismatchLength1),
          buffer2: [tail2 + 1, mismatchLength2],
          buffer2Content: buffer2.slice(tail2 + 1, tail2 + 1 + mismatchLength2)
        });
      }
    }
    result.reverse();
    return result;
  }
  function diffPatch(buffer1, buffer2) {
    const lcs = LCS(buffer1, buffer2);
    let result = [];
    let tail1 = buffer1.length;
    let tail2 = buffer2.length;
    function chunkDescription(buffer, offset, length) {
      let chunk = [];
      for (let i = 0; i < length; i++) {
        chunk.push(buffer[offset + i]);
      }
      return {
        offset,
        length,
        chunk
      };
    }
    for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
      const mismatchLength1 = tail1 - candidate.buffer1index - 1;
      const mismatchLength2 = tail2 - candidate.buffer2index - 1;
      tail1 = candidate.buffer1index;
      tail2 = candidate.buffer2index;
      if (mismatchLength1 || mismatchLength2) {
        result.push({
          buffer1: chunkDescription(buffer1, candidate.buffer1index + 1, mismatchLength1),
          buffer2: chunkDescription(buffer2, candidate.buffer2index + 1, mismatchLength2)
        });
      }
    }
    result.reverse();
    return result;
  }
  function diff3MergeRegions(a, o, b) {
    let hunks = [];
    function addHunk(h, ab) {
      hunks.push({
        ab,
        oStart: h.buffer1[0],
        oLength: h.buffer1[1],
        abStart: h.buffer2[0],
        abLength: h.buffer2[1]
      });
    }
    diffIndices(o, a).forEach((item) => addHunk(item, "a"));
    diffIndices(o, b).forEach((item) => addHunk(item, "b"));
    hunks.sort((x, y) => x.oStart - y.oStart);
    let results = [];
    let currOffset = 0;
    function advanceTo(endOffset) {
      if (endOffset > currOffset) {
        results.push({
          stable: true,
          buffer: "o",
          bufferStart: currOffset,
          bufferLength: endOffset - currOffset,
          bufferContent: o.slice(currOffset, endOffset)
        });
        currOffset = endOffset;
      }
    }
    while (hunks.length) {
      let hunk = hunks.shift();
      let regionStart = hunk.oStart;
      let regionEnd = hunk.oStart + hunk.oLength;
      let regionHunks = [hunk];
      advanceTo(regionStart);
      while (hunks.length) {
        const nextHunk = hunks[0];
        const nextHunkStart = nextHunk.oStart;
        if (nextHunkStart > regionEnd)
          break;
        regionEnd = Math.max(regionEnd, nextHunkStart + nextHunk.oLength);
        regionHunks.push(hunks.shift());
      }
      if (regionHunks.length === 1) {
        if (hunk.abLength > 0) {
          const buffer = hunk.ab === "a" ? a : b;
          results.push({
            stable: true,
            buffer: hunk.ab,
            bufferStart: hunk.abStart,
            bufferLength: hunk.abLength,
            bufferContent: buffer.slice(hunk.abStart, hunk.abStart + hunk.abLength)
          });
        }
      } else {
        let bounds = {
          a: [a.length, -1, o.length, -1],
          b: [b.length, -1, o.length, -1]
        };
        while (regionHunks.length) {
          hunk = regionHunks.shift();
          const oStart = hunk.oStart;
          const oEnd = oStart + hunk.oLength;
          const abStart = hunk.abStart;
          const abEnd = abStart + hunk.abLength;
          let b2 = bounds[hunk.ab];
          b2[0] = Math.min(abStart, b2[0]);
          b2[1] = Math.max(abEnd, b2[1]);
          b2[2] = Math.min(oStart, b2[2]);
          b2[3] = Math.max(oEnd, b2[3]);
        }
        const aStart = bounds.a[0] + (regionStart - bounds.a[2]);
        const aEnd = bounds.a[1] + (regionEnd - bounds.a[3]);
        const bStart = bounds.b[0] + (regionStart - bounds.b[2]);
        const bEnd = bounds.b[1] + (regionEnd - bounds.b[3]);
        let result = {
          stable: false,
          aStart,
          aLength: aEnd - aStart,
          aContent: a.slice(aStart, aEnd),
          oStart: regionStart,
          oLength: regionEnd - regionStart,
          oContent: o.slice(regionStart, regionEnd),
          bStart,
          bLength: bEnd - bStart,
          bContent: b.slice(bStart, bEnd)
        };
        results.push(result);
      }
      currOffset = regionEnd;
    }
    advanceTo(o.length);
    return results;
  }
  function diff3Merge(a, o, b, options) {
    let defaults = {
      excludeFalseConflicts: true,
      stringSeparator: /\s+/
    };
    options = Object.assign(defaults, options);
    if (typeof a === "string")
      a = a.split(options.stringSeparator);
    if (typeof o === "string")
      o = o.split(options.stringSeparator);
    if (typeof b === "string")
      b = b.split(options.stringSeparator);
    let results = [];
    const regions = diff3MergeRegions(a, o, b);
    let okBuffer = [];
    function flushOk() {
      if (okBuffer.length) {
        results.push({ ok: okBuffer });
      }
      okBuffer = [];
    }
    function isFalseConflict(a2, b2) {
      if (a2.length !== b2.length)
        return false;
      for (let i = 0; i < a2.length; i++) {
        if (a2[i] !== b2[i])
          return false;
      }
      return true;
    }
    regions.forEach((region) => {
      if (region.stable) {
        okBuffer.push(...region.bufferContent);
      } else {
        if (options.excludeFalseConflicts && isFalseConflict(region.aContent, region.bContent)) {
          okBuffer.push(...region.aContent);
        } else {
          flushOk();
          results.push({
            conflict: {
              a: region.aContent,
              aIndex: region.aStart,
              o: region.oContent,
              oIndex: region.oStart,
              b: region.bContent,
              bIndex: region.bStart
            }
          });
        }
      }
    });
    flushOk();
    return results;
  }
  function mergeDiff3(a, o, b, options) {
    const defaults = {
      excludeFalseConflicts: true,
      stringSeparator: /\s+/,
      label: {}
    };
    options = Object.assign(defaults, options);
    const aSection = "<<<<<<<" + (options.label.a ? ` ${options.label.a}` : "");
    const oSection = "|||||||" + (options.label.o ? ` ${options.label.o}` : "");
    const xSection = "=======";
    const bSection = ">>>>>>>" + (options.label.b ? ` ${options.label.b}` : "");
    const regions = diff3Merge(a, o, b, options);
    let conflict = false;
    let result = [];
    regions.forEach((region) => {
      if (region.ok) {
        result = result.concat(region.ok);
      } else if (region.conflict) {
        conflict = true;
        result = result.concat([aSection], region.conflict.a, [oSection], region.conflict.o, [xSection], region.conflict.b, [bSection]);
      }
    });
    return {
      conflict,
      result
    };
  }
  function merge(a, o, b, options) {
    const defaults = {
      excludeFalseConflicts: true,
      stringSeparator: /\s+/,
      label: {}
    };
    options = Object.assign(defaults, options);
    const aSection = "<<<<<<<" + (options.label.a ? ` ${options.label.a}` : "");
    const xSection = "=======";
    const bSection = ">>>>>>>" + (options.label.b ? ` ${options.label.b}` : "");
    const regions = diff3Merge(a, o, b, options);
    let conflict = false;
    let result = [];
    regions.forEach((region) => {
      if (region.ok) {
        result = result.concat(region.ok);
      } else if (region.conflict) {
        conflict = true;
        result = result.concat([aSection], region.conflict.a, [xSection], region.conflict.b, [bSection]);
      }
    });
    return {
      conflict,
      result
    };
  }
  function mergeDigIn(a, o, b, options) {
    const defaults = {
      excludeFalseConflicts: true,
      stringSeparator: /\s+/,
      label: {}
    };
    options = Object.assign(defaults, options);
    const aSection = "<<<<<<<" + (options.label.a ? ` ${options.label.a}` : "");
    const xSection = "=======";
    const bSection = ">>>>>>>" + (options.label.b ? ` ${options.label.b}` : "");
    const regions = diff3Merge(a, o, b, options);
    let conflict = false;
    let result = [];
    regions.forEach((region) => {
      if (region.ok) {
        result = result.concat(region.ok);
      } else {
        const c = diffComm(region.conflict.a, region.conflict.b);
        for (let j = 0; j < c.length; j++) {
          let inner = c[j];
          if (inner.common) {
            result = result.concat(inner.common);
          } else {
            conflict = true;
            result = result.concat([aSection], inner.buffer1, [xSection], inner.buffer2, [bSection]);
          }
        }
      }
    });
    return {
      conflict,
      result
    };
  }
  function patch(buffer, patch2) {
    let result = [];
    let currOffset = 0;
    function advanceTo(targetOffset) {
      while (currOffset < targetOffset) {
        result.push(buffer[currOffset]);
        currOffset++;
      }
    }
    for (let chunkIndex = 0; chunkIndex < patch2.length; chunkIndex++) {
      let chunk = patch2[chunkIndex];
      advanceTo(chunk.buffer1.offset);
      for (let itemIndex = 0; itemIndex < chunk.buffer2.chunk.length; itemIndex++) {
        result.push(chunk.buffer2.chunk[itemIndex]);
      }
      currOffset += chunk.buffer1.length;
    }
    advanceTo(buffer.length);
    return result;
  }
  function stripPatch(patch2) {
    return patch2.map((chunk) => ({
      buffer1: { offset: chunk.buffer1.offset, length: chunk.buffer1.length },
      buffer2: { chunk: chunk.buffer2.chunk }
    }));
  }
  function invertPatch(patch2) {
    return patch2.map((chunk) => ({
      buffer1: chunk.buffer2,
      buffer2: chunk.buffer1
    }));
  }
  return node_diff3_exports;
})();
//# sourceMappingURL=index.iife.js.map
{
  "version": 3,
  "sources": ["../index.mjs"],
  "sourcesContent": ["export {\n  LCS,\n  diffComm,\n  diffIndices,\n  diffPatch,\n  diff3MergeRegions,\n  diff3Merge,\n  mergeDiff3,\n  merge,\n  mergeDigIn,\n  patch,\n  stripPatch,\n  invertPatch\n};\n\n\n// Text diff algorithm following Hunt and McIlroy 1976.\n// J. W. Hunt and M. D. McIlroy, An algorithm for differential buffer\n// comparison, Bell Telephone Laboratories CSTR #41 (1976)\n// http://www.cs.dartmouth.edu/~doug/\n// https://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n//\n// Expects two arrays, finds longest common sequence\nfunction LCS(buffer1, buffer2) {\n\n  let equivalenceClasses = {};\n  for (let j = 0; j < buffer2.length; j++) {\n    const item = buffer2[j];\n    if (equivalenceClasses[item]) {\n      equivalenceClasses[item].push(j);\n    } else {\n      equivalenceClasses[item] = [j];\n    }\n  }\n\n  const NULLRESULT = { buffer1index: -1, buffer2index: -1, chain: null };\n  let candidates = [NULLRESULT];\n\n  for (let i = 0; i < buffer1.length; i++) {\n    const item = buffer1[i];\n    const buffer2indices = equivalenceClasses[item] || [];\n    let r = 0;\n    let c = candidates[0];\n\n    for (let jx = 0; jx < buffer2indices.length; jx++) {\n      const j = buffer2indices[jx];\n\n      let s;\n      for (s = r; s < candidates.length; s++) {\n        if ((candidates[s].buffer2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].buffer2index > j))) {\n          break;\n        }\n      }\n\n      if (s < candidates.length) {\n        const newCandidate = { buffer1index: i, buffer2index: j, chain: candidates[s] };\n        if (r === candidates.length) {\n          candidates.push(c);\n        } else {\n          candidates[r] = c;\n        }\n        r = s + 1;\n        c = newCandidate;\n        if (r === candidates.length) {\n          break; // no point in examining further (j)s\n        }\n      }\n    }\n\n    candidates[r] = c;\n  }\n\n  // At this point, we know the LCS: it's in the reverse of the\n  // linked-list through .chain of candidates[candidates.length - 1].\n\n  return candidates[candidates.length - 1];\n}\n\n\n// We apply the LCS to build a 'comm'-style picture of the\n// differences between buffer1 and buffer2.\nfunction diffComm(buffer1, buffer2) {\n  const lcs = LCS(buffer1, buffer2);\n  let result = [];\n  let tail1 = buffer1.length;\n  let tail2 = buffer2.length;\n  let common = {common: []};\n\n  function processCommon() {\n    if (common.common.length) {\n      common.common.reverse();\n      result.push(common);\n      common = {common: []};\n    }\n  }\n\n  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n    let different = {buffer1: [], buffer2: []};\n\n    while (--tail1 > candidate.buffer1index) {\n      different.buffer1.push(buffer1[tail1]);\n    }\n\n    while (--tail2 > candidate.buffer2index) {\n      different.buffer2.push(buffer2[tail2]);\n    }\n\n    if (different.buffer1.length || different.buffer2.length) {\n      processCommon();\n      different.buffer1.reverse();\n      different.buffer2.reverse();\n      result.push(different);\n    }\n\n    if (tail1 >= 0) {\n      common.common.push(buffer1[tail1]);\n    }\n  }\n\n  processCommon();\n\n  result.reverse();\n  return result;\n}\n\n\n// We apply the LCS to give a simple representation of the\n// offsets and lengths of mismatched chunks in the input\n// buffers. This is used by diff3MergeRegions.\nfunction diffIndices(buffer1, buffer2) {\n  const lcs = LCS(buffer1, buffer2);\n  let result = [];\n  let tail1 = buffer1.length;\n  let tail2 = buffer2.length;\n\n  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n    const mismatchLength1 = tail1 - candidate.buffer1index - 1;\n    const mismatchLength2 = tail2 - candidate.buffer2index - 1;\n    tail1 = candidate.buffer1index;\n    tail2 = candidate.buffer2index;\n\n    if (mismatchLength1 || mismatchLength2) {\n      result.push({\n        buffer1: [tail1 + 1, mismatchLength1],\n        buffer1Content: buffer1.slice(tail1 + 1, tail1 + 1 + mismatchLength1),\n        buffer2: [tail2 + 1, mismatchLength2],\n        buffer2Content: buffer2.slice(tail2 + 1, tail2 + 1 + mismatchLength2)\n      });\n    }\n  }\n\n  result.reverse();\n  return result;\n}\n\n\n// We apply the LCS to build a JSON representation of a\n// diff(1)-style patch.\nfunction diffPatch(buffer1, buffer2) {\n  const lcs = LCS(buffer1, buffer2);\n  let result = [];\n  let tail1 = buffer1.length;\n  let tail2 = buffer2.length;\n\n  function chunkDescription(buffer, offset, length) {\n    let chunk = [];\n    for (let i = 0; i < length; i++) {\n      chunk.push(buffer[offset + i]);\n    }\n    return {\n      offset: offset,\n      length: length,\n      chunk: chunk\n    };\n  }\n\n  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n    const mismatchLength1 = tail1 - candidate.buffer1index - 1;\n    const mismatchLength2 = tail2 - candidate.buffer2index - 1;\n    tail1 = candidate.buffer1index;\n    tail2 = candidate.buffer2index;\n\n    if (mismatchLength1 || mismatchLength2) {\n      result.push({\n        buffer1: chunkDescription(buffer1, candidate.buffer1index + 1, mismatchLength1),\n        buffer2: chunkDescription(buffer2, candidate.buffer2index + 1, mismatchLength2)\n      });\n    }\n  }\n\n  result.reverse();\n  return result;\n}\n\n\n// Given three buffers, A, O, and B, where both A and B are\n// independently derived from O, returns a fairly complicated\n// internal representation of merge decisions it's taken. The\n// interested reader may wish to consult\n//\n// Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.\n// 'A Formal Investigation of ' In Arvind and Prasad,\n// editors, Foundations of Software Technology and Theoretical\n// Computer Science (FSTTCS), December 2007.\n//\n// (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)\n//\nfunction diff3MergeRegions(a, o, b) {\n\n  // \"hunks\" are array subsets where `a` or `b` are different from `o`\n  // https://www.gnu.org/software/diffutils/manual/html_node/diff3-Hunks.html\n  let hunks = [];\n  function addHunk(h, ab) {\n    hunks.push({\n      ab: ab,\n      oStart: h.buffer1[0],\n      oLength: h.buffer1[1],   // length of o to remove\n      abStart: h.buffer2[0],\n      abLength: h.buffer2[1]   // length of a/b to insert\n      // abContent: (ab === 'a' ? a : b).slice(h.buffer2[0], h.buffer2[0] + h.buffer2[1])\n    });\n  }\n\n  diffIndices(o, a).forEach(item => addHunk(item, 'a'));\n  diffIndices(o, b).forEach(item => addHunk(item, 'b'));\n  hunks.sort((x,y) => x.oStart - y.oStart);\n\n  let results = [];\n  let currOffset = 0;\n\n  function advanceTo(endOffset) {\n    if (endOffset > currOffset) {\n      results.push({\n        stable: true,\n        buffer: 'o',\n        bufferStart: currOffset,\n        bufferLength: endOffset - currOffset,\n        bufferContent: o.slice(currOffset, endOffset)\n      });\n      currOffset = endOffset;\n    }\n  }\n\n  while (hunks.length) {\n    let hunk = hunks.shift();\n    let regionStart = hunk.oStart;\n    let regionEnd = hunk.oStart + hunk.oLength;\n    let regionHunks = [hunk];\n    advanceTo(regionStart);\n\n    // Try to pull next overlapping hunk into this region\n    while (hunks.length) {\n      const nextHunk = hunks[0];\n      const nextHunkStart = nextHunk.oStart;\n      if (nextHunkStart > regionEnd) break;   // no overlap\n\n      regionEnd = Math.max(regionEnd, nextHunkStart + nextHunk.oLength);\n      regionHunks.push(hunks.shift());\n    }\n\n    if (regionHunks.length === 1) {\n      // Only one hunk touches this region, meaning that there is no conflict here.\n      // Either `a` or `b` is inserting into a region of `o` unchanged by the other.\n      if (hunk.abLength > 0) {\n        const buffer = (hunk.ab === 'a' ? a : b);\n        results.push({\n          stable: true,\n          buffer: hunk.ab,\n          bufferStart: hunk.abStart,\n          bufferLength: hunk.abLength,\n          bufferContent: buffer.slice(hunk.abStart, hunk.abStart + hunk.abLength)\n        });\n      }\n    } else {\n      // A true a/b conflict. Determine the bounds involved from `a`, `o`, and `b`.\n      // Effectively merge all the `a` hunks into one giant hunk, then do the\n      // same for the `b` hunks; then, correct for skew in the regions of `o`\n      // that each side changed, and report appropriate spans for the three sides.\n      let bounds = {\n        a: [a.length, -1, o.length, -1],\n        b: [b.length, -1, o.length, -1]\n      };\n      while (regionHunks.length) {\n        hunk = regionHunks.shift();\n        const oStart = hunk.oStart;\n        const oEnd = oStart + hunk.oLength;\n        const abStart = hunk.abStart;\n        const abEnd = abStart + hunk.abLength;\n        let b = bounds[hunk.ab];\n        b[0] = Math.min(abStart, b[0]);\n        b[1] = Math.max(abEnd, b[1]);\n        b[2] = Math.min(oStart, b[2]);\n        b[3] = Math.max(oEnd, b[3]);\n      }\n\n      const aStart = bounds.a[0] + (regionStart - bounds.a[2]);\n      const aEnd = bounds.a[1] + (regionEnd - bounds.a[3]);\n      const bStart = bounds.b[0] + (regionStart - bounds.b[2]);\n      const bEnd = bounds.b[1] + (regionEnd - bounds.b[3]);\n\n      let result = {\n        stable: false,\n        aStart: aStart,\n        aLength: aEnd - aStart,\n        aContent: a.slice(aStart, aEnd),\n        oStart: regionStart,\n        oLength: regionEnd - regionStart,\n        oContent: o.slice(regionStart, regionEnd),\n        bStart: bStart,\n        bLength: bEnd - bStart,\n        bContent: b.slice(bStart, bEnd)\n      };\n      results.push(result);\n    }\n    currOffset = regionEnd;\n  }\n\n  advanceTo(o.length);\n\n  return results;\n}\n\n\n// Applies the output of diff3MergeRegions to actually\n// construct the merged buffer; the returned result alternates\n// between 'ok' and 'conflict' blocks.\n// A \"false conflict\" is where `a` and `b` both change the same from `o`\nfunction diff3Merge(a, o, b, options) {\n  let defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/\n  };\n  options = Object.assign(defaults, options);\n\n  if (typeof a === 'string') a = a.split(options.stringSeparator);\n  if (typeof o === 'string') o = o.split(options.stringSeparator);\n  if (typeof b === 'string') b = b.split(options.stringSeparator);\n\n  let results = [];\n  const regions = diff3MergeRegions(a, o, b);\n\n  let okBuffer = [];\n  function flushOk() {\n    if (okBuffer.length) {\n      results.push({ ok: okBuffer });\n    }\n    okBuffer = [];\n  }\n\n  function isFalseConflict(a, b) {\n    if (a.length !== b.length) return false;\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n\n  regions.forEach(region =>  {\n    if (region.stable) {\n      okBuffer.push(...region.bufferContent);\n    } else {\n      if (options.excludeFalseConflicts && isFalseConflict(region.aContent, region.bContent)) {\n        okBuffer.push(...region.aContent);\n      } else {\n        flushOk();\n        results.push({\n          conflict: {\n            a: region.aContent,\n            aIndex: region.aStart,\n            o: region.oContent,\n            oIndex: region.oStart,\n            b: region.bContent,\n            bIndex: region.bStart\n          }\n        });\n      }\n    }\n  });\n\n  flushOk();\n  return results;\n}\n\n\nfunction mergeDiff3(a, o, b, options) {\n  const defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/,\n    label: {}\n  };\n  options = Object.assign(defaults, options);\n\n  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');\n  const oSection = '|||||||' + (options.label.o ? ` ${options.label.o}` : '');\n  const xSection = '=======';\n  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');\n\n  const regions = diff3Merge(a, o, b, options);\n  let conflict = false;\n  let result = [];\n\n  regions.forEach(region => {\n    if (region.ok) {\n      result = result.concat(region.ok);\n    } else if (region.conflict) {\n      conflict = true;\n      result = result.concat(\n        [aSection],\n        region.conflict.a,\n        [oSection],\n        region.conflict.o,\n        [xSection],\n        region.conflict.b,\n        [bSection]\n      );\n    }\n  });\n\n  return {\n    conflict: conflict,\n    result: result\n  };\n}\n\n\nfunction merge(a, o, b, options) {\n  const defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/,\n    label: {}\n  };\n  options = Object.assign(defaults, options);\n\n  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');\n  const xSection = '=======';\n  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');\n\n  const regions = diff3Merge(a, o, b, options);\n  let conflict = false;\n  let result = [];\n\n  regions.forEach(region => {\n    if (region.ok) {\n      result = result.concat(region.ok);\n    } else if (region.conflict) {\n      conflict = true;\n      result = result.concat(\n        [aSection],\n        region.conflict.a,\n        [xSection],\n        region.conflict.b,\n        [bSection]\n      );\n    }\n  });\n\n  return {\n    conflict: conflict,\n    result: result\n  };\n}\n\n\nfunction mergeDigIn(a, o, b, options) {\n  const defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/,\n    label: {}\n  };\n  options = Object.assign(defaults, options);\n\n  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');\n  const xSection = '=======';\n  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');\n\n  const regions = diff3Merge(a, o, b, options);\n  let conflict = false;\n  let result = [];\n\n  regions.forEach(region => {\n    if (region.ok) {\n      result = result.concat(region.ok);\n    } else {\n      const c = diffComm(region.conflict.a, region.conflict.b);\n      for (let j = 0; j < c.length; j++) {\n        let inner = c[j];\n        if (inner.common) {\n          result = result.concat(inner.common);\n        } else {\n          conflict = true;\n          result = result.concat(\n            [aSection],\n            inner.buffer1,\n            [xSection],\n            inner.buffer2,\n            [bSection]\n          );\n        }\n      }\n    }\n  });\n\n  return {\n    conflict: conflict,\n    result: result\n  };\n}\n\n\n// Applies a patch to a buffer.\n// Given buffer1 and buffer2, `patch(buffer1, diffPatch(buffer1, buffer2))` should give buffer2.\nfunction patch(buffer, patch) {\n  let result = [];\n  let currOffset = 0;\n\n  function advanceTo(targetOffset) {\n    while (currOffset < targetOffset) {\n      result.push(buffer[currOffset]);\n      currOffset++;\n    }\n  }\n\n  for (let chunkIndex = 0; chunkIndex < patch.length; chunkIndex++) {\n    let chunk = patch[chunkIndex];\n    advanceTo(chunk.buffer1.offset);\n    for (let itemIndex = 0; itemIndex < chunk.buffer2.chunk.length; itemIndex++) {\n      result.push(chunk.buffer2.chunk[itemIndex]);\n    }\n    currOffset += chunk.buffer1.length;\n  }\n\n  advanceTo(buffer.length);\n  return result;\n}\n\n\n// Takes the output of diffPatch(), and removes extra information from it.\n// It can still be used by patch(), below, but can no longer be inverted.\nfunction stripPatch(patch) {\n  return patch.map(chunk => ({\n    buffer1: { offset: chunk.buffer1.offset, length: chunk.buffer1.length },\n    buffer2: { chunk: chunk.buffer2.chunk }\n  }));\n}\n\n\n// Takes the output of diffPatch(), and inverts the sense of it, so that it\n// can be applied to buffer2 to give buffer1 rather than the other way around.\nfunction invertPatch(patch) {\n  return patch.map(chunk => ({\n    buffer1: chunk.buffer2,\n    buffer2: chunk.buffer1\n  }));\n}\n"],
  "mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBA,eAAa,SAAS,SAAS;AAE7B,QAAI,qBAAqB;AACzB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,OAAO,QAAQ;AACrB,UAAI,mBAAmB,OAAO;AAC5B,2BAAmB,MAAM,KAAK;AAAA,aACzB;AACL,2BAAmB,QAAQ,CAAC;AAAA;AAAA;AAIhC,UAAM,aAAa,EAAE,cAAc,IAAI,cAAc,IAAI,OAAO;AAChE,QAAI,aAAa,CAAC;AAElB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,OAAO,QAAQ;AACrB,YAAM,iBAAiB,mBAAmB,SAAS;AACnD,UAAI,IAAI;AACR,UAAI,IAAI,WAAW;AAEnB,eAAS,KAAK,GAAG,KAAK,eAAe,QAAQ,MAAM;AACjD,cAAM,IAAI,eAAe;AAEzB,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACtC,cAAK,WAAW,GAAG,eAAe,KAAQ,OAAM,WAAW,SAAS,KAAO,WAAW,IAAI,GAAG,eAAe,IAAK;AAC/G;AAAA;AAAA;AAIJ,YAAI,IAAI,WAAW,QAAQ;AACzB,gBAAM,eAAe,EAAE,cAAc,GAAG,cAAc,GAAG,OAAO,WAAW;AAC3E,cAAI,MAAM,WAAW,QAAQ;AAC3B,uBAAW,KAAK;AAAA,iBACX;AACL,uBAAW,KAAK;AAAA;AAElB,cAAI,IAAI;AACR,cAAI;AACJ,cAAI,MAAM,WAAW,QAAQ;AAC3B;AAAA;AAAA;AAAA;AAKN,iBAAW,KAAK;AAAA;AAMlB,WAAO,WAAW,WAAW,SAAS;AAAA;AAMxC,oBAAkB,SAAS,SAAS;AAClC,UAAM,MAAM,IAAI,SAAS;AACzB,QAAI,SAAS;AACb,QAAI,QAAQ,QAAQ;AACpB,QAAI,QAAQ,QAAQ;AACpB,QAAI,SAAS,EAAC,QAAQ;AAEtB,6BAAyB;AACvB,UAAI,OAAO,OAAO,QAAQ;AACxB,eAAO,OAAO;AACd,eAAO,KAAK;AACZ,iBAAS,EAAC,QAAQ;AAAA;AAAA;AAItB,aAAS,YAAY,KAAK,cAAc,MAAM,YAAY,UAAU,OAAO;AACzE,UAAI,YAAY,EAAC,SAAS,IAAI,SAAS;AAEvC,aAAO,EAAE,QAAQ,UAAU,cAAc;AACvC,kBAAU,QAAQ,KAAK,QAAQ;AAAA;AAGjC,aAAO,EAAE,QAAQ,UAAU,cAAc;AACvC,kBAAU,QAAQ,KAAK,QAAQ;AAAA;AAGjC,UAAI,UAAU,QAAQ,UAAU,UAAU,QAAQ,QAAQ;AACxD;AACA,kBAAU,QAAQ;AAClB,kBAAU,QAAQ;AAClB,eAAO,KAAK;AAAA;AAGd,UAAI,SAAS,GAAG;AACd,eAAO,OAAO,KAAK,QAAQ;AAAA;AAAA;AAI/B;AAEA,WAAO;AACP,WAAO;AAAA;AAOT,uBAAqB,SAAS,SAAS;AACrC,UAAM,MAAM,IAAI,SAAS;AACzB,QAAI,SAAS;AACb,QAAI,QAAQ,QAAQ;AACpB,QAAI,QAAQ,QAAQ;AAEpB,aAAS,YAAY,KAAK,cAAc,MAAM,YAAY,UAAU,OAAO;AACzE,YAAM,kBAAkB,QAAQ,UAAU,eAAe;AACzD,YAAM,kBAAkB,QAAQ,UAAU,eAAe;AACzD,cAAQ,UAAU;AAClB,cAAQ,UAAU;AAElB,UAAI,mBAAmB,iBAAiB;AACtC,eAAO,KAAK;AAAA,UACV,SAAS,CAAC,QAAQ,GAAG;AAAA,UACrB,gBAAgB,QAAQ,MAAM,QAAQ,GAAG,QAAQ,IAAI;AAAA,UACrD,SAAS,CAAC,QAAQ,GAAG;AAAA,UACrB,gBAAgB,QAAQ,MAAM,QAAQ,GAAG,QAAQ,IAAI;AAAA;AAAA;AAAA;AAK3D,WAAO;AACP,WAAO;AAAA;AAMT,qBAAmB,SAAS,SAAS;AACnC,UAAM,MAAM,IAAI,SAAS;AACzB,QAAI,SAAS;AACb,QAAI,QAAQ,QAAQ;AACpB,QAAI,QAAQ,QAAQ;AAEpB,8BAA0B,QAAQ,QAAQ,QAAQ;AAChD,UAAI,QAAQ;AACZ,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,cAAM,KAAK,OAAO,SAAS;AAAA;AAE7B,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA;AAAA;AAIJ,aAAS,YAAY,KAAK,cAAc,MAAM,YAAY,UAAU,OAAO;AACzE,YAAM,kBAAkB,QAAQ,UAAU,eAAe;AACzD,YAAM,kBAAkB,QAAQ,UAAU,eAAe;AACzD,cAAQ,UAAU;AAClB,cAAQ,UAAU;AAElB,UAAI,mBAAmB,iBAAiB;AACtC,eAAO,KAAK;AAAA,UACV,SAAS,iBAAiB,SAAS,UAAU,eAAe,GAAG;AAAA,UAC/D,SAAS,iBAAiB,SAAS,UAAU,eAAe,GAAG;AAAA;AAAA;AAAA;AAKrE,WAAO;AACP,WAAO;AAAA;AAgBT,6BAA2B,GAAG,GAAG,GAAG;AAIlC,QAAI,QAAQ;AACZ,qBAAiB,GAAG,IAAI;AACtB,YAAM,KAAK;AAAA,QACT;AAAA,QACA,QAAQ,EAAE,QAAQ;AAAA,QAClB,SAAS,EAAE,QAAQ;AAAA,QACnB,SAAS,EAAE,QAAQ;AAAA,QACnB,UAAU,EAAE,QAAQ;AAAA;AAAA;AAKxB,gBAAY,GAAG,GAAG,QAAQ,UAAQ,QAAQ,MAAM;AAChD,gBAAY,GAAG,GAAG,QAAQ,UAAQ,QAAQ,MAAM;AAChD,UAAM,KAAK,CAAC,GAAE,MAAM,EAAE,SAAS,EAAE;AAEjC,QAAI,UAAU;AACd,QAAI,aAAa;AAEjB,uBAAmB,WAAW;AAC5B,UAAI,YAAY,YAAY;AAC1B,gBAAQ,KAAK;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,cAAc,YAAY;AAAA,UAC1B,eAAe,EAAE,MAAM,YAAY;AAAA;AAErC,qBAAa;AAAA;AAAA;AAIjB,WAAO,MAAM,QAAQ;AACnB,UAAI,OAAO,MAAM;AACjB,UAAI,cAAc,KAAK;AACvB,UAAI,YAAY,KAAK,SAAS,KAAK;AACnC,UAAI,cAAc,CAAC;AACnB,gBAAU;AAGV,aAAO,MAAM,QAAQ;AACnB,cAAM,WAAW,MAAM;AACvB,cAAM,gBAAgB,SAAS;AAC/B,YAAI,gBAAgB;AAAW;AAE/B,oBAAY,KAAK,IAAI,WAAW,gBAAgB,SAAS;AACzD,oBAAY,KAAK,MAAM;AAAA;AAGzB,UAAI,YAAY,WAAW,GAAG;AAG5B,YAAI,KAAK,WAAW,GAAG;AACrB,gBAAM,SAAU,KAAK,OAAO,MAAM,IAAI;AACtC,kBAAQ,KAAK;AAAA,YACX,QAAQ;AAAA,YACR,QAAQ,KAAK;AAAA,YACb,aAAa,KAAK;AAAA,YAClB,cAAc,KAAK;AAAA,YACnB,eAAe,OAAO,MAAM,KAAK,SAAS,KAAK,UAAU,KAAK;AAAA;AAAA;AAAA,aAG7D;AAKL,YAAI,SAAS;AAAA,UACX,GAAG,CAAC,EAAE,QAAQ,IAAI,EAAE,QAAQ;AAAA,UAC5B,GAAG,CAAC,EAAE,QAAQ,IAAI,EAAE,QAAQ;AAAA;AAE9B,eAAO,YAAY,QAAQ;AACzB,iBAAO,YAAY;AACnB,gBAAM,SAAS,KAAK;AACpB,gBAAM,OAAO,SAAS,KAAK;AAC3B,gBAAM,UAAU,KAAK;AACrB,gBAAM,QAAQ,UAAU,KAAK;AAC7B,cAAI,KAAI,OAAO,KAAK;AACpB,aAAE,KAAK,KAAK,IAAI,SAAS,GAAE;AAC3B,aAAE,KAAK,KAAK,IAAI,OAAO,GAAE;AACzB,aAAE,KAAK,KAAK,IAAI,QAAQ,GAAE;AAC1B,aAAE,KAAK,KAAK,IAAI,MAAM,GAAE;AAAA;AAG1B,cAAM,SAAS,OAAO,EAAE,KAAM,eAAc,OAAO,EAAE;AACrD,cAAM,OAAO,OAAO,EAAE,KAAM,aAAY,OAAO,EAAE;AACjD,cAAM,SAAS,OAAO,EAAE,KAAM,eAAc,OAAO,EAAE;AACrD,cAAM,OAAO,OAAO,EAAE,KAAM,aAAY,OAAO,EAAE;AAEjD,YAAI,SAAS;AAAA,UACX,QAAQ;AAAA,UACR;AAAA,UACA,SAAS,OAAO;AAAA,UAChB,UAAU,EAAE,MAAM,QAAQ;AAAA,UAC1B,QAAQ;AAAA,UACR,SAAS,YAAY;AAAA,UACrB,UAAU,EAAE,MAAM,aAAa;AAAA,UAC/B;AAAA,UACA,SAAS,OAAO;AAAA,UAChB,UAAU,EAAE,MAAM,QAAQ;AAAA;AAE5B,gBAAQ,KAAK;AAAA;AAEf,mBAAa;AAAA;AAGf,cAAU,EAAE;AAEZ,WAAO;AAAA;AAQT,sBAAoB,GAAG,GAAG,GAAG,SAAS;AACpC,QAAI,WAAW;AAAA,MACb,uBAAuB;AAAA,MACvB,iBAAiB;AAAA;AAEnB,cAAU,OAAO,OAAO,UAAU;AAElC,QAAI,OAAO,MAAM;AAAU,UAAI,EAAE,MAAM,QAAQ;AAC/C,QAAI,OAAO,MAAM;AAAU,UAAI,EAAE,MAAM,QAAQ;AAC/C,QAAI,OAAO,MAAM;AAAU,UAAI,EAAE,MAAM,QAAQ;AAE/C,QAAI,UAAU;AACd,UAAM,UAAU,kBAAkB,GAAG,GAAG;AAExC,QAAI,WAAW;AACf,uBAAmB;AACjB,UAAI,SAAS,QAAQ;AACnB,gBAAQ,KAAK,EAAE,IAAI;AAAA;AAErB,iBAAW;AAAA;AAGb,6BAAyB,IAAG,IAAG;AAC7B,UAAI,GAAE,WAAW,GAAE;AAAQ,eAAO;AAClC,eAAS,IAAI,GAAG,IAAI,GAAE,QAAQ,KAAK;AACjC,YAAI,GAAE,OAAO,GAAE;AAAI,iBAAO;AAAA;AAE5B,aAAO;AAAA;AAGT,YAAQ,QAAQ,YAAW;AACzB,UAAI,OAAO,QAAQ;AACjB,iBAAS,KAAK,GAAG,OAAO;AAAA,aACnB;AACL,YAAI,QAAQ,yBAAyB,gBAAgB,OAAO,UAAU,OAAO,WAAW;AACtF,mBAAS,KAAK,GAAG,OAAO;AAAA,eACnB;AACL;AACA,kBAAQ,KAAK;AAAA,YACX,UAAU;AAAA,cACR,GAAG,OAAO;AAAA,cACV,QAAQ,OAAO;AAAA,cACf,GAAG,OAAO;AAAA,cACV,QAAQ,OAAO;AAAA,cACf,GAAG,OAAO;AAAA,cACV,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzB;AACA,WAAO;AAAA;AAIT,sBAAoB,GAAG,GAAG,GAAG,SAAS;AACpC,UAAM,WAAW;AAAA,MACf,uBAAuB;AAAA,MACvB,iBAAiB;AAAA,MACjB,OAAO;AAAA;AAET,cAAU,OAAO,OAAO,UAAU;AAElC,UAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AACxE,UAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AACxE,UAAM,WAAW;AACjB,UAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AAExE,UAAM,UAAU,WAAW,GAAG,GAAG,GAAG;AACpC,QAAI,WAAW;AACf,QAAI,SAAS;AAEb,YAAQ,QAAQ,YAAU;AACxB,UAAI,OAAO,IAAI;AACb,iBAAS,OAAO,OAAO,OAAO;AAAA,iBACrB,OAAO,UAAU;AAC1B,mBAAW;AACX,iBAAS,OAAO,OACd,CAAC,WACD,OAAO,SAAS,GAChB,CAAC,WACD,OAAO,SAAS,GAChB,CAAC,WACD,OAAO,SAAS,GAChB,CAAC;AAAA;AAAA;AAKP,WAAO;AAAA,MACL;AAAA,MACA;AAAA;AAAA;AAKJ,iBAAe,GAAG,GAAG,GAAG,SAAS;AAC/B,UAAM,WAAW;AAAA,MACf,uBAAuB;AAAA,MACvB,iBAAiB;AAAA,MACjB,OAAO;AAAA;AAET,cAAU,OAAO,OAAO,UAAU;AAElC,UAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AACxE,UAAM,WAAW;AACjB,UAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AAExE,UAAM,UAAU,WAAW,GAAG,GAAG,GAAG;AACpC,QAAI,WAAW;AACf,QAAI,SAAS;AAEb,YAAQ,QAAQ,YAAU;AACxB,UAAI,OAAO,IAAI;AACb,iBAAS,OAAO,OAAO,OAAO;AAAA,iBACrB,OAAO,UAAU;AAC1B,mBAAW;AACX,iBAAS,OAAO,OACd,CAAC,WACD,OAAO,SAAS,GAChB,CAAC,WACD,OAAO,SAAS,GAChB,CAAC;AAAA;AAAA;AAKP,WAAO;AAAA,MACL;AAAA,MACA;AAAA;AAAA;AAKJ,sBAAoB,GAAG,GAAG,GAAG,SAAS;AACpC,UAAM,WAAW;AAAA,MACf,uBAAuB;AAAA,MACvB,iBAAiB;AAAA,MACjB,OAAO;AAAA;AAET,cAAU,OAAO,OAAO,UAAU;AAElC,UAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AACxE,UAAM,WAAW;AACjB,UAAM,WAAW,YAAa,SAAQ,MAAM,IAAI,IAAI,QAAQ,MAAM,MAAM;AAExE,UAAM,UAAU,WAAW,GAAG,GAAG,GAAG;AACpC,QAAI,WAAW;AACf,QAAI,SAAS;AAEb,YAAQ,QAAQ,YAAU;AACxB,UAAI,OAAO,IAAI;AACb,iBAAS,OAAO,OAAO,OAAO;AAAA,aACzB;AACL,cAAM,IAAI,SAAS,OAAO,SAAS,GAAG,OAAO,SAAS;AACtD,iBAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,cAAI,QAAQ,EAAE;AACd,cAAI,MAAM,QAAQ;AAChB,qBAAS,OAAO,OAAO,MAAM;AAAA,iBACxB;AACL,uBAAW;AACX,qBAAS,OAAO,OACd,CAAC,WACD,MAAM,SACN,CAAC,WACD,MAAM,SACN,CAAC;AAAA;AAAA;AAAA;AAAA;AAOX,WAAO;AAAA,MACL;AAAA,MACA;AAAA;AAAA;AAOJ,iBAAe,QAAQ,QAAO;AAC5B,QAAI,SAAS;AACb,QAAI,aAAa;AAEjB,uBAAmB,cAAc;AAC/B,aAAO,aAAa,cAAc;AAChC,eAAO,KAAK,OAAO;AACnB;AAAA;AAAA;AAIJ,aAAS,aAAa,GAAG,aAAa,OAAM,QAAQ,cAAc;AAChE,UAAI,QAAQ,OAAM;AAClB,gBAAU,MAAM,QAAQ;AACxB,eAAS,YAAY,GAAG,YAAY,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAC3E,eAAO,KAAK,MAAM,QAAQ,MAAM;AAAA;AAElC,oBAAc,MAAM,QAAQ;AAAA;AAG9B,cAAU,OAAO;AACjB,WAAO;AAAA;AAMT,sBAAoB,QAAO;AACzB,WAAO,OAAM,IAAI,WAAU;AAAA,MACzB,SAAS,EAAE,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,MAAM,QAAQ;AAAA,MAC/D,SAAS,EAAE,OAAO,MAAM,QAAQ;AAAA;AAAA;AAOpC,uBAAqB,QAAO;AAC1B,WAAO,OAAM,IAAI,WAAU;AAAA,MACzB,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA;AAAA;",
  "names": []
}
export {
  LCS,
  diffComm,
  diffIndices,
  diffPatch,
  diff3MergeRegions,
  diff3Merge,
  mergeDiff3,
  merge,
  mergeDigIn,
  patch,
  stripPatch,
  invertPatch
};


// Text diff algorithm following Hunt and McIlroy 1976.
// J. W. Hunt and M. D. McIlroy, An algorithm for differential buffer
// comparison, Bell Telephone Laboratories CSTR #41 (1976)
// http://www.cs.dartmouth.edu/~doug/
// https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
//
// Expects two arrays, finds longest common sequence
function LCS(buffer1, buffer2) {

  let equivalenceClasses = {};
  for (let j = 0; j < buffer2.length; j++) {
    const item = buffer2[j];
    if (equivalenceClasses[item]) {
      equivalenceClasses[item].push(j);
    } else {
      equivalenceClasses[item] = [j];
    }
  }

  const NULLRESULT = { buffer1index: -1, buffer2index: -1, chain: null };
  let candidates = [NULLRESULT];

  for (let i = 0; i < buffer1.length; i++) {
    const item = buffer1[i];
    const buffer2indices = equivalenceClasses[item] || [];
    let r = 0;
    let c = candidates[0];

    for (let jx = 0; jx < buffer2indices.length; jx++) {
      const j = buffer2indices[jx];

      let s;
      for (s = r; s < candidates.length; s++) {
        if ((candidates[s].buffer2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].buffer2index > j))) {
          break;
        }
      }

      if (s < candidates.length) {
        const newCandidate = { buffer1index: i, buffer2index: j, chain: candidates[s] };
        if (r === candidates.length) {
          candidates.push(c);
        } else {
          candidates[r] = c;
        }
        r = s + 1;
        c = newCandidate;
        if (r === candidates.length) {
          break; // no point in examining further (j)s
        }
      }
    }

    candidates[r] = c;
  }

  // At this point, we know the LCS: it's in the reverse of the
  // linked-list through .chain of candidates[candidates.length - 1].

  return candidates[candidates.length - 1];
}


// We apply the LCS to build a 'comm'-style picture of the
// differences between buffer1 and buffer2.
function diffComm(buffer1, buffer2) {
  const lcs = LCS(buffer1, buffer2);
  let result = [];
  let tail1 = buffer1.length;
  let tail2 = buffer2.length;
  let common = {common: []};

  function processCommon() {
    if (common.common.length) {
      common.common.reverse();
      result.push(common);
      common = {common: []};
    }
  }

  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
    let different = {buffer1: [], buffer2: []};

    while (--tail1 > candidate.buffer1index) {
      different.buffer1.push(buffer1[tail1]);
    }

    while (--tail2 > candidate.buffer2index) {
      different.buffer2.push(buffer2[tail2]);
    }

    if (different.buffer1.length || different.buffer2.length) {
      processCommon();
      different.buffer1.reverse();
      different.buffer2.reverse();
      result.push(different);
    }

    if (tail1 >= 0) {
      common.common.push(buffer1[tail1]);
    }
  }

  processCommon();

  result.reverse();
  return result;
}


// We apply the LCS to give a simple representation of the
// offsets and lengths of mismatched chunks in the input
// buffers. This is used by diff3MergeRegions.
function diffIndices(buffer1, buffer2) {
  const lcs = LCS(buffer1, buffer2);
  let result = [];
  let tail1 = buffer1.length;
  let tail2 = buffer2.length;

  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
    const mismatchLength1 = tail1 - candidate.buffer1index - 1;
    const mismatchLength2 = tail2 - candidate.buffer2index - 1;
    tail1 = candidate.buffer1index;
    tail2 = candidate.buffer2index;

    if (mismatchLength1 || mismatchLength2) {
      result.push({
        buffer1: [tail1 + 1, mismatchLength1],
        buffer1Content: buffer1.slice(tail1 + 1, tail1 + 1 + mismatchLength1),
        buffer2: [tail2 + 1, mismatchLength2],
        buffer2Content: buffer2.slice(tail2 + 1, tail2 + 1 + mismatchLength2)
      });
    }
  }

  result.reverse();
  return result;
}


// We apply the LCS to build a JSON representation of a
// diff(1)-style patch.
function diffPatch(buffer1, buffer2) {
  const lcs = LCS(buffer1, buffer2);
  let result = [];
  let tail1 = buffer1.length;
  let tail2 = buffer2.length;

  function chunkDescription(buffer, offset, length) {
    let chunk = [];
    for (let i = 0; i < length; i++) {
      chunk.push(buffer[offset + i]);
    }
    return {
      offset: offset,
      length: length,
      chunk: chunk
    };
  }

  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {
    const mismatchLength1 = tail1 - candidate.buffer1index - 1;
    const mismatchLength2 = tail2 - candidate.buffer2index - 1;
    tail1 = candidate.buffer1index;
    tail2 = candidate.buffer2index;

    if (mismatchLength1 || mismatchLength2) {
      result.push({
        buffer1: chunkDescription(buffer1, candidate.buffer1index + 1, mismatchLength1),
        buffer2: chunkDescription(buffer2, candidate.buffer2index + 1, mismatchLength2)
      });
    }
  }

  result.reverse();
  return result;
}


// Given three buffers, A, O, and B, where both A and B are
// independently derived from O, returns a fairly complicated
// internal representation of merge decisions it's taken. The
// interested reader may wish to consult
//
// Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.
// 'A Formal Investigation of ' In Arvind and Prasad,
// editors, Foundations of Software Technology and Theoretical
// Computer Science (FSTTCS), December 2007.
//
// (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)
//
function diff3MergeRegions(a, o, b) {

  // "hunks" are array subsets where `a` or `b` are different from `o`
  // https://www.gnu.org/software/diffutils/manual/html_node/diff3-Hunks.html
  let hunks = [];
  function addHunk(h, ab) {
    hunks.push({
      ab: ab,
      oStart: h.buffer1[0],
      oLength: h.buffer1[1],   // length of o to remove
      abStart: h.buffer2[0],
      abLength: h.buffer2[1]   // length of a/b to insert
      // abContent: (ab === 'a' ? a : b).slice(h.buffer2[0], h.buffer2[0] + h.buffer2[1])
    });
  }

  diffIndices(o, a).forEach(item => addHunk(item, 'a'));
  diffIndices(o, b).forEach(item => addHunk(item, 'b'));
  hunks.sort((x,y) => x.oStart - y.oStart);

  let results = [];
  let currOffset = 0;

  function advanceTo(endOffset) {
    if (endOffset > currOffset) {
      results.push({
        stable: true,
        buffer: 'o',
        bufferStart: currOffset,
        bufferLength: endOffset - currOffset,
        bufferContent: o.slice(currOffset, endOffset)
      });
      currOffset = endOffset;
    }
  }

  while (hunks.length) {
    let hunk = hunks.shift();
    let regionStart = hunk.oStart;
    let regionEnd = hunk.oStart + hunk.oLength;
    let regionHunks = [hunk];
    advanceTo(regionStart);

    // Try to pull next overlapping hunk into this region
    while (hunks.length) {
      const nextHunk = hunks[0];
      const nextHunkStart = nextHunk.oStart;
      if (nextHunkStart > regionEnd) break;   // no overlap

      regionEnd = Math.max(regionEnd, nextHunkStart + nextHunk.oLength);
      regionHunks.push(hunks.shift());
    }

    if (regionHunks.length === 1) {
      // Only one hunk touches this region, meaning that there is no conflict here.
      // Either `a` or `b` is inserting into a region of `o` unchanged by the other.
      if (hunk.abLength > 0) {
        const buffer = (hunk.ab === 'a' ? a : b);
        results.push({
          stable: true,
          buffer: hunk.ab,
          bufferStart: hunk.abStart,
          bufferLength: hunk.abLength,
          bufferContent: buffer.slice(hunk.abStart, hunk.abStart + hunk.abLength)
        });
      }
    } else {
      // A true a/b conflict. Determine the bounds involved from `a`, `o`, and `b`.
      // Effectively merge all the `a` hunks into one giant hunk, then do the
      // same for the `b` hunks; then, correct for skew in the regions of `o`
      // that each side changed, and report appropriate spans for the three sides.
      let bounds = {
        a: [a.length, -1, o.length, -1],
        b: [b.length, -1, o.length, -1]
      };
      while (regionHunks.length) {
        hunk = regionHunks.shift();
        const oStart = hunk.oStart;
        const oEnd = oStart + hunk.oLength;
        const abStart = hunk.abStart;
        const abEnd = abStart + hunk.abLength;
        let b = bounds[hunk.ab];
        b[0] = Math.min(abStart, b[0]);
        b[1] = Math.max(abEnd, b[1]);
        b[2] = Math.min(oStart, b[2]);
        b[3] = Math.max(oEnd, b[3]);
      }

      const aStart = bounds.a[0] + (regionStart - bounds.a[2]);
      const aEnd = bounds.a[1] + (regionEnd - bounds.a[3]);
      const bStart = bounds.b[0] + (regionStart - bounds.b[2]);
      const bEnd = bounds.b[1] + (regionEnd - bounds.b[3]);

      let result = {
        stable: false,
        aStart: aStart,
        aLength: aEnd - aStart,
        aContent: a.slice(aStart, aEnd),
        oStart: regionStart,
        oLength: regionEnd - regionStart,
        oContent: o.slice(regionStart, regionEnd),
        bStart: bStart,
        bLength: bEnd - bStart,
        bContent: b.slice(bStart, bEnd)
      };
      results.push(result);
    }
    currOffset = regionEnd;
  }

  advanceTo(o.length);

  return results;
}


// Applies the output of diff3MergeRegions to actually
// construct the merged buffer; the returned result alternates
// between 'ok' and 'conflict' blocks.
// A "false conflict" is where `a` and `b` both change the same from `o`
function diff3Merge(a, o, b, options) {
  let defaults = {
    excludeFalseConflicts: true,
    stringSeparator: /\s+/
  };
  options = Object.assign(defaults, options);

  if (typeof a === 'string') a = a.split(options.stringSeparator);
  if (typeof o === 'string') o = o.split(options.stringSeparator);
  if (typeof b === 'string') b = b.split(options.stringSeparator);

  let results = [];
  const regions = diff3MergeRegions(a, o, b);

  let okBuffer = [];
  function flushOk() {
    if (okBuffer.length) {
      results.push({ ok: okBuffer });
    }
    okBuffer = [];
  }

  function isFalseConflict(a, b) {
    if (a.length !== b.length) return false;
    for (let i = 0; i < a.length; i++) {
      if (a[i] !== b[i]) return false;
    }
    return true;
  }

  regions.forEach(region =>  {
    if (region.stable) {
      okBuffer.push(...region.bufferContent);
    } else {
      if (options.excludeFalseConflicts && isFalseConflict(region.aContent, region.bContent)) {
        okBuffer.push(...region.aContent);
      } else {
        flushOk();
        results.push({
          conflict: {
            a: region.aContent,
            aIndex: region.aStart,
            o: region.oContent,
            oIndex: region.oStart,
            b: region.bContent,
            bIndex: region.bStart
          }
        });
      }
    }
  });

  flushOk();
  return results;
}


function mergeDiff3(a, o, b, options) {
  const defaults = {
    excludeFalseConflicts: true,
    stringSeparator: /\s+/,
    label: {}
  };
  options = Object.assign(defaults, options);

  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');
  const oSection = '|||||||' + (options.label.o ? ` ${options.label.o}` : '');
  const xSection = '=======';
  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');

  const regions = diff3Merge(a, o, b, options);
  let conflict = false;
  let result = [];

  regions.forEach(region => {
    if (region.ok) {
      result = result.concat(region.ok);
    } else if (region.conflict) {
      conflict = true;
      result = result.concat(
        [aSection],
        region.conflict.a,
        [oSection],
        region.conflict.o,
        [xSection],
        region.conflict.b,
        [bSection]
      );
    }
  });

  return {
    conflict: conflict,
    result: result
  };
}


function merge(a, o, b, options) {
  const defaults = {
    excludeFalseConflicts: true,
    stringSeparator: /\s+/,
    label: {}
  };
  options = Object.assign(defaults, options);

  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');
  const xSection = '=======';
  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');

  const regions = diff3Merge(a, o, b, options);
  let conflict = false;
  let result = [];

  regions.forEach(region => {
    if (region.ok) {
      result = result.concat(region.ok);
    } else if (region.conflict) {
      conflict = true;
      result = result.concat(
        [aSection],
        region.conflict.a,
        [xSection],
        region.conflict.b,
        [bSection]
      );
    }
  });

  return {
    conflict: conflict,
    result: result
  };
}


function mergeDigIn(a, o, b, options) {
  const defaults = {
    excludeFalseConflicts: true,
    stringSeparator: /\s+/,
    label: {}
  };
  options = Object.assign(defaults, options);

  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');
  const xSection = '=======';
  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');

  const regions = diff3Merge(a, o, b, options);
  let conflict = false;
  let result = [];

  regions.forEach(region => {
    if (region.ok) {
      result = result.concat(region.ok);
    } else {
      const c = diffComm(region.conflict.a, region.conflict.b);
      for (let j = 0; j < c.length; j++) {
        let inner = c[j];
        if (inner.common) {
          result = result.concat(inner.common);
        } else {
          conflict = true;
          result = result.concat(
            [aSection],
            inner.buffer1,
            [xSection],
            inner.buffer2,
            [bSection]
          );
        }
      }
    }
  });

  return {
    conflict: conflict,
    result: result
  };
}


// Applies a patch to a buffer.
// Given buffer1 and buffer2, `patch(buffer1, diffPatch(buffer1, buffer2))` should give buffer2.
function patch(buffer, patch) {
  let result = [];
  let currOffset = 0;

  function advanceTo(targetOffset) {
    while (currOffset < targetOffset) {
      result.push(buffer[currOffset]);
      currOffset++;
    }
  }

  for (let chunkIndex = 0; chunkIndex < patch.length; chunkIndex++) {
    let chunk = patch[chunkIndex];
    advanceTo(chunk.buffer1.offset);
    for (let itemIndex = 0; itemIndex < chunk.buffer2.chunk.length; itemIndex++) {
      result.push(chunk.buffer2.chunk[itemIndex]);
    }
    currOffset += chunk.buffer1.length;
  }

  advanceTo(buffer.length);
  return result;
}


// Takes the output of diffPatch(), and removes extra information from it.
// It can still be used by patch(), below, but can no longer be inverted.
function stripPatch(patch) {
  return patch.map(chunk => ({
    buffer1: { offset: chunk.buffer1.offset, length: chunk.buffer1.length },
    buffer2: { chunk: chunk.buffer2.chunk }
  }));
}


// Takes the output of diffPatch(), and inverts the sense of it, so that it
// can be applied to buffer2 to give buffer1 rather than the other way around.
function invertPatch(patch) {
  return patch.map(chunk => ({
    buffer1: chunk.buffer2,
    buffer2: chunk.buffer1
  }));
}
### The MIT License (MIT)

diff function extracted from Project Synchrotron.

For more detail please visit:
- https://leastfixedpoint.com/tonyg/kcbbs/projects/synchrotron.html
- https://github.com/tonyg/synchrotron

Copyright (c) 2006, 2008 Tony Garnock-Jones &lt;tonyg@lshift.net&gt;<br/>
Copyright (c) 2006, 2008 LShift Ltd. &lt;query@lshift.net&gt;<br/>
Copyright (c) 2019 Bryan Housel &lt;bhousel@gmail.com&gt;<br/>

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
(the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "node-diff3",
  "version": "3.1.0",
  "license": "MIT",
  "repository": "github:bhousel/node-diff3",
  "description": "A node.js module for text diffing and three-way-merge.",
  "files": [
    "index.mjs",
    "index.d.ts",
    "dist/"
  ],
  "type": "module",
  "source": "./index.mjs",
  "types": "./index.d.ts",
  "main": "./dist/index.cjs",
  "module": "./index.mjs",
  "exports": {
    "import": "./index.mjs",
    "require": "./dist/index.cjs"
  },
  "devDependencies": {
    "c8": "^7.9.0",
    "esbuild": "^0.13.2",
    "eslint": "^7.32.0",
    "npm-run-all": "^4.1.5",
    "shx": "^0.3.3",
    "tap": "^15.0.10"
  },
  "sideEffects": false,
  "publishConfig": {
    "access": "public"
  },
  "engines": {
    "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
  }
}/*
object-assign
(c) Sindre Sorhus
@license MIT
*/

'use strict';
/* eslint-disable no-unused-vars */
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;

function toObject(val) {
	if (val === null || val === undefined) {
		throw new TypeError('Object.assign cannot be called with null or undefined');
	}

	return Object(val);
}

function shouldUseNative() {
	try {
		if (!Object.assign) {
			return false;
		}

		// Detect buggy property enumeration order in older V8 versions.

		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
		test1[5] = 'de';
		if (Object.getOwnPropertyNames(test1)[0] === '5') {
			return false;
		}

		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
		var test2 = {};
		for (var i = 0; i < 10; i++) {
			test2['_' + String.fromCharCode(i)] = i;
		}
		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
			return test2[n];
		});
		if (order2.join('') !== '0123456789') {
			return false;
		}

		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
		var test3 = {};
		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
			test3[letter] = letter;
		});
		if (Object.keys(Object.assign({}, test3)).join('') !==
				'abcdefghijklmnopqrst') {
			return false;
		}

		return true;
	} catch (err) {
		// We don't expect any of the above to throw, but better to be safe.
		return false;
	}
}

module.exports = shouldUseNative() ? Object.assign : function (target, source) {
	var from;
	var to = toObject(target);
	var symbols;

	for (var s = 1; s < arguments.length; s++) {
		from = Object(arguments[s]);

		for (var key in from) {
			if (hasOwnProperty.call(from, key)) {
				to[key] = from[key];
			}
		}

		if (getOwnPropertySymbols) {
			symbols = getOwnPropertySymbols(from);
			for (var i = 0; i < symbols.length; i++) {
				if (propIsEnumerable.call(from, symbols[i])) {
					to[symbols[i]] = from[symbols[i]];
				}
			}
		}
	}

	return to;
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "object-assign",
  "version": "4.1.1",
  "description": "ES2015 `Object.assign()` ponyfill",
  "license": "MIT",
  "repository": "sindresorhus/object-assign",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "^0.16.0",
    "lodash": "^4.16.4",
    "matcha": "^0.7.0",
    "xo": "^0.16.0"
  }
}The ISC License

Copyright (c) Isaac Z. Schlueter and Contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
var wrappy = require('wrappy')
module.exports = wrappy(once)
module.exports.strict = wrappy(onceStrict)

once.proto = once(function () {
  Object.defineProperty(Function.prototype, 'once', {
    value: function () {
      return once(this)
    },
    configurable: true
  })

  Object.defineProperty(Function.prototype, 'onceStrict', {
    value: function () {
      return onceStrict(this)
    },
    configurable: true
  })
})

function once (fn) {
  var f = function () {
    if (f.called) return f.value
    f.called = true
    return f.value = fn.apply(this, arguments)
  }
  f.called = false
  return f
}

function onceStrict (fn) {
  var f = function () {
    if (f.called)
      throw new Error(f.onceError)
    f.called = true
    return f.value = fn.apply(this, arguments)
  }
  var name = fn.name || 'Function wrapped with `once`'
  f.onceError = name + " shouldn't be called more than once"
  f.called = false
  return f
}
{
  "name": "once",
  "version": "1.4.0",
  "description": "Run a function exactly one time",
  "main": "once.js",
  "directories": {
    "test": "test"
  },
  "dependencies": {
    "wrappy": "1"
  },
  "devDependencies": {
    "tap": "^7.0.1"
  },
  "files": [
    "once.js"
  ],
  "repository": {
    "type": "git",
    "url": "git://github.com/isaacs/once"
  },
  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
  "license": "ISC"
}
0.0.1 / 2010-01-03
==================

  * Initial release

module.exports = function(obj, keys){
  obj = obj || {};
  if ('string' == typeof keys) keys = keys.split(/ +/);
  return keys.reduce(function(ret, key){
    if (null == obj[key]) return ret;
    ret[key] = obj[key];
    return ret;
  }, {});
};

test:
	@./node_modules/.bin/mocha \
		--require should \
		--reporter spec

.PHONY: test{
  "name": "only",
  "version": "0.0.2",
  "description": "return whitelisted properties of an object",
  "author": "TJ Holowaychuk <tj@vision-media.ca>",
  "repository": "git://github.com/visionmedia/node-only",
  "dependencies": {},
  "devDependencies": {
    "mocha": "*",
    "should": "*"
  },
  "main": "index"
}ï»¿'use strict';module.exports=require('fs');export * from 'fs';
export { default } from 'fs';{
  "name": "original-fs",
  "description": "Ensure that the correct module is loaded in a non-Electron environment.ï¼åœ¨éž Electron çŽ¯å¢ƒä¸­ç¡®ä¿åŠ è½½æ­£ç¡®çš„æ¨¡å—ã€‚",
  "version": "1.2.0",
  "license": "Unlicense",
  "author": "é¾™è…¾é“ <LongTengDao@LongTengDao.com> (www.LongTengDao.com)",
  "repository": {
    "type": "git",
    "url": "https://GitHub.com/LongTengDao/original-fs.git"
  },
  "exports": {
    ".": {
      "import": "./index.mjs",
      "require": "./index.js"
    },
    "./promises": {
      "import": "./promises.mjs",
      "require": "./promises.js"
    }
  }
}'use strict';module.exports=require('fs/promises');export * from 'fs/promises';
export { default } from 'fs/promises';'use strict';
module.exports = (promise, onFinally) => {
	onFinally = onFinally || (() => {});

	return promise.then(
		val => new Promise(resolve => {
			resolve(onFinally());
		}).then(() => val),
		err => new Promise(resolve => {
			resolve(onFinally());
		}).then(() => {
			throw err;
		})
	);
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "p-finally",
  "version": "1.0.0",
  "description": "`Promise#finally()` ponyfill - Invoked when the promise is settled regardless of outcome",
  "license": "MIT",
  "repository": "sindresorhus/p-finally",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}'use strict';
const pLimit = require('p-limit');

class EndError extends Error {
	constructor(value) {
		super();
		this.value = value;
	}
}

// The input can also be a promise, so we `Promise.resolve()` it
const testElement = (el, tester) => Promise.resolve(el).then(tester);

// The input can also be a promise, so we `Promise.all()` them both
const finder = el => Promise.all(el).then(val => val[1] === true && Promise.reject(new EndError(val[0])));

module.exports = (iterable, tester, opts) => {
	opts = Object.assign({
		concurrency: Infinity,
		preserveOrder: true
	}, opts);

	const limit = pLimit(opts.concurrency);

	// Start all the promises concurrently with optional limit
	const items = [...iterable].map(el => [el, limit(testElement, el, tester)]);

	// Check the promises either serially or concurrently
	const checkLimit = pLimit(opts.preserveOrder ? 1 : Infinity);

	return Promise.all(items.map(el => checkLimit(finder, el)))
		.then(() => {})
		.catch(err => err instanceof EndError ? err.value : Promise.reject(err));
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict';
const pTry = require('p-try');

const pLimit = concurrency => {
	if (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) {
		return Promise.reject(new TypeError('Expected `concurrency` to be a number from 1 and up'));
	}

	const queue = [];
	let activeCount = 0;

	const next = () => {
		activeCount--;

		if (queue.length > 0) {
			queue.shift()();
		}
	};

	const run = (fn, resolve, ...args) => {
		activeCount++;

		const result = pTry(fn, ...args);

		resolve(result);

		result.then(next, next);
	};

	const enqueue = (fn, resolve, ...args) => {
		if (activeCount < concurrency) {
			run(fn, resolve, ...args);
		} else {
			queue.push(run.bind(null, fn, resolve, ...args));
		}
	};

	const generator = (fn, ...args) => new Promise(resolve => enqueue(fn, resolve, ...args));
	Object.defineProperties(generator, {
		activeCount: {
			get: () => activeCount
		},
		pendingCount: {
			get: () => queue.length
		},
		clearQueue: {
			value: () => {
				queue.length = 0;
			}
		}
	});

	return generator;
};

module.exports = pLimit;
module.exports.default = pLimit;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "p-limit",
  "version": "2.3.0",
  "description": "Run multiple promise-returning & async functions with limited concurrency",
  "license": "MIT",
  "repository": "sindresorhus/p-limit",
  "funding": "https://github.com/sponsors/sindresorhus",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "dependencies": {
    "p-try": "^2.0.0"
  },
  "devDependencies": {
    "ava": "^1.2.1",
    "delay": "^4.1.0",
    "in-range": "^1.0.0",
    "random-int": "^1.0.0",
    "time-span": "^2.0.0",
    "tsd-check": "^0.3.0",
    "xo": "^0.24.0"
  }
}'use strict';

const pTry = (fn, ...arguments_) => new Promise(resolve => {
	resolve(fn(...arguments_));
});

module.exports = pTry;
// TODO: remove this in the next major version
module.exports.default = pTry;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "p-try",
  "version": "2.2.0",
  "description": "`Start a promise chain",
  "license": "MIT",
  "repository": "sindresorhus/p-try",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "devDependencies": {
    "ava": "^1.4.1",
    "tsd": "^0.7.1",
    "xo": "^0.24.0"
  }
}{
  "name": "p-locate",
  "version": "3.0.0",
  "description": "Get the first fulfilled promise that satisfies the provided testing function",
  "license": "MIT",
  "repository": "sindresorhus/p-locate",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "p-limit": "^2.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "delay": "^3.0.0",
    "in-range": "^1.0.0",
    "time-span": "^2.0.0",
    "xo": "*"
  }
}1.3.3 / 2019-04-15
==================

  * Fix Node.js 0.8 return value inconsistencies

1.3.2 / 2017-09-09
==================

  * perf: reduce overhead for full URLs
  * perf: unroll the "fast-path" `RegExp`

1.3.1 / 2016-01-17
==================

  * perf: enable strict mode

1.3.0 / 2014-08-09
==================

  * Add `parseurl.original` for parsing `req.originalUrl` with fallback
  * Return `undefined` if `req.url` is `undefined`

1.2.0 / 2014-07-21
==================

  * Cache URLs based on original value
  * Remove no-longer-needed URL mis-parse work-around
  * Simplify the "fast-path" `RegExp`

1.1.3 / 2014-07-08
==================

  * Fix typo

1.1.2 / 2014-07-08
==================

  * Seriously fix Node.js 0.8 compatibility

1.1.1 / 2014-07-08
==================

  * Fix Node.js 0.8 compatibility

1.1.0 / 2014-07-08
==================

  * Incorporate URL href-only parse fast-path

1.0.1 / 2014-03-08
==================

  * Add missing `require`

1.0.0 / 2014-03-08
==================

  * Genesis from `connect`
/*!
 * parseurl
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2014-2017 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var url = require('url')
var parse = url.parse
var Url = url.Url

/**
 * Module exports.
 * @public
 */

module.exports = parseurl
module.exports.original = originalurl

/**
 * Parse the `req` url with memoization.
 *
 * @param {ServerRequest} req
 * @return {Object}
 * @public
 */

function parseurl (req) {
  var url = req.url

  if (url === undefined) {
    // URL is undefined
    return undefined
  }

  var parsed = req._parsedUrl

  if (fresh(url, parsed)) {
    // Return cached URL parse
    return parsed
  }

  // Parse the URL
  parsed = fastparse(url)
  parsed._raw = url

  return (req._parsedUrl = parsed)
};

/**
 * Parse the `req` original url with fallback and memoization.
 *
 * @param {ServerRequest} req
 * @return {Object}
 * @public
 */

function originalurl (req) {
  var url = req.originalUrl

  if (typeof url !== 'string') {
    // Fallback
    return parseurl(req)
  }

  var parsed = req._parsedOriginalUrl

  if (fresh(url, parsed)) {
    // Return cached URL parse
    return parsed
  }

  // Parse the URL
  parsed = fastparse(url)
  parsed._raw = url

  return (req._parsedOriginalUrl = parsed)
};

/**
 * Parse the `str` url with fast-path short-cut.
 *
 * @param {string} str
 * @return {Object}
 * @private
 */

function fastparse (str) {
  if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {
    return parse(str)
  }

  var pathname = str
  var query = null
  var search = null

  // This takes the regexp from https://github.com/joyent/node/pull/7878
  // Which is /^(\/[^?#\s]*)(\?[^#\s]*)?$/
  // And unrolls it into a for loop
  for (var i = 1; i < str.length; i++) {
    switch (str.charCodeAt(i)) {
      case 0x3f: /* ?  */
        if (search === null) {
          pathname = str.substring(0, i)
          query = str.substring(i + 1)
          search = str.substring(i)
        }
        break
      case 0x09: /* \t */
      case 0x0a: /* \n */
      case 0x0c: /* \f */
      case 0x0d: /* \r */
      case 0x20: /*    */
      case 0x23: /* #  */
      case 0xa0:
      case 0xfeff:
        return parse(str)
    }
  }

  var url = Url !== undefined
    ? new Url()
    : {}

  url.path = str
  url.href = str
  url.pathname = pathname

  if (search !== null) {
    url.query = query
    url.search = search
  }

  return url
}

/**
 * Determine if parsed is still fresh for url.
 *
 * @param {string} url
 * @param {object} parsedUrl
 * @return {boolean}
 * @private
 */

function fresh (url, parsedUrl) {
  return typeof parsedUrl === 'object' &&
    parsedUrl !== null &&
    (Url === undefined || parsedUrl instanceof Url) &&
    parsedUrl._raw === url
}

(The MIT License)

Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
Copyright (c) 2014-2017 Douglas Christopher Wilson <doug@somethingdoug.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "parseurl",
  "description": "parse a url with memoization",
  "version": "1.3.3",
  "repository": "pillarjs/parseurl",
  "license": "MIT",
  "devDependencies": {
    "beautify-benchmark": "0.2.4",
    "benchmark": "2.1.4",
    "eslint": "5.16.0",
    "eslint-config-standard": "12.0.0",
    "eslint-plugin-import": "2.17.1",
    "eslint-plugin-node": "7.0.1",
    "eslint-plugin-promise": "4.1.1",
    "eslint-plugin-standard": "4.0.0",
    "fast-url-parser": "1.1.3",
    "istanbul": "0.4.5",
    "mocha": "6.1.3"
  },
  "files": [
    "LICENSE",
    "HISTORY.md",
    "README.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.8"
  }
}'use strict';
const fs = require('fs');

module.exports = fp => new Promise(resolve => {
	fs.access(fp, err => {
		resolve(!err);
	});
});

module.exports.sync = fp => {
	try {
		fs.accessSync(fp);
		return true;
	} catch (err) {
		return false;
	}
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "path-exists",
  "version": "3.0.0",
  "description": "Check if a path exists",
  "license": "MIT",
  "repository": "sindresorhus/path-exists",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}'use strict';
module.exports = opts => {
	opts = opts || {};

	const env = opts.env || process.env;
	const platform = opts.platform || process.platform;

	if (platform !== 'win32') {
		return 'PATH';
	}

	return Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path';
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "path-key",
  "version": "2.0.1",
  "description": "Get the PATH environment variable key cross-platform",
  "license": "MIT",
  "repository": "sindresorhus/path-key",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}ISC License

Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "picocolors",
  "version": "1.0.0",
  "main": "./picocolors.js",
  "types": "./picocolors.d.ts",
  "browser": {
    "./picocolors.js": "./picocolors.browser.js"
  },
  "sideEffects": false,
  "description": "The tiniest and the fastest library for terminal output formatting with ANSI colors",
  "files": [
    "picocolors.*",
    "types.ts"
  ],
  "author": "Alexey Raspopov",
  "repository": "alexeyraspopov/picocolors",
  "license": "ISC"
}var x=String;
var create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}};
module.exports=create();
module.exports.createColors = create;
let tty = require("tty")

let isColorSupported =
	!("NO_COLOR" in process.env || process.argv.includes("--no-color")) &&
	("FORCE_COLOR" in process.env ||
		process.argv.includes("--color") ||
		process.platform === "win32" ||
		(tty.isatty(1) && process.env.TERM !== "dumb") ||
		"CI" in process.env)

let formatter =
	(open, close, replace = open) =>
	input => {
		let string = "" + input
		let index = string.indexOf(close, open.length)
		return ~index
			? open + replaceClose(string, close, replace, index) + close
			: open + string + close
	}

let replaceClose = (string, close, replace, index) => {
	let start = string.substring(0, index) + replace
	let end = string.substring(index + close.length)
	let nextIndex = end.indexOf(close)
	return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end
}

let createColors = (enabled = isColorSupported) => ({
	isColorSupported: enabled,
	reset: enabled ? s => `\x1b[0m${s}\x1b[0m` : String,
	bold: enabled ? formatter("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m") : String,
	dim: enabled ? formatter("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m") : String,
	italic: enabled ? formatter("\x1b[3m", "\x1b[23m") : String,
	underline: enabled ? formatter("\x1b[4m", "\x1b[24m") : String,
	inverse: enabled ? formatter("\x1b[7m", "\x1b[27m") : String,
	hidden: enabled ? formatter("\x1b[8m", "\x1b[28m") : String,
	strikethrough: enabled ? formatter("\x1b[9m", "\x1b[29m") : String,
	black: enabled ? formatter("\x1b[30m", "\x1b[39m") : String,
	red: enabled ? formatter("\x1b[31m", "\x1b[39m") : String,
	green: enabled ? formatter("\x1b[32m", "\x1b[39m") : String,
	yellow: enabled ? formatter("\x1b[33m", "\x1b[39m") : String,
	blue: enabled ? formatter("\x1b[34m", "\x1b[39m") : String,
	magenta: enabled ? formatter("\x1b[35m", "\x1b[39m") : String,
	cyan: enabled ? formatter("\x1b[36m", "\x1b[39m") : String,
	white: enabled ? formatter("\x1b[37m", "\x1b[39m") : String,
	gray: enabled ? formatter("\x1b[90m", "\x1b[39m") : String,
	bgBlack: enabled ? formatter("\x1b[40m", "\x1b[49m") : String,
	bgRed: enabled ? formatter("\x1b[41m", "\x1b[49m") : String,
	bgGreen: enabled ? formatter("\x1b[42m", "\x1b[49m") : String,
	bgYellow: enabled ? formatter("\x1b[43m", "\x1b[49m") : String,
	bgBlue: enabled ? formatter("\x1b[44m", "\x1b[49m") : String,
	bgMagenta: enabled ? formatter("\x1b[45m", "\x1b[49m") : String,
	bgCyan: enabled ? formatter("\x1b[46m", "\x1b[49m") : String,
	bgWhite: enabled ? formatter("\x1b[47m", "\x1b[49m") : String,
})

module.exports = createColors()
module.exports.createColors = createColors
export type Formatter = (input: string | number | null | undefined) => string

export interface Colors {
	isColorSupported: boolean
	reset: Formatter
	bold: Formatter
	dim: Formatter
	italic: Formatter
	underline: Formatter
	inverse: Formatter
	hidden: Formatter
	strikethrough: Formatter
	black: Formatter
	red: Formatter
	green: Formatter
	yellow: Formatter
	blue: Formatter
	magenta: Formatter
	cyan: Formatter
	white: Formatter
	gray: Formatter
	bgBlack: Formatter
	bgRed: Formatter
	bgGreen: Formatter
	bgYellow: Formatter
	bgBlue: Formatter
	bgMagenta: Formatter
	bgCyan: Formatter
	bgWhite: Formatter
}
'use strict';

module.exports = typeof Promise === 'function' ? Promise : require('pinkie');
The MIT License (MIT)

Copyright (c) Vsevolod Strukchinsky <floatdrop@gmail.com> (github.com/floatdrop)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "pinkie-promise",
  "version": "2.0.1",
  "description": "ES2015 Promise ponyfill",
  "license": "MIT",
  "repository": "floatdrop/pinkie-promise",
  "author": {
    "name": "Vsevolod Strukchinsky",
    "email": "floatdrop@gmail.com",
    "url": "github.com/floatdrop"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "pinkie": "^2.0.0"
  },
  "devDependencies": {
    "mocha": "*"
  }
}'use strict';

var PENDING = 'pending';
var SETTLED = 'settled';
var FULFILLED = 'fulfilled';
var REJECTED = 'rejected';
var NOOP = function () {};
var isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';

var asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;
var asyncQueue = [];
var asyncTimer;

function asyncFlush() {
	// run promise callbacks
	for (var i = 0; i < asyncQueue.length; i++) {
		asyncQueue[i][0](asyncQueue[i][1]);
	}

	// reset async asyncQueue
	asyncQueue = [];
	asyncTimer = false;
}

function asyncCall(callback, arg) {
	asyncQueue.push([callback, arg]);

	if (!asyncTimer) {
		asyncTimer = true;
		asyncSetTimer(asyncFlush, 0);
	}
}

function invokeResolver(resolver, promise) {
	function resolvePromise(value) {
		resolve(promise, value);
	}

	function rejectPromise(reason) {
		reject(promise, reason);
	}

	try {
		resolver(resolvePromise, rejectPromise);
	} catch (e) {
		rejectPromise(e);
	}
}

function invokeCallback(subscriber) {
	var owner = subscriber.owner;
	var settled = owner._state;
	var value = owner._data;
	var callback = subscriber[settled];
	var promise = subscriber.then;

	if (typeof callback === 'function') {
		settled = FULFILLED;
		try {
			value = callback(value);
		} catch (e) {
			reject(promise, e);
		}
	}

	if (!handleThenable(promise, value)) {
		if (settled === FULFILLED) {
			resolve(promise, value);
		}

		if (settled === REJECTED) {
			reject(promise, value);
		}
	}
}

function handleThenable(promise, value) {
	var resolved;

	try {
		if (promise === value) {
			throw new TypeError('A promises callback cannot return that same promise.');
		}

		if (value && (typeof value === 'function' || typeof value === 'object')) {
			// then should be retrieved only once
			var then = value.then;

			if (typeof then === 'function') {
				then.call(value, function (val) {
					if (!resolved) {
						resolved = true;

						if (value === val) {
							fulfill(promise, val);
						} else {
							resolve(promise, val);
						}
					}
				}, function (reason) {
					if (!resolved) {
						resolved = true;

						reject(promise, reason);
					}
				});

				return true;
			}
		}
	} catch (e) {
		if (!resolved) {
			reject(promise, e);
		}

		return true;
	}

	return false;
}

function resolve(promise, value) {
	if (promise === value || !handleThenable(promise, value)) {
		fulfill(promise, value);
	}
}

function fulfill(promise, value) {
	if (promise._state === PENDING) {
		promise._state = SETTLED;
		promise._data = value;

		asyncCall(publishFulfillment, promise);
	}
}

function reject(promise, reason) {
	if (promise._state === PENDING) {
		promise._state = SETTLED;
		promise._data = reason;

		asyncCall(publishRejection, promise);
	}
}

function publish(promise) {
	promise._then = promise._then.forEach(invokeCallback);
}

function publishFulfillment(promise) {
	promise._state = FULFILLED;
	publish(promise);
}

function publishRejection(promise) {
	promise._state = REJECTED;
	publish(promise);
	if (!promise._handled && isNode) {
		global.process.emit('unhandledRejection', promise._data, promise);
	}
}

function notifyRejectionHandled(promise) {
	global.process.emit('rejectionHandled', promise);
}

/**
 * @class
 */
function Promise(resolver) {
	if (typeof resolver !== 'function') {
		throw new TypeError('Promise resolver ' + resolver + ' is not a function');
	}

	if (this instanceof Promise === false) {
		throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.');
	}

	this._then = [];

	invokeResolver(resolver, this);
}

Promise.prototype = {
	constructor: Promise,

	_state: PENDING,
	_then: null,
	_data: undefined,
	_handled: false,

	then: function (onFulfillment, onRejection) {
		var subscriber = {
			owner: this,
			then: new this.constructor(NOOP),
			fulfilled: onFulfillment,
			rejected: onRejection
		};

		if ((onRejection || onFulfillment) && !this._handled) {
			this._handled = true;
			if (this._state === REJECTED && isNode) {
				asyncCall(notifyRejectionHandled, this);
			}
		}

		if (this._state === FULFILLED || this._state === REJECTED) {
			// already resolved, call callback async
			asyncCall(invokeCallback, subscriber);
		} else {
			// subscribe
			this._then.push(subscriber);
		}

		return subscriber.then;
	},

	catch: function (onRejection) {
		return this.then(null, onRejection);
	}
};

Promise.all = function (promises) {
	if (!Array.isArray(promises)) {
		throw new TypeError('You must pass an array to Promise.all().');
	}

	return new Promise(function (resolve, reject) {
		var results = [];
		var remaining = 0;

		function resolver(index) {
			remaining++;
			return function (value) {
				results[index] = value;
				if (!--remaining) {
					resolve(results);
				}
			};
		}

		for (var i = 0, promise; i < promises.length; i++) {
			promise = promises[i];

			if (promise && typeof promise.then === 'function') {
				promise.then(resolver(i), reject);
			} else {
				results[i] = promise;
			}
		}

		if (!remaining) {
			resolve(results);
		}
	});
};

Promise.race = function (promises) {
	if (!Array.isArray(promises)) {
		throw new TypeError('You must pass an array to Promise.race().');
	}

	return new Promise(function (resolve, reject) {
		for (var i = 0, promise; i < promises.length; i++) {
			promise = promises[i];

			if (promise && typeof promise.then === 'function') {
				promise.then(resolve, reject);
			} else {
				resolve(promise);
			}
		}
	});
};

Promise.resolve = function (value) {
	if (value && typeof value === 'object' && value.constructor === Promise) {
		return value;
	}

	return new Promise(function (resolve) {
		resolve(value);
	});
};

Promise.reject = function (reason) {
	return new Promise(function (resolve, reject) {
		reject(reason);
	});
};

module.exports = Promise;
The MIT License (MIT)

Copyright (c) Vsevolod Strukchinsky <floatdrop@gmail.com> (github.com/floatdrop)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "pinkie",
  "version": "2.0.4",
  "description": "Itty bitty little widdle twinkie pinkie ES2015 Promise implementation",
  "license": "MIT",
  "repository": "floatdrop/pinkie",
  "author": {
    "name": "Vsevolod Strukchinsky",
    "email": "floatdrop@gmail.com",
    "url": "github.com/floatdrop"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "core-assert": "^0.1.1",
    "coveralls": "^2.11.4",
    "mocha": "*",
    "nyc": "^3.2.2",
    "promises-aplus-tests": "*",
    "xo": "^0.10.1"
  }
}{
    "rules": {
        "no-alert": "error",
        "no-array-constructor": "off",
        "no-bitwise": "off",
        "no-caller": "error",
        "no-catch-shadow": "error",
        "no-class-assign": "error",
        "no-cond-assign": "error",
        "no-console": "error",
        "no-const-assign": "error",
        "no-constant-condition": "error",
        "no-continue": "off",
        "no-control-regex": "error",
        "no-debugger": "error",
        "no-delete-var": "error",
        "no-div-regex": "off",
        "no-dupe-keys": "error",
        "no-dupe-args": "error",
        "no-duplicate-case": "error",
        "no-else-return": "error",
        "no-empty": "error",
        "no-empty-character-class": "error",
        "no-eq-null": "off",
        "no-eval": "error",
        "no-ex-assign": "error",
        "no-extend-native": "error",
        "no-extra-bind": "error",
        "no-extra-boolean-cast": "error",
        "no-extra-parens": "off",
        "no-extra-semi": "error",
        "no-fallthrough": "error",
        "no-floating-decimal": "error",
        "no-func-assign": "error",
        "no-implicit-coercion": "error",
        "no-implied-eval": "error",
        "no-inline-comments": "off",
        "no-inner-declarations": ["error", "functions"],
        "no-invalid-regexp": "error",
        "no-invalid-this": "error",
        "no-irregular-whitespace": "error",
        "no-iterator": "error",
        "no-label-var": "error",
        "no-labels": "error",
        "no-lone-blocks": "error",
        "no-lonely-if": "error",
        "no-loop-func": "error",
        "no-mixed-requires": ["error", false],
        "no-mixed-spaces-and-tabs": ["error", false],
        "linebreak-style": ["off", "unix"],
        "no-multi-spaces": "error",
        "no-multi-str": "off",
        "no-multiple-empty-lines": ["error", {"max": 2}],
        "no-native-reassign": "error",
        "no-negated-in-lhs": "error",
        "no-nested-ternary": "error",
        "no-new": "error",
        "no-new-func": "error",
        "no-new-object": "error",
        "no-new-require": "error",
        "no-new-wrappers": "error",
        "no-obj-calls": "error",
        "no-octal": "error",
        "no-octal-escape": "off",
        "no-param-reassign": "off",
        "no-path-concat": "off",
        "no-plusplus": "off",
        "no-process-env": "off",
        "no-process-exit": "off",
        "no-proto": "off",
        "no-redeclare": "error",
        "no-regex-spaces": "error",
        "no-restricted-modules": "off",
        "no-return-assign": "error",
        "no-script-url": "off",
        "no-self-compare": "error",
        "no-sequences": "error",
        "no-shadow": "error",
        "no-shadow-restricted-names": "error",
        "no-spaced-func": "error",
        "no-sparse-arrays": "error",
        "no-sync": "off",
        "no-ternary": "off",
        "no-trailing-spaces": "error",
        "no-this-before-super": "error",
        "no-throw-literal": "error",
        "no-undef": "error",
        "no-undef-init": "error",
        "no-undefined": "off",
        "no-unexpected-multiline": "error",
        "no-underscore-dangle": "off",
        "no-unneeded-ternary": "off",
        "no-unreachable": "error",
        "no-unused-expressions": "error",
        "no-unused-vars": ["error", {"vars": "all", "args": "after-used"}],
        "no-use-before-define": "error",
        "no-useless-call": "error",
        "no-void": "off",
        "no-var": "off",
        "no-warning-comments": ["error", { "terms": ["todo", "fixme", "xxx"], "location": "start" }],
        "no-with": "error",

        "array-bracket-spacing": ["error", "never"],
        "arrow-parens": "error",
        "arrow-spacing": "error",
        "accessor-pairs": "error",
        "block-scoped-var": "off",
        "brace-style": ["error", "stroustrup"],
        "callback-return": ["error", ["callback", "cb", "next"]],
        "camelcase": ["error", {"properties": "always"}],
        "comma-dangle": ["error", "never"],
        "comma-spacing": "error",
        "comma-style": "error",
        "complexity": "off",
        "computed-property-spacing": ["off", "never"],
        "consistent-return": "off",
        "consistent-this": ["off", "that"],
        "constructor-super": "error",
        "curly": ["error", "all"],
        "default-case": "error",
        "dot-location": ["error", "property"],
        "dot-notation": ["error", { "allowKeywords": true }],
        "eol-last": "off",
        "eqeqeq": ["error", "smart"],
        "func-names": "off",
        "func-style": ["off", "declaration"],
        "generator-star-spacing": "off",
        "guard-for-in": "error",
        "handle-callback-err": "error",
        "id-length": ["error", {"min": 3, "max": 25, "exceptions":["x", "y", "i", "j", "ex", "up"]}],
        "indent": ["error", 2, {"SwitchCase": 1}],
        "init-declarations": "off",
        "key-spacing": ["error", { "beforeColon": false, "afterColon": true }],
        "keyword-spacing": "error",
    	"lines-around-comment": "off",
        "max-depth": ["error", 6],
        "max-len": ["error", { "code": 160 }],
        "max-nested-callbacks": ["error", 1],
        "max-params": ["error", 6],
        "max-statements": "off",
        "new-cap": "error",
        "new-parens": "error",
        "newline-after-var": "off",
        "object-curly-spacing": ["error", "always"],
        "object-shorthand": "off",
        "one-var": ["error", {
            "initialized": "never"
        }],
        "operator-assignment": ["off", "always"],
        "operator-linebreak": ["error", "after"],
        "padded-blocks": "off",
        "prefer-const": "off",
        "prefer-spread": "off",
        "prefer-reflect": "off",
        "quote-props": "off",
        "quotes": ["error", "single"],
        "radix": "off",
        "id-match": "off",
        "require-yield": "off",
        "semi": ["error", "always"],
        "semi-spacing": ["error", {"before": false, "after": true}],
        "sort-vars": "off",
        "space-before-blocks": ["error", "always"],
        "space-before-function-paren": ["error", "never"],
        "space-in-parens": ["error", "never"],
        "space-infix-ops": "error",
        "space-unary-ops": ["error", { "words": true, "nonwords": false }],
        "spaced-comment": "off",
        "strict": ["error", "global"],
        "use-isnan": "error",
        "valid-jsdoc": "off",
        "valid-typeof": "error",
        "vars-on-top": "off",
        "wrap-iife": "off",
        "wrap-regex": "off",
        "yoda": ["off", "never"]
    },
    "env": {
        "node": true,
	    "es6": true
    }
}
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.png = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
(function (Buffer){
'use strict';

var interlaceUtils = require('./interlace');

var pixelBppMapper = [
  // 0 - dummy entry
  function() {},

  // 1 - L
  // 0: 0, 1: 0, 2: 0, 3: 0xff
  function(pxData, data, pxPos, rawPos) {
    if (rawPos === data.length) {
      throw new Error('Ran out of data');
    }

    var pixel = data[rawPos];
    pxData[pxPos] = pixel;
    pxData[pxPos + 1] = pixel;
    pxData[pxPos + 2] = pixel;
    pxData[pxPos + 3] = 0xff;
  },

  // 2 - LA
  // 0: 0, 1: 0, 2: 0, 3: 1
  function(pxData, data, pxPos, rawPos) {
    if (rawPos + 1 >= data.length) {
      throw new Error('Ran out of data');
    }

    var pixel = data[rawPos];
    pxData[pxPos] = pixel;
    pxData[pxPos + 1] = pixel;
    pxData[pxPos + 2] = pixel;
    pxData[pxPos + 3] = data[rawPos + 1];
  },

  // 3 - RGB
  // 0: 0, 1: 1, 2: 2, 3: 0xff
  function(pxData, data, pxPos, rawPos) {
    if (rawPos + 2 >= data.length) {
      throw new Error('Ran out of data');
    }

    pxData[pxPos] = data[rawPos];
    pxData[pxPos + 1] = data[rawPos + 1];
    pxData[pxPos + 2] = data[rawPos + 2];
    pxData[pxPos + 3] = 0xff;
  },

  // 4 - RGBA
  // 0: 0, 1: 1, 2: 2, 3: 3
  function(pxData, data, pxPos, rawPos) {
    if (rawPos + 3 >= data.length) {
      throw new Error('Ran out of data');
    }

    pxData[pxPos] = data[rawPos];
    pxData[pxPos + 1] = data[rawPos + 1];
    pxData[pxPos + 2] = data[rawPos + 2];
    pxData[pxPos + 3] = data[rawPos + 3];
  }
];

var pixelBppCustomMapper = [
  // 0 - dummy entry
  function() {},

  // 1 - L
  // 0: 0, 1: 0, 2: 0, 3: 0xff
  function(pxData, pixelData, pxPos, maxBit) {
    var pixel = pixelData[0];
    pxData[pxPos] = pixel;
    pxData[pxPos + 1] = pixel;
    pxData[pxPos + 2] = pixel;
    pxData[pxPos + 3] = maxBit;
  },

  // 2 - LA
  // 0: 0, 1: 0, 2: 0, 3: 1
  function(pxData, pixelData, pxPos) {
    var pixel = pixelData[0];
    pxData[pxPos] = pixel;
    pxData[pxPos + 1] = pixel;
    pxData[pxPos + 2] = pixel;
    pxData[pxPos + 3] = pixelData[1];
  },

  // 3 - RGB
  // 0: 0, 1: 1, 2: 2, 3: 0xff
  function(pxData, pixelData, pxPos, maxBit) {
    pxData[pxPos] = pixelData[0];
    pxData[pxPos + 1] = pixelData[1];
    pxData[pxPos + 2] = pixelData[2];
    pxData[pxPos + 3] = maxBit;
  },

  // 4 - RGBA
  // 0: 0, 1: 1, 2: 2, 3: 3
  function(pxData, pixelData, pxPos) {
    pxData[pxPos] = pixelData[0];
    pxData[pxPos + 1] = pixelData[1];
    pxData[pxPos + 2] = pixelData[2];
    pxData[pxPos + 3] = pixelData[3];
  }
];

function bitRetriever(data, depth) {

  var leftOver = [];
  var i = 0;

  function split() {
    if (i === data.length) {
      throw new Error('Ran out of data');
    }
    var byte = data[i];
    i++;
    var byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;
    switch (depth) {
      default:
        throw new Error('unrecognised depth');
      case 16:
        byte2 = data[i];
        i++;
        leftOver.push(((byte << 8) + byte2));
        break;
      case 4:
        byte2 = byte & 0x0f;
        byte1 = byte >> 4;
        leftOver.push(byte1, byte2);
        break;
      case 2:
        byte4 = byte & 3;
        byte3 = byte >> 2 & 3;
        byte2 = byte >> 4 & 3;
        byte1 = byte >> 6 & 3;
        leftOver.push(byte1, byte2, byte3, byte4);
        break;
      case 1:
        byte8 = byte & 1;
        byte7 = byte >> 1 & 1;
        byte6 = byte >> 2 & 1;
        byte5 = byte >> 3 & 1;
        byte4 = byte >> 4 & 1;
        byte3 = byte >> 5 & 1;
        byte2 = byte >> 6 & 1;
        byte1 = byte >> 7 & 1;
        leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);
        break;
    }
  }

  return {
    get: function(count) {
      while (leftOver.length < count) {
        split();
      }
      var returner = leftOver.slice(0, count);
      leftOver = leftOver.slice(count);
      return returner;
    },
    resetAfterLine: function() {
      leftOver.length = 0;
    },
    end: function() {
      if (i !== data.length) {
        throw new Error('extra data found');
      }
    }
  };
}

function mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) { // eslint-disable-line max-params
  var imageWidth = image.width;
  var imageHeight = image.height;
  var imagePass = image.index;
  for (var y = 0; y < imageHeight; y++) {
    for (var x = 0; x < imageWidth; x++) {
      var pxPos = getPxPos(x, y, imagePass);
      pixelBppMapper[bpp](pxData, data, pxPos, rawPos);
      rawPos += bpp; //eslint-disable-line no-param-reassign
    }
  }
  return rawPos;
}

function mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) { // eslint-disable-line max-params
  var imageWidth = image.width;
  var imageHeight = image.height;
  var imagePass = image.index;
  for (var y = 0; y < imageHeight; y++) {
    for (var x = 0; x < imageWidth; x++) {
      var pixelData = bits.get(bpp);
      var pxPos = getPxPos(x, y, imagePass);
      pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);
    }
    bits.resetAfterLine();
  }
}

exports.dataToBitMap = function(data, bitmapInfo) {

  var width = bitmapInfo.width;
  var height = bitmapInfo.height;
  var depth = bitmapInfo.depth;
  var bpp = bitmapInfo.bpp;
  var interlace = bitmapInfo.interlace;

  if (depth !== 8) {
    var bits = bitRetriever(data, depth);
  }
  var pxData;
  if (depth <= 8) {
    pxData = new Buffer(width * height * 4);
  }
  else {
    pxData = new Uint16Array(width * height * 4);
  }
  var maxBit = Math.pow(2, depth) - 1;
  var rawPos = 0;
  var images;
  var getPxPos;

  if (interlace) {
    images = interlaceUtils.getImagePasses(width, height);
    getPxPos = interlaceUtils.getInterlaceIterator(width, height);
  }
  else {
    var nonInterlacedPxPos = 0;
    getPxPos = function() {
      var returner = nonInterlacedPxPos;
      nonInterlacedPxPos += 4;
      return returner;
    };
    images = [{ width: width, height: height }];
  }

  for (var imageIndex = 0; imageIndex < images.length; imageIndex++) {
    if (depth === 8) {
      rawPos = mapImage8Bit(images[imageIndex], pxData, getPxPos, bpp, data, rawPos);
    }
    else {
      mapImageCustomBit(images[imageIndex], pxData, getPxPos, bpp, bits, maxBit);
    }
  }
  if (depth === 8) {
    if (rawPos !== data.length) {
      throw new Error('extra data found');
    }
  }
  else {
    bits.end();
  }

  return pxData;
};

}).call(this,require("buffer").Buffer)
},{"./interlace":11,"buffer":32}],2:[function(require,module,exports){
(function (Buffer){
'use strict';

var constants = require('./constants');

module.exports = function(dataIn, width, height, options) {
  var outHasAlpha = [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(options.colorType) !== -1;
  if (options.colorType === options.inputColorType) {
    var bigEndian = (function() {
      var buffer = new ArrayBuffer(2);
      new DataView(buffer).setInt16(0, 256, true /* littleEndian */);
      // Int16Array uses the platform's endianness.
      return new Int16Array(buffer)[0] !== 256;
    })();
    // If no need to convert to grayscale and alpha is present/absent in both, take a fast route
    if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {
      return dataIn;
    }
  }

  // map to a UInt16 array if data is 16bit, fix endianness below
  var data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);

  var maxValue = 255;
  var inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];
  if (inBpp === 4 && !options.inputHasAlpha) {
    inBpp = 3;
  }
  var outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];
  if (options.bitDepth === 16) {
    maxValue = 65535;
    outBpp *= 2;
  }
  var outData = new Buffer(width * height * outBpp);

  var inIndex = 0;
  var outIndex = 0;

  var bgColor = options.bgColor || {};
  if (bgColor.red === undefined) {
    bgColor.red = maxValue;
  }
  if (bgColor.green === undefined) {
    bgColor.green = maxValue;
  }
  if (bgColor.blue === undefined) {
    bgColor.blue = maxValue;
  }

  function getRGBA() {
    var red;
    var green;
    var blue;
    var alpha = maxValue;
    switch (options.inputColorType) {
      case constants.COLORTYPE_COLOR_ALPHA:
        alpha = data[inIndex + 3];
        red = data[inIndex];
        green = data[inIndex + 1];
        blue = data[inIndex + 2];
        break;
      case constants.COLORTYPE_COLOR:
        red = data[inIndex];
        green = data[inIndex + 1];
        blue = data[inIndex + 2];
        break;
      case constants.COLORTYPE_ALPHA:
        alpha = data[inIndex + 1];
        red = data[inIndex];
        green = red;
        blue = red;
        break;
      case constants.COLORTYPE_GRAYSCALE:
        red = data[inIndex];
        green = red;
        blue = red;
        break;
      default:
        throw new Error('input color type:' + options.inputColorType + ' is not supported at present');
    }

    if (options.inputHasAlpha) {
      if (!outHasAlpha) {
        alpha /= maxValue;
        red = Math.min(Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0), maxValue);
        green = Math.min(Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0), maxValue);
        blue = Math.min(Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0), maxValue);
      }
    }
    return { red: red, green: green, blue: blue, alpha: alpha };
  }

  for (var y = 0; y < height; y++) {
    for (var x = 0; x < width; x++) {
      var rgba = getRGBA(data, inIndex);

      switch (options.colorType) {
        case constants.COLORTYPE_COLOR_ALPHA:
        case constants.COLORTYPE_COLOR:
          if (options.bitDepth === 8) {
            outData[outIndex] = rgba.red;
            outData[outIndex + 1] = rgba.green;
            outData[outIndex + 2] = rgba.blue;
            if (outHasAlpha) {
              outData[outIndex + 3] = rgba.alpha;
            }
          }
          else {
            outData.writeUInt16BE(rgba.red, outIndex);
            outData.writeUInt16BE(rgba.green, outIndex + 2);
            outData.writeUInt16BE(rgba.blue, outIndex + 4);
            if (outHasAlpha) {
              outData.writeUInt16BE(rgba.alpha, outIndex + 6);
            }
          }
          break;
        case constants.COLORTYPE_ALPHA:
        case constants.COLORTYPE_GRAYSCALE:
          // Convert to grayscale and alpha
          var grayscale = (rgba.red + rgba.green + rgba.blue) / 3;
          if (options.bitDepth === 8) {
            outData[outIndex] = grayscale;
            if (outHasAlpha) {
              outData[outIndex + 1] = rgba.alpha;
            }
          }
          else {
            outData.writeUInt16BE(grayscale, outIndex);
            if (outHasAlpha) {
              outData.writeUInt16BE(rgba.alpha, outIndex + 2);
            }
          }
          break;
        default:
          throw new Error('unrecognised color Type ' + options.colorType);
      }

      inIndex += inBpp;
      outIndex += outBpp;
    }
  }

  return outData;
};

}).call(this,require("buffer").Buffer)
},{"./constants":4,"buffer":32}],3:[function(require,module,exports){
(function (process,Buffer){
'use strict';


var util = require('util');
var Stream = require('stream');


var ChunkStream = module.exports = function() {
  Stream.call(this);

  this._buffers = [];
  this._buffered = 0;

  this._reads = [];
  this._paused = false;

  this._encoding = 'utf8';
  this.writable = true;
};
util.inherits(ChunkStream, Stream);


ChunkStream.prototype.read = function(length, callback) {

  this._reads.push({
    length: Math.abs(length), // if length < 0 then at most this length
    allowLess: length < 0,
    func: callback
  });

  process.nextTick(function() {
    this._process();

    // its paused and there is not enought data then ask for more
    if (this._paused && this._reads.length > 0) {
      this._paused = false;

      this.emit('drain');
    }
  }.bind(this));
};

ChunkStream.prototype.write = function(data, encoding) {

  if (!this.writable) {
    this.emit('error', new Error('Stream not writable'));
    return false;
  }

  var dataBuffer;
  if (Buffer.isBuffer(data)) {
    dataBuffer = data;
  }
  else {
    dataBuffer = new Buffer(data, encoding || this._encoding);
  }

  this._buffers.push(dataBuffer);
  this._buffered += dataBuffer.length;

  this._process();

  // ok if there are no more read requests
  if (this._reads && this._reads.length === 0) {
    this._paused = true;
  }

  return this.writable && !this._paused;
};

ChunkStream.prototype.end = function(data, encoding) {

  if (data) {
    this.write(data, encoding);
  }

  this.writable = false;

  // already destroyed
  if (!this._buffers) {
    return;
  }

  // enqueue or handle end
  if (this._buffers.length === 0) {
    this._end();
  }
  else {
    this._buffers.push(null);
    this._process();
  }
};

ChunkStream.prototype.destroySoon = ChunkStream.prototype.end;

ChunkStream.prototype._end = function() {

  if (this._reads.length > 0) {
    this.emit('error',
      new Error('Unexpected end of input')
    );
  }

  this.destroy();
};

ChunkStream.prototype.destroy = function() {

  if (!this._buffers) {
    return;
  }

  this.writable = false;
  this._reads = null;
  this._buffers = null;

  this.emit('close');
};

ChunkStream.prototype._processReadAllowingLess = function(read) {
  // ok there is any data so that we can satisfy this request
  this._reads.shift(); // == read

  // first we need to peek into first buffer
  var smallerBuf = this._buffers[0];

  // ok there is more data than we need
  if (smallerBuf.length > read.length) {

    this._buffered -= read.length;
    this._buffers[0] = smallerBuf.slice(read.length);

    read.func.call(this, smallerBuf.slice(0, read.length));

  }
  else {
    // ok this is less than maximum length so use it all
    this._buffered -= smallerBuf.length;
    this._buffers.shift(); // == smallerBuf

    read.func.call(this, smallerBuf);
  }
};

ChunkStream.prototype._processRead = function(read) {
  this._reads.shift(); // == read

  var pos = 0;
  var count = 0;
  var data = new Buffer(read.length);

  // create buffer for all data
  while (pos < read.length) {

    var buf = this._buffers[count++];
    var len = Math.min(buf.length, read.length - pos);

    buf.copy(data, pos, 0, len);
    pos += len;

    // last buffer wasn't used all so just slice it and leave
    if (len !== buf.length) {
      this._buffers[--count] = buf.slice(len);
    }
  }

  // remove all used buffers
  if (count > 0) {
    this._buffers.splice(0, count);
  }

  this._buffered -= read.length;

  read.func.call(this, data);
};

ChunkStream.prototype._process = function() {

  try {
    // as long as there is any data and read requests
    while (this._buffered > 0 && this._reads && this._reads.length > 0) {

      var read = this._reads[0];

      // read any data (but no more than length)
      if (read.allowLess) {
        this._processReadAllowingLess(read);

      }
      else if (this._buffered >= read.length) {
        // ok we can meet some expectations

        this._processRead(read);
      }
      else {
        // not enought data to satisfy first request in queue
        // so we need to wait for more
        break;
      }
    }

    if (this._buffers && !this.writable) {
      this._end();
    }
  }
  catch (ex) {
    this.emit('error', ex);
  }
};

}).call(this,require('_process'),require("buffer").Buffer)
},{"_process":51,"buffer":32,"stream":64,"util":69}],4:[function(require,module,exports){
'use strict';


module.exports = {

  PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],

  TYPE_IHDR: 0x49484452,
  TYPE_IEND: 0x49454e44,
  TYPE_IDAT: 0x49444154,
  TYPE_PLTE: 0x504c5445,
  TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase
  TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase

  // color-type bits
  COLORTYPE_GRAYSCALE: 0,
  COLORTYPE_PALETTE: 1,
  COLORTYPE_COLOR: 2,
  COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha

  // color-type combinations
  COLORTYPE_PALETTE_COLOR: 3,
  COLORTYPE_COLOR_ALPHA: 6,

  COLORTYPE_TO_BPP_MAP: {
    0: 1,
    2: 3,
    3: 1,
    4: 2,
    6: 4
  },

  GAMMA_DIVISION: 100000
};

},{}],5:[function(require,module,exports){
'use strict';

var crcTable = [];

(function() {
  for (var i = 0; i < 256; i++) {
    var currentCrc = i;
    for (var j = 0; j < 8; j++) {
      if (currentCrc & 1) {
        currentCrc = 0xedb88320 ^ (currentCrc >>> 1);
      }
      else {
        currentCrc = currentCrc >>> 1;
      }
    }
    crcTable[i] = currentCrc;
  }
}());

var CrcCalculator = module.exports = function() {
  this._crc = -1;
};

CrcCalculator.prototype.write = function(data) {

  for (var i = 0; i < data.length; i++) {
    this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);
  }
  return true;
};

CrcCalculator.prototype.crc32 = function() {
  return this._crc ^ -1;
};


CrcCalculator.crc32 = function(buf) {

  var crc = -1;
  for (var i = 0; i < buf.length; i++) {
    crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);
  }
  return crc ^ -1;
};

},{}],6:[function(require,module,exports){
(function (Buffer){
'use strict';

var paethPredictor = require('./paeth-predictor');

function filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {

  for (var x = 0; x < byteWidth; x++) {
    rawData[rawPos + x] = pxData[pxPos + x];
  }
}

function filterSumNone(pxData, pxPos, byteWidth) {

  var sum = 0;
  var length = pxPos + byteWidth;

  for (var i = pxPos; i < length; i++) {
    sum += Math.abs(pxData[i]);
  }
  return sum;
}

function filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {

  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var val = pxData[pxPos + x] - left;

    rawData[rawPos + x] = val;
  }
}

function filterSumSub(pxData, pxPos, byteWidth, bpp) {

  var sum = 0;
  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var val = pxData[pxPos + x] - left;

    sum += Math.abs(val);
  }

  return sum;
}

function filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {

  for (var x = 0; x < byteWidth; x++) {

    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var val = pxData[pxPos + x] - up;

    rawData[rawPos + x] = val;
  }
}

function filterSumUp(pxData, pxPos, byteWidth) {

  var sum = 0;
  var length = pxPos + byteWidth;
  for (var x = pxPos; x < length; x++) {

    var up = pxPos > 0 ? pxData[x - byteWidth] : 0;
    var val = pxData[x] - up;

    sum += Math.abs(val);
  }

  return sum;
}

function filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {

  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var val = pxData[pxPos + x] - ((left + up) >> 1);

    rawData[rawPos + x] = val;
  }
}

function filterSumAvg(pxData, pxPos, byteWidth, bpp) {

  var sum = 0;
  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var val = pxData[pxPos + x] - ((left + up) >> 1);

    sum += Math.abs(val);
  }

  return sum;
}

function filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {

  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var upleft = pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;
    var val = pxData[pxPos + x] - paethPredictor(left, up, upleft);

    rawData[rawPos + x] = val;
  }
}

function filterSumPaeth(pxData, pxPos, byteWidth, bpp) {
  var sum = 0;
  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var upleft = pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;
    var val = pxData[pxPos + x] - paethPredictor(left, up, upleft);

    sum += Math.abs(val);
  }

  return sum;
}

var filters = {
  0: filterNone,
  1: filterSub,
  2: filterUp,
  3: filterAvg,
  4: filterPaeth
};

var filterSums = {
  0: filterSumNone,
  1: filterSumSub,
  2: filterSumUp,
  3: filterSumAvg,
  4: filterSumPaeth
};

module.exports = function(pxData, width, height, options, bpp) {

  var filterTypes;
  if (!('filterType' in options) || options.filterType === -1) {
    filterTypes = [0, 1, 2, 3, 4];
  }
  else if (typeof options.filterType === 'number') {
    filterTypes = [options.filterType];
  }
  else {
    throw new Error('unrecognised filter types');
  }

  if (options.bitDepth === 16) {
    bpp *= 2;
  }
  var byteWidth = width * bpp;
  var rawPos = 0;
  var pxPos = 0;
  var rawData = new Buffer((byteWidth + 1) * height);

  var sel = filterTypes[0];

  for (var y = 0; y < height; y++) {

    if (filterTypes.length > 1) {
      // find best filter for this line (with lowest sum of values)
      var min = Infinity;

      for (var i = 0; i < filterTypes.length; i++) {
        var sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);
        if (sum < min) {
          sel = filterTypes[i];
          min = sum;
        }
      }
    }

    rawData[rawPos] = sel;
    rawPos++;
    filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);
    rawPos += byteWidth;
    pxPos += byteWidth;
  }
  return rawData;
};

}).call(this,require("buffer").Buffer)
},{"./paeth-predictor":15,"buffer":32}],7:[function(require,module,exports){
(function (Buffer){
'use strict';

var util = require('util');
var ChunkStream = require('./chunkstream');
var Filter = require('./filter-parse');


var FilterAsync = module.exports = function(bitmapInfo) {
  ChunkStream.call(this);

  var buffers = [];
  var that = this;
  this._filter = new Filter(bitmapInfo, {
    read: this.read.bind(this),
    write: function(buffer) {
      buffers.push(buffer);
    },
    complete: function() {
      that.emit('complete', Buffer.concat(buffers));
    }
  });

  this._filter.start();
};
util.inherits(FilterAsync, ChunkStream);

}).call(this,require("buffer").Buffer)
},{"./chunkstream":3,"./filter-parse":9,"buffer":32,"util":69}],8:[function(require,module,exports){
(function (Buffer){
'use strict';

var SyncReader = require('./sync-reader');
var Filter = require('./filter-parse');


exports.process = function(inBuffer, bitmapInfo) {

  var outBuffers = [];
  var reader = new SyncReader(inBuffer);
  var filter = new Filter(bitmapInfo, {
    read: reader.read.bind(reader),
    write: function(bufferPart) {
      outBuffers.push(bufferPart);
    },
    complete: function() {
    }
  });

  filter.start();
  reader.process();

  return Buffer.concat(outBuffers);
};
}).call(this,require("buffer").Buffer)
},{"./filter-parse":9,"./sync-reader":22,"buffer":32}],9:[function(require,module,exports){
(function (Buffer){
'use strict';

var interlaceUtils = require('./interlace');
var paethPredictor = require('./paeth-predictor');

function getByteWidth(width, bpp, depth) {
  var byteWidth = width * bpp;
  if (depth !== 8) {
    byteWidth = Math.ceil(byteWidth / (8 / depth));
  }
  return byteWidth;
}

var Filter = module.exports = function(bitmapInfo, dependencies) {

  var width = bitmapInfo.width;
  var height = bitmapInfo.height;
  var interlace = bitmapInfo.interlace;
  var bpp = bitmapInfo.bpp;
  var depth = bitmapInfo.depth;

  this.read = dependencies.read;
  this.write = dependencies.write;
  this.complete = dependencies.complete;

  this._imageIndex = 0;
  this._images = [];
  if (interlace) {
    var passes = interlaceUtils.getImagePasses(width, height);
    for (var i = 0; i < passes.length; i++) {
      this._images.push({
        byteWidth: getByteWidth(passes[i].width, bpp, depth),
        height: passes[i].height,
        lineIndex: 0
      });
    }
  }
  else {
    this._images.push({
      byteWidth: getByteWidth(width, bpp, depth),
      height: height,
      lineIndex: 0
    });
  }

  // when filtering the line we look at the pixel to the left
  // the spec also says it is done on a byte level regardless of the number of pixels
  // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back
  // a pixel rather than just a different byte part. However if we are sub byte, we ignore.
  if (depth === 8) {
    this._xComparison = bpp;
  }
  else if (depth === 16) {
    this._xComparison = bpp * 2;
  }
  else {
    this._xComparison = 1;
  }
};

Filter.prototype.start = function() {
  this.read(this._images[this._imageIndex].byteWidth + 1, this._reverseFilterLine.bind(this));
};

Filter.prototype._unFilterType1 = function(rawData, unfilteredLine, byteWidth) {

  var xComparison = this._xComparison;
  var xBiggerThan = xComparison - 1;

  for (var x = 0; x < byteWidth; x++) {
    var rawByte = rawData[1 + x];
    var f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;
    unfilteredLine[x] = rawByte + f1Left;
  }
};

Filter.prototype._unFilterType2 = function(rawData, unfilteredLine, byteWidth) {

  var lastLine = this._lastLine;

  for (var x = 0; x < byteWidth; x++) {
    var rawByte = rawData[1 + x];
    var f2Up = lastLine ? lastLine[x] : 0;
    unfilteredLine[x] = rawByte + f2Up;
  }
};

Filter.prototype._unFilterType3 = function(rawData, unfilteredLine, byteWidth) {

  var xComparison = this._xComparison;
  var xBiggerThan = xComparison - 1;
  var lastLine = this._lastLine;

  for (var x = 0; x < byteWidth; x++) {
    var rawByte = rawData[1 + x];
    var f3Up = lastLine ? lastLine[x] : 0;
    var f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;
    var f3Add = Math.floor((f3Left + f3Up) / 2);
    unfilteredLine[x] = rawByte + f3Add;
  }
};

Filter.prototype._unFilterType4 = function(rawData, unfilteredLine, byteWidth) {

  var xComparison = this._xComparison;
  var xBiggerThan = xComparison - 1;
  var lastLine = this._lastLine;

  for (var x = 0; x < byteWidth; x++) {
    var rawByte = rawData[1 + x];
    var f4Up = lastLine ? lastLine[x] : 0;
    var f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;
    var f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;
    var f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);
    unfilteredLine[x] = rawByte + f4Add;
  }
};

Filter.prototype._reverseFilterLine = function(rawData) {

  var filter = rawData[0];
  var unfilteredLine;
  var currentImage = this._images[this._imageIndex];
  var byteWidth = currentImage.byteWidth;

  if (filter === 0) {
    unfilteredLine = rawData.slice(1, byteWidth + 1);
  }
  else {

    unfilteredLine = new Buffer(byteWidth);

    switch (filter) {
      case 1:
        this._unFilterType1(rawData, unfilteredLine, byteWidth);
        break;
      case 2:
        this._unFilterType2(rawData, unfilteredLine, byteWidth);
        break;
      case 3:
        this._unFilterType3(rawData, unfilteredLine, byteWidth);
        break;
      case 4:
        this._unFilterType4(rawData, unfilteredLine, byteWidth);
        break;
      default:
        throw new Error('Unrecognised filter type - ' + filter);
    }
  }

  this.write(unfilteredLine);

  currentImage.lineIndex++;
  if (currentImage.lineIndex >= currentImage.height) {
    this._lastLine = null;
    this._imageIndex++;
    currentImage = this._images[this._imageIndex];
  }
  else {
    this._lastLine = unfilteredLine;
  }

  if (currentImage) {
    // read, using the byte width that may be from the new current image
    this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));
  }
  else {
    this._lastLine = null;
    this.complete();
  }
};

}).call(this,require("buffer").Buffer)
},{"./interlace":11,"./paeth-predictor":15,"buffer":32}],10:[function(require,module,exports){
(function (Buffer){
'use strict';

function dePalette(indata, outdata, width, height, palette) {
  var pxPos = 0;
  // use values from palette
  for (var y = 0; y < height; y++) {
    for (var x = 0; x < width; x++) {
      var color = palette[indata[pxPos]];

      if (!color) {
        throw new Error('index ' + indata[pxPos] + ' not in palette');
      }

      for (var i = 0; i < 4; i++) {
        outdata[pxPos + i] = color[i];
      }
      pxPos += 4;
    }
  }
}

function replaceTransparentColor(indata, outdata, width, height, transColor) {
  var pxPos = 0;
  for (var y = 0; y < height; y++) {
    for (var x = 0; x < width; x++) {
      var makeTrans = false;

      if (transColor.length === 1) {
        if (transColor[0] === indata[pxPos]) {
          makeTrans = true;
        }
      }
      else if (transColor[0] === indata[pxPos] && transColor[1] === indata[pxPos + 1] && transColor[2] === indata[pxPos + 2]) {
        makeTrans = true;
      }
      if (makeTrans) {
        for (var i = 0; i < 4; i++) {
          outdata[pxPos + i] = 0;
        }
      }
      pxPos += 4;
    }
  }
}

function scaleDepth(indata, outdata, width, height, depth) {
  var maxOutSample = 255;
  var maxInSample = Math.pow(2, depth) - 1;
  var pxPos = 0;

  for (var y = 0; y < height; y++) {
    for (var x = 0; x < width; x++) {
      for (var i = 0; i < 4; i++) {
        outdata[pxPos + i] = Math.floor((indata[pxPos + i] * maxOutSample) / maxInSample + 0.5);
      }
      pxPos += 4;
    }
  }
}

module.exports = function(indata, imageData) {

  var depth = imageData.depth;
  var width = imageData.width;
  var height = imageData.height;
  var colorType = imageData.colorType;
  var transColor = imageData.transColor;
  var palette = imageData.palette;

  var outdata = indata; // only different for 16 bits

  if (colorType === 3) { // paletted
    dePalette(indata, outdata, width, height, palette);
  }
  else {
    if (transColor) {
      replaceTransparentColor(indata, outdata, width, height, transColor);
    }
    // if it needs scaling
    if (depth !== 8) {
      // if we need to change the buffer size
      if (depth === 16) {
        outdata = new Buffer(width * height * 4);
      }
      scaleDepth(indata, outdata, width, height, depth);
    }
  }
  return outdata;
};

}).call(this,require("buffer").Buffer)
},{"buffer":32}],11:[function(require,module,exports){
'use strict';

// Adam 7
//   0 1 2 3 4 5 6 7
// 0 x 6 4 6 x 6 4 6
// 1 7 7 7 7 7 7 7 7
// 2 5 6 5 6 5 6 5 6
// 3 7 7 7 7 7 7 7 7
// 4 3 6 4 6 3 6 4 6
// 5 7 7 7 7 7 7 7 7
// 6 5 6 5 6 5 6 5 6
// 7 7 7 7 7 7 7 7 7


var imagePasses = [
  { // pass 1 - 1px
    x: [0],
    y: [0]
  },
  { // pass 2 - 1px
    x: [4],
    y: [0]
  },
  { // pass 3 - 2px
    x: [0, 4],
    y: [4]
  },
  { // pass 4 - 4px
    x: [2, 6],
    y: [0, 4]
  },
  { // pass 5 - 8px
    x: [0, 2, 4, 6],
    y: [2, 6]
  },
  { // pass 6 - 16px
    x: [1, 3, 5, 7],
    y: [0, 2, 4, 6]
  },
  { // pass 7 - 32px
    x: [0, 1, 2, 3, 4, 5, 6, 7],
    y: [1, 3, 5, 7]
  }
];

exports.getImagePasses = function(width, height) {
  var images = [];
  var xLeftOver = width % 8;
  var yLeftOver = height % 8;
  var xRepeats = (width - xLeftOver) / 8;
  var yRepeats = (height - yLeftOver) / 8;
  for (var i = 0; i < imagePasses.length; i++) {
    var pass = imagePasses[i];
    var passWidth = xRepeats * pass.x.length;
    var passHeight = yRepeats * pass.y.length;
    for (var j = 0; j < pass.x.length; j++) {
      if (pass.x[j] < xLeftOver) {
        passWidth++;
      }
      else {
        break;
      }
    }
    for (j = 0; j < pass.y.length; j++) {
      if (pass.y[j] < yLeftOver) {
        passHeight++;
      }
      else {
        break;
      }
    }
    if (passWidth > 0 && passHeight > 0) {
      images.push({ width: passWidth, height: passHeight, index: i });
    }
  }
  return images;
};

exports.getInterlaceIterator = function(width) {
  return function(x, y, pass) {
    var outerXLeftOver = x % imagePasses[pass].x.length;
    var outerX = (((x - outerXLeftOver) / imagePasses[pass].x.length) * 8) + imagePasses[pass].x[outerXLeftOver];
    var outerYLeftOver = y % imagePasses[pass].y.length;
    var outerY = (((y - outerYLeftOver) / imagePasses[pass].y.length) * 8) + imagePasses[pass].y[outerYLeftOver];
    return (outerX * 4) + (outerY * width * 4);
  };
};
},{}],12:[function(require,module,exports){
(function (Buffer){
'use strict';

var util = require('util');
var Stream = require('stream');
var constants = require('./constants');
var Packer = require('./packer');

var PackerAsync = module.exports = function(opt) {
  Stream.call(this);

  var options = opt || {};

  this._packer = new Packer(options);
  this._deflate = this._packer.createDeflate();

  this.readable = true;
};
util.inherits(PackerAsync, Stream);


PackerAsync.prototype.pack = function(data, width, height, gamma) {
  // Signature
  this.emit('data', new Buffer(constants.PNG_SIGNATURE));
  this.emit('data', this._packer.packIHDR(width, height));

  if (gamma) {
    this.emit('data', this._packer.packGAMA(gamma));
  }

  var filteredData = this._packer.filterData(data, width, height);

  // compress it
  this._deflate.on('error', this.emit.bind(this, 'error'));

  this._deflate.on('data', function(compressedData) {
    this.emit('data', this._packer.packIDAT(compressedData));
  }.bind(this));

  this._deflate.on('end', function() {
    this.emit('data', this._packer.packIEND());
    this.emit('end');
  }.bind(this));

  this._deflate.end(filteredData);
};

}).call(this,require("buffer").Buffer)
},{"./constants":4,"./packer":14,"buffer":32,"stream":64,"util":69}],13:[function(require,module,exports){
(function (Buffer){
'use strict';

var hasSyncZlib = true;
var zlib = require('zlib');
if (!zlib.deflateSync) {
  hasSyncZlib = false;
}
var constants = require('./constants');
var Packer = require('./packer');

module.exports = function(metaData, opt) {

  if (!hasSyncZlib) {
    throw new Error('To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0');
  }

  var options = opt || {};

  var packer = new Packer(options);

  var chunks = [];

  // Signature
  chunks.push(new Buffer(constants.PNG_SIGNATURE));

  // Header
  chunks.push(packer.packIHDR(metaData.width, metaData.height));

  if (metaData.gamma) {
    chunks.push(packer.packGAMA(metaData.gamma));
  }

  var filteredData = packer.filterData(metaData.data, metaData.width, metaData.height);

  // compress it
  var compressedData = zlib.deflateSync(filteredData, packer.getDeflateOptions());
  filteredData = null;

  if (!compressedData || !compressedData.length) {
    throw new Error('bad png - invalid compressed data response');
  }
  chunks.push(packer.packIDAT(compressedData));

  // End
  chunks.push(packer.packIEND());

  return Buffer.concat(chunks);
};

}).call(this,require("buffer").Buffer)
},{"./constants":4,"./packer":14,"buffer":32,"zlib":30}],14:[function(require,module,exports){
(function (Buffer){
'use strict';

var constants = require('./constants');
var CrcStream = require('./crc');
var bitPacker = require('./bitpacker');
var filter = require('./filter-pack');
var zlib = require('zlib');

var Packer = module.exports = function(options) {
  this._options = options;

  options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;
  options.deflateLevel = options.deflateLevel != null ? options.deflateLevel : 9;
  options.deflateStrategy = options.deflateStrategy != null ? options.deflateStrategy : 3;
  options.inputHasAlpha = options.inputHasAlpha != null ? options.inputHasAlpha : true;
  options.deflateFactory = options.deflateFactory || zlib.createDeflate;
  options.bitDepth = options.bitDepth || 8;
  // This is outputColorType
  options.colorType = (typeof options.colorType === 'number') ? options.colorType : constants.COLORTYPE_COLOR_ALPHA;
  options.inputColorType = (typeof options.inputColorType === 'number') ? options.inputColorType : constants.COLORTYPE_COLOR_ALPHA;

  if ([
    constants.COLORTYPE_GRAYSCALE,
    constants.COLORTYPE_COLOR,
    constants.COLORTYPE_COLOR_ALPHA,
    constants.COLORTYPE_ALPHA
  ].indexOf(options.colorType) === -1) {
    throw new Error('option color type:' + options.colorType + ' is not supported at present');
  }
  if ([
    constants.COLORTYPE_GRAYSCALE,
    constants.COLORTYPE_COLOR,
    constants.COLORTYPE_COLOR_ALPHA,
    constants.COLORTYPE_ALPHA
  ].indexOf(options.inputColorType) === -1) {
    throw new Error('option input color type:' + options.inputColorType + ' is not supported at present');
  }
  if (options.bitDepth !== 8 && options.bitDepth !== 16) {
    throw new Error('option bit depth:' + options.bitDepth + ' is not supported at present');
  }
};

Packer.prototype.getDeflateOptions = function() {
  return {
    chunkSize: this._options.deflateChunkSize,
    level: this._options.deflateLevel,
    strategy: this._options.deflateStrategy
  };
};

Packer.prototype.createDeflate = function() {
  return this._options.deflateFactory(this.getDeflateOptions());
};

Packer.prototype.filterData = function(data, width, height) {
  // convert to correct format for filtering (e.g. right bpp and bit depth)
  var packedData = bitPacker(data, width, height, this._options);

  // filter pixel data
  var bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];
  var filteredData = filter(packedData, width, height, this._options, bpp);
  return filteredData;
};

Packer.prototype._packChunk = function(type, data) {

  var len = (data ? data.length : 0);
  var buf = new Buffer(len + 12);

  buf.writeUInt32BE(len, 0);
  buf.writeUInt32BE(type, 4);

  if (data) {
    data.copy(buf, 8);
  }

  buf.writeInt32BE(CrcStream.crc32(buf.slice(4, buf.length - 4)), buf.length - 4);
  return buf;
};

Packer.prototype.packGAMA = function(gamma) {
  var buf = new Buffer(4);
  buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);
  return this._packChunk(constants.TYPE_gAMA, buf);
};

Packer.prototype.packIHDR = function(width, height) {

  var buf = new Buffer(13);
  buf.writeUInt32BE(width, 0);
  buf.writeUInt32BE(height, 4);
  buf[8] = this._options.bitDepth; // Bit depth
  buf[9] = this._options.colorType; // colorType
  buf[10] = 0; // compression
  buf[11] = 0; // filter
  buf[12] = 0; // interlace

  return this._packChunk(constants.TYPE_IHDR, buf);
};

Packer.prototype.packIDAT = function(data) {
  return this._packChunk(constants.TYPE_IDAT, data);
};

Packer.prototype.packIEND = function() {
  return this._packChunk(constants.TYPE_IEND, null);
};

}).call(this,require("buffer").Buffer)
},{"./bitpacker":2,"./constants":4,"./crc":5,"./filter-pack":6,"buffer":32,"zlib":30}],15:[function(require,module,exports){
'use strict';

module.exports = function paethPredictor(left, above, upLeft) {

  var paeth = left + above - upLeft;
  var pLeft = Math.abs(paeth - left);
  var pAbove = Math.abs(paeth - above);
  var pUpLeft = Math.abs(paeth - upLeft);

  if (pLeft <= pAbove && pLeft <= pUpLeft) {
    return left;
  }
  if (pAbove <= pUpLeft) {
    return above;
  }
  return upLeft;
};
},{}],16:[function(require,module,exports){
'use strict';

var util = require('util');
var zlib = require('zlib');
var ChunkStream = require('./chunkstream');
var FilterAsync = require('./filter-parse-async');
var Parser = require('./parser');
var bitmapper = require('./bitmapper');
var formatNormaliser = require('./format-normaliser');

var ParserAsync = module.exports = function(options) {
  ChunkStream.call(this);

  this._parser = new Parser(options, {
    read: this.read.bind(this),
    error: this._handleError.bind(this),
    metadata: this._handleMetaData.bind(this),
    gamma: this.emit.bind(this, 'gamma'),
    palette: this._handlePalette.bind(this),
    transColor: this._handleTransColor.bind(this),
    finished: this._finished.bind(this),
    inflateData: this._inflateData.bind(this),
    simpleTransparency: this._simpleTransparency.bind(this),
    headersFinished: this._headersFinished.bind(this)
  });
  this._options = options;
  this.writable = true;

  this._parser.start();
};
util.inherits(ParserAsync, ChunkStream);


ParserAsync.prototype._handleError = function(err) {

  this.emit('error', err);

  this.writable = false;

  this.destroy();

  if (this._inflate && this._inflate.destroy) {
    this._inflate.destroy();
  }

  if (this._filter) {
    this._filter.destroy();
    // For backward compatibility with Node 7 and below.
    // Suppress errors due to _inflate calling write() even after
    // it's destroy()'ed.
    this._filter.on('error', function() {});
  }

  this.errord = true;
};

ParserAsync.prototype._inflateData = function(data) {
  if (!this._inflate) {
    if (this._bitmapInfo.interlace) {
      this._inflate = zlib.createInflate();

      this._inflate.on('error', this.emit.bind(this, 'error'));
      this._filter.on('complete', this._complete.bind(this));

      this._inflate.pipe(this._filter);
    }
    else {
      var rowSize = ((this._bitmapInfo.width * this._bitmapInfo.bpp * this._bitmapInfo.depth + 7) >> 3) + 1;
      var imageSize = rowSize * this._bitmapInfo.height;
      var chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);

      this._inflate = zlib.createInflate({ chunkSize: chunkSize });
      var leftToInflate = imageSize;

      var emitError = this.emit.bind(this, 'error');
      this._inflate.on('error', function(err) {
        if (!leftToInflate) {
          return;
        }

        emitError(err);
      });
      this._filter.on('complete', this._complete.bind(this));

      var filterWrite = this._filter.write.bind(this._filter);
      this._inflate.on('data', function(chunk) {
        if (!leftToInflate) {
          return;
        }

        if (chunk.length > leftToInflate) {
          chunk = chunk.slice(0, leftToInflate);
        }

        leftToInflate -= chunk.length;

        filterWrite(chunk);
      });

      this._inflate.on('end', this._filter.end.bind(this._filter));
    }
  }
  this._inflate.write(data);
};

ParserAsync.prototype._handleMetaData = function(metaData) {
  this._metaData = metaData;
  this._bitmapInfo = Object.create(metaData);

  this._filter = new FilterAsync(this._bitmapInfo);
};

ParserAsync.prototype._handleTransColor = function(transColor) {
  this._bitmapInfo.transColor = transColor;
};

ParserAsync.prototype._handlePalette = function(palette) {
  this._bitmapInfo.palette = palette;
};

ParserAsync.prototype._simpleTransparency = function() {
  this._metaData.alpha = true;
};

ParserAsync.prototype._headersFinished = function() {
  // Up until this point, we don't know if we have a tRNS chunk (alpha)
  // so we can't emit metadata any earlier
  this.emit('metadata', this._metaData);
};

ParserAsync.prototype._finished = function() {
  if (this.errord) {
    return;
  }

  if (!this._inflate) {
    this.emit('error', 'No Inflate block');
  }
  else {
    // no more data to inflate
    this._inflate.end();
  }
  this.destroySoon();
};

ParserAsync.prototype._complete = function(filteredData) {

  if (this.errord) {
    return;
  }

  try {
    var bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);

    var normalisedBitmapData = formatNormaliser(bitmapData, this._bitmapInfo);
    bitmapData = null;
  }
  catch (ex) {
    this._handleError(ex);
    return;
  }

  this.emit('parsed', normalisedBitmapData);
};

},{"./bitmapper":1,"./chunkstream":3,"./filter-parse-async":7,"./format-normaliser":10,"./parser":18,"util":69,"zlib":30}],17:[function(require,module,exports){
(function (Buffer){
'use strict';

var hasSyncZlib = true;
var zlib = require('zlib');
var inflateSync = require('./sync-inflate');
if (!zlib.deflateSync) {
  hasSyncZlib = false;
}
var SyncReader = require('./sync-reader');
var FilterSync = require('./filter-parse-sync');
var Parser = require('./parser');
var bitmapper = require('./bitmapper');
var formatNormaliser = require('./format-normaliser');


module.exports = function(buffer, options) {

  if (!hasSyncZlib) {
    throw new Error('To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0');
  }

  var err;
  function handleError(_err_) {
    err = _err_;
  }

  var metaData;
  function handleMetaData(_metaData_) {
    metaData = _metaData_;
  }

  function handleTransColor(transColor) {
    metaData.transColor = transColor;
  }

  function handlePalette(palette) {
    metaData.palette = palette;
  }

  function handleSimpleTransparency() {
    metaData.alpha = true;
  }

  var gamma;
  function handleGamma(_gamma_) {
    gamma = _gamma_;
  }

  var inflateDataList = [];
  function handleInflateData(inflatedData) {
    inflateDataList.push(inflatedData);
  }

  var reader = new SyncReader(buffer);

  var parser = new Parser(options, {
    read: reader.read.bind(reader),
    error: handleError,
    metadata: handleMetaData,
    gamma: handleGamma,
    palette: handlePalette,
    transColor: handleTransColor,
    inflateData: handleInflateData,
    simpleTransparency: handleSimpleTransparency
  });

  parser.start();
  reader.process();

  if (err) {
    throw err;
  }

  //join together the inflate datas
  var inflateData = Buffer.concat(inflateDataList);
  inflateDataList.length = 0;

  var inflatedData;
  if (metaData.interlace) {
    inflatedData = zlib.inflateSync(inflateData);
  }
  else {
    var rowSize = ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;
    var imageSize = rowSize * metaData.height;
    inflatedData = inflateSync(inflateData, { chunkSize: imageSize, maxLength: imageSize });
  }
  inflateData = null;

  if (!inflatedData || !inflatedData.length) {
    throw new Error('bad png - invalid inflate data response');
  }

  var unfilteredData = FilterSync.process(inflatedData, metaData);
  inflateData = null;

  var bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);
  unfilteredData = null;

  var normalisedBitmapData = formatNormaliser(bitmapData, metaData);

  metaData.data = normalisedBitmapData;
  metaData.gamma = gamma || 0;

  return metaData;
};

}).call(this,require("buffer").Buffer)
},{"./bitmapper":1,"./filter-parse-sync":8,"./format-normaliser":10,"./parser":18,"./sync-inflate":21,"./sync-reader":22,"buffer":32,"zlib":30}],18:[function(require,module,exports){
(function (Buffer){
'use strict';

var constants = require('./constants');
var CrcCalculator = require('./crc');


var Parser = module.exports = function(options, dependencies) {

  this._options = options;
  options.checkCRC = options.checkCRC !== false;

  this._hasIHDR = false;
  this._hasIEND = false;
  this._emittedHeadersFinished = false;

  // input flags/metadata
  this._palette = [];
  this._colorType = 0;

  this._chunks = {};
  this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);
  this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);
  this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);
  this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);
  this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);
  this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);

  this.read = dependencies.read;
  this.error = dependencies.error;
  this.metadata = dependencies.metadata;
  this.gamma = dependencies.gamma;
  this.transColor = dependencies.transColor;
  this.palette = dependencies.palette;
  this.parsed = dependencies.parsed;
  this.inflateData = dependencies.inflateData;
  this.finished = dependencies.finished;
  this.simpleTransparency = dependencies.simpleTransparency;
  this.headersFinished = dependencies.headersFinished || function() {};
};

Parser.prototype.start = function() {
  this.read(constants.PNG_SIGNATURE.length,
    this._parseSignature.bind(this)
  );
};

Parser.prototype._parseSignature = function(data) {

  var signature = constants.PNG_SIGNATURE;

  for (var i = 0; i < signature.length; i++) {
    if (data[i] !== signature[i]) {
      this.error(new Error('Invalid file signature'));
      return;
    }
  }
  this.read(8, this._parseChunkBegin.bind(this));
};

Parser.prototype._parseChunkBegin = function(data) {

  // chunk content length
  var length = data.readUInt32BE(0);

  // chunk type
  var type = data.readUInt32BE(4);
  var name = '';
  for (var i = 4; i < 8; i++) {
    name += String.fromCharCode(data[i]);
  }

  //console.log('chunk ', name, length);

  // chunk flags
  var ancillary = Boolean(data[4] & 0x20); // or critical
  //    priv = Boolean(data[5] & 0x20), // or public
  //    safeToCopy = Boolean(data[7] & 0x20); // or unsafe

  if (!this._hasIHDR && type !== constants.TYPE_IHDR) {
    this.error(new Error('Expected IHDR on beggining'));
    return;
  }

  this._crc = new CrcCalculator();
  this._crc.write(new Buffer(name));

  if (this._chunks[type]) {
    return this._chunks[type](length);
  }

  if (!ancillary) {
    this.error(new Error('Unsupported critical chunk type ' + name));
    return;
  }

  this.read(length + 4, this._skipChunk.bind(this));
};

Parser.prototype._skipChunk = function(/*data*/) {
  this.read(8, this._parseChunkBegin.bind(this));
};

Parser.prototype._handleChunkEnd = function() {
  this.read(4, this._parseChunkEnd.bind(this));
};

Parser.prototype._parseChunkEnd = function(data) {

  var fileCrc = data.readInt32BE(0);
  var calcCrc = this._crc.crc32();

  // check CRC
  if (this._options.checkCRC && calcCrc !== fileCrc) {
    this.error(new Error('Crc error - ' + fileCrc + ' - ' + calcCrc));
    return;
  }

  if (!this._hasIEND) {
    this.read(8, this._parseChunkBegin.bind(this));
  }
};

Parser.prototype._handleIHDR = function(length) {
  this.read(length, this._parseIHDR.bind(this));
};
Parser.prototype._parseIHDR = function(data) {

  this._crc.write(data);

  var width = data.readUInt32BE(0);
  var height = data.readUInt32BE(4);
  var depth = data[8];
  var colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha
  var compr = data[10];
  var filter = data[11];
  var interlace = data[12];

  // console.log('    width', width, 'height', height,
  //     'depth', depth, 'colorType', colorType,
  //     'compr', compr, 'filter', filter, 'interlace', interlace
  // );

  if (depth !== 8 && depth !== 4 && depth !== 2 && depth !== 1 && depth !== 16) {
    this.error(new Error('Unsupported bit depth ' + depth));
    return;
  }
  if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {
    this.error(new Error('Unsupported color type'));
    return;
  }
  if (compr !== 0) {
    this.error(new Error('Unsupported compression method'));
    return;
  }
  if (filter !== 0) {
    this.error(new Error('Unsupported filter method'));
    return;
  }
  if (interlace !== 0 && interlace !== 1) {
    this.error(new Error('Unsupported interlace method'));
    return;
  }

  this._colorType = colorType;

  var bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];

  this._hasIHDR = true;

  this.metadata({
    width: width,
    height: height,
    depth: depth,
    interlace: Boolean(interlace),
    palette: Boolean(colorType & constants.COLORTYPE_PALETTE),
    color: Boolean(colorType & constants.COLORTYPE_COLOR),
    alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),
    bpp: bpp,
    colorType: colorType
  });

  this._handleChunkEnd();
};


Parser.prototype._handlePLTE = function(length) {
  this.read(length, this._parsePLTE.bind(this));
};
Parser.prototype._parsePLTE = function(data) {

  this._crc.write(data);

  var entries = Math.floor(data.length / 3);
  // console.log('Palette:', entries);

  for (var i = 0; i < entries; i++) {
    this._palette.push([
      data[i * 3],
      data[i * 3 + 1],
      data[i * 3 + 2],
      0xff
    ]);
  }

  this.palette(this._palette);

  this._handleChunkEnd();
};

Parser.prototype._handleTRNS = function(length) {
  this.simpleTransparency();
  this.read(length, this._parseTRNS.bind(this));
};
Parser.prototype._parseTRNS = function(data) {

  this._crc.write(data);

  // palette
  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {
    if (this._palette.length === 0) {
      this.error(new Error('Transparency chunk must be after palette'));
      return;
    }
    if (data.length > this._palette.length) {
      this.error(new Error('More transparent colors than palette size'));
      return;
    }
    for (var i = 0; i < data.length; i++) {
      this._palette[i][3] = data[i];
    }
    this.palette(this._palette);
  }

  // for colorType 0 (grayscale) and 2 (rgb)
  // there might be one gray/color defined as transparent
  if (this._colorType === constants.COLORTYPE_GRAYSCALE) {
    // grey, 2 bytes
    this.transColor([data.readUInt16BE(0)]);
  }
  if (this._colorType === constants.COLORTYPE_COLOR) {
    this.transColor([data.readUInt16BE(0), data.readUInt16BE(2), data.readUInt16BE(4)]);
  }

  this._handleChunkEnd();
};

Parser.prototype._handleGAMA = function(length) {
  this.read(length, this._parseGAMA.bind(this));
};
Parser.prototype._parseGAMA = function(data) {

  this._crc.write(data);
  this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);

  this._handleChunkEnd();
};

Parser.prototype._handleIDAT = function(length) {
  if (!this._emittedHeadersFinished) {
    this._emittedHeadersFinished = true;
    this.headersFinished();
  }
  this.read(-length, this._parseIDAT.bind(this, length));
};
Parser.prototype._parseIDAT = function(length, data) {

  this._crc.write(data);

  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR && this._palette.length === 0) {
    throw new Error('Expected palette not found');
  }

  this.inflateData(data);
  var leftOverLength = length - data.length;

  if (leftOverLength > 0) {
    this._handleIDAT(leftOverLength);
  }
  else {
    this._handleChunkEnd();
  }
};

Parser.prototype._handleIEND = function(length) {
  this.read(length, this._parseIEND.bind(this));
};
Parser.prototype._parseIEND = function(data) {

  this._crc.write(data);

  this._hasIEND = true;
  this._handleChunkEnd();

  if (this.finished) {
    this.finished();
  }
};

}).call(this,require("buffer").Buffer)
},{"./constants":4,"./crc":5,"buffer":32}],19:[function(require,module,exports){
'use strict';


var parse = require('./parser-sync');
var pack = require('./packer-sync');


exports.read = function(buffer, options) {

  return parse(buffer, options || {});
};

exports.write = function(png, options) {

  return pack(png, options);
};

},{"./packer-sync":13,"./parser-sync":17}],20:[function(require,module,exports){
(function (process,Buffer){
'use strict';

var util = require('util');
var Stream = require('stream');
var Parser = require('./parser-async');
var Packer = require('./packer-async');
var PNGSync = require('./png-sync');


var PNG = exports.PNG = function(options) {
  Stream.call(this);

  options = options || {}; // eslint-disable-line no-param-reassign

  // coerce pixel dimensions to integers (also coerces undefined -> 0):
  this.width = options.width | 0;
  this.height = options.height | 0;

  this.data = this.width > 0 && this.height > 0 ?
    new Buffer(4 * this.width * this.height) : null;

  if (options.fill && this.data) {
    this.data.fill(0);
  }

  this.gamma = 0;
  this.readable = this.writable = true;

  this._parser = new Parser(options);

  this._parser.on('error', this.emit.bind(this, 'error'));
  this._parser.on('close', this._handleClose.bind(this));
  this._parser.on('metadata', this._metadata.bind(this));
  this._parser.on('gamma', this._gamma.bind(this));
  this._parser.on('parsed', function(data) {
    this.data = data;
    this.emit('parsed', data);
  }.bind(this));

  this._packer = new Packer(options);
  this._packer.on('data', this.emit.bind(this, 'data'));
  this._packer.on('end', this.emit.bind(this, 'end'));
  this._parser.on('close', this._handleClose.bind(this));
  this._packer.on('error', this.emit.bind(this, 'error'));

};
util.inherits(PNG, Stream);

PNG.sync = PNGSync;

PNG.prototype.pack = function() {

  if (!this.data || !this.data.length) {
    this.emit('error', 'No data provided');
    return this;
  }

  process.nextTick(function() {
    this._packer.pack(this.data, this.width, this.height, this.gamma);
  }.bind(this));

  return this;
};


PNG.prototype.parse = function(data, callback) {

  if (callback) {
    var onParsed, onError;

    onParsed = function(parsedData) {
      this.removeListener('error', onError);

      this.data = parsedData;
      callback(null, this);
    }.bind(this);

    onError = function(err) {
      this.removeListener('parsed', onParsed);

      callback(err, null);
    }.bind(this);

    this.once('parsed', onParsed);
    this.once('error', onError);
  }

  this.end(data);
  return this;
};

PNG.prototype.write = function(data) {
  this._parser.write(data);
  return true;
};

PNG.prototype.end = function(data) {
  this._parser.end(data);
};

PNG.prototype._metadata = function(metadata) {
  this.width = metadata.width;
  this.height = metadata.height;

  this.emit('metadata', metadata);
};

PNG.prototype._gamma = function(gamma) {
  this.gamma = gamma;
};

PNG.prototype._handleClose = function() {
  if (!this._parser.writable && !this._packer.readable) {
    this.emit('close');
  }
};


PNG.bitblt = function(src, dst, srcX, srcY, width, height, deltaX, deltaY) { // eslint-disable-line max-params
  // coerce pixel dimensions to integers (also coerces undefined -> 0):
  /* eslint-disable no-param-reassign */
  srcX |= 0;
  srcY |= 0;
  width |= 0;
  height |= 0;
  deltaX |= 0;
  deltaY |= 0;
  /* eslint-enable no-param-reassign */

  if (srcX > src.width || srcY > src.height || srcX + width > src.width || srcY + height > src.height) {
    throw new Error('bitblt reading outside image');
  }

  if (deltaX > dst.width || deltaY > dst.height || deltaX + width > dst.width || deltaY + height > dst.height) {
    throw new Error('bitblt writing outside image');
  }

  for (var y = 0; y < height; y++) {
    src.data.copy(dst.data,
      ((deltaY + y) * dst.width + deltaX) << 2,
      ((srcY + y) * src.width + srcX) << 2,
      ((srcY + y) * src.width + srcX + width) << 2
    );
  }
};


PNG.prototype.bitblt = function(dst, srcX, srcY, width, height, deltaX, deltaY) { // eslint-disable-line max-params

  PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);
  return this;
};

PNG.adjustGamma = function(src) {
  if (src.gamma) {
    for (var y = 0; y < src.height; y++) {
      for (var x = 0; x < src.width; x++) {
        var idx = (src.width * y + x) << 2;

        for (var i = 0; i < 3; i++) {
          var sample = src.data[idx + i] / 255;
          sample = Math.pow(sample, 1 / 2.2 / src.gamma);
          src.data[idx + i] = Math.round(sample * 255);
        }
      }
    }
    src.gamma = 0;
  }
};

PNG.prototype.adjustGamma = function() {
  PNG.adjustGamma(this);
};

}).call(this,require('_process'),require("buffer").Buffer)
},{"./packer-async":12,"./parser-async":16,"./png-sync":19,"_process":51,"buffer":32,"stream":64,"util":69}],21:[function(require,module,exports){
(function (process,Buffer){
'use strict';

var assert = require('assert').ok;
var zlib = require('zlib');
var util = require('util');

var kMaxLength = require('buffer').kMaxLength;

function Inflate(opts) {
  if (!(this instanceof Inflate)) {
    return new Inflate(opts);
  }

  if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {
    opts.chunkSize = zlib.Z_MIN_CHUNK;
  }

  zlib.Inflate.call(this, opts);

  // Node 8 --> 9 compatibility check
  this._offset = this._offset === undefined ? this._outOffset : this._offset;
  this._buffer = this._buffer || this._outBuffer;

  if (opts && opts.maxLength != null) {
    this._maxLength = opts.maxLength;
  }
}

function createInflate(opts) {
  return new Inflate(opts);
}

function _close(engine, callback) {
  if (callback) {
    process.nextTick(callback);
  }

  // Caller may invoke .close after a zlib error (which will null _handle).
  if (!engine._handle) {
    return;
  }

  engine._handle.close();
  engine._handle = null;
}

Inflate.prototype._processChunk = function(chunk, flushFlag, asyncCb) {
  if (typeof asyncCb === 'function') {
    return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);
  }

  var self = this;

  var availInBefore = chunk && chunk.length;
  var availOutBefore = this._chunkSize - this._offset;
  var leftToInflate = this._maxLength;
  var inOff = 0;

  var buffers = [];
  var nread = 0;

  var error;
  this.on('error', function(err) {
    error = err;
  });

  function handleChunk(availInAfter, availOutAfter) {
    if (self._hadError) {
      return;
    }

    var have = availOutBefore - availOutAfter;
    assert(have >= 0, 'have should not go down');

    if (have > 0) {
      var out = self._buffer.slice(self._offset, self._offset + have);
      self._offset += have;

      if (out.length > leftToInflate) {
        out = out.slice(0, leftToInflate);
      }

      buffers.push(out);
      nread += out.length;
      leftToInflate -= out.length;

      if (leftToInflate === 0) {
        return false;
      }
    }

    if (availOutAfter === 0 || self._offset >= self._chunkSize) {
      availOutBefore = self._chunkSize;
      self._offset = 0;
      self._buffer = Buffer.allocUnsafe(self._chunkSize);
    }

    if (availOutAfter === 0) {
      inOff += (availInBefore - availInAfter);
      availInBefore = availInAfter;

      return true;
    }

    return false;
  }

  assert(this._handle, 'zlib binding closed');
  do {
    var res = this._handle.writeSync(flushFlag,
      chunk, // in
      inOff, // in_off
      availInBefore, // in_len
      this._buffer, // out
      this._offset, //out_off
      availOutBefore); // out_len
    // Node 8 --> 9 compatibility check
    res = res || this._writeState;
  } while (!this._hadError && handleChunk(res[0], res[1]));

  if (this._hadError) {
    throw error;
  }

  if (nread >= kMaxLength) {
    _close(this);
    throw new RangeError('Cannot create final Buffer. It would be larger than 0x' + kMaxLength.toString(16) + ' bytes');
  }

  var buf = Buffer.concat(buffers, nread);
  _close(this);

  return buf;
};

util.inherits(Inflate, zlib.Inflate);

function zlibBufferSync(engine, buffer) {
  if (typeof buffer === 'string') {
    buffer = Buffer.from(buffer);
  }
  if (!(buffer instanceof Buffer)) {
    throw new TypeError('Not a string or buffer');
  }

  var flushFlag = engine._finishFlushFlag;
  if (flushFlag == null) {
    flushFlag = zlib.Z_FINISH;
  }

  return engine._processChunk(buffer, flushFlag);
}

function inflateSync(buffer, opts) {
  return zlibBufferSync(new Inflate(opts), buffer);
}

module.exports = exports = inflateSync;
exports.Inflate = Inflate;
exports.createInflate = createInflate;
exports.inflateSync = inflateSync;

}).call(this,require('_process'),require("buffer").Buffer)
},{"_process":51,"assert":23,"buffer":32,"util":69,"zlib":30}],22:[function(require,module,exports){
'use strict';

var SyncReader = module.exports = function(buffer) {

  this._buffer = buffer;
  this._reads = [];
};

SyncReader.prototype.read = function(length, callback) {

  this._reads.push({
    length: Math.abs(length), // if length < 0 then at most this length
    allowLess: length < 0,
    func: callback
  });
};

SyncReader.prototype.process = function() {

  // as long as there is any data and read requests
  while (this._reads.length > 0 && this._buffer.length) {

    var read = this._reads[0];

    if (this._buffer.length && (this._buffer.length >= read.length || read.allowLess)) {

      // ok there is any data so that we can satisfy this request
      this._reads.shift(); // == read

      var buf = this._buffer;

      this._buffer = buf.slice(read.length);

      read.func.call(this, buf.slice(0, read.length));

    }
    else {
      break;
    }

  }

  if (this._reads.length > 0) {
    return new Error('There are some read requests waitng on finished stream');
  }

  if (this._buffer.length > 0) {
    return new Error('unrecognised content at end of stream');
  }

};

},{}],23:[function(require,module,exports){
(function (global){
'use strict';

// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
// original notice:

/*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
 * @license  MIT
 */
function compare(a, b) {
  if (a === b) {
    return 0;
  }

  var x = a.length;
  var y = b.length;

  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
    if (a[i] !== b[i]) {
      x = a[i];
      y = b[i];
      break;
    }
  }

  if (x < y) {
    return -1;
  }
  if (y < x) {
    return 1;
  }
  return 0;
}
function isBuffer(b) {
  if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
    return global.Buffer.isBuffer(b);
  }
  return !!(b != null && b._isBuffer);
}

// based on node assert, original notice:

// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
//
// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
//
// Originally from narwhal.js (http://narwhaljs.org)
// Copyright (c) 2009 Thomas Robinson <280north.com>
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the 'Software'), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

var util = require('util/');
var hasOwn = Object.prototype.hasOwnProperty;
var pSlice = Array.prototype.slice;
var functionsHaveNames = (function () {
  return function foo() {}.name === 'foo';
}());
function pToString (obj) {
  return Object.prototype.toString.call(obj);
}
function isView(arrbuf) {
  if (isBuffer(arrbuf)) {
    return false;
  }
  if (typeof global.ArrayBuffer !== 'function') {
    return false;
  }
  if (typeof ArrayBuffer.isView === 'function') {
    return ArrayBuffer.isView(arrbuf);
  }
  if (!arrbuf) {
    return false;
  }
  if (arrbuf instanceof DataView) {
    return true;
  }
  if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
    return true;
  }
  return false;
}
// 1. The assert module provides functions that throw
// AssertionError's when particular conditions are not met. The
// assert module must conform to the following interface.

var assert = module.exports = ok;

// 2. The AssertionError is defined in assert.
// new assert.AssertionError({ message: message,
//                             actual: actual,
//                             expected: expected })

var regex = /\s*function\s+([^\(\s]*)\s*/;
// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
function getName(func) {
  if (!util.isFunction(func)) {
    return;
  }
  if (functionsHaveNames) {
    return func.name;
  }
  var str = func.toString();
  var match = str.match(regex);
  return match && match[1];
}
assert.AssertionError = function AssertionError(options) {
  this.name = 'AssertionError';
  this.actual = options.actual;
  this.expected = options.expected;
  this.operator = options.operator;
  if (options.message) {
    this.message = options.message;
    this.generatedMessage = false;
  } else {
    this.message = getMessage(this);
    this.generatedMessage = true;
  }
  var stackStartFunction = options.stackStartFunction || fail;
  if (Error.captureStackTrace) {
    Error.captureStackTrace(this, stackStartFunction);
  } else {
    // non v8 browsers so we can have a stacktrace
    var err = new Error();
    if (err.stack) {
      var out = err.stack;

      // try to strip useless frames
      var fn_name = getName(stackStartFunction);
      var idx = out.indexOf('\n' + fn_name);
      if (idx >= 0) {
        // once we have located the function frame
        // we need to strip out everything before it (and its line)
        var next_line = out.indexOf('\n', idx + 1);
        out = out.substring(next_line + 1);
      }

      this.stack = out;
    }
  }
};

// assert.AssertionError instanceof Error
util.inherits(assert.AssertionError, Error);

function truncate(s, n) {
  if (typeof s === 'string') {
    return s.length < n ? s : s.slice(0, n);
  } else {
    return s;
  }
}
function inspect(something) {
  if (functionsHaveNames || !util.isFunction(something)) {
    return util.inspect(something);
  }
  var rawname = getName(something);
  var name = rawname ? ': ' + rawname : '';
  return '[Function' +  name + ']';
}
function getMessage(self) {
  return truncate(inspect(self.actual), 128) + ' ' +
         self.operator + ' ' +
         truncate(inspect(self.expected), 128);
}

// At present only the three keys mentioned above are used and
// understood by the spec. Implementations or sub modules can pass
// other keys to the AssertionError's constructor - they will be
// ignored.

// 3. All of the following functions must throw an AssertionError
// when a corresponding condition is not met, with a message that
// may be undefined if not provided.  All assertion methods provide
// both the actual and expected values to the assertion error for
// display purposes.

function fail(actual, expected, message, operator, stackStartFunction) {
  throw new assert.AssertionError({
    message: message,
    actual: actual,
    expected: expected,
    operator: operator,
    stackStartFunction: stackStartFunction
  });
}

// EXTENSION! allows for well behaved errors defined elsewhere.
assert.fail = fail;

// 4. Pure assertion tests whether a value is truthy, as determined
// by !!guard.
// assert.ok(guard, message_opt);
// This statement is equivalent to assert.equal(true, !!guard,
// message_opt);. To test strictly for the value true, use
// assert.strictEqual(true, guard, message_opt);.

function ok(value, message) {
  if (!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;

// 5. The equality assertion tests shallow, coercive equality with
// ==.
// assert.equal(actual, expected, message_opt);

assert.equal = function equal(actual, expected, message) {
  if (actual != expected) fail(actual, expected, message, '==', assert.equal);
};

// 6. The non-equality assertion tests for whether two objects are not equal
// with != assert.notEqual(actual, expected, message_opt);

assert.notEqual = function notEqual(actual, expected, message) {
  if (actual == expected) {
    fail(actual, expected, message, '!=', assert.notEqual);
  }
};

// 7. The equivalence assertion tests a deep equality relation.
// assert.deepEqual(actual, expected, message_opt);

assert.deepEqual = function deepEqual(actual, expected, message) {
  if (!_deepEqual(actual, expected, false)) {
    fail(actual, expected, message, 'deepEqual', assert.deepEqual);
  }
};

assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
  if (!_deepEqual(actual, expected, true)) {
    fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
  }
};

function _deepEqual(actual, expected, strict, memos) {
  // 7.1. All identical values are equivalent, as determined by ===.
  if (actual === expected) {
    return true;
  } else if (isBuffer(actual) && isBuffer(expected)) {
    return compare(actual, expected) === 0;

  // 7.2. If the expected value is a Date object, the actual value is
  // equivalent if it is also a Date object that refers to the same time.
  } else if (util.isDate(actual) && util.isDate(expected)) {
    return actual.getTime() === expected.getTime();

  // 7.3 If the expected value is a RegExp object, the actual value is
  // equivalent if it is also a RegExp object with the same source and
  // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
    return actual.source === expected.source &&
           actual.global === expected.global &&
           actual.multiline === expected.multiline &&
           actual.lastIndex === expected.lastIndex &&
           actual.ignoreCase === expected.ignoreCase;

  // 7.4. Other pairs that do not both pass typeof value == 'object',
  // equivalence is determined by ==.
  } else if ((actual === null || typeof actual !== 'object') &&
             (expected === null || typeof expected !== 'object')) {
    return strict ? actual === expected : actual == expected;

  // If both values are instances of typed arrays, wrap their underlying
  // ArrayBuffers in a Buffer each to increase performance
  // This optimization requires the arrays to have the same type as checked by
  // Object.prototype.toString (aka pToString). Never perform binary
  // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
  // bit patterns are not identical.
  } else if (isView(actual) && isView(expected) &&
             pToString(actual) === pToString(expected) &&
             !(actual instanceof Float32Array ||
               actual instanceof Float64Array)) {
    return compare(new Uint8Array(actual.buffer),
                   new Uint8Array(expected.buffer)) === 0;

  // 7.5 For all other Object pairs, including Array objects, equivalence is
  // determined by having the same number of owned properties (as verified
  // with Object.prototype.hasOwnProperty.call), the same set of keys
  // (although not necessarily the same order), equivalent values for every
  // corresponding key, and an identical 'prototype' property. Note: this
  // accounts for both named and indexed properties on Arrays.
  } else if (isBuffer(actual) !== isBuffer(expected)) {
    return false;
  } else {
    memos = memos || {actual: [], expected: []};

    var actualIndex = memos.actual.indexOf(actual);
    if (actualIndex !== -1) {
      if (actualIndex === memos.expected.indexOf(expected)) {
        return true;
      }
    }

    memos.actual.push(actual);
    memos.expected.push(expected);

    return objEquiv(actual, expected, strict, memos);
  }
}

function isArguments(object) {
  return Object.prototype.toString.call(object) == '[object Arguments]';
}

function objEquiv(a, b, strict, actualVisitedObjects) {
  if (a === null || a === undefined || b === null || b === undefined)
    return false;
  // if one is a primitive, the other must be same
  if (util.isPrimitive(a) || util.isPrimitive(b))
    return a === b;
  if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
    return false;
  var aIsArgs = isArguments(a);
  var bIsArgs = isArguments(b);
  if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
    return false;
  if (aIsArgs) {
    a = pSlice.call(a);
    b = pSlice.call(b);
    return _deepEqual(a, b, strict);
  }
  var ka = objectKeys(a);
  var kb = objectKeys(b);
  var key, i;
  // having the same number of owned properties (keys incorporates
  // hasOwnProperty)
  if (ka.length !== kb.length)
    return false;
  //the same set of keys (although not necessarily the same order),
  ka.sort();
  kb.sort();
  //~~~cheap key test
  for (i = ka.length - 1; i >= 0; i--) {
    if (ka[i] !== kb[i])
      return false;
  }
  //equivalent values for every corresponding key, and
  //~~~possibly expensive deep test
  for (i = ka.length - 1; i >= 0; i--) {
    key = ka[i];
    if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
      return false;
  }
  return true;
}

// 8. The non-equivalence assertion tests for any deep inequality.
// assert.notDeepEqual(actual, expected, message_opt);

assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
  if (_deepEqual(actual, expected, false)) {
    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
  }
};

assert.notDeepStrictEqual = notDeepStrictEqual;
function notDeepStrictEqual(actual, expected, message) {
  if (_deepEqual(actual, expected, true)) {
    fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
  }
}


// 9. The strict equality assertion tests strict equality, as determined by ===.
// assert.strictEqual(actual, expected, message_opt);

assert.strictEqual = function strictEqual(actual, expected, message) {
  if (actual !== expected) {
    fail(actual, expected, message, '===', assert.strictEqual);
  }
};

// 10. The strict non-equality assertion tests for strict inequality, as
// determined by !==.  assert.notStrictEqual(actual, expected, message_opt);

assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
  if (actual === expected) {
    fail(actual, expected, message, '!==', assert.notStrictEqual);
  }
};

function expectedException(actual, expected) {
  if (!actual || !expected) {
    return false;
  }

  if (Object.prototype.toString.call(expected) == '[object RegExp]') {
    return expected.test(actual);
  }

  try {
    if (actual instanceof expected) {
      return true;
    }
  } catch (e) {
    // Ignore.  The instanceof check doesn't work for arrow functions.
  }

  if (Error.isPrototypeOf(expected)) {
    return false;
  }

  return expected.call({}, actual) === true;
}

function _tryBlock(block) {
  var error;
  try {
    block();
  } catch (e) {
    error = e;
  }
  return error;
}

function _throws(shouldThrow, block, expected, message) {
  var actual;

  if (typeof block !== 'function') {
    throw new TypeError('"block" argument must be a function');
  }

  if (typeof expected === 'string') {
    message = expected;
    expected = null;
  }

  actual = _tryBlock(block);

  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
            (message ? ' ' + message : '.');

  if (shouldThrow && !actual) {
    fail(actual, expected, 'Missing expected exception' + message);
  }

  var userProvidedMessage = typeof message === 'string';
  var isUnwantedException = !shouldThrow && util.isError(actual);
  var isUnexpectedException = !shouldThrow && actual && !expected;

  if ((isUnwantedException &&
      userProvidedMessage &&
      expectedException(actual, expected)) ||
      isUnexpectedException) {
    fail(actual, expected, 'Got unwanted exception' + message);
  }

  if ((shouldThrow && actual && expected &&
      !expectedException(actual, expected)) || (!shouldThrow && actual)) {
    throw actual;
  }
}

// 11. Expected to throw an error:
// assert.throws(block, Error_opt, message_opt);

assert.throws = function(block, /*optional*/error, /*optional*/message) {
  _throws(true, block, error, message);
};

// EXTENSION! This is annoying to write outside this module.
assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
  _throws(false, block, error, message);
};

assert.ifError = function(err) { if (err) throw err; };

var objectKeys = Object.keys || function (obj) {
  var keys = [];
  for (var key in obj) {
    if (hasOwn.call(obj, key)) keys.push(key);
  }
  return keys;
};

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"util/":26}],24:[function(require,module,exports){
if (typeof Object.create === 'function') {
  // implementation from standard node.js 'util' module
  module.exports = function inherits(ctor, superCtor) {
    ctor.super_ = superCtor
    ctor.prototype = Object.create(superCtor.prototype, {
      constructor: {
        value: ctor,
        enumerable: false,
        writable: true,
        configurable: true
      }
    });
  };
} else {
  // old school shim for old browsers
  module.exports = function inherits(ctor, superCtor) {
    ctor.super_ = superCtor
    var TempCtor = function () {}
    TempCtor.prototype = superCtor.prototype
    ctor.prototype = new TempCtor()
    ctor.prototype.constructor = ctor
  }
}

},{}],25:[function(require,module,exports){
module.exports = function isBuffer(arg) {
  return arg && typeof arg === 'object'
    && typeof arg.copy === 'function'
    && typeof arg.fill === 'function'
    && typeof arg.readUInt8 === 'function';
}
},{}],26:[function(require,module,exports){
(function (process,global){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

var formatRegExp = /%[sdj%]/g;
exports.format = function(f) {
  if (!isString(f)) {
    var objects = [];
    for (var i = 0; i < arguments.length; i++) {
      objects.push(inspect(arguments[i]));
    }
    return objects.join(' ');
  }

  var i = 1;
  var args = arguments;
  var len = args.length;
  var str = String(f).replace(formatRegExp, function(x) {
    if (x === '%%') return '%';
    if (i >= len) return x;
    switch (x) {
      case '%s': return String(args[i++]);
      case '%d': return Number(args[i++]);
      case '%j':
        try {
          return JSON.stringify(args[i++]);
        } catch (_) {
          return '[Circular]';
        }
      default:
        return x;
    }
  });
  for (var x = args[i]; i < len; x = args[++i]) {
    if (isNull(x) || !isObject(x)) {
      str += ' ' + x;
    } else {
      str += ' ' + inspect(x);
    }
  }
  return str;
};


// Mark that a method should not be used.
// Returns a modified function which warns once by default.
// If --no-deprecation is set, then it is a no-op.
exports.deprecate = function(fn, msg) {
  // Allow for deprecating things in the process of starting up.
  if (isUndefined(global.process)) {
    return function() {
      return exports.deprecate(fn, msg).apply(this, arguments);
    };
  }

  if (process.noDeprecation === true) {
    return fn;
  }

  var warned = false;
  function deprecated() {
    if (!warned) {
      if (process.throwDeprecation) {
        throw new Error(msg);
      } else if (process.traceDeprecation) {
        console.trace(msg);
      } else {
        console.error(msg);
      }
      warned = true;
    }
    return fn.apply(this, arguments);
  }

  return deprecated;
};


var debugs = {};
var debugEnviron;
exports.debuglog = function(set) {
  if (isUndefined(debugEnviron))
    debugEnviron = process.env.NODE_DEBUG || '';
  set = set.toUpperCase();
  if (!debugs[set]) {
    if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
      var pid = process.pid;
      debugs[set] = function() {
        var msg = exports.format.apply(exports, arguments);
        console.error('%s %d: %s', set, pid, msg);
      };
    } else {
      debugs[set] = function() {};
    }
  }
  return debugs[set];
};


/**
 * Echos the value of a value. Trys to print the value out
 * in the best way possible given the different types.
 *
 * @param {Object} obj The object to print out.
 * @param {Object} opts Optional options object that alters the output.
 */
/* legacy: obj, showHidden, depth, colors*/
function inspect(obj, opts) {
  // default options
  var ctx = {
    seen: [],
    stylize: stylizeNoColor
  };
  // legacy...
  if (arguments.length >= 3) ctx.depth = arguments[2];
  if (arguments.length >= 4) ctx.colors = arguments[3];
  if (isBoolean(opts)) {
    // legacy...
    ctx.showHidden = opts;
  } else if (opts) {
    // got an "options" object
    exports._extend(ctx, opts);
  }
  // set default options
  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
  if (isUndefined(ctx.depth)) ctx.depth = 2;
  if (isUndefined(ctx.colors)) ctx.colors = false;
  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
  if (ctx.colors) ctx.stylize = stylizeWithColor;
  return formatValue(ctx, obj, ctx.depth);
}
exports.inspect = inspect;


// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
inspect.colors = {
  'bold' : [1, 22],
  'italic' : [3, 23],
  'underline' : [4, 24],
  'inverse' : [7, 27],
  'white' : [37, 39],
  'grey' : [90, 39],
  'black' : [30, 39],
  'blue' : [34, 39],
  'cyan' : [36, 39],
  'green' : [32, 39],
  'magenta' : [35, 39],
  'red' : [31, 39],
  'yellow' : [33, 39]
};

// Don't use 'blue' not visible on cmd.exe
inspect.styles = {
  'special': 'cyan',
  'number': 'yellow',
  'boolean': 'yellow',
  'undefined': 'grey',
  'null': 'bold',
  'string': 'green',
  'date': 'magenta',
  // "name": intentionally not styling
  'regexp': 'red'
};


function stylizeWithColor(str, styleType) {
  var style = inspect.styles[styleType];

  if (style) {
    return '\u001b[' + inspect.colors[style][0] + 'm' + str +
           '\u001b[' + inspect.colors[style][1] + 'm';
  } else {
    return str;
  }
}


function stylizeNoColor(str, styleType) {
  return str;
}


function arrayToHash(array) {
  var hash = {};

  array.forEach(function(val, idx) {
    hash[val] = true;
  });

  return hash;
}


function formatValue(ctx, value, recurseTimes) {
  // Provide a hook for user-specified inspect functions.
  // Check that value is an object with an inspect function on it
  if (ctx.customInspect &&
      value &&
      isFunction(value.inspect) &&
      // Filter out the util module, it's inspect function is special
      value.inspect !== exports.inspect &&
      // Also filter out any prototype objects using the circular check.
      !(value.constructor && value.constructor.prototype === value)) {
    var ret = value.inspect(recurseTimes, ctx);
    if (!isString(ret)) {
      ret = formatValue(ctx, ret, recurseTimes);
    }
    return ret;
  }

  // Primitive types cannot have properties
  var primitive = formatPrimitive(ctx, value);
  if (primitive) {
    return primitive;
  }

  // Look up the keys of the object.
  var keys = Object.keys(value);
  var visibleKeys = arrayToHash(keys);

  if (ctx.showHidden) {
    keys = Object.getOwnPropertyNames(value);
  }

  // IE doesn't make error fields non-enumerable
  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
  if (isError(value)
      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
    return formatError(value);
  }

  // Some type of object without properties can be shortcutted.
  if (keys.length === 0) {
    if (isFunction(value)) {
      var name = value.name ? ': ' + value.name : '';
      return ctx.stylize('[Function' + name + ']', 'special');
    }
    if (isRegExp(value)) {
      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
    }
    if (isDate(value)) {
      return ctx.stylize(Date.prototype.toString.call(value), 'date');
    }
    if (isError(value)) {
      return formatError(value);
    }
  }

  var base = '', array = false, braces = ['{', '}'];

  // Make Array say that they are Array
  if (isArray(value)) {
    array = true;
    braces = ['[', ']'];
  }

  // Make functions say that they are functions
  if (isFunction(value)) {
    var n = value.name ? ': ' + value.name : '';
    base = ' [Function' + n + ']';
  }

  // Make RegExps say that they are RegExps
  if (isRegExp(value)) {
    base = ' ' + RegExp.prototype.toString.call(value);
  }

  // Make dates with properties first say the date
  if (isDate(value)) {
    base = ' ' + Date.prototype.toUTCString.call(value);
  }

  // Make error with message first say the error
  if (isError(value)) {
    base = ' ' + formatError(value);
  }

  if (keys.length === 0 && (!array || value.length == 0)) {
    return braces[0] + base + braces[1];
  }

  if (recurseTimes < 0) {
    if (isRegExp(value)) {
      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
    } else {
      return ctx.stylize('[Object]', 'special');
    }
  }

  ctx.seen.push(value);

  var output;
  if (array) {
    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
  } else {
    output = keys.map(function(key) {
      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
    });
  }

  ctx.seen.pop();

  return reduceToSingleString(output, base, braces);
}


function formatPrimitive(ctx, value) {
  if (isUndefined(value))
    return ctx.stylize('undefined', 'undefined');
  if (isString(value)) {
    var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
                                             .replace(/'/g, "\\'")
                                             .replace(/\\"/g, '"') + '\'';
    return ctx.stylize(simple, 'string');
  }
  if (isNumber(value))
    return ctx.stylize('' + value, 'number');
  if (isBoolean(value))
    return ctx.stylize('' + value, 'boolean');
  // For some reason typeof null is "object", so special case here.
  if (isNull(value))
    return ctx.stylize('null', 'null');
}


function formatError(value) {
  return '[' + Error.prototype.toString.call(value) + ']';
}


function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  var output = [];
  for (var i = 0, l = value.length; i < l; ++i) {
    if (hasOwnProperty(value, String(i))) {
      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
          String(i), true));
    } else {
      output.push('');
    }
  }
  keys.forEach(function(key) {
    if (!key.match(/^\d+$/)) {
      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
          key, true));
    }
  });
  return output;
}


function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
  var name, str, desc;
  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
  if (desc.get) {
    if (desc.set) {
      str = ctx.stylize('[Getter/Setter]', 'special');
    } else {
      str = ctx.stylize('[Getter]', 'special');
    }
  } else {
    if (desc.set) {
      str = ctx.stylize('[Setter]', 'special');
    }
  }
  if (!hasOwnProperty(visibleKeys, key)) {
    name = '[' + key + ']';
  }
  if (!str) {
    if (ctx.seen.indexOf(desc.value) < 0) {
      if (isNull(recurseTimes)) {
        str = formatValue(ctx, desc.value, null);
      } else {
        str = formatValue(ctx, desc.value, recurseTimes - 1);
      }
      if (str.indexOf('\n') > -1) {
        if (array) {
          str = str.split('\n').map(function(line) {
            return '  ' + line;
          }).join('\n').substr(2);
        } else {
          str = '\n' + str.split('\n').map(function(line) {
            return '   ' + line;
          }).join('\n');
        }
      }
    } else {
      str = ctx.stylize('[Circular]', 'special');
    }
  }
  if (isUndefined(name)) {
    if (array && key.match(/^\d+$/)) {
      return str;
    }
    name = JSON.stringify('' + key);
    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
      name = name.substr(1, name.length - 2);
      name = ctx.stylize(name, 'name');
    } else {
      name = name.replace(/'/g, "\\'")
                 .replace(/\\"/g, '"')
                 .replace(/(^"|"$)/g, "'");
      name = ctx.stylize(name, 'string');
    }
  }

  return name + ': ' + str;
}


function reduceToSingleString(output, base, braces) {
  var numLinesEst = 0;
  var length = output.reduce(function(prev, cur) {
    numLinesEst++;
    if (cur.indexOf('\n') >= 0) numLinesEst++;
    return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
  }, 0);

  if (length > 60) {
    return braces[0] +
           (base === '' ? '' : base + '\n ') +
           ' ' +
           output.join(',\n  ') +
           ' ' +
           braces[1];
  }

  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
}


// NOTE: These type checking functions intentionally don't use `instanceof`
// because it is fragile and can be easily faked with `Object.create()`.
function isArray(ar) {
  return Array.isArray(ar);
}
exports.isArray = isArray;

function isBoolean(arg) {
  return typeof arg === 'boolean';
}
exports.isBoolean = isBoolean;

function isNull(arg) {
  return arg === null;
}
exports.isNull = isNull;

function isNullOrUndefined(arg) {
  return arg == null;
}
exports.isNullOrUndefined = isNullOrUndefined;

function isNumber(arg) {
  return typeof arg === 'number';
}
exports.isNumber = isNumber;

function isString(arg) {
  return typeof arg === 'string';
}
exports.isString = isString;

function isSymbol(arg) {
  return typeof arg === 'symbol';
}
exports.isSymbol = isSymbol;

function isUndefined(arg) {
  return arg === void 0;
}
exports.isUndefined = isUndefined;

function isRegExp(re) {
  return isObject(re) && objectToString(re) === '[object RegExp]';
}
exports.isRegExp = isRegExp;

function isObject(arg) {
  return typeof arg === 'object' && arg !== null;
}
exports.isObject = isObject;

function isDate(d) {
  return isObject(d) && objectToString(d) === '[object Date]';
}
exports.isDate = isDate;

function isError(e) {
  return isObject(e) &&
      (objectToString(e) === '[object Error]' || e instanceof Error);
}
exports.isError = isError;

function isFunction(arg) {
  return typeof arg === 'function';
}
exports.isFunction = isFunction;

function isPrimitive(arg) {
  return arg === null ||
         typeof arg === 'boolean' ||
         typeof arg === 'number' ||
         typeof arg === 'string' ||
         typeof arg === 'symbol' ||  // ES6 symbol
         typeof arg === 'undefined';
}
exports.isPrimitive = isPrimitive;

exports.isBuffer = require('./support/isBuffer');

function objectToString(o) {
  return Object.prototype.toString.call(o);
}


function pad(n) {
  return n < 10 ? '0' + n.toString(10) : n.toString(10);
}


var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
              'Oct', 'Nov', 'Dec'];

// 26 Feb 16:19:34
function timestamp() {
  var d = new Date();
  var time = [pad(d.getHours()),
              pad(d.getMinutes()),
              pad(d.getSeconds())].join(':');
  return [d.getDate(), months[d.getMonth()], time].join(' ');
}


// log is just a thin wrapper to console.log that prepends a timestamp
exports.log = function() {
  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
};


/**
 * Inherit the prototype methods from one constructor into another.
 *
 * The Function.prototype.inherits from lang.js rewritten as a standalone
 * function (not on Function.prototype). NOTE: If this file is to be loaded
 * during bootstrapping this function needs to be rewritten using some native
 * functions as prototype setup using normal JavaScript does not work as
 * expected during bootstrapping (see mirror.js in r114903).
 *
 * @param {function} ctor Constructor function which needs to inherit the
 *     prototype.
 * @param {function} superCtor Constructor function to inherit prototype from.
 */
exports.inherits = require('inherits');

exports._extend = function(origin, add) {
  // Don't do anything if add isn't an object
  if (!add || !isObject(add)) return origin;

  var keys = Object.keys(add);
  var i = keys.length;
  while (i--) {
    origin[keys[i]] = add[keys[i]];
  }
  return origin;
};

function hasOwnProperty(obj, prop) {
  return Object.prototype.hasOwnProperty.call(obj, prop);
}

}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./support/isBuffer":25,"_process":51,"inherits":24}],27:[function(require,module,exports){
'use strict'

exports.byteLength = byteLength
exports.toByteArray = toByteArray
exports.fromByteArray = fromByteArray

var lookup = []
var revLookup = []
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array

var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for (var i = 0, len = code.length; i < len; ++i) {
  lookup[i] = code[i]
  revLookup[code.charCodeAt(i)] = i
}

// Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
revLookup['-'.charCodeAt(0)] = 62
revLookup['_'.charCodeAt(0)] = 63

function getLens (b64) {
  var len = b64.length

  if (len % 4 > 0) {
    throw new Error('Invalid string. Length must be a multiple of 4')
  }

  // Trim off extra bytes after placeholder bytes are found
  // See: https://github.com/beatgammit/base64-js/issues/42
  var validLen = b64.indexOf('=')
  if (validLen === -1) validLen = len

  var placeHoldersLen = validLen === len
    ? 0
    : 4 - (validLen % 4)

  return [validLen, placeHoldersLen]
}

// base64 is 4/3 + up to two characters of the original data
function byteLength (b64) {
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function _byteLength (b64, validLen, placeHoldersLen) {
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function toByteArray (b64) {
  var tmp
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]

  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))

  var curByte = 0

  // if there are placeholders, only get up to the last complete 4 chars
  var len = placeHoldersLen > 0
    ? validLen - 4
    : validLen

  for (var i = 0; i < len; i += 4) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 18) |
      (revLookup[b64.charCodeAt(i + 1)] << 12) |
      (revLookup[b64.charCodeAt(i + 2)] << 6) |
      revLookup[b64.charCodeAt(i + 3)]
    arr[curByte++] = (tmp >> 16) & 0xFF
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 2) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 2) |
      (revLookup[b64.charCodeAt(i + 1)] >> 4)
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 1) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 10) |
      (revLookup[b64.charCodeAt(i + 1)] << 4) |
      (revLookup[b64.charCodeAt(i + 2)] >> 2)
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  return arr
}

function tripletToBase64 (num) {
  return lookup[num >> 18 & 0x3F] +
    lookup[num >> 12 & 0x3F] +
    lookup[num >> 6 & 0x3F] +
    lookup[num & 0x3F]
}

function encodeChunk (uint8, start, end) {
  var tmp
  var output = []
  for (var i = start; i < end; i += 3) {
    tmp =
      ((uint8[i] << 16) & 0xFF0000) +
      ((uint8[i + 1] << 8) & 0xFF00) +
      (uint8[i + 2] & 0xFF)
    output.push(tripletToBase64(tmp))
  }
  return output.join('')
}

function fromByteArray (uint8) {
  var tmp
  var len = uint8.length
  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
  var parts = []
  var maxChunkLength = 16383 // must be multiple of 3

  // go through the array every three bytes, we'll deal with trailing stuff later
  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
    parts.push(encodeChunk(
      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)
    ))
  }

  // pad the end with zeros, but make sure to not forget the extra bytes
  if (extraBytes === 1) {
    tmp = uint8[len - 1]
    parts.push(
      lookup[tmp >> 2] +
      lookup[(tmp << 4) & 0x3F] +
      '=='
    )
  } else if (extraBytes === 2) {
    tmp = (uint8[len - 2] << 8) + uint8[len - 1]
    parts.push(
      lookup[tmp >> 10] +
      lookup[(tmp >> 4) & 0x3F] +
      lookup[(tmp << 2) & 0x3F] +
      '='
    )
  }

  return parts.join('')
}

},{}],28:[function(require,module,exports){

},{}],29:[function(require,module,exports){
(function (process,Buffer){
'use strict';
/* eslint camelcase: "off" */

var assert = require('assert');

var Zstream = require('pako/lib/zlib/zstream');
var zlib_deflate = require('pako/lib/zlib/deflate.js');
var zlib_inflate = require('pako/lib/zlib/inflate.js');
var constants = require('pako/lib/zlib/constants');

for (var key in constants) {
  exports[key] = constants[key];
}

// zlib modes
exports.NONE = 0;
exports.DEFLATE = 1;
exports.INFLATE = 2;
exports.GZIP = 3;
exports.GUNZIP = 4;
exports.DEFLATERAW = 5;
exports.INFLATERAW = 6;
exports.UNZIP = 7;

var GZIP_HEADER_ID1 = 0x1f;
var GZIP_HEADER_ID2 = 0x8b;

/**
 * Emulate Node's zlib C++ layer for use by the JS layer in index.js
 */
function Zlib(mode) {
  if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {
    throw new TypeError('Bad argument');
  }

  this.dictionary = null;
  this.err = 0;
  this.flush = 0;
  this.init_done = false;
  this.level = 0;
  this.memLevel = 0;
  this.mode = mode;
  this.strategy = 0;
  this.windowBits = 0;
  this.write_in_progress = false;
  this.pending_close = false;
  this.gzip_id_bytes_read = 0;
}

Zlib.prototype.close = function () {
  if (this.write_in_progress) {
    this.pending_close = true;
    return;
  }

  this.pending_close = false;

  assert(this.init_done, 'close before init');
  assert(this.mode <= exports.UNZIP);

  if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {
    zlib_deflate.deflateEnd(this.strm);
  } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {
    zlib_inflate.inflateEnd(this.strm);
  }

  this.mode = exports.NONE;

  this.dictionary = null;
};

Zlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {
  return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);
};

Zlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {
  return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);
};

Zlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {
  assert.equal(arguments.length, 8);

  assert(this.init_done, 'write before init');
  assert(this.mode !== exports.NONE, 'already finalized');
  assert.equal(false, this.write_in_progress, 'write already in progress');
  assert.equal(false, this.pending_close, 'close is pending');

  this.write_in_progress = true;

  assert.equal(false, flush === undefined, 'must provide flush value');

  this.write_in_progress = true;

  if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {
    throw new Error('Invalid flush value');
  }

  if (input == null) {
    input = Buffer.alloc(0);
    in_len = 0;
    in_off = 0;
  }

  this.strm.avail_in = in_len;
  this.strm.input = input;
  this.strm.next_in = in_off;
  this.strm.avail_out = out_len;
  this.strm.output = out;
  this.strm.next_out = out_off;
  this.flush = flush;

  if (!async) {
    // sync version
    this._process();

    if (this._checkError()) {
      return this._afterSync();
    }
    return;
  }

  // async version
  var self = this;
  process.nextTick(function () {
    self._process();
    self._after();
  });

  return this;
};

Zlib.prototype._afterSync = function () {
  var avail_out = this.strm.avail_out;
  var avail_in = this.strm.avail_in;

  this.write_in_progress = false;

  return [avail_in, avail_out];
};

Zlib.prototype._process = function () {
  var next_expected_header_byte = null;

  // If the avail_out is left at 0, then it means that it ran out
  // of room.  If there was avail_out left over, then it means
  // that all of the input was consumed.
  switch (this.mode) {
    case exports.DEFLATE:
    case exports.GZIP:
    case exports.DEFLATERAW:
      this.err = zlib_deflate.deflate(this.strm, this.flush);
      break;
    case exports.UNZIP:
      if (this.strm.avail_in > 0) {
        next_expected_header_byte = this.strm.next_in;
      }

      switch (this.gzip_id_bytes_read) {
        case 0:
          if (next_expected_header_byte === null) {
            break;
          }

          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {
            this.gzip_id_bytes_read = 1;
            next_expected_header_byte++;

            if (this.strm.avail_in === 1) {
              // The only available byte was already read.
              break;
            }
          } else {
            this.mode = exports.INFLATE;
            break;
          }

        // fallthrough
        case 1:
          if (next_expected_header_byte === null) {
            break;
          }

          if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {
            this.gzip_id_bytes_read = 2;
            this.mode = exports.GUNZIP;
          } else {
            // There is no actual difference between INFLATE and INFLATERAW
            // (after initialization).
            this.mode = exports.INFLATE;
          }

          break;
        default:
          throw new Error('invalid number of gzip magic number bytes read');
      }

    // fallthrough
    case exports.INFLATE:
    case exports.GUNZIP:
    case exports.INFLATERAW:
      this.err = zlib_inflate.inflate(this.strm, this.flush

      // If data was encoded with dictionary
      );if (this.err === exports.Z_NEED_DICT && this.dictionary) {
        // Load it
        this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);
        if (this.err === exports.Z_OK) {
          // And try to decode again
          this.err = zlib_inflate.inflate(this.strm, this.flush);
        } else if (this.err === exports.Z_DATA_ERROR) {
          // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.
          // Make it possible for After() to tell a bad dictionary from bad
          // input.
          this.err = exports.Z_NEED_DICT;
        }
      }
      while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {
        // Bytes remain in input buffer. Perhaps this is another compressed
        // member in the same archive, or just trailing garbage.
        // Trailing zero bytes are okay, though, since they are frequently
        // used for padding.

        this.reset();
        this.err = zlib_inflate.inflate(this.strm, this.flush);
      }
      break;
    default:
      throw new Error('Unknown mode ' + this.mode);
  }
};

Zlib.prototype._checkError = function () {
  // Acceptable error states depend on the type of zlib stream.
  switch (this.err) {
    case exports.Z_OK:
    case exports.Z_BUF_ERROR:
      if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {
        this._error('unexpected end of file');
        return false;
      }
      break;
    case exports.Z_STREAM_END:
      // normal statuses, not fatal
      break;
    case exports.Z_NEED_DICT:
      if (this.dictionary == null) {
        this._error('Missing dictionary');
      } else {
        this._error('Bad dictionary');
      }
      return false;
    default:
      // something else.
      this._error('Zlib error');
      return false;
  }

  return true;
};

Zlib.prototype._after = function () {
  if (!this._checkError()) {
    return;
  }

  var avail_out = this.strm.avail_out;
  var avail_in = this.strm.avail_in;

  this.write_in_progress = false;

  // call the write() cb
  this.callback(avail_in, avail_out);

  if (this.pending_close) {
    this.close();
  }
};

Zlib.prototype._error = function (message) {
  if (this.strm.msg) {
    message = this.strm.msg;
  }
  this.onerror(message, this.err

  // no hope of rescue.
  );this.write_in_progress = false;
  if (this.pending_close) {
    this.close();
  }
};

Zlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {
  assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');

  assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');
  assert(level >= -1 && level <= 9, 'invalid compression level');

  assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');

  assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');

  this._init(level, windowBits, memLevel, strategy, dictionary);
  this._setDictionary();
};

Zlib.prototype.params = function () {
  throw new Error('deflateParams Not supported');
};

Zlib.prototype.reset = function () {
  this._reset();
  this._setDictionary();
};

Zlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {
  this.level = level;
  this.windowBits = windowBits;
  this.memLevel = memLevel;
  this.strategy = strategy;

  this.flush = exports.Z_NO_FLUSH;

  this.err = exports.Z_OK;

  if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {
    this.windowBits += 16;
  }

  if (this.mode === exports.UNZIP) {
    this.windowBits += 32;
  }

  if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {
    this.windowBits = -1 * this.windowBits;
  }

  this.strm = new Zstream();

  switch (this.mode) {
    case exports.DEFLATE:
    case exports.GZIP:
    case exports.DEFLATERAW:
      this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);
      break;
    case exports.INFLATE:
    case exports.GUNZIP:
    case exports.INFLATERAW:
    case exports.UNZIP:
      this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);
      break;
    default:
      throw new Error('Unknown mode ' + this.mode);
  }

  if (this.err !== exports.Z_OK) {
    this._error('Init error');
  }

  this.dictionary = dictionary;

  this.write_in_progress = false;
  this.init_done = true;
};

Zlib.prototype._setDictionary = function () {
  if (this.dictionary == null) {
    return;
  }

  this.err = exports.Z_OK;

  switch (this.mode) {
    case exports.DEFLATE:
    case exports.DEFLATERAW:
      this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);
      break;
    default:
      break;
  }

  if (this.err !== exports.Z_OK) {
    this._error('Failed to set dictionary');
  }
};

Zlib.prototype._reset = function () {
  this.err = exports.Z_OK;

  switch (this.mode) {
    case exports.DEFLATE:
    case exports.DEFLATERAW:
    case exports.GZIP:
      this.err = zlib_deflate.deflateReset(this.strm);
      break;
    case exports.INFLATE:
    case exports.INFLATERAW:
    case exports.GUNZIP:
      this.err = zlib_inflate.inflateReset(this.strm);
      break;
    default:
      break;
  }

  if (this.err !== exports.Z_OK) {
    this._error('Failed to reset stream');
  }
};

exports.Zlib = Zlib;
}).call(this,require('_process'),require("buffer").Buffer)
},{"_process":51,"assert":23,"buffer":32,"pako/lib/zlib/constants":41,"pako/lib/zlib/deflate.js":43,"pako/lib/zlib/inflate.js":45,"pako/lib/zlib/zstream":49}],30:[function(require,module,exports){
(function (process){
'use strict';

var Buffer = require('buffer').Buffer;
var Transform = require('stream').Transform;
var binding = require('./binding');
var util = require('util');
var assert = require('assert').ok;
var kMaxLength = require('buffer').kMaxLength;
var kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';

// zlib doesn't provide these, so kludge them in following the same
// const naming scheme zlib uses.
binding.Z_MIN_WINDOWBITS = 8;
binding.Z_MAX_WINDOWBITS = 15;
binding.Z_DEFAULT_WINDOWBITS = 15;

// fewer than 64 bytes per chunk is stupid.
// technically it could work with as few as 8, but even 64 bytes
// is absurdly low.  Usually a MB or more is best.
binding.Z_MIN_CHUNK = 64;
binding.Z_MAX_CHUNK = Infinity;
binding.Z_DEFAULT_CHUNK = 16 * 1024;

binding.Z_MIN_MEMLEVEL = 1;
binding.Z_MAX_MEMLEVEL = 9;
binding.Z_DEFAULT_MEMLEVEL = 8;

binding.Z_MIN_LEVEL = -1;
binding.Z_MAX_LEVEL = 9;
binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;

// expose all the zlib constants
var bkeys = Object.keys(binding);
for (var bk = 0; bk < bkeys.length; bk++) {
  var bkey = bkeys[bk];
  if (bkey.match(/^Z/)) {
    Object.defineProperty(exports, bkey, {
      enumerable: true, value: binding[bkey], writable: false
    });
  }
}

// translation table for return codes.
var codes = {
  Z_OK: binding.Z_OK,
  Z_STREAM_END: binding.Z_STREAM_END,
  Z_NEED_DICT: binding.Z_NEED_DICT,
  Z_ERRNO: binding.Z_ERRNO,
  Z_STREAM_ERROR: binding.Z_STREAM_ERROR,
  Z_DATA_ERROR: binding.Z_DATA_ERROR,
  Z_MEM_ERROR: binding.Z_MEM_ERROR,
  Z_BUF_ERROR: binding.Z_BUF_ERROR,
  Z_VERSION_ERROR: binding.Z_VERSION_ERROR
};

var ckeys = Object.keys(codes);
for (var ck = 0; ck < ckeys.length; ck++) {
  var ckey = ckeys[ck];
  codes[codes[ckey]] = ckey;
}

Object.defineProperty(exports, 'codes', {
  enumerable: true, value: Object.freeze(codes), writable: false
});

exports.Deflate = Deflate;
exports.Inflate = Inflate;
exports.Gzip = Gzip;
exports.Gunzip = Gunzip;
exports.DeflateRaw = DeflateRaw;
exports.InflateRaw = InflateRaw;
exports.Unzip = Unzip;

exports.createDeflate = function (o) {
  return new Deflate(o);
};

exports.createInflate = function (o) {
  return new Inflate(o);
};

exports.createDeflateRaw = function (o) {
  return new DeflateRaw(o);
};

exports.createInflateRaw = function (o) {
  return new InflateRaw(o);
};

exports.createGzip = function (o) {
  return new Gzip(o);
};

exports.createGunzip = function (o) {
  return new Gunzip(o);
};

exports.createUnzip = function (o) {
  return new Unzip(o);
};

// Convenience methods.
// compress/decompress a string or buffer in one step.
exports.deflate = function (buffer, opts, callback) {
  if (typeof opts === 'function') {
    callback = opts;
    opts = {};
  }
  return zlibBuffer(new Deflate(opts), buffer, callback);
};

exports.deflateSync = function (buffer, opts) {
  return zlibBufferSync(new Deflate(opts), buffer);
};

exports.gzip = function (buffer, opts, callback) {
  if (typeof opts === 'function') {
    callback = opts;
    opts = {};
  }
  return zlibBuffer(new Gzip(opts), buffer, callback);
};

exports.gzipSync = function (buffer, opts) {
  return zlibBufferSync(new Gzip(opts), buffer);
};

exports.deflateRaw = function (buffer, opts, callback) {
  if (typeof opts === 'function') {
    callback = opts;
    opts = {};
  }
  return zlibBuffer(new DeflateRaw(opts), buffer, callback);
};

exports.deflateRawSync = function (buffer, opts) {
  return zlibBufferSync(new DeflateRaw(opts), buffer);
};

exports.unzip = function (buffer, opts, callback) {
  if (typeof opts === 'function') {
    callback = opts;
    opts = {};
  }
  return zlibBuffer(new Unzip(opts), buffer, callback);
};

exports.unzipSync = function (buffer, opts) {
  return zlibBufferSync(new Unzip(opts), buffer);
};

exports.inflate = function (buffer, opts, callback) {
  if (typeof opts === 'function') {
    callback = opts;
    opts = {};
  }
  return zlibBuffer(new Inflate(opts), buffer, callback);
};

exports.inflateSync = function (buffer, opts) {
  return zlibBufferSync(new Inflate(opts), buffer);
};

exports.gunzip = function (buffer, opts, callback) {
  if (typeof opts === 'function') {
    callback = opts;
    opts = {};
  }
  return zlibBuffer(new Gunzip(opts), buffer, callback);
};

exports.gunzipSync = function (buffer, opts) {
  return zlibBufferSync(new Gunzip(opts), buffer);
};

exports.inflateRaw = function (buffer, opts, callback) {
  if (typeof opts === 'function') {
    callback = opts;
    opts = {};
  }
  return zlibBuffer(new InflateRaw(opts), buffer, callback);
};

exports.inflateRawSync = function (buffer, opts) {
  return zlibBufferSync(new InflateRaw(opts), buffer);
};

function zlibBuffer(engine, buffer, callback) {
  var buffers = [];
  var nread = 0;

  engine.on('error', onError);
  engine.on('end', onEnd);

  engine.end(buffer);
  flow();

  function flow() {
    var chunk;
    while (null !== (chunk = engine.read())) {
      buffers.push(chunk);
      nread += chunk.length;
    }
    engine.once('readable', flow);
  }

  function onError(err) {
    engine.removeListener('end', onEnd);
    engine.removeListener('readable', flow);
    callback(err);
  }

  function onEnd() {
    var buf;
    var err = null;

    if (nread >= kMaxLength) {
      err = new RangeError(kRangeErrorMessage);
    } else {
      buf = Buffer.concat(buffers, nread);
    }

    buffers = [];
    engine.close();
    callback(err, buf);
  }
}

function zlibBufferSync(engine, buffer) {
  if (typeof buffer === 'string') buffer = Buffer.from(buffer);

  if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');

  var flushFlag = engine._finishFlushFlag;

  return engine._processChunk(buffer, flushFlag);
}

// generic zlib
// minimal 2-byte header
function Deflate(opts) {
  if (!(this instanceof Deflate)) return new Deflate(opts);
  Zlib.call(this, opts, binding.DEFLATE);
}

function Inflate(opts) {
  if (!(this instanceof Inflate)) return new Inflate(opts);
  Zlib.call(this, opts, binding.INFLATE);
}

// gzip - bigger header, same deflate compression
function Gzip(opts) {
  if (!(this instanceof Gzip)) return new Gzip(opts);
  Zlib.call(this, opts, binding.GZIP);
}

function Gunzip(opts) {
  if (!(this instanceof Gunzip)) return new Gunzip(opts);
  Zlib.call(this, opts, binding.GUNZIP);
}

// raw - no header
function DeflateRaw(opts) {
  if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);
  Zlib.call(this, opts, binding.DEFLATERAW);
}

function InflateRaw(opts) {
  if (!(this instanceof InflateRaw)) return new InflateRaw(opts);
  Zlib.call(this, opts, binding.INFLATERAW);
}

// auto-detect header.
function Unzip(opts) {
  if (!(this instanceof Unzip)) return new Unzip(opts);
  Zlib.call(this, opts, binding.UNZIP);
}

function isValidFlushFlag(flag) {
  return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;
}

// the Zlib class they all inherit from
// This thing manages the queue of requests, and returns
// true or false if there is anything in the queue when
// you call the .write() method.

function Zlib(opts, mode) {
  var _this = this;

  this._opts = opts = opts || {};
  this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;

  Transform.call(this, opts);

  if (opts.flush && !isValidFlushFlag(opts.flush)) {
    throw new Error('Invalid flush flag: ' + opts.flush);
  }
  if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {
    throw new Error('Invalid flush flag: ' + opts.finishFlush);
  }

  this._flushFlag = opts.flush || binding.Z_NO_FLUSH;
  this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;

  if (opts.chunkSize) {
    if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {
      throw new Error('Invalid chunk size: ' + opts.chunkSize);
    }
  }

  if (opts.windowBits) {
    if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {
      throw new Error('Invalid windowBits: ' + opts.windowBits);
    }
  }

  if (opts.level) {
    if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {
      throw new Error('Invalid compression level: ' + opts.level);
    }
  }

  if (opts.memLevel) {
    if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {
      throw new Error('Invalid memLevel: ' + opts.memLevel);
    }
  }

  if (opts.strategy) {
    if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {
      throw new Error('Invalid strategy: ' + opts.strategy);
    }
  }

  if (opts.dictionary) {
    if (!Buffer.isBuffer(opts.dictionary)) {
      throw new Error('Invalid dictionary: it should be a Buffer instance');
    }
  }

  this._handle = new binding.Zlib(mode);

  var self = this;
  this._hadError = false;
  this._handle.onerror = function (message, errno) {
    // there is no way to cleanly recover.
    // continuing only obscures problems.
    _close(self);
    self._hadError = true;

    var error = new Error(message);
    error.errno = errno;
    error.code = exports.codes[errno];
    self.emit('error', error);
  };

  var level = exports.Z_DEFAULT_COMPRESSION;
  if (typeof opts.level === 'number') level = opts.level;

  var strategy = exports.Z_DEFAULT_STRATEGY;
  if (typeof opts.strategy === 'number') strategy = opts.strategy;

  this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);

  this._buffer = Buffer.allocUnsafe(this._chunkSize);
  this._offset = 0;
  this._level = level;
  this._strategy = strategy;

  this.once('end', this.close);

  Object.defineProperty(this, '_closed', {
    get: function () {
      return !_this._handle;
    },
    configurable: true,
    enumerable: true
  });
}

util.inherits(Zlib, Transform);

Zlib.prototype.params = function (level, strategy, callback) {
  if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {
    throw new RangeError('Invalid compression level: ' + level);
  }
  if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {
    throw new TypeError('Invalid strategy: ' + strategy);
  }

  if (this._level !== level || this._strategy !== strategy) {
    var self = this;
    this.flush(binding.Z_SYNC_FLUSH, function () {
      assert(self._handle, 'zlib binding closed');
      self._handle.params(level, strategy);
      if (!self._hadError) {
        self._level = level;
        self._strategy = strategy;
        if (callback) callback();
      }
    });
  } else {
    process.nextTick(callback);
  }
};

Zlib.prototype.reset = function () {
  assert(this._handle, 'zlib binding closed');
  return this._handle.reset();
};

// This is the _flush function called by the transform class,
// internally, when the last chunk has been written.
Zlib.prototype._flush = function (callback) {
  this._transform(Buffer.alloc(0), '', callback);
};

Zlib.prototype.flush = function (kind, callback) {
  var _this2 = this;

  var ws = this._writableState;

  if (typeof kind === 'function' || kind === undefined && !callback) {
    callback = kind;
    kind = binding.Z_FULL_FLUSH;
  }

  if (ws.ended) {
    if (callback) process.nextTick(callback);
  } else if (ws.ending) {
    if (callback) this.once('end', callback);
  } else if (ws.needDrain) {
    if (callback) {
      this.once('drain', function () {
        return _this2.flush(kind, callback);
      });
    }
  } else {
    this._flushFlag = kind;
    this.write(Buffer.alloc(0), '', callback);
  }
};

Zlib.prototype.close = function (callback) {
  _close(this, callback);
  process.nextTick(emitCloseNT, this);
};

function _close(engine, callback) {
  if (callback) process.nextTick(callback);

  // Caller may invoke .close after a zlib error (which will null _handle).
  if (!engine._handle) return;

  engine._handle.close();
  engine._handle = null;
}

function emitCloseNT(self) {
  self.emit('close');
}

Zlib.prototype._transform = function (chunk, encoding, cb) {
  var flushFlag;
  var ws = this._writableState;
  var ending = ws.ending || ws.ended;
  var last = ending && (!chunk || ws.length === chunk.length);

  if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));

  if (!this._handle) return cb(new Error('zlib binding closed'));

  // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag
  // (or whatever flag was provided using opts.finishFlush).
  // If it's explicitly flushing at some other time, then we use
  // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression
  // goodness.
  if (last) flushFlag = this._finishFlushFlag;else {
    flushFlag = this._flushFlag;
    // once we've flushed the last of the queue, stop flushing and
    // go back to the normal behavior.
    if (chunk.length >= ws.length) {
      this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;
    }
  }

  this._processChunk(chunk, flushFlag, cb);
};

Zlib.prototype._processChunk = function (chunk, flushFlag, cb) {
  var availInBefore = chunk && chunk.length;
  var availOutBefore = this._chunkSize - this._offset;
  var inOff = 0;

  var self = this;

  var async = typeof cb === 'function';

  if (!async) {
    var buffers = [];
    var nread = 0;

    var error;
    this.on('error', function (er) {
      error = er;
    });

    assert(this._handle, 'zlib binding closed');
    do {
      var res = this._handle.writeSync(flushFlag, chunk, // in
      inOff, // in_off
      availInBefore, // in_len
      this._buffer, // out
      this._offset, //out_off
      availOutBefore); // out_len
    } while (!this._hadError && callback(res[0], res[1]));

    if (this._hadError) {
      throw error;
    }

    if (nread >= kMaxLength) {
      _close(this);
      throw new RangeError(kRangeErrorMessage);
    }

    var buf = Buffer.concat(buffers, nread);
    _close(this);

    return buf;
  }

  assert(this._handle, 'zlib binding closed');
  var req = this._handle.write(flushFlag, chunk, // in
  inOff, // in_off
  availInBefore, // in_len
  this._buffer, // out
  this._offset, //out_off
  availOutBefore); // out_len

  req.buffer = chunk;
  req.callback = callback;

  function callback(availInAfter, availOutAfter) {
    // When the callback is used in an async write, the callback's
    // context is the `req` object that was created. The req object
    // is === this._handle, and that's why it's important to null
    // out the values after they are done being used. `this._handle`
    // can stay in memory longer than the callback and buffer are needed.
    if (this) {
      this.buffer = null;
      this.callback = null;
    }

    if (self._hadError) return;

    var have = availOutBefore - availOutAfter;
    assert(have >= 0, 'have should not go down');

    if (have > 0) {
      var out = self._buffer.slice(self._offset, self._offset + have);
      self._offset += have;
      // serve some output to the consumer.
      if (async) {
        self.push(out);
      } else {
        buffers.push(out);
        nread += out.length;
      }
    }

    // exhausted the output buffer, or used all the input create a new one.
    if (availOutAfter === 0 || self._offset >= self._chunkSize) {
      availOutBefore = self._chunkSize;
      self._offset = 0;
      self._buffer = Buffer.allocUnsafe(self._chunkSize);
    }

    if (availOutAfter === 0) {
      // Not actually done.  Need to reprocess.
      // Also, update the availInBefore to the availInAfter value,
      // so that if we have to hit it a third (fourth, etc.) time,
      // it'll have the correct byte counts.
      inOff += availInBefore - availInAfter;
      availInBefore = availInAfter;

      if (!async) return true;

      var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);
      newReq.callback = callback; // this same function
      newReq.buffer = chunk;
      return;
    }

    if (!async) return false;

    // finished with the chunk.
    cb();
  }
};

util.inherits(Deflate, Zlib);
util.inherits(Inflate, Zlib);
util.inherits(Gzip, Zlib);
util.inherits(Gunzip, Zlib);
util.inherits(DeflateRaw, Zlib);
util.inherits(InflateRaw, Zlib);
util.inherits(Unzip, Zlib);
}).call(this,require('_process'))
},{"./binding":29,"_process":51,"assert":23,"buffer":32,"stream":64,"util":69}],31:[function(require,module,exports){
(function (global){
'use strict';

var buffer = require('buffer');
var Buffer = buffer.Buffer;
var SlowBuffer = buffer.SlowBuffer;
var MAX_LEN = buffer.kMaxLength || 2147483647;
exports.alloc = function alloc(size, fill, encoding) {
  if (typeof Buffer.alloc === 'function') {
    return Buffer.alloc(size, fill, encoding);
  }
  if (typeof encoding === 'number') {
    throw new TypeError('encoding must not be number');
  }
  if (typeof size !== 'number') {
    throw new TypeError('size must be a number');
  }
  if (size > MAX_LEN) {
    throw new RangeError('size is too large');
  }
  var enc = encoding;
  var _fill = fill;
  if (_fill === undefined) {
    enc = undefined;
    _fill = 0;
  }
  var buf = new Buffer(size);
  if (typeof _fill === 'string') {
    var fillBuf = new Buffer(_fill, enc);
    var flen = fillBuf.length;
    var i = -1;
    while (++i < size) {
      buf[i] = fillBuf[i % flen];
    }
  } else {
    buf.fill(_fill);
  }
  return buf;
}
exports.allocUnsafe = function allocUnsafe(size) {
  if (typeof Buffer.allocUnsafe === 'function') {
    return Buffer.allocUnsafe(size);
  }
  if (typeof size !== 'number') {
    throw new TypeError('size must be a number');
  }
  if (size > MAX_LEN) {
    throw new RangeError('size is too large');
  }
  return new Buffer(size);
}
exports.from = function from(value, encodingOrOffset, length) {
  if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
    return Buffer.from(value, encodingOrOffset, length);
  }
  if (typeof value === 'number') {
    throw new TypeError('"value" argument must not be a number');
  }
  if (typeof value === 'string') {
    return new Buffer(value, encodingOrOffset);
  }
  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
    var offset = encodingOrOffset;
    if (arguments.length === 1) {
      return new Buffer(value);
    }
    if (typeof offset === 'undefined') {
      offset = 0;
    }
    var len = length;
    if (typeof len === 'undefined') {
      len = value.byteLength - offset;
    }
    if (offset >= value.byteLength) {
      throw new RangeError('\'offset\' is out of bounds');
    }
    if (len > value.byteLength - offset) {
      throw new RangeError('\'length\' is out of bounds');
    }
    return new Buffer(value.slice(offset, offset + len));
  }
  if (Buffer.isBuffer(value)) {
    var out = new Buffer(value.length);
    value.copy(out, 0, 0, value.length);
    return out;
  }
  if (value) {
    if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
      return new Buffer(value);
    }
    if (value.type === 'Buffer' && Array.isArray(value.data)) {
      return new Buffer(value.data);
    }
  }

  throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
}
exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
  if (typeof Buffer.allocUnsafeSlow === 'function') {
    return Buffer.allocUnsafeSlow(size);
  }
  if (typeof size !== 'number') {
    throw new TypeError('size must be a number');
  }
  if (size >= MAX_LEN) {
    throw new RangeError('size is too large');
  }
  return new SlowBuffer(size);
}

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"buffer":32}],32:[function(require,module,exports){
(function (Buffer){
/*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <https://feross.org>
 * @license  MIT
 */
/* eslint-disable no-proto */

'use strict'

var base64 = require('base64-js')
var ieee754 = require('ieee754')

exports.Buffer = Buffer
exports.SlowBuffer = SlowBuffer
exports.INSPECT_MAX_BYTES = 50

var K_MAX_LENGTH = 0x7fffffff
exports.kMaxLength = K_MAX_LENGTH

/**
 * If `Buffer.TYPED_ARRAY_SUPPORT`:
 *   === true    Use Uint8Array implementation (fastest)
 *   === false   Print warning and recommend using `buffer` v4.x which has an Object
 *               implementation (most compatible, even IE6)
 *
 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
 * Opera 11.6+, iOS 4.2+.
 *
 * We report that the browser does not support typed arrays if the are not subclassable
 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
 * for __proto__ and has a buggy typed array implementation.
 */
Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()

if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
    typeof console.error === 'function') {
  console.error(
    'This browser lacks typed array (Uint8Array) support which is required by ' +
    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
  )
}

function typedArraySupport () {
  // Can typed array instances can be augmented?
  try {
    var arr = new Uint8Array(1)
    arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }
    return arr.foo() === 42
  } catch (e) {
    return false
  }
}

Object.defineProperty(Buffer.prototype, 'parent', {
  enumerable: true,
  get: function () {
    if (!Buffer.isBuffer(this)) return undefined
    return this.buffer
  }
})

Object.defineProperty(Buffer.prototype, 'offset', {
  enumerable: true,
  get: function () {
    if (!Buffer.isBuffer(this)) return undefined
    return this.byteOffset
  }
})

function createBuffer (length) {
  if (length > K_MAX_LENGTH) {
    throw new RangeError('The value "' + length + '" is invalid for option "size"')
  }
  // Return an augmented `Uint8Array` instance
  var buf = new Uint8Array(length)
  buf.__proto__ = Buffer.prototype
  return buf
}

/**
 * The Buffer constructor returns instances of `Uint8Array` that have their
 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
 * returns a single octet.
 *
 * The `Uint8Array` prototype remains unmodified.
 */

function Buffer (arg, encodingOrOffset, length) {
  // Common case.
  if (typeof arg === 'number') {
    if (typeof encodingOrOffset === 'string') {
      throw new TypeError(
        'The "string" argument must be of type string. Received type number'
      )
    }
    return allocUnsafe(arg)
  }
  return from(arg, encodingOrOffset, length)
}

// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
if (typeof Symbol !== 'undefined' && Symbol.species != null &&
    Buffer[Symbol.species] === Buffer) {
  Object.defineProperty(Buffer, Symbol.species, {
    value: null,
    configurable: true,
    enumerable: false,
    writable: false
  })
}

Buffer.poolSize = 8192 // not used by this implementation

function from (value, encodingOrOffset, length) {
  if (typeof value === 'string') {
    return fromString(value, encodingOrOffset)
  }

  if (ArrayBuffer.isView(value)) {
    return fromArrayLike(value)
  }

  if (value == null) {
    throw TypeError(
      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
      'or Array-like Object. Received type ' + (typeof value)
    )
  }

  if (isInstance(value, ArrayBuffer) ||
      (value && isInstance(value.buffer, ArrayBuffer))) {
    return fromArrayBuffer(value, encodingOrOffset, length)
  }

  if (typeof value === 'number') {
    throw new TypeError(
      'The "value" argument must not be of type number. Received type number'
    )
  }

  var valueOf = value.valueOf && value.valueOf()
  if (valueOf != null && valueOf !== value) {
    return Buffer.from(valueOf, encodingOrOffset, length)
  }

  var b = fromObject(value)
  if (b) return b

  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
      typeof value[Symbol.toPrimitive] === 'function') {
    return Buffer.from(
      value[Symbol.toPrimitive]('string'), encodingOrOffset, length
    )
  }

  throw new TypeError(
    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
    'or Array-like Object. Received type ' + (typeof value)
  )
}

/**
 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
 * if value is a number.
 * Buffer.from(str[, encoding])
 * Buffer.from(array)
 * Buffer.from(buffer)
 * Buffer.from(arrayBuffer[, byteOffset[, length]])
 **/
Buffer.from = function (value, encodingOrOffset, length) {
  return from(value, encodingOrOffset, length)
}

// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
// https://github.com/feross/buffer/pull/148
Buffer.prototype.__proto__ = Uint8Array.prototype
Buffer.__proto__ = Uint8Array

function assertSize (size) {
  if (typeof size !== 'number') {
    throw new TypeError('"size" argument must be of type number')
  } else if (size < 0) {
    throw new RangeError('The value "' + size + '" is invalid for option "size"')
  }
}

function alloc (size, fill, encoding) {
  assertSize(size)
  if (size <= 0) {
    return createBuffer(size)
  }
  if (fill !== undefined) {
    // Only pay attention to encoding if it's a string. This
    // prevents accidentally sending in a number that would
    // be interpretted as a start offset.
    return typeof encoding === 'string'
      ? createBuffer(size).fill(fill, encoding)
      : createBuffer(size).fill(fill)
  }
  return createBuffer(size)
}

/**
 * Creates a new filled Buffer instance.
 * alloc(size[, fill[, encoding]])
 **/
Buffer.alloc = function (size, fill, encoding) {
  return alloc(size, fill, encoding)
}

function allocUnsafe (size) {
  assertSize(size)
  return createBuffer(size < 0 ? 0 : checked(size) | 0)
}

/**
 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
 * */
Buffer.allocUnsafe = function (size) {
  return allocUnsafe(size)
}
/**
 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
 */
Buffer.allocUnsafeSlow = function (size) {
  return allocUnsafe(size)
}

function fromString (string, encoding) {
  if (typeof encoding !== 'string' || encoding === '') {
    encoding = 'utf8'
  }

  if (!Buffer.isEncoding(encoding)) {
    throw new TypeError('Unknown encoding: ' + encoding)
  }

  var length = byteLength(string, encoding) | 0
  var buf = createBuffer(length)

  var actual = buf.write(string, encoding)

  if (actual !== length) {
    // Writing a hex string, for example, that contains invalid characters will
    // cause everything after the first invalid character to be ignored. (e.g.
    // 'abxxcd' will be treated as 'ab')
    buf = buf.slice(0, actual)
  }

  return buf
}

function fromArrayLike (array) {
  var length = array.length < 0 ? 0 : checked(array.length) | 0
  var buf = createBuffer(length)
  for (var i = 0; i < length; i += 1) {
    buf[i] = array[i] & 255
  }
  return buf
}

function fromArrayBuffer (array, byteOffset, length) {
  if (byteOffset < 0 || array.byteLength < byteOffset) {
    throw new RangeError('"offset" is outside of buffer bounds')
  }

  if (array.byteLength < byteOffset + (length || 0)) {
    throw new RangeError('"length" is outside of buffer bounds')
  }

  var buf
  if (byteOffset === undefined && length === undefined) {
    buf = new Uint8Array(array)
  } else if (length === undefined) {
    buf = new Uint8Array(array, byteOffset)
  } else {
    buf = new Uint8Array(array, byteOffset, length)
  }

  // Return an augmented `Uint8Array` instance
  buf.__proto__ = Buffer.prototype
  return buf
}

function fromObject (obj) {
  if (Buffer.isBuffer(obj)) {
    var len = checked(obj.length) | 0
    var buf = createBuffer(len)

    if (buf.length === 0) {
      return buf
    }

    obj.copy(buf, 0, 0, len)
    return buf
  }

  if (obj.length !== undefined) {
    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
      return createBuffer(0)
    }
    return fromArrayLike(obj)
  }

  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
    return fromArrayLike(obj.data)
  }
}

function checked (length) {
  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
  // length is NaN (which is otherwise coerced to zero.)
  if (length >= K_MAX_LENGTH) {
    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
  }
  return length | 0
}

function SlowBuffer (length) {
  if (+length != length) { // eslint-disable-line eqeqeq
    length = 0
  }
  return Buffer.alloc(+length)
}

Buffer.isBuffer = function isBuffer (b) {
  return b != null && b._isBuffer === true &&
    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
}

Buffer.compare = function compare (a, b) {
  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
    throw new TypeError(
      'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
    )
  }

  if (a === b) return 0

  var x = a.length
  var y = b.length

  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
    if (a[i] !== b[i]) {
      x = a[i]
      y = b[i]
      break
    }
  }

  if (x < y) return -1
  if (y < x) return 1
  return 0
}

Buffer.isEncoding = function isEncoding (encoding) {
  switch (String(encoding).toLowerCase()) {
    case 'hex':
    case 'utf8':
    case 'utf-8':
    case 'ascii':
    case 'latin1':
    case 'binary':
    case 'base64':
    case 'ucs2':
    case 'ucs-2':
    case 'utf16le':
    case 'utf-16le':
      return true
    default:
      return false
  }
}

Buffer.concat = function concat (list, length) {
  if (!Array.isArray(list)) {
    throw new TypeError('"list" argument must be an Array of Buffers')
  }

  if (list.length === 0) {
    return Buffer.alloc(0)
  }

  var i
  if (length === undefined) {
    length = 0
    for (i = 0; i < list.length; ++i) {
      length += list[i].length
    }
  }

  var buffer = Buffer.allocUnsafe(length)
  var pos = 0
  for (i = 0; i < list.length; ++i) {
    var buf = list[i]
    if (isInstance(buf, Uint8Array)) {
      buf = Buffer.from(buf)
    }
    if (!Buffer.isBuffer(buf)) {
      throw new TypeError('"list" argument must be an Array of Buffers')
    }
    buf.copy(buffer, pos)
    pos += buf.length
  }
  return buffer
}

function byteLength (string, encoding) {
  if (Buffer.isBuffer(string)) {
    return string.length
  }
  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
    return string.byteLength
  }
  if (typeof string !== 'string') {
    throw new TypeError(
      'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
      'Received type ' + typeof string
    )
  }

  var len = string.length
  var mustMatch = (arguments.length > 2 && arguments[2] === true)
  if (!mustMatch && len === 0) return 0

  // Use a for loop to avoid recursion
  var loweredCase = false
  for (;;) {
    switch (encoding) {
      case 'ascii':
      case 'latin1':
      case 'binary':
        return len
      case 'utf8':
      case 'utf-8':
        return utf8ToBytes(string).length
      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return len * 2
      case 'hex':
        return len >>> 1
      case 'base64':
        return base64ToBytes(string).length
      default:
        if (loweredCase) {
          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
        }
        encoding = ('' + encoding).toLowerCase()
        loweredCase = true
    }
  }
}
Buffer.byteLength = byteLength

function slowToString (encoding, start, end) {
  var loweredCase = false

  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
  // property of a typed array.

  // This behaves neither like String nor Uint8Array in that we set start/end
  // to their upper/lower bounds if the value passed is out of range.
  // undefined is handled specially as per ECMA-262 6th Edition,
  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
  if (start === undefined || start < 0) {
    start = 0
  }
  // Return early if start > this.length. Done here to prevent potential uint32
  // coercion fail below.
  if (start > this.length) {
    return ''
  }

  if (end === undefined || end > this.length) {
    end = this.length
  }

  if (end <= 0) {
    return ''
  }

  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
  end >>>= 0
  start >>>= 0

  if (end <= start) {
    return ''
  }

  if (!encoding) encoding = 'utf8'

  while (true) {
    switch (encoding) {
      case 'hex':
        return hexSlice(this, start, end)

      case 'utf8':
      case 'utf-8':
        return utf8Slice(this, start, end)

      case 'ascii':
        return asciiSlice(this, start, end)

      case 'latin1':
      case 'binary':
        return latin1Slice(this, start, end)

      case 'base64':
        return base64Slice(this, start, end)

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return utf16leSlice(this, start, end)

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
        encoding = (encoding + '').toLowerCase()
        loweredCase = true
    }
  }
}

// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
// reliably in a browserify context because there could be multiple different
// copies of the 'buffer' package in use. This method works even for Buffer
// instances that were created from another copy of the `buffer` package.
// See: https://github.com/feross/buffer/issues/154
Buffer.prototype._isBuffer = true

function swap (b, n, m) {
  var i = b[n]
  b[n] = b[m]
  b[m] = i
}

Buffer.prototype.swap16 = function swap16 () {
  var len = this.length
  if (len % 2 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 16-bits')
  }
  for (var i = 0; i < len; i += 2) {
    swap(this, i, i + 1)
  }
  return this
}

Buffer.prototype.swap32 = function swap32 () {
  var len = this.length
  if (len % 4 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 32-bits')
  }
  for (var i = 0; i < len; i += 4) {
    swap(this, i, i + 3)
    swap(this, i + 1, i + 2)
  }
  return this
}

Buffer.prototype.swap64 = function swap64 () {
  var len = this.length
  if (len % 8 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 64-bits')
  }
  for (var i = 0; i < len; i += 8) {
    swap(this, i, i + 7)
    swap(this, i + 1, i + 6)
    swap(this, i + 2, i + 5)
    swap(this, i + 3, i + 4)
  }
  return this
}

Buffer.prototype.toString = function toString () {
  var length = this.length
  if (length === 0) return ''
  if (arguments.length === 0) return utf8Slice(this, 0, length)
  return slowToString.apply(this, arguments)
}

Buffer.prototype.toLocaleString = Buffer.prototype.toString

Buffer.prototype.equals = function equals (b) {
  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
  if (this === b) return true
  return Buffer.compare(this, b) === 0
}

Buffer.prototype.inspect = function inspect () {
  var str = ''
  var max = exports.INSPECT_MAX_BYTES
  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
  if (this.length > max) str += ' ... '
  return '<Buffer ' + str + '>'
}

Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
  if (isInstance(target, Uint8Array)) {
    target = Buffer.from(target, target.offset, target.byteLength)
  }
  if (!Buffer.isBuffer(target)) {
    throw new TypeError(
      'The "target" argument must be one of type Buffer or Uint8Array. ' +
      'Received type ' + (typeof target)
    )
  }

  if (start === undefined) {
    start = 0
  }
  if (end === undefined) {
    end = target ? target.length : 0
  }
  if (thisStart === undefined) {
    thisStart = 0
  }
  if (thisEnd === undefined) {
    thisEnd = this.length
  }

  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
    throw new RangeError('out of range index')
  }

  if (thisStart >= thisEnd && start >= end) {
    return 0
  }
  if (thisStart >= thisEnd) {
    return -1
  }
  if (start >= end) {
    return 1
  }

  start >>>= 0
  end >>>= 0
  thisStart >>>= 0
  thisEnd >>>= 0

  if (this === target) return 0

  var x = thisEnd - thisStart
  var y = end - start
  var len = Math.min(x, y)

  var thisCopy = this.slice(thisStart, thisEnd)
  var targetCopy = target.slice(start, end)

  for (var i = 0; i < len; ++i) {
    if (thisCopy[i] !== targetCopy[i]) {
      x = thisCopy[i]
      y = targetCopy[i]
      break
    }
  }

  if (x < y) return -1
  if (y < x) return 1
  return 0
}

// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf
function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
  // Empty buffer means no match
  if (buffer.length === 0) return -1

  // Normalize byteOffset
  if (typeof byteOffset === 'string') {
    encoding = byteOffset
    byteOffset = 0
  } else if (byteOffset > 0x7fffffff) {
    byteOffset = 0x7fffffff
  } else if (byteOffset < -0x80000000) {
    byteOffset = -0x80000000
  }
  byteOffset = +byteOffset // Coerce to Number.
  if (numberIsNaN(byteOffset)) {
    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
    byteOffset = dir ? 0 : (buffer.length - 1)
  }

  // Normalize byteOffset: negative offsets start from the end of the buffer
  if (byteOffset < 0) byteOffset = buffer.length + byteOffset
  if (byteOffset >= buffer.length) {
    if (dir) return -1
    else byteOffset = buffer.length - 1
  } else if (byteOffset < 0) {
    if (dir) byteOffset = 0
    else return -1
  }

  // Normalize val
  if (typeof val === 'string') {
    val = Buffer.from(val, encoding)
  }

  // Finally, search either indexOf (if dir is true) or lastIndexOf
  if (Buffer.isBuffer(val)) {
    // Special case: looking for empty string/buffer always fails
    if (val.length === 0) {
      return -1
    }
    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
  } else if (typeof val === 'number') {
    val = val & 0xFF // Search for a byte value [0-255]
    if (typeof Uint8Array.prototype.indexOf === 'function') {
      if (dir) {
        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
      } else {
        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
      }
    }
    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
  }

  throw new TypeError('val must be string, number or Buffer')
}

function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
  var indexSize = 1
  var arrLength = arr.length
  var valLength = val.length

  if (encoding !== undefined) {
    encoding = String(encoding).toLowerCase()
    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
        encoding === 'utf16le' || encoding === 'utf-16le') {
      if (arr.length < 2 || val.length < 2) {
        return -1
      }
      indexSize = 2
      arrLength /= 2
      valLength /= 2
      byteOffset /= 2
    }
  }

  function read (buf, i) {
    if (indexSize === 1) {
      return buf[i]
    } else {
      return buf.readUInt16BE(i * indexSize)
    }
  }

  var i
  if (dir) {
    var foundIndex = -1
    for (i = byteOffset; i < arrLength; i++) {
      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
        if (foundIndex === -1) foundIndex = i
        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
      } else {
        if (foundIndex !== -1) i -= i - foundIndex
        foundIndex = -1
      }
    }
  } else {
    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
    for (i = byteOffset; i >= 0; i--) {
      var found = true
      for (var j = 0; j < valLength; j++) {
        if (read(arr, i + j) !== read(val, j)) {
          found = false
          break
        }
      }
      if (found) return i
    }
  }

  return -1
}

Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
  return this.indexOf(val, byteOffset, encoding) !== -1
}

Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
}

Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
}

function hexWrite (buf, string, offset, length) {
  offset = Number(offset) || 0
  var remaining = buf.length - offset
  if (!length) {
    length = remaining
  } else {
    length = Number(length)
    if (length > remaining) {
      length = remaining
    }
  }

  var strLen = string.length

  if (length > strLen / 2) {
    length = strLen / 2
  }
  for (var i = 0; i < length; ++i) {
    var parsed = parseInt(string.substr(i * 2, 2), 16)
    if (numberIsNaN(parsed)) return i
    buf[offset + i] = parsed
  }
  return i
}

function utf8Write (buf, string, offset, length) {
  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}

function asciiWrite (buf, string, offset, length) {
  return blitBuffer(asciiToBytes(string), buf, offset, length)
}

function latin1Write (buf, string, offset, length) {
  return asciiWrite(buf, string, offset, length)
}

function base64Write (buf, string, offset, length) {
  return blitBuffer(base64ToBytes(string), buf, offset, length)
}

function ucs2Write (buf, string, offset, length) {
  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
}

Buffer.prototype.write = function write (string, offset, length, encoding) {
  // Buffer#write(string)
  if (offset === undefined) {
    encoding = 'utf8'
    length = this.length
    offset = 0
  // Buffer#write(string, encoding)
  } else if (length === undefined && typeof offset === 'string') {
    encoding = offset
    length = this.length
    offset = 0
  // Buffer#write(string, offset[, length][, encoding])
  } else if (isFinite(offset)) {
    offset = offset >>> 0
    if (isFinite(length)) {
      length = length >>> 0
      if (encoding === undefined) encoding = 'utf8'
    } else {
      encoding = length
      length = undefined
    }
  } else {
    throw new Error(
      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
    )
  }

  var remaining = this.length - offset
  if (length === undefined || length > remaining) length = remaining

  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
    throw new RangeError('Attempt to write outside buffer bounds')
  }

  if (!encoding) encoding = 'utf8'

  var loweredCase = false
  for (;;) {
    switch (encoding) {
      case 'hex':
        return hexWrite(this, string, offset, length)

      case 'utf8':
      case 'utf-8':
        return utf8Write(this, string, offset, length)

      case 'ascii':
        return asciiWrite(this, string, offset, length)

      case 'latin1':
      case 'binary':
        return latin1Write(this, string, offset, length)

      case 'base64':
        // Warning: maxLength not taken into account in base64Write
        return base64Write(this, string, offset, length)

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return ucs2Write(this, string, offset, length)

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
        encoding = ('' + encoding).toLowerCase()
        loweredCase = true
    }
  }
}

Buffer.prototype.toJSON = function toJSON () {
  return {
    type: 'Buffer',
    data: Array.prototype.slice.call(this._arr || this, 0)
  }
}

function base64Slice (buf, start, end) {
  if (start === 0 && end === buf.length) {
    return base64.fromByteArray(buf)
  } else {
    return base64.fromByteArray(buf.slice(start, end))
  }
}

function utf8Slice (buf, start, end) {
  end = Math.min(buf.length, end)
  var res = []

  var i = start
  while (i < end) {
    var firstByte = buf[i]
    var codePoint = null
    var bytesPerSequence = (firstByte > 0xEF) ? 4
      : (firstByte > 0xDF) ? 3
        : (firstByte > 0xBF) ? 2
          : 1

    if (i + bytesPerSequence <= end) {
      var secondByte, thirdByte, fourthByte, tempCodePoint

      switch (bytesPerSequence) {
        case 1:
          if (firstByte < 0x80) {
            codePoint = firstByte
          }
          break
        case 2:
          secondByte = buf[i + 1]
          if ((secondByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
            if (tempCodePoint > 0x7F) {
              codePoint = tempCodePoint
            }
          }
          break
        case 3:
          secondByte = buf[i + 1]
          thirdByte = buf[i + 2]
          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
              codePoint = tempCodePoint
            }
          }
          break
        case 4:
          secondByte = buf[i + 1]
          thirdByte = buf[i + 2]
          fourthByte = buf[i + 3]
          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
              codePoint = tempCodePoint
            }
          }
      }
    }

    if (codePoint === null) {
      // we did not generate a valid codePoint so insert a
      // replacement char (U+FFFD) and advance only 1 byte
      codePoint = 0xFFFD
      bytesPerSequence = 1
    } else if (codePoint > 0xFFFF) {
      // encode to utf16 (surrogate pair dance)
      codePoint -= 0x10000
      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
      codePoint = 0xDC00 | codePoint & 0x3FF
    }

    res.push(codePoint)
    i += bytesPerSequence
  }

  return decodeCodePointsArray(res)
}

// Based on http://stackoverflow.com/a/22747272/680742, the browser with
// the lowest limit is Chrome, with 0x10000 args.
// We go 1 magnitude less, for safety
var MAX_ARGUMENTS_LENGTH = 0x1000

function decodeCodePointsArray (codePoints) {
  var len = codePoints.length
  if (len <= MAX_ARGUMENTS_LENGTH) {
    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
  }

  // Decode in chunks to avoid "call stack size exceeded".
  var res = ''
  var i = 0
  while (i < len) {
    res += String.fromCharCode.apply(
      String,
      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
    )
  }
  return res
}

function asciiSlice (buf, start, end) {
  var ret = ''
  end = Math.min(buf.length, end)

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i] & 0x7F)
  }
  return ret
}

function latin1Slice (buf, start, end) {
  var ret = ''
  end = Math.min(buf.length, end)

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i])
  }
  return ret
}

function hexSlice (buf, start, end) {
  var len = buf.length

  if (!start || start < 0) start = 0
  if (!end || end < 0 || end > len) end = len

  var out = ''
  for (var i = start; i < end; ++i) {
    out += toHex(buf[i])
  }
  return out
}

function utf16leSlice (buf, start, end) {
  var bytes = buf.slice(start, end)
  var res = ''
  for (var i = 0; i < bytes.length; i += 2) {
    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
  }
  return res
}

Buffer.prototype.slice = function slice (start, end) {
  var len = this.length
  start = ~~start
  end = end === undefined ? len : ~~end

  if (start < 0) {
    start += len
    if (start < 0) start = 0
  } else if (start > len) {
    start = len
  }

  if (end < 0) {
    end += len
    if (end < 0) end = 0
  } else if (end > len) {
    end = len
  }

  if (end < start) end = start

  var newBuf = this.subarray(start, end)
  // Return an augmented `Uint8Array` instance
  newBuf.__proto__ = Buffer.prototype
  return newBuf
}

/*
 * Need to make sure that buffer isn't trying to write out of bounds.
 */
function checkOffset (offset, ext, length) {
  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
}

Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var val = this[offset]
  var mul = 1
  var i = 0
  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul
  }

  return val
}

Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    checkOffset(offset, byteLength, this.length)
  }

  var val = this[offset + --byteLength]
  var mul = 1
  while (byteLength > 0 && (mul *= 0x100)) {
    val += this[offset + --byteLength] * mul
  }

  return val
}

Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 1, this.length)
  return this[offset]
}

Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  return this[offset] | (this[offset + 1] << 8)
}

Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  return (this[offset] << 8) | this[offset + 1]
}

Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return ((this[offset]) |
      (this[offset + 1] << 8) |
      (this[offset + 2] << 16)) +
      (this[offset + 3] * 0x1000000)
}

Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset] * 0x1000000) +
    ((this[offset + 1] << 16) |
    (this[offset + 2] << 8) |
    this[offset + 3])
}

Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var val = this[offset]
  var mul = 1
  var i = 0
  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul
  }
  mul *= 0x80

  if (val >= mul) val -= Math.pow(2, 8 * byteLength)

  return val
}

Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var i = byteLength
  var mul = 1
  var val = this[offset + --i]
  while (i > 0 && (mul *= 0x100)) {
    val += this[offset + --i] * mul
  }
  mul *= 0x80

  if (val >= mul) val -= Math.pow(2, 8 * byteLength)

  return val
}

Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 1, this.length)
  if (!(this[offset] & 0x80)) return (this[offset])
  return ((0xff - this[offset] + 1) * -1)
}

Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  var val = this[offset] | (this[offset + 1] << 8)
  return (val & 0x8000) ? val | 0xFFFF0000 : val
}

Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  var val = this[offset + 1] | (this[offset] << 8)
  return (val & 0x8000) ? val | 0xFFFF0000 : val
}

Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset]) |
    (this[offset + 1] << 8) |
    (this[offset + 2] << 16) |
    (this[offset + 3] << 24)
}

Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset] << 24) |
    (this[offset + 1] << 16) |
    (this[offset + 2] << 8) |
    (this[offset + 3])
}

Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)
  return ieee754.read(this, offset, true, 23, 4)
}

Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)
  return ieee754.read(this, offset, false, 23, 4)
}

Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 8, this.length)
  return ieee754.read(this, offset, true, 52, 8)
}

Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 8, this.length)
  return ieee754.read(this, offset, false, 52, 8)
}

function checkInt (buf, value, offset, ext, max, min) {
  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
  if (offset + ext > buf.length) throw new RangeError('Index out of range')
}

Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1
    checkInt(this, value, offset, byteLength, maxBytes, 0)
  }

  var mul = 1
  var i = 0
  this[offset] = value & 0xFF
  while (++i < byteLength && (mul *= 0x100)) {
    this[offset + i] = (value / mul) & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1
    checkInt(this, value, offset, byteLength, maxBytes, 0)
  }

  var i = byteLength - 1
  var mul = 1
  this[offset + i] = value & 0xFF
  while (--i >= 0 && (mul *= 0x100)) {
    this[offset + i] = (value / mul) & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
  this[offset] = (value & 0xff)
  return offset + 1
}

Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  return offset + 2
}

Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  this[offset] = (value >>> 8)
  this[offset + 1] = (value & 0xff)
  return offset + 2
}

Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  this[offset + 3] = (value >>> 24)
  this[offset + 2] = (value >>> 16)
  this[offset + 1] = (value >>> 8)
  this[offset] = (value & 0xff)
  return offset + 4
}

Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  this[offset] = (value >>> 24)
  this[offset + 1] = (value >>> 16)
  this[offset + 2] = (value >>> 8)
  this[offset + 3] = (value & 0xff)
  return offset + 4
}

Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    var limit = Math.pow(2, (8 * byteLength) - 1)

    checkInt(this, value, offset, byteLength, limit - 1, -limit)
  }

  var i = 0
  var mul = 1
  var sub = 0
  this[offset] = value & 0xFF
  while (++i < byteLength && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
      sub = 1
    }
    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    var limit = Math.pow(2, (8 * byteLength) - 1)

    checkInt(this, value, offset, byteLength, limit - 1, -limit)
  }

  var i = byteLength - 1
  var mul = 1
  var sub = 0
  this[offset + i] = value & 0xFF
  while (--i >= 0 && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
      sub = 1
    }
    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
  if (value < 0) value = 0xff + value + 1
  this[offset] = (value & 0xff)
  return offset + 1
}

Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  return offset + 2
}

Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  this[offset] = (value >>> 8)
  this[offset + 1] = (value & 0xff)
  return offset + 2
}

Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  this[offset + 2] = (value >>> 16)
  this[offset + 3] = (value >>> 24)
  return offset + 4
}

Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  if (value < 0) value = 0xffffffff + value + 1
  this[offset] = (value >>> 24)
  this[offset + 1] = (value >>> 16)
  this[offset + 2] = (value >>> 8)
  this[offset + 3] = (value & 0xff)
  return offset + 4
}

function checkIEEE754 (buf, value, offset, ext, max, min) {
  if (offset + ext > buf.length) throw new RangeError('Index out of range')
  if (offset < 0) throw new RangeError('Index out of range')
}

function writeFloat (buf, value, offset, littleEndian, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
  }
  ieee754.write(buf, value, offset, littleEndian, 23, 4)
  return offset + 4
}

Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
  return writeFloat(this, value, offset, true, noAssert)
}

Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
  return writeFloat(this, value, offset, false, noAssert)
}

function writeDouble (buf, value, offset, littleEndian, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
  }
  ieee754.write(buf, value, offset, littleEndian, 52, 8)
  return offset + 8
}

Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
  return writeDouble(this, value, offset, true, noAssert)
}

Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
  return writeDouble(this, value, offset, false, noAssert)
}

// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
  if (!start) start = 0
  if (!end && end !== 0) end = this.length
  if (targetStart >= target.length) targetStart = target.length
  if (!targetStart) targetStart = 0
  if (end > 0 && end < start) end = start

  // Copy 0 bytes; we're done
  if (end === start) return 0
  if (target.length === 0 || this.length === 0) return 0

  // Fatal error conditions
  if (targetStart < 0) {
    throw new RangeError('targetStart out of bounds')
  }
  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
  if (end < 0) throw new RangeError('sourceEnd out of bounds')

  // Are we oob?
  if (end > this.length) end = this.length
  if (target.length - targetStart < end - start) {
    end = target.length - targetStart + start
  }

  var len = end - start

  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
    // Use built-in when available, missing from IE11
    this.copyWithin(targetStart, start, end)
  } else if (this === target && start < targetStart && targetStart < end) {
    // descending copy from end
    for (var i = len - 1; i >= 0; --i) {
      target[i + targetStart] = this[i + start]
    }
  } else {
    Uint8Array.prototype.set.call(
      target,
      this.subarray(start, end),
      targetStart
    )
  }

  return len
}

// Usage:
//    buffer.fill(number[, offset[, end]])
//    buffer.fill(buffer[, offset[, end]])
//    buffer.fill(string[, offset[, end]][, encoding])
Buffer.prototype.fill = function fill (val, start, end, encoding) {
  // Handle string cases:
  if (typeof val === 'string') {
    if (typeof start === 'string') {
      encoding = start
      start = 0
      end = this.length
    } else if (typeof end === 'string') {
      encoding = end
      end = this.length
    }
    if (encoding !== undefined && typeof encoding !== 'string') {
      throw new TypeError('encoding must be a string')
    }
    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
      throw new TypeError('Unknown encoding: ' + encoding)
    }
    if (val.length === 1) {
      var code = val.charCodeAt(0)
      if ((encoding === 'utf8' && code < 128) ||
          encoding === 'latin1') {
        // Fast path: If `val` fits into a single byte, use that numeric value.
        val = code
      }
    }
  } else if (typeof val === 'number') {
    val = val & 255
  }

  // Invalid ranges are not set to a default, so can range check early.
  if (start < 0 || this.length < start || this.length < end) {
    throw new RangeError('Out of range index')
  }

  if (end <= start) {
    return this
  }

  start = start >>> 0
  end = end === undefined ? this.length : end >>> 0

  if (!val) val = 0

  var i
  if (typeof val === 'number') {
    for (i = start; i < end; ++i) {
      this[i] = val
    }
  } else {
    var bytes = Buffer.isBuffer(val)
      ? val
      : Buffer.from(val, encoding)
    var len = bytes.length
    if (len === 0) {
      throw new TypeError('The value "' + val +
        '" is invalid for argument "value"')
    }
    for (i = 0; i < end - start; ++i) {
      this[i + start] = bytes[i % len]
    }
  }

  return this
}

// HELPER FUNCTIONS
// ================

var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g

function base64clean (str) {
  // Node takes equal signs as end of the Base64 encoding
  str = str.split('=')[0]
  // Node strips out invalid characters like \n and \t from the string, base64-js does not
  str = str.trim().replace(INVALID_BASE64_RE, '')
  // Node converts strings with length < 2 to ''
  if (str.length < 2) return ''
  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
  while (str.length % 4 !== 0) {
    str = str + '='
  }
  return str
}

function toHex (n) {
  if (n < 16) return '0' + n.toString(16)
  return n.toString(16)
}

function utf8ToBytes (string, units) {
  units = units || Infinity
  var codePoint
  var length = string.length
  var leadSurrogate = null
  var bytes = []

  for (var i = 0; i < length; ++i) {
    codePoint = string.charCodeAt(i)

    // is surrogate component
    if (codePoint > 0xD7FF && codePoint < 0xE000) {
      // last char was a lead
      if (!leadSurrogate) {
        // no lead yet
        if (codePoint > 0xDBFF) {
          // unexpected trail
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        } else if (i + 1 === length) {
          // unpaired lead
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        }

        // valid lead
        leadSurrogate = codePoint

        continue
      }

      // 2 leads in a row
      if (codePoint < 0xDC00) {
        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
        leadSurrogate = codePoint
        continue
      }

      // valid surrogate pair
      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
    } else if (leadSurrogate) {
      // valid bmp char, but last char was a lead
      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
    }

    leadSurrogate = null

    // encode utf8
    if (codePoint < 0x80) {
      if ((units -= 1) < 0) break
      bytes.push(codePoint)
    } else if (codePoint < 0x800) {
      if ((units -= 2) < 0) break
      bytes.push(
        codePoint >> 0x6 | 0xC0,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x10000) {
      if ((units -= 3) < 0) break
      bytes.push(
        codePoint >> 0xC | 0xE0,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x110000) {
      if ((units -= 4) < 0) break
      bytes.push(
        codePoint >> 0x12 | 0xF0,
        codePoint >> 0xC & 0x3F | 0x80,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else {
      throw new Error('Invalid code point')
    }
  }

  return bytes
}

function asciiToBytes (str) {
  var byteArray = []
  for (var i = 0; i < str.length; ++i) {
    // Node's code seems to be doing this and not & 0x7F..
    byteArray.push(str.charCodeAt(i) & 0xFF)
  }
  return byteArray
}

function utf16leToBytes (str, units) {
  var c, hi, lo
  var byteArray = []
  for (var i = 0; i < str.length; ++i) {
    if ((units -= 2) < 0) break

    c = str.charCodeAt(i)
    hi = c >> 8
    lo = c % 256
    byteArray.push(lo)
    byteArray.push(hi)
  }

  return byteArray
}

function base64ToBytes (str) {
  return base64.toByteArray(base64clean(str))
}

function blitBuffer (src, dst, offset, length) {
  for (var i = 0; i < length; ++i) {
    if ((i + offset >= dst.length) || (i >= src.length)) break
    dst[i + offset] = src[i]
  }
  return i
}

// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
// the `instanceof` check but they should be treated as of that type.
// See: https://github.com/feross/buffer/issues/166
function isInstance (obj, type) {
  return obj instanceof type ||
    (obj != null && obj.constructor != null && obj.constructor.name != null &&
      obj.constructor.name === type.name)
}
function numberIsNaN (obj) {
  // For IE11 support
  return obj !== obj // eslint-disable-line no-self-compare
}

}).call(this,require("buffer").Buffer)
},{"base64-js":27,"buffer":32,"ieee754":35}],33:[function(require,module,exports){
(function (Buffer){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

// NOTE: These type checking functions intentionally don't use `instanceof`
// because it is fragile and can be easily faked with `Object.create()`.

function isArray(arg) {
  if (Array.isArray) {
    return Array.isArray(arg);
  }
  return objectToString(arg) === '[object Array]';
}
exports.isArray = isArray;

function isBoolean(arg) {
  return typeof arg === 'boolean';
}
exports.isBoolean = isBoolean;

function isNull(arg) {
  return arg === null;
}
exports.isNull = isNull;

function isNullOrUndefined(arg) {
  return arg == null;
}
exports.isNullOrUndefined = isNullOrUndefined;

function isNumber(arg) {
  return typeof arg === 'number';
}
exports.isNumber = isNumber;

function isString(arg) {
  return typeof arg === 'string';
}
exports.isString = isString;

function isSymbol(arg) {
  return typeof arg === 'symbol';
}
exports.isSymbol = isSymbol;

function isUndefined(arg) {
  return arg === void 0;
}
exports.isUndefined = isUndefined;

function isRegExp(re) {
  return objectToString(re) === '[object RegExp]';
}
exports.isRegExp = isRegExp;

function isObject(arg) {
  return typeof arg === 'object' && arg !== null;
}
exports.isObject = isObject;

function isDate(d) {
  return objectToString(d) === '[object Date]';
}
exports.isDate = isDate;

function isError(e) {
  return (objectToString(e) === '[object Error]' || e instanceof Error);
}
exports.isError = isError;

function isFunction(arg) {
  return typeof arg === 'function';
}
exports.isFunction = isFunction;

function isPrimitive(arg) {
  return arg === null ||
         typeof arg === 'boolean' ||
         typeof arg === 'number' ||
         typeof arg === 'string' ||
         typeof arg === 'symbol' ||  // ES6 symbol
         typeof arg === 'undefined';
}
exports.isPrimitive = isPrimitive;

exports.isBuffer = Buffer.isBuffer;

function objectToString(o) {
  return Object.prototype.toString.call(o);
}

}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
},{"../../is-buffer/index.js":37}],34:[function(require,module,exports){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

function EventEmitter() {
  this._events = this._events || {};
  this._maxListeners = this._maxListeners || undefined;
}
module.exports = EventEmitter;

// Backwards-compat with node 0.10.x
EventEmitter.EventEmitter = EventEmitter;

EventEmitter.prototype._events = undefined;
EventEmitter.prototype._maxListeners = undefined;

// By default EventEmitters will print a warning if more than 10 listeners are
// added to it. This is a useful default which helps finding memory leaks.
EventEmitter.defaultMaxListeners = 10;

// Obviously not all Emitters should be limited to 10. This function allows
// that to be increased. Set to zero for unlimited.
EventEmitter.prototype.setMaxListeners = function(n) {
  if (!isNumber(n) || n < 0 || isNaN(n))
    throw TypeError('n must be a positive number');
  this._maxListeners = n;
  return this;
};

EventEmitter.prototype.emit = function(type) {
  var er, handler, len, args, i, listeners;

  if (!this._events)
    this._events = {};

  // If there is no 'error' event listener then throw.
  if (type === 'error') {
    if (!this._events.error ||
        (isObject(this._events.error) && !this._events.error.length)) {
      er = arguments[1];
      if (er instanceof Error) {
        throw er; // Unhandled 'error' event
      } else {
        // At least give some kind of context to the user
        var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
        err.context = er;
        throw err;
      }
    }
  }

  handler = this._events[type];

  if (isUndefined(handler))
    return false;

  if (isFunction(handler)) {
    switch (arguments.length) {
      // fast cases
      case 1:
        handler.call(this);
        break;
      case 2:
        handler.call(this, arguments[1]);
        break;
      case 3:
        handler.call(this, arguments[1], arguments[2]);
        break;
      // slower
      default:
        args = Array.prototype.slice.call(arguments, 1);
        handler.apply(this, args);
    }
  } else if (isObject(handler)) {
    args = Array.prototype.slice.call(arguments, 1);
    listeners = handler.slice();
    len = listeners.length;
    for (i = 0; i < len; i++)
      listeners[i].apply(this, args);
  }

  return true;
};

EventEmitter.prototype.addListener = function(type, listener) {
  var m;

  if (!isFunction(listener))
    throw TypeError('listener must be a function');

  if (!this._events)
    this._events = {};

  // To avoid recursion in the case that type === "newListener"! Before
  // adding it to the listeners, first emit "newListener".
  if (this._events.newListener)
    this.emit('newListener', type,
              isFunction(listener.listener) ?
              listener.listener : listener);

  if (!this._events[type])
    // Optimize the case of one listener. Don't need the extra array object.
    this._events[type] = listener;
  else if (isObject(this._events[type]))
    // If we've already got an array, just append.
    this._events[type].push(listener);
  else
    // Adding the second element, need to change to array.
    this._events[type] = [this._events[type], listener];

  // Check for listener leak
  if (isObject(this._events[type]) && !this._events[type].warned) {
    if (!isUndefined(this._maxListeners)) {
      m = this._maxListeners;
    } else {
      m = EventEmitter.defaultMaxListeners;
    }

    if (m && m > 0 && this._events[type].length > m) {
      this._events[type].warned = true;
      console.error('(node) warning: possible EventEmitter memory ' +
                    'leak detected. %d listeners added. ' +
                    'Use emitter.setMaxListeners() to increase limit.',
                    this._events[type].length);
      if (typeof console.trace === 'function') {
        // not supported in IE 10
        console.trace();
      }
    }
  }

  return this;
};

EventEmitter.prototype.on = EventEmitter.prototype.addListener;

EventEmitter.prototype.once = function(type, listener) {
  if (!isFunction(listener))
    throw TypeError('listener must be a function');

  var fired = false;

  function g() {
    this.removeListener(type, g);

    if (!fired) {
      fired = true;
      listener.apply(this, arguments);
    }
  }

  g.listener = listener;
  this.on(type, g);

  return this;
};

// emits a 'removeListener' event iff the listener was removed
EventEmitter.prototype.removeListener = function(type, listener) {
  var list, position, length, i;

  if (!isFunction(listener))
    throw TypeError('listener must be a function');

  if (!this._events || !this._events[type])
    return this;

  list = this._events[type];
  length = list.length;
  position = -1;

  if (list === listener ||
      (isFunction(list.listener) && list.listener === listener)) {
    delete this._events[type];
    if (this._events.removeListener)
      this.emit('removeListener', type, listener);

  } else if (isObject(list)) {
    for (i = length; i-- > 0;) {
      if (list[i] === listener ||
          (list[i].listener && list[i].listener === listener)) {
        position = i;
        break;
      }
    }

    if (position < 0)
      return this;

    if (list.length === 1) {
      list.length = 0;
      delete this._events[type];
    } else {
      list.splice(position, 1);
    }

    if (this._events.removeListener)
      this.emit('removeListener', type, listener);
  }

  return this;
};

EventEmitter.prototype.removeAllListeners = function(type) {
  var key, listeners;

  if (!this._events)
    return this;

  // not listening for removeListener, no need to emit
  if (!this._events.removeListener) {
    if (arguments.length === 0)
      this._events = {};
    else if (this._events[type])
      delete this._events[type];
    return this;
  }

  // emit removeListener for all listeners on all events
  if (arguments.length === 0) {
    for (key in this._events) {
      if (key === 'removeListener') continue;
      this.removeAllListeners(key);
    }
    this.removeAllListeners('removeListener');
    this._events = {};
    return this;
  }

  listeners = this._events[type];

  if (isFunction(listeners)) {
    this.removeListener(type, listeners);
  } else if (listeners) {
    // LIFO order
    while (listeners.length)
      this.removeListener(type, listeners[listeners.length - 1]);
  }
  delete this._events[type];

  return this;
};

EventEmitter.prototype.listeners = function(type) {
  var ret;
  if (!this._events || !this._events[type])
    ret = [];
  else if (isFunction(this._events[type]))
    ret = [this._events[type]];
  else
    ret = this._events[type].slice();
  return ret;
};

EventEmitter.prototype.listenerCount = function(type) {
  if (this._events) {
    var evlistener = this._events[type];

    if (isFunction(evlistener))
      return 1;
    else if (evlistener)
      return evlistener.length;
  }
  return 0;
};

EventEmitter.listenerCount = function(emitter, type) {
  return emitter.listenerCount(type);
};

function isFunction(arg) {
  return typeof arg === 'function';
}

function isNumber(arg) {
  return typeof arg === 'number';
}

function isObject(arg) {
  return typeof arg === 'object' && arg !== null;
}

function isUndefined(arg) {
  return arg === void 0;
}

},{}],35:[function(require,module,exports){
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
  var e, m
  var eLen = (nBytes * 8) - mLen - 1
  var eMax = (1 << eLen) - 1
  var eBias = eMax >> 1
  var nBits = -7
  var i = isLE ? (nBytes - 1) : 0
  var d = isLE ? -1 : 1
  var s = buffer[offset + i]

  i += d

  e = s & ((1 << (-nBits)) - 1)
  s >>= (-nBits)
  nBits += eLen
  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}

  m = e & ((1 << (-nBits)) - 1)
  e >>= (-nBits)
  nBits += mLen
  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}

  if (e === 0) {
    e = 1 - eBias
  } else if (e === eMax) {
    return m ? NaN : ((s ? -1 : 1) * Infinity)
  } else {
    m = m + Math.pow(2, mLen)
    e = e - eBias
  }
  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
}

exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
  var e, m, c
  var eLen = (nBytes * 8) - mLen - 1
  var eMax = (1 << eLen) - 1
  var eBias = eMax >> 1
  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
  var i = isLE ? 0 : (nBytes - 1)
  var d = isLE ? 1 : -1
  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0

  value = Math.abs(value)

  if (isNaN(value) || value === Infinity) {
    m = isNaN(value) ? 1 : 0
    e = eMax
  } else {
    e = Math.floor(Math.log(value) / Math.LN2)
    if (value * (c = Math.pow(2, -e)) < 1) {
      e--
      c *= 2
    }
    if (e + eBias >= 1) {
      value += rt / c
    } else {
      value += rt * Math.pow(2, 1 - eBias)
    }
    if (value * c >= 2) {
      e++
      c /= 2
    }

    if (e + eBias >= eMax) {
      m = 0
      e = eMax
    } else if (e + eBias >= 1) {
      m = ((value * c) - 1) * Math.pow(2, mLen)
      e = e + eBias
    } else {
      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
      e = 0
    }
  }

  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}

  e = (e << mLen) | m
  eLen += mLen
  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}

  buffer[offset + i - d] |= s * 128
}

},{}],36:[function(require,module,exports){
arguments[4][24][0].apply(exports,arguments)
},{"dup":24}],37:[function(require,module,exports){
/*!
 * Determine if an object is a Buffer
 *
 * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
 * @license  MIT
 */

// The _isBuffer check is for Safari 5-7 support, because it's missing
// Object.prototype.constructor. Remove this eventually
module.exports = function (obj) {
  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
}

function isBuffer (obj) {
  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
}

// For Node v0.10 support. Remove this eventually.
function isSlowBuffer (obj) {
  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
}

},{}],38:[function(require,module,exports){
var toString = {}.toString;

module.exports = Array.isArray || function (arr) {
  return toString.call(arr) == '[object Array]';
};

},{}],39:[function(require,module,exports){
'use strict';


var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
                (typeof Uint16Array !== 'undefined') &&
                (typeof Int32Array !== 'undefined');

function _has(obj, key) {
  return Object.prototype.hasOwnProperty.call(obj, key);
}

exports.assign = function (obj /*from1, from2, from3, ...*/) {
  var sources = Array.prototype.slice.call(arguments, 1);
  while (sources.length) {
    var source = sources.shift();
    if (!source) { continue; }

    if (typeof source !== 'object') {
      throw new TypeError(source + 'must be non-object');
    }

    for (var p in source) {
      if (_has(source, p)) {
        obj[p] = source[p];
      }
    }
  }

  return obj;
};


// reduce buffer size, avoiding mem copy
exports.shrinkBuf = function (buf, size) {
  if (buf.length === size) { return buf; }
  if (buf.subarray) { return buf.subarray(0, size); }
  buf.length = size;
  return buf;
};


var fnTyped = {
  arraySet: function (dest, src, src_offs, len, dest_offs) {
    if (src.subarray && dest.subarray) {
      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
      return;
    }
    // Fallback to ordinary array
    for (var i = 0; i < len; i++) {
      dest[dest_offs + i] = src[src_offs + i];
    }
  },
  // Join array of chunks to single array.
  flattenChunks: function (chunks) {
    var i, l, len, pos, chunk, result;

    // calculate data length
    len = 0;
    for (i = 0, l = chunks.length; i < l; i++) {
      len += chunks[i].length;
    }

    // join chunks
    result = new Uint8Array(len);
    pos = 0;
    for (i = 0, l = chunks.length; i < l; i++) {
      chunk = chunks[i];
      result.set(chunk, pos);
      pos += chunk.length;
    }

    return result;
  }
};

var fnUntyped = {
  arraySet: function (dest, src, src_offs, len, dest_offs) {
    for (var i = 0; i < len; i++) {
      dest[dest_offs + i] = src[src_offs + i];
    }
  },
  // Join array of chunks to single array.
  flattenChunks: function (chunks) {
    return [].concat.apply([], chunks);
  }
};


// Enable/Disable typed arrays use, for testing
//
exports.setTyped = function (on) {
  if (on) {
    exports.Buf8  = Uint8Array;
    exports.Buf16 = Uint16Array;
    exports.Buf32 = Int32Array;
    exports.assign(exports, fnTyped);
  } else {
    exports.Buf8  = Array;
    exports.Buf16 = Array;
    exports.Buf32 = Array;
    exports.assign(exports, fnUntyped);
  }
};

exports.setTyped(TYPED_OK);

},{}],40:[function(require,module,exports){
'use strict';

// Note: adler32 takes 12% for level 0 and 2% for level 6.
// It isn't worth it to make additional optimizations as in original.
// Small size is preferable.

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

function adler32(adler, buf, len, pos) {
  var s1 = (adler & 0xffff) |0,
      s2 = ((adler >>> 16) & 0xffff) |0,
      n = 0;

  while (len !== 0) {
    // Set limit ~ twice less than 5552, to keep
    // s2 in 31-bits, because we force signed ints.
    // in other case %= will fail.
    n = len > 2000 ? 2000 : len;
    len -= n;

    do {
      s1 = (s1 + buf[pos++]) |0;
      s2 = (s2 + s1) |0;
    } while (--n);

    s1 %= 65521;
    s2 %= 65521;
  }

  return (s1 | (s2 << 16)) |0;
}


module.exports = adler32;

},{}],41:[function(require,module,exports){
'use strict';

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

module.exports = {

  /* Allowed flush values; see deflate() and inflate() below for details */
  Z_NO_FLUSH:         0,
  Z_PARTIAL_FLUSH:    1,
  Z_SYNC_FLUSH:       2,
  Z_FULL_FLUSH:       3,
  Z_FINISH:           4,
  Z_BLOCK:            5,
  Z_TREES:            6,

  /* Return codes for the compression/decompression functions. Negative values
  * are errors, positive values are used for special but normal events.
  */
  Z_OK:               0,
  Z_STREAM_END:       1,
  Z_NEED_DICT:        2,
  Z_ERRNO:           -1,
  Z_STREAM_ERROR:    -2,
  Z_DATA_ERROR:      -3,
  //Z_MEM_ERROR:     -4,
  Z_BUF_ERROR:       -5,
  //Z_VERSION_ERROR: -6,

  /* compression levels */
  Z_NO_COMPRESSION:         0,
  Z_BEST_SPEED:             1,
  Z_BEST_COMPRESSION:       9,
  Z_DEFAULT_COMPRESSION:   -1,


  Z_FILTERED:               1,
  Z_HUFFMAN_ONLY:           2,
  Z_RLE:                    3,
  Z_FIXED:                  4,
  Z_DEFAULT_STRATEGY:       0,

  /* Possible values of the data_type field (though see inflate()) */
  Z_BINARY:                 0,
  Z_TEXT:                   1,
  //Z_ASCII:                1, // = Z_TEXT (deprecated)
  Z_UNKNOWN:                2,

  /* The deflate compression method */
  Z_DEFLATED:               8
  //Z_NULL:                 null // Use -1 or null inline, depending on var type
};

},{}],42:[function(require,module,exports){
'use strict';

// Note: we can't get significant speed boost here.
// So write code to minimize size - no pregenerated tables
// and array tools dependencies.

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

// Use ordinary array, since untyped makes no boost here
function makeTable() {
  var c, table = [];

  for (var n = 0; n < 256; n++) {
    c = n;
    for (var k = 0; k < 8; k++) {
      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
    }
    table[n] = c;
  }

  return table;
}

// Create table on load. Just 255 signed longs. Not a problem.
var crcTable = makeTable();


function crc32(crc, buf, len, pos) {
  var t = crcTable,
      end = pos + len;

  crc ^= -1;

  for (var i = pos; i < end; i++) {
    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
  }

  return (crc ^ (-1)); // >>> 0;
}


module.exports = crc32;

},{}],43:[function(require,module,exports){
'use strict';

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

var utils   = require('../utils/common');
var trees   = require('./trees');
var adler32 = require('./adler32');
var crc32   = require('./crc32');
var msg     = require('./messages');

/* Public constants ==========================================================*/
/* ===========================================================================*/


/* Allowed flush values; see deflate() and inflate() below for details */
var Z_NO_FLUSH      = 0;
var Z_PARTIAL_FLUSH = 1;
//var Z_SYNC_FLUSH    = 2;
var Z_FULL_FLUSH    = 3;
var Z_FINISH        = 4;
var Z_BLOCK         = 5;
//var Z_TREES         = 6;


/* Return codes for the compression/decompression functions. Negative values
 * are errors, positive values are used for special but normal events.
 */
var Z_OK            = 0;
var Z_STREAM_END    = 1;
//var Z_NEED_DICT     = 2;
//var Z_ERRNO         = -1;
var Z_STREAM_ERROR  = -2;
var Z_DATA_ERROR    = -3;
//var Z_MEM_ERROR     = -4;
var Z_BUF_ERROR     = -5;
//var Z_VERSION_ERROR = -6;


/* compression levels */
//var Z_NO_COMPRESSION      = 0;
//var Z_BEST_SPEED          = 1;
//var Z_BEST_COMPRESSION    = 9;
var Z_DEFAULT_COMPRESSION = -1;


var Z_FILTERED            = 1;
var Z_HUFFMAN_ONLY        = 2;
var Z_RLE                 = 3;
var Z_FIXED               = 4;
var Z_DEFAULT_STRATEGY    = 0;

/* Possible values of the data_type field (though see inflate()) */
//var Z_BINARY              = 0;
//var Z_TEXT                = 1;
//var Z_ASCII               = 1; // = Z_TEXT
var Z_UNKNOWN             = 2;


/* The deflate compression method */
var Z_DEFLATED  = 8;

/*============================================================================*/


var MAX_MEM_LEVEL = 9;
/* Maximum value for memLevel in deflateInit2 */
var MAX_WBITS = 15;
/* 32K LZ77 window */
var DEF_MEM_LEVEL = 8;


var LENGTH_CODES  = 29;
/* number of length codes, not counting the special END_BLOCK code */
var LITERALS      = 256;
/* number of literal bytes 0..255 */
var L_CODES       = LITERALS + 1 + LENGTH_CODES;
/* number of Literal or Length codes, including the END_BLOCK code */
var D_CODES       = 30;
/* number of distance codes */
var BL_CODES      = 19;
/* number of codes used to transfer the bit lengths */
var HEAP_SIZE     = 2 * L_CODES + 1;
/* maximum heap size */
var MAX_BITS  = 15;
/* All codes must not exceed MAX_BITS bits */

var MIN_MATCH = 3;
var MAX_MATCH = 258;
var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);

var PRESET_DICT = 0x20;

var INIT_STATE = 42;
var EXTRA_STATE = 69;
var NAME_STATE = 73;
var COMMENT_STATE = 91;
var HCRC_STATE = 103;
var BUSY_STATE = 113;
var FINISH_STATE = 666;

var BS_NEED_MORE      = 1; /* block not completed, need more input or more output */
var BS_BLOCK_DONE     = 2; /* block flush performed */
var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
var BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */

var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.

function err(strm, errorCode) {
  strm.msg = msg[errorCode];
  return errorCode;
}

function rank(f) {
  return ((f) << 1) - ((f) > 4 ? 9 : 0);
}

function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }


/* =========================================================================
 * Flush as much pending output as possible. All deflate() output goes
 * through this function so some applications may wish to modify it
 * to avoid allocating a large strm->output buffer and copying into it.
 * (See also read_buf()).
 */
function flush_pending(strm) {
  var s = strm.state;

  //_tr_flush_bits(s);
  var len = s.pending;
  if (len > strm.avail_out) {
    len = strm.avail_out;
  }
  if (len === 0) { return; }

  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
  strm.next_out += len;
  s.pending_out += len;
  strm.total_out += len;
  strm.avail_out -= len;
  s.pending -= len;
  if (s.pending === 0) {
    s.pending_out = 0;
  }
}


function flush_block_only(s, last) {
  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
  s.block_start = s.strstart;
  flush_pending(s.strm);
}


function put_byte(s, b) {
  s.pending_buf[s.pending++] = b;
}


/* =========================================================================
 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
 * IN assertion: the stream state is correct and there is enough room in
 * pending_buf.
 */
function putShortMSB(s, b) {
//  put_byte(s, (Byte)(b >> 8));
//  put_byte(s, (Byte)(b & 0xff));
  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
  s.pending_buf[s.pending++] = b & 0xff;
}


/* ===========================================================================
 * Read a new buffer from the current input stream, update the adler32
 * and total number of bytes read.  All deflate() input goes through
 * this function so some applications may wish to modify it to avoid
 * allocating a large strm->input buffer and copying from it.
 * (See also flush_pending()).
 */
function read_buf(strm, buf, start, size) {
  var len = strm.avail_in;

  if (len > size) { len = size; }
  if (len === 0) { return 0; }

  strm.avail_in -= len;

  // zmemcpy(buf, strm->next_in, len);
  utils.arraySet(buf, strm.input, strm.next_in, len, start);
  if (strm.state.wrap === 1) {
    strm.adler = adler32(strm.adler, buf, len, start);
  }

  else if (strm.state.wrap === 2) {
    strm.adler = crc32(strm.adler, buf, len, start);
  }

  strm.next_in += len;
  strm.total_in += len;

  return len;
}


/* ===========================================================================
 * Set match_start to the longest match starting at the given string and
 * return its length. Matches shorter or equal to prev_length are discarded,
 * in which case the result is equal to prev_length and match_start is
 * garbage.
 * IN assertions: cur_match is the head of the hash chain for the current
 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
 * OUT assertion: the match length is not greater than s->lookahead.
 */
function longest_match(s, cur_match) {
  var chain_length = s.max_chain_length;      /* max hash chain length */
  var scan = s.strstart; /* current string */
  var match;                       /* matched string */
  var len;                           /* length of current match */
  var best_len = s.prev_length;              /* best match length so far */
  var nice_match = s.nice_match;             /* stop if match long enough */
  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;

  var _win = s.window; // shortcut

  var wmask = s.w_mask;
  var prev  = s.prev;

  /* Stop when cur_match becomes <= limit. To simplify the code,
   * we prevent matches with the string of window index 0.
   */

  var strend = s.strstart + MAX_MATCH;
  var scan_end1  = _win[scan + best_len - 1];
  var scan_end   = _win[scan + best_len];

  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
   * It is easy to get rid of this optimization if necessary.
   */
  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");

  /* Do not waste too much time if we already have a good match: */
  if (s.prev_length >= s.good_match) {
    chain_length >>= 2;
  }
  /* Do not look for matches beyond the end of the input. This is necessary
   * to make deflate deterministic.
   */
  if (nice_match > s.lookahead) { nice_match = s.lookahead; }

  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");

  do {
    // Assert(cur_match < s->strstart, "no future");
    match = cur_match;

    /* Skip to next match if the match length cannot increase
     * or if the match length is less than 2.  Note that the checks below
     * for insufficient lookahead only occur occasionally for performance
     * reasons.  Therefore uninitialized memory will be accessed, and
     * conditional jumps will be made that depend on those values.
     * However the length of the match is limited to the lookahead, so
     * the output of deflate is not affected by the uninitialized values.
     */

    if (_win[match + best_len]     !== scan_end  ||
        _win[match + best_len - 1] !== scan_end1 ||
        _win[match]                !== _win[scan] ||
        _win[++match]              !== _win[scan + 1]) {
      continue;
    }

    /* The check at best_len-1 can be removed because it will be made
     * again later. (This heuristic is not always a win.)
     * It is not necessary to compare scan[2] and match[2] since they
     * are always equal when the other bytes match, given that
     * the hash keys are equal and that HASH_BITS >= 8.
     */
    scan += 2;
    match++;
    // Assert(*scan == *match, "match[2]?");

    /* We check for insufficient lookahead only every 8th comparison;
     * the 256th check will be made at strstart+258.
     */
    do {
      /*jshint noempty:false*/
    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
             scan < strend);

    // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");

    len = MAX_MATCH - (strend - scan);
    scan = strend - MAX_MATCH;

    if (len > best_len) {
      s.match_start = cur_match;
      best_len = len;
      if (len >= nice_match) {
        break;
      }
      scan_end1  = _win[scan + best_len - 1];
      scan_end   = _win[scan + best_len];
    }
  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);

  if (best_len <= s.lookahead) {
    return best_len;
  }
  return s.lookahead;
}


/* ===========================================================================
 * Fill the window when the lookahead becomes insufficient.
 * Updates strstart and lookahead.
 *
 * IN assertion: lookahead < MIN_LOOKAHEAD
 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
 *    At least one byte has been read, or avail_in == 0; reads are
 *    performed for at least two bytes (required for the zip translate_eol
 *    option -- not supported here).
 */
function fill_window(s) {
  var _w_size = s.w_size;
  var p, n, m, more, str;

  //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");

  do {
    more = s.window_size - s.lookahead - s.strstart;

    // JS ints have 32 bit, block below not needed
    /* Deal with !@#$% 64K limit: */
    //if (sizeof(int) <= 2) {
    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
    //        more = wsize;
    //
    //  } else if (more == (unsigned)(-1)) {
    //        /* Very unlikely, but possible on 16 bit machine if
    //         * strstart == 0 && lookahead == 1 (input done a byte at time)
    //         */
    //        more--;
    //    }
    //}


    /* If the window is almost full and there is insufficient lookahead,
     * move the upper half to the lower one to make room in the upper half.
     */
    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {

      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
      s.match_start -= _w_size;
      s.strstart -= _w_size;
      /* we now have strstart >= MAX_DIST */
      s.block_start -= _w_size;

      /* Slide the hash table (could be avoided with 32 bit values
       at the expense of memory usage). We slide even when level == 0
       to keep the hash table consistent if we switch back to level > 0
       later. (Using level 0 permanently is not an optimal usage of
       zlib, so we don't care about this pathological case.)
       */

      n = s.hash_size;
      p = n;
      do {
        m = s.head[--p];
        s.head[p] = (m >= _w_size ? m - _w_size : 0);
      } while (--n);

      n = _w_size;
      p = n;
      do {
        m = s.prev[--p];
        s.prev[p] = (m >= _w_size ? m - _w_size : 0);
        /* If n is not on any hash chain, prev[n] is garbage but
         * its value will never be used.
         */
      } while (--n);

      more += _w_size;
    }
    if (s.strm.avail_in === 0) {
      break;
    }

    /* If there was no sliding:
     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
     *    more == window_size - lookahead - strstart
     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
     * => more >= window_size - 2*WSIZE + 2
     * In the BIG_MEM or MMAP case (not yet supported),
     *   window_size == input_size + MIN_LOOKAHEAD  &&
     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
     * Otherwise, window_size == 2*WSIZE so more >= 2.
     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
     */
    //Assert(more >= 2, "more < 2");
    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
    s.lookahead += n;

    /* Initialize the hash value now that we have some input: */
    if (s.lookahead + s.insert >= MIN_MATCH) {
      str = s.strstart - s.insert;
      s.ins_h = s.window[str];

      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
//#if MIN_MATCH != 3
//        Call update_hash() MIN_MATCH-3 more times
//#endif
      while (s.insert) {
        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;

        s.prev[str & s.w_mask] = s.head[s.ins_h];
        s.head[s.ins_h] = str;
        str++;
        s.insert--;
        if (s.lookahead + s.insert < MIN_MATCH) {
          break;
        }
      }
    }
    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
     * but this is not important since only literal bytes will be emitted.
     */

  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);

  /* If the WIN_INIT bytes after the end of the current data have never been
   * written, then zero those bytes in order to avoid memory check reports of
   * the use of uninitialized (or uninitialised as Julian writes) bytes by
   * the longest match routines.  Update the high water mark for the next
   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
   */
//  if (s.high_water < s.window_size) {
//    var curr = s.strstart + s.lookahead;
//    var init = 0;
//
//    if (s.high_water < curr) {
//      /* Previous high water mark below current data -- zero WIN_INIT
//       * bytes or up to end of window, whichever is less.
//       */
//      init = s.window_size - curr;
//      if (init > WIN_INIT)
//        init = WIN_INIT;
//      zmemzero(s->window + curr, (unsigned)init);
//      s->high_water = curr + init;
//    }
//    else if (s->high_water < (ulg)curr + WIN_INIT) {
//      /* High water mark at or above current data, but below current data
//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
//       * to end of window, whichever is less.
//       */
//      init = (ulg)curr + WIN_INIT - s->high_water;
//      if (init > s->window_size - s->high_water)
//        init = s->window_size - s->high_water;
//      zmemzero(s->window + s->high_water, (unsigned)init);
//      s->high_water += init;
//    }
//  }
//
//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
//    "not enough room for search");
}

/* ===========================================================================
 * Copy without compression as much as possible from the input stream, return
 * the current block state.
 * This function does not insert new strings in the dictionary since
 * uncompressible data is probably not useful. This function is used
 * only for the level=0 compression option.
 * NOTE: this function should be optimized to avoid extra copying from
 * window to pending_buf.
 */
function deflate_stored(s, flush) {
  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
   * to pending_buf_size, and each stored block has a 5 byte header:
   */
  var max_block_size = 0xffff;

  if (max_block_size > s.pending_buf_size - 5) {
    max_block_size = s.pending_buf_size - 5;
  }

  /* Copy as much as possible from input to output: */
  for (;;) {
    /* Fill the window as much as possible: */
    if (s.lookahead <= 1) {

      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
      //  s->block_start >= (long)s->w_size, "slide too late");
//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
//        s.block_start >= s.w_size)) {
//        throw  new Error("slide too late");
//      }

      fill_window(s);
      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
        return BS_NEED_MORE;
      }

      if (s.lookahead === 0) {
        break;
      }
      /* flush the current block */
    }
    //Assert(s->block_start >= 0L, "block gone");
//    if (s.block_start < 0) throw new Error("block gone");

    s.strstart += s.lookahead;
    s.lookahead = 0;

    /* Emit a stored block if pending_buf will be full: */
    var max_start = s.block_start + max_block_size;

    if (s.strstart === 0 || s.strstart >= max_start) {
      /* strstart == 0 is possible when wraparound on 16-bit machine */
      s.lookahead = s.strstart - max_start;
      s.strstart = max_start;
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/


    }
    /* Flush if we may have to slide, otherwise block_start may become
     * negative and the data will be gone:
     */
    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/
    }
  }

  s.insert = 0;

  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }

  if (s.strstart > s.block_start) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }

  return BS_NEED_MORE;
}

/* ===========================================================================
 * Compress as much as possible from the input stream, return the current
 * block state.
 * This function does not perform lazy evaluation of matches and inserts
 * new strings in the dictionary only for unmatched strings or for short
 * matches. It is used only for the fast compression options.
 */
function deflate_fast(s, flush) {
  var hash_head;        /* head of the hash chain */
  var bflush;           /* set if current block must be flushed */

  for (;;) {
    /* Make sure that we always have enough lookahead, except
     * at the end of the input file. We need MAX_MATCH bytes
     * for the next match, plus MIN_MATCH bytes to insert the
     * string following the next match.
     */
    if (s.lookahead < MIN_LOOKAHEAD) {
      fill_window(s);
      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
        return BS_NEED_MORE;
      }
      if (s.lookahead === 0) {
        break; /* flush the current block */
      }
    }

    /* Insert the string window[strstart .. strstart+2] in the
     * dictionary, and set hash_head to the head of the hash chain:
     */
    hash_head = 0/*NIL*/;
    if (s.lookahead >= MIN_MATCH) {
      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
      s.head[s.ins_h] = s.strstart;
      /***/
    }

    /* Find the longest match, discarding those <= prev_length.
     * At this point we have always match_length < MIN_MATCH
     */
    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
      /* To simplify the code, we prevent matches with the string
       * of window index 0 (in particular we have to avoid a match
       * of the string with itself at the start of the input file).
       */
      s.match_length = longest_match(s, hash_head);
      /* longest_match() sets match_start */
    }
    if (s.match_length >= MIN_MATCH) {
      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only

      /*** _tr_tally_dist(s, s.strstart - s.match_start,
                     s.match_length - MIN_MATCH, bflush); ***/
      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);

      s.lookahead -= s.match_length;

      /* Insert new strings in the hash table only if the match length
       * is not too large. This saves time but degrades compression.
       */
      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
        s.match_length--; /* string at strstart already in table */
        do {
          s.strstart++;
          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
          s.head[s.ins_h] = s.strstart;
          /***/
          /* strstart never exceeds WSIZE-MAX_MATCH, so there are
           * always MIN_MATCH bytes ahead.
           */
        } while (--s.match_length !== 0);
        s.strstart++;
      } else
      {
        s.strstart += s.match_length;
        s.match_length = 0;
        s.ins_h = s.window[s.strstart];
        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;

//#if MIN_MATCH != 3
//                Call UPDATE_HASH() MIN_MATCH-3 more times
//#endif
        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
         * matter since it will be recomputed at next deflate call.
         */
      }
    } else {
      /* No match, output a literal byte */
      //Tracevv((stderr,"%c", s.window[s.strstart]));
      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);

      s.lookahead--;
      s.strstart++;
    }
    if (bflush) {
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/
    }
  }
  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);
  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }
  if (s.last_lit) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }
  return BS_BLOCK_DONE;
}

/* ===========================================================================
 * Same as above, but achieves better compression. We use a lazy
 * evaluation for matches: a match is finally adopted only if there is
 * no better match at the next window position.
 */
function deflate_slow(s, flush) {
  var hash_head;          /* head of hash chain */
  var bflush;              /* set if current block must be flushed */

  var max_insert;

  /* Process the input block. */
  for (;;) {
    /* Make sure that we always have enough lookahead, except
     * at the end of the input file. We need MAX_MATCH bytes
     * for the next match, plus MIN_MATCH bytes to insert the
     * string following the next match.
     */
    if (s.lookahead < MIN_LOOKAHEAD) {
      fill_window(s);
      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
        return BS_NEED_MORE;
      }
      if (s.lookahead === 0) { break; } /* flush the current block */
    }

    /* Insert the string window[strstart .. strstart+2] in the
     * dictionary, and set hash_head to the head of the hash chain:
     */
    hash_head = 0/*NIL*/;
    if (s.lookahead >= MIN_MATCH) {
      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
      s.head[s.ins_h] = s.strstart;
      /***/
    }

    /* Find the longest match, discarding those <= prev_length.
     */
    s.prev_length = s.match_length;
    s.prev_match = s.match_start;
    s.match_length = MIN_MATCH - 1;

    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
      /* To simplify the code, we prevent matches with the string
       * of window index 0 (in particular we have to avoid a match
       * of the string with itself at the start of the input file).
       */
      s.match_length = longest_match(s, hash_head);
      /* longest_match() sets match_start */

      if (s.match_length <= 5 &&
         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {

        /* If prev_match is also MIN_MATCH, match_start is garbage
         * but we will ignore the current match anyway.
         */
        s.match_length = MIN_MATCH - 1;
      }
    }
    /* If there was a match at the previous step and the current
     * match is not better, output the previous match:
     */
    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
      max_insert = s.strstart + s.lookahead - MIN_MATCH;
      /* Do not insert strings in hash table beyond this. */

      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);

      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
                     s.prev_length - MIN_MATCH, bflush);***/
      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
      /* Insert in hash table all strings up to the end of the match.
       * strstart-1 and strstart are already inserted. If there is not
       * enough lookahead, the last two strings are not inserted in
       * the hash table.
       */
      s.lookahead -= s.prev_length - 1;
      s.prev_length -= 2;
      do {
        if (++s.strstart <= max_insert) {
          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
          s.head[s.ins_h] = s.strstart;
          /***/
        }
      } while (--s.prev_length !== 0);
      s.match_available = 0;
      s.match_length = MIN_MATCH - 1;
      s.strstart++;

      if (bflush) {
        /*** FLUSH_BLOCK(s, 0); ***/
        flush_block_only(s, false);
        if (s.strm.avail_out === 0) {
          return BS_NEED_MORE;
        }
        /***/
      }

    } else if (s.match_available) {
      /* If there was no match at the previous position, output a
       * single literal. If there was a match but the current match
       * is longer, truncate the previous match to a single literal.
       */
      //Tracevv((stderr,"%c", s->window[s->strstart-1]));
      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);

      if (bflush) {
        /*** FLUSH_BLOCK_ONLY(s, 0) ***/
        flush_block_only(s, false);
        /***/
      }
      s.strstart++;
      s.lookahead--;
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
    } else {
      /* There is no previous match to compare with, wait for
       * the next step to decide.
       */
      s.match_available = 1;
      s.strstart++;
      s.lookahead--;
    }
  }
  //Assert (flush != Z_NO_FLUSH, "no flush?");
  if (s.match_available) {
    //Tracevv((stderr,"%c", s->window[s->strstart-1]));
    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);

    s.match_available = 0;
  }
  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }
  if (s.last_lit) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }

  return BS_BLOCK_DONE;
}


/* ===========================================================================
 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
 * one.  Do not maintain a hash table.  (It will be regenerated if this run of
 * deflate switches away from Z_RLE.)
 */
function deflate_rle(s, flush) {
  var bflush;            /* set if current block must be flushed */
  var prev;              /* byte at distance one to match */
  var scan, strend;      /* scan goes up to strend for length of run */

  var _win = s.window;

  for (;;) {
    /* Make sure that we always have enough lookahead, except
     * at the end of the input file. We need MAX_MATCH bytes
     * for the longest run, plus one for the unrolled loop.
     */
    if (s.lookahead <= MAX_MATCH) {
      fill_window(s);
      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
        return BS_NEED_MORE;
      }
      if (s.lookahead === 0) { break; } /* flush the current block */
    }

    /* See how many times the previous byte repeats */
    s.match_length = 0;
    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
      scan = s.strstart - 1;
      prev = _win[scan];
      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
        strend = s.strstart + MAX_MATCH;
        do {
          /*jshint noempty:false*/
        } while (prev === _win[++scan] && prev === _win[++scan] &&
                 prev === _win[++scan] && prev === _win[++scan] &&
                 prev === _win[++scan] && prev === _win[++scan] &&
                 prev === _win[++scan] && prev === _win[++scan] &&
                 scan < strend);
        s.match_length = MAX_MATCH - (strend - scan);
        if (s.match_length > s.lookahead) {
          s.match_length = s.lookahead;
        }
      }
      //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
    }

    /* Emit match if have run of MIN_MATCH or longer, else emit literal */
    if (s.match_length >= MIN_MATCH) {
      //check_match(s, s.strstart, s.strstart - 1, s.match_length);

      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);

      s.lookahead -= s.match_length;
      s.strstart += s.match_length;
      s.match_length = 0;
    } else {
      /* No match, output a literal byte */
      //Tracevv((stderr,"%c", s->window[s->strstart]));
      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);

      s.lookahead--;
      s.strstart++;
    }
    if (bflush) {
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/
    }
  }
  s.insert = 0;
  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }
  if (s.last_lit) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }
  return BS_BLOCK_DONE;
}

/* ===========================================================================
 * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
 * (It will be regenerated if this run of deflate switches away from Huffman.)
 */
function deflate_huff(s, flush) {
  var bflush;             /* set if current block must be flushed */

  for (;;) {
    /* Make sure that we have a literal to write. */
    if (s.lookahead === 0) {
      fill_window(s);
      if (s.lookahead === 0) {
        if (flush === Z_NO_FLUSH) {
          return BS_NEED_MORE;
        }
        break;      /* flush the current block */
      }
    }

    /* Output a literal byte */
    s.match_length = 0;
    //Tracevv((stderr,"%c", s->window[s->strstart]));
    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
    s.lookahead--;
    s.strstart++;
    if (bflush) {
      /*** FLUSH_BLOCK(s, 0); ***/
      flush_block_only(s, false);
      if (s.strm.avail_out === 0) {
        return BS_NEED_MORE;
      }
      /***/
    }
  }
  s.insert = 0;
  if (flush === Z_FINISH) {
    /*** FLUSH_BLOCK(s, 1); ***/
    flush_block_only(s, true);
    if (s.strm.avail_out === 0) {
      return BS_FINISH_STARTED;
    }
    /***/
    return BS_FINISH_DONE;
  }
  if (s.last_lit) {
    /*** FLUSH_BLOCK(s, 0); ***/
    flush_block_only(s, false);
    if (s.strm.avail_out === 0) {
      return BS_NEED_MORE;
    }
    /***/
  }
  return BS_BLOCK_DONE;
}

/* Values for max_lazy_match, good_match and max_chain_length, depending on
 * the desired pack level (0..9). The values given below have been tuned to
 * exclude worst case performance for pathological files. Better values may be
 * found for specific files.
 */
function Config(good_length, max_lazy, nice_length, max_chain, func) {
  this.good_length = good_length;
  this.max_lazy = max_lazy;
  this.nice_length = nice_length;
  this.max_chain = max_chain;
  this.func = func;
}

var configuration_table;

configuration_table = [
  /*      good lazy nice chain */
  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */
  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */
  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */
  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */

  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */
  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */
  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */
  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */
  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */
  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */
];


/* ===========================================================================
 * Initialize the "longest match" routines for a new zlib stream
 */
function lm_init(s) {
  s.window_size = 2 * s.w_size;

  /*** CLEAR_HASH(s); ***/
  zero(s.head); // Fill with NIL (= 0);

  /* Set the default configuration parameters:
   */
  s.max_lazy_match = configuration_table[s.level].max_lazy;
  s.good_match = configuration_table[s.level].good_length;
  s.nice_match = configuration_table[s.level].nice_length;
  s.max_chain_length = configuration_table[s.level].max_chain;

  s.strstart = 0;
  s.block_start = 0;
  s.lookahead = 0;
  s.insert = 0;
  s.match_length = s.prev_length = MIN_MATCH - 1;
  s.match_available = 0;
  s.ins_h = 0;
}


function DeflateState() {
  this.strm = null;            /* pointer back to this zlib stream */
  this.status = 0;            /* as the name implies */
  this.pending_buf = null;      /* output still pending */
  this.pending_buf_size = 0;  /* size of pending_buf */
  this.pending_out = 0;       /* next pending byte to output to the stream */
  this.pending = 0;           /* nb of bytes in the pending buffer */
  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
  this.gzhead = null;         /* gzip header information to write */
  this.gzindex = 0;           /* where in extra, name, or comment */
  this.method = Z_DEFLATED; /* can only be DEFLATED */
  this.last_flush = -1;   /* value of flush param for previous deflate call */

  this.w_size = 0;  /* LZ77 window size (32K by default) */
  this.w_bits = 0;  /* log2(w_size)  (8..16) */
  this.w_mask = 0;  /* w_size - 1 */

  this.window = null;
  /* Sliding window. Input bytes are read into the second half of the window,
   * and move to the first half later to keep a dictionary of at least wSize
   * bytes. With this organization, matches are limited to a distance of
   * wSize-MAX_MATCH bytes, but this ensures that IO is always
   * performed with a length multiple of the block size.
   */

  this.window_size = 0;
  /* Actual size of window: 2*wSize, except when the user input buffer
   * is directly used as sliding window.
   */

  this.prev = null;
  /* Link to older string with same hash index. To limit the size of this
   * array to 64K, this link is maintained only for the last 32K strings.
   * An index in this array is thus a window index modulo 32K.
   */

  this.head = null;   /* Heads of the hash chains or NIL. */

  this.ins_h = 0;       /* hash index of string to be inserted */
  this.hash_size = 0;   /* number of elements in hash table */
  this.hash_bits = 0;   /* log2(hash_size) */
  this.hash_mask = 0;   /* hash_size-1 */

  this.hash_shift = 0;
  /* Number of bits by which ins_h must be shifted at each input
   * step. It must be such that after MIN_MATCH steps, the oldest
   * byte no longer takes part in the hash key, that is:
   *   hash_shift * MIN_MATCH >= hash_bits
   */

  this.block_start = 0;
  /* Window position at the beginning of the current output block. Gets
   * negative when the window is moved backwards.
   */

  this.match_length = 0;      /* length of best match */
  this.prev_match = 0;        /* previous match */
  this.match_available = 0;   /* set if previous match exists */
  this.strstart = 0;          /* start of string to insert */
  this.match_start = 0;       /* start of matching string */
  this.lookahead = 0;         /* number of valid bytes ahead in window */

  this.prev_length = 0;
  /* Length of the best match at previous step. Matches not greater than this
   * are discarded. This is used in the lazy match evaluation.
   */

  this.max_chain_length = 0;
  /* To speed up deflation, hash chains are never searched beyond this
   * length.  A higher limit improves compression ratio but degrades the
   * speed.
   */

  this.max_lazy_match = 0;
  /* Attempt to find a better match only when the current match is strictly
   * smaller than this value. This mechanism is used only for compression
   * levels >= 4.
   */
  // That's alias to max_lazy_match, don't use directly
  //this.max_insert_length = 0;
  /* Insert new strings in the hash table only if the match length is not
   * greater than this length. This saves time but degrades compression.
   * max_insert_length is used only for compression levels <= 3.
   */

  this.level = 0;     /* compression level (1..9) */
  this.strategy = 0;  /* favor or force Huffman coding*/

  this.good_match = 0;
  /* Use a faster search when the previous match is longer than this */

  this.nice_match = 0; /* Stop searching when current match exceeds this */

              /* used by trees.c: */

  /* Didn't use ct_data typedef below to suppress compiler warning */

  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */

  // Use flat array of DOUBLE size, with interleaved fata,
  // because JS does not support effective
  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);
  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);
  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);
  zero(this.dyn_ltree);
  zero(this.dyn_dtree);
  zero(this.bl_tree);

  this.l_desc   = null;         /* desc. for literal tree */
  this.d_desc   = null;         /* desc. for distance tree */
  this.bl_desc  = null;         /* desc. for bit length tree */

  //ush bl_count[MAX_BITS+1];
  this.bl_count = new utils.Buf16(MAX_BITS + 1);
  /* number of codes at each bit length for an optimal tree */

  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */
  zero(this.heap);

  this.heap_len = 0;               /* number of elements in the heap */
  this.heap_max = 0;               /* element of largest frequency */
  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
   * The same heap array is used to build all trees.
   */

  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
  zero(this.depth);
  /* Depth of each subtree used as tie breaker for trees of equal frequency
   */

  this.l_buf = 0;          /* buffer index for literals or lengths */

  this.lit_bufsize = 0;
  /* Size of match buffer for literals/lengths.  There are 4 reasons for
   * limiting lit_bufsize to 64K:
   *   - frequencies can be kept in 16 bit counters
   *   - if compression is not successful for the first block, all input
   *     data is still in the window so we can still emit a stored block even
   *     when input comes from standard input.  (This can also be done for
   *     all blocks if lit_bufsize is not greater than 32K.)
   *   - if compression is not successful for a file smaller than 64K, we can
   *     even emit a stored file instead of a stored block (saving 5 bytes).
   *     This is applicable only for zip (not gzip or zlib).
   *   - creating new Huffman trees less frequently may not provide fast
   *     adaptation to changes in the input data statistics. (Take for
   *     example a binary file with poorly compressible code followed by
   *     a highly compressible string table.) Smaller buffer sizes give
   *     fast adaptation but have of course the overhead of transmitting
   *     trees more frequently.
   *   - I can't count above 4
   */

  this.last_lit = 0;      /* running index in l_buf */

  this.d_buf = 0;
  /* Buffer index for distances. To simplify the code, d_buf and l_buf have
   * the same number of elements. To use different lengths, an extra flag
   * array would be necessary.
   */

  this.opt_len = 0;       /* bit length of current block with optimal trees */
  this.static_len = 0;    /* bit length of current block with static trees */
  this.matches = 0;       /* number of string matches in current block */
  this.insert = 0;        /* bytes at end of window left to insert */


  this.bi_buf = 0;
  /* Output buffer. bits are inserted starting at the bottom (least
   * significant bits).
   */
  this.bi_valid = 0;
  /* Number of valid bits in bi_buf.  All bits above the last valid bit
   * are always zero.
   */

  // Used for window memory init. We safely ignore it for JS. That makes
  // sense only for pointers and memory check tools.
  //this.high_water = 0;
  /* High water mark offset in window for initialized bytes -- bytes above
   * this are set to zero in order to avoid memory check warnings when
   * longest match routines access bytes past the input.  This is then
   * updated to the new high water mark.
   */
}


function deflateResetKeep(strm) {
  var s;

  if (!strm || !strm.state) {
    return err(strm, Z_STREAM_ERROR);
  }

  strm.total_in = strm.total_out = 0;
  strm.data_type = Z_UNKNOWN;

  s = strm.state;
  s.pending = 0;
  s.pending_out = 0;

  if (s.wrap < 0) {
    s.wrap = -s.wrap;
    /* was made negative by deflate(..., Z_FINISH); */
  }
  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
  strm.adler = (s.wrap === 2) ?
    0  // crc32(0, Z_NULL, 0)
  :
    1; // adler32(0, Z_NULL, 0)
  s.last_flush = Z_NO_FLUSH;
  trees._tr_init(s);
  return Z_OK;
}


function deflateReset(strm) {
  var ret = deflateResetKeep(strm);
  if (ret === Z_OK) {
    lm_init(strm.state);
  }
  return ret;
}


function deflateSetHeader(strm, head) {
  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
  strm.state.gzhead = head;
  return Z_OK;
}


function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
  if (!strm) { // === Z_NULL
    return Z_STREAM_ERROR;
  }
  var wrap = 1;

  if (level === Z_DEFAULT_COMPRESSION) {
    level = 6;
  }

  if (windowBits < 0) { /* suppress zlib wrapper */
    wrap = 0;
    windowBits = -windowBits;
  }

  else if (windowBits > 15) {
    wrap = 2;           /* write gzip wrapper instead */
    windowBits -= 16;
  }


  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
    strategy < 0 || strategy > Z_FIXED) {
    return err(strm, Z_STREAM_ERROR);
  }


  if (windowBits === 8) {
    windowBits = 9;
  }
  /* until 256-byte window bug fixed */

  var s = new DeflateState();

  strm.state = s;
  s.strm = strm;

  s.wrap = wrap;
  s.gzhead = null;
  s.w_bits = windowBits;
  s.w_size = 1 << s.w_bits;
  s.w_mask = s.w_size - 1;

  s.hash_bits = memLevel + 7;
  s.hash_size = 1 << s.hash_bits;
  s.hash_mask = s.hash_size - 1;
  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);

  s.window = new utils.Buf8(s.w_size * 2);
  s.head = new utils.Buf16(s.hash_size);
  s.prev = new utils.Buf16(s.w_size);

  // Don't need mem init magic for JS.
  //s.high_water = 0;  /* nothing written to s->window yet */

  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */

  s.pending_buf_size = s.lit_bufsize * 4;

  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
  //s->pending_buf = (uchf *) overlay;
  s.pending_buf = new utils.Buf8(s.pending_buf_size);

  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
  s.d_buf = 1 * s.lit_bufsize;

  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
  s.l_buf = (1 + 2) * s.lit_bufsize;

  s.level = level;
  s.strategy = strategy;
  s.method = method;

  return deflateReset(strm);
}

function deflateInit(strm, level) {
  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
}


function deflate(strm, flush) {
  var old_flush, s;
  var beg, val; // for gzip header write only

  if (!strm || !strm.state ||
    flush > Z_BLOCK || flush < 0) {
    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
  }

  s = strm.state;

  if (!strm.output ||
      (!strm.input && strm.avail_in !== 0) ||
      (s.status === FINISH_STATE && flush !== Z_FINISH)) {
    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
  }

  s.strm = strm; /* just in case */
  old_flush = s.last_flush;
  s.last_flush = flush;

  /* Write the header */
  if (s.status === INIT_STATE) {

    if (s.wrap === 2) { // GZIP header
      strm.adler = 0;  //crc32(0L, Z_NULL, 0);
      put_byte(s, 31);
      put_byte(s, 139);
      put_byte(s, 8);
      if (!s.gzhead) { // s->gzhead == Z_NULL
        put_byte(s, 0);
        put_byte(s, 0);
        put_byte(s, 0);
        put_byte(s, 0);
        put_byte(s, 0);
        put_byte(s, s.level === 9 ? 2 :
                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
                     4 : 0));
        put_byte(s, OS_CODE);
        s.status = BUSY_STATE;
      }
      else {
        put_byte(s, (s.gzhead.text ? 1 : 0) +
                    (s.gzhead.hcrc ? 2 : 0) +
                    (!s.gzhead.extra ? 0 : 4) +
                    (!s.gzhead.name ? 0 : 8) +
                    (!s.gzhead.comment ? 0 : 16)
        );
        put_byte(s, s.gzhead.time & 0xff);
        put_byte(s, (s.gzhead.time >> 8) & 0xff);
        put_byte(s, (s.gzhead.time >> 16) & 0xff);
        put_byte(s, (s.gzhead.time >> 24) & 0xff);
        put_byte(s, s.level === 9 ? 2 :
                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
                     4 : 0));
        put_byte(s, s.gzhead.os & 0xff);
        if (s.gzhead.extra && s.gzhead.extra.length) {
          put_byte(s, s.gzhead.extra.length & 0xff);
          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
        }
        if (s.gzhead.hcrc) {
          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
        }
        s.gzindex = 0;
        s.status = EXTRA_STATE;
      }
    }
    else // DEFLATE header
    {
      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
      var level_flags = -1;

      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
        level_flags = 0;
      } else if (s.level < 6) {
        level_flags = 1;
      } else if (s.level === 6) {
        level_flags = 2;
      } else {
        level_flags = 3;
      }
      header |= (level_flags << 6);
      if (s.strstart !== 0) { header |= PRESET_DICT; }
      header += 31 - (header % 31);

      s.status = BUSY_STATE;
      putShortMSB(s, header);

      /* Save the adler32 of the preset dictionary: */
      if (s.strstart !== 0) {
        putShortMSB(s, strm.adler >>> 16);
        putShortMSB(s, strm.adler & 0xffff);
      }
      strm.adler = 1; // adler32(0L, Z_NULL, 0);
    }
  }

//#ifdef GZIP
  if (s.status === EXTRA_STATE) {
    if (s.gzhead.extra/* != Z_NULL*/) {
      beg = s.pending;  /* start of bytes to update crc */

      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
        if (s.pending === s.pending_buf_size) {
          if (s.gzhead.hcrc && s.pending > beg) {
            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
          }
          flush_pending(strm);
          beg = s.pending;
          if (s.pending === s.pending_buf_size) {
            break;
          }
        }
        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
        s.gzindex++;
      }
      if (s.gzhead.hcrc && s.pending > beg) {
        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
      }
      if (s.gzindex === s.gzhead.extra.length) {
        s.gzindex = 0;
        s.status = NAME_STATE;
      }
    }
    else {
      s.status = NAME_STATE;
    }
  }
  if (s.status === NAME_STATE) {
    if (s.gzhead.name/* != Z_NULL*/) {
      beg = s.pending;  /* start of bytes to update crc */
      //int val;

      do {
        if (s.pending === s.pending_buf_size) {
          if (s.gzhead.hcrc && s.pending > beg) {
            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
          }
          flush_pending(strm);
          beg = s.pending;
          if (s.pending === s.pending_buf_size) {
            val = 1;
            break;
          }
        }
        // JS specific: little magic to add zero terminator to end of string
        if (s.gzindex < s.gzhead.name.length) {
          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
        } else {
          val = 0;
        }
        put_byte(s, val);
      } while (val !== 0);

      if (s.gzhead.hcrc && s.pending > beg) {
        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
      }
      if (val === 0) {
        s.gzindex = 0;
        s.status = COMMENT_STATE;
      }
    }
    else {
      s.status = COMMENT_STATE;
    }
  }
  if (s.status === COMMENT_STATE) {
    if (s.gzhead.comment/* != Z_NULL*/) {
      beg = s.pending;  /* start of bytes to update crc */
      //int val;

      do {
        if (s.pending === s.pending_buf_size) {
          if (s.gzhead.hcrc && s.pending > beg) {
            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
          }
          flush_pending(strm);
          beg = s.pending;
          if (s.pending === s.pending_buf_size) {
            val = 1;
            break;
          }
        }
        // JS specific: little magic to add zero terminator to end of string
        if (s.gzindex < s.gzhead.comment.length) {
          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
        } else {
          val = 0;
        }
        put_byte(s, val);
      } while (val !== 0);

      if (s.gzhead.hcrc && s.pending > beg) {
        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
      }
      if (val === 0) {
        s.status = HCRC_STATE;
      }
    }
    else {
      s.status = HCRC_STATE;
    }
  }
  if (s.status === HCRC_STATE) {
    if (s.gzhead.hcrc) {
      if (s.pending + 2 > s.pending_buf_size) {
        flush_pending(strm);
      }
      if (s.pending + 2 <= s.pending_buf_size) {
        put_byte(s, strm.adler & 0xff);
        put_byte(s, (strm.adler >> 8) & 0xff);
        strm.adler = 0; //crc32(0L, Z_NULL, 0);
        s.status = BUSY_STATE;
      }
    }
    else {
      s.status = BUSY_STATE;
    }
  }
//#endif

  /* Flush as much pending output as possible */
  if (s.pending !== 0) {
    flush_pending(strm);
    if (strm.avail_out === 0) {
      /* Since avail_out is 0, deflate will be called again with
       * more output space, but possibly with both pending and
       * avail_in equal to zero. There won't be anything to do,
       * but this is not an error situation so make sure we
       * return OK instead of BUF_ERROR at next call of deflate:
       */
      s.last_flush = -1;
      return Z_OK;
    }

    /* Make sure there is something to do and avoid duplicate consecutive
     * flushes. For repeated and useless calls with Z_FINISH, we keep
     * returning Z_STREAM_END instead of Z_BUF_ERROR.
     */
  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
    flush !== Z_FINISH) {
    return err(strm, Z_BUF_ERROR);
  }

  /* User must not provide more input after the first FINISH: */
  if (s.status === FINISH_STATE && strm.avail_in !== 0) {
    return err(strm, Z_BUF_ERROR);
  }

  /* Start a new block or continue the current one.
   */
  if (strm.avail_in !== 0 || s.lookahead !== 0 ||
    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
      (s.strategy === Z_RLE ? deflate_rle(s, flush) :
        configuration_table[s.level].func(s, flush));

    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
      s.status = FINISH_STATE;
    }
    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
      if (strm.avail_out === 0) {
        s.last_flush = -1;
        /* avoid BUF_ERROR next call, see above */
      }
      return Z_OK;
      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
       * of deflate should use the same flush parameter to make sure
       * that the flush is complete. So we don't have to output an
       * empty block here, this will be done at next call. This also
       * ensures that for a very small output buffer, we emit at most
       * one empty block.
       */
    }
    if (bstate === BS_BLOCK_DONE) {
      if (flush === Z_PARTIAL_FLUSH) {
        trees._tr_align(s);
      }
      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */

        trees._tr_stored_block(s, 0, 0, false);
        /* For a full flush, this empty block will be recognized
         * as a special marker by inflate_sync().
         */
        if (flush === Z_FULL_FLUSH) {
          /*** CLEAR_HASH(s); ***/             /* forget history */
          zero(s.head); // Fill with NIL (= 0);

          if (s.lookahead === 0) {
            s.strstart = 0;
            s.block_start = 0;
            s.insert = 0;
          }
        }
      }
      flush_pending(strm);
      if (strm.avail_out === 0) {
        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
        return Z_OK;
      }
    }
  }
  //Assert(strm->avail_out > 0, "bug2");
  //if (strm.avail_out <= 0) { throw new Error("bug2");}

  if (flush !== Z_FINISH) { return Z_OK; }
  if (s.wrap <= 0) { return Z_STREAM_END; }

  /* Write the trailer */
  if (s.wrap === 2) {
    put_byte(s, strm.adler & 0xff);
    put_byte(s, (strm.adler >> 8) & 0xff);
    put_byte(s, (strm.adler >> 16) & 0xff);
    put_byte(s, (strm.adler >> 24) & 0xff);
    put_byte(s, strm.total_in & 0xff);
    put_byte(s, (strm.total_in >> 8) & 0xff);
    put_byte(s, (strm.total_in >> 16) & 0xff);
    put_byte(s, (strm.total_in >> 24) & 0xff);
  }
  else
  {
    putShortMSB(s, strm.adler >>> 16);
    putShortMSB(s, strm.adler & 0xffff);
  }

  flush_pending(strm);
  /* If avail_out is zero, the application will call deflate again
   * to flush the rest.
   */
  if (s.wrap > 0) { s.wrap = -s.wrap; }
  /* write the trailer only once! */
  return s.pending !== 0 ? Z_OK : Z_STREAM_END;
}

function deflateEnd(strm) {
  var status;

  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
    return Z_STREAM_ERROR;
  }

  status = strm.state.status;
  if (status !== INIT_STATE &&
    status !== EXTRA_STATE &&
    status !== NAME_STATE &&
    status !== COMMENT_STATE &&
    status !== HCRC_STATE &&
    status !== BUSY_STATE &&
    status !== FINISH_STATE
  ) {
    return err(strm, Z_STREAM_ERROR);
  }

  strm.state = null;

  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
}


/* =========================================================================
 * Initializes the compression dictionary from the given byte
 * sequence without producing any compressed output.
 */
function deflateSetDictionary(strm, dictionary) {
  var dictLength = dictionary.length;

  var s;
  var str, n;
  var wrap;
  var avail;
  var next;
  var input;
  var tmpDict;

  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
    return Z_STREAM_ERROR;
  }

  s = strm.state;
  wrap = s.wrap;

  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {
    return Z_STREAM_ERROR;
  }

  /* when using zlib wrappers, compute Adler-32 for provided dictionary */
  if (wrap === 1) {
    /* adler32(strm->adler, dictionary, dictLength); */
    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
  }

  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */

  /* if dictionary would fill window, just replace the history */
  if (dictLength >= s.w_size) {
    if (wrap === 0) {            /* already empty otherwise */
      /*** CLEAR_HASH(s); ***/
      zero(s.head); // Fill with NIL (= 0);
      s.strstart = 0;
      s.block_start = 0;
      s.insert = 0;
    }
    /* use the tail */
    // dictionary = dictionary.slice(dictLength - s.w_size);
    tmpDict = new utils.Buf8(s.w_size);
    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
    dictionary = tmpDict;
    dictLength = s.w_size;
  }
  /* insert dictionary into window and hash */
  avail = strm.avail_in;
  next = strm.next_in;
  input = strm.input;
  strm.avail_in = dictLength;
  strm.next_in = 0;
  strm.input = dictionary;
  fill_window(s);
  while (s.lookahead >= MIN_MATCH) {
    str = s.strstart;
    n = s.lookahead - (MIN_MATCH - 1);
    do {
      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;

      s.prev[str & s.w_mask] = s.head[s.ins_h];

      s.head[s.ins_h] = str;
      str++;
    } while (--n);
    s.strstart = str;
    s.lookahead = MIN_MATCH - 1;
    fill_window(s);
  }
  s.strstart += s.lookahead;
  s.block_start = s.strstart;
  s.insert = s.lookahead;
  s.lookahead = 0;
  s.match_length = s.prev_length = MIN_MATCH - 1;
  s.match_available = 0;
  strm.next_in = next;
  strm.input = input;
  strm.avail_in = avail;
  s.wrap = wrap;
  return Z_OK;
}


exports.deflateInit = deflateInit;
exports.deflateInit2 = deflateInit2;
exports.deflateReset = deflateReset;
exports.deflateResetKeep = deflateResetKeep;
exports.deflateSetHeader = deflateSetHeader;
exports.deflate = deflate;
exports.deflateEnd = deflateEnd;
exports.deflateSetDictionary = deflateSetDictionary;
exports.deflateInfo = 'pako deflate (from Nodeca project)';

/* Not implemented
exports.deflateBound = deflateBound;
exports.deflateCopy = deflateCopy;
exports.deflateParams = deflateParams;
exports.deflatePending = deflatePending;
exports.deflatePrime = deflatePrime;
exports.deflateTune = deflateTune;
*/

},{"../utils/common":39,"./adler32":40,"./crc32":42,"./messages":47,"./trees":48}],44:[function(require,module,exports){
'use strict';

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

// See state defs from inflate.js
var BAD = 30;       /* got a data error -- remain here until reset */
var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */

/*
   Decode literal, length, and distance codes and write out the resulting
   literal and match bytes until either not enough input or output is
   available, an end-of-block is encountered, or a data error is encountered.
   When large enough input and output buffers are supplied to inflate(), for
   example, a 16K input buffer and a 64K output buffer, more than 95% of the
   inflate execution time is spent in this routine.

   Entry assumptions:

        state.mode === LEN
        strm.avail_in >= 6
        strm.avail_out >= 258
        start >= strm.avail_out
        state.bits < 8

   On return, state.mode is one of:

        LEN -- ran out of enough output space or enough available input
        TYPE -- reached end of block code, inflate() to interpret next block
        BAD -- error in block data

   Notes:

    - The maximum input bits used by a length/distance pair is 15 bits for the
      length code, 5 bits for the length extra, 15 bits for the distance code,
      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
      Therefore if strm.avail_in >= 6, then there is enough input to avoid
      checking for available input while decoding.

    - The maximum bytes that a single length/distance pair can output is 258
      bytes, which is the maximum length that can be coded.  inflate_fast()
      requires strm.avail_out >= 258 for each loop to avoid checking for
      output space.
 */
module.exports = function inflate_fast(strm, start) {
  var state;
  var _in;                    /* local strm.input */
  var last;                   /* have enough input while in < last */
  var _out;                   /* local strm.output */
  var beg;                    /* inflate()'s initial strm.output */
  var end;                    /* while out < end, enough space available */
//#ifdef INFLATE_STRICT
  var dmax;                   /* maximum distance from zlib header */
//#endif
  var wsize;                  /* window size or zero if not using window */
  var whave;                  /* valid bytes in the window */
  var wnext;                  /* window write index */
  // Use `s_window` instead `window`, avoid conflict with instrumentation tools
  var s_window;               /* allocated sliding window, if wsize != 0 */
  var hold;                   /* local strm.hold */
  var bits;                   /* local strm.bits */
  var lcode;                  /* local strm.lencode */
  var dcode;                  /* local strm.distcode */
  var lmask;                  /* mask for first level of length codes */
  var dmask;                  /* mask for first level of distance codes */
  var here;                   /* retrieved table entry */
  var op;                     /* code bits, operation, extra bits, or */
                              /*  window position, window bytes to copy */
  var len;                    /* match length, unused bytes */
  var dist;                   /* match distance */
  var from;                   /* where to copy match from */
  var from_source;


  var input, output; // JS specific, because we have no pointers

  /* copy state to local variables */
  state = strm.state;
  //here = state.here;
  _in = strm.next_in;
  input = strm.input;
  last = _in + (strm.avail_in - 5);
  _out = strm.next_out;
  output = strm.output;
  beg = _out - (start - strm.avail_out);
  end = _out + (strm.avail_out - 257);
//#ifdef INFLATE_STRICT
  dmax = state.dmax;
//#endif
  wsize = state.wsize;
  whave = state.whave;
  wnext = state.wnext;
  s_window = state.window;
  hold = state.hold;
  bits = state.bits;
  lcode = state.lencode;
  dcode = state.distcode;
  lmask = (1 << state.lenbits) - 1;
  dmask = (1 << state.distbits) - 1;


  /* decode literals and length/distances until end-of-block or not enough
     input data or output space */

  top:
  do {
    if (bits < 15) {
      hold += input[_in++] << bits;
      bits += 8;
      hold += input[_in++] << bits;
      bits += 8;
    }

    here = lcode[hold & lmask];

    dolen:
    for (;;) { // Goto emulation
      op = here >>> 24/*here.bits*/;
      hold >>>= op;
      bits -= op;
      op = (here >>> 16) & 0xff/*here.op*/;
      if (op === 0) {                          /* literal */
        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
        //        "inflate:         literal '%c'\n" :
        //        "inflate:         literal 0x%02x\n", here.val));
        output[_out++] = here & 0xffff/*here.val*/;
      }
      else if (op & 16) {                     /* length base */
        len = here & 0xffff/*here.val*/;
        op &= 15;                           /* number of extra bits */
        if (op) {
          if (bits < op) {
            hold += input[_in++] << bits;
            bits += 8;
          }
          len += hold & ((1 << op) - 1);
          hold >>>= op;
          bits -= op;
        }
        //Tracevv((stderr, "inflate:         length %u\n", len));
        if (bits < 15) {
          hold += input[_in++] << bits;
          bits += 8;
          hold += input[_in++] << bits;
          bits += 8;
        }
        here = dcode[hold & dmask];

        dodist:
        for (;;) { // goto emulation
          op = here >>> 24/*here.bits*/;
          hold >>>= op;
          bits -= op;
          op = (here >>> 16) & 0xff/*here.op*/;

          if (op & 16) {                      /* distance base */
            dist = here & 0xffff/*here.val*/;
            op &= 15;                       /* number of extra bits */
            if (bits < op) {
              hold += input[_in++] << bits;
              bits += 8;
              if (bits < op) {
                hold += input[_in++] << bits;
                bits += 8;
              }
            }
            dist += hold & ((1 << op) - 1);
//#ifdef INFLATE_STRICT
            if (dist > dmax) {
              strm.msg = 'invalid distance too far back';
              state.mode = BAD;
              break top;
            }
//#endif
            hold >>>= op;
            bits -= op;
            //Tracevv((stderr, "inflate:         distance %u\n", dist));
            op = _out - beg;                /* max distance in output */
            if (dist > op) {                /* see if copy from window */
              op = dist - op;               /* distance back in window */
              if (op > whave) {
                if (state.sane) {
                  strm.msg = 'invalid distance too far back';
                  state.mode = BAD;
                  break top;
                }

// (!) This block is disabled in zlib defaults,
// don't enable it for binary compatibility
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
//                if (len <= op - whave) {
//                  do {
//                    output[_out++] = 0;
//                  } while (--len);
//                  continue top;
//                }
//                len -= op - whave;
//                do {
//                  output[_out++] = 0;
//                } while (--op > whave);
//                if (op === 0) {
//                  from = _out - dist;
//                  do {
//                    output[_out++] = output[from++];
//                  } while (--len);
//                  continue top;
//                }
//#endif
              }
              from = 0; // window index
              from_source = s_window;
              if (wnext === 0) {           /* very common case */
                from += wsize - op;
                if (op < len) {         /* some from window */
                  len -= op;
                  do {
                    output[_out++] = s_window[from++];
                  } while (--op);
                  from = _out - dist;  /* rest from output */
                  from_source = output;
                }
              }
              else if (wnext < op) {      /* wrap around window */
                from += wsize + wnext - op;
                op -= wnext;
                if (op < len) {         /* some from end of window */
                  len -= op;
                  do {
                    output[_out++] = s_window[from++];
                  } while (--op);
                  from = 0;
                  if (wnext < len) {  /* some from start of window */
                    op = wnext;
                    len -= op;
                    do {
                      output[_out++] = s_window[from++];
                    } while (--op);
                    from = _out - dist;      /* rest from output */
                    from_source = output;
                  }
                }
              }
              else {                      /* contiguous in window */
                from += wnext - op;
                if (op < len) {         /* some from window */
                  len -= op;
                  do {
                    output[_out++] = s_window[from++];
                  } while (--op);
                  from = _out - dist;  /* rest from output */
                  from_source = output;
                }
              }
              while (len > 2) {
                output[_out++] = from_source[from++];
                output[_out++] = from_source[from++];
                output[_out++] = from_source[from++];
                len -= 3;
              }
              if (len) {
                output[_out++] = from_source[from++];
                if (len > 1) {
                  output[_out++] = from_source[from++];
                }
              }
            }
            else {
              from = _out - dist;          /* copy direct from output */
              do {                        /* minimum length is three */
                output[_out++] = output[from++];
                output[_out++] = output[from++];
                output[_out++] = output[from++];
                len -= 3;
              } while (len > 2);
              if (len) {
                output[_out++] = output[from++];
                if (len > 1) {
                  output[_out++] = output[from++];
                }
              }
            }
          }
          else if ((op & 64) === 0) {          /* 2nd level distance code */
            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
            continue dodist;
          }
          else {
            strm.msg = 'invalid distance code';
            state.mode = BAD;
            break top;
          }

          break; // need to emulate goto via "continue"
        }
      }
      else if ((op & 64) === 0) {              /* 2nd level length code */
        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
        continue dolen;
      }
      else if (op & 32) {                     /* end-of-block */
        //Tracevv((stderr, "inflate:         end of block\n"));
        state.mode = TYPE;
        break top;
      }
      else {
        strm.msg = 'invalid literal/length code';
        state.mode = BAD;
        break top;
      }

      break; // need to emulate goto via "continue"
    }
  } while (_in < last && _out < end);

  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
  len = bits >> 3;
  _in -= len;
  bits -= len << 3;
  hold &= (1 << bits) - 1;

  /* update state and return */
  strm.next_in = _in;
  strm.next_out = _out;
  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
  state.hold = hold;
  state.bits = bits;
  return;
};

},{}],45:[function(require,module,exports){
'use strict';

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

var utils         = require('../utils/common');
var adler32       = require('./adler32');
var crc32         = require('./crc32');
var inflate_fast  = require('./inffast');
var inflate_table = require('./inftrees');

var CODES = 0;
var LENS = 1;
var DISTS = 2;

/* Public constants ==========================================================*/
/* ===========================================================================*/


/* Allowed flush values; see deflate() and inflate() below for details */
//var Z_NO_FLUSH      = 0;
//var Z_PARTIAL_FLUSH = 1;
//var Z_SYNC_FLUSH    = 2;
//var Z_FULL_FLUSH    = 3;
var Z_FINISH        = 4;
var Z_BLOCK         = 5;
var Z_TREES         = 6;


/* Return codes for the compression/decompression functions. Negative values
 * are errors, positive values are used for special but normal events.
 */
var Z_OK            = 0;
var Z_STREAM_END    = 1;
var Z_NEED_DICT     = 2;
//var Z_ERRNO         = -1;
var Z_STREAM_ERROR  = -2;
var Z_DATA_ERROR    = -3;
var Z_MEM_ERROR     = -4;
var Z_BUF_ERROR     = -5;
//var Z_VERSION_ERROR = -6;

/* The deflate compression method */
var Z_DEFLATED  = 8;


/* STATES ====================================================================*/
/* ===========================================================================*/


var    HEAD = 1;       /* i: waiting for magic header */
var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
var    TIME = 3;       /* i: waiting for modification time (gzip) */
var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
var    NAME = 7;       /* i: waiting for end of file name (gzip) */
var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
var    HCRC = 9;       /* i: waiting for header crc (gzip) */
var    DICTID = 10;    /* i: waiting for dictionary check value */
var    DICT = 11;      /* waiting for inflateSetDictionary() call */
var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
var        STORED = 14;    /* i: waiting for stored size (length and complement) */
var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
var        LENLENS = 18;   /* i: waiting for code length code lengths */
var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
var            LEN = 21;       /* i: waiting for length/lit/eob code */
var            LENEXT = 22;    /* i: waiting for length extra bits */
var            DIST = 23;      /* i: waiting for distance code */
var            DISTEXT = 24;   /* i: waiting for distance extra bits */
var            MATCH = 25;     /* o: waiting for output space to copy string */
var            LIT = 26;       /* o: waiting for output space to write literal */
var    CHECK = 27;     /* i: waiting for 32-bit check value */
var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
var    DONE = 29;      /* finished check, done -- remain here until reset */
var    BAD = 30;       /* got a data error -- remain here until reset */
var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */

/* ===========================================================================*/



var ENOUGH_LENS = 852;
var ENOUGH_DISTS = 592;
//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);

var MAX_WBITS = 15;
/* 32K LZ77 window */
var DEF_WBITS = MAX_WBITS;


function zswap32(q) {
  return  (((q >>> 24) & 0xff) +
          ((q >>> 8) & 0xff00) +
          ((q & 0xff00) << 8) +
          ((q & 0xff) << 24));
}


function InflateState() {
  this.mode = 0;             /* current inflate mode */
  this.last = false;          /* true if processing last block */
  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
  this.havedict = false;      /* true if dictionary provided */
  this.flags = 0;             /* gzip header method and flags (0 if zlib) */
  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
  this.check = 0;             /* protected copy of check value */
  this.total = 0;             /* protected copy of output count */
  // TODO: may be {}
  this.head = null;           /* where to save gzip header information */

  /* sliding window */
  this.wbits = 0;             /* log base 2 of requested window size */
  this.wsize = 0;             /* window size or zero if not using window */
  this.whave = 0;             /* valid bytes in the window */
  this.wnext = 0;             /* window write index */
  this.window = null;         /* allocated sliding window, if needed */

  /* bit accumulator */
  this.hold = 0;              /* input bit accumulator */
  this.bits = 0;              /* number of bits in "in" */

  /* for string and stored block copying */
  this.length = 0;            /* literal or length of data to copy */
  this.offset = 0;            /* distance back to copy string from */

  /* for table and code decoding */
  this.extra = 0;             /* extra bits needed */

  /* fixed and dynamic code tables */
  this.lencode = null;          /* starting table for length/literal codes */
  this.distcode = null;         /* starting table for distance codes */
  this.lenbits = 0;           /* index bits for lencode */
  this.distbits = 0;          /* index bits for distcode */

  /* dynamic table building */
  this.ncode = 0;             /* number of code length code lengths */
  this.nlen = 0;              /* number of length code lengths */
  this.ndist = 0;             /* number of distance code lengths */
  this.have = 0;              /* number of code lengths in lens[] */
  this.next = null;              /* next available space in codes[] */

  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
  this.work = new utils.Buf16(288); /* work area for code table building */

  /*
   because we don't have pointers in js, we use lencode and distcode directly
   as buffers so we don't need codes
  */
  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
  this.sane = 0;                   /* if false, allow invalid distance too far */
  this.back = 0;                   /* bits back of last unprocessed length/lit */
  this.was = 0;                    /* initial length of match */
}

function inflateResetKeep(strm) {
  var state;

  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  state = strm.state;
  strm.total_in = strm.total_out = state.total = 0;
  strm.msg = ''; /*Z_NULL*/
  if (state.wrap) {       /* to support ill-conceived Java test suite */
    strm.adler = state.wrap & 1;
  }
  state.mode = HEAD;
  state.last = 0;
  state.havedict = 0;
  state.dmax = 32768;
  state.head = null/*Z_NULL*/;
  state.hold = 0;
  state.bits = 0;
  //state.lencode = state.distcode = state.next = state.codes;
  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);

  state.sane = 1;
  state.back = -1;
  //Tracev((stderr, "inflate: reset\n"));
  return Z_OK;
}

function inflateReset(strm) {
  var state;

  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  state = strm.state;
  state.wsize = 0;
  state.whave = 0;
  state.wnext = 0;
  return inflateResetKeep(strm);

}

function inflateReset2(strm, windowBits) {
  var wrap;
  var state;

  /* get the state */
  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  state = strm.state;

  /* extract wrap request from windowBits parameter */
  if (windowBits < 0) {
    wrap = 0;
    windowBits = -windowBits;
  }
  else {
    wrap = (windowBits >> 4) + 1;
    if (windowBits < 48) {
      windowBits &= 15;
    }
  }

  /* set number of window bits, free window if different */
  if (windowBits && (windowBits < 8 || windowBits > 15)) {
    return Z_STREAM_ERROR;
  }
  if (state.window !== null && state.wbits !== windowBits) {
    state.window = null;
  }

  /* update state and reset the rest of it */
  state.wrap = wrap;
  state.wbits = windowBits;
  return inflateReset(strm);
}

function inflateInit2(strm, windowBits) {
  var ret;
  var state;

  if (!strm) { return Z_STREAM_ERROR; }
  //strm.msg = Z_NULL;                 /* in case we return an error */

  state = new InflateState();

  //if (state === Z_NULL) return Z_MEM_ERROR;
  //Tracev((stderr, "inflate: allocated\n"));
  strm.state = state;
  state.window = null/*Z_NULL*/;
  ret = inflateReset2(strm, windowBits);
  if (ret !== Z_OK) {
    strm.state = null/*Z_NULL*/;
  }
  return ret;
}

function inflateInit(strm) {
  return inflateInit2(strm, DEF_WBITS);
}


/*
 Return state with length and distance decoding tables and index sizes set to
 fixed code decoding.  Normally this returns fixed tables from inffixed.h.
 If BUILDFIXED is defined, then instead this routine builds the tables the
 first time it's called, and returns those tables the first time and
 thereafter.  This reduces the size of the code by about 2K bytes, in
 exchange for a little execution time.  However, BUILDFIXED should not be
 used for threaded applications, since the rewriting of the tables and virgin
 may not be thread-safe.
 */
var virgin = true;

var lenfix, distfix; // We have no pointers in JS, so keep tables separate

function fixedtables(state) {
  /* build fixed huffman tables if first call (may not be thread safe) */
  if (virgin) {
    var sym;

    lenfix = new utils.Buf32(512);
    distfix = new utils.Buf32(32);

    /* literal/length table */
    sym = 0;
    while (sym < 144) { state.lens[sym++] = 8; }
    while (sym < 256) { state.lens[sym++] = 9; }
    while (sym < 280) { state.lens[sym++] = 7; }
    while (sym < 288) { state.lens[sym++] = 8; }

    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });

    /* distance table */
    sym = 0;
    while (sym < 32) { state.lens[sym++] = 5; }

    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });

    /* do this just once */
    virgin = false;
  }

  state.lencode = lenfix;
  state.lenbits = 9;
  state.distcode = distfix;
  state.distbits = 5;
}


/*
 Update the window with the last wsize (normally 32K) bytes written before
 returning.  If window does not exist yet, create it.  This is only called
 when a window is already in use, or when output has been written during this
 inflate call, but the end of the deflate stream has not been reached yet.
 It is also called to create a window for dictionary data when a dictionary
 is loaded.

 Providing output buffers larger than 32K to inflate() should provide a speed
 advantage, since only the last 32K of output is copied to the sliding window
 upon return from inflate(), and since all distances after the first 32K of
 output will fall in the output data, making match copies simpler and faster.
 The advantage may be dependent on the size of the processor's data caches.
 */
function updatewindow(strm, src, end, copy) {
  var dist;
  var state = strm.state;

  /* if it hasn't been done already, allocate space for the window */
  if (state.window === null) {
    state.wsize = 1 << state.wbits;
    state.wnext = 0;
    state.whave = 0;

    state.window = new utils.Buf8(state.wsize);
  }

  /* copy state->wsize or less output bytes into the circular window */
  if (copy >= state.wsize) {
    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
    state.wnext = 0;
    state.whave = state.wsize;
  }
  else {
    dist = state.wsize - state.wnext;
    if (dist > copy) {
      dist = copy;
    }
    //zmemcpy(state->window + state->wnext, end - copy, dist);
    utils.arraySet(state.window, src, end - copy, dist, state.wnext);
    copy -= dist;
    if (copy) {
      //zmemcpy(state->window, end - copy, copy);
      utils.arraySet(state.window, src, end - copy, copy, 0);
      state.wnext = copy;
      state.whave = state.wsize;
    }
    else {
      state.wnext += dist;
      if (state.wnext === state.wsize) { state.wnext = 0; }
      if (state.whave < state.wsize) { state.whave += dist; }
    }
  }
  return 0;
}

function inflate(strm, flush) {
  var state;
  var input, output;          // input/output buffers
  var next;                   /* next input INDEX */
  var put;                    /* next output INDEX */
  var have, left;             /* available input and output */
  var hold;                   /* bit buffer */
  var bits;                   /* bits in bit buffer */
  var _in, _out;              /* save starting available input and output */
  var copy;                   /* number of stored or match bytes to copy */
  var from;                   /* where to copy match bytes from */
  var from_source;
  var here = 0;               /* current decoding table entry */
  var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
  //var last;                   /* parent table entry */
  var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
  var len;                    /* length to copy for repeats, bits to drop */
  var ret;                    /* return code */
  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
  var opts;

  var n; // temporary var for NEED_BITS

  var order = /* permutation of code lengths */
    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];


  if (!strm || !strm.state || !strm.output ||
      (!strm.input && strm.avail_in !== 0)) {
    return Z_STREAM_ERROR;
  }

  state = strm.state;
  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */


  //--- LOAD() ---
  put = strm.next_out;
  output = strm.output;
  left = strm.avail_out;
  next = strm.next_in;
  input = strm.input;
  have = strm.avail_in;
  hold = state.hold;
  bits = state.bits;
  //---

  _in = have;
  _out = left;
  ret = Z_OK;

  inf_leave: // goto emulation
  for (;;) {
    switch (state.mode) {
      case HEAD:
        if (state.wrap === 0) {
          state.mode = TYPEDO;
          break;
        }
        //=== NEEDBITS(16);
        while (bits < 16) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
          state.check = 0/*crc32(0L, Z_NULL, 0)*/;
          //=== CRC2(state.check, hold);
          hbuf[0] = hold & 0xff;
          hbuf[1] = (hold >>> 8) & 0xff;
          state.check = crc32(state.check, hbuf, 2, 0);
          //===//

          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          state.mode = FLAGS;
          break;
        }
        state.flags = 0;           /* expect zlib header */
        if (state.head) {
          state.head.done = false;
        }
        if (!(state.wrap & 1) ||   /* check if zlib header allowed */
          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
          strm.msg = 'incorrect header check';
          state.mode = BAD;
          break;
        }
        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
          strm.msg = 'unknown compression method';
          state.mode = BAD;
          break;
        }
        //--- DROPBITS(4) ---//
        hold >>>= 4;
        bits -= 4;
        //---//
        len = (hold & 0x0f)/*BITS(4)*/ + 8;
        if (state.wbits === 0) {
          state.wbits = len;
        }
        else if (len > state.wbits) {
          strm.msg = 'invalid window size';
          state.mode = BAD;
          break;
        }
        state.dmax = 1 << len;
        //Tracev((stderr, "inflate:   zlib header ok\n"));
        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
        state.mode = hold & 0x200 ? DICTID : TYPE;
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        break;
      case FLAGS:
        //=== NEEDBITS(16); */
        while (bits < 16) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        state.flags = hold;
        if ((state.flags & 0xff) !== Z_DEFLATED) {
          strm.msg = 'unknown compression method';
          state.mode = BAD;
          break;
        }
        if (state.flags & 0xe000) {
          strm.msg = 'unknown header flags set';
          state.mode = BAD;
          break;
        }
        if (state.head) {
          state.head.text = ((hold >> 8) & 1);
        }
        if (state.flags & 0x0200) {
          //=== CRC2(state.check, hold);
          hbuf[0] = hold & 0xff;
          hbuf[1] = (hold >>> 8) & 0xff;
          state.check = crc32(state.check, hbuf, 2, 0);
          //===//
        }
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = TIME;
        /* falls through */
      case TIME:
        //=== NEEDBITS(32); */
        while (bits < 32) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        if (state.head) {
          state.head.time = hold;
        }
        if (state.flags & 0x0200) {
          //=== CRC4(state.check, hold)
          hbuf[0] = hold & 0xff;
          hbuf[1] = (hold >>> 8) & 0xff;
          hbuf[2] = (hold >>> 16) & 0xff;
          hbuf[3] = (hold >>> 24) & 0xff;
          state.check = crc32(state.check, hbuf, 4, 0);
          //===
        }
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = OS;
        /* falls through */
      case OS:
        //=== NEEDBITS(16); */
        while (bits < 16) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        if (state.head) {
          state.head.xflags = (hold & 0xff);
          state.head.os = (hold >> 8);
        }
        if (state.flags & 0x0200) {
          //=== CRC2(state.check, hold);
          hbuf[0] = hold & 0xff;
          hbuf[1] = (hold >>> 8) & 0xff;
          state.check = crc32(state.check, hbuf, 2, 0);
          //===//
        }
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = EXLEN;
        /* falls through */
      case EXLEN:
        if (state.flags & 0x0400) {
          //=== NEEDBITS(16); */
          while (bits < 16) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.length = hold;
          if (state.head) {
            state.head.extra_len = hold;
          }
          if (state.flags & 0x0200) {
            //=== CRC2(state.check, hold);
            hbuf[0] = hold & 0xff;
            hbuf[1] = (hold >>> 8) & 0xff;
            state.check = crc32(state.check, hbuf, 2, 0);
            //===//
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
        }
        else if (state.head) {
          state.head.extra = null/*Z_NULL*/;
        }
        state.mode = EXTRA;
        /* falls through */
      case EXTRA:
        if (state.flags & 0x0400) {
          copy = state.length;
          if (copy > have) { copy = have; }
          if (copy) {
            if (state.head) {
              len = state.head.extra_len - state.length;
              if (!state.head.extra) {
                // Use untyped array for more convenient processing later
                state.head.extra = new Array(state.head.extra_len);
              }
              utils.arraySet(
                state.head.extra,
                input,
                next,
                // extra field is limited to 65536 bytes
                // - no need for additional size check
                copy,
                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
                len
              );
              //zmemcpy(state.head.extra + len, next,
              //        len + copy > state.head.extra_max ?
              //        state.head.extra_max - len : copy);
            }
            if (state.flags & 0x0200) {
              state.check = crc32(state.check, input, copy, next);
            }
            have -= copy;
            next += copy;
            state.length -= copy;
          }
          if (state.length) { break inf_leave; }
        }
        state.length = 0;
        state.mode = NAME;
        /* falls through */
      case NAME:
        if (state.flags & 0x0800) {
          if (have === 0) { break inf_leave; }
          copy = 0;
          do {
            // TODO: 2 or 1 bytes?
            len = input[next + copy++];
            /* use constant limit because in js we should not preallocate memory */
            if (state.head && len &&
                (state.length < 65536 /*state.head.name_max*/)) {
              state.head.name += String.fromCharCode(len);
            }
          } while (len && copy < have);

          if (state.flags & 0x0200) {
            state.check = crc32(state.check, input, copy, next);
          }
          have -= copy;
          next += copy;
          if (len) { break inf_leave; }
        }
        else if (state.head) {
          state.head.name = null;
        }
        state.length = 0;
        state.mode = COMMENT;
        /* falls through */
      case COMMENT:
        if (state.flags & 0x1000) {
          if (have === 0) { break inf_leave; }
          copy = 0;
          do {
            len = input[next + copy++];
            /* use constant limit because in js we should not preallocate memory */
            if (state.head && len &&
                (state.length < 65536 /*state.head.comm_max*/)) {
              state.head.comment += String.fromCharCode(len);
            }
          } while (len && copy < have);
          if (state.flags & 0x0200) {
            state.check = crc32(state.check, input, copy, next);
          }
          have -= copy;
          next += copy;
          if (len) { break inf_leave; }
        }
        else if (state.head) {
          state.head.comment = null;
        }
        state.mode = HCRC;
        /* falls through */
      case HCRC:
        if (state.flags & 0x0200) {
          //=== NEEDBITS(16); */
          while (bits < 16) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          if (hold !== (state.check & 0xffff)) {
            strm.msg = 'header crc mismatch';
            state.mode = BAD;
            break;
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
        }
        if (state.head) {
          state.head.hcrc = ((state.flags >> 9) & 1);
          state.head.done = true;
        }
        strm.adler = state.check = 0;
        state.mode = TYPE;
        break;
      case DICTID:
        //=== NEEDBITS(32); */
        while (bits < 32) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        strm.adler = state.check = zswap32(hold);
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = DICT;
        /* falls through */
      case DICT:
        if (state.havedict === 0) {
          //--- RESTORE() ---
          strm.next_out = put;
          strm.avail_out = left;
          strm.next_in = next;
          strm.avail_in = have;
          state.hold = hold;
          state.bits = bits;
          //---
          return Z_NEED_DICT;
        }
        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
        state.mode = TYPE;
        /* falls through */
      case TYPE:
        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
        /* falls through */
      case TYPEDO:
        if (state.last) {
          //--- BYTEBITS() ---//
          hold >>>= bits & 7;
          bits -= bits & 7;
          //---//
          state.mode = CHECK;
          break;
        }
        //=== NEEDBITS(3); */
        while (bits < 3) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        state.last = (hold & 0x01)/*BITS(1)*/;
        //--- DROPBITS(1) ---//
        hold >>>= 1;
        bits -= 1;
        //---//

        switch ((hold & 0x03)/*BITS(2)*/) {
          case 0:                             /* stored block */
            //Tracev((stderr, "inflate:     stored block%s\n",
            //        state.last ? " (last)" : ""));
            state.mode = STORED;
            break;
          case 1:                             /* fixed block */
            fixedtables(state);
            //Tracev((stderr, "inflate:     fixed codes block%s\n",
            //        state.last ? " (last)" : ""));
            state.mode = LEN_;             /* decode codes */
            if (flush === Z_TREES) {
              //--- DROPBITS(2) ---//
              hold >>>= 2;
              bits -= 2;
              //---//
              break inf_leave;
            }
            break;
          case 2:                             /* dynamic block */
            //Tracev((stderr, "inflate:     dynamic codes block%s\n",
            //        state.last ? " (last)" : ""));
            state.mode = TABLE;
            break;
          case 3:
            strm.msg = 'invalid block type';
            state.mode = BAD;
        }
        //--- DROPBITS(2) ---//
        hold >>>= 2;
        bits -= 2;
        //---//
        break;
      case STORED:
        //--- BYTEBITS() ---// /* go to byte boundary */
        hold >>>= bits & 7;
        bits -= bits & 7;
        //---//
        //=== NEEDBITS(32); */
        while (bits < 32) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
          strm.msg = 'invalid stored block lengths';
          state.mode = BAD;
          break;
        }
        state.length = hold & 0xffff;
        //Tracev((stderr, "inflate:       stored length %u\n",
        //        state.length));
        //=== INITBITS();
        hold = 0;
        bits = 0;
        //===//
        state.mode = COPY_;
        if (flush === Z_TREES) { break inf_leave; }
        /* falls through */
      case COPY_:
        state.mode = COPY;
        /* falls through */
      case COPY:
        copy = state.length;
        if (copy) {
          if (copy > have) { copy = have; }
          if (copy > left) { copy = left; }
          if (copy === 0) { break inf_leave; }
          //--- zmemcpy(put, next, copy); ---
          utils.arraySet(output, input, next, copy, put);
          //---//
          have -= copy;
          next += copy;
          left -= copy;
          put += copy;
          state.length -= copy;
          break;
        }
        //Tracev((stderr, "inflate:       stored end\n"));
        state.mode = TYPE;
        break;
      case TABLE:
        //=== NEEDBITS(14); */
        while (bits < 14) {
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
        }
        //===//
        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
        //--- DROPBITS(5) ---//
        hold >>>= 5;
        bits -= 5;
        //---//
        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
        //--- DROPBITS(5) ---//
        hold >>>= 5;
        bits -= 5;
        //---//
        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
        //--- DROPBITS(4) ---//
        hold >>>= 4;
        bits -= 4;
        //---//
//#ifndef PKZIP_BUG_WORKAROUND
        if (state.nlen > 286 || state.ndist > 30) {
          strm.msg = 'too many length or distance symbols';
          state.mode = BAD;
          break;
        }
//#endif
        //Tracev((stderr, "inflate:       table sizes ok\n"));
        state.have = 0;
        state.mode = LENLENS;
        /* falls through */
      case LENLENS:
        while (state.have < state.ncode) {
          //=== NEEDBITS(3);
          while (bits < 3) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
          //--- DROPBITS(3) ---//
          hold >>>= 3;
          bits -= 3;
          //---//
        }
        while (state.have < 19) {
          state.lens[order[state.have++]] = 0;
        }
        // We have separate tables & no pointers. 2 commented lines below not needed.
        //state.next = state.codes;
        //state.lencode = state.next;
        // Switch to use dynamic table
        state.lencode = state.lendyn;
        state.lenbits = 7;

        opts = { bits: state.lenbits };
        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
        state.lenbits = opts.bits;

        if (ret) {
          strm.msg = 'invalid code lengths set';
          state.mode = BAD;
          break;
        }
        //Tracev((stderr, "inflate:       code lengths ok\n"));
        state.have = 0;
        state.mode = CODELENS;
        /* falls through */
      case CODELENS:
        while (state.have < state.nlen + state.ndist) {
          for (;;) {
            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
            here_bits = here >>> 24;
            here_op = (here >>> 16) & 0xff;
            here_val = here & 0xffff;

            if ((here_bits) <= bits) { break; }
            //--- PULLBYTE() ---//
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
            //---//
          }
          if (here_val < 16) {
            //--- DROPBITS(here.bits) ---//
            hold >>>= here_bits;
            bits -= here_bits;
            //---//
            state.lens[state.have++] = here_val;
          }
          else {
            if (here_val === 16) {
              //=== NEEDBITS(here.bits + 2);
              n = here_bits + 2;
              while (bits < n) {
                if (have === 0) { break inf_leave; }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              //===//
              //--- DROPBITS(here.bits) ---//
              hold >>>= here_bits;
              bits -= here_bits;
              //---//
              if (state.have === 0) {
                strm.msg = 'invalid bit length repeat';
                state.mode = BAD;
                break;
              }
              len = state.lens[state.have - 1];
              copy = 3 + (hold & 0x03);//BITS(2);
              //--- DROPBITS(2) ---//
              hold >>>= 2;
              bits -= 2;
              //---//
            }
            else if (here_val === 17) {
              //=== NEEDBITS(here.bits + 3);
              n = here_bits + 3;
              while (bits < n) {
                if (have === 0) { break inf_leave; }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              //===//
              //--- DROPBITS(here.bits) ---//
              hold >>>= here_bits;
              bits -= here_bits;
              //---//
              len = 0;
              copy = 3 + (hold & 0x07);//BITS(3);
              //--- DROPBITS(3) ---//
              hold >>>= 3;
              bits -= 3;
              //---//
            }
            else {
              //=== NEEDBITS(here.bits + 7);
              n = here_bits + 7;
              while (bits < n) {
                if (have === 0) { break inf_leave; }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              //===//
              //--- DROPBITS(here.bits) ---//
              hold >>>= here_bits;
              bits -= here_bits;
              //---//
              len = 0;
              copy = 11 + (hold & 0x7f);//BITS(7);
              //--- DROPBITS(7) ---//
              hold >>>= 7;
              bits -= 7;
              //---//
            }
            if (state.have + copy > state.nlen + state.ndist) {
              strm.msg = 'invalid bit length repeat';
              state.mode = BAD;
              break;
            }
            while (copy--) {
              state.lens[state.have++] = len;
            }
          }
        }

        /* handle error breaks in while */
        if (state.mode === BAD) { break; }

        /* check for end-of-block code (better have one) */
        if (state.lens[256] === 0) {
          strm.msg = 'invalid code -- missing end-of-block';
          state.mode = BAD;
          break;
        }

        /* build code tables -- note: do not change the lenbits or distbits
           values here (9 and 6) without reading the comments in inftrees.h
           concerning the ENOUGH constants, which depend on those values */
        state.lenbits = 9;

        opts = { bits: state.lenbits };
        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
        // We have separate tables & no pointers. 2 commented lines below not needed.
        // state.next_index = opts.table_index;
        state.lenbits = opts.bits;
        // state.lencode = state.next;

        if (ret) {
          strm.msg = 'invalid literal/lengths set';
          state.mode = BAD;
          break;
        }

        state.distbits = 6;
        //state.distcode.copy(state.codes);
        // Switch to use dynamic table
        state.distcode = state.distdyn;
        opts = { bits: state.distbits };
        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
        // We have separate tables & no pointers. 2 commented lines below not needed.
        // state.next_index = opts.table_index;
        state.distbits = opts.bits;
        // state.distcode = state.next;

        if (ret) {
          strm.msg = 'invalid distances set';
          state.mode = BAD;
          break;
        }
        //Tracev((stderr, 'inflate:       codes ok\n'));
        state.mode = LEN_;
        if (flush === Z_TREES) { break inf_leave; }
        /* falls through */
      case LEN_:
        state.mode = LEN;
        /* falls through */
      case LEN:
        if (have >= 6 && left >= 258) {
          //--- RESTORE() ---
          strm.next_out = put;
          strm.avail_out = left;
          strm.next_in = next;
          strm.avail_in = have;
          state.hold = hold;
          state.bits = bits;
          //---
          inflate_fast(strm, _out);
          //--- LOAD() ---
          put = strm.next_out;
          output = strm.output;
          left = strm.avail_out;
          next = strm.next_in;
          input = strm.input;
          have = strm.avail_in;
          hold = state.hold;
          bits = state.bits;
          //---

          if (state.mode === TYPE) {
            state.back = -1;
          }
          break;
        }
        state.back = 0;
        for (;;) {
          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/
          here_bits = here >>> 24;
          here_op = (here >>> 16) & 0xff;
          here_val = here & 0xffff;

          if (here_bits <= bits) { break; }
          //--- PULLBYTE() ---//
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
          //---//
        }
        if (here_op && (here_op & 0xf0) === 0) {
          last_bits = here_bits;
          last_op = here_op;
          last_val = here_val;
          for (;;) {
            here = state.lencode[last_val +
                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
            here_bits = here >>> 24;
            here_op = (here >>> 16) & 0xff;
            here_val = here & 0xffff;

            if ((last_bits + here_bits) <= bits) { break; }
            //--- PULLBYTE() ---//
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
            //---//
          }
          //--- DROPBITS(last.bits) ---//
          hold >>>= last_bits;
          bits -= last_bits;
          //---//
          state.back += last_bits;
        }
        //--- DROPBITS(here.bits) ---//
        hold >>>= here_bits;
        bits -= here_bits;
        //---//
        state.back += here_bits;
        state.length = here_val;
        if (here_op === 0) {
          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
          //        "inflate:         literal '%c'\n" :
          //        "inflate:         literal 0x%02x\n", here.val));
          state.mode = LIT;
          break;
        }
        if (here_op & 32) {
          //Tracevv((stderr, "inflate:         end of block\n"));
          state.back = -1;
          state.mode = TYPE;
          break;
        }
        if (here_op & 64) {
          strm.msg = 'invalid literal/length code';
          state.mode = BAD;
          break;
        }
        state.extra = here_op & 15;
        state.mode = LENEXT;
        /* falls through */
      case LENEXT:
        if (state.extra) {
          //=== NEEDBITS(state.extra);
          n = state.extra;
          while (bits < n) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
          //--- DROPBITS(state.extra) ---//
          hold >>>= state.extra;
          bits -= state.extra;
          //---//
          state.back += state.extra;
        }
        //Tracevv((stderr, "inflate:         length %u\n", state.length));
        state.was = state.length;
        state.mode = DIST;
        /* falls through */
      case DIST:
        for (;;) {
          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
          here_bits = here >>> 24;
          here_op = (here >>> 16) & 0xff;
          here_val = here & 0xffff;

          if ((here_bits) <= bits) { break; }
          //--- PULLBYTE() ---//
          if (have === 0) { break inf_leave; }
          have--;
          hold += input[next++] << bits;
          bits += 8;
          //---//
        }
        if ((here_op & 0xf0) === 0) {
          last_bits = here_bits;
          last_op = here_op;
          last_val = here_val;
          for (;;) {
            here = state.distcode[last_val +
                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
            here_bits = here >>> 24;
            here_op = (here >>> 16) & 0xff;
            here_val = here & 0xffff;

            if ((last_bits + here_bits) <= bits) { break; }
            //--- PULLBYTE() ---//
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
            //---//
          }
          //--- DROPBITS(last.bits) ---//
          hold >>>= last_bits;
          bits -= last_bits;
          //---//
          state.back += last_bits;
        }
        //--- DROPBITS(here.bits) ---//
        hold >>>= here_bits;
        bits -= here_bits;
        //---//
        state.back += here_bits;
        if (here_op & 64) {
          strm.msg = 'invalid distance code';
          state.mode = BAD;
          break;
        }
        state.offset = here_val;
        state.extra = (here_op) & 15;
        state.mode = DISTEXT;
        /* falls through */
      case DISTEXT:
        if (state.extra) {
          //=== NEEDBITS(state.extra);
          n = state.extra;
          while (bits < n) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
          //--- DROPBITS(state.extra) ---//
          hold >>>= state.extra;
          bits -= state.extra;
          //---//
          state.back += state.extra;
        }
//#ifdef INFLATE_STRICT
        if (state.offset > state.dmax) {
          strm.msg = 'invalid distance too far back';
          state.mode = BAD;
          break;
        }
//#endif
        //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
        state.mode = MATCH;
        /* falls through */
      case MATCH:
        if (left === 0) { break inf_leave; }
        copy = _out - left;
        if (state.offset > copy) {         /* copy from window */
          copy = state.offset - copy;
          if (copy > state.whave) {
            if (state.sane) {
              strm.msg = 'invalid distance too far back';
              state.mode = BAD;
              break;
            }
// (!) This block is disabled in zlib defaults,
// don't enable it for binary compatibility
//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
//          Trace((stderr, "inflate.c too far\n"));
//          copy -= state.whave;
//          if (copy > state.length) { copy = state.length; }
//          if (copy > left) { copy = left; }
//          left -= copy;
//          state.length -= copy;
//          do {
//            output[put++] = 0;
//          } while (--copy);
//          if (state.length === 0) { state.mode = LEN; }
//          break;
//#endif
          }
          if (copy > state.wnext) {
            copy -= state.wnext;
            from = state.wsize - copy;
          }
          else {
            from = state.wnext - copy;
          }
          if (copy > state.length) { copy = state.length; }
          from_source = state.window;
        }
        else {                              /* copy from output */
          from_source = output;
          from = put - state.offset;
          copy = state.length;
        }
        if (copy > left) { copy = left; }
        left -= copy;
        state.length -= copy;
        do {
          output[put++] = from_source[from++];
        } while (--copy);
        if (state.length === 0) { state.mode = LEN; }
        break;
      case LIT:
        if (left === 0) { break inf_leave; }
        output[put++] = state.length;
        left--;
        state.mode = LEN;
        break;
      case CHECK:
        if (state.wrap) {
          //=== NEEDBITS(32);
          while (bits < 32) {
            if (have === 0) { break inf_leave; }
            have--;
            // Use '|' instead of '+' to make sure that result is signed
            hold |= input[next++] << bits;
            bits += 8;
          }
          //===//
          _out -= left;
          strm.total_out += _out;
          state.total += _out;
          if (_out) {
            strm.adler = state.check =
                /*UPDATE(state.check, put - _out, _out);*/
                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));

          }
          _out = left;
          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
          if ((state.flags ? hold : zswap32(hold)) !== state.check) {
            strm.msg = 'incorrect data check';
            state.mode = BAD;
            break;
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          //Tracev((stderr, "inflate:   check matches trailer\n"));
        }
        state.mode = LENGTH;
        /* falls through */
      case LENGTH:
        if (state.wrap && state.flags) {
          //=== NEEDBITS(32);
          while (bits < 32) {
            if (have === 0) { break inf_leave; }
            have--;
            hold += input[next++] << bits;
            bits += 8;
          }
          //===//
          if (hold !== (state.total & 0xffffffff)) {
            strm.msg = 'incorrect length check';
            state.mode = BAD;
            break;
          }
          //=== INITBITS();
          hold = 0;
          bits = 0;
          //===//
          //Tracev((stderr, "inflate:   length matches trailer\n"));
        }
        state.mode = DONE;
        /* falls through */
      case DONE:
        ret = Z_STREAM_END;
        break inf_leave;
      case BAD:
        ret = Z_DATA_ERROR;
        break inf_leave;
      case MEM:
        return Z_MEM_ERROR;
      case SYNC:
        /* falls through */
      default:
        return Z_STREAM_ERROR;
    }
  }

  // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"

  /*
     Return from inflate(), updating the total counts and the check value.
     If there was no progress during the inflate() call, return a buffer
     error.  Call updatewindow() to create and/or update the window state.
     Note: a memory error from inflate() is non-recoverable.
   */

  //--- RESTORE() ---
  strm.next_out = put;
  strm.avail_out = left;
  strm.next_in = next;
  strm.avail_in = have;
  state.hold = hold;
  state.bits = bits;
  //---

  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
                      (state.mode < CHECK || flush !== Z_FINISH))) {
    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
      state.mode = MEM;
      return Z_MEM_ERROR;
    }
  }
  _in -= strm.avail_in;
  _out -= strm.avail_out;
  strm.total_in += _in;
  strm.total_out += _out;
  state.total += _out;
  if (state.wrap && _out) {
    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
  }
  strm.data_type = state.bits + (state.last ? 64 : 0) +
                    (state.mode === TYPE ? 128 : 0) +
                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
    ret = Z_BUF_ERROR;
  }
  return ret;
}

function inflateEnd(strm) {

  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
    return Z_STREAM_ERROR;
  }

  var state = strm.state;
  if (state.window) {
    state.window = null;
  }
  strm.state = null;
  return Z_OK;
}

function inflateGetHeader(strm, head) {
  var state;

  /* check state */
  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
  state = strm.state;
  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }

  /* save header structure */
  state.head = head;
  head.done = false;
  return Z_OK;
}

function inflateSetDictionary(strm, dictionary) {
  var dictLength = dictionary.length;

  var state;
  var dictid;
  var ret;

  /* check state */
  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }
  state = strm.state;

  if (state.wrap !== 0 && state.mode !== DICT) {
    return Z_STREAM_ERROR;
  }

  /* check for correct dictionary identifier */
  if (state.mode === DICT) {
    dictid = 1; /* adler32(0, null, 0)*/
    /* dictid = adler32(dictid, dictionary, dictLength); */
    dictid = adler32(dictid, dictionary, dictLength, 0);
    if (dictid !== state.check) {
      return Z_DATA_ERROR;
    }
  }
  /* copy dictionary to window using updatewindow(), which will amend the
   existing dictionary if appropriate */
  ret = updatewindow(strm, dictionary, dictLength, dictLength);
  if (ret) {
    state.mode = MEM;
    return Z_MEM_ERROR;
  }
  state.havedict = 1;
  // Tracev((stderr, "inflate:   dictionary set\n"));
  return Z_OK;
}

exports.inflateReset = inflateReset;
exports.inflateReset2 = inflateReset2;
exports.inflateResetKeep = inflateResetKeep;
exports.inflateInit = inflateInit;
exports.inflateInit2 = inflateInit2;
exports.inflate = inflate;
exports.inflateEnd = inflateEnd;
exports.inflateGetHeader = inflateGetHeader;
exports.inflateSetDictionary = inflateSetDictionary;
exports.inflateInfo = 'pako inflate (from Nodeca project)';

/* Not implemented
exports.inflateCopy = inflateCopy;
exports.inflateGetDictionary = inflateGetDictionary;
exports.inflateMark = inflateMark;
exports.inflatePrime = inflatePrime;
exports.inflateSync = inflateSync;
exports.inflateSyncPoint = inflateSyncPoint;
exports.inflateUndermine = inflateUndermine;
*/

},{"../utils/common":39,"./adler32":40,"./crc32":42,"./inffast":44,"./inftrees":46}],46:[function(require,module,exports){
'use strict';

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

var utils = require('../utils/common');

var MAXBITS = 15;
var ENOUGH_LENS = 852;
var ENOUGH_DISTS = 592;
//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);

var CODES = 0;
var LENS = 1;
var DISTS = 2;

var lbase = [ /* Length codes 257..285 base */
  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
];

var lext = [ /* Length codes 257..285 extra */
  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
];

var dbase = [ /* Distance codes 0..29 base */
  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
  8193, 12289, 16385, 24577, 0, 0
];

var dext = [ /* Distance codes 0..29 extra */
  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
  28, 28, 29, 29, 64, 64
];

module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
{
  var bits = opts.bits;
      //here = opts.here; /* table entry for duplication */

  var len = 0;               /* a code's length in bits */
  var sym = 0;               /* index of code symbols */
  var min = 0, max = 0;          /* minimum and maximum code lengths */
  var root = 0;              /* number of index bits for root table */
  var curr = 0;              /* number of index bits for current table */
  var drop = 0;              /* code bits to drop for sub-table */
  var left = 0;                   /* number of prefix codes available */
  var used = 0;              /* code entries in table used */
  var huff = 0;              /* Huffman code */
  var incr;              /* for incrementing code, index */
  var fill;              /* index for replicating entries */
  var low;               /* low bits for current root entry */
  var mask;              /* mask for low root bits */
  var next;             /* next available space in table */
  var base = null;     /* base value table to use */
  var base_index = 0;
//  var shoextra;    /* extra bits table to use */
  var end;                    /* use base and extra for symbol > end */
  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */
  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */
  var extra = null;
  var extra_index = 0;

  var here_bits, here_op, here_val;

  /*
   Process a set of code lengths to create a canonical Huffman code.  The
   code lengths are lens[0..codes-1].  Each length corresponds to the
   symbols 0..codes-1.  The Huffman code is generated by first sorting the
   symbols by length from short to long, and retaining the symbol order
   for codes with equal lengths.  Then the code starts with all zero bits
   for the first code of the shortest length, and the codes are integer
   increments for the same length, and zeros are appended as the length
   increases.  For the deflate format, these bits are stored backwards
   from their more natural integer increment ordering, and so when the
   decoding tables are built in the large loop below, the integer codes
   are incremented backwards.

   This routine assumes, but does not check, that all of the entries in
   lens[] are in the range 0..MAXBITS.  The caller must assure this.
   1..MAXBITS is interpreted as that code length.  zero means that that
   symbol does not occur in this code.

   The codes are sorted by computing a count of codes for each length,
   creating from that a table of starting indices for each length in the
   sorted table, and then entering the symbols in order in the sorted
   table.  The sorted table is work[], with that space being provided by
   the caller.

   The length counts are used for other purposes as well, i.e. finding
   the minimum and maximum length codes, determining if there are any
   codes at all, checking for a valid set of lengths, and looking ahead
   at length counts to determine sub-table sizes when building the
   decoding tables.
   */

  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
  for (len = 0; len <= MAXBITS; len++) {
    count[len] = 0;
  }
  for (sym = 0; sym < codes; sym++) {
    count[lens[lens_index + sym]]++;
  }

  /* bound code lengths, force root to be within code lengths */
  root = bits;
  for (max = MAXBITS; max >= 1; max--) {
    if (count[max] !== 0) { break; }
  }
  if (root > max) {
    root = max;
  }
  if (max === 0) {                     /* no symbols to code at all */
    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
    table[table_index++] = (1 << 24) | (64 << 16) | 0;


    //table.op[opts.table_index] = 64;
    //table.bits[opts.table_index] = 1;
    //table.val[opts.table_index++] = 0;
    table[table_index++] = (1 << 24) | (64 << 16) | 0;

    opts.bits = 1;
    return 0;     /* no symbols, but wait for decoding to report error */
  }
  for (min = 1; min < max; min++) {
    if (count[min] !== 0) { break; }
  }
  if (root < min) {
    root = min;
  }

  /* check for an over-subscribed or incomplete set of lengths */
  left = 1;
  for (len = 1; len <= MAXBITS; len++) {
    left <<= 1;
    left -= count[len];
    if (left < 0) {
      return -1;
    }        /* over-subscribed */
  }
  if (left > 0 && (type === CODES || max !== 1)) {
    return -1;                      /* incomplete set */
  }

  /* generate offsets into symbol table for each length for sorting */
  offs[1] = 0;
  for (len = 1; len < MAXBITS; len++) {
    offs[len + 1] = offs[len] + count[len];
  }

  /* sort symbols by length, by symbol order within each length */
  for (sym = 0; sym < codes; sym++) {
    if (lens[lens_index + sym] !== 0) {
      work[offs[lens[lens_index + sym]]++] = sym;
    }
  }

  /*
   Create and fill in decoding tables.  In this loop, the table being
   filled is at next and has curr index bits.  The code being used is huff
   with length len.  That code is converted to an index by dropping drop
   bits off of the bottom.  For codes where len is less than drop + curr,
   those top drop + curr - len bits are incremented through all values to
   fill the table with replicated entries.

   root is the number of index bits for the root table.  When len exceeds
   root, sub-tables are created pointed to by the root entry with an index
   of the low root bits of huff.  This is saved in low to check for when a
   new sub-table should be started.  drop is zero when the root table is
   being filled, and drop is root when sub-tables are being filled.

   When a new sub-table is needed, it is necessary to look ahead in the
   code lengths to determine what size sub-table is needed.  The length
   counts are used for this, and so count[] is decremented as codes are
   entered in the tables.

   used keeps track of how many table entries have been allocated from the
   provided *table space.  It is checked for LENS and DIST tables against
   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
   the initial root table size constants.  See the comments in inftrees.h
   for more information.

   sym increments through all symbols, and the loop terminates when
   all codes of length max, i.e. all codes, have been processed.  This
   routine permits incomplete codes, so another loop after this one fills
   in the rest of the decoding tables with invalid code markers.
   */

  /* set up for code type */
  // poor man optimization - use if-else instead of switch,
  // to avoid deopts in old v8
  if (type === CODES) {
    base = extra = work;    /* dummy value--not used */
    end = 19;

  } else if (type === LENS) {
    base = lbase;
    base_index -= 257;
    extra = lext;
    extra_index -= 257;
    end = 256;

  } else {                    /* DISTS */
    base = dbase;
    extra = dext;
    end = -1;
  }

  /* initialize opts for loop */
  huff = 0;                   /* starting code */
  sym = 0;                    /* starting code symbol */
  len = min;                  /* starting code length */
  next = table_index;              /* current table to fill in */
  curr = root;                /* current table index bits */
  drop = 0;                   /* current bits to drop from code for index */
  low = -1;                   /* trigger new sub-table when len > root */
  used = 1 << root;          /* use root table entries */
  mask = used - 1;            /* mask for comparing low */

  /* check available table space */
  if ((type === LENS && used > ENOUGH_LENS) ||
    (type === DISTS && used > ENOUGH_DISTS)) {
    return 1;
  }

  /* process all codes and make table entries */
  for (;;) {
    /* create table entry */
    here_bits = len - drop;
    if (work[sym] < end) {
      here_op = 0;
      here_val = work[sym];
    }
    else if (work[sym] > end) {
      here_op = extra[extra_index + work[sym]];
      here_val = base[base_index + work[sym]];
    }
    else {
      here_op = 32 + 64;         /* end of block */
      here_val = 0;
    }

    /* replicate for those indices with low len bits equal to huff */
    incr = 1 << (len - drop);
    fill = 1 << curr;
    min = fill;                 /* save offset to next table */
    do {
      fill -= incr;
      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
    } while (fill !== 0);

    /* backwards increment the len-bit code huff */
    incr = 1 << (len - 1);
    while (huff & incr) {
      incr >>= 1;
    }
    if (incr !== 0) {
      huff &= incr - 1;
      huff += incr;
    } else {
      huff = 0;
    }

    /* go to next symbol, update count, len */
    sym++;
    if (--count[len] === 0) {
      if (len === max) { break; }
      len = lens[lens_index + work[sym]];
    }

    /* create new sub-table if needed */
    if (len > root && (huff & mask) !== low) {
      /* if first time, transition to sub-tables */
      if (drop === 0) {
        drop = root;
      }

      /* increment past last table */
      next += min;            /* here min is 1 << curr */

      /* determine length of next table */
      curr = len - drop;
      left = 1 << curr;
      while (curr + drop < max) {
        left -= count[curr + drop];
        if (left <= 0) { break; }
        curr++;
        left <<= 1;
      }

      /* check for enough space */
      used += 1 << curr;
      if ((type === LENS && used > ENOUGH_LENS) ||
        (type === DISTS && used > ENOUGH_DISTS)) {
        return 1;
      }

      /* point entry in root table to sub-table */
      low = huff & mask;
      /*table.op[low] = curr;
      table.bits[low] = root;
      table.val[low] = next - opts.table_index;*/
      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
    }
  }

  /* fill in remaining table entry if code is incomplete (guaranteed to have
   at most one remaining entry, since if the code is incomplete, the
   maximum code length that was allowed to get this far is one bit) */
  if (huff !== 0) {
    //table.op[next + huff] = 64;            /* invalid code marker */
    //table.bits[next + huff] = len - drop;
    //table.val[next + huff] = 0;
    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
  }

  /* set return parameters */
  //opts.table_index += used;
  opts.bits = root;
  return 0;
};

},{"../utils/common":39}],47:[function(require,module,exports){
'use strict';

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

module.exports = {
  2:      'need dictionary',     /* Z_NEED_DICT       2  */
  1:      'stream end',          /* Z_STREAM_END      1  */
  0:      '',                    /* Z_OK              0  */
  '-1':   'file error',          /* Z_ERRNO         (-1) */
  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
};

},{}],48:[function(require,module,exports){
'use strict';

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

/* eslint-disable space-unary-ops */

var utils = require('../utils/common');

/* Public constants ==========================================================*/
/* ===========================================================================*/


//var Z_FILTERED          = 1;
//var Z_HUFFMAN_ONLY      = 2;
//var Z_RLE               = 3;
var Z_FIXED               = 4;
//var Z_DEFAULT_STRATEGY  = 0;

/* Possible values of the data_type field (though see inflate()) */
var Z_BINARY              = 0;
var Z_TEXT                = 1;
//var Z_ASCII             = 1; // = Z_TEXT
var Z_UNKNOWN             = 2;

/*============================================================================*/


function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }

// From zutil.h

var STORED_BLOCK = 0;
var STATIC_TREES = 1;
var DYN_TREES    = 2;
/* The three kinds of block type */

var MIN_MATCH    = 3;
var MAX_MATCH    = 258;
/* The minimum and maximum match lengths */

// From deflate.h
/* ===========================================================================
 * Internal compression state.
 */

var LENGTH_CODES  = 29;
/* number of length codes, not counting the special END_BLOCK code */

var LITERALS      = 256;
/* number of literal bytes 0..255 */

var L_CODES       = LITERALS + 1 + LENGTH_CODES;
/* number of Literal or Length codes, including the END_BLOCK code */

var D_CODES       = 30;
/* number of distance codes */

var BL_CODES      = 19;
/* number of codes used to transfer the bit lengths */

var HEAP_SIZE     = 2 * L_CODES + 1;
/* maximum heap size */

var MAX_BITS      = 15;
/* All codes must not exceed MAX_BITS bits */

var Buf_size      = 16;
/* size of bit buffer in bi_buf */


/* ===========================================================================
 * Constants
 */

var MAX_BL_BITS = 7;
/* Bit length codes must not exceed MAX_BL_BITS bits */

var END_BLOCK   = 256;
/* end of block literal code */

var REP_3_6     = 16;
/* repeat previous bit length 3-6 times (2 bits of repeat count) */

var REPZ_3_10   = 17;
/* repeat a zero length 3-10 times  (3 bits of repeat count) */

var REPZ_11_138 = 18;
/* repeat a zero length 11-138 times  (7 bits of repeat count) */

/* eslint-disable comma-spacing,array-bracket-spacing */
var extra_lbits =   /* extra bits for each length code */
  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];

var extra_dbits =   /* extra bits for each distance code */
  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];

var extra_blbits =  /* extra bits for each bit length code */
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];

var bl_order =
  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
/* eslint-enable comma-spacing,array-bracket-spacing */

/* The lengths of the bit length codes are sent in order of decreasing
 * probability, to avoid transmitting the lengths for unused bit length codes.
 */

/* ===========================================================================
 * Local data. These are initialized only once.
 */

// We pre-fill arrays with 0 to avoid uninitialized gaps

var DIST_CODE_LEN = 512; /* see definition of array dist_code below */

// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
var static_ltree  = new Array((L_CODES + 2) * 2);
zero(static_ltree);
/* The static literal tree. Since the bit lengths are imposed, there is no
 * need for the L_CODES extra codes used during heap construction. However
 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
 * below).
 */

var static_dtree  = new Array(D_CODES * 2);
zero(static_dtree);
/* The static distance tree. (Actually a trivial tree since all codes use
 * 5 bits.)
 */

var _dist_code    = new Array(DIST_CODE_LEN);
zero(_dist_code);
/* Distance codes. The first 256 values correspond to the distances
 * 3 .. 258, the last 256 values correspond to the top 8 bits of
 * the 15 bit distances.
 */

var _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);
zero(_length_code);
/* length code for each normalized match length (0 == MIN_MATCH) */

var base_length   = new Array(LENGTH_CODES);
zero(base_length);
/* First normalized length for each code (0 = MIN_MATCH) */

var base_dist     = new Array(D_CODES);
zero(base_dist);
/* First normalized distance for each code (0 = distance of 1) */


function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {

  this.static_tree  = static_tree;  /* static tree or NULL */
  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */
  this.extra_base   = extra_base;   /* base index for extra_bits */
  this.elems        = elems;        /* max number of elements in the tree */
  this.max_length   = max_length;   /* max bit length for the codes */

  // show if `static_tree` has data or dummy - needed for monomorphic objects
  this.has_stree    = static_tree && static_tree.length;
}


var static_l_desc;
var static_d_desc;
var static_bl_desc;


function TreeDesc(dyn_tree, stat_desc) {
  this.dyn_tree = dyn_tree;     /* the dynamic tree */
  this.max_code = 0;            /* largest code with non zero frequency */
  this.stat_desc = stat_desc;   /* the corresponding static tree */
}



function d_code(dist) {
  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
}


/* ===========================================================================
 * Output a short LSB first on the stream.
 * IN assertion: there is enough room in pendingBuf.
 */
function put_short(s, w) {
//    put_byte(s, (uch)((w) & 0xff));
//    put_byte(s, (uch)((ush)(w) >> 8));
  s.pending_buf[s.pending++] = (w) & 0xff;
  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
}


/* ===========================================================================
 * Send a value on a given number of bits.
 * IN assertion: length <= 16 and value fits in length bits.
 */
function send_bits(s, value, length) {
  if (s.bi_valid > (Buf_size - length)) {
    s.bi_buf |= (value << s.bi_valid) & 0xffff;
    put_short(s, s.bi_buf);
    s.bi_buf = value >> (Buf_size - s.bi_valid);
    s.bi_valid += length - Buf_size;
  } else {
    s.bi_buf |= (value << s.bi_valid) & 0xffff;
    s.bi_valid += length;
  }
}


function send_code(s, c, tree) {
  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);
}


/* ===========================================================================
 * Reverse the first len bits of a code, using straightforward code (a faster
 * method would use a table)
 * IN assertion: 1 <= len <= 15
 */
function bi_reverse(code, len) {
  var res = 0;
  do {
    res |= code & 1;
    code >>>= 1;
    res <<= 1;
  } while (--len > 0);
  return res >>> 1;
}


/* ===========================================================================
 * Flush the bit buffer, keeping at most 7 bits in it.
 */
function bi_flush(s) {
  if (s.bi_valid === 16) {
    put_short(s, s.bi_buf);
    s.bi_buf = 0;
    s.bi_valid = 0;

  } else if (s.bi_valid >= 8) {
    s.pending_buf[s.pending++] = s.bi_buf & 0xff;
    s.bi_buf >>= 8;
    s.bi_valid -= 8;
  }
}


/* ===========================================================================
 * Compute the optimal bit lengths for a tree and update the total bit length
 * for the current block.
 * IN assertion: the fields freq and dad are set, heap[heap_max] and
 *    above are the tree nodes sorted by increasing frequency.
 * OUT assertions: the field len is set to the optimal bit length, the
 *     array bl_count contains the frequencies for each bit length.
 *     The length opt_len is updated; static_len is also updated if stree is
 *     not null.
 */
function gen_bitlen(s, desc)
//    deflate_state *s;
//    tree_desc *desc;    /* the tree descriptor */
{
  var tree            = desc.dyn_tree;
  var max_code        = desc.max_code;
  var stree           = desc.stat_desc.static_tree;
  var has_stree       = desc.stat_desc.has_stree;
  var extra           = desc.stat_desc.extra_bits;
  var base            = desc.stat_desc.extra_base;
  var max_length      = desc.stat_desc.max_length;
  var h;              /* heap index */
  var n, m;           /* iterate over the tree elements */
  var bits;           /* bit length */
  var xbits;          /* extra bits */
  var f;              /* frequency */
  var overflow = 0;   /* number of elements with bit length too large */

  for (bits = 0; bits <= MAX_BITS; bits++) {
    s.bl_count[bits] = 0;
  }

  /* In a first pass, compute the optimal bit lengths (which may
   * overflow in the case of the bit length tree).
   */
  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */

  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
    n = s.heap[h];
    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
    if (bits > max_length) {
      bits = max_length;
      overflow++;
    }
    tree[n * 2 + 1]/*.Len*/ = bits;
    /* We overwrite tree[n].Dad which is no longer needed */

    if (n > max_code) { continue; } /* not a leaf node */

    s.bl_count[bits]++;
    xbits = 0;
    if (n >= base) {
      xbits = extra[n - base];
    }
    f = tree[n * 2]/*.Freq*/;
    s.opt_len += f * (bits + xbits);
    if (has_stree) {
      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);
    }
  }
  if (overflow === 0) { return; }

  // Trace((stderr,"\nbit length overflow\n"));
  /* This happens for example on obj2 and pic of the Calgary corpus */

  /* Find the first bit length which could increase: */
  do {
    bits = max_length - 1;
    while (s.bl_count[bits] === 0) { bits--; }
    s.bl_count[bits]--;      /* move one leaf down the tree */
    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */
    s.bl_count[max_length]--;
    /* The brother of the overflow item also moves one step up,
     * but this does not affect bl_count[max_length]
     */
    overflow -= 2;
  } while (overflow > 0);

  /* Now recompute all bit lengths, scanning in increasing frequency.
   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
   * lengths instead of fixing only the wrong ones. This idea is taken
   * from 'ar' written by Haruhiko Okumura.)
   */
  for (bits = max_length; bits !== 0; bits--) {
    n = s.bl_count[bits];
    while (n !== 0) {
      m = s.heap[--h];
      if (m > max_code) { continue; }
      if (tree[m * 2 + 1]/*.Len*/ !== bits) {
        // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;
        tree[m * 2 + 1]/*.Len*/ = bits;
      }
      n--;
    }
  }
}


/* ===========================================================================
 * Generate the codes for a given tree and bit counts (which need not be
 * optimal).
 * IN assertion: the array bl_count contains the bit length statistics for
 * the given tree and the field len is set for all tree elements.
 * OUT assertion: the field code is set for all tree elements of non
 *     zero code length.
 */
function gen_codes(tree, max_code, bl_count)
//    ct_data *tree;             /* the tree to decorate */
//    int max_code;              /* largest code with non zero frequency */
//    ushf *bl_count;            /* number of codes at each bit length */
{
  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */
  var code = 0;              /* running code value */
  var bits;                  /* bit index */
  var n;                     /* code index */

  /* The distribution counts are first used to generate the code values
   * without bit reversal.
   */
  for (bits = 1; bits <= MAX_BITS; bits++) {
    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;
  }
  /* Check that the bit counts in bl_count are consistent. The last code
   * must be all ones.
   */
  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
  //        "inconsistent bit counts");
  //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));

  for (n = 0;  n <= max_code; n++) {
    var len = tree[n * 2 + 1]/*.Len*/;
    if (len === 0) { continue; }
    /* Now reverse the bits */
    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);

    //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
  }
}


/* ===========================================================================
 * Initialize the various 'constant' tables.
 */
function tr_static_init() {
  var n;        /* iterates over tree elements */
  var bits;     /* bit counter */
  var length;   /* length value */
  var code;     /* code value */
  var dist;     /* distance index */
  var bl_count = new Array(MAX_BITS + 1);
  /* number of codes at each bit length for an optimal tree */

  // do check in _tr_init()
  //if (static_init_done) return;

  /* For some embedded targets, global variables are not initialized: */
/*#ifdef NO_INIT_GLOBAL_POINTERS
  static_l_desc.static_tree = static_ltree;
  static_l_desc.extra_bits = extra_lbits;
  static_d_desc.static_tree = static_dtree;
  static_d_desc.extra_bits = extra_dbits;
  static_bl_desc.extra_bits = extra_blbits;
#endif*/

  /* Initialize the mapping length (0..255) -> length code (0..28) */
  length = 0;
  for (code = 0; code < LENGTH_CODES - 1; code++) {
    base_length[code] = length;
    for (n = 0; n < (1 << extra_lbits[code]); n++) {
      _length_code[length++] = code;
    }
  }
  //Assert (length == 256, "tr_static_init: length != 256");
  /* Note that the length 255 (match length 258) can be represented
   * in two different ways: code 284 + 5 bits or code 285, so we
   * overwrite length_code[255] to use the best encoding:
   */
  _length_code[length - 1] = code;

  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
  dist = 0;
  for (code = 0; code < 16; code++) {
    base_dist[code] = dist;
    for (n = 0; n < (1 << extra_dbits[code]); n++) {
      _dist_code[dist++] = code;
    }
  }
  //Assert (dist == 256, "tr_static_init: dist != 256");
  dist >>= 7; /* from now on, all distances are divided by 128 */
  for (; code < D_CODES; code++) {
    base_dist[code] = dist << 7;
    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {
      _dist_code[256 + dist++] = code;
    }
  }
  //Assert (dist == 256, "tr_static_init: 256+dist != 512");

  /* Construct the codes of the static literal tree */
  for (bits = 0; bits <= MAX_BITS; bits++) {
    bl_count[bits] = 0;
  }

  n = 0;
  while (n <= 143) {
    static_ltree[n * 2 + 1]/*.Len*/ = 8;
    n++;
    bl_count[8]++;
  }
  while (n <= 255) {
    static_ltree[n * 2 + 1]/*.Len*/ = 9;
    n++;
    bl_count[9]++;
  }
  while (n <= 279) {
    static_ltree[n * 2 + 1]/*.Len*/ = 7;
    n++;
    bl_count[7]++;
  }
  while (n <= 287) {
    static_ltree[n * 2 + 1]/*.Len*/ = 8;
    n++;
    bl_count[8]++;
  }
  /* Codes 286 and 287 do not exist, but we must include them in the
   * tree construction to get a canonical Huffman tree (longest code
   * all ones)
   */
  gen_codes(static_ltree, L_CODES + 1, bl_count);

  /* The static distance tree is trivial: */
  for (n = 0; n < D_CODES; n++) {
    static_dtree[n * 2 + 1]/*.Len*/ = 5;
    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);
  }

  // Now data ready and we can init static trees
  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);
  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);

  //static_init_done = true;
}


/* ===========================================================================
 * Initialize a new block.
 */
function init_block(s) {
  var n; /* iterates over tree elements */

  /* Initialize the trees. */
  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }
  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }
  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }

  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;
  s.opt_len = s.static_len = 0;
  s.last_lit = s.matches = 0;
}


/* ===========================================================================
 * Flush the bit buffer and align the output on a byte boundary
 */
function bi_windup(s)
{
  if (s.bi_valid > 8) {
    put_short(s, s.bi_buf);
  } else if (s.bi_valid > 0) {
    //put_byte(s, (Byte)s->bi_buf);
    s.pending_buf[s.pending++] = s.bi_buf;
  }
  s.bi_buf = 0;
  s.bi_valid = 0;
}

/* ===========================================================================
 * Copy a stored block, storing first the length and its
 * one's complement if requested.
 */
function copy_block(s, buf, len, header)
//DeflateState *s;
//charf    *buf;    /* the input data */
//unsigned len;     /* its length */
//int      header;  /* true if block header must be written */
{
  bi_windup(s);        /* align on byte boundary */

  if (header) {
    put_short(s, len);
    put_short(s, ~len);
  }
//  while (len--) {
//    put_byte(s, *buf++);
//  }
  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
  s.pending += len;
}

/* ===========================================================================
 * Compares to subtrees, using the tree depth as tie breaker when
 * the subtrees have equal frequency. This minimizes the worst case length.
 */
function smaller(tree, n, m, depth) {
  var _n2 = n * 2;
  var _m2 = m * 2;
  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
}

/* ===========================================================================
 * Restore the heap property by moving down the tree starting at node k,
 * exchanging a node with the smallest of its two sons if necessary, stopping
 * when the heap property is re-established (each father smaller than its
 * two sons).
 */
function pqdownheap(s, tree, k)
//    deflate_state *s;
//    ct_data *tree;  /* the tree to restore */
//    int k;               /* node to move down */
{
  var v = s.heap[k];
  var j = k << 1;  /* left son of k */
  while (j <= s.heap_len) {
    /* Set j to the smallest of the two sons: */
    if (j < s.heap_len &&
      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
      j++;
    }
    /* Exit if v is smaller than both sons */
    if (smaller(tree, v, s.heap[j], s.depth)) { break; }

    /* Exchange v with the smallest son */
    s.heap[k] = s.heap[j];
    k = j;

    /* And continue down the tree, setting j to the left son of k */
    j <<= 1;
  }
  s.heap[k] = v;
}


// inlined manually
// var SMALLEST = 1;

/* ===========================================================================
 * Send the block data compressed using the given Huffman trees
 */
function compress_block(s, ltree, dtree)
//    deflate_state *s;
//    const ct_data *ltree; /* literal tree */
//    const ct_data *dtree; /* distance tree */
{
  var dist;           /* distance of matched string */
  var lc;             /* match length or unmatched char (if dist == 0) */
  var lx = 0;         /* running index in l_buf */
  var code;           /* the code to send */
  var extra;          /* number of extra bits to send */

  if (s.last_lit !== 0) {
    do {
      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);
      lc = s.pending_buf[s.l_buf + lx];
      lx++;

      if (dist === 0) {
        send_code(s, lc, ltree); /* send a literal byte */
        //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
      } else {
        /* Here, lc is the match length - MIN_MATCH */
        code = _length_code[lc];
        send_code(s, code + LITERALS + 1, ltree); /* send the length code */
        extra = extra_lbits[code];
        if (extra !== 0) {
          lc -= base_length[code];
          send_bits(s, lc, extra);       /* send the extra length bits */
        }
        dist--; /* dist is now the match distance - 1 */
        code = d_code(dist);
        //Assert (code < D_CODES, "bad d_code");

        send_code(s, code, dtree);       /* send the distance code */
        extra = extra_dbits[code];
        if (extra !== 0) {
          dist -= base_dist[code];
          send_bits(s, dist, extra);   /* send the extra distance bits */
        }
      } /* literal or match pair ? */

      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
      //       "pendingBuf overflow");

    } while (lx < s.last_lit);
  }

  send_code(s, END_BLOCK, ltree);
}


/* ===========================================================================
 * Construct one Huffman tree and assigns the code bit strings and lengths.
 * Update the total bit length for the current block.
 * IN assertion: the field freq is set for all tree elements.
 * OUT assertions: the fields len and code are set to the optimal bit length
 *     and corresponding code. The length opt_len is updated; static_len is
 *     also updated if stree is not null. The field max_code is set.
 */
function build_tree(s, desc)
//    deflate_state *s;
//    tree_desc *desc; /* the tree descriptor */
{
  var tree     = desc.dyn_tree;
  var stree    = desc.stat_desc.static_tree;
  var has_stree = desc.stat_desc.has_stree;
  var elems    = desc.stat_desc.elems;
  var n, m;          /* iterate over heap elements */
  var max_code = -1; /* largest code with non zero frequency */
  var node;          /* new node being created */

  /* Construct the initial heap, with least frequent element in
   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
   * heap[0] is not used.
   */
  s.heap_len = 0;
  s.heap_max = HEAP_SIZE;

  for (n = 0; n < elems; n++) {
    if (tree[n * 2]/*.Freq*/ !== 0) {
      s.heap[++s.heap_len] = max_code = n;
      s.depth[n] = 0;

    } else {
      tree[n * 2 + 1]/*.Len*/ = 0;
    }
  }

  /* The pkzip format requires that at least one distance code exists,
   * and that at least one bit should be sent even if there is only one
   * possible code. So to avoid special checks later on we force at least
   * two codes of non zero frequency.
   */
  while (s.heap_len < 2) {
    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
    tree[node * 2]/*.Freq*/ = 1;
    s.depth[node] = 0;
    s.opt_len--;

    if (has_stree) {
      s.static_len -= stree[node * 2 + 1]/*.Len*/;
    }
    /* node is 0 or 1 so it does not have extra bits */
  }
  desc.max_code = max_code;

  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
   * establish sub-heaps of increasing lengths:
   */
  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }

  /* Construct the Huffman tree by repeatedly combining the least two
   * frequent nodes.
   */
  node = elems;              /* next internal node of the tree */
  do {
    //pqremove(s, tree, n);  /* n = node of least frequency */
    /*** pqremove ***/
    n = s.heap[1/*SMALLEST*/];
    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
    pqdownheap(s, tree, 1/*SMALLEST*/);
    /***/

    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */

    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
    s.heap[--s.heap_max] = m;

    /* Create a new node father of n and m */
    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;

    /* and insert the new node in the heap */
    s.heap[1/*SMALLEST*/] = node++;
    pqdownheap(s, tree, 1/*SMALLEST*/);

  } while (s.heap_len >= 2);

  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];

  /* At this point, the fields freq and dad are set. We can now
   * generate the bit lengths.
   */
  gen_bitlen(s, desc);

  /* The field len is now set, we can generate the bit codes */
  gen_codes(tree, max_code, s.bl_count);
}


/* ===========================================================================
 * Scan a literal or distance tree to determine the frequencies of the codes
 * in the bit length tree.
 */
function scan_tree(s, tree, max_code)
//    deflate_state *s;
//    ct_data *tree;   /* the tree to be scanned */
//    int max_code;    /* and its largest code of non zero frequency */
{
  var n;                     /* iterates over all tree elements */
  var prevlen = -1;          /* last emitted length */
  var curlen;                /* length of current code */

  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */

  var count = 0;             /* repeat count of the current code */
  var max_count = 7;         /* max repeat count */
  var min_count = 4;         /* min repeat count */

  if (nextlen === 0) {
    max_count = 138;
    min_count = 3;
  }
  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */

  for (n = 0; n <= max_code; n++) {
    curlen = nextlen;
    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;

    if (++count < max_count && curlen === nextlen) {
      continue;

    } else if (count < min_count) {
      s.bl_tree[curlen * 2]/*.Freq*/ += count;

    } else if (curlen !== 0) {

      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;

    } else if (count <= 10) {
      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;

    } else {
      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;
    }

    count = 0;
    prevlen = curlen;

    if (nextlen === 0) {
      max_count = 138;
      min_count = 3;

    } else if (curlen === nextlen) {
      max_count = 6;
      min_count = 3;

    } else {
      max_count = 7;
      min_count = 4;
    }
  }
}


/* ===========================================================================
 * Send a literal or distance tree in compressed form, using the codes in
 * bl_tree.
 */
function send_tree(s, tree, max_code)
//    deflate_state *s;
//    ct_data *tree; /* the tree to be scanned */
//    int max_code;       /* and its largest code of non zero frequency */
{
  var n;                     /* iterates over all tree elements */
  var prevlen = -1;          /* last emitted length */
  var curlen;                /* length of current code */

  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */

  var count = 0;             /* repeat count of the current code */
  var max_count = 7;         /* max repeat count */
  var min_count = 4;         /* min repeat count */

  /* tree[max_code+1].Len = -1; */  /* guard already set */
  if (nextlen === 0) {
    max_count = 138;
    min_count = 3;
  }

  for (n = 0; n <= max_code; n++) {
    curlen = nextlen;
    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;

    if (++count < max_count && curlen === nextlen) {
      continue;

    } else if (count < min_count) {
      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);

    } else if (curlen !== 0) {
      if (curlen !== prevlen) {
        send_code(s, curlen, s.bl_tree);
        count--;
      }
      //Assert(count >= 3 && count <= 6, " 3_6?");
      send_code(s, REP_3_6, s.bl_tree);
      send_bits(s, count - 3, 2);

    } else if (count <= 10) {
      send_code(s, REPZ_3_10, s.bl_tree);
      send_bits(s, count - 3, 3);

    } else {
      send_code(s, REPZ_11_138, s.bl_tree);
      send_bits(s, count - 11, 7);
    }

    count = 0;
    prevlen = curlen;
    if (nextlen === 0) {
      max_count = 138;
      min_count = 3;

    } else if (curlen === nextlen) {
      max_count = 6;
      min_count = 3;

    } else {
      max_count = 7;
      min_count = 4;
    }
  }
}


/* ===========================================================================
 * Construct the Huffman tree for the bit lengths and return the index in
 * bl_order of the last bit length code to send.
 */
function build_bl_tree(s) {
  var max_blindex;  /* index of last bit length code of non zero freq */

  /* Determine the bit length frequencies for literal and distance trees */
  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);

  /* Build the bit length tree: */
  build_tree(s, s.bl_desc);
  /* opt_len now includes the length of the tree representations, except
   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
   */

  /* Determine the number of bit length codes to send. The pkzip format
   * requires that at least 4 bit length codes be sent. (appnote.txt says
   * 3 but the actual value used is 4.)
   */
  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {
      break;
    }
  }
  /* Update opt_len to include the bit length tree and counts */
  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
  //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
  //        s->opt_len, s->static_len));

  return max_blindex;
}


/* ===========================================================================
 * Send the header for a block using dynamic Huffman trees: the counts, the
 * lengths of the bit length codes, the literal tree and the distance tree.
 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
 */
function send_all_trees(s, lcodes, dcodes, blcodes)
//    deflate_state *s;
//    int lcodes, dcodes, blcodes; /* number of codes for each tree */
{
  var rank;                    /* index in bl_order */

  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
  //        "too many codes");
  //Tracev((stderr, "\nbl counts: "));
  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */
  send_bits(s, dcodes - 1,   5);
  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */
  for (rank = 0; rank < blcodes; rank++) {
    //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);
  }
  //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));

  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */
  //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));

  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */
  //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
}


/* ===========================================================================
 * Check if the data type is TEXT or BINARY, using the following algorithm:
 * - TEXT if the two conditions below are satisfied:
 *    a) There are no non-portable control characters belonging to the
 *       "black list" (0..6, 14..25, 28..31).
 *    b) There is at least one printable character belonging to the
 *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
 * - BINARY otherwise.
 * - The following partially-portable control characters form a
 *   "gray list" that is ignored in this detection algorithm:
 *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
 * IN assertion: the fields Freq of dyn_ltree are set.
 */
function detect_data_type(s) {
  /* black_mask is the bit mask of black-listed bytes
   * set bits 0..6, 14..25, and 28..31
   * 0xf3ffc07f = binary 11110011111111111100000001111111
   */
  var black_mask = 0xf3ffc07f;
  var n;

  /* Check for non-textual ("black-listed") bytes. */
  for (n = 0; n <= 31; n++, black_mask >>>= 1) {
    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {
      return Z_BINARY;
    }
  }

  /* Check for textual ("white-listed") bytes. */
  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
    return Z_TEXT;
  }
  for (n = 32; n < LITERALS; n++) {
    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
      return Z_TEXT;
    }
  }

  /* There are no "black-listed" or "white-listed" bytes:
   * this stream either is empty or has tolerated ("gray-listed") bytes only.
   */
  return Z_BINARY;
}


var static_init_done = false;

/* ===========================================================================
 * Initialize the tree data structures for a new zlib stream.
 */
function _tr_init(s)
{

  if (!static_init_done) {
    tr_static_init();
    static_init_done = true;
  }

  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);
  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);
  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);

  s.bi_buf = 0;
  s.bi_valid = 0;

  /* Initialize the first block of the first file: */
  init_block(s);
}


/* ===========================================================================
 * Send a stored block
 */
function _tr_stored_block(s, buf, stored_len, last)
//DeflateState *s;
//charf *buf;       /* input block */
//ulg stored_len;   /* length of input block */
//int last;         /* one if this is the last block for a file */
{
  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */
  copy_block(s, buf, stored_len, true); /* with header */
}


/* ===========================================================================
 * Send one empty static block to give enough lookahead for inflate.
 * This takes 10 bits, of which 7 may remain in the bit buffer.
 */
function _tr_align(s) {
  send_bits(s, STATIC_TREES << 1, 3);
  send_code(s, END_BLOCK, static_ltree);
  bi_flush(s);
}


/* ===========================================================================
 * Determine the best encoding for the current block: dynamic trees, static
 * trees or store, and output the encoded block to the zip file.
 */
function _tr_flush_block(s, buf, stored_len, last)
//DeflateState *s;
//charf *buf;       /* input block, or NULL if too old */
//ulg stored_len;   /* length of input block */
//int last;         /* one if this is the last block for a file */
{
  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */
  var max_blindex = 0;        /* index of last bit length code of non zero freq */

  /* Build the Huffman trees unless a stored block is forced */
  if (s.level > 0) {

    /* Check if the file is binary or text */
    if (s.strm.data_type === Z_UNKNOWN) {
      s.strm.data_type = detect_data_type(s);
    }

    /* Construct the literal and distance trees */
    build_tree(s, s.l_desc);
    // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
    //        s->static_len));

    build_tree(s, s.d_desc);
    // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
    //        s->static_len));
    /* At this point, opt_len and static_len are the total bit lengths of
     * the compressed block data, excluding the tree representations.
     */

    /* Build the bit length tree for the above two trees, and get the index
     * in bl_order of the last bit length code to send.
     */
    max_blindex = build_bl_tree(s);

    /* Determine the best encoding. Compute the block lengths in bytes. */
    opt_lenb = (s.opt_len + 3 + 7) >>> 3;
    static_lenb = (s.static_len + 3 + 7) >>> 3;

    // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
    //        s->last_lit));

    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }

  } else {
    // Assert(buf != (char*)0, "lost buf");
    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
  }

  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {
    /* 4: two words for the lengths */

    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
     * Otherwise we can't have processed more than WSIZE input bytes since
     * the last block flush, because compression would have been
     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
     * transform a block into a stored block.
     */
    _tr_stored_block(s, buf, stored_len, last);

  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {

    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
    compress_block(s, static_ltree, static_dtree);

  } else {
    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
    compress_block(s, s.dyn_ltree, s.dyn_dtree);
  }
  // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
  /* The above check is made mod 2^32, for files larger than 512 MB
   * and uLong implemented on 32 bits.
   */
  init_block(s);

  if (last) {
    bi_windup(s);
  }
  // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
  //       s->compressed_len-7*last));
}

/* ===========================================================================
 * Save the match info and tally the frequency counts. Return true if
 * the current block must be flushed.
 */
function _tr_tally(s, dist, lc)
//    deflate_state *s;
//    unsigned dist;  /* distance of matched string */
//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
{
  //var out_length, in_length, dcode;

  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;
  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;

  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
  s.last_lit++;

  if (dist === 0) {
    /* lc is the unmatched char */
    s.dyn_ltree[lc * 2]/*.Freq*/++;
  } else {
    s.matches++;
    /* Here, lc is the match length - MIN_MATCH */
    dist--;             /* dist = match distance - 1 */
    //Assert((ush)dist < (ush)MAX_DIST(s) &&
    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
    //       (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");

    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;
    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
  }

// (!) This block is disabled in zlib defaults,
// don't enable it for binary compatibility

//#ifdef TRUNCATE_BLOCK
//  /* Try to guess if it is profitable to stop the current block here */
//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
//    /* Compute an upper bound for the compressed length */
//    out_length = s.last_lit*8;
//    in_length = s.strstart - s.block_start;
//
//    for (dcode = 0; dcode < D_CODES; dcode++) {
//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
//    }
//    out_length >>>= 3;
//    //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
//    //       s->last_lit, in_length, out_length,
//    //       100L - out_length*100L/in_length));
//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
//      return true;
//    }
//  }
//#endif

  return (s.last_lit === s.lit_bufsize - 1);
  /* We avoid equality with lit_bufsize because of wraparound at 64K
   * on 16 bit machines and because stored blocks are restricted to
   * 64K-1 bytes.
   */
}

exports._tr_init  = _tr_init;
exports._tr_stored_block = _tr_stored_block;
exports._tr_flush_block  = _tr_flush_block;
exports._tr_tally = _tr_tally;
exports._tr_align = _tr_align;

},{"../utils/common":39}],49:[function(require,module,exports){
'use strict';

// (C) 1995-2013 Jean-loup Gailly and Mark Adler
// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
//   claim that you wrote the original software. If you use this software
//   in a product, an acknowledgment in the product documentation would be
//   appreciated but is not required.
// 2. Altered source versions must be plainly marked as such, and must not be
//   misrepresented as being the original software.
// 3. This notice may not be removed or altered from any source distribution.

function ZStream() {
  /* next input byte */
  this.input = null; // JS specific, because we have no pointers
  this.next_in = 0;
  /* number of bytes available at input */
  this.avail_in = 0;
  /* total number of input bytes read so far */
  this.total_in = 0;
  /* next output byte should be put there */
  this.output = null; // JS specific, because we have no pointers
  this.next_out = 0;
  /* remaining free space at output */
  this.avail_out = 0;
  /* total number of bytes output so far */
  this.total_out = 0;
  /* last error message, NULL if no error */
  this.msg = ''/*Z_NULL*/;
  /* not visible by applications */
  this.state = null;
  /* best guess about the data type: binary or text */
  this.data_type = 2/*Z_UNKNOWN*/;
  /* adler32 value of the uncompressed data */
  this.adler = 0;
}

module.exports = ZStream;

},{}],50:[function(require,module,exports){
(function (process){
'use strict';

if (!process.version ||
    process.version.indexOf('v0.') === 0 ||
    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
  module.exports = nextTick;
} else {
  module.exports = process.nextTick;
}

function nextTick(fn, arg1, arg2, arg3) {
  if (typeof fn !== 'function') {
    throw new TypeError('"callback" argument must be a function');
  }
  var len = arguments.length;
  var args, i;
  switch (len) {
  case 0:
  case 1:
    return process.nextTick(fn);
  case 2:
    return process.nextTick(function afterTickOne() {
      fn.call(null, arg1);
    });
  case 3:
    return process.nextTick(function afterTickTwo() {
      fn.call(null, arg1, arg2);
    });
  case 4:
    return process.nextTick(function afterTickThree() {
      fn.call(null, arg1, arg2, arg3);
    });
  default:
    args = new Array(len - 1);
    i = 0;
    while (i < args.length) {
      args[i++] = arguments[i];
    }
    return process.nextTick(function afterTick() {
      fn.apply(null, args);
    });
  }
}

}).call(this,require('_process'))
},{"_process":51}],51:[function(require,module,exports){
// shim for using process in browser
var process = module.exports = {};

// cached from whatever global is present so that test runners that stub it
// don't break things.  But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals.  It's inside a
// function because try/catches deoptimize in certain engines.

var cachedSetTimeout;
var cachedClearTimeout;

function defaultSetTimout() {
    throw new Error('setTimeout has not been defined');
}
function defaultClearTimeout () {
    throw new Error('clearTimeout has not been defined');
}
(function () {
    try {
        if (typeof setTimeout === 'function') {
            cachedSetTimeout = setTimeout;
        } else {
            cachedSetTimeout = defaultSetTimout;
        }
    } catch (e) {
        cachedSetTimeout = defaultSetTimout;
    }
    try {
        if (typeof clearTimeout === 'function') {
            cachedClearTimeout = clearTimeout;
        } else {
            cachedClearTimeout = defaultClearTimeout;
        }
    } catch (e) {
        cachedClearTimeout = defaultClearTimeout;
    }
} ())
function runTimeout(fun) {
    if (cachedSetTimeout === setTimeout) {
        //normal enviroments in sane situations
        return setTimeout(fun, 0);
    }
    // if setTimeout wasn't available but was latter defined
    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
        cachedSetTimeout = setTimeout;
        return setTimeout(fun, 0);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedSetTimeout(fun, 0);
    } catch(e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
            return cachedSetTimeout.call(null, fun, 0);
        } catch(e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
            return cachedSetTimeout.call(this, fun, 0);
        }
    }


}
function runClearTimeout(marker) {
    if (cachedClearTimeout === clearTimeout) {
        //normal enviroments in sane situations
        return clearTimeout(marker);
    }
    // if clearTimeout wasn't available but was latter defined
    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
        cachedClearTimeout = clearTimeout;
        return clearTimeout(marker);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedClearTimeout(marker);
    } catch (e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
            return cachedClearTimeout.call(null, marker);
        } catch (e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
            return cachedClearTimeout.call(this, marker);
        }
    }



}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;

function cleanUpNextTick() {
    if (!draining || !currentQueue) {
        return;
    }
    draining = false;
    if (currentQueue.length) {
        queue = currentQueue.concat(queue);
    } else {
        queueIndex = -1;
    }
    if (queue.length) {
        drainQueue();
    }
}

function drainQueue() {
    if (draining) {
        return;
    }
    var timeout = runTimeout(cleanUpNextTick);
    draining = true;

    var len = queue.length;
    while(len) {
        currentQueue = queue;
        queue = [];
        while (++queueIndex < len) {
            if (currentQueue) {
                currentQueue[queueIndex].run();
            }
        }
        queueIndex = -1;
        len = queue.length;
    }
    currentQueue = null;
    draining = false;
    runClearTimeout(timeout);
}

process.nextTick = function (fun) {
    var args = new Array(arguments.length - 1);
    if (arguments.length > 1) {
        for (var i = 1; i < arguments.length; i++) {
            args[i - 1] = arguments[i];
        }
    }
    queue.push(new Item(fun, args));
    if (queue.length === 1 && !draining) {
        runTimeout(drainQueue);
    }
};

// v8 likes predictible objects
function Item(fun, array) {
    this.fun = fun;
    this.array = array;
}
Item.prototype.run = function () {
    this.fun.apply(null, this.array);
};
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues
process.versions = {};

function noop() {}

process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;

process.listeners = function (name) { return [] }

process.binding = function (name) {
    throw new Error('process.binding is not supported');
};

process.cwd = function () { return '/' };
process.chdir = function (dir) {
    throw new Error('process.chdir is not supported');
};
process.umask = function() { return 0; };

},{}],52:[function(require,module,exports){
module.exports = require('./lib/_stream_duplex.js');

},{"./lib/_stream_duplex.js":53}],53:[function(require,module,exports){
// a duplex stream is just a stream that is both readable and writable.
// Since JS doesn't have multiple prototypal inheritance, this class
// prototypally inherits from Readable, and then parasitically from
// Writable.

'use strict';

/*<replacement>*/

var objectKeys = Object.keys || function (obj) {
  var keys = [];
  for (var key in obj) {
    keys.push(key);
  }return keys;
};
/*</replacement>*/

module.exports = Duplex;

/*<replacement>*/
var processNextTick = require('process-nextick-args');
/*</replacement>*/

/*<replacement>*/
var util = require('core-util-is');
util.inherits = require('inherits');
/*</replacement>*/

var Readable = require('./_stream_readable');
var Writable = require('./_stream_writable');

util.inherits(Duplex, Readable);

var keys = objectKeys(Writable.prototype);
for (var v = 0; v < keys.length; v++) {
  var method = keys[v];
  if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
}

function Duplex(options) {
  if (!(this instanceof Duplex)) return new Duplex(options);

  Readable.call(this, options);
  Writable.call(this, options);

  if (options && options.readable === false) this.readable = false;

  if (options && options.writable === false) this.writable = false;

  this.allowHalfOpen = true;
  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;

  this.once('end', onend);
}

// the no-half-open enforcer
function onend() {
  // if we allow half-open state, or if the writable side ended,
  // then we're ok.
  if (this.allowHalfOpen || this._writableState.ended) return;

  // no more data can be written.
  // But allow more writes to happen in this tick.
  processNextTick(onEndNT, this);
}

function onEndNT(self) {
  self.end();
}

function forEach(xs, f) {
  for (var i = 0, l = xs.length; i < l; i++) {
    f(xs[i], i);
  }
}
},{"./_stream_readable":55,"./_stream_writable":57,"core-util-is":33,"inherits":36,"process-nextick-args":50}],54:[function(require,module,exports){
// a passthrough stream.
// basically just the most minimal sort of Transform stream.
// Every written chunk gets output as-is.

'use strict';

module.exports = PassThrough;

var Transform = require('./_stream_transform');

/*<replacement>*/
var util = require('core-util-is');
util.inherits = require('inherits');
/*</replacement>*/

util.inherits(PassThrough, Transform);

function PassThrough(options) {
  if (!(this instanceof PassThrough)) return new PassThrough(options);

  Transform.call(this, options);
}

PassThrough.prototype._transform = function (chunk, encoding, cb) {
  cb(null, chunk);
};
},{"./_stream_transform":56,"core-util-is":33,"inherits":36}],55:[function(require,module,exports){
(function (process){
'use strict';

module.exports = Readable;

/*<replacement>*/
var processNextTick = require('process-nextick-args');
/*</replacement>*/

/*<replacement>*/
var isArray = require('isarray');
/*</replacement>*/

/*<replacement>*/
var Duplex;
/*</replacement>*/

Readable.ReadableState = ReadableState;

/*<replacement>*/
var EE = require('events').EventEmitter;

var EElistenerCount = function (emitter, type) {
  return emitter.listeners(type).length;
};
/*</replacement>*/

/*<replacement>*/
var Stream = require('./internal/streams/stream');
/*</replacement>*/

var Buffer = require('buffer').Buffer;
/*<replacement>*/
var bufferShim = require('buffer-shims');
/*</replacement>*/

/*<replacement>*/
var util = require('core-util-is');
util.inherits = require('inherits');
/*</replacement>*/

/*<replacement>*/
var debugUtil = require('util');
var debug = void 0;
if (debugUtil && debugUtil.debuglog) {
  debug = debugUtil.debuglog('stream');
} else {
  debug = function () {};
}
/*</replacement>*/

var BufferList = require('./internal/streams/BufferList');
var StringDecoder;

util.inherits(Readable, Stream);

var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];

function prependListener(emitter, event, fn) {
  // Sadly this is not cacheable as some libraries bundle their own
  // event emitter implementation with them.
  if (typeof emitter.prependListener === 'function') {
    return emitter.prependListener(event, fn);
  } else {
    // This is a hack to make sure that our error handler is attached before any
    // userland ones.  NEVER DO THIS. This is here only because this code needs
    // to continue to work with older versions of Node.js that do not include
    // the prependListener() method. The goal is to eventually remove this hack.
    if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
  }
}

function ReadableState(options, stream) {
  Duplex = Duplex || require('./_stream_duplex');

  options = options || {};

  // object stream flag. Used to make read(n) ignore n and to
  // make all the buffer merging and length checks go away
  this.objectMode = !!options.objectMode;

  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;

  // the point at which it stops calling _read() to fill the buffer
  // Note: 0 is a valid value, means "don't call _read preemptively ever"
  var hwm = options.highWaterMark;
  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;

  // cast to ints.
  this.highWaterMark = ~~this.highWaterMark;

  // A linked list is used to store data chunks instead of an array because the
  // linked list can remove elements from the beginning faster than
  // array.shift()
  this.buffer = new BufferList();
  this.length = 0;
  this.pipes = null;
  this.pipesCount = 0;
  this.flowing = null;
  this.ended = false;
  this.endEmitted = false;
  this.reading = false;

  // a flag to be able to tell if the onwrite cb is called immediately,
  // or on a later tick.  We set this to true at first, because any
  // actions that shouldn't happen until "later" should generally also
  // not happen before the first write call.
  this.sync = true;

  // whenever we return null, then we set a flag to say
  // that we're awaiting a 'readable' event emission.
  this.needReadable = false;
  this.emittedReadable = false;
  this.readableListening = false;
  this.resumeScheduled = false;

  // Crypto is kind of old and crusty.  Historically, its default string
  // encoding is 'binary' so we have to make this configurable.
  // Everything else in the universe uses 'utf8', though.
  this.defaultEncoding = options.defaultEncoding || 'utf8';

  // when piping, we only care about 'readable' events that happen
  // after read()ing all the bytes and not getting any pushback.
  this.ranOut = false;

  // the number of writers that are awaiting a drain event in .pipe()s
  this.awaitDrain = 0;

  // if true, a maybeReadMore has been scheduled
  this.readingMore = false;

  this.decoder = null;
  this.encoding = null;
  if (options.encoding) {
    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
    this.decoder = new StringDecoder(options.encoding);
    this.encoding = options.encoding;
  }
}

function Readable(options) {
  Duplex = Duplex || require('./_stream_duplex');

  if (!(this instanceof Readable)) return new Readable(options);

  this._readableState = new ReadableState(options, this);

  // legacy
  this.readable = true;

  if (options && typeof options.read === 'function') this._read = options.read;

  Stream.call(this);
}

// Manually shove something into the read() buffer.
// This returns true if the highWaterMark has not been hit yet,
// similar to how Writable.write() returns true if you should
// write() some more.
Readable.prototype.push = function (chunk, encoding) {
  var state = this._readableState;

  if (!state.objectMode && typeof chunk === 'string') {
    encoding = encoding || state.defaultEncoding;
    if (encoding !== state.encoding) {
      chunk = bufferShim.from(chunk, encoding);
      encoding = '';
    }
  }

  return readableAddChunk(this, state, chunk, encoding, false);
};

// Unshift should *always* be something directly out of read()
Readable.prototype.unshift = function (chunk) {
  var state = this._readableState;
  return readableAddChunk(this, state, chunk, '', true);
};

Readable.prototype.isPaused = function () {
  return this._readableState.flowing === false;
};

function readableAddChunk(stream, state, chunk, encoding, addToFront) {
  var er = chunkInvalid(state, chunk);
  if (er) {
    stream.emit('error', er);
  } else if (chunk === null) {
    state.reading = false;
    onEofChunk(stream, state);
  } else if (state.objectMode || chunk && chunk.length > 0) {
    if (state.ended && !addToFront) {
      var e = new Error('stream.push() after EOF');
      stream.emit('error', e);
    } else if (state.endEmitted && addToFront) {
      var _e = new Error('stream.unshift() after end event');
      stream.emit('error', _e);
    } else {
      var skipAdd;
      if (state.decoder && !addToFront && !encoding) {
        chunk = state.decoder.write(chunk);
        skipAdd = !state.objectMode && chunk.length === 0;
      }

      if (!addToFront) state.reading = false;

      // Don't add to the buffer if we've decoded to an empty string chunk and
      // we're not in object mode
      if (!skipAdd) {
        // if we want the data now, just emit it.
        if (state.flowing && state.length === 0 && !state.sync) {
          stream.emit('data', chunk);
          stream.read(0);
        } else {
          // update the buffer info.
          state.length += state.objectMode ? 1 : chunk.length;
          if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);

          if (state.needReadable) emitReadable(stream);
        }
      }

      maybeReadMore(stream, state);
    }
  } else if (!addToFront) {
    state.reading = false;
  }

  return needMoreData(state);
}

// if it's past the high water mark, we can push in some more.
// Also, if we have no data yet, we can stand some
// more bytes.  This is to work around cases where hwm=0,
// such as the repl.  Also, if the push() triggered a
// readable event, and the user called read(largeNumber) such that
// needReadable was set, then we ought to push more, so that another
// 'readable' event will be triggered.
function needMoreData(state) {
  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
}

// backwards compatibility.
Readable.prototype.setEncoding = function (enc) {
  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
  this._readableState.decoder = new StringDecoder(enc);
  this._readableState.encoding = enc;
  return this;
};

// Don't raise the hwm > 8MB
var MAX_HWM = 0x800000;
function computeNewHighWaterMark(n) {
  if (n >= MAX_HWM) {
    n = MAX_HWM;
  } else {
    // Get the next highest power of 2 to prevent increasing hwm excessively in
    // tiny amounts
    n--;
    n |= n >>> 1;
    n |= n >>> 2;
    n |= n >>> 4;
    n |= n >>> 8;
    n |= n >>> 16;
    n++;
  }
  return n;
}

// This function is designed to be inlinable, so please take care when making
// changes to the function body.
function howMuchToRead(n, state) {
  if (n <= 0 || state.length === 0 && state.ended) return 0;
  if (state.objectMode) return 1;
  if (n !== n) {
    // Only flow one buffer at a time
    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
  }
  // If we're asking for more than the current hwm, then raise the hwm.
  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
  if (n <= state.length) return n;
  // Don't have enough
  if (!state.ended) {
    state.needReadable = true;
    return 0;
  }
  return state.length;
}

// you can override either this method, or the async _read(n) below.
Readable.prototype.read = function (n) {
  debug('read', n);
  n = parseInt(n, 10);
  var state = this._readableState;
  var nOrig = n;

  if (n !== 0) state.emittedReadable = false;

  // if we're doing read(0) to trigger a readable event, but we
  // already have a bunch of data in the buffer, then just trigger
  // the 'readable' event and move on.
  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
    debug('read: emitReadable', state.length, state.ended);
    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
    return null;
  }

  n = howMuchToRead(n, state);

  // if we've ended, and we're now clear, then finish it up.
  if (n === 0 && state.ended) {
    if (state.length === 0) endReadable(this);
    return null;
  }

  // All the actual chunk generation logic needs to be
  // *below* the call to _read.  The reason is that in certain
  // synthetic stream cases, such as passthrough streams, _read
  // may be a completely synchronous operation which may change
  // the state of the read buffer, providing enough data when
  // before there was *not* enough.
  //
  // So, the steps are:
  // 1. Figure out what the state of things will be after we do
  // a read from the buffer.
  //
  // 2. If that resulting state will trigger a _read, then call _read.
  // Note that this may be asynchronous, or synchronous.  Yes, it is
  // deeply ugly to write APIs this way, but that still doesn't mean
  // that the Readable class should behave improperly, as streams are
  // designed to be sync/async agnostic.
  // Take note if the _read call is sync or async (ie, if the read call
  // has returned yet), so that we know whether or not it's safe to emit
  // 'readable' etc.
  //
  // 3. Actually pull the requested chunks out of the buffer and return.

  // if we need a readable event, then we need to do some reading.
  var doRead = state.needReadable;
  debug('need readable', doRead);

  // if we currently have less than the highWaterMark, then also read some
  if (state.length === 0 || state.length - n < state.highWaterMark) {
    doRead = true;
    debug('length less than watermark', doRead);
  }

  // however, if we've ended, then there's no point, and if we're already
  // reading, then it's unnecessary.
  if (state.ended || state.reading) {
    doRead = false;
    debug('reading or ended', doRead);
  } else if (doRead) {
    debug('do read');
    state.reading = true;
    state.sync = true;
    // if the length is currently zero, then we *need* a readable event.
    if (state.length === 0) state.needReadable = true;
    // call internal read method
    this._read(state.highWaterMark);
    state.sync = false;
    // If _read pushed data synchronously, then `reading` will be false,
    // and we need to re-evaluate how much data we can return to the user.
    if (!state.reading) n = howMuchToRead(nOrig, state);
  }

  var ret;
  if (n > 0) ret = fromList(n, state);else ret = null;

  if (ret === null) {
    state.needReadable = true;
    n = 0;
  } else {
    state.length -= n;
  }

  if (state.length === 0) {
    // If we have nothing in the buffer, then we want to know
    // as soon as we *do* get something into the buffer.
    if (!state.ended) state.needReadable = true;

    // If we tried to read() past the EOF, then emit end on the next tick.
    if (nOrig !== n && state.ended) endReadable(this);
  }

  if (ret !== null) this.emit('data', ret);

  return ret;
};

function chunkInvalid(state, chunk) {
  var er = null;
  if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
    er = new TypeError('Invalid non-string/buffer chunk');
  }
  return er;
}

function onEofChunk(stream, state) {
  if (state.ended) return;
  if (state.decoder) {
    var chunk = state.decoder.end();
    if (chunk && chunk.length) {
      state.buffer.push(chunk);
      state.length += state.objectMode ? 1 : chunk.length;
    }
  }
  state.ended = true;

  // emit 'readable' now to make sure it gets picked up.
  emitReadable(stream);
}

// Don't emit readable right away in sync mode, because this can trigger
// another read() call => stack overflow.  This way, it might trigger
// a nextTick recursion warning, but that's not so bad.
function emitReadable(stream) {
  var state = stream._readableState;
  state.needReadable = false;
  if (!state.emittedReadable) {
    debug('emitReadable', state.flowing);
    state.emittedReadable = true;
    if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
  }
}

function emitReadable_(stream) {
  debug('emit readable');
  stream.emit('readable');
  flow(stream);
}

// at this point, the user has presumably seen the 'readable' event,
// and called read() to consume some data.  that may have triggered
// in turn another _read(n) call, in which case reading = true if
// it's in progress.
// However, if we're not ended, or reading, and the length < hwm,
// then go ahead and try to read some more preemptively.
function maybeReadMore(stream, state) {
  if (!state.readingMore) {
    state.readingMore = true;
    processNextTick(maybeReadMore_, stream, state);
  }
}

function maybeReadMore_(stream, state) {
  var len = state.length;
  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
    debug('maybeReadMore read 0');
    stream.read(0);
    if (len === state.length)
      // didn't get any data, stop spinning.
      break;else len = state.length;
  }
  state.readingMore = false;
}

// abstract method.  to be overridden in specific implementation classes.
// call cb(er, data) where data is <= n in length.
// for virtual (non-string, non-buffer) streams, "length" is somewhat
// arbitrary, and perhaps not very meaningful.
Readable.prototype._read = function (n) {
  this.emit('error', new Error('_read() is not implemented'));
};

Readable.prototype.pipe = function (dest, pipeOpts) {
  var src = this;
  var state = this._readableState;

  switch (state.pipesCount) {
    case 0:
      state.pipes = dest;
      break;
    case 1:
      state.pipes = [state.pipes, dest];
      break;
    default:
      state.pipes.push(dest);
      break;
  }
  state.pipesCount += 1;
  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);

  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;

  var endFn = doEnd ? onend : cleanup;
  if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);

  dest.on('unpipe', onunpipe);
  function onunpipe(readable) {
    debug('onunpipe');
    if (readable === src) {
      cleanup();
    }
  }

  function onend() {
    debug('onend');
    dest.end();
  }

  // when the dest drains, it reduces the awaitDrain counter
  // on the source.  This would be more elegant with a .once()
  // handler in flow(), but adding and removing repeatedly is
  // too slow.
  var ondrain = pipeOnDrain(src);
  dest.on('drain', ondrain);

  var cleanedUp = false;
  function cleanup() {
    debug('cleanup');
    // cleanup event handlers once the pipe is broken
    dest.removeListener('close', onclose);
    dest.removeListener('finish', onfinish);
    dest.removeListener('drain', ondrain);
    dest.removeListener('error', onerror);
    dest.removeListener('unpipe', onunpipe);
    src.removeListener('end', onend);
    src.removeListener('end', cleanup);
    src.removeListener('data', ondata);

    cleanedUp = true;

    // if the reader is waiting for a drain event from this
    // specific writer, then it would cause it to never start
    // flowing again.
    // So, if this is awaiting a drain, then we just call it now.
    // If we don't know, then assume that we are waiting for one.
    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
  }

  // If the user pushes more data while we're writing to dest then we'll end up
  // in ondata again. However, we only want to increase awaitDrain once because
  // dest will only emit one 'drain' event for the multiple writes.
  // => Introduce a guard on increasing awaitDrain.
  var increasedAwaitDrain = false;
  src.on('data', ondata);
  function ondata(chunk) {
    debug('ondata');
    increasedAwaitDrain = false;
    var ret = dest.write(chunk);
    if (false === ret && !increasedAwaitDrain) {
      // If the user unpiped during `dest.write()`, it is possible
      // to get stuck in a permanently paused state if that write
      // also returned false.
      // => Check whether `dest` is still a piping destination.
      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
        debug('false write response, pause', src._readableState.awaitDrain);
        src._readableState.awaitDrain++;
        increasedAwaitDrain = true;
      }
      src.pause();
    }
  }

  // if the dest has an error, then stop piping into it.
  // however, don't suppress the throwing behavior for this.
  function onerror(er) {
    debug('onerror', er);
    unpipe();
    dest.removeListener('error', onerror);
    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
  }

  // Make sure our error handler is attached before userland ones.
  prependListener(dest, 'error', onerror);

  // Both close and finish should trigger unpipe, but only once.
  function onclose() {
    dest.removeListener('finish', onfinish);
    unpipe();
  }
  dest.once('close', onclose);
  function onfinish() {
    debug('onfinish');
    dest.removeListener('close', onclose);
    unpipe();
  }
  dest.once('finish', onfinish);

  function unpipe() {
    debug('unpipe');
    src.unpipe(dest);
  }

  // tell the dest that it's being piped to
  dest.emit('pipe', src);

  // start the flow if it hasn't been started already.
  if (!state.flowing) {
    debug('pipe resume');
    src.resume();
  }

  return dest;
};

function pipeOnDrain(src) {
  return function () {
    var state = src._readableState;
    debug('pipeOnDrain', state.awaitDrain);
    if (state.awaitDrain) state.awaitDrain--;
    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
      state.flowing = true;
      flow(src);
    }
  };
}

Readable.prototype.unpipe = function (dest) {
  var state = this._readableState;

  // if we're not piping anywhere, then do nothing.
  if (state.pipesCount === 0) return this;

  // just one destination.  most common case.
  if (state.pipesCount === 1) {
    // passed in one, but it's not the right one.
    if (dest && dest !== state.pipes) return this;

    if (!dest) dest = state.pipes;

    // got a match.
    state.pipes = null;
    state.pipesCount = 0;
    state.flowing = false;
    if (dest) dest.emit('unpipe', this);
    return this;
  }

  // slow case. multiple pipe destinations.

  if (!dest) {
    // remove all.
    var dests = state.pipes;
    var len = state.pipesCount;
    state.pipes = null;
    state.pipesCount = 0;
    state.flowing = false;

    for (var i = 0; i < len; i++) {
      dests[i].emit('unpipe', this);
    }return this;
  }

  // try to find the right one.
  var index = indexOf(state.pipes, dest);
  if (index === -1) return this;

  state.pipes.splice(index, 1);
  state.pipesCount -= 1;
  if (state.pipesCount === 1) state.pipes = state.pipes[0];

  dest.emit('unpipe', this);

  return this;
};

// set up data events if they are asked for
// Ensure readable listeners eventually get something
Readable.prototype.on = function (ev, fn) {
  var res = Stream.prototype.on.call(this, ev, fn);

  if (ev === 'data') {
    // Start flowing on next tick if stream isn't explicitly paused
    if (this._readableState.flowing !== false) this.resume();
  } else if (ev === 'readable') {
    var state = this._readableState;
    if (!state.endEmitted && !state.readableListening) {
      state.readableListening = state.needReadable = true;
      state.emittedReadable = false;
      if (!state.reading) {
        processNextTick(nReadingNextTick, this);
      } else if (state.length) {
        emitReadable(this, state);
      }
    }
  }

  return res;
};
Readable.prototype.addListener = Readable.prototype.on;

function nReadingNextTick(self) {
  debug('readable nexttick read 0');
  self.read(0);
}

// pause() and resume() are remnants of the legacy readable stream API
// If the user uses them, then switch into old mode.
Readable.prototype.resume = function () {
  var state = this._readableState;
  if (!state.flowing) {
    debug('resume');
    state.flowing = true;
    resume(this, state);
  }
  return this;
};

function resume(stream, state) {
  if (!state.resumeScheduled) {
    state.resumeScheduled = true;
    processNextTick(resume_, stream, state);
  }
}

function resume_(stream, state) {
  if (!state.reading) {
    debug('resume read 0');
    stream.read(0);
  }

  state.resumeScheduled = false;
  state.awaitDrain = 0;
  stream.emit('resume');
  flow(stream);
  if (state.flowing && !state.reading) stream.read(0);
}

Readable.prototype.pause = function () {
  debug('call pause flowing=%j', this._readableState.flowing);
  if (false !== this._readableState.flowing) {
    debug('pause');
    this._readableState.flowing = false;
    this.emit('pause');
  }
  return this;
};

function flow(stream) {
  var state = stream._readableState;
  debug('flow', state.flowing);
  while (state.flowing && stream.read() !== null) {}
}

// wrap an old-style stream as the async data source.
// This is *not* part of the readable stream interface.
// It is an ugly unfortunate mess of history.
Readable.prototype.wrap = function (stream) {
  var state = this._readableState;
  var paused = false;

  var self = this;
  stream.on('end', function () {
    debug('wrapped end');
    if (state.decoder && !state.ended) {
      var chunk = state.decoder.end();
      if (chunk && chunk.length) self.push(chunk);
    }

    self.push(null);
  });

  stream.on('data', function (chunk) {
    debug('wrapped data');
    if (state.decoder) chunk = state.decoder.write(chunk);

    // don't skip over falsy values in objectMode
    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;

    var ret = self.push(chunk);
    if (!ret) {
      paused = true;
      stream.pause();
    }
  });

  // proxy all the other methods.
  // important when wrapping filters and duplexes.
  for (var i in stream) {
    if (this[i] === undefined && typeof stream[i] === 'function') {
      this[i] = function (method) {
        return function () {
          return stream[method].apply(stream, arguments);
        };
      }(i);
    }
  }

  // proxy certain important events.
  for (var n = 0; n < kProxyEvents.length; n++) {
    stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
  }

  // when we try to consume some more bytes, simply unpause the
  // underlying stream.
  self._read = function (n) {
    debug('wrapped _read', n);
    if (paused) {
      paused = false;
      stream.resume();
    }
  };

  return self;
};

// exposed for testing purposes only.
Readable._fromList = fromList;

// Pluck off n bytes from an array of buffers.
// Length is the combined lengths of all the buffers in the list.
// This function is designed to be inlinable, so please take care when making
// changes to the function body.
function fromList(n, state) {
  // nothing buffered
  if (state.length === 0) return null;

  var ret;
  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
    // read it all, truncate the list
    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
    state.buffer.clear();
  } else {
    // read part of list
    ret = fromListPartial(n, state.buffer, state.decoder);
  }

  return ret;
}

// Extracts only enough buffered data to satisfy the amount requested.
// This function is designed to be inlinable, so please take care when making
// changes to the function body.
function fromListPartial(n, list, hasStrings) {
  var ret;
  if (n < list.head.data.length) {
    // slice is the same for buffers and strings
    ret = list.head.data.slice(0, n);
    list.head.data = list.head.data.slice(n);
  } else if (n === list.head.data.length) {
    // first chunk is a perfect match
    ret = list.shift();
  } else {
    // result spans more than one buffer
    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
  }
  return ret;
}

// Copies a specified amount of characters from the list of buffered data
// chunks.
// This function is designed to be inlinable, so please take care when making
// changes to the function body.
function copyFromBufferString(n, list) {
  var p = list.head;
  var c = 1;
  var ret = p.data;
  n -= ret.length;
  while (p = p.next) {
    var str = p.data;
    var nb = n > str.length ? str.length : n;
    if (nb === str.length) ret += str;else ret += str.slice(0, n);
    n -= nb;
    if (n === 0) {
      if (nb === str.length) {
        ++c;
        if (p.next) list.head = p.next;else list.head = list.tail = null;
      } else {
        list.head = p;
        p.data = str.slice(nb);
      }
      break;
    }
    ++c;
  }
  list.length -= c;
  return ret;
}

// Copies a specified amount of bytes from the list of buffered data chunks.
// This function is designed to be inlinable, so please take care when making
// changes to the function body.
function copyFromBuffer(n, list) {
  var ret = bufferShim.allocUnsafe(n);
  var p = list.head;
  var c = 1;
  p.data.copy(ret);
  n -= p.data.length;
  while (p = p.next) {
    var buf = p.data;
    var nb = n > buf.length ? buf.length : n;
    buf.copy(ret, ret.length - n, 0, nb);
    n -= nb;
    if (n === 0) {
      if (nb === buf.length) {
        ++c;
        if (p.next) list.head = p.next;else list.head = list.tail = null;
      } else {
        list.head = p;
        p.data = buf.slice(nb);
      }
      break;
    }
    ++c;
  }
  list.length -= c;
  return ret;
}

function endReadable(stream) {
  var state = stream._readableState;

  // If we get here before consuming all the bytes, then that is a
  // bug in node.  Should never happen.
  if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');

  if (!state.endEmitted) {
    state.ended = true;
    processNextTick(endReadableNT, state, stream);
  }
}

function endReadableNT(state, stream) {
  // Check that we didn't get one last unshift.
  if (!state.endEmitted && state.length === 0) {
    state.endEmitted = true;
    stream.readable = false;
    stream.emit('end');
  }
}

function forEach(xs, f) {
  for (var i = 0, l = xs.length; i < l; i++) {
    f(xs[i], i);
  }
}

function indexOf(xs, x) {
  for (var i = 0, l = xs.length; i < l; i++) {
    if (xs[i] === x) return i;
  }
  return -1;
}
}).call(this,require('_process'))
},{"./_stream_duplex":53,"./internal/streams/BufferList":58,"./internal/streams/stream":59,"_process":51,"buffer":32,"buffer-shims":31,"core-util-is":33,"events":34,"inherits":36,"isarray":38,"process-nextick-args":50,"string_decoder/":65,"util":28}],56:[function(require,module,exports){
// a transform stream is a readable/writable stream where you do
// something with the data.  Sometimes it's called a "filter",
// but that's not a great name for it, since that implies a thing where
// some bits pass through, and others are simply ignored.  (That would
// be a valid example of a transform, of course.)
//
// While the output is causally related to the input, it's not a
// necessarily symmetric or synchronous transformation.  For example,
// a zlib stream might take multiple plain-text writes(), and then
// emit a single compressed chunk some time in the future.
//
// Here's how this works:
//
// The Transform stream has all the aspects of the readable and writable
// stream classes.  When you write(chunk), that calls _write(chunk,cb)
// internally, and returns false if there's a lot of pending writes
// buffered up.  When you call read(), that calls _read(n) until
// there's enough pending readable data buffered up.
//
// In a transform stream, the written data is placed in a buffer.  When
// _read(n) is called, it transforms the queued up data, calling the
// buffered _write cb's as it consumes chunks.  If consuming a single
// written chunk would result in multiple output chunks, then the first
// outputted bit calls the readcb, and subsequent chunks just go into
// the read buffer, and will cause it to emit 'readable' if necessary.
//
// This way, back-pressure is actually determined by the reading side,
// since _read has to be called to start processing a new chunk.  However,
// a pathological inflate type of transform can cause excessive buffering
// here.  For example, imagine a stream where every byte of input is
// interpreted as an integer from 0-255, and then results in that many
// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
// 1kb of data being output.  In this case, you could write a very small
// amount of input, and end up with a very large amount of output.  In
// such a pathological inflating mechanism, there'd be no way to tell
// the system to stop doing the transform.  A single 4MB write could
// cause the system to run out of memory.
//
// However, even in such a pathological case, only a single written chunk
// would be consumed, and then the rest would wait (un-transformed) until
// the results of the previous transformed chunk were consumed.

'use strict';

module.exports = Transform;

var Duplex = require('./_stream_duplex');

/*<replacement>*/
var util = require('core-util-is');
util.inherits = require('inherits');
/*</replacement>*/

util.inherits(Transform, Duplex);

function TransformState(stream) {
  this.afterTransform = function (er, data) {
    return afterTransform(stream, er, data);
  };

  this.needTransform = false;
  this.transforming = false;
  this.writecb = null;
  this.writechunk = null;
  this.writeencoding = null;
}

function afterTransform(stream, er, data) {
  var ts = stream._transformState;
  ts.transforming = false;

  var cb = ts.writecb;

  if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));

  ts.writechunk = null;
  ts.writecb = null;

  if (data !== null && data !== undefined) stream.push(data);

  cb(er);

  var rs = stream._readableState;
  rs.reading = false;
  if (rs.needReadable || rs.length < rs.highWaterMark) {
    stream._read(rs.highWaterMark);
  }
}

function Transform(options) {
  if (!(this instanceof Transform)) return new Transform(options);

  Duplex.call(this, options);

  this._transformState = new TransformState(this);

  var stream = this;

  // start out asking for a readable event once data is transformed.
  this._readableState.needReadable = true;

  // we have implemented the _read method, and done the other things
  // that Readable wants before the first _read call, so unset the
  // sync guard flag.
  this._readableState.sync = false;

  if (options) {
    if (typeof options.transform === 'function') this._transform = options.transform;

    if (typeof options.flush === 'function') this._flush = options.flush;
  }

  // When the writable side finishes, then flush out anything remaining.
  this.once('prefinish', function () {
    if (typeof this._flush === 'function') this._flush(function (er, data) {
      done(stream, er, data);
    });else done(stream);
  });
}

Transform.prototype.push = function (chunk, encoding) {
  this._transformState.needTransform = false;
  return Duplex.prototype.push.call(this, chunk, encoding);
};

// This is the part where you do stuff!
// override this function in implementation classes.
// 'chunk' is an input chunk.
//
// Call `push(newChunk)` to pass along transformed output
// to the readable side.  You may call 'push' zero or more times.
//
// Call `cb(err)` when you are done with this chunk.  If you pass
// an error, then that'll put the hurt on the whole operation.  If you
// never call cb(), then you'll never get another chunk.
Transform.prototype._transform = function (chunk, encoding, cb) {
  throw new Error('_transform() is not implemented');
};

Transform.prototype._write = function (chunk, encoding, cb) {
  var ts = this._transformState;
  ts.writecb = cb;
  ts.writechunk = chunk;
  ts.writeencoding = encoding;
  if (!ts.transforming) {
    var rs = this._readableState;
    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
  }
};

// Doesn't matter what the args are here.
// _transform does all the work.
// That we got here means that the readable side wants more data.
Transform.prototype._read = function (n) {
  var ts = this._transformState;

  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
    ts.transforming = true;
    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
  } else {
    // mark that we need a transform, so that any data that comes in
    // will get processed, now that we've asked for it.
    ts.needTransform = true;
  }
};

function done(stream, er, data) {
  if (er) return stream.emit('error', er);

  if (data !== null && data !== undefined) stream.push(data);

  // if there's nothing in the write buffer, then that means
  // that nothing more will ever be provided
  var ws = stream._writableState;
  var ts = stream._transformState;

  if (ws.length) throw new Error('Calling transform done when ws.length != 0');

  if (ts.transforming) throw new Error('Calling transform done when still transforming');

  return stream.push(null);
}
},{"./_stream_duplex":53,"core-util-is":33,"inherits":36}],57:[function(require,module,exports){
(function (process,setImmediate){
// A bit simpler than readable streams.
// Implement an async ._write(chunk, encoding, cb), and it'll handle all
// the drain event emission and buffering.

'use strict';

module.exports = Writable;

/*<replacement>*/
var processNextTick = require('process-nextick-args');
/*</replacement>*/

/*<replacement>*/
var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
/*</replacement>*/

/*<replacement>*/
var Duplex;
/*</replacement>*/

Writable.WritableState = WritableState;

/*<replacement>*/
var util = require('core-util-is');
util.inherits = require('inherits');
/*</replacement>*/

/*<replacement>*/
var internalUtil = {
  deprecate: require('util-deprecate')
};
/*</replacement>*/

/*<replacement>*/
var Stream = require('./internal/streams/stream');
/*</replacement>*/

var Buffer = require('buffer').Buffer;
/*<replacement>*/
var bufferShim = require('buffer-shims');
/*</replacement>*/

util.inherits(Writable, Stream);

function nop() {}

function WriteReq(chunk, encoding, cb) {
  this.chunk = chunk;
  this.encoding = encoding;
  this.callback = cb;
  this.next = null;
}

function WritableState(options, stream) {
  Duplex = Duplex || require('./_stream_duplex');

  options = options || {};

  // object stream flag to indicate whether or not this stream
  // contains buffers or objects.
  this.objectMode = !!options.objectMode;

  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;

  // the point at which write() starts returning false
  // Note: 0 is a valid value, means that we always return false if
  // the entire buffer is not flushed immediately on write()
  var hwm = options.highWaterMark;
  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;

  // cast to ints.
  this.highWaterMark = ~~this.highWaterMark;

  // drain event flag.
  this.needDrain = false;
  // at the start of calling end()
  this.ending = false;
  // when end() has been called, and returned
  this.ended = false;
  // when 'finish' is emitted
  this.finished = false;

  // should we decode strings into buffers before passing to _write?
  // this is here so that some node-core streams can optimize string
  // handling at a lower level.
  var noDecode = options.decodeStrings === false;
  this.decodeStrings = !noDecode;

  // Crypto is kind of old and crusty.  Historically, its default string
  // encoding is 'binary' so we have to make this configurable.
  // Everything else in the universe uses 'utf8', though.
  this.defaultEncoding = options.defaultEncoding || 'utf8';

  // not an actual buffer we keep track of, but a measurement
  // of how much we're waiting to get pushed to some underlying
  // socket or file.
  this.length = 0;

  // a flag to see when we're in the middle of a write.
  this.writing = false;

  // when true all writes will be buffered until .uncork() call
  this.corked = 0;

  // a flag to be able to tell if the onwrite cb is called immediately,
  // or on a later tick.  We set this to true at first, because any
  // actions that shouldn't happen until "later" should generally also
  // not happen before the first write call.
  this.sync = true;

  // a flag to know if we're processing previously buffered items, which
  // may call the _write() callback in the same tick, so that we don't
  // end up in an overlapped onwrite situation.
  this.bufferProcessing = false;

  // the callback that's passed to _write(chunk,cb)
  this.onwrite = function (er) {
    onwrite(stream, er);
  };

  // the callback that the user supplies to write(chunk,encoding,cb)
  this.writecb = null;

  // the amount that is being written when _write is called.
  this.writelen = 0;

  this.bufferedRequest = null;
  this.lastBufferedRequest = null;

  // number of pending user-supplied write callbacks
  // this must be 0 before 'finish' can be emitted
  this.pendingcb = 0;

  // emit prefinish if the only thing we're waiting for is _write cbs
  // This is relevant for synchronous Transform streams
  this.prefinished = false;

  // True if the error was already emitted and should not be thrown again
  this.errorEmitted = false;

  // count buffered requests
  this.bufferedRequestCount = 0;

  // allocate the first CorkedRequest, there is always
  // one allocated and free to use, and we maintain at most two
  this.corkedRequestsFree = new CorkedRequest(this);
}

WritableState.prototype.getBuffer = function getBuffer() {
  var current = this.bufferedRequest;
  var out = [];
  while (current) {
    out.push(current);
    current = current.next;
  }
  return out;
};

(function () {
  try {
    Object.defineProperty(WritableState.prototype, 'buffer', {
      get: internalUtil.deprecate(function () {
        return this.getBuffer();
      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
    });
  } catch (_) {}
})();

// Test _writableState for inheritance to account for Duplex streams,
// whose prototype chain only points to Readable.
var realHasInstance;
if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
  realHasInstance = Function.prototype[Symbol.hasInstance];
  Object.defineProperty(Writable, Symbol.hasInstance, {
    value: function (object) {
      if (realHasInstance.call(this, object)) return true;

      return object && object._writableState instanceof WritableState;
    }
  });
} else {
  realHasInstance = function (object) {
    return object instanceof this;
  };
}

function Writable(options) {
  Duplex = Duplex || require('./_stream_duplex');

  // Writable ctor is applied to Duplexes, too.
  // `realHasInstance` is necessary because using plain `instanceof`
  // would return false, as no `_writableState` property is attached.

  // Trying to use the custom `instanceof` for Writable here will also break the
  // Node.js LazyTransform implementation, which has a non-trivial getter for
  // `_writableState` that would lead to infinite recursion.
  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
    return new Writable(options);
  }

  this._writableState = new WritableState(options, this);

  // legacy.
  this.writable = true;

  if (options) {
    if (typeof options.write === 'function') this._write = options.write;

    if (typeof options.writev === 'function') this._writev = options.writev;
  }

  Stream.call(this);
}

// Otherwise people can pipe Writable streams, which is just wrong.
Writable.prototype.pipe = function () {
  this.emit('error', new Error('Cannot pipe, not readable'));
};

function writeAfterEnd(stream, cb) {
  var er = new Error('write after end');
  // TODO: defer error events consistently everywhere, not just the cb
  stream.emit('error', er);
  processNextTick(cb, er);
}

// Checks that a user-supplied chunk is valid, especially for the particular
// mode the stream is in. Currently this means that `null` is never accepted
// and undefined/non-string values are only allowed in object mode.
function validChunk(stream, state, chunk, cb) {
  var valid = true;
  var er = false;

  if (chunk === null) {
    er = new TypeError('May not write null values to stream');
  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
    er = new TypeError('Invalid non-string/buffer chunk');
  }
  if (er) {
    stream.emit('error', er);
    processNextTick(cb, er);
    valid = false;
  }
  return valid;
}

Writable.prototype.write = function (chunk, encoding, cb) {
  var state = this._writableState;
  var ret = false;
  var isBuf = Buffer.isBuffer(chunk);

  if (typeof encoding === 'function') {
    cb = encoding;
    encoding = null;
  }

  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;

  if (typeof cb !== 'function') cb = nop;

  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
    state.pendingcb++;
    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
  }

  return ret;
};

Writable.prototype.cork = function () {
  var state = this._writableState;

  state.corked++;
};

Writable.prototype.uncork = function () {
  var state = this._writableState;

  if (state.corked) {
    state.corked--;

    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
  }
};

Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
  // node::ParseEncoding() requires lower case.
  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
  this._writableState.defaultEncoding = encoding;
  return this;
};

function decodeChunk(state, chunk, encoding) {
  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
    chunk = bufferShim.from(chunk, encoding);
  }
  return chunk;
}

// if we're already writing something, then just put this
// in the queue, and wait our turn.  Otherwise, call _write
// If we return false, then we need a drain event, so set that flag.
function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
  if (!isBuf) {
    chunk = decodeChunk(state, chunk, encoding);
    if (Buffer.isBuffer(chunk)) encoding = 'buffer';
  }
  var len = state.objectMode ? 1 : chunk.length;

  state.length += len;

  var ret = state.length < state.highWaterMark;
  // we must ensure that previous needDrain will not be reset to false.
  if (!ret) state.needDrain = true;

  if (state.writing || state.corked) {
    var last = state.lastBufferedRequest;
    state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
    if (last) {
      last.next = state.lastBufferedRequest;
    } else {
      state.bufferedRequest = state.lastBufferedRequest;
    }
    state.bufferedRequestCount += 1;
  } else {
    doWrite(stream, state, false, len, chunk, encoding, cb);
  }

  return ret;
}

function doWrite(stream, state, writev, len, chunk, encoding, cb) {
  state.writelen = len;
  state.writecb = cb;
  state.writing = true;
  state.sync = true;
  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
  state.sync = false;
}

function onwriteError(stream, state, sync, er, cb) {
  --state.pendingcb;
  if (sync) processNextTick(cb, er);else cb(er);

  stream._writableState.errorEmitted = true;
  stream.emit('error', er);
}

function onwriteStateUpdate(state) {
  state.writing = false;
  state.writecb = null;
  state.length -= state.writelen;
  state.writelen = 0;
}

function onwrite(stream, er) {
  var state = stream._writableState;
  var sync = state.sync;
  var cb = state.writecb;

  onwriteStateUpdate(state);

  if (er) onwriteError(stream, state, sync, er, cb);else {
    // Check if we're actually ready to finish, but don't emit yet
    var finished = needFinish(state);

    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
      clearBuffer(stream, state);
    }

    if (sync) {
      /*<replacement>*/
      asyncWrite(afterWrite, stream, state, finished, cb);
      /*</replacement>*/
    } else {
      afterWrite(stream, state, finished, cb);
    }
  }
}

function afterWrite(stream, state, finished, cb) {
  if (!finished) onwriteDrain(stream, state);
  state.pendingcb--;
  cb();
  finishMaybe(stream, state);
}

// Must force callback to be called on nextTick, so that we don't
// emit 'drain' before the write() consumer gets the 'false' return
// value, and has a chance to attach a 'drain' listener.
function onwriteDrain(stream, state) {
  if (state.length === 0 && state.needDrain) {
    state.needDrain = false;
    stream.emit('drain');
  }
}

// if there's something in the buffer waiting, then process it
function clearBuffer(stream, state) {
  state.bufferProcessing = true;
  var entry = state.bufferedRequest;

  if (stream._writev && entry && entry.next) {
    // Fast case, write everything using _writev()
    var l = state.bufferedRequestCount;
    var buffer = new Array(l);
    var holder = state.corkedRequestsFree;
    holder.entry = entry;

    var count = 0;
    while (entry) {
      buffer[count] = entry;
      entry = entry.next;
      count += 1;
    }

    doWrite(stream, state, true, state.length, buffer, '', holder.finish);

    // doWrite is almost always async, defer these to save a bit of time
    // as the hot path ends with doWrite
    state.pendingcb++;
    state.lastBufferedRequest = null;
    if (holder.next) {
      state.corkedRequestsFree = holder.next;
      holder.next = null;
    } else {
      state.corkedRequestsFree = new CorkedRequest(state);
    }
  } else {
    // Slow case, write chunks one-by-one
    while (entry) {
      var chunk = entry.chunk;
      var encoding = entry.encoding;
      var cb = entry.callback;
      var len = state.objectMode ? 1 : chunk.length;

      doWrite(stream, state, false, len, chunk, encoding, cb);
      entry = entry.next;
      // if we didn't call the onwrite immediately, then
      // it means that we need to wait until it does.
      // also, that means that the chunk and cb are currently
      // being processed, so move the buffer counter past them.
      if (state.writing) {
        break;
      }
    }

    if (entry === null) state.lastBufferedRequest = null;
  }

  state.bufferedRequestCount = 0;
  state.bufferedRequest = entry;
  state.bufferProcessing = false;
}

Writable.prototype._write = function (chunk, encoding, cb) {
  cb(new Error('_write() is not implemented'));
};

Writable.prototype._writev = null;

Writable.prototype.end = function (chunk, encoding, cb) {
  var state = this._writableState;

  if (typeof chunk === 'function') {
    cb = chunk;
    chunk = null;
    encoding = null;
  } else if (typeof encoding === 'function') {
    cb = encoding;
    encoding = null;
  }

  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);

  // .end() fully uncorks
  if (state.corked) {
    state.corked = 1;
    this.uncork();
  }

  // ignore unnecessary end() calls.
  if (!state.ending && !state.finished) endWritable(this, state, cb);
};

function needFinish(state) {
  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
}

function prefinish(stream, state) {
  if (!state.prefinished) {
    state.prefinished = true;
    stream.emit('prefinish');
  }
}

function finishMaybe(stream, state) {
  var need = needFinish(state);
  if (need) {
    if (state.pendingcb === 0) {
      prefinish(stream, state);
      state.finished = true;
      stream.emit('finish');
    } else {
      prefinish(stream, state);
    }
  }
  return need;
}

function endWritable(stream, state, cb) {
  state.ending = true;
  finishMaybe(stream, state);
  if (cb) {
    if (state.finished) processNextTick(cb);else stream.once('finish', cb);
  }
  state.ended = true;
  stream.writable = false;
}

// It seems a linked list but it is not
// there will be only 2 of these for each stream
function CorkedRequest(state) {
  var _this = this;

  this.next = null;
  this.entry = null;
  this.finish = function (err) {
    var entry = _this.entry;
    _this.entry = null;
    while (entry) {
      var cb = entry.callback;
      state.pendingcb--;
      cb(err);
      entry = entry.next;
    }
    if (state.corkedRequestsFree) {
      state.corkedRequestsFree.next = _this;
    } else {
      state.corkedRequestsFree = _this;
    }
  };
}
}).call(this,require('_process'),require("timers").setImmediate)
},{"./_stream_duplex":53,"./internal/streams/stream":59,"_process":51,"buffer":32,"buffer-shims":31,"core-util-is":33,"inherits":36,"process-nextick-args":50,"timers":66,"util-deprecate":67}],58:[function(require,module,exports){
'use strict';

var Buffer = require('buffer').Buffer;
/*<replacement>*/
var bufferShim = require('buffer-shims');
/*</replacement>*/

module.exports = BufferList;

function BufferList() {
  this.head = null;
  this.tail = null;
  this.length = 0;
}

BufferList.prototype.push = function (v) {
  var entry = { data: v, next: null };
  if (this.length > 0) this.tail.next = entry;else this.head = entry;
  this.tail = entry;
  ++this.length;
};

BufferList.prototype.unshift = function (v) {
  var entry = { data: v, next: this.head };
  if (this.length === 0) this.tail = entry;
  this.head = entry;
  ++this.length;
};

BufferList.prototype.shift = function () {
  if (this.length === 0) return;
  var ret = this.head.data;
  if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
  --this.length;
  return ret;
};

BufferList.prototype.clear = function () {
  this.head = this.tail = null;
  this.length = 0;
};

BufferList.prototype.join = function (s) {
  if (this.length === 0) return '';
  var p = this.head;
  var ret = '' + p.data;
  while (p = p.next) {
    ret += s + p.data;
  }return ret;
};

BufferList.prototype.concat = function (n) {
  if (this.length === 0) return bufferShim.alloc(0);
  if (this.length === 1) return this.head.data;
  var ret = bufferShim.allocUnsafe(n >>> 0);
  var p = this.head;
  var i = 0;
  while (p) {
    p.data.copy(ret, i);
    i += p.data.length;
    p = p.next;
  }
  return ret;
};
},{"buffer":32,"buffer-shims":31}],59:[function(require,module,exports){
module.exports = require('events').EventEmitter;

},{"events":34}],60:[function(require,module,exports){
module.exports = require('./readable').PassThrough

},{"./readable":61}],61:[function(require,module,exports){
exports = module.exports = require('./lib/_stream_readable.js');
exports.Stream = exports;
exports.Readable = exports;
exports.Writable = require('./lib/_stream_writable.js');
exports.Duplex = require('./lib/_stream_duplex.js');
exports.Transform = require('./lib/_stream_transform.js');
exports.PassThrough = require('./lib/_stream_passthrough.js');

},{"./lib/_stream_duplex.js":53,"./lib/_stream_passthrough.js":54,"./lib/_stream_readable.js":55,"./lib/_stream_transform.js":56,"./lib/_stream_writable.js":57}],62:[function(require,module,exports){
module.exports = require('./readable').Transform

},{"./readable":61}],63:[function(require,module,exports){
module.exports = require('./lib/_stream_writable.js');

},{"./lib/_stream_writable.js":57}],64:[function(require,module,exports){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

module.exports = Stream;

var EE = require('events').EventEmitter;
var inherits = require('inherits');

inherits(Stream, EE);
Stream.Readable = require('readable-stream/readable.js');
Stream.Writable = require('readable-stream/writable.js');
Stream.Duplex = require('readable-stream/duplex.js');
Stream.Transform = require('readable-stream/transform.js');
Stream.PassThrough = require('readable-stream/passthrough.js');

// Backwards-compat with node 0.4.x
Stream.Stream = Stream;



// old-style streams.  Note that the pipe method (the only relevant
// part of this class) is overridden in the Readable class.

function Stream() {
  EE.call(this);
}

Stream.prototype.pipe = function(dest, options) {
  var source = this;

  function ondata(chunk) {
    if (dest.writable) {
      if (false === dest.write(chunk) && source.pause) {
        source.pause();
      }
    }
  }

  source.on('data', ondata);

  function ondrain() {
    if (source.readable && source.resume) {
      source.resume();
    }
  }

  dest.on('drain', ondrain);

  // If the 'end' option is not supplied, dest.end() will be called when
  // source gets the 'end' or 'close' events.  Only dest.end() once.
  if (!dest._isStdio && (!options || options.end !== false)) {
    source.on('end', onend);
    source.on('close', onclose);
  }

  var didOnEnd = false;
  function onend() {
    if (didOnEnd) return;
    didOnEnd = true;

    dest.end();
  }


  function onclose() {
    if (didOnEnd) return;
    didOnEnd = true;

    if (typeof dest.destroy === 'function') dest.destroy();
  }

  // don't leave dangling pipes when there are errors.
  function onerror(er) {
    cleanup();
    if (EE.listenerCount(this, 'error') === 0) {
      throw er; // Unhandled stream error in pipe.
    }
  }

  source.on('error', onerror);
  dest.on('error', onerror);

  // remove all the event listeners that were added.
  function cleanup() {
    source.removeListener('data', ondata);
    dest.removeListener('drain', ondrain);

    source.removeListener('end', onend);
    source.removeListener('close', onclose);

    source.removeListener('error', onerror);
    dest.removeListener('error', onerror);

    source.removeListener('end', cleanup);
    source.removeListener('close', cleanup);

    dest.removeListener('close', cleanup);
  }

  source.on('end', cleanup);
  source.on('close', cleanup);

  dest.on('close', cleanup);

  dest.emit('pipe', source);

  // Allow for unix-like usage: A.pipe(B).pipe(C)
  return dest;
};

},{"events":34,"inherits":36,"readable-stream/duplex.js":52,"readable-stream/passthrough.js":60,"readable-stream/readable.js":61,"readable-stream/transform.js":62,"readable-stream/writable.js":63}],65:[function(require,module,exports){
'use strict';

var Buffer = require('buffer').Buffer;
var bufferShim = require('buffer-shims');

var isEncoding = Buffer.isEncoding || function (encoding) {
  encoding = '' + encoding;
  switch (encoding && encoding.toLowerCase()) {
    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
      return true;
    default:
      return false;
  }
};

function _normalizeEncoding(enc) {
  if (!enc) return 'utf8';
  var retried;
  while (true) {
    switch (enc) {
      case 'utf8':
      case 'utf-8':
        return 'utf8';
      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return 'utf16le';
      case 'latin1':
      case 'binary':
        return 'latin1';
      case 'base64':
      case 'ascii':
      case 'hex':
        return enc;
      default:
        if (retried) return; // undefined
        enc = ('' + enc).toLowerCase();
        retried = true;
    }
  }
};

// Do not cache `Buffer.isEncoding` when checking encoding names as some
// modules monkey-patch it to support additional encodings
function normalizeEncoding(enc) {
  var nenc = _normalizeEncoding(enc);
  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
  return nenc || enc;
}

// StringDecoder provides an interface for efficiently splitting a series of
// buffers into a series of JS strings without breaking apart multi-byte
// characters.
exports.StringDecoder = StringDecoder;
function StringDecoder(encoding) {
  this.encoding = normalizeEncoding(encoding);
  var nb;
  switch (this.encoding) {
    case 'utf16le':
      this.text = utf16Text;
      this.end = utf16End;
      nb = 4;
      break;
    case 'utf8':
      this.fillLast = utf8FillLast;
      nb = 4;
      break;
    case 'base64':
      this.text = base64Text;
      this.end = base64End;
      nb = 3;
      break;
    default:
      this.write = simpleWrite;
      this.end = simpleEnd;
      return;
  }
  this.lastNeed = 0;
  this.lastTotal = 0;
  this.lastChar = bufferShim.allocUnsafe(nb);
}

StringDecoder.prototype.write = function (buf) {
  if (buf.length === 0) return '';
  var r;
  var i;
  if (this.lastNeed) {
    r = this.fillLast(buf);
    if (r === undefined) return '';
    i = this.lastNeed;
    this.lastNeed = 0;
  } else {
    i = 0;
  }
  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
  return r || '';
};

StringDecoder.prototype.end = utf8End;

// Returns only complete characters in a Buffer
StringDecoder.prototype.text = utf8Text;

// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
StringDecoder.prototype.fillLast = function (buf) {
  if (this.lastNeed <= buf.length) {
    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
  }
  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
  this.lastNeed -= buf.length;
};

// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
// continuation byte.
function utf8CheckByte(byte) {
  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
  return -1;
}

// Checks at most 3 bytes at the end of a Buffer in order to detect an
// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
// needed to complete the UTF-8 character (if applicable) are returned.
function utf8CheckIncomplete(self, buf, i) {
  var j = buf.length - 1;
  if (j < i) return 0;
  var nb = utf8CheckByte(buf[j]);
  if (nb >= 0) {
    if (nb > 0) self.lastNeed = nb - 1;
    return nb;
  }
  if (--j < i) return 0;
  nb = utf8CheckByte(buf[j]);
  if (nb >= 0) {
    if (nb > 0) self.lastNeed = nb - 2;
    return nb;
  }
  if (--j < i) return 0;
  nb = utf8CheckByte(buf[j]);
  if (nb >= 0) {
    if (nb > 0) {
      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
    }
    return nb;
  }
  return 0;
}

// Validates as many continuation bytes for a multi-byte UTF-8 character as
// needed or are available. If we see a non-continuation byte where we expect
// one, we "replace" the validated continuation bytes we've seen so far with
// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
// behavior. The continuation byte check is included three times in the case
// where all of the continuation bytes for a character exist in the same buffer.
// It is also done this way as a slight performance increase instead of using a
// loop.
function utf8CheckExtraBytes(self, buf, p) {
  if ((buf[0] & 0xC0) !== 0x80) {
    self.lastNeed = 0;
    return '\ufffd'.repeat(p);
  }
  if (self.lastNeed > 1 && buf.length > 1) {
    if ((buf[1] & 0xC0) !== 0x80) {
      self.lastNeed = 1;
      return '\ufffd'.repeat(p + 1);
    }
    if (self.lastNeed > 2 && buf.length > 2) {
      if ((buf[2] & 0xC0) !== 0x80) {
        self.lastNeed = 2;
        return '\ufffd'.repeat(p + 2);
      }
    }
  }
}

// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
function utf8FillLast(buf) {
  var p = this.lastTotal - this.lastNeed;
  var r = utf8CheckExtraBytes(this, buf, p);
  if (r !== undefined) return r;
  if (this.lastNeed <= buf.length) {
    buf.copy(this.lastChar, p, 0, this.lastNeed);
    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
  }
  buf.copy(this.lastChar, p, 0, buf.length);
  this.lastNeed -= buf.length;
}

// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
// partial character, the character's bytes are buffered until the required
// number of bytes are available.
function utf8Text(buf, i) {
  var total = utf8CheckIncomplete(this, buf, i);
  if (!this.lastNeed) return buf.toString('utf8', i);
  this.lastTotal = total;
  var end = buf.length - (total - this.lastNeed);
  buf.copy(this.lastChar, 0, end);
  return buf.toString('utf8', i, end);
}

// For UTF-8, a replacement character for each buffered byte of a (partial)
// character needs to be added to the output.
function utf8End(buf) {
  var r = buf && buf.length ? this.write(buf) : '';
  if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
  return r;
}

// UTF-16LE typically needs two bytes per character, but even if we have an even
// number of bytes available, we need to check if we end on a leading/high
// surrogate. In that case, we need to wait for the next two bytes in order to
// decode the last character properly.
function utf16Text(buf, i) {
  if ((buf.length - i) % 2 === 0) {
    var r = buf.toString('utf16le', i);
    if (r) {
      var c = r.charCodeAt(r.length - 1);
      if (c >= 0xD800 && c <= 0xDBFF) {
        this.lastNeed = 2;
        this.lastTotal = 4;
        this.lastChar[0] = buf[buf.length - 2];
        this.lastChar[1] = buf[buf.length - 1];
        return r.slice(0, -1);
      }
    }
    return r;
  }
  this.lastNeed = 1;
  this.lastTotal = 2;
  this.lastChar[0] = buf[buf.length - 1];
  return buf.toString('utf16le', i, buf.length - 1);
}

// For UTF-16LE we do not explicitly append special replacement characters if we
// end on a partial character, we simply let v8 handle that.
function utf16End(buf) {
  var r = buf && buf.length ? this.write(buf) : '';
  if (this.lastNeed) {
    var end = this.lastTotal - this.lastNeed;
    return r + this.lastChar.toString('utf16le', 0, end);
  }
  return r;
}

function base64Text(buf, i) {
  var n = (buf.length - i) % 3;
  if (n === 0) return buf.toString('base64', i);
  this.lastNeed = 3 - n;
  this.lastTotal = 3;
  if (n === 1) {
    this.lastChar[0] = buf[buf.length - 1];
  } else {
    this.lastChar[0] = buf[buf.length - 2];
    this.lastChar[1] = buf[buf.length - 1];
  }
  return buf.toString('base64', i, buf.length - n);
}

function base64End(buf) {
  var r = buf && buf.length ? this.write(buf) : '';
  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
  return r;
}

// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
function simpleWrite(buf) {
  return buf.toString(this.encoding);
}

function simpleEnd(buf) {
  return buf && buf.length ? this.write(buf) : '';
}
},{"buffer":32,"buffer-shims":31}],66:[function(require,module,exports){
(function (setImmediate,clearImmediate){
var nextTick = require('process/browser.js').nextTick;
var apply = Function.prototype.apply;
var slice = Array.prototype.slice;
var immediateIds = {};
var nextImmediateId = 0;

// DOM APIs, for completeness

exports.setTimeout = function() {
  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);
};
exports.setInterval = function() {
  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);
};
exports.clearTimeout =
exports.clearInterval = function(timeout) { timeout.close(); };

function Timeout(id, clearFn) {
  this._id = id;
  this._clearFn = clearFn;
}
Timeout.prototype.unref = Timeout.prototype.ref = function() {};
Timeout.prototype.close = function() {
  this._clearFn.call(window, this._id);
};

// Does not start the time, just sets up the members needed.
exports.enroll = function(item, msecs) {
  clearTimeout(item._idleTimeoutId);
  item._idleTimeout = msecs;
};

exports.unenroll = function(item) {
  clearTimeout(item._idleTimeoutId);
  item._idleTimeout = -1;
};

exports._unrefActive = exports.active = function(item) {
  clearTimeout(item._idleTimeoutId);

  var msecs = item._idleTimeout;
  if (msecs >= 0) {
    item._idleTimeoutId = setTimeout(function onTimeout() {
      if (item._onTimeout)
        item._onTimeout();
    }, msecs);
  }
};

// That's not how node.js implements it but the exposed api is the same.
exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) {
  var id = nextImmediateId++;
  var args = arguments.length < 2 ? false : slice.call(arguments, 1);

  immediateIds[id] = true;

  nextTick(function onNextTick() {
    if (immediateIds[id]) {
      // fn.call() is faster so we optimize for the common use-case
      // @see http://jsperf.com/call-apply-segu
      if (args) {
        fn.apply(null, args);
      } else {
        fn.call(null);
      }
      // Prevent ids from leaking
      exports.clearImmediate(id);
    }
  });

  return id;
};

exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) {
  delete immediateIds[id];
};
}).call(this,require("timers").setImmediate,require("timers").clearImmediate)
},{"process/browser.js":51,"timers":66}],67:[function(require,module,exports){
(function (global){

/**
 * Module exports.
 */

module.exports = deprecate;

/**
 * Mark that a method should not be used.
 * Returns a modified function which warns once by default.
 *
 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
 *
 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
 * will throw an Error when invoked.
 *
 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
 * will invoke `console.trace()` instead of `console.error()`.
 *
 * @param {Function} fn - the function to deprecate
 * @param {String} msg - the string to print to the console when `fn` is invoked
 * @returns {Function} a new "deprecated" version of `fn`
 * @api public
 */

function deprecate (fn, msg) {
  if (config('noDeprecation')) {
    return fn;
  }

  var warned = false;
  function deprecated() {
    if (!warned) {
      if (config('throwDeprecation')) {
        throw new Error(msg);
      } else if (config('traceDeprecation')) {
        console.trace(msg);
      } else {
        console.warn(msg);
      }
      warned = true;
    }
    return fn.apply(this, arguments);
  }

  return deprecated;
}

/**
 * Checks `localStorage` for boolean values for the given `name`.
 *
 * @param {String} name
 * @returns {Boolean}
 * @api private
 */

function config (name) {
  // accessing global.localStorage can trigger a DOMException in sandboxed iframes
  try {
    if (!global.localStorage) return false;
  } catch (_) {
    return false;
  }
  var val = global.localStorage[name];
  if (null == val) return false;
  return String(val).toLowerCase() === 'true';
}

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}],68:[function(require,module,exports){
arguments[4][25][0].apply(exports,arguments)
},{"dup":25}],69:[function(require,module,exports){
arguments[4][26][0].apply(exports,arguments)
},{"./support/isBuffer":68,"_process":51,"dup":26,"inherits":36}]},{},[20])(20)
});
'use strict';

var interlaceUtils = require('./interlace');

var pixelBppMapper = [
  // 0 - dummy entry
  function() {},

  // 1 - L
  // 0: 0, 1: 0, 2: 0, 3: 0xff
  function(pxData, data, pxPos, rawPos) {
    if (rawPos === data.length) {
      throw new Error('Ran out of data');
    }

    var pixel = data[rawPos];
    pxData[pxPos] = pixel;
    pxData[pxPos + 1] = pixel;
    pxData[pxPos + 2] = pixel;
    pxData[pxPos + 3] = 0xff;
  },

  // 2 - LA
  // 0: 0, 1: 0, 2: 0, 3: 1
  function(pxData, data, pxPos, rawPos) {
    if (rawPos + 1 >= data.length) {
      throw new Error('Ran out of data');
    }

    var pixel = data[rawPos];
    pxData[pxPos] = pixel;
    pxData[pxPos + 1] = pixel;
    pxData[pxPos + 2] = pixel;
    pxData[pxPos + 3] = data[rawPos + 1];
  },

  // 3 - RGB
  // 0: 0, 1: 1, 2: 2, 3: 0xff
  function(pxData, data, pxPos, rawPos) {
    if (rawPos + 2 >= data.length) {
      throw new Error('Ran out of data');
    }

    pxData[pxPos] = data[rawPos];
    pxData[pxPos + 1] = data[rawPos + 1];
    pxData[pxPos + 2] = data[rawPos + 2];
    pxData[pxPos + 3] = 0xff;
  },

  // 4 - RGBA
  // 0: 0, 1: 1, 2: 2, 3: 3
  function(pxData, data, pxPos, rawPos) {
    if (rawPos + 3 >= data.length) {
      throw new Error('Ran out of data');
    }

    pxData[pxPos] = data[rawPos];
    pxData[pxPos + 1] = data[rawPos + 1];
    pxData[pxPos + 2] = data[rawPos + 2];
    pxData[pxPos + 3] = data[rawPos + 3];
  }
];

var pixelBppCustomMapper = [
  // 0 - dummy entry
  function() {},

  // 1 - L
  // 0: 0, 1: 0, 2: 0, 3: 0xff
  function(pxData, pixelData, pxPos, maxBit) {
    var pixel = pixelData[0];
    pxData[pxPos] = pixel;
    pxData[pxPos + 1] = pixel;
    pxData[pxPos + 2] = pixel;
    pxData[pxPos + 3] = maxBit;
  },

  // 2 - LA
  // 0: 0, 1: 0, 2: 0, 3: 1
  function(pxData, pixelData, pxPos) {
    var pixel = pixelData[0];
    pxData[pxPos] = pixel;
    pxData[pxPos + 1] = pixel;
    pxData[pxPos + 2] = pixel;
    pxData[pxPos + 3] = pixelData[1];
  },

  // 3 - RGB
  // 0: 0, 1: 1, 2: 2, 3: 0xff
  function(pxData, pixelData, pxPos, maxBit) {
    pxData[pxPos] = pixelData[0];
    pxData[pxPos + 1] = pixelData[1];
    pxData[pxPos + 2] = pixelData[2];
    pxData[pxPos + 3] = maxBit;
  },

  // 4 - RGBA
  // 0: 0, 1: 1, 2: 2, 3: 3
  function(pxData, pixelData, pxPos) {
    pxData[pxPos] = pixelData[0];
    pxData[pxPos + 1] = pixelData[1];
    pxData[pxPos + 2] = pixelData[2];
    pxData[pxPos + 3] = pixelData[3];
  }
];

function bitRetriever(data, depth) {

  var leftOver = [];
  var i = 0;

  function split() {
    if (i === data.length) {
      throw new Error('Ran out of data');
    }
    var byte = data[i];
    i++;
    var byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;
    switch (depth) {
      default:
        throw new Error('unrecognised depth');
      case 16:
        byte2 = data[i];
        i++;
        leftOver.push(((byte << 8) + byte2));
        break;
      case 4:
        byte2 = byte & 0x0f;
        byte1 = byte >> 4;
        leftOver.push(byte1, byte2);
        break;
      case 2:
        byte4 = byte & 3;
        byte3 = byte >> 2 & 3;
        byte2 = byte >> 4 & 3;
        byte1 = byte >> 6 & 3;
        leftOver.push(byte1, byte2, byte3, byte4);
        break;
      case 1:
        byte8 = byte & 1;
        byte7 = byte >> 1 & 1;
        byte6 = byte >> 2 & 1;
        byte5 = byte >> 3 & 1;
        byte4 = byte >> 4 & 1;
        byte3 = byte >> 5 & 1;
        byte2 = byte >> 6 & 1;
        byte1 = byte >> 7 & 1;
        leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);
        break;
    }
  }

  return {
    get: function(count) {
      while (leftOver.length < count) {
        split();
      }
      var returner = leftOver.slice(0, count);
      leftOver = leftOver.slice(count);
      return returner;
    },
    resetAfterLine: function() {
      leftOver.length = 0;
    },
    end: function() {
      if (i !== data.length) {
        throw new Error('extra data found');
      }
    }
  };
}

function mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) { // eslint-disable-line max-params
  var imageWidth = image.width;
  var imageHeight = image.height;
  var imagePass = image.index;
  for (var y = 0; y < imageHeight; y++) {
    for (var x = 0; x < imageWidth; x++) {
      var pxPos = getPxPos(x, y, imagePass);
      pixelBppMapper[bpp](pxData, data, pxPos, rawPos);
      rawPos += bpp; //eslint-disable-line no-param-reassign
    }
  }
  return rawPos;
}

function mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) { // eslint-disable-line max-params
  var imageWidth = image.width;
  var imageHeight = image.height;
  var imagePass = image.index;
  for (var y = 0; y < imageHeight; y++) {
    for (var x = 0; x < imageWidth; x++) {
      var pixelData = bits.get(bpp);
      var pxPos = getPxPos(x, y, imagePass);
      pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);
    }
    bits.resetAfterLine();
  }
}

exports.dataToBitMap = function(data, bitmapInfo) {

  var width = bitmapInfo.width;
  var height = bitmapInfo.height;
  var depth = bitmapInfo.depth;
  var bpp = bitmapInfo.bpp;
  var interlace = bitmapInfo.interlace;

  if (depth !== 8) {
    var bits = bitRetriever(data, depth);
  }
  var pxData;
  if (depth <= 8) {
    pxData = new Buffer(width * height * 4);
  }
  else {
    pxData = new Uint16Array(width * height * 4);
  }
  var maxBit = Math.pow(2, depth) - 1;
  var rawPos = 0;
  var images;
  var getPxPos;

  if (interlace) {
    images = interlaceUtils.getImagePasses(width, height);
    getPxPos = interlaceUtils.getInterlaceIterator(width, height);
  }
  else {
    var nonInterlacedPxPos = 0;
    getPxPos = function() {
      var returner = nonInterlacedPxPos;
      nonInterlacedPxPos += 4;
      return returner;
    };
    images = [{ width: width, height: height }];
  }

  for (var imageIndex = 0; imageIndex < images.length; imageIndex++) {
    if (depth === 8) {
      rawPos = mapImage8Bit(images[imageIndex], pxData, getPxPos, bpp, data, rawPos);
    }
    else {
      mapImageCustomBit(images[imageIndex], pxData, getPxPos, bpp, bits, maxBit);
    }
  }
  if (depth === 8) {
    if (rawPos !== data.length) {
      throw new Error('extra data found');
    }
  }
  else {
    bits.end();
  }

  return pxData;
};
'use strict';

var constants = require('./constants');

module.exports = function(dataIn, width, height, options) {
  var outHasAlpha = [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(options.colorType) !== -1;
  if (options.colorType === options.inputColorType) {
    var bigEndian = (function() {
      var buffer = new ArrayBuffer(2);
      new DataView(buffer).setInt16(0, 256, true /* littleEndian */);
      // Int16Array uses the platform's endianness.
      return new Int16Array(buffer)[0] !== 256;
    })();
    // If no need to convert to grayscale and alpha is present/absent in both, take a fast route
    if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {
      return dataIn;
    }
  }

  // map to a UInt16 array if data is 16bit, fix endianness below
  var data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);

  var maxValue = 255;
  var inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];
  if (inBpp === 4 && !options.inputHasAlpha) {
    inBpp = 3;
  }
  var outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];
  if (options.bitDepth === 16) {
    maxValue = 65535;
    outBpp *= 2;
  }
  var outData = new Buffer(width * height * outBpp);

  var inIndex = 0;
  var outIndex = 0;

  var bgColor = options.bgColor || {};
  if (bgColor.red === undefined) {
    bgColor.red = maxValue;
  }
  if (bgColor.green === undefined) {
    bgColor.green = maxValue;
  }
  if (bgColor.blue === undefined) {
    bgColor.blue = maxValue;
  }

  function getRGBA() {
    var red;
    var green;
    var blue;
    var alpha = maxValue;
    switch (options.inputColorType) {
      case constants.COLORTYPE_COLOR_ALPHA:
        alpha = data[inIndex + 3];
        red = data[inIndex];
        green = data[inIndex + 1];
        blue = data[inIndex + 2];
        break;
      case constants.COLORTYPE_COLOR:
        red = data[inIndex];
        green = data[inIndex + 1];
        blue = data[inIndex + 2];
        break;
      case constants.COLORTYPE_ALPHA:
        alpha = data[inIndex + 1];
        red = data[inIndex];
        green = red;
        blue = red;
        break;
      case constants.COLORTYPE_GRAYSCALE:
        red = data[inIndex];
        green = red;
        blue = red;
        break;
      default:
        throw new Error('input color type:' + options.inputColorType + ' is not supported at present');
    }

    if (options.inputHasAlpha) {
      if (!outHasAlpha) {
        alpha /= maxValue;
        red = Math.min(Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0), maxValue);
        green = Math.min(Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0), maxValue);
        blue = Math.min(Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0), maxValue);
      }
    }
    return { red: red, green: green, blue: blue, alpha: alpha };
  }

  for (var y = 0; y < height; y++) {
    for (var x = 0; x < width; x++) {
      var rgba = getRGBA(data, inIndex);

      switch (options.colorType) {
        case constants.COLORTYPE_COLOR_ALPHA:
        case constants.COLORTYPE_COLOR:
          if (options.bitDepth === 8) {
            outData[outIndex] = rgba.red;
            outData[outIndex + 1] = rgba.green;
            outData[outIndex + 2] = rgba.blue;
            if (outHasAlpha) {
              outData[outIndex + 3] = rgba.alpha;
            }
          }
          else {
            outData.writeUInt16BE(rgba.red, outIndex);
            outData.writeUInt16BE(rgba.green, outIndex + 2);
            outData.writeUInt16BE(rgba.blue, outIndex + 4);
            if (outHasAlpha) {
              outData.writeUInt16BE(rgba.alpha, outIndex + 6);
            }
          }
          break;
        case constants.COLORTYPE_ALPHA:
        case constants.COLORTYPE_GRAYSCALE:
          // Convert to grayscale and alpha
          var grayscale = (rgba.red + rgba.green + rgba.blue) / 3;
          if (options.bitDepth === 8) {
            outData[outIndex] = grayscale;
            if (outHasAlpha) {
              outData[outIndex + 1] = rgba.alpha;
            }
          }
          else {
            outData.writeUInt16BE(grayscale, outIndex);
            if (outHasAlpha) {
              outData.writeUInt16BE(rgba.alpha, outIndex + 2);
            }
          }
          break;
        default:
          throw new Error('unrecognised color Type ' + options.colorType);
      }

      inIndex += inBpp;
      outIndex += outBpp;
    }
  }

  return outData;
};
'use strict';


var util = require('util');
var Stream = require('stream');


var ChunkStream = module.exports = function() {
  Stream.call(this);

  this._buffers = [];
  this._buffered = 0;

  this._reads = [];
  this._paused = false;

  this._encoding = 'utf8';
  this.writable = true;
};
util.inherits(ChunkStream, Stream);


ChunkStream.prototype.read = function(length, callback) {

  this._reads.push({
    length: Math.abs(length), // if length < 0 then at most this length
    allowLess: length < 0,
    func: callback
  });

  process.nextTick(function() {
    this._process();

    // its paused and there is not enought data then ask for more
    if (this._paused && this._reads.length > 0) {
      this._paused = false;

      this.emit('drain');
    }
  }.bind(this));
};

ChunkStream.prototype.write = function(data, encoding) {

  if (!this.writable) {
    this.emit('error', new Error('Stream not writable'));
    return false;
  }

  var dataBuffer;
  if (Buffer.isBuffer(data)) {
    dataBuffer = data;
  }
  else {
    dataBuffer = new Buffer(data, encoding || this._encoding);
  }

  this._buffers.push(dataBuffer);
  this._buffered += dataBuffer.length;

  this._process();

  // ok if there are no more read requests
  if (this._reads && this._reads.length === 0) {
    this._paused = true;
  }

  return this.writable && !this._paused;
};

ChunkStream.prototype.end = function(data, encoding) {

  if (data) {
    this.write(data, encoding);
  }

  this.writable = false;

  // already destroyed
  if (!this._buffers) {
    return;
  }

  // enqueue or handle end
  if (this._buffers.length === 0) {
    this._end();
  }
  else {
    this._buffers.push(null);
    this._process();
  }
};

ChunkStream.prototype.destroySoon = ChunkStream.prototype.end;

ChunkStream.prototype._end = function() {

  if (this._reads.length > 0) {
    this.emit('error',
      new Error('Unexpected end of input')
    );
  }

  this.destroy();
};

ChunkStream.prototype.destroy = function() {

  if (!this._buffers) {
    return;
  }

  this.writable = false;
  this._reads = null;
  this._buffers = null;

  this.emit('close');
};

ChunkStream.prototype._processReadAllowingLess = function(read) {
  // ok there is any data so that we can satisfy this request
  this._reads.shift(); // == read

  // first we need to peek into first buffer
  var smallerBuf = this._buffers[0];

  // ok there is more data than we need
  if (smallerBuf.length > read.length) {

    this._buffered -= read.length;
    this._buffers[0] = smallerBuf.slice(read.length);

    read.func.call(this, smallerBuf.slice(0, read.length));

  }
  else {
    // ok this is less than maximum length so use it all
    this._buffered -= smallerBuf.length;
    this._buffers.shift(); // == smallerBuf

    read.func.call(this, smallerBuf);
  }
};

ChunkStream.prototype._processRead = function(read) {
  this._reads.shift(); // == read

  var pos = 0;
  var count = 0;
  var data = new Buffer(read.length);

  // create buffer for all data
  while (pos < read.length) {

    var buf = this._buffers[count++];
    var len = Math.min(buf.length, read.length - pos);

    buf.copy(data, pos, 0, len);
    pos += len;

    // last buffer wasn't used all so just slice it and leave
    if (len !== buf.length) {
      this._buffers[--count] = buf.slice(len);
    }
  }

  // remove all used buffers
  if (count > 0) {
    this._buffers.splice(0, count);
  }

  this._buffered -= read.length;

  read.func.call(this, data);
};

ChunkStream.prototype._process = function() {

  try {
    // as long as there is any data and read requests
    while (this._buffered > 0 && this._reads && this._reads.length > 0) {

      var read = this._reads[0];

      // read any data (but no more than length)
      if (read.allowLess) {
        this._processReadAllowingLess(read);

      }
      else if (this._buffered >= read.length) {
        // ok we can meet some expectations

        this._processRead(read);
      }
      else {
        // not enought data to satisfy first request in queue
        // so we need to wait for more
        break;
      }
    }

    if (this._buffers && !this.writable) {
      this._end();
    }
  }
  catch (ex) {
    this.emit('error', ex);
  }
};
'use strict';


module.exports = {

  PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],

  TYPE_IHDR: 0x49484452,
  TYPE_IEND: 0x49454e44,
  TYPE_IDAT: 0x49444154,
  TYPE_PLTE: 0x504c5445,
  TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase
  TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase

  // color-type bits
  COLORTYPE_GRAYSCALE: 0,
  COLORTYPE_PALETTE: 1,
  COLORTYPE_COLOR: 2,
  COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha

  // color-type combinations
  COLORTYPE_PALETTE_COLOR: 3,
  COLORTYPE_COLOR_ALPHA: 6,

  COLORTYPE_TO_BPP_MAP: {
    0: 1,
    2: 3,
    3: 1,
    4: 2,
    6: 4
  },

  GAMMA_DIVISION: 100000
};
'use strict';

var crcTable = [];

(function() {
  for (var i = 0; i < 256; i++) {
    var currentCrc = i;
    for (var j = 0; j < 8; j++) {
      if (currentCrc & 1) {
        currentCrc = 0xedb88320 ^ (currentCrc >>> 1);
      }
      else {
        currentCrc = currentCrc >>> 1;
      }
    }
    crcTable[i] = currentCrc;
  }
}());

var CrcCalculator = module.exports = function() {
  this._crc = -1;
};

CrcCalculator.prototype.write = function(data) {

  for (var i = 0; i < data.length; i++) {
    this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);
  }
  return true;
};

CrcCalculator.prototype.crc32 = function() {
  return this._crc ^ -1;
};


CrcCalculator.crc32 = function(buf) {

  var crc = -1;
  for (var i = 0; i < buf.length; i++) {
    crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);
  }
  return crc ^ -1;
};
'use strict';

var paethPredictor = require('./paeth-predictor');

function filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {

  for (var x = 0; x < byteWidth; x++) {
    rawData[rawPos + x] = pxData[pxPos + x];
  }
}

function filterSumNone(pxData, pxPos, byteWidth) {

  var sum = 0;
  var length = pxPos + byteWidth;

  for (var i = pxPos; i < length; i++) {
    sum += Math.abs(pxData[i]);
  }
  return sum;
}

function filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {

  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var val = pxData[pxPos + x] - left;

    rawData[rawPos + x] = val;
  }
}

function filterSumSub(pxData, pxPos, byteWidth, bpp) {

  var sum = 0;
  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var val = pxData[pxPos + x] - left;

    sum += Math.abs(val);
  }

  return sum;
}

function filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {

  for (var x = 0; x < byteWidth; x++) {

    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var val = pxData[pxPos + x] - up;

    rawData[rawPos + x] = val;
  }
}

function filterSumUp(pxData, pxPos, byteWidth) {

  var sum = 0;
  var length = pxPos + byteWidth;
  for (var x = pxPos; x < length; x++) {

    var up = pxPos > 0 ? pxData[x - byteWidth] : 0;
    var val = pxData[x] - up;

    sum += Math.abs(val);
  }

  return sum;
}

function filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {

  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var val = pxData[pxPos + x] - ((left + up) >> 1);

    rawData[rawPos + x] = val;
  }
}

function filterSumAvg(pxData, pxPos, byteWidth, bpp) {

  var sum = 0;
  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var val = pxData[pxPos + x] - ((left + up) >> 1);

    sum += Math.abs(val);
  }

  return sum;
}

function filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {

  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var upleft = pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;
    var val = pxData[pxPos + x] - paethPredictor(left, up, upleft);

    rawData[rawPos + x] = val;
  }
}

function filterSumPaeth(pxData, pxPos, byteWidth, bpp) {
  var sum = 0;
  for (var x = 0; x < byteWidth; x++) {

    var left = x >= bpp ? pxData[pxPos + x - bpp] : 0;
    var up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;
    var upleft = pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;
    var val = pxData[pxPos + x] - paethPredictor(left, up, upleft);

    sum += Math.abs(val);
  }

  return sum;
}

var filters = {
  0: filterNone,
  1: filterSub,
  2: filterUp,
  3: filterAvg,
  4: filterPaeth
};

var filterSums = {
  0: filterSumNone,
  1: filterSumSub,
  2: filterSumUp,
  3: filterSumAvg,
  4: filterSumPaeth
};

module.exports = function(pxData, width, height, options, bpp) {

  var filterTypes;
  if (!('filterType' in options) || options.filterType === -1) {
    filterTypes = [0, 1, 2, 3, 4];
  }
  else if (typeof options.filterType === 'number') {
    filterTypes = [options.filterType];
  }
  else {
    throw new Error('unrecognised filter types');
  }

  if (options.bitDepth === 16) {
    bpp *= 2;
  }
  var byteWidth = width * bpp;
  var rawPos = 0;
  var pxPos = 0;
  var rawData = new Buffer((byteWidth + 1) * height);

  var sel = filterTypes[0];

  for (var y = 0; y < height; y++) {

    if (filterTypes.length > 1) {
      // find best filter for this line (with lowest sum of values)
      var min = Infinity;

      for (var i = 0; i < filterTypes.length; i++) {
        var sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);
        if (sum < min) {
          sel = filterTypes[i];
          min = sum;
        }
      }
    }

    rawData[rawPos] = sel;
    rawPos++;
    filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);
    rawPos += byteWidth;
    pxPos += byteWidth;
  }
  return rawData;
};
'use strict';

var util = require('util');
var ChunkStream = require('./chunkstream');
var Filter = require('./filter-parse');


var FilterAsync = module.exports = function(bitmapInfo) {
  ChunkStream.call(this);

  var buffers = [];
  var that = this;
  this._filter = new Filter(bitmapInfo, {
    read: this.read.bind(this),
    write: function(buffer) {
      buffers.push(buffer);
    },
    complete: function() {
      that.emit('complete', Buffer.concat(buffers));
    }
  });

  this._filter.start();
};
util.inherits(FilterAsync, ChunkStream);
'use strict';

var SyncReader = require('./sync-reader');
var Filter = require('./filter-parse');


exports.process = function(inBuffer, bitmapInfo) {

  var outBuffers = [];
  var reader = new SyncReader(inBuffer);
  var filter = new Filter(bitmapInfo, {
    read: reader.read.bind(reader),
    write: function(bufferPart) {
      outBuffers.push(bufferPart);
    },
    complete: function() {
    }
  });

  filter.start();
  reader.process();

  return Buffer.concat(outBuffers);
};'use strict';

var interlaceUtils = require('./interlace');
var paethPredictor = require('./paeth-predictor');

function getByteWidth(width, bpp, depth) {
  var byteWidth = width * bpp;
  if (depth !== 8) {
    byteWidth = Math.ceil(byteWidth / (8 / depth));
  }
  return byteWidth;
}

var Filter = module.exports = function(bitmapInfo, dependencies) {

  var width = bitmapInfo.width;
  var height = bitmapInfo.height;
  var interlace = bitmapInfo.interlace;
  var bpp = bitmapInfo.bpp;
  var depth = bitmapInfo.depth;

  this.read = dependencies.read;
  this.write = dependencies.write;
  this.complete = dependencies.complete;

  this._imageIndex = 0;
  this._images = [];
  if (interlace) {
    var passes = interlaceUtils.getImagePasses(width, height);
    for (var i = 0; i < passes.length; i++) {
      this._images.push({
        byteWidth: getByteWidth(passes[i].width, bpp, depth),
        height: passes[i].height,
        lineIndex: 0
      });
    }
  }
  else {
    this._images.push({
      byteWidth: getByteWidth(width, bpp, depth),
      height: height,
      lineIndex: 0
    });
  }

  // when filtering the line we look at the pixel to the left
  // the spec also says it is done on a byte level regardless of the number of pixels
  // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back
  // a pixel rather than just a different byte part. However if we are sub byte, we ignore.
  if (depth === 8) {
    this._xComparison = bpp;
  }
  else if (depth === 16) {
    this._xComparison = bpp * 2;
  }
  else {
    this._xComparison = 1;
  }
};

Filter.prototype.start = function() {
  this.read(this._images[this._imageIndex].byteWidth + 1, this._reverseFilterLine.bind(this));
};

Filter.prototype._unFilterType1 = function(rawData, unfilteredLine, byteWidth) {

  var xComparison = this._xComparison;
  var xBiggerThan = xComparison - 1;

  for (var x = 0; x < byteWidth; x++) {
    var rawByte = rawData[1 + x];
    var f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;
    unfilteredLine[x] = rawByte + f1Left;
  }
};

Filter.prototype._unFilterType2 = function(rawData, unfilteredLine, byteWidth) {

  var lastLine = this._lastLine;

  for (var x = 0; x < byteWidth; x++) {
    var rawByte = rawData[1 + x];
    var f2Up = lastLine ? lastLine[x] : 0;
    unfilteredLine[x] = rawByte + f2Up;
  }
};

Filter.prototype._unFilterType3 = function(rawData, unfilteredLine, byteWidth) {

  var xComparison = this._xComparison;
  var xBiggerThan = xComparison - 1;
  var lastLine = this._lastLine;

  for (var x = 0; x < byteWidth; x++) {
    var rawByte = rawData[1 + x];
    var f3Up = lastLine ? lastLine[x] : 0;
    var f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;
    var f3Add = Math.floor((f3Left + f3Up) / 2);
    unfilteredLine[x] = rawByte + f3Add;
  }
};

Filter.prototype._unFilterType4 = function(rawData, unfilteredLine, byteWidth) {

  var xComparison = this._xComparison;
  var xBiggerThan = xComparison - 1;
  var lastLine = this._lastLine;

  for (var x = 0; x < byteWidth; x++) {
    var rawByte = rawData[1 + x];
    var f4Up = lastLine ? lastLine[x] : 0;
    var f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;
    var f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;
    var f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);
    unfilteredLine[x] = rawByte + f4Add;
  }
};

Filter.prototype._reverseFilterLine = function(rawData) {

  var filter = rawData[0];
  var unfilteredLine;
  var currentImage = this._images[this._imageIndex];
  var byteWidth = currentImage.byteWidth;

  if (filter === 0) {
    unfilteredLine = rawData.slice(1, byteWidth + 1);
  }
  else {

    unfilteredLine = new Buffer(byteWidth);

    switch (filter) {
      case 1:
        this._unFilterType1(rawData, unfilteredLine, byteWidth);
        break;
      case 2:
        this._unFilterType2(rawData, unfilteredLine, byteWidth);
        break;
      case 3:
        this._unFilterType3(rawData, unfilteredLine, byteWidth);
        break;
      case 4:
        this._unFilterType4(rawData, unfilteredLine, byteWidth);
        break;
      default:
        throw new Error('Unrecognised filter type - ' + filter);
    }
  }

  this.write(unfilteredLine);

  currentImage.lineIndex++;
  if (currentImage.lineIndex >= currentImage.height) {
    this._lastLine = null;
    this._imageIndex++;
    currentImage = this._images[this._imageIndex];
  }
  else {
    this._lastLine = unfilteredLine;
  }

  if (currentImage) {
    // read, using the byte width that may be from the new current image
    this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));
  }
  else {
    this._lastLine = null;
    this.complete();
  }
};
'use strict';

function dePalette(indata, outdata, width, height, palette) {
  var pxPos = 0;
  // use values from palette
  for (var y = 0; y < height; y++) {
    for (var x = 0; x < width; x++) {
      var color = palette[indata[pxPos]];

      if (!color) {
        throw new Error('index ' + indata[pxPos] + ' not in palette');
      }

      for (var i = 0; i < 4; i++) {
        outdata[pxPos + i] = color[i];
      }
      pxPos += 4;
    }
  }
}

function replaceTransparentColor(indata, outdata, width, height, transColor) {
  var pxPos = 0;
  for (var y = 0; y < height; y++) {
    for (var x = 0; x < width; x++) {
      var makeTrans = false;

      if (transColor.length === 1) {
        if (transColor[0] === indata[pxPos]) {
          makeTrans = true;
        }
      }
      else if (transColor[0] === indata[pxPos] && transColor[1] === indata[pxPos + 1] && transColor[2] === indata[pxPos + 2]) {
        makeTrans = true;
      }
      if (makeTrans) {
        for (var i = 0; i < 4; i++) {
          outdata[pxPos + i] = 0;
        }
      }
      pxPos += 4;
    }
  }
}

function scaleDepth(indata, outdata, width, height, depth) {
  var maxOutSample = 255;
  var maxInSample = Math.pow(2, depth) - 1;
  var pxPos = 0;

  for (var y = 0; y < height; y++) {
    for (var x = 0; x < width; x++) {
      for (var i = 0; i < 4; i++) {
        outdata[pxPos + i] = Math.floor((indata[pxPos + i] * maxOutSample) / maxInSample + 0.5);
      }
      pxPos += 4;
    }
  }
}

module.exports = function(indata, imageData) {

  var depth = imageData.depth;
  var width = imageData.width;
  var height = imageData.height;
  var colorType = imageData.colorType;
  var transColor = imageData.transColor;
  var palette = imageData.palette;

  var outdata = indata; // only different for 16 bits

  if (colorType === 3) { // paletted
    dePalette(indata, outdata, width, height, palette);
  }
  else {
    if (transColor) {
      replaceTransparentColor(indata, outdata, width, height, transColor);
    }
    // if it needs scaling
    if (depth !== 8) {
      // if we need to change the buffer size
      if (depth === 16) {
        outdata = new Buffer(width * height * 4);
      }
      scaleDepth(indata, outdata, width, height, depth);
    }
  }
  return outdata;
};
'use strict';

// Adam 7
//   0 1 2 3 4 5 6 7
// 0 x 6 4 6 x 6 4 6
// 1 7 7 7 7 7 7 7 7
// 2 5 6 5 6 5 6 5 6
// 3 7 7 7 7 7 7 7 7
// 4 3 6 4 6 3 6 4 6
// 5 7 7 7 7 7 7 7 7
// 6 5 6 5 6 5 6 5 6
// 7 7 7 7 7 7 7 7 7


var imagePasses = [
  { // pass 1 - 1px
    x: [0],
    y: [0]
  },
  { // pass 2 - 1px
    x: [4],
    y: [0]
  },
  { // pass 3 - 2px
    x: [0, 4],
    y: [4]
  },
  { // pass 4 - 4px
    x: [2, 6],
    y: [0, 4]
  },
  { // pass 5 - 8px
    x: [0, 2, 4, 6],
    y: [2, 6]
  },
  { // pass 6 - 16px
    x: [1, 3, 5, 7],
    y: [0, 2, 4, 6]
  },
  { // pass 7 - 32px
    x: [0, 1, 2, 3, 4, 5, 6, 7],
    y: [1, 3, 5, 7]
  }
];

exports.getImagePasses = function(width, height) {
  var images = [];
  var xLeftOver = width % 8;
  var yLeftOver = height % 8;
  var xRepeats = (width - xLeftOver) / 8;
  var yRepeats = (height - yLeftOver) / 8;
  for (var i = 0; i < imagePasses.length; i++) {
    var pass = imagePasses[i];
    var passWidth = xRepeats * pass.x.length;
    var passHeight = yRepeats * pass.y.length;
    for (var j = 0; j < pass.x.length; j++) {
      if (pass.x[j] < xLeftOver) {
        passWidth++;
      }
      else {
        break;
      }
    }
    for (j = 0; j < pass.y.length; j++) {
      if (pass.y[j] < yLeftOver) {
        passHeight++;
      }
      else {
        break;
      }
    }
    if (passWidth > 0 && passHeight > 0) {
      images.push({ width: passWidth, height: passHeight, index: i });
    }
  }
  return images;
};

exports.getInterlaceIterator = function(width) {
  return function(x, y, pass) {
    var outerXLeftOver = x % imagePasses[pass].x.length;
    var outerX = (((x - outerXLeftOver) / imagePasses[pass].x.length) * 8) + imagePasses[pass].x[outerXLeftOver];
    var outerYLeftOver = y % imagePasses[pass].y.length;
    var outerY = (((y - outerYLeftOver) / imagePasses[pass].y.length) * 8) + imagePasses[pass].y[outerYLeftOver];
    return (outerX * 4) + (outerY * width * 4);
  };
};'use strict';

var util = require('util');
var Stream = require('stream');
var constants = require('./constants');
var Packer = require('./packer');

var PackerAsync = module.exports = function(opt) {
  Stream.call(this);

  var options = opt || {};

  this._packer = new Packer(options);
  this._deflate = this._packer.createDeflate();

  this.readable = true;
};
util.inherits(PackerAsync, Stream);


PackerAsync.prototype.pack = function(data, width, height, gamma) {
  // Signature
  this.emit('data', new Buffer(constants.PNG_SIGNATURE));
  this.emit('data', this._packer.packIHDR(width, height));

  if (gamma) {
    this.emit('data', this._packer.packGAMA(gamma));
  }

  var filteredData = this._packer.filterData(data, width, height);

  // compress it
  this._deflate.on('error', this.emit.bind(this, 'error'));

  this._deflate.on('data', function(compressedData) {
    this.emit('data', this._packer.packIDAT(compressedData));
  }.bind(this));

  this._deflate.on('end', function() {
    this.emit('data', this._packer.packIEND());
    this.emit('end');
  }.bind(this));

  this._deflate.end(filteredData);
};
'use strict';

var hasSyncZlib = true;
var zlib = require('zlib');
if (!zlib.deflateSync) {
  hasSyncZlib = false;
}
var constants = require('./constants');
var Packer = require('./packer');

module.exports = function(metaData, opt) {

  if (!hasSyncZlib) {
    throw new Error('To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0');
  }

  var options = opt || {};

  var packer = new Packer(options);

  var chunks = [];

  // Signature
  chunks.push(new Buffer(constants.PNG_SIGNATURE));

  // Header
  chunks.push(packer.packIHDR(metaData.width, metaData.height));

  if (metaData.gamma) {
    chunks.push(packer.packGAMA(metaData.gamma));
  }

  var filteredData = packer.filterData(metaData.data, metaData.width, metaData.height);

  // compress it
  var compressedData = zlib.deflateSync(filteredData, packer.getDeflateOptions());
  filteredData = null;

  if (!compressedData || !compressedData.length) {
    throw new Error('bad png - invalid compressed data response');
  }
  chunks.push(packer.packIDAT(compressedData));

  // End
  chunks.push(packer.packIEND());

  return Buffer.concat(chunks);
};
'use strict';

var constants = require('./constants');
var CrcStream = require('./crc');
var bitPacker = require('./bitpacker');
var filter = require('./filter-pack');
var zlib = require('zlib');

var Packer = module.exports = function(options) {
  this._options = options;

  options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;
  options.deflateLevel = options.deflateLevel != null ? options.deflateLevel : 9;
  options.deflateStrategy = options.deflateStrategy != null ? options.deflateStrategy : 3;
  options.inputHasAlpha = options.inputHasAlpha != null ? options.inputHasAlpha : true;
  options.deflateFactory = options.deflateFactory || zlib.createDeflate;
  options.bitDepth = options.bitDepth || 8;
  // This is outputColorType
  options.colorType = (typeof options.colorType === 'number') ? options.colorType : constants.COLORTYPE_COLOR_ALPHA;
  options.inputColorType = (typeof options.inputColorType === 'number') ? options.inputColorType : constants.COLORTYPE_COLOR_ALPHA;

  if ([
    constants.COLORTYPE_GRAYSCALE,
    constants.COLORTYPE_COLOR,
    constants.COLORTYPE_COLOR_ALPHA,
    constants.COLORTYPE_ALPHA
  ].indexOf(options.colorType) === -1) {
    throw new Error('option color type:' + options.colorType + ' is not supported at present');
  }
  if ([
    constants.COLORTYPE_GRAYSCALE,
    constants.COLORTYPE_COLOR,
    constants.COLORTYPE_COLOR_ALPHA,
    constants.COLORTYPE_ALPHA
  ].indexOf(options.inputColorType) === -1) {
    throw new Error('option input color type:' + options.inputColorType + ' is not supported at present');
  }
  if (options.bitDepth !== 8 && options.bitDepth !== 16) {
    throw new Error('option bit depth:' + options.bitDepth + ' is not supported at present');
  }
};

Packer.prototype.getDeflateOptions = function() {
  return {
    chunkSize: this._options.deflateChunkSize,
    level: this._options.deflateLevel,
    strategy: this._options.deflateStrategy
  };
};

Packer.prototype.createDeflate = function() {
  return this._options.deflateFactory(this.getDeflateOptions());
};

Packer.prototype.filterData = function(data, width, height) {
  // convert to correct format for filtering (e.g. right bpp and bit depth)
  var packedData = bitPacker(data, width, height, this._options);

  // filter pixel data
  var bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];
  var filteredData = filter(packedData, width, height, this._options, bpp);
  return filteredData;
};

Packer.prototype._packChunk = function(type, data) {

  var len = (data ? data.length : 0);
  var buf = new Buffer(len + 12);

  buf.writeUInt32BE(len, 0);
  buf.writeUInt32BE(type, 4);

  if (data) {
    data.copy(buf, 8);
  }

  buf.writeInt32BE(CrcStream.crc32(buf.slice(4, buf.length - 4)), buf.length - 4);
  return buf;
};

Packer.prototype.packGAMA = function(gamma) {
  var buf = new Buffer(4);
  buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);
  return this._packChunk(constants.TYPE_gAMA, buf);
};

Packer.prototype.packIHDR = function(width, height) {

  var buf = new Buffer(13);
  buf.writeUInt32BE(width, 0);
  buf.writeUInt32BE(height, 4);
  buf[8] = this._options.bitDepth; // Bit depth
  buf[9] = this._options.colorType; // colorType
  buf[10] = 0; // compression
  buf[11] = 0; // filter
  buf[12] = 0; // interlace

  return this._packChunk(constants.TYPE_IHDR, buf);
};

Packer.prototype.packIDAT = function(data) {
  return this._packChunk(constants.TYPE_IDAT, data);
};

Packer.prototype.packIEND = function() {
  return this._packChunk(constants.TYPE_IEND, null);
};
'use strict';

module.exports = function paethPredictor(left, above, upLeft) {

  var paeth = left + above - upLeft;
  var pLeft = Math.abs(paeth - left);
  var pAbove = Math.abs(paeth - above);
  var pUpLeft = Math.abs(paeth - upLeft);

  if (pLeft <= pAbove && pLeft <= pUpLeft) {
    return left;
  }
  if (pAbove <= pUpLeft) {
    return above;
  }
  return upLeft;
};'use strict';

var util = require('util');
var zlib = require('zlib');
var ChunkStream = require('./chunkstream');
var FilterAsync = require('./filter-parse-async');
var Parser = require('./parser');
var bitmapper = require('./bitmapper');
var formatNormaliser = require('./format-normaliser');

var ParserAsync = module.exports = function(options) {
  ChunkStream.call(this);

  this._parser = new Parser(options, {
    read: this.read.bind(this),
    error: this._handleError.bind(this),
    metadata: this._handleMetaData.bind(this),
    gamma: this.emit.bind(this, 'gamma'),
    palette: this._handlePalette.bind(this),
    transColor: this._handleTransColor.bind(this),
    finished: this._finished.bind(this),
    inflateData: this._inflateData.bind(this),
    simpleTransparency: this._simpleTransparency.bind(this),
    headersFinished: this._headersFinished.bind(this)
  });
  this._options = options;
  this.writable = true;

  this._parser.start();
};
util.inherits(ParserAsync, ChunkStream);


ParserAsync.prototype._handleError = function(err) {

  this.emit('error', err);

  this.writable = false;

  this.destroy();

  if (this._inflate && this._inflate.destroy) {
    this._inflate.destroy();
  }

  if (this._filter) {
    this._filter.destroy();
    // For backward compatibility with Node 7 and below.
    // Suppress errors due to _inflate calling write() even after
    // it's destroy()'ed.
    this._filter.on('error', function() {});
  }

  this.errord = true;
};

ParserAsync.prototype._inflateData = function(data) {
  if (!this._inflate) {
    if (this._bitmapInfo.interlace) {
      this._inflate = zlib.createInflate();

      this._inflate.on('error', this.emit.bind(this, 'error'));
      this._filter.on('complete', this._complete.bind(this));

      this._inflate.pipe(this._filter);
    }
    else {
      var rowSize = ((this._bitmapInfo.width * this._bitmapInfo.bpp * this._bitmapInfo.depth + 7) >> 3) + 1;
      var imageSize = rowSize * this._bitmapInfo.height;
      var chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);

      this._inflate = zlib.createInflate({ chunkSize: chunkSize });
      var leftToInflate = imageSize;

      var emitError = this.emit.bind(this, 'error');
      this._inflate.on('error', function(err) {
        if (!leftToInflate) {
          return;
        }

        emitError(err);
      });
      this._filter.on('complete', this._complete.bind(this));

      var filterWrite = this._filter.write.bind(this._filter);
      this._inflate.on('data', function(chunk) {
        if (!leftToInflate) {
          return;
        }

        if (chunk.length > leftToInflate) {
          chunk = chunk.slice(0, leftToInflate);
        }

        leftToInflate -= chunk.length;

        filterWrite(chunk);
      });

      this._inflate.on('end', this._filter.end.bind(this._filter));
    }
  }
  this._inflate.write(data);
};

ParserAsync.prototype._handleMetaData = function(metaData) {
  this._metaData = metaData;
  this._bitmapInfo = Object.create(metaData);

  this._filter = new FilterAsync(this._bitmapInfo);
};

ParserAsync.prototype._handleTransColor = function(transColor) {
  this._bitmapInfo.transColor = transColor;
};

ParserAsync.prototype._handlePalette = function(palette) {
  this._bitmapInfo.palette = palette;
};

ParserAsync.prototype._simpleTransparency = function() {
  this._metaData.alpha = true;
};

ParserAsync.prototype._headersFinished = function() {
  // Up until this point, we don't know if we have a tRNS chunk (alpha)
  // so we can't emit metadata any earlier
  this.emit('metadata', this._metaData);
};

ParserAsync.prototype._finished = function() {
  if (this.errord) {
    return;
  }

  if (!this._inflate) {
    this.emit('error', 'No Inflate block');
  }
  else {
    // no more data to inflate
    this._inflate.end();
  }
  this.destroySoon();
};

ParserAsync.prototype._complete = function(filteredData) {

  if (this.errord) {
    return;
  }

  try {
    var bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);

    var normalisedBitmapData = formatNormaliser(bitmapData, this._bitmapInfo);
    bitmapData = null;
  }
  catch (ex) {
    this._handleError(ex);
    return;
  }

  this.emit('parsed', normalisedBitmapData);
};
'use strict';

var hasSyncZlib = true;
var zlib = require('zlib');
var inflateSync = require('./sync-inflate');
if (!zlib.deflateSync) {
  hasSyncZlib = false;
}
var SyncReader = require('./sync-reader');
var FilterSync = require('./filter-parse-sync');
var Parser = require('./parser');
var bitmapper = require('./bitmapper');
var formatNormaliser = require('./format-normaliser');


module.exports = function(buffer, options) {

  if (!hasSyncZlib) {
    throw new Error('To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0');
  }

  var err;
  function handleError(_err_) {
    err = _err_;
  }

  var metaData;
  function handleMetaData(_metaData_) {
    metaData = _metaData_;
  }

  function handleTransColor(transColor) {
    metaData.transColor = transColor;
  }

  function handlePalette(palette) {
    metaData.palette = palette;
  }

  function handleSimpleTransparency() {
    metaData.alpha = true;
  }

  var gamma;
  function handleGamma(_gamma_) {
    gamma = _gamma_;
  }

  var inflateDataList = [];
  function handleInflateData(inflatedData) {
    inflateDataList.push(inflatedData);
  }

  var reader = new SyncReader(buffer);

  var parser = new Parser(options, {
    read: reader.read.bind(reader),
    error: handleError,
    metadata: handleMetaData,
    gamma: handleGamma,
    palette: handlePalette,
    transColor: handleTransColor,
    inflateData: handleInflateData,
    simpleTransparency: handleSimpleTransparency
  });

  parser.start();
  reader.process();

  if (err) {
    throw err;
  }

  //join together the inflate datas
  var inflateData = Buffer.concat(inflateDataList);
  inflateDataList.length = 0;

  var inflatedData;
  if (metaData.interlace) {
    inflatedData = zlib.inflateSync(inflateData);
  }
  else {
    var rowSize = ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;
    var imageSize = rowSize * metaData.height;
    inflatedData = inflateSync(inflateData, { chunkSize: imageSize, maxLength: imageSize });
  }
  inflateData = null;

  if (!inflatedData || !inflatedData.length) {
    throw new Error('bad png - invalid inflate data response');
  }

  var unfilteredData = FilterSync.process(inflatedData, metaData);
  inflateData = null;

  var bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);
  unfilteredData = null;

  var normalisedBitmapData = formatNormaliser(bitmapData, metaData);

  metaData.data = normalisedBitmapData;
  metaData.gamma = gamma || 0;

  return metaData;
};
'use strict';

var constants = require('./constants');
var CrcCalculator = require('./crc');


var Parser = module.exports = function(options, dependencies) {

  this._options = options;
  options.checkCRC = options.checkCRC !== false;

  this._hasIHDR = false;
  this._hasIEND = false;
  this._emittedHeadersFinished = false;

  // input flags/metadata
  this._palette = [];
  this._colorType = 0;

  this._chunks = {};
  this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);
  this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);
  this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);
  this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);
  this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);
  this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);

  this.read = dependencies.read;
  this.error = dependencies.error;
  this.metadata = dependencies.metadata;
  this.gamma = dependencies.gamma;
  this.transColor = dependencies.transColor;
  this.palette = dependencies.palette;
  this.parsed = dependencies.parsed;
  this.inflateData = dependencies.inflateData;
  this.finished = dependencies.finished;
  this.simpleTransparency = dependencies.simpleTransparency;
  this.headersFinished = dependencies.headersFinished || function() {};
};

Parser.prototype.start = function() {
  this.read(constants.PNG_SIGNATURE.length,
    this._parseSignature.bind(this)
  );
};

Parser.prototype._parseSignature = function(data) {

  var signature = constants.PNG_SIGNATURE;

  for (var i = 0; i < signature.length; i++) {
    if (data[i] !== signature[i]) {
      this.error(new Error('Invalid file signature'));
      return;
    }
  }
  this.read(8, this._parseChunkBegin.bind(this));
};

Parser.prototype._parseChunkBegin = function(data) {

  // chunk content length
  var length = data.readUInt32BE(0);

  // chunk type
  var type = data.readUInt32BE(4);
  var name = '';
  for (var i = 4; i < 8; i++) {
    name += String.fromCharCode(data[i]);
  }

  //console.log('chunk ', name, length);

  // chunk flags
  var ancillary = Boolean(data[4] & 0x20); // or critical
  //    priv = Boolean(data[5] & 0x20), // or public
  //    safeToCopy = Boolean(data[7] & 0x20); // or unsafe

  if (!this._hasIHDR && type !== constants.TYPE_IHDR) {
    this.error(new Error('Expected IHDR on beggining'));
    return;
  }

  this._crc = new CrcCalculator();
  this._crc.write(new Buffer(name));

  if (this._chunks[type]) {
    return this._chunks[type](length);
  }

  if (!ancillary) {
    this.error(new Error('Unsupported critical chunk type ' + name));
    return;
  }

  this.read(length + 4, this._skipChunk.bind(this));
};

Parser.prototype._skipChunk = function(/*data*/) {
  this.read(8, this._parseChunkBegin.bind(this));
};

Parser.prototype._handleChunkEnd = function() {
  this.read(4, this._parseChunkEnd.bind(this));
};

Parser.prototype._parseChunkEnd = function(data) {

  var fileCrc = data.readInt32BE(0);
  var calcCrc = this._crc.crc32();

  // check CRC
  if (this._options.checkCRC && calcCrc !== fileCrc) {
    this.error(new Error('Crc error - ' + fileCrc + ' - ' + calcCrc));
    return;
  }

  if (!this._hasIEND) {
    this.read(8, this._parseChunkBegin.bind(this));
  }
};

Parser.prototype._handleIHDR = function(length) {
  this.read(length, this._parseIHDR.bind(this));
};
Parser.prototype._parseIHDR = function(data) {

  this._crc.write(data);

  var width = data.readUInt32BE(0);
  var height = data.readUInt32BE(4);
  var depth = data[8];
  var colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha
  var compr = data[10];
  var filter = data[11];
  var interlace = data[12];

  // console.log('    width', width, 'height', height,
  //     'depth', depth, 'colorType', colorType,
  //     'compr', compr, 'filter', filter, 'interlace', interlace
  // );

  if (depth !== 8 && depth !== 4 && depth !== 2 && depth !== 1 && depth !== 16) {
    this.error(new Error('Unsupported bit depth ' + depth));
    return;
  }
  if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {
    this.error(new Error('Unsupported color type'));
    return;
  }
  if (compr !== 0) {
    this.error(new Error('Unsupported compression method'));
    return;
  }
  if (filter !== 0) {
    this.error(new Error('Unsupported filter method'));
    return;
  }
  if (interlace !== 0 && interlace !== 1) {
    this.error(new Error('Unsupported interlace method'));
    return;
  }

  this._colorType = colorType;

  var bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];

  this._hasIHDR = true;

  this.metadata({
    width: width,
    height: height,
    depth: depth,
    interlace: Boolean(interlace),
    palette: Boolean(colorType & constants.COLORTYPE_PALETTE),
    color: Boolean(colorType & constants.COLORTYPE_COLOR),
    alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),
    bpp: bpp,
    colorType: colorType
  });

  this._handleChunkEnd();
};


Parser.prototype._handlePLTE = function(length) {
  this.read(length, this._parsePLTE.bind(this));
};
Parser.prototype._parsePLTE = function(data) {

  this._crc.write(data);

  var entries = Math.floor(data.length / 3);
  // console.log('Palette:', entries);

  for (var i = 0; i < entries; i++) {
    this._palette.push([
      data[i * 3],
      data[i * 3 + 1],
      data[i * 3 + 2],
      0xff
    ]);
  }

  this.palette(this._palette);

  this._handleChunkEnd();
};

Parser.prototype._handleTRNS = function(length) {
  this.simpleTransparency();
  this.read(length, this._parseTRNS.bind(this));
};
Parser.prototype._parseTRNS = function(data) {

  this._crc.write(data);

  // palette
  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {
    if (this._palette.length === 0) {
      this.error(new Error('Transparency chunk must be after palette'));
      return;
    }
    if (data.length > this._palette.length) {
      this.error(new Error('More transparent colors than palette size'));
      return;
    }
    for (var i = 0; i < data.length; i++) {
      this._palette[i][3] = data[i];
    }
    this.palette(this._palette);
  }

  // for colorType 0 (grayscale) and 2 (rgb)
  // there might be one gray/color defined as transparent
  if (this._colorType === constants.COLORTYPE_GRAYSCALE) {
    // grey, 2 bytes
    this.transColor([data.readUInt16BE(0)]);
  }
  if (this._colorType === constants.COLORTYPE_COLOR) {
    this.transColor([data.readUInt16BE(0), data.readUInt16BE(2), data.readUInt16BE(4)]);
  }

  this._handleChunkEnd();
};

Parser.prototype._handleGAMA = function(length) {
  this.read(length, this._parseGAMA.bind(this));
};
Parser.prototype._parseGAMA = function(data) {

  this._crc.write(data);
  this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);

  this._handleChunkEnd();
};

Parser.prototype._handleIDAT = function(length) {
  if (!this._emittedHeadersFinished) {
    this._emittedHeadersFinished = true;
    this.headersFinished();
  }
  this.read(-length, this._parseIDAT.bind(this, length));
};
Parser.prototype._parseIDAT = function(length, data) {

  this._crc.write(data);

  if (this._colorType === constants.COLORTYPE_PALETTE_COLOR && this._palette.length === 0) {
    throw new Error('Expected palette not found');
  }

  this.inflateData(data);
  var leftOverLength = length - data.length;

  if (leftOverLength > 0) {
    this._handleIDAT(leftOverLength);
  }
  else {
    this._handleChunkEnd();
  }
};

Parser.prototype._handleIEND = function(length) {
  this.read(length, this._parseIEND.bind(this));
};
Parser.prototype._parseIEND = function(data) {

  this._crc.write(data);

  this._hasIEND = true;
  this._handleChunkEnd();

  if (this.finished) {
    this.finished();
  }
};
'use strict';


var parse = require('./parser-sync');
var pack = require('./packer-sync');


exports.read = function(buffer, options) {

  return parse(buffer, options || {});
};

exports.write = function(png, options) {

  return pack(png, options);
};
'use strict';

var util = require('util');
var Stream = require('stream');
var Parser = require('./parser-async');
var Packer = require('./packer-async');
var PNGSync = require('./png-sync');


var PNG = exports.PNG = function(options) {
  Stream.call(this);

  options = options || {}; // eslint-disable-line no-param-reassign

  // coerce pixel dimensions to integers (also coerces undefined -> 0):
  this.width = options.width | 0;
  this.height = options.height | 0;

  this.data = this.width > 0 && this.height > 0 ?
    new Buffer(4 * this.width * this.height) : null;

  if (options.fill && this.data) {
    this.data.fill(0);
  }

  this.gamma = 0;
  this.readable = this.writable = true;

  this._parser = new Parser(options);

  this._parser.on('error', this.emit.bind(this, 'error'));
  this._parser.on('close', this._handleClose.bind(this));
  this._parser.on('metadata', this._metadata.bind(this));
  this._parser.on('gamma', this._gamma.bind(this));
  this._parser.on('parsed', function(data) {
    this.data = data;
    this.emit('parsed', data);
  }.bind(this));

  this._packer = new Packer(options);
  this._packer.on('data', this.emit.bind(this, 'data'));
  this._packer.on('end', this.emit.bind(this, 'end'));
  this._parser.on('close', this._handleClose.bind(this));
  this._packer.on('error', this.emit.bind(this, 'error'));

};
util.inherits(PNG, Stream);

PNG.sync = PNGSync;

PNG.prototype.pack = function() {

  if (!this.data || !this.data.length) {
    this.emit('error', 'No data provided');
    return this;
  }

  process.nextTick(function() {
    this._packer.pack(this.data, this.width, this.height, this.gamma);
  }.bind(this));

  return this;
};


PNG.prototype.parse = function(data, callback) {

  if (callback) {
    var onParsed, onError;

    onParsed = function(parsedData) {
      this.removeListener('error', onError);

      this.data = parsedData;
      callback(null, this);
    }.bind(this);

    onError = function(err) {
      this.removeListener('parsed', onParsed);

      callback(err, null);
    }.bind(this);

    this.once('parsed', onParsed);
    this.once('error', onError);
  }

  this.end(data);
  return this;
};

PNG.prototype.write = function(data) {
  this._parser.write(data);
  return true;
};

PNG.prototype.end = function(data) {
  this._parser.end(data);
};

PNG.prototype._metadata = function(metadata) {
  this.width = metadata.width;
  this.height = metadata.height;

  this.emit('metadata', metadata);
};

PNG.prototype._gamma = function(gamma) {
  this.gamma = gamma;
};

PNG.prototype._handleClose = function() {
  if (!this._parser.writable && !this._packer.readable) {
    this.emit('close');
  }
};


PNG.bitblt = function(src, dst, srcX, srcY, width, height, deltaX, deltaY) { // eslint-disable-line max-params
  // coerce pixel dimensions to integers (also coerces undefined -> 0):
  /* eslint-disable no-param-reassign */
  srcX |= 0;
  srcY |= 0;
  width |= 0;
  height |= 0;
  deltaX |= 0;
  deltaY |= 0;
  /* eslint-enable no-param-reassign */

  if (srcX > src.width || srcY > src.height || srcX + width > src.width || srcY + height > src.height) {
    throw new Error('bitblt reading outside image');
  }

  if (deltaX > dst.width || deltaY > dst.height || deltaX + width > dst.width || deltaY + height > dst.height) {
    throw new Error('bitblt writing outside image');
  }

  for (var y = 0; y < height; y++) {
    src.data.copy(dst.data,
      ((deltaY + y) * dst.width + deltaX) << 2,
      ((srcY + y) * src.width + srcX) << 2,
      ((srcY + y) * src.width + srcX + width) << 2
    );
  }
};


PNG.prototype.bitblt = function(dst, srcX, srcY, width, height, deltaX, deltaY) { // eslint-disable-line max-params

  PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);
  return this;
};

PNG.adjustGamma = function(src) {
  if (src.gamma) {
    for (var y = 0; y < src.height; y++) {
      for (var x = 0; x < src.width; x++) {
        var idx = (src.width * y + x) << 2;

        for (var i = 0; i < 3; i++) {
          var sample = src.data[idx + i] / 255;
          sample = Math.pow(sample, 1 / 2.2 / src.gamma);
          src.data[idx + i] = Math.round(sample * 255);
        }
      }
    }
    src.gamma = 0;
  }
};

PNG.prototype.adjustGamma = function() {
  PNG.adjustGamma(this);
};
'use strict';

var assert = require('assert').ok;
var zlib = require('zlib');
var util = require('util');

var kMaxLength = require('buffer').kMaxLength;

function Inflate(opts) {
  if (!(this instanceof Inflate)) {
    return new Inflate(opts);
  }

  if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {
    opts.chunkSize = zlib.Z_MIN_CHUNK;
  }

  zlib.Inflate.call(this, opts);

  // Node 8 --> 9 compatibility check
  this._offset = this._offset === undefined ? this._outOffset : this._offset;
  this._buffer = this._buffer || this._outBuffer;

  if (opts && opts.maxLength != null) {
    this._maxLength = opts.maxLength;
  }
}

function createInflate(opts) {
  return new Inflate(opts);
}

function _close(engine, callback) {
  if (callback) {
    process.nextTick(callback);
  }

  // Caller may invoke .close after a zlib error (which will null _handle).
  if (!engine._handle) {
    return;
  }

  engine._handle.close();
  engine._handle = null;
}

Inflate.prototype._processChunk = function(chunk, flushFlag, asyncCb) {
  if (typeof asyncCb === 'function') {
    return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);
  }

  var self = this;

  var availInBefore = chunk && chunk.length;
  var availOutBefore = this._chunkSize - this._offset;
  var leftToInflate = this._maxLength;
  var inOff = 0;

  var buffers = [];
  var nread = 0;

  var error;
  this.on('error', function(err) {
    error = err;
  });

  function handleChunk(availInAfter, availOutAfter) {
    if (self._hadError) {
      return;
    }

    var have = availOutBefore - availOutAfter;
    assert(have >= 0, 'have should not go down');

    if (have > 0) {
      var out = self._buffer.slice(self._offset, self._offset + have);
      self._offset += have;

      if (out.length > leftToInflate) {
        out = out.slice(0, leftToInflate);
      }

      buffers.push(out);
      nread += out.length;
      leftToInflate -= out.length;

      if (leftToInflate === 0) {
        return false;
      }
    }

    if (availOutAfter === 0 || self._offset >= self._chunkSize) {
      availOutBefore = self._chunkSize;
      self._offset = 0;
      self._buffer = Buffer.allocUnsafe(self._chunkSize);
    }

    if (availOutAfter === 0) {
      inOff += (availInBefore - availInAfter);
      availInBefore = availInAfter;

      return true;
    }

    return false;
  }

  assert(this._handle, 'zlib binding closed');
  do {
    var res = this._handle.writeSync(flushFlag,
      chunk, // in
      inOff, // in_off
      availInBefore, // in_len
      this._buffer, // out
      this._offset, //out_off
      availOutBefore); // out_len
    // Node 8 --> 9 compatibility check
    res = res || this._writeState;
  } while (!this._hadError && handleChunk(res[0], res[1]));

  if (this._hadError) {
    throw error;
  }

  if (nread >= kMaxLength) {
    _close(this);
    throw new RangeError('Cannot create final Buffer. It would be larger than 0x' + kMaxLength.toString(16) + ' bytes');
  }

  var buf = Buffer.concat(buffers, nread);
  _close(this);

  return buf;
};

util.inherits(Inflate, zlib.Inflate);

function zlibBufferSync(engine, buffer) {
  if (typeof buffer === 'string') {
    buffer = Buffer.from(buffer);
  }
  if (!(buffer instanceof Buffer)) {
    throw new TypeError('Not a string or buffer');
  }

  var flushFlag = engine._finishFlushFlag;
  if (flushFlag == null) {
    flushFlag = zlib.Z_FINISH;
  }

  return engine._processChunk(buffer, flushFlag);
}

function inflateSync(buffer, opts) {
  return zlibBufferSync(new Inflate(opts), buffer);
}

module.exports = exports = inflateSync;
exports.Inflate = Inflate;
exports.createInflate = createInflate;
exports.inflateSync = inflateSync;
'use strict';

var SyncReader = module.exports = function(buffer) {

  this._buffer = buffer;
  this._reads = [];
};

SyncReader.prototype.read = function(length, callback) {

  this._reads.push({
    length: Math.abs(length), // if length < 0 then at most this length
    allowLess: length < 0,
    func: callback
  });
};

SyncReader.prototype.process = function() {

  // as long as there is any data and read requests
  while (this._reads.length > 0 && this._buffer.length) {

    var read = this._reads[0];

    if (this._buffer.length && (this._buffer.length >= read.length || read.allowLess)) {

      // ok there is any data so that we can satisfy this request
      this._reads.shift(); // == read

      var buf = this._buffer;

      this._buffer = buf.slice(read.length);

      read.func.call(this, buf.slice(0, read.length));

    }
    else {
      break;
    }

  }

  if (this._reads.length > 0) {
    return new Error('There are some read requests waitng on finished stream');
  }

  if (this._buffer.length > 0) {
    return new Error('unrecognised content at end of stream');
  }

};
pngjs2 original work Copyright (c) 2015 Luke Page & Original Contributors
pngjs derived work Copyright (c) 2012 Kuba Niegowski

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "pngjs",
  "version": "3.4.0",
  "description": "PNG encoder/decoder in pure JS, supporting any bit size & interlace, async & sync with full test suite.",
  "homepage": "https://github.com/lukeapage/pngjs",
  "engines": {
    "node": ">=4.0.0"
  },
  "main": "./lib/png.js",
  "directories": {
    "lib": "lib",
    "example": "examples",
    "test": "test"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/lukeapage/pngjs2.git"
  },
  "license": "MIT",
  "devDependencies": {
    "browserify": "^14.5.0",
    "buffer-equal": "1.0.0",
    "connect": "^3.4.0",
    "eslint": "^4.1.0",
    "istanbul": "^0.4.4",
    "phantomjs-prebuilt": "^2.1.7",
    "serve-static": "^1.10.0",
    "tap-dot": "^2.0.0",
    "tape": "^4.0.2"
  }
}'use strict';
module.exports = (url, opts) => {
	if (typeof url !== 'string') {
		throw new TypeError(`Expected \`url\` to be of type \`string\`, got \`${typeof url}\``);
	}

	url = url.trim();
	opts = Object.assign({https: false}, opts);

	if (/^\.*\/|^(?!localhost)\w+:/.test(url)) {
		return url;
	}

	return url.replace(/^(?!(?:\w+:)?\/\/)/, opts.https ? 'https://' : 'http://');
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "prepend-http",
  "version": "2.0.0",
  "description": "Prepend `http://` to humanized URLs like todomvc.com and localhost",
  "license": "MIT",
  "repository": "sindresorhus/prepend-http",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}The ISC License

Copyright (c) Isaac Z. Schlueter and Contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
if (process.env.npm_package_name === 'pseudomap' &&
    process.env.npm_lifecycle_script === 'test')
  process.env.TEST_PSEUDOMAP = 'true'

if (typeof Map === 'function' && !process.env.TEST_PSEUDOMAP) {
  module.exports = Map
} else {
  module.exports = require('./pseudomap')
}
{
  "name": "pseudomap",
  "version": "1.0.2",
  "description": "A thing that is a lot like ES6 `Map`, but without iterators, for use in environments where `for..of` syntax and `Map` are not available.",
  "main": "map.js",
  "directories": {
    "test": "test"
  },
  "devDependencies": {
    "tap": "^2.3.1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/isaacs/pseudomap.git"
  },
  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
  "license": "ISC",
  "homepage": "https://github.com/isaacs/pseudomap#readme"
}var hasOwnProperty = Object.prototype.hasOwnProperty

module.exports = PseudoMap

function PseudoMap (set) {
  if (!(this instanceof PseudoMap)) // whyyyyyyy
    throw new TypeError("Constructor PseudoMap requires 'new'")

  this.clear()

  if (set) {
    if ((set instanceof PseudoMap) ||
        (typeof Map === 'function' && set instanceof Map))
      set.forEach(function (value, key) {
        this.set(key, value)
      }, this)
    else if (Array.isArray(set))
      set.forEach(function (kv) {
        this.set(kv[0], kv[1])
      }, this)
    else
      throw new TypeError('invalid argument')
  }
}

PseudoMap.prototype.forEach = function (fn, thisp) {
  thisp = thisp || this
  Object.keys(this._data).forEach(function (k) {
    if (k !== 'size')
      fn.call(thisp, this._data[k].value, this._data[k].key)
  }, this)
}

PseudoMap.prototype.has = function (k) {
  return !!find(this._data, k)
}

PseudoMap.prototype.get = function (k) {
  var res = find(this._data, k)
  return res && res.value
}

PseudoMap.prototype.set = function (k, v) {
  set(this._data, k, v)
}

PseudoMap.prototype.delete = function (k) {
  var res = find(this._data, k)
  if (res) {
    delete this._data[res._index]
    this._data.size--
  }
}

PseudoMap.prototype.clear = function () {
  var data = Object.create(null)
  data.size = 0

  Object.defineProperty(this, '_data', {
    value: data,
    enumerable: false,
    configurable: true,
    writable: false
  })
}

Object.defineProperty(PseudoMap.prototype, 'size', {
  get: function () {
    return this._data.size
  },
  set: function (n) {},
  enumerable: true,
  configurable: true
})

PseudoMap.prototype.values =
PseudoMap.prototype.keys =
PseudoMap.prototype.entries = function () {
  throw new Error('iterators are not implemented in this version')
}

// Either identical, or both NaN
function same (a, b) {
  return a === b || a !== a && b !== b
}

function Entry (k, v, i) {
  this.key = k
  this.value = v
  this._index = i
}

function find (data, k) {
  for (var i = 0, s = '_' + k, key = s;
       hasOwnProperty.call(data, key);
       key = s + i++) {
    if (same(data[key].key, k))
      return data[key]
  }
}

function set (data, k, v) {
  for (var i = 0, s = '_' + k, key = s;
       hasOwnProperty.call(data, key);
       key = s + i++) {
    if (same(data[key].key, k)) {
      data[key].value = v
      return
    }
  }
  data.size++
  data[key] = new Entry(k, v, key)
}
var once = require('once')
var eos = require('end-of-stream')
var fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes

var noop = function () {}
var ancient = /^v?\.0/.test(process.version)

var isFn = function (fn) {
  return typeof fn === 'function'
}

var isFS = function (stream) {
  if (!ancient) return false // newer node version do not need to care about fs is a special way
  if (!fs) return false // browser
  return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
}

var isRequest = function (stream) {
  return stream.setHeader && isFn(stream.abort)
}

var destroyer = function (stream, reading, writing, callback) {
  callback = once(callback)

  var closed = false
  stream.on('close', function () {
    closed = true
  })

  eos(stream, {readable: reading, writable: writing}, function (err) {
    if (err) return callback(err)
    closed = true
    callback()
  })

  var destroyed = false
  return function (err) {
    if (closed) return
    if (destroyed) return
    destroyed = true

    if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
    if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want

    if (isFn(stream.destroy)) return stream.destroy()

    callback(err || new Error('stream was destroyed'))
  }
}

var call = function (fn) {
  fn()
}

var pipe = function (from, to) {
  return from.pipe(to)
}

var pump = function () {
  var streams = Array.prototype.slice.call(arguments)
  var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop

  if (Array.isArray(streams[0])) streams = streams[0]
  if (streams.length < 2) throw new Error('pump requires two streams per minimum')

  var error
  var destroys = streams.map(function (stream, i) {
    var reading = i < streams.length - 1
    var writing = i > 0
    return destroyer(stream, reading, writing, function (err) {
      if (!error) error = err
      if (err) destroys.forEach(call)
      if (reading) return
      destroys.forEach(call)
      callback(error)
    })
  })

  return streams.reduce(pipe)
}

module.exports = pump
The MIT License (MIT)

Copyright (c) 2014 Mathias Buus

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.{
  "name": "pump",
  "version": "3.0.0",
  "repository": "git://github.com/mafintosh/pump.git",
  "license": "MIT",
  "description": "pipe streams together and close all of them if one of them closes",
  "browser": {
    "fs": false
  },
  "author": "Mathias Buus Madsen <mathiasbuus@gmail.com>",
  "dependencies": {
    "end-of-stream": "^1.1.0",
    "once": "^1.3.1"
  }
}var stream = require('stream')
var pump = require('./index')

var rs = new stream.Readable()
var ws = new stream.Writable()

rs._read = function (size) {
  this.push(Buffer(size).fill('abc'))
}

ws._write = function (chunk, encoding, cb) {
  setTimeout(function () {
    cb()
  }, 100)
}

var toHex = function () {
  var reverse = new (require('stream').Transform)()

  reverse._transform = function (chunk, enc, callback) {
    reverse.push(chunk.toString('hex'))
    callback()
  }

  return reverse
}

var wsClosed = false
var rsClosed = false
var callbackCalled = false

var check = function () {
  if (wsClosed && rsClosed && callbackCalled) {
    console.log('test-browser.js passes')
    clearTimeout(timeout)
  }
}

ws.on('finish', function () {
  wsClosed = true
  check()
})

rs.on('end', function () {
  rsClosed = true
  check()
})

var res = pump(rs, toHex(), toHex(), toHex(), ws, function () {
  callbackCalled = true
  check()
})

if (res !== ws) {
  throw new Error('should return last stream')
}

setTimeout(function () {
  rs.push(null)
  rs.emit('close')
}, 1000)

var timeout = setTimeout(function () {
  check()
  throw new Error('timeout')
}, 5000)
var pump = require('./index')

var rs = require('fs').createReadStream('/dev/random')
var ws = require('fs').createWriteStream('/dev/null')

var toHex = function () {
  var reverse = new (require('stream').Transform)()

  reverse._transform = function (chunk, enc, callback) {
    reverse.push(chunk.toString('hex'))
    callback()
  }

  return reverse
}

var wsClosed = false
var rsClosed = false
var callbackCalled = false

var check = function () {
  if (wsClosed && rsClosed && callbackCalled) {
    console.log('test-node.js passes')
    clearTimeout(timeout)
  }
}

ws.on('close', function () {
  wsClosed = true
  check()
})

rs.on('close', function () {
  rsClosed = true
  check()
})

var res = pump(rs, toHex(), toHex(), toHex(), ws, function () {
  callbackCalled = true
  check()
})

if (res !== ws) {
  throw new Error('should return last stream')
}

setTimeout(function () {
  rs.destroy()
}, 1000)

var timeout = setTimeout(function () {
  throw new Error('timeout')
}, 5000)
#!/usr/bin/env node
var yargs = require('yargs')
var qr = require('../lib')

function save (file, text, options) {
  qr.toFile(file, text, options, function (err, data) {
    if (err) {
      console.error('Error:', err.message)
      process.exit(1)
    }

    console.log('saved qrcode to: ' + file + '\n')
  })
}

function print (text, options) {
  options.type = 'terminal'
  qr.toString(text, options, function (err, text) {
    if (err) {
      console.error('Error:', err.message)
      process.exit(1)
    }

    console.log(text)
  })
}

function parseOptions (args) {
  return {
    version: args.qversion,
    errorCorrectionLevel: args.error,
    type: args.type,
    maskPattern: args.mask,
    margin: args.qzone,
    width: args.width,
    scale: args.scale,
    color: {
      light: args.lightcolor,
      dark: args.darkcolor
    }
  }
}

function processInputs (text, opts) {
  if (!text.length) {
    yargs.showHelp()
    process.exit(1)
  }

  if (opts.output) {
    save(opts.output, text, parseOptions(opts))
  } else {
    print(text, parseOptions(opts))
  }
}

var argv = yargs
  .detectLocale(false)
  .usage('Usage: $0 [options] <input string>')
  .option('v', {
    alias: 'qversion',
    description: 'QR Code symbol version (1 - 40)',
    group: 'QR Code options:',
    type: 'number'
  })
  .option('e', {
    alias: 'error',
    description: 'Error correction level',
    choices: ['L', 'M', 'Q', 'H'],
    group: 'QR Code options:'
  })
  .option('m', {
    alias: 'mask',
    description: 'Mask pattern (0 - 7)',
    group: 'QR Code options:',
    type: 'number'
  })
  .option('t', {
    alias: 'type',
    description: 'Output type',
    choices: ['png', 'svg', 'utf8'],
    implies: 'output',
    group: 'Renderer options:'
  })
  .option('w', {
    alias: 'width',
    description: 'Image width (px)',
    conflicts: 'scale',
    group: 'Renderer options:',
    type: 'number'
  })
  .option('s', {
    alias: 'scale',
    description: 'Scale factor',
    conflicts: 'width',
    group: 'Renderer options:',
    type: 'number'
  })
  .option('q', {
    alias: 'qzone',
    description: 'Quiet zone size',
    group: 'Renderer options:',
    type: 'number'
  })
  .option('l', {
    alias: 'lightcolor',
    description: 'Light RGBA hex color',
    group: 'Renderer options:'
  })
  .option('d', {
    alias: 'darkcolor',
    description: 'Dark RGBA hex color',
    group: 'Renderer options:'
  })
  .option('o', {
    alias: 'output',
    description: 'Output file'
  })
  .help('h')
  .alias('h', 'help')
  .version()
  .example('$0 "some text"', 'Draw in terminal window')
  .example('$0 -o out.png "some text"', 'Save as png image')
  .example('$0 -d F00 -o out.png "some text"', 'Use red as foreground color')
  .parserConfiguration({'parse-numbers': false})
  .argv

if (process.stdin.isTTY) {
  processInputs(argv._.join(' '), argv)
} else {
  var text = ''
  process.stdin.setEncoding('utf8')
  process.stdin.on('readable', function () {
    var chunk = process.stdin.read()
    if (chunk !== null) {
      text += chunk
    }
  })

  process.stdin.on('end', function () {
    // this process can be run as a command outside of a tty so if there was no
    // data on stdin read from argv
    processInputs(text.length?text:argv._.join(' '), argv)
  })
}
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.QRCode = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
// can-promise has a crash in some versions of react native that dont have
// standard global objects
// https://github.com/soldair/node-qrcode/issues/157

module.exports = function () {
  return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then
}

},{}],2:[function(require,module,exports){
/**
 * Alignment pattern are fixed reference pattern in defined positions
 * in a matrix symbology, which enables the decode software to re-synchronise
 * the coordinate mapping of the image modules in the event of moderate amounts
 * of distortion of the image.
 *
 * Alignment patterns are present only in QR Code symbols of version 2 or larger
 * and their number depends on the symbol version.
 */

var getSymbolSize = require('./utils').getSymbolSize

/**
 * Calculate the row/column coordinates of the center module of each alignment pattern
 * for the specified QR Code version.
 *
 * The alignment patterns are positioned symmetrically on either side of the diagonal
 * running from the top left corner of the symbol to the bottom right corner.
 *
 * Since positions are simmetrical only half of the coordinates are returned.
 * Each item of the array will represent in turn the x and y coordinate.
 * @see {@link getPositions}
 *
 * @param  {Number} version QR Code version
 * @return {Array}          Array of coordinate
 */
exports.getRowColCoords = function getRowColCoords (version) {
  if (version === 1) return []

  var posCount = Math.floor(version / 7) + 2
  var size = getSymbolSize(version)
  var intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2
  var positions = [size - 7] // Last coord is always (size - 7)

  for (var i = 1; i < posCount - 1; i++) {
    positions[i] = positions[i - 1] - intervals
  }

  positions.push(6) // First coord is always 6

  return positions.reverse()
}

/**
 * Returns an array containing the positions of each alignment pattern.
 * Each array's element represent the center point of the pattern as (x, y) coordinates
 *
 * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}
 * and filtering out the items that overlaps with finder pattern
 *
 * @example
 * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.
 * The alignment patterns, therefore, are to be centered on (row, column)
 * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).
 * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns
 * and are not therefore used for alignment patterns.
 *
 * var pos = getPositions(7)
 * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]
 *
 * @param  {Number} version QR Code version
 * @return {Array}          Array of coordinates
 */
exports.getPositions = function getPositions (version) {
  var coords = []
  var pos = exports.getRowColCoords(version)
  var posLength = pos.length

  for (var i = 0; i < posLength; i++) {
    for (var j = 0; j < posLength; j++) {
      // Skip if position is occupied by finder patterns
      if ((i === 0 && j === 0) ||             // top-left
          (i === 0 && j === posLength - 1) || // bottom-left
          (i === posLength - 1 && j === 0)) { // top-right
        continue
      }

      coords.push([pos[i], pos[j]])
    }
  }

  return coords
}

},{"./utils":21}],3:[function(require,module,exports){
var Mode = require('./mode')

/**
 * Array of characters available in alphanumeric mode
 *
 * As per QR Code specification, to each character
 * is assigned a value from 0 to 44 which in this case coincides
 * with the array index
 *
 * @type {Array}
 */
var ALPHA_NUM_CHARS = [
  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
  ' ', '$', '%', '*', '+', '-', '.', '/', ':'
]

function AlphanumericData (data) {
  this.mode = Mode.ALPHANUMERIC
  this.data = data
}

AlphanumericData.getBitsLength = function getBitsLength (length) {
  return 11 * Math.floor(length / 2) + 6 * (length % 2)
}

AlphanumericData.prototype.getLength = function getLength () {
  return this.data.length
}

AlphanumericData.prototype.getBitsLength = function getBitsLength () {
  return AlphanumericData.getBitsLength(this.data.length)
}

AlphanumericData.prototype.write = function write (bitBuffer) {
  var i

  // Input data characters are divided into groups of two characters
  // and encoded as 11-bit binary codes.
  for (i = 0; i + 2 <= this.data.length; i += 2) {
    // The character value of the first character is multiplied by 45
    var value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45

    // The character value of the second digit is added to the product
    value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])

    // The sum is then stored as 11-bit binary number
    bitBuffer.put(value, 11)
  }

  // If the number of input data characters is not a multiple of two,
  // the character value of the final character is encoded as a 6-bit binary number.
  if (this.data.length % 2) {
    bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)
  }
}

module.exports = AlphanumericData

},{"./mode":14}],4:[function(require,module,exports){
function BitBuffer () {
  this.buffer = []
  this.length = 0
}

BitBuffer.prototype = {

  get: function (index) {
    var bufIndex = Math.floor(index / 8)
    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1
  },

  put: function (num, length) {
    for (var i = 0; i < length; i++) {
      this.putBit(((num >>> (length - i - 1)) & 1) === 1)
    }
  },

  getLengthInBits: function () {
    return this.length
  },

  putBit: function (bit) {
    var bufIndex = Math.floor(this.length / 8)
    if (this.buffer.length <= bufIndex) {
      this.buffer.push(0)
    }

    if (bit) {
      this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))
    }

    this.length++
  }
}

module.exports = BitBuffer

},{}],5:[function(require,module,exports){
var BufferUtil = require('../utils/buffer')

/**
 * Helper class to handle QR Code symbol modules
 *
 * @param {Number} size Symbol size
 */
function BitMatrix (size) {
  if (!size || size < 1) {
    throw new Error('BitMatrix size must be defined and greater than 0')
  }

  this.size = size
  this.data = BufferUtil.alloc(size * size)
  this.reservedBit = BufferUtil.alloc(size * size)
}

/**
 * Set bit value at specified location
 * If reserved flag is set, this bit will be ignored during masking process
 *
 * @param {Number}  row
 * @param {Number}  col
 * @param {Boolean} value
 * @param {Boolean} reserved
 */
BitMatrix.prototype.set = function (row, col, value, reserved) {
  var index = row * this.size + col
  this.data[index] = value
  if (reserved) this.reservedBit[index] = true
}

/**
 * Returns bit value at specified location
 *
 * @param  {Number}  row
 * @param  {Number}  col
 * @return {Boolean}
 */
BitMatrix.prototype.get = function (row, col) {
  return this.data[row * this.size + col]
}

/**
 * Applies xor operator at specified location
 * (used during masking process)
 *
 * @param {Number}  row
 * @param {Number}  col
 * @param {Boolean} value
 */
BitMatrix.prototype.xor = function (row, col, value) {
  this.data[row * this.size + col] ^= value
}

/**
 * Check if bit at specified location is reserved
 *
 * @param {Number}   row
 * @param {Number}   col
 * @return {Boolean}
 */
BitMatrix.prototype.isReserved = function (row, col) {
  return this.reservedBit[row * this.size + col]
}

module.exports = BitMatrix

},{"../utils/buffer":28}],6:[function(require,module,exports){
var BufferUtil = require('../utils/buffer')
var Mode = require('./mode')

function ByteData (data) {
  this.mode = Mode.BYTE
  this.data = BufferUtil.from(data)
}

ByteData.getBitsLength = function getBitsLength (length) {
  return length * 8
}

ByteData.prototype.getLength = function getLength () {
  return this.data.length
}

ByteData.prototype.getBitsLength = function getBitsLength () {
  return ByteData.getBitsLength(this.data.length)
}

ByteData.prototype.write = function (bitBuffer) {
  for (var i = 0, l = this.data.length; i < l; i++) {
    bitBuffer.put(this.data[i], 8)
  }
}

module.exports = ByteData

},{"../utils/buffer":28,"./mode":14}],7:[function(require,module,exports){
var ECLevel = require('./error-correction-level')

var EC_BLOCKS_TABLE = [
// L  M  Q  H
  1, 1, 1, 1,
  1, 1, 1, 1,
  1, 1, 2, 2,
  1, 2, 2, 4,
  1, 2, 4, 4,
  2, 4, 4, 4,
  2, 4, 6, 5,
  2, 4, 6, 6,
  2, 5, 8, 8,
  4, 5, 8, 8,
  4, 5, 8, 11,
  4, 8, 10, 11,
  4, 9, 12, 16,
  4, 9, 16, 16,
  6, 10, 12, 18,
  6, 10, 17, 16,
  6, 11, 16, 19,
  6, 13, 18, 21,
  7, 14, 21, 25,
  8, 16, 20, 25,
  8, 17, 23, 25,
  9, 17, 23, 34,
  9, 18, 25, 30,
  10, 20, 27, 32,
  12, 21, 29, 35,
  12, 23, 34, 37,
  12, 25, 34, 40,
  13, 26, 35, 42,
  14, 28, 38, 45,
  15, 29, 40, 48,
  16, 31, 43, 51,
  17, 33, 45, 54,
  18, 35, 48, 57,
  19, 37, 51, 60,
  19, 38, 53, 63,
  20, 40, 56, 66,
  21, 43, 59, 70,
  22, 45, 62, 74,
  24, 47, 65, 77,
  25, 49, 68, 81
]

var EC_CODEWORDS_TABLE = [
// L  M  Q  H
  7, 10, 13, 17,
  10, 16, 22, 28,
  15, 26, 36, 44,
  20, 36, 52, 64,
  26, 48, 72, 88,
  36, 64, 96, 112,
  40, 72, 108, 130,
  48, 88, 132, 156,
  60, 110, 160, 192,
  72, 130, 192, 224,
  80, 150, 224, 264,
  96, 176, 260, 308,
  104, 198, 288, 352,
  120, 216, 320, 384,
  132, 240, 360, 432,
  144, 280, 408, 480,
  168, 308, 448, 532,
  180, 338, 504, 588,
  196, 364, 546, 650,
  224, 416, 600, 700,
  224, 442, 644, 750,
  252, 476, 690, 816,
  270, 504, 750, 900,
  300, 560, 810, 960,
  312, 588, 870, 1050,
  336, 644, 952, 1110,
  360, 700, 1020, 1200,
  390, 728, 1050, 1260,
  420, 784, 1140, 1350,
  450, 812, 1200, 1440,
  480, 868, 1290, 1530,
  510, 924, 1350, 1620,
  540, 980, 1440, 1710,
  570, 1036, 1530, 1800,
  570, 1064, 1590, 1890,
  600, 1120, 1680, 1980,
  630, 1204, 1770, 2100,
  660, 1260, 1860, 2220,
  720, 1316, 1950, 2310,
  750, 1372, 2040, 2430
]

/**
 * Returns the number of error correction block that the QR Code should contain
 * for the specified version and error correction level.
 *
 * @param  {Number} version              QR Code version
 * @param  {Number} errorCorrectionLevel Error correction level
 * @return {Number}                      Number of error correction blocks
 */
exports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {
  switch (errorCorrectionLevel) {
    case ECLevel.L:
      return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]
    case ECLevel.M:
      return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]
    case ECLevel.Q:
      return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]
    case ECLevel.H:
      return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]
    default:
      return undefined
  }
}

/**
 * Returns the number of error correction codewords to use for the specified
 * version and error correction level.
 *
 * @param  {Number} version              QR Code version
 * @param  {Number} errorCorrectionLevel Error correction level
 * @return {Number}                      Number of error correction codewords
 */
exports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {
  switch (errorCorrectionLevel) {
    case ECLevel.L:
      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]
    case ECLevel.M:
      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]
    case ECLevel.Q:
      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]
    case ECLevel.H:
      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]
    default:
      return undefined
  }
}

},{"./error-correction-level":8}],8:[function(require,module,exports){
exports.L = { bit: 1 }
exports.M = { bit: 0 }
exports.Q = { bit: 3 }
exports.H = { bit: 2 }

function fromString (string) {
  if (typeof string !== 'string') {
    throw new Error('Param is not a string')
  }

  var lcStr = string.toLowerCase()

  switch (lcStr) {
    case 'l':
    case 'low':
      return exports.L

    case 'm':
    case 'medium':
      return exports.M

    case 'q':
    case 'quartile':
      return exports.Q

    case 'h':
    case 'high':
      return exports.H

    default:
      throw new Error('Unknown EC Level: ' + string)
  }
}

exports.isValid = function isValid (level) {
  return level && typeof level.bit !== 'undefined' &&
    level.bit >= 0 && level.bit < 4
}

exports.from = function from (value, defaultValue) {
  if (exports.isValid(value)) {
    return value
  }

  try {
    return fromString(value)
  } catch (e) {
    return defaultValue
  }
}

},{}],9:[function(require,module,exports){
var getSymbolSize = require('./utils').getSymbolSize
var FINDER_PATTERN_SIZE = 7

/**
 * Returns an array containing the positions of each finder pattern.
 * Each array's element represent the top-left point of the pattern as (x, y) coordinates
 *
 * @param  {Number} version QR Code version
 * @return {Array}          Array of coordinates
 */
exports.getPositions = function getPositions (version) {
  var size = getSymbolSize(version)

  return [
    // top-left
    [0, 0],
    // top-right
    [size - FINDER_PATTERN_SIZE, 0],
    // bottom-left
    [0, size - FINDER_PATTERN_SIZE]
  ]
}

},{"./utils":21}],10:[function(require,module,exports){
var Utils = require('./utils')

var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
var G15_BCH = Utils.getBCHDigit(G15)

/**
 * Returns format information with relative error correction bits
 *
 * The format information is a 15-bit sequence containing 5 data bits,
 * with 10 error correction bits calculated using the (15, 5) BCH code.
 *
 * @param  {Number} errorCorrectionLevel Error correction level
 * @param  {Number} mask                 Mask pattern
 * @return {Number}                      Encoded format information bits
 */
exports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {
  var data = ((errorCorrectionLevel.bit << 3) | mask)
  var d = data << 10

  while (Utils.getBCHDigit(d) - G15_BCH >= 0) {
    d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))
  }

  // xor final data with mask pattern in order to ensure that
  // no combination of Error Correction Level and data mask pattern
  // will result in an all-zero data string
  return ((data << 10) | d) ^ G15_MASK
}

},{"./utils":21}],11:[function(require,module,exports){
var BufferUtil = require('../utils/buffer')

var EXP_TABLE = BufferUtil.alloc(512)
var LOG_TABLE = BufferUtil.alloc(256)
/**
 * Precompute the log and anti-log tables for faster computation later
 *
 * For each possible value in the galois field 2^8, we will pre-compute
 * the logarithm and anti-logarithm (exponential) of this value
 *
 * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}
 */
;(function initTables () {
  var x = 1
  for (var i = 0; i < 255; i++) {
    EXP_TABLE[i] = x
    LOG_TABLE[x] = i

    x <<= 1 // multiply by 2

    // The QR code specification says to use byte-wise modulo 100011101 arithmetic.
    // This means that when a number is 256 or larger, it should be XORed with 0x11D.
    if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)
      x ^= 0x11D
    }
  }

  // Optimization: double the size of the anti-log table so that we don't need to mod 255 to
  // stay inside the bounds (because we will mainly use this table for the multiplication of
  // two GF numbers, no more).
  // @see {@link mul}
  for (i = 255; i < 512; i++) {
    EXP_TABLE[i] = EXP_TABLE[i - 255]
  }
}())

/**
 * Returns log value of n inside Galois Field
 *
 * @param  {Number} n
 * @return {Number}
 */
exports.log = function log (n) {
  if (n < 1) throw new Error('log(' + n + ')')
  return LOG_TABLE[n]
}

/**
 * Returns anti-log value of n inside Galois Field
 *
 * @param  {Number} n
 * @return {Number}
 */
exports.exp = function exp (n) {
  return EXP_TABLE[n]
}

/**
 * Multiplies two number inside Galois Field
 *
 * @param  {Number} x
 * @param  {Number} y
 * @return {Number}
 */
exports.mul = function mul (x, y) {
  if (x === 0 || y === 0) return 0

  // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized
  // @see {@link initTables}
  return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]
}

},{"../utils/buffer":28}],12:[function(require,module,exports){
var Mode = require('./mode')
var Utils = require('./utils')

function KanjiData (data) {
  this.mode = Mode.KANJI
  this.data = data
}

KanjiData.getBitsLength = function getBitsLength (length) {
  return length * 13
}

KanjiData.prototype.getLength = function getLength () {
  return this.data.length
}

KanjiData.prototype.getBitsLength = function getBitsLength () {
  return KanjiData.getBitsLength(this.data.length)
}

KanjiData.prototype.write = function (bitBuffer) {
  var i

  // In the Shift JIS system, Kanji characters are represented by a two byte combination.
  // These byte values are shifted from the JIS X 0208 values.
  // JIS X 0208 gives details of the shift coded representation.
  for (i = 0; i < this.data.length; i++) {
    var value = Utils.toSJIS(this.data[i])

    // For characters with Shift JIS values from 0x8140 to 0x9FFC:
    if (value >= 0x8140 && value <= 0x9FFC) {
      // Subtract 0x8140 from Shift JIS value
      value -= 0x8140

    // For characters with Shift JIS values from 0xE040 to 0xEBBF
    } else if (value >= 0xE040 && value <= 0xEBBF) {
      // Subtract 0xC140 from Shift JIS value
      value -= 0xC140
    } else {
      throw new Error(
        'Invalid SJIS character: ' + this.data[i] + '\n' +
        'Make sure your charset is UTF-8')
    }

    // Multiply most significant byte of result by 0xC0
    // and add least significant byte to product
    value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)

    // Convert result to a 13-bit binary string
    bitBuffer.put(value, 13)
  }
}

module.exports = KanjiData

},{"./mode":14,"./utils":21}],13:[function(require,module,exports){
/**
 * Data mask pattern reference
 * @type {Object}
 */
exports.Patterns = {
  PATTERN000: 0,
  PATTERN001: 1,
  PATTERN010: 2,
  PATTERN011: 3,
  PATTERN100: 4,
  PATTERN101: 5,
  PATTERN110: 6,
  PATTERN111: 7
}

/**
 * Weighted penalty scores for the undesirable features
 * @type {Object}
 */
var PenaltyScores = {
  N1: 3,
  N2: 3,
  N3: 40,
  N4: 10
}

/**
 * Check if mask pattern value is valid
 *
 * @param  {Number}  mask    Mask pattern
 * @return {Boolean}         true if valid, false otherwise
 */
exports.isValid = function isValid (mask) {
  return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7
}

/**
 * Returns mask pattern from a value.
 * If value is not valid, returns undefined
 *
 * @param  {Number|String} value        Mask pattern value
 * @return {Number}                     Valid mask pattern or undefined
 */
exports.from = function from (value) {
  return exports.isValid(value) ? parseInt(value, 10) : undefined
}

/**
* Find adjacent modules in row/column with the same color
* and assign a penalty value.
*
* Points: N1 + i
* i is the amount by which the number of adjacent modules of the same color exceeds 5
*/
exports.getPenaltyN1 = function getPenaltyN1 (data) {
  var size = data.size
  var points = 0
  var sameCountCol = 0
  var sameCountRow = 0
  var lastCol = null
  var lastRow = null

  for (var row = 0; row < size; row++) {
    sameCountCol = sameCountRow = 0
    lastCol = lastRow = null

    for (var col = 0; col < size; col++) {
      var module = data.get(row, col)
      if (module === lastCol) {
        sameCountCol++
      } else {
        if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)
        lastCol = module
        sameCountCol = 1
      }

      module = data.get(col, row)
      if (module === lastRow) {
        sameCountRow++
      } else {
        if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)
        lastRow = module
        sameCountRow = 1
      }
    }

    if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)
    if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)
  }

  return points
}

/**
 * Find 2x2 blocks with the same color and assign a penalty value
 *
 * Points: N2 * (m - 1) * (n - 1)
 */
exports.getPenaltyN2 = function getPenaltyN2 (data) {
  var size = data.size
  var points = 0

  for (var row = 0; row < size - 1; row++) {
    for (var col = 0; col < size - 1; col++) {
      var last = data.get(row, col) +
        data.get(row, col + 1) +
        data.get(row + 1, col) +
        data.get(row + 1, col + 1)

      if (last === 4 || last === 0) points++
    }
  }

  return points * PenaltyScores.N2
}

/**
 * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,
 * preceded or followed by light area 4 modules wide
 *
 * Points: N3 * number of pattern found
 */
exports.getPenaltyN3 = function getPenaltyN3 (data) {
  var size = data.size
  var points = 0
  var bitsCol = 0
  var bitsRow = 0

  for (var row = 0; row < size; row++) {
    bitsCol = bitsRow = 0
    for (var col = 0; col < size; col++) {
      bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)
      if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++

      bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)
      if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++
    }
  }

  return points * PenaltyScores.N3
}

/**
 * Calculate proportion of dark modules in entire symbol
 *
 * Points: N4 * k
 *
 * k is the rating of the deviation of the proportion of dark modules
 * in the symbol from 50% in steps of 5%
 */
exports.getPenaltyN4 = function getPenaltyN4 (data) {
  var darkCount = 0
  var modulesCount = data.data.length

  for (var i = 0; i < modulesCount; i++) darkCount += data.data[i]

  var k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)

  return k * PenaltyScores.N4
}

/**
 * Return mask value at given position
 *
 * @param  {Number} maskPattern Pattern reference value
 * @param  {Number} i           Row
 * @param  {Number} j           Column
 * @return {Boolean}            Mask value
 */
function getMaskAt (maskPattern, i, j) {
  switch (maskPattern) {
    case exports.Patterns.PATTERN000: return (i + j) % 2 === 0
    case exports.Patterns.PATTERN001: return i % 2 === 0
    case exports.Patterns.PATTERN010: return j % 3 === 0
    case exports.Patterns.PATTERN011: return (i + j) % 3 === 0
    case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0
    case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0
    case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0
    case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0

    default: throw new Error('bad maskPattern:' + maskPattern)
  }
}

/**
 * Apply a mask pattern to a BitMatrix
 *
 * @param  {Number}    pattern Pattern reference number
 * @param  {BitMatrix} data    BitMatrix data
 */
exports.applyMask = function applyMask (pattern, data) {
  var size = data.size

  for (var col = 0; col < size; col++) {
    for (var row = 0; row < size; row++) {
      if (data.isReserved(row, col)) continue
      data.xor(row, col, getMaskAt(pattern, row, col))
    }
  }
}

/**
 * Returns the best mask pattern for data
 *
 * @param  {BitMatrix} data
 * @return {Number} Mask pattern reference number
 */
exports.getBestMask = function getBestMask (data, setupFormatFunc) {
  var numPatterns = Object.keys(exports.Patterns).length
  var bestPattern = 0
  var lowerPenalty = Infinity

  for (var p = 0; p < numPatterns; p++) {
    setupFormatFunc(p)
    exports.applyMask(p, data)

    // Calculate penalty
    var penalty =
      exports.getPenaltyN1(data) +
      exports.getPenaltyN2(data) +
      exports.getPenaltyN3(data) +
      exports.getPenaltyN4(data)

    // Undo previously applied mask
    exports.applyMask(p, data)

    if (penalty < lowerPenalty) {
      lowerPenalty = penalty
      bestPattern = p
    }
  }

  return bestPattern
}

},{}],14:[function(require,module,exports){
var VersionCheck = require('./version-check')
var Regex = require('./regex')

/**
 * Numeric mode encodes data from the decimal digit set (0 - 9)
 * (byte values 30HEX to 39HEX).
 * Normally, 3 data characters are represented by 10 bits.
 *
 * @type {Object}
 */
exports.NUMERIC = {
  id: 'Numeric',
  bit: 1 << 0,
  ccBits: [10, 12, 14]
}

/**
 * Alphanumeric mode encodes data from a set of 45 characters,
 * i.e. 10 numeric digits (0 - 9),
 *      26 alphabetic characters (A - Z),
 *   and 9 symbols (SP, $, %, *, +, -, ., /, :).
 * Normally, two input characters are represented by 11 bits.
 *
 * @type {Object}
 */
exports.ALPHANUMERIC = {
  id: 'Alphanumeric',
  bit: 1 << 1,
  ccBits: [9, 11, 13]
}

/**
 * In byte mode, data is encoded at 8 bits per character.
 *
 * @type {Object}
 */
exports.BYTE = {
  id: 'Byte',
  bit: 1 << 2,
  ccBits: [8, 16, 16]
}

/**
 * The Kanji mode efficiently encodes Kanji characters in accordance with
 * the Shift JIS system based on JIS X 0208.
 * The Shift JIS values are shifted from the JIS X 0208 values.
 * JIS X 0208 gives details of the shift coded representation.
 * Each two-byte character value is compacted to a 13-bit binary codeword.
 *
 * @type {Object}
 */
exports.KANJI = {
  id: 'Kanji',
  bit: 1 << 3,
  ccBits: [8, 10, 12]
}

/**
 * Mixed mode will contain a sequences of data in a combination of any of
 * the modes described above
 *
 * @type {Object}
 */
exports.MIXED = {
  bit: -1
}

/**
 * Returns the number of bits needed to store the data length
 * according to QR Code specifications.
 *
 * @param  {Mode}   mode    Data mode
 * @param  {Number} version QR Code version
 * @return {Number}         Number of bits
 */
exports.getCharCountIndicator = function getCharCountIndicator (mode, version) {
  if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)

  if (!VersionCheck.isValid(version)) {
    throw new Error('Invalid version: ' + version)
  }

  if (version >= 1 && version < 10) return mode.ccBits[0]
  else if (version < 27) return mode.ccBits[1]
  return mode.ccBits[2]
}

/**
 * Returns the most efficient mode to store the specified data
 *
 * @param  {String} dataStr Input data string
 * @return {Mode}           Best mode
 */
exports.getBestModeForData = function getBestModeForData (dataStr) {
  if (Regex.testNumeric(dataStr)) return exports.NUMERIC
  else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC
  else if (Regex.testKanji(dataStr)) return exports.KANJI
  else return exports.BYTE
}

/**
 * Return mode name as string
 *
 * @param {Mode} mode Mode object
 * @returns {String}  Mode name
 */
exports.toString = function toString (mode) {
  if (mode && mode.id) return mode.id
  throw new Error('Invalid mode')
}

/**
 * Check if input param is a valid mode object
 *
 * @param   {Mode}    mode Mode object
 * @returns {Boolean} True if valid mode, false otherwise
 */
exports.isValid = function isValid (mode) {
  return mode && mode.bit && mode.ccBits
}

/**
 * Get mode object from its name
 *
 * @param   {String} string Mode name
 * @returns {Mode}          Mode object
 */
function fromString (string) {
  if (typeof string !== 'string') {
    throw new Error('Param is not a string')
  }

  var lcStr = string.toLowerCase()

  switch (lcStr) {
    case 'numeric':
      return exports.NUMERIC
    case 'alphanumeric':
      return exports.ALPHANUMERIC
    case 'kanji':
      return exports.KANJI
    case 'byte':
      return exports.BYTE
    default:
      throw new Error('Unknown mode: ' + string)
  }
}

/**
 * Returns mode from a value.
 * If value is not a valid mode, returns defaultValue
 *
 * @param  {Mode|String} value        Encoding mode
 * @param  {Mode}        defaultValue Fallback value
 * @return {Mode}                     Encoding mode
 */
exports.from = function from (value, defaultValue) {
  if (exports.isValid(value)) {
    return value
  }

  try {
    return fromString(value)
  } catch (e) {
    return defaultValue
  }
}

},{"./regex":19,"./version-check":22}],15:[function(require,module,exports){
var Mode = require('./mode')

function NumericData (data) {
  this.mode = Mode.NUMERIC
  this.data = data.toString()
}

NumericData.getBitsLength = function getBitsLength (length) {
  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)
}

NumericData.prototype.getLength = function getLength () {
  return this.data.length
}

NumericData.prototype.getBitsLength = function getBitsLength () {
  return NumericData.getBitsLength(this.data.length)
}

NumericData.prototype.write = function write (bitBuffer) {
  var i, group, value

  // The input data string is divided into groups of three digits,
  // and each group is converted to its 10-bit binary equivalent.
  for (i = 0; i + 3 <= this.data.length; i += 3) {
    group = this.data.substr(i, 3)
    value = parseInt(group, 10)

    bitBuffer.put(value, 10)
  }

  // If the number of input digits is not an exact multiple of three,
  // the final one or two digits are converted to 4 or 7 bits respectively.
  var remainingNum = this.data.length - i
  if (remainingNum > 0) {
    group = this.data.substr(i)
    value = parseInt(group, 10)

    bitBuffer.put(value, remainingNum * 3 + 1)
  }
}

module.exports = NumericData

},{"./mode":14}],16:[function(require,module,exports){
var BufferUtil = require('../utils/buffer')
var GF = require('./galois-field')

/**
 * Multiplies two polynomials inside Galois Field
 *
 * @param  {Buffer} p1 Polynomial
 * @param  {Buffer} p2 Polynomial
 * @return {Buffer}    Product of p1 and p2
 */
exports.mul = function mul (p1, p2) {
  var coeff = BufferUtil.alloc(p1.length + p2.length - 1)

  for (var i = 0; i < p1.length; i++) {
    for (var j = 0; j < p2.length; j++) {
      coeff[i + j] ^= GF.mul(p1[i], p2[j])
    }
  }

  return coeff
}

/**
 * Calculate the remainder of polynomials division
 *
 * @param  {Buffer} divident Polynomial
 * @param  {Buffer} divisor  Polynomial
 * @return {Buffer}          Remainder
 */
exports.mod = function mod (divident, divisor) {
  var result = BufferUtil.from(divident)

  while ((result.length - divisor.length) >= 0) {
    var coeff = result[0]

    for (var i = 0; i < divisor.length; i++) {
      result[i] ^= GF.mul(divisor[i], coeff)
    }

    // remove all zeros from buffer head
    var offset = 0
    while (offset < result.length && result[offset] === 0) offset++
    result = result.slice(offset)
  }

  return result
}

/**
 * Generate an irreducible generator polynomial of specified degree
 * (used by Reed-Solomon encoder)
 *
 * @param  {Number} degree Degree of the generator polynomial
 * @return {Buffer}        Buffer containing polynomial coefficients
 */
exports.generateECPolynomial = function generateECPolynomial (degree) {
  var poly = BufferUtil.from([1])
  for (var i = 0; i < degree; i++) {
    poly = exports.mul(poly, [1, GF.exp(i)])
  }

  return poly
}

},{"../utils/buffer":28,"./galois-field":11}],17:[function(require,module,exports){
var BufferUtil = require('../utils/buffer')
var Utils = require('./utils')
var ECLevel = require('./error-correction-level')
var BitBuffer = require('./bit-buffer')
var BitMatrix = require('./bit-matrix')
var AlignmentPattern = require('./alignment-pattern')
var FinderPattern = require('./finder-pattern')
var MaskPattern = require('./mask-pattern')
var ECCode = require('./error-correction-code')
var ReedSolomonEncoder = require('./reed-solomon-encoder')
var Version = require('./version')
var FormatInfo = require('./format-info')
var Mode = require('./mode')
var Segments = require('./segments')
var isArray = require('isarray')

/**
 * QRCode for JavaScript
 *
 * modified by Ryan Day for nodejs support
 * Copyright (c) 2011 Ryan Day
 *
 * Licensed under the MIT license:
 *   http://www.opensource.org/licenses/mit-license.php
 *
//---------------------------------------------------------------------
// QRCode for JavaScript
//
// Copyright (c) 2009 Kazuhiko Arase
//
// URL: http://www.d-project.com/
//
// Licensed under the MIT license:
//   http://www.opensource.org/licenses/mit-license.php
//
// The word "QR Code" is registered trademark of
// DENSO WAVE INCORPORATED
//   http://www.denso-wave.com/qrcode/faqpatent-e.html
//
//---------------------------------------------------------------------
*/

/**
 * Add finder patterns bits to matrix
 *
 * @param  {BitMatrix} matrix  Modules matrix
 * @param  {Number}    version QR Code version
 */
function setupFinderPattern (matrix, version) {
  var size = matrix.size
  var pos = FinderPattern.getPositions(version)

  for (var i = 0; i < pos.length; i++) {
    var row = pos[i][0]
    var col = pos[i][1]

    for (var r = -1; r <= 7; r++) {
      if (row + r <= -1 || size <= row + r) continue

      for (var c = -1; c <= 7; c++) {
        if (col + c <= -1 || size <= col + c) continue

        if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||
          (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||
          (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {
          matrix.set(row + r, col + c, true, true)
        } else {
          matrix.set(row + r, col + c, false, true)
        }
      }
    }
  }
}

/**
 * Add timing pattern bits to matrix
 *
 * Note: this function must be called before {@link setupAlignmentPattern}
 *
 * @param  {BitMatrix} matrix Modules matrix
 */
function setupTimingPattern (matrix) {
  var size = matrix.size

  for (var r = 8; r < size - 8; r++) {
    var value = r % 2 === 0
    matrix.set(r, 6, value, true)
    matrix.set(6, r, value, true)
  }
}

/**
 * Add alignment patterns bits to matrix
 *
 * Note: this function must be called after {@link setupTimingPattern}
 *
 * @param  {BitMatrix} matrix  Modules matrix
 * @param  {Number}    version QR Code version
 */
function setupAlignmentPattern (matrix, version) {
  var pos = AlignmentPattern.getPositions(version)

  for (var i = 0; i < pos.length; i++) {
    var row = pos[i][0]
    var col = pos[i][1]

    for (var r = -2; r <= 2; r++) {
      for (var c = -2; c <= 2; c++) {
        if (r === -2 || r === 2 || c === -2 || c === 2 ||
          (r === 0 && c === 0)) {
          matrix.set(row + r, col + c, true, true)
        } else {
          matrix.set(row + r, col + c, false, true)
        }
      }
    }
  }
}

/**
 * Add version info bits to matrix
 *
 * @param  {BitMatrix} matrix  Modules matrix
 * @param  {Number}    version QR Code version
 */
function setupVersionInfo (matrix, version) {
  var size = matrix.size
  var bits = Version.getEncodedBits(version)
  var row, col, mod

  for (var i = 0; i < 18; i++) {
    row = Math.floor(i / 3)
    col = i % 3 + size - 8 - 3
    mod = ((bits >> i) & 1) === 1

    matrix.set(row, col, mod, true)
    matrix.set(col, row, mod, true)
  }
}

/**
 * Add format info bits to matrix
 *
 * @param  {BitMatrix} matrix               Modules matrix
 * @param  {ErrorCorrectionLevel}    errorCorrectionLevel Error correction level
 * @param  {Number}    maskPattern          Mask pattern reference value
 */
function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
  var size = matrix.size
  var bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)
  var i, mod

  for (i = 0; i < 15; i++) {
    mod = ((bits >> i) & 1) === 1

    // vertical
    if (i < 6) {
      matrix.set(i, 8, mod, true)
    } else if (i < 8) {
      matrix.set(i + 1, 8, mod, true)
    } else {
      matrix.set(size - 15 + i, 8, mod, true)
    }

    // horizontal
    if (i < 8) {
      matrix.set(8, size - i - 1, mod, true)
    } else if (i < 9) {
      matrix.set(8, 15 - i - 1 + 1, mod, true)
    } else {
      matrix.set(8, 15 - i - 1, mod, true)
    }
  }

  // fixed module
  matrix.set(size - 8, 8, 1, true)
}

/**
 * Add encoded data bits to matrix
 *
 * @param  {BitMatrix} matrix Modules matrix
 * @param  {Buffer}    data   Data codewords
 */
function setupData (matrix, data) {
  var size = matrix.size
  var inc = -1
  var row = size - 1
  var bitIndex = 7
  var byteIndex = 0

  for (var col = size - 1; col > 0; col -= 2) {
    if (col === 6) col--

    while (true) {
      for (var c = 0; c < 2; c++) {
        if (!matrix.isReserved(row, col - c)) {
          var dark = false

          if (byteIndex < data.length) {
            dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)
          }

          matrix.set(row, col - c, dark)
          bitIndex--

          if (bitIndex === -1) {
            byteIndex++
            bitIndex = 7
          }
        }
      }

      row += inc

      if (row < 0 || size <= row) {
        row -= inc
        inc = -inc
        break
      }
    }
  }
}

/**
 * Create encoded codewords from data input
 *
 * @param  {Number}   version              QR Code version
 * @param  {ErrorCorrectionLevel}   errorCorrectionLevel Error correction level
 * @param  {ByteData} data                 Data input
 * @return {Buffer}                        Buffer containing encoded codewords
 */
function createData (version, errorCorrectionLevel, segments) {
  // Prepare data buffer
  var buffer = new BitBuffer()

  segments.forEach(function (data) {
    // prefix data with mode indicator (4 bits)
    buffer.put(data.mode.bit, 4)

    // Prefix data with character count indicator.
    // The character count indicator is a string of bits that represents the
    // number of characters that are being encoded.
    // The character count indicator must be placed after the mode indicator
    // and must be a certain number of bits long, depending on the QR version
    // and data mode
    // @see {@link Mode.getCharCountIndicator}.
    buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))

    // add binary data sequence to buffer
    data.write(buffer)
  })

  // Calculate required number of bits
  var totalCodewords = Utils.getSymbolTotalCodewords(version)
  var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
  var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8

  // Add a terminator.
  // If the bit string is shorter than the total number of required bits,
  // a terminator of up to four 0s must be added to the right side of the string.
  // If the bit string is more than four bits shorter than the required number of bits,
  // add four 0s to the end.
  if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {
    buffer.put(0, 4)
  }

  // If the bit string is fewer than four bits shorter, add only the number of 0s that
  // are needed to reach the required number of bits.

  // After adding the terminator, if the number of bits in the string is not a multiple of 8,
  // pad the string on the right with 0s to make the string's length a multiple of 8.
  while (buffer.getLengthInBits() % 8 !== 0) {
    buffer.putBit(0)
  }

  // Add pad bytes if the string is still shorter than the total number of required bits.
  // Extend the buffer to fill the data capacity of the symbol corresponding to
  // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)
  // and 00010001 (0x11) alternately.
  var remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8
  for (var i = 0; i < remainingByte; i++) {
    buffer.put(i % 2 ? 0x11 : 0xEC, 8)
  }

  return createCodewords(buffer, version, errorCorrectionLevel)
}

/**
 * Encode input data with Reed-Solomon and return codewords with
 * relative error correction bits
 *
 * @param  {BitBuffer} bitBuffer            Data to encode
 * @param  {Number}    version              QR Code version
 * @param  {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
 * @return {Buffer}                         Buffer containing encoded codewords
 */
function createCodewords (bitBuffer, version, errorCorrectionLevel) {
  // Total codewords for this QR code version (Data + Error correction)
  var totalCodewords = Utils.getSymbolTotalCodewords(version)

  // Total number of error correction codewords
  var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)

  // Total number of data codewords
  var dataTotalCodewords = totalCodewords - ecTotalCodewords

  // Total number of blocks
  var ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)

  // Calculate how many blocks each group should contain
  var blocksInGroup2 = totalCodewords % ecTotalBlocks
  var blocksInGroup1 = ecTotalBlocks - blocksInGroup2

  var totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)

  var dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)
  var dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1

  // Number of EC codewords is the same for both groups
  var ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1

  // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount
  var rs = new ReedSolomonEncoder(ecCount)

  var offset = 0
  var dcData = new Array(ecTotalBlocks)
  var ecData = new Array(ecTotalBlocks)
  var maxDataSize = 0
  var buffer = BufferUtil.from(bitBuffer.buffer)

  // Divide the buffer into the required number of blocks
  for (var b = 0; b < ecTotalBlocks; b++) {
    var dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2

    // extract a block of data from buffer
    dcData[b] = buffer.slice(offset, offset + dataSize)

    // Calculate EC codewords for this data block
    ecData[b] = rs.encode(dcData[b])

    offset += dataSize
    maxDataSize = Math.max(maxDataSize, dataSize)
  }

  // Create final data
  // Interleave the data and error correction codewords from each block
  var data = BufferUtil.alloc(totalCodewords)
  var index = 0
  var i, r

  // Add data codewords
  for (i = 0; i < maxDataSize; i++) {
    for (r = 0; r < ecTotalBlocks; r++) {
      if (i < dcData[r].length) {
        data[index++] = dcData[r][i]
      }
    }
  }

  // Apped EC codewords
  for (i = 0; i < ecCount; i++) {
    for (r = 0; r < ecTotalBlocks; r++) {
      data[index++] = ecData[r][i]
    }
  }

  return data
}

/**
 * Build QR Code symbol
 *
 * @param  {String} data                 Input string
 * @param  {Number} version              QR Code version
 * @param  {ErrorCorretionLevel} errorCorrectionLevel Error level
 * @param  {MaskPattern} maskPattern     Mask pattern
 * @return {Object}                      Object containing symbol data
 */
function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
  var segments

  if (isArray(data)) {
    segments = Segments.fromArray(data)
  } else if (typeof data === 'string') {
    var estimatedVersion = version

    if (!estimatedVersion) {
      var rawSegments = Segments.rawSplit(data)

      // Estimate best version that can contain raw splitted segments
      estimatedVersion = Version.getBestVersionForData(rawSegments,
        errorCorrectionLevel)
    }

    // Build optimized segments
    // If estimated version is undefined, try with the highest version
    segments = Segments.fromString(data, estimatedVersion || 40)
  } else {
    throw new Error('Invalid data')
  }

  // Get the min version that can contain data
  var bestVersion = Version.getBestVersionForData(segments,
      errorCorrectionLevel)

  // If no version is found, data cannot be stored
  if (!bestVersion) {
    throw new Error('The amount of data is too big to be stored in a QR Code')
  }

  // If not specified, use min version as default
  if (!version) {
    version = bestVersion

  // Check if the specified version can contain the data
  } else if (version < bestVersion) {
    throw new Error('\n' +
      'The chosen QR Code version cannot contain this amount of data.\n' +
      'Minimum version required to store current data is: ' + bestVersion + '.\n'
    )
  }

  var dataBits = createData(version, errorCorrectionLevel, segments)

  // Allocate matrix buffer
  var moduleCount = Utils.getSymbolSize(version)
  var modules = new BitMatrix(moduleCount)

  // Add function modules
  setupFinderPattern(modules, version)
  setupTimingPattern(modules)
  setupAlignmentPattern(modules, version)

  // Add temporary dummy bits for format info just to set them as reserved.
  // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}
  // since the masking operation must be performed only on the encoding region.
  // These blocks will be replaced with correct values later in code.
  setupFormatInfo(modules, errorCorrectionLevel, 0)

  if (version >= 7) {
    setupVersionInfo(modules, version)
  }

  // Add data codewords
  setupData(modules, dataBits)

  if (isNaN(maskPattern)) {
    // Find best mask pattern
    maskPattern = MaskPattern.getBestMask(modules,
      setupFormatInfo.bind(null, modules, errorCorrectionLevel))
  }

  // Apply mask pattern
  MaskPattern.applyMask(maskPattern, modules)

  // Replace format info bits with correct values
  setupFormatInfo(modules, errorCorrectionLevel, maskPattern)

  return {
    modules: modules,
    version: version,
    errorCorrectionLevel: errorCorrectionLevel,
    maskPattern: maskPattern,
    segments: segments
  }
}

/**
 * QR Code
 *
 * @param {String | Array} data                 Input data
 * @param {Object} options                      Optional configurations
 * @param {Number} options.version              QR Code version
 * @param {String} options.errorCorrectionLevel Error correction level
 * @param {Function} options.toSJISFunc         Helper func to convert utf8 to sjis
 */
exports.create = function create (data, options) {
  if (typeof data === 'undefined' || data === '') {
    throw new Error('No input text')
  }

  var errorCorrectionLevel = ECLevel.M
  var version
  var mask

  if (typeof options !== 'undefined') {
    // Use higher error correction level as default
    errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)
    version = Version.from(options.version)
    mask = MaskPattern.from(options.maskPattern)

    if (options.toSJISFunc) {
      Utils.setToSJISFunction(options.toSJISFunc)
    }
  }

  return createSymbol(data, version, errorCorrectionLevel, mask)
}

},{"../utils/buffer":28,"./alignment-pattern":2,"./bit-buffer":4,"./bit-matrix":5,"./error-correction-code":7,"./error-correction-level":8,"./finder-pattern":9,"./format-info":10,"./mask-pattern":13,"./mode":14,"./reed-solomon-encoder":18,"./segments":20,"./utils":21,"./version":23,"isarray":33}],18:[function(require,module,exports){
var BufferUtil = require('../utils/buffer')
var Polynomial = require('./polynomial')
var Buffer = require('buffer').Buffer

function ReedSolomonEncoder (degree) {
  this.genPoly = undefined
  this.degree = degree

  if (this.degree) this.initialize(this.degree)
}

/**
 * Initialize the encoder.
 * The input param should correspond to the number of error correction codewords.
 *
 * @param  {Number} degree
 */
ReedSolomonEncoder.prototype.initialize = function initialize (degree) {
  // create an irreducible generator polynomial
  this.degree = degree
  this.genPoly = Polynomial.generateECPolynomial(this.degree)
}

/**
 * Encodes a chunk of data
 *
 * @param  {Buffer} data Buffer containing input data
 * @return {Buffer}      Buffer containing encoded data
 */
ReedSolomonEncoder.prototype.encode = function encode (data) {
  if (!this.genPoly) {
    throw new Error('Encoder not initialized')
  }

  // Calculate EC for this data block
  // extends data size to data+genPoly size
  var pad = BufferUtil.alloc(this.degree)
  var paddedData = Buffer.concat([data, pad], data.length + this.degree)

  // The error correction codewords are the remainder after dividing the data codewords
  // by a generator polynomial
  var remainder = Polynomial.mod(paddedData, this.genPoly)

  // return EC data blocks (last n byte, where n is the degree of genPoly)
  // If coefficients number in remainder are less than genPoly degree,
  // pad with 0s to the left to reach the needed number of coefficients
  var start = this.degree - remainder.length
  if (start > 0) {
    var buff = BufferUtil.alloc(this.degree)
    remainder.copy(buff, start)

    return buff
  }

  return remainder
}

module.exports = ReedSolomonEncoder

},{"../utils/buffer":28,"./polynomial":16,"buffer":30}],19:[function(require,module,exports){
var numeric = '[0-9]+'
var alphanumeric = '[A-Z $%*+\\-./:]+'
var kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +
  '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +
  '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +
  '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'
kanji = kanji.replace(/u/g, '\\u')

var byte = '(?:(?![A-Z0-9 $%*+\\-./:]|' + kanji + ')(?:.|[\r\n]))+'

exports.KANJI = new RegExp(kanji, 'g')
exports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\-./:]+', 'g')
exports.BYTE = new RegExp(byte, 'g')
exports.NUMERIC = new RegExp(numeric, 'g')
exports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')

var TEST_KANJI = new RegExp('^' + kanji + '$')
var TEST_NUMERIC = new RegExp('^' + numeric + '$')
var TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$')

exports.testKanji = function testKanji (str) {
  return TEST_KANJI.test(str)
}

exports.testNumeric = function testNumeric (str) {
  return TEST_NUMERIC.test(str)
}

exports.testAlphanumeric = function testAlphanumeric (str) {
  return TEST_ALPHANUMERIC.test(str)
}

},{}],20:[function(require,module,exports){
var Mode = require('./mode')
var NumericData = require('./numeric-data')
var AlphanumericData = require('./alphanumeric-data')
var ByteData = require('./byte-data')
var KanjiData = require('./kanji-data')
var Regex = require('./regex')
var Utils = require('./utils')
var dijkstra = require('dijkstrajs')

/**
 * Returns UTF8 byte length
 *
 * @param  {String} str Input string
 * @return {Number}     Number of byte
 */
function getStringByteLength (str) {
  return unescape(encodeURIComponent(str)).length
}

/**
 * Get a list of segments of the specified mode
 * from a string
 *
 * @param  {Mode}   mode Segment mode
 * @param  {String} str  String to process
 * @return {Array}       Array of object with segments data
 */
function getSegments (regex, mode, str) {
  var segments = []
  var result

  while ((result = regex.exec(str)) !== null) {
    segments.push({
      data: result[0],
      index: result.index,
      mode: mode,
      length: result[0].length
    })
  }

  return segments
}

/**
 * Extracts a series of segments with the appropriate
 * modes from a string
 *
 * @param  {String} dataStr Input string
 * @return {Array}          Array of object with segments data
 */
function getSegmentsFromString (dataStr) {
  var numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)
  var alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)
  var byteSegs
  var kanjiSegs

  if (Utils.isKanjiModeEnabled()) {
    byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)
    kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)
  } else {
    byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)
    kanjiSegs = []
  }

  var segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)

  return segs
    .sort(function (s1, s2) {
      return s1.index - s2.index
    })
    .map(function (obj) {
      return {
        data: obj.data,
        mode: obj.mode,
        length: obj.length
      }
    })
}

/**
 * Returns how many bits are needed to encode a string of
 * specified length with the specified mode
 *
 * @param  {Number} length String length
 * @param  {Mode} mode     Segment mode
 * @return {Number}        Bit length
 */
function getSegmentBitsLength (length, mode) {
  switch (mode) {
    case Mode.NUMERIC:
      return NumericData.getBitsLength(length)
    case Mode.ALPHANUMERIC:
      return AlphanumericData.getBitsLength(length)
    case Mode.KANJI:
      return KanjiData.getBitsLength(length)
    case Mode.BYTE:
      return ByteData.getBitsLength(length)
  }
}

/**
 * Merges adjacent segments which have the same mode
 *
 * @param  {Array} segs Array of object with segments data
 * @return {Array}      Array of object with segments data
 */
function mergeSegments (segs) {
  return segs.reduce(function (acc, curr) {
    var prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null
    if (prevSeg && prevSeg.mode === curr.mode) {
      acc[acc.length - 1].data += curr.data
      return acc
    }

    acc.push(curr)
    return acc
  }, [])
}

/**
 * Generates a list of all possible nodes combination which
 * will be used to build a segments graph.
 *
 * Nodes are divided by groups. Each group will contain a list of all the modes
 * in which is possible to encode the given text.
 *
 * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.
 * The group for '12345' will contain then 3 objects, one for each
 * possible encoding mode.
 *
 * Each node represents a possible segment.
 *
 * @param  {Array} segs Array of object with segments data
 * @return {Array}      Array of object with segments data
 */
function buildNodes (segs) {
  var nodes = []
  for (var i = 0; i < segs.length; i++) {
    var seg = segs[i]

    switch (seg.mode) {
      case Mode.NUMERIC:
        nodes.push([seg,
          { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },
          { data: seg.data, mode: Mode.BYTE, length: seg.length }
        ])
        break
      case Mode.ALPHANUMERIC:
        nodes.push([seg,
          { data: seg.data, mode: Mode.BYTE, length: seg.length }
        ])
        break
      case Mode.KANJI:
        nodes.push([seg,
          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }
        ])
        break
      case Mode.BYTE:
        nodes.push([
          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }
        ])
    }
  }

  return nodes
}

/**
 * Builds a graph from a list of nodes.
 * All segments in each node group will be connected with all the segments of
 * the next group and so on.
 *
 * At each connection will be assigned a weight depending on the
 * segment's byte length.
 *
 * @param  {Array} nodes    Array of object with segments data
 * @param  {Number} version QR Code version
 * @return {Object}         Graph of all possible segments
 */
function buildGraph (nodes, version) {
  var table = {}
  var graph = {'start': {}}
  var prevNodeIds = ['start']

  for (var i = 0; i < nodes.length; i++) {
    var nodeGroup = nodes[i]
    var currentNodeIds = []

    for (var j = 0; j < nodeGroup.length; j++) {
      var node = nodeGroup[j]
      var key = '' + i + j

      currentNodeIds.push(key)
      table[key] = { node: node, lastCount: 0 }
      graph[key] = {}

      for (var n = 0; n < prevNodeIds.length; n++) {
        var prevNodeId = prevNodeIds[n]

        if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {
          graph[prevNodeId][key] =
            getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -
            getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)

          table[prevNodeId].lastCount += node.length
        } else {
          if (table[prevNodeId]) table[prevNodeId].lastCount = node.length

          graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +
            4 + Mode.getCharCountIndicator(node.mode, version) // switch cost
        }
      }
    }

    prevNodeIds = currentNodeIds
  }

  for (n = 0; n < prevNodeIds.length; n++) {
    graph[prevNodeIds[n]]['end'] = 0
  }

  return { map: graph, table: table }
}

/**
 * Builds a segment from a specified data and mode.
 * If a mode is not specified, the more suitable will be used.
 *
 * @param  {String} data             Input data
 * @param  {Mode | String} modesHint Data mode
 * @return {Segment}                 Segment
 */
function buildSingleSegment (data, modesHint) {
  var mode
  var bestMode = Mode.getBestModeForData(data)

  mode = Mode.from(modesHint, bestMode)

  // Make sure data can be encoded
  if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {
    throw new Error('"' + data + '"' +
      ' cannot be encoded with mode ' + Mode.toString(mode) +
      '.\n Suggested mode is: ' + Mode.toString(bestMode))
  }

  // Use Mode.BYTE if Kanji support is disabled
  if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {
    mode = Mode.BYTE
  }

  switch (mode) {
    case Mode.NUMERIC:
      return new NumericData(data)

    case Mode.ALPHANUMERIC:
      return new AlphanumericData(data)

    case Mode.KANJI:
      return new KanjiData(data)

    case Mode.BYTE:
      return new ByteData(data)
  }
}

/**
 * Builds a list of segments from an array.
 * Array can contain Strings or Objects with segment's info.
 *
 * For each item which is a string, will be generated a segment with the given
 * string and the more appropriate encoding mode.
 *
 * For each item which is an object, will be generated a segment with the given
 * data and mode.
 * Objects must contain at least the property "data".
 * If property "mode" is not present, the more suitable mode will be used.
 *
 * @param  {Array} array Array of objects with segments data
 * @return {Array}       Array of Segments
 */
exports.fromArray = function fromArray (array) {
  return array.reduce(function (acc, seg) {
    if (typeof seg === 'string') {
      acc.push(buildSingleSegment(seg, null))
    } else if (seg.data) {
      acc.push(buildSingleSegment(seg.data, seg.mode))
    }

    return acc
  }, [])
}

/**
 * Builds an optimized sequence of segments from a string,
 * which will produce the shortest possible bitstream.
 *
 * @param  {String} data    Input string
 * @param  {Number} version QR Code version
 * @return {Array}          Array of segments
 */
exports.fromString = function fromString (data, version) {
  var segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())

  var nodes = buildNodes(segs)
  var graph = buildGraph(nodes, version)
  var path = dijkstra.find_path(graph.map, 'start', 'end')

  var optimizedSegs = []
  for (var i = 1; i < path.length - 1; i++) {
    optimizedSegs.push(graph.table[path[i]].node)
  }

  return exports.fromArray(mergeSegments(optimizedSegs))
}

/**
 * Splits a string in various segments with the modes which
 * best represent their content.
 * The produced segments are far from being optimized.
 * The output of this function is only used to estimate a QR Code version
 * which may contain the data.
 *
 * @param  {string} data Input string
 * @return {Array}       Array of segments
 */
exports.rawSplit = function rawSplit (data) {
  return exports.fromArray(
    getSegmentsFromString(data, Utils.isKanjiModeEnabled())
  )
}

},{"./alphanumeric-data":3,"./byte-data":6,"./kanji-data":12,"./mode":14,"./numeric-data":15,"./regex":19,"./utils":21,"dijkstrajs":31}],21:[function(require,module,exports){
var toSJISFunction
var CODEWORDS_COUNT = [
  0, // Not used
  26, 44, 70, 100, 134, 172, 196, 242, 292, 346,
  404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,
  1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,
  2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706
]

/**
 * Returns the QR Code size for the specified version
 *
 * @param  {Number} version QR Code version
 * @return {Number}         size of QR code
 */
exports.getSymbolSize = function getSymbolSize (version) {
  if (!version) throw new Error('"version" cannot be null or undefined')
  if (version < 1 || version > 40) throw new Error('"version" should be in range from 1 to 40')
  return version * 4 + 17
}

/**
 * Returns the total number of codewords used to store data and EC information.
 *
 * @param  {Number} version QR Code version
 * @return {Number}         Data length in bits
 */
exports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {
  return CODEWORDS_COUNT[version]
}

/**
 * Encode data with Bose-Chaudhuri-Hocquenghem
 *
 * @param  {Number} data Value to encode
 * @return {Number}      Encoded value
 */
exports.getBCHDigit = function (data) {
  var digit = 0

  while (data !== 0) {
    digit++
    data >>>= 1
  }

  return digit
}

exports.setToSJISFunction = function setToSJISFunction (f) {
  if (typeof f !== 'function') {
    throw new Error('"toSJISFunc" is not a valid function.')
  }

  toSJISFunction = f
}

exports.isKanjiModeEnabled = function () {
  return typeof toSJISFunction !== 'undefined'
}

exports.toSJIS = function toSJIS (kanji) {
  return toSJISFunction(kanji)
}

},{}],22:[function(require,module,exports){
/**
 * Check if QR Code version is valid
 *
 * @param  {Number}  version QR Code version
 * @return {Boolean}         true if valid version, false otherwise
 */
exports.isValid = function isValid (version) {
  return !isNaN(version) && version >= 1 && version <= 40
}

},{}],23:[function(require,module,exports){
var Utils = require('./utils')
var ECCode = require('./error-correction-code')
var ECLevel = require('./error-correction-level')
var Mode = require('./mode')
var VersionCheck = require('./version-check')
var isArray = require('isarray')

// Generator polynomial used to encode version information
var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)
var G18_BCH = Utils.getBCHDigit(G18)

function getBestVersionForDataLength (mode, length, errorCorrectionLevel) {
  for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {
      return currentVersion
    }
  }

  return undefined
}

function getReservedBitsCount (mode, version) {
  // Character count indicator + mode indicator bits
  return Mode.getCharCountIndicator(mode, version) + 4
}

function getTotalBitsFromDataArray (segments, version) {
  var totalBits = 0

  segments.forEach(function (data) {
    var reservedBits = getReservedBitsCount(data.mode, version)
    totalBits += reservedBits + data.getBitsLength()
  })

  return totalBits
}

function getBestVersionForMixedData (segments, errorCorrectionLevel) {
  for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
    var length = getTotalBitsFromDataArray(segments, currentVersion)
    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {
      return currentVersion
    }
  }

  return undefined
}

/**
 * Returns version number from a value.
 * If value is not a valid version, returns defaultValue
 *
 * @param  {Number|String} value        QR Code version
 * @param  {Number}        defaultValue Fallback value
 * @return {Number}                     QR Code version number
 */
exports.from = function from (value, defaultValue) {
  if (VersionCheck.isValid(value)) {
    return parseInt(value, 10)
  }

  return defaultValue
}

/**
 * Returns how much data can be stored with the specified QR code version
 * and error correction level
 *
 * @param  {Number} version              QR Code version (1-40)
 * @param  {Number} errorCorrectionLevel Error correction level
 * @param  {Mode}   mode                 Data mode
 * @return {Number}                      Quantity of storable data
 */
exports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {
  if (!VersionCheck.isValid(version)) {
    throw new Error('Invalid QR Code version')
  }

  // Use Byte mode as default
  if (typeof mode === 'undefined') mode = Mode.BYTE

  // Total codewords for this QR code version (Data + Error correction)
  var totalCodewords = Utils.getSymbolTotalCodewords(version)

  // Total number of error correction codewords
  var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)

  // Total number of data codewords
  var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8

  if (mode === Mode.MIXED) return dataTotalCodewordsBits

  var usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)

  // Return max number of storable codewords
  switch (mode) {
    case Mode.NUMERIC:
      return Math.floor((usableBits / 10) * 3)

    case Mode.ALPHANUMERIC:
      return Math.floor((usableBits / 11) * 2)

    case Mode.KANJI:
      return Math.floor(usableBits / 13)

    case Mode.BYTE:
    default:
      return Math.floor(usableBits / 8)
  }
}

/**
 * Returns the minimum version needed to contain the amount of data
 *
 * @param  {Segment} data                    Segment of data
 * @param  {Number} [errorCorrectionLevel=H] Error correction level
 * @param  {Mode} mode                       Data mode
 * @return {Number}                          QR Code version
 */
exports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {
  var seg

  var ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)

  if (isArray(data)) {
    if (data.length > 1) {
      return getBestVersionForMixedData(data, ecl)
    }

    if (data.length === 0) {
      return 1
    }

    seg = data[0]
  } else {
    seg = data
  }

  return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)
}

/**
 * Returns version information with relative error correction bits
 *
 * The version information is included in QR Code symbols of version 7 or larger.
 * It consists of an 18-bit sequence containing 6 data bits,
 * with 12 error correction bits calculated using the (18, 6) Golay code.
 *
 * @param  {Number} version QR Code version
 * @return {Number}         Encoded version info bits
 */
exports.getEncodedBits = function getEncodedBits (version) {
  if (!VersionCheck.isValid(version) || version < 7) {
    throw new Error('Invalid QR Code version')
  }

  var d = version << 12

  while (Utils.getBCHDigit(d) - G18_BCH >= 0) {
    d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))
  }

  return (version << 12) | d
}

},{"./error-correction-code":7,"./error-correction-level":8,"./mode":14,"./utils":21,"./version-check":22,"isarray":33}],24:[function(require,module,exports){

var canPromise = require('./can-promise')

var QRCode = require('./core/qrcode')
var CanvasRenderer = require('./renderer/canvas')
var SvgRenderer = require('./renderer/svg-tag.js')

function renderCanvas (renderFunc, canvas, text, opts, cb) {
  var args = [].slice.call(arguments, 1)
  var argsNum = args.length
  var isLastArgCb = typeof args[argsNum - 1] === 'function'

  if (!isLastArgCb && !canPromise()) {
    throw new Error('Callback required as last argument')
  }

  if (isLastArgCb) {
    if (argsNum < 2) {
      throw new Error('Too few arguments provided')
    }

    if (argsNum === 2) {
      cb = text
      text = canvas
      canvas = opts = undefined
    } else if (argsNum === 3) {
      if (canvas.getContext && typeof cb === 'undefined') {
        cb = opts
        opts = undefined
      } else {
        cb = opts
        opts = text
        text = canvas
        canvas = undefined
      }
    }
  } else {
    if (argsNum < 1) {
      throw new Error('Too few arguments provided')
    }

    if (argsNum === 1) {
      text = canvas
      canvas = opts = undefined
    } else if (argsNum === 2 && !canvas.getContext) {
      opts = text
      text = canvas
      canvas = undefined
    }

    return new Promise(function (resolve, reject) {
      try {
        var data = QRCode.create(text, opts)
        resolve(renderFunc(data, canvas, opts))
      } catch (e) {
        reject(e)
      }
    })
  }

  try {
    var data = QRCode.create(text, opts)
    cb(null, renderFunc(data, canvas, opts))
  } catch (e) {
    cb(e)
  }
}

exports.create = QRCode.create
exports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)
exports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)

// only svg for now.
exports.toString = renderCanvas.bind(null, function (data, _, opts) {
  return SvgRenderer.render(data, opts)
})

},{"./can-promise":1,"./core/qrcode":17,"./renderer/canvas":25,"./renderer/svg-tag.js":26}],25:[function(require,module,exports){
var Utils = require('./utils')

function clearCanvas (ctx, canvas, size) {
  ctx.clearRect(0, 0, canvas.width, canvas.height)

  if (!canvas.style) canvas.style = {}
  canvas.height = size
  canvas.width = size
  canvas.style.height = size + 'px'
  canvas.style.width = size + 'px'
}

function getCanvasElement () {
  try {
    return document.createElement('canvas')
  } catch (e) {
    throw new Error('You need to specify a canvas element')
  }
}

exports.render = function render (qrData, canvas, options) {
  var opts = options
  var canvasEl = canvas

  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
    opts = canvas
    canvas = undefined
  }

  if (!canvas) {
    canvasEl = getCanvasElement()
  }

  opts = Utils.getOptions(opts)
  var size = Utils.getImageWidth(qrData.modules.size, opts)

  var ctx = canvasEl.getContext('2d')
  var image = ctx.createImageData(size, size)
  Utils.qrToImageData(image.data, qrData, opts)

  clearCanvas(ctx, canvasEl, size)
  ctx.putImageData(image, 0, 0)

  return canvasEl
}

exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
  var opts = options

  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
    opts = canvas
    canvas = undefined
  }

  if (!opts) opts = {}

  var canvasEl = exports.render(qrData, canvas, opts)

  var type = opts.type || 'image/png'
  var rendererOpts = opts.rendererOpts || {}

  return canvasEl.toDataURL(type, rendererOpts.quality)
}

},{"./utils":27}],26:[function(require,module,exports){
var Utils = require('./utils')

function getColorAttrib (color, attrib) {
  var alpha = color.a / 255
  var str = attrib + '="' + color.hex + '"'

  return alpha < 1
    ? str + ' ' + attrib + '-opacity="' + alpha.toFixed(2).slice(1) + '"'
    : str
}

function svgCmd (cmd, x, y) {
  var str = cmd + x
  if (typeof y !== 'undefined') str += ' ' + y

  return str
}

function qrToPath (data, size, margin) {
  var path = ''
  var moveBy = 0
  var newRow = false
  var lineLength = 0

  for (var i = 0; i < data.length; i++) {
    var col = Math.floor(i % size)
    var row = Math.floor(i / size)

    if (!col && !newRow) newRow = true

    if (data[i]) {
      lineLength++

      if (!(i > 0 && col > 0 && data[i - 1])) {
        path += newRow
          ? svgCmd('M', col + margin, 0.5 + row + margin)
          : svgCmd('m', moveBy, 0)

        moveBy = 0
        newRow = false
      }

      if (!(col + 1 < size && data[i + 1])) {
        path += svgCmd('h', lineLength)
        lineLength = 0
      }
    } else {
      moveBy++
    }
  }

  return path
}

exports.render = function render (qrData, options, cb) {
  var opts = Utils.getOptions(options)
  var size = qrData.modules.size
  var data = qrData.modules.data
  var qrcodesize = size + opts.margin * 2

  var bg = !opts.color.light.a
    ? ''
    : '<path ' + getColorAttrib(opts.color.light, 'fill') +
      ' d="M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z"/>'

  var path =
    '<path ' + getColorAttrib(opts.color.dark, 'stroke') +
    ' d="' + qrToPath(data, size, opts.margin) + '"/>'

  var viewBox = 'viewBox="' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '"'

  var width = !opts.width ? '' : 'width="' + opts.width + '" height="' + opts.width + '" '

  var svgTag = '<svg xmlns="http://www.w3.org/2000/svg" ' + width + viewBox + ' shape-rendering="crispEdges">' + bg + path + '</svg>\n'

  if (typeof cb === 'function') {
    cb(null, svgTag)
  }

  return svgTag
}

},{"./utils":27}],27:[function(require,module,exports){
function hex2rgba (hex) {
  if (typeof hex === 'number') {
    hex = hex.toString()
  }

  if (typeof hex !== 'string') {
    throw new Error('Color should be defined as hex string')
  }

  var hexCode = hex.slice().replace('#', '').split('')
  if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {
    throw new Error('Invalid hex color: ' + hex)
  }

  // Convert from short to long form (fff -> ffffff)
  if (hexCode.length === 3 || hexCode.length === 4) {
    hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {
      return [c, c]
    }))
  }

  // Add default alpha value
  if (hexCode.length === 6) hexCode.push('F', 'F')

  var hexValue = parseInt(hexCode.join(''), 16)

  return {
    r: (hexValue >> 24) & 255,
    g: (hexValue >> 16) & 255,
    b: (hexValue >> 8) & 255,
    a: hexValue & 255,
    hex: '#' + hexCode.slice(0, 6).join('')
  }
}

exports.getOptions = function getOptions (options) {
  if (!options) options = {}
  if (!options.color) options.color = {}

  var margin = typeof options.margin === 'undefined' ||
    options.margin === null ||
    options.margin < 0 ? 4 : options.margin

  var width = options.width && options.width >= 21 ? options.width : undefined
  var scale = options.scale || 4

  return {
    width: width,
    scale: width ? 4 : scale,
    margin: margin,
    color: {
      dark: hex2rgba(options.color.dark || '#000000ff'),
      light: hex2rgba(options.color.light || '#ffffffff')
    },
    type: options.type,
    rendererOpts: options.rendererOpts || {}
  }
}

exports.getScale = function getScale (qrSize, opts) {
  return opts.width && opts.width >= qrSize + opts.margin * 2
    ? opts.width / (qrSize + opts.margin * 2)
    : opts.scale
}

exports.getImageWidth = function getImageWidth (qrSize, opts) {
  var scale = exports.getScale(qrSize, opts)
  return Math.floor((qrSize + opts.margin * 2) * scale)
}

exports.qrToImageData = function qrToImageData (imgData, qr, opts) {
  var size = qr.modules.size
  var data = qr.modules.data
  var scale = exports.getScale(size, opts)
  var symbolSize = Math.floor((size + opts.margin * 2) * scale)
  var scaledMargin = opts.margin * scale
  var palette = [opts.color.light, opts.color.dark]

  for (var i = 0; i < symbolSize; i++) {
    for (var j = 0; j < symbolSize; j++) {
      var posDst = (i * symbolSize + j) * 4
      var pxColor = opts.color.light

      if (i >= scaledMargin && j >= scaledMargin &&
        i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {
        var iSrc = Math.floor((i - scaledMargin) / scale)
        var jSrc = Math.floor((j - scaledMargin) / scale)
        pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]
      }

      imgData[posDst++] = pxColor.r
      imgData[posDst++] = pxColor.g
      imgData[posDst++] = pxColor.b
      imgData[posDst] = pxColor.a
    }
  }
}

},{}],28:[function(require,module,exports){
/**
 * Implementation of a subset of node.js Buffer methods for the browser.
 * Based on https://github.com/feross/buffer
 */

/* eslint-disable no-proto */

'use strict'

var isArray = require('isarray')

function typedArraySupport () {
  // Can typed array instances be augmented?
  try {
    var arr = new Uint8Array(1)
    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
    return arr.foo() === 42
  } catch (e) {
    return false
  }
}

Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()

var K_MAX_LENGTH = Buffer.TYPED_ARRAY_SUPPORT
    ? 0x7fffffff
    : 0x3fffffff

function Buffer (arg, offset, length) {
  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
    return new Buffer(arg, offset, length)
  }

  if (typeof arg === 'number') {
    return allocUnsafe(this, arg)
  }

  return from(this, arg, offset, length)
}

if (Buffer.TYPED_ARRAY_SUPPORT) {
  Buffer.prototype.__proto__ = Uint8Array.prototype
  Buffer.__proto__ = Uint8Array

  // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
  if (typeof Symbol !== 'undefined' && Symbol.species &&
      Buffer[Symbol.species] === Buffer) {
    Object.defineProperty(Buffer, Symbol.species, {
      value: null,
      configurable: true,
      enumerable: false,
      writable: false
    })
  }
}

function checked (length) {
  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
  // length is NaN (which is otherwise coerced to zero.)
  if (length >= K_MAX_LENGTH) {
    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
  }
  return length | 0
}

function isnan (val) {
  return val !== val // eslint-disable-line no-self-compare
}

function createBuffer (that, length) {
  var buf
  if (Buffer.TYPED_ARRAY_SUPPORT) {
    buf = new Uint8Array(length)
    buf.__proto__ = Buffer.prototype
  } else {
    // Fallback: Return an object instance of the Buffer class
    buf = that
    if (buf === null) {
      buf = new Buffer(length)
    }
    buf.length = length
  }

  return buf
}

function allocUnsafe (that, size) {
  var buf = createBuffer(that, size < 0 ? 0 : checked(size) | 0)

  if (!Buffer.TYPED_ARRAY_SUPPORT) {
    for (var i = 0; i < size; ++i) {
      buf[i] = 0
    }
  }

  return buf
}

function fromString (that, string) {
  var length = byteLength(string) | 0
  var buf = createBuffer(that, length)

  var actual = buf.write(string)

  if (actual !== length) {
    // Writing a hex string, for example, that contains invalid characters will
    // cause everything after the first invalid character to be ignored. (e.g.
    // 'abxxcd' will be treated as 'ab')
    buf = buf.slice(0, actual)
  }

  return buf
}

function fromArrayLike (that, array) {
  var length = array.length < 0 ? 0 : checked(array.length) | 0
  var buf = createBuffer(that, length)
  for (var i = 0; i < length; i += 1) {
    buf[i] = array[i] & 255
  }
  return buf
}

function fromArrayBuffer (that, array, byteOffset, length) {
  if (byteOffset < 0 || array.byteLength < byteOffset) {
    throw new RangeError('\'offset\' is out of bounds')
  }

  if (array.byteLength < byteOffset + (length || 0)) {
    throw new RangeError('\'length\' is out of bounds')
  }

  var buf
  if (byteOffset === undefined && length === undefined) {
    buf = new Uint8Array(array)
  } else if (length === undefined) {
    buf = new Uint8Array(array, byteOffset)
  } else {
    buf = new Uint8Array(array, byteOffset, length)
  }

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    // Return an augmented `Uint8Array` instance, for best performance
    buf.__proto__ = Buffer.prototype
  } else {
    // Fallback: Return an object instance of the Buffer class
    buf = fromArrayLike(that, buf)
  }

  return buf
}

function fromObject (that, obj) {
  if (Buffer.isBuffer(obj)) {
    var len = checked(obj.length) | 0
    var buf = createBuffer(that, len)

    if (buf.length === 0) {
      return buf
    }

    obj.copy(buf, 0, 0, len)
    return buf
  }

  if (obj) {
    if ((typeof ArrayBuffer !== 'undefined' &&
        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
      if (typeof obj.length !== 'number' || isnan(obj.length)) {
        return createBuffer(that, 0)
      }
      return fromArrayLike(that, obj)
    }

    if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
      return fromArrayLike(that, obj.data)
    }
  }

  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
}

function utf8ToBytes (string, units) {
  units = units || Infinity
  var codePoint
  var length = string.length
  var leadSurrogate = null
  var bytes = []

  for (var i = 0; i < length; ++i) {
    codePoint = string.charCodeAt(i)

    // is surrogate component
    if (codePoint > 0xD7FF && codePoint < 0xE000) {
      // last char was a lead
      if (!leadSurrogate) {
        // no lead yet
        if (codePoint > 0xDBFF) {
          // unexpected trail
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        } else if (i + 1 === length) {
          // unpaired lead
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        }

        // valid lead
        leadSurrogate = codePoint

        continue
      }

      // 2 leads in a row
      if (codePoint < 0xDC00) {
        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
        leadSurrogate = codePoint
        continue
      }

      // valid surrogate pair
      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
    } else if (leadSurrogate) {
      // valid bmp char, but last char was a lead
      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
    }

    leadSurrogate = null

    // encode utf8
    if (codePoint < 0x80) {
      if ((units -= 1) < 0) break
      bytes.push(codePoint)
    } else if (codePoint < 0x800) {
      if ((units -= 2) < 0) break
      bytes.push(
        codePoint >> 0x6 | 0xC0,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x10000) {
      if ((units -= 3) < 0) break
      bytes.push(
        codePoint >> 0xC | 0xE0,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x110000) {
      if ((units -= 4) < 0) break
      bytes.push(
        codePoint >> 0x12 | 0xF0,
        codePoint >> 0xC & 0x3F | 0x80,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else {
      throw new Error('Invalid code point')
    }
  }

  return bytes
}

function byteLength (string) {
  if (Buffer.isBuffer(string)) {
    return string.length
  }
  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
    return string.byteLength
  }
  if (typeof string !== 'string') {
    string = '' + string
  }

  var len = string.length
  if (len === 0) return 0

  return utf8ToBytes(string).length
}

function blitBuffer (src, dst, offset, length) {
  for (var i = 0; i < length; ++i) {
    if ((i + offset >= dst.length) || (i >= src.length)) break
    dst[i + offset] = src[i]
  }
  return i
}

function utf8Write (buf, string, offset, length) {
  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}

function from (that, value, offset, length) {
  if (typeof value === 'number') {
    throw new TypeError('"value" argument must not be a number')
  }

  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
    return fromArrayBuffer(that, value, offset, length)
  }

  if (typeof value === 'string') {
    return fromString(that, value, offset)
  }

  return fromObject(that, value)
}

Buffer.prototype.write = function write (string, offset, length) {
  // Buffer#write(string)
  if (offset === undefined) {
    length = this.length
    offset = 0
  // Buffer#write(string, encoding)
  } else if (length === undefined && typeof offset === 'string') {
    length = this.length
    offset = 0
  // Buffer#write(string, offset[, length])
  } else if (isFinite(offset)) {
    offset = offset | 0
    if (isFinite(length)) {
      length = length | 0
    } else {
      length = undefined
    }
  }

  var remaining = this.length - offset
  if (length === undefined || length > remaining) length = remaining

  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
    throw new RangeError('Attempt to write outside buffer bounds')
  }

  return utf8Write(this, string, offset, length)
}

Buffer.prototype.slice = function slice (start, end) {
  var len = this.length
  start = ~~start
  end = end === undefined ? len : ~~end

  if (start < 0) {
    start += len
    if (start < 0) start = 0
  } else if (start > len) {
    start = len
  }

  if (end < 0) {
    end += len
    if (end < 0) end = 0
  } else if (end > len) {
    end = len
  }

  if (end < start) end = start

  var newBuf
  if (Buffer.TYPED_ARRAY_SUPPORT) {
    newBuf = this.subarray(start, end)
    // Return an augmented `Uint8Array` instance
    newBuf.__proto__ = Buffer.prototype
  } else {
    var sliceLen = end - start
    newBuf = new Buffer(sliceLen, undefined)
    for (var i = 0; i < sliceLen; ++i) {
      newBuf[i] = this[i + start]
    }
  }

  return newBuf
}

Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  if (!start) start = 0
  if (!end && end !== 0) end = this.length
  if (targetStart >= target.length) targetStart = target.length
  if (!targetStart) targetStart = 0
  if (end > 0 && end < start) end = start

  // Copy 0 bytes; we're done
  if (end === start) return 0
  if (target.length === 0 || this.length === 0) return 0

  // Fatal error conditions
  if (targetStart < 0) {
    throw new RangeError('targetStart out of bounds')
  }
  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
  if (end < 0) throw new RangeError('sourceEnd out of bounds')

  // Are we oob?
  if (end > this.length) end = this.length
  if (target.length - targetStart < end - start) {
    end = target.length - targetStart + start
  }

  var len = end - start
  var i

  if (this === target && start < targetStart && targetStart < end) {
    // descending copy from end
    for (i = len - 1; i >= 0; --i) {
      target[i + targetStart] = this[i + start]
    }
  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
    // ascending copy from start
    for (i = 0; i < len; ++i) {
      target[i + targetStart] = this[i + start]
    }
  } else {
    Uint8Array.prototype.set.call(
      target,
      this.subarray(start, start + len),
      targetStart
    )
  }

  return len
}

Buffer.prototype.fill = function fill (val, start, end) {
  // Handle string cases:
  if (typeof val === 'string') {
    if (typeof start === 'string') {
      start = 0
      end = this.length
    } else if (typeof end === 'string') {
      end = this.length
    }
    if (val.length === 1) {
      var code = val.charCodeAt(0)
      if (code < 256) {
        val = code
      }
    }
  } else if (typeof val === 'number') {
    val = val & 255
  }

  // Invalid ranges are not set to a default, so can range check early.
  if (start < 0 || this.length < start || this.length < end) {
    throw new RangeError('Out of range index')
  }

  if (end <= start) {
    return this
  }

  start = start >>> 0
  end = end === undefined ? this.length : end >>> 0

  if (!val) val = 0

  var i
  if (typeof val === 'number') {
    for (i = start; i < end; ++i) {
      this[i] = val
    }
  } else {
    var bytes = Buffer.isBuffer(val)
      ? val
      : new Buffer(val)
    var len = bytes.length
    for (i = 0; i < end - start; ++i) {
      this[i + start] = bytes[i % len]
    }
  }

  return this
}

Buffer.concat = function concat (list, length) {
  if (!isArray(list)) {
    throw new TypeError('"list" argument must be an Array of Buffers')
  }

  if (list.length === 0) {
    return createBuffer(null, 0)
  }

  var i
  if (length === undefined) {
    length = 0
    for (i = 0; i < list.length; ++i) {
      length += list[i].length
    }
  }

  var buffer = allocUnsafe(null, length)
  var pos = 0
  for (i = 0; i < list.length; ++i) {
    var buf = list[i]
    if (!Buffer.isBuffer(buf)) {
      throw new TypeError('"list" argument must be an Array of Buffers')
    }
    buf.copy(buffer, pos)
    pos += buf.length
  }
  return buffer
}

Buffer.byteLength = byteLength

Buffer.prototype._isBuffer = true
Buffer.isBuffer = function isBuffer (b) {
  return !!(b != null && b._isBuffer)
}

module.exports.alloc = function (size) {
  var buffer = new Buffer(size)
  buffer.fill(0)
  return buffer
}

module.exports.from = function (data) {
  return new Buffer(data)
}

},{"isarray":33}],29:[function(require,module,exports){
'use strict'

exports.byteLength = byteLength
exports.toByteArray = toByteArray
exports.fromByteArray = fromByteArray

var lookup = []
var revLookup = []
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array

var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for (var i = 0, len = code.length; i < len; ++i) {
  lookup[i] = code[i]
  revLookup[code.charCodeAt(i)] = i
}

// Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
revLookup['-'.charCodeAt(0)] = 62
revLookup['_'.charCodeAt(0)] = 63

function getLens (b64) {
  var len = b64.length

  if (len % 4 > 0) {
    throw new Error('Invalid string. Length must be a multiple of 4')
  }

  // Trim off extra bytes after placeholder bytes are found
  // See: https://github.com/beatgammit/base64-js/issues/42
  var validLen = b64.indexOf('=')
  if (validLen === -1) validLen = len

  var placeHoldersLen = validLen === len
    ? 0
    : 4 - (validLen % 4)

  return [validLen, placeHoldersLen]
}

// base64 is 4/3 + up to two characters of the original data
function byteLength (b64) {
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function _byteLength (b64, validLen, placeHoldersLen) {
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function toByteArray (b64) {
  var tmp
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]

  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))

  var curByte = 0

  // if there are placeholders, only get up to the last complete 4 chars
  var len = placeHoldersLen > 0
    ? validLen - 4
    : validLen

  var i
  for (i = 0; i < len; i += 4) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 18) |
      (revLookup[b64.charCodeAt(i + 1)] << 12) |
      (revLookup[b64.charCodeAt(i + 2)] << 6) |
      revLookup[b64.charCodeAt(i + 3)]
    arr[curByte++] = (tmp >> 16) & 0xFF
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 2) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 2) |
      (revLookup[b64.charCodeAt(i + 1)] >> 4)
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 1) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 10) |
      (revLookup[b64.charCodeAt(i + 1)] << 4) |
      (revLookup[b64.charCodeAt(i + 2)] >> 2)
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  return arr
}

function tripletToBase64 (num) {
  return lookup[num >> 18 & 0x3F] +
    lookup[num >> 12 & 0x3F] +
    lookup[num >> 6 & 0x3F] +
    lookup[num & 0x3F]
}

function encodeChunk (uint8, start, end) {
  var tmp
  var output = []
  for (var i = start; i < end; i += 3) {
    tmp =
      ((uint8[i] << 16) & 0xFF0000) +
      ((uint8[i + 1] << 8) & 0xFF00) +
      (uint8[i + 2] & 0xFF)
    output.push(tripletToBase64(tmp))
  }
  return output.join('')
}

function fromByteArray (uint8) {
  var tmp
  var len = uint8.length
  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
  var parts = []
  var maxChunkLength = 16383 // must be multiple of 3

  // go through the array every three bytes, we'll deal with trailing stuff later
  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
    parts.push(encodeChunk(
      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)
    ))
  }

  // pad the end with zeros, but make sure to not forget the extra bytes
  if (extraBytes === 1) {
    tmp = uint8[len - 1]
    parts.push(
      lookup[tmp >> 2] +
      lookup[(tmp << 4) & 0x3F] +
      '=='
    )
  } else if (extraBytes === 2) {
    tmp = (uint8[len - 2] << 8) + uint8[len - 1]
    parts.push(
      lookup[tmp >> 10] +
      lookup[(tmp >> 4) & 0x3F] +
      lookup[(tmp << 2) & 0x3F] +
      '='
    )
  }

  return parts.join('')
}

},{}],30:[function(require,module,exports){
/*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <https://feross.org>
 * @license  MIT
 */
/* eslint-disable no-proto */

'use strict'

var base64 = require('base64-js')
var ieee754 = require('ieee754')
var customInspectSymbol =
  (typeof Symbol === 'function' && typeof Symbol.for === 'function')
    ? Symbol.for('nodejs.util.inspect.custom')
    : null

exports.Buffer = Buffer
exports.SlowBuffer = SlowBuffer
exports.INSPECT_MAX_BYTES = 50

var K_MAX_LENGTH = 0x7fffffff
exports.kMaxLength = K_MAX_LENGTH

/**
 * If `Buffer.TYPED_ARRAY_SUPPORT`:
 *   === true    Use Uint8Array implementation (fastest)
 *   === false   Print warning and recommend using `buffer` v4.x which has an Object
 *               implementation (most compatible, even IE6)
 *
 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
 * Opera 11.6+, iOS 4.2+.
 *
 * We report that the browser does not support typed arrays if the are not subclassable
 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
 * for __proto__ and has a buggy typed array implementation.
 */
Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()

if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
    typeof console.error === 'function') {
  console.error(
    'This browser lacks typed array (Uint8Array) support which is required by ' +
    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
  )
}

function typedArraySupport () {
  // Can typed array instances can be augmented?
  try {
    var arr = new Uint8Array(1)
    var proto = { foo: function () { return 42 } }
    Object.setPrototypeOf(proto, Uint8Array.prototype)
    Object.setPrototypeOf(arr, proto)
    return arr.foo() === 42
  } catch (e) {
    return false
  }
}

Object.defineProperty(Buffer.prototype, 'parent', {
  enumerable: true,
  get: function () {
    if (!Buffer.isBuffer(this)) return undefined
    return this.buffer
  }
})

Object.defineProperty(Buffer.prototype, 'offset', {
  enumerable: true,
  get: function () {
    if (!Buffer.isBuffer(this)) return undefined
    return this.byteOffset
  }
})

function createBuffer (length) {
  if (length > K_MAX_LENGTH) {
    throw new RangeError('The value "' + length + '" is invalid for option "size"')
  }
  // Return an augmented `Uint8Array` instance
  var buf = new Uint8Array(length)
  Object.setPrototypeOf(buf, Buffer.prototype)
  return buf
}

/**
 * The Buffer constructor returns instances of `Uint8Array` that have their
 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
 * returns a single octet.
 *
 * The `Uint8Array` prototype remains unmodified.
 */

function Buffer (arg, encodingOrOffset, length) {
  // Common case.
  if (typeof arg === 'number') {
    if (typeof encodingOrOffset === 'string') {
      throw new TypeError(
        'The "string" argument must be of type string. Received type number'
      )
    }
    return allocUnsafe(arg)
  }
  return from(arg, encodingOrOffset, length)
}

// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
if (typeof Symbol !== 'undefined' && Symbol.species != null &&
    Buffer[Symbol.species] === Buffer) {
  Object.defineProperty(Buffer, Symbol.species, {
    value: null,
    configurable: true,
    enumerable: false,
    writable: false
  })
}

Buffer.poolSize = 8192 // not used by this implementation

function from (value, encodingOrOffset, length) {
  if (typeof value === 'string') {
    return fromString(value, encodingOrOffset)
  }

  if (ArrayBuffer.isView(value)) {
    return fromArrayLike(value)
  }

  if (value == null) {
    throw new TypeError(
      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
      'or Array-like Object. Received type ' + (typeof value)
    )
  }

  if (isInstance(value, ArrayBuffer) ||
      (value && isInstance(value.buffer, ArrayBuffer))) {
    return fromArrayBuffer(value, encodingOrOffset, length)
  }

  if (typeof value === 'number') {
    throw new TypeError(
      'The "value" argument must not be of type number. Received type number'
    )
  }

  var valueOf = value.valueOf && value.valueOf()
  if (valueOf != null && valueOf !== value) {
    return Buffer.from(valueOf, encodingOrOffset, length)
  }

  var b = fromObject(value)
  if (b) return b

  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
      typeof value[Symbol.toPrimitive] === 'function') {
    return Buffer.from(
      value[Symbol.toPrimitive]('string'), encodingOrOffset, length
    )
  }

  throw new TypeError(
    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
    'or Array-like Object. Received type ' + (typeof value)
  )
}

/**
 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
 * if value is a number.
 * Buffer.from(str[, encoding])
 * Buffer.from(array)
 * Buffer.from(buffer)
 * Buffer.from(arrayBuffer[, byteOffset[, length]])
 **/
Buffer.from = function (value, encodingOrOffset, length) {
  return from(value, encodingOrOffset, length)
}

// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
// https://github.com/feross/buffer/pull/148
Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)
Object.setPrototypeOf(Buffer, Uint8Array)

function assertSize (size) {
  if (typeof size !== 'number') {
    throw new TypeError('"size" argument must be of type number')
  } else if (size < 0) {
    throw new RangeError('The value "' + size + '" is invalid for option "size"')
  }
}

function alloc (size, fill, encoding) {
  assertSize(size)
  if (size <= 0) {
    return createBuffer(size)
  }
  if (fill !== undefined) {
    // Only pay attention to encoding if it's a string. This
    // prevents accidentally sending in a number that would
    // be interpretted as a start offset.
    return typeof encoding === 'string'
      ? createBuffer(size).fill(fill, encoding)
      : createBuffer(size).fill(fill)
  }
  return createBuffer(size)
}

/**
 * Creates a new filled Buffer instance.
 * alloc(size[, fill[, encoding]])
 **/
Buffer.alloc = function (size, fill, encoding) {
  return alloc(size, fill, encoding)
}

function allocUnsafe (size) {
  assertSize(size)
  return createBuffer(size < 0 ? 0 : checked(size) | 0)
}

/**
 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
 * */
Buffer.allocUnsafe = function (size) {
  return allocUnsafe(size)
}
/**
 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
 */
Buffer.allocUnsafeSlow = function (size) {
  return allocUnsafe(size)
}

function fromString (string, encoding) {
  if (typeof encoding !== 'string' || encoding === '') {
    encoding = 'utf8'
  }

  if (!Buffer.isEncoding(encoding)) {
    throw new TypeError('Unknown encoding: ' + encoding)
  }

  var length = byteLength(string, encoding) | 0
  var buf = createBuffer(length)

  var actual = buf.write(string, encoding)

  if (actual !== length) {
    // Writing a hex string, for example, that contains invalid characters will
    // cause everything after the first invalid character to be ignored. (e.g.
    // 'abxxcd' will be treated as 'ab')
    buf = buf.slice(0, actual)
  }

  return buf
}

function fromArrayLike (array) {
  var length = array.length < 0 ? 0 : checked(array.length) | 0
  var buf = createBuffer(length)
  for (var i = 0; i < length; i += 1) {
    buf[i] = array[i] & 255
  }
  return buf
}

function fromArrayBuffer (array, byteOffset, length) {
  if (byteOffset < 0 || array.byteLength < byteOffset) {
    throw new RangeError('"offset" is outside of buffer bounds')
  }

  if (array.byteLength < byteOffset + (length || 0)) {
    throw new RangeError('"length" is outside of buffer bounds')
  }

  var buf
  if (byteOffset === undefined && length === undefined) {
    buf = new Uint8Array(array)
  } else if (length === undefined) {
    buf = new Uint8Array(array, byteOffset)
  } else {
    buf = new Uint8Array(array, byteOffset, length)
  }

  // Return an augmented `Uint8Array` instance
  Object.setPrototypeOf(buf, Buffer.prototype)

  return buf
}

function fromObject (obj) {
  if (Buffer.isBuffer(obj)) {
    var len = checked(obj.length) | 0
    var buf = createBuffer(len)

    if (buf.length === 0) {
      return buf
    }

    obj.copy(buf, 0, 0, len)
    return buf
  }

  if (obj.length !== undefined) {
    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
      return createBuffer(0)
    }
    return fromArrayLike(obj)
  }

  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
    return fromArrayLike(obj.data)
  }
}

function checked (length) {
  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
  // length is NaN (which is otherwise coerced to zero.)
  if (length >= K_MAX_LENGTH) {
    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
  }
  return length | 0
}

function SlowBuffer (length) {
  if (+length != length) { // eslint-disable-line eqeqeq
    length = 0
  }
  return Buffer.alloc(+length)
}

Buffer.isBuffer = function isBuffer (b) {
  return b != null && b._isBuffer === true &&
    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
}

Buffer.compare = function compare (a, b) {
  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
    throw new TypeError(
      'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
    )
  }

  if (a === b) return 0

  var x = a.length
  var y = b.length

  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
    if (a[i] !== b[i]) {
      x = a[i]
      y = b[i]
      break
    }
  }

  if (x < y) return -1
  if (y < x) return 1
  return 0
}

Buffer.isEncoding = function isEncoding (encoding) {
  switch (String(encoding).toLowerCase()) {
    case 'hex':
    case 'utf8':
    case 'utf-8':
    case 'ascii':
    case 'latin1':
    case 'binary':
    case 'base64':
    case 'ucs2':
    case 'ucs-2':
    case 'utf16le':
    case 'utf-16le':
      return true
    default:
      return false
  }
}

Buffer.concat = function concat (list, length) {
  if (!Array.isArray(list)) {
    throw new TypeError('"list" argument must be an Array of Buffers')
  }

  if (list.length === 0) {
    return Buffer.alloc(0)
  }

  var i
  if (length === undefined) {
    length = 0
    for (i = 0; i < list.length; ++i) {
      length += list[i].length
    }
  }

  var buffer = Buffer.allocUnsafe(length)
  var pos = 0
  for (i = 0; i < list.length; ++i) {
    var buf = list[i]
    if (isInstance(buf, Uint8Array)) {
      buf = Buffer.from(buf)
    }
    if (!Buffer.isBuffer(buf)) {
      throw new TypeError('"list" argument must be an Array of Buffers')
    }
    buf.copy(buffer, pos)
    pos += buf.length
  }
  return buffer
}

function byteLength (string, encoding) {
  if (Buffer.isBuffer(string)) {
    return string.length
  }
  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
    return string.byteLength
  }
  if (typeof string !== 'string') {
    throw new TypeError(
      'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
      'Received type ' + typeof string
    )
  }

  var len = string.length
  var mustMatch = (arguments.length > 2 && arguments[2] === true)
  if (!mustMatch && len === 0) return 0

  // Use a for loop to avoid recursion
  var loweredCase = false
  for (;;) {
    switch (encoding) {
      case 'ascii':
      case 'latin1':
      case 'binary':
        return len
      case 'utf8':
      case 'utf-8':
        return utf8ToBytes(string).length
      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return len * 2
      case 'hex':
        return len >>> 1
      case 'base64':
        return base64ToBytes(string).length
      default:
        if (loweredCase) {
          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
        }
        encoding = ('' + encoding).toLowerCase()
        loweredCase = true
    }
  }
}
Buffer.byteLength = byteLength

function slowToString (encoding, start, end) {
  var loweredCase = false

  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
  // property of a typed array.

  // This behaves neither like String nor Uint8Array in that we set start/end
  // to their upper/lower bounds if the value passed is out of range.
  // undefined is handled specially as per ECMA-262 6th Edition,
  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
  if (start === undefined || start < 0) {
    start = 0
  }
  // Return early if start > this.length. Done here to prevent potential uint32
  // coercion fail below.
  if (start > this.length) {
    return ''
  }

  if (end === undefined || end > this.length) {
    end = this.length
  }

  if (end <= 0) {
    return ''
  }

  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
  end >>>= 0
  start >>>= 0

  if (end <= start) {
    return ''
  }

  if (!encoding) encoding = 'utf8'

  while (true) {
    switch (encoding) {
      case 'hex':
        return hexSlice(this, start, end)

      case 'utf8':
      case 'utf-8':
        return utf8Slice(this, start, end)

      case 'ascii':
        return asciiSlice(this, start, end)

      case 'latin1':
      case 'binary':
        return latin1Slice(this, start, end)

      case 'base64':
        return base64Slice(this, start, end)

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return utf16leSlice(this, start, end)

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
        encoding = (encoding + '').toLowerCase()
        loweredCase = true
    }
  }
}

// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
// reliably in a browserify context because there could be multiple different
// copies of the 'buffer' package in use. This method works even for Buffer
// instances that were created from another copy of the `buffer` package.
// See: https://github.com/feross/buffer/issues/154
Buffer.prototype._isBuffer = true

function swap (b, n, m) {
  var i = b[n]
  b[n] = b[m]
  b[m] = i
}

Buffer.prototype.swap16 = function swap16 () {
  var len = this.length
  if (len % 2 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 16-bits')
  }
  for (var i = 0; i < len; i += 2) {
    swap(this, i, i + 1)
  }
  return this
}

Buffer.prototype.swap32 = function swap32 () {
  var len = this.length
  if (len % 4 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 32-bits')
  }
  for (var i = 0; i < len; i += 4) {
    swap(this, i, i + 3)
    swap(this, i + 1, i + 2)
  }
  return this
}

Buffer.prototype.swap64 = function swap64 () {
  var len = this.length
  if (len % 8 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 64-bits')
  }
  for (var i = 0; i < len; i += 8) {
    swap(this, i, i + 7)
    swap(this, i + 1, i + 6)
    swap(this, i + 2, i + 5)
    swap(this, i + 3, i + 4)
  }
  return this
}

Buffer.prototype.toString = function toString () {
  var length = this.length
  if (length === 0) return ''
  if (arguments.length === 0) return utf8Slice(this, 0, length)
  return slowToString.apply(this, arguments)
}

Buffer.prototype.toLocaleString = Buffer.prototype.toString

Buffer.prototype.equals = function equals (b) {
  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
  if (this === b) return true
  return Buffer.compare(this, b) === 0
}

Buffer.prototype.inspect = function inspect () {
  var str = ''
  var max = exports.INSPECT_MAX_BYTES
  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
  if (this.length > max) str += ' ... '
  return '<Buffer ' + str + '>'
}
if (customInspectSymbol) {
  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect
}

Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
  if (isInstance(target, Uint8Array)) {
    target = Buffer.from(target, target.offset, target.byteLength)
  }
  if (!Buffer.isBuffer(target)) {
    throw new TypeError(
      'The "target" argument must be one of type Buffer or Uint8Array. ' +
      'Received type ' + (typeof target)
    )
  }

  if (start === undefined) {
    start = 0
  }
  if (end === undefined) {
    end = target ? target.length : 0
  }
  if (thisStart === undefined) {
    thisStart = 0
  }
  if (thisEnd === undefined) {
    thisEnd = this.length
  }

  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
    throw new RangeError('out of range index')
  }

  if (thisStart >= thisEnd && start >= end) {
    return 0
  }
  if (thisStart >= thisEnd) {
    return -1
  }
  if (start >= end) {
    return 1
  }

  start >>>= 0
  end >>>= 0
  thisStart >>>= 0
  thisEnd >>>= 0

  if (this === target) return 0

  var x = thisEnd - thisStart
  var y = end - start
  var len = Math.min(x, y)

  var thisCopy = this.slice(thisStart, thisEnd)
  var targetCopy = target.slice(start, end)

  for (var i = 0; i < len; ++i) {
    if (thisCopy[i] !== targetCopy[i]) {
      x = thisCopy[i]
      y = targetCopy[i]
      break
    }
  }

  if (x < y) return -1
  if (y < x) return 1
  return 0
}

// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf
function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
  // Empty buffer means no match
  if (buffer.length === 0) return -1

  // Normalize byteOffset
  if (typeof byteOffset === 'string') {
    encoding = byteOffset
    byteOffset = 0
  } else if (byteOffset > 0x7fffffff) {
    byteOffset = 0x7fffffff
  } else if (byteOffset < -0x80000000) {
    byteOffset = -0x80000000
  }
  byteOffset = +byteOffset // Coerce to Number.
  if (numberIsNaN(byteOffset)) {
    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
    byteOffset = dir ? 0 : (buffer.length - 1)
  }

  // Normalize byteOffset: negative offsets start from the end of the buffer
  if (byteOffset < 0) byteOffset = buffer.length + byteOffset
  if (byteOffset >= buffer.length) {
    if (dir) return -1
    else byteOffset = buffer.length - 1
  } else if (byteOffset < 0) {
    if (dir) byteOffset = 0
    else return -1
  }

  // Normalize val
  if (typeof val === 'string') {
    val = Buffer.from(val, encoding)
  }

  // Finally, search either indexOf (if dir is true) or lastIndexOf
  if (Buffer.isBuffer(val)) {
    // Special case: looking for empty string/buffer always fails
    if (val.length === 0) {
      return -1
    }
    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
  } else if (typeof val === 'number') {
    val = val & 0xFF // Search for a byte value [0-255]
    if (typeof Uint8Array.prototype.indexOf === 'function') {
      if (dir) {
        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
      } else {
        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
      }
    }
    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)
  }

  throw new TypeError('val must be string, number or Buffer')
}

function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
  var indexSize = 1
  var arrLength = arr.length
  var valLength = val.length

  if (encoding !== undefined) {
    encoding = String(encoding).toLowerCase()
    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
        encoding === 'utf16le' || encoding === 'utf-16le') {
      if (arr.length < 2 || val.length < 2) {
        return -1
      }
      indexSize = 2
      arrLength /= 2
      valLength /= 2
      byteOffset /= 2
    }
  }

  function read (buf, i) {
    if (indexSize === 1) {
      return buf[i]
    } else {
      return buf.readUInt16BE(i * indexSize)
    }
  }

  var i
  if (dir) {
    var foundIndex = -1
    for (i = byteOffset; i < arrLength; i++) {
      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
        if (foundIndex === -1) foundIndex = i
        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
      } else {
        if (foundIndex !== -1) i -= i - foundIndex
        foundIndex = -1
      }
    }
  } else {
    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
    for (i = byteOffset; i >= 0; i--) {
      var found = true
      for (var j = 0; j < valLength; j++) {
        if (read(arr, i + j) !== read(val, j)) {
          found = false
          break
        }
      }
      if (found) return i
    }
  }

  return -1
}

Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
  return this.indexOf(val, byteOffset, encoding) !== -1
}

Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
}

Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
}

function hexWrite (buf, string, offset, length) {
  offset = Number(offset) || 0
  var remaining = buf.length - offset
  if (!length) {
    length = remaining
  } else {
    length = Number(length)
    if (length > remaining) {
      length = remaining
    }
  }

  var strLen = string.length

  if (length > strLen / 2) {
    length = strLen / 2
  }
  for (var i = 0; i < length; ++i) {
    var parsed = parseInt(string.substr(i * 2, 2), 16)
    if (numberIsNaN(parsed)) return i
    buf[offset + i] = parsed
  }
  return i
}

function utf8Write (buf, string, offset, length) {
  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}

function asciiWrite (buf, string, offset, length) {
  return blitBuffer(asciiToBytes(string), buf, offset, length)
}

function latin1Write (buf, string, offset, length) {
  return asciiWrite(buf, string, offset, length)
}

function base64Write (buf, string, offset, length) {
  return blitBuffer(base64ToBytes(string), buf, offset, length)
}

function ucs2Write (buf, string, offset, length) {
  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
}

Buffer.prototype.write = function write (string, offset, length, encoding) {
  // Buffer#write(string)
  if (offset === undefined) {
    encoding = 'utf8'
    length = this.length
    offset = 0
  // Buffer#write(string, encoding)
  } else if (length === undefined && typeof offset === 'string') {
    encoding = offset
    length = this.length
    offset = 0
  // Buffer#write(string, offset[, length][, encoding])
  } else if (isFinite(offset)) {
    offset = offset >>> 0
    if (isFinite(length)) {
      length = length >>> 0
      if (encoding === undefined) encoding = 'utf8'
    } else {
      encoding = length
      length = undefined
    }
  } else {
    throw new Error(
      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
    )
  }

  var remaining = this.length - offset
  if (length === undefined || length > remaining) length = remaining

  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
    throw new RangeError('Attempt to write outside buffer bounds')
  }

  if (!encoding) encoding = 'utf8'

  var loweredCase = false
  for (;;) {
    switch (encoding) {
      case 'hex':
        return hexWrite(this, string, offset, length)

      case 'utf8':
      case 'utf-8':
        return utf8Write(this, string, offset, length)

      case 'ascii':
        return asciiWrite(this, string, offset, length)

      case 'latin1':
      case 'binary':
        return latin1Write(this, string, offset, length)

      case 'base64':
        // Warning: maxLength not taken into account in base64Write
        return base64Write(this, string, offset, length)

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return ucs2Write(this, string, offset, length)

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
        encoding = ('' + encoding).toLowerCase()
        loweredCase = true
    }
  }
}

Buffer.prototype.toJSON = function toJSON () {
  return {
    type: 'Buffer',
    data: Array.prototype.slice.call(this._arr || this, 0)
  }
}

function base64Slice (buf, start, end) {
  if (start === 0 && end === buf.length) {
    return base64.fromByteArray(buf)
  } else {
    return base64.fromByteArray(buf.slice(start, end))
  }
}

function utf8Slice (buf, start, end) {
  end = Math.min(buf.length, end)
  var res = []

  var i = start
  while (i < end) {
    var firstByte = buf[i]
    var codePoint = null
    var bytesPerSequence = (firstByte > 0xEF) ? 4
      : (firstByte > 0xDF) ? 3
        : (firstByte > 0xBF) ? 2
          : 1

    if (i + bytesPerSequence <= end) {
      var secondByte, thirdByte, fourthByte, tempCodePoint

      switch (bytesPerSequence) {
        case 1:
          if (firstByte < 0x80) {
            codePoint = firstByte
          }
          break
        case 2:
          secondByte = buf[i + 1]
          if ((secondByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
            if (tempCodePoint > 0x7F) {
              codePoint = tempCodePoint
            }
          }
          break
        case 3:
          secondByte = buf[i + 1]
          thirdByte = buf[i + 2]
          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
              codePoint = tempCodePoint
            }
          }
          break
        case 4:
          secondByte = buf[i + 1]
          thirdByte = buf[i + 2]
          fourthByte = buf[i + 3]
          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
              codePoint = tempCodePoint
            }
          }
      }
    }

    if (codePoint === null) {
      // we did not generate a valid codePoint so insert a
      // replacement char (U+FFFD) and advance only 1 byte
      codePoint = 0xFFFD
      bytesPerSequence = 1
    } else if (codePoint > 0xFFFF) {
      // encode to utf16 (surrogate pair dance)
      codePoint -= 0x10000
      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
      codePoint = 0xDC00 | codePoint & 0x3FF
    }

    res.push(codePoint)
    i += bytesPerSequence
  }

  return decodeCodePointsArray(res)
}

// Based on http://stackoverflow.com/a/22747272/680742, the browser with
// the lowest limit is Chrome, with 0x10000 args.
// We go 1 magnitude less, for safety
var MAX_ARGUMENTS_LENGTH = 0x1000

function decodeCodePointsArray (codePoints) {
  var len = codePoints.length
  if (len <= MAX_ARGUMENTS_LENGTH) {
    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
  }

  // Decode in chunks to avoid "call stack size exceeded".
  var res = ''
  var i = 0
  while (i < len) {
    res += String.fromCharCode.apply(
      String,
      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
    )
  }
  return res
}

function asciiSlice (buf, start, end) {
  var ret = ''
  end = Math.min(buf.length, end)

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i] & 0x7F)
  }
  return ret
}

function latin1Slice (buf, start, end) {
  var ret = ''
  end = Math.min(buf.length, end)

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i])
  }
  return ret
}

function hexSlice (buf, start, end) {
  var len = buf.length

  if (!start || start < 0) start = 0
  if (!end || end < 0 || end > len) end = len

  var out = ''
  for (var i = start; i < end; ++i) {
    out += hexSliceLookupTable[buf[i]]
  }
  return out
}

function utf16leSlice (buf, start, end) {
  var bytes = buf.slice(start, end)
  var res = ''
  for (var i = 0; i < bytes.length; i += 2) {
    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
  }
  return res
}

Buffer.prototype.slice = function slice (start, end) {
  var len = this.length
  start = ~~start
  end = end === undefined ? len : ~~end

  if (start < 0) {
    start += len
    if (start < 0) start = 0
  } else if (start > len) {
    start = len
  }

  if (end < 0) {
    end += len
    if (end < 0) end = 0
  } else if (end > len) {
    end = len
  }

  if (end < start) end = start

  var newBuf = this.subarray(start, end)
  // Return an augmented `Uint8Array` instance
  Object.setPrototypeOf(newBuf, Buffer.prototype)

  return newBuf
}

/*
 * Need to make sure that buffer isn't trying to write out of bounds.
 */
function checkOffset (offset, ext, length) {
  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
}

Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var val = this[offset]
  var mul = 1
  var i = 0
  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul
  }

  return val
}

Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    checkOffset(offset, byteLength, this.length)
  }

  var val = this[offset + --byteLength]
  var mul = 1
  while (byteLength > 0 && (mul *= 0x100)) {
    val += this[offset + --byteLength] * mul
  }

  return val
}

Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 1, this.length)
  return this[offset]
}

Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  return this[offset] | (this[offset + 1] << 8)
}

Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  return (this[offset] << 8) | this[offset + 1]
}

Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return ((this[offset]) |
      (this[offset + 1] << 8) |
      (this[offset + 2] << 16)) +
      (this[offset + 3] * 0x1000000)
}

Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset] * 0x1000000) +
    ((this[offset + 1] << 16) |
    (this[offset + 2] << 8) |
    this[offset + 3])
}

Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var val = this[offset]
  var mul = 1
  var i = 0
  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul
  }
  mul *= 0x80

  if (val >= mul) val -= Math.pow(2, 8 * byteLength)

  return val
}

Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var i = byteLength
  var mul = 1
  var val = this[offset + --i]
  while (i > 0 && (mul *= 0x100)) {
    val += this[offset + --i] * mul
  }
  mul *= 0x80

  if (val >= mul) val -= Math.pow(2, 8 * byteLength)

  return val
}

Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 1, this.length)
  if (!(this[offset] & 0x80)) return (this[offset])
  return ((0xff - this[offset] + 1) * -1)
}

Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  var val = this[offset] | (this[offset + 1] << 8)
  return (val & 0x8000) ? val | 0xFFFF0000 : val
}

Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  var val = this[offset + 1] | (this[offset] << 8)
  return (val & 0x8000) ? val | 0xFFFF0000 : val
}

Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset]) |
    (this[offset + 1] << 8) |
    (this[offset + 2] << 16) |
    (this[offset + 3] << 24)
}

Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset] << 24) |
    (this[offset + 1] << 16) |
    (this[offset + 2] << 8) |
    (this[offset + 3])
}

Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)
  return ieee754.read(this, offset, true, 23, 4)
}

Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)
  return ieee754.read(this, offset, false, 23, 4)
}

Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 8, this.length)
  return ieee754.read(this, offset, true, 52, 8)
}

Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 8, this.length)
  return ieee754.read(this, offset, false, 52, 8)
}

function checkInt (buf, value, offset, ext, max, min) {
  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
  if (offset + ext > buf.length) throw new RangeError('Index out of range')
}

Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1
    checkInt(this, value, offset, byteLength, maxBytes, 0)
  }

  var mul = 1
  var i = 0
  this[offset] = value & 0xFF
  while (++i < byteLength && (mul *= 0x100)) {
    this[offset + i] = (value / mul) & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1
    checkInt(this, value, offset, byteLength, maxBytes, 0)
  }

  var i = byteLength - 1
  var mul = 1
  this[offset + i] = value & 0xFF
  while (--i >= 0 && (mul *= 0x100)) {
    this[offset + i] = (value / mul) & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
  this[offset] = (value & 0xff)
  return offset + 1
}

Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  return offset + 2
}

Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  this[offset] = (value >>> 8)
  this[offset + 1] = (value & 0xff)
  return offset + 2
}

Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  this[offset + 3] = (value >>> 24)
  this[offset + 2] = (value >>> 16)
  this[offset + 1] = (value >>> 8)
  this[offset] = (value & 0xff)
  return offset + 4
}

Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  this[offset] = (value >>> 24)
  this[offset + 1] = (value >>> 16)
  this[offset + 2] = (value >>> 8)
  this[offset + 3] = (value & 0xff)
  return offset + 4
}

Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    var limit = Math.pow(2, (8 * byteLength) - 1)

    checkInt(this, value, offset, byteLength, limit - 1, -limit)
  }

  var i = 0
  var mul = 1
  var sub = 0
  this[offset] = value & 0xFF
  while (++i < byteLength && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
      sub = 1
    }
    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    var limit = Math.pow(2, (8 * byteLength) - 1)

    checkInt(this, value, offset, byteLength, limit - 1, -limit)
  }

  var i = byteLength - 1
  var mul = 1
  var sub = 0
  this[offset + i] = value & 0xFF
  while (--i >= 0 && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
      sub = 1
    }
    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
  if (value < 0) value = 0xff + value + 1
  this[offset] = (value & 0xff)
  return offset + 1
}

Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  return offset + 2
}

Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  this[offset] = (value >>> 8)
  this[offset + 1] = (value & 0xff)
  return offset + 2
}

Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  this[offset + 2] = (value >>> 16)
  this[offset + 3] = (value >>> 24)
  return offset + 4
}

Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  if (value < 0) value = 0xffffffff + value + 1
  this[offset] = (value >>> 24)
  this[offset + 1] = (value >>> 16)
  this[offset + 2] = (value >>> 8)
  this[offset + 3] = (value & 0xff)
  return offset + 4
}

function checkIEEE754 (buf, value, offset, ext, max, min) {
  if (offset + ext > buf.length) throw new RangeError('Index out of range')
  if (offset < 0) throw new RangeError('Index out of range')
}

function writeFloat (buf, value, offset, littleEndian, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
  }
  ieee754.write(buf, value, offset, littleEndian, 23, 4)
  return offset + 4
}

Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
  return writeFloat(this, value, offset, true, noAssert)
}

Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
  return writeFloat(this, value, offset, false, noAssert)
}

function writeDouble (buf, value, offset, littleEndian, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
  }
  ieee754.write(buf, value, offset, littleEndian, 52, 8)
  return offset + 8
}

Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
  return writeDouble(this, value, offset, true, noAssert)
}

Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
  return writeDouble(this, value, offset, false, noAssert)
}

// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
  if (!start) start = 0
  if (!end && end !== 0) end = this.length
  if (targetStart >= target.length) targetStart = target.length
  if (!targetStart) targetStart = 0
  if (end > 0 && end < start) end = start

  // Copy 0 bytes; we're done
  if (end === start) return 0
  if (target.length === 0 || this.length === 0) return 0

  // Fatal error conditions
  if (targetStart < 0) {
    throw new RangeError('targetStart out of bounds')
  }
  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
  if (end < 0) throw new RangeError('sourceEnd out of bounds')

  // Are we oob?
  if (end > this.length) end = this.length
  if (target.length - targetStart < end - start) {
    end = target.length - targetStart + start
  }

  var len = end - start

  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
    // Use built-in when available, missing from IE11
    this.copyWithin(targetStart, start, end)
  } else if (this === target && start < targetStart && targetStart < end) {
    // descending copy from end
    for (var i = len - 1; i >= 0; --i) {
      target[i + targetStart] = this[i + start]
    }
  } else {
    Uint8Array.prototype.set.call(
      target,
      this.subarray(start, end),
      targetStart
    )
  }

  return len
}

// Usage:
//    buffer.fill(number[, offset[, end]])
//    buffer.fill(buffer[, offset[, end]])
//    buffer.fill(string[, offset[, end]][, encoding])
Buffer.prototype.fill = function fill (val, start, end, encoding) {
  // Handle string cases:
  if (typeof val === 'string') {
    if (typeof start === 'string') {
      encoding = start
      start = 0
      end = this.length
    } else if (typeof end === 'string') {
      encoding = end
      end = this.length
    }
    if (encoding !== undefined && typeof encoding !== 'string') {
      throw new TypeError('encoding must be a string')
    }
    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
      throw new TypeError('Unknown encoding: ' + encoding)
    }
    if (val.length === 1) {
      var code = val.charCodeAt(0)
      if ((encoding === 'utf8' && code < 128) ||
          encoding === 'latin1') {
        // Fast path: If `val` fits into a single byte, use that numeric value.
        val = code
      }
    }
  } else if (typeof val === 'number') {
    val = val & 255
  } else if (typeof val === 'boolean') {
    val = Number(val)
  }

  // Invalid ranges are not set to a default, so can range check early.
  if (start < 0 || this.length < start || this.length < end) {
    throw new RangeError('Out of range index')
  }

  if (end <= start) {
    return this
  }

  start = start >>> 0
  end = end === undefined ? this.length : end >>> 0

  if (!val) val = 0

  var i
  if (typeof val === 'number') {
    for (i = start; i < end; ++i) {
      this[i] = val
    }
  } else {
    var bytes = Buffer.isBuffer(val)
      ? val
      : Buffer.from(val, encoding)
    var len = bytes.length
    if (len === 0) {
      throw new TypeError('The value "' + val +
        '" is invalid for argument "value"')
    }
    for (i = 0; i < end - start; ++i) {
      this[i + start] = bytes[i % len]
    }
  }

  return this
}

// HELPER FUNCTIONS
// ================

var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g

function base64clean (str) {
  // Node takes equal signs as end of the Base64 encoding
  str = str.split('=')[0]
  // Node strips out invalid characters like \n and \t from the string, base64-js does not
  str = str.trim().replace(INVALID_BASE64_RE, '')
  // Node converts strings with length < 2 to ''
  if (str.length < 2) return ''
  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
  while (str.length % 4 !== 0) {
    str = str + '='
  }
  return str
}

function utf8ToBytes (string, units) {
  units = units || Infinity
  var codePoint
  var length = string.length
  var leadSurrogate = null
  var bytes = []

  for (var i = 0; i < length; ++i) {
    codePoint = string.charCodeAt(i)

    // is surrogate component
    if (codePoint > 0xD7FF && codePoint < 0xE000) {
      // last char was a lead
      if (!leadSurrogate) {
        // no lead yet
        if (codePoint > 0xDBFF) {
          // unexpected trail
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        } else if (i + 1 === length) {
          // unpaired lead
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        }

        // valid lead
        leadSurrogate = codePoint

        continue
      }

      // 2 leads in a row
      if (codePoint < 0xDC00) {
        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
        leadSurrogate = codePoint
        continue
      }

      // valid surrogate pair
      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
    } else if (leadSurrogate) {
      // valid bmp char, but last char was a lead
      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
    }

    leadSurrogate = null

    // encode utf8
    if (codePoint < 0x80) {
      if ((units -= 1) < 0) break
      bytes.push(codePoint)
    } else if (codePoint < 0x800) {
      if ((units -= 2) < 0) break
      bytes.push(
        codePoint >> 0x6 | 0xC0,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x10000) {
      if ((units -= 3) < 0) break
      bytes.push(
        codePoint >> 0xC | 0xE0,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x110000) {
      if ((units -= 4) < 0) break
      bytes.push(
        codePoint >> 0x12 | 0xF0,
        codePoint >> 0xC & 0x3F | 0x80,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else {
      throw new Error('Invalid code point')
    }
  }

  return bytes
}

function asciiToBytes (str) {
  var byteArray = []
  for (var i = 0; i < str.length; ++i) {
    // Node's code seems to be doing this and not & 0x7F..
    byteArray.push(str.charCodeAt(i) & 0xFF)
  }
  return byteArray
}

function utf16leToBytes (str, units) {
  var c, hi, lo
  var byteArray = []
  for (var i = 0; i < str.length; ++i) {
    if ((units -= 2) < 0) break

    c = str.charCodeAt(i)
    hi = c >> 8
    lo = c % 256
    byteArray.push(lo)
    byteArray.push(hi)
  }

  return byteArray
}

function base64ToBytes (str) {
  return base64.toByteArray(base64clean(str))
}

function blitBuffer (src, dst, offset, length) {
  for (var i = 0; i < length; ++i) {
    if ((i + offset >= dst.length) || (i >= src.length)) break
    dst[i + offset] = src[i]
  }
  return i
}

// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
// the `instanceof` check but they should be treated as of that type.
// See: https://github.com/feross/buffer/issues/166
function isInstance (obj, type) {
  return obj instanceof type ||
    (obj != null && obj.constructor != null && obj.constructor.name != null &&
      obj.constructor.name === type.name)
}
function numberIsNaN (obj) {
  // For IE11 support
  return obj !== obj // eslint-disable-line no-self-compare
}

// Create lookup table for `toString('hex')`
// See: https://github.com/feross/buffer/issues/219
var hexSliceLookupTable = (function () {
  var alphabet = '0123456789abcdef'
  var table = new Array(256)
  for (var i = 0; i < 16; ++i) {
    var i16 = i * 16
    for (var j = 0; j < 16; ++j) {
      table[i16 + j] = alphabet[i] + alphabet[j]
    }
  }
  return table
})()

},{"base64-js":29,"ieee754":32}],31:[function(require,module,exports){
'use strict';

/******************************************************************************
 * Created 2008-08-19.
 *
 * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.
 *
 * Copyright (C) 2008
 *   Wyatt Baldwin <self@wyattbaldwin.com>
 *   All rights reserved
 *
 * Licensed under the MIT license.
 *
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *****************************************************************************/
var dijkstra = {
  single_source_shortest_paths: function(graph, s, d) {
    // Predecessor map for each node that has been encountered.
    // node ID => predecessor node ID
    var predecessors = {};

    // Costs of shortest paths from s to all nodes encountered.
    // node ID => cost
    var costs = {};
    costs[s] = 0;

    // Costs of shortest paths from s to all nodes encountered; differs from
    // `costs` in that it provides easy access to the node that currently has
    // the known shortest path from s.
    // XXX: Do we actually need both `costs` and `open`?
    var open = dijkstra.PriorityQueue.make();
    open.push(s, 0);

    var closest,
        u, v,
        cost_of_s_to_u,
        adjacent_nodes,
        cost_of_e,
        cost_of_s_to_u_plus_cost_of_e,
        cost_of_s_to_v,
        first_visit;
    while (!open.empty()) {
      // In the nodes remaining in graph that have a known cost from s,
      // find the node, u, that currently has the shortest path from s.
      closest = open.pop();
      u = closest.value;
      cost_of_s_to_u = closest.cost;

      // Get nodes adjacent to u...
      adjacent_nodes = graph[u] || {};

      // ...and explore the edges that connect u to those nodes, updating
      // the cost of the shortest paths to any or all of those nodes as
      // necessary. v is the node across the current edge from u.
      for (v in adjacent_nodes) {
        if (adjacent_nodes.hasOwnProperty(v)) {
          // Get the cost of the edge running from u to v.
          cost_of_e = adjacent_nodes[v];

          // Cost of s to u plus the cost of u to v across e--this is *a*
          // cost from s to v that may or may not be less than the current
          // known cost to v.
          cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;

          // If we haven't visited v yet OR if the current known cost from s to
          // v is greater than the new cost we just found (cost of s to u plus
          // cost of u to v across e), update v's cost in the cost list and
          // update v's predecessor in the predecessor list (it's now u).
          cost_of_s_to_v = costs[v];
          first_visit = (typeof costs[v] === 'undefined');
          if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {
            costs[v] = cost_of_s_to_u_plus_cost_of_e;
            open.push(v, cost_of_s_to_u_plus_cost_of_e);
            predecessors[v] = u;
          }
        }
      }
    }

    if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {
      var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');
      throw new Error(msg);
    }

    return predecessors;
  },

  extract_shortest_path_from_predecessor_list: function(predecessors, d) {
    var nodes = [];
    var u = d;
    var predecessor;
    while (u) {
      nodes.push(u);
      predecessor = predecessors[u];
      u = predecessors[u];
    }
    nodes.reverse();
    return nodes;
  },

  find_path: function(graph, s, d) {
    var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);
    return dijkstra.extract_shortest_path_from_predecessor_list(
      predecessors, d);
  },

  /**
   * A very naive priority queue implementation.
   */
  PriorityQueue: {
    make: function (opts) {
      var T = dijkstra.PriorityQueue,
          t = {},
          key;
      opts = opts || {};
      for (key in T) {
        if (T.hasOwnProperty(key)) {
          t[key] = T[key];
        }
      }
      t.queue = [];
      t.sorter = opts.sorter || T.default_sorter;
      return t;
    },

    default_sorter: function (a, b) {
      return a.cost - b.cost;
    },

    /**
     * Add a new item to the queue and ensure the highest priority element
     * is at the front of the queue.
     */
    push: function (value, cost) {
      var item = {value: value, cost: cost};
      this.queue.push(item);
      this.queue.sort(this.sorter);
    },

    /**
     * Return the highest priority element in the queue.
     */
    pop: function () {
      return this.queue.shift();
    },

    empty: function () {
      return this.queue.length === 0;
    }
  }
};


// node.js module exports
if (typeof module !== 'undefined') {
  module.exports = dijkstra;
}

},{}],32:[function(require,module,exports){
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
  var e, m
  var eLen = (nBytes * 8) - mLen - 1
  var eMax = (1 << eLen) - 1
  var eBias = eMax >> 1
  var nBits = -7
  var i = isLE ? (nBytes - 1) : 0
  var d = isLE ? -1 : 1
  var s = buffer[offset + i]

  i += d

  e = s & ((1 << (-nBits)) - 1)
  s >>= (-nBits)
  nBits += eLen
  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}

  m = e & ((1 << (-nBits)) - 1)
  e >>= (-nBits)
  nBits += mLen
  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}

  if (e === 0) {
    e = 1 - eBias
  } else if (e === eMax) {
    return m ? NaN : ((s ? -1 : 1) * Infinity)
  } else {
    m = m + Math.pow(2, mLen)
    e = e - eBias
  }
  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
}

exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
  var e, m, c
  var eLen = (nBytes * 8) - mLen - 1
  var eMax = (1 << eLen) - 1
  var eBias = eMax >> 1
  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
  var i = isLE ? 0 : (nBytes - 1)
  var d = isLE ? 1 : -1
  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0

  value = Math.abs(value)

  if (isNaN(value) || value === Infinity) {
    m = isNaN(value) ? 1 : 0
    e = eMax
  } else {
    e = Math.floor(Math.log(value) / Math.LN2)
    if (value * (c = Math.pow(2, -e)) < 1) {
      e--
      c *= 2
    }
    if (e + eBias >= 1) {
      value += rt / c
    } else {
      value += rt * Math.pow(2, 1 - eBias)
    }
    if (value * c >= 2) {
      e++
      c /= 2
    }

    if (e + eBias >= eMax) {
      m = 0
      e = eMax
    } else if (e + eBias >= 1) {
      m = ((value * c) - 1) * Math.pow(2, mLen)
      e = e + eBias
    } else {
      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
      e = 0
    }
  }

  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}

  e = (e << mLen) | m
  eLen += mLen
  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}

  buffer[offset + i - d] |= s * 128
}

},{}],33:[function(require,module,exports){
var toString = {}.toString;

module.exports = Array.isArray || function (arr) {
  return toString.call(arr) == '[object Array]';
};

},{}]},{},[24])(24)
});

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvY2FuLXByb21pc2UuanMiLCJsaWIvY29yZS9hbGlnbm1lbnQtcGF0dGVybi5qcyIsImxpYi9jb3JlL2FscGhhbnVtZXJpYy1kYXRhLmpzIiwibGliL2NvcmUvYml0LWJ1ZmZlci5qcyIsImxpYi9jb3JlL2JpdC1tYXRyaXguanMiLCJsaWIvY29yZS9ieXRlLWRhdGEuanMiLCJsaWIvY29yZS9lcnJvci1jb3JyZWN0aW9uLWNvZGUuanMiLCJsaWIvY29yZS9lcnJvci1jb3JyZWN0aW9uLWxldmVsLmpzIiwibGliL2NvcmUvZmluZGVyLXBhdHRlcm4uanMiLCJsaWIvY29yZS9mb3JtYXQtaW5mby5qcyIsImxpYi9jb3JlL2dhbG9pcy1maWVsZC5qcyIsImxpYi9jb3JlL2thbmppLWRhdGEuanMiLCJsaWIvY29yZS9tYXNrLXBhdHRlcm4uanMiLCJsaWIvY29yZS9tb2RlLmpzIiwibGliL2NvcmUvbnVtZXJpYy1kYXRhLmpzIiwibGliL2NvcmUvcG9seW5vbWlhbC5qcyIsImxpYi9jb3JlL3FyY29kZS5qcyIsImxpYi9jb3JlL3JlZWQtc29sb21vbi1lbmNvZGVyLmpzIiwibGliL2NvcmUvcmVnZXguanMiLCJsaWIvY29yZS9zZWdtZW50cy5qcyIsImxpYi9jb3JlL3V0aWxzLmpzIiwibGliL2NvcmUvdmVyc2lvbi1jaGVjay5qcyIsImxpYi9jb3JlL3ZlcnNpb24uanMiLCJsaWIvaW5kZXguanMiLCJsaWIvcmVuZGVyZXIvY2FudmFzLmpzIiwibGliL3JlbmRlcmVyL3N2Zy10YWcuanMiLCJsaWIvcmVuZGVyZXIvdXRpbHMuanMiLCJsaWIvdXRpbHMvdHlwZWRhcnJheS1idWZmZXIuanMiLCJub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kaWprc3RyYWpzL2RpamtzdHJhLmpzIiwibm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25mQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdndEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8vIGNhbi1wcm9taXNlIGhhcyBhIGNyYXNoIGluIHNvbWUgdmVyc2lvbnMgb2YgcmVhY3QgbmF0aXZlIHRoYXQgZG9udCBoYXZlXG4vLyBzdGFuZGFyZCBnbG9iYWwgb2JqZWN0c1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NvbGRhaXIvbm9kZS1xcmNvZGUvaXNzdWVzLzE1N1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nICYmIFByb21pc2UucHJvdG90eXBlICYmIFByb21pc2UucHJvdG90eXBlLnRoZW5cbn1cbiIsIi8qKlxuICogQWxpZ25tZW50IHBhdHRlcm4gYXJlIGZpeGVkIHJlZmVyZW5jZSBwYXR0ZXJuIGluIGRlZmluZWQgcG9zaXRpb25zXG4gKiBpbiBhIG1hdHJpeCBzeW1ib2xvZ3ksIHdoaWNoIGVuYWJsZXMgdGhlIGRlY29kZSBzb2Z0d2FyZSB0byByZS1zeW5jaHJvbmlzZVxuICogdGhlIGNvb3JkaW5hdGUgbWFwcGluZyBvZiB0aGUgaW1hZ2UgbW9kdWxlcyBpbiB0aGUgZXZlbnQgb2YgbW9kZXJhdGUgYW1vdW50c1xuICogb2YgZGlzdG9ydGlvbiBvZiB0aGUgaW1hZ2UuXG4gKlxuICogQWxpZ25tZW50IHBhdHRlcm5zIGFyZSBwcmVzZW50IG9ubHkgaW4gUVIgQ29kZSBzeW1ib2xzIG9mIHZlcnNpb24gMiBvciBsYXJnZXJcbiAqIGFuZCB0aGVpciBudW1iZXIgZGVwZW5kcyBvbiB0aGUgc3ltYm9sIHZlcnNpb24uXG4gKi9cblxudmFyIGdldFN5bWJvbFNpemUgPSByZXF1aXJlKCcuL3V0aWxzJykuZ2V0U3ltYm9sU2l6ZVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgcm93L2NvbHVtbiBjb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG1vZHVsZSBvZiBlYWNoIGFsaWdubWVudCBwYXR0ZXJuXG4gKiBmb3IgdGhlIHNwZWNpZmllZCBRUiBDb2RlIHZlcnNpb24uXG4gKlxuICogVGhlIGFsaWdubWVudCBwYXR0ZXJucyBhcmUgcG9zaXRpb25lZCBzeW1tZXRyaWNhbGx5IG9uIGVpdGhlciBzaWRlIG9mIHRoZSBkaWFnb25hbFxuICogcnVubmluZyBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHN5bWJvbCB0byB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci5cbiAqXG4gKiBTaW5jZSBwb3NpdGlvbnMgYXJlIHNpbW1ldHJpY2FsIG9ubHkgaGFsZiBvZiB0aGUgY29vcmRpbmF0ZXMgYXJlIHJldHVybmVkLlxuICogRWFjaCBpdGVtIG9mIHRoZSBhcnJheSB3aWxsIHJlcHJlc2VudCBpbiB0dXJuIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGUuXG4gKiBAc2VlIHtAbGluayBnZXRQb3NpdGlvbnN9XG4gKlxuICogQHBhcmFtICB7TnVtYmVyfSB2ZXJzaW9uIFFSIENvZGUgdmVyc2lvblxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgIEFycmF5IG9mIGNvb3JkaW5hdGVcbiAqL1xuZXhwb3J0cy5nZXRSb3dDb2xDb29yZHMgPSBmdW5jdGlvbiBnZXRSb3dDb2xDb29yZHMgKHZlcnNpb24pIHtcbiAgaWYgKHZlcnNpb24gPT09IDEpIHJldHVybiBbXVxuXG4gIHZhciBwb3NDb3VudCA9IE1hdGguZmxvb3IodmVyc2lvbiAvIDcpICsgMlxuICB2YXIgc2l6ZSA9IGdldFN5bWJvbFNpemUodmVyc2lvbilcbiAgdmFyIGludGVydmFscyA9IHNpemUgPT09IDE0NSA/IDI2IDogTWF0aC5jZWlsKChzaXplIC0gMTMpIC8gKDIgKiBwb3NDb3VudCAtIDIpKSAqIDJcbiAgdmFyIHBvc2l0aW9ucyA9IFtzaXplIC0gN10gLy8gTGFzdCBjb29yZCBpcyBhbHdheXMgKHNpemUgLSA3KVxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgcG9zQ291bnQgLSAxOyBpKyspIHtcbiAgICBwb3NpdGlvbnNbaV0gPSBwb3NpdGlvbnNbaSAtIDFdIC0gaW50ZXJ2YWxzXG4gIH1cblxuICBwb3NpdGlvbnMucHVzaCg2KSAvLyBGaXJzdCBjb29yZCBpcyBhbHdheXMgNlxuXG4gIHJldHVybiBwb3NpdGlvbnMucmV2ZXJzZSgpXG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBwb3NpdGlvbnMgb2YgZWFjaCBhbGlnbm1lbnQgcGF0dGVybi5cbiAqIEVhY2ggYXJyYXkncyBlbGVtZW50IHJlcHJlc2VudCB0aGUgY2VudGVyIHBvaW50IG9mIHRoZSBwYXR0ZXJuIGFzICh4LCB5KSBjb29yZGluYXRlc1xuICpcbiAqIENvb3JkaW5hdGVzIGFyZSBjYWxjdWxhdGVkIGV4cGFuZGluZyB0aGUgcm93L2NvbHVtbiBjb29yZGluYXRlcyByZXR1cm5lZCBieSB7QGxpbmsgZ2V0Um93Q29sQ29vcmRzfVxuICogYW5kIGZpbHRlcmluZyBvdXQgdGhlIGl0ZW1zIHRoYXQgb3ZlcmxhcHMgd2l0aCBmaW5kZXIgcGF0dGVyblxuICpcbiAqIEBleGFtcGxlXG4gKiBGb3IgYSBWZXJzaW9uIDcgc3ltYm9sIHtAbGluayBnZXRSb3dDb2xDb29yZHN9IHJldHVybnMgdmFsdWVzIDYsIDIyIGFuZCAzOC5cbiAqIFRoZSBhbGlnbm1lbnQgcGF0dGVybnMsIHRoZXJlZm9yZSwgYXJlIHRvIGJlIGNlbnRlcmVkIG9uIChyb3csIGNvbHVtbilcbiAqIHBvc2l0aW9ucyAoNiwyMiksICgyMiw2KSwgKDIyLDIyKSwgKDIyLDM4KSwgKDM4LDIyKSwgKDM4LDM4KS5cbiAqIE5vdGUgdGhhdCB0aGUgY29vcmRpbmF0ZXMgKDYsNiksICg2LDM4KSwgKDM4LDYpIGFyZSBvY2N1cGllZCBieSBmaW5kZXIgcGF0dGVybnNcbiAqIGFuZCBhcmUgbm90IHRoZXJlZm9yZSB1c2VkIGZvciBhbGlnbm1lbnQgcGF0dGVybnMuXG4gKlxuICogdmFyIHBvcyA9IGdldFBvc2l0aW9ucyg3KVxuICogLy8gW1s2LDIyXSwgWzIyLDZdLCBbMjIsMjJdLCBbMjIsMzhdLCBbMzgsMjJdLCBbMzgsMzhdXVxuICpcbiAqIEBwYXJhbSAge051bWJlcn0gdmVyc2lvbiBRUiBDb2RlIHZlcnNpb25cbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICBBcnJheSBvZiBjb29yZGluYXRlc1xuICovXG5leHBvcnRzLmdldFBvc2l0aW9ucyA9IGZ1bmN0aW9uIGdldFBvc2l0aW9ucyAodmVyc2lvbikge1xuICB2YXIgY29vcmRzID0gW11cbiAgdmFyIHBvcyA9IGV4cG9ydHMuZ2V0Um93Q29sQ29vcmRzKHZlcnNpb24pXG4gIHZhciBwb3NMZW5ndGggPSBwb3MubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3NMZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcG9zTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIFNraXAgaWYgcG9zaXRpb24gaXMgb2NjdXBpZWQgYnkgZmluZGVyIHBhdHRlcm5zXG4gICAgICBpZiAoKGkgPT09IDAgJiYgaiA9PT0gMCkgfHwgICAgICAgICAgICAgLy8gdG9wLWxlZnRcbiAgICAgICAgICAoaSA9PT0gMCAmJiBqID09PSBwb3NMZW5ndGggLSAxKSB8fCAvLyBib3R0b20tbGVmdFxuICAgICAgICAgIChpID09PSBwb3NMZW5ndGggLSAxICYmIGogPT09IDApKSB7IC8vIHRvcC1yaWdodFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb29yZHMucHVzaChbcG9zW2ldLCBwb3Nbal1dKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb29yZHNcbn1cbiIsInZhciBNb2RlID0gcmVxdWlyZSgnLi9tb2RlJylcblxuLyoqXG4gKiBBcnJheSBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBpbiBhbHBoYW51bWVyaWMgbW9kZVxuICpcbiAqIEFzIHBlciBRUiBDb2RlIHNwZWNpZmljYXRpb24sIHRvIGVhY2ggY2hhcmFjdGVyXG4gKiBpcyBhc3NpZ25lZCBhIHZhbHVlIGZyb20gMCB0byA0NCB3aGljaCBpbiB0aGlzIGNhc2UgY29pbmNpZGVzXG4gKiB3aXRoIHRoZSBhcnJheSBpbmRleFxuICpcbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xudmFyIEFMUEhBX05VTV9DSEFSUyA9IFtcbiAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLFxuICAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsICdLJywgJ0wnLCAnTScsXG4gICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywgJ1UnLCAnVicsICdXJywgJ1gnLCAnWScsICdaJyxcbiAgJyAnLCAnJCcsICclJywgJyonLCAnKycsICctJywgJy4nLCAnLycsICc6J1xuXVxuXG5mdW5jdGlvbiBBbHBoYW51bWVyaWNEYXRhIChkYXRhKSB7XG4gIHRoaXMubW9kZSA9IE1vZGUuQUxQSEFOVU1FUklDXG4gIHRoaXMuZGF0YSA9IGRhdGFcbn1cblxuQWxwaGFudW1lcmljRGF0YS5nZXRCaXRzTGVuZ3RoID0gZnVuY3Rpb24gZ2V0Qml0c0xlbmd0aCAobGVuZ3RoKSB7XG4gIHJldHVybiAxMSAqIE1hdGguZmxvb3IobGVuZ3RoIC8gMikgKyA2ICogKGxlbmd0aCAlIDIpXG59XG5cbkFscGhhbnVtZXJpY0RhdGEucHJvdG90eXBlLmdldExlbmd0aCA9IGZ1bmN0aW9uIGdldExlbmd0aCAoKSB7XG4gIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoXG59XG5cbkFscGhhbnVtZXJpY0RhdGEucHJvdG90eXBlLmdldEJpdHNMZW5ndGggPSBmdW5jdGlvbiBnZXRCaXRzTGVuZ3RoICgpIHtcbiAgcmV0dXJuIEFscGhhbnVtZXJpY0RhdGEuZ2V0Qml0c0xlbmd0aCh0aGlzLmRhdGEubGVuZ3RoKVxufVxuXG5BbHBoYW51bWVyaWNEYXRhLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChiaXRCdWZmZXIpIHtcbiAgdmFyIGlcblxuICAvLyBJbnB1dCBkYXRhIGNoYXJhY3RlcnMgYXJlIGRpdmlkZWQgaW50byBncm91cHMgb2YgdHdvIGNoYXJhY3RlcnNcbiAgLy8gYW5kIGVuY29kZWQgYXMgMTEtYml0IGJpbmFyeSBjb2Rlcy5cbiAgZm9yIChpID0gMDsgaSArIDIgPD0gdGhpcy5kYXRhLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgLy8gVGhlIGNoYXJhY3RlciB2YWx1ZSBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIG11bHRpcGxpZWQgYnkgNDVcbiAgICB2YXIgdmFsdWUgPSBBTFBIQV9OVU1fQ0hBUlMuaW5kZXhPZih0aGlzLmRhdGFbaV0pICogNDVcblxuICAgIC8vIFRoZSBjaGFyYWN0ZXIgdmFsdWUgb2YgdGhlIHNlY29uZCBkaWdpdCBpcyBhZGRlZCB0byB0aGUgcHJvZHVjdFxuICAgIHZhbHVlICs9IEFMUEhBX05VTV9DSEFSUy5pbmRleE9mKHRoaXMuZGF0YVtpICsgMV0pXG5cbiAgICAvLyBUaGUgc3VtIGlzIHRoZW4gc3RvcmVkIGFzIDExLWJpdCBiaW5hcnkgbnVtYmVyXG4gICAgYml0QnVmZmVyLnB1dCh2YWx1ZSwgMTEpXG4gIH1cblxuICAvLyBJZiB0aGUgbnVtYmVyIG9mIGlucHV0IGRhdGEgY2hhcmFjdGVycyBpcyBub3QgYSBtdWx0aXBsZSBvZiB0d28sXG4gIC8vIHRoZSBjaGFyYWN0ZXIgdmFsdWUgb2YgdGhlIGZpbmFsIGNoYXJhY3RlciBpcyBlbmNvZGVkIGFzIGEgNi1iaXQgYmluYXJ5IG51bWJlci5cbiAgaWYgKHRoaXMuZGF0YS5sZW5ndGggJSAyKSB7XG4gICAgYml0QnVmZmVyLnB1dChBTFBIQV9OVU1fQ0hBUlMuaW5kZXhPZih0aGlzLmRhdGFbaV0pLCA2KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWxwaGFudW1lcmljRGF0YVxuIiwiZnVuY3Rpb24gQml0QnVmZmVyICgpIHtcbiAgdGhpcy5idWZmZXIgPSBbXVxuICB0aGlzLmxlbmd0aCA9IDBcbn1cblxuQml0QnVmZmVyLnByb3RvdHlwZSA9IHtcblxuICBnZXQ6IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHZhciBidWZJbmRleCA9IE1hdGguZmxvb3IoaW5kZXggLyA4KVxuICAgIHJldHVybiAoKHRoaXMuYnVmZmVyW2J1ZkluZGV4XSA+Pj4gKDcgLSBpbmRleCAlIDgpKSAmIDEpID09PSAxXG4gIH0sXG5cbiAgcHV0OiBmdW5jdGlvbiAobnVtLCBsZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnB1dEJpdCgoKG51bSA+Pj4gKGxlbmd0aCAtIGkgLSAxKSkgJiAxKSA9PT0gMSlcbiAgICB9XG4gIH0sXG5cbiAgZ2V0TGVuZ3RoSW5CaXRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoXG4gIH0sXG5cbiAgcHV0Qml0OiBmdW5jdGlvbiAoYml0KSB7XG4gICAgdmFyIGJ1ZkluZGV4ID0gTWF0aC5mbG9vcih0aGlzLmxlbmd0aCAvIDgpXG4gICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA8PSBidWZJbmRleCkge1xuICAgICAgdGhpcy5idWZmZXIucHVzaCgwKVxuICAgIH1cblxuICAgIGlmIChiaXQpIHtcbiAgICAgIHRoaXMuYnVmZmVyW2J1ZkluZGV4XSB8PSAoMHg4MCA+Pj4gKHRoaXMubGVuZ3RoICUgOCkpXG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGgrK1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQml0QnVmZmVyXG4iLCJ2YXIgQnVmZmVyVXRpbCA9IHJlcXVpcmUoJy4uL3V0aWxzL2J1ZmZlcicpXG5cbi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGhhbmRsZSBRUiBDb2RlIHN5bWJvbCBtb2R1bGVzXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHNpemUgU3ltYm9sIHNpemVcbiAqL1xuZnVuY3Rpb24gQml0TWF0cml4IChzaXplKSB7XG4gIGlmICghc2l6ZSB8fCBzaXplIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQml0TWF0cml4IHNpemUgbXVzdCBiZSBkZWZpbmVkIGFuZCBncmVhdGVyIHRoYW4gMCcpXG4gIH1cblxuICB0aGlzLnNpemUgPSBzaXplXG4gIHRoaXMuZGF0YSA9IEJ1ZmZlclV0aWwuYWxsb2Moc2l6ZSAqIHNpemUpXG4gIHRoaXMucmVzZXJ2ZWRCaXQgPSBCdWZmZXJVdGlsLmFsbG9jKHNpemUgKiBzaXplKVxufVxuXG4vKipcbiAqIFNldCBiaXQgdmFsdWUgYXQgc3BlY2lmaWVkIGxvY2F0aW9uXG4gKiBJZiByZXNlcnZlZCBmbGFnIGlzIHNldCwgdGhpcyBiaXQgd2lsbCBiZSBpZ25vcmVkIGR1cmluZyBtYXNraW5nIHByb2Nlc3NcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIHJvd1xuICogQHBhcmFtIHtOdW1iZXJ9ICBjb2xcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVzZXJ2ZWRcbiAqL1xuQml0TWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAocm93LCBjb2wsIHZhbHVlLCByZXNlcnZlZCkge1xuICB2YXIgaW5kZXggPSByb3cgKiB0aGlzLnNpemUgKyBjb2xcbiAgdGhpcy5kYXRhW2luZGV4XSA9IHZhbHVlXG4gIGlmIChyZXNlcnZlZCkgdGhpcy5yZXNlcnZlZEJpdFtpbmRleF0gPSB0cnVlXG59XG5cbi8qKlxuICogUmV0dXJucyBiaXQgdmFsdWUgYXQgc3BlY2lmaWVkIGxvY2F0aW9uXG4gKlxuICogQHBhcmFtICB7TnVtYmVyfSAgcm93XG4gKiBAcGFyYW0gIHtOdW1iZXJ9ICBjb2xcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbkJpdE1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHJvdywgY29sKSB7XG4gIHJldHVybiB0aGlzLmRhdGFbcm93ICogdGhpcy5zaXplICsgY29sXVxufVxuXG4vKipcbiAqIEFwcGxpZXMgeG9yIG9wZXJhdG9yIGF0IHNwZWNpZmllZCBsb2NhdGlvblxuICogKHVzZWQgZHVyaW5nIG1hc2tpbmcgcHJvY2VzcylcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIHJvd1xuICogQHBhcmFtIHtOdW1iZXJ9ICBjb2xcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gdmFsdWVcbiAqL1xuQml0TWF0cml4LnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiAocm93LCBjb2wsIHZhbHVlKSB7XG4gIHRoaXMuZGF0YVtyb3cgKiB0aGlzLnNpemUgKyBjb2xdIF49IHZhbHVlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYml0IGF0IHNwZWNpZmllZCBsb2NhdGlvbiBpcyByZXNlcnZlZFxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSAgIHJvd1xuICogQHBhcmFtIHtOdW1iZXJ9ICAgY29sXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5CaXRNYXRyaXgucHJvdG90eXBlLmlzUmVzZXJ2ZWQgPSBmdW5jdGlvbiAocm93LCBjb2wpIHtcbiAgcmV0dXJuIHRoaXMucmVzZXJ2ZWRCaXRbcm93ICogdGhpcy5zaXplICsgY29sXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJpdE1hdHJpeFxuIiwidmFyIEJ1ZmZlclV0aWwgPSByZXF1aXJlKCcuLi91dGlscy9idWZmZXInKVxudmFyIE1vZGUgPSByZXF1aXJlKCcuL21vZGUnKVxuXG5mdW5jdGlvbiBCeXRlRGF0YSAoZGF0YSkge1xuICB0aGlzLm1vZGUgPSBNb2RlLkJZVEVcbiAgdGhpcy5kYXRhID0gQnVmZmVyVXRpbC5mcm9tKGRhdGEpXG59XG5cbkJ5dGVEYXRhLmdldEJpdHNMZW5ndGggPSBmdW5jdGlvbiBnZXRCaXRzTGVuZ3RoIChsZW5ndGgpIHtcbiAgcmV0dXJuIGxlbmd0aCAqIDhcbn1cblxuQnl0ZURhdGEucHJvdG90eXBlLmdldExlbmd0aCA9IGZ1bmN0aW9uIGdldExlbmd0aCAoKSB7XG4gIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoXG59XG5cbkJ5dGVEYXRhLnByb3RvdHlwZS5nZXRCaXRzTGVuZ3RoID0gZnVuY3Rpb24gZ2V0Qml0c0xlbmd0aCAoKSB7XG4gIHJldHVybiBCeXRlRGF0YS5nZXRCaXRzTGVuZ3RoKHRoaXMuZGF0YS5sZW5ndGgpXG59XG5cbkJ5dGVEYXRhLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChiaXRCdWZmZXIpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmRhdGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYml0QnVmZmVyLnB1dCh0aGlzLmRhdGFbaV0sIDgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCeXRlRGF0YVxuIiwidmFyIEVDTGV2ZWwgPSByZXF1aXJlKCcuL2Vycm9yLWNvcnJlY3Rpb24tbGV2ZWwnKVxyXG5cclxudmFyIEVDX0JMT0NLU19UQUJMRSA9IFtcclxuLy8gTCAgTSAgUSAgSFxyXG4gIDEsIDEsIDEsIDEsXHJcbiAgMSwgMSwgMSwgMSxcclxuICAxLCAxLCAyLCAyLFxyXG4gIDEsIDIsIDIsIDQsXHJcbiAgMSwgMiwgNCwgNCxcclxuICAyLCA0LCA0LCA0LFxyXG4gIDIsIDQsIDYsIDUsXHJcbiAgMiwgNCwgNiwgNixcclxuICAyLCA1LCA4LCA4LFxyXG4gIDQsIDUsIDgsIDgsXHJcbiAgNCwgNSwgOCwgMTEsXHJcbiAgNCwgOCwgMTAsIDExLFxyXG4gIDQsIDksIDEyLCAxNixcclxuICA0LCA5LCAxNiwgMTYsXHJcbiAgNiwgMTAsIDEyLCAxOCxcclxuICA2LCAxMCwgMTcsIDE2LFxyXG4gIDYsIDExLCAxNiwgMTksXHJcbiAgNiwgMTMsIDE4LCAyMSxcclxuICA3LCAxNCwgMjEsIDI1LFxyXG4gIDgsIDE2LCAyMCwgMjUsXHJcbiAgOCwgMTcsIDIzLCAyNSxcclxuICA5LCAxNywgMjMsIDM0LFxyXG4gIDksIDE4LCAyNSwgMzAsXHJcbiAgMTAsIDIwLCAyNywgMzIsXHJcbiAgMTIsIDIxLCAyOSwgMzUsXHJcbiAgMTIsIDIzLCAzNCwgMzcsXHJcbiAgMTIsIDI1LCAzNCwgNDAsXHJcbiAgMTMsIDI2LCAzNSwgNDIsXHJcbiAgMTQsIDI4LCAzOCwgNDUsXHJcbiAgMTUsIDI5LCA0MCwgNDgsXHJcbiAgMTYsIDMxLCA0MywgNTEsXHJcbiAgMTcsIDMzLCA0NSwgNTQsXHJcbiAgMTgsIDM1LCA0OCwgNTcsXHJcbiAgMTksIDM3LCA1MSwgNjAsXHJcbiAgMTksIDM4LCA1MywgNjMsXHJcbiAgMjAsIDQwLCA1NiwgNjYsXHJcbiAgMjEsIDQzLCA1OSwgNzAsXHJcbiAgMjIsIDQ1LCA2MiwgNzQsXHJcbiAgMjQsIDQ3LCA2NSwgNzcsXHJcbiAgMjUsIDQ5LCA2OCwgODFcclxuXVxyXG5cclxudmFyIEVDX0NPREVXT1JEU19UQUJMRSA9IFtcclxuLy8gTCAgTSAgUSAgSFxyXG4gIDcsIDEwLCAxMywgMTcsXHJcbiAgMTAsIDE2LCAyMiwgMjgsXHJcbiAgMTUsIDI2LCAzNiwgNDQsXHJcbiAgMjAsIDM2LCA1MiwgNjQsXHJcbiAgMjYsIDQ4LCA3MiwgODgsXHJcbiAgMzYsIDY0LCA5NiwgMTEyLFxyXG4gIDQwLCA3MiwgMTA4LCAxMzAsXHJcbiAgNDgsIDg4LCAxMzIsIDE1NixcclxuICA2MCwgMTEwLCAxNjAsIDE5MixcclxuICA3MiwgMTMwLCAxOTIsIDIyNCxcclxuICA4MCwgMTUwLCAyMjQsIDI2NCxcclxuICA5NiwgMTc2LCAyNjAsIDMwOCxcclxuICAxMDQsIDE5OCwgMjg4LCAzNTIsXHJcbiAgMTIwLCAyMTYsIDMyMCwgMzg0LFxyXG4gIDEzMiwgMjQwLCAzNjAsIDQzMixcclxuICAxNDQsIDI4MCwgNDA4LCA0ODAsXHJcbiAgMTY4LCAzMDgsIDQ0OCwgNTMyLFxyXG4gIDE4MCwgMzM4LCA1MDQsIDU4OCxcclxuICAxOTYsIDM2NCwgNTQ2LCA2NTAsXHJcbiAgMjI0LCA0MTYsIDYwMCwgNzAwLFxyXG4gIDIyNCwgNDQyLCA2NDQsIDc1MCxcclxuICAyNTIsIDQ3NiwgNjkwLCA4MTYsXHJcbiAgMjcwLCA1MDQsIDc1MCwgOTAwLFxyXG4gIDMwMCwgNTYwLCA4MTAsIDk2MCxcclxuICAzMTIsIDU4OCwgODcwLCAxMDUwLFxyXG4gIDMzNiwgNjQ0LCA5NTIsIDExMTAsXHJcbiAgMzYwLCA3MDAsIDEwMjAsIDEyMDAsXHJcbiAgMzkwLCA3MjgsIDEwNTAsIDEyNjAsXHJcbiAgNDIwLCA3ODQsIDExNDAsIDEzNTAsXHJcbiAgNDUwLCA4MTIsIDEyMDAsIDE0NDAsXHJcbiAgNDgwLCA4NjgsIDEyOTAsIDE1MzAsXHJcbiAgNTEwLCA5MjQsIDEzNTAsIDE2MjAsXHJcbiAgNTQwLCA5ODAsIDE0NDAsIDE3MTAsXHJcbiAgNTcwLCAxMDM2LCAxNTMwLCAxODAwLFxyXG4gIDU3MCwgMTA2NCwgMTU5MCwgMTg5MCxcclxuICA2MDAsIDExMjAsIDE2ODAsIDE5ODAsXHJcbiAgNjMwLCAxMjA0LCAxNzcwLCAyMTAwLFxyXG4gIDY2MCwgMTI2MCwgMTg2MCwgMjIyMCxcclxuICA3MjAsIDEzMTYsIDE5NTAsIDIzMTAsXHJcbiAgNzUwLCAxMzcyLCAyMDQwLCAyNDMwXHJcbl1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3IgY29ycmVjdGlvbiBibG9jayB0aGF0IHRoZSBRUiBDb2RlIHNob3VsZCBjb250YWluXHJcbiAqIGZvciB0aGUgc3BlY2lmaWVkIHZlcnNpb24gYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwuXHJcbiAqXHJcbiAqIEBwYXJhbSAge051bWJlcn0gdmVyc2lvbiAgICAgICAgICAgICAgUVIgQ29kZSB2ZXJzaW9uXHJcbiAqIEBwYXJhbSAge051bWJlcn0gZXJyb3JDb3JyZWN0aW9uTGV2ZWwgRXJyb3IgY29ycmVjdGlvbiBsZXZlbFxyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBlcnJvciBjb3JyZWN0aW9uIGJsb2Nrc1xyXG4gKi9cclxuZXhwb3J0cy5nZXRCbG9ja3NDb3VudCA9IGZ1bmN0aW9uIGdldEJsb2Nrc0NvdW50ICh2ZXJzaW9uLCBlcnJvckNvcnJlY3Rpb25MZXZlbCkge1xyXG4gIHN3aXRjaCAoZXJyb3JDb3JyZWN0aW9uTGV2ZWwpIHtcclxuICAgIGNhc2UgRUNMZXZlbC5MOlxyXG4gICAgICByZXR1cm4gRUNfQkxPQ0tTX1RBQkxFWyh2ZXJzaW9uIC0gMSkgKiA0ICsgMF1cclxuICAgIGNhc2UgRUNMZXZlbC5NOlxyXG4gICAgICByZXR1cm4gRUNfQkxPQ0tTX1RBQkxFWyh2ZXJzaW9uIC0gMSkgKiA0ICsgMV1cclxuICAgIGNhc2UgRUNMZXZlbC5ROlxyXG4gICAgICByZXR1cm4gRUNfQkxPQ0tTX1RBQkxFWyh2ZXJzaW9uIC0gMSkgKiA0ICsgMl1cclxuICAgIGNhc2UgRUNMZXZlbC5IOlxyXG4gICAgICByZXR1cm4gRUNfQkxPQ0tTX1RBQkxFWyh2ZXJzaW9uIC0gMSkgKiA0ICsgM11cclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3IgY29ycmVjdGlvbiBjb2Rld29yZHMgdG8gdXNlIGZvciB0aGUgc3BlY2lmaWVkXHJcbiAqIHZlcnNpb24gYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwuXHJcbiAqXHJcbiAqIEBwYXJhbSAge051bWJlcn0gdmVyc2lvbiAgICAgICAgICAgICAgUVIgQ29kZSB2ZXJzaW9uXHJcbiAqIEBwYXJhbSAge051bWJlcn0gZXJyb3JDb3JyZWN0aW9uTGV2ZWwgRXJyb3IgY29ycmVjdGlvbiBsZXZlbFxyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBlcnJvciBjb3JyZWN0aW9uIGNvZGV3b3Jkc1xyXG4gKi9cclxuZXhwb3J0cy5nZXRUb3RhbENvZGV3b3Jkc0NvdW50ID0gZnVuY3Rpb24gZ2V0VG90YWxDb2Rld29yZHNDb3VudCAodmVyc2lvbiwgZXJyb3JDb3JyZWN0aW9uTGV2ZWwpIHtcclxuICBzd2l0Y2ggKGVycm9yQ29ycmVjdGlvbkxldmVsKSB7XHJcbiAgICBjYXNlIEVDTGV2ZWwuTDpcclxuICAgICAgcmV0dXJuIEVDX0NPREVXT1JEU19UQUJMRVsodmVyc2lvbiAtIDEpICogNCArIDBdXHJcbiAgICBjYXNlIEVDTGV2ZWwuTTpcclxuICAgICAgcmV0dXJuIEVDX0NPREVXT1JEU19UQUJMRVsodmVyc2lvbiAtIDEpICogNCArIDFdXHJcbiAgICBjYXNlIEVDTGV2ZWwuUTpcclxuICAgICAgcmV0dXJuIEVDX0NPREVXT1JEU19UQUJMRVsodmVyc2lvbiAtIDEpICogNCArIDJdXHJcbiAgICBjYXNlIEVDTGV2ZWwuSDpcclxuICAgICAgcmV0dXJuIEVDX0NPREVXT1JEU19UQUJMRVsodmVyc2lvbiAtIDEpICogNCArIDNdXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydHMuTCA9IHsgYml0OiAxIH1cbmV4cG9ydHMuTSA9IHsgYml0OiAwIH1cbmV4cG9ydHMuUSA9IHsgYml0OiAzIH1cbmV4cG9ydHMuSCA9IHsgYml0OiAyIH1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFyYW0gaXMgbm90IGEgc3RyaW5nJylcbiAgfVxuXG4gIHZhciBsY1N0ciA9IHN0cmluZy50b0xvd2VyQ2FzZSgpXG5cbiAgc3dpdGNoIChsY1N0cikge1xuICAgIGNhc2UgJ2wnOlxuICAgIGNhc2UgJ2xvdyc6XG4gICAgICByZXR1cm4gZXhwb3J0cy5MXG5cbiAgICBjYXNlICdtJzpcbiAgICBjYXNlICdtZWRpdW0nOlxuICAgICAgcmV0dXJuIGV4cG9ydHMuTVxuXG4gICAgY2FzZSAncSc6XG4gICAgY2FzZSAncXVhcnRpbGUnOlxuICAgICAgcmV0dXJuIGV4cG9ydHMuUVxuXG4gICAgY2FzZSAnaCc6XG4gICAgY2FzZSAnaGlnaCc6XG4gICAgICByZXR1cm4gZXhwb3J0cy5IXG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIEVDIExldmVsOiAnICsgc3RyaW5nKVxuICB9XG59XG5cbmV4cG9ydHMuaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQgKGxldmVsKSB7XG4gIHJldHVybiBsZXZlbCAmJiB0eXBlb2YgbGV2ZWwuYml0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIGxldmVsLmJpdCA+PSAwICYmIGxldmVsLmJpdCA8IDRcbn1cblxuZXhwb3J0cy5mcm9tID0gZnVuY3Rpb24gZnJvbSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICBpZiAoZXhwb3J0cy5pc1ZhbGlkKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgfVxufVxuIiwidmFyIGdldFN5bWJvbFNpemUgPSByZXF1aXJlKCcuL3V0aWxzJykuZ2V0U3ltYm9sU2l6ZVxudmFyIEZJTkRFUl9QQVRURVJOX1NJWkUgPSA3XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBwb3NpdGlvbnMgb2YgZWFjaCBmaW5kZXIgcGF0dGVybi5cbiAqIEVhY2ggYXJyYXkncyBlbGVtZW50IHJlcHJlc2VudCB0aGUgdG9wLWxlZnQgcG9pbnQgb2YgdGhlIHBhdHRlcm4gYXMgKHgsIHkpIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtICB7TnVtYmVyfSB2ZXJzaW9uIFFSIENvZGUgdmVyc2lvblxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgIEFycmF5IG9mIGNvb3JkaW5hdGVzXG4gKi9cbmV4cG9ydHMuZ2V0UG9zaXRpb25zID0gZnVuY3Rpb24gZ2V0UG9zaXRpb25zICh2ZXJzaW9uKSB7XG4gIHZhciBzaXplID0gZ2V0U3ltYm9sU2l6ZSh2ZXJzaW9uKVxuXG4gIHJldHVybiBbXG4gICAgLy8gdG9wLWxlZnRcbiAgICBbMCwgMF0sXG4gICAgLy8gdG9wLXJpZ2h0XG4gICAgW3NpemUgLSBGSU5ERVJfUEFUVEVSTl9TSVpFLCAwXSxcbiAgICAvLyBib3R0b20tbGVmdFxuICAgIFswLCBzaXplIC0gRklOREVSX1BBVFRFUk5fU0laRV1cbiAgXVxufVxuIiwidmFyIFV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpXG5cbnZhciBHMTUgPSAoMSA8PCAxMCkgfCAoMSA8PCA4KSB8ICgxIDw8IDUpIHwgKDEgPDwgNCkgfCAoMSA8PCAyKSB8ICgxIDw8IDEpIHwgKDEgPDwgMClcbnZhciBHMTVfTUFTSyA9ICgxIDw8IDE0KSB8ICgxIDw8IDEyKSB8ICgxIDw8IDEwKSB8ICgxIDw8IDQpIHwgKDEgPDwgMSlcbnZhciBHMTVfQkNIID0gVXRpbHMuZ2V0QkNIRGlnaXQoRzE1KVxuXG4vKipcbiAqIFJldHVybnMgZm9ybWF0IGluZm9ybWF0aW9uIHdpdGggcmVsYXRpdmUgZXJyb3IgY29ycmVjdGlvbiBiaXRzXG4gKlxuICogVGhlIGZvcm1hdCBpbmZvcm1hdGlvbiBpcyBhIDE1LWJpdCBzZXF1ZW5jZSBjb250YWluaW5nIDUgZGF0YSBiaXRzLFxuICogd2l0aCAxMCBlcnJvciBjb3JyZWN0aW9uIGJpdHMgY2FsY3VsYXRlZCB1c2luZyB0aGUgKDE1LCA1KSBCQ0ggY29kZS5cbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGVycm9yQ29ycmVjdGlvbkxldmVsIEVycm9yIGNvcnJlY3Rpb24gbGV2ZWxcbiAqIEBwYXJhbSAge051bWJlcn0gbWFzayAgICAgICAgICAgICAgICAgTWFzayBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgICAgICAgICAgICAgIEVuY29kZWQgZm9ybWF0IGluZm9ybWF0aW9uIGJpdHNcbiAqL1xuZXhwb3J0cy5nZXRFbmNvZGVkQml0cyA9IGZ1bmN0aW9uIGdldEVuY29kZWRCaXRzIChlcnJvckNvcnJlY3Rpb25MZXZlbCwgbWFzaykge1xuICB2YXIgZGF0YSA9ICgoZXJyb3JDb3JyZWN0aW9uTGV2ZWwuYml0IDw8IDMpIHwgbWFzaylcbiAgdmFyIGQgPSBkYXRhIDw8IDEwXG5cbiAgd2hpbGUgKFV0aWxzLmdldEJDSERpZ2l0KGQpIC0gRzE1X0JDSCA+PSAwKSB7XG4gICAgZCBePSAoRzE1IDw8IChVdGlscy5nZXRCQ0hEaWdpdChkKSAtIEcxNV9CQ0gpKVxuICB9XG5cbiAgLy8geG9yIGZpbmFsIGRhdGEgd2l0aCBtYXNrIHBhdHRlcm4gaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXRcbiAgLy8gbm8gY29tYmluYXRpb24gb2YgRXJyb3IgQ29ycmVjdGlvbiBMZXZlbCBhbmQgZGF0YSBtYXNrIHBhdHRlcm5cbiAgLy8gd2lsbCByZXN1bHQgaW4gYW4gYWxsLXplcm8gZGF0YSBzdHJpbmdcbiAgcmV0dXJuICgoZGF0YSA8PCAxMCkgfCBkKSBeIEcxNV9NQVNLXG59XG4iLCJ2YXIgQnVmZmVyVXRpbCA9IHJlcXVpcmUoJy4uL3V0aWxzL2J1ZmZlcicpXG5cbnZhciBFWFBfVEFCTEUgPSBCdWZmZXJVdGlsLmFsbG9jKDUxMilcbnZhciBMT0dfVEFCTEUgPSBCdWZmZXJVdGlsLmFsbG9jKDI1Nilcbi8qKlxuICogUHJlY29tcHV0ZSB0aGUgbG9nIGFuZCBhbnRpLWxvZyB0YWJsZXMgZm9yIGZhc3RlciBjb21wdXRhdGlvbiBsYXRlclxuICpcbiAqIEZvciBlYWNoIHBvc3NpYmxlIHZhbHVlIGluIHRoZSBnYWxvaXMgZmllbGQgMl44LCB3ZSB3aWxsIHByZS1jb21wdXRlXG4gKiB0aGUgbG9nYXJpdGhtIGFuZCBhbnRpLWxvZ2FyaXRobSAoZXhwb25lbnRpYWwpIG9mIHRoaXMgdmFsdWVcbiAqXG4gKiByZWYge0BsaW5rIGh0dHBzOi8vZW4ud2lraXZlcnNpdHkub3JnL3dpa2kvUmVlZCVFMiU4MCU5M1NvbG9tb25fY29kZXNfZm9yX2NvZGVycyNJbnRyb2R1Y3Rpb25fdG9fbWF0aGVtYXRpY2FsX2ZpZWxkc31cbiAqL1xuOyhmdW5jdGlvbiBpbml0VGFibGVzICgpIHtcbiAgdmFyIHggPSAxXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjU1OyBpKyspIHtcbiAgICBFWFBfVEFCTEVbaV0gPSB4XG4gICAgTE9HX1RBQkxFW3hdID0gaVxuXG4gICAgeCA8PD0gMSAvLyBtdWx0aXBseSBieSAyXG5cbiAgICAvLyBUaGUgUVIgY29kZSBzcGVjaWZpY2F0aW9uIHNheXMgdG8gdXNlIGJ5dGUtd2lzZSBtb2R1bG8gMTAwMDExMTAxIGFyaXRobWV0aWMuXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IHdoZW4gYSBudW1iZXIgaXMgMjU2IG9yIGxhcmdlciwgaXQgc2hvdWxkIGJlIFhPUmVkIHdpdGggMHgxMUQuXG4gICAgaWYgKHggJiAweDEwMCkgeyAvLyBzaW1pbGFyIHRvIHggPj0gMjU2LCBidXQgYSBsb3QgZmFzdGVyIChiZWNhdXNlIDB4MTAwID09IDI1NilcbiAgICAgIHggXj0gMHgxMURcbiAgICB9XG4gIH1cblxuICAvLyBPcHRpbWl6YXRpb246IGRvdWJsZSB0aGUgc2l6ZSBvZiB0aGUgYW50aS1sb2cgdGFibGUgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIG1vZCAyNTUgdG9cbiAgLy8gc3RheSBpbnNpZGUgdGhlIGJvdW5kcyAoYmVjYXVzZSB3ZSB3aWxsIG1haW5seSB1c2UgdGhpcyB0YWJsZSBmb3IgdGhlIG11bHRpcGxpY2F0aW9uIG9mXG4gIC8vIHR3byBHRiBudW1iZXJzLCBubyBtb3JlKS5cbiAgLy8gQHNlZSB7QGxpbmsgbXVsfVxuICBmb3IgKGkgPSAyNTU7IGkgPCA1MTI7IGkrKykge1xuICAgIEVYUF9UQUJMRVtpXSA9IEVYUF9UQUJMRVtpIC0gMjU1XVxuICB9XG59KCkpXG5cbi8qKlxuICogUmV0dXJucyBsb2cgdmFsdWUgb2YgbiBpbnNpZGUgR2Fsb2lzIEZpZWxkXG4gKlxuICogQHBhcmFtICB7TnVtYmVyfSBuXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmV4cG9ydHMubG9nID0gZnVuY3Rpb24gbG9nIChuKSB7XG4gIGlmIChuIDwgMSkgdGhyb3cgbmV3IEVycm9yKCdsb2coJyArIG4gKyAnKScpXG4gIHJldHVybiBMT0dfVEFCTEVbbl1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFudGktbG9nIHZhbHVlIG9mIG4gaW5zaWRlIEdhbG9pcyBGaWVsZFxuICpcbiAqIEBwYXJhbSAge051bWJlcn0gblxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5leHBvcnRzLmV4cCA9IGZ1bmN0aW9uIGV4cCAobikge1xuICByZXR1cm4gRVhQX1RBQkxFW25dXG59XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbnVtYmVyIGluc2lkZSBHYWxvaXMgRmllbGRcbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSAge051bWJlcn0geVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5leHBvcnRzLm11bCA9IGZ1bmN0aW9uIG11bCAoeCwgeSkge1xuICBpZiAoeCA9PT0gMCB8fCB5ID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIHNob3VsZCBiZSBFWFBfVEFCTEVbKExPR19UQUJMRVt4XSArIExPR19UQUJMRVt5XSkgJSAyNTVdIGlmIEVYUF9UQUJMRSB3YXNuJ3Qgb3ZlcnNpemVkXG4gIC8vIEBzZWUge0BsaW5rIGluaXRUYWJsZXN9XG4gIHJldHVybiBFWFBfVEFCTEVbTE9HX1RBQkxFW3hdICsgTE9HX1RBQkxFW3ldXVxufVxuIiwidmFyIE1vZGUgPSByZXF1aXJlKCcuL21vZGUnKVxudmFyIFV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmZ1bmN0aW9uIEthbmppRGF0YSAoZGF0YSkge1xuICB0aGlzLm1vZGUgPSBNb2RlLktBTkpJXG4gIHRoaXMuZGF0YSA9IGRhdGFcbn1cblxuS2FuamlEYXRhLmdldEJpdHNMZW5ndGggPSBmdW5jdGlvbiBnZXRCaXRzTGVuZ3RoIChsZW5ndGgpIHtcbiAgcmV0dXJuIGxlbmd0aCAqIDEzXG59XG5cbkthbmppRGF0YS5wcm90b3R5cGUuZ2V0TGVuZ3RoID0gZnVuY3Rpb24gZ2V0TGVuZ3RoICgpIHtcbiAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGhcbn1cblxuS2FuamlEYXRhLnByb3RvdHlwZS5nZXRCaXRzTGVuZ3RoID0gZnVuY3Rpb24gZ2V0Qml0c0xlbmd0aCAoKSB7XG4gIHJldHVybiBLYW5qaURhdGEuZ2V0Qml0c0xlbmd0aCh0aGlzLmRhdGEubGVuZ3RoKVxufVxuXG5LYW5qaURhdGEucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJpdEJ1ZmZlcikge1xuICB2YXIgaVxuXG4gIC8vIEluIHRoZSBTaGlmdCBKSVMgc3lzdGVtLCBLYW5qaSBjaGFyYWN0ZXJzIGFyZSByZXByZXNlbnRlZCBieSBhIHR3byBieXRlIGNvbWJpbmF0aW9uLlxuICAvLyBUaGVzZSBieXRlIHZhbHVlcyBhcmUgc2hpZnRlZCBmcm9tIHRoZSBKSVMgWCAwMjA4IHZhbHVlcy5cbiAgLy8gSklTIFggMDIwOCBnaXZlcyBkZXRhaWxzIG9mIHRoZSBzaGlmdCBjb2RlZCByZXByZXNlbnRhdGlvbi5cbiAgZm9yIChpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIHZhciB2YWx1ZSA9IFV0aWxzLnRvU0pJUyh0aGlzLmRhdGFbaV0pXG5cbiAgICAvLyBGb3IgY2hhcmFjdGVycyB3aXRoIFNoaWZ0IEpJUyB2YWx1ZXMgZnJvbSAweDgxNDAgdG8gMHg5RkZDOlxuICAgIGlmICh2YWx1ZSA+PSAweDgxNDAgJiYgdmFsdWUgPD0gMHg5RkZDKSB7XG4gICAgICAvLyBTdWJ0cmFjdCAweDgxNDAgZnJvbSBTaGlmdCBKSVMgdmFsdWVcbiAgICAgIHZhbHVlIC09IDB4ODE0MFxuXG4gICAgLy8gRm9yIGNoYXJhY3RlcnMgd2l0aCBTaGlmdCBKSVMgdmFsdWVzIGZyb20gMHhFMDQwIHRvIDB4RUJCRlxuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMHhFMDQwICYmIHZhbHVlIDw9IDB4RUJCRikge1xuICAgICAgLy8gU3VidHJhY3QgMHhDMTQwIGZyb20gU2hpZnQgSklTIHZhbHVlXG4gICAgICB2YWx1ZSAtPSAweEMxNDBcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSW52YWxpZCBTSklTIGNoYXJhY3RlcjogJyArIHRoaXMuZGF0YVtpXSArICdcXG4nICtcbiAgICAgICAgJ01ha2Ugc3VyZSB5b3VyIGNoYXJzZXQgaXMgVVRGLTgnKVxuICAgIH1cblxuICAgIC8vIE11bHRpcGx5IG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiByZXN1bHQgYnkgMHhDMFxuICAgIC8vIGFuZCBhZGQgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSB0byBwcm9kdWN0XG4gICAgdmFsdWUgPSAoKCh2YWx1ZSA+Pj4gOCkgJiAweGZmKSAqIDB4QzApICsgKHZhbHVlICYgMHhmZilcblxuICAgIC8vIENvbnZlcnQgcmVzdWx0IHRvIGEgMTMtYml0IGJpbmFyeSBzdHJpbmdcbiAgICBiaXRCdWZmZXIucHV0KHZhbHVlLCAxMylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEthbmppRGF0YVxuIiwiLyoqXG4gKiBEYXRhIG1hc2sgcGF0dGVybiByZWZlcmVuY2VcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydHMuUGF0dGVybnMgPSB7XG4gIFBBVFRFUk4wMDA6IDAsXG4gIFBBVFRFUk4wMDE6IDEsXG4gIFBBVFRFUk4wMTA6IDIsXG4gIFBBVFRFUk4wMTE6IDMsXG4gIFBBVFRFUk4xMDA6IDQsXG4gIFBBVFRFUk4xMDE6IDUsXG4gIFBBVFRFUk4xMTA6IDYsXG4gIFBBVFRFUk4xMTE6IDdcbn1cblxuLyoqXG4gKiBXZWlnaHRlZCBwZW5hbHR5IHNjb3JlcyBmb3IgdGhlIHVuZGVzaXJhYmxlIGZlYXR1cmVzXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG52YXIgUGVuYWx0eVNjb3JlcyA9IHtcbiAgTjE6IDMsXG4gIE4yOiAzLFxuICBOMzogNDAsXG4gIE40OiAxMFxufVxuXG4vKipcbiAqIENoZWNrIGlmIG1hc2sgcGF0dGVybiB2YWx1ZSBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSAge051bWJlcn0gIG1hc2sgICAgTWFzayBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICAgIHRydWUgaWYgdmFsaWQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnRzLmlzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkIChtYXNrKSB7XG4gIHJldHVybiBtYXNrICE9IG51bGwgJiYgbWFzayAhPT0gJycgJiYgIWlzTmFOKG1hc2spICYmIG1hc2sgPj0gMCAmJiBtYXNrIDw9IDdcbn1cblxuLyoqXG4gKiBSZXR1cm5zIG1hc2sgcGF0dGVybiBmcm9tIGEgdmFsdWUuXG4gKiBJZiB2YWx1ZSBpcyBub3QgdmFsaWQsIHJldHVybnMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtICB7TnVtYmVyfFN0cmluZ30gdmFsdWUgICAgICAgIE1hc2sgcGF0dGVybiB2YWx1ZVxuICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgICAgIFZhbGlkIG1hc2sgcGF0dGVybiBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0cy5mcm9tID0gZnVuY3Rpb24gZnJvbSAodmFsdWUpIHtcbiAgcmV0dXJuIGV4cG9ydHMuaXNWYWxpZCh2YWx1ZSkgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuKiBGaW5kIGFkamFjZW50IG1vZHVsZXMgaW4gcm93L2NvbHVtbiB3aXRoIHRoZSBzYW1lIGNvbG9yXG4qIGFuZCBhc3NpZ24gYSBwZW5hbHR5IHZhbHVlLlxuKlxuKiBQb2ludHM6IE4xICsgaVxuKiBpIGlzIHRoZSBhbW91bnQgYnkgd2hpY2ggdGhlIG51bWJlciBvZiBhZGphY2VudCBtb2R1bGVzIG9mIHRoZSBzYW1lIGNvbG9yIGV4Y2VlZHMgNVxuKi9cbmV4cG9ydHMuZ2V0UGVuYWx0eU4xID0gZnVuY3Rpb24gZ2V0UGVuYWx0eU4xIChkYXRhKSB7XG4gIHZhciBzaXplID0gZGF0YS5zaXplXG4gIHZhciBwb2ludHMgPSAwXG4gIHZhciBzYW1lQ291bnRDb2wgPSAwXG4gIHZhciBzYW1lQ291bnRSb3cgPSAwXG4gIHZhciBsYXN0Q29sID0gbnVsbFxuICB2YXIgbGFzdFJvdyA9IG51bGxcblxuICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBzaXplOyByb3crKykge1xuICAgIHNhbWVDb3VudENvbCA9IHNhbWVDb3VudFJvdyA9IDBcbiAgICBsYXN0Q29sID0gbGFzdFJvdyA9IG51bGxcblxuICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IHNpemU7IGNvbCsrKSB7XG4gICAgICB2YXIgbW9kdWxlID0gZGF0YS5nZXQocm93LCBjb2wpXG4gICAgICBpZiAobW9kdWxlID09PSBsYXN0Q29sKSB7XG4gICAgICAgIHNhbWVDb3VudENvbCsrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc2FtZUNvdW50Q29sID49IDUpIHBvaW50cyArPSBQZW5hbHR5U2NvcmVzLk4xICsgKHNhbWVDb3VudENvbCAtIDUpXG4gICAgICAgIGxhc3RDb2wgPSBtb2R1bGVcbiAgICAgICAgc2FtZUNvdW50Q29sID0gMVxuICAgICAgfVxuXG4gICAgICBtb2R1bGUgPSBkYXRhLmdldChjb2wsIHJvdylcbiAgICAgIGlmIChtb2R1bGUgPT09IGxhc3RSb3cpIHtcbiAgICAgICAgc2FtZUNvdW50Um93KytcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzYW1lQ291bnRSb3cgPj0gNSkgcG9pbnRzICs9IFBlbmFsdHlTY29yZXMuTjEgKyAoc2FtZUNvdW50Um93IC0gNSlcbiAgICAgICAgbGFzdFJvdyA9IG1vZHVsZVxuICAgICAgICBzYW1lQ291bnRSb3cgPSAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNhbWVDb3VudENvbCA+PSA1KSBwb2ludHMgKz0gUGVuYWx0eVNjb3Jlcy5OMSArIChzYW1lQ291bnRDb2wgLSA1KVxuICAgIGlmIChzYW1lQ291bnRSb3cgPj0gNSkgcG9pbnRzICs9IFBlbmFsdHlTY29yZXMuTjEgKyAoc2FtZUNvdW50Um93IC0gNSlcbiAgfVxuXG4gIHJldHVybiBwb2ludHNcbn1cblxuLyoqXG4gKiBGaW5kIDJ4MiBibG9ja3Mgd2l0aCB0aGUgc2FtZSBjb2xvciBhbmQgYXNzaWduIGEgcGVuYWx0eSB2YWx1ZVxuICpcbiAqIFBvaW50czogTjIgKiAobSAtIDEpICogKG4gLSAxKVxuICovXG5leHBvcnRzLmdldFBlbmFsdHlOMiA9IGZ1bmN0aW9uIGdldFBlbmFsdHlOMiAoZGF0YSkge1xuICB2YXIgc2l6ZSA9IGRhdGEuc2l6ZVxuICB2YXIgcG9pbnRzID0gMFxuXG4gIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IHNpemUgLSAxOyByb3crKykge1xuICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IHNpemUgLSAxOyBjb2wrKykge1xuICAgICAgdmFyIGxhc3QgPSBkYXRhLmdldChyb3csIGNvbCkgK1xuICAgICAgICBkYXRhLmdldChyb3csIGNvbCArIDEpICtcbiAgICAgICAgZGF0YS5nZXQocm93ICsgMSwgY29sKSArXG4gICAgICAgIGRhdGEuZ2V0KHJvdyArIDEsIGNvbCArIDEpXG5cbiAgICAgIGlmIChsYXN0ID09PSA0IHx8IGxhc3QgPT09IDApIHBvaW50cysrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBvaW50cyAqIFBlbmFsdHlTY29yZXMuTjJcbn1cblxuLyoqXG4gKiBGaW5kIDE6MTozOjE6MSByYXRpbyAoZGFyazpsaWdodDpkYXJrOmxpZ2h0OmRhcmspIHBhdHRlcm4gaW4gcm93L2NvbHVtbixcbiAqIHByZWNlZGVkIG9yIGZvbGxvd2VkIGJ5IGxpZ2h0IGFyZWEgNCBtb2R1bGVzIHdpZGVcbiAqXG4gKiBQb2ludHM6IE4zICogbnVtYmVyIG9mIHBhdHRlcm4gZm91bmRcbiAqL1xuZXhwb3J0cy5nZXRQZW5hbHR5TjMgPSBmdW5jdGlvbiBnZXRQZW5hbHR5TjMgKGRhdGEpIHtcbiAgdmFyIHNpemUgPSBkYXRhLnNpemVcbiAgdmFyIHBvaW50cyA9IDBcbiAgdmFyIGJpdHNDb2wgPSAwXG4gIHZhciBiaXRzUm93ID0gMFxuXG4gIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7XG4gICAgYml0c0NvbCA9IGJpdHNSb3cgPSAwXG4gICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgc2l6ZTsgY29sKyspIHtcbiAgICAgIGJpdHNDb2wgPSAoKGJpdHNDb2wgPDwgMSkgJiAweDdGRikgfCBkYXRhLmdldChyb3csIGNvbClcbiAgICAgIGlmIChjb2wgPj0gMTAgJiYgKGJpdHNDb2wgPT09IDB4NUQwIHx8IGJpdHNDb2wgPT09IDB4MDVEKSkgcG9pbnRzKytcblxuICAgICAgYml0c1JvdyA9ICgoYml0c1JvdyA8PCAxKSAmIDB4N0ZGKSB8IGRhdGEuZ2V0KGNvbCwgcm93KVxuICAgICAgaWYgKGNvbCA+PSAxMCAmJiAoYml0c1JvdyA9PT0gMHg1RDAgfHwgYml0c1JvdyA9PT0gMHgwNUQpKSBwb2ludHMrK1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwb2ludHMgKiBQZW5hbHR5U2NvcmVzLk4zXG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHByb3BvcnRpb24gb2YgZGFyayBtb2R1bGVzIGluIGVudGlyZSBzeW1ib2xcbiAqXG4gKiBQb2ludHM6IE40ICoga1xuICpcbiAqIGsgaXMgdGhlIHJhdGluZyBvZiB0aGUgZGV2aWF0aW9uIG9mIHRoZSBwcm9wb3J0aW9uIG9mIGRhcmsgbW9kdWxlc1xuICogaW4gdGhlIHN5bWJvbCBmcm9tIDUwJSBpbiBzdGVwcyBvZiA1JVxuICovXG5leHBvcnRzLmdldFBlbmFsdHlONCA9IGZ1bmN0aW9uIGdldFBlbmFsdHlONCAoZGF0YSkge1xuICB2YXIgZGFya0NvdW50ID0gMFxuICB2YXIgbW9kdWxlc0NvdW50ID0gZGF0YS5kYXRhLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kdWxlc0NvdW50OyBpKyspIGRhcmtDb3VudCArPSBkYXRhLmRhdGFbaV1cblxuICB2YXIgayA9IE1hdGguYWJzKE1hdGguY2VpbCgoZGFya0NvdW50ICogMTAwIC8gbW9kdWxlc0NvdW50KSAvIDUpIC0gMTApXG5cbiAgcmV0dXJuIGsgKiBQZW5hbHR5U2NvcmVzLk40XG59XG5cbi8qKlxuICogUmV0dXJuIG1hc2sgdmFsdWUgYXQgZ2l2ZW4gcG9zaXRpb25cbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IG1hc2tQYXR0ZXJuIFBhdHRlcm4gcmVmZXJlbmNlIHZhbHVlXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGkgICAgICAgICAgIFJvd1xuICogQHBhcmFtICB7TnVtYmVyfSBqICAgICAgICAgICBDb2x1bW5cbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgICAgICAgTWFzayB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRNYXNrQXQgKG1hc2tQYXR0ZXJuLCBpLCBqKSB7XG4gIHN3aXRjaCAobWFza1BhdHRlcm4pIHtcbiAgICBjYXNlIGV4cG9ydHMuUGF0dGVybnMuUEFUVEVSTjAwMDogcmV0dXJuIChpICsgaikgJSAyID09PSAwXG4gICAgY2FzZSBleHBvcnRzLlBhdHRlcm5zLlBBVFRFUk4wMDE6IHJldHVybiBpICUgMiA9PT0gMFxuICAgIGNhc2UgZXhwb3J0cy5QYXR0ZXJucy5QQVRURVJOMDEwOiByZXR1cm4gaiAlIDMgPT09IDBcbiAgICBjYXNlIGV4cG9ydHMuUGF0dGVybnMuUEFUVEVSTjAxMTogcmV0dXJuIChpICsgaikgJSAzID09PSAwXG4gICAgY2FzZSBleHBvcnRzLlBhdHRlcm5zLlBBVFRFUk4xMDA6IHJldHVybiAoTWF0aC5mbG9vcihpIC8gMikgKyBNYXRoLmZsb29yKGogLyAzKSkgJSAyID09PSAwXG4gICAgY2FzZSBleHBvcnRzLlBhdHRlcm5zLlBBVFRFUk4xMDE6IHJldHVybiAoaSAqIGopICUgMiArIChpICogaikgJSAzID09PSAwXG4gICAgY2FzZSBleHBvcnRzLlBhdHRlcm5zLlBBVFRFUk4xMTA6IHJldHVybiAoKGkgKiBqKSAlIDIgKyAoaSAqIGopICUgMykgJSAyID09PSAwXG4gICAgY2FzZSBleHBvcnRzLlBhdHRlcm5zLlBBVFRFUk4xMTE6IHJldHVybiAoKGkgKiBqKSAlIDMgKyAoaSArIGopICUgMikgJSAyID09PSAwXG5cbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBtYXNrUGF0dGVybjonICsgbWFza1BhdHRlcm4pXG4gIH1cbn1cblxuLyoqXG4gKiBBcHBseSBhIG1hc2sgcGF0dGVybiB0byBhIEJpdE1hdHJpeFxuICpcbiAqIEBwYXJhbSAge051bWJlcn0gICAgcGF0dGVybiBQYXR0ZXJuIHJlZmVyZW5jZSBudW1iZXJcbiAqIEBwYXJhbSAge0JpdE1hdHJpeH0gZGF0YSAgICBCaXRNYXRyaXggZGF0YVxuICovXG5leHBvcnRzLmFwcGx5TWFzayA9IGZ1bmN0aW9uIGFwcGx5TWFzayAocGF0dGVybiwgZGF0YSkge1xuICB2YXIgc2l6ZSA9IGRhdGEuc2l6ZVxuXG4gIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IHNpemU7IGNvbCsrKSB7XG4gICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgc2l6ZTsgcm93KyspIHtcbiAgICAgIGlmIChkYXRhLmlzUmVzZXJ2ZWQocm93LCBjb2wpKSBjb250aW51ZVxuICAgICAgZGF0YS54b3Iocm93LCBjb2wsIGdldE1hc2tBdChwYXR0ZXJuLCByb3csIGNvbCkpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmVzdCBtYXNrIHBhdHRlcm4gZm9yIGRhdGFcbiAqXG4gKiBAcGFyYW0gIHtCaXRNYXRyaXh9IGRhdGFcbiAqIEByZXR1cm4ge051bWJlcn0gTWFzayBwYXR0ZXJuIHJlZmVyZW5jZSBudW1iZXJcbiAqL1xuZXhwb3J0cy5nZXRCZXN0TWFzayA9IGZ1bmN0aW9uIGdldEJlc3RNYXNrIChkYXRhLCBzZXR1cEZvcm1hdEZ1bmMpIHtcbiAgdmFyIG51bVBhdHRlcm5zID0gT2JqZWN0LmtleXMoZXhwb3J0cy5QYXR0ZXJucykubGVuZ3RoXG4gIHZhciBiZXN0UGF0dGVybiA9IDBcbiAgdmFyIGxvd2VyUGVuYWx0eSA9IEluZmluaXR5XG5cbiAgZm9yICh2YXIgcCA9IDA7IHAgPCBudW1QYXR0ZXJuczsgcCsrKSB7XG4gICAgc2V0dXBGb3JtYXRGdW5jKHApXG4gICAgZXhwb3J0cy5hcHBseU1hc2socCwgZGF0YSlcblxuICAgIC8vIENhbGN1bGF0ZSBwZW5hbHR5XG4gICAgdmFyIHBlbmFsdHkgPVxuICAgICAgZXhwb3J0cy5nZXRQZW5hbHR5TjEoZGF0YSkgK1xuICAgICAgZXhwb3J0cy5nZXRQZW5hbHR5TjIoZGF0YSkgK1xuICAgICAgZXhwb3J0cy5nZXRQZW5hbHR5TjMoZGF0YSkgK1xuICAgICAgZXhwb3J0cy5nZXRQZW5hbHR5TjQoZGF0YSlcblxuICAgIC8vIFVuZG8gcHJldmlvdXNseSBhcHBsaWVkIG1hc2tcbiAgICBleHBvcnRzLmFwcGx5TWFzayhwLCBkYXRhKVxuXG4gICAgaWYgKHBlbmFsdHkgPCBsb3dlclBlbmFsdHkpIHtcbiAgICAgIGxvd2VyUGVuYWx0eSA9IHBlbmFsdHlcbiAgICAgIGJlc3RQYXR0ZXJuID0gcFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiZXN0UGF0dGVyblxufVxuIiwidmFyIFZlcnNpb25DaGVjayA9IHJlcXVpcmUoJy4vdmVyc2lvbi1jaGVjaycpXG52YXIgUmVnZXggPSByZXF1aXJlKCcuL3JlZ2V4JylcblxuLyoqXG4gKiBOdW1lcmljIG1vZGUgZW5jb2RlcyBkYXRhIGZyb20gdGhlIGRlY2ltYWwgZGlnaXQgc2V0ICgwIC0gOSlcbiAqIChieXRlIHZhbHVlcyAzMEhFWCB0byAzOUhFWCkuXG4gKiBOb3JtYWxseSwgMyBkYXRhIGNoYXJhY3RlcnMgYXJlIHJlcHJlc2VudGVkIGJ5IDEwIGJpdHMuXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0cy5OVU1FUklDID0ge1xuICBpZDogJ051bWVyaWMnLFxuICBiaXQ6IDEgPDwgMCxcbiAgY2NCaXRzOiBbMTAsIDEyLCAxNF1cbn1cblxuLyoqXG4gKiBBbHBoYW51bWVyaWMgbW9kZSBlbmNvZGVzIGRhdGEgZnJvbSBhIHNldCBvZiA0NSBjaGFyYWN0ZXJzLFxuICogaS5lLiAxMCBudW1lcmljIGRpZ2l0cyAoMCAtIDkpLFxuICogICAgICAyNiBhbHBoYWJldGljIGNoYXJhY3RlcnMgKEEgLSBaKSxcbiAqICAgYW5kIDkgc3ltYm9scyAoU1AsICQsICUsICosICssIC0sIC4sIC8sIDopLlxuICogTm9ybWFsbHksIHR3byBpbnB1dCBjaGFyYWN0ZXJzIGFyZSByZXByZXNlbnRlZCBieSAxMSBiaXRzLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydHMuQUxQSEFOVU1FUklDID0ge1xuICBpZDogJ0FscGhhbnVtZXJpYycsXG4gIGJpdDogMSA8PCAxLFxuICBjY0JpdHM6IFs5LCAxMSwgMTNdXG59XG5cbi8qKlxuICogSW4gYnl0ZSBtb2RlLCBkYXRhIGlzIGVuY29kZWQgYXQgOCBiaXRzIHBlciBjaGFyYWN0ZXIuXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0cy5CWVRFID0ge1xuICBpZDogJ0J5dGUnLFxuICBiaXQ6IDEgPDwgMixcbiAgY2NCaXRzOiBbOCwgMTYsIDE2XVxufVxuXG4vKipcbiAqIFRoZSBLYW5qaSBtb2RlIGVmZmljaWVudGx5IGVuY29kZXMgS2FuamkgY2hhcmFjdGVycyBpbiBhY2NvcmRhbmNlIHdpdGhcbiAqIHRoZSBTaGlmdCBKSVMgc3lzdGVtIGJhc2VkIG9uIEpJUyBYIDAyMDguXG4gKiBUaGUgU2hpZnQgSklTIHZhbHVlcyBhcmUgc2hpZnRlZCBmcm9tIHRoZSBKSVMgWCAwMjA4IHZhbHVlcy5cbiAqIEpJUyBYIDAyMDggZ2l2ZXMgZGV0YWlscyBvZiB0aGUgc2hpZnQgY29kZWQgcmVwcmVzZW50YXRpb24uXG4gKiBFYWNoIHR3by1ieXRlIGNoYXJhY3RlciB2YWx1ZSBpcyBjb21wYWN0ZWQgdG8gYSAxMy1iaXQgYmluYXJ5IGNvZGV3b3JkLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydHMuS0FOSkkgPSB7XG4gIGlkOiAnS2FuamknLFxuICBiaXQ6IDEgPDwgMyxcbiAgY2NCaXRzOiBbOCwgMTAsIDEyXVxufVxuXG4vKipcbiAqIE1peGVkIG1vZGUgd2lsbCBjb250YWluIGEgc2VxdWVuY2VzIG9mIGRhdGEgaW4gYSBjb21iaW5hdGlvbiBvZiBhbnkgb2ZcbiAqIHRoZSBtb2RlcyBkZXNjcmliZWQgYWJvdmVcbiAqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnRzLk1JWEVEID0ge1xuICBiaXQ6IC0xXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHN0b3JlIHRoZSBkYXRhIGxlbmd0aFxuICogYWNjb3JkaW5nIHRvIFFSIENvZGUgc3BlY2lmaWNhdGlvbnMuXG4gKlxuICogQHBhcmFtICB7TW9kZX0gICBtb2RlICAgIERhdGEgbW9kZVxuICogQHBhcmFtICB7TnVtYmVyfSB2ZXJzaW9uIFFSIENvZGUgdmVyc2lvblxuICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgIE51bWJlciBvZiBiaXRzXG4gKi9cbmV4cG9ydHMuZ2V0Q2hhckNvdW50SW5kaWNhdG9yID0gZnVuY3Rpb24gZ2V0Q2hhckNvdW50SW5kaWNhdG9yIChtb2RlLCB2ZXJzaW9uKSB7XG4gIGlmICghbW9kZS5jY0JpdHMpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtb2RlOiAnICsgbW9kZSlcblxuICBpZiAoIVZlcnNpb25DaGVjay5pc1ZhbGlkKHZlcnNpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZlcnNpb246ICcgKyB2ZXJzaW9uKVxuICB9XG5cbiAgaWYgKHZlcnNpb24gPj0gMSAmJiB2ZXJzaW9uIDwgMTApIHJldHVybiBtb2RlLmNjQml0c1swXVxuICBlbHNlIGlmICh2ZXJzaW9uIDwgMjcpIHJldHVybiBtb2RlLmNjQml0c1sxXVxuICByZXR1cm4gbW9kZS5jY0JpdHNbMl1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtb3N0IGVmZmljaWVudCBtb2RlIHRvIHN0b3JlIHRoZSBzcGVjaWZpZWQgZGF0YVxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZGF0YVN0ciBJbnB1dCBkYXRhIHN0cmluZ1xuICogQHJldHVybiB7TW9kZX0gICAgICAgICAgIEJlc3QgbW9kZVxuICovXG5leHBvcnRzLmdldEJlc3RNb2RlRm9yRGF0YSA9IGZ1bmN0aW9uIGdldEJlc3RNb2RlRm9yRGF0YSAoZGF0YVN0cikge1xuICBpZiAoUmVnZXgudGVzdE51bWVyaWMoZGF0YVN0cikpIHJldHVybiBleHBvcnRzLk5VTUVSSUNcbiAgZWxzZSBpZiAoUmVnZXgudGVzdEFscGhhbnVtZXJpYyhkYXRhU3RyKSkgcmV0dXJuIGV4cG9ydHMuQUxQSEFOVU1FUklDXG4gIGVsc2UgaWYgKFJlZ2V4LnRlc3RLYW5qaShkYXRhU3RyKSkgcmV0dXJuIGV4cG9ydHMuS0FOSklcbiAgZWxzZSByZXR1cm4gZXhwb3J0cy5CWVRFXG59XG5cbi8qKlxuICogUmV0dXJuIG1vZGUgbmFtZSBhcyBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge01vZGV9IG1vZGUgTW9kZSBvYmplY3RcbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBNb2RlIG5hbWVcbiAqL1xuZXhwb3J0cy50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChtb2RlKSB7XG4gIGlmIChtb2RlICYmIG1vZGUuaWQpIHJldHVybiBtb2RlLmlkXG4gIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtb2RlJylcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBpbnB1dCBwYXJhbSBpcyBhIHZhbGlkIG1vZGUgb2JqZWN0XG4gKlxuICogQHBhcmFtICAge01vZGV9ICAgIG1vZGUgTW9kZSBvYmplY3RcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHZhbGlkIG1vZGUsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnRzLmlzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkIChtb2RlKSB7XG4gIHJldHVybiBtb2RlICYmIG1vZGUuYml0ICYmIG1vZGUuY2NCaXRzXG59XG5cbi8qKlxuICogR2V0IG1vZGUgb2JqZWN0IGZyb20gaXRzIG5hbWVcbiAqXG4gKiBAcGFyYW0gICB7U3RyaW5nfSBzdHJpbmcgTW9kZSBuYW1lXG4gKiBAcmV0dXJucyB7TW9kZX0gICAgICAgICAgTW9kZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFyYW0gaXMgbm90IGEgc3RyaW5nJylcbiAgfVxuXG4gIHZhciBsY1N0ciA9IHN0cmluZy50b0xvd2VyQ2FzZSgpXG5cbiAgc3dpdGNoIChsY1N0cikge1xuICAgIGNhc2UgJ251bWVyaWMnOlxuICAgICAgcmV0dXJuIGV4cG9ydHMuTlVNRVJJQ1xuICAgIGNhc2UgJ2FscGhhbnVtZXJpYyc6XG4gICAgICByZXR1cm4gZXhwb3J0cy5BTFBIQU5VTUVSSUNcbiAgICBjYXNlICdrYW5qaSc6XG4gICAgICByZXR1cm4gZXhwb3J0cy5LQU5KSVxuICAgIGNhc2UgJ2J5dGUnOlxuICAgICAgcmV0dXJuIGV4cG9ydHMuQllURVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbW9kZTogJyArIHN0cmluZylcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgbW9kZSBmcm9tIGEgdmFsdWUuXG4gKiBJZiB2YWx1ZSBpcyBub3QgYSB2YWxpZCBtb2RlLCByZXR1cm5zIGRlZmF1bHRWYWx1ZVxuICpcbiAqIEBwYXJhbSAge01vZGV8U3RyaW5nfSB2YWx1ZSAgICAgICAgRW5jb2RpbmcgbW9kZVxuICogQHBhcmFtICB7TW9kZX0gICAgICAgIGRlZmF1bHRWYWx1ZSBGYWxsYmFjayB2YWx1ZVxuICogQHJldHVybiB7TW9kZX0gICAgICAgICAgICAgICAgICAgICBFbmNvZGluZyBtb2RlXG4gKi9cbmV4cG9ydHMuZnJvbSA9IGZ1bmN0aW9uIGZyb20gKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGV4cG9ydHMuaXNWYWxpZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlXG4gIH1cbn1cbiIsInZhciBNb2RlID0gcmVxdWlyZSgnLi9tb2RlJylcblxuZnVuY3Rpb24gTnVtZXJpY0RhdGEgKGRhdGEpIHtcbiAgdGhpcy5tb2RlID0gTW9kZS5OVU1FUklDXG4gIHRoaXMuZGF0YSA9IGRhdGEudG9TdHJpbmcoKVxufVxuXG5OdW1lcmljRGF0YS5nZXRCaXRzTGVuZ3RoID0gZnVuY3Rpb24gZ2V0Qml0c0xlbmd0aCAobGVuZ3RoKSB7XG4gIHJldHVybiAxMCAqIE1hdGguZmxvb3IobGVuZ3RoIC8gMykgKyAoKGxlbmd0aCAlIDMpID8gKChsZW5ndGggJSAzKSAqIDMgKyAxKSA6IDApXG59XG5cbk51bWVyaWNEYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbiBnZXRMZW5ndGggKCkge1xuICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aFxufVxuXG5OdW1lcmljRGF0YS5wcm90b3R5cGUuZ2V0Qml0c0xlbmd0aCA9IGZ1bmN0aW9uIGdldEJpdHNMZW5ndGggKCkge1xuICByZXR1cm4gTnVtZXJpY0RhdGEuZ2V0Qml0c0xlbmd0aCh0aGlzLmRhdGEubGVuZ3RoKVxufVxuXG5OdW1lcmljRGF0YS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoYml0QnVmZmVyKSB7XG4gIHZhciBpLCBncm91cCwgdmFsdWVcblxuICAvLyBUaGUgaW5wdXQgZGF0YSBzdHJpbmcgaXMgZGl2aWRlZCBpbnRvIGdyb3VwcyBvZiB0aHJlZSBkaWdpdHMsXG4gIC8vIGFuZCBlYWNoIGdyb3VwIGlzIGNvbnZlcnRlZCB0byBpdHMgMTAtYml0IGJpbmFyeSBlcXVpdmFsZW50LlxuICBmb3IgKGkgPSAwOyBpICsgMyA8PSB0aGlzLmRhdGEubGVuZ3RoOyBpICs9IDMpIHtcbiAgICBncm91cCA9IHRoaXMuZGF0YS5zdWJzdHIoaSwgMylcbiAgICB2YWx1ZSA9IHBhcnNlSW50KGdyb3VwLCAxMClcblxuICAgIGJpdEJ1ZmZlci5wdXQodmFsdWUsIDEwKVxuICB9XG5cbiAgLy8gSWYgdGhlIG51bWJlciBvZiBpbnB1dCBkaWdpdHMgaXMgbm90IGFuIGV4YWN0IG11bHRpcGxlIG9mIHRocmVlLFxuICAvLyB0aGUgZmluYWwgb25lIG9yIHR3byBkaWdpdHMgYXJlIGNvbnZlcnRlZCB0byA0IG9yIDcgYml0cyByZXNwZWN0aXZlbHkuXG4gIHZhciByZW1haW5pbmdOdW0gPSB0aGlzLmRhdGEubGVuZ3RoIC0gaVxuICBpZiAocmVtYWluaW5nTnVtID4gMCkge1xuICAgIGdyb3VwID0gdGhpcy5kYXRhLnN1YnN0cihpKVxuICAgIHZhbHVlID0gcGFyc2VJbnQoZ3JvdXAsIDEwKVxuXG4gICAgYml0QnVmZmVyLnB1dCh2YWx1ZSwgcmVtYWluaW5nTnVtICogMyArIDEpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBOdW1lcmljRGF0YVxuIiwidmFyIEJ1ZmZlclV0aWwgPSByZXF1aXJlKCcuLi91dGlscy9idWZmZXInKVxudmFyIEdGID0gcmVxdWlyZSgnLi9nYWxvaXMtZmllbGQnKVxuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIHBvbHlub21pYWxzIGluc2lkZSBHYWxvaXMgRmllbGRcbiAqXG4gKiBAcGFyYW0gIHtCdWZmZXJ9IHAxIFBvbHlub21pYWxcbiAqIEBwYXJhbSAge0J1ZmZlcn0gcDIgUG9seW5vbWlhbFxuICogQHJldHVybiB7QnVmZmVyfSAgICBQcm9kdWN0IG9mIHAxIGFuZCBwMlxuICovXG5leHBvcnRzLm11bCA9IGZ1bmN0aW9uIG11bCAocDEsIHAyKSB7XG4gIHZhciBjb2VmZiA9IEJ1ZmZlclV0aWwuYWxsb2MocDEubGVuZ3RoICsgcDIubGVuZ3RoIC0gMSlcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHAxLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwMi5sZW5ndGg7IGorKykge1xuICAgICAgY29lZmZbaSArIGpdIF49IEdGLm11bChwMVtpXSwgcDJbal0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvZWZmXG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSByZW1haW5kZXIgb2YgcG9seW5vbWlhbHMgZGl2aXNpb25cbiAqXG4gKiBAcGFyYW0gIHtCdWZmZXJ9IGRpdmlkZW50IFBvbHlub21pYWxcbiAqIEBwYXJhbSAge0J1ZmZlcn0gZGl2aXNvciAgUG9seW5vbWlhbFxuICogQHJldHVybiB7QnVmZmVyfSAgICAgICAgICBSZW1haW5kZXJcbiAqL1xuZXhwb3J0cy5tb2QgPSBmdW5jdGlvbiBtb2QgKGRpdmlkZW50LCBkaXZpc29yKSB7XG4gIHZhciByZXN1bHQgPSBCdWZmZXJVdGlsLmZyb20oZGl2aWRlbnQpXG5cbiAgd2hpbGUgKChyZXN1bHQubGVuZ3RoIC0gZGl2aXNvci5sZW5ndGgpID49IDApIHtcbiAgICB2YXIgY29lZmYgPSByZXN1bHRbMF1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGl2aXNvci5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2ldIF49IEdGLm11bChkaXZpc29yW2ldLCBjb2VmZilcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgYWxsIHplcm9zIGZyb20gYnVmZmVyIGhlYWRcbiAgICB2YXIgb2Zmc2V0ID0gMFxuICAgIHdoaWxlIChvZmZzZXQgPCByZXN1bHQubGVuZ3RoICYmIHJlc3VsdFtvZmZzZXRdID09PSAwKSBvZmZzZXQrK1xuICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZShvZmZzZXQpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYW4gaXJyZWR1Y2libGUgZ2VuZXJhdG9yIHBvbHlub21pYWwgb2Ygc3BlY2lmaWVkIGRlZ3JlZVxuICogKHVzZWQgYnkgUmVlZC1Tb2xvbW9uIGVuY29kZXIpXG4gKlxuICogQHBhcmFtICB7TnVtYmVyfSBkZWdyZWUgRGVncmVlIG9mIHRoZSBnZW5lcmF0b3IgcG9seW5vbWlhbFxuICogQHJldHVybiB7QnVmZmVyfSAgICAgICAgQnVmZmVyIGNvbnRhaW5pbmcgcG9seW5vbWlhbCBjb2VmZmljaWVudHNcbiAqL1xuZXhwb3J0cy5nZW5lcmF0ZUVDUG9seW5vbWlhbCA9IGZ1bmN0aW9uIGdlbmVyYXRlRUNQb2x5bm9taWFsIChkZWdyZWUpIHtcbiAgdmFyIHBvbHkgPSBCdWZmZXJVdGlsLmZyb20oWzFdKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZ3JlZTsgaSsrKSB7XG4gICAgcG9seSA9IGV4cG9ydHMubXVsKHBvbHksIFsxLCBHRi5leHAoaSldKVxuICB9XG5cbiAgcmV0dXJuIHBvbHlcbn1cbiIsInZhciBCdWZmZXJVdGlsID0gcmVxdWlyZSgnLi4vdXRpbHMvYnVmZmVyJylcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKVxudmFyIEVDTGV2ZWwgPSByZXF1aXJlKCcuL2Vycm9yLWNvcnJlY3Rpb24tbGV2ZWwnKVxudmFyIEJpdEJ1ZmZlciA9IHJlcXVpcmUoJy4vYml0LWJ1ZmZlcicpXG52YXIgQml0TWF0cml4ID0gcmVxdWlyZSgnLi9iaXQtbWF0cml4JylcbnZhciBBbGlnbm1lbnRQYXR0ZXJuID0gcmVxdWlyZSgnLi9hbGlnbm1lbnQtcGF0dGVybicpXG52YXIgRmluZGVyUGF0dGVybiA9IHJlcXVpcmUoJy4vZmluZGVyLXBhdHRlcm4nKVxudmFyIE1hc2tQYXR0ZXJuID0gcmVxdWlyZSgnLi9tYXNrLXBhdHRlcm4nKVxudmFyIEVDQ29kZSA9IHJlcXVpcmUoJy4vZXJyb3ItY29ycmVjdGlvbi1jb2RlJylcbnZhciBSZWVkU29sb21vbkVuY29kZXIgPSByZXF1aXJlKCcuL3JlZWQtc29sb21vbi1lbmNvZGVyJylcbnZhciBWZXJzaW9uID0gcmVxdWlyZSgnLi92ZXJzaW9uJylcbnZhciBGb3JtYXRJbmZvID0gcmVxdWlyZSgnLi9mb3JtYXQtaW5mbycpXG52YXIgTW9kZSA9IHJlcXVpcmUoJy4vbW9kZScpXG52YXIgU2VnbWVudHMgPSByZXF1aXJlKCcuL3NlZ21lbnRzJylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbi8qKlxuICogUVJDb2RlIGZvciBKYXZhU2NyaXB0XG4gKlxuICogbW9kaWZpZWQgYnkgUnlhbiBEYXkgZm9yIG5vZGVqcyBzdXBwb3J0XG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEgUnlhbiBEYXlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gKlxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFFSQ29kZSBmb3IgSmF2YVNjcmlwdFxuLy9cbi8vIENvcHlyaWdodCAoYykgMjAwOSBLYXp1aGlrbyBBcmFzZVxuLy9cbi8vIFVSTDogaHR0cDovL3d3dy5kLXByb2plY3QuY29tL1xuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcbi8vICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbi8vXG4vLyBUaGUgd29yZCBcIlFSIENvZGVcIiBpcyByZWdpc3RlcmVkIHRyYWRlbWFyayBvZlxuLy8gREVOU08gV0FWRSBJTkNPUlBPUkFURURcbi8vICAgaHR0cDovL3d3dy5kZW5zby13YXZlLmNvbS9xcmNvZGUvZmFxcGF0ZW50LWUuaHRtbFxuLy9cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4qL1xuXG4vKipcbiAqIEFkZCBmaW5kZXIgcGF0dGVybnMgYml0cyB0byBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gIHtCaXRNYXRyaXh9IG1hdHJpeCAgTW9kdWxlcyBtYXRyaXhcbiAqIEBwYXJhbSAge051bWJlcn0gICAgdmVyc2lvbiBRUiBDb2RlIHZlcnNpb25cbiAqL1xuZnVuY3Rpb24gc2V0dXBGaW5kZXJQYXR0ZXJuIChtYXRyaXgsIHZlcnNpb24pIHtcbiAgdmFyIHNpemUgPSBtYXRyaXguc2l6ZVxuICB2YXIgcG9zID0gRmluZGVyUGF0dGVybi5nZXRQb3NpdGlvbnModmVyc2lvbilcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciByb3cgPSBwb3NbaV1bMF1cbiAgICB2YXIgY29sID0gcG9zW2ldWzFdXG5cbiAgICBmb3IgKHZhciByID0gLTE7IHIgPD0gNzsgcisrKSB7XG4gICAgICBpZiAocm93ICsgciA8PSAtMSB8fCBzaXplIDw9IHJvdyArIHIpIGNvbnRpbnVlXG5cbiAgICAgIGZvciAodmFyIGMgPSAtMTsgYyA8PSA3OyBjKyspIHtcbiAgICAgICAgaWYgKGNvbCArIGMgPD0gLTEgfHwgc2l6ZSA8PSBjb2wgKyBjKSBjb250aW51ZVxuXG4gICAgICAgIGlmICgociA+PSAwICYmIHIgPD0gNiAmJiAoYyA9PT0gMCB8fCBjID09PSA2KSkgfHxcbiAgICAgICAgICAoYyA+PSAwICYmIGMgPD0gNiAmJiAociA9PT0gMCB8fCByID09PSA2KSkgfHxcbiAgICAgICAgICAociA+PSAyICYmIHIgPD0gNCAmJiBjID49IDIgJiYgYyA8PSA0KSkge1xuICAgICAgICAgIG1hdHJpeC5zZXQocm93ICsgciwgY29sICsgYywgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRyaXguc2V0KHJvdyArIHIsIGNvbCArIGMsIGZhbHNlLCB0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWRkIHRpbWluZyBwYXR0ZXJuIGJpdHMgdG8gbWF0cml4XG4gKlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUge0BsaW5rIHNldHVwQWxpZ25tZW50UGF0dGVybn1cbiAqXG4gKiBAcGFyYW0gIHtCaXRNYXRyaXh9IG1hdHJpeCBNb2R1bGVzIG1hdHJpeFxuICovXG5mdW5jdGlvbiBzZXR1cFRpbWluZ1BhdHRlcm4gKG1hdHJpeCkge1xuICB2YXIgc2l6ZSA9IG1hdHJpeC5zaXplXG5cbiAgZm9yICh2YXIgciA9IDg7IHIgPCBzaXplIC0gODsgcisrKSB7XG4gICAgdmFyIHZhbHVlID0gciAlIDIgPT09IDBcbiAgICBtYXRyaXguc2V0KHIsIDYsIHZhbHVlLCB0cnVlKVxuICAgIG1hdHJpeC5zZXQoNiwgciwgdmFsdWUsIHRydWUpXG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYWxpZ25tZW50IHBhdHRlcm5zIGJpdHMgdG8gbWF0cml4XG4gKlxuICogTm90ZTogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciB7QGxpbmsgc2V0dXBUaW1pbmdQYXR0ZXJufVxuICpcbiAqIEBwYXJhbSAge0JpdE1hdHJpeH0gbWF0cml4ICBNb2R1bGVzIG1hdHJpeFxuICogQHBhcmFtICB7TnVtYmVyfSAgICB2ZXJzaW9uIFFSIENvZGUgdmVyc2lvblxuICovXG5mdW5jdGlvbiBzZXR1cEFsaWdubWVudFBhdHRlcm4gKG1hdHJpeCwgdmVyc2lvbikge1xuICB2YXIgcG9zID0gQWxpZ25tZW50UGF0dGVybi5nZXRQb3NpdGlvbnModmVyc2lvbilcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciByb3cgPSBwb3NbaV1bMF1cbiAgICB2YXIgY29sID0gcG9zW2ldWzFdXG5cbiAgICBmb3IgKHZhciByID0gLTI7IHIgPD0gMjsgcisrKSB7XG4gICAgICBmb3IgKHZhciBjID0gLTI7IGMgPD0gMjsgYysrKSB7XG4gICAgICAgIGlmIChyID09PSAtMiB8fCByID09PSAyIHx8IGMgPT09IC0yIHx8IGMgPT09IDIgfHxcbiAgICAgICAgICAociA9PT0gMCAmJiBjID09PSAwKSkge1xuICAgICAgICAgIG1hdHJpeC5zZXQocm93ICsgciwgY29sICsgYywgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRyaXguc2V0KHJvdyArIHIsIGNvbCArIGMsIGZhbHNlLCB0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWRkIHZlcnNpb24gaW5mbyBiaXRzIHRvIG1hdHJpeFxuICpcbiAqIEBwYXJhbSAge0JpdE1hdHJpeH0gbWF0cml4ICBNb2R1bGVzIG1hdHJpeFxuICogQHBhcmFtICB7TnVtYmVyfSAgICB2ZXJzaW9uIFFSIENvZGUgdmVyc2lvblxuICovXG5mdW5jdGlvbiBzZXR1cFZlcnNpb25JbmZvIChtYXRyaXgsIHZlcnNpb24pIHtcbiAgdmFyIHNpemUgPSBtYXRyaXguc2l6ZVxuICB2YXIgYml0cyA9IFZlcnNpb24uZ2V0RW5jb2RlZEJpdHModmVyc2lvbilcbiAgdmFyIHJvdywgY29sLCBtb2RcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE4OyBpKyspIHtcbiAgICByb3cgPSBNYXRoLmZsb29yKGkgLyAzKVxuICAgIGNvbCA9IGkgJSAzICsgc2l6ZSAtIDggLSAzXG4gICAgbW9kID0gKChiaXRzID4+IGkpICYgMSkgPT09IDFcblxuICAgIG1hdHJpeC5zZXQocm93LCBjb2wsIG1vZCwgdHJ1ZSlcbiAgICBtYXRyaXguc2V0KGNvbCwgcm93LCBtb2QsIHRydWUpXG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgZm9ybWF0IGluZm8gYml0cyB0byBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gIHtCaXRNYXRyaXh9IG1hdHJpeCAgICAgICAgICAgICAgIE1vZHVsZXMgbWF0cml4XG4gKiBAcGFyYW0gIHtFcnJvckNvcnJlY3Rpb25MZXZlbH0gICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWwgRXJyb3IgY29ycmVjdGlvbiBsZXZlbFxuICogQHBhcmFtICB7TnVtYmVyfSAgICBtYXNrUGF0dGVybiAgICAgICAgICBNYXNrIHBhdHRlcm4gcmVmZXJlbmNlIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHNldHVwRm9ybWF0SW5mbyAobWF0cml4LCBlcnJvckNvcnJlY3Rpb25MZXZlbCwgbWFza1BhdHRlcm4pIHtcbiAgdmFyIHNpemUgPSBtYXRyaXguc2l6ZVxuICB2YXIgYml0cyA9IEZvcm1hdEluZm8uZ2V0RW5jb2RlZEJpdHMoZXJyb3JDb3JyZWN0aW9uTGV2ZWwsIG1hc2tQYXR0ZXJuKVxuICB2YXIgaSwgbW9kXG5cbiAgZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHtcbiAgICBtb2QgPSAoKGJpdHMgPj4gaSkgJiAxKSA9PT0gMVxuXG4gICAgLy8gdmVydGljYWxcbiAgICBpZiAoaSA8IDYpIHtcbiAgICAgIG1hdHJpeC5zZXQoaSwgOCwgbW9kLCB0cnVlKVxuICAgIH0gZWxzZSBpZiAoaSA8IDgpIHtcbiAgICAgIG1hdHJpeC5zZXQoaSArIDEsIDgsIG1vZCwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0cml4LnNldChzaXplIC0gMTUgKyBpLCA4LCBtb2QsIHRydWUpXG4gICAgfVxuXG4gICAgLy8gaG9yaXpvbnRhbFxuICAgIGlmIChpIDwgOCkge1xuICAgICAgbWF0cml4LnNldCg4LCBzaXplIC0gaSAtIDEsIG1vZCwgdHJ1ZSlcbiAgICB9IGVsc2UgaWYgKGkgPCA5KSB7XG4gICAgICBtYXRyaXguc2V0KDgsIDE1IC0gaSAtIDEgKyAxLCBtb2QsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdHJpeC5zZXQoOCwgMTUgLSBpIC0gMSwgbW9kLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpeGVkIG1vZHVsZVxuICBtYXRyaXguc2V0KHNpemUgLSA4LCA4LCAxLCB0cnVlKVxufVxuXG4vKipcbiAqIEFkZCBlbmNvZGVkIGRhdGEgYml0cyB0byBtYXRyaXhcbiAqXG4gKiBAcGFyYW0gIHtCaXRNYXRyaXh9IG1hdHJpeCBNb2R1bGVzIG1hdHJpeFxuICogQHBhcmFtICB7QnVmZmVyfSAgICBkYXRhICAgRGF0YSBjb2Rld29yZHNcbiAqL1xuZnVuY3Rpb24gc2V0dXBEYXRhIChtYXRyaXgsIGRhdGEpIHtcbiAgdmFyIHNpemUgPSBtYXRyaXguc2l6ZVxuICB2YXIgaW5jID0gLTFcbiAgdmFyIHJvdyA9IHNpemUgLSAxXG4gIHZhciBiaXRJbmRleCA9IDdcbiAgdmFyIGJ5dGVJbmRleCA9IDBcblxuICBmb3IgKHZhciBjb2wgPSBzaXplIC0gMTsgY29sID4gMDsgY29sIC09IDIpIHtcbiAgICBpZiAoY29sID09PSA2KSBjb2wtLVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgMjsgYysrKSB7XG4gICAgICAgIGlmICghbWF0cml4LmlzUmVzZXJ2ZWQocm93LCBjb2wgLSBjKSkge1xuICAgICAgICAgIHZhciBkYXJrID0gZmFsc2VcblxuICAgICAgICAgIGlmIChieXRlSW5kZXggPCBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgZGFyayA9ICgoKGRhdGFbYnl0ZUluZGV4XSA+Pj4gYml0SW5kZXgpICYgMSkgPT09IDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWF0cml4LnNldChyb3csIGNvbCAtIGMsIGRhcmspXG4gICAgICAgICAgYml0SW5kZXgtLVxuXG4gICAgICAgICAgaWYgKGJpdEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgYnl0ZUluZGV4KytcbiAgICAgICAgICAgIGJpdEluZGV4ID0gN1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByb3cgKz0gaW5jXG5cbiAgICAgIGlmIChyb3cgPCAwIHx8IHNpemUgPD0gcm93KSB7XG4gICAgICAgIHJvdyAtPSBpbmNcbiAgICAgICAgaW5jID0gLWluY1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBlbmNvZGVkIGNvZGV3b3JkcyBmcm9tIGRhdGEgaW5wdXRcbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9ICAgdmVyc2lvbiAgICAgICAgICAgICAgUVIgQ29kZSB2ZXJzaW9uXG4gKiBAcGFyYW0gIHtFcnJvckNvcnJlY3Rpb25MZXZlbH0gICBlcnJvckNvcnJlY3Rpb25MZXZlbCBFcnJvciBjb3JyZWN0aW9uIGxldmVsXG4gKiBAcGFyYW0gIHtCeXRlRGF0YX0gZGF0YSAgICAgICAgICAgICAgICAgRGF0YSBpbnB1dFxuICogQHJldHVybiB7QnVmZmVyfSAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBjb250YWluaW5nIGVuY29kZWQgY29kZXdvcmRzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURhdGEgKHZlcnNpb24sIGVycm9yQ29ycmVjdGlvbkxldmVsLCBzZWdtZW50cykge1xuICAvLyBQcmVwYXJlIGRhdGEgYnVmZmVyXG4gIHZhciBidWZmZXIgPSBuZXcgQml0QnVmZmVyKClcblxuICBzZWdtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgLy8gcHJlZml4IGRhdGEgd2l0aCBtb2RlIGluZGljYXRvciAoNCBiaXRzKVxuICAgIGJ1ZmZlci5wdXQoZGF0YS5tb2RlLmJpdCwgNClcblxuICAgIC8vIFByZWZpeCBkYXRhIHdpdGggY2hhcmFjdGVyIGNvdW50IGluZGljYXRvci5cbiAgICAvLyBUaGUgY2hhcmFjdGVyIGNvdW50IGluZGljYXRvciBpcyBhIHN0cmluZyBvZiBiaXRzIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgICAvLyBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBiZWluZyBlbmNvZGVkLlxuICAgIC8vIFRoZSBjaGFyYWN0ZXIgY291bnQgaW5kaWNhdG9yIG11c3QgYmUgcGxhY2VkIGFmdGVyIHRoZSBtb2RlIGluZGljYXRvclxuICAgIC8vIGFuZCBtdXN0IGJlIGEgY2VydGFpbiBudW1iZXIgb2YgYml0cyBsb25nLCBkZXBlbmRpbmcgb24gdGhlIFFSIHZlcnNpb25cbiAgICAvLyBhbmQgZGF0YSBtb2RlXG4gICAgLy8gQHNlZSB7QGxpbmsgTW9kZS5nZXRDaGFyQ291bnRJbmRpY2F0b3J9LlxuICAgIGJ1ZmZlci5wdXQoZGF0YS5nZXRMZW5ndGgoKSwgTW9kZS5nZXRDaGFyQ291bnRJbmRpY2F0b3IoZGF0YS5tb2RlLCB2ZXJzaW9uKSlcblxuICAgIC8vIGFkZCBiaW5hcnkgZGF0YSBzZXF1ZW5jZSB0byBidWZmZXJcbiAgICBkYXRhLndyaXRlKGJ1ZmZlcilcbiAgfSlcblxuICAvLyBDYWxjdWxhdGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJpdHNcbiAgdmFyIHRvdGFsQ29kZXdvcmRzID0gVXRpbHMuZ2V0U3ltYm9sVG90YWxDb2Rld29yZHModmVyc2lvbilcbiAgdmFyIGVjVG90YWxDb2Rld29yZHMgPSBFQ0NvZGUuZ2V0VG90YWxDb2Rld29yZHNDb3VudCh2ZXJzaW9uLCBlcnJvckNvcnJlY3Rpb25MZXZlbClcbiAgdmFyIGRhdGFUb3RhbENvZGV3b3Jkc0JpdHMgPSAodG90YWxDb2Rld29yZHMgLSBlY1RvdGFsQ29kZXdvcmRzKSAqIDhcblxuICAvLyBBZGQgYSB0ZXJtaW5hdG9yLlxuICAvLyBJZiB0aGUgYml0IHN0cmluZyBpcyBzaG9ydGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiByZXF1aXJlZCBiaXRzLFxuICAvLyBhIHRlcm1pbmF0b3Igb2YgdXAgdG8gZm91ciAwcyBtdXN0IGJlIGFkZGVkIHRvIHRoZSByaWdodCBzaWRlIG9mIHRoZSBzdHJpbmcuXG4gIC8vIElmIHRoZSBiaXQgc3RyaW5nIGlzIG1vcmUgdGhhbiBmb3VyIGJpdHMgc2hvcnRlciB0aGFuIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYml0cyxcbiAgLy8gYWRkIGZvdXIgMHMgdG8gdGhlIGVuZC5cbiAgaWYgKGJ1ZmZlci5nZXRMZW5ndGhJbkJpdHMoKSArIDQgPD0gZGF0YVRvdGFsQ29kZXdvcmRzQml0cykge1xuICAgIGJ1ZmZlci5wdXQoMCwgNClcbiAgfVxuXG4gIC8vIElmIHRoZSBiaXQgc3RyaW5nIGlzIGZld2VyIHRoYW4gZm91ciBiaXRzIHNob3J0ZXIsIGFkZCBvbmx5IHRoZSBudW1iZXIgb2YgMHMgdGhhdFxuICAvLyBhcmUgbmVlZGVkIHRvIHJlYWNoIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYml0cy5cblxuICAvLyBBZnRlciBhZGRpbmcgdGhlIHRlcm1pbmF0b3IsIGlmIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgc3RyaW5nIGlzIG5vdCBhIG11bHRpcGxlIG9mIDgsXG4gIC8vIHBhZCB0aGUgc3RyaW5nIG9uIHRoZSByaWdodCB3aXRoIDBzIHRvIG1ha2UgdGhlIHN0cmluZydzIGxlbmd0aCBhIG11bHRpcGxlIG9mIDguXG4gIHdoaWxlIChidWZmZXIuZ2V0TGVuZ3RoSW5CaXRzKCkgJSA4ICE9PSAwKSB7XG4gICAgYnVmZmVyLnB1dEJpdCgwKVxuICB9XG5cbiAgLy8gQWRkIHBhZCBieXRlcyBpZiB0aGUgc3RyaW5nIGlzIHN0aWxsIHNob3J0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIHJlcXVpcmVkIGJpdHMuXG4gIC8vIEV4dGVuZCB0aGUgYnVmZmVyIHRvIGZpbGwgdGhlIGRhdGEgY2FwYWNpdHkgb2YgdGhlIHN5bWJvbCBjb3JyZXNwb25kaW5nIHRvXG4gIC8vIHRoZSBWZXJzaW9uIGFuZCBFcnJvciBDb3JyZWN0aW9uIExldmVsIGJ5IGFkZGluZyB0aGUgUGFkIENvZGV3b3JkcyAxMTEwMTEwMCAoMHhFQylcbiAgLy8gYW5kIDAwMDEwMDAxICgweDExKSBhbHRlcm5hdGVseS5cbiAgdmFyIHJlbWFpbmluZ0J5dGUgPSAoZGF0YVRvdGFsQ29kZXdvcmRzQml0cyAtIGJ1ZmZlci5nZXRMZW5ndGhJbkJpdHMoKSkgLyA4XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVtYWluaW5nQnl0ZTsgaSsrKSB7XG4gICAgYnVmZmVyLnB1dChpICUgMiA/IDB4MTEgOiAweEVDLCA4KVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNvZGV3b3JkcyhidWZmZXIsIHZlcnNpb24sIGVycm9yQ29ycmVjdGlvbkxldmVsKVxufVxuXG4vKipcbiAqIEVuY29kZSBpbnB1dCBkYXRhIHdpdGggUmVlZC1Tb2xvbW9uIGFuZCByZXR1cm4gY29kZXdvcmRzIHdpdGhcbiAqIHJlbGF0aXZlIGVycm9yIGNvcnJlY3Rpb24gYml0c1xuICpcbiAqIEBwYXJhbSAge0JpdEJ1ZmZlcn0gYml0QnVmZmVyICAgICAgICAgICAgRGF0YSB0byBlbmNvZGVcbiAqIEBwYXJhbSAge051bWJlcn0gICAgdmVyc2lvbiAgICAgICAgICAgICAgUVIgQ29kZSB2ZXJzaW9uXG4gKiBAcGFyYW0gIHtFcnJvckNvcnJlY3Rpb25MZXZlbH0gZXJyb3JDb3JyZWN0aW9uTGV2ZWwgRXJyb3IgY29ycmVjdGlvbiBsZXZlbFxuICogQHJldHVybiB7QnVmZmVyfSAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgY29udGFpbmluZyBlbmNvZGVkIGNvZGV3b3Jkc1xuICovXG5mdW5jdGlvbiBjcmVhdGVDb2Rld29yZHMgKGJpdEJ1ZmZlciwgdmVyc2lvbiwgZXJyb3JDb3JyZWN0aW9uTGV2ZWwpIHtcbiAgLy8gVG90YWwgY29kZXdvcmRzIGZvciB0aGlzIFFSIGNvZGUgdmVyc2lvbiAoRGF0YSArIEVycm9yIGNvcnJlY3Rpb24pXG4gIHZhciB0b3RhbENvZGV3b3JkcyA9IFV0aWxzLmdldFN5bWJvbFRvdGFsQ29kZXdvcmRzKHZlcnNpb24pXG5cbiAgLy8gVG90YWwgbnVtYmVyIG9mIGVycm9yIGNvcnJlY3Rpb24gY29kZXdvcmRzXG4gIHZhciBlY1RvdGFsQ29kZXdvcmRzID0gRUNDb2RlLmdldFRvdGFsQ29kZXdvcmRzQ291bnQodmVyc2lvbiwgZXJyb3JDb3JyZWN0aW9uTGV2ZWwpXG5cbiAgLy8gVG90YWwgbnVtYmVyIG9mIGRhdGEgY29kZXdvcmRzXG4gIHZhciBkYXRhVG90YWxDb2Rld29yZHMgPSB0b3RhbENvZGV3b3JkcyAtIGVjVG90YWxDb2Rld29yZHNcblxuICAvLyBUb3RhbCBudW1iZXIgb2YgYmxvY2tzXG4gIHZhciBlY1RvdGFsQmxvY2tzID0gRUNDb2RlLmdldEJsb2Nrc0NvdW50KHZlcnNpb24sIGVycm9yQ29ycmVjdGlvbkxldmVsKVxuXG4gIC8vIENhbGN1bGF0ZSBob3cgbWFueSBibG9ja3MgZWFjaCBncm91cCBzaG91bGQgY29udGFpblxuICB2YXIgYmxvY2tzSW5Hcm91cDIgPSB0b3RhbENvZGV3b3JkcyAlIGVjVG90YWxCbG9ja3NcbiAgdmFyIGJsb2Nrc0luR3JvdXAxID0gZWNUb3RhbEJsb2NrcyAtIGJsb2Nrc0luR3JvdXAyXG5cbiAgdmFyIHRvdGFsQ29kZXdvcmRzSW5Hcm91cDEgPSBNYXRoLmZsb29yKHRvdGFsQ29kZXdvcmRzIC8gZWNUb3RhbEJsb2NrcylcblxuICB2YXIgZGF0YUNvZGV3b3Jkc0luR3JvdXAxID0gTWF0aC5mbG9vcihkYXRhVG90YWxDb2Rld29yZHMgLyBlY1RvdGFsQmxvY2tzKVxuICB2YXIgZGF0YUNvZGV3b3Jkc0luR3JvdXAyID0gZGF0YUNvZGV3b3Jkc0luR3JvdXAxICsgMVxuXG4gIC8vIE51bWJlciBvZiBFQyBjb2Rld29yZHMgaXMgdGhlIHNhbWUgZm9yIGJvdGggZ3JvdXBzXG4gIHZhciBlY0NvdW50ID0gdG90YWxDb2Rld29yZHNJbkdyb3VwMSAtIGRhdGFDb2Rld29yZHNJbkdyb3VwMVxuXG4gIC8vIEluaXRpYWxpemUgYSBSZWVkLVNvbG9tb24gZW5jb2RlciB3aXRoIGEgZ2VuZXJhdG9yIHBvbHlub21pYWwgb2YgZGVncmVlIGVjQ291bnRcbiAgdmFyIHJzID0gbmV3IFJlZWRTb2xvbW9uRW5jb2RlcihlY0NvdW50KVxuXG4gIHZhciBvZmZzZXQgPSAwXG4gIHZhciBkY0RhdGEgPSBuZXcgQXJyYXkoZWNUb3RhbEJsb2NrcylcbiAgdmFyIGVjRGF0YSA9IG5ldyBBcnJheShlY1RvdGFsQmxvY2tzKVxuICB2YXIgbWF4RGF0YVNpemUgPSAwXG4gIHZhciBidWZmZXIgPSBCdWZmZXJVdGlsLmZyb20oYml0QnVmZmVyLmJ1ZmZlcilcblxuICAvLyBEaXZpZGUgdGhlIGJ1ZmZlciBpbnRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYmxvY2tzXG4gIGZvciAodmFyIGIgPSAwOyBiIDwgZWNUb3RhbEJsb2NrczsgYisrKSB7XG4gICAgdmFyIGRhdGFTaXplID0gYiA8IGJsb2Nrc0luR3JvdXAxID8gZGF0YUNvZGV3b3Jkc0luR3JvdXAxIDogZGF0YUNvZGV3b3Jkc0luR3JvdXAyXG5cbiAgICAvLyBleHRyYWN0IGEgYmxvY2sgb2YgZGF0YSBmcm9tIGJ1ZmZlclxuICAgIGRjRGF0YVtiXSA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGRhdGFTaXplKVxuXG4gICAgLy8gQ2FsY3VsYXRlIEVDIGNvZGV3b3JkcyBmb3IgdGhpcyBkYXRhIGJsb2NrXG4gICAgZWNEYXRhW2JdID0gcnMuZW5jb2RlKGRjRGF0YVtiXSlcblxuICAgIG9mZnNldCArPSBkYXRhU2l6ZVxuICAgIG1heERhdGFTaXplID0gTWF0aC5tYXgobWF4RGF0YVNpemUsIGRhdGFTaXplKVxuICB9XG5cbiAgLy8gQ3JlYXRlIGZpbmFsIGRhdGFcbiAgLy8gSW50ZXJsZWF2ZSB0aGUgZGF0YSBhbmQgZXJyb3IgY29ycmVjdGlvbiBjb2Rld29yZHMgZnJvbSBlYWNoIGJsb2NrXG4gIHZhciBkYXRhID0gQnVmZmVyVXRpbC5hbGxvYyh0b3RhbENvZGV3b3JkcylcbiAgdmFyIGluZGV4ID0gMFxuICB2YXIgaSwgclxuXG4gIC8vIEFkZCBkYXRhIGNvZGV3b3Jkc1xuICBmb3IgKGkgPSAwOyBpIDwgbWF4RGF0YVNpemU7IGkrKykge1xuICAgIGZvciAociA9IDA7IHIgPCBlY1RvdGFsQmxvY2tzOyByKyspIHtcbiAgICAgIGlmIChpIDwgZGNEYXRhW3JdLmxlbmd0aCkge1xuICAgICAgICBkYXRhW2luZGV4KytdID0gZGNEYXRhW3JdW2ldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwZWQgRUMgY29kZXdvcmRzXG4gIGZvciAoaSA9IDA7IGkgPCBlY0NvdW50OyBpKyspIHtcbiAgICBmb3IgKHIgPSAwOyByIDwgZWNUb3RhbEJsb2NrczsgcisrKSB7XG4gICAgICBkYXRhW2luZGV4KytdID0gZWNEYXRhW3JdW2ldXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyoqXG4gKiBCdWlsZCBRUiBDb2RlIHN5bWJvbFxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZGF0YSAgICAgICAgICAgICAgICAgSW5wdXQgc3RyaW5nXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHZlcnNpb24gICAgICAgICAgICAgIFFSIENvZGUgdmVyc2lvblxuICogQHBhcmFtICB7RXJyb3JDb3JyZXRpb25MZXZlbH0gZXJyb3JDb3JyZWN0aW9uTGV2ZWwgRXJyb3IgbGV2ZWxcbiAqIEBwYXJhbSAge01hc2tQYXR0ZXJufSBtYXNrUGF0dGVybiAgICAgTWFzayBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBjb250YWluaW5nIHN5bWJvbCBkYXRhXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVN5bWJvbCAoZGF0YSwgdmVyc2lvbiwgZXJyb3JDb3JyZWN0aW9uTGV2ZWwsIG1hc2tQYXR0ZXJuKSB7XG4gIHZhciBzZWdtZW50c1xuXG4gIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgc2VnbWVudHMgPSBTZWdtZW50cy5mcm9tQXJyYXkoZGF0YSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgZXN0aW1hdGVkVmVyc2lvbiA9IHZlcnNpb25cblxuICAgIGlmICghZXN0aW1hdGVkVmVyc2lvbikge1xuICAgICAgdmFyIHJhd1NlZ21lbnRzID0gU2VnbWVudHMucmF3U3BsaXQoZGF0YSlcblxuICAgICAgLy8gRXN0aW1hdGUgYmVzdCB2ZXJzaW9uIHRoYXQgY2FuIGNvbnRhaW4gcmF3IHNwbGl0dGVkIHNlZ21lbnRzXG4gICAgICBlc3RpbWF0ZWRWZXJzaW9uID0gVmVyc2lvbi5nZXRCZXN0VmVyc2lvbkZvckRhdGEocmF3U2VnbWVudHMsXG4gICAgICAgIGVycm9yQ29ycmVjdGlvbkxldmVsKVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIG9wdGltaXplZCBzZWdtZW50c1xuICAgIC8vIElmIGVzdGltYXRlZCB2ZXJzaW9uIGlzIHVuZGVmaW5lZCwgdHJ5IHdpdGggdGhlIGhpZ2hlc3QgdmVyc2lvblxuICAgIHNlZ21lbnRzID0gU2VnbWVudHMuZnJvbVN0cmluZyhkYXRhLCBlc3RpbWF0ZWRWZXJzaW9uIHx8IDQwKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhJylcbiAgfVxuXG4gIC8vIEdldCB0aGUgbWluIHZlcnNpb24gdGhhdCBjYW4gY29udGFpbiBkYXRhXG4gIHZhciBiZXN0VmVyc2lvbiA9IFZlcnNpb24uZ2V0QmVzdFZlcnNpb25Gb3JEYXRhKHNlZ21lbnRzLFxuICAgICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWwpXG5cbiAgLy8gSWYgbm8gdmVyc2lvbiBpcyBmb3VuZCwgZGF0YSBjYW5ub3QgYmUgc3RvcmVkXG4gIGlmICghYmVzdFZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhbW91bnQgb2YgZGF0YSBpcyB0b28gYmlnIHRvIGJlIHN0b3JlZCBpbiBhIFFSIENvZGUnKVxuICB9XG5cbiAgLy8gSWYgbm90IHNwZWNpZmllZCwgdXNlIG1pbiB2ZXJzaW9uIGFzIGRlZmF1bHRcbiAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgdmVyc2lvbiA9IGJlc3RWZXJzaW9uXG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCB2ZXJzaW9uIGNhbiBjb250YWluIHRoZSBkYXRhXG4gIH0gZWxzZSBpZiAodmVyc2lvbiA8IGJlc3RWZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcXG4nICtcbiAgICAgICdUaGUgY2hvc2VuIFFSIENvZGUgdmVyc2lvbiBjYW5ub3QgY29udGFpbiB0aGlzIGFtb3VudCBvZiBkYXRhLlxcbicgK1xuICAgICAgJ01pbmltdW0gdmVyc2lvbiByZXF1aXJlZCB0byBzdG9yZSBjdXJyZW50IGRhdGEgaXM6ICcgKyBiZXN0VmVyc2lvbiArICcuXFxuJ1xuICAgIClcbiAgfVxuXG4gIHZhciBkYXRhQml0cyA9IGNyZWF0ZURhdGEodmVyc2lvbiwgZXJyb3JDb3JyZWN0aW9uTGV2ZWwsIHNlZ21lbnRzKVxuXG4gIC8vIEFsbG9jYXRlIG1hdHJpeCBidWZmZXJcbiAgdmFyIG1vZHVsZUNvdW50ID0gVXRpbHMuZ2V0U3ltYm9sU2l6ZSh2ZXJzaW9uKVxuICB2YXIgbW9kdWxlcyA9IG5ldyBCaXRNYXRyaXgobW9kdWxlQ291bnQpXG5cbiAgLy8gQWRkIGZ1bmN0aW9uIG1vZHVsZXNcbiAgc2V0dXBGaW5kZXJQYXR0ZXJuKG1vZHVsZXMsIHZlcnNpb24pXG4gIHNldHVwVGltaW5nUGF0dGVybihtb2R1bGVzKVxuICBzZXR1cEFsaWdubWVudFBhdHRlcm4obW9kdWxlcywgdmVyc2lvbilcblxuICAvLyBBZGQgdGVtcG9yYXJ5IGR1bW15IGJpdHMgZm9yIGZvcm1hdCBpbmZvIGp1c3QgdG8gc2V0IHRoZW0gYXMgcmVzZXJ2ZWQuXG4gIC8vIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlc2UgYml0cyBmcm9tIGJlaW5nIG1hc2tlZCBieSB7QGxpbmsgTWFza1BhdHRlcm4uYXBwbHlNYXNrfVxuICAvLyBzaW5jZSB0aGUgbWFza2luZyBvcGVyYXRpb24gbXVzdCBiZSBwZXJmb3JtZWQgb25seSBvbiB0aGUgZW5jb2RpbmcgcmVnaW9uLlxuICAvLyBUaGVzZSBibG9ja3Mgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGNvcnJlY3QgdmFsdWVzIGxhdGVyIGluIGNvZGUuXG4gIHNldHVwRm9ybWF0SW5mbyhtb2R1bGVzLCBlcnJvckNvcnJlY3Rpb25MZXZlbCwgMClcblxuICBpZiAodmVyc2lvbiA+PSA3KSB7XG4gICAgc2V0dXBWZXJzaW9uSW5mbyhtb2R1bGVzLCB2ZXJzaW9uKVxuICB9XG5cbiAgLy8gQWRkIGRhdGEgY29kZXdvcmRzXG4gIHNldHVwRGF0YShtb2R1bGVzLCBkYXRhQml0cylcblxuICBpZiAoaXNOYU4obWFza1BhdHRlcm4pKSB7XG4gICAgLy8gRmluZCBiZXN0IG1hc2sgcGF0dGVyblxuICAgIG1hc2tQYXR0ZXJuID0gTWFza1BhdHRlcm4uZ2V0QmVzdE1hc2sobW9kdWxlcyxcbiAgICAgIHNldHVwRm9ybWF0SW5mby5iaW5kKG51bGwsIG1vZHVsZXMsIGVycm9yQ29ycmVjdGlvbkxldmVsKSlcbiAgfVxuXG4gIC8vIEFwcGx5IG1hc2sgcGF0dGVyblxuICBNYXNrUGF0dGVybi5hcHBseU1hc2sobWFza1BhdHRlcm4sIG1vZHVsZXMpXG5cbiAgLy8gUmVwbGFjZSBmb3JtYXQgaW5mbyBiaXRzIHdpdGggY29ycmVjdCB2YWx1ZXNcbiAgc2V0dXBGb3JtYXRJbmZvKG1vZHVsZXMsIGVycm9yQ29ycmVjdGlvbkxldmVsLCBtYXNrUGF0dGVybilcblxuICByZXR1cm4ge1xuICAgIG1vZHVsZXM6IG1vZHVsZXMsXG4gICAgdmVyc2lvbjogdmVyc2lvbixcbiAgICBlcnJvckNvcnJlY3Rpb25MZXZlbDogZXJyb3JDb3JyZWN0aW9uTGV2ZWwsXG4gICAgbWFza1BhdHRlcm46IG1hc2tQYXR0ZXJuLFxuICAgIHNlZ21lbnRzOiBzZWdtZW50c1xuICB9XG59XG5cbi8qKlxuICogUVIgQ29kZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nIHwgQXJyYXl9IGRhdGEgICAgICAgICAgICAgICAgIElucHV0IGRhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25zXG4gKiBAcGFyYW0ge051bWJlcn0gb3B0aW9ucy52ZXJzaW9uICAgICAgICAgICAgICBRUiBDb2RlIHZlcnNpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmVycm9yQ29ycmVjdGlvbkxldmVsIEVycm9yIGNvcnJlY3Rpb24gbGV2ZWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMudG9TSklTRnVuYyAgICAgICAgIEhlbHBlciBmdW5jIHRvIGNvbnZlcnQgdXRmOCB0byBzamlzXG4gKi9cbmV4cG9ydHMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlIChkYXRhLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcgfHwgZGF0YSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGlucHV0IHRleHQnKVxuICB9XG5cbiAgdmFyIGVycm9yQ29ycmVjdGlvbkxldmVsID0gRUNMZXZlbC5NXG4gIHZhciB2ZXJzaW9uXG4gIHZhciBtYXNrXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFVzZSBoaWdoZXIgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCBhcyBkZWZhdWx0XG4gICAgZXJyb3JDb3JyZWN0aW9uTGV2ZWwgPSBFQ0xldmVsLmZyb20ob3B0aW9ucy5lcnJvckNvcnJlY3Rpb25MZXZlbCwgRUNMZXZlbC5NKVxuICAgIHZlcnNpb24gPSBWZXJzaW9uLmZyb20ob3B0aW9ucy52ZXJzaW9uKVxuICAgIG1hc2sgPSBNYXNrUGF0dGVybi5mcm9tKG9wdGlvbnMubWFza1BhdHRlcm4pXG5cbiAgICBpZiAob3B0aW9ucy50b1NKSVNGdW5jKSB7XG4gICAgICBVdGlscy5zZXRUb1NKSVNGdW5jdGlvbihvcHRpb25zLnRvU0pJU0Z1bmMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVN5bWJvbChkYXRhLCB2ZXJzaW9uLCBlcnJvckNvcnJlY3Rpb25MZXZlbCwgbWFzaylcbn1cbiIsInZhciBCdWZmZXJVdGlsID0gcmVxdWlyZSgnLi4vdXRpbHMvYnVmZmVyJylcbnZhciBQb2x5bm9taWFsID0gcmVxdWlyZSgnLi9wb2x5bm9taWFsJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXJcblxuZnVuY3Rpb24gUmVlZFNvbG9tb25FbmNvZGVyIChkZWdyZWUpIHtcbiAgdGhpcy5nZW5Qb2x5ID0gdW5kZWZpbmVkXG4gIHRoaXMuZGVncmVlID0gZGVncmVlXG5cbiAgaWYgKHRoaXMuZGVncmVlKSB0aGlzLmluaXRpYWxpemUodGhpcy5kZWdyZWUpXG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0aGUgZW5jb2Rlci5cbiAqIFRoZSBpbnB1dCBwYXJhbSBzaG91bGQgY29ycmVzcG9uZCB0byB0aGUgbnVtYmVyIG9mIGVycm9yIGNvcnJlY3Rpb24gY29kZXdvcmRzLlxuICpcbiAqIEBwYXJhbSAge051bWJlcn0gZGVncmVlXG4gKi9cblJlZWRTb2xvbW9uRW5jb2Rlci5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIGluaXRpYWxpemUgKGRlZ3JlZSkge1xuICAvLyBjcmVhdGUgYW4gaXJyZWR1Y2libGUgZ2VuZXJhdG9yIHBvbHlub21pYWxcbiAgdGhpcy5kZWdyZWUgPSBkZWdyZWVcbiAgdGhpcy5nZW5Qb2x5ID0gUG9seW5vbWlhbC5nZW5lcmF0ZUVDUG9seW5vbWlhbCh0aGlzLmRlZ3JlZSlcbn1cblxuLyoqXG4gKiBFbmNvZGVzIGEgY2h1bmsgb2YgZGF0YVxuICpcbiAqIEBwYXJhbSAge0J1ZmZlcn0gZGF0YSBCdWZmZXIgY29udGFpbmluZyBpbnB1dCBkYXRhXG4gKiBAcmV0dXJuIHtCdWZmZXJ9ICAgICAgQnVmZmVyIGNvbnRhaW5pbmcgZW5jb2RlZCBkYXRhXG4gKi9cblJlZWRTb2xvbW9uRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlIChkYXRhKSB7XG4gIGlmICghdGhpcy5nZW5Qb2x5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGVyIG5vdCBpbml0aWFsaXplZCcpXG4gIH1cblxuICAvLyBDYWxjdWxhdGUgRUMgZm9yIHRoaXMgZGF0YSBibG9ja1xuICAvLyBleHRlbmRzIGRhdGEgc2l6ZSB0byBkYXRhK2dlblBvbHkgc2l6ZVxuICB2YXIgcGFkID0gQnVmZmVyVXRpbC5hbGxvYyh0aGlzLmRlZ3JlZSlcbiAgdmFyIHBhZGRlZERhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBwYWRdLCBkYXRhLmxlbmd0aCArIHRoaXMuZGVncmVlKVxuXG4gIC8vIFRoZSBlcnJvciBjb3JyZWN0aW9uIGNvZGV3b3JkcyBhcmUgdGhlIHJlbWFpbmRlciBhZnRlciBkaXZpZGluZyB0aGUgZGF0YSBjb2Rld29yZHNcbiAgLy8gYnkgYSBnZW5lcmF0b3IgcG9seW5vbWlhbFxuICB2YXIgcmVtYWluZGVyID0gUG9seW5vbWlhbC5tb2QocGFkZGVkRGF0YSwgdGhpcy5nZW5Qb2x5KVxuXG4gIC8vIHJldHVybiBFQyBkYXRhIGJsb2NrcyAobGFzdCBuIGJ5dGUsIHdoZXJlIG4gaXMgdGhlIGRlZ3JlZSBvZiBnZW5Qb2x5KVxuICAvLyBJZiBjb2VmZmljaWVudHMgbnVtYmVyIGluIHJlbWFpbmRlciBhcmUgbGVzcyB0aGFuIGdlblBvbHkgZGVncmVlLFxuICAvLyBwYWQgd2l0aCAwcyB0byB0aGUgbGVmdCB0byByZWFjaCB0aGUgbmVlZGVkIG51bWJlciBvZiBjb2VmZmljaWVudHNcbiAgdmFyIHN0YXJ0ID0gdGhpcy5kZWdyZWUgLSByZW1haW5kZXIubGVuZ3RoXG4gIGlmIChzdGFydCA+IDApIHtcbiAgICB2YXIgYnVmZiA9IEJ1ZmZlclV0aWwuYWxsb2ModGhpcy5kZWdyZWUpXG4gICAgcmVtYWluZGVyLmNvcHkoYnVmZiwgc3RhcnQpXG5cbiAgICByZXR1cm4gYnVmZlxuICB9XG5cbiAgcmV0dXJuIHJlbWFpbmRlclxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZWRTb2xvbW9uRW5jb2RlclxuIiwidmFyIG51bWVyaWMgPSAnWzAtOV0rJ1xudmFyIGFscGhhbnVtZXJpYyA9ICdbQS1aICQlKitcXFxcLS4vOl0rJ1xudmFyIGthbmppID0gJyg/Olt1MzAwMC11MzAzRl18W3UzMDQwLXUzMDlGXXxbdTMwQTAtdTMwRkZdfCcgK1xuICAnW3VGRjAwLXVGRkVGXXxbdTRFMDAtdTlGQUZdfFt1MjYwNS11MjYwNl18W3UyMTkwLXUyMTk1XXx1MjAzQnwnICtcbiAgJ1t1MjAxMHUyMDE1dTIwMTh1MjAxOXUyMDI1dTIwMjZ1MjAxQ3UyMDFEdTIyMjV1MjI2MF18JyArXG4gICdbdTAzOTEtdTA0NTFdfFt1MDBBN3UwMEE4dTAwQjF1MDBCNHUwMEQ3dTAwRjddKSsnXG5rYW5qaSA9IGthbmppLnJlcGxhY2UoL3UvZywgJ1xcXFx1JylcblxudmFyIGJ5dGUgPSAnKD86KD8hW0EtWjAtOSAkJSorXFxcXC0uLzpdfCcgKyBrYW5qaSArICcpKD86LnxbXFxyXFxuXSkpKydcblxuZXhwb3J0cy5LQU5KSSA9IG5ldyBSZWdFeHAoa2FuamksICdnJylcbmV4cG9ydHMuQllURV9LQU5KSSA9IG5ldyBSZWdFeHAoJ1teQS1aMC05ICQlKitcXFxcLS4vOl0rJywgJ2cnKVxuZXhwb3J0cy5CWVRFID0gbmV3IFJlZ0V4cChieXRlLCAnZycpXG5leHBvcnRzLk5VTUVSSUMgPSBuZXcgUmVnRXhwKG51bWVyaWMsICdnJylcbmV4cG9ydHMuQUxQSEFOVU1FUklDID0gbmV3IFJlZ0V4cChhbHBoYW51bWVyaWMsICdnJylcblxudmFyIFRFU1RfS0FOSkkgPSBuZXcgUmVnRXhwKCdeJyArIGthbmppICsgJyQnKVxudmFyIFRFU1RfTlVNRVJJQyA9IG5ldyBSZWdFeHAoJ14nICsgbnVtZXJpYyArICckJylcbnZhciBURVNUX0FMUEhBTlVNRVJJQyA9IG5ldyBSZWdFeHAoJ15bQS1aMC05ICQlKitcXFxcLS4vOl0rJCcpXG5cbmV4cG9ydHMudGVzdEthbmppID0gZnVuY3Rpb24gdGVzdEthbmppIChzdHIpIHtcbiAgcmV0dXJuIFRFU1RfS0FOSkkudGVzdChzdHIpXG59XG5cbmV4cG9ydHMudGVzdE51bWVyaWMgPSBmdW5jdGlvbiB0ZXN0TnVtZXJpYyAoc3RyKSB7XG4gIHJldHVybiBURVNUX05VTUVSSUMudGVzdChzdHIpXG59XG5cbmV4cG9ydHMudGVzdEFscGhhbnVtZXJpYyA9IGZ1bmN0aW9uIHRlc3RBbHBoYW51bWVyaWMgKHN0cikge1xuICByZXR1cm4gVEVTVF9BTFBIQU5VTUVSSUMudGVzdChzdHIpXG59XG4iLCJ2YXIgTW9kZSA9IHJlcXVpcmUoJy4vbW9kZScpXG52YXIgTnVtZXJpY0RhdGEgPSByZXF1aXJlKCcuL251bWVyaWMtZGF0YScpXG52YXIgQWxwaGFudW1lcmljRGF0YSA9IHJlcXVpcmUoJy4vYWxwaGFudW1lcmljLWRhdGEnKVxudmFyIEJ5dGVEYXRhID0gcmVxdWlyZSgnLi9ieXRlLWRhdGEnKVxudmFyIEthbmppRGF0YSA9IHJlcXVpcmUoJy4va2FuamktZGF0YScpXG52YXIgUmVnZXggPSByZXF1aXJlKCcuL3JlZ2V4JylcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKVxudmFyIGRpamtzdHJhID0gcmVxdWlyZSgnZGlqa3N0cmFqcycpXG5cbi8qKlxuICogUmV0dXJucyBVVEY4IGJ5dGUgbGVuZ3RoXG4gKlxuICogQHBhcmFtICB7U3RyaW5nfSBzdHIgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICBOdW1iZXIgb2YgYnl0ZVxuICovXG5mdW5jdGlvbiBnZXRTdHJpbmdCeXRlTGVuZ3RoIChzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKS5sZW5ndGhcbn1cblxuLyoqXG4gKiBHZXQgYSBsaXN0IG9mIHNlZ21lbnRzIG9mIHRoZSBzcGVjaWZpZWQgbW9kZVxuICogZnJvbSBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSAge01vZGV9ICAgbW9kZSBTZWdtZW50IG1vZGVcbiAqIEBwYXJhbSAge1N0cmluZ30gc3RyICBTdHJpbmcgdG8gcHJvY2Vzc1xuICogQHJldHVybiB7QXJyYXl9ICAgICAgIEFycmF5IG9mIG9iamVjdCB3aXRoIHNlZ21lbnRzIGRhdGFcbiAqL1xuZnVuY3Rpb24gZ2V0U2VnbWVudHMgKHJlZ2V4LCBtb2RlLCBzdHIpIHtcbiAgdmFyIHNlZ21lbnRzID0gW11cbiAgdmFyIHJlc3VsdFxuXG4gIHdoaWxlICgocmVzdWx0ID0gcmVnZXguZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgZGF0YTogcmVzdWx0WzBdLFxuICAgICAgaW5kZXg6IHJlc3VsdC5pbmRleCxcbiAgICAgIG1vZGU6IG1vZGUsXG4gICAgICBsZW5ndGg6IHJlc3VsdFswXS5sZW5ndGhcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRzXG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBzZXJpZXMgb2Ygc2VnbWVudHMgd2l0aCB0aGUgYXBwcm9wcmlhdGVcbiAqIG1vZGVzIGZyb20gYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRhdGFTdHIgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gICAgICAgICAgQXJyYXkgb2Ygb2JqZWN0IHdpdGggc2VnbWVudHMgZGF0YVxuICovXG5mdW5jdGlvbiBnZXRTZWdtZW50c0Zyb21TdHJpbmcgKGRhdGFTdHIpIHtcbiAgdmFyIG51bVNlZ3MgPSBnZXRTZWdtZW50cyhSZWdleC5OVU1FUklDLCBNb2RlLk5VTUVSSUMsIGRhdGFTdHIpXG4gIHZhciBhbHBoYU51bVNlZ3MgPSBnZXRTZWdtZW50cyhSZWdleC5BTFBIQU5VTUVSSUMsIE1vZGUuQUxQSEFOVU1FUklDLCBkYXRhU3RyKVxuICB2YXIgYnl0ZVNlZ3NcbiAgdmFyIGthbmppU2Vnc1xuXG4gIGlmIChVdGlscy5pc0thbmppTW9kZUVuYWJsZWQoKSkge1xuICAgIGJ5dGVTZWdzID0gZ2V0U2VnbWVudHMoUmVnZXguQllURSwgTW9kZS5CWVRFLCBkYXRhU3RyKVxuICAgIGthbmppU2VncyA9IGdldFNlZ21lbnRzKFJlZ2V4LktBTkpJLCBNb2RlLktBTkpJLCBkYXRhU3RyKVxuICB9IGVsc2Uge1xuICAgIGJ5dGVTZWdzID0gZ2V0U2VnbWVudHMoUmVnZXguQllURV9LQU5KSSwgTW9kZS5CWVRFLCBkYXRhU3RyKVxuICAgIGthbmppU2VncyA9IFtdXG4gIH1cblxuICB2YXIgc2VncyA9IG51bVNlZ3MuY29uY2F0KGFscGhhTnVtU2VncywgYnl0ZVNlZ3MsIGthbmppU2VncylcblxuICByZXR1cm4gc2Vnc1xuICAgIC5zb3J0KGZ1bmN0aW9uIChzMSwgczIpIHtcbiAgICAgIHJldHVybiBzMS5pbmRleCAtIHMyLmluZGV4XG4gICAgfSlcbiAgICAubWFwKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICBtb2RlOiBvYmoubW9kZSxcbiAgICAgICAgbGVuZ3RoOiBvYmoubGVuZ3RoXG4gICAgICB9XG4gICAgfSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGhvdyBtYW55IGJpdHMgYXJlIG5lZWRlZCB0byBlbmNvZGUgYSBzdHJpbmcgb2ZcbiAqIHNwZWNpZmllZCBsZW5ndGggd2l0aCB0aGUgc3BlY2lmaWVkIG1vZGVcbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IGxlbmd0aCBTdHJpbmcgbGVuZ3RoXG4gKiBAcGFyYW0gIHtNb2RlfSBtb2RlICAgICBTZWdtZW50IG1vZGVcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgIEJpdCBsZW5ndGhcbiAqL1xuZnVuY3Rpb24gZ2V0U2VnbWVudEJpdHNMZW5ndGggKGxlbmd0aCwgbW9kZSkge1xuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlIE1vZGUuTlVNRVJJQzpcbiAgICAgIHJldHVybiBOdW1lcmljRGF0YS5nZXRCaXRzTGVuZ3RoKGxlbmd0aClcbiAgICBjYXNlIE1vZGUuQUxQSEFOVU1FUklDOlxuICAgICAgcmV0dXJuIEFscGhhbnVtZXJpY0RhdGEuZ2V0Qml0c0xlbmd0aChsZW5ndGgpXG4gICAgY2FzZSBNb2RlLktBTkpJOlxuICAgICAgcmV0dXJuIEthbmppRGF0YS5nZXRCaXRzTGVuZ3RoKGxlbmd0aClcbiAgICBjYXNlIE1vZGUuQllURTpcbiAgICAgIHJldHVybiBCeXRlRGF0YS5nZXRCaXRzTGVuZ3RoKGxlbmd0aClcbiAgfVxufVxuXG4vKipcbiAqIE1lcmdlcyBhZGphY2VudCBzZWdtZW50cyB3aGljaCBoYXZlIHRoZSBzYW1lIG1vZGVcbiAqXG4gKiBAcGFyYW0gIHtBcnJheX0gc2VncyBBcnJheSBvZiBvYmplY3Qgd2l0aCBzZWdtZW50cyBkYXRhXG4gKiBAcmV0dXJuIHtBcnJheX0gICAgICBBcnJheSBvZiBvYmplY3Qgd2l0aCBzZWdtZW50cyBkYXRhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlU2VnbWVudHMgKHNlZ3MpIHtcbiAgcmV0dXJuIHNlZ3MucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnIpIHtcbiAgICB2YXIgcHJldlNlZyA9IGFjYy5sZW5ndGggLSAxID49IDAgPyBhY2NbYWNjLmxlbmd0aCAtIDFdIDogbnVsbFxuICAgIGlmIChwcmV2U2VnICYmIHByZXZTZWcubW9kZSA9PT0gY3Vyci5tb2RlKSB7XG4gICAgICBhY2NbYWNjLmxlbmd0aCAtIDFdLmRhdGEgKz0gY3Vyci5kYXRhXG4gICAgICByZXR1cm4gYWNjXG4gICAgfVxuXG4gICAgYWNjLnB1c2goY3VycilcbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGxpc3Qgb2YgYWxsIHBvc3NpYmxlIG5vZGVzIGNvbWJpbmF0aW9uIHdoaWNoXG4gKiB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgYSBzZWdtZW50cyBncmFwaC5cbiAqXG4gKiBOb2RlcyBhcmUgZGl2aWRlZCBieSBncm91cHMuIEVhY2ggZ3JvdXAgd2lsbCBjb250YWluIGEgbGlzdCBvZiBhbGwgdGhlIG1vZGVzXG4gKiBpbiB3aGljaCBpcyBwb3NzaWJsZSB0byBlbmNvZGUgdGhlIGdpdmVuIHRleHQuXG4gKlxuICogRm9yIGV4YW1wbGUgdGhlIHRleHQgJzEyMzQ1JyBjYW4gYmUgZW5jb2RlZCBhcyBOdW1lcmljLCBBbHBoYW51bWVyaWMgb3IgQnl0ZS5cbiAqIFRoZSBncm91cCBmb3IgJzEyMzQ1JyB3aWxsIGNvbnRhaW4gdGhlbiAzIG9iamVjdHMsIG9uZSBmb3IgZWFjaFxuICogcG9zc2libGUgZW5jb2RpbmcgbW9kZS5cbiAqXG4gKiBFYWNoIG5vZGUgcmVwcmVzZW50cyBhIHBvc3NpYmxlIHNlZ21lbnQuXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IHNlZ3MgQXJyYXkgb2Ygb2JqZWN0IHdpdGggc2VnbWVudHMgZGF0YVxuICogQHJldHVybiB7QXJyYXl9ICAgICAgQXJyYXkgb2Ygb2JqZWN0IHdpdGggc2VnbWVudHMgZGF0YVxuICovXG5mdW5jdGlvbiBidWlsZE5vZGVzIChzZWdzKSB7XG4gIHZhciBub2RlcyA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzZWcgPSBzZWdzW2ldXG5cbiAgICBzd2l0Y2ggKHNlZy5tb2RlKSB7XG4gICAgICBjYXNlIE1vZGUuTlVNRVJJQzpcbiAgICAgICAgbm9kZXMucHVzaChbc2VnLFxuICAgICAgICAgIHsgZGF0YTogc2VnLmRhdGEsIG1vZGU6IE1vZGUuQUxQSEFOVU1FUklDLCBsZW5ndGg6IHNlZy5sZW5ndGggfSxcbiAgICAgICAgICB7IGRhdGE6IHNlZy5kYXRhLCBtb2RlOiBNb2RlLkJZVEUsIGxlbmd0aDogc2VnLmxlbmd0aCB9XG4gICAgICAgIF0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIE1vZGUuQUxQSEFOVU1FUklDOlxuICAgICAgICBub2Rlcy5wdXNoKFtzZWcsXG4gICAgICAgICAgeyBkYXRhOiBzZWcuZGF0YSwgbW9kZTogTW9kZS5CWVRFLCBsZW5ndGg6IHNlZy5sZW5ndGggfVxuICAgICAgICBdKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBNb2RlLktBTkpJOlxuICAgICAgICBub2Rlcy5wdXNoKFtzZWcsXG4gICAgICAgICAgeyBkYXRhOiBzZWcuZGF0YSwgbW9kZTogTW9kZS5CWVRFLCBsZW5ndGg6IGdldFN0cmluZ0J5dGVMZW5ndGgoc2VnLmRhdGEpIH1cbiAgICAgICAgXSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgTW9kZS5CWVRFOlxuICAgICAgICBub2Rlcy5wdXNoKFtcbiAgICAgICAgICB7IGRhdGE6IHNlZy5kYXRhLCBtb2RlOiBNb2RlLkJZVEUsIGxlbmd0aDogZ2V0U3RyaW5nQnl0ZUxlbmd0aChzZWcuZGF0YSkgfVxuICAgICAgICBdKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2Rlc1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGdyYXBoIGZyb20gYSBsaXN0IG9mIG5vZGVzLlxuICogQWxsIHNlZ21lbnRzIGluIGVhY2ggbm9kZSBncm91cCB3aWxsIGJlIGNvbm5lY3RlZCB3aXRoIGFsbCB0aGUgc2VnbWVudHMgb2ZcbiAqIHRoZSBuZXh0IGdyb3VwIGFuZCBzbyBvbi5cbiAqXG4gKiBBdCBlYWNoIGNvbm5lY3Rpb24gd2lsbCBiZSBhc3NpZ25lZCBhIHdlaWdodCBkZXBlbmRpbmcgb24gdGhlXG4gKiBzZWdtZW50J3MgYnl0ZSBsZW5ndGguXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IG5vZGVzICAgIEFycmF5IG9mIG9iamVjdCB3aXRoIHNlZ21lbnRzIGRhdGFcbiAqIEBwYXJhbSAge051bWJlcn0gdmVyc2lvbiBRUiBDb2RlIHZlcnNpb25cbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICBHcmFwaCBvZiBhbGwgcG9zc2libGUgc2VnbWVudHNcbiAqL1xuZnVuY3Rpb24gYnVpbGRHcmFwaCAobm9kZXMsIHZlcnNpb24pIHtcbiAgdmFyIHRhYmxlID0ge31cbiAgdmFyIGdyYXBoID0geydzdGFydCc6IHt9fVxuICB2YXIgcHJldk5vZGVJZHMgPSBbJ3N0YXJ0J11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5vZGVHcm91cCA9IG5vZGVzW2ldXG4gICAgdmFyIGN1cnJlbnROb2RlSWRzID0gW11cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm9kZUdyb3VwLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVHcm91cFtqXVxuICAgICAgdmFyIGtleSA9ICcnICsgaSArIGpcblxuICAgICAgY3VycmVudE5vZGVJZHMucHVzaChrZXkpXG4gICAgICB0YWJsZVtrZXldID0geyBub2RlOiBub2RlLCBsYXN0Q291bnQ6IDAgfVxuICAgICAgZ3JhcGhba2V5XSA9IHt9XG5cbiAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgcHJldk5vZGVJZHMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgdmFyIHByZXZOb2RlSWQgPSBwcmV2Tm9kZUlkc1tuXVxuXG4gICAgICAgIGlmICh0YWJsZVtwcmV2Tm9kZUlkXSAmJiB0YWJsZVtwcmV2Tm9kZUlkXS5ub2RlLm1vZGUgPT09IG5vZGUubW9kZSkge1xuICAgICAgICAgIGdyYXBoW3ByZXZOb2RlSWRdW2tleV0gPVxuICAgICAgICAgICAgZ2V0U2VnbWVudEJpdHNMZW5ndGgodGFibGVbcHJldk5vZGVJZF0ubGFzdENvdW50ICsgbm9kZS5sZW5ndGgsIG5vZGUubW9kZSkgLVxuICAgICAgICAgICAgZ2V0U2VnbWVudEJpdHNMZW5ndGgodGFibGVbcHJldk5vZGVJZF0ubGFzdENvdW50LCBub2RlLm1vZGUpXG5cbiAgICAgICAgICB0YWJsZVtwcmV2Tm9kZUlkXS5sYXN0Q291bnQgKz0gbm9kZS5sZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGFibGVbcHJldk5vZGVJZF0pIHRhYmxlW3ByZXZOb2RlSWRdLmxhc3RDb3VudCA9IG5vZGUubGVuZ3RoXG5cbiAgICAgICAgICBncmFwaFtwcmV2Tm9kZUlkXVtrZXldID0gZ2V0U2VnbWVudEJpdHNMZW5ndGgobm9kZS5sZW5ndGgsIG5vZGUubW9kZSkgK1xuICAgICAgICAgICAgNCArIE1vZGUuZ2V0Q2hhckNvdW50SW5kaWNhdG9yKG5vZGUubW9kZSwgdmVyc2lvbikgLy8gc3dpdGNoIGNvc3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByZXZOb2RlSWRzID0gY3VycmVudE5vZGVJZHNcbiAgfVxuXG4gIGZvciAobiA9IDA7IG4gPCBwcmV2Tm9kZUlkcy5sZW5ndGg7IG4rKykge1xuICAgIGdyYXBoW3ByZXZOb2RlSWRzW25dXVsnZW5kJ10gPSAwXG4gIH1cblxuICByZXR1cm4geyBtYXA6IGdyYXBoLCB0YWJsZTogdGFibGUgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHNlZ21lbnQgZnJvbSBhIHNwZWNpZmllZCBkYXRhIGFuZCBtb2RlLlxuICogSWYgYSBtb2RlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBtb3JlIHN1aXRhYmxlIHdpbGwgYmUgdXNlZC5cbiAqXG4gKiBAcGFyYW0gIHtTdHJpbmd9IGRhdGEgICAgICAgICAgICAgSW5wdXQgZGF0YVxuICogQHBhcmFtICB7TW9kZSB8IFN0cmluZ30gbW9kZXNIaW50IERhdGEgbW9kZVxuICogQHJldHVybiB7U2VnbWVudH0gICAgICAgICAgICAgICAgIFNlZ21lbnRcbiAqL1xuZnVuY3Rpb24gYnVpbGRTaW5nbGVTZWdtZW50IChkYXRhLCBtb2Rlc0hpbnQpIHtcbiAgdmFyIG1vZGVcbiAgdmFyIGJlc3RNb2RlID0gTW9kZS5nZXRCZXN0TW9kZUZvckRhdGEoZGF0YSlcblxuICBtb2RlID0gTW9kZS5mcm9tKG1vZGVzSGludCwgYmVzdE1vZGUpXG5cbiAgLy8gTWFrZSBzdXJlIGRhdGEgY2FuIGJlIGVuY29kZWRcbiAgaWYgKG1vZGUgIT09IE1vZGUuQllURSAmJiBtb2RlLmJpdCA8IGJlc3RNb2RlLmJpdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgZGF0YSArICdcIicgK1xuICAgICAgJyBjYW5ub3QgYmUgZW5jb2RlZCB3aXRoIG1vZGUgJyArIE1vZGUudG9TdHJpbmcobW9kZSkgK1xuICAgICAgJy5cXG4gU3VnZ2VzdGVkIG1vZGUgaXM6ICcgKyBNb2RlLnRvU3RyaW5nKGJlc3RNb2RlKSlcbiAgfVxuXG4gIC8vIFVzZSBNb2RlLkJZVEUgaWYgS2Fuamkgc3VwcG9ydCBpcyBkaXNhYmxlZFxuICBpZiAobW9kZSA9PT0gTW9kZS5LQU5KSSAmJiAhVXRpbHMuaXNLYW5qaU1vZGVFbmFibGVkKCkpIHtcbiAgICBtb2RlID0gTW9kZS5CWVRFXG4gIH1cblxuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlIE1vZGUuTlVNRVJJQzpcbiAgICAgIHJldHVybiBuZXcgTnVtZXJpY0RhdGEoZGF0YSlcblxuICAgIGNhc2UgTW9kZS5BTFBIQU5VTUVSSUM6XG4gICAgICByZXR1cm4gbmV3IEFscGhhbnVtZXJpY0RhdGEoZGF0YSlcblxuICAgIGNhc2UgTW9kZS5LQU5KSTpcbiAgICAgIHJldHVybiBuZXcgS2FuamlEYXRhKGRhdGEpXG5cbiAgICBjYXNlIE1vZGUuQllURTpcbiAgICAgIHJldHVybiBuZXcgQnl0ZURhdGEoZGF0YSlcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGxpc3Qgb2Ygc2VnbWVudHMgZnJvbSBhbiBhcnJheS5cbiAqIEFycmF5IGNhbiBjb250YWluIFN0cmluZ3Mgb3IgT2JqZWN0cyB3aXRoIHNlZ21lbnQncyBpbmZvLlxuICpcbiAqIEZvciBlYWNoIGl0ZW0gd2hpY2ggaXMgYSBzdHJpbmcsIHdpbGwgYmUgZ2VuZXJhdGVkIGEgc2VnbWVudCB3aXRoIHRoZSBnaXZlblxuICogc3RyaW5nIGFuZCB0aGUgbW9yZSBhcHByb3ByaWF0ZSBlbmNvZGluZyBtb2RlLlxuICpcbiAqIEZvciBlYWNoIGl0ZW0gd2hpY2ggaXMgYW4gb2JqZWN0LCB3aWxsIGJlIGdlbmVyYXRlZCBhIHNlZ21lbnQgd2l0aCB0aGUgZ2l2ZW5cbiAqIGRhdGEgYW5kIG1vZGUuXG4gKiBPYmplY3RzIG11c3QgY29udGFpbiBhdCBsZWFzdCB0aGUgcHJvcGVydHkgXCJkYXRhXCIuXG4gKiBJZiBwcm9wZXJ0eSBcIm1vZGVcIiBpcyBub3QgcHJlc2VudCwgdGhlIG1vcmUgc3VpdGFibGUgbW9kZSB3aWxsIGJlIHVzZWQuXG4gKlxuICogQHBhcmFtICB7QXJyYXl9IGFycmF5IEFycmF5IG9mIG9iamVjdHMgd2l0aCBzZWdtZW50cyBkYXRhXG4gKiBAcmV0dXJuIHtBcnJheX0gICAgICAgQXJyYXkgb2YgU2VnbWVudHNcbiAqL1xuZXhwb3J0cy5mcm9tQXJyYXkgPSBmdW5jdGlvbiBmcm9tQXJyYXkgKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgc2VnKSB7XG4gICAgaWYgKHR5cGVvZiBzZWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhY2MucHVzaChidWlsZFNpbmdsZVNlZ21lbnQoc2VnLCBudWxsKSlcbiAgICB9IGVsc2UgaWYgKHNlZy5kYXRhKSB7XG4gICAgICBhY2MucHVzaChidWlsZFNpbmdsZVNlZ21lbnQoc2VnLmRhdGEsIHNlZy5tb2RlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdKVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbiBvcHRpbWl6ZWQgc2VxdWVuY2Ugb2Ygc2VnbWVudHMgZnJvbSBhIHN0cmluZyxcbiAqIHdoaWNoIHdpbGwgcHJvZHVjZSB0aGUgc2hvcnRlc3QgcG9zc2libGUgYml0c3RyZWFtLlxuICpcbiAqIEBwYXJhbSAge1N0cmluZ30gZGF0YSAgICBJbnB1dCBzdHJpbmdcbiAqIEBwYXJhbSAge051bWJlcn0gdmVyc2lvbiBRUiBDb2RlIHZlcnNpb25cbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICBBcnJheSBvZiBzZWdtZW50c1xuICovXG5leHBvcnRzLmZyb21TdHJpbmcgPSBmdW5jdGlvbiBmcm9tU3RyaW5nIChkYXRhLCB2ZXJzaW9uKSB7XG4gIHZhciBzZWdzID0gZ2V0U2VnbWVudHNGcm9tU3RyaW5nKGRhdGEsIFV0aWxzLmlzS2FuamlNb2RlRW5hYmxlZCgpKVxuXG4gIHZhciBub2RlcyA9IGJ1aWxkTm9kZXMoc2VncylcbiAgdmFyIGdyYXBoID0gYnVpbGRHcmFwaChub2RlcywgdmVyc2lvbilcbiAgdmFyIHBhdGggPSBkaWprc3RyYS5maW5kX3BhdGgoZ3JhcGgubWFwLCAnc3RhcnQnLCAnZW5kJylcblxuICB2YXIgb3B0aW1pemVkU2VncyA9IFtdXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBvcHRpbWl6ZWRTZWdzLnB1c2goZ3JhcGgudGFibGVbcGF0aFtpXV0ubm9kZSlcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLmZyb21BcnJheShtZXJnZVNlZ21lbnRzKG9wdGltaXplZFNlZ3MpKVxufVxuXG4vKipcbiAqIFNwbGl0cyBhIHN0cmluZyBpbiB2YXJpb3VzIHNlZ21lbnRzIHdpdGggdGhlIG1vZGVzIHdoaWNoXG4gKiBiZXN0IHJlcHJlc2VudCB0aGVpciBjb250ZW50LlxuICogVGhlIHByb2R1Y2VkIHNlZ21lbnRzIGFyZSBmYXIgZnJvbSBiZWluZyBvcHRpbWl6ZWQuXG4gKiBUaGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHRvIGVzdGltYXRlIGEgUVIgQ29kZSB2ZXJzaW9uXG4gKiB3aGljaCBtYXkgY29udGFpbiB0aGUgZGF0YS5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGRhdGEgSW5wdXQgc3RyaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gICAgICAgQXJyYXkgb2Ygc2VnbWVudHNcbiAqL1xuZXhwb3J0cy5yYXdTcGxpdCA9IGZ1bmN0aW9uIHJhd1NwbGl0IChkYXRhKSB7XG4gIHJldHVybiBleHBvcnRzLmZyb21BcnJheShcbiAgICBnZXRTZWdtZW50c0Zyb21TdHJpbmcoZGF0YSwgVXRpbHMuaXNLYW5qaU1vZGVFbmFibGVkKCkpXG4gIClcbn1cbiIsInZhciB0b1NKSVNGdW5jdGlvblxudmFyIENPREVXT1JEU19DT1VOVCA9IFtcbiAgMCwgLy8gTm90IHVzZWRcbiAgMjYsIDQ0LCA3MCwgMTAwLCAxMzQsIDE3MiwgMTk2LCAyNDIsIDI5MiwgMzQ2LFxuICA0MDQsIDQ2NiwgNTMyLCA1ODEsIDY1NSwgNzMzLCA4MTUsIDkwMSwgOTkxLCAxMDg1LFxuICAxMTU2LCAxMjU4LCAxMzY0LCAxNDc0LCAxNTg4LCAxNzA2LCAxODI4LCAxOTIxLCAyMDUxLCAyMTg1LFxuICAyMzIzLCAyNDY1LCAyNjExLCAyNzYxLCAyODc2LCAzMDM0LCAzMTk2LCAzMzYyLCAzNTMyLCAzNzA2XG5dXG5cbi8qKlxuICogUmV0dXJucyB0aGUgUVIgQ29kZSBzaXplIGZvciB0aGUgc3BlY2lmaWVkIHZlcnNpb25cbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHZlcnNpb24gUVIgQ29kZSB2ZXJzaW9uXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgc2l6ZSBvZiBRUiBjb2RlXG4gKi9cbmV4cG9ydHMuZ2V0U3ltYm9sU2l6ZSA9IGZ1bmN0aW9uIGdldFN5bWJvbFNpemUgKHZlcnNpb24pIHtcbiAgaWYgKCF2ZXJzaW9uKSB0aHJvdyBuZXcgRXJyb3IoJ1widmVyc2lvblwiIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCcpXG4gIGlmICh2ZXJzaW9uIDwgMSB8fCB2ZXJzaW9uID4gNDApIHRocm93IG5ldyBFcnJvcignXCJ2ZXJzaW9uXCIgc2hvdWxkIGJlIGluIHJhbmdlIGZyb20gMSB0byA0MCcpXG4gIHJldHVybiB2ZXJzaW9uICogNCArIDE3XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvZGV3b3JkcyB1c2VkIHRvIHN0b3JlIGRhdGEgYW5kIEVDIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSAge051bWJlcn0gdmVyc2lvbiBRUiBDb2RlIHZlcnNpb25cbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICBEYXRhIGxlbmd0aCBpbiBiaXRzXG4gKi9cbmV4cG9ydHMuZ2V0U3ltYm9sVG90YWxDb2Rld29yZHMgPSBmdW5jdGlvbiBnZXRTeW1ib2xUb3RhbENvZGV3b3JkcyAodmVyc2lvbikge1xuICByZXR1cm4gQ09ERVdPUkRTX0NPVU5UW3ZlcnNpb25dXG59XG5cbi8qKlxuICogRW5jb2RlIGRhdGEgd2l0aCBCb3NlLUNoYXVkaHVyaS1Ib2NxdWVuZ2hlbVxuICpcbiAqIEBwYXJhbSAge051bWJlcn0gZGF0YSBWYWx1ZSB0byBlbmNvZGVcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICBFbmNvZGVkIHZhbHVlXG4gKi9cbmV4cG9ydHMuZ2V0QkNIRGlnaXQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB2YXIgZGlnaXQgPSAwXG5cbiAgd2hpbGUgKGRhdGEgIT09IDApIHtcbiAgICBkaWdpdCsrXG4gICAgZGF0YSA+Pj49IDFcbiAgfVxuXG4gIHJldHVybiBkaWdpdFxufVxuXG5leHBvcnRzLnNldFRvU0pJU0Z1bmN0aW9uID0gZnVuY3Rpb24gc2V0VG9TSklTRnVuY3Rpb24gKGYpIHtcbiAgaWYgKHR5cGVvZiBmICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcInRvU0pJU0Z1bmNcIiBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbi4nKVxuICB9XG5cbiAgdG9TSklTRnVuY3Rpb24gPSBmXG59XG5cbmV4cG9ydHMuaXNLYW5qaU1vZGVFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHlwZW9mIHRvU0pJU0Z1bmN0aW9uICE9PSAndW5kZWZpbmVkJ1xufVxuXG5leHBvcnRzLnRvU0pJUyA9IGZ1bmN0aW9uIHRvU0pJUyAoa2FuamkpIHtcbiAgcmV0dXJuIHRvU0pJU0Z1bmN0aW9uKGthbmppKVxufVxuIiwiLyoqXG4gKiBDaGVjayBpZiBRUiBDb2RlIHZlcnNpb24gaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9ICB2ZXJzaW9uIFFSIENvZGUgdmVyc2lvblxuICogQHJldHVybiB7Qm9vbGVhbn0gICAgICAgICB0cnVlIGlmIHZhbGlkIHZlcnNpb24sIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnRzLmlzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkICh2ZXJzaW9uKSB7XG4gIHJldHVybiAhaXNOYU4odmVyc2lvbikgJiYgdmVyc2lvbiA+PSAxICYmIHZlcnNpb24gPD0gNDBcbn1cbiIsInZhciBVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKVxudmFyIEVDQ29kZSA9IHJlcXVpcmUoJy4vZXJyb3ItY29ycmVjdGlvbi1jb2RlJylcbnZhciBFQ0xldmVsID0gcmVxdWlyZSgnLi9lcnJvci1jb3JyZWN0aW9uLWxldmVsJylcbnZhciBNb2RlID0gcmVxdWlyZSgnLi9tb2RlJylcbnZhciBWZXJzaW9uQ2hlY2sgPSByZXF1aXJlKCcuL3ZlcnNpb24tY2hlY2snKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuLy8gR2VuZXJhdG9yIHBvbHlub21pYWwgdXNlZCB0byBlbmNvZGUgdmVyc2lvbiBpbmZvcm1hdGlvblxudmFyIEcxOCA9ICgxIDw8IDEyKSB8ICgxIDw8IDExKSB8ICgxIDw8IDEwKSB8ICgxIDw8IDkpIHwgKDEgPDwgOCkgfCAoMSA8PCA1KSB8ICgxIDw8IDIpIHwgKDEgPDwgMClcbnZhciBHMThfQkNIID0gVXRpbHMuZ2V0QkNIRGlnaXQoRzE4KVxuXG5mdW5jdGlvbiBnZXRCZXN0VmVyc2lvbkZvckRhdGFMZW5ndGggKG1vZGUsIGxlbmd0aCwgZXJyb3JDb3JyZWN0aW9uTGV2ZWwpIHtcbiAgZm9yICh2YXIgY3VycmVudFZlcnNpb24gPSAxOyBjdXJyZW50VmVyc2lvbiA8PSA0MDsgY3VycmVudFZlcnNpb24rKykge1xuICAgIGlmIChsZW5ndGggPD0gZXhwb3J0cy5nZXRDYXBhY2l0eShjdXJyZW50VmVyc2lvbiwgZXJyb3JDb3JyZWN0aW9uTGV2ZWwsIG1vZGUpKSB7XG4gICAgICByZXR1cm4gY3VycmVudFZlcnNpb25cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGdldFJlc2VydmVkQml0c0NvdW50IChtb2RlLCB2ZXJzaW9uKSB7XG4gIC8vIENoYXJhY3RlciBjb3VudCBpbmRpY2F0b3IgKyBtb2RlIGluZGljYXRvciBiaXRzXG4gIHJldHVybiBNb2RlLmdldENoYXJDb3VudEluZGljYXRvcihtb2RlLCB2ZXJzaW9uKSArIDRcbn1cblxuZnVuY3Rpb24gZ2V0VG90YWxCaXRzRnJvbURhdGFBcnJheSAoc2VnbWVudHMsIHZlcnNpb24pIHtcbiAgdmFyIHRvdGFsQml0cyA9IDBcblxuICBzZWdtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHJlc2VydmVkQml0cyA9IGdldFJlc2VydmVkQml0c0NvdW50KGRhdGEubW9kZSwgdmVyc2lvbilcbiAgICB0b3RhbEJpdHMgKz0gcmVzZXJ2ZWRCaXRzICsgZGF0YS5nZXRCaXRzTGVuZ3RoKClcbiAgfSlcblxuICByZXR1cm4gdG90YWxCaXRzXG59XG5cbmZ1bmN0aW9uIGdldEJlc3RWZXJzaW9uRm9yTWl4ZWREYXRhIChzZWdtZW50cywgZXJyb3JDb3JyZWN0aW9uTGV2ZWwpIHtcbiAgZm9yICh2YXIgY3VycmVudFZlcnNpb24gPSAxOyBjdXJyZW50VmVyc2lvbiA8PSA0MDsgY3VycmVudFZlcnNpb24rKykge1xuICAgIHZhciBsZW5ndGggPSBnZXRUb3RhbEJpdHNGcm9tRGF0YUFycmF5KHNlZ21lbnRzLCBjdXJyZW50VmVyc2lvbilcbiAgICBpZiAobGVuZ3RoIDw9IGV4cG9ydHMuZ2V0Q2FwYWNpdHkoY3VycmVudFZlcnNpb24sIGVycm9yQ29ycmVjdGlvbkxldmVsLCBNb2RlLk1JWEVEKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRWZXJzaW9uXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJldHVybnMgdmVyc2lvbiBudW1iZXIgZnJvbSBhIHZhbHVlLlxuICogSWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgdmVyc2lvbiwgcmV0dXJucyBkZWZhdWx0VmFsdWVcbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ8U3RyaW5nfSB2YWx1ZSAgICAgICAgUVIgQ29kZSB2ZXJzaW9uXG4gKiBAcGFyYW0gIHtOdW1iZXJ9ICAgICAgICBkZWZhdWx0VmFsdWUgRmFsbGJhY2sgdmFsdWVcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgICAgICBRUiBDb2RlIHZlcnNpb24gbnVtYmVyXG4gKi9cbmV4cG9ydHMuZnJvbSA9IGZ1bmN0aW9uIGZyb20gKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKFZlcnNpb25DaGVjay5pc1ZhbGlkKHZhbHVlKSkge1xuICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApXG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFZhbHVlXG59XG5cbi8qKlxuICogUmV0dXJucyBob3cgbXVjaCBkYXRhIGNhbiBiZSBzdG9yZWQgd2l0aCB0aGUgc3BlY2lmaWVkIFFSIGNvZGUgdmVyc2lvblxuICogYW5kIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWxcbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHZlcnNpb24gICAgICAgICAgICAgIFFSIENvZGUgdmVyc2lvbiAoMS00MClcbiAqIEBwYXJhbSAge051bWJlcn0gZXJyb3JDb3JyZWN0aW9uTGV2ZWwgRXJyb3IgY29ycmVjdGlvbiBsZXZlbFxuICogQHBhcmFtICB7TW9kZX0gICBtb2RlICAgICAgICAgICAgICAgICBEYXRhIG1vZGVcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgICAgICAgUXVhbnRpdHkgb2Ygc3RvcmFibGUgZGF0YVxuICovXG5leHBvcnRzLmdldENhcGFjaXR5ID0gZnVuY3Rpb24gZ2V0Q2FwYWNpdHkgKHZlcnNpb24sIGVycm9yQ29ycmVjdGlvbkxldmVsLCBtb2RlKSB7XG4gIGlmICghVmVyc2lvbkNoZWNrLmlzVmFsaWQodmVyc2lvbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUVIgQ29kZSB2ZXJzaW9uJylcbiAgfVxuXG4gIC8vIFVzZSBCeXRlIG1vZGUgYXMgZGVmYXVsdFxuICBpZiAodHlwZW9mIG1vZGUgPT09ICd1bmRlZmluZWQnKSBtb2RlID0gTW9kZS5CWVRFXG5cbiAgLy8gVG90YWwgY29kZXdvcmRzIGZvciB0aGlzIFFSIGNvZGUgdmVyc2lvbiAoRGF0YSArIEVycm9yIGNvcnJlY3Rpb24pXG4gIHZhciB0b3RhbENvZGV3b3JkcyA9IFV0aWxzLmdldFN5bWJvbFRvdGFsQ29kZXdvcmRzKHZlcnNpb24pXG5cbiAgLy8gVG90YWwgbnVtYmVyIG9mIGVycm9yIGNvcnJlY3Rpb24gY29kZXdvcmRzXG4gIHZhciBlY1RvdGFsQ29kZXdvcmRzID0gRUNDb2RlLmdldFRvdGFsQ29kZXdvcmRzQ291bnQodmVyc2lvbiwgZXJyb3JDb3JyZWN0aW9uTGV2ZWwpXG5cbiAgLy8gVG90YWwgbnVtYmVyIG9mIGRhdGEgY29kZXdvcmRzXG4gIHZhciBkYXRhVG90YWxDb2Rld29yZHNCaXRzID0gKHRvdGFsQ29kZXdvcmRzIC0gZWNUb3RhbENvZGV3b3JkcykgKiA4XG5cbiAgaWYgKG1vZGUgPT09IE1vZGUuTUlYRUQpIHJldHVybiBkYXRhVG90YWxDb2Rld29yZHNCaXRzXG5cbiAgdmFyIHVzYWJsZUJpdHMgPSBkYXRhVG90YWxDb2Rld29yZHNCaXRzIC0gZ2V0UmVzZXJ2ZWRCaXRzQ291bnQobW9kZSwgdmVyc2lvbilcblxuICAvLyBSZXR1cm4gbWF4IG51bWJlciBvZiBzdG9yYWJsZSBjb2Rld29yZHNcbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSBNb2RlLk5VTUVSSUM6XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcigodXNhYmxlQml0cyAvIDEwKSAqIDMpXG5cbiAgICBjYXNlIE1vZGUuQUxQSEFOVU1FUklDOlxuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKHVzYWJsZUJpdHMgLyAxMSkgKiAyKVxuXG4gICAgY2FzZSBNb2RlLktBTkpJOlxuICAgICAgcmV0dXJuIE1hdGguZmxvb3IodXNhYmxlQml0cyAvIDEzKVxuXG4gICAgY2FzZSBNb2RlLkJZVEU6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHVzYWJsZUJpdHMgLyA4KVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWluaW11bSB2ZXJzaW9uIG5lZWRlZCB0byBjb250YWluIHRoZSBhbW91bnQgb2YgZGF0YVxuICpcbiAqIEBwYXJhbSAge1NlZ21lbnR9IGRhdGEgICAgICAgICAgICAgICAgICAgIFNlZ21lbnQgb2YgZGF0YVxuICogQHBhcmFtICB7TnVtYmVyfSBbZXJyb3JDb3JyZWN0aW9uTGV2ZWw9SF0gRXJyb3IgY29ycmVjdGlvbiBsZXZlbFxuICogQHBhcmFtICB7TW9kZX0gbW9kZSAgICAgICAgICAgICAgICAgICAgICAgRGF0YSBtb2RlXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgICAgICAgICAgICAgICAgICBRUiBDb2RlIHZlcnNpb25cbiAqL1xuZXhwb3J0cy5nZXRCZXN0VmVyc2lvbkZvckRhdGEgPSBmdW5jdGlvbiBnZXRCZXN0VmVyc2lvbkZvckRhdGEgKGRhdGEsIGVycm9yQ29ycmVjdGlvbkxldmVsKSB7XG4gIHZhciBzZWdcblxuICB2YXIgZWNsID0gRUNMZXZlbC5mcm9tKGVycm9yQ29ycmVjdGlvbkxldmVsLCBFQ0xldmVsLk0pXG5cbiAgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gZ2V0QmVzdFZlcnNpb25Gb3JNaXhlZERhdGEoZGF0YSwgZWNsKVxuICAgIH1cblxuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBzZWcgPSBkYXRhWzBdXG4gIH0gZWxzZSB7XG4gICAgc2VnID0gZGF0YVxuICB9XG5cbiAgcmV0dXJuIGdldEJlc3RWZXJzaW9uRm9yRGF0YUxlbmd0aChzZWcubW9kZSwgc2VnLmdldExlbmd0aCgpLCBlY2wpXG59XG5cbi8qKlxuICogUmV0dXJucyB2ZXJzaW9uIGluZm9ybWF0aW9uIHdpdGggcmVsYXRpdmUgZXJyb3IgY29ycmVjdGlvbiBiaXRzXG4gKlxuICogVGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gUVIgQ29kZSBzeW1ib2xzIG9mIHZlcnNpb24gNyBvciBsYXJnZXIuXG4gKiBJdCBjb25zaXN0cyBvZiBhbiAxOC1iaXQgc2VxdWVuY2UgY29udGFpbmluZyA2IGRhdGEgYml0cyxcbiAqIHdpdGggMTIgZXJyb3IgY29ycmVjdGlvbiBiaXRzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlICgxOCwgNikgR29sYXkgY29kZS5cbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9IHZlcnNpb24gUVIgQ29kZSB2ZXJzaW9uXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgRW5jb2RlZCB2ZXJzaW9uIGluZm8gYml0c1xuICovXG5leHBvcnRzLmdldEVuY29kZWRCaXRzID0gZnVuY3Rpb24gZ2V0RW5jb2RlZEJpdHMgKHZlcnNpb24pIHtcbiAgaWYgKCFWZXJzaW9uQ2hlY2suaXNWYWxpZCh2ZXJzaW9uKSB8fCB2ZXJzaW9uIDwgNykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBRUiBDb2RlIHZlcnNpb24nKVxuICB9XG5cbiAgdmFyIGQgPSB2ZXJzaW9uIDw8IDEyXG5cbiAgd2hpbGUgKFV0aWxzLmdldEJDSERpZ2l0KGQpIC0gRzE4X0JDSCA+PSAwKSB7XG4gICAgZCBePSAoRzE4IDw8IChVdGlscy5nZXRCQ0hEaWdpdChkKSAtIEcxOF9CQ0gpKVxuICB9XG5cbiAgcmV0dXJuICh2ZXJzaW9uIDw8IDEyKSB8IGRcbn1cbiIsIlxudmFyIGNhblByb21pc2UgPSByZXF1aXJlKCcuL2Nhbi1wcm9taXNlJylcblxudmFyIFFSQ29kZSA9IHJlcXVpcmUoJy4vY29yZS9xcmNvZGUnKVxudmFyIENhbnZhc1JlbmRlcmVyID0gcmVxdWlyZSgnLi9yZW5kZXJlci9jYW52YXMnKVxudmFyIFN2Z1JlbmRlcmVyID0gcmVxdWlyZSgnLi9yZW5kZXJlci9zdmctdGFnLmpzJylcblxuZnVuY3Rpb24gcmVuZGVyQ2FudmFzIChyZW5kZXJGdW5jLCBjYW52YXMsIHRleHQsIG9wdHMsIGNiKSB7XG4gIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpXG4gIHZhciBhcmdzTnVtID0gYXJncy5sZW5ndGhcbiAgdmFyIGlzTGFzdEFyZ0NiID0gdHlwZW9mIGFyZ3NbYXJnc051bSAtIDFdID09PSAnZnVuY3Rpb24nXG5cbiAgaWYgKCFpc0xhc3RBcmdDYiAmJiAhY2FuUHJvbWlzZSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsYmFjayByZXF1aXJlZCBhcyBsYXN0IGFyZ3VtZW50JylcbiAgfVxuXG4gIGlmIChpc0xhc3RBcmdDYikge1xuICAgIGlmIChhcmdzTnVtIDwgMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb28gZmV3IGFyZ3VtZW50cyBwcm92aWRlZCcpXG4gICAgfVxuXG4gICAgaWYgKGFyZ3NOdW0gPT09IDIpIHtcbiAgICAgIGNiID0gdGV4dFxuICAgICAgdGV4dCA9IGNhbnZhc1xuICAgICAgY2FudmFzID0gb3B0cyA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoYXJnc051bSA9PT0gMykge1xuICAgICAgaWYgKGNhbnZhcy5nZXRDb250ZXh0ICYmIHR5cGVvZiBjYiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY2IgPSBvcHRzXG4gICAgICAgIG9wdHMgPSB1bmRlZmluZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNiID0gb3B0c1xuICAgICAgICBvcHRzID0gdGV4dFxuICAgICAgICB0ZXh0ID0gY2FudmFzXG4gICAgICAgIGNhbnZhcyA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYXJnc051bSA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVG9vIGZldyBhcmd1bWVudHMgcHJvdmlkZWQnKVxuICAgIH1cblxuICAgIGlmIChhcmdzTnVtID09PSAxKSB7XG4gICAgICB0ZXh0ID0gY2FudmFzXG4gICAgICBjYW52YXMgPSBvcHRzID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChhcmdzTnVtID09PSAyICYmICFjYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgb3B0cyA9IHRleHRcbiAgICAgIHRleHQgPSBjYW52YXNcbiAgICAgIGNhbnZhcyA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZGF0YSA9IFFSQ29kZS5jcmVhdGUodGV4dCwgb3B0cylcbiAgICAgICAgcmVzb2x2ZShyZW5kZXJGdW5jKGRhdGEsIGNhbnZhcywgb3B0cykpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHZhciBkYXRhID0gUVJDb2RlLmNyZWF0ZSh0ZXh0LCBvcHRzKVxuICAgIGNiKG51bGwsIHJlbmRlckZ1bmMoZGF0YSwgY2FudmFzLCBvcHRzKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNiKGUpXG4gIH1cbn1cblxuZXhwb3J0cy5jcmVhdGUgPSBRUkNvZGUuY3JlYXRlXG5leHBvcnRzLnRvQ2FudmFzID0gcmVuZGVyQ2FudmFzLmJpbmQobnVsbCwgQ2FudmFzUmVuZGVyZXIucmVuZGVyKVxuZXhwb3J0cy50b0RhdGFVUkwgPSByZW5kZXJDYW52YXMuYmluZChudWxsLCBDYW52YXNSZW5kZXJlci5yZW5kZXJUb0RhdGFVUkwpXG5cbi8vIG9ubHkgc3ZnIGZvciBub3cuXG5leHBvcnRzLnRvU3RyaW5nID0gcmVuZGVyQ2FudmFzLmJpbmQobnVsbCwgZnVuY3Rpb24gKGRhdGEsIF8sIG9wdHMpIHtcbiAgcmV0dXJuIFN2Z1JlbmRlcmVyLnJlbmRlcihkYXRhLCBvcHRzKVxufSlcbiIsInZhciBVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5mdW5jdGlvbiBjbGVhckNhbnZhcyAoY3R4LCBjYW52YXMsIHNpemUpIHtcbiAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpXG5cbiAgaWYgKCFjYW52YXMuc3R5bGUpIGNhbnZhcy5zdHlsZSA9IHt9XG4gIGNhbnZhcy5oZWlnaHQgPSBzaXplXG4gIGNhbnZhcy53aWR0aCA9IHNpemVcbiAgY2FudmFzLnN0eWxlLmhlaWdodCA9IHNpemUgKyAncHgnXG4gIGNhbnZhcy5zdHlsZS53aWR0aCA9IHNpemUgKyAncHgnXG59XG5cbmZ1bmN0aW9uIGdldENhbnZhc0VsZW1lbnQgKCkge1xuICB0cnkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBzcGVjaWZ5IGEgY2FudmFzIGVsZW1lbnQnKVxuICB9XG59XG5cbmV4cG9ydHMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyIChxckRhdGEsIGNhbnZhcywgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IG9wdGlvbnNcbiAgdmFyIGNhbnZhc0VsID0gY2FudmFzXG5cbiAgaWYgKHR5cGVvZiBvcHRzID09PSAndW5kZWZpbmVkJyAmJiAoIWNhbnZhcyB8fCAhY2FudmFzLmdldENvbnRleHQpKSB7XG4gICAgb3B0cyA9IGNhbnZhc1xuICAgIGNhbnZhcyA9IHVuZGVmaW5lZFxuICB9XG5cbiAgaWYgKCFjYW52YXMpIHtcbiAgICBjYW52YXNFbCA9IGdldENhbnZhc0VsZW1lbnQoKVxuICB9XG5cbiAgb3B0cyA9IFV0aWxzLmdldE9wdGlvbnMob3B0cylcbiAgdmFyIHNpemUgPSBVdGlscy5nZXRJbWFnZVdpZHRoKHFyRGF0YS5tb2R1bGVzLnNpemUsIG9wdHMpXG5cbiAgdmFyIGN0eCA9IGNhbnZhc0VsLmdldENvbnRleHQoJzJkJylcbiAgdmFyIGltYWdlID0gY3R4LmNyZWF0ZUltYWdlRGF0YShzaXplLCBzaXplKVxuICBVdGlscy5xclRvSW1hZ2VEYXRhKGltYWdlLmRhdGEsIHFyRGF0YSwgb3B0cylcblxuICBjbGVhckNhbnZhcyhjdHgsIGNhbnZhc0VsLCBzaXplKVxuICBjdHgucHV0SW1hZ2VEYXRhKGltYWdlLCAwLCAwKVxuXG4gIHJldHVybiBjYW52YXNFbFxufVxuXG5leHBvcnRzLnJlbmRlclRvRGF0YVVSTCA9IGZ1bmN0aW9uIHJlbmRlclRvRGF0YVVSTCAocXJEYXRhLCBjYW52YXMsIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSBvcHRpb25zXG5cbiAgaWYgKHR5cGVvZiBvcHRzID09PSAndW5kZWZpbmVkJyAmJiAoIWNhbnZhcyB8fCAhY2FudmFzLmdldENvbnRleHQpKSB7XG4gICAgb3B0cyA9IGNhbnZhc1xuICAgIGNhbnZhcyA9IHVuZGVmaW5lZFxuICB9XG5cbiAgaWYgKCFvcHRzKSBvcHRzID0ge31cblxuICB2YXIgY2FudmFzRWwgPSBleHBvcnRzLnJlbmRlcihxckRhdGEsIGNhbnZhcywgb3B0cylcblxuICB2YXIgdHlwZSA9IG9wdHMudHlwZSB8fCAnaW1hZ2UvcG5nJ1xuICB2YXIgcmVuZGVyZXJPcHRzID0gb3B0cy5yZW5kZXJlck9wdHMgfHwge31cblxuICByZXR1cm4gY2FudmFzRWwudG9EYXRhVVJMKHR5cGUsIHJlbmRlcmVyT3B0cy5xdWFsaXR5KVxufVxuIiwidmFyIFV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmZ1bmN0aW9uIGdldENvbG9yQXR0cmliIChjb2xvciwgYXR0cmliKSB7XG4gIHZhciBhbHBoYSA9IGNvbG9yLmEgLyAyNTVcbiAgdmFyIHN0ciA9IGF0dHJpYiArICc9XCInICsgY29sb3IuaGV4ICsgJ1wiJ1xuXG4gIHJldHVybiBhbHBoYSA8IDFcbiAgICA/IHN0ciArICcgJyArIGF0dHJpYiArICctb3BhY2l0eT1cIicgKyBhbHBoYS50b0ZpeGVkKDIpLnNsaWNlKDEpICsgJ1wiJ1xuICAgIDogc3RyXG59XG5cbmZ1bmN0aW9uIHN2Z0NtZCAoY21kLCB4LCB5KSB7XG4gIHZhciBzdHIgPSBjbWQgKyB4XG4gIGlmICh0eXBlb2YgeSAhPT0gJ3VuZGVmaW5lZCcpIHN0ciArPSAnICcgKyB5XG5cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBxclRvUGF0aCAoZGF0YSwgc2l6ZSwgbWFyZ2luKSB7XG4gIHZhciBwYXRoID0gJydcbiAgdmFyIG1vdmVCeSA9IDBcbiAgdmFyIG5ld1JvdyA9IGZhbHNlXG4gIHZhciBsaW5lTGVuZ3RoID0gMFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjb2wgPSBNYXRoLmZsb29yKGkgJSBzaXplKVxuICAgIHZhciByb3cgPSBNYXRoLmZsb29yKGkgLyBzaXplKVxuXG4gICAgaWYgKCFjb2wgJiYgIW5ld1JvdykgbmV3Um93ID0gdHJ1ZVxuXG4gICAgaWYgKGRhdGFbaV0pIHtcbiAgICAgIGxpbmVMZW5ndGgrK1xuXG4gICAgICBpZiAoIShpID4gMCAmJiBjb2wgPiAwICYmIGRhdGFbaSAtIDFdKSkge1xuICAgICAgICBwYXRoICs9IG5ld1Jvd1xuICAgICAgICAgID8gc3ZnQ21kKCdNJywgY29sICsgbWFyZ2luLCAwLjUgKyByb3cgKyBtYXJnaW4pXG4gICAgICAgICAgOiBzdmdDbWQoJ20nLCBtb3ZlQnksIDApXG5cbiAgICAgICAgbW92ZUJ5ID0gMFxuICAgICAgICBuZXdSb3cgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBpZiAoIShjb2wgKyAxIDwgc2l6ZSAmJiBkYXRhW2kgKyAxXSkpIHtcbiAgICAgICAgcGF0aCArPSBzdmdDbWQoJ2gnLCBsaW5lTGVuZ3RoKVxuICAgICAgICBsaW5lTGVuZ3RoID0gMFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtb3ZlQnkrK1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydHMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyIChxckRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gIHZhciBvcHRzID0gVXRpbHMuZ2V0T3B0aW9ucyhvcHRpb25zKVxuICB2YXIgc2l6ZSA9IHFyRGF0YS5tb2R1bGVzLnNpemVcbiAgdmFyIGRhdGEgPSBxckRhdGEubW9kdWxlcy5kYXRhXG4gIHZhciBxcmNvZGVzaXplID0gc2l6ZSArIG9wdHMubWFyZ2luICogMlxuXG4gIHZhciBiZyA9ICFvcHRzLmNvbG9yLmxpZ2h0LmFcbiAgICA/ICcnXG4gICAgOiAnPHBhdGggJyArIGdldENvbG9yQXR0cmliKG9wdHMuY29sb3IubGlnaHQsICdmaWxsJykgK1xuICAgICAgJyBkPVwiTTAgMGgnICsgcXJjb2Rlc2l6ZSArICd2JyArIHFyY29kZXNpemUgKyAnSDB6XCIvPidcblxuICB2YXIgcGF0aCA9XG4gICAgJzxwYXRoICcgKyBnZXRDb2xvckF0dHJpYihvcHRzLmNvbG9yLmRhcmssICdzdHJva2UnKSArXG4gICAgJyBkPVwiJyArIHFyVG9QYXRoKGRhdGEsIHNpemUsIG9wdHMubWFyZ2luKSArICdcIi8+J1xuXG4gIHZhciB2aWV3Qm94ID0gJ3ZpZXdCb3g9XCInICsgJzAgMCAnICsgcXJjb2Rlc2l6ZSArICcgJyArIHFyY29kZXNpemUgKyAnXCInXG5cbiAgdmFyIHdpZHRoID0gIW9wdHMud2lkdGggPyAnJyA6ICd3aWR0aD1cIicgKyBvcHRzLndpZHRoICsgJ1wiIGhlaWdodD1cIicgKyBvcHRzLndpZHRoICsgJ1wiICdcblxuICB2YXIgc3ZnVGFnID0gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiICcgKyB3aWR0aCArIHZpZXdCb3ggKyAnIHNoYXBlLXJlbmRlcmluZz1cImNyaXNwRWRnZXNcIj4nICsgYmcgKyBwYXRoICsgJzwvc3ZnPlxcbidcblxuICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IobnVsbCwgc3ZnVGFnKVxuICB9XG5cbiAgcmV0dXJuIHN2Z1RhZ1xufVxuIiwiZnVuY3Rpb24gaGV4MnJnYmEgKGhleCkge1xuICBpZiAodHlwZW9mIGhleCA9PT0gJ251bWJlcicpIHtcbiAgICBoZXggPSBoZXgudG9TdHJpbmcoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoZXggIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb2xvciBzaG91bGQgYmUgZGVmaW5lZCBhcyBoZXggc3RyaW5nJylcbiAgfVxuXG4gIHZhciBoZXhDb2RlID0gaGV4LnNsaWNlKCkucmVwbGFjZSgnIycsICcnKS5zcGxpdCgnJylcbiAgaWYgKGhleENvZGUubGVuZ3RoIDwgMyB8fCBoZXhDb2RlLmxlbmd0aCA9PT0gNSB8fCBoZXhDb2RlLmxlbmd0aCA+IDgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGV4IGNvbG9yOiAnICsgaGV4KVxuICB9XG5cbiAgLy8gQ29udmVydCBmcm9tIHNob3J0IHRvIGxvbmcgZm9ybSAoZmZmIC0+IGZmZmZmZilcbiAgaWYgKGhleENvZGUubGVuZ3RoID09PSAzIHx8IGhleENvZGUubGVuZ3RoID09PSA0KSB7XG4gICAgaGV4Q29kZSA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGhleENvZGUubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gW2MsIGNdXG4gICAgfSkpXG4gIH1cblxuICAvLyBBZGQgZGVmYXVsdCBhbHBoYSB2YWx1ZVxuICBpZiAoaGV4Q29kZS5sZW5ndGggPT09IDYpIGhleENvZGUucHVzaCgnRicsICdGJylcblxuICB2YXIgaGV4VmFsdWUgPSBwYXJzZUludChoZXhDb2RlLmpvaW4oJycpLCAxNilcblxuICByZXR1cm4ge1xuICAgIHI6IChoZXhWYWx1ZSA+PiAyNCkgJiAyNTUsXG4gICAgZzogKGhleFZhbHVlID4+IDE2KSAmIDI1NSxcbiAgICBiOiAoaGV4VmFsdWUgPj4gOCkgJiAyNTUsXG4gICAgYTogaGV4VmFsdWUgJiAyNTUsXG4gICAgaGV4OiAnIycgKyBoZXhDb2RlLnNsaWNlKDAsIDYpLmpvaW4oJycpXG4gIH1cbn1cblxuZXhwb3J0cy5nZXRPcHRpb25zID0gZnVuY3Rpb24gZ2V0T3B0aW9ucyAob3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fVxuICBpZiAoIW9wdGlvbnMuY29sb3IpIG9wdGlvbnMuY29sb3IgPSB7fVxuXG4gIHZhciBtYXJnaW4gPSB0eXBlb2Ygb3B0aW9ucy5tYXJnaW4gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgb3B0aW9ucy5tYXJnaW4gPT09IG51bGwgfHxcbiAgICBvcHRpb25zLm1hcmdpbiA8IDAgPyA0IDogb3B0aW9ucy5tYXJnaW5cblxuICB2YXIgd2lkdGggPSBvcHRpb25zLndpZHRoICYmIG9wdGlvbnMud2lkdGggPj0gMjEgPyBvcHRpb25zLndpZHRoIDogdW5kZWZpbmVkXG4gIHZhciBzY2FsZSA9IG9wdGlvbnMuc2NhbGUgfHwgNFxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIHNjYWxlOiB3aWR0aCA/IDQgOiBzY2FsZSxcbiAgICBtYXJnaW46IG1hcmdpbixcbiAgICBjb2xvcjoge1xuICAgICAgZGFyazogaGV4MnJnYmEob3B0aW9ucy5jb2xvci5kYXJrIHx8ICcjMDAwMDAwZmYnKSxcbiAgICAgIGxpZ2h0OiBoZXgycmdiYShvcHRpb25zLmNvbG9yLmxpZ2h0IHx8ICcjZmZmZmZmZmYnKVxuICAgIH0sXG4gICAgdHlwZTogb3B0aW9ucy50eXBlLFxuICAgIHJlbmRlcmVyT3B0czogb3B0aW9ucy5yZW5kZXJlck9wdHMgfHwge31cbiAgfVxufVxuXG5leHBvcnRzLmdldFNjYWxlID0gZnVuY3Rpb24gZ2V0U2NhbGUgKHFyU2l6ZSwgb3B0cykge1xuICByZXR1cm4gb3B0cy53aWR0aCAmJiBvcHRzLndpZHRoID49IHFyU2l6ZSArIG9wdHMubWFyZ2luICogMlxuICAgID8gb3B0cy53aWR0aCAvIChxclNpemUgKyBvcHRzLm1hcmdpbiAqIDIpXG4gICAgOiBvcHRzLnNjYWxlXG59XG5cbmV4cG9ydHMuZ2V0SW1hZ2VXaWR0aCA9IGZ1bmN0aW9uIGdldEltYWdlV2lkdGggKHFyU2l6ZSwgb3B0cykge1xuICB2YXIgc2NhbGUgPSBleHBvcnRzLmdldFNjYWxlKHFyU2l6ZSwgb3B0cylcbiAgcmV0dXJuIE1hdGguZmxvb3IoKHFyU2l6ZSArIG9wdHMubWFyZ2luICogMikgKiBzY2FsZSlcbn1cblxuZXhwb3J0cy5xclRvSW1hZ2VEYXRhID0gZnVuY3Rpb24gcXJUb0ltYWdlRGF0YSAoaW1nRGF0YSwgcXIsIG9wdHMpIHtcbiAgdmFyIHNpemUgPSBxci5tb2R1bGVzLnNpemVcbiAgdmFyIGRhdGEgPSBxci5tb2R1bGVzLmRhdGFcbiAgdmFyIHNjYWxlID0gZXhwb3J0cy5nZXRTY2FsZShzaXplLCBvcHRzKVxuICB2YXIgc3ltYm9sU2l6ZSA9IE1hdGguZmxvb3IoKHNpemUgKyBvcHRzLm1hcmdpbiAqIDIpICogc2NhbGUpXG4gIHZhciBzY2FsZWRNYXJnaW4gPSBvcHRzLm1hcmdpbiAqIHNjYWxlXG4gIHZhciBwYWxldHRlID0gW29wdHMuY29sb3IubGlnaHQsIG9wdHMuY29sb3IuZGFya11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbFNpemU7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ltYm9sU2l6ZTsgaisrKSB7XG4gICAgICB2YXIgcG9zRHN0ID0gKGkgKiBzeW1ib2xTaXplICsgaikgKiA0XG4gICAgICB2YXIgcHhDb2xvciA9IG9wdHMuY29sb3IubGlnaHRcblxuICAgICAgaWYgKGkgPj0gc2NhbGVkTWFyZ2luICYmIGogPj0gc2NhbGVkTWFyZ2luICYmXG4gICAgICAgIGkgPCBzeW1ib2xTaXplIC0gc2NhbGVkTWFyZ2luICYmIGogPCBzeW1ib2xTaXplIC0gc2NhbGVkTWFyZ2luKSB7XG4gICAgICAgIHZhciBpU3JjID0gTWF0aC5mbG9vcigoaSAtIHNjYWxlZE1hcmdpbikgLyBzY2FsZSlcbiAgICAgICAgdmFyIGpTcmMgPSBNYXRoLmZsb29yKChqIC0gc2NhbGVkTWFyZ2luKSAvIHNjYWxlKVxuICAgICAgICBweENvbG9yID0gcGFsZXR0ZVtkYXRhW2lTcmMgKiBzaXplICsgalNyY10gPyAxIDogMF1cbiAgICAgIH1cblxuICAgICAgaW1nRGF0YVtwb3NEc3QrK10gPSBweENvbG9yLnJcbiAgICAgIGltZ0RhdGFbcG9zRHN0KytdID0gcHhDb2xvci5nXG4gICAgICBpbWdEYXRhW3Bvc0RzdCsrXSA9IHB4Q29sb3IuYlxuICAgICAgaW1nRGF0YVtwb3NEc3RdID0gcHhDb2xvci5hXG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIGEgc3Vic2V0IG9mIG5vZGUuanMgQnVmZmVyIG1ldGhvZHMgZm9yIHRoZSBicm93c2VyLlxuICogQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXJcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbnZhciBLX01BWF9MRU5HVEggPSBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBvZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cblxuICByZXR1cm4gZnJvbSh0aGlzLCBhcmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuXG4gIC8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBpc25hbiAodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHZhbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICB2YXIgYnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBidWYgPSB0aGF0XG4gICAgaWYgKGJ1ZiA9PT0gbnVsbCkge1xuICAgICAgYnVmID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIGJ1Zi5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcblxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIGJ1ZltpXSA9IDBcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIHZhciBidWZcbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIGJ1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGJ1ZiA9IGZyb21BcnJheUxpa2UodGhhdCwgYnVmKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ1ZlxuICAgIH1cblxuICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKVxuICAgIHJldHVybiBidWZcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgb2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgaXNuYW4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCAwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBvZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhhdCwgdmFsdWUsIG9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF0pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBuZXcgQnVmZmVyKHZhbClcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKG51bGwsIDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBhbGxvY1Vuc2FmZShudWxsLCBsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxubW9kdWxlLmV4cG9ydHMuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICB2YXIgYnVmZmVyID0gbmV3IEJ1ZmZlcihzaXplKVxuICBidWZmZXIuZmlsbCgwKVxuICByZXR1cm4gYnVmZmVyXG59XG5cbm1vZHVsZS5leHBvcnRzLmZyb20gPSBmdW5jdGlvbiAoZGF0YSkge1xuICByZXR1cm4gbmV3IEJ1ZmZlcihkYXRhKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKFxuICAgICAgdWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKVxuICAgICkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBjdXN0b21JbnNwZWN0U3ltYm9sID1cbiAgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpXG4gICAgPyBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXG4gICAgOiBudWxsXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxudmFyIEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIHZhciBwcm90byA9IHsgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9IH1cbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8sIFVpbnQ4QXJyYXkucHJvdG90eXBlKVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihhcnIsIHByb3RvKVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ3BhcmVudCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5idWZmZXJcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdvZmZzZXQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnl0ZU9mZnNldFxuICB9XG59KVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBsZW5ndGggKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuICByZXR1cm4gYnVmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICE9IG51bGwgJiZcbiAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICApXG4gIH1cblxuICB2YXIgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgdmFyIGIgPSBmcm9tT2JqZWN0KHZhbHVlKVxuICBpZiAoYikgcmV0dXJuIGJcblxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvUHJpbWl0aXZlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFxuICAgICAgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aFxuICAgIClcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLCBVaW50OEFycmF5KVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIHZhciBidWZcbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0IChvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pXG5cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ1ZlxuICAgIH1cblxuICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKVxuICAgIHJldHVybiBidWZcbiAgfVxuXG4gIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IG51bWJlcklzTmFOKG9iai5sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApXG4gICAgfVxuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iailcbiAgfVxuXG4gIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmouZGF0YSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwgS19NQVhfTEVOR1RIYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiBiICE9IG51bGwgJiYgYi5faXNCdWZmZXIgPT09IHRydWUgJiZcbiAgICBiICE9PSBCdWZmZXIucHJvdG90eXBlIC8vIHNvIEJ1ZmZlci5pc0J1ZmZlcihCdWZmZXIucHJvdG90eXBlKSB3aWxsIGJlIGZhbHNlXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoaXNJbnN0YW5jZShhLCBVaW50OEFycmF5KSkgYSA9IEJ1ZmZlci5mcm9tKGEsIGEub2Zmc2V0LCBhLmJ5dGVMZW5ndGgpXG4gIGlmIChpc0luc3RhbmNlKGIsIFVpbnQ4QXJyYXkpKSBiID0gQnVmZmVyLmZyb20oYiwgYi5vZmZzZXQsIGIuYnl0ZUxlbmd0aClcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheSdcbiAgICApXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoaXNJbnN0YW5jZShidWYsIFVpbnQ4QXJyYXkpKSB7XG4gICAgICBidWYgPSBCdWZmZXIuZnJvbShidWYpXG4gICAgfVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc3RyaW5nXG4gICAgKVxuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIG11c3RNYXRjaCA9IChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gPT09IHRydWUpXG4gIGlmICghbXVzdE1hdGNoICYmIGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkge1xuICAgICAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIH1cbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgKGFuZCB0aGUgYGlzLWJ1ZmZlcmAgbnBtIHBhY2thZ2UpXG4vLyB0byBkZXRlY3QgYSBCdWZmZXIgaW5zdGFuY2UuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJgXG4vLyByZWxpYWJseSBpbiBhIGJyb3dzZXJpZnkgY29udGV4dCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudFxuLy8gY29waWVzIG9mIHRoZSAnYnVmZmVyJyBwYWNrYWdlIGluIHVzZS4gVGhpcyBtZXRob2Qgd29ya3MgZXZlbiBmb3IgQnVmZmVyXG4vLyBpbnN0YW5jZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSBhbm90aGVyIGNvcHkgb2YgdGhlIGBidWZmZXJgIHBhY2thZ2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNTRcbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICckMSAnKS50cmltKClcbiAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuaWYgKGN1c3RvbUluc3BlY3RTeW1ib2wpIHtcbiAgQnVmZmVyLnByb3RvdHlwZVtjdXN0b21JbnNwZWN0U3ltYm9sXSA9IEJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoaXNJbnN0YW5jZSh0YXJnZXQsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdGFyZ2V0ID0gQnVmZmVyLmZyb20odGFyZ2V0LCB0YXJnZXQub2Zmc2V0LCB0YXJnZXQuYnl0ZUxlbmd0aClcbiAgfVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ0YXJnZXRcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHRhcmdldClcbiAgICApXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0IC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFt2YWxdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVXNlIGJ1aWx0LWluIHdoZW4gYXZhaWxhYmxlLCBtaXNzaW5nIGZyb20gSUUxMVxuICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbiAgfSBlbHNlIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyB2YWwgK1xuICAgICAgICAnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJylcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSB0YWtlcyBlcXVhbCBzaWducyBhcyBlbmQgb2YgdGhlIEJhc2U2NCBlbmNvZGluZ1xuICBzdHIgPSBzdHIuc3BsaXQoJz0nKVswXVxuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG4vLyBDcmVhdGUgbG9va3VwIHRhYmxlIGZvciBgdG9TdHJpbmcoJ2hleCcpYFxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMjE5XG52YXIgaGV4U2xpY2VMb29rdXBUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBhbHBoYWJldCA9ICcwMTIzNDU2Nzg5YWJjZGVmJ1xuICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoMjU2KVxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICB2YXIgaTE2ID0gaSAqIDE2XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICB0YWJsZVtpMTYgKyBqXSA9IGFscGhhYmV0W2ldICsgYWxwaGFiZXRbal1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhYmxlXG59KSgpXG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENyZWF0ZWQgMjAwOC0wOC0xOS5cbiAqXG4gKiBEaWprc3RyYSBwYXRoLWZpbmRpbmcgZnVuY3Rpb25zLiBBZGFwdGVkIGZyb20gdGhlIERpamtzdGFyIFB5dGhvbiBwcm9qZWN0LlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAwOFxuICogICBXeWF0dCBCYWxkd2luIDxzZWxmQHd5YXR0YmFsZHdpbi5jb20+XG4gKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuICogVEhFIFNPRlRXQVJFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xudmFyIGRpamtzdHJhID0ge1xuICBzaW5nbGVfc291cmNlX3Nob3J0ZXN0X3BhdGhzOiBmdW5jdGlvbihncmFwaCwgcywgZCkge1xuICAgIC8vIFByZWRlY2Vzc29yIG1hcCBmb3IgZWFjaCBub2RlIHRoYXQgaGFzIGJlZW4gZW5jb3VudGVyZWQuXG4gICAgLy8gbm9kZSBJRCA9PiBwcmVkZWNlc3NvciBub2RlIElEXG4gICAgdmFyIHByZWRlY2Vzc29ycyA9IHt9O1xuXG4gICAgLy8gQ29zdHMgb2Ygc2hvcnRlc3QgcGF0aHMgZnJvbSBzIHRvIGFsbCBub2RlcyBlbmNvdW50ZXJlZC5cbiAgICAvLyBub2RlIElEID0+IGNvc3RcbiAgICB2YXIgY29zdHMgPSB7fTtcbiAgICBjb3N0c1tzXSA9IDA7XG5cbiAgICAvLyBDb3N0cyBvZiBzaG9ydGVzdCBwYXRocyBmcm9tIHMgdG8gYWxsIG5vZGVzIGVuY291bnRlcmVkOyBkaWZmZXJzIGZyb21cbiAgICAvLyBgY29zdHNgIGluIHRoYXQgaXQgcHJvdmlkZXMgZWFzeSBhY2Nlc3MgdG8gdGhlIG5vZGUgdGhhdCBjdXJyZW50bHkgaGFzXG4gICAgLy8gdGhlIGtub3duIHNob3J0ZXN0IHBhdGggZnJvbSBzLlxuICAgIC8vIFhYWDogRG8gd2UgYWN0dWFsbHkgbmVlZCBib3RoIGBjb3N0c2AgYW5kIGBvcGVuYD9cbiAgICB2YXIgb3BlbiA9IGRpamtzdHJhLlByaW9yaXR5UXVldWUubWFrZSgpO1xuICAgIG9wZW4ucHVzaChzLCAwKTtcblxuICAgIHZhciBjbG9zZXN0LFxuICAgICAgICB1LCB2LFxuICAgICAgICBjb3N0X29mX3NfdG9fdSxcbiAgICAgICAgYWRqYWNlbnRfbm9kZXMsXG4gICAgICAgIGNvc3Rfb2ZfZSxcbiAgICAgICAgY29zdF9vZl9zX3RvX3VfcGx1c19jb3N0X29mX2UsXG4gICAgICAgIGNvc3Rfb2Zfc190b192LFxuICAgICAgICBmaXJzdF92aXNpdDtcbiAgICB3aGlsZSAoIW9wZW4uZW1wdHkoKSkge1xuICAgICAgLy8gSW4gdGhlIG5vZGVzIHJlbWFpbmluZyBpbiBncmFwaCB0aGF0IGhhdmUgYSBrbm93biBjb3N0IGZyb20gcyxcbiAgICAgIC8vIGZpbmQgdGhlIG5vZGUsIHUsIHRoYXQgY3VycmVudGx5IGhhcyB0aGUgc2hvcnRlc3QgcGF0aCBmcm9tIHMuXG4gICAgICBjbG9zZXN0ID0gb3Blbi5wb3AoKTtcbiAgICAgIHUgPSBjbG9zZXN0LnZhbHVlO1xuICAgICAgY29zdF9vZl9zX3RvX3UgPSBjbG9zZXN0LmNvc3Q7XG5cbiAgICAgIC8vIEdldCBub2RlcyBhZGphY2VudCB0byB1Li4uXG4gICAgICBhZGphY2VudF9ub2RlcyA9IGdyYXBoW3VdIHx8IHt9O1xuXG4gICAgICAvLyAuLi5hbmQgZXhwbG9yZSB0aGUgZWRnZXMgdGhhdCBjb25uZWN0IHUgdG8gdGhvc2Ugbm9kZXMsIHVwZGF0aW5nXG4gICAgICAvLyB0aGUgY29zdCBvZiB0aGUgc2hvcnRlc3QgcGF0aHMgdG8gYW55IG9yIGFsbCBvZiB0aG9zZSBub2RlcyBhc1xuICAgICAgLy8gbmVjZXNzYXJ5LiB2IGlzIHRoZSBub2RlIGFjcm9zcyB0aGUgY3VycmVudCBlZGdlIGZyb20gdS5cbiAgICAgIGZvciAodiBpbiBhZGphY2VudF9ub2Rlcykge1xuICAgICAgICBpZiAoYWRqYWNlbnRfbm9kZXMuaGFzT3duUHJvcGVydHkodikpIHtcbiAgICAgICAgICAvLyBHZXQgdGhlIGNvc3Qgb2YgdGhlIGVkZ2UgcnVubmluZyBmcm9tIHUgdG8gdi5cbiAgICAgICAgICBjb3N0X29mX2UgPSBhZGphY2VudF9ub2Rlc1t2XTtcblxuICAgICAgICAgIC8vIENvc3Qgb2YgcyB0byB1IHBsdXMgdGhlIGNvc3Qgb2YgdSB0byB2IGFjcm9zcyBlLS10aGlzIGlzICphKlxuICAgICAgICAgIC8vIGNvc3QgZnJvbSBzIHRvIHYgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBsZXNzIHRoYW4gdGhlIGN1cnJlbnRcbiAgICAgICAgICAvLyBrbm93biBjb3N0IHRvIHYuXG4gICAgICAgICAgY29zdF9vZl9zX3RvX3VfcGx1c19jb3N0X29mX2UgPSBjb3N0X29mX3NfdG9fdSArIGNvc3Rfb2ZfZTtcblxuICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgdmlzaXRlZCB2IHlldCBPUiBpZiB0aGUgY3VycmVudCBrbm93biBjb3N0IGZyb20gcyB0b1xuICAgICAgICAgIC8vIHYgaXMgZ3JlYXRlciB0aGFuIHRoZSBuZXcgY29zdCB3ZSBqdXN0IGZvdW5kIChjb3N0IG9mIHMgdG8gdSBwbHVzXG4gICAgICAgICAgLy8gY29zdCBvZiB1IHRvIHYgYWNyb3NzIGUpLCB1cGRhdGUgdidzIGNvc3QgaW4gdGhlIGNvc3QgbGlzdCBhbmRcbiAgICAgICAgICAvLyB1cGRhdGUgdidzIHByZWRlY2Vzc29yIGluIHRoZSBwcmVkZWNlc3NvciBsaXN0IChpdCdzIG5vdyB1KS5cbiAgICAgICAgICBjb3N0X29mX3NfdG9fdiA9IGNvc3RzW3ZdO1xuICAgICAgICAgIGZpcnN0X3Zpc2l0ID0gKHR5cGVvZiBjb3N0c1t2XSA9PT0gJ3VuZGVmaW5lZCcpO1xuICAgICAgICAgIGlmIChmaXJzdF92aXNpdCB8fCBjb3N0X29mX3NfdG9fdiA+IGNvc3Rfb2Zfc190b191X3BsdXNfY29zdF9vZl9lKSB7XG4gICAgICAgICAgICBjb3N0c1t2XSA9IGNvc3Rfb2Zfc190b191X3BsdXNfY29zdF9vZl9lO1xuICAgICAgICAgICAgb3Blbi5wdXNoKHYsIGNvc3Rfb2Zfc190b191X3BsdXNfY29zdF9vZl9lKTtcbiAgICAgICAgICAgIHByZWRlY2Vzc29yc1t2XSA9IHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29zdHNbZF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgbXNnID0gWydDb3VsZCBub3QgZmluZCBhIHBhdGggZnJvbSAnLCBzLCAnIHRvICcsIGQsICcuJ10uam9pbignJyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlZGVjZXNzb3JzO1xuICB9LFxuXG4gIGV4dHJhY3Rfc2hvcnRlc3RfcGF0aF9mcm9tX3ByZWRlY2Vzc29yX2xpc3Q6IGZ1bmN0aW9uKHByZWRlY2Vzc29ycywgZCkge1xuICAgIHZhciBub2RlcyA9IFtdO1xuICAgIHZhciB1ID0gZDtcbiAgICB2YXIgcHJlZGVjZXNzb3I7XG4gICAgd2hpbGUgKHUpIHtcbiAgICAgIG5vZGVzLnB1c2godSk7XG4gICAgICBwcmVkZWNlc3NvciA9IHByZWRlY2Vzc29yc1t1XTtcbiAgICAgIHUgPSBwcmVkZWNlc3NvcnNbdV07XG4gICAgfVxuICAgIG5vZGVzLnJldmVyc2UoKTtcbiAgICByZXR1cm4gbm9kZXM7XG4gIH0sXG5cbiAgZmluZF9wYXRoOiBmdW5jdGlvbihncmFwaCwgcywgZCkge1xuICAgIHZhciBwcmVkZWNlc3NvcnMgPSBkaWprc3RyYS5zaW5nbGVfc291cmNlX3Nob3J0ZXN0X3BhdGhzKGdyYXBoLCBzLCBkKTtcbiAgICByZXR1cm4gZGlqa3N0cmEuZXh0cmFjdF9zaG9ydGVzdF9wYXRoX2Zyb21fcHJlZGVjZXNzb3JfbGlzdChcbiAgICAgIHByZWRlY2Vzc29ycywgZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEEgdmVyeSBuYWl2ZSBwcmlvcml0eSBxdWV1ZSBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIFByaW9yaXR5UXVldWU6IHtcbiAgICBtYWtlOiBmdW5jdGlvbiAob3B0cykge1xuICAgICAgdmFyIFQgPSBkaWprc3RyYS5Qcmlvcml0eVF1ZXVlLFxuICAgICAgICAgIHQgPSB7fSxcbiAgICAgICAgICBrZXk7XG4gICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgIGZvciAoa2V5IGluIFQpIHtcbiAgICAgICAgaWYgKFQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHRba2V5XSA9IFRba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdC5xdWV1ZSA9IFtdO1xuICAgICAgdC5zb3J0ZXIgPSBvcHRzLnNvcnRlciB8fCBULmRlZmF1bHRfc29ydGVyO1xuICAgICAgcmV0dXJuIHQ7XG4gICAgfSxcblxuICAgIGRlZmF1bHRfc29ydGVyOiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEuY29zdCAtIGIuY29zdDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgbmV3IGl0ZW0gdG8gdGhlIHF1ZXVlIGFuZCBlbnN1cmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZWxlbWVudFxuICAgICAqIGlzIGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWUuXG4gICAgICovXG4gICAgcHVzaDogZnVuY3Rpb24gKHZhbHVlLCBjb3N0KSB7XG4gICAgICB2YXIgaXRlbSA9IHt2YWx1ZTogdmFsdWUsIGNvc3Q6IGNvc3R9O1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGl0ZW0pO1xuICAgICAgdGhpcy5xdWV1ZS5zb3J0KHRoaXMuc29ydGVyKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLlxuICAgICAqL1xuICAgIHBvcDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMucXVldWUuc2hpZnQoKTtcbiAgICB9LFxuXG4gICAgZW1wdHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gbm9kZS5qcyBtb2R1bGUgZXhwb3J0c1xuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gZGlqa3N0cmE7XG59XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiJdfQ==
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r;r="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,r.QRCode=t()}}(function(){return function(){function t(r,e,n){function o(u,a){if(!e[u]){if(!r[u]){var f="function"==typeof require&&require;if(!a&&f)return f(u,!0);if(i)return i(u,!0);var s=new Error("Cannot find module '"+u+"'");throw s.code="MODULE_NOT_FOUND",s}var h=e[u]={exports:{}};r[u][0].call(h.exports,function(t){return o(r[u][1][t]||t)},h,h.exports,t,r,e,n)}return e[u].exports}for(var i="function"==typeof require&&require,u=0;u<n.length;u++)o(n[u]);return o}return t}()({1:[function(t,r,e){r.exports=function(){return"function"==typeof Promise&&Promise.prototype&&Promise.prototype.then}},{}],2:[function(t,r,e){var n=t("./utils").getSymbolSize;e.getRowColCoords=function(t){if(1===t)return[];for(var r=Math.floor(t/7)+2,e=n(t),o=145===e?26:2*Math.ceil((e-13)/(2*r-2)),i=[e-7],u=1;u<r-1;u++)i[u]=i[u-1]-o;return i.push(6),i.reverse()},e.getPositions=function(t){for(var r=[],n=e.getRowColCoords(t),o=n.length,i=0;i<o;i++)for(var u=0;u<o;u++)0===i&&0===u||0===i&&u===o-1||i===o-1&&0===u||r.push([n[i],n[u]]);return r}},{"./utils":21}],3:[function(t,r,e){function n(t){this.mode=o.ALPHANUMERIC,this.data=t}var o=t("./mode"),i=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];n.getBitsLength=function(t){return 11*Math.floor(t/2)+t%2*6},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(t){var r;for(r=0;r+2<=this.data.length;r+=2){var e=45*i.indexOf(this.data[r]);e+=i.indexOf(this.data[r+1]),t.put(e,11)}this.data.length%2&&t.put(i.indexOf(this.data[r]),6)},r.exports=n},{"./mode":14}],4:[function(t,r,e){function n(){this.buffer=[],this.length=0}n.prototype={get:function(t){var r=Math.floor(t/8);return 1==(this.buffer[r]>>>7-t%8&1)},put:function(t,r){for(var e=0;e<r;e++)this.putBit(1==(t>>>r-e-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){var r=Math.floor(this.length/8);this.buffer.length<=r&&this.buffer.push(0),t&&(this.buffer[r]|=128>>>this.length%8),this.length++}},r.exports=n},{}],5:[function(t,r,e){function n(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=o.alloc(t*t),this.reservedBit=o.alloc(t*t)}var o=t("../utils/buffer");n.prototype.set=function(t,r,e,n){var o=t*this.size+r;this.data[o]=e,n&&(this.reservedBit[o]=!0)},n.prototype.get=function(t,r){return this.data[t*this.size+r]},n.prototype.xor=function(t,r,e){this.data[t*this.size+r]^=e},n.prototype.isReserved=function(t,r){return this.reservedBit[t*this.size+r]},r.exports=n},{"../utils/buffer":28}],6:[function(t,r,e){function n(t){this.mode=i.BYTE,this.data=o.from(t)}var o=t("../utils/buffer"),i=t("./mode");n.getBitsLength=function(t){return 8*t},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(t){for(var r=0,e=this.data.length;r<e;r++)t.put(this.data[r],8)},r.exports=n},{"../utils/buffer":28,"./mode":14}],7:[function(t,r,e){var n=t("./error-correction-level"),o=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],i=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(t,r){switch(r){case n.L:return o[4*(t-1)+0];case n.M:return o[4*(t-1)+1];case n.Q:return o[4*(t-1)+2];case n.H:return o[4*(t-1)+3];default:return}},e.getTotalCodewordsCount=function(t,r){switch(r){case n.L:return i[4*(t-1)+0];case n.M:return i[4*(t-1)+1];case n.Q:return i[4*(t-1)+2];case n.H:return i[4*(t-1)+3];default:return}}},{"./error-correction-level":8}],8:[function(t,r,e){function n(t){if("string"!=typeof t)throw new Error("Param is not a string");switch(t.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+t)}}e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2},e.isValid=function(t){return t&&void 0!==t.bit&&t.bit>=0&&t.bit<4},e.from=function(t,r){if(e.isValid(t))return t;try{return n(t)}catch(t){return r}}},{}],9:[function(t,r,e){var n=t("./utils").getSymbolSize;e.getPositions=function(t){var r=n(t);return[[0,0],[r-7,0],[0,r-7]]}},{"./utils":21}],10:[function(t,r,e){var n=t("./utils"),o=n.getBCHDigit(1335);e.getEncodedBits=function(t,r){for(var e=t.bit<<3|r,i=e<<10;n.getBCHDigit(i)-o>=0;)i^=1335<<n.getBCHDigit(i)-o;return 21522^(e<<10|i)}},{"./utils":21}],11:[function(t,r,e){var n=t("../utils/buffer"),o=n.alloc(512),i=n.alloc(256);!function(){for(var t=1,r=0;r<255;r++)o[r]=t,i[t]=r,256&(t<<=1)&&(t^=285);for(r=255;r<512;r++)o[r]=o[r-255]}(),e.log=function(t){if(t<1)throw new Error("log("+t+")");return i[t]},e.exp=function(t){return o[t]},e.mul=function(t,r){return 0===t||0===r?0:o[i[t]+i[r]]}},{"../utils/buffer":28}],12:[function(t,r,e){function n(t){this.mode=o.KANJI,this.data=t}var o=t("./mode"),i=t("./utils");n.getBitsLength=function(t){return 13*t},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(t){var r;for(r=0;r<this.data.length;r++){var e=i.toSJIS(this.data[r]);if(e>=33088&&e<=40956)e-=33088;else{if(!(e>=57408&&e<=60351))throw new Error("Invalid SJIS character: "+this.data[r]+"\nMake sure your charset is UTF-8");e-=49472}e=192*(e>>>8&255)+(255&e),t.put(e,13)}},r.exports=n},{"./mode":14,"./utils":21}],13:[function(t,r,e){function n(t,r,n){switch(t){case e.Patterns.PATTERN000:return(r+n)%2==0;case e.Patterns.PATTERN001:return r%2==0;case e.Patterns.PATTERN010:return n%3==0;case e.Patterns.PATTERN011:return(r+n)%3==0;case e.Patterns.PATTERN100:return(Math.floor(r/2)+Math.floor(n/3))%2==0;case e.Patterns.PATTERN101:return r*n%2+r*n%3==0;case e.Patterns.PATTERN110:return(r*n%2+r*n%3)%2==0;case e.Patterns.PATTERN111:return(r*n%3+(r+n)%2)%2==0;default:throw new Error("bad maskPattern:"+t)}}e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var o={N1:3,N2:3,N3:40,N4:10};e.isValid=function(t){return null!=t&&""!==t&&!isNaN(t)&&t>=0&&t<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(t){for(var r=t.size,e=0,n=0,i=0,u=null,a=null,f=0;f<r;f++){n=i=0,u=a=null;for(var s=0;s<r;s++){var h=t.get(f,s);h===u?n++:(n>=5&&(e+=o.N1+(n-5)),u=h,n=1),h=t.get(s,f),h===a?i++:(i>=5&&(e+=o.N1+(i-5)),a=h,i=1)}n>=5&&(e+=o.N1+(n-5)),i>=5&&(e+=o.N1+(i-5))}return e},e.getPenaltyN2=function(t){for(var r=t.size,e=0,n=0;n<r-1;n++)for(var i=0;i<r-1;i++){var u=t.get(n,i)+t.get(n,i+1)+t.get(n+1,i)+t.get(n+1,i+1);4!==u&&0!==u||e++}return e*o.N2},e.getPenaltyN3=function(t){for(var r=t.size,e=0,n=0,i=0,u=0;u<r;u++){n=i=0;for(var a=0;a<r;a++)n=n<<1&2047|t.get(u,a),a>=10&&(1488===n||93===n)&&e++,i=i<<1&2047|t.get(a,u),a>=10&&(1488===i||93===i)&&e++}return e*o.N3},e.getPenaltyN4=function(t){for(var r=0,e=t.data.length,n=0;n<e;n++)r+=t.data[n];return Math.abs(Math.ceil(100*r/e/5)-10)*o.N4},e.applyMask=function(t,r){for(var e=r.size,o=0;o<e;o++)for(var i=0;i<e;i++)r.isReserved(i,o)||r.xor(i,o,n(t,i,o))},e.getBestMask=function(t,r){for(var n=Object.keys(e.Patterns).length,o=0,i=1/0,u=0;u<n;u++){r(u),e.applyMask(u,t);var a=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(u,t),a<i&&(i=a,o=u)}return o}},{}],14:[function(t,r,e){function n(t){if("string"!=typeof t)throw new Error("Param is not a string");switch(t.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+t)}}var o=t("./version-check"),i=t("./regex");e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(t,r){if(!t.ccBits)throw new Error("Invalid mode: "+t);if(!o.isValid(r))throw new Error("Invalid version: "+r);return r>=1&&r<10?t.ccBits[0]:r<27?t.ccBits[1]:t.ccBits[2]},e.getBestModeForData=function(t){return i.testNumeric(t)?e.NUMERIC:i.testAlphanumeric(t)?e.ALPHANUMERIC:i.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(t){if(t&&t.id)return t.id;throw new Error("Invalid mode")},e.isValid=function(t){return t&&t.bit&&t.ccBits},e.from=function(t,r){if(e.isValid(t))return t;try{return n(t)}catch(t){return r}}},{"./regex":19,"./version-check":22}],15:[function(t,r,e){function n(t){this.mode=o.NUMERIC,this.data=t.toString()}var o=t("./mode");n.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(t){var r,e,n;for(r=0;r+3<=this.data.length;r+=3)e=this.data.substr(r,3),n=parseInt(e,10),t.put(n,10);var o=this.data.length-r;o>0&&(e=this.data.substr(r),n=parseInt(e,10),t.put(n,3*o+1))},r.exports=n},{"./mode":14}],16:[function(t,r,e){var n=t("../utils/buffer"),o=t("./galois-field");e.mul=function(t,r){for(var e=n.alloc(t.length+r.length-1),i=0;i<t.length;i++)for(var u=0;u<r.length;u++)e[i+u]^=o.mul(t[i],r[u]);return e},e.mod=function(t,r){for(var e=n.from(t);e.length-r.length>=0;){for(var i=e[0],u=0;u<r.length;u++)e[u]^=o.mul(r[u],i);for(var a=0;a<e.length&&0===e[a];)a++;e=e.slice(a)}return e},e.generateECPolynomial=function(t){for(var r=n.from([1]),i=0;i<t;i++)r=e.mul(r,[1,o.exp(i)]);return r}},{"../utils/buffer":28,"./galois-field":11}],17:[function(t,r,e){function n(t,r){for(var e=t.size,n=w.getPositions(r),o=0;o<n.length;o++)for(var i=n[o][0],u=n[o][1],a=-1;a<=7;a++)if(!(i+a<=-1||e<=i+a))for(var f=-1;f<=7;f++)u+f<=-1||e<=u+f||(a>=0&&a<=6&&(0===f||6===f)||f>=0&&f<=6&&(0===a||6===a)||a>=2&&a<=4&&f>=2&&f<=4?t.set(i+a,u+f,!0,!0):t.set(i+a,u+f,!1,!0))}function o(t){for(var r=t.size,e=8;e<r-8;e++){var n=e%2==0;t.set(e,6,n,!0),t.set(6,e,n,!0)}}function i(t,r){for(var e=v.getPositions(r),n=0;n<e.length;n++)for(var o=e[n][0],i=e[n][1],u=-2;u<=2;u++)for(var a=-2;a<=2;a++)-2===u||2===u||-2===a||2===a||0===u&&0===a?t.set(o+u,i+a,!0,!0):t.set(o+u,i+a,!1,!0)}function u(t,r){for(var e,n,o,i=t.size,u=A.getEncodedBits(r),a=0;a<18;a++)e=Math.floor(a/3),n=a%3+i-8-3,o=1==(u>>a&1),t.set(e,n,o,!0),t.set(n,e,o,!0)}function a(t,r,e){var n,o,i=t.size,u=B.getEncodedBits(r,e);for(n=0;n<15;n++)o=1==(u>>n&1),n<6?t.set(n,8,o,!0):n<8?t.set(n+1,8,o,!0):t.set(i-15+n,8,o,!0),n<8?t.set(8,i-n-1,o,!0):n<9?t.set(8,15-n-1+1,o,!0):t.set(8,15-n-1,o,!0);t.set(i-8,8,1,!0)}function f(t,r){for(var e=t.size,n=-1,o=e-1,i=7,u=0,a=e-1;a>0;a-=2)for(6===a&&a--;;){for(var f=0;f<2;f++)if(!t.isReserved(o,a-f)){var s=!1;u<r.length&&(s=1==(r[u]>>>i&1)),t.set(o,a-f,s),i--,-1===i&&(u++,i=7)}if((o+=n)<0||e<=o){o-=n,n=-n;break}}}function s(t,r,e){var n=new d;e.forEach(function(r){n.put(r.mode.bit,4),n.put(r.getLength(),T.getCharCountIndicator(r.mode,t)),r.write(n)});var o=g.getSymbolTotalCodewords(t),i=b.getTotalCodewordsCount(t,r),u=8*(o-i);for(n.getLengthInBits()+4<=u&&n.put(0,4);n.getLengthInBits()%8!=0;)n.putBit(0);for(var a=(u-n.getLengthInBits())/8,f=0;f<a;f++)n.put(f%2?17:236,8);return h(n,t,r)}function h(t,r,e){for(var n=g.getSymbolTotalCodewords(r),o=b.getTotalCodewordsCount(r,e),i=n-o,u=b.getBlocksCount(r,e),a=n%u,f=u-a,s=Math.floor(n/u),h=Math.floor(i/u),c=h+1,p=s-h,d=new E(p),y=0,v=new Array(u),w=new Array(u),m=0,A=l.from(t.buffer),B=0;B<u;B++){var T=B<f?h:c;v[B]=A.slice(y,y+T),w[B]=d.encode(v[B]),y+=T,m=Math.max(m,T)}var R,C,P=l.alloc(n),I=0;for(R=0;R<m;R++)for(C=0;C<u;C++)R<v[C].length&&(P[I++]=v[C][R]);for(R=0;R<p;R++)for(C=0;C<u;C++)P[I++]=w[C][R];return P}function c(t,r,e,h){var c;if(C(t))c=R.fromArray(t);else{if("string"!=typeof t)throw new Error("Invalid data");var l=r;if(!l){var p=R.rawSplit(t);l=A.getBestVersionForData(p,e)}c=R.fromString(t,l||40)}var d=A.getBestVersionForData(c,e);if(!d)throw new Error("The amount of data is too big to be stored in a QR Code");if(r){if(r<d)throw new Error("\nThe chosen QR Code version cannot contain this amount of data.\nMinimum version required to store current data is: "+d+".\n")}else r=d;var v=s(r,e,c),w=g.getSymbolSize(r),b=new y(w);return n(b,r),o(b),i(b,r),a(b,e,0),r>=7&&u(b,r),f(b,v),isNaN(h)&&(h=m.getBestMask(b,a.bind(null,b,e))),m.applyMask(h,b),a(b,e,h),{modules:b,version:r,errorCorrectionLevel:e,maskPattern:h,segments:c}}var l=t("../utils/buffer"),g=t("./utils"),p=t("./error-correction-level"),d=t("./bit-buffer"),y=t("./bit-matrix"),v=t("./alignment-pattern"),w=t("./finder-pattern"),m=t("./mask-pattern"),b=t("./error-correction-code"),E=t("./reed-solomon-encoder"),A=t("./version"),B=t("./format-info"),T=t("./mode"),R=t("./segments"),C=t("isarray");e.create=function(t,r){if(void 0===t||""===t)throw new Error("No input text");var e,n,o=p.M;return void 0!==r&&(o=p.from(r.errorCorrectionLevel,p.M),e=A.from(r.version),n=m.from(r.maskPattern),r.toSJISFunc&&g.setToSJISFunction(r.toSJISFunc)),c(t,e,o,n)}},{"../utils/buffer":28,"./alignment-pattern":2,"./bit-buffer":4,"./bit-matrix":5,"./error-correction-code":7,"./error-correction-level":8,"./finder-pattern":9,"./format-info":10,"./mask-pattern":13,"./mode":14,"./reed-solomon-encoder":18,"./segments":20,"./utils":21,"./version":23,isarray:33}],18:[function(t,r,e){function n(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}var o=t("../utils/buffer"),i=t("./polynomial"),u=t("buffer").Buffer;n.prototype.initialize=function(t){this.degree=t,this.genPoly=i.generateECPolynomial(this.degree)},n.prototype.encode=function(t){if(!this.genPoly)throw new Error("Encoder not initialized");var r=o.alloc(this.degree),e=u.concat([t,r],t.length+this.degree),n=i.mod(e,this.genPoly),a=this.degree-n.length;if(a>0){var f=o.alloc(this.degree);return n.copy(f,a),f}return n},r.exports=n},{"../utils/buffer":28,"./polynomial":16,buffer:30}],19:[function(t,r,e){var n="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";n=n.replace(/u/g,"\\u");var o="(?:(?![A-Z0-9 $%*+\\-./:]|"+n+")(?:.|[\r\n]))+";e.KANJI=new RegExp(n,"g"),e.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),e.BYTE=new RegExp(o,"g"),e.NUMERIC=new RegExp("[0-9]+","g"),e.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");var i=new RegExp("^"+n+"$"),u=new RegExp("^[0-9]+$"),a=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");e.testKanji=function(t){return i.test(t)},e.testNumeric=function(t){return u.test(t)},e.testAlphanumeric=function(t){return a.test(t)}},{}],20:[function(t,r,e){function n(t){return unescape(encodeURIComponent(t)).length}function o(t,r,e){for(var n,o=[];null!==(n=t.exec(e));)o.push({data:n[0],index:n.index,mode:r,length:n[0].length});return o}function i(t){var r,e,n=o(y.NUMERIC,c.NUMERIC,t),i=o(y.ALPHANUMERIC,c.ALPHANUMERIC,t);return v.isKanjiModeEnabled()?(r=o(y.BYTE,c.BYTE,t),e=o(y.KANJI,c.KANJI,t)):(r=o(y.BYTE_KANJI,c.BYTE,t),e=[]),n.concat(i,r,e).sort(function(t,r){return t.index-r.index}).map(function(t){return{data:t.data,mode:t.mode,length:t.length}})}function u(t,r){switch(r){case c.NUMERIC:return l.getBitsLength(t);case c.ALPHANUMERIC:return g.getBitsLength(t);case c.KANJI:return d.getBitsLength(t);case c.BYTE:return p.getBitsLength(t)}}function a(t){return t.reduce(function(t,r){var e=t.length-1>=0?t[t.length-1]:null;return e&&e.mode===r.mode?(t[t.length-1].data+=r.data,t):(t.push(r),t)},[])}function f(t){for(var r=[],e=0;e<t.length;e++){var o=t[e];switch(o.mode){case c.NUMERIC:r.push([o,{data:o.data,mode:c.ALPHANUMERIC,length:o.length},{data:o.data,mode:c.BYTE,length:o.length}]);break;case c.ALPHANUMERIC:r.push([o,{data:o.data,mode:c.BYTE,length:o.length}]);break;case c.KANJI:r.push([o,{data:o.data,mode:c.BYTE,length:n(o.data)}]);break;case c.BYTE:r.push([{data:o.data,mode:c.BYTE,length:n(o.data)}])}}return r}function s(t,r){for(var e={},n={start:{}},o=["start"],i=0;i<t.length;i++){for(var a=t[i],f=[],s=0;s<a.length;s++){var h=a[s],l=""+i+s;f.push(l),e[l]={node:h,lastCount:0},n[l]={};for(var g=0;g<o.length;g++){var p=o[g];e[p]&&e[p].node.mode===h.mode?(n[p][l]=u(e[p].lastCount+h.length,h.mode)-u(e[p].lastCount,h.mode),e[p].lastCount+=h.length):(e[p]&&(e[p].lastCount=h.length),n[p][l]=u(h.length,h.mode)+4+c.getCharCountIndicator(h.mode,r))}}o=f}for(g=0;g<o.length;g++)n[o[g]].end=0;return{map:n,table:e}}function h(t,r){var e,n=c.getBestModeForData(t);if((e=c.from(r,n))!==c.BYTE&&e.bit<n.bit)throw new Error('"'+t+'" cannot be encoded with mode '+c.toString(e)+".\n Suggested mode is: "+c.toString(n));switch(e!==c.KANJI||v.isKanjiModeEnabled()||(e=c.BYTE),e){case c.NUMERIC:return new l(t);case c.ALPHANUMERIC:return new g(t);case c.KANJI:return new d(t);case c.BYTE:return new p(t)}}var c=t("./mode"),l=t("./numeric-data"),g=t("./alphanumeric-data"),p=t("./byte-data"),d=t("./kanji-data"),y=t("./regex"),v=t("./utils"),w=t("dijkstrajs");e.fromArray=function(t){return t.reduce(function(t,r){return"string"==typeof r?t.push(h(r,null)):r.data&&t.push(h(r.data,r.mode)),t},[])},e.fromString=function(t,r){for(var n=i(t,v.isKanjiModeEnabled()),o=f(n),u=s(o,r),h=w.find_path(u.map,"start","end"),c=[],l=1;l<h.length-1;l++)c.push(u.table[h[l]].node);return e.fromArray(a(c))},e.rawSplit=function(t){return e.fromArray(i(t,v.isKanjiModeEnabled()))}},{"./alphanumeric-data":3,"./byte-data":6,"./kanji-data":12,"./mode":14,"./numeric-data":15,"./regex":19,"./utils":21,dijkstrajs:31}],21:[function(t,r,e){var n,o=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return 4*t+17},e.getSymbolTotalCodewords=function(t){return o[t]},e.getBCHDigit=function(t){for(var r=0;0!==t;)r++,t>>>=1;return r},e.setToSJISFunction=function(t){if("function"!=typeof t)throw new Error('"toSJISFunc" is not a valid function.');n=t},e.isKanjiModeEnabled=function(){return void 0!==n},e.toSJIS=function(t){return n(t)}},{}],22:[function(t,r,e){e.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}},{}],23:[function(t,r,e){function n(t,r,n){for(var o=1;o<=40;o++)if(r<=e.getCapacity(o,n,t))return o}function o(t,r){return h.getCharCountIndicator(t,r)+4}function i(t,r){var e=0;return t.forEach(function(t){var n=o(t.mode,r);e+=n+t.getBitsLength()}),e}function u(t,r){for(var n=1;n<=40;n++){if(i(t,n)<=e.getCapacity(n,r,h.MIXED))return n}}var a=t("./utils"),f=t("./error-correction-code"),s=t("./error-correction-level"),h=t("./mode"),c=t("./version-check"),l=t("isarray"),g=a.getBCHDigit(7973);e.from=function(t,r){return c.isValid(t)?parseInt(t,10):r},e.getCapacity=function(t,r,e){if(!c.isValid(t))throw new Error("Invalid QR Code version");void 0===e&&(e=h.BYTE);var n=a.getSymbolTotalCodewords(t),i=f.getTotalCodewordsCount(t,r),u=8*(n-i);if(e===h.MIXED)return u;var s=u-o(e,t);switch(e){case h.NUMERIC:return Math.floor(s/10*3);case h.ALPHANUMERIC:return Math.floor(s/11*2);case h.KANJI:return Math.floor(s/13);case h.BYTE:default:return Math.floor(s/8)}},e.getBestVersionForData=function(t,r){var e,o=s.from(r,s.M);if(l(t)){if(t.length>1)return u(t,o);if(0===t.length)return 1;e=t[0]}else e=t;return n(e.mode,e.getLength(),o)},e.getEncodedBits=function(t){if(!c.isValid(t)||t<7)throw new Error("Invalid QR Code version");for(var r=t<<12;a.getBCHDigit(r)-g>=0;)r^=7973<<a.getBCHDigit(r)-g;return t<<12|r}},{"./error-correction-code":7,"./error-correction-level":8,"./mode":14,"./utils":21,"./version-check":22,isarray:33}],24:[function(t,r,e){function n(t,r,e,n,u){var a=[].slice.call(arguments,1),f=a.length,s="function"==typeof a[f-1];if(!s&&!o())throw new Error("Callback required as last argument");if(!s){if(f<1)throw new Error("Too few arguments provided");return 1===f?(e=r,r=n=void 0):2!==f||r.getContext||(n=e,e=r,r=void 0),new Promise(function(o,u){try{var a=i.create(e,n);o(t(a,r,n))}catch(t){u(t)}})}if(f<2)throw new Error("Too few arguments provided");2===f?(u=e,e=r,r=n=void 0):3===f&&(r.getContext&&void 0===u?(u=n,n=void 0):(u=n,n=e,e=r,r=void 0));try{var h=i.create(e,n);u(null,t(h,r,n))}catch(t){u(t)}}var o=t("./can-promise"),i=t("./core/qrcode"),u=t("./renderer/canvas"),a=t("./renderer/svg-tag.js");e.create=i.create,e.toCanvas=n.bind(null,u.render),e.toDataURL=n.bind(null,u.renderToDataURL),e.toString=n.bind(null,function(t,r,e){return a.render(t,e)})},{"./can-promise":1,"./core/qrcode":17,"./renderer/canvas":25,"./renderer/svg-tag.js":26}],25:[function(t,r,e){function n(t,r,e){t.clearRect(0,0,r.width,r.height),r.style||(r.style={}),r.height=e,r.width=e,r.style.height=e+"px",r.style.width=e+"px"}function o(){try{return document.createElement("canvas")}catch(t){throw new Error("You need to specify a canvas element")}}var i=t("./utils");e.render=function(t,r,e){var u=e,a=r;void 0!==u||r&&r.getContext||(u=r,r=void 0),r||(a=o()),u=i.getOptions(u);var f=i.getImageWidth(t.modules.size,u),s=a.getContext("2d"),h=s.createImageData(f,f);return i.qrToImageData(h.data,t,u),n(s,a,f),s.putImageData(h,0,0),a},e.renderToDataURL=function(t,r,n){var o=n;void 0!==o||r&&r.getContext||(o=r,r=void 0),o||(o={});var i=e.render(t,r,o),u=o.type||"image/png",a=o.rendererOpts||{};return i.toDataURL(u,a.quality)}},{"./utils":27}],26:[function(t,r,e){function n(t,r){var e=t.a/255,n=r+'="'+t.hex+'"';return e<1?n+" "+r+'-opacity="'+e.toFixed(2).slice(1)+'"':n}function o(t,r,e){var n=t+r;return void 0!==e&&(n+=" "+e),n}function i(t,r,e){for(var n="",i=0,u=!1,a=0,f=0;f<t.length;f++){var s=Math.floor(f%r),h=Math.floor(f/r);s||u||(u=!0),t[f]?(a++,f>0&&s>0&&t[f-1]||(n+=u?o("M",s+e,.5+h+e):o("m",i,0),i=0,u=!1),s+1<r&&t[f+1]||(n+=o("h",a),a=0)):i++}return n}var u=t("./utils");e.render=function(t,r,e){var o=u.getOptions(r),a=t.modules.size,f=t.modules.data,s=a+2*o.margin,h=o.color.light.a?"<path "+n(o.color.light,"fill")+' d="M0 0h'+s+"v"+s+'H0z"/>':"",c="<path "+n(o.color.dark,"stroke")+' d="'+i(f,a,o.margin)+'"/>',l='viewBox="0 0 '+s+" "+s+'"',g=o.width?'width="'+o.width+'" height="'+o.width+'" ':"",p='<svg xmlns="http://www.w3.org/2000/svg" '+g+l+' shape-rendering="crispEdges">'+h+c+"</svg>\n";return"function"==typeof e&&e(null,p),p}},{"./utils":27}],27:[function(t,r,e){function n(t){if("number"==typeof t&&(t=t.toString()),"string"!=typeof t)throw new Error("Color should be defined as hex string");var r=t.slice().replace("#","").split("");if(r.length<3||5===r.length||r.length>8)throw new Error("Invalid hex color: "+t);3!==r.length&&4!==r.length||(r=Array.prototype.concat.apply([],r.map(function(t){return[t,t]}))),6===r.length&&r.push("F","F");var e=parseInt(r.join(""),16);return{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:255&e,hex:"#"+r.slice(0,6).join("")}}e.getOptions=function(t){t||(t={}),t.color||(t.color={});var r=void 0===t.margin||null===t.margin||t.margin<0?4:t.margin,e=t.width&&t.width>=21?t.width:void 0,o=t.scale||4;return{width:e,scale:e?4:o,margin:r,color:{dark:n(t.color.dark||"#000000ff"),light:n(t.color.light||"#ffffffff")},type:t.type,rendererOpts:t.rendererOpts||{}}},e.getScale=function(t,r){return r.width&&r.width>=t+2*r.margin?r.width/(t+2*r.margin):r.scale},e.getImageWidth=function(t,r){var n=e.getScale(t,r);return Math.floor((t+2*r.margin)*n)},e.qrToImageData=function(t,r,n){for(var o=r.modules.size,i=r.modules.data,u=e.getScale(o,n),a=Math.floor((o+2*n.margin)*u),f=n.margin*u,s=[n.color.light,n.color.dark],h=0;h<a;h++)for(var c=0;c<a;c++){var l=4*(h*a+c),g=n.color.light;if(h>=f&&c>=f&&h<a-f&&c<a-f){var p=Math.floor((h-f)/u),d=Math.floor((c-f)/u);g=s[i[p*o+d]?1:0]}t[l++]=g.r,t[l++]=g.g,t[l++]=g.b,t[l]=g.a}}},{}],28:[function(t,r,e){"use strict";function n(t,r,e){return n.TYPED_ARRAY_SUPPORT||this instanceof n?"number"==typeof t?a(this,t):y(this,t,r,e):new n(t,r,e)}function o(t){if(t>=w)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+w.toString(16)+" bytes");return 0|t}function i(t){return t!==t}function u(t,r){var e;return n.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(r),e.__proto__=n.prototype):(e=t,null===e&&(e=new n(r)),e.length=r),e}function a(t,r){var e=u(t,r<0?0:0|o(r));if(!n.TYPED_ARRAY_SUPPORT)for(var i=0;i<r;++i)e[i]=0;return e}function f(t,r){var e=0|g(r),n=u(t,e),o=n.write(r);return o!==e&&(n=n.slice(0,o)),n}function s(t,r){for(var e=r.length<0?0:0|o(r.length),n=u(t,e),i=0;i<e;i+=1)n[i]=255&r[i];return n}function h(t,r,e,o){if(e<0||r.byteLength<e)throw new RangeError("'offset' is out of bounds");if(r.byteLength<e+(o||0))throw new RangeError("'length' is out of bounds");var i;return i=void 0===e&&void 0===o?new Uint8Array(r):void 0===o?new Uint8Array(r,e):new Uint8Array(r,e,o),n.TYPED_ARRAY_SUPPORT?i.__proto__=n.prototype:i=s(t,i),i}function c(t,r){if(n.isBuffer(r)){var e=0|o(r.length),a=u(t,e);return 0===a.length?a:(r.copy(a,0,0,e),a)}if(r){if("undefined"!=typeof ArrayBuffer&&r.buffer instanceof ArrayBuffer||"length"in r)return"number"!=typeof r.length||i(r.length)?u(t,0):s(t,r);if("Buffer"===r.type&&Array.isArray(r.data))return s(t,r.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function l(t,r){r=r||1/0;for(var e,n=t.length,o=null,i=[],u=0;u<n;++u){if((e=t.charCodeAt(u))>55295&&e<57344){if(!o){if(e>56319){(r-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(r-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(r-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((r-=1)<0)break;i.push(e)}else if(e<2048){if((r-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function g(t){return n.isBuffer(t)?t.length:"undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer)?t.byteLength:("string"!=typeof t&&(t=""+t),0===t.length?0:l(t).length)}function p(t,r,e,n){for(var o=0;o<n&&!(o+e>=r.length||o>=t.length);++o)r[o+e]=t[o];return o}function d(t,r,e,n){return p(l(r,t.length-e),t,e,n)}function y(t,r,e,n){if("number"==typeof r)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&r instanceof ArrayBuffer?h(t,r,e,n):"string"==typeof r?f(t,r,e):c(t,r)}var v=t("isarray");n.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}();var w=n.TYPED_ARRAY_SUPPORT?2147483647:1073741823;n.TYPED_ARRAY_SUPPORT&&(n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&n[Symbol.species]===n&&Object.defineProperty(n,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1})),n.prototype.write=function(t,r,e){void 0===r?(e=this.length,r=0):void 0===e&&"string"==typeof r?(e=this.length,r=0):isFinite(r)&&(r|=0,isFinite(e)?e|=0:e=void 0);var n=this.length-r;if((void 0===e||e>n)&&(e=n),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");return d(this,t,r,e)},n.prototype.slice=function(t,r){var e=this.length;t=~~t,r=void 0===r?e:~~r,t<0?(t+=e)<0&&(t=0):t>e&&(t=e),r<0?(r+=e)<0&&(r=0):r>e&&(r=e),r<t&&(r=t);var o;if(n.TYPED_ARRAY_SUPPORT)o=this.subarray(t,r),o.__proto__=n.prototype;else{var i=r-t;o=new n(i,void 0);for(var u=0;u<i;++u)o[u]=this[u+t]}return o},n.prototype.copy=function(t,r,e,o){if(e||(e=0),o||0===o||(o=this.length),r>=t.length&&(r=t.length),r||(r=0),o>0&&o<e&&(o=e),o===e)return 0;if(0===t.length||0===this.length)return 0;if(r<0)throw new RangeError("targetStart out of bounds");if(e<0||e>=this.length)throw new RangeError("sourceStart out of bounds");if(o<0)throw new RangeError("sourceEnd out of bounds");o>this.length&&(o=this.length),t.length-r<o-e&&(o=t.length-r+e);var i,u=o-e;if(this===t&&e<r&&r<o)for(i=u-1;i>=0;--i)t[i+r]=this[i+e];else if(u<1e3||!n.TYPED_ARRAY_SUPPORT)for(i=0;i<u;++i)t[i+r]=this[i+e];else Uint8Array.prototype.set.call(t,this.subarray(e,e+u),r);return u},n.prototype.fill=function(t,r,e){if("string"==typeof t){if("string"==typeof r?(r=0,e=this.length):"string"==typeof e&&(e=this.length),1===t.length){var o=t.charCodeAt(0);o<256&&(t=o)}}else"number"==typeof t&&(t&=255);if(r<0||this.length<r||this.length<e)throw new RangeError("Out of range index");if(e<=r)return this;r>>>=0,e=void 0===e?this.length:e>>>0,t||(t=0);var i;if("number"==typeof t)for(i=r;i<e;++i)this[i]=t;else{var u=n.isBuffer(t)?t:new n(t),a=u.length;for(i=0;i<e-r;++i)this[i+r]=u[i%a]}return this},n.concat=function(t,r){if(!v(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return u(null,0);var e;if(void 0===r)for(r=0,e=0;e<t.length;++e)r+=t[e].length;var o=a(null,r),i=0;for(e=0;e<t.length;++e){var f=t[e];if(!n.isBuffer(f))throw new TypeError('"list" argument must be an Array of Buffers');f.copy(o,i),i+=f.length}return o},n.byteLength=g,n.prototype._isBuffer=!0,n.isBuffer=function(t){return!(null==t||!t._isBuffer)},r.exports.alloc=function(t){var r=new n(t);return r.fill(0),r},r.exports.from=function(t){return new n(t)}},{isarray:33}],29:[function(t,r,e){"use strict";function n(t){var r=t.length;if(r%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var e=t.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function o(t){var r=n(t),e=r[0],o=r[1];return 3*(e+o)/4-o}function i(t,r,e){return 3*(r+e)/4-e}function u(t){var r,e,o=n(t),u=o[0],a=o[1],f=new l(i(t,u,a)),s=0,h=a>0?u-4:u;for(e=0;e<h;e+=4)r=c[t.charCodeAt(e)]<<18|c[t.charCodeAt(e+1)]<<12|c[t.charCodeAt(e+2)]<<6|c[t.charCodeAt(e+3)],f[s++]=r>>16&255,f[s++]=r>>8&255,f[s++]=255&r;return 2===a&&(r=c[t.charCodeAt(e)]<<2|c[t.charCodeAt(e+1)]>>4,f[s++]=255&r),1===a&&(r=c[t.charCodeAt(e)]<<10|c[t.charCodeAt(e+1)]<<4|c[t.charCodeAt(e+2)]>>2,f[s++]=r>>8&255,f[s++]=255&r),f}function a(t){return h[t>>18&63]+h[t>>12&63]+h[t>>6&63]+h[63&t]}function f(t,r,e){for(var n,o=[],i=r;i<e;i+=3)n=(t[i]<<16&16711680)+(t[i+1]<<8&65280)+(255&t[i+2]),o.push(a(n));return o.join("")}function s(t){for(var r,e=t.length,n=e%3,o=[],i=0,u=e-n;i<u;i+=16383)o.push(f(t,i,i+16383>u?u:i+16383));return 1===n?(r=t[e-1],o.push(h[r>>2]+h[r<<4&63]+"==")):2===n&&(r=(t[e-2]<<8)+t[e-1],o.push(h[r>>10]+h[r>>4&63]+h[r<<2&63]+"=")),o.join("")}e.byteLength=o,e.toByteArray=u,e.fromByteArray=s
;for(var h=[],c=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,d=g.length;p<d;++p)h[p]=g[p],c[g.charCodeAt(p)]=p;c["-".charCodeAt(0)]=62,c["_".charCodeAt(0)]=63},{}],30:[function(t,r,e){"use strict";function n(t){if(t>$)throw new RangeError('The value "'+t+'" is invalid for option "size"');var r=new Uint8Array(t);return Object.setPrototypeOf(r,o.prototype),r}function o(t,r,e){if("number"==typeof t){if("string"==typeof r)throw new TypeError('The "string" argument must be of type string. Received type number');return f(t)}return i(t,r,e)}function i(t,r,e){if("string"==typeof t)return s(t,r);if(ArrayBuffer.isView(t))return h(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(J(t,ArrayBuffer)||t&&J(t.buffer,ArrayBuffer))return c(t,r,e);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return o.from(n,r,e);var i=l(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return o.from(t[Symbol.toPrimitive]("string"),r,e);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function u(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function a(t,r,e){return u(t),t<=0?n(t):void 0!==r?"string"==typeof e?n(t).fill(r,e):n(t).fill(r):n(t)}function f(t){return u(t),n(t<0?0:0|g(t))}function s(t,r){if("string"==typeof r&&""!==r||(r="utf8"),!o.isEncoding(r))throw new TypeError("Unknown encoding: "+r);var e=0|d(t,r),i=n(e),u=i.write(t,r);return u!==e&&(i=i.slice(0,u)),i}function h(t){for(var r=t.length<0?0:0|g(t.length),e=n(r),o=0;o<r;o+=1)e[o]=255&t[o];return e}function c(t,r,e){if(r<0||t.byteLength<r)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<r+(e||0))throw new RangeError('"length" is outside of buffer bounds');var n;return n=void 0===r&&void 0===e?new Uint8Array(t):void 0===e?new Uint8Array(t,r):new Uint8Array(t,r,e),Object.setPrototypeOf(n,o.prototype),n}function l(t){if(o.isBuffer(t)){var r=0|g(t.length),e=n(r);return 0===e.length?e:(t.copy(e,0,0,r),e)}return void 0!==t.length?"number"!=typeof t.length||K(t.length)?n(0):h(t):"Buffer"===t.type&&Array.isArray(t.data)?h(t.data):void 0}function g(t){if(t>=$)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+$.toString(16)+" bytes");return 0|t}function p(t){return+t!=t&&(t=0),o.alloc(+t)}function d(t,r){if(o.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||J(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var e=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===e)return 0;for(var i=!1;;)switch(r){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":return D(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return z(t).length;default:if(i)return n?-1:D(t).length;r=(""+r).toLowerCase(),i=!0}}function y(t,r,e){var n=!1;if((void 0===r||r<0)&&(r=0),r>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if(e>>>=0,r>>>=0,e<=r)return"";for(t||(t="utf8");;)switch(t){case"hex":return N(this,r,e);case"utf8":case"utf-8":return P(this,r,e);case"ascii":return M(this,r,e);case"latin1":case"binary":return U(this,r,e);case"base64":return C(this,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,r,e);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function v(t,r,e){var n=t[r];t[r]=t[e],t[e]=n}function w(t,r,e,n,i){if(0===t.length)return-1;if("string"==typeof e?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,K(e)&&(e=i?0:t.length-1),e<0&&(e=t.length+e),e>=t.length){if(i)return-1;e=t.length-1}else if(e<0){if(!i)return-1;e=0}if("string"==typeof r&&(r=o.from(r,n)),o.isBuffer(r))return 0===r.length?-1:m(t,r,e,n,i);if("number"==typeof r)return r&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,r,e):Uint8Array.prototype.lastIndexOf.call(t,r,e):m(t,[r],e,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,r,e,n,o){function i(t,r){return 1===u?t[r]:t.readUInt16BE(r*u)}var u=1,a=t.length,f=r.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||r.length<2)return-1;u=2,a/=2,f/=2,e/=2}var s;if(o){var h=-1;for(s=e;s<a;s++)if(i(t,s)===i(r,-1===h?0:s-h)){if(-1===h&&(h=s),s-h+1===f)return h*u}else-1!==h&&(s-=s-h),h=-1}else for(e+f>a&&(e=a-f),s=e;s>=0;s--){for(var c=!0,l=0;l<f;l++)if(i(t,s+l)!==i(r,l)){c=!1;break}if(c)return s}return-1}function b(t,r,e,n){e=Number(e)||0;var o=t.length-e;n?(n=Number(n))>o&&(n=o):n=o;var i=r.length;n>i/2&&(n=i/2);for(var u=0;u<n;++u){var a=parseInt(r.substr(2*u,2),16);if(K(a))return u;t[e+u]=a}return u}function E(t,r,e,n){return H(D(r,t.length-e),t,e,n)}function A(t,r,e,n){return H(j(r),t,e,n)}function B(t,r,e,n){return A(t,r,e,n)}function T(t,r,e,n){return H(z(r),t,e,n)}function R(t,r,e,n){return H(F(r,t.length-e),t,e,n)}function C(t,r,e){return 0===r&&e===t.length?q.fromByteArray(t):q.fromByteArray(t.slice(r,e))}function P(t,r,e){e=Math.min(t.length,e);for(var n=[],o=r;o<e;){var i=t[o],u=null,a=i>239?4:i>223?3:i>191?2:1;if(o+a<=e){var f,s,h,c;switch(a){case 1:i<128&&(u=i);break;case 2:f=t[o+1],128==(192&f)&&(c=(31&i)<<6|63&f)>127&&(u=c);break;case 3:f=t[o+1],s=t[o+2],128==(192&f)&&128==(192&s)&&(c=(15&i)<<12|(63&f)<<6|63&s)>2047&&(c<55296||c>57343)&&(u=c);break;case 4:f=t[o+1],s=t[o+2],h=t[o+3],128==(192&f)&&128==(192&s)&&128==(192&h)&&(c=(15&i)<<18|(63&f)<<12|(63&s)<<6|63&h)>65535&&c<1114112&&(u=c)}}null===u?(u=65533,a=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),o+=a}return I(n)}function I(t){var r=t.length;if(r<=X)return String.fromCharCode.apply(String,t);for(var e="",n=0;n<r;)e+=String.fromCharCode.apply(String,t.slice(n,n+=X));return e}function M(t,r,e){var n="";e=Math.min(t.length,e);for(var o=r;o<e;++o)n+=String.fromCharCode(127&t[o]);return n}function U(t,r,e){var n="";e=Math.min(t.length,e);for(var o=r;o<e;++o)n+=String.fromCharCode(t[o]);return n}function N(t,r,e){var n=t.length;(!r||r<0)&&(r=0),(!e||e<0||e>n)&&(e=n);for(var o="",i=r;i<e;++i)o+=W[t[i]];return o}function S(t,r,e){for(var n=t.slice(r,e),o="",i=0;i<n.length;i+=2)o+=String.fromCharCode(n[i]+256*n[i+1]);return o}function L(t,r,e){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+r>e)throw new RangeError("Trying to access beyond buffer length")}function x(t,r,e,n,i,u){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>i||r<u)throw new RangeError('"value" argument is out of bounds');if(e+n>t.length)throw new RangeError("Index out of range")}function _(t,r,e,n,o,i){if(e+n>t.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function k(t,r,e,n,o){return r=+r,e>>>=0,o||_(t,r,e,4,3.4028234663852886e38,-3.4028234663852886e38),V.write(t,r,e,n,23,4),e+4}function O(t,r,e,n,o){return r=+r,e>>>=0,o||_(t,r,e,8,1.7976931348623157e308,-1.7976931348623157e308),V.write(t,r,e,n,52,8),e+8}function Y(t){if(t=t.split("=")[0],t=t.trim().replace(Z,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t}function D(t,r){r=r||1/0;for(var e,n=t.length,o=null,i=[],u=0;u<n;++u){if((e=t.charCodeAt(u))>55295&&e<57344){if(!o){if(e>56319){(r-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(r-=3)>-1&&i.push(239,191,189);continue}o=e;continue}if(e<56320){(r-=3)>-1&&i.push(239,191,189),o=e;continue}e=65536+(o-55296<<10|e-56320)}else o&&(r-=3)>-1&&i.push(239,191,189);if(o=null,e<128){if((r-=1)<0)break;i.push(e)}else if(e<2048){if((r-=2)<0)break;i.push(e>>6|192,63&e|128)}else if(e<65536){if((r-=3)<0)break;i.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((r-=4)<0)break;i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return i}function j(t){for(var r=[],e=0;e<t.length;++e)r.push(255&t.charCodeAt(e));return r}function F(t,r){for(var e,n,o,i=[],u=0;u<t.length&&!((r-=2)<0);++u)e=t.charCodeAt(u),n=e>>8,o=e%256,i.push(o),i.push(n);return i}function z(t){return q.toByteArray(Y(t))}function H(t,r,e,n){for(var o=0;o<n&&!(o+e>=r.length||o>=t.length);++o)r[o+e]=t[o];return o}function J(t,r){return t instanceof r||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===r.name}function K(t){return t!==t}var q=t("base64-js"),V=t("ieee754"),Q="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=o,e.SlowBuffer=p,e.INSPECT_MAX_BYTES=50;var $=2147483647;e.kMaxLength=$,o.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),r={foo:function(){return 42}};return Object.setPrototypeOf(r,Uint8Array.prototype),Object.setPrototypeOf(t,r),42===t.foo()}catch(t){return!1}}(),o.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(o.prototype,"parent",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,"offset",{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),o.poolSize=8192,o.from=function(t,r,e){return i(t,r,e)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array),o.alloc=function(t,r,e){return a(t,r,e)},o.allocUnsafe=function(t){return f(t)},o.allocUnsafeSlow=function(t){return f(t)},o.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==o.prototype},o.compare=function(t,r){if(J(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),J(r,Uint8Array)&&(r=o.from(r,r.offset,r.byteLength)),!o.isBuffer(t)||!o.isBuffer(r))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===r)return 0;for(var e=t.length,n=r.length,i=0,u=Math.min(e,n);i<u;++i)if(t[i]!==r[i]){e=t[i],n=r[i];break}return e<n?-1:n<e?1:0},o.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},o.concat=function(t,r){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return o.alloc(0);var e;if(void 0===r)for(r=0,e=0;e<t.length;++e)r+=t[e].length;var n=o.allocUnsafe(r),i=0;for(e=0;e<t.length;++e){var u=t[e];if(J(u,Uint8Array)&&(u=o.from(u)),!o.isBuffer(u))throw new TypeError('"list" argument must be an Array of Buffers');u.copy(n,i),i+=u.length}return n},o.byteLength=d,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var r=0;r<t;r+=2)v(this,r,r+1);return this},o.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var r=0;r<t;r+=4)v(this,r,r+3),v(this,r+1,r+2);return this},o.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var r=0;r<t;r+=8)v(this,r,r+7),v(this,r+1,r+6),v(this,r+2,r+5),v(this,r+3,r+4);return this},o.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?P(this,0,t):y.apply(this,arguments)},o.prototype.toLocaleString=o.prototype.toString,o.prototype.equals=function(t){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===o.compare(this,t)},o.prototype.inspect=function(){var t="",r=e.INSPECT_MAX_BYTES;return t=this.toString("hex",0,r).replace(/(.{2})/g,"$1 ").trim(),this.length>r&&(t+=" ... "),"<Buffer "+t+">"},Q&&(o.prototype[Q]=o.prototype.inspect),o.prototype.compare=function(t,r,e,n,i){if(J(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),!o.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===r&&(r=0),void 0===e&&(e=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),r<0||e>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&r>=e)return 0;if(n>=i)return-1;if(r>=e)return 1;if(r>>>=0,e>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var u=i-n,a=e-r,f=Math.min(u,a),s=this.slice(n,i),h=t.slice(r,e),c=0;c<f;++c)if(s[c]!==h[c]){u=s[c],a=h[c];break}return u<a?-1:a<u?1:0},o.prototype.includes=function(t,r,e){return-1!==this.indexOf(t,r,e)},o.prototype.indexOf=function(t,r,e){return w(this,t,r,e,!0)},o.prototype.lastIndexOf=function(t,r,e){return w(this,t,r,e,!1)},o.prototype.write=function(t,r,e,n){if(void 0===r)n="utf8",e=this.length,r=0;else if(void 0===e&&"string"==typeof r)n=r,e=this.length,r=0;else{if(!isFinite(r))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");r>>>=0,isFinite(e)?(e>>>=0,void 0===n&&(n="utf8")):(n=e,e=void 0)}var o=this.length-r;if((void 0===e||e>o)&&(e=o),t.length>0&&(e<0||r<0)||r>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return b(this,t,r,e);case"utf8":case"utf-8":return E(this,t,r,e);case"ascii":return A(this,t,r,e);case"latin1":case"binary":return B(this,t,r,e);case"base64":return T(this,t,r,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,r,e);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var X=4096;o.prototype.slice=function(t,r){var e=this.length;t=~~t,r=void 0===r?e:~~r,t<0?(t+=e)<0&&(t=0):t>e&&(t=e),r<0?(r+=e)<0&&(r=0):r>e&&(r=e),r<t&&(r=t);var n=this.subarray(t,r);return Object.setPrototypeOf(n,o.prototype),n},o.prototype.readUIntLE=function(t,r,e){t>>>=0,r>>>=0,e||L(t,r,this.length);for(var n=this[t],o=1,i=0;++i<r&&(o*=256);)n+=this[t+i]*o;return n},o.prototype.readUIntBE=function(t,r,e){t>>>=0,r>>>=0,e||L(t,r,this.length);for(var n=this[t+--r],o=1;r>0&&(o*=256);)n+=this[t+--r]*o;return n},o.prototype.readUInt8=function(t,r){return t>>>=0,r||L(t,1,this.length),this[t]},o.prototype.readUInt16LE=function(t,r){return t>>>=0,r||L(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUInt16BE=function(t,r){return t>>>=0,r||L(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUInt32LE=function(t,r){return t>>>=0,r||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUInt32BE=function(t,r){return t>>>=0,r||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readIntLE=function(t,r,e){t>>>=0,r>>>=0,e||L(t,r,this.length);for(var n=this[t],o=1,i=0;++i<r&&(o*=256);)n+=this[t+i]*o;return o*=128,n>=o&&(n-=Math.pow(2,8*r)),n},o.prototype.readIntBE=function(t,r,e){t>>>=0,r>>>=0,e||L(t,r,this.length);for(var n=r,o=1,i=this[t+--n];n>0&&(o*=256);)i+=this[t+--n]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*r)),i},o.prototype.readInt8=function(t,r){return t>>>=0,r||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,r){t>>>=0,r||L(t,2,this.length);var e=this[t]|this[t+1]<<8;return 32768&e?4294901760|e:e},o.prototype.readInt16BE=function(t,r){t>>>=0,r||L(t,2,this.length);var e=this[t+1]|this[t]<<8;return 32768&e?4294901760|e:e},o.prototype.readInt32LE=function(t,r){return t>>>=0,r||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,r){return t>>>=0,r||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readFloatLE=function(t,r){return t>>>=0,r||L(t,4,this.length),V.read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,r){return t>>>=0,r||L(t,4,this.length),V.read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,r){return t>>>=0,r||L(t,8,this.length),V.read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,r){return t>>>=0,r||L(t,8,this.length),V.read(this,t,!1,52,8)},o.prototype.writeUIntLE=function(t,r,e,n){if(t=+t,r>>>=0,e>>>=0,!n){x(this,t,r,e,Math.pow(2,8*e)-1,0)}var o=1,i=0;for(this[r]=255&t;++i<e&&(o*=256);)this[r+i]=t/o&255;return r+e},o.prototype.writeUIntBE=function(t,r,e,n){if(t=+t,r>>>=0,e>>>=0,!n){x(this,t,r,e,Math.pow(2,8*e)-1,0)}var o=e-1,i=1;for(this[r+o]=255&t;--o>=0&&(i*=256);)this[r+o]=t/i&255;return r+e},o.prototype.writeUInt8=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,1,255,0),this[r]=255&t,r+1},o.prototype.writeUInt16LE=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,2,65535,0),this[r]=255&t,this[r+1]=t>>>8,r+2},o.prototype.writeUInt16BE=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,2,65535,0),this[r]=t>>>8,this[r+1]=255&t,r+2},o.prototype.writeUInt32LE=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,4,4294967295,0),this[r+3]=t>>>24,this[r+2]=t>>>16,this[r+1]=t>>>8,this[r]=255&t,r+4},o.prototype.writeUInt32BE=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,4,4294967295,0),this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t,r+4},o.prototype.writeIntLE=function(t,r,e,n){if(t=+t,r>>>=0,!n){var o=Math.pow(2,8*e-1);x(this,t,r,e,o-1,-o)}var i=0,u=1,a=0;for(this[r]=255&t;++i<e&&(u*=256);)t<0&&0===a&&0!==this[r+i-1]&&(a=1),this[r+i]=(t/u>>0)-a&255;return r+e},o.prototype.writeIntBE=function(t,r,e,n){if(t=+t,r>>>=0,!n){var o=Math.pow(2,8*e-1);x(this,t,r,e,o-1,-o)}var i=e-1,u=1,a=0;for(this[r+i]=255&t;--i>=0&&(u*=256);)t<0&&0===a&&0!==this[r+i+1]&&(a=1),this[r+i]=(t/u>>0)-a&255;return r+e},o.prototype.writeInt8=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,1,127,-128),t<0&&(t=255+t+1),this[r]=255&t,r+1},o.prototype.writeInt16LE=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,2,32767,-32768),this[r]=255&t,this[r+1]=t>>>8,r+2},o.prototype.writeInt16BE=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,2,32767,-32768),this[r]=t>>>8,this[r+1]=255&t,r+2},o.prototype.writeInt32LE=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,4,2147483647,-2147483648),this[r]=255&t,this[r+1]=t>>>8,this[r+2]=t>>>16,this[r+3]=t>>>24,r+4},o.prototype.writeInt32BE=function(t,r,e){return t=+t,r>>>=0,e||x(this,t,r,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[r]=t>>>24,this[r+1]=t>>>16,this[r+2]=t>>>8,this[r+3]=255&t,r+4},o.prototype.writeFloatLE=function(t,r,e){return k(this,t,r,!0,e)},o.prototype.writeFloatBE=function(t,r,e){return k(this,t,r,!1,e)},o.prototype.writeDoubleLE=function(t,r,e){return O(this,t,r,!0,e)},o.prototype.writeDoubleBE=function(t,r,e){return O(this,t,r,!1,e)},o.prototype.copy=function(t,r,e,n){if(!o.isBuffer(t))throw new TypeError("argument should be a Buffer");if(e||(e=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n<e&&(n=e),n===e)return 0;if(0===t.length||0===this.length)return 0;if(r<0)throw new RangeError("targetStart out of bounds");if(e<0||e>=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r<n-e&&(n=t.length-r+e);var i=n-e;if(this===t&&"function"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(r,e,n);else if(this===t&&e<r&&r<n)for(var u=i-1;u>=0;--u)t[u+r]=this[u+e];else Uint8Array.prototype.set.call(t,this.subarray(e,n),r);return i},o.prototype.fill=function(t,r,e,n){if("string"==typeof t){if("string"==typeof r?(n=r,r=0,e=this.length):"string"==typeof e&&(n=e,e=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!o.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var i=t.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(t=i)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(r<0||this.length<r||this.length<e)throw new RangeError("Out of range index");if(e<=r)return this;r>>>=0,e=void 0===e?this.length:e>>>0,t||(t=0);var u;if("number"==typeof t)for(u=r;u<e;++u)this[u]=t;else{var a=o.isBuffer(t)?t:o.from(t,n),f=a.length;if(0===f)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(u=0;u<e-r;++u)this[u+r]=a[u%f]}return this};var Z=/[^+\/0-9A-Za-z-_]/g,W=function(){for(var t=new Array(256),r=0;r<16;++r)for(var e=16*r,n=0;n<16;++n)t[e+n]="0123456789abcdef"[r]+"0123456789abcdef"[n];return t}()},{"base64-js":29,ieee754:32}],31:[function(t,r,e){"use strict";var n={single_source_shortest_paths:function(t,r,e){var o={},i={};i[r]=0;var u=n.PriorityQueue.make();u.push(r,0);for(var a,f,s,h,c,l,g,p;!u.empty();){a=u.pop(),f=a.value,h=a.cost,c=t[f]||{};for(s in c)c.hasOwnProperty(s)&&(l=c[s],g=h+l,p=i[s],(void 0===i[s]||p>g)&&(i[s]=g,u.push(s,g),o[s]=f))}if(void 0!==e&&void 0===i[e]){var d=["Could not find a path from ",r," to ",e,"."].join("");throw new Error(d)}return o},extract_shortest_path_from_predecessor_list:function(t,r){for(var e=[],n=r;n;)e.push(n),t[n],n=t[n];return e.reverse(),e},find_path:function(t,r,e){var o=n.single_source_shortest_paths(t,r,e);return n.extract_shortest_path_from_predecessor_list(o,e)},PriorityQueue:{make:function(t){var r,e=n.PriorityQueue,o={};t=t||{};for(r in e)e.hasOwnProperty(r)&&(o[r]=e[r]);return o.queue=[],o.sorter=t.sorter||e.default_sorter,o},default_sorter:function(t,r){return t.cost-r.cost},push:function(t,r){var e={value:t,cost:r};this.queue.push(e),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};void 0!==r&&(r.exports=n)},{}],32:[function(t,r,e){e.read=function(t,r,e,n,o){var i,u,a=8*o-n-1,f=(1<<a)-1,s=f>>1,h=-7,c=e?o-1:0,l=e?-1:1,g=t[r+c];for(c+=l,i=g&(1<<-h)-1,g>>=-h,h+=a;h>0;i=256*i+t[r+c],c+=l,h-=8);for(u=i&(1<<-h)-1,i>>=-h,h+=n;h>0;u=256*u+t[r+c],c+=l,h-=8);if(0===i)i=1-s;else{if(i===f)return u?NaN:1/0*(g?-1:1);u+=Math.pow(2,n),i-=s}return(g?-1:1)*u*Math.pow(2,i-n)},e.write=function(t,r,e,n,o,i){var u,a,f,s=8*i-o-1,h=(1<<s)-1,c=h>>1,l=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,g=n?0:i-1,p=n?1:-1,d=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(a=isNaN(r)?1:0,u=h):(u=Math.floor(Math.log(r)/Math.LN2),r*(f=Math.pow(2,-u))<1&&(u--,f*=2),r+=u+c>=1?l/f:l*Math.pow(2,1-c),r*f>=2&&(u++,f/=2),u+c>=h?(a=0,u=h):u+c>=1?(a=(r*f-1)*Math.pow(2,o),u+=c):(a=r*Math.pow(2,c-1)*Math.pow(2,o),u=0));o>=8;t[e+g]=255&a,g+=p,a/=256,o-=8);for(u=u<<o|a,s+=o;s>0;t[e+g]=255&u,g+=p,u/=256,s-=8);t[e+g-p]|=128*d}},{}],33:[function(t,r,e){var n={}.toString;r.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},{}]},{},[24])(24)});
//# sourceMappingURL=qrcode.min.js.map
{"version":3,"sources":["build/qrcode.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","QRCode","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","Promise","prototype","then","2","getSymbolSize","getRowColCoords","version","posCount","Math","floor","size","intervals","ceil","positions","push","reverse","getPositions","coords","pos","posLength","j","./utils","3","AlphanumericData","data","mode","Mode","ALPHANUMERIC","ALPHA_NUM_CHARS","getBitsLength","getLength","write","bitBuffer","value","indexOf","put","./mode","4","BitBuffer","buffer","get","index","bufIndex","num","putBit","getLengthInBits","bit","5","BitMatrix","BufferUtil","alloc","reservedBit","set","row","col","reserved","xor","isReserved","../utils/buffer","6","ByteData","BYTE","from","l","7","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","getBlocksCount","errorCorrectionLevel","L","M","Q","H","getTotalCodewordsCount","./error-correction-level","8","fromString","string","toLowerCase","isValid","level","defaultValue","9","10","Utils","G15_BCH","getBCHDigit","getEncodedBits","mask","d","11","EXP_TABLE","LOG_TABLE","x","log","exp","mul","y","12","KanjiData","KANJI","toSJIS","13","getMaskAt","maskPattern","Patterns","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","PenaltyScores","N1","N2","N3","N4","isNaN","parseInt","undefined","getPenaltyN1","points","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","last","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","abs","applyMask","pattern","getBestMask","setupFormatFunc","numPatterns","Object","keys","bestPattern","lowerPenalty","Infinity","penalty","14","NUMERIC","VersionCheck","Regex","id","ccBits","MIXED","getCharCountIndicator","getBestModeForData","dataStr","testNumeric","testAlphanumeric","testKanji","toString","./regex","./version-check","15","NumericData","group","substr","remainingNum","16","GF","p1","p2","coeff","mod","divident","divisor","result","offset","slice","generateECPolynomial","degree","poly","./galois-field","17","setupFinderPattern","matrix","FinderPattern","setupTimingPattern","setupAlignmentPattern","AlignmentPattern","setupVersionInfo","bits","Version","setupFormatInfo","FormatInfo","setupData","inc","bitIndex","byteIndex","dark","createData","segments","forEach","totalCodewords","getSymbolTotalCodewords","ecTotalCodewords","ECCode","dataTotalCodewordsBits","remainingByte","createCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup2","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","ReedSolomonEncoder","dcData","Array","ecData","maxDataSize","b","dataSize","encode","max","createSymbol","isArray","Segments","fromArray","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","bestVersion","dataBits","moduleCount","modules","MaskPattern","bind","create","options","toSJISFunc","setToSJISFunction","./alignment-pattern","./bit-buffer","./bit-matrix","./error-correction-code","./finder-pattern","./format-info","./mask-pattern","./reed-solomon-encoder","./segments","./version","isarray","18","genPoly","initialize","Polynomial","Buffer","pad","paddedData","concat","remainder","start","buff","copy","./polynomial","19","kanji","replace","byte","RegExp","BYTE_KANJI","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","str","test","20","getStringByteLength","unescape","encodeURIComponent","getSegments","regex","exec","getSegmentsFromString","byteSegs","kanjiSegs","numSegs","alphaNumSegs","isKanjiModeEnabled","sort","s1","s2","map","obj","getSegmentBitsLength","mergeSegments","segs","reduce","acc","curr","prevSeg","buildNodes","nodes","seg","buildGraph","table","graph","prevNodeIds","nodeGroup","currentNodeIds","node","key","lastCount","prevNodeId","buildSingleSegment","modesHint","bestMode","dijkstra","array","path","find_path","optimizedSegs","./alphanumeric-data","./byte-data","./kanji-data","./numeric-data","dijkstrajs","21","toSJISFunction","CODEWORDS_COUNT","digit","22","23","getBestVersionForDataLength","currentVersion","getCapacity","getReservedBitsCount","getTotalBitsFromDataArray","totalBits","reservedBits","getBestVersionForMixedData","G18_BCH","usableBits","ecl","24","renderCanvas","renderFunc","canvas","text","opts","cb","args","arguments","argsNum","isLastArgCb","canPromise","getContext","resolve","reject","CanvasRenderer","SvgRenderer","toCanvas","render","toDataURL","renderToDataURL","_","./can-promise","./core/qrcode","./renderer/canvas","./renderer/svg-tag.js","25","clearCanvas","ctx","clearRect","width","height","style","getCanvasElement","document","createElement","qrData","canvasEl","getOptions","getImageWidth","image","createImageData","qrToImageData","putImageData","type","rendererOpts","quality","26","getColorAttrib","color","attrib","alpha","hex","toFixed","svgCmd","cmd","qrToPath","margin","moveBy","newRow","lineLength","qrcodesize","bg","light","viewBox","svgTag","27","hex2rgba","hexCode","split","apply","hexValue","join","scale","getScale","qrSize","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","iSrc","jSrc","28","arg","TYPED_ARRAY_SUPPORT","allocUnsafe","checked","K_MAX_LENGTH","RangeError","isnan","val","createBuffer","that","buf","Uint8Array","__proto__","byteLength","actual","fromArrayLike","fromArrayBuffer","byteOffset","fromObject","isBuffer","len","ArrayBuffer","TypeError","utf8ToBytes","units","codePoint","leadSurrogate","bytes","charCodeAt","isView","blitBuffer","src","dst","utf8Write","arr","foo","Symbol","species","defineProperty","configurable","enumerable","writable","isFinite","remaining","end","newBuf","subarray","sliceLen","target","targetStart","fill","list","_isBuffer","29","getLens","b64","validLen","lens","placeHoldersLen","_byteLength","toByteArray","tmp","Arr","curByte","revLookup","tripletToBase64","lookup","encodeChunk","uint8","output","fromByteArray","extraBytes","parts","len2","30","setPrototypeOf","encodingOrOffset","isInstance","valueOf","toPrimitive","assertSize","encoding","isEncoding","numberIsNaN","SlowBuffer","mustMatch","loweredCase","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","m","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","read","indexSize","readUInt16BE","arrLength","valLength","String","foundIndex","found","hexWrite","Number","strLen","parsed","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","base64","min","res","firstByte","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","ret","out","hexSliceLookupTable","checkOffset","ext","checkInt","checkIEEE754","writeFloat","littleEndian","noAssert","ieee754","writeDouble","base64clean","trim","INVALID_BASE64_RE","byteArray","hi","lo","constructor","name","customInspectSymbol","for","INSPECT_MAX_BYTES","kMaxLength","proto","console","error","poolSize","allocUnsafeSlow","compare","swap16","swap32","swap64","toLocaleString","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","toJSON","_arr","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","copyWithin","i16","base64-js","31","single_source_shortest_paths","s","predecessors","costs","open","PriorityQueue","make","closest","v","cost_of_s_to_u","adjacent_nodes","cost_of_e","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","empty","pop","cost","hasOwnProperty","msg","extract_shortest_path_from_predecessor_list","T","queue","sorter","default_sorter","item","shift","32","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","33"],"mappings":"CAAA,SAAUA,GAAG,GAAoB,gBAAVC,UAAoC,mBAATC,QAAsBA,OAAOD,QAAQD,QAAS,IAAmB,kBAATG,SAAqBA,OAAOC,IAAKD,UAAUH,OAAO,CAAC,GAAIK,EAAkCA,GAAb,mBAATC,QAAwBA,OAA+B,mBAATC,QAAwBA,OAA6B,mBAAPC,MAAsBA,KAAYC,KAAKJ,EAAEK,OAASV,MAAO,WAAqC,MAAO,YAAY,QAASW,GAAEC,EAAEC,EAAEC,GAAG,QAASC,GAAEC,EAAEhB,GAAG,IAAIa,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAAC,GAAIC,GAAE,kBAAmBC,UAASA,OAAQ,KAAIlB,GAAGiB,EAAE,MAAOA,GAAED,GAAE,EAAI,IAAGG,EAAE,MAAOA,GAAEH,GAAE,EAAI,IAAII,GAAE,GAAIC,OAAM,uBAAuBL,EAAE,IAAK,MAAMI,GAAEE,KAAK,mBAAmBF,EAAE,GAAIG,GAAEV,EAAEG,IAAIf,WAAYW,GAAEI,GAAG,GAAGQ,KAAKD,EAAEtB,QAAQ,SAASU,GAAoB,MAAOI,GAAlBH,EAAEI,GAAG,GAAGL,IAAeA,IAAIY,EAAEA,EAAEtB,QAAQU,EAAEC,EAAEC,EAAEC,GAAG,MAAOD,GAAEG,GAAGf,QAAQ,IAAI,GAAIkB,GAAE,kBAAmBD,UAASA,QAAQF,EAAE,EAAEA,EAAEF,EAAEW,OAAOT,IAAID,EAAED,EAAEE,GAAI,OAAOD,GAAE,MAAOJ,OAAOe,GAAG,SAASR,EAAQhB,EAAOD,GAKt1BC,EAAOD,QAAU,WACf,MAA0B,kBAAZ0B,UAA0BA,QAAQC,WAAaD,QAAQC,UAAUC,WAG3EC,GAAG,SAASZ,EAAQhB,EAAOD,GAWjC,GAAI8B,GAAgBb,EAAQ,WAAWa,aAgBvC9B,GAAQ+B,gBAAkB,SAA0BC,GAClD,GAAgB,IAAZA,EAAe,QAOnB,KAAK,GALDC,GAAWC,KAAKC,MAAMH,EAAU,GAAK,EACrCI,EAAON,EAAcE,GACrBK,EAAqB,MAATD,EAAe,GAAmD,EAA9CF,KAAKI,MAAMF,EAAO,KAAO,EAAIH,EAAW,IACxEM,GAAaH,EAAO,GAEfrB,EAAI,EAAGA,EAAIkB,EAAW,EAAGlB,IAChCwB,EAAUxB,GAAKwB,EAAUxB,EAAI,GAAKsB,CAKpC,OAFAE,GAAUC,KAAK,GAERD,EAAUE,WAuBnBzC,EAAQ0C,aAAe,SAAuBV,GAK5C,IAAK,GAJDW,MACAC,EAAM5C,EAAQ+B,gBAAgBC,GAC9Ba,EAAYD,EAAIpB,OAEXT,EAAI,EAAGA,EAAI8B,EAAW9B,IAC7B,IAAK,GAAI+B,GAAI,EAAGA,EAAID,EAAWC,IAElB,IAAN/B,GAAiB,IAAN+B,GACL,IAAN/B,GAAW+B,IAAMD,EAAY,GAC7B9B,IAAM8B,EAAY,GAAW,IAANC,GAI5BH,EAAOH,MAAMI,EAAI7B,GAAI6B,EAAIE,IAI7B,OAAOH,MAGNI,UAAU,KAAKC,GAAG,SAAS/B,EAAQhB,EAAOD,GAmB7C,QAASiD,GAAkBC,GACzB1C,KAAK2C,KAAOC,EAAKC,aACjB7C,KAAK0C,KAAOA,EApBd,GAAIE,GAAOnC,EAAQ,UAWfqC,GACF,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC5D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAQ1CL,GAAiBM,cAAgB,SAAwB/B,GACvD,MAAO,IAAKU,KAAKC,MAAMX,EAAS,GAAUA,EAAS,EAAd,GAGvCyB,EAAiBtB,UAAU6B,UAAY,WACrC,MAAOhD,MAAK0C,KAAK1B,QAGnByB,EAAiBtB,UAAU4B,cAAgB,WACzC,MAAON,GAAiBM,cAAc/C,KAAK0C,KAAK1B,SAGlDyB,EAAiBtB,UAAU8B,MAAQ,SAAgBC,GACjD,GAAI3C,EAIJ,KAAKA,EAAI,EAAGA,EAAI,GAAKP,KAAK0C,KAAK1B,OAAQT,GAAK,EAAG,CAE7C,GAAI4C,GAAgD,GAAxCL,EAAgBM,QAAQpD,KAAK0C,KAAKnC,GAG9C4C,IAASL,EAAgBM,QAAQpD,KAAK0C,KAAKnC,EAAI,IAG/C2C,EAAUG,IAAIF,EAAO,IAKnBnD,KAAK0C,KAAK1B,OAAS,GACrBkC,EAAUG,IAAIP,EAAgBM,QAAQpD,KAAK0C,KAAKnC,IAAK,IAIzDd,EAAOD,QAAUiD,IAEda,SAAS,KAAKC,GAAG,SAAS9C,EAAQhB,EAAOD,GAC5C,QAASgE,KACPxD,KAAKyD,UACLzD,KAAKgB,OAAS,EAGhBwC,EAAUrC,WAERuC,IAAK,SAAUC,GACb,GAAIC,GAAWlC,KAAKC,MAAMgC,EAAQ,EAClC,OAA6D,KAApD3D,KAAKyD,OAAOG,KAAe,EAAID,EAAQ,EAAM,IAGxDN,IAAK,SAAUQ,EAAK7C,GAClB,IAAK,GAAIT,GAAI,EAAGA,EAAIS,EAAQT,IAC1BP,KAAK8D,OAA4C,IAAnCD,IAAS7C,EAAST,EAAI,EAAM,KAI9CwD,gBAAiB,WACf,MAAO/D,MAAKgB,QAGd8C,OAAQ,SAAUE,GAChB,GAAIJ,GAAWlC,KAAKC,MAAM3B,KAAKgB,OAAS,EACpChB,MAAKyD,OAAOzC,QAAU4C,GACxB5D,KAAKyD,OAAOzB,KAAK,GAGfgC,IACFhE,KAAKyD,OAAOG,IAAc,MAAU5D,KAAKgB,OAAS,GAGpDhB,KAAKgB,WAITvB,EAAOD,QAAUgE,OAEXS,GAAG,SAASxD,EAAQhB,EAAOD,GAQjC,QAAS0E,GAAWtC,GAClB,IAAKA,GAAQA,EAAO,EAClB,KAAM,IAAIhB,OAAM,oDAGlBZ,MAAK4B,KAAOA,EACZ5B,KAAK0C,KAAOyB,EAAWC,MAAMxC,EAAOA,GACpC5B,KAAKqE,YAAcF,EAAWC,MAAMxC,EAAOA,GAd7C,GAAIuC,GAAa1D,EAAQ,kBA0BzByD,GAAU/C,UAAUmD,IAAM,SAAUC,EAAKC,EAAKrB,EAAOsB,GACnD,GAAId,GAAQY,EAAMvE,KAAK4B,KAAO4C,CAC9BxE,MAAK0C,KAAKiB,GAASR,EACfsB,IAAUzE,KAAKqE,YAAYV,IAAS,IAU1CO,EAAU/C,UAAUuC,IAAM,SAAUa,EAAKC,GACvC,MAAOxE,MAAK0C,KAAK6B,EAAMvE,KAAK4B,KAAO4C,IAWrCN,EAAU/C,UAAUuD,IAAM,SAAUH,EAAKC,EAAKrB,GAC5CnD,KAAK0C,KAAK6B,EAAMvE,KAAK4B,KAAO4C,IAAQrB,GAUtCe,EAAU/C,UAAUwD,WAAa,SAAUJ,EAAKC,GAC9C,MAAOxE,MAAKqE,YAAYE,EAAMvE,KAAK4B,KAAO4C,IAG5C/E,EAAOD,QAAU0E,IAEdU,kBAAkB,KAAKC,GAAG,SAASpE,EAAQhB,EAAOD,GAIrD,QAASsF,GAAUpC,GACjB1C,KAAK2C,KAAOC,EAAKmC,KACjB/E,KAAK0C,KAAOyB,EAAWa,KAAKtC,GAL9B,GAAIyB,GAAa1D,EAAQ,mBACrBmC,EAAOnC,EAAQ,SAOnBqE,GAAS/B,cAAgB,SAAwB/B,GAC/C,MAAgB,GAATA,GAGT8D,EAAS3D,UAAU6B,UAAY,WAC7B,MAAOhD,MAAK0C,KAAK1B,QAGnB8D,EAAS3D,UAAU4B,cAAgB,WACjC,MAAO+B,GAAS/B,cAAc/C,KAAK0C,KAAK1B,SAG1C8D,EAAS3D,UAAU8B,MAAQ,SAAUC,GACnC,IAAK,GAAI3C,GAAI,EAAG0E,EAAIjF,KAAK0C,KAAK1B,OAAQT,EAAI0E,EAAG1E,IAC3C2C,EAAUG,IAAIrD,KAAK0C,KAAKnC,GAAI,IAIhCd,EAAOD,QAAUsF,IAEdF,kBAAkB,GAAGtB,SAAS,KAAK4B,GAAG,SAASzE,EAAQhB,EAAOD,GACjE,GAAI2F,GAAU1E,EAAQ,4BAElB2E,GAEF,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,GACT,EAAG,EAAG,GAAI,GACV,EAAG,EAAG,GAAI,GACV,EAAG,EAAG,GAAI,GACV,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,EAAG,GAAI,GAAI,GACX,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,IAGVC,GAEF,EAAG,GAAI,GAAI,GACX,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,GACZ,GAAI,GAAI,GAAI,IACZ,GAAI,GAAI,IAAK,IACb,GAAI,GAAI,IAAK,IACb,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,GAAI,IAAK,IAAK,IACd,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,KACf,IAAK,IAAK,IAAK,KACf,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,IAAK,KAAM,KAChB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KACjB,IAAK,KAAM,KAAM,KAWnB7F,GAAQ8F,eAAiB,SAAyB9D,EAAS+D,GACzD,OAAQA,GACN,IAAKJ,GAAQK,EACX,MAAOJ,GAAgC,GAAf5D,EAAU,GAAS,EAC7C,KAAK2D,GAAQM,EACX,MAAOL,GAAgC,GAAf5D,EAAU,GAAS,EAC7C,KAAK2D,GAAQO,EACX,MAAON,GAAgC,GAAf5D,EAAU,GAAS,EAC7C,KAAK2D,GAAQQ,EACX,MAAOP,GAAgC,GAAf5D,EAAU,GAAS,EAC7C,SACE,SAYNhC,EAAQoG,uBAAyB,SAAiCpE,EAAS+D,GACzE,OAAQA,GACN,IAAKJ,GAAQK,EACX,MAAOH,GAAmC,GAAf7D,EAAU,GAAS,EAChD,KAAK2D,GAAQM,EACX,MAAOJ,GAAmC,GAAf7D,EAAU,GAAS,EAChD,KAAK2D,GAAQO,EACX,MAAOL,GAAmC,GAAf7D,EAAU,GAAS,EAChD,KAAK2D,GAAQQ,EACX,MAAON,GAAmC,GAAf7D,EAAU,GAAS,EAChD,SACE,WAIHqE,2BAA2B,IAAIC,GAAG,SAASrF,EAAQhB,EAAOD,GAM7D,QAASuG,GAAYC,GACnB,GAAsB,gBAAXA,GACT,KAAM,IAAIpF,OAAM,wBAKlB,QAFYoF,EAAOC,eAGjB,IAAK,IACL,IAAK,MACH,MAAOzG,GAAQgG,CAEjB,KAAK,IACL,IAAK,SACH,MAAOhG,GAAQiG,CAEjB,KAAK,IACL,IAAK,WACH,MAAOjG,GAAQkG,CAEjB,KAAK,IACL,IAAK,OACH,MAAOlG,GAAQmG,CAEjB,SACE,KAAM,IAAI/E,OAAM,qBAAuBoF,IA9B7CxG,EAAQgG,GAAMxB,IAAK,GACnBxE,EAAQiG,GAAMzB,IAAK,GACnBxE,EAAQkG,GAAM1B,IAAK,GACnBxE,EAAQmG,GAAM3B,IAAK,GA+BnBxE,EAAQ0G,QAAU,SAAkBC,GAClC,MAAOA,QAA8B,KAAdA,EAAMnC,KAC3BmC,EAAMnC,KAAO,GAAKmC,EAAMnC,IAAM,GAGlCxE,EAAQwF,KAAO,SAAe7B,EAAOiD,GACnC,GAAI5G,EAAQ0G,QAAQ/C,GAClB,MAAOA,EAGT,KACE,MAAO4C,GAAW5C,GAClB,MAAOhD,GACP,MAAOiG,UAILC,GAAG,SAAS5F,EAAQhB,EAAOD,GACjC,GAAI8B,GAAgBb,EAAQ,WAAWa,aAUvC9B,GAAQ0C,aAAe,SAAuBV,GAC5C,GAAII,GAAON,EAAcE,EAEzB,SAEG,EAAG,IAEHI,EAhBqB,EAgBO,IAE5B,EAAGA,EAlBkB,OAsBvBW,UAAU,KAAK+D,IAAI,SAAS7F,EAAQhB,EAAOD,GAC9C,GAAI+G,GAAQ9F,EAAQ,WAIhB+F,EAAUD,EAAME,YAFV,KAcVjH,GAAQkH,eAAiB,SAAyBnB,EAAsBoB,GAItE,IAHA,GAAIjE,GAAS6C,EAAqBvB,KAAO,EAAK2C,EAC1CC,EAAIlE,GAAQ,GAET6D,EAAME,YAAYG,GAAKJ,GAAW,GACvCI,GAnBM,MAmBQL,EAAME,YAAYG,GAAKJ,CAMvC,OAxBa,QAwBJ9D,GAAQ,GAAMkE,MAGtBrE,UAAU,KAAKsE,IAAI,SAASpG,EAAQhB,EAAOD,GAC9C,GAAI2E,GAAa1D,EAAQ,mBAErBqG,EAAY3C,EAAWC,MAAM,KAC7B2C,EAAY5C,EAAWC,MAAM,MAS/B,WAEA,IAAK,GADD4C,GAAI,EACCzG,EAAI,EAAGA,EAAI,IAAKA,IACvBuG,EAAUvG,GAAKyG,EACfD,EAAUC,GAAKzG,EAMP,KAJRyG,IAAM,KAKJA,GAAK,IAQT,KAAKzG,EAAI,IAAKA,EAAI,IAAKA,IACrBuG,EAAUvG,GAAKuG,EAAUvG,EAAI,QAUjCf,EAAQyH,IAAM,SAAc7G,GAC1B,GAAIA,EAAI,EAAG,KAAM,IAAIQ,OAAM,OAASR,EAAI,IACxC,OAAO2G,GAAU3G,IASnBZ,EAAQ0H,IAAM,SAAc9G,GAC1B,MAAO0G,GAAU1G,IAUnBZ,EAAQ2H,IAAM,SAAcH,EAAGI,GAC7B,MAAU,KAANJ,GAAiB,IAANI,EAAgB,EAIxBN,EAAUC,EAAUC,GAAKD,EAAUK,OAGzCxC,kBAAkB,KAAKyC,IAAI,SAAS5G,EAAQhB,EAAOD,GAItD,QAAS8H,GAAW5E,GAClB1C,KAAK2C,KAAOC,EAAK2E,MACjBvH,KAAK0C,KAAOA,EALd,GAAIE,GAAOnC,EAAQ,UACf8F,EAAQ9F,EAAQ,UAOpB6G,GAAUvE,cAAgB,SAAwB/B,GAChD,MAAgB,IAATA,GAGTsG,EAAUnG,UAAU6B,UAAY,WAC9B,MAAOhD,MAAK0C,KAAK1B,QAGnBsG,EAAUnG,UAAU4B,cAAgB,WAClC,MAAOuE,GAAUvE,cAAc/C,KAAK0C,KAAK1B,SAG3CsG,EAAUnG,UAAU8B,MAAQ,SAAUC,GACpC,GAAI3C,EAKJ,KAAKA,EAAI,EAAGA,EAAIP,KAAK0C,KAAK1B,OAAQT,IAAK,CACrC,GAAI4C,GAAQoD,EAAMiB,OAAOxH,KAAK0C,KAAKnC,GAGnC,IAAI4C,GAAS,OAAUA,GAAS,MAE9BA,GAAS,UAGJ,CAAA,KAAIA,GAAS,OAAUA,GAAS,OAIrC,KAAM,IAAIvC,OACR,2BAA6BZ,KAAK0C,KAAKnC,GAAK,oCAH9C4C,IAAS,MASXA,EAAkC,KAAvBA,IAAU,EAAK,MAAyB,IAARA,GAG3CD,EAAUG,IAAIF,EAAO,MAIzB1D,EAAOD,QAAU8H,IAEdhE,SAAS,GAAGf,UAAU,KAAKkF,IAAI,SAAShH,EAAQhB,EAAOD,GA0K1D,QAASkI,GAAWC,EAAapH,EAAG+B,GAClC,OAAQqF,GACN,IAAKnI,GAAQoI,SAASC,WAAY,OAAQtH,EAAI+B,GAAK,GAAM,CACzD,KAAK9C,GAAQoI,SAASE,WAAY,MAAOvH,GAAI,GAAM,CACnD,KAAKf,GAAQoI,SAASG,WAAY,MAAOzF,GAAI,GAAM,CACnD,KAAK9C,GAAQoI,SAASI,WAAY,OAAQzH,EAAI+B,GAAK,GAAM,CACzD,KAAK9C,GAAQoI,SAASK,WAAY,OAAQvG,KAAKC,MAAMpB,EAAI,GAAKmB,KAAKC,MAAMW,EAAI,IAAM,GAAM,CACzF,KAAK9C,GAAQoI,SAASM,WAAY,MAAQ3H,GAAI+B,EAAK,EAAK/B,EAAI+B,EAAK,GAAM,CACvE,KAAK9C,GAAQoI,SAASO,WAAY,OAAS5H,EAAI+B,EAAK,EAAK/B,EAAI+B,EAAK,GAAK,GAAM,CAC7E,KAAK9C,GAAQoI,SAASQ,WAAY,OAAS7H,EAAI+B,EAAK,GAAK/B,EAAI+B,GAAK,GAAK,GAAM,CAE7E,SAAS,KAAM,IAAI1B,OAAM,mBAAqB+G,IAhLlDnI,EAAQoI,UACNC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EACZC,WAAY,EAOd,IAAIC,IACFC,GAAI,EACJC,GAAI,EACJC,GAAI,GACJC,GAAI,GASNjJ,GAAQ0G,QAAU,SAAkBS,GAClC,MAAe,OAARA,GAAyB,KAATA,IAAgB+B,MAAM/B,IAASA,GAAQ,GAAKA,GAAQ,GAU7EnH,EAAQwF,KAAO,SAAe7B,GAC5B,MAAO3D,GAAQ0G,QAAQ/C,GAASwF,SAASxF,EAAO,QAAMyF,IAUxDpJ,EAAQqJ,aAAe,SAAuBnG,GAQ5C,IAAK,GAPDd,GAAOc,EAAKd,KACZkH,EAAS,EACTC,EAAe,EACfC,EAAe,EACfC,EAAU,KACVC,EAAU,KAEL3E,EAAM,EAAGA,EAAM3C,EAAM2C,IAAO,CACnCwE,EAAeC,EAAe,EAC9BC,EAAUC,EAAU,IAEpB,KAAK,GAAI1E,GAAM,EAAGA,EAAM5C,EAAM4C,IAAO,CACnC,GAAI/E,GAASiD,EAAKgB,IAAIa,EAAKC,EACvB/E,KAAWwJ,EACbF,KAEIA,GAAgB,IAAGD,GAAUT,EAAcC,IAAMS,EAAe,IACpEE,EAAUxJ,EACVsJ,EAAe,GAGjBtJ,EAASiD,EAAKgB,IAAIc,EAAKD,GACnB9E,IAAWyJ,EACbF,KAEIA,GAAgB,IAAGF,GAAUT,EAAcC,IAAMU,EAAe,IACpEE,EAAUzJ,EACVuJ,EAAe,GAIfD,GAAgB,IAAGD,GAAUT,EAAcC,IAAMS,EAAe,IAChEC,GAAgB,IAAGF,GAAUT,EAAcC,IAAMU,EAAe,IAGtE,MAAOF,IAQTtJ,EAAQ2J,aAAe,SAAuBzG,GAI5C,IAAK,GAHDd,GAAOc,EAAKd,KACZkH,EAAS,EAEJvE,EAAM,EAAGA,EAAM3C,EAAO,EAAG2C,IAChC,IAAK,GAAIC,GAAM,EAAGA,EAAM5C,EAAO,EAAG4C,IAAO,CACvC,GAAI4E,GAAO1G,EAAKgB,IAAIa,EAAKC,GACvB9B,EAAKgB,IAAIa,EAAKC,EAAM,GACpB9B,EAAKgB,IAAIa,EAAM,EAAGC,GAClB9B,EAAKgB,IAAIa,EAAM,EAAGC,EAAM,EAEb,KAAT4E,GAAuB,IAATA,GAAYN,IAIlC,MAAOA,GAAST,EAAcE,IAShC/I,EAAQ6J,aAAe,SAAuB3G,GAM5C,IAAK,GALDd,GAAOc,EAAKd,KACZkH,EAAS,EACTQ,EAAU,EACVC,EAAU,EAELhF,EAAM,EAAGA,EAAM3C,EAAM2C,IAAO,CACnC+E,EAAUC,EAAU,CACpB,KAAK,GAAI/E,GAAM,EAAGA,EAAM5C,EAAM4C,IAC5B8E,EAAYA,GAAW,EAAK,KAAS5G,EAAKgB,IAAIa,EAAKC,GAC/CA,GAAO,KAAmB,OAAZ8E,GAAiC,KAAZA,IAAoBR,IAE3DS,EAAYA,GAAW,EAAK,KAAS7G,EAAKgB,IAAIc,EAAKD,GAC/CC,GAAO,KAAmB,OAAZ+E,GAAiC,KAAZA,IAAoBT,IAI/D,MAAOA,GAAST,EAAcG,IAWhChJ,EAAQgK,aAAe,SAAuB9G,GAI5C,IAAK,GAHD+G,GAAY,EACZC,EAAehH,EAAKA,KAAK1B,OAEpBT,EAAI,EAAGA,EAAImJ,EAAcnJ,IAAKkJ,GAAa/G,EAAKA,KAAKnC,EAI9D,OAFQmB,MAAKiI,IAAIjI,KAAKI,KAAkB,IAAZ2H,EAAkBC,EAAgB,GAAK,IAExDrB,EAAcI,IAgC3BjJ,EAAQoK,UAAY,SAAoBC,EAASnH,GAG/C,IAAK,GAFDd,GAAOc,EAAKd,KAEP4C,EAAM,EAAGA,EAAM5C,EAAM4C,IAC5B,IAAK,GAAID,GAAM,EAAGA,EAAM3C,EAAM2C,IACxB7B,EAAKiC,WAAWJ,EAAKC,IACzB9B,EAAKgC,IAAIH,EAAKC,EAAKkD,EAAUmC,EAAStF,EAAKC,KAWjDhF,EAAQsK,YAAc,SAAsBpH,EAAMqH,GAKhD,IAAK,GAJDC,GAAcC,OAAOC,KAAK1K,EAAQoI,UAAU5G,OAC5CmJ,EAAc,EACdC,EAAeC,EAAAA,EAEVvJ,EAAI,EAAGA,EAAIkJ,EAAalJ,IAAK,CACpCiJ,EAAgBjJ,GAChBtB,EAAQoK,UAAU9I,EAAG4B,EAGrB,IAAI4H,GACF9K,EAAQqJ,aAAanG,GACrBlD,EAAQ2J,aAAazG,GACrBlD,EAAQ6J,aAAa3G,GACrBlD,EAAQgK,aAAa9G,EAGvBlD,GAAQoK,UAAU9I,EAAG4B,GAEjB4H,EAAUF,IACZA,EAAeE,EACfH,EAAcrJ,GAIlB,MAAOqJ,SAGHI,IAAI,SAAS9J,EAAQhB,EAAOD,GAgIlC,QAASuG,GAAYC,GACnB,GAAsB,gBAAXA,GACT,KAAM,IAAIpF,OAAM,wBAKlB,QAFYoF,EAAOC,eAGjB,IAAK,UACH,MAAOzG,GAAQgL,OACjB,KAAK,eACH,MAAOhL,GAAQqD,YACjB,KAAK,QACH,MAAOrD,GAAQ+H,KACjB,KAAK,OACH,MAAO/H,GAAQuF,IACjB,SACE,KAAM,IAAInE,OAAM,iBAAmBoF,IAhJzC,GAAIyE,GAAehK,EAAQ,mBACvBiK,EAAQjK,EAAQ,UASpBjB,GAAQgL,SACNG,GAAI,UACJ3G,IAAK,EACL4G,QAAS,GAAI,GAAI,KAYnBpL,EAAQqD,cACN8H,GAAI,eACJ3G,IAAK,EACL4G,QAAS,EAAG,GAAI,KAQlBpL,EAAQuF,MACN4F,GAAI,OACJ3G,IAAK,EACL4G,QAAS,EAAG,GAAI,KAYlBpL,EAAQ+H,OACNoD,GAAI,QACJ3G,IAAK,EACL4G,QAAS,EAAG,GAAI,KASlBpL,EAAQqL,OACN7G,KAAM,GAWRxE,EAAQsL,sBAAwB,SAAgCnI,EAAMnB,GACpE,IAAKmB,EAAKiI,OAAQ,KAAM,IAAIhK,OAAM,iBAAmB+B,EAErD,KAAK8H,EAAavE,QAAQ1E,GACxB,KAAM,IAAIZ,OAAM,oBAAsBY,EAGxC,OAAIA,IAAW,GAAKA,EAAU,GAAWmB,EAAKiI,OAAO,GAC5CpJ,EAAU,GAAWmB,EAAKiI,OAAO,GACnCjI,EAAKiI,OAAO,IASrBpL,EAAQuL,mBAAqB,SAA6BC,GACxD,MAAIN,GAAMO,YAAYD,GAAiBxL,EAAQgL,QACtCE,EAAMQ,iBAAiBF,GAAiBxL,EAAQqD,aAChD6H,EAAMS,UAAUH,GAAiBxL,EAAQ+H,MACtC/H,EAAQuF,MAStBvF,EAAQ4L,SAAW,SAAmBzI,GACpC,GAAIA,GAAQA,EAAKgI,GAAI,MAAOhI,GAAKgI,EACjC,MAAM,IAAI/J,OAAM,iBASlBpB,EAAQ0G,QAAU,SAAkBvD,GAClC,MAAOA,IAAQA,EAAKqB,KAAOrB,EAAKiI,QAsClCpL,EAAQwF,KAAO,SAAe7B,EAAOiD,GACnC,GAAI5G,EAAQ0G,QAAQ/C,GAClB,MAAOA,EAGT,KACE,MAAO4C,GAAW5C,GAClB,MAAOhD,GACP,MAAOiG,OAIRiF,UAAU,GAAGC,kBAAkB,KAAKC,IAAI,SAAS9K,EAAQhB,EAAOD,GAGnE,QAASgM,GAAa9I,GACpB1C,KAAK2C,KAAOC,EAAK4H,QACjBxK,KAAK0C,KAAOA,EAAK0I,WAJnB,GAAIxI,GAAOnC,EAAQ,SAOnB+K,GAAYzI,cAAgB,SAAwB/B,GAClD,MAAO,IAAKU,KAAKC,MAAMX,EAAS,IAAOA,EAAS,EAAOA,EAAS,EAAK,EAAI,EAAK,IAGhFwK,EAAYrK,UAAU6B,UAAY,WAChC,MAAOhD,MAAK0C,KAAK1B,QAGnBwK,EAAYrK,UAAU4B,cAAgB,WACpC,MAAOyI,GAAYzI,cAAc/C,KAAK0C,KAAK1B,SAG7CwK,EAAYrK,UAAU8B,MAAQ,SAAgBC,GAC5C,GAAI3C,GAAGkL,EAAOtI,CAId,KAAK5C,EAAI,EAAGA,EAAI,GAAKP,KAAK0C,KAAK1B,OAAQT,GAAK,EAC1CkL,EAAQzL,KAAK0C,KAAKgJ,OAAOnL,EAAG,GAC5B4C,EAAQwF,SAAS8C,EAAO,IAExBvI,EAAUG,IAAIF,EAAO,GAKvB,IAAIwI,GAAe3L,KAAK0C,KAAK1B,OAAST,CAClCoL,GAAe,IACjBF,EAAQzL,KAAK0C,KAAKgJ,OAAOnL,GACzB4C,EAAQwF,SAAS8C,EAAO,IAExBvI,EAAUG,IAAIF,EAAsB,EAAfwI,EAAmB,KAI5ClM,EAAOD,QAAUgM,IAEdlI,SAAS,KAAKsI,IAAI,SAASnL,EAAQhB,EAAOD,GAC7C,GAAI2E,GAAa1D,EAAQ,mBACrBoL,EAAKpL,EAAQ,iBASjBjB,GAAQ2H,IAAM,SAAc2E,EAAIC,GAG9B,IAAK,GAFDC,GAAQ7H,EAAWC,MAAM0H,EAAG9K,OAAS+K,EAAG/K,OAAS,GAE5CT,EAAI,EAAGA,EAAIuL,EAAG9K,OAAQT,IAC7B,IAAK,GAAI+B,GAAI,EAAGA,EAAIyJ,EAAG/K,OAAQsB,IAC7B0J,EAAMzL,EAAI+B,IAAMuJ,EAAG1E,IAAI2E,EAAGvL,GAAIwL,EAAGzJ,GAIrC,OAAO0J,IAUTxM,EAAQyM,IAAM,SAAcC,EAAUC,GAGpC,IAFA,GAAIC,GAASjI,EAAWa,KAAKkH,GAErBE,EAAOpL,OAASmL,EAAQnL,QAAW,GAAG,CAG5C,IAAK,GAFDgL,GAAQI,EAAO,GAEV7L,EAAI,EAAGA,EAAI4L,EAAQnL,OAAQT,IAClC6L,EAAO7L,IAAMsL,EAAG1E,IAAIgF,EAAQ5L,GAAIyL,EAKlC,KADA,GAAIK,GAAS,EACNA,EAASD,EAAOpL,QAA6B,IAAnBoL,EAAOC,IAAeA,GACvDD,GAASA,EAAOE,MAAMD,GAGxB,MAAOD,IAUT5M,EAAQ+M,qBAAuB,SAA+BC,GAE5D,IAAK,GADDC,GAAOtI,EAAWa,MAAM,IACnBzE,EAAI,EAAGA,EAAIiM,EAAQjM,IAC1BkM,EAAOjN,EAAQ2H,IAAIsF,GAAO,EAAGZ,EAAG3E,IAAI3G,IAGtC,OAAOkM,MAGN7H,kBAAkB,GAAG8H,iBAAiB,KAAKC,IAAI,SAASlM,EAAQhB,EAAOD,GAiD1E,QAASoN,GAAoBC,EAAQrL,GAInC,IAAK,GAHDI,GAAOiL,EAAOjL,KACdQ,EAAM0K,EAAc5K,aAAaV,GAE5BjB,EAAI,EAAGA,EAAI6B,EAAIpB,OAAQT,IAI9B,IAAK,GAHDgE,GAAMnC,EAAI7B,GAAG,GACbiE,EAAMpC,EAAI7B,GAAG,GAERL,GAAK,EAAGA,GAAK,EAAGA,IACvB,KAAIqE,EAAMrE,IAAM,GAAK0B,GAAQ2C,EAAMrE,GAEnC,IAAK,GAAIM,IAAK,EAAGA,GAAK,EAAGA,IACnBgE,EAAMhE,IAAM,GAAKoB,GAAQ4C,EAAMhE,IAE9BN,GAAK,GAAKA,GAAK,IAAY,IAANM,GAAiB,IAANA,IAClCA,GAAK,GAAKA,GAAK,IAAY,IAANN,GAAiB,IAANA,IAChCA,GAAK,GAAKA,GAAK,GAAKM,GAAK,GAAKA,GAAK,EACpCqM,EAAOvI,IAAIC,EAAMrE,EAAGsE,EAAMhE,GAAG,GAAM,GAEnCqM,EAAOvI,IAAIC,EAAMrE,EAAGsE,EAAMhE,GAAG,GAAO,IAc9C,QAASuM,GAAoBF,GAG3B,IAAK,GAFDjL,GAAOiL,EAAOjL,KAET1B,EAAI,EAAGA,EAAI0B,EAAO,EAAG1B,IAAK,CACjC,GAAIiD,GAAQjD,EAAI,GAAM,CACtB2M,GAAOvI,IAAIpE,EAAG,EAAGiD,GAAO,GACxB0J,EAAOvI,IAAI,EAAGpE,EAAGiD,GAAO,IAY5B,QAAS6J,GAAuBH,EAAQrL,GAGtC,IAAK,GAFDY,GAAM6K,EAAiB/K,aAAaV,GAE/BjB,EAAI,EAAGA,EAAI6B,EAAIpB,OAAQT,IAI9B,IAAK,GAHDgE,GAAMnC,EAAI7B,GAAG,GACbiE,EAAMpC,EAAI7B,GAAG,GAERL,GAAK,EAAGA,GAAK,EAAGA,IACvB,IAAK,GAAIM,IAAK,EAAGA,GAAK,EAAGA,KACZ,IAAPN,GAAkB,IAANA,IAAkB,IAAPM,GAAkB,IAANA,GAC9B,IAANN,GAAiB,IAANM,EACZqM,EAAOvI,IAAIC,EAAMrE,EAAGsE,EAAMhE,GAAG,GAAM,GAEnCqM,EAAOvI,IAAIC,EAAMrE,EAAGsE,EAAMhE,GAAG,GAAO,GAa9C,QAAS0M,GAAkBL,EAAQrL,GAKjC,IAAK,GAFD+C,GAAKC,EAAKyH,EAFVrK,EAAOiL,EAAOjL,KACduL,EAAOC,EAAQ1G,eAAelF,GAGzBjB,EAAI,EAAGA,EAAI,GAAIA,IACtBgE,EAAM7C,KAAKC,MAAMpB,EAAI,GACrBiE,EAAMjE,EAAI,EAAIqB,EAAO,EAAI,EACzBqK,EAA4B,IAApBkB,GAAQ5M,EAAK,GAErBsM,EAAOvI,IAAIC,EAAKC,EAAKyH,GAAK,GAC1BY,EAAOvI,IAAIE,EAAKD,EAAK0H,GAAK,GAW9B,QAASoB,GAAiBR,EAAQtH,EAAsBoC,GACtD,GAEIpH,GAAG0L,EAFHrK,EAAOiL,EAAOjL,KACduL,EAAOG,EAAW5G,eAAenB,EAAsBoC,EAG3D,KAAKpH,EAAI,EAAGA,EAAI,GAAIA,IAClB0L,EAA4B,IAApBkB,GAAQ5M,EAAK,GAGjBA,EAAI,EACNsM,EAAOvI,IAAI/D,EAAG,EAAG0L,GAAK,GACb1L,EAAI,EACbsM,EAAOvI,IAAI/D,EAAI,EAAG,EAAG0L,GAAK,GAE1BY,EAAOvI,IAAI1C,EAAO,GAAKrB,EAAG,EAAG0L,GAAK,GAIhC1L,EAAI,EACNsM,EAAOvI,IAAI,EAAG1C,EAAOrB,EAAI,EAAG0L,GAAK,GACxB1L,EAAI,EACbsM,EAAOvI,IAAI,EAAG,GAAK/D,EAAI,EAAI,EAAG0L,GAAK,GAEnCY,EAAOvI,IAAI,EAAG,GAAK/D,EAAI,EAAG0L,GAAK,EAKnCY,GAAOvI,IAAI1C,EAAO,EAAG,EAAG,GAAG,GAS7B,QAAS2L,GAAWV,EAAQnK,GAO1B,IAAK,GANDd,GAAOiL,EAAOjL,KACd4L,GAAO,EACPjJ,EAAM3C,EAAO,EACb6L,EAAW,EACXC,EAAY,EAEPlJ,EAAM5C,EAAO,EAAG4C,EAAM,EAAGA,GAAO,EAGvC,IAFY,IAARA,GAAWA,MAEF,CACX,IAAK,GAAIhE,GAAI,EAAGA,EAAI,EAAGA,IACrB,IAAKqM,EAAOlI,WAAWJ,EAAKC,EAAMhE,GAAI,CACpC,GAAImN,IAAO,CAEPD,GAAYhL,EAAK1B,SACnB2M,EAAiD,IAAvCjL,EAAKgL,KAAeD,EAAY,IAG5CZ,EAAOvI,IAAIC,EAAKC,EAAMhE,EAAGmN,GACzBF,KAEkB,IAAdA,IACFC,IACAD,EAAW,GAOjB,IAFAlJ,GAAOiJ,GAEG,GAAK5L,GAAQ2C,EAAK,CAC1BA,GAAOiJ,EACPA,GAAOA,CACP,SAcR,QAASI,GAAYpM,EAAS+D,EAAsBsI,GAElD,GAAIpK,GAAS,GAAID,EAEjBqK,GAASC,QAAQ,SAAUpL,GAEzBe,EAAOJ,IAAIX,EAAKC,KAAKqB,IAAK,GAS1BP,EAAOJ,IAAIX,EAAKM,YAAaJ,EAAKkI,sBAAsBpI,EAAKC,KAAMnB,IAGnEkB,EAAKO,MAAMQ,IAIb,IAAIsK,GAAiBxH,EAAMyH,wBAAwBxM,GAC/CyM,EAAmBC,EAAOtI,uBAAuBpE,EAAS+D,GAC1D4I,EAA+D,GAArCJ,EAAiBE,EAgB/C,KATIxK,EAAOM,kBAAoB,GAAKoK,GAClC1K,EAAOJ,IAAI,EAAG,GAQTI,EAAOM,kBAAoB,GAAM,GACtCN,EAAOK,OAAO,EAQhB,KAAK,GADDsK,IAAiBD,EAAyB1K,EAAOM,mBAAqB,EACjExD,EAAI,EAAGA,EAAI6N,EAAe7N,IACjCkD,EAAOJ,IAAI9C,EAAI,EAAI,GAAO,IAAM,EAGlC,OAAO8N,GAAgB5K,EAAQjC,EAAS+D,GAY1C,QAAS8I,GAAiBnL,EAAW1B,EAAS+D,GAmC5C,IAAK,GAjCDwI,GAAiBxH,EAAMyH,wBAAwBxM,GAG/CyM,EAAmBC,EAAOtI,uBAAuBpE,EAAS+D,GAG1D+I,EAAqBP,EAAiBE,EAGtCM,EAAgBL,EAAO5I,eAAe9D,EAAS+D,GAG/CiJ,EAAiBT,EAAiBQ,EAClCE,EAAiBF,EAAgBC,EAEjCE,EAAyBhN,KAAKC,MAAMoM,EAAiBQ,GAErDI,EAAwBjN,KAAKC,MAAM2M,EAAqBC,GACxDK,EAAwBD,EAAwB,EAGhDE,EAAUH,EAAyBC,EAGnCG,EAAK,GAAIC,GAAmBF,GAE5BxC,EAAS,EACT2C,EAAS,GAAIC,OAAMV,GACnBW,EAAS,GAAID,OAAMV,GACnBY,EAAc,EACd1L,EAASU,EAAWa,KAAK9B,EAAUO,QAG9B2L,EAAI,EAAGA,EAAIb,EAAea,IAAK,CACtC,GAAIC,GAAWD,EAAIX,EAAiBE,EAAwBC,CAG5DI,GAAOI,GAAK3L,EAAO6I,MAAMD,EAAQA,EAASgD,GAG1CH,EAAOE,GAAKN,EAAGQ,OAAON,EAAOI,IAE7B/C,GAAUgD,EACVF,EAAczN,KAAK6N,IAAIJ,EAAaE,GAKtC,GAEI9O,GAAGL,EAFHwC,EAAOyB,EAAWC,MAAM2J,GACxBpK,EAAQ,CAIZ,KAAKpD,EAAI,EAAGA,EAAI4O,EAAa5O,IAC3B,IAAKL,EAAI,EAAGA,EAAIqO,EAAerO,IACzBK,EAAIyO,EAAO9O,GAAGc,SAChB0B,EAAKiB,KAAWqL,EAAO9O,GAAGK,GAMhC,KAAKA,EAAI,EAAGA,EAAIsO,EAAStO,IACvB,IAAKL,EAAI,EAAGA,EAAIqO,EAAerO,IAC7BwC,EAAKiB,KAAWuL,EAAOhP,GAAGK,EAI9B,OAAOmC,GAYT,QAAS8M,GAAc9M,EAAMlB,EAAS+D,EAAsBoC,GAC1D,GAAIkG,EAEJ,IAAI4B,EAAQ/M,GACVmL,EAAW6B,EAASC,UAAUjN,OACzB,CAAA,GAAoB,gBAATA,GAehB,KAAM,IAAI9B,OAAM,eAdhB,IAAIgP,GAAmBpO,CAEvB,KAAKoO,EAAkB,CACrB,GAAIC,GAAcH,EAASI,SAASpN,EAGpCkN,GAAmBxC,EAAQ2C,sBAAsBF,EAC/CtK,GAKJsI,EAAW6B,EAAS3J,WAAWrD,EAAMkN,GAAoB,IAM3D,GAAII,GAAc5C,EAAQ2C,sBAAsBlC,EAC5CtI,EAGJ,KAAKyK,EACH,KAAM,IAAIpP,OAAM,0DAIlB,IAAKY,GAIE,GAAIA,EAAUwO,EACnB,KAAM,IAAIpP,OAAM,wHAE0CoP,EAAc,WANxExO,GAAUwO,CAUZ,IAAIC,GAAWrC,EAAWpM,EAAS+D,EAAsBsI,GAGrDqC,EAAc3J,EAAMjF,cAAcE,GAClC2O,EAAU,GAAIjM,GAAUgM,EAgC5B,OA7BAtD,GAAmBuD,EAAS3O,GAC5BuL,EAAmBoD,GACnBnD,EAAsBmD,EAAS3O,GAM/B6L,EAAgB8C,EAAS5K,EAAsB,GAE3C/D,GAAW,GACb0L,EAAiBiD,EAAS3O,GAI5B+L,EAAU4C,EAASF,GAEfvH,MAAMf,KAERA,EAAcyI,EAAYtG,YAAYqG,EACpC9C,EAAgBgD,KAAK,KAAMF,EAAS5K,KAIxC6K,EAAYxG,UAAUjC,EAAawI,GAGnC9C,EAAgB8C,EAAS5K,EAAsBoC,IAG7CwI,QAASA,EACT3O,QAASA,EACT+D,qBAAsBA,EACtBoC,YAAaA,EACbkG,SAAUA,GAhdd,GAAI1J,GAAa1D,EAAQ,mBACrB8F,EAAQ9F,EAAQ,WAChB0E,EAAU1E,EAAQ,4BAClB+C,EAAY/C,EAAQ,gBACpByD,EAAYzD,EAAQ,gBACpBwM,EAAmBxM,EAAQ,uBAC3BqM,EAAgBrM,EAAQ,oBACxB2P,EAAc3P,EAAQ,kBACtByN,EAASzN,EAAQ,2BACjBsO,EAAqBtO,EAAQ,0BAC7B2M,EAAU3M,EAAQ,aAClB6M,EAAa7M,EAAQ,iBACrBmC,EAAOnC,EAAQ,UACfiP,EAAWjP,EAAQ,cACnBgP,EAAUhP,EAAQ,UA+ctBjB,GAAQ8Q,OAAS,SAAiB5N,EAAM6N,GACtC,OAAoB,KAAT7N,GAAiC,KAATA,EACjC,KAAM,IAAI9B,OAAM,gBAGlB,IACIY,GACAmF,EAFApB,EAAuBJ,EAAQM,CAenC,YAXuB,KAAZ8K,IAEThL,EAAuBJ,EAAQH,KAAKuL,EAAQhL,qBAAsBJ,EAAQM,GAC1EjE,EAAU4L,EAAQpI,KAAKuL,EAAQ/O,SAC/BmF,EAAOyJ,EAAYpL,KAAKuL,EAAQ5I,aAE5B4I,EAAQC,YACVjK,EAAMkK,kBAAkBF,EAAQC,aAI7BhB,EAAa9M,EAAMlB,EAAS+D,EAAsBoB,MAGxD/B,kBAAkB,GAAG8L,sBAAsB,EAAEC,eAAe,EAAEC,eAAe,EAAEC,0BAA0B,EAAEhL,2BAA2B,EAAEiL,mBAAmB,EAAEC,gBAAgB,GAAGC,iBAAiB,GAAG1N,SAAS,GAAG2N,yBAAyB,GAAGC,aAAa,GAAG3O,UAAU,GAAG4O,YAAY,GAAGC,QAAU,KAAKC,IAAI,SAAS5Q,EAAQhB,EAAOD,GAKtU,QAASuP,GAAoBvC,GAC3BxM,KAAKsR,YAAU1I,GACf5I,KAAKwM,OAASA,EAEVxM,KAAKwM,QAAQxM,KAAKuR,WAAWvR,KAAKwM,QARxC,GAAIrI,GAAa1D,EAAQ,mBACrB+Q,EAAa/Q,EAAQ,gBACrBgR,EAAShR,EAAQ,UAAUgR,MAe/B1C,GAAmB5N,UAAUoQ,WAAa,SAAqB/E,GAE7DxM,KAAKwM,OAASA,EACdxM,KAAKsR,QAAUE,EAAWjF,qBAAqBvM,KAAKwM,SAStDuC,EAAmB5N,UAAUmO,OAAS,SAAiB5M,GACrD,IAAK1C,KAAKsR,QACR,KAAM,IAAI1Q,OAAM,0BAKlB,IAAI8Q,GAAMvN,EAAWC,MAAMpE,KAAKwM,QAC5BmF,EAAaF,EAAOG,QAAQlP,EAAMgP,GAAMhP,EAAK1B,OAAShB,KAAKwM,QAI3DqF,EAAYL,EAAWvF,IAAI0F,EAAY3R,KAAKsR,SAK5CQ,EAAQ9R,KAAKwM,OAASqF,EAAU7Q,MACpC,IAAI8Q,EAAQ,EAAG,CACb,GAAIC,GAAO5N,EAAWC,MAAMpE,KAAKwM,OAGjC,OAFAqF,GAAUG,KAAKD,EAAMD,GAEdC,EAGT,MAAOF,IAGTpS,EAAOD,QAAUuP,IAEdnK,kBAAkB,GAAGqN,eAAe,GAAGxO,OAAS,KAAKyO,IAAI,SAASzR,EAAQhB,EAAOD,GACpF,GAEI2S,GAAQ,kNAIZA,GAAQA,EAAMC,QAAQ,KAAM,MAE5B,IAAIC,GAAO,6BAA+BF,EAAQ,iBAElD3S,GAAQ+H,MAAQ,GAAI+K,QAAOH,EAAO,KAClC3S,EAAQ+S,WAAa,GAAID,QAAO,wBAAyB,KACzD9S,EAAQuF,KAAO,GAAIuN,QAAOD,EAAM,KAChC7S,EAAQgL,QAAU,GAAI8H,QAbR,SAawB,KACtC9S,EAAQqD,aAAe,GAAIyP,QAbR,oBAa6B,IAEhD,IAAIE,GAAa,GAAIF,QAAO,IAAMH,EAAQ,KACtCM,EAAe,GAAIH,QAAO,YAC1BI,EAAoB,GAAIJ,QAAO,yBAEnC9S,GAAQ2L,UAAY,SAAoBwH,GACtC,MAAOH,GAAWI,KAAKD,IAGzBnT,EAAQyL,YAAc,SAAsB0H,GAC1C,MAAOF,GAAaG,KAAKD,IAG3BnT,EAAQ0L,iBAAmB,SAA2ByH,GACpD,MAAOD,GAAkBE,KAAKD,SAG1BE,IAAI,SAASpS,EAAQhB,EAAOD,GAgBlC,QAASsT,GAAqBH,GAC5B,MAAOI,UAASC,mBAAmBL,IAAM3R,OAW3C,QAASiS,GAAaC,EAAOvQ,EAAMgQ,GAIjC,IAHA,GACIvG,GADAyB,KAGkC,QAA9BzB,EAAS8G,EAAMC,KAAKR,KAC1B9E,EAAS7L,MACPU,KAAM0J,EAAO,GACbzI,MAAOyI,EAAOzI,MACdhB,KAAMA,EACN3B,OAAQoL,EAAO,GAAGpL,QAItB,OAAO6M,GAUT,QAASuF,GAAuBpI,GAC9B,GAEIqI,GACAC,EAHAC,EAAUN,EAAYvI,EAAMF,QAAS5H,EAAK4H,QAASQ,GACnDwI,EAAeP,EAAYvI,EAAM7H,aAAcD,EAAKC,aAAcmI,EActE,OAVIzE,GAAMkN,sBACRJ,EAAWJ,EAAYvI,EAAM3F,KAAMnC,EAAKmC,KAAMiG,GAC9CsI,EAAYL,EAAYvI,EAAMnD,MAAO3E,EAAK2E,MAAOyD,KAEjDqI,EAAWJ,EAAYvI,EAAM6H,WAAY3P,EAAKmC,KAAMiG,GACpDsI,MAGSC,EAAQ3B,OAAO4B,EAAcH,EAAUC,GAG/CI,KAAK,SAAUC,EAAIC,GAClB,MAAOD,GAAGhQ,MAAQiQ,EAAGjQ,QAEtBkQ,IAAI,SAAUC,GACb,OACEpR,KAAMoR,EAAIpR,KACVC,KAAMmR,EAAInR,KACV3B,OAAQ8S,EAAI9S,UAapB,QAAS+S,GAAsB/S,EAAQ2B,GACrC,OAAQA,GACN,IAAKC,GAAK4H,QACR,MAAOgB,GAAYzI,cAAc/B,EACnC,KAAK4B,GAAKC,aACR,MAAOJ,GAAiBM,cAAc/B,EACxC,KAAK4B,GAAK2E,MACR,MAAOD,GAAUvE,cAAc/B,EACjC,KAAK4B,GAAKmC,KACR,MAAOD,GAAS/B,cAAc/B,IAUpC,QAASgT,GAAeC,GACtB,MAAOA,GAAKC,OAAO,SAAUC,EAAKC,GAChC,GAAIC,GAAUF,EAAInT,OAAS,GAAK,EAAImT,EAAIA,EAAInT,OAAS,GAAK,IAC1D,OAAIqT,IAAWA,EAAQ1R,OAASyR,EAAKzR,MACnCwR,EAAIA,EAAInT,OAAS,GAAG0B,MAAQ0R,EAAK1R,KAC1ByR,IAGTA,EAAInS,KAAKoS,GACFD,QAoBX,QAASG,GAAYL,GAEnB,IAAK,GADDM,MACKhU,EAAI,EAAGA,EAAI0T,EAAKjT,OAAQT,IAAK,CACpC,GAAIiU,GAAMP,EAAK1T,EAEf,QAAQiU,EAAI7R,MACV,IAAKC,GAAK4H,QACR+J,EAAMvS,MAAMwS,GACR9R,KAAM8R,EAAI9R,KAAMC,KAAMC,EAAKC,aAAc7B,OAAQwT,EAAIxT,SACrD0B,KAAM8R,EAAI9R,KAAMC,KAAMC,EAAKmC,KAAM/D,OAAQwT,EAAIxT,SAEjD,MACF,KAAK4B,GAAKC,aACR0R,EAAMvS,MAAMwS,GACR9R,KAAM8R,EAAI9R,KAAMC,KAAMC,EAAKmC,KAAM/D,OAAQwT,EAAIxT,SAEjD,MACF,KAAK4B,GAAK2E,MACRgN,EAAMvS,MAAMwS,GACR9R,KAAM8R,EAAI9R,KAAMC,KAAMC,EAAKmC,KAAM/D,OAAQ8R,EAAoB0B,EAAI9R,QAErE,MACF,KAAKE,GAAKmC,KACRwP,EAAMvS,OACFU,KAAM8R,EAAI9R,KAAMC,KAAMC,EAAKmC,KAAM/D,OAAQ8R,EAAoB0B,EAAI9R,UAK3E,MAAO6R,GAeT,QAASE,GAAYF,EAAO/S,GAK1B,IAAK,GAJDkT,MACAC,GAAS7C,UACT8C,GAAe,SAEVrU,EAAI,EAAGA,EAAIgU,EAAMvT,OAAQT,IAAK,CAIrC,IAAK,GAHDsU,GAAYN,EAAMhU,GAClBuU,KAEKxS,EAAI,EAAGA,EAAIuS,EAAU7T,OAAQsB,IAAK,CACzC,GAAIyS,GAAOF,EAAUvS,GACjB0S,EAAM,GAAKzU,EAAI+B,CAEnBwS,GAAe9S,KAAKgT,GACpBN,EAAMM,IAASD,KAAMA,EAAME,UAAW,GACtCN,EAAMK,KAEN,KAAK,GAAI5U,GAAI,EAAGA,EAAIwU,EAAY5T,OAAQZ,IAAK,CAC3C,GAAI8U,GAAaN,EAAYxU,EAEzBsU,GAAMQ,IAAeR,EAAMQ,GAAYH,KAAKpS,OAASoS,EAAKpS,MAC5DgS,EAAMO,GAAYF,GAChBjB,EAAqBW,EAAMQ,GAAYD,UAAYF,EAAK/T,OAAQ+T,EAAKpS,MACrEoR,EAAqBW,EAAMQ,GAAYD,UAAWF,EAAKpS,MAEzD+R,EAAMQ,GAAYD,WAAaF,EAAK/T,SAEhC0T,EAAMQ,KAAaR,EAAMQ,GAAYD,UAAYF,EAAK/T,QAE1D2T,EAAMO,GAAYF,GAAOjB,EAAqBgB,EAAK/T,OAAQ+T,EAAKpS,MAC9D,EAAIC,EAAKkI,sBAAsBiK,EAAKpS,KAAMnB,KAKlDoT,EAAcE,EAGhB,IAAK1U,EAAI,EAAGA,EAAIwU,EAAY5T,OAAQZ,IAClCuU,EAAMC,EAAYxU,IAAS,IAAI,CAGjC,QAASyT,IAAKc,EAAOD,MAAOA,GAW9B,QAASS,GAAoBzS,EAAM0S,GACjC,GAAIzS,GACA0S,EAAWzS,EAAKmI,mBAAmBrI,EAKvC,KAHAC,EAAOC,EAAKoC,KAAKoQ,EAAWC,MAGfzS,EAAKmC,MAAQpC,EAAKqB,IAAMqR,EAASrR,IAC5C,KAAM,IAAIpD,OAAM,IAAM8B,EAAO,iCACOE,EAAKwI,SAASzI,GAChD,0BAA4BC,EAAKwI,SAASiK,GAQ9C,QAJI1S,IAASC,EAAK2E,OAAUhB,EAAMkN,uBAChC9Q,EAAOC,EAAKmC,MAGNpC,GACN,IAAKC,GAAK4H,QACR,MAAO,IAAIgB,GAAY9I,EAEzB,KAAKE,GAAKC,aACR,MAAO,IAAIJ,GAAiBC,EAE9B,KAAKE,GAAK2E,MACR,MAAO,IAAID,GAAU5E,EAEvB,KAAKE,GAAKmC,KACR,MAAO,IAAID,GAASpC,IArQ1B,GAAIE,GAAOnC,EAAQ,UACf+K,EAAc/K,EAAQ,kBACtBgC,EAAmBhC,EAAQ,uBAC3BqE,EAAWrE,EAAQ,eACnB6G,EAAY7G,EAAQ,gBACpBiK,EAAQjK,EAAQ,WAChB8F,EAAQ9F,EAAQ,WAChB6U,EAAW7U,EAAQ,aAiRvBjB,GAAQmQ,UAAY,SAAoB4F,GACtC,MAAOA,GAAMrB,OAAO,SAAUC,EAAKK,GAOjC,MANmB,gBAARA,GACTL,EAAInS,KAAKmT,EAAmBX,EAAK,OACxBA,EAAI9R,MACbyR,EAAInS,KAAKmT,EAAmBX,EAAI9R,KAAM8R,EAAI7R,OAGrCwR,QAYX3U,EAAQuG,WAAa,SAAqBrD,EAAMlB,GAQ9C,IAAK,GAPDyS,GAAOb,EAAsB1Q,EAAM6D,EAAMkN,sBAEzCc,EAAQD,EAAWL,GACnBU,EAAQF,EAAWF,EAAO/S,GAC1BgU,EAAOF,EAASG,UAAUd,EAAMd,IAAK,QAAS,OAE9C6B,KACKnV,EAAI,EAAGA,EAAIiV,EAAKxU,OAAS,EAAGT,IACnCmV,EAAc1T,KAAK2S,EAAMD,MAAMc,EAAKjV,IAAIwU,KAG1C,OAAOvV,GAAQmQ,UAAUqE,EAAc0B,KAazClW,EAAQsQ,SAAW,SAAmBpN,GACpC,MAAOlD,GAAQmQ,UACbyD,EAAsB1Q,EAAM6D,EAAMkN,0BAInCkC,sBAAsB,EAAEC,cAAc,EAAEC,eAAe,GAAGvS,SAAS,GAAGwS,iBAAiB,GAAGzK,UAAU,GAAG9I,UAAU,GAAGwT,WAAa,KAAKC,IAAI,SAASvV,EAAQhB,EAAOD,GACrK,GAAIyW,GACAC,GACF,EACA,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAC7C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACtD,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KASxD1W,GAAQ8B,cAAgB,SAAwBE,GAC9C,IAAKA,EAAS,KAAM,IAAIZ,OAAM,wCAC9B,IAAIY,EAAU,GAAKA,EAAU,GAAI,KAAM,IAAIZ,OAAM,4CACjD,OAAiB,GAAVY,EAAc,IASvBhC,EAAQwO,wBAA0B,SAAkCxM,GAClE,MAAO0U,GAAgB1U,IASzBhC,EAAQiH,YAAc,SAAU/D,GAG9B,IAFA,GAAIyT,GAAQ,EAEI,IAATzT,GACLyT,IACAzT,KAAU,CAGZ,OAAOyT,IAGT3W,EAAQiR,kBAAoB,SAA4BlR,GACtD,GAAiB,kBAANA,GACT,KAAM,IAAIqB,OAAM,wCAGlBqV,GAAiB1W,GAGnBC,EAAQiU,mBAAqB,WAC3B,WAAiC,KAAnBwC,GAGhBzW,EAAQgI,OAAS,SAAiB2K,GAChC,MAAO8D,GAAe9D,SAGlBiE,IAAI,SAAS3V,EAAQhB,EAAOD,GAOlCA,EAAQ0G,QAAU,SAAkB1E,GAClC,OAAQkH,MAAMlH,IAAYA,GAAW,GAAKA,GAAW,SAGjD6U,IAAI,SAAS5V,EAAQhB,EAAOD,GAYlC,QAAS8W,GAA6B3T,EAAM3B,EAAQuE,GAClD,IAAK,GAAIgR,GAAiB,EAAGA,GAAkB,GAAIA,IACjD,GAAIvV,GAAUxB,EAAQgX,YAAYD,EAAgBhR,EAAsB5C,GACtE,MAAO4T,GAOb,QAASE,GAAsB9T,EAAMnB,GAEnC,MAAOoB,GAAKkI,sBAAsBnI,EAAMnB,GAAW,EAGrD,QAASkV,GAA2B7I,EAAUrM,GAC5C,GAAImV,GAAY,CAOhB,OALA9I,GAASC,QAAQ,SAAUpL,GACzB,GAAIkU,GAAeH,EAAqB/T,EAAKC,KAAMnB,EACnDmV,IAAaC,EAAelU,EAAKK,kBAG5B4T,EAGT,QAASE,GAA4BhJ,EAAUtI,GAC7C,IAAK,GAAIgR,GAAiB,EAAGA,GAAkB,GAAIA,IAAkB,CAEnE,GADaG,EAA0B7I,EAAU0I,IACnC/W,EAAQgX,YAAYD,EAAgBhR,EAAsB3C,EAAKiI,OAC3E,MAAO0L,IAzCb,GAAIhQ,GAAQ9F,EAAQ,WAChByN,EAASzN,EAAQ,2BACjB0E,EAAU1E,EAAQ,4BAClBmC,EAAOnC,EAAQ,UACfgK,EAAehK,EAAQ,mBACvBgP,EAAUhP,EAAQ,WAIlBqW,EAAUvQ,EAAME,YADV,KAgDVjH,GAAQwF,KAAO,SAAe7B,EAAOiD,GACnC,MAAIqE,GAAavE,QAAQ/C,GAChBwF,SAASxF,EAAO,IAGlBiD,GAYT5G,EAAQgX,YAAc,SAAsBhV,EAAS+D,EAAsB5C,GACzE,IAAK8H,EAAavE,QAAQ1E,GACxB,KAAM,IAAIZ,OAAM,+BAIE,KAAT+B,IAAsBA,EAAOC,EAAKmC,KAG7C,IAAIgJ,GAAiBxH,EAAMyH,wBAAwBxM,GAG/CyM,EAAmBC,EAAOtI,uBAAuBpE,EAAS+D,GAG1D4I,EAA+D,GAArCJ,EAAiBE,EAE/C,IAAItL,IAASC,EAAKiI,MAAO,MAAOsD,EAEhC,IAAI4I,GAAa5I,EAAyBsI,EAAqB9T,EAAMnB,EAGrE,QAAQmB,GACN,IAAKC,GAAK4H,QACR,MAAO9I,MAAKC,MAAOoV,EAAa,GAAM,EAExC,KAAKnU,GAAKC,aACR,MAAOnB,MAAKC,MAAOoV,EAAa,GAAM,EAExC,KAAKnU,GAAK2E,MACR,MAAO7F,MAAKC,MAAMoV,EAAa,GAEjC,KAAKnU,GAAKmC,KACV,QACE,MAAOrD,MAAKC,MAAMoV,EAAa,KAYrCvX,EAAQuQ,sBAAwB,SAAgCrN,EAAM6C,GACpE,GAAIiP,GAEAwC,EAAM7R,EAAQH,KAAKO,EAAsBJ,EAAQM,EAErD,IAAIgK,EAAQ/M,GAAO,CACjB,GAAIA,EAAK1B,OAAS,EAChB,MAAO6V,GAA2BnU,EAAMsU,EAG1C,IAAoB,IAAhBtU,EAAK1B,OACP,MAAO,EAGTwT,GAAM9R,EAAK,OAEX8R,GAAM9R,CAGR,OAAO4T,GAA4B9B,EAAI7R,KAAM6R,EAAIxR,YAAagU,IAahExX,EAAQkH,eAAiB,SAAyBlF,GAChD,IAAKiJ,EAAavE,QAAQ1E,IAAYA,EAAU,EAC9C,KAAM,IAAIZ,OAAM,0BAKlB,KAFA,GAAIgG,GAAIpF,GAAW,GAEZ+E,EAAME,YAAYG,GAAKkQ,GAAW,GACvClQ,GAvJM,MAuJQL,EAAME,YAAYG,GAAKkQ,CAGvC,OAAQtV,IAAW,GAAMoF,KAGxBiK,0BAA0B,EAAEhL,2BAA2B,EAAEvC,SAAS,GAAGf,UAAU,GAAG+I,kBAAkB,GAAG8F,QAAU,KAAK6F,IAAI,SAASxW,EAAQhB,EAAOD,GAQrJ,QAAS0X,GAAcC,EAAYC,EAAQC,EAAMC,EAAMC,GACrD,GAAIC,MAAUlL,MAAMvL,KAAK0W,UAAW,GAChCC,EAAUF,EAAKxW,OACf2W,EAA2C,kBAAtBH,GAAKE,EAAU,EAExC,KAAKC,IAAgBC,IACnB,KAAM,IAAIhX,OAAM,qCAGlB,KAAI+W,EAoBG,CACL,GAAID,EAAU,EACZ,KAAM,IAAI9W,OAAM,6BAYlB,OATgB,KAAZ8W,GACFL,EAAOD,EACPA,EAASE,MAAO1O,IACK,IAAZ8O,GAAkBN,EAAOS,aAClCP,EAAOD,EACPA,EAAOD,EACPA,MAASxO,IAGJ,GAAI1H,SAAQ,SAAU4W,EAASC,GACpC,IACE,GAAIrV,GAAOzC,EAAOqQ,OAAO+G,EAAMC,EAC/BQ,GAAQX,EAAWzU,EAAM0U,EAAQE,IACjC,MAAOnX,GACP4X,EAAO5X,MAtCX,GAAIuX,EAAU,EACZ,KAAM,IAAI9W,OAAM,6BAGF,KAAZ8W,GACFH,EAAKF,EACLA,EAAOD,EACPA,EAASE,MAAO1O,IACK,IAAZ8O,IACLN,EAAOS,gBAA4B,KAAPN,GAC9BA,EAAKD,EACLA,MAAO1O,KAEP2O,EAAKD,EACLA,EAAOD,EACPA,EAAOD,EACPA,MAASxO,IA2Bf,KACE,GAAIlG,GAAOzC,EAAOqQ,OAAO+G,EAAMC,EAC/BC,GAAG,KAAMJ,EAAWzU,EAAM0U,EAAQE,IAClC,MAAOnX,GACPoX,EAAGpX,IA/DP,GAAIyX,GAAanX,EAAQ,iBAErBR,EAASQ,EAAQ,iBACjBuX,EAAiBvX,EAAQ,qBACzBwX,EAAcxX,EAAQ,wBA+D1BjB,GAAQ8Q,OAASrQ,EAAOqQ,OACxB9Q,EAAQ0Y,SAAWhB,EAAa7G,KAAK,KAAM2H,EAAeG,QAC1D3Y,EAAQ4Y,UAAYlB,EAAa7G,KAAK,KAAM2H,EAAeK,iBAG3D7Y,EAAQ4L,SAAW8L,EAAa7G,KAAK,KAAM,SAAU3N,EAAM4V,EAAGhB,GAC5D,MAAOW,GAAYE,OAAOzV,EAAM4U,OAG/BiB,gBAAgB,EAAEC,gBAAgB,GAAGC,oBAAoB,GAAGC,wBAAwB,KAAKC,IAAI,SAASlY,EAAQhB,EAAOD,GAGxH,QAASoZ,GAAaC,EAAKzB,EAAQxV,GACjCiX,EAAIC,UAAU,EAAG,EAAG1B,EAAO2B,MAAO3B,EAAO4B,QAEpC5B,EAAO6B,QAAO7B,EAAO6B,UAC1B7B,EAAO4B,OAASpX,EAChBwV,EAAO2B,MAAQnX,EACfwV,EAAO6B,MAAMD,OAASpX,EAAO,KAC7BwV,EAAO6B,MAAMF,MAAQnX,EAAO,KAG9B,QAASsX,KACP,IACE,MAAOC,UAASC,cAAc,UAC9B,MAAOjZ,GACP,KAAM,IAAIS,OAAM,yCAhBpB,GAAI2F,GAAQ9F,EAAQ,UAoBpBjB,GAAQ2Y,OAAS,SAAiBkB,EAAQjC,EAAQ7G,GAChD,GAAI+G,GAAO/G,EACP+I,EAAWlC,MAEK,KAATE,GAA0BF,GAAWA,EAAOS,aACrDP,EAAOF,EACPA,MAASxO,IAGNwO,IACHkC,EAAWJ,KAGb5B,EAAO/Q,EAAMgT,WAAWjC,EACxB,IAAI1V,GAAO2E,EAAMiT,cAAcH,EAAOlJ,QAAQvO,KAAM0V,GAEhDuB,EAAMS,EAASzB,WAAW,MAC1B4B,EAAQZ,EAAIa,gBAAgB9X,EAAMA,EAMtC,OALA2E,GAAMoT,cAAcF,EAAM/W,KAAM2W,EAAQ/B,GAExCsB,EAAYC,EAAKS,EAAU1X,GAC3BiX,EAAIe,aAAaH,EAAO,EAAG,GAEpBH,GAGT9Z,EAAQ6Y,gBAAkB,SAA0BgB,EAAQjC,EAAQ7G,GAClE,GAAI+G,GAAO/G,MAES,KAAT+G,GAA0BF,GAAWA,EAAOS,aACrDP,EAAOF,EACPA,MAASxO,IAGN0O,IAAMA,KAEX,IAAIgC,GAAW9Z,EAAQ2Y,OAAOkB,EAAQjC,EAAQE,GAE1CuC,EAAOvC,EAAKuC,MAAQ,YACpBC,EAAexC,EAAKwC,gBAExB,OAAOR,GAASlB,UAAUyB,EAAMC,EAAaC,YAG5CxX,UAAU,KAAKyX,IAAI,SAASvZ,EAAQhB,EAAOD,GAG9C,QAASya,GAAgBC,EAAOC,GAC9B,GAAIC,GAAQF,EAAMvZ,EAAI,IAClBgS,EAAMwH,EAAS,KAAOD,EAAMG,IAAM,GAEtC,OAAOD,GAAQ,EACXzH,EAAM,IAAMwH,EAAS,aAAeC,EAAME,QAAQ,GAAGhO,MAAM,GAAK,IAChEqG,EAGN,QAAS4H,GAAQC,EAAKxT,EAAGI,GACvB,GAAIuL,GAAM6H,EAAMxT,CAGhB,YAFiB,KAANI,IAAmBuL,GAAO,IAAMvL,GAEpCuL,EAGT,QAAS8H,GAAU/X,EAAMd,EAAM8Y,GAM7B,IAAK,GALDlF,GAAO,GACPmF,EAAS,EACTC,GAAS,EACTC,EAAa,EAERta,EAAI,EAAGA,EAAImC,EAAK1B,OAAQT,IAAK,CACpC,GAAIiE,GAAM9C,KAAKC,MAAMpB,EAAIqB,GACrB2C,EAAM7C,KAAKC,MAAMpB,EAAIqB,EAEpB4C,IAAQoW,IAAQA,GAAS,GAE1BlY,EAAKnC,IACPsa,IAEMta,EAAI,GAAKiE,EAAM,GAAK9B,EAAKnC,EAAI,KACjCiV,GAAQoF,EACJL,EAAO,IAAK/V,EAAMkW,EAAQ,GAAMnW,EAAMmW,GACtCH,EAAO,IAAKI,EAAQ,GAExBA,EAAS,EACTC,GAAS,GAGLpW,EAAM,EAAI5C,GAAQc,EAAKnC,EAAI,KAC/BiV,GAAQ+E,EAAO,IAAKM,GACpBA,EAAa,IAGfF,IAIJ,MAAOnF,GAnDT,GAAIjP,GAAQ9F,EAAQ,UAsDpBjB,GAAQ2Y,OAAS,SAAiBkB,EAAQ9I,EAASgH,GACjD,GAAID,GAAO/Q,EAAMgT,WAAWhJ,GACxB3O,EAAOyX,EAAOlJ,QAAQvO,KACtBc,EAAO2W,EAAOlJ,QAAQzN,KACtBoY,EAAalZ,EAAqB,EAAd0V,EAAKoD,OAEzBK,EAAMzD,EAAK4C,MAAMc,MAAMra,EAEvB,SAAWsZ,EAAe3C,EAAK4C,MAAMc,MAAO,QAC5C,YAAcF,EAAa,IAAMA,EAAa,SAF9C,GAIAtF,EACF,SAAWyE,EAAe3C,EAAK4C,MAAMvM,KAAM,UAC3C,OAAS8M,EAAS/X,EAAMd,EAAM0V,EAAKoD,QAAU,MAE3CO,EAAU,gBAAuBH,EAAa,IAAMA,EAAa,IAEjE/B,EAASzB,EAAKyB,MAAa,UAAYzB,EAAKyB,MAAQ,aAAezB,EAAKyB,MAAQ,KAA1D,GAEtBmC,EAAS,2CAA6CnC,EAAQkC,EAAU,iCAAmCF,EAAKvF,EAAO,UAM3H,OAJkB,kBAAP+B,IACTA,EAAG,KAAM2D,GAGJA,KAGN3Y,UAAU,KAAK4Y,IAAI,SAAS1a,EAAQhB,EAAOD,GAC9C,QAAS4b,GAAUf,GAKjB,GAJmB,gBAARA,KACTA,EAAMA,EAAIjP,YAGO,gBAARiP,GACT,KAAM,IAAIzZ,OAAM,wCAGlB,IAAIya,GAAUhB,EAAI/N,QAAQ8F,QAAQ,IAAK,IAAIkJ,MAAM,GACjD,IAAID,EAAQra,OAAS,GAAwB,IAAnBqa,EAAQra,QAAgBqa,EAAQra,OAAS,EACjE,KAAM,IAAIJ,OAAM,sBAAwByZ,EAInB,KAAnBgB,EAAQra,QAAmC,IAAnBqa,EAAQra,SAClCqa,EAAUpM,MAAM9N,UAAUyQ,OAAO2J,SAAUF,EAAQxH,IAAI,SAAUrT,GAC/D,OAAQA,EAAGA,OAKQ,IAAnB6a,EAAQra,QAAcqa,EAAQrZ,KAAK,IAAK,IAE5C,IAAIwZ,GAAW7S,SAAS0S,EAAQI,KAAK,IAAK,GAE1C,QACEvb,EAAIsb,GAAY,GAAM,IACtB5b,EAAI4b,GAAY,GAAM,IACtBpM,EAAIoM,GAAY,EAAK,IACrB7a,EAAc,IAAX6a,EACHnB,IAAK,IAAMgB,EAAQ/O,MAAM,EAAG,GAAGmP,KAAK,KAIxCjc,EAAQ+Z,WAAa,SAAqBhJ,GACnCA,IAASA,MACTA,EAAQ2J,QAAO3J,EAAQ2J,SAE5B,IAAIQ,OAAmC,KAAnBnK,EAAQmK,QACP,OAAnBnK,EAAQmK,QACRnK,EAAQmK,OAAS,EAAI,EAAInK,EAAQmK,OAE/B3B,EAAQxI,EAAQwI,OAASxI,EAAQwI,OAAS,GAAKxI,EAAQwI,UAAQnQ,GAC/D8S,EAAQnL,EAAQmL,OAAS,CAE7B,QACE3C,MAAOA,EACP2C,MAAO3C,EAAQ,EAAI2C,EACnBhB,OAAQA,EACRR,OACEvM,KAAMyN,EAAS7K,EAAQ2J,MAAMvM,MAAQ,aACrCqN,MAAOI,EAAS7K,EAAQ2J,MAAMc,OAAS,cAEzCnB,KAAMtJ,EAAQsJ,KACdC,aAAcvJ,EAAQuJ,mBAI1Bta,EAAQmc,SAAW,SAAmBC,EAAQtE,GAC5C,MAAOA,GAAKyB,OAASzB,EAAKyB,OAAS6C,EAAuB,EAAdtE,EAAKoD,OAC7CpD,EAAKyB,OAAS6C,EAAuB,EAAdtE,EAAKoD,QAC5BpD,EAAKoE,OAGXlc,EAAQga,cAAgB,SAAwBoC,EAAQtE,GACtD,GAAIoE,GAAQlc,EAAQmc,SAASC,EAAQtE,EACrC,OAAO5V,MAAKC,OAAOia,EAAuB,EAAdtE,EAAKoD,QAAcgB,IAGjDlc,EAAQma,cAAgB,SAAwBkC,EAASC,EAAIxE,GAQ3D,IAAK,GAPD1V,GAAOka,EAAG3L,QAAQvO,KAClBc,EAAOoZ,EAAG3L,QAAQzN,KAClBgZ,EAAQlc,EAAQmc,SAAS/Z,EAAM0V,GAC/ByE,EAAara,KAAKC,OAAOC,EAAqB,EAAd0V,EAAKoD,QAAcgB,GACnDM,EAAe1E,EAAKoD,OAASgB,EAC7BO,GAAW3E,EAAK4C,MAAMc,MAAO1D,EAAK4C,MAAMvM,MAEnCpN,EAAI,EAAGA,EAAIwb,EAAYxb,IAC9B,IAAK,GAAI+B,GAAI,EAAGA,EAAIyZ,EAAYzZ,IAAK,CACnC,GAAI4Z,GAAgC,GAAtB3b,EAAIwb,EAAazZ,GAC3B6Z,EAAU7E,EAAK4C,MAAMc,KAEzB,IAAIza,GAAKyb,GAAgB1Z,GAAK0Z,GAC5Bzb,EAAIwb,EAAaC,GAAgB1Z,EAAIyZ,EAAaC,EAAc,CAChE,GAAII,GAAO1a,KAAKC,OAAOpB,EAAIyb,GAAgBN,GACvCW,EAAO3a,KAAKC,OAAOW,EAAI0Z,GAAgBN,EAC3CS,GAAUF,EAAQvZ,EAAK0Z,EAAOxa,EAAOya,GAAQ,EAAI,GAGnDR,EAAQK,KAAYC,EAAQjc,EAC5B2b,EAAQK,KAAYC,EAAQvc,EAC5Bic,EAAQK,KAAYC,EAAQ/M,EAC5ByM,EAAQK,GAAUC,EAAQxb,SAK1B2b,IAAI,SAAS7b,EAAQhB,EAAOD,GAQlC,YAqBA,SAASiS,GAAQ8K,EAAKlQ,EAAQrL,GAC5B,MAAKyQ,GAAO+K,qBAAyBxc,eAAgByR,GAIlC,gBAAR8K,GACFE,EAAYzc,KAAMuc,GAGpBvX,EAAKhF,KAAMuc,EAAKlQ,EAAQrL,GAPtB,GAAIyQ,GAAO8K,EAAKlQ,EAAQrL,GA0BnC,QAAS0b,GAAS1b,GAGhB,GAAIA,GAAU2b,EACZ,KAAM,IAAIC,YAAW,0DACaD,EAAavR,SAAS,IAAM,SAEhE,OAAgB,GAATpK,EAGT,QAAS6b,GAAOC,GACd,MAAOA,KAAQA,EAGjB,QAASC,GAAcC,EAAMhc,GAC3B,GAAIic,EAaJ,OAZIxL,GAAO+K,qBACTS,EAAM,GAAIC,YAAWlc,GACrBic,EAAIE,UAAY1L,EAAOtQ,YAGvB8b,EAAMD,EACM,OAARC,IACFA,EAAM,GAAIxL,GAAOzQ,IAEnBic,EAAIjc,OAASA,GAGRic,EAGT,QAASR,GAAaO,EAAMpb,GAC1B,GAAIqb,GAAMF,EAAaC,EAAMpb,EAAO,EAAI,EAAoB,EAAhB8a,EAAQ9a,GAEpD,KAAK6P,EAAO+K,oBACV,IAAK,GAAIjc,GAAI,EAAGA,EAAIqB,IAAQrB,EAC1B0c,EAAI1c,GAAK,CAIb,OAAO0c,GAGT,QAASlX,GAAYiX,EAAMhX,GACzB,GAAIhF,GAA8B,EAArBoc,EAAWpX,GACpBiX,EAAMF,EAAaC,EAAMhc,GAEzBqc,EAASJ,EAAIha,MAAM+C,EASvB,OAPIqX,KAAWrc,IAIbic,EAAMA,EAAI3Q,MAAM,EAAG+Q,IAGdJ,EAGT,QAASK,GAAeN,EAAMzH,GAG5B,IAAK,GAFDvU,GAASuU,EAAMvU,OAAS,EAAI,EAA4B,EAAxB0b,EAAQnH,EAAMvU,QAC9Cic,EAAMF,EAAaC,EAAMhc,GACpBT,EAAI,EAAGA,EAAIS,EAAQT,GAAK,EAC/B0c,EAAI1c,GAAgB,IAAXgV,EAAMhV,EAEjB,OAAO0c,GAGT,QAASM,GAAiBP,EAAMzH,EAAOiI,EAAYxc,GACjD,GAAIwc,EAAa,GAAKjI,EAAM6H,WAAaI,EACvC,KAAM,IAAIZ,YAAW,4BAGvB,IAAIrH,EAAM6H,WAAaI,GAAcxc,GAAU,GAC7C,KAAM,IAAI4b,YAAW,4BAGvB,IAAIK,EAiBJ,OAfEA,OADiBrU,KAAf4U,OAAuC5U,KAAX5H,EACxB,GAAIkc,YAAW3H,OACD3M,KAAX5H,EACH,GAAIkc,YAAW3H,EAAOiI,GAEtB,GAAIN,YAAW3H,EAAOiI,EAAYxc,GAGtCyQ,EAAO+K,oBAETS,EAAIE,UAAY1L,EAAOtQ,UAGvB8b,EAAMK,EAAcN,EAAMC,GAGrBA,EAGT,QAASQ,GAAYT,EAAMlJ,GACzB,GAAIrC,EAAOiM,SAAS5J,GAAM,CACxB,GAAI6J,GAA4B,EAAtBjB,EAAQ5I,EAAI9S,QAClBic,EAAMF,EAAaC,EAAMW,EAE7B,OAAmB,KAAfV,EAAIjc,OACCic,GAGTnJ,EAAI9B,KAAKiL,EAAK,EAAG,EAAGU,GACbV,GAGT,GAAInJ,EAAK,CACP,GAA4B,mBAAhB8J,cACR9J,EAAIrQ,iBAAkBma,cAAgB,UAAY9J,GACpD,MAA0B,gBAAfA,GAAI9S,QAAuB6b,EAAM/I,EAAI9S,QACvC+b,EAAaC,EAAM,GAErBM,EAAcN,EAAMlJ,EAG7B,IAAiB,WAAbA,EAAI+F,MAAqB5K,MAAMQ,QAAQqE,EAAIpR,MAC7C,MAAO4a,GAAcN,EAAMlJ,EAAIpR,MAInC,KAAM,IAAImb,WAAU,sFAGtB,QAASC,GAAa9X,EAAQ+X,GAC5BA,EAAQA,GAAS1T,EAAAA,CAMjB,KAAK,GALD2T,GACAhd,EAASgF,EAAOhF,OAChBid,EAAgB,KAChBC,KAEK3d,EAAI,EAAGA,EAAIS,IAAUT,EAAG,CAI/B,IAHAyd,EAAYhY,EAAOmY,WAAW5d,IAGd,OAAUyd,EAAY,MAAQ,CAE5C,IAAKC,EAAe,CAElB,GAAID,EAAY,MAAQ,EAEjBD,GAAS,IAAM,GAAGG,EAAMlc,KAAK,IAAM,IAAM,IAC9C,UACK,GAAIzB,EAAI,IAAMS,EAAQ,EAEtB+c,GAAS,IAAM,GAAGG,EAAMlc,KAAK,IAAM,IAAM,IAC9C,UAIFic,EAAgBD,CAEhB,UAIF,GAAIA,EAAY,MAAQ,EACjBD,GAAS,IAAM,GAAGG,EAAMlc,KAAK,IAAM,IAAM,KAC9Cic,EAAgBD,CAChB,UAIFA,EAAkE,OAArDC,EAAgB,OAAU,GAAKD,EAAY,WAC/CC,KAEJF,GAAS,IAAM,GAAGG,EAAMlc,KAAK,IAAM,IAAM,IAMhD,IAHAic,EAAgB,KAGZD,EAAY,IAAM,CACpB,IAAKD,GAAS,GAAK,EAAG,KACtBG,GAAMlc,KAAKgc,OACN,IAAIA,EAAY,KAAO,CAC5B,IAAKD,GAAS,GAAK,EAAG,KACtBG,GAAMlc,KACJgc,GAAa,EAAM,IACP,GAAZA,EAAmB,SAEhB,IAAIA,EAAY,MAAS,CAC9B,IAAKD,GAAS,GAAK,EAAG,KACtBG,GAAMlc,KACJgc,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,SAEhB,CAAA,KAAIA,EAAY,SASrB,KAAM,IAAIpd,OAAM,qBARhB,KAAKmd,GAAS,GAAK,EAAG,KACtBG,GAAMlc,KACJgc,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,MAOzB,MAAOE,GAGT,QAASd,GAAYpX,GACnB,MAAIyL,GAAOiM,SAAS1X,GACXA,EAAOhF,OAEW,mBAAhB4c,cAA6D,kBAAvBA,aAAYQ,SACxDR,YAAYQ,OAAOpY,IAAWA,YAAkB4X,cAC5C5X,EAAOoX,YAEM,gBAAXpX,KACTA,EAAS,GAAKA,GAIJ,IADFA,EAAOhF,OACK,EAEf8c,EAAY9X,GAAQhF,QAG7B,QAASqd,GAAYC,EAAKC,EAAKlS,EAAQrL,GACrC,IAAK,GAAIT,GAAI,EAAGA,EAAIS,KACbT,EAAI8L,GAAUkS,EAAIvd,QAAYT,GAAK+d,EAAItd,UADhBT,EAE5Bge,EAAIhe,EAAI8L,GAAUiS,EAAI/d,EAExB,OAAOA,GAGT,QAASie,GAAWvB,EAAKjX,EAAQqG,EAAQrL,GACvC,MAAOqd,GAAWP,EAAY9X,EAAQiX,EAAIjc,OAASqL,GAAS4Q,EAAK5Q,EAAQrL,GAG3E,QAASgE,GAAMgY,EAAM7Z,EAAOkJ,EAAQrL,GAClC,GAAqB,gBAAVmC,GACT,KAAM,IAAI0a,WAAU,wCAGtB,OAA2B,mBAAhBD,cAA+Bza,YAAiBya,aAClDL,EAAgBP,EAAM7Z,EAAOkJ,EAAQrL,GAGzB,gBAAVmC,GACF4C,EAAWiX,EAAM7Z,EAAOkJ,GAG1BoR,EAAWT,EAAM7Z,GAzS1B,GAAIsM,GAAUhP,EAAQ,UAatBgR,GAAO+K,oBAXP,WAEE,IACE,GAAIiC,GAAM,GAAIvB,YAAW,EAEzB,OADAuB,GAAItB,WAAaA,UAAWD,WAAW/b,UAAWud,IAAK,WAAc,MAAO,MACvD,KAAdD,EAAIC,MACX,MAAOve,GACP,OAAO,KAMX,IAAIwc,GAAelL,EAAO+K,oBACpB,WACA,UAcF/K,GAAO+K,sBACT/K,EAAOtQ,UAAUgc,UAAYD,WAAW/b,UACxCsQ,EAAO0L,UAAYD,WAGG,mBAAXyB,SAA0BA,OAAOC,SACxCnN,EAAOkN,OAAOC,WAAanN,GAC7BxH,OAAO4U,eAAepN,EAAQkN,OAAOC,SACnCzb,MAAO,KACP2b,cAAc,EACdC,YAAY,EACZC,UAAU,KAkQhBvN,EAAOtQ,UAAU8B,MAAQ,SAAgB+C,EAAQqG,EAAQrL,OAExC4H,KAAXyD,GACFrL,EAAShB,KAAKgB,OACdqL,EAAS,OAEWzD,KAAX5H,GAA0C,gBAAXqL,IACxCrL,EAAShB,KAAKgB,OACdqL,EAAS,GAEA4S,SAAS5S,KAClBA,GAAkB,EACd4S,SAASje,GACXA,GAAkB,EAElBA,MAAS4H,GAIb,IAAIsW,GAAYlf,KAAKgB,OAASqL,CAG9B,SAFezD,KAAX5H,GAAwBA,EAASke,KAAWle,EAASke,GAEpDlZ,EAAOhF,OAAS,IAAMA,EAAS,GAAKqL,EAAS,IAAOA,EAASrM,KAAKgB,OACrE,KAAM,IAAI4b,YAAW,yCAGvB,OAAO4B,GAAUxe,KAAMgG,EAAQqG,EAAQrL,IAGzCyQ,EAAOtQ,UAAUmL,MAAQ,SAAgBwF,EAAOqN,GAC9C,GAAIxB,GAAM3d,KAAKgB,MACf8Q,KAAUA,EACVqN,MAAcvW,KAARuW,EAAoBxB,IAAQwB,EAE9BrN,EAAQ,GACVA,GAAS6L,GACG,IAAG7L,EAAQ,GACdA,EAAQ6L,IACjB7L,EAAQ6L,GAGNwB,EAAM,GACRA,GAAOxB,GACG,IAAGwB,EAAM,GACVA,EAAMxB,IACfwB,EAAMxB,GAGJwB,EAAMrN,IAAOqN,EAAMrN,EAEvB,IAAIsN,EACJ,IAAI3N,EAAO+K,oBACT4C,EAASpf,KAAKqf,SAASvN,EAAOqN,GAE9BC,EAAOjC,UAAY1L,EAAOtQ,cACrB,CACL,GAAIme,GAAWH,EAAMrN,CACrBsN,GAAS,GAAI3N,GAAO6N,MAAU1W,GAC9B,KAAK,GAAIrI,GAAI,EAAGA,EAAI+e,IAAY/e,EAC9B6e,EAAO7e,GAAKP,KAAKO,EAAIuR,GAIzB,MAAOsN,IAGT3N,EAAOtQ,UAAU6Q,KAAO,SAAeuN,EAAQC,EAAa1N,EAAOqN,GAQjE,GAPKrN,IAAOA,EAAQ,GACfqN,GAAe,IAARA,IAAWA,EAAMnf,KAAKgB,QAC9Bwe,GAAeD,EAAOve,SAAQwe,EAAcD,EAAOve,QAClDwe,IAAaA,EAAc,GAC5BL,EAAM,GAAKA,EAAMrN,IAAOqN,EAAMrN,GAG9BqN,IAAQrN,EAAO,MAAO,EAC1B,IAAsB,IAAlByN,EAAOve,QAAgC,IAAhBhB,KAAKgB,OAAc,MAAO,EAGrD,IAAIwe,EAAc,EAChB,KAAM,IAAI5C,YAAW,4BAEvB,IAAI9K,EAAQ,GAAKA,GAAS9R,KAAKgB,OAAQ,KAAM,IAAI4b,YAAW,4BAC5D,IAAIuC,EAAM,EAAG,KAAM,IAAIvC,YAAW,0BAG9BuC,GAAMnf,KAAKgB,SAAQme,EAAMnf,KAAKgB,QAC9Bue,EAAOve,OAASwe,EAAcL,EAAMrN,IACtCqN,EAAMI,EAAOve,OAASwe,EAAc1N,EAGtC,IACIvR,GADAod,EAAMwB,EAAMrN,CAGhB,IAAI9R,OAASuf,GAAUzN,EAAQ0N,GAAeA,EAAcL,EAE1D,IAAK5e,EAAIod,EAAM,EAAGpd,GAAK,IAAKA,EAC1Bgf,EAAOhf,EAAIif,GAAexf,KAAKO,EAAIuR,OAEhC,IAAI6L,EAAM,MAASlM,EAAO+K,oBAE/B,IAAKjc,EAAI,EAAGA,EAAIod,IAAOpd,EACrBgf,EAAOhf,EAAIif,GAAexf,KAAKO,EAAIuR,OAGrCoL,YAAW/b,UAAUmD,IAAIvD,KACvBwe,EACAvf,KAAKqf,SAASvN,EAAOA,EAAQ6L,GAC7B6B,EAIJ,OAAO7B,IAGTlM,EAAOtQ,UAAUse,KAAO,SAAe3C,EAAKhL,EAAOqN,GAEjD,GAAmB,gBAARrC,IAOT,GANqB,gBAAVhL,IACTA,EAAQ,EACRqN,EAAMnf,KAAKgB,QACa,gBAARme,KAChBA,EAAMnf,KAAKgB,QAEM,IAAf8b,EAAI9b,OAAc,CACpB,GAAIH,GAAOic,EAAIqB,WAAW,EACtBtd,GAAO,MACTic,EAAMjc,QAGc,gBAARic,KAChBA,GAAY,IAId,IAAIhL,EAAQ,GAAK9R,KAAKgB,OAAS8Q,GAAS9R,KAAKgB,OAASme,EACpD,KAAM,IAAIvC,YAAW,qBAGvB,IAAIuC,GAAOrN,EACT,MAAO9R,KAGT8R,MAAkB,EAClBqN,MAAcvW,KAARuW,EAAoBnf,KAAKgB,OAASme,IAAQ,EAE3CrC,IAAKA,EAAM,EAEhB,IAAIvc,EACJ,IAAmB,gBAARuc,GACT,IAAKvc,EAAIuR,EAAOvR,EAAI4e,IAAO5e,EACzBP,KAAKO,GAAKuc,MAEP,CACL,GAAIoB,GAAQzM,EAAOiM,SAASZ,GACxBA,EACA,GAAIrL,GAAOqL,GACXa,EAAMO,EAAMld,MAChB,KAAKT,EAAI,EAAGA,EAAI4e,EAAMrN,IAASvR,EAC7BP,KAAKO,EAAIuR,GAASoM,EAAM3d,EAAIod,GAIhC,MAAO3d,OAGTyR,EAAOG,OAAS,SAAiB8N,EAAM1e,GACrC,IAAKyO,EAAQiQ,GACX,KAAM,IAAI7B,WAAU,8CAGtB,IAAoB,IAAhB6B,EAAK1e,OACP,MAAO+b,GAAa,KAAM,EAG5B,IAAIxc,EACJ,QAAeqI,KAAX5H,EAEF,IADAA,EAAS,EACJT,EAAI,EAAGA,EAAImf,EAAK1e,SAAUT,EAC7BS,GAAU0e,EAAKnf,GAAGS,MAItB,IAAIyC,GAASgZ,EAAY,KAAMzb,GAC3BoB,EAAM,CACV,KAAK7B,EAAI,EAAGA,EAAImf,EAAK1e,SAAUT,EAAG,CAChC,GAAI0c,GAAMyC,EAAKnf,EACf,KAAKkR,EAAOiM,SAAST,GACnB,KAAM,IAAIY,WAAU,8CAEtBZ,GAAIjL,KAAKvO,EAAQrB,GACjBA,GAAO6a,EAAIjc,OAEb,MAAOyC,IAGTgO,EAAO2L,WAAaA,EAEpB3L,EAAOtQ,UAAUwe,WAAY,EAC7BlO,EAAOiM,SAAW,SAAmBtO,GACnC,QAAe,MAALA,IAAaA,EAAEuQ,YAG3BlgB,EAAOD,QAAQ4E,MAAQ,SAAUxC,GAC/B,GAAI6B,GAAS,GAAIgO,GAAO7P,EAExB,OADA6B,GAAOgc,KAAK,GACLhc,GAGThE,EAAOD,QAAQwF,KAAO,SAAUtC,GAC9B,MAAO,IAAI+O,GAAO/O,MAGjB0O,QAAU,KAAKwO,IAAI,SAASnf,EAAQhB,EAAOD,GAC9C,YAqBA,SAASqgB,GAASC,GAChB,GAAInC,GAAMmC,EAAI9e,MAEd,IAAI2c,EAAM,EAAI,EACZ,KAAM,IAAI/c,OAAM,iDAKlB,IAAImf,GAAWD,EAAI1c,QAAQ,IAO3B,QANkB,IAAd2c,IAAiBA,EAAWpC,IAMxBoC,EAJcA,IAAapC,EAC/B,EACA,EAAKoC,EAAW,GAMtB,QAAS3C,GAAY0C,GACnB,GAAIE,GAAOH,EAAQC,GACfC,EAAWC,EAAK,GAChBC,EAAkBD,EAAK,EAC3B,OAAuC,IAA9BD,EAAWE,GAAuB,EAAKA,EAGlD,QAASC,GAAaJ,EAAKC,EAAUE,GACnC,MAAuC,IAA9BF,EAAWE,GAAuB,EAAKA,EAGlD,QAASE,GAAaL,GACpB,GAAIM,GAcA7f,EAbAyf,EAAOH,EAAQC,GACfC,EAAWC,EAAK,GAChBC,EAAkBD,EAAK,GAEvBvB,EAAM,GAAI4B,GAAIH,EAAYJ,EAAKC,EAAUE,IAEzCK,EAAU,EAGV3C,EAAMsC,EAAkB,EACxBF,EAAW,EACXA,CAGJ,KAAKxf,EAAI,EAAGA,EAAIod,EAAKpd,GAAK,EACxB6f,EACGG,EAAUT,EAAI3B,WAAW5d,KAAO,GAChCggB,EAAUT,EAAI3B,WAAW5d,EAAI,KAAO,GACpCggB,EAAUT,EAAI3B,WAAW5d,EAAI,KAAO,EACrCggB,EAAUT,EAAI3B,WAAW5d,EAAI,IAC/Bke,EAAI6B,KAAcF,GAAO,GAAM,IAC/B3B,EAAI6B,KAAcF,GAAO,EAAK,IAC9B3B,EAAI6B,KAAmB,IAANF,CAmBnB,OAhBwB,KAApBH,IACFG,EACGG,EAAUT,EAAI3B,WAAW5d,KAAO,EAChCggB,EAAUT,EAAI3B,WAAW5d,EAAI,KAAO,EACvCke,EAAI6B,KAAmB,IAANF,GAGK,IAApBH,IACFG,EACGG,EAAUT,EAAI3B,WAAW5d,KAAO,GAChCggB,EAAUT,EAAI3B,WAAW5d,EAAI,KAAO,EACpCggB,EAAUT,EAAI3B,WAAW5d,EAAI,KAAO,EACvCke,EAAI6B,KAAcF,GAAO,EAAK,IAC9B3B,EAAI6B,KAAmB,IAANF,GAGZ3B,EAGT,QAAS+B,GAAiB3c,GACxB,MAAO4c,GAAO5c,GAAO,GAAK,IACxB4c,EAAO5c,GAAO,GAAK,IACnB4c,EAAO5c,GAAO,EAAI,IAClB4c,EAAa,GAAN5c,GAGX,QAAS6c,GAAaC,EAAO7O,EAAOqN,GAGlC,IAAK,GAFDiB,GACAQ,KACKrgB,EAAIuR,EAAOvR,EAAI4e,EAAK5e,GAAK,EAChC6f,GACIO,EAAMpgB,IAAM,GAAM,WAClBogB,EAAMpgB,EAAI,IAAM,EAAK,QACP,IAAfogB,EAAMpgB,EAAI,IACbqgB,EAAO5e,KAAKwe,EAAgBJ,GAE9B,OAAOQ,GAAOnF,KAAK,IAGrB,QAASoF,GAAeF,GAQtB,IAAK,GAPDP,GACAzC,EAAMgD,EAAM3f,OACZ8f,EAAanD,EAAM,EACnBoD,KAIKxgB,EAAI,EAAGygB,EAAOrD,EAAMmD,EAAYvgB,EAAIygB,EAAMzgB,GAH9B,MAInBwgB,EAAM/e,KAAK0e,EACTC,EAAOpgB,EAAIA,EALM,MAKgBygB,EAAOA,EAAQzgB,EAL/B,OA2BrB,OAjBmB,KAAfugB,GACFV,EAAMO,EAAMhD,EAAM,GAClBoD,EAAM/e,KACJye,EAAOL,GAAO,GACdK,EAAQL,GAAO,EAAK,IACpB,OAEsB,IAAfU,IACTV,GAAOO,EAAMhD,EAAM,IAAM,GAAKgD,EAAMhD,EAAM,GAC1CoD,EAAM/e,KACJye,EAAOL,GAAO,IACdK,EAAQL,GAAO,EAAK,IACpBK,EAAQL,GAAO,EAAK,IACpB,MAIGW,EAAMtF,KAAK,IApJpBjc,EAAQ4d,WAAaA,EACrB5d,EAAQ2gB,YAAcA,EACtB3gB,EAAQqhB,cAAgBA,CAOxB,KAAK,GALDJ,MACAF,KACAF,EAA4B,mBAAfnD,YAA6BA,WAAajO,MAEvDpO,EAAO,mEACFN,EAAI,EAAGod,EAAM9c,EAAKG,OAAQT,EAAIod,IAAOpd,EAC5CkgB,EAAOlgB,GAAKM,EAAKN;2KACjBggB,EAAU1f,EAAKsd,WAAW5d,IAAMA,CAKlCggB,GAAU,IAAIpC,WAAW,IAAM,GAC/BoC,EAAU,IAAIpC,WAAW,IAAM,QAsIzB8C,IAAI,SAASxgB,EAAQhB,EAAOD,GASlC,YAqEA,SAASud,GAAc/b,GACrB,GAAIA,EAAS2b,EACX,KAAM,IAAIC,YAAW,cAAgB5b,EAAS,iCAGhD,IAAIic,GAAM,GAAIC,YAAWlc,EAEzB,OADAiJ,QAAOiX,eAAejE,EAAKxL,EAAOtQ,WAC3B8b,EAaT,QAASxL,GAAQ8K,EAAK4E,EAAkBngB,GAEtC,GAAmB,gBAARub,GAAkB,CAC3B,GAAgC,gBAArB4E,GACT,KAAM,IAAItD,WACR,qEAGJ,OAAOpB,GAAYF,GAErB,MAAOvX,GAAKuX,EAAK4E,EAAkBngB,GAgBrC,QAASgE,GAAM7B,EAAOge,EAAkBngB,GACtC,GAAqB,gBAAVmC,GACT,MAAO4C,GAAW5C,EAAOge,EAG3B,IAAIvD,YAAYQ,OAAOjb,GACrB,MAAOma,GAAcna,EAGvB,IAAa,MAATA,EACF,KAAM,IAAI0a,WACR,wHACiD1a,GAIrD,IAAIie,EAAWje,EAAOya,cACjBza,GAASie,EAAWje,EAAMM,OAAQma,aACrC,MAAOL,GAAgBpa,EAAOge,EAAkBngB,EAGlD,IAAqB,gBAAVmC,GACT,KAAM,IAAI0a,WACR,wEAIJ,IAAIwD,GAAUle,EAAMke,SAAWle,EAAMke,SACrC,IAAe,MAAXA,GAAmBA,IAAYle,EACjC,MAAOsO,GAAOzM,KAAKqc,EAASF,EAAkBngB,EAGhD,IAAIoO,GAAIqO,EAAWta,EACnB,IAAIiM,EAAG,MAAOA,EAEd,IAAsB,mBAAXuP,SAAgD,MAAtBA,OAAO2C,aACH,kBAA9Bne,GAAMwb,OAAO2C,aACtB,MAAO7P,GAAOzM,KACZ7B,EAAMwb,OAAO2C,aAAa,UAAWH,EAAkBngB,EAI3D,MAAM,IAAI6c,WACR,wHACiD1a,IAqBrD,QAASoe,GAAY3f,GACnB,GAAoB,gBAATA,GACT,KAAM,IAAIic,WAAU,yCACf,IAAIjc,EAAO,EAChB,KAAM,IAAIgb,YAAW,cAAgBhb,EAAO,kCAIhD,QAASwC,GAAOxC,EAAM6d,EAAM+B,GAE1B,MADAD,GAAW3f,GACPA,GAAQ,EACHmb,EAAanb,OAETgH,KAAT6W,EAIyB,gBAAb+B,GACVzE,EAAanb,GAAM6d,KAAKA,EAAM+B,GAC9BzE,EAAanb,GAAM6d,KAAKA,GAEvB1C,EAAanb,GAWtB,QAAS6a,GAAa7a,GAEpB,MADA2f,GAAW3f,GACJmb,EAAanb,EAAO,EAAI,EAAoB,EAAhB8a,EAAQ9a,IAgB7C,QAASmE,GAAYC,EAAQwb,GAK3B,GAJwB,gBAAbA,IAAsC,KAAbA,IAClCA,EAAW,SAGR/P,EAAOgQ,WAAWD,GACrB,KAAM,IAAI3D,WAAU,qBAAuB2D,EAG7C,IAAIxgB,GAAwC,EAA/Boc,EAAWpX,EAAQwb,GAC5BvE,EAAMF,EAAa/b,GAEnBqc,EAASJ,EAAIha,MAAM+C,EAAQwb,EAS/B,OAPInE,KAAWrc,IAIbic,EAAMA,EAAI3Q,MAAM,EAAG+Q,IAGdJ,EAGT,QAASK,GAAe/H,GAGtB,IAAK,GAFDvU,GAASuU,EAAMvU,OAAS,EAAI,EAA4B,EAAxB0b,EAAQnH,EAAMvU,QAC9Cic,EAAMF,EAAa/b,GACdT,EAAI,EAAGA,EAAIS,EAAQT,GAAK,EAC/B0c,EAAI1c,GAAgB,IAAXgV,EAAMhV,EAEjB,OAAO0c,GAGT,QAASM,GAAiBhI,EAAOiI,EAAYxc,GAC3C,GAAIwc,EAAa,GAAKjI,EAAM6H,WAAaI,EACvC,KAAM,IAAIZ,YAAW,uCAGvB,IAAIrH,EAAM6H,WAAaI,GAAcxc,GAAU,GAC7C,KAAM,IAAI4b,YAAW,uCAGvB,IAAIK,EAYJ,OAVEA,OADiBrU,KAAf4U,OAAuC5U,KAAX5H,EACxB,GAAIkc,YAAW3H,OACD3M,KAAX5H,EACH,GAAIkc,YAAW3H,EAAOiI,GAEtB,GAAIN,YAAW3H,EAAOiI,EAAYxc,GAI1CiJ,OAAOiX,eAAejE,EAAKxL,EAAOtQ,WAE3B8b,EAGT,QAASQ,GAAY3J,GACnB,GAAIrC,EAAOiM,SAAS5J,GAAM,CACxB,GAAI6J,GAA4B,EAAtBjB,EAAQ5I,EAAI9S,QAClBic,EAAMF,EAAaY,EAEvB,OAAmB,KAAfV,EAAIjc,OACCic,GAGTnJ,EAAI9B,KAAKiL,EAAK,EAAG,EAAGU,GACbV,GAGT,WAAmBrU,KAAfkL,EAAI9S,OACoB,gBAAf8S,GAAI9S,QAAuB0gB,EAAY5N,EAAI9S,QAC7C+b,EAAa,GAEfO,EAAcxJ,GAGN,WAAbA,EAAI+F,MAAqB5K,MAAMQ,QAAQqE,EAAIpR,MACtC4a,EAAcxJ,EAAIpR,UAD3B,GAKF,QAASga,GAAS1b,GAGhB,GAAIA,GAAU2b,EACZ,KAAM,IAAIC,YAAW,0DACaD,EAAavR,SAAS,IAAM,SAEhE,OAAgB,GAATpK,EAGT,QAAS2gB,GAAY3gB,GAInB,OAHKA,GAAUA,IACbA,EAAS,GAEJyQ,EAAOrN,OAAOpD,GAuFvB,QAASoc,GAAYpX,EAAQwb,GAC3B,GAAI/P,EAAOiM,SAAS1X,GAClB,MAAOA,GAAOhF,MAEhB,IAAI4c,YAAYQ,OAAOpY,IAAWob,EAAWpb,EAAQ4X,aACnD,MAAO5X,GAAOoX,UAEhB,IAAsB,gBAAXpX,GACT,KAAM,IAAI6X,WACR,iGAC0B7X,GAI9B,IAAI2X,GAAM3X,EAAOhF,OACb4gB,EAAanK,UAAUzW,OAAS,IAAsB,IAAjByW,UAAU,EACnD,KAAKmK,GAAqB,IAARjE,EAAW,MAAO,EAIpC,KADA,GAAIkE,IAAc,IAEhB,OAAQL,GACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,MAAO7D,EACT,KAAK,OACL,IAAK,QACH,MAAOG,GAAY9X,GAAQhF,MAC7B,KAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAa,GAAN2c,CACT,KAAK,MACH,MAAOA,KAAQ,CACjB,KAAK,SACH,MAAOmE,GAAc9b,GAAQhF,MAC/B,SACE,GAAI6gB,EACF,MAAOD,IAAa,EAAI9D,EAAY9X,GAAQhF,MAE9CwgB,IAAY,GAAKA,GAAUvb,cAC3B4b,GAAc,GAMtB,QAASE,GAAcP,EAAU1P,EAAOqN,GACtC,GAAI0C,IAAc,CAclB,SALcjZ,KAAVkJ,GAAuBA,EAAQ,KACjCA,EAAQ,GAINA,EAAQ9R,KAAKgB,OACf,MAAO,EAOT,SAJY4H,KAARuW,GAAqBA,EAAMnf,KAAKgB,UAClCme,EAAMnf,KAAKgB,QAGTme,GAAO,EACT,MAAO,EAOT,IAHAA,KAAS,EACTrN,KAAW,EAEPqN,GAAOrN,EACT,MAAO,EAKT,KAFK0P,IAAUA,EAAW,UAGxB,OAAQA,GACN,IAAK,MACH,MAAOQ,GAAShiB,KAAM8R,EAAOqN,EAE/B,KAAK,OACL,IAAK,QACH,MAAO8C,GAAUjiB,KAAM8R,EAAOqN,EAEhC,KAAK,QACH,MAAO+C,GAAWliB,KAAM8R,EAAOqN,EAEjC,KAAK,SACL,IAAK,SACH,MAAOgD,GAAYniB,KAAM8R,EAAOqN,EAElC,KAAK,SACH,MAAOiD,GAAYpiB,KAAM8R,EAAOqN,EAElC,KAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAOkD,GAAariB,KAAM8R,EAAOqN,EAEnC,SACE,GAAI0C,EAAa,KAAM,IAAIhE,WAAU,qBAAuB2D,EAC5DA,IAAYA,EAAW,IAAIvb,cAC3B4b,GAAc,GAatB,QAASS,GAAMlT,EAAGhP,EAAGmiB,GACnB,GAAIhiB,GAAI6O,EAAEhP,EACVgP,GAAEhP,GAAKgP,EAAEmT,GACTnT,EAAEmT,GAAKhiB,EA4IT,QAASiiB,GAAsB/e,EAAQqZ,EAAKU,EAAYgE,EAAUiB,GAEhE,GAAsB,IAAlBhf,EAAOzC,OAAc,OAAQ,CAmBjC,IAhB0B,gBAAfwc,IACTgE,EAAWhE,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,GAAc,aACvBA,GAAc,YAEhBA,GAAcA,EACVkE,EAAYlE,KAEdA,EAAaiF,EAAM,EAAKhf,EAAOzC,OAAS,GAItCwc,EAAa,IAAGA,EAAa/Z,EAAOzC,OAASwc,GAC7CA,GAAc/Z,EAAOzC,OAAQ,CAC/B,GAAIyhB,EAAK,OAAQ,CACZjF,GAAa/Z,EAAOzC,OAAS,MAC7B,IAAIwc,EAAa,EAAG,CACzB,IAAIiF,EACC,OAAQ,CADJjF,GAAa,EAUxB,GALmB,gBAARV,KACTA,EAAMrL,EAAOzM,KAAK8X,EAAK0E,IAIrB/P,EAAOiM,SAASZ,GAElB,MAAmB,KAAfA,EAAI9b,QACE,EAEH0hB,EAAajf,EAAQqZ,EAAKU,EAAYgE,EAAUiB,EAClD,IAAmB,gBAAR3F,GAEhB,MADAA,IAAY,IACgC,kBAAjCI,YAAW/b,UAAUiC,QAC1Bqf,EACKvF,WAAW/b,UAAUiC,QAAQrC,KAAK0C,EAAQqZ,EAAKU,GAE/CN,WAAW/b,UAAUwhB,YAAY5hB,KAAK0C,EAAQqZ,EAAKU,GAGvDkF,EAAajf,GAASqZ,GAAMU,EAAYgE,EAAUiB,EAG3D,MAAM,IAAI5E,WAAU,wCAGtB,QAAS6E,GAAcjE,EAAK3B,EAAKU,EAAYgE,EAAUiB,GAmBrD,QAASG,GAAM3F,EAAK1c,GAClB,MAAkB,KAAdsiB,EACK5F,EAAI1c,GAEJ0c,EAAI6F,aAAaviB,EAAIsiB,GAtBhC,GAAIA,GAAY,EACZE,EAAYtE,EAAIzd,OAChBgiB,EAAYlG,EAAI9b,MAEpB,QAAiB4H,KAAb4Y,IAEe,UADjBA,EAAWyB,OAAOzB,GAAUvb,gBACY,UAAbub,GACV,YAAbA,GAAuC,aAAbA,GAAyB,CACrD,GAAI/C,EAAIzd,OAAS,GAAK8b,EAAI9b,OAAS,EACjC,OAAQ,CAEV6hB,GAAY,EACZE,GAAa,EACbC,GAAa,EACbxF,GAAc,EAYlB,GAAIjd,EACJ,IAAIkiB,EAAK,CACP,GAAIS,IAAc,CAClB,KAAK3iB,EAAIid,EAAYjd,EAAIwiB,EAAWxiB,IAClC,GAAIqiB,EAAKnE,EAAKle,KAAOqiB,EAAK9F,GAAqB,IAAhBoG,EAAoB,EAAI3iB,EAAI2iB,IAEzD,IADoB,IAAhBA,IAAmBA,EAAa3iB,GAChCA,EAAI2iB,EAAa,IAAMF,EAAW,MAAOE,GAAaL,OAEtC,IAAhBK,IAAmB3iB,GAAKA,EAAI2iB,GAChCA,GAAc,MAKlB,KADI1F,EAAawF,EAAYD,IAAWvF,EAAauF,EAAYC,GAC5DziB,EAAIid,EAAYjd,GAAK,EAAGA,IAAK,CAEhC,IAAK,GADD4iB,IAAQ,EACH7gB,EAAI,EAAGA,EAAI0gB,EAAW1gB,IAC7B,GAAIsgB,EAAKnE,EAAKle,EAAI+B,KAAOsgB,EAAK9F,EAAKxa,GAAI,CACrC6gB,GAAQ,CACR,OAGJ,GAAIA,EAAO,MAAO5iB,GAItB,OAAQ,EAeV,QAAS6iB,GAAUnG,EAAKjX,EAAQqG,EAAQrL,GACtCqL,EAASgX,OAAOhX,IAAW,CAC3B,IAAI6S,GAAYjC,EAAIjc,OAASqL,CACxBrL,IAGHA,EAASqiB,OAAOriB,IACHke,IACXle,EAASke,GAJXle,EAASke,CAQX,IAAIoE,GAAStd,EAAOhF,MAEhBA,GAASsiB,EAAS,IACpBtiB,EAASsiB,EAAS,EAEpB,KAAK,GAAI/iB,GAAI,EAAGA,EAAIS,IAAUT,EAAG,CAC/B,GAAIgjB,GAAS5a,SAAS3C,EAAO0F,OAAW,EAAJnL,EAAO,GAAI,GAC/C,IAAImhB,EAAY6B,GAAS,MAAOhjB,EAChC0c,GAAI5Q,EAAS9L,GAAKgjB,EAEpB,MAAOhjB,GAGT,QAASie,GAAWvB,EAAKjX,EAAQqG,EAAQrL,GACvC,MAAOqd,GAAWP,EAAY9X,EAAQiX,EAAIjc,OAASqL,GAAS4Q,EAAK5Q,EAAQrL,GAG3E,QAASwiB,GAAYvG,EAAKjX,EAAQqG,EAAQrL,GACxC,MAAOqd,GAAWoF,EAAazd,GAASiX,EAAK5Q,EAAQrL,GAGvD,QAAS0iB,GAAazG,EAAKjX,EAAQqG,EAAQrL,GACzC,MAAOwiB,GAAWvG,EAAKjX,EAAQqG,EAAQrL,GAGzC,QAAS2iB,GAAa1G,EAAKjX,EAAQqG,EAAQrL,GACzC,MAAOqd,GAAWyD,EAAc9b,GAASiX,EAAK5Q,EAAQrL,GAGxD,QAAS4iB,GAAW3G,EAAKjX,EAAQqG,EAAQrL,GACvC,MAAOqd,GAAWwF,EAAe7d,EAAQiX,EAAIjc,OAASqL,GAAS4Q,EAAK5Q,EAAQrL,GAiF9E,QAASohB,GAAanF,EAAKnL,EAAOqN,GAChC,MAAc,KAAVrN,GAAeqN,IAAQlC,EAAIjc,OACtB8iB,EAAOjD,cAAc5D,GAErB6G,EAAOjD,cAAc5D,EAAI3Q,MAAMwF,EAAOqN,IAIjD,QAAS8C,GAAWhF,EAAKnL,EAAOqN,GAC9BA,EAAMzd,KAAKqiB,IAAI9G,EAAIjc,OAAQme,EAI3B,KAHA,GAAI6E,MAEAzjB,EAAIuR,EACDvR,EAAI4e,GAAK,CACd,GAAI8E,GAAYhH,EAAI1c,GAChByd,EAAY,KACZkG,EAAoBD,EAAY,IAAQ,EACvCA,EAAY,IAAQ,EAClBA,EAAY,IAAQ,EACnB,CAER,IAAI1jB,EAAI2jB,GAAoB/E,EAAK,CAC/B,GAAIgF,GAAYC,EAAWC,EAAYC,CAEvC,QAAQJ,GACN,IAAK,GACCD,EAAY,MACdjG,EAAYiG,EAEd,MACF,KAAK,GACHE,EAAalH,EAAI1c,EAAI,GACO,MAAV,IAAb4jB,KACHG,GAA6B,GAAZL,IAAqB,EAAoB,GAAbE,GACzB,MAClBnG,EAAYsG,EAGhB,MACF,KAAK,GACHH,EAAalH,EAAI1c,EAAI,GACrB6jB,EAAYnH,EAAI1c,EAAI,GACQ,MAAV,IAAb4jB,IAAsD,MAAV,IAAZC,KACnCE,GAA6B,GAAZL,IAAoB,IAAoB,GAAbE,IAAsB,EAAmB,GAAZC,GACrD,OAAUE,EAAgB,OAAUA,EAAgB,SACtEtG,EAAYsG,EAGhB,MACF,KAAK,GACHH,EAAalH,EAAI1c,EAAI,GACrB6jB,EAAYnH,EAAI1c,EAAI,GACpB8jB,EAAapH,EAAI1c,EAAI,GACO,MAAV,IAAb4jB,IAAsD,MAAV,IAAZC,IAAsD,MAAV,IAAbC,KAClEC,GAA6B,GAAZL,IAAoB,IAAqB,GAAbE,IAAsB,IAAmB,GAAZC,IAAqB,EAAoB,GAAbC,GAClF,OAAUC,EAAgB,UAC5CtG,EAAYsG,IAMJ,OAAdtG,GAGFA,EAAY,MACZkG,EAAmB,GACVlG,EAAY,QAErBA,GAAa,MACbgG,EAAIhiB,KAAKgc,IAAc,GAAK,KAAQ,OACpCA,EAAY,MAAqB,KAAZA,GAGvBgG,EAAIhiB,KAAKgc,GACTzd,GAAK2jB,EAGP,MAAOK,GAAsBP,GAQ/B,QAASO,GAAuBC,GAC9B,GAAI7G,GAAM6G,EAAWxjB,MACrB,IAAI2c,GAAO8G,EACT,MAAOxB,QAAOyB,aAAanJ,MAAM0H,OAAQuB,EAM3C,KAFA,GAAIR,GAAM,GACNzjB,EAAI,EACDA,EAAIod,GACTqG,GAAOf,OAAOyB,aAAanJ,MACzB0H,OACAuB,EAAWlY,MAAM/L,EAAGA,GAAKkkB,GAG7B,OAAOT,GAGT,QAAS9B,GAAYjF,EAAKnL,EAAOqN,GAC/B,GAAIwF,GAAM,EACVxF,GAAMzd,KAAKqiB,IAAI9G,EAAIjc,OAAQme,EAE3B,KAAK,GAAI5e,GAAIuR,EAAOvR,EAAI4e,IAAO5e,EAC7BokB,GAAO1B,OAAOyB,aAAsB,IAATzH,EAAI1c,GAEjC,OAAOokB,GAGT,QAASxC,GAAalF,EAAKnL,EAAOqN,GAChC,GAAIwF,GAAM,EACVxF,GAAMzd,KAAKqiB,IAAI9G,EAAIjc,OAAQme,EAE3B,KAAK,GAAI5e,GAAIuR,EAAOvR,EAAI4e,IAAO5e,EAC7BokB,GAAO1B,OAAOyB,aAAazH,EAAI1c,GAEjC,OAAOokB,GAGT,QAAS3C,GAAU/E,EAAKnL,EAAOqN,GAC7B,GAAIxB,GAAMV,EAAIjc,SAET8Q,GAASA,EAAQ,KAAGA,EAAQ,KAC5BqN,GAAOA,EAAM,GAAKA,EAAMxB,KAAKwB,EAAMxB,EAGxC,KAAK,GADDiH,GAAM,GACDrkB,EAAIuR,EAAOvR,EAAI4e,IAAO5e,EAC7BqkB,GAAOC,EAAoB5H,EAAI1c,GAEjC,OAAOqkB,GAGT,QAASvC,GAAcpF,EAAKnL,EAAOqN,GAGjC,IAAK,GAFDjB,GAAQjB,EAAI3Q,MAAMwF,EAAOqN,GACzB6E,EAAM,GACDzjB,EAAI,EAAGA,EAAI2d,EAAMld,OAAQT,GAAK,EACrCyjB,GAAOf,OAAOyB,aAAaxG,EAAM3d,GAAqB,IAAf2d,EAAM3d,EAAI,GAEnD,OAAOyjB,GAkCT,QAASc,GAAazY,EAAQ0Y,EAAK/jB,GACjC,GAAKqL,EAAS,GAAO,GAAKA,EAAS,EAAG,KAAM,IAAIuQ,YAAW,qBAC3D,IAAIvQ,EAAS0Y,EAAM/jB,EAAQ,KAAM,IAAI4b,YAAW,yCA6KlD,QAASoI,GAAU/H,EAAK9Z,EAAOkJ,EAAQ0Y,EAAKxV,EAAKwU,GAC/C,IAAKtS,EAAOiM,SAAST,GAAM,KAAM,IAAIY,WAAU,8CAC/C,IAAI1a,EAAQoM,GAAOpM,EAAQ4gB,EAAK,KAAM,IAAInH,YAAW,oCACrD,IAAIvQ,EAAS0Y,EAAM9H,EAAIjc,OAAQ,KAAM,IAAI4b,YAAW,sBAyLtD,QAASqI,GAAchI,EAAK9Z,EAAOkJ,EAAQ0Y,EAAKxV,EAAKwU,GACnD,GAAI1X,EAAS0Y,EAAM9H,EAAIjc,OAAQ,KAAM,IAAI4b,YAAW,qBACpD,IAAIvQ,EAAS,EAAG,KAAM,IAAIuQ,YAAW,sBAGvC,QAASsI,GAAYjI,EAAK9Z,EAAOkJ,EAAQ8Y,EAAcC,GAOrD,MANAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GACHH,EAAahI,EAAK9Z,EAAOkJ,EAAQ,EAAG,uBAAyB,uBAE/DgZ,EAAQpiB,MAAMga,EAAK9Z,EAAOkJ,EAAQ8Y,EAAc,GAAI,GAC7C9Y,EAAS,EAWlB,QAASiZ,GAAarI,EAAK9Z,EAAOkJ,EAAQ8Y,EAAcC,GAOtD,MANAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GACHH,EAAahI,EAAK9Z,EAAOkJ,EAAQ,EAAG,wBAA0B,wBAEhEgZ,EAAQpiB,MAAMga,EAAK9Z,EAAOkJ,EAAQ8Y,EAAc,GAAI,GAC7C9Y,EAAS,EAsIlB,QAASkZ,GAAa5S,GAMpB,GAJAA,EAAMA,EAAI2I,MAAM,KAAK,GAErB3I,EAAMA,EAAI6S,OAAOpT,QAAQqT,EAAmB,IAExC9S,EAAI3R,OAAS,EAAG,MAAO,EAE3B,MAAO2R,EAAI3R,OAAS,GAAM,GACxB2R,GAAY,GAEd,OAAOA,GAGT,QAASmL,GAAa9X,EAAQ+X,GAC5BA,EAAQA,GAAS1T,EAAAA,CAMjB,KAAK,GALD2T,GACAhd,EAASgF,EAAOhF,OAChBid,EAAgB,KAChBC,KAEK3d,EAAI,EAAGA,EAAIS,IAAUT,EAAG,CAI/B,IAHAyd,EAAYhY,EAAOmY,WAAW5d,IAGd,OAAUyd,EAAY,MAAQ,CAE5C,IAAKC,EAAe,CAElB,GAAID,EAAY,MAAQ,EAEjBD,GAAS,IAAM,GAAGG,EAAMlc,KAAK,IAAM,IAAM,IAC9C,UACK,GAAIzB,EAAI,IAAMS,EAAQ,EAEtB+c,GAAS,IAAM,GAAGG,EAAMlc,KAAK,IAAM,IAAM,IAC9C,UAIFic,EAAgBD,CAEhB,UAIF,GAAIA,EAAY,MAAQ,EACjBD,GAAS,IAAM,GAAGG,EAAMlc,KAAK,IAAM,IAAM,KAC9Cic,EAAgBD,CAChB,UAIFA,EAAkE,OAArDC,EAAgB,OAAU,GAAKD,EAAY,WAC/CC,KAEJF,GAAS,IAAM,GAAGG,EAAMlc,KAAK,IAAM,IAAM,IAMhD,IAHAic,EAAgB,KAGZD,EAAY,IAAM,CACpB,IAAKD,GAAS,GAAK,EAAG,KACtBG,GAAMlc,KAAKgc,OACN,IAAIA,EAAY,KAAO,CAC5B,IAAKD,GAAS,GAAK,EAAG,KACtBG,GAAMlc,KACJgc,GAAa,EAAM,IACP,GAAZA,EAAmB,SAEhB,IAAIA,EAAY,MAAS,CAC9B,IAAKD,GAAS,GAAK,EAAG,KACtBG,GAAMlc,KACJgc,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,SAEhB,CAAA,KAAIA,EAAY,SASrB,KAAM,IAAIpd,OAAM,qBARhB,KAAKmd,GAAS,GAAK,EAAG,KACtBG,GAAMlc,KACJgc,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,MAOzB,MAAOE,GAGT,QAASuF,GAAc9Q,GAErB,IAAK,GADD+S,MACKnlB,EAAI,EAAGA,EAAIoS,EAAI3R,SAAUT,EAEhCmlB,EAAU1jB,KAAyB,IAApB2Q,EAAIwL,WAAW5d,GAEhC,OAAOmlB,GAGT,QAAS7B,GAAgBlR,EAAKoL,GAG5B,IAAK,GAFDvd,GAAGmlB,EAAIC,EACPF,KACKnlB,EAAI,EAAGA,EAAIoS,EAAI3R,WACjB+c,GAAS,GAAK,KADaxd,EAGhCC,EAAImS,EAAIwL,WAAW5d,GACnBolB,EAAKnlB,GAAK,EACVolB,EAAKplB,EAAI,IACTklB,EAAU1jB,KAAK4jB,GACfF,EAAU1jB,KAAK2jB,EAGjB,OAAOD,GAGT,QAAS5D,GAAenP,GACtB,MAAOmR,GAAO3D,YAAYoF,EAAY5S,IAGxC,QAAS0L,GAAYC,EAAKC,EAAKlS,EAAQrL,GACrC,IAAK,GAAIT,GAAI,EAAGA,EAAIS,KACbT,EAAI8L,GAAUkS,EAAIvd,QAAYT,GAAK+d,EAAItd,UADhBT,EAE5Bge,EAAIhe,EAAI8L,GAAUiS,EAAI/d,EAExB,OAAOA,GAMT,QAAS6gB,GAAYtN,EAAK+F,GACxB,MAAO/F,aAAe+F,IACZ,MAAP/F,GAAkC,MAAnBA,EAAI+R,aAA+C,MAAxB/R,EAAI+R,YAAYC,MACzDhS,EAAI+R,YAAYC,OAASjM,EAAKiM,KAEpC,QAASpE,GAAa5N,GAEpB,MAAOA,KAAQA,EA7uDjB,GAAIgQ,GAASrjB,EAAQ,aACjB4kB,EAAU5kB,EAAQ,WAClBslB,EACiB,kBAAXpH,SAA+C,kBAAfA,QAAOqH,IAC3CrH,OAAOqH,IAAI,8BACX,IAENxmB,GAAQiS,OAASA,EACjBjS,EAAQmiB,WAAaA,EACrBniB,EAAQymB,kBAAoB,EAE5B,IAAItJ,GAAe,UACnBnd,GAAQ0mB,WAAavJ,EAgBrBlL,EAAO+K,oBAUP,WAEE,IACE,GAAIiC,GAAM,GAAIvB,YAAW,GACrBiJ,GAAUzH,IAAK,WAAc,MAAO,KAGxC,OAFAzU,QAAOiX,eAAeiF,EAAOjJ,WAAW/b,WACxC8I,OAAOiX,eAAezC,EAAK0H,GACN,KAAd1H,EAAIC,MACX,MAAOve,GACP,OAAO,MAjBNsR,EAAO+K,qBAA0C,mBAAZ4J,UACb,kBAAlBA,SAAQC,OACjBD,QAAQC,MACN,iJAkBJpc,OAAO4U,eAAepN,EAAOtQ,UAAW,UACtC4d,YAAY,EACZrb,IAAK,WACH,GAAK+N,EAAOiM,SAAS1d,MACrB,MAAOA,MAAKyD,UAIhBwG,OAAO4U,eAAepN,EAAOtQ,UAAW,UACtC4d,YAAY,EACZrb,IAAK,WACH,GAAK+N,EAAOiM,SAAS1d,MACrB,MAAOA,MAAKwd,cAsCM,mBAAXmB,SAA4C,MAAlBA,OAAOC,SACxCnN,EAAOkN,OAAOC,WAAanN,GAC7BxH,OAAO4U,eAAepN,EAAQkN,OAAOC,SACnCzb,MAAO,KACP2b,cAAc,EACdC,YAAY,EACZC,UAAU,IAIdvN,EAAO6U,SAAW,KA0DlB7U,EAAOzM,KAAO,SAAU7B,EAAOge,EAAkBngB,GAC/C,MAAOgE,GAAK7B,EAAOge,EAAkBngB,IAKvCiJ,OAAOiX,eAAezP,EAAOtQ,UAAW+b,WAAW/b,WACnD8I,OAAOiX,eAAezP,EAAQyL,YA8B9BzL,EAAOrN,MAAQ,SAAUxC,EAAM6d,EAAM+B,GACnC,MAAOpd,GAAMxC,EAAM6d,EAAM+B,IAW3B/P,EAAOgL,YAAc,SAAU7a,GAC7B,MAAO6a,GAAY7a,IAKrB6P,EAAO8U,gBAAkB,SAAU3kB,GACjC,MAAO6a,GAAY7a,IAsGrB6P,EAAOiM,SAAW,SAAmBtO,GACnC,MAAY,OAALA,IAA6B,IAAhBA,EAAEuQ,WACpBvQ,IAAMqC,EAAOtQ,WAGjBsQ,EAAO+U,QAAU,SAAkB7lB,EAAGyO,GAGpC,GAFIgS,EAAWzgB,EAAGuc,cAAavc,EAAI8Q,EAAOzM,KAAKrE,EAAGA,EAAE0L,OAAQ1L,EAAEyc,aAC1DgE,EAAWhS,EAAG8N,cAAa9N,EAAIqC,EAAOzM,KAAKoK,EAAGA,EAAE/C,OAAQ+C,EAAEgO,cACzD3L,EAAOiM,SAAS/c,KAAO8Q,EAAOiM,SAAStO,GAC1C,KAAM,IAAIyO,WACR,wEAIJ,IAAIld,IAAMyO,EAAG,MAAO,EAKpB,KAAK,GAHDpI,GAAIrG,EAAEK,OACNoG,EAAIgI,EAAEpO,OAEDT,EAAI,EAAGod,EAAMjc,KAAKqiB,IAAI/c,EAAGI,GAAI7G,EAAIod,IAAOpd,EAC/C,GAAII,EAAEJ,KAAO6O,EAAE7O,GAAI,CACjByG,EAAIrG,EAAEJ,GACN6G,EAAIgI,EAAE7O,EACN,OAIJ,MAAIyG,GAAII,GAAW,EACfA,EAAIJ,EAAU,EACX,GAGTyK,EAAOgQ,WAAa,SAAqBD,GACvC,OAAQyB,OAAOzB,GAAUvb,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,CACT,SACE,OAAO,IAIbwL,EAAOG,OAAS,SAAiB8N,EAAM1e,GACrC,IAAKiO,MAAMQ,QAAQiQ,GACjB,KAAM,IAAI7B,WAAU,8CAGtB,IAAoB,IAAhB6B,EAAK1e,OACP,MAAOyQ,GAAOrN,MAAM,EAGtB,IAAI7D,EACJ,QAAeqI,KAAX5H,EAEF,IADAA,EAAS,EACJT,EAAI,EAAGA,EAAImf,EAAK1e,SAAUT,EAC7BS,GAAU0e,EAAKnf,GAAGS,MAItB,IAAIyC,GAASgO,EAAOgL,YAAYzb,GAC5BoB,EAAM,CACV,KAAK7B,EAAI,EAAGA,EAAImf,EAAK1e,SAAUT,EAAG,CAChC,GAAI0c,GAAMyC,EAAKnf,EAIf,IAHI6gB,EAAWnE,EAAKC,cAClBD,EAAMxL,EAAOzM,KAAKiY,KAEfxL,EAAOiM,SAAST,GACnB,KAAM,IAAIY,WAAU,8CAEtBZ,GAAIjL,KAAKvO,EAAQrB,GACjBA,GAAO6a,EAAIjc,OAEb,MAAOyC,IAkDTgO,EAAO2L,WAAaA,EA8EpB3L,EAAOtQ,UAAUwe,WAAY,EAQ7BlO,EAAOtQ,UAAUslB,OAAS,WACxB,GAAI9I,GAAM3d,KAAKgB,MACf,IAAI2c,EAAM,GAAM,EACd,KAAM,IAAIf,YAAW,4CAEvB,KAAK,GAAIrc,GAAI,EAAGA,EAAIod,EAAKpd,GAAK,EAC5B+hB,EAAKtiB,KAAMO,EAAGA,EAAI,EAEpB,OAAOP,OAGTyR,EAAOtQ,UAAUulB,OAAS,WACxB,GAAI/I,GAAM3d,KAAKgB,MACf,IAAI2c,EAAM,GAAM,EACd,KAAM,IAAIf,YAAW,4CAEvB,KAAK,GAAIrc,GAAI,EAAGA,EAAIod,EAAKpd,GAAK,EAC5B+hB,EAAKtiB,KAAMO,EAAGA,EAAI,GAClB+hB,EAAKtiB,KAAMO,EAAI,EAAGA,EAAI,EAExB,OAAOP,OAGTyR,EAAOtQ,UAAUwlB,OAAS,WACxB,GAAIhJ,GAAM3d,KAAKgB,MACf,IAAI2c,EAAM,GAAM,EACd,KAAM,IAAIf,YAAW,4CAEvB,KAAK,GAAIrc,GAAI,EAAGA,EAAIod,EAAKpd,GAAK,EAC5B+hB,EAAKtiB,KAAMO,EAAGA,EAAI,GAClB+hB,EAAKtiB,KAAMO,EAAI,EAAGA,EAAI,GACtB+hB,EAAKtiB,KAAMO,EAAI,EAAGA,EAAI,GACtB+hB,EAAKtiB,KAAMO,EAAI,EAAGA,EAAI,EAExB,OAAOP,OAGTyR,EAAOtQ,UAAUiK,SAAW,WAC1B,GAAIpK,GAAShB,KAAKgB,MAClB,OAAe,KAAXA,EAAqB,GACA,IAArByW,UAAUzW,OAAqBihB,EAAUjiB,KAAM,EAAGgB,GAC/C+gB,EAAaxG,MAAMvb,KAAMyX,YAGlChG,EAAOtQ,UAAUylB,eAAiBnV,EAAOtQ,UAAUiK,SAEnDqG,EAAOtQ,UAAU0lB,OAAS,SAAiBzX,GACzC,IAAKqC,EAAOiM,SAAStO,GAAI,KAAM,IAAIyO,WAAU,4BAC7C,OAAI7d,QAASoP,GACsB,IAA5BqC,EAAO+U,QAAQxmB,KAAMoP,IAG9BqC,EAAOtQ,UAAU2lB,QAAU,WACzB,GAAInU,GAAM,GACNpD,EAAM/P,EAAQymB,iBAGlB,OAFAtT,GAAM3S,KAAKoL,SAAS,MAAO,EAAGmE,GAAK6C,QAAQ,UAAW,OAAOoT,OACzDxlB,KAAKgB,OAASuO,IAAKoD,GAAO,SACvB,WAAaA,EAAM,KAExBoT,IACFtU,EAAOtQ,UAAU4kB,GAAuBtU,EAAOtQ,UAAU2lB,SAG3DrV,EAAOtQ,UAAUqlB,QAAU,SAAkBjH,EAAQzN,EAAOqN,EAAK4H,EAAWC,GAI1E,GAHI5F,EAAW7B,EAAQrC,cACrBqC,EAAS9N,EAAOzM,KAAKua,EAAQA,EAAOlT,OAAQkT,EAAOnC,cAEhD3L,EAAOiM,SAAS6B,GACnB,KAAM,IAAI1B,WACR,uFAC2B0B,GAiB/B,QAbc3W,KAAVkJ,IACFA,EAAQ,OAEElJ,KAARuW,IACFA,EAAMI,EAASA,EAAOve,OAAS,OAEf4H,KAAdme,IACFA,EAAY,OAEEne,KAAZoe,IACFA,EAAUhnB,KAAKgB,QAGb8Q,EAAQ,GAAKqN,EAAMI,EAAOve,QAAU+lB,EAAY,GAAKC,EAAUhnB,KAAKgB,OACtE,KAAM,IAAI4b,YAAW,qBAGvB,IAAImK,GAAaC,GAAWlV,GAASqN,EACnC,MAAO,EAET,IAAI4H,GAAaC,EACf,OAAQ,CAEV,IAAIlV,GAASqN,EACX,MAAO,EAQT,IALArN,KAAW,EACXqN,KAAS,EACT4H,KAAe,EACfC,KAAa,EAEThnB,OAASuf,EAAQ,MAAO,EAS5B,KAAK,GAPDvY,GAAIggB,EAAUD,EACd3f,EAAI+X,EAAMrN,EACV6L,EAAMjc,KAAKqiB,IAAI/c,EAAGI,GAElB6f,EAAWjnB,KAAKsM,MAAMya,EAAWC,GACjCE,EAAa3H,EAAOjT,MAAMwF,EAAOqN,GAE5B5e,EAAI,EAAGA,EAAIod,IAAOpd,EACzB,GAAI0mB,EAAS1mB,KAAO2mB,EAAW3mB,GAAI,CACjCyG,EAAIigB,EAAS1mB,GACb6G,EAAI8f,EAAW3mB,EACf,OAIJ,MAAIyG,GAAII,GAAW,EACfA,EAAIJ,EAAU,EACX,GA4HTyK,EAAOtQ,UAAUgmB,SAAW,SAAmBrK,EAAKU,EAAYgE,GAC9D,OAAoD,IAA7CxhB,KAAKoD,QAAQ0Z,EAAKU,EAAYgE,IAGvC/P,EAAOtQ,UAAUiC,QAAU,SAAkB0Z,EAAKU,EAAYgE,GAC5D,MAAOgB,GAAqBxiB,KAAM8c,EAAKU,EAAYgE,GAAU,IAG/D/P,EAAOtQ,UAAUwhB,YAAc,SAAsB7F,EAAKU,EAAYgE,GACpE,MAAOgB,GAAqBxiB,KAAM8c,EAAKU,EAAYgE,GAAU,IAgD/D/P,EAAOtQ,UAAU8B,MAAQ,SAAgB+C,EAAQqG,EAAQrL,EAAQwgB,GAE/D,OAAe5Y,KAAXyD,EACFmV,EAAW,OACXxgB,EAAShB,KAAKgB,OACdqL,EAAS,MAEJ,QAAezD,KAAX5H,GAA0C,gBAAXqL,GACxCmV,EAAWnV,EACXrL,EAAShB,KAAKgB,OACdqL,EAAS,MAEJ,CAAA,IAAI4S,SAAS5S,GAUlB,KAAM,IAAIzL,OACR,0EAVFyL,MAAoB,EAChB4S,SAASje,IACXA,KAAoB,MACH4H,KAAb4Y,IAAwBA,EAAW,UAEvCA,EAAWxgB,EACXA,MAAS4H,IAQb,GAAIsW,GAAYlf,KAAKgB,OAASqL,CAG9B,SAFezD,KAAX5H,GAAwBA,EAASke,KAAWle,EAASke,GAEpDlZ,EAAOhF,OAAS,IAAMA,EAAS,GAAKqL,EAAS,IAAOA,EAASrM,KAAKgB,OACrE,KAAM,IAAI4b,YAAW,yCAGlB4E,KAAUA,EAAW,OAG1B,KADA,GAAIK,IAAc,IAEhB,OAAQL,GACN,IAAK,MACH,MAAO4B,GAASpjB,KAAMgG,EAAQqG,EAAQrL,EAExC,KAAK,OACL,IAAK,QACH,MAAOwd,GAAUxe,KAAMgG,EAAQqG,EAAQrL,EAEzC,KAAK,QACH,MAAOwiB,GAAWxjB,KAAMgG,EAAQqG,EAAQrL,EAE1C,KAAK,SACL,IAAK,SACH,MAAO0iB,GAAY1jB,KAAMgG,EAAQqG,EAAQrL,EAE3C,KAAK,SAEH,MAAO2iB,GAAY3jB,KAAMgG,EAAQqG,EAAQrL,EAE3C,KAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO4iB,GAAU5jB,KAAMgG,EAAQqG,EAAQrL,EAEzC,SACE,GAAI6gB,EAAa,KAAM,IAAIhE,WAAU,qBAAuB2D,EAC5DA,IAAY,GAAKA,GAAUvb,cAC3B4b,GAAc,IAKtBpQ,EAAOtQ,UAAUimB,OAAS,WACxB,OACEvN,KAAM,SACNnX,KAAMuM,MAAM9N,UAAUmL,MAAMvL,KAAKf,KAAKqnB,MAAQrnB,KAAM,IAwFxD,IAAIykB,GAAuB,IA8D3BhT,GAAOtQ,UAAUmL,MAAQ,SAAgBwF,EAAOqN,GAC9C,GAAIxB,GAAM3d,KAAKgB,MACf8Q,KAAUA,EACVqN,MAAcvW,KAARuW,EAAoBxB,IAAQwB,EAE9BrN,EAAQ,GACVA,GAAS6L,GACG,IAAG7L,EAAQ,GACdA,EAAQ6L,IACjB7L,EAAQ6L,GAGNwB,EAAM,GACRA,GAAOxB,GACG,IAAGwB,EAAM,GACVA,EAAMxB,IACfwB,EAAMxB,GAGJwB,EAAMrN,IAAOqN,EAAMrN,EAEvB,IAAIsN,GAASpf,KAAKqf,SAASvN,EAAOqN,EAIlC,OAFAlV,QAAOiX,eAAe9B,EAAQ3N,EAAOtQ,WAE9Bie,GAWT3N,EAAOtQ,UAAUmmB,WAAa,SAAqBjb,EAAQ+Q,EAAYgI,GACrE/Y,KAAoB,EACpB+Q,KAA4B,EACvBgI,GAAUN,EAAYzY,EAAQ+Q,EAAYpd,KAAKgB,OAKpD,KAHA,GAAI8b,GAAM9c,KAAKqM,GACXlF,EAAM,EACN5G,EAAI,IACCA,EAAI6c,IAAejW,GAAO,MACjC2V,GAAO9c,KAAKqM,EAAS9L,GAAK4G,CAG5B,OAAO2V,IAGTrL,EAAOtQ,UAAUomB,WAAa,SAAqBlb,EAAQ+Q,EAAYgI,GACrE/Y,KAAoB,EACpB+Q,KAA4B,EACvBgI,GACHN,EAAYzY,EAAQ+Q,EAAYpd,KAAKgB,OAKvC,KAFA,GAAI8b,GAAM9c,KAAKqM,IAAW+Q,GACtBjW,EAAM,EACHiW,EAAa,IAAMjW,GAAO,MAC/B2V,GAAO9c,KAAKqM,IAAW+Q,GAAcjW,CAGvC,OAAO2V,IAGTrL,EAAOtQ,UAAUqmB,UAAY,SAAoBnb,EAAQ+Y,GAGvD,MAFA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QACpChB,KAAKqM,IAGdoF,EAAOtQ,UAAUsmB,aAAe,SAAuBpb,EAAQ+Y,GAG7D,MAFA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QACpChB,KAAKqM,GAAWrM,KAAKqM,EAAS,IAAM,GAG7CoF,EAAOtQ,UAAU2hB,aAAe,SAAuBzW,EAAQ+Y,GAG7D,MAFA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QACnChB,KAAKqM,IAAW,EAAKrM,KAAKqM,EAAS,IAG7CoF,EAAOtQ,UAAUumB,aAAe,SAAuBrb,EAAQ+Y,GAI7D,MAHA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,SAElChB,KAAKqM,GACTrM,KAAKqM,EAAS,IAAM,EACpBrM,KAAKqM,EAAS,IAAM,IACD,SAAnBrM,KAAKqM,EAAS,IAGrBoF,EAAOtQ,UAAUwmB,aAAe,SAAuBtb,EAAQ+Y,GAI7D,MAHA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QAEpB,SAAfhB,KAAKqM,IACTrM,KAAKqM,EAAS,IAAM,GACrBrM,KAAKqM,EAAS,IAAM,EACrBrM,KAAKqM,EAAS,KAGlBoF,EAAOtQ,UAAUymB,UAAY,SAAoBvb,EAAQ+Q,EAAYgI,GACnE/Y,KAAoB,EACpB+Q,KAA4B,EACvBgI,GAAUN,EAAYzY,EAAQ+Q,EAAYpd,KAAKgB,OAKpD,KAHA,GAAI8b,GAAM9c,KAAKqM,GACXlF,EAAM,EACN5G,EAAI,IACCA,EAAI6c,IAAejW,GAAO,MACjC2V,GAAO9c,KAAKqM,EAAS9L,GAAK4G,CAM5B,OAJAA,IAAO,IAEH2V,GAAO3V,IAAK2V,GAAOpb,KAAKmmB,IAAI,EAAG,EAAIzK,IAEhCN,GAGTrL,EAAOtQ,UAAU2mB,UAAY,SAAoBzb,EAAQ+Q,EAAYgI,GACnE/Y,KAAoB,EACpB+Q,KAA4B,EACvBgI,GAAUN,EAAYzY,EAAQ+Q,EAAYpd,KAAKgB,OAKpD,KAHA,GAAIT,GAAI6c,EACJjW,EAAM,EACN2V,EAAM9c,KAAKqM,IAAW9L,GACnBA,EAAI,IAAM4G,GAAO,MACtB2V,GAAO9c,KAAKqM,IAAW9L,GAAK4G,CAM9B,OAJAA,IAAO,IAEH2V,GAAO3V,IAAK2V,GAAOpb,KAAKmmB,IAAI,EAAG,EAAIzK,IAEhCN,GAGTrL,EAAOtQ,UAAU4mB,SAAW,SAAmB1b,EAAQ+Y,GAGrD,MAFA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QACtB,IAAfhB,KAAKqM,IAC0B,GAA5B,IAAOrM,KAAKqM,GAAU,GADKrM,KAAKqM,IAI3CoF,EAAOtQ,UAAU6mB,YAAc,SAAsB3b,EAAQ+Y,GAC3D/Y,KAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,OAC3C,IAAI8b,GAAM9c,KAAKqM,GAAWrM,KAAKqM,EAAS,IAAM,CAC9C,OAAc,OAANyQ,EAAsB,WAANA,EAAmBA,GAG7CrL,EAAOtQ,UAAU8mB,YAAc,SAAsB5b,EAAQ+Y,GAC3D/Y,KAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,OAC3C,IAAI8b,GAAM9c,KAAKqM,EAAS,GAAMrM,KAAKqM,IAAW,CAC9C,OAAc,OAANyQ,EAAsB,WAANA,EAAmBA,GAG7CrL,EAAOtQ,UAAU+mB,YAAc,SAAsB7b,EAAQ+Y,GAI3D,MAHA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QAEnChB,KAAKqM,GACVrM,KAAKqM,EAAS,IAAM,EACpBrM,KAAKqM,EAAS,IAAM,GACpBrM,KAAKqM,EAAS,IAAM,IAGzBoF,EAAOtQ,UAAUgnB,YAAc,SAAsB9b,EAAQ+Y,GAI3D,MAHA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QAEnChB,KAAKqM,IAAW,GACrBrM,KAAKqM,EAAS,IAAM,GACpBrM,KAAKqM,EAAS,IAAM,EACpBrM,KAAKqM,EAAS,IAGnBoF,EAAOtQ,UAAUinB,YAAc,SAAsB/b,EAAQ+Y,GAG3D,MAFA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QACpCqkB,EAAQzC,KAAK5iB,KAAMqM,GAAQ,EAAM,GAAI,IAG9CoF,EAAOtQ,UAAUknB,YAAc,SAAsBhc,EAAQ+Y,GAG3D,MAFA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QACpCqkB,EAAQzC,KAAK5iB,KAAMqM,GAAQ,EAAO,GAAI,IAG/CoF,EAAOtQ,UAAUmnB,aAAe,SAAuBjc,EAAQ+Y,GAG7D,MAFA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QACpCqkB,EAAQzC,KAAK5iB,KAAMqM,GAAQ,EAAM,GAAI,IAG9CoF,EAAOtQ,UAAUonB,aAAe,SAAuBlc,EAAQ+Y,GAG7D,MAFA/Y,MAAoB,EACf+Y,GAAUN,EAAYzY,EAAQ,EAAGrM,KAAKgB,QACpCqkB,EAAQzC,KAAK5iB,KAAMqM,GAAQ,EAAO,GAAI,IAS/CoF,EAAOtQ,UAAUqnB,YAAc,SAAsBrlB,EAAOkJ,EAAQ+Q,EAAYgI,GAI9E,GAHAjiB,GAASA,EACTkJ,KAAoB,EACpB+Q,KAA4B,GACvBgI,EAAU,CAEbJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ+Q,EADf1b,KAAKmmB,IAAI,EAAG,EAAIzK,GAAc,EACO,GAGtD,GAAIjW,GAAM,EACN5G,EAAI,CAER,KADAP,KAAKqM,GAAkB,IAARlJ,IACN5C,EAAI6c,IAAejW,GAAO,MACjCnH,KAAKqM,EAAS9L,GAAM4C,EAAQgE,EAAO,GAGrC,OAAOkF,GAAS+Q,GAGlB3L,EAAOtQ,UAAUsnB,YAAc,SAAsBtlB,EAAOkJ,EAAQ+Q,EAAYgI,GAI9E,GAHAjiB,GAASA,EACTkJ,KAAoB,EACpB+Q,KAA4B,GACvBgI,EAAU,CAEbJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ+Q,EADf1b,KAAKmmB,IAAI,EAAG,EAAIzK,GAAc,EACO,GAGtD,GAAI7c,GAAI6c,EAAa,EACjBjW,EAAM,CAEV,KADAnH,KAAKqM,EAAS9L,GAAa,IAAR4C,IACV5C,GAAK,IAAM4G,GAAO,MACzBnH,KAAKqM,EAAS9L,GAAM4C,EAAQgE,EAAO,GAGrC,OAAOkF,GAAS+Q,GAGlB3L,EAAOtQ,UAAUunB,WAAa,SAAqBvlB,EAAOkJ,EAAQ+Y,GAKhE,MAJAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,IAAM,GACtDrM,KAAKqM,GAAmB,IAARlJ,EACTkJ,EAAS,GAGlBoF,EAAOtQ,UAAUwnB,cAAgB,SAAwBxlB,EAAOkJ,EAAQ+Y,GAMtE,MALAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,MAAQ,GACxDrM,KAAKqM,GAAmB,IAARlJ,EAChBnD,KAAKqM,EAAS,GAAMlJ,IAAU,EACvBkJ,EAAS,GAGlBoF,EAAOtQ,UAAUynB,cAAgB,SAAwBzlB,EAAOkJ,EAAQ+Y,GAMtE,MALAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,MAAQ,GACxDrM,KAAKqM,GAAWlJ,IAAU,EAC1BnD,KAAKqM,EAAS,GAAc,IAARlJ,EACbkJ,EAAS,GAGlBoF,EAAOtQ,UAAU0nB,cAAgB,SAAwB1lB,EAAOkJ,EAAQ+Y,GAQtE,MAPAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,WAAY,GAC5DrM,KAAKqM,EAAS,GAAMlJ,IAAU,GAC9BnD,KAAKqM,EAAS,GAAMlJ,IAAU,GAC9BnD,KAAKqM,EAAS,GAAMlJ,IAAU,EAC9BnD,KAAKqM,GAAmB,IAARlJ,EACTkJ,EAAS,GAGlBoF,EAAOtQ,UAAU2nB,cAAgB,SAAwB3lB,EAAOkJ,EAAQ+Y,GAQtE,MAPAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,WAAY,GAC5DrM,KAAKqM,GAAWlJ,IAAU,GAC1BnD,KAAKqM,EAAS,GAAMlJ,IAAU,GAC9BnD,KAAKqM,EAAS,GAAMlJ,IAAU,EAC9BnD,KAAKqM,EAAS,GAAc,IAARlJ,EACbkJ,EAAS,GAGlBoF,EAAOtQ,UAAU4nB,WAAa,SAAqB5lB,EAAOkJ,EAAQ+Q,EAAYgI,GAG5E,GAFAjiB,GAASA,EACTkJ,KAAoB,GACf+Y,EAAU,CACb,GAAI4D,GAAQtnB,KAAKmmB,IAAI,EAAI,EAAIzK,EAAc,EAE3C4H,GAAShlB,KAAMmD,EAAOkJ,EAAQ+Q,EAAY4L,EAAQ,GAAIA,GAGxD,GAAIzoB,GAAI,EACJ4G,EAAM,EACN8hB,EAAM,CAEV,KADAjpB,KAAKqM,GAAkB,IAARlJ,IACN5C,EAAI6c,IAAejW,GAAO,MAC7BhE,EAAQ,GAAa,IAAR8lB,GAAsC,IAAzBjpB,KAAKqM,EAAS9L,EAAI,KAC9C0oB,EAAM,GAERjpB,KAAKqM,EAAS9L,IAAO4C,EAAQgE,GAAQ,GAAK8hB,EAAM,GAGlD,OAAO5c,GAAS+Q,GAGlB3L,EAAOtQ,UAAU+nB,WAAa,SAAqB/lB,EAAOkJ,EAAQ+Q,EAAYgI,GAG5E,GAFAjiB,GAASA,EACTkJ,KAAoB,GACf+Y,EAAU,CACb,GAAI4D,GAAQtnB,KAAKmmB,IAAI,EAAI,EAAIzK,EAAc,EAE3C4H,GAAShlB,KAAMmD,EAAOkJ,EAAQ+Q,EAAY4L,EAAQ,GAAIA,GAGxD,GAAIzoB,GAAI6c,EAAa,EACjBjW,EAAM,EACN8hB,EAAM,CAEV,KADAjpB,KAAKqM,EAAS9L,GAAa,IAAR4C,IACV5C,GAAK,IAAM4G,GAAO,MACrBhE,EAAQ,GAAa,IAAR8lB,GAAsC,IAAzBjpB,KAAKqM,EAAS9L,EAAI,KAC9C0oB,EAAM,GAERjpB,KAAKqM,EAAS9L,IAAO4C,EAAQgE,GAAQ,GAAK8hB,EAAM,GAGlD,OAAO5c,GAAS+Q,GAGlB3L,EAAOtQ,UAAUgoB,UAAY,SAAoBhmB,EAAOkJ,EAAQ+Y,GAM9D,MALAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,KAAO,KACnDlJ,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtCnD,KAAKqM,GAAmB,IAARlJ,EACTkJ,EAAS,GAGlBoF,EAAOtQ,UAAUioB,aAAe,SAAuBjmB,EAAOkJ,EAAQ+Y,GAMpE,MALAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,OAAS,OACzDrM,KAAKqM,GAAmB,IAARlJ,EAChBnD,KAAKqM,EAAS,GAAMlJ,IAAU,EACvBkJ,EAAS,GAGlBoF,EAAOtQ,UAAUkoB,aAAe,SAAuBlmB,EAAOkJ,EAAQ+Y,GAMpE,MALAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,OAAS,OACzDrM,KAAKqM,GAAWlJ,IAAU,EAC1BnD,KAAKqM,EAAS,GAAc,IAARlJ,EACbkJ,EAAS,GAGlBoF,EAAOtQ,UAAUmoB,aAAe,SAAuBnmB,EAAOkJ,EAAQ+Y,GAQpE,MAPAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,YAAa,YAC7DrM,KAAKqM,GAAmB,IAARlJ,EAChBnD,KAAKqM,EAAS,GAAMlJ,IAAU,EAC9BnD,KAAKqM,EAAS,GAAMlJ,IAAU,GAC9BnD,KAAKqM,EAAS,GAAMlJ,IAAU,GACvBkJ,EAAS,GAGlBoF,EAAOtQ,UAAUooB,aAAe,SAAuBpmB,EAAOkJ,EAAQ+Y,GASpE,MARAjiB,IAASA,EACTkJ,KAAoB,EACf+Y,GAAUJ,EAAShlB,KAAMmD,EAAOkJ,EAAQ,EAAG,YAAa,YACzDlJ,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5CnD,KAAKqM,GAAWlJ,IAAU,GAC1BnD,KAAKqM,EAAS,GAAMlJ,IAAU,GAC9BnD,KAAKqM,EAAS,GAAMlJ,IAAU,EAC9BnD,KAAKqM,EAAS,GAAc,IAARlJ,EACbkJ,EAAS,GAkBlBoF,EAAOtQ,UAAUqoB,aAAe,SAAuBrmB,EAAOkJ,EAAQ+Y,GACpE,MAAOF,GAAWllB,KAAMmD,EAAOkJ,GAAQ,EAAM+Y,IAG/C3T,EAAOtQ,UAAUsoB,aAAe,SAAuBtmB,EAAOkJ,EAAQ+Y,GACpE,MAAOF,GAAWllB,KAAMmD,EAAOkJ,GAAQ,EAAO+Y,IAahD3T,EAAOtQ,UAAUuoB,cAAgB,SAAwBvmB,EAAOkJ,EAAQ+Y,GACtE,MAAOE,GAAYtlB,KAAMmD,EAAOkJ,GAAQ,EAAM+Y,IAGhD3T,EAAOtQ,UAAUwoB,cAAgB,SAAwBxmB,EAAOkJ,EAAQ+Y,GACtE,MAAOE,GAAYtlB,KAAMmD,EAAOkJ,GAAQ,EAAO+Y,IAIjD3T,EAAOtQ,UAAU6Q,KAAO,SAAeuN,EAAQC,EAAa1N,EAAOqN,GACjE,IAAK1N,EAAOiM,SAAS6B,GAAS,KAAM,IAAI1B,WAAU,8BAQlD,IAPK/L,IAAOA,EAAQ,GACfqN,GAAe,IAARA,IAAWA,EAAMnf,KAAKgB,QAC9Bwe,GAAeD,EAAOve,SAAQwe,EAAcD,EAAOve,QAClDwe,IAAaA,EAAc,GAC5BL,EAAM,GAAKA,EAAMrN,IAAOqN,EAAMrN,GAG9BqN,IAAQrN,EAAO,MAAO,EAC1B,IAAsB,IAAlByN,EAAOve,QAAgC,IAAhBhB,KAAKgB,OAAc,MAAO,EAGrD,IAAIwe,EAAc,EAChB,KAAM,IAAI5C,YAAW,4BAEvB,IAAI9K,EAAQ,GAAKA,GAAS9R,KAAKgB,OAAQ,KAAM,IAAI4b,YAAW,qBAC5D,IAAIuC,EAAM,EAAG,KAAM,IAAIvC,YAAW,0BAG9BuC,GAAMnf,KAAKgB,SAAQme,EAAMnf,KAAKgB,QAC9Bue,EAAOve,OAASwe,EAAcL,EAAMrN,IACtCqN,EAAMI,EAAOve,OAASwe,EAAc1N,EAGtC,IAAI6L,GAAMwB,EAAMrN,CAEhB,IAAI9R,OAASuf,GAAqD,kBAApCrC,YAAW/b,UAAUyoB,WAEjD5pB,KAAK4pB,WAAWpK,EAAa1N,EAAOqN,OAC/B,IAAInf,OAASuf,GAAUzN,EAAQ0N,GAAeA,EAAcL,EAEjE,IAAK,GAAI5e,GAAIod,EAAM,EAAGpd,GAAK,IAAKA,EAC9Bgf,EAAOhf,EAAIif,GAAexf,KAAKO,EAAIuR,OAGrCoL,YAAW/b,UAAUmD,IAAIvD,KACvBwe,EACAvf,KAAKqf,SAASvN,EAAOqN,GACrBK,EAIJ,OAAO7B,IAOTlM,EAAOtQ,UAAUse,KAAO,SAAe3C,EAAKhL,EAAOqN,EAAKqC,GAEtD,GAAmB,gBAAR1E,GAAkB,CAS3B,GARqB,gBAAVhL,IACT0P,EAAW1P,EACXA,EAAQ,EACRqN,EAAMnf,KAAKgB,QACa,gBAARme,KAChBqC,EAAWrC,EACXA,EAAMnf,KAAKgB,YAEI4H,KAAb4Y,GAA8C,gBAAbA,GACnC,KAAM,IAAI3D,WAAU,4BAEtB,IAAwB,gBAAb2D,KAA0B/P,EAAOgQ,WAAWD,GACrD,KAAM,IAAI3D,WAAU,qBAAuB2D,EAE7C,IAAmB,IAAf1E,EAAI9b,OAAc,CACpB,GAAIH,GAAOic,EAAIqB,WAAW,IACR,SAAbqD,GAAuB3gB,EAAO,KAClB,WAAb2gB,KAEF1E,EAAMjc,QAGc,gBAARic,GAChBA,GAAY,IACY,iBAARA,KAChBA,EAAMuG,OAAOvG,GAIf,IAAIhL,EAAQ,GAAK9R,KAAKgB,OAAS8Q,GAAS9R,KAAKgB,OAASme,EACpD,KAAM,IAAIvC,YAAW,qBAGvB,IAAIuC,GAAOrN,EACT,MAAO9R,KAGT8R,MAAkB,EAClBqN,MAAcvW,KAARuW,EAAoBnf,KAAKgB,OAASme,IAAQ,EAE3CrC,IAAKA,EAAM,EAEhB,IAAIvc,EACJ,IAAmB,gBAARuc,GACT,IAAKvc,EAAIuR,EAAOvR,EAAI4e,IAAO5e,EACzBP,KAAKO,GAAKuc,MAEP,CACL,GAAIoB,GAAQzM,EAAOiM,SAASZ,GACxBA,EACArL,EAAOzM,KAAK8X,EAAK0E,GACjB7D,EAAMO,EAAMld,MAChB,IAAY,IAAR2c,EACF,KAAM,IAAIE,WAAU,cAAgBf,EAClC,oCAEJ,KAAKvc,EAAI,EAAGA,EAAI4e,EAAMrN,IAASvR,EAC7BP,KAAKO,EAAIuR,GAASoM,EAAM3d,EAAIod,GAIhC,MAAO3d,MAMT,IAAIylB,GAAoB,qBAoJpBZ,EAAsB,WAGxB,IAAK,GADDnQ,GAAQ,GAAIzF,OAAM,KACb1O,EAAI,EAAGA,EAAI,KAAMA,EAExB,IAAK,GADDspB,GAAU,GAAJtpB,EACD+B,EAAI,EAAGA,EAAI,KAAMA,EACxBoS,EAAMmV,EAAMvnB,GALD,mBAKe/B,GALf,mBAK6B+B,EAG5C,OAAOoS,QAGNoV,YAAY,GAAGzE,QAAU,KAAK0E,IAAI,SAAStpB,EAAQhB,EAAOD,GAC7D,YAuBA,IAAI8V,IACF0U,6BAA8B,SAASrV,EAAOsV,EAAGrjB,GAG/C,GAAIsjB,MAIAC,IACJA,GAAMF,GAAK,CAMX,IAAIG,GAAO9U,EAAS+U,cAAcC,MAClCF,GAAKpoB,KAAKioB,EAAG,EAUb,KARA,GAAIM,GACA7pB,EAAG8pB,EACHC,EACAC,EACAC,EACAC,EACAC,GAEIT,EAAKU,SAAS,CAGpBP,EAAUH,EAAKW,MACfrqB,EAAI6pB,EAAQpnB,MACZsnB,EAAiBF,EAAQS,KAGzBN,EAAiB/V,EAAMjU,MAKvB,KAAK8pB,IAAKE,GACJA,EAAeO,eAAeT,KAEhCG,EAAYD,EAAeF,GAK3BI,EAAgCH,EAAiBE,EAMjDE,EAAiBV,EAAMK,QACY,KAAbL,EAAMK,IACTK,EAAiBD,KAClCT,EAAMK,GAAKI,EACXR,EAAKpoB,KAAKwoB,EAAGI,GACbV,EAAaM,GAAK9pB,IAM1B,OAAiB,KAANkG,OAAyC,KAAbujB,EAAMvjB,GAAoB,CAC/D,GAAIskB,IAAO,8BAA+BjB,EAAG,OAAQrjB,EAAG,KAAK6U,KAAK,GAClE,MAAM,IAAI7a,OAAMsqB,GAGlB,MAAOhB,IAGTiB,4CAA6C,SAASjB,EAActjB,GAIlE,IAHA,GAAI2N,MACA7T,EAAIkG,EAEDlG,GACL6T,EAAMvS,KAAKtB,GACGwpB,EAAaxpB,GAC3BA,EAAIwpB,EAAaxpB,EAGnB,OADA6T,GAAMtS,UACCsS,GAGTkB,UAAW,SAASd,EAAOsV,EAAGrjB,GAC5B,GAAIsjB,GAAe5U,EAAS0U,6BAA6BrV,EAAOsV,EAAGrjB,EACnE,OAAO0O,GAAS6V,4CACdjB,EAActjB,IAMlByjB,eACEC,KAAM,SAAUhT,GACd,GAEItC,GAFAoW,EAAI9V,EAAS+U,cACbhqB,IAEJiX,GAAOA,KACP,KAAKtC,IAAOoW,GACNA,EAAEH,eAAejW,KACnB3U,EAAE2U,GAAOoW,EAAEpW,GAKf,OAFA3U,GAAEgrB,SACFhrB,EAAEirB,OAAShU,EAAKgU,QAAUF,EAAEG,eACrBlrB,GAGTkrB,eAAgB,SAAU5qB,EAAGyO,GAC3B,MAAOzO,GAAEqqB,KAAO5b,EAAE4b,MAOpBhpB,KAAM,SAAUmB,EAAO6nB,GACrB,GAAIQ,IAAQroB,MAAOA,EAAO6nB,KAAMA,EAChChrB,MAAKqrB,MAAMrpB,KAAKwpB,GAChBxrB,KAAKqrB,MAAM3X,KAAK1T,KAAKsrB,SAMvBP,IAAK,WACH,MAAO/qB,MAAKqrB,MAAMI,SAGpBX,MAAO,WACL,MAA6B,KAAtB9qB,KAAKqrB,MAAMrqB,cAOF,KAAXvB,IACTA,EAAOD,QAAU8V,QAGboW,IAAI,SAASjrB,EAAQhB,EAAOD,GAClCA,EAAQojB,KAAO,SAAUnf,EAAQ4I,EAAQsf,EAAMC,EAAMC,GACnD,GAAI1rB,GAAGoiB,EACHuJ,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,GAAS,EACT1rB,EAAIorB,EAAQE,EAAS,EAAK,EAC1BjlB,EAAI+kB,GAAQ,EAAI,EAChB1B,EAAIxmB,EAAO4I,EAAS9L,EAOxB,KALAA,GAAKqG,EAELzG,EAAI8pB,GAAM,IAAOgC,GAAU,EAC3BhC,KAAQgC,EACRA,GAASH,EACFG,EAAQ,EAAG9rB,EAAS,IAAJA,EAAWsD,EAAO4I,EAAS9L,GAAIA,GAAKqG,EAAGqlB,GAAS,GAKvE,IAHA1J,EAAIpiB,GAAM,IAAO8rB,GAAU,EAC3B9rB,KAAQ8rB,EACRA,GAASL,EACFK,EAAQ,EAAG1J,EAAS,IAAJA,EAAW9e,EAAO4I,EAAS9L,GAAIA,GAAKqG,EAAGqlB,GAAS,GAEvE,GAAU,IAAN9rB,EACFA,EAAI,EAAI6rB,MACH,CAAA,GAAI7rB,IAAM4rB,EACf,MAAOxJ,GAAI2J,IAAsB7hB,EAAAA,GAAd4f,GAAK,EAAI,EAE5B1H,IAAQ7gB,KAAKmmB,IAAI,EAAG+D,GACpBzrB,GAAQ6rB,EAEV,OAAQ/B,GAAK,EAAI,GAAK1H,EAAI7gB,KAAKmmB,IAAI,EAAG1nB,EAAIyrB,IAG5CpsB,EAAQyD,MAAQ,SAAUQ,EAAQN,EAAOkJ,EAAQsf,EAAMC,EAAMC,GAC3D,GAAI1rB,GAAGoiB,EAAG/hB,EACNsrB,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBI,EAAe,KAATP,EAAclqB,KAAKmmB,IAAI,GAAI,IAAMnmB,KAAKmmB,IAAI,GAAI,IAAM,EAC1DtnB,EAAIorB,EAAO,EAAKE,EAAS,EACzBjlB,EAAI+kB,EAAO,GAAK,EAChB1B,EAAI9mB,EAAQ,GAAgB,IAAVA,GAAe,EAAIA,EAAQ,EAAK,EAAI,CAmC1D,KAjCAA,EAAQzB,KAAKiI,IAAIxG,GAEbuF,MAAMvF,IAAUA,IAAUkH,EAAAA,GAC5BkY,EAAI7Z,MAAMvF,GAAS,EAAI,EACvBhD,EAAI4rB,IAEJ5rB,EAAIuB,KAAKC,MAAMD,KAAKuF,IAAI9D,GAASzB,KAAK0qB,KAClCjpB,GAAS3C,EAAIkB,KAAKmmB,IAAI,GAAI1nB,IAAM,IAClCA,IACAK,GAAK,GAGL2C,GADEhD,EAAI6rB,GAAS,EACNG,EAAK3rB,EAEL2rB,EAAKzqB,KAAKmmB,IAAI,EAAG,EAAImE,GAE5B7oB,EAAQ3C,GAAK,IACfL,IACAK,GAAK,GAGHL,EAAI6rB,GAASD,GACfxJ,EAAI,EACJpiB,EAAI4rB,GACK5rB,EAAI6rB,GAAS,GACtBzJ,GAAMpf,EAAQ3C,EAAK,GAAKkB,KAAKmmB,IAAI,EAAG+D,GACpCzrB,GAAQ6rB,IAERzJ,EAAIpf,EAAQzB,KAAKmmB,IAAI,EAAGmE,EAAQ,GAAKtqB,KAAKmmB,IAAI,EAAG+D,GACjDzrB,EAAI,IAIDyrB,GAAQ,EAAGnoB,EAAO4I,EAAS9L,GAAS,IAAJgiB,EAAUhiB,GAAKqG,EAAG2b,GAAK,IAAKqJ,GAAQ,GAI3E,IAFAzrB,EAAKA,GAAKyrB,EAAQrJ,EAClBuJ,GAAQF,EACDE,EAAO,EAAGroB,EAAO4I,EAAS9L,GAAS,IAAJJ,EAAUI,GAAKqG,EAAGzG,GAAK,IAAK2rB,GAAQ,GAE1EroB,EAAO4I,EAAS9L,EAAIqG,IAAU,IAAJqjB,QAGtBoC,IAAI,SAAS5rB,EAAQhB,EAAOD,GAClC,GAAI4L,MAAcA,QAElB3L,GAAOD,QAAUyP,MAAMQ,SAAW,SAAUgP,GAC1C,MAA6B,kBAAtBrT,EAASrK,KAAK0d,cAGZ,KAAK"}(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.QRCode || (g.QRCode = {})).toSJIS = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
var SJIS_UTF8 = [
  [0x8140, 'ã€€ã€ã€‚ï¼Œï¼Žãƒ»ï¼šï¼›ï¼Ÿï¼ã‚›ã‚œÂ´ï½€Â¨ï¼¾ï¿£ï¼¿ãƒ½ãƒ¾ã‚ã‚žã€ƒä»ã€…ã€†ã€‡ãƒ¼â€•â€ï¼ï¼¼ï½žâˆ¥ï½œâ€¦â€¥â€˜â€™â€œâ€ï¼ˆï¼‰ã€”ã€•ï¼»ï¼½ï½›ï½ã€ˆã€‰ã€Šã€‹ã€Œã€ã€Žã€ã€ã€‘ï¼‹ï¼Â±Ã—'],
  [0x8180, 'Ã·ï¼â‰ ï¼œï¼ž'],
  [0x818f, 'ï¿¥ï¼„ï¿ ï¿¡ï¼…ï¼ƒï¼†ï¼Šï¼ Â§â˜†â˜…'],
  [0x81a6, 'â€»ã€’â†’â†â†‘â†“ã€“'],
  [0x81ca, 'ï¿¢'],
  [0x824f, 'ï¼ï¼‘ï¼’ï¼“ï¼”ï¼•ï¼–ï¼—ï¼˜ï¼™'],
  [0x8260, 'ï¼¡ï¼¢ï¼£ï¼¤ï¼¥ï¼¦ï¼§ï¼¨ï¼©ï¼ªï¼«ï¼¬ï¼­ï¼®ï¼¯ï¼°ï¼±ï¼²ï¼³ï¼´ï¼µï¼¶ï¼·ï¼¸ï¼¹ï¼º'],
  [0x8281, 'ï½ï½‚ï½ƒï½„ï½…ï½†ï½‡ï½ˆï½‰ï½Šï½‹ï½Œï½ï½Žï½ï½ï½‘ï½’ï½“ï½”ï½•ï½–ï½—ï½˜ï½™ï½š'],
  [0x829f, 'ãã‚ãƒã„ã…ã†ã‡ãˆã‰ãŠã‹ãŒããŽããã‘ã’ã“ã”ã•ã–ã—ã˜ã™ãšã›ãœããžãŸã ã¡ã¢ã£ã¤ã¥ã¦ã§ã¨ã©ãªã«ã¬ã­ã®ã¯ã°ã±ã²ã³ã´ãµã¶ã·ã¸ã¹ãºã»ã¼ã½ã¾ã¿ã‚€ã‚ã‚‚ã‚ƒã‚„ã‚…ã‚†ã‚‡ã‚ˆã‚‰ã‚Šã‚‹ã‚Œã‚ã‚Žã‚ã‚ã‚‘ã‚’ã‚“'],
  [0x8340, 'ã‚¡ã‚¢ã‚£ã‚¤ã‚¥ã‚¦ã‚§ã‚¨ã‚©ã‚ªã‚«ã‚¬ã‚­ã‚®ã‚¯ã‚°ã‚±ã‚²ã‚³ã‚´ã‚µã‚¶ã‚·ã‚¸ã‚¹ã‚ºã‚»ã‚¼ã‚½ã‚¾ã‚¿ãƒ€ãƒãƒ‚ãƒƒãƒ„ãƒ…ãƒ†ãƒ‡ãƒˆãƒ‰ãƒŠãƒ‹ãƒŒãƒãƒŽãƒãƒãƒ‘ãƒ’ãƒ“ãƒ”ãƒ•ãƒ–ãƒ—ãƒ˜ãƒ™ãƒšãƒ›ãƒœãƒãƒžãƒŸ'],
  [0x8380, 'ãƒ ãƒ¡ãƒ¢ãƒ£ãƒ¤ãƒ¥ãƒ¦ãƒ§ãƒ¨ãƒ©ãƒªãƒ«ãƒ¬ãƒ­ãƒ®ãƒ¯ãƒ°ãƒ±ãƒ²ãƒ³ãƒ´ãƒµãƒ¶'],
  [0x839f, 'Î‘Î’Î“Î”Î•Î–Î—Î˜Î™ÎšÎ›ÎœÎÎžÎŸÎ Î¡Î£Î¤Î¥Î¦Î§Î¨Î©'],
  [0x83bf, 'Î±Î²Î³Î´ÎµÎ¶Î·Î¸Î¹ÎºÎ»Î¼Î½Î¾Î¿Ï€ÏÏƒÏ„Ï…Ï†Ï‡ÏˆÏ‰'],
  [0x8440, 'ÐÐ‘Ð’Ð“Ð”Ð•ÐÐ–Ð—Ð˜Ð™ÐšÐ›ÐœÐÐžÐŸÐ Ð¡Ð¢Ð£Ð¤Ð¥Ð¦Ð§Ð¨Ð©ÐªÐ«Ð¬Ð­Ð®Ð¯'],
  [0x8470, 'Ð°Ð±Ð²Ð³Ð´ÐµÑ‘Ð¶Ð·Ð¸Ð¹ÐºÐ»Ð¼Ð½'],
  [0x8480, 'Ð¾Ð¿Ñ€ÑÑ‚ÑƒÑ„Ñ…Ñ†Ñ‡ÑˆÑ‰ÑŠÑ‹ÑŒÑÑŽÑ'],
  [0x8780, 'ã€ã€Ÿ'],
  [0x8940, 'é™¢é™°éš éŸ»å‹å³å®‡çƒç¾½è¿‚é›¨å¯éµœçªºä¸‘ç¢“è‡¼æ¸¦å˜˜å”„æ¬è”šé°»å§¥åŽ©æµ¦ç“œé–å™‚äº‘é‹é›²èé¤Œå¡å–¶å¬°å½±æ˜ æ›³æ „æ°¸æ³³æ´©ç‘›ç›ˆç©Žé ´è‹±è¡›è© é‹­æ¶²ç–«ç›Šé§…æ‚¦è¬è¶Šé–²æ¦ŽåŽ­å††'],
  [0x8980, 'åœ’å °å¥„å®´å»¶æ€¨æŽ©æ´æ²¿æ¼”ç‚Žç„”ç…™ç‡•çŒ¿ç¸è‰¶è‹‘è–—é é‰›é´›å¡©æ–¼æ±šç”¥å‡¹å¤®å¥¥å¾€å¿œæŠ¼æ—ºæ¨ªæ¬§æ®´çŽ‹ç¿è¥–é´¬é´Žé»„å²¡æ²–è»å„„å±‹æ†¶è‡†æ¡¶ç‰¡ä¹™ä¿ºå¸æ©æ¸©ç©éŸ³ä¸‹åŒ–ä»®ä½•ä¼½ä¾¡ä½³åŠ å¯å˜‰å¤å«å®¶å¯¡ç§‘æš‡æžœæž¶æ­Œæ²³ç«ç‚ç¦ç¦¾ç¨¼ç®‡èŠ±è‹›èŒ„è·è¯è“è¦èª²å˜©è²¨è¿¦éŽéœžèšŠä¿„å³¨æˆ‘ç‰™ç”»è‡¥èŠ½è›¾è³€é›…é¤“é§•ä»‹ä¼šè§£å›žå¡Šå£Šå»»å¿«æ€ªæ‚”æ¢æ‡æˆ’æ‹æ”¹'],
  [0x8a40, 'é­æ™¦æ¢°æµ·ç°ç•Œçš†çµµèŠ¥èŸ¹é–‹éšŽè²å‡±åŠ¾å¤–å’³å®³å´–æ…¨æ¦‚æ¶¯ç¢è“‹è¡—è©²éŽ§éª¸æµ¬é¦¨è›™åž£æŸ¿è›ŽéˆŽåŠƒåš‡å„å»“æ‹¡æ’¹æ ¼æ ¸æ®»ç²ç¢ºç©«è¦šè§’èµ«è¼ƒéƒ­é–£éš”é©å­¦å²³æ¥½é¡é¡ŽæŽ›ç¬ æ¨«'],
  [0x8a80, 'æ©¿æ¢¶é°æ½Ÿå‰²å–æ°æ‹¬æ´»æ¸‡æ»‘è‘›è¤è½„ä¸”é°¹å¶æ¤›æ¨ºéž„æ ªå…œç«ƒè’²é‡œéŽŒå™›é´¨æ ¢èŒ…è±ç²¥åˆˆè‹…ç“¦ä¹¾ä¾ƒå† å¯’åˆŠå‹˜å‹§å·»å–šå ªå§¦å®Œå®˜å¯›å¹²å¹¹æ‚£æ„Ÿæ…£æ†¾æ›æ•¢æŸ‘æ¡“æ£ºæ¬¾æ­“æ±—æ¼¢æ¾—æ½…ç’°ç”˜ç›£çœ‹ç«¿ç®¡ç°¡ç·©ç¼¶ç¿°è‚è‰¦èŽžè¦³è«Œè²«é‚„é‘‘é–“é–‘é–¢é™¥éŸ“é¤¨èˆ˜ä¸¸å«å²¸å·ŒçŽ©ç™Œçœ¼å²©ç¿«è´‹é›é ‘é¡”é¡˜ä¼ä¼Žå±å–œå™¨åŸºå¥‡å¬‰å¯„å²å¸Œå¹¾å¿Œæ®æœºæ——æ—¢æœŸæ£‹æ£„'],
  [0x8b40, 'æ©Ÿå¸°æ¯…æ°—æ±½ç•¿ç¥ˆå­£ç¨€ç´€å¾½è¦è¨˜è²´èµ·è»Œè¼é£¢é¨Žé¬¼äº€å½å„€å¦“å®œæˆ¯æŠ€æ“¬æ¬ºçŠ ç–‘ç¥‡ç¾©èŸ»èª¼è­°æŽ¬èŠéž å‰åƒå–«æ¡”æ©˜è©°ç §æµé»å´å®¢è„šè™é€†ä¸˜ä¹…ä»‡ä¼‘åŠå¸å®®å¼“æ€¥æ•‘'],
  [0x8b80, 'æœ½æ±‚æ±²æ³£ç¸çƒç©¶çª®ç¬ˆç´šç³¾çµ¦æ—§ç‰›åŽ»å±…å·¨æ‹’æ‹ æŒ™æ¸ è™šè¨±è·é‹¸æ¼ç¦¦é­šäº¨äº«äº¬ä¾›ä¾ åƒ‘å…‡ç«¶å…±å‡¶å”åŒ¡å¿å«å–¬å¢ƒå³¡å¼·å½Šæ€¯ææ­æŒŸæ•™æ©‹æ³ç‹‚ç‹­çŸ¯èƒ¸è„…èˆˆè•Žéƒ·é¡éŸ¿é¥—é©šä»°å‡å°­æšæ¥­å±€æ›²æ¥µçŽ‰æ¡ç²åƒ…å‹¤å‡å·¾éŒ¦æ–¤æ¬£æ¬½ç´ç¦ç¦½ç­‹ç·ŠèŠ¹èŒè¡¿è¥Ÿè¬¹è¿‘é‡‘åŸéŠ€ä¹å€¶å¥åŒºç‹—çŽ–çŸ©è‹¦èº¯é§†é§ˆé§’å…·æ„šè™žå–°ç©ºå¶å¯“é‡éš…ä¸²æ«›é‡§å±‘å±ˆ'],
  [0x8c40, 'æŽ˜çªŸæ²“é´è½¡çªªç†Šéšˆç²‚æ —ç¹°æ¡‘é¬å‹²å›è–«è¨“ç¾¤è»éƒ¡å¦è¢ˆç¥ä¿‚å‚¾åˆ‘å…„å•“åœ­çªåž‹å¥‘å½¢å¾„æµæ…¶æ…§æ†©æŽ²æºæ•¬æ™¯æ¡‚æ¸“ç•¦ç¨½ç³»çµŒç¶™ç¹‹ç½«èŒŽèŠè›è¨ˆè©£è­¦è»½é šé¶èŠ¸è¿Žé¯¨'],
  [0x8c80, 'åŠ‡æˆŸæ’ƒæ¿€éš™æ¡å‚‘æ¬ æ±ºæ½”ç©´çµè¡€è¨£æœˆä»¶å€¹å€¦å¥å…¼åˆ¸å‰£å–§åœå …å«Œå»ºæ†²æ‡¸æ‹³æ²æ¤œæ¨©ç‰½çŠ¬çŒ®ç ”ç¡¯çµ¹çœŒè‚©è¦‹è¬™è³¢è»’é£éµé™ºé¡•é¨“é¹¸å…ƒåŽŸåŽ³å¹»å¼¦æ¸›æºçŽ„ç¾çµƒèˆ·è¨€è«ºé™ä¹Žå€‹å¤å‘¼å›ºå§‘å­¤å·±åº«å¼§æˆ¸æ•…æž¯æ¹–ç‹ç³Šè¢´è‚¡èƒ¡è°è™Žèª‡è·¨éˆ·é›‡é¡§é¼“äº”äº’ä¼åˆå‘‰å¾å¨¯å¾Œå¾¡æ‚Ÿæ¢§æªŽç‘šç¢èªžèª¤è­·é†ä¹žé¯‰äº¤ä½¼ä¾¯å€™å€–å…‰å…¬åŠŸåŠ¹å‹¾åŽšå£å‘'],
  [0x8d40, 'åŽå–‰å‘åž¢å¥½å­”å­å®å·¥å·§å··å¹¸åºƒåºšåº·å¼˜æ’æ…ŒæŠ—æ‹˜æŽ§æ”»æ˜‚æ™ƒæ›´æ­æ ¡æ¢—æ§‹æ±Ÿæ´ªæµ©æ¸¯æºç”²çš‡ç¡¬ç¨¿ç³ ç´…ç´˜çµžç¶±è€•è€ƒè‚¯è‚±è…”è†èˆªè’è¡Œè¡¡è¬›è²¢è³¼éƒŠé…µé‰±ç ¿é‹¼é–¤é™'],
  [0x8d80, 'é …é¦™é«˜é´»å‰›åŠ«å·åˆå£•æ‹·æ¿ è±ªè½Ÿéº¹å…‹åˆ»å‘Šå›½ç©€é…·éµ é»’ç„æ¼‰è…°ç”‘å¿½æƒšéª¨ç‹›è¾¼æ­¤é ƒä»Šå›°å¤å¢¾å©šæ¨æ‡‡æ˜æ˜†æ ¹æ¢±æ··ç—•ç´ºè‰®é­‚äº›ä½å‰å”†åµ¯å·¦å·®æŸ»æ²™ç‘³ç ‚è©éŽ–è£Ÿååº§æŒ«å‚µå‚¬å†æœ€å“‰å¡žå¦»å®°å½©æ‰æŽ¡æ ½æ­³æ¸ˆç½é‡‡çŠ€ç •ç ¦ç¥­æ–Žç´°èœè£è¼‰éš›å‰¤åœ¨æç½ªè²¡å†´å‚é˜ªå ºæ¦Šè‚´å’²å´ŽåŸ¼ç¢•é·ºä½œå‰Šå’‹æ¾æ˜¨æœ”æŸµçª„ç­–ç´¢éŒ¯æ¡œé®­ç¬¹åŒ™å†Šåˆ·'],
  [0x8e40, 'å¯Ÿæ‹¶æ’®æ“¦æœ­æ®ºè–©é›‘çšé¯–æŒéŒ†é®«çš¿æ™’ä¸‰å‚˜å‚å±±æƒ¨æ’’æ•£æ¡Ÿç‡¦çŠç”£ç®—çº‚èš•è®ƒè³›é…¸é¤æ–¬æš«æ®‹ä»•ä»”ä¼ºä½¿åˆºå¸å²å—£å››å£«å§‹å§‰å§¿å­å±å¸‚å¸«å¿—æ€æŒ‡æ”¯å­œæ–¯æ–½æ—¨æžæ­¢'],
  [0x8e80, 'æ­»æ°ç…ç¥‰ç§ç³¸ç´™ç´«è‚¢è„‚è‡³è¦–è©žè©©è©¦èªŒè«®è³‡è³œé›Œé£¼æ­¯äº‹ä¼¼ä¾å…å­—å¯ºæ…ˆæŒæ™‚æ¬¡æ»‹æ²»çˆ¾ç’½ç—”ç£ç¤ºè€Œè€³è‡ªè’”è¾žæ±é¹¿å¼è­˜é´«ç«ºè»¸å®é›«ä¸ƒå±åŸ·å¤±å«‰å®¤æ‚‰æ¹¿æ¼†ç–¾è³ªå®Ÿè”€ç¯ å²æŸ´èŠå±¡è•Šç¸žèˆŽå†™å°„æ¨èµ¦æ–œç…®ç¤¾ç´—è€…è¬è»Šé®è›‡é‚ªå€Ÿå‹ºå°ºæ“ç¼çˆµé…Œé‡ˆéŒ«è‹¥å¯‚å¼±æƒ¹ä¸»å–å®ˆæ‰‹æœ±æ®Šç‹©ç ç¨®è…«è¶£é…’é¦–å„’å—å‘ªå¯¿æŽˆæ¨¹ç¶¬éœ€å›šåŽå‘¨'],
  [0x8f40, 'å®—å°±å·žä¿®æ„æ‹¾æ´²ç§€ç§‹çµ‚ç¹ç¿’è‡­èˆŸè’è¡†è¥²è®è¹´è¼¯é€±é…‹é…¬é›†é†œä»€ä½å……åå¾“æˆŽæŸ”æ±æ¸‹ç£ç¸¦é‡éŠƒå”å¤™å®¿æ·‘ç¥ç¸®ç²›å¡¾ç†Ÿå‡ºè¡“è¿°ä¿Šå³»æ˜¥çž¬ç«£èˆœé§¿å‡†å¾ªæ—¬æ¥¯æ®‰æ·³'],
  [0x8f80, 'æº–æ½¤ç›¾ç´”å·¡éµé†‡é †å‡¦åˆæ‰€æš‘æ›™æ¸šåº¶ç·’ç½²æ›¸è–¯è—·è«¸åŠ©å™å¥³åºå¾æ•é‹¤é™¤å‚·å„Ÿå‹åŒ å‡å¬å“¨å•†å”±å˜—å¥¨å¦¾å¨¼å®µå°†å°å°‘å°šåº„åºŠå» å½°æ‰¿æŠ„æ‹›æŽŒæ·æ˜‡æ˜Œæ˜­æ™¶æ¾æ¢¢æ¨Ÿæ¨µæ²¼æ¶ˆæ¸‰æ¹˜ç„¼ç„¦ç…§ç—‡çœç¡ç¤ç¥¥ç§°ç« ç¬‘ç²§ç´¹è‚–è–è’‹è•‰è¡è£³è¨Ÿè¨¼è©”è©³è±¡è³žé†¤é‰¦é¾é˜éšœéž˜ä¸Šä¸ˆä¸žä¹—å†—å‰°åŸŽå ´å£Œå¬¢å¸¸æƒ…æ“¾æ¡æ–æµ„çŠ¶ç•³ç©£è’¸è­²é†¸éŒ å˜±åŸ´é£¾'],
  [0x9040, 'æ‹­æ¤æ®–ç‡­ç¹”è·è‰²è§¦é£Ÿè•è¾±å°»ä¼¸ä¿¡ä¾µå”‡å¨ å¯å¯©å¿ƒæ…ŽæŒ¯æ–°æ™‹æ£®æ¦›æµ¸æ·±ç”³ç–¹çœŸç¥žç§¦ç´³è‡£èŠ¯è–ªè¦ªè¨ºèº«è¾›é€²é‡éœ‡äººä»åˆƒå¡µå£¬å°‹ç”šå°½è…Žè¨Šè¿…é™£é­ç¬¥è«é ˆé…¢å›³åŽ¨'],
  [0x9080, 'é€—å¹åž‚å¸¥æŽ¨æ°´ç‚Šç¡ç²‹ç¿ è¡°é‚é…”éŒéŒ˜éšç‘žé«„å´‡åµ©æ•°æž¢è¶¨é››æ®æ‰æ¤™è…é —é›€è£¾æ¾„æ‘ºå¯¸ä¸–ç€¬ç•æ˜¯å‡„åˆ¶å‹¢å§“å¾æ€§æˆæ”¿æ•´æ˜Ÿæ™´æ£²æ –æ­£æ¸…ç‰²ç”Ÿç››ç²¾è–å£°è£½è¥¿èª èª“è«‹é€é†’é’é™æ–‰ç¨Žè„†éš»å¸­æƒœæˆšæ–¥æ˜”æžçŸ³ç©ç±ç¸¾è„Šè²¬èµ¤è·¡è¹Ÿç¢©åˆ‡æ‹™æŽ¥æ‘‚æŠ˜è¨­çªƒç¯€èª¬é›ªçµ¶èˆŒè‰ä»™å…ˆåƒå å®£å°‚å°–å·æˆ¦æ‰‡æ’°æ “æ ´æ³‰æµ…æ´—æŸ“æ½œç…Žç…½æ—‹ç©¿ç®­ç·š'],
  [0x9140, 'ç¹Šç¾¨è…ºèˆ›èˆ¹è–¦è©®è³Žè·µé¸é·éŠ­éŠ‘é–ƒé®®å‰å–„æ¼¸ç„¶å…¨ç¦…ç¹•è†³ç³Žå™Œå¡‘å²¨æŽªæ›¾æ›½æ¥šç‹™ç–ç–Žç¤Žç¥–ç§Ÿç²—ç´ çµ„è˜‡è¨´é˜»é¡é¼ åƒ§å‰µåŒå¢å€‰å–ªå£®å¥çˆ½å®‹å±¤åŒæƒ£æƒ³æœæŽƒæŒ¿æŽ»'],
  [0x9180, 'æ“æ—©æ›¹å·£æ§æ§½æ¼•ç‡¥äº‰ç—©ç›¸çª“ç³Ÿç·ç¶œè¡è‰è˜è‘¬è’¼è—»è£…èµ°é€é­éŽ—éœœé¨’åƒå¢—æ†Žè‡“è”µè´ˆé€ ä¿ƒå´å‰‡å³æ¯æ‰æŸæ¸¬è¶³é€Ÿä¿—å±žè³Šæ—ç¶šå’è¢–å…¶æƒå­˜å­«å°Šææ‘éœä»–å¤šå¤ªæ±°è©‘å”¾å •å¦¥æƒ°æ‰“æŸèˆµæ¥•é™€é§„é¨¨ä½“å †å¯¾è€å²±å¸¯å¾…æ€ æ…‹æˆ´æ›¿æ³°æ»žèƒŽè…¿è‹”è¢‹è²¸é€€é€®éšŠé»›é¯›ä»£å°å¤§ç¬¬é†é¡Œé·¹æ»ç€§å“å•„å®…æ‰˜æŠžæ‹“æ²¢æ¿¯ç¢è¨—é¸æ¿è«¾èŒ¸å‡§è›¸åª'],
  [0x9240, 'å©ä½†é”è¾°å¥ªè„±å·½ç«ªè¾¿æ£šè°·ç‹¸é±ˆæ¨½èª°ä¸¹å˜å˜†å¦æ‹…æŽ¢æ—¦æ­Žæ·¡æ¹›ç‚­çŸ­ç«¯ç®ªç¶»è€½èƒ†è›‹èª•é›å›£å£‡å¼¾æ–­æš–æª€æ®µç”·è«‡å€¤çŸ¥åœ°å¼›æ¥æ™ºæ± ç—´ç¨šç½®è‡´èœ˜é…é¦³ç¯‰ç•œç«¹ç­‘è“„'],
  [0x9280, 'é€ç§©çª’èŒ¶å«¡ç€ä¸­ä»²å®™å¿ æŠ½æ˜¼æŸ±æ³¨è™«è¡·è¨»é…Žé‹³é§æ¨—ç€¦çŒªè‹§è‘—è²¯ä¸å…†å‡‹å–‹å¯µå¸–å¸³åºå¼”å¼µå½«å¾´æ‡²æŒ‘æš¢æœæ½®ç‰’ç”ºçœºè´è„¹è…¸è¶èª¿è«œè¶…è·³éŠšé•·é ‚é³¥å‹…æ—ç›´æœ•æ²ˆçè³ƒéŽ®é™³æ´¥å¢œæ¤Žæ§Œè¿½éŽšç—›é€šå¡šæ ‚æŽ´æ§»ä½ƒæ¼¬æŸ˜è¾»è”¦ç¶´é”æ¤¿æ½°åªå£·å¬¬ç´¬çˆªåŠé‡£é¶´äº­ä½Žåœåµå‰ƒè²žå‘ˆå ¤å®šå¸åº•åº­å»·å¼Ÿæ‚ŒæŠµæŒºææ¢¯æ±€ç¢‡ç¦Žç¨‹ç· è‰‡è¨‚è«¦è¹„é€“'],
  [0x9340, 'é‚¸é„­é‡˜é¼Žæ³¥æ‘˜æ“¢æ•µæ»´çš„ç¬›é©é‘æººå“²å¾¹æ’¤è½è¿­é‰„å…¸å¡«å¤©å±•åº—æ·»çºç”œè²¼è»¢é¡›ç‚¹ä¼æ®¿æ¾±ç”°é›»å…Žåå µå¡—å¦¬å± å¾’æ–—æœæ¸¡ç™»èŸè³­é€”éƒ½éç ¥ç ºåŠªåº¦åœŸå¥´æ€’å€’å…šå†¬'],
  [0x9380, 'å‡åˆ€å”å¡”å¡˜å¥—å®•å³¶å¶‹æ‚¼æŠ•æ­æ±æ¡ƒæ¢¼æ£Ÿç›—æ·˜æ¹¯æ¶›ç¯ç‡ˆå½“ç—˜ç¥·ç­‰ç­”ç­’ç³–çµ±åˆ°è‘£è•©è—¤è¨Žè¬„è±†è¸é€ƒé€é™é™¶é ­é¨°é—˜åƒå‹•åŒå ‚å°Žæ†§æ’žæ´žçž³ç«¥èƒ´è„é“éŠ…å³ é´‡åŒ¿å¾—å¾³æ¶œç‰¹ç£ç¦¿ç¯¤æ¯’ç‹¬èª­æ ƒæ©¡å‡¸çªæ¤´å±Šé³¶è‹«å¯…é…‰ç€žå™¸å±¯æƒ‡æ•¦æ²Œè±šéé “å‘‘æ›‡éˆå¥ˆé‚£å†…ä¹å‡ªè–™è¬Žç˜æºé‹æ¥¢é¦´ç¸„ç•·å—æ¥ è»Ÿé›£æ±äºŒå°¼å¼è¿©åŒ‚è³‘è‚‰è™¹å»¿æ—¥ä¹³å…¥'],
  [0x9440, 'å¦‚å°¿éŸ®ä»»å¦Šå¿èªæ¿¡ç¦°ç¥¢å¯§è‘±çŒ«ç†±å¹´å¿µæ»æ’šç‡ƒç²˜ä¹ƒå»¼ä¹‹åŸœåš¢æ‚©æ¿ƒç´èƒ½è„³è†¿è¾²è¦—èš¤å·´æŠŠæ’­è¦‡æ·æ³¢æ´¾ç¶ç ´å©†ç½µèŠ­é¦¬ä¿³å»ƒæ‹æŽ’æ•—æ¯ç›ƒç‰ŒèƒŒè‚ºè¼©é…å€åŸ¹åª’æ¢…'],
  [0x9480, 'æ¥³ç…¤ç‹½è²·å£²è³ é™ªé€™è¿ç§¤çŸ§è©ä¼¯å‰¥åšæ‹æŸæ³Šç™½ç®”ç²•èˆ¶è–„è¿«æ›æ¼ çˆ†ç¸›èŽ«é§éº¦å‡½ç®±ç¡²ç®¸è‚‡ç­ˆæ«¨å¹¡è‚Œç•‘ç• å…«é‰¢æºŒç™ºé†—é«ªä¼ç½°æŠœç­é–¥é³©å™ºå¡™è›¤éš¼ä¼´åˆ¤åŠåå›å¸†æ¬æ–‘æ¿æ°¾æ±Žç‰ˆçŠ¯ç­ç•”ç¹èˆ¬è—©è²©ç¯„é‡†ç…©é ’é£¯æŒ½æ™©ç•ªç›¤ç£è•ƒè›®åŒªå‘å¦å¦ƒåº‡å½¼æ‚²æ‰‰æ‰¹æŠ«æ–æ¯”æ³Œç–²çš®ç¢‘ç§˜ç·‹ç½·è‚¥è¢«èª¹è²»é¿éžé£›æ¨‹ç°¸å‚™å°¾å¾®æž‡æ¯˜çµçœ‰ç¾Ž'],
  [0x9540, 'é¼»æŸŠç¨—åŒ¹ç–‹é«­å½¦è†è±è‚˜å¼¼å¿…ç•¢ç­†é€¼æ¡§å§«åª›ç´ç™¾è¬¬ä¿µå½ªæ¨™æ°·æ¼‚ç“¢ç¥¨è¡¨è©•è±¹å»Ÿæç—…ç§’è‹—éŒ¨é‹²è’œè›­é°­å“å½¬æ–Œæµœç€•è²§è³“é »æ•ç“¶ä¸ä»˜åŸ å¤«å©¦å¯Œå†¨å¸ƒåºœæ€–æ‰¶æ•·'],
  [0x9580, 'æ–§æ™®æµ®çˆ¶ç¬¦è…è†šèŠ™è­œè² è³¦èµ´é˜œé™„ä¾®æ’«æ­¦èˆžè‘¡è•ªéƒ¨å°æ¥“é¢¨è‘ºè•—ä¼å‰¯å¾©å¹…æœç¦è…¹è¤‡è¦†æ·µå¼—æ‰•æ²¸ä»ç‰©é®’åˆ†å»å™´å¢³æ†¤æ‰®ç„šå¥®ç²‰ç³žç´›é›°æ–‡èžä¸™ä½µå…µå¡€å¹£å¹³å¼ŠæŸ„ä¸¦è”½é–‰é™›ç±³é åƒ»å£ç™–ç¢§åˆ¥çž¥è”‘ç®†åå¤‰ç‰‡ç¯‡ç·¨è¾ºè¿”éä¾¿å‹‰å¨©å¼éž­ä¿èˆ—é‹ªåœƒæ•æ­©ç”«è£œè¼”ç©‚å‹Ÿå¢“æ…•æˆŠæš®æ¯ç°¿è©å€£ä¿¸åŒ…å‘†å ±å¥‰å®å³°å³¯å´©åº–æŠ±æ§æ”¾æ–¹æœ‹'],
  [0x9640, 'æ³•æ³¡çƒ¹ç ²ç¸«èƒžèŠ³èŒè“¬èœ‚è¤’è¨ªè±Šé‚¦é‹’é£½é³³éµ¬ä¹äº¡å‚å‰–åŠå¦¨å¸½å¿˜å¿™æˆ¿æš´æœ›æŸæ£’å†’ç´¡è‚ªè†¨è¬€è²Œè²¿é‰¾é˜²å é ¬åŒ—åƒ•åœå¢¨æ’²æœ´ç‰§ç¦ç©†é‡¦å‹ƒæ²¡æ®†å €å¹Œå¥”æœ¬ç¿»å‡¡ç›†'],
  [0x9680, 'æ‘©ç£¨é­”éº»åŸ‹å¦¹æ˜§æžšæ¯Žå“©æ§™å¹•è†œæž•é®ªæŸ¾é±’æ¡äº¦ä¿£åˆæŠ¹æœ«æ²«è¿„ä¾­ç¹­éº¿ä¸‡æ…¢æº€æ¼«è”“å‘³æœªé­…å·³ç®•å²¬å¯†èœœæ¹Šè“‘ç¨”è„ˆå¦™ç²æ°‘çœ å‹™å¤¢ç„¡ç‰ŸçŸ›éœ§éµ¡æ¤‹å©¿å¨˜å†¥åå‘½æ˜Žç›Ÿè¿·éŠ˜é³´å§ªç‰æ»…å…æ£‰ç¶¿ç·¬é¢éººæ‘¸æ¨¡èŒ‚å¦„å­Ÿæ¯›çŒ›ç›²ç¶²è€—è’™å„²æœ¨é»™ç›®æ¢å‹¿é¤…å°¤æˆ»ç±¾è²°å•æ‚¶ç´‹é–€åŒä¹Ÿå†¶å¤œçˆºè€¶é‡Žå¼¥çŸ¢åŽ„å½¹ç´„è–¬è¨³èºé–æŸ³è–®é‘“æ„‰æ„ˆæ²¹ç™’'],
  [0x9740, 'è«­è¼¸å”¯ä½‘å„ªå‹‡å‹å®¥å¹½æ‚ æ†‚æ–æœ‰æŸšæ¹§æ¶ŒçŒ¶çŒ·ç”±ç¥è£•èª˜éŠé‚‘éƒµé›„èžå¤•äºˆä½™ä¸Žèª‰è¼¿é å‚­å¹¼å¦–å®¹åº¸æšæºæ“æ›œæ¥Šæ§˜æ´‹æº¶ç†”ç”¨çª¯ç¾Šè€€è‘‰è“‰è¦è¬¡è¸Šé¥é™½é¤Šæ…¾æŠ‘æ¬²'],
  [0x9780, 'æ²ƒæµ´ç¿Œç¿¼æ·€ç¾…èžºè£¸æ¥èŽ±é ¼é›·æ´›çµ¡è½é…ªä¹±åµåµæ¬„æ¿«è—è˜­è¦§åˆ©åå±¥æŽæ¢¨ç†ç’ƒç—¢è£è£¡é‡Œé›¢é™¸å¾‹çŽ‡ç«‹è‘ŽæŽ ç•¥åŠ‰æµæºœç‰ç•™ç¡«ç²’éš†ç«œé¾ä¾¶æ…®æ—…è™œäº†äº®åƒšä¸¡å‡Œå¯®æ–™æ¢æ¶¼çŒŸç™‚çž­ç¨œç³§è‰¯è«’é¼é‡é™µé ˜åŠ›ç·‘å€«åŽ˜æž—æ·‹ç‡ç³è‡¨è¼ªéš£é±—éºŸç‘ å¡æ¶™ç´¯é¡žä»¤ä¼¶ä¾‹å†·åŠ±å¶ºæ€œçŽ²ç¤¼è‹“éˆ´éš·é›¶éœŠéº—é½¢æš¦æ­´åˆ—åŠ£çƒˆè£‚å»‰æ‹æ†æ¼£ç…‰ç°¾ç·´è¯'],
  [0x9840, 'è“®é€£éŒ¬å‘‚é­¯æ«“ç‚‰è³‚è·¯éœ²åŠ´å©å»Šå¼„æœ—æ¥¼æ¦”æµªæ¼ç‰¢ç‹¼ç¯­è€è¾è‹éƒŽå…­éº“ç¦„è‚‹éŒ²è«–å€­å’Œè©±æ­ªè³„è„‡æƒ‘æž é·²äº™äº˜é°è©«è—è•¨æ¤€æ¹¾ç¢—è…•'],
  [0x989f, 'å¼Œä¸ä¸•ä¸ªä¸±ä¸¶ä¸¼ä¸¿ä¹‚ä¹–ä¹˜äº‚äº…è±«äºŠèˆ’å¼äºŽäºžäºŸäº äº¢äº°äº³äº¶ä»Žä»ä»„ä»†ä»‚ä»—ä»žä»­ä»Ÿä»·ä¼‰ä½šä¼°ä½›ä½ä½—ä½‡ä½¶ä¾ˆä¾ä¾˜ä½»ä½©ä½°ä¾‘ä½¯ä¾†ä¾–å„˜ä¿”ä¿Ÿä¿Žä¿˜ä¿›ä¿‘ä¿šä¿ä¿¤ä¿¥å€šå€¨å€”å€ªå€¥å€…ä¼œä¿¶å€¡å€©å€¬ä¿¾ä¿¯å€‘å€†åƒå‡æœƒå•ååˆåšå–å¬å¸å‚€å‚šå‚…å‚´å‚²'],
  [0x9940, 'åƒ‰åƒŠå‚³åƒ‚åƒ–åƒžåƒ¥åƒ­åƒ£åƒ®åƒ¹åƒµå„‰å„å„‚å„–å„•å„”å„šå„¡å„ºå„·å„¼å„»å„¿å…€å…’å…Œå…”å…¢ç«¸å…©å…ªå…®å†€å†‚å›˜å†Œå†‰å†å†‘å†“å†•å†–å†¤å†¦å†¢å†©å†ªå†«å†³å†±å†²å†°å†µå†½å‡…å‡‰å‡›å‡ è™•å‡©å‡­'],
  [0x9980, 'å‡°å‡µå‡¾åˆ„åˆ‹åˆ”åˆŽåˆ§åˆªåˆ®åˆ³åˆ¹å‰å‰„å‰‹å‰Œå‰žå‰”å‰ªå‰´å‰©å‰³å‰¿å‰½åŠåŠ”åŠ’å‰±åŠˆåŠ‘è¾¨è¾§åŠ¬åŠ­åŠ¼åŠµå‹å‹å‹—å‹žå‹£å‹¦é£­å‹ å‹³å‹µå‹¸å‹¹åŒ†åŒˆç”¸åŒåŒåŒåŒ•åŒšåŒ£åŒ¯åŒ±åŒ³åŒ¸å€å†å…ä¸—å‰åå‡–åžå©å®å¤˜å»å·åŽ‚åŽ–åŽ åŽ¦åŽ¥åŽ®åŽ°åŽ¶åƒç°’é›™åŸæ›¼ç‡®å®å¨å­åºåå½å‘€å¬å­å¼å®å¶å©åå‘Žå’å‘µå’Žå‘Ÿå‘±å‘·å‘°å’’å‘»å’€å‘¶å’„å’å’†å“‡å’¢å’¸å’¥å’¬å“„å“ˆå’¨'],
  [0x9a40, 'å’«å“‚å’¤å’¾å’¼å“˜å“¥å“¦å”å””å“½å“®å“­å“ºå“¢å”¹å•€å•£å•Œå”®å•œå•…å•–å•—å”¸å”³å•å–™å–€å’¯å–Šå–Ÿå•»å•¾å–˜å–žå–®å•¼å–ƒå–©å–‡å–¨å—šå—…å—Ÿå—„å—œå—¤å—”å˜”å—·å˜–å—¾å—½å˜›å—¹å™Žå™ç‡Ÿå˜´å˜¶å˜²å˜¸'],
  [0x9a80, 'å™«å™¤å˜¯å™¬å™ªåš†åš€åšŠåš åš”åšåš¥åš®åš¶åš´å›‚åš¼å›å›ƒå›€å›ˆå›Žå›‘å›“å›—å›®å›¹åœ€å›¿åœ„åœ‰åœˆåœ‹åœåœ“åœ˜åœ–å—‡åœœåœ¦åœ·åœ¸åŽåœ»å€åå©åŸ€åžˆå¡å¿åž‰åž“åž åž³åž¤åžªåž°åŸƒåŸ†åŸ”åŸ’åŸ“å ŠåŸ–åŸ£å ‹å ™å å¡²å ¡å¡¢å¡‹å¡°æ¯€å¡’å ½å¡¹å¢…å¢¹å¢Ÿå¢«å¢ºå£žå¢»å¢¸å¢®å£…å£“å£‘å£—å£™å£˜å£¥å£œå£¤å£Ÿå£¯å£ºå£¹å£»å£¼å£½å¤‚å¤Šå¤å¤›æ¢¦å¤¥å¤¬å¤­å¤²å¤¸å¤¾ç«’å¥•å¥å¥Žå¥šå¥˜å¥¢å¥ å¥§å¥¬å¥©'],
  [0x9b40, 'å¥¸å¦å¦ä½žä¾«å¦£å¦²å§†å§¨å§œå¦å§™å§šå¨¥å¨Ÿå¨‘å¨œå¨‰å¨šå©€å©¬å©‰å¨µå¨¶å©¢å©ªåªšåª¼åª¾å«‹å«‚åª½å«£å«—å«¦å«©å«–å«ºå«»å¬Œå¬‹å¬–å¬²å«å¬ªå¬¶å¬¾å­ƒå­…å­€å­‘å­•å­šå­›å­¥å­©å­°å­³å­µå­¸æ–ˆå­ºå®€'],
  [0x9b80, 'å®ƒå®¦å®¸å¯ƒå¯‡å¯‰å¯”å¯å¯¤å¯¦å¯¢å¯žå¯¥å¯«å¯°å¯¶å¯³å°…å°‡å°ˆå°å°“å° å°¢å°¨å°¸å°¹å±å±†å±Žå±“å±å±å­±å±¬å±®ä¹¢å±¶å±¹å²Œå²‘å²”å¦›å²«å²»å²¶å²¼å²·å³…å²¾å³‡å³™å³©å³½å³ºå³­å¶Œå³ªå´‹å´•å´—åµœå´Ÿå´›å´‘å´”å´¢å´šå´™å´˜åµŒåµ’åµŽåµ‹åµ¬åµ³åµ¶å¶‡å¶„å¶‚å¶¢å¶å¶¬å¶®å¶½å¶å¶·å¶¼å·‰å·å·“å·’å·–å·›å·«å·²å·µå¸‹å¸šå¸™å¸‘å¸›å¸¶å¸·å¹„å¹ƒå¹€å¹Žå¹—å¹”å¹Ÿå¹¢å¹¤å¹‡å¹µå¹¶å¹ºéº¼å¹¿åº å»å»‚å»ˆå»å»'],
  [0x9c40, 'å»–å»£å»å»šå»›å»¢å»¡å»¨å»©å»¬å»±å»³å»°å»´å»¸å»¾å¼ƒå¼‰å½å½œå¼‹å¼‘å¼–å¼©å¼­å¼¸å½å½ˆå½Œå½Žå¼¯å½‘å½–å½—å½™å½¡å½­å½³å½·å¾ƒå¾‚å½¿å¾Šå¾ˆå¾‘å¾‡å¾žå¾™å¾˜å¾ å¾¨å¾­å¾¼å¿–å¿»å¿¤å¿¸å¿±å¿æ‚³å¿¿æ€¡æ '],
  [0x9c80, 'æ€™æ€æ€©æ€Žæ€±æ€›æ€•æ€«æ€¦æ€æ€ºæšææªæ·æŸæŠæ†ææ£æƒæ¤æ‚æ¬æ«æ™æ‚æ‚æƒ§æ‚ƒæ‚šæ‚„æ‚›æ‚–æ‚—æ‚’æ‚§æ‚‹æƒ¡æ‚¸æƒ æƒ“æ‚´å¿°æ‚½æƒ†æ‚µæƒ˜æ…æ„•æ„†æƒ¶æƒ·æ„€æƒ´æƒºæ„ƒæ„¡æƒ»æƒ±æ„æ„Žæ…‡æ„¾æ„¨æ„§æ…Šæ„¿æ„¼æ„¬æ„´æ„½æ…‚æ…„æ…³æ…·æ…˜æ…™æ…šæ…«æ…´æ…¯æ…¥æ…±æ…Ÿæ…æ…“æ…µæ†™æ†–æ†‡æ†¬æ†”æ†šæ†Šæ†‘æ†«æ†®æ‡Œæ‡Šæ‡‰æ‡·æ‡ˆæ‡ƒæ‡†æ†ºæ‡‹ç½¹æ‡æ‡¦æ‡£æ‡¶æ‡ºæ‡´æ‡¿æ‡½æ‡¼æ‡¾æˆ€æˆˆæˆ‰æˆæˆŒæˆ”æˆ›'],
  [0x9d40, 'æˆžæˆ¡æˆªæˆ®æˆ°æˆ²æˆ³æ‰æ‰Žæ‰žæ‰£æ‰›æ‰ æ‰¨æ‰¼æŠ‚æŠ‰æ‰¾æŠ’æŠ“æŠ–æ‹”æŠƒæŠ”æ‹—æ‹‘æŠ»æ‹æ‹¿æ‹†æ“”æ‹ˆæ‹œæ‹Œæ‹Šæ‹‚æ‹‡æŠ›æ‹‰æŒŒæ‹®æ‹±æŒ§æŒ‚æŒˆæ‹¯æ‹µææŒ¾ææœææŽ–æŽŽæŽ€æŽ«æ¶æŽ£æŽæŽ‰æŽŸæŽµæ«'],
  [0x9d80, 'æ©æŽ¾æ©æ€æ†æ£æ‰æ’æ¶æ„æ–æ´æ†æ“æ¦æ¶æ”æ—æ¨ææ‘§æ‘¯æ‘¶æ‘Žæ”ªæ’•æ’“æ’¥æ’©æ’ˆæ’¼æ“šæ“’æ“…æ“‡æ’»æ“˜æ“‚æ“±æ“§èˆ‰æ“ æ“¡æŠ¬æ“£æ“¯æ”¬æ“¶æ“´æ“²æ“ºæ”€æ“½æ”˜æ”œæ”…æ”¤æ”£æ”«æ”´æ”µæ”·æ”¶æ”¸ç•‹æ•ˆæ•–æ••æ•æ•˜æ•žæ•æ•²æ•¸æ–‚æ–ƒè®Šæ–›æ–Ÿæ–«æ–·æ—ƒæ—†æ—æ—„æ—Œæ—’æ—›æ—™æ— æ—¡æ—±æ²æ˜Šæ˜ƒæ—»æ³æ˜µæ˜¶æ˜´æ˜œæ™æ™„æ™‰æ™æ™žæ™æ™¤æ™§æ™¨æ™Ÿæ™¢æ™°æšƒæšˆæšŽæš‰æš„æš˜æšæ›æš¹æ›‰æš¾æš¼'],
  [0x9e40, 'æ›„æš¸æ›–æ›šæ› æ˜¿æ›¦æ›©æ›°æ›µæ›·æœæœ–æœžæœ¦æœ§éœ¸æœ®æœ¿æœ¶ææœ¸æœ·æ†æžæ æ™æ£æ¤æž‰æ°æž©æ¼æªæžŒæž‹æž¦æž¡æž…æž·æŸ¯æž´æŸ¬æž³æŸ©æž¸æŸ¤æŸžæŸæŸ¢æŸ®æž¹æŸŽæŸ†æŸ§æªœæ žæ¡†æ ©æ¡€æ¡æ ²æ¡Ž'],
  [0x9e80, 'æ¢³æ «æ¡™æ¡£æ¡·æ¡¿æ¢Ÿæ¢æ¢­æ¢”æ¢æ¢›æ¢ƒæª®æ¢¹æ¡´æ¢µæ¢ æ¢ºæ¤æ¢æ¡¾æ¤æ£Šæ¤ˆæ£˜æ¤¢æ¤¦æ£¡æ¤Œæ£æ£”æ£§æ£•æ¤¶æ¤’æ¤„æ£—æ££æ¤¥æ£¹æ£ æ£¯æ¤¨æ¤ªæ¤šæ¤£æ¤¡æ£†æ¥¹æ¥·æ¥œæ¥¸æ¥«æ¥”æ¥¾æ¥®æ¤¹æ¥´æ¤½æ¥™æ¤°æ¥¡æ¥žæ¥æ¦æ¥ªæ¦²æ¦®æ§æ¦¿æ§æ§“æ¦¾æ§Žå¯¨æ§Šæ§æ¦»æ§ƒæ¦§æ¨®æ¦‘æ¦ æ¦œæ¦•æ¦´æ§žæ§¨æ¨‚æ¨›æ§¿æ¬Šæ§¹æ§²æ§§æ¨…æ¦±æ¨žæ§­æ¨”æ§«æ¨Šæ¨’æ«æ¨£æ¨“æ©„æ¨Œæ©²æ¨¶æ©¸æ©‡æ©¢æ©™æ©¦æ©ˆæ¨¸æ¨¢æªæªæª æª„æª¢æª£'],
  [0x9f40, 'æª—è˜—æª»æ«ƒæ«‚æª¸æª³æª¬æ«žæ«‘æ«Ÿæªªæ«šæ«ªæ«»æ¬…è˜–æ«ºæ¬’æ¬–é¬±æ¬Ÿæ¬¸æ¬·ç›œæ¬¹é£®æ­‡æ­ƒæ­‰æ­æ­™æ­”æ­›æ­Ÿæ­¡æ­¸æ­¹æ­¿æ®€æ®„æ®ƒæ®æ®˜æ®•æ®žæ®¤æ®ªæ®«æ®¯æ®²æ®±æ®³æ®·æ®¼æ¯†æ¯‹æ¯“æ¯Ÿæ¯¬æ¯«æ¯³æ¯¯'],
  [0x9f80, 'éº¾æ°ˆæ°“æ°”æ°›æ°¤æ°£æ±žæ±•æ±¢æ±ªæ²‚æ²æ²šæ²æ²›æ±¾æ±¨æ±³æ²’æ²æ³„æ³±æ³“æ²½æ³—æ³…æ³æ²®æ²±æ²¾æ²ºæ³›æ³¯æ³™æ³ªæ´Ÿè¡æ´¶æ´«æ´½æ´¸æ´™æ´µæ´³æ´’æ´Œæµ£æ¶“æµ¤æµšæµ¹æµ™æ¶Žæ¶•æ¿¤æ¶…æ·¹æ¸•æ¸Šæ¶µæ·‡æ·¦æ¶¸æ·†æ·¬æ·žæ·Œæ·¨æ·’æ·…æ·ºæ·™æ·¤æ·•æ·ªæ·®æ¸­æ¹®æ¸®æ¸™æ¹²æ¹Ÿæ¸¾æ¸£æ¹«æ¸«æ¹¶æ¹æ¸Ÿæ¹ƒæ¸ºæ¹Žæ¸¤æ»¿æ¸æ¸¸æº‚æºªæº˜æ»‰æº·æ»“æº½æº¯æ»„æº²æ»”æ»•æºæº¥æ»‚æºŸæ½æ¼‘çŒæ»¬æ»¸æ»¾æ¼¿æ»²æ¼±æ»¯æ¼²æ»Œ'],
  [0xe040, 'æ¼¾æ¼“æ»·æ¾†æ½ºæ½¸æ¾æ¾€æ½¯æ½›æ¿³æ½­æ¾‚æ½¼æ½˜æ¾Žæ¾‘æ¿‚æ½¦æ¾³æ¾£æ¾¡æ¾¤æ¾¹æ¿†æ¾ªæ¿Ÿæ¿•æ¿¬æ¿”æ¿˜æ¿±æ¿®æ¿›ç€‰ç€‹æ¿ºç€‘ç€ç€æ¿¾ç€›ç€šæ½´ç€ç€˜ç€Ÿç€°ç€¾ç€²ç‘ç£ç‚™ç‚’ç‚¯çƒ±ç‚¬ç‚¸ç‚³ç‚®çƒŸçƒ‹çƒ'],
  [0xe080, 'çƒ™ç„‰çƒ½ç„œç„™ç…¥ç…•ç†ˆç…¦ç…¢ç…Œç…–ç…¬ç†ç‡»ç†„ç†•ç†¨ç†¬ç‡—ç†¹ç†¾ç‡’ç‡‰ç‡”ç‡Žç‡ ç‡¬ç‡§ç‡µç‡¼ç‡¹ç‡¿çˆçˆçˆ›çˆ¨çˆ­çˆ¬çˆ°çˆ²çˆ»çˆ¼çˆ¿ç‰€ç‰†ç‰‹ç‰˜ç‰´ç‰¾çŠ‚çŠçŠ‡çŠ’çŠ–çŠ¢çŠ§çŠ¹çŠ²ç‹ƒç‹†ç‹„ç‹Žç‹’ç‹¢ç‹ ç‹¡ç‹¹ç‹·å€çŒ—çŒŠçŒœçŒ–çŒçŒ´çŒ¯çŒ©çŒ¥çŒ¾çŽçé»˜ç—çªç¨ç°ç¸çµç»çºçˆçŽ³çŽçŽ»ç€ç¥ç®çžç’¢ç…ç‘¯ç¥ç¸ç²çºç‘•ç¿ç‘Ÿç‘™ç‘ç‘œç‘©ç‘°ç‘£ç‘ªç‘¶ç‘¾ç’‹ç’žç’§ç“Šç“ç“”ç±'],
  [0xe140, 'ç“ ç“£ç“§ç“©ç“®ç“²ç“°ç“±ç“¸ç“·ç”„ç”ƒç”…ç”Œç”Žç”ç”•ç”“ç”žç”¦ç”¬ç”¼ç•„ç•ç•Šç•‰ç•›ç•†ç•šç•©ç•¤ç•§ç•«ç•­ç•¸ç•¶ç–†ç–‡ç•´ç–Šç–‰ç–‚ç–”ç–šç–ç–¥ç–£ç—‚ç–³ç—ƒç–µç–½ç–¸ç–¼ç–±ç—ç—Šç—’ç—™ç—£ç—žç—¾ç—¿'],
  [0xe180, 'ç—¼ç˜ç—°ç—ºç—²ç—³ç˜‹ç˜ç˜‰ç˜Ÿç˜§ç˜ ç˜¡ç˜¢ç˜¤ç˜´ç˜°ç˜»ç™‡ç™ˆç™†ç™œç™˜ç™¡ç™¢ç™¨ç™©ç™ªç™§ç™¬ç™°ç™²ç™¶ç™¸ç™¼çš€çšƒçšˆçš‹çšŽçš–çš“çš™çššçš°çš´çš¸çš¹çšºç›‚ç›ç›–ç›’ç›žç›¡ç›¥ç›§ç›ªè˜¯ç›»çœˆçœ‡çœ„çœ©çœ¤çœžçœ¥çœ¦çœ›çœ·çœ¸ç‡çšç¨ç«ç›ç¥ç¿ç¾ç¹çžŽçž‹çž‘çž çžžçž°çž¶çž¹çž¿çž¼çž½çž»çŸ‡çŸçŸ—çŸšçŸœçŸ£çŸ®çŸ¼ç Œç ’ç¤¦ç  ç¤ªç¡…ç¢Žç¡´ç¢†ç¡¼ç¢šç¢Œç¢£ç¢µç¢ªç¢¯ç£‘ç£†ç£‹ç£”ç¢¾ç¢¼ç£…ç£Šç£¬'],
  [0xe240, 'ç£§ç£šç£½ç£´ç¤‡ç¤’ç¤‘ç¤™ç¤¬ç¤«ç¥€ç¥ ç¥—ç¥Ÿç¥šç¥•ç¥“ç¥ºç¥¿ç¦Šç¦ç¦§é½‹ç¦ªç¦®ç¦³ç¦¹ç¦ºç§‰ç§•ç§§ç§¬ç§¡ç§£ç¨ˆç¨ç¨˜ç¨™ç¨ ç¨Ÿç¦€ç¨±ç¨»ç¨¾ç¨·ç©ƒç©—ç©‰ç©¡ç©¢ç©©é¾ç©°ç©¹ç©½çªˆçª—çª•çª˜çª–çª©ç«ˆçª°'],
  [0xe280, 'çª¶ç«…ç«„çª¿é‚ƒç«‡ç«Šç«ç«ç«•ç«“ç«™ç«šç«ç«¡ç«¢ç«¦ç«­ç«°ç¬‚ç¬ç¬Šç¬†ç¬³ç¬˜ç¬™ç¬žç¬µç¬¨ç¬¶ç­ç­ºç¬„ç­ç¬‹ç­Œç­…ç­µç­¥ç­´ç­§ç­°ç­±ç­¬ç­®ç®ç®˜ç®Ÿç®ç®œç®šç®‹ç®’ç®ç­ç®™ç¯‹ç¯ç¯Œç¯ç®´ç¯†ç¯ç¯©ç°‘ç°”ç¯¦ç¯¥ç± ç°€ç°‡ç°“ç¯³ç¯·ç°—ç°ç¯¶ç°£ç°§ç°ªç°Ÿç°·ç°«ç°½ç±Œç±ƒç±”ç±ç±€ç±ç±˜ç±Ÿç±¤ç±–ç±¥ç±¬ç±µç²ƒç²ç²¤ç²­ç²¢ç²«ç²¡ç²¨ç²³ç²²ç²±ç²®ç²¹ç²½ç³€ç³…ç³‚ç³˜ç³’ç³œç³¢é¬»ç³¯ç³²ç³´ç³¶ç³ºç´†'],
  [0xe340, 'ç´‚ç´œç´•ç´Šçµ…çµ‹ç´®ç´²ç´¿ç´µçµ†çµ³çµ–çµŽçµ²çµ¨çµ®çµçµ£ç¶“ç¶‰çµ›ç¶çµ½ç¶›ç¶ºç¶®ç¶£ç¶µç·‡ç¶½ç¶«ç¸½ç¶¢ç¶¯ç·œç¶¸ç¶Ÿç¶°ç·˜ç·ç·¤ç·žç·»ç·²ç·¡ç¸…ç¸Šç¸£ç¸¡ç¸’ç¸±ç¸Ÿç¸‰ç¸‹ç¸¢ç¹†ç¹¦ç¸»ç¸µç¸¹ç¹ƒç¸·'],
  [0xe380, 'ç¸²ç¸ºç¹§ç¹ç¹–ç¹žç¹™ç¹šç¹¹ç¹ªç¹©ç¹¼ç¹»çºƒç·•ç¹½è¾®ç¹¿çºˆçº‰çºŒçº’çºçº“çº”çº–çºŽçº›çºœç¼¸ç¼ºç½…ç½Œç½ç½Žç½ç½‘ç½•ç½”ç½˜ç½Ÿç½ ç½¨ç½©ç½§ç½¸ç¾‚ç¾†ç¾ƒç¾ˆç¾‡ç¾Œç¾”ç¾žç¾ç¾šç¾£ç¾¯ç¾²ç¾¹ç¾®ç¾¶ç¾¸è­±ç¿…ç¿†ç¿Šç¿•ç¿”ç¿¡ç¿¦ç¿©ç¿³ç¿¹é£œè€†è€„è€‹è€’è€˜è€™è€œè€¡è€¨è€¿è€»èŠè†è’è˜èšèŸè¢è¨è³è²è°è¶è¹è½è¿è‚„è‚†è‚…è‚›è‚“è‚šè‚­å†è‚¬èƒ›èƒ¥èƒ™èƒèƒ„èƒšèƒ–è„‰èƒ¯èƒ±è„›è„©è„£è„¯è…‹'],
  [0xe440, 'éš‹è…†è„¾è…“è…‘èƒ¼è…±è…®è…¥è…¦è…´è†ƒè†ˆè†Šè†€è†‚è† è†•è†¤è†£è…Ÿè†“è†©è†°è†µè†¾è†¸è†½è‡€è‡‚è†ºè‡‰è‡è‡‘è‡™è‡˜è‡ˆè‡šè‡Ÿè‡ è‡§è‡ºè‡»è‡¾èˆèˆ‚èˆ…èˆ‡èˆŠèˆèˆèˆ–èˆ©èˆ«èˆ¸èˆ³è‰€è‰™è‰˜è‰è‰šè‰Ÿè‰¤'],
  [0xe480, 'è‰¢è‰¨è‰ªè‰«èˆ®è‰±è‰·è‰¸è‰¾èŠèŠ’èŠ«èŠŸèŠ»èŠ¬è‹¡è‹£è‹Ÿè‹’è‹´è‹³è‹ºèŽ“èŒƒè‹»è‹¹è‹žèŒ†è‹œèŒ‰è‹™èŒµèŒ´èŒ–èŒ²èŒ±è€èŒ¹èè…èŒ¯èŒ«èŒ—èŒ˜èŽ…èŽšèŽªèŽŸèŽ¢èŽ–èŒ£èŽŽèŽ‡èŽŠè¼èŽµè³èµèŽ èŽ‰èŽ¨è´è“è«èŽè½èƒè˜è‹èè·è‡è è²èè¢è èŽ½è¸è”†è»è‘­èªè¼è•šè’„è‘·è‘«è’­è‘®è’‚è‘©è‘†è¬è‘¯è‘¹èµè“Šè‘¢è’¹è’¿è’Ÿè“™è“è’»è“šè“è“è“†è“–è’¡è”¡è“¿è“´è”—è”˜è”¬è”Ÿè”•è””è“¼è•€è•£è•˜è•ˆ'],
  [0xe540, 'è•è˜‚è•‹è••è–€è–¤è–ˆè–‘è–Šè–¨è•­è–”è–›è—ªè–‡è–œè•·è•¾è–è—‰è–ºè—è–¹è—è—•è—è—¥è—œè—¹è˜Šè˜“è˜‹è—¾è—ºè˜†è˜¢è˜šè˜°è˜¿è™ä¹•è™”è™Ÿè™§è™±èš“èš£èš©èšªèš‹èšŒèš¶èš¯è›„è›†èš°è›‰è £èš«è›”è›žè›©è›¬'],
  [0xe580, 'è›Ÿè››è›¯èœ’èœ†èœˆèœ€èœƒè›»èœ‘èœ‰èœè›¹èœŠèœ´èœ¿èœ·èœ»èœ¥èœ©èœšè èŸè¸èŒèŽè´è—è¨è®è™è“è£èªè …èž¢èžŸèž‚èž¯èŸ‹èž½èŸ€èŸé›–èž«èŸ„èž³èŸ‡èŸ†èž»èŸ¯èŸ²èŸ è è èŸ¾èŸ¶èŸ·è ŽèŸ’è ‘è –è •è ¢è ¡è ±è ¶è ¹è §è »è¡„è¡‚è¡’è¡™è¡žè¡¢è¡«è¢è¡¾è¢žè¡µè¡½è¢µè¡²è¢‚è¢—è¢’è¢®è¢™è¢¢è¢è¢¤è¢°è¢¿è¢±è£ƒè£„è£”è£˜è£™è£è£¹è¤‚è£¼è£´è£¨è£²è¤„è¤Œè¤Šè¤“è¥ƒè¤žè¤¥è¤ªè¤«è¥è¥„è¤»è¤¶è¤¸è¥Œè¤è¥ è¥ž'],
  [0xe640, 'è¥¦è¥¤è¥­è¥ªè¥¯è¥´è¥·è¥¾è¦ƒè¦ˆè¦Šè¦“è¦˜è¦¡è¦©è¦¦è¦¬è¦¯è¦²è¦ºè¦½è¦¿è§€è§šè§œè§è§§è§´è§¸è¨ƒè¨–è¨è¨Œè¨›è¨è¨¥è¨¶è©è©›è©’è©†è©ˆè©¼è©­è©¬è©¢èª…èª‚èª„èª¨èª¡èª‘èª¥èª¦èªšèª£è«„è«è«‚è«šè««è«³è«§'],
  [0xe680, 'è«¤è«±è¬”è« è«¢è«·è«žè«›è¬Œè¬‡è¬šè«¡è¬–è¬è¬—è¬ è¬³éž«è¬¦è¬«è¬¾è¬¨è­è­Œè­è­Žè­‰è­–è­›è­šè­«è­Ÿè­¬è­¯è­´è­½è®€è®Œè®Žè®’è®“è®–è®™è®šè°ºè±è°¿è±ˆè±Œè±Žè±è±•è±¢è±¬è±¸è±ºè²‚è²‰è²…è²Šè²è²Žè²”è±¼è²˜æˆè²­è²ªè²½è²²è²³è²®è²¶è³ˆè³è³¤è³£è³šè³½è³ºè³»è´„è´…è´Šè´‡è´è´è´é½Žè´“è³è´”è´–èµ§èµ­èµ±èµ³è¶è¶™è·‚è¶¾è¶ºè·è·šè·–è·Œè·›è·‹è·ªè·«è·Ÿè·£è·¼è¸ˆè¸‰è·¿è¸è¸žè¸è¸Ÿè¹‚è¸µè¸°è¸´è¹Š'],
  [0xe740, 'è¹‡è¹‰è¹Œè¹è¹ˆè¹™è¹¤è¹ è¸ªè¹£è¹•è¹¶è¹²è¹¼èºèº‡èº…èº„èº‹èºŠèº“èº‘èº”èº™èºªèº¡èº¬èº°è»†èº±èº¾è»…è»ˆè»‹è»›è»£è»¼è»»è»«è»¾è¼Šè¼…è¼•è¼’è¼™è¼“è¼œè¼Ÿè¼›è¼Œè¼¦è¼³è¼»è¼¹è½…è½‚è¼¾è½Œè½‰è½†è½Žè½—è½œ'],
  [0xe780, 'è½¢è½£è½¤è¾œè¾Ÿè¾£è¾­è¾¯è¾·è¿šè¿¥è¿¢è¿ªè¿¯é‚‡è¿´é€…è¿¹è¿ºé€‘é€•é€¡é€é€žé€–é€‹é€§é€¶é€µé€¹è¿¸ééé‘é’é€Žé‰é€¾é–é˜éžé¨é¯é¶éš¨é²é‚‚é½é‚é‚€é‚Šé‚‰é‚é‚¨é‚¯é‚±é‚µéƒ¢éƒ¤æ‰ˆéƒ›é„‚é„’é„™é„²é„°é…Šé…–é…˜é…£é…¥é…©é…³é…²é†‹é†‰é†‚é†¢é†«é†¯é†ªé†µé†´é†ºé‡€é‡é‡‰é‡‹é‡é‡–é‡Ÿé‡¡é‡›é‡¼é‡µé‡¶éˆžé‡¿éˆ”éˆ¬éˆ•éˆ‘é‰žé‰—é‰…é‰‰é‰¤é‰ˆéŠ•éˆ¿é‰‹é‰éŠœéŠ–éŠ“éŠ›é‰šé‹éŠ¹éŠ·é‹©éŒé‹ºé„éŒ®'],
  [0xe840, 'éŒ™éŒ¢éŒšéŒ£éŒºéŒµéŒ»éœé é¼é®é–éŽ°éŽ¬éŽ­éŽ”éŽ¹é–é—é¨é¥é˜éƒéééˆé¤éšé”é“éƒé‡éé¶é«éµé¡éºé‘é‘’é‘„é‘›é‘ é‘¢é‘žé‘ªéˆ©é‘°é‘µé‘·é‘½é‘šé‘¼é‘¾é’é‘¿é–‚é–‡é–Šé–”é––é–˜é–™'],
  [0xe880, 'é– é–¨é–§é–­é–¼é–»é–¹é–¾é—Šæ¿¶é—ƒé—é—Œé—•é—”é—–é—œé—¡é—¥é—¢é˜¡é˜¨é˜®é˜¯é™‚é™Œé™é™‹é™·é™œé™žé™é™Ÿé™¦é™²é™¬éšéš˜éš•éš—éšªéš§éš±éš²éš°éš´éš¶éš¸éš¹é›Žé›‹é›‰é›è¥é›œéœé›•é›¹éœ„éœ†éœˆéœ“éœŽéœ‘éœéœ–éœ™éœ¤éœªéœ°éœ¹éœ½éœ¾é„é†éˆé‚é‰éœé é¤é¦é¨å‹’é«é±é¹éž…é¼éžéºéž†éž‹éžéžéžœéž¨éž¦éž£éž³éž´éŸƒéŸ†éŸˆéŸ‹éŸœéŸ­é½éŸ²ç«ŸéŸ¶éŸµé é Œé ¸é ¤é ¡é ·é ½é¡†é¡é¡‹é¡«é¡¯é¡°'],
  [0xe940, 'é¡±é¡´é¡³é¢ªé¢¯é¢±é¢¶é£„é£ƒé£†é£©é£«é¤ƒé¤‰é¤’é¤”é¤˜é¤¡é¤é¤žé¤¤é¤ é¤¬é¤®é¤½é¤¾é¥‚é¥‰é¥…é¥é¥‹é¥‘é¥’é¥Œé¥•é¦—é¦˜é¦¥é¦­é¦®é¦¼é§Ÿé§›é§é§˜é§‘é§­é§®é§±é§²é§»é§¸é¨é¨é¨…é§¢é¨™é¨«é¨·é©…é©‚é©€é©ƒ'],
  [0xe980, 'é¨¾é©•é©é©›é©—é©Ÿé©¢é©¥é©¤é©©é©«é©ªéª­éª°éª¼é«€é«é«‘é«“é«”é«žé«Ÿé«¢é«£é«¦é«¯é««é«®é«´é«±é«·é«»é¬†é¬˜é¬šé¬Ÿé¬¢é¬£é¬¥é¬§é¬¨é¬©é¬ªé¬®é¬¯é¬²é­„é­ƒé­é­é­Žé­‘é­˜é­´é®“é®ƒé®‘é®–é®—é®Ÿé® é®¨é®´é¯€é¯Šé®¹é¯†é¯é¯‘é¯’é¯£é¯¢é¯¤é¯”é¯¡é°ºé¯²é¯±é¯°é°•é°”é°‰é°“é°Œé°†é°ˆé°’é°Šé°„é°®é°›é°¥é°¤é°¡é°°é±‡é°²é±†é°¾é±šé± é±§é±¶é±¸é³§é³¬é³°é´‰é´ˆé³«é´ƒé´†é´ªé´¦é¶¯é´£é´Ÿéµ„é´•é´’éµé´¿é´¾éµ†éµˆ'],
  [0xea40, 'éµéµžéµ¤éµ‘éµéµ™éµ²é¶‰é¶‡é¶«éµ¯éµºé¶šé¶¤é¶©é¶²é·„é·é¶»é¶¸é¶ºé·†é·é·‚é·™é·“é·¸é·¦é·­é·¯é·½é¸šé¸›é¸žé¹µé¹¹é¹½éºéºˆéº‹éºŒéº’éº•éº‘éºéº¥éº©éº¸éºªéº­é¡é»Œé»Žé»é»é»”é»œé»žé»é» é»¥é»¨é»¯'],
  [0xea80, 'é»´é»¶é»·é»¹é»»é»¼é»½é¼‡é¼ˆçš·é¼•é¼¡é¼¬é¼¾é½Šé½’é½”é½£é½Ÿé½ é½¡é½¦é½§é½¬é½ªé½·é½²é½¶é¾•é¾œé¾ å ¯æ§‡é™ç‘¤å‡œç†™']
]

module.exports = function toSJIS (utf8Char) {
  if (!utf8Char || utf8Char === '') return

  for (var i = 0; i < SJIS_UTF8.length; i++) {
    var kanji = SJIS_UTF8[i][1]

    var posIndex = kanji.indexOf(utf8Char)
    if (posIndex >= 0) {
      return SJIS_UTF8[i][0] + posIndex
    }
  }
}

},{}]},{},[1])(1)
});

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJoZWxwZXIvdG8tc2ppcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJ2YXIgU0pJU19VVEY4ID0gW1xuICBbMHg4MTQwLCAn44CA44CB44CC77yM77yO44O777ya77yb77yf77yB44Kb44KcwrTvvYDCqO+8vu+/o++8v+ODveODvuOCneOCnuOAg+S7neOAheOAhuOAh+ODvOKAleKAkO+8j++8vO+9nuKIpe+9nOKApuKApeKAmOKAmeKAnOKAne+8iO+8ieOAlOOAle+8u++8ve+9m++9neOAiOOAieOAiuOAi+OAjOOAjeOAjuOAj+OAkOOAke+8i++8jcKxw5cnXSxcbiAgWzB4ODE4MCwgJ8O377yd4omg77yc77yeJ10sXG4gIFsweDgxOGYsICfvv6XvvITvv6Dvv6HvvIXvvIPvvIbvvIrvvKDCp+KYhuKYhSddLFxuICBbMHg4MWE2LCAn4oC744CS4oaS4oaQ4oaR4oaT44CTJ10sXG4gIFsweDgxY2EsICfvv6InXSxcbiAgWzB4ODI0ZiwgJ++8kO+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8mSddLFxuICBbMHg4MjYwLCAn77yh77yi77yj77yk77yl77ym77yn77yo77yp77yq77yr77ys77yt77yu77yv77yw77yx77yy77yz77y077y177y277y377y477y577y6J10sXG4gIFsweDgyODEsICfvvYHvvYLvvYPvvYTvvYXvvYbvvYfvvYjvvYnvvYrvvYvvvYzvvY3vvY7vvY/vvZDvvZHvvZLvvZPvvZTvvZXvvZbvvZfvvZjvvZnvvZonXSxcbiAgWzB4ODI5ZiwgJ+OBgeOBguOBg+OBhOOBheOBhuOBh+OBiOOBieOBiuOBi+OBjOOBjeOBjuOBj+OBkOOBkeOBkuOBk+OBlOOBleOBluOBl+OBmOOBmeOBmuOBm+OBnOOBneOBnuOBn+OBoOOBoeOBouOBo+OBpOOBpeOBpuOBp+OBqOOBqeOBquOBq+OBrOOBreOBruOBr+OBsOOBseOBsuOBs+OBtOOBteOBtuOBt+OBuOOBueOBuuOBu+OBvOOBveOBvuOBv+OCgOOCgeOCguOCg+OChOOCheOChuOCh+OCiOOCieOCiuOCi+OCjOOCjeOCjuOCj+OCkOOCkeOCkuOCkyddLFxuICBbMHg4MzQwLCAn44Kh44Ki44Kj44Kk44Kl44Km44Kn44Ko44Kp44Kq44Kr44Ks44Kt44Ku44Kv44Kw44Kx44Ky44Kz44K044K144K244K344K444K544K644K744K844K944K+44K/44OA44OB44OC44OD44OE44OF44OG44OH44OI44OJ44OK44OL44OM44ON44OO44OP44OQ44OR44OS44OT44OU44OV44OW44OX44OY44OZ44Oa44Ob44Oc44Od44Oe44OfJ10sXG4gIFsweDgzODAsICfjg6Djg6Hjg6Ljg6Pjg6Tjg6Xjg6bjg6fjg6jjg6njg6rjg6vjg6zjg63jg67jg6/jg7Djg7Hjg7Ljg7Pjg7Tjg7Xjg7YnXSxcbiAgWzB4ODM5ZiwgJ86RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqSddLFxuICBbMHg4M2JmLCAnzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+JJ10sXG4gIFsweDg0NDAsICfQkNCR0JLQk9CU0JXQgdCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K8nXSxcbiAgWzB4ODQ3MCwgJ9Cw0LHQstCz0LTQtdGR0LbQt9C40LnQutC70LzQvSddLFxuICBbMHg4NDgwLCAn0L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPJ10sXG4gIFsweDg3ODAsICfjgJ3jgJ8nXSxcbiAgWzB4ODk0MCwgJ+mZoumZsOmaoOmfu+WQi+WPs+Wuh+eDj+e+vei/gumbqOWNr+m1nOequuS4keeik+iHvOa4puWYmOWUhOasneiUmumwu+WnpeWOqea1pueTnOmWj+WZguS6kemBi+mbsuiNj+mkjOWPoeWWtuWssOW9seaYoOabs+aghOawuOazs+a0qeeRm+ebiOepjumgtOiLseihm+ipoOmLrea2sueWq+ebiumnheaCpuisgei2iumWsuamjuWOreWGhiddLFxuICBbMHg4OTgwLCAn5ZyS5aCw5aWE5a605bu25oCo5o6p5o+05rK/5ryU54KO54SU54WZ54eV54y/57iB6Im26IuR6JaX6YGg6Ymb6bSb5aGp5pa85rGa55Sl5Ye55aSu5aWl5b6A5b+c5oq85pe65qiq5qyn5q60546L57+B6KWW6bSs6bSO6buE5bKh5rKW6I275YSE5bGL5oa26IeG5qG254mh5LmZ5L+65Y245oGp5rip56mP6Z+z5LiL5YyW5Luu5L2V5Ly95L6h5L2z5Yqg5Y+v5ZiJ5aSP5auB5a625a+h56eR5pqH5p6c5p625q2M5rKz54Gr54+C56aN56a+56i8566H6Iqx6Iub6IyE6I236I+v6I+T6J2m6Kqy5Zip6LKo6L+m6YGO6Zye6JqK5L+E5bOo5oiR54mZ55S76Iel6Iq96Ju+6LOA6ZuF6aST6aeV5LuL5Lya6Kej5Zue5aGK5aOK5bu75b+r5oCq5oKU5oGi5oeQ5oiS5ouQ5pS5J10sXG4gIFsweDhhNDAsICfprYHmmabmorDmtbfngbDnlYznmobntbXoiqXon7nplovpmo7osp3lh7Hlir7lpJblkrPlrrPltJbmhajmpoLmtq/noo3ok4vooZfoqbLpjqfpqrjmtazppqjom5nlnqPmn7/om47piI7lioPlmoflkITlu5Pmi6HmkrnmoLzmoLjmrrvnjbLnorrnqavopprop5LotavovIPpg63plqPpmpTpnanlrablsrPmpb3poY3poY7mjpvnrKDmqKsnXSxcbiAgWzB4OGE4MCwgJ+apv+aitumwjea9n+WJsuWWneaBsOaLrOa0u+a4h+a7keiRm+ikkOi9hOS4lOmwueWPtuakm+aouumehOagquWFnOerg+iSsumHnOmOjOWZm+m0qOagouiMheiQseeypeWIiOiLheeTpuS5vuS+g+WGoOWvkuWIiuWLmOWLp+W3u+WWmuWgquWnpuWujOWumOWvm+W5suW5ueaCo+aEn+aFo+aGvuaPm+aVouafkeahk+ajuuasvuatk+axl+a8oua+l+a9heeSsOeUmOebo+eci+erv+euoeewoee3qee8tue/sOiCneiJpuiOnuims+irjOiyq+mChOmRkemWk+mWkemWoumZpemfk+mkqOiImOS4uOWQq+WyuOW3jOeOqeeZjOecvOWyqee/q+i0i+mbgemgkemhlOmhmOS8geS8juWNseWWnOWZqOWfuuWlh+WsieWvhOWykOW4jOW5vuW/jOaPruacuuaXl+aXouacn+aji+ajhCddLFxuICBbMHg4YjQwLCAn5qmf5biw5q+F5rCX5rG955W/56WI5a2j56iA57SA5b696KaP6KiY6LK06LW36LuM6Lyd6aOi6aiO6ay85LqA5YG95YSA5aaT5a6c5oiv5oqA5pOs5qy654qg55aR56WH576p6J+76Kq86K2w5o6s6I+K6Z6g5ZCJ5ZCD5Zar5qGU5qmY6Kmw56Cn5p216buN5Y205a6i6ISa6JmQ6YCG5LiY5LmF5LuH5LyR5Y+K5ZC45a6u5byT5oCl5pWRJ10sXG4gIFsweDhiODAsICfmnL3msYLmsbLms6PngbjnkIPnqbbnqq7nrIjntJrns77ntabml6fniZvljrvlsYXlt6jmi5Lmi6DmjJnmuKDomZroqLHot53pi7jmvIHnpqbprZrkuqjkuqvkuqzkvpvkvqDlg5HlhYfnq7blhbHlh7bljZTljKHljb/lj6vllqzlooPls6HlvLflvYrmgK/mgZDmga3mjJ/mlZnmqYvms4Hni4Lni63nn6/og7johIXoiIjolY7pg7fpj6Hpn7/ppZfpqZrku7Dlh53lsK3mmoHmpa3lsYDmm7LmpbXnjonmoZDnsoHlg4Xli6TlnYflt77pjKbmlqTmrKPmrL3nkLTnpoHnpr3nrYvnt4roirnoj4zoob/opZ/orLnov5Hph5HlkJ/pioDkuZ3lgLblj6XljLrni5fnjpbnn6noi6bouq/pp4bpp4jpp5LlhbfmhJromZ7llrDnqbrlgbblr5PpgYfpmoXkuLLmq5vph6flsZHlsYgnXSxcbiAgWzB4OGM0MCwgJ+aOmOeqn+ayk+mdtOi9oeeqqueGiumaiOeyguagl+e5sOahkemNrOWLsuWQm+iWq+iok+e+pOi7jemDoeWNpuiiiOelgeS/guWCvuWIkeWFhOWVk+WcreePquWei+WlkeW9ouW+hOaBteaFtuaFp+aGqeaOsuaQuuaVrOaZr+ahgua4k+eVpueoveezu+e1jOe2mee5i+e9q+iMjuiNiuibjeioiOipo+itpui7vemgmum2j+iKuOi/jumvqCddLFxuICBbMHg4YzgwLCAn5YqH5oif5pKD5r+A6ZqZ5qGB5YKR5qyg5rG65r2U56m057WQ6KGA6Kij5pyI5Lu25YC55YCm5YGl5YW85Yi45Ymj5Zan5ZyP5aCF5auM5bu65oay5oe45ouz5o2y5qSc5qip54m954qs54yu56CU56Gv57W555yM6IKp6KaL6KyZ6LOi6LuS6YGj6Y216Zm66aGV6aiT6bm45YWD5Y6f5Y6z5bm75bym5rib5rqQ546E54++57WD6Ii36KiA6Ku66ZmQ5LmO5YCL5Y+k5ZG85Zu65aeR5a2k5bex5bqr5byn5oi45pWF5p6v5rmW54uQ57OK6KK06IKh6IOh6I+w6JmO6KqH6Leo6Yi36ZuH6aGn6byT5LqU5LqS5LyN5Y2I5ZGJ5ZC+5aiv5b6M5b6h5oKf5qKn5qqO55Ga56KB6Kqe6Kqk6K236YaQ5Lme6a+J5Lqk5L285L6v5YCZ5YCW5YWJ5YWs5Yqf5Yq55Yu+5Y6a5Y+j5ZCRJ10sXG4gIFsweDhkNDAsICflkI7llonlnZHlnqLlpb3lrZTlrZ3lro/lt6Xlt6flt7flubjluoPluprlurflvJjmgZLmhYzmipfmi5jmjqfmlLvmmILmmYPmm7Tmna3moKHmopfmp4vmsZ/mtKrmtanmuK/mup3nlLLnmofnoaznqL/ns6DntIXntJjntZ7ntrHogJXogIPogq/ogrHohZToho/oiKrojZLooYzooaHorJvosqLos7zpg4rphbXpibHnoL/pi7zplqTpmY0nXSxcbiAgWzB4OGQ4MCwgJ+mghemmmemrmOm0u+WJm+WKq+WPt+WQiOWjleaLt+a/oOixqui9n+m6ueWFi+WIu+WRiuWbveepgOmFt+m1oOm7kueNhOa8ieiFsOeUkeW/veaDmumqqOeLm+i+vOatpOmgg+S7iuWbsOWdpOWivuWpmuaBqOaHh+aYj+aYhuagueaisea3t+eXlee0uuiJrumtguS6m+S9kOWPieWUhuW1r+W3puW3ruafu+aymeeRs+egguipkOmOluijn+WdkOW6p+aMq+WCteWCrOWGjeacgOWTieWhnuWmu+WusOW9qeaJjeaOoeagveats+a4iOeBvemHh+eKgOegleegpuelreaWjue0sOiPnOijgei8iemam+WJpOWcqOadkOe9quiyoeWGtOWdgumYquWguuamiuiCtOWSsuW0juWfvOeilem3uuS9nOWJiuWSi+aQvuaYqOaclOafteeqhOetlue0oumMr+ahnOmureesueWMmeWGiuWItyddLFxuICBbMHg4ZTQwLCAn5a+f5ou25pKu5pOm5pyt5q666Jap6ZuR55qQ6a+W5o2M6YyG6a6r55q/5pmS5LiJ5YKY5Y+C5bGx5oOo5pKS5pWj5qGf54em54+K55Sj566X57qC6JqV6K6D6LOb6YW46aSQ5pas5pqr5q6L5LuV5LuU5Ly65L2/5Yi65Y+45Y+y5Zej5Zub5aOr5aeL5aeJ5ae/5a2Q5bGN5biC5bir5b+X5oCd5oyH5pSv5a2c5pav5pa95peo5p6d5q2iJ10sXG4gIFsweDhlODAsICfmrbvmsI/njYXnpYnnp4Hns7jntJnntKvogqLohILoh7PoppboqZ7oqanoqaboqozoq67os4fos5zpm4zpo7zmra/kuovkvLzkvo3lhZDlrZflr7rmhYjmjIHmmYLmrKHmu4vmsrvniL7nkr3nl5Tno4HnpLrogIzogLPoh6rokpTovp7msZDpub/lvI/orZjptKvnq7rou7jlro3pm6vkuIPlj7Hln7flpLHlq4nlrqTmgonmub/mvIbnlr7os6rlrp/olIDnr6DlgbLmn7Toip3lsaHolYrnuJ7oiI7lhpnlsITmjajotabmlpznha7npL7ntJfogIXorJ3ou4rpga7om4fpgqrlgJ/li7rlsLrmnZPngbzniLXphYzph4jpjKvoi6Xlr4LlvLHmg7nkuLvlj5blrojmiYvmnLHmrorni6nnj6DnqK7ohavotqPphZLpppblhJLlj5flkarlr7/mjojmqLnntqzpnIDlm5rlj47lkagnXSxcbiAgWzB4OGY0MCwgJ+Wul+WwseW3nuS/ruaEgeaLvua0suengOeni+e1gue5jee/kuiHreiIn+iSkOihhuilsuiukOi5tOi8r+mAsemFi+mFrOmbhumGnOS7gOS9j+WFheWNgeW+k+aIjuaflOaxgea4i+eNo+e4pumHjemKg+WPlOWkmeWuv+a3keelnee4rueym+WhvueGn+WHuuihk+i/sOS/iuWzu+aYpeeerOero+iInOmnv+WHhuW+quaXrOalr+auiea3syddLFxuICBbMHg4ZjgwLCAn5rqW5r2k55u+57SU5beh6YG16YaH6aCG5Yem5Yid5omA5pqR5puZ5ria5bq257eS572y5pu46Jav6Je36Ku45Yqp5Y+Z5aWz5bqP5b6Q5oGV6Yuk6Zmk5YK35YSf5Yud5Yyg5Y2H5Y+s5ZOo5ZWG5ZSx5ZiX5aWo5aa+5ai85a615bCG5bCP5bCR5bCa5bqE5bqK5bug5b2w5om/5oqE5oub5o6M5o235piH5piM5pit5pm25p2+5qKi5qif5qi15rK85raI5riJ5rmY54S854Sm54Wn55eH55yB56Gd56SB56Wl56ew56ug56yR57Kn57S56IKW6I+W6JKL6JWJ6KGd6KOz6Kif6Ki86KmU6Kmz6LGh6LOe6Yak6Ymm6Y2+6ZCY6Zqc6Z6Y5LiK5LiI5Lie5LmX5YaX5Ymw5Z+O5aC05aOM5ayi5bi45oOF5pO+5p2h5p2W5rWE54q255Wz56mj6JK46K2y6Ya46Yyg5Zix5Z+06aO+J10sXG4gIFsweDkwNDAsICfmi63mpI3mrpbnh63nuZTogbfoibLop6bpo5/onZXovrHlsLvkvLjkv6HkvrXllIflqKDlr53lr6nlv4PmhY7mjK/mlrDmmYvmo67mppvmtbjmt7HnlLPnlrnnnJ/npZ7np6bntLPoh6Poiq/olqropqroqLrouqvovpvpgLLph53pnIfkurrku4HliIPlobXlo6zlsIvnlJrlsL3ohY7oqIrov4XpmaPpna3nrKXoq4/poIjphaLlm7PljqgnXSxcbiAgWzB4OTA4MCwgJ+mAl+WQueWeguW4peaOqOawtOeCiuedoeeyi+e/oOihsOmBgumFlOmMkOmMmOmaj+eRnumrhOW0h+W1qeaVsOaeoui2qOmbm+aNruadieakmeiPhemgl+mbgOijvua+hOaRuuWvuOS4lueArOeVneaYr+WHhOWItuWLouWnk+W+geaAp+aIkOaUv+aVtOaYn+aZtOajsuagluato+a4heeJsueUn+ebm+eyvuiBluWjsOijveilv+iqoOiqk+iri+mAnemGkumdkumdmeaWieeojuiEhumau+W4reaDnOaImuaWpeaYlOaekOefs+epjeexjee4vuiEiuiyrOi1pOi3oei5n+eiqeWIh+aLmeaOpeaRguaKmOioreeqg+evgOiqrOmbque1tuiIjOidieS7meWFiOWNg+WNoOWuo+WwguWwluW3neaIpuaJh+aSsOagk+agtOaziea1hea0l+afk+a9nOeFjueFveaXi+epv+euree3middLFxuICBbMHg5MTQwLCAn57mK576o6IW66Iib6Ii56Jam6Kmu6LOO6Le16YG46YG36Yqt6YqR6ZaD6a6u5YmN5ZaE5ry454S25YWo56aF57mV6Iaz57OO5ZmM5aGR5bKo5o6q5pu+5pu95qWa54uZ55aP55aO56SO56WW56ef57KX57Sg57WE6JiH6Ki06Zi76YGh6byg5YOn5Ym15Y+M5Y+i5YCJ5Zaq5aOu5aWP54i95a6L5bGk5Yyd5oOj5oOz5o2c5o6D5oy/5o67J10sXG4gIFsweDkxODAsICfmk43ml6nmm7nlt6Pmp43mp73mvJXnh6Xkuonnl6nnm7jnqpPns5/nt4/ntpzogaHojYnojZjokazokrzol7voo4XotbDpgIHpga3pjpfpnJzpqJLlg4/lopfmho7oh5PolLXotIjpgKDkv4PlgbTliYfljbPmga/mjYnmnZ/muKzotrPpgJ/kv5flsZ7os4rml4/ntprljZLoopblhbbmj4PlrZjlravlsIrmkI3mnZHpgZzku5blpJrlpKrmsbDoqZHllL7loJXlpqXmg7DmiZPmn4HoiLXmpZXpmYDpp4TpqKjkvZPloIblr77ogJDlsrHluK/lvoXmgKDmhYvmiLTmm7/ms7Dmu57og47ohb/oi5TooovosrjpgIDpgK7pmorpu5vpr5vku6Plj7DlpKfnrKzpho3poYzpt7nmu53ngKfljZPllYTlroXmiZjmip7mi5PmsqLmv6/nkKLoqJfpkLjmv4Hoq77ojLjlh6fom7jlj6onXSxcbiAgWzB4OTI0MCwgJ+WPqeS9humBlOi+sOWlquiEseW3veerqui+v+ajmuiwt+eLuOmxiOaoveiqsOS4ueWNmOWYhuWdpuaLheaOouaXpuatjua3oea5m+eCreefreerr+euque2u+iAveiDhuibi+iqlemNm+Wbo+Wjh+W8vuaWreaaluaqgOauteeUt+irh+WApOefpeWcsOW8m+aBpeaZuuaxoOeXtOeomue9ruiHtOicmOmBhemms+evieeVnOerueetkeiThCddLFxuICBbMHg5MjgwLCAn6YCQ56ep56qS6Iy25auh552A5Lit5Luy5a6Z5b+g5oq95pi85p+x5rOo6Jmr6KG36Ki76YWO6Yuz6aeQ5qiX54Cm54yq6Iun6JGX6LKv5LiB5YWG5YeL5ZaL5a+15biW5biz5bqB5byU5by15b2r5b605oey5oyR5pqi5pyd5r2u54mS55S655y66IG06IS56IW46J226Kq/6Kuc6LaF6Lez6Yqa6ZW36aCC6bOl5YuF5o2X55u05pyV5rKI54+N6LOD6Y6u6Zmz5rSl5aKc5qSO5qeM6L+96Y6a55eb6YCa5aGa5qCC5o605qe75L2D5rys5p+Y6L676JSm57a06Y2U5qS/5r2w5Z2q5aO35ays57Ss54iq5ZCK6Yej6ba05Lqt5L2O5YGc5YG15YmD6LKe5ZGI5aCk5a6a5bid5bqV5bqt5bu35byf5oKM5oq15oy65o+Q5qKv5rGA56KH56aO56iL57eg6ImH6KiC6Kum6LmE6YCTJ10sXG4gIFsweDkzNDAsICfpgrjphK3ph5jpvI7ms6XmkZjmk6LmlbXmu7TnmoTnrJvpganpj5Hmurrlk7LlvrnmkqTovY3ov63piYTlhbjloavlpKnlsZXlupfmt7vnuo/nlJzosrzou6LpoZvngrnkvJ3mrr/mvrHnlLDpm7vlhY7lkJDloLXloZflpqzlsaDlvpLmlpfmnZzmuKHnmbvoj5/os63pgJTpg73pjY3noKXnoLrliqrluqblnJ/lpbTmgJLlgJLlhZrlhqwnXSxcbiAgWzB4OTM4MCwgJ+WHjeWIgOWUkOWhlOWhmOWll+WuleWztuW2i+aCvOaKleaQreadseahg+aivOajn+ebl+a3mOa5r+a2m+eBr+eHiOW9k+eXmOelt+etieetlOetkuezlue1seWIsOiRo+iVqeiXpOiojuishOixhui4j+mAg+mAj+mQmemZtumgremosOmXmOWDjeWLleWQjOWgguWwjuaGp+aSnua0nuees+erpeiDtOiQhOmBk+mKheWzoOm0h+WMv+W+l+W+s+a2nOeJueedo+emv+evpOavkueLrOiqreagg+apoeWHuOeqgeaktOWxiumztuiLq+WvhemFieeAnuWZuOWxr+aDh+aVpuayjOixmumBgemgk+WRkeabh+mIjeWliOmCo+WGheS5jeWHquiWmeisjueBmOaNuumNi+aloummtOe4hOeVt+WNl+aloOi7n+mbo+axneS6jOWwvOW8kOi/qeWMguizkeiCieiZueW7v+aXpeS5s+WFpSddLFxuICBbMHg5NDQwLCAn5aaC5bC/6Z+u5Lu75aaK5b+N6KqN5r+h56aw56Wi5a+n6JGx54yr54ax5bm05b+15o275pKa54eD57KY5LmD5bu85LmL5Z+c5Zqi5oKp5r+D57SN6IO96ISz6Ia/6L6y6KaX6Jqk5be05oqK5pKt6KaH5p235rOi5rS+55C256C05amG57216Iqt6aas5L+z5buD5oud5o6S5pWX5p2v55uD54mM6IOM6IK66Lyp6YWN5YCN5Z+55aqS5qKFJ10sXG4gIFsweDk0ODAsICfmpbPnhaTni73osrflo7Los6DpmarpgJnonb/np6Tnn6fokKnkvK/liaXljZrmi43mn4/ms4rnmb3nrpTnspXoiLboloTov6vmm53mvKDniIbnuJvojqvpp4Hpuqblh73nrrHnobLnrrjogofnrYjmq6jluaHogoznlZHnlaDlhavpiaLmuoznmbrphpfpq6rkvJDnvbDmipznrY/plqXps6nlmbrloZnom6TpmrzkvLTliKTljYrlj43lj5vluIbmkKzmlpHmnb/msL7msY7niYjniq/nj63nlZTnuYHoiKzol6nosqnnr4Tph4bnhanpoJLpo6/mjL3mmannlarnm6Tno5DolYPom67ljKrljZHlkKblpoPluoflvbzmgrLmiYnmibnmiqvmlpDmr5Tms4znlrLnmq7nopHnp5jnt4vnvbfogqXooqvoqrnosrvpgb/pnZ7po5vmqIvnsLjlgpnlsL7lvq7mnofmr5jnkLXnnInnvo4nXSxcbiAgWzB4OTU0MCwgJ+m8u+afiueol+WMueeWi+mrreW9puiGneiPseiCmOW8vOW/heeVouethumAvOahp+Wnq+Wqm+e0kOeZvuisrOS/teW9quaomeawt+a8gueTouelqOihqOipleixueW7n+aPj+eXheenkuiLl+mMqOmLsuiSnOibremwreWTgeW9rOaWjOa1nOeAleiyp+izk+mgu+aVj+eTtuS4jeS7mOWfoOWkq+WppuWvjOWGqOW4g+W6nOaAluaJtuaVtyddLFxuICBbMHg5NTgwLCAn5pan5pmu5rWu54i256ym6IWQ6Iaa6IqZ6K2c6LKg6LOm6LW06Zic6ZmE5L6u5pKr5q2m6Iie6JGh6JWq6YOo5bCB5qWT6aKo6JG66JWX5LyP5Ymv5b6p5bmF5pyN56aP6IW56KSH6KaG5re15byX5omV5rK45LuP54mp6a6S5YiG5ZC75Zm05aKz5oak5omu54Sa5aWu57KJ57Oe57Sb6Zuw5paH6IGe5LiZ5L215YW15aGA5bmj5bmz5byK5p+E5Lim6JS96ZaJ6Zmb57Gz6aCB5YO75aOB55mW56Kn5Yil556l6JSR566G5YGP5aSJ54mH56+H57eo6L666L+U6YGN5L6/5YuJ5aip5byB6Z6t5L+d6IiX6Yuq5ZyD5o2V5q2p55Sr6KOc6LyU56mC5Yuf5aKT5oWV5oiK5pqu5q+N57C/6I+p5YCj5L+45YyF5ZGG5aCx5aWJ5a6d5bOw5bOv5bSp5bqW5oqx5o2n5pS+5pa55pyLJ10sXG4gIFsweDk2NDAsICfms5Xms6Hng7nnoLLnuKvog57oirPokIzok6zonILopJLoqKrosYrpgqbpi5Lpo73ps7PptazkuY/kuqHlgo3liZblnYrlpqjluL3lv5jlv5nmiL/mmrTmnJvmn5Dmo5LlhpLntKHogqrohqjorIDosozosr/pib7pmLLlkKDpoKzljJflg5XljZzloqjmkrLmnLTniafnnabnqYbph6bli4PmsqHmrobloIDluYzlpZTmnKznv7vlh6Hnm4YnXSxcbiAgWzB4OTY4MCwgJ+aRqeejqOmtlOm6u+Wfi+WmueaYp+aemuavjuWTqeanmeW5leiGnOaelemuquafvumxkuahneS6puS/o+WPiOaKueacq+ayq+i/hOS+ree5rem6v+S4h+aFoua6gOa8q+iUk+WRs+acqumtheW3s+euleWyrOWvhuicnOa5iuiTkeeolOiEiOWmmeeyjeawkeecoOWLmeWkoueEoeeJn+efm+mcp+m1oeaki+Wpv+WomOWGpeWQjeWRveaYjuebn+i/t+mKmOmztOWnqueJnea7heWFjeajiee2v+e3rOmdoum6uuaRuOaooeiMguWmhOWtn+avm+eMm+ebsue2suiAl+iSmeWEsuacqOm7meebruadouWLv+mkheWwpOaIu+exvuiysOWVj+aCtue0i+mWgOWMgeS5n+WGtuWknOeIuuiAtumHjuW8peefouWOhOW9uee0hOiWrOios+i6jemdluafs+iWrumRk+aEieaEiOayueeZkiddLFxuICBbMHg5NzQwLCAn6Kut6Ly45ZSv5L2R5YSq5YuH5Y+L5a6l5bm95oKg5oaC5o+W5pyJ5p+a5rmn5raM54y254y355Sx56WQ6KOV6KqY6YGK6YKR6YO16ZuE6J6N5aSV5LqI5L2Z5LiO6KqJ6Ly/6aCQ5YKt5bm85aaW5a655bq45o+a5o+65pOB5puc5qWK5qeY5rSL5rq254aU55So56qv576K6ICA6JGJ6JOJ6KaB6Kyh6LiK6YGl6Zm96aSK5oW+5oqR5qyyJ10sXG4gIFsweDk3ODAsICfmsoPmtbTnv4znv7zmt4DnvoXonrroo7jmnaXojrHpoLzpm7fmtJvntaHokL3pharkubHljbXltZDmrITmv6vol43omK3opqfliKnlkI/lsaXmnY7moqjnkIbnkoPnl6Loo4/oo6Hph4zpm6Lpmbjlvovnjofnq4vokY7mjqDnlaXlionmtYHmupznkInnlZnnoavnspLpmobnq5zpvo3kvrbmha7ml4XomZzkuobkuq7lg5rkuKHlh4zlr67mlpnmooHmtrznjJ/nmYLnnq3nqJzns6foia/oq5Lpgbzph4/pmbXpoJjlipvnt5HlgKvljpjmnpfmt4vnh5DnkLPoh6jovKrpmqPpsZfpup/nkaDloYHmtpnntK/poZ7ku6TkvLbkvovlhrflirHltrrmgJznjrLnpLzoi5PpiLTpmrfpm7bpnIrpupfpvaLmmqbmrbTliJfliqPng4joo4Llu4nmgYvmhpDmvKPnhYnnsL7nt7Toga8nXSxcbiAgWzB4OTg0MCwgJ+iTrumAo+mMrOWRgumtr+ark+eCieizgui3r+mcsuWKtOWpgeW7iuW8hOacl+alvOamlOa1qua8j+eJoueLvOevreiAgeiBvuidi+mDjuWFrem6k+emhOiCi+mMsuirluWAreWSjOipseatquizhOiEh+aDkeaeoOm3suS6meS6mOmwkOipq+iXgeiVqOakgOa5vueil+iFlSddLFxuICBbMHg5ODlmLCAn5byM5LiQ5LiV5Liq5Lix5Li25Li85Li/5LmC5LmW5LmY5LqC5LqF6LGr5LqK6IiS5byN5LqO5Lqe5Lqf5Lqg5Lqi5Lqw5Lqz5Lq25LuO5LuN5LuE5LuG5LuC5LuX5Lue5Lut5Luf5Lu35LyJ5L2a5Lyw5L2b5L2d5L2X5L2H5L225L6I5L6P5L6Y5L275L2p5L2w5L6R5L2v5L6G5L6W5YSY5L+U5L+f5L+O5L+Y5L+b5L+R5L+a5L+Q5L+k5L+l5YCa5YCo5YCU5YCq5YCl5YCF5Lyc5L+25YCh5YCp5YCs5L++5L+v5YCR5YCG5YGD5YGH5pyD5YGV5YGQ5YGI5YGa5YGW5YGs5YG45YKA5YKa5YKF5YK05YKyJ10sXG4gIFsweDk5NDAsICflg4nlg4rlgrPlg4Llg5blg57lg6Xlg63lg6Plg67lg7nlg7XlhInlhIHlhILlhJblhJXlhJTlhJrlhKHlhLrlhLflhLzlhLvlhL/lhYDlhZLlhYzlhZTlhaLnq7jlhanlharlha7lhoDlhoLlm5jlhozlhonlho/lhpHlhpPlhpXlhpblhqTlhqblhqLlhqnlhqrlhqvlhrPlhrHlhrLlhrDlhrXlhr3lh4Xlh4nlh5vlh6DomZXlh6nlh60nXSxcbiAgWzB4OTk4MCwgJ+WHsOWHteWHvuWIhOWIi+WIlOWIjuWIp+WIquWIruWIs+WIueWJj+WJhOWJi+WJjOWJnuWJlOWJquWJtOWJqeWJs+WJv+WJveWKjeWKlOWKkuWJseWKiOWKkei+qOi+p+WKrOWKreWKvOWKteWLgeWLjeWLl+WLnuWLo+WLpumjreWLoOWLs+WLteWLuOWLueWMhuWMiOeUuOWMjeWMkOWMj+WMleWMmuWMo+WMr+WMseWMs+WMuOWNgOWNhuWNheS4l+WNieWNjeWHluWNnuWNqeWNruWkmOWNu+WNt+WOguWOluWOoOWOpuWOpeWOruWOsOWOtuWPg+ewkumbmeWPn+abvOeHruWPruWPqOWPreWPuuWQgeWQveWRgOWQrOWQreWQvOWQruWQtuWQqeWQneWRjuWSj+WRteWSjuWRn+WRseWRt+WRsOWSkuWRu+WSgOWRtuWShOWSkOWShuWTh+WSouWSuOWSpeWSrOWThOWTiOWSqCddLFxuICBbMHg5YTQwLCAn5ZKr5ZOC5ZKk5ZK+5ZK85ZOY5ZOl5ZOm5ZSP5ZSU5ZO95ZOu5ZOt5ZO65ZOi5ZS55ZWA5ZWj5ZWM5ZSu5ZWc5ZWF5ZWW5ZWX5ZS45ZSz5ZWd5ZaZ5ZaA5ZKv5ZaK5Zaf5ZW75ZW+5ZaY5Zae5Zau5ZW85ZaD5Zap5ZaH5Zao5Zea5ZeF5Zef5ZeE5Zec5Zek5ZeU5ZiU5Ze35ZiW5Ze+5Ze95Zib5Ze55ZmO5ZmQ54ef5Zi05Zi25Ziy5Zi4J10sXG4gIFsweDlhODAsICflmavlmaTlmK/lmazlmarlmoblmoDlmorlmqDlmpTlmo/lmqXlmq7lmrblmrTlm4Llmrzlm4Hlm4Plm4Dlm4jlm47lm5Hlm5Plm5flm67lm7nlnIDlm7/lnITlnInlnIjlnIvlnI3lnJPlnJjlnJbll4flnJzlnKblnLflnLjlnY7lnLvlnYDlnY/lnanln4DlnojlnaHlnb/lnonlnpPlnqDlnrPlnqTlnqrlnrDln4Pln4bln5Tln5Lln5PloIrln5bln6PloIvloJnloJ3lobLloKHloaLloYvlobDmr4DloZLloL3lobnlooXlornlop/loqvlorrlo57lorvlorjloq7lo4Xlo5Plo5Hlo5flo5nlo5jlo6Xlo5zlo6Tlo5/lo6/lo7rlo7nlo7vlo7zlo73lpILlpIrlpJDlpJvmoqblpKXlpKzlpK3lpLLlpLjlpL7nq5LlpZXlpZDlpY7lpZrlpZjlpaLlpaDlpaflpazlpaknXSxcbiAgWzB4OWI0MCwgJ+WluOWmgeWmneS9nuS+q+Wmo+WmsuWnhuWnqOWnnOWmjeWnmeWnmuWopeWon+WokeWonOWoieWomuWpgOWprOWpieWoteWotuWpouWpquWqmuWqvOWqvuWri+WrguWqveWro+Wrl+WrpuWrqeWrluWruuWru+WsjOWsi+WsluWssuWrkOWsquWstuWsvuWtg+WtheWtgOWtkeWtleWtmuWtm+WtpeWtqeWtsOWts+WtteWtuOaWiOWtuuWugCddLFxuICBbMHg5YjgwLCAn5a6D5a6m5a645a+D5a+H5a+J5a+U5a+Q5a+k5a+m5a+i5a+e5a+l5a+r5a+w5a+25a+z5bCF5bCH5bCI5bCN5bCT5bCg5bCi5bCo5bC45bC55bGB5bGG5bGO5bGT5bGQ5bGP5a2x5bGs5bGu5Lmi5bG25bG55bKM5bKR5bKU5aab5bKr5bK75bK25bK85bK35bOF5bK+5bOH5bOZ5bOp5bO95bO65bOt5baM5bOq5bSL5bSV5bSX5bWc5bSf5bSb5bSR5bSU5bSi5bSa5bSZ5bSY5bWM5bWS5bWO5bWL5bWs5bWz5bW25baH5baE5baC5bai5bad5bas5bau5ba95baQ5ba35ba85beJ5beN5beT5beS5beW5beb5ber5bey5be15biL5bia5biZ5biR5bib5bi25bi35bmE5bmD5bmA5bmO5bmX5bmU5bmf5bmi5bmk5bmH5bm15bm25bm66bq85bm/5bqg5buB5buC5buI5buQ5buPJ10sXG4gIFsweDljNDAsICflu5blu6Plu53lu5rlu5vlu6Llu6Hlu6jlu6nlu6zlu7Hlu7Plu7Dlu7Tlu7jlu77lvIPlvInlvZ3lvZzlvIvlvJHlvJblvKnlvK3lvLjlvYHlvYjlvYzlvY7lvK/lvZHlvZblvZflvZnlvaHlva3lvbPlvbflvoPlvoLlvb/lvorlvojlvpHlvoflvp7lvpnlvpjlvqDlvqjlvq3lvrzlv5blv7vlv6Tlv7jlv7Hlv53mgrPlv7/mgKHmgaAnXSxcbiAgWzB4OWM4MCwgJ+aAmeaAkOaAqeaAjuaAseaAm+aAleaAq+aApuaAj+aAuuaBmuaBgeaBquaBt+aBn+aBiuaBhuaBjeaBo+aBg+aBpOaBguaBrOaBq+aBmeaCgeaCjeaDp+aCg+aCmuaChOaCm+aCluaCl+aCkuaCp+aCi+aDoeaCuOaDoOaDk+aCtOW/sOaCveaDhuaCteaDmOaFjeaEleaEhuaDtuaDt+aEgOaDtOaDuuaEg+aEoeaDu+aDseaEjeaEjuaFh+aEvuaEqOaEp+aFiuaEv+aEvOaErOaEtOaEveaFguaFhOaFs+aFt+aFmOaFmeaFmuaFq+aFtOaFr+aFpeaFseaFn+aFneaFk+aFteaGmeaGluaGh+aGrOaGlOaGmuaGiuaGkeaGq+aGruaHjOaHiuaHieaHt+aHiOaHg+aHhuaGuuaHi+e9ueaHjeaHpuaHo+aHtuaHuuaHtOaHv+aHveaHvOaHvuaIgOaIiOaIieaIjeaIjOaIlOaImyddLFxuICBbMHg5ZDQwLCAn5oie5oih5oiq5oiu5oiw5oiy5oiz5omB5omO5ome5omj5omb5omg5omo5om85oqC5oqJ5om+5oqS5oqT5oqW5ouU5oqD5oqU5ouX5ouR5oq75ouP5ou/5ouG5pOU5ouI5ouc5ouM5ouK5ouC5ouH5oqb5ouJ5oyM5ouu5oux5oyn5oyC5oyI5ouv5ou15o2Q5oy+5o2N5pCc5o2P5o6W5o6O5o6A5o6r5o225o6j5o6P5o6J5o6f5o615o2rJ10sXG4gIFsweDlkODAsICfmjanmjr7mj6nmj4Dmj4bmj6Pmj4nmj5Lmj7bmj4TmkJbmkLTmkIbmkJPmkKbmkLbmlJ3mkJfmkKjmkI/mkafmka/mkbbmkY7mlKrmkpXmkpPmkqXmkqnmkojmkrzmk5rmk5Lmk4Xmk4fmkrvmk5jmk4Lmk7Hmk6foiInmk6Dmk6Hmiqzmk6Pmk6/mlKzmk7bmk7Tmk7Lmk7rmlIDmk73mlJjmlJzmlIXmlKTmlKPmlKvmlLTmlLXmlLfmlLbmlLjnlYvmlYjmlZbmlZXmlY3mlZjmlZ7mlZ3mlbLmlbjmloLmloPorormlpvmlp/mlqvmlrfml4Pml4bml4Hml4Tml4zml5Lml5vml5nml6Dml6Hml7HmnbLmmIrmmIPml7vmnbPmmLXmmLbmmLTmmJzmmY/mmYTmmYnmmYHmmZ7mmZ3mmaTmmafmmajmmZ/mmaLmmbDmmoPmmojmmo7mmonmmoTmmpjmmp3mm4Hmmrnmm4nmmr7mmrwnXSxcbiAgWzB4OWU0MCwgJ+abhOaauOabluabmuaboOaYv+abpuabqeabsOabteabt+acj+acluacnuacpuacp+mcuOacruacv+actuadgeacuOact+adhuadnuadoOadmeado+adpOaeieadsOaeqeadvOadquaejOaei+aepuaeoeaeheaet+afr+aetOafrOaes+afqeaeuOafpOafnuafneafouafruaeueafjuafhuafp+aqnOagnuahhuagqeahgOahjeagsuahjiddLFxuICBbMHg5ZTgwLCAn5qKz5qCr5qGZ5qGj5qG35qG/5qKf5qKP5qKt5qKU5qKd5qKb5qKD5qqu5qK55qG05qK15qKg5qK65qSP5qKN5qG+5qSB5qOK5qSI5qOY5qSi5qSm5qOh5qSM5qON5qOU5qOn5qOV5qS25qSS5qSE5qOX5qOj5qSl5qO55qOg5qOv5qSo5qSq5qSa5qSj5qSh5qOG5qW55qW35qWc5qW45qWr5qWU5qW+5qWu5qS55qW05qS95qWZ5qSw5qWh5qWe5qWd5qaB5qWq5qay5qau5qeQ5qa/5qeB5qeT5qa+5qeO5a+o5qeK5qed5qa75qeD5qan5qiu5qaR5qag5qac5qaV5qa05qee5qeo5qiC5qib5qe/5qyK5qe55qey5qen5qiF5qax5qie5qet5qiU5qer5qiK5qiS5quB5qij5qiT5qmE5qiM5qmy5qi25qm45qmH5qmi5qmZ5qmm5qmI5qi45qii5qqQ5qqN5qqg5qqE5qqi5qqjJ10sXG4gIFsweDlmNDAsICfmqpfomJfmqrvmq4Pmq4LmqrjmqrPmqqzmq57mq5Hmq5/mqqrmq5rmq6rmq7vmrIXomJbmq7rmrJLmrJbprLHmrJ/mrLjmrLfnm5zmrLnpo67mrYfmrYPmrYnmrZDmrZnmrZTmrZvmrZ/mraHmrbjmrbnmrb/mroDmroTmroPmro3mrpjmrpXmrp7mrqTmrqrmrqvmrq/mrrLmrrHmrrPmrrfmrrzmr4bmr4vmr5Pmr5/mr6zmr6vmr7Pmr68nXSxcbiAgWzB4OWY4MCwgJ+m6vuawiOawk+awlOawm+awpOawo+axnuaxleaxouaxquayguayjeaymuaygeaym+axvuaxqOaxs+aykuaykOazhOazseazk+ayveazl+azheazneayruayseayvuayuuazm+azr+azmeazqua0n+ihjea0tua0q+a0vea0uOa0mea0tea0s+a0kua0jOa1o+a2k+a1pOa1mua1uea1mea2jua2lea/pOa2hea3uea4lea4iua2tea3h+a3pua2uOa3hua3rOa3nua3jOa3qOa3kua3hea3uua3mea3pOa3lea3qua3rua4rea5rua4rua4mea5sua5n+a4vua4o+a5q+a4q+a5tua5jea4n+a5g+a4uua5jua4pOa7v+a4nea4uOa6gua6qua6mOa7iea6t+a7k+a6vea6r+a7hOa6sua7lOa7lea6j+a6pea7gua6n+a9gea8keeBjOa7rOa7uOa7vua8v+a7sua8sea7r+a8sua7jCddLFxuICBbMHhlMDQwLCAn5ry+5ryT5ru35r6G5r265r245r6B5r6A5r2v5r2b5r+z5r2t5r6C5r285r2Y5r6O5r6R5r+C5r2m5r6z5r6j5r6h5r6k5r655r+G5r6q5r+f5r+V5r+s5r+U5r+Y5r+x5r+u5r+b54CJ54CL5r+654CR54CB54CP5r++54Cb54Ca5r2054Cd54CY54Cf54Cw54C+54Cy54GR54Gj54KZ54KS54Kv54Ox54Ks54K454Kz54Ku54Of54OL54OdJ10sXG4gIFsweGUwODAsICfng5nnhInng73nhJznhJnnhaXnhZXnhojnhabnhaLnhYznhZbnhaznho/nh7vnhoTnhpXnhqjnhqznh5fnhrnnhr7nh5Lnh4nnh5Tnh47nh6Dnh6znh6fnh7Xnh7znh7nnh7/niI3niJDniJvniKjniK3niKzniLDniLLniLvniLzniL/niYDniYbniYvniZjnibTnib7nioLnioHniofnipLnipbniqLniqfnirnnirLni4Pni4bni4Tni47ni5Lni6Lni6Dni6Hni7nni7flgI/njJfnjIrnjJznjJbnjJ3njLTnjK/njKnnjKXnjL7njY7njY/pu5jnjZfnjarnjajnjbDnjbjnjbXnjbvnjbrnj4jnjrPnj47njrvnj4Dnj6Xnj67nj57nkqLnkIXnka/nkKXnj7jnkLLnkLrnkZXnkL/nkZ/nkZnnkYHnkZznkannkbDnkaPnkarnkbbnkb7nkovnkp7nkqfnk4rnk4/nk5Tnj7EnXSxcbiAgWzB4ZTE0MCwgJ+eToOeTo+eTp+eTqeeTrueTsueTsOeTseeTuOeTt+eUhOeUg+eUheeUjOeUjueUjeeUleeUk+eUnueUpueUrOeUvOeVhOeVjeeViueVieeVm+eVhueVmueVqeeVpOeVp+eVq+eVreeVuOeVtueWhueWh+eVtOeWiueWieeWgueWlOeWmueWneeWpeeWo+eXgueWs+eXg+eWteeWveeWuOeWvOeWseeXjeeXiueXkueXmeeXo+eXnueXvueXvyddLFxuICBbMHhlMTgwLCAn55e855iB55ew55e655ey55ez55iL55iN55iJ55if55in55ig55ih55ii55ik55i055iw55i755mH55mI55mG55mc55mY55mh55mi55mo55mp55mq55mn55ms55mw55my55m255m455m855qA55qD55qI55qL55qO55qW55qT55qZ55qa55qw55q055q455q555q655uC55uN55uW55uS55ue55uh55ul55un55uq6Jiv55u755yI55yH55yE55yp55yk55ye55yl55ym55yb55y355y4552H552a552o552r552b552l552/552+5525556O556L556R556g556e556w55625565556/55685569556755+H55+N55+X55+a55+c55+j55+u55+856CM56CS56Sm56Cg56Sq56GF56KO56G056KG56G856Ka56KM56Kj56K156Kq56Kv56OR56OG56OL56OU56K+56K856OF56OK56OsJ10sXG4gIFsweGUyNDAsICfno6fno5rno73no7TnpIfnpJLnpJHnpJnnpKznpKvnpYDnpaDnpZfnpZ/npZrnpZXnpZPnpbrnpb/npornpp3npqfpvYvnpqrnpq7nprPnprnnprrnp4nnp5Xnp6fnp6znp6Hnp6PnqIjnqI3nqJjnqJnnqKDnqJ/npoDnqLHnqLvnqL7nqLfnqYPnqZfnqYnnqaHnqaLnqanpvp3nqbDnqbnnqb3nqojnqpfnqpXnqpjnqpbnqqnnq4jnqrAnXSxcbiAgWzB4ZTI4MCwgJ+eqtuerheerhOeqv+mCg+erh+eriuerjeerj+erleerk+ermeermuerneeroeerouerpuerreersOesguesj+esiueshuess+esmOesmeesnuesteesqOestuetkOetuueshOetjeesi+etjOetheetteetpeettOetp+etsOetseetrOetrueuneeumOeun+eujeeunOeumueui+eukueuj+etneeumeevi+evgeevjOevj+eutOevhuevneevqeewkeewlOevpuevpeexoOewgOewh+ewk+evs+evt+ewl+ewjeevtuewo+ewp+ewquewn+ewt+ewq+ewveexjOexg+exlOexj+exgOexkOexmOexn+expOexluexpeexrOexteeyg+eykOeypOeyreeyoueyq+eyoeeyqOeys+eysueyseeyrueyueeyveezgOezheezguezmOezkueznOezoumsu+ezr+ezsueztOeztuezuue0hiddLFxuICBbMHhlMzQwLCAn57SC57Sc57SV57SK57WF57WL57Su57Sy57S/57S157WG57Wz57WW57WO57Wy57Wo57Wu57WP57Wj57aT57aJ57Wb57aP57W957ab57a657au57aj57a157eH57a957ar57i957ai57av57ec57a457af57aw57eY57ed57ek57ee57e757ey57eh57iF57iK57ij57ih57iS57ix57if57iJ57iL57ii57mG57mm57i757i157i557mD57i3J10sXG4gIFsweGUzODAsICfnuLLnuLrnuafnuZ3nuZbnuZ7nuZnnuZrnubnnuarnuannubznubvnuoPnt5Xnub3ovq7nub/nuojnuonnuoznupLnupDnupPnupTnupbnuo7nupvnupznvLjnvLrnvYXnvYznvY3nvY7nvZDnvZHnvZXnvZTnvZjnvZ/nvaDnvajnvannvafnvbjnvoLnvobnvoPnvojnvofnvoznvpTnvp7nvp3nvprnvqPnvq/nvrLnvrnnvq7nvrbnvrjorbHnv4Xnv4bnv4rnv5Xnv5Tnv6Hnv6bnv6nnv7Pnv7npo5zogIbogITogIvogJLogJjogJnogJzogKHogKjogL/ogLvogYrogYbogZLogZjogZrogZ/ogaLogajogbPogbLogbDogbbogbnogb3ogb/ogoTogobogoXogpvogpPogprogq3lhpDogqzog5vog6Xog5nog53og4Tog5rog5bohInog6/og7HohJvohKnohKPohK/ohYsnXSxcbiAgWzB4ZTQ0MCwgJ+mai+iFhuiEvuiFk+iFkeiDvOiFseiFruiFpeiFpuiFtOiGg+iGiOiGiuiGgOiGguiGoOiGleiGpOiGo+iFn+iGk+iGqeiGsOiGteiGvuiGuOiGveiHgOiHguiGuuiHieiHjeiHkeiHmeiHmOiHiOiHmuiHn+iHoOiHp+iHuuiHu+iHvuiIgeiIguiIheiIh+iIiuiIjeiIkOiIluiIqeiIq+iIuOiIs+iJgOiJmeiJmOiJneiJmuiJn+iJpCddLFxuICBbMHhlNDgwLCAn6Imi6Imo6Imq6Imr6Iiu6Imx6Im36Im46Im+6IqN6IqS6Iqr6Iqf6Iq76Iqs6Iuh6Iuj6Iuf6IuS6Iu06Iuz6Iu66I6T6IyD6Iu76Iu56Iue6IyG6Iuc6IyJ6IuZ6Iy16Iy06IyW6Iyy6Iyx6I2A6Iy56I2Q6I2F6Iyv6Iyr6IyX6IyY6I6F6I6a6I6q6I6f6I6i6I6W6Iyj6I6O6I6H6I6K6I286I616I2z6I216I6g6I6J6I6o6I+06JCT6I+r6I+O6I+96JCD6I+Y6JCL6I+B6I+36JCH6I+g6I+y6JCN6JCi6JCg6I696JC46JSG6I+76JGt6JCq6JC86JWa6JKE6JG36JGr6JKt6JGu6JKC6JGp6JGG6JCs6JGv6JG56JC16JOK6JGi6JK56JK/6JKf6JOZ6JON6JK76JOa6JOQ6JOB6JOG6JOW6JKh6JSh6JO/6JO06JSX6JSY6JSs6JSf6JSV6JSU6JO86JWA6JWj6JWY6JWIJ10sXG4gIFsweGU1NDAsICfolYHomILolYvolZXoloDolqTolojolpHolorolqjola3olpTolpvol6rolofolpzolbfolb7olpDol4nolrrol4/olrnol5Dol5Xol53ol6Xol5zol7nomIromJPomIvol77ol7romIbomKLomJromLDomL/omY3kuZXomZTomZ/omafombHompPomqPomqnomqromovomozomrbomq/om4Tom4bomrDom4nooKPomqvom5Tom57om6nom6wnXSxcbiAgWzB4ZTU4MCwgJ+ibn+ibm+ibr+ickuichuiciOicgOicg+ibu+ickeicieicjeibueiciuictOicv+ict+icu+icpeicqeicmuidoOidn+iduOidjOidjuidtOidl+idqOidruidmeidk+ido+idquigheieouien+ieguier+ifi+ieveifgOifkOmbluieq+ifhOies+ifh+ifhuieu+ifr+ifsuifoOigj+igjeifvuiftuift+igjuifkuigkeigluigleigouigoeigseigtuigueigp+igu+ihhOihguihkuihmeihnuihouihq+iigeihvuiinuihteihveiiteihsuiiguiil+iikuiiruiimeiiouiijeiipOiisOiiv+iiseijg+ijhOijlOijmOijmeijneijueikguijvOijtOijqOijsuikhOikjOikiuikk+ilg+iknuikpeikquikq+ilgeilhOiku+iktuikuOiljOikneiloOilniddLFxuICBbMHhlNjQwLCAn6KWm6KWk6KWt6KWq6KWv6KW06KW36KW+6KaD6KaI6KaK6KaT6KaY6Kah6Kap6Kam6Kas6Kav6Kay6Ka66Ka96Ka/6KeA6Kea6Kec6Ked6Ken6Ke06Ke46KiD6KiW6KiQ6KiM6Kib6Kid6Kil6Ki26KmB6Kmb6KmS6KmG6KmI6Km86Kmt6Kms6Kmi6KqF6KqC6KqE6Kqo6Kqh6KqR6Kql6Kqm6Kqa6Kqj6KuE6KuN6KuC6Kua6Kur6Kuz6KunJ10sXG4gIFsweGU2ODAsICfoq6Toq7HorJToq6Doq6Loq7foq57oq5vorIzorIforJroq6HorJborJDorJforKDorLPpnqvorKborKvorL7orKjorYHorYzorY/orY7orYnorZborZvorZroravorZ/orazora/orbTorb3oroDorozoro7orpLorpPorpborpnorprosLrosYHosL/osYjosYzosY7osZDosZXosaLosazosbjosbrosoLosonosoXosoroso3oso7ospTosbzospjmiJ3osq3osqrosr3osrLosrPosq7osrbos4jos4Hos6Tos6Pos5ros73os7ros7votITotIXotIrotIfotI/otI3otJDpvY7otJPos43otJTotJbotafota3otbHotbPotoHotpnot4Lotr7otrrot4/ot5rot5bot4zot5vot4vot6rot6vot5/ot6Pot7zouIjouInot7/ouJ3ouJ7ouJDouJ/ouYLouLXouLDouLTouYonXSxcbiAgWzB4ZTc0MCwgJ+i5h+i5iei5jOi5kOi5iOi5mei5pOi5oOi4qui5o+i5lei5tui5sui5vOi6gei6h+i6hei6hOi6i+i6iui6k+i6kei6lOi6mei6qui6oei6rOi6sOi7hui6sei6vui7hei7iOi7i+i7m+i7o+i7vOi7u+i7q+i7vui8iui8hei8lei8kui8mei8k+i8nOi8n+i8m+i8jOi8pui8s+i8u+i8uei9hei9gui8vui9jOi9iei9hui9jui9l+i9nCddLFxuICBbMHhlNzgwLCAn6L2i6L2j6L2k6L6c6L6f6L6j6L6t6L6v6L636L+a6L+l6L+i6L+q6L+v6YKH6L+06YCF6L+56L+66YCR6YCV6YCh6YCN6YCe6YCW6YCL6YCn6YC26YC16YC56L+46YGP6YGQ6YGR6YGS6YCO6YGJ6YC+6YGW6YGY6YGe6YGo6YGv6YG26Zqo6YGy6YKC6YG96YKB6YKA6YKK6YKJ6YKP6YKo6YKv6YKx6YK16YOi6YOk5omI6YOb6YSC6YSS6YSZ6YSy6YSw6YWK6YWW6YWY6YWj6YWl6YWp6YWz6YWy6YaL6YaJ6YaC6Yai6Yar6Yav6Yaq6Ya16Ya06Ya66YeA6YeB6YeJ6YeL6YeQ6YeW6Yef6Yeh6Yeb6Ye86Ye16Ye26Yie6Ye/6YiU6Yis6YiV6YiR6Yme6YmX6YmF6YmJ6Ymk6YmI6YqV6Yi/6YmL6YmQ6Yqc6YqW6YqT6Yqb6Yma6YuP6Yq56Yq36Yup6YyP6Yu66Y2E6YyuJ10sXG4gIFsweGU4NDAsICfpjJnpjKLpjJrpjKPpjLrpjLXpjLvpjZzpjaDpjbzpja7pjZbpjrDpjqzpjq3pjpTpjrnpj5bpj5fpj6jpj6Xpj5jpj4Ppj53pj5Dpj4jpj6TpkJrpkJTpkJPpkIPpkIfpkJDpkLbpkKvpkLXpkKHpkLrpkYHpkZLpkYTpkZvpkaDpkaLpkZ7pkarpiKnpkbDpkbXpkbfpkb3pkZrpkbzpkb7pkoHpkb/ploLplofplorplpTplpbplpjplpknXSxcbiAgWzB4ZTg4MCwgJ+mWoOmWqOmWp+mWremWvOmWu+mWuemWvumXiua/tumXg+mXjemXjOmXlemXlOmXlumXnOmXoemXpemXoumYoemYqOmYrumYr+mZgumZjOmZj+mZi+mZt+mZnOmZnumZnemZn+mZpumZsumZrOmajemamOmalemal+maqumap+masemasumasOmatOmatumauOmauembjumbi+mbiembjeiljembnOmcjemblembuemchOmchumciOmck+mcjumckemcj+mclumcmemcpOmcqumcsOmcuemcvemcvumdhOmdhumdiOmdgumdiemdnOmdoOmdpOmdpumdqOWLkumdq+mdsemduemehemdvOmegemduumehumei+mej+mekOmenOmeqOmepumeo+mes+metOmfg+mfhumfiOmfi+mfnOmfrem9j+mfsuern+mftumftemgj+mgjOmguOmgpOmgoemgt+mgvemhhumhj+mhi+mhq+mhr+mhsCddLFxuICBbMHhlOTQwLCAn6aGx6aG06aGz6aKq6aKv6aKx6aK26aOE6aOD6aOG6aOp6aOr6aSD6aSJ6aSS6aSU6aSY6aSh6aSd6aSe6aSk6aSg6aSs6aSu6aS96aS+6aWC6aWJ6aWF6aWQ6aWL6aWR6aWS6aWM6aWV6aaX6aaY6aal6aat6aau6aa86aef6aeb6aed6aeY6aeR6aet6aeu6aex6aey6ae76ae46aiB6aiP6aiF6aei6aiZ6air6ai36amF6amC6amA6amDJ10sXG4gIFsweGU5ODAsICfpqL7pqZXpqY3pqZvpqZfpqZ/pqaLpqaXpqaTpqanpqavpqarpqq3pqrDpqrzpq4Dpq4/pq5Hpq5Ppq5Tpq57pq5/pq6Lpq6Ppq6bpq6/pq6vpq67pq7Tpq7Hpq7fpq7vprIbprJjprJrprJ/prKLprKPprKXprKfprKjprKnprKrprK7prK/prLLprYTprYPprY/prY3prY7prZHprZjprbTprpPproPprpHprpbprpfprp/prqDprqjprrTpr4Dpr4rprrnpr4bpr4/pr5Hpr5Lpr6Ppr6Lpr6Tpr5Tpr6HpsLrpr7Lpr7Hpr7DpsJXpsJTpsInpsJPpsIzpsIbpsIjpsJLpsIrpsITpsK7psJvpsKXpsKTpsKHpsLDpsYfpsLLpsYbpsL7psZrpsaDpsafpsbbpsbjps6fps6zps7DptInptIjps6vptIPptIbptKrptKbptq/ptKPptJ/ptYTptJXptJLptYHptL/ptL7ptYbptYgnXSxcbiAgWzB4ZWE0MCwgJ+m1nem1num1pOm1kem1kOm1mem1sum2iem2h+m2q+m1r+m1uum2mum2pOm2qem2sum3hOm3gem2u+m2uOm2uum3hum3j+m3gum3mem3k+m3uOm3pum3rem3r+m3vem4mum4m+m4num5tem5uem5vem6gem6iOm6i+m6jOm6kum6lem6kem6nem6pem6qem6uOm6qum6remdoem7jOm7jum7j+m7kOm7lOm7nOm7num7nem7oOm7pem7qOm7ryddLFxuICBbMHhlYTgwLCAn6bu06bu26bu36bu56bu76bu86bu96byH6byI55q36byV6byh6bys6by+6b2K6b2S6b2U6b2j6b2f6b2g6b2h6b2m6b2n6b2s6b2q6b236b2y6b226b6V6b6c6b6g5aCv5qeH6YGZ55Gk5Yec54aZJ11cbl1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0b1NKSVMgKHV0ZjhDaGFyKSB7XG4gIGlmICghdXRmOENoYXIgfHwgdXRmOENoYXIgPT09ICcnKSByZXR1cm5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IFNKSVNfVVRGOC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrYW5qaSA9IFNKSVNfVVRGOFtpXVsxXVxuXG4gICAgdmFyIHBvc0luZGV4ID0ga2FuamkuaW5kZXhPZih1dGY4Q2hhcilcbiAgICBpZiAocG9zSW5kZXggPj0gMCkge1xuICAgICAgcmV0dXJuIFNKSVNfVVRGOFtpXVswXSArIHBvc0luZGV4XG4gICAgfVxuICB9XG59XG4iXX0=
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,(n.QRCode||(n.QRCode={})).toSJIS=e()}}(function(){return function(){function e(n,r,o){function t(i,u){if(!r[i]){if(!n[i]){var d="function"==typeof require&&require;if(!u&&d)return d(i,!0);if(f)return f(i,!0);var l=new Error("Cannot find module '"+i+"'");throw l.code="MODULE_NOT_FOUND",l}var p=r[i]={exports:{}};n[i][0].call(p.exports,function(e){return t(n[i][1][e]||e)},p,p.exports,e,n,r,o)}return r[i].exports}for(var f="function"==typeof require&&require,i=0;i<o.length;i++)t(o[i]);return t}return e}()({1:[function(e,n,r){var o=[[33088,"ã€€ã€ã€‚ï¼Œï¼Žãƒ»ï¼šï¼›ï¼Ÿï¼ã‚›ã‚œÂ´ï½€Â¨ï¼¾ï¿£ï¼¿ãƒ½ãƒ¾ã‚ã‚žã€ƒä»ã€…ã€†ã€‡ãƒ¼â€•â€ï¼ï¼¼ï½žâˆ¥ï½œâ€¦â€¥â€˜â€™â€œâ€ï¼ˆï¼‰ã€”ã€•ï¼»ï¼½ï½›ï½ã€ˆã€‰ã€Šã€‹ã€Œã€ã€Žã€ã€ã€‘ï¼‹ï¼Â±Ã—"],[33152,"Ã·ï¼â‰ ï¼œï¼ž"],[33167,"ï¿¥ï¼„ï¿ ï¿¡ï¼…ï¼ƒï¼†ï¼Šï¼ Â§â˜†â˜…"],[33190,"â€»ã€’â†’â†â†‘â†“ã€“"],[33226,"ï¿¢"],[33359,"ï¼ï¼‘ï¼’ï¼“ï¼”ï¼•ï¼–ï¼—ï¼˜ï¼™"],[33376,"ï¼¡ï¼¢ï¼£ï¼¤ï¼¥ï¼¦ï¼§ï¼¨ï¼©ï¼ªï¼«ï¼¬ï¼­ï¼®ï¼¯ï¼°ï¼±ï¼²ï¼³ï¼´ï¼µï¼¶ï¼·ï¼¸ï¼¹ï¼º"],[33409,"ï½ï½‚ï½ƒï½„ï½…ï½†ï½‡ï½ˆï½‰ï½Šï½‹ï½Œï½ï½Žï½ï½ï½‘ï½’ï½“ï½”ï½•ï½–ï½—ï½˜ï½™ï½š"],[33439,"ãã‚ãƒã„ã…ã†ã‡ãˆã‰ãŠã‹ãŒããŽããã‘ã’ã“ã”ã•ã–ã—ã˜ã™ãšã›ãœããžãŸã ã¡ã¢ã£ã¤ã¥ã¦ã§ã¨ã©ãªã«ã¬ã­ã®ã¯ã°ã±ã²ã³ã´ãµã¶ã·ã¸ã¹ãºã»ã¼ã½ã¾ã¿ã‚€ã‚ã‚‚ã‚ƒã‚„ã‚…ã‚†ã‚‡ã‚ˆã‚‰ã‚Šã‚‹ã‚Œã‚ã‚Žã‚ã‚ã‚‘ã‚’ã‚“"],[33600,"ã‚¡ã‚¢ã‚£ã‚¤ã‚¥ã‚¦ã‚§ã‚¨ã‚©ã‚ªã‚«ã‚¬ã‚­ã‚®ã‚¯ã‚°ã‚±ã‚²ã‚³ã‚´ã‚µã‚¶ã‚·ã‚¸ã‚¹ã‚ºã‚»ã‚¼ã‚½ã‚¾ã‚¿ãƒ€ãƒãƒ‚ãƒƒãƒ„ãƒ…ãƒ†ãƒ‡ãƒˆãƒ‰ãƒŠãƒ‹ãƒŒãƒãƒŽãƒãƒãƒ‘ãƒ’ãƒ“ãƒ”ãƒ•ãƒ–ãƒ—ãƒ˜ãƒ™ãƒšãƒ›ãƒœãƒãƒžãƒŸ"],[33664,"ãƒ ãƒ¡ãƒ¢ãƒ£ãƒ¤ãƒ¥ãƒ¦ãƒ§ãƒ¨ãƒ©ãƒªãƒ«ãƒ¬ãƒ­ãƒ®ãƒ¯ãƒ°ãƒ±ãƒ²ãƒ³ãƒ´ãƒµãƒ¶"],[33695,"Î‘Î’Î“Î”Î•Î–Î—Î˜Î™ÎšÎ›ÎœÎÎžÎŸÎ Î¡Î£Î¤Î¥Î¦Î§Î¨Î©"],[33727,"Î±Î²Î³Î´ÎµÎ¶Î·Î¸Î¹ÎºÎ»Î¼Î½Î¾Î¿Ï€ÏÏƒÏ„Ï…Ï†Ï‡ÏˆÏ‰"],[33856,"ÐÐ‘Ð’Ð“Ð”Ð•ÐÐ–Ð—Ð˜Ð™ÐšÐ›ÐœÐÐžÐŸÐ Ð¡Ð¢Ð£Ð¤Ð¥Ð¦Ð§Ð¨Ð©ÐªÐ«Ð¬Ð­Ð®Ð¯"],[33904,"Ð°Ð±Ð²Ð³Ð´ÐµÑ‘Ð¶Ð·Ð¸Ð¹ÐºÐ»Ð¼Ð½"],[33920,"Ð¾Ð¿Ñ€ÑÑ‚ÑƒÑ„Ñ…Ñ†Ñ‡ÑˆÑ‰ÑŠÑ‹ÑŒÑÑŽÑ"],[34688,"ã€ã€Ÿ"],[35136,"é™¢é™°éš éŸ»å‹å³å®‡çƒç¾½è¿‚é›¨å¯éµœçªºä¸‘ç¢“è‡¼æ¸¦å˜˜å”„æ¬è”šé°»å§¥åŽ©æµ¦ç“œé–å™‚äº‘é‹é›²èé¤Œå¡å–¶å¬°å½±æ˜ æ›³æ „æ°¸æ³³æ´©ç‘›ç›ˆç©Žé ´è‹±è¡›è© é‹­æ¶²ç–«ç›Šé§…æ‚¦è¬è¶Šé–²æ¦ŽåŽ­å††"],[35200,"åœ’å °å¥„å®´å»¶æ€¨æŽ©æ´æ²¿æ¼”ç‚Žç„”ç…™ç‡•çŒ¿ç¸è‰¶è‹‘è–—é é‰›é´›å¡©æ–¼æ±šç”¥å‡¹å¤®å¥¥å¾€å¿œæŠ¼æ—ºæ¨ªæ¬§æ®´çŽ‹ç¿è¥–é´¬é´Žé»„å²¡æ²–è»å„„å±‹æ†¶è‡†æ¡¶ç‰¡ä¹™ä¿ºå¸æ©æ¸©ç©éŸ³ä¸‹åŒ–ä»®ä½•ä¼½ä¾¡ä½³åŠ å¯å˜‰å¤å«å®¶å¯¡ç§‘æš‡æžœæž¶æ­Œæ²³ç«ç‚ç¦ç¦¾ç¨¼ç®‡èŠ±è‹›èŒ„è·è¯è“è¦èª²å˜©è²¨è¿¦éŽéœžèšŠä¿„å³¨æˆ‘ç‰™ç”»è‡¥èŠ½è›¾è³€é›…é¤“é§•ä»‹ä¼šè§£å›žå¡Šå£Šå»»å¿«æ€ªæ‚”æ¢æ‡æˆ’æ‹æ”¹"],[35392,"é­æ™¦æ¢°æµ·ç°ç•Œçš†çµµèŠ¥èŸ¹é–‹éšŽè²å‡±åŠ¾å¤–å’³å®³å´–æ…¨æ¦‚æ¶¯ç¢è“‹è¡—è©²éŽ§éª¸æµ¬é¦¨è›™åž£æŸ¿è›ŽéˆŽåŠƒåš‡å„å»“æ‹¡æ’¹æ ¼æ ¸æ®»ç²ç¢ºç©«è¦šè§’èµ«è¼ƒéƒ­é–£éš”é©å­¦å²³æ¥½é¡é¡ŽæŽ›ç¬ æ¨«"],[35456,"æ©¿æ¢¶é°æ½Ÿå‰²å–æ°æ‹¬æ´»æ¸‡æ»‘è‘›è¤è½„ä¸”é°¹å¶æ¤›æ¨ºéž„æ ªå…œç«ƒè’²é‡œéŽŒå™›é´¨æ ¢èŒ…è±ç²¥åˆˆè‹…ç“¦ä¹¾ä¾ƒå† å¯’åˆŠå‹˜å‹§å·»å–šå ªå§¦å®Œå®˜å¯›å¹²å¹¹æ‚£æ„Ÿæ…£æ†¾æ›æ•¢æŸ‘æ¡“æ£ºæ¬¾æ­“æ±—æ¼¢æ¾—æ½…ç’°ç”˜ç›£çœ‹ç«¿ç®¡ç°¡ç·©ç¼¶ç¿°è‚è‰¦èŽžè¦³è«Œè²«é‚„é‘‘é–“é–‘é–¢é™¥éŸ“é¤¨èˆ˜ä¸¸å«å²¸å·ŒçŽ©ç™Œçœ¼å²©ç¿«è´‹é›é ‘é¡”é¡˜ä¼ä¼Žå±å–œå™¨åŸºå¥‡å¬‰å¯„å²å¸Œå¹¾å¿Œæ®æœºæ——æ—¢æœŸæ£‹æ£„"],[35648,"æ©Ÿå¸°æ¯…æ°—æ±½ç•¿ç¥ˆå­£ç¨€ç´€å¾½è¦è¨˜è²´èµ·è»Œè¼é£¢é¨Žé¬¼äº€å½å„€å¦“å®œæˆ¯æŠ€æ“¬æ¬ºçŠ ç–‘ç¥‡ç¾©èŸ»èª¼è­°æŽ¬èŠéž å‰åƒå–«æ¡”æ©˜è©°ç §æµé»å´å®¢è„šè™é€†ä¸˜ä¹…ä»‡ä¼‘åŠå¸å®®å¼“æ€¥æ•‘"],[35712,"æœ½æ±‚æ±²æ³£ç¸çƒç©¶çª®ç¬ˆç´šç³¾çµ¦æ—§ç‰›åŽ»å±…å·¨æ‹’æ‹ æŒ™æ¸ è™šè¨±è·é‹¸æ¼ç¦¦é­šäº¨äº«äº¬ä¾›ä¾ åƒ‘å…‡ç«¶å…±å‡¶å”åŒ¡å¿å«å–¬å¢ƒå³¡å¼·å½Šæ€¯ææ­æŒŸæ•™æ©‹æ³ç‹‚ç‹­çŸ¯èƒ¸è„…èˆˆè•Žéƒ·é¡éŸ¿é¥—é©šä»°å‡å°­æšæ¥­å±€æ›²æ¥µçŽ‰æ¡ç²åƒ…å‹¤å‡å·¾éŒ¦æ–¤æ¬£æ¬½ç´ç¦ç¦½ç­‹ç·ŠèŠ¹èŒè¡¿è¥Ÿè¬¹è¿‘é‡‘åŸéŠ€ä¹å€¶å¥åŒºç‹—çŽ–çŸ©è‹¦èº¯é§†é§ˆé§’å…·æ„šè™žå–°ç©ºå¶å¯“é‡éš…ä¸²æ«›é‡§å±‘å±ˆ"],[35904,"æŽ˜çªŸæ²“é´è½¡çªªç†Šéšˆç²‚æ —ç¹°æ¡‘é¬å‹²å›è–«è¨“ç¾¤è»éƒ¡å¦è¢ˆç¥ä¿‚å‚¾åˆ‘å…„å•“åœ­çªåž‹å¥‘å½¢å¾„æµæ…¶æ…§æ†©æŽ²æºæ•¬æ™¯æ¡‚æ¸“ç•¦ç¨½ç³»çµŒç¶™ç¹‹ç½«èŒŽèŠè›è¨ˆè©£è­¦è»½é šé¶èŠ¸è¿Žé¯¨"],[35968,"åŠ‡æˆŸæ’ƒæ¿€éš™æ¡å‚‘æ¬ æ±ºæ½”ç©´çµè¡€è¨£æœˆä»¶å€¹å€¦å¥å…¼åˆ¸å‰£å–§åœå …å«Œå»ºæ†²æ‡¸æ‹³æ²æ¤œæ¨©ç‰½çŠ¬çŒ®ç ”ç¡¯çµ¹çœŒè‚©è¦‹è¬™è³¢è»’é£éµé™ºé¡•é¨“é¹¸å…ƒåŽŸåŽ³å¹»å¼¦æ¸›æºçŽ„ç¾çµƒèˆ·è¨€è«ºé™ä¹Žå€‹å¤å‘¼å›ºå§‘å­¤å·±åº«å¼§æˆ¸æ•…æž¯æ¹–ç‹ç³Šè¢´è‚¡èƒ¡è°è™Žèª‡è·¨éˆ·é›‡é¡§é¼“äº”äº’ä¼åˆå‘‰å¾å¨¯å¾Œå¾¡æ‚Ÿæ¢§æªŽç‘šç¢èªžèª¤è­·é†ä¹žé¯‰äº¤ä½¼ä¾¯å€™å€–å…‰å…¬åŠŸåŠ¹å‹¾åŽšå£å‘"],[36160,"åŽå–‰å‘åž¢å¥½å­”å­å®å·¥å·§å··å¹¸åºƒåºšåº·å¼˜æ’æ…ŒæŠ—æ‹˜æŽ§æ”»æ˜‚æ™ƒæ›´æ­æ ¡æ¢—æ§‹æ±Ÿæ´ªæµ©æ¸¯æºç”²çš‡ç¡¬ç¨¿ç³ ç´…ç´˜çµžç¶±è€•è€ƒè‚¯è‚±è…”è†èˆªè’è¡Œè¡¡è¬›è²¢è³¼éƒŠé…µé‰±ç ¿é‹¼é–¤é™"],[36224,"é …é¦™é«˜é´»å‰›åŠ«å·åˆå£•æ‹·æ¿ è±ªè½Ÿéº¹å…‹åˆ»å‘Šå›½ç©€é…·éµ é»’ç„æ¼‰è…°ç”‘å¿½æƒšéª¨ç‹›è¾¼æ­¤é ƒä»Šå›°å¤å¢¾å©šæ¨æ‡‡æ˜æ˜†æ ¹æ¢±æ··ç—•ç´ºè‰®é­‚äº›ä½å‰å”†åµ¯å·¦å·®æŸ»æ²™ç‘³ç ‚è©éŽ–è£Ÿååº§æŒ«å‚µå‚¬å†æœ€å“‰å¡žå¦»å®°å½©æ‰æŽ¡æ ½æ­³æ¸ˆç½é‡‡çŠ€ç •ç ¦ç¥­æ–Žç´°èœè£è¼‰éš›å‰¤åœ¨æç½ªè²¡å†´å‚é˜ªå ºæ¦Šè‚´å’²å´ŽåŸ¼ç¢•é·ºä½œå‰Šå’‹æ¾æ˜¨æœ”æŸµçª„ç­–ç´¢éŒ¯æ¡œé®­ç¬¹åŒ™å†Šåˆ·"],[36416,"å¯Ÿæ‹¶æ’®æ“¦æœ­æ®ºè–©é›‘çšé¯–æŒéŒ†é®«çš¿æ™’ä¸‰å‚˜å‚å±±æƒ¨æ’’æ•£æ¡Ÿç‡¦çŠç”£ç®—çº‚èš•è®ƒè³›é…¸é¤æ–¬æš«æ®‹ä»•ä»”ä¼ºä½¿åˆºå¸å²å—£å››å£«å§‹å§‰å§¿å­å±å¸‚å¸«å¿—æ€æŒ‡æ”¯å­œæ–¯æ–½æ—¨æžæ­¢"],[36480,"æ­»æ°ç…ç¥‰ç§ç³¸ç´™ç´«è‚¢è„‚è‡³è¦–è©žè©©è©¦èªŒè«®è³‡è³œé›Œé£¼æ­¯äº‹ä¼¼ä¾å…å­—å¯ºæ…ˆæŒæ™‚æ¬¡æ»‹æ²»çˆ¾ç’½ç—”ç£ç¤ºè€Œè€³è‡ªè’”è¾žæ±é¹¿å¼è­˜é´«ç«ºè»¸å®é›«ä¸ƒå±åŸ·å¤±å«‰å®¤æ‚‰æ¹¿æ¼†ç–¾è³ªå®Ÿè”€ç¯ å²æŸ´èŠå±¡è•Šç¸žèˆŽå†™å°„æ¨èµ¦æ–œç…®ç¤¾ç´—è€…è¬è»Šé®è›‡é‚ªå€Ÿå‹ºå°ºæ“ç¼çˆµé…Œé‡ˆéŒ«è‹¥å¯‚å¼±æƒ¹ä¸»å–å®ˆæ‰‹æœ±æ®Šç‹©ç ç¨®è…«è¶£é…’é¦–å„’å—å‘ªå¯¿æŽˆæ¨¹ç¶¬éœ€å›šåŽå‘¨"],[36672,"å®—å°±å·žä¿®æ„æ‹¾æ´²ç§€ç§‹çµ‚ç¹ç¿’è‡­èˆŸè’è¡†è¥²è®è¹´è¼¯é€±é…‹é…¬é›†é†œä»€ä½å……åå¾“æˆŽæŸ”æ±æ¸‹ç£ç¸¦é‡éŠƒå”å¤™å®¿æ·‘ç¥ç¸®ç²›å¡¾ç†Ÿå‡ºè¡“è¿°ä¿Šå³»æ˜¥çž¬ç«£èˆœé§¿å‡†å¾ªæ—¬æ¥¯æ®‰æ·³"],[36736,"æº–æ½¤ç›¾ç´”å·¡éµé†‡é †å‡¦åˆæ‰€æš‘æ›™æ¸šåº¶ç·’ç½²æ›¸è–¯è—·è«¸åŠ©å™å¥³åºå¾æ•é‹¤é™¤å‚·å„Ÿå‹åŒ å‡å¬å“¨å•†å”±å˜—å¥¨å¦¾å¨¼å®µå°†å°å°‘å°šåº„åºŠå» å½°æ‰¿æŠ„æ‹›æŽŒæ·æ˜‡æ˜Œæ˜­æ™¶æ¾æ¢¢æ¨Ÿæ¨µæ²¼æ¶ˆæ¸‰æ¹˜ç„¼ç„¦ç…§ç—‡çœç¡ç¤ç¥¥ç§°ç« ç¬‘ç²§ç´¹è‚–è–è’‹è•‰è¡è£³è¨Ÿè¨¼è©”è©³è±¡è³žé†¤é‰¦é¾é˜éšœéž˜ä¸Šä¸ˆä¸žä¹—å†—å‰°åŸŽå ´å£Œå¬¢å¸¸æƒ…æ“¾æ¡æ–æµ„çŠ¶ç•³ç©£è’¸è­²é†¸éŒ å˜±åŸ´é£¾"],[36928,"æ‹­æ¤æ®–ç‡­ç¹”è·è‰²è§¦é£Ÿè•è¾±å°»ä¼¸ä¿¡ä¾µå”‡å¨ å¯å¯©å¿ƒæ…ŽæŒ¯æ–°æ™‹æ£®æ¦›æµ¸æ·±ç”³ç–¹çœŸç¥žç§¦ç´³è‡£èŠ¯è–ªè¦ªè¨ºèº«è¾›é€²é‡éœ‡äººä»åˆƒå¡µå£¬å°‹ç”šå°½è…Žè¨Šè¿…é™£é­ç¬¥è«é ˆé…¢å›³åŽ¨"],[36992,"é€—å¹åž‚å¸¥æŽ¨æ°´ç‚Šç¡ç²‹ç¿ è¡°é‚é…”éŒéŒ˜éšç‘žé«„å´‡åµ©æ•°æž¢è¶¨é››æ®æ‰æ¤™è…é —é›€è£¾æ¾„æ‘ºå¯¸ä¸–ç€¬ç•æ˜¯å‡„åˆ¶å‹¢å§“å¾æ€§æˆæ”¿æ•´æ˜Ÿæ™´æ£²æ –æ­£æ¸…ç‰²ç”Ÿç››ç²¾è–å£°è£½è¥¿èª èª“è«‹é€é†’é’é™æ–‰ç¨Žè„†éš»å¸­æƒœæˆšæ–¥æ˜”æžçŸ³ç©ç±ç¸¾è„Šè²¬èµ¤è·¡è¹Ÿç¢©åˆ‡æ‹™æŽ¥æ‘‚æŠ˜è¨­çªƒç¯€èª¬é›ªçµ¶èˆŒè‰ä»™å…ˆåƒå å®£å°‚å°–å·æˆ¦æ‰‡æ’°æ “æ ´æ³‰æµ…æ´—æŸ“æ½œç…Žç…½æ—‹ç©¿ç®­ç·š"],[37184,"ç¹Šç¾¨è…ºèˆ›èˆ¹è–¦è©®è³Žè·µé¸é·éŠ­éŠ‘é–ƒé®®å‰å–„æ¼¸ç„¶å…¨ç¦…ç¹•è†³ç³Žå™Œå¡‘å²¨æŽªæ›¾æ›½æ¥šç‹™ç–ç–Žç¤Žç¥–ç§Ÿç²—ç´ çµ„è˜‡è¨´é˜»é¡é¼ åƒ§å‰µåŒå¢å€‰å–ªå£®å¥çˆ½å®‹å±¤åŒæƒ£æƒ³æœæŽƒæŒ¿æŽ»"],[37248,"æ“æ—©æ›¹å·£æ§æ§½æ¼•ç‡¥äº‰ç—©ç›¸çª“ç³Ÿç·ç¶œè¡è‰è˜è‘¬è’¼è—»è£…èµ°é€é­éŽ—éœœé¨’åƒå¢—æ†Žè‡“è”µè´ˆé€ ä¿ƒå´å‰‡å³æ¯æ‰æŸæ¸¬è¶³é€Ÿä¿—å±žè³Šæ—ç¶šå’è¢–å…¶æƒå­˜å­«å°Šææ‘éœä»–å¤šå¤ªæ±°è©‘å”¾å •å¦¥æƒ°æ‰“æŸèˆµæ¥•é™€é§„é¨¨ä½“å †å¯¾è€å²±å¸¯å¾…æ€ æ…‹æˆ´æ›¿æ³°æ»žèƒŽè…¿è‹”è¢‹è²¸é€€é€®éšŠé»›é¯›ä»£å°å¤§ç¬¬é†é¡Œé·¹æ»ç€§å“å•„å®…æ‰˜æŠžæ‹“æ²¢æ¿¯ç¢è¨—é¸æ¿è«¾èŒ¸å‡§è›¸åª"],[37440,"å©ä½†é”è¾°å¥ªè„±å·½ç«ªè¾¿æ£šè°·ç‹¸é±ˆæ¨½èª°ä¸¹å˜å˜†å¦æ‹…æŽ¢æ—¦æ­Žæ·¡æ¹›ç‚­çŸ­ç«¯ç®ªç¶»è€½èƒ†è›‹èª•é›å›£å£‡å¼¾æ–­æš–æª€æ®µç”·è«‡å€¤çŸ¥åœ°å¼›æ¥æ™ºæ± ç—´ç¨šç½®è‡´èœ˜é…é¦³ç¯‰ç•œç«¹ç­‘è“„"],[37504,"é€ç§©çª’èŒ¶å«¡ç€ä¸­ä»²å®™å¿ æŠ½æ˜¼æŸ±æ³¨è™«è¡·è¨»é…Žé‹³é§æ¨—ç€¦çŒªè‹§è‘—è²¯ä¸å…†å‡‹å–‹å¯µå¸–å¸³åºå¼”å¼µå½«å¾´æ‡²æŒ‘æš¢æœæ½®ç‰’ç”ºçœºè´è„¹è…¸è¶èª¿è«œè¶…è·³éŠšé•·é ‚é³¥å‹…æ—ç›´æœ•æ²ˆçè³ƒéŽ®é™³æ´¥å¢œæ¤Žæ§Œè¿½éŽšç—›é€šå¡šæ ‚æŽ´æ§»ä½ƒæ¼¬æŸ˜è¾»è”¦ç¶´é”æ¤¿æ½°åªå£·å¬¬ç´¬çˆªåŠé‡£é¶´äº­ä½Žåœåµå‰ƒè²žå‘ˆå ¤å®šå¸åº•åº­å»·å¼Ÿæ‚ŒæŠµæŒºææ¢¯æ±€ç¢‡ç¦Žç¨‹ç· è‰‡è¨‚è«¦è¹„é€“"],[37696,"é‚¸é„­é‡˜é¼Žæ³¥æ‘˜æ“¢æ•µæ»´çš„ç¬›é©é‘æººå“²å¾¹æ’¤è½è¿­é‰„å…¸å¡«å¤©å±•åº—æ·»çºç”œè²¼è»¢é¡›ç‚¹ä¼æ®¿æ¾±ç”°é›»å…Žåå µå¡—å¦¬å± å¾’æ–—æœæ¸¡ç™»èŸè³­é€”éƒ½éç ¥ç ºåŠªåº¦åœŸå¥´æ€’å€’å…šå†¬"],[37760,"å‡åˆ€å”å¡”å¡˜å¥—å®•å³¶å¶‹æ‚¼æŠ•æ­æ±æ¡ƒæ¢¼æ£Ÿç›—æ·˜æ¹¯æ¶›ç¯ç‡ˆå½“ç—˜ç¥·ç­‰ç­”ç­’ç³–çµ±åˆ°è‘£è•©è—¤è¨Žè¬„è±†è¸é€ƒé€é™é™¶é ­é¨°é—˜åƒå‹•åŒå ‚å°Žæ†§æ’žæ´žçž³ç«¥èƒ´è„é“éŠ…å³ é´‡åŒ¿å¾—å¾³æ¶œç‰¹ç£ç¦¿ç¯¤æ¯’ç‹¬èª­æ ƒæ©¡å‡¸çªæ¤´å±Šé³¶è‹«å¯…é…‰ç€žå™¸å±¯æƒ‡æ•¦æ²Œè±šéé “å‘‘æ›‡éˆå¥ˆé‚£å†…ä¹å‡ªè–™è¬Žç˜æºé‹æ¥¢é¦´ç¸„ç•·å—æ¥ è»Ÿé›£æ±äºŒå°¼å¼è¿©åŒ‚è³‘è‚‰è™¹å»¿æ—¥ä¹³å…¥"],[37952,"å¦‚å°¿éŸ®ä»»å¦Šå¿èªæ¿¡ç¦°ç¥¢å¯§è‘±çŒ«ç†±å¹´å¿µæ»æ’šç‡ƒç²˜ä¹ƒå»¼ä¹‹åŸœåš¢æ‚©æ¿ƒç´èƒ½è„³è†¿è¾²è¦—èš¤å·´æŠŠæ’­è¦‡æ·æ³¢æ´¾ç¶ç ´å©†ç½µèŠ­é¦¬ä¿³å»ƒæ‹æŽ’æ•—æ¯ç›ƒç‰ŒèƒŒè‚ºè¼©é…å€åŸ¹åª’æ¢…"],[38016,"æ¥³ç…¤ç‹½è²·å£²è³ é™ªé€™è¿ç§¤çŸ§è©ä¼¯å‰¥åšæ‹æŸæ³Šç™½ç®”ç²•èˆ¶è–„è¿«æ›æ¼ çˆ†ç¸›èŽ«é§éº¦å‡½ç®±ç¡²ç®¸è‚‡ç­ˆæ«¨å¹¡è‚Œç•‘ç• å…«é‰¢æºŒç™ºé†—é«ªä¼ç½°æŠœç­é–¥é³©å™ºå¡™è›¤éš¼ä¼´åˆ¤åŠåå›å¸†æ¬æ–‘æ¿æ°¾æ±Žç‰ˆçŠ¯ç­ç•”ç¹èˆ¬è—©è²©ç¯„é‡†ç…©é ’é£¯æŒ½æ™©ç•ªç›¤ç£è•ƒè›®åŒªå‘å¦å¦ƒåº‡å½¼æ‚²æ‰‰æ‰¹æŠ«æ–æ¯”æ³Œç–²çš®ç¢‘ç§˜ç·‹ç½·è‚¥è¢«èª¹è²»é¿éžé£›æ¨‹ç°¸å‚™å°¾å¾®æž‡æ¯˜çµçœ‰ç¾Ž"],[38208,"é¼»æŸŠç¨—åŒ¹ç–‹é«­å½¦è†è±è‚˜å¼¼å¿…ç•¢ç­†é€¼æ¡§å§«åª›ç´ç™¾è¬¬ä¿µå½ªæ¨™æ°·æ¼‚ç“¢ç¥¨è¡¨è©•è±¹å»Ÿæç—…ç§’è‹—éŒ¨é‹²è’œè›­é°­å“å½¬æ–Œæµœç€•è²§è³“é »æ•ç“¶ä¸ä»˜åŸ å¤«å©¦å¯Œå†¨å¸ƒåºœæ€–æ‰¶æ•·"],[38272,"æ–§æ™®æµ®çˆ¶ç¬¦è…è†šèŠ™è­œè² è³¦èµ´é˜œé™„ä¾®æ’«æ­¦èˆžè‘¡è•ªéƒ¨å°æ¥“é¢¨è‘ºè•—ä¼å‰¯å¾©å¹…æœç¦è…¹è¤‡è¦†æ·µå¼—æ‰•æ²¸ä»ç‰©é®’åˆ†å»å™´å¢³æ†¤æ‰®ç„šå¥®ç²‰ç³žç´›é›°æ–‡èžä¸™ä½µå…µå¡€å¹£å¹³å¼ŠæŸ„ä¸¦è”½é–‰é™›ç±³é åƒ»å£ç™–ç¢§åˆ¥çž¥è”‘ç®†åå¤‰ç‰‡ç¯‡ç·¨è¾ºè¿”éä¾¿å‹‰å¨©å¼éž­ä¿èˆ—é‹ªåœƒæ•æ­©ç”«è£œè¼”ç©‚å‹Ÿå¢“æ…•æˆŠæš®æ¯ç°¿è©å€£ä¿¸åŒ…å‘†å ±å¥‰å®å³°å³¯å´©åº–æŠ±æ§æ”¾æ–¹æœ‹"],[38464,"æ³•æ³¡çƒ¹ç ²ç¸«èƒžèŠ³èŒè“¬èœ‚è¤’è¨ªè±Šé‚¦é‹’é£½é³³éµ¬ä¹äº¡å‚å‰–åŠå¦¨å¸½å¿˜å¿™æˆ¿æš´æœ›æŸæ£’å†’ç´¡è‚ªè†¨è¬€è²Œè²¿é‰¾é˜²å é ¬åŒ—åƒ•åœå¢¨æ’²æœ´ç‰§ç¦ç©†é‡¦å‹ƒæ²¡æ®†å €å¹Œå¥”æœ¬ç¿»å‡¡ç›†"],[38528,"æ‘©ç£¨é­”éº»åŸ‹å¦¹æ˜§æžšæ¯Žå“©æ§™å¹•è†œæž•é®ªæŸ¾é±’æ¡äº¦ä¿£åˆæŠ¹æœ«æ²«è¿„ä¾­ç¹­éº¿ä¸‡æ…¢æº€æ¼«è”“å‘³æœªé­…å·³ç®•å²¬å¯†èœœæ¹Šè“‘ç¨”è„ˆå¦™ç²æ°‘çœ å‹™å¤¢ç„¡ç‰ŸçŸ›éœ§éµ¡æ¤‹å©¿å¨˜å†¥åå‘½æ˜Žç›Ÿè¿·éŠ˜é³´å§ªç‰æ»…å…æ£‰ç¶¿ç·¬é¢éººæ‘¸æ¨¡èŒ‚å¦„å­Ÿæ¯›çŒ›ç›²ç¶²è€—è’™å„²æœ¨é»™ç›®æ¢å‹¿é¤…å°¤æˆ»ç±¾è²°å•æ‚¶ç´‹é–€åŒä¹Ÿå†¶å¤œçˆºè€¶é‡Žå¼¥çŸ¢åŽ„å½¹ç´„è–¬è¨³èºé–æŸ³è–®é‘“æ„‰æ„ˆæ²¹ç™’"],[38720,"è«­è¼¸å”¯ä½‘å„ªå‹‡å‹å®¥å¹½æ‚ æ†‚æ–æœ‰æŸšæ¹§æ¶ŒçŒ¶çŒ·ç”±ç¥è£•èª˜éŠé‚‘éƒµé›„èžå¤•äºˆä½™ä¸Žèª‰è¼¿é å‚­å¹¼å¦–å®¹åº¸æšæºæ“æ›œæ¥Šæ§˜æ´‹æº¶ç†”ç”¨çª¯ç¾Šè€€è‘‰è“‰è¦è¬¡è¸Šé¥é™½é¤Šæ…¾æŠ‘æ¬²"],[38784,"æ²ƒæµ´ç¿Œç¿¼æ·€ç¾…èžºè£¸æ¥èŽ±é ¼é›·æ´›çµ¡è½é…ªä¹±åµåµæ¬„æ¿«è—è˜­è¦§åˆ©åå±¥æŽæ¢¨ç†ç’ƒç—¢è£è£¡é‡Œé›¢é™¸å¾‹çŽ‡ç«‹è‘ŽæŽ ç•¥åŠ‰æµæºœç‰ç•™ç¡«ç²’éš†ç«œé¾ä¾¶æ…®æ—…è™œäº†äº®åƒšä¸¡å‡Œå¯®æ–™æ¢æ¶¼çŒŸç™‚çž­ç¨œç³§è‰¯è«’é¼é‡é™µé ˜åŠ›ç·‘å€«åŽ˜æž—æ·‹ç‡ç³è‡¨è¼ªéš£é±—éºŸç‘ å¡æ¶™ç´¯é¡žä»¤ä¼¶ä¾‹å†·åŠ±å¶ºæ€œçŽ²ç¤¼è‹“éˆ´éš·é›¶éœŠéº—é½¢æš¦æ­´åˆ—åŠ£çƒˆè£‚å»‰æ‹æ†æ¼£ç…‰ç°¾ç·´è¯"],[38976,"è“®é€£éŒ¬å‘‚é­¯æ«“ç‚‰è³‚è·¯éœ²åŠ´å©å»Šå¼„æœ—æ¥¼æ¦”æµªæ¼ç‰¢ç‹¼ç¯­è€è¾è‹éƒŽå…­éº“ç¦„è‚‹éŒ²è«–å€­å’Œè©±æ­ªè³„è„‡æƒ‘æž é·²äº™äº˜é°è©«è—è•¨æ¤€æ¹¾ç¢—è…•"],[39071,"å¼Œä¸ä¸•ä¸ªä¸±ä¸¶ä¸¼ä¸¿ä¹‚ä¹–ä¹˜äº‚äº…è±«äºŠèˆ’å¼äºŽäºžäºŸäº äº¢äº°äº³äº¶ä»Žä»ä»„ä»†ä»‚ä»—ä»žä»­ä»Ÿä»·ä¼‰ä½šä¼°ä½›ä½ä½—ä½‡ä½¶ä¾ˆä¾ä¾˜ä½»ä½©ä½°ä¾‘ä½¯ä¾†ä¾–å„˜ä¿”ä¿Ÿä¿Žä¿˜ä¿›ä¿‘ä¿šä¿ä¿¤ä¿¥å€šå€¨å€”å€ªå€¥å€…ä¼œä¿¶å€¡å€©å€¬ä¿¾ä¿¯å€‘å€†åƒå‡æœƒå•ååˆåšå–å¬å¸å‚€å‚šå‚…å‚´å‚²"],[39232,"åƒ‰åƒŠå‚³åƒ‚åƒ–åƒžåƒ¥åƒ­åƒ£åƒ®åƒ¹åƒµå„‰å„å„‚å„–å„•å„”å„šå„¡å„ºå„·å„¼å„»å„¿å…€å…’å…Œå…”å…¢ç«¸å…©å…ªå…®å†€å†‚å›˜å†Œå†‰å†å†‘å†“å†•å†–å†¤å†¦å†¢å†©å†ªå†«å†³å†±å†²å†°å†µå†½å‡…å‡‰å‡›å‡ è™•å‡©å‡­"],[39296,"å‡°å‡µå‡¾åˆ„åˆ‹åˆ”åˆŽåˆ§åˆªåˆ®åˆ³åˆ¹å‰å‰„å‰‹å‰Œå‰žå‰”å‰ªå‰´å‰©å‰³å‰¿å‰½åŠåŠ”åŠ’å‰±åŠˆåŠ‘è¾¨è¾§åŠ¬åŠ­åŠ¼åŠµå‹å‹å‹—å‹žå‹£å‹¦é£­å‹ å‹³å‹µå‹¸å‹¹åŒ†åŒˆç”¸åŒåŒåŒåŒ•åŒšåŒ£åŒ¯åŒ±åŒ³åŒ¸å€å†å…ä¸—å‰åå‡–åžå©å®å¤˜å»å·åŽ‚åŽ–åŽ åŽ¦åŽ¥åŽ®åŽ°åŽ¶åƒç°’é›™åŸæ›¼ç‡®å®å¨å­åºåå½å‘€å¬å­å¼å®å¶å©åå‘Žå’å‘µå’Žå‘Ÿå‘±å‘·å‘°å’’å‘»å’€å‘¶å’„å’å’†å“‡å’¢å’¸å’¥å’¬å“„å“ˆå’¨"],[39488,"å’«å“‚å’¤å’¾å’¼å“˜å“¥å“¦å”å””å“½å“®å“­å“ºå“¢å”¹å•€å•£å•Œå”®å•œå•…å•–å•—å”¸å”³å•å–™å–€å’¯å–Šå–Ÿå•»å•¾å–˜å–žå–®å•¼å–ƒå–©å–‡å–¨å—šå—…å—Ÿå—„å—œå—¤å—”å˜”å—·å˜–å—¾å—½å˜›å—¹å™Žå™ç‡Ÿå˜´å˜¶å˜²å˜¸"],[39552,"å™«å™¤å˜¯å™¬å™ªåš†åš€åšŠåš åš”åšåš¥åš®åš¶åš´å›‚åš¼å›å›ƒå›€å›ˆå›Žå›‘å›“å›—å›®å›¹åœ€å›¿åœ„åœ‰åœˆåœ‹åœåœ“åœ˜åœ–å—‡åœœåœ¦åœ·åœ¸åŽåœ»å€åå©åŸ€åžˆå¡å¿åž‰åž“åž åž³åž¤åžªåž°åŸƒåŸ†åŸ”åŸ’åŸ“å ŠåŸ–åŸ£å ‹å ™å å¡²å ¡å¡¢å¡‹å¡°æ¯€å¡’å ½å¡¹å¢…å¢¹å¢Ÿå¢«å¢ºå£žå¢»å¢¸å¢®å£…å£“å£‘å£—å£™å£˜å£¥å£œå£¤å£Ÿå£¯å£ºå£¹å£»å£¼å£½å¤‚å¤Šå¤å¤›æ¢¦å¤¥å¤¬å¤­å¤²å¤¸å¤¾ç«’å¥•å¥å¥Žå¥šå¥˜å¥¢å¥ å¥§å¥¬å¥©"],[39744,"å¥¸å¦å¦ä½žä¾«å¦£å¦²å§†å§¨å§œå¦å§™å§šå¨¥å¨Ÿå¨‘å¨œå¨‰å¨šå©€å©¬å©‰å¨µå¨¶å©¢å©ªåªšåª¼åª¾å«‹å«‚åª½å«£å«—å«¦å«©å«–å«ºå«»å¬Œå¬‹å¬–å¬²å«å¬ªå¬¶å¬¾å­ƒå­…å­€å­‘å­•å­šå­›å­¥å­©å­°å­³å­µå­¸æ–ˆå­ºå®€"],[39808,"å®ƒå®¦å®¸å¯ƒå¯‡å¯‰å¯”å¯å¯¤å¯¦å¯¢å¯žå¯¥å¯«å¯°å¯¶å¯³å°…å°‡å°ˆå°å°“å° å°¢å°¨å°¸å°¹å±å±†å±Žå±“å±å±å­±å±¬å±®ä¹¢å±¶å±¹å²Œå²‘å²”å¦›å²«å²»å²¶å²¼å²·å³…å²¾å³‡å³™å³©å³½å³ºå³­å¶Œå³ªå´‹å´•å´—åµœå´Ÿå´›å´‘å´”å´¢å´šå´™å´˜åµŒåµ’åµŽåµ‹åµ¬åµ³åµ¶å¶‡å¶„å¶‚å¶¢å¶å¶¬å¶®å¶½å¶å¶·å¶¼å·‰å·å·“å·’å·–å·›å·«å·²å·µå¸‹å¸šå¸™å¸‘å¸›å¸¶å¸·å¹„å¹ƒå¹€å¹Žå¹—å¹”å¹Ÿå¹¢å¹¤å¹‡å¹µå¹¶å¹ºéº¼å¹¿åº å»å»‚å»ˆå»å»"],[4e4,"å»–å»£å»å»šå»›å»¢å»¡å»¨å»©å»¬å»±å»³å»°å»´å»¸å»¾å¼ƒå¼‰å½å½œå¼‹å¼‘å¼–å¼©å¼­å¼¸å½å½ˆå½Œå½Žå¼¯å½‘å½–å½—å½™å½¡å½­å½³å½·å¾ƒå¾‚å½¿å¾Šå¾ˆå¾‘å¾‡å¾žå¾™å¾˜å¾ å¾¨å¾­å¾¼å¿–å¿»å¿¤å¿¸å¿±å¿æ‚³å¿¿æ€¡æ "],[40064,"æ€™æ€æ€©æ€Žæ€±æ€›æ€•æ€«æ€¦æ€æ€ºæšææªæ·æŸæŠæ†ææ£æƒæ¤æ‚æ¬æ«æ™æ‚æ‚æƒ§æ‚ƒæ‚šæ‚„æ‚›æ‚–æ‚—æ‚’æ‚§æ‚‹æƒ¡æ‚¸æƒ æƒ“æ‚´å¿°æ‚½æƒ†æ‚µæƒ˜æ…æ„•æ„†æƒ¶æƒ·æ„€æƒ´æƒºæ„ƒæ„¡æƒ»æƒ±æ„æ„Žæ…‡æ„¾æ„¨æ„§æ…Šæ„¿æ„¼æ„¬æ„´æ„½æ…‚æ…„æ…³æ…·æ…˜æ…™æ…šæ…«æ…´æ…¯æ…¥æ…±æ…Ÿæ…æ…“æ…µæ†™æ†–æ†‡æ†¬æ†”æ†šæ†Šæ†‘æ†«æ†®æ‡Œæ‡Šæ‡‰æ‡·æ‡ˆæ‡ƒæ‡†æ†ºæ‡‹ç½¹æ‡æ‡¦æ‡£æ‡¶æ‡ºæ‡´æ‡¿æ‡½æ‡¼æ‡¾æˆ€æˆˆæˆ‰æˆæˆŒæˆ”æˆ›"],[40256,"æˆžæˆ¡æˆªæˆ®æˆ°æˆ²æˆ³æ‰æ‰Žæ‰žæ‰£æ‰›æ‰ æ‰¨æ‰¼æŠ‚æŠ‰æ‰¾æŠ’æŠ“æŠ–æ‹”æŠƒæŠ”æ‹—æ‹‘æŠ»æ‹æ‹¿æ‹†æ“”æ‹ˆæ‹œæ‹Œæ‹Šæ‹‚æ‹‡æŠ›æ‹‰æŒŒæ‹®æ‹±æŒ§æŒ‚æŒˆæ‹¯æ‹µææŒ¾ææœææŽ–æŽŽæŽ€æŽ«æ¶æŽ£æŽæŽ‰æŽŸæŽµæ«"],[40320,"æ©æŽ¾æ©æ€æ†æ£æ‰æ’æ¶æ„æ–æ´æ†æ“æ¦æ¶æ”æ—æ¨ææ‘§æ‘¯æ‘¶æ‘Žæ”ªæ’•æ’“æ’¥æ’©æ’ˆæ’¼æ“šæ“’æ“…æ“‡æ’»æ“˜æ“‚æ“±æ“§èˆ‰æ“ æ“¡æŠ¬æ“£æ“¯æ”¬æ“¶æ“´æ“²æ“ºæ”€æ“½æ”˜æ”œæ”…æ”¤æ”£æ”«æ”´æ”µæ”·æ”¶æ”¸ç•‹æ•ˆæ•–æ••æ•æ•˜æ•žæ•æ•²æ•¸æ–‚æ–ƒè®Šæ–›æ–Ÿæ–«æ–·æ—ƒæ—†æ—æ—„æ—Œæ—’æ—›æ—™æ— æ—¡æ—±æ²æ˜Šæ˜ƒæ—»æ³æ˜µæ˜¶æ˜´æ˜œæ™æ™„æ™‰æ™æ™žæ™æ™¤æ™§æ™¨æ™Ÿæ™¢æ™°æšƒæšˆæšŽæš‰æš„æš˜æšæ›æš¹æ›‰æš¾æš¼"],[40512,"æ›„æš¸æ›–æ›šæ› æ˜¿æ›¦æ›©æ›°æ›µæ›·æœæœ–æœžæœ¦æœ§éœ¸æœ®æœ¿æœ¶ææœ¸æœ·æ†æžæ æ™æ£æ¤æž‰æ°æž©æ¼æªæžŒæž‹æž¦æž¡æž…æž·æŸ¯æž´æŸ¬æž³æŸ©æž¸æŸ¤æŸžæŸæŸ¢æŸ®æž¹æŸŽæŸ†æŸ§æªœæ žæ¡†æ ©æ¡€æ¡æ ²æ¡Ž"],[40576,"æ¢³æ «æ¡™æ¡£æ¡·æ¡¿æ¢Ÿæ¢æ¢­æ¢”æ¢æ¢›æ¢ƒæª®æ¢¹æ¡´æ¢µæ¢ æ¢ºæ¤æ¢æ¡¾æ¤æ£Šæ¤ˆæ£˜æ¤¢æ¤¦æ£¡æ¤Œæ£æ£”æ£§æ£•æ¤¶æ¤’æ¤„æ£—æ££æ¤¥æ£¹æ£ æ£¯æ¤¨æ¤ªæ¤šæ¤£æ¤¡æ£†æ¥¹æ¥·æ¥œæ¥¸æ¥«æ¥”æ¥¾æ¥®æ¤¹æ¥´æ¤½æ¥™æ¤°æ¥¡æ¥žæ¥æ¦æ¥ªæ¦²æ¦®æ§æ¦¿æ§æ§“æ¦¾æ§Žå¯¨æ§Šæ§æ¦»æ§ƒæ¦§æ¨®æ¦‘æ¦ æ¦œæ¦•æ¦´æ§žæ§¨æ¨‚æ¨›æ§¿æ¬Šæ§¹æ§²æ§§æ¨…æ¦±æ¨žæ§­æ¨”æ§«æ¨Šæ¨’æ«æ¨£æ¨“æ©„æ¨Œæ©²æ¨¶æ©¸æ©‡æ©¢æ©™æ©¦æ©ˆæ¨¸æ¨¢æªæªæª æª„æª¢æª£"],[40768,"æª—è˜—æª»æ«ƒæ«‚æª¸æª³æª¬æ«žæ«‘æ«Ÿæªªæ«šæ«ªæ«»æ¬…è˜–æ«ºæ¬’æ¬–é¬±æ¬Ÿæ¬¸æ¬·ç›œæ¬¹é£®æ­‡æ­ƒæ­‰æ­æ­™æ­”æ­›æ­Ÿæ­¡æ­¸æ­¹æ­¿æ®€æ®„æ®ƒæ®æ®˜æ®•æ®žæ®¤æ®ªæ®«æ®¯æ®²æ®±æ®³æ®·æ®¼æ¯†æ¯‹æ¯“æ¯Ÿæ¯¬æ¯«æ¯³æ¯¯"],[40832,"éº¾æ°ˆæ°“æ°”æ°›æ°¤æ°£æ±žæ±•æ±¢æ±ªæ²‚æ²æ²šæ²æ²›æ±¾æ±¨æ±³æ²’æ²æ³„æ³±æ³“æ²½æ³—æ³…æ³æ²®æ²±æ²¾æ²ºæ³›æ³¯æ³™æ³ªæ´Ÿè¡æ´¶æ´«æ´½æ´¸æ´™æ´µæ´³æ´’æ´Œæµ£æ¶“æµ¤æµšæµ¹æµ™æ¶Žæ¶•æ¿¤æ¶…æ·¹æ¸•æ¸Šæ¶µæ·‡æ·¦æ¶¸æ·†æ·¬æ·žæ·Œæ·¨æ·’æ·…æ·ºæ·™æ·¤æ·•æ·ªæ·®æ¸­æ¹®æ¸®æ¸™æ¹²æ¹Ÿæ¸¾æ¸£æ¹«æ¸«æ¹¶æ¹æ¸Ÿæ¹ƒæ¸ºæ¹Žæ¸¤æ»¿æ¸æ¸¸æº‚æºªæº˜æ»‰æº·æ»“æº½æº¯æ»„æº²æ»”æ»•æºæº¥æ»‚æºŸæ½æ¼‘çŒæ»¬æ»¸æ»¾æ¼¿æ»²æ¼±æ»¯æ¼²æ»Œ"],[57408,"æ¼¾æ¼“æ»·æ¾†æ½ºæ½¸æ¾æ¾€æ½¯æ½›æ¿³æ½­æ¾‚æ½¼æ½˜æ¾Žæ¾‘æ¿‚æ½¦æ¾³æ¾£æ¾¡æ¾¤æ¾¹æ¿†æ¾ªæ¿Ÿæ¿•æ¿¬æ¿”æ¿˜æ¿±æ¿®æ¿›ç€‰ç€‹æ¿ºç€‘ç€ç€æ¿¾ç€›ç€šæ½´ç€ç€˜ç€Ÿç€°ç€¾ç€²ç‘ç£ç‚™ç‚’ç‚¯çƒ±ç‚¬ç‚¸ç‚³ç‚®çƒŸçƒ‹çƒ"],[57472,"çƒ™ç„‰çƒ½ç„œç„™ç…¥ç…•ç†ˆç…¦ç…¢ç…Œç…–ç…¬ç†ç‡»ç†„ç†•ç†¨ç†¬ç‡—ç†¹ç†¾ç‡’ç‡‰ç‡”ç‡Žç‡ ç‡¬ç‡§ç‡µç‡¼ç‡¹ç‡¿çˆçˆçˆ›çˆ¨çˆ­çˆ¬çˆ°çˆ²çˆ»çˆ¼çˆ¿ç‰€ç‰†ç‰‹ç‰˜ç‰´ç‰¾çŠ‚çŠçŠ‡çŠ’çŠ–çŠ¢çŠ§çŠ¹çŠ²ç‹ƒç‹†ç‹„ç‹Žç‹’ç‹¢ç‹ ç‹¡ç‹¹ç‹·å€çŒ—çŒŠçŒœçŒ–çŒçŒ´çŒ¯çŒ©çŒ¥çŒ¾çŽçé»˜ç—çªç¨ç°ç¸çµç»çºçˆçŽ³çŽçŽ»ç€ç¥ç®çžç’¢ç…ç‘¯ç¥ç¸ç²çºç‘•ç¿ç‘Ÿç‘™ç‘ç‘œç‘©ç‘°ç‘£ç‘ªç‘¶ç‘¾ç’‹ç’žç’§ç“Šç“ç“”ç±"],[57664,"ç“ ç“£ç“§ç“©ç“®ç“²ç“°ç“±ç“¸ç“·ç”„ç”ƒç”…ç”Œç”Žç”ç”•ç”“ç”žç”¦ç”¬ç”¼ç•„ç•ç•Šç•‰ç•›ç•†ç•šç•©ç•¤ç•§ç•«ç•­ç•¸ç•¶ç–†ç–‡ç•´ç–Šç–‰ç–‚ç–”ç–šç–ç–¥ç–£ç—‚ç–³ç—ƒç–µç–½ç–¸ç–¼ç–±ç—ç—Šç—’ç—™ç—£ç—žç—¾ç—¿"],[57728,"ç—¼ç˜ç—°ç—ºç—²ç—³ç˜‹ç˜ç˜‰ç˜Ÿç˜§ç˜ ç˜¡ç˜¢ç˜¤ç˜´ç˜°ç˜»ç™‡ç™ˆç™†ç™œç™˜ç™¡ç™¢ç™¨ç™©ç™ªç™§ç™¬ç™°ç™²ç™¶ç™¸ç™¼çš€çšƒçšˆçš‹çšŽçš–çš“çš™çššçš°çš´çš¸çš¹çšºç›‚ç›ç›–ç›’ç›žç›¡ç›¥ç›§ç›ªè˜¯ç›»çœˆçœ‡çœ„çœ©çœ¤çœžçœ¥çœ¦çœ›çœ·çœ¸ç‡çšç¨ç«ç›ç¥ç¿ç¾ç¹çžŽçž‹çž‘çž çžžçž°çž¶çž¹çž¿çž¼çž½çž»çŸ‡çŸçŸ—çŸšçŸœçŸ£çŸ®çŸ¼ç Œç ’ç¤¦ç  ç¤ªç¡…ç¢Žç¡´ç¢†ç¡¼ç¢šç¢Œç¢£ç¢µç¢ªç¢¯ç£‘ç£†ç£‹ç£”ç¢¾ç¢¼ç£…ç£Šç£¬"],[57920,"ç£§ç£šç£½ç£´ç¤‡ç¤’ç¤‘ç¤™ç¤¬ç¤«ç¥€ç¥ ç¥—ç¥Ÿç¥šç¥•ç¥“ç¥ºç¥¿ç¦Šç¦ç¦§é½‹ç¦ªç¦®ç¦³ç¦¹ç¦ºç§‰ç§•ç§§ç§¬ç§¡ç§£ç¨ˆç¨ç¨˜ç¨™ç¨ ç¨Ÿç¦€ç¨±ç¨»ç¨¾ç¨·ç©ƒç©—ç©‰ç©¡ç©¢ç©©é¾ç©°ç©¹ç©½çªˆçª—çª•çª˜çª–çª©ç«ˆçª°"],[57984,"çª¶ç«…ç«„çª¿é‚ƒç«‡ç«Šç«ç«ç«•ç«“ç«™ç«šç«ç«¡ç«¢ç«¦ç«­ç«°ç¬‚ç¬ç¬Šç¬†ç¬³ç¬˜ç¬™ç¬žç¬µç¬¨ç¬¶ç­ç­ºç¬„ç­ç¬‹ç­Œç­…ç­µç­¥ç­´ç­§ç­°ç­±ç­¬ç­®ç®ç®˜ç®Ÿç®ç®œç®šç®‹ç®’ç®ç­ç®™ç¯‹ç¯ç¯Œç¯ç®´ç¯†ç¯ç¯©ç°‘ç°”ç¯¦ç¯¥ç± ç°€ç°‡ç°“ç¯³ç¯·ç°—ç°ç¯¶ç°£ç°§ç°ªç°Ÿç°·ç°«ç°½ç±Œç±ƒç±”ç±ç±€ç±ç±˜ç±Ÿç±¤ç±–ç±¥ç±¬ç±µç²ƒç²ç²¤ç²­ç²¢ç²«ç²¡ç²¨ç²³ç²²ç²±ç²®ç²¹ç²½ç³€ç³…ç³‚ç³˜ç³’ç³œç³¢é¬»ç³¯ç³²ç³´ç³¶ç³ºç´†"],[58176,"ç´‚ç´œç´•ç´Šçµ…çµ‹ç´®ç´²ç´¿ç´µçµ†çµ³çµ–çµŽçµ²çµ¨çµ®çµçµ£ç¶“ç¶‰çµ›ç¶çµ½ç¶›ç¶ºç¶®ç¶£ç¶µç·‡ç¶½ç¶«ç¸½ç¶¢ç¶¯ç·œç¶¸ç¶Ÿç¶°ç·˜ç·ç·¤ç·žç·»ç·²ç·¡ç¸…ç¸Šç¸£ç¸¡ç¸’ç¸±ç¸Ÿç¸‰ç¸‹ç¸¢ç¹†ç¹¦ç¸»ç¸µç¸¹ç¹ƒç¸·"],[58240,"ç¸²ç¸ºç¹§ç¹ç¹–ç¹žç¹™ç¹šç¹¹ç¹ªç¹©ç¹¼ç¹»çºƒç·•ç¹½è¾®ç¹¿çºˆçº‰çºŒçº’çºçº“çº”çº–çºŽçº›çºœç¼¸ç¼ºç½…ç½Œç½ç½Žç½ç½‘ç½•ç½”ç½˜ç½Ÿç½ ç½¨ç½©ç½§ç½¸ç¾‚ç¾†ç¾ƒç¾ˆç¾‡ç¾Œç¾”ç¾žç¾ç¾šç¾£ç¾¯ç¾²ç¾¹ç¾®ç¾¶ç¾¸è­±ç¿…ç¿†ç¿Šç¿•ç¿”ç¿¡ç¿¦ç¿©ç¿³ç¿¹é£œè€†è€„è€‹è€’è€˜è€™è€œè€¡è€¨è€¿è€»èŠè†è’è˜èšèŸè¢è¨è³è²è°è¶è¹è½è¿è‚„è‚†è‚…è‚›è‚“è‚šè‚­å†è‚¬èƒ›èƒ¥èƒ™èƒèƒ„èƒšèƒ–è„‰èƒ¯èƒ±è„›è„©è„£è„¯è…‹"],[58432,"éš‹è…†è„¾è…“è…‘èƒ¼è…±è…®è…¥è…¦è…´è†ƒè†ˆè†Šè†€è†‚è† è†•è†¤è†£è…Ÿè†“è†©è†°è†µè†¾è†¸è†½è‡€è‡‚è†ºè‡‰è‡è‡‘è‡™è‡˜è‡ˆè‡šè‡Ÿè‡ è‡§è‡ºè‡»è‡¾èˆèˆ‚èˆ…èˆ‡èˆŠèˆèˆèˆ–èˆ©èˆ«èˆ¸èˆ³è‰€è‰™è‰˜è‰è‰šè‰Ÿè‰¤"],[58496,"è‰¢è‰¨è‰ªè‰«èˆ®è‰±è‰·è‰¸è‰¾èŠèŠ’èŠ«èŠŸèŠ»èŠ¬è‹¡è‹£è‹Ÿè‹’è‹´è‹³è‹ºèŽ“èŒƒè‹»è‹¹è‹žèŒ†è‹œèŒ‰è‹™èŒµèŒ´èŒ–èŒ²èŒ±è€èŒ¹èè…èŒ¯èŒ«èŒ—èŒ˜èŽ…èŽšèŽªèŽŸèŽ¢èŽ–èŒ£èŽŽèŽ‡èŽŠè¼èŽµè³èµèŽ èŽ‰èŽ¨è´è“è«èŽè½èƒè˜è‹èè·è‡è è²èè¢è èŽ½è¸è”†è»è‘­èªè¼è•šè’„è‘·è‘«è’­è‘®è’‚è‘©è‘†è¬è‘¯è‘¹èµè“Šè‘¢è’¹è’¿è’Ÿè“™è“è’»è“šè“è“è“†è“–è’¡è”¡è“¿è“´è”—è”˜è”¬è”Ÿè”•è””è“¼è•€è•£è•˜è•ˆ"],[58688,"è•è˜‚è•‹è••è–€è–¤è–ˆè–‘è–Šè–¨è•­è–”è–›è—ªè–‡è–œè•·è•¾è–è—‰è–ºè—è–¹è—è—•è—è—¥è—œè—¹è˜Šè˜“è˜‹è—¾è—ºè˜†è˜¢è˜šè˜°è˜¿è™ä¹•è™”è™Ÿè™§è™±èš“èš£èš©èšªèš‹èšŒèš¶èš¯è›„è›†èš°è›‰è £èš«è›”è›žè›©è›¬"],[58752,"è›Ÿè››è›¯èœ’èœ†èœˆèœ€èœƒè›»èœ‘èœ‰èœè›¹èœŠèœ´èœ¿èœ·èœ»èœ¥èœ©èœšè èŸè¸èŒèŽè´è—è¨è®è™è“è£èªè …èž¢èžŸèž‚èž¯èŸ‹èž½èŸ€èŸé›–èž«èŸ„èž³èŸ‡èŸ†èž»èŸ¯èŸ²èŸ è è èŸ¾èŸ¶èŸ·è ŽèŸ’è ‘è –è •è ¢è ¡è ±è ¶è ¹è §è »è¡„è¡‚è¡’è¡™è¡žè¡¢è¡«è¢è¡¾è¢žè¡µè¡½è¢µè¡²è¢‚è¢—è¢’è¢®è¢™è¢¢è¢è¢¤è¢°è¢¿è¢±è£ƒè£„è£”è£˜è£™è£è£¹è¤‚è£¼è£´è£¨è£²è¤„è¤Œè¤Šè¤“è¥ƒè¤žè¤¥è¤ªè¤«è¥è¥„è¤»è¤¶è¤¸è¥Œè¤è¥ è¥ž"],[58944,"è¥¦è¥¤è¥­è¥ªè¥¯è¥´è¥·è¥¾è¦ƒè¦ˆè¦Šè¦“è¦˜è¦¡è¦©è¦¦è¦¬è¦¯è¦²è¦ºè¦½è¦¿è§€è§šè§œè§è§§è§´è§¸è¨ƒè¨–è¨è¨Œè¨›è¨è¨¥è¨¶è©è©›è©’è©†è©ˆè©¼è©­è©¬è©¢èª…èª‚èª„èª¨èª¡èª‘èª¥èª¦èªšèª£è«„è«è«‚è«šè««è«³è«§"],[59008,"è«¤è«±è¬”è« è«¢è«·è«žè«›è¬Œè¬‡è¬šè«¡è¬–è¬è¬—è¬ è¬³éž«è¬¦è¬«è¬¾è¬¨è­è­Œè­è­Žè­‰è­–è­›è­šè­«è­Ÿè­¬è­¯è­´è­½è®€è®Œè®Žè®’è®“è®–è®™è®šè°ºè±è°¿è±ˆè±Œè±Žè±è±•è±¢è±¬è±¸è±ºè²‚è²‰è²…è²Šè²è²Žè²”è±¼è²˜æˆè²­è²ªè²½è²²è²³è²®è²¶è³ˆè³è³¤è³£è³šè³½è³ºè³»è´„è´…è´Šè´‡è´è´è´é½Žè´“è³è´”è´–èµ§èµ­èµ±èµ³è¶è¶™è·‚è¶¾è¶ºè·è·šè·–è·Œè·›è·‹è·ªè·«è·Ÿè·£è·¼è¸ˆè¸‰è·¿è¸è¸žè¸è¸Ÿè¹‚è¸µè¸°è¸´è¹Š"],[59200,"è¹‡è¹‰è¹Œè¹è¹ˆè¹™è¹¤è¹ è¸ªè¹£è¹•è¹¶è¹²è¹¼èºèº‡èº…èº„èº‹èºŠèº“èº‘èº”èº™èºªèº¡èº¬èº°è»†èº±èº¾è»…è»ˆè»‹è»›è»£è»¼è»»è»«è»¾è¼Šè¼…è¼•è¼’è¼™è¼“è¼œè¼Ÿè¼›è¼Œè¼¦è¼³è¼»è¼¹è½…è½‚è¼¾è½Œè½‰è½†è½Žè½—è½œ"],[59264,"è½¢è½£è½¤è¾œè¾Ÿè¾£è¾­è¾¯è¾·è¿šè¿¥è¿¢è¿ªè¿¯é‚‡è¿´é€…è¿¹è¿ºé€‘é€•é€¡é€é€žé€–é€‹é€§é€¶é€µé€¹è¿¸ééé‘é’é€Žé‰é€¾é–é˜éžé¨é¯é¶éš¨é²é‚‚é½é‚é‚€é‚Šé‚‰é‚é‚¨é‚¯é‚±é‚µéƒ¢éƒ¤æ‰ˆéƒ›é„‚é„’é„™é„²é„°é…Šé…–é…˜é…£é…¥é…©é…³é…²é†‹é†‰é†‚é†¢é†«é†¯é†ªé†µé†´é†ºé‡€é‡é‡‰é‡‹é‡é‡–é‡Ÿé‡¡é‡›é‡¼é‡µé‡¶éˆžé‡¿éˆ”éˆ¬éˆ•éˆ‘é‰žé‰—é‰…é‰‰é‰¤é‰ˆéŠ•éˆ¿é‰‹é‰éŠœéŠ–éŠ“éŠ›é‰šé‹éŠ¹éŠ·é‹©éŒé‹ºé„éŒ®"],[59456,"éŒ™éŒ¢éŒšéŒ£éŒºéŒµéŒ»éœé é¼é®é–éŽ°éŽ¬éŽ­éŽ”éŽ¹é–é—é¨é¥é˜éƒéééˆé¤éšé”é“éƒé‡éé¶é«éµé¡éºé‘é‘’é‘„é‘›é‘ é‘¢é‘žé‘ªéˆ©é‘°é‘µé‘·é‘½é‘šé‘¼é‘¾é’é‘¿é–‚é–‡é–Šé–”é––é–˜é–™"],[59520,"é– é–¨é–§é–­é–¼é–»é–¹é–¾é—Šæ¿¶é—ƒé—é—Œé—•é—”é—–é—œé—¡é—¥é—¢é˜¡é˜¨é˜®é˜¯é™‚é™Œé™é™‹é™·é™œé™žé™é™Ÿé™¦é™²é™¬éšéš˜éš•éš—éšªéš§éš±éš²éš°éš´éš¶éš¸éš¹é›Žé›‹é›‰é›è¥é›œéœé›•é›¹éœ„éœ†éœˆéœ“éœŽéœ‘éœéœ–éœ™éœ¤éœªéœ°éœ¹éœ½éœ¾é„é†éˆé‚é‰éœé é¤é¦é¨å‹’é«é±é¹éž…é¼éžéºéž†éž‹éžéžéžœéž¨éž¦éž£éž³éž´éŸƒéŸ†éŸˆéŸ‹éŸœéŸ­é½éŸ²ç«ŸéŸ¶éŸµé é Œé ¸é ¤é ¡é ·é ½é¡†é¡é¡‹é¡«é¡¯é¡°"],[59712,"é¡±é¡´é¡³é¢ªé¢¯é¢±é¢¶é£„é£ƒé£†é£©é£«é¤ƒé¤‰é¤’é¤”é¤˜é¤¡é¤é¤žé¤¤é¤ é¤¬é¤®é¤½é¤¾é¥‚é¥‰é¥…é¥é¥‹é¥‘é¥’é¥Œé¥•é¦—é¦˜é¦¥é¦­é¦®é¦¼é§Ÿé§›é§é§˜é§‘é§­é§®é§±é§²é§»é§¸é¨é¨é¨…é§¢é¨™é¨«é¨·é©…é©‚é©€é©ƒ"],[59776,"é¨¾é©•é©é©›é©—é©Ÿé©¢é©¥é©¤é©©é©«é©ªéª­éª°éª¼é«€é«é«‘é«“é«”é«žé«Ÿé«¢é«£é«¦é«¯é««é«®é«´é«±é«·é«»é¬†é¬˜é¬šé¬Ÿé¬¢é¬£é¬¥é¬§é¬¨é¬©é¬ªé¬®é¬¯é¬²é­„é­ƒé­é­é­Žé­‘é­˜é­´é®“é®ƒé®‘é®–é®—é®Ÿé® é®¨é®´é¯€é¯Šé®¹é¯†é¯é¯‘é¯’é¯£é¯¢é¯¤é¯”é¯¡é°ºé¯²é¯±é¯°é°•é°”é°‰é°“é°Œé°†é°ˆé°’é°Šé°„é°®é°›é°¥é°¤é°¡é°°é±‡é°²é±†é°¾é±šé± é±§é±¶é±¸é³§é³¬é³°é´‰é´ˆé³«é´ƒé´†é´ªé´¦é¶¯é´£é´Ÿéµ„é´•é´’éµé´¿é´¾éµ†éµˆ"],[59968,"éµéµžéµ¤éµ‘éµéµ™éµ²é¶‰é¶‡é¶«éµ¯éµºé¶šé¶¤é¶©é¶²é·„é·é¶»é¶¸é¶ºé·†é·é·‚é·™é·“é·¸é·¦é·­é·¯é·½é¸šé¸›é¸žé¹µé¹¹é¹½éºéºˆéº‹éºŒéº’éº•éº‘éºéº¥éº©éº¸éºªéº­é¡é»Œé»Žé»é»é»”é»œé»žé»é» é»¥é»¨é»¯"],[60032,"é»´é»¶é»·é»¹é»»é»¼é»½é¼‡é¼ˆçš·é¼•é¼¡é¼¬é¼¾é½Šé½’é½”é½£é½Ÿé½ é½¡é½¦é½§é½¬é½ªé½·é½²é½¶é¾•é¾œé¾ å ¯æ§‡é™ç‘¤å‡œç†™"]];n.exports=function(e){if(e&&""!==e)for(var n=0;n<o.length;n++){var r=o[n][1],t=r.indexOf(e);if(t>=0)return o[n][0]+t}}},{}]},{},[1])(1)});
//# sourceMappingURL=qrcode.tosjis.min.js.map
{"version":3,"sources":["build/qrcode.tosjis.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","QRCode","toSJIS","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","SJIS_UTF8","utf8Char","kanji","posIndex","indexOf"],"mappings":"CAAA,SAAUA,GAAG,GAAoB,gBAAVC,UAAoC,mBAATC,QAAsBA,OAAOD,QAAQD,QAAS,IAAmB,kBAATG,SAAqBA,OAAOC,IAAKD,UAAUH,OAAO,CAAC,GAAIK,EAAkCA,GAAb,mBAATC,QAAwBA,OAA+B,mBAATC,QAAwBA,OAA6B,mBAAPC,MAAsBA,KAAYC,MAAMJ,EAAEK,SAAWL,EAAEK,YAAcC,OAASX,MAAO,WAAqC,MAAO,YAAY,QAASY,GAAEC,EAAEC,EAAEC,GAAG,QAASC,GAAEC,EAAEjB,GAAG,IAAIc,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAAC,GAAIC,GAAE,kBAAmBC,UAASA,OAAQ,KAAInB,GAAGkB,EAAE,MAAOA,GAAED,GAAE,EAAI,IAAGG,EAAE,MAAOA,GAAEH,GAAE,EAAI,IAAII,GAAE,GAAIC,OAAM,uBAAuBL,EAAE,IAAK,MAAMI,GAAEE,KAAK,mBAAmBF,EAAE,GAAIG,GAAEV,EAAEG,IAAIhB,WAAYY,GAAEI,GAAG,GAAGQ,KAAKD,EAAEvB,QAAQ,SAASW,GAAoB,MAAOI,GAAlBH,EAAEI,GAAG,GAAGL,IAAeA,IAAIY,EAAEA,EAAEvB,QAAQW,EAAEC,EAAEC,EAAEC,GAAG,MAAOD,GAAEG,GAAGhB,QAAQ,IAAI,GAAImB,GAAE,kBAAmBD,UAASA,QAAQF,EAAE,EAAEA,EAAEF,EAAEW,OAAOT,IAAID,EAAED,EAAEE,GAAI,OAAOD,GAAE,MAAOJ,OAAOe,GAAG,SAASR,EAAQjB,EAAOD,GACl3B,GAAI2B,KACD,MAAQ,oEACR,MAAQ,UACR,MAAQ,iBACR,MAAQ,YACR,MAAQ,MACR,MAAQ,eACR,MAAQ,+BACR,MAAQ,+BACR,MAAQ,wFACR,MAAQ,oEACR,MAAQ,4BACR,MAAQ,6BACR,MAAQ,6BACR,MAAQ,sCACR,MAAQ,oBACR,MAAQ,uBACR,MAAQ,OACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,wDACR,MAAQ,mGACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,IAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,kIACR,MAAQ,oEACR,MAAQ,yCAGX1B,GAAOD,QAAU,SAAiB4B,GAChC,GAAKA,GAAyB,KAAbA,EAEjB,IAAK,GAAIZ,GAAI,EAAGA,EAAIW,EAAUF,OAAQT,IAAK,CACzC,GAAIa,GAAQF,EAAUX,GAAG,GAErBc,EAAWD,EAAME,QAAQH,EAC7B,IAAIE,GAAY,EACd,MAAOH,GAAUX,GAAG,GAAKc,cAKpB,IAAI"}var SJIS_UTF8 = [
  [0x8140, 'ã€€ã€ã€‚ï¼Œï¼Žãƒ»ï¼šï¼›ï¼Ÿï¼ã‚›ã‚œÂ´ï½€Â¨ï¼¾ï¿£ï¼¿ãƒ½ãƒ¾ã‚ã‚žã€ƒä»ã€…ã€†ã€‡ãƒ¼â€•â€ï¼ï¼¼ï½žâˆ¥ï½œâ€¦â€¥â€˜â€™â€œâ€ï¼ˆï¼‰ã€”ã€•ï¼»ï¼½ï½›ï½ã€ˆã€‰ã€Šã€‹ã€Œã€ã€Žã€ã€ã€‘ï¼‹ï¼Â±Ã—'],
  [0x8180, 'Ã·ï¼â‰ ï¼œï¼ž'],
  [0x818f, 'ï¿¥ï¼„ï¿ ï¿¡ï¼…ï¼ƒï¼†ï¼Šï¼ Â§â˜†â˜…'],
  [0x81a6, 'â€»ã€’â†’â†â†‘â†“ã€“'],
  [0x81ca, 'ï¿¢'],
  [0x824f, 'ï¼ï¼‘ï¼’ï¼“ï¼”ï¼•ï¼–ï¼—ï¼˜ï¼™'],
  [0x8260, 'ï¼¡ï¼¢ï¼£ï¼¤ï¼¥ï¼¦ï¼§ï¼¨ï¼©ï¼ªï¼«ï¼¬ï¼­ï¼®ï¼¯ï¼°ï¼±ï¼²ï¼³ï¼´ï¼µï¼¶ï¼·ï¼¸ï¼¹ï¼º'],
  [0x8281, 'ï½ï½‚ï½ƒï½„ï½…ï½†ï½‡ï½ˆï½‰ï½Šï½‹ï½Œï½ï½Žï½ï½ï½‘ï½’ï½“ï½”ï½•ï½–ï½—ï½˜ï½™ï½š'],
  [0x829f, 'ãã‚ãƒã„ã…ã†ã‡ãˆã‰ãŠã‹ãŒããŽããã‘ã’ã“ã”ã•ã–ã—ã˜ã™ãšã›ãœããžãŸã ã¡ã¢ã£ã¤ã¥ã¦ã§ã¨ã©ãªã«ã¬ã­ã®ã¯ã°ã±ã²ã³ã´ãµã¶ã·ã¸ã¹ãºã»ã¼ã½ã¾ã¿ã‚€ã‚ã‚‚ã‚ƒã‚„ã‚…ã‚†ã‚‡ã‚ˆã‚‰ã‚Šã‚‹ã‚Œã‚ã‚Žã‚ã‚ã‚‘ã‚’ã‚“'],
  [0x8340, 'ã‚¡ã‚¢ã‚£ã‚¤ã‚¥ã‚¦ã‚§ã‚¨ã‚©ã‚ªã‚«ã‚¬ã‚­ã‚®ã‚¯ã‚°ã‚±ã‚²ã‚³ã‚´ã‚µã‚¶ã‚·ã‚¸ã‚¹ã‚ºã‚»ã‚¼ã‚½ã‚¾ã‚¿ãƒ€ãƒãƒ‚ãƒƒãƒ„ãƒ…ãƒ†ãƒ‡ãƒˆãƒ‰ãƒŠãƒ‹ãƒŒãƒãƒŽãƒãƒãƒ‘ãƒ’ãƒ“ãƒ”ãƒ•ãƒ–ãƒ—ãƒ˜ãƒ™ãƒšãƒ›ãƒœãƒãƒžãƒŸ'],
  [0x8380, 'ãƒ ãƒ¡ãƒ¢ãƒ£ãƒ¤ãƒ¥ãƒ¦ãƒ§ãƒ¨ãƒ©ãƒªãƒ«ãƒ¬ãƒ­ãƒ®ãƒ¯ãƒ°ãƒ±ãƒ²ãƒ³ãƒ´ãƒµãƒ¶'],
  [0x839f, 'Î‘Î’Î“Î”Î•Î–Î—Î˜Î™ÎšÎ›ÎœÎÎžÎŸÎ Î¡Î£Î¤Î¥Î¦Î§Î¨Î©'],
  [0x83bf, 'Î±Î²Î³Î´ÎµÎ¶Î·Î¸Î¹ÎºÎ»Î¼Î½Î¾Î¿Ï€ÏÏƒÏ„Ï…Ï†Ï‡ÏˆÏ‰'],
  [0x8440, 'ÐÐ‘Ð’Ð“Ð”Ð•ÐÐ–Ð—Ð˜Ð™ÐšÐ›ÐœÐÐžÐŸÐ Ð¡Ð¢Ð£Ð¤Ð¥Ð¦Ð§Ð¨Ð©ÐªÐ«Ð¬Ð­Ð®Ð¯'],
  [0x8470, 'Ð°Ð±Ð²Ð³Ð´ÐµÑ‘Ð¶Ð·Ð¸Ð¹ÐºÐ»Ð¼Ð½'],
  [0x8480, 'Ð¾Ð¿Ñ€ÑÑ‚ÑƒÑ„Ñ…Ñ†Ñ‡ÑˆÑ‰ÑŠÑ‹ÑŒÑÑŽÑ'],
  [0x8780, 'ã€ã€Ÿ'],
  [0x8940, 'é™¢é™°éš éŸ»å‹å³å®‡çƒç¾½è¿‚é›¨å¯éµœçªºä¸‘ç¢“è‡¼æ¸¦å˜˜å”„æ¬è”šé°»å§¥åŽ©æµ¦ç“œé–å™‚äº‘é‹é›²èé¤Œå¡å–¶å¬°å½±æ˜ æ›³æ „æ°¸æ³³æ´©ç‘›ç›ˆç©Žé ´è‹±è¡›è© é‹­æ¶²ç–«ç›Šé§…æ‚¦è¬è¶Šé–²æ¦ŽåŽ­å††'],
  [0x8980, 'åœ’å °å¥„å®´å»¶æ€¨æŽ©æ´æ²¿æ¼”ç‚Žç„”ç…™ç‡•çŒ¿ç¸è‰¶è‹‘è–—é é‰›é´›å¡©æ–¼æ±šç”¥å‡¹å¤®å¥¥å¾€å¿œæŠ¼æ—ºæ¨ªæ¬§æ®´çŽ‹ç¿è¥–é´¬é´Žé»„å²¡æ²–è»å„„å±‹æ†¶è‡†æ¡¶ç‰¡ä¹™ä¿ºå¸æ©æ¸©ç©éŸ³ä¸‹åŒ–ä»®ä½•ä¼½ä¾¡ä½³åŠ å¯å˜‰å¤å«å®¶å¯¡ç§‘æš‡æžœæž¶æ­Œæ²³ç«ç‚ç¦ç¦¾ç¨¼ç®‡èŠ±è‹›èŒ„è·è¯è“è¦èª²å˜©è²¨è¿¦éŽéœžèšŠä¿„å³¨æˆ‘ç‰™ç”»è‡¥èŠ½è›¾è³€é›…é¤“é§•ä»‹ä¼šè§£å›žå¡Šå£Šå»»å¿«æ€ªæ‚”æ¢æ‡æˆ’æ‹æ”¹'],
  [0x8a40, 'é­æ™¦æ¢°æµ·ç°ç•Œçš†çµµèŠ¥èŸ¹é–‹éšŽè²å‡±åŠ¾å¤–å’³å®³å´–æ…¨æ¦‚æ¶¯ç¢è“‹è¡—è©²éŽ§éª¸æµ¬é¦¨è›™åž£æŸ¿è›ŽéˆŽåŠƒåš‡å„å»“æ‹¡æ’¹æ ¼æ ¸æ®»ç²ç¢ºç©«è¦šè§’èµ«è¼ƒéƒ­é–£éš”é©å­¦å²³æ¥½é¡é¡ŽæŽ›ç¬ æ¨«'],
  [0x8a80, 'æ©¿æ¢¶é°æ½Ÿå‰²å–æ°æ‹¬æ´»æ¸‡æ»‘è‘›è¤è½„ä¸”é°¹å¶æ¤›æ¨ºéž„æ ªå…œç«ƒè’²é‡œéŽŒå™›é´¨æ ¢èŒ…è±ç²¥åˆˆè‹…ç“¦ä¹¾ä¾ƒå† å¯’åˆŠå‹˜å‹§å·»å–šå ªå§¦å®Œå®˜å¯›å¹²å¹¹æ‚£æ„Ÿæ…£æ†¾æ›æ•¢æŸ‘æ¡“æ£ºæ¬¾æ­“æ±—æ¼¢æ¾—æ½…ç’°ç”˜ç›£çœ‹ç«¿ç®¡ç°¡ç·©ç¼¶ç¿°è‚è‰¦èŽžè¦³è«Œè²«é‚„é‘‘é–“é–‘é–¢é™¥éŸ“é¤¨èˆ˜ä¸¸å«å²¸å·ŒçŽ©ç™Œçœ¼å²©ç¿«è´‹é›é ‘é¡”é¡˜ä¼ä¼Žå±å–œå™¨åŸºå¥‡å¬‰å¯„å²å¸Œå¹¾å¿Œæ®æœºæ——æ—¢æœŸæ£‹æ£„'],
  [0x8b40, 'æ©Ÿå¸°æ¯…æ°—æ±½ç•¿ç¥ˆå­£ç¨€ç´€å¾½è¦è¨˜è²´èµ·è»Œè¼é£¢é¨Žé¬¼äº€å½å„€å¦“å®œæˆ¯æŠ€æ“¬æ¬ºçŠ ç–‘ç¥‡ç¾©èŸ»èª¼è­°æŽ¬èŠéž å‰åƒå–«æ¡”æ©˜è©°ç §æµé»å´å®¢è„šè™é€†ä¸˜ä¹…ä»‡ä¼‘åŠå¸å®®å¼“æ€¥æ•‘'],
  [0x8b80, 'æœ½æ±‚æ±²æ³£ç¸çƒç©¶çª®ç¬ˆç´šç³¾çµ¦æ—§ç‰›åŽ»å±…å·¨æ‹’æ‹ æŒ™æ¸ è™šè¨±è·é‹¸æ¼ç¦¦é­šäº¨äº«äº¬ä¾›ä¾ åƒ‘å…‡ç«¶å…±å‡¶å”åŒ¡å¿å«å–¬å¢ƒå³¡å¼·å½Šæ€¯ææ­æŒŸæ•™æ©‹æ³ç‹‚ç‹­çŸ¯èƒ¸è„…èˆˆè•Žéƒ·é¡éŸ¿é¥—é©šä»°å‡å°­æšæ¥­å±€æ›²æ¥µçŽ‰æ¡ç²åƒ…å‹¤å‡å·¾éŒ¦æ–¤æ¬£æ¬½ç´ç¦ç¦½ç­‹ç·ŠèŠ¹èŒè¡¿è¥Ÿè¬¹è¿‘é‡‘åŸéŠ€ä¹å€¶å¥åŒºç‹—çŽ–çŸ©è‹¦èº¯é§†é§ˆé§’å…·æ„šè™žå–°ç©ºå¶å¯“é‡éš…ä¸²æ«›é‡§å±‘å±ˆ'],
  [0x8c40, 'æŽ˜çªŸæ²“é´è½¡çªªç†Šéšˆç²‚æ —ç¹°æ¡‘é¬å‹²å›è–«è¨“ç¾¤è»éƒ¡å¦è¢ˆç¥ä¿‚å‚¾åˆ‘å…„å•“åœ­çªåž‹å¥‘å½¢å¾„æµæ…¶æ…§æ†©æŽ²æºæ•¬æ™¯æ¡‚æ¸“ç•¦ç¨½ç³»çµŒç¶™ç¹‹ç½«èŒŽèŠè›è¨ˆè©£è­¦è»½é šé¶èŠ¸è¿Žé¯¨'],
  [0x8c80, 'åŠ‡æˆŸæ’ƒæ¿€éš™æ¡å‚‘æ¬ æ±ºæ½”ç©´çµè¡€è¨£æœˆä»¶å€¹å€¦å¥å…¼åˆ¸å‰£å–§åœå …å«Œå»ºæ†²æ‡¸æ‹³æ²æ¤œæ¨©ç‰½çŠ¬çŒ®ç ”ç¡¯çµ¹çœŒè‚©è¦‹è¬™è³¢è»’é£éµé™ºé¡•é¨“é¹¸å…ƒåŽŸåŽ³å¹»å¼¦æ¸›æºçŽ„ç¾çµƒèˆ·è¨€è«ºé™ä¹Žå€‹å¤å‘¼å›ºå§‘å­¤å·±åº«å¼§æˆ¸æ•…æž¯æ¹–ç‹ç³Šè¢´è‚¡èƒ¡è°è™Žèª‡è·¨éˆ·é›‡é¡§é¼“äº”äº’ä¼åˆå‘‰å¾å¨¯å¾Œå¾¡æ‚Ÿæ¢§æªŽç‘šç¢èªžèª¤è­·é†ä¹žé¯‰äº¤ä½¼ä¾¯å€™å€–å…‰å…¬åŠŸåŠ¹å‹¾åŽšå£å‘'],
  [0x8d40, 'åŽå–‰å‘åž¢å¥½å­”å­å®å·¥å·§å··å¹¸åºƒåºšåº·å¼˜æ’æ…ŒæŠ—æ‹˜æŽ§æ”»æ˜‚æ™ƒæ›´æ­æ ¡æ¢—æ§‹æ±Ÿæ´ªæµ©æ¸¯æºç”²çš‡ç¡¬ç¨¿ç³ ç´…ç´˜çµžç¶±è€•è€ƒè‚¯è‚±è…”è†èˆªè’è¡Œè¡¡è¬›è²¢è³¼éƒŠé…µé‰±ç ¿é‹¼é–¤é™'],
  [0x8d80, 'é …é¦™é«˜é´»å‰›åŠ«å·åˆå£•æ‹·æ¿ è±ªè½Ÿéº¹å…‹åˆ»å‘Šå›½ç©€é…·éµ é»’ç„æ¼‰è…°ç”‘å¿½æƒšéª¨ç‹›è¾¼æ­¤é ƒä»Šå›°å¤å¢¾å©šæ¨æ‡‡æ˜æ˜†æ ¹æ¢±æ··ç—•ç´ºè‰®é­‚äº›ä½å‰å”†åµ¯å·¦å·®æŸ»æ²™ç‘³ç ‚è©éŽ–è£Ÿååº§æŒ«å‚µå‚¬å†æœ€å“‰å¡žå¦»å®°å½©æ‰æŽ¡æ ½æ­³æ¸ˆç½é‡‡çŠ€ç •ç ¦ç¥­æ–Žç´°èœè£è¼‰éš›å‰¤åœ¨æç½ªè²¡å†´å‚é˜ªå ºæ¦Šè‚´å’²å´ŽåŸ¼ç¢•é·ºä½œå‰Šå’‹æ¾æ˜¨æœ”æŸµçª„ç­–ç´¢éŒ¯æ¡œé®­ç¬¹åŒ™å†Šåˆ·'],
  [0x8e40, 'å¯Ÿæ‹¶æ’®æ“¦æœ­æ®ºè–©é›‘çšé¯–æŒéŒ†é®«çš¿æ™’ä¸‰å‚˜å‚å±±æƒ¨æ’’æ•£æ¡Ÿç‡¦çŠç”£ç®—çº‚èš•è®ƒè³›é…¸é¤æ–¬æš«æ®‹ä»•ä»”ä¼ºä½¿åˆºå¸å²å—£å››å£«å§‹å§‰å§¿å­å±å¸‚å¸«å¿—æ€æŒ‡æ”¯å­œæ–¯æ–½æ—¨æžæ­¢'],
  [0x8e80, 'æ­»æ°ç…ç¥‰ç§ç³¸ç´™ç´«è‚¢è„‚è‡³è¦–è©žè©©è©¦èªŒè«®è³‡è³œé›Œé£¼æ­¯äº‹ä¼¼ä¾å…å­—å¯ºæ…ˆæŒæ™‚æ¬¡æ»‹æ²»çˆ¾ç’½ç—”ç£ç¤ºè€Œè€³è‡ªè’”è¾žæ±é¹¿å¼è­˜é´«ç«ºè»¸å®é›«ä¸ƒå±åŸ·å¤±å«‰å®¤æ‚‰æ¹¿æ¼†ç–¾è³ªå®Ÿè”€ç¯ å²æŸ´èŠå±¡è•Šç¸žèˆŽå†™å°„æ¨èµ¦æ–œç…®ç¤¾ç´—è€…è¬è»Šé®è›‡é‚ªå€Ÿå‹ºå°ºæ“ç¼çˆµé…Œé‡ˆéŒ«è‹¥å¯‚å¼±æƒ¹ä¸»å–å®ˆæ‰‹æœ±æ®Šç‹©ç ç¨®è…«è¶£é…’é¦–å„’å—å‘ªå¯¿æŽˆæ¨¹ç¶¬éœ€å›šåŽå‘¨'],
  [0x8f40, 'å®—å°±å·žä¿®æ„æ‹¾æ´²ç§€ç§‹çµ‚ç¹ç¿’è‡­èˆŸè’è¡†è¥²è®è¹´è¼¯é€±é…‹é…¬é›†é†œä»€ä½å……åå¾“æˆŽæŸ”æ±æ¸‹ç£ç¸¦é‡éŠƒå”å¤™å®¿æ·‘ç¥ç¸®ç²›å¡¾ç†Ÿå‡ºè¡“è¿°ä¿Šå³»æ˜¥çž¬ç«£èˆœé§¿å‡†å¾ªæ—¬æ¥¯æ®‰æ·³'],
  [0x8f80, 'æº–æ½¤ç›¾ç´”å·¡éµé†‡é †å‡¦åˆæ‰€æš‘æ›™æ¸šåº¶ç·’ç½²æ›¸è–¯è—·è«¸åŠ©å™å¥³åºå¾æ•é‹¤é™¤å‚·å„Ÿå‹åŒ å‡å¬å“¨å•†å”±å˜—å¥¨å¦¾å¨¼å®µå°†å°å°‘å°šåº„åºŠå» å½°æ‰¿æŠ„æ‹›æŽŒæ·æ˜‡æ˜Œæ˜­æ™¶æ¾æ¢¢æ¨Ÿæ¨µæ²¼æ¶ˆæ¸‰æ¹˜ç„¼ç„¦ç…§ç—‡çœç¡ç¤ç¥¥ç§°ç« ç¬‘ç²§ç´¹è‚–è–è’‹è•‰è¡è£³è¨Ÿè¨¼è©”è©³è±¡è³žé†¤é‰¦é¾é˜éšœéž˜ä¸Šä¸ˆä¸žä¹—å†—å‰°åŸŽå ´å£Œå¬¢å¸¸æƒ…æ“¾æ¡æ–æµ„çŠ¶ç•³ç©£è’¸è­²é†¸éŒ å˜±åŸ´é£¾'],
  [0x9040, 'æ‹­æ¤æ®–ç‡­ç¹”è·è‰²è§¦é£Ÿè•è¾±å°»ä¼¸ä¿¡ä¾µå”‡å¨ å¯å¯©å¿ƒæ…ŽæŒ¯æ–°æ™‹æ£®æ¦›æµ¸æ·±ç”³ç–¹çœŸç¥žç§¦ç´³è‡£èŠ¯è–ªè¦ªè¨ºèº«è¾›é€²é‡éœ‡äººä»åˆƒå¡µå£¬å°‹ç”šå°½è…Žè¨Šè¿…é™£é­ç¬¥è«é ˆé…¢å›³åŽ¨'],
  [0x9080, 'é€—å¹åž‚å¸¥æŽ¨æ°´ç‚Šç¡ç²‹ç¿ è¡°é‚é…”éŒéŒ˜éšç‘žé«„å´‡åµ©æ•°æž¢è¶¨é››æ®æ‰æ¤™è…é —é›€è£¾æ¾„æ‘ºå¯¸ä¸–ç€¬ç•æ˜¯å‡„åˆ¶å‹¢å§“å¾æ€§æˆæ”¿æ•´æ˜Ÿæ™´æ£²æ –æ­£æ¸…ç‰²ç”Ÿç››ç²¾è–å£°è£½è¥¿èª èª“è«‹é€é†’é’é™æ–‰ç¨Žè„†éš»å¸­æƒœæˆšæ–¥æ˜”æžçŸ³ç©ç±ç¸¾è„Šè²¬èµ¤è·¡è¹Ÿç¢©åˆ‡æ‹™æŽ¥æ‘‚æŠ˜è¨­çªƒç¯€èª¬é›ªçµ¶èˆŒè‰ä»™å…ˆåƒå å®£å°‚å°–å·æˆ¦æ‰‡æ’°æ “æ ´æ³‰æµ…æ´—æŸ“æ½œç…Žç…½æ—‹ç©¿ç®­ç·š'],
  [0x9140, 'ç¹Šç¾¨è…ºèˆ›èˆ¹è–¦è©®è³Žè·µé¸é·éŠ­éŠ‘é–ƒé®®å‰å–„æ¼¸ç„¶å…¨ç¦…ç¹•è†³ç³Žå™Œå¡‘å²¨æŽªæ›¾æ›½æ¥šç‹™ç–ç–Žç¤Žç¥–ç§Ÿç²—ç´ çµ„è˜‡è¨´é˜»é¡é¼ åƒ§å‰µåŒå¢å€‰å–ªå£®å¥çˆ½å®‹å±¤åŒæƒ£æƒ³æœæŽƒæŒ¿æŽ»'],
  [0x9180, 'æ“æ—©æ›¹å·£æ§æ§½æ¼•ç‡¥äº‰ç—©ç›¸çª“ç³Ÿç·ç¶œè¡è‰è˜è‘¬è’¼è—»è£…èµ°é€é­éŽ—éœœé¨’åƒå¢—æ†Žè‡“è”µè´ˆé€ ä¿ƒå´å‰‡å³æ¯æ‰æŸæ¸¬è¶³é€Ÿä¿—å±žè³Šæ—ç¶šå’è¢–å…¶æƒå­˜å­«å°Šææ‘éœä»–å¤šå¤ªæ±°è©‘å”¾å •å¦¥æƒ°æ‰“æŸèˆµæ¥•é™€é§„é¨¨ä½“å †å¯¾è€å²±å¸¯å¾…æ€ æ…‹æˆ´æ›¿æ³°æ»žèƒŽè…¿è‹”è¢‹è²¸é€€é€®éšŠé»›é¯›ä»£å°å¤§ç¬¬é†é¡Œé·¹æ»ç€§å“å•„å®…æ‰˜æŠžæ‹“æ²¢æ¿¯ç¢è¨—é¸æ¿è«¾èŒ¸å‡§è›¸åª'],
  [0x9240, 'å©ä½†é”è¾°å¥ªè„±å·½ç«ªè¾¿æ£šè°·ç‹¸é±ˆæ¨½èª°ä¸¹å˜å˜†å¦æ‹…æŽ¢æ—¦æ­Žæ·¡æ¹›ç‚­çŸ­ç«¯ç®ªç¶»è€½èƒ†è›‹èª•é›å›£å£‡å¼¾æ–­æš–æª€æ®µç”·è«‡å€¤çŸ¥åœ°å¼›æ¥æ™ºæ± ç—´ç¨šç½®è‡´èœ˜é…é¦³ç¯‰ç•œç«¹ç­‘è“„'],
  [0x9280, 'é€ç§©çª’èŒ¶å«¡ç€ä¸­ä»²å®™å¿ æŠ½æ˜¼æŸ±æ³¨è™«è¡·è¨»é…Žé‹³é§æ¨—ç€¦çŒªè‹§è‘—è²¯ä¸å…†å‡‹å–‹å¯µå¸–å¸³åºå¼”å¼µå½«å¾´æ‡²æŒ‘æš¢æœæ½®ç‰’ç”ºçœºè´è„¹è…¸è¶èª¿è«œè¶…è·³éŠšé•·é ‚é³¥å‹…æ—ç›´æœ•æ²ˆçè³ƒéŽ®é™³æ´¥å¢œæ¤Žæ§Œè¿½éŽšç—›é€šå¡šæ ‚æŽ´æ§»ä½ƒæ¼¬æŸ˜è¾»è”¦ç¶´é”æ¤¿æ½°åªå£·å¬¬ç´¬çˆªåŠé‡£é¶´äº­ä½Žåœåµå‰ƒè²žå‘ˆå ¤å®šå¸åº•åº­å»·å¼Ÿæ‚ŒæŠµæŒºææ¢¯æ±€ç¢‡ç¦Žç¨‹ç· è‰‡è¨‚è«¦è¹„é€“'],
  [0x9340, 'é‚¸é„­é‡˜é¼Žæ³¥æ‘˜æ“¢æ•µæ»´çš„ç¬›é©é‘æººå“²å¾¹æ’¤è½è¿­é‰„å…¸å¡«å¤©å±•åº—æ·»çºç”œè²¼è»¢é¡›ç‚¹ä¼æ®¿æ¾±ç”°é›»å…Žåå µå¡—å¦¬å± å¾’æ–—æœæ¸¡ç™»èŸè³­é€”éƒ½éç ¥ç ºåŠªåº¦åœŸå¥´æ€’å€’å…šå†¬'],
  [0x9380, 'å‡åˆ€å”å¡”å¡˜å¥—å®•å³¶å¶‹æ‚¼æŠ•æ­æ±æ¡ƒæ¢¼æ£Ÿç›—æ·˜æ¹¯æ¶›ç¯ç‡ˆå½“ç—˜ç¥·ç­‰ç­”ç­’ç³–çµ±åˆ°è‘£è•©è—¤è¨Žè¬„è±†è¸é€ƒé€é™é™¶é ­é¨°é—˜åƒå‹•åŒå ‚å°Žæ†§æ’žæ´žçž³ç«¥èƒ´è„é“éŠ…å³ é´‡åŒ¿å¾—å¾³æ¶œç‰¹ç£ç¦¿ç¯¤æ¯’ç‹¬èª­æ ƒæ©¡å‡¸çªæ¤´å±Šé³¶è‹«å¯…é…‰ç€žå™¸å±¯æƒ‡æ•¦æ²Œè±šéé “å‘‘æ›‡éˆå¥ˆé‚£å†…ä¹å‡ªè–™è¬Žç˜æºé‹æ¥¢é¦´ç¸„ç•·å—æ¥ è»Ÿé›£æ±äºŒå°¼å¼è¿©åŒ‚è³‘è‚‰è™¹å»¿æ—¥ä¹³å…¥'],
  [0x9440, 'å¦‚å°¿éŸ®ä»»å¦Šå¿èªæ¿¡ç¦°ç¥¢å¯§è‘±çŒ«ç†±å¹´å¿µæ»æ’šç‡ƒç²˜ä¹ƒå»¼ä¹‹åŸœåš¢æ‚©æ¿ƒç´èƒ½è„³è†¿è¾²è¦—èš¤å·´æŠŠæ’­è¦‡æ·æ³¢æ´¾ç¶ç ´å©†ç½µèŠ­é¦¬ä¿³å»ƒæ‹æŽ’æ•—æ¯ç›ƒç‰ŒèƒŒè‚ºè¼©é…å€åŸ¹åª’æ¢…'],
  [0x9480, 'æ¥³ç…¤ç‹½è²·å£²è³ é™ªé€™è¿ç§¤çŸ§è©ä¼¯å‰¥åšæ‹æŸæ³Šç™½ç®”ç²•èˆ¶è–„è¿«æ›æ¼ çˆ†ç¸›èŽ«é§éº¦å‡½ç®±ç¡²ç®¸è‚‡ç­ˆæ«¨å¹¡è‚Œç•‘ç• å…«é‰¢æºŒç™ºé†—é«ªä¼ç½°æŠœç­é–¥é³©å™ºå¡™è›¤éš¼ä¼´åˆ¤åŠåå›å¸†æ¬æ–‘æ¿æ°¾æ±Žç‰ˆçŠ¯ç­ç•”ç¹èˆ¬è—©è²©ç¯„é‡†ç…©é ’é£¯æŒ½æ™©ç•ªç›¤ç£è•ƒè›®åŒªå‘å¦å¦ƒåº‡å½¼æ‚²æ‰‰æ‰¹æŠ«æ–æ¯”æ³Œç–²çš®ç¢‘ç§˜ç·‹ç½·è‚¥è¢«èª¹è²»é¿éžé£›æ¨‹ç°¸å‚™å°¾å¾®æž‡æ¯˜çµçœ‰ç¾Ž'],
  [0x9540, 'é¼»æŸŠç¨—åŒ¹ç–‹é«­å½¦è†è±è‚˜å¼¼å¿…ç•¢ç­†é€¼æ¡§å§«åª›ç´ç™¾è¬¬ä¿µå½ªæ¨™æ°·æ¼‚ç“¢ç¥¨è¡¨è©•è±¹å»Ÿæç—…ç§’è‹—éŒ¨é‹²è’œè›­é°­å“å½¬æ–Œæµœç€•è²§è³“é »æ•ç“¶ä¸ä»˜åŸ å¤«å©¦å¯Œå†¨å¸ƒåºœæ€–æ‰¶æ•·'],
  [0x9580, 'æ–§æ™®æµ®çˆ¶ç¬¦è…è†šèŠ™è­œè² è³¦èµ´é˜œé™„ä¾®æ’«æ­¦èˆžè‘¡è•ªéƒ¨å°æ¥“é¢¨è‘ºè•—ä¼å‰¯å¾©å¹…æœç¦è…¹è¤‡è¦†æ·µå¼—æ‰•æ²¸ä»ç‰©é®’åˆ†å»å™´å¢³æ†¤æ‰®ç„šå¥®ç²‰ç³žç´›é›°æ–‡èžä¸™ä½µå…µå¡€å¹£å¹³å¼ŠæŸ„ä¸¦è”½é–‰é™›ç±³é åƒ»å£ç™–ç¢§åˆ¥çž¥è”‘ç®†åå¤‰ç‰‡ç¯‡ç·¨è¾ºè¿”éä¾¿å‹‰å¨©å¼éž­ä¿èˆ—é‹ªåœƒæ•æ­©ç”«è£œè¼”ç©‚å‹Ÿå¢“æ…•æˆŠæš®æ¯ç°¿è©å€£ä¿¸åŒ…å‘†å ±å¥‰å®å³°å³¯å´©åº–æŠ±æ§æ”¾æ–¹æœ‹'],
  [0x9640, 'æ³•æ³¡çƒ¹ç ²ç¸«èƒžèŠ³èŒè“¬èœ‚è¤’è¨ªè±Šé‚¦é‹’é£½é³³éµ¬ä¹äº¡å‚å‰–åŠå¦¨å¸½å¿˜å¿™æˆ¿æš´æœ›æŸæ£’å†’ç´¡è‚ªè†¨è¬€è²Œè²¿é‰¾é˜²å é ¬åŒ—åƒ•åœå¢¨æ’²æœ´ç‰§ç¦ç©†é‡¦å‹ƒæ²¡æ®†å €å¹Œå¥”æœ¬ç¿»å‡¡ç›†'],
  [0x9680, 'æ‘©ç£¨é­”éº»åŸ‹å¦¹æ˜§æžšæ¯Žå“©æ§™å¹•è†œæž•é®ªæŸ¾é±’æ¡äº¦ä¿£åˆæŠ¹æœ«æ²«è¿„ä¾­ç¹­éº¿ä¸‡æ…¢æº€æ¼«è”“å‘³æœªé­…å·³ç®•å²¬å¯†èœœæ¹Šè“‘ç¨”è„ˆå¦™ç²æ°‘çœ å‹™å¤¢ç„¡ç‰ŸçŸ›éœ§éµ¡æ¤‹å©¿å¨˜å†¥åå‘½æ˜Žç›Ÿè¿·éŠ˜é³´å§ªç‰æ»…å…æ£‰ç¶¿ç·¬é¢éººæ‘¸æ¨¡èŒ‚å¦„å­Ÿæ¯›çŒ›ç›²ç¶²è€—è’™å„²æœ¨é»™ç›®æ¢å‹¿é¤…å°¤æˆ»ç±¾è²°å•æ‚¶ç´‹é–€åŒä¹Ÿå†¶å¤œçˆºè€¶é‡Žå¼¥çŸ¢åŽ„å½¹ç´„è–¬è¨³èºé–æŸ³è–®é‘“æ„‰æ„ˆæ²¹ç™’'],
  [0x9740, 'è«­è¼¸å”¯ä½‘å„ªå‹‡å‹å®¥å¹½æ‚ æ†‚æ–æœ‰æŸšæ¹§æ¶ŒçŒ¶çŒ·ç”±ç¥è£•èª˜éŠé‚‘éƒµé›„èžå¤•äºˆä½™ä¸Žèª‰è¼¿é å‚­å¹¼å¦–å®¹åº¸æšæºæ“æ›œæ¥Šæ§˜æ´‹æº¶ç†”ç”¨çª¯ç¾Šè€€è‘‰è“‰è¦è¬¡è¸Šé¥é™½é¤Šæ…¾æŠ‘æ¬²'],
  [0x9780, 'æ²ƒæµ´ç¿Œç¿¼æ·€ç¾…èžºè£¸æ¥èŽ±é ¼é›·æ´›çµ¡è½é…ªä¹±åµåµæ¬„æ¿«è—è˜­è¦§åˆ©åå±¥æŽæ¢¨ç†ç’ƒç—¢è£è£¡é‡Œé›¢é™¸å¾‹çŽ‡ç«‹è‘ŽæŽ ç•¥åŠ‰æµæºœç‰ç•™ç¡«ç²’éš†ç«œé¾ä¾¶æ…®æ—…è™œäº†äº®åƒšä¸¡å‡Œå¯®æ–™æ¢æ¶¼çŒŸç™‚çž­ç¨œç³§è‰¯è«’é¼é‡é™µé ˜åŠ›ç·‘å€«åŽ˜æž—æ·‹ç‡ç³è‡¨è¼ªéš£é±—éºŸç‘ å¡æ¶™ç´¯é¡žä»¤ä¼¶ä¾‹å†·åŠ±å¶ºæ€œçŽ²ç¤¼è‹“éˆ´éš·é›¶éœŠéº—é½¢æš¦æ­´åˆ—åŠ£çƒˆè£‚å»‰æ‹æ†æ¼£ç…‰ç°¾ç·´è¯'],
  [0x9840, 'è“®é€£éŒ¬å‘‚é­¯æ«“ç‚‰è³‚è·¯éœ²åŠ´å©å»Šå¼„æœ—æ¥¼æ¦”æµªæ¼ç‰¢ç‹¼ç¯­è€è¾è‹éƒŽå…­éº“ç¦„è‚‹éŒ²è«–å€­å’Œè©±æ­ªè³„è„‡æƒ‘æž é·²äº™äº˜é°è©«è—è•¨æ¤€æ¹¾ç¢—è…•'],
  [0x989f, 'å¼Œä¸ä¸•ä¸ªä¸±ä¸¶ä¸¼ä¸¿ä¹‚ä¹–ä¹˜äº‚äº…è±«äºŠèˆ’å¼äºŽäºžäºŸäº äº¢äº°äº³äº¶ä»Žä»ä»„ä»†ä»‚ä»—ä»žä»­ä»Ÿä»·ä¼‰ä½šä¼°ä½›ä½ä½—ä½‡ä½¶ä¾ˆä¾ä¾˜ä½»ä½©ä½°ä¾‘ä½¯ä¾†ä¾–å„˜ä¿”ä¿Ÿä¿Žä¿˜ä¿›ä¿‘ä¿šä¿ä¿¤ä¿¥å€šå€¨å€”å€ªå€¥å€…ä¼œä¿¶å€¡å€©å€¬ä¿¾ä¿¯å€‘å€†åƒå‡æœƒå•ååˆåšå–å¬å¸å‚€å‚šå‚…å‚´å‚²'],
  [0x9940, 'åƒ‰åƒŠå‚³åƒ‚åƒ–åƒžåƒ¥åƒ­åƒ£åƒ®åƒ¹åƒµå„‰å„å„‚å„–å„•å„”å„šå„¡å„ºå„·å„¼å„»å„¿å…€å…’å…Œå…”å…¢ç«¸å…©å…ªå…®å†€å†‚å›˜å†Œå†‰å†å†‘å†“å†•å†–å†¤å†¦å†¢å†©å†ªå†«å†³å†±å†²å†°å†µå†½å‡…å‡‰å‡›å‡ è™•å‡©å‡­'],
  [0x9980, 'å‡°å‡µå‡¾åˆ„åˆ‹åˆ”åˆŽåˆ§åˆªåˆ®åˆ³åˆ¹å‰å‰„å‰‹å‰Œå‰žå‰”å‰ªå‰´å‰©å‰³å‰¿å‰½åŠåŠ”åŠ’å‰±åŠˆåŠ‘è¾¨è¾§åŠ¬åŠ­åŠ¼åŠµå‹å‹å‹—å‹žå‹£å‹¦é£­å‹ å‹³å‹µå‹¸å‹¹åŒ†åŒˆç”¸åŒåŒåŒåŒ•åŒšåŒ£åŒ¯åŒ±åŒ³åŒ¸å€å†å…ä¸—å‰åå‡–åžå©å®å¤˜å»å·åŽ‚åŽ–åŽ åŽ¦åŽ¥åŽ®åŽ°åŽ¶åƒç°’é›™åŸæ›¼ç‡®å®å¨å­åºåå½å‘€å¬å­å¼å®å¶å©åå‘Žå’å‘µå’Žå‘Ÿå‘±å‘·å‘°å’’å‘»å’€å‘¶å’„å’å’†å“‡å’¢å’¸å’¥å’¬å“„å“ˆå’¨'],
  [0x9a40, 'å’«å“‚å’¤å’¾å’¼å“˜å“¥å“¦å”å””å“½å“®å“­å“ºå“¢å”¹å•€å•£å•Œå”®å•œå•…å•–å•—å”¸å”³å•å–™å–€å’¯å–Šå–Ÿå•»å•¾å–˜å–žå–®å•¼å–ƒå–©å–‡å–¨å—šå—…å—Ÿå—„å—œå—¤å—”å˜”å—·å˜–å—¾å—½å˜›å—¹å™Žå™ç‡Ÿå˜´å˜¶å˜²å˜¸'],
  [0x9a80, 'å™«å™¤å˜¯å™¬å™ªåš†åš€åšŠåš åš”åšåš¥åš®åš¶åš´å›‚åš¼å›å›ƒå›€å›ˆå›Žå›‘å›“å›—å›®å›¹åœ€å›¿åœ„åœ‰åœˆåœ‹åœåœ“åœ˜åœ–å—‡åœœåœ¦åœ·åœ¸åŽåœ»å€åå©åŸ€åžˆå¡å¿åž‰åž“åž åž³åž¤åžªåž°åŸƒåŸ†åŸ”åŸ’åŸ“å ŠåŸ–åŸ£å ‹å ™å å¡²å ¡å¡¢å¡‹å¡°æ¯€å¡’å ½å¡¹å¢…å¢¹å¢Ÿå¢«å¢ºå£žå¢»å¢¸å¢®å£…å£“å£‘å£—å£™å£˜å£¥å£œå£¤å£Ÿå£¯å£ºå£¹å£»å£¼å£½å¤‚å¤Šå¤å¤›æ¢¦å¤¥å¤¬å¤­å¤²å¤¸å¤¾ç«’å¥•å¥å¥Žå¥šå¥˜å¥¢å¥ å¥§å¥¬å¥©'],
  [0x9b40, 'å¥¸å¦å¦ä½žä¾«å¦£å¦²å§†å§¨å§œå¦å§™å§šå¨¥å¨Ÿå¨‘å¨œå¨‰å¨šå©€å©¬å©‰å¨µå¨¶å©¢å©ªåªšåª¼åª¾å«‹å«‚åª½å«£å«—å«¦å«©å«–å«ºå«»å¬Œå¬‹å¬–å¬²å«å¬ªå¬¶å¬¾å­ƒå­…å­€å­‘å­•å­šå­›å­¥å­©å­°å­³å­µå­¸æ–ˆå­ºå®€'],
  [0x9b80, 'å®ƒå®¦å®¸å¯ƒå¯‡å¯‰å¯”å¯å¯¤å¯¦å¯¢å¯žå¯¥å¯«å¯°å¯¶å¯³å°…å°‡å°ˆå°å°“å° å°¢å°¨å°¸å°¹å±å±†å±Žå±“å±å±å­±å±¬å±®ä¹¢å±¶å±¹å²Œå²‘å²”å¦›å²«å²»å²¶å²¼å²·å³…å²¾å³‡å³™å³©å³½å³ºå³­å¶Œå³ªå´‹å´•å´—åµœå´Ÿå´›å´‘å´”å´¢å´šå´™å´˜åµŒåµ’åµŽåµ‹åµ¬åµ³åµ¶å¶‡å¶„å¶‚å¶¢å¶å¶¬å¶®å¶½å¶å¶·å¶¼å·‰å·å·“å·’å·–å·›å·«å·²å·µå¸‹å¸šå¸™å¸‘å¸›å¸¶å¸·å¹„å¹ƒå¹€å¹Žå¹—å¹”å¹Ÿå¹¢å¹¤å¹‡å¹µå¹¶å¹ºéº¼å¹¿åº å»å»‚å»ˆå»å»'],
  [0x9c40, 'å»–å»£å»å»šå»›å»¢å»¡å»¨å»©å»¬å»±å»³å»°å»´å»¸å»¾å¼ƒå¼‰å½å½œå¼‹å¼‘å¼–å¼©å¼­å¼¸å½å½ˆå½Œå½Žå¼¯å½‘å½–å½—å½™å½¡å½­å½³å½·å¾ƒå¾‚å½¿å¾Šå¾ˆå¾‘å¾‡å¾žå¾™å¾˜å¾ å¾¨å¾­å¾¼å¿–å¿»å¿¤å¿¸å¿±å¿æ‚³å¿¿æ€¡æ '],
  [0x9c80, 'æ€™æ€æ€©æ€Žæ€±æ€›æ€•æ€«æ€¦æ€æ€ºæšææªæ·æŸæŠæ†ææ£æƒæ¤æ‚æ¬æ«æ™æ‚æ‚æƒ§æ‚ƒæ‚šæ‚„æ‚›æ‚–æ‚—æ‚’æ‚§æ‚‹æƒ¡æ‚¸æƒ æƒ“æ‚´å¿°æ‚½æƒ†æ‚µæƒ˜æ…æ„•æ„†æƒ¶æƒ·æ„€æƒ´æƒºæ„ƒæ„¡æƒ»æƒ±æ„æ„Žæ…‡æ„¾æ„¨æ„§æ…Šæ„¿æ„¼æ„¬æ„´æ„½æ…‚æ…„æ…³æ…·æ…˜æ…™æ…šæ…«æ…´æ…¯æ…¥æ…±æ…Ÿæ…æ…“æ…µæ†™æ†–æ†‡æ†¬æ†”æ†šæ†Šæ†‘æ†«æ†®æ‡Œæ‡Šæ‡‰æ‡·æ‡ˆæ‡ƒæ‡†æ†ºæ‡‹ç½¹æ‡æ‡¦æ‡£æ‡¶æ‡ºæ‡´æ‡¿æ‡½æ‡¼æ‡¾æˆ€æˆˆæˆ‰æˆæˆŒæˆ”æˆ›'],
  [0x9d40, 'æˆžæˆ¡æˆªæˆ®æˆ°æˆ²æˆ³æ‰æ‰Žæ‰žæ‰£æ‰›æ‰ æ‰¨æ‰¼æŠ‚æŠ‰æ‰¾æŠ’æŠ“æŠ–æ‹”æŠƒæŠ”æ‹—æ‹‘æŠ»æ‹æ‹¿æ‹†æ“”æ‹ˆæ‹œæ‹Œæ‹Šæ‹‚æ‹‡æŠ›æ‹‰æŒŒæ‹®æ‹±æŒ§æŒ‚æŒˆæ‹¯æ‹µææŒ¾ææœææŽ–æŽŽæŽ€æŽ«æ¶æŽ£æŽæŽ‰æŽŸæŽµæ«'],
  [0x9d80, 'æ©æŽ¾æ©æ€æ†æ£æ‰æ’æ¶æ„æ–æ´æ†æ“æ¦æ¶æ”æ—æ¨ææ‘§æ‘¯æ‘¶æ‘Žæ”ªæ’•æ’“æ’¥æ’©æ’ˆæ’¼æ“šæ“’æ“…æ“‡æ’»æ“˜æ“‚æ“±æ“§èˆ‰æ“ æ“¡æŠ¬æ“£æ“¯æ”¬æ“¶æ“´æ“²æ“ºæ”€æ“½æ”˜æ”œæ”…æ”¤æ”£æ”«æ”´æ”µæ”·æ”¶æ”¸ç•‹æ•ˆæ•–æ••æ•æ•˜æ•žæ•æ•²æ•¸æ–‚æ–ƒè®Šæ–›æ–Ÿæ–«æ–·æ—ƒæ—†æ—æ—„æ—Œæ—’æ—›æ—™æ— æ—¡æ—±æ²æ˜Šæ˜ƒæ—»æ³æ˜µæ˜¶æ˜´æ˜œæ™æ™„æ™‰æ™æ™žæ™æ™¤æ™§æ™¨æ™Ÿæ™¢æ™°æšƒæšˆæšŽæš‰æš„æš˜æšæ›æš¹æ›‰æš¾æš¼'],
  [0x9e40, 'æ›„æš¸æ›–æ›šæ› æ˜¿æ›¦æ›©æ›°æ›µæ›·æœæœ–æœžæœ¦æœ§éœ¸æœ®æœ¿æœ¶ææœ¸æœ·æ†æžæ æ™æ£æ¤æž‰æ°æž©æ¼æªæžŒæž‹æž¦æž¡æž…æž·æŸ¯æž´æŸ¬æž³æŸ©æž¸æŸ¤æŸžæŸæŸ¢æŸ®æž¹æŸŽæŸ†æŸ§æªœæ žæ¡†æ ©æ¡€æ¡æ ²æ¡Ž'],
  [0x9e80, 'æ¢³æ «æ¡™æ¡£æ¡·æ¡¿æ¢Ÿæ¢æ¢­æ¢”æ¢æ¢›æ¢ƒæª®æ¢¹æ¡´æ¢µæ¢ æ¢ºæ¤æ¢æ¡¾æ¤æ£Šæ¤ˆæ£˜æ¤¢æ¤¦æ£¡æ¤Œæ£æ£”æ£§æ£•æ¤¶æ¤’æ¤„æ£—æ££æ¤¥æ£¹æ£ æ£¯æ¤¨æ¤ªæ¤šæ¤£æ¤¡æ£†æ¥¹æ¥·æ¥œæ¥¸æ¥«æ¥”æ¥¾æ¥®æ¤¹æ¥´æ¤½æ¥™æ¤°æ¥¡æ¥žæ¥æ¦æ¥ªæ¦²æ¦®æ§æ¦¿æ§æ§“æ¦¾æ§Žå¯¨æ§Šæ§æ¦»æ§ƒæ¦§æ¨®æ¦‘æ¦ æ¦œæ¦•æ¦´æ§žæ§¨æ¨‚æ¨›æ§¿æ¬Šæ§¹æ§²æ§§æ¨…æ¦±æ¨žæ§­æ¨”æ§«æ¨Šæ¨’æ«æ¨£æ¨“æ©„æ¨Œæ©²æ¨¶æ©¸æ©‡æ©¢æ©™æ©¦æ©ˆæ¨¸æ¨¢æªæªæª æª„æª¢æª£'],
  [0x9f40, 'æª—è˜—æª»æ«ƒæ«‚æª¸æª³æª¬æ«žæ«‘æ«Ÿæªªæ«šæ«ªæ«»æ¬…è˜–æ«ºæ¬’æ¬–é¬±æ¬Ÿæ¬¸æ¬·ç›œæ¬¹é£®æ­‡æ­ƒæ­‰æ­æ­™æ­”æ­›æ­Ÿæ­¡æ­¸æ­¹æ­¿æ®€æ®„æ®ƒæ®æ®˜æ®•æ®žæ®¤æ®ªæ®«æ®¯æ®²æ®±æ®³æ®·æ®¼æ¯†æ¯‹æ¯“æ¯Ÿæ¯¬æ¯«æ¯³æ¯¯'],
  [0x9f80, 'éº¾æ°ˆæ°“æ°”æ°›æ°¤æ°£æ±žæ±•æ±¢æ±ªæ²‚æ²æ²šæ²æ²›æ±¾æ±¨æ±³æ²’æ²æ³„æ³±æ³“æ²½æ³—æ³…æ³æ²®æ²±æ²¾æ²ºæ³›æ³¯æ³™æ³ªæ´Ÿè¡æ´¶æ´«æ´½æ´¸æ´™æ´µæ´³æ´’æ´Œæµ£æ¶“æµ¤æµšæµ¹æµ™æ¶Žæ¶•æ¿¤æ¶…æ·¹æ¸•æ¸Šæ¶µæ·‡æ·¦æ¶¸æ·†æ·¬æ·žæ·Œæ·¨æ·’æ·…æ·ºæ·™æ·¤æ·•æ·ªæ·®æ¸­æ¹®æ¸®æ¸™æ¹²æ¹Ÿæ¸¾æ¸£æ¹«æ¸«æ¹¶æ¹æ¸Ÿæ¹ƒæ¸ºæ¹Žæ¸¤æ»¿æ¸æ¸¸æº‚æºªæº˜æ»‰æº·æ»“æº½æº¯æ»„æº²æ»”æ»•æºæº¥æ»‚æºŸæ½æ¼‘çŒæ»¬æ»¸æ»¾æ¼¿æ»²æ¼±æ»¯æ¼²æ»Œ'],
  [0xe040, 'æ¼¾æ¼“æ»·æ¾†æ½ºæ½¸æ¾æ¾€æ½¯æ½›æ¿³æ½­æ¾‚æ½¼æ½˜æ¾Žæ¾‘æ¿‚æ½¦æ¾³æ¾£æ¾¡æ¾¤æ¾¹æ¿†æ¾ªæ¿Ÿæ¿•æ¿¬æ¿”æ¿˜æ¿±æ¿®æ¿›ç€‰ç€‹æ¿ºç€‘ç€ç€æ¿¾ç€›ç€šæ½´ç€ç€˜ç€Ÿç€°ç€¾ç€²ç‘ç£ç‚™ç‚’ç‚¯çƒ±ç‚¬ç‚¸ç‚³ç‚®çƒŸçƒ‹çƒ'],
  [0xe080, 'çƒ™ç„‰çƒ½ç„œç„™ç…¥ç…•ç†ˆç…¦ç…¢ç…Œç…–ç…¬ç†ç‡»ç†„ç†•ç†¨ç†¬ç‡—ç†¹ç†¾ç‡’ç‡‰ç‡”ç‡Žç‡ ç‡¬ç‡§ç‡µç‡¼ç‡¹ç‡¿çˆçˆçˆ›çˆ¨çˆ­çˆ¬çˆ°çˆ²çˆ»çˆ¼çˆ¿ç‰€ç‰†ç‰‹ç‰˜ç‰´ç‰¾çŠ‚çŠçŠ‡çŠ’çŠ–çŠ¢çŠ§çŠ¹çŠ²ç‹ƒç‹†ç‹„ç‹Žç‹’ç‹¢ç‹ ç‹¡ç‹¹ç‹·å€çŒ—çŒŠçŒœçŒ–çŒçŒ´çŒ¯çŒ©çŒ¥çŒ¾çŽçé»˜ç—çªç¨ç°ç¸çµç»çºçˆçŽ³çŽçŽ»ç€ç¥ç®çžç’¢ç…ç‘¯ç¥ç¸ç²çºç‘•ç¿ç‘Ÿç‘™ç‘ç‘œç‘©ç‘°ç‘£ç‘ªç‘¶ç‘¾ç’‹ç’žç’§ç“Šç“ç“”ç±'],
  [0xe140, 'ç“ ç“£ç“§ç“©ç“®ç“²ç“°ç“±ç“¸ç“·ç”„ç”ƒç”…ç”Œç”Žç”ç”•ç”“ç”žç”¦ç”¬ç”¼ç•„ç•ç•Šç•‰ç•›ç•†ç•šç•©ç•¤ç•§ç•«ç•­ç•¸ç•¶ç–†ç–‡ç•´ç–Šç–‰ç–‚ç–”ç–šç–ç–¥ç–£ç—‚ç–³ç—ƒç–µç–½ç–¸ç–¼ç–±ç—ç—Šç—’ç—™ç—£ç—žç—¾ç—¿'],
  [0xe180, 'ç—¼ç˜ç—°ç—ºç—²ç—³ç˜‹ç˜ç˜‰ç˜Ÿç˜§ç˜ ç˜¡ç˜¢ç˜¤ç˜´ç˜°ç˜»ç™‡ç™ˆç™†ç™œç™˜ç™¡ç™¢ç™¨ç™©ç™ªç™§ç™¬ç™°ç™²ç™¶ç™¸ç™¼çš€çšƒçšˆçš‹çšŽçš–çš“çš™çššçš°çš´çš¸çš¹çšºç›‚ç›ç›–ç›’ç›žç›¡ç›¥ç›§ç›ªè˜¯ç›»çœˆçœ‡çœ„çœ©çœ¤çœžçœ¥çœ¦çœ›çœ·çœ¸ç‡çšç¨ç«ç›ç¥ç¿ç¾ç¹çžŽçž‹çž‘çž çžžçž°çž¶çž¹çž¿çž¼çž½çž»çŸ‡çŸçŸ—çŸšçŸœçŸ£çŸ®çŸ¼ç Œç ’ç¤¦ç  ç¤ªç¡…ç¢Žç¡´ç¢†ç¡¼ç¢šç¢Œç¢£ç¢µç¢ªç¢¯ç£‘ç£†ç£‹ç£”ç¢¾ç¢¼ç£…ç£Šç£¬'],
  [0xe240, 'ç£§ç£šç£½ç£´ç¤‡ç¤’ç¤‘ç¤™ç¤¬ç¤«ç¥€ç¥ ç¥—ç¥Ÿç¥šç¥•ç¥“ç¥ºç¥¿ç¦Šç¦ç¦§é½‹ç¦ªç¦®ç¦³ç¦¹ç¦ºç§‰ç§•ç§§ç§¬ç§¡ç§£ç¨ˆç¨ç¨˜ç¨™ç¨ ç¨Ÿç¦€ç¨±ç¨»ç¨¾ç¨·ç©ƒç©—ç©‰ç©¡ç©¢ç©©é¾ç©°ç©¹ç©½çªˆçª—çª•çª˜çª–çª©ç«ˆçª°'],
  [0xe280, 'çª¶ç«…ç«„çª¿é‚ƒç«‡ç«Šç«ç«ç«•ç«“ç«™ç«šç«ç«¡ç«¢ç«¦ç«­ç«°ç¬‚ç¬ç¬Šç¬†ç¬³ç¬˜ç¬™ç¬žç¬µç¬¨ç¬¶ç­ç­ºç¬„ç­ç¬‹ç­Œç­…ç­µç­¥ç­´ç­§ç­°ç­±ç­¬ç­®ç®ç®˜ç®Ÿç®ç®œç®šç®‹ç®’ç®ç­ç®™ç¯‹ç¯ç¯Œç¯ç®´ç¯†ç¯ç¯©ç°‘ç°”ç¯¦ç¯¥ç± ç°€ç°‡ç°“ç¯³ç¯·ç°—ç°ç¯¶ç°£ç°§ç°ªç°Ÿç°·ç°«ç°½ç±Œç±ƒç±”ç±ç±€ç±ç±˜ç±Ÿç±¤ç±–ç±¥ç±¬ç±µç²ƒç²ç²¤ç²­ç²¢ç²«ç²¡ç²¨ç²³ç²²ç²±ç²®ç²¹ç²½ç³€ç³…ç³‚ç³˜ç³’ç³œç³¢é¬»ç³¯ç³²ç³´ç³¶ç³ºç´†'],
  [0xe340, 'ç´‚ç´œç´•ç´Šçµ…çµ‹ç´®ç´²ç´¿ç´µçµ†çµ³çµ–çµŽçµ²çµ¨çµ®çµçµ£ç¶“ç¶‰çµ›ç¶çµ½ç¶›ç¶ºç¶®ç¶£ç¶µç·‡ç¶½ç¶«ç¸½ç¶¢ç¶¯ç·œç¶¸ç¶Ÿç¶°ç·˜ç·ç·¤ç·žç·»ç·²ç·¡ç¸…ç¸Šç¸£ç¸¡ç¸’ç¸±ç¸Ÿç¸‰ç¸‹ç¸¢ç¹†ç¹¦ç¸»ç¸µç¸¹ç¹ƒç¸·'],
  [0xe380, 'ç¸²ç¸ºç¹§ç¹ç¹–ç¹žç¹™ç¹šç¹¹ç¹ªç¹©ç¹¼ç¹»çºƒç·•ç¹½è¾®ç¹¿çºˆçº‰çºŒçº’çºçº“çº”çº–çºŽçº›çºœç¼¸ç¼ºç½…ç½Œç½ç½Žç½ç½‘ç½•ç½”ç½˜ç½Ÿç½ ç½¨ç½©ç½§ç½¸ç¾‚ç¾†ç¾ƒç¾ˆç¾‡ç¾Œç¾”ç¾žç¾ç¾šç¾£ç¾¯ç¾²ç¾¹ç¾®ç¾¶ç¾¸è­±ç¿…ç¿†ç¿Šç¿•ç¿”ç¿¡ç¿¦ç¿©ç¿³ç¿¹é£œè€†è€„è€‹è€’è€˜è€™è€œè€¡è€¨è€¿è€»èŠè†è’è˜èšèŸè¢è¨è³è²è°è¶è¹è½è¿è‚„è‚†è‚…è‚›è‚“è‚šè‚­å†è‚¬èƒ›èƒ¥èƒ™èƒèƒ„èƒšèƒ–è„‰èƒ¯èƒ±è„›è„©è„£è„¯è…‹'],
  [0xe440, 'éš‹è…†è„¾è…“è…‘èƒ¼è…±è…®è…¥è…¦è…´è†ƒè†ˆè†Šè†€è†‚è† è†•è†¤è†£è…Ÿè†“è†©è†°è†µè†¾è†¸è†½è‡€è‡‚è†ºè‡‰è‡è‡‘è‡™è‡˜è‡ˆè‡šè‡Ÿè‡ è‡§è‡ºè‡»è‡¾èˆèˆ‚èˆ…èˆ‡èˆŠèˆèˆèˆ–èˆ©èˆ«èˆ¸èˆ³è‰€è‰™è‰˜è‰è‰šè‰Ÿè‰¤'],
  [0xe480, 'è‰¢è‰¨è‰ªè‰«èˆ®è‰±è‰·è‰¸è‰¾èŠèŠ’èŠ«èŠŸèŠ»èŠ¬è‹¡è‹£è‹Ÿè‹’è‹´è‹³è‹ºèŽ“èŒƒè‹»è‹¹è‹žèŒ†è‹œèŒ‰è‹™èŒµèŒ´èŒ–èŒ²èŒ±è€èŒ¹èè…èŒ¯èŒ«èŒ—èŒ˜èŽ…èŽšèŽªèŽŸèŽ¢èŽ–èŒ£èŽŽèŽ‡èŽŠè¼èŽµè³èµèŽ èŽ‰èŽ¨è´è“è«èŽè½èƒè˜è‹èè·è‡è è²èè¢è èŽ½è¸è”†è»è‘­èªè¼è•šè’„è‘·è‘«è’­è‘®è’‚è‘©è‘†è¬è‘¯è‘¹èµè“Šè‘¢è’¹è’¿è’Ÿè“™è“è’»è“šè“è“è“†è“–è’¡è”¡è“¿è“´è”—è”˜è”¬è”Ÿè”•è””è“¼è•€è•£è•˜è•ˆ'],
  [0xe540, 'è•è˜‚è•‹è••è–€è–¤è–ˆè–‘è–Šè–¨è•­è–”è–›è—ªè–‡è–œè•·è•¾è–è—‰è–ºè—è–¹è—è—•è—è—¥è—œè—¹è˜Šè˜“è˜‹è—¾è—ºè˜†è˜¢è˜šè˜°è˜¿è™ä¹•è™”è™Ÿè™§è™±èš“èš£èš©èšªèš‹èšŒèš¶èš¯è›„è›†èš°è›‰è £èš«è›”è›žè›©è›¬'],
  [0xe580, 'è›Ÿè››è›¯èœ’èœ†èœˆèœ€èœƒè›»èœ‘èœ‰èœè›¹èœŠèœ´èœ¿èœ·èœ»èœ¥èœ©èœšè èŸè¸èŒèŽè´è—è¨è®è™è“è£èªè …èž¢èžŸèž‚èž¯èŸ‹èž½èŸ€èŸé›–èž«èŸ„èž³èŸ‡èŸ†èž»èŸ¯èŸ²èŸ è è èŸ¾èŸ¶èŸ·è ŽèŸ’è ‘è –è •è ¢è ¡è ±è ¶è ¹è §è »è¡„è¡‚è¡’è¡™è¡žè¡¢è¡«è¢è¡¾è¢žè¡µè¡½è¢µè¡²è¢‚è¢—è¢’è¢®è¢™è¢¢è¢è¢¤è¢°è¢¿è¢±è£ƒè£„è£”è£˜è£™è£è£¹è¤‚è£¼è£´è£¨è£²è¤„è¤Œè¤Šè¤“è¥ƒè¤žè¤¥è¤ªè¤«è¥è¥„è¤»è¤¶è¤¸è¥Œè¤è¥ è¥ž'],
  [0xe640, 'è¥¦è¥¤è¥­è¥ªè¥¯è¥´è¥·è¥¾è¦ƒè¦ˆè¦Šè¦“è¦˜è¦¡è¦©è¦¦è¦¬è¦¯è¦²è¦ºè¦½è¦¿è§€è§šè§œè§è§§è§´è§¸è¨ƒè¨–è¨è¨Œè¨›è¨è¨¥è¨¶è©è©›è©’è©†è©ˆè©¼è©­è©¬è©¢èª…èª‚èª„èª¨èª¡èª‘èª¥èª¦èªšèª£è«„è«è«‚è«šè««è«³è«§'],
  [0xe680, 'è«¤è«±è¬”è« è«¢è«·è«žè«›è¬Œè¬‡è¬šè«¡è¬–è¬è¬—è¬ è¬³éž«è¬¦è¬«è¬¾è¬¨è­è­Œè­è­Žè­‰è­–è­›è­šè­«è­Ÿè­¬è­¯è­´è­½è®€è®Œè®Žè®’è®“è®–è®™è®šè°ºè±è°¿è±ˆè±Œè±Žè±è±•è±¢è±¬è±¸è±ºè²‚è²‰è²…è²Šè²è²Žè²”è±¼è²˜æˆè²­è²ªè²½è²²è²³è²®è²¶è³ˆè³è³¤è³£è³šè³½è³ºè³»è´„è´…è´Šè´‡è´è´è´é½Žè´“è³è´”è´–èµ§èµ­èµ±èµ³è¶è¶™è·‚è¶¾è¶ºè·è·šè·–è·Œè·›è·‹è·ªè·«è·Ÿè·£è·¼è¸ˆè¸‰è·¿è¸è¸žè¸è¸Ÿè¹‚è¸µè¸°è¸´è¹Š'],
  [0xe740, 'è¹‡è¹‰è¹Œè¹è¹ˆè¹™è¹¤è¹ è¸ªè¹£è¹•è¹¶è¹²è¹¼èºèº‡èº…èº„èº‹èºŠèº“èº‘èº”èº™èºªèº¡èº¬èº°è»†èº±èº¾è»…è»ˆè»‹è»›è»£è»¼è»»è»«è»¾è¼Šè¼…è¼•è¼’è¼™è¼“è¼œè¼Ÿè¼›è¼Œè¼¦è¼³è¼»è¼¹è½…è½‚è¼¾è½Œè½‰è½†è½Žè½—è½œ'],
  [0xe780, 'è½¢è½£è½¤è¾œè¾Ÿè¾£è¾­è¾¯è¾·è¿šè¿¥è¿¢è¿ªè¿¯é‚‡è¿´é€…è¿¹è¿ºé€‘é€•é€¡é€é€žé€–é€‹é€§é€¶é€µé€¹è¿¸ééé‘é’é€Žé‰é€¾é–é˜éžé¨é¯é¶éš¨é²é‚‚é½é‚é‚€é‚Šé‚‰é‚é‚¨é‚¯é‚±é‚µéƒ¢éƒ¤æ‰ˆéƒ›é„‚é„’é„™é„²é„°é…Šé…–é…˜é…£é…¥é…©é…³é…²é†‹é†‰é†‚é†¢é†«é†¯é†ªé†µé†´é†ºé‡€é‡é‡‰é‡‹é‡é‡–é‡Ÿé‡¡é‡›é‡¼é‡µé‡¶éˆžé‡¿éˆ”éˆ¬éˆ•éˆ‘é‰žé‰—é‰…é‰‰é‰¤é‰ˆéŠ•éˆ¿é‰‹é‰éŠœéŠ–éŠ“éŠ›é‰šé‹éŠ¹éŠ·é‹©éŒé‹ºé„éŒ®'],
  [0xe840, 'éŒ™éŒ¢éŒšéŒ£éŒºéŒµéŒ»éœé é¼é®é–éŽ°éŽ¬éŽ­éŽ”éŽ¹é–é—é¨é¥é˜éƒéééˆé¤éšé”é“éƒé‡éé¶é«éµé¡éºé‘é‘’é‘„é‘›é‘ é‘¢é‘žé‘ªéˆ©é‘°é‘µé‘·é‘½é‘šé‘¼é‘¾é’é‘¿é–‚é–‡é–Šé–”é––é–˜é–™'],
  [0xe880, 'é– é–¨é–§é–­é–¼é–»é–¹é–¾é—Šæ¿¶é—ƒé—é—Œé—•é—”é—–é—œé—¡é—¥é—¢é˜¡é˜¨é˜®é˜¯é™‚é™Œé™é™‹é™·é™œé™žé™é™Ÿé™¦é™²é™¬éšéš˜éš•éš—éšªéš§éš±éš²éš°éš´éš¶éš¸éš¹é›Žé›‹é›‰é›è¥é›œéœé›•é›¹éœ„éœ†éœˆéœ“éœŽéœ‘éœéœ–éœ™éœ¤éœªéœ°éœ¹éœ½éœ¾é„é†éˆé‚é‰éœé é¤é¦é¨å‹’é«é±é¹éž…é¼éžéºéž†éž‹éžéžéžœéž¨éž¦éž£éž³éž´éŸƒéŸ†éŸˆéŸ‹éŸœéŸ­é½éŸ²ç«ŸéŸ¶éŸµé é Œé ¸é ¤é ¡é ·é ½é¡†é¡é¡‹é¡«é¡¯é¡°'],
  [0xe940, 'é¡±é¡´é¡³é¢ªé¢¯é¢±é¢¶é£„é£ƒé£†é£©é£«é¤ƒé¤‰é¤’é¤”é¤˜é¤¡é¤é¤žé¤¤é¤ é¤¬é¤®é¤½é¤¾é¥‚é¥‰é¥…é¥é¥‹é¥‘é¥’é¥Œé¥•é¦—é¦˜é¦¥é¦­é¦®é¦¼é§Ÿé§›é§é§˜é§‘é§­é§®é§±é§²é§»é§¸é¨é¨é¨…é§¢é¨™é¨«é¨·é©…é©‚é©€é©ƒ'],
  [0xe980, 'é¨¾é©•é©é©›é©—é©Ÿé©¢é©¥é©¤é©©é©«é©ªéª­éª°éª¼é«€é«é«‘é«“é«”é«žé«Ÿé«¢é«£é«¦é«¯é««é«®é«´é«±é«·é«»é¬†é¬˜é¬šé¬Ÿé¬¢é¬£é¬¥é¬§é¬¨é¬©é¬ªé¬®é¬¯é¬²é­„é­ƒé­é­é­Žé­‘é­˜é­´é®“é®ƒé®‘é®–é®—é®Ÿé® é®¨é®´é¯€é¯Šé®¹é¯†é¯é¯‘é¯’é¯£é¯¢é¯¤é¯”é¯¡é°ºé¯²é¯±é¯°é°•é°”é°‰é°“é°Œé°†é°ˆé°’é°Šé°„é°®é°›é°¥é°¤é°¡é°°é±‡é°²é±†é°¾é±šé± é±§é±¶é±¸é³§é³¬é³°é´‰é´ˆé³«é´ƒé´†é´ªé´¦é¶¯é´£é´Ÿéµ„é´•é´’éµé´¿é´¾éµ†éµˆ'],
  [0xea40, 'éµéµžéµ¤éµ‘éµéµ™éµ²é¶‰é¶‡é¶«éµ¯éµºé¶šé¶¤é¶©é¶²é·„é·é¶»é¶¸é¶ºé·†é·é·‚é·™é·“é·¸é·¦é·­é·¯é·½é¸šé¸›é¸žé¹µé¹¹é¹½éºéºˆéº‹éºŒéº’éº•éº‘éºéº¥éº©éº¸éºªéº­é¡é»Œé»Žé»é»é»”é»œé»žé»é» é»¥é»¨é»¯'],
  [0xea80, 'é»´é»¶é»·é»¹é»»é»¼é»½é¼‡é¼ˆçš·é¼•é¼¡é¼¬é¼¾é½Šé½’é½”é½£é½Ÿé½ é½¡é½¦é½§é½¬é½ªé½·é½²é½¶é¾•é¾œé¾ å ¯æ§‡é™ç‘¤å‡œç†™']
]

module.exports = function toSJIS (utf8Char) {
  if (!utf8Char || utf8Char === '') return

  for (var i = 0; i < SJIS_UTF8.length; i++) {
    var kanji = SJIS_UTF8[i][1]

    var posIndex = kanji.indexOf(utf8Char)
    if (posIndex >= 0) {
      return SJIS_UTF8[i][0] + posIndex
    }
  }
}

var canPromise = require('./can-promise')

var QRCode = require('./core/qrcode')
var CanvasRenderer = require('./renderer/canvas')
var SvgRenderer = require('./renderer/svg-tag.js')

function renderCanvas (renderFunc, canvas, text, opts, cb) {
  var args = [].slice.call(arguments, 1)
  var argsNum = args.length
  var isLastArgCb = typeof args[argsNum - 1] === 'function'

  if (!isLastArgCb && !canPromise()) {
    throw new Error('Callback required as last argument')
  }

  if (isLastArgCb) {
    if (argsNum < 2) {
      throw new Error('Too few arguments provided')
    }

    if (argsNum === 2) {
      cb = text
      text = canvas
      canvas = opts = undefined
    } else if (argsNum === 3) {
      if (canvas.getContext && typeof cb === 'undefined') {
        cb = opts
        opts = undefined
      } else {
        cb = opts
        opts = text
        text = canvas
        canvas = undefined
      }
    }
  } else {
    if (argsNum < 1) {
      throw new Error('Too few arguments provided')
    }

    if (argsNum === 1) {
      text = canvas
      canvas = opts = undefined
    } else if (argsNum === 2 && !canvas.getContext) {
      opts = text
      text = canvas
      canvas = undefined
    }

    return new Promise(function (resolve, reject) {
      try {
        var data = QRCode.create(text, opts)
        resolve(renderFunc(data, canvas, opts))
      } catch (e) {
        reject(e)
      }
    })
  }

  try {
    var data = QRCode.create(text, opts)
    cb(null, renderFunc(data, canvas, opts))
  } catch (e) {
    cb(e)
  }
}

exports.create = QRCode.create
exports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)
exports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)

// only svg for now.
exports.toString = renderCanvas.bind(null, function (data, _, opts) {
  return SvgRenderer.render(data, opts)
})
// can-promise has a crash in some versions of react native that dont have
// standard global objects
// https://github.com/soldair/node-qrcode/issues/157

module.exports = function () {
  return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then
}
/**
 * Alignment pattern are fixed reference pattern in defined positions
 * in a matrix symbology, which enables the decode software to re-synchronise
 * the coordinate mapping of the image modules in the event of moderate amounts
 * of distortion of the image.
 *
 * Alignment patterns are present only in QR Code symbols of version 2 or larger
 * and their number depends on the symbol version.
 */

var getSymbolSize = require('./utils').getSymbolSize

/**
 * Calculate the row/column coordinates of the center module of each alignment pattern
 * for the specified QR Code version.
 *
 * The alignment patterns are positioned symmetrically on either side of the diagonal
 * running from the top left corner of the symbol to the bottom right corner.
 *
 * Since positions are simmetrical only half of the coordinates are returned.
 * Each item of the array will represent in turn the x and y coordinate.
 * @see {@link getPositions}
 *
 * @param  {Number} version QR Code version
 * @return {Array}          Array of coordinate
 */
exports.getRowColCoords = function getRowColCoords (version) {
  if (version === 1) return []

  var posCount = Math.floor(version / 7) + 2
  var size = getSymbolSize(version)
  var intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2
  var positions = [size - 7] // Last coord is always (size - 7)

  for (var i = 1; i < posCount - 1; i++) {
    positions[i] = positions[i - 1] - intervals
  }

  positions.push(6) // First coord is always 6

  return positions.reverse()
}

/**
 * Returns an array containing the positions of each alignment pattern.
 * Each array's element represent the center point of the pattern as (x, y) coordinates
 *
 * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}
 * and filtering out the items that overlaps with finder pattern
 *
 * @example
 * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.
 * The alignment patterns, therefore, are to be centered on (row, column)
 * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).
 * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns
 * and are not therefore used for alignment patterns.
 *
 * var pos = getPositions(7)
 * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]
 *
 * @param  {Number} version QR Code version
 * @return {Array}          Array of coordinates
 */
exports.getPositions = function getPositions (version) {
  var coords = []
  var pos = exports.getRowColCoords(version)
  var posLength = pos.length

  for (var i = 0; i < posLength; i++) {
    for (var j = 0; j < posLength; j++) {
      // Skip if position is occupied by finder patterns
      if ((i === 0 && j === 0) ||             // top-left
          (i === 0 && j === posLength - 1) || // bottom-left
          (i === posLength - 1 && j === 0)) { // top-right
        continue
      }

      coords.push([pos[i], pos[j]])
    }
  }

  return coords
}
var Mode = require('./mode')

/**
 * Array of characters available in alphanumeric mode
 *
 * As per QR Code specification, to each character
 * is assigned a value from 0 to 44 which in this case coincides
 * with the array index
 *
 * @type {Array}
 */
var ALPHA_NUM_CHARS = [
  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
  ' ', '$', '%', '*', '+', '-', '.', '/', ':'
]

function AlphanumericData (data) {
  this.mode = Mode.ALPHANUMERIC
  this.data = data
}

AlphanumericData.getBitsLength = function getBitsLength (length) {
  return 11 * Math.floor(length / 2) + 6 * (length % 2)
}

AlphanumericData.prototype.getLength = function getLength () {
  return this.data.length
}

AlphanumericData.prototype.getBitsLength = function getBitsLength () {
  return AlphanumericData.getBitsLength(this.data.length)
}

AlphanumericData.prototype.write = function write (bitBuffer) {
  var i

  // Input data characters are divided into groups of two characters
  // and encoded as 11-bit binary codes.
  for (i = 0; i + 2 <= this.data.length; i += 2) {
    // The character value of the first character is multiplied by 45
    var value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45

    // The character value of the second digit is added to the product
    value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])

    // The sum is then stored as 11-bit binary number
    bitBuffer.put(value, 11)
  }

  // If the number of input data characters is not a multiple of two,
  // the character value of the final character is encoded as a 6-bit binary number.
  if (this.data.length % 2) {
    bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)
  }
}

module.exports = AlphanumericData
function BitBuffer () {
  this.buffer = []
  this.length = 0
}

BitBuffer.prototype = {

  get: function (index) {
    var bufIndex = Math.floor(index / 8)
    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1
  },

  put: function (num, length) {
    for (var i = 0; i < length; i++) {
      this.putBit(((num >>> (length - i - 1)) & 1) === 1)
    }
  },

  getLengthInBits: function () {
    return this.length
  },

  putBit: function (bit) {
    var bufIndex = Math.floor(this.length / 8)
    if (this.buffer.length <= bufIndex) {
      this.buffer.push(0)
    }

    if (bit) {
      this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))
    }

    this.length++
  }
}

module.exports = BitBuffer
var BufferUtil = require('../utils/buffer')

/**
 * Helper class to handle QR Code symbol modules
 *
 * @param {Number} size Symbol size
 */
function BitMatrix (size) {
  if (!size || size < 1) {
    throw new Error('BitMatrix size must be defined and greater than 0')
  }

  this.size = size
  this.data = BufferUtil.alloc(size * size)
  this.reservedBit = BufferUtil.alloc(size * size)
}

/**
 * Set bit value at specified location
 * If reserved flag is set, this bit will be ignored during masking process
 *
 * @param {Number}  row
 * @param {Number}  col
 * @param {Boolean} value
 * @param {Boolean} reserved
 */
BitMatrix.prototype.set = function (row, col, value, reserved) {
  var index = row * this.size + col
  this.data[index] = value
  if (reserved) this.reservedBit[index] = true
}

/**
 * Returns bit value at specified location
 *
 * @param  {Number}  row
 * @param  {Number}  col
 * @return {Boolean}
 */
BitMatrix.prototype.get = function (row, col) {
  return this.data[row * this.size + col]
}

/**
 * Applies xor operator at specified location
 * (used during masking process)
 *
 * @param {Number}  row
 * @param {Number}  col
 * @param {Boolean} value
 */
BitMatrix.prototype.xor = function (row, col, value) {
  this.data[row * this.size + col] ^= value
}

/**
 * Check if bit at specified location is reserved
 *
 * @param {Number}   row
 * @param {Number}   col
 * @return {Boolean}
 */
BitMatrix.prototype.isReserved = function (row, col) {
  return this.reservedBit[row * this.size + col]
}

module.exports = BitMatrix
var BufferUtil = require('../utils/buffer')
var Mode = require('./mode')

function ByteData (data) {
  this.mode = Mode.BYTE
  this.data = BufferUtil.from(data)
}

ByteData.getBitsLength = function getBitsLength (length) {
  return length * 8
}

ByteData.prototype.getLength = function getLength () {
  return this.data.length
}

ByteData.prototype.getBitsLength = function getBitsLength () {
  return ByteData.getBitsLength(this.data.length)
}

ByteData.prototype.write = function (bitBuffer) {
  for (var i = 0, l = this.data.length; i < l; i++) {
    bitBuffer.put(this.data[i], 8)
  }
}

module.exports = ByteData
var ECLevel = require('./error-correction-level')

var EC_BLOCKS_TABLE = [
// L  M  Q  H
  1, 1, 1, 1,
  1, 1, 1, 1,
  1, 1, 2, 2,
  1, 2, 2, 4,
  1, 2, 4, 4,
  2, 4, 4, 4,
  2, 4, 6, 5,
  2, 4, 6, 6,
  2, 5, 8, 8,
  4, 5, 8, 8,
  4, 5, 8, 11,
  4, 8, 10, 11,
  4, 9, 12, 16,
  4, 9, 16, 16,
  6, 10, 12, 18,
  6, 10, 17, 16,
  6, 11, 16, 19,
  6, 13, 18, 21,
  7, 14, 21, 25,
  8, 16, 20, 25,
  8, 17, 23, 25,
  9, 17, 23, 34,
  9, 18, 25, 30,
  10, 20, 27, 32,
  12, 21, 29, 35,
  12, 23, 34, 37,
  12, 25, 34, 40,
  13, 26, 35, 42,
  14, 28, 38, 45,
  15, 29, 40, 48,
  16, 31, 43, 51,
  17, 33, 45, 54,
  18, 35, 48, 57,
  19, 37, 51, 60,
  19, 38, 53, 63,
  20, 40, 56, 66,
  21, 43, 59, 70,
  22, 45, 62, 74,
  24, 47, 65, 77,
  25, 49, 68, 81
]

var EC_CODEWORDS_TABLE = [
// L  M  Q  H
  7, 10, 13, 17,
  10, 16, 22, 28,
  15, 26, 36, 44,
  20, 36, 52, 64,
  26, 48, 72, 88,
  36, 64, 96, 112,
  40, 72, 108, 130,
  48, 88, 132, 156,
  60, 110, 160, 192,
  72, 130, 192, 224,
  80, 150, 224, 264,
  96, 176, 260, 308,
  104, 198, 288, 352,
  120, 216, 320, 384,
  132, 240, 360, 432,
  144, 280, 408, 480,
  168, 308, 448, 532,
  180, 338, 504, 588,
  196, 364, 546, 650,
  224, 416, 600, 700,
  224, 442, 644, 750,
  252, 476, 690, 816,
  270, 504, 750, 900,
  300, 560, 810, 960,
  312, 588, 870, 1050,
  336, 644, 952, 1110,
  360, 700, 1020, 1200,
  390, 728, 1050, 1260,
  420, 784, 1140, 1350,
  450, 812, 1200, 1440,
  480, 868, 1290, 1530,
  510, 924, 1350, 1620,
  540, 980, 1440, 1710,
  570, 1036, 1530, 1800,
  570, 1064, 1590, 1890,
  600, 1120, 1680, 1980,
  630, 1204, 1770, 2100,
  660, 1260, 1860, 2220,
  720, 1316, 1950, 2310,
  750, 1372, 2040, 2430
]

/**
 * Returns the number of error correction block that the QR Code should contain
 * for the specified version and error correction level.
 *
 * @param  {Number} version              QR Code version
 * @param  {Number} errorCorrectionLevel Error correction level
 * @return {Number}                      Number of error correction blocks
 */
exports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {
  switch (errorCorrectionLevel) {
    case ECLevel.L:
      return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]
    case ECLevel.M:
      return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]
    case ECLevel.Q:
      return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]
    case ECLevel.H:
      return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]
    default:
      return undefined
  }
}

/**
 * Returns the number of error correction codewords to use for the specified
 * version and error correction level.
 *
 * @param  {Number} version              QR Code version
 * @param  {Number} errorCorrectionLevel Error correction level
 * @return {Number}                      Number of error correction codewords
 */
exports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {
  switch (errorCorrectionLevel) {
    case ECLevel.L:
      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]
    case ECLevel.M:
      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]
    case ECLevel.Q:
      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]
    case ECLevel.H:
      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]
    default:
      return undefined
  }
}
exports.L = { bit: 1 }
exports.M = { bit: 0 }
exports.Q = { bit: 3 }
exports.H = { bit: 2 }

function fromString (string) {
  if (typeof string !== 'string') {
    throw new Error('Param is not a string')
  }

  var lcStr = string.toLowerCase()

  switch (lcStr) {
    case 'l':
    case 'low':
      return exports.L

    case 'm':
    case 'medium':
      return exports.M

    case 'q':
    case 'quartile':
      return exports.Q

    case 'h':
    case 'high':
      return exports.H

    default:
      throw new Error('Unknown EC Level: ' + string)
  }
}

exports.isValid = function isValid (level) {
  return level && typeof level.bit !== 'undefined' &&
    level.bit >= 0 && level.bit < 4
}

exports.from = function from (value, defaultValue) {
  if (exports.isValid(value)) {
    return value
  }

  try {
    return fromString(value)
  } catch (e) {
    return defaultValue
  }
}
var getSymbolSize = require('./utils').getSymbolSize
var FINDER_PATTERN_SIZE = 7

/**
 * Returns an array containing the positions of each finder pattern.
 * Each array's element represent the top-left point of the pattern as (x, y) coordinates
 *
 * @param  {Number} version QR Code version
 * @return {Array}          Array of coordinates
 */
exports.getPositions = function getPositions (version) {
  var size = getSymbolSize(version)

  return [
    // top-left
    [0, 0],
    // top-right
    [size - FINDER_PATTERN_SIZE, 0],
    // bottom-left
    [0, size - FINDER_PATTERN_SIZE]
  ]
}
var Utils = require('./utils')

var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
var G15_BCH = Utils.getBCHDigit(G15)

/**
 * Returns format information with relative error correction bits
 *
 * The format information is a 15-bit sequence containing 5 data bits,
 * with 10 error correction bits calculated using the (15, 5) BCH code.
 *
 * @param  {Number} errorCorrectionLevel Error correction level
 * @param  {Number} mask                 Mask pattern
 * @return {Number}                      Encoded format information bits
 */
exports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {
  var data = ((errorCorrectionLevel.bit << 3) | mask)
  var d = data << 10

  while (Utils.getBCHDigit(d) - G15_BCH >= 0) {
    d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))
  }

  // xor final data with mask pattern in order to ensure that
  // no combination of Error Correction Level and data mask pattern
  // will result in an all-zero data string
  return ((data << 10) | d) ^ G15_MASK
}
var BufferUtil = require('../utils/buffer')

var EXP_TABLE = BufferUtil.alloc(512)
var LOG_TABLE = BufferUtil.alloc(256)
/**
 * Precompute the log and anti-log tables for faster computation later
 *
 * For each possible value in the galois field 2^8, we will pre-compute
 * the logarithm and anti-logarithm (exponential) of this value
 *
 * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}
 */
;(function initTables () {
  var x = 1
  for (var i = 0; i < 255; i++) {
    EXP_TABLE[i] = x
    LOG_TABLE[x] = i

    x <<= 1 // multiply by 2

    // The QR code specification says to use byte-wise modulo 100011101 arithmetic.
    // This means that when a number is 256 or larger, it should be XORed with 0x11D.
    if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)
      x ^= 0x11D
    }
  }

  // Optimization: double the size of the anti-log table so that we don't need to mod 255 to
  // stay inside the bounds (because we will mainly use this table for the multiplication of
  // two GF numbers, no more).
  // @see {@link mul}
  for (i = 255; i < 512; i++) {
    EXP_TABLE[i] = EXP_TABLE[i - 255]
  }
}())

/**
 * Returns log value of n inside Galois Field
 *
 * @param  {Number} n
 * @return {Number}
 */
exports.log = function log (n) {
  if (n < 1) throw new Error('log(' + n + ')')
  return LOG_TABLE[n]
}

/**
 * Returns anti-log value of n inside Galois Field
 *
 * @param  {Number} n
 * @return {Number}
 */
exports.exp = function exp (n) {
  return EXP_TABLE[n]
}

/**
 * Multiplies two number inside Galois Field
 *
 * @param  {Number} x
 * @param  {Number} y
 * @return {Number}
 */
exports.mul = function mul (x, y) {
  if (x === 0 || y === 0) return 0

  // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized
  // @see {@link initTables}
  return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]
}
var Mode = require('./mode')
var Utils = require('./utils')

function KanjiData (data) {
  this.mode = Mode.KANJI
  this.data = data
}

KanjiData.getBitsLength = function getBitsLength (length) {
  return length * 13
}

KanjiData.prototype.getLength = function getLength () {
  return this.data.length
}

KanjiData.prototype.getBitsLength = function getBitsLength () {
  return KanjiData.getBitsLength(this.data.length)
}

KanjiData.prototype.write = function (bitBuffer) {
  var i

  // In the Shift JIS system, Kanji characters are represented by a two byte combination.
  // These byte values are shifted from the JIS X 0208 values.
  // JIS X 0208 gives details of the shift coded representation.
  for (i = 0; i < this.data.length; i++) {
    var value = Utils.toSJIS(this.data[i])

    // For characters with Shift JIS values from 0x8140 to 0x9FFC:
    if (value >= 0x8140 && value <= 0x9FFC) {
      // Subtract 0x8140 from Shift JIS value
      value -= 0x8140

    // For characters with Shift JIS values from 0xE040 to 0xEBBF
    } else if (value >= 0xE040 && value <= 0xEBBF) {
      // Subtract 0xC140 from Shift JIS value
      value -= 0xC140
    } else {
      throw new Error(
        'Invalid SJIS character: ' + this.data[i] + '\n' +
        'Make sure your charset is UTF-8')
    }

    // Multiply most significant byte of result by 0xC0
    // and add least significant byte to product
    value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)

    // Convert result to a 13-bit binary string
    bitBuffer.put(value, 13)
  }
}

module.exports = KanjiData
/**
 * Data mask pattern reference
 * @type {Object}
 */
exports.Patterns = {
  PATTERN000: 0,
  PATTERN001: 1,
  PATTERN010: 2,
  PATTERN011: 3,
  PATTERN100: 4,
  PATTERN101: 5,
  PATTERN110: 6,
  PATTERN111: 7
}

/**
 * Weighted penalty scores for the undesirable features
 * @type {Object}
 */
var PenaltyScores = {
  N1: 3,
  N2: 3,
  N3: 40,
  N4: 10
}

/**
 * Check if mask pattern value is valid
 *
 * @param  {Number}  mask    Mask pattern
 * @return {Boolean}         true if valid, false otherwise
 */
exports.isValid = function isValid (mask) {
  return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7
}

/**
 * Returns mask pattern from a value.
 * If value is not valid, returns undefined
 *
 * @param  {Number|String} value        Mask pattern value
 * @return {Number}                     Valid mask pattern or undefined
 */
exports.from = function from (value) {
  return exports.isValid(value) ? parseInt(value, 10) : undefined
}

/**
* Find adjacent modules in row/column with the same color
* and assign a penalty value.
*
* Points: N1 + i
* i is the amount by which the number of adjacent modules of the same color exceeds 5
*/
exports.getPenaltyN1 = function getPenaltyN1 (data) {
  var size = data.size
  var points = 0
  var sameCountCol = 0
  var sameCountRow = 0
  var lastCol = null
  var lastRow = null

  for (var row = 0; row < size; row++) {
    sameCountCol = sameCountRow = 0
    lastCol = lastRow = null

    for (var col = 0; col < size; col++) {
      var module = data.get(row, col)
      if (module === lastCol) {
        sameCountCol++
      } else {
        if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)
        lastCol = module
        sameCountCol = 1
      }

      module = data.get(col, row)
      if (module === lastRow) {
        sameCountRow++
      } else {
        if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)
        lastRow = module
        sameCountRow = 1
      }
    }

    if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)
    if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)
  }

  return points
}

/**
 * Find 2x2 blocks with the same color and assign a penalty value
 *
 * Points: N2 * (m - 1) * (n - 1)
 */
exports.getPenaltyN2 = function getPenaltyN2 (data) {
  var size = data.size
  var points = 0

  for (var row = 0; row < size - 1; row++) {
    for (var col = 0; col < size - 1; col++) {
      var last = data.get(row, col) +
        data.get(row, col + 1) +
        data.get(row + 1, col) +
        data.get(row + 1, col + 1)

      if (last === 4 || last === 0) points++
    }
  }

  return points * PenaltyScores.N2
}

/**
 * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,
 * preceded or followed by light area 4 modules wide
 *
 * Points: N3 * number of pattern found
 */
exports.getPenaltyN3 = function getPenaltyN3 (data) {
  var size = data.size
  var points = 0
  var bitsCol = 0
  var bitsRow = 0

  for (var row = 0; row < size; row++) {
    bitsCol = bitsRow = 0
    for (var col = 0; col < size; col++) {
      bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)
      if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++

      bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)
      if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++
    }
  }

  return points * PenaltyScores.N3
}

/**
 * Calculate proportion of dark modules in entire symbol
 *
 * Points: N4 * k
 *
 * k is the rating of the deviation of the proportion of dark modules
 * in the symbol from 50% in steps of 5%
 */
exports.getPenaltyN4 = function getPenaltyN4 (data) {
  var darkCount = 0
  var modulesCount = data.data.length

  for (var i = 0; i < modulesCount; i++) darkCount += data.data[i]

  var k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)

  return k * PenaltyScores.N4
}

/**
 * Return mask value at given position
 *
 * @param  {Number} maskPattern Pattern reference value
 * @param  {Number} i           Row
 * @param  {Number} j           Column
 * @return {Boolean}            Mask value
 */
function getMaskAt (maskPattern, i, j) {
  switch (maskPattern) {
    case exports.Patterns.PATTERN000: return (i + j) % 2 === 0
    case exports.Patterns.PATTERN001: return i % 2 === 0
    case exports.Patterns.PATTERN010: return j % 3 === 0
    case exports.Patterns.PATTERN011: return (i + j) % 3 === 0
    case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0
    case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0
    case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0
    case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0

    default: throw new Error('bad maskPattern:' + maskPattern)
  }
}

/**
 * Apply a mask pattern to a BitMatrix
 *
 * @param  {Number}    pattern Pattern reference number
 * @param  {BitMatrix} data    BitMatrix data
 */
exports.applyMask = function applyMask (pattern, data) {
  var size = data.size

  for (var col = 0; col < size; col++) {
    for (var row = 0; row < size; row++) {
      if (data.isReserved(row, col)) continue
      data.xor(row, col, getMaskAt(pattern, row, col))
    }
  }
}

/**
 * Returns the best mask pattern for data
 *
 * @param  {BitMatrix} data
 * @return {Number} Mask pattern reference number
 */
exports.getBestMask = function getBestMask (data, setupFormatFunc) {
  var numPatterns = Object.keys(exports.Patterns).length
  var bestPattern = 0
  var lowerPenalty = Infinity

  for (var p = 0; p < numPatterns; p++) {
    setupFormatFunc(p)
    exports.applyMask(p, data)

    // Calculate penalty
    var penalty =
      exports.getPenaltyN1(data) +
      exports.getPenaltyN2(data) +
      exports.getPenaltyN3(data) +
      exports.getPenaltyN4(data)

    // Undo previously applied mask
    exports.applyMask(p, data)

    if (penalty < lowerPenalty) {
      lowerPenalty = penalty
      bestPattern = p
    }
  }

  return bestPattern
}
var VersionCheck = require('./version-check')
var Regex = require('./regex')

/**
 * Numeric mode encodes data from the decimal digit set (0 - 9)
 * (byte values 30HEX to 39HEX).
 * Normally, 3 data characters are represented by 10 bits.
 *
 * @type {Object}
 */
exports.NUMERIC = {
  id: 'Numeric',
  bit: 1 << 0,
  ccBits: [10, 12, 14]
}

/**
 * Alphanumeric mode encodes data from a set of 45 characters,
 * i.e. 10 numeric digits (0 - 9),
 *      26 alphabetic characters (A - Z),
 *   and 9 symbols (SP, $, %, *, +, -, ., /, :).
 * Normally, two input characters are represented by 11 bits.
 *
 * @type {Object}
 */
exports.ALPHANUMERIC = {
  id: 'Alphanumeric',
  bit: 1 << 1,
  ccBits: [9, 11, 13]
}

/**
 * In byte mode, data is encoded at 8 bits per character.
 *
 * @type {Object}
 */
exports.BYTE = {
  id: 'Byte',
  bit: 1 << 2,
  ccBits: [8, 16, 16]
}

/**
 * The Kanji mode efficiently encodes Kanji characters in accordance with
 * the Shift JIS system based on JIS X 0208.
 * The Shift JIS values are shifted from the JIS X 0208 values.
 * JIS X 0208 gives details of the shift coded representation.
 * Each two-byte character value is compacted to a 13-bit binary codeword.
 *
 * @type {Object}
 */
exports.KANJI = {
  id: 'Kanji',
  bit: 1 << 3,
  ccBits: [8, 10, 12]
}

/**
 * Mixed mode will contain a sequences of data in a combination of any of
 * the modes described above
 *
 * @type {Object}
 */
exports.MIXED = {
  bit: -1
}

/**
 * Returns the number of bits needed to store the data length
 * according to QR Code specifications.
 *
 * @param  {Mode}   mode    Data mode
 * @param  {Number} version QR Code version
 * @return {Number}         Number of bits
 */
exports.getCharCountIndicator = function getCharCountIndicator (mode, version) {
  if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)

  if (!VersionCheck.isValid(version)) {
    throw new Error('Invalid version: ' + version)
  }

  if (version >= 1 && version < 10) return mode.ccBits[0]
  else if (version < 27) return mode.ccBits[1]
  return mode.ccBits[2]
}

/**
 * Returns the most efficient mode to store the specified data
 *
 * @param  {String} dataStr Input data string
 * @return {Mode}           Best mode
 */
exports.getBestModeForData = function getBestModeForData (dataStr) {
  if (Regex.testNumeric(dataStr)) return exports.NUMERIC
  else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC
  else if (Regex.testKanji(dataStr)) return exports.KANJI
  else return exports.BYTE
}

/**
 * Return mode name as string
 *
 * @param {Mode} mode Mode object
 * @returns {String}  Mode name
 */
exports.toString = function toString (mode) {
  if (mode && mode.id) return mode.id
  throw new Error('Invalid mode')
}

/**
 * Check if input param is a valid mode object
 *
 * @param   {Mode}    mode Mode object
 * @returns {Boolean} True if valid mode, false otherwise
 */
exports.isValid = function isValid (mode) {
  return mode && mode.bit && mode.ccBits
}

/**
 * Get mode object from its name
 *
 * @param   {String} string Mode name
 * @returns {Mode}          Mode object
 */
function fromString (string) {
  if (typeof string !== 'string') {
    throw new Error('Param is not a string')
  }

  var lcStr = string.toLowerCase()

  switch (lcStr) {
    case 'numeric':
      return exports.NUMERIC
    case 'alphanumeric':
      return exports.ALPHANUMERIC
    case 'kanji':
      return exports.KANJI
    case 'byte':
      return exports.BYTE
    default:
      throw new Error('Unknown mode: ' + string)
  }
}

/**
 * Returns mode from a value.
 * If value is not a valid mode, returns defaultValue
 *
 * @param  {Mode|String} value        Encoding mode
 * @param  {Mode}        defaultValue Fallback value
 * @return {Mode}                     Encoding mode
 */
exports.from = function from (value, defaultValue) {
  if (exports.isValid(value)) {
    return value
  }

  try {
    return fromString(value)
  } catch (e) {
    return defaultValue
  }
}
var Mode = require('./mode')

function NumericData (data) {
  this.mode = Mode.NUMERIC
  this.data = data.toString()
}

NumericData.getBitsLength = function getBitsLength (length) {
  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)
}

NumericData.prototype.getLength = function getLength () {
  return this.data.length
}

NumericData.prototype.getBitsLength = function getBitsLength () {
  return NumericData.getBitsLength(this.data.length)
}

NumericData.prototype.write = function write (bitBuffer) {
  var i, group, value

  // The input data string is divided into groups of three digits,
  // and each group is converted to its 10-bit binary equivalent.
  for (i = 0; i + 3 <= this.data.length; i += 3) {
    group = this.data.substr(i, 3)
    value = parseInt(group, 10)

    bitBuffer.put(value, 10)
  }

  // If the number of input digits is not an exact multiple of three,
  // the final one or two digits are converted to 4 or 7 bits respectively.
  var remainingNum = this.data.length - i
  if (remainingNum > 0) {
    group = this.data.substr(i)
    value = parseInt(group, 10)

    bitBuffer.put(value, remainingNum * 3 + 1)
  }
}

module.exports = NumericData
var BufferUtil = require('../utils/buffer')
var GF = require('./galois-field')

/**
 * Multiplies two polynomials inside Galois Field
 *
 * @param  {Buffer} p1 Polynomial
 * @param  {Buffer} p2 Polynomial
 * @return {Buffer}    Product of p1 and p2
 */
exports.mul = function mul (p1, p2) {
  var coeff = BufferUtil.alloc(p1.length + p2.length - 1)

  for (var i = 0; i < p1.length; i++) {
    for (var j = 0; j < p2.length; j++) {
      coeff[i + j] ^= GF.mul(p1[i], p2[j])
    }
  }

  return coeff
}

/**
 * Calculate the remainder of polynomials division
 *
 * @param  {Buffer} divident Polynomial
 * @param  {Buffer} divisor  Polynomial
 * @return {Buffer}          Remainder
 */
exports.mod = function mod (divident, divisor) {
  var result = BufferUtil.from(divident)

  while ((result.length - divisor.length) >= 0) {
    var coeff = result[0]

    for (var i = 0; i < divisor.length; i++) {
      result[i] ^= GF.mul(divisor[i], coeff)
    }

    // remove all zeros from buffer head
    var offset = 0
    while (offset < result.length && result[offset] === 0) offset++
    result = result.slice(offset)
  }

  return result
}

/**
 * Generate an irreducible generator polynomial of specified degree
 * (used by Reed-Solomon encoder)
 *
 * @param  {Number} degree Degree of the generator polynomial
 * @return {Buffer}        Buffer containing polynomial coefficients
 */
exports.generateECPolynomial = function generateECPolynomial (degree) {
  var poly = BufferUtil.from([1])
  for (var i = 0; i < degree; i++) {
    poly = exports.mul(poly, [1, GF.exp(i)])
  }

  return poly
}
var BufferUtil = require('../utils/buffer')
var Utils = require('./utils')
var ECLevel = require('./error-correction-level')
var BitBuffer = require('./bit-buffer')
var BitMatrix = require('./bit-matrix')
var AlignmentPattern = require('./alignment-pattern')
var FinderPattern = require('./finder-pattern')
var MaskPattern = require('./mask-pattern')
var ECCode = require('./error-correction-code')
var ReedSolomonEncoder = require('./reed-solomon-encoder')
var Version = require('./version')
var FormatInfo = require('./format-info')
var Mode = require('./mode')
var Segments = require('./segments')
var isArray = require('isarray')

/**
 * QRCode for JavaScript
 *
 * modified by Ryan Day for nodejs support
 * Copyright (c) 2011 Ryan Day
 *
 * Licensed under the MIT license:
 *   http://www.opensource.org/licenses/mit-license.php
 *
//---------------------------------------------------------------------
// QRCode for JavaScript
//
// Copyright (c) 2009 Kazuhiko Arase
//
// URL: http://www.d-project.com/
//
// Licensed under the MIT license:
//   http://www.opensource.org/licenses/mit-license.php
//
// The word "QR Code" is registered trademark of
// DENSO WAVE INCORPORATED
//   http://www.denso-wave.com/qrcode/faqpatent-e.html
//
//---------------------------------------------------------------------
*/

/**
 * Add finder patterns bits to matrix
 *
 * @param  {BitMatrix} matrix  Modules matrix
 * @param  {Number}    version QR Code version
 */
function setupFinderPattern (matrix, version) {
  var size = matrix.size
  var pos = FinderPattern.getPositions(version)

  for (var i = 0; i < pos.length; i++) {
    var row = pos[i][0]
    var col = pos[i][1]

    for (var r = -1; r <= 7; r++) {
      if (row + r <= -1 || size <= row + r) continue

      for (var c = -1; c <= 7; c++) {
        if (col + c <= -1 || size <= col + c) continue

        if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||
          (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||
          (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {
          matrix.set(row + r, col + c, true, true)
        } else {
          matrix.set(row + r, col + c, false, true)
        }
      }
    }
  }
}

/**
 * Add timing pattern bits to matrix
 *
 * Note: this function must be called before {@link setupAlignmentPattern}
 *
 * @param  {BitMatrix} matrix Modules matrix
 */
function setupTimingPattern (matrix) {
  var size = matrix.size

  for (var r = 8; r < size - 8; r++) {
    var value = r % 2 === 0
    matrix.set(r, 6, value, true)
    matrix.set(6, r, value, true)
  }
}

/**
 * Add alignment patterns bits to matrix
 *
 * Note: this function must be called after {@link setupTimingPattern}
 *
 * @param  {BitMatrix} matrix  Modules matrix
 * @param  {Number}    version QR Code version
 */
function setupAlignmentPattern (matrix, version) {
  var pos = AlignmentPattern.getPositions(version)

  for (var i = 0; i < pos.length; i++) {
    var row = pos[i][0]
    var col = pos[i][1]

    for (var r = -2; r <= 2; r++) {
      for (var c = -2; c <= 2; c++) {
        if (r === -2 || r === 2 || c === -2 || c === 2 ||
          (r === 0 && c === 0)) {
          matrix.set(row + r, col + c, true, true)
        } else {
          matrix.set(row + r, col + c, false, true)
        }
      }
    }
  }
}

/**
 * Add version info bits to matrix
 *
 * @param  {BitMatrix} matrix  Modules matrix
 * @param  {Number}    version QR Code version
 */
function setupVersionInfo (matrix, version) {
  var size = matrix.size
  var bits = Version.getEncodedBits(version)
  var row, col, mod

  for (var i = 0; i < 18; i++) {
    row = Math.floor(i / 3)
    col = i % 3 + size - 8 - 3
    mod = ((bits >> i) & 1) === 1

    matrix.set(row, col, mod, true)
    matrix.set(col, row, mod, true)
  }
}

/**
 * Add format info bits to matrix
 *
 * @param  {BitMatrix} matrix               Modules matrix
 * @param  {ErrorCorrectionLevel}    errorCorrectionLevel Error correction level
 * @param  {Number}    maskPattern          Mask pattern reference value
 */
function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
  var size = matrix.size
  var bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)
  var i, mod

  for (i = 0; i < 15; i++) {
    mod = ((bits >> i) & 1) === 1

    // vertical
    if (i < 6) {
      matrix.set(i, 8, mod, true)
    } else if (i < 8) {
      matrix.set(i + 1, 8, mod, true)
    } else {
      matrix.set(size - 15 + i, 8, mod, true)
    }

    // horizontal
    if (i < 8) {
      matrix.set(8, size - i - 1, mod, true)
    } else if (i < 9) {
      matrix.set(8, 15 - i - 1 + 1, mod, true)
    } else {
      matrix.set(8, 15 - i - 1, mod, true)
    }
  }

  // fixed module
  matrix.set(size - 8, 8, 1, true)
}

/**
 * Add encoded data bits to matrix
 *
 * @param  {BitMatrix} matrix Modules matrix
 * @param  {Buffer}    data   Data codewords
 */
function setupData (matrix, data) {
  var size = matrix.size
  var inc = -1
  var row = size - 1
  var bitIndex = 7
  var byteIndex = 0

  for (var col = size - 1; col > 0; col -= 2) {
    if (col === 6) col--

    while (true) {
      for (var c = 0; c < 2; c++) {
        if (!matrix.isReserved(row, col - c)) {
          var dark = false

          if (byteIndex < data.length) {
            dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)
          }

          matrix.set(row, col - c, dark)
          bitIndex--

          if (bitIndex === -1) {
            byteIndex++
            bitIndex = 7
          }
        }
      }

      row += inc

      if (row < 0 || size <= row) {
        row -= inc
        inc = -inc
        break
      }
    }
  }
}

/**
 * Create encoded codewords from data input
 *
 * @param  {Number}   version              QR Code version
 * @param  {ErrorCorrectionLevel}   errorCorrectionLevel Error correction level
 * @param  {ByteData} data                 Data input
 * @return {Buffer}                        Buffer containing encoded codewords
 */
function createData (version, errorCorrectionLevel, segments) {
  // Prepare data buffer
  var buffer = new BitBuffer()

  segments.forEach(function (data) {
    // prefix data with mode indicator (4 bits)
    buffer.put(data.mode.bit, 4)

    // Prefix data with character count indicator.
    // The character count indicator is a string of bits that represents the
    // number of characters that are being encoded.
    // The character count indicator must be placed after the mode indicator
    // and must be a certain number of bits long, depending on the QR version
    // and data mode
    // @see {@link Mode.getCharCountIndicator}.
    buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))

    // add binary data sequence to buffer
    data.write(buffer)
  })

  // Calculate required number of bits
  var totalCodewords = Utils.getSymbolTotalCodewords(version)
  var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
  var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8

  // Add a terminator.
  // If the bit string is shorter than the total number of required bits,
  // a terminator of up to four 0s must be added to the right side of the string.
  // If the bit string is more than four bits shorter than the required number of bits,
  // add four 0s to the end.
  if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {
    buffer.put(0, 4)
  }

  // If the bit string is fewer than four bits shorter, add only the number of 0s that
  // are needed to reach the required number of bits.

  // After adding the terminator, if the number of bits in the string is not a multiple of 8,
  // pad the string on the right with 0s to make the string's length a multiple of 8.
  while (buffer.getLengthInBits() % 8 !== 0) {
    buffer.putBit(0)
  }

  // Add pad bytes if the string is still shorter than the total number of required bits.
  // Extend the buffer to fill the data capacity of the symbol corresponding to
  // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)
  // and 00010001 (0x11) alternately.
  var remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8
  for (var i = 0; i < remainingByte; i++) {
    buffer.put(i % 2 ? 0x11 : 0xEC, 8)
  }

  return createCodewords(buffer, version, errorCorrectionLevel)
}

/**
 * Encode input data with Reed-Solomon and return codewords with
 * relative error correction bits
 *
 * @param  {BitBuffer} bitBuffer            Data to encode
 * @param  {Number}    version              QR Code version
 * @param  {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
 * @return {Buffer}                         Buffer containing encoded codewords
 */
function createCodewords (bitBuffer, version, errorCorrectionLevel) {
  // Total codewords for this QR code version (Data + Error correction)
  var totalCodewords = Utils.getSymbolTotalCodewords(version)

  // Total number of error correction codewords
  var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)

  // Total number of data codewords
  var dataTotalCodewords = totalCodewords - ecTotalCodewords

  // Total number of blocks
  var ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)

  // Calculate how many blocks each group should contain
  var blocksInGroup2 = totalCodewords % ecTotalBlocks
  var blocksInGroup1 = ecTotalBlocks - blocksInGroup2

  var totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)

  var dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)
  var dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1

  // Number of EC codewords is the same for both groups
  var ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1

  // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount
  var rs = new ReedSolomonEncoder(ecCount)

  var offset = 0
  var dcData = new Array(ecTotalBlocks)
  var ecData = new Array(ecTotalBlocks)
  var maxDataSize = 0
  var buffer = BufferUtil.from(bitBuffer.buffer)

  // Divide the buffer into the required number of blocks
  for (var b = 0; b < ecTotalBlocks; b++) {
    var dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2

    // extract a block of data from buffer
    dcData[b] = buffer.slice(offset, offset + dataSize)

    // Calculate EC codewords for this data block
    ecData[b] = rs.encode(dcData[b])

    offset += dataSize
    maxDataSize = Math.max(maxDataSize, dataSize)
  }

  // Create final data
  // Interleave the data and error correction codewords from each block
  var data = BufferUtil.alloc(totalCodewords)
  var index = 0
  var i, r

  // Add data codewords
  for (i = 0; i < maxDataSize; i++) {
    for (r = 0; r < ecTotalBlocks; r++) {
      if (i < dcData[r].length) {
        data[index++] = dcData[r][i]
      }
    }
  }

  // Apped EC codewords
  for (i = 0; i < ecCount; i++) {
    for (r = 0; r < ecTotalBlocks; r++) {
      data[index++] = ecData[r][i]
    }
  }

  return data
}

/**
 * Build QR Code symbol
 *
 * @param  {String} data                 Input string
 * @param  {Number} version              QR Code version
 * @param  {ErrorCorretionLevel} errorCorrectionLevel Error level
 * @param  {MaskPattern} maskPattern     Mask pattern
 * @return {Object}                      Object containing symbol data
 */
function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
  var segments

  if (isArray(data)) {
    segments = Segments.fromArray(data)
  } else if (typeof data === 'string') {
    var estimatedVersion = version

    if (!estimatedVersion) {
      var rawSegments = Segments.rawSplit(data)

      // Estimate best version that can contain raw splitted segments
      estimatedVersion = Version.getBestVersionForData(rawSegments,
        errorCorrectionLevel)
    }

    // Build optimized segments
    // If estimated version is undefined, try with the highest version
    segments = Segments.fromString(data, estimatedVersion || 40)
  } else {
    throw new Error('Invalid data')
  }

  // Get the min version that can contain data
  var bestVersion = Version.getBestVersionForData(segments,
      errorCorrectionLevel)

  // If no version is found, data cannot be stored
  if (!bestVersion) {
    throw new Error('The amount of data is too big to be stored in a QR Code')
  }

  // If not specified, use min version as default
  if (!version) {
    version = bestVersion

  // Check if the specified version can contain the data
  } else if (version < bestVersion) {
    throw new Error('\n' +
      'The chosen QR Code version cannot contain this amount of data.\n' +
      'Minimum version required to store current data is: ' + bestVersion + '.\n'
    )
  }

  var dataBits = createData(version, errorCorrectionLevel, segments)

  // Allocate matrix buffer
  var moduleCount = Utils.getSymbolSize(version)
  var modules = new BitMatrix(moduleCount)

  // Add function modules
  setupFinderPattern(modules, version)
  setupTimingPattern(modules)
  setupAlignmentPattern(modules, version)

  // Add temporary dummy bits for format info just to set them as reserved.
  // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}
  // since the masking operation must be performed only on the encoding region.
  // These blocks will be replaced with correct values later in code.
  setupFormatInfo(modules, errorCorrectionLevel, 0)

  if (version >= 7) {
    setupVersionInfo(modules, version)
  }

  // Add data codewords
  setupData(modules, dataBits)

  if (isNaN(maskPattern)) {
    // Find best mask pattern
    maskPattern = MaskPattern.getBestMask(modules,
      setupFormatInfo.bind(null, modules, errorCorrectionLevel))
  }

  // Apply mask pattern
  MaskPattern.applyMask(maskPattern, modules)

  // Replace format info bits with correct values
  setupFormatInfo(modules, errorCorrectionLevel, maskPattern)

  return {
    modules: modules,
    version: version,
    errorCorrectionLevel: errorCorrectionLevel,
    maskPattern: maskPattern,
    segments: segments
  }
}

/**
 * QR Code
 *
 * @param {String | Array} data                 Input data
 * @param {Object} options                      Optional configurations
 * @param {Number} options.version              QR Code version
 * @param {String} options.errorCorrectionLevel Error correction level
 * @param {Function} options.toSJISFunc         Helper func to convert utf8 to sjis
 */
exports.create = function create (data, options) {
  if (typeof data === 'undefined' || data === '') {
    throw new Error('No input text')
  }

  var errorCorrectionLevel = ECLevel.M
  var version
  var mask

  if (typeof options !== 'undefined') {
    // Use higher error correction level as default
    errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)
    version = Version.from(options.version)
    mask = MaskPattern.from(options.maskPattern)

    if (options.toSJISFunc) {
      Utils.setToSJISFunction(options.toSJISFunc)
    }
  }

  return createSymbol(data, version, errorCorrectionLevel, mask)
}
var BufferUtil = require('../utils/buffer')
var Polynomial = require('./polynomial')
var Buffer = require('buffer').Buffer

function ReedSolomonEncoder (degree) {
  this.genPoly = undefined
  this.degree = degree

  if (this.degree) this.initialize(this.degree)
}

/**
 * Initialize the encoder.
 * The input param should correspond to the number of error correction codewords.
 *
 * @param  {Number} degree
 */
ReedSolomonEncoder.prototype.initialize = function initialize (degree) {
  // create an irreducible generator polynomial
  this.degree = degree
  this.genPoly = Polynomial.generateECPolynomial(this.degree)
}

/**
 * Encodes a chunk of data
 *
 * @param  {Buffer} data Buffer containing input data
 * @return {Buffer}      Buffer containing encoded data
 */
ReedSolomonEncoder.prototype.encode = function encode (data) {
  if (!this.genPoly) {
    throw new Error('Encoder not initialized')
  }

  // Calculate EC for this data block
  // extends data size to data+genPoly size
  var pad = BufferUtil.alloc(this.degree)
  var paddedData = Buffer.concat([data, pad], data.length + this.degree)

  // The error correction codewords are the remainder after dividing the data codewords
  // by a generator polynomial
  var remainder = Polynomial.mod(paddedData, this.genPoly)

  // return EC data blocks (last n byte, where n is the degree of genPoly)
  // If coefficients number in remainder are less than genPoly degree,
  // pad with 0s to the left to reach the needed number of coefficients
  var start = this.degree - remainder.length
  if (start > 0) {
    var buff = BufferUtil.alloc(this.degree)
    remainder.copy(buff, start)

    return buff
  }

  return remainder
}

module.exports = ReedSolomonEncoder
var numeric = '[0-9]+'
var alphanumeric = '[A-Z $%*+\\-./:]+'
var kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +
  '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +
  '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +
  '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'
kanji = kanji.replace(/u/g, '\\u')

var byte = '(?:(?![A-Z0-9 $%*+\\-./:]|' + kanji + ')(?:.|[\r\n]))+'

exports.KANJI = new RegExp(kanji, 'g')
exports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\-./:]+', 'g')
exports.BYTE = new RegExp(byte, 'g')
exports.NUMERIC = new RegExp(numeric, 'g')
exports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')

var TEST_KANJI = new RegExp('^' + kanji + '$')
var TEST_NUMERIC = new RegExp('^' + numeric + '$')
var TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$')

exports.testKanji = function testKanji (str) {
  return TEST_KANJI.test(str)
}

exports.testNumeric = function testNumeric (str) {
  return TEST_NUMERIC.test(str)
}

exports.testAlphanumeric = function testAlphanumeric (str) {
  return TEST_ALPHANUMERIC.test(str)
}
var Mode = require('./mode')
var NumericData = require('./numeric-data')
var AlphanumericData = require('./alphanumeric-data')
var ByteData = require('./byte-data')
var KanjiData = require('./kanji-data')
var Regex = require('./regex')
var Utils = require('./utils')
var dijkstra = require('dijkstrajs')

/**
 * Returns UTF8 byte length
 *
 * @param  {String} str Input string
 * @return {Number}     Number of byte
 */
function getStringByteLength (str) {
  return unescape(encodeURIComponent(str)).length
}

/**
 * Get a list of segments of the specified mode
 * from a string
 *
 * @param  {Mode}   mode Segment mode
 * @param  {String} str  String to process
 * @return {Array}       Array of object with segments data
 */
function getSegments (regex, mode, str) {
  var segments = []
  var result

  while ((result = regex.exec(str)) !== null) {
    segments.push({
      data: result[0],
      index: result.index,
      mode: mode,
      length: result[0].length
    })
  }

  return segments
}

/**
 * Extracts a series of segments with the appropriate
 * modes from a string
 *
 * @param  {String} dataStr Input string
 * @return {Array}          Array of object with segments data
 */
function getSegmentsFromString (dataStr) {
  var numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)
  var alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)
  var byteSegs
  var kanjiSegs

  if (Utils.isKanjiModeEnabled()) {
    byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)
    kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)
  } else {
    byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)
    kanjiSegs = []
  }

  var segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)

  return segs
    .sort(function (s1, s2) {
      return s1.index - s2.index
    })
    .map(function (obj) {
      return {
        data: obj.data,
        mode: obj.mode,
        length: obj.length
      }
    })
}

/**
 * Returns how many bits are needed to encode a string of
 * specified length with the specified mode
 *
 * @param  {Number} length String length
 * @param  {Mode} mode     Segment mode
 * @return {Number}        Bit length
 */
function getSegmentBitsLength (length, mode) {
  switch (mode) {
    case Mode.NUMERIC:
      return NumericData.getBitsLength(length)
    case Mode.ALPHANUMERIC:
      return AlphanumericData.getBitsLength(length)
    case Mode.KANJI:
      return KanjiData.getBitsLength(length)
    case Mode.BYTE:
      return ByteData.getBitsLength(length)
  }
}

/**
 * Merges adjacent segments which have the same mode
 *
 * @param  {Array} segs Array of object with segments data
 * @return {Array}      Array of object with segments data
 */
function mergeSegments (segs) {
  return segs.reduce(function (acc, curr) {
    var prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null
    if (prevSeg && prevSeg.mode === curr.mode) {
      acc[acc.length - 1].data += curr.data
      return acc
    }

    acc.push(curr)
    return acc
  }, [])
}

/**
 * Generates a list of all possible nodes combination which
 * will be used to build a segments graph.
 *
 * Nodes are divided by groups. Each group will contain a list of all the modes
 * in which is possible to encode the given text.
 *
 * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.
 * The group for '12345' will contain then 3 objects, one for each
 * possible encoding mode.
 *
 * Each node represents a possible segment.
 *
 * @param  {Array} segs Array of object with segments data
 * @return {Array}      Array of object with segments data
 */
function buildNodes (segs) {
  var nodes = []
  for (var i = 0; i < segs.length; i++) {
    var seg = segs[i]

    switch (seg.mode) {
      case Mode.NUMERIC:
        nodes.push([seg,
          { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },
          { data: seg.data, mode: Mode.BYTE, length: seg.length }
        ])
        break
      case Mode.ALPHANUMERIC:
        nodes.push([seg,
          { data: seg.data, mode: Mode.BYTE, length: seg.length }
        ])
        break
      case Mode.KANJI:
        nodes.push([seg,
          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }
        ])
        break
      case Mode.BYTE:
        nodes.push([
          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }
        ])
    }
  }

  return nodes
}

/**
 * Builds a graph from a list of nodes.
 * All segments in each node group will be connected with all the segments of
 * the next group and so on.
 *
 * At each connection will be assigned a weight depending on the
 * segment's byte length.
 *
 * @param  {Array} nodes    Array of object with segments data
 * @param  {Number} version QR Code version
 * @return {Object}         Graph of all possible segments
 */
function buildGraph (nodes, version) {
  var table = {}
  var graph = {'start': {}}
  var prevNodeIds = ['start']

  for (var i = 0; i < nodes.length; i++) {
    var nodeGroup = nodes[i]
    var currentNodeIds = []

    for (var j = 0; j < nodeGroup.length; j++) {
      var node = nodeGroup[j]
      var key = '' + i + j

      currentNodeIds.push(key)
      table[key] = { node: node, lastCount: 0 }
      graph[key] = {}

      for (var n = 0; n < prevNodeIds.length; n++) {
        var prevNodeId = prevNodeIds[n]

        if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {
          graph[prevNodeId][key] =
            getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -
            getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)

          table[prevNodeId].lastCount += node.length
        } else {
          if (table[prevNodeId]) table[prevNodeId].lastCount = node.length

          graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +
            4 + Mode.getCharCountIndicator(node.mode, version) // switch cost
        }
      }
    }

    prevNodeIds = currentNodeIds
  }

  for (n = 0; n < prevNodeIds.length; n++) {
    graph[prevNodeIds[n]]['end'] = 0
  }

  return { map: graph, table: table }
}

/**
 * Builds a segment from a specified data and mode.
 * If a mode is not specified, the more suitable will be used.
 *
 * @param  {String} data             Input data
 * @param  {Mode | String} modesHint Data mode
 * @return {Segment}                 Segment
 */
function buildSingleSegment (data, modesHint) {
  var mode
  var bestMode = Mode.getBestModeForData(data)

  mode = Mode.from(modesHint, bestMode)

  // Make sure data can be encoded
  if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {
    throw new Error('"' + data + '"' +
      ' cannot be encoded with mode ' + Mode.toString(mode) +
      '.\n Suggested mode is: ' + Mode.toString(bestMode))
  }

  // Use Mode.BYTE if Kanji support is disabled
  if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {
    mode = Mode.BYTE
  }

  switch (mode) {
    case Mode.NUMERIC:
      return new NumericData(data)

    case Mode.ALPHANUMERIC:
      return new AlphanumericData(data)

    case Mode.KANJI:
      return new KanjiData(data)

    case Mode.BYTE:
      return new ByteData(data)
  }
}

/**
 * Builds a list of segments from an array.
 * Array can contain Strings or Objects with segment's info.
 *
 * For each item which is a string, will be generated a segment with the given
 * string and the more appropriate encoding mode.
 *
 * For each item which is an object, will be generated a segment with the given
 * data and mode.
 * Objects must contain at least the property "data".
 * If property "mode" is not present, the more suitable mode will be used.
 *
 * @param  {Array} array Array of objects with segments data
 * @return {Array}       Array of Segments
 */
exports.fromArray = function fromArray (array) {
  return array.reduce(function (acc, seg) {
    if (typeof seg === 'string') {
      acc.push(buildSingleSegment(seg, null))
    } else if (seg.data) {
      acc.push(buildSingleSegment(seg.data, seg.mode))
    }

    return acc
  }, [])
}

/**
 * Builds an optimized sequence of segments from a string,
 * which will produce the shortest possible bitstream.
 *
 * @param  {String} data    Input string
 * @param  {Number} version QR Code version
 * @return {Array}          Array of segments
 */
exports.fromString = function fromString (data, version) {
  var segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())

  var nodes = buildNodes(segs)
  var graph = buildGraph(nodes, version)
  var path = dijkstra.find_path(graph.map, 'start', 'end')

  var optimizedSegs = []
  for (var i = 1; i < path.length - 1; i++) {
    optimizedSegs.push(graph.table[path[i]].node)
  }

  return exports.fromArray(mergeSegments(optimizedSegs))
}

/**
 * Splits a string in various segments with the modes which
 * best represent their content.
 * The produced segments are far from being optimized.
 * The output of this function is only used to estimate a QR Code version
 * which may contain the data.
 *
 * @param  {string} data Input string
 * @return {Array}       Array of segments
 */
exports.rawSplit = function rawSplit (data) {
  return exports.fromArray(
    getSegmentsFromString(data, Utils.isKanjiModeEnabled())
  )
}
var toSJISFunction
var CODEWORDS_COUNT = [
  0, // Not used
  26, 44, 70, 100, 134, 172, 196, 242, 292, 346,
  404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,
  1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,
  2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706
]

/**
 * Returns the QR Code size for the specified version
 *
 * @param  {Number} version QR Code version
 * @return {Number}         size of QR code
 */
exports.getSymbolSize = function getSymbolSize (version) {
  if (!version) throw new Error('"version" cannot be null or undefined')
  if (version < 1 || version > 40) throw new Error('"version" should be in range from 1 to 40')
  return version * 4 + 17
}

/**
 * Returns the total number of codewords used to store data and EC information.
 *
 * @param  {Number} version QR Code version
 * @return {Number}         Data length in bits
 */
exports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {
  return CODEWORDS_COUNT[version]
}

/**
 * Encode data with Bose-Chaudhuri-Hocquenghem
 *
 * @param  {Number} data Value to encode
 * @return {Number}      Encoded value
 */
exports.getBCHDigit = function (data) {
  var digit = 0

  while (data !== 0) {
    digit++
    data >>>= 1
  }

  return digit
}

exports.setToSJISFunction = function setToSJISFunction (f) {
  if (typeof f !== 'function') {
    throw new Error('"toSJISFunc" is not a valid function.')
  }

  toSJISFunction = f
}

exports.isKanjiModeEnabled = function () {
  return typeof toSJISFunction !== 'undefined'
}

exports.toSJIS = function toSJIS (kanji) {
  return toSJISFunction(kanji)
}
/**
 * Check if QR Code version is valid
 *
 * @param  {Number}  version QR Code version
 * @return {Boolean}         true if valid version, false otherwise
 */
exports.isValid = function isValid (version) {
  return !isNaN(version) && version >= 1 && version <= 40
}
var Utils = require('./utils')
var ECCode = require('./error-correction-code')
var ECLevel = require('./error-correction-level')
var Mode = require('./mode')
var VersionCheck = require('./version-check')
var isArray = require('isarray')

// Generator polynomial used to encode version information
var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)
var G18_BCH = Utils.getBCHDigit(G18)

function getBestVersionForDataLength (mode, length, errorCorrectionLevel) {
  for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {
      return currentVersion
    }
  }

  return undefined
}

function getReservedBitsCount (mode, version) {
  // Character count indicator + mode indicator bits
  return Mode.getCharCountIndicator(mode, version) + 4
}

function getTotalBitsFromDataArray (segments, version) {
  var totalBits = 0

  segments.forEach(function (data) {
    var reservedBits = getReservedBitsCount(data.mode, version)
    totalBits += reservedBits + data.getBitsLength()
  })

  return totalBits
}

function getBestVersionForMixedData (segments, errorCorrectionLevel) {
  for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
    var length = getTotalBitsFromDataArray(segments, currentVersion)
    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {
      return currentVersion
    }
  }

  return undefined
}

/**
 * Returns version number from a value.
 * If value is not a valid version, returns defaultValue
 *
 * @param  {Number|String} value        QR Code version
 * @param  {Number}        defaultValue Fallback value
 * @return {Number}                     QR Code version number
 */
exports.from = function from (value, defaultValue) {
  if (VersionCheck.isValid(value)) {
    return parseInt(value, 10)
  }

  return defaultValue
}

/**
 * Returns how much data can be stored with the specified QR code version
 * and error correction level
 *
 * @param  {Number} version              QR Code version (1-40)
 * @param  {Number} errorCorrectionLevel Error correction level
 * @param  {Mode}   mode                 Data mode
 * @return {Number}                      Quantity of storable data
 */
exports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {
  if (!VersionCheck.isValid(version)) {
    throw new Error('Invalid QR Code version')
  }

  // Use Byte mode as default
  if (typeof mode === 'undefined') mode = Mode.BYTE

  // Total codewords for this QR code version (Data + Error correction)
  var totalCodewords = Utils.getSymbolTotalCodewords(version)

  // Total number of error correction codewords
  var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)

  // Total number of data codewords
  var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8

  if (mode === Mode.MIXED) return dataTotalCodewordsBits

  var usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)

  // Return max number of storable codewords
  switch (mode) {
    case Mode.NUMERIC:
      return Math.floor((usableBits / 10) * 3)

    case Mode.ALPHANUMERIC:
      return Math.floor((usableBits / 11) * 2)

    case Mode.KANJI:
      return Math.floor(usableBits / 13)

    case Mode.BYTE:
    default:
      return Math.floor(usableBits / 8)
  }
}

/**
 * Returns the minimum version needed to contain the amount of data
 *
 * @param  {Segment} data                    Segment of data
 * @param  {Number} [errorCorrectionLevel=H] Error correction level
 * @param  {Mode} mode                       Data mode
 * @return {Number}                          QR Code version
 */
exports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {
  var seg

  var ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)

  if (isArray(data)) {
    if (data.length > 1) {
      return getBestVersionForMixedData(data, ecl)
    }

    if (data.length === 0) {
      return 1
    }

    seg = data[0]
  } else {
    seg = data
  }

  return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)
}

/**
 * Returns version information with relative error correction bits
 *
 * The version information is included in QR Code symbols of version 7 or larger.
 * It consists of an 18-bit sequence containing 6 data bits,
 * with 12 error correction bits calculated using the (18, 6) Golay code.
 *
 * @param  {Number} version QR Code version
 * @return {Number}         Encoded version info bits
 */
exports.getEncodedBits = function getEncodedBits (version) {
  if (!VersionCheck.isValid(version) || version < 7) {
    throw new Error('Invalid QR Code version')
  }

  var d = version << 12

  while (Utils.getBCHDigit(d) - G18_BCH >= 0) {
    d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))
  }

  return (version << 12) | d
}
/*
*copyright Ryan Day 2012
*
* Licensed under the MIT license:
*   http://www.opensource.org/licenses/mit-license.php
*
* this is the main server side application file for node-qrcode.
* these exports use serverside canvas api methods for file IO and buffers
*
*/

module.exports = require('./server')
var Utils = require('./utils')

function clearCanvas (ctx, canvas, size) {
  ctx.clearRect(0, 0, canvas.width, canvas.height)

  if (!canvas.style) canvas.style = {}
  canvas.height = size
  canvas.width = size
  canvas.style.height = size + 'px'
  canvas.style.width = size + 'px'
}

function getCanvasElement () {
  try {
    return document.createElement('canvas')
  } catch (e) {
    throw new Error('You need to specify a canvas element')
  }
}

exports.render = function render (qrData, canvas, options) {
  var opts = options
  var canvasEl = canvas

  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
    opts = canvas
    canvas = undefined
  }

  if (!canvas) {
    canvasEl = getCanvasElement()
  }

  opts = Utils.getOptions(opts)
  var size = Utils.getImageWidth(qrData.modules.size, opts)

  var ctx = canvasEl.getContext('2d')
  var image = ctx.createImageData(size, size)
  Utils.qrToImageData(image.data, qrData, opts)

  clearCanvas(ctx, canvasEl, size)
  ctx.putImageData(image, 0, 0)

  return canvasEl
}

exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
  var opts = options

  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
    opts = canvas
    canvas = undefined
  }

  if (!opts) opts = {}

  var canvasEl = exports.render(qrData, canvas, opts)

  var type = opts.type || 'image/png'
  var rendererOpts = opts.rendererOpts || {}

  return canvasEl.toDataURL(type, rendererOpts.quality)
}
var fs = require('fs')
var PNG = require('pngjs').PNG
var Utils = require('./utils')

exports.render = function render (qrData, options) {
  var opts = Utils.getOptions(options)
  var pngOpts = opts.rendererOpts
  var size = Utils.getImageWidth(qrData.modules.size, opts)

  pngOpts.width = size
  pngOpts.height = size

  var pngImage = new PNG(pngOpts)
  Utils.qrToImageData(pngImage.data, qrData, opts)

  return pngImage
}

exports.renderToDataURL = function renderToDataURL (qrData, options, cb) {
  if (typeof cb === 'undefined') {
    cb = options
    options = undefined
  }

  exports.renderToBuffer(qrData, options, function (err, output) {
    if (err) cb(err)
    var url = 'data:image/png;base64,'
    url += output.toString('base64')
    cb(null, url)
  })
}

exports.renderToBuffer = function renderToBuffer (qrData, options, cb) {
  if (typeof cb === 'undefined') {
    cb = options
    options = undefined
  }

  var png = exports.render(qrData, options)
  var buffer = []

  png.on('error', cb)

  png.on('data', function (data) {
    buffer.push(data)
  })

  png.on('end', function () {
    cb(null, Buffer.concat(buffer))
  })

  png.pack()
}

exports.renderToFile = function renderToFile (path, qrData, options, cb) {
  if (typeof cb === 'undefined') {
    cb = options
    options = undefined
  }

  var stream = fs.createWriteStream(path)
  stream.on('error', cb)
  stream.on('close', cb)

  exports.renderToFileStream(stream, qrData, options)
}

exports.renderToFileStream = function renderToFileStream (stream, qrData, options) {
  var png = exports.render(qrData, options)
  png.pack().pipe(stream)
}
var Utils = require('./utils')

function getColorAttrib (color, attrib) {
  var alpha = color.a / 255
  var str = attrib + '="' + color.hex + '"'

  return alpha < 1
    ? str + ' ' + attrib + '-opacity="' + alpha.toFixed(2).slice(1) + '"'
    : str
}

function svgCmd (cmd, x, y) {
  var str = cmd + x
  if (typeof y !== 'undefined') str += ' ' + y

  return str
}

function qrToPath (data, size, margin) {
  var path = ''
  var moveBy = 0
  var newRow = false
  var lineLength = 0

  for (var i = 0; i < data.length; i++) {
    var col = Math.floor(i % size)
    var row = Math.floor(i / size)

    if (!col && !newRow) newRow = true

    if (data[i]) {
      lineLength++

      if (!(i > 0 && col > 0 && data[i - 1])) {
        path += newRow
          ? svgCmd('M', col + margin, 0.5 + row + margin)
          : svgCmd('m', moveBy, 0)

        moveBy = 0
        newRow = false
      }

      if (!(col + 1 < size && data[i + 1])) {
        path += svgCmd('h', lineLength)
        lineLength = 0
      }
    } else {
      moveBy++
    }
  }

  return path
}

exports.render = function render (qrData, options, cb) {
  var opts = Utils.getOptions(options)
  var size = qrData.modules.size
  var data = qrData.modules.data
  var qrcodesize = size + opts.margin * 2

  var bg = !opts.color.light.a
    ? ''
    : '<path ' + getColorAttrib(opts.color.light, 'fill') +
      ' d="M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z"/>'

  var path =
    '<path ' + getColorAttrib(opts.color.dark, 'stroke') +
    ' d="' + qrToPath(data, size, opts.margin) + '"/>'

  var viewBox = 'viewBox="' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '"'

  var width = !opts.width ? '' : 'width="' + opts.width + '" height="' + opts.width + '" '

  var svgTag = '<svg xmlns="http://www.w3.org/2000/svg" ' + width + viewBox + ' shape-rendering="crispEdges">' + bg + path + '</svg>\n'

  if (typeof cb === 'function') {
    cb(null, svgTag)
  }

  return svgTag
}
var svgTagRenderer = require('./svg-tag')

exports.render = svgTagRenderer.render

exports.renderToFile = function renderToFile (path, qrData, options, cb) {
  if (typeof cb === 'undefined') {
    cb = options
    options = undefined
  }

  var fs = require('fs')
  var svgTag = exports.render(qrData, options)

  var xmlStr = '<?xml version="1.0" encoding="utf-8"?>' +
    '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">' +
    svgTag

  fs.writeFile(path, xmlStr, cb)
}
// var Utils = require('./utils')

exports.render = function (qrData, options, cb) {
  var size = qrData.modules.size
  var data = qrData.modules.data

  // var opts = Utils.getOptions(options)

  // use same scheme as https://github.com/gtanner/qrcode-terminal because it actually works! =)
  var black = '\x1b[40m  \x1b[0m'
  var white = '\x1b[47m  \x1b[0m'

  var output = ''
  var hMargin = Array(size + 3).join(white)
  var vMargin = Array(2).join(white)

  output += hMargin + '\n'
  for (var i = 0; i < size; ++i) {
    output += white
    for (var j = 0; j < size; j++) {
      // var topModule = data[i * size + j]
      // var bottomModule = data[(i + 1) * size + j]

      output += data[i * size + j] ? black : white// getBlockChar(topModule, bottomModule)
    }
    // output += white+'\n'
    output += vMargin + '\n'
  }

  output += hMargin + '\n'

  if (typeof cb === 'function') {
    cb(null, output)
  }

  return output
}
/*
exports.renderToFile = function renderToFile (path, qrData, options, cb) {
  if (typeof cb === 'undefined') {
    cb = options
    options = undefined
  }

  var fs = require('fs')
  var utf8 = exports.render(qrData, options)
  fs.writeFile(path, utf8, cb)
}
*/
var Utils = require('./utils')

var BLOCK_CHAR = {
  WW: ' ',
  WB: 'â–„',
  BB: 'â–ˆ',
  BW: 'â–€'
}

var INVERTED_BLOCK_CHAR = {
  BB: ' ',
  BW: 'â–„',
  WW: 'â–ˆ',
  WB: 'â–€'
}

function getBlockChar (top, bottom, blocks) {
  if (top && bottom) return blocks.BB
  if (top && !bottom) return blocks.BW
  if (!top && bottom) return blocks.WB
  return blocks.WW
}

exports.render = function (qrData, options, cb) {
  var opts = Utils.getOptions(options)
  var blocks = BLOCK_CHAR
  if (opts.color.dark.hex === '#ffffff' || opts.color.light.hex === '#000000') {
    blocks = INVERTED_BLOCK_CHAR
  }

  var size = qrData.modules.size
  var data = qrData.modules.data

  var output = ''
  var hMargin = Array(size + (opts.margin * 2) + 1).join(blocks.WW)
  hMargin = Array((opts.margin / 2) + 1).join(hMargin + '\n')

  var vMargin = Array(opts.margin + 1).join(blocks.WW)

  output += hMargin
  for (var i = 0; i < size; i += 2) {
    output += vMargin
    for (var j = 0; j < size; j++) {
      var topModule = data[i * size + j]
      var bottomModule = data[(i + 1) * size + j]

      output += getBlockChar(topModule, bottomModule, blocks)
    }

    output += vMargin + '\n'
  }

  output += hMargin.slice(0, -1)

  if (typeof cb === 'function') {
    cb(null, output)
  }

  return output
}

exports.renderToFile = function renderToFile (path, qrData, options, cb) {
  if (typeof cb === 'undefined') {
    cb = options
    options = undefined
  }

  var fs = require('fs')
  var utf8 = exports.render(qrData, options)
  fs.writeFile(path, utf8, cb)
}
function hex2rgba (hex) {
  if (typeof hex === 'number') {
    hex = hex.toString()
  }

  if (typeof hex !== 'string') {
    throw new Error('Color should be defined as hex string')
  }

  var hexCode = hex.slice().replace('#', '').split('')
  if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {
    throw new Error('Invalid hex color: ' + hex)
  }

  // Convert from short to long form (fff -> ffffff)
  if (hexCode.length === 3 || hexCode.length === 4) {
    hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {
      return [c, c]
    }))
  }

  // Add default alpha value
  if (hexCode.length === 6) hexCode.push('F', 'F')

  var hexValue = parseInt(hexCode.join(''), 16)

  return {
    r: (hexValue >> 24) & 255,
    g: (hexValue >> 16) & 255,
    b: (hexValue >> 8) & 255,
    a: hexValue & 255,
    hex: '#' + hexCode.slice(0, 6).join('')
  }
}

exports.getOptions = function getOptions (options) {
  if (!options) options = {}
  if (!options.color) options.color = {}

  var margin = typeof options.margin === 'undefined' ||
    options.margin === null ||
    options.margin < 0 ? 4 : options.margin

  var width = options.width && options.width >= 21 ? options.width : undefined
  var scale = options.scale || 4

  return {
    width: width,
    scale: width ? 4 : scale,
    margin: margin,
    color: {
      dark: hex2rgba(options.color.dark || '#000000ff'),
      light: hex2rgba(options.color.light || '#ffffffff')
    },
    type: options.type,
    rendererOpts: options.rendererOpts || {}
  }
}

exports.getScale = function getScale (qrSize, opts) {
  return opts.width && opts.width >= qrSize + opts.margin * 2
    ? opts.width / (qrSize + opts.margin * 2)
    : opts.scale
}

exports.getImageWidth = function getImageWidth (qrSize, opts) {
  var scale = exports.getScale(qrSize, opts)
  return Math.floor((qrSize + opts.margin * 2) * scale)
}

exports.qrToImageData = function qrToImageData (imgData, qr, opts) {
  var size = qr.modules.size
  var data = qr.modules.data
  var scale = exports.getScale(size, opts)
  var symbolSize = Math.floor((size + opts.margin * 2) * scale)
  var scaledMargin = opts.margin * scale
  var palette = [opts.color.light, opts.color.dark]

  for (var i = 0; i < symbolSize; i++) {
    for (var j = 0; j < symbolSize; j++) {
      var posDst = (i * symbolSize + j) * 4
      var pxColor = opts.color.light

      if (i >= scaledMargin && j >= scaledMargin &&
        i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {
        var iSrc = Math.floor((i - scaledMargin) / scale)
        var jSrc = Math.floor((j - scaledMargin) / scale)
        pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]
      }

      imgData[posDst++] = pxColor.r
      imgData[posDst++] = pxColor.g
      imgData[posDst++] = pxColor.b
      imgData[posDst] = pxColor.a
    }
  }
}
var canPromise = require('./can-promise')
var QRCode = require('./core/qrcode')
var PngRenderer = require('./renderer/png')
var Utf8Renderer = require('./renderer/utf8')
var TerminalRenderer = require('./renderer/terminal')
var SvgRenderer = require('./renderer/svg')

function checkParams (text, opts, cb) {
  if (typeof text === 'undefined') {
    throw new Error('String required as first argument')
  }

  if (typeof cb === 'undefined') {
    cb = opts
    opts = {}
  }

  if (typeof cb !== 'function') {
    if (!canPromise()) {
      throw new Error('Callback required as last argument')
    } else {
      opts = cb || {}
      cb = null
    }
  }

  return {
    opts: opts,
    cb: cb
  }
}

function getTypeFromFilename (path) {
  return path.slice((path.lastIndexOf('.') - 1 >>> 0) + 2).toLowerCase()
}

function getRendererFromType (type) {
  switch (type) {
    case 'svg':
      return SvgRenderer

    case 'txt':
    case 'utf8':
      return Utf8Renderer

    case 'png':
    case 'image/png':
    default:
      return PngRenderer
  }
}

function getStringRendererFromType (type) {
  switch (type) {
    case 'svg':
      return SvgRenderer

    case 'terminal':
      return TerminalRenderer

    case 'utf8':
    default:
      return Utf8Renderer
  }
}

function render (renderFunc, text, params) {
  if (!params.cb) {
    return new Promise(function (resolve, reject) {
      try {
        var data = QRCode.create(text, params.opts)
        return renderFunc(data, params.opts, function (err, data) {
          return err ? reject(err) : resolve(data)
        })
      } catch (e) {
        reject(e)
      }
    })
  }

  try {
    var data = QRCode.create(text, params.opts)
    return renderFunc(data, params.opts, params.cb)
  } catch (e) {
    params.cb(e)
  }
}

exports.create = QRCode.create

exports.toCanvas = require('./browser').toCanvas

exports.toString = function toString (text, opts, cb) {
  var params = checkParams(text, opts, cb)
  var renderer = getStringRendererFromType(params.opts.type)
  return render(renderer.render, text, params)
}

exports.toDataURL = function toDataURL (text, opts, cb) {
  var params = checkParams(text, opts, cb)
  var renderer = getRendererFromType(params.opts.type)
  return render(renderer.renderToDataURL, text, params)
}

exports.toBuffer = function toBuffer (text, opts, cb) {
  var params = checkParams(text, opts, cb)
  var renderer = getRendererFromType(params.opts.type)
  return render(renderer.renderToBuffer, text, params)
}

exports.toFile = function toFile (path, text, opts, cb) {
  if (typeof path !== 'string' || !(typeof text === 'string' || typeof text === 'object')) {
    throw new Error('Invalid argument')
  }

  if ((arguments.length < 3) && !canPromise()) {
    throw new Error('Too few arguments provided')
  }

  var params = checkParams(text, opts, cb)
  var type = params.opts.type || getTypeFromFilename(path)
  var renderer = getRendererFromType(type)
  var renderToFile = renderer.renderToFile.bind(null, path)

  return render(renderToFile, text, params)
}

exports.toFileStream = function toFileStream (stream, text, opts) {
  if (arguments.length < 2) {
    throw new Error('Too few arguments provided')
  }

  var params = checkParams(text, opts, stream.emit.bind(stream, 'error'))
  var renderer = getRendererFromType('png') // Only png support for now
  var renderToFileStream = renderer.renderToFileStream.bind(null, stream)
  render(renderToFileStream, text, params)
}
module.exports.alloc = require('buffer-alloc')
module.exports.from = require('buffer-from')
/**
 * Implementation of a subset of node.js Buffer methods for the browser.
 * Based on https://github.com/feross/buffer
 */

/* eslint-disable no-proto */

'use strict'

var isArray = require('isarray')

function typedArraySupport () {
  // Can typed array instances be augmented?
  try {
    var arr = new Uint8Array(1)
    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
    return arr.foo() === 42
  } catch (e) {
    return false
  }
}

Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()

var K_MAX_LENGTH = Buffer.TYPED_ARRAY_SUPPORT
    ? 0x7fffffff
    : 0x3fffffff

function Buffer (arg, offset, length) {
  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
    return new Buffer(arg, offset, length)
  }

  if (typeof arg === 'number') {
    return allocUnsafe(this, arg)
  }

  return from(this, arg, offset, length)
}

if (Buffer.TYPED_ARRAY_SUPPORT) {
  Buffer.prototype.__proto__ = Uint8Array.prototype
  Buffer.__proto__ = Uint8Array

  // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
  if (typeof Symbol !== 'undefined' && Symbol.species &&
      Buffer[Symbol.species] === Buffer) {
    Object.defineProperty(Buffer, Symbol.species, {
      value: null,
      configurable: true,
      enumerable: false,
      writable: false
    })
  }
}

function checked (length) {
  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
  // length is NaN (which is otherwise coerced to zero.)
  if (length >= K_MAX_LENGTH) {
    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
  }
  return length | 0
}

function isnan (val) {
  return val !== val // eslint-disable-line no-self-compare
}

function createBuffer (that, length) {
  var buf
  if (Buffer.TYPED_ARRAY_SUPPORT) {
    buf = new Uint8Array(length)
    buf.__proto__ = Buffer.prototype
  } else {
    // Fallback: Return an object instance of the Buffer class
    buf = that
    if (buf === null) {
      buf = new Buffer(length)
    }
    buf.length = length
  }

  return buf
}

function allocUnsafe (that, size) {
  var buf = createBuffer(that, size < 0 ? 0 : checked(size) | 0)

  if (!Buffer.TYPED_ARRAY_SUPPORT) {
    for (var i = 0; i < size; ++i) {
      buf[i] = 0
    }
  }

  return buf
}

function fromString (that, string) {
  var length = byteLength(string) | 0
  var buf = createBuffer(that, length)

  var actual = buf.write(string)

  if (actual !== length) {
    // Writing a hex string, for example, that contains invalid characters will
    // cause everything after the first invalid character to be ignored. (e.g.
    // 'abxxcd' will be treated as 'ab')
    buf = buf.slice(0, actual)
  }

  return buf
}

function fromArrayLike (that, array) {
  var length = array.length < 0 ? 0 : checked(array.length) | 0
  var buf = createBuffer(that, length)
  for (var i = 0; i < length; i += 1) {
    buf[i] = array[i] & 255
  }
  return buf
}

function fromArrayBuffer (that, array, byteOffset, length) {
  if (byteOffset < 0 || array.byteLength < byteOffset) {
    throw new RangeError('\'offset\' is out of bounds')
  }

  if (array.byteLength < byteOffset + (length || 0)) {
    throw new RangeError('\'length\' is out of bounds')
  }

  var buf
  if (byteOffset === undefined && length === undefined) {
    buf = new Uint8Array(array)
  } else if (length === undefined) {
    buf = new Uint8Array(array, byteOffset)
  } else {
    buf = new Uint8Array(array, byteOffset, length)
  }

  if (Buffer.TYPED_ARRAY_SUPPORT) {
    // Return an augmented `Uint8Array` instance, for best performance
    buf.__proto__ = Buffer.prototype
  } else {
    // Fallback: Return an object instance of the Buffer class
    buf = fromArrayLike(that, buf)
  }

  return buf
}

function fromObject (that, obj) {
  if (Buffer.isBuffer(obj)) {
    var len = checked(obj.length) | 0
    var buf = createBuffer(that, len)

    if (buf.length === 0) {
      return buf
    }

    obj.copy(buf, 0, 0, len)
    return buf
  }

  if (obj) {
    if ((typeof ArrayBuffer !== 'undefined' &&
        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
      if (typeof obj.length !== 'number' || isnan(obj.length)) {
        return createBuffer(that, 0)
      }
      return fromArrayLike(that, obj)
    }

    if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
      return fromArrayLike(that, obj.data)
    }
  }

  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
}

function utf8ToBytes (string, units) {
  units = units || Infinity
  var codePoint
  var length = string.length
  var leadSurrogate = null
  var bytes = []

  for (var i = 0; i < length; ++i) {
    codePoint = string.charCodeAt(i)

    // is surrogate component
    if (codePoint > 0xD7FF && codePoint < 0xE000) {
      // last char was a lead
      if (!leadSurrogate) {
        // no lead yet
        if (codePoint > 0xDBFF) {
          // unexpected trail
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        } else if (i + 1 === length) {
          // unpaired lead
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        }

        // valid lead
        leadSurrogate = codePoint

        continue
      }

      // 2 leads in a row
      if (codePoint < 0xDC00) {
        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
        leadSurrogate = codePoint
        continue
      }

      // valid surrogate pair
      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
    } else if (leadSurrogate) {
      // valid bmp char, but last char was a lead
      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
    }

    leadSurrogate = null

    // encode utf8
    if (codePoint < 0x80) {
      if ((units -= 1) < 0) break
      bytes.push(codePoint)
    } else if (codePoint < 0x800) {
      if ((units -= 2) < 0) break
      bytes.push(
        codePoint >> 0x6 | 0xC0,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x10000) {
      if ((units -= 3) < 0) break
      bytes.push(
        codePoint >> 0xC | 0xE0,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x110000) {
      if ((units -= 4) < 0) break
      bytes.push(
        codePoint >> 0x12 | 0xF0,
        codePoint >> 0xC & 0x3F | 0x80,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else {
      throw new Error('Invalid code point')
    }
  }

  return bytes
}

function byteLength (string) {
  if (Buffer.isBuffer(string)) {
    return string.length
  }
  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
    return string.byteLength
  }
  if (typeof string !== 'string') {
    string = '' + string
  }

  var len = string.length
  if (len === 0) return 0

  return utf8ToBytes(string).length
}

function blitBuffer (src, dst, offset, length) {
  for (var i = 0; i < length; ++i) {
    if ((i + offset >= dst.length) || (i >= src.length)) break
    dst[i + offset] = src[i]
  }
  return i
}

function utf8Write (buf, string, offset, length) {
  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}

function from (that, value, offset, length) {
  if (typeof value === 'number') {
    throw new TypeError('"value" argument must not be a number')
  }

  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
    return fromArrayBuffer(that, value, offset, length)
  }

  if (typeof value === 'string') {
    return fromString(that, value, offset)
  }

  return fromObject(that, value)
}

Buffer.prototype.write = function write (string, offset, length) {
  // Buffer#write(string)
  if (offset === undefined) {
    length = this.length
    offset = 0
  // Buffer#write(string, encoding)
  } else if (length === undefined && typeof offset === 'string') {
    length = this.length
    offset = 0
  // Buffer#write(string, offset[, length])
  } else if (isFinite(offset)) {
    offset = offset | 0
    if (isFinite(length)) {
      length = length | 0
    } else {
      length = undefined
    }
  }

  var remaining = this.length - offset
  if (length === undefined || length > remaining) length = remaining

  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
    throw new RangeError('Attempt to write outside buffer bounds')
  }

  return utf8Write(this, string, offset, length)
}

Buffer.prototype.slice = function slice (start, end) {
  var len = this.length
  start = ~~start
  end = end === undefined ? len : ~~end

  if (start < 0) {
    start += len
    if (start < 0) start = 0
  } else if (start > len) {
    start = len
  }

  if (end < 0) {
    end += len
    if (end < 0) end = 0
  } else if (end > len) {
    end = len
  }

  if (end < start) end = start

  var newBuf
  if (Buffer.TYPED_ARRAY_SUPPORT) {
    newBuf = this.subarray(start, end)
    // Return an augmented `Uint8Array` instance
    newBuf.__proto__ = Buffer.prototype
  } else {
    var sliceLen = end - start
    newBuf = new Buffer(sliceLen, undefined)
    for (var i = 0; i < sliceLen; ++i) {
      newBuf[i] = this[i + start]
    }
  }

  return newBuf
}

Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  if (!start) start = 0
  if (!end && end !== 0) end = this.length
  if (targetStart >= target.length) targetStart = target.length
  if (!targetStart) targetStart = 0
  if (end > 0 && end < start) end = start

  // Copy 0 bytes; we're done
  if (end === start) return 0
  if (target.length === 0 || this.length === 0) return 0

  // Fatal error conditions
  if (targetStart < 0) {
    throw new RangeError('targetStart out of bounds')
  }
  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
  if (end < 0) throw new RangeError('sourceEnd out of bounds')

  // Are we oob?
  if (end > this.length) end = this.length
  if (target.length - targetStart < end - start) {
    end = target.length - targetStart + start
  }

  var len = end - start
  var i

  if (this === target && start < targetStart && targetStart < end) {
    // descending copy from end
    for (i = len - 1; i >= 0; --i) {
      target[i + targetStart] = this[i + start]
    }
  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
    // ascending copy from start
    for (i = 0; i < len; ++i) {
      target[i + targetStart] = this[i + start]
    }
  } else {
    Uint8Array.prototype.set.call(
      target,
      this.subarray(start, start + len),
      targetStart
    )
  }

  return len
}

Buffer.prototype.fill = function fill (val, start, end) {
  // Handle string cases:
  if (typeof val === 'string') {
    if (typeof start === 'string') {
      start = 0
      end = this.length
    } else if (typeof end === 'string') {
      end = this.length
    }
    if (val.length === 1) {
      var code = val.charCodeAt(0)
      if (code < 256) {
        val = code
      }
    }
  } else if (typeof val === 'number') {
    val = val & 255
  }

  // Invalid ranges are not set to a default, so can range check early.
  if (start < 0 || this.length < start || this.length < end) {
    throw new RangeError('Out of range index')
  }

  if (end <= start) {
    return this
  }

  start = start >>> 0
  end = end === undefined ? this.length : end >>> 0

  if (!val) val = 0

  var i
  if (typeof val === 'number') {
    for (i = start; i < end; ++i) {
      this[i] = val
    }
  } else {
    var bytes = Buffer.isBuffer(val)
      ? val
      : new Buffer(val)
    var len = bytes.length
    for (i = 0; i < end - start; ++i) {
      this[i + start] = bytes[i % len]
    }
  }

  return this
}

Buffer.concat = function concat (list, length) {
  if (!isArray(list)) {
    throw new TypeError('"list" argument must be an Array of Buffers')
  }

  if (list.length === 0) {
    return createBuffer(null, 0)
  }

  var i
  if (length === undefined) {
    length = 0
    for (i = 0; i < list.length; ++i) {
      length += list[i].length
    }
  }

  var buffer = allocUnsafe(null, length)
  var pos = 0
  for (i = 0; i < list.length; ++i) {
    var buf = list[i]
    if (!Buffer.isBuffer(buf)) {
      throw new TypeError('"list" argument must be an Array of Buffers')
    }
    buf.copy(buffer, pos)
    pos += buf.length
  }
  return buffer
}

Buffer.byteLength = byteLength

Buffer.prototype._isBuffer = true
Buffer.isBuffer = function isBuffer (b) {
  return !!(b != null && b._isBuffer)
}

module.exports.alloc = function (size) {
  var buffer = new Buffer(size)
  buffer.fill(0)
  return buffer
}

module.exports.from = function (data) {
  return new Buffer(data)
}
The MIT License (MIT)

Copyright (c) 2012 Ryan Day

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

var toString = {}.toString;

module.exports = Array.isArray || function (arr) {
  return toString.call(arr) == '[object Array]';
};
MIT License

Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "isarray",
  "description": "Array#isArray for older browsers",
  "version": "2.0.5",
  "repository": {
    "type": "git",
    "url": "git://github.com/juliangruber/isarray.git"
  },
  "homepage": "https://github.com/juliangruber/isarray",
  "main": "index.js",
  "files": [
    "index.js"
  ],
  "dependencies": {},
  "devDependencies": {
    "tape": "~2.13.4"
  },
  "author": {
    "name": "Julian Gruber",
    "email": "mail@juliangruber.com",
    "url": "http://juliangruber.com"
  },
  "license": "MIT",
  "testling": {
    "files": "test.js",
    "browsers": [
      "ie/8..latest",
      "firefox/17..latest",
      "firefox/nightly",
      "chrome/22..latest",
      "chrome/canary",
      "opera/12..latest",
      "opera/next",
      "safari/5.1..latest",
      "ipad/6.0..latest",
      "iphone/6.0..latest",
      "android-browser/4.2..latest"
    ]
  }
}{
  "name": "qrcode",
  "description": "QRCode / 2d Barcode api with both server side and client side support using canvas",
  "version": "1.4.4",
  "author": "Ryan Day <soldair@gmail.com>",
  "main": "./lib/index.js",
  "browser": {
    "./lib/index.js": "./lib/browser.js",
    "./lib/utils/buffer.js": "./lib/utils/typedarray-buffer.js",
    "fs": false
  },
  "files": [
    "bin",
    "build",
    "lib",
    "helper"
  ],
  "homepage": "http://github.com/soldair/node-qrcode",
  "license": "MIT",
  "bin": {
    "qrcode": "./bin/qrcode"
  },
  "dependencies": {
    "buffer": "^5.4.3",
    "buffer-alloc": "^1.2.0",
    "buffer-from": "^1.1.1",
    "dijkstrajs": "^1.0.1",
    "isarray": "^2.0.1",
    "pngjs": "^3.3.0",
    "yargs": "^13.2.4"
  },
  "devDependencies": {
    "browserify": "^16.2.3",
    "canvas": "^1.6.11",
    "canvasutil": "*",
    "colors": "*",
    "express": "^4.16.4",
    "htmlparser2": "^3.9.2",
    "os-tmpdir": "^1.0.2",
    "sinon": "^1.17.7",
    "standard": "^9.0.2",
    "tap": "^12.1.1",
    "uglify-js": "^2.7.5"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/soldair/node-qrcode.git"
  },
  "engines": {
    "node": ">=4"
  },
  "standard": {
    "ignore": [
      "build/",
      "examples/vendors/"
    ]
  }
}"use strict";var fs=require("mz/fs");module.exports={/**
	 * Read in the last `n` lines of a file
	 * @param  {string}   input_file_path - file (direct or relative path to file.)
	 * @param  {int}      maxLineCount    - max number of lines to read in.
	 * @param  {encoding} encoding        - specifies the character encoding to be used, or 'buffer'. defaults to 'utf8'.
	 *
	 * @return {promise}  a promise resolved with the lines or rejected with an error.
	 */read:function f(a,b,c){var d=["\n"];null==c&&(c="utf8");var e=function(a,b,c){return fs.read(b,Buffer.alloc(1),0,1,a.size-1-c).then(function(a){return String.fromCharCode(a[1][0])})};return new Promise(function(f,g){var h={stat:null,file:null};fs.exists(a).then(function(a){if(!a)throw new Error("file does not exist")}).then(function(){var b=[fs.stat(a).then(function(a){return h.stat=a}),fs.open(a,"r").then(function(a){return h.file=a})];// Load file Stats.
return Promise.all(b)}).then(function(){var a=0,g=0,i="",j=function(){return i.length>h.stat.size&&(i=i.substring(i.length-h.stat.size)),i.length>=h.stat.size||g>=b?(d.includes(i.substring(0,1))&&(i=i.substring(1)),fs.close(h.file),"buffer"===c?f(Buffer.from(i,"binary")):f(Buffer.from(i,"binary").toString(c))):e(h.stat,h.file,a).then(function(b){i=b+i,d.includes(b)&&1<i.length&&g++,a++}).then(j)};return j()}).catch(function(a){return null!==h.file&&fs.close(h.file).catch(function(){// We might get here if the encoding is invalid.
// Since we are already rejecting, let's ignore this error.
}),g(a)})})}};MIT License

Copyright (c) 2016 Alexander Bell-Towne

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "read-last-lines",
  "version": "1.8.0",
  "description": "Read in the last N lines of a file efficiently using node.js and fs.",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/alexbbt/read-last-lines.git"
  },
  "files": [
    "dist/index.js",
    "dist/index.d.ts"
  ],
  "tsd": {
    "directory": "test"
  },
  "author": "Alexander Bell-Towne <code@bell-towne.com> (https://github.com/alexbbt)",
  "license": "MIT",
  "homepage": "https://github.com/alexbbt/read-last-lines#readme",
  "devDependencies": {
    "@babel/cli": "^7.7.0",
    "@babel/core": "^7.3.4",
    "@babel/preset-env": "^7.3.4",
    "@types/node": "^14.14.9",
    "babel-preset-minify": "^0.5.0",
    "chai": "^3.5.0",
    "chai-as-promised": "^6.0.0",
    "eslint": "^5.15.1",
    "mocha": "^6.2.2",
    "tsd": "^0.13.1"
  },
  "dependencies": {
    "mz": "^2.7.0"
  }
}MIT License

Copyright (c) 2014-present, Facebook, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "regenerator-runtime",
  "author": "Ben Newman <bn@cs.stanford.edu>",
  "description": "Runtime for Regenerator-compiled generator and async functions.",
  "version": "0.13.7",
  "main": "runtime.js",
  "sideEffects": true,
  "repository": {
    "type": "git",
    "url": "https://github.com/facebook/regenerator/tree/master/packages/regenerator-runtime"
  },
  "license": "MIT"
}/**
 * Copyright (c) 2014-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

exports.path = require("path").join(
  __dirname,
  "runtime.js"
);
/**
 * Copyright (c) 2014-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

var runtime = (function (exports) {
  "use strict";

  var Op = Object.prototype;
  var hasOwn = Op.hasOwnProperty;
  var undefined; // More compressible than void 0.
  var $Symbol = typeof Symbol === "function" ? Symbol : {};
  var iteratorSymbol = $Symbol.iterator || "@@iterator";
  var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
  var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";

  function define(obj, key, value) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
    return obj[key];
  }
  try {
    // IE 8 has a broken Object.defineProperty that only works on DOM objects.
    define({}, "");
  } catch (err) {
    define = function(obj, key, value) {
      return obj[key] = value;
    };
  }

  function wrap(innerFn, outerFn, self, tryLocsList) {
    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
    var generator = Object.create(protoGenerator.prototype);
    var context = new Context(tryLocsList || []);

    // The ._invoke method unifies the implementations of the .next,
    // .throw, and .return methods.
    generator._invoke = makeInvokeMethod(innerFn, self, context);

    return generator;
  }
  exports.wrap = wrap;

  // Try/catch helper to minimize deoptimizations. Returns a completion
  // record like context.tryEntries[i].completion. This interface could
  // have been (and was previously) designed to take a closure to be
  // invoked without arguments, but in all the cases we care about we
  // already have an existing method we want to call, so there's no need
  // to create a new function object. We can even get away with assuming
  // the method takes exactly one argument, since that happens to be true
  // in every case, so we don't have to touch the arguments object. The
  // only additional allocation required is the completion record, which
  // has a stable shape and so hopefully should be cheap to allocate.
  function tryCatch(fn, obj, arg) {
    try {
      return { type: "normal", arg: fn.call(obj, arg) };
    } catch (err) {
      return { type: "throw", arg: err };
    }
  }

  var GenStateSuspendedStart = "suspendedStart";
  var GenStateSuspendedYield = "suspendedYield";
  var GenStateExecuting = "executing";
  var GenStateCompleted = "completed";

  // Returning this object from the innerFn has the same effect as
  // breaking out of the dispatch switch statement.
  var ContinueSentinel = {};

  // Dummy constructor functions that we use as the .constructor and
  // .constructor.prototype properties for functions that return Generator
  // objects. For full spec compliance, you may wish to configure your
  // minifier not to mangle the names of these two functions.
  function Generator() {}
  function GeneratorFunction() {}
  function GeneratorFunctionPrototype() {}

  // This is a polyfill for %IteratorPrototype% for environments that
  // don't natively support it.
  var IteratorPrototype = {};
  IteratorPrototype[iteratorSymbol] = function () {
    return this;
  };

  var getProto = Object.getPrototypeOf;
  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  if (NativeIteratorPrototype &&
      NativeIteratorPrototype !== Op &&
      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
    // This environment has a native %IteratorPrototype%; use it instead
    // of the polyfill.
    IteratorPrototype = NativeIteratorPrototype;
  }

  var Gp = GeneratorFunctionPrototype.prototype =
    Generator.prototype = Object.create(IteratorPrototype);
  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
  GeneratorFunctionPrototype.constructor = GeneratorFunction;
  GeneratorFunction.displayName = define(
    GeneratorFunctionPrototype,
    toStringTagSymbol,
    "GeneratorFunction"
  );

  // Helper for defining the .next, .throw, and .return methods of the
  // Iterator interface in terms of a single ._invoke method.
  function defineIteratorMethods(prototype) {
    ["next", "throw", "return"].forEach(function(method) {
      define(prototype, method, function(arg) {
        return this._invoke(method, arg);
      });
    });
  }

  exports.isGeneratorFunction = function(genFun) {
    var ctor = typeof genFun === "function" && genFun.constructor;
    return ctor
      ? ctor === GeneratorFunction ||
        // For the native GeneratorFunction constructor, the best we can
        // do is to check its .name property.
        (ctor.displayName || ctor.name) === "GeneratorFunction"
      : false;
  };

  exports.mark = function(genFun) {
    if (Object.setPrototypeOf) {
      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
    } else {
      genFun.__proto__ = GeneratorFunctionPrototype;
      define(genFun, toStringTagSymbol, "GeneratorFunction");
    }
    genFun.prototype = Object.create(Gp);
    return genFun;
  };

  // Within the body of any async function, `await x` is transformed to
  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
  // `hasOwn.call(value, "__await")` to determine if the yielded value is
  // meant to be awaited.
  exports.awrap = function(arg) {
    return { __await: arg };
  };

  function AsyncIterator(generator, PromiseImpl) {
    function invoke(method, arg, resolve, reject) {
      var record = tryCatch(generator[method], generator, arg);
      if (record.type === "throw") {
        reject(record.arg);
      } else {
        var result = record.arg;
        var value = result.value;
        if (value &&
            typeof value === "object" &&
            hasOwn.call(value, "__await")) {
          return PromiseImpl.resolve(value.__await).then(function(value) {
            invoke("next", value, resolve, reject);
          }, function(err) {
            invoke("throw", err, resolve, reject);
          });
        }

        return PromiseImpl.resolve(value).then(function(unwrapped) {
          // When a yielded Promise is resolved, its final value becomes
          // the .value of the Promise<{value,done}> result for the
          // current iteration.
          result.value = unwrapped;
          resolve(result);
        }, function(error) {
          // If a rejected Promise was yielded, throw the rejection back
          // into the async generator function so it can be handled there.
          return invoke("throw", error, resolve, reject);
        });
      }
    }

    var previousPromise;

    function enqueue(method, arg) {
      function callInvokeWithMethodAndArg() {
        return new PromiseImpl(function(resolve, reject) {
          invoke(method, arg, resolve, reject);
        });
      }

      return previousPromise =
        // If enqueue has been called before, then we want to wait until
        // all previous Promises have been resolved before calling invoke,
        // so that results are always delivered in the correct order. If
        // enqueue has not been called before, then it is important to
        // call invoke immediately, without waiting on a callback to fire,
        // so that the async generator function has the opportunity to do
        // any necessary setup in a predictable way. This predictability
        // is why the Promise constructor synchronously invokes its
        // executor callback, and why async functions synchronously
        // execute code before the first await. Since we implement simple
        // async functions in terms of async generators, it is especially
        // important to get this right, even though it requires care.
        previousPromise ? previousPromise.then(
          callInvokeWithMethodAndArg,
          // Avoid propagating failures to Promises returned by later
          // invocations of the iterator.
          callInvokeWithMethodAndArg
        ) : callInvokeWithMethodAndArg();
    }

    // Define the unified helper method that is used to implement .next,
    // .throw, and .return (see defineIteratorMethods).
    this._invoke = enqueue;
  }

  defineIteratorMethods(AsyncIterator.prototype);
  AsyncIterator.prototype[asyncIteratorSymbol] = function () {
    return this;
  };
  exports.AsyncIterator = AsyncIterator;

  // Note that simple async functions are implemented on top of
  // AsyncIterator objects; they just return a Promise for the value of
  // the final result produced by the iterator.
  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
    if (PromiseImpl === void 0) PromiseImpl = Promise;

    var iter = new AsyncIterator(
      wrap(innerFn, outerFn, self, tryLocsList),
      PromiseImpl
    );

    return exports.isGeneratorFunction(outerFn)
      ? iter // If outerFn is a generator, return the full iterator.
      : iter.next().then(function(result) {
          return result.done ? result.value : iter.next();
        });
  };

  function makeInvokeMethod(innerFn, self, context) {
    var state = GenStateSuspendedStart;

    return function invoke(method, arg) {
      if (state === GenStateExecuting) {
        throw new Error("Generator is already running");
      }

      if (state === GenStateCompleted) {
        if (method === "throw") {
          throw arg;
        }

        // Be forgiving, per 25.3.3.3.3 of the spec:
        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
        return doneResult();
      }

      context.method = method;
      context.arg = arg;

      while (true) {
        var delegate = context.delegate;
        if (delegate) {
          var delegateResult = maybeInvokeDelegate(delegate, context);
          if (delegateResult) {
            if (delegateResult === ContinueSentinel) continue;
            return delegateResult;
          }
        }

        if (context.method === "next") {
          // Setting context._sent for legacy support of Babel's
          // function.sent implementation.
          context.sent = context._sent = context.arg;

        } else if (context.method === "throw") {
          if (state === GenStateSuspendedStart) {
            state = GenStateCompleted;
            throw context.arg;
          }

          context.dispatchException(context.arg);

        } else if (context.method === "return") {
          context.abrupt("return", context.arg);
        }

        state = GenStateExecuting;

        var record = tryCatch(innerFn, self, context);
        if (record.type === "normal") {
          // If an exception is thrown from innerFn, we leave state ===
          // GenStateExecuting and loop back for another invocation.
          state = context.done
            ? GenStateCompleted
            : GenStateSuspendedYield;

          if (record.arg === ContinueSentinel) {
            continue;
          }

          return {
            value: record.arg,
            done: context.done
          };

        } else if (record.type === "throw") {
          state = GenStateCompleted;
          // Dispatch the exception by looping back around to the
          // context.dispatchException(context.arg) call above.
          context.method = "throw";
          context.arg = record.arg;
        }
      }
    };
  }

  // Call delegate.iterator[context.method](context.arg) and handle the
  // result, either by returning a { value, done } result from the
  // delegate iterator, or by modifying context.method and context.arg,
  // setting context.delegate to null, and returning the ContinueSentinel.
  function maybeInvokeDelegate(delegate, context) {
    var method = delegate.iterator[context.method];
    if (method === undefined) {
      // A .throw or .return when the delegate iterator has no .throw
      // method always terminates the yield* loop.
      context.delegate = null;

      if (context.method === "throw") {
        // Note: ["return"] must be used for ES3 parsing compatibility.
        if (delegate.iterator["return"]) {
          // If the delegate iterator has a return method, give it a
          // chance to clean up.
          context.method = "return";
          context.arg = undefined;
          maybeInvokeDelegate(delegate, context);

          if (context.method === "throw") {
            // If maybeInvokeDelegate(context) changed context.method from
            // "return" to "throw", let that override the TypeError below.
            return ContinueSentinel;
          }
        }

        context.method = "throw";
        context.arg = new TypeError(
          "The iterator does not provide a 'throw' method");
      }

      return ContinueSentinel;
    }

    var record = tryCatch(method, delegate.iterator, context.arg);

    if (record.type === "throw") {
      context.method = "throw";
      context.arg = record.arg;
      context.delegate = null;
      return ContinueSentinel;
    }

    var info = record.arg;

    if (! info) {
      context.method = "throw";
      context.arg = new TypeError("iterator result is not an object");
      context.delegate = null;
      return ContinueSentinel;
    }

    if (info.done) {
      // Assign the result of the finished delegate to the temporary
      // variable specified by delegate.resultName (see delegateYield).
      context[delegate.resultName] = info.value;

      // Resume execution at the desired location (see delegateYield).
      context.next = delegate.nextLoc;

      // If context.method was "throw" but the delegate handled the
      // exception, let the outer generator proceed normally. If
      // context.method was "next", forget context.arg since it has been
      // "consumed" by the delegate iterator. If context.method was
      // "return", allow the original .return call to continue in the
      // outer generator.
      if (context.method !== "return") {
        context.method = "next";
        context.arg = undefined;
      }

    } else {
      // Re-yield the result returned by the delegate method.
      return info;
    }

    // The delegate iterator is finished, so forget it and continue with
    // the outer generator.
    context.delegate = null;
    return ContinueSentinel;
  }

  // Define Generator.prototype.{next,throw,return} in terms of the
  // unified ._invoke helper method.
  defineIteratorMethods(Gp);

  define(Gp, toStringTagSymbol, "Generator");

  // A Generator should always return itself as the iterator object when the
  // @@iterator function is called on it. Some browsers' implementations of the
  // iterator prototype chain incorrectly implement this, causing the Generator
  // object to not be returned from this call. This ensures that doesn't happen.
  // See https://github.com/facebook/regenerator/issues/274 for more details.
  Gp[iteratorSymbol] = function() {
    return this;
  };

  Gp.toString = function() {
    return "[object Generator]";
  };

  function pushTryEntry(locs) {
    var entry = { tryLoc: locs[0] };

    if (1 in locs) {
      entry.catchLoc = locs[1];
    }

    if (2 in locs) {
      entry.finallyLoc = locs[2];
      entry.afterLoc = locs[3];
    }

    this.tryEntries.push(entry);
  }

  function resetTryEntry(entry) {
    var record = entry.completion || {};
    record.type = "normal";
    delete record.arg;
    entry.completion = record;
  }

  function Context(tryLocsList) {
    // The root entry object (effectively a try statement without a catch
    // or a finally block) gives us a place to store values thrown from
    // locations where there is no enclosing try statement.
    this.tryEntries = [{ tryLoc: "root" }];
    tryLocsList.forEach(pushTryEntry, this);
    this.reset(true);
  }

  exports.keys = function(object) {
    var keys = [];
    for (var key in object) {
      keys.push(key);
    }
    keys.reverse();

    // Rather than returning an object with a next method, we keep
    // things simple and return the next function itself.
    return function next() {
      while (keys.length) {
        var key = keys.pop();
        if (key in object) {
          next.value = key;
          next.done = false;
          return next;
        }
      }

      // To avoid creating an additional object, we just hang the .value
      // and .done properties off the next function object itself. This
      // also ensures that the minifier will not anonymize the function.
      next.done = true;
      return next;
    };
  };

  function values(iterable) {
    if (iterable) {
      var iteratorMethod = iterable[iteratorSymbol];
      if (iteratorMethod) {
        return iteratorMethod.call(iterable);
      }

      if (typeof iterable.next === "function") {
        return iterable;
      }

      if (!isNaN(iterable.length)) {
        var i = -1, next = function next() {
          while (++i < iterable.length) {
            if (hasOwn.call(iterable, i)) {
              next.value = iterable[i];
              next.done = false;
              return next;
            }
          }

          next.value = undefined;
          next.done = true;

          return next;
        };

        return next.next = next;
      }
    }

    // Return an iterator with no values.
    return { next: doneResult };
  }
  exports.values = values;

  function doneResult() {
    return { value: undefined, done: true };
  }

  Context.prototype = {
    constructor: Context,

    reset: function(skipTempReset) {
      this.prev = 0;
      this.next = 0;
      // Resetting context._sent for legacy support of Babel's
      // function.sent implementation.
      this.sent = this._sent = undefined;
      this.done = false;
      this.delegate = null;

      this.method = "next";
      this.arg = undefined;

      this.tryEntries.forEach(resetTryEntry);

      if (!skipTempReset) {
        for (var name in this) {
          // Not sure about the optimal order of these conditions:
          if (name.charAt(0) === "t" &&
              hasOwn.call(this, name) &&
              !isNaN(+name.slice(1))) {
            this[name] = undefined;
          }
        }
      }
    },

    stop: function() {
      this.done = true;

      var rootEntry = this.tryEntries[0];
      var rootRecord = rootEntry.completion;
      if (rootRecord.type === "throw") {
        throw rootRecord.arg;
      }

      return this.rval;
    },

    dispatchException: function(exception) {
      if (this.done) {
        throw exception;
      }

      var context = this;
      function handle(loc, caught) {
        record.type = "throw";
        record.arg = exception;
        context.next = loc;

        if (caught) {
          // If the dispatched exception was caught by a catch block,
          // then let that catch block handle the exception normally.
          context.method = "next";
          context.arg = undefined;
        }

        return !! caught;
      }

      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        var record = entry.completion;

        if (entry.tryLoc === "root") {
          // Exception thrown outside of any try block that could handle
          // it, so set the completion value of the entire function to
          // throw the exception.
          return handle("end");
        }

        if (entry.tryLoc <= this.prev) {
          var hasCatch = hasOwn.call(entry, "catchLoc");
          var hasFinally = hasOwn.call(entry, "finallyLoc");

          if (hasCatch && hasFinally) {
            if (this.prev < entry.catchLoc) {
              return handle(entry.catchLoc, true);
            } else if (this.prev < entry.finallyLoc) {
              return handle(entry.finallyLoc);
            }

          } else if (hasCatch) {
            if (this.prev < entry.catchLoc) {
              return handle(entry.catchLoc, true);
            }

          } else if (hasFinally) {
            if (this.prev < entry.finallyLoc) {
              return handle(entry.finallyLoc);
            }

          } else {
            throw new Error("try statement without catch or finally");
          }
        }
      }
    },

    abrupt: function(type, arg) {
      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        if (entry.tryLoc <= this.prev &&
            hasOwn.call(entry, "finallyLoc") &&
            this.prev < entry.finallyLoc) {
          var finallyEntry = entry;
          break;
        }
      }

      if (finallyEntry &&
          (type === "break" ||
           type === "continue") &&
          finallyEntry.tryLoc <= arg &&
          arg <= finallyEntry.finallyLoc) {
        // Ignore the finally entry if control is not jumping to a
        // location outside the try/catch block.
        finallyEntry = null;
      }

      var record = finallyEntry ? finallyEntry.completion : {};
      record.type = type;
      record.arg = arg;

      if (finallyEntry) {
        this.method = "next";
        this.next = finallyEntry.finallyLoc;
        return ContinueSentinel;
      }

      return this.complete(record);
    },

    complete: function(record, afterLoc) {
      if (record.type === "throw") {
        throw record.arg;
      }

      if (record.type === "break" ||
          record.type === "continue") {
        this.next = record.arg;
      } else if (record.type === "return") {
        this.rval = this.arg = record.arg;
        this.method = "return";
        this.next = "end";
      } else if (record.type === "normal" && afterLoc) {
        this.next = afterLoc;
      }

      return ContinueSentinel;
    },

    finish: function(finallyLoc) {
      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        if (entry.finallyLoc === finallyLoc) {
          this.complete(entry.completion, entry.afterLoc);
          resetTryEntry(entry);
          return ContinueSentinel;
        }
      }
    },

    "catch": function(tryLoc) {
      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
        var entry = this.tryEntries[i];
        if (entry.tryLoc === tryLoc) {
          var record = entry.completion;
          if (record.type === "throw") {
            var thrown = record.arg;
            resetTryEntry(entry);
          }
          return thrown;
        }
      }

      // The context.catch method must only be called with a location
      // argument that corresponds to a known catch block.
      throw new Error("illegal catch attempt");
    },

    delegateYield: function(iterable, resultName, nextLoc) {
      this.delegate = {
        iterator: values(iterable),
        resultName: resultName,
        nextLoc: nextLoc
      };

      if (this.method === "next") {
        // Deliberately forget the last sent value so that we don't
        // accidentally pass it on to the delegate.
        this.arg = undefined;
      }

      return ContinueSentinel;
    }
  };

  // Regardless of whether this script is executing as a CommonJS module
  // or not, return the runtime object so that we can declare the variable
  // regeneratorRuntime in the outer scope, which allows this module to be
  // injected easily by `bin/regenerator --include-runtime script.js`.
  return exports;

}(
  // If this script is executing as a CommonJS module, use module.exports
  // as the regeneratorRuntime namespace. Otherwise create a new empty
  // object. Either way, the resulting object will be used to initialize
  // the regeneratorRuntime variable at the top of this file.
  typeof module === "object" ? module.exports : {}
));

try {
  regeneratorRuntime = runtime;
} catch (accidentalStrictMode) {
  // This module should not be running in strict mode, so the above
  // assignment should always work unless something is misconfigured. Just
  // in case runtime.js accidentally runs in strict mode, we can escape
  // strict mode using a global Function call. This could conceivably fail
  // if a Content Security Policy forbids using Function, but in that case
  // the proper solution is to fix the accidental strict mode problem. If
  // you've misconfigured your bundler to force strict mode and applied a
  // CSP to forbid Function, and you're not willing to fix either of those
  // problems, please detail your unique predicament in a GitHub issue.
  Function("r", "regeneratorRuntime = r")(runtime);
}
'use strict';

var fs = require('fs'),
  join = require('path').join,
  resolve = require('path').resolve,
  dirname = require('path').dirname,
  defaultOptions = {
    extensions: ['js', 'json', 'coffee'],
    recurse: true,
    rename: function (name) {
      return name;
    },
    visit: function (obj) {
      return obj;
    }
  };

function checkFileInclusion(path, filename, options) {
  return (
    // verify file has valid extension
    (new RegExp('\\.(' + options.extensions.join('|') + ')$', 'i').test(filename)) &&

    // if options.include is a RegExp, evaluate it and make sure the path passes
    !(options.include && options.include instanceof RegExp && !options.include.test(path)) &&

    // if options.include is a function, evaluate it and make sure the path passes
    !(options.include && typeof options.include === 'function' && !options.include(path, filename)) &&

    // if options.exclude is a RegExp, evaluate it and make sure the path doesn't pass
    !(options.exclude && options.exclude instanceof RegExp && options.exclude.test(path)) &&

    // if options.exclude is a function, evaluate it and make sure the path doesn't pass
    !(options.exclude && typeof options.exclude === 'function' && options.exclude(path, filename))
  );
}

function requireDirectory(m, path, options) {
  var retval = {};

  // path is optional
  if (path && !options && typeof path !== 'string') {
    options = path;
    path = null;
  }

  // default options
  options = options || {};
  for (var prop in defaultOptions) {
    if (typeof options[prop] === 'undefined') {
      options[prop] = defaultOptions[prop];
    }
  }

  // if no path was passed in, assume the equivelant of __dirname from caller
  // otherwise, resolve path relative to the equivalent of __dirname
  path = !path ? dirname(m.filename) : resolve(dirname(m.filename), path);

  // get the path of each file in specified directory, append to current tree node, recurse
  fs.readdirSync(path).forEach(function (filename) {
    var joined = join(path, filename),
      files,
      key,
      obj;

    if (fs.statSync(joined).isDirectory() && options.recurse) {
      // this node is a directory; recurse
      files = requireDirectory(m, joined, options);
      // exclude empty directories
      if (Object.keys(files).length) {
        retval[options.rename(filename, joined, filename)] = files;
      }
    } else {
      if (joined !== m.filename && checkFileInclusion(joined, filename, options)) {
        // hash node key shouldn't include file extension
        key = filename.substring(0, filename.lastIndexOf('.'));
        obj = m.require(joined);
        retval[options.rename(key, joined, filename)] = options.visit(obj, joined, filename) || obj;
      }
    }
  });

  return retval;
}

module.exports = requireDirectory;
module.exports.defaults = defaultOptions;
The MIT License (MIT)

Copyright (c) 2011 Troy Goode <troygoode@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "author": "Troy Goode <troygoode@gmail.com> (http://github.com/troygoode/)",
  "name": "require-directory",
  "version": "2.1.1",
  "description": "Recursively iterates over specified directory, require()'ing each file, and returning a nested hash structure containing those modules.",
  "homepage": "https://github.com/troygoode/node-require-directory/",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "git://github.com/troygoode/node-require-directory.git"
  },
  "license": "MIT",
  "engines": {
    "node": ">=0.10.0"
  },
  "devDependencies": {
    "jshint": "^2.6.0",
    "mocha": "^2.1.0"
  }
}# require-directory

Recursively iterates over specified directory, `require()`'ing each file, and returning a nested hash structure containing those modules.

**[Follow me (@troygoode) on Twitter!](https://twitter.com/intent/user?screen_name=troygoode)**

[![NPM](https://nodei.co/npm/require-directory.png?downloads=true&stars=true)](https://nodei.co/npm/require-directory/)

[![build status](https://secure.travis-ci.org/troygoode/node-require-directory.png)](http://travis-ci.org/troygoode/node-require-directory)

## How To Use

### Installation (via [npm](https://npmjs.org/package/require-directory))

```bash
$ npm install require-directory
```

### Usage

A common pattern in node.js is to include an index file which creates a hash of the files in its current directory. Given a directory structure like so:

* app.js
* routes/
  * index.js
  * home.js
  * auth/
    * login.js
    * logout.js
    * register.js

`routes/index.js` uses `require-directory` to build the hash (rather than doing so manually) like so:

```javascript
var requireDirectory = require('require-directory');
module.exports = requireDirectory(module);
```

`app.js` references `routes/index.js` like any other module, but it now has a hash/tree of the exports from the `./routes/` directory:

```javascript
var routes = require('./routes');

// snip

app.get('/', routes.home);
app.get('/register', routes.auth.register);
app.get('/login', routes.auth.login);
app.get('/logout', routes.auth.logout);
```

The `routes` variable above is the equivalent of this:

```javascript
var routes = {
  home: require('routes/home.js'),
  auth: {
    login: require('routes/auth/login.js'),
    logout: require('routes/auth/logout.js'),
    register: require('routes/auth/register.js')
  }
};
```

*Note that `routes.index` will be `undefined` as you would hope.*

### Specifying Another Directory

You can specify which directory you want to build a tree of (if it isn't the current directory for whatever reason) by passing it as the second parameter. Not specifying the path (`requireDirectory(module)`) is the equivelant of `requireDirectory(module, __dirname)`:

```javascript
var requireDirectory = require('require-directory');
module.exports = requireDirectory(module, './some/subdirectory');
```

For example, in the [example in the Usage section](#usage) we could have avoided creating `routes/index.js` and instead changed the first lines of `app.js` to:

```javascript
var requireDirectory = require('require-directory');
var routes = requireDirectory(module, './routes');
```

## Options

You can pass an options hash to `require-directory` as the 2nd parameter (or 3rd if you're passing the path to another directory as the 2nd parameter already). Here are the available options:

### Whitelisting

Whitelisting (either via RegExp or function) allows you to specify that only certain files be loaded.

```javascript
var requireDirectory = require('require-directory'),
  whitelist = /onlyinclude.js$/,
  hash = requireDirectory(module, {include: whitelist});
```

```javascript
var requireDirectory = require('require-directory'),
  check = function(path){
    if(/onlyinclude.js$/.test(path)){
      return true; // don't include
    }else{
      return false; // go ahead and include
    }
  },
  hash = requireDirectory(module, {include: check});
```

### Blacklisting

Blacklisting (either via RegExp or function) allows you to specify that all but certain files should be loaded.

```javascript
var requireDirectory = require('require-directory'),
  blacklist = /dontinclude\.js$/,
  hash = requireDirectory(module, {exclude: blacklist});
```

```javascript
var requireDirectory = require('require-directory'),
  check = function(path){
    if(/dontinclude\.js$/.test(path)){
      return false; // don't include
    }else{
      return true; // go ahead and include
    }
  },
  hash = requireDirectory(module, {exclude: check});
```

### Visiting Objects As They're Loaded

`require-directory` takes a function as the `visit` option that will be called for each module that is added to module.exports.

```javascript
var requireDirectory = require('require-directory'),
  visitor = function(obj) {
    console.log(obj); // will be called for every module that is loaded
  },
  hash = requireDirectory(module, {visit: visitor});
```

The visitor can also transform the objects by returning a value:

```javascript
var requireDirectory = require('require-directory'),
  visitor = function(obj) {
    return obj(new Date());
  },
  hash = requireDirectory(module, {visit: visitor});
```

### Renaming Keys

```javascript
var requireDirectory = require('require-directory'),
  renamer = function(name) {
    return name.toUpperCase();
  },
  hash = requireDirectory(module, {rename: renamer});
```

### No Recursion

```javascript
var requireDirectory = require('require-directory'),
  hash = requireDirectory(module, {recurse: false});
```

## Run Unit Tests

```bash
$ npm run lint
$ npm test
```

## License

[MIT License](http://www.opensource.org/licenses/mit-license.php)

## Author

[Troy Goode](https://github.com/TroyGoode) ([troygoode@gmail.com](mailto:troygoode@gmail.com))

'use strict';

var Module = require('module');
var path = require('path');

module.exports = function requireFromString(code, filename, opts) {
	if (typeof filename === 'object') {
		opts = filename;
		filename = undefined;
	}

	opts = opts || {};
	filename = filename || '';

	opts.appendPaths = opts.appendPaths || [];
	opts.prependPaths = opts.prependPaths || [];

	if (typeof code !== 'string') {
		throw new Error('code must be a string, not ' + typeof code);
	}

	var paths = Module._nodeModulePaths(path.dirname(filename));

	var parent = module.parent;
	var m = new Module(filename, parent);
	m.filename = filename;
	m.paths = [].concat(opts.prependPaths).concat(paths).concat(opts.appendPaths);
	m._compile(code, filename);

	var exports = m.exports;
	parent && parent.children && parent.children.splice(parent.children.indexOf(m), 1);

	return exports;
};
The MIT License (MIT)

Copyright (c) Vsevolod Strukchinsky <floatdrop@gmail.com> (github.com/floatdrop)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "require-from-string",
  "version": "2.0.2",
  "description": "Require module from string",
  "license": "MIT",
  "repository": "floatdrop/require-from-string",
  "author": {
    "name": "Vsevolod Strukchinsky",
    "email": "floatdrop@gmail.com",
    "url": "github.com/floatdrop"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {},
  "devDependencies": {
    "mocha": "*"
  }
}module.exports = function (_require) {
  _require = _require || require
  var main = _require.main
  if (main && isIISNode(main)) return handleIISNode(main)
  else return main ? main.filename : process.cwd()
}

function isIISNode (main) {
  return /\\iisnode\\/.test(main.filename)
}

function handleIISNode (main) {
  if (!main.children.length) {
    return main.filename
  } else {
    return main.children[0].filename
  }
}
Copyright (c) 2016, Contributors

Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
that the above copyright notice and this permission notice
appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "require-main-filename",
  "version": "2.0.0",
  "description": "shim for require.main.filename() that works in as many environments as possible",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "git+ssh://git@github.com/yargs/require-main-filename.git"
  },
  "files": [
    "index.js"
  ],
  "author": "Ben Coe <ben@npmjs.com>",
  "license": "ISC",
  "homepage": "https://github.com/yargs/require-main-filename#readme",
  "devDependencies": {
    "chai": "^4.0.0",
    "standard": "^10.0.3",
    "standard-version": "^4.0.0",
    "tap": "^11.0.0"
  }
}/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
/* eslint-disable node/no-deprecated-api */
var buffer = require('buffer')
var Buffer = buffer.Buffer

// alternative to using Object.keys for old browsers
function copyProps (src, dst) {
  for (var key in src) {
    dst[key] = src[key]
  }
}
if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
  module.exports = buffer
} else {
  // Copy properties from require('buffer')
  copyProps(buffer, exports)
  exports.Buffer = SafeBuffer
}

function SafeBuffer (arg, encodingOrOffset, length) {
  return Buffer(arg, encodingOrOffset, length)
}

SafeBuffer.prototype = Object.create(Buffer.prototype)

// Copy static methods from Buffer
copyProps(Buffer, SafeBuffer)

SafeBuffer.from = function (arg, encodingOrOffset, length) {
  if (typeof arg === 'number') {
    throw new TypeError('Argument must not be a number')
  }
  return Buffer(arg, encodingOrOffset, length)
}

SafeBuffer.alloc = function (size, fill, encoding) {
  if (typeof size !== 'number') {
    throw new TypeError('Argument must be a number')
  }
  var buf = Buffer(size)
  if (fill !== undefined) {
    if (typeof encoding === 'string') {
      buf.fill(fill, encoding)
    } else {
      buf.fill(fill)
    }
  } else {
    buf.fill(0)
  }
  return buf
}

SafeBuffer.allocUnsafe = function (size) {
  if (typeof size !== 'number') {
    throw new TypeError('Argument must be a number')
  }
  return Buffer(size)
}

SafeBuffer.allocUnsafeSlow = function (size) {
  if (typeof size !== 'number') {
    throw new TypeError('Argument must be a number')
  }
  return buffer.SlowBuffer(size)
}
The MIT License (MIT)

Copyright (c) Feross Aboukhadijeh

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "safe-buffer",
  "description": "Safer Node.js Buffer API",
  "version": "5.2.1",
  "author": {
    "name": "Feross Aboukhadijeh",
    "email": "feross@feross.org",
    "url": "https://feross.org"
  },
  "devDependencies": {
    "standard": "*",
    "tape": "^5.0.0"
  },
  "homepage": "https://github.com/feross/safe-buffer",
  "license": "MIT",
  "main": "index.js",
  "types": "index.d.ts",
  "repository": {
    "type": "git",
    "url": "git://github.com/feross/safe-buffer.git"
  },
  "funding": [
    {
      "type": "github",
      "url": "https://github.com/sponsors/feross"
    },
    {
      "type": "patreon",
      "url": "https://www.patreon.com/feross"
    },
    {
      "type": "consulting",
      "url": "https://feross.org/support"
    }
  ]
}module.exports = function (blocking) {
  [process.stdout, process.stderr].forEach(function (stream) {
    if (stream._handle && stream.isTTY && typeof stream._handle.setBlocking === 'function') {
      stream._handle.setBlocking(blocking)
    }
  })
}
Copyright (c) 2016, Contributors

Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
that the above copyright notice and this permission notice
appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "set-blocking",
  "version": "2.0.0",
  "description": "set blocking stdio and stderr ensuring that terminal output does not truncate",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/yargs/set-blocking.git"
  },
  "author": "Ben Coe <ben@npmjs.com>",
  "license": "ISC",
  "homepage": "https://github.com/yargs/set-blocking#readme",
  "devDependencies": {
    "chai": "^3.5.0",
    "coveralls": "^2.11.9",
    "mocha": "^2.4.5",
    "nyc": "^6.4.4",
    "standard": "^7.0.1",
    "standard-version": "^2.2.1"
  },
  "files": [
    "index.js",
    "LICENSE.txt"
  ]
}'use strict'
/* eslint no-proto: 0 */
module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)

function setProtoOf (obj, proto) {
  obj.__proto__ = proto
  return obj
}

function mixinProperties (obj, proto) {
  for (var prop in proto) {
    if (!Object.prototype.hasOwnProperty.call(obj, prop)) {
      obj[prop] = proto[prop]
    }
  }
  return obj
}
Copyright (c) 2015, Wes Todd

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "setprototypeof",
  "version": "1.2.0",
  "description": "A small polyfill for Object.setprototypeof",
  "main": "index.js",
  "typings": "index.d.ts",
  "repository": {
    "type": "git",
    "url": "https://github.com/wesleytodd/setprototypeof.git"
  },
  "author": "Wes Todd",
  "license": "ISC",
  "homepage": "https://github.com/wesleytodd/setprototypeof",
  "devDependencies": {
    "mocha": "^6.1.4",
    "standard": "^13.0.2"
  }
}'use strict';
const execa = require('execa');
const stripAnsi = require('strip-ansi');
const defaultShell = require('default-shell');

const args = ['-ilc', 'env; exit'];

function parseEnv(env) {
	const ret = {};

	stripAnsi(env).split('\n').forEach(x => {
		const parts = x.split('=');
		ret[parts.shift()] = parts.join('=');
	});

	return ret;
}

module.exports = shell => {
	if (process.platform === 'win32') {
		return Promise.resolve(process.env);
	}

	return execa(shell || defaultShell, args)
		.then(x => parseEnv(x.stdout))
		.catch(err => {
			if (shell) {
				throw err;
			} else {
				return process.env;
			}
		});
};

module.exports.sync = shell => {
	if (process.platform === 'win32') {
		return process.env;
	}

	try {
		const stdout = execa.sync(shell || defaultShell, args).stdout;
		return parseEnv(stdout);
	} catch (err) {
		if (shell) {
			throw err;
		} else {
			return process.env;
		}
	}
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
'use strict';

var cp = require('child_process');
var parse = require('./lib/parse');
var enoent = require('./lib/enoent');

var cpSpawnSync = cp.spawnSync;

function spawn(command, args, options) {
    var parsed;
    var spawned;

    // Parse the arguments
    parsed = parse(command, args, options);

    // Spawn the child process
    spawned = cp.spawn(parsed.command, parsed.args, parsed.options);

    // Hook into child process "exit" event to emit an error if the command
    // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
    enoent.hookChildProcess(spawned, parsed);

    return spawned;
}

function spawnSync(command, args, options) {
    var parsed;
    var result;

    if (!cpSpawnSync) {
        try {
            cpSpawnSync = require('spawn-sync');  // eslint-disable-line global-require
        } catch (ex) {
            throw new Error(
                'In order to use spawnSync on node 0.10 or older, you must ' +
                'install spawn-sync:\n\n' +
                '  npm install spawn-sync --save'
            );
        }
    }

    // Parse the arguments
    parsed = parse(command, args, options);

    // Spawn the child process
    result = cpSpawnSync(parsed.command, parsed.args, parsed.options);

    // Analyze if the command does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
    result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);

    return result;
}

module.exports = spawn;
module.exports.spawn = spawn;
module.exports.sync = spawnSync;

module.exports._parse = parse;
module.exports._enoent = enoent;
'use strict';

var isWin = process.platform === 'win32';
var resolveCommand = require('./resolveCommand');

var isNode10 = process.version.indexOf('v0.10.') === 0;

function notFoundError(command, syscall) {
    var err;

    err = new Error(syscall + ' ' + command + ' ENOENT');
    err.code = err.errno = 'ENOENT';
    err.syscall = syscall + ' ' + command;

    return err;
}

function hookChildProcess(cp, parsed) {
    var originalEmit;

    if (!isWin) {
        return;
    }

    originalEmit = cp.emit;
    cp.emit = function (name, arg1) {
        var err;

        // If emitting "exit" event and exit code is 1, we need to check if
        // the command exists and emit an "error" instead
        // See: https://github.com/IndigoUnited/node-cross-spawn/issues/16
        if (name === 'exit') {
            err = verifyENOENT(arg1, parsed, 'spawn');

            if (err) {
                return originalEmit.call(cp, 'error', err);
            }
        }

        return originalEmit.apply(cp, arguments);
    };
}

function verifyENOENT(status, parsed) {
    if (isWin && status === 1 && !parsed.file) {
        return notFoundError(parsed.original, 'spawn');
    }

    return null;
}

function verifyENOENTSync(status, parsed) {
    if (isWin && status === 1 && !parsed.file) {
        return notFoundError(parsed.original, 'spawnSync');
    }

    // If we are in node 10, then we are using spawn-sync; if it exited
    // with -1 it probably means that the command does not exist
    if (isNode10 && status === -1) {
        parsed.file = isWin ? parsed.file : resolveCommand(parsed.original);

        if (!parsed.file) {
            return notFoundError(parsed.original, 'spawnSync');
        }
    }

    return null;
}

module.exports.hookChildProcess = hookChildProcess;
module.exports.verifyENOENT = verifyENOENT;
module.exports.verifyENOENTSync = verifyENOENTSync;
module.exports.notFoundError = notFoundError;
'use strict';

module.exports = (function () {
    if (process.platform !== 'win32') {
        return false;
    }
    var nodeVer = process.version.substr(1).split('.').map(function (num) {
        return parseInt(num, 10);
    });
    return (nodeVer[0] === 0 && nodeVer[1] < 12);
})();
'use strict';

var fs = require('fs');
var LRU = require('lru-cache');
var resolveCommand = require('./resolveCommand');
var hasBrokenSpawn = require('./hasBrokenSpawn');

var isWin = process.platform === 'win32';
var shebangCache = new LRU({ max: 50, maxAge: 30 * 1000 });  // Cache just for 30sec

function readShebang(command) {
    var buffer;
    var fd;
    var match;
    var shebang;

    // Check if it is in the cache first
    if (shebangCache.has(command)) {
        return shebangCache.get(command);
    }

    // Read the first 150 bytes from the file
    buffer = new Buffer(150);

    try {
        fd = fs.openSync(command, 'r');
        fs.readSync(fd, buffer, 0, 150, 0);
        fs.closeSync(fd);
    } catch (e) { /* empty */ }

    // Check if it is a shebang
    match = buffer.toString().trim().match(/#!(.+)/i);

    if (match) {
        shebang = match[1].replace(/\/usr\/bin\/env\s+/i, '');   // Remove /usr/bin/env
    }

    // Store the shebang in the cache
    shebangCache.set(command, shebang);

    return shebang;
}

function escapeArg(arg, quote) {
    // Convert to string
    arg = '' + arg;

    // If we are not going to quote the argument,
    // escape shell metacharacters, including double and single quotes:
    if (!quote) {
        arg = arg.replace(/([\(\)%!\^<>&|;,"'\s])/g, '^$1');
    } else {
        // Sequence of backslashes followed by a double quote:
        // double up all the backslashes and escape the double quote
        arg = arg.replace(/(\\*)"/g, '$1$1\\"');

        // Sequence of backslashes followed by the end of the string
        // (which will become a double quote later):
        // double up all the backslashes
        arg = arg.replace(/(\\*)$/, '$1$1');

        // All other backslashes occur literally

        // Quote the whole thing:
        arg = '"' + arg + '"';
    }

    return arg;
}

function escapeCommand(command) {
    // Do not escape if this command is not dangerous..
    // We do this so that commands like "echo" or "ifconfig" work
    // Quoting them, will make them unaccessible
    return /^[a-z0-9_-]+$/i.test(command) ? command : escapeArg(command, true);
}

function requiresShell(command) {
    return !/\.(?:com|exe)$/i.test(command);
}

function parse(command, args, options) {
    var shebang;
    var applyQuotes;
    var file;
    var original;
    var shell;

    // Normalize arguments, similar to nodejs
    if (args && !Array.isArray(args)) {
        options = args;
        args = null;
    }

    args = args ? args.slice(0) : [];  // Clone array to avoid changing the original
    options = options || {};
    original = command;

    if (isWin) {
        // Detect & add support for shebangs
        file = resolveCommand(command);
        file = file || resolveCommand(command, true);
        shebang = file && readShebang(file);
        shell = options.shell || hasBrokenSpawn;

        if (shebang) {
            args.unshift(file);
            command = shebang;
            shell = shell || requiresShell(resolveCommand(shebang) || resolveCommand(shebang, true));
        } else {
            shell = shell || requiresShell(file);
        }

        if (shell) {
            // Escape command & arguments
            applyQuotes = (command !== 'echo');  // Do not quote arguments for the special "echo" command
            command = escapeCommand(command);
            args = args.map(function (arg) {
                return escapeArg(arg, applyQuotes);
            });

            // Use cmd.exe
            args = ['/s', '/c', '"' + command + (args.length ? ' ' + args.join(' ') : '') + '"'];
            command = process.env.comspec || 'cmd.exe';

            // Tell node's spawn that the arguments are already escaped
            options.windowsVerbatimArguments = true;
        }
    }

    return {
        command: command,
        args: args,
        options: options,
        file: file,
        original: original,
    };
}

module.exports = parse;
'use strict';

var path = require('path');
var which = require('which');
var LRU = require('lru-cache');

var commandCache = new LRU({ max: 50, maxAge: 30 * 1000 });  // Cache just for 30sec

function resolveCommand(command, noExtension) {
    var resolved;

    noExtension = !!noExtension;
    resolved = commandCache.get(command + '!' + noExtension);

    // Check if its resolved in the cache
    if (commandCache.has(command)) {
        return commandCache.get(command);
    }

    try {
        resolved = !noExtension ?
            which.sync(command) :
            which.sync(command, { pathExt: path.delimiter + (process.env.PATHEXT || '') });
    } catch (e) { /* empty */ }

    commandCache.set(command + '!' + noExtension, resolved);

    return resolved;
}

module.exports = resolveCommand;
Copyright (c) 2014 IndigoUnited

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "cross-spawn",
  "version": "4.0.2",
  "description": "Cross platform child_process#spawn and child_process#spawnSync",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "git://github.com/IndigoUnited/node-cross-spawn.git"
  },
  "files": [
    "index.js",
    "lib"
  ],
  "author": "IndigoUnited <hello@indigounited.com> (http://indigounited.com)",
  "license": "MIT",
  "dependencies": {
    "lru-cache": "^4.0.1",
    "which": "^1.2.9"
  },
  "devDependencies": {
    "@satazor/eslint-config": "^3.0.0",
    "eslint": "^3.0.0",
    "expect.js": "^0.3.0",
    "glob": "^7.0.0",
    "mkdirp": "^0.5.1",
    "mocha": "^3.0.2",
    "rimraf": "^2.5.0"
  }
}'use strict';
const childProcess = require('child_process');
const util = require('util');
const crossSpawn = require('cross-spawn');
const stripEof = require('strip-eof');
const npmRunPath = require('npm-run-path');
const isStream = require('is-stream');
const _getStream = require('get-stream');
const pFinally = require('p-finally');
const onExit = require('signal-exit');
const errname = require('./lib/errname');

const TEN_MEGABYTES = 1000 * 1000 * 10;

function handleArgs(cmd, args, opts) {
	let parsed;

	if (opts && opts.__winShell === true) {
		delete opts.__winShell;
		parsed = {
			command: cmd,
			args,
			options: opts,
			file: cmd,
			original: cmd
		};
	} else {
		parsed = crossSpawn._parse(cmd, args, opts);
	}

	opts = Object.assign({
		maxBuffer: TEN_MEGABYTES,
		stripEof: true,
		preferLocal: true,
		encoding: 'utf8',
		reject: true,
		cleanup: true
	}, parsed.options);

	if (opts.preferLocal) {
		opts.env = npmRunPath.env(opts);
	}

	return {
		cmd: parsed.command,
		args: parsed.args,
		opts
	};
}

function handleInput(spawned, opts) {
	const input = opts.input;

	if (input === null || input === undefined) {
		return;
	}

	if (isStream(input)) {
		input.pipe(spawned.stdin);
	} else {
		spawned.stdin.end(input);
	}
}

function handleOutput(opts, val) {
	if (val && opts.stripEof) {
		val = stripEof(val);
	}

	return val;
}

function handleShell(fn, cmd, opts) {
	let file = '/bin/sh';
	let args = ['-c', cmd];

	opts = Object.assign({}, opts);

	if (process.platform === 'win32') {
		opts.__winShell = true;
		file = process.env.comspec || 'cmd.exe';
		args = ['/s', '/c', `"${cmd}"`];
		opts.windowsVerbatimArguments = true;
	}

	if (opts.shell) {
		file = opts.shell;
		delete opts.shell;
	}

	return fn(file, args, opts);
}

function getStream(process, stream, encoding, maxBuffer) {
	if (!process[stream]) {
		return null;
	}

	let ret;

	if (encoding) {
		ret = _getStream(process[stream], {
			encoding,
			maxBuffer
		});
	} else {
		ret = _getStream.buffer(process[stream], {maxBuffer});
	}

	return ret.catch(err => {
		err.stream = stream;
		err.message = `${stream} ${err.message}`;
		throw err;
	});
}

module.exports = (cmd, args, opts) => {
	let joinedCmd = cmd;

	if (Array.isArray(args) && args.length > 0) {
		joinedCmd += ' ' + args.join(' ');
	}

	const parsed = handleArgs(cmd, args, opts);
	const encoding = parsed.opts.encoding;
	const maxBuffer = parsed.opts.maxBuffer;

	let spawned;
	try {
		spawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts);
	} catch (err) {
		return Promise.reject(err);
	}

	let removeExitHandler;
	if (parsed.opts.cleanup) {
		removeExitHandler = onExit(() => {
			spawned.kill();
		});
	}

	let timeoutId = null;
	let timedOut = false;

	const cleanupTimeout = () => {
		if (timeoutId) {
			clearTimeout(timeoutId);
			timeoutId = null;
		}
	};

	if (parsed.opts.timeout > 0) {
		timeoutId = setTimeout(() => {
			timeoutId = null;
			timedOut = true;
			spawned.kill(parsed.killSignal);
		}, parsed.opts.timeout);
	}

	const processDone = new Promise(resolve => {
		spawned.on('exit', (code, signal) => {
			cleanupTimeout();
			resolve({code, signal});
		});

		spawned.on('error', err => {
			cleanupTimeout();
			resolve({err});
		});
	});

	function destroy() {
		if (spawned.stdout) {
			spawned.stdout.destroy();
		}

		if (spawned.stderr) {
			spawned.stderr.destroy();
		}
	}

	const promise = pFinally(Promise.all([
		processDone,
		getStream(spawned, 'stdout', encoding, maxBuffer),
		getStream(spawned, 'stderr', encoding, maxBuffer)
	]).then(arr => {
		const result = arr[0];
		const stdout = arr[1];
		const stderr = arr[2];

		let err = result.err;
		const code = result.code;
		const signal = result.signal;

		if (removeExitHandler) {
			removeExitHandler();
		}

		if (err || code !== 0 || signal !== null) {
			if (!err) {
				err = new Error(`Command failed: ${joinedCmd}\n${stderr}${stdout}`);
				err.code = code < 0 ? errname(code) : code;
			}

			// TODO: missing some timeout logic for killed
			// https://github.com/nodejs/node/blob/master/lib/child_process.js#L203
			// err.killed = spawned.killed || killed;
			err.killed = err.killed || spawned.killed;

			err.stdout = stdout;
			err.stderr = stderr;
			err.failed = true;
			err.signal = signal || null;
			err.cmd = joinedCmd;
			err.timedOut = timedOut;

			if (!parsed.opts.reject) {
				return err;
			}

			throw err;
		}

		return {
			stdout: handleOutput(parsed.opts, stdout),
			stderr: handleOutput(parsed.opts, stderr),
			code: 0,
			failed: false,
			killed: false,
			signal: null,
			cmd: joinedCmd,
			timedOut: false
		};
	}), destroy);

	crossSpawn._enoent.hookChildProcess(spawned, parsed);

	handleInput(spawned, parsed.opts);

	spawned.then = promise.then.bind(promise);
	spawned.catch = promise.catch.bind(promise);

	return spawned;
};

module.exports.stdout = function () {
	// TODO: set `stderr: 'ignore'` when that option is implemented
	return module.exports.apply(null, arguments).then(x => x.stdout);
};

module.exports.stderr = function () {
	// TODO: set `stdout: 'ignore'` when that option is implemented
	return module.exports.apply(null, arguments).then(x => x.stderr);
};

module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts);

module.exports.sync = (cmd, args, opts) => {
	const parsed = handleArgs(cmd, args, opts);

	if (isStream(parsed.opts.input)) {
		throw new TypeError('The `input` option cannot be a stream in sync mode');
	}

	const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts);

	result.stdout = handleOutput(parsed.opts, result.stdout);
	result.stderr = handleOutput(parsed.opts, result.stderr);

	return result;
};

module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts);

module.exports.spawn = util.deprecate(module.exports, 'execa.spawn() is deprecated. Use execa() instead.');
'use strict';
// The Node team wants to deprecate `process.bind(...)`.
//   https://github.com/nodejs/node/pull/2768
//
// However, we need the 'uv' binding for errname support.
// This is a defensive wrapper around it so `execa` will not fail entirely if it stops working someday.
//
// If this ever stops working. See: https://github.com/sindresorhus/execa/issues/31#issuecomment-215939939 for another possible solution.
let uv;

try {
	uv = process.binding('uv');

	if (typeof uv.errname !== 'function') {
		throw new Error('uv.errname is not a function');
	}
} catch (err) {
	console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err);
	uv = null;
}

function errname(uv, code) {
	if (uv) {
		return uv.errname(code);
	}

	if (!(code < 0)) {
		throw new Error('err >= 0');
	}

	return `Unknown system error ${code}`;
}

module.exports = code => errname(uv, code);

// used for testing the fallback behavior
module.exports.__test__ = errname;
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "execa",
  "version": "0.5.1",
  "description": "A better `child_process`",
  "license": "MIT",
  "repository": "sindresorhus/execa",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "maintainers": [
    {
      "name": "James Talmage",
      "email": "james@talmage.io",
      "url": "github.com/jamestalmage"
    }
  ],
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js",
    "lib"
  ],
  "dependencies": {
    "cross-spawn": "^4.0.0",
    "get-stream": "^2.2.0",
    "is-stream": "^1.1.0",
    "npm-run-path": "^2.0.0",
    "p-finally": "^1.0.0",
    "signal-exit": "^3.0.0",
    "strip-eof": "^1.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "cat-names": "^1.0.2",
    "coveralls": "^2.11.9",
    "delay": "^1.3.1",
    "is-running": "^2.0.0",
    "nyc": "^8.3.0",
    "xo": "*"
  }
}var PassThrough = require('stream').PassThrough;
var objectAssign = require('object-assign');

module.exports = function (opts) {
	opts = objectAssign({}, opts);

	var array = opts.array;
	var encoding = opts.encoding;

	var buffer = encoding === 'buffer';
	var objectMode = false;

	if (array) {
		objectMode = !(encoding || buffer);
	} else {
		encoding = encoding || 'utf8';
	}

	if (buffer) {
		encoding = null;
	}

	var len = 0;
	var ret = [];

	var stream = new PassThrough({objectMode: objectMode});

	if (encoding) {
		stream.setEncoding(encoding);
	}

	stream.on('data', function (chunk) {
		ret.push(chunk);

		if (objectMode) {
			len = ret.length;
		} else {
			len += chunk.length;
		}
	});

	stream.getBufferedValue = function () {
		if (array) {
			return ret;
		}
		return buffer ? Buffer.concat(ret, len) : ret.join('');
	};

	stream.getBufferedLength = function () {
		return len;
	};

	return stream;
};
'use strict';
var Promise = require('pinkie-promise');
var objectAssign = require('object-assign');
var bufferStream = require('./buffer-stream');

function getStream(inputStream, opts) {
	if (!inputStream) {
		return Promise.reject(new Error('Expected a stream'));
	}

	opts = objectAssign({maxBuffer: Infinity}, opts);
	var maxBuffer = opts.maxBuffer;
	var stream;
	var clean;

	var p = new Promise(function (resolve, reject) {
		stream = bufferStream(opts);
		inputStream.once('error', error);
		inputStream.pipe(stream);

		stream.on('data', function () {
			if (stream.getBufferedLength() > maxBuffer) {
				reject(new Error('maxBuffer exceeded'));
			}
		});
		stream.once('error', error);
		stream.on('end', resolve);

		clean = function () {
			// some streams doesn't implement the stream.Readable interface correctly
			if (inputStream.unpipe) {
				inputStream.unpipe(stream);
			}
		};

		function error(err) {
			if (err) { // null check
				err.bufferedData = stream.getBufferedValue();
			}
			reject(err);
		}
	});

	p.then(clean, clean);

	return p.then(function () {
		return stream.getBufferedValue();
	});
}

module.exports = getStream;

module.exports.buffer = function (stream, opts) {
	return getStream(stream, objectAssign({}, opts, {encoding: 'buffer'}));
};

module.exports.array = function (stream, opts) {
	return getStream(stream, objectAssign({}, opts, {array: true}));
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "get-stream",
  "version": "2.3.1",
  "description": "Get a stream as a string, buffer, or array",
  "license": "MIT",
  "repository": "sindresorhus/get-stream",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js",
    "buffer-stream.js"
  ],
  "dependencies": {
    "object-assign": "^4.0.1",
    "pinkie-promise": "^2.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "buffer-equals": "^1.0.3",
    "into-stream": "^2.0.1",
    "xo": "*"
  }
}'use strict';
const path = require('path');
const pathKey = require('path-key');

module.exports = opts => {
	opts = Object.assign({
		cwd: process.cwd(),
		path: process.env[pathKey()]
	}, opts);

	let prev;
	let pth = path.resolve(opts.cwd);
	const ret = [];

	while (prev !== pth) {
		ret.push(path.join(pth, 'node_modules/.bin'));
		prev = pth;
		pth = path.resolve(pth, '..');
	}

	// ensure the running `node` binary is used
	ret.push(path.dirname(process.execPath));

	return ret.concat(opts.path).join(path.delimiter);
};

module.exports.env = opts => {
	opts = Object.assign({
		env: process.env
	}, opts);

	const env = Object.assign({}, opts.env);
	const path = pathKey({env});

	opts.path = env[path];
	env[path] = module.exports(opts);

	return env;
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "npm-run-path",
  "version": "2.0.2",
  "description": "Get your PATH prepended with locally installed binaries",
  "license": "MIT",
  "repository": "sindresorhus/npm-run-path",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "path-key": "^2.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}'use strict';
var ansiRegex = require('ansi-regex')();

module.exports = function (str) {
	return typeof str === 'string' ? str.replace(ansiRegex, '') : str;
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "strip-ansi",
  "version": "3.0.1",
  "description": "Strip ANSI escape codes",
  "license": "MIT",
  "repository": "chalk/strip-ansi",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "maintainers": [
    "Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
    "Joshua Boy Nicolai Appelman <joshua@jbna.nl> (jbna.nl)",
    "JD Ballard <i.am.qix@gmail.com> (github.com/qix-)"
  ],
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "ansi-regex": "^2.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}{
  "name": "shell-env",
  "version": "0.3.0",
  "description": "Get environment variables from the shell",
  "license": "MIT",
  "repository": "sindresorhus/shell-env",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "maintainers": [
    "silverwind <me@silverwind.io> (github.com/silverwind)"
  ],
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "default-shell": "^1.0.0",
    "execa": "^0.5.0",
    "strip-ansi": "^3.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}'use strict';
const shellEnv = require('shell-env');

module.exports = () => shellEnv().then(x => x.PATH);
module.exports.sync = () => shellEnv.sync().PATH;
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "shell-path",
  "version": "2.1.0",
  "description": "Get the $PATH from the shell",
  "license": "MIT",
  "repository": "sindresorhus/shell-path",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "maintainers": [
    "silverwind <me@silverwind.io> (github.com/silverwind)"
  ],
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "shell-env": "^0.3.0"
  },
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}// Note: since nyc uses this module to output coverage, any lines
// that are in the direct sync flow of nyc's outputCoverage are
// ignored, since we can never get coverage for them.
var assert = require('assert')
var signals = require('./signals.js')
var isWin = /^win/i.test(process.platform)

var EE = require('events')
/* istanbul ignore if */
if (typeof EE !== 'function') {
  EE = EE.EventEmitter
}

var emitter
if (process.__signal_exit_emitter__) {
  emitter = process.__signal_exit_emitter__
} else {
  emitter = process.__signal_exit_emitter__ = new EE()
  emitter.count = 0
  emitter.emitted = {}
}

// Because this emitter is a global, we have to check to see if a
// previous version of this library failed to enable infinite listeners.
// I know what you're about to say.  But literally everything about
// signal-exit is a compromise with evil.  Get used to it.
if (!emitter.infinite) {
  emitter.setMaxListeners(Infinity)
  emitter.infinite = true
}

module.exports = function (cb, opts) {
  assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')

  if (loaded === false) {
    load()
  }

  var ev = 'exit'
  if (opts && opts.alwaysLast) {
    ev = 'afterexit'
  }

  var remove = function () {
    emitter.removeListener(ev, cb)
    if (emitter.listeners('exit').length === 0 &&
        emitter.listeners('afterexit').length === 0) {
      unload()
    }
  }
  emitter.on(ev, cb)

  return remove
}

module.exports.unload = unload
function unload () {
  if (!loaded) {
    return
  }
  loaded = false

  signals.forEach(function (sig) {
    try {
      process.removeListener(sig, sigListeners[sig])
    } catch (er) {}
  })
  process.emit = originalProcessEmit
  process.reallyExit = originalProcessReallyExit
  emitter.count -= 1
}

function emit (event, code, signal) {
  if (emitter.emitted[event]) {
    return
  }
  emitter.emitted[event] = true
  emitter.emit(event, code, signal)
}

// { <signal>: <listener fn>, ... }
var sigListeners = {}
signals.forEach(function (sig) {
  sigListeners[sig] = function listener () {
    // If there are no other listeners, an exit is coming!
    // Simplest way: remove us and then re-send the signal.
    // We know that this will kill the process, so we can
    // safely emit now.
    var listeners = process.listeners(sig)
    if (listeners.length === emitter.count) {
      unload()
      emit('exit', null, sig)
      /* istanbul ignore next */
      emit('afterexit', null, sig)
      /* istanbul ignore next */
      if (isWin && sig === 'SIGHUP') {
        // "SIGHUP" throws an `ENOSYS` error on Windows,
        // so use a supported signal instead
        sig = 'SIGINT'
      }
      process.kill(process.pid, sig)
    }
  }
})

module.exports.signals = function () {
  return signals
}

module.exports.load = load

var loaded = false

function load () {
  if (loaded) {
    return
  }
  loaded = true

  // This is the number of onSignalExit's that are in play.
  // It's important so that we can count the correct number of
  // listeners on signals, and don't wait for the other one to
  // handle it instead of us.
  emitter.count += 1

  signals = signals.filter(function (sig) {
    try {
      process.on(sig, sigListeners[sig])
      return true
    } catch (er) {
      return false
    }
  })

  process.emit = processEmit
  process.reallyExit = processReallyExit
}

var originalProcessReallyExit = process.reallyExit
function processReallyExit (code) {
  process.exitCode = code || 0
  emit('exit', process.exitCode, null)
  /* istanbul ignore next */
  emit('afterexit', process.exitCode, null)
  /* istanbul ignore next */
  originalProcessReallyExit.call(process, process.exitCode)
}

var originalProcessEmit = process.emit
function processEmit (ev, arg) {
  if (ev === 'exit') {
    if (arg !== undefined) {
      process.exitCode = arg
    }
    var ret = originalProcessEmit.apply(this, arguments)
    emit('exit', process.exitCode, null)
    /* istanbul ignore next */
    emit('afterexit', process.exitCode, null)
    return ret
  } else {
    return originalProcessEmit.apply(this, arguments)
  }
}
The ISC License

Copyright (c) 2015, Contributors

Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
that the above copyright notice and this permission notice
appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "signal-exit",
  "version": "3.0.3",
  "description": "when you want to fire an event no matter how a process exits.",
  "main": "index.js",
  "files": [
    "index.js",
    "signals.js"
  ],
  "repository": {
    "type": "git",
    "url": "https://github.com/tapjs/signal-exit.git"
  },
  "author": "Ben Coe <ben@npmjs.com>",
  "license": "ISC",
  "homepage": "https://github.com/tapjs/signal-exit",
  "devDependencies": {
    "chai": "^3.5.0",
    "coveralls": "^2.11.10",
    "nyc": "^8.1.0",
    "standard": "^8.1.0",
    "standard-version": "^2.3.0",
    "tap": "^8.0.1"
  }
}// This is not the set of all possible signals.
//
// It IS, however, the set of all signals that trigger
// an exit on either Linux or BSD systems.  Linux is a
// superset of the signal names supported on BSD, and
// the unknown signals just fail to register, so we can
// catch that easily enough.
//
// Don't bother with SIGKILL.  It's uncatchable, which
// means that we can't fire any callbacks anyway.
//
// If a user does happen to register a handler on a non-
// fatal signal like SIGWINCH or something, and then
// exit, it'll end up firing `process.emit('exit')`, so
// the handler will be fired anyway.
//
// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised
// artificially, inherently leave the process in a
// state from which it is not safe to try and enter JS
// listeners.
module.exports = [
  'SIGABRT',
  'SIGALRM',
  'SIGHUP',
  'SIGINT',
  'SIGTERM'
]

if (process.platform !== 'win32') {
  module.exports.push(
    'SIGVTALRM',
    'SIGXCPU',
    'SIGXFSZ',
    'SIGUSR2',
    'SIGTRAP',
    'SIGSYS',
    'SIGQUIT',
    'SIGIOT'
    // should detect profiler and enable/disable accordingly.
    // see #21
    // 'SIGPROF'
  )
}

if (process.platform === 'linux') {
  module.exports.push(
    'SIGIO',
    'SIGPOLL',
    'SIGPWR',
    'SIGSTKFLT',
    'SIGUNUSED'
  )
}
MIT License

Copyright (c) 2019 All contributors to Sortable

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
/**!
 * Sortable 1.10.2
 * @author	RubaXa   <trash@rubaxa.org>
 * @author	owenm    <owen23355@gmail.com>
 * @license MIT
 */
function _typeof(obj) {
  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    _typeof = function (obj) {
      return typeof obj;
    };
  } else {
    _typeof = function (obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };
  }

  return _typeof(obj);
}

function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
}

function _extends() {
  _extends = Object.assign || function (target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i];

      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      }
    }

    return target;
  };

  return _extends.apply(this, arguments);
}

function _objectSpread(target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i] != null ? arguments[i] : {};
    var ownKeys = Object.keys(source);

    if (typeof Object.getOwnPropertySymbols === 'function') {
      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
        return Object.getOwnPropertyDescriptor(source, sym).enumerable;
      }));
    }

    ownKeys.forEach(function (key) {
      _defineProperty(target, key, source[key]);
    });
  }

  return target;
}

function _objectWithoutPropertiesLoose(source, excluded) {
  if (source == null) return {};
  var target = {};
  var sourceKeys = Object.keys(source);
  var key, i;

  for (i = 0; i < sourceKeys.length; i++) {
    key = sourceKeys[i];
    if (excluded.indexOf(key) >= 0) continue;
    target[key] = source[key];
  }

  return target;
}

function _objectWithoutProperties(source, excluded) {
  if (source == null) return {};

  var target = _objectWithoutPropertiesLoose(source, excluded);

  var key, i;

  if (Object.getOwnPropertySymbols) {
    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);

    for (i = 0; i < sourceSymbolKeys.length; i++) {
      key = sourceSymbolKeys[i];
      if (excluded.indexOf(key) >= 0) continue;
      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
      target[key] = source[key];
    }
  }

  return target;
}

function _toConsumableArray(arr) {
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
}

function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) {
    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];

    return arr2;
  }
}

function _iterableToArray(iter) {
  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
}

function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance");
}

var version = "1.10.2";

function userAgent(pattern) {
  if (typeof window !== 'undefined' && window.navigator) {
    return !!
    /*@__PURE__*/
    navigator.userAgent.match(pattern);
  }
}

var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i);
var Edge = userAgent(/Edge/i);
var FireFox = userAgent(/firefox/i);
var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);
var IOS = userAgent(/iP(ad|od|hone)/i);
var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);

var captureMode = {
  capture: false,
  passive: false
};

function on(el, event, fn) {
  el.addEventListener(event, fn, !IE11OrLess && captureMode);
}

function off(el, event, fn) {
  el.removeEventListener(event, fn, !IE11OrLess && captureMode);
}

function matches(
/**HTMLElement*/
el,
/**String*/
selector) {
  if (!selector) return;
  selector[0] === '>' && (selector = selector.substring(1));

  if (el) {
    try {
      if (el.matches) {
        return el.matches(selector);
      } else if (el.msMatchesSelector) {
        return el.msMatchesSelector(selector);
      } else if (el.webkitMatchesSelector) {
        return el.webkitMatchesSelector(selector);
      }
    } catch (_) {
      return false;
    }
  }

  return false;
}

function getParentOrHost(el) {
  return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;
}

function closest(
/**HTMLElement*/
el,
/**String*/
selector,
/**HTMLElement*/
ctx, includeCTX) {
  if (el) {
    ctx = ctx || document;

    do {
      if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {
        return el;
      }

      if (el === ctx) break;
      /* jshint boss:true */
    } while (el = getParentOrHost(el));
  }

  return null;
}

var R_SPACE = /\s+/g;

function toggleClass(el, name, state) {
  if (el && name) {
    if (el.classList) {
      el.classList[state ? 'add' : 'remove'](name);
    } else {
      var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');
      el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');
    }
  }
}

function css(el, prop, val) {
  var style = el && el.style;

  if (style) {
    if (val === void 0) {
      if (document.defaultView && document.defaultView.getComputedStyle) {
        val = document.defaultView.getComputedStyle(el, '');
      } else if (el.currentStyle) {
        val = el.currentStyle;
      }

      return prop === void 0 ? val : val[prop];
    } else {
      if (!(prop in style) && prop.indexOf('webkit') === -1) {
        prop = '-webkit-' + prop;
      }

      style[prop] = val + (typeof val === 'string' ? '' : 'px');
    }
  }
}

function matrix(el, selfOnly) {
  var appliedTransforms = '';

  if (typeof el === 'string') {
    appliedTransforms = el;
  } else {
    do {
      var transform = css(el, 'transform');

      if (transform && transform !== 'none') {
        appliedTransforms = transform + ' ' + appliedTransforms;
      }
      /* jshint boss:true */

    } while (!selfOnly && (el = el.parentNode));
  }

  var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;
  /*jshint -W056 */

  return matrixFn && new matrixFn(appliedTransforms);
}

function find(ctx, tagName, iterator) {
  if (ctx) {
    var list = ctx.getElementsByTagName(tagName),
        i = 0,
        n = list.length;

    if (iterator) {
      for (; i < n; i++) {
        iterator(list[i], i);
      }
    }

    return list;
  }

  return [];
}

function getWindowScrollingElement() {
  var scrollingElement = document.scrollingElement;

  if (scrollingElement) {
    return scrollingElement;
  } else {
    return document.documentElement;
  }
}
/**
 * Returns the "bounding client rect" of given element
 * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted
 * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container
 * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr
 * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone
 * @param  {[HTMLElement]} container              The parent the element will be placed in
 * @return {Object}                               The boundingClientRect of el, with specified adjustments
 */


function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {
  if (!el.getBoundingClientRect && el !== window) return;
  var elRect, top, left, bottom, right, height, width;

  if (el !== window && el !== getWindowScrollingElement()) {
    elRect = el.getBoundingClientRect();
    top = elRect.top;
    left = elRect.left;
    bottom = elRect.bottom;
    right = elRect.right;
    height = elRect.height;
    width = elRect.width;
  } else {
    top = 0;
    left = 0;
    bottom = window.innerHeight;
    right = window.innerWidth;
    height = window.innerHeight;
    width = window.innerWidth;
  }

  if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {
    // Adjust for translate()
    container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)
    // Not needed on <= IE11

    if (!IE11OrLess) {
      do {
        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {
          var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container

          top -= containerRect.top + parseInt(css(container, 'border-top-width'));
          left -= containerRect.left + parseInt(css(container, 'border-left-width'));
          bottom = top + elRect.height;
          right = left + elRect.width;
          break;
        }
        /* jshint boss:true */

      } while (container = container.parentNode);
    }
  }

  if (undoScale && el !== window) {
    // Adjust for scale()
    var elMatrix = matrix(container || el),
        scaleX = elMatrix && elMatrix.a,
        scaleY = elMatrix && elMatrix.d;

    if (elMatrix) {
      top /= scaleY;
      left /= scaleX;
      width /= scaleX;
      height /= scaleY;
      bottom = top + height;
      right = left + width;
    }
  }

  return {
    top: top,
    left: left,
    bottom: bottom,
    right: right,
    width: width,
    height: height
  };
}
/**
 * Checks if a side of an element is scrolled past a side of its parents
 * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question
 * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')
 * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')
 * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element
 */


function isScrolledPast(el, elSide, parentSide) {
  var parent = getParentAutoScrollElement(el, true),
      elSideVal = getRect(el)[elSide];
  /* jshint boss:true */

  while (parent) {
    var parentSideVal = getRect(parent)[parentSide],
        visible = void 0;

    if (parentSide === 'top' || parentSide === 'left') {
      visible = elSideVal >= parentSideVal;
    } else {
      visible = elSideVal <= parentSideVal;
    }

    if (!visible) return parent;
    if (parent === getWindowScrollingElement()) break;
    parent = getParentAutoScrollElement(parent, false);
  }

  return false;
}
/**
 * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)
 * and non-draggable elements
 * @param  {HTMLElement} el       The parent element
 * @param  {Number} childNum      The index of the child
 * @param  {Object} options       Parent Sortable's options
 * @return {HTMLElement}          The child at index childNum, or null if not found
 */


function getChild(el, childNum, options) {
  var currentChild = 0,
      i = 0,
      children = el.children;

  while (i < children.length) {
    if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {
      if (currentChild === childNum) {
        return children[i];
      }

      currentChild++;
    }

    i++;
  }

  return null;
}
/**
 * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)
 * @param  {HTMLElement} el       Parent element
 * @param  {selector} selector    Any other elements that should be ignored
 * @return {HTMLElement}          The last child, ignoring ghostEl
 */


function lastChild(el, selector) {
  var last = el.lastElementChild;

  while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {
    last = last.previousElementSibling;
  }

  return last || null;
}
/**
 * Returns the index of an element within its parent for a selected set of
 * elements
 * @param  {HTMLElement} el
 * @param  {selector} selector
 * @return {number}
 */


function index(el, selector) {
  var index = 0;

  if (!el || !el.parentNode) {
    return -1;
  }
  /* jshint boss:true */


  while (el = el.previousElementSibling) {
    if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {
      index++;
    }
  }

  return index;
}
/**
 * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.
 * The value is returned in real pixels.
 * @param  {HTMLElement} el
 * @return {Array}             Offsets in the format of [left, top]
 */


function getRelativeScrollOffset(el) {
  var offsetLeft = 0,
      offsetTop = 0,
      winScroller = getWindowScrollingElement();

  if (el) {
    do {
      var elMatrix = matrix(el),
          scaleX = elMatrix.a,
          scaleY = elMatrix.d;
      offsetLeft += el.scrollLeft * scaleX;
      offsetTop += el.scrollTop * scaleY;
    } while (el !== winScroller && (el = el.parentNode));
  }

  return [offsetLeft, offsetTop];
}
/**
 * Returns the index of the object within the given array
 * @param  {Array} arr   Array that may or may not hold the object
 * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find
 * @return {Number}      The index of the object in the array, or -1
 */


function indexOfObject(arr, obj) {
  for (var i in arr) {
    if (!arr.hasOwnProperty(i)) continue;

    for (var key in obj) {
      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);
    }
  }

  return -1;
}

function getParentAutoScrollElement(el, includeSelf) {
  // skip to window
  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();
  var elem = el;
  var gotSelf = false;

  do {
    // we don't need to get elem css if it isn't even overflowing in the first place (performance)
    if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {
      var elemCSS = css(elem);

      if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {
        if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();
        if (gotSelf || includeSelf) return elem;
        gotSelf = true;
      }
    }
    /* jshint boss:true */

  } while (elem = elem.parentNode);

  return getWindowScrollingElement();
}

function extend(dst, src) {
  if (dst && src) {
    for (var key in src) {
      if (src.hasOwnProperty(key)) {
        dst[key] = src[key];
      }
    }
  }

  return dst;
}

function isRectEqual(rect1, rect2) {
  return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);
}

var _throttleTimeout;

function throttle(callback, ms) {
  return function () {
    if (!_throttleTimeout) {
      var args = arguments,
          _this = this;

      if (args.length === 1) {
        callback.call(_this, args[0]);
      } else {
        callback.apply(_this, args);
      }

      _throttleTimeout = setTimeout(function () {
        _throttleTimeout = void 0;
      }, ms);
    }
  };
}

function cancelThrottle() {
  clearTimeout(_throttleTimeout);
  _throttleTimeout = void 0;
}

function scrollBy(el, x, y) {
  el.scrollLeft += x;
  el.scrollTop += y;
}

function clone(el) {
  var Polymer = window.Polymer;
  var $ = window.jQuery || window.Zepto;

  if (Polymer && Polymer.dom) {
    return Polymer.dom(el).cloneNode(true);
  } else if ($) {
    return $(el).clone(true)[0];
  } else {
    return el.cloneNode(true);
  }
}

function setRect(el, rect) {
  css(el, 'position', 'absolute');
  css(el, 'top', rect.top);
  css(el, 'left', rect.left);
  css(el, 'width', rect.width);
  css(el, 'height', rect.height);
}

function unsetRect(el) {
  css(el, 'position', '');
  css(el, 'top', '');
  css(el, 'left', '');
  css(el, 'width', '');
  css(el, 'height', '');
}

var expando = 'Sortable' + new Date().getTime();

function AnimationStateManager() {
  var animationStates = [],
      animationCallbackId;
  return {
    captureAnimationState: function captureAnimationState() {
      animationStates = [];
      if (!this.options.animation) return;
      var children = [].slice.call(this.el.children);
      children.forEach(function (child) {
        if (css(child, 'display') === 'none' || child === Sortable.ghost) return;
        animationStates.push({
          target: child,
          rect: getRect(child)
        });

        var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation


        if (child.thisAnimationDuration) {
          var childMatrix = matrix(child, true);

          if (childMatrix) {
            fromRect.top -= childMatrix.f;
            fromRect.left -= childMatrix.e;
          }
        }

        child.fromRect = fromRect;
      });
    },
    addAnimationState: function addAnimationState(state) {
      animationStates.push(state);
    },
    removeAnimationState: function removeAnimationState(target) {
      animationStates.splice(indexOfObject(animationStates, {
        target: target
      }), 1);
    },
    animateAll: function animateAll(callback) {
      var _this = this;

      if (!this.options.animation) {
        clearTimeout(animationCallbackId);
        if (typeof callback === 'function') callback();
        return;
      }

      var animating = false,
          animationTime = 0;
      animationStates.forEach(function (state) {
        var time = 0,
            target = state.target,
            fromRect = target.fromRect,
            toRect = getRect(target),
            prevFromRect = target.prevFromRect,
            prevToRect = target.prevToRect,
            animatingRect = state.rect,
            targetMatrix = matrix(target, true);

        if (targetMatrix) {
          // Compensate for current animation
          toRect.top -= targetMatrix.f;
          toRect.left -= targetMatrix.e;
        }

        target.toRect = toRect;

        if (target.thisAnimationDuration) {
          // Could also check if animatingRect is between fromRect and toRect
          if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect
          (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {
            // If returning to same place as started from animation and on same axis
            time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);
          }
        } // if fromRect != toRect: animate


        if (!isRectEqual(toRect, fromRect)) {
          target.prevFromRect = fromRect;
          target.prevToRect = toRect;

          if (!time) {
            time = _this.options.animation;
          }

          _this.animate(target, animatingRect, toRect, time);
        }

        if (time) {
          animating = true;
          animationTime = Math.max(animationTime, time);
          clearTimeout(target.animationResetTimer);
          target.animationResetTimer = setTimeout(function () {
            target.animationTime = 0;
            target.prevFromRect = null;
            target.fromRect = null;
            target.prevToRect = null;
            target.thisAnimationDuration = null;
          }, time);
          target.thisAnimationDuration = time;
        }
      });
      clearTimeout(animationCallbackId);

      if (!animating) {
        if (typeof callback === 'function') callback();
      } else {
        animationCallbackId = setTimeout(function () {
          if (typeof callback === 'function') callback();
        }, animationTime);
      }

      animationStates = [];
    },
    animate: function animate(target, currentRect, toRect, duration) {
      if (duration) {
        css(target, 'transition', '');
        css(target, 'transform', '');
        var elMatrix = matrix(this.el),
            scaleX = elMatrix && elMatrix.a,
            scaleY = elMatrix && elMatrix.d,
            translateX = (currentRect.left - toRect.left) / (scaleX || 1),
            translateY = (currentRect.top - toRect.top) / (scaleY || 1);
        target.animatingX = !!translateX;
        target.animatingY = !!translateY;
        css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');
        repaint(target); // repaint

        css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));
        css(target, 'transform', 'translate3d(0,0,0)');
        typeof target.animated === 'number' && clearTimeout(target.animated);
        target.animated = setTimeout(function () {
          css(target, 'transition', '');
          css(target, 'transform', '');
          target.animated = false;
          target.animatingX = false;
          target.animatingY = false;
        }, duration);
      }
    }
  };
}

function repaint(target) {
  return target.offsetWidth;
}

function calculateRealTime(animatingRect, fromRect, toRect, options) {
  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;
}

var plugins = [];
var defaults = {
  initializeByDefault: true
};
var PluginManager = {
  mount: function mount(plugin) {
    // Set default static properties
    for (var option in defaults) {
      if (defaults.hasOwnProperty(option) && !(option in plugin)) {
        plugin[option] = defaults[option];
      }
    }

    plugins.push(plugin);
  },
  pluginEvent: function pluginEvent(eventName, sortable, evt) {
    var _this = this;

    this.eventCanceled = false;

    evt.cancel = function () {
      _this.eventCanceled = true;
    };

    var eventNameGlobal = eventName + 'Global';
    plugins.forEach(function (plugin) {
      if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable

      if (sortable[plugin.pluginName][eventNameGlobal]) {
        sortable[plugin.pluginName][eventNameGlobal](_objectSpread({
          sortable: sortable
        }, evt));
      } // Only fire plugin event if plugin is enabled in this sortable,
      // and plugin has event defined


      if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {
        sortable[plugin.pluginName][eventName](_objectSpread({
          sortable: sortable
        }, evt));
      }
    });
  },
  initializePlugins: function initializePlugins(sortable, el, defaults, options) {
    plugins.forEach(function (plugin) {
      var pluginName = plugin.pluginName;
      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;
      var initialized = new plugin(sortable, el, sortable.options);
      initialized.sortable = sortable;
      initialized.options = sortable.options;
      sortable[pluginName] = initialized; // Add default options from plugin

      _extends(defaults, initialized.defaults);
    });

    for (var option in sortable.options) {
      if (!sortable.options.hasOwnProperty(option)) continue;
      var modified = this.modifyOption(sortable, option, sortable.options[option]);

      if (typeof modified !== 'undefined') {
        sortable.options[option] = modified;
      }
    }
  },
  getEventProperties: function getEventProperties(name, sortable) {
    var eventProperties = {};
    plugins.forEach(function (plugin) {
      if (typeof plugin.eventProperties !== 'function') return;

      _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));
    });
    return eventProperties;
  },
  modifyOption: function modifyOption(sortable, name, value) {
    var modifiedValue;
    plugins.forEach(function (plugin) {
      // Plugin must exist on the Sortable
      if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin

      if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {
        modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);
      }
    });
    return modifiedValue;
  }
};

function dispatchEvent(_ref) {
  var sortable = _ref.sortable,
      rootEl = _ref.rootEl,
      name = _ref.name,
      targetEl = _ref.targetEl,
      cloneEl = _ref.cloneEl,
      toEl = _ref.toEl,
      fromEl = _ref.fromEl,
      oldIndex = _ref.oldIndex,
      newIndex = _ref.newIndex,
      oldDraggableIndex = _ref.oldDraggableIndex,
      newDraggableIndex = _ref.newDraggableIndex,
      originalEvent = _ref.originalEvent,
      putSortable = _ref.putSortable,
      extraEventProperties = _ref.extraEventProperties;
  sortable = sortable || rootEl && rootEl[expando];
  if (!sortable) return;
  var evt,
      options = sortable.options,
      onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature

  if (window.CustomEvent && !IE11OrLess && !Edge) {
    evt = new CustomEvent(name, {
      bubbles: true,
      cancelable: true
    });
  } else {
    evt = document.createEvent('Event');
    evt.initEvent(name, true, true);
  }

  evt.to = toEl || rootEl;
  evt.from = fromEl || rootEl;
  evt.item = targetEl || rootEl;
  evt.clone = cloneEl;
  evt.oldIndex = oldIndex;
  evt.newIndex = newIndex;
  evt.oldDraggableIndex = oldDraggableIndex;
  evt.newDraggableIndex = newDraggableIndex;
  evt.originalEvent = originalEvent;
  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;

  var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));

  for (var option in allEventProperties) {
    evt[option] = allEventProperties[option];
  }

  if (rootEl) {
    rootEl.dispatchEvent(evt);
  }

  if (options[onName]) {
    options[onName].call(sortable, evt);
  }
}

var pluginEvent = function pluginEvent(eventName, sortable) {
  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
      originalEvent = _ref.evt,
      data = _objectWithoutProperties(_ref, ["evt"]);

  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({
    dragEl: dragEl,
    parentEl: parentEl,
    ghostEl: ghostEl,
    rootEl: rootEl,
    nextEl: nextEl,
    lastDownEl: lastDownEl,
    cloneEl: cloneEl,
    cloneHidden: cloneHidden,
    dragStarted: moved,
    putSortable: putSortable,
    activeSortable: Sortable.active,
    originalEvent: originalEvent,
    oldIndex: oldIndex,
    oldDraggableIndex: oldDraggableIndex,
    newIndex: newIndex,
    newDraggableIndex: newDraggableIndex,
    hideGhostForTarget: _hideGhostForTarget,
    unhideGhostForTarget: _unhideGhostForTarget,
    cloneNowHidden: function cloneNowHidden() {
      cloneHidden = true;
    },
    cloneNowShown: function cloneNowShown() {
      cloneHidden = false;
    },
    dispatchSortableEvent: function dispatchSortableEvent(name) {
      _dispatchEvent({
        sortable: sortable,
        name: name,
        originalEvent: originalEvent
      });
    }
  }, data));
};

function _dispatchEvent(info) {
  dispatchEvent(_objectSpread({
    putSortable: putSortable,
    cloneEl: cloneEl,
    targetEl: dragEl,
    rootEl: rootEl,
    oldIndex: oldIndex,
    oldDraggableIndex: oldDraggableIndex,
    newIndex: newIndex,
    newDraggableIndex: newDraggableIndex
  }, info));
}

var dragEl,
    parentEl,
    ghostEl,
    rootEl,
    nextEl,
    lastDownEl,
    cloneEl,
    cloneHidden,
    oldIndex,
    newIndex,
    oldDraggableIndex,
    newDraggableIndex,
    activeGroup,
    putSortable,
    awaitingDragStarted = false,
    ignoreNextClick = false,
    sortables = [],
    tapEvt,
    touchEvt,
    lastDx,
    lastDy,
    tapDistanceLeft,
    tapDistanceTop,
    moved,
    lastTarget,
    lastDirection,
    pastFirstInvertThresh = false,
    isCircumstantialInvert = false,
    targetMoveDistance,
    // For positioning ghost absolutely
ghostRelativeParent,
    ghostRelativeParentInitialScroll = [],
    // (left, top)
_silent = false,
    savedInputChecked = [];
/** @const */

var documentExists = typeof document !== 'undefined',
    PositionGhostAbsolutely = IOS,
    CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',
    // This will not pass for IE9, because IE9 DnD only works on anchors
supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),
    supportCssPointerEvents = function () {
  if (!documentExists) return; // false when <= IE11

  if (IE11OrLess) {
    return false;
  }

  var el = document.createElement('x');
  el.style.cssText = 'pointer-events:auto';
  return el.style.pointerEvents === 'auto';
}(),
    _detectDirection = function _detectDirection(el, options) {
  var elCSS = css(el),
      elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),
      child1 = getChild(el, 0, options),
      child2 = getChild(el, 1, options),
      firstChildCSS = child1 && css(child1),
      secondChildCSS = child2 && css(child2),
      firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,
      secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;

  if (elCSS.display === 'flex') {
    return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';
  }

  if (elCSS.display === 'grid') {
    return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';
  }

  if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') {
    var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right';
    return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';
  }

  return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';
},
    _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {
  var dragElS1Opp = vertical ? dragRect.left : dragRect.top,
      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,
      dragElOppLength = vertical ? dragRect.width : dragRect.height,
      targetS1Opp = vertical ? targetRect.left : targetRect.top,
      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,
      targetOppLength = vertical ? targetRect.width : targetRect.height;
  return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;
},

/**
 * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.
 * @param  {Number} x      X position
 * @param  {Number} y      Y position
 * @return {HTMLElement}   Element of the first found nearest Sortable
 */
_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {
  var ret;
  sortables.some(function (sortable) {
    if (lastChild(sortable)) return;
    var rect = getRect(sortable),
        threshold = sortable[expando].options.emptyInsertThreshold,
        insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,
        insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;

    if (threshold && insideHorizontally && insideVertically) {
      return ret = sortable;
    }
  });
  return ret;
},
    _prepareGroup = function _prepareGroup(options) {
  function toFn(value, pull) {
    return function (to, from, dragEl, evt) {
      var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;

      if (value == null && (pull || sameGroup)) {
        // Default pull value
        // Default pull and put value if same group
        return true;
      } else if (value == null || value === false) {
        return false;
      } else if (pull && value === 'clone') {
        return value;
      } else if (typeof value === 'function') {
        return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);
      } else {
        var otherGroup = (pull ? to : from).options.group.name;
        return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;
      }
    };
  }

  var group = {};
  var originalGroup = options.group;

  if (!originalGroup || _typeof(originalGroup) != 'object') {
    originalGroup = {
      name: originalGroup
    };
  }

  group.name = originalGroup.name;
  group.checkPull = toFn(originalGroup.pull, true);
  group.checkPut = toFn(originalGroup.put);
  group.revertClone = originalGroup.revertClone;
  options.group = group;
},
    _hideGhostForTarget = function _hideGhostForTarget() {
  if (!supportCssPointerEvents && ghostEl) {
    css(ghostEl, 'display', 'none');
  }
},
    _unhideGhostForTarget = function _unhideGhostForTarget() {
  if (!supportCssPointerEvents && ghostEl) {
    css(ghostEl, 'display', '');
  }
}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position


if (documentExists) {
  document.addEventListener('click', function (evt) {
    if (ignoreNextClick) {
      evt.preventDefault();
      evt.stopPropagation && evt.stopPropagation();
      evt.stopImmediatePropagation && evt.stopImmediatePropagation();
      ignoreNextClick = false;
      return false;
    }
  }, true);
}

var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {
  if (dragEl) {
    evt = evt.touches ? evt.touches[0] : evt;

    var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);

    if (nearest) {
      // Create imitation event
      var event = {};

      for (var i in evt) {
        if (evt.hasOwnProperty(i)) {
          event[i] = evt[i];
        }
      }

      event.target = event.rootEl = nearest;
      event.preventDefault = void 0;
      event.stopPropagation = void 0;

      nearest[expando]._onDragOver(event);
    }
  }
};

var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {
  if (dragEl) {
    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
  }
};
/**
 * @class  Sortable
 * @param  {HTMLElement}  el
 * @param  {Object}       [options]
 */


function Sortable(el, options) {
  if (!(el && el.nodeType && el.nodeType === 1)) {
    throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el));
  }

  this.el = el; // root element

  this.options = options = _extends({}, options); // Export instance

  el[expando] = this;
  var defaults = {
    group: null,
    sort: true,
    disabled: false,
    store: null,
    handle: null,
    draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',
    swapThreshold: 1,
    // percentage; 0 <= x <= 1
    invertSwap: false,
    // invert always
    invertedSwapThreshold: null,
    // will be set to same as swapThreshold if default
    removeCloneOnHide: true,
    direction: function direction() {
      return _detectDirection(el, this.options);
    },
    ghostClass: 'sortable-ghost',
    chosenClass: 'sortable-chosen',
    dragClass: 'sortable-drag',
    ignore: 'a, img',
    filter: null,
    preventOnFilter: true,
    animation: 0,
    easing: null,
    setData: function setData(dataTransfer, dragEl) {
      dataTransfer.setData('Text', dragEl.textContent);
    },
    dropBubble: false,
    dragoverBubble: false,
    dataIdAttr: 'data-id',
    delay: 0,
    delayOnTouchOnly: false,
    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,
    forceFallback: false,
    fallbackClass: 'sortable-fallback',
    fallbackOnBody: false,
    fallbackTolerance: 0,
    fallbackOffset: {
      x: 0,
      y: 0
    },
    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window,
    emptyInsertThreshold: 5
  };
  PluginManager.initializePlugins(this, el, defaults); // Set default options

  for (var name in defaults) {
    !(name in options) && (options[name] = defaults[name]);
  }

  _prepareGroup(options); // Bind all private methods


  for (var fn in this) {
    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
      this[fn] = this[fn].bind(this);
    }
  } // Setup drag mode


  this.nativeDraggable = options.forceFallback ? false : supportDraggable;

  if (this.nativeDraggable) {
    // Touch start threshold cannot be greater than the native dragstart threshold
    this.options.touchStartThreshold = 1;
  } // Bind events


  if (options.supportPointer) {
    on(el, 'pointerdown', this._onTapStart);
  } else {
    on(el, 'mousedown', this._onTapStart);
    on(el, 'touchstart', this._onTapStart);
  }

  if (this.nativeDraggable) {
    on(el, 'dragover', this);
    on(el, 'dragenter', this);
  }

  sortables.push(this.el); // Restore sorting

  options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager

  _extends(this, AnimationStateManager());
}

Sortable.prototype =
/** @lends Sortable.prototype */
{
  constructor: Sortable,
  _isOutsideThisEl: function _isOutsideThisEl(target) {
    if (!this.el.contains(target) && target !== this.el) {
      lastTarget = null;
    }
  },
  _getDirection: function _getDirection(evt, target) {
    return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;
  },
  _onTapStart: function _onTapStart(
  /** Event|TouchEvent */
  evt) {
    if (!evt.cancelable) return;

    var _this = this,
        el = this.el,
        options = this.options,
        preventOnFilter = options.preventOnFilter,
        type = evt.type,
        touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,
        target = (touch || evt).target,
        originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,
        filter = options.filter;

    _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.


    if (dragEl) {
      return;
    }

    if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {
      return; // only left button and enabled
    } // cancel dnd if original target is content editable


    if (originalTarget.isContentEditable) {
      return;
    }

    target = closest(target, options.draggable, el, false);

    if (target && target.animated) {
      return;
    }

    if (lastDownEl === target) {
      // Ignoring duplicate `down`
      return;
    } // Get the index of the dragged element within its parent


    oldIndex = index(target);
    oldDraggableIndex = index(target, options.draggable); // Check filter

    if (typeof filter === 'function') {
      if (filter.call(this, evt, target, this)) {
        _dispatchEvent({
          sortable: _this,
          rootEl: originalTarget,
          name: 'filter',
          targetEl: target,
          toEl: el,
          fromEl: el
        });

        pluginEvent('filter', _this, {
          evt: evt
        });
        preventOnFilter && evt.cancelable && evt.preventDefault();
        return; // cancel dnd
      }
    } else if (filter) {
      filter = filter.split(',').some(function (criteria) {
        criteria = closest(originalTarget, criteria.trim(), el, false);

        if (criteria) {
          _dispatchEvent({
            sortable: _this,
            rootEl: criteria,
            name: 'filter',
            targetEl: target,
            fromEl: el,
            toEl: el
          });

          pluginEvent('filter', _this, {
            evt: evt
          });
          return true;
        }
      });

      if (filter) {
        preventOnFilter && evt.cancelable && evt.preventDefault();
        return; // cancel dnd
      }
    }

    if (options.handle && !closest(originalTarget, options.handle, el, false)) {
      return;
    } // Prepare `dragstart`


    this._prepareDragStart(evt, touch, target);
  },
  _prepareDragStart: function _prepareDragStart(
  /** Event */
  evt,
  /** Touch */
  touch,
  /** HTMLElement */
  target) {
    var _this = this,
        el = _this.el,
        options = _this.options,
        ownerDocument = el.ownerDocument,
        dragStartFn;

    if (target && !dragEl && target.parentNode === el) {
      var dragRect = getRect(target);
      rootEl = el;
      dragEl = target;
      parentEl = dragEl.parentNode;
      nextEl = dragEl.nextSibling;
      lastDownEl = target;
      activeGroup = options.group;
      Sortable.dragged = dragEl;
      tapEvt = {
        target: dragEl,
        clientX: (touch || evt).clientX,
        clientY: (touch || evt).clientY
      };
      tapDistanceLeft = tapEvt.clientX - dragRect.left;
      tapDistanceTop = tapEvt.clientY - dragRect.top;
      this._lastX = (touch || evt).clientX;
      this._lastY = (touch || evt).clientY;
      dragEl.style['will-change'] = 'all';

      dragStartFn = function dragStartFn() {
        pluginEvent('delayEnded', _this, {
          evt: evt
        });

        if (Sortable.eventCanceled) {
          _this._onDrop();

          return;
        } // Delayed drag has been triggered
        // we can re-enable the events: touchmove/mousemove


        _this._disableDelayedDragEvents();

        if (!FireFox && _this.nativeDraggable) {
          dragEl.draggable = true;
        } // Bind the events: dragstart/dragend


        _this._triggerDragStart(evt, touch); // Drag start event


        _dispatchEvent({
          sortable: _this,
          name: 'choose',
          originalEvent: evt
        }); // Chosen item


        toggleClass(dragEl, options.chosenClass, true);
      }; // Disable "draggable"


      options.ignore.split(',').forEach(function (criteria) {
        find(dragEl, criteria.trim(), _disableDraggable);
      });
      on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);
      on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);
      on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);
      on(ownerDocument, 'mouseup', _this._onDrop);
      on(ownerDocument, 'touchend', _this._onDrop);
      on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)

      if (FireFox && this.nativeDraggable) {
        this.options.touchStartThreshold = 4;
        dragEl.draggable = true;
      }

      pluginEvent('delayStart', this, {
        evt: evt
      }); // Delay is impossible for native DnD in Edge or IE

      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {
        if (Sortable.eventCanceled) {
          this._onDrop();

          return;
        } // If the user moves the pointer or let go the click or touch
        // before the delay has been reached:
        // disable the delayed drag


        on(ownerDocument, 'mouseup', _this._disableDelayedDrag);
        on(ownerDocument, 'touchend', _this._disableDelayedDrag);
        on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);
        on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);
        on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);
        options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);
        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);
      } else {
        dragStartFn();
      }
    }
  },
  _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(
  /** TouchEvent|PointerEvent **/
  e) {
    var touch = e.touches ? e.touches[0] : e;

    if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {
      this._disableDelayedDrag();
    }
  },
  _disableDelayedDrag: function _disableDelayedDrag() {
    dragEl && _disableDraggable(dragEl);
    clearTimeout(this._dragStartTimer);

    this._disableDelayedDragEvents();
  },
  _disableDelayedDragEvents: function _disableDelayedDragEvents() {
    var ownerDocument = this.el.ownerDocument;
    off(ownerDocument, 'mouseup', this._disableDelayedDrag);
    off(ownerDocument, 'touchend', this._disableDelayedDrag);
    off(ownerDocument, 'touchcancel', this._disableDelayedDrag);
    off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);
    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);
    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);
  },
  _triggerDragStart: function _triggerDragStart(
  /** Event */
  evt,
  /** Touch */
  touch) {
    touch = touch || evt.pointerType == 'touch' && evt;

    if (!this.nativeDraggable || touch) {
      if (this.options.supportPointer) {
        on(document, 'pointermove', this._onTouchMove);
      } else if (touch) {
        on(document, 'touchmove', this._onTouchMove);
      } else {
        on(document, 'mousemove', this._onTouchMove);
      }
    } else {
      on(dragEl, 'dragend', this);
      on(rootEl, 'dragstart', this._onDragStart);
    }

    try {
      if (document.selection) {
        // Timeout neccessary for IE9
        _nextTick(function () {
          document.selection.empty();
        });
      } else {
        window.getSelection().removeAllRanges();
      }
    } catch (err) {}
  },
  _dragStarted: function _dragStarted(fallback, evt) {

    awaitingDragStarted = false;

    if (rootEl && dragEl) {
      pluginEvent('dragStarted', this, {
        evt: evt
      });

      if (this.nativeDraggable) {
        on(document, 'dragover', _checkOutsideTargetEl);
      }

      var options = this.options; // Apply effect

      !fallback && toggleClass(dragEl, options.dragClass, false);
      toggleClass(dragEl, options.ghostClass, true);
      Sortable.active = this;
      fallback && this._appendGhost(); // Drag start event

      _dispatchEvent({
        sortable: this,
        name: 'start',
        originalEvent: evt
      });
    } else {
      this._nulling();
    }
  },
  _emulateDragOver: function _emulateDragOver() {
    if (touchEvt) {
      this._lastX = touchEvt.clientX;
      this._lastY = touchEvt.clientY;

      _hideGhostForTarget();

      var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
      var parent = target;

      while (target && target.shadowRoot) {
        target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
        if (target === parent) break;
        parent = target;
      }

      dragEl.parentNode[expando]._isOutsideThisEl(target);

      if (parent) {
        do {
          if (parent[expando]) {
            var inserted = void 0;
            inserted = parent[expando]._onDragOver({
              clientX: touchEvt.clientX,
              clientY: touchEvt.clientY,
              target: target,
              rootEl: parent
            });

            if (inserted && !this.options.dragoverBubble) {
              break;
            }
          }

          target = parent; // store last element
        }
        /* jshint boss:true */
        while (parent = parent.parentNode);
      }

      _unhideGhostForTarget();
    }
  },
  _onTouchMove: function _onTouchMove(
  /**TouchEvent*/
  evt) {
    if (tapEvt) {
      var options = this.options,
          fallbackTolerance = options.fallbackTolerance,
          fallbackOffset = options.fallbackOffset,
          touch = evt.touches ? evt.touches[0] : evt,
          ghostMatrix = ghostEl && matrix(ghostEl, true),
          scaleX = ghostEl && ghostMatrix && ghostMatrix.a,
          scaleY = ghostEl && ghostMatrix && ghostMatrix.d,
          relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),
          dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),
          dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging

      if (!Sortable.active && !awaitingDragStarted) {
        if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {
          return;
        }

        this._onDragStart(evt, true);
      }

      if (ghostEl) {
        if (ghostMatrix) {
          ghostMatrix.e += dx - (lastDx || 0);
          ghostMatrix.f += dy - (lastDy || 0);
        } else {
          ghostMatrix = {
            a: 1,
            b: 0,
            c: 0,
            d: 1,
            e: dx,
            f: dy
          };
        }

        var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")");
        css(ghostEl, 'webkitTransform', cssMatrix);
        css(ghostEl, 'mozTransform', cssMatrix);
        css(ghostEl, 'msTransform', cssMatrix);
        css(ghostEl, 'transform', cssMatrix);
        lastDx = dx;
        lastDy = dy;
        touchEvt = touch;
      }

      evt.cancelable && evt.preventDefault();
    }
  },
  _appendGhost: function _appendGhost() {
    // Bug if using scale(): https://stackoverflow.com/questions/2637058
    // Not being adjusted for
    if (!ghostEl) {
      var container = this.options.fallbackOnBody ? document.body : rootEl,
          rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),
          options = this.options; // Position absolutely

      if (PositionGhostAbsolutely) {
        // Get relatively positioned parent
        ghostRelativeParent = container;

        while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {
          ghostRelativeParent = ghostRelativeParent.parentNode;
        }

        if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {
          if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();
          rect.top += ghostRelativeParent.scrollTop;
          rect.left += ghostRelativeParent.scrollLeft;
        } else {
          ghostRelativeParent = getWindowScrollingElement();
        }

        ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);
      }

      ghostEl = dragEl.cloneNode(true);
      toggleClass(ghostEl, options.ghostClass, false);
      toggleClass(ghostEl, options.fallbackClass, true);
      toggleClass(ghostEl, options.dragClass, true);
      css(ghostEl, 'transition', '');
      css(ghostEl, 'transform', '');
      css(ghostEl, 'box-sizing', 'border-box');
      css(ghostEl, 'margin', 0);
      css(ghostEl, 'top', rect.top);
      css(ghostEl, 'left', rect.left);
      css(ghostEl, 'width', rect.width);
      css(ghostEl, 'height', rect.height);
      css(ghostEl, 'opacity', '0.8');
      css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');
      css(ghostEl, 'zIndex', '100000');
      css(ghostEl, 'pointerEvents', 'none');
      Sortable.ghost = ghostEl;
      container.appendChild(ghostEl); // Set transform-origin

      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');
    }
  },
  _onDragStart: function _onDragStart(
  /**Event*/
  evt,
  /**boolean*/
  fallback) {
    var _this = this;

    var dataTransfer = evt.dataTransfer;
    var options = _this.options;
    pluginEvent('dragStart', this, {
      evt: evt
    });

    if (Sortable.eventCanceled) {
      this._onDrop();

      return;
    }

    pluginEvent('setupClone', this);

    if (!Sortable.eventCanceled) {
      cloneEl = clone(dragEl);
      cloneEl.draggable = false;
      cloneEl.style['will-change'] = '';

      this._hideClone();

      toggleClass(cloneEl, this.options.chosenClass, false);
      Sortable.clone = cloneEl;
    } // #1143: IFrame support workaround


    _this.cloneId = _nextTick(function () {
      pluginEvent('clone', _this);
      if (Sortable.eventCanceled) return;

      if (!_this.options.removeCloneOnHide) {
        rootEl.insertBefore(cloneEl, dragEl);
      }

      _this._hideClone();

      _dispatchEvent({
        sortable: _this,
        name: 'clone'
      });
    });
    !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events

    if (fallback) {
      ignoreNextClick = true;
      _this._loopId = setInterval(_this._emulateDragOver, 50);
    } else {
      // Undo what was set in _prepareDragStart before drag started
      off(document, 'mouseup', _this._onDrop);
      off(document, 'touchend', _this._onDrop);
      off(document, 'touchcancel', _this._onDrop);

      if (dataTransfer) {
        dataTransfer.effectAllowed = 'move';
        options.setData && options.setData.call(_this, dataTransfer, dragEl);
      }

      on(document, 'drop', _this); // #1276 fix:

      css(dragEl, 'transform', 'translateZ(0)');
    }

    awaitingDragStarted = true;
    _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));
    on(document, 'selectstart', _this);
    moved = true;

    if (Safari) {
      css(document.body, 'user-select', 'none');
    }
  },
  // Returns true - if no further action is needed (either inserted or another condition)
  _onDragOver: function _onDragOver(
  /**Event*/
  evt) {
    var el = this.el,
        target = evt.target,
        dragRect,
        targetRect,
        revert,
        options = this.options,
        group = options.group,
        activeSortable = Sortable.active,
        isOwner = activeGroup === group,
        canSort = options.sort,
        fromSortable = putSortable || activeSortable,
        vertical,
        _this = this,
        completedFired = false;

    if (_silent) return;

    function dragOverEvent(name, extra) {
      pluginEvent(name, _this, _objectSpread({
        evt: evt,
        isOwner: isOwner,
        axis: vertical ? 'vertical' : 'horizontal',
        revert: revert,
        dragRect: dragRect,
        targetRect: targetRect,
        canSort: canSort,
        fromSortable: fromSortable,
        target: target,
        completed: completed,
        onMove: function onMove(target, after) {
          return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);
        },
        changed: changed
      }, extra));
    } // Capture animation state


    function capture() {
      dragOverEvent('dragOverAnimationCapture');

      _this.captureAnimationState();

      if (_this !== fromSortable) {
        fromSortable.captureAnimationState();
      }
    } // Return invocation when dragEl is inserted (or completed)


    function completed(insertion) {
      dragOverEvent('dragOverCompleted', {
        insertion: insertion
      });

      if (insertion) {
        // Clones must be hidden before folding animation to capture dragRectAbsolute properly
        if (isOwner) {
          activeSortable._hideClone();
        } else {
          activeSortable._showClone(_this);
        }

        if (_this !== fromSortable) {
          // Set ghost class to new sortable's ghost class
          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);
          toggleClass(dragEl, options.ghostClass, true);
        }

        if (putSortable !== _this && _this !== Sortable.active) {
          putSortable = _this;
        } else if (_this === Sortable.active && putSortable) {
          putSortable = null;
        } // Animation


        if (fromSortable === _this) {
          _this._ignoreWhileAnimating = target;
        }

        _this.animateAll(function () {
          dragOverEvent('dragOverAnimationComplete');
          _this._ignoreWhileAnimating = null;
        });

        if (_this !== fromSortable) {
          fromSortable.animateAll();
          fromSortable._ignoreWhileAnimating = null;
        }
      } // Null lastTarget if it is not inside a previously swapped element


      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {
        lastTarget = null;
      } // no bubbling and not fallback


      if (!options.dragoverBubble && !evt.rootEl && target !== document) {
        dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted


        !insertion && nearestEmptyInsertDetectEvent(evt);
      }

      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();
      return completedFired = true;
    } // Call when dragEl has been inserted


    function changed() {
      newIndex = index(dragEl);
      newDraggableIndex = index(dragEl, options.draggable);

      _dispatchEvent({
        sortable: _this,
        name: 'change',
        toEl: el,
        newIndex: newIndex,
        newDraggableIndex: newDraggableIndex,
        originalEvent: evt
      });
    }

    if (evt.preventDefault !== void 0) {
      evt.cancelable && evt.preventDefault();
    }

    target = closest(target, options.draggable, el, true);
    dragOverEvent('dragOver');
    if (Sortable.eventCanceled) return completedFired;

    if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {
      return completed(false);
    }

    ignoreNextClick = false;

    if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list
    : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {
      vertical = this._getDirection(evt, target) === 'vertical';
      dragRect = getRect(dragEl);
      dragOverEvent('dragOverValid');
      if (Sortable.eventCanceled) return completedFired;

      if (revert) {
        parentEl = rootEl; // actualization

        capture();

        this._hideClone();

        dragOverEvent('revert');

        if (!Sortable.eventCanceled) {
          if (nextEl) {
            rootEl.insertBefore(dragEl, nextEl);
          } else {
            rootEl.appendChild(dragEl);
          }
        }

        return completed(true);
      }

      var elLastChild = lastChild(el, options.draggable);

      if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {
        // If already at end of list: Do not insert
        if (elLastChild === dragEl) {
          return completed(false);
        } // assign target only if condition is true


        if (elLastChild && el === evt.target) {
          target = elLastChild;
        }

        if (target) {
          targetRect = getRect(target);
        }

        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {
          capture();
          el.appendChild(dragEl);
          parentEl = el; // actualization

          changed();
          return completed(true);
        }
      } else if (target.parentNode === el) {
        targetRect = getRect(target);
        var direction = 0,
            targetBeforeFirstSwap,
            differentLevel = dragEl.parentNode !== el,
            differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),
            side1 = vertical ? 'top' : 'left',
            scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),
            scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;

        if (lastTarget !== target) {
          targetBeforeFirstSwap = targetRect[side1];
          pastFirstInvertThresh = false;
          isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;
        }

        direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);
        var sibling;

        if (direction !== 0) {
          // Check if target is beside dragEl in respective direction (ignoring hidden elements)
          var dragIndex = index(dragEl);

          do {
            dragIndex -= direction;
            sibling = parentEl.children[dragIndex];
          } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));
        } // If dragEl is already beside target: Do not insert


        if (direction === 0 || sibling === target) {
          return completed(false);
        }

        lastTarget = target;
        lastDirection = direction;
        var nextSibling = target.nextElementSibling,
            after = false;
        after = direction === 1;

        var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);

        if (moveVector !== false) {
          if (moveVector === 1 || moveVector === -1) {
            after = moveVector === 1;
          }

          _silent = true;
          setTimeout(_unsilent, 30);
          capture();

          if (after && !nextSibling) {
            el.appendChild(dragEl);
          } else {
            target.parentNode.insertBefore(dragEl, after ? nextSibling : target);
          } // Undo chrome's scroll adjustment (has no effect on other browsers)


          if (scrolledPastTop) {
            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);
          }

          parentEl = dragEl.parentNode; // actualization
          // must be done before animation

          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {
            targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);
          }

          changed();
          return completed(true);
        }
      }

      if (el.contains(dragEl)) {
        return completed(false);
      }
    }

    return false;
  },
  _ignoreWhileAnimating: null,
  _offMoveEvents: function _offMoveEvents() {
    off(document, 'mousemove', this._onTouchMove);
    off(document, 'touchmove', this._onTouchMove);
    off(document, 'pointermove', this._onTouchMove);
    off(document, 'dragover', nearestEmptyInsertDetectEvent);
    off(document, 'mousemove', nearestEmptyInsertDetectEvent);
    off(document, 'touchmove', nearestEmptyInsertDetectEvent);
  },
  _offUpEvents: function _offUpEvents() {
    var ownerDocument = this.el.ownerDocument;
    off(ownerDocument, 'mouseup', this._onDrop);
    off(ownerDocument, 'touchend', this._onDrop);
    off(ownerDocument, 'pointerup', this._onDrop);
    off(ownerDocument, 'touchcancel', this._onDrop);
    off(document, 'selectstart', this);
  },
  _onDrop: function _onDrop(
  /**Event*/
  evt) {
    var el = this.el,
        options = this.options; // Get the index of the dragged element within its parent

    newIndex = index(dragEl);
    newDraggableIndex = index(dragEl, options.draggable);
    pluginEvent('drop', this, {
      evt: evt
    });
    parentEl = dragEl && dragEl.parentNode; // Get again after plugin event

    newIndex = index(dragEl);
    newDraggableIndex = index(dragEl, options.draggable);

    if (Sortable.eventCanceled) {
      this._nulling();

      return;
    }

    awaitingDragStarted = false;
    isCircumstantialInvert = false;
    pastFirstInvertThresh = false;
    clearInterval(this._loopId);
    clearTimeout(this._dragStartTimer);

    _cancelNextTick(this.cloneId);

    _cancelNextTick(this._dragStartId); // Unbind events


    if (this.nativeDraggable) {
      off(document, 'drop', this);
      off(el, 'dragstart', this._onDragStart);
    }

    this._offMoveEvents();

    this._offUpEvents();

    if (Safari) {
      css(document.body, 'user-select', '');
    }

    css(dragEl, 'transform', '');

    if (evt) {
      if (moved) {
        evt.cancelable && evt.preventDefault();
        !options.dropBubble && evt.stopPropagation();
      }

      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);

      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
        // Remove clone(s)
        cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);
      }

      if (dragEl) {
        if (this.nativeDraggable) {
          off(dragEl, 'dragend', this);
        }

        _disableDraggable(dragEl);

        dragEl.style['will-change'] = ''; // Remove classes
        // ghostClass is added in dragStarted

        if (moved && !awaitingDragStarted) {
          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);
        }

        toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event

        _dispatchEvent({
          sortable: this,
          name: 'unchoose',
          toEl: parentEl,
          newIndex: null,
          newDraggableIndex: null,
          originalEvent: evt
        });

        if (rootEl !== parentEl) {
          if (newIndex >= 0) {
            // Add event
            _dispatchEvent({
              rootEl: parentEl,
              name: 'add',
              toEl: parentEl,
              fromEl: rootEl,
              originalEvent: evt
            }); // Remove event


            _dispatchEvent({
              sortable: this,
              name: 'remove',
              toEl: parentEl,
              originalEvent: evt
            }); // drag from one list and drop into another


            _dispatchEvent({
              rootEl: parentEl,
              name: 'sort',
              toEl: parentEl,
              fromEl: rootEl,
              originalEvent: evt
            });

            _dispatchEvent({
              sortable: this,
              name: 'sort',
              toEl: parentEl,
              originalEvent: evt
            });
          }

          putSortable && putSortable.save();
        } else {
          if (newIndex !== oldIndex) {
            if (newIndex >= 0) {
              // drag & drop within the same list
              _dispatchEvent({
                sortable: this,
                name: 'update',
                toEl: parentEl,
                originalEvent: evt
              });

              _dispatchEvent({
                sortable: this,
                name: 'sort',
                toEl: parentEl,
                originalEvent: evt
              });
            }
          }
        }

        if (Sortable.active) {
          /* jshint eqnull:true */
          if (newIndex == null || newIndex === -1) {
            newIndex = oldIndex;
            newDraggableIndex = oldDraggableIndex;
          }

          _dispatchEvent({
            sortable: this,
            name: 'end',
            toEl: parentEl,
            originalEvent: evt
          }); // Save sorting


          this.save();
        }
      }
    }

    this._nulling();
  },
  _nulling: function _nulling() {
    pluginEvent('nulling', this);
    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;
    savedInputChecked.forEach(function (el) {
      el.checked = true;
    });
    savedInputChecked.length = lastDx = lastDy = 0;
  },
  handleEvent: function handleEvent(
  /**Event*/
  evt) {
    switch (evt.type) {
      case 'drop':
      case 'dragend':
        this._onDrop(evt);

        break;

      case 'dragenter':
      case 'dragover':
        if (dragEl) {
          this._onDragOver(evt);

          _globalDragOver(evt);
        }

        break;

      case 'selectstart':
        evt.preventDefault();
        break;
    }
  },

  /**
   * Serializes the item into an array of string.
   * @returns {String[]}
   */
  toArray: function toArray() {
    var order = [],
        el,
        children = this.el.children,
        i = 0,
        n = children.length,
        options = this.options;

    for (; i < n; i++) {
      el = children[i];

      if (closest(el, options.draggable, this.el, false)) {
        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));
      }
    }

    return order;
  },

  /**
   * Sorts the elements according to the array.
   * @param  {String[]}  order  order of the items
   */
  sort: function sort(order) {
    var items = {},
        rootEl = this.el;
    this.toArray().forEach(function (id, i) {
      var el = rootEl.children[i];

      if (closest(el, this.options.draggable, rootEl, false)) {
        items[id] = el;
      }
    }, this);
    order.forEach(function (id) {
      if (items[id]) {
        rootEl.removeChild(items[id]);
        rootEl.appendChild(items[id]);
      }
    });
  },

  /**
   * Save the current sorting
   */
  save: function save() {
    var store = this.options.store;
    store && store.set && store.set(this);
  },

  /**
   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
   * @param   {HTMLElement}  el
   * @param   {String}       [selector]  default: `options.draggable`
   * @returns {HTMLElement|null}
   */
  closest: function closest$1(el, selector) {
    return closest(el, selector || this.options.draggable, this.el, false);
  },

  /**
   * Set/get option
   * @param   {string} name
   * @param   {*}      [value]
   * @returns {*}
   */
  option: function option(name, value) {
    var options = this.options;

    if (value === void 0) {
      return options[name];
    } else {
      var modifiedValue = PluginManager.modifyOption(this, name, value);

      if (typeof modifiedValue !== 'undefined') {
        options[name] = modifiedValue;
      } else {
        options[name] = value;
      }

      if (name === 'group') {
        _prepareGroup(options);
      }
    }
  },

  /**
   * Destroy
   */
  destroy: function destroy() {
    pluginEvent('destroy', this);
    var el = this.el;
    el[expando] = null;
    off(el, 'mousedown', this._onTapStart);
    off(el, 'touchstart', this._onTapStart);
    off(el, 'pointerdown', this._onTapStart);

    if (this.nativeDraggable) {
      off(el, 'dragover', this);
      off(el, 'dragenter', this);
    } // Remove draggable attributes


    Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {
      el.removeAttribute('draggable');
    });

    this._onDrop();

    this._disableDelayedDragEvents();

    sortables.splice(sortables.indexOf(this.el), 1);
    this.el = el = null;
  },
  _hideClone: function _hideClone() {
    if (!cloneHidden) {
      pluginEvent('hideClone', this);
      if (Sortable.eventCanceled) return;
      css(cloneEl, 'display', 'none');

      if (this.options.removeCloneOnHide && cloneEl.parentNode) {
        cloneEl.parentNode.removeChild(cloneEl);
      }

      cloneHidden = true;
    }
  },
  _showClone: function _showClone(putSortable) {
    if (putSortable.lastPutMode !== 'clone') {
      this._hideClone();

      return;
    }

    if (cloneHidden) {
      pluginEvent('showClone', this);
      if (Sortable.eventCanceled) return; // show clone at dragEl or original position

      if (rootEl.contains(dragEl) && !this.options.group.revertClone) {
        rootEl.insertBefore(cloneEl, dragEl);
      } else if (nextEl) {
        rootEl.insertBefore(cloneEl, nextEl);
      } else {
        rootEl.appendChild(cloneEl);
      }

      if (this.options.group.revertClone) {
        this.animate(dragEl, cloneEl);
      }

      css(cloneEl, 'display', '');
      cloneHidden = false;
    }
  }
};

function _globalDragOver(
/**Event*/
evt) {
  if (evt.dataTransfer) {
    evt.dataTransfer.dropEffect = 'move';
  }

  evt.cancelable && evt.preventDefault();
}

function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {
  var evt,
      sortable = fromEl[expando],
      onMoveFn = sortable.options.onMove,
      retVal; // Support for new CustomEvent feature

  if (window.CustomEvent && !IE11OrLess && !Edge) {
    evt = new CustomEvent('move', {
      bubbles: true,
      cancelable: true
    });
  } else {
    evt = document.createEvent('Event');
    evt.initEvent('move', true, true);
  }

  evt.to = toEl;
  evt.from = fromEl;
  evt.dragged = dragEl;
  evt.draggedRect = dragRect;
  evt.related = targetEl || toEl;
  evt.relatedRect = targetRect || getRect(toEl);
  evt.willInsertAfter = willInsertAfter;
  evt.originalEvent = originalEvent;
  fromEl.dispatchEvent(evt);

  if (onMoveFn) {
    retVal = onMoveFn.call(sortable, evt, originalEvent);
  }

  return retVal;
}

function _disableDraggable(el) {
  el.draggable = false;
}

function _unsilent() {
  _silent = false;
}

function _ghostIsLast(evt, vertical, sortable) {
  var rect = getRect(lastChild(sortable.el, sortable.options.draggable));
  var spacer = 10;
  return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;
}

function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {
  var mouseOnAxis = vertical ? evt.clientY : evt.clientX,
      targetLength = vertical ? targetRect.height : targetRect.width,
      targetS1 = vertical ? targetRect.top : targetRect.left,
      targetS2 = vertical ? targetRect.bottom : targetRect.right,
      invert = false;

  if (!invertSwap) {
    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold
    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {
      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2
      // check if past first invert threshold on side opposite of lastDirection
      if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {
        // past first invert threshold, do not restrict inverted threshold to dragEl shadow
        pastFirstInvertThresh = true;
      }

      if (!pastFirstInvertThresh) {
        // dragEl shadow (target move distance shadow)
        if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow
        : mouseOnAxis > targetS2 - targetMoveDistance) {
          return -lastDirection;
        }
      } else {
        invert = true;
      }
    } else {
      // Regular
      if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {
        return _getInsertDirection(target);
      }
    }
  }

  invert = invert || invertSwap;

  if (invert) {
    // Invert of regular
    if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {
      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;
    }
  }

  return 0;
}
/**
 * Gets the direction dragEl must be swapped relative to target in order to make it
 * seem that dragEl has been "inserted" into that element's position
 * @param  {HTMLElement} target       The target whose position dragEl is being inserted at
 * @return {Number}                   Direction dragEl must be swapped
 */


function _getInsertDirection(target) {
  if (index(dragEl) < index(target)) {
    return 1;
  } else {
    return -1;
  }
}
/**
 * Generate id
 * @param   {HTMLElement} el
 * @returns {String}
 * @private
 */


function _generateId(el) {
  var str = el.tagName + el.className + el.src + el.href + el.textContent,
      i = str.length,
      sum = 0;

  while (i--) {
    sum += str.charCodeAt(i);
  }

  return sum.toString(36);
}

function _saveInputCheckedState(root) {
  savedInputChecked.length = 0;
  var inputs = root.getElementsByTagName('input');
  var idx = inputs.length;

  while (idx--) {
    var el = inputs[idx];
    el.checked && savedInputChecked.push(el);
  }
}

function _nextTick(fn) {
  return setTimeout(fn, 0);
}

function _cancelNextTick(id) {
  return clearTimeout(id);
} // Fixed #973:


if (documentExists) {
  on(document, 'touchmove', function (evt) {
    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {
      evt.preventDefault();
    }
  });
} // Export utils


Sortable.utils = {
  on: on,
  off: off,
  css: css,
  find: find,
  is: function is(el, selector) {
    return !!closest(el, selector, el, false);
  },
  extend: extend,
  throttle: throttle,
  closest: closest,
  toggleClass: toggleClass,
  clone: clone,
  index: index,
  nextTick: _nextTick,
  cancelNextTick: _cancelNextTick,
  detectDirection: _detectDirection,
  getChild: getChild
};
/**
 * Get the Sortable instance of an element
 * @param  {HTMLElement} element The element
 * @return {Sortable|undefined}         The instance of Sortable
 */

Sortable.get = function (element) {
  return element[expando];
};
/**
 * Mount a plugin to Sortable
 * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted
 */


Sortable.mount = function () {
  for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
    plugins[_key] = arguments[_key];
  }

  if (plugins[0].constructor === Array) plugins = plugins[0];
  plugins.forEach(function (plugin) {
    if (!plugin.prototype || !plugin.prototype.constructor) {
      throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin));
    }

    if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);
    PluginManager.mount(plugin);
  });
};
/**
 * Create sortable instance
 * @param {HTMLElement}  el
 * @param {Object}      [options]
 */


Sortable.create = function (el, options) {
  return new Sortable(el, options);
}; // Export


Sortable.version = version;

var autoScrolls = [],
    scrollEl,
    scrollRootEl,
    scrolling = false,
    lastAutoScrollX,
    lastAutoScrollY,
    touchEvt$1,
    pointerElemChangedInterval;

function AutoScrollPlugin() {
  function AutoScroll() {
    this.defaults = {
      scroll: true,
      scrollSensitivity: 30,
      scrollSpeed: 10,
      bubbleScroll: true
    }; // Bind all private methods

    for (var fn in this) {
      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
        this[fn] = this[fn].bind(this);
      }
    }
  }

  AutoScroll.prototype = {
    dragStarted: function dragStarted(_ref) {
      var originalEvent = _ref.originalEvent;

      if (this.sortable.nativeDraggable) {
        on(document, 'dragover', this._handleAutoScroll);
      } else {
        if (this.options.supportPointer) {
          on(document, 'pointermove', this._handleFallbackAutoScroll);
        } else if (originalEvent.touches) {
          on(document, 'touchmove', this._handleFallbackAutoScroll);
        } else {
          on(document, 'mousemove', this._handleFallbackAutoScroll);
        }
      }
    },
    dragOverCompleted: function dragOverCompleted(_ref2) {
      var originalEvent = _ref2.originalEvent;

      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)
      if (!this.options.dragOverBubble && !originalEvent.rootEl) {
        this._handleAutoScroll(originalEvent);
      }
    },
    drop: function drop() {
      if (this.sortable.nativeDraggable) {
        off(document, 'dragover', this._handleAutoScroll);
      } else {
        off(document, 'pointermove', this._handleFallbackAutoScroll);
        off(document, 'touchmove', this._handleFallbackAutoScroll);
        off(document, 'mousemove', this._handleFallbackAutoScroll);
      }

      clearPointerElemChangedInterval();
      clearAutoScrolls();
      cancelThrottle();
    },
    nulling: function nulling() {
      touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;
      autoScrolls.length = 0;
    },
    _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {
      this._handleAutoScroll(evt, true);
    },
    _handleAutoScroll: function _handleAutoScroll(evt, fallback) {
      var _this = this;

      var x = (evt.touches ? evt.touches[0] : evt).clientX,
          y = (evt.touches ? evt.touches[0] : evt).clientY,
          elem = document.elementFromPoint(x, y);
      touchEvt$1 = evt; // IE does not seem to have native autoscroll,
      // Edge's autoscroll seems too conditional,
      // MACOS Safari does not have autoscroll,
      // Firefox and Chrome are good

      if (fallback || Edge || IE11OrLess || Safari) {
        autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change

        var ogElemScroller = getParentAutoScrollElement(elem, true);

        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {
          pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour

          pointerElemChangedInterval = setInterval(function () {
            var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);

            if (newElem !== ogElemScroller) {
              ogElemScroller = newElem;
              clearAutoScrolls();
            }

            autoScroll(evt, _this.options, newElem, fallback);
          }, 10);
          lastAutoScrollX = x;
          lastAutoScrollY = y;
        }
      } else {
        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll
        if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {
          clearAutoScrolls();
          return;
        }

        autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);
      }
    }
  };
  return _extends(AutoScroll, {
    pluginName: 'scroll',
    initializeByDefault: true
  });
}

function clearAutoScrolls() {
  autoScrolls.forEach(function (autoScroll) {
    clearInterval(autoScroll.pid);
  });
  autoScrolls = [];
}

function clearPointerElemChangedInterval() {
  clearInterval(pointerElemChangedInterval);
}

var autoScroll = throttle(function (evt, options, rootEl, isFallback) {
  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521
  if (!options.scroll) return;
  var x = (evt.touches ? evt.touches[0] : evt).clientX,
      y = (evt.touches ? evt.touches[0] : evt).clientY,
      sens = options.scrollSensitivity,
      speed = options.scrollSpeed,
      winScroller = getWindowScrollingElement();
  var scrollThisInstance = false,
      scrollCustomFn; // New scroll root, set scrollEl

  if (scrollRootEl !== rootEl) {
    scrollRootEl = rootEl;
    clearAutoScrolls();
    scrollEl = options.scroll;
    scrollCustomFn = options.scrollFn;

    if (scrollEl === true) {
      scrollEl = getParentAutoScrollElement(rootEl, true);
    }
  }

  var layersOut = 0;
  var currentParent = scrollEl;

  do {
    var el = currentParent,
        rect = getRect(el),
        top = rect.top,
        bottom = rect.bottom,
        left = rect.left,
        right = rect.right,
        width = rect.width,
        height = rect.height,
        canScrollX = void 0,
        canScrollY = void 0,
        scrollWidth = el.scrollWidth,
        scrollHeight = el.scrollHeight,
        elCSS = css(el),
        scrollPosX = el.scrollLeft,
        scrollPosY = el.scrollTop;

    if (el === winScroller) {
      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');
      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');
    } else {
      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');
      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');
    }

    var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);
    var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);

    if (!autoScrolls[layersOut]) {
      for (var i = 0; i <= layersOut; i++) {
        if (!autoScrolls[i]) {
          autoScrolls[i] = {};
        }
      }
    }

    if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {
      autoScrolls[layersOut].el = el;
      autoScrolls[layersOut].vx = vx;
      autoScrolls[layersOut].vy = vy;
      clearInterval(autoScrolls[layersOut].pid);

      if (vx != 0 || vy != 0) {
        scrollThisInstance = true;
        /* jshint loopfunc:true */

        autoScrolls[layersOut].pid = setInterval(function () {
          // emulate drag over during autoscroll (fallback), emulating native DnD behaviour
          if (isFallback && this.layer === 0) {
            Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely

          }

          var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;
          var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;

          if (typeof scrollCustomFn === 'function') {
            if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {
              return;
            }
          }

          scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);
        }.bind({
          layer: layersOut
        }), 24);
      }
    }

    layersOut++;
  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));

  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not
}, 30);

var drop = function drop(_ref) {
  var originalEvent = _ref.originalEvent,
      putSortable = _ref.putSortable,
      dragEl = _ref.dragEl,
      activeSortable = _ref.activeSortable,
      dispatchSortableEvent = _ref.dispatchSortableEvent,
      hideGhostForTarget = _ref.hideGhostForTarget,
      unhideGhostForTarget = _ref.unhideGhostForTarget;
  if (!originalEvent) return;
  var toSortable = putSortable || activeSortable;
  hideGhostForTarget();
  var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;
  var target = document.elementFromPoint(touch.clientX, touch.clientY);
  unhideGhostForTarget();

  if (toSortable && !toSortable.el.contains(target)) {
    dispatchSortableEvent('spill');
    this.onSpill({
      dragEl: dragEl,
      putSortable: putSortable
    });
  }
};

function Revert() {}

Revert.prototype = {
  startIndex: null,
  dragStart: function dragStart(_ref2) {
    var oldDraggableIndex = _ref2.oldDraggableIndex;
    this.startIndex = oldDraggableIndex;
  },
  onSpill: function onSpill(_ref3) {
    var dragEl = _ref3.dragEl,
        putSortable = _ref3.putSortable;
    this.sortable.captureAnimationState();

    if (putSortable) {
      putSortable.captureAnimationState();
    }

    var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);

    if (nextSibling) {
      this.sortable.el.insertBefore(dragEl, nextSibling);
    } else {
      this.sortable.el.appendChild(dragEl);
    }

    this.sortable.animateAll();

    if (putSortable) {
      putSortable.animateAll();
    }
  },
  drop: drop
};

_extends(Revert, {
  pluginName: 'revertOnSpill'
});

function Remove() {}

Remove.prototype = {
  onSpill: function onSpill(_ref4) {
    var dragEl = _ref4.dragEl,
        putSortable = _ref4.putSortable;
    var parentSortable = putSortable || this.sortable;
    parentSortable.captureAnimationState();
    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);
    parentSortable.animateAll();
  },
  drop: drop
};

_extends(Remove, {
  pluginName: 'removeOnSpill'
});

var lastSwapEl;

function SwapPlugin() {
  function Swap() {
    this.defaults = {
      swapClass: 'sortable-swap-highlight'
    };
  }

  Swap.prototype = {
    dragStart: function dragStart(_ref) {
      var dragEl = _ref.dragEl;
      lastSwapEl = dragEl;
    },
    dragOverValid: function dragOverValid(_ref2) {
      var completed = _ref2.completed,
          target = _ref2.target,
          onMove = _ref2.onMove,
          activeSortable = _ref2.activeSortable,
          changed = _ref2.changed,
          cancel = _ref2.cancel;
      if (!activeSortable.options.swap) return;
      var el = this.sortable.el,
          options = this.options;

      if (target && target !== el) {
        var prevSwapEl = lastSwapEl;

        if (onMove(target) !== false) {
          toggleClass(target, options.swapClass, true);
          lastSwapEl = target;
        } else {
          lastSwapEl = null;
        }

        if (prevSwapEl && prevSwapEl !== lastSwapEl) {
          toggleClass(prevSwapEl, options.swapClass, false);
        }
      }

      changed();
      completed(true);
      cancel();
    },
    drop: function drop(_ref3) {
      var activeSortable = _ref3.activeSortable,
          putSortable = _ref3.putSortable,
          dragEl = _ref3.dragEl;
      var toSortable = putSortable || this.sortable;
      var options = this.options;
      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);

      if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {
        if (dragEl !== lastSwapEl) {
          toSortable.captureAnimationState();
          if (toSortable !== activeSortable) activeSortable.captureAnimationState();
          swapNodes(dragEl, lastSwapEl);
          toSortable.animateAll();
          if (toSortable !== activeSortable) activeSortable.animateAll();
        }
      }
    },
    nulling: function nulling() {
      lastSwapEl = null;
    }
  };
  return _extends(Swap, {
    pluginName: 'swap',
    eventProperties: function eventProperties() {
      return {
        swapItem: lastSwapEl
      };
    }
  });
}

function swapNodes(n1, n2) {
  var p1 = n1.parentNode,
      p2 = n2.parentNode,
      i1,
      i2;
  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;
  i1 = index(n1);
  i2 = index(n2);

  if (p1.isEqualNode(p2) && i1 < i2) {
    i2++;
  }

  p1.insertBefore(n2, p1.children[i1]);
  p2.insertBefore(n1, p2.children[i2]);
}

var multiDragElements = [],
    multiDragClones = [],
    lastMultiDragSelect,
    // for selection with modifier key down (SHIFT)
multiDragSortable,
    initialFolding = false,
    // Initial multi-drag fold when drag started
folding = false,
    // Folding any other time
dragStarted = false,
    dragEl$1,
    clonesFromRect,
    clonesHidden;

function MultiDragPlugin() {
  function MultiDrag(sortable) {
    // Bind all private methods
    for (var fn in this) {
      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
        this[fn] = this[fn].bind(this);
      }
    }

    if (sortable.options.supportPointer) {
      on(document, 'pointerup', this._deselectMultiDrag);
    } else {
      on(document, 'mouseup', this._deselectMultiDrag);
      on(document, 'touchend', this._deselectMultiDrag);
    }

    on(document, 'keydown', this._checkKeyDown);
    on(document, 'keyup', this._checkKeyUp);
    this.defaults = {
      selectedClass: 'sortable-selected',
      multiDragKey: null,
      setData: function setData(dataTransfer, dragEl) {
        var data = '';

        if (multiDragElements.length && multiDragSortable === sortable) {
          multiDragElements.forEach(function (multiDragElement, i) {
            data += (!i ? '' : ', ') + multiDragElement.textContent;
          });
        } else {
          data = dragEl.textContent;
        }

        dataTransfer.setData('Text', data);
      }
    };
  }

  MultiDrag.prototype = {
    multiDragKeyDown: false,
    isMultiDrag: false,
    delayStartGlobal: function delayStartGlobal(_ref) {
      var dragged = _ref.dragEl;
      dragEl$1 = dragged;
    },
    delayEnded: function delayEnded() {
      this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);
    },
    setupClone: function setupClone(_ref2) {
      var sortable = _ref2.sortable,
          cancel = _ref2.cancel;
      if (!this.isMultiDrag) return;

      for (var i = 0; i < multiDragElements.length; i++) {
        multiDragClones.push(clone(multiDragElements[i]));
        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;
        multiDragClones[i].draggable = false;
        multiDragClones[i].style['will-change'] = '';
        toggleClass(multiDragClones[i], this.options.selectedClass, false);
        multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);
      }

      sortable._hideClone();

      cancel();
    },
    clone: function clone(_ref3) {
      var sortable = _ref3.sortable,
          rootEl = _ref3.rootEl,
          dispatchSortableEvent = _ref3.dispatchSortableEvent,
          cancel = _ref3.cancel;
      if (!this.isMultiDrag) return;

      if (!this.options.removeCloneOnHide) {
        if (multiDragElements.length && multiDragSortable === sortable) {
          insertMultiDragClones(true, rootEl);
          dispatchSortableEvent('clone');
          cancel();
        }
      }
    },
    showClone: function showClone(_ref4) {
      var cloneNowShown = _ref4.cloneNowShown,
          rootEl = _ref4.rootEl,
          cancel = _ref4.cancel;
      if (!this.isMultiDrag) return;
      insertMultiDragClones(false, rootEl);
      multiDragClones.forEach(function (clone) {
        css(clone, 'display', '');
      });
      cloneNowShown();
      clonesHidden = false;
      cancel();
    },
    hideClone: function hideClone(_ref5) {
      var _this = this;

      var sortable = _ref5.sortable,
          cloneNowHidden = _ref5.cloneNowHidden,
          cancel = _ref5.cancel;
      if (!this.isMultiDrag) return;
      multiDragClones.forEach(function (clone) {
        css(clone, 'display', 'none');

        if (_this.options.removeCloneOnHide && clone.parentNode) {
          clone.parentNode.removeChild(clone);
        }
      });
      cloneNowHidden();
      clonesHidden = true;
      cancel();
    },
    dragStartGlobal: function dragStartGlobal(_ref6) {
      var sortable = _ref6.sortable;

      if (!this.isMultiDrag && multiDragSortable) {
        multiDragSortable.multiDrag._deselectMultiDrag();
      }

      multiDragElements.forEach(function (multiDragElement) {
        multiDragElement.sortableIndex = index(multiDragElement);
      }); // Sort multi-drag elements

      multiDragElements = multiDragElements.sort(function (a, b) {
        return a.sortableIndex - b.sortableIndex;
      });
      dragStarted = true;
    },
    dragStarted: function dragStarted(_ref7) {
      var _this2 = this;

      var sortable = _ref7.sortable;
      if (!this.isMultiDrag) return;

      if (this.options.sort) {
        // Capture rects,
        // hide multi drag elements (by positioning them absolute),
        // set multi drag elements rects to dragRect,
        // show multi drag elements,
        // animate to rects,
        // unset rects & remove from DOM
        sortable.captureAnimationState();

        if (this.options.animation) {
          multiDragElements.forEach(function (multiDragElement) {
            if (multiDragElement === dragEl$1) return;
            css(multiDragElement, 'position', 'absolute');
          });
          var dragRect = getRect(dragEl$1, false, true, true);
          multiDragElements.forEach(function (multiDragElement) {
            if (multiDragElement === dragEl$1) return;
            setRect(multiDragElement, dragRect);
          });
          folding = true;
          initialFolding = true;
        }
      }

      sortable.animateAll(function () {
        folding = false;
        initialFolding = false;

        if (_this2.options.animation) {
          multiDragElements.forEach(function (multiDragElement) {
            unsetRect(multiDragElement);
          });
        } // Remove all auxiliary multidrag items from el, if sorting enabled


        if (_this2.options.sort) {
          removeMultiDragElements();
        }
      });
    },
    dragOver: function dragOver(_ref8) {
      var target = _ref8.target,
          completed = _ref8.completed,
          cancel = _ref8.cancel;

      if (folding && ~multiDragElements.indexOf(target)) {
        completed(false);
        cancel();
      }
    },
    revert: function revert(_ref9) {
      var fromSortable = _ref9.fromSortable,
          rootEl = _ref9.rootEl,
          sortable = _ref9.sortable,
          dragRect = _ref9.dragRect;

      if (multiDragElements.length > 1) {
        // Setup unfold animation
        multiDragElements.forEach(function (multiDragElement) {
          sortable.addAnimationState({
            target: multiDragElement,
            rect: folding ? getRect(multiDragElement) : dragRect
          });
          unsetRect(multiDragElement);
          multiDragElement.fromRect = dragRect;
          fromSortable.removeAnimationState(multiDragElement);
        });
        folding = false;
        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);
      }
    },
    dragOverCompleted: function dragOverCompleted(_ref10) {
      var sortable = _ref10.sortable,
          isOwner = _ref10.isOwner,
          insertion = _ref10.insertion,
          activeSortable = _ref10.activeSortable,
          parentEl = _ref10.parentEl,
          putSortable = _ref10.putSortable;
      var options = this.options;

      if (insertion) {
        // Clones must be hidden before folding animation to capture dragRectAbsolute properly
        if (isOwner) {
          activeSortable._hideClone();
        }

        initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location

        if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {
          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible
          var dragRectAbsolute = getRect(dragEl$1, false, true, true);
          multiDragElements.forEach(function (multiDragElement) {
            if (multiDragElement === dragEl$1) return;
            setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted
            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable

            parentEl.appendChild(multiDragElement);
          });
          folding = true;
        } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out


        if (!isOwner) {
          // Only remove if not folding (folding will remove them anyways)
          if (!folding) {
            removeMultiDragElements();
          }

          if (multiDragElements.length > 1) {
            var clonesHiddenBefore = clonesHidden;

            activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden


            if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {
              multiDragClones.forEach(function (clone) {
                activeSortable.addAnimationState({
                  target: clone,
                  rect: clonesFromRect
                });
                clone.fromRect = clonesFromRect;
                clone.thisAnimationDuration = null;
              });
            }
          } else {
            activeSortable._showClone(sortable);
          }
        }
      }
    },
    dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {
      var dragRect = _ref11.dragRect,
          isOwner = _ref11.isOwner,
          activeSortable = _ref11.activeSortable;
      multiDragElements.forEach(function (multiDragElement) {
        multiDragElement.thisAnimationDuration = null;
      });

      if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {
        clonesFromRect = _extends({}, dragRect);
        var dragMatrix = matrix(dragEl$1, true);
        clonesFromRect.top -= dragMatrix.f;
        clonesFromRect.left -= dragMatrix.e;
      }
    },
    dragOverAnimationComplete: function dragOverAnimationComplete() {
      if (folding) {
        folding = false;
        removeMultiDragElements();
      }
    },
    drop: function drop(_ref12) {
      var evt = _ref12.originalEvent,
          rootEl = _ref12.rootEl,
          parentEl = _ref12.parentEl,
          sortable = _ref12.sortable,
          dispatchSortableEvent = _ref12.dispatchSortableEvent,
          oldIndex = _ref12.oldIndex,
          putSortable = _ref12.putSortable;
      var toSortable = putSortable || this.sortable;
      if (!evt) return;
      var options = this.options,
          children = parentEl.children; // Multi-drag selection

      if (!dragStarted) {
        if (options.multiDragKey && !this.multiDragKeyDown) {
          this._deselectMultiDrag();
        }

        toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));

        if (!~multiDragElements.indexOf(dragEl$1)) {
          multiDragElements.push(dragEl$1);
          dispatchEvent({
            sortable: sortable,
            rootEl: rootEl,
            name: 'select',
            targetEl: dragEl$1,
            originalEvt: evt
          }); // Modifier activated, select from last to dragEl

          if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {
            var lastIndex = index(lastMultiDragSelect),
                currentIndex = index(dragEl$1);

            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {
              // Must include lastMultiDragSelect (select it), in case modified selection from no selection
              // (but previous selection existed)
              var n, i;

              if (currentIndex > lastIndex) {
                i = lastIndex;
                n = currentIndex;
              } else {
                i = currentIndex;
                n = lastIndex + 1;
              }

              for (; i < n; i++) {
                if (~multiDragElements.indexOf(children[i])) continue;
                toggleClass(children[i], options.selectedClass, true);
                multiDragElements.push(children[i]);
                dispatchEvent({
                  sortable: sortable,
                  rootEl: rootEl,
                  name: 'select',
                  targetEl: children[i],
                  originalEvt: evt
                });
              }
            }
          } else {
            lastMultiDragSelect = dragEl$1;
          }

          multiDragSortable = toSortable;
        } else {
          multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);
          lastMultiDragSelect = null;
          dispatchEvent({
            sortable: sortable,
            rootEl: rootEl,
            name: 'deselect',
            targetEl: dragEl$1,
            originalEvt: evt
          });
        }
      } // Multi-drag drop


      if (dragStarted && this.isMultiDrag) {
        // Do not "unfold" after around dragEl if reverted
        if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {
          var dragRect = getRect(dragEl$1),
              multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');
          if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;
          toSortable.captureAnimationState();

          if (!initialFolding) {
            if (options.animation) {
              dragEl$1.fromRect = dragRect;
              multiDragElements.forEach(function (multiDragElement) {
                multiDragElement.thisAnimationDuration = null;

                if (multiDragElement !== dragEl$1) {
                  var rect = folding ? getRect(multiDragElement) : dragRect;
                  multiDragElement.fromRect = rect; // Prepare unfold animation

                  toSortable.addAnimationState({
                    target: multiDragElement,
                    rect: rect
                  });
                }
              });
            } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert
            // properly they must all be removed


            removeMultiDragElements();
            multiDragElements.forEach(function (multiDragElement) {
              if (children[multiDragIndex]) {
                parentEl.insertBefore(multiDragElement, children[multiDragIndex]);
              } else {
                parentEl.appendChild(multiDragElement);
              }

              multiDragIndex++;
            }); // If initial folding is done, the elements may have changed position because they are now
            // unfolding around dragEl, even though dragEl may not have his index changed, so update event
            // must be fired here as Sortable will not.

            if (oldIndex === index(dragEl$1)) {
              var update = false;
              multiDragElements.forEach(function (multiDragElement) {
                if (multiDragElement.sortableIndex !== index(multiDragElement)) {
                  update = true;
                  return;
                }
              });

              if (update) {
                dispatchSortableEvent('update');
              }
            }
          } // Must be done after capturing individual rects (scroll bar)


          multiDragElements.forEach(function (multiDragElement) {
            unsetRect(multiDragElement);
          });
          toSortable.animateAll();
        }

        multiDragSortable = toSortable;
      } // Remove clones if necessary


      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
        multiDragClones.forEach(function (clone) {
          clone.parentNode && clone.parentNode.removeChild(clone);
        });
      }
    },
    nullingGlobal: function nullingGlobal() {
      this.isMultiDrag = dragStarted = false;
      multiDragClones.length = 0;
    },
    destroyGlobal: function destroyGlobal() {
      this._deselectMultiDrag();

      off(document, 'pointerup', this._deselectMultiDrag);
      off(document, 'mouseup', this._deselectMultiDrag);
      off(document, 'touchend', this._deselectMultiDrag);
      off(document, 'keydown', this._checkKeyDown);
      off(document, 'keyup', this._checkKeyUp);
    },
    _deselectMultiDrag: function _deselectMultiDrag(evt) {
      if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable

      if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable

      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click

      if (evt && evt.button !== 0) return;

      while (multiDragElements.length) {
        var el = multiDragElements[0];
        toggleClass(el, this.options.selectedClass, false);
        multiDragElements.shift();
        dispatchEvent({
          sortable: this.sortable,
          rootEl: this.sortable.el,
          name: 'deselect',
          targetEl: el,
          originalEvt: evt
        });
      }
    },
    _checkKeyDown: function _checkKeyDown(evt) {
      if (evt.key === this.options.multiDragKey) {
        this.multiDragKeyDown = true;
      }
    },
    _checkKeyUp: function _checkKeyUp(evt) {
      if (evt.key === this.options.multiDragKey) {
        this.multiDragKeyDown = false;
      }
    }
  };
  return _extends(MultiDrag, {
    // Static methods & properties
    pluginName: 'multiDrag',
    utils: {
      /**
       * Selects the provided multi-drag item
       * @param  {HTMLElement} el    The element to be selected
       */
      select: function select(el) {
        var sortable = el.parentNode[expando];
        if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;

        if (multiDragSortable && multiDragSortable !== sortable) {
          multiDragSortable.multiDrag._deselectMultiDrag();

          multiDragSortable = sortable;
        }

        toggleClass(el, sortable.options.selectedClass, true);
        multiDragElements.push(el);
      },

      /**
       * Deselects the provided multi-drag item
       * @param  {HTMLElement} el    The element to be deselected
       */
      deselect: function deselect(el) {
        var sortable = el.parentNode[expando],
            index = multiDragElements.indexOf(el);
        if (!sortable || !sortable.options.multiDrag || !~index) return;
        toggleClass(el, sortable.options.selectedClass, false);
        multiDragElements.splice(index, 1);
      }
    },
    eventProperties: function eventProperties() {
      var _this3 = this;

      var oldIndicies = [],
          newIndicies = [];
      multiDragElements.forEach(function (multiDragElement) {
        oldIndicies.push({
          multiDragElement: multiDragElement,
          index: multiDragElement.sortableIndex
        }); // multiDragElements will already be sorted if folding

        var newIndex;

        if (folding && multiDragElement !== dragEl$1) {
          newIndex = -1;
        } else if (folding) {
          newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');
        } else {
          newIndex = index(multiDragElement);
        }

        newIndicies.push({
          multiDragElement: multiDragElement,
          index: newIndex
        });
      });
      return {
        items: _toConsumableArray(multiDragElements),
        clones: [].concat(multiDragClones),
        oldIndicies: oldIndicies,
        newIndicies: newIndicies
      };
    },
    optionListeners: {
      multiDragKey: function multiDragKey(key) {
        key = key.toLowerCase();

        if (key === 'ctrl') {
          key = 'Control';
        } else if (key.length > 1) {
          key = key.charAt(0).toUpperCase() + key.substr(1);
        }

        return key;
      }
    }
  });
}

function insertMultiDragElements(clonesInserted, rootEl) {
  multiDragElements.forEach(function (multiDragElement, i) {
    var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];

    if (target) {
      rootEl.insertBefore(multiDragElement, target);
    } else {
      rootEl.appendChild(multiDragElement);
    }
  });
}
/**
 * Insert multi-drag clones
 * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted
 * @param  {HTMLElement} rootEl
 */


function insertMultiDragClones(elementsInserted, rootEl) {
  multiDragClones.forEach(function (clone, i) {
    var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];

    if (target) {
      rootEl.insertBefore(clone, target);
    } else {
      rootEl.appendChild(clone);
    }
  });
}

function removeMultiDragElements() {
  multiDragElements.forEach(function (multiDragElement) {
    if (multiDragElement === dragEl$1) return;
    multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);
  });
}

Sortable.mount(new AutoScrollPlugin());
Sortable.mount(Remove, Revert);

Sortable.mount(new SwapPlugin());
Sortable.mount(new MultiDragPlugin());

export default Sortable;
/**!
 * Sortable 1.10.2
 * @author	RubaXa   <trash@rubaxa.org>
 * @author	owenm    <owen23355@gmail.com>
 * @license MIT
 */
function _typeof(obj) {
  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    _typeof = function (obj) {
      return typeof obj;
    };
  } else {
    _typeof = function (obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };
  }

  return _typeof(obj);
}

function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
}

function _extends() {
  _extends = Object.assign || function (target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i];

      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      }
    }

    return target;
  };

  return _extends.apply(this, arguments);
}

function _objectSpread(target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i] != null ? arguments[i] : {};
    var ownKeys = Object.keys(source);

    if (typeof Object.getOwnPropertySymbols === 'function') {
      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
        return Object.getOwnPropertyDescriptor(source, sym).enumerable;
      }));
    }

    ownKeys.forEach(function (key) {
      _defineProperty(target, key, source[key]);
    });
  }

  return target;
}

function _objectWithoutPropertiesLoose(source, excluded) {
  if (source == null) return {};
  var target = {};
  var sourceKeys = Object.keys(source);
  var key, i;

  for (i = 0; i < sourceKeys.length; i++) {
    key = sourceKeys[i];
    if (excluded.indexOf(key) >= 0) continue;
    target[key] = source[key];
  }

  return target;
}

function _objectWithoutProperties(source, excluded) {
  if (source == null) return {};

  var target = _objectWithoutPropertiesLoose(source, excluded);

  var key, i;

  if (Object.getOwnPropertySymbols) {
    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);

    for (i = 0; i < sourceSymbolKeys.length; i++) {
      key = sourceSymbolKeys[i];
      if (excluded.indexOf(key) >= 0) continue;
      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
      target[key] = source[key];
    }
  }

  return target;
}

function _toConsumableArray(arr) {
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
}

function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) {
    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];

    return arr2;
  }
}

function _iterableToArray(iter) {
  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
}

function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance");
}

var version = "1.10.2";

function userAgent(pattern) {
  if (typeof window !== 'undefined' && window.navigator) {
    return !!
    /*@__PURE__*/
    navigator.userAgent.match(pattern);
  }
}

var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i);
var Edge = userAgent(/Edge/i);
var FireFox = userAgent(/firefox/i);
var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);
var IOS = userAgent(/iP(ad|od|hone)/i);
var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);

var captureMode = {
  capture: false,
  passive: false
};

function on(el, event, fn) {
  el.addEventListener(event, fn, !IE11OrLess && captureMode);
}

function off(el, event, fn) {
  el.removeEventListener(event, fn, !IE11OrLess && captureMode);
}

function matches(
/**HTMLElement*/
el,
/**String*/
selector) {
  if (!selector) return;
  selector[0] === '>' && (selector = selector.substring(1));

  if (el) {
    try {
      if (el.matches) {
        return el.matches(selector);
      } else if (el.msMatchesSelector) {
        return el.msMatchesSelector(selector);
      } else if (el.webkitMatchesSelector) {
        return el.webkitMatchesSelector(selector);
      }
    } catch (_) {
      return false;
    }
  }

  return false;
}

function getParentOrHost(el) {
  return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;
}

function closest(
/**HTMLElement*/
el,
/**String*/
selector,
/**HTMLElement*/
ctx, includeCTX) {
  if (el) {
    ctx = ctx || document;

    do {
      if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {
        return el;
      }

      if (el === ctx) break;
      /* jshint boss:true */
    } while (el = getParentOrHost(el));
  }

  return null;
}

var R_SPACE = /\s+/g;

function toggleClass(el, name, state) {
  if (el && name) {
    if (el.classList) {
      el.classList[state ? 'add' : 'remove'](name);
    } else {
      var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');
      el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');
    }
  }
}

function css(el, prop, val) {
  var style = el && el.style;

  if (style) {
    if (val === void 0) {
      if (document.defaultView && document.defaultView.getComputedStyle) {
        val = document.defaultView.getComputedStyle(el, '');
      } else if (el.currentStyle) {
        val = el.currentStyle;
      }

      return prop === void 0 ? val : val[prop];
    } else {
      if (!(prop in style) && prop.indexOf('webkit') === -1) {
        prop = '-webkit-' + prop;
      }

      style[prop] = val + (typeof val === 'string' ? '' : 'px');
    }
  }
}

function matrix(el, selfOnly) {
  var appliedTransforms = '';

  if (typeof el === 'string') {
    appliedTransforms = el;
  } else {
    do {
      var transform = css(el, 'transform');

      if (transform && transform !== 'none') {
        appliedTransforms = transform + ' ' + appliedTransforms;
      }
      /* jshint boss:true */

    } while (!selfOnly && (el = el.parentNode));
  }

  var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;
  /*jshint -W056 */

  return matrixFn && new matrixFn(appliedTransforms);
}

function find(ctx, tagName, iterator) {
  if (ctx) {
    var list = ctx.getElementsByTagName(tagName),
        i = 0,
        n = list.length;

    if (iterator) {
      for (; i < n; i++) {
        iterator(list[i], i);
      }
    }

    return list;
  }

  return [];
}

function getWindowScrollingElement() {
  var scrollingElement = document.scrollingElement;

  if (scrollingElement) {
    return scrollingElement;
  } else {
    return document.documentElement;
  }
}
/**
 * Returns the "bounding client rect" of given element
 * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted
 * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container
 * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr
 * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone
 * @param  {[HTMLElement]} container              The parent the element will be placed in
 * @return {Object}                               The boundingClientRect of el, with specified adjustments
 */


function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {
  if (!el.getBoundingClientRect && el !== window) return;
  var elRect, top, left, bottom, right, height, width;

  if (el !== window && el !== getWindowScrollingElement()) {
    elRect = el.getBoundingClientRect();
    top = elRect.top;
    left = elRect.left;
    bottom = elRect.bottom;
    right = elRect.right;
    height = elRect.height;
    width = elRect.width;
  } else {
    top = 0;
    left = 0;
    bottom = window.innerHeight;
    right = window.innerWidth;
    height = window.innerHeight;
    width = window.innerWidth;
  }

  if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {
    // Adjust for translate()
    container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)
    // Not needed on <= IE11

    if (!IE11OrLess) {
      do {
        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {
          var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container

          top -= containerRect.top + parseInt(css(container, 'border-top-width'));
          left -= containerRect.left + parseInt(css(container, 'border-left-width'));
          bottom = top + elRect.height;
          right = left + elRect.width;
          break;
        }
        /* jshint boss:true */

      } while (container = container.parentNode);
    }
  }

  if (undoScale && el !== window) {
    // Adjust for scale()
    var elMatrix = matrix(container || el),
        scaleX = elMatrix && elMatrix.a,
        scaleY = elMatrix && elMatrix.d;

    if (elMatrix) {
      top /= scaleY;
      left /= scaleX;
      width /= scaleX;
      height /= scaleY;
      bottom = top + height;
      right = left + width;
    }
  }

  return {
    top: top,
    left: left,
    bottom: bottom,
    right: right,
    width: width,
    height: height
  };
}
/**
 * Checks if a side of an element is scrolled past a side of its parents
 * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question
 * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')
 * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')
 * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element
 */


function isScrolledPast(el, elSide, parentSide) {
  var parent = getParentAutoScrollElement(el, true),
      elSideVal = getRect(el)[elSide];
  /* jshint boss:true */

  while (parent) {
    var parentSideVal = getRect(parent)[parentSide],
        visible = void 0;

    if (parentSide === 'top' || parentSide === 'left') {
      visible = elSideVal >= parentSideVal;
    } else {
      visible = elSideVal <= parentSideVal;
    }

    if (!visible) return parent;
    if (parent === getWindowScrollingElement()) break;
    parent = getParentAutoScrollElement(parent, false);
  }

  return false;
}
/**
 * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)
 * and non-draggable elements
 * @param  {HTMLElement} el       The parent element
 * @param  {Number} childNum      The index of the child
 * @param  {Object} options       Parent Sortable's options
 * @return {HTMLElement}          The child at index childNum, or null if not found
 */


function getChild(el, childNum, options) {
  var currentChild = 0,
      i = 0,
      children = el.children;

  while (i < children.length) {
    if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {
      if (currentChild === childNum) {
        return children[i];
      }

      currentChild++;
    }

    i++;
  }

  return null;
}
/**
 * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)
 * @param  {HTMLElement} el       Parent element
 * @param  {selector} selector    Any other elements that should be ignored
 * @return {HTMLElement}          The last child, ignoring ghostEl
 */


function lastChild(el, selector) {
  var last = el.lastElementChild;

  while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {
    last = last.previousElementSibling;
  }

  return last || null;
}
/**
 * Returns the index of an element within its parent for a selected set of
 * elements
 * @param  {HTMLElement} el
 * @param  {selector} selector
 * @return {number}
 */


function index(el, selector) {
  var index = 0;

  if (!el || !el.parentNode) {
    return -1;
  }
  /* jshint boss:true */


  while (el = el.previousElementSibling) {
    if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {
      index++;
    }
  }

  return index;
}
/**
 * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.
 * The value is returned in real pixels.
 * @param  {HTMLElement} el
 * @return {Array}             Offsets in the format of [left, top]
 */


function getRelativeScrollOffset(el) {
  var offsetLeft = 0,
      offsetTop = 0,
      winScroller = getWindowScrollingElement();

  if (el) {
    do {
      var elMatrix = matrix(el),
          scaleX = elMatrix.a,
          scaleY = elMatrix.d;
      offsetLeft += el.scrollLeft * scaleX;
      offsetTop += el.scrollTop * scaleY;
    } while (el !== winScroller && (el = el.parentNode));
  }

  return [offsetLeft, offsetTop];
}
/**
 * Returns the index of the object within the given array
 * @param  {Array} arr   Array that may or may not hold the object
 * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find
 * @return {Number}      The index of the object in the array, or -1
 */


function indexOfObject(arr, obj) {
  for (var i in arr) {
    if (!arr.hasOwnProperty(i)) continue;

    for (var key in obj) {
      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);
    }
  }

  return -1;
}

function getParentAutoScrollElement(el, includeSelf) {
  // skip to window
  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();
  var elem = el;
  var gotSelf = false;

  do {
    // we don't need to get elem css if it isn't even overflowing in the first place (performance)
    if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {
      var elemCSS = css(elem);

      if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {
        if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();
        if (gotSelf || includeSelf) return elem;
        gotSelf = true;
      }
    }
    /* jshint boss:true */

  } while (elem = elem.parentNode);

  return getWindowScrollingElement();
}

function extend(dst, src) {
  if (dst && src) {
    for (var key in src) {
      if (src.hasOwnProperty(key)) {
        dst[key] = src[key];
      }
    }
  }

  return dst;
}

function isRectEqual(rect1, rect2) {
  return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);
}

var _throttleTimeout;

function throttle(callback, ms) {
  return function () {
    if (!_throttleTimeout) {
      var args = arguments,
          _this = this;

      if (args.length === 1) {
        callback.call(_this, args[0]);
      } else {
        callback.apply(_this, args);
      }

      _throttleTimeout = setTimeout(function () {
        _throttleTimeout = void 0;
      }, ms);
    }
  };
}

function cancelThrottle() {
  clearTimeout(_throttleTimeout);
  _throttleTimeout = void 0;
}

function scrollBy(el, x, y) {
  el.scrollLeft += x;
  el.scrollTop += y;
}

function clone(el) {
  var Polymer = window.Polymer;
  var $ = window.jQuery || window.Zepto;

  if (Polymer && Polymer.dom) {
    return Polymer.dom(el).cloneNode(true);
  } else if ($) {
    return $(el).clone(true)[0];
  } else {
    return el.cloneNode(true);
  }
}

function setRect(el, rect) {
  css(el, 'position', 'absolute');
  css(el, 'top', rect.top);
  css(el, 'left', rect.left);
  css(el, 'width', rect.width);
  css(el, 'height', rect.height);
}

function unsetRect(el) {
  css(el, 'position', '');
  css(el, 'top', '');
  css(el, 'left', '');
  css(el, 'width', '');
  css(el, 'height', '');
}

var expando = 'Sortable' + new Date().getTime();

function AnimationStateManager() {
  var animationStates = [],
      animationCallbackId;
  return {
    captureAnimationState: function captureAnimationState() {
      animationStates = [];
      if (!this.options.animation) return;
      var children = [].slice.call(this.el.children);
      children.forEach(function (child) {
        if (css(child, 'display') === 'none' || child === Sortable.ghost) return;
        animationStates.push({
          target: child,
          rect: getRect(child)
        });

        var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation


        if (child.thisAnimationDuration) {
          var childMatrix = matrix(child, true);

          if (childMatrix) {
            fromRect.top -= childMatrix.f;
            fromRect.left -= childMatrix.e;
          }
        }

        child.fromRect = fromRect;
      });
    },
    addAnimationState: function addAnimationState(state) {
      animationStates.push(state);
    },
    removeAnimationState: function removeAnimationState(target) {
      animationStates.splice(indexOfObject(animationStates, {
        target: target
      }), 1);
    },
    animateAll: function animateAll(callback) {
      var _this = this;

      if (!this.options.animation) {
        clearTimeout(animationCallbackId);
        if (typeof callback === 'function') callback();
        return;
      }

      var animating = false,
          animationTime = 0;
      animationStates.forEach(function (state) {
        var time = 0,
            target = state.target,
            fromRect = target.fromRect,
            toRect = getRect(target),
            prevFromRect = target.prevFromRect,
            prevToRect = target.prevToRect,
            animatingRect = state.rect,
            targetMatrix = matrix(target, true);

        if (targetMatrix) {
          // Compensate for current animation
          toRect.top -= targetMatrix.f;
          toRect.left -= targetMatrix.e;
        }

        target.toRect = toRect;

        if (target.thisAnimationDuration) {
          // Could also check if animatingRect is between fromRect and toRect
          if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect
          (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {
            // If returning to same place as started from animation and on same axis
            time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);
          }
        } // if fromRect != toRect: animate


        if (!isRectEqual(toRect, fromRect)) {
          target.prevFromRect = fromRect;
          target.prevToRect = toRect;

          if (!time) {
            time = _this.options.animation;
          }

          _this.animate(target, animatingRect, toRect, time);
        }

        if (time) {
          animating = true;
          animationTime = Math.max(animationTime, time);
          clearTimeout(target.animationResetTimer);
          target.animationResetTimer = setTimeout(function () {
            target.animationTime = 0;
            target.prevFromRect = null;
            target.fromRect = null;
            target.prevToRect = null;
            target.thisAnimationDuration = null;
          }, time);
          target.thisAnimationDuration = time;
        }
      });
      clearTimeout(animationCallbackId);

      if (!animating) {
        if (typeof callback === 'function') callback();
      } else {
        animationCallbackId = setTimeout(function () {
          if (typeof callback === 'function') callback();
        }, animationTime);
      }

      animationStates = [];
    },
    animate: function animate(target, currentRect, toRect, duration) {
      if (duration) {
        css(target, 'transition', '');
        css(target, 'transform', '');
        var elMatrix = matrix(this.el),
            scaleX = elMatrix && elMatrix.a,
            scaleY = elMatrix && elMatrix.d,
            translateX = (currentRect.left - toRect.left) / (scaleX || 1),
            translateY = (currentRect.top - toRect.top) / (scaleY || 1);
        target.animatingX = !!translateX;
        target.animatingY = !!translateY;
        css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');
        repaint(target); // repaint

        css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));
        css(target, 'transform', 'translate3d(0,0,0)');
        typeof target.animated === 'number' && clearTimeout(target.animated);
        target.animated = setTimeout(function () {
          css(target, 'transition', '');
          css(target, 'transform', '');
          target.animated = false;
          target.animatingX = false;
          target.animatingY = false;
        }, duration);
      }
    }
  };
}

function repaint(target) {
  return target.offsetWidth;
}

function calculateRealTime(animatingRect, fromRect, toRect, options) {
  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;
}

var plugins = [];
var defaults = {
  initializeByDefault: true
};
var PluginManager = {
  mount: function mount(plugin) {
    // Set default static properties
    for (var option in defaults) {
      if (defaults.hasOwnProperty(option) && !(option in plugin)) {
        plugin[option] = defaults[option];
      }
    }

    plugins.push(plugin);
  },
  pluginEvent: function pluginEvent(eventName, sortable, evt) {
    var _this = this;

    this.eventCanceled = false;

    evt.cancel = function () {
      _this.eventCanceled = true;
    };

    var eventNameGlobal = eventName + 'Global';
    plugins.forEach(function (plugin) {
      if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable

      if (sortable[plugin.pluginName][eventNameGlobal]) {
        sortable[plugin.pluginName][eventNameGlobal](_objectSpread({
          sortable: sortable
        }, evt));
      } // Only fire plugin event if plugin is enabled in this sortable,
      // and plugin has event defined


      if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {
        sortable[plugin.pluginName][eventName](_objectSpread({
          sortable: sortable
        }, evt));
      }
    });
  },
  initializePlugins: function initializePlugins(sortable, el, defaults, options) {
    plugins.forEach(function (plugin) {
      var pluginName = plugin.pluginName;
      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;
      var initialized = new plugin(sortable, el, sortable.options);
      initialized.sortable = sortable;
      initialized.options = sortable.options;
      sortable[pluginName] = initialized; // Add default options from plugin

      _extends(defaults, initialized.defaults);
    });

    for (var option in sortable.options) {
      if (!sortable.options.hasOwnProperty(option)) continue;
      var modified = this.modifyOption(sortable, option, sortable.options[option]);

      if (typeof modified !== 'undefined') {
        sortable.options[option] = modified;
      }
    }
  },
  getEventProperties: function getEventProperties(name, sortable) {
    var eventProperties = {};
    plugins.forEach(function (plugin) {
      if (typeof plugin.eventProperties !== 'function') return;

      _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));
    });
    return eventProperties;
  },
  modifyOption: function modifyOption(sortable, name, value) {
    var modifiedValue;
    plugins.forEach(function (plugin) {
      // Plugin must exist on the Sortable
      if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin

      if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {
        modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);
      }
    });
    return modifiedValue;
  }
};

function dispatchEvent(_ref) {
  var sortable = _ref.sortable,
      rootEl = _ref.rootEl,
      name = _ref.name,
      targetEl = _ref.targetEl,
      cloneEl = _ref.cloneEl,
      toEl = _ref.toEl,
      fromEl = _ref.fromEl,
      oldIndex = _ref.oldIndex,
      newIndex = _ref.newIndex,
      oldDraggableIndex = _ref.oldDraggableIndex,
      newDraggableIndex = _ref.newDraggableIndex,
      originalEvent = _ref.originalEvent,
      putSortable = _ref.putSortable,
      extraEventProperties = _ref.extraEventProperties;
  sortable = sortable || rootEl && rootEl[expando];
  if (!sortable) return;
  var evt,
      options = sortable.options,
      onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature

  if (window.CustomEvent && !IE11OrLess && !Edge) {
    evt = new CustomEvent(name, {
      bubbles: true,
      cancelable: true
    });
  } else {
    evt = document.createEvent('Event');
    evt.initEvent(name, true, true);
  }

  evt.to = toEl || rootEl;
  evt.from = fromEl || rootEl;
  evt.item = targetEl || rootEl;
  evt.clone = cloneEl;
  evt.oldIndex = oldIndex;
  evt.newIndex = newIndex;
  evt.oldDraggableIndex = oldDraggableIndex;
  evt.newDraggableIndex = newDraggableIndex;
  evt.originalEvent = originalEvent;
  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;

  var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));

  for (var option in allEventProperties) {
    evt[option] = allEventProperties[option];
  }

  if (rootEl) {
    rootEl.dispatchEvent(evt);
  }

  if (options[onName]) {
    options[onName].call(sortable, evt);
  }
}

var pluginEvent = function pluginEvent(eventName, sortable) {
  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
      originalEvent = _ref.evt,
      data = _objectWithoutProperties(_ref, ["evt"]);

  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({
    dragEl: dragEl,
    parentEl: parentEl,
    ghostEl: ghostEl,
    rootEl: rootEl,
    nextEl: nextEl,
    lastDownEl: lastDownEl,
    cloneEl: cloneEl,
    cloneHidden: cloneHidden,
    dragStarted: moved,
    putSortable: putSortable,
    activeSortable: Sortable.active,
    originalEvent: originalEvent,
    oldIndex: oldIndex,
    oldDraggableIndex: oldDraggableIndex,
    newIndex: newIndex,
    newDraggableIndex: newDraggableIndex,
    hideGhostForTarget: _hideGhostForTarget,
    unhideGhostForTarget: _unhideGhostForTarget,
    cloneNowHidden: function cloneNowHidden() {
      cloneHidden = true;
    },
    cloneNowShown: function cloneNowShown() {
      cloneHidden = false;
    },
    dispatchSortableEvent: function dispatchSortableEvent(name) {
      _dispatchEvent({
        sortable: sortable,
        name: name,
        originalEvent: originalEvent
      });
    }
  }, data));
};

function _dispatchEvent(info) {
  dispatchEvent(_objectSpread({
    putSortable: putSortable,
    cloneEl: cloneEl,
    targetEl: dragEl,
    rootEl: rootEl,
    oldIndex: oldIndex,
    oldDraggableIndex: oldDraggableIndex,
    newIndex: newIndex,
    newDraggableIndex: newDraggableIndex
  }, info));
}

var dragEl,
    parentEl,
    ghostEl,
    rootEl,
    nextEl,
    lastDownEl,
    cloneEl,
    cloneHidden,
    oldIndex,
    newIndex,
    oldDraggableIndex,
    newDraggableIndex,
    activeGroup,
    putSortable,
    awaitingDragStarted = false,
    ignoreNextClick = false,
    sortables = [],
    tapEvt,
    touchEvt,
    lastDx,
    lastDy,
    tapDistanceLeft,
    tapDistanceTop,
    moved,
    lastTarget,
    lastDirection,
    pastFirstInvertThresh = false,
    isCircumstantialInvert = false,
    targetMoveDistance,
    // For positioning ghost absolutely
ghostRelativeParent,
    ghostRelativeParentInitialScroll = [],
    // (left, top)
_silent = false,
    savedInputChecked = [];
/** @const */

var documentExists = typeof document !== 'undefined',
    PositionGhostAbsolutely = IOS,
    CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',
    // This will not pass for IE9, because IE9 DnD only works on anchors
supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),
    supportCssPointerEvents = function () {
  if (!documentExists) return; // false when <= IE11

  if (IE11OrLess) {
    return false;
  }

  var el = document.createElement('x');
  el.style.cssText = 'pointer-events:auto';
  return el.style.pointerEvents === 'auto';
}(),
    _detectDirection = function _detectDirection(el, options) {
  var elCSS = css(el),
      elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),
      child1 = getChild(el, 0, options),
      child2 = getChild(el, 1, options),
      firstChildCSS = child1 && css(child1),
      secondChildCSS = child2 && css(child2),
      firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,
      secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;

  if (elCSS.display === 'flex') {
    return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';
  }

  if (elCSS.display === 'grid') {
    return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';
  }

  if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') {
    var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right';
    return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';
  }

  return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';
},
    _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {
  var dragElS1Opp = vertical ? dragRect.left : dragRect.top,
      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,
      dragElOppLength = vertical ? dragRect.width : dragRect.height,
      targetS1Opp = vertical ? targetRect.left : targetRect.top,
      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,
      targetOppLength = vertical ? targetRect.width : targetRect.height;
  return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;
},

/**
 * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.
 * @param  {Number} x      X position
 * @param  {Number} y      Y position
 * @return {HTMLElement}   Element of the first found nearest Sortable
 */
_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {
  var ret;
  sortables.some(function (sortable) {
    if (lastChild(sortable)) return;
    var rect = getRect(sortable),
        threshold = sortable[expando].options.emptyInsertThreshold,
        insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,
        insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;

    if (threshold && insideHorizontally && insideVertically) {
      return ret = sortable;
    }
  });
  return ret;
},
    _prepareGroup = function _prepareGroup(options) {
  function toFn(value, pull) {
    return function (to, from, dragEl, evt) {
      var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;

      if (value == null && (pull || sameGroup)) {
        // Default pull value
        // Default pull and put value if same group
        return true;
      } else if (value == null || value === false) {
        return false;
      } else if (pull && value === 'clone') {
        return value;
      } else if (typeof value === 'function') {
        return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);
      } else {
        var otherGroup = (pull ? to : from).options.group.name;
        return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;
      }
    };
  }

  var group = {};
  var originalGroup = options.group;

  if (!originalGroup || _typeof(originalGroup) != 'object') {
    originalGroup = {
      name: originalGroup
    };
  }

  group.name = originalGroup.name;
  group.checkPull = toFn(originalGroup.pull, true);
  group.checkPut = toFn(originalGroup.put);
  group.revertClone = originalGroup.revertClone;
  options.group = group;
},
    _hideGhostForTarget = function _hideGhostForTarget() {
  if (!supportCssPointerEvents && ghostEl) {
    css(ghostEl, 'display', 'none');
  }
},
    _unhideGhostForTarget = function _unhideGhostForTarget() {
  if (!supportCssPointerEvents && ghostEl) {
    css(ghostEl, 'display', '');
  }
}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position


if (documentExists) {
  document.addEventListener('click', function (evt) {
    if (ignoreNextClick) {
      evt.preventDefault();
      evt.stopPropagation && evt.stopPropagation();
      evt.stopImmediatePropagation && evt.stopImmediatePropagation();
      ignoreNextClick = false;
      return false;
    }
  }, true);
}

var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {
  if (dragEl) {
    evt = evt.touches ? evt.touches[0] : evt;

    var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);

    if (nearest) {
      // Create imitation event
      var event = {};

      for (var i in evt) {
        if (evt.hasOwnProperty(i)) {
          event[i] = evt[i];
        }
      }

      event.target = event.rootEl = nearest;
      event.preventDefault = void 0;
      event.stopPropagation = void 0;

      nearest[expando]._onDragOver(event);
    }
  }
};

var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {
  if (dragEl) {
    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
  }
};
/**
 * @class  Sortable
 * @param  {HTMLElement}  el
 * @param  {Object}       [options]
 */


function Sortable(el, options) {
  if (!(el && el.nodeType && el.nodeType === 1)) {
    throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el));
  }

  this.el = el; // root element

  this.options = options = _extends({}, options); // Export instance

  el[expando] = this;
  var defaults = {
    group: null,
    sort: true,
    disabled: false,
    store: null,
    handle: null,
    draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',
    swapThreshold: 1,
    // percentage; 0 <= x <= 1
    invertSwap: false,
    // invert always
    invertedSwapThreshold: null,
    // will be set to same as swapThreshold if default
    removeCloneOnHide: true,
    direction: function direction() {
      return _detectDirection(el, this.options);
    },
    ghostClass: 'sortable-ghost',
    chosenClass: 'sortable-chosen',
    dragClass: 'sortable-drag',
    ignore: 'a, img',
    filter: null,
    preventOnFilter: true,
    animation: 0,
    easing: null,
    setData: function setData(dataTransfer, dragEl) {
      dataTransfer.setData('Text', dragEl.textContent);
    },
    dropBubble: false,
    dragoverBubble: false,
    dataIdAttr: 'data-id',
    delay: 0,
    delayOnTouchOnly: false,
    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,
    forceFallback: false,
    fallbackClass: 'sortable-fallback',
    fallbackOnBody: false,
    fallbackTolerance: 0,
    fallbackOffset: {
      x: 0,
      y: 0
    },
    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window,
    emptyInsertThreshold: 5
  };
  PluginManager.initializePlugins(this, el, defaults); // Set default options

  for (var name in defaults) {
    !(name in options) && (options[name] = defaults[name]);
  }

  _prepareGroup(options); // Bind all private methods


  for (var fn in this) {
    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
      this[fn] = this[fn].bind(this);
    }
  } // Setup drag mode


  this.nativeDraggable = options.forceFallback ? false : supportDraggable;

  if (this.nativeDraggable) {
    // Touch start threshold cannot be greater than the native dragstart threshold
    this.options.touchStartThreshold = 1;
  } // Bind events


  if (options.supportPointer) {
    on(el, 'pointerdown', this._onTapStart);
  } else {
    on(el, 'mousedown', this._onTapStart);
    on(el, 'touchstart', this._onTapStart);
  }

  if (this.nativeDraggable) {
    on(el, 'dragover', this);
    on(el, 'dragenter', this);
  }

  sortables.push(this.el); // Restore sorting

  options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager

  _extends(this, AnimationStateManager());
}

Sortable.prototype =
/** @lends Sortable.prototype */
{
  constructor: Sortable,
  _isOutsideThisEl: function _isOutsideThisEl(target) {
    if (!this.el.contains(target) && target !== this.el) {
      lastTarget = null;
    }
  },
  _getDirection: function _getDirection(evt, target) {
    return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;
  },
  _onTapStart: function _onTapStart(
  /** Event|TouchEvent */
  evt) {
    if (!evt.cancelable) return;

    var _this = this,
        el = this.el,
        options = this.options,
        preventOnFilter = options.preventOnFilter,
        type = evt.type,
        touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,
        target = (touch || evt).target,
        originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,
        filter = options.filter;

    _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.


    if (dragEl) {
      return;
    }

    if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {
      return; // only left button and enabled
    } // cancel dnd if original target is content editable


    if (originalTarget.isContentEditable) {
      return;
    }

    target = closest(target, options.draggable, el, false);

    if (target && target.animated) {
      return;
    }

    if (lastDownEl === target) {
      // Ignoring duplicate `down`
      return;
    } // Get the index of the dragged element within its parent


    oldIndex = index(target);
    oldDraggableIndex = index(target, options.draggable); // Check filter

    if (typeof filter === 'function') {
      if (filter.call(this, evt, target, this)) {
        _dispatchEvent({
          sortable: _this,
          rootEl: originalTarget,
          name: 'filter',
          targetEl: target,
          toEl: el,
          fromEl: el
        });

        pluginEvent('filter', _this, {
          evt: evt
        });
        preventOnFilter && evt.cancelable && evt.preventDefault();
        return; // cancel dnd
      }
    } else if (filter) {
      filter = filter.split(',').some(function (criteria) {
        criteria = closest(originalTarget, criteria.trim(), el, false);

        if (criteria) {
          _dispatchEvent({
            sortable: _this,
            rootEl: criteria,
            name: 'filter',
            targetEl: target,
            fromEl: el,
            toEl: el
          });

          pluginEvent('filter', _this, {
            evt: evt
          });
          return true;
        }
      });

      if (filter) {
        preventOnFilter && evt.cancelable && evt.preventDefault();
        return; // cancel dnd
      }
    }

    if (options.handle && !closest(originalTarget, options.handle, el, false)) {
      return;
    } // Prepare `dragstart`


    this._prepareDragStart(evt, touch, target);
  },
  _prepareDragStart: function _prepareDragStart(
  /** Event */
  evt,
  /** Touch */
  touch,
  /** HTMLElement */
  target) {
    var _this = this,
        el = _this.el,
        options = _this.options,
        ownerDocument = el.ownerDocument,
        dragStartFn;

    if (target && !dragEl && target.parentNode === el) {
      var dragRect = getRect(target);
      rootEl = el;
      dragEl = target;
      parentEl = dragEl.parentNode;
      nextEl = dragEl.nextSibling;
      lastDownEl = target;
      activeGroup = options.group;
      Sortable.dragged = dragEl;
      tapEvt = {
        target: dragEl,
        clientX: (touch || evt).clientX,
        clientY: (touch || evt).clientY
      };
      tapDistanceLeft = tapEvt.clientX - dragRect.left;
      tapDistanceTop = tapEvt.clientY - dragRect.top;
      this._lastX = (touch || evt).clientX;
      this._lastY = (touch || evt).clientY;
      dragEl.style['will-change'] = 'all';

      dragStartFn = function dragStartFn() {
        pluginEvent('delayEnded', _this, {
          evt: evt
        });

        if (Sortable.eventCanceled) {
          _this._onDrop();

          return;
        } // Delayed drag has been triggered
        // we can re-enable the events: touchmove/mousemove


        _this._disableDelayedDragEvents();

        if (!FireFox && _this.nativeDraggable) {
          dragEl.draggable = true;
        } // Bind the events: dragstart/dragend


        _this._triggerDragStart(evt, touch); // Drag start event


        _dispatchEvent({
          sortable: _this,
          name: 'choose',
          originalEvent: evt
        }); // Chosen item


        toggleClass(dragEl, options.chosenClass, true);
      }; // Disable "draggable"


      options.ignore.split(',').forEach(function (criteria) {
        find(dragEl, criteria.trim(), _disableDraggable);
      });
      on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);
      on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);
      on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);
      on(ownerDocument, 'mouseup', _this._onDrop);
      on(ownerDocument, 'touchend', _this._onDrop);
      on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)

      if (FireFox && this.nativeDraggable) {
        this.options.touchStartThreshold = 4;
        dragEl.draggable = true;
      }

      pluginEvent('delayStart', this, {
        evt: evt
      }); // Delay is impossible for native DnD in Edge or IE

      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {
        if (Sortable.eventCanceled) {
          this._onDrop();

          return;
        } // If the user moves the pointer or let go the click or touch
        // before the delay has been reached:
        // disable the delayed drag


        on(ownerDocument, 'mouseup', _this._disableDelayedDrag);
        on(ownerDocument, 'touchend', _this._disableDelayedDrag);
        on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);
        on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);
        on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);
        options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);
        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);
      } else {
        dragStartFn();
      }
    }
  },
  _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(
  /** TouchEvent|PointerEvent **/
  e) {
    var touch = e.touches ? e.touches[0] : e;

    if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {
      this._disableDelayedDrag();
    }
  },
  _disableDelayedDrag: function _disableDelayedDrag() {
    dragEl && _disableDraggable(dragEl);
    clearTimeout(this._dragStartTimer);

    this._disableDelayedDragEvents();
  },
  _disableDelayedDragEvents: function _disableDelayedDragEvents() {
    var ownerDocument = this.el.ownerDocument;
    off(ownerDocument, 'mouseup', this._disableDelayedDrag);
    off(ownerDocument, 'touchend', this._disableDelayedDrag);
    off(ownerDocument, 'touchcancel', this._disableDelayedDrag);
    off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);
    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);
    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);
  },
  _triggerDragStart: function _triggerDragStart(
  /** Event */
  evt,
  /** Touch */
  touch) {
    touch = touch || evt.pointerType == 'touch' && evt;

    if (!this.nativeDraggable || touch) {
      if (this.options.supportPointer) {
        on(document, 'pointermove', this._onTouchMove);
      } else if (touch) {
        on(document, 'touchmove', this._onTouchMove);
      } else {
        on(document, 'mousemove', this._onTouchMove);
      }
    } else {
      on(dragEl, 'dragend', this);
      on(rootEl, 'dragstart', this._onDragStart);
    }

    try {
      if (document.selection) {
        // Timeout neccessary for IE9
        _nextTick(function () {
          document.selection.empty();
        });
      } else {
        window.getSelection().removeAllRanges();
      }
    } catch (err) {}
  },
  _dragStarted: function _dragStarted(fallback, evt) {

    awaitingDragStarted = false;

    if (rootEl && dragEl) {
      pluginEvent('dragStarted', this, {
        evt: evt
      });

      if (this.nativeDraggable) {
        on(document, 'dragover', _checkOutsideTargetEl);
      }

      var options = this.options; // Apply effect

      !fallback && toggleClass(dragEl, options.dragClass, false);
      toggleClass(dragEl, options.ghostClass, true);
      Sortable.active = this;
      fallback && this._appendGhost(); // Drag start event

      _dispatchEvent({
        sortable: this,
        name: 'start',
        originalEvent: evt
      });
    } else {
      this._nulling();
    }
  },
  _emulateDragOver: function _emulateDragOver() {
    if (touchEvt) {
      this._lastX = touchEvt.clientX;
      this._lastY = touchEvt.clientY;

      _hideGhostForTarget();

      var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
      var parent = target;

      while (target && target.shadowRoot) {
        target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
        if (target === parent) break;
        parent = target;
      }

      dragEl.parentNode[expando]._isOutsideThisEl(target);

      if (parent) {
        do {
          if (parent[expando]) {
            var inserted = void 0;
            inserted = parent[expando]._onDragOver({
              clientX: touchEvt.clientX,
              clientY: touchEvt.clientY,
              target: target,
              rootEl: parent
            });

            if (inserted && !this.options.dragoverBubble) {
              break;
            }
          }

          target = parent; // store last element
        }
        /* jshint boss:true */
        while (parent = parent.parentNode);
      }

      _unhideGhostForTarget();
    }
  },
  _onTouchMove: function _onTouchMove(
  /**TouchEvent*/
  evt) {
    if (tapEvt) {
      var options = this.options,
          fallbackTolerance = options.fallbackTolerance,
          fallbackOffset = options.fallbackOffset,
          touch = evt.touches ? evt.touches[0] : evt,
          ghostMatrix = ghostEl && matrix(ghostEl, true),
          scaleX = ghostEl && ghostMatrix && ghostMatrix.a,
          scaleY = ghostEl && ghostMatrix && ghostMatrix.d,
          relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),
          dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),
          dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging

      if (!Sortable.active && !awaitingDragStarted) {
        if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {
          return;
        }

        this._onDragStart(evt, true);
      }

      if (ghostEl) {
        if (ghostMatrix) {
          ghostMatrix.e += dx - (lastDx || 0);
          ghostMatrix.f += dy - (lastDy || 0);
        } else {
          ghostMatrix = {
            a: 1,
            b: 0,
            c: 0,
            d: 1,
            e: dx,
            f: dy
          };
        }

        var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")");
        css(ghostEl, 'webkitTransform', cssMatrix);
        css(ghostEl, 'mozTransform', cssMatrix);
        css(ghostEl, 'msTransform', cssMatrix);
        css(ghostEl, 'transform', cssMatrix);
        lastDx = dx;
        lastDy = dy;
        touchEvt = touch;
      }

      evt.cancelable && evt.preventDefault();
    }
  },
  _appendGhost: function _appendGhost() {
    // Bug if using scale(): https://stackoverflow.com/questions/2637058
    // Not being adjusted for
    if (!ghostEl) {
      var container = this.options.fallbackOnBody ? document.body : rootEl,
          rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),
          options = this.options; // Position absolutely

      if (PositionGhostAbsolutely) {
        // Get relatively positioned parent
        ghostRelativeParent = container;

        while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {
          ghostRelativeParent = ghostRelativeParent.parentNode;
        }

        if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {
          if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();
          rect.top += ghostRelativeParent.scrollTop;
          rect.left += ghostRelativeParent.scrollLeft;
        } else {
          ghostRelativeParent = getWindowScrollingElement();
        }

        ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);
      }

      ghostEl = dragEl.cloneNode(true);
      toggleClass(ghostEl, options.ghostClass, false);
      toggleClass(ghostEl, options.fallbackClass, true);
      toggleClass(ghostEl, options.dragClass, true);
      css(ghostEl, 'transition', '');
      css(ghostEl, 'transform', '');
      css(ghostEl, 'box-sizing', 'border-box');
      css(ghostEl, 'margin', 0);
      css(ghostEl, 'top', rect.top);
      css(ghostEl, 'left', rect.left);
      css(ghostEl, 'width', rect.width);
      css(ghostEl, 'height', rect.height);
      css(ghostEl, 'opacity', '0.8');
      css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');
      css(ghostEl, 'zIndex', '100000');
      css(ghostEl, 'pointerEvents', 'none');
      Sortable.ghost = ghostEl;
      container.appendChild(ghostEl); // Set transform-origin

      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');
    }
  },
  _onDragStart: function _onDragStart(
  /**Event*/
  evt,
  /**boolean*/
  fallback) {
    var _this = this;

    var dataTransfer = evt.dataTransfer;
    var options = _this.options;
    pluginEvent('dragStart', this, {
      evt: evt
    });

    if (Sortable.eventCanceled) {
      this._onDrop();

      return;
    }

    pluginEvent('setupClone', this);

    if (!Sortable.eventCanceled) {
      cloneEl = clone(dragEl);
      cloneEl.draggable = false;
      cloneEl.style['will-change'] = '';

      this._hideClone();

      toggleClass(cloneEl, this.options.chosenClass, false);
      Sortable.clone = cloneEl;
    } // #1143: IFrame support workaround


    _this.cloneId = _nextTick(function () {
      pluginEvent('clone', _this);
      if (Sortable.eventCanceled) return;

      if (!_this.options.removeCloneOnHide) {
        rootEl.insertBefore(cloneEl, dragEl);
      }

      _this._hideClone();

      _dispatchEvent({
        sortable: _this,
        name: 'clone'
      });
    });
    !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events

    if (fallback) {
      ignoreNextClick = true;
      _this._loopId = setInterval(_this._emulateDragOver, 50);
    } else {
      // Undo what was set in _prepareDragStart before drag started
      off(document, 'mouseup', _this._onDrop);
      off(document, 'touchend', _this._onDrop);
      off(document, 'touchcancel', _this._onDrop);

      if (dataTransfer) {
        dataTransfer.effectAllowed = 'move';
        options.setData && options.setData.call(_this, dataTransfer, dragEl);
      }

      on(document, 'drop', _this); // #1276 fix:

      css(dragEl, 'transform', 'translateZ(0)');
    }

    awaitingDragStarted = true;
    _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));
    on(document, 'selectstart', _this);
    moved = true;

    if (Safari) {
      css(document.body, 'user-select', 'none');
    }
  },
  // Returns true - if no further action is needed (either inserted or another condition)
  _onDragOver: function _onDragOver(
  /**Event*/
  evt) {
    var el = this.el,
        target = evt.target,
        dragRect,
        targetRect,
        revert,
        options = this.options,
        group = options.group,
        activeSortable = Sortable.active,
        isOwner = activeGroup === group,
        canSort = options.sort,
        fromSortable = putSortable || activeSortable,
        vertical,
        _this = this,
        completedFired = false;

    if (_silent) return;

    function dragOverEvent(name, extra) {
      pluginEvent(name, _this, _objectSpread({
        evt: evt,
        isOwner: isOwner,
        axis: vertical ? 'vertical' : 'horizontal',
        revert: revert,
        dragRect: dragRect,
        targetRect: targetRect,
        canSort: canSort,
        fromSortable: fromSortable,
        target: target,
        completed: completed,
        onMove: function onMove(target, after) {
          return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);
        },
        changed: changed
      }, extra));
    } // Capture animation state


    function capture() {
      dragOverEvent('dragOverAnimationCapture');

      _this.captureAnimationState();

      if (_this !== fromSortable) {
        fromSortable.captureAnimationState();
      }
    } // Return invocation when dragEl is inserted (or completed)


    function completed(insertion) {
      dragOverEvent('dragOverCompleted', {
        insertion: insertion
      });

      if (insertion) {
        // Clones must be hidden before folding animation to capture dragRectAbsolute properly
        if (isOwner) {
          activeSortable._hideClone();
        } else {
          activeSortable._showClone(_this);
        }

        if (_this !== fromSortable) {
          // Set ghost class to new sortable's ghost class
          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);
          toggleClass(dragEl, options.ghostClass, true);
        }

        if (putSortable !== _this && _this !== Sortable.active) {
          putSortable = _this;
        } else if (_this === Sortable.active && putSortable) {
          putSortable = null;
        } // Animation


        if (fromSortable === _this) {
          _this._ignoreWhileAnimating = target;
        }

        _this.animateAll(function () {
          dragOverEvent('dragOverAnimationComplete');
          _this._ignoreWhileAnimating = null;
        });

        if (_this !== fromSortable) {
          fromSortable.animateAll();
          fromSortable._ignoreWhileAnimating = null;
        }
      } // Null lastTarget if it is not inside a previously swapped element


      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {
        lastTarget = null;
      } // no bubbling and not fallback


      if (!options.dragoverBubble && !evt.rootEl && target !== document) {
        dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted


        !insertion && nearestEmptyInsertDetectEvent(evt);
      }

      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();
      return completedFired = true;
    } // Call when dragEl has been inserted


    function changed() {
      newIndex = index(dragEl);
      newDraggableIndex = index(dragEl, options.draggable);

      _dispatchEvent({
        sortable: _this,
        name: 'change',
        toEl: el,
        newIndex: newIndex,
        newDraggableIndex: newDraggableIndex,
        originalEvent: evt
      });
    }

    if (evt.preventDefault !== void 0) {
      evt.cancelable && evt.preventDefault();
    }

    target = closest(target, options.draggable, el, true);
    dragOverEvent('dragOver');
    if (Sortable.eventCanceled) return completedFired;

    if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {
      return completed(false);
    }

    ignoreNextClick = false;

    if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list
    : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {
      vertical = this._getDirection(evt, target) === 'vertical';
      dragRect = getRect(dragEl);
      dragOverEvent('dragOverValid');
      if (Sortable.eventCanceled) return completedFired;

      if (revert) {
        parentEl = rootEl; // actualization

        capture();

        this._hideClone();

        dragOverEvent('revert');

        if (!Sortable.eventCanceled) {
          if (nextEl) {
            rootEl.insertBefore(dragEl, nextEl);
          } else {
            rootEl.appendChild(dragEl);
          }
        }

        return completed(true);
      }

      var elLastChild = lastChild(el, options.draggable);

      if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {
        // If already at end of list: Do not insert
        if (elLastChild === dragEl) {
          return completed(false);
        } // assign target only if condition is true


        if (elLastChild && el === evt.target) {
          target = elLastChild;
        }

        if (target) {
          targetRect = getRect(target);
        }

        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {
          capture();
          el.appendChild(dragEl);
          parentEl = el; // actualization

          changed();
          return completed(true);
        }
      } else if (target.parentNode === el) {
        targetRect = getRect(target);
        var direction = 0,
            targetBeforeFirstSwap,
            differentLevel = dragEl.parentNode !== el,
            differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),
            side1 = vertical ? 'top' : 'left',
            scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),
            scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;

        if (lastTarget !== target) {
          targetBeforeFirstSwap = targetRect[side1];
          pastFirstInvertThresh = false;
          isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;
        }

        direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);
        var sibling;

        if (direction !== 0) {
          // Check if target is beside dragEl in respective direction (ignoring hidden elements)
          var dragIndex = index(dragEl);

          do {
            dragIndex -= direction;
            sibling = parentEl.children[dragIndex];
          } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));
        } // If dragEl is already beside target: Do not insert


        if (direction === 0 || sibling === target) {
          return completed(false);
        }

        lastTarget = target;
        lastDirection = direction;
        var nextSibling = target.nextElementSibling,
            after = false;
        after = direction === 1;

        var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);

        if (moveVector !== false) {
          if (moveVector === 1 || moveVector === -1) {
            after = moveVector === 1;
          }

          _silent = true;
          setTimeout(_unsilent, 30);
          capture();

          if (after && !nextSibling) {
            el.appendChild(dragEl);
          } else {
            target.parentNode.insertBefore(dragEl, after ? nextSibling : target);
          } // Undo chrome's scroll adjustment (has no effect on other browsers)


          if (scrolledPastTop) {
            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);
          }

          parentEl = dragEl.parentNode; // actualization
          // must be done before animation

          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {
            targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);
          }

          changed();
          return completed(true);
        }
      }

      if (el.contains(dragEl)) {
        return completed(false);
      }
    }

    return false;
  },
  _ignoreWhileAnimating: null,
  _offMoveEvents: function _offMoveEvents() {
    off(document, 'mousemove', this._onTouchMove);
    off(document, 'touchmove', this._onTouchMove);
    off(document, 'pointermove', this._onTouchMove);
    off(document, 'dragover', nearestEmptyInsertDetectEvent);
    off(document, 'mousemove', nearestEmptyInsertDetectEvent);
    off(document, 'touchmove', nearestEmptyInsertDetectEvent);
  },
  _offUpEvents: function _offUpEvents() {
    var ownerDocument = this.el.ownerDocument;
    off(ownerDocument, 'mouseup', this._onDrop);
    off(ownerDocument, 'touchend', this._onDrop);
    off(ownerDocument, 'pointerup', this._onDrop);
    off(ownerDocument, 'touchcancel', this._onDrop);
    off(document, 'selectstart', this);
  },
  _onDrop: function _onDrop(
  /**Event*/
  evt) {
    var el = this.el,
        options = this.options; // Get the index of the dragged element within its parent

    newIndex = index(dragEl);
    newDraggableIndex = index(dragEl, options.draggable);
    pluginEvent('drop', this, {
      evt: evt
    });
    parentEl = dragEl && dragEl.parentNode; // Get again after plugin event

    newIndex = index(dragEl);
    newDraggableIndex = index(dragEl, options.draggable);

    if (Sortable.eventCanceled) {
      this._nulling();

      return;
    }

    awaitingDragStarted = false;
    isCircumstantialInvert = false;
    pastFirstInvertThresh = false;
    clearInterval(this._loopId);
    clearTimeout(this._dragStartTimer);

    _cancelNextTick(this.cloneId);

    _cancelNextTick(this._dragStartId); // Unbind events


    if (this.nativeDraggable) {
      off(document, 'drop', this);
      off(el, 'dragstart', this._onDragStart);
    }

    this._offMoveEvents();

    this._offUpEvents();

    if (Safari) {
      css(document.body, 'user-select', '');
    }

    css(dragEl, 'transform', '');

    if (evt) {
      if (moved) {
        evt.cancelable && evt.preventDefault();
        !options.dropBubble && evt.stopPropagation();
      }

      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);

      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
        // Remove clone(s)
        cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);
      }

      if (dragEl) {
        if (this.nativeDraggable) {
          off(dragEl, 'dragend', this);
        }

        _disableDraggable(dragEl);

        dragEl.style['will-change'] = ''; // Remove classes
        // ghostClass is added in dragStarted

        if (moved && !awaitingDragStarted) {
          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);
        }

        toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event

        _dispatchEvent({
          sortable: this,
          name: 'unchoose',
          toEl: parentEl,
          newIndex: null,
          newDraggableIndex: null,
          originalEvent: evt
        });

        if (rootEl !== parentEl) {
          if (newIndex >= 0) {
            // Add event
            _dispatchEvent({
              rootEl: parentEl,
              name: 'add',
              toEl: parentEl,
              fromEl: rootEl,
              originalEvent: evt
            }); // Remove event


            _dispatchEvent({
              sortable: this,
              name: 'remove',
              toEl: parentEl,
              originalEvent: evt
            }); // drag from one list and drop into another


            _dispatchEvent({
              rootEl: parentEl,
              name: 'sort',
              toEl: parentEl,
              fromEl: rootEl,
              originalEvent: evt
            });

            _dispatchEvent({
              sortable: this,
              name: 'sort',
              toEl: parentEl,
              originalEvent: evt
            });
          }

          putSortable && putSortable.save();
        } else {
          if (newIndex !== oldIndex) {
            if (newIndex >= 0) {
              // drag & drop within the same list
              _dispatchEvent({
                sortable: this,
                name: 'update',
                toEl: parentEl,
                originalEvent: evt
              });

              _dispatchEvent({
                sortable: this,
                name: 'sort',
                toEl: parentEl,
                originalEvent: evt
              });
            }
          }
        }

        if (Sortable.active) {
          /* jshint eqnull:true */
          if (newIndex == null || newIndex === -1) {
            newIndex = oldIndex;
            newDraggableIndex = oldDraggableIndex;
          }

          _dispatchEvent({
            sortable: this,
            name: 'end',
            toEl: parentEl,
            originalEvent: evt
          }); // Save sorting


          this.save();
        }
      }
    }

    this._nulling();
  },
  _nulling: function _nulling() {
    pluginEvent('nulling', this);
    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;
    savedInputChecked.forEach(function (el) {
      el.checked = true;
    });
    savedInputChecked.length = lastDx = lastDy = 0;
  },
  handleEvent: function handleEvent(
  /**Event*/
  evt) {
    switch (evt.type) {
      case 'drop':
      case 'dragend':
        this._onDrop(evt);

        break;

      case 'dragenter':
      case 'dragover':
        if (dragEl) {
          this._onDragOver(evt);

          _globalDragOver(evt);
        }

        break;

      case 'selectstart':
        evt.preventDefault();
        break;
    }
  },

  /**
   * Serializes the item into an array of string.
   * @returns {String[]}
   */
  toArray: function toArray() {
    var order = [],
        el,
        children = this.el.children,
        i = 0,
        n = children.length,
        options = this.options;

    for (; i < n; i++) {
      el = children[i];

      if (closest(el, options.draggable, this.el, false)) {
        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));
      }
    }

    return order;
  },

  /**
   * Sorts the elements according to the array.
   * @param  {String[]}  order  order of the items
   */
  sort: function sort(order) {
    var items = {},
        rootEl = this.el;
    this.toArray().forEach(function (id, i) {
      var el = rootEl.children[i];

      if (closest(el, this.options.draggable, rootEl, false)) {
        items[id] = el;
      }
    }, this);
    order.forEach(function (id) {
      if (items[id]) {
        rootEl.removeChild(items[id]);
        rootEl.appendChild(items[id]);
      }
    });
  },

  /**
   * Save the current sorting
   */
  save: function save() {
    var store = this.options.store;
    store && store.set && store.set(this);
  },

  /**
   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
   * @param   {HTMLElement}  el
   * @param   {String}       [selector]  default: `options.draggable`
   * @returns {HTMLElement|null}
   */
  closest: function closest$1(el, selector) {
    return closest(el, selector || this.options.draggable, this.el, false);
  },

  /**
   * Set/get option
   * @param   {string} name
   * @param   {*}      [value]
   * @returns {*}
   */
  option: function option(name, value) {
    var options = this.options;

    if (value === void 0) {
      return options[name];
    } else {
      var modifiedValue = PluginManager.modifyOption(this, name, value);

      if (typeof modifiedValue !== 'undefined') {
        options[name] = modifiedValue;
      } else {
        options[name] = value;
      }

      if (name === 'group') {
        _prepareGroup(options);
      }
    }
  },

  /**
   * Destroy
   */
  destroy: function destroy() {
    pluginEvent('destroy', this);
    var el = this.el;
    el[expando] = null;
    off(el, 'mousedown', this._onTapStart);
    off(el, 'touchstart', this._onTapStart);
    off(el, 'pointerdown', this._onTapStart);

    if (this.nativeDraggable) {
      off(el, 'dragover', this);
      off(el, 'dragenter', this);
    } // Remove draggable attributes


    Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {
      el.removeAttribute('draggable');
    });

    this._onDrop();

    this._disableDelayedDragEvents();

    sortables.splice(sortables.indexOf(this.el), 1);
    this.el = el = null;
  },
  _hideClone: function _hideClone() {
    if (!cloneHidden) {
      pluginEvent('hideClone', this);
      if (Sortable.eventCanceled) return;
      css(cloneEl, 'display', 'none');

      if (this.options.removeCloneOnHide && cloneEl.parentNode) {
        cloneEl.parentNode.removeChild(cloneEl);
      }

      cloneHidden = true;
    }
  },
  _showClone: function _showClone(putSortable) {
    if (putSortable.lastPutMode !== 'clone') {
      this._hideClone();

      return;
    }

    if (cloneHidden) {
      pluginEvent('showClone', this);
      if (Sortable.eventCanceled) return; // show clone at dragEl or original position

      if (rootEl.contains(dragEl) && !this.options.group.revertClone) {
        rootEl.insertBefore(cloneEl, dragEl);
      } else if (nextEl) {
        rootEl.insertBefore(cloneEl, nextEl);
      } else {
        rootEl.appendChild(cloneEl);
      }

      if (this.options.group.revertClone) {
        this.animate(dragEl, cloneEl);
      }

      css(cloneEl, 'display', '');
      cloneHidden = false;
    }
  }
};

function _globalDragOver(
/**Event*/
evt) {
  if (evt.dataTransfer) {
    evt.dataTransfer.dropEffect = 'move';
  }

  evt.cancelable && evt.preventDefault();
}

function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {
  var evt,
      sortable = fromEl[expando],
      onMoveFn = sortable.options.onMove,
      retVal; // Support for new CustomEvent feature

  if (window.CustomEvent && !IE11OrLess && !Edge) {
    evt = new CustomEvent('move', {
      bubbles: true,
      cancelable: true
    });
  } else {
    evt = document.createEvent('Event');
    evt.initEvent('move', true, true);
  }

  evt.to = toEl;
  evt.from = fromEl;
  evt.dragged = dragEl;
  evt.draggedRect = dragRect;
  evt.related = targetEl || toEl;
  evt.relatedRect = targetRect || getRect(toEl);
  evt.willInsertAfter = willInsertAfter;
  evt.originalEvent = originalEvent;
  fromEl.dispatchEvent(evt);

  if (onMoveFn) {
    retVal = onMoveFn.call(sortable, evt, originalEvent);
  }

  return retVal;
}

function _disableDraggable(el) {
  el.draggable = false;
}

function _unsilent() {
  _silent = false;
}

function _ghostIsLast(evt, vertical, sortable) {
  var rect = getRect(lastChild(sortable.el, sortable.options.draggable));
  var spacer = 10;
  return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;
}

function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {
  var mouseOnAxis = vertical ? evt.clientY : evt.clientX,
      targetLength = vertical ? targetRect.height : targetRect.width,
      targetS1 = vertical ? targetRect.top : targetRect.left,
      targetS2 = vertical ? targetRect.bottom : targetRect.right,
      invert = false;

  if (!invertSwap) {
    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold
    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {
      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2
      // check if past first invert threshold on side opposite of lastDirection
      if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {
        // past first invert threshold, do not restrict inverted threshold to dragEl shadow
        pastFirstInvertThresh = true;
      }

      if (!pastFirstInvertThresh) {
        // dragEl shadow (target move distance shadow)
        if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow
        : mouseOnAxis > targetS2 - targetMoveDistance) {
          return -lastDirection;
        }
      } else {
        invert = true;
      }
    } else {
      // Regular
      if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {
        return _getInsertDirection(target);
      }
    }
  }

  invert = invert || invertSwap;

  if (invert) {
    // Invert of regular
    if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {
      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;
    }
  }

  return 0;
}
/**
 * Gets the direction dragEl must be swapped relative to target in order to make it
 * seem that dragEl has been "inserted" into that element's position
 * @param  {HTMLElement} target       The target whose position dragEl is being inserted at
 * @return {Number}                   Direction dragEl must be swapped
 */


function _getInsertDirection(target) {
  if (index(dragEl) < index(target)) {
    return 1;
  } else {
    return -1;
  }
}
/**
 * Generate id
 * @param   {HTMLElement} el
 * @returns {String}
 * @private
 */


function _generateId(el) {
  var str = el.tagName + el.className + el.src + el.href + el.textContent,
      i = str.length,
      sum = 0;

  while (i--) {
    sum += str.charCodeAt(i);
  }

  return sum.toString(36);
}

function _saveInputCheckedState(root) {
  savedInputChecked.length = 0;
  var inputs = root.getElementsByTagName('input');
  var idx = inputs.length;

  while (idx--) {
    var el = inputs[idx];
    el.checked && savedInputChecked.push(el);
  }
}

function _nextTick(fn) {
  return setTimeout(fn, 0);
}

function _cancelNextTick(id) {
  return clearTimeout(id);
} // Fixed #973:


if (documentExists) {
  on(document, 'touchmove', function (evt) {
    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {
      evt.preventDefault();
    }
  });
} // Export utils


Sortable.utils = {
  on: on,
  off: off,
  css: css,
  find: find,
  is: function is(el, selector) {
    return !!closest(el, selector, el, false);
  },
  extend: extend,
  throttle: throttle,
  closest: closest,
  toggleClass: toggleClass,
  clone: clone,
  index: index,
  nextTick: _nextTick,
  cancelNextTick: _cancelNextTick,
  detectDirection: _detectDirection,
  getChild: getChild
};
/**
 * Get the Sortable instance of an element
 * @param  {HTMLElement} element The element
 * @return {Sortable|undefined}         The instance of Sortable
 */

Sortable.get = function (element) {
  return element[expando];
};
/**
 * Mount a plugin to Sortable
 * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted
 */


Sortable.mount = function () {
  for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
    plugins[_key] = arguments[_key];
  }

  if (plugins[0].constructor === Array) plugins = plugins[0];
  plugins.forEach(function (plugin) {
    if (!plugin.prototype || !plugin.prototype.constructor) {
      throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin));
    }

    if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);
    PluginManager.mount(plugin);
  });
};
/**
 * Create sortable instance
 * @param {HTMLElement}  el
 * @param {Object}      [options]
 */


Sortable.create = function (el, options) {
  return new Sortable(el, options);
}; // Export


Sortable.version = version;

var autoScrolls = [],
    scrollEl,
    scrollRootEl,
    scrolling = false,
    lastAutoScrollX,
    lastAutoScrollY,
    touchEvt$1,
    pointerElemChangedInterval;

function AutoScrollPlugin() {
  function AutoScroll() {
    this.defaults = {
      scroll: true,
      scrollSensitivity: 30,
      scrollSpeed: 10,
      bubbleScroll: true
    }; // Bind all private methods

    for (var fn in this) {
      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
        this[fn] = this[fn].bind(this);
      }
    }
  }

  AutoScroll.prototype = {
    dragStarted: function dragStarted(_ref) {
      var originalEvent = _ref.originalEvent;

      if (this.sortable.nativeDraggable) {
        on(document, 'dragover', this._handleAutoScroll);
      } else {
        if (this.options.supportPointer) {
          on(document, 'pointermove', this._handleFallbackAutoScroll);
        } else if (originalEvent.touches) {
          on(document, 'touchmove', this._handleFallbackAutoScroll);
        } else {
          on(document, 'mousemove', this._handleFallbackAutoScroll);
        }
      }
    },
    dragOverCompleted: function dragOverCompleted(_ref2) {
      var originalEvent = _ref2.originalEvent;

      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)
      if (!this.options.dragOverBubble && !originalEvent.rootEl) {
        this._handleAutoScroll(originalEvent);
      }
    },
    drop: function drop() {
      if (this.sortable.nativeDraggable) {
        off(document, 'dragover', this._handleAutoScroll);
      } else {
        off(document, 'pointermove', this._handleFallbackAutoScroll);
        off(document, 'touchmove', this._handleFallbackAutoScroll);
        off(document, 'mousemove', this._handleFallbackAutoScroll);
      }

      clearPointerElemChangedInterval();
      clearAutoScrolls();
      cancelThrottle();
    },
    nulling: function nulling() {
      touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;
      autoScrolls.length = 0;
    },
    _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {
      this._handleAutoScroll(evt, true);
    },
    _handleAutoScroll: function _handleAutoScroll(evt, fallback) {
      var _this = this;

      var x = (evt.touches ? evt.touches[0] : evt).clientX,
          y = (evt.touches ? evt.touches[0] : evt).clientY,
          elem = document.elementFromPoint(x, y);
      touchEvt$1 = evt; // IE does not seem to have native autoscroll,
      // Edge's autoscroll seems too conditional,
      // MACOS Safari does not have autoscroll,
      // Firefox and Chrome are good

      if (fallback || Edge || IE11OrLess || Safari) {
        autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change

        var ogElemScroller = getParentAutoScrollElement(elem, true);

        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {
          pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour

          pointerElemChangedInterval = setInterval(function () {
            var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);

            if (newElem !== ogElemScroller) {
              ogElemScroller = newElem;
              clearAutoScrolls();
            }

            autoScroll(evt, _this.options, newElem, fallback);
          }, 10);
          lastAutoScrollX = x;
          lastAutoScrollY = y;
        }
      } else {
        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll
        if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {
          clearAutoScrolls();
          return;
        }

        autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);
      }
    }
  };
  return _extends(AutoScroll, {
    pluginName: 'scroll',
    initializeByDefault: true
  });
}

function clearAutoScrolls() {
  autoScrolls.forEach(function (autoScroll) {
    clearInterval(autoScroll.pid);
  });
  autoScrolls = [];
}

function clearPointerElemChangedInterval() {
  clearInterval(pointerElemChangedInterval);
}

var autoScroll = throttle(function (evt, options, rootEl, isFallback) {
  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521
  if (!options.scroll) return;
  var x = (evt.touches ? evt.touches[0] : evt).clientX,
      y = (evt.touches ? evt.touches[0] : evt).clientY,
      sens = options.scrollSensitivity,
      speed = options.scrollSpeed,
      winScroller = getWindowScrollingElement();
  var scrollThisInstance = false,
      scrollCustomFn; // New scroll root, set scrollEl

  if (scrollRootEl !== rootEl) {
    scrollRootEl = rootEl;
    clearAutoScrolls();
    scrollEl = options.scroll;
    scrollCustomFn = options.scrollFn;

    if (scrollEl === true) {
      scrollEl = getParentAutoScrollElement(rootEl, true);
    }
  }

  var layersOut = 0;
  var currentParent = scrollEl;

  do {
    var el = currentParent,
        rect = getRect(el),
        top = rect.top,
        bottom = rect.bottom,
        left = rect.left,
        right = rect.right,
        width = rect.width,
        height = rect.height,
        canScrollX = void 0,
        canScrollY = void 0,
        scrollWidth = el.scrollWidth,
        scrollHeight = el.scrollHeight,
        elCSS = css(el),
        scrollPosX = el.scrollLeft,
        scrollPosY = el.scrollTop;

    if (el === winScroller) {
      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');
      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');
    } else {
      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');
      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');
    }

    var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);
    var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);

    if (!autoScrolls[layersOut]) {
      for (var i = 0; i <= layersOut; i++) {
        if (!autoScrolls[i]) {
          autoScrolls[i] = {};
        }
      }
    }

    if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {
      autoScrolls[layersOut].el = el;
      autoScrolls[layersOut].vx = vx;
      autoScrolls[layersOut].vy = vy;
      clearInterval(autoScrolls[layersOut].pid);

      if (vx != 0 || vy != 0) {
        scrollThisInstance = true;
        /* jshint loopfunc:true */

        autoScrolls[layersOut].pid = setInterval(function () {
          // emulate drag over during autoscroll (fallback), emulating native DnD behaviour
          if (isFallback && this.layer === 0) {
            Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely

          }

          var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;
          var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;

          if (typeof scrollCustomFn === 'function') {
            if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {
              return;
            }
          }

          scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);
        }.bind({
          layer: layersOut
        }), 24);
      }
    }

    layersOut++;
  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));

  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not
}, 30);

var drop = function drop(_ref) {
  var originalEvent = _ref.originalEvent,
      putSortable = _ref.putSortable,
      dragEl = _ref.dragEl,
      activeSortable = _ref.activeSortable,
      dispatchSortableEvent = _ref.dispatchSortableEvent,
      hideGhostForTarget = _ref.hideGhostForTarget,
      unhideGhostForTarget = _ref.unhideGhostForTarget;
  if (!originalEvent) return;
  var toSortable = putSortable || activeSortable;
  hideGhostForTarget();
  var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;
  var target = document.elementFromPoint(touch.clientX, touch.clientY);
  unhideGhostForTarget();

  if (toSortable && !toSortable.el.contains(target)) {
    dispatchSortableEvent('spill');
    this.onSpill({
      dragEl: dragEl,
      putSortable: putSortable
    });
  }
};

function Revert() {}

Revert.prototype = {
  startIndex: null,
  dragStart: function dragStart(_ref2) {
    var oldDraggableIndex = _ref2.oldDraggableIndex;
    this.startIndex = oldDraggableIndex;
  },
  onSpill: function onSpill(_ref3) {
    var dragEl = _ref3.dragEl,
        putSortable = _ref3.putSortable;
    this.sortable.captureAnimationState();

    if (putSortable) {
      putSortable.captureAnimationState();
    }

    var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);

    if (nextSibling) {
      this.sortable.el.insertBefore(dragEl, nextSibling);
    } else {
      this.sortable.el.appendChild(dragEl);
    }

    this.sortable.animateAll();

    if (putSortable) {
      putSortable.animateAll();
    }
  },
  drop: drop
};

_extends(Revert, {
  pluginName: 'revertOnSpill'
});

function Remove() {}

Remove.prototype = {
  onSpill: function onSpill(_ref4) {
    var dragEl = _ref4.dragEl,
        putSortable = _ref4.putSortable;
    var parentSortable = putSortable || this.sortable;
    parentSortable.captureAnimationState();
    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);
    parentSortable.animateAll();
  },
  drop: drop
};

_extends(Remove, {
  pluginName: 'removeOnSpill'
});

var OnSpill = [Remove, Revert];

var lastSwapEl;

function SwapPlugin() {
  function Swap() {
    this.defaults = {
      swapClass: 'sortable-swap-highlight'
    };
  }

  Swap.prototype = {
    dragStart: function dragStart(_ref) {
      var dragEl = _ref.dragEl;
      lastSwapEl = dragEl;
    },
    dragOverValid: function dragOverValid(_ref2) {
      var completed = _ref2.completed,
          target = _ref2.target,
          onMove = _ref2.onMove,
          activeSortable = _ref2.activeSortable,
          changed = _ref2.changed,
          cancel = _ref2.cancel;
      if (!activeSortable.options.swap) return;
      var el = this.sortable.el,
          options = this.options;

      if (target && target !== el) {
        var prevSwapEl = lastSwapEl;

        if (onMove(target) !== false) {
          toggleClass(target, options.swapClass, true);
          lastSwapEl = target;
        } else {
          lastSwapEl = null;
        }

        if (prevSwapEl && prevSwapEl !== lastSwapEl) {
          toggleClass(prevSwapEl, options.swapClass, false);
        }
      }

      changed();
      completed(true);
      cancel();
    },
    drop: function drop(_ref3) {
      var activeSortable = _ref3.activeSortable,
          putSortable = _ref3.putSortable,
          dragEl = _ref3.dragEl;
      var toSortable = putSortable || this.sortable;
      var options = this.options;
      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);

      if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {
        if (dragEl !== lastSwapEl) {
          toSortable.captureAnimationState();
          if (toSortable !== activeSortable) activeSortable.captureAnimationState();
          swapNodes(dragEl, lastSwapEl);
          toSortable.animateAll();
          if (toSortable !== activeSortable) activeSortable.animateAll();
        }
      }
    },
    nulling: function nulling() {
      lastSwapEl = null;
    }
  };
  return _extends(Swap, {
    pluginName: 'swap',
    eventProperties: function eventProperties() {
      return {
        swapItem: lastSwapEl
      };
    }
  });
}

function swapNodes(n1, n2) {
  var p1 = n1.parentNode,
      p2 = n2.parentNode,
      i1,
      i2;
  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;
  i1 = index(n1);
  i2 = index(n2);

  if (p1.isEqualNode(p2) && i1 < i2) {
    i2++;
  }

  p1.insertBefore(n2, p1.children[i1]);
  p2.insertBefore(n1, p2.children[i2]);
}

var multiDragElements = [],
    multiDragClones = [],
    lastMultiDragSelect,
    // for selection with modifier key down (SHIFT)
multiDragSortable,
    initialFolding = false,
    // Initial multi-drag fold when drag started
folding = false,
    // Folding any other time
dragStarted = false,
    dragEl$1,
    clonesFromRect,
    clonesHidden;

function MultiDragPlugin() {
  function MultiDrag(sortable) {
    // Bind all private methods
    for (var fn in this) {
      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
        this[fn] = this[fn].bind(this);
      }
    }

    if (sortable.options.supportPointer) {
      on(document, 'pointerup', this._deselectMultiDrag);
    } else {
      on(document, 'mouseup', this._deselectMultiDrag);
      on(document, 'touchend', this._deselectMultiDrag);
    }

    on(document, 'keydown', this._checkKeyDown);
    on(document, 'keyup', this._checkKeyUp);
    this.defaults = {
      selectedClass: 'sortable-selected',
      multiDragKey: null,
      setData: function setData(dataTransfer, dragEl) {
        var data = '';

        if (multiDragElements.length && multiDragSortable === sortable) {
          multiDragElements.forEach(function (multiDragElement, i) {
            data += (!i ? '' : ', ') + multiDragElement.textContent;
          });
        } else {
          data = dragEl.textContent;
        }

        dataTransfer.setData('Text', data);
      }
    };
  }

  MultiDrag.prototype = {
    multiDragKeyDown: false,
    isMultiDrag: false,
    delayStartGlobal: function delayStartGlobal(_ref) {
      var dragged = _ref.dragEl;
      dragEl$1 = dragged;
    },
    delayEnded: function delayEnded() {
      this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);
    },
    setupClone: function setupClone(_ref2) {
      var sortable = _ref2.sortable,
          cancel = _ref2.cancel;
      if (!this.isMultiDrag) return;

      for (var i = 0; i < multiDragElements.length; i++) {
        multiDragClones.push(clone(multiDragElements[i]));
        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;
        multiDragClones[i].draggable = false;
        multiDragClones[i].style['will-change'] = '';
        toggleClass(multiDragClones[i], this.options.selectedClass, false);
        multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);
      }

      sortable._hideClone();

      cancel();
    },
    clone: function clone(_ref3) {
      var sortable = _ref3.sortable,
          rootEl = _ref3.rootEl,
          dispatchSortableEvent = _ref3.dispatchSortableEvent,
          cancel = _ref3.cancel;
      if (!this.isMultiDrag) return;

      if (!this.options.removeCloneOnHide) {
        if (multiDragElements.length && multiDragSortable === sortable) {
          insertMultiDragClones(true, rootEl);
          dispatchSortableEvent('clone');
          cancel();
        }
      }
    },
    showClone: function showClone(_ref4) {
      var cloneNowShown = _ref4.cloneNowShown,
          rootEl = _ref4.rootEl,
          cancel = _ref4.cancel;
      if (!this.isMultiDrag) return;
      insertMultiDragClones(false, rootEl);
      multiDragClones.forEach(function (clone) {
        css(clone, 'display', '');
      });
      cloneNowShown();
      clonesHidden = false;
      cancel();
    },
    hideClone: function hideClone(_ref5) {
      var _this = this;

      var sortable = _ref5.sortable,
          cloneNowHidden = _ref5.cloneNowHidden,
          cancel = _ref5.cancel;
      if (!this.isMultiDrag) return;
      multiDragClones.forEach(function (clone) {
        css(clone, 'display', 'none');

        if (_this.options.removeCloneOnHide && clone.parentNode) {
          clone.parentNode.removeChild(clone);
        }
      });
      cloneNowHidden();
      clonesHidden = true;
      cancel();
    },
    dragStartGlobal: function dragStartGlobal(_ref6) {
      var sortable = _ref6.sortable;

      if (!this.isMultiDrag && multiDragSortable) {
        multiDragSortable.multiDrag._deselectMultiDrag();
      }

      multiDragElements.forEach(function (multiDragElement) {
        multiDragElement.sortableIndex = index(multiDragElement);
      }); // Sort multi-drag elements

      multiDragElements = multiDragElements.sort(function (a, b) {
        return a.sortableIndex - b.sortableIndex;
      });
      dragStarted = true;
    },
    dragStarted: function dragStarted(_ref7) {
      var _this2 = this;

      var sortable = _ref7.sortable;
      if (!this.isMultiDrag) return;

      if (this.options.sort) {
        // Capture rects,
        // hide multi drag elements (by positioning them absolute),
        // set multi drag elements rects to dragRect,
        // show multi drag elements,
        // animate to rects,
        // unset rects & remove from DOM
        sortable.captureAnimationState();

        if (this.options.animation) {
          multiDragElements.forEach(function (multiDragElement) {
            if (multiDragElement === dragEl$1) return;
            css(multiDragElement, 'position', 'absolute');
          });
          var dragRect = getRect(dragEl$1, false, true, true);
          multiDragElements.forEach(function (multiDragElement) {
            if (multiDragElement === dragEl$1) return;
            setRect(multiDragElement, dragRect);
          });
          folding = true;
          initialFolding = true;
        }
      }

      sortable.animateAll(function () {
        folding = false;
        initialFolding = false;

        if (_this2.options.animation) {
          multiDragElements.forEach(function (multiDragElement) {
            unsetRect(multiDragElement);
          });
        } // Remove all auxiliary multidrag items from el, if sorting enabled


        if (_this2.options.sort) {
          removeMultiDragElements();
        }
      });
    },
    dragOver: function dragOver(_ref8) {
      var target = _ref8.target,
          completed = _ref8.completed,
          cancel = _ref8.cancel;

      if (folding && ~multiDragElements.indexOf(target)) {
        completed(false);
        cancel();
      }
    },
    revert: function revert(_ref9) {
      var fromSortable = _ref9.fromSortable,
          rootEl = _ref9.rootEl,
          sortable = _ref9.sortable,
          dragRect = _ref9.dragRect;

      if (multiDragElements.length > 1) {
        // Setup unfold animation
        multiDragElements.forEach(function (multiDragElement) {
          sortable.addAnimationState({
            target: multiDragElement,
            rect: folding ? getRect(multiDragElement) : dragRect
          });
          unsetRect(multiDragElement);
          multiDragElement.fromRect = dragRect;
          fromSortable.removeAnimationState(multiDragElement);
        });
        folding = false;
        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);
      }
    },
    dragOverCompleted: function dragOverCompleted(_ref10) {
      var sortable = _ref10.sortable,
          isOwner = _ref10.isOwner,
          insertion = _ref10.insertion,
          activeSortable = _ref10.activeSortable,
          parentEl = _ref10.parentEl,
          putSortable = _ref10.putSortable;
      var options = this.options;

      if (insertion) {
        // Clones must be hidden before folding animation to capture dragRectAbsolute properly
        if (isOwner) {
          activeSortable._hideClone();
        }

        initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location

        if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {
          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible
          var dragRectAbsolute = getRect(dragEl$1, false, true, true);
          multiDragElements.forEach(function (multiDragElement) {
            if (multiDragElement === dragEl$1) return;
            setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted
            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable

            parentEl.appendChild(multiDragElement);
          });
          folding = true;
        } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out


        if (!isOwner) {
          // Only remove if not folding (folding will remove them anyways)
          if (!folding) {
            removeMultiDragElements();
          }

          if (multiDragElements.length > 1) {
            var clonesHiddenBefore = clonesHidden;

            activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden


            if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {
              multiDragClones.forEach(function (clone) {
                activeSortable.addAnimationState({
                  target: clone,
                  rect: clonesFromRect
                });
                clone.fromRect = clonesFromRect;
                clone.thisAnimationDuration = null;
              });
            }
          } else {
            activeSortable._showClone(sortable);
          }
        }
      }
    },
    dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {
      var dragRect = _ref11.dragRect,
          isOwner = _ref11.isOwner,
          activeSortable = _ref11.activeSortable;
      multiDragElements.forEach(function (multiDragElement) {
        multiDragElement.thisAnimationDuration = null;
      });

      if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {
        clonesFromRect = _extends({}, dragRect);
        var dragMatrix = matrix(dragEl$1, true);
        clonesFromRect.top -= dragMatrix.f;
        clonesFromRect.left -= dragMatrix.e;
      }
    },
    dragOverAnimationComplete: function dragOverAnimationComplete() {
      if (folding) {
        folding = false;
        removeMultiDragElements();
      }
    },
    drop: function drop(_ref12) {
      var evt = _ref12.originalEvent,
          rootEl = _ref12.rootEl,
          parentEl = _ref12.parentEl,
          sortable = _ref12.sortable,
          dispatchSortableEvent = _ref12.dispatchSortableEvent,
          oldIndex = _ref12.oldIndex,
          putSortable = _ref12.putSortable;
      var toSortable = putSortable || this.sortable;
      if (!evt) return;
      var options = this.options,
          children = parentEl.children; // Multi-drag selection

      if (!dragStarted) {
        if (options.multiDragKey && !this.multiDragKeyDown) {
          this._deselectMultiDrag();
        }

        toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));

        if (!~multiDragElements.indexOf(dragEl$1)) {
          multiDragElements.push(dragEl$1);
          dispatchEvent({
            sortable: sortable,
            rootEl: rootEl,
            name: 'select',
            targetEl: dragEl$1,
            originalEvt: evt
          }); // Modifier activated, select from last to dragEl

          if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {
            var lastIndex = index(lastMultiDragSelect),
                currentIndex = index(dragEl$1);

            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {
              // Must include lastMultiDragSelect (select it), in case modified selection from no selection
              // (but previous selection existed)
              var n, i;

              if (currentIndex > lastIndex) {
                i = lastIndex;
                n = currentIndex;
              } else {
                i = currentIndex;
                n = lastIndex + 1;
              }

              for (; i < n; i++) {
                if (~multiDragElements.indexOf(children[i])) continue;
                toggleClass(children[i], options.selectedClass, true);
                multiDragElements.push(children[i]);
                dispatchEvent({
                  sortable: sortable,
                  rootEl: rootEl,
                  name: 'select',
                  targetEl: children[i],
                  originalEvt: evt
                });
              }
            }
          } else {
            lastMultiDragSelect = dragEl$1;
          }

          multiDragSortable = toSortable;
        } else {
          multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);
          lastMultiDragSelect = null;
          dispatchEvent({
            sortable: sortable,
            rootEl: rootEl,
            name: 'deselect',
            targetEl: dragEl$1,
            originalEvt: evt
          });
        }
      } // Multi-drag drop


      if (dragStarted && this.isMultiDrag) {
        // Do not "unfold" after around dragEl if reverted
        if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {
          var dragRect = getRect(dragEl$1),
              multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');
          if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;
          toSortable.captureAnimationState();

          if (!initialFolding) {
            if (options.animation) {
              dragEl$1.fromRect = dragRect;
              multiDragElements.forEach(function (multiDragElement) {
                multiDragElement.thisAnimationDuration = null;

                if (multiDragElement !== dragEl$1) {
                  var rect = folding ? getRect(multiDragElement) : dragRect;
                  multiDragElement.fromRect = rect; // Prepare unfold animation

                  toSortable.addAnimationState({
                    target: multiDragElement,
                    rect: rect
                  });
                }
              });
            } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert
            // properly they must all be removed


            removeMultiDragElements();
            multiDragElements.forEach(function (multiDragElement) {
              if (children[multiDragIndex]) {
                parentEl.insertBefore(multiDragElement, children[multiDragIndex]);
              } else {
                parentEl.appendChild(multiDragElement);
              }

              multiDragIndex++;
            }); // If initial folding is done, the elements may have changed position because they are now
            // unfolding around dragEl, even though dragEl may not have his index changed, so update event
            // must be fired here as Sortable will not.

            if (oldIndex === index(dragEl$1)) {
              var update = false;
              multiDragElements.forEach(function (multiDragElement) {
                if (multiDragElement.sortableIndex !== index(multiDragElement)) {
                  update = true;
                  return;
                }
              });

              if (update) {
                dispatchSortableEvent('update');
              }
            }
          } // Must be done after capturing individual rects (scroll bar)


          multiDragElements.forEach(function (multiDragElement) {
            unsetRect(multiDragElement);
          });
          toSortable.animateAll();
        }

        multiDragSortable = toSortable;
      } // Remove clones if necessary


      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
        multiDragClones.forEach(function (clone) {
          clone.parentNode && clone.parentNode.removeChild(clone);
        });
      }
    },
    nullingGlobal: function nullingGlobal() {
      this.isMultiDrag = dragStarted = false;
      multiDragClones.length = 0;
    },
    destroyGlobal: function destroyGlobal() {
      this._deselectMultiDrag();

      off(document, 'pointerup', this._deselectMultiDrag);
      off(document, 'mouseup', this._deselectMultiDrag);
      off(document, 'touchend', this._deselectMultiDrag);
      off(document, 'keydown', this._checkKeyDown);
      off(document, 'keyup', this._checkKeyUp);
    },
    _deselectMultiDrag: function _deselectMultiDrag(evt) {
      if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable

      if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable

      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click

      if (evt && evt.button !== 0) return;

      while (multiDragElements.length) {
        var el = multiDragElements[0];
        toggleClass(el, this.options.selectedClass, false);
        multiDragElements.shift();
        dispatchEvent({
          sortable: this.sortable,
          rootEl: this.sortable.el,
          name: 'deselect',
          targetEl: el,
          originalEvt: evt
        });
      }
    },
    _checkKeyDown: function _checkKeyDown(evt) {
      if (evt.key === this.options.multiDragKey) {
        this.multiDragKeyDown = true;
      }
    },
    _checkKeyUp: function _checkKeyUp(evt) {
      if (evt.key === this.options.multiDragKey) {
        this.multiDragKeyDown = false;
      }
    }
  };
  return _extends(MultiDrag, {
    // Static methods & properties
    pluginName: 'multiDrag',
    utils: {
      /**
       * Selects the provided multi-drag item
       * @param  {HTMLElement} el    The element to be selected
       */
      select: function select(el) {
        var sortable = el.parentNode[expando];
        if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;

        if (multiDragSortable && multiDragSortable !== sortable) {
          multiDragSortable.multiDrag._deselectMultiDrag();

          multiDragSortable = sortable;
        }

        toggleClass(el, sortable.options.selectedClass, true);
        multiDragElements.push(el);
      },

      /**
       * Deselects the provided multi-drag item
       * @param  {HTMLElement} el    The element to be deselected
       */
      deselect: function deselect(el) {
        var sortable = el.parentNode[expando],
            index = multiDragElements.indexOf(el);
        if (!sortable || !sortable.options.multiDrag || !~index) return;
        toggleClass(el, sortable.options.selectedClass, false);
        multiDragElements.splice(index, 1);
      }
    },
    eventProperties: function eventProperties() {
      var _this3 = this;

      var oldIndicies = [],
          newIndicies = [];
      multiDragElements.forEach(function (multiDragElement) {
        oldIndicies.push({
          multiDragElement: multiDragElement,
          index: multiDragElement.sortableIndex
        }); // multiDragElements will already be sorted if folding

        var newIndex;

        if (folding && multiDragElement !== dragEl$1) {
          newIndex = -1;
        } else if (folding) {
          newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');
        } else {
          newIndex = index(multiDragElement);
        }

        newIndicies.push({
          multiDragElement: multiDragElement,
          index: newIndex
        });
      });
      return {
        items: _toConsumableArray(multiDragElements),
        clones: [].concat(multiDragClones),
        oldIndicies: oldIndicies,
        newIndicies: newIndicies
      };
    },
    optionListeners: {
      multiDragKey: function multiDragKey(key) {
        key = key.toLowerCase();

        if (key === 'ctrl') {
          key = 'Control';
        } else if (key.length > 1) {
          key = key.charAt(0).toUpperCase() + key.substr(1);
        }

        return key;
      }
    }
  });
}

function insertMultiDragElements(clonesInserted, rootEl) {
  multiDragElements.forEach(function (multiDragElement, i) {
    var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];

    if (target) {
      rootEl.insertBefore(multiDragElement, target);
    } else {
      rootEl.appendChild(multiDragElement);
    }
  });
}
/**
 * Insert multi-drag clones
 * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted
 * @param  {HTMLElement} rootEl
 */


function insertMultiDragClones(elementsInserted, rootEl) {
  multiDragClones.forEach(function (clone, i) {
    var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];

    if (target) {
      rootEl.insertBefore(clone, target);
    } else {
      rootEl.appendChild(clone);
    }
  });
}

function removeMultiDragElements() {
  multiDragElements.forEach(function (multiDragElement) {
    if (multiDragElement === dragEl$1) return;
    multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);
  });
}

export default Sortable;
export { AutoScrollPlugin as AutoScroll, MultiDragPlugin as MultiDrag, OnSpill, Sortable, SwapPlugin as Swap };
/**!
 * Sortable 1.10.2
 * @author	RubaXa   <trash@rubaxa.org>
 * @author	owenm    <owen23355@gmail.com>
 * @license MIT
 */
function _typeof(obj) {
  if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
    _typeof = function (obj) {
      return typeof obj;
    };
  } else {
    _typeof = function (obj) {
      return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
    };
  }

  return _typeof(obj);
}

function _defineProperty(obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
}

function _extends() {
  _extends = Object.assign || function (target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i];

      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      }
    }

    return target;
  };

  return _extends.apply(this, arguments);
}

function _objectSpread(target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i] != null ? arguments[i] : {};
    var ownKeys = Object.keys(source);

    if (typeof Object.getOwnPropertySymbols === 'function') {
      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
        return Object.getOwnPropertyDescriptor(source, sym).enumerable;
      }));
    }

    ownKeys.forEach(function (key) {
      _defineProperty(target, key, source[key]);
    });
  }

  return target;
}

function _objectWithoutPropertiesLoose(source, excluded) {
  if (source == null) return {};
  var target = {};
  var sourceKeys = Object.keys(source);
  var key, i;

  for (i = 0; i < sourceKeys.length; i++) {
    key = sourceKeys[i];
    if (excluded.indexOf(key) >= 0) continue;
    target[key] = source[key];
  }

  return target;
}

function _objectWithoutProperties(source, excluded) {
  if (source == null) return {};

  var target = _objectWithoutPropertiesLoose(source, excluded);

  var key, i;

  if (Object.getOwnPropertySymbols) {
    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);

    for (i = 0; i < sourceSymbolKeys.length; i++) {
      key = sourceSymbolKeys[i];
      if (excluded.indexOf(key) >= 0) continue;
      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
      target[key] = source[key];
    }
  }

  return target;
}

function _toConsumableArray(arr) {
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
}

function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) {
    for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];

    return arr2;
  }
}

function _iterableToArray(iter) {
  if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
}

function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance");
}

var version = "1.10.2";

function userAgent(pattern) {
  if (typeof window !== 'undefined' && window.navigator) {
    return !!
    /*@__PURE__*/
    navigator.userAgent.match(pattern);
  }
}

var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i);
var Edge = userAgent(/Edge/i);
var FireFox = userAgent(/firefox/i);
var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);
var IOS = userAgent(/iP(ad|od|hone)/i);
var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);

var captureMode = {
  capture: false,
  passive: false
};

function on(el, event, fn) {
  el.addEventListener(event, fn, !IE11OrLess && captureMode);
}

function off(el, event, fn) {
  el.removeEventListener(event, fn, !IE11OrLess && captureMode);
}

function matches(
/**HTMLElement*/
el,
/**String*/
selector) {
  if (!selector) return;
  selector[0] === '>' && (selector = selector.substring(1));

  if (el) {
    try {
      if (el.matches) {
        return el.matches(selector);
      } else if (el.msMatchesSelector) {
        return el.msMatchesSelector(selector);
      } else if (el.webkitMatchesSelector) {
        return el.webkitMatchesSelector(selector);
      }
    } catch (_) {
      return false;
    }
  }

  return false;
}

function getParentOrHost(el) {
  return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;
}

function closest(
/**HTMLElement*/
el,
/**String*/
selector,
/**HTMLElement*/
ctx, includeCTX) {
  if (el) {
    ctx = ctx || document;

    do {
      if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {
        return el;
      }

      if (el === ctx) break;
      /* jshint boss:true */
    } while (el = getParentOrHost(el));
  }

  return null;
}

var R_SPACE = /\s+/g;

function toggleClass(el, name, state) {
  if (el && name) {
    if (el.classList) {
      el.classList[state ? 'add' : 'remove'](name);
    } else {
      var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');
      el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');
    }
  }
}

function css(el, prop, val) {
  var style = el && el.style;

  if (style) {
    if (val === void 0) {
      if (document.defaultView && document.defaultView.getComputedStyle) {
        val = document.defaultView.getComputedStyle(el, '');
      } else if (el.currentStyle) {
        val = el.currentStyle;
      }

      return prop === void 0 ? val : val[prop];
    } else {
      if (!(prop in style) && prop.indexOf('webkit') === -1) {
        prop = '-webkit-' + prop;
      }

      style[prop] = val + (typeof val === 'string' ? '' : 'px');
    }
  }
}

function matrix(el, selfOnly) {
  var appliedTransforms = '';

  if (typeof el === 'string') {
    appliedTransforms = el;
  } else {
    do {
      var transform = css(el, 'transform');

      if (transform && transform !== 'none') {
        appliedTransforms = transform + ' ' + appliedTransforms;
      }
      /* jshint boss:true */

    } while (!selfOnly && (el = el.parentNode));
  }

  var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;
  /*jshint -W056 */

  return matrixFn && new matrixFn(appliedTransforms);
}

function find(ctx, tagName, iterator) {
  if (ctx) {
    var list = ctx.getElementsByTagName(tagName),
        i = 0,
        n = list.length;

    if (iterator) {
      for (; i < n; i++) {
        iterator(list[i], i);
      }
    }

    return list;
  }

  return [];
}

function getWindowScrollingElement() {
  var scrollingElement = document.scrollingElement;

  if (scrollingElement) {
    return scrollingElement;
  } else {
    return document.documentElement;
  }
}
/**
 * Returns the "bounding client rect" of given element
 * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted
 * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container
 * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr
 * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone
 * @param  {[HTMLElement]} container              The parent the element will be placed in
 * @return {Object}                               The boundingClientRect of el, with specified adjustments
 */


function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {
  if (!el.getBoundingClientRect && el !== window) return;
  var elRect, top, left, bottom, right, height, width;

  if (el !== window && el !== getWindowScrollingElement()) {
    elRect = el.getBoundingClientRect();
    top = elRect.top;
    left = elRect.left;
    bottom = elRect.bottom;
    right = elRect.right;
    height = elRect.height;
    width = elRect.width;
  } else {
    top = 0;
    left = 0;
    bottom = window.innerHeight;
    right = window.innerWidth;
    height = window.innerHeight;
    width = window.innerWidth;
  }

  if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {
    // Adjust for translate()
    container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)
    // Not needed on <= IE11

    if (!IE11OrLess) {
      do {
        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {
          var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container

          top -= containerRect.top + parseInt(css(container, 'border-top-width'));
          left -= containerRect.left + parseInt(css(container, 'border-left-width'));
          bottom = top + elRect.height;
          right = left + elRect.width;
          break;
        }
        /* jshint boss:true */

      } while (container = container.parentNode);
    }
  }

  if (undoScale && el !== window) {
    // Adjust for scale()
    var elMatrix = matrix(container || el),
        scaleX = elMatrix && elMatrix.a,
        scaleY = elMatrix && elMatrix.d;

    if (elMatrix) {
      top /= scaleY;
      left /= scaleX;
      width /= scaleX;
      height /= scaleY;
      bottom = top + height;
      right = left + width;
    }
  }

  return {
    top: top,
    left: left,
    bottom: bottom,
    right: right,
    width: width,
    height: height
  };
}
/**
 * Checks if a side of an element is scrolled past a side of its parents
 * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question
 * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')
 * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')
 * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element
 */


function isScrolledPast(el, elSide, parentSide) {
  var parent = getParentAutoScrollElement(el, true),
      elSideVal = getRect(el)[elSide];
  /* jshint boss:true */

  while (parent) {
    var parentSideVal = getRect(parent)[parentSide],
        visible = void 0;

    if (parentSide === 'top' || parentSide === 'left') {
      visible = elSideVal >= parentSideVal;
    } else {
      visible = elSideVal <= parentSideVal;
    }

    if (!visible) return parent;
    if (parent === getWindowScrollingElement()) break;
    parent = getParentAutoScrollElement(parent, false);
  }

  return false;
}
/**
 * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)
 * and non-draggable elements
 * @param  {HTMLElement} el       The parent element
 * @param  {Number} childNum      The index of the child
 * @param  {Object} options       Parent Sortable's options
 * @return {HTMLElement}          The child at index childNum, or null if not found
 */


function getChild(el, childNum, options) {
  var currentChild = 0,
      i = 0,
      children = el.children;

  while (i < children.length) {
    if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {
      if (currentChild === childNum) {
        return children[i];
      }

      currentChild++;
    }

    i++;
  }

  return null;
}
/**
 * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)
 * @param  {HTMLElement} el       Parent element
 * @param  {selector} selector    Any other elements that should be ignored
 * @return {HTMLElement}          The last child, ignoring ghostEl
 */


function lastChild(el, selector) {
  var last = el.lastElementChild;

  while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {
    last = last.previousElementSibling;
  }

  return last || null;
}
/**
 * Returns the index of an element within its parent for a selected set of
 * elements
 * @param  {HTMLElement} el
 * @param  {selector} selector
 * @return {number}
 */


function index(el, selector) {
  var index = 0;

  if (!el || !el.parentNode) {
    return -1;
  }
  /* jshint boss:true */


  while (el = el.previousElementSibling) {
    if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {
      index++;
    }
  }

  return index;
}
/**
 * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.
 * The value is returned in real pixels.
 * @param  {HTMLElement} el
 * @return {Array}             Offsets in the format of [left, top]
 */


function getRelativeScrollOffset(el) {
  var offsetLeft = 0,
      offsetTop = 0,
      winScroller = getWindowScrollingElement();

  if (el) {
    do {
      var elMatrix = matrix(el),
          scaleX = elMatrix.a,
          scaleY = elMatrix.d;
      offsetLeft += el.scrollLeft * scaleX;
      offsetTop += el.scrollTop * scaleY;
    } while (el !== winScroller && (el = el.parentNode));
  }

  return [offsetLeft, offsetTop];
}
/**
 * Returns the index of the object within the given array
 * @param  {Array} arr   Array that may or may not hold the object
 * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find
 * @return {Number}      The index of the object in the array, or -1
 */


function indexOfObject(arr, obj) {
  for (var i in arr) {
    if (!arr.hasOwnProperty(i)) continue;

    for (var key in obj) {
      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);
    }
  }

  return -1;
}

function getParentAutoScrollElement(el, includeSelf) {
  // skip to window
  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();
  var elem = el;
  var gotSelf = false;

  do {
    // we don't need to get elem css if it isn't even overflowing in the first place (performance)
    if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {
      var elemCSS = css(elem);

      if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {
        if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();
        if (gotSelf || includeSelf) return elem;
        gotSelf = true;
      }
    }
    /* jshint boss:true */

  } while (elem = elem.parentNode);

  return getWindowScrollingElement();
}

function extend(dst, src) {
  if (dst && src) {
    for (var key in src) {
      if (src.hasOwnProperty(key)) {
        dst[key] = src[key];
      }
    }
  }

  return dst;
}

function isRectEqual(rect1, rect2) {
  return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);
}

var _throttleTimeout;

function throttle(callback, ms) {
  return function () {
    if (!_throttleTimeout) {
      var args = arguments,
          _this = this;

      if (args.length === 1) {
        callback.call(_this, args[0]);
      } else {
        callback.apply(_this, args);
      }

      _throttleTimeout = setTimeout(function () {
        _throttleTimeout = void 0;
      }, ms);
    }
  };
}

function cancelThrottle() {
  clearTimeout(_throttleTimeout);
  _throttleTimeout = void 0;
}

function scrollBy(el, x, y) {
  el.scrollLeft += x;
  el.scrollTop += y;
}

function clone(el) {
  var Polymer = window.Polymer;
  var $ = window.jQuery || window.Zepto;

  if (Polymer && Polymer.dom) {
    return Polymer.dom(el).cloneNode(true);
  } else if ($) {
    return $(el).clone(true)[0];
  } else {
    return el.cloneNode(true);
  }
}

function setRect(el, rect) {
  css(el, 'position', 'absolute');
  css(el, 'top', rect.top);
  css(el, 'left', rect.left);
  css(el, 'width', rect.width);
  css(el, 'height', rect.height);
}

function unsetRect(el) {
  css(el, 'position', '');
  css(el, 'top', '');
  css(el, 'left', '');
  css(el, 'width', '');
  css(el, 'height', '');
}

var expando = 'Sortable' + new Date().getTime();

function AnimationStateManager() {
  var animationStates = [],
      animationCallbackId;
  return {
    captureAnimationState: function captureAnimationState() {
      animationStates = [];
      if (!this.options.animation) return;
      var children = [].slice.call(this.el.children);
      children.forEach(function (child) {
        if (css(child, 'display') === 'none' || child === Sortable.ghost) return;
        animationStates.push({
          target: child,
          rect: getRect(child)
        });

        var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation


        if (child.thisAnimationDuration) {
          var childMatrix = matrix(child, true);

          if (childMatrix) {
            fromRect.top -= childMatrix.f;
            fromRect.left -= childMatrix.e;
          }
        }

        child.fromRect = fromRect;
      });
    },
    addAnimationState: function addAnimationState(state) {
      animationStates.push(state);
    },
    removeAnimationState: function removeAnimationState(target) {
      animationStates.splice(indexOfObject(animationStates, {
        target: target
      }), 1);
    },
    animateAll: function animateAll(callback) {
      var _this = this;

      if (!this.options.animation) {
        clearTimeout(animationCallbackId);
        if (typeof callback === 'function') callback();
        return;
      }

      var animating = false,
          animationTime = 0;
      animationStates.forEach(function (state) {
        var time = 0,
            target = state.target,
            fromRect = target.fromRect,
            toRect = getRect(target),
            prevFromRect = target.prevFromRect,
            prevToRect = target.prevToRect,
            animatingRect = state.rect,
            targetMatrix = matrix(target, true);

        if (targetMatrix) {
          // Compensate for current animation
          toRect.top -= targetMatrix.f;
          toRect.left -= targetMatrix.e;
        }

        target.toRect = toRect;

        if (target.thisAnimationDuration) {
          // Could also check if animatingRect is between fromRect and toRect
          if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect
          (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {
            // If returning to same place as started from animation and on same axis
            time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);
          }
        } // if fromRect != toRect: animate


        if (!isRectEqual(toRect, fromRect)) {
          target.prevFromRect = fromRect;
          target.prevToRect = toRect;

          if (!time) {
            time = _this.options.animation;
          }

          _this.animate(target, animatingRect, toRect, time);
        }

        if (time) {
          animating = true;
          animationTime = Math.max(animationTime, time);
          clearTimeout(target.animationResetTimer);
          target.animationResetTimer = setTimeout(function () {
            target.animationTime = 0;
            target.prevFromRect = null;
            target.fromRect = null;
            target.prevToRect = null;
            target.thisAnimationDuration = null;
          }, time);
          target.thisAnimationDuration = time;
        }
      });
      clearTimeout(animationCallbackId);

      if (!animating) {
        if (typeof callback === 'function') callback();
      } else {
        animationCallbackId = setTimeout(function () {
          if (typeof callback === 'function') callback();
        }, animationTime);
      }

      animationStates = [];
    },
    animate: function animate(target, currentRect, toRect, duration) {
      if (duration) {
        css(target, 'transition', '');
        css(target, 'transform', '');
        var elMatrix = matrix(this.el),
            scaleX = elMatrix && elMatrix.a,
            scaleY = elMatrix && elMatrix.d,
            translateX = (currentRect.left - toRect.left) / (scaleX || 1),
            translateY = (currentRect.top - toRect.top) / (scaleY || 1);
        target.animatingX = !!translateX;
        target.animatingY = !!translateY;
        css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');
        repaint(target); // repaint

        css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));
        css(target, 'transform', 'translate3d(0,0,0)');
        typeof target.animated === 'number' && clearTimeout(target.animated);
        target.animated = setTimeout(function () {
          css(target, 'transition', '');
          css(target, 'transform', '');
          target.animated = false;
          target.animatingX = false;
          target.animatingY = false;
        }, duration);
      }
    }
  };
}

function repaint(target) {
  return target.offsetWidth;
}

function calculateRealTime(animatingRect, fromRect, toRect, options) {
  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;
}

var plugins = [];
var defaults = {
  initializeByDefault: true
};
var PluginManager = {
  mount: function mount(plugin) {
    // Set default static properties
    for (var option in defaults) {
      if (defaults.hasOwnProperty(option) && !(option in plugin)) {
        plugin[option] = defaults[option];
      }
    }

    plugins.push(plugin);
  },
  pluginEvent: function pluginEvent(eventName, sortable, evt) {
    var _this = this;

    this.eventCanceled = false;

    evt.cancel = function () {
      _this.eventCanceled = true;
    };

    var eventNameGlobal = eventName + 'Global';
    plugins.forEach(function (plugin) {
      if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable

      if (sortable[plugin.pluginName][eventNameGlobal]) {
        sortable[plugin.pluginName][eventNameGlobal](_objectSpread({
          sortable: sortable
        }, evt));
      } // Only fire plugin event if plugin is enabled in this sortable,
      // and plugin has event defined


      if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {
        sortable[plugin.pluginName][eventName](_objectSpread({
          sortable: sortable
        }, evt));
      }
    });
  },
  initializePlugins: function initializePlugins(sortable, el, defaults, options) {
    plugins.forEach(function (plugin) {
      var pluginName = plugin.pluginName;
      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;
      var initialized = new plugin(sortable, el, sortable.options);
      initialized.sortable = sortable;
      initialized.options = sortable.options;
      sortable[pluginName] = initialized; // Add default options from plugin

      _extends(defaults, initialized.defaults);
    });

    for (var option in sortable.options) {
      if (!sortable.options.hasOwnProperty(option)) continue;
      var modified = this.modifyOption(sortable, option, sortable.options[option]);

      if (typeof modified !== 'undefined') {
        sortable.options[option] = modified;
      }
    }
  },
  getEventProperties: function getEventProperties(name, sortable) {
    var eventProperties = {};
    plugins.forEach(function (plugin) {
      if (typeof plugin.eventProperties !== 'function') return;

      _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));
    });
    return eventProperties;
  },
  modifyOption: function modifyOption(sortable, name, value) {
    var modifiedValue;
    plugins.forEach(function (plugin) {
      // Plugin must exist on the Sortable
      if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin

      if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {
        modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);
      }
    });
    return modifiedValue;
  }
};

function dispatchEvent(_ref) {
  var sortable = _ref.sortable,
      rootEl = _ref.rootEl,
      name = _ref.name,
      targetEl = _ref.targetEl,
      cloneEl = _ref.cloneEl,
      toEl = _ref.toEl,
      fromEl = _ref.fromEl,
      oldIndex = _ref.oldIndex,
      newIndex = _ref.newIndex,
      oldDraggableIndex = _ref.oldDraggableIndex,
      newDraggableIndex = _ref.newDraggableIndex,
      originalEvent = _ref.originalEvent,
      putSortable = _ref.putSortable,
      extraEventProperties = _ref.extraEventProperties;
  sortable = sortable || rootEl && rootEl[expando];
  if (!sortable) return;
  var evt,
      options = sortable.options,
      onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature

  if (window.CustomEvent && !IE11OrLess && !Edge) {
    evt = new CustomEvent(name, {
      bubbles: true,
      cancelable: true
    });
  } else {
    evt = document.createEvent('Event');
    evt.initEvent(name, true, true);
  }

  evt.to = toEl || rootEl;
  evt.from = fromEl || rootEl;
  evt.item = targetEl || rootEl;
  evt.clone = cloneEl;
  evt.oldIndex = oldIndex;
  evt.newIndex = newIndex;
  evt.oldDraggableIndex = oldDraggableIndex;
  evt.newDraggableIndex = newDraggableIndex;
  evt.originalEvent = originalEvent;
  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;

  var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));

  for (var option in allEventProperties) {
    evt[option] = allEventProperties[option];
  }

  if (rootEl) {
    rootEl.dispatchEvent(evt);
  }

  if (options[onName]) {
    options[onName].call(sortable, evt);
  }
}

var pluginEvent = function pluginEvent(eventName, sortable) {
  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
      originalEvent = _ref.evt,
      data = _objectWithoutProperties(_ref, ["evt"]);

  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({
    dragEl: dragEl,
    parentEl: parentEl,
    ghostEl: ghostEl,
    rootEl: rootEl,
    nextEl: nextEl,
    lastDownEl: lastDownEl,
    cloneEl: cloneEl,
    cloneHidden: cloneHidden,
    dragStarted: moved,
    putSortable: putSortable,
    activeSortable: Sortable.active,
    originalEvent: originalEvent,
    oldIndex: oldIndex,
    oldDraggableIndex: oldDraggableIndex,
    newIndex: newIndex,
    newDraggableIndex: newDraggableIndex,
    hideGhostForTarget: _hideGhostForTarget,
    unhideGhostForTarget: _unhideGhostForTarget,
    cloneNowHidden: function cloneNowHidden() {
      cloneHidden = true;
    },
    cloneNowShown: function cloneNowShown() {
      cloneHidden = false;
    },
    dispatchSortableEvent: function dispatchSortableEvent(name) {
      _dispatchEvent({
        sortable: sortable,
        name: name,
        originalEvent: originalEvent
      });
    }
  }, data));
};

function _dispatchEvent(info) {
  dispatchEvent(_objectSpread({
    putSortable: putSortable,
    cloneEl: cloneEl,
    targetEl: dragEl,
    rootEl: rootEl,
    oldIndex: oldIndex,
    oldDraggableIndex: oldDraggableIndex,
    newIndex: newIndex,
    newDraggableIndex: newDraggableIndex
  }, info));
}

var dragEl,
    parentEl,
    ghostEl,
    rootEl,
    nextEl,
    lastDownEl,
    cloneEl,
    cloneHidden,
    oldIndex,
    newIndex,
    oldDraggableIndex,
    newDraggableIndex,
    activeGroup,
    putSortable,
    awaitingDragStarted = false,
    ignoreNextClick = false,
    sortables = [],
    tapEvt,
    touchEvt,
    lastDx,
    lastDy,
    tapDistanceLeft,
    tapDistanceTop,
    moved,
    lastTarget,
    lastDirection,
    pastFirstInvertThresh = false,
    isCircumstantialInvert = false,
    targetMoveDistance,
    // For positioning ghost absolutely
ghostRelativeParent,
    ghostRelativeParentInitialScroll = [],
    // (left, top)
_silent = false,
    savedInputChecked = [];
/** @const */

var documentExists = typeof document !== 'undefined',
    PositionGhostAbsolutely = IOS,
    CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',
    // This will not pass for IE9, because IE9 DnD only works on anchors
supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),
    supportCssPointerEvents = function () {
  if (!documentExists) return; // false when <= IE11

  if (IE11OrLess) {
    return false;
  }

  var el = document.createElement('x');
  el.style.cssText = 'pointer-events:auto';
  return el.style.pointerEvents === 'auto';
}(),
    _detectDirection = function _detectDirection(el, options) {
  var elCSS = css(el),
      elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),
      child1 = getChild(el, 0, options),
      child2 = getChild(el, 1, options),
      firstChildCSS = child1 && css(child1),
      secondChildCSS = child2 && css(child2),
      firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,
      secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;

  if (elCSS.display === 'flex') {
    return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';
  }

  if (elCSS.display === 'grid') {
    return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';
  }

  if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') {
    var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right';
    return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';
  }

  return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';
},
    _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {
  var dragElS1Opp = vertical ? dragRect.left : dragRect.top,
      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,
      dragElOppLength = vertical ? dragRect.width : dragRect.height,
      targetS1Opp = vertical ? targetRect.left : targetRect.top,
      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,
      targetOppLength = vertical ? targetRect.width : targetRect.height;
  return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;
},

/**
 * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.
 * @param  {Number} x      X position
 * @param  {Number} y      Y position
 * @return {HTMLElement}   Element of the first found nearest Sortable
 */
_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {
  var ret;
  sortables.some(function (sortable) {
    if (lastChild(sortable)) return;
    var rect = getRect(sortable),
        threshold = sortable[expando].options.emptyInsertThreshold,
        insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,
        insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;

    if (threshold && insideHorizontally && insideVertically) {
      return ret = sortable;
    }
  });
  return ret;
},
    _prepareGroup = function _prepareGroup(options) {
  function toFn(value, pull) {
    return function (to, from, dragEl, evt) {
      var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;

      if (value == null && (pull || sameGroup)) {
        // Default pull value
        // Default pull and put value if same group
        return true;
      } else if (value == null || value === false) {
        return false;
      } else if (pull && value === 'clone') {
        return value;
      } else if (typeof value === 'function') {
        return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);
      } else {
        var otherGroup = (pull ? to : from).options.group.name;
        return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;
      }
    };
  }

  var group = {};
  var originalGroup = options.group;

  if (!originalGroup || _typeof(originalGroup) != 'object') {
    originalGroup = {
      name: originalGroup
    };
  }

  group.name = originalGroup.name;
  group.checkPull = toFn(originalGroup.pull, true);
  group.checkPut = toFn(originalGroup.put);
  group.revertClone = originalGroup.revertClone;
  options.group = group;
},
    _hideGhostForTarget = function _hideGhostForTarget() {
  if (!supportCssPointerEvents && ghostEl) {
    css(ghostEl, 'display', 'none');
  }
},
    _unhideGhostForTarget = function _unhideGhostForTarget() {
  if (!supportCssPointerEvents && ghostEl) {
    css(ghostEl, 'display', '');
  }
}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position


if (documentExists) {
  document.addEventListener('click', function (evt) {
    if (ignoreNextClick) {
      evt.preventDefault();
      evt.stopPropagation && evt.stopPropagation();
      evt.stopImmediatePropagation && evt.stopImmediatePropagation();
      ignoreNextClick = false;
      return false;
    }
  }, true);
}

var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {
  if (dragEl) {
    evt = evt.touches ? evt.touches[0] : evt;

    var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);

    if (nearest) {
      // Create imitation event
      var event = {};

      for (var i in evt) {
        if (evt.hasOwnProperty(i)) {
          event[i] = evt[i];
        }
      }

      event.target = event.rootEl = nearest;
      event.preventDefault = void 0;
      event.stopPropagation = void 0;

      nearest[expando]._onDragOver(event);
    }
  }
};

var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {
  if (dragEl) {
    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
  }
};
/**
 * @class  Sortable
 * @param  {HTMLElement}  el
 * @param  {Object}       [options]
 */


function Sortable(el, options) {
  if (!(el && el.nodeType && el.nodeType === 1)) {
    throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el));
  }

  this.el = el; // root element

  this.options = options = _extends({}, options); // Export instance

  el[expando] = this;
  var defaults = {
    group: null,
    sort: true,
    disabled: false,
    store: null,
    handle: null,
    draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',
    swapThreshold: 1,
    // percentage; 0 <= x <= 1
    invertSwap: false,
    // invert always
    invertedSwapThreshold: null,
    // will be set to same as swapThreshold if default
    removeCloneOnHide: true,
    direction: function direction() {
      return _detectDirection(el, this.options);
    },
    ghostClass: 'sortable-ghost',
    chosenClass: 'sortable-chosen',
    dragClass: 'sortable-drag',
    ignore: 'a, img',
    filter: null,
    preventOnFilter: true,
    animation: 0,
    easing: null,
    setData: function setData(dataTransfer, dragEl) {
      dataTransfer.setData('Text', dragEl.textContent);
    },
    dropBubble: false,
    dragoverBubble: false,
    dataIdAttr: 'data-id',
    delay: 0,
    delayOnTouchOnly: false,
    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,
    forceFallback: false,
    fallbackClass: 'sortable-fallback',
    fallbackOnBody: false,
    fallbackTolerance: 0,
    fallbackOffset: {
      x: 0,
      y: 0
    },
    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window,
    emptyInsertThreshold: 5
  };
  PluginManager.initializePlugins(this, el, defaults); // Set default options

  for (var name in defaults) {
    !(name in options) && (options[name] = defaults[name]);
  }

  _prepareGroup(options); // Bind all private methods


  for (var fn in this) {
    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
      this[fn] = this[fn].bind(this);
    }
  } // Setup drag mode


  this.nativeDraggable = options.forceFallback ? false : supportDraggable;

  if (this.nativeDraggable) {
    // Touch start threshold cannot be greater than the native dragstart threshold
    this.options.touchStartThreshold = 1;
  } // Bind events


  if (options.supportPointer) {
    on(el, 'pointerdown', this._onTapStart);
  } else {
    on(el, 'mousedown', this._onTapStart);
    on(el, 'touchstart', this._onTapStart);
  }

  if (this.nativeDraggable) {
    on(el, 'dragover', this);
    on(el, 'dragenter', this);
  }

  sortables.push(this.el); // Restore sorting

  options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager

  _extends(this, AnimationStateManager());
}

Sortable.prototype =
/** @lends Sortable.prototype */
{
  constructor: Sortable,
  _isOutsideThisEl: function _isOutsideThisEl(target) {
    if (!this.el.contains(target) && target !== this.el) {
      lastTarget = null;
    }
  },
  _getDirection: function _getDirection(evt, target) {
    return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;
  },
  _onTapStart: function _onTapStart(
  /** Event|TouchEvent */
  evt) {
    if (!evt.cancelable) return;

    var _this = this,
        el = this.el,
        options = this.options,
        preventOnFilter = options.preventOnFilter,
        type = evt.type,
        touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,
        target = (touch || evt).target,
        originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,
        filter = options.filter;

    _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.


    if (dragEl) {
      return;
    }

    if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {
      return; // only left button and enabled
    } // cancel dnd if original target is content editable


    if (originalTarget.isContentEditable) {
      return;
    }

    target = closest(target, options.draggable, el, false);

    if (target && target.animated) {
      return;
    }

    if (lastDownEl === target) {
      // Ignoring duplicate `down`
      return;
    } // Get the index of the dragged element within its parent


    oldIndex = index(target);
    oldDraggableIndex = index(target, options.draggable); // Check filter

    if (typeof filter === 'function') {
      if (filter.call(this, evt, target, this)) {
        _dispatchEvent({
          sortable: _this,
          rootEl: originalTarget,
          name: 'filter',
          targetEl: target,
          toEl: el,
          fromEl: el
        });

        pluginEvent('filter', _this, {
          evt: evt
        });
        preventOnFilter && evt.cancelable && evt.preventDefault();
        return; // cancel dnd
      }
    } else if (filter) {
      filter = filter.split(',').some(function (criteria) {
        criteria = closest(originalTarget, criteria.trim(), el, false);

        if (criteria) {
          _dispatchEvent({
            sortable: _this,
            rootEl: criteria,
            name: 'filter',
            targetEl: target,
            fromEl: el,
            toEl: el
          });

          pluginEvent('filter', _this, {
            evt: evt
          });
          return true;
        }
      });

      if (filter) {
        preventOnFilter && evt.cancelable && evt.preventDefault();
        return; // cancel dnd
      }
    }

    if (options.handle && !closest(originalTarget, options.handle, el, false)) {
      return;
    } // Prepare `dragstart`


    this._prepareDragStart(evt, touch, target);
  },
  _prepareDragStart: function _prepareDragStart(
  /** Event */
  evt,
  /** Touch */
  touch,
  /** HTMLElement */
  target) {
    var _this = this,
        el = _this.el,
        options = _this.options,
        ownerDocument = el.ownerDocument,
        dragStartFn;

    if (target && !dragEl && target.parentNode === el) {
      var dragRect = getRect(target);
      rootEl = el;
      dragEl = target;
      parentEl = dragEl.parentNode;
      nextEl = dragEl.nextSibling;
      lastDownEl = target;
      activeGroup = options.group;
      Sortable.dragged = dragEl;
      tapEvt = {
        target: dragEl,
        clientX: (touch || evt).clientX,
        clientY: (touch || evt).clientY
      };
      tapDistanceLeft = tapEvt.clientX - dragRect.left;
      tapDistanceTop = tapEvt.clientY - dragRect.top;
      this._lastX = (touch || evt).clientX;
      this._lastY = (touch || evt).clientY;
      dragEl.style['will-change'] = 'all';

      dragStartFn = function dragStartFn() {
        pluginEvent('delayEnded', _this, {
          evt: evt
        });

        if (Sortable.eventCanceled) {
          _this._onDrop();

          return;
        } // Delayed drag has been triggered
        // we can re-enable the events: touchmove/mousemove


        _this._disableDelayedDragEvents();

        if (!FireFox && _this.nativeDraggable) {
          dragEl.draggable = true;
        } // Bind the events: dragstart/dragend


        _this._triggerDragStart(evt, touch); // Drag start event


        _dispatchEvent({
          sortable: _this,
          name: 'choose',
          originalEvent: evt
        }); // Chosen item


        toggleClass(dragEl, options.chosenClass, true);
      }; // Disable "draggable"


      options.ignore.split(',').forEach(function (criteria) {
        find(dragEl, criteria.trim(), _disableDraggable);
      });
      on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);
      on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);
      on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);
      on(ownerDocument, 'mouseup', _this._onDrop);
      on(ownerDocument, 'touchend', _this._onDrop);
      on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)

      if (FireFox && this.nativeDraggable) {
        this.options.touchStartThreshold = 4;
        dragEl.draggable = true;
      }

      pluginEvent('delayStart', this, {
        evt: evt
      }); // Delay is impossible for native DnD in Edge or IE

      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {
        if (Sortable.eventCanceled) {
          this._onDrop();

          return;
        } // If the user moves the pointer or let go the click or touch
        // before the delay has been reached:
        // disable the delayed drag


        on(ownerDocument, 'mouseup', _this._disableDelayedDrag);
        on(ownerDocument, 'touchend', _this._disableDelayedDrag);
        on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);
        on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);
        on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);
        options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);
        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);
      } else {
        dragStartFn();
      }
    }
  },
  _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(
  /** TouchEvent|PointerEvent **/
  e) {
    var touch = e.touches ? e.touches[0] : e;

    if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {
      this._disableDelayedDrag();
    }
  },
  _disableDelayedDrag: function _disableDelayedDrag() {
    dragEl && _disableDraggable(dragEl);
    clearTimeout(this._dragStartTimer);

    this._disableDelayedDragEvents();
  },
  _disableDelayedDragEvents: function _disableDelayedDragEvents() {
    var ownerDocument = this.el.ownerDocument;
    off(ownerDocument, 'mouseup', this._disableDelayedDrag);
    off(ownerDocument, 'touchend', this._disableDelayedDrag);
    off(ownerDocument, 'touchcancel', this._disableDelayedDrag);
    off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);
    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);
    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);
  },
  _triggerDragStart: function _triggerDragStart(
  /** Event */
  evt,
  /** Touch */
  touch) {
    touch = touch || evt.pointerType == 'touch' && evt;

    if (!this.nativeDraggable || touch) {
      if (this.options.supportPointer) {
        on(document, 'pointermove', this._onTouchMove);
      } else if (touch) {
        on(document, 'touchmove', this._onTouchMove);
      } else {
        on(document, 'mousemove', this._onTouchMove);
      }
    } else {
      on(dragEl, 'dragend', this);
      on(rootEl, 'dragstart', this._onDragStart);
    }

    try {
      if (document.selection) {
        // Timeout neccessary for IE9
        _nextTick(function () {
          document.selection.empty();
        });
      } else {
        window.getSelection().removeAllRanges();
      }
    } catch (err) {}
  },
  _dragStarted: function _dragStarted(fallback, evt) {

    awaitingDragStarted = false;

    if (rootEl && dragEl) {
      pluginEvent('dragStarted', this, {
        evt: evt
      });

      if (this.nativeDraggable) {
        on(document, 'dragover', _checkOutsideTargetEl);
      }

      var options = this.options; // Apply effect

      !fallback && toggleClass(dragEl, options.dragClass, false);
      toggleClass(dragEl, options.ghostClass, true);
      Sortable.active = this;
      fallback && this._appendGhost(); // Drag start event

      _dispatchEvent({
        sortable: this,
        name: 'start',
        originalEvent: evt
      });
    } else {
      this._nulling();
    }
  },
  _emulateDragOver: function _emulateDragOver() {
    if (touchEvt) {
      this._lastX = touchEvt.clientX;
      this._lastY = touchEvt.clientY;

      _hideGhostForTarget();

      var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
      var parent = target;

      while (target && target.shadowRoot) {
        target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
        if (target === parent) break;
        parent = target;
      }

      dragEl.parentNode[expando]._isOutsideThisEl(target);

      if (parent) {
        do {
          if (parent[expando]) {
            var inserted = void 0;
            inserted = parent[expando]._onDragOver({
              clientX: touchEvt.clientX,
              clientY: touchEvt.clientY,
              target: target,
              rootEl: parent
            });

            if (inserted && !this.options.dragoverBubble) {
              break;
            }
          }

          target = parent; // store last element
        }
        /* jshint boss:true */
        while (parent = parent.parentNode);
      }

      _unhideGhostForTarget();
    }
  },
  _onTouchMove: function _onTouchMove(
  /**TouchEvent*/
  evt) {
    if (tapEvt) {
      var options = this.options,
          fallbackTolerance = options.fallbackTolerance,
          fallbackOffset = options.fallbackOffset,
          touch = evt.touches ? evt.touches[0] : evt,
          ghostMatrix = ghostEl && matrix(ghostEl, true),
          scaleX = ghostEl && ghostMatrix && ghostMatrix.a,
          scaleY = ghostEl && ghostMatrix && ghostMatrix.d,
          relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),
          dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),
          dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging

      if (!Sortable.active && !awaitingDragStarted) {
        if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {
          return;
        }

        this._onDragStart(evt, true);
      }

      if (ghostEl) {
        if (ghostMatrix) {
          ghostMatrix.e += dx - (lastDx || 0);
          ghostMatrix.f += dy - (lastDy || 0);
        } else {
          ghostMatrix = {
            a: 1,
            b: 0,
            c: 0,
            d: 1,
            e: dx,
            f: dy
          };
        }

        var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")");
        css(ghostEl, 'webkitTransform', cssMatrix);
        css(ghostEl, 'mozTransform', cssMatrix);
        css(ghostEl, 'msTransform', cssMatrix);
        css(ghostEl, 'transform', cssMatrix);
        lastDx = dx;
        lastDy = dy;
        touchEvt = touch;
      }

      evt.cancelable && evt.preventDefault();
    }
  },
  _appendGhost: function _appendGhost() {
    // Bug if using scale(): https://stackoverflow.com/questions/2637058
    // Not being adjusted for
    if (!ghostEl) {
      var container = this.options.fallbackOnBody ? document.body : rootEl,
          rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),
          options = this.options; // Position absolutely

      if (PositionGhostAbsolutely) {
        // Get relatively positioned parent
        ghostRelativeParent = container;

        while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {
          ghostRelativeParent = ghostRelativeParent.parentNode;
        }

        if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {
          if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();
          rect.top += ghostRelativeParent.scrollTop;
          rect.left += ghostRelativeParent.scrollLeft;
        } else {
          ghostRelativeParent = getWindowScrollingElement();
        }

        ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);
      }

      ghostEl = dragEl.cloneNode(true);
      toggleClass(ghostEl, options.ghostClass, false);
      toggleClass(ghostEl, options.fallbackClass, true);
      toggleClass(ghostEl, options.dragClass, true);
      css(ghostEl, 'transition', '');
      css(ghostEl, 'transform', '');
      css(ghostEl, 'box-sizing', 'border-box');
      css(ghostEl, 'margin', 0);
      css(ghostEl, 'top', rect.top);
      css(ghostEl, 'left', rect.left);
      css(ghostEl, 'width', rect.width);
      css(ghostEl, 'height', rect.height);
      css(ghostEl, 'opacity', '0.8');
      css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');
      css(ghostEl, 'zIndex', '100000');
      css(ghostEl, 'pointerEvents', 'none');
      Sortable.ghost = ghostEl;
      container.appendChild(ghostEl); // Set transform-origin

      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');
    }
  },
  _onDragStart: function _onDragStart(
  /**Event*/
  evt,
  /**boolean*/
  fallback) {
    var _this = this;

    var dataTransfer = evt.dataTransfer;
    var options = _this.options;
    pluginEvent('dragStart', this, {
      evt: evt
    });

    if (Sortable.eventCanceled) {
      this._onDrop();

      return;
    }

    pluginEvent('setupClone', this);

    if (!Sortable.eventCanceled) {
      cloneEl = clone(dragEl);
      cloneEl.draggable = false;
      cloneEl.style['will-change'] = '';

      this._hideClone();

      toggleClass(cloneEl, this.options.chosenClass, false);
      Sortable.clone = cloneEl;
    } // #1143: IFrame support workaround


    _this.cloneId = _nextTick(function () {
      pluginEvent('clone', _this);
      if (Sortable.eventCanceled) return;

      if (!_this.options.removeCloneOnHide) {
        rootEl.insertBefore(cloneEl, dragEl);
      }

      _this._hideClone();

      _dispatchEvent({
        sortable: _this,
        name: 'clone'
      });
    });
    !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events

    if (fallback) {
      ignoreNextClick = true;
      _this._loopId = setInterval(_this._emulateDragOver, 50);
    } else {
      // Undo what was set in _prepareDragStart before drag started
      off(document, 'mouseup', _this._onDrop);
      off(document, 'touchend', _this._onDrop);
      off(document, 'touchcancel', _this._onDrop);

      if (dataTransfer) {
        dataTransfer.effectAllowed = 'move';
        options.setData && options.setData.call(_this, dataTransfer, dragEl);
      }

      on(document, 'drop', _this); // #1276 fix:

      css(dragEl, 'transform', 'translateZ(0)');
    }

    awaitingDragStarted = true;
    _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));
    on(document, 'selectstart', _this);
    moved = true;

    if (Safari) {
      css(document.body, 'user-select', 'none');
    }
  },
  // Returns true - if no further action is needed (either inserted or another condition)
  _onDragOver: function _onDragOver(
  /**Event*/
  evt) {
    var el = this.el,
        target = evt.target,
        dragRect,
        targetRect,
        revert,
        options = this.options,
        group = options.group,
        activeSortable = Sortable.active,
        isOwner = activeGroup === group,
        canSort = options.sort,
        fromSortable = putSortable || activeSortable,
        vertical,
        _this = this,
        completedFired = false;

    if (_silent) return;

    function dragOverEvent(name, extra) {
      pluginEvent(name, _this, _objectSpread({
        evt: evt,
        isOwner: isOwner,
        axis: vertical ? 'vertical' : 'horizontal',
        revert: revert,
        dragRect: dragRect,
        targetRect: targetRect,
        canSort: canSort,
        fromSortable: fromSortable,
        target: target,
        completed: completed,
        onMove: function onMove(target, after) {
          return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);
        },
        changed: changed
      }, extra));
    } // Capture animation state


    function capture() {
      dragOverEvent('dragOverAnimationCapture');

      _this.captureAnimationState();

      if (_this !== fromSortable) {
        fromSortable.captureAnimationState();
      }
    } // Return invocation when dragEl is inserted (or completed)


    function completed(insertion) {
      dragOverEvent('dragOverCompleted', {
        insertion: insertion
      });

      if (insertion) {
        // Clones must be hidden before folding animation to capture dragRectAbsolute properly
        if (isOwner) {
          activeSortable._hideClone();
        } else {
          activeSortable._showClone(_this);
        }

        if (_this !== fromSortable) {
          // Set ghost class to new sortable's ghost class
          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);
          toggleClass(dragEl, options.ghostClass, true);
        }

        if (putSortable !== _this && _this !== Sortable.active) {
          putSortable = _this;
        } else if (_this === Sortable.active && putSortable) {
          putSortable = null;
        } // Animation


        if (fromSortable === _this) {
          _this._ignoreWhileAnimating = target;
        }

        _this.animateAll(function () {
          dragOverEvent('dragOverAnimationComplete');
          _this._ignoreWhileAnimating = null;
        });

        if (_this !== fromSortable) {
          fromSortable.animateAll();
          fromSortable._ignoreWhileAnimating = null;
        }
      } // Null lastTarget if it is not inside a previously swapped element


      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {
        lastTarget = null;
      } // no bubbling and not fallback


      if (!options.dragoverBubble && !evt.rootEl && target !== document) {
        dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted


        !insertion && nearestEmptyInsertDetectEvent(evt);
      }

      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();
      return completedFired = true;
    } // Call when dragEl has been inserted


    function changed() {
      newIndex = index(dragEl);
      newDraggableIndex = index(dragEl, options.draggable);

      _dispatchEvent({
        sortable: _this,
        name: 'change',
        toEl: el,
        newIndex: newIndex,
        newDraggableIndex: newDraggableIndex,
        originalEvent: evt
      });
    }

    if (evt.preventDefault !== void 0) {
      evt.cancelable && evt.preventDefault();
    }

    target = closest(target, options.draggable, el, true);
    dragOverEvent('dragOver');
    if (Sortable.eventCanceled) return completedFired;

    if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {
      return completed(false);
    }

    ignoreNextClick = false;

    if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list
    : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {
      vertical = this._getDirection(evt, target) === 'vertical';
      dragRect = getRect(dragEl);
      dragOverEvent('dragOverValid');
      if (Sortable.eventCanceled) return completedFired;

      if (revert) {
        parentEl = rootEl; // actualization

        capture();

        this._hideClone();

        dragOverEvent('revert');

        if (!Sortable.eventCanceled) {
          if (nextEl) {
            rootEl.insertBefore(dragEl, nextEl);
          } else {
            rootEl.appendChild(dragEl);
          }
        }

        return completed(true);
      }

      var elLastChild = lastChild(el, options.draggable);

      if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {
        // If already at end of list: Do not insert
        if (elLastChild === dragEl) {
          return completed(false);
        } // assign target only if condition is true


        if (elLastChild && el === evt.target) {
          target = elLastChild;
        }

        if (target) {
          targetRect = getRect(target);
        }

        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {
          capture();
          el.appendChild(dragEl);
          parentEl = el; // actualization

          changed();
          return completed(true);
        }
      } else if (target.parentNode === el) {
        targetRect = getRect(target);
        var direction = 0,
            targetBeforeFirstSwap,
            differentLevel = dragEl.parentNode !== el,
            differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),
            side1 = vertical ? 'top' : 'left',
            scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),
            scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;

        if (lastTarget !== target) {
          targetBeforeFirstSwap = targetRect[side1];
          pastFirstInvertThresh = false;
          isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;
        }

        direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);
        var sibling;

        if (direction !== 0) {
          // Check if target is beside dragEl in respective direction (ignoring hidden elements)
          var dragIndex = index(dragEl);

          do {
            dragIndex -= direction;
            sibling = parentEl.children[dragIndex];
          } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));
        } // If dragEl is already beside target: Do not insert


        if (direction === 0 || sibling === target) {
          return completed(false);
        }

        lastTarget = target;
        lastDirection = direction;
        var nextSibling = target.nextElementSibling,
            after = false;
        after = direction === 1;

        var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);

        if (moveVector !== false) {
          if (moveVector === 1 || moveVector === -1) {
            after = moveVector === 1;
          }

          _silent = true;
          setTimeout(_unsilent, 30);
          capture();

          if (after && !nextSibling) {
            el.appendChild(dragEl);
          } else {
            target.parentNode.insertBefore(dragEl, after ? nextSibling : target);
          } // Undo chrome's scroll adjustment (has no effect on other browsers)


          if (scrolledPastTop) {
            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);
          }

          parentEl = dragEl.parentNode; // actualization
          // must be done before animation

          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {
            targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);
          }

          changed();
          return completed(true);
        }
      }

      if (el.contains(dragEl)) {
        return completed(false);
      }
    }

    return false;
  },
  _ignoreWhileAnimating: null,
  _offMoveEvents: function _offMoveEvents() {
    off(document, 'mousemove', this._onTouchMove);
    off(document, 'touchmove', this._onTouchMove);
    off(document, 'pointermove', this._onTouchMove);
    off(document, 'dragover', nearestEmptyInsertDetectEvent);
    off(document, 'mousemove', nearestEmptyInsertDetectEvent);
    off(document, 'touchmove', nearestEmptyInsertDetectEvent);
  },
  _offUpEvents: function _offUpEvents() {
    var ownerDocument = this.el.ownerDocument;
    off(ownerDocument, 'mouseup', this._onDrop);
    off(ownerDocument, 'touchend', this._onDrop);
    off(ownerDocument, 'pointerup', this._onDrop);
    off(ownerDocument, 'touchcancel', this._onDrop);
    off(document, 'selectstart', this);
  },
  _onDrop: function _onDrop(
  /**Event*/
  evt) {
    var el = this.el,
        options = this.options; // Get the index of the dragged element within its parent

    newIndex = index(dragEl);
    newDraggableIndex = index(dragEl, options.draggable);
    pluginEvent('drop', this, {
      evt: evt
    });
    parentEl = dragEl && dragEl.parentNode; // Get again after plugin event

    newIndex = index(dragEl);
    newDraggableIndex = index(dragEl, options.draggable);

    if (Sortable.eventCanceled) {
      this._nulling();

      return;
    }

    awaitingDragStarted = false;
    isCircumstantialInvert = false;
    pastFirstInvertThresh = false;
    clearInterval(this._loopId);
    clearTimeout(this._dragStartTimer);

    _cancelNextTick(this.cloneId);

    _cancelNextTick(this._dragStartId); // Unbind events


    if (this.nativeDraggable) {
      off(document, 'drop', this);
      off(el, 'dragstart', this._onDragStart);
    }

    this._offMoveEvents();

    this._offUpEvents();

    if (Safari) {
      css(document.body, 'user-select', '');
    }

    css(dragEl, 'transform', '');

    if (evt) {
      if (moved) {
        evt.cancelable && evt.preventDefault();
        !options.dropBubble && evt.stopPropagation();
      }

      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);

      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
        // Remove clone(s)
        cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);
      }

      if (dragEl) {
        if (this.nativeDraggable) {
          off(dragEl, 'dragend', this);
        }

        _disableDraggable(dragEl);

        dragEl.style['will-change'] = ''; // Remove classes
        // ghostClass is added in dragStarted

        if (moved && !awaitingDragStarted) {
          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);
        }

        toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event

        _dispatchEvent({
          sortable: this,
          name: 'unchoose',
          toEl: parentEl,
          newIndex: null,
          newDraggableIndex: null,
          originalEvent: evt
        });

        if (rootEl !== parentEl) {
          if (newIndex >= 0) {
            // Add event
            _dispatchEvent({
              rootEl: parentEl,
              name: 'add',
              toEl: parentEl,
              fromEl: rootEl,
              originalEvent: evt
            }); // Remove event


            _dispatchEvent({
              sortable: this,
              name: 'remove',
              toEl: parentEl,
              originalEvent: evt
            }); // drag from one list and drop into another


            _dispatchEvent({
              rootEl: parentEl,
              name: 'sort',
              toEl: parentEl,
              fromEl: rootEl,
              originalEvent: evt
            });

            _dispatchEvent({
              sortable: this,
              name: 'sort',
              toEl: parentEl,
              originalEvent: evt
            });
          }

          putSortable && putSortable.save();
        } else {
          if (newIndex !== oldIndex) {
            if (newIndex >= 0) {
              // drag & drop within the same list
              _dispatchEvent({
                sortable: this,
                name: 'update',
                toEl: parentEl,
                originalEvent: evt
              });

              _dispatchEvent({
                sortable: this,
                name: 'sort',
                toEl: parentEl,
                originalEvent: evt
              });
            }
          }
        }

        if (Sortable.active) {
          /* jshint eqnull:true */
          if (newIndex == null || newIndex === -1) {
            newIndex = oldIndex;
            newDraggableIndex = oldDraggableIndex;
          }

          _dispatchEvent({
            sortable: this,
            name: 'end',
            toEl: parentEl,
            originalEvent: evt
          }); // Save sorting


          this.save();
        }
      }
    }

    this._nulling();
  },
  _nulling: function _nulling() {
    pluginEvent('nulling', this);
    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;
    savedInputChecked.forEach(function (el) {
      el.checked = true;
    });
    savedInputChecked.length = lastDx = lastDy = 0;
  },
  handleEvent: function handleEvent(
  /**Event*/
  evt) {
    switch (evt.type) {
      case 'drop':
      case 'dragend':
        this._onDrop(evt);

        break;

      case 'dragenter':
      case 'dragover':
        if (dragEl) {
          this._onDragOver(evt);

          _globalDragOver(evt);
        }

        break;

      case 'selectstart':
        evt.preventDefault();
        break;
    }
  },

  /**
   * Serializes the item into an array of string.
   * @returns {String[]}
   */
  toArray: function toArray() {
    var order = [],
        el,
        children = this.el.children,
        i = 0,
        n = children.length,
        options = this.options;

    for (; i < n; i++) {
      el = children[i];

      if (closest(el, options.draggable, this.el, false)) {
        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));
      }
    }

    return order;
  },

  /**
   * Sorts the elements according to the array.
   * @param  {String[]}  order  order of the items
   */
  sort: function sort(order) {
    var items = {},
        rootEl = this.el;
    this.toArray().forEach(function (id, i) {
      var el = rootEl.children[i];

      if (closest(el, this.options.draggable, rootEl, false)) {
        items[id] = el;
      }
    }, this);
    order.forEach(function (id) {
      if (items[id]) {
        rootEl.removeChild(items[id]);
        rootEl.appendChild(items[id]);
      }
    });
  },

  /**
   * Save the current sorting
   */
  save: function save() {
    var store = this.options.store;
    store && store.set && store.set(this);
  },

  /**
   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
   * @param   {HTMLElement}  el
   * @param   {String}       [selector]  default: `options.draggable`
   * @returns {HTMLElement|null}
   */
  closest: function closest$1(el, selector) {
    return closest(el, selector || this.options.draggable, this.el, false);
  },

  /**
   * Set/get option
   * @param   {string} name
   * @param   {*}      [value]
   * @returns {*}
   */
  option: function option(name, value) {
    var options = this.options;

    if (value === void 0) {
      return options[name];
    } else {
      var modifiedValue = PluginManager.modifyOption(this, name, value);

      if (typeof modifiedValue !== 'undefined') {
        options[name] = modifiedValue;
      } else {
        options[name] = value;
      }

      if (name === 'group') {
        _prepareGroup(options);
      }
    }
  },

  /**
   * Destroy
   */
  destroy: function destroy() {
    pluginEvent('destroy', this);
    var el = this.el;
    el[expando] = null;
    off(el, 'mousedown', this._onTapStart);
    off(el, 'touchstart', this._onTapStart);
    off(el, 'pointerdown', this._onTapStart);

    if (this.nativeDraggable) {
      off(el, 'dragover', this);
      off(el, 'dragenter', this);
    } // Remove draggable attributes


    Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {
      el.removeAttribute('draggable');
    });

    this._onDrop();

    this._disableDelayedDragEvents();

    sortables.splice(sortables.indexOf(this.el), 1);
    this.el = el = null;
  },
  _hideClone: function _hideClone() {
    if (!cloneHidden) {
      pluginEvent('hideClone', this);
      if (Sortable.eventCanceled) return;
      css(cloneEl, 'display', 'none');

      if (this.options.removeCloneOnHide && cloneEl.parentNode) {
        cloneEl.parentNode.removeChild(cloneEl);
      }

      cloneHidden = true;
    }
  },
  _showClone: function _showClone(putSortable) {
    if (putSortable.lastPutMode !== 'clone') {
      this._hideClone();

      return;
    }

    if (cloneHidden) {
      pluginEvent('showClone', this);
      if (Sortable.eventCanceled) return; // show clone at dragEl or original position

      if (rootEl.contains(dragEl) && !this.options.group.revertClone) {
        rootEl.insertBefore(cloneEl, dragEl);
      } else if (nextEl) {
        rootEl.insertBefore(cloneEl, nextEl);
      } else {
        rootEl.appendChild(cloneEl);
      }

      if (this.options.group.revertClone) {
        this.animate(dragEl, cloneEl);
      }

      css(cloneEl, 'display', '');
      cloneHidden = false;
    }
  }
};

function _globalDragOver(
/**Event*/
evt) {
  if (evt.dataTransfer) {
    evt.dataTransfer.dropEffect = 'move';
  }

  evt.cancelable && evt.preventDefault();
}

function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {
  var evt,
      sortable = fromEl[expando],
      onMoveFn = sortable.options.onMove,
      retVal; // Support for new CustomEvent feature

  if (window.CustomEvent && !IE11OrLess && !Edge) {
    evt = new CustomEvent('move', {
      bubbles: true,
      cancelable: true
    });
  } else {
    evt = document.createEvent('Event');
    evt.initEvent('move', true, true);
  }

  evt.to = toEl;
  evt.from = fromEl;
  evt.dragged = dragEl;
  evt.draggedRect = dragRect;
  evt.related = targetEl || toEl;
  evt.relatedRect = targetRect || getRect(toEl);
  evt.willInsertAfter = willInsertAfter;
  evt.originalEvent = originalEvent;
  fromEl.dispatchEvent(evt);

  if (onMoveFn) {
    retVal = onMoveFn.call(sortable, evt, originalEvent);
  }

  return retVal;
}

function _disableDraggable(el) {
  el.draggable = false;
}

function _unsilent() {
  _silent = false;
}

function _ghostIsLast(evt, vertical, sortable) {
  var rect = getRect(lastChild(sortable.el, sortable.options.draggable));
  var spacer = 10;
  return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;
}

function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {
  var mouseOnAxis = vertical ? evt.clientY : evt.clientX,
      targetLength = vertical ? targetRect.height : targetRect.width,
      targetS1 = vertical ? targetRect.top : targetRect.left,
      targetS2 = vertical ? targetRect.bottom : targetRect.right,
      invert = false;

  if (!invertSwap) {
    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold
    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {
      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2
      // check if past first invert threshold on side opposite of lastDirection
      if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {
        // past first invert threshold, do not restrict inverted threshold to dragEl shadow
        pastFirstInvertThresh = true;
      }

      if (!pastFirstInvertThresh) {
        // dragEl shadow (target move distance shadow)
        if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow
        : mouseOnAxis > targetS2 - targetMoveDistance) {
          return -lastDirection;
        }
      } else {
        invert = true;
      }
    } else {
      // Regular
      if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {
        return _getInsertDirection(target);
      }
    }
  }

  invert = invert || invertSwap;

  if (invert) {
    // Invert of regular
    if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {
      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;
    }
  }

  return 0;
}
/**
 * Gets the direction dragEl must be swapped relative to target in order to make it
 * seem that dragEl has been "inserted" into that element's position
 * @param  {HTMLElement} target       The target whose position dragEl is being inserted at
 * @return {Number}                   Direction dragEl must be swapped
 */


function _getInsertDirection(target) {
  if (index(dragEl) < index(target)) {
    return 1;
  } else {
    return -1;
  }
}
/**
 * Generate id
 * @param   {HTMLElement} el
 * @returns {String}
 * @private
 */


function _generateId(el) {
  var str = el.tagName + el.className + el.src + el.href + el.textContent,
      i = str.length,
      sum = 0;

  while (i--) {
    sum += str.charCodeAt(i);
  }

  return sum.toString(36);
}

function _saveInputCheckedState(root) {
  savedInputChecked.length = 0;
  var inputs = root.getElementsByTagName('input');
  var idx = inputs.length;

  while (idx--) {
    var el = inputs[idx];
    el.checked && savedInputChecked.push(el);
  }
}

function _nextTick(fn) {
  return setTimeout(fn, 0);
}

function _cancelNextTick(id) {
  return clearTimeout(id);
} // Fixed #973:


if (documentExists) {
  on(document, 'touchmove', function (evt) {
    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {
      evt.preventDefault();
    }
  });
} // Export utils


Sortable.utils = {
  on: on,
  off: off,
  css: css,
  find: find,
  is: function is(el, selector) {
    return !!closest(el, selector, el, false);
  },
  extend: extend,
  throttle: throttle,
  closest: closest,
  toggleClass: toggleClass,
  clone: clone,
  index: index,
  nextTick: _nextTick,
  cancelNextTick: _cancelNextTick,
  detectDirection: _detectDirection,
  getChild: getChild
};
/**
 * Get the Sortable instance of an element
 * @param  {HTMLElement} element The element
 * @return {Sortable|undefined}         The instance of Sortable
 */

Sortable.get = function (element) {
  return element[expando];
};
/**
 * Mount a plugin to Sortable
 * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted
 */


Sortable.mount = function () {
  for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
    plugins[_key] = arguments[_key];
  }

  if (plugins[0].constructor === Array) plugins = plugins[0];
  plugins.forEach(function (plugin) {
    if (!plugin.prototype || !plugin.prototype.constructor) {
      throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin));
    }

    if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);
    PluginManager.mount(plugin);
  });
};
/**
 * Create sortable instance
 * @param {HTMLElement}  el
 * @param {Object}      [options]
 */


Sortable.create = function (el, options) {
  return new Sortable(el, options);
}; // Export


Sortable.version = version;

var autoScrolls = [],
    scrollEl,
    scrollRootEl,
    scrolling = false,
    lastAutoScrollX,
    lastAutoScrollY,
    touchEvt$1,
    pointerElemChangedInterval;

function AutoScrollPlugin() {
  function AutoScroll() {
    this.defaults = {
      scroll: true,
      scrollSensitivity: 30,
      scrollSpeed: 10,
      bubbleScroll: true
    }; // Bind all private methods

    for (var fn in this) {
      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
        this[fn] = this[fn].bind(this);
      }
    }
  }

  AutoScroll.prototype = {
    dragStarted: function dragStarted(_ref) {
      var originalEvent = _ref.originalEvent;

      if (this.sortable.nativeDraggable) {
        on(document, 'dragover', this._handleAutoScroll);
      } else {
        if (this.options.supportPointer) {
          on(document, 'pointermove', this._handleFallbackAutoScroll);
        } else if (originalEvent.touches) {
          on(document, 'touchmove', this._handleFallbackAutoScroll);
        } else {
          on(document, 'mousemove', this._handleFallbackAutoScroll);
        }
      }
    },
    dragOverCompleted: function dragOverCompleted(_ref2) {
      var originalEvent = _ref2.originalEvent;

      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)
      if (!this.options.dragOverBubble && !originalEvent.rootEl) {
        this._handleAutoScroll(originalEvent);
      }
    },
    drop: function drop() {
      if (this.sortable.nativeDraggable) {
        off(document, 'dragover', this._handleAutoScroll);
      } else {
        off(document, 'pointermove', this._handleFallbackAutoScroll);
        off(document, 'touchmove', this._handleFallbackAutoScroll);
        off(document, 'mousemove', this._handleFallbackAutoScroll);
      }

      clearPointerElemChangedInterval();
      clearAutoScrolls();
      cancelThrottle();
    },
    nulling: function nulling() {
      touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;
      autoScrolls.length = 0;
    },
    _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {
      this._handleAutoScroll(evt, true);
    },
    _handleAutoScroll: function _handleAutoScroll(evt, fallback) {
      var _this = this;

      var x = (evt.touches ? evt.touches[0] : evt).clientX,
          y = (evt.touches ? evt.touches[0] : evt).clientY,
          elem = document.elementFromPoint(x, y);
      touchEvt$1 = evt; // IE does not seem to have native autoscroll,
      // Edge's autoscroll seems too conditional,
      // MACOS Safari does not have autoscroll,
      // Firefox and Chrome are good

      if (fallback || Edge || IE11OrLess || Safari) {
        autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change

        var ogElemScroller = getParentAutoScrollElement(elem, true);

        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {
          pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour

          pointerElemChangedInterval = setInterval(function () {
            var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);

            if (newElem !== ogElemScroller) {
              ogElemScroller = newElem;
              clearAutoScrolls();
            }

            autoScroll(evt, _this.options, newElem, fallback);
          }, 10);
          lastAutoScrollX = x;
          lastAutoScrollY = y;
        }
      } else {
        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll
        if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {
          clearAutoScrolls();
          return;
        }

        autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);
      }
    }
  };
  return _extends(AutoScroll, {
    pluginName: 'scroll',
    initializeByDefault: true
  });
}

function clearAutoScrolls() {
  autoScrolls.forEach(function (autoScroll) {
    clearInterval(autoScroll.pid);
  });
  autoScrolls = [];
}

function clearPointerElemChangedInterval() {
  clearInterval(pointerElemChangedInterval);
}

var autoScroll = throttle(function (evt, options, rootEl, isFallback) {
  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521
  if (!options.scroll) return;
  var x = (evt.touches ? evt.touches[0] : evt).clientX,
      y = (evt.touches ? evt.touches[0] : evt).clientY,
      sens = options.scrollSensitivity,
      speed = options.scrollSpeed,
      winScroller = getWindowScrollingElement();
  var scrollThisInstance = false,
      scrollCustomFn; // New scroll root, set scrollEl

  if (scrollRootEl !== rootEl) {
    scrollRootEl = rootEl;
    clearAutoScrolls();
    scrollEl = options.scroll;
    scrollCustomFn = options.scrollFn;

    if (scrollEl === true) {
      scrollEl = getParentAutoScrollElement(rootEl, true);
    }
  }

  var layersOut = 0;
  var currentParent = scrollEl;

  do {
    var el = currentParent,
        rect = getRect(el),
        top = rect.top,
        bottom = rect.bottom,
        left = rect.left,
        right = rect.right,
        width = rect.width,
        height = rect.height,
        canScrollX = void 0,
        canScrollY = void 0,
        scrollWidth = el.scrollWidth,
        scrollHeight = el.scrollHeight,
        elCSS = css(el),
        scrollPosX = el.scrollLeft,
        scrollPosY = el.scrollTop;

    if (el === winScroller) {
      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');
      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');
    } else {
      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');
      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');
    }

    var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);
    var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);

    if (!autoScrolls[layersOut]) {
      for (var i = 0; i <= layersOut; i++) {
        if (!autoScrolls[i]) {
          autoScrolls[i] = {};
        }
      }
    }

    if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {
      autoScrolls[layersOut].el = el;
      autoScrolls[layersOut].vx = vx;
      autoScrolls[layersOut].vy = vy;
      clearInterval(autoScrolls[layersOut].pid);

      if (vx != 0 || vy != 0) {
        scrollThisInstance = true;
        /* jshint loopfunc:true */

        autoScrolls[layersOut].pid = setInterval(function () {
          // emulate drag over during autoscroll (fallback), emulating native DnD behaviour
          if (isFallback && this.layer === 0) {
            Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely

          }

          var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;
          var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;

          if (typeof scrollCustomFn === 'function') {
            if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {
              return;
            }
          }

          scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);
        }.bind({
          layer: layersOut
        }), 24);
      }
    }

    layersOut++;
  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));

  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not
}, 30);

var drop = function drop(_ref) {
  var originalEvent = _ref.originalEvent,
      putSortable = _ref.putSortable,
      dragEl = _ref.dragEl,
      activeSortable = _ref.activeSortable,
      dispatchSortableEvent = _ref.dispatchSortableEvent,
      hideGhostForTarget = _ref.hideGhostForTarget,
      unhideGhostForTarget = _ref.unhideGhostForTarget;
  if (!originalEvent) return;
  var toSortable = putSortable || activeSortable;
  hideGhostForTarget();
  var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;
  var target = document.elementFromPoint(touch.clientX, touch.clientY);
  unhideGhostForTarget();

  if (toSortable && !toSortable.el.contains(target)) {
    dispatchSortableEvent('spill');
    this.onSpill({
      dragEl: dragEl,
      putSortable: putSortable
    });
  }
};

function Revert() {}

Revert.prototype = {
  startIndex: null,
  dragStart: function dragStart(_ref2) {
    var oldDraggableIndex = _ref2.oldDraggableIndex;
    this.startIndex = oldDraggableIndex;
  },
  onSpill: function onSpill(_ref3) {
    var dragEl = _ref3.dragEl,
        putSortable = _ref3.putSortable;
    this.sortable.captureAnimationState();

    if (putSortable) {
      putSortable.captureAnimationState();
    }

    var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);

    if (nextSibling) {
      this.sortable.el.insertBefore(dragEl, nextSibling);
    } else {
      this.sortable.el.appendChild(dragEl);
    }

    this.sortable.animateAll();

    if (putSortable) {
      putSortable.animateAll();
    }
  },
  drop: drop
};

_extends(Revert, {
  pluginName: 'revertOnSpill'
});

function Remove() {}

Remove.prototype = {
  onSpill: function onSpill(_ref4) {
    var dragEl = _ref4.dragEl,
        putSortable = _ref4.putSortable;
    var parentSortable = putSortable || this.sortable;
    parentSortable.captureAnimationState();
    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);
    parentSortable.animateAll();
  },
  drop: drop
};

_extends(Remove, {
  pluginName: 'removeOnSpill'
});

var lastSwapEl;

function SwapPlugin() {
  function Swap() {
    this.defaults = {
      swapClass: 'sortable-swap-highlight'
    };
  }

  Swap.prototype = {
    dragStart: function dragStart(_ref) {
      var dragEl = _ref.dragEl;
      lastSwapEl = dragEl;
    },
    dragOverValid: function dragOverValid(_ref2) {
      var completed = _ref2.completed,
          target = _ref2.target,
          onMove = _ref2.onMove,
          activeSortable = _ref2.activeSortable,
          changed = _ref2.changed,
          cancel = _ref2.cancel;
      if (!activeSortable.options.swap) return;
      var el = this.sortable.el,
          options = this.options;

      if (target && target !== el) {
        var prevSwapEl = lastSwapEl;

        if (onMove(target) !== false) {
          toggleClass(target, options.swapClass, true);
          lastSwapEl = target;
        } else {
          lastSwapEl = null;
        }

        if (prevSwapEl && prevSwapEl !== lastSwapEl) {
          toggleClass(prevSwapEl, options.swapClass, false);
        }
      }

      changed();
      completed(true);
      cancel();
    },
    drop: function drop(_ref3) {
      var activeSortable = _ref3.activeSortable,
          putSortable = _ref3.putSortable,
          dragEl = _ref3.dragEl;
      var toSortable = putSortable || this.sortable;
      var options = this.options;
      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);

      if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {
        if (dragEl !== lastSwapEl) {
          toSortable.captureAnimationState();
          if (toSortable !== activeSortable) activeSortable.captureAnimationState();
          swapNodes(dragEl, lastSwapEl);
          toSortable.animateAll();
          if (toSortable !== activeSortable) activeSortable.animateAll();
        }
      }
    },
    nulling: function nulling() {
      lastSwapEl = null;
    }
  };
  return _extends(Swap, {
    pluginName: 'swap',
    eventProperties: function eventProperties() {
      return {
        swapItem: lastSwapEl
      };
    }
  });
}

function swapNodes(n1, n2) {
  var p1 = n1.parentNode,
      p2 = n2.parentNode,
      i1,
      i2;
  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;
  i1 = index(n1);
  i2 = index(n2);

  if (p1.isEqualNode(p2) && i1 < i2) {
    i2++;
  }

  p1.insertBefore(n2, p1.children[i1]);
  p2.insertBefore(n1, p2.children[i2]);
}

var multiDragElements = [],
    multiDragClones = [],
    lastMultiDragSelect,
    // for selection with modifier key down (SHIFT)
multiDragSortable,
    initialFolding = false,
    // Initial multi-drag fold when drag started
folding = false,
    // Folding any other time
dragStarted = false,
    dragEl$1,
    clonesFromRect,
    clonesHidden;

function MultiDragPlugin() {
  function MultiDrag(sortable) {
    // Bind all private methods
    for (var fn in this) {
      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
        this[fn] = this[fn].bind(this);
      }
    }

    if (sortable.options.supportPointer) {
      on(document, 'pointerup', this._deselectMultiDrag);
    } else {
      on(document, 'mouseup', this._deselectMultiDrag);
      on(document, 'touchend', this._deselectMultiDrag);
    }

    on(document, 'keydown', this._checkKeyDown);
    on(document, 'keyup', this._checkKeyUp);
    this.defaults = {
      selectedClass: 'sortable-selected',
      multiDragKey: null,
      setData: function setData(dataTransfer, dragEl) {
        var data = '';

        if (multiDragElements.length && multiDragSortable === sortable) {
          multiDragElements.forEach(function (multiDragElement, i) {
            data += (!i ? '' : ', ') + multiDragElement.textContent;
          });
        } else {
          data = dragEl.textContent;
        }

        dataTransfer.setData('Text', data);
      }
    };
  }

  MultiDrag.prototype = {
    multiDragKeyDown: false,
    isMultiDrag: false,
    delayStartGlobal: function delayStartGlobal(_ref) {
      var dragged = _ref.dragEl;
      dragEl$1 = dragged;
    },
    delayEnded: function delayEnded() {
      this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);
    },
    setupClone: function setupClone(_ref2) {
      var sortable = _ref2.sortable,
          cancel = _ref2.cancel;
      if (!this.isMultiDrag) return;

      for (var i = 0; i < multiDragElements.length; i++) {
        multiDragClones.push(clone(multiDragElements[i]));
        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;
        multiDragClones[i].draggable = false;
        multiDragClones[i].style['will-change'] = '';
        toggleClass(multiDragClones[i], this.options.selectedClass, false);
        multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);
      }

      sortable._hideClone();

      cancel();
    },
    clone: function clone(_ref3) {
      var sortable = _ref3.sortable,
          rootEl = _ref3.rootEl,
          dispatchSortableEvent = _ref3.dispatchSortableEvent,
          cancel = _ref3.cancel;
      if (!this.isMultiDrag) return;

      if (!this.options.removeCloneOnHide) {
        if (multiDragElements.length && multiDragSortable === sortable) {
          insertMultiDragClones(true, rootEl);
          dispatchSortableEvent('clone');
          cancel();
        }
      }
    },
    showClone: function showClone(_ref4) {
      var cloneNowShown = _ref4.cloneNowShown,
          rootEl = _ref4.rootEl,
          cancel = _ref4.cancel;
      if (!this.isMultiDrag) return;
      insertMultiDragClones(false, rootEl);
      multiDragClones.forEach(function (clone) {
        css(clone, 'display', '');
      });
      cloneNowShown();
      clonesHidden = false;
      cancel();
    },
    hideClone: function hideClone(_ref5) {
      var _this = this;

      var sortable = _ref5.sortable,
          cloneNowHidden = _ref5.cloneNowHidden,
          cancel = _ref5.cancel;
      if (!this.isMultiDrag) return;
      multiDragClones.forEach(function (clone) {
        css(clone, 'display', 'none');

        if (_this.options.removeCloneOnHide && clone.parentNode) {
          clone.parentNode.removeChild(clone);
        }
      });
      cloneNowHidden();
      clonesHidden = true;
      cancel();
    },
    dragStartGlobal: function dragStartGlobal(_ref6) {
      var sortable = _ref6.sortable;

      if (!this.isMultiDrag && multiDragSortable) {
        multiDragSortable.multiDrag._deselectMultiDrag();
      }

      multiDragElements.forEach(function (multiDragElement) {
        multiDragElement.sortableIndex = index(multiDragElement);
      }); // Sort multi-drag elements

      multiDragElements = multiDragElements.sort(function (a, b) {
        return a.sortableIndex - b.sortableIndex;
      });
      dragStarted = true;
    },
    dragStarted: function dragStarted(_ref7) {
      var _this2 = this;

      var sortable = _ref7.sortable;
      if (!this.isMultiDrag) return;

      if (this.options.sort) {
        // Capture rects,
        // hide multi drag elements (by positioning them absolute),
        // set multi drag elements rects to dragRect,
        // show multi drag elements,
        // animate to rects,
        // unset rects & remove from DOM
        sortable.captureAnimationState();

        if (this.options.animation) {
          multiDragElements.forEach(function (multiDragElement) {
            if (multiDragElement === dragEl$1) return;
            css(multiDragElement, 'position', 'absolute');
          });
          var dragRect = getRect(dragEl$1, false, true, true);
          multiDragElements.forEach(function (multiDragElement) {
            if (multiDragElement === dragEl$1) return;
            setRect(multiDragElement, dragRect);
          });
          folding = true;
          initialFolding = true;
        }
      }

      sortable.animateAll(function () {
        folding = false;
        initialFolding = false;

        if (_this2.options.animation) {
          multiDragElements.forEach(function (multiDragElement) {
            unsetRect(multiDragElement);
          });
        } // Remove all auxiliary multidrag items from el, if sorting enabled


        if (_this2.options.sort) {
          removeMultiDragElements();
        }
      });
    },
    dragOver: function dragOver(_ref8) {
      var target = _ref8.target,
          completed = _ref8.completed,
          cancel = _ref8.cancel;

      if (folding && ~multiDragElements.indexOf(target)) {
        completed(false);
        cancel();
      }
    },
    revert: function revert(_ref9) {
      var fromSortable = _ref9.fromSortable,
          rootEl = _ref9.rootEl,
          sortable = _ref9.sortable,
          dragRect = _ref9.dragRect;

      if (multiDragElements.length > 1) {
        // Setup unfold animation
        multiDragElements.forEach(function (multiDragElement) {
          sortable.addAnimationState({
            target: multiDragElement,
            rect: folding ? getRect(multiDragElement) : dragRect
          });
          unsetRect(multiDragElement);
          multiDragElement.fromRect = dragRect;
          fromSortable.removeAnimationState(multiDragElement);
        });
        folding = false;
        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);
      }
    },
    dragOverCompleted: function dragOverCompleted(_ref10) {
      var sortable = _ref10.sortable,
          isOwner = _ref10.isOwner,
          insertion = _ref10.insertion,
          activeSortable = _ref10.activeSortable,
          parentEl = _ref10.parentEl,
          putSortable = _ref10.putSortable;
      var options = this.options;

      if (insertion) {
        // Clones must be hidden before folding animation to capture dragRectAbsolute properly
        if (isOwner) {
          activeSortable._hideClone();
        }

        initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location

        if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {
          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible
          var dragRectAbsolute = getRect(dragEl$1, false, true, true);
          multiDragElements.forEach(function (multiDragElement) {
            if (multiDragElement === dragEl$1) return;
            setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted
            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable

            parentEl.appendChild(multiDragElement);
          });
          folding = true;
        } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out


        if (!isOwner) {
          // Only remove if not folding (folding will remove them anyways)
          if (!folding) {
            removeMultiDragElements();
          }

          if (multiDragElements.length > 1) {
            var clonesHiddenBefore = clonesHidden;

            activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden


            if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {
              multiDragClones.forEach(function (clone) {
                activeSortable.addAnimationState({
                  target: clone,
                  rect: clonesFromRect
                });
                clone.fromRect = clonesFromRect;
                clone.thisAnimationDuration = null;
              });
            }
          } else {
            activeSortable._showClone(sortable);
          }
        }
      }
    },
    dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {
      var dragRect = _ref11.dragRect,
          isOwner = _ref11.isOwner,
          activeSortable = _ref11.activeSortable;
      multiDragElements.forEach(function (multiDragElement) {
        multiDragElement.thisAnimationDuration = null;
      });

      if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {
        clonesFromRect = _extends({}, dragRect);
        var dragMatrix = matrix(dragEl$1, true);
        clonesFromRect.top -= dragMatrix.f;
        clonesFromRect.left -= dragMatrix.e;
      }
    },
    dragOverAnimationComplete: function dragOverAnimationComplete() {
      if (folding) {
        folding = false;
        removeMultiDragElements();
      }
    },
    drop: function drop(_ref12) {
      var evt = _ref12.originalEvent,
          rootEl = _ref12.rootEl,
          parentEl = _ref12.parentEl,
          sortable = _ref12.sortable,
          dispatchSortableEvent = _ref12.dispatchSortableEvent,
          oldIndex = _ref12.oldIndex,
          putSortable = _ref12.putSortable;
      var toSortable = putSortable || this.sortable;
      if (!evt) return;
      var options = this.options,
          children = parentEl.children; // Multi-drag selection

      if (!dragStarted) {
        if (options.multiDragKey && !this.multiDragKeyDown) {
          this._deselectMultiDrag();
        }

        toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));

        if (!~multiDragElements.indexOf(dragEl$1)) {
          multiDragElements.push(dragEl$1);
          dispatchEvent({
            sortable: sortable,
            rootEl: rootEl,
            name: 'select',
            targetEl: dragEl$1,
            originalEvt: evt
          }); // Modifier activated, select from last to dragEl

          if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {
            var lastIndex = index(lastMultiDragSelect),
                currentIndex = index(dragEl$1);

            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {
              // Must include lastMultiDragSelect (select it), in case modified selection from no selection
              // (but previous selection existed)
              var n, i;

              if (currentIndex > lastIndex) {
                i = lastIndex;
                n = currentIndex;
              } else {
                i = currentIndex;
                n = lastIndex + 1;
              }

              for (; i < n; i++) {
                if (~multiDragElements.indexOf(children[i])) continue;
                toggleClass(children[i], options.selectedClass, true);
                multiDragElements.push(children[i]);
                dispatchEvent({
                  sortable: sortable,
                  rootEl: rootEl,
                  name: 'select',
                  targetEl: children[i],
                  originalEvt: evt
                });
              }
            }
          } else {
            lastMultiDragSelect = dragEl$1;
          }

          multiDragSortable = toSortable;
        } else {
          multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);
          lastMultiDragSelect = null;
          dispatchEvent({
            sortable: sortable,
            rootEl: rootEl,
            name: 'deselect',
            targetEl: dragEl$1,
            originalEvt: evt
          });
        }
      } // Multi-drag drop


      if (dragStarted && this.isMultiDrag) {
        // Do not "unfold" after around dragEl if reverted
        if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {
          var dragRect = getRect(dragEl$1),
              multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');
          if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;
          toSortable.captureAnimationState();

          if (!initialFolding) {
            if (options.animation) {
              dragEl$1.fromRect = dragRect;
              multiDragElements.forEach(function (multiDragElement) {
                multiDragElement.thisAnimationDuration = null;

                if (multiDragElement !== dragEl$1) {
                  var rect = folding ? getRect(multiDragElement) : dragRect;
                  multiDragElement.fromRect = rect; // Prepare unfold animation

                  toSortable.addAnimationState({
                    target: multiDragElement,
                    rect: rect
                  });
                }
              });
            } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert
            // properly they must all be removed


            removeMultiDragElements();
            multiDragElements.forEach(function (multiDragElement) {
              if (children[multiDragIndex]) {
                parentEl.insertBefore(multiDragElement, children[multiDragIndex]);
              } else {
                parentEl.appendChild(multiDragElement);
              }

              multiDragIndex++;
            }); // If initial folding is done, the elements may have changed position because they are now
            // unfolding around dragEl, even though dragEl may not have his index changed, so update event
            // must be fired here as Sortable will not.

            if (oldIndex === index(dragEl$1)) {
              var update = false;
              multiDragElements.forEach(function (multiDragElement) {
                if (multiDragElement.sortableIndex !== index(multiDragElement)) {
                  update = true;
                  return;
                }
              });

              if (update) {
                dispatchSortableEvent('update');
              }
            }
          } // Must be done after capturing individual rects (scroll bar)


          multiDragElements.forEach(function (multiDragElement) {
            unsetRect(multiDragElement);
          });
          toSortable.animateAll();
        }

        multiDragSortable = toSortable;
      } // Remove clones if necessary


      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
        multiDragClones.forEach(function (clone) {
          clone.parentNode && clone.parentNode.removeChild(clone);
        });
      }
    },
    nullingGlobal: function nullingGlobal() {
      this.isMultiDrag = dragStarted = false;
      multiDragClones.length = 0;
    },
    destroyGlobal: function destroyGlobal() {
      this._deselectMultiDrag();

      off(document, 'pointerup', this._deselectMultiDrag);
      off(document, 'mouseup', this._deselectMultiDrag);
      off(document, 'touchend', this._deselectMultiDrag);
      off(document, 'keydown', this._checkKeyDown);
      off(document, 'keyup', this._checkKeyUp);
    },
    _deselectMultiDrag: function _deselectMultiDrag(evt) {
      if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable

      if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable

      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click

      if (evt && evt.button !== 0) return;

      while (multiDragElements.length) {
        var el = multiDragElements[0];
        toggleClass(el, this.options.selectedClass, false);
        multiDragElements.shift();
        dispatchEvent({
          sortable: this.sortable,
          rootEl: this.sortable.el,
          name: 'deselect',
          targetEl: el,
          originalEvt: evt
        });
      }
    },
    _checkKeyDown: function _checkKeyDown(evt) {
      if (evt.key === this.options.multiDragKey) {
        this.multiDragKeyDown = true;
      }
    },
    _checkKeyUp: function _checkKeyUp(evt) {
      if (evt.key === this.options.multiDragKey) {
        this.multiDragKeyDown = false;
      }
    }
  };
  return _extends(MultiDrag, {
    // Static methods & properties
    pluginName: 'multiDrag',
    utils: {
      /**
       * Selects the provided multi-drag item
       * @param  {HTMLElement} el    The element to be selected
       */
      select: function select(el) {
        var sortable = el.parentNode[expando];
        if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;

        if (multiDragSortable && multiDragSortable !== sortable) {
          multiDragSortable.multiDrag._deselectMultiDrag();

          multiDragSortable = sortable;
        }

        toggleClass(el, sortable.options.selectedClass, true);
        multiDragElements.push(el);
      },

      /**
       * Deselects the provided multi-drag item
       * @param  {HTMLElement} el    The element to be deselected
       */
      deselect: function deselect(el) {
        var sortable = el.parentNode[expando],
            index = multiDragElements.indexOf(el);
        if (!sortable || !sortable.options.multiDrag || !~index) return;
        toggleClass(el, sortable.options.selectedClass, false);
        multiDragElements.splice(index, 1);
      }
    },
    eventProperties: function eventProperties() {
      var _this3 = this;

      var oldIndicies = [],
          newIndicies = [];
      multiDragElements.forEach(function (multiDragElement) {
        oldIndicies.push({
          multiDragElement: multiDragElement,
          index: multiDragElement.sortableIndex
        }); // multiDragElements will already be sorted if folding

        var newIndex;

        if (folding && multiDragElement !== dragEl$1) {
          newIndex = -1;
        } else if (folding) {
          newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');
        } else {
          newIndex = index(multiDragElement);
        }

        newIndicies.push({
          multiDragElement: multiDragElement,
          index: newIndex
        });
      });
      return {
        items: _toConsumableArray(multiDragElements),
        clones: [].concat(multiDragClones),
        oldIndicies: oldIndicies,
        newIndicies: newIndicies
      };
    },
    optionListeners: {
      multiDragKey: function multiDragKey(key) {
        key = key.toLowerCase();

        if (key === 'ctrl') {
          key = 'Control';
        } else if (key.length > 1) {
          key = key.charAt(0).toUpperCase() + key.substr(1);
        }

        return key;
      }
    }
  });
}

function insertMultiDragElements(clonesInserted, rootEl) {
  multiDragElements.forEach(function (multiDragElement, i) {
    var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];

    if (target) {
      rootEl.insertBefore(multiDragElement, target);
    } else {
      rootEl.appendChild(multiDragElement);
    }
  });
}
/**
 * Insert multi-drag clones
 * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted
 * @param  {HTMLElement} rootEl
 */


function insertMultiDragClones(elementsInserted, rootEl) {
  multiDragClones.forEach(function (clone, i) {
    var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];

    if (target) {
      rootEl.insertBefore(clone, target);
    } else {
      rootEl.appendChild(clone);
    }
  });
}

function removeMultiDragElements() {
  multiDragElements.forEach(function (multiDragElement) {
    if (multiDragElement === dragEl$1) return;
    multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);
  });
}

Sortable.mount(new AutoScrollPlugin());
Sortable.mount(Remove, Revert);

export default Sortable;
export { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };
{
  "name": "sortablejs",
  "exportName": "Sortable",
  "version": "1.10.2",
  "devDependencies": {
    "@babel/core": "^7.4.4",
    "@babel/plugin-transform-object-assign": "^7.2.0",
    "@babel/preset-env": "^7.4.4",
    "rollup": "^1.11.3",
    "rollup-plugin-babel": "^4.3.2",
    "rollup-plugin-json": "^4.0.0",
    "rollup-plugin-node-resolve": "^5.0.0",
    "testcafe": "^1.3.1",
    "testcafe-browser-provider-saucelabs": "^1.7.0",
    "testcafe-reporter-xunit": "^2.1.0",
    "uglify-js": "^3.5.12"
  },
  "description": "JavaScript library for reorderable drag-and-drop lists on modern browsers and touch devices. No jQuery required. Supports Meteor, AngularJS, React, Polymer, Vue, Knockout and any CSS library, e.g. Bootstrap.",
  "main": "./Sortable.js",
  "module": "modular/sortable.esm.js",
  "maintainers": [
    "Konstantin Lebedev <ibnRubaXa@gmail.com>",
    "Owen Mills <owen23355@gmail.com>"
  ],
  "repository": {
    "type": "git",
    "url": "git://github.com/SortableJS/Sortable.git"
  },
  "files": [
    "Sortable.js",
    "Sortable.min.js",
    "modular/"
  ],
  "license": "MIT"
}/**!
 * Sortable 1.10.2
 * @author	RubaXa   <trash@rubaxa.org>
 * @author	owenm    <owen23355@gmail.com>
 * @license MIT
 */
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = global || self, global.Sortable = factory());
}(this, function () { 'use strict';

  function _typeof(obj) {
    if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
      _typeof = function (obj) {
        return typeof obj;
      };
    } else {
      _typeof = function (obj) {
        return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
      };
    }

    return _typeof(obj);
  }

  function _defineProperty(obj, key, value) {
    if (key in obj) {
      Object.defineProperty(obj, key, {
        value: value,
        enumerable: true,
        configurable: true,
        writable: true
      });
    } else {
      obj[key] = value;
    }

    return obj;
  }

  function _extends() {
    _extends = Object.assign || function (target) {
      for (var i = 1; i < arguments.length; i++) {
        var source = arguments[i];

        for (var key in source) {
          if (Object.prototype.hasOwnProperty.call(source, key)) {
            target[key] = source[key];
          }
        }
      }

      return target;
    };

    return _extends.apply(this, arguments);
  }

  function _objectSpread(target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i] != null ? arguments[i] : {};
      var ownKeys = Object.keys(source);

      if (typeof Object.getOwnPropertySymbols === 'function') {
        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
        }));
      }

      ownKeys.forEach(function (key) {
        _defineProperty(target, key, source[key]);
      });
    }

    return target;
  }

  function _objectWithoutPropertiesLoose(source, excluded) {
    if (source == null) return {};
    var target = {};
    var sourceKeys = Object.keys(source);
    var key, i;

    for (i = 0; i < sourceKeys.length; i++) {
      key = sourceKeys[i];
      if (excluded.indexOf(key) >= 0) continue;
      target[key] = source[key];
    }

    return target;
  }

  function _objectWithoutProperties(source, excluded) {
    if (source == null) return {};

    var target = _objectWithoutPropertiesLoose(source, excluded);

    var key, i;

    if (Object.getOwnPropertySymbols) {
      var sourceSymbolKeys = Object.getOwnPropertySymbols(source);

      for (i = 0; i < sourceSymbolKeys.length; i++) {
        key = sourceSymbolKeys[i];
        if (excluded.indexOf(key) >= 0) continue;
        if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
        target[key] = source[key];
      }
    }

    return target;
  }

  function _toConsumableArray(arr) {
    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
  }

  function _arrayWithoutHoles(arr) {
    if (Array.isArray(arr)) {
      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];

      return arr2;
    }
  }

  function _iterableToArray(iter) {
    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
  }

  function _nonIterableSpread() {
    throw new TypeError("Invalid attempt to spread non-iterable instance");
  }

  var version = "1.10.2";

  function userAgent(pattern) {
    if (typeof window !== 'undefined' && window.navigator) {
      return !!
      /*@__PURE__*/
      navigator.userAgent.match(pattern);
    }
  }

  var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i);
  var Edge = userAgent(/Edge/i);
  var FireFox = userAgent(/firefox/i);
  var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);
  var IOS = userAgent(/iP(ad|od|hone)/i);
  var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);

  var captureMode = {
    capture: false,
    passive: false
  };

  function on(el, event, fn) {
    el.addEventListener(event, fn, !IE11OrLess && captureMode);
  }

  function off(el, event, fn) {
    el.removeEventListener(event, fn, !IE11OrLess && captureMode);
  }

  function matches(
  /**HTMLElement*/
  el,
  /**String*/
  selector) {
    if (!selector) return;
    selector[0] === '>' && (selector = selector.substring(1));

    if (el) {
      try {
        if (el.matches) {
          return el.matches(selector);
        } else if (el.msMatchesSelector) {
          return el.msMatchesSelector(selector);
        } else if (el.webkitMatchesSelector) {
          return el.webkitMatchesSelector(selector);
        }
      } catch (_) {
        return false;
      }
    }

    return false;
  }

  function getParentOrHost(el) {
    return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;
  }

  function closest(
  /**HTMLElement*/
  el,
  /**String*/
  selector,
  /**HTMLElement*/
  ctx, includeCTX) {
    if (el) {
      ctx = ctx || document;

      do {
        if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {
          return el;
        }

        if (el === ctx) break;
        /* jshint boss:true */
      } while (el = getParentOrHost(el));
    }

    return null;
  }

  var R_SPACE = /\s+/g;

  function toggleClass(el, name, state) {
    if (el && name) {
      if (el.classList) {
        el.classList[state ? 'add' : 'remove'](name);
      } else {
        var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');
        el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');
      }
    }
  }

  function css(el, prop, val) {
    var style = el && el.style;

    if (style) {
      if (val === void 0) {
        if (document.defaultView && document.defaultView.getComputedStyle) {
          val = document.defaultView.getComputedStyle(el, '');
        } else if (el.currentStyle) {
          val = el.currentStyle;
        }

        return prop === void 0 ? val : val[prop];
      } else {
        if (!(prop in style) && prop.indexOf('webkit') === -1) {
          prop = '-webkit-' + prop;
        }

        style[prop] = val + (typeof val === 'string' ? '' : 'px');
      }
    }
  }

  function matrix(el, selfOnly) {
    var appliedTransforms = '';

    if (typeof el === 'string') {
      appliedTransforms = el;
    } else {
      do {
        var transform = css(el, 'transform');

        if (transform && transform !== 'none') {
          appliedTransforms = transform + ' ' + appliedTransforms;
        }
        /* jshint boss:true */

      } while (!selfOnly && (el = el.parentNode));
    }

    var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;
    /*jshint -W056 */

    return matrixFn && new matrixFn(appliedTransforms);
  }

  function find(ctx, tagName, iterator) {
    if (ctx) {
      var list = ctx.getElementsByTagName(tagName),
          i = 0,
          n = list.length;

      if (iterator) {
        for (; i < n; i++) {
          iterator(list[i], i);
        }
      }

      return list;
    }

    return [];
  }

  function getWindowScrollingElement() {
    var scrollingElement = document.scrollingElement;

    if (scrollingElement) {
      return scrollingElement;
    } else {
      return document.documentElement;
    }
  }
  /**
   * Returns the "bounding client rect" of given element
   * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted
   * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container
   * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr
   * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone
   * @param  {[HTMLElement]} container              The parent the element will be placed in
   * @return {Object}                               The boundingClientRect of el, with specified adjustments
   */


  function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {
    if (!el.getBoundingClientRect && el !== window) return;
    var elRect, top, left, bottom, right, height, width;

    if (el !== window && el !== getWindowScrollingElement()) {
      elRect = el.getBoundingClientRect();
      top = elRect.top;
      left = elRect.left;
      bottom = elRect.bottom;
      right = elRect.right;
      height = elRect.height;
      width = elRect.width;
    } else {
      top = 0;
      left = 0;
      bottom = window.innerHeight;
      right = window.innerWidth;
      height = window.innerHeight;
      width = window.innerWidth;
    }

    if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {
      // Adjust for translate()
      container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)
      // Not needed on <= IE11

      if (!IE11OrLess) {
        do {
          if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {
            var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container

            top -= containerRect.top + parseInt(css(container, 'border-top-width'));
            left -= containerRect.left + parseInt(css(container, 'border-left-width'));
            bottom = top + elRect.height;
            right = left + elRect.width;
            break;
          }
          /* jshint boss:true */

        } while (container = container.parentNode);
      }
    }

    if (undoScale && el !== window) {
      // Adjust for scale()
      var elMatrix = matrix(container || el),
          scaleX = elMatrix && elMatrix.a,
          scaleY = elMatrix && elMatrix.d;

      if (elMatrix) {
        top /= scaleY;
        left /= scaleX;
        width /= scaleX;
        height /= scaleY;
        bottom = top + height;
        right = left + width;
      }
    }

    return {
      top: top,
      left: left,
      bottom: bottom,
      right: right,
      width: width,
      height: height
    };
  }
  /**
   * Checks if a side of an element is scrolled past a side of its parents
   * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question
   * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')
   * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')
   * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element
   */


  function isScrolledPast(el, elSide, parentSide) {
    var parent = getParentAutoScrollElement(el, true),
        elSideVal = getRect(el)[elSide];
    /* jshint boss:true */

    while (parent) {
      var parentSideVal = getRect(parent)[parentSide],
          visible = void 0;

      if (parentSide === 'top' || parentSide === 'left') {
        visible = elSideVal >= parentSideVal;
      } else {
        visible = elSideVal <= parentSideVal;
      }

      if (!visible) return parent;
      if (parent === getWindowScrollingElement()) break;
      parent = getParentAutoScrollElement(parent, false);
    }

    return false;
  }
  /**
   * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)
   * and non-draggable elements
   * @param  {HTMLElement} el       The parent element
   * @param  {Number} childNum      The index of the child
   * @param  {Object} options       Parent Sortable's options
   * @return {HTMLElement}          The child at index childNum, or null if not found
   */


  function getChild(el, childNum, options) {
    var currentChild = 0,
        i = 0,
        children = el.children;

    while (i < children.length) {
      if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && children[i] !== Sortable.dragged && closest(children[i], options.draggable, el, false)) {
        if (currentChild === childNum) {
          return children[i];
        }

        currentChild++;
      }

      i++;
    }

    return null;
  }
  /**
   * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)
   * @param  {HTMLElement} el       Parent element
   * @param  {selector} selector    Any other elements that should be ignored
   * @return {HTMLElement}          The last child, ignoring ghostEl
   */


  function lastChild(el, selector) {
    var last = el.lastElementChild;

    while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {
      last = last.previousElementSibling;
    }

    return last || null;
  }
  /**
   * Returns the index of an element within its parent for a selected set of
   * elements
   * @param  {HTMLElement} el
   * @param  {selector} selector
   * @return {number}
   */


  function index(el, selector) {
    var index = 0;

    if (!el || !el.parentNode) {
      return -1;
    }
    /* jshint boss:true */


    while (el = el.previousElementSibling) {
      if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {
        index++;
      }
    }

    return index;
  }
  /**
   * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.
   * The value is returned in real pixels.
   * @param  {HTMLElement} el
   * @return {Array}             Offsets in the format of [left, top]
   */


  function getRelativeScrollOffset(el) {
    var offsetLeft = 0,
        offsetTop = 0,
        winScroller = getWindowScrollingElement();

    if (el) {
      do {
        var elMatrix = matrix(el),
            scaleX = elMatrix.a,
            scaleY = elMatrix.d;
        offsetLeft += el.scrollLeft * scaleX;
        offsetTop += el.scrollTop * scaleY;
      } while (el !== winScroller && (el = el.parentNode));
    }

    return [offsetLeft, offsetTop];
  }
  /**
   * Returns the index of the object within the given array
   * @param  {Array} arr   Array that may or may not hold the object
   * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find
   * @return {Number}      The index of the object in the array, or -1
   */


  function indexOfObject(arr, obj) {
    for (var i in arr) {
      if (!arr.hasOwnProperty(i)) continue;

      for (var key in obj) {
        if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);
      }
    }

    return -1;
  }

  function getParentAutoScrollElement(el, includeSelf) {
    // skip to window
    if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();
    var elem = el;
    var gotSelf = false;

    do {
      // we don't need to get elem css if it isn't even overflowing in the first place (performance)
      if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {
        var elemCSS = css(elem);

        if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {
          if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();
          if (gotSelf || includeSelf) return elem;
          gotSelf = true;
        }
      }
      /* jshint boss:true */

    } while (elem = elem.parentNode);

    return getWindowScrollingElement();
  }

  function extend(dst, src) {
    if (dst && src) {
      for (var key in src) {
        if (src.hasOwnProperty(key)) {
          dst[key] = src[key];
        }
      }
    }

    return dst;
  }

  function isRectEqual(rect1, rect2) {
    return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);
  }

  var _throttleTimeout;

  function throttle(callback, ms) {
    return function () {
      if (!_throttleTimeout) {
        var args = arguments,
            _this = this;

        if (args.length === 1) {
          callback.call(_this, args[0]);
        } else {
          callback.apply(_this, args);
        }

        _throttleTimeout = setTimeout(function () {
          _throttleTimeout = void 0;
        }, ms);
      }
    };
  }

  function cancelThrottle() {
    clearTimeout(_throttleTimeout);
    _throttleTimeout = void 0;
  }

  function scrollBy(el, x, y) {
    el.scrollLeft += x;
    el.scrollTop += y;
  }

  function clone(el) {
    var Polymer = window.Polymer;
    var $ = window.jQuery || window.Zepto;

    if (Polymer && Polymer.dom) {
      return Polymer.dom(el).cloneNode(true);
    } else if ($) {
      return $(el).clone(true)[0];
    } else {
      return el.cloneNode(true);
    }
  }

  function setRect(el, rect) {
    css(el, 'position', 'absolute');
    css(el, 'top', rect.top);
    css(el, 'left', rect.left);
    css(el, 'width', rect.width);
    css(el, 'height', rect.height);
  }

  function unsetRect(el) {
    css(el, 'position', '');
    css(el, 'top', '');
    css(el, 'left', '');
    css(el, 'width', '');
    css(el, 'height', '');
  }

  var expando = 'Sortable' + new Date().getTime();

  function AnimationStateManager() {
    var animationStates = [],
        animationCallbackId;
    return {
      captureAnimationState: function captureAnimationState() {
        animationStates = [];
        if (!this.options.animation) return;
        var children = [].slice.call(this.el.children);
        children.forEach(function (child) {
          if (css(child, 'display') === 'none' || child === Sortable.ghost) return;
          animationStates.push({
            target: child,
            rect: getRect(child)
          });

          var fromRect = _objectSpread({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation


          if (child.thisAnimationDuration) {
            var childMatrix = matrix(child, true);

            if (childMatrix) {
              fromRect.top -= childMatrix.f;
              fromRect.left -= childMatrix.e;
            }
          }

          child.fromRect = fromRect;
        });
      },
      addAnimationState: function addAnimationState(state) {
        animationStates.push(state);
      },
      removeAnimationState: function removeAnimationState(target) {
        animationStates.splice(indexOfObject(animationStates, {
          target: target
        }), 1);
      },
      animateAll: function animateAll(callback) {
        var _this = this;

        if (!this.options.animation) {
          clearTimeout(animationCallbackId);
          if (typeof callback === 'function') callback();
          return;
        }

        var animating = false,
            animationTime = 0;
        animationStates.forEach(function (state) {
          var time = 0,
              target = state.target,
              fromRect = target.fromRect,
              toRect = getRect(target),
              prevFromRect = target.prevFromRect,
              prevToRect = target.prevToRect,
              animatingRect = state.rect,
              targetMatrix = matrix(target, true);

          if (targetMatrix) {
            // Compensate for current animation
            toRect.top -= targetMatrix.f;
            toRect.left -= targetMatrix.e;
          }

          target.toRect = toRect;

          if (target.thisAnimationDuration) {
            // Could also check if animatingRect is between fromRect and toRect
            if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect
            (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {
              // If returning to same place as started from animation and on same axis
              time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);
            }
          } // if fromRect != toRect: animate


          if (!isRectEqual(toRect, fromRect)) {
            target.prevFromRect = fromRect;
            target.prevToRect = toRect;

            if (!time) {
              time = _this.options.animation;
            }

            _this.animate(target, animatingRect, toRect, time);
          }

          if (time) {
            animating = true;
            animationTime = Math.max(animationTime, time);
            clearTimeout(target.animationResetTimer);
            target.animationResetTimer = setTimeout(function () {
              target.animationTime = 0;
              target.prevFromRect = null;
              target.fromRect = null;
              target.prevToRect = null;
              target.thisAnimationDuration = null;
            }, time);
            target.thisAnimationDuration = time;
          }
        });
        clearTimeout(animationCallbackId);

        if (!animating) {
          if (typeof callback === 'function') callback();
        } else {
          animationCallbackId = setTimeout(function () {
            if (typeof callback === 'function') callback();
          }, animationTime);
        }

        animationStates = [];
      },
      animate: function animate(target, currentRect, toRect, duration) {
        if (duration) {
          css(target, 'transition', '');
          css(target, 'transform', '');
          var elMatrix = matrix(this.el),
              scaleX = elMatrix && elMatrix.a,
              scaleY = elMatrix && elMatrix.d,
              translateX = (currentRect.left - toRect.left) / (scaleX || 1),
              translateY = (currentRect.top - toRect.top) / (scaleY || 1);
          target.animatingX = !!translateX;
          target.animatingY = !!translateY;
          css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');
          repaint(target); // repaint

          css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));
          css(target, 'transform', 'translate3d(0,0,0)');
          typeof target.animated === 'number' && clearTimeout(target.animated);
          target.animated = setTimeout(function () {
            css(target, 'transition', '');
            css(target, 'transform', '');
            target.animated = false;
            target.animatingX = false;
            target.animatingY = false;
          }, duration);
        }
      }
    };
  }

  function repaint(target) {
    return target.offsetWidth;
  }

  function calculateRealTime(animatingRect, fromRect, toRect, options) {
    return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;
  }

  var plugins = [];
  var defaults = {
    initializeByDefault: true
  };
  var PluginManager = {
    mount: function mount(plugin) {
      // Set default static properties
      for (var option in defaults) {
        if (defaults.hasOwnProperty(option) && !(option in plugin)) {
          plugin[option] = defaults[option];
        }
      }

      plugins.push(plugin);
    },
    pluginEvent: function pluginEvent(eventName, sortable, evt) {
      var _this = this;

      this.eventCanceled = false;

      evt.cancel = function () {
        _this.eventCanceled = true;
      };

      var eventNameGlobal = eventName + 'Global';
      plugins.forEach(function (plugin) {
        if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable

        if (sortable[plugin.pluginName][eventNameGlobal]) {
          sortable[plugin.pluginName][eventNameGlobal](_objectSpread({
            sortable: sortable
          }, evt));
        } // Only fire plugin event if plugin is enabled in this sortable,
        // and plugin has event defined


        if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {
          sortable[plugin.pluginName][eventName](_objectSpread({
            sortable: sortable
          }, evt));
        }
      });
    },
    initializePlugins: function initializePlugins(sortable, el, defaults, options) {
      plugins.forEach(function (plugin) {
        var pluginName = plugin.pluginName;
        if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;
        var initialized = new plugin(sortable, el, sortable.options);
        initialized.sortable = sortable;
        initialized.options = sortable.options;
        sortable[pluginName] = initialized; // Add default options from plugin

        _extends(defaults, initialized.defaults);
      });

      for (var option in sortable.options) {
        if (!sortable.options.hasOwnProperty(option)) continue;
        var modified = this.modifyOption(sortable, option, sortable.options[option]);

        if (typeof modified !== 'undefined') {
          sortable.options[option] = modified;
        }
      }
    },
    getEventProperties: function getEventProperties(name, sortable) {
      var eventProperties = {};
      plugins.forEach(function (plugin) {
        if (typeof plugin.eventProperties !== 'function') return;

        _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));
      });
      return eventProperties;
    },
    modifyOption: function modifyOption(sortable, name, value) {
      var modifiedValue;
      plugins.forEach(function (plugin) {
        // Plugin must exist on the Sortable
        if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin

        if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {
          modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);
        }
      });
      return modifiedValue;
    }
  };

  function dispatchEvent(_ref) {
    var sortable = _ref.sortable,
        rootEl = _ref.rootEl,
        name = _ref.name,
        targetEl = _ref.targetEl,
        cloneEl = _ref.cloneEl,
        toEl = _ref.toEl,
        fromEl = _ref.fromEl,
        oldIndex = _ref.oldIndex,
        newIndex = _ref.newIndex,
        oldDraggableIndex = _ref.oldDraggableIndex,
        newDraggableIndex = _ref.newDraggableIndex,
        originalEvent = _ref.originalEvent,
        putSortable = _ref.putSortable,
        extraEventProperties = _ref.extraEventProperties;
    sortable = sortable || rootEl && rootEl[expando];
    if (!sortable) return;
    var evt,
        options = sortable.options,
        onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature

    if (window.CustomEvent && !IE11OrLess && !Edge) {
      evt = new CustomEvent(name, {
        bubbles: true,
        cancelable: true
      });
    } else {
      evt = document.createEvent('Event');
      evt.initEvent(name, true, true);
    }

    evt.to = toEl || rootEl;
    evt.from = fromEl || rootEl;
    evt.item = targetEl || rootEl;
    evt.clone = cloneEl;
    evt.oldIndex = oldIndex;
    evt.newIndex = newIndex;
    evt.oldDraggableIndex = oldDraggableIndex;
    evt.newDraggableIndex = newDraggableIndex;
    evt.originalEvent = originalEvent;
    evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;

    var allEventProperties = _objectSpread({}, extraEventProperties, PluginManager.getEventProperties(name, sortable));

    for (var option in allEventProperties) {
      evt[option] = allEventProperties[option];
    }

    if (rootEl) {
      rootEl.dispatchEvent(evt);
    }

    if (options[onName]) {
      options[onName].call(sortable, evt);
    }
  }

  var pluginEvent = function pluginEvent(eventName, sortable) {
    var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
        originalEvent = _ref.evt,
        data = _objectWithoutProperties(_ref, ["evt"]);

    PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread({
      dragEl: dragEl,
      parentEl: parentEl,
      ghostEl: ghostEl,
      rootEl: rootEl,
      nextEl: nextEl,
      lastDownEl: lastDownEl,
      cloneEl: cloneEl,
      cloneHidden: cloneHidden,
      dragStarted: moved,
      putSortable: putSortable,
      activeSortable: Sortable.active,
      originalEvent: originalEvent,
      oldIndex: oldIndex,
      oldDraggableIndex: oldDraggableIndex,
      newIndex: newIndex,
      newDraggableIndex: newDraggableIndex,
      hideGhostForTarget: _hideGhostForTarget,
      unhideGhostForTarget: _unhideGhostForTarget,
      cloneNowHidden: function cloneNowHidden() {
        cloneHidden = true;
      },
      cloneNowShown: function cloneNowShown() {
        cloneHidden = false;
      },
      dispatchSortableEvent: function dispatchSortableEvent(name) {
        _dispatchEvent({
          sortable: sortable,
          name: name,
          originalEvent: originalEvent
        });
      }
    }, data));
  };

  function _dispatchEvent(info) {
    dispatchEvent(_objectSpread({
      putSortable: putSortable,
      cloneEl: cloneEl,
      targetEl: dragEl,
      rootEl: rootEl,
      oldIndex: oldIndex,
      oldDraggableIndex: oldDraggableIndex,
      newIndex: newIndex,
      newDraggableIndex: newDraggableIndex
    }, info));
  }

  var dragEl,
      parentEl,
      ghostEl,
      rootEl,
      nextEl,
      lastDownEl,
      cloneEl,
      cloneHidden,
      oldIndex,
      newIndex,
      oldDraggableIndex,
      newDraggableIndex,
      activeGroup,
      putSortable,
      awaitingDragStarted = false,
      ignoreNextClick = false,
      sortables = [],
      tapEvt,
      touchEvt,
      lastDx,
      lastDy,
      tapDistanceLeft,
      tapDistanceTop,
      moved,
      lastTarget,
      lastDirection,
      pastFirstInvertThresh = false,
      isCircumstantialInvert = false,
      targetMoveDistance,
      // For positioning ghost absolutely
  ghostRelativeParent,
      ghostRelativeParentInitialScroll = [],
      // (left, top)
  _silent = false,
      savedInputChecked = [];
  /** @const */

  var documentExists = typeof document !== 'undefined',
      PositionGhostAbsolutely = IOS,
      CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',
      // This will not pass for IE9, because IE9 DnD only works on anchors
  supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),
      supportCssPointerEvents = function () {
    if (!documentExists) return; // false when <= IE11

    if (IE11OrLess) {
      return false;
    }

    var el = document.createElement('x');
    el.style.cssText = 'pointer-events:auto';
    return el.style.pointerEvents === 'auto';
  }(),
      _detectDirection = function _detectDirection(el, options) {
    var elCSS = css(el),
        elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),
        child1 = getChild(el, 0, options),
        child2 = getChild(el, 1, options),
        firstChildCSS = child1 && css(child1),
        secondChildCSS = child2 && css(child2),
        firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,
        secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;

    if (elCSS.display === 'flex') {
      return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';
    }

    if (elCSS.display === 'grid') {
      return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';
    }

    if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') {
      var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right';
      return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';
    }

    return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';
  },
      _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {
    var dragElS1Opp = vertical ? dragRect.left : dragRect.top,
        dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,
        dragElOppLength = vertical ? dragRect.width : dragRect.height,
        targetS1Opp = vertical ? targetRect.left : targetRect.top,
        targetS2Opp = vertical ? targetRect.right : targetRect.bottom,
        targetOppLength = vertical ? targetRect.width : targetRect.height;
    return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;
  },

  /**
   * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.
   * @param  {Number} x      X position
   * @param  {Number} y      Y position
   * @return {HTMLElement}   Element of the first found nearest Sortable
   */
  _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {
    var ret;
    sortables.some(function (sortable) {
      if (lastChild(sortable)) return;
      var rect = getRect(sortable),
          threshold = sortable[expando].options.emptyInsertThreshold,
          insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,
          insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;

      if (threshold && insideHorizontally && insideVertically) {
        return ret = sortable;
      }
    });
    return ret;
  },
      _prepareGroup = function _prepareGroup(options) {
    function toFn(value, pull) {
      return function (to, from, dragEl, evt) {
        var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;

        if (value == null && (pull || sameGroup)) {
          // Default pull value
          // Default pull and put value if same group
          return true;
        } else if (value == null || value === false) {
          return false;
        } else if (pull && value === 'clone') {
          return value;
        } else if (typeof value === 'function') {
          return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);
        } else {
          var otherGroup = (pull ? to : from).options.group.name;
          return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;
        }
      };
    }

    var group = {};
    var originalGroup = options.group;

    if (!originalGroup || _typeof(originalGroup) != 'object') {
      originalGroup = {
        name: originalGroup
      };
    }

    group.name = originalGroup.name;
    group.checkPull = toFn(originalGroup.pull, true);
    group.checkPut = toFn(originalGroup.put);
    group.revertClone = originalGroup.revertClone;
    options.group = group;
  },
      _hideGhostForTarget = function _hideGhostForTarget() {
    if (!supportCssPointerEvents && ghostEl) {
      css(ghostEl, 'display', 'none');
    }
  },
      _unhideGhostForTarget = function _unhideGhostForTarget() {
    if (!supportCssPointerEvents && ghostEl) {
      css(ghostEl, 'display', '');
    }
  }; // #1184 fix - Prevent click event on fallback if dragged but item not changed position


  if (documentExists) {
    document.addEventListener('click', function (evt) {
      if (ignoreNextClick) {
        evt.preventDefault();
        evt.stopPropagation && evt.stopPropagation();
        evt.stopImmediatePropagation && evt.stopImmediatePropagation();
        ignoreNextClick = false;
        return false;
      }
    }, true);
  }

  var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {
    if (dragEl) {
      evt = evt.touches ? evt.touches[0] : evt;

      var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);

      if (nearest) {
        // Create imitation event
        var event = {};

        for (var i in evt) {
          if (evt.hasOwnProperty(i)) {
            event[i] = evt[i];
          }
        }

        event.target = event.rootEl = nearest;
        event.preventDefault = void 0;
        event.stopPropagation = void 0;

        nearest[expando]._onDragOver(event);
      }
    }
  };

  var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {
    if (dragEl) {
      dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
    }
  };
  /**
   * @class  Sortable
   * @param  {HTMLElement}  el
   * @param  {Object}       [options]
   */


  function Sortable(el, options) {
    if (!(el && el.nodeType && el.nodeType === 1)) {
      throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el));
    }

    this.el = el; // root element

    this.options = options = _extends({}, options); // Export instance

    el[expando] = this;
    var defaults = {
      group: null,
      sort: true,
      disabled: false,
      store: null,
      handle: null,
      draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',
      swapThreshold: 1,
      // percentage; 0 <= x <= 1
      invertSwap: false,
      // invert always
      invertedSwapThreshold: null,
      // will be set to same as swapThreshold if default
      removeCloneOnHide: true,
      direction: function direction() {
        return _detectDirection(el, this.options);
      },
      ghostClass: 'sortable-ghost',
      chosenClass: 'sortable-chosen',
      dragClass: 'sortable-drag',
      ignore: 'a, img',
      filter: null,
      preventOnFilter: true,
      animation: 0,
      easing: null,
      setData: function setData(dataTransfer, dragEl) {
        dataTransfer.setData('Text', dragEl.textContent);
      },
      dropBubble: false,
      dragoverBubble: false,
      dataIdAttr: 'data-id',
      delay: 0,
      delayOnTouchOnly: false,
      touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,
      forceFallback: false,
      fallbackClass: 'sortable-fallback',
      fallbackOnBody: false,
      fallbackTolerance: 0,
      fallbackOffset: {
        x: 0,
        y: 0
      },
      supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window,
      emptyInsertThreshold: 5
    };
    PluginManager.initializePlugins(this, el, defaults); // Set default options

    for (var name in defaults) {
      !(name in options) && (options[name] = defaults[name]);
    }

    _prepareGroup(options); // Bind all private methods


    for (var fn in this) {
      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
        this[fn] = this[fn].bind(this);
      }
    } // Setup drag mode


    this.nativeDraggable = options.forceFallback ? false : supportDraggable;

    if (this.nativeDraggable) {
      // Touch start threshold cannot be greater than the native dragstart threshold
      this.options.touchStartThreshold = 1;
    } // Bind events


    if (options.supportPointer) {
      on(el, 'pointerdown', this._onTapStart);
    } else {
      on(el, 'mousedown', this._onTapStart);
      on(el, 'touchstart', this._onTapStart);
    }

    if (this.nativeDraggable) {
      on(el, 'dragover', this);
      on(el, 'dragenter', this);
    }

    sortables.push(this.el); // Restore sorting

    options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager

    _extends(this, AnimationStateManager());
  }

  Sortable.prototype =
  /** @lends Sortable.prototype */
  {
    constructor: Sortable,
    _isOutsideThisEl: function _isOutsideThisEl(target) {
      if (!this.el.contains(target) && target !== this.el) {
        lastTarget = null;
      }
    },
    _getDirection: function _getDirection(evt, target) {
      return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;
    },
    _onTapStart: function _onTapStart(
    /** Event|TouchEvent */
    evt) {
      if (!evt.cancelable) return;

      var _this = this,
          el = this.el,
          options = this.options,
          preventOnFilter = options.preventOnFilter,
          type = evt.type,
          touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,
          target = (touch || evt).target,
          originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,
          filter = options.filter;

      _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.


      if (dragEl) {
        return;
      }

      if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {
        return; // only left button and enabled
      } // cancel dnd if original target is content editable


      if (originalTarget.isContentEditable) {
        return;
      }

      target = closest(target, options.draggable, el, false);

      if (target && target.animated) {
        return;
      }

      if (lastDownEl === target) {
        // Ignoring duplicate `down`
        return;
      } // Get the index of the dragged element within its parent


      oldIndex = index(target);
      oldDraggableIndex = index(target, options.draggable); // Check filter

      if (typeof filter === 'function') {
        if (filter.call(this, evt, target, this)) {
          _dispatchEvent({
            sortable: _this,
            rootEl: originalTarget,
            name: 'filter',
            targetEl: target,
            toEl: el,
            fromEl: el
          });

          pluginEvent('filter', _this, {
            evt: evt
          });
          preventOnFilter && evt.cancelable && evt.preventDefault();
          return; // cancel dnd
        }
      } else if (filter) {
        filter = filter.split(',').some(function (criteria) {
          criteria = closest(originalTarget, criteria.trim(), el, false);

          if (criteria) {
            _dispatchEvent({
              sortable: _this,
              rootEl: criteria,
              name: 'filter',
              targetEl: target,
              fromEl: el,
              toEl: el
            });

            pluginEvent('filter', _this, {
              evt: evt
            });
            return true;
          }
        });

        if (filter) {
          preventOnFilter && evt.cancelable && evt.preventDefault();
          return; // cancel dnd
        }
      }

      if (options.handle && !closest(originalTarget, options.handle, el, false)) {
        return;
      } // Prepare `dragstart`


      this._prepareDragStart(evt, touch, target);
    },
    _prepareDragStart: function _prepareDragStart(
    /** Event */
    evt,
    /** Touch */
    touch,
    /** HTMLElement */
    target) {
      var _this = this,
          el = _this.el,
          options = _this.options,
          ownerDocument = el.ownerDocument,
          dragStartFn;

      if (target && !dragEl && target.parentNode === el) {
        var dragRect = getRect(target);
        rootEl = el;
        dragEl = target;
        parentEl = dragEl.parentNode;
        nextEl = dragEl.nextSibling;
        lastDownEl = target;
        activeGroup = options.group;
        Sortable.dragged = dragEl;
        tapEvt = {
          target: dragEl,
          clientX: (touch || evt).clientX,
          clientY: (touch || evt).clientY
        };
        tapDistanceLeft = tapEvt.clientX - dragRect.left;
        tapDistanceTop = tapEvt.clientY - dragRect.top;
        this._lastX = (touch || evt).clientX;
        this._lastY = (touch || evt).clientY;
        dragEl.style['will-change'] = 'all';

        dragStartFn = function dragStartFn() {
          pluginEvent('delayEnded', _this, {
            evt: evt
          });

          if (Sortable.eventCanceled) {
            _this._onDrop();

            return;
          } // Delayed drag has been triggered
          // we can re-enable the events: touchmove/mousemove


          _this._disableDelayedDragEvents();

          if (!FireFox && _this.nativeDraggable) {
            dragEl.draggable = true;
          } // Bind the events: dragstart/dragend


          _this._triggerDragStart(evt, touch); // Drag start event


          _dispatchEvent({
            sortable: _this,
            name: 'choose',
            originalEvent: evt
          }); // Chosen item


          toggleClass(dragEl, options.chosenClass, true);
        }; // Disable "draggable"


        options.ignore.split(',').forEach(function (criteria) {
          find(dragEl, criteria.trim(), _disableDraggable);
        });
        on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);
        on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);
        on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);
        on(ownerDocument, 'mouseup', _this._onDrop);
        on(ownerDocument, 'touchend', _this._onDrop);
        on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)

        if (FireFox && this.nativeDraggable) {
          this.options.touchStartThreshold = 4;
          dragEl.draggable = true;
        }

        pluginEvent('delayStart', this, {
          evt: evt
        }); // Delay is impossible for native DnD in Edge or IE

        if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {
          if (Sortable.eventCanceled) {
            this._onDrop();

            return;
          } // If the user moves the pointer or let go the click or touch
          // before the delay has been reached:
          // disable the delayed drag


          on(ownerDocument, 'mouseup', _this._disableDelayedDrag);
          on(ownerDocument, 'touchend', _this._disableDelayedDrag);
          on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);
          on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);
          on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);
          options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);
          _this._dragStartTimer = setTimeout(dragStartFn, options.delay);
        } else {
          dragStartFn();
        }
      }
    },
    _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(
    /** TouchEvent|PointerEvent **/
    e) {
      var touch = e.touches ? e.touches[0] : e;

      if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {
        this._disableDelayedDrag();
      }
    },
    _disableDelayedDrag: function _disableDelayedDrag() {
      dragEl && _disableDraggable(dragEl);
      clearTimeout(this._dragStartTimer);

      this._disableDelayedDragEvents();
    },
    _disableDelayedDragEvents: function _disableDelayedDragEvents() {
      var ownerDocument = this.el.ownerDocument;
      off(ownerDocument, 'mouseup', this._disableDelayedDrag);
      off(ownerDocument, 'touchend', this._disableDelayedDrag);
      off(ownerDocument, 'touchcancel', this._disableDelayedDrag);
      off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);
      off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);
      off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);
    },
    _triggerDragStart: function _triggerDragStart(
    /** Event */
    evt,
    /** Touch */
    touch) {
      touch = touch || evt.pointerType == 'touch' && evt;

      if (!this.nativeDraggable || touch) {
        if (this.options.supportPointer) {
          on(document, 'pointermove', this._onTouchMove);
        } else if (touch) {
          on(document, 'touchmove', this._onTouchMove);
        } else {
          on(document, 'mousemove', this._onTouchMove);
        }
      } else {
        on(dragEl, 'dragend', this);
        on(rootEl, 'dragstart', this._onDragStart);
      }

      try {
        if (document.selection) {
          // Timeout neccessary for IE9
          _nextTick(function () {
            document.selection.empty();
          });
        } else {
          window.getSelection().removeAllRanges();
        }
      } catch (err) {}
    },
    _dragStarted: function _dragStarted(fallback, evt) {

      awaitingDragStarted = false;

      if (rootEl && dragEl) {
        pluginEvent('dragStarted', this, {
          evt: evt
        });

        if (this.nativeDraggable) {
          on(document, 'dragover', _checkOutsideTargetEl);
        }

        var options = this.options; // Apply effect

        !fallback && toggleClass(dragEl, options.dragClass, false);
        toggleClass(dragEl, options.ghostClass, true);
        Sortable.active = this;
        fallback && this._appendGhost(); // Drag start event

        _dispatchEvent({
          sortable: this,
          name: 'start',
          originalEvent: evt
        });
      } else {
        this._nulling();
      }
    },
    _emulateDragOver: function _emulateDragOver() {
      if (touchEvt) {
        this._lastX = touchEvt.clientX;
        this._lastY = touchEvt.clientY;

        _hideGhostForTarget();

        var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
        var parent = target;

        while (target && target.shadowRoot) {
          target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
          if (target === parent) break;
          parent = target;
        }

        dragEl.parentNode[expando]._isOutsideThisEl(target);

        if (parent) {
          do {
            if (parent[expando]) {
              var inserted = void 0;
              inserted = parent[expando]._onDragOver({
                clientX: touchEvt.clientX,
                clientY: touchEvt.clientY,
                target: target,
                rootEl: parent
              });

              if (inserted && !this.options.dragoverBubble) {
                break;
              }
            }

            target = parent; // store last element
          }
          /* jshint boss:true */
          while (parent = parent.parentNode);
        }

        _unhideGhostForTarget();
      }
    },
    _onTouchMove: function _onTouchMove(
    /**TouchEvent*/
    evt) {
      if (tapEvt) {
        var options = this.options,
            fallbackTolerance = options.fallbackTolerance,
            fallbackOffset = options.fallbackOffset,
            touch = evt.touches ? evt.touches[0] : evt,
            ghostMatrix = ghostEl && matrix(ghostEl, true),
            scaleX = ghostEl && ghostMatrix && ghostMatrix.a,
            scaleY = ghostEl && ghostMatrix && ghostMatrix.d,
            relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),
            dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),
            dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging

        if (!Sortable.active && !awaitingDragStarted) {
          if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {
            return;
          }

          this._onDragStart(evt, true);
        }

        if (ghostEl) {
          if (ghostMatrix) {
            ghostMatrix.e += dx - (lastDx || 0);
            ghostMatrix.f += dy - (lastDy || 0);
          } else {
            ghostMatrix = {
              a: 1,
              b: 0,
              c: 0,
              d: 1,
              e: dx,
              f: dy
            };
          }

          var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")");
          css(ghostEl, 'webkitTransform', cssMatrix);
          css(ghostEl, 'mozTransform', cssMatrix);
          css(ghostEl, 'msTransform', cssMatrix);
          css(ghostEl, 'transform', cssMatrix);
          lastDx = dx;
          lastDy = dy;
          touchEvt = touch;
        }

        evt.cancelable && evt.preventDefault();
      }
    },
    _appendGhost: function _appendGhost() {
      // Bug if using scale(): https://stackoverflow.com/questions/2637058
      // Not being adjusted for
      if (!ghostEl) {
        var container = this.options.fallbackOnBody ? document.body : rootEl,
            rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),
            options = this.options; // Position absolutely

        if (PositionGhostAbsolutely) {
          // Get relatively positioned parent
          ghostRelativeParent = container;

          while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {
            ghostRelativeParent = ghostRelativeParent.parentNode;
          }

          if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {
            if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();
            rect.top += ghostRelativeParent.scrollTop;
            rect.left += ghostRelativeParent.scrollLeft;
          } else {
            ghostRelativeParent = getWindowScrollingElement();
          }

          ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);
        }

        ghostEl = dragEl.cloneNode(true);
        toggleClass(ghostEl, options.ghostClass, false);
        toggleClass(ghostEl, options.fallbackClass, true);
        toggleClass(ghostEl, options.dragClass, true);
        css(ghostEl, 'transition', '');
        css(ghostEl, 'transform', '');
        css(ghostEl, 'box-sizing', 'border-box');
        css(ghostEl, 'margin', 0);
        css(ghostEl, 'top', rect.top);
        css(ghostEl, 'left', rect.left);
        css(ghostEl, 'width', rect.width);
        css(ghostEl, 'height', rect.height);
        css(ghostEl, 'opacity', '0.8');
        css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');
        css(ghostEl, 'zIndex', '100000');
        css(ghostEl, 'pointerEvents', 'none');
        Sortable.ghost = ghostEl;
        container.appendChild(ghostEl); // Set transform-origin

        css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');
      }
    },
    _onDragStart: function _onDragStart(
    /**Event*/
    evt,
    /**boolean*/
    fallback) {
      var _this = this;

      var dataTransfer = evt.dataTransfer;
      var options = _this.options;
      pluginEvent('dragStart', this, {
        evt: evt
      });

      if (Sortable.eventCanceled) {
        this._onDrop();

        return;
      }

      pluginEvent('setupClone', this);

      if (!Sortable.eventCanceled) {
        cloneEl = clone(dragEl);
        cloneEl.draggable = false;
        cloneEl.style['will-change'] = '';

        this._hideClone();

        toggleClass(cloneEl, this.options.chosenClass, false);
        Sortable.clone = cloneEl;
      } // #1143: IFrame support workaround


      _this.cloneId = _nextTick(function () {
        pluginEvent('clone', _this);
        if (Sortable.eventCanceled) return;

        if (!_this.options.removeCloneOnHide) {
          rootEl.insertBefore(cloneEl, dragEl);
        }

        _this._hideClone();

        _dispatchEvent({
          sortable: _this,
          name: 'clone'
        });
      });
      !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events

      if (fallback) {
        ignoreNextClick = true;
        _this._loopId = setInterval(_this._emulateDragOver, 50);
      } else {
        // Undo what was set in _prepareDragStart before drag started
        off(document, 'mouseup', _this._onDrop);
        off(document, 'touchend', _this._onDrop);
        off(document, 'touchcancel', _this._onDrop);

        if (dataTransfer) {
          dataTransfer.effectAllowed = 'move';
          options.setData && options.setData.call(_this, dataTransfer, dragEl);
        }

        on(document, 'drop', _this); // #1276 fix:

        css(dragEl, 'transform', 'translateZ(0)');
      }

      awaitingDragStarted = true;
      _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));
      on(document, 'selectstart', _this);
      moved = true;

      if (Safari) {
        css(document.body, 'user-select', 'none');
      }
    },
    // Returns true - if no further action is needed (either inserted or another condition)
    _onDragOver: function _onDragOver(
    /**Event*/
    evt) {
      var el = this.el,
          target = evt.target,
          dragRect,
          targetRect,
          revert,
          options = this.options,
          group = options.group,
          activeSortable = Sortable.active,
          isOwner = activeGroup === group,
          canSort = options.sort,
          fromSortable = putSortable || activeSortable,
          vertical,
          _this = this,
          completedFired = false;

      if (_silent) return;

      function dragOverEvent(name, extra) {
        pluginEvent(name, _this, _objectSpread({
          evt: evt,
          isOwner: isOwner,
          axis: vertical ? 'vertical' : 'horizontal',
          revert: revert,
          dragRect: dragRect,
          targetRect: targetRect,
          canSort: canSort,
          fromSortable: fromSortable,
          target: target,
          completed: completed,
          onMove: function onMove(target, after) {
            return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);
          },
          changed: changed
        }, extra));
      } // Capture animation state


      function capture() {
        dragOverEvent('dragOverAnimationCapture');

        _this.captureAnimationState();

        if (_this !== fromSortable) {
          fromSortable.captureAnimationState();
        }
      } // Return invocation when dragEl is inserted (or completed)


      function completed(insertion) {
        dragOverEvent('dragOverCompleted', {
          insertion: insertion
        });

        if (insertion) {
          // Clones must be hidden before folding animation to capture dragRectAbsolute properly
          if (isOwner) {
            activeSortable._hideClone();
          } else {
            activeSortable._showClone(_this);
          }

          if (_this !== fromSortable) {
            // Set ghost class to new sortable's ghost class
            toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);
            toggleClass(dragEl, options.ghostClass, true);
          }

          if (putSortable !== _this && _this !== Sortable.active) {
            putSortable = _this;
          } else if (_this === Sortable.active && putSortable) {
            putSortable = null;
          } // Animation


          if (fromSortable === _this) {
            _this._ignoreWhileAnimating = target;
          }

          _this.animateAll(function () {
            dragOverEvent('dragOverAnimationComplete');
            _this._ignoreWhileAnimating = null;
          });

          if (_this !== fromSortable) {
            fromSortable.animateAll();
            fromSortable._ignoreWhileAnimating = null;
          }
        } // Null lastTarget if it is not inside a previously swapped element


        if (target === dragEl && !dragEl.animated || target === el && !target.animated) {
          lastTarget = null;
        } // no bubbling and not fallback


        if (!options.dragoverBubble && !evt.rootEl && target !== document) {
          dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted


          !insertion && nearestEmptyInsertDetectEvent(evt);
        }

        !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();
        return completedFired = true;
      } // Call when dragEl has been inserted


      function changed() {
        newIndex = index(dragEl);
        newDraggableIndex = index(dragEl, options.draggable);

        _dispatchEvent({
          sortable: _this,
          name: 'change',
          toEl: el,
          newIndex: newIndex,
          newDraggableIndex: newDraggableIndex,
          originalEvent: evt
        });
      }

      if (evt.preventDefault !== void 0) {
        evt.cancelable && evt.preventDefault();
      }

      target = closest(target, options.draggable, el, true);
      dragOverEvent('dragOver');
      if (Sortable.eventCanceled) return completedFired;

      if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {
        return completed(false);
      }

      ignoreNextClick = false;

      if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list
      : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {
        vertical = this._getDirection(evt, target) === 'vertical';
        dragRect = getRect(dragEl);
        dragOverEvent('dragOverValid');
        if (Sortable.eventCanceled) return completedFired;

        if (revert) {
          parentEl = rootEl; // actualization

          capture();

          this._hideClone();

          dragOverEvent('revert');

          if (!Sortable.eventCanceled) {
            if (nextEl) {
              rootEl.insertBefore(dragEl, nextEl);
            } else {
              rootEl.appendChild(dragEl);
            }
          }

          return completed(true);
        }

        var elLastChild = lastChild(el, options.draggable);

        if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {
          // If already at end of list: Do not insert
          if (elLastChild === dragEl) {
            return completed(false);
          } // assign target only if condition is true


          if (elLastChild && el === evt.target) {
            target = elLastChild;
          }

          if (target) {
            targetRect = getRect(target);
          }

          if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {
            capture();
            el.appendChild(dragEl);
            parentEl = el; // actualization

            changed();
            return completed(true);
          }
        } else if (target.parentNode === el) {
          targetRect = getRect(target);
          var direction = 0,
              targetBeforeFirstSwap,
              differentLevel = dragEl.parentNode !== el,
              differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),
              side1 = vertical ? 'top' : 'left',
              scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),
              scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;

          if (lastTarget !== target) {
            targetBeforeFirstSwap = targetRect[side1];
            pastFirstInvertThresh = false;
            isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;
          }

          direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);
          var sibling;

          if (direction !== 0) {
            // Check if target is beside dragEl in respective direction (ignoring hidden elements)
            var dragIndex = index(dragEl);

            do {
              dragIndex -= direction;
              sibling = parentEl.children[dragIndex];
            } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));
          } // If dragEl is already beside target: Do not insert


          if (direction === 0 || sibling === target) {
            return completed(false);
          }

          lastTarget = target;
          lastDirection = direction;
          var nextSibling = target.nextElementSibling,
              after = false;
          after = direction === 1;

          var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);

          if (moveVector !== false) {
            if (moveVector === 1 || moveVector === -1) {
              after = moveVector === 1;
            }

            _silent = true;
            setTimeout(_unsilent, 30);
            capture();

            if (after && !nextSibling) {
              el.appendChild(dragEl);
            } else {
              target.parentNode.insertBefore(dragEl, after ? nextSibling : target);
            } // Undo chrome's scroll adjustment (has no effect on other browsers)


            if (scrolledPastTop) {
              scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);
            }

            parentEl = dragEl.parentNode; // actualization
            // must be done before animation

            if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {
              targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);
            }

            changed();
            return completed(true);
          }
        }

        if (el.contains(dragEl)) {
          return completed(false);
        }
      }

      return false;
    },
    _ignoreWhileAnimating: null,
    _offMoveEvents: function _offMoveEvents() {
      off(document, 'mousemove', this._onTouchMove);
      off(document, 'touchmove', this._onTouchMove);
      off(document, 'pointermove', this._onTouchMove);
      off(document, 'dragover', nearestEmptyInsertDetectEvent);
      off(document, 'mousemove', nearestEmptyInsertDetectEvent);
      off(document, 'touchmove', nearestEmptyInsertDetectEvent);
    },
    _offUpEvents: function _offUpEvents() {
      var ownerDocument = this.el.ownerDocument;
      off(ownerDocument, 'mouseup', this._onDrop);
      off(ownerDocument, 'touchend', this._onDrop);
      off(ownerDocument, 'pointerup', this._onDrop);
      off(ownerDocument, 'touchcancel', this._onDrop);
      off(document, 'selectstart', this);
    },
    _onDrop: function _onDrop(
    /**Event*/
    evt) {
      var el = this.el,
          options = this.options; // Get the index of the dragged element within its parent

      newIndex = index(dragEl);
      newDraggableIndex = index(dragEl, options.draggable);
      pluginEvent('drop', this, {
        evt: evt
      });
      parentEl = dragEl && dragEl.parentNode; // Get again after plugin event

      newIndex = index(dragEl);
      newDraggableIndex = index(dragEl, options.draggable);

      if (Sortable.eventCanceled) {
        this._nulling();

        return;
      }

      awaitingDragStarted = false;
      isCircumstantialInvert = false;
      pastFirstInvertThresh = false;
      clearInterval(this._loopId);
      clearTimeout(this._dragStartTimer);

      _cancelNextTick(this.cloneId);

      _cancelNextTick(this._dragStartId); // Unbind events


      if (this.nativeDraggable) {
        off(document, 'drop', this);
        off(el, 'dragstart', this._onDragStart);
      }

      this._offMoveEvents();

      this._offUpEvents();

      if (Safari) {
        css(document.body, 'user-select', '');
      }

      css(dragEl, 'transform', '');

      if (evt) {
        if (moved) {
          evt.cancelable && evt.preventDefault();
          !options.dropBubble && evt.stopPropagation();
        }

        ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);

        if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
          // Remove clone(s)
          cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);
        }

        if (dragEl) {
          if (this.nativeDraggable) {
            off(dragEl, 'dragend', this);
          }

          _disableDraggable(dragEl);

          dragEl.style['will-change'] = ''; // Remove classes
          // ghostClass is added in dragStarted

          if (moved && !awaitingDragStarted) {
            toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);
          }

          toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event

          _dispatchEvent({
            sortable: this,
            name: 'unchoose',
            toEl: parentEl,
            newIndex: null,
            newDraggableIndex: null,
            originalEvent: evt
          });

          if (rootEl !== parentEl) {
            if (newIndex >= 0) {
              // Add event
              _dispatchEvent({
                rootEl: parentEl,
                name: 'add',
                toEl: parentEl,
                fromEl: rootEl,
                originalEvent: evt
              }); // Remove event


              _dispatchEvent({
                sortable: this,
                name: 'remove',
                toEl: parentEl,
                originalEvent: evt
              }); // drag from one list and drop into another


              _dispatchEvent({
                rootEl: parentEl,
                name: 'sort',
                toEl: parentEl,
                fromEl: rootEl,
                originalEvent: evt
              });

              _dispatchEvent({
                sortable: this,
                name: 'sort',
                toEl: parentEl,
                originalEvent: evt
              });
            }

            putSortable && putSortable.save();
          } else {
            if (newIndex !== oldIndex) {
              if (newIndex >= 0) {
                // drag & drop within the same list
                _dispatchEvent({
                  sortable: this,
                  name: 'update',
                  toEl: parentEl,
                  originalEvent: evt
                });

                _dispatchEvent({
                  sortable: this,
                  name: 'sort',
                  toEl: parentEl,
                  originalEvent: evt
                });
              }
            }
          }

          if (Sortable.active) {
            /* jshint eqnull:true */
            if (newIndex == null || newIndex === -1) {
              newIndex = oldIndex;
              newDraggableIndex = oldDraggableIndex;
            }

            _dispatchEvent({
              sortable: this,
              name: 'end',
              toEl: parentEl,
              originalEvent: evt
            }); // Save sorting


            this.save();
          }
        }
      }

      this._nulling();
    },
    _nulling: function _nulling() {
      pluginEvent('nulling', this);
      rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;
      savedInputChecked.forEach(function (el) {
        el.checked = true;
      });
      savedInputChecked.length = lastDx = lastDy = 0;
    },
    handleEvent: function handleEvent(
    /**Event*/
    evt) {
      switch (evt.type) {
        case 'drop':
        case 'dragend':
          this._onDrop(evt);

          break;

        case 'dragenter':
        case 'dragover':
          if (dragEl) {
            this._onDragOver(evt);

            _globalDragOver(evt);
          }

          break;

        case 'selectstart':
          evt.preventDefault();
          break;
      }
    },

    /**
     * Serializes the item into an array of string.
     * @returns {String[]}
     */
    toArray: function toArray() {
      var order = [],
          el,
          children = this.el.children,
          i = 0,
          n = children.length,
          options = this.options;

      for (; i < n; i++) {
        el = children[i];

        if (closest(el, options.draggable, this.el, false)) {
          order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));
        }
      }

      return order;
    },

    /**
     * Sorts the elements according to the array.
     * @param  {String[]}  order  order of the items
     */
    sort: function sort(order) {
      var items = {},
          rootEl = this.el;
      this.toArray().forEach(function (id, i) {
        var el = rootEl.children[i];

        if (closest(el, this.options.draggable, rootEl, false)) {
          items[id] = el;
        }
      }, this);
      order.forEach(function (id) {
        if (items[id]) {
          rootEl.removeChild(items[id]);
          rootEl.appendChild(items[id]);
        }
      });
    },

    /**
     * Save the current sorting
     */
    save: function save() {
      var store = this.options.store;
      store && store.set && store.set(this);
    },

    /**
     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
     * @param   {HTMLElement}  el
     * @param   {String}       [selector]  default: `options.draggable`
     * @returns {HTMLElement|null}
     */
    closest: function closest$1(el, selector) {
      return closest(el, selector || this.options.draggable, this.el, false);
    },

    /**
     * Set/get option
     * @param   {string} name
     * @param   {*}      [value]
     * @returns {*}
     */
    option: function option(name, value) {
      var options = this.options;

      if (value === void 0) {
        return options[name];
      } else {
        var modifiedValue = PluginManager.modifyOption(this, name, value);

        if (typeof modifiedValue !== 'undefined') {
          options[name] = modifiedValue;
        } else {
          options[name] = value;
        }

        if (name === 'group') {
          _prepareGroup(options);
        }
      }
    },

    /**
     * Destroy
     */
    destroy: function destroy() {
      pluginEvent('destroy', this);
      var el = this.el;
      el[expando] = null;
      off(el, 'mousedown', this._onTapStart);
      off(el, 'touchstart', this._onTapStart);
      off(el, 'pointerdown', this._onTapStart);

      if (this.nativeDraggable) {
        off(el, 'dragover', this);
        off(el, 'dragenter', this);
      } // Remove draggable attributes


      Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {
        el.removeAttribute('draggable');
      });

      this._onDrop();

      this._disableDelayedDragEvents();

      sortables.splice(sortables.indexOf(this.el), 1);
      this.el = el = null;
    },
    _hideClone: function _hideClone() {
      if (!cloneHidden) {
        pluginEvent('hideClone', this);
        if (Sortable.eventCanceled) return;
        css(cloneEl, 'display', 'none');

        if (this.options.removeCloneOnHide && cloneEl.parentNode) {
          cloneEl.parentNode.removeChild(cloneEl);
        }

        cloneHidden = true;
      }
    },
    _showClone: function _showClone(putSortable) {
      if (putSortable.lastPutMode !== 'clone') {
        this._hideClone();

        return;
      }

      if (cloneHidden) {
        pluginEvent('showClone', this);
        if (Sortable.eventCanceled) return; // show clone at dragEl or original position

        if (rootEl.contains(dragEl) && !this.options.group.revertClone) {
          rootEl.insertBefore(cloneEl, dragEl);
        } else if (nextEl) {
          rootEl.insertBefore(cloneEl, nextEl);
        } else {
          rootEl.appendChild(cloneEl);
        }

        if (this.options.group.revertClone) {
          this.animate(dragEl, cloneEl);
        }

        css(cloneEl, 'display', '');
        cloneHidden = false;
      }
    }
  };

  function _globalDragOver(
  /**Event*/
  evt) {
    if (evt.dataTransfer) {
      evt.dataTransfer.dropEffect = 'move';
    }

    evt.cancelable && evt.preventDefault();
  }

  function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {
    var evt,
        sortable = fromEl[expando],
        onMoveFn = sortable.options.onMove,
        retVal; // Support for new CustomEvent feature

    if (window.CustomEvent && !IE11OrLess && !Edge) {
      evt = new CustomEvent('move', {
        bubbles: true,
        cancelable: true
      });
    } else {
      evt = document.createEvent('Event');
      evt.initEvent('move', true, true);
    }

    evt.to = toEl;
    evt.from = fromEl;
    evt.dragged = dragEl;
    evt.draggedRect = dragRect;
    evt.related = targetEl || toEl;
    evt.relatedRect = targetRect || getRect(toEl);
    evt.willInsertAfter = willInsertAfter;
    evt.originalEvent = originalEvent;
    fromEl.dispatchEvent(evt);

    if (onMoveFn) {
      retVal = onMoveFn.call(sortable, evt, originalEvent);
    }

    return retVal;
  }

  function _disableDraggable(el) {
    el.draggable = false;
  }

  function _unsilent() {
    _silent = false;
  }

  function _ghostIsLast(evt, vertical, sortable) {
    var rect = getRect(lastChild(sortable.el, sortable.options.draggable));
    var spacer = 10;
    return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;
  }

  function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {
    var mouseOnAxis = vertical ? evt.clientY : evt.clientX,
        targetLength = vertical ? targetRect.height : targetRect.width,
        targetS1 = vertical ? targetRect.top : targetRect.left,
        targetS2 = vertical ? targetRect.bottom : targetRect.right,
        invert = false;

    if (!invertSwap) {
      // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold
      if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {
        // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2
        // check if past first invert threshold on side opposite of lastDirection
        if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {
          // past first invert threshold, do not restrict inverted threshold to dragEl shadow
          pastFirstInvertThresh = true;
        }

        if (!pastFirstInvertThresh) {
          // dragEl shadow (target move distance shadow)
          if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow
          : mouseOnAxis > targetS2 - targetMoveDistance) {
            return -lastDirection;
          }
        } else {
          invert = true;
        }
      } else {
        // Regular
        if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {
          return _getInsertDirection(target);
        }
      }
    }

    invert = invert || invertSwap;

    if (invert) {
      // Invert of regular
      if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {
        return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;
      }
    }

    return 0;
  }
  /**
   * Gets the direction dragEl must be swapped relative to target in order to make it
   * seem that dragEl has been "inserted" into that element's position
   * @param  {HTMLElement} target       The target whose position dragEl is being inserted at
   * @return {Number}                   Direction dragEl must be swapped
   */


  function _getInsertDirection(target) {
    if (index(dragEl) < index(target)) {
      return 1;
    } else {
      return -1;
    }
  }
  /**
   * Generate id
   * @param   {HTMLElement} el
   * @returns {String}
   * @private
   */


  function _generateId(el) {
    var str = el.tagName + el.className + el.src + el.href + el.textContent,
        i = str.length,
        sum = 0;

    while (i--) {
      sum += str.charCodeAt(i);
    }

    return sum.toString(36);
  }

  function _saveInputCheckedState(root) {
    savedInputChecked.length = 0;
    var inputs = root.getElementsByTagName('input');
    var idx = inputs.length;

    while (idx--) {
      var el = inputs[idx];
      el.checked && savedInputChecked.push(el);
    }
  }

  function _nextTick(fn) {
    return setTimeout(fn, 0);
  }

  function _cancelNextTick(id) {
    return clearTimeout(id);
  } // Fixed #973:


  if (documentExists) {
    on(document, 'touchmove', function (evt) {
      if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {
        evt.preventDefault();
      }
    });
  } // Export utils


  Sortable.utils = {
    on: on,
    off: off,
    css: css,
    find: find,
    is: function is(el, selector) {
      return !!closest(el, selector, el, false);
    },
    extend: extend,
    throttle: throttle,
    closest: closest,
    toggleClass: toggleClass,
    clone: clone,
    index: index,
    nextTick: _nextTick,
    cancelNextTick: _cancelNextTick,
    detectDirection: _detectDirection,
    getChild: getChild
  };
  /**
   * Get the Sortable instance of an element
   * @param  {HTMLElement} element The element
   * @return {Sortable|undefined}         The instance of Sortable
   */

  Sortable.get = function (element) {
    return element[expando];
  };
  /**
   * Mount a plugin to Sortable
   * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted
   */


  Sortable.mount = function () {
    for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {
      plugins[_key] = arguments[_key];
    }

    if (plugins[0].constructor === Array) plugins = plugins[0];
    plugins.forEach(function (plugin) {
      if (!plugin.prototype || !plugin.prototype.constructor) {
        throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin));
      }

      if (plugin.utils) Sortable.utils = _objectSpread({}, Sortable.utils, plugin.utils);
      PluginManager.mount(plugin);
    });
  };
  /**
   * Create sortable instance
   * @param {HTMLElement}  el
   * @param {Object}      [options]
   */


  Sortable.create = function (el, options) {
    return new Sortable(el, options);
  }; // Export


  Sortable.version = version;

  var autoScrolls = [],
      scrollEl,
      scrollRootEl,
      scrolling = false,
      lastAutoScrollX,
      lastAutoScrollY,
      touchEvt$1,
      pointerElemChangedInterval;

  function AutoScrollPlugin() {
    function AutoScroll() {
      this.defaults = {
        scroll: true,
        scrollSensitivity: 30,
        scrollSpeed: 10,
        bubbleScroll: true
      }; // Bind all private methods

      for (var fn in this) {
        if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
          this[fn] = this[fn].bind(this);
        }
      }
    }

    AutoScroll.prototype = {
      dragStarted: function dragStarted(_ref) {
        var originalEvent = _ref.originalEvent;

        if (this.sortable.nativeDraggable) {
          on(document, 'dragover', this._handleAutoScroll);
        } else {
          if (this.options.supportPointer) {
            on(document, 'pointermove', this._handleFallbackAutoScroll);
          } else if (originalEvent.touches) {
            on(document, 'touchmove', this._handleFallbackAutoScroll);
          } else {
            on(document, 'mousemove', this._handleFallbackAutoScroll);
          }
        }
      },
      dragOverCompleted: function dragOverCompleted(_ref2) {
        var originalEvent = _ref2.originalEvent;

        // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)
        if (!this.options.dragOverBubble && !originalEvent.rootEl) {
          this._handleAutoScroll(originalEvent);
        }
      },
      drop: function drop() {
        if (this.sortable.nativeDraggable) {
          off(document, 'dragover', this._handleAutoScroll);
        } else {
          off(document, 'pointermove', this._handleFallbackAutoScroll);
          off(document, 'touchmove', this._handleFallbackAutoScroll);
          off(document, 'mousemove', this._handleFallbackAutoScroll);
        }

        clearPointerElemChangedInterval();
        clearAutoScrolls();
        cancelThrottle();
      },
      nulling: function nulling() {
        touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;
        autoScrolls.length = 0;
      },
      _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {
        this._handleAutoScroll(evt, true);
      },
      _handleAutoScroll: function _handleAutoScroll(evt, fallback) {
        var _this = this;

        var x = (evt.touches ? evt.touches[0] : evt).clientX,
            y = (evt.touches ? evt.touches[0] : evt).clientY,
            elem = document.elementFromPoint(x, y);
        touchEvt$1 = evt; // IE does not seem to have native autoscroll,
        // Edge's autoscroll seems too conditional,
        // MACOS Safari does not have autoscroll,
        // Firefox and Chrome are good

        if (fallback || Edge || IE11OrLess || Safari) {
          autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change

          var ogElemScroller = getParentAutoScrollElement(elem, true);

          if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {
            pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour

            pointerElemChangedInterval = setInterval(function () {
              var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);

              if (newElem !== ogElemScroller) {
                ogElemScroller = newElem;
                clearAutoScrolls();
              }

              autoScroll(evt, _this.options, newElem, fallback);
            }, 10);
            lastAutoScrollX = x;
            lastAutoScrollY = y;
          }
        } else {
          // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll
          if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {
            clearAutoScrolls();
            return;
          }

          autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);
        }
      }
    };
    return _extends(AutoScroll, {
      pluginName: 'scroll',
      initializeByDefault: true
    });
  }

  function clearAutoScrolls() {
    autoScrolls.forEach(function (autoScroll) {
      clearInterval(autoScroll.pid);
    });
    autoScrolls = [];
  }

  function clearPointerElemChangedInterval() {
    clearInterval(pointerElemChangedInterval);
  }

  var autoScroll = throttle(function (evt, options, rootEl, isFallback) {
    // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521
    if (!options.scroll) return;
    var x = (evt.touches ? evt.touches[0] : evt).clientX,
        y = (evt.touches ? evt.touches[0] : evt).clientY,
        sens = options.scrollSensitivity,
        speed = options.scrollSpeed,
        winScroller = getWindowScrollingElement();
    var scrollThisInstance = false,
        scrollCustomFn; // New scroll root, set scrollEl

    if (scrollRootEl !== rootEl) {
      scrollRootEl = rootEl;
      clearAutoScrolls();
      scrollEl = options.scroll;
      scrollCustomFn = options.scrollFn;

      if (scrollEl === true) {
        scrollEl = getParentAutoScrollElement(rootEl, true);
      }
    }

    var layersOut = 0;
    var currentParent = scrollEl;

    do {
      var el = currentParent,
          rect = getRect(el),
          top = rect.top,
          bottom = rect.bottom,
          left = rect.left,
          right = rect.right,
          width = rect.width,
          height = rect.height,
          canScrollX = void 0,
          canScrollY = void 0,
          scrollWidth = el.scrollWidth,
          scrollHeight = el.scrollHeight,
          elCSS = css(el),
          scrollPosX = el.scrollLeft,
          scrollPosY = el.scrollTop;

      if (el === winScroller) {
        canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');
        canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');
      } else {
        canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');
        canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');
      }

      var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);
      var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);

      if (!autoScrolls[layersOut]) {
        for (var i = 0; i <= layersOut; i++) {
          if (!autoScrolls[i]) {
            autoScrolls[i] = {};
          }
        }
      }

      if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {
        autoScrolls[layersOut].el = el;
        autoScrolls[layersOut].vx = vx;
        autoScrolls[layersOut].vy = vy;
        clearInterval(autoScrolls[layersOut].pid);

        if (vx != 0 || vy != 0) {
          scrollThisInstance = true;
          /* jshint loopfunc:true */

          autoScrolls[layersOut].pid = setInterval(function () {
            // emulate drag over during autoscroll (fallback), emulating native DnD behaviour
            if (isFallback && this.layer === 0) {
              Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely

            }

            var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;
            var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;

            if (typeof scrollCustomFn === 'function') {
              if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {
                return;
              }
            }

            scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);
          }.bind({
            layer: layersOut
          }), 24);
        }
      }

      layersOut++;
    } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));

    scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not
  }, 30);

  var drop = function drop(_ref) {
    var originalEvent = _ref.originalEvent,
        putSortable = _ref.putSortable,
        dragEl = _ref.dragEl,
        activeSortable = _ref.activeSortable,
        dispatchSortableEvent = _ref.dispatchSortableEvent,
        hideGhostForTarget = _ref.hideGhostForTarget,
        unhideGhostForTarget = _ref.unhideGhostForTarget;
    if (!originalEvent) return;
    var toSortable = putSortable || activeSortable;
    hideGhostForTarget();
    var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;
    var target = document.elementFromPoint(touch.clientX, touch.clientY);
    unhideGhostForTarget();

    if (toSortable && !toSortable.el.contains(target)) {
      dispatchSortableEvent('spill');
      this.onSpill({
        dragEl: dragEl,
        putSortable: putSortable
      });
    }
  };

  function Revert() {}

  Revert.prototype = {
    startIndex: null,
    dragStart: function dragStart(_ref2) {
      var oldDraggableIndex = _ref2.oldDraggableIndex;
      this.startIndex = oldDraggableIndex;
    },
    onSpill: function onSpill(_ref3) {
      var dragEl = _ref3.dragEl,
          putSortable = _ref3.putSortable;
      this.sortable.captureAnimationState();

      if (putSortable) {
        putSortable.captureAnimationState();
      }

      var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);

      if (nextSibling) {
        this.sortable.el.insertBefore(dragEl, nextSibling);
      } else {
        this.sortable.el.appendChild(dragEl);
      }

      this.sortable.animateAll();

      if (putSortable) {
        putSortable.animateAll();
      }
    },
    drop: drop
  };

  _extends(Revert, {
    pluginName: 'revertOnSpill'
  });

  function Remove() {}

  Remove.prototype = {
    onSpill: function onSpill(_ref4) {
      var dragEl = _ref4.dragEl,
          putSortable = _ref4.putSortable;
      var parentSortable = putSortable || this.sortable;
      parentSortable.captureAnimationState();
      dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);
      parentSortable.animateAll();
    },
    drop: drop
  };

  _extends(Remove, {
    pluginName: 'removeOnSpill'
  });

  var lastSwapEl;

  function SwapPlugin() {
    function Swap() {
      this.defaults = {
        swapClass: 'sortable-swap-highlight'
      };
    }

    Swap.prototype = {
      dragStart: function dragStart(_ref) {
        var dragEl = _ref.dragEl;
        lastSwapEl = dragEl;
      },
      dragOverValid: function dragOverValid(_ref2) {
        var completed = _ref2.completed,
            target = _ref2.target,
            onMove = _ref2.onMove,
            activeSortable = _ref2.activeSortable,
            changed = _ref2.changed,
            cancel = _ref2.cancel;
        if (!activeSortable.options.swap) return;
        var el = this.sortable.el,
            options = this.options;

        if (target && target !== el) {
          var prevSwapEl = lastSwapEl;

          if (onMove(target) !== false) {
            toggleClass(target, options.swapClass, true);
            lastSwapEl = target;
          } else {
            lastSwapEl = null;
          }

          if (prevSwapEl && prevSwapEl !== lastSwapEl) {
            toggleClass(prevSwapEl, options.swapClass, false);
          }
        }

        changed();
        completed(true);
        cancel();
      },
      drop: function drop(_ref3) {
        var activeSortable = _ref3.activeSortable,
            putSortable = _ref3.putSortable,
            dragEl = _ref3.dragEl;
        var toSortable = putSortable || this.sortable;
        var options = this.options;
        lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);

        if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {
          if (dragEl !== lastSwapEl) {
            toSortable.captureAnimationState();
            if (toSortable !== activeSortable) activeSortable.captureAnimationState();
            swapNodes(dragEl, lastSwapEl);
            toSortable.animateAll();
            if (toSortable !== activeSortable) activeSortable.animateAll();
          }
        }
      },
      nulling: function nulling() {
        lastSwapEl = null;
      }
    };
    return _extends(Swap, {
      pluginName: 'swap',
      eventProperties: function eventProperties() {
        return {
          swapItem: lastSwapEl
        };
      }
    });
  }

  function swapNodes(n1, n2) {
    var p1 = n1.parentNode,
        p2 = n2.parentNode,
        i1,
        i2;
    if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;
    i1 = index(n1);
    i2 = index(n2);

    if (p1.isEqualNode(p2) && i1 < i2) {
      i2++;
    }

    p1.insertBefore(n2, p1.children[i1]);
    p2.insertBefore(n1, p2.children[i2]);
  }

  var multiDragElements = [],
      multiDragClones = [],
      lastMultiDragSelect,
      // for selection with modifier key down (SHIFT)
  multiDragSortable,
      initialFolding = false,
      // Initial multi-drag fold when drag started
  folding = false,
      // Folding any other time
  dragStarted = false,
      dragEl$1,
      clonesFromRect,
      clonesHidden;

  function MultiDragPlugin() {
    function MultiDrag(sortable) {
      // Bind all private methods
      for (var fn in this) {
        if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {
          this[fn] = this[fn].bind(this);
        }
      }

      if (sortable.options.supportPointer) {
        on(document, 'pointerup', this._deselectMultiDrag);
      } else {
        on(document, 'mouseup', this._deselectMultiDrag);
        on(document, 'touchend', this._deselectMultiDrag);
      }

      on(document, 'keydown', this._checkKeyDown);
      on(document, 'keyup', this._checkKeyUp);
      this.defaults = {
        selectedClass: 'sortable-selected',
        multiDragKey: null,
        setData: function setData(dataTransfer, dragEl) {
          var data = '';

          if (multiDragElements.length && multiDragSortable === sortable) {
            multiDragElements.forEach(function (multiDragElement, i) {
              data += (!i ? '' : ', ') + multiDragElement.textContent;
            });
          } else {
            data = dragEl.textContent;
          }

          dataTransfer.setData('Text', data);
        }
      };
    }

    MultiDrag.prototype = {
      multiDragKeyDown: false,
      isMultiDrag: false,
      delayStartGlobal: function delayStartGlobal(_ref) {
        var dragged = _ref.dragEl;
        dragEl$1 = dragged;
      },
      delayEnded: function delayEnded() {
        this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);
      },
      setupClone: function setupClone(_ref2) {
        var sortable = _ref2.sortable,
            cancel = _ref2.cancel;
        if (!this.isMultiDrag) return;

        for (var i = 0; i < multiDragElements.length; i++) {
          multiDragClones.push(clone(multiDragElements[i]));
          multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;
          multiDragClones[i].draggable = false;
          multiDragClones[i].style['will-change'] = '';
          toggleClass(multiDragClones[i], this.options.selectedClass, false);
          multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);
        }

        sortable._hideClone();

        cancel();
      },
      clone: function clone(_ref3) {
        var sortable = _ref3.sortable,
            rootEl = _ref3.rootEl,
            dispatchSortableEvent = _ref3.dispatchSortableEvent,
            cancel = _ref3.cancel;
        if (!this.isMultiDrag) return;

        if (!this.options.removeCloneOnHide) {
          if (multiDragElements.length && multiDragSortable === sortable) {
            insertMultiDragClones(true, rootEl);
            dispatchSortableEvent('clone');
            cancel();
          }
        }
      },
      showClone: function showClone(_ref4) {
        var cloneNowShown = _ref4.cloneNowShown,
            rootEl = _ref4.rootEl,
            cancel = _ref4.cancel;
        if (!this.isMultiDrag) return;
        insertMultiDragClones(false, rootEl);
        multiDragClones.forEach(function (clone) {
          css(clone, 'display', '');
        });
        cloneNowShown();
        clonesHidden = false;
        cancel();
      },
      hideClone: function hideClone(_ref5) {
        var _this = this;

        var sortable = _ref5.sortable,
            cloneNowHidden = _ref5.cloneNowHidden,
            cancel = _ref5.cancel;
        if (!this.isMultiDrag) return;
        multiDragClones.forEach(function (clone) {
          css(clone, 'display', 'none');

          if (_this.options.removeCloneOnHide && clone.parentNode) {
            clone.parentNode.removeChild(clone);
          }
        });
        cloneNowHidden();
        clonesHidden = true;
        cancel();
      },
      dragStartGlobal: function dragStartGlobal(_ref6) {
        var sortable = _ref6.sortable;

        if (!this.isMultiDrag && multiDragSortable) {
          multiDragSortable.multiDrag._deselectMultiDrag();
        }

        multiDragElements.forEach(function (multiDragElement) {
          multiDragElement.sortableIndex = index(multiDragElement);
        }); // Sort multi-drag elements

        multiDragElements = multiDragElements.sort(function (a, b) {
          return a.sortableIndex - b.sortableIndex;
        });
        dragStarted = true;
      },
      dragStarted: function dragStarted(_ref7) {
        var _this2 = this;

        var sortable = _ref7.sortable;
        if (!this.isMultiDrag) return;

        if (this.options.sort) {
          // Capture rects,
          // hide multi drag elements (by positioning them absolute),
          // set multi drag elements rects to dragRect,
          // show multi drag elements,
          // animate to rects,
          // unset rects & remove from DOM
          sortable.captureAnimationState();

          if (this.options.animation) {
            multiDragElements.forEach(function (multiDragElement) {
              if (multiDragElement === dragEl$1) return;
              css(multiDragElement, 'position', 'absolute');
            });
            var dragRect = getRect(dragEl$1, false, true, true);
            multiDragElements.forEach(function (multiDragElement) {
              if (multiDragElement === dragEl$1) return;
              setRect(multiDragElement, dragRect);
            });
            folding = true;
            initialFolding = true;
          }
        }

        sortable.animateAll(function () {
          folding = false;
          initialFolding = false;

          if (_this2.options.animation) {
            multiDragElements.forEach(function (multiDragElement) {
              unsetRect(multiDragElement);
            });
          } // Remove all auxiliary multidrag items from el, if sorting enabled


          if (_this2.options.sort) {
            removeMultiDragElements();
          }
        });
      },
      dragOver: function dragOver(_ref8) {
        var target = _ref8.target,
            completed = _ref8.completed,
            cancel = _ref8.cancel;

        if (folding && ~multiDragElements.indexOf(target)) {
          completed(false);
          cancel();
        }
      },
      revert: function revert(_ref9) {
        var fromSortable = _ref9.fromSortable,
            rootEl = _ref9.rootEl,
            sortable = _ref9.sortable,
            dragRect = _ref9.dragRect;

        if (multiDragElements.length > 1) {
          // Setup unfold animation
          multiDragElements.forEach(function (multiDragElement) {
            sortable.addAnimationState({
              target: multiDragElement,
              rect: folding ? getRect(multiDragElement) : dragRect
            });
            unsetRect(multiDragElement);
            multiDragElement.fromRect = dragRect;
            fromSortable.removeAnimationState(multiDragElement);
          });
          folding = false;
          insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);
        }
      },
      dragOverCompleted: function dragOverCompleted(_ref10) {
        var sortable = _ref10.sortable,
            isOwner = _ref10.isOwner,
            insertion = _ref10.insertion,
            activeSortable = _ref10.activeSortable,
            parentEl = _ref10.parentEl,
            putSortable = _ref10.putSortable;
        var options = this.options;

        if (insertion) {
          // Clones must be hidden before folding animation to capture dragRectAbsolute properly
          if (isOwner) {
            activeSortable._hideClone();
          }

          initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location

          if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {
            // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible
            var dragRectAbsolute = getRect(dragEl$1, false, true, true);
            multiDragElements.forEach(function (multiDragElement) {
              if (multiDragElement === dragEl$1) return;
              setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted
              // while folding, and so that we can capture them again because old sortable will no longer be fromSortable

              parentEl.appendChild(multiDragElement);
            });
            folding = true;
          } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out


          if (!isOwner) {
            // Only remove if not folding (folding will remove them anyways)
            if (!folding) {
              removeMultiDragElements();
            }

            if (multiDragElements.length > 1) {
              var clonesHiddenBefore = clonesHidden;

              activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden


              if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {
                multiDragClones.forEach(function (clone) {
                  activeSortable.addAnimationState({
                    target: clone,
                    rect: clonesFromRect
                  });
                  clone.fromRect = clonesFromRect;
                  clone.thisAnimationDuration = null;
                });
              }
            } else {
              activeSortable._showClone(sortable);
            }
          }
        }
      },
      dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {
        var dragRect = _ref11.dragRect,
            isOwner = _ref11.isOwner,
            activeSortable = _ref11.activeSortable;
        multiDragElements.forEach(function (multiDragElement) {
          multiDragElement.thisAnimationDuration = null;
        });

        if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {
          clonesFromRect = _extends({}, dragRect);
          var dragMatrix = matrix(dragEl$1, true);
          clonesFromRect.top -= dragMatrix.f;
          clonesFromRect.left -= dragMatrix.e;
        }
      },
      dragOverAnimationComplete: function dragOverAnimationComplete() {
        if (folding) {
          folding = false;
          removeMultiDragElements();
        }
      },
      drop: function drop(_ref12) {
        var evt = _ref12.originalEvent,
            rootEl = _ref12.rootEl,
            parentEl = _ref12.parentEl,
            sortable = _ref12.sortable,
            dispatchSortableEvent = _ref12.dispatchSortableEvent,
            oldIndex = _ref12.oldIndex,
            putSortable = _ref12.putSortable;
        var toSortable = putSortable || this.sortable;
        if (!evt) return;
        var options = this.options,
            children = parentEl.children; // Multi-drag selection

        if (!dragStarted) {
          if (options.multiDragKey && !this.multiDragKeyDown) {
            this._deselectMultiDrag();
          }

          toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));

          if (!~multiDragElements.indexOf(dragEl$1)) {
            multiDragElements.push(dragEl$1);
            dispatchEvent({
              sortable: sortable,
              rootEl: rootEl,
              name: 'select',
              targetEl: dragEl$1,
              originalEvt: evt
            }); // Modifier activated, select from last to dragEl

            if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {
              var lastIndex = index(lastMultiDragSelect),
                  currentIndex = index(dragEl$1);

              if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {
                // Must include lastMultiDragSelect (select it), in case modified selection from no selection
                // (but previous selection existed)
                var n, i;

                if (currentIndex > lastIndex) {
                  i = lastIndex;
                  n = currentIndex;
                } else {
                  i = currentIndex;
                  n = lastIndex + 1;
                }

                for (; i < n; i++) {
                  if (~multiDragElements.indexOf(children[i])) continue;
                  toggleClass(children[i], options.selectedClass, true);
                  multiDragElements.push(children[i]);
                  dispatchEvent({
                    sortable: sortable,
                    rootEl: rootEl,
                    name: 'select',
                    targetEl: children[i],
                    originalEvt: evt
                  });
                }
              }
            } else {
              lastMultiDragSelect = dragEl$1;
            }

            multiDragSortable = toSortable;
          } else {
            multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);
            lastMultiDragSelect = null;
            dispatchEvent({
              sortable: sortable,
              rootEl: rootEl,
              name: 'deselect',
              targetEl: dragEl$1,
              originalEvt: evt
            });
          }
        } // Multi-drag drop


        if (dragStarted && this.isMultiDrag) {
          // Do not "unfold" after around dragEl if reverted
          if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {
            var dragRect = getRect(dragEl$1),
                multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');
            if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;
            toSortable.captureAnimationState();

            if (!initialFolding) {
              if (options.animation) {
                dragEl$1.fromRect = dragRect;
                multiDragElements.forEach(function (multiDragElement) {
                  multiDragElement.thisAnimationDuration = null;

                  if (multiDragElement !== dragEl$1) {
                    var rect = folding ? getRect(multiDragElement) : dragRect;
                    multiDragElement.fromRect = rect; // Prepare unfold animation

                    toSortable.addAnimationState({
                      target: multiDragElement,
                      rect: rect
                    });
                  }
                });
              } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert
              // properly they must all be removed


              removeMultiDragElements();
              multiDragElements.forEach(function (multiDragElement) {
                if (children[multiDragIndex]) {
                  parentEl.insertBefore(multiDragElement, children[multiDragIndex]);
                } else {
                  parentEl.appendChild(multiDragElement);
                }

                multiDragIndex++;
              }); // If initial folding is done, the elements may have changed position because they are now
              // unfolding around dragEl, even though dragEl may not have his index changed, so update event
              // must be fired here as Sortable will not.

              if (oldIndex === index(dragEl$1)) {
                var update = false;
                multiDragElements.forEach(function (multiDragElement) {
                  if (multiDragElement.sortableIndex !== index(multiDragElement)) {
                    update = true;
                    return;
                  }
                });

                if (update) {
                  dispatchSortableEvent('update');
                }
              }
            } // Must be done after capturing individual rects (scroll bar)


            multiDragElements.forEach(function (multiDragElement) {
              unsetRect(multiDragElement);
            });
            toSortable.animateAll();
          }

          multiDragSortable = toSortable;
        } // Remove clones if necessary


        if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {
          multiDragClones.forEach(function (clone) {
            clone.parentNode && clone.parentNode.removeChild(clone);
          });
        }
      },
      nullingGlobal: function nullingGlobal() {
        this.isMultiDrag = dragStarted = false;
        multiDragClones.length = 0;
      },
      destroyGlobal: function destroyGlobal() {
        this._deselectMultiDrag();

        off(document, 'pointerup', this._deselectMultiDrag);
        off(document, 'mouseup', this._deselectMultiDrag);
        off(document, 'touchend', this._deselectMultiDrag);
        off(document, 'keydown', this._checkKeyDown);
        off(document, 'keyup', this._checkKeyUp);
      },
      _deselectMultiDrag: function _deselectMultiDrag(evt) {
        if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable

        if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable

        if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click

        if (evt && evt.button !== 0) return;

        while (multiDragElements.length) {
          var el = multiDragElements[0];
          toggleClass(el, this.options.selectedClass, false);
          multiDragElements.shift();
          dispatchEvent({
            sortable: this.sortable,
            rootEl: this.sortable.el,
            name: 'deselect',
            targetEl: el,
            originalEvt: evt
          });
        }
      },
      _checkKeyDown: function _checkKeyDown(evt) {
        if (evt.key === this.options.multiDragKey) {
          this.multiDragKeyDown = true;
        }
      },
      _checkKeyUp: function _checkKeyUp(evt) {
        if (evt.key === this.options.multiDragKey) {
          this.multiDragKeyDown = false;
        }
      }
    };
    return _extends(MultiDrag, {
      // Static methods & properties
      pluginName: 'multiDrag',
      utils: {
        /**
         * Selects the provided multi-drag item
         * @param  {HTMLElement} el    The element to be selected
         */
        select: function select(el) {
          var sortable = el.parentNode[expando];
          if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;

          if (multiDragSortable && multiDragSortable !== sortable) {
            multiDragSortable.multiDrag._deselectMultiDrag();

            multiDragSortable = sortable;
          }

          toggleClass(el, sortable.options.selectedClass, true);
          multiDragElements.push(el);
        },

        /**
         * Deselects the provided multi-drag item
         * @param  {HTMLElement} el    The element to be deselected
         */
        deselect: function deselect(el) {
          var sortable = el.parentNode[expando],
              index = multiDragElements.indexOf(el);
          if (!sortable || !sortable.options.multiDrag || !~index) return;
          toggleClass(el, sortable.options.selectedClass, false);
          multiDragElements.splice(index, 1);
        }
      },
      eventProperties: function eventProperties() {
        var _this3 = this;

        var oldIndicies = [],
            newIndicies = [];
        multiDragElements.forEach(function (multiDragElement) {
          oldIndicies.push({
            multiDragElement: multiDragElement,
            index: multiDragElement.sortableIndex
          }); // multiDragElements will already be sorted if folding

          var newIndex;

          if (folding && multiDragElement !== dragEl$1) {
            newIndex = -1;
          } else if (folding) {
            newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');
          } else {
            newIndex = index(multiDragElement);
          }

          newIndicies.push({
            multiDragElement: multiDragElement,
            index: newIndex
          });
        });
        return {
          items: _toConsumableArray(multiDragElements),
          clones: [].concat(multiDragClones),
          oldIndicies: oldIndicies,
          newIndicies: newIndicies
        };
      },
      optionListeners: {
        multiDragKey: function multiDragKey(key) {
          key = key.toLowerCase();

          if (key === 'ctrl') {
            key = 'Control';
          } else if (key.length > 1) {
            key = key.charAt(0).toUpperCase() + key.substr(1);
          }

          return key;
        }
      }
    });
  }

  function insertMultiDragElements(clonesInserted, rootEl) {
    multiDragElements.forEach(function (multiDragElement, i) {
      var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];

      if (target) {
        rootEl.insertBefore(multiDragElement, target);
      } else {
        rootEl.appendChild(multiDragElement);
      }
    });
  }
  /**
   * Insert multi-drag clones
   * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted
   * @param  {HTMLElement} rootEl
   */


  function insertMultiDragClones(elementsInserted, rootEl) {
    multiDragClones.forEach(function (clone, i) {
      var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];

      if (target) {
        rootEl.insertBefore(clone, target);
      } else {
        rootEl.appendChild(clone);
      }
    });
  }

  function removeMultiDragElements() {
    multiDragElements.forEach(function (multiDragElement) {
      if (multiDragElement === dragEl$1) return;
      multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);
    });
  }

  Sortable.mount(new AutoScrollPlugin());
  Sortable.mount(Remove, Revert);

  Sortable.mount(new SwapPlugin());
  Sortable.mount(new MultiDragPlugin());

  return Sortable;

}));
/*! Sortable 1.10.2 - MIT | git://github.com/SortableJS/Sortable.git */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function a(){return(a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t}).apply(this,arguments)}function I(i){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.forEach(function(t){var e,n,o;e=i,o=r[n=t],n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o})}return i}function l(t,e){if(null==t)return{};var n,o,i=function(t,e){if(null==t)return{};var n,o,i={},r=Object.keys(t);for(o=0;o<r.length;o++)n=r[o],0<=e.indexOf(n)||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(o=0;o<r.length;o++)n=r[o],0<=e.indexOf(n)||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}function e(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function t(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var w=t(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),E=t(/Edge/i),c=t(/firefox/i),s=t(/safari/i)&&!t(/chrome/i)&&!t(/android/i),n=t(/iP(ad|od|hone)/i),i=t(/chrome/i)&&t(/android/i),r={capture:!1,passive:!1};function u(t,e,n){t.addEventListener(e,n,!w&&r)}function d(t,e,n){t.removeEventListener(e,n,!w&&r)}function h(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&h(t,e):h(t,e))||o&&t===n)return t;if(t===n)break}while(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode)}var i;return null}var f,p=/\s+/g;function k(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(p," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(p," ")}}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function g(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i<r;i++)n(o[i],i);return o}return[]}function N(){var t=document.scrollingElement;return t||document.documentElement}function X(t,e,n,o,i){if(t.getBoundingClientRect||t===window){var r,a,l,s,c,u,d;if(d=t!==window&&t!==N()?(a=(r=t.getBoundingClientRect()).top,l=r.left,s=r.bottom,c=r.right,u=r.height,r.width):(l=a=0,s=window.innerHeight,c=window.innerWidth,u=window.innerHeight,window.innerWidth),(e||n)&&t!==window&&(i=i||t.parentNode,!w))do{if(i&&i.getBoundingClientRect&&("none"!==R(i,"transform")||n&&"static"!==R(i,"position"))){var h=i.getBoundingClientRect();a-=h.top+parseInt(R(i,"border-top-width")),l-=h.left+parseInt(R(i,"border-left-width")),s=a+r.height,c=l+r.width;break}}while(i=i.parentNode);if(o&&t!==window){var f=v(i||t),p=f&&f.a,g=f&&f.d;f&&(s=(a/=g)+(u/=g),c=(l/=p)+(d/=p))}return{top:a,left:l,bottom:s,right:c,width:d,height:u}}}function Y(t,e,n){for(var o=H(t,!0),i=X(t)[e];o;){var r=X(o)[n];if(!("top"===n||"left"===n?r<=i:i<=r))return o;if(o===N())break;o=H(o,!1)}return!1}function m(t,e,n){for(var o=0,i=0,r=t.children;i<r.length;){if("none"!==r[i].style.display&&r[i]!==Rt.ghost&&r[i]!==Rt.dragged&&P(r[i],n.draggable,t,!1)){if(o===e)return r[i];o++}i++}return null}function B(t,e){for(var n=t.lastElementChild;n&&(n===Rt.ghost||"none"===R(n,"display")||e&&!h(n,e));)n=n.previousElementSibling;return n||null}function F(t,e){var n=0;if(!t||!t.parentNode)return-1;for(;t=t.previousElementSibling;)"TEMPLATE"===t.nodeName.toUpperCase()||t===Rt.clone||e&&!h(t,e)||n++;return n}function b(t){var e=0,n=0,o=N();if(t)do{var i=v(t),r=i.a,a=i.d;e+=t.scrollLeft*r,n+=t.scrollTop*a}while(t!==o&&(t=t.parentNode));return[e,n]}function H(t,e){if(!t||!t.getBoundingClientRect)return N();var n=t,o=!1;do{if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var i=R(n);if(n.clientWidth<n.scrollWidth&&("auto"==i.overflowX||"scroll"==i.overflowX)||n.clientHeight<n.scrollHeight&&("auto"==i.overflowY||"scroll"==i.overflowY)){if(!n.getBoundingClientRect||n===document.body)return N();if(o||e)return n;o=!0}}}while(n=n.parentNode);return N()}function y(t,e){return Math.round(t.top)===Math.round(e.top)&&Math.round(t.left)===Math.round(e.left)&&Math.round(t.height)===Math.round(e.height)&&Math.round(t.width)===Math.round(e.width)}function D(e,n){return function(){if(!f){var t=arguments;1===t.length?e.call(this,t[0]):e.apply(this,t),f=setTimeout(function(){f=void 0},n)}}}function L(t,e,n){t.scrollLeft+=e,t.scrollTop+=n}function S(t){var e=window.Polymer,n=window.jQuery||window.Zepto;return e&&e.dom?e.dom(t).cloneNode(!0):n?n(t).clone(!0)[0]:t.cloneNode(!0)}function _(t,e){R(t,"position","absolute"),R(t,"top",e.top),R(t,"left",e.left),R(t,"width",e.width),R(t,"height",e.height)}function C(t){R(t,"position",""),R(t,"top",""),R(t,"left",""),R(t,"width",""),R(t,"height","")}var j="Sortable"+(new Date).getTime();function T(){var e,o=[];return{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(t){if("none"!==R(t,"display")&&t!==Rt.ghost){o.push({target:t,rect:X(t)});var e=I({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=v(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}})},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var c=this;if(!this.options.animation)return clearTimeout(e),void("function"==typeof t&&t());var u=!1,d=0;o.forEach(function(t){var e=0,n=t.target,o=n.fromRect,i=X(n),r=n.prevFromRect,a=n.prevToRect,l=t.rect,s=v(n,!0);s&&(i.top-=s.f,i.left-=s.e),n.toRect=i,n.thisAnimationDuration&&y(r,i)&&!y(o,i)&&(l.top-i.top)/(l.left-i.left)==(o.top-i.top)/(o.left-i.left)&&(e=function(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}(l,r,a,c.options)),y(i,o)||(n.prevFromRect=o,n.prevToRect=i,e||(e=c.options.animation),c.animate(n,l,i,e)),e&&(u=!0,d=Math.max(d,e),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},e),n.thisAnimationDuration=e)}),clearTimeout(e),u?e=setTimeout(function(){"function"==typeof t&&t()},d):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){R(t,"transition",""),R(t,"transform","");var i=v(this.el),r=i&&i.a,a=i&&i.d,l=(e.left-n.left)/(r||1),s=(e.top-n.top)/(a||1);t.animatingX=!!l,t.animatingY=!!s,R(t,"transform","translate3d("+l+"px,"+s+"px,0)"),function(t){t.offsetWidth}(t),R(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),R(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout(function(){R(t,"transition",""),R(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1},o)}}}}var x=[],M={initializeByDefault:!0},O={mount:function(t){for(var e in M)!M.hasOwnProperty(e)||e in t||(t[e]=M[e]);x.push(t)},pluginEvent:function(e,n,o){var t=this;this.eventCanceled=!1,o.cancel=function(){t.eventCanceled=!0};var i=e+"Global";x.forEach(function(t){n[t.pluginName]&&(n[t.pluginName][i]&&n[t.pluginName][i](I({sortable:n},o)),n.options[t.pluginName]&&n[t.pluginName][e]&&n[t.pluginName][e](I({sortable:n},o)))})},initializePlugins:function(o,i,r,t){for(var e in x.forEach(function(t){var e=t.pluginName;if(o.options[e]||t.initializeByDefault){var n=new t(o,i,o.options);n.sortable=o,n.options=o.options,o[e]=n,a(r,n.defaults)}}),o.options)if(o.options.hasOwnProperty(e)){var n=this.modifyOption(o,e,o.options[e]);void 0!==n&&(o.options[e]=n)}},getEventProperties:function(e,n){var o={};return x.forEach(function(t){"function"==typeof t.eventProperties&&a(o,t.eventProperties.call(n[t.pluginName],e))}),o},modifyOption:function(e,n,o){var i;return x.forEach(function(t){e[t.pluginName]&&t.optionListeners&&"function"==typeof t.optionListeners[n]&&(i=t.optionListeners[n].call(e[t.pluginName],o))}),i}};function A(t){var e=t.sortable,n=t.rootEl,o=t.name,i=t.targetEl,r=t.cloneEl,a=t.toEl,l=t.fromEl,s=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,h=t.originalEvent,f=t.putSortable,p=t.extraEventProperties;if(e=e||n&&n[j]){var g,v=e.options,m="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||w||E?(g=document.createEvent("Event")).initEvent(o,!0,!0):g=new CustomEvent(o,{bubbles:!0,cancelable:!0}),g.to=a||n,g.from=l||n,g.item=i||n,g.clone=r,g.oldIndex=s,g.newIndex=c,g.oldDraggableIndex=u,g.newDraggableIndex=d,g.originalEvent=h,g.pullMode=f?f.lastPutMode:void 0;var b=I({},p,O.getEventProperties(o,e));for(var y in b)g[y]=b[y];n&&n.dispatchEvent(g),v[m]&&v[m].call(e,g)}}function K(t,e,n){var o=2<arguments.length&&void 0!==n?n:{},i=o.evt,r=l(o,["evt"]);O.pluginEvent.bind(Rt)(t,e,I({dragEl:z,parentEl:G,ghostEl:U,rootEl:q,nextEl:V,lastDownEl:Z,cloneEl:Q,cloneHidden:$,dragStarted:dt,putSortable:it,activeSortable:Rt.active,originalEvent:i,oldIndex:J,oldDraggableIndex:et,newIndex:tt,newDraggableIndex:nt,hideGhostForTarget:Nt,unhideGhostForTarget:It,cloneNowHidden:function(){$=!0},cloneNowShown:function(){$=!1},dispatchSortableEvent:function(t){W({sortable:e,name:t,originalEvent:i})}},r))}function W(t){A(I({putSortable:it,cloneEl:Q,targetEl:z,rootEl:q,oldIndex:J,oldDraggableIndex:et,newIndex:tt,newDraggableIndex:nt},t))}var z,G,U,q,V,Z,Q,$,J,tt,et,nt,ot,it,rt,at,lt,st,ct,ut,dt,ht,ft,pt,gt,vt=!1,mt=!1,bt=[],yt=!1,wt=!1,Et=[],Dt=!1,St=[],_t="undefined"!=typeof document,Ct=n,Tt=E||w?"cssFloat":"float",xt=_t&&!i&&!n&&"draggable"in document.createElement("div"),Mt=function(){if(_t){if(w)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),Ot=function(t,e){var n=R(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),i=m(t,0,e),r=m(t,1,e),a=i&&R(i),l=r&&R(r),s=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+X(i).width,c=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+X(r).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&a.float&&"none"!==a.float){var u="left"===a.float?"left":"right";return!r||"both"!==l.clear&&l.clear!==u?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||o<=s&&"none"===n[Tt]||r&&"none"===n[Tt]&&o<s+c)?"vertical":"horizontal"},At=function(t){function s(a,l){return function(t,e,n,o){var i=t.options.group.name&&e.options.group.name&&t.options.group.name===e.options.group.name;if(null==a&&(l||i))return!0;if(null==a||!1===a)return!1;if(l&&"clone"===a)return a;if("function"==typeof a)return s(a(t,e,n,o),l)(t,e,n,o);var r=(l?t:e).options.group.name;return!0===a||"string"==typeof a&&a===r||a.join&&-1<a.indexOf(r)}}var e={},n=t.group;n&&"object"==o(n)||(n={name:n}),e.name=n.name,e.checkPull=s(n.pull,!0),e.checkPut=s(n.put),e.revertClone=n.revertClone,t.group=e},Nt=function(){!Mt&&U&&R(U,"display","none")},It=function(){!Mt&&U&&R(U,"display","")};_t&&document.addEventListener("click",function(t){if(mt)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),mt=!1},!0);function Pt(t){if(z){var e=function(r,a){var l;return bt.some(function(t){if(!B(t)){var e=X(t),n=t[j].options.emptyInsertThreshold,o=r>=e.left-n&&r<=e.right+n,i=a>=e.top-n&&a<=e.bottom+n;return n&&o&&i?l=t:void 0}}),l}((t=t.touches?t.touches[0]:t).clientX,t.clientY);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[j]._onDragOver(n)}}}function kt(t){z&&z.parentNode[j]._isOutsideThisEl(t.target)}function Rt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[j]=this;var n={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ot(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Rt.supportPointer&&"PointerEvent"in window,emptyInsertThreshold:5};for(var o in O.initializePlugins(this,t,n),n)o in e||(e[o]=n[o]);for(var i in At(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&xt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?u(t,"pointerdown",this._onTapStart):(u(t,"mousedown",this._onTapStart),u(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(u(t,"dragover",this),u(t,"dragenter",this)),bt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,T())}function Xt(t,e,n,o,i,r,a,l){var s,c,u=t[j],d=u.options.onMove;return!window.CustomEvent||w||E?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),d&&(c=d.call(u,s,a)),c}function Yt(t){t.draggable=!1}function Bt(){Dt=!1}function Ft(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function Ht(t){return setTimeout(t,0)}function Lt(t){return clearTimeout(t)}Rt.prototype={constructor:Rt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(ht=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,z):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(function(t){St.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&St.push(o)}}(o),!z&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled||s.isContentEditable||(l=P(l,t.draggable,o,!1))&&l.animated||Z===l)){if(J=F(l),et=F(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return W({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),K("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c&&(c=c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return W({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),K("filter",n,{evt:e}),!0})))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;if(n&&!z&&n.parentNode===r){var s=X(n);if(q=r,G=(z=n).parentNode,V=z.nextSibling,Z=n,ot=a.group,rt={target:Rt.dragged=z,clientX:(e||t).clientX,clientY:(e||t).clientY},ct=rt.clientX-s.left,ut=rt.clientY-s.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,z.style["will-change"]="all",o=function(){K("delayEnded",i,{evt:t}),Rt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!c&&i.nativeDraggable&&(z.draggable=!0),i._triggerDragStart(t,e),W({sortable:i,name:"choose",originalEvent:t}),k(z,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){g(z,t.trim(),Yt)}),u(l,"dragover",Pt),u(l,"mousemove",Pt),u(l,"touchmove",Pt),u(l,"mouseup",i._onDrop),u(l,"touchend",i._onDrop),u(l,"touchcancel",i._onDrop),c&&this.nativeDraggable&&(this.options.touchStartThreshold=4,z.draggable=!0),K("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(E||w))o();else{if(Rt.eventCanceled)return void this._onDrop();u(l,"mouseup",i._disableDelayedDrag),u(l,"touchend",i._disableDelayedDrag),u(l,"touchcancel",i._disableDelayedDrag),u(l,"mousemove",i._delayedDragTouchMoveHandler),u(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&u(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){z&&Yt(z),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;d(t,"mouseup",this._disableDelayedDrag),d(t,"touchend",this._disableDelayedDrag),d(t,"touchcancel",this._disableDelayedDrag),d(t,"mousemove",this._delayedDragTouchMoveHandler),d(t,"touchmove",this._delayedDragTouchMoveHandler),d(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?u(document,"pointermove",this._onTouchMove):u(document,e?"touchmove":"mousemove",this._onTouchMove):(u(z,"dragend",this),u(q,"dragstart",this._onDragStart));try{document.selection?Ht(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(vt=!1,q&&z){K("dragStarted",this,{evt:e}),this.nativeDraggable&&u(document,"dragover",kt);var n=this.options;t||k(z,n.dragClass,!1),k(z,n.ghostClass,!0),Rt.active=this,t&&this._appendGhost(),W({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(at){this._lastX=at.clientX,this._lastY=at.clientY,Nt();for(var t=document.elementFromPoint(at.clientX,at.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(at.clientX,at.clientY))!==e;)e=t;if(z.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j]){if(e[j]._onDragOver({clientX:at.clientX,clientY:at.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}t=e}while(e=e.parentNode);It()}},_onTouchMove:function(t){if(rt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=U&&v(U,!0),a=U&&r&&r.a,l=U&&r&&r.d,s=Ct&&gt&&b(gt),c=(i.clientX-rt.clientX+o.x)/(a||1)+(s?s[0]-Et[0]:0)/(a||1),u=(i.clientY-rt.clientY+o.y)/(l||1)+(s?s[1]-Et[1]:0)/(l||1);if(!Rt.active&&!vt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))<n)return;this._onDragStart(t,!0)}if(U){r?(r.e+=c-(lt||0),r.f+=u-(st||0)):r={a:1,b:0,c:0,d:1,e:c,f:u};var d="matrix(".concat(r.a,",").concat(r.b,",").concat(r.c,",").concat(r.d,",").concat(r.e,",").concat(r.f,")");R(U,"webkitTransform",d),R(U,"mozTransform",d),R(U,"msTransform",d),R(U,"transform",d),lt=c,st=u,at=i}t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!U){var t=this.options.fallbackOnBody?document.body:q,e=X(z,!0,Ct,!0,t),n=this.options;if(Ct){for(gt=t;"static"===R(gt,"position")&&"none"===R(gt,"transform")&&gt!==document;)gt=gt.parentNode;gt!==document.body&&gt!==document.documentElement?(gt===document&&(gt=N()),e.top+=gt.scrollTop,e.left+=gt.scrollLeft):gt=N(),Et=b(gt)}k(U=z.cloneNode(!0),n.ghostClass,!1),k(U,n.fallbackClass,!0),k(U,n.dragClass,!0),R(U,"transition",""),R(U,"transform",""),R(U,"box-sizing","border-box"),R(U,"margin",0),R(U,"top",e.top),R(U,"left",e.left),R(U,"width",e.width),R(U,"height",e.height),R(U,"opacity","0.8"),R(U,"position",Ct?"absolute":"fixed"),R(U,"zIndex","100000"),R(U,"pointerEvents","none"),Rt.ghost=U,t.appendChild(U),R(U,"transform-origin",ct/parseInt(U.style.width)*100+"% "+ut/parseInt(U.style.height)*100+"%")}},_onDragStart:function(t,e){var n=this,o=t.dataTransfer,i=n.options;K("dragStart",this,{evt:t}),Rt.eventCanceled?this._onDrop():(K("setupClone",this),Rt.eventCanceled||((Q=S(z)).draggable=!1,Q.style["will-change"]="",this._hideClone(),k(Q,this.options.chosenClass,!1),Rt.clone=Q),n.cloneId=Ht(function(){K("clone",n),Rt.eventCanceled||(n.options.removeCloneOnHide||q.insertBefore(Q,z),n._hideClone(),W({sortable:n,name:"clone"}))}),e||k(z,i.dragClass,!0),e?(mt=!0,n._loopId=setInterval(n._emulateDragOver,50)):(d(document,"mouseup",n._onDrop),d(document,"touchend",n._onDrop),d(document,"touchcancel",n._onDrop),o&&(o.effectAllowed="move",i.setData&&i.setData.call(n,o,z)),u(document,"drop",n),R(z,"transform","translateZ(0)")),vt=!0,n._dragStartId=Ht(n._dragStarted.bind(n,e,t)),u(document,"selectstart",n),dt=!0,s&&R(document.body,"user-select","none"))},_onDragOver:function(n){var o,i,r,a,l=this.el,s=n.target,e=this.options,t=e.group,c=Rt.active,u=ot===t,d=e.sort,h=it||c,f=this,p=!1;if(!Dt){if(void 0!==n.preventDefault&&n.cancelable&&n.preventDefault(),s=P(s,e.draggable,l,!0),M("dragOver"),Rt.eventCanceled)return p;if(z.contains(n.target)||s.animated&&s.animatingX&&s.animatingY||f._ignoreWhileAnimating===s)return A(!1);if(mt=!1,c&&!e.disabled&&(u?d||(r=!q.contains(z)):it===this||(this.lastPutMode=ot.checkPull(this,c,z,n))&&t.checkPut(this,c,z,n))){if(a="vertical"===this._getDirection(n,s),o=X(z),M("dragOverValid"),Rt.eventCanceled)return p;if(r)return G=q,O(),this._hideClone(),M("revert"),Rt.eventCanceled||(V?q.insertBefore(z,V):q.appendChild(z)),A(!0);var g=B(l,e.draggable);if(!g||function(t,e,n){var o=X(B(n.el,n.options.draggable));return e?t.clientX>o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(n,a,this)&&!g.animated){if(g===z)return A(!1);if(g&&l===n.target&&(s=g),s&&(i=X(s)),!1!==Xt(q,l,z,o,s,i,n,!!s))return O(),l.appendChild(z),G=l,N(),A(!0)}else if(s.parentNode===l){i=X(s);var v,m,b,y=z.parentNode!==l,w=!function(t,e,n){var o=n?t.left:t.top,i=n?t.right:t.bottom,r=n?t.width:t.height,a=n?e.left:e.top,l=n?e.right:e.bottom,s=n?e.width:e.height;return o===a||i===l||o+r/2===a+s/2}(z.animated&&z.toRect||o,s.animated&&s.toRect||i,a),E=a?"top":"left",D=Y(s,"top","top")||Y(z,"top","top"),S=D?D.scrollTop:void 0;if(ht!==s&&(m=i[E],yt=!1,wt=!w&&e.invertSwap||y),0!==(v=function(t,e,n,o,i,r,a,l){var s=o?t.clientY:t.clientX,c=o?n.height:n.width,u=o?n.top:n.left,d=o?n.bottom:n.right,h=!1;if(!a)if(l&&pt<c*i){if(!yt&&(1===ft?u+c*r/2<s:s<d-c*r/2)&&(yt=!0),yt)h=!0;else if(1===ft?s<u+pt:d-pt<s)return-ft}else if(u+c*(1-i)/2<s&&s<d-c*(1-i)/2)return function(t){return F(z)<F(t)?1:-1}(e);if((h=h||a)&&(s<u+c*r/2||d-c*r/2<s))return u+c/2<s?1:-1;return 0}(n,s,i,a,w?1:e.swapThreshold,null==e.invertedSwapThreshold?e.swapThreshold:e.invertedSwapThreshold,wt,ht===s)))for(var _=F(z);_-=v,(b=G.children[_])&&("none"===R(b,"display")||b===U););if(0===v||b===s)return A(!1);ft=v;var C=(ht=s).nextElementSibling,T=!1,x=Xt(q,l,z,o,s,i,n,T=1===v);if(!1!==x)return 1!==x&&-1!==x||(T=1===x),Dt=!0,setTimeout(Bt,30),O(),T&&!C?l.appendChild(z):s.parentNode.insertBefore(z,T?C:s),D&&L(D,0,S-D.scrollTop),G=z.parentNode,void 0===m||wt||(pt=Math.abs(m-X(s)[E])),N(),A(!0)}if(l.contains(z))return A(!1)}return!1}function M(t,e){K(t,f,I({evt:n,isOwner:u,axis:a?"vertical":"horizontal",revert:r,dragRect:o,targetRect:i,canSort:d,fromSortable:h,target:s,completed:A,onMove:function(t,e){return Xt(q,l,z,o,t,X(t),n,e)},changed:N},e))}function O(){M("dragOverAnimationCapture"),f.captureAnimationState(),f!==h&&h.captureAnimationState()}function A(t){return M("dragOverCompleted",{insertion:t}),t&&(u?c._hideClone():c._showClone(f),f!==h&&(k(z,it?it.options.ghostClass:c.options.ghostClass,!1),k(z,e.ghostClass,!0)),it!==f&&f!==Rt.active?it=f:f===Rt.active&&it&&(it=null),h===f&&(f._ignoreWhileAnimating=s),f.animateAll(function(){M("dragOverAnimationComplete"),f._ignoreWhileAnimating=null}),f!==h&&(h.animateAll(),h._ignoreWhileAnimating=null)),(s===z&&!z.animated||s===l&&!s.animated)&&(ht=null),e.dragoverBubble||n.rootEl||s===document||(z.parentNode[j]._isOutsideThisEl(n.target),t||Pt(n)),!e.dragoverBubble&&n.stopPropagation&&n.stopPropagation(),p=!0}function N(){tt=F(z),nt=F(z,e.draggable),W({sortable:f,name:"change",toEl:l,newIndex:tt,newDraggableIndex:nt,originalEvent:n})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){d(document,"mousemove",this._onTouchMove),d(document,"touchmove",this._onTouchMove),d(document,"pointermove",this._onTouchMove),d(document,"dragover",Pt),d(document,"mousemove",Pt),d(document,"touchmove",Pt)},_offUpEvents:function(){var t=this.el.ownerDocument;d(t,"mouseup",this._onDrop),d(t,"touchend",this._onDrop),d(t,"pointerup",this._onDrop),d(t,"touchcancel",this._onDrop),d(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;tt=F(z),nt=F(z,n.draggable),K("drop",this,{evt:t}),G=z&&z.parentNode,tt=F(z),nt=F(z,n.draggable),Rt.eventCanceled||(yt=wt=vt=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Lt(this.cloneId),Lt(this._dragStartId),this.nativeDraggable&&(d(document,"drop",this),d(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),s&&R(document.body,"user-select",""),R(z,"transform",""),t&&(dt&&(t.cancelable&&t.preventDefault(),n.dropBubble||t.stopPropagation()),U&&U.parentNode&&U.parentNode.removeChild(U),(q===G||it&&"clone"!==it.lastPutMode)&&Q&&Q.parentNode&&Q.parentNode.removeChild(Q),z&&(this.nativeDraggable&&d(z,"dragend",this),Yt(z),z.style["will-change"]="",dt&&!vt&&k(z,it?it.options.ghostClass:this.options.ghostClass,!1),k(z,this.options.chosenClass,!1),W({sortable:this,name:"unchoose",toEl:G,newIndex:null,newDraggableIndex:null,originalEvent:t}),q!==G?(0<=tt&&(W({rootEl:G,name:"add",toEl:G,fromEl:q,originalEvent:t}),W({sortable:this,name:"remove",toEl:G,originalEvent:t}),W({rootEl:G,name:"sort",toEl:G,fromEl:q,originalEvent:t}),W({sortable:this,name:"sort",toEl:G,originalEvent:t})),it&&it.save()):tt!==J&&0<=tt&&(W({sortable:this,name:"update",toEl:G,originalEvent:t}),W({sortable:this,name:"sort",toEl:G,originalEvent:t})),Rt.active&&(null!=tt&&-1!==tt||(tt=J,nt=et),W({sortable:this,name:"end",toEl:G,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){K("nulling",this),q=z=G=U=V=Q=Z=$=rt=at=dt=tt=nt=J=et=ht=ft=it=ot=Rt.dragged=Rt.ghost=Rt.clone=Rt.active=null,St.forEach(function(t){t.checked=!0}),St.length=lt=st=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":z&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move");t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,i=n.length,r=this.options;o<i;o++)P(t=n[o],r.draggable,this.el,!1)&&e.push(t.getAttribute(r.dataIdAttr)||Ft(t));return e},sort:function(t){var o={},i=this.el;this.toArray().forEach(function(t,e){var n=i.children[e];P(n,this.options.draggable,i,!1)&&(o[t]=n)},this),t.forEach(function(t){o[t]&&(i.removeChild(o[t]),i.appendChild(o[t]))})},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return P(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var n=this.options;if(void 0===e)return n[t];var o=O.modifyOption(this,t,e);n[t]=void 0!==o?o:e,"group"===t&&At(n)},destroy:function(){K("destroy",this);var t=this.el;t[j]=null,d(t,"mousedown",this._onTapStart),d(t,"touchstart",this._onTapStart),d(t,"pointerdown",this._onTapStart),this.nativeDraggable&&(d(t,"dragover",this),d(t,"dragenter",this)),Array.prototype.forEach.call(t.querySelectorAll("[draggable]"),function(t){t.removeAttribute("draggable")}),this._onDrop(),this._disableDelayedDragEvents(),bt.splice(bt.indexOf(this.el),1),this.el=t=null},_hideClone:function(){if(!$){if(K("hideClone",this),Rt.eventCanceled)return;R(Q,"display","none"),this.options.removeCloneOnHide&&Q.parentNode&&Q.parentNode.removeChild(Q),$=!0}},_showClone:function(t){if("clone"===t.lastPutMode){if($){if(K("showClone",this),Rt.eventCanceled)return;q.contains(z)&&!this.options.group.revertClone?q.insertBefore(Q,z):V?q.insertBefore(Q,V):q.appendChild(Q),this.options.group.revertClone&&this.animate(z,Q),R(Q,"display",""),$=!1}}else this._hideClone()}},_t&&u(document,"touchmove",function(t){(Rt.active||vt)&&t.cancelable&&t.preventDefault()}),Rt.utils={on:u,off:d,css:R,find:g,is:function(t,e){return!!P(t,e,t,!1)},extend:function(t,e){if(t&&e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},throttle:D,closest:P,toggleClass:k,clone:S,index:F,nextTick:Ht,cancelNextTick:Lt,detectDirection:Ot,getChild:m},Rt.get=function(t){return t[j]},Rt.mount=function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];e[0].constructor===Array&&(e=e[0]),e.forEach(function(t){if(!t.prototype||!t.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(t));t.utils&&(Rt.utils=I({},Rt.utils,t.utils)),O.mount(t)})},Rt.create=function(t,e){return new Rt(t,e)};var jt,Kt,Wt,zt,Gt,Ut,qt=[],Vt=!(Rt.version="1.10.2");function Zt(){qt.forEach(function(t){clearInterval(t.pid)}),qt=[]}function Qt(){clearInterval(Ut)}function $t(t){var e=t.originalEvent,n=t.putSortable,o=t.dragEl,i=t.activeSortable,r=t.dispatchSortableEvent,a=t.hideGhostForTarget,l=t.unhideGhostForTarget;if(e){var s=n||i;a();var c=e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e,u=document.elementFromPoint(c.clientX,c.clientY);l(),s&&!s.el.contains(u)&&(r("spill"),this.onSpill({dragEl:o,putSortable:n}))}}var Jt,te=D(function(n,t,e,o){if(t.scroll){var i,r=(n.touches?n.touches[0]:n).clientX,a=(n.touches?n.touches[0]:n).clientY,l=t.scrollSensitivity,s=t.scrollSpeed,c=N(),u=!1;Kt!==e&&(Kt=e,Zt(),jt=t.scroll,i=t.scrollFn,!0===jt&&(jt=H(e,!0)));var d=0,h=jt;do{var f=h,p=X(f),g=p.top,v=p.bottom,m=p.left,b=p.right,y=p.width,w=p.height,E=void 0,D=void 0,S=f.scrollWidth,_=f.scrollHeight,C=R(f),T=f.scrollLeft,x=f.scrollTop;D=f===c?(E=y<S&&("auto"===C.overflowX||"scroll"===C.overflowX||"visible"===C.overflowX),w<_&&("auto"===C.overflowY||"scroll"===C.overflowY||"visible"===C.overflowY)):(E=y<S&&("auto"===C.overflowX||"scroll"===C.overflowX),w<_&&("auto"===C.overflowY||"scroll"===C.overflowY));var M=E&&(Math.abs(b-r)<=l&&T+y<S)-(Math.abs(m-r)<=l&&!!T),O=D&&(Math.abs(v-a)<=l&&x+w<_)-(Math.abs(g-a)<=l&&!!x);if(!qt[d])for(var A=0;A<=d;A++)qt[A]||(qt[A]={});qt[d].vx==M&&qt[d].vy==O&&qt[d].el===f||(qt[d].el=f,qt[d].vx=M,qt[d].vy=O,clearInterval(qt[d].pid),0==M&&0==O||(u=!0,qt[d].pid=setInterval(function(){o&&0===this.layer&&Rt.active._onTouchMove(Gt);var t=qt[this.layer].vy?qt[this.layer].vy*s:0,e=qt[this.layer].vx?qt[this.layer].vx*s:0;"function"==typeof i&&"continue"!==i.call(Rt.dragged.parentNode[j],e,t,n,Gt,qt[this.layer].el)||L(qt[this.layer].el,e,t)}.bind({layer:d}),24))),d++}while(t.bubbleScroll&&h!==c&&(h=H(h,!1)));Vt=u}},30);function ee(){}function ne(){}ee.prototype={startIndex:null,dragStart:function(t){var e=t.oldDraggableIndex;this.startIndex=e},onSpill:function(t){var e=t.dragEl,n=t.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();var o=m(this.sortable.el,this.startIndex,this.options);o?this.sortable.el.insertBefore(e,o):this.sortable.el.appendChild(e),this.sortable.animateAll(),n&&n.animateAll()},drop:$t},a(ee,{pluginName:"revertOnSpill"}),ne.prototype={onSpill:function(t){var e=t.dragEl,n=t.putSortable||this.sortable;n.captureAnimationState(),e.parentNode&&e.parentNode.removeChild(e),n.animateAll()},drop:$t},a(ne,{pluginName:"removeOnSpill"});var oe,ie,re,ae,le,se=[],ce=[],ue=!1,de=!1,he=!1;function fe(o,i){ce.forEach(function(t,e){var n=i.children[t.sortableIndex+(o?Number(e):0)];n?i.insertBefore(t,n):i.appendChild(t)})}function pe(){se.forEach(function(t){t!==re&&t.parentNode&&t.parentNode.removeChild(t)})}return Rt.mount(new function(){function t(){for(var t in this.defaults={scroll:!0,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this))}return t.prototype={dragStarted:function(t){var e=t.originalEvent;this.sortable.nativeDraggable?u(document,"dragover",this._handleAutoScroll):this.options.supportPointer?u(document,"pointermove",this._handleFallbackAutoScroll):e.touches?u(document,"touchmove",this._handleFallbackAutoScroll):u(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(t){var e=t.originalEvent;this.options.dragOverBubble||e.rootEl||this._handleAutoScroll(e)},drop:function(){this.sortable.nativeDraggable?d(document,"dragover",this._handleAutoScroll):(d(document,"pointermove",this._handleFallbackAutoScroll),d(document,"touchmove",this._handleFallbackAutoScroll),d(document,"mousemove",this._handleFallbackAutoScroll)),Qt(),Zt(),clearTimeout(f),f=void 0},nulling:function(){Gt=Kt=jt=Vt=Ut=Wt=zt=null,qt.length=0},_handleFallbackAutoScroll:function(t){this._handleAutoScroll(t,!0)},_handleAutoScroll:function(e,n){var o=this,i=(e.touches?e.touches[0]:e).clientX,r=(e.touches?e.touches[0]:e).clientY,t=document.elementFromPoint(i,r);if(Gt=e,n||E||w||s){te(e,this.options,t,n);var a=H(t,!0);!Vt||Ut&&i===Wt&&r===zt||(Ut&&Qt(),Ut=setInterval(function(){var t=H(document.elementFromPoint(i,r),!0);t!==a&&(a=t,Zt()),te(e,o.options,t,n)},10),Wt=i,zt=r)}else{if(!this.options.bubbleScroll||H(t,!0)===N())return void Zt();te(e,this.options,H(t,!1),!1)}}},a(t,{pluginName:"scroll",initializeByDefault:!0})}),Rt.mount(ne,ee),Rt.mount(new function(){function t(){this.defaults={swapClass:"sortable-swap-highlight"}}return t.prototype={dragStart:function(t){var e=t.dragEl;Jt=e},dragOverValid:function(t){var e=t.completed,n=t.target,o=t.onMove,i=t.activeSortable,r=t.changed,a=t.cancel;if(i.options.swap){var l=this.sortable.el,s=this.options;if(n&&n!==l){var c=Jt;Jt=!1!==o(n)?(k(n,s.swapClass,!0),n):null,c&&c!==Jt&&k(c,s.swapClass,!1)}r(),e(!0),a()}},drop:function(t){var e=t.activeSortable,n=t.putSortable,o=t.dragEl,i=n||this.sortable,r=this.options;Jt&&k(Jt,r.swapClass,!1),Jt&&(r.swap||n&&n.options.swap)&&o!==Jt&&(i.captureAnimationState(),i!==e&&e.captureAnimationState(),function(t,e){var n,o,i=t.parentNode,r=e.parentNode;if(!i||!r||i.isEqualNode(e)||r.isEqualNode(t))return;n=F(t),o=F(e),i.isEqualNode(r)&&n<o&&o++;i.insertBefore(e,i.children[n]),r.insertBefore(t,r.children[o])}(o,Jt),i.animateAll(),i!==e&&e.animateAll())},nulling:function(){Jt=null}},a(t,{pluginName:"swap",eventProperties:function(){return{swapItem:Jt}}})}),Rt.mount(new function(){function t(o){for(var t in this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this));o.options.supportPointer?u(document,"pointerup",this._deselectMultiDrag):(u(document,"mouseup",this._deselectMultiDrag),u(document,"touchend",this._deselectMultiDrag)),u(document,"keydown",this._checkKeyDown),u(document,"keyup",this._checkKeyUp),this.defaults={selectedClass:"sortable-selected",multiDragKey:null,setData:function(t,e){var n="";se.length&&ie===o?se.forEach(function(t,e){n+=(e?", ":"")+t.textContent}):n=e.textContent,t.setData("Text",n)}}}return t.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal:function(t){var e=t.dragEl;re=e},delayEnded:function(){this.isMultiDrag=~se.indexOf(re)},setupClone:function(t){var e=t.sortable,n=t.cancel;if(this.isMultiDrag){for(var o=0;o<se.length;o++)ce.push(S(se[o])),ce[o].sortableIndex=se[o].sortableIndex,ce[o].draggable=!1,ce[o].style["will-change"]="",k(ce[o],this.options.selectedClass,!1),se[o]===re&&k(ce[o],this.options.chosenClass,!1);e._hideClone(),n()}},clone:function(t){var e=t.sortable,n=t.rootEl,o=t.dispatchSortableEvent,i=t.cancel;this.isMultiDrag&&(this.options.removeCloneOnHide||se.length&&ie===e&&(fe(!0,n),o("clone"),i()))},showClone:function(t){var e=t.cloneNowShown,n=t.rootEl,o=t.cancel;this.isMultiDrag&&(fe(!1,n),ce.forEach(function(t){R(t,"display","")}),e(),le=!1,o())},hideClone:function(t){var e=this,n=(t.sortable,t.cloneNowHidden),o=t.cancel;this.isMultiDrag&&(ce.forEach(function(t){R(t,"display","none"),e.options.removeCloneOnHide&&t.parentNode&&t.parentNode.removeChild(t)}),n(),le=!0,o())},dragStartGlobal:function(t){t.sortable;!this.isMultiDrag&&ie&&ie.multiDrag._deselectMultiDrag(),se.forEach(function(t){t.sortableIndex=F(t)}),se=se.sort(function(t,e){return t.sortableIndex-e.sortableIndex}),he=!0},dragStarted:function(t){var e=this,n=t.sortable;if(this.isMultiDrag){if(this.options.sort&&(n.captureAnimationState(),this.options.animation)){se.forEach(function(t){t!==re&&R(t,"position","absolute")});var o=X(re,!1,!0,!0);se.forEach(function(t){t!==re&&_(t,o)}),ue=de=!0}n.animateAll(function(){ue=de=!1,e.options.animation&&se.forEach(function(t){C(t)}),e.options.sort&&pe()})}},dragOver:function(t){var e=t.target,n=t.completed,o=t.cancel;de&&~se.indexOf(e)&&(n(!1),o())},revert:function(t){var e=t.fromSortable,n=t.rootEl,o=t.sortable,i=t.dragRect;1<se.length&&(se.forEach(function(t){o.addAnimationState({target:t,rect:de?X(t):i}),C(t),t.fromRect=i,e.removeAnimationState(t)}),de=!1,function(o,i){se.forEach(function(t,e){var n=i.children[t.sortableIndex+(o?Number(e):0)];n?i.insertBefore(t,n):i.appendChild(t)})}(!this.options.removeCloneOnHide,n))},dragOverCompleted:function(t){var e=t.sortable,n=t.isOwner,o=t.insertion,i=t.activeSortable,r=t.parentEl,a=t.putSortable,l=this.options;if(o){if(n&&i._hideClone(),ue=!1,l.animation&&1<se.length&&(de||!n&&!i.options.sort&&!a)){var s=X(re,!1,!0,!0);se.forEach(function(t){t!==re&&(_(t,s),r.appendChild(t))}),de=!0}if(!n)if(de||pe(),1<se.length){var c=le;i._showClone(e),i.options.animation&&!le&&c&&ce.forEach(function(t){i.addAnimationState({target:t,rect:ae}),t.fromRect=ae,t.thisAnimationDuration=null})}else i._showClone(e)}},dragOverAnimationCapture:function(t){var e=t.dragRect,n=t.isOwner,o=t.activeSortable;if(se.forEach(function(t){t.thisAnimationDuration=null}),o.options.animation&&!n&&o.multiDrag.isMultiDrag){ae=a({},e);var i=v(re,!0);ae.top-=i.f,ae.left-=i.e}},dragOverAnimationComplete:function(){de&&(de=!1,pe())},drop:function(t){var e=t.originalEvent,n=t.rootEl,o=t.parentEl,i=t.sortable,r=t.dispatchSortableEvent,a=t.oldIndex,l=t.putSortable,s=l||this.sortable;if(e){var c=this.options,u=o.children;if(!he)if(c.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),k(re,c.selectedClass,!~se.indexOf(re)),~se.indexOf(re))se.splice(se.indexOf(re),1),oe=null,A({sortable:i,rootEl:n,name:"deselect",targetEl:re,originalEvt:e});else{if(se.push(re),A({sortable:i,rootEl:n,name:"select",targetEl:re,originalEvt:e}),e.shiftKey&&oe&&i.el.contains(oe)){var d,h,f=F(oe),p=F(re);if(~f&&~p&&f!==p)for(d=f<p?(h=f,p):(h=p,f+1);h<d;h++)~se.indexOf(u[h])||(k(u[h],c.selectedClass,!0),se.push(u[h]),A({sortable:i,rootEl:n,name:"select",targetEl:u[h],originalEvt:e}))}else oe=re;ie=s}if(he&&this.isMultiDrag){if((o[j].options.sort||o!==n)&&1<se.length){var g=X(re),v=F(re,":not(."+this.options.selectedClass+")");if(!ue&&c.animation&&(re.thisAnimationDuration=null),s.captureAnimationState(),!ue&&(c.animation&&(re.fromRect=g,se.forEach(function(t){if(t.thisAnimationDuration=null,t!==re){var e=de?X(t):g;t.fromRect=e,s.addAnimationState({target:t,rect:e})}})),pe(),se.forEach(function(t){u[v]?o.insertBefore(t,u[v]):o.appendChild(t),v++}),a===F(re))){var m=!1;se.forEach(function(t){t.sortableIndex===F(t)||(m=!0)}),m&&r("update")}se.forEach(function(t){C(t)}),s.animateAll()}ie=s}(n===o||l&&"clone"!==l.lastPutMode)&&ce.forEach(function(t){t.parentNode&&t.parentNode.removeChild(t)})}},nullingGlobal:function(){this.isMultiDrag=he=!1,ce.length=0},destroyGlobal:function(){this._deselectMultiDrag(),d(document,"pointerup",this._deselectMultiDrag),d(document,"mouseup",this._deselectMultiDrag),d(document,"touchend",this._deselectMultiDrag),d(document,"keydown",this._checkKeyDown),d(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(t){if(!(void 0!==he&&he||ie!==this.sortable||t&&P(t.target,this.options.draggable,this.sortable.el,!1)||t&&0!==t.button))for(;se.length;){var e=se[0];k(e,this.options.selectedClass,!1),se.shift(),A({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:e,originalEvt:t})}},_checkKeyDown:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},a(t,{pluginName:"multiDrag",utils:{select:function(t){var e=t.parentNode[j];e&&e.options.multiDrag&&!~se.indexOf(t)&&(ie&&ie!==e&&(ie.multiDrag._deselectMultiDrag(),ie=e),k(t,e.options.selectedClass,!0),se.push(t))},deselect:function(t){var e=t.parentNode[j],n=se.indexOf(t);e&&e.options.multiDrag&&~n&&(k(t,e.options.selectedClass,!1),se.splice(n,1))}},eventProperties:function(){var n=this,o=[],i=[];return se.forEach(function(t){var e;o.push({multiDragElement:t,index:t.sortableIndex}),e=de&&t!==re?-1:de?F(t,":not(."+n.options.selectedClass+")"):F(t),i.push({multiDragElement:t,index:e})}),{items:e(se),clones:[].concat(ce),oldIndicies:o,newIndicies:i}},optionListeners:{multiDragKey:function(t){return"ctrl"===(t=t.toLowerCase())?t="Control":1<t.length&&(t=t.charAt(0).toUpperCase()+t.substr(1)),t}}})}),Rt});/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var util = require('./util');
var has = Object.prototype.hasOwnProperty;
var hasNativeMap = typeof Map !== "undefined";

/**
 * A data structure which is a combination of an array and a set. Adding a new
 * member is O(1), testing for membership is O(1), and finding the index of an
 * element is O(1). Removing elements from the set is not supported. Only
 * strings are supported for membership.
 */
function ArraySet() {
  this._array = [];
  this._set = hasNativeMap ? new Map() : Object.create(null);
}

/**
 * Static method for creating ArraySet instances from an existing array.
 */
ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
  var set = new ArraySet();
  for (var i = 0, len = aArray.length; i < len; i++) {
    set.add(aArray[i], aAllowDuplicates);
  }
  return set;
};

/**
 * Return how many unique items are in this ArraySet. If duplicates have been
 * added, than those do not count towards the size.
 *
 * @returns Number
 */
ArraySet.prototype.size = function ArraySet_size() {
  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
};

/**
 * Add the given string to this set.
 *
 * @param String aStr
 */
ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
  var idx = this._array.length;
  if (!isDuplicate || aAllowDuplicates) {
    this._array.push(aStr);
  }
  if (!isDuplicate) {
    if (hasNativeMap) {
      this._set.set(aStr, idx);
    } else {
      this._set[sStr] = idx;
    }
  }
};

/**
 * Is the given string a member of this set?
 *
 * @param String aStr
 */
ArraySet.prototype.has = function ArraySet_has(aStr) {
  if (hasNativeMap) {
    return this._set.has(aStr);
  } else {
    var sStr = util.toSetString(aStr);
    return has.call(this._set, sStr);
  }
};

/**
 * What is the index of the given string in the array?
 *
 * @param String aStr
 */
ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
  if (hasNativeMap) {
    var idx = this._set.get(aStr);
    if (idx >= 0) {
        return idx;
    }
  } else {
    var sStr = util.toSetString(aStr);
    if (has.call(this._set, sStr)) {
      return this._set[sStr];
    }
  }

  throw new Error('"' + aStr + '" is not in the set.');
};

/**
 * What is the element at the given index?
 *
 * @param Number aIdx
 */
ArraySet.prototype.at = function ArraySet_at(aIdx) {
  if (aIdx >= 0 && aIdx < this._array.length) {
    return this._array[aIdx];
  }
  throw new Error('No element indexed by ' + aIdx);
};

/**
 * Returns the array representation of this set (which has the proper indices
 * indicated by indexOf). Note that this is a copy of the internal array used
 * for storing the members so that no one can mess with internal state.
 */
ArraySet.prototype.toArray = function ArraySet_toArray() {
  return this._array.slice();
};

exports.ArraySet = ArraySet;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 *
 * Based on the Base 64 VLQ implementation in Closure Compiler:
 * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
 *
 * Copyright 2011 The Closure Compiler Authors. All rights reserved.
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above
 *    copyright notice, this list of conditions and the following
 *    disclaimer in the documentation and/or other materials provided
 *    with the distribution.
 *  * Neither the name of Google Inc. nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

var base64 = require('./base64');

// A single base 64 digit can contain 6 bits of data. For the base 64 variable
// length quantities we use in the source map spec, the first bit is the sign,
// the next four bits are the actual value, and the 6th bit is the
// continuation bit. The continuation bit tells us whether there are more
// digits in this value following this digit.
//
//   Continuation
//   |    Sign
//   |    |
//   V    V
//   101011

var VLQ_BASE_SHIFT = 5;

// binary: 100000
var VLQ_BASE = 1 << VLQ_BASE_SHIFT;

// binary: 011111
var VLQ_BASE_MASK = VLQ_BASE - 1;

// binary: 100000
var VLQ_CONTINUATION_BIT = VLQ_BASE;

/**
 * Converts from a two-complement value to a value where the sign bit is
 * placed in the least significant bit.  For example, as decimals:
 *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
 *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
 */
function toVLQSigned(aValue) {
  return aValue < 0
    ? ((-aValue) << 1) + 1
    : (aValue << 1) + 0;
}

/**
 * Converts to a two-complement value from a value where the sign bit is
 * placed in the least significant bit.  For example, as decimals:
 *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
 *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
 */
function fromVLQSigned(aValue) {
  var isNegative = (aValue & 1) === 1;
  var shifted = aValue >> 1;
  return isNegative
    ? -shifted
    : shifted;
}

/**
 * Returns the base 64 VLQ encoded value.
 */
exports.encode = function base64VLQ_encode(aValue) {
  var encoded = "";
  var digit;

  var vlq = toVLQSigned(aValue);

  do {
    digit = vlq & VLQ_BASE_MASK;
    vlq >>>= VLQ_BASE_SHIFT;
    if (vlq > 0) {
      // There are still more digits in this value, so we must make sure the
      // continuation bit is marked.
      digit |= VLQ_CONTINUATION_BIT;
    }
    encoded += base64.encode(digit);
  } while (vlq > 0);

  return encoded;
};

/**
 * Decodes the next base 64 VLQ value from the given string and returns the
 * value and the rest of the string via the out parameter.
 */
exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
  var strLen = aStr.length;
  var result = 0;
  var shift = 0;
  var continuation, digit;

  do {
    if (aIndex >= strLen) {
      throw new Error("Expected more digits in base 64 VLQ value.");
    }

    digit = base64.decode(aStr.charCodeAt(aIndex++));
    if (digit === -1) {
      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
    }

    continuation = !!(digit & VLQ_CONTINUATION_BIT);
    digit &= VLQ_BASE_MASK;
    result = result + (digit << shift);
    shift += VLQ_BASE_SHIFT;
  } while (continuation);

  aOutParam.value = fromVLQSigned(result);
  aOutParam.rest = aIndex;
};
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');

/**
 * Encode an integer in the range of 0 to 63 to a single base 64 digit.
 */
exports.encode = function (number) {
  if (0 <= number && number < intToCharMap.length) {
    return intToCharMap[number];
  }
  throw new TypeError("Must be between 0 and 63: " + number);
};

/**
 * Decode a single base 64 character code digit to an integer. Returns -1 on
 * failure.
 */
exports.decode = function (charCode) {
  var bigA = 65;     // 'A'
  var bigZ = 90;     // 'Z'

  var littleA = 97;  // 'a'
  var littleZ = 122; // 'z'

  var zero = 48;     // '0'
  var nine = 57;     // '9'

  var plus = 43;     // '+'
  var slash = 47;    // '/'

  var littleOffset = 26;
  var numberOffset = 52;

  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  if (bigA <= charCode && charCode <= bigZ) {
    return (charCode - bigA);
  }

  // 26 - 51: abcdefghijklmnopqrstuvwxyz
  if (littleA <= charCode && charCode <= littleZ) {
    return (charCode - littleA + littleOffset);
  }

  // 52 - 61: 0123456789
  if (zero <= charCode && charCode <= nine) {
    return (charCode - zero + numberOffset);
  }

  // 62: +
  if (charCode == plus) {
    return 62;
  }

  // 63: /
  if (charCode == slash) {
    return 63;
  }

  // Invalid base64 digit.
  return -1;
};
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

exports.GREATEST_LOWER_BOUND = 1;
exports.LEAST_UPPER_BOUND = 2;

/**
 * Recursive implementation of binary search.
 *
 * @param aLow Indices here and lower do not contain the needle.
 * @param aHigh Indices here and higher do not contain the needle.
 * @param aNeedle The element being searched for.
 * @param aHaystack The non-empty array being searched.
 * @param aCompare Function which takes two elements and returns -1, 0, or 1.
 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 */
function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
  // This function terminates when one of the following is true:
  //
  //   1. We find the exact element we are looking for.
  //
  //   2. We did not find the exact element, but we can return the index of
  //      the next-closest element.
  //
  //   3. We did not find the exact element, and there is no next-closest
  //      element than the one we are searching for, so we return -1.
  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
  var cmp = aCompare(aNeedle, aHaystack[mid], true);
  if (cmp === 0) {
    // Found the element we are looking for.
    return mid;
  }
  else if (cmp > 0) {
    // Our needle is greater than aHaystack[mid].
    if (aHigh - mid > 1) {
      // The element is in the upper half.
      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
    }

    // The exact needle element was not found in this haystack. Determine if
    // we are in termination case (3) or (2) and return the appropriate thing.
    if (aBias == exports.LEAST_UPPER_BOUND) {
      return aHigh < aHaystack.length ? aHigh : -1;
    } else {
      return mid;
    }
  }
  else {
    // Our needle is less than aHaystack[mid].
    if (mid - aLow > 1) {
      // The element is in the lower half.
      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
    }

    // we are in termination case (3) or (2) and return the appropriate thing.
    if (aBias == exports.LEAST_UPPER_BOUND) {
      return mid;
    } else {
      return aLow < 0 ? -1 : aLow;
    }
  }
}

/**
 * This is an implementation of binary search which will always try and return
 * the index of the closest element if there is no exact hit. This is because
 * mappings between original and generated line/col pairs are single points,
 * and there is an implicit region between each of them, so a miss just means
 * that you aren't on the very start of a region.
 *
 * @param aNeedle The element you are looking for.
 * @param aHaystack The array that is being searched.
 * @param aCompare A function which takes the needle and an element in the
 *     array and returns -1, 0, or 1 depending on whether the needle is less
 *     than, equal to, or greater than the element, respectively.
 * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
 *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
 */
exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
  if (aHaystack.length === 0) {
    return -1;
  }

  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
  if (index < 0) {
    return -1;
  }

  // We have found either the exact element, or the next-closest element than
  // the one we are searching for. However, there may be more than one such
  // element. Make sure we always return the smallest of these.
  while (index - 1 >= 0) {
    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
      break;
    }
    --index;
  }

  return index;
};
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2014 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var util = require('./util');

/**
 * Determine whether mappingB is after mappingA with respect to generated
 * position.
 */
function generatedPositionAfter(mappingA, mappingB) {
  // Optimized for most common case
  var lineA = mappingA.generatedLine;
  var lineB = mappingB.generatedLine;
  var columnA = mappingA.generatedColumn;
  var columnB = mappingB.generatedColumn;
  return lineB > lineA || lineB == lineA && columnB >= columnA ||
         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
}

/**
 * A data structure to provide a sorted view of accumulated mappings in a
 * performance conscious manner. It trades a neglibable overhead in general
 * case for a large speedup in case of mappings being added in order.
 */
function MappingList() {
  this._array = [];
  this._sorted = true;
  // Serves as infimum
  this._last = {generatedLine: -1, generatedColumn: 0};
}

/**
 * Iterate through internal items. This method takes the same arguments that
 * `Array.prototype.forEach` takes.
 *
 * NOTE: The order of the mappings is NOT guaranteed.
 */
MappingList.prototype.unsortedForEach =
  function MappingList_forEach(aCallback, aThisArg) {
    this._array.forEach(aCallback, aThisArg);
  };

/**
 * Add the given source mapping.
 *
 * @param Object aMapping
 */
MappingList.prototype.add = function MappingList_add(aMapping) {
  if (generatedPositionAfter(this._last, aMapping)) {
    this._last = aMapping;
    this._array.push(aMapping);
  } else {
    this._sorted = false;
    this._array.push(aMapping);
  }
};

/**
 * Returns the flat, sorted array of mappings. The mappings are sorted by
 * generated position.
 *
 * WARNING: This method returns internal data without copying, for
 * performance. The return value must NOT be mutated, and should be treated as
 * an immutable borrow. If you want to take ownership, you must make your own
 * copy.
 */
MappingList.prototype.toArray = function MappingList_toArray() {
  if (!this._sorted) {
    this._array.sort(util.compareByGeneratedPositionsInflated);
    this._sorted = true;
  }
  return this._array;
};

exports.MappingList = MappingList;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

// It turns out that some (most?) JavaScript engines don't self-host
// `Array.prototype.sort`. This makes sense because C++ will likely remain
// faster than JS when doing raw CPU-intensive sorting. However, when using a
// custom comparator function, calling back and forth between the VM's C++ and
// JIT'd JS is rather slow *and* loses JIT type information, resulting in
// worse generated code for the comparator function than would be optimal. In
// fact, when sorting with a comparator, these costs outweigh the benefits of
// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
// a ~3500ms mean speed-up in `bench/bench.html`.

function SortTemplate(comparator) {

/**
 * Swap the elements indexed by `x` and `y` in the array `ary`.
 *
 * @param {Array} ary
 *        The array.
 * @param {Number} x
 *        The index of the first item.
 * @param {Number} y
 *        The index of the second item.
 */
function swap(ary, x, y) {
  var temp = ary[x];
  ary[x] = ary[y];
  ary[y] = temp;
}

/**
 * Returns a random integer within the range `low .. high` inclusive.
 *
 * @param {Number} low
 *        The lower bound on the range.
 * @param {Number} high
 *        The upper bound on the range.
 */
function randomIntInRange(low, high) {
  return Math.round(low + (Math.random() * (high - low)));
}

/**
 * The Quick Sort algorithm.
 *
 * @param {Array} ary
 *        An array to sort.
 * @param {function} comparator
 *        Function to use to compare two items.
 * @param {Number} p
 *        Start index of the array
 * @param {Number} r
 *        End index of the array
 */
function doQuickSort(ary, comparator, p, r) {
  // If our lower bound is less than our upper bound, we (1) partition the
  // array into two pieces and (2) recurse on each half. If it is not, this is
  // the empty array and our base case.

  if (p < r) {
    // (1) Partitioning.
    //
    // The partitioning chooses a pivot between `p` and `r` and moves all
    // elements that are less than or equal to the pivot to the before it, and
    // all the elements that are greater than it after it. The effect is that
    // once partition is done, the pivot is in the exact place it will be when
    // the array is put in sorted order, and it will not need to be moved
    // again. This runs in O(n) time.

    // Always choose a random pivot so that an input array which is reverse
    // sorted does not cause O(n^2) running time.
    var pivotIndex = randomIntInRange(p, r);
    var i = p - 1;

    swap(ary, pivotIndex, r);
    var pivot = ary[r];

    // Immediately after `j` is incremented in this loop, the following hold
    // true:
    //
    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
    //
    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
    for (var j = p; j < r; j++) {
      if (comparator(ary[j], pivot, false) <= 0) {
        i += 1;
        swap(ary, i, j);
      }
    }

    swap(ary, i + 1, j);
    var q = i + 1;

    // (2) Recurse on each half.

    doQuickSort(ary, comparator, p, q - 1);
    doQuickSort(ary, comparator, q + 1, r);
  }
}

  return doQuickSort;
}

function cloneSort(comparator) {
  let template = SortTemplate.toString();
  let templateFn = new Function(`return ${template}`)();
  return templateFn(comparator);
}

/**
 * Sort the given array in-place with the given comparator function.
 *
 * @param {Array} ary
 *        An array to sort.
 * @param {function} comparator
 *        Function to use to compare two items.
 */

let sortCache = new WeakMap();
exports.quickSort = function (ary, comparator, start = 0) {
  let doQuickSort = sortCache.get(comparator);
  if (doQuickSort === void 0) {
    doQuickSort = cloneSort(comparator);
    sortCache.set(comparator, doQuickSort);
  }
  doQuickSort(ary, comparator, start, ary.length - 1);
};
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var util = require('./util');
var binarySearch = require('./binary-search');
var ArraySet = require('./array-set').ArraySet;
var base64VLQ = require('./base64-vlq');
var quickSort = require('./quick-sort').quickSort;

function SourceMapConsumer(aSourceMap, aSourceMapURL) {
  var sourceMap = aSourceMap;
  if (typeof aSourceMap === 'string') {
    sourceMap = util.parseSourceMapInput(aSourceMap);
  }

  return sourceMap.sections != null
    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
}

SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
}

/**
 * The version of the source mapping spec that we are consuming.
 */
SourceMapConsumer.prototype._version = 3;

// `__generatedMappings` and `__originalMappings` are arrays that hold the
// parsed mapping coordinates from the source map's "mappings" attribute. They
// are lazily instantiated, accessed via the `_generatedMappings` and
// `_originalMappings` getters respectively, and we only parse the mappings
// and create these arrays once queried for a source location. We jump through
// these hoops because there can be many thousands of mappings, and parsing
// them is expensive, so we only want to do it if we must.
//
// Each object in the arrays is of the form:
//
//     {
//       generatedLine: The line number in the generated code,
//       generatedColumn: The column number in the generated code,
//       source: The path to the original source file that generated this
//               chunk of code,
//       originalLine: The line number in the original source that
//                     corresponds to this chunk of generated code,
//       originalColumn: The column number in the original source that
//                       corresponds to this chunk of generated code,
//       name: The name of the original symbol which generated this chunk of
//             code.
//     }
//
// All properties except for `generatedLine` and `generatedColumn` can be
// `null`.
//
// `_generatedMappings` is ordered by the generated positions.
//
// `_originalMappings` is ordered by the original positions.

SourceMapConsumer.prototype.__generatedMappings = null;
Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
  configurable: true,
  enumerable: true,
  get: function () {
    if (!this.__generatedMappings) {
      this._parseMappings(this._mappings, this.sourceRoot);
    }

    return this.__generatedMappings;
  }
});

SourceMapConsumer.prototype.__originalMappings = null;
Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
  configurable: true,
  enumerable: true,
  get: function () {
    if (!this.__originalMappings) {
      this._parseMappings(this._mappings, this.sourceRoot);
    }

    return this.__originalMappings;
  }
});

SourceMapConsumer.prototype._charIsMappingSeparator =
  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
    var c = aStr.charAt(index);
    return c === ";" || c === ",";
  };

/**
 * Parse the mappings in a string in to a data structure which we can easily
 * query (the ordered arrays in the `this.__generatedMappings` and
 * `this.__originalMappings` properties).
 */
SourceMapConsumer.prototype._parseMappings =
  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
    throw new Error("Subclasses must implement _parseMappings");
  };

SourceMapConsumer.GENERATED_ORDER = 1;
SourceMapConsumer.ORIGINAL_ORDER = 2;

SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
SourceMapConsumer.LEAST_UPPER_BOUND = 2;

/**
 * Iterate over each mapping between an original source/line/column and a
 * generated line/column in this source map.
 *
 * @param Function aCallback
 *        The function that is called with each mapping.
 * @param Object aContext
 *        Optional. If specified, this object will be the value of `this` every
 *        time that `aCallback` is called.
 * @param aOrder
 *        Either `SourceMapConsumer.GENERATED_ORDER` or
 *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
 *        iterate over the mappings sorted by the generated file's line/column
 *        order or the original's source/line/column order, respectively. Defaults to
 *        `SourceMapConsumer.GENERATED_ORDER`.
 */
SourceMapConsumer.prototype.eachMapping =
  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
    var context = aContext || null;
    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;

    var mappings;
    switch (order) {
    case SourceMapConsumer.GENERATED_ORDER:
      mappings = this._generatedMappings;
      break;
    case SourceMapConsumer.ORIGINAL_ORDER:
      mappings = this._originalMappings;
      break;
    default:
      throw new Error("Unknown order of iteration.");
    }

    var sourceRoot = this.sourceRoot;
    var boundCallback = aCallback.bind(context);
    var names = this._names;
    var sources = this._sources;
    var sourceMapURL = this._sourceMapURL;

    for (var i = 0, n = mappings.length; i < n; i++) {
      var mapping = mappings[i];
      var source = mapping.source === null ? null : sources.at(mapping.source);
      source = util.computeSourceURL(sourceRoot, source, sourceMapURL);
      boundCallback({
        source: source,
        generatedLine: mapping.generatedLine,
        generatedColumn: mapping.generatedColumn,
        originalLine: mapping.originalLine,
        originalColumn: mapping.originalColumn,
        name: mapping.name === null ? null : names.at(mapping.name)
      });
    }
  };

/**
 * Returns all generated line and column information for the original source,
 * line, and column provided. If no column is provided, returns all mappings
 * corresponding to a either the line we are searching for or the next
 * closest line that has any mappings. Otherwise, returns all mappings
 * corresponding to the given line and either the column we are searching for
 * or the next closest column that has any offsets.
 *
 * The only argument is an object with the following properties:
 *
 *   - source: The filename of the original source.
 *   - line: The line number in the original source.  The line number is 1-based.
 *   - column: Optional. the column number in the original source.
 *    The column number is 0-based.
 *
 * and an array of objects is returned, each with the following properties:
 *
 *   - line: The line number in the generated source, or null.  The
 *    line number is 1-based.
 *   - column: The column number in the generated source, or null.
 *    The column number is 0-based.
 */
SourceMapConsumer.prototype.allGeneratedPositionsFor =
  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
    var line = util.getArg(aArgs, 'line');

    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
    // returns the index of the closest mapping less than the needle. By
    // setting needle.originalColumn to 0, we thus find the last mapping for
    // the given line, provided such a mapping exists.
    var needle = {
      source: util.getArg(aArgs, 'source'),
      originalLine: line,
      originalColumn: util.getArg(aArgs, 'column', 0)
    };

    needle.source = this._findSourceIndex(needle.source);
    if (needle.source < 0) {
      return [];
    }

    var mappings = [];

    var index = this._findMapping(needle,
                                  this._originalMappings,
                                  "originalLine",
                                  "originalColumn",
                                  util.compareByOriginalPositions,
                                  binarySearch.LEAST_UPPER_BOUND);
    if (index >= 0) {
      var mapping = this._originalMappings[index];

      if (aArgs.column === undefined) {
        var originalLine = mapping.originalLine;

        // Iterate until either we run out of mappings, or we run into
        // a mapping for a different line than the one we found. Since
        // mappings are sorted, this is guaranteed to find all mappings for
        // the line we found.
        while (mapping && mapping.originalLine === originalLine) {
          mappings.push({
            line: util.getArg(mapping, 'generatedLine', null),
            column: util.getArg(mapping, 'generatedColumn', null),
            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
          });

          mapping = this._originalMappings[++index];
        }
      } else {
        var originalColumn = mapping.originalColumn;

        // Iterate until either we run out of mappings, or we run into
        // a mapping for a different line than the one we were searching for.
        // Since mappings are sorted, this is guaranteed to find all mappings for
        // the line we are searching for.
        while (mapping &&
               mapping.originalLine === line &&
               mapping.originalColumn == originalColumn) {
          mappings.push({
            line: util.getArg(mapping, 'generatedLine', null),
            column: util.getArg(mapping, 'generatedColumn', null),
            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
          });

          mapping = this._originalMappings[++index];
        }
      }
    }

    return mappings;
  };

exports.SourceMapConsumer = SourceMapConsumer;

/**
 * A BasicSourceMapConsumer instance represents a parsed source map which we can
 * query for information about the original file positions by giving it a file
 * position in the generated source.
 *
 * The first parameter is the raw source map (either as a JSON string, or
 * already parsed to an object). According to the spec, source maps have the
 * following attributes:
 *
 *   - version: Which version of the source map spec this map is following.
 *   - sources: An array of URLs to the original source files.
 *   - names: An array of identifiers which can be referrenced by individual mappings.
 *   - sourceRoot: Optional. The URL root from which all sources are relative.
 *   - sourcesContent: Optional. An array of contents of the original source files.
 *   - mappings: A string of base64 VLQs which contain the actual mappings.
 *   - file: Optional. The generated file this source map is associated with.
 *
 * Here is an example source map, taken from the source map spec[0]:
 *
 *     {
 *       version : 3,
 *       file: "out.js",
 *       sourceRoot : "",
 *       sources: ["foo.js", "bar.js"],
 *       names: ["src", "maps", "are", "fun"],
 *       mappings: "AA,AB;;ABCDE;"
 *     }
 *
 * The second parameter, if given, is a string whose value is the URL
 * at which the source map was found.  This URL is used to compute the
 * sources array.
 *
 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
 */
function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
  var sourceMap = aSourceMap;
  if (typeof aSourceMap === 'string') {
    sourceMap = util.parseSourceMapInput(aSourceMap);
  }

  var version = util.getArg(sourceMap, 'version');
  var sources = util.getArg(sourceMap, 'sources');
  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
  // requires the array) to play nice here.
  var names = util.getArg(sourceMap, 'names', []);
  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
  var mappings = util.getArg(sourceMap, 'mappings');
  var file = util.getArg(sourceMap, 'file', null);

  // Once again, Sass deviates from the spec and supplies the version as a
  // string rather than a number, so we use loose equality checking here.
  if (version != this._version) {
    throw new Error('Unsupported version: ' + version);
  }

  if (sourceRoot) {
    sourceRoot = util.normalize(sourceRoot);
  }

  sources = sources
    .map(String)
    // Some source maps produce relative source paths like "./foo.js" instead of
    // "foo.js".  Normalize these first so that future comparisons will succeed.
    // See bugzil.la/1090768.
    .map(util.normalize)
    // Always ensure that absolute sources are internally stored relative to
    // the source root, if the source root is absolute. Not doing this would
    // be particularly problematic when the source root is a prefix of the
    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
    .map(function (source) {
      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
        ? util.relative(sourceRoot, source)
        : source;
    });

  // Pass `true` below to allow duplicate names and sources. While source maps
  // are intended to be compressed and deduplicated, the TypeScript compiler
  // sometimes generates source maps with duplicates in them. See Github issue
  // #72 and bugzil.la/889492.
  this._names = ArraySet.fromArray(names.map(String), true);
  this._sources = ArraySet.fromArray(sources, true);

  this._absoluteSources = this._sources.toArray().map(function (s) {
    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
  });

  this.sourceRoot = sourceRoot;
  this.sourcesContent = sourcesContent;
  this._mappings = mappings;
  this._sourceMapURL = aSourceMapURL;
  this.file = file;
}

BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;

/**
 * Utility function to find the index of a source.  Returns -1 if not
 * found.
 */
BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
  var relativeSource = aSource;
  if (this.sourceRoot != null) {
    relativeSource = util.relative(this.sourceRoot, relativeSource);
  }

  if (this._sources.has(relativeSource)) {
    return this._sources.indexOf(relativeSource);
  }

  // Maybe aSource is an absolute URL as returned by |sources|.  In
  // this case we can't simply undo the transform.
  var i;
  for (i = 0; i < this._absoluteSources.length; ++i) {
    if (this._absoluteSources[i] == aSource) {
      return i;
    }
  }

  return -1;
};

/**
 * Create a BasicSourceMapConsumer from a SourceMapGenerator.
 *
 * @param SourceMapGenerator aSourceMap
 *        The source map that will be consumed.
 * @param String aSourceMapURL
 *        The URL at which the source map can be found (optional)
 * @returns BasicSourceMapConsumer
 */
BasicSourceMapConsumer.fromSourceMap =
  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
    var smc = Object.create(BasicSourceMapConsumer.prototype);

    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
    smc.sourceRoot = aSourceMap._sourceRoot;
    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
                                                            smc.sourceRoot);
    smc.file = aSourceMap._file;
    smc._sourceMapURL = aSourceMapURL;
    smc._absoluteSources = smc._sources.toArray().map(function (s) {
      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
    });

    // Because we are modifying the entries (by converting string sources and
    // names to indices into the sources and names ArraySets), we have to make
    // a copy of the entry or else bad things happen. Shared mutable state
    // strikes again! See github issue #191.

    var generatedMappings = aSourceMap._mappings.toArray().slice();
    var destGeneratedMappings = smc.__generatedMappings = [];
    var destOriginalMappings = smc.__originalMappings = [];

    for (var i = 0, length = generatedMappings.length; i < length; i++) {
      var srcMapping = generatedMappings[i];
      var destMapping = new Mapping;
      destMapping.generatedLine = srcMapping.generatedLine;
      destMapping.generatedColumn = srcMapping.generatedColumn;

      if (srcMapping.source) {
        destMapping.source = sources.indexOf(srcMapping.source);
        destMapping.originalLine = srcMapping.originalLine;
        destMapping.originalColumn = srcMapping.originalColumn;

        if (srcMapping.name) {
          destMapping.name = names.indexOf(srcMapping.name);
        }

        destOriginalMappings.push(destMapping);
      }

      destGeneratedMappings.push(destMapping);
    }

    quickSort(smc.__originalMappings, util.compareByOriginalPositions);

    return smc;
  };

/**
 * The version of the source mapping spec that we are consuming.
 */
BasicSourceMapConsumer.prototype._version = 3;

/**
 * The list of original sources.
 */
Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
  get: function () {
    return this._absoluteSources.slice();
  }
});

/**
 * Provide the JIT with a nice shape / hidden class.
 */
function Mapping() {
  this.generatedLine = 0;
  this.generatedColumn = 0;
  this.source = null;
  this.originalLine = null;
  this.originalColumn = null;
  this.name = null;
}

/**
 * Parse the mappings in a string in to a data structure which we can easily
 * query (the ordered arrays in the `this.__generatedMappings` and
 * `this.__originalMappings` properties).
 */

const compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;
function sortGenerated(array, start) {
  let l = array.length;
  let n = array.length - start;
  if (n <= 1) {
    return;
  } else if (n == 2) {
    let a = array[start];
    let b = array[start + 1];
    if (compareGenerated(a, b) > 0) {
      array[start] = b;
      array[start + 1] = a;
    }
  } else if (n < 20) {
    for (let i = start; i < l; i++) {
      for (let j = i; j > start; j--) {
        let a = array[j - 1];
        let b = array[j];
        if (compareGenerated(a, b) <= 0) {
          break;
        }
        array[j - 1] = b;
        array[j] = a;
      }
    }
  } else {
    quickSort(array, compareGenerated, start);
  }
}
BasicSourceMapConsumer.prototype._parseMappings =
  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
    var generatedLine = 1;
    var previousGeneratedColumn = 0;
    var previousOriginalLine = 0;
    var previousOriginalColumn = 0;
    var previousSource = 0;
    var previousName = 0;
    var length = aStr.length;
    var index = 0;
    var cachedSegments = {};
    var temp = {};
    var originalMappings = [];
    var generatedMappings = [];
    var mapping, str, segment, end, value;

    let subarrayStart = 0;
    while (index < length) {
      if (aStr.charAt(index) === ';') {
        generatedLine++;
        index++;
        previousGeneratedColumn = 0;

        sortGenerated(generatedMappings, subarrayStart);
        subarrayStart = generatedMappings.length;
      }
      else if (aStr.charAt(index) === ',') {
        index++;
      }
      else {
        mapping = new Mapping();
        mapping.generatedLine = generatedLine;

        for (end = index; end < length; end++) {
          if (this._charIsMappingSeparator(aStr, end)) {
            break;
          }
        }
        str = aStr.slice(index, end);

        segment = [];
        while (index < end) {
          base64VLQ.decode(aStr, index, temp);
          value = temp.value;
          index = temp.rest;
          segment.push(value);
        }

        if (segment.length === 2) {
          throw new Error('Found a source, but no line and column');
        }

        if (segment.length === 3) {
          throw new Error('Found a source and line, but no column');
        }

        // Generated column.
        mapping.generatedColumn = previousGeneratedColumn + segment[0];
        previousGeneratedColumn = mapping.generatedColumn;

        if (segment.length > 1) {
          // Original source.
          mapping.source = previousSource + segment[1];
          previousSource += segment[1];

          // Original line.
          mapping.originalLine = previousOriginalLine + segment[2];
          previousOriginalLine = mapping.originalLine;
          // Lines are stored 0-based
          mapping.originalLine += 1;

          // Original column.
          mapping.originalColumn = previousOriginalColumn + segment[3];
          previousOriginalColumn = mapping.originalColumn;

          if (segment.length > 4) {
            // Original name.
            mapping.name = previousName + segment[4];
            previousName += segment[4];
          }
        }

        generatedMappings.push(mapping);
        if (typeof mapping.originalLine === 'number') {
          let currentSource = mapping.source;
          while (originalMappings.length <= currentSource) {
            originalMappings.push(null);
          }
          if (originalMappings[currentSource] === null) {
            originalMappings[currentSource] = [];
          }
          originalMappings[currentSource].push(mapping);
        }
      }
    }

    sortGenerated(generatedMappings, subarrayStart);
    this.__generatedMappings = generatedMappings;

    for (var i = 0; i < originalMappings.length; i++) {
      if (originalMappings[i] != null) {
        quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);
      }
    }
    this.__originalMappings = [].concat(...originalMappings);
  };

/**
 * Find the mapping that best matches the hypothetical "needle" mapping that
 * we are searching for in the given "haystack" of mappings.
 */
BasicSourceMapConsumer.prototype._findMapping =
  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
                                         aColumnName, aComparator, aBias) {
    // To return the position we are searching for, we must first find the
    // mapping for the given position and then return the opposite position it
    // points to. Because the mappings are sorted, we can use binary search to
    // find the best mapping.

    if (aNeedle[aLineName] <= 0) {
      throw new TypeError('Line must be greater than or equal to 1, got '
                          + aNeedle[aLineName]);
    }
    if (aNeedle[aColumnName] < 0) {
      throw new TypeError('Column must be greater than or equal to 0, got '
                          + aNeedle[aColumnName]);
    }

    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
  };

/**
 * Compute the last column for each generated mapping. The last column is
 * inclusive.
 */
BasicSourceMapConsumer.prototype.computeColumnSpans =
  function SourceMapConsumer_computeColumnSpans() {
    for (var index = 0; index < this._generatedMappings.length; ++index) {
      var mapping = this._generatedMappings[index];

      // Mappings do not contain a field for the last generated columnt. We
      // can come up with an optimistic estimate, however, by assuming that
      // mappings are contiguous (i.e. given two consecutive mappings, the
      // first mapping ends where the second one starts).
      if (index + 1 < this._generatedMappings.length) {
        var nextMapping = this._generatedMappings[index + 1];

        if (mapping.generatedLine === nextMapping.generatedLine) {
          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
          continue;
        }
      }

      // The last mapping for each line spans the entire line.
      mapping.lastGeneratedColumn = Infinity;
    }
  };

/**
 * Returns the original source, line, and column information for the generated
 * source's line and column positions provided. The only argument is an object
 * with the following properties:
 *
 *   - line: The line number in the generated source.  The line number
 *     is 1-based.
 *   - column: The column number in the generated source.  The column
 *     number is 0-based.
 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
 *
 * and an object is returned with the following properties:
 *
 *   - source: The original source file, or null.
 *   - line: The line number in the original source, or null.  The
 *     line number is 1-based.
 *   - column: The column number in the original source, or null.  The
 *     column number is 0-based.
 *   - name: The original identifier, or null.
 */
BasicSourceMapConsumer.prototype.originalPositionFor =
  function SourceMapConsumer_originalPositionFor(aArgs) {
    var needle = {
      generatedLine: util.getArg(aArgs, 'line'),
      generatedColumn: util.getArg(aArgs, 'column')
    };

    var index = this._findMapping(
      needle,
      this._generatedMappings,
      "generatedLine",
      "generatedColumn",
      util.compareByGeneratedPositionsDeflated,
      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
    );

    if (index >= 0) {
      var mapping = this._generatedMappings[index];

      if (mapping.generatedLine === needle.generatedLine) {
        var source = util.getArg(mapping, 'source', null);
        if (source !== null) {
          source = this._sources.at(source);
          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
        }
        var name = util.getArg(mapping, 'name', null);
        if (name !== null) {
          name = this._names.at(name);
        }
        return {
          source: source,
          line: util.getArg(mapping, 'originalLine', null),
          column: util.getArg(mapping, 'originalColumn', null),
          name: name
        };
      }
    }

    return {
      source: null,
      line: null,
      column: null,
      name: null
    };
  };

/**
 * Return true if we have the source content for every source in the source
 * map, false otherwise.
 */
BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
  function BasicSourceMapConsumer_hasContentsOfAllSources() {
    if (!this.sourcesContent) {
      return false;
    }
    return this.sourcesContent.length >= this._sources.size() &&
      !this.sourcesContent.some(function (sc) { return sc == null; });
  };

/**
 * Returns the original source content. The only argument is the url of the
 * original source file. Returns null if no original source content is
 * available.
 */
BasicSourceMapConsumer.prototype.sourceContentFor =
  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
    if (!this.sourcesContent) {
      return null;
    }

    var index = this._findSourceIndex(aSource);
    if (index >= 0) {
      return this.sourcesContent[index];
    }

    var relativeSource = aSource;
    if (this.sourceRoot != null) {
      relativeSource = util.relative(this.sourceRoot, relativeSource);
    }

    var url;
    if (this.sourceRoot != null
        && (url = util.urlParse(this.sourceRoot))) {
      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
      // many users. We can help them out when they expect file:// URIs to
      // behave like it would if they were running a local HTTP server. See
      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
      if (url.scheme == "file"
          && this._sources.has(fileUriAbsPath)) {
        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
      }

      if ((!url.path || url.path == "/")
          && this._sources.has("/" + relativeSource)) {
        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
      }
    }

    // This function is used recursively from
    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
    // don't want to throw if we can't find the source - we just want to
    // return null, so we provide a flag to exit gracefully.
    if (nullOnMissing) {
      return null;
    }
    else {
      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
    }
  };

/**
 * Returns the generated line and column information for the original source,
 * line, and column positions provided. The only argument is an object with
 * the following properties:
 *
 *   - source: The filename of the original source.
 *   - line: The line number in the original source.  The line number
 *     is 1-based.
 *   - column: The column number in the original source.  The column
 *     number is 0-based.
 *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
 *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
 *     closest element that is smaller than or greater than the one we are
 *     searching for, respectively, if the exact element cannot be found.
 *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
 *
 * and an object is returned with the following properties:
 *
 *   - line: The line number in the generated source, or null.  The
 *     line number is 1-based.
 *   - column: The column number in the generated source, or null.
 *     The column number is 0-based.
 */
BasicSourceMapConsumer.prototype.generatedPositionFor =
  function SourceMapConsumer_generatedPositionFor(aArgs) {
    var source = util.getArg(aArgs, 'source');
    source = this._findSourceIndex(source);
    if (source < 0) {
      return {
        line: null,
        column: null,
        lastColumn: null
      };
    }

    var needle = {
      source: source,
      originalLine: util.getArg(aArgs, 'line'),
      originalColumn: util.getArg(aArgs, 'column')
    };

    var index = this._findMapping(
      needle,
      this._originalMappings,
      "originalLine",
      "originalColumn",
      util.compareByOriginalPositions,
      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
    );

    if (index >= 0) {
      var mapping = this._originalMappings[index];

      if (mapping.source === needle.source) {
        return {
          line: util.getArg(mapping, 'generatedLine', null),
          column: util.getArg(mapping, 'generatedColumn', null),
          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
        };
      }
    }

    return {
      line: null,
      column: null,
      lastColumn: null
    };
  };

exports.BasicSourceMapConsumer = BasicSourceMapConsumer;

/**
 * An IndexedSourceMapConsumer instance represents a parsed source map which
 * we can query for information. It differs from BasicSourceMapConsumer in
 * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
 * input.
 *
 * The first parameter is a raw source map (either as a JSON string, or already
 * parsed to an object). According to the spec for indexed source maps, they
 * have the following attributes:
 *
 *   - version: Which version of the source map spec this map is following.
 *   - file: Optional. The generated file this source map is associated with.
 *   - sections: A list of section definitions.
 *
 * Each value under the "sections" field has two fields:
 *   - offset: The offset into the original specified at which this section
 *       begins to apply, defined as an object with a "line" and "column"
 *       field.
 *   - map: A source map definition. This source map could also be indexed,
 *       but doesn't have to be.
 *
 * Instead of the "map" field, it's also possible to have a "url" field
 * specifying a URL to retrieve a source map from, but that's currently
 * unsupported.
 *
 * Here's an example source map, taken from the source map spec[0], but
 * modified to omit a section which uses the "url" field.
 *
 *  {
 *    version : 3,
 *    file: "app.js",
 *    sections: [{
 *      offset: {line:100, column:10},
 *      map: {
 *        version : 3,
 *        file: "section.js",
 *        sources: ["foo.js", "bar.js"],
 *        names: ["src", "maps", "are", "fun"],
 *        mappings: "AAAA,E;;ABCDE;"
 *      }
 *    }],
 *  }
 *
 * The second parameter, if given, is a string whose value is the URL
 * at which the source map was found.  This URL is used to compute the
 * sources array.
 *
 * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
 */
function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
  var sourceMap = aSourceMap;
  if (typeof aSourceMap === 'string') {
    sourceMap = util.parseSourceMapInput(aSourceMap);
  }

  var version = util.getArg(sourceMap, 'version');
  var sections = util.getArg(sourceMap, 'sections');

  if (version != this._version) {
    throw new Error('Unsupported version: ' + version);
  }

  this._sources = new ArraySet();
  this._names = new ArraySet();

  var lastOffset = {
    line: -1,
    column: 0
  };
  this._sections = sections.map(function (s) {
    if (s.url) {
      // The url field will require support for asynchronicity.
      // See https://github.com/mozilla/source-map/issues/16
      throw new Error('Support for url field in sections not implemented.');
    }
    var offset = util.getArg(s, 'offset');
    var offsetLine = util.getArg(offset, 'line');
    var offsetColumn = util.getArg(offset, 'column');

    if (offsetLine < lastOffset.line ||
        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
      throw new Error('Section offsets must be ordered and non-overlapping.');
    }
    lastOffset = offset;

    return {
      generatedOffset: {
        // The offset fields are 0-based, but we use 1-based indices when
        // encoding/decoding from VLQ.
        generatedLine: offsetLine + 1,
        generatedColumn: offsetColumn + 1
      },
      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
    }
  });
}

IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;

/**
 * The version of the source mapping spec that we are consuming.
 */
IndexedSourceMapConsumer.prototype._version = 3;

/**
 * The list of original sources.
 */
Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
  get: function () {
    var sources = [];
    for (var i = 0; i < this._sections.length; i++) {
      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
        sources.push(this._sections[i].consumer.sources[j]);
      }
    }
    return sources;
  }
});

/**
 * Returns the original source, line, and column information for the generated
 * source's line and column positions provided. The only argument is an object
 * with the following properties:
 *
 *   - line: The line number in the generated source.  The line number
 *     is 1-based.
 *   - column: The column number in the generated source.  The column
 *     number is 0-based.
 *
 * and an object is returned with the following properties:
 *
 *   - source: The original source file, or null.
 *   - line: The line number in the original source, or null.  The
 *     line number is 1-based.
 *   - column: The column number in the original source, or null.  The
 *     column number is 0-based.
 *   - name: The original identifier, or null.
 */
IndexedSourceMapConsumer.prototype.originalPositionFor =
  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
    var needle = {
      generatedLine: util.getArg(aArgs, 'line'),
      generatedColumn: util.getArg(aArgs, 'column')
    };

    // Find the section containing the generated position we're trying to map
    // to an original position.
    var sectionIndex = binarySearch.search(needle, this._sections,
      function(needle, section) {
        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
        if (cmp) {
          return cmp;
        }

        return (needle.generatedColumn -
                section.generatedOffset.generatedColumn);
      });
    var section = this._sections[sectionIndex];

    if (!section) {
      return {
        source: null,
        line: null,
        column: null,
        name: null
      };
    }

    return section.consumer.originalPositionFor({
      line: needle.generatedLine -
        (section.generatedOffset.generatedLine - 1),
      column: needle.generatedColumn -
        (section.generatedOffset.generatedLine === needle.generatedLine
         ? section.generatedOffset.generatedColumn - 1
         : 0),
      bias: aArgs.bias
    });
  };

/**
 * Return true if we have the source content for every source in the source
 * map, false otherwise.
 */
IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
    return this._sections.every(function (s) {
      return s.consumer.hasContentsOfAllSources();
    });
  };

/**
 * Returns the original source content. The only argument is the url of the
 * original source file. Returns null if no original source content is
 * available.
 */
IndexedSourceMapConsumer.prototype.sourceContentFor =
  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
    for (var i = 0; i < this._sections.length; i++) {
      var section = this._sections[i];

      var content = section.consumer.sourceContentFor(aSource, true);
      if (content) {
        return content;
      }
    }
    if (nullOnMissing) {
      return null;
    }
    else {
      throw new Error('"' + aSource + '" is not in the SourceMap.');
    }
  };

/**
 * Returns the generated line and column information for the original source,
 * line, and column positions provided. The only argument is an object with
 * the following properties:
 *
 *   - source: The filename of the original source.
 *   - line: The line number in the original source.  The line number
 *     is 1-based.
 *   - column: The column number in the original source.  The column
 *     number is 0-based.
 *
 * and an object is returned with the following properties:
 *
 *   - line: The line number in the generated source, or null.  The
 *     line number is 1-based. 
 *   - column: The column number in the generated source, or null.
 *     The column number is 0-based.
 */
IndexedSourceMapConsumer.prototype.generatedPositionFor =
  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
    for (var i = 0; i < this._sections.length; i++) {
      var section = this._sections[i];

      // Only consider this section if the requested source is in the list of
      // sources of the consumer.
      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
        continue;
      }
      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
      if (generatedPosition) {
        var ret = {
          line: generatedPosition.line +
            (section.generatedOffset.generatedLine - 1),
          column: generatedPosition.column +
            (section.generatedOffset.generatedLine === generatedPosition.line
             ? section.generatedOffset.generatedColumn - 1
             : 0)
        };
        return ret;
      }
    }

    return {
      line: null,
      column: null
    };
  };

/**
 * Parse the mappings in a string in to a data structure which we can easily
 * query (the ordered arrays in the `this.__generatedMappings` and
 * `this.__originalMappings` properties).
 */
IndexedSourceMapConsumer.prototype._parseMappings =
  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
    this.__generatedMappings = [];
    this.__originalMappings = [];
    for (var i = 0; i < this._sections.length; i++) {
      var section = this._sections[i];
      var sectionMappings = section.consumer._generatedMappings;
      for (var j = 0; j < sectionMappings.length; j++) {
        var mapping = sectionMappings[j];

        var source = section.consumer._sources.at(mapping.source);
        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
        this._sources.add(source);
        source = this._sources.indexOf(source);

        var name = null;
        if (mapping.name) {
          name = section.consumer._names.at(mapping.name);
          this._names.add(name);
          name = this._names.indexOf(name);
        }

        // The mappings coming from the consumer for the section have
        // generated positions relative to the start of the section, so we
        // need to offset them to be relative to the start of the concatenated
        // generated file.
        var adjustedMapping = {
          source: source,
          generatedLine: mapping.generatedLine +
            (section.generatedOffset.generatedLine - 1),
          generatedColumn: mapping.generatedColumn +
            (section.generatedOffset.generatedLine === mapping.generatedLine
            ? section.generatedOffset.generatedColumn - 1
            : 0),
          originalLine: mapping.originalLine,
          originalColumn: mapping.originalColumn,
          name: name
        };

        this.__generatedMappings.push(adjustedMapping);
        if (typeof adjustedMapping.originalLine === 'number') {
          this.__originalMappings.push(adjustedMapping);
        }
      }
    }

    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
    quickSort(this.__originalMappings, util.compareByOriginalPositions);
  };

exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var base64VLQ = require('./base64-vlq');
var util = require('./util');
var ArraySet = require('./array-set').ArraySet;
var MappingList = require('./mapping-list').MappingList;

/**
 * An instance of the SourceMapGenerator represents a source map which is
 * being built incrementally. You may pass an object with the following
 * properties:
 *
 *   - file: The filename of the generated source.
 *   - sourceRoot: A root for all relative URLs in this source map.
 */
function SourceMapGenerator(aArgs) {
  if (!aArgs) {
    aArgs = {};
  }
  this._file = util.getArg(aArgs, 'file', null);
  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
  this._sources = new ArraySet();
  this._names = new ArraySet();
  this._mappings = new MappingList();
  this._sourcesContents = null;
}

SourceMapGenerator.prototype._version = 3;

/**
 * Creates a new SourceMapGenerator based on a SourceMapConsumer
 *
 * @param aSourceMapConsumer The SourceMap.
 */
SourceMapGenerator.fromSourceMap =
  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
    var sourceRoot = aSourceMapConsumer.sourceRoot;
    var generator = new SourceMapGenerator({
      file: aSourceMapConsumer.file,
      sourceRoot: sourceRoot
    });
    aSourceMapConsumer.eachMapping(function (mapping) {
      var newMapping = {
        generated: {
          line: mapping.generatedLine,
          column: mapping.generatedColumn
        }
      };

      if (mapping.source != null) {
        newMapping.source = mapping.source;
        if (sourceRoot != null) {
          newMapping.source = util.relative(sourceRoot, newMapping.source);
        }

        newMapping.original = {
          line: mapping.originalLine,
          column: mapping.originalColumn
        };

        if (mapping.name != null) {
          newMapping.name = mapping.name;
        }
      }

      generator.addMapping(newMapping);
    });
    aSourceMapConsumer.sources.forEach(function (sourceFile) {
      var sourceRelative = sourceFile;
      if (sourceRoot !== null) {
        sourceRelative = util.relative(sourceRoot, sourceFile);
      }

      if (!generator._sources.has(sourceRelative)) {
        generator._sources.add(sourceRelative);
      }

      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
      if (content != null) {
        generator.setSourceContent(sourceFile, content);
      }
    });
    return generator;
  };

/**
 * Add a single mapping from original source line and column to the generated
 * source's line and column for this source map being created. The mapping
 * object should have the following properties:
 *
 *   - generated: An object with the generated line and column positions.
 *   - original: An object with the original line and column positions.
 *   - source: The original source file (relative to the sourceRoot).
 *   - name: An optional original token name for this mapping.
 */
SourceMapGenerator.prototype.addMapping =
  function SourceMapGenerator_addMapping(aArgs) {
    var generated = util.getArg(aArgs, 'generated');
    var original = util.getArg(aArgs, 'original', null);
    var source = util.getArg(aArgs, 'source', null);
    var name = util.getArg(aArgs, 'name', null);

    if (!this._skipValidation) {
      this._validateMapping(generated, original, source, name);
    }

    if (source != null) {
      source = String(source);
      if (!this._sources.has(source)) {
        this._sources.add(source);
      }
    }

    if (name != null) {
      name = String(name);
      if (!this._names.has(name)) {
        this._names.add(name);
      }
    }

    this._mappings.add({
      generatedLine: generated.line,
      generatedColumn: generated.column,
      originalLine: original != null && original.line,
      originalColumn: original != null && original.column,
      source: source,
      name: name
    });
  };

/**
 * Set the source content for a source file.
 */
SourceMapGenerator.prototype.setSourceContent =
  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
    var source = aSourceFile;
    if (this._sourceRoot != null) {
      source = util.relative(this._sourceRoot, source);
    }

    if (aSourceContent != null) {
      // Add the source content to the _sourcesContents map.
      // Create a new _sourcesContents map if the property is null.
      if (!this._sourcesContents) {
        this._sourcesContents = Object.create(null);
      }
      this._sourcesContents[util.toSetString(source)] = aSourceContent;
    } else if (this._sourcesContents) {
      // Remove the source file from the _sourcesContents map.
      // If the _sourcesContents map is empty, set the property to null.
      delete this._sourcesContents[util.toSetString(source)];
      if (Object.keys(this._sourcesContents).length === 0) {
        this._sourcesContents = null;
      }
    }
  };

/**
 * Applies the mappings of a sub-source-map for a specific source file to the
 * source map being generated. Each mapping to the supplied source file is
 * rewritten using the supplied source map. Note: The resolution for the
 * resulting mappings is the minimium of this map and the supplied map.
 *
 * @param aSourceMapConsumer The source map to be applied.
 * @param aSourceFile Optional. The filename of the source file.
 *        If omitted, SourceMapConsumer's file property will be used.
 * @param aSourceMapPath Optional. The dirname of the path to the source map
 *        to be applied. If relative, it is relative to the SourceMapConsumer.
 *        This parameter is needed when the two source maps aren't in the same
 *        directory, and the source map to be applied contains relative source
 *        paths. If so, those relative source paths need to be rewritten
 *        relative to the SourceMapGenerator.
 */
SourceMapGenerator.prototype.applySourceMap =
  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
    var sourceFile = aSourceFile;
    // If aSourceFile is omitted, we will use the file property of the SourceMap
    if (aSourceFile == null) {
      if (aSourceMapConsumer.file == null) {
        throw new Error(
          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
          'or the source map\'s "file" property. Both were omitted.'
        );
      }
      sourceFile = aSourceMapConsumer.file;
    }
    var sourceRoot = this._sourceRoot;
    // Make "sourceFile" relative if an absolute Url is passed.
    if (sourceRoot != null) {
      sourceFile = util.relative(sourceRoot, sourceFile);
    }
    // Applying the SourceMap can add and remove items from the sources and
    // the names array.
    var newSources = new ArraySet();
    var newNames = new ArraySet();

    // Find mappings for the "sourceFile"
    this._mappings.unsortedForEach(function (mapping) {
      if (mapping.source === sourceFile && mapping.originalLine != null) {
        // Check if it can be mapped by the source map, then update the mapping.
        var original = aSourceMapConsumer.originalPositionFor({
          line: mapping.originalLine,
          column: mapping.originalColumn
        });
        if (original.source != null) {
          // Copy mapping
          mapping.source = original.source;
          if (aSourceMapPath != null) {
            mapping.source = util.join(aSourceMapPath, mapping.source)
          }
          if (sourceRoot != null) {
            mapping.source = util.relative(sourceRoot, mapping.source);
          }
          mapping.originalLine = original.line;
          mapping.originalColumn = original.column;
          if (original.name != null) {
            mapping.name = original.name;
          }
        }
      }

      var source = mapping.source;
      if (source != null && !newSources.has(source)) {
        newSources.add(source);
      }

      var name = mapping.name;
      if (name != null && !newNames.has(name)) {
        newNames.add(name);
      }

    }, this);
    this._sources = newSources;
    this._names = newNames;

    // Copy sourcesContents of applied map.
    aSourceMapConsumer.sources.forEach(function (sourceFile) {
      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
      if (content != null) {
        if (aSourceMapPath != null) {
          sourceFile = util.join(aSourceMapPath, sourceFile);
        }
        if (sourceRoot != null) {
          sourceFile = util.relative(sourceRoot, sourceFile);
        }
        this.setSourceContent(sourceFile, content);
      }
    }, this);
  };

/**
 * A mapping can have one of the three levels of data:
 *
 *   1. Just the generated position.
 *   2. The Generated position, original position, and original source.
 *   3. Generated and original position, original source, as well as a name
 *      token.
 *
 * To maintain consistency, we validate that any new mapping being added falls
 * in to one of these categories.
 */
SourceMapGenerator.prototype._validateMapping =
  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
                                              aName) {
    // When aOriginal is truthy but has empty values for .line and .column,
    // it is most likely a programmer error. In this case we throw a very
    // specific error message to try to guide them the right way.
    // For example: https://github.com/Polymer/polymer-bundler/pull/519
    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
        throw new Error(
            'original.line and original.column are not numbers -- you probably meant to omit ' +
            'the original mapping entirely and only map the generated position. If so, pass ' +
            'null for the original mapping instead of an object with empty or null values.'
        );
    }

    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
        && aGenerated.line > 0 && aGenerated.column >= 0
        && !aOriginal && !aSource && !aName) {
      // Case 1.
      return;
    }
    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
             && aGenerated.line > 0 && aGenerated.column >= 0
             && aOriginal.line > 0 && aOriginal.column >= 0
             && aSource) {
      // Cases 2 and 3.
      return;
    }
    else {
      throw new Error('Invalid mapping: ' + JSON.stringify({
        generated: aGenerated,
        source: aSource,
        original: aOriginal,
        name: aName
      }));
    }
  };

/**
 * Serialize the accumulated mappings in to the stream of base 64 VLQs
 * specified by the source map format.
 */
SourceMapGenerator.prototype._serializeMappings =
  function SourceMapGenerator_serializeMappings() {
    var previousGeneratedColumn = 0;
    var previousGeneratedLine = 1;
    var previousOriginalColumn = 0;
    var previousOriginalLine = 0;
    var previousName = 0;
    var previousSource = 0;
    var result = '';
    var next;
    var mapping;
    var nameIdx;
    var sourceIdx;

    var mappings = this._mappings.toArray();
    for (var i = 0, len = mappings.length; i < len; i++) {
      mapping = mappings[i];
      next = ''

      if (mapping.generatedLine !== previousGeneratedLine) {
        previousGeneratedColumn = 0;
        while (mapping.generatedLine !== previousGeneratedLine) {
          next += ';';
          previousGeneratedLine++;
        }
      }
      else {
        if (i > 0) {
          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
            continue;
          }
          next += ',';
        }
      }

      next += base64VLQ.encode(mapping.generatedColumn
                                 - previousGeneratedColumn);
      previousGeneratedColumn = mapping.generatedColumn;

      if (mapping.source != null) {
        sourceIdx = this._sources.indexOf(mapping.source);
        next += base64VLQ.encode(sourceIdx - previousSource);
        previousSource = sourceIdx;

        // lines are stored 0-based in SourceMap spec version 3
        next += base64VLQ.encode(mapping.originalLine - 1
                                   - previousOriginalLine);
        previousOriginalLine = mapping.originalLine - 1;

        next += base64VLQ.encode(mapping.originalColumn
                                   - previousOriginalColumn);
        previousOriginalColumn = mapping.originalColumn;

        if (mapping.name != null) {
          nameIdx = this._names.indexOf(mapping.name);
          next += base64VLQ.encode(nameIdx - previousName);
          previousName = nameIdx;
        }
      }

      result += next;
    }

    return result;
  };

SourceMapGenerator.prototype._generateSourcesContent =
  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
    return aSources.map(function (source) {
      if (!this._sourcesContents) {
        return null;
      }
      if (aSourceRoot != null) {
        source = util.relative(aSourceRoot, source);
      }
      var key = util.toSetString(source);
      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
        ? this._sourcesContents[key]
        : null;
    }, this);
  };

/**
 * Externalize the source map.
 */
SourceMapGenerator.prototype.toJSON =
  function SourceMapGenerator_toJSON() {
    var map = {
      version: this._version,
      sources: this._sources.toArray(),
      names: this._names.toArray(),
      mappings: this._serializeMappings()
    };
    if (this._file != null) {
      map.file = this._file;
    }
    if (this._sourceRoot != null) {
      map.sourceRoot = this._sourceRoot;
    }
    if (this._sourcesContents) {
      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
    }

    return map;
  };

/**
 * Render the source map being generated to a string.
 */
SourceMapGenerator.prototype.toString =
  function SourceMapGenerator_toString() {
    return JSON.stringify(this.toJSON());
  };

exports.SourceMapGenerator = SourceMapGenerator;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
var util = require('./util');

// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
// operating systems these days (capturing the result).
var REGEX_NEWLINE = /(\r?\n)/;

// Newline character code for charCodeAt() comparisons
var NEWLINE_CODE = 10;

// Private symbol for identifying `SourceNode`s when multiple versions of
// the source-map library are loaded. This MUST NOT CHANGE across
// versions!
var isSourceNode = "$$$isSourceNode$$$";

/**
 * SourceNodes provide a way to abstract over interpolating/concatenating
 * snippets of generated JavaScript source code while maintaining the line and
 * column information associated with the original source code.
 *
 * @param aLine The original line number.
 * @param aColumn The original column number.
 * @param aSource The original source's filename.
 * @param aChunks Optional. An array of strings which are snippets of
 *        generated JS, or other SourceNodes.
 * @param aName The original identifier.
 */
function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
  this.children = [];
  this.sourceContents = {};
  this.line = aLine == null ? null : aLine;
  this.column = aColumn == null ? null : aColumn;
  this.source = aSource == null ? null : aSource;
  this.name = aName == null ? null : aName;
  this[isSourceNode] = true;
  if (aChunks != null) this.add(aChunks);
}

/**
 * Creates a SourceNode from generated code and a SourceMapConsumer.
 *
 * @param aGeneratedCode The generated code
 * @param aSourceMapConsumer The SourceMap for the generated code
 * @param aRelativePath Optional. The path that relative sources in the
 *        SourceMapConsumer should be relative to.
 */
SourceNode.fromStringWithSourceMap =
  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
    // The SourceNode we want to fill with the generated code
    // and the SourceMap
    var node = new SourceNode();

    // All even indices of this array are one line of the generated code,
    // while all odd indices are the newlines between two adjacent lines
    // (since `REGEX_NEWLINE` captures its match).
    // Processed fragments are accessed by calling `shiftNextLine`.
    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
    var remainingLinesIndex = 0;
    var shiftNextLine = function() {
      var lineContents = getNextLine();
      // The last line of a file might not have a newline.
      var newLine = getNextLine() || "";
      return lineContents + newLine;

      function getNextLine() {
        return remainingLinesIndex < remainingLines.length ?
            remainingLines[remainingLinesIndex++] : undefined;
      }
    };

    // We need to remember the position of "remainingLines"
    var lastGeneratedLine = 1, lastGeneratedColumn = 0;

    // The generate SourceNodes we need a code range.
    // To extract it current and last mapping is used.
    // Here we store the last mapping.
    var lastMapping = null;

    aSourceMapConsumer.eachMapping(function (mapping) {
      if (lastMapping !== null) {
        // We add the code from "lastMapping" to "mapping":
        // First check if there is a new line in between.
        if (lastGeneratedLine < mapping.generatedLine) {
          // Associate first line with "lastMapping"
          addMappingWithCode(lastMapping, shiftNextLine());
          lastGeneratedLine++;
          lastGeneratedColumn = 0;
          // The remaining code is added without mapping
        } else {
          // There is no new line in between.
          // Associate the code between "lastGeneratedColumn" and
          // "mapping.generatedColumn" with "lastMapping"
          var nextLine = remainingLines[remainingLinesIndex] || '';
          var code = nextLine.substr(0, mapping.generatedColumn -
                                        lastGeneratedColumn);
          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
                                              lastGeneratedColumn);
          lastGeneratedColumn = mapping.generatedColumn;
          addMappingWithCode(lastMapping, code);
          // No more remaining code, continue
          lastMapping = mapping;
          return;
        }
      }
      // We add the generated code until the first mapping
      // to the SourceNode without any mapping.
      // Each line is added as separate string.
      while (lastGeneratedLine < mapping.generatedLine) {
        node.add(shiftNextLine());
        lastGeneratedLine++;
      }
      if (lastGeneratedColumn < mapping.generatedColumn) {
        var nextLine = remainingLines[remainingLinesIndex] || '';
        node.add(nextLine.substr(0, mapping.generatedColumn));
        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
        lastGeneratedColumn = mapping.generatedColumn;
      }
      lastMapping = mapping;
    }, this);
    // We have processed all mappings.
    if (remainingLinesIndex < remainingLines.length) {
      if (lastMapping) {
        // Associate the remaining code in the current line with "lastMapping"
        addMappingWithCode(lastMapping, shiftNextLine());
      }
      // and add the remaining lines without any mapping
      node.add(remainingLines.splice(remainingLinesIndex).join(""));
    }

    // Copy sourcesContent into SourceNode
    aSourceMapConsumer.sources.forEach(function (sourceFile) {
      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
      if (content != null) {
        if (aRelativePath != null) {
          sourceFile = util.join(aRelativePath, sourceFile);
        }
        node.setSourceContent(sourceFile, content);
      }
    });

    return node;

    function addMappingWithCode(mapping, code) {
      if (mapping === null || mapping.source === undefined) {
        node.add(code);
      } else {
        var source = aRelativePath
          ? util.join(aRelativePath, mapping.source)
          : mapping.source;
        node.add(new SourceNode(mapping.originalLine,
                                mapping.originalColumn,
                                source,
                                code,
                                mapping.name));
      }
    }
  };

/**
 * Add a chunk of generated JS to this source node.
 *
 * @param aChunk A string snippet of generated JS code, another instance of
 *        SourceNode, or an array where each member is one of those things.
 */
SourceNode.prototype.add = function SourceNode_add(aChunk) {
  if (Array.isArray(aChunk)) {
    aChunk.forEach(function (chunk) {
      this.add(chunk);
    }, this);
  }
  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
    if (aChunk) {
      this.children.push(aChunk);
    }
  }
  else {
    throw new TypeError(
      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
    );
  }
  return this;
};

/**
 * Add a chunk of generated JS to the beginning of this source node.
 *
 * @param aChunk A string snippet of generated JS code, another instance of
 *        SourceNode, or an array where each member is one of those things.
 */
SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
  if (Array.isArray(aChunk)) {
    for (var i = aChunk.length-1; i >= 0; i--) {
      this.prepend(aChunk[i]);
    }
  }
  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
    this.children.unshift(aChunk);
  }
  else {
    throw new TypeError(
      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
    );
  }
  return this;
};

/**
 * Walk over the tree of JS snippets in this node and its children. The
 * walking function is called once for each snippet of JS and is passed that
 * snippet and the its original associated source's line/column location.
 *
 * @param aFn The traversal function.
 */
SourceNode.prototype.walk = function SourceNode_walk(aFn) {
  var chunk;
  for (var i = 0, len = this.children.length; i < len; i++) {
    chunk = this.children[i];
    if (chunk[isSourceNode]) {
      chunk.walk(aFn);
    }
    else {
      if (chunk !== '') {
        aFn(chunk, { source: this.source,
                     line: this.line,
                     column: this.column,
                     name: this.name });
      }
    }
  }
};

/**
 * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
 * each of `this.children`.
 *
 * @param aSep The separator.
 */
SourceNode.prototype.join = function SourceNode_join(aSep) {
  var newChildren;
  var i;
  var len = this.children.length;
  if (len > 0) {
    newChildren = [];
    for (i = 0; i < len-1; i++) {
      newChildren.push(this.children[i]);
      newChildren.push(aSep);
    }
    newChildren.push(this.children[i]);
    this.children = newChildren;
  }
  return this;
};

/**
 * Call String.prototype.replace on the very right-most source snippet. Useful
 * for trimming whitespace from the end of a source node, etc.
 *
 * @param aPattern The pattern to replace.
 * @param aReplacement The thing to replace the pattern with.
 */
SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
  var lastChild = this.children[this.children.length - 1];
  if (lastChild[isSourceNode]) {
    lastChild.replaceRight(aPattern, aReplacement);
  }
  else if (typeof lastChild === 'string') {
    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
  }
  else {
    this.children.push(''.replace(aPattern, aReplacement));
  }
  return this;
};

/**
 * Set the source content for a source file. This will be added to the SourceMapGenerator
 * in the sourcesContent field.
 *
 * @param aSourceFile The filename of the source file
 * @param aSourceContent The content of the source file
 */
SourceNode.prototype.setSourceContent =
  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
  };

/**
 * Walk over the tree of SourceNodes. The walking function is called for each
 * source file content and is passed the filename and source content.
 *
 * @param aFn The traversal function.
 */
SourceNode.prototype.walkSourceContents =
  function SourceNode_walkSourceContents(aFn) {
    for (var i = 0, len = this.children.length; i < len; i++) {
      if (this.children[i][isSourceNode]) {
        this.children[i].walkSourceContents(aFn);
      }
    }

    var sources = Object.keys(this.sourceContents);
    for (var i = 0, len = sources.length; i < len; i++) {
      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
    }
  };

/**
 * Return the string representation of this source node. Walks over the tree
 * and concatenates all the various snippets together to one string.
 */
SourceNode.prototype.toString = function SourceNode_toString() {
  var str = "";
  this.walk(function (chunk) {
    str += chunk;
  });
  return str;
};

/**
 * Returns the string representation of this source node along with a source
 * map.
 */
SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
  var generated = {
    code: "",
    line: 1,
    column: 0
  };
  var map = new SourceMapGenerator(aArgs);
  var sourceMappingActive = false;
  var lastOriginalSource = null;
  var lastOriginalLine = null;
  var lastOriginalColumn = null;
  var lastOriginalName = null;
  this.walk(function (chunk, original) {
    generated.code += chunk;
    if (original.source !== null
        && original.line !== null
        && original.column !== null) {
      if(lastOriginalSource !== original.source
         || lastOriginalLine !== original.line
         || lastOriginalColumn !== original.column
         || lastOriginalName !== original.name) {
        map.addMapping({
          source: original.source,
          original: {
            line: original.line,
            column: original.column
          },
          generated: {
            line: generated.line,
            column: generated.column
          },
          name: original.name
        });
      }
      lastOriginalSource = original.source;
      lastOriginalLine = original.line;
      lastOriginalColumn = original.column;
      lastOriginalName = original.name;
      sourceMappingActive = true;
    } else if (sourceMappingActive) {
      map.addMapping({
        generated: {
          line: generated.line,
          column: generated.column
        }
      });
      lastOriginalSource = null;
      sourceMappingActive = false;
    }
    for (var idx = 0, length = chunk.length; idx < length; idx++) {
      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
        generated.line++;
        generated.column = 0;
        // Mappings end at eol
        if (idx + 1 === length) {
          lastOriginalSource = null;
          sourceMappingActive = false;
        } else if (sourceMappingActive) {
          map.addMapping({
            source: original.source,
            original: {
              line: original.line,
              column: original.column
            },
            generated: {
              line: generated.line,
              column: generated.column
            },
            name: original.name
          });
        }
      } else {
        generated.column++;
      }
    }
  });
  this.walkSourceContents(function (sourceFile, sourceContent) {
    map.setSourceContent(sourceFile, sourceContent);
  });

  return { code: generated.code, map: map };
};

exports.SourceNode = SourceNode;
/* -*- Mode: js; js-indent-level: 2; -*- */
/*
 * Copyright 2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE or:
 * http://opensource.org/licenses/BSD-3-Clause
 */

/**
 * This is a helper function for getting values from parameter/options
 * objects.
 *
 * @param args The object we are extracting values from
 * @param name The name of the property we are getting.
 * @param defaultValue An optional value to return if the property is missing
 * from the object. If this is not specified and the property is missing, an
 * error will be thrown.
 */
function getArg(aArgs, aName, aDefaultValue) {
  if (aName in aArgs) {
    return aArgs[aName];
  } else if (arguments.length === 3) {
    return aDefaultValue;
  } else {
    throw new Error('"' + aName + '" is a required argument.');
  }
}
exports.getArg = getArg;

var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
var dataUrlRegexp = /^data:.+\,.+$/;

function urlParse(aUrl) {
  var match = aUrl.match(urlRegexp);
  if (!match) {
    return null;
  }
  return {
    scheme: match[1],
    auth: match[2],
    host: match[3],
    port: match[4],
    path: match[5]
  };
}
exports.urlParse = urlParse;

function urlGenerate(aParsedUrl) {
  var url = '';
  if (aParsedUrl.scheme) {
    url += aParsedUrl.scheme + ':';
  }
  url += '//';
  if (aParsedUrl.auth) {
    url += aParsedUrl.auth + '@';
  }
  if (aParsedUrl.host) {
    url += aParsedUrl.host;
  }
  if (aParsedUrl.port) {
    url += ":" + aParsedUrl.port
  }
  if (aParsedUrl.path) {
    url += aParsedUrl.path;
  }
  return url;
}
exports.urlGenerate = urlGenerate;

var MAX_CACHED_INPUTS = 32;

/**
 * Takes some function `f(input) -> result` and returns a memoized version of
 * `f`.
 *
 * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The
 * memoization is a dumb-simple, linear least-recently-used cache.
 */
function lruMemoize(f) {
  var cache = [];

  return function(input) {
    for (var i = 0; i < cache.length; i++) {
      if (cache[i].input === input) {
        var temp = cache[0];
        cache[0] = cache[i];
        cache[i] = temp;
        return cache[0].result;
      }
    }

    var result = f(input);

    cache.unshift({
      input,
      result,
    });

    if (cache.length > MAX_CACHED_INPUTS) {
      cache.pop();
    }

    return result;
  };
}

/**
 * Normalizes a path, or the path portion of a URL:
 *
 * - Replaces consecutive slashes with one slash.
 * - Removes unnecessary '.' parts.
 * - Removes unnecessary '<dir>/..' parts.
 *
 * Based on code in the Node.js 'path' core module.
 *
 * @param aPath The path or url to normalize.
 */
var normalize = lruMemoize(function normalize(aPath) {
  var path = aPath;
  var url = urlParse(aPath);
  if (url) {
    if (!url.path) {
      return aPath;
    }
    path = url.path;
  }
  var isAbsolute = exports.isAbsolute(path);
  // Split the path into parts between `/` characters. This is much faster than
  // using `.split(/\/+/g)`.
  var parts = [];
  var start = 0;
  var i = 0;
  while (true) {
    start = i;
    i = path.indexOf("/", start);
    if (i === -1) {
      parts.push(path.slice(start));
      break;
    } else {
      parts.push(path.slice(start, i));
      while (i < path.length && path[i] === "/") {
        i++;
      }
    }
  }

  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
    part = parts[i];
    if (part === '.') {
      parts.splice(i, 1);
    } else if (part === '..') {
      up++;
    } else if (up > 0) {
      if (part === '') {
        // The first part is blank if the path is absolute. Trying to go
        // above the root is a no-op. Therefore we can remove all '..' parts
        // directly after the root.
        parts.splice(i + 1, up);
        up = 0;
      } else {
        parts.splice(i, 2);
        up--;
      }
    }
  }
  path = parts.join('/');

  if (path === '') {
    path = isAbsolute ? '/' : '.';
  }

  if (url) {
    url.path = path;
    return urlGenerate(url);
  }
  return path;
});
exports.normalize = normalize;

/**
 * Joins two paths/URLs.
 *
 * @param aRoot The root path or URL.
 * @param aPath The path or URL to be joined with the root.
 *
 * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
 *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
 *   first.
 * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
 *   is updated with the result and aRoot is returned. Otherwise the result
 *   is returned.
 *   - If aPath is absolute, the result is aPath.
 *   - Otherwise the two paths are joined with a slash.
 * - Joining for example 'http://' and 'www.example.com' is also supported.
 */
function join(aRoot, aPath) {
  if (aRoot === "") {
    aRoot = ".";
  }
  if (aPath === "") {
    aPath = ".";
  }
  var aPathUrl = urlParse(aPath);
  var aRootUrl = urlParse(aRoot);
  if (aRootUrl) {
    aRoot = aRootUrl.path || '/';
  }

  // `join(foo, '//www.example.org')`
  if (aPathUrl && !aPathUrl.scheme) {
    if (aRootUrl) {
      aPathUrl.scheme = aRootUrl.scheme;
    }
    return urlGenerate(aPathUrl);
  }

  if (aPathUrl || aPath.match(dataUrlRegexp)) {
    return aPath;
  }

  // `join('http://', 'www.example.com')`
  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
    aRootUrl.host = aPath;
    return urlGenerate(aRootUrl);
  }

  var joined = aPath.charAt(0) === '/'
    ? aPath
    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);

  if (aRootUrl) {
    aRootUrl.path = joined;
    return urlGenerate(aRootUrl);
  }
  return joined;
}
exports.join = join;

exports.isAbsolute = function (aPath) {
  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
};

/**
 * Make a path relative to a URL or another path.
 *
 * @param aRoot The root path or URL.
 * @param aPath The path or URL to be made relative to aRoot.
 */
function relative(aRoot, aPath) {
  if (aRoot === "") {
    aRoot = ".";
  }

  aRoot = aRoot.replace(/\/$/, '');

  // It is possible for the path to be above the root. In this case, simply
  // checking whether the root is a prefix of the path won't work. Instead, we
  // need to remove components from the root one by one, until either we find
  // a prefix that fits, or we run out of components to remove.
  var level = 0;
  while (aPath.indexOf(aRoot + '/') !== 0) {
    var index = aRoot.lastIndexOf("/");
    if (index < 0) {
      return aPath;
    }

    // If the only part of the root that is left is the scheme (i.e. http://,
    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
    // have exhausted all components, so the path is not relative to the root.
    aRoot = aRoot.slice(0, index);
    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
      return aPath;
    }

    ++level;
  }

  // Make sure we add a "../" for each component we removed from the root.
  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
}
exports.relative = relative;

var supportsNullProto = (function () {
  var obj = Object.create(null);
  return !('__proto__' in obj);
}());

function identity (s) {
  return s;
}

/**
 * Because behavior goes wacky when you set `__proto__` on objects, we
 * have to prefix all the strings in our set with an arbitrary character.
 *
 * See https://github.com/mozilla/source-map/pull/31 and
 * https://github.com/mozilla/source-map/issues/30
 *
 * @param String aStr
 */
function toSetString(aStr) {
  if (isProtoString(aStr)) {
    return '$' + aStr;
  }

  return aStr;
}
exports.toSetString = supportsNullProto ? identity : toSetString;

function fromSetString(aStr) {
  if (isProtoString(aStr)) {
    return aStr.slice(1);
  }

  return aStr;
}
exports.fromSetString = supportsNullProto ? identity : fromSetString;

function isProtoString(s) {
  if (!s) {
    return false;
  }

  var length = s.length;

  if (length < 9 /* "__proto__".length */) {
    return false;
  }

  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
      s.charCodeAt(length - 9) !== 95  /* '_' */) {
    return false;
  }

  for (var i = length - 10; i >= 0; i--) {
    if (s.charCodeAt(i) !== 36 /* '$' */) {
      return false;
    }
  }

  return true;
}

/**
 * Comparator between two mappings where the original positions are compared.
 *
 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
 * mappings with the same original source/line/column, but different generated
 * line and column the same. Useful when searching for a mapping with a
 * stubbed out mapping.
 */
function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
  var cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0 || onlyCompareOriginal) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByOriginalPositions = compareByOriginalPositions;

function compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {
  var cmp

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0 || onlyCompareOriginal) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;

/**
 * Comparator between two mappings with deflated source and name indices where
 * the generated positions are compared.
 *
 * Optionally pass in `true` as `onlyCompareGenerated` to consider two
 * mappings with the same generated line and column, but different
 * source/name/original line and column the same. Useful when searching for a
 * mapping with a stubbed out mapping.
 */
function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
  var cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0 || onlyCompareGenerated) {
    return cmp;
  }

  cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;

function compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {
  var cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0 || onlyCompareGenerated) {
    return cmp;
  }

  cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;

function strcmp(aStr1, aStr2) {
  if (aStr1 === aStr2) {
    return 0;
  }

  if (aStr1 === null) {
    return 1; // aStr2 !== null
  }

  if (aStr2 === null) {
    return -1; // aStr1 !== null
  }

  if (aStr1 > aStr2) {
    return 1;
  }

  return -1;
}

/**
 * Comparator between two mappings with inflated source and name strings where
 * the generated positions are compared.
 */
function compareByGeneratedPositionsInflated(mappingA, mappingB) {
  var cmp = mappingA.generatedLine - mappingB.generatedLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = strcmp(mappingA.source, mappingB.source);
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalLine - mappingB.originalLine;
  if (cmp !== 0) {
    return cmp;
  }

  cmp = mappingA.originalColumn - mappingB.originalColumn;
  if (cmp !== 0) {
    return cmp;
  }

  return strcmp(mappingA.name, mappingB.name);
}
exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;

/**
 * Strip any JSON XSSI avoidance prefix from the string (as documented
 * in the source maps specification), and then parse the string as
 * JSON.
 */
function parseSourceMapInput(str) {
  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
}
exports.parseSourceMapInput = parseSourceMapInput;

/**
 * Compute the URL of a source given the the source root, the source's
 * URL, and the source map's URL.
 */
function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
  sourceURL = sourceURL || '';

  if (sourceRoot) {
    // This follows what Chrome does.
    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
      sourceRoot += '/';
    }
    // The spec says:
    //   Line 4: An optional source root, useful for relocating source
    //   files on a server or removing repeated values in the
    //   â€œsourcesâ€ entry.  This value is prepended to the individual
    //   entries in the â€œsourceâ€ field.
    sourceURL = sourceRoot + sourceURL;
  }

  // Historically, SourceMapConsumer did not take the sourceMapURL as
  // a parameter.  This mode is still somewhat supported, which is why
  // this code block is conditional.  However, it's preferable to pass
  // the source map URL to SourceMapConsumer, so that this function
  // can implement the source URL resolution algorithm as outlined in
  // the spec.  This block is basically the equivalent of:
  //    new URL(sourceURL, sourceMapURL).toString()
  // ... except it avoids using URL, which wasn't available in the
  // older releases of node still supported by this library.
  //
  // The spec says:
  //   If the sources are not absolute URLs after prepending of the
  //   â€œsourceRootâ€, the sources are resolved relative to the
  //   SourceMap (like resolving script src in a html document).
  if (sourceMapURL) {
    var parsed = urlParse(sourceMapURL);
    if (!parsed) {
      throw new Error("sourceMapURL could not be parsed");
    }
    if (parsed.path) {
      // Strip the last path component, but keep the "/".
      var index = parsed.path.lastIndexOf('/');
      if (index >= 0) {
        parsed.path = parsed.path.substring(0, index + 1);
      }
    }
    sourceURL = join(urlGenerate(parsed), sourceURL);
  }

  return normalize(sourceURL);
}
exports.computeSourceURL = computeSourceURL;

Copyright (c) 2009-2011, Mozilla Foundation and contributors
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the names of the Mozilla Foundation nor the names of project
  contributors may be used to endorse or promote products derived from this
  software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
  "name": "source-map-js",
  "description": "Generates and consumes source maps",
  "version": "1.0.2",
  "homepage": "https://github.com/7rulnik/source-map-js",
  "author": "Valentin 7rulnik Semirulnik <v7rulnik@gmail.com>",
  "repository": "7rulnik/source-map-js",
  "main": "./source-map.js",
  "files": [
    "source-map.js",
    "source-map.d.ts",
    "lib/"
  ],
  "engines": {
    "node": ">=0.10.0"
  },
  "license": "BSD-3-Clause",
  "devDependencies": {
    "clean-publish": "^3.1.0",
    "doctoc": "^0.15.0",
    "webpack": "^1.12.0"
  },
  "clean-publish": {
    "cleanDocs": true
  },
  "typings": "source-map.d.ts"
}/*
 * Copyright 2009-2011 Mozilla Foundation and contributors
 * Licensed under the New BSD license. See LICENSE.txt or:
 * http://opensource.org/licenses/BSD-3-Clause
 */
exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;
exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;
exports.SourceNode = require('./lib/source-node').SourceNode;
{
  "100": "Continue",
  "101": "Switching Protocols",
  "102": "Processing",
  "103": "Early Hints",
  "200": "OK",
  "201": "Created",
  "202": "Accepted",
  "203": "Non-Authoritative Information",
  "204": "No Content",
  "205": "Reset Content",
  "206": "Partial Content",
  "207": "Multi-Status",
  "208": "Already Reported",
  "226": "IM Used",
  "300": "Multiple Choices",
  "301": "Moved Permanently",
  "302": "Found",
  "303": "See Other",
  "304": "Not Modified",
  "305": "Use Proxy",
  "306": "(Unused)",
  "307": "Temporary Redirect",
  "308": "Permanent Redirect",
  "400": "Bad Request",
  "401": "Unauthorized",
  "402": "Payment Required",
  "403": "Forbidden",
  "404": "Not Found",
  "405": "Method Not Allowed",
  "406": "Not Acceptable",
  "407": "Proxy Authentication Required",
  "408": "Request Timeout",
  "409": "Conflict",
  "410": "Gone",
  "411": "Length Required",
  "412": "Precondition Failed",
  "413": "Payload Too Large",
  "414": "URI Too Long",
  "415": "Unsupported Media Type",
  "416": "Range Not Satisfiable",
  "417": "Expectation Failed",
  "418": "I'm a teapot",
  "421": "Misdirected Request",
  "422": "Unprocessable Entity",
  "423": "Locked",
  "424": "Failed Dependency",
  "425": "Unordered Collection",
  "426": "Upgrade Required",
  "428": "Precondition Required",
  "429": "Too Many Requests",
  "431": "Request Header Fields Too Large",
  "451": "Unavailable For Legal Reasons",
  "500": "Internal Server Error",
  "501": "Not Implemented",
  "502": "Bad Gateway",
  "503": "Service Unavailable",
  "504": "Gateway Timeout",
  "505": "HTTP Version Not Supported",
  "506": "Variant Also Negotiates",
  "507": "Insufficient Storage",
  "508": "Loop Detected",
  "509": "Bandwidth Limit Exceeded",
  "510": "Not Extended",
  "511": "Network Authentication Required"
}
1.5.0 / 2018-03-27
==================

  * Add `103 Early Hints`

1.4.0 / 2017-10-20
==================

  * Add `STATUS_CODES` export

1.3.1 / 2016-11-11
==================

  * Fix return type in JSDoc

1.3.0 / 2016-05-17
==================

  * Add `421 Misdirected Request`
  * perf: enable strict mode

1.2.1 / 2015-02-01
==================

  * Fix message for status 451
    - `451 Unavailable For Legal Reasons`

1.2.0 / 2014-09-28
==================

  * Add `208 Already Repored`
  * Add `226 IM Used`
  * Add `306 (Unused)`
  * Add `415 Unable For Legal Reasons`
  * Add `508 Loop Detected`

1.1.1 / 2014-09-24
==================

  * Add missing 308 to `codes.json`

1.1.0 / 2014-09-21
==================

  * Add `codes.json` for universal support

1.0.4 / 2014-08-20
==================

  * Package cleanup

1.0.3 / 2014-06-08
==================

  * Add 308 to `.redirect` category

1.0.2 / 2014-03-13
==================

  * Add `.retry` category

1.0.1 / 2014-03-12
==================

  * Initial release
/*!
 * statuses
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2016 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var codes = require('./codes.json')

/**
 * Module exports.
 * @public
 */

module.exports = status

// status code to message map
status.STATUS_CODES = codes

// array of status codes
status.codes = populateStatusesMap(status, codes)

// status codes for redirects
status.redirect = {
  300: true,
  301: true,
  302: true,
  303: true,
  305: true,
  307: true,
  308: true
}

// status codes for empty bodies
status.empty = {
  204: true,
  205: true,
  304: true
}

// status codes for when you should retry the request
status.retry = {
  502: true,
  503: true,
  504: true
}

/**
 * Populate the statuses map for given codes.
 * @private
 */

function populateStatusesMap (statuses, codes) {
  var arr = []

  Object.keys(codes).forEach(function forEachCode (code) {
    var message = codes[code]
    var status = Number(code)

    // Populate properties
    statuses[status] = message
    statuses[message] = status
    statuses[message.toLowerCase()] = status

    // Add to array
    arr.push(status)
  })

  return arr
}

/**
 * Get the status code.
 *
 * Given a number, this will throw if it is not a known status
 * code, otherwise the code will be returned. Given a string,
 * the string will be parsed for a number and return the code
 * if valid, otherwise will lookup the code assuming this is
 * the status message.
 *
 * @param {string|number} code
 * @returns {number}
 * @public
 */

function status (code) {
  if (typeof code === 'number') {
    if (!status[code]) throw new Error('invalid status code: ' + code)
    return code
  }

  if (typeof code !== 'string') {
    throw new TypeError('code must be a number or string')
  }

  // '403'
  var n = parseInt(code, 10)
  if (!isNaN(n)) {
    if (!status[n]) throw new Error('invalid status code: ' + n)
    return n
  }

  n = status[code.toLowerCase()]
  if (!n) throw new Error('invalid status message: "' + code + '"')
  return n
}

The MIT License (MIT)

Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
Copyright (c) 2016 Douglas Christopher Wilson <doug@somethingdoug.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "statuses",
  "description": "HTTP status utility",
  "version": "1.5.0",
  "repository": "jshttp/statuses",
  "license": "MIT",
  "files": [
    "HISTORY.md",
    "index.js",
    "codes.json",
    "LICENSE"
  ],
  "devDependencies": {
    "csv-parse": "1.2.4",
    "eslint": "4.19.1",
    "eslint-config-standard": "11.0.0",
    "eslint-plugin-import": "2.9.0",
    "eslint-plugin-markdown": "1.0.0-beta.6",
    "eslint-plugin-node": "6.0.1",
    "eslint-plugin-promise": "3.7.0",
    "eslint-plugin-standard": "3.0.1",
    "istanbul": "0.4.5",
    "mocha": "1.21.5",
    "raw-body": "2.3.2",
    "stream-to-array": "2.3.0"
  },
  "engines": {
    "node": ">= 0.6"
  }
}'use strict';
const stripAnsi = require('strip-ansi');
const isFullwidthCodePoint = require('is-fullwidth-code-point');
const emojiRegex = require('emoji-regex');

const stringWidth = string => {
	if (typeof string !== 'string' || string.length === 0) {
		return 0;
	}

	string = stripAnsi(string);

	if (string.length === 0) {
		return 0;
	}

	string = string.replace(emojiRegex(), '  ');

	let width = 0;

	for (let i = 0; i < string.length; i++) {
		const code = string.codePointAt(i);

		// Ignore control characters
		if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {
			continue;
		}

		// Ignore combining characters
		if (code >= 0x300 && code <= 0x36F) {
			continue;
		}

		// Surrogates
		if (code > 0xFFFF) {
			i++;
		}

		width += isFullwidthCodePoint(code) ? 2 : 1;
	}

	return width;
};

module.exports = stringWidth;
// TODO: remove this in the next major version
module.exports.default = stringWidth;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "string-width",
  "version": "4.2.2",
  "description": "Get the visual width of a string - the number of columns required to display it",
  "license": "MIT",
  "repository": "sindresorhus/string-width",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=8"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "dependencies": {
    "emoji-regex": "^8.0.0",
    "is-fullwidth-code-point": "^3.0.0",
    "strip-ansi": "^6.0.0"
  },
  "devDependencies": {
    "ava": "^1.4.1",
    "tsd": "^0.7.1",
    "xo": "^0.24.0"
  }
}'use strict';
const ansiRegex = require('ansi-regex');

module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict';

module.exports = ({onlyFirst = false} = {}) => {
	const pattern = [
		'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
		'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
	].join('|');

	return new RegExp(pattern, onlyFirst ? undefined : 'g');
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "ansi-regex",
  "version": "5.0.0",
  "description": "Regular expression for matching ANSI escape codes",
  "license": "MIT",
  "repository": "chalk/ansi-regex",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=8"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "devDependencies": {
    "ava": "^2.4.0",
    "tsd": "^0.9.0",
    "xo": "^0.25.3"
  }
}{
  "name": "strip-ansi",
  "version": "6.0.0",
  "description": "Strip ANSI escape codes from a string",
  "license": "MIT",
  "repository": "chalk/strip-ansi",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=8"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "dependencies": {
    "ansi-regex": "^5.0.0"
  },
  "devDependencies": {
    "ava": "^2.4.0",
    "tsd": "^0.10.0",
    "xo": "^0.25.3"
  }
}'use strict';
module.exports = function (x) {
	var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt();
	var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt();

	if (x[x.length - 1] === lf) {
		x = x.slice(0, x.length - 1);
	}

	if (x[x.length - 1] === cr) {
		x = x.slice(0, x.length - 1);
	}

	return x;
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "strip-eof",
  "version": "1.0.0",
  "description": "Strip the End-Of-File (EOF) character from a string/buffer",
  "license": "MIT",
  "repository": "sindresorhus/strip-eof",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}var util = require('util')
var bl = require('bl')
var headers = require('./headers')

var Writable = require('readable-stream').Writable
var PassThrough = require('readable-stream').PassThrough

var noop = function () {}

var overflow = function (size) {
  size &= 511
  return size && 512 - size
}

var emptyStream = function (self, offset) {
  var s = new Source(self, offset)
  s.end()
  return s
}

var mixinPax = function (header, pax) {
  if (pax.path) header.name = pax.path
  if (pax.linkpath) header.linkname = pax.linkpath
  if (pax.size) header.size = parseInt(pax.size, 10)
  header.pax = pax
  return header
}

var Source = function (self, offset) {
  this._parent = self
  this.offset = offset
  PassThrough.call(this, { autoDestroy: false })
}

util.inherits(Source, PassThrough)

Source.prototype.destroy = function (err) {
  this._parent.destroy(err)
}

var Extract = function (opts) {
  if (!(this instanceof Extract)) return new Extract(opts)
  Writable.call(this, opts)

  opts = opts || {}

  this._offset = 0
  this._buffer = bl()
  this._missing = 0
  this._partial = false
  this._onparse = noop
  this._header = null
  this._stream = null
  this._overflow = null
  this._cb = null
  this._locked = false
  this._destroyed = false
  this._pax = null
  this._paxGlobal = null
  this._gnuLongPath = null
  this._gnuLongLinkPath = null

  var self = this
  var b = self._buffer

  var oncontinue = function () {
    self._continue()
  }

  var onunlock = function (err) {
    self._locked = false
    if (err) return self.destroy(err)
    if (!self._stream) oncontinue()
  }

  var onstreamend = function () {
    self._stream = null
    var drain = overflow(self._header.size)
    if (drain) self._parse(drain, ondrain)
    else self._parse(512, onheader)
    if (!self._locked) oncontinue()
  }

  var ondrain = function () {
    self._buffer.consume(overflow(self._header.size))
    self._parse(512, onheader)
    oncontinue()
  }

  var onpaxglobalheader = function () {
    var size = self._header.size
    self._paxGlobal = headers.decodePax(b.slice(0, size))
    b.consume(size)
    onstreamend()
  }

  var onpaxheader = function () {
    var size = self._header.size
    self._pax = headers.decodePax(b.slice(0, size))
    if (self._paxGlobal) self._pax = Object.assign({}, self._paxGlobal, self._pax)
    b.consume(size)
    onstreamend()
  }

  var ongnulongpath = function () {
    var size = self._header.size
    this._gnuLongPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)
    b.consume(size)
    onstreamend()
  }

  var ongnulonglinkpath = function () {
    var size = self._header.size
    this._gnuLongLinkPath = headers.decodeLongPath(b.slice(0, size), opts.filenameEncoding)
    b.consume(size)
    onstreamend()
  }

  var onheader = function () {
    var offset = self._offset
    var header
    try {
      header = self._header = headers.decode(b.slice(0, 512), opts.filenameEncoding, opts.allowUnknownFormat)
    } catch (err) {
      self.emit('error', err)
    }
    b.consume(512)

    if (!header) {
      self._parse(512, onheader)
      oncontinue()
      return
    }
    if (header.type === 'gnu-long-path') {
      self._parse(header.size, ongnulongpath)
      oncontinue()
      return
    }
    if (header.type === 'gnu-long-link-path') {
      self._parse(header.size, ongnulonglinkpath)
      oncontinue()
      return
    }
    if (header.type === 'pax-global-header') {
      self._parse(header.size, onpaxglobalheader)
      oncontinue()
      return
    }
    if (header.type === 'pax-header') {
      self._parse(header.size, onpaxheader)
      oncontinue()
      return
    }

    if (self._gnuLongPath) {
      header.name = self._gnuLongPath
      self._gnuLongPath = null
    }

    if (self._gnuLongLinkPath) {
      header.linkname = self._gnuLongLinkPath
      self._gnuLongLinkPath = null
    }

    if (self._pax) {
      self._header = header = mixinPax(header, self._pax)
      self._pax = null
    }

    self._locked = true

    if (!header.size || header.type === 'directory') {
      self._parse(512, onheader)
      self.emit('entry', header, emptyStream(self, offset), onunlock)
      return
    }

    self._stream = new Source(self, offset)

    self.emit('entry', header, self._stream, onunlock)
    self._parse(header.size, onstreamend)
    oncontinue()
  }

  this._onheader = onheader
  this._parse(512, onheader)
}

util.inherits(Extract, Writable)

Extract.prototype.destroy = function (err) {
  if (this._destroyed) return
  this._destroyed = true

  if (err) this.emit('error', err)
  this.emit('close')
  if (this._stream) this._stream.emit('close')
}

Extract.prototype._parse = function (size, onparse) {
  if (this._destroyed) return
  this._offset += size
  this._missing = size
  if (onparse === this._onheader) this._partial = false
  this._onparse = onparse
}

Extract.prototype._continue = function () {
  if (this._destroyed) return
  var cb = this._cb
  this._cb = noop
  if (this._overflow) this._write(this._overflow, undefined, cb)
  else cb()
}

Extract.prototype._write = function (data, enc, cb) {
  if (this._destroyed) return

  var s = this._stream
  var b = this._buffer
  var missing = this._missing
  if (data.length) this._partial = true

  // we do not reach end-of-chunk now. just forward it

  if (data.length < missing) {
    this._missing -= data.length
    this._overflow = null
    if (s) return s.write(data, cb)
    b.append(data)
    return cb()
  }

  // end-of-chunk. the parser should call cb.

  this._cb = cb
  this._missing = 0

  var overflow = null
  if (data.length > missing) {
    overflow = data.slice(missing)
    data = data.slice(0, missing)
  }

  if (s) s.end(data)
  else b.append(data)

  this._overflow = overflow
  this._onparse()
}

Extract.prototype._final = function (cb) {
  if (this._partial) return this.destroy(new Error('Unexpected end of data'))
  cb()
}

module.exports = Extract
var alloc = Buffer.alloc

var ZEROS = '0000000000000000000'
var SEVENS = '7777777777777777777'
var ZERO_OFFSET = '0'.charCodeAt(0)
var USTAR_MAGIC = Buffer.from('ustar\x00', 'binary')
var USTAR_VER = Buffer.from('00', 'binary')
var GNU_MAGIC = Buffer.from('ustar\x20', 'binary')
var GNU_VER = Buffer.from('\x20\x00', 'binary')
var MASK = parseInt('7777', 8)
var MAGIC_OFFSET = 257
var VERSION_OFFSET = 263

var clamp = function (index, len, defaultValue) {
  if (typeof index !== 'number') return defaultValue
  index = ~~index // Coerce to integer.
  if (index >= len) return len
  if (index >= 0) return index
  index += len
  if (index >= 0) return index
  return 0
}

var toType = function (flag) {
  switch (flag) {
    case 0:
      return 'file'
    case 1:
      return 'link'
    case 2:
      return 'symlink'
    case 3:
      return 'character-device'
    case 4:
      return 'block-device'
    case 5:
      return 'directory'
    case 6:
      return 'fifo'
    case 7:
      return 'contiguous-file'
    case 72:
      return 'pax-header'
    case 55:
      return 'pax-global-header'
    case 27:
      return 'gnu-long-link-path'
    case 28:
    case 30:
      return 'gnu-long-path'
  }

  return null
}

var toTypeflag = function (flag) {
  switch (flag) {
    case 'file':
      return 0
    case 'link':
      return 1
    case 'symlink':
      return 2
    case 'character-device':
      return 3
    case 'block-device':
      return 4
    case 'directory':
      return 5
    case 'fifo':
      return 6
    case 'contiguous-file':
      return 7
    case 'pax-header':
      return 72
  }

  return 0
}

var indexOf = function (block, num, offset, end) {
  for (; offset < end; offset++) {
    if (block[offset] === num) return offset
  }
  return end
}

var cksum = function (block) {
  var sum = 8 * 32
  for (var i = 0; i < 148; i++) sum += block[i]
  for (var j = 156; j < 512; j++) sum += block[j]
  return sum
}

var encodeOct = function (val, n) {
  val = val.toString(8)
  if (val.length > n) return SEVENS.slice(0, n) + ' '
  else return ZEROS.slice(0, n - val.length) + val + ' '
}

/* Copied from the node-tar repo and modified to meet
 * tar-stream coding standard.
 *
 * Source: https://github.com/npm/node-tar/blob/51b6627a1f357d2eb433e7378e5f05e83b7aa6cd/lib/header.js#L349
 */
function parse256 (buf) {
  // first byte MUST be either 80 or FF
  // 80 for positive, FF for 2's comp
  var positive
  if (buf[0] === 0x80) positive = true
  else if (buf[0] === 0xFF) positive = false
  else return null

  // build up a base-256 tuple from the least sig to the highest
  var tuple = []
  for (var i = buf.length - 1; i > 0; i--) {
    var byte = buf[i]
    if (positive) tuple.push(byte)
    else tuple.push(0xFF - byte)
  }

  var sum = 0
  var l = tuple.length
  for (i = 0; i < l; i++) {
    sum += tuple[i] * Math.pow(256, i)
  }

  return positive ? sum : -1 * sum
}

var decodeOct = function (val, offset, length) {
  val = val.slice(offset, offset + length)
  offset = 0

  // If prefixed with 0x80 then parse as a base-256 integer
  if (val[offset] & 0x80) {
    return parse256(val)
  } else {
    // Older versions of tar can prefix with spaces
    while (offset < val.length && val[offset] === 32) offset++
    var end = clamp(indexOf(val, 32, offset, val.length), val.length, val.length)
    while (offset < end && val[offset] === 0) offset++
    if (end === offset) return 0
    return parseInt(val.slice(offset, end).toString(), 8)
  }
}

var decodeStr = function (val, offset, length, encoding) {
  return val.slice(offset, indexOf(val, 0, offset, offset + length)).toString(encoding)
}

var addLength = function (str) {
  var len = Buffer.byteLength(str)
  var digits = Math.floor(Math.log(len) / Math.log(10)) + 1
  if (len + digits >= Math.pow(10, digits)) digits++

  return (len + digits) + str
}

exports.decodeLongPath = function (buf, encoding) {
  return decodeStr(buf, 0, buf.length, encoding)
}

exports.encodePax = function (opts) { // TODO: encode more stuff in pax
  var result = ''
  if (opts.name) result += addLength(' path=' + opts.name + '\n')
  if (opts.linkname) result += addLength(' linkpath=' + opts.linkname + '\n')
  var pax = opts.pax
  if (pax) {
    for (var key in pax) {
      result += addLength(' ' + key + '=' + pax[key] + '\n')
    }
  }
  return Buffer.from(result)
}

exports.decodePax = function (buf) {
  var result = {}

  while (buf.length) {
    var i = 0
    while (i < buf.length && buf[i] !== 32) i++
    var len = parseInt(buf.slice(0, i).toString(), 10)
    if (!len) return result

    var b = buf.slice(i + 1, len - 1).toString()
    var keyIndex = b.indexOf('=')
    if (keyIndex === -1) return result
    result[b.slice(0, keyIndex)] = b.slice(keyIndex + 1)

    buf = buf.slice(len)
  }

  return result
}

exports.encode = function (opts) {
  var buf = alloc(512)
  var name = opts.name
  var prefix = ''

  if (opts.typeflag === 5 && name[name.length - 1] !== '/') name += '/'
  if (Buffer.byteLength(name) !== name.length) return null // utf-8

  while (Buffer.byteLength(name) > 100) {
    var i = name.indexOf('/')
    if (i === -1) return null
    prefix += prefix ? '/' + name.slice(0, i) : name.slice(0, i)
    name = name.slice(i + 1)
  }

  if (Buffer.byteLength(name) > 100 || Buffer.byteLength(prefix) > 155) return null
  if (opts.linkname && Buffer.byteLength(opts.linkname) > 100) return null

  buf.write(name)
  buf.write(encodeOct(opts.mode & MASK, 6), 100)
  buf.write(encodeOct(opts.uid, 6), 108)
  buf.write(encodeOct(opts.gid, 6), 116)
  buf.write(encodeOct(opts.size, 11), 124)
  buf.write(encodeOct((opts.mtime.getTime() / 1000) | 0, 11), 136)

  buf[156] = ZERO_OFFSET + toTypeflag(opts.type)

  if (opts.linkname) buf.write(opts.linkname, 157)

  USTAR_MAGIC.copy(buf, MAGIC_OFFSET)
  USTAR_VER.copy(buf, VERSION_OFFSET)
  if (opts.uname) buf.write(opts.uname, 265)
  if (opts.gname) buf.write(opts.gname, 297)
  buf.write(encodeOct(opts.devmajor || 0, 6), 329)
  buf.write(encodeOct(opts.devminor || 0, 6), 337)

  if (prefix) buf.write(prefix, 345)

  buf.write(encodeOct(cksum(buf), 6), 148)

  return buf
}

exports.decode = function (buf, filenameEncoding, allowUnknownFormat) {
  var typeflag = buf[156] === 0 ? 0 : buf[156] - ZERO_OFFSET

  var name = decodeStr(buf, 0, 100, filenameEncoding)
  var mode = decodeOct(buf, 100, 8)
  var uid = decodeOct(buf, 108, 8)
  var gid = decodeOct(buf, 116, 8)
  var size = decodeOct(buf, 124, 12)
  var mtime = decodeOct(buf, 136, 12)
  var type = toType(typeflag)
  var linkname = buf[157] === 0 ? null : decodeStr(buf, 157, 100, filenameEncoding)
  var uname = decodeStr(buf, 265, 32)
  var gname = decodeStr(buf, 297, 32)
  var devmajor = decodeOct(buf, 329, 8)
  var devminor = decodeOct(buf, 337, 8)

  var c = cksum(buf)

  // checksum is still initial value if header was null.
  if (c === 8 * 32) return null

  // valid checksum
  if (c !== decodeOct(buf, 148, 8)) throw new Error('Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?')

  if (USTAR_MAGIC.compare(buf, MAGIC_OFFSET, MAGIC_OFFSET + 6) === 0) {
    // ustar (posix) format.
    // prepend prefix, if present.
    if (buf[345]) name = decodeStr(buf, 345, 155, filenameEncoding) + '/' + name
  } else if (GNU_MAGIC.compare(buf, MAGIC_OFFSET, MAGIC_OFFSET + 6) === 0 &&
             GNU_VER.compare(buf, VERSION_OFFSET, VERSION_OFFSET + 2) === 0) {
    // 'gnu'/'oldgnu' format. Similar to ustar, but has support for incremental and
    // multi-volume tarballs.
  } else {
    if (!allowUnknownFormat) {
      throw new Error('Invalid tar header: unknown format.')
    }
  }

  // to support old tar versions that use trailing / to indicate dirs
  if (typeflag === 0 && name && name[name.length - 1] === '/') typeflag = 5

  return {
    name,
    mode,
    uid,
    gid,
    size,
    mtime: new Date(1000 * mtime),
    type,
    linkname,
    uname,
    gname,
    devmajor,
    devminor
  }
}
exports.extract = require('./extract')
exports.pack = require('./pack')
The MIT License (MIT)

Copyright (c) 2014 Mathias Buus

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.# Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

* (a) The contribution was created in whole or in part by me and I
  have the right to submit it under the open source license
  indicated in the file; or

* (b) The contribution is based upon previous work that, to the best
  of my knowledge, is covered under an appropriate open source
  license and I have the right under that license to submit that
  work with modifications, whether created in whole or in part
  by me, under the same open source license (unless I am
  permitted to submit under a different license), as indicated
  in the file; or

* (c) The contribution was provided directly to me by some other
  person who certified (a), (b) or (c) and I have not modified
  it.

* (d) I understand and agree that this project and the contribution
  are public and that a record of the contribution (including all
  personal information I submit with it, including my sign-off) is
  maintained indefinitely and may be redistributed consistent with
  this project or the open source license(s) involved.

## Moderation Policy

The [Node.js Moderation Policy] applies to this WG.

## Code of Conduct

The [Node.js Code of Conduct][] applies to this WG.

[Node.js Code of Conduct]:
https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md
[Node.js Moderation Policy]:
https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md
'use strict';

function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }

var codes = {};

function createErrorType(code, message, Base) {
  if (!Base) {
    Base = Error;
  }

  function getMessage(arg1, arg2, arg3) {
    if (typeof message === 'string') {
      return message;
    } else {
      return message(arg1, arg2, arg3);
    }
  }

  var NodeError =
  /*#__PURE__*/
  function (_Base) {
    _inheritsLoose(NodeError, _Base);

    function NodeError(arg1, arg2, arg3) {
      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;
    }

    return NodeError;
  }(Base);

  NodeError.prototype.name = Base.name;
  NodeError.prototype.code = code;
  codes[code] = NodeError;
} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js


function oneOf(expected, thing) {
  if (Array.isArray(expected)) {
    var len = expected.length;
    expected = expected.map(function (i) {
      return String(i);
    });

    if (len > 2) {
      return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1];
    } else if (len === 2) {
      return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]);
    } else {
      return "of ".concat(thing, " ").concat(expected[0]);
    }
  } else {
    return "of ".concat(thing, " ").concat(String(expected));
  }
} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith


function startsWith(str, search, pos) {
  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith


function endsWith(str, search, this_len) {
  if (this_len === undefined || this_len > str.length) {
    this_len = str.length;
  }

  return str.substring(this_len - search.length, this_len) === search;
} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes


function includes(str, search, start) {
  if (typeof start !== 'number') {
    start = 0;
  }

  if (start + search.length > str.length) {
    return false;
  } else {
    return str.indexOf(search, start) !== -1;
  }
}

createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
  return 'The value "' + value + '" is invalid for option "' + name + '"';
}, TypeError);
createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
  // determiner: 'must be' or 'must not be'
  var determiner;

  if (typeof expected === 'string' && startsWith(expected, 'not ')) {
    determiner = 'must not be';
    expected = expected.replace(/^not /, '');
  } else {
    determiner = 'must be';
  }

  var msg;

  if (endsWith(name, ' argument')) {
    // For cases like 'first argument'
    msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
  } else {
    var type = includes(name, '.') ? 'property' : 'argument';
    msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type'));
  }

  msg += ". Received type ".concat(typeof actual);
  return msg;
}, TypeError);
createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
  return 'The ' + name + ' method is not implemented';
});
createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
createErrorType('ERR_STREAM_DESTROYED', function (name) {
  return 'Cannot call ' + name + ' after a stream was destroyed';
});
createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
  return 'Unknown encoding: ' + arg;
}, TypeError);
createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');
module.exports.codes = codes;
'use strict';

const codes = {};

function createErrorType(code, message, Base) {
  if (!Base) {
    Base = Error
  }

  function getMessage (arg1, arg2, arg3) {
    if (typeof message === 'string') {
      return message
    } else {
      return message(arg1, arg2, arg3)
    }
  }

  class NodeError extends Base {
    constructor (arg1, arg2, arg3) {
      super(getMessage(arg1, arg2, arg3));
    }
  }

  NodeError.prototype.name = Base.name;
  NodeError.prototype.code = code;

  codes[code] = NodeError;
}

// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js
function oneOf(expected, thing) {
  if (Array.isArray(expected)) {
    const len = expected.length;
    expected = expected.map((i) => String(i));
    if (len > 2) {
      return `one of ${thing} ${expected.slice(0, len - 1).join(', ')}, or ` +
             expected[len - 1];
    } else if (len === 2) {
      return `one of ${thing} ${expected[0]} or ${expected[1]}`;
    } else {
      return `of ${thing} ${expected[0]}`;
    }
  } else {
    return `of ${thing} ${String(expected)}`;
  }
}

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
function startsWith(str, search, pos) {
	return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
}

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
function endsWith(str, search, this_len) {
	if (this_len === undefined || this_len > str.length) {
		this_len = str.length;
	}
	return str.substring(this_len - search.length, this_len) === search;
}

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
function includes(str, search, start) {
  if (typeof start !== 'number') {
    start = 0;
  }

  if (start + search.length > str.length) {
    return false;
  } else {
    return str.indexOf(search, start) !== -1;
  }
}

createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {
  return 'The value "' + value + '" is invalid for option "' + name + '"'
}, TypeError);
createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {
  // determiner: 'must be' or 'must not be'
  let determiner;
  if (typeof expected === 'string' && startsWith(expected, 'not ')) {
    determiner = 'must not be';
    expected = expected.replace(/^not /, '');
  } else {
    determiner = 'must be';
  }

  let msg;
  if (endsWith(name, ' argument')) {
    // For cases like 'first argument'
    msg = `The ${name} ${determiner} ${oneOf(expected, 'type')}`;
  } else {
    const type = includes(name, '.') ? 'property' : 'argument';
    msg = `The "${name}" ${type} ${determiner} ${oneOf(expected, 'type')}`;
  }

  msg += `. Received type ${typeof actual}`;
  return msg;
}, TypeError);
createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');
createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {
  return 'The ' + name + ' method is not implemented'
});
createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');
createErrorType('ERR_STREAM_DESTROYED', function (name) {
  return 'Cannot call ' + name + ' after a stream was destroyed';
});
createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');
createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');
createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');
createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);
createErrorType('ERR_UNKNOWN_ENCODING', function (arg) {
  return 'Unknown encoding: ' + arg
}, TypeError);
createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');

module.exports.codes = codes;
'use strict'

var experimentalWarnings = new Set();

function emitExperimentalWarning(feature) {
  if (experimentalWarnings.has(feature)) return;
  var msg = feature + ' is an experimental feature. This feature could ' +
       'change at any time';
  experimentalWarnings.add(feature);
  process.emitWarning(msg, 'ExperimentalWarning');
}

function noop() {}

module.exports.emitExperimentalWarning = process.emitWarning
  ? emitExperimentalWarning
  : noop;
### Streams Working Group

The Node.js Streams is jointly governed by a Working Group
(WG)
that is responsible for high-level guidance of the project.

The WG has final authority over this project including:

* Technical direction
* Project governance and process (including this policy)
* Contribution policy
* GitHub repository hosting
* Conduct guidelines
* Maintaining the list of additional Collaborators

For the current list of WG members, see the project
[README.md](./README.md#current-project-team-members).

### Collaborators

The readable-stream GitHub repository is
maintained by the WG and additional Collaborators who are added by the
WG on an ongoing basis.

Individuals making significant and valuable contributions are made
Collaborators and given commit-access to the project. These
individuals are identified by the WG and their addition as
Collaborators is discussed during the WG meeting.

_Note:_ If you make a significant contribution and are not considered
for commit-access log an issue or contact a WG member directly and it
will be brought up in the next WG meeting.

Modifications of the contents of the readable-stream repository are
made on
a collaborative basis. Anybody with a GitHub account may propose a
modification via pull request and it will be considered by the project
Collaborators. All pull requests must be reviewed and accepted by a
Collaborator with sufficient expertise who is able to take full
responsibility for the change. In the case of pull requests proposed
by an existing Collaborator, an additional Collaborator is required
for sign-off. Consensus should be sought if additional Collaborators
participate and there is disagreement around a particular
modification. See _Consensus Seeking Process_ below for further detail
on the consensus model used for governance.

Collaborators may opt to elevate significant or controversial
modifications, or modifications that have not found consensus to the
WG for discussion by assigning the ***WG-agenda*** tag to a pull
request or issue. The WG should serve as the final arbiter where
required.

For the current list of Collaborators, see the project
[README.md](./README.md#members).

### WG Membership

WG seats are not time-limited.  There is no fixed size of the WG.
However, the expected target is between 6 and 12, to ensure adequate
coverage of important areas of expertise, balanced with the ability to
make decisions efficiently.

There is no specific set of requirements or qualifications for WG
membership beyond these rules.

The WG may add additional members to the WG by unanimous consensus.

A WG member may be removed from the WG by voluntary resignation, or by
unanimous consensus of all other WG members.

Changes to WG membership should be posted in the agenda, and may be
suggested as any other agenda item (see "WG Meetings" below).

If an addition or removal is proposed during a meeting, and the full
WG is not in attendance to participate, then the addition or removal
is added to the agenda for the subsequent meeting.  This is to ensure
that all members are given the opportunity to participate in all
membership decisions.  If a WG member is unable to attend a meeting
where a planned membership decision is being made, then their consent
is assumed.

No more than 1/3 of the WG members may be affiliated with the same
employer.  If removal or resignation of a WG member, or a change of
employment by a WG member, creates a situation where more than 1/3 of
the WG membership shares an employer, then the situation must be
immediately remedied by the resignation or removal of one or more WG
members affiliated with the over-represented employer(s).

### WG Meetings

The WG meets occasionally on a Google Hangout On Air. A designated moderator
approved by the WG runs the meeting. Each meeting should be
published to YouTube.

Items are added to the WG agenda that are considered contentious or
are modifications of governance, contribution policy, WG membership,
or release process.

The intention of the agenda is not to approve or review all patches;
that should happen continuously on GitHub and be handled by the larger
group of Collaborators.

Any community member or contributor can ask that something be added to
the next meeting's agenda by logging a GitHub Issue. Any Collaborator,
WG member or the moderator can add the item to the agenda by adding
the ***WG-agenda*** tag to the issue.

Prior to each WG meeting the moderator will share the Agenda with
members of the WG. WG members can add any items they like to the
agenda at the beginning of each meeting. The moderator and the WG
cannot veto or remove items.

The WG may invite persons or representatives from certain projects to
participate in a non-voting capacity.

The moderator is responsible for summarizing the discussion of each
agenda item and sends it as a pull request after the meeting.

### Consensus Seeking Process

The WG follows a
[Consensus
Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making)
decision-making model.

When an agenda item has appeared to reach a consensus the moderator
will ask "Does anyone object?" as a final call for dissent from the
consensus.

If an agenda item cannot reach a consensus a WG member can call for
either a closing vote or a vote to table the issue to the next
meeting. The call for a vote must be seconded by a majority of the WG
or else the discussion will continue. Simple majority wins.

Note that changes to WG membership require a majority consensus.  See
"WG Membership" above.
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a duplex stream is just a stream that is both readable and writable.
// Since JS doesn't have multiple prototypal inheritance, this class
// prototypally inherits from Readable, and then parasitically from
// Writable.
'use strict';
/*<replacement>*/

var objectKeys = Object.keys || function (obj) {
  var keys = [];

  for (var key in obj) {
    keys.push(key);
  }

  return keys;
};
/*</replacement>*/


module.exports = Duplex;

var Readable = require('./_stream_readable');

var Writable = require('./_stream_writable');

require('inherits')(Duplex, Readable);

{
  // Allow the keys array to be GC'ed.
  var keys = objectKeys(Writable.prototype);

  for (var v = 0; v < keys.length; v++) {
    var method = keys[v];
    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
  }
}

function Duplex(options) {
  if (!(this instanceof Duplex)) return new Duplex(options);
  Readable.call(this, options);
  Writable.call(this, options);
  this.allowHalfOpen = true;

  if (options) {
    if (options.readable === false) this.readable = false;
    if (options.writable === false) this.writable = false;

    if (options.allowHalfOpen === false) {
      this.allowHalfOpen = false;
      this.once('end', onend);
    }
  }
}

Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState.highWaterMark;
  }
});
Object.defineProperty(Duplex.prototype, 'writableBuffer', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState && this._writableState.getBuffer();
  }
});
Object.defineProperty(Duplex.prototype, 'writableLength', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState.length;
  }
}); // the no-half-open enforcer

function onend() {
  // If the writable side ended, then we're ok.
  if (this._writableState.ended) return; // no more data can be written.
  // But allow more writes to happen in this tick.

  process.nextTick(onEndNT, this);
}

function onEndNT(self) {
  self.end();
}

Object.defineProperty(Duplex.prototype, 'destroyed', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    if (this._readableState === undefined || this._writableState === undefined) {
      return false;
    }

    return this._readableState.destroyed && this._writableState.destroyed;
  },
  set: function set(value) {
    // we ignore the value if the stream
    // has not been initialized yet
    if (this._readableState === undefined || this._writableState === undefined) {
      return;
    } // backward compatibility, the user is explicitly
    // managing destroyed


    this._readableState.destroyed = value;
    this._writableState.destroyed = value;
  }
});// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a passthrough stream.
// basically just the most minimal sort of Transform stream.
// Every written chunk gets output as-is.
'use strict';

module.exports = PassThrough;

var Transform = require('./_stream_transform');

require('inherits')(PassThrough, Transform);

function PassThrough(options) {
  if (!(this instanceof PassThrough)) return new PassThrough(options);
  Transform.call(this, options);
}

PassThrough.prototype._transform = function (chunk, encoding, cb) {
  cb(null, chunk);
};// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
'use strict';

module.exports = Readable;
/*<replacement>*/

var Duplex;
/*</replacement>*/

Readable.ReadableState = ReadableState;
/*<replacement>*/

var EE = require('events').EventEmitter;

var EElistenerCount = function EElistenerCount(emitter, type) {
  return emitter.listeners(type).length;
};
/*</replacement>*/

/*<replacement>*/


var Stream = require('./internal/streams/stream');
/*</replacement>*/


var Buffer = require('buffer').Buffer;

var OurUint8Array = global.Uint8Array || function () {};

function _uint8ArrayToBuffer(chunk) {
  return Buffer.from(chunk);
}

function _isUint8Array(obj) {
  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
}
/*<replacement>*/


var debugUtil = require('util');

var debug;

if (debugUtil && debugUtil.debuglog) {
  debug = debugUtil.debuglog('stream');
} else {
  debug = function debug() {};
}
/*</replacement>*/


var BufferList = require('./internal/streams/buffer_list');

var destroyImpl = require('./internal/streams/destroy');

var _require = require('./internal/streams/state'),
    getHighWaterMark = _require.getHighWaterMark;

var _require$codes = require('../errors').codes,
    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
    ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,
    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
    ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.


var StringDecoder;
var createReadableStreamAsyncIterator;
var from;

require('inherits')(Readable, Stream);

var errorOrDestroy = destroyImpl.errorOrDestroy;
var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];

function prependListener(emitter, event, fn) {
  // Sadly this is not cacheable as some libraries bundle their own
  // event emitter implementation with them.
  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any
  // userland ones.  NEVER DO THIS. This is here only because this code needs
  // to continue to work with older versions of Node.js that do not include
  // the prependListener() method. The goal is to eventually remove this hack.

  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
}

function ReadableState(options, stream, isDuplex) {
  Duplex = Duplex || require('./_stream_duplex');
  options = options || {}; // Duplex streams are both readable and writable, but share
  // the same options object.
  // However, some cases require setting options to different
  // values for the readable and the writable sides of the duplex stream.
  // These options can be provided separately as readableXXX and writableXXX.

  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to
  // make all the buffer merging and length checks go away

  this.objectMode = !!options.objectMode;
  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer
  // Note: 0 is a valid value, means "don't call _read preemptively ever"

  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the
  // linked list can remove elements from the beginning faster than
  // array.shift()

  this.buffer = new BufferList();
  this.length = 0;
  this.pipes = null;
  this.pipesCount = 0;
  this.flowing = null;
  this.ended = false;
  this.endEmitted = false;
  this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted
  // immediately, or on a later tick.  We set this to true at first, because
  // any actions that shouldn't happen until "later" should generally also
  // not happen before the first read call.

  this.sync = true; // whenever we return null, then we set a flag to say
  // that we're awaiting a 'readable' event emission.

  this.needReadable = false;
  this.emittedReadable = false;
  this.readableListening = false;
  this.resumeScheduled = false;
  this.paused = true; // Should close be emitted on destroy. Defaults to true.

  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')

  this.autoDestroy = !!options.autoDestroy; // has it been destroyed

  this.destroyed = false; // Crypto is kind of old and crusty.  Historically, its default string
  // encoding is 'binary' so we have to make this configurable.
  // Everything else in the universe uses 'utf8', though.

  this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s

  this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled

  this.readingMore = false;
  this.decoder = null;
  this.encoding = null;

  if (options.encoding) {
    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
    this.decoder = new StringDecoder(options.encoding);
    this.encoding = options.encoding;
  }
}

function Readable(options) {
  Duplex = Duplex || require('./_stream_duplex');
  if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside
  // the ReadableState constructor, at least with V8 6.5

  var isDuplex = this instanceof Duplex;
  this._readableState = new ReadableState(options, this, isDuplex); // legacy

  this.readable = true;

  if (options) {
    if (typeof options.read === 'function') this._read = options.read;
    if (typeof options.destroy === 'function') this._destroy = options.destroy;
  }

  Stream.call(this);
}

Object.defineProperty(Readable.prototype, 'destroyed', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    if (this._readableState === undefined) {
      return false;
    }

    return this._readableState.destroyed;
  },
  set: function set(value) {
    // we ignore the value if the stream
    // has not been initialized yet
    if (!this._readableState) {
      return;
    } // backward compatibility, the user is explicitly
    // managing destroyed


    this._readableState.destroyed = value;
  }
});
Readable.prototype.destroy = destroyImpl.destroy;
Readable.prototype._undestroy = destroyImpl.undestroy;

Readable.prototype._destroy = function (err, cb) {
  cb(err);
}; // Manually shove something into the read() buffer.
// This returns true if the highWaterMark has not been hit yet,
// similar to how Writable.write() returns true if you should
// write() some more.


Readable.prototype.push = function (chunk, encoding) {
  var state = this._readableState;
  var skipChunkCheck;

  if (!state.objectMode) {
    if (typeof chunk === 'string') {
      encoding = encoding || state.defaultEncoding;

      if (encoding !== state.encoding) {
        chunk = Buffer.from(chunk, encoding);
        encoding = '';
      }

      skipChunkCheck = true;
    }
  } else {
    skipChunkCheck = true;
  }

  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
}; // Unshift should *always* be something directly out of read()


Readable.prototype.unshift = function (chunk) {
  return readableAddChunk(this, chunk, null, true, false);
};

function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
  debug('readableAddChunk', chunk);
  var state = stream._readableState;

  if (chunk === null) {
    state.reading = false;
    onEofChunk(stream, state);
  } else {
    var er;
    if (!skipChunkCheck) er = chunkInvalid(state, chunk);

    if (er) {
      errorOrDestroy(stream, er);
    } else if (state.objectMode || chunk && chunk.length > 0) {
      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
        chunk = _uint8ArrayToBuffer(chunk);
      }

      if (addToFront) {
        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);
      } else if (state.ended) {
        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());
      } else if (state.destroyed) {
        return false;
      } else {
        state.reading = false;

        if (state.decoder && !encoding) {
          chunk = state.decoder.write(chunk);
          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
        } else {
          addChunk(stream, state, chunk, false);
        }
      }
    } else if (!addToFront) {
      state.reading = false;
      maybeReadMore(stream, state);
    }
  } // We can push more data if we are below the highWaterMark.
  // Also, if we have no data yet, we can stand some more bytes.
  // This is to work around cases where hwm=0, such as the repl.


  return !state.ended && (state.length < state.highWaterMark || state.length === 0);
}

function addChunk(stream, state, chunk, addToFront) {
  if (state.flowing && state.length === 0 && !state.sync) {
    state.awaitDrain = 0;
    stream.emit('data', chunk);
  } else {
    // update the buffer info.
    state.length += state.objectMode ? 1 : chunk.length;
    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
    if (state.needReadable) emitReadable(stream);
  }

  maybeReadMore(stream, state);
}

function chunkInvalid(state, chunk) {
  var er;

  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);
  }

  return er;
}

Readable.prototype.isPaused = function () {
  return this._readableState.flowing === false;
}; // backwards compatibility.


Readable.prototype.setEncoding = function (enc) {
  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
  var decoder = new StringDecoder(enc);
  this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8

  this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:

  var p = this._readableState.buffer.head;
  var content = '';

  while (p !== null) {
    content += decoder.write(p.data);
    p = p.next;
  }

  this._readableState.buffer.clear();

  if (content !== '') this._readableState.buffer.push(content);
  this._readableState.length = content.length;
  return this;
}; // Don't raise the hwm > 1GB


var MAX_HWM = 0x40000000;

function computeNewHighWaterMark(n) {
  if (n >= MAX_HWM) {
    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.
    n = MAX_HWM;
  } else {
    // Get the next highest power of 2 to prevent increasing hwm excessively in
    // tiny amounts
    n--;
    n |= n >>> 1;
    n |= n >>> 2;
    n |= n >>> 4;
    n |= n >>> 8;
    n |= n >>> 16;
    n++;
  }

  return n;
} // This function is designed to be inlinable, so please take care when making
// changes to the function body.


function howMuchToRead(n, state) {
  if (n <= 0 || state.length === 0 && state.ended) return 0;
  if (state.objectMode) return 1;

  if (n !== n) {
    // Only flow one buffer at a time
    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
  } // If we're asking for more than the current hwm, then raise the hwm.


  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
  if (n <= state.length) return n; // Don't have enough

  if (!state.ended) {
    state.needReadable = true;
    return 0;
  }

  return state.length;
} // you can override either this method, or the async _read(n) below.


Readable.prototype.read = function (n) {
  debug('read', n);
  n = parseInt(n, 10);
  var state = this._readableState;
  var nOrig = n;
  if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we
  // already have a bunch of data in the buffer, then just trigger
  // the 'readable' event and move on.

  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {
    debug('read: emitReadable', state.length, state.ended);
    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
    return null;
  }

  n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.

  if (n === 0 && state.ended) {
    if (state.length === 0) endReadable(this);
    return null;
  } // All the actual chunk generation logic needs to be
  // *below* the call to _read.  The reason is that in certain
  // synthetic stream cases, such as passthrough streams, _read
  // may be a completely synchronous operation which may change
  // the state of the read buffer, providing enough data when
  // before there was *not* enough.
  //
  // So, the steps are:
  // 1. Figure out what the state of things will be after we do
  // a read from the buffer.
  //
  // 2. If that resulting state will trigger a _read, then call _read.
  // Note that this may be asynchronous, or synchronous.  Yes, it is
  // deeply ugly to write APIs this way, but that still doesn't mean
  // that the Readable class should behave improperly, as streams are
  // designed to be sync/async agnostic.
  // Take note if the _read call is sync or async (ie, if the read call
  // has returned yet), so that we know whether or not it's safe to emit
  // 'readable' etc.
  //
  // 3. Actually pull the requested chunks out of the buffer and return.
  // if we need a readable event, then we need to do some reading.


  var doRead = state.needReadable;
  debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some

  if (state.length === 0 || state.length - n < state.highWaterMark) {
    doRead = true;
    debug('length less than watermark', doRead);
  } // however, if we've ended, then there's no point, and if we're already
  // reading, then it's unnecessary.


  if (state.ended || state.reading) {
    doRead = false;
    debug('reading or ended', doRead);
  } else if (doRead) {
    debug('do read');
    state.reading = true;
    state.sync = true; // if the length is currently zero, then we *need* a readable event.

    if (state.length === 0) state.needReadable = true; // call internal read method

    this._read(state.highWaterMark);

    state.sync = false; // If _read pushed data synchronously, then `reading` will be false,
    // and we need to re-evaluate how much data we can return to the user.

    if (!state.reading) n = howMuchToRead(nOrig, state);
  }

  var ret;
  if (n > 0) ret = fromList(n, state);else ret = null;

  if (ret === null) {
    state.needReadable = state.length <= state.highWaterMark;
    n = 0;
  } else {
    state.length -= n;
    state.awaitDrain = 0;
  }

  if (state.length === 0) {
    // If we have nothing in the buffer, then we want to know
    // as soon as we *do* get something into the buffer.
    if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.

    if (nOrig !== n && state.ended) endReadable(this);
  }

  if (ret !== null) this.emit('data', ret);
  return ret;
};

function onEofChunk(stream, state) {
  debug('onEofChunk');
  if (state.ended) return;

  if (state.decoder) {
    var chunk = state.decoder.end();

    if (chunk && chunk.length) {
      state.buffer.push(chunk);
      state.length += state.objectMode ? 1 : chunk.length;
    }
  }

  state.ended = true;

  if (state.sync) {
    // if we are sync, wait until next tick to emit the data.
    // Otherwise we risk emitting data in the flow()
    // the readable code triggers during a read() call
    emitReadable(stream);
  } else {
    // emit 'readable' now to make sure it gets picked up.
    state.needReadable = false;

    if (!state.emittedReadable) {
      state.emittedReadable = true;
      emitReadable_(stream);
    }
  }
} // Don't emit readable right away in sync mode, because this can trigger
// another read() call => stack overflow.  This way, it might trigger
// a nextTick recursion warning, but that's not so bad.


function emitReadable(stream) {
  var state = stream._readableState;
  debug('emitReadable', state.needReadable, state.emittedReadable);
  state.needReadable = false;

  if (!state.emittedReadable) {
    debug('emitReadable', state.flowing);
    state.emittedReadable = true;
    process.nextTick(emitReadable_, stream);
  }
}

function emitReadable_(stream) {
  var state = stream._readableState;
  debug('emitReadable_', state.destroyed, state.length, state.ended);

  if (!state.destroyed && (state.length || state.ended)) {
    stream.emit('readable');
    state.emittedReadable = false;
  } // The stream needs another readable event if
  // 1. It is not flowing, as the flow mechanism will take
  //    care of it.
  // 2. It is not ended.
  // 3. It is below the highWaterMark, so we can schedule
  //    another readable later.


  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;
  flow(stream);
} // at this point, the user has presumably seen the 'readable' event,
// and called read() to consume some data.  that may have triggered
// in turn another _read(n) call, in which case reading = true if
// it's in progress.
// However, if we're not ended, or reading, and the length < hwm,
// then go ahead and try to read some more preemptively.


function maybeReadMore(stream, state) {
  if (!state.readingMore) {
    state.readingMore = true;
    process.nextTick(maybeReadMore_, stream, state);
  }
}

function maybeReadMore_(stream, state) {
  // Attempt to read more data if we should.
  //
  // The conditions for reading more data are (one of):
  // - Not enough data buffered (state.length < state.highWaterMark). The loop
  //   is responsible for filling the buffer with enough data if such data
  //   is available. If highWaterMark is 0 and we are not in the flowing mode
  //   we should _not_ attempt to buffer any extra data. We'll get more data
  //   when the stream consumer calls read() instead.
  // - No data in the buffer, and the stream is in flowing mode. In this mode
  //   the loop below is responsible for ensuring read() is called. Failing to
  //   call read here would abort the flow and there's no other mechanism for
  //   continuing the flow if the stream consumer has just subscribed to the
  //   'data' event.
  //
  // In addition to the above conditions to keep reading data, the following
  // conditions prevent the data from being read:
  // - The stream has ended (state.ended).
  // - There is already a pending 'read' operation (state.reading). This is a
  //   case where the the stream has called the implementation defined _read()
  //   method, but they are processing the call asynchronously and have _not_
  //   called push() with new data. In this case we skip performing more
  //   read()s. The execution ends in this method again after the _read() ends
  //   up calling push() with more data.
  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {
    var len = state.length;
    debug('maybeReadMore read 0');
    stream.read(0);
    if (len === state.length) // didn't get any data, stop spinning.
      break;
  }

  state.readingMore = false;
} // abstract method.  to be overridden in specific implementation classes.
// call cb(er, data) where data is <= n in length.
// for virtual (non-string, non-buffer) streams, "length" is somewhat
// arbitrary, and perhaps not very meaningful.


Readable.prototype._read = function (n) {
  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));
};

Readable.prototype.pipe = function (dest, pipeOpts) {
  var src = this;
  var state = this._readableState;

  switch (state.pipesCount) {
    case 0:
      state.pipes = dest;
      break;

    case 1:
      state.pipes = [state.pipes, dest];
      break;

    default:
      state.pipes.push(dest);
      break;
  }

  state.pipesCount += 1;
  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
  var endFn = doEnd ? onend : unpipe;
  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);
  dest.on('unpipe', onunpipe);

  function onunpipe(readable, unpipeInfo) {
    debug('onunpipe');

    if (readable === src) {
      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
        unpipeInfo.hasUnpiped = true;
        cleanup();
      }
    }
  }

  function onend() {
    debug('onend');
    dest.end();
  } // when the dest drains, it reduces the awaitDrain counter
  // on the source.  This would be more elegant with a .once()
  // handler in flow(), but adding and removing repeatedly is
  // too slow.


  var ondrain = pipeOnDrain(src);
  dest.on('drain', ondrain);
  var cleanedUp = false;

  function cleanup() {
    debug('cleanup'); // cleanup event handlers once the pipe is broken

    dest.removeListener('close', onclose);
    dest.removeListener('finish', onfinish);
    dest.removeListener('drain', ondrain);
    dest.removeListener('error', onerror);
    dest.removeListener('unpipe', onunpipe);
    src.removeListener('end', onend);
    src.removeListener('end', unpipe);
    src.removeListener('data', ondata);
    cleanedUp = true; // if the reader is waiting for a drain event from this
    // specific writer, then it would cause it to never start
    // flowing again.
    // So, if this is awaiting a drain, then we just call it now.
    // If we don't know, then assume that we are waiting for one.

    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
  }

  src.on('data', ondata);

  function ondata(chunk) {
    debug('ondata');
    var ret = dest.write(chunk);
    debug('dest.write', ret);

    if (ret === false) {
      // If the user unpiped during `dest.write()`, it is possible
      // to get stuck in a permanently paused state if that write
      // also returned false.
      // => Check whether `dest` is still a piping destination.
      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
        debug('false write response, pause', state.awaitDrain);
        state.awaitDrain++;
      }

      src.pause();
    }
  } // if the dest has an error, then stop piping into it.
  // however, don't suppress the throwing behavior for this.


  function onerror(er) {
    debug('onerror', er);
    unpipe();
    dest.removeListener('error', onerror);
    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);
  } // Make sure our error handler is attached before userland ones.


  prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.

  function onclose() {
    dest.removeListener('finish', onfinish);
    unpipe();
  }

  dest.once('close', onclose);

  function onfinish() {
    debug('onfinish');
    dest.removeListener('close', onclose);
    unpipe();
  }

  dest.once('finish', onfinish);

  function unpipe() {
    debug('unpipe');
    src.unpipe(dest);
  } // tell the dest that it's being piped to


  dest.emit('pipe', src); // start the flow if it hasn't been started already.

  if (!state.flowing) {
    debug('pipe resume');
    src.resume();
  }

  return dest;
};

function pipeOnDrain(src) {
  return function pipeOnDrainFunctionResult() {
    var state = src._readableState;
    debug('pipeOnDrain', state.awaitDrain);
    if (state.awaitDrain) state.awaitDrain--;

    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
      state.flowing = true;
      flow(src);
    }
  };
}

Readable.prototype.unpipe = function (dest) {
  var state = this._readableState;
  var unpipeInfo = {
    hasUnpiped: false
  }; // if we're not piping anywhere, then do nothing.

  if (state.pipesCount === 0) return this; // just one destination.  most common case.

  if (state.pipesCount === 1) {
    // passed in one, but it's not the right one.
    if (dest && dest !== state.pipes) return this;
    if (!dest) dest = state.pipes; // got a match.

    state.pipes = null;
    state.pipesCount = 0;
    state.flowing = false;
    if (dest) dest.emit('unpipe', this, unpipeInfo);
    return this;
  } // slow case. multiple pipe destinations.


  if (!dest) {
    // remove all.
    var dests = state.pipes;
    var len = state.pipesCount;
    state.pipes = null;
    state.pipesCount = 0;
    state.flowing = false;

    for (var i = 0; i < len; i++) {
      dests[i].emit('unpipe', this, {
        hasUnpiped: false
      });
    }

    return this;
  } // try to find the right one.


  var index = indexOf(state.pipes, dest);
  if (index === -1) return this;
  state.pipes.splice(index, 1);
  state.pipesCount -= 1;
  if (state.pipesCount === 1) state.pipes = state.pipes[0];
  dest.emit('unpipe', this, unpipeInfo);
  return this;
}; // set up data events if they are asked for
// Ensure readable listeners eventually get something


Readable.prototype.on = function (ev, fn) {
  var res = Stream.prototype.on.call(this, ev, fn);
  var state = this._readableState;

  if (ev === 'data') {
    // update readableListening so that resume() may be a no-op
    // a few lines down. This is needed to support once('readable').
    state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused

    if (state.flowing !== false) this.resume();
  } else if (ev === 'readable') {
    if (!state.endEmitted && !state.readableListening) {
      state.readableListening = state.needReadable = true;
      state.flowing = false;
      state.emittedReadable = false;
      debug('on readable', state.length, state.reading);

      if (state.length) {
        emitReadable(this);
      } else if (!state.reading) {
        process.nextTick(nReadingNextTick, this);
      }
    }
  }

  return res;
};

Readable.prototype.addListener = Readable.prototype.on;

Readable.prototype.removeListener = function (ev, fn) {
  var res = Stream.prototype.removeListener.call(this, ev, fn);

  if (ev === 'readable') {
    // We need to check if there is someone still listening to
    // readable and reset the state. However this needs to happen
    // after readable has been emitted but before I/O (nextTick) to
    // support once('readable', fn) cycles. This means that calling
    // resume within the same tick will have no
    // effect.
    process.nextTick(updateReadableListening, this);
  }

  return res;
};

Readable.prototype.removeAllListeners = function (ev) {
  var res = Stream.prototype.removeAllListeners.apply(this, arguments);

  if (ev === 'readable' || ev === undefined) {
    // We need to check if there is someone still listening to
    // readable and reset the state. However this needs to happen
    // after readable has been emitted but before I/O (nextTick) to
    // support once('readable', fn) cycles. This means that calling
    // resume within the same tick will have no
    // effect.
    process.nextTick(updateReadableListening, this);
  }

  return res;
};

function updateReadableListening(self) {
  var state = self._readableState;
  state.readableListening = self.listenerCount('readable') > 0;

  if (state.resumeScheduled && !state.paused) {
    // flowing needs to be set to true now, otherwise
    // the upcoming resume will not flow.
    state.flowing = true; // crude way to check if we should resume
  } else if (self.listenerCount('data') > 0) {
    self.resume();
  }
}

function nReadingNextTick(self) {
  debug('readable nexttick read 0');
  self.read(0);
} // pause() and resume() are remnants of the legacy readable stream API
// If the user uses them, then switch into old mode.


Readable.prototype.resume = function () {
  var state = this._readableState;

  if (!state.flowing) {
    debug('resume'); // we flow only if there is no one listening
    // for readable, but we still have to call
    // resume()

    state.flowing = !state.readableListening;
    resume(this, state);
  }

  state.paused = false;
  return this;
};

function resume(stream, state) {
  if (!state.resumeScheduled) {
    state.resumeScheduled = true;
    process.nextTick(resume_, stream, state);
  }
}

function resume_(stream, state) {
  debug('resume', state.reading);

  if (!state.reading) {
    stream.read(0);
  }

  state.resumeScheduled = false;
  stream.emit('resume');
  flow(stream);
  if (state.flowing && !state.reading) stream.read(0);
}

Readable.prototype.pause = function () {
  debug('call pause flowing=%j', this._readableState.flowing);

  if (this._readableState.flowing !== false) {
    debug('pause');
    this._readableState.flowing = false;
    this.emit('pause');
  }

  this._readableState.paused = true;
  return this;
};

function flow(stream) {
  var state = stream._readableState;
  debug('flow', state.flowing);

  while (state.flowing && stream.read() !== null) {
    ;
  }
} // wrap an old-style stream as the async data source.
// This is *not* part of the readable stream interface.
// It is an ugly unfortunate mess of history.


Readable.prototype.wrap = function (stream) {
  var _this = this;

  var state = this._readableState;
  var paused = false;
  stream.on('end', function () {
    debug('wrapped end');

    if (state.decoder && !state.ended) {
      var chunk = state.decoder.end();
      if (chunk && chunk.length) _this.push(chunk);
    }

    _this.push(null);
  });
  stream.on('data', function (chunk) {
    debug('wrapped data');
    if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode

    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;

    var ret = _this.push(chunk);

    if (!ret) {
      paused = true;
      stream.pause();
    }
  }); // proxy all the other methods.
  // important when wrapping filters and duplexes.

  for (var i in stream) {
    if (this[i] === undefined && typeof stream[i] === 'function') {
      this[i] = function methodWrap(method) {
        return function methodWrapReturnFunction() {
          return stream[method].apply(stream, arguments);
        };
      }(i);
    }
  } // proxy certain important events.


  for (var n = 0; n < kProxyEvents.length; n++) {
    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
  } // when we try to consume some more bytes, simply unpause the
  // underlying stream.


  this._read = function (n) {
    debug('wrapped _read', n);

    if (paused) {
      paused = false;
      stream.resume();
    }
  };

  return this;
};

if (typeof Symbol === 'function') {
  Readable.prototype[Symbol.asyncIterator] = function () {
    if (createReadableStreamAsyncIterator === undefined) {
      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');
    }

    return createReadableStreamAsyncIterator(this);
  };
}

Object.defineProperty(Readable.prototype, 'readableHighWaterMark', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._readableState.highWaterMark;
  }
});
Object.defineProperty(Readable.prototype, 'readableBuffer', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._readableState && this._readableState.buffer;
  }
});
Object.defineProperty(Readable.prototype, 'readableFlowing', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._readableState.flowing;
  },
  set: function set(state) {
    if (this._readableState) {
      this._readableState.flowing = state;
    }
  }
}); // exposed for testing purposes only.

Readable._fromList = fromList;
Object.defineProperty(Readable.prototype, 'readableLength', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._readableState.length;
  }
}); // Pluck off n bytes from an array of buffers.
// Length is the combined lengths of all the buffers in the list.
// This function is designed to be inlinable, so please take care when making
// changes to the function body.

function fromList(n, state) {
  // nothing buffered
  if (state.length === 0) return null;
  var ret;
  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
    // read it all, truncate the list
    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);
    state.buffer.clear();
  } else {
    // read part of list
    ret = state.buffer.consume(n, state.decoder);
  }
  return ret;
}

function endReadable(stream) {
  var state = stream._readableState;
  debug('endReadable', state.endEmitted);

  if (!state.endEmitted) {
    state.ended = true;
    process.nextTick(endReadableNT, state, stream);
  }
}

function endReadableNT(state, stream) {
  debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.

  if (!state.endEmitted && state.length === 0) {
    state.endEmitted = true;
    stream.readable = false;
    stream.emit('end');

    if (state.autoDestroy) {
      // In case of duplex streams we need a way to detect
      // if the writable side is ready for autoDestroy as well
      var wState = stream._writableState;

      if (!wState || wState.autoDestroy && wState.finished) {
        stream.destroy();
      }
    }
  }
}

if (typeof Symbol === 'function') {
  Readable.from = function (iterable, opts) {
    if (from === undefined) {
      from = require('./internal/streams/from');
    }

    return from(Readable, iterable, opts);
  };
}

function indexOf(xs, x) {
  for (var i = 0, l = xs.length; i < l; i++) {
    if (xs[i] === x) return i;
  }

  return -1;
}// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// a transform stream is a readable/writable stream where you do
// something with the data.  Sometimes it's called a "filter",
// but that's not a great name for it, since that implies a thing where
// some bits pass through, and others are simply ignored.  (That would
// be a valid example of a transform, of course.)
//
// While the output is causally related to the input, it's not a
// necessarily symmetric or synchronous transformation.  For example,
// a zlib stream might take multiple plain-text writes(), and then
// emit a single compressed chunk some time in the future.
//
// Here's how this works:
//
// The Transform stream has all the aspects of the readable and writable
// stream classes.  When you write(chunk), that calls _write(chunk,cb)
// internally, and returns false if there's a lot of pending writes
// buffered up.  When you call read(), that calls _read(n) until
// there's enough pending readable data buffered up.
//
// In a transform stream, the written data is placed in a buffer.  When
// _read(n) is called, it transforms the queued up data, calling the
// buffered _write cb's as it consumes chunks.  If consuming a single
// written chunk would result in multiple output chunks, then the first
// outputted bit calls the readcb, and subsequent chunks just go into
// the read buffer, and will cause it to emit 'readable' if necessary.
//
// This way, back-pressure is actually determined by the reading side,
// since _read has to be called to start processing a new chunk.  However,
// a pathological inflate type of transform can cause excessive buffering
// here.  For example, imagine a stream where every byte of input is
// interpreted as an integer from 0-255, and then results in that many
// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
// 1kb of data being output.  In this case, you could write a very small
// amount of input, and end up with a very large amount of output.  In
// such a pathological inflating mechanism, there'd be no way to tell
// the system to stop doing the transform.  A single 4MB write could
// cause the system to run out of memory.
//
// However, even in such a pathological case, only a single written chunk
// would be consumed, and then the rest would wait (un-transformed) until
// the results of the previous transformed chunk were consumed.
'use strict';

module.exports = Transform;

var _require$codes = require('../errors').codes,
    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
    ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,
    ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;

var Duplex = require('./_stream_duplex');

require('inherits')(Transform, Duplex);

function afterTransform(er, data) {
  var ts = this._transformState;
  ts.transforming = false;
  var cb = ts.writecb;

  if (cb === null) {
    return this.emit('error', new ERR_MULTIPLE_CALLBACK());
  }

  ts.writechunk = null;
  ts.writecb = null;
  if (data != null) // single equals check for both `null` and `undefined`
    this.push(data);
  cb(er);
  var rs = this._readableState;
  rs.reading = false;

  if (rs.needReadable || rs.length < rs.highWaterMark) {
    this._read(rs.highWaterMark);
  }
}

function Transform(options) {
  if (!(this instanceof Transform)) return new Transform(options);
  Duplex.call(this, options);
  this._transformState = {
    afterTransform: afterTransform.bind(this),
    needTransform: false,
    transforming: false,
    writecb: null,
    writechunk: null,
    writeencoding: null
  }; // start out asking for a readable event once data is transformed.

  this._readableState.needReadable = true; // we have implemented the _read method, and done the other things
  // that Readable wants before the first _read call, so unset the
  // sync guard flag.

  this._readableState.sync = false;

  if (options) {
    if (typeof options.transform === 'function') this._transform = options.transform;
    if (typeof options.flush === 'function') this._flush = options.flush;
  } // When the writable side finishes, then flush out anything remaining.


  this.on('prefinish', prefinish);
}

function prefinish() {
  var _this = this;

  if (typeof this._flush === 'function' && !this._readableState.destroyed) {
    this._flush(function (er, data) {
      done(_this, er, data);
    });
  } else {
    done(this, null, null);
  }
}

Transform.prototype.push = function (chunk, encoding) {
  this._transformState.needTransform = false;
  return Duplex.prototype.push.call(this, chunk, encoding);
}; // This is the part where you do stuff!
// override this function in implementation classes.
// 'chunk' is an input chunk.
//
// Call `push(newChunk)` to pass along transformed output
// to the readable side.  You may call 'push' zero or more times.
//
// Call `cb(err)` when you are done with this chunk.  If you pass
// an error, then that'll put the hurt on the whole operation.  If you
// never call cb(), then you'll never get another chunk.


Transform.prototype._transform = function (chunk, encoding, cb) {
  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));
};

Transform.prototype._write = function (chunk, encoding, cb) {
  var ts = this._transformState;
  ts.writecb = cb;
  ts.writechunk = chunk;
  ts.writeencoding = encoding;

  if (!ts.transforming) {
    var rs = this._readableState;
    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
  }
}; // Doesn't matter what the args are here.
// _transform does all the work.
// That we got here means that the readable side wants more data.


Transform.prototype._read = function (n) {
  var ts = this._transformState;

  if (ts.writechunk !== null && !ts.transforming) {
    ts.transforming = true;

    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
  } else {
    // mark that we need a transform, so that any data that comes in
    // will get processed, now that we've asked for it.
    ts.needTransform = true;
  }
};

Transform.prototype._destroy = function (err, cb) {
  Duplex.prototype._destroy.call(this, err, function (err2) {
    cb(err2);
  });
};

function done(stream, er, data) {
  if (er) return stream.emit('error', er);
  if (data != null) // single equals check for both `null` and `undefined`
    stream.push(data); // TODO(BridgeAR): Write a test for these two error cases
  // if there's nothing in the write buffer, then that means
  // that nothing more will ever be provided

  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();
  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();
  return stream.push(null);
}// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// A bit simpler than readable streams.
// Implement an async ._write(chunk, encoding, cb), and it'll handle all
// the drain event emission and buffering.
'use strict';

module.exports = Writable;
/* <replacement> */

function WriteReq(chunk, encoding, cb) {
  this.chunk = chunk;
  this.encoding = encoding;
  this.callback = cb;
  this.next = null;
} // It seems a linked list but it is not
// there will be only 2 of these for each stream


function CorkedRequest(state) {
  var _this = this;

  this.next = null;
  this.entry = null;

  this.finish = function () {
    onCorkedFinish(_this, state);
  };
}
/* </replacement> */

/*<replacement>*/


var Duplex;
/*</replacement>*/

Writable.WritableState = WritableState;
/*<replacement>*/

var internalUtil = {
  deprecate: require('util-deprecate')
};
/*</replacement>*/

/*<replacement>*/

var Stream = require('./internal/streams/stream');
/*</replacement>*/


var Buffer = require('buffer').Buffer;

var OurUint8Array = global.Uint8Array || function () {};

function _uint8ArrayToBuffer(chunk) {
  return Buffer.from(chunk);
}

function _isUint8Array(obj) {
  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
}

var destroyImpl = require('./internal/streams/destroy');

var _require = require('./internal/streams/state'),
    getHighWaterMark = _require.getHighWaterMark;

var _require$codes = require('../errors').codes,
    ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,
    ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,
    ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,
    ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,
    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,
    ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,
    ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,
    ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;

var errorOrDestroy = destroyImpl.errorOrDestroy;

require('inherits')(Writable, Stream);

function nop() {}

function WritableState(options, stream, isDuplex) {
  Duplex = Duplex || require('./_stream_duplex');
  options = options || {}; // Duplex streams are both readable and writable, but share
  // the same options object.
  // However, some cases require setting options to different
  // values for the readable and the writable sides of the duplex stream,
  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.

  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream
  // contains buffers or objects.

  this.objectMode = !!options.objectMode;
  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false
  // Note: 0 is a valid value, means that we always return false if
  // the entire buffer is not flushed immediately on write()

  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called

  this.finalCalled = false; // drain event flag.

  this.needDrain = false; // at the start of calling end()

  this.ending = false; // when end() has been called, and returned

  this.ended = false; // when 'finish' is emitted

  this.finished = false; // has it been destroyed

  this.destroyed = false; // should we decode strings into buffers before passing to _write?
  // this is here so that some node-core streams can optimize string
  // handling at a lower level.

  var noDecode = options.decodeStrings === false;
  this.decodeStrings = !noDecode; // Crypto is kind of old and crusty.  Historically, its default string
  // encoding is 'binary' so we have to make this configurable.
  // Everything else in the universe uses 'utf8', though.

  this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement
  // of how much we're waiting to get pushed to some underlying
  // socket or file.

  this.length = 0; // a flag to see when we're in the middle of a write.

  this.writing = false; // when true all writes will be buffered until .uncork() call

  this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,
  // or on a later tick.  We set this to true at first, because any
  // actions that shouldn't happen until "later" should generally also
  // not happen before the first write call.

  this.sync = true; // a flag to know if we're processing previously buffered items, which
  // may call the _write() callback in the same tick, so that we don't
  // end up in an overlapped onwrite situation.

  this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)

  this.onwrite = function (er) {
    onwrite(stream, er);
  }; // the callback that the user supplies to write(chunk,encoding,cb)


  this.writecb = null; // the amount that is being written when _write is called.

  this.writelen = 0;
  this.bufferedRequest = null;
  this.lastBufferedRequest = null; // number of pending user-supplied write callbacks
  // this must be 0 before 'finish' can be emitted

  this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs
  // This is relevant for synchronous Transform streams

  this.prefinished = false; // True if the error was already emitted and should not be thrown again

  this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.

  this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')

  this.autoDestroy = !!options.autoDestroy; // count buffered requests

  this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always
  // one allocated and free to use, and we maintain at most two

  this.corkedRequestsFree = new CorkedRequest(this);
}

WritableState.prototype.getBuffer = function getBuffer() {
  var current = this.bufferedRequest;
  var out = [];

  while (current) {
    out.push(current);
    current = current.next;
  }

  return out;
};

(function () {
  try {
    Object.defineProperty(WritableState.prototype, 'buffer', {
      get: internalUtil.deprecate(function writableStateBufferGetter() {
        return this.getBuffer();
      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
    });
  } catch (_) {}
})(); // Test _writableState for inheritance to account for Duplex streams,
// whose prototype chain only points to Readable.


var realHasInstance;

if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
  realHasInstance = Function.prototype[Symbol.hasInstance];
  Object.defineProperty(Writable, Symbol.hasInstance, {
    value: function value(object) {
      if (realHasInstance.call(this, object)) return true;
      if (this !== Writable) return false;
      return object && object._writableState instanceof WritableState;
    }
  });
} else {
  realHasInstance = function realHasInstance(object) {
    return object instanceof this;
  };
}

function Writable(options) {
  Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.
  // `realHasInstance` is necessary because using plain `instanceof`
  // would return false, as no `_writableState` property is attached.
  // Trying to use the custom `instanceof` for Writable here will also break the
  // Node.js LazyTransform implementation, which has a non-trivial getter for
  // `_writableState` that would lead to infinite recursion.
  // Checking for a Stream.Duplex instance is faster here instead of inside
  // the WritableState constructor, at least with V8 6.5

  var isDuplex = this instanceof Duplex;
  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);
  this._writableState = new WritableState(options, this, isDuplex); // legacy.

  this.writable = true;

  if (options) {
    if (typeof options.write === 'function') this._write = options.write;
    if (typeof options.writev === 'function') this._writev = options.writev;
    if (typeof options.destroy === 'function') this._destroy = options.destroy;
    if (typeof options.final === 'function') this._final = options.final;
  }

  Stream.call(this);
} // Otherwise people can pipe Writable streams, which is just wrong.


Writable.prototype.pipe = function () {
  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());
};

function writeAfterEnd(stream, cb) {
  var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb

  errorOrDestroy(stream, er);
  process.nextTick(cb, er);
} // Checks that a user-supplied chunk is valid, especially for the particular
// mode the stream is in. Currently this means that `null` is never accepted
// and undefined/non-string values are only allowed in object mode.


function validChunk(stream, state, chunk, cb) {
  var er;

  if (chunk === null) {
    er = new ERR_STREAM_NULL_VALUES();
  } else if (typeof chunk !== 'string' && !state.objectMode) {
    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);
  }

  if (er) {
    errorOrDestroy(stream, er);
    process.nextTick(cb, er);
    return false;
  }

  return true;
}

Writable.prototype.write = function (chunk, encoding, cb) {
  var state = this._writableState;
  var ret = false;

  var isBuf = !state.objectMode && _isUint8Array(chunk);

  if (isBuf && !Buffer.isBuffer(chunk)) {
    chunk = _uint8ArrayToBuffer(chunk);
  }

  if (typeof encoding === 'function') {
    cb = encoding;
    encoding = null;
  }

  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
  if (typeof cb !== 'function') cb = nop;
  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
    state.pendingcb++;
    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
  }
  return ret;
};

Writable.prototype.cork = function () {
  this._writableState.corked++;
};

Writable.prototype.uncork = function () {
  var state = this._writableState;

  if (state.corked) {
    state.corked--;
    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
  }
};

Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
  // node::ParseEncoding() requires lower case.
  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);
  this._writableState.defaultEncoding = encoding;
  return this;
};

Object.defineProperty(Writable.prototype, 'writableBuffer', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState && this._writableState.getBuffer();
  }
});

function decodeChunk(state, chunk, encoding) {
  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
    chunk = Buffer.from(chunk, encoding);
  }

  return chunk;
}

Object.defineProperty(Writable.prototype, 'writableHighWaterMark', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState.highWaterMark;
  }
}); // if we're already writing something, then just put this
// in the queue, and wait our turn.  Otherwise, call _write
// If we return false, then we need a drain event, so set that flag.

function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
  if (!isBuf) {
    var newChunk = decodeChunk(state, chunk, encoding);

    if (chunk !== newChunk) {
      isBuf = true;
      encoding = 'buffer';
      chunk = newChunk;
    }
  }

  var len = state.objectMode ? 1 : chunk.length;
  state.length += len;
  var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.

  if (!ret) state.needDrain = true;

  if (state.writing || state.corked) {
    var last = state.lastBufferedRequest;
    state.lastBufferedRequest = {
      chunk: chunk,
      encoding: encoding,
      isBuf: isBuf,
      callback: cb,
      next: null
    };

    if (last) {
      last.next = state.lastBufferedRequest;
    } else {
      state.bufferedRequest = state.lastBufferedRequest;
    }

    state.bufferedRequestCount += 1;
  } else {
    doWrite(stream, state, false, len, chunk, encoding, cb);
  }

  return ret;
}

function doWrite(stream, state, writev, len, chunk, encoding, cb) {
  state.writelen = len;
  state.writecb = cb;
  state.writing = true;
  state.sync = true;
  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
  state.sync = false;
}

function onwriteError(stream, state, sync, er, cb) {
  --state.pendingcb;

  if (sync) {
    // defer the callback if we are being called synchronously
    // to avoid piling up things on the stack
    process.nextTick(cb, er); // this can emit finish, and it will always happen
    // after error

    process.nextTick(finishMaybe, stream, state);
    stream._writableState.errorEmitted = true;
    errorOrDestroy(stream, er);
  } else {
    // the caller expect this to happen before if
    // it is async
    cb(er);
    stream._writableState.errorEmitted = true;
    errorOrDestroy(stream, er); // this can emit finish, but finish must
    // always follow error

    finishMaybe(stream, state);
  }
}

function onwriteStateUpdate(state) {
  state.writing = false;
  state.writecb = null;
  state.length -= state.writelen;
  state.writelen = 0;
}

function onwrite(stream, er) {
  var state = stream._writableState;
  var sync = state.sync;
  var cb = state.writecb;
  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();
  onwriteStateUpdate(state);
  if (er) onwriteError(stream, state, sync, er, cb);else {
    // Check if we're actually ready to finish, but don't emit yet
    var finished = needFinish(state) || stream.destroyed;

    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
      clearBuffer(stream, state);
    }

    if (sync) {
      process.nextTick(afterWrite, stream, state, finished, cb);
    } else {
      afterWrite(stream, state, finished, cb);
    }
  }
}

function afterWrite(stream, state, finished, cb) {
  if (!finished) onwriteDrain(stream, state);
  state.pendingcb--;
  cb();
  finishMaybe(stream, state);
} // Must force callback to be called on nextTick, so that we don't
// emit 'drain' before the write() consumer gets the 'false' return
// value, and has a chance to attach a 'drain' listener.


function onwriteDrain(stream, state) {
  if (state.length === 0 && state.needDrain) {
    state.needDrain = false;
    stream.emit('drain');
  }
} // if there's something in the buffer waiting, then process it


function clearBuffer(stream, state) {
  state.bufferProcessing = true;
  var entry = state.bufferedRequest;

  if (stream._writev && entry && entry.next) {
    // Fast case, write everything using _writev()
    var l = state.bufferedRequestCount;
    var buffer = new Array(l);
    var holder = state.corkedRequestsFree;
    holder.entry = entry;
    var count = 0;
    var allBuffers = true;

    while (entry) {
      buffer[count] = entry;
      if (!entry.isBuf) allBuffers = false;
      entry = entry.next;
      count += 1;
    }

    buffer.allBuffers = allBuffers;
    doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time
    // as the hot path ends with doWrite

    state.pendingcb++;
    state.lastBufferedRequest = null;

    if (holder.next) {
      state.corkedRequestsFree = holder.next;
      holder.next = null;
    } else {
      state.corkedRequestsFree = new CorkedRequest(state);
    }

    state.bufferedRequestCount = 0;
  } else {
    // Slow case, write chunks one-by-one
    while (entry) {
      var chunk = entry.chunk;
      var encoding = entry.encoding;
      var cb = entry.callback;
      var len = state.objectMode ? 1 : chunk.length;
      doWrite(stream, state, false, len, chunk, encoding, cb);
      entry = entry.next;
      state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then
      // it means that we need to wait until it does.
      // also, that means that the chunk and cb are currently
      // being processed, so move the buffer counter past them.

      if (state.writing) {
        break;
      }
    }

    if (entry === null) state.lastBufferedRequest = null;
  }

  state.bufferedRequest = entry;
  state.bufferProcessing = false;
}

Writable.prototype._write = function (chunk, encoding, cb) {
  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));
};

Writable.prototype._writev = null;

Writable.prototype.end = function (chunk, encoding, cb) {
  var state = this._writableState;

  if (typeof chunk === 'function') {
    cb = chunk;
    chunk = null;
    encoding = null;
  } else if (typeof encoding === 'function') {
    cb = encoding;
    encoding = null;
  }

  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks

  if (state.corked) {
    state.corked = 1;
    this.uncork();
  } // ignore unnecessary end() calls.


  if (!state.ending) endWritable(this, state, cb);
  return this;
};

Object.defineProperty(Writable.prototype, 'writableLength', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    return this._writableState.length;
  }
});

function needFinish(state) {
  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
}

function callFinal(stream, state) {
  stream._final(function (err) {
    state.pendingcb--;

    if (err) {
      errorOrDestroy(stream, err);
    }

    state.prefinished = true;
    stream.emit('prefinish');
    finishMaybe(stream, state);
  });
}

function prefinish(stream, state) {
  if (!state.prefinished && !state.finalCalled) {
    if (typeof stream._final === 'function' && !state.destroyed) {
      state.pendingcb++;
      state.finalCalled = true;
      process.nextTick(callFinal, stream, state);
    } else {
      state.prefinished = true;
      stream.emit('prefinish');
    }
  }
}

function finishMaybe(stream, state) {
  var need = needFinish(state);

  if (need) {
    prefinish(stream, state);

    if (state.pendingcb === 0) {
      state.finished = true;
      stream.emit('finish');

      if (state.autoDestroy) {
        // In case of duplex streams we need a way to detect
        // if the readable side is ready for autoDestroy as well
        var rState = stream._readableState;

        if (!rState || rState.autoDestroy && rState.endEmitted) {
          stream.destroy();
        }
      }
    }
  }

  return need;
}

function endWritable(stream, state, cb) {
  state.ending = true;
  finishMaybe(stream, state);

  if (cb) {
    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);
  }

  state.ended = true;
  stream.writable = false;
}

function onCorkedFinish(corkReq, state, err) {
  var entry = corkReq.entry;
  corkReq.entry = null;

  while (entry) {
    var cb = entry.callback;
    state.pendingcb--;
    cb(err);
    entry = entry.next;
  } // reuse the free corkReq.


  state.corkedRequestsFree.next = corkReq;
}

Object.defineProperty(Writable.prototype, 'destroyed', {
  // making it explicit this property is not enumerable
  // because otherwise some prototype manipulation in
  // userland will fail
  enumerable: false,
  get: function get() {
    if (this._writableState === undefined) {
      return false;
    }

    return this._writableState.destroyed;
  },
  set: function set(value) {
    // we ignore the value if the stream
    // has not been initialized yet
    if (!this._writableState) {
      return;
    } // backward compatibility, the user is explicitly
    // managing destroyed


    this._writableState.destroyed = value;
  }
});
Writable.prototype.destroy = destroyImpl.destroy;
Writable.prototype._undestroy = destroyImpl.undestroy;

Writable.prototype._destroy = function (err, cb) {
  cb(err);
};'use strict';

var _Object$setPrototypeO;

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

var finished = require('./end-of-stream');

var kLastResolve = Symbol('lastResolve');
var kLastReject = Symbol('lastReject');
var kError = Symbol('error');
var kEnded = Symbol('ended');
var kLastPromise = Symbol('lastPromise');
var kHandlePromise = Symbol('handlePromise');
var kStream = Symbol('stream');

function createIterResult(value, done) {
  return {
    value: value,
    done: done
  };
}

function readAndResolve(iter) {
  var resolve = iter[kLastResolve];

  if (resolve !== null) {
    var data = iter[kStream].read(); // we defer if data is null
    // we can be expecting either 'end' or
    // 'error'

    if (data !== null) {
      iter[kLastPromise] = null;
      iter[kLastResolve] = null;
      iter[kLastReject] = null;
      resolve(createIterResult(data, false));
    }
  }
}

function onReadable(iter) {
  // we wait for the next tick, because it might
  // emit an error with process.nextTick
  process.nextTick(readAndResolve, iter);
}

function wrapForNext(lastPromise, iter) {
  return function (resolve, reject) {
    lastPromise.then(function () {
      if (iter[kEnded]) {
        resolve(createIterResult(undefined, true));
        return;
      }

      iter[kHandlePromise](resolve, reject);
    }, reject);
  };
}

var AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
  get stream() {
    return this[kStream];
  },

  next: function next() {
    var _this = this;

    // if we have detected an error in the meanwhile
    // reject straight away
    var error = this[kError];

    if (error !== null) {
      return Promise.reject(error);
    }

    if (this[kEnded]) {
      return Promise.resolve(createIterResult(undefined, true));
    }

    if (this[kStream].destroyed) {
      // We need to defer via nextTick because if .destroy(err) is
      // called, the error will be emitted via nextTick, and
      // we cannot guarantee that there is no error lingering around
      // waiting to be emitted.
      return new Promise(function (resolve, reject) {
        process.nextTick(function () {
          if (_this[kError]) {
            reject(_this[kError]);
          } else {
            resolve(createIterResult(undefined, true));
          }
        });
      });
    } // if we have multiple next() calls
    // we will wait for the previous Promise to finish
    // this logic is optimized to support for await loops,
    // where next() is only called once at a time


    var lastPromise = this[kLastPromise];
    var promise;

    if (lastPromise) {
      promise = new Promise(wrapForNext(lastPromise, this));
    } else {
      // fast path needed to support multiple this.push()
      // without triggering the next() queue
      var data = this[kStream].read();

      if (data !== null) {
        return Promise.resolve(createIterResult(data, false));
      }

      promise = new Promise(this[kHandlePromise]);
    }

    this[kLastPromise] = promise;
    return promise;
  }
}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {
  return this;
}), _defineProperty(_Object$setPrototypeO, "return", function _return() {
  var _this2 = this;

  // destroy(err, cb) is a private API
  // we can guarantee we have that here, because we control the
  // Readable class this is attached to
  return new Promise(function (resolve, reject) {
    _this2[kStream].destroy(null, function (err) {
      if (err) {
        reject(err);
        return;
      }

      resolve(createIterResult(undefined, true));
    });
  });
}), _Object$setPrototypeO), AsyncIteratorPrototype);

var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {
  var _Object$create;

  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
    value: stream,
    writable: true
  }), _defineProperty(_Object$create, kLastResolve, {
    value: null,
    writable: true
  }), _defineProperty(_Object$create, kLastReject, {
    value: null,
    writable: true
  }), _defineProperty(_Object$create, kError, {
    value: null,
    writable: true
  }), _defineProperty(_Object$create, kEnded, {
    value: stream._readableState.endEmitted,
    writable: true
  }), _defineProperty(_Object$create, kHandlePromise, {
    value: function value(resolve, reject) {
      var data = iterator[kStream].read();

      if (data) {
        iterator[kLastPromise] = null;
        iterator[kLastResolve] = null;
        iterator[kLastReject] = null;
        resolve(createIterResult(data, false));
      } else {
        iterator[kLastResolve] = resolve;
        iterator[kLastReject] = reject;
      }
    },
    writable: true
  }), _Object$create));
  iterator[kLastPromise] = null;
  finished(stream, function (err) {
    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
      var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise
      // returned by next() and store the error

      if (reject !== null) {
        iterator[kLastPromise] = null;
        iterator[kLastResolve] = null;
        iterator[kLastReject] = null;
        reject(err);
      }

      iterator[kError] = err;
      return;
    }

    var resolve = iterator[kLastResolve];

    if (resolve !== null) {
      iterator[kLastPromise] = null;
      iterator[kLastResolve] = null;
      iterator[kLastReject] = null;
      resolve(createIterResult(undefined, true));
    }

    iterator[kEnded] = true;
  });
  stream.on('readable', onReadable.bind(null, iterator));
  return iterator;
};

module.exports = createReadableStreamAsyncIterator;'use strict';

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

var _require = require('buffer'),
    Buffer = _require.Buffer;

var _require2 = require('util'),
    inspect = _require2.inspect;

var custom = inspect && inspect.custom || 'inspect';

function copyBuffer(src, target, offset) {
  Buffer.prototype.copy.call(src, target, offset);
}

module.exports =
/*#__PURE__*/
function () {
  function BufferList() {
    _classCallCheck(this, BufferList);

    this.head = null;
    this.tail = null;
    this.length = 0;
  }

  _createClass(BufferList, [{
    key: "push",
    value: function push(v) {
      var entry = {
        data: v,
        next: null
      };
      if (this.length > 0) this.tail.next = entry;else this.head = entry;
      this.tail = entry;
      ++this.length;
    }
  }, {
    key: "unshift",
    value: function unshift(v) {
      var entry = {
        data: v,
        next: this.head
      };
      if (this.length === 0) this.tail = entry;
      this.head = entry;
      ++this.length;
    }
  }, {
    key: "shift",
    value: function shift() {
      if (this.length === 0) return;
      var ret = this.head.data;
      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
      --this.length;
      return ret;
    }
  }, {
    key: "clear",
    value: function clear() {
      this.head = this.tail = null;
      this.length = 0;
    }
  }, {
    key: "join",
    value: function join(s) {
      if (this.length === 0) return '';
      var p = this.head;
      var ret = '' + p.data;

      while (p = p.next) {
        ret += s + p.data;
      }

      return ret;
    }
  }, {
    key: "concat",
    value: function concat(n) {
      if (this.length === 0) return Buffer.alloc(0);
      var ret = Buffer.allocUnsafe(n >>> 0);
      var p = this.head;
      var i = 0;

      while (p) {
        copyBuffer(p.data, ret, i);
        i += p.data.length;
        p = p.next;
      }

      return ret;
    } // Consumes a specified amount of bytes or characters from the buffered data.

  }, {
    key: "consume",
    value: function consume(n, hasStrings) {
      var ret;

      if (n < this.head.data.length) {
        // `slice` is the same for buffers and strings.
        ret = this.head.data.slice(0, n);
        this.head.data = this.head.data.slice(n);
      } else if (n === this.head.data.length) {
        // First chunk is a perfect match.
        ret = this.shift();
      } else {
        // Result spans more than one buffer.
        ret = hasStrings ? this._getString(n) : this._getBuffer(n);
      }

      return ret;
    }
  }, {
    key: "first",
    value: function first() {
      return this.head.data;
    } // Consumes a specified amount of characters from the buffered data.

  }, {
    key: "_getString",
    value: function _getString(n) {
      var p = this.head;
      var c = 1;
      var ret = p.data;
      n -= ret.length;

      while (p = p.next) {
        var str = p.data;
        var nb = n > str.length ? str.length : n;
        if (nb === str.length) ret += str;else ret += str.slice(0, n);
        n -= nb;

        if (n === 0) {
          if (nb === str.length) {
            ++c;
            if (p.next) this.head = p.next;else this.head = this.tail = null;
          } else {
            this.head = p;
            p.data = str.slice(nb);
          }

          break;
        }

        ++c;
      }

      this.length -= c;
      return ret;
    } // Consumes a specified amount of bytes from the buffered data.

  }, {
    key: "_getBuffer",
    value: function _getBuffer(n) {
      var ret = Buffer.allocUnsafe(n);
      var p = this.head;
      var c = 1;
      p.data.copy(ret);
      n -= p.data.length;

      while (p = p.next) {
        var buf = p.data;
        var nb = n > buf.length ? buf.length : n;
        buf.copy(ret, ret.length - n, 0, nb);
        n -= nb;

        if (n === 0) {
          if (nb === buf.length) {
            ++c;
            if (p.next) this.head = p.next;else this.head = this.tail = null;
          } else {
            this.head = p;
            p.data = buf.slice(nb);
          }

          break;
        }

        ++c;
      }

      this.length -= c;
      return ret;
    } // Make sure the linked list only shows the minimal necessary information.

  }, {
    key: custom,
    value: function value(_, options) {
      return inspect(this, _objectSpread({}, options, {
        // Only inspect one level.
        depth: 0,
        // It should not recurse.
        customInspect: false
      }));
    }
  }]);

  return BufferList;
}();'use strict'; // undocumented cb() API, needed for core, not for public API

function destroy(err, cb) {
  var _this = this;

  var readableDestroyed = this._readableState && this._readableState.destroyed;
  var writableDestroyed = this._writableState && this._writableState.destroyed;

  if (readableDestroyed || writableDestroyed) {
    if (cb) {
      cb(err);
    } else if (err) {
      if (!this._writableState) {
        process.nextTick(emitErrorNT, this, err);
      } else if (!this._writableState.errorEmitted) {
        this._writableState.errorEmitted = true;
        process.nextTick(emitErrorNT, this, err);
      }
    }

    return this;
  } // we set destroyed to true before firing error callbacks in order
  // to make it re-entrance safe in case destroy() is called within callbacks


  if (this._readableState) {
    this._readableState.destroyed = true;
  } // if this is a duplex stream mark the writable part as destroyed as well


  if (this._writableState) {
    this._writableState.destroyed = true;
  }

  this._destroy(err || null, function (err) {
    if (!cb && err) {
      if (!_this._writableState) {
        process.nextTick(emitErrorAndCloseNT, _this, err);
      } else if (!_this._writableState.errorEmitted) {
        _this._writableState.errorEmitted = true;
        process.nextTick(emitErrorAndCloseNT, _this, err);
      } else {
        process.nextTick(emitCloseNT, _this);
      }
    } else if (cb) {
      process.nextTick(emitCloseNT, _this);
      cb(err);
    } else {
      process.nextTick(emitCloseNT, _this);
    }
  });

  return this;
}

function emitErrorAndCloseNT(self, err) {
  emitErrorNT(self, err);
  emitCloseNT(self);
}

function emitCloseNT(self) {
  if (self._writableState && !self._writableState.emitClose) return;
  if (self._readableState && !self._readableState.emitClose) return;
  self.emit('close');
}

function undestroy() {
  if (this._readableState) {
    this._readableState.destroyed = false;
    this._readableState.reading = false;
    this._readableState.ended = false;
    this._readableState.endEmitted = false;
  }

  if (this._writableState) {
    this._writableState.destroyed = false;
    this._writableState.ended = false;
    this._writableState.ending = false;
    this._writableState.finalCalled = false;
    this._writableState.prefinished = false;
    this._writableState.finished = false;
    this._writableState.errorEmitted = false;
  }
}

function emitErrorNT(self, err) {
  self.emit('error', err);
}

function errorOrDestroy(stream, err) {
  // We have tests that rely on errors being emitted
  // in the same tick, so changing this is semver major.
  // For now when you opt-in to autoDestroy we allow
  // the error to be emitted nextTick. In a future
  // semver major update we should change the default to this.
  var rState = stream._readableState;
  var wState = stream._writableState;
  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);
}

module.exports = {
  destroy: destroy,
  undestroy: undestroy,
  errorOrDestroy: errorOrDestroy
};// Ported from https://github.com/mafintosh/end-of-stream with
// permission from the author, Mathias Buus (@mafintosh).
'use strict';

var ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;

function once(callback) {
  var called = false;
  return function () {
    if (called) return;
    called = true;

    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    callback.apply(this, args);
  };
}

function noop() {}

function isRequest(stream) {
  return stream.setHeader && typeof stream.abort === 'function';
}

function eos(stream, opts, callback) {
  if (typeof opts === 'function') return eos(stream, null, opts);
  if (!opts) opts = {};
  callback = once(callback || noop);
  var readable = opts.readable || opts.readable !== false && stream.readable;
  var writable = opts.writable || opts.writable !== false && stream.writable;

  var onlegacyfinish = function onlegacyfinish() {
    if (!stream.writable) onfinish();
  };

  var writableEnded = stream._writableState && stream._writableState.finished;

  var onfinish = function onfinish() {
    writable = false;
    writableEnded = true;
    if (!readable) callback.call(stream);
  };

  var readableEnded = stream._readableState && stream._readableState.endEmitted;

  var onend = function onend() {
    readable = false;
    readableEnded = true;
    if (!writable) callback.call(stream);
  };

  var onerror = function onerror(err) {
    callback.call(stream, err);
  };

  var onclose = function onclose() {
    var err;

    if (readable && !readableEnded) {
      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
      return callback.call(stream, err);
    }

    if (writable && !writableEnded) {
      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();
      return callback.call(stream, err);
    }
  };

  var onrequest = function onrequest() {
    stream.req.on('finish', onfinish);
  };

  if (isRequest(stream)) {
    stream.on('complete', onfinish);
    stream.on('abort', onclose);
    if (stream.req) onrequest();else stream.on('request', onrequest);
  } else if (writable && !stream._writableState) {
    // legacy streams
    stream.on('end', onlegacyfinish);
    stream.on('close', onlegacyfinish);
  }

  stream.on('end', onend);
  stream.on('finish', onfinish);
  if (opts.error !== false) stream.on('error', onerror);
  stream.on('close', onclose);
  return function () {
    stream.removeListener('complete', onfinish);
    stream.removeListener('abort', onclose);
    stream.removeListener('request', onrequest);
    if (stream.req) stream.req.removeListener('finish', onfinish);
    stream.removeListener('end', onlegacyfinish);
    stream.removeListener('close', onlegacyfinish);
    stream.removeListener('finish', onfinish);
    stream.removeListener('end', onend);
    stream.removeListener('error', onerror);
    stream.removeListener('close', onclose);
  };
}

module.exports = eos;module.exports = function () {
  throw new Error('Readable.from is not available in the browser')
};
'use strict';

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }

function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

var ERR_INVALID_ARG_TYPE = require('../../../errors').codes.ERR_INVALID_ARG_TYPE;

function from(Readable, iterable, opts) {
  var iterator;

  if (iterable && typeof iterable.next === 'function') {
    iterator = iterable;
  } else if (iterable && iterable[Symbol.asyncIterator]) iterator = iterable[Symbol.asyncIterator]();else if (iterable && iterable[Symbol.iterator]) iterator = iterable[Symbol.iterator]();else throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);

  var readable = new Readable(_objectSpread({
    objectMode: true
  }, opts)); // Reading boolean to protect against _read
  // being called before last iteration completion.

  var reading = false;

  readable._read = function () {
    if (!reading) {
      reading = true;
      next();
    }
  };

  function next() {
    return _next2.apply(this, arguments);
  }

  function _next2() {
    _next2 = _asyncToGenerator(function* () {
      try {
        var _ref = yield iterator.next(),
            value = _ref.value,
            done = _ref.done;

        if (done) {
          readable.push(null);
        } else if (readable.push((yield value))) {
          next();
        } else {
          reading = false;
        }
      } catch (err) {
        readable.destroy(err);
      }
    });
    return _next2.apply(this, arguments);
  }

  return readable;
}

module.exports = from;// Ported from https://github.com/mafintosh/pump with
// permission from the author, Mathias Buus (@mafintosh).
'use strict';

var eos;

function once(callback) {
  var called = false;
  return function () {
    if (called) return;
    called = true;
    callback.apply(void 0, arguments);
  };
}

var _require$codes = require('../../../errors').codes,
    ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,
    ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;

function noop(err) {
  // Rethrow the error if it exists to avoid swallowing it
  if (err) throw err;
}

function isRequest(stream) {
  return stream.setHeader && typeof stream.abort === 'function';
}

function destroyer(stream, reading, writing, callback) {
  callback = once(callback);
  var closed = false;
  stream.on('close', function () {
    closed = true;
  });
  if (eos === undefined) eos = require('./end-of-stream');
  eos(stream, {
    readable: reading,
    writable: writing
  }, function (err) {
    if (err) return callback(err);
    closed = true;
    callback();
  });
  var destroyed = false;
  return function (err) {
    if (closed) return;
    if (destroyed) return;
    destroyed = true; // request.destroy just do .end - .abort is what we want

    if (isRequest(stream)) return stream.abort();
    if (typeof stream.destroy === 'function') return stream.destroy();
    callback(err || new ERR_STREAM_DESTROYED('pipe'));
  };
}

function call(fn) {
  fn();
}

function pipe(from, to) {
  return from.pipe(to);
}

function popCallback(streams) {
  if (!streams.length) return noop;
  if (typeof streams[streams.length - 1] !== 'function') return noop;
  return streams.pop();
}

function pipeline() {
  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {
    streams[_key] = arguments[_key];
  }

  var callback = popCallback(streams);
  if (Array.isArray(streams[0])) streams = streams[0];

  if (streams.length < 2) {
    throw new ERR_MISSING_ARGS('streams');
  }

  var error;
  var destroys = streams.map(function (stream, i) {
    var reading = i < streams.length - 1;
    var writing = i > 0;
    return destroyer(stream, reading, writing, function (err) {
      if (!error) error = err;
      if (err) destroys.forEach(call);
      if (reading) return;
      destroys.forEach(call);
      callback(error);
    });
  });
  return streams.reduce(pipe);
}

module.exports = pipeline;'use strict';

var ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;

function highWaterMarkFrom(options, isDuplex, duplexKey) {
  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;
}

function getHighWaterMark(state, options, duplexKey, isDuplex) {
  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);

  if (hwm != null) {
    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {
      var name = isDuplex ? duplexKey : 'highWaterMark';
      throw new ERR_INVALID_OPT_VALUE(name, hwm);
    }

    return Math.floor(hwm);
  } // Default value


  return state.objectMode ? 16 : 16 * 1024;
}

module.exports = {
  getHighWaterMark: getHighWaterMark
};module.exports = require('events').EventEmitter;
module.exports = require('stream');
Node.js is licensed for use as follows:

"""
Copyright Node.js contributors. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
"""

This license applies to parts of Node.js originating from the
https://github.com/joyent/node repository:

"""
Copyright Joyent, Inc. and other Node contributors. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
"""
{
  "name": "readable-stream",
  "version": "3.6.0",
  "description": "Streams3, a user-land copy of the stream library from Node.js",
  "main": "readable.js",
  "engines": {
    "node": ">= 6"
  },
  "dependencies": {
    "inherits": "^2.0.3",
    "string_decoder": "^1.1.1",
    "util-deprecate": "^1.0.1"
  },
  "devDependencies": {
    "@babel/cli": "^7.2.0",
    "@babel/core": "^7.2.0",
    "@babel/polyfill": "^7.0.0",
    "@babel/preset-env": "^7.2.0",
    "airtap": "0.0.9",
    "assert": "^1.4.0",
    "bl": "^2.0.0",
    "deep-strict-equal": "^0.2.0",
    "events.once": "^2.0.2",
    "glob": "^7.1.2",
    "gunzip-maybe": "^1.4.1",
    "hyperquest": "^2.1.3",
    "lolex": "^2.6.0",
    "nyc": "^11.0.0",
    "pump": "^3.0.0",
    "rimraf": "^2.6.2",
    "tap": "^12.0.0",
    "tape": "^4.9.0",
    "tar-fs": "^1.16.2",
    "util-promisify": "^2.1.0"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/nodejs/readable-stream"
  },
  "browser": {
    "util": false,
    "worker_threads": false,
    "./errors": "./errors-browser.js",
    "./readable.js": "./readable-browser.js",
    "./lib/internal/streams/from.js": "./lib/internal/streams/from-browser.js",
    "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js"
  },
  "license": "MIT"
}exports = module.exports = require('./lib/_stream_readable.js');
exports.Stream = exports;
exports.Readable = exports;
exports.Writable = require('./lib/_stream_writable.js');
exports.Duplex = require('./lib/_stream_duplex.js');
exports.Transform = require('./lib/_stream_transform.js');
exports.PassThrough = require('./lib/_stream_passthrough.js');
exports.finished = require('./lib/internal/streams/end-of-stream.js');
exports.pipeline = require('./lib/internal/streams/pipeline.js');
var Stream = require('stream');
if (process.env.READABLE_STREAM === 'disable' && Stream) {
  module.exports = Stream.Readable;
  Object.assign(module.exports, Stream);
  module.exports.Stream = Stream;
} else {
  exports = module.exports = require('./lib/_stream_readable.js');
  exports.Stream = Stream || exports;
  exports.Readable = exports;
  exports.Writable = require('./lib/_stream_writable.js');
  exports.Duplex = require('./lib/_stream_duplex.js');
  exports.Transform = require('./lib/_stream_transform.js');
  exports.PassThrough = require('./lib/_stream_passthrough.js');
  exports.finished = require('./lib/internal/streams/end-of-stream.js');
  exports.pipeline = require('./lib/internal/streams/pipeline.js');
}
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

'use strict';

/*<replacement>*/

var Buffer = require('safe-buffer').Buffer;
/*</replacement>*/

var isEncoding = Buffer.isEncoding || function (encoding) {
  encoding = '' + encoding;
  switch (encoding && encoding.toLowerCase()) {
    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
      return true;
    default:
      return false;
  }
};

function _normalizeEncoding(enc) {
  if (!enc) return 'utf8';
  var retried;
  while (true) {
    switch (enc) {
      case 'utf8':
      case 'utf-8':
        return 'utf8';
      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return 'utf16le';
      case 'latin1':
      case 'binary':
        return 'latin1';
      case 'base64':
      case 'ascii':
      case 'hex':
        return enc;
      default:
        if (retried) return; // undefined
        enc = ('' + enc).toLowerCase();
        retried = true;
    }
  }
};

// Do not cache `Buffer.isEncoding` when checking encoding names as some
// modules monkey-patch it to support additional encodings
function normalizeEncoding(enc) {
  var nenc = _normalizeEncoding(enc);
  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
  return nenc || enc;
}

// StringDecoder provides an interface for efficiently splitting a series of
// buffers into a series of JS strings without breaking apart multi-byte
// characters.
exports.StringDecoder = StringDecoder;
function StringDecoder(encoding) {
  this.encoding = normalizeEncoding(encoding);
  var nb;
  switch (this.encoding) {
    case 'utf16le':
      this.text = utf16Text;
      this.end = utf16End;
      nb = 4;
      break;
    case 'utf8':
      this.fillLast = utf8FillLast;
      nb = 4;
      break;
    case 'base64':
      this.text = base64Text;
      this.end = base64End;
      nb = 3;
      break;
    default:
      this.write = simpleWrite;
      this.end = simpleEnd;
      return;
  }
  this.lastNeed = 0;
  this.lastTotal = 0;
  this.lastChar = Buffer.allocUnsafe(nb);
}

StringDecoder.prototype.write = function (buf) {
  if (buf.length === 0) return '';
  var r;
  var i;
  if (this.lastNeed) {
    r = this.fillLast(buf);
    if (r === undefined) return '';
    i = this.lastNeed;
    this.lastNeed = 0;
  } else {
    i = 0;
  }
  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
  return r || '';
};

StringDecoder.prototype.end = utf8End;

// Returns only complete characters in a Buffer
StringDecoder.prototype.text = utf8Text;

// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
StringDecoder.prototype.fillLast = function (buf) {
  if (this.lastNeed <= buf.length) {
    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
  }
  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
  this.lastNeed -= buf.length;
};

// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
// continuation byte. If an invalid byte is detected, -2 is returned.
function utf8CheckByte(byte) {
  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
  return byte >> 6 === 0x02 ? -1 : -2;
}

// Checks at most 3 bytes at the end of a Buffer in order to detect an
// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
// needed to complete the UTF-8 character (if applicable) are returned.
function utf8CheckIncomplete(self, buf, i) {
  var j = buf.length - 1;
  if (j < i) return 0;
  var nb = utf8CheckByte(buf[j]);
  if (nb >= 0) {
    if (nb > 0) self.lastNeed = nb - 1;
    return nb;
  }
  if (--j < i || nb === -2) return 0;
  nb = utf8CheckByte(buf[j]);
  if (nb >= 0) {
    if (nb > 0) self.lastNeed = nb - 2;
    return nb;
  }
  if (--j < i || nb === -2) return 0;
  nb = utf8CheckByte(buf[j]);
  if (nb >= 0) {
    if (nb > 0) {
      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
    }
    return nb;
  }
  return 0;
}

// Validates as many continuation bytes for a multi-byte UTF-8 character as
// needed or are available. If we see a non-continuation byte where we expect
// one, we "replace" the validated continuation bytes we've seen so far with
// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
// behavior. The continuation byte check is included three times in the case
// where all of the continuation bytes for a character exist in the same buffer.
// It is also done this way as a slight performance increase instead of using a
// loop.
function utf8CheckExtraBytes(self, buf, p) {
  if ((buf[0] & 0xC0) !== 0x80) {
    self.lastNeed = 0;
    return '\ufffd';
  }
  if (self.lastNeed > 1 && buf.length > 1) {
    if ((buf[1] & 0xC0) !== 0x80) {
      self.lastNeed = 1;
      return '\ufffd';
    }
    if (self.lastNeed > 2 && buf.length > 2) {
      if ((buf[2] & 0xC0) !== 0x80) {
        self.lastNeed = 2;
        return '\ufffd';
      }
    }
  }
}

// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
function utf8FillLast(buf) {
  var p = this.lastTotal - this.lastNeed;
  var r = utf8CheckExtraBytes(this, buf, p);
  if (r !== undefined) return r;
  if (this.lastNeed <= buf.length) {
    buf.copy(this.lastChar, p, 0, this.lastNeed);
    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
  }
  buf.copy(this.lastChar, p, 0, buf.length);
  this.lastNeed -= buf.length;
}

// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
// partial character, the character's bytes are buffered until the required
// number of bytes are available.
function utf8Text(buf, i) {
  var total = utf8CheckIncomplete(this, buf, i);
  if (!this.lastNeed) return buf.toString('utf8', i);
  this.lastTotal = total;
  var end = buf.length - (total - this.lastNeed);
  buf.copy(this.lastChar, 0, end);
  return buf.toString('utf8', i, end);
}

// For UTF-8, a replacement character is added when ending on a partial
// character.
function utf8End(buf) {
  var r = buf && buf.length ? this.write(buf) : '';
  if (this.lastNeed) return r + '\ufffd';
  return r;
}

// UTF-16LE typically needs two bytes per character, but even if we have an even
// number of bytes available, we need to check if we end on a leading/high
// surrogate. In that case, we need to wait for the next two bytes in order to
// decode the last character properly.
function utf16Text(buf, i) {
  if ((buf.length - i) % 2 === 0) {
    var r = buf.toString('utf16le', i);
    if (r) {
      var c = r.charCodeAt(r.length - 1);
      if (c >= 0xD800 && c <= 0xDBFF) {
        this.lastNeed = 2;
        this.lastTotal = 4;
        this.lastChar[0] = buf[buf.length - 2];
        this.lastChar[1] = buf[buf.length - 1];
        return r.slice(0, -1);
      }
    }
    return r;
  }
  this.lastNeed = 1;
  this.lastTotal = 2;
  this.lastChar[0] = buf[buf.length - 1];
  return buf.toString('utf16le', i, buf.length - 1);
}

// For UTF-16LE we do not explicitly append special replacement characters if we
// end on a partial character, we simply let v8 handle that.
function utf16End(buf) {
  var r = buf && buf.length ? this.write(buf) : '';
  if (this.lastNeed) {
    var end = this.lastTotal - this.lastNeed;
    return r + this.lastChar.toString('utf16le', 0, end);
  }
  return r;
}

function base64Text(buf, i) {
  var n = (buf.length - i) % 3;
  if (n === 0) return buf.toString('base64', i);
  this.lastNeed = 3 - n;
  this.lastTotal = 3;
  if (n === 1) {
    this.lastChar[0] = buf[buf.length - 1];
  } else {
    this.lastChar[0] = buf[buf.length - 2];
    this.lastChar[1] = buf[buf.length - 1];
  }
  return buf.toString('base64', i, buf.length - n);
}

function base64End(buf) {
  var r = buf && buf.length ? this.write(buf) : '';
  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
  return r;
}

// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
function simpleWrite(buf) {
  return buf.toString(this.encoding);
}

function simpleEnd(buf) {
  return buf && buf.length ? this.write(buf) : '';
}Node.js is licensed for use as follows:

"""
Copyright Node.js contributors. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
"""

This license applies to parts of Node.js originating from the
https://github.com/joyent/node repository:

"""
Copyright Joyent, Inc. and other Node contributors. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
"""

{
  "name": "string_decoder",
  "version": "1.3.0",
  "description": "The string_decoder module from Node core",
  "main": "lib/string_decoder.js",
  "files": [
    "lib"
  ],
  "dependencies": {
    "safe-buffer": "~5.2.0"
  },
  "devDependencies": {
    "babel-polyfill": "^6.23.0",
    "core-util-is": "^1.0.2",
    "inherits": "^2.0.3",
    "tap": "~0.4.8"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/nodejs/string_decoder.git"
  },
  "homepage": "https://github.com/nodejs/string_decoder",
  "license": "MIT"
}var constants = require('fs-constants')
var eos = require('end-of-stream')
var inherits = require('inherits')
var alloc = Buffer.alloc

var Readable = require('readable-stream').Readable
var Writable = require('readable-stream').Writable
var StringDecoder = require('string_decoder').StringDecoder

var headers = require('./headers')

var DMODE = parseInt('755', 8)
var FMODE = parseInt('644', 8)

var END_OF_TAR = alloc(1024)

var noop = function () {}

var overflow = function (self, size) {
  size &= 511
  if (size) self.push(END_OF_TAR.slice(0, 512 - size))
}

function modeToType (mode) {
  switch (mode & constants.S_IFMT) {
    case constants.S_IFBLK: return 'block-device'
    case constants.S_IFCHR: return 'character-device'
    case constants.S_IFDIR: return 'directory'
    case constants.S_IFIFO: return 'fifo'
    case constants.S_IFLNK: return 'symlink'
  }

  return 'file'
}

var Sink = function (to) {
  Writable.call(this)
  this.written = 0
  this._to = to
  this._destroyed = false
}

inherits(Sink, Writable)

Sink.prototype._write = function (data, enc, cb) {
  this.written += data.length
  if (this._to.push(data)) return cb()
  this._to._drain = cb
}

Sink.prototype.destroy = function () {
  if (this._destroyed) return
  this._destroyed = true
  this.emit('close')
}

var LinkSink = function () {
  Writable.call(this)
  this.linkname = ''
  this._decoder = new StringDecoder('utf-8')
  this._destroyed = false
}

inherits(LinkSink, Writable)

LinkSink.prototype._write = function (data, enc, cb) {
  this.linkname += this._decoder.write(data)
  cb()
}

LinkSink.prototype.destroy = function () {
  if (this._destroyed) return
  this._destroyed = true
  this.emit('close')
}

var Void = function () {
  Writable.call(this)
  this._destroyed = false
}

inherits(Void, Writable)

Void.prototype._write = function (data, enc, cb) {
  cb(new Error('No body allowed for this entry'))
}

Void.prototype.destroy = function () {
  if (this._destroyed) return
  this._destroyed = true
  this.emit('close')
}

var Pack = function (opts) {
  if (!(this instanceof Pack)) return new Pack(opts)
  Readable.call(this, opts)

  this._drain = noop
  this._finalized = false
  this._finalizing = false
  this._destroyed = false
  this._stream = null
}

inherits(Pack, Readable)

Pack.prototype.entry = function (header, buffer, callback) {
  if (this._stream) throw new Error('already piping an entry')
  if (this._finalized || this._destroyed) return

  if (typeof buffer === 'function') {
    callback = buffer
    buffer = null
  }

  if (!callback) callback = noop

  var self = this

  if (!header.size || header.type === 'symlink') header.size = 0
  if (!header.type) header.type = modeToType(header.mode)
  if (!header.mode) header.mode = header.type === 'directory' ? DMODE : FMODE
  if (!header.uid) header.uid = 0
  if (!header.gid) header.gid = 0
  if (!header.mtime) header.mtime = new Date()

  if (typeof buffer === 'string') buffer = Buffer.from(buffer)
  if (Buffer.isBuffer(buffer)) {
    header.size = buffer.length
    this._encode(header)
    var ok = this.push(buffer)
    overflow(self, header.size)
    if (ok) process.nextTick(callback)
    else this._drain = callback
    return new Void()
  }

  if (header.type === 'symlink' && !header.linkname) {
    var linkSink = new LinkSink()
    eos(linkSink, function (err) {
      if (err) { // stream was closed
        self.destroy()
        return callback(err)
      }

      header.linkname = linkSink.linkname
      self._encode(header)
      callback()
    })

    return linkSink
  }

  this._encode(header)

  if (header.type !== 'file' && header.type !== 'contiguous-file') {
    process.nextTick(callback)
    return new Void()
  }

  var sink = new Sink(this)

  this._stream = sink

  eos(sink, function (err) {
    self._stream = null

    if (err) { // stream was closed
      self.destroy()
      return callback(err)
    }

    if (sink.written !== header.size) { // corrupting tar
      self.destroy()
      return callback(new Error('size mismatch'))
    }

    overflow(self, header.size)
    if (self._finalizing) self.finalize()
    callback()
  })

  return sink
}

Pack.prototype.finalize = function () {
  if (this._stream) {
    this._finalizing = true
    return
  }

  if (this._finalized) return
  this._finalized = true
  this.push(END_OF_TAR)
  this.push(null)
}

Pack.prototype.destroy = function (err) {
  if (this._destroyed) return
  this._destroyed = true

  if (err) this.emit('error', err)
  this.emit('close')
  if (this._stream && this._stream.destroy) this._stream.destroy()
}

Pack.prototype._encode = function (header) {
  if (!header.pax) {
    var buf = headers.encode(header)
    if (buf) {
      this.push(buf)
      return
    }
  }
  this._encodePax(header)
}

Pack.prototype._encodePax = function (header) {
  var paxHeader = headers.encodePax({
    name: header.name,
    linkname: header.linkname,
    pax: header.pax
  })

  var newHeader = {
    name: 'PaxHeader',
    mode: header.mode,
    uid: header.uid,
    gid: header.gid,
    size: paxHeader.length,
    mtime: header.mtime,
    type: 'pax-header',
    linkname: header.linkname && 'PaxHeader',
    uname: header.uname,
    gname: header.gname,
    devmajor: header.devmajor,
    devminor: header.devminor
  }

  this.push(headers.encode(newHeader))
  this.push(paxHeader)
  overflow(this, paxHeader.length)

  newHeader.size = header.size
  newHeader.type = header.type
  this.push(headers.encode(newHeader))
}

Pack.prototype._read = function (n) {
  var drain = this._drain
  this._drain = noop
  drain()
}

module.exports = Pack
{
  "name": "tar-stream",
  "version": "2.2.0",
  "description": "tar-stream is a streaming tar parser and generator and nothing else. It is streams2 and operates purely using streams which means you can easily extract/parse tarballs without ever hitting the file system.",
  "author": "Mathias Buus <mathiasbuus@gmail.com>",
  "dependencies": {
    "bl": "^4.0.3",
    "end-of-stream": "^1.4.1",
    "fs-constants": "^1.0.0",
    "inherits": "^2.0.3",
    "readable-stream": "^3.1.1"
  },
  "devDependencies": {
    "concat-stream": "^2.0.0",
    "standard": "^12.0.1",
    "tape": "^4.9.2"
  },
  "homepage": "https://github.com/mafintosh/tar-stream",
  "main": "index.js",
  "files": [
    "*.js",
    "LICENSE"
  ],
  "directories": {
    "test": "test"
  },
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/mafintosh/tar-stream.git"
  },
  "engines": {
    "node": ">=6"
  }
}const tar = require('tar-stream')
const fs = require('fs')
const path = require('path')
const pipeline = require('pump') // eequire('stream').pipeline

fs.createReadStream('test.tar')
  .pipe(tar.extract())
  .on('entry', function (header, stream, done) {
    console.log(header.name)
    pipeline(stream, fs.createWriteStream(path.join('/tmp', header.name)), done)
  })

1.6.0 / 2015-01-11
==================

  * feat: exports thenify
  * support node 0.8+

1.5.0 / 2015-01-09
==================

  * feat: support backward compatible with callback

var thenify = require('thenify')

module.exports = thenifyAll
thenifyAll.withCallback = withCallback
thenifyAll.thenify = thenify

/**
 * Promisifies all the selected functions in an object.
 *
 * @param {Object} source the source object for the async functions
 * @param {Object} [destination] the destination to set all the promisified methods
 * @param {Array} [methods] an array of method names of `source`
 * @return {Object}
 * @api public
 */

function thenifyAll(source, destination, methods) {
  return promisifyAll(source, destination, methods, thenify)
}

/**
 * Promisifies all the selected functions in an object and backward compatible with callback.
 *
 * @param {Object} source the source object for the async functions
 * @param {Object} [destination] the destination to set all the promisified methods
 * @param {Array} [methods] an array of method names of `source`
 * @return {Object}
 * @api public
 */

function withCallback(source, destination, methods) {
  return promisifyAll(source, destination, methods, thenify.withCallback)
}

function promisifyAll(source, destination, methods, promisify) {
  if (!destination) {
    destination = {};
    methods = Object.keys(source)
  }

  if (Array.isArray(destination)) {
    methods = destination
    destination = {}
  }

  if (!methods) {
    methods = Object.keys(source)
  }

  if (typeof source === 'function') destination = promisify(source)

  methods.forEach(function (name) {
    // promisify only if it's a function
    if (typeof source[name] === 'function') destination[name] = promisify(source[name])
  })

  // proxy the rest
  Object.keys(source).forEach(function (name) {
    if (deprecated(source, name)) return
    if (destination[name]) return
    destination[name] = source[name]
  })

  return destination
}

function deprecated(source, name) {
  var desc = Object.getOwnPropertyDescriptor(source, name)
  if (!desc || !desc.get) return false
  if (desc.get.name === 'deprecated') return true
  return false
}

The MIT License (MIT)

Copyright (c) 2014 Jonathan Ong me@jongleberry.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "thenify-all",
  "description": "Promisifies all the selected functions in an object",
  "version": "1.6.0",
  "author": "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)",
  "license": "MIT",
  "repository": "thenables/thenify-all",
  "dependencies": {
    "thenify": ">= 3.1.0 < 4"
  },
  "devDependencies": {
    "bluebird": "2",
    "istanbul": "0",
    "mocha": "2"
  },
  "files": [
    "index.js"
  ],
  "engines": {
    "node": ">=0.8"
  }
}
3.3.1 / 2020-06-18
==================

**fixes**
  * [[`0d94a24`](http://github.com/thenables/thenify/commit/0d94a24eb933bc835d568f3009f4d269c4c4c17a)] - fix: remove eval (#30) (Yiyu He <<dead_horse@qq.com>>)

3.3.0 / 2017-05-19
==================

  * feat: support options.multiArgs and options.withCallback (#27)

var Promise = require('any-promise')
var assert = require('assert')

module.exports = thenify

/**
 * Turn async functions into promises
 *
 * @param {Function} fn
 * @return {Function}
 * @api public
 */

function thenify(fn, options) {
  assert(typeof fn === 'function')
  return createWrapper(fn, options)
}

/**
 * Turn async functions into promises and backward compatible with callback
 *
 * @param {Function} fn
 * @return {Function}
 * @api public
 */

thenify.withCallback = function (fn, options) {
  assert(typeof fn === 'function')
  options = options || {}
  options.withCallback = true
  return createWrapper(fn, options)
}

function createCallback(resolve, reject, multiArgs) {
  // default to true
  if (multiArgs === undefined) multiArgs = true
  return function(err, value) {
    if (err) return reject(err)
    var length = arguments.length

    if (length <= 2 || !multiArgs) return resolve(value)

    if (Array.isArray(multiArgs)) {
      var values = {}
      for (var i = 1; i < length; i++) values[multiArgs[i - 1]] = arguments[i]
      return resolve(values)
    }

    var values = new Array(length - 1)
    for (var i = 1; i < length; ++i) values[i - 1] = arguments[i]
    resolve(values)
  }
}

function createWrapper(fn, options) {
  options = options || {}
  var name = fn.name;
  name = (name || '').replace(/\s|bound(?!$)/g, '')
  var newFn = function () {
    var self = this
    var len = arguments.length
    if (options.withCallback) {
      var lastType = typeof arguments[len - 1]
      if (lastType === 'function') return fn.apply(self, arguments)
    }
    var args = new Array(len + 1)
    for (var i = 0; i < len; ++i) args[i] = arguments[i]
    var lastIndex = i
    return new Promise(function (resolve, reject) {
      args[lastIndex] = createCallback(resolve, reject, options.multiArgs)
      fn.apply(self, args)
    })
  }
  Object.defineProperty(newFn, 'name', { value: name })
  return newFn
}

The MIT License (MIT)

Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "thenify",
  "description": "Promisify a callback-based function",
  "version": "3.3.1",
  "author": "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)",
  "license": "MIT",
  "repository": "thenables/thenify",
  "dependencies": {
    "any-promise": "^1.0.0"
  },
  "devDependencies": {
    "bluebird": "^3.1.1",
    "istanbul": "^0.4.0",
    "mocha": "^3.0.2"
  },
  "files": [
    "index.js"
  ]
}'use strict';
const {Readable} = require('stream');

module.exports = input => (
	new Readable({
		read() {
			this.push(input);
			this.push(null);
		}
	})
);
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "to-readable-stream",
  "version": "1.0.0",
  "description": "Convert a string/Buffer/Uint8Array to a readable stream",
  "license": "MIT",
  "repository": "sindresorhus/to-readable-stream",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "get-stream": "^3.0.0",
    "xo": "*"
  }
}/*!
 * toidentifier
 * Copyright(c) 2016 Douglas Christopher Wilson
 * MIT Licensed
 */

/**
 * Module exports.
 * @public
 */

module.exports = toIdentifier

/**
 * Trasform the given string into a JavaScript identifier
 *
 * @param {string} str
 * @returns {string}
 * @public
 */

function toIdentifier (str) {
  return str
    .split(' ')
    .map(function (token) {
      return token.slice(0, 1).toUpperCase() + token.slice(1)
    })
    .join('')
    .replace(/[^ _0-9a-z]/gi, '')
}
MIT License

Copyright (c) 2016 Douglas Christopher Wilson <doug@somethingdoug.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "toidentifier",
  "description": "Convert a string of words to a JavaScript identifier",
  "version": "1.0.0",
  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
  "repository": "component/toidentifier",
  "devDependencies": {
    "eslint": "4.19.1",
    "eslint-config-standard": "11.0.0",
    "eslint-plugin-import": "2.11.0",
    "eslint-plugin-markdown": "1.0.0-beta.6",
    "eslint-plugin-node": "6.0.1",
    "eslint-plugin-promise": "3.7.0",
    "eslint-plugin-standard": "3.1.0",
    "mocha": "1.21.5",
    "nyc": "11.8.0"
  },
  "engines": {
    "node": ">=0.6"
  },
  "license": "MIT",
  "files": [
    "index.js"
  ]
}'use strict';

// Implements Brad Hill's Double HMAC pattern from
// https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/.
// The approach is similar to the node's native implementation of timing safe buffer comparison that will be available on v6+.
// https://github.com/nodejs/node/issues/3043
// https://github.com/nodejs/node/pull/3073

var crypto = require('crypto');

function bufferEqual(a, b) {
  if (a.length !== b.length) {
    return false;
  }
  // `crypto.timingSafeEqual` was introduced in Node v6.6.0
  // <https://github.com/jshttp/basic-auth/issues/39>
  if (crypto.timingSafeEqual) {
    return crypto.timingSafeEqual(a, b);
  }
  for (var i = 0; i < a.length; i++) {
    if (a[i] !== b[i]) {
      return false;
    }
  }
  return true;
}

function timeSafeCompare(a, b) {
  var sa = String(a);
  var sb = String(b);
  var key = crypto.pseudoRandomBytes(32);
  var ah = crypto.createHmac('sha256', key).update(sa).digest();
  var bh = crypto.createHmac('sha256', key).update(sb).digest();

  return bufferEqual(ah, bh) && a === b;
}

module.exports = timeSafeCompare;
The MIT License (MIT)

Copyright (c) 2016

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "tsscmp",
  "version": "1.0.6",
  "description": "Timing safe string compare using double HMAC",
  "main": "lib/index.js",
  "dependencies": {},
  "devDependencies": {},
  "repository": {
    "type": "git",
    "url": "https://github.com/suryagh/tsscmp.git"
  },
  "author": "suryagh",
  "publishConfig": {
    "registry": "https://registry.npmjs.org"
  },
  "engines": {
    "node": ">=0.6.x"
  },
  "license": "MIT"
}module.exports = require('./lib/tunnel');
'use strict';

var net = require('net');
var tls = require('tls');
var http = require('http');
var https = require('https');
var events = require('events');
var assert = require('assert');
var util = require('util');


exports.httpOverHttp = httpOverHttp;
exports.httpsOverHttp = httpsOverHttp;
exports.httpOverHttps = httpOverHttps;
exports.httpsOverHttps = httpsOverHttps;


function httpOverHttp(options) {
  var agent = new TunnelingAgent(options);
  agent.request = http.request;
  return agent;
}

function httpsOverHttp(options) {
  var agent = new TunnelingAgent(options);
  agent.request = http.request;
  agent.createSocket = createSecureSocket;
  agent.defaultPort = 443;
  return agent;
}

function httpOverHttps(options) {
  var agent = new TunnelingAgent(options);
  agent.request = https.request;
  return agent;
}

function httpsOverHttps(options) {
  var agent = new TunnelingAgent(options);
  agent.request = https.request;
  agent.createSocket = createSecureSocket;
  agent.defaultPort = 443;
  return agent;
}


function TunnelingAgent(options) {
  var self = this;
  self.options = options || {};
  self.proxyOptions = self.options.proxy || {};
  self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
  self.requests = [];
  self.sockets = [];

  self.on('free', function onFree(socket, host, port, localAddress) {
    var options = toOptions(host, port, localAddress);
    for (var i = 0, len = self.requests.length; i < len; ++i) {
      var pending = self.requests[i];
      if (pending.host === options.host && pending.port === options.port) {
        // Detect the request to connect same origin server,
        // reuse the connection.
        self.requests.splice(i, 1);
        pending.request.onSocket(socket);
        return;
      }
    }
    socket.destroy();
    self.removeSocket(socket);
  });
}
util.inherits(TunnelingAgent, events.EventEmitter);

TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
  var self = this;
  var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));

  if (self.sockets.length >= this.maxSockets) {
    // We are over limit so we'll add it to the queue.
    self.requests.push(options);
    return;
  }

  // If we are under maxSockets create a new one.
  self.createSocket(options, function(socket) {
    socket.on('free', onFree);
    socket.on('close', onCloseOrRemove);
    socket.on('agentRemove', onCloseOrRemove);
    req.onSocket(socket);

    function onFree() {
      self.emit('free', socket, options);
    }

    function onCloseOrRemove(err) {
      self.removeSocket(socket);
      socket.removeListener('free', onFree);
      socket.removeListener('close', onCloseOrRemove);
      socket.removeListener('agentRemove', onCloseOrRemove);
    }
  });
};

TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
  var self = this;
  var placeholder = {};
  self.sockets.push(placeholder);

  var connectOptions = mergeOptions({}, self.proxyOptions, {
    method: 'CONNECT',
    path: options.host + ':' + options.port,
    agent: false,
    headers: {
      host: options.host + ':' + options.port
    }
  });
  if (options.localAddress) {
    connectOptions.localAddress = options.localAddress;
  }
  if (connectOptions.proxyAuth) {
    connectOptions.headers = connectOptions.headers || {};
    connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
        new Buffer(connectOptions.proxyAuth).toString('base64');
  }

  debug('making CONNECT request');
  var connectReq = self.request(connectOptions);
  connectReq.useChunkedEncodingByDefault = false; // for v0.6
  connectReq.once('response', onResponse); // for v0.6
  connectReq.once('upgrade', onUpgrade);   // for v0.6
  connectReq.once('connect', onConnect);   // for v0.7 or later
  connectReq.once('error', onError);
  connectReq.end();

  function onResponse(res) {
    // Very hacky. This is necessary to avoid http-parser leaks.
    res.upgrade = true;
  }

  function onUpgrade(res, socket, head) {
    // Hacky.
    process.nextTick(function() {
      onConnect(res, socket, head);
    });
  }

  function onConnect(res, socket, head) {
    connectReq.removeAllListeners();
    socket.removeAllListeners();

    if (res.statusCode !== 200) {
      debug('tunneling socket could not be established, statusCode=%d',
        res.statusCode);
      socket.destroy();
      var error = new Error('tunneling socket could not be established, ' +
        'statusCode=' + res.statusCode);
      error.code = 'ECONNRESET';
      options.request.emit('error', error);
      self.removeSocket(placeholder);
      return;
    }
    if (head.length > 0) {
      debug('got illegal response body from proxy');
      socket.destroy();
      var error = new Error('got illegal response body from proxy');
      error.code = 'ECONNRESET';
      options.request.emit('error', error);
      self.removeSocket(placeholder);
      return;
    }
    debug('tunneling connection has established');
    self.sockets[self.sockets.indexOf(placeholder)] = socket;
    return cb(socket);
  }

  function onError(cause) {
    connectReq.removeAllListeners();

    debug('tunneling socket could not be established, cause=%s\n',
          cause.message, cause.stack);
    var error = new Error('tunneling socket could not be established, ' +
                          'cause=' + cause.message);
    error.code = 'ECONNRESET';
    options.request.emit('error', error);
    self.removeSocket(placeholder);
  }
};

TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
  var pos = this.sockets.indexOf(socket)
  if (pos === -1) {
    return;
  }
  this.sockets.splice(pos, 1);

  var pending = this.requests.shift();
  if (pending) {
    // If we have pending requests and a socket gets closed a new one
    // needs to be created to take over in the pool for the one that closed.
    this.createSocket(pending, function(socket) {
      pending.request.onSocket(socket);
    });
  }
};

function createSecureSocket(options, cb) {
  var self = this;
  TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
    var hostHeader = options.request.getHeader('host');
    var tlsOptions = mergeOptions({}, self.options, {
      socket: socket,
      servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
    });

    // 0 is dummy port for v0.6
    var secureSocket = tls.connect(0, tlsOptions);
    self.sockets[self.sockets.indexOf(socket)] = secureSocket;
    cb(secureSocket);
  });
}


function toOptions(host, port, localAddress) {
  if (typeof host === 'string') { // since v0.10
    return {
      host: host,
      port: port,
      localAddress: localAddress
    };
  }
  return host; // for v0.11 or later
}

function mergeOptions(target) {
  for (var i = 1, len = arguments.length; i < len; ++i) {
    var overrides = arguments[i];
    if (typeof overrides === 'object') {
      var keys = Object.keys(overrides);
      for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
        var k = keys[j];
        if (overrides[k] !== undefined) {
          target[k] = overrides[k];
        }
      }
    }
  }
  return target;
}


var debug;
if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
  debug = function() {
    var args = Array.prototype.slice.call(arguments);
    if (typeof args[0] === 'string') {
      args[0] = 'TUNNEL: ' + args[0];
    } else {
      args.unshift('TUNNEL:');
    }
    console.error.apply(console, args);
  }
} else {
  debug = function() {};
}
exports.debug = debug; // for test
The MIT License (MIT)

Copyright (c) 2012 Koichi Kobayashi

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "tunnel",
  "version": "0.0.6",
  "description": "Node HTTP/HTTPS Agents for tunneling proxies",
  "homepage": "https://github.com/koichik/node-tunnel/",
  "license": "MIT",
  "author": "Koichi Kobayashi <koichik@improvement.jp>",
  "main": "./index.js",
  "directories": {
    "lib": "./lib"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/koichik/node-tunnel.git"
  },
  "devDependencies": {
    "mocha": "^5.2.0",
    "should": "^13.2.3"
  },
  "engines": {
    "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
  }
}1.6.18 / 2019-04-26
===================

  * Fix regression passing request object to `typeis.is`

1.6.17 / 2019-04-25
===================

  * deps: mime-types@~2.1.24
    - Add Apple file extensions from IANA
    - Add extension `.csl` to `application/vnd.citationstyles.style+xml`
    - Add extension `.es` to `application/ecmascript`
    - Add extension `.nq` to `application/n-quads`
    - Add extension `.nt` to `application/n-triples`
    - Add extension `.owl` to `application/rdf+xml`
    - Add extensions `.siv` and `.sieve` to `application/sieve`
    - Add extensions from IANA for `image/*` types
    - Add extensions from IANA for `model/*` types
    - Add extensions to HEIC image types
    - Add new mime types
    - Add `text/mdx` with extension `.mdx`
  * perf: prevent internal `throw` on invalid type

1.6.16 / 2018-02-16
===================

  * deps: mime-types@~2.1.18
    - Add `application/raml+yaml` with extension `.raml`
    - Add `application/wasm` with extension `.wasm`
    - Add `text/shex` with extension `.shex`
    - Add extensions for JPEG-2000 images
    - Add extensions from IANA for `message/*` types
    - Add extension `.mjs` to `application/javascript`
    - Add extension `.wadl` to `application/vnd.sun.wadl+xml`
    - Add extension `.gz` to `application/gzip`
    - Add glTF types and extensions
    - Add new mime types
    - Update extensions `.md` and `.markdown` to be `text/markdown`
    - Update font MIME types
    - Update `text/hjson` to registered `application/hjson`

1.6.15 / 2017-03-31
===================

  * deps: mime-types@~2.1.15
    - Add new mime types

1.6.14 / 2016-11-18
===================

  * deps: mime-types@~2.1.13
    - Add new mime types

1.6.13 / 2016-05-18
===================

  * deps: mime-types@~2.1.11
    - Add new mime types

1.6.12 / 2016-02-28
===================

  * deps: mime-types@~2.1.10
    - Add new mime types
    - Fix extension of `application/dash+xml`
    - Update primary extension for `audio/mp4`

1.6.11 / 2016-01-29
===================

  * deps: mime-types@~2.1.9
    - Add new mime types

1.6.10 / 2015-12-01
===================

  * deps: mime-types@~2.1.8
    - Add new mime types

1.6.9 / 2015-09-27
==================

  * deps: mime-types@~2.1.7
    - Add new mime types

1.6.8 / 2015-09-04
==================

  * deps: mime-types@~2.1.6
    - Add new mime types

1.6.7 / 2015-08-20
==================

  * Fix type error when given invalid type to match against
  * deps: mime-types@~2.1.5
    - Add new mime types

1.6.6 / 2015-07-31
==================

  * deps: mime-types@~2.1.4
    - Add new mime types

1.6.5 / 2015-07-16
==================

  * deps: mime-types@~2.1.3
    - Add new mime types

1.6.4 / 2015-07-01
==================

  * deps: mime-types@~2.1.2
    - Add new mime types
  * perf: enable strict mode
  * perf: remove argument reassignment

1.6.3 / 2015-06-08
==================

  * deps: mime-types@~2.1.1
    - Add new mime types
  * perf: reduce try block size
  * perf: remove bitwise operations

1.6.2 / 2015-05-10
==================

  * deps: mime-types@~2.0.11
    - Add new mime types

1.6.1 / 2015-03-13
==================

  * deps: mime-types@~2.0.10
    - Add new mime types

1.6.0 / 2015-02-12
==================

  * fix false-positives in `hasBody` `Transfer-Encoding` check
  * support wildcard for both type and subtype (`*/*`)

1.5.7 / 2015-02-09
==================

  * fix argument reassignment
  * deps: mime-types@~2.0.9
    - Add new mime types

1.5.6 / 2015-01-29
==================

  * deps: mime-types@~2.0.8
    - Add new mime types

1.5.5 / 2014-12-30
==================

  * deps: mime-types@~2.0.7
    - Add new mime types
    - Fix missing extensions
    - Fix various invalid MIME type entries
    - Remove example template MIME types
    - deps: mime-db@~1.5.0

1.5.4 / 2014-12-10
==================

  * deps: mime-types@~2.0.4
    - Add new mime types
    - deps: mime-db@~1.3.0

1.5.3 / 2014-11-09
==================

  * deps: mime-types@~2.0.3
    - Add new mime types
    - deps: mime-db@~1.2.0

1.5.2 / 2014-09-28
==================

  * deps: mime-types@~2.0.2
    - Add new mime types
    - deps: mime-db@~1.1.0

1.5.1 / 2014-09-07
==================

  * Support Node.js 0.6
  * deps: media-typer@0.3.0
  * deps: mime-types@~2.0.1
    - Support Node.js 0.6

1.5.0 / 2014-09-05
==================

 * fix `hasbody` to be true for `content-length: 0`

1.4.0 / 2014-09-02
==================

 * update mime-types

1.3.2 / 2014-06-24
==================

 * use `~` range on mime-types

1.3.1 / 2014-06-19
==================

 * fix global variable leak

1.3.0 / 2014-06-19
==================

 * improve type parsing

   - invalid media type never matches
   - media type not case-sensitive
   - extra LWS does not affect results

1.2.2 / 2014-06-19
==================

 * fix behavior on unknown type argument

1.2.1 / 2014-06-03
==================

 * switch dependency from `mime` to `mime-types@1.0.0`

1.2.0 / 2014-05-11
==================

 * support suffix matching:

   - `+json` matches `application/vnd+json`
   - `*/vnd+json` matches `application/vnd+json`
   - `application/*+json` matches `application/vnd+json`

1.1.0 / 2014-04-12
==================

 * add non-array values support
 * expose internal utilities:

   - `.is()`
   - `.hasBody()`
   - `.normalize()`
   - `.match()`

1.0.1 / 2014-03-30
==================

 * add `multipart` as a shorthand
/*!
 * type-is
 * Copyright(c) 2014 Jonathan Ong
 * Copyright(c) 2014-2015 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module dependencies.
 * @private
 */

var typer = require('media-typer')
var mime = require('mime-types')

/**
 * Module exports.
 * @public
 */

module.exports = typeofrequest
module.exports.is = typeis
module.exports.hasBody = hasbody
module.exports.normalize = normalize
module.exports.match = mimeMatch

/**
 * Compare a `value` content-type with `types`.
 * Each `type` can be an extension like `html`,
 * a special shortcut like `multipart` or `urlencoded`,
 * or a mime type.
 *
 * If no types match, `false` is returned.
 * Otherwise, the first `type` that matches is returned.
 *
 * @param {String} value
 * @param {Array} types
 * @public
 */

function typeis (value, types_) {
  var i
  var types = types_

  // remove parameters and normalize
  var val = tryNormalizeType(value)

  // no type or invalid
  if (!val) {
    return false
  }

  // support flattened arguments
  if (types && !Array.isArray(types)) {
    types = new Array(arguments.length - 1)
    for (i = 0; i < types.length; i++) {
      types[i] = arguments[i + 1]
    }
  }

  // no types, return the content type
  if (!types || !types.length) {
    return val
  }

  var type
  for (i = 0; i < types.length; i++) {
    if (mimeMatch(normalize(type = types[i]), val)) {
      return type[0] === '+' || type.indexOf('*') !== -1
        ? val
        : type
    }
  }

  // no matches
  return false
}

/**
 * Check if a request has a request body.
 * A request with a body __must__ either have `transfer-encoding`
 * or `content-length` headers set.
 * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3
 *
 * @param {Object} request
 * @return {Boolean}
 * @public
 */

function hasbody (req) {
  return req.headers['transfer-encoding'] !== undefined ||
    !isNaN(req.headers['content-length'])
}

/**
 * Check if the incoming request contains the "Content-Type"
 * header field, and it contains any of the give mime `type`s.
 * If there is no request body, `null` is returned.
 * If there is no content type, `false` is returned.
 * Otherwise, it returns the first `type` that matches.
 *
 * Examples:
 *
 *     // With Content-Type: text/html; charset=utf-8
 *     this.is('html'); // => 'html'
 *     this.is('text/html'); // => 'text/html'
 *     this.is('text/*', 'application/json'); // => 'text/html'
 *
 *     // When Content-Type is application/json
 *     this.is('json', 'urlencoded'); // => 'json'
 *     this.is('application/json'); // => 'application/json'
 *     this.is('html', 'application/*'); // => 'application/json'
 *
 *     this.is('html'); // => false
 *
 * @param {String|Array} types...
 * @return {String|false|null}
 * @public
 */

function typeofrequest (req, types_) {
  var types = types_

  // no body
  if (!hasbody(req)) {
    return null
  }

  // support flattened arguments
  if (arguments.length > 2) {
    types = new Array(arguments.length - 1)
    for (var i = 0; i < types.length; i++) {
      types[i] = arguments[i + 1]
    }
  }

  // request content type
  var value = req.headers['content-type']

  return typeis(value, types)
}

/**
 * Normalize a mime type.
 * If it's a shorthand, expand it to a valid mime type.
 *
 * In general, you probably want:
 *
 *   var type = is(req, ['urlencoded', 'json', 'multipart']);
 *
 * Then use the appropriate body parsers.
 * These three are the most common request body types
 * and are thus ensured to work.
 *
 * @param {String} type
 * @private
 */

function normalize (type) {
  if (typeof type !== 'string') {
    // invalid type
    return false
  }

  switch (type) {
    case 'urlencoded':
      return 'application/x-www-form-urlencoded'
    case 'multipart':
      return 'multipart/*'
  }

  if (type[0] === '+') {
    // "+json" -> "*/*+json" expando
    return '*/*' + type
  }

  return type.indexOf('/') === -1
    ? mime.lookup(type)
    : type
}

/**
 * Check if `expected` mime type
 * matches `actual` mime type with
 * wildcard and +suffix support.
 *
 * @param {String} expected
 * @param {String} actual
 * @return {Boolean}
 * @private
 */

function mimeMatch (expected, actual) {
  // invalid type
  if (expected === false) {
    return false
  }

  // split types
  var actualParts = actual.split('/')
  var expectedParts = expected.split('/')

  // invalid format
  if (actualParts.length !== 2 || expectedParts.length !== 2) {
    return false
  }

  // validate type
  if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {
    return false
  }

  // validate suffix wildcard
  if (expectedParts[1].substr(0, 2) === '*+') {
    return expectedParts[1].length <= actualParts[1].length + 1 &&
      expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length)
  }

  // validate subtype
  if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {
    return false
  }

  return true
}

/**
 * Normalize a type and remove parameters.
 *
 * @param {string} value
 * @return {string}
 * @private
 */

function normalizeType (value) {
  // parse the type
  var type = typer.parse(value)

  // remove the parameters
  type.parameters = undefined

  // reformat it
  return typer.format(type)
}

/**
 * Try to normalize a type and remove parameters.
 *
 * @param {string} value
 * @return {string}
 * @private
 */

function tryNormalizeType (value) {
  if (!value) {
    return null
  }

  try {
    return normalizeType(value)
  } catch (err) {
    return null
  }
}
(The MIT License)

Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "type-is",
  "description": "Infer the content-type of a request.",
  "version": "1.6.18",
  "license": "MIT",
  "repository": "jshttp/type-is",
  "dependencies": {
    "media-typer": "0.3.0",
    "mime-types": "~2.1.24"
  },
  "devDependencies": {
    "eslint": "5.16.0",
    "eslint-config-standard": "12.0.0",
    "eslint-plugin-import": "2.17.2",
    "eslint-plugin-markdown": "1.0.0",
    "eslint-plugin-node": "8.0.1",
    "eslint-plugin-promise": "4.1.1",
    "eslint-plugin-standard": "4.0.0",
    "mocha": "6.1.4",
    "nyc": "14.0.0"
  },
  "engines": {
    "node": ">= 0.6"
  },
  "files": [
    "LICENSE",
    "HISTORY.md",
    "index.js"
  ]
}'use strict'

exports.fromCallback = function (fn) {
  return Object.defineProperty(function (...args) {
    if (typeof args[args.length - 1] === 'function') fn.apply(this, args)
    else {
      return new Promise((resolve, reject) => {
        fn.call(
          this,
          ...args,
          (err, res) => (err != null) ? reject(err) : resolve(res)
        )
      })
    }
  }, 'name', { value: fn.name })
}

exports.fromPromise = function (fn) {
  return Object.defineProperty(function (...args) {
    const cb = args[args.length - 1]
    if (typeof cb !== 'function') return fn.apply(this, args)
    else fn.apply(this, args.slice(0, -1)).then(r => cb(null, r), cb)
  }, 'name', { value: fn.name })
}
(The MIT License)

Copyright (c) 2017, Ryan Zimmerman <opensrc@ryanzim.com>

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the 'Software'), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "universalify",
  "version": "2.0.0",
  "description": "Make a callback- or promise-based function support both promises and callbacks.",
  "homepage": "https://github.com/RyanZim/universalify#readme",
  "license": "MIT",
  "author": "Ryan Zimmerman <opensrc@ryanzim.com>",
  "files": [
    "index.js"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/RyanZim/universalify.git"
  },
  "devDependencies": {
    "colortape": "^0.1.2",
    "coveralls": "^3.0.1",
    "nyc": "^15.0.0",
    "standard": "^14.3.1",
    "tape": "^5.0.1"
  },
  "engines": {
    "node": ">= 10.0.0"
  }
}const MONTH_SHORTCUTS = [
  " ",
  "jan",
  "feb",
  "mar",
  "apr",
  "may",
  "jun",
  "jul",
  "aug",
  "sep",
  "oct",
  "nov",
  "dec",
];
const DAYS_OF_WEEK_SHORTCUTS = [
  "sun",
  "mon",
  "tue",
  "wed",
  "thu",
  "fri",
  "sat",
  "sun",
];

module.exports = { MONTH_SHORTCUTS, DAYS_OF_WEEK_SHORTCUTS };
const moment = require("moment");
const { newArray } = require("./utils");
const { MONTH_SHORTCUTS, DAYS_OF_WEEK_SHORTCUTS } = require("./constants");

// UNIX Cron refer: https://www.ibm.com/docs/en/db2oc?topic=task-unix-cron-format
class cron {
  constructor(cron) {
    let [minute, hour, dayOfMonth, month, dayOfWeek] = cron
      .toLowerCase()
      .split(" ");

    const parseKeywords = (s, kws) => {
      let res = s;
      kws.forEach((kw, idx) => {
        res = res.replace(new RegExp(kw, "g"), idx);
      });
      return res;
    };

    const parseList = (list, length, startFrom = 0, isDayOfWeek = false) => {
      const m = [];
      for (const s of list.split(",")) {
        let n = [];
        const [range, step] = s.split("/");
        if (range === "*") {
          n.push(...newArray(length, startFrom));
        } else if (/(\d+)\-(\d+)/.test(range)) {
          let start = parseInt(RegExp.$1);
          let end = parseInt(RegExp.$2);
          // sunday in dayOfWeek can be 0 or 7
          if (isDayOfWeek && end === 0) {
            end = 6;
            n.push(0);
          }
          n.push(...newArray(end - start + 1, start));
        } else if (/\d+/.test(range)) {
          n.push(parseInt(range));
        }
        if (step) {
          const stepN = parseInt(step);
          if (stepN > 0) {
            n = n.filter((_, idx) => idx % stepN === 0);
          }
        }
        m.push(...n);
      }
      return m;
    };

    this.minute = parseList(minute, 60);
    this.hour = parseList(hour, 24);
    this.dayOfMonth =
      dayOfMonth === "*" && dayOfWeek !== "*"
        ? []
        : parseList(dayOfMonth, 31, 1);
    this.month = parseList(parseKeywords(month, MONTH_SHORTCUTS), 12, 1);
    this.dayOfWeek =
      dayOfWeek === "*" && dayOfMonth !== "*"
        ? []
        : parseList(
            parseKeywords(dayOfWeek, DAYS_OF_WEEK_SHORTCUTS),
            7,
            0,
            true
          );
  }

  isMatchDate(date) {
    const d = moment(date);
    return (
      this.minute.includes(d.minute()) &&
      this.hour.includes(d.hour()) &&
      (this.dayOfMonth.includes(d.date()) ||
        this.dayOfWeek.includes(d.day())) &&
      this.month.includes(d.month() + 1)
    );
  }

  next(date = new Date()) {
    const daysOfMonth = (month, year) => {
      switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
          return 31;
        case 4:
        case 6:
        case 9:
        case 11:
          return 30;
        case 2:
          return year % 4 === 0 ? 29 : 28;
        default:
          return 0;
      }
    };
    const td = moment(date);
    const y = td.year();
    for (const dist of newArray(5)) {
      for (const m of this.month) {
        for (const d of newArray(daysOfMonth(m, y + dist), 1)) {
          for (const h of this.hour) {
            for (const min of this.minute) {
              const n = moment({
                year: y + dist,
                month: m - 1,
                date: d,
                hour: h,
                minute: min,
              });
              if (
                (this.dayOfMonth.includes(d) ||
                  this.dayOfWeek.includes(n.day())) &&
                n.isAfter(td)
              ) {
                return n.toDate();
              }
            }
          }
        }
      }
    }
    return null;
  }

  schedule(fn = () => {}) {
    const c = () => {
      if (this.isMatchDate(moment())) {
        fn();
      }
    };
    c();
    return setInterval(c, 60 * 1000);
  }
}

module.exports = cron;
module.exports.newArray = (len, start = 0, step = 1) => {
  return new Array(len).fill(0).map((_, i) => start + i * step);
};
{
  "name": "unix-cron",
  "version": "1.0.3",
  "description": "unix type cron for node.js",
  "main": "./lib/index.js",
  "url": "https://github.com/Fndroid/unix-cron",
  "author": "Fndroid",
  "license": "MIT",
  "dependencies": {
    "moment": "^2.29.1"
  },
  "devDependencies": {
    "mocha": "^9.0.3"
  }
}'use strict';
const url = require('url');
const prependHttp = require('prepend-http');

module.exports = (input, options) => {
	if (typeof input !== 'string') {
		throw new TypeError(`Expected \`url\` to be of type \`string\`, got \`${typeof input}\` instead.`);
	}

	const finalUrl = prependHttp(input, Object.assign({https: true}, options));
	return url.parse(finalUrl);
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "url-parse-lax",
  "version": "3.0.0",
  "description": "Lax url.parse() with support for protocol-less URLs & IPs",
  "license": "MIT",
  "repository": "sindresorhus/url-parse-lax",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "prepend-http": "^2.0.0"
  },
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}
/**
 * Module exports.
 */

module.exports = deprecate;

/**
 * Mark that a method should not be used.
 * Returns a modified function which warns once by default.
 *
 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
 *
 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
 * will throw an Error when invoked.
 *
 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
 * will invoke `console.trace()` instead of `console.error()`.
 *
 * @param {Function} fn - the function to deprecate
 * @param {String} msg - the string to print to the console when `fn` is invoked
 * @returns {Function} a new "deprecated" version of `fn`
 * @api public
 */

function deprecate (fn, msg) {
  if (config('noDeprecation')) {
    return fn;
  }

  var warned = false;
  function deprecated() {
    if (!warned) {
      if (config('throwDeprecation')) {
        throw new Error(msg);
      } else if (config('traceDeprecation')) {
        console.trace(msg);
      } else {
        console.warn(msg);
      }
      warned = true;
    }
    return fn.apply(this, arguments);
  }

  return deprecated;
}

/**
 * Checks `localStorage` for boolean values for the given `name`.
 *
 * @param {String} name
 * @returns {Boolean}
 * @api private
 */

function config (name) {
  // accessing global.localStorage can trigger a DOMException in sandboxed iframes
  try {
    if (!global.localStorage) return false;
  } catch (_) {
    return false;
  }
  var val = global.localStorage[name];
  if (null == val) return false;
  return String(val).toLowerCase() === 'true';
}

1.0.2 / 2015-10-07
==================

  * use try/catch when checking `localStorage` (#3, @kumavis)

1.0.1 / 2014-11-25
==================

  * browser: use `console.warn()` for deprecation calls
  * browser: more jsdocs

1.0.0 / 2014-04-30
==================

  * initial commit
(The MIT License)

Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

/**
 * For Node.js, simply re-export the core `util.deprecate` function.
 */

module.exports = require('util').deprecate;
{
  "name": "util-deprecate",
  "version": "1.0.2",
  "description": "The Node.js `util.deprecate()` function with browser support",
  "main": "node.js",
  "browser": "browser.js",
  "repository": {
    "type": "git",
    "url": "git://github.com/TooTallNate/util-deprecate.git"
  },
  "author": "Nathan Rajlich <nathan@tootallnate.net> (http://n8.io/)",
  "license": "MIT",
  "homepage": "https://github.com/TooTallNate/util-deprecate"
}# Contributing

Please feel free to file GitHub Issues or propose Pull Requests. We're always happy to discuss improvements to this library!

## Testing

```shell
npm test
```

## Releasing

Releases are supposed to be done from master, version bumping is automated through [`standard-version`](https://github.com/conventional-changelog/standard-version):

```shell
npm run release -- --dry-run  # verify output manually
npm run release               # follow the instructions from the output of this command
```
#!/usr/bin/env node
require('../uuid-bin');
export { default as v1 } from './v1.js';
export { default as v3 } from './v3.js';
export { default as v4 } from './v4.js';
export { default as v5 } from './v5.js';
export { default as NIL } from './nil.js';
export { default as version } from './version.js';
export { default as validate } from './validate.js';
export { default as stringify } from './stringify.js';
export { default as parse } from './parse.js';/*
 * Browser-compatible JavaScript MD5
 *
 * Modification of JavaScript MD5
 * https://github.com/blueimp/JavaScript-MD5
 *
 * Copyright 2011, Sebastian Tschan
 * https://blueimp.net
 *
 * Licensed under the MIT license:
 * https://opensource.org/licenses/MIT
 *
 * Based on
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */
function md5(bytes) {
  if (typeof bytes === 'string') {
    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape

    bytes = new Uint8Array(msg.length);

    for (var i = 0; i < msg.length; ++i) {
      bytes[i] = msg.charCodeAt(i);
    }
  }

  return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));
}
/*
 * Convert an array of little-endian words to an array of bytes
 */


function md5ToHexEncodedArray(input) {
  var output = [];
  var length32 = input.length * 32;
  var hexTab = '0123456789abcdef';

  for (var i = 0; i < length32; i += 8) {
    var x = input[i >> 5] >>> i % 32 & 0xff;
    var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);
    output.push(hex);
  }

  return output;
}
/**
 * Calculate output length with padding and bit length
 */


function getOutputLength(inputLength8) {
  return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;
}
/*
 * Calculate the MD5 of an array of little-endian words, and a bit length.
 */


function wordsToMd5(x, len) {
  /* append padding */
  x[len >> 5] |= 0x80 << len % 32;
  x[getOutputLength(len) - 1] = len;
  var a = 1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d = 271733878;

  for (var i = 0; i < x.length; i += 16) {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    a = md5ff(a, b, c, d, x[i], 7, -680876936);
    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
    b = md5gg(b, c, d, a, x[i], 20, -373897302);
    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
    d = md5hh(d, a, b, c, x[i], 11, -358537222);
    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
    a = md5ii(a, b, c, d, x[i], 6, -198630844);
    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
    a = safeAdd(a, olda);
    b = safeAdd(b, oldb);
    c = safeAdd(c, oldc);
    d = safeAdd(d, oldd);
  }

  return [a, b, c, d];
}
/*
 * Convert an array bytes to an array of little-endian words
 * Characters >255 have their high-byte silently ignored.
 */


function bytesToWords(input) {
  if (input.length === 0) {
    return [];
  }

  var length8 = input.length * 8;
  var output = new Uint32Array(getOutputLength(length8));

  for (var i = 0; i < length8; i += 8) {
    output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;
  }

  return output;
}
/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */


function safeAdd(x, y) {
  var lsw = (x & 0xffff) + (y & 0xffff);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return msw << 16 | lsw & 0xffff;
}
/*
 * Bitwise rotate a 32-bit number to the left.
 */


function bitRotateLeft(num, cnt) {
  return num << cnt | num >>> 32 - cnt;
}
/*
 * These functions implement the four basic operations the algorithm uses.
 */


function md5cmn(q, a, b, x, s, t) {
  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
}

function md5ff(a, b, c, d, x, s, t) {
  return md5cmn(b & c | ~b & d, a, b, x, s, t);
}

function md5gg(a, b, c, d, x, s, t) {
  return md5cmn(b & d | c & ~d, a, b, x, s, t);
}

function md5hh(a, b, c, d, x, s, t) {
  return md5cmn(b ^ c ^ d, a, b, x, s, t);
}

function md5ii(a, b, c, d, x, s, t) {
  return md5cmn(c ^ (b | ~d), a, b, x, s, t);
}

export default md5;export default '00000000-0000-0000-0000-000000000000';import validate from './validate.js';

function parse(uuid) {
  if (!validate(uuid)) {
    throw TypeError('Invalid UUID');
  }

  var v;
  var arr = new Uint8Array(16); // Parse ########-....-....-....-............

  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
  arr[1] = v >>> 16 & 0xff;
  arr[2] = v >>> 8 & 0xff;
  arr[3] = v & 0xff; // Parse ........-####-....-....-............

  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
  arr[5] = v & 0xff; // Parse ........-....-####-....-............

  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
  arr[7] = v & 0xff; // Parse ........-....-....-####-............

  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
  arr[9] = v & 0xff; // Parse ........-....-....-....-############
  // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)

  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
  arr[11] = v / 0x100000000 & 0xff;
  arr[12] = v >>> 24 & 0xff;
  arr[13] = v >>> 16 & 0xff;
  arr[14] = v >>> 8 & 0xff;
  arr[15] = v & 0xff;
  return arr;
}

export default parse;export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;// Unique ID creation requires a high quality random # generator. In the browser we therefore
// require the crypto API and do not support built-in fallback to lower quality random number
// generators (like Math.random()).
var getRandomValues;
var rnds8 = new Uint8Array(16);
export default function rng() {
  // lazy load so that environments that need to polyfill have a chance to do so
  if (!getRandomValues) {
    // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
    // find the complete implementation of crypto (msCrypto) on IE11.
    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);

    if (!getRandomValues) {
      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
    }
  }

  return getRandomValues(rnds8);
}// Adapted from Chris Veness' SHA1 code at
// http://www.movable-type.co.uk/scripts/sha1.html
function f(s, x, y, z) {
  switch (s) {
    case 0:
      return x & y ^ ~x & z;

    case 1:
      return x ^ y ^ z;

    case 2:
      return x & y ^ x & z ^ y & z;

    case 3:
      return x ^ y ^ z;
  }
}

function ROTL(x, n) {
  return x << n | x >>> 32 - n;
}

function sha1(bytes) {
  var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
  var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];

  if (typeof bytes === 'string') {
    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape

    bytes = [];

    for (var i = 0; i < msg.length; ++i) {
      bytes.push(msg.charCodeAt(i));
    }
  } else if (!Array.isArray(bytes)) {
    // Convert Array-like to Array
    bytes = Array.prototype.slice.call(bytes);
  }

  bytes.push(0x80);
  var l = bytes.length / 4 + 2;
  var N = Math.ceil(l / 16);
  var M = new Array(N);

  for (var _i = 0; _i < N; ++_i) {
    var arr = new Uint32Array(16);

    for (var j = 0; j < 16; ++j) {
      arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];
    }

    M[_i] = arr;
  }

  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);
  M[N - 1][14] = Math.floor(M[N - 1][14]);
  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;

  for (var _i2 = 0; _i2 < N; ++_i2) {
    var W = new Uint32Array(80);

    for (var t = 0; t < 16; ++t) {
      W[t] = M[_i2][t];
    }

    for (var _t = 16; _t < 80; ++_t) {
      W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);
    }

    var a = H[0];
    var b = H[1];
    var c = H[2];
    var d = H[3];
    var e = H[4];

    for (var _t2 = 0; _t2 < 80; ++_t2) {
      var s = Math.floor(_t2 / 20);
      var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;
      e = d;
      d = c;
      c = ROTL(b, 30) >>> 0;
      b = a;
      a = T;
    }

    H[0] = H[0] + a >>> 0;
    H[1] = H[1] + b >>> 0;
    H[2] = H[2] + c >>> 0;
    H[3] = H[3] + d >>> 0;
    H[4] = H[4] + e >>> 0;
  }

  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];
}

export default sha1;import validate from './validate.js';
/**
 * Convert array of 16 byte values to UUID string format of the form:
 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 */

var byteToHex = [];

for (var i = 0; i < 256; ++i) {
  byteToHex.push((i + 0x100).toString(16).substr(1));
}

function stringify(arr) {
  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
  // Note: Be careful editing this code!  It's been tuned for performance
  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
  var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one
  // of the following:
  // - One or more input array values don't map to a hex octet (leading to
  // "undefined" in the uuid)
  // - Invalid input values for the RFC `version` or `variant` fields

  if (!validate(uuid)) {
    throw TypeError('Stringified UUID is invalid');
  }

  return uuid;
}

export default stringify;import rng from './rng.js';
import stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html

var _nodeId;

var _clockseq; // Previous uuid creation time


var _lastMSecs = 0;
var _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details

function v1(options, buf, offset) {
  var i = buf && offset || 0;
  var b = buf || new Array(16);
  options = options || {};
  var node = options.node || _nodeId;
  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
  // specified.  We do this lazily to minimize issues related to insufficient
  // system entropy.  See #189

  if (node == null || clockseq == null) {
    var seedBytes = options.random || (options.rng || rng)();

    if (node == null) {
      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
    }

    if (clockseq == null) {
      // Per 4.2.2, randomize (14 bit) clockseq
      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
    }
  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,
  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.


  var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
  // cycle to simulate higher resolution clock

  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)

  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression

  if (dt < 0 && options.clockseq === undefined) {
    clockseq = clockseq + 1 & 0x3fff;
  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
  // time interval


  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
    nsecs = 0;
  } // Per 4.2.1.2 Throw error if too many uuids are requested


  if (nsecs >= 10000) {
    throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
  }

  _lastMSecs = msecs;
  _lastNSecs = nsecs;
  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch

  msecs += 12219292800000; // `time_low`

  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
  b[i++] = tl >>> 24 & 0xff;
  b[i++] = tl >>> 16 & 0xff;
  b[i++] = tl >>> 8 & 0xff;
  b[i++] = tl & 0xff; // `time_mid`

  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
  b[i++] = tmh >>> 8 & 0xff;
  b[i++] = tmh & 0xff; // `time_high_and_version`

  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version

  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)

  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`

  b[i++] = clockseq & 0xff; // `node`

  for (var n = 0; n < 6; ++n) {
    b[i + n] = node[n];
  }

  return buf || stringify(b);
}

export default v1;import v35 from './v35.js';
import md5 from './md5.js';
var v3 = v35('v3', 0x30, md5);
export default v3;import stringify from './stringify.js';
import parse from './parse.js';

function stringToBytes(str) {
  str = unescape(encodeURIComponent(str)); // UTF8 escape

  var bytes = [];

  for (var i = 0; i < str.length; ++i) {
    bytes.push(str.charCodeAt(i));
  }

  return bytes;
}

export var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
export var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
export default function (name, version, hashfunc) {
  function generateUUID(value, namespace, buf, offset) {
    if (typeof value === 'string') {
      value = stringToBytes(value);
    }

    if (typeof namespace === 'string') {
      namespace = parse(namespace);
    }

    if (namespace.length !== 16) {
      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
    } // Compute hash of namespace and value, Per 4.3
    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =
    // hashfunc([...namespace, ... value])`


    var bytes = new Uint8Array(16 + value.length);
    bytes.set(namespace);
    bytes.set(value, namespace.length);
    bytes = hashfunc(bytes);
    bytes[6] = bytes[6] & 0x0f | version;
    bytes[8] = bytes[8] & 0x3f | 0x80;

    if (buf) {
      offset = offset || 0;

      for (var i = 0; i < 16; ++i) {
        buf[offset + i] = bytes[i];
      }

      return buf;
    }

    return stringify(bytes);
  } // Function#name is not settable on some platforms (#270)


  try {
    generateUUID.name = name; // eslint-disable-next-line no-empty
  } catch (err) {} // For CommonJS default export support


  generateUUID.DNS = DNS;
  generateUUID.URL = URL;
  return generateUUID;
}import rng from './rng.js';
import stringify from './stringify.js';

function v4(options, buf, offset) {
  options = options || {};
  var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`

  rnds[6] = rnds[6] & 0x0f | 0x40;
  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided

  if (buf) {
    offset = offset || 0;

    for (var i = 0; i < 16; ++i) {
      buf[offset + i] = rnds[i];
    }

    return buf;
  }

  return stringify(rnds);
}

export default v4;import v35 from './v35.js';
import sha1 from './sha1.js';
var v5 = v35('v5', 0x50, sha1);
export default v5;import REGEX from './regex.js';

function validate(uuid) {
  return typeof uuid === 'string' && REGEX.test(uuid);
}

export default validate;import validate from './validate.js';

function version(uuid) {
  if (!validate(uuid)) {
    throw TypeError('Invalid UUID');
  }

  return parseInt(uuid.substr(14, 1), 16);
}

export default version;export { default as v1 } from './v1.js';
export { default as v3 } from './v3.js';
export { default as v4 } from './v4.js';
export { default as v5 } from './v5.js';
export { default as NIL } from './nil.js';
export { default as version } from './version.js';
export { default as validate } from './validate.js';
export { default as stringify } from './stringify.js';
export { default as parse } from './parse.js';import crypto from 'crypto';

function md5(bytes) {
  if (Array.isArray(bytes)) {
    bytes = Buffer.from(bytes);
  } else if (typeof bytes === 'string') {
    bytes = Buffer.from(bytes, 'utf8');
  }

  return crypto.createHash('md5').update(bytes).digest();
}

export default md5;export default '00000000-0000-0000-0000-000000000000';import validate from './validate.js';

function parse(uuid) {
  if (!validate(uuid)) {
    throw TypeError('Invalid UUID');
  }

  let v;
  const arr = new Uint8Array(16); // Parse ########-....-....-....-............

  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
  arr[1] = v >>> 16 & 0xff;
  arr[2] = v >>> 8 & 0xff;
  arr[3] = v & 0xff; // Parse ........-####-....-....-............

  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
  arr[5] = v & 0xff; // Parse ........-....-####-....-............

  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
  arr[7] = v & 0xff; // Parse ........-....-....-####-............

  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
  arr[9] = v & 0xff; // Parse ........-....-....-....-############
  // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)

  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
  arr[11] = v / 0x100000000 & 0xff;
  arr[12] = v >>> 24 & 0xff;
  arr[13] = v >>> 16 & 0xff;
  arr[14] = v >>> 8 & 0xff;
  arr[15] = v & 0xff;
  return arr;
}

export default parse;export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;import crypto from 'crypto';
const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate

let poolPtr = rnds8Pool.length;
export default function rng() {
  if (poolPtr > rnds8Pool.length - 16) {
    crypto.randomFillSync(rnds8Pool);
    poolPtr = 0;
  }

  return rnds8Pool.slice(poolPtr, poolPtr += 16);
}import crypto from 'crypto';

function sha1(bytes) {
  if (Array.isArray(bytes)) {
    bytes = Buffer.from(bytes);
  } else if (typeof bytes === 'string') {
    bytes = Buffer.from(bytes, 'utf8');
  }

  return crypto.createHash('sha1').update(bytes).digest();
}

export default sha1;import validate from './validate.js';
/**
 * Convert array of 16 byte values to UUID string format of the form:
 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 */

const byteToHex = [];

for (let i = 0; i < 256; ++i) {
  byteToHex.push((i + 0x100).toString(16).substr(1));
}

function stringify(arr, offset = 0) {
  // Note: Be careful editing this code!  It's been tuned for performance
  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
  const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one
  // of the following:
  // - One or more input array values don't map to a hex octet (leading to
  // "undefined" in the uuid)
  // - Invalid input values for the RFC `version` or `variant` fields

  if (!validate(uuid)) {
    throw TypeError('Stringified UUID is invalid');
  }

  return uuid;
}

export default stringify;import rng from './rng.js';
import stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html

let _nodeId;

let _clockseq; // Previous uuid creation time


let _lastMSecs = 0;
let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details

function v1(options, buf, offset) {
  let i = buf && offset || 0;
  const b = buf || new Array(16);
  options = options || {};
  let node = options.node || _nodeId;
  let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
  // specified.  We do this lazily to minimize issues related to insufficient
  // system entropy.  See #189

  if (node == null || clockseq == null) {
    const seedBytes = options.random || (options.rng || rng)();

    if (node == null) {
      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
    }

    if (clockseq == null) {
      // Per 4.2.2, randomize (14 bit) clockseq
      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
    }
  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,
  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.


  let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
  // cycle to simulate higher resolution clock

  let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)

  const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression

  if (dt < 0 && options.clockseq === undefined) {
    clockseq = clockseq + 1 & 0x3fff;
  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
  // time interval


  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
    nsecs = 0;
  } // Per 4.2.1.2 Throw error if too many uuids are requested


  if (nsecs >= 10000) {
    throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
  }

  _lastMSecs = msecs;
  _lastNSecs = nsecs;
  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch

  msecs += 12219292800000; // `time_low`

  const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
  b[i++] = tl >>> 24 & 0xff;
  b[i++] = tl >>> 16 & 0xff;
  b[i++] = tl >>> 8 & 0xff;
  b[i++] = tl & 0xff; // `time_mid`

  const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
  b[i++] = tmh >>> 8 & 0xff;
  b[i++] = tmh & 0xff; // `time_high_and_version`

  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version

  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)

  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`

  b[i++] = clockseq & 0xff; // `node`

  for (let n = 0; n < 6; ++n) {
    b[i + n] = node[n];
  }

  return buf || stringify(b);
}

export default v1;import v35 from './v35.js';
import md5 from './md5.js';
const v3 = v35('v3', 0x30, md5);
export default v3;import stringify from './stringify.js';
import parse from './parse.js';

function stringToBytes(str) {
  str = unescape(encodeURIComponent(str)); // UTF8 escape

  const bytes = [];

  for (let i = 0; i < str.length; ++i) {
    bytes.push(str.charCodeAt(i));
  }

  return bytes;
}

export const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
export const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
export default function (name, version, hashfunc) {
  function generateUUID(value, namespace, buf, offset) {
    if (typeof value === 'string') {
      value = stringToBytes(value);
    }

    if (typeof namespace === 'string') {
      namespace = parse(namespace);
    }

    if (namespace.length !== 16) {
      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
    } // Compute hash of namespace and value, Per 4.3
    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =
    // hashfunc([...namespace, ... value])`


    let bytes = new Uint8Array(16 + value.length);
    bytes.set(namespace);
    bytes.set(value, namespace.length);
    bytes = hashfunc(bytes);
    bytes[6] = bytes[6] & 0x0f | version;
    bytes[8] = bytes[8] & 0x3f | 0x80;

    if (buf) {
      offset = offset || 0;

      for (let i = 0; i < 16; ++i) {
        buf[offset + i] = bytes[i];
      }

      return buf;
    }

    return stringify(bytes);
  } // Function#name is not settable on some platforms (#270)


  try {
    generateUUID.name = name; // eslint-disable-next-line no-empty
  } catch (err) {} // For CommonJS default export support


  generateUUID.DNS = DNS;
  generateUUID.URL = URL;
  return generateUUID;
}import rng from './rng.js';
import stringify from './stringify.js';

function v4(options, buf, offset) {
  options = options || {};
  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`

  rnds[6] = rnds[6] & 0x0f | 0x40;
  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided

  if (buf) {
    offset = offset || 0;

    for (let i = 0; i < 16; ++i) {
      buf[offset + i] = rnds[i];
    }

    return buf;
  }

  return stringify(rnds);
}

export default v4;import v35 from './v35.js';
import sha1 from './sha1.js';
const v5 = v35('v5', 0x50, sha1);
export default v5;import REGEX from './regex.js';

function validate(uuid) {
  return typeof uuid === 'string' && REGEX.test(uuid);
}

export default validate;import validate from './validate.js';

function version(uuid) {
  if (!validate(uuid)) {
    throw TypeError('Invalid UUID');
  }

  return parseInt(uuid.substr(14, 1), 16);
}

export default version;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
Object.defineProperty(exports, "v1", {
  enumerable: true,
  get: function () {
    return _v.default;
  }
});
Object.defineProperty(exports, "v3", {
  enumerable: true,
  get: function () {
    return _v2.default;
  }
});
Object.defineProperty(exports, "v4", {
  enumerable: true,
  get: function () {
    return _v3.default;
  }
});
Object.defineProperty(exports, "v5", {
  enumerable: true,
  get: function () {
    return _v4.default;
  }
});
Object.defineProperty(exports, "NIL", {
  enumerable: true,
  get: function () {
    return _nil.default;
  }
});
Object.defineProperty(exports, "version", {
  enumerable: true,
  get: function () {
    return _version.default;
  }
});
Object.defineProperty(exports, "validate", {
  enumerable: true,
  get: function () {
    return _validate.default;
  }
});
Object.defineProperty(exports, "stringify", {
  enumerable: true,
  get: function () {
    return _stringify.default;
  }
});
Object.defineProperty(exports, "parse", {
  enumerable: true,
  get: function () {
    return _parse.default;
  }
});

var _v = _interopRequireDefault(require("./v1.js"));

var _v2 = _interopRequireDefault(require("./v3.js"));

var _v3 = _interopRequireDefault(require("./v4.js"));

var _v4 = _interopRequireDefault(require("./v5.js"));

var _nil = _interopRequireDefault(require("./nil.js"));

var _version = _interopRequireDefault(require("./version.js"));

var _validate = _interopRequireDefault(require("./validate.js"));

var _stringify = _interopRequireDefault(require("./stringify.js"));

var _parse = _interopRequireDefault(require("./parse.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

/*
 * Browser-compatible JavaScript MD5
 *
 * Modification of JavaScript MD5
 * https://github.com/blueimp/JavaScript-MD5
 *
 * Copyright 2011, Sebastian Tschan
 * https://blueimp.net
 *
 * Licensed under the MIT license:
 * https://opensource.org/licenses/MIT
 *
 * Based on
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */
function md5(bytes) {
  if (typeof bytes === 'string') {
    const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape

    bytes = new Uint8Array(msg.length);

    for (let i = 0; i < msg.length; ++i) {
      bytes[i] = msg.charCodeAt(i);
    }
  }

  return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));
}
/*
 * Convert an array of little-endian words to an array of bytes
 */


function md5ToHexEncodedArray(input) {
  const output = [];
  const length32 = input.length * 32;
  const hexTab = '0123456789abcdef';

  for (let i = 0; i < length32; i += 8) {
    const x = input[i >> 5] >>> i % 32 & 0xff;
    const hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);
    output.push(hex);
  }

  return output;
}
/**
 * Calculate output length with padding and bit length
 */


function getOutputLength(inputLength8) {
  return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;
}
/*
 * Calculate the MD5 of an array of little-endian words, and a bit length.
 */


function wordsToMd5(x, len) {
  /* append padding */
  x[len >> 5] |= 0x80 << len % 32;
  x[getOutputLength(len) - 1] = len;
  let a = 1732584193;
  let b = -271733879;
  let c = -1732584194;
  let d = 271733878;

  for (let i = 0; i < x.length; i += 16) {
    const olda = a;
    const oldb = b;
    const oldc = c;
    const oldd = d;
    a = md5ff(a, b, c, d, x[i], 7, -680876936);
    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
    b = md5gg(b, c, d, a, x[i], 20, -373897302);
    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
    d = md5hh(d, a, b, c, x[i], 11, -358537222);
    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
    a = md5ii(a, b, c, d, x[i], 6, -198630844);
    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
    a = safeAdd(a, olda);
    b = safeAdd(b, oldb);
    c = safeAdd(c, oldc);
    d = safeAdd(d, oldd);
  }

  return [a, b, c, d];
}
/*
 * Convert an array bytes to an array of little-endian words
 * Characters >255 have their high-byte silently ignored.
 */


function bytesToWords(input) {
  if (input.length === 0) {
    return [];
  }

  const length8 = input.length * 8;
  const output = new Uint32Array(getOutputLength(length8));

  for (let i = 0; i < length8; i += 8) {
    output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;
  }

  return output;
}
/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */


function safeAdd(x, y) {
  const lsw = (x & 0xffff) + (y & 0xffff);
  const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return msw << 16 | lsw & 0xffff;
}
/*
 * Bitwise rotate a 32-bit number to the left.
 */


function bitRotateLeft(num, cnt) {
  return num << cnt | num >>> 32 - cnt;
}
/*
 * These functions implement the four basic operations the algorithm uses.
 */


function md5cmn(q, a, b, x, s, t) {
  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
}

function md5ff(a, b, c, d, x, s, t) {
  return md5cmn(b & c | ~b & d, a, b, x, s, t);
}

function md5gg(a, b, c, d, x, s, t) {
  return md5cmn(b & d | c & ~d, a, b, x, s, t);
}

function md5hh(a, b, c, d, x, s, t) {
  return md5cmn(b ^ c ^ d, a, b, x, s, t);
}

function md5ii(a, b, c, d, x, s, t) {
  return md5cmn(c ^ (b | ~d), a, b, x, s, t);
}

var _default = md5;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _crypto = _interopRequireDefault(require("crypto"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function md5(bytes) {
  if (Array.isArray(bytes)) {
    bytes = Buffer.from(bytes);
  } else if (typeof bytes === 'string') {
    bytes = Buffer.from(bytes, 'utf8');
  }

  return _crypto.default.createHash('md5').update(bytes).digest();
}

var _default = md5;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;
var _default = '00000000-0000-0000-0000-000000000000';
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _validate = _interopRequireDefault(require("./validate.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function parse(uuid) {
  if (!(0, _validate.default)(uuid)) {
    throw TypeError('Invalid UUID');
  }

  let v;
  const arr = new Uint8Array(16); // Parse ########-....-....-....-............

  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
  arr[1] = v >>> 16 & 0xff;
  arr[2] = v >>> 8 & 0xff;
  arr[3] = v & 0xff; // Parse ........-####-....-....-............

  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
  arr[5] = v & 0xff; // Parse ........-....-####-....-............

  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
  arr[7] = v & 0xff; // Parse ........-....-....-####-............

  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
  arr[9] = v & 0xff; // Parse ........-....-....-....-############
  // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)

  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
  arr[11] = v / 0x100000000 & 0xff;
  arr[12] = v >>> 24 & 0xff;
  arr[13] = v >>> 16 & 0xff;
  arr[14] = v >>> 8 & 0xff;
  arr[15] = v & 0xff;
  return arr;
}

var _default = parse;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;
var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = rng;
// Unique ID creation requires a high quality random # generator. In the browser we therefore
// require the crypto API and do not support built-in fallback to lower quality random number
// generators (like Math.random()).
let getRandomValues;
const rnds8 = new Uint8Array(16);

function rng() {
  // lazy load so that environments that need to polyfill have a chance to do so
  if (!getRandomValues) {
    // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
    // find the complete implementation of crypto (msCrypto) on IE11.
    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);

    if (!getRandomValues) {
      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
    }
  }

  return getRandomValues(rnds8);
}"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = rng;

var _crypto = _interopRequireDefault(require("crypto"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate

let poolPtr = rnds8Pool.length;

function rng() {
  if (poolPtr > rnds8Pool.length - 16) {
    _crypto.default.randomFillSync(rnds8Pool);

    poolPtr = 0;
  }

  return rnds8Pool.slice(poolPtr, poolPtr += 16);
}"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

// Adapted from Chris Veness' SHA1 code at
// http://www.movable-type.co.uk/scripts/sha1.html
function f(s, x, y, z) {
  switch (s) {
    case 0:
      return x & y ^ ~x & z;

    case 1:
      return x ^ y ^ z;

    case 2:
      return x & y ^ x & z ^ y & z;

    case 3:
      return x ^ y ^ z;
  }
}

function ROTL(x, n) {
  return x << n | x >>> 32 - n;
}

function sha1(bytes) {
  const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
  const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];

  if (typeof bytes === 'string') {
    const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape

    bytes = [];

    for (let i = 0; i < msg.length; ++i) {
      bytes.push(msg.charCodeAt(i));
    }
  } else if (!Array.isArray(bytes)) {
    // Convert Array-like to Array
    bytes = Array.prototype.slice.call(bytes);
  }

  bytes.push(0x80);
  const l = bytes.length / 4 + 2;
  const N = Math.ceil(l / 16);
  const M = new Array(N);

  for (let i = 0; i < N; ++i) {
    const arr = new Uint32Array(16);

    for (let j = 0; j < 16; ++j) {
      arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];
    }

    M[i] = arr;
  }

  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);
  M[N - 1][14] = Math.floor(M[N - 1][14]);
  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;

  for (let i = 0; i < N; ++i) {
    const W = new Uint32Array(80);

    for (let t = 0; t < 16; ++t) {
      W[t] = M[i][t];
    }

    for (let t = 16; t < 80; ++t) {
      W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);
    }

    let a = H[0];
    let b = H[1];
    let c = H[2];
    let d = H[3];
    let e = H[4];

    for (let t = 0; t < 80; ++t) {
      const s = Math.floor(t / 20);
      const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;
      e = d;
      d = c;
      c = ROTL(b, 30) >>> 0;
      b = a;
      a = T;
    }

    H[0] = H[0] + a >>> 0;
    H[1] = H[1] + b >>> 0;
    H[2] = H[2] + c >>> 0;
    H[3] = H[3] + d >>> 0;
    H[4] = H[4] + e >>> 0;
  }

  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];
}

var _default = sha1;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _crypto = _interopRequireDefault(require("crypto"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function sha1(bytes) {
  if (Array.isArray(bytes)) {
    bytes = Buffer.from(bytes);
  } else if (typeof bytes === 'string') {
    bytes = Buffer.from(bytes, 'utf8');
  }

  return _crypto.default.createHash('sha1').update(bytes).digest();
}

var _default = sha1;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _validate = _interopRequireDefault(require("./validate.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * Convert array of 16 byte values to UUID string format of the form:
 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 */
const byteToHex = [];

for (let i = 0; i < 256; ++i) {
  byteToHex.push((i + 0x100).toString(16).substr(1));
}

function stringify(arr, offset = 0) {
  // Note: Be careful editing this code!  It's been tuned for performance
  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
  const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one
  // of the following:
  // - One or more input array values don't map to a hex octet (leading to
  // "undefined" in the uuid)
  // - Invalid input values for the RFC `version` or `variant` fields

  if (!(0, _validate.default)(uuid)) {
    throw TypeError('Stringified UUID is invalid');
  }

  return uuid;
}

var _default = stringify;
exports.default = _default;!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((r="undefined"!=typeof globalThis?globalThis:r||self).uuid={})}(this,(function(r){"use strict";var e,n=new Uint8Array(16);function t(){if(!e&&!(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(n)}var o=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function a(r){return"string"==typeof r&&o.test(r)}for(var i,u,f=[],s=0;s<256;++s)f.push((s+256).toString(16).substr(1));function c(r){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(f[r[e+0]]+f[r[e+1]]+f[r[e+2]]+f[r[e+3]]+"-"+f[r[e+4]]+f[r[e+5]]+"-"+f[r[e+6]]+f[r[e+7]]+"-"+f[r[e+8]]+f[r[e+9]]+"-"+f[r[e+10]]+f[r[e+11]]+f[r[e+12]]+f[r[e+13]]+f[r[e+14]]+f[r[e+15]]).toLowerCase();if(!a(n))throw TypeError("Stringified UUID is invalid");return n}var l=0,d=0;function v(r){if(!a(r))throw TypeError("Invalid UUID");var e,n=new Uint8Array(16);return n[0]=(e=parseInt(r.slice(0,8),16))>>>24,n[1]=e>>>16&255,n[2]=e>>>8&255,n[3]=255&e,n[4]=(e=parseInt(r.slice(9,13),16))>>>8,n[5]=255&e,n[6]=(e=parseInt(r.slice(14,18),16))>>>8,n[7]=255&e,n[8]=(e=parseInt(r.slice(19,23),16))>>>8,n[9]=255&e,n[10]=(e=parseInt(r.slice(24,36),16))/1099511627776&255,n[11]=e/4294967296&255,n[12]=e>>>24&255,n[13]=e>>>16&255,n[14]=e>>>8&255,n[15]=255&e,n}function p(r,e,n){function t(r,t,o,a){if("string"==typeof r&&(r=function(r){r=unescape(encodeURIComponent(r));for(var e=[],n=0;n<r.length;++n)e.push(r.charCodeAt(n));return e}(r)),"string"==typeof t&&(t=v(t)),16!==t.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var i=new Uint8Array(16+r.length);if(i.set(t),i.set(r,t.length),(i=n(i))[6]=15&i[6]|e,i[8]=63&i[8]|128,o){a=a||0;for(var u=0;u<16;++u)o[a+u]=i[u];return o}return c(i)}try{t.name=r}catch(r){}return t.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",t.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",t}function h(r){return 14+(r+64>>>9<<4)+1}function y(r,e){var n=(65535&r)+(65535&e);return(r>>16)+(e>>16)+(n>>16)<<16|65535&n}function g(r,e,n,t,o,a){return y((i=y(y(e,r),y(t,a)))<<(u=o)|i>>>32-u,n);var i,u}function m(r,e,n,t,o,a,i){return g(e&n|~e&t,r,e,o,a,i)}function w(r,e,n,t,o,a,i){return g(e&t|n&~t,r,e,o,a,i)}function b(r,e,n,t,o,a,i){return g(e^n^t,r,e,o,a,i)}function A(r,e,n,t,o,a,i){return g(n^(e|~t),r,e,o,a,i)}var U=p("v3",48,(function(r){if("string"==typeof r){var e=unescape(encodeURIComponent(r));r=new Uint8Array(e.length);for(var n=0;n<e.length;++n)r[n]=e.charCodeAt(n)}return function(r){for(var e=[],n=32*r.length,t="0123456789abcdef",o=0;o<n;o+=8){var a=r[o>>5]>>>o%32&255,i=parseInt(t.charAt(a>>>4&15)+t.charAt(15&a),16);e.push(i)}return e}(function(r,e){r[e>>5]|=128<<e%32,r[h(e)-1]=e;for(var n=1732584193,t=-271733879,o=-1732584194,a=271733878,i=0;i<r.length;i+=16){var u=n,f=t,s=o,c=a;n=m(n,t,o,a,r[i],7,-680876936),a=m(a,n,t,o,r[i+1],12,-389564586),o=m(o,a,n,t,r[i+2],17,606105819),t=m(t,o,a,n,r[i+3],22,-1044525330),n=m(n,t,o,a,r[i+4],7,-176418897),a=m(a,n,t,o,r[i+5],12,1200080426),o=m(o,a,n,t,r[i+6],17,-1473231341),t=m(t,o,a,n,r[i+7],22,-45705983),n=m(n,t,o,a,r[i+8],7,1770035416),a=m(a,n,t,o,r[i+9],12,-1958414417),o=m(o,a,n,t,r[i+10],17,-42063),t=m(t,o,a,n,r[i+11],22,-1990404162),n=m(n,t,o,a,r[i+12],7,1804603682),a=m(a,n,t,o,r[i+13],12,-40341101),o=m(o,a,n,t,r[i+14],17,-1502002290),n=w(n,t=m(t,o,a,n,r[i+15],22,1236535329),o,a,r[i+1],5,-165796510),a=w(a,n,t,o,r[i+6],9,-1069501632),o=w(o,a,n,t,r[i+11],14,643717713),t=w(t,o,a,n,r[i],20,-373897302),n=w(n,t,o,a,r[i+5],5,-701558691),a=w(a,n,t,o,r[i+10],9,38016083),o=w(o,a,n,t,r[i+15],14,-660478335),t=w(t,o,a,n,r[i+4],20,-405537848),n=w(n,t,o,a,r[i+9],5,568446438),a=w(a,n,t,o,r[i+14],9,-1019803690),o=w(o,a,n,t,r[i+3],14,-187363961),t=w(t,o,a,n,r[i+8],20,1163531501),n=w(n,t,o,a,r[i+13],5,-1444681467),a=w(a,n,t,o,r[i+2],9,-51403784),o=w(o,a,n,t,r[i+7],14,1735328473),n=b(n,t=w(t,o,a,n,r[i+12],20,-1926607734),o,a,r[i+5],4,-378558),a=b(a,n,t,o,r[i+8],11,-2022574463),o=b(o,a,n,t,r[i+11],16,1839030562),t=b(t,o,a,n,r[i+14],23,-35309556),n=b(n,t,o,a,r[i+1],4,-1530992060),a=b(a,n,t,o,r[i+4],11,1272893353),o=b(o,a,n,t,r[i+7],16,-155497632),t=b(t,o,a,n,r[i+10],23,-1094730640),n=b(n,t,o,a,r[i+13],4,681279174),a=b(a,n,t,o,r[i],11,-358537222),o=b(o,a,n,t,r[i+3],16,-722521979),t=b(t,o,a,n,r[i+6],23,76029189),n=b(n,t,o,a,r[i+9],4,-640364487),a=b(a,n,t,o,r[i+12],11,-421815835),o=b(o,a,n,t,r[i+15],16,530742520),n=A(n,t=b(t,o,a,n,r[i+2],23,-995338651),o,a,r[i],6,-198630844),a=A(a,n,t,o,r[i+7],10,1126891415),o=A(o,a,n,t,r[i+14],15,-1416354905),t=A(t,o,a,n,r[i+5],21,-57434055),n=A(n,t,o,a,r[i+12],6,1700485571),a=A(a,n,t,o,r[i+3],10,-1894986606),o=A(o,a,n,t,r[i+10],15,-1051523),t=A(t,o,a,n,r[i+1],21,-2054922799),n=A(n,t,o,a,r[i+8],6,1873313359),a=A(a,n,t,o,r[i+15],10,-30611744),o=A(o,a,n,t,r[i+6],15,-1560198380),t=A(t,o,a,n,r[i+13],21,1309151649),n=A(n,t,o,a,r[i+4],6,-145523070),a=A(a,n,t,o,r[i+11],10,-1120210379),o=A(o,a,n,t,r[i+2],15,718787259),t=A(t,o,a,n,r[i+9],21,-343485551),n=y(n,u),t=y(t,f),o=y(o,s),a=y(a,c)}return[n,t,o,a]}(function(r){if(0===r.length)return[];for(var e=8*r.length,n=new Uint32Array(h(e)),t=0;t<e;t+=8)n[t>>5]|=(255&r[t/8])<<t%32;return n}(r),8*r.length))}));function I(r,e,n,t){switch(r){case 0:return e&n^~e&t;case 1:return e^n^t;case 2:return e&n^e&t^n&t;case 3:return e^n^t}}function C(r,e){return r<<e|r>>>32-e}var R=p("v5",80,(function(r){var e=[1518500249,1859775393,2400959708,3395469782],n=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof r){var t=unescape(encodeURIComponent(r));r=[];for(var o=0;o<t.length;++o)r.push(t.charCodeAt(o))}else Array.isArray(r)||(r=Array.prototype.slice.call(r));r.push(128);for(var a=r.length/4+2,i=Math.ceil(a/16),u=new Array(i),f=0;f<i;++f){for(var s=new Uint32Array(16),c=0;c<16;++c)s[c]=r[64*f+4*c]<<24|r[64*f+4*c+1]<<16|r[64*f+4*c+2]<<8|r[64*f+4*c+3];u[f]=s}u[i-1][14]=8*(r.length-1)/Math.pow(2,32),u[i-1][14]=Math.floor(u[i-1][14]),u[i-1][15]=8*(r.length-1)&4294967295;for(var l=0;l<i;++l){for(var d=new Uint32Array(80),v=0;v<16;++v)d[v]=u[l][v];for(var p=16;p<80;++p)d[p]=C(d[p-3]^d[p-8]^d[p-14]^d[p-16],1);for(var h=n[0],y=n[1],g=n[2],m=n[3],w=n[4],b=0;b<80;++b){var A=Math.floor(b/20),U=C(h,5)+I(A,y,g,m)+w+e[A]+d[b]>>>0;w=m,m=g,g=C(y,30)>>>0,y=h,h=U}n[0]=n[0]+h>>>0,n[1]=n[1]+y>>>0,n[2]=n[2]+g>>>0,n[3]=n[3]+m>>>0,n[4]=n[4]+w>>>0}return[n[0]>>24&255,n[0]>>16&255,n[0]>>8&255,255&n[0],n[1]>>24&255,n[1]>>16&255,n[1]>>8&255,255&n[1],n[2]>>24&255,n[2]>>16&255,n[2]>>8&255,255&n[2],n[3]>>24&255,n[3]>>16&255,n[3]>>8&255,255&n[3],n[4]>>24&255,n[4]>>16&255,n[4]>>8&255,255&n[4]]}));r.NIL="00000000-0000-0000-0000-000000000000",r.parse=v,r.stringify=c,r.v1=function(r,e,n){var o=e&&n||0,a=e||new Array(16),f=(r=r||{}).node||i,s=void 0!==r.clockseq?r.clockseq:u;if(null==f||null==s){var v=r.random||(r.rng||t)();null==f&&(f=i=[1|v[0],v[1],v[2],v[3],v[4],v[5]]),null==s&&(s=u=16383&(v[6]<<8|v[7]))}var p=void 0!==r.msecs?r.msecs:Date.now(),h=void 0!==r.nsecs?r.nsecs:d+1,y=p-l+(h-d)/1e4;if(y<0&&void 0===r.clockseq&&(s=s+1&16383),(y<0||p>l)&&void 0===r.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");l=p,d=h,u=s;var g=(1e4*(268435455&(p+=122192928e5))+h)%4294967296;a[o++]=g>>>24&255,a[o++]=g>>>16&255,a[o++]=g>>>8&255,a[o++]=255&g;var m=p/4294967296*1e4&268435455;a[o++]=m>>>8&255,a[o++]=255&m,a[o++]=m>>>24&15|16,a[o++]=m>>>16&255,a[o++]=s>>>8|128,a[o++]=255&s;for(var w=0;w<6;++w)a[o+w]=f[w];return e||c(a)},r.v3=U,r.v4=function(r,e,n){var o=(r=r||{}).random||(r.rng||t)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,e){n=n||0;for(var a=0;a<16;++a)e[n+a]=o[a];return e}return c(o)},r.v5=R,r.validate=a,r.version=function(r){if(!a(r))throw TypeError("Invalid UUID");return parseInt(r.substr(14,1),16)},Object.defineProperty(r,"__esModule",{value:!0})}));!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidNIL=n()}(this,(function(){"use strict";return"00000000-0000-0000-0000-000000000000"}));!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidParse=n()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(n){if(!function(n){return"string"==typeof n&&e.test(n)}(n))throw TypeError("Invalid UUID");var t,i=new Uint8Array(16);return i[0]=(t=parseInt(n.slice(0,8),16))>>>24,i[1]=t>>>16&255,i[2]=t>>>8&255,i[3]=255&t,i[4]=(t=parseInt(n.slice(9,13),16))>>>8,i[5]=255&t,i[6]=(t=parseInt(n.slice(14,18),16))>>>8,i[7]=255&t,i[8]=(t=parseInt(n.slice(19,23),16))>>>8,i[9]=255&t,i[10]=(t=parseInt(n.slice(24,36),16))/1099511627776&255,i[11]=t/4294967296&255,i[12]=t>>>24&255,i[13]=t>>>16&255,i[14]=t>>>8&255,i[15]=255&t,i}}));!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidStringify=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function t(t){return"string"==typeof t&&e.test(t)}for(var i=[],n=0;n<256;++n)i.push((n+256).toString(16).substr(1));return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,f=(i[e[n+0]]+i[e[n+1]]+i[e[n+2]]+i[e[n+3]]+"-"+i[e[n+4]]+i[e[n+5]]+"-"+i[e[n+6]]+i[e[n+7]]+"-"+i[e[n+8]]+i[e[n+9]]+"-"+i[e[n+10]]+i[e[n+11]]+i[e[n+12]]+i[e[n+13]]+i[e[n+14]]+i[e[n+15]]).toLowerCase();if(!t(f))throw TypeError("Stringified UUID is invalid");return f}}));!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidv1=o()}(this,(function(){"use strict";var e,o=new Uint8Array(16);function t(){if(!e&&!(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(o)}var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function r(e){return"string"==typeof e&&n.test(e)}for(var i,u,s=[],a=0;a<256;++a)s.push((a+256).toString(16).substr(1));var d=0,f=0;return function(e,o,n){var a=o&&n||0,c=o||new Array(16),l=(e=e||{}).node||i,p=void 0!==e.clockseq?e.clockseq:u;if(null==l||null==p){var v=e.random||(e.rng||t)();null==l&&(l=i=[1|v[0],v[1],v[2],v[3],v[4],v[5]]),null==p&&(p=u=16383&(v[6]<<8|v[7]))}var y=void 0!==e.msecs?e.msecs:Date.now(),m=void 0!==e.nsecs?e.nsecs:f+1,g=y-d+(m-f)/1e4;if(g<0&&void 0===e.clockseq&&(p=p+1&16383),(g<0||y>d)&&void 0===e.nsecs&&(m=0),m>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");d=y,f=m,u=p;var h=(1e4*(268435455&(y+=122192928e5))+m)%4294967296;c[a++]=h>>>24&255,c[a++]=h>>>16&255,c[a++]=h>>>8&255,c[a++]=255&h;var w=y/4294967296*1e4&268435455;c[a++]=w>>>8&255,c[a++]=255&w,c[a++]=w>>>24&15|16,c[a++]=w>>>16&255,c[a++]=p>>>8|128,c[a++]=255&p;for(var b=0;b<6;++b)c[a+b]=l[b];return o||function(e){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(s[e[o+0]]+s[e[o+1]]+s[e[o+2]]+s[e[o+3]]+"-"+s[e[o+4]]+s[e[o+5]]+"-"+s[e[o+6]]+s[e[o+7]]+"-"+s[e[o+8]]+s[e[o+9]]+"-"+s[e[o+10]]+s[e[o+11]]+s[e[o+12]]+s[e[o+13]]+s[e[o+14]]+s[e[o+15]]).toLowerCase();if(!r(t))throw TypeError("Stringified UUID is invalid");return t}(c)}}));!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(n="undefined"!=typeof globalThis?globalThis:n||self).uuidv3=r()}(this,(function(){"use strict";var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function r(r){return"string"==typeof r&&n.test(r)}for(var e=[],t=0;t<256;++t)e.push((t+256).toString(16).substr(1));function i(n){return 14+(n+64>>>9<<4)+1}function o(n,r){var e=(65535&n)+(65535&r);return(n>>16)+(r>>16)+(e>>16)<<16|65535&e}function a(n,r,e,t,i,a){return o((f=o(o(r,n),o(t,a)))<<(u=i)|f>>>32-u,e);var f,u}function f(n,r,e,t,i,o,f){return a(r&e|~r&t,n,r,i,o,f)}function u(n,r,e,t,i,o,f){return a(r&t|e&~t,n,r,i,o,f)}function c(n,r,e,t,i,o,f){return a(r^e^t,n,r,i,o,f)}function s(n,r,e,t,i,o,f){return a(e^(r|~t),n,r,i,o,f)}return function(n,t,i){function o(n,o,a,f){if("string"==typeof n&&(n=function(n){n=unescape(encodeURIComponent(n));for(var r=[],e=0;e<n.length;++e)r.push(n.charCodeAt(e));return r}(n)),"string"==typeof o&&(o=function(n){if(!r(n))throw TypeError("Invalid UUID");var e,t=new Uint8Array(16);return t[0]=(e=parseInt(n.slice(0,8),16))>>>24,t[1]=e>>>16&255,t[2]=e>>>8&255,t[3]=255&e,t[4]=(e=parseInt(n.slice(9,13),16))>>>8,t[5]=255&e,t[6]=(e=parseInt(n.slice(14,18),16))>>>8,t[7]=255&e,t[8]=(e=parseInt(n.slice(19,23),16))>>>8,t[9]=255&e,t[10]=(e=parseInt(n.slice(24,36),16))/1099511627776&255,t[11]=e/4294967296&255,t[12]=e>>>24&255,t[13]=e>>>16&255,t[14]=e>>>8&255,t[15]=255&e,t}(o)),16!==o.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var u=new Uint8Array(16+n.length);if(u.set(o),u.set(n,o.length),(u=i(u))[6]=15&u[6]|t,u[8]=63&u[8]|128,a){f=f||0;for(var c=0;c<16;++c)a[f+c]=u[c];return a}return function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=(e[n[t+0]]+e[n[t+1]]+e[n[t+2]]+e[n[t+3]]+"-"+e[n[t+4]]+e[n[t+5]]+"-"+e[n[t+6]]+e[n[t+7]]+"-"+e[n[t+8]]+e[n[t+9]]+"-"+e[n[t+10]]+e[n[t+11]]+e[n[t+12]]+e[n[t+13]]+e[n[t+14]]+e[n[t+15]]).toLowerCase();if(!r(i))throw TypeError("Stringified UUID is invalid");return i}(u)}try{o.name=n}catch(n){}return o.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",o.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",o}("v3",48,(function(n){if("string"==typeof n){var r=unescape(encodeURIComponent(n));n=new Uint8Array(r.length);for(var e=0;e<r.length;++e)n[e]=r.charCodeAt(e)}return function(n){for(var r=[],e=32*n.length,t="0123456789abcdef",i=0;i<e;i+=8){var o=n[i>>5]>>>i%32&255,a=parseInt(t.charAt(o>>>4&15)+t.charAt(15&o),16);r.push(a)}return r}(function(n,r){n[r>>5]|=128<<r%32,n[i(r)-1]=r;for(var e=1732584193,t=-271733879,a=-1732584194,l=271733878,d=0;d<n.length;d+=16){var p=e,h=t,v=a,g=l;e=f(e,t,a,l,n[d],7,-680876936),l=f(l,e,t,a,n[d+1],12,-389564586),a=f(a,l,e,t,n[d+2],17,606105819),t=f(t,a,l,e,n[d+3],22,-1044525330),e=f(e,t,a,l,n[d+4],7,-176418897),l=f(l,e,t,a,n[d+5],12,1200080426),a=f(a,l,e,t,n[d+6],17,-1473231341),t=f(t,a,l,e,n[d+7],22,-45705983),e=f(e,t,a,l,n[d+8],7,1770035416),l=f(l,e,t,a,n[d+9],12,-1958414417),a=f(a,l,e,t,n[d+10],17,-42063),t=f(t,a,l,e,n[d+11],22,-1990404162),e=f(e,t,a,l,n[d+12],7,1804603682),l=f(l,e,t,a,n[d+13],12,-40341101),a=f(a,l,e,t,n[d+14],17,-1502002290),e=u(e,t=f(t,a,l,e,n[d+15],22,1236535329),a,l,n[d+1],5,-165796510),l=u(l,e,t,a,n[d+6],9,-1069501632),a=u(a,l,e,t,n[d+11],14,643717713),t=u(t,a,l,e,n[d],20,-373897302),e=u(e,t,a,l,n[d+5],5,-701558691),l=u(l,e,t,a,n[d+10],9,38016083),a=u(a,l,e,t,n[d+15],14,-660478335),t=u(t,a,l,e,n[d+4],20,-405537848),e=u(e,t,a,l,n[d+9],5,568446438),l=u(l,e,t,a,n[d+14],9,-1019803690),a=u(a,l,e,t,n[d+3],14,-187363961),t=u(t,a,l,e,n[d+8],20,1163531501),e=u(e,t,a,l,n[d+13],5,-1444681467),l=u(l,e,t,a,n[d+2],9,-51403784),a=u(a,l,e,t,n[d+7],14,1735328473),e=c(e,t=u(t,a,l,e,n[d+12],20,-1926607734),a,l,n[d+5],4,-378558),l=c(l,e,t,a,n[d+8],11,-2022574463),a=c(a,l,e,t,n[d+11],16,1839030562),t=c(t,a,l,e,n[d+14],23,-35309556),e=c(e,t,a,l,n[d+1],4,-1530992060),l=c(l,e,t,a,n[d+4],11,1272893353),a=c(a,l,e,t,n[d+7],16,-155497632),t=c(t,a,l,e,n[d+10],23,-1094730640),e=c(e,t,a,l,n[d+13],4,681279174),l=c(l,e,t,a,n[d],11,-358537222),a=c(a,l,e,t,n[d+3],16,-722521979),t=c(t,a,l,e,n[d+6],23,76029189),e=c(e,t,a,l,n[d+9],4,-640364487),l=c(l,e,t,a,n[d+12],11,-421815835),a=c(a,l,e,t,n[d+15],16,530742520),e=s(e,t=c(t,a,l,e,n[d+2],23,-995338651),a,l,n[d],6,-198630844),l=s(l,e,t,a,n[d+7],10,1126891415),a=s(a,l,e,t,n[d+14],15,-1416354905),t=s(t,a,l,e,n[d+5],21,-57434055),e=s(e,t,a,l,n[d+12],6,1700485571),l=s(l,e,t,a,n[d+3],10,-1894986606),a=s(a,l,e,t,n[d+10],15,-1051523),t=s(t,a,l,e,n[d+1],21,-2054922799),e=s(e,t,a,l,n[d+8],6,1873313359),l=s(l,e,t,a,n[d+15],10,-30611744),a=s(a,l,e,t,n[d+6],15,-1560198380),t=s(t,a,l,e,n[d+13],21,1309151649),e=s(e,t,a,l,n[d+4],6,-145523070),l=s(l,e,t,a,n[d+11],10,-1120210379),a=s(a,l,e,t,n[d+2],15,718787259),t=s(t,a,l,e,n[d+9],21,-343485551),e=o(e,p),t=o(t,h),a=o(a,v),l=o(l,g)}return[e,t,a,l]}(function(n){if(0===n.length)return[];for(var r=8*n.length,e=new Uint32Array(i(r)),t=0;t<r;t+=8)e[t>>5]|=(255&n[t/8])<<t%32;return e}(n),8*n.length))}))}));!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).uuidv4=e()}(this,(function(){"use strict";var t,e=new Uint8Array(16);function o(){if(!t&&!(t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return t(e)}var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function r(t){return"string"==typeof t&&n.test(t)}for(var i=[],u=0;u<256;++u)i.push((u+256).toString(16).substr(1));return function(t,e,n){var u=(t=t||{}).random||(t.rng||o)();if(u[6]=15&u[6]|64,u[8]=63&u[8]|128,e){n=n||0;for(var f=0;f<16;++f)e[n+f]=u[f];return e}return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=(i[t[e+0]]+i[t[e+1]]+i[t[e+2]]+i[t[e+3]]+"-"+i[t[e+4]]+i[t[e+5]]+"-"+i[t[e+6]]+i[t[e+7]]+"-"+i[t[e+8]]+i[t[e+9]]+"-"+i[t[e+10]]+i[t[e+11]]+i[t[e+12]]+i[t[e+13]]+i[t[e+14]]+i[t[e+15]]).toLowerCase();if(!r(o))throw TypeError("Stringified UUID is invalid");return o}(u)}}));!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).uuidv5=e()}(this,(function(){"use strict";var r=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function e(e){return"string"==typeof e&&r.test(e)}for(var t=[],n=0;n<256;++n)t.push((n+256).toString(16).substr(1));function a(r,e,t,n){switch(r){case 0:return e&t^~e&n;case 1:return e^t^n;case 2:return e&t^e&n^t&n;case 3:return e^t^n}}function o(r,e){return r<<e|r>>>32-e}return function(r,n,a){function o(r,o,i,f){if("string"==typeof r&&(r=function(r){r=unescape(encodeURIComponent(r));for(var e=[],t=0;t<r.length;++t)e.push(r.charCodeAt(t));return e}(r)),"string"==typeof o&&(o=function(r){if(!e(r))throw TypeError("Invalid UUID");var t,n=new Uint8Array(16);return n[0]=(t=parseInt(r.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(r.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(r.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(r.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(r.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}(o)),16!==o.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");var s=new Uint8Array(16+r.length);if(s.set(o),s.set(r,o.length),(s=a(s))[6]=15&s[6]|n,s[8]=63&s[8]|128,i){f=f||0;for(var u=0;u<16;++u)i[f+u]=s[u];return i}return function(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=(t[r[n+0]]+t[r[n+1]]+t[r[n+2]]+t[r[n+3]]+"-"+t[r[n+4]]+t[r[n+5]]+"-"+t[r[n+6]]+t[r[n+7]]+"-"+t[r[n+8]]+t[r[n+9]]+"-"+t[r[n+10]]+t[r[n+11]]+t[r[n+12]]+t[r[n+13]]+t[r[n+14]]+t[r[n+15]]).toLowerCase();if(!e(a))throw TypeError("Stringified UUID is invalid");return a}(s)}try{o.name=r}catch(r){}return o.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",o.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",o}("v5",80,(function(r){var e=[1518500249,1859775393,2400959708,3395469782],t=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof r){var n=unescape(encodeURIComponent(r));r=[];for(var i=0;i<n.length;++i)r.push(n.charCodeAt(i))}else Array.isArray(r)||(r=Array.prototype.slice.call(r));r.push(128);for(var f=r.length/4+2,s=Math.ceil(f/16),u=new Array(s),c=0;c<s;++c){for(var l=new Uint32Array(16),p=0;p<16;++p)l[p]=r[64*c+4*p]<<24|r[64*c+4*p+1]<<16|r[64*c+4*p+2]<<8|r[64*c+4*p+3];u[c]=l}u[s-1][14]=8*(r.length-1)/Math.pow(2,32),u[s-1][14]=Math.floor(u[s-1][14]),u[s-1][15]=8*(r.length-1)&4294967295;for(var d=0;d<s;++d){for(var h=new Uint32Array(80),v=0;v<16;++v)h[v]=u[d][v];for(var y=16;y<80;++y)h[y]=o(h[y-3]^h[y-8]^h[y-14]^h[y-16],1);for(var g=t[0],b=t[1],w=t[2],U=t[3],A=t[4],I=0;I<80;++I){var m=Math.floor(I/20),C=o(g,5)+a(m,b,w,U)+A+e[m]+h[I]>>>0;A=U,U=w,w=o(b,30)>>>0,b=g,g=C}t[0]=t[0]+g>>>0,t[1]=t[1]+b>>>0,t[2]=t[2]+w>>>0,t[3]=t[3]+U>>>0,t[4]=t[4]+A>>>0}return[t[0]>>24&255,t[0]>>16&255,t[0]>>8&255,255&t[0],t[1]>>24&255,t[1]>>16&255,t[1]>>8&255,255&t[1],t[2]>>24&255,t[2]>>16&255,t[2]>>8&255,255&t[2],t[3]>>24&255,t[3]>>16&255,t[3]>>8&255,255&t[3],t[4]>>24&255,t[4]>>16&255,t[4]>>8&255,255&t[4]]}))}));!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidValidate=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){return"string"==typeof t&&e.test(t)}}));!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).uuidVersion=t()}(this,(function(){"use strict";var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;return function(t){if(!function(t){return"string"==typeof t&&e.test(t)}(t))throw TypeError("Invalid UUID");return parseInt(t.substr(14,1),16)}}));"use strict";

var _assert = _interopRequireDefault(require("assert"));

var _v = _interopRequireDefault(require("./v1.js"));

var _v2 = _interopRequireDefault(require("./v3.js"));

var _v3 = _interopRequireDefault(require("./v4.js"));

var _v4 = _interopRequireDefault(require("./v5.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function usage() {
  console.log('Usage:');
  console.log('  uuid');
  console.log('  uuid v1');
  console.log('  uuid v3 <name> <namespace uuid>');
  console.log('  uuid v4');
  console.log('  uuid v5 <name> <namespace uuid>');
  console.log('  uuid --help');
  console.log('\nNote: <namespace uuid> may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122');
}

const args = process.argv.slice(2);

if (args.indexOf('--help') >= 0) {
  usage();
  process.exit(0);
}

const version = args.shift() || 'v4';

switch (version) {
  case 'v1':
    console.log((0, _v.default)());
    break;

  case 'v3':
    {
      const name = args.shift();
      let namespace = args.shift();
      (0, _assert.default)(name != null, 'v3 name not specified');
      (0, _assert.default)(namespace != null, 'v3 namespace not specified');

      if (namespace === 'URL') {
        namespace = _v2.default.URL;
      }

      if (namespace === 'DNS') {
        namespace = _v2.default.DNS;
      }

      console.log((0, _v2.default)(name, namespace));
      break;
    }

  case 'v4':
    console.log((0, _v3.default)());
    break;

  case 'v5':
    {
      const name = args.shift();
      let namespace = args.shift();
      (0, _assert.default)(name != null, 'v5 name not specified');
      (0, _assert.default)(namespace != null, 'v5 namespace not specified');

      if (namespace === 'URL') {
        namespace = _v4.default.URL;
      }

      if (namespace === 'DNS') {
        namespace = _v4.default.DNS;
      }

      console.log((0, _v4.default)(name, namespace));
      break;
    }

  default:
    usage();
    process.exit(1);
}"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _rng = _interopRequireDefault(require("./rng.js"));

var _stringify = _interopRequireDefault(require("./stringify.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

// **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html
let _nodeId;

let _clockseq; // Previous uuid creation time


let _lastMSecs = 0;
let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details

function v1(options, buf, offset) {
  let i = buf && offset || 0;
  const b = buf || new Array(16);
  options = options || {};
  let node = options.node || _nodeId;
  let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
  // specified.  We do this lazily to minimize issues related to insufficient
  // system entropy.  See #189

  if (node == null || clockseq == null) {
    const seedBytes = options.random || (options.rng || _rng.default)();

    if (node == null) {
      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
    }

    if (clockseq == null) {
      // Per 4.2.2, randomize (14 bit) clockseq
      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
    }
  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,
  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.


  let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
  // cycle to simulate higher resolution clock

  let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)

  const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression

  if (dt < 0 && options.clockseq === undefined) {
    clockseq = clockseq + 1 & 0x3fff;
  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
  // time interval


  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
    nsecs = 0;
  } // Per 4.2.1.2 Throw error if too many uuids are requested


  if (nsecs >= 10000) {
    throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
  }

  _lastMSecs = msecs;
  _lastNSecs = nsecs;
  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch

  msecs += 12219292800000; // `time_low`

  const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
  b[i++] = tl >>> 24 & 0xff;
  b[i++] = tl >>> 16 & 0xff;
  b[i++] = tl >>> 8 & 0xff;
  b[i++] = tl & 0xff; // `time_mid`

  const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
  b[i++] = tmh >>> 8 & 0xff;
  b[i++] = tmh & 0xff; // `time_high_and_version`

  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version

  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)

  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`

  b[i++] = clockseq & 0xff; // `node`

  for (let n = 0; n < 6; ++n) {
    b[i + n] = node[n];
  }

  return buf || (0, _stringify.default)(b);
}

var _default = v1;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _v = _interopRequireDefault(require("./v35.js"));

var _md = _interopRequireDefault(require("./md5.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const v3 = (0, _v.default)('v3', 0x30, _md.default);
var _default = v3;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = _default;
exports.URL = exports.DNS = void 0;

var _stringify = _interopRequireDefault(require("./stringify.js"));

var _parse = _interopRequireDefault(require("./parse.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function stringToBytes(str) {
  str = unescape(encodeURIComponent(str)); // UTF8 escape

  const bytes = [];

  for (let i = 0; i < str.length; ++i) {
    bytes.push(str.charCodeAt(i));
  }

  return bytes;
}

const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
exports.DNS = DNS;
const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
exports.URL = URL;

function _default(name, version, hashfunc) {
  function generateUUID(value, namespace, buf, offset) {
    if (typeof value === 'string') {
      value = stringToBytes(value);
    }

    if (typeof namespace === 'string') {
      namespace = (0, _parse.default)(namespace);
    }

    if (namespace.length !== 16) {
      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
    } // Compute hash of namespace and value, Per 4.3
    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =
    // hashfunc([...namespace, ... value])`


    let bytes = new Uint8Array(16 + value.length);
    bytes.set(namespace);
    bytes.set(value, namespace.length);
    bytes = hashfunc(bytes);
    bytes[6] = bytes[6] & 0x0f | version;
    bytes[8] = bytes[8] & 0x3f | 0x80;

    if (buf) {
      offset = offset || 0;

      for (let i = 0; i < 16; ++i) {
        buf[offset + i] = bytes[i];
      }

      return buf;
    }

    return (0, _stringify.default)(bytes);
  } // Function#name is not settable on some platforms (#270)


  try {
    generateUUID.name = name; // eslint-disable-next-line no-empty
  } catch (err) {} // For CommonJS default export support


  generateUUID.DNS = DNS;
  generateUUID.URL = URL;
  return generateUUID;
}"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _rng = _interopRequireDefault(require("./rng.js"));

var _stringify = _interopRequireDefault(require("./stringify.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function v4(options, buf, offset) {
  options = options || {};

  const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`


  rnds[6] = rnds[6] & 0x0f | 0x40;
  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided

  if (buf) {
    offset = offset || 0;

    for (let i = 0; i < 16; ++i) {
      buf[offset + i] = rnds[i];
    }

    return buf;
  }

  return (0, _stringify.default)(rnds);
}

var _default = v4;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _v = _interopRequireDefault(require("./v35.js"));

var _sha = _interopRequireDefault(require("./sha1.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const v5 = (0, _v.default)('v5', 0x50, _sha.default);
var _default = v5;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _regex = _interopRequireDefault(require("./regex.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function validate(uuid) {
  return typeof uuid === 'string' && _regex.default.test(uuid);
}

var _default = validate;
exports.default = _default;"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _validate = _interopRequireDefault(require("./validate.js"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function version(uuid) {
  if (!(0, _validate.default)(uuid)) {
    throw TypeError('Invalid UUID');
  }

  return parseInt(uuid.substr(14, 1), 16);
}

var _default = version;
exports.default = _default;The MIT License (MIT)

Copyright (c) 2010-2020 Robert Kieffer and other contributors

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "uuid",
  "version": "8.3.2",
  "description": "RFC4122 (v1, v4, and v5) UUIDs",
  "commitlint": {
    "extends": [
      "@commitlint/config-conventional"
    ]
  },
  "license": "MIT",
  "bin": {
    "uuid": "./dist/bin/uuid"
  },
  "sideEffects": false,
  "main": "./dist/index.js",
  "exports": {
    ".": {
      "node": {
        "module": "./dist/esm-node/index.js",
        "require": "./dist/index.js",
        "import": "./wrapper.mjs"
      },
      "default": "./dist/esm-browser/index.js"
    },
    "./package.json": "./package.json"
  },
  "module": "./dist/esm-node/index.js",
  "browser": {
    "./dist/md5.js": "./dist/md5-browser.js",
    "./dist/rng.js": "./dist/rng-browser.js",
    "./dist/sha1.js": "./dist/sha1-browser.js",
    "./dist/esm-node/index.js": "./dist/esm-browser/index.js"
  },
  "files": [
    "CHANGELOG.md",
    "CONTRIBUTING.md",
    "LICENSE.md",
    "README.md",
    "dist",
    "wrapper.mjs"
  ],
  "devDependencies": {
    "@babel/cli": "7.11.6",
    "@babel/core": "7.11.6",
    "@babel/preset-env": "7.11.5",
    "@commitlint/cli": "11.0.0",
    "@commitlint/config-conventional": "11.0.0",
    "@rollup/plugin-node-resolve": "9.0.0",
    "babel-eslint": "10.1.0",
    "bundlewatch": "0.3.1",
    "eslint": "7.10.0",
    "eslint-config-prettier": "6.12.0",
    "eslint-config-standard": "14.1.1",
    "eslint-plugin-import": "2.22.1",
    "eslint-plugin-node": "11.1.0",
    "eslint-plugin-prettier": "3.1.4",
    "eslint-plugin-promise": "4.2.1",
    "eslint-plugin-standard": "4.0.1",
    "husky": "4.3.0",
    "jest": "25.5.4",
    "lint-staged": "10.4.0",
    "npm-run-all": "4.1.5",
    "optional-dev-dependency": "2.0.1",
    "prettier": "2.1.2",
    "random-seed": "0.3.0",
    "rollup": "2.28.2",
    "rollup-plugin-terser": "7.0.2",
    "runmd": "1.3.2",
    "standard-version": "9.0.0"
  },
  "optionalDevDependencies": {
    "@wdio/browserstack-service": "6.4.0",
    "@wdio/cli": "6.4.0",
    "@wdio/jasmine-framework": "6.4.0",
    "@wdio/local-runner": "6.4.0",
    "@wdio/spec-reporter": "6.4.0",
    "@wdio/static-server-service": "6.4.0",
    "@wdio/sync": "6.4.0"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/uuidjs/uuid.git"
  },
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,jsx,json,md}": [
      "prettier --write"
    ],
    "*.{js,jsx}": [
      "eslint --fix"
    ]
  },
  "standard-version": {
    "scripts": {
      "postchangelog": "prettier --write CHANGELOG.md"
    }
  }
}import uuid from './dist/index.js';
export const v1 = uuid.v1;
export const v3 = uuid.v3;
export const v4 = uuid.v4;
export const v5 = uuid.v5;
export const NIL = uuid.NIL;
export const version = uuid.version;
export const validate = uuid.validate;
export const stringify = uuid.stringify;
export const parse = uuid.parse;
1.1.2 / 2017-09-23
==================

  * perf: improve header token parsing speed

1.1.1 / 2017-03-20
==================

  * perf: hoist regular expression

1.1.0 / 2015-09-29
==================

  * Only accept valid field names in the `field` argument
    - Ensures the resulting string is a valid HTTP header value

1.0.1 / 2015-07-08
==================

  * Fix setting empty header from empty `field`
  * perf: enable strict mode
  * perf: remove argument reassignments

1.0.0 / 2014-08-10
==================

  * Accept valid `Vary` header string as `field`
  * Add `vary.append` for low-level string manipulation
  * Move to `jshttp` orgainzation

0.1.0 / 2014-06-05
==================

  * Support array of fields to set

0.0.0 / 2014-06-04
==================

  * Initial release
/*!
 * vary
 * Copyright(c) 2014-2017 Douglas Christopher Wilson
 * MIT Licensed
 */

'use strict'

/**
 * Module exports.
 */

module.exports = vary
module.exports.append = append

/**
 * RegExp to match field-name in RFC 7230 sec 3.2
 *
 * field-name    = token
 * token         = 1*tchar
 * tchar         = "!" / "#" / "$" / "%" / "&" / "'" / "*"
 *               / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
 *               / DIGIT / ALPHA
 *               ; any VCHAR, except delimiters
 */

var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/

/**
 * Append a field to a vary header.
 *
 * @param {String} header
 * @param {String|Array} field
 * @return {String}
 * @public
 */

function append (header, field) {
  if (typeof header !== 'string') {
    throw new TypeError('header argument is required')
  }

  if (!field) {
    throw new TypeError('field argument is required')
  }

  // get fields array
  var fields = !Array.isArray(field)
    ? parse(String(field))
    : field

  // assert on invalid field names
  for (var j = 0; j < fields.length; j++) {
    if (!FIELD_NAME_REGEXP.test(fields[j])) {
      throw new TypeError('field argument contains an invalid header name')
    }
  }

  // existing, unspecified vary
  if (header === '*') {
    return header
  }

  // enumerate current values
  var val = header
  var vals = parse(header.toLowerCase())

  // unspecified vary
  if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {
    return '*'
  }

  for (var i = 0; i < fields.length; i++) {
    var fld = fields[i].toLowerCase()

    // append value (case-preserving)
    if (vals.indexOf(fld) === -1) {
      vals.push(fld)
      val = val
        ? val + ', ' + fields[i]
        : fields[i]
    }
  }

  return val
}

/**
 * Parse a vary header into an array.
 *
 * @param {String} header
 * @return {Array}
 * @private
 */

function parse (header) {
  var end = 0
  var list = []
  var start = 0

  // gather tokens
  for (var i = 0, len = header.length; i < len; i++) {
    switch (header.charCodeAt(i)) {
      case 0x20: /*   */
        if (start === end) {
          start = end = i + 1
        }
        break
      case 0x2c: /* , */
        list.push(header.substring(start, end))
        start = end = i + 1
        break
      default:
        end = i + 1
        break
    }
  }

  // final token
  list.push(header.substring(start, end))

  return list
}

/**
 * Mark that a request is varied on a header field.
 *
 * @param {Object} res
 * @param {String|Array} field
 * @public
 */

function vary (res, field) {
  if (!res || !res.getHeader || !res.setHeader) {
    // quack quack
    throw new TypeError('res argument is required')
  }

  // get existing header
  var val = res.getHeader('Vary') || ''
  var header = Array.isArray(val)
    ? val.join(', ')
    : String(val)

  // set new header
  if ((val = append(header, field))) {
    res.setHeader('Vary', val)
  }
}
(The MIT License)

Copyright (c) 2014-2017 Douglas Christopher Wilson

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "vary",
  "description": "Manipulate the HTTP Vary header",
  "version": "1.1.2",
  "author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
  "license": "MIT",
  "repository": "jshttp/vary",
  "devDependencies": {
    "beautify-benchmark": "0.2.4",
    "benchmark": "2.1.4",
    "eslint": "3.19.0",
    "eslint-config-standard": "10.2.1",
    "eslint-plugin-import": "2.7.0",
    "eslint-plugin-markdown": "1.0.0-beta.6",
    "eslint-plugin-node": "5.1.1",
    "eslint-plugin-promise": "3.5.0",
    "eslint-plugin-standard": "3.0.1",
    "istanbul": "0.4.5",
    "mocha": "2.5.3",
    "supertest": "1.1.0"
  },
  "files": [
    "HISTORY.md",
    "LICENSE",
    "README.md",
    "index.js"
  ],
  "engines": {
    "node": ">= 0.8"
  }
}The MIT License

Copyright (c) 2014 Julian Shapiro

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "velocity-animate",
  "version": "1.5.2",
  "description": "Accelerated JavaScript animation.",
  "homepage": "http://velocityjs.org",
  "license": "MIT",
  "authors": [
    {
      "name": "Julian Shapiro",
      "url": "http://julian.com/"
    },
    {
      "name": "Ryc O'Chet",
      "url": "https://github.com/Rycochet"
    }
  ],
  "main": "velocity.js",
  "repository": "julianshapiro/velocity",
  "files": [
    "velocity.js",
    "velocity.min.js",
    "velocity.ui.js",
    "velocity.ui.min.js"
  ],
  "devDependencies": {
    "grunt": "^1.0.1",
    "grunt-contrib-jshint": "~1.1.0",
    "grunt-contrib-uglify": "~2.2.0"
  }
}/*! VelocityJS.org (1.5.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */

/*************************
 Velocity jQuery Shim
 *************************/

/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */

/* This file contains the jQuery functions that Velocity relies on, thereby removing Velocity's dependency on a full copy of jQuery, and allowing it to work in any environment. */
/* These shimmed functions are only used if jQuery isn't present. If both this shim and jQuery are loaded, Velocity defaults to jQuery proper. */
/* Browser support: Using this shim instead of jQuery proper removes support for IE8. */

(function(window) {
	"use strict";
	/***************
	 Setup
	 ***************/

	/* If jQuery is already loaded, there's no point in loading this shim. */
	if (window.jQuery) {
		return;
	}

	/* jQuery base. */
	var $ = function(selector, context) {
		return new $.fn.init(selector, context);
	};

	/********************
	 Private Methods
	 ********************/

	/* jQuery */
	$.isWindow = function(obj) {
		/* jshint eqeqeq: false */
		return obj && obj === obj.window;
	};

	/* jQuery */
	$.type = function(obj) {
		if (!obj) {
			return obj + "";
		}

		return typeof obj === "object" || typeof obj === "function" ?
				class2type[toString.call(obj)] || "object" :
				typeof obj;
	};

	/* jQuery */
	$.isArray = Array.isArray || function(obj) {
		return $.type(obj) === "array";
	};

	/* jQuery */
	function isArraylike(obj) {
		var length = obj.length,
				type = $.type(obj);

		if (type === "function" || $.isWindow(obj)) {
			return false;
		}

		if (obj.nodeType === 1 && length) {
			return true;
		}

		return type === "array" || length === 0 || typeof length === "number" && length > 0 && (length - 1) in obj;
	}

	/***************
	 $ Methods
	 ***************/

	/* jQuery: Support removed for IE<9. */
	$.isPlainObject = function(obj) {
		var key;

		if (!obj || $.type(obj) !== "object" || obj.nodeType || $.isWindow(obj)) {
			return false;
		}

		try {
			if (obj.constructor &&
					!hasOwn.call(obj, "constructor") &&
					!hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
				return false;
			}
		} catch (e) {
			return false;
		}

		for (key in obj) {
		}

		return key === undefined || hasOwn.call(obj, key);
	};

	/* jQuery */
	$.each = function(obj, callback, args) {
		var value,
				i = 0,
				length = obj.length,
				isArray = isArraylike(obj);

		if (args) {
			if (isArray) {
				for (; i < length; i++) {
					value = callback.apply(obj[i], args);

					if (value === false) {
						break;
					}
				}
			} else {
				for (i in obj) {
					if (!obj.hasOwnProperty(i)) {
						continue;
					}
					value = callback.apply(obj[i], args);

					if (value === false) {
						break;
					}
				}
			}

		} else {
			if (isArray) {
				for (; i < length; i++) {
					value = callback.call(obj[i], i, obj[i]);

					if (value === false) {
						break;
					}
				}
			} else {
				for (i in obj) {
					if (!obj.hasOwnProperty(i)) {
						continue;
					}
					value = callback.call(obj[i], i, obj[i]);

					if (value === false) {
						break;
					}
				}
			}
		}

		return obj;
	};

	/* Custom */
	$.data = function(node, key, value) {
		/* $.getData() */
		if (value === undefined) {
			var getId = node[$.expando],
					store = getId && cache[getId];

			if (key === undefined) {
				return store;
			} else if (store) {
				if (key in store) {
					return store[key];
				}
			}
			/* $.setData() */
		} else if (key !== undefined) {
			var setId = node[$.expando] || (node[$.expando] = ++$.uuid);

			cache[setId] = cache[setId] || {};
			cache[setId][key] = value;

			return value;
		}
	};

	/* Custom */
	$.removeData = function(node, keys) {
		var id = node[$.expando],
				store = id && cache[id];

		if (store) {
			// Cleanup the entire store if no keys are provided.
			if (!keys) {
				delete cache[id];
			} else {
				$.each(keys, function(_, key) {
					delete store[key];
				});
			}
		}
	};

	/* jQuery */
	$.extend = function() {
		var src, copyIsArray, copy, name, options, clone,
				target = arguments[0] || {},
				i = 1,
				length = arguments.length,
				deep = false;

		if (typeof target === "boolean") {
			deep = target;

			target = arguments[i] || {};
			i++;
		}

		if (typeof target !== "object" && $.type(target) !== "function") {
			target = {};
		}

		if (i === length) {
			target = this;
			i--;
		}

		for (; i < length; i++) {
			if ((options = arguments[i])) {
				for (name in options) {
					if (!options.hasOwnProperty(name)) {
						continue;
					}
					src = target[name];
					copy = options[name];

					if (target === copy) {
						continue;
					}

					if (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) {
						if (copyIsArray) {
							copyIsArray = false;
							clone = src && $.isArray(src) ? src : [];

						} else {
							clone = src && $.isPlainObject(src) ? src : {};
						}

						target[name] = $.extend(deep, clone, copy);

					} else if (copy !== undefined) {
						target[name] = copy;
					}
				}
			}
		}

		return target;
	};

	/* jQuery 1.4.3 */
	$.queue = function(elem, type, data) {
		function $makeArray(arr, results) {
			var ret = results || [];

			if (arr) {
				if (isArraylike(Object(arr))) {
					/* $.merge */
					(function(first, second) {
						var len = +second.length,
								j = 0,
								i = first.length;

						while (j < len) {
							first[i++] = second[j++];
						}

						if (len !== len) {
							while (second[j] !== undefined) {
								first[i++] = second[j++];
							}
						}

						first.length = i;

						return first;
					})(ret, typeof arr === "string" ? [arr] : arr);
				} else {
					[].push.call(ret, arr);
				}
			}

			return ret;
		}

		if (!elem) {
			return;
		}

		type = (type || "fx") + "queue";

		var q = $.data(elem, type);

		if (!data) {
			return q || [];
		}

		if (!q || $.isArray(data)) {
			q = $.data(elem, type, $makeArray(data));
		} else {
			q.push(data);
		}

		return q;
	};

	/* jQuery 1.4.3 */
	$.dequeue = function(elems, type) {
		/* Custom: Embed element iteration. */
		$.each(elems.nodeType ? [elems] : elems, function(i, elem) {
			type = type || "fx";

			var queue = $.queue(elem, type),
					fn = queue.shift();

			if (fn === "inprogress") {
				fn = queue.shift();
			}

			if (fn) {
				if (type === "fx") {
					queue.unshift("inprogress");
				}

				fn.call(elem, function() {
					$.dequeue(elem, type);
				});
			}
		});
	};

	/******************
	 $.fn Methods
	 ******************/

	/* jQuery */
	$.fn = $.prototype = {
		init: function(selector) {
			/* Just return the element wrapped inside an array; don't proceed with the actual jQuery node wrapping process. */
			if (selector.nodeType) {
				this[0] = selector;

				return this;
			} else {
				throw new Error("Not a DOM node.");
			}
		},
		offset: function() {
			/* jQuery altered code: Dropped disconnected DOM node checking. */
			var box = this[0].getBoundingClientRect ? this[0].getBoundingClientRect() : {top: 0, left: 0};

			return {
				top: box.top + (window.pageYOffset || document.scrollTop || 0) - (document.clientTop || 0),
				left: box.left + (window.pageXOffset || document.scrollLeft || 0) - (document.clientLeft || 0)
			};
		},
		position: function() {
			/* jQuery */
			function offsetParentFn(elem) {
				var offsetParent = elem.offsetParent;

				while (offsetParent && (offsetParent.nodeName.toLowerCase() !== "html" && offsetParent.style && offsetParent.style.position.toLowerCase() === "static")) {
					offsetParent = offsetParent.offsetParent;
				}

				return offsetParent || document;
			}

			/* Zepto */
			var elem = this[0],
					offsetParent = offsetParentFn(elem),
					offset = this.offset(),
					parentOffset = /^(?:body|html)$/i.test(offsetParent.nodeName) ? {top: 0, left: 0} : $(offsetParent).offset();

			offset.top -= parseFloat(elem.style.marginTop) || 0;
			offset.left -= parseFloat(elem.style.marginLeft) || 0;

			if (offsetParent.style) {
				parentOffset.top += parseFloat(offsetParent.style.borderTopWidth) || 0;
				parentOffset.left += parseFloat(offsetParent.style.borderLeftWidth) || 0;
			}

			return {
				top: offset.top - parentOffset.top,
				left: offset.left - parentOffset.left
			};
		}
	};

	/**********************
	 Private Variables
	 **********************/

	/* For $.data() */
	var cache = {};
	$.expando = "velocity" + (new Date().getTime());
	$.uuid = 0;

	/* For $.queue() */
	var class2type = {},
			hasOwn = class2type.hasOwnProperty,
			toString = class2type.toString;

	var types = "Boolean Number String Function Array Date RegExp Object Error".split(" ");
	for (var i = 0; i < types.length; i++) {
		class2type["[object " + types[i] + "]"] = types[i].toLowerCase();
	}

	/* Makes $(node) possible, without having to call init. */
	$.fn.init.prototype = $.fn;

	/* Globalize Velocity onto the window, and assign its Utilities property. */
	window.Velocity = {Utilities: $};
})(window);

/******************
 Velocity.js
 ******************/

(function(factory) {
	"use strict";
	/* CommonJS module. */
	if (typeof module === "object" && typeof module.exports === "object") {
		module.exports = factory();
		/* AMD module. */
	} else if (typeof define === "function" && define.amd) {
		define(factory);
		/* Browser globals. */
	} else {
		factory();
	}
}(function() {
	"use strict";
	return function(global, window, document, undefined) {

		/***************
		 Summary
		 ***************/

		/*
		 - CSS: CSS stack that works independently from the rest of Velocity.
		 - animate(): Core animation method that iterates over the targeted elements and queues the incoming call onto each element individually.
		 - Pre-Queueing: Prepare the element for animation by instantiating its data cache and processing the call's options.
		 - Queueing: The logic that runs once the call has reached its point of execution in the element's $.queue() stack.
		 Most logic is placed here to avoid risking it becoming stale (if the element's properties have changed).
		 - Pushing: Consolidation of the tween data followed by its push onto the global in-progress calls container.
		 - tick(): The single requestAnimationFrame loop responsible for tweening all in-progress calls.
		 - completeCall(): Handles the cleanup process for each Velocity call.
		 */

		/*********************
		 Helper Functions
		 *********************/

		/* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */
		var IE = (function() {
			if (document.documentMode) {
				return document.documentMode;
			} else {
				for (var i = 7; i > 4; i--) {
					var div = document.createElement("div");

					div.innerHTML = "<!--[if IE " + i + "]><span></span><![endif]-->";

					if (div.getElementsByTagName("span").length) {
						div = null;

						return i;
					}
				}
			}

			return undefined;
		})();

		/* rAF shim. Gist: https://gist.github.com/julianshapiro/9497513 */
		var rAFShim = (function() {
			var timeLast = 0;

			return window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) {
				var timeCurrent = (new Date()).getTime(),
						timeDelta;

				/* Dynamically set delay on a per-tick basis to match 60fps. */
				/* Technique by Erik Moller. MIT license: https://gist.github.com/paulirish/1579671 */
				timeDelta = Math.max(0, 16 - (timeCurrent - timeLast));
				timeLast = timeCurrent + timeDelta;

				return setTimeout(function() {
					callback(timeCurrent + timeDelta);
				}, timeDelta);
			};
		})();

		var performance = (function() {
			var perf = window.performance || {};

			if (typeof perf.now !== "function") {
				var nowOffset = perf.timing && perf.timing.navigationStart ? perf.timing.navigationStart : (new Date()).getTime();

				perf.now = function() {
					return (new Date()).getTime() - nowOffset;
				};
			}
			return perf;
		})();

		/* Array compacting. Copyright Lo-Dash. MIT License: https://github.com/lodash/lodash/blob/master/LICENSE.txt */
		function compactSparseArray(array) {
			var index = -1,
					length = array ? array.length : 0,
					result = [];

			while (++index < length) {
				var value = array[index];

				if (value) {
					result.push(value);
				}
			}

			return result;
		}

		/**
		 * Shim for "fixing" IE's lack of support (IE < 9) for applying slice
		 * on host objects like NamedNodeMap, NodeList, and HTMLCollection
		 * (technically, since host objects have been implementation-dependent,
		 * at least before ES2015, IE hasn't needed to work this way).
		 * Also works on strings, fixes IE < 9 to allow an explicit undefined
		 * for the 2nd argument (as in Firefox), and prevents errors when
		 * called on other DOM objects.
		 */
		var _slice = (function() {
			var slice = Array.prototype.slice;

			try {
				// Can't be used with DOM elements in IE < 9
				slice.call(document.documentElement);
				return slice;
			} catch (e) { // Fails in IE < 9

				// This will work for genuine arrays, array-like objects, 
				// NamedNodeMap (attributes, entities, notations),
				// NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes),
				// and will not fail on other DOM objects (as do DOM elements in IE < 9)
				return function(begin, end) {
					var len = this.length;

					if (typeof begin !== "number") {
						begin = 0;
					}
					// IE < 9 gets unhappy with an undefined end argument
					if (typeof end !== "number") {
						end = len;
					}
					// For native Array objects, we use the native slice function
					if (this.slice) {
						return slice.call(this, begin, end);
					}
					// For array like object we handle it ourselves.
					var i,
							cloned = [],
							// Handle negative value for "begin"
							start = (begin >= 0) ? begin : Math.max(0, len + begin),
							// Handle negative value for "end"
							upTo = end < 0 ? len + end : Math.min(end, len),
							// Actual expected size of the slice
							size = upTo - start;

					if (size > 0) {
						cloned = new Array(size);
						if (this.charAt) {
							for (i = 0; i < size; i++) {
								cloned[i] = this.charAt(start + i);
							}
						} else {
							for (i = 0; i < size; i++) {
								cloned[i] = this[start + i];
							}
						}
					}
					return cloned;
				};
			}
		})();

		/* .indexOf doesn't exist in IE<9 */
		var _inArray = (function() {
			if (Array.prototype.includes) {
				return function(arr, val) {
					return arr.includes(val);
				};
			}
			if (Array.prototype.indexOf) {
				return function(arr, val) {
					return arr.indexOf(val) >= 0;
				};
			}
			return function(arr, val) {
				for (var i = 0; i < arr.length; i++) {
					if (arr[i] === val) {
						return true;
					}
				}
				return false;
			};
		});

		function sanitizeElements(elements) {
			/* Unwrap jQuery/Zepto objects. */
			if (Type.isWrapped(elements)) {
				elements = _slice.call(elements);
				/* Wrap a single element in an array so that $.each() can iterate with the element instead of its node's children. */
			} else if (Type.isNode(elements)) {
				elements = [elements];
			}

			return elements;
		}

		var Type = {
			isNumber: function(variable) {
				return (typeof variable === "number");
			},
			isString: function(variable) {
				return (typeof variable === "string");
			},
			isArray: Array.isArray || function(variable) {
				return Object.prototype.toString.call(variable) === "[object Array]";
			},
			isFunction: function(variable) {
				return Object.prototype.toString.call(variable) === "[object Function]";
			},
			isNode: function(variable) {
				return variable && variable.nodeType;
			},
			/* Determine if variable is an array-like wrapped jQuery, Zepto or similar element, or even a NodeList etc. */
			/* NOTE: HTMLFormElements also have a length. */
			isWrapped: function(variable) {
				return variable
						&& variable !== window
						&& Type.isNumber(variable.length)
						&& !Type.isString(variable)
						&& !Type.isFunction(variable)
						&& !Type.isNode(variable)
						&& (variable.length === 0 || Type.isNode(variable[0]));
			},
			isSVG: function(variable) {
				return window.SVGElement && (variable instanceof window.SVGElement);
			},
			isEmptyObject: function(variable) {
				for (var name in variable) {
					if (variable.hasOwnProperty(name)) {
						return false;
					}
				}

				return true;
			}
		};

		/*****************
		 Dependencies
		 *****************/

		var $,
				isJQuery = false;

		if (global.fn && global.fn.jquery) {
			$ = global;
			isJQuery = true;
		} else {
			$ = window.Velocity.Utilities;
		}

		if (IE <= 8 && !isJQuery) {
			throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");
		} else if (IE <= 7) {
			/* Revert to jQuery's $.animate(), and lose Velocity's extra features. */
			jQuery.fn.velocity = jQuery.fn.animate;

			/* Now that $.fn.velocity is aliased, abort this Velocity declaration. */
			return;
		}

		/*****************
		 Constants
		 *****************/

		var DURATION_DEFAULT = 400,
				EASING_DEFAULT = "swing";

		/*************
		 State
		 *************/

		var Velocity = {
			/* Container for page-wide Velocity state data. */
			State: {
				/* Detect mobile devices to determine if mobileHA should be turned on. */
				isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(window.navigator.userAgent),
				/* The mobileHA option's behavior changes on older Android devices (Gingerbread, versions 2.3.3-2.3.7). */
				isAndroid: /Android/i.test(window.navigator.userAgent),
				isGingerbread: /Android 2\.3\.[3-7]/i.test(window.navigator.userAgent),
				isChrome: window.chrome,
				isFirefox: /Firefox/i.test(window.navigator.userAgent),
				/* Create a cached element for re-use when checking for CSS property prefixes. */
				prefixElement: document.createElement("div"),
				/* Cache every prefix match to avoid repeating lookups. */
				prefixMatches: {},
				/* Cache the anchor used for animating window scrolling. */
				scrollAnchor: null,
				/* Cache the browser-specific property names associated with the scroll anchor. */
				scrollPropertyLeft: null,
				scrollPropertyTop: null,
				/* Keep track of whether our RAF tick is running. */
				isTicking: false,
				/* Container for every in-progress call to Velocity. */
				calls: [],
				delayedElements: {
					count: 0
				}
			},
			/* Velocity's custom CSS stack. Made global for unit testing. */
			CSS: {/* Defined below. */},
			/* A shim of the jQuery utility functions used by Velocity -- provided by Velocity's optional jQuery shim. */
			Utilities: $,
			/* Container for the user's custom animation redirects that are referenced by name in place of the properties map argument. */
			Redirects: {/* Manually registered by the user. */},
			Easings: {/* Defined below. */},
			/* Attempt to use ES6 Promises by default. Users can override this with a third-party promises library. */
			Promise: window.Promise,
			/* Velocity option defaults, which can be overriden by the user. */
			defaults: {
				queue: "",
				duration: DURATION_DEFAULT,
				easing: EASING_DEFAULT,
				begin: undefined,
				complete: undefined,
				progress: undefined,
				display: undefined,
				visibility: undefined,
				loop: false,
				delay: false,
				mobileHA: true,
				/* Advanced: Set to false to prevent property values from being cached between consecutive Velocity-initiated chain calls. */
				_cacheValues: true,
				/* Advanced: Set to false if the promise should always resolve on empty element lists. */
				promiseRejectEmpty: true
			},
			/* A design goal of Velocity is to cache data wherever possible in order to avoid DOM requerying. Accordingly, each element has a data cache. */
			init: function(element) {
				$.data(element, "velocity", {
					/* Store whether this is an SVG element, since its properties are retrieved and updated differently than standard HTML elements. */
					isSVG: Type.isSVG(element),
					/* Keep track of whether the element is currently being animated by Velocity.
					 This is used to ensure that property values are not transferred between non-consecutive (stale) calls. */
					isAnimating: false,
					/* A reference to the element's live computedStyle object. Learn more here: https://developer.mozilla.org/en/docs/Web/API/window.getComputedStyle */
					computedStyle: null,
					/* Tween data is cached for each animation on the element so that data can be passed across calls --
					 in particular, end values are used as subsequent start values in consecutive Velocity calls. */
					tweensContainer: null,
					/* The full root property values of each CSS hook being animated on this element are cached so that:
					 1) Concurrently-animating hooks sharing the same root can have their root values' merged into one while tweening.
					 2) Post-hook-injection root values can be transferred over to consecutively chained Velocity calls as starting root values. */
					rootPropertyValueCache: {},
					/* A cache for transform updates, which must be manually flushed via CSS.flushTransformCache(). */
					transformCache: {}
				});
			},
			/* A parallel to jQuery's $.css(), used for getting/setting Velocity's hooked CSS properties. */
			hook: null, /* Defined below. */
			/* Velocity-wide animation time remapping for testing purposes. */
			mock: false,
			version: {major: 1, minor: 5, patch: 2},
			/* Set to 1 or 2 (most verbose) to output debug info to console. */
			debug: false,
			/* Use rAF high resolution timestamp when available */
			timestamp: true,
			/* Pause all animations */
			pauseAll: function(queueName) {
				var currentTime = (new Date()).getTime();

				$.each(Velocity.State.calls, function(i, activeCall) {

					if (activeCall) {

						/* If we have a queueName and this call is not on that queue, skip */
						if (queueName !== undefined && ((activeCall[2].queue !== queueName) || (activeCall[2].queue === false))) {
							return true;
						}

						/* Set call to paused */
						activeCall[5] = {
							resume: false
						};
					}
				});

				/* Pause timers on any currently delayed calls */
				$.each(Velocity.State.delayedElements, function(k, element) {
					if (!element) {
						return;
					}
					pauseDelayOnElement(element, currentTime);
				});
			},
			/* Resume all animations */
			resumeAll: function(queueName) {
				var currentTime = (new Date()).getTime();

				$.each(Velocity.State.calls, function(i, activeCall) {

					if (activeCall) {

						/* If we have a queueName and this call is not on that queue, skip */
						if (queueName !== undefined && ((activeCall[2].queue !== queueName) || (activeCall[2].queue === false))) {
							return true;
						}

						/* Set call to resumed if it was paused */
						if (activeCall[5]) {
							activeCall[5].resume = true;
						}
					}
				});
				/* Resume timers on any currently delayed calls */
				$.each(Velocity.State.delayedElements, function(k, element) {
					if (!element) {
						return;
					}
					resumeDelayOnElement(element, currentTime);
				});
			}
		};

		/* Retrieve the appropriate scroll anchor and property name for the browser: https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY */
		if (window.pageYOffset !== undefined) {
			Velocity.State.scrollAnchor = window;
			Velocity.State.scrollPropertyLeft = "pageXOffset";
			Velocity.State.scrollPropertyTop = "pageYOffset";
		} else {
			Velocity.State.scrollAnchor = document.documentElement || document.body.parentNode || document.body;
			Velocity.State.scrollPropertyLeft = "scrollLeft";
			Velocity.State.scrollPropertyTop = "scrollTop";
		}

		/* Shorthand alias for jQuery's $.data() utility. */
		function Data(element) {
			/* Hardcode a reference to the plugin name. */
			var response = $.data(element, "velocity");

			/* jQuery <=1.4.2 returns null instead of undefined when no match is found. We normalize this behavior. */
			return response === null ? undefined : response;
		}

		/**************
		 Delay Timer
		 **************/

		function pauseDelayOnElement(element, currentTime) {
			/* Check for any delay timers, and pause the set timeouts (while preserving time data)
			 to be resumed when the "resume" command is issued */
			var data = Data(element);
			if (data && data.delayTimer && !data.delayPaused) {
				data.delayRemaining = data.delay - currentTime + data.delayBegin;
				data.delayPaused = true;
				clearTimeout(data.delayTimer.setTimeout);
			}
		}

		function resumeDelayOnElement(element, currentTime) {
			/* Check for any paused timers and resume */
			var data = Data(element);
			if (data && data.delayTimer && data.delayPaused) {
				/* If the element was mid-delay, re initiate the timeout with the remaining delay */
				data.delayPaused = false;
				data.delayTimer.setTimeout = setTimeout(data.delayTimer.next, data.delayRemaining);
			}
		}



		/**************
		 Easing
		 **************/

		/* Step easing generator. */
		function generateStep(steps) {
			return function(p) {
				return Math.round(p * steps) * (1 / steps);
			};
		}

		/* Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */
		function generateBezier(mX1, mY1, mX2, mY2) {
			var NEWTON_ITERATIONS = 4,
					NEWTON_MIN_SLOPE = 0.001,
					SUBDIVISION_PRECISION = 0.0000001,
					SUBDIVISION_MAX_ITERATIONS = 10,
					kSplineTableSize = 11,
					kSampleStepSize = 1.0 / (kSplineTableSize - 1.0),
					float32ArraySupported = "Float32Array" in window;

			/* Must contain four arguments. */
			if (arguments.length !== 4) {
				return false;
			}

			/* Arguments must be numbers. */
			for (var i = 0; i < 4; ++i) {
				if (typeof arguments[i] !== "number" || isNaN(arguments[i]) || !isFinite(arguments[i])) {
					return false;
				}
			}

			/* X values must be in the [0, 1] range. */
			mX1 = Math.min(mX1, 1);
			mX2 = Math.min(mX2, 1);
			mX1 = Math.max(mX1, 0);
			mX2 = Math.max(mX2, 0);

			var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);

			function A(aA1, aA2) {
				return 1.0 - 3.0 * aA2 + 3.0 * aA1;
			}
			function B(aA1, aA2) {
				return 3.0 * aA2 - 6.0 * aA1;
			}
			function C(aA1) {
				return 3.0 * aA1;
			}

			function calcBezier(aT, aA1, aA2) {
				return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
			}

			function getSlope(aT, aA1, aA2) {
				return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);
			}

			function newtonRaphsonIterate(aX, aGuessT) {
				for (var i = 0; i < NEWTON_ITERATIONS; ++i) {
					var currentSlope = getSlope(aGuessT, mX1, mX2);

					if (currentSlope === 0.0) {
						return aGuessT;
					}

					var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
					aGuessT -= currentX / currentSlope;
				}

				return aGuessT;
			}

			function calcSampleValues() {
				for (var i = 0; i < kSplineTableSize; ++i) {
					mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
				}
			}

			function binarySubdivide(aX, aA, aB) {
				var currentX, currentT, i = 0;

				do {
					currentT = aA + (aB - aA) / 2.0;
					currentX = calcBezier(currentT, mX1, mX2) - aX;
					if (currentX > 0.0) {
						aB = currentT;
					} else {
						aA = currentT;
					}
				} while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);

				return currentT;
			}

			function getTForX(aX) {
				var intervalStart = 0.0,
						currentSample = 1,
						lastSample = kSplineTableSize - 1;

				for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {
					intervalStart += kSampleStepSize;
				}

				--currentSample;

				var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]),
						guessForT = intervalStart + dist * kSampleStepSize,
						initialSlope = getSlope(guessForT, mX1, mX2);

				if (initialSlope >= NEWTON_MIN_SLOPE) {
					return newtonRaphsonIterate(aX, guessForT);
				} else if (initialSlope === 0.0) {
					return guessForT;
				} else {
					return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);
				}
			}

			var _precomputed = false;

			function precompute() {
				_precomputed = true;
				if (mX1 !== mY1 || mX2 !== mY2) {
					calcSampleValues();
				}
			}

			var f = function(aX) {
				if (!_precomputed) {
					precompute();
				}
				if (mX1 === mY1 && mX2 === mY2) {
					return aX;
				}
				if (aX === 0) {
					return 0;
				}
				if (aX === 1) {
					return 1;
				}

				return calcBezier(getTForX(aX), mY1, mY2);
			};

			f.getControlPoints = function() {
				return [{x: mX1, y: mY1}, {x: mX2, y: mY2}];
			};

			var str = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")";
			f.toString = function() {
				return str;
			};

			return f;
		}

		/* Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */
		/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass
		 then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */
		var generateSpringRK4 = (function() {
			function springAccelerationForState(state) {
				return (-state.tension * state.x) - (state.friction * state.v);
			}

			function springEvaluateStateWithDerivative(initialState, dt, derivative) {
				var state = {
					x: initialState.x + derivative.dx * dt,
					v: initialState.v + derivative.dv * dt,
					tension: initialState.tension,
					friction: initialState.friction
				};

				return {dx: state.v, dv: springAccelerationForState(state)};
			}

			function springIntegrateState(state, dt) {
				var a = {
					dx: state.v,
					dv: springAccelerationForState(state)
				},
						b = springEvaluateStateWithDerivative(state, dt * 0.5, a),
						c = springEvaluateStateWithDerivative(state, dt * 0.5, b),
						d = springEvaluateStateWithDerivative(state, dt, c),
						dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx),
						dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv);

				state.x = state.x + dxdt * dt;
				state.v = state.v + dvdt * dt;

				return state;
			}

			return function springRK4Factory(tension, friction, duration) {

				var initState = {
					x: -1,
					v: 0,
					tension: null,
					friction: null
				},
						path = [0],
						time_lapsed = 0,
						tolerance = 1 / 10000,
						DT = 16 / 1000,
						have_duration, dt, last_state;

				tension = parseFloat(tension) || 500;
				friction = parseFloat(friction) || 20;
				duration = duration || null;

				initState.tension = tension;
				initState.friction = friction;

				have_duration = duration !== null;

				/* Calculate the actual time it takes for this animation to complete with the provided conditions. */
				if (have_duration) {
					/* Run the simulation without a duration. */
					time_lapsed = springRK4Factory(tension, friction);
					/* Compute the adjusted time delta. */
					dt = time_lapsed / duration * DT;
				} else {
					dt = DT;
				}

				while (true) {
					/* Next/step function .*/
					last_state = springIntegrateState(last_state || initState, dt);
					/* Store the position. */
					path.push(1 + last_state.x);
					time_lapsed += 16;
					/* If the change threshold is reached, break. */
					if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) {
						break;
					}
				}

				/* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the
				 computed path and returns a snapshot of the position according to a given percentComplete. */
				return !have_duration ? time_lapsed : function(percentComplete) {
					return path[ (percentComplete * (path.length - 1)) | 0 ];
				};
			};
		}());

		/* jQuery easings. */
		Velocity.Easings = {
			linear: function(p) {
				return p;
			},
			swing: function(p) {
				return 0.5 - Math.cos(p * Math.PI) / 2;
			},
			/* Bonus "spring" easing, which is a less exaggerated version of easeInOutElastic. */
			spring: function(p) {
				return 1 - (Math.cos(p * 4.5 * Math.PI) * Math.exp(-p * 6));
			}
		};

		/* CSS3 and Robert Penner easings. */
		$.each(
				[
					["ease", [0.25, 0.1, 0.25, 1.0]],
					["ease-in", [0.42, 0.0, 1.00, 1.0]],
					["ease-out", [0.00, 0.0, 0.58, 1.0]],
					["ease-in-out", [0.42, 0.0, 0.58, 1.0]],
					["easeInSine", [0.47, 0, 0.745, 0.715]],
					["easeOutSine", [0.39, 0.575, 0.565, 1]],
					["easeInOutSine", [0.445, 0.05, 0.55, 0.95]],
					["easeInQuad", [0.55, 0.085, 0.68, 0.53]],
					["easeOutQuad", [0.25, 0.46, 0.45, 0.94]],
					["easeInOutQuad", [0.455, 0.03, 0.515, 0.955]],
					["easeInCubic", [0.55, 0.055, 0.675, 0.19]],
					["easeOutCubic", [0.215, 0.61, 0.355, 1]],
					["easeInOutCubic", [0.645, 0.045, 0.355, 1]],
					["easeInQuart", [0.895, 0.03, 0.685, 0.22]],
					["easeOutQuart", [0.165, 0.84, 0.44, 1]],
					["easeInOutQuart", [0.77, 0, 0.175, 1]],
					["easeInQuint", [0.755, 0.05, 0.855, 0.06]],
					["easeOutQuint", [0.23, 1, 0.32, 1]],
					["easeInOutQuint", [0.86, 0, 0.07, 1]],
					["easeInExpo", [0.95, 0.05, 0.795, 0.035]],
					["easeOutExpo", [0.19, 1, 0.22, 1]],
					["easeInOutExpo", [1, 0, 0, 1]],
					["easeInCirc", [0.6, 0.04, 0.98, 0.335]],
					["easeOutCirc", [0.075, 0.82, 0.165, 1]],
					["easeInOutCirc", [0.785, 0.135, 0.15, 0.86]]
				], function(i, easingArray) {
			Velocity.Easings[easingArray[0]] = generateBezier.apply(null, easingArray[1]);
		});

		/* Determine the appropriate easing type given an easing input. */
		function getEasing(value, duration) {
			var easing = value;

			/* The easing option can either be a string that references a pre-registered easing,
			 or it can be a two-/four-item array of integers to be converted into a bezier/spring function. */
			if (Type.isString(value)) {
				/* Ensure that the easing has been assigned to jQuery's Velocity.Easings object. */
				if (!Velocity.Easings[value]) {
					easing = false;
				}
			} else if (Type.isArray(value) && value.length === 1) {
				easing = generateStep.apply(null, value);
			} else if (Type.isArray(value) && value.length === 2) {
				/* springRK4 must be passed the animation's duration. */
				/* Note: If the springRK4 array contains non-numbers, generateSpringRK4() returns an easing
				 function generated with default tension and friction values. */
				easing = generateSpringRK4.apply(null, value.concat([duration]));
			} else if (Type.isArray(value) && value.length === 4) {
				/* Note: If the bezier array contains non-numbers, generateBezier() returns false. */
				easing = generateBezier.apply(null, value);
			} else {
				easing = false;
			}

			/* Revert to the Velocity-wide default easing type, or fall back to "swing" (which is also jQuery's default)
			 if the Velocity-wide default has been incorrectly modified. */
			if (easing === false) {
				if (Velocity.Easings[Velocity.defaults.easing]) {
					easing = Velocity.defaults.easing;
				} else {
					easing = EASING_DEFAULT;
				}
			}

			return easing;
		}

		/*****************
		 CSS Stack
		 *****************/

		/* The CSS object is a highly condensed and performant CSS stack that fully replaces jQuery's.
		 It handles the validation, getting, and setting of both standard CSS properties and CSS property hooks. */
		/* Note: A "CSS" shorthand is aliased so that our code is easier to read. */
		var CSS = Velocity.CSS = {
			/*************
			 RegEx
			 *************/

			RegEx: {
				isHex: /^#([A-f\d]{3}){1,2}$/i,
				/* Unwrap a property value's surrounding text, e.g. "rgba(4, 3, 2, 1)" ==> "4, 3, 2, 1" and "rect(4px 3px 2px 1px)" ==> "4px 3px 2px 1px". */
				valueUnwrap: /^[A-z]+\((.*)\)$/i,
				wrappedValueAlreadyExtracted: /[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,
				/* Split a multi-value property into an array of subvalues, e.g. "rgba(4, 3, 2, 1) 4px 3px 2px 1px" ==> [ "rgba(4, 3, 2, 1)", "4px", "3px", "2px", "1px" ]. */
				valueSplit: /([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/ig
			},
			/************
			 Lists
			 ************/

			Lists: {
				colors: ["fill", "stroke", "stopColor", "color", "backgroundColor", "borderColor", "borderTopColor", "borderRightColor", "borderBottomColor", "borderLeftColor", "outlineColor"],
				transformsBase: ["translateX", "translateY", "scale", "scaleX", "scaleY", "skewX", "skewY", "rotateZ"],
				transforms3D: ["transformPerspective", "translateZ", "scaleZ", "rotateX", "rotateY"],
				units: [
					"%", // relative
					"em", "ex", "ch", "rem", // font relative
					"vw", "vh", "vmin", "vmax", // viewport relative
					"cm", "mm", "Q", "in", "pc", "pt", "px", // absolute lengths
					"deg", "grad", "rad", "turn", // angles
					"s", "ms" // time
				],
				colorNames: {
					"aliceblue": "240,248,255",
					"antiquewhite": "250,235,215",
					"aquamarine": "127,255,212",
					"aqua": "0,255,255",
					"azure": "240,255,255",
					"beige": "245,245,220",
					"bisque": "255,228,196",
					"black": "0,0,0",
					"blanchedalmond": "255,235,205",
					"blueviolet": "138,43,226",
					"blue": "0,0,255",
					"brown": "165,42,42",
					"burlywood": "222,184,135",
					"cadetblue": "95,158,160",
					"chartreuse": "127,255,0",
					"chocolate": "210,105,30",
					"coral": "255,127,80",
					"cornflowerblue": "100,149,237",
					"cornsilk": "255,248,220",
					"crimson": "220,20,60",
					"cyan": "0,255,255",
					"darkblue": "0,0,139",
					"darkcyan": "0,139,139",
					"darkgoldenrod": "184,134,11",
					"darkgray": "169,169,169",
					"darkgrey": "169,169,169",
					"darkgreen": "0,100,0",
					"darkkhaki": "189,183,107",
					"darkmagenta": "139,0,139",
					"darkolivegreen": "85,107,47",
					"darkorange": "255,140,0",
					"darkorchid": "153,50,204",
					"darkred": "139,0,0",
					"darksalmon": "233,150,122",
					"darkseagreen": "143,188,143",
					"darkslateblue": "72,61,139",
					"darkslategray": "47,79,79",
					"darkturquoise": "0,206,209",
					"darkviolet": "148,0,211",
					"deeppink": "255,20,147",
					"deepskyblue": "0,191,255",
					"dimgray": "105,105,105",
					"dimgrey": "105,105,105",
					"dodgerblue": "30,144,255",
					"firebrick": "178,34,34",
					"floralwhite": "255,250,240",
					"forestgreen": "34,139,34",
					"fuchsia": "255,0,255",
					"gainsboro": "220,220,220",
					"ghostwhite": "248,248,255",
					"gold": "255,215,0",
					"goldenrod": "218,165,32",
					"gray": "128,128,128",
					"grey": "128,128,128",
					"greenyellow": "173,255,47",
					"green": "0,128,0",
					"honeydew": "240,255,240",
					"hotpink": "255,105,180",
					"indianred": "205,92,92",
					"indigo": "75,0,130",
					"ivory": "255,255,240",
					"khaki": "240,230,140",
					"lavenderblush": "255,240,245",
					"lavender": "230,230,250",
					"lawngreen": "124,252,0",
					"lemonchiffon": "255,250,205",
					"lightblue": "173,216,230",
					"lightcoral": "240,128,128",
					"lightcyan": "224,255,255",
					"lightgoldenrodyellow": "250,250,210",
					"lightgray": "211,211,211",
					"lightgrey": "211,211,211",
					"lightgreen": "144,238,144",
					"lightpink": "255,182,193",
					"lightsalmon": "255,160,122",
					"lightseagreen": "32,178,170",
					"lightskyblue": "135,206,250",
					"lightslategray": "119,136,153",
					"lightsteelblue": "176,196,222",
					"lightyellow": "255,255,224",
					"limegreen": "50,205,50",
					"lime": "0,255,0",
					"linen": "250,240,230",
					"magenta": "255,0,255",
					"maroon": "128,0,0",
					"mediumaquamarine": "102,205,170",
					"mediumblue": "0,0,205",
					"mediumorchid": "186,85,211",
					"mediumpurple": "147,112,219",
					"mediumseagreen": "60,179,113",
					"mediumslateblue": "123,104,238",
					"mediumspringgreen": "0,250,154",
					"mediumturquoise": "72,209,204",
					"mediumvioletred": "199,21,133",
					"midnightblue": "25,25,112",
					"mintcream": "245,255,250",
					"mistyrose": "255,228,225",
					"moccasin": "255,228,181",
					"navajowhite": "255,222,173",
					"navy": "0,0,128",
					"oldlace": "253,245,230",
					"olivedrab": "107,142,35",
					"olive": "128,128,0",
					"orangered": "255,69,0",
					"orange": "255,165,0",
					"orchid": "218,112,214",
					"palegoldenrod": "238,232,170",
					"palegreen": "152,251,152",
					"paleturquoise": "175,238,238",
					"palevioletred": "219,112,147",
					"papayawhip": "255,239,213",
					"peachpuff": "255,218,185",
					"peru": "205,133,63",
					"pink": "255,192,203",
					"plum": "221,160,221",
					"powderblue": "176,224,230",
					"purple": "128,0,128",
					"red": "255,0,0",
					"rosybrown": "188,143,143",
					"royalblue": "65,105,225",
					"saddlebrown": "139,69,19",
					"salmon": "250,128,114",
					"sandybrown": "244,164,96",
					"seagreen": "46,139,87",
					"seashell": "255,245,238",
					"sienna": "160,82,45",
					"silver": "192,192,192",
					"skyblue": "135,206,235",
					"slateblue": "106,90,205",
					"slategray": "112,128,144",
					"snow": "255,250,250",
					"springgreen": "0,255,127",
					"steelblue": "70,130,180",
					"tan": "210,180,140",
					"teal": "0,128,128",
					"thistle": "216,191,216",
					"tomato": "255,99,71",
					"turquoise": "64,224,208",
					"violet": "238,130,238",
					"wheat": "245,222,179",
					"whitesmoke": "245,245,245",
					"white": "255,255,255",
					"yellowgreen": "154,205,50",
					"yellow": "255,255,0"
				}
			},
			/************
			 Hooks
			 ************/

			/* Hooks allow a subproperty (e.g. "boxShadowBlur") of a compound-value CSS property
			 (e.g. "boxShadow: X Y Blur Spread Color") to be animated as if it were a discrete property. */
			/* Note: Beyond enabling fine-grained property animation, hooking is necessary since Velocity only
			 tweens properties with single numeric values; unlike CSS transitions, Velocity does not interpolate compound-values. */
			Hooks: {
				/********************
				 Registration
				 ********************/

				/* Templates are a concise way of indicating which subproperties must be individually registered for each compound-value CSS property. */
				/* Each template consists of the compound-value's base name, its constituent subproperty names, and those subproperties' default values. */
				templates: {
					"textShadow": ["Color X Y Blur", "black 0px 0px 0px"],
					"boxShadow": ["Color X Y Blur Spread", "black 0px 0px 0px 0px"],
					"clip": ["Top Right Bottom Left", "0px 0px 0px 0px"],
					"backgroundPosition": ["X Y", "0% 0%"],
					"transformOrigin": ["X Y Z", "50% 50% 0px"],
					"perspectiveOrigin": ["X Y", "50% 50%"]
				},
				/* A "registered" hook is one that has been converted from its template form into a live,
				 tweenable property. It contains data to associate it with its root property. */
				registered: {
					/* Note: A registered hook looks like this ==> textShadowBlur: [ "textShadow", 3 ],
					 which consists of the subproperty's name, the associated root property's name,
					 and the subproperty's position in the root's value. */
				},
				/* Convert the templates into individual hooks then append them to the registered object above. */
				register: function() {
					/* Color hooks registration: Colors are defaulted to white -- as opposed to black -- since colors that are
					 currently set to "transparent" default to their respective template below when color-animated,
					 and white is typically a closer match to transparent than black is. An exception is made for text ("color"),
					 which is almost always set closer to black than white. */
					for (var i = 0; i < CSS.Lists.colors.length; i++) {
						var rgbComponents = (CSS.Lists.colors[i] === "color") ? "0 0 0 1" : "255 255 255 1";
						CSS.Hooks.templates[CSS.Lists.colors[i]] = ["Red Green Blue Alpha", rgbComponents];
					}

					var rootProperty,
							hookTemplate,
							hookNames;

					/* In IE, color values inside compound-value properties are positioned at the end the value instead of at the beginning.
					 Thus, we re-arrange the templates accordingly. */
					if (IE) {
						for (rootProperty in CSS.Hooks.templates) {
							if (!CSS.Hooks.templates.hasOwnProperty(rootProperty)) {
								continue;
							}
							hookTemplate = CSS.Hooks.templates[rootProperty];
							hookNames = hookTemplate[0].split(" ");

							var defaultValues = hookTemplate[1].match(CSS.RegEx.valueSplit);

							if (hookNames[0] === "Color") {
								/* Reposition both the hook's name and its default value to the end of their respective strings. */
								hookNames.push(hookNames.shift());
								defaultValues.push(defaultValues.shift());

								/* Replace the existing template for the hook's root property. */
								CSS.Hooks.templates[rootProperty] = [hookNames.join(" "), defaultValues.join(" ")];
							}
						}
					}

					/* Hook registration. */
					for (rootProperty in CSS.Hooks.templates) {
						if (!CSS.Hooks.templates.hasOwnProperty(rootProperty)) {
							continue;
						}
						hookTemplate = CSS.Hooks.templates[rootProperty];
						hookNames = hookTemplate[0].split(" ");

						for (var j in hookNames) {
							if (!hookNames.hasOwnProperty(j)) {
								continue;
							}
							var fullHookName = rootProperty + hookNames[j],
									hookPosition = j;

							/* For each hook, register its full name (e.g. textShadowBlur) with its root property (e.g. textShadow)
							 and the hook's position in its template's default value string. */
							CSS.Hooks.registered[fullHookName] = [rootProperty, hookPosition];
						}
					}
				},
				/*****************************
				 Injection and Extraction
				 *****************************/

				/* Look up the root property associated with the hook (e.g. return "textShadow" for "textShadowBlur"). */
				/* Since a hook cannot be set directly (the browser won't recognize it), style updating for hooks is routed through the hook's root property. */
				getRoot: function(property) {
					var hookData = CSS.Hooks.registered[property];

					if (hookData) {
						return hookData[0];
					} else {
						/* If there was no hook match, return the property name untouched. */
						return property;
					}
				},
				getUnit: function(str, start) {
					var unit = (str.substr(start || 0, 5).match(/^[a-z%]+/) || [])[0] || "";

					if (unit && _inArray(CSS.Lists.units, unit)) {
						return unit;
					}
					return "";
				},
				fixColors: function(str) {
					return str.replace(/(rgba?\(\s*)?(\b[a-z]+\b)/g, function($0, $1, $2) {
						if (CSS.Lists.colorNames.hasOwnProperty($2)) {
							return ($1 ? $1 : "rgba(") + CSS.Lists.colorNames[$2] + ($1 ? "" : ",1)");
						}
						return $1 + $2;
					});
				},
				/* Convert any rootPropertyValue, null or otherwise, into a space-delimited list of hook values so that
				 the targeted hook can be injected or extracted at its standard position. */
				cleanRootPropertyValue: function(rootProperty, rootPropertyValue) {
					/* If the rootPropertyValue is wrapped with "rgb()", "clip()", etc., remove the wrapping to normalize the value before manipulation. */
					if (CSS.RegEx.valueUnwrap.test(rootPropertyValue)) {
						rootPropertyValue = rootPropertyValue.match(CSS.RegEx.valueUnwrap)[1];
					}

					/* If rootPropertyValue is a CSS null-value (from which there's inherently no hook value to extract),
					 default to the root's default value as defined in CSS.Hooks.templates. */
					/* Note: CSS null-values include "none", "auto", and "transparent". They must be converted into their
					 zero-values (e.g. textShadow: "none" ==> textShadow: "0px 0px 0px black") for hook manipulation to proceed. */
					if (CSS.Values.isCSSNullValue(rootPropertyValue)) {
						rootPropertyValue = CSS.Hooks.templates[rootProperty][1];
					}

					return rootPropertyValue;
				},
				/* Extracted the hook's value from its root property's value. This is used to get the starting value of an animating hook. */
				extractValue: function(fullHookName, rootPropertyValue) {
					var hookData = CSS.Hooks.registered[fullHookName];

					if (hookData) {
						var hookRoot = hookData[0],
								hookPosition = hookData[1];

						rootPropertyValue = CSS.Hooks.cleanRootPropertyValue(hookRoot, rootPropertyValue);

						/* Split rootPropertyValue into its constituent hook values then grab the desired hook at its standard position. */
						return rootPropertyValue.toString().match(CSS.RegEx.valueSplit)[hookPosition];
					} else {
						/* If the provided fullHookName isn't a registered hook, return the rootPropertyValue that was passed in. */
						return rootPropertyValue;
					}
				},
				/* Inject the hook's value into its root property's value. This is used to piece back together the root property
				 once Velocity has updated one of its individually hooked values through tweening. */
				injectValue: function(fullHookName, hookValue, rootPropertyValue) {
					var hookData = CSS.Hooks.registered[fullHookName];

					if (hookData) {
						var hookRoot = hookData[0],
								hookPosition = hookData[1],
								rootPropertyValueParts,
								rootPropertyValueUpdated;

						rootPropertyValue = CSS.Hooks.cleanRootPropertyValue(hookRoot, rootPropertyValue);

						/* Split rootPropertyValue into its individual hook values, replace the targeted value with hookValue,
						 then reconstruct the rootPropertyValue string. */
						rootPropertyValueParts = rootPropertyValue.toString().match(CSS.RegEx.valueSplit);
						rootPropertyValueParts[hookPosition] = hookValue;
						rootPropertyValueUpdated = rootPropertyValueParts.join(" ");

						return rootPropertyValueUpdated;
					} else {
						/* If the provided fullHookName isn't a registered hook, return the rootPropertyValue that was passed in. */
						return rootPropertyValue;
					}
				}
			},
			/*******************
			 Normalizations
			 *******************/

			/* Normalizations standardize CSS property manipulation by pollyfilling browser-specific implementations (e.g. opacity)
			 and reformatting special properties (e.g. clip, rgba) to look like standard ones. */
			Normalizations: {
				/* Normalizations are passed a normalization target (either the property's name, its extracted value, or its injected value),
				 the targeted element (which may need to be queried), and the targeted property value. */
				registered: {
					clip: function(type, element, propertyValue) {
						switch (type) {
							case "name":
								return "clip";
								/* Clip needs to be unwrapped and stripped of its commas during extraction. */
							case "extract":
								var extracted;

								/* If Velocity also extracted this value, skip extraction. */
								if (CSS.RegEx.wrappedValueAlreadyExtracted.test(propertyValue)) {
									extracted = propertyValue;
								} else {
									/* Remove the "rect()" wrapper. */
									extracted = propertyValue.toString().match(CSS.RegEx.valueUnwrap);

									/* Strip off commas. */
									extracted = extracted ? extracted[1].replace(/,(\s+)?/g, " ") : propertyValue;
								}

								return extracted;
								/* Clip needs to be re-wrapped during injection. */
							case "inject":
								return "rect(" + propertyValue + ")";
						}
					},
					blur: function(type, element, propertyValue) {
						switch (type) {
							case "name":
								return Velocity.State.isFirefox ? "filter" : "-webkit-filter";
							case "extract":
								var extracted = parseFloat(propertyValue);

								/* If extracted is NaN, meaning the value isn't already extracted. */
								if (!(extracted || extracted === 0)) {
									var blurComponent = propertyValue.toString().match(/blur\(([0-9]+[A-z]+)\)/i);

									/* If the filter string had a blur component, return just the blur value and unit type. */
									if (blurComponent) {
										extracted = blurComponent[1];
										/* If the component doesn't exist, default blur to 0. */
									} else {
										extracted = 0;
									}
								}

								return extracted;
								/* Blur needs to be re-wrapped during injection. */
							case "inject":
								/* For the blur effect to be fully de-applied, it needs to be set to "none" instead of 0. */
								if (!parseFloat(propertyValue)) {
									return "none";
								} else {
									return "blur(" + propertyValue + ")";
								}
						}
					},
					/* <=IE8 do not support the standard opacity property. They use filter:alpha(opacity=INT) instead. */
					opacity: function(type, element, propertyValue) {
						if (IE <= 8) {
							switch (type) {
								case "name":
									return "filter";
								case "extract":
									/* <=IE8 return a "filter" value of "alpha(opacity=\d{1,3})".
									 Extract the value and convert it to a decimal value to match the standard CSS opacity property's formatting. */
									var extracted = propertyValue.toString().match(/alpha\(opacity=(.*)\)/i);

									if (extracted) {
										/* Convert to decimal value. */
										propertyValue = extracted[1] / 100;
									} else {
										/* When extracting opacity, default to 1 since a null value means opacity hasn't been set. */
										propertyValue = 1;
									}

									return propertyValue;
								case "inject":
									/* Opacified elements are required to have their zoom property set to a non-zero value. */
									element.style.zoom = 1;

									/* Setting the filter property on elements with certain font property combinations can result in a
									 highly unappealing ultra-bolding effect. There's no way to remedy this throughout a tween, but dropping the
									 value altogether (when opacity hits 1) at leasts ensures that the glitch is gone post-tweening. */
									if (parseFloat(propertyValue) >= 1) {
										return "";
									} else {
										/* As per the filter property's spec, convert the decimal value to a whole number and wrap the value. */
										return "alpha(opacity=" + parseInt(parseFloat(propertyValue) * 100, 10) + ")";
									}
							}
							/* With all other browsers, normalization is not required; return the same values that were passed in. */
						} else {
							switch (type) {
								case "name":
									return "opacity";
								case "extract":
									return propertyValue;
								case "inject":
									return propertyValue;
							}
						}
					}
				},
				/*****************************
				 Batched Registrations
				 *****************************/

				/* Note: Batched normalizations extend the CSS.Normalizations.registered object. */
				register: function() {

					/*****************
					 Transforms
					 *****************/

					/* Transforms are the subproperties contained by the CSS "transform" property. Transforms must undergo normalization
					 so that they can be referenced in a properties map by their individual names. */
					/* Note: When transforms are "set", they are actually assigned to a per-element transformCache. When all transform
					 setting is complete complete, CSS.flushTransformCache() must be manually called to flush the values to the DOM.
					 Transform setting is batched in this way to improve performance: the transform style only needs to be updated
					 once when multiple transform subproperties are being animated simultaneously. */
					/* Note: IE9 and Android Gingerbread have support for 2D -- but not 3D -- transforms. Since animating unsupported
					 transform properties results in the browser ignoring the *entire* transform string, we prevent these 3D values
					 from being normalized for these browsers so that tweening skips these properties altogether
					 (since it will ignore them as being unsupported by the browser.) */
					if ((!IE || IE > 9) && !Velocity.State.isGingerbread) {
						/* Note: Since the standalone CSS "perspective" property and the CSS transform "perspective" subproperty
						 share the same name, the latter is given a unique token within Velocity: "transformPerspective". */
						CSS.Lists.transformsBase = CSS.Lists.transformsBase.concat(CSS.Lists.transforms3D);
					}

					for (var i = 0; i < CSS.Lists.transformsBase.length; i++) {
						/* Wrap the dynamically generated normalization function in a new scope so that transformName's value is
						 paired with its respective function. (Otherwise, all functions would take the final for loop's transformName.) */
						(function() {
							var transformName = CSS.Lists.transformsBase[i];

							CSS.Normalizations.registered[transformName] = function(type, element, propertyValue) {
								switch (type) {
									/* The normalized property name is the parent "transform" property -- the property that is actually set in CSS. */
									case "name":
										return "transform";
										/* Transform values are cached onto a per-element transformCache object. */
									case "extract":
										/* If this transform has yet to be assigned a value, return its null value. */
										if (Data(element) === undefined || Data(element).transformCache[transformName] === undefined) {
											/* Scale CSS.Lists.transformsBase default to 1 whereas all other transform properties default to 0. */
											return /^scale/i.test(transformName) ? 1 : 0;
											/* When transform values are set, they are wrapped in parentheses as per the CSS spec.
											 Thus, when extracting their values (for tween calculations), we strip off the parentheses. */
										}
										return Data(element).transformCache[transformName].replace(/[()]/g, "");
									case "inject":
										var invalid = false;

										/* If an individual transform property contains an unsupported unit type, the browser ignores the *entire* transform property.
										 Thus, protect users from themselves by skipping setting for transform values supplied with invalid unit types. */
										/* Switch on the base transform type; ignore the axis by removing the last letter from the transform's name. */
										switch (transformName.substr(0, transformName.length - 1)) {
											/* Whitelist unit types for each transform. */
											case "translate":
												invalid = !/(%|px|em|rem|vw|vh|\d)$/i.test(propertyValue);
												break;
												/* Since an axis-free "scale" property is supported as well, a little hack is used here to detect it by chopping off its last letter. */
											case "scal":
											case "scale":
												/* Chrome on Android has a bug in which scaled elements blur if their initial scale
												 value is below 1 (which can happen with forcefeeding). Thus, we detect a yet-unset scale property
												 and ensure that its first value is always 1. More info: http://stackoverflow.com/questions/10417890/css3-animations-with-transform-causes-blurred-elements-on-webkit/10417962#10417962 */
												if (Velocity.State.isAndroid && Data(element).transformCache[transformName] === undefined && propertyValue < 1) {
													propertyValue = 1;
												}

												invalid = !/(\d)$/i.test(propertyValue);
												break;
											case "skew":
												invalid = !/(deg|\d)$/i.test(propertyValue);
												break;
											case "rotate":
												invalid = !/(deg|\d)$/i.test(propertyValue);
												break;
										}

										if (!invalid) {
											/* As per the CSS spec, wrap the value in parentheses. */
											Data(element).transformCache[transformName] = "(" + propertyValue + ")";
										}

										/* Although the value is set on the transformCache object, return the newly-updated value for the calling code to process as normal. */
										return Data(element).transformCache[transformName];
								}
							};
						})();
					}

					/*************
					 Colors
					 *************/

					/* Since Velocity only animates a single numeric value per property, color animation is achieved by hooking the individual RGBA components of CSS color properties.
					 Accordingly, color values must be normalized (e.g. "#ff0000", "red", and "rgb(255, 0, 0)" ==> "255 0 0 1") so that their components can be injected/extracted by CSS.Hooks logic. */
					for (var j = 0; j < CSS.Lists.colors.length; j++) {
						/* Wrap the dynamically generated normalization function in a new scope so that colorName's value is paired with its respective function.
						 (Otherwise, all functions would take the final for loop's colorName.) */
						(function() {
							var colorName = CSS.Lists.colors[j];

							/* Note: In IE<=8, which support rgb but not rgba, color properties are reverted to rgb by stripping off the alpha component. */
							CSS.Normalizations.registered[colorName] = function(type, element, propertyValue) {
								switch (type) {
									case "name":
										return colorName;
										/* Convert all color values into the rgb format. (Old IE can return hex values and color names instead of rgb/rgba.) */
									case "extract":
										var extracted;

										/* If the color is already in its hookable form (e.g. "255 255 255 1") due to having been previously extracted, skip extraction. */
										if (CSS.RegEx.wrappedValueAlreadyExtracted.test(propertyValue)) {
											extracted = propertyValue;
										} else {
											var converted,
													colorNames = {
														black: "rgb(0, 0, 0)",
														blue: "rgb(0, 0, 255)",
														gray: "rgb(128, 128, 128)",
														green: "rgb(0, 128, 0)",
														red: "rgb(255, 0, 0)",
														white: "rgb(255, 255, 255)"
													};

											/* Convert color names to rgb. */
											if (/^[A-z]+$/i.test(propertyValue)) {
												if (colorNames[propertyValue] !== undefined) {
													converted = colorNames[propertyValue];
												} else {
													/* If an unmatched color name is provided, default to black. */
													converted = colorNames.black;
												}
												/* Convert hex values to rgb. */
											} else if (CSS.RegEx.isHex.test(propertyValue)) {
												converted = "rgb(" + CSS.Values.hexToRgb(propertyValue).join(" ") + ")";
												/* If the provided color doesn't match any of the accepted color formats, default to black. */
											} else if (!(/^rgba?\(/i.test(propertyValue))) {
												converted = colorNames.black;
											}

											/* Remove the surrounding "rgb/rgba()" string then replace commas with spaces and strip
											 repeated spaces (in case the value included spaces to begin with). */
											extracted = (converted || propertyValue).toString().match(CSS.RegEx.valueUnwrap)[1].replace(/,(\s+)?/g, " ");
										}

										/* So long as this isn't <=IE8, add a fourth (alpha) component if it's missing and default it to 1 (visible). */
										if ((!IE || IE > 8) && extracted.split(" ").length === 3) {
											extracted += " 1";
										}

										return extracted;
									case "inject":
										/* If we have a pattern then it might already have the right values */
										if (/^rgb/.test(propertyValue)) {
											return propertyValue;
										}

										/* If this is IE<=8 and an alpha component exists, strip it off. */
										if (IE <= 8) {
											if (propertyValue.split(" ").length === 4) {
												propertyValue = propertyValue.split(/\s+/).slice(0, 3).join(" ");
											}
											/* Otherwise, add a fourth (alpha) component if it's missing and default it to 1 (visible). */
										} else if (propertyValue.split(" ").length === 3) {
											propertyValue += " 1";
										}

										/* Re-insert the browser-appropriate wrapper("rgb/rgba()"), insert commas, and strip off decimal units
										 on all values but the fourth (R, G, and B only accept whole numbers). */
										return (IE <= 8 ? "rgb" : "rgba") + "(" + propertyValue.replace(/\s+/g, ",").replace(/\.(\d)+(?=,)/g, "") + ")";
								}
							};
						})();
					}

					/**************
					 Dimensions
					 **************/
					function augmentDimension(name, element, wantInner) {
						var isBorderBox = CSS.getPropertyValue(element, "boxSizing").toString().toLowerCase() === "border-box";

						if (isBorderBox === (wantInner || false)) {
							/* in box-sizing mode, the CSS width / height accessors already give the outerWidth / outerHeight. */
							var i,
									value,
									augment = 0,
									sides = name === "width" ? ["Left", "Right"] : ["Top", "Bottom"],
									fields = ["padding" + sides[0], "padding" + sides[1], "border" + sides[0] + "Width", "border" + sides[1] + "Width"];

							for (i = 0; i < fields.length; i++) {
								value = parseFloat(CSS.getPropertyValue(element, fields[i]));
								if (!isNaN(value)) {
									augment += value;
								}
							}
							return wantInner ? -augment : augment;
						}
						return 0;
					}
					function getDimension(name, wantInner) {
						return function(type, element, propertyValue) {
							switch (type) {
								case "name":
									return name;
								case "extract":
									return parseFloat(propertyValue) + augmentDimension(name, element, wantInner);
								case "inject":
									return (parseFloat(propertyValue) - augmentDimension(name, element, wantInner)) + "px";
							}
						};
					}
					CSS.Normalizations.registered.innerWidth = getDimension("width", true);
					CSS.Normalizations.registered.innerHeight = getDimension("height", true);
					CSS.Normalizations.registered.outerWidth = getDimension("width");
					CSS.Normalizations.registered.outerHeight = getDimension("height");
				}
			},
			/************************
			 CSS Property Names
			 ************************/

			Names: {
				/* Camelcase a property name into its JavaScript notation (e.g. "background-color" ==> "backgroundColor").
				 Camelcasing is used to normalize property names between and across calls. */
				camelCase: function(property) {
					return property.replace(/-(\w)/g, function(match, subMatch) {
						return subMatch.toUpperCase();
					});
				},
				/* For SVG elements, some properties (namely, dimensional ones) are GET/SET via the element's HTML attributes (instead of via CSS styles). */
				SVGAttribute: function(property) {
					var SVGAttributes = "width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";

					/* Certain browsers require an SVG transform to be applied as an attribute. (Otherwise, application via CSS is preferable due to 3D support.) */
					if (IE || (Velocity.State.isAndroid && !Velocity.State.isChrome)) {
						SVGAttributes += "|transform";
					}

					return new RegExp("^(" + SVGAttributes + ")$", "i").test(property);
				},
				/* Determine whether a property should be set with a vendor prefix. */
				/* If a prefixed version of the property exists, return it. Otherwise, return the original property name.
				 If the property is not at all supported by the browser, return a false flag. */
				prefixCheck: function(property) {
					/* If this property has already been checked, return the cached value. */
					if (Velocity.State.prefixMatches[property]) {
						return [Velocity.State.prefixMatches[property], true];
					} else {
						var vendors = ["", "Webkit", "Moz", "ms", "O"];

						for (var i = 0, vendorsLength = vendors.length; i < vendorsLength; i++) {
							var propertyPrefixed;

							if (i === 0) {
								propertyPrefixed = property;
							} else {
								/* Capitalize the first letter of the property to conform to JavaScript vendor prefix notation (e.g. webkitFilter). */
								propertyPrefixed = vendors[i] + property.replace(/^\w/, function(match) {
									return match.toUpperCase();
								});
							}

							/* Check if the browser supports this property as prefixed. */
							if (Type.isString(Velocity.State.prefixElement.style[propertyPrefixed])) {
								/* Cache the match. */
								Velocity.State.prefixMatches[property] = propertyPrefixed;

								return [propertyPrefixed, true];
							}
						}

						/* If the browser doesn't support this property in any form, include a false flag so that the caller can decide how to proceed. */
						return [property, false];
					}
				}
			},
			/************************
			 CSS Property Values
			 ************************/

			Values: {
				/* Hex to RGB conversion. Copyright Tim Down: http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb */
				hexToRgb: function(hex) {
					var shortformRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i,
							longformRegex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,
							rgbParts;

					hex = hex.replace(shortformRegex, function(m, r, g, b) {
						return r + r + g + g + b + b;
					});

					rgbParts = longformRegex.exec(hex);

					return rgbParts ? [parseInt(rgbParts[1], 16), parseInt(rgbParts[2], 16), parseInt(rgbParts[3], 16)] : [0, 0, 0];
				},
				isCSSNullValue: function(value) {
					/* The browser defaults CSS values that have not been set to either 0 or one of several possible null-value strings.
					 Thus, we check for both falsiness and these special strings. */
					/* Null-value checking is performed to default the special strings to 0 (for the sake of tweening) or their hook
					 templates as defined as CSS.Hooks (for the sake of hook injection/extraction). */
					/* Note: Chrome returns "rgba(0, 0, 0, 0)" for an undefined color whereas IE returns "transparent". */
					return (!value || /^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(value));
				},
				/* Retrieve a property's default unit type. Used for assigning a unit type when one is not supplied by the user. */
				getUnitType: function(property) {
					if (/^(rotate|skew)/i.test(property)) {
						return "deg";
					} else if (/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(property)) {
						/* The above properties are unitless. */
						return "";
					} else {
						/* Default to px for all other properties. */
						return "px";
					}
				},
				/* HTML elements default to an associated display type when they're not set to display:none. */
				/* Note: This function is used for correctly setting the non-"none" display value in certain Velocity redirects, such as fadeIn/Out. */
				getDisplayType: function(element) {
					var tagName = element && element.tagName.toString().toLowerCase();

					if (/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(tagName)) {
						return "inline";
					} else if (/^(li)$/i.test(tagName)) {
						return "list-item";
					} else if (/^(tr)$/i.test(tagName)) {
						return "table-row";
					} else if (/^(table)$/i.test(tagName)) {
						return "table";
					} else if (/^(tbody)$/i.test(tagName)) {
						return "table-row-group";
						/* Default to "block" when no match is found. */
					} else {
						return "block";
					}
				},
				/* The class add/remove functions are used to temporarily apply a "velocity-animating" class to elements while they're animating. */
				addClass: function(element, className) {
					if (element) {
						if (element.classList) {
							element.classList.add(className);
						} else if (Type.isString(element.className)) {
							// Element.className is around 15% faster then set/getAttribute
							element.className += (element.className.length ? " " : "") + className;
						} else {
							// Work around for IE strict mode animating SVG - and anything else that doesn't behave correctly - the same way jQuery does it
							var currentClass = element.getAttribute(IE <= 7 ? "className" : "class") || "";

							element.setAttribute("class", currentClass + (currentClass ? " " : "") + className);
						}
					}
				},
				removeClass: function(element, className) {
					if (element) {
						if (element.classList) {
							element.classList.remove(className);
						} else if (Type.isString(element.className)) {
							// Element.className is around 15% faster then set/getAttribute
							// TODO: Need some jsperf tests on performance - can we get rid of the regex and maybe use split / array manipulation?
							element.className = element.className.toString().replace(new RegExp("(^|\\s)" + className.split(" ").join("|") + "(\\s|$)", "gi"), " ");
						} else {
							// Work around for IE strict mode animating SVG - and anything else that doesn't behave correctly - the same way jQuery does it
							var currentClass = element.getAttribute(IE <= 7 ? "className" : "class") || "";

							element.setAttribute("class", currentClass.replace(new RegExp("(^|\s)" + className.split(" ").join("|") + "(\s|$)", "gi"), " "));
						}
					}
				}
			},
			/****************************
			 Style Getting & Setting
			 ****************************/

			/* The singular getPropertyValue, which routes the logic for all normalizations, hooks, and standard CSS properties. */
			getPropertyValue: function(element, property, rootPropertyValue, forceStyleLookup) {
				/* Get an element's computed property value. */
				/* Note: Retrieving the value of a CSS property cannot simply be performed by checking an element's
				 style attribute (which only reflects user-defined values). Instead, the browser must be queried for a property's
				 *computed* value. You can read more about getComputedStyle here: https://developer.mozilla.org/en/docs/Web/API/window.getComputedStyle */
				function computePropertyValue(element, property) {
					/* When box-sizing isn't set to border-box, height and width style values are incorrectly computed when an
					 element's scrollbars are visible (which expands the element's dimensions). Thus, we defer to the more accurate
					 offsetHeight/Width property, which includes the total dimensions for interior, border, padding, and scrollbar.
					 We subtract border and padding to get the sum of interior + scrollbar. */
					var computedValue = 0;

					/* IE<=8 doesn't support window.getComputedStyle, thus we defer to jQuery, which has an extensive array
					 of hacks to accurately retrieve IE8 property values. Re-implementing that logic here is not worth bloating the
					 codebase for a dying browser. The performance repercussions of using jQuery here are minimal since
					 Velocity is optimized to rarely (and sometimes never) query the DOM. Further, the $.css() codepath isn't that slow. */
					if (IE <= 8) {
						computedValue = $.css(element, property); /* GET */
						/* All other browsers support getComputedStyle. The returned live object reference is cached onto its
						 associated element so that it does not need to be refetched upon every GET. */
					} else {
						/* Browsers do not return height and width values for elements that are set to display:"none". Thus, we temporarily
						 toggle display to the element type's default value. */
						var toggleDisplay = false;

						if (/^(width|height)$/.test(property) && CSS.getPropertyValue(element, "display") === 0) {
							toggleDisplay = true;
							CSS.setPropertyValue(element, "display", CSS.Values.getDisplayType(element));
						}

						var revertDisplay = function() {
							if (toggleDisplay) {
								CSS.setPropertyValue(element, "display", "none");
							}
						};

						if (!forceStyleLookup) {
							if (property === "height" && CSS.getPropertyValue(element, "boxSizing").toString().toLowerCase() !== "border-box") {
								var contentBoxHeight = element.offsetHeight - (parseFloat(CSS.getPropertyValue(element, "borderTopWidth")) || 0) - (parseFloat(CSS.getPropertyValue(element, "borderBottomWidth")) || 0) - (parseFloat(CSS.getPropertyValue(element, "paddingTop")) || 0) - (parseFloat(CSS.getPropertyValue(element, "paddingBottom")) || 0);
								revertDisplay();

								return contentBoxHeight;
							} else if (property === "width" && CSS.getPropertyValue(element, "boxSizing").toString().toLowerCase() !== "border-box") {
								var contentBoxWidth = element.offsetWidth - (parseFloat(CSS.getPropertyValue(element, "borderLeftWidth")) || 0) - (parseFloat(CSS.getPropertyValue(element, "borderRightWidth")) || 0) - (parseFloat(CSS.getPropertyValue(element, "paddingLeft")) || 0) - (parseFloat(CSS.getPropertyValue(element, "paddingRight")) || 0);
								revertDisplay();

								return contentBoxWidth;
							}
						}

						var computedStyle;

						/* For elements that Velocity hasn't been called on directly (e.g. when Velocity queries the DOM on behalf
						 of a parent of an element its animating), perform a direct getComputedStyle lookup since the object isn't cached. */
						if (Data(element) === undefined) {
							computedStyle = window.getComputedStyle(element, null); /* GET */
							/* If the computedStyle object has yet to be cached, do so now. */
						} else if (!Data(element).computedStyle) {
							computedStyle = Data(element).computedStyle = window.getComputedStyle(element, null); /* GET */
							/* If computedStyle is cached, use it. */
						} else {
							computedStyle = Data(element).computedStyle;
						}

						/* IE and Firefox do not return a value for the generic borderColor -- they only return individual values for each border side's color.
						 Also, in all browsers, when border colors aren't all the same, a compound value is returned that Velocity isn't setup to parse.
						 So, as a polyfill for querying individual border side colors, we just return the top border's color and animate all borders from that value. */
						if (property === "borderColor") {
							property = "borderTopColor";
						}

						/* IE9 has a bug in which the "filter" property must be accessed from computedStyle using the getPropertyValue method
						 instead of a direct property lookup. The getPropertyValue method is slower than a direct lookup, which is why we avoid it by default. */
						if (IE === 9 && property === "filter") {
							computedValue = computedStyle.getPropertyValue(property); /* GET */
						} else {
							computedValue = computedStyle[property];
						}

						/* Fall back to the property's style value (if defined) when computedValue returns nothing,
						 which can happen when the element hasn't been painted. */
						if (computedValue === "" || computedValue === null) {
							computedValue = element.style[property];
						}

						revertDisplay();
					}

					/* For top, right, bottom, and left (TRBL) values that are set to "auto" on elements of "fixed" or "absolute" position,
					 defer to jQuery for converting "auto" to a numeric value. (For elements with a "static" or "relative" position, "auto" has the same
					 effect as being set to 0, so no conversion is necessary.) */
					/* An example of why numeric conversion is necessary: When an element with "position:absolute" has an untouched "left"
					 property, which reverts to "auto", left's value is 0 relative to its parent element, but is often non-zero relative
					 to its *containing* (not parent) element, which is the nearest "position:relative" ancestor or the viewport (and always the viewport in the case of "position:fixed"). */
					if (computedValue === "auto" && /^(top|right|bottom|left)$/i.test(property)) {
						var position = computePropertyValue(element, "position"); /* GET */

						/* For absolute positioning, jQuery's $.position() only returns values for top and left;
						 right and bottom will have their "auto" value reverted to 0. */
						/* Note: A jQuery object must be created here since jQuery doesn't have a low-level alias for $.position().
						 Not a big deal since we're currently in a GET batch anyway. */
						if (position === "fixed" || (position === "absolute" && /top|left/i.test(property))) {
							/* Note: jQuery strips the pixel unit from its returned values; we re-add it here to conform with computePropertyValue's behavior. */
							computedValue = $(element).position()[property] + "px"; /* GET */
						}
					}

					return computedValue;
				}

				var propertyValue;

				/* If this is a hooked property (e.g. "clipLeft" instead of the root property of "clip"),
				 extract the hook's value from a normalized rootPropertyValue using CSS.Hooks.extractValue(). */
				if (CSS.Hooks.registered[property]) {
					var hook = property,
							hookRoot = CSS.Hooks.getRoot(hook);

					/* If a cached rootPropertyValue wasn't passed in (which Velocity always attempts to do in order to avoid requerying the DOM),
					 query the DOM for the root property's value. */
					if (rootPropertyValue === undefined) {
						/* Since the browser is now being directly queried, use the official post-prefixing property name for this lookup. */
						rootPropertyValue = CSS.getPropertyValue(element, CSS.Names.prefixCheck(hookRoot)[0]); /* GET */
					}

					/* If this root has a normalization registered, peform the associated normalization extraction. */
					if (CSS.Normalizations.registered[hookRoot]) {
						rootPropertyValue = CSS.Normalizations.registered[hookRoot]("extract", element, rootPropertyValue);
					}

					/* Extract the hook's value. */
					propertyValue = CSS.Hooks.extractValue(hook, rootPropertyValue);

					/* If this is a normalized property (e.g. "opacity" becomes "filter" in <=IE8) or "translateX" becomes "transform"),
					 normalize the property's name and value, and handle the special case of transforms. */
					/* Note: Normalizing a property is mutually exclusive from hooking a property since hook-extracted values are strictly
					 numerical and therefore do not require normalization extraction. */
				} else if (CSS.Normalizations.registered[property]) {
					var normalizedPropertyName,
							normalizedPropertyValue;

					normalizedPropertyName = CSS.Normalizations.registered[property]("name", element);

					/* Transform values are calculated via normalization extraction (see below), which checks against the element's transformCache.
					 At no point do transform GETs ever actually query the DOM; initial stylesheet values are never processed.
					 This is because parsing 3D transform matrices is not always accurate and would bloat our codebase;
					 thus, normalization extraction defaults initial transform values to their zero-values (e.g. 1 for scaleX and 0 for translateX). */
					if (normalizedPropertyName !== "transform") {
						normalizedPropertyValue = computePropertyValue(element, CSS.Names.prefixCheck(normalizedPropertyName)[0]); /* GET */

						/* If the value is a CSS null-value and this property has a hook template, use that zero-value template so that hooks can be extracted from it. */
						if (CSS.Values.isCSSNullValue(normalizedPropertyValue) && CSS.Hooks.templates[property]) {
							normalizedPropertyValue = CSS.Hooks.templates[property][1];
						}
					}

					propertyValue = CSS.Normalizations.registered[property]("extract", element, normalizedPropertyValue);
				}

				/* If a (numeric) value wasn't produced via hook extraction or normalization, query the DOM. */
				if (!/^[\d-]/.test(propertyValue)) {
					/* For SVG elements, dimensional properties (which SVGAttribute() detects) are tweened via
					 their HTML attribute values instead of their CSS style values. */
					var data = Data(element);

					if (data && data.isSVG && CSS.Names.SVGAttribute(property)) {
						/* Since the height/width attribute values must be set manually, they don't reflect computed values.
						 Thus, we use use getBBox() to ensure we always get values for elements with undefined height/width attributes. */
						if (/^(height|width)$/i.test(property)) {
							/* Firefox throws an error if .getBBox() is called on an SVG that isn't attached to the DOM. */
							try {
								propertyValue = element.getBBox()[property];
							} catch (error) {
								propertyValue = 0;
							}
							/* Otherwise, access the attribute value directly. */
						} else {
							propertyValue = element.getAttribute(property);
						}
					} else {
						propertyValue = computePropertyValue(element, CSS.Names.prefixCheck(property)[0]); /* GET */
					}
				}

				/* Since property lookups are for animation purposes (which entails computing the numeric delta between start and end values),
				 convert CSS null-values to an integer of value 0. */
				if (CSS.Values.isCSSNullValue(propertyValue)) {
					propertyValue = 0;
				}

				if (Velocity.debug >= 2) {
					console.log("Get " + property + ": " + propertyValue);
				}

				return propertyValue;
			},
			/* The singular setPropertyValue, which routes the logic for all normalizations, hooks, and standard CSS properties. */
			setPropertyValue: function(element, property, propertyValue, rootPropertyValue, scrollData) {
				var propertyName = property;

				/* In order to be subjected to call options and element queueing, scroll animation is routed through Velocity as if it were a standard CSS property. */
				if (property === "scroll") {
					/* If a container option is present, scroll the container instead of the browser window. */
					if (scrollData.container) {
						scrollData.container["scroll" + scrollData.direction] = propertyValue;
						/* Otherwise, Velocity defaults to scrolling the browser window. */
					} else {
						if (scrollData.direction === "Left") {
							window.scrollTo(propertyValue, scrollData.alternateValue);
						} else {
							window.scrollTo(scrollData.alternateValue, propertyValue);
						}
					}
				} else {
					/* Transforms (translateX, rotateZ, etc.) are applied to a per-element transformCache object, which is manually flushed via flushTransformCache().
					 Thus, for now, we merely cache transforms being SET. */
					if (CSS.Normalizations.registered[property] && CSS.Normalizations.registered[property]("name", element) === "transform") {
						/* Perform a normalization injection. */
						/* Note: The normalization logic handles the transformCache updating. */
						CSS.Normalizations.registered[property]("inject", element, propertyValue);

						propertyName = "transform";
						propertyValue = Data(element).transformCache[property];
					} else {
						/* Inject hooks. */
						if (CSS.Hooks.registered[property]) {
							var hookName = property,
									hookRoot = CSS.Hooks.getRoot(property);

							/* If a cached rootPropertyValue was not provided, query the DOM for the hookRoot's current value. */
							rootPropertyValue = rootPropertyValue || CSS.getPropertyValue(element, hookRoot); /* GET */

							propertyValue = CSS.Hooks.injectValue(hookName, propertyValue, rootPropertyValue);
							property = hookRoot;
						}

						/* Normalize names and values. */
						if (CSS.Normalizations.registered[property]) {
							propertyValue = CSS.Normalizations.registered[property]("inject", element, propertyValue);
							property = CSS.Normalizations.registered[property]("name", element);
						}

						/* Assign the appropriate vendor prefix before performing an official style update. */
						propertyName = CSS.Names.prefixCheck(property)[0];

						/* A try/catch is used for IE<=8, which throws an error when "invalid" CSS values are set, e.g. a negative width.
						 Try/catch is avoided for other browsers since it incurs a performance overhead. */
						if (IE <= 8) {
							try {
								element.style[propertyName] = propertyValue;
							} catch (error) {
								if (Velocity.debug) {
									console.log("Browser does not support [" + propertyValue + "] for [" + propertyName + "]");
								}
							}
							/* SVG elements have their dimensional properties (width, height, x, y, cx, etc.) applied directly as attributes instead of as styles. */
							/* Note: IE8 does not support SVG elements, so it's okay that we skip it for SVG animation. */
						} else {
							var data = Data(element);

							if (data && data.isSVG && CSS.Names.SVGAttribute(property)) {
								/* Note: For SVG attributes, vendor-prefixed property names are never used. */
								/* Note: Not all CSS properties can be animated via attributes, but the browser won't throw an error for unsupported properties. */
								element.setAttribute(property, propertyValue);
							} else {
								element.style[propertyName] = propertyValue;
							}
						}

						if (Velocity.debug >= 2) {
							console.log("Set " + property + " (" + propertyName + "): " + propertyValue);
						}
					}
				}

				/* Return the normalized property name and value in case the caller wants to know how these values were modified before being applied to the DOM. */
				return [propertyName, propertyValue];
			},
			/* To increase performance by batching transform updates into a single SET, transforms are not directly applied to an element until flushTransformCache() is called. */
			/* Note: Velocity applies transform properties in the same order that they are chronogically introduced to the element's CSS styles. */
			flushTransformCache: function(element) {
				var transformString = "",
						data = Data(element);

				/* Certain browsers require that SVG transforms be applied as an attribute. However, the SVG transform attribute takes a modified version of CSS's transform string
				 (units are dropped and, except for skewX/Y, subproperties are merged into their master property -- e.g. scaleX and scaleY are merged into scale(X Y). */
				if ((IE || (Velocity.State.isAndroid && !Velocity.State.isChrome)) && data && data.isSVG) {
					/* Since transform values are stored in their parentheses-wrapped form, we use a helper function to strip out their numeric values.
					 Further, SVG transform properties only take unitless (representing pixels) values, so it's okay that parseFloat() strips the unit suffixed to the float value. */
					var getTransformFloat = function(transformProperty) {
						return parseFloat(CSS.getPropertyValue(element, transformProperty));
					};

					/* Create an object to organize all the transforms that we'll apply to the SVG element. To keep the logic simple,
					 we process *all* transform properties -- even those that may not be explicitly applied (since they default to their zero-values anyway). */
					var SVGTransforms = {
						translate: [getTransformFloat("translateX"), getTransformFloat("translateY")],
						skewX: [getTransformFloat("skewX")], skewY: [getTransformFloat("skewY")],
						/* If the scale property is set (non-1), use that value for the scaleX and scaleY values
						 (this behavior mimics the result of animating all these properties at once on HTML elements). */
						scale: getTransformFloat("scale") !== 1 ? [getTransformFloat("scale"), getTransformFloat("scale")] : [getTransformFloat("scaleX"), getTransformFloat("scaleY")],
						/* Note: SVG's rotate transform takes three values: rotation degrees followed by the X and Y values
						 defining the rotation's origin point. We ignore the origin values (default them to 0). */
						rotate: [getTransformFloat("rotateZ"), 0, 0]
					};

					/* Iterate through the transform properties in the user-defined property map order.
					 (This mimics the behavior of non-SVG transform animation.) */
					$.each(Data(element).transformCache, function(transformName) {
						/* Except for with skewX/Y, revert the axis-specific transform subproperties to their axis-free master
						 properties so that they match up with SVG's accepted transform properties. */
						if (/^translate/i.test(transformName)) {
							transformName = "translate";
						} else if (/^scale/i.test(transformName)) {
							transformName = "scale";
						} else if (/^rotate/i.test(transformName)) {
							transformName = "rotate";
						}

						/* Check that we haven't yet deleted the property from the SVGTransforms container. */
						if (SVGTransforms[transformName]) {
							/* Append the transform property in the SVG-supported transform format. As per the spec, surround the space-delimited values in parentheses. */
							transformString += transformName + "(" + SVGTransforms[transformName].join(" ") + ")" + " ";

							/* After processing an SVG transform property, delete it from the SVGTransforms container so we don't
							 re-insert the same master property if we encounter another one of its axis-specific properties. */
							delete SVGTransforms[transformName];
						}
					});
				} else {
					var transformValue,
							perspective;

					/* Transform properties are stored as members of the transformCache object. Concatenate all the members into a string. */
					$.each(Data(element).transformCache, function(transformName) {
						transformValue = Data(element).transformCache[transformName];

						/* Transform's perspective subproperty must be set first in order to take effect. Store it temporarily. */
						if (transformName === "transformPerspective") {
							perspective = transformValue;
							return true;
						}

						/* IE9 only supports one rotation type, rotateZ, which it refers to as "rotate". */
						if (IE === 9 && transformName === "rotateZ") {
							transformName = "rotate";
						}

						transformString += transformName + transformValue + " ";
					});

					/* If present, set the perspective subproperty first. */
					if (perspective) {
						transformString = "perspective" + perspective + " " + transformString;
					}
				}

				CSS.setPropertyValue(element, "transform", transformString);
			}
		};

		/* Register hooks and normalizations. */
		CSS.Hooks.register();
		CSS.Normalizations.register();

		/* Allow hook setting in the same fashion as jQuery's $.css(). */
		Velocity.hook = function(elements, arg2, arg3) {
			var value;

			elements = sanitizeElements(elements);

			$.each(elements, function(i, element) {
				/* Initialize Velocity's per-element data cache if this element hasn't previously been animated. */
				if (Data(element) === undefined) {
					Velocity.init(element);
				}

				/* Get property value. If an element set was passed in, only return the value for the first element. */
				if (arg3 === undefined) {
					if (value === undefined) {
						value = CSS.getPropertyValue(element, arg2);
					}
					/* Set property value. */
				} else {
					/* sPV returns an array of the normalized propertyName/propertyValue pair used to update the DOM. */
					var adjustedSet = CSS.setPropertyValue(element, arg2, arg3);

					/* Transform properties don't automatically set. They have to be flushed to the DOM. */
					if (adjustedSet[0] === "transform") {
						Velocity.CSS.flushTransformCache(element);
					}

					value = adjustedSet;
				}
			});

			return value;
		};

		/*****************
		 Animation
		 *****************/

		var animate = function() {
			var opts;

			/******************
			 Call Chain
			 ******************/

			/* Logic for determining what to return to the call stack when exiting out of Velocity. */
			function getChain() {
				/* If we are using the utility function, attempt to return this call's promise. If no promise library was detected,
				 default to null instead of returning the targeted elements so that utility function's return value is standardized. */
				if (isUtility) {
					return promiseData.promise || null;
					/* Otherwise, if we're using $.fn, return the jQuery-/Zepto-wrapped element set. */
				} else {
					return elementsWrapped;
				}
			}

			/*************************
			 Arguments Assignment
			 *************************/

			/* To allow for expressive CoffeeScript code, Velocity supports an alternative syntax in which "elements" (or "e"), "properties" (or "p"), and "options" (or "o")
			 objects are defined on a container object that's passed in as Velocity's sole argument. */
			/* Note: Some browsers automatically populate arguments with a "properties" object. We detect it by checking for its default "names" property. */
			var syntacticSugar = (arguments[0] && (arguments[0].p || (($.isPlainObject(arguments[0].properties) && !arguments[0].properties.names) || Type.isString(arguments[0].properties)))),
					/* Whether Velocity was called via the utility function (as opposed to on a jQuery/Zepto object). */
					isUtility,
					/* When Velocity is called via the utility function ($.Velocity()/Velocity()), elements are explicitly
					 passed in as the first parameter. Thus, argument positioning varies. We normalize them here. */
					elementsWrapped,
					argumentIndex;

			var elements,
					propertiesMap,
					options;

			/* Detect jQuery/Zepto elements being animated via the $.fn method. */
			if (Type.isWrapped(this)) {
				isUtility = false;

				argumentIndex = 0;
				elements = this;
				elementsWrapped = this;
				/* Otherwise, raw elements are being animated via the utility function. */
			} else {
				isUtility = true;

				argumentIndex = 1;
				elements = syntacticSugar ? (arguments[0].elements || arguments[0].e) : arguments[0];
			}

			/***************
			 Promises
			 ***************/

			var promiseData = {
				promise: null,
				resolver: null,
				rejecter: null
			};

			/* If this call was made via the utility function (which is the default method of invocation when jQuery/Zepto are not being used), and if
			 promise support was detected, create a promise object for this call and store references to its resolver and rejecter methods. The resolve
			 method is used when a call completes naturally or is prematurely stopped by the user. In both cases, completeCall() handles the associated
			 call cleanup and promise resolving logic. The reject method is used when an invalid set of arguments is passed into a Velocity call. */
			/* Note: Velocity employs a call-based queueing architecture, which means that stopping an animating element actually stops the full call that
			 triggered it -- not that one element exclusively. Similarly, there is one promise per call, and all elements targeted by a Velocity call are
			 grouped together for the purposes of resolving and rejecting a promise. */
			if (isUtility && Velocity.Promise) {
				promiseData.promise = new Velocity.Promise(function(resolve, reject) {
					promiseData.resolver = resolve;
					promiseData.rejecter = reject;
				});
			}

			if (syntacticSugar) {
				propertiesMap = arguments[0].properties || arguments[0].p;
				options = arguments[0].options || arguments[0].o;
			} else {
				propertiesMap = arguments[argumentIndex];
				options = arguments[argumentIndex + 1];
			}

			elements = sanitizeElements(elements);

			if (!elements) {
				if (promiseData.promise) {
					if (!propertiesMap || !options || options.promiseRejectEmpty !== false) {
						promiseData.rejecter();
					} else {
						promiseData.resolver();
					}
				}
				return;
			}

			/* The length of the element set (in the form of a nodeList or an array of elements) is defaulted to 1 in case a
			 single raw DOM element is passed in (which doesn't contain a length property). */
			var elementsLength = elements.length,
					elementsIndex = 0;

			/***************************
			 Argument Overloading
			 ***************************/

			/* Support is included for jQuery's argument overloading: $.animate(propertyMap [, duration] [, easing] [, complete]).
			 Overloading is detected by checking for the absence of an object being passed into options. */
			/* Note: The stop/finish/pause/resume actions do not accept animation options, and are therefore excluded from this check. */
			if (!/^(stop|finish|finishAll|pause|resume)$/i.test(propertiesMap) && !$.isPlainObject(options)) {
				/* The utility function shifts all arguments one position to the right, so we adjust for that offset. */
				var startingArgumentPosition = argumentIndex + 1;

				options = {};

				/* Iterate through all options arguments */
				for (var i = startingArgumentPosition; i < arguments.length; i++) {
					/* Treat a number as a duration. Parse it out. */
					/* Note: The following RegEx will return true if passed an array with a number as its first item.
					 Thus, arrays are skipped from this check. */
					if (!Type.isArray(arguments[i]) && (/^(fast|normal|slow)$/i.test(arguments[i]) || /^\d/.test(arguments[i]))) {
						options.duration = arguments[i];
						/* Treat strings and arrays as easings. */
					} else if (Type.isString(arguments[i]) || Type.isArray(arguments[i])) {
						options.easing = arguments[i];
						/* Treat a function as a complete callback. */
					} else if (Type.isFunction(arguments[i])) {
						options.complete = arguments[i];
					}
				}
			}

			/*********************
			 Action Detection
			 *********************/

			/* Velocity's behavior is categorized into "actions": Elements can either be specially scrolled into view,
			 or they can be started, stopped, paused, resumed, or reversed . If a literal or referenced properties map is passed in as Velocity's
			 first argument, the associated action is "start". Alternatively, "scroll", "reverse", "pause", "resume" or "stop" can be passed in 
			 instead of a properties map. */
			var action;

			switch (propertiesMap) {
				case "scroll":
					action = "scroll";
					break;

				case "reverse":
					action = "reverse";
					break;

				case "pause":

					/*******************
					 Action: Pause
					 *******************/

					var currentTime = (new Date()).getTime();

					/* Handle delay timers */
					$.each(elements, function(i, element) {
						pauseDelayOnElement(element, currentTime);
					});

					/* Pause and Resume are call-wide (not on a per element basis). Thus, calling pause or resume on a 
					 single element will cause any calls that containt tweens for that element to be paused/resumed
					 as well. */

					/* Iterate through all calls and pause any that contain any of our elements */
					$.each(Velocity.State.calls, function(i, activeCall) {

						var found = false;
						/* Inactive calls are set to false by the logic inside completeCall(). Skip them. */
						if (activeCall) {
							/* Iterate through the active call's targeted elements. */
							$.each(activeCall[1], function(k, activeElement) {
								var queueName = (options === undefined) ? "" : options;

								if (queueName !== true && (activeCall[2].queue !== queueName) && !(options === undefined && activeCall[2].queue === false)) {
									return true;
								}

								/* Iterate through the calls targeted by the stop command. */
								$.each(elements, function(l, element) {
									/* Check that this call was applied to the target element. */
									if (element === activeElement) {

										/* Set call to paused */
										activeCall[5] = {
											resume: false
										};

										/* Once we match an element, we can bounce out to the next call entirely */
										found = true;
										return false;
									}
								});

								/* Proceed to check next call if we have already matched */
								if (found) {
									return false;
								}
							});
						}

					});

					/* Since pause creates no new tweens, exit out of Velocity. */
					return getChain();

				case "resume":

					/*******************
					 Action: Resume
					 *******************/

					/* Handle delay timers */
					$.each(elements, function(i, element) {
						resumeDelayOnElement(element, currentTime);
					});

					/* Pause and Resume are call-wide (not on a per elemnt basis). Thus, calling pause or resume on a 
					 single element will cause any calls that containt tweens for that element to be paused/resumed
					 as well. */

					/* Iterate through all calls and pause any that contain any of our elements */
					$.each(Velocity.State.calls, function(i, activeCall) {
						var found = false;
						/* Inactive calls are set to false by the logic inside completeCall(). Skip them. */
						if (activeCall) {
							/* Iterate through the active call's targeted elements. */
							$.each(activeCall[1], function(k, activeElement) {
								var queueName = (options === undefined) ? "" : options;

								if (queueName !== true && (activeCall[2].queue !== queueName) && !(options === undefined && activeCall[2].queue === false)) {
									return true;
								}

								/* Skip any calls that have never been paused */
								if (!activeCall[5]) {
									return true;
								}

								/* Iterate through the calls targeted by the stop command. */
								$.each(elements, function(l, element) {
									/* Check that this call was applied to the target element. */
									if (element === activeElement) {

										/* Flag a pause object to be resumed, which will occur during the next tick. In
										 addition, the pause object will at that time be deleted */
										activeCall[5].resume = true;

										/* Once we match an element, we can bounce out to the next call entirely */
										found = true;
										return false;
									}
								});

								/* Proceed to check next call if we have already matched */
								if (found) {
									return false;
								}
							});
						}

					});

					/* Since resume creates no new tweens, exit out of Velocity. */
					return getChain();

				case "finish":
				case "finishAll":
				case "stop":
					/*******************
					 Action: Stop
					 *******************/

					/* Clear the currently-active delay on each targeted element. */
					$.each(elements, function(i, element) {
						if (Data(element) && Data(element).delayTimer) {
							/* Stop the timer from triggering its cached next() function. */
							clearTimeout(Data(element).delayTimer.setTimeout);

							/* Manually call the next() function so that the subsequent queue items can progress. */
							if (Data(element).delayTimer.next) {
								Data(element).delayTimer.next();
							}

							delete Data(element).delayTimer;
						}

						/* If we want to finish everything in the queue, we have to iterate through it
						 and call each function. This will make them active calls below, which will
						 cause them to be applied via the duration setting. */
						if (propertiesMap === "finishAll" && (options === true || Type.isString(options))) {
							/* Iterate through the items in the element's queue. */
							$.each($.queue(element, Type.isString(options) ? options : ""), function(_, item) {
								/* The queue array can contain an "inprogress" string, which we skip. */
								if (Type.isFunction(item)) {
									item();
								}
							});

							/* Clearing the $.queue() array is achieved by resetting it to []. */
							$.queue(element, Type.isString(options) ? options : "", []);
						}
					});

					var callsToStop = [];

					/* When the stop action is triggered, the elements' currently active call is immediately stopped. The active call might have
					 been applied to multiple elements, in which case all of the call's elements will be stopped. When an element
					 is stopped, the next item in its animation queue is immediately triggered. */
					/* An additional argument may be passed in to clear an element's remaining queued calls. Either true (which defaults to the "fx" queue)
					 or a custom queue string can be passed in. */
					/* Note: The stop command runs prior to Velocity's Queueing phase since its behavior is intended to take effect *immediately*,
					 regardless of the element's current queue state. */

					/* Iterate through every active call. */
					$.each(Velocity.State.calls, function(i, activeCall) {
						/* Inactive calls are set to false by the logic inside completeCall(). Skip them. */
						if (activeCall) {
							/* Iterate through the active call's targeted elements. */
							$.each(activeCall[1], function(k, activeElement) {
								/* If true was passed in as a secondary argument, clear absolutely all calls on this element. Otherwise, only
								 clear calls associated with the relevant queue. */
								/* Call stopping logic works as follows:
								 - options === true --> stop current default queue calls (and queue:false calls), including remaining queued ones.
								 - options === undefined --> stop current queue:"" call and all queue:false calls.
								 - options === false --> stop only queue:false calls.
								 - options === "custom" --> stop current queue:"custom" call, including remaining queued ones (there is no functionality to only clear the currently-running queue:"custom" call). */
								var queueName = (options === undefined) ? "" : options;

								if (queueName !== true && (activeCall[2].queue !== queueName) && !(options === undefined && activeCall[2].queue === false)) {
									return true;
								}

								/* Iterate through the calls targeted by the stop command. */
								$.each(elements, function(l, element) {
									/* Check that this call was applied to the target element. */
									if (element === activeElement) {
										/* Optionally clear the remaining queued calls. If we're doing "finishAll" this won't find anything,
										 due to the queue-clearing above. */
										if (options === true || Type.isString(options)) {
											/* Iterate through the items in the element's queue. */
											$.each($.queue(element, Type.isString(options) ? options : ""), function(_, item) {
												/* The queue array can contain an "inprogress" string, which we skip. */
												if (Type.isFunction(item)) {
													/* Pass the item's callback a flag indicating that we want to abort from the queue call.
													 (Specifically, the queue will resolve the call's associated promise then abort.)  */
													item(null, true);
												}
											});

											/* Clearing the $.queue() array is achieved by resetting it to []. */
											$.queue(element, Type.isString(options) ? options : "", []);
										}

										if (propertiesMap === "stop") {
											/* Since "reverse" uses cached start values (the previous call's endValues), these values must be
											 changed to reflect the final value that the elements were actually tweened to. */
											/* Note: If only queue:false/queue:"custom" animations are currently running on an element, it won't have a tweensContainer
											 object. Also, queue:false/queue:"custom" animations can't be reversed. */
											var data = Data(element);
											if (data && data.tweensContainer && (queueName === true || queueName === "")) {
												$.each(data.tweensContainer, function(m, activeTween) {
													activeTween.endValue = activeTween.currentValue;
												});
											}

											callsToStop.push(i);
										} else if (propertiesMap === "finish" || propertiesMap === "finishAll") {
											/* To get active tweens to finish immediately, we forcefully shorten their durations to 1ms so that
											 they finish upon the next rAf tick then proceed with normal call completion logic. */
											activeCall[2].duration = 1;
										}
									}
								});
							});
						}
					});

					/* Prematurely call completeCall() on each matched active call. Pass an additional flag for "stop" to indicate
					 that the complete callback and display:none setting should be skipped since we're completing prematurely. */
					if (propertiesMap === "stop") {
						$.each(callsToStop, function(i, j) {
							completeCall(j, true);
						});

						if (promiseData.promise) {
							/* Immediately resolve the promise associated with this stop call since stop runs synchronously. */
							promiseData.resolver(elements);
						}
					}

					/* Since we're stopping, and not proceeding with queueing, exit out of Velocity. */
					return getChain();

				default:
					/* Treat a non-empty plain object as a literal properties map. */
					if ($.isPlainObject(propertiesMap) && !Type.isEmptyObject(propertiesMap)) {
						action = "start";

						/****************
						 Redirects
						 ****************/

						/* Check if a string matches a registered redirect (see Redirects above). */
					} else if (Type.isString(propertiesMap) && Velocity.Redirects[propertiesMap]) {
						opts = $.extend({}, options);

						var durationOriginal = opts.duration,
								delayOriginal = opts.delay || 0;

						/* If the backwards option was passed in, reverse the element set so that elements animate from the last to the first. */
						if (opts.backwards === true) {
							elements = $.extend(true, [], elements).reverse();
						}

						/* Individually trigger the redirect for each element in the set to prevent users from having to handle iteration logic in their redirect. */
						$.each(elements, function(elementIndex, element) {
							/* If the stagger option was passed in, successively delay each element by the stagger value (in ms). Retain the original delay value. */
							if (parseFloat(opts.stagger)) {
								opts.delay = delayOriginal + (parseFloat(opts.stagger) * elementIndex);
							} else if (Type.isFunction(opts.stagger)) {
								opts.delay = delayOriginal + opts.stagger.call(element, elementIndex, elementsLength);
							}

							/* If the drag option was passed in, successively increase/decrease (depending on the presense of opts.backwards)
							 the duration of each element's animation, using floors to prevent producing very short durations. */
							if (opts.drag) {
								/* Default the duration of UI pack effects (callouts and transitions) to 1000ms instead of the usual default duration of 400ms. */
								opts.duration = parseFloat(durationOriginal) || (/^(callout|transition)/.test(propertiesMap) ? 1000 : DURATION_DEFAULT);

								/* For each element, take the greater duration of: A) animation completion percentage relative to the original duration,
								 B) 75% of the original duration, or C) a 200ms fallback (in case duration is already set to a low value).
								 The end result is a baseline of 75% of the redirect's duration that increases/decreases as the end of the element set is approached. */
								opts.duration = Math.max(opts.duration * (opts.backwards ? 1 - elementIndex / elementsLength : (elementIndex + 1) / elementsLength), opts.duration * 0.75, 200);
							}

							/* Pass in the call's opts object so that the redirect can optionally extend it. It defaults to an empty object instead of null to
							 reduce the opts checking logic required inside the redirect. */
							Velocity.Redirects[propertiesMap].call(element, element, opts || {}, elementIndex, elementsLength, elements, promiseData.promise ? promiseData : undefined);
						});

						/* Since the animation logic resides within the redirect's own code, abort the remainder of this call.
						 (The performance overhead up to this point is virtually non-existant.) */
						/* Note: The jQuery call chain is kept intact by returning the complete element set. */
						return getChain();
					} else {
						var abortError = "Velocity: First argument (" + propertiesMap + ") was not a property map, a known action, or a registered redirect. Aborting.";

						if (promiseData.promise) {
							promiseData.rejecter(new Error(abortError));
						} else if (window.console) {
							console.log(abortError);
						}

						return getChain();
					}
			}

			/**************************
			 Call-Wide Variables
			 **************************/

			/* A container for CSS unit conversion ratios (e.g. %, rem, and em ==> px) that is used to cache ratios across all elements
			 being animated in a single Velocity call. Calculating unit ratios necessitates DOM querying and updating, and is therefore
			 avoided (via caching) wherever possible. This container is call-wide instead of page-wide to avoid the risk of using stale
			 conversion metrics across Velocity animations that are not immediately consecutively chained. */
			var callUnitConversionData = {
				lastParent: null,
				lastPosition: null,
				lastFontSize: null,
				lastPercentToPxWidth: null,
				lastPercentToPxHeight: null,
				lastEmToPx: null,
				remToPx: null,
				vwToPx: null,
				vhToPx: null
			};

			/* A container for all the ensuing tween data and metadata associated with this call. This container gets pushed to the page-wide
			 Velocity.State.calls array that is processed during animation ticking. */
			var call = [];

			/************************
			 Element Processing
			 ************************/

			/* Element processing consists of three parts -- data processing that cannot go stale and data processing that *can* go stale (i.e. third-party style modifications):
			 1) Pre-Queueing: Element-wide variables, including the element's data storage, are instantiated. Call options are prepared. If triggered, the Stop action is executed.
			 2) Queueing: The logic that runs once this call has reached its point of execution in the element's $.queue() stack. Most logic is placed here to avoid risking it becoming stale.
			 3) Pushing: Consolidation of the tween data followed by its push onto the global in-progress calls container.
			 `elementArrayIndex` allows passing index of the element in the original array to value functions.
			 If `elementsIndex` were used instead the index would be determined by the elements' per-element queue.
			 */
			function processElement(element, elementArrayIndex) {

				/*************************
				 Part I: Pre-Queueing
				 *************************/

				/***************************
				 Element-Wide Variables
				 ***************************/

				var /* The runtime opts object is the extension of the current call's options and Velocity's page-wide option defaults. */
						opts = $.extend({}, Velocity.defaults, options),
						/* A container for the processed data associated with each property in the propertyMap.
						 (Each property in the map produces its own "tween".) */
						tweensContainer = {},
						elementUnitConversionData;

				/******************
				 Element Init
				 ******************/

				if (Data(element) === undefined) {
					Velocity.init(element);
				}

				/******************
				 Option: Delay
				 ******************/

				/* Since queue:false doesn't respect the item's existing queue, we avoid injecting its delay here (it's set later on). */
				/* Note: Velocity rolls its own delay function since jQuery doesn't have a utility alias for $.fn.delay()
				 (and thus requires jQuery element creation, which we avoid since its overhead includes DOM querying). */
				if (parseFloat(opts.delay) && opts.queue !== false) {
					$.queue(element, opts.queue, function(next, clearQueue) {
						if (clearQueue === true) {
							/* Do not continue with animation queueing. */
							return true;
						}

						/* This is a flag used to indicate to the upcoming completeCall() function that this queue entry was initiated by Velocity. See completeCall() for further details. */
						Velocity.velocityQueueEntryFlag = true;

						/* The ensuing queue item (which is assigned to the "next" argument that $.queue() automatically passes in) will be triggered after a setTimeout delay.
						 The setTimeout is stored so that it can be subjected to clearTimeout() if this animation is prematurely stopped via Velocity's "stop" command, and
						 delayBegin/delayTime is used to ensure we can "pause" and "resume" a tween that is still mid-delay. */

						/* Temporarily store delayed elements to facilite access for global pause/resume */
						var callIndex = Velocity.State.delayedElements.count++;
						Velocity.State.delayedElements[callIndex] = element;

						var delayComplete = (function(index) {
							return function() {
								/* Clear the temporary element */
								Velocity.State.delayedElements[index] = false;

								/* Finally, issue the call */
								next();
							};
						})(callIndex);


						Data(element).delayBegin = (new Date()).getTime();
						Data(element).delay = parseFloat(opts.delay);
						Data(element).delayTimer = {
							setTimeout: setTimeout(next, parseFloat(opts.delay)),
							next: delayComplete
						};
					});
				}

				/*********************
				 Option: Duration
				 *********************/

				/* Support for jQuery's named durations. */
				switch (opts.duration.toString().toLowerCase()) {
					case "fast":
						opts.duration = 200;
						break;

					case "normal":
						opts.duration = DURATION_DEFAULT;
						break;

					case "slow":
						opts.duration = 600;
						break;

					default:
						/* Remove the potential "ms" suffix and default to 1 if the user is attempting to set a duration of 0 (in order to produce an immediate style change). */
						opts.duration = parseFloat(opts.duration) || 1;
				}

				/************************
				 Global Option: Mock
				 ************************/

				if (Velocity.mock !== false) {
					/* In mock mode, all animations are forced to 1ms so that they occur immediately upon the next rAF tick.
					 Alternatively, a multiplier can be passed in to time remap all delays and durations. */
					if (Velocity.mock === true) {
						opts.duration = opts.delay = 1;
					} else {
						opts.duration *= parseFloat(Velocity.mock) || 1;
						opts.delay *= parseFloat(Velocity.mock) || 1;
					}
				}

				/*******************
				 Option: Easing
				 *******************/

				opts.easing = getEasing(opts.easing, opts.duration);

				/**********************
				 Option: Callbacks
				 **********************/

				/* Callbacks must functions. Otherwise, default to null. */
				if (opts.begin && !Type.isFunction(opts.begin)) {
					opts.begin = null;
				}

				if (opts.progress && !Type.isFunction(opts.progress)) {
					opts.progress = null;
				}

				if (opts.complete && !Type.isFunction(opts.complete)) {
					opts.complete = null;
				}

				/*********************************
				 Option: Display & Visibility
				 *********************************/

				/* Refer to Velocity's documentation (VelocityJS.org/#displayAndVisibility) for a description of the display and visibility options' behavior. */
				/* Note: We strictly check for undefined instead of falsiness because display accepts an empty string value. */
				if (opts.display !== undefined && opts.display !== null) {
					opts.display = opts.display.toString().toLowerCase();

					/* Users can pass in a special "auto" value to instruct Velocity to set the element to its default display value. */
					if (opts.display === "auto") {
						opts.display = Velocity.CSS.Values.getDisplayType(element);
					}
				}

				if (opts.visibility !== undefined && opts.visibility !== null) {
					opts.visibility = opts.visibility.toString().toLowerCase();
				}

				/**********************
				 Option: mobileHA
				 **********************/

				/* When set to true, and if this is a mobile device, mobileHA automatically enables hardware acceleration (via a null transform hack)
				 on animating elements. HA is removed from the element at the completion of its animation. */
				/* Note: Android Gingerbread doesn't support HA. If a null transform hack (mobileHA) is in fact set, it will prevent other tranform subproperties from taking effect. */
				/* Note: You can read more about the use of mobileHA in Velocity's documentation: VelocityJS.org/#mobileHA. */
				opts.mobileHA = (opts.mobileHA && Velocity.State.isMobile && !Velocity.State.isGingerbread);

				/***********************
				 Part II: Queueing
				 ***********************/

				/* When a set of elements is targeted by a Velocity call, the set is broken up and each element has the current Velocity call individually queued onto it.
				 In this way, each element's existing queue is respected; some elements may already be animating and accordingly should not have this current Velocity call triggered immediately. */
				/* In each queue, tween data is processed for each animating property then pushed onto the call-wide calls array. When the last element in the set has had its tweens processed,
				 the call array is pushed to Velocity.State.calls for live processing by the requestAnimationFrame tick. */
				function buildQueue(next) {
					var data, lastTweensContainer;

					/*******************
					 Option: Begin
					 *******************/

					/* The begin callback is fired once per call -- not once per elemenet -- and is passed the full raw DOM element set as both its context and its first argument. */
					if (opts.begin && elementsIndex === 0) {
						/* We throw callbacks in a setTimeout so that thrown errors don't halt the execution of Velocity itself. */
						try {
							opts.begin.call(elements, elements);
						} catch (error) {
							setTimeout(function() {
								throw error;
							}, 1);
						}
					}

					/*****************************************
					 Tween Data Construction (for Scroll)
					 *****************************************/

					/* Note: In order to be subjected to chaining and animation options, scroll's tweening is routed through Velocity as if it were a standard CSS property animation. */
					if (action === "scroll") {
						/* The scroll action uniquely takes an optional "offset" option -- specified in pixels -- that offsets the targeted scroll position. */
						var scrollDirection = (/^x$/i.test(opts.axis) ? "Left" : "Top"),
								scrollOffset = parseFloat(opts.offset) || 0,
								scrollPositionCurrent,
								scrollPositionCurrentAlternate,
								scrollPositionEnd;

						/* Scroll also uniquely takes an optional "container" option, which indicates the parent element that should be scrolled --
						 as opposed to the browser window itself. This is useful for scrolling toward an element that's inside an overflowing parent element. */
						if (opts.container) {
							/* Ensure that either a jQuery object or a raw DOM element was passed in. */
							if (Type.isWrapped(opts.container) || Type.isNode(opts.container)) {
								/* Extract the raw DOM element from the jQuery wrapper. */
								opts.container = opts.container[0] || opts.container;
								/* Note: Unlike other properties in Velocity, the browser's scroll position is never cached since it so frequently changes
								 (due to the user's natural interaction with the page). */
								scrollPositionCurrent = opts.container["scroll" + scrollDirection]; /* GET */

								/* $.position() values are relative to the container's currently viewable area (without taking into account the container's true dimensions
								 -- say, for example, if the container was not overflowing). Thus, the scroll end value is the sum of the child element's position *and*
								 the scroll container's current scroll position. */
								scrollPositionEnd = (scrollPositionCurrent + $(element).position()[scrollDirection.toLowerCase()]) + scrollOffset; /* GET */
								/* If a value other than a jQuery object or a raw DOM element was passed in, default to null so that this option is ignored. */
							} else {
								opts.container = null;
							}
						} else {
							/* If the window itself is being scrolled -- not a containing element -- perform a live scroll position lookup using
							 the appropriate cached property names (which differ based on browser type). */
							scrollPositionCurrent = Velocity.State.scrollAnchor[Velocity.State["scrollProperty" + scrollDirection]]; /* GET */
							/* When scrolling the browser window, cache the alternate axis's current value since window.scrollTo() doesn't let us change only one value at a time. */
							scrollPositionCurrentAlternate = Velocity.State.scrollAnchor[Velocity.State["scrollProperty" + (scrollDirection === "Left" ? "Top" : "Left")]]; /* GET */

							/* Unlike $.position(), $.offset() values are relative to the browser window's true dimensions -- not merely its currently viewable area --
							 and therefore end values do not need to be compounded onto current values. */
							scrollPositionEnd = $(element).offset()[scrollDirection.toLowerCase()] + scrollOffset; /* GET */
						}

						/* Since there's only one format that scroll's associated tweensContainer can take, we create it manually. */
						tweensContainer = {
							scroll: {
								rootPropertyValue: false,
								startValue: scrollPositionCurrent,
								currentValue: scrollPositionCurrent,
								endValue: scrollPositionEnd,
								unitType: "",
								easing: opts.easing,
								scrollData: {
									container: opts.container,
									direction: scrollDirection,
									alternateValue: scrollPositionCurrentAlternate
								}
							},
							element: element
						};

						if (Velocity.debug) {
							console.log("tweensContainer (scroll): ", tweensContainer.scroll, element);
						}

						/******************************************
						 Tween Data Construction (for Reverse)
						 ******************************************/

						/* Reverse acts like a "start" action in that a property map is animated toward. The only difference is
						 that the property map used for reverse is the inverse of the map used in the previous call. Thus, we manipulate
						 the previous call to construct our new map: use the previous map's end values as our new map's start values. Copy over all other data. */
						/* Note: Reverse can be directly called via the "reverse" parameter, or it can be indirectly triggered via the loop option. (Loops are composed of multiple reverses.) */
						/* Note: Reverse calls do not need to be consecutively chained onto a currently-animating element in order to operate on cached values;
						 there is no harm to reverse being called on a potentially stale data cache since reverse's behavior is simply defined
						 as reverting to the element's values as they were prior to the previous *Velocity* call. */
					} else if (action === "reverse") {
						data = Data(element);

						/* Abort if there is no prior animation data to reverse to. */
						if (!data) {
							return;
						}

						if (!data.tweensContainer) {
							/* Dequeue the element so that this queue entry releases itself immediately, allowing subsequent queue entries to run. */
							$.dequeue(element, opts.queue);

							return;
						} else {
							/*********************
							 Options Parsing
							 *********************/

							/* If the element was hidden via the display option in the previous call,
							 revert display to "auto" prior to reversal so that the element is visible again. */
							if (data.opts.display === "none") {
								data.opts.display = "auto";
							}

							if (data.opts.visibility === "hidden") {
								data.opts.visibility = "visible";
							}

							/* If the loop option was set in the previous call, disable it so that "reverse" calls aren't recursively generated.
							 Further, remove the previous call's callback options; typically, users do not want these to be refired. */
							data.opts.loop = false;
							data.opts.begin = null;
							data.opts.complete = null;

							/* Since we're extending an opts object that has already been extended with the defaults options object,
							 we remove non-explicitly-defined properties that are auto-assigned values. */
							if (!options.easing) {
								delete opts.easing;
							}

							if (!options.duration) {
								delete opts.duration;
							}

							/* The opts object used for reversal is an extension of the options object optionally passed into this
							 reverse call plus the options used in the previous Velocity call. */
							opts = $.extend({}, data.opts, opts);

							/*************************************
							 Tweens Container Reconstruction
							 *************************************/

							/* Create a deepy copy (indicated via the true flag) of the previous call's tweensContainer. */
							lastTweensContainer = $.extend(true, {}, data ? data.tweensContainer : null);

							/* Manipulate the previous tweensContainer by replacing its end values and currentValues with its start values. */
							for (var lastTween in lastTweensContainer) {
								/* In addition to tween data, tweensContainers contain an element property that we ignore here. */
								if (lastTweensContainer.hasOwnProperty(lastTween) && lastTween !== "element") {
									var lastStartValue = lastTweensContainer[lastTween].startValue;

									lastTweensContainer[lastTween].startValue = lastTweensContainer[lastTween].currentValue = lastTweensContainer[lastTween].endValue;
									lastTweensContainer[lastTween].endValue = lastStartValue;

									/* Easing is the only option that embeds into the individual tween data (since it can be defined on a per-property basis).
									 Accordingly, every property's easing value must be updated when an options object is passed in with a reverse call.
									 The side effect of this extensibility is that all per-property easing values are forcefully reset to the new value. */
									if (!Type.isEmptyObject(options)) {
										lastTweensContainer[lastTween].easing = opts.easing;
									}

									if (Velocity.debug) {
										console.log("reverse tweensContainer (" + lastTween + "): " + JSON.stringify(lastTweensContainer[lastTween]), element);
									}
								}
							}

							tweensContainer = lastTweensContainer;
						}

						/*****************************************
						 Tween Data Construction (for Start)
						 *****************************************/

					} else if (action === "start") {

						/*************************
						 Value Transferring
						 *************************/

						/* If this queue entry follows a previous Velocity-initiated queue entry *and* if this entry was created
						 while the element was in the process of being animated by Velocity, then this current call is safe to use
						 the end values from the prior call as its start values. Velocity attempts to perform this value transfer
						 process whenever possible in order to avoid requerying the DOM. */
						/* If values aren't transferred from a prior call and start values were not forcefed by the user (more on this below),
						 then the DOM is queried for the element's current values as a last resort. */
						/* Note: Conversely, animation reversal (and looping) *always* perform inter-call value transfers; they never requery the DOM. */

						data = Data(element);

						/* The per-element isAnimating flag is used to indicate whether it's safe (i.e. the data isn't stale)
						 to transfer over end values to use as start values. If it's set to true and there is a previous
						 Velocity call to pull values from, do so. */
						if (data && data.tweensContainer && data.isAnimating === true) {
							lastTweensContainer = data.tweensContainer;
						}

						/***************************
						 Tween Data Calculation
						 ***************************/

						/* This function parses property data and defaults endValue, easing, and startValue as appropriate. */
						/* Property map values can either take the form of 1) a single value representing the end value,
						 or 2) an array in the form of [ endValue, [, easing] [, startValue] ].
						 The optional third parameter is a forcefed startValue to be used instead of querying the DOM for
						 the element's current value. Read Velocity's docmentation to learn more about forcefeeding: VelocityJS.org/#forcefeeding */
						var parsePropertyValue = function(valueData, skipResolvingEasing) {
							var endValue, easing, startValue;

							/* If we have a function as the main argument then resolve it first, in case it returns an array that needs to be split */
							if (Type.isFunction(valueData)) {
								valueData = valueData.call(element, elementArrayIndex, elementsLength);
							}

							/* Handle the array format, which can be structured as one of three potential overloads:
							 A) [ endValue, easing, startValue ], B) [ endValue, easing ], or C) [ endValue, startValue ] */
							if (Type.isArray(valueData)) {
								/* endValue is always the first item in the array. Don't bother validating endValue's value now
								 since the ensuing property cycling logic does that. */
								endValue = valueData[0];

								/* Two-item array format: If the second item is a number, function, or hex string, treat it as a
								 start value since easings can only be non-hex strings or arrays. */
								if ((!Type.isArray(valueData[1]) && /^[\d-]/.test(valueData[1])) || Type.isFunction(valueData[1]) || CSS.RegEx.isHex.test(valueData[1])) {
									startValue = valueData[1];
									/* Two or three-item array: If the second item is a non-hex string easing name or an array, treat it as an easing. */
								} else if ((Type.isString(valueData[1]) && !CSS.RegEx.isHex.test(valueData[1]) && Velocity.Easings[valueData[1]]) || Type.isArray(valueData[1])) {
									easing = skipResolvingEasing ? valueData[1] : getEasing(valueData[1], opts.duration);

									/* Don't bother validating startValue's value now since the ensuing property cycling logic inherently does that. */
									startValue = valueData[2];
								} else {
									startValue = valueData[1] || valueData[2];
								}
								/* Handle the single-value format. */
							} else {
								endValue = valueData;
							}

							/* Default to the call's easing if a per-property easing type was not defined. */
							if (!skipResolvingEasing) {
								easing = easing || opts.easing;
							}

							/* If functions were passed in as values, pass the function the current element as its context,
							 plus the element's index and the element set's size as arguments. Then, assign the returned value. */
							if (Type.isFunction(endValue)) {
								endValue = endValue.call(element, elementArrayIndex, elementsLength);
							}

							if (Type.isFunction(startValue)) {
								startValue = startValue.call(element, elementArrayIndex, elementsLength);
							}

							/* Allow startValue to be left as undefined to indicate to the ensuing code that its value was not forcefed. */
							return [endValue || 0, easing, startValue];
						};

						var fixPropertyValue = function(property, valueData) {
							/* In case this property is a hook, there are circumstances where we will intend to work on the hook's root property and not the hooked subproperty. */
							var rootProperty = CSS.Hooks.getRoot(property),
									rootPropertyValue = false,
									/* Parse out endValue, easing, and startValue from the property's data. */
									endValue = valueData[0],
									easing = valueData[1],
									startValue = valueData[2],
									pattern;

							/**************************
							 Start Value Sourcing
							 **************************/

							/* Other than for the dummy tween property, properties that are not supported by the browser (and do not have an associated normalization) will
							 inherently produce no style changes when set, so they are skipped in order to decrease animation tick overhead.
							 Property support is determined via prefixCheck(), which returns a false flag when no supported is detected. */
							/* Note: Since SVG elements have some of their properties directly applied as HTML attributes,
							 there is no way to check for their explicit browser support, and so we skip skip this check for them. */
							if ((!data || !data.isSVG) && rootProperty !== "tween" && CSS.Names.prefixCheck(rootProperty)[1] === false && CSS.Normalizations.registered[rootProperty] === undefined) {
								if (Velocity.debug) {
									console.log("Skipping [" + rootProperty + "] due to a lack of browser support.");
								}
								return;
							}

							/* If the display option is being set to a non-"none" (e.g. "block") and opacity (filter on IE<=8) is being
							 animated to an endValue of non-zero, the user's intention is to fade in from invisible, thus we forcefeed opacity
							 a startValue of 0 if its startValue hasn't already been sourced by value transferring or prior forcefeeding. */
							if (((opts.display !== undefined && opts.display !== null && opts.display !== "none") || (opts.visibility !== undefined && opts.visibility !== "hidden")) && /opacity|filter/.test(property) && !startValue && endValue !== 0) {
								startValue = 0;
							}

							/* If values have been transferred from the previous Velocity call, extract the endValue and rootPropertyValue
							 for all of the current call's properties that were *also* animated in the previous call. */
							/* Note: Value transferring can optionally be disabled by the user via the _cacheValues option. */
							if (opts._cacheValues && lastTweensContainer && lastTweensContainer[property]) {
								if (startValue === undefined) {
									startValue = lastTweensContainer[property].endValue + lastTweensContainer[property].unitType;
								}

								/* The previous call's rootPropertyValue is extracted from the element's data cache since that's the
								 instance of rootPropertyValue that gets freshly updated by the tweening process, whereas the rootPropertyValue
								 attached to the incoming lastTweensContainer is equal to the root property's value prior to any tweening. */
								rootPropertyValue = data.rootPropertyValueCache[rootProperty];
								/* If values were not transferred from a previous Velocity call, query the DOM as needed. */
							} else {
								/* Handle hooked properties. */
								if (CSS.Hooks.registered[property]) {
									if (startValue === undefined) {
										rootPropertyValue = CSS.getPropertyValue(element, rootProperty); /* GET */
										/* Note: The following getPropertyValue() call does not actually trigger a DOM query;
										 getPropertyValue() will extract the hook from rootPropertyValue. */
										startValue = CSS.getPropertyValue(element, property, rootPropertyValue);
										/* If startValue is already defined via forcefeeding, do not query the DOM for the root property's value;
										 just grab rootProperty's zero-value template from CSS.Hooks. This overwrites the element's actual
										 root property value (if one is set), but this is acceptable since the primary reason users forcefeed is
										 to avoid DOM queries, and thus we likewise avoid querying the DOM for the root property's value. */
									} else {
										/* Grab this hook's zero-value template, e.g. "0px 0px 0px black". */
										rootPropertyValue = CSS.Hooks.templates[rootProperty][1];
									}
									/* Handle non-hooked properties that haven't already been defined via forcefeeding. */
								} else if (startValue === undefined) {
									startValue = CSS.getPropertyValue(element, property); /* GET */
								}
							}

							/**************************
							 Value Data Extraction
							 **************************/

							var separatedValue,
									endValueUnitType,
									startValueUnitType,
									operator = false;

							/* Separates a property value into its numeric value and its unit type. */
							var separateValue = function(property, value) {
								var unitType,
										numericValue;

								numericValue = (value || "0")
										.toString()
										.toLowerCase()
										/* Match the unit type at the end of the value. */
										.replace(/[%A-z]+$/, function(match) {
											/* Grab the unit type. */
											unitType = match;

											/* Strip the unit type off of value. */
											return "";
										});

								/* If no unit type was supplied, assign one that is appropriate for this property (e.g. "deg" for rotateZ or "px" for width). */
								if (!unitType) {
									unitType = CSS.Values.getUnitType(property);
								}

								return [numericValue, unitType];
							};

							if (startValue !== endValue && Type.isString(startValue) && Type.isString(endValue)) {
								pattern = "";
								var iStart = 0, // index in startValue
										iEnd = 0, // index in endValue
										aStart = [], // array of startValue numbers
										aEnd = [], // array of endValue numbers
										inCalc = 0, // Keep track of being inside a "calc()" so we don't duplicate it
										inRGB = 0, // Keep track of being inside an RGB as we can't use fractional values
										inRGBA = 0; // Keep track of being inside an RGBA as we must pass fractional for the alpha channel

								startValue = CSS.Hooks.fixColors(startValue);
								endValue = CSS.Hooks.fixColors(endValue);
								while (iStart < startValue.length && iEnd < endValue.length) {
									var cStart = startValue[iStart],
											cEnd = endValue[iEnd];

									if (/[\d\.-]/.test(cStart) && /[\d\.-]/.test(cEnd)) {
										var tStart = cStart, // temporary character buffer
												tEnd = cEnd, // temporary character buffer
												dotStart = ".", // Make sure we can only ever match a single dot in a decimal
												dotEnd = "."; // Make sure we can only ever match a single dot in a decimal

										while (++iStart < startValue.length) {
											cStart = startValue[iStart];
											if (cStart === dotStart) {
												dotStart = ".."; // Can never match two characters
											} else if (!/\d/.test(cStart)) {
												break;
											}
											tStart += cStart;
										}
										while (++iEnd < endValue.length) {
											cEnd = endValue[iEnd];
											if (cEnd === dotEnd) {
												dotEnd = ".."; // Can never match two characters
											} else if (!/\d/.test(cEnd)) {
												break;
											}
											tEnd += cEnd;
										}
										var uStart = CSS.Hooks.getUnit(startValue, iStart), // temporary unit type
												uEnd = CSS.Hooks.getUnit(endValue, iEnd); // temporary unit type

										iStart += uStart.length;
										iEnd += uEnd.length;
										if (uStart === uEnd) {
											// Same units
											if (tStart === tEnd) {
												// Same numbers, so just copy over
												pattern += tStart + uStart;
											} else {
												// Different numbers, so store them
												pattern += "{" + aStart.length + (inRGB ? "!" : "") + "}" + uStart;
												aStart.push(parseFloat(tStart));
												aEnd.push(parseFloat(tEnd));
											}
										} else {
											// Different units, so put into a "calc(from + to)" and animate each side to/from zero
											var nStart = parseFloat(tStart),
													nEnd = parseFloat(tEnd);

											pattern += (inCalc < 5 ? "calc" : "") + "("
													+ (nStart ? "{" + aStart.length + (inRGB ? "!" : "") + "}" : "0") + uStart
													+ " + "
													+ (nEnd ? "{" + (aStart.length + (nStart ? 1 : 0)) + (inRGB ? "!" : "") + "}" : "0") + uEnd
													+ ")";
											if (nStart) {
												aStart.push(nStart);
												aEnd.push(0);
											}
											if (nEnd) {
												aStart.push(0);
												aEnd.push(nEnd);
											}
										}
									} else if (cStart === cEnd) {
										pattern += cStart;
										iStart++;
										iEnd++;
										// Keep track of being inside a calc()
										if (inCalc === 0 && cStart === "c"
												|| inCalc === 1 && cStart === "a"
												|| inCalc === 2 && cStart === "l"
												|| inCalc === 3 && cStart === "c"
												|| inCalc >= 4 && cStart === "("
												) {
											inCalc++;
										} else if ((inCalc && inCalc < 5)
												|| inCalc >= 4 && cStart === ")" && --inCalc < 5) {
											inCalc = 0;
										}
										// Keep track of being inside an rgb() / rgba()
										if (inRGB === 0 && cStart === "r"
												|| inRGB === 1 && cStart === "g"
												|| inRGB === 2 && cStart === "b"
												|| inRGB === 3 && cStart === "a"
												|| inRGB >= 3 && cStart === "("
												) {
											if (inRGB === 3 && cStart === "a") {
												inRGBA = 1;
											}
											inRGB++;
										} else if (inRGBA && cStart === ",") {
											if (++inRGBA > 3) {
												inRGB = inRGBA = 0;
											}
										} else if ((inRGBA && inRGB < (inRGBA ? 5 : 4))
												|| inRGB >= (inRGBA ? 4 : 3) && cStart === ")" && --inRGB < (inRGBA ? 5 : 4)) {
											inRGB = inRGBA = 0;
										}
									} else {
										inCalc = 0;
										// TODO: changing units, fixing colours
										break;
									}
								}
								if (iStart !== startValue.length || iEnd !== endValue.length) {
									if (Velocity.debug) {
										console.error("Trying to pattern match mis-matched strings [\"" + endValue + "\", \"" + startValue + "\"]");
									}
									pattern = undefined;
								}
								if (pattern) {
									if (aStart.length) {
										if (Velocity.debug) {
											console.log("Pattern found \"" + pattern + "\" -> ", aStart, aEnd, "[" + startValue + "," + endValue + "]");
										}
										startValue = aStart;
										endValue = aEnd;
										endValueUnitType = startValueUnitType = "";
									} else {
										pattern = undefined;
									}
								}
							}

							if (!pattern) {
								/* Separate startValue. */
								separatedValue = separateValue(property, startValue);
								startValue = separatedValue[0];
								startValueUnitType = separatedValue[1];

								/* Separate endValue, and extract a value operator (e.g. "+=", "-=") if one exists. */
								separatedValue = separateValue(property, endValue);
								endValue = separatedValue[0].replace(/^([+-\/*])=/, function(match, subMatch) {
									operator = subMatch;

									/* Strip the operator off of the value. */
									return "";
								});
								endValueUnitType = separatedValue[1];

								/* Parse float values from endValue and startValue. Default to 0 if NaN is returned. */
								startValue = parseFloat(startValue) || 0;
								endValue = parseFloat(endValue) || 0;

								/***************************************
								 Property-Specific Value Conversion
								 ***************************************/

								/* Custom support for properties that don't actually accept the % unit type, but where pollyfilling is trivial and relatively foolproof. */
								if (endValueUnitType === "%") {
									/* A %-value fontSize/lineHeight is relative to the parent's fontSize (as opposed to the parent's dimensions),
									 which is identical to the em unit's behavior, so we piggyback off of that. */
									if (/^(fontSize|lineHeight)$/.test(property)) {
										/* Convert % into an em decimal value. */
										endValue = endValue / 100;
										endValueUnitType = "em";
										/* For scaleX and scaleY, convert the value into its decimal format and strip off the unit type. */
									} else if (/^scale/.test(property)) {
										endValue = endValue / 100;
										endValueUnitType = "";
										/* For RGB components, take the defined percentage of 255 and strip off the unit type. */
									} else if (/(Red|Green|Blue)$/i.test(property)) {
										endValue = (endValue / 100) * 255;
										endValueUnitType = "";
									}
								}
							}

							/***************************
							 Unit Ratio Calculation
							 ***************************/

							/* When queried, the browser returns (most) CSS property values in pixels. Therefore, if an endValue with a unit type of
							 %, em, or rem is animated toward, startValue must be converted from pixels into the same unit type as endValue in order
							 for value manipulation logic (increment/decrement) to proceed. Further, if the startValue was forcefed or transferred
							 from a previous call, startValue may also not be in pixels. Unit conversion logic therefore consists of two steps:
							 1) Calculating the ratio of %/em/rem/vh/vw relative to pixels
							 2) Converting startValue into the same unit of measurement as endValue based on these ratios. */
							/* Unit conversion ratios are calculated by inserting a sibling node next to the target node, copying over its position property,
							 setting values with the target unit type then comparing the returned pixel value. */
							/* Note: Even if only one of these unit types is being animated, all unit ratios are calculated at once since the overhead
							 of batching the SETs and GETs together upfront outweights the potential overhead
							 of layout thrashing caused by re-querying for uncalculated ratios for subsequently-processed properties. */
							/* Todo: Shift this logic into the calls' first tick instance so that it's synced with RAF. */
							var calculateUnitRatios = function() {

								/************************
								 Same Ratio Checks
								 ************************/

								/* The properties below are used to determine whether the element differs sufficiently from this call's
								 previously iterated element to also differ in its unit conversion ratios. If the properties match up with those
								 of the prior element, the prior element's conversion ratios are used. Like most optimizations in Velocity,
								 this is done to minimize DOM querying. */
								var sameRatioIndicators = {
									myParent: element.parentNode || document.body, /* GET */
									position: CSS.getPropertyValue(element, "position"), /* GET */
									fontSize: CSS.getPropertyValue(element, "fontSize") /* GET */
								},
										/* Determine if the same % ratio can be used. % is based on the element's position value and its parent's width and height dimensions. */
										samePercentRatio = ((sameRatioIndicators.position === callUnitConversionData.lastPosition) && (sameRatioIndicators.myParent === callUnitConversionData.lastParent)),
										/* Determine if the same em ratio can be used. em is relative to the element's fontSize. */
										sameEmRatio = (sameRatioIndicators.fontSize === callUnitConversionData.lastFontSize);

								/* Store these ratio indicators call-wide for the next element to compare against. */
								callUnitConversionData.lastParent = sameRatioIndicators.myParent;
								callUnitConversionData.lastPosition = sameRatioIndicators.position;
								callUnitConversionData.lastFontSize = sameRatioIndicators.fontSize;

								/***************************
								 Element-Specific Units
								 ***************************/

								/* Note: IE8 rounds to the nearest pixel when returning CSS values, thus we perform conversions using a measurement
								 of 100 (instead of 1) to give our ratios a precision of at least 2 decimal values. */
								var measurement = 100,
										unitRatios = {};

								if (!sameEmRatio || !samePercentRatio) {
									var dummy = data && data.isSVG ? document.createElementNS("http://www.w3.org/2000/svg", "rect") : document.createElement("div");

									Velocity.init(dummy);
									sameRatioIndicators.myParent.appendChild(dummy);

									/* To accurately and consistently calculate conversion ratios, the element's cascaded overflow and box-sizing are stripped.
									 Similarly, since width/height can be artificially constrained by their min-/max- equivalents, these are controlled for as well. */
									/* Note: Overflow must be also be controlled for per-axis since the overflow property overwrites its per-axis values. */
									$.each(["overflow", "overflowX", "overflowY"], function(i, property) {
										Velocity.CSS.setPropertyValue(dummy, property, "hidden");
									});
									Velocity.CSS.setPropertyValue(dummy, "position", sameRatioIndicators.position);
									Velocity.CSS.setPropertyValue(dummy, "fontSize", sameRatioIndicators.fontSize);
									Velocity.CSS.setPropertyValue(dummy, "boxSizing", "content-box");

									/* width and height act as our proxy properties for measuring the horizontal and vertical % ratios. */
									$.each(["minWidth", "maxWidth", "width", "minHeight", "maxHeight", "height"], function(i, property) {
										Velocity.CSS.setPropertyValue(dummy, property, measurement + "%");
									});
									/* paddingLeft arbitrarily acts as our proxy property for the em ratio. */
									Velocity.CSS.setPropertyValue(dummy, "paddingLeft", measurement + "em");

									/* Divide the returned value by the measurement to get the ratio between 1% and 1px. Default to 1 since working with 0 can produce Infinite. */
									unitRatios.percentToPxWidth = callUnitConversionData.lastPercentToPxWidth = (parseFloat(CSS.getPropertyValue(dummy, "width", null, true)) || 1) / measurement; /* GET */
									unitRatios.percentToPxHeight = callUnitConversionData.lastPercentToPxHeight = (parseFloat(CSS.getPropertyValue(dummy, "height", null, true)) || 1) / measurement; /* GET */
									unitRatios.emToPx = callUnitConversionData.lastEmToPx = (parseFloat(CSS.getPropertyValue(dummy, "paddingLeft")) || 1) / measurement; /* GET */

									sameRatioIndicators.myParent.removeChild(dummy);
								} else {
									unitRatios.emToPx = callUnitConversionData.lastEmToPx;
									unitRatios.percentToPxWidth = callUnitConversionData.lastPercentToPxWidth;
									unitRatios.percentToPxHeight = callUnitConversionData.lastPercentToPxHeight;
								}

								/***************************
								 Element-Agnostic Units
								 ***************************/

								/* Whereas % and em ratios are determined on a per-element basis, the rem unit only needs to be checked
								 once per call since it's exclusively dependant upon document.body's fontSize. If this is the first time
								 that calculateUnitRatios() is being run during this call, remToPx will still be set to its default value of null,
								 so we calculate it now. */
								if (callUnitConversionData.remToPx === null) {
									/* Default to browsers' default fontSize of 16px in the case of 0. */
									callUnitConversionData.remToPx = parseFloat(CSS.getPropertyValue(document.body, "fontSize")) || 16; /* GET */
								}

								/* Similarly, viewport units are %-relative to the window's inner dimensions. */
								if (callUnitConversionData.vwToPx === null) {
									callUnitConversionData.vwToPx = parseFloat(window.innerWidth) / 100; /* GET */
									callUnitConversionData.vhToPx = parseFloat(window.innerHeight) / 100; /* GET */
								}

								unitRatios.remToPx = callUnitConversionData.remToPx;
								unitRatios.vwToPx = callUnitConversionData.vwToPx;
								unitRatios.vhToPx = callUnitConversionData.vhToPx;

								if (Velocity.debug >= 1) {
									console.log("Unit ratios: " + JSON.stringify(unitRatios), element);
								}
								return unitRatios;
							};

							/********************
							 Unit Conversion
							 ********************/

							/* The * and / operators, which are not passed in with an associated unit, inherently use startValue's unit. Skip value and unit conversion. */
							if (/[\/*]/.test(operator)) {
								endValueUnitType = startValueUnitType;
								/* If startValue and endValue differ in unit type, convert startValue into the same unit type as endValue so that if endValueUnitType
								 is a relative unit (%, em, rem), the values set during tweening will continue to be accurately relative even if the metrics they depend
								 on are dynamically changing during the course of the animation. Conversely, if we always normalized into px and used px for setting values, the px ratio
								 would become stale if the original unit being animated toward was relative and the underlying metrics change during the animation. */
								/* Since 0 is 0 in any unit type, no conversion is necessary when startValue is 0 -- we just start at 0 with endValueUnitType. */
							} else if ((startValueUnitType !== endValueUnitType) && startValue !== 0) {
								/* Unit conversion is also skipped when endValue is 0, but *startValueUnitType* must be used for tween values to remain accurate. */
								/* Note: Skipping unit conversion here means that if endValueUnitType was originally a relative unit, the animation won't relatively
								 match the underlying metrics if they change, but this is acceptable since we're animating toward invisibility instead of toward visibility,
								 which remains past the point of the animation's completion. */
								if (endValue === 0) {
									endValueUnitType = startValueUnitType;
								} else {
									/* By this point, we cannot avoid unit conversion (it's undesirable since it causes layout thrashing).
									 If we haven't already, we trigger calculateUnitRatios(), which runs once per element per call. */
									elementUnitConversionData = elementUnitConversionData || calculateUnitRatios();

									/* The following RegEx matches CSS properties that have their % values measured relative to the x-axis. */
									/* Note: W3C spec mandates that all of margin and padding's properties (even top and bottom) are %-relative to the *width* of the parent element. */
									var axis = (/margin|padding|left|right|width|text|word|letter/i.test(property) || /X$/.test(property) || property === "x") ? "x" : "y";

									/* In order to avoid generating n^2 bespoke conversion functions, unit conversion is a two-step process:
									 1) Convert startValue into pixels. 2) Convert this new pixel value into endValue's unit type. */
									switch (startValueUnitType) {
										case "%":
											/* Note: translateX and translateY are the only properties that are %-relative to an element's own dimensions -- not its parent's dimensions.
											 Velocity does not include a special conversion process to account for this behavior. Therefore, animating translateX/Y from a % value
											 to a non-% value will produce an incorrect start value. Fortunately, this sort of cross-unit conversion is rarely done by users in practice. */
											startValue *= (axis === "x" ? elementUnitConversionData.percentToPxWidth : elementUnitConversionData.percentToPxHeight);
											break;

										case "px":
											/* px acts as our midpoint in the unit conversion process; do nothing. */
											break;

										default:
											startValue *= elementUnitConversionData[startValueUnitType + "ToPx"];
									}

									/* Invert the px ratios to convert into to the target unit. */
									switch (endValueUnitType) {
										case "%":
											startValue *= 1 / (axis === "x" ? elementUnitConversionData.percentToPxWidth : elementUnitConversionData.percentToPxHeight);
											break;

										case "px":
											/* startValue is already in px, do nothing; we're done. */
											break;

										default:
											startValue *= 1 / elementUnitConversionData[endValueUnitType + "ToPx"];
									}
								}
							}

							/*********************
							 Relative Values
							 *********************/

							/* Operator logic must be performed last since it requires unit-normalized start and end values. */
							/* Note: Relative *percent values* do not behave how most people think; while one would expect "+=50%"
							 to increase the property 1.5x its current value, it in fact increases the percent units in absolute terms:
							 50 points is added on top of the current % value. */
							switch (operator) {
								case "+":
									endValue = startValue + endValue;
									break;

								case "-":
									endValue = startValue - endValue;
									break;

								case "*":
									endValue = startValue * endValue;
									break;

								case "/":
									endValue = startValue / endValue;
									break;
							}

							/**************************
							 tweensContainer Push
							 **************************/

							/* Construct the per-property tween object, and push it to the element's tweensContainer. */
							tweensContainer[property] = {
								rootPropertyValue: rootPropertyValue,
								startValue: startValue,
								currentValue: startValue,
								endValue: endValue,
								unitType: endValueUnitType,
								easing: easing
							};
							if (pattern) {
								tweensContainer[property].pattern = pattern;
							}

							if (Velocity.debug) {
								console.log("tweensContainer (" + property + "): " + JSON.stringify(tweensContainer[property]), element);
							}
						};

						/* Create a tween out of each property, and append its associated data to tweensContainer. */
						for (var property in propertiesMap) {

							if (!propertiesMap.hasOwnProperty(property)) {
								continue;
							}
							/* The original property name's format must be used for the parsePropertyValue() lookup,
							 but we then use its camelCase styling to normalize it for manipulation. */
							var propertyName = CSS.Names.camelCase(property),
									valueData = parsePropertyValue(propertiesMap[property]);

							/* Find shorthand color properties that have been passed a hex string. */
							/* Would be quicker to use CSS.Lists.colors.includes() if possible */
							if (_inArray(CSS.Lists.colors, propertyName)) {
								/* Parse the value data for each shorthand. */
								var endValue = valueData[0],
										easing = valueData[1],
										startValue = valueData[2];

								if (CSS.RegEx.isHex.test(endValue)) {
									/* Convert the hex strings into their RGB component arrays. */
									var colorComponents = ["Red", "Green", "Blue"],
											endValueRGB = CSS.Values.hexToRgb(endValue),
											startValueRGB = startValue ? CSS.Values.hexToRgb(startValue) : undefined;

									/* Inject the RGB component tweens into propertiesMap. */
									for (var i = 0; i < colorComponents.length; i++) {
										var dataArray = [endValueRGB[i]];

										if (easing) {
											dataArray.push(easing);
										}

										if (startValueRGB !== undefined) {
											dataArray.push(startValueRGB[i]);
										}

										fixPropertyValue(propertyName + colorComponents[i], dataArray);
									}
									/* If we have replaced a shortcut color value then don't update the standard property name */
									continue;
								}
							}
							fixPropertyValue(propertyName, valueData);
						}

						/* Along with its property data, store a reference to the element itself onto tweensContainer. */
						tweensContainer.element = element;
					}

					/*****************
					 Call Push
					 *****************/

					/* Note: tweensContainer can be empty if all of the properties in this call's property map were skipped due to not
					 being supported by the browser. The element property is used for checking that the tweensContainer has been appended to. */
					if (tweensContainer.element) {
						/* Apply the "velocity-animating" indicator class. */
						CSS.Values.addClass(element, "velocity-animating");

						/* The call array houses the tweensContainers for each element being animated in the current call. */
						call.push(tweensContainer);

						data = Data(element);

						if (data) {
							/* Store the tweensContainer and options if we're working on the default effects queue, so that they can be used by the reverse command. */
							if (opts.queue === "") {

								data.tweensContainer = tweensContainer;
								data.opts = opts;
							}

							/* Switch on the element's animating flag. */
							data.isAnimating = true;
						}

						/* Once the final element in this call's element set has been processed, push the call array onto
						 Velocity.State.calls for the animation tick to immediately begin processing. */
						if (elementsIndex === elementsLength - 1) {
							/* Add the current call plus its associated metadata (the element set and the call's options) onto the global call container.
							 Anything on this call container is subjected to tick() processing. */
							Velocity.State.calls.push([call, elements, opts, null, promiseData.resolver, null, 0]);

							/* If the animation tick isn't running, start it. (Velocity shuts it off when there are no active calls to process.) */
							if (Velocity.State.isTicking === false) {
								Velocity.State.isTicking = true;

								/* Start the tick loop. */
								tick();
							}
						} else {
							elementsIndex++;
						}
					}
				}

				/* When the queue option is set to false, the call skips the element's queue and fires immediately. */
				if (opts.queue === false) {
					/* Since this buildQueue call doesn't respect the element's existing queue (which is where a delay option would have been appended),
					 we manually inject the delay property here with an explicit setTimeout. */
					if (opts.delay) {

						/* Temporarily store delayed elements to facilitate access for global pause/resume */
						var callIndex = Velocity.State.delayedElements.count++;
						Velocity.State.delayedElements[callIndex] = element;

						var delayComplete = (function(index) {
							return function() {
								/* Clear the temporary element */
								Velocity.State.delayedElements[index] = false;

								/* Finally, issue the call */
								buildQueue();
							};
						})(callIndex);

						Data(element).delayBegin = (new Date()).getTime();
						Data(element).delay = parseFloat(opts.delay);
						Data(element).delayTimer = {
							setTimeout: setTimeout(buildQueue, parseFloat(opts.delay)),
							next: delayComplete
						};
					} else {
						buildQueue();
					}
					/* Otherwise, the call undergoes element queueing as normal. */
					/* Note: To interoperate with jQuery, Velocity uses jQuery's own $.queue() stack for queuing logic. */
				} else {
					$.queue(element, opts.queue, function(next, clearQueue) {
						/* If the clearQueue flag was passed in by the stop command, resolve this call's promise. (Promises can only be resolved once,
						 so it's fine if this is repeatedly triggered for each element in the associated call.) */
						if (clearQueue === true) {
							if (promiseData.promise) {
								promiseData.resolver(elements);
							}

							/* Do not continue with animation queueing. */
							return true;
						}

						/* This flag indicates to the upcoming completeCall() function that this queue entry was initiated by Velocity.
						 See completeCall() for further details. */
						Velocity.velocityQueueEntryFlag = true;

						buildQueue(next);
					});
				}

				/*********************
				 Auto-Dequeuing
				 *********************/

				/* As per jQuery's $.queue() behavior, to fire the first non-custom-queue entry on an element, the element
				 must be dequeued if its queue stack consists *solely* of the current call. (This can be determined by checking
				 for the "inprogress" item that jQuery prepends to active queue stack arrays.) Regardless, whenever the element's
				 queue is further appended with additional items -- including $.delay()'s or even $.animate() calls, the queue's
				 first entry is automatically fired. This behavior contrasts that of custom queues, which never auto-fire. */
				/* Note: When an element set is being subjected to a non-parallel Velocity call, the animation will not begin until
				 each one of the elements in the set has reached the end of its individually pre-existing queue chain. */
				/* Note: Unfortunately, most people don't fully grasp jQuery's powerful, yet quirky, $.queue() function.
				 Lean more here: http://stackoverflow.com/questions/1058158/can-somebody-explain-jquery-queue-to-me */
				if ((opts.queue === "" || opts.queue === "fx") && $.queue(element)[0] !== "inprogress") {
					$.dequeue(element);
				}
			}

			/**************************
			 Element Set Iteration
			 **************************/

			/* If the "nodeType" property exists on the elements variable, we're animating a single element.
			 Place it in an array so that $.each() can iterate over it. */
			$.each(elements, function(i, element) {
				/* Ensure each element in a set has a nodeType (is a real element) to avoid throwing errors. */
				if (Type.isNode(element)) {
					processElement(element, i);
				}
			});

			/******************
			 Option: Loop
			 ******************/

			/* The loop option accepts an integer indicating how many times the element should loop between the values in the
			 current call's properties map and the element's property values prior to this call. */
			/* Note: The loop option's logic is performed here -- after element processing -- because the current call needs
			 to undergo its queue insertion prior to the loop option generating its series of constituent "reverse" calls,
			 which chain after the current call. Two reverse calls (two "alternations") constitute one loop. */
			opts = $.extend({}, Velocity.defaults, options);
			opts.loop = parseInt(opts.loop, 10);
			var reverseCallsCount = (opts.loop * 2) - 1;

			if (opts.loop) {
				/* Double the loop count to convert it into its appropriate number of "reverse" calls.
				 Subtract 1 from the resulting value since the current call is included in the total alternation count. */
				for (var x = 0; x < reverseCallsCount; x++) {
					/* Since the logic for the reverse action occurs inside Queueing and therefore this call's options object
					 isn't parsed until then as well, the current call's delay option must be explicitly passed into the reverse
					 call so that the delay logic that occurs inside *Pre-Queueing* can process it. */
					var reverseOptions = {
						delay: opts.delay,
						progress: opts.progress
					};

					/* If a complete callback was passed into this call, transfer it to the loop redirect's final "reverse" call
					 so that it's triggered when the entire redirect is complete (and not when the very first animation is complete). */
					if (x === reverseCallsCount - 1) {
						reverseOptions.display = opts.display;
						reverseOptions.visibility = opts.visibility;
						reverseOptions.complete = opts.complete;
					}

					animate(elements, "reverse", reverseOptions);
				}
			}

			/***************
			 Chaining
			 ***************/

			/* Return the elements back to the call chain, with wrapped elements taking precedence in case Velocity was called via the $.fn. extension. */
			return getChain();
		};

		/* Turn Velocity into the animation function, extended with the pre-existing Velocity object. */
		Velocity = $.extend(animate, Velocity);
		/* For legacy support, also expose the literal animate method. */
		Velocity.animate = animate;

		/**************
		 Timing
		 **************/

		/* Ticker function. */
		var ticker = window.requestAnimationFrame || rAFShim;

		/* Inactive browser tabs pause rAF, which results in all active animations immediately sprinting to their completion states when the tab refocuses.
		 To get around this, we dynamically switch rAF to setTimeout (which the browser *doesn't* pause) when the tab loses focus. We skip this for mobile
		 devices to avoid wasting battery power on inactive tabs. */
		/* Note: Tab focus detection doesn't work on older versions of IE, but that's okay since they don't support rAF to begin with. */
		if (!Velocity.State.isMobile && document.hidden !== undefined) {
			var updateTicker = function() {
				/* Reassign the rAF function (which the global tick() function uses) based on the tab's focus state. */
				if (document.hidden) {
					ticker = function(callback) {
						/* The tick function needs a truthy first argument in order to pass its internal timestamp check. */
						return setTimeout(function() {
							callback(true);
						}, 16);
					};

					/* The rAF loop has been paused by the browser, so we manually restart the tick. */
					tick();
				} else {
					ticker = window.requestAnimationFrame || rAFShim;
				}
			};

			/* Page could be sitting in the background at this time (i.e. opened as new tab) so making sure we use correct ticker from the start */
			updateTicker();

			/* And then run check again every time visibility changes */
			document.addEventListener("visibilitychange", updateTicker);
		}

		/************
		 Tick
		 ************/

		/* Note: All calls to Velocity are pushed to the Velocity.State.calls array, which is fully iterated through upon each tick. */
		function tick(timestamp) {
			/* An empty timestamp argument indicates that this is the first tick occurence since ticking was turned on.
			 We leverage this metadata to fully ignore the first tick pass since RAF's initial pass is fired whenever
			 the browser's next tick sync time occurs, which results in the first elements subjected to Velocity
			 calls being animated out of sync with any elements animated immediately thereafter. In short, we ignore
			 the first RAF tick pass so that elements being immediately consecutively animated -- instead of simultaneously animated
			 by the same Velocity call -- are properly batched into the same initial RAF tick and consequently remain in sync thereafter. */
			if (timestamp) {
				/* We normally use RAF's high resolution timestamp but as it can be significantly offset when the browser is
				 under high stress we give the option for choppiness over allowing the browser to drop huge chunks of frames.
				 We use performance.now() and shim it if it doesn't exist for when the tab is hidden. */
				var timeCurrent = Velocity.timestamp && timestamp !== true ? timestamp : performance.now();

				/********************
				 Call Iteration
				 ********************/

				var callsLength = Velocity.State.calls.length;

				/* To speed up iterating over this array, it is compacted (falsey items -- calls that have completed -- are removed)
				 when its length has ballooned to a point that can impact tick performance. This only becomes necessary when animation
				 has been continuous with many elements over a long period of time; whenever all active calls are completed, completeCall() clears Velocity.State.calls. */
				if (callsLength > 10000) {
					Velocity.State.calls = compactSparseArray(Velocity.State.calls);
					callsLength = Velocity.State.calls.length;
				}

				/* Iterate through each active call. */
				for (var i = 0; i < callsLength; i++) {
					/* When a Velocity call is completed, its Velocity.State.calls entry is set to false. Continue on to the next call. */
					if (!Velocity.State.calls[i]) {
						continue;
					}

					/************************
					 Call-Wide Variables
					 ************************/

					var callContainer = Velocity.State.calls[i],
							call = callContainer[0],
							opts = callContainer[2],
							timeStart = callContainer[3],
							firstTick = !timeStart,
							tweenDummyValue = null,
							pauseObject = callContainer[5],
							millisecondsEllapsed = callContainer[6];



					/* If timeStart is undefined, then this is the first time that this call has been processed by tick().
					 We assign timeStart now so that its value is as close to the real animation start time as possible.
					 (Conversely, had timeStart been defined when this call was added to Velocity.State.calls, the delay
					 between that time and now would cause the first few frames of the tween to be skipped since
					 percentComplete is calculated relative to timeStart.) */
					/* Further, subtract 16ms (the approximate resolution of RAF) from the current time value so that the
					 first tick iteration isn't wasted by animating at 0% tween completion, which would produce the
					 same style value as the element's current value. */
					if (!timeStart) {
						timeStart = Velocity.State.calls[i][3] = timeCurrent - 16;
					}

					/* If a pause object is present, skip processing unless it has been set to resume */
					if (pauseObject) {
						if (pauseObject.resume === true) {
							/* Update the time start to accomodate the paused completion amount */
							timeStart = callContainer[3] = Math.round(timeCurrent - millisecondsEllapsed - 16);

							/* Remove pause object after processing */
							callContainer[5] = null;
						} else {
							continue;
						}
					}

					millisecondsEllapsed = callContainer[6] = timeCurrent - timeStart;

					/* The tween's completion percentage is relative to the tween's start time, not the tween's start value
					 (which would result in unpredictable tween durations since JavaScript's timers are not particularly accurate).
					 Accordingly, we ensure that percentComplete does not exceed 1. */
					var percentComplete = Math.min((millisecondsEllapsed) / opts.duration, 1);

					/**********************
					 Element Iteration
					 **********************/

					/* For every call, iterate through each of the elements in its set. */
					for (var j = 0, callLength = call.length; j < callLength; j++) {
						var tweensContainer = call[j],
								element = tweensContainer.element;

						/* Check to see if this element has been deleted midway through the animation by checking for the
						 continued existence of its data cache. If it's gone, or the element is currently paused, skip animating this element. */
						if (!Data(element)) {
							continue;
						}

						var transformPropertyExists = false;

						/**********************************
						 Display & Visibility Toggling
						 **********************************/

						/* If the display option is set to non-"none", set it upfront so that the element can become visible before tweening begins.
						 (Otherwise, display's "none" value is set in completeCall() once the animation has completed.) */
						if (opts.display !== undefined && opts.display !== null && opts.display !== "none") {
							if (opts.display === "flex") {
								var flexValues = ["-webkit-box", "-moz-box", "-ms-flexbox", "-webkit-flex"];

								$.each(flexValues, function(i, flexValue) {
									CSS.setPropertyValue(element, "display", flexValue);
								});
							}

							CSS.setPropertyValue(element, "display", opts.display);
						}

						/* Same goes with the visibility option, but its "none" equivalent is "hidden". */
						if (opts.visibility !== undefined && opts.visibility !== "hidden") {
							CSS.setPropertyValue(element, "visibility", opts.visibility);
						}

						/************************
						 Property Iteration
						 ************************/

						/* For every element, iterate through each property. */
						for (var property in tweensContainer) {
							/* Note: In addition to property tween data, tweensContainer contains a reference to its associated element. */
							if (tweensContainer.hasOwnProperty(property) && property !== "element") {
								var tween = tweensContainer[property],
										currentValue,
										/* Easing can either be a pre-genereated function or a string that references a pre-registered easing
										 on the Velocity.Easings object. In either case, return the appropriate easing *function*. */
										easing = Type.isString(tween.easing) ? Velocity.Easings[tween.easing] : tween.easing;

								/******************************
								 Current Value Calculation
								 ******************************/

								if (Type.isString(tween.pattern)) {
									var patternReplace = percentComplete === 1 ?
											function($0, index, round) {
												var result = tween.endValue[index];

												return round ? Math.round(result) : result;
											} :
											function($0, index, round) {
												var startValue = tween.startValue[index],
														tweenDelta = tween.endValue[index] - startValue,
														result = startValue + (tweenDelta * easing(percentComplete, opts, tweenDelta));

												return round ? Math.round(result) : result;
											};

									currentValue = tween.pattern.replace(/{(\d+)(!)?}/g, patternReplace);
								} else if (percentComplete === 1) {
									/* If this is the last tick pass (if we've reached 100% completion for this tween),
									 ensure that currentValue is explicitly set to its target endValue so that it's not subjected to any rounding. */
									currentValue = tween.endValue;
								} else {
									/* Otherwise, calculate currentValue based on the current delta from startValue. */
									var tweenDelta = tween.endValue - tween.startValue;

									currentValue = tween.startValue + (tweenDelta * easing(percentComplete, opts, tweenDelta));
									/* If no value change is occurring, don't proceed with DOM updating. */
								}
								if (!firstTick && (currentValue === tween.currentValue)) {
									continue;
								}

								tween.currentValue = currentValue;

								/* If we're tweening a fake 'tween' property in order to log transition values, update the one-per-call variable so that
								 it can be passed into the progress callback. */
								if (property === "tween") {
									tweenDummyValue = currentValue;
								} else {
									/******************
									 Hooks: Part I
									 ******************/
									var hookRoot;

									/* For hooked properties, the newly-updated rootPropertyValueCache is cached onto the element so that it can be used
									 for subsequent hooks in this call that are associated with the same root property. If we didn't cache the updated
									 rootPropertyValue, each subsequent update to the root property in this tick pass would reset the previous hook's
									 updates to rootPropertyValue prior to injection. A nice performance byproduct of rootPropertyValue caching is that
									 subsequently chained animations using the same hookRoot but a different hook can use this cached rootPropertyValue. */
									if (CSS.Hooks.registered[property]) {
										hookRoot = CSS.Hooks.getRoot(property);

										var rootPropertyValueCache = Data(element).rootPropertyValueCache[hookRoot];

										if (rootPropertyValueCache) {
											tween.rootPropertyValue = rootPropertyValueCache;
										}
									}

									/*****************
									 DOM Update
									 *****************/

									/* setPropertyValue() returns an array of the property name and property value post any normalization that may have been performed. */
									/* Note: To solve an IE<=8 positioning bug, the unit type is dropped when setting a property value of 0. */
									var adjustedSetData = CSS.setPropertyValue(element, /* SET */
											property,
											tween.currentValue + (IE < 9 && parseFloat(currentValue) === 0 ? "" : tween.unitType),
											tween.rootPropertyValue,
											tween.scrollData);

									/*******************
									 Hooks: Part II
									 *******************/

									/* Now that we have the hook's updated rootPropertyValue (the post-processed value provided by adjustedSetData), cache it onto the element. */
									if (CSS.Hooks.registered[property]) {
										/* Since adjustedSetData contains normalized data ready for DOM updating, the rootPropertyValue needs to be re-extracted from its normalized form. ?? */
										if (CSS.Normalizations.registered[hookRoot]) {
											Data(element).rootPropertyValueCache[hookRoot] = CSS.Normalizations.registered[hookRoot]("extract", null, adjustedSetData[1]);
										} else {
											Data(element).rootPropertyValueCache[hookRoot] = adjustedSetData[1];
										}
									}

									/***************
									 Transforms
									 ***************/

									/* Flag whether a transform property is being animated so that flushTransformCache() can be triggered once this tick pass is complete. */
									if (adjustedSetData[0] === "transform") {
										transformPropertyExists = true;
									}

								}
							}
						}

						/****************
						 mobileHA
						 ****************/

						/* If mobileHA is enabled, set the translate3d transform to null to force hardware acceleration.
						 It's safe to override this property since Velocity doesn't actually support its animation (hooks are used in its place). */
						if (opts.mobileHA) {
							/* Don't set the null transform hack if we've already done so. */
							if (Data(element).transformCache.translate3d === undefined) {
								/* All entries on the transformCache object are later concatenated into a single transform string via flushTransformCache(). */
								Data(element).transformCache.translate3d = "(0px, 0px, 0px)";

								transformPropertyExists = true;
							}
						}

						if (transformPropertyExists) {
							CSS.flushTransformCache(element);
						}
					}

					/* The non-"none" display value is only applied to an element once -- when its associated call is first ticked through.
					 Accordingly, it's set to false so that it isn't re-processed by this call in the next tick. */
					if (opts.display !== undefined && opts.display !== "none") {
						Velocity.State.calls[i][2].display = false;
					}
					if (opts.visibility !== undefined && opts.visibility !== "hidden") {
						Velocity.State.calls[i][2].visibility = false;
					}

					/* Pass the elements and the timing data (percentComplete, msRemaining, timeStart, tweenDummyValue) into the progress callback. */
					if (opts.progress) {
						opts.progress.call(callContainer[1],
								callContainer[1],
								percentComplete,
								Math.max(0, (timeStart + opts.duration) - timeCurrent),
								timeStart,
								tweenDummyValue);
					}

					/* If this call has finished tweening, pass its index to completeCall() to handle call cleanup. */
					if (percentComplete === 1) {
						completeCall(i);
					}
				}
			}

			/* Note: completeCall() sets the isTicking flag to false when the last call on Velocity.State.calls has completed. */
			if (Velocity.State.isTicking) {
				ticker(tick);
			}
		}

		/**********************
		 Call Completion
		 **********************/

		/* Note: Unlike tick(), which processes all active calls at once, call completion is handled on a per-call basis. */
		function completeCall(callIndex, isStopped) {
			/* Ensure the call exists. */
			if (!Velocity.State.calls[callIndex]) {
				return false;
			}

			/* Pull the metadata from the call. */
			var call = Velocity.State.calls[callIndex][0],
					elements = Velocity.State.calls[callIndex][1],
					opts = Velocity.State.calls[callIndex][2],
					resolver = Velocity.State.calls[callIndex][4];

			var remainingCallsExist = false;

			/*************************
			 Element Finalization
			 *************************/

			for (var i = 0, callLength = call.length; i < callLength; i++) {
				var element = call[i].element;

				/* If the user set display to "none" (intending to hide the element), set it now that the animation has completed. */
				/* Note: display:none isn't set when calls are manually stopped (via Velocity("stop"). */
				/* Note: Display gets ignored with "reverse" calls and infinite loops, since this behavior would be undesirable. */
				if (!isStopped && !opts.loop) {
					if (opts.display === "none") {
						CSS.setPropertyValue(element, "display", opts.display);
					}

					if (opts.visibility === "hidden") {
						CSS.setPropertyValue(element, "visibility", opts.visibility);
					}
				}

				/* If the element's queue is empty (if only the "inprogress" item is left at position 0) or if its queue is about to run
				 a non-Velocity-initiated entry, turn off the isAnimating flag. A non-Velocity-initiatied queue entry's logic might alter
				 an element's CSS values and thereby cause Velocity's cached value data to go stale. To detect if a queue entry was initiated by Velocity,
				 we check for the existence of our special Velocity.queueEntryFlag declaration, which minifiers won't rename since the flag
				 is assigned to jQuery's global $ object and thus exists out of Velocity's own scope. */
				var data = Data(element);

				if (opts.loop !== true && ($.queue(element)[1] === undefined || !/\.velocityQueueEntryFlag/i.test($.queue(element)[1]))) {
					/* The element may have been deleted. Ensure that its data cache still exists before acting on it. */
					if (data) {
						data.isAnimating = false;
						/* Clear the element's rootPropertyValueCache, which will become stale. */
						data.rootPropertyValueCache = {};

						var transformHAPropertyExists = false;
						/* If any 3D transform subproperty is at its default value (regardless of unit type), remove it. */
						$.each(CSS.Lists.transforms3D, function(i, transformName) {
							var defaultValue = /^scale/.test(transformName) ? 1 : 0,
									currentValue = data.transformCache[transformName];

							if (data.transformCache[transformName] !== undefined && new RegExp("^\\(" + defaultValue + "[^.]").test(currentValue)) {
								transformHAPropertyExists = true;

								delete data.transformCache[transformName];
							}
						});

						/* Mobile devices have hardware acceleration removed at the end of the animation in order to avoid hogging the GPU's memory. */
						if (opts.mobileHA) {
							transformHAPropertyExists = true;
							delete data.transformCache.translate3d;
						}

						/* Flush the subproperty removals to the DOM. */
						if (transformHAPropertyExists) {
							CSS.flushTransformCache(element);
						}

						/* Remove the "velocity-animating" indicator class. */
						CSS.Values.removeClass(element, "velocity-animating");
					}
				}

				/*********************
				 Option: Complete
				 *********************/

				/* Complete is fired once per call (not once per element) and is passed the full raw DOM element set as both its context and its first argument. */
				/* Note: Callbacks aren't fired when calls are manually stopped (via Velocity("stop"). */
				if (!isStopped && opts.complete && !opts.loop && (i === callLength - 1)) {
					/* We throw callbacks in a setTimeout so that thrown errors don't halt the execution of Velocity itself. */
					try {
						opts.complete.call(elements, elements);
					} catch (error) {
						setTimeout(function() {
							throw error;
						}, 1);
					}
				}

				/**********************
				 Promise Resolving
				 **********************/

				/* Note: Infinite loops don't return promises. */
				if (resolver && opts.loop !== true) {
					resolver(elements);
				}

				/****************************
				 Option: Loop (Infinite)
				 ****************************/

				if (data && opts.loop === true && !isStopped) {
					/* If a rotateX/Y/Z property is being animated by 360 deg with loop:true, swap tween start/end values to enable
					 continuous iterative rotation looping. (Otherise, the element would just rotate back and forth.) */
					$.each(data.tweensContainer, function(propertyName, tweenContainer) {
						if (/^rotate/.test(propertyName) && ((parseFloat(tweenContainer.startValue) - parseFloat(tweenContainer.endValue)) % 360 === 0)) {
							var oldStartValue = tweenContainer.startValue;

							tweenContainer.startValue = tweenContainer.endValue;
							tweenContainer.endValue = oldStartValue;
						}

						if (/^backgroundPosition/.test(propertyName) && parseFloat(tweenContainer.endValue) === 100 && tweenContainer.unitType === "%") {
							tweenContainer.endValue = 0;
							tweenContainer.startValue = 100;
						}
					});

					Velocity(element, "reverse", {loop: true, delay: opts.delay});
				}

				/***************
				 Dequeueing
				 ***************/

				/* Fire the next call in the queue so long as this call's queue wasn't set to false (to trigger a parallel animation),
				 which would have already caused the next call to fire. Note: Even if the end of the animation queue has been reached,
				 $.dequeue() must still be called in order to completely clear jQuery's animation queue. */
				if (opts.queue !== false) {
					$.dequeue(element, opts.queue);
				}
			}

			/************************
			 Calls Array Cleanup
			 ************************/

			/* Since this call is complete, set it to false so that the rAF tick skips it. This array is later compacted via compactSparseArray().
			 (For performance reasons, the call is set to false instead of being deleted from the array: http://www.html5rocks.com/en/tutorials/speed/v8/) */
			Velocity.State.calls[callIndex] = false;

			/* Iterate through the calls array to determine if this was the final in-progress animation.
			 If so, set a flag to end ticking and clear the calls array. */
			for (var j = 0, callsLength = Velocity.State.calls.length; j < callsLength; j++) {
				if (Velocity.State.calls[j] !== false) {
					remainingCallsExist = true;

					break;
				}
			}

			if (remainingCallsExist === false) {
				/* tick() will detect this flag upon its next iteration and subsequently turn itself off. */
				Velocity.State.isTicking = false;

				/* Clear the calls array so that its length is reset. */
				delete Velocity.State.calls;
				Velocity.State.calls = [];
			}
		}

		/******************
		 Frameworks
		 ******************/

		/* Both jQuery and Zepto allow their $.fn object to be extended to allow wrapped elements to be subjected to plugin calls.
		 If either framework is loaded, register a "velocity" extension pointing to Velocity's core animate() method.  Velocity
		 also registers itself onto a global container (window.jQuery || window.Zepto || window) so that certain features are
		 accessible beyond just a per-element scope. This master object contains an .animate() method, which is later assigned to $.fn
		 (if jQuery or Zepto are present). Accordingly, Velocity can both act on wrapped DOM elements and stand alone for targeting raw DOM elements. */
		global.Velocity = Velocity;

		if (global !== window) {
			/* Assign the element function to Velocity's core animate() method. */
			global.fn.velocity = animate;
			/* Assign the object function's defaults to Velocity's global defaults object. */
			global.fn.velocity.defaults = Velocity.defaults;
		}

		/***********************
		 Packaged Redirects
		 ***********************/

		/* slideUp, slideDown */
		$.each(["Down", "Up"], function(i, direction) {
			Velocity.Redirects["slide" + direction] = function(element, options, elementsIndex, elementsSize, elements, promiseData) {
				var opts = $.extend({}, options),
						begin = opts.begin,
						complete = opts.complete,
						inlineValues = {},
						computedValues = {height: "", marginTop: "", marginBottom: "", paddingTop: "", paddingBottom: ""};

				if (opts.display === undefined) {
					/* Show the element before slideDown begins and hide the element after slideUp completes. */
					/* Note: Inline elements cannot have dimensions animated, so they're reverted to inline-block. */
					opts.display = (direction === "Down" ? (Velocity.CSS.Values.getDisplayType(element) === "inline" ? "inline-block" : "block") : "none");
				}

				opts.begin = function() {
					/* If the user passed in a begin callback, fire it now. */
					if (elementsIndex === 0 && begin) {
						begin.call(elements, elements);
					}

					/* Cache the elements' original vertical dimensional property values so that we can animate back to them. */
					for (var property in computedValues) {
						if (!computedValues.hasOwnProperty(property)) {
							continue;
						}
						inlineValues[property] = element.style[property];

						/* For slideDown, use forcefeeding to animate all vertical properties from 0. For slideUp,
						 use forcefeeding to start from computed values and animate down to 0. */
						var propertyValue = CSS.getPropertyValue(element, property);
						computedValues[property] = (direction === "Down") ? [propertyValue, 0] : [0, propertyValue];
					}

					/* Force vertical overflow content to clip so that sliding works as expected. */
					inlineValues.overflow = element.style.overflow;
					element.style.overflow = "hidden";
				};

				opts.complete = function() {
					/* Reset element to its pre-slide inline values once its slide animation is complete. */
					for (var property in inlineValues) {
						if (inlineValues.hasOwnProperty(property)) {
							element.style[property] = inlineValues[property];
						}
					}

					/* If the user passed in a complete callback, fire it now. */
					if (elementsIndex === elementsSize - 1) {
						if (complete) {
							complete.call(elements, elements);
						}
						if (promiseData) {
							promiseData.resolver(elements);
						}
					}
				};

				Velocity(element, computedValues, opts);
			};
		});

		/* fadeIn, fadeOut */
		$.each(["In", "Out"], function(i, direction) {
			Velocity.Redirects["fade" + direction] = function(element, options, elementsIndex, elementsSize, elements, promiseData) {
				var opts = $.extend({}, options),
						complete = opts.complete,
						propertiesMap = {opacity: (direction === "In") ? 1 : 0};

				/* Since redirects are triggered individually for each element in the animated set, avoid repeatedly triggering
				 callbacks by firing them only when the final element has been reached. */
				if (elementsIndex !== 0) {
					opts.begin = null;
				}
				if (elementsIndex !== elementsSize - 1) {
					opts.complete = null;
				} else {
					opts.complete = function() {
						if (complete) {
							complete.call(elements, elements);
						}
						if (promiseData) {
							promiseData.resolver(elements);
						}
					};
				}

				/* If a display was passed in, use it. Otherwise, default to "none" for fadeOut or the element-specific default for fadeIn. */
				/* Note: We allow users to pass in "null" to skip display setting altogether. */
				if (opts.display === undefined) {
					opts.display = (direction === "In" ? "auto" : "none");
				}

				Velocity(this, propertiesMap, opts);
			};
		});

		return Velocity;
	}((window.jQuery || window.Zepto || window), window, (window ? window.document : undefined));
}));

/******************
 Known Issues
 ******************/

/* The CSS spec mandates that the translateX/Y/Z transforms are %-relative to the element itself -- not its parent.
 Velocity, however, doesn't make this distinction. Thus, converting to or from the % unit with these subproperties
 will produce an inaccurate conversion value. The same issue exists with the cx/cy attributes of SVG circles and ellipses. */
/*! VelocityJS.org (1.5.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */
/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */
!function(a){"use strict";function b(a){var b=a.length,d=c.type(a);return"function"!==d&&!c.isWindow(a)&&(!(1!==a.nodeType||!b)||("array"===d||0===b||"number"==typeof b&&b>0&&b-1 in a))}if(!a.jQuery){var c=function(a,b){return new c.fn.init(a,b)};c.isWindow=function(a){return a&&a===a.window},c.type=function(a){return a?"object"==typeof a||"function"==typeof a?e[g.call(a)]||"object":typeof a:a+""},c.isArray=Array.isArray||function(a){return"array"===c.type(a)},c.isPlainObject=function(a){var b;if(!a||"object"!==c.type(a)||a.nodeType||c.isWindow(a))return!1;try{if(a.constructor&&!f.call(a,"constructor")&&!f.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}for(b in a);return b===undefined||f.call(a,b)},c.each=function(a,c,d){var e=0,f=a.length,g=b(a);if(d){if(g)for(;e<f&&!1!==c.apply(a[e],d);e++);else for(e in a)if(a.hasOwnProperty(e)&&!1===c.apply(a[e],d))break}else if(g)for(;e<f&&!1!==c.call(a[e],e,a[e]);e++);else for(e in a)if(a.hasOwnProperty(e)&&!1===c.call(a[e],e,a[e]))break;return a},c.data=function(a,b,e){if(e===undefined){var f=a[c.expando],g=f&&d[f];if(b===undefined)return g;if(g&&b in g)return g[b]}else if(b!==undefined){var h=a[c.expando]||(a[c.expando]=++c.uuid);return d[h]=d[h]||{},d[h][b]=e,e}},c.removeData=function(a,b){var e=a[c.expando],f=e&&d[e];f&&(b?c.each(b,function(a,b){delete f[b]}):delete d[e])},c.extend=function(){var a,b,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for("boolean"==typeof h&&(k=h,h=arguments[i]||{},i++),"object"!=typeof h&&"function"!==c.type(h)&&(h={}),i===j&&(h=this,i--);i<j;i++)if(f=arguments[i])for(e in f)f.hasOwnProperty(e)&&(a=h[e],d=f[e],h!==d&&(k&&d&&(c.isPlainObject(d)||(b=c.isArray(d)))?(b?(b=!1,g=a&&c.isArray(a)?a:[]):g=a&&c.isPlainObject(a)?a:{},h[e]=c.extend(k,g,d)):d!==undefined&&(h[e]=d)));return h},c.queue=function(a,d,e){if(a){d=(d||"fx")+"queue";var f=c.data(a,d);return e?(!f||c.isArray(e)?f=c.data(a,d,function(a,c){var d=c||[];return a&&(b(Object(a))?function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;)a[e++]=b[d++];if(c!==c)for(;b[d]!==undefined;)a[e++]=b[d++];a.length=e}(d,"string"==typeof a?[a]:a):[].push.call(d,a)),d}(e)):f.push(e),f):f||[]}},c.dequeue=function(a,b){c.each(a.nodeType?[a]:a,function(a,d){b=b||"fx";var e=c.queue(d,b),f=e.shift();"inprogress"===f&&(f=e.shift()),f&&("fx"===b&&e.unshift("inprogress"),f.call(d,function(){c.dequeue(d,b)}))})},c.fn=c.prototype={init:function(a){if(a.nodeType)return this[0]=a,this;throw new Error("Not a DOM node.")},offset:function(){var b=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:b.top+(a.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:b.left+(a.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){var a=this[0],b=function(a){for(var b=a.offsetParent;b&&"html"!==b.nodeName.toLowerCase()&&b.style&&"static"===b.style.position.toLowerCase();)b=b.offsetParent;return b||document}(a),d=this.offset(),e=/^(?:body|html)$/i.test(b.nodeName)?{top:0,left:0}:c(b).offset();return d.top-=parseFloat(a.style.marginTop)||0,d.left-=parseFloat(a.style.marginLeft)||0,b.style&&(e.top+=parseFloat(b.style.borderTopWidth)||0,e.left+=parseFloat(b.style.borderLeftWidth)||0),{top:d.top-e.top,left:d.left-e.left}}};var d={};c.expando="velocity"+(new Date).getTime(),c.uuid=0;for(var e={},f=e.hasOwnProperty,g=e.toString,h="Boolean Number String Function Array Date RegExp Object Error".split(" "),i=0;i<h.length;i++)e["[object "+h[i]+"]"]=h[i].toLowerCase();c.fn.init.prototype=c.fn,a.Velocity={Utilities:c}}}(window),function(a){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a():"function"==typeof define&&define.amd?define(a):a()}(function(){"use strict";return function(a,b,c,d){function e(a){for(var b=-1,c=a?a.length:0,d=[];++b<c;){var e=a[b];e&&d.push(e)}return d}function f(a){return u.isWrapped(a)?a=s.call(a):u.isNode(a)&&(a=[a]),a}function g(a){var b=o.data(a,"velocity");return null===b?d:b}function h(a,b){var c=g(a);c&&c.delayTimer&&!c.delayPaused&&(c.delayRemaining=c.delay-b+c.delayBegin,c.delayPaused=!0,clearTimeout(c.delayTimer.setTimeout))}function i(a,b){var c=g(a);c&&c.delayTimer&&c.delayPaused&&(c.delayPaused=!1,c.delayTimer.setTimeout=setTimeout(c.delayTimer.next,c.delayRemaining))}function j(a){return function(b){return Math.round(b*a)*(1/a)}}function k(a,c,d,e){function f(a,b){return 1-3*b+3*a}function g(a,b){return 3*b-6*a}function h(a){return 3*a}function i(a,b,c){return((f(b,c)*a+g(b,c))*a+h(b))*a}function j(a,b,c){return 3*f(b,c)*a*a+2*g(b,c)*a+h(b)}function k(b,c){for(var e=0;e<p;++e){var f=j(c,a,d);if(0===f)return c;c-=(i(c,a,d)-b)/f}return c}function l(){for(var b=0;b<t;++b)x[b]=i(b*u,a,d)}function m(b,c,e){var f,g,h=0;do{g=c+(e-c)/2,f=i(g,a,d)-b,f>0?e=g:c=g}while(Math.abs(f)>r&&++h<s);return g}function n(b){for(var c=0,e=1,f=t-1;e!==f&&x[e]<=b;++e)c+=u;--e;var g=(b-x[e])/(x[e+1]-x[e]),h=c+g*u,i=j(h,a,d);return i>=q?k(b,h):0===i?h:m(b,c,c+u)}function o(){y=!0,a===c&&d===e||l()}var p=4,q=.001,r=1e-7,s=10,t=11,u=1/(t-1),v="Float32Array"in b;if(4!==arguments.length)return!1;for(var w=0;w<4;++w)if("number"!=typeof arguments[w]||isNaN(arguments[w])||!isFinite(arguments[w]))return!1;a=Math.min(a,1),d=Math.min(d,1),a=Math.max(a,0),d=Math.max(d,0);var x=v?new Float32Array(t):new Array(t),y=!1,z=function(b){return y||o(),a===c&&d===e?b:0===b?0:1===b?1:i(n(b),c,e)};z.getControlPoints=function(){return[{x:a,y:c},{x:d,y:e}]};var A="generateBezier("+[a,c,d,e]+")";return z.toString=function(){return A},z}function l(a,b){var c=a;return u.isString(a)?y.Easings[a]||(c=!1):c=u.isArray(a)&&1===a.length?j.apply(null,a):u.isArray(a)&&2===a.length?z.apply(null,a.concat([b])):!(!u.isArray(a)||4!==a.length)&&k.apply(null,a),!1===c&&(c=y.Easings[y.defaults.easing]?y.defaults.easing:x),c}function m(a){if(a){var b=y.timestamp&&!0!==a?a:r.now(),c=y.State.calls.length;c>1e4&&(y.State.calls=e(y.State.calls),c=y.State.calls.length);for(var f=0;f<c;f++)if(y.State.calls[f]){var h=y.State.calls[f],i=h[0],j=h[2],k=h[3],l=!k,q=null,s=h[5],t=h[6];if(k||(k=y.State.calls[f][3]=b-16),s){if(!0!==s.resume)continue;k=h[3]=Math.round(b-t-16),h[5]=null}t=h[6]=b-k;for(var v=Math.min(t/j.duration,1),w=0,x=i.length;w<x;w++){var z=i[w],B=z.element;if(g(B)){var D=!1;if(j.display!==d&&null!==j.display&&"none"!==j.display){if("flex"===j.display){var E=["-webkit-box","-moz-box","-ms-flexbox","-webkit-flex"];o.each(E,function(a,b){A.setPropertyValue(B,"display",b)})}A.setPropertyValue(B,"display",j.display)}j.visibility!==d&&"hidden"!==j.visibility&&A.setPropertyValue(B,"visibility",j.visibility);for(var F in z)if(z.hasOwnProperty(F)&&"element"!==F){var G,H=z[F],I=u.isString(H.easing)?y.Easings[H.easing]:H.easing;if(u.isString(H.pattern)){var J=1===v?function(a,b,c){var d=H.endValue[b];return c?Math.round(d):d}:function(a,b,c){var d=H.startValue[b],e=H.endValue[b]-d,f=d+e*I(v,j,e);return c?Math.round(f):f};G=H.pattern.replace(/{(\d+)(!)?}/g,J)}else if(1===v)G=H.endValue;else{var K=H.endValue-H.startValue;G=H.startValue+K*I(v,j,K)}if(!l&&G===H.currentValue)continue;if(H.currentValue=G,"tween"===F)q=G;else{var L;if(A.Hooks.registered[F]){L=A.Hooks.getRoot(F);var M=g(B).rootPropertyValueCache[L];M&&(H.rootPropertyValue=M)}var N=A.setPropertyValue(B,F,H.currentValue+(p<9&&0===parseFloat(G)?"":H.unitType),H.rootPropertyValue,H.scrollData);A.Hooks.registered[F]&&(A.Normalizations.registered[L]?g(B).rootPropertyValueCache[L]=A.Normalizations.registered[L]("extract",null,N[1]):g(B).rootPropertyValueCache[L]=N[1]),"transform"===N[0]&&(D=!0)}}j.mobileHA&&g(B).transformCache.translate3d===d&&(g(B).transformCache.translate3d="(0px, 0px, 0px)",D=!0),D&&A.flushTransformCache(B)}}j.display!==d&&"none"!==j.display&&(y.State.calls[f][2].display=!1),j.visibility!==d&&"hidden"!==j.visibility&&(y.State.calls[f][2].visibility=!1),j.progress&&j.progress.call(h[1],h[1],v,Math.max(0,k+j.duration-b),k,q),1===v&&n(f)}}y.State.isTicking&&C(m)}function n(a,b){if(!y.State.calls[a])return!1;for(var c=y.State.calls[a][0],e=y.State.calls[a][1],f=y.State.calls[a][2],h=y.State.calls[a][4],i=!1,j=0,k=c.length;j<k;j++){var l=c[j].element;b||f.loop||("none"===f.display&&A.setPropertyValue(l,"display",f.display),"hidden"===f.visibility&&A.setPropertyValue(l,"visibility",f.visibility));var m=g(l);if(!0!==f.loop&&(o.queue(l)[1]===d||!/\.velocityQueueEntryFlag/i.test(o.queue(l)[1]))&&m){m.isAnimating=!1,m.rootPropertyValueCache={};var n=!1;o.each(A.Lists.transforms3D,function(a,b){var c=/^scale/.test(b)?1:0,e=m.transformCache[b];m.transformCache[b]!==d&&new RegExp("^\\("+c+"[^.]").test(e)&&(n=!0,delete m.transformCache[b])}),f.mobileHA&&(n=!0,delete m.transformCache.translate3d),n&&A.flushTransformCache(l),A.Values.removeClass(l,"velocity-animating")}if(!b&&f.complete&&!f.loop&&j===k-1)try{f.complete.call(e,e)}catch(r){setTimeout(function(){throw r},1)}h&&!0!==f.loop&&h(e),m&&!0===f.loop&&!b&&(o.each(m.tweensContainer,function(a,b){if(/^rotate/.test(a)&&(parseFloat(b.startValue)-parseFloat(b.endValue))%360==0){var c=b.startValue;b.startValue=b.endValue,b.endValue=c}/^backgroundPosition/.test(a)&&100===parseFloat(b.endValue)&&"%"===b.unitType&&(b.endValue=0,b.startValue=100)}),y(l,"reverse",{loop:!0,delay:f.delay})),!1!==f.queue&&o.dequeue(l,f.queue)}y.State.calls[a]=!1;for(var p=0,q=y.State.calls.length;p<q;p++)if(!1!==y.State.calls[p]){i=!0;break}!1===i&&(y.State.isTicking=!1,delete y.State.calls,y.State.calls=[])}var o,p=function(){if(c.documentMode)return c.documentMode;for(var a=7;a>4;a--){var b=c.createElement("div");if(b.innerHTML="\x3c!--[if IE "+a+"]><span></span><![endif]--\x3e",b.getElementsByTagName("span").length)return b=null,a}return d}(),q=function(){var a=0;return b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame||function(b){var c,d=(new Date).getTime();return c=Math.max(0,16-(d-a)),a=d+c,setTimeout(function(){b(d+c)},c)}}(),r=function(){var a=b.performance||{};if("function"!=typeof a.now){var c=a.timing&&a.timing.navigationStart?a.timing.navigationStart:(new Date).getTime();a.now=function(){return(new Date).getTime()-c}}return a}(),s=function(){var a=Array.prototype.slice;try{return a.call(c.documentElement),a}catch(b){return function(b,c){var d=this.length;if("number"!=typeof b&&(b=0),"number"!=typeof c&&(c=d),this.slice)return a.call(this,b,c);var e,f=[],g=b>=0?b:Math.max(0,d+b),h=c<0?d+c:Math.min(c,d),i=h-g;if(i>0)if(f=new Array(i),this.charAt)for(e=0;e<i;e++)f[e]=this.charAt(g+e);else for(e=0;e<i;e++)f[e]=this[g+e];return f}}}(),t=function(){return Array.prototype.includes?function(a,b){return a.includes(b)}:Array.prototype.indexOf?function(a,b){return a.indexOf(b)>=0}:function(a,b){for(var c=0;c<a.length;c++)if(a[c]===b)return!0;return!1}},u={isNumber:function(a){return"number"==typeof a},isString:function(a){return"string"==typeof a},isArray:Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},isFunction:function(a){return"[object Function]"===Object.prototype.toString.call(a)},isNode:function(a){return a&&a.nodeType},isWrapped:function(a){return a&&a!==b&&u.isNumber(a.length)&&!u.isString(a)&&!u.isFunction(a)&&!u.isNode(a)&&(0===a.length||u.isNode(a[0]))},isSVG:function(a){return b.SVGElement&&a instanceof b.SVGElement},isEmptyObject:function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}},v=!1;if(a.fn&&a.fn.jquery?(o=a,v=!0):o=b.Velocity.Utilities,p<=8&&!v)throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity.");if(p<=7)return void(jQuery.fn.velocity=jQuery.fn.animate);var w=400,x="swing",y={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(b.navigator.userAgent),isAndroid:/Android/i.test(b.navigator.userAgent),isGingerbread:/Android 2\.3\.[3-7]/i.test(b.navigator.userAgent),isChrome:b.chrome,isFirefox:/Firefox/i.test(b.navigator.userAgent),prefixElement:c.createElement("div"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[],delayedElements:{count:0}},CSS:{},Utilities:o,Redirects:{},Easings:{},Promise:b.Promise,defaults:{queue:"",duration:w,easing:x,begin:d,complete:d,progress:d,display:d,visibility:d,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0,promiseRejectEmpty:!0},init:function(a){o.data(a,"velocity",{isSVG:u.isSVG(a),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:5,patch:2},debug:!1,timestamp:!0,pauseAll:function(a){var b=(new Date).getTime();o.each(y.State.calls,function(b,c){if(c){if(a!==d&&(c[2].queue!==a||!1===c[2].queue))return!0;c[5]={resume:!1}}}),o.each(y.State.delayedElements,function(a,c){c&&h(c,b)})},resumeAll:function(a){var b=(new Date).getTime();o.each(y.State.calls,function(b,c){if(c){if(a!==d&&(c[2].queue!==a||!1===c[2].queue))return!0;c[5]&&(c[5].resume=!0)}}),o.each(y.State.delayedElements,function(a,c){c&&i(c,b)})}};b.pageYOffset!==d?(y.State.scrollAnchor=b,y.State.scrollPropertyLeft="pageXOffset",y.State.scrollPropertyTop="pageYOffset"):(y.State.scrollAnchor=c.documentElement||c.body.parentNode||c.body,y.State.scrollPropertyLeft="scrollLeft",y.State.scrollPropertyTop="scrollTop");var z=function(){function a(a){return-a.tension*a.x-a.friction*a.v}function b(b,c,d){var e={x:b.x+d.dx*c,v:b.v+d.dv*c,tension:b.tension,friction:b.friction};return{dx:e.v,dv:a(e)}}function c(c,d){var e={dx:c.v,dv:a(c)},f=b(c,.5*d,e),g=b(c,.5*d,f),h=b(c,d,g),i=1/6*(e.dx+2*(f.dx+g.dx)+h.dx),j=1/6*(e.dv+2*(f.dv+g.dv)+h.dv);return c.x=c.x+i*d,c.v=c.v+j*d,c}return function d(a,b,e){var f,g,h,i={x:-1,v:0,tension:null,friction:null},j=[0],k=0;for(a=parseFloat(a)||500,b=parseFloat(b)||20,e=e||null,i.tension=a,i.friction=b,f=null!==e,f?(k=d(a,b),g=k/e*.016):g=.016;;)if(h=c(h||i,g),j.push(1+h.x),k+=16,!(Math.abs(h.x)>1e-4&&Math.abs(h.v)>1e-4))break;return f?function(a){return j[a*(j.length-1)|0]}:k}}();y.Easings={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},spring:function(a){return 1-Math.cos(4.5*a*Math.PI)*Math.exp(6*-a)}},o.each([["ease",[.25,.1,.25,1]],["ease-in",[.42,0,1,1]],["ease-out",[0,0,.58,1]],["ease-in-out",[.42,0,.58,1]],["easeInSine",[.47,0,.745,.715]],["easeOutSine",[.39,.575,.565,1]],["easeInOutSine",[.445,.05,.55,.95]],["easeInQuad",[.55,.085,.68,.53]],["easeOutQuad",[.25,.46,.45,.94]],["easeInOutQuad",[.455,.03,.515,.955]],["easeInCubic",[.55,.055,.675,.19]],["easeOutCubic",[.215,.61,.355,1]],["easeInOutCubic",[.645,.045,.355,1]],["easeInQuart",[.895,.03,.685,.22]],["easeOutQuart",[.165,.84,.44,1]],["easeInOutQuart",[.77,0,.175,1]],["easeInQuint",[.755,.05,.855,.06]],["easeOutQuint",[.23,1,.32,1]],["easeInOutQuint",[.86,0,.07,1]],["easeInExpo",[.95,.05,.795,.035]],["easeOutExpo",[.19,1,.22,1]],["easeInOutExpo",[1,0,0,1]],["easeInCirc",[.6,.04,.98,.335]],["easeOutCirc",[.075,.82,.165,1]],["easeInOutCirc",[.785,.135,.15,.86]]],function(a,b){y.Easings[b[0]]=k.apply(null,b[1])});var A=y.CSS={RegEx:{isHex:/^#([A-f\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\((.*)\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/gi},Lists:{colors:["fill","stroke","stopColor","color","backgroundColor","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor"],transformsBase:["translateX","translateY","scale","scaleX","scaleY","skewX","skewY","rotateZ"],transforms3D:["transformPerspective","translateZ","scaleZ","rotateX","rotateY"],units:["%","em","ex","ch","rem","vw","vh","vmin","vmax","cm","mm","Q","in","pc","pt","px","deg","grad","rad","turn","s","ms"],colorNames:{aliceblue:"240,248,255",antiquewhite:"250,235,215",aquamarine:"127,255,212",aqua:"0,255,255",azure:"240,255,255",beige:"245,245,220",bisque:"255,228,196",black:"0,0,0",blanchedalmond:"255,235,205",blueviolet:"138,43,226",blue:"0,0,255",brown:"165,42,42",burlywood:"222,184,135",cadetblue:"95,158,160",chartreuse:"127,255,0",chocolate:"210,105,30",coral:"255,127,80",cornflowerblue:"100,149,237",cornsilk:"255,248,220",crimson:"220,20,60",cyan:"0,255,255",darkblue:"0,0,139",darkcyan:"0,139,139",darkgoldenrod:"184,134,11",darkgray:"169,169,169",darkgrey:"169,169,169",darkgreen:"0,100,0",darkkhaki:"189,183,107",darkmagenta:"139,0,139",darkolivegreen:"85,107,47",darkorange:"255,140,0",darkorchid:"153,50,204",darkred:"139,0,0",darksalmon:"233,150,122",darkseagreen:"143,188,143",darkslateblue:"72,61,139",darkslategray:"47,79,79",darkturquoise:"0,206,209",darkviolet:"148,0,211",deeppink:"255,20,147",deepskyblue:"0,191,255",dimgray:"105,105,105",dimgrey:"105,105,105",dodgerblue:"30,144,255",firebrick:"178,34,34",floralwhite:"255,250,240",forestgreen:"34,139,34",fuchsia:"255,0,255",gainsboro:"220,220,220",ghostwhite:"248,248,255",gold:"255,215,0",goldenrod:"218,165,32",gray:"128,128,128",grey:"128,128,128",greenyellow:"173,255,47",green:"0,128,0",honeydew:"240,255,240",hotpink:"255,105,180",indianred:"205,92,92",indigo:"75,0,130",ivory:"255,255,240",khaki:"240,230,140",lavenderblush:"255,240,245",lavender:"230,230,250",lawngreen:"124,252,0",lemonchiffon:"255,250,205",lightblue:"173,216,230",lightcoral:"240,128,128",lightcyan:"224,255,255",lightgoldenrodyellow:"250,250,210",lightgray:"211,211,211",lightgrey:"211,211,211",lightgreen:"144,238,144",lightpink:"255,182,193",lightsalmon:"255,160,122",lightseagreen:"32,178,170",lightskyblue:"135,206,250",lightslategray:"119,136,153",lightsteelblue:"176,196,222",lightyellow:"255,255,224",limegreen:"50,205,50",lime:"0,255,0",linen:"250,240,230",magenta:"255,0,255",maroon:"128,0,0",mediumaquamarine:"102,205,170",mediumblue:"0,0,205",mediumorchid:"186,85,211",mediumpurple:"147,112,219",mediumseagreen:"60,179,113",mediumslateblue:"123,104,238",mediumspringgreen:"0,250,154",mediumturquoise:"72,209,204",mediumvioletred:"199,21,133",midnightblue:"25,25,112",mintcream:"245,255,250",mistyrose:"255,228,225",moccasin:"255,228,181",navajowhite:"255,222,173",navy:"0,0,128",oldlace:"253,245,230",olivedrab:"107,142,35",olive:"128,128,0",orangered:"255,69,0",orange:"255,165,0",orchid:"218,112,214",palegoldenrod:"238,232,170",palegreen:"152,251,152",paleturquoise:"175,238,238",palevioletred:"219,112,147",papayawhip:"255,239,213",peachpuff:"255,218,185",peru:"205,133,63",pink:"255,192,203",plum:"221,160,221",powderblue:"176,224,230",purple:"128,0,128",red:"255,0,0",rosybrown:"188,143,143",royalblue:"65,105,225",saddlebrown:"139,69,19",salmon:"250,128,114",sandybrown:"244,164,96",seagreen:"46,139,87",seashell:"255,245,238",sienna:"160,82,45",silver:"192,192,192",skyblue:"135,206,235",slateblue:"106,90,205",slategray:"112,128,144",snow:"255,250,250",springgreen:"0,255,127",steelblue:"70,130,180",tan:"210,180,140",teal:"0,128,128",thistle:"216,191,216",tomato:"255,99,71",turquoise:"64,224,208",violet:"238,130,238",wheat:"245,222,179",whitesmoke:"245,245,245",white:"255,255,255",yellowgreen:"154,205,50",yellow:"255,255,0"}},Hooks:{templates:{textShadow:["Color X Y Blur","black 0px 0px 0px"],boxShadow:["Color X Y Blur Spread","black 0px 0px 0px 0px"],clip:["Top Right Bottom Left","0px 0px 0px 0px"],backgroundPosition:["X Y","0% 0%"],transformOrigin:["X Y Z","50% 50% 0px"],perspectiveOrigin:["X Y","50% 50%"]},registered:{},register:function(){for(var a=0;a<A.Lists.colors.length;a++){var b="color"===A.Lists.colors[a]?"0 0 0 1":"255 255 255 1";A.Hooks.templates[A.Lists.colors[a]]=["Red Green Blue Alpha",b]}var c,d,e;if(p)for(c in A.Hooks.templates)if(A.Hooks.templates.hasOwnProperty(c)){d=A.Hooks.templates[c],e=d[0].split(" ");var f=d[1].match(A.RegEx.valueSplit);"Color"===e[0]&&(e.push(e.shift()),f.push(f.shift()),A.Hooks.templates[c]=[e.join(" "),f.join(" ")])}for(c in A.Hooks.templates)if(A.Hooks.templates.hasOwnProperty(c)){d=A.Hooks.templates[c],e=d[0].split(" ");for(var g in e)if(e.hasOwnProperty(g)){var h=c+e[g],i=g;A.Hooks.registered[h]=[c,i]}}},getRoot:function(a){var b=A.Hooks.registered[a];return b?b[0]:a},getUnit:function(a,b){var c=(a.substr(b||0,5).match(/^[a-z%]+/)||[])[0]||"";return c&&t(A.Lists.units,c)?c:""},fixColors:function(a){return a.replace(/(rgba?\(\s*)?(\b[a-z]+\b)/g,function(a,b,c){return A.Lists.colorNames.hasOwnProperty(c)?(b||"rgba(")+A.Lists.colorNames[c]+(b?"":",1)"):b+c})},cleanRootPropertyValue:function(a,b){return A.RegEx.valueUnwrap.test(b)&&(b=b.match(A.RegEx.valueUnwrap)[1]),A.Values.isCSSNullValue(b)&&(b=A.Hooks.templates[a][1]),b},extractValue:function(a,b){var c=A.Hooks.registered[a];if(c){var d=c[0],e=c[1];return b=A.Hooks.cleanRootPropertyValue(d,b),b.toString().match(A.RegEx.valueSplit)[e]}return b},injectValue:function(a,b,c){var d=A.Hooks.registered[a];if(d){var e,f=d[0],g=d[1];return c=A.Hooks.cleanRootPropertyValue(f,c),e=c.toString().match(A.RegEx.valueSplit),e[g]=b,e.join(" ")}return c}},Normalizations:{registered:{clip:function(a,b,c){switch(a){case"name":return"clip";case"extract":var d;return A.RegEx.wrappedValueAlreadyExtracted.test(c)?d=c:(d=c.toString().match(A.RegEx.valueUnwrap),d=d?d[1].replace(/,(\s+)?/g," "):c),d;case"inject":return"rect("+c+")"}},blur:function(a,b,c){switch(a){case"name":return y.State.isFirefox?"filter":"-webkit-filter";case"extract":var d=parseFloat(c);if(!d&&0!==d){var e=c.toString().match(/blur\(([0-9]+[A-z]+)\)/i);d=e?e[1]:0}return d;case"inject":return parseFloat(c)?"blur("+c+")":"none"}},opacity:function(a,b,c){if(p<=8)switch(a){case"name":return"filter";case"extract":var d=c.toString().match(/alpha\(opacity=(.*)\)/i);return c=d?d[1]/100:1;case"inject":return b.style.zoom=1,parseFloat(c)>=1?"":"alpha(opacity="+parseInt(100*parseFloat(c),10)+")"}else switch(a){case"name":return"opacity";case"extract":case"inject":return c}}},register:function(){function a(a,b,c){if("border-box"===A.getPropertyValue(b,"boxSizing").toString().toLowerCase()===(c||!1)){var d,e,f=0,g="width"===a?["Left","Right"]:["Top","Bottom"],h=["padding"+g[0],"padding"+g[1],"border"+g[0]+"Width","border"+g[1]+"Width"];for(d=0;d<h.length;d++)e=parseFloat(A.getPropertyValue(b,h[d])),isNaN(e)||(f+=e);return c?-f:f}return 0}function b(b,c){return function(d,e,f){switch(d){case"name":return b;case"extract":return parseFloat(f)+a(b,e,c);case"inject":return parseFloat(f)-a(b,e,c)+"px"}}}p&&!(p>9)||y.State.isGingerbread||(A.Lists.transformsBase=A.Lists.transformsBase.concat(A.Lists.transforms3D));for(var c=0;c<A.Lists.transformsBase.length;c++)!function(){var a=A.Lists.transformsBase[c];A.Normalizations.registered[a]=function(b,c,e){switch(b){case"name":return"transform";case"extract":return g(c)===d||g(c).transformCache[a]===d?/^scale/i.test(a)?1:0:g(c).transformCache[a].replace(/[()]/g,"");case"inject":var f=!1;switch(a.substr(0,a.length-1)){case"translate":f=!/(%|px|em|rem|vw|vh|\d)$/i.test(e);break;case"scal":case"scale":y.State.isAndroid&&g(c).transformCache[a]===d&&e<1&&(e=1),f=!/(\d)$/i.test(e);break;case"skew":case"rotate":f=!/(deg|\d)$/i.test(e)}return f||(g(c).transformCache[a]="("+e+")"),g(c).transformCache[a]}}}();for(var e=0;e<A.Lists.colors.length;e++)!function(){var a=A.Lists.colors[e];A.Normalizations.registered[a]=function(b,c,e){switch(b){case"name":return a;case"extract":var f;if(A.RegEx.wrappedValueAlreadyExtracted.test(e))f=e;else{var g,h={black:"rgb(0, 0, 0)",blue:"rgb(0, 0, 255)",gray:"rgb(128, 128, 128)",green:"rgb(0, 128, 0)",red:"rgb(255, 0, 0)",white:"rgb(255, 255, 255)"};/^[A-z]+$/i.test(e)?g=h[e]!==d?h[e]:h.black:A.RegEx.isHex.test(e)?g="rgb("+A.Values.hexToRgb(e).join(" ")+")":/^rgba?\(/i.test(e)||(g=h.black),f=(g||e).toString().match(A.RegEx.valueUnwrap)[1].replace(/,(\s+)?/g," ")}return(!p||p>8)&&3===f.split(" ").length&&(f+=" 1"),f;case"inject":return/^rgb/.test(e)?e:(p<=8?4===e.split(" ").length&&(e=e.split(/\s+/).slice(0,3).join(" ")):3===e.split(" ").length&&(e+=" 1"),(p<=8?"rgb":"rgba")+"("+e.replace(/\s+/g,",").replace(/\.(\d)+(?=,)/g,"")+")")}}}();A.Normalizations.registered.innerWidth=b("width",!0),A.Normalizations.registered.innerHeight=b("height",!0),A.Normalizations.registered.outerWidth=b("width"),A.Normalizations.registered.outerHeight=b("height")}},Names:{camelCase:function(a){return a.replace(/-(\w)/g,function(a,b){return b.toUpperCase()})},SVGAttribute:function(a){var b="width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2";return(p||y.State.isAndroid&&!y.State.isChrome)&&(b+="|transform"),new RegExp("^("+b+")$","i").test(a)},prefixCheck:function(a){if(y.State.prefixMatches[a])return[y.State.prefixMatches[a],!0];for(var b=["","Webkit","Moz","ms","O"],c=0,d=b.length;c<d;c++){var e;if(e=0===c?a:b[c]+a.replace(/^\w/,function(a){return a.toUpperCase()}),u.isString(y.State.prefixElement.style[e]))return y.State.prefixMatches[a]=e,[e,!0]}return[a,!1]}},Values:{hexToRgb:function(a){var b,c=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,d=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;return a=a.replace(c,function(a,b,c,d){return b+b+c+c+d+d}),b=d.exec(a),b?[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]:[0,0,0]},isCSSNullValue:function(a){return!a||/^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(a)},getUnitType:function(a){return/^(rotate|skew)/i.test(a)?"deg":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(a)?"":"px"},getDisplayType:function(a){var b=a&&a.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(b)?"inline":/^(li)$/i.test(b)?"list-item":/^(tr)$/i.test(b)?"table-row":/^(table)$/i.test(b)?"table":/^(tbody)$/i.test(b)?"table-row-group":"block"},addClass:function(a,b){if(a)if(a.classList)a.classList.add(b);else if(u.isString(a.className))a.className+=(a.className.length?" ":"")+b;else{var c=a.getAttribute(p<=7?"className":"class")||"";a.setAttribute("class",c+(c?" ":"")+b)}},removeClass:function(a,b){if(a)if(a.classList)a.classList.remove(b);else if(u.isString(a.className))a.className=a.className.toString().replace(new RegExp("(^|\\s)"+b.split(" ").join("|")+"(\\s|$)","gi")," ");else{var c=a.getAttribute(p<=7?"className":"class")||"";a.setAttribute("class",c.replace(new RegExp("(^|s)"+b.split(" ").join("|")+"(s|$)","gi")," "))}}},getPropertyValue:function(a,c,e,f){function h(a,c){var e=0;if(p<=8)e=o.css(a,c);else{var i=!1;/^(width|height)$/.test(c)&&0===A.getPropertyValue(a,"display")&&(i=!0,A.setPropertyValue(a,"display",A.Values.getDisplayType(a)));var j=function(){i&&A.setPropertyValue(a,"display","none")};if(!f){if("height"===c&&"border-box"!==A.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var k=a.offsetHeight-(parseFloat(A.getPropertyValue(a,"borderTopWidth"))||0)-(parseFloat(A.getPropertyValue(a,"borderBottomWidth"))||0)-(parseFloat(A.getPropertyValue(a,"paddingTop"))||0)-(parseFloat(A.getPropertyValue(a,"paddingBottom"))||0);return j(),k}if("width"===c&&"border-box"!==A.getPropertyValue(a,"boxSizing").toString().toLowerCase()){var l=a.offsetWidth-(parseFloat(A.getPropertyValue(a,"borderLeftWidth"))||0)-(parseFloat(A.getPropertyValue(a,"borderRightWidth"))||0)-(parseFloat(A.getPropertyValue(a,"paddingLeft"))||0)-(parseFloat(A.getPropertyValue(a,"paddingRight"))||0);return j(),l}}var m;m=g(a)===d?b.getComputedStyle(a,null):g(a).computedStyle?g(a).computedStyle:g(a).computedStyle=b.getComputedStyle(a,null),"borderColor"===c&&(c="borderTopColor"),e=9===p&&"filter"===c?m.getPropertyValue(c):m[c],""!==e&&null!==e||(e=a.style[c]),j()}if("auto"===e&&/^(top|right|bottom|left)$/i.test(c)){var n=h(a,"position");("fixed"===n||"absolute"===n&&/top|left/i.test(c))&&(e=o(a).position()[c]+"px")}return e}var i;if(A.Hooks.registered[c]){var j=c,k=A.Hooks.getRoot(j);e===d&&(e=A.getPropertyValue(a,A.Names.prefixCheck(k)[0])),A.Normalizations.registered[k]&&(e=A.Normalizations.registered[k]("extract",a,e)),i=A.Hooks.extractValue(j,e)}else if(A.Normalizations.registered[c]){var l,m;l=A.Normalizations.registered[c]("name",a),"transform"!==l&&(m=h(a,A.Names.prefixCheck(l)[0]),A.Values.isCSSNullValue(m)&&A.Hooks.templates[c]&&(m=A.Hooks.templates[c][1])),i=A.Normalizations.registered[c]("extract",a,m)}if(!/^[\d-]/.test(i)){var n=g(a);if(n&&n.isSVG&&A.Names.SVGAttribute(c))if(/^(height|width)$/i.test(c))try{i=a.getBBox()[c]}catch(q){i=0}else i=a.getAttribute(c);else i=h(a,A.Names.prefixCheck(c)[0])}return A.Values.isCSSNullValue(i)&&(i=0),y.debug>=2&&console.log("Get "+c+": "+i),i},setPropertyValue:function(a,c,d,e,f){var h=c;if("scroll"===c)f.container?f.container["scroll"+f.direction]=d:"Left"===f.direction?b.scrollTo(d,f.alternateValue):b.scrollTo(f.alternateValue,d);else if(A.Normalizations.registered[c]&&"transform"===A.Normalizations.registered[c]("name",a))A.Normalizations.registered[c]("inject",a,d),h="transform",d=g(a).transformCache[c];else{if(A.Hooks.registered[c]){var i=c,j=A.Hooks.getRoot(c);e=e||A.getPropertyValue(a,j),d=A.Hooks.injectValue(i,d,e),c=j}if(A.Normalizations.registered[c]&&(d=A.Normalizations.registered[c]("inject",a,d),c=A.Normalizations.registered[c]("name",a)),h=A.Names.prefixCheck(c)[0],p<=8)try{a.style[h]=d}catch(l){y.debug&&console.log("Browser does not support ["+d+"] for ["+h+"]")}else{var k=g(a);k&&k.isSVG&&A.Names.SVGAttribute(c)?a.setAttribute(c,d):a.style[h]=d}y.debug>=2&&console.log("Set "+c+" ("+h+"): "+d)}return[h,d]},flushTransformCache:function(a){var b="",c=g(a);if((p||y.State.isAndroid&&!y.State.isChrome)&&c&&c.isSVG){var d=function(b){return parseFloat(A.getPropertyValue(a,b))},e={translate:[d("translateX"),d("translateY")],skewX:[d("skewX")],skewY:[d("skewY")],scale:1!==d("scale")?[d("scale"),d("scale")]:[d("scaleX"),d("scaleY")],rotate:[d("rotateZ"),0,0]};o.each(g(a).transformCache,function(a){/^translate/i.test(a)?a="translate":/^scale/i.test(a)?a="scale":/^rotate/i.test(a)&&(a="rotate"),e[a]&&(b+=a+"("+e[a].join(" ")+") ",delete e[a])})}else{var f,h;o.each(g(a).transformCache,function(c){if(f=g(a).transformCache[c],"transformPerspective"===c)return h=f,!0;9===p&&"rotateZ"===c&&(c="rotate"),b+=c+f+" "}),h&&(b="perspective"+h+" "+b)}A.setPropertyValue(a,"transform",b)}};A.Hooks.register(),A.Normalizations.register(),y.hook=function(a,b,c){var e;return a=f(a),o.each(a,function(a,f){if(g(f)===d&&y.init(f),c===d)e===d&&(e=A.getPropertyValue(f,b));else{var h=A.setPropertyValue(f,b,c);"transform"===h[0]&&y.CSS.flushTransformCache(f),e=h}}),e};var B=function(){function a(){return k?z.promise||null:p}function e(a,e){function f(f){var k,n;if(i.begin&&0===D)try{i.begin.call(r,r)}catch(V){setTimeout(function(){throw V},1)}if("scroll"===G){var p,q,w,x=/^x$/i.test(i.axis)?"Left":"Top",B=parseFloat(i.offset)||0;i.container?u.isWrapped(i.container)||u.isNode(i.container)?(i.container=i.container[0]||i.container,p=i.container["scroll"+x],w=p+o(a).position()[x.toLowerCase()]+B):i.container=null:(p=y.State.scrollAnchor[y.State["scrollProperty"+x]],q=y.State.scrollAnchor[y.State["scrollProperty"+("Left"===x?"Top":"Left")]],w=o(a).offset()[x.toLowerCase()]+B),j={scroll:{rootPropertyValue:!1,startValue:p,currentValue:p,endValue:w,unitType:"",easing:i.easing,scrollData:{container:i.container,direction:x,alternateValue:q}},element:a},y.debug&&console.log("tweensContainer (scroll): ",j.scroll,a)}else if("reverse"===G){if(!(k=g(a)))return;if(!k.tweensContainer)return void o.dequeue(a,i.queue);"none"===k.opts.display&&(k.opts.display="auto"),"hidden"===k.opts.visibility&&(k.opts.visibility="visible"),k.opts.loop=!1,k.opts.begin=null,k.opts.complete=null,v.easing||delete i.easing,v.duration||delete i.duration,i=o.extend({},k.opts,i),n=o.extend(!0,{},k?k.tweensContainer:null);for(var E in n)if(n.hasOwnProperty(E)&&"element"!==E){var F=n[E].startValue;n[E].startValue=n[E].currentValue=n[E].endValue,n[E].endValue=F,u.isEmptyObject(v)||(n[E].easing=i.easing),y.debug&&console.log("reverse tweensContainer ("+E+"): "+JSON.stringify(n[E]),a)}j=n}else if("start"===G){k=g(a),k&&k.tweensContainer&&!0===k.isAnimating&&(n=k.tweensContainer);var H=function(e,f){var g,l=A.Hooks.getRoot(e),m=!1,p=f[0],q=f[1],r=f[2]
;if(!(k&&k.isSVG||"tween"===l||!1!==A.Names.prefixCheck(l)[1]||A.Normalizations.registered[l]!==d))return void(y.debug&&console.log("Skipping ["+l+"] due to a lack of browser support."));(i.display!==d&&null!==i.display&&"none"!==i.display||i.visibility!==d&&"hidden"!==i.visibility)&&/opacity|filter/.test(e)&&!r&&0!==p&&(r=0),i._cacheValues&&n&&n[e]?(r===d&&(r=n[e].endValue+n[e].unitType),m=k.rootPropertyValueCache[l]):A.Hooks.registered[e]?r===d?(m=A.getPropertyValue(a,l),r=A.getPropertyValue(a,e,m)):m=A.Hooks.templates[l][1]:r===d&&(r=A.getPropertyValue(a,e));var s,t,v,w=!1,x=function(a,b){var c,d;return d=(b||"0").toString().toLowerCase().replace(/[%A-z]+$/,function(a){return c=a,""}),c||(c=A.Values.getUnitType(a)),[d,c]};if(r!==p&&u.isString(r)&&u.isString(p)){g="";var z=0,B=0,C=[],D=[],E=0,F=0,G=0;for(r=A.Hooks.fixColors(r),p=A.Hooks.fixColors(p);z<r.length&&B<p.length;){var H=r[z],I=p[B];if(/[\d\.-]/.test(H)&&/[\d\.-]/.test(I)){for(var J=H,K=I,L=".",N=".";++z<r.length;){if((H=r[z])===L)L="..";else if(!/\d/.test(H))break;J+=H}for(;++B<p.length;){if((I=p[B])===N)N="..";else if(!/\d/.test(I))break;K+=I}var O=A.Hooks.getUnit(r,z),P=A.Hooks.getUnit(p,B);if(z+=O.length,B+=P.length,O===P)J===K?g+=J+O:(g+="{"+C.length+(F?"!":"")+"}"+O,C.push(parseFloat(J)),D.push(parseFloat(K)));else{var Q=parseFloat(J),R=parseFloat(K);g+=(E<5?"calc":"")+"("+(Q?"{"+C.length+(F?"!":"")+"}":"0")+O+" + "+(R?"{"+(C.length+(Q?1:0))+(F?"!":"")+"}":"0")+P+")",Q&&(C.push(Q),D.push(0)),R&&(C.push(0),D.push(R))}}else{if(H!==I){E=0;break}g+=H,z++,B++,0===E&&"c"===H||1===E&&"a"===H||2===E&&"l"===H||3===E&&"c"===H||E>=4&&"("===H?E++:(E&&E<5||E>=4&&")"===H&&--E<5)&&(E=0),0===F&&"r"===H||1===F&&"g"===H||2===F&&"b"===H||3===F&&"a"===H||F>=3&&"("===H?(3===F&&"a"===H&&(G=1),F++):G&&","===H?++G>3&&(F=G=0):(G&&F<(G?5:4)||F>=(G?4:3)&&")"===H&&--F<(G?5:4))&&(F=G=0)}}z===r.length&&B===p.length||(y.debug&&console.error('Trying to pattern match mis-matched strings ["'+p+'", "'+r+'"]'),g=d),g&&(C.length?(y.debug&&console.log('Pattern found "'+g+'" -> ',C,D,"["+r+","+p+"]"),r=C,p=D,t=v=""):g=d)}g||(s=x(e,r),r=s[0],v=s[1],s=x(e,p),p=s[0].replace(/^([+-\/*])=/,function(a,b){return w=b,""}),t=s[1],r=parseFloat(r)||0,p=parseFloat(p)||0,"%"===t&&(/^(fontSize|lineHeight)$/.test(e)?(p/=100,t="em"):/^scale/.test(e)?(p/=100,t=""):/(Red|Green|Blue)$/i.test(e)&&(p=p/100*255,t="")));if(/[\/*]/.test(w))t=v;else if(v!==t&&0!==r)if(0===p)t=v;else{h=h||function(){var d={myParent:a.parentNode||c.body,position:A.getPropertyValue(a,"position"),fontSize:A.getPropertyValue(a,"fontSize")},e=d.position===M.lastPosition&&d.myParent===M.lastParent,f=d.fontSize===M.lastFontSize;M.lastParent=d.myParent,M.lastPosition=d.position,M.lastFontSize=d.fontSize;var g={};if(f&&e)g.emToPx=M.lastEmToPx,g.percentToPxWidth=M.lastPercentToPxWidth,g.percentToPxHeight=M.lastPercentToPxHeight;else{var h=k&&k.isSVG?c.createElementNS("http://www.w3.org/2000/svg","rect"):c.createElement("div");y.init(h),d.myParent.appendChild(h),o.each(["overflow","overflowX","overflowY"],function(a,b){y.CSS.setPropertyValue(h,b,"hidden")}),y.CSS.setPropertyValue(h,"position",d.position),y.CSS.setPropertyValue(h,"fontSize",d.fontSize),y.CSS.setPropertyValue(h,"boxSizing","content-box"),o.each(["minWidth","maxWidth","width","minHeight","maxHeight","height"],function(a,b){y.CSS.setPropertyValue(h,b,"100%")}),y.CSS.setPropertyValue(h,"paddingLeft","100em"),g.percentToPxWidth=M.lastPercentToPxWidth=(parseFloat(A.getPropertyValue(h,"width",null,!0))||1)/100,g.percentToPxHeight=M.lastPercentToPxHeight=(parseFloat(A.getPropertyValue(h,"height",null,!0))||1)/100,g.emToPx=M.lastEmToPx=(parseFloat(A.getPropertyValue(h,"paddingLeft"))||1)/100,d.myParent.removeChild(h)}return null===M.remToPx&&(M.remToPx=parseFloat(A.getPropertyValue(c.body,"fontSize"))||16),null===M.vwToPx&&(M.vwToPx=parseFloat(b.innerWidth)/100,M.vhToPx=parseFloat(b.innerHeight)/100),g.remToPx=M.remToPx,g.vwToPx=M.vwToPx,g.vhToPx=M.vhToPx,y.debug>=1&&console.log("Unit ratios: "+JSON.stringify(g),a),g}();var S=/margin|padding|left|right|width|text|word|letter/i.test(e)||/X$/.test(e)||"x"===e?"x":"y";switch(v){case"%":r*="x"===S?h.percentToPxWidth:h.percentToPxHeight;break;case"px":break;default:r*=h[v+"ToPx"]}switch(t){case"%":r*=1/("x"===S?h.percentToPxWidth:h.percentToPxHeight);break;case"px":break;default:r*=1/h[t+"ToPx"]}}switch(w){case"+":p=r+p;break;case"-":p=r-p;break;case"*":p*=r;break;case"/":p=r/p}j[e]={rootPropertyValue:m,startValue:r,currentValue:r,endValue:p,unitType:t,easing:q},g&&(j[e].pattern=g),y.debug&&console.log("tweensContainer ("+e+"): "+JSON.stringify(j[e]),a)};for(var I in s)if(s.hasOwnProperty(I)){var J=A.Names.camelCase(I),K=function(b,c){var d,f,g;return u.isFunction(b)&&(b=b.call(a,e,C)),u.isArray(b)?(d=b[0],!u.isArray(b[1])&&/^[\d-]/.test(b[1])||u.isFunction(b[1])||A.RegEx.isHex.test(b[1])?g=b[1]:u.isString(b[1])&&!A.RegEx.isHex.test(b[1])&&y.Easings[b[1]]||u.isArray(b[1])?(f=c?b[1]:l(b[1],i.duration),g=b[2]):g=b[1]||b[2]):d=b,c||(f=f||i.easing),u.isFunction(d)&&(d=d.call(a,e,C)),u.isFunction(g)&&(g=g.call(a,e,C)),[d||0,f,g]}(s[I]);if(t(A.Lists.colors,J)){var L=K[0],O=K[1],P=K[2];if(A.RegEx.isHex.test(L)){for(var Q=["Red","Green","Blue"],R=A.Values.hexToRgb(L),S=P?A.Values.hexToRgb(P):d,T=0;T<Q.length;T++){var U=[R[T]];O&&U.push(O),S!==d&&U.push(S[T]),H(J+Q[T],U)}continue}}H(J,K)}j.element=a}j.element&&(A.Values.addClass(a,"velocity-animating"),N.push(j),k=g(a),k&&(""===i.queue&&(k.tweensContainer=j,k.opts=i),k.isAnimating=!0),D===C-1?(y.State.calls.push([N,r,i,null,z.resolver,null,0]),!1===y.State.isTicking&&(y.State.isTicking=!0,m())):D++)}var h,i=o.extend({},y.defaults,v),j={};switch(g(a)===d&&y.init(a),parseFloat(i.delay)&&!1!==i.queue&&o.queue(a,i.queue,function(b,c){if(!0===c)return!0;y.velocityQueueEntryFlag=!0;var d=y.State.delayedElements.count++;y.State.delayedElements[d]=a;var e=function(a){return function(){y.State.delayedElements[a]=!1,b()}}(d);g(a).delayBegin=(new Date).getTime(),g(a).delay=parseFloat(i.delay),g(a).delayTimer={setTimeout:setTimeout(b,parseFloat(i.delay)),next:e}}),i.duration.toString().toLowerCase()){case"fast":i.duration=200;break;case"normal":i.duration=w;break;case"slow":i.duration=600;break;default:i.duration=parseFloat(i.duration)||1}if(!1!==y.mock&&(!0===y.mock?i.duration=i.delay=1:(i.duration*=parseFloat(y.mock)||1,i.delay*=parseFloat(y.mock)||1)),i.easing=l(i.easing,i.duration),i.begin&&!u.isFunction(i.begin)&&(i.begin=null),i.progress&&!u.isFunction(i.progress)&&(i.progress=null),i.complete&&!u.isFunction(i.complete)&&(i.complete=null),i.display!==d&&null!==i.display&&(i.display=i.display.toString().toLowerCase(),"auto"===i.display&&(i.display=y.CSS.Values.getDisplayType(a))),i.visibility!==d&&null!==i.visibility&&(i.visibility=i.visibility.toString().toLowerCase()),i.mobileHA=i.mobileHA&&y.State.isMobile&&!y.State.isGingerbread,!1===i.queue)if(i.delay){var k=y.State.delayedElements.count++;y.State.delayedElements[k]=a;var n=function(a){return function(){y.State.delayedElements[a]=!1,f()}}(k);g(a).delayBegin=(new Date).getTime(),g(a).delay=parseFloat(i.delay),g(a).delayTimer={setTimeout:setTimeout(f,parseFloat(i.delay)),next:n}}else f();else o.queue(a,i.queue,function(a,b){if(!0===b)return z.promise&&z.resolver(r),!0;y.velocityQueueEntryFlag=!0,f(a)});""!==i.queue&&"fx"!==i.queue||"inprogress"===o.queue(a)[0]||o.dequeue(a)}var j,k,p,q,r,s,v,x=arguments[0]&&(arguments[0].p||o.isPlainObject(arguments[0].properties)&&!arguments[0].properties.names||u.isString(arguments[0].properties));u.isWrapped(this)?(k=!1,q=0,r=this,p=this):(k=!0,q=1,r=x?arguments[0].elements||arguments[0].e:arguments[0]);var z={promise:null,resolver:null,rejecter:null};if(k&&y.Promise&&(z.promise=new y.Promise(function(a,b){z.resolver=a,z.rejecter=b})),x?(s=arguments[0].properties||arguments[0].p,v=arguments[0].options||arguments[0].o):(s=arguments[q],v=arguments[q+1]),!(r=f(r)))return void(z.promise&&(s&&v&&!1===v.promiseRejectEmpty?z.resolver():z.rejecter()));var C=r.length,D=0;if(!/^(stop|finish|finishAll|pause|resume)$/i.test(s)&&!o.isPlainObject(v)){var E=q+1;v={};for(var F=E;F<arguments.length;F++)u.isArray(arguments[F])||!/^(fast|normal|slow)$/i.test(arguments[F])&&!/^\d/.test(arguments[F])?u.isString(arguments[F])||u.isArray(arguments[F])?v.easing=arguments[F]:u.isFunction(arguments[F])&&(v.complete=arguments[F]):v.duration=arguments[F]}var G;switch(s){case"scroll":G="scroll";break;case"reverse":G="reverse";break;case"pause":var H=(new Date).getTime();return o.each(r,function(a,b){h(b,H)}),o.each(y.State.calls,function(a,b){var c=!1;b&&o.each(b[1],function(a,e){var f=v===d?"":v;return!0!==f&&b[2].queue!==f&&(v!==d||!1!==b[2].queue)||(o.each(r,function(a,d){if(d===e)return b[5]={resume:!1},c=!0,!1}),!c&&void 0)})}),a();case"resume":return o.each(r,function(a,b){i(b,H)}),o.each(y.State.calls,function(a,b){var c=!1;b&&o.each(b[1],function(a,e){var f=v===d?"":v;return!0!==f&&b[2].queue!==f&&(v!==d||!1!==b[2].queue)||(!b[5]||(o.each(r,function(a,d){if(d===e)return b[5].resume=!0,c=!0,!1}),!c&&void 0))})}),a();case"finish":case"finishAll":case"stop":o.each(r,function(a,b){g(b)&&g(b).delayTimer&&(clearTimeout(g(b).delayTimer.setTimeout),g(b).delayTimer.next&&g(b).delayTimer.next(),delete g(b).delayTimer),"finishAll"!==s||!0!==v&&!u.isString(v)||(o.each(o.queue(b,u.isString(v)?v:""),function(a,b){u.isFunction(b)&&b()}),o.queue(b,u.isString(v)?v:"",[]))});var I=[];return o.each(y.State.calls,function(a,b){b&&o.each(b[1],function(c,e){var f=v===d?"":v;if(!0!==f&&b[2].queue!==f&&(v!==d||!1!==b[2].queue))return!0;o.each(r,function(c,d){if(d===e)if((!0===v||u.isString(v))&&(o.each(o.queue(d,u.isString(v)?v:""),function(a,b){u.isFunction(b)&&b(null,!0)}),o.queue(d,u.isString(v)?v:"",[])),"stop"===s){var h=g(d);h&&h.tweensContainer&&(!0===f||""===f)&&o.each(h.tweensContainer,function(a,b){b.endValue=b.currentValue}),I.push(a)}else"finish"!==s&&"finishAll"!==s||(b[2].duration=1)})})}),"stop"===s&&(o.each(I,function(a,b){n(b,!0)}),z.promise&&z.resolver(r)),a();default:if(!o.isPlainObject(s)||u.isEmptyObject(s)){if(u.isString(s)&&y.Redirects[s]){j=o.extend({},v);var J=j.duration,K=j.delay||0;return!0===j.backwards&&(r=o.extend(!0,[],r).reverse()),o.each(r,function(a,b){parseFloat(j.stagger)?j.delay=K+parseFloat(j.stagger)*a:u.isFunction(j.stagger)&&(j.delay=K+j.stagger.call(b,a,C)),j.drag&&(j.duration=parseFloat(J)||(/^(callout|transition)/.test(s)?1e3:w),j.duration=Math.max(j.duration*(j.backwards?1-a/C:(a+1)/C),.75*j.duration,200)),y.Redirects[s].call(b,b,j||{},a,C,r,z.promise?z:d)}),a()}var L="Velocity: First argument ("+s+") was not a property map, a known action, or a registered redirect. Aborting.";return z.promise?z.rejecter(new Error(L)):b.console&&console.log(L),a()}G="start"}var M={lastParent:null,lastPosition:null,lastFontSize:null,lastPercentToPxWidth:null,lastPercentToPxHeight:null,lastEmToPx:null,remToPx:null,vwToPx:null,vhToPx:null},N=[];o.each(r,function(a,b){u.isNode(b)&&e(b,a)}),j=o.extend({},y.defaults,v),j.loop=parseInt(j.loop,10);var O=2*j.loop-1;if(j.loop)for(var P=0;P<O;P++){var Q={delay:j.delay,progress:j.progress};P===O-1&&(Q.display=j.display,Q.visibility=j.visibility,Q.complete=j.complete),B(r,"reverse",Q)}return a()};y=o.extend(B,y),y.animate=B;var C=b.requestAnimationFrame||q;if(!y.State.isMobile&&c.hidden!==d){var D=function(){c.hidden?(C=function(a){return setTimeout(function(){a(!0)},16)},m()):C=b.requestAnimationFrame||q};D(),c.addEventListener("visibilitychange",D)}return a.Velocity=y,a!==b&&(a.fn.velocity=B,a.fn.velocity.defaults=y.defaults),o.each(["Down","Up"],function(a,b){y.Redirects["slide"+b]=function(a,c,e,f,g,h){var i=o.extend({},c),j=i.begin,k=i.complete,l={},m={height:"",marginTop:"",marginBottom:"",paddingTop:"",paddingBottom:""};i.display===d&&(i.display="Down"===b?"inline"===y.CSS.Values.getDisplayType(a)?"inline-block":"block":"none"),i.begin=function(){0===e&&j&&j.call(g,g);for(var c in m)if(m.hasOwnProperty(c)){l[c]=a.style[c];var d=A.getPropertyValue(a,c);m[c]="Down"===b?[d,0]:[0,d]}l.overflow=a.style.overflow,a.style.overflow="hidden"},i.complete=function(){for(var b in l)l.hasOwnProperty(b)&&(a.style[b]=l[b]);e===f-1&&(k&&k.call(g,g),h&&h.resolver(g))},y(a,m,i)}}),o.each(["In","Out"],function(a,b){y.Redirects["fade"+b]=function(a,c,e,f,g,h){var i=o.extend({},c),j=i.complete,k={opacity:"In"===b?1:0};0!==e&&(i.begin=null),i.complete=e!==f-1?null:function(){j&&j.call(g,g),h&&h.resolver(g)},i.display===d&&(i.display="In"===b?"auto":"none"),y(this,k,i)}}),y}(window.jQuery||window.Zepto||window,window,window?window.document:undefined)});/**********************
 Velocity UI Pack
 **********************/

/* VelocityJS.org UI Pack (5.2.0). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License. Portions copyright Daniel Eden, Christian Pucci. */

(function(factory) {
	"use strict";
	/* CommonJS module. */
	if (typeof require === "function" && typeof exports === "object") {
		module.exports = factory();
		/* AMD module. */
	} else if (typeof define === "function" && define.amd) {
		define(["velocity"], factory);
		/* Browser globals. */
	} else {
		factory();
	}
}(function() {
	"use strict";
	return function(global, window, document, undefined) {

		/*************
		 Checks
		 *************/
		var Velocity = global.Velocity;

		if (!Velocity || !Velocity.Utilities) {
			if (window.console) {
				console.log("Velocity UI Pack: Velocity must be loaded first. Aborting.");
			}
			return;
		}
		var $ = Velocity.Utilities;

		var velocityVersion = Velocity.version,
				requiredVersion = {major: 1, minor: 1, patch: 0};

		function greaterSemver(primary, secondary) {
			var versionInts = [];

			if (!primary || !secondary) {
				return false;
			}

			$.each([primary, secondary], function(i, versionObject) {
				var versionIntsComponents = [];

				$.each(versionObject, function(component, value) {
					while (value.toString().length < 5) {
						value = "0" + value;
					}
					versionIntsComponents.push(value);
				});

				versionInts.push(versionIntsComponents.join(""));
			});

			return (parseFloat(versionInts[0]) > parseFloat(versionInts[1]));
		}

		if (greaterSemver(requiredVersion, velocityVersion)) {
			var abortError = "Velocity UI Pack: You need to update Velocity (velocity.js) to a newer version. Visit http://github.com/julianshapiro/velocity.";
			alert(abortError);
			throw new Error(abortError);
		}

		/************************
		 Effect Registration
		 ************************/

		/* Note: RegisterUI is a legacy name. */
		Velocity.RegisterEffect = Velocity.RegisterUI = function(effectName, properties) {
			/* Animate the expansion/contraction of the elements' parent's height for In/Out effects. */
			function animateParentHeight(elements, direction, totalDuration, stagger) {
				var totalHeightDelta = 0,
						parentNode;

				/* Sum the total height (including padding and margin) of all targeted elements. */
				$.each(elements.nodeType ? [elements] : elements, function(i, element) {
					if (stagger) {
						/* Increase the totalDuration by the successive delay amounts produced by the stagger option. */
						totalDuration += i * stagger;
					}

					parentNode = element.parentNode;

					var propertiesToSum = ["height", "paddingTop", "paddingBottom", "marginTop", "marginBottom"];

					/* If box-sizing is border-box, the height already includes padding and margin */
					if (Velocity.CSS.getPropertyValue(element, "boxSizing").toString().toLowerCase() === "border-box") {
						propertiesToSum = ["height"];
					}

					$.each(propertiesToSum, function(i, property) {
						totalHeightDelta += parseFloat(Velocity.CSS.getPropertyValue(element, property));
					});
				});

				/* Animate the parent element's height adjustment (with a varying duration multiplier for aesthetic benefits). */
				Velocity.animate(
						parentNode,
						{height: (direction === "In" ? "+" : "-") + "=" + totalHeightDelta},
						{queue: false, easing: "ease-in-out", duration: totalDuration * (direction === "In" ? 0.6 : 1)}
				);
			}

			/* Register a custom redirect for each effect. */
			Velocity.Redirects[effectName] = function(element, redirectOptions, elementsIndex, elementsSize, elements, promiseData, loop) {
				var finalElement = (elementsIndex === elementsSize - 1),
						totalDuration = 0;

				loop = loop || properties.loop;
				if (typeof properties.defaultDuration === "function") {
					properties.defaultDuration = properties.defaultDuration.call(elements, elements);
				} else {
					properties.defaultDuration = parseFloat(properties.defaultDuration);
				}

				/* Get the total duration used, so we can share it out with everything that doesn't have a duration */
				for (var callIndex = 0; callIndex < properties.calls.length; callIndex++) {
					durationPercentage = properties.calls[callIndex][1];
					if (typeof durationPercentage === "number") {
						totalDuration += durationPercentage;
					}
				}
				var shareDuration = totalDuration >= 1 ? 0 : properties.calls.length ? (1 - totalDuration) / properties.calls.length : 1;

				/* Iterate through each effect's call array. */
				for (callIndex = 0; callIndex < properties.calls.length; callIndex++) {
					var call = properties.calls[callIndex],
							propertyMap = call[0],
							redirectDuration = 1000,
							durationPercentage = call[1],
							callOptions = call[2] || {},
							opts = {};

					if (redirectOptions.duration !== undefined) {
						redirectDuration = redirectOptions.duration;
					} else if (properties.defaultDuration !== undefined) {
						redirectDuration = properties.defaultDuration;
					}

					/* Assign the whitelisted per-call options. */
					opts.duration = redirectDuration * (typeof durationPercentage === "number" ? durationPercentage : shareDuration);
					opts.queue = redirectOptions.queue || "";
					opts.easing = callOptions.easing || "ease";
					opts.delay = parseFloat(callOptions.delay) || 0;
					opts.loop = !properties.loop && callOptions.loop;
					opts._cacheValues = callOptions._cacheValues || true;

					/* Special processing for the first effect call. */
					if (callIndex === 0) {
						/* If a delay was passed into the redirect, combine it with the first call's delay. */
						opts.delay += (parseFloat(redirectOptions.delay) || 0);

						if (elementsIndex === 0) {
							opts.begin = function() {
								/* Only trigger a begin callback on the first effect call with the first element in the set. */
								if (redirectOptions.begin) {
									redirectOptions.begin.call(elements, elements);
								}

								var direction = effectName.match(/(In|Out)$/);

								/* Make "in" transitioning elements invisible immediately so that there's no FOUC between now
								 and the first RAF tick. */
								if ((direction && direction[0] === "In") && propertyMap.opacity !== undefined) {
									$.each(elements.nodeType ? [elements] : elements, function(i, element) {
										Velocity.CSS.setPropertyValue(element, "opacity", 0);
									});
								}

								/* Only trigger animateParentHeight() if we're using an In/Out transition. */
								if (redirectOptions.animateParentHeight && direction) {
									animateParentHeight(elements, direction[0], redirectDuration + opts.delay, redirectOptions.stagger);
								}
							};
						}

						/* If the user isn't overriding the display option, default to "auto" for "In"-suffixed transitions. */
						if (redirectOptions.display !== null) {
							if (redirectOptions.display !== undefined && redirectOptions.display !== "none") {
								opts.display = redirectOptions.display;
							} else if (/In$/.test(effectName)) {
								/* Inline elements cannot be subjected to transforms, so we switch them to inline-block. */
								var defaultDisplay = Velocity.CSS.Values.getDisplayType(element);
								opts.display = (defaultDisplay === "inline") ? "inline-block" : defaultDisplay;
							}
						}

						if (redirectOptions.visibility && redirectOptions.visibility !== "hidden") {
							opts.visibility = redirectOptions.visibility;
						}
					}

					/* Special processing for the last effect call. */
					if (callIndex === properties.calls.length - 1) {
						/* Append promise resolving onto the user's redirect callback. */
						var injectFinalCallbacks = function() {
							if ((redirectOptions.display === undefined || redirectOptions.display === "none") && /Out$/.test(effectName)) {
								$.each(elements.nodeType ? [elements] : elements, function(i, element) {
									Velocity.CSS.setPropertyValue(element, "display", "none");
								});
							}
							if (redirectOptions.complete) {
								redirectOptions.complete.call(elements, elements);
							}
							if (promiseData) {
								promiseData.resolver(elements || element);
							}
						};

						opts.complete = function() {
							if (loop) {
								Velocity.Redirects[effectName](element, redirectOptions, elementsIndex, elementsSize, elements, promiseData, loop === true ? true : Math.max(0, loop - 1));
							}
							if (properties.reset) {
								for (var resetProperty in properties.reset) {
									if (!properties.reset.hasOwnProperty(resetProperty)) {
										continue;
									}
									var resetValue = properties.reset[resetProperty];

									/* Format each non-array value in the reset property map to [ value, value ] so that changes apply
									 immediately and DOM querying is avoided (via forcefeeding). */
									/* Note: Don't forcefeed hooks, otherwise their hook roots will be defaulted to their null values. */
									if (Velocity.CSS.Hooks.registered[resetProperty] === undefined && (typeof resetValue === "string" || typeof resetValue === "number")) {
										properties.reset[resetProperty] = [properties.reset[resetProperty], properties.reset[resetProperty]];
									}
								}

								/* So that the reset values are applied instantly upon the next rAF tick, use a zero duration and parallel queueing. */
								var resetOptions = {duration: 0, queue: false};

								/* Since the reset option uses up the complete callback, we trigger the user's complete callback at the end of ours. */
								if (finalElement) {
									resetOptions.complete = injectFinalCallbacks;
								}

								Velocity.animate(element, properties.reset, resetOptions);
								/* Only trigger the user's complete callback on the last effect call with the last element in the set. */
							} else if (finalElement) {
								injectFinalCallbacks();
							}
						};

						if (redirectOptions.visibility === "hidden") {
							opts.visibility = redirectOptions.visibility;
						}
					}

					Velocity.animate(element, propertyMap, opts);
				}
			};

			/* Return the Velocity object so that RegisterUI calls can be chained. */
			return Velocity;
		};

		/*********************
		 Packaged Effects
		 *********************/

		/* Externalize the packagedEffects data so that they can optionally be modified and re-registered. */
		/* Support: <=IE8: Callouts will have no effect, and transitions will simply fade in/out. IE9/Android 2.3: Most effects are fully supported, the rest fade in/out. All other browsers: full support. */
		Velocity.RegisterEffect.packagedEffects =
				{
					/* Animate.css */
					"callout.bounce": {
						defaultDuration: 550,
						calls: [
							[{translateY: -30}, 0.25],
							[{translateY: 0}, 0.125],
							[{translateY: -15}, 0.125],
							[{translateY: 0}, 0.25]
						]
					},
					/* Animate.css */
					"callout.shake": {
						defaultDuration: 800,
						calls: [
							[{translateX: -11}],
							[{translateX: 11}],
							[{translateX: -11}],
							[{translateX: 11}],
							[{translateX: -11}],
							[{translateX: 11}],
							[{translateX: -11}],
							[{translateX: 0}]
						]
					},
					/* Animate.css */
					"callout.flash": {
						defaultDuration: 1100,
						calls: [
							[{opacity: [0, "easeInOutQuad", 1]}],
							[{opacity: [1, "easeInOutQuad"]}],
							[{opacity: [0, "easeInOutQuad"]}],
							[{opacity: [1, "easeInOutQuad"]}]
						]
					},
					/* Animate.css */
					"callout.pulse": {
						defaultDuration: 825,
						calls: [
							[{scaleX: 1.1, scaleY: 1.1}, 0.50, {easing: "easeInExpo"}],
							[{scaleX: 1, scaleY: 1}, 0.50]
						]
					},
					/* Animate.css */
					"callout.swing": {
						defaultDuration: 950,
						calls: [
							[{rotateZ: 15}],
							[{rotateZ: -10}],
							[{rotateZ: 5}],
							[{rotateZ: -5}],
							[{rotateZ: 0}]
						]
					},
					/* Animate.css */
					"callout.tada": {
						defaultDuration: 1000,
						calls: [
							[{scaleX: 0.9, scaleY: 0.9, rotateZ: -3}, 0.10],
							[{scaleX: 1.1, scaleY: 1.1, rotateZ: 3}, 0.10],
							[{scaleX: 1.1, scaleY: 1.1, rotateZ: -3}, 0.10],
							["reverse", 0.125],
							["reverse", 0.125],
							["reverse", 0.125],
							["reverse", 0.125],
							["reverse", 0.125],
							[{scaleX: 1, scaleY: 1, rotateZ: 0}, 0.20]
						]
					},
					"transition.fadeIn": {
						defaultDuration: 500,
						calls: [
							[{opacity: [1, 0]}]
						]
					},
					"transition.fadeOut": {
						defaultDuration: 500,
						calls: [
							[{opacity: [0, 1]}]
						]
					},
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.flipXIn": {
						defaultDuration: 700,
						calls: [
							[{opacity: [1, 0], transformPerspective: [800, 800], rotateY: [0, -55]}]
						],
						reset: {transformPerspective: 0}
					},
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.flipXOut": {
						defaultDuration: 700,
						calls: [
							[{opacity: [0, 1], transformPerspective: [800, 800], rotateY: 55}]
						],
						reset: {transformPerspective: 0, rotateY: 0}
					},
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.flipYIn": {
						defaultDuration: 800,
						calls: [
							[{opacity: [1, 0], transformPerspective: [800, 800], rotateX: [0, -45]}]
						],
						reset: {transformPerspective: 0}
					},
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.flipYOut": {
						defaultDuration: 800,
						calls: [
							[{opacity: [0, 1], transformPerspective: [800, 800], rotateX: 25}]
						],
						reset: {transformPerspective: 0, rotateX: 0}
					},
					/* Animate.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.flipBounceXIn": {
						defaultDuration: 900,
						calls: [
							[{opacity: [0.725, 0], transformPerspective: [400, 400], rotateY: [-10, 90]}, 0.50],
							[{opacity: 0.80, rotateY: 10}, 0.25],
							[{opacity: 1, rotateY: 0}, 0.25]
						],
						reset: {transformPerspective: 0}
					},
					/* Animate.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.flipBounceXOut": {
						defaultDuration: 800,
						calls: [
							[{opacity: [0.9, 1], transformPerspective: [400, 400], rotateY: -10}],
							[{opacity: 0, rotateY: 90}]
						],
						reset: {transformPerspective: 0, rotateY: 0}
					},
					/* Animate.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.flipBounceYIn": {
						defaultDuration: 850,
						calls: [
							[{opacity: [0.725, 0], transformPerspective: [400, 400], rotateX: [-10, 90]}, 0.50],
							[{opacity: 0.80, rotateX: 10}, 0.25],
							[{opacity: 1, rotateX: 0}, 0.25]
						],
						reset: {transformPerspective: 0}
					},
					/* Animate.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.flipBounceYOut": {
						defaultDuration: 800,
						calls: [
							[{opacity: [0.9, 1], transformPerspective: [400, 400], rotateX: -15}],
							[{opacity: 0, rotateX: 90}]
						],
						reset: {transformPerspective: 0, rotateX: 0}
					},
					/* Magic.css */
					"transition.swoopIn": {
						defaultDuration: 850,
						calls: [
							[{opacity: [1, 0], transformOriginX: ["100%", "50%"], transformOriginY: ["100%", "100%"], scaleX: [1, 0], scaleY: [1, 0], translateX: [0, -700], translateZ: 0}]
						],
						reset: {transformOriginX: "50%", transformOriginY: "50%"}
					},
					/* Magic.css */
					"transition.swoopOut": {
						defaultDuration: 850,
						calls: [
							[{opacity: [0, 1], transformOriginX: ["50%", "100%"], transformOriginY: ["100%", "100%"], scaleX: 0, scaleY: 0, translateX: -700, translateZ: 0}]
						],
						reset: {transformOriginX: "50%", transformOriginY: "50%", scaleX: 1, scaleY: 1, translateX: 0}
					},
					/* Magic.css */
					/* Support: Loses rotation in IE9/Android 2.3. (Fades and scales only.) */
					"transition.whirlIn": {
						defaultDuration: 850,
						calls: [
							[{opacity: [1, 0], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: [1, 0], scaleY: [1, 0], rotateY: [0, 160]}, 1, {easing: "easeInOutSine"}]
						]
					},
					/* Magic.css */
					/* Support: Loses rotation in IE9/Android 2.3. (Fades and scales only.) */
					"transition.whirlOut": {
						defaultDuration: 750,
						calls: [
							[{opacity: [0, "easeInOutQuint", 1], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: 0, scaleY: 0, rotateY: 160}, 1, {easing: "swing"}]
						],
						reset: {scaleX: 1, scaleY: 1, rotateY: 0}
					},
					"transition.shrinkIn": {
						defaultDuration: 750,
						calls: [
							[{opacity: [1, 0], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: [1, 1.5], scaleY: [1, 1.5], translateZ: 0}]
						]
					},
					"transition.shrinkOut": {
						defaultDuration: 600,
						calls: [
							[{opacity: [0, 1], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: 1.3, scaleY: 1.3, translateZ: 0}]
						],
						reset: {scaleX: 1, scaleY: 1}
					},
					"transition.expandIn": {
						defaultDuration: 700,
						calls: [
							[{opacity: [1, 0], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: [1, 0.625], scaleY: [1, 0.625], translateZ: 0}]
						]
					},
					"transition.expandOut": {
						defaultDuration: 700,
						calls: [
							[{opacity: [0, 1], transformOriginX: ["50%", "50%"], transformOriginY: ["50%", "50%"], scaleX: 0.5, scaleY: 0.5, translateZ: 0}]
						],
						reset: {scaleX: 1, scaleY: 1}
					},
					/* Animate.css */
					"transition.bounceIn": {
						defaultDuration: 800,
						calls: [
							[{opacity: [1, 0], scaleX: [1.05, 0.3], scaleY: [1.05, 0.3]}, 0.35],
							[{scaleX: 0.9, scaleY: 0.9, translateZ: 0}, 0.20],
							[{scaleX: 1, scaleY: 1}, 0.45]
						]
					},
					/* Animate.css */
					"transition.bounceOut": {
						defaultDuration: 800,
						calls: [
							[{scaleX: 0.95, scaleY: 0.95}, 0.35],
							[{scaleX: 1.1, scaleY: 1.1, translateZ: 0}, 0.35],
							[{opacity: [0, 1], scaleX: 0.3, scaleY: 0.3}, 0.30]
						],
						reset: {scaleX: 1, scaleY: 1}
					},
					/* Animate.css */
					"transition.bounceUpIn": {
						defaultDuration: 800,
						calls: [
							[{opacity: [1, 0], translateY: [-30, 1000]}, 0.60, {easing: "easeOutCirc"}],
							[{translateY: 10}, 0.20],
							[{translateY: 0}, 0.20]
						]
					},
					/* Animate.css */
					"transition.bounceUpOut": {
						defaultDuration: 1000,
						calls: [
							[{translateY: 20}, 0.20],
							[{opacity: [0, "easeInCirc", 1], translateY: -1000}, 0.80]
						],
						reset: {translateY: 0}
					},
					/* Animate.css */
					"transition.bounceDownIn": {
						defaultDuration: 800,
						calls: [
							[{opacity: [1, 0], translateY: [30, -1000]}, 0.60, {easing: "easeOutCirc"}],
							[{translateY: -10}, 0.20],
							[{translateY: 0}, 0.20]
						]
					},
					/* Animate.css */
					"transition.bounceDownOut": {
						defaultDuration: 1000,
						calls: [
							[{translateY: -20}, 0.20],
							[{opacity: [0, "easeInCirc", 1], translateY: 1000}, 0.80]
						],
						reset: {translateY: 0}
					},
					/* Animate.css */
					"transition.bounceLeftIn": {
						defaultDuration: 750,
						calls: [
							[{opacity: [1, 0], translateX: [30, -1250]}, 0.60, {easing: "easeOutCirc"}],
							[{translateX: -10}, 0.20],
							[{translateX: 0}, 0.20]
						]
					},
					/* Animate.css */
					"transition.bounceLeftOut": {
						defaultDuration: 750,
						calls: [
							[{translateX: 30}, 0.20],
							[{opacity: [0, "easeInCirc", 1], translateX: -1250}, 0.80]
						],
						reset: {translateX: 0}
					},
					/* Animate.css */
					"transition.bounceRightIn": {
						defaultDuration: 750,
						calls: [
							[{opacity: [1, 0], translateX: [-30, 1250]}, 0.60, {easing: "easeOutCirc"}],
							[{translateX: 10}, 0.20],
							[{translateX: 0}, 0.20]
						]
					},
					/* Animate.css */
					"transition.bounceRightOut": {
						defaultDuration: 750,
						calls: [
							[{translateX: -30}, 0.20],
							[{opacity: [0, "easeInCirc", 1], translateX: 1250}, 0.80]
						],
						reset: {translateX: 0}
					},
					"transition.slideUpIn": {
						defaultDuration: 900,
						calls: [
							[{opacity: [1, 0], translateY: [0, 20], translateZ: 0}]
						]
					},
					"transition.slideUpOut": {
						defaultDuration: 900,
						calls: [
							[{opacity: [0, 1], translateY: -20, translateZ: 0}]
						],
						reset: {translateY: 0}
					},
					"transition.slideDownIn": {
						defaultDuration: 900,
						calls: [
							[{opacity: [1, 0], translateY: [0, -20], translateZ: 0}]
						]
					},
					"transition.slideDownOut": {
						defaultDuration: 900,
						calls: [
							[{opacity: [0, 1], translateY: 20, translateZ: 0}]
						],
						reset: {translateY: 0}
					},
					"transition.slideLeftIn": {
						defaultDuration: 1000,
						calls: [
							[{opacity: [1, 0], translateX: [0, -20], translateZ: 0}]
						]
					},
					"transition.slideLeftOut": {
						defaultDuration: 1050,
						calls: [
							[{opacity: [0, 1], translateX: -20, translateZ: 0}]
						],
						reset: {translateX: 0}
					},
					"transition.slideRightIn": {
						defaultDuration: 1000,
						calls: [
							[{opacity: [1, 0], translateX: [0, 20], translateZ: 0}]
						]
					},
					"transition.slideRightOut": {
						defaultDuration: 1050,
						calls: [
							[{opacity: [0, 1], translateX: 20, translateZ: 0}]
						],
						reset: {translateX: 0}
					},
					"transition.slideUpBigIn": {
						defaultDuration: 850,
						calls: [
							[{opacity: [1, 0], translateY: [0, 75], translateZ: 0}]
						]
					},
					"transition.slideUpBigOut": {
						defaultDuration: 800,
						calls: [
							[{opacity: [0, 1], translateY: -75, translateZ: 0}]
						],
						reset: {translateY: 0}
					},
					"transition.slideDownBigIn": {
						defaultDuration: 850,
						calls: [
							[{opacity: [1, 0], translateY: [0, -75], translateZ: 0}]
						]
					},
					"transition.slideDownBigOut": {
						defaultDuration: 800,
						calls: [
							[{opacity: [0, 1], translateY: 75, translateZ: 0}]
						],
						reset: {translateY: 0}
					},
					"transition.slideLeftBigIn": {
						defaultDuration: 800,
						calls: [
							[{opacity: [1, 0], translateX: [0, -75], translateZ: 0}]
						]
					},
					"transition.slideLeftBigOut": {
						defaultDuration: 750,
						calls: [
							[{opacity: [0, 1], translateX: -75, translateZ: 0}]
						],
						reset: {translateX: 0}
					},
					"transition.slideRightBigIn": {
						defaultDuration: 800,
						calls: [
							[{opacity: [1, 0], translateX: [0, 75], translateZ: 0}]
						]
					},
					"transition.slideRightBigOut": {
						defaultDuration: 750,
						calls: [
							[{opacity: [0, 1], translateX: 75, translateZ: 0}]
						],
						reset: {translateX: 0}
					},
					/* Magic.css */
					"transition.perspectiveUpIn": {
						defaultDuration: 800,
						calls: [
							[{opacity: [1, 0], transformPerspective: [800, 800], transformOriginX: [0, 0], transformOriginY: ["100%", "100%"], rotateX: [0, -180]}]
						],
						reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%"}
					},
					/* Magic.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.perspectiveUpOut": {
						defaultDuration: 850,
						calls: [
							[{opacity: [0, 1], transformPerspective: [800, 800], transformOriginX: [0, 0], transformOriginY: ["100%", "100%"], rotateX: -180}]
						],
						reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%", rotateX: 0}
					},
					/* Magic.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.perspectiveDownIn": {
						defaultDuration: 800,
						calls: [
							[{opacity: [1, 0], transformPerspective: [800, 800], transformOriginX: [0, 0], transformOriginY: [0, 0], rotateX: [0, 180]}]
						],
						reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%"}
					},
					/* Magic.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.perspectiveDownOut": {
						defaultDuration: 850,
						calls: [
							[{opacity: [0, 1], transformPerspective: [800, 800], transformOriginX: [0, 0], transformOriginY: [0, 0], rotateX: 180}]
						],
						reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%", rotateX: 0}
					},
					/* Magic.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.perspectiveLeftIn": {
						defaultDuration: 950,
						calls: [
							[{opacity: [1, 0], transformPerspective: [2000, 2000], transformOriginX: [0, 0], transformOriginY: [0, 0], rotateY: [0, -180]}]
						],
						reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%"}
					},
					/* Magic.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.perspectiveLeftOut": {
						defaultDuration: 950,
						calls: [
							[{opacity: [0, 1], transformPerspective: [2000, 2000], transformOriginX: [0, 0], transformOriginY: [0, 0], rotateY: -180}]
						],
						reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%", rotateY: 0}
					},
					/* Magic.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.perspectiveRightIn": {
						defaultDuration: 950,
						calls: [
							[{opacity: [1, 0], transformPerspective: [2000, 2000], transformOriginX: ["100%", "100%"], transformOriginY: [0, 0], rotateY: [0, 180]}]
						],
						reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%"}
					},
					/* Magic.css */
					/* Support: Loses rotation in IE9/Android 2.3 (fades only). */
					"transition.perspectiveRightOut": {
						defaultDuration: 950,
						calls: [
							[{opacity: [0, 1], transformPerspective: [2000, 2000], transformOriginX: ["100%", "100%"], transformOriginY: [0, 0], rotateY: 180}]
						],
						reset: {transformPerspective: 0, transformOriginX: "50%", transformOriginY: "50%", rotateY: 0}
					}
				};

		/* Register the packaged effects. */
		for (var effectName in Velocity.RegisterEffect.packagedEffects) {
			if (Velocity.RegisterEffect.packagedEffects.hasOwnProperty(effectName)) {
				Velocity.RegisterEffect(effectName, Velocity.RegisterEffect.packagedEffects[effectName]);
			}
		}

		/*********************
		 Sequence Running
		 **********************/

		/* Note: Sequence calls must use Velocity's single-object arguments syntax. */
		Velocity.RunSequence = function(originalSequence) {
			var sequence = $.extend(true, [], originalSequence);

			if (sequence.length > 1) {
				$.each(sequence.reverse(), function(i, currentCall) {
					var nextCall = sequence[i + 1];

					if (nextCall) {
						/* Parallel sequence calls (indicated via sequenceQueue:false) are triggered
						 in the previous call's begin callback. Otherwise, chained calls are normally triggered
						 in the previous call's complete callback. */
						var currentCallOptions = currentCall.o || currentCall.options,
								nextCallOptions = nextCall.o || nextCall.options;

						var timing = (currentCallOptions && currentCallOptions.sequenceQueue === false) ? "begin" : "complete",
								callbackOriginal = nextCallOptions && nextCallOptions[timing],
								options = {};

						options[timing] = function() {
							var nextCallElements = nextCall.e || nextCall.elements;
							var elements = nextCallElements.nodeType ? [nextCallElements] : nextCallElements;

							if (callbackOriginal) {
								callbackOriginal.call(elements, elements);
							}
							Velocity(currentCall);
						};

						if (nextCall.o) {
							nextCall.o = $.extend({}, nextCallOptions, options);
						} else {
							nextCall.options = $.extend({}, nextCallOptions, options);
						}
					}
				});

				sequence.reverse();
			}

			Velocity(sequence[0]);
		};
	}((window.jQuery || window.Zepto || window), window, (window ? window.document : undefined));
}));
!function(a){"use strict";"function"==typeof require&&"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(["velocity"],a):a()}(function(){"use strict";return function(a,b,c,d){var e=a.Velocity;if(!e||!e.Utilities)return void(b.console&&console.log("Velocity UI Pack: Velocity must be loaded first. Aborting."));var f=e.Utilities,g=e.version,h={major:1,minor:1,patch:0};if(function(a,b){var c=[];return!(!a||!b)&&(f.each([a,b],function(a,b){var d=[];f.each(b,function(a,b){for(;b.toString().length<5;)b="0"+b;d.push(b)}),c.push(d.join(""))}),parseFloat(c[0])>parseFloat(c[1]))}(h,g)){var i="Velocity UI Pack: You need to update Velocity (velocity.js) to a newer version. Visit http://github.com/julianshapiro/velocity.";throw alert(i),new Error(i)}e.RegisterEffect=e.RegisterUI=function(a,b){function c(a,b,c,d){var g,h=0;f.each(a.nodeType?[a]:a,function(a,b){d&&(c+=a*d),g=b.parentNode;var i=["height","paddingTop","paddingBottom","marginTop","marginBottom"];"border-box"===e.CSS.getPropertyValue(b,"boxSizing").toString().toLowerCase()&&(i=["height"]),f.each(i,function(a,c){h+=parseFloat(e.CSS.getPropertyValue(b,c))})}),e.animate(g,{height:("In"===b?"+":"-")+"="+h},{queue:!1,easing:"ease-in-out",duration:c*("In"===b?.6:1)})}return e.Redirects[a]=function(d,g,h,i,j,k,l){var m=h===i-1,n=0;l=l||b.loop,"function"==typeof b.defaultDuration?b.defaultDuration=b.defaultDuration.call(j,j):b.defaultDuration=parseFloat(b.defaultDuration);for(var o=0;o<b.calls.length;o++)"number"==typeof(t=b.calls[o][1])&&(n+=t);var p=n>=1?0:b.calls.length?(1-n)/b.calls.length:1;for(o=0;o<b.calls.length;o++){var q=b.calls[o],r=q[0],s=1e3,t=q[1],u=q[2]||{},v={};if(void 0!==g.duration?s=g.duration:void 0!==b.defaultDuration&&(s=b.defaultDuration),v.duration=s*("number"==typeof t?t:p),v.queue=g.queue||"",v.easing=u.easing||"ease",v.delay=parseFloat(u.delay)||0,v.loop=!b.loop&&u.loop,v._cacheValues=u._cacheValues||!0,0===o){if(v.delay+=parseFloat(g.delay)||0,0===h&&(v.begin=function(){g.begin&&g.begin.call(j,j);var b=a.match(/(In|Out)$/);b&&"In"===b[0]&&void 0!==r.opacity&&f.each(j.nodeType?[j]:j,function(a,b){e.CSS.setPropertyValue(b,"opacity",0)}),g.animateParentHeight&&b&&c(j,b[0],s+v.delay,g.stagger)}),null!==g.display)if(void 0!==g.display&&"none"!==g.display)v.display=g.display;else if(/In$/.test(a)){var w=e.CSS.Values.getDisplayType(d);v.display="inline"===w?"inline-block":w}g.visibility&&"hidden"!==g.visibility&&(v.visibility=g.visibility)}if(o===b.calls.length-1){var x=function(){void 0!==g.display&&"none"!==g.display||!/Out$/.test(a)||f.each(j.nodeType?[j]:j,function(a,b){e.CSS.setPropertyValue(b,"display","none")}),g.complete&&g.complete.call(j,j),k&&k.resolver(j||d)};v.complete=function(){if(l&&e.Redirects[a](d,g,h,i,j,k,!0===l||Math.max(0,l-1)),b.reset){for(var c in b.reset)if(b.reset.hasOwnProperty(c)){var f=b.reset[c];void 0!==e.CSS.Hooks.registered[c]||"string"!=typeof f&&"number"!=typeof f||(b.reset[c]=[b.reset[c],b.reset[c]])}var n={duration:0,queue:!1};m&&(n.complete=x),e.animate(d,b.reset,n)}else m&&x()},"hidden"===g.visibility&&(v.visibility=g.visibility)}e.animate(d,r,v)}},e},e.RegisterEffect.packagedEffects={"callout.bounce":{defaultDuration:550,calls:[[{translateY:-30},.25],[{translateY:0},.125],[{translateY:-15},.125],[{translateY:0},.25]]},"callout.shake":{defaultDuration:800,calls:[[{translateX:-11}],[{translateX:11}],[{translateX:-11}],[{translateX:11}],[{translateX:-11}],[{translateX:11}],[{translateX:-11}],[{translateX:0}]]},"callout.flash":{defaultDuration:1100,calls:[[{opacity:[0,"easeInOutQuad",1]}],[{opacity:[1,"easeInOutQuad"]}],[{opacity:[0,"easeInOutQuad"]}],[{opacity:[1,"easeInOutQuad"]}]]},"callout.pulse":{defaultDuration:825,calls:[[{scaleX:1.1,scaleY:1.1},.5,{easing:"easeInExpo"}],[{scaleX:1,scaleY:1},.5]]},"callout.swing":{defaultDuration:950,calls:[[{rotateZ:15}],[{rotateZ:-10}],[{rotateZ:5}],[{rotateZ:-5}],[{rotateZ:0}]]},"callout.tada":{defaultDuration:1e3,calls:[[{scaleX:.9,scaleY:.9,rotateZ:-3},.1],[{scaleX:1.1,scaleY:1.1,rotateZ:3},.1],[{scaleX:1.1,scaleY:1.1,rotateZ:-3},.1],["reverse",.125],["reverse",.125],["reverse",.125],["reverse",.125],["reverse",.125],[{scaleX:1,scaleY:1,rotateZ:0},.2]]},"transition.fadeIn":{defaultDuration:500,calls:[[{opacity:[1,0]}]]},"transition.fadeOut":{defaultDuration:500,calls:[[{opacity:[0,1]}]]},"transition.flipXIn":{defaultDuration:700,calls:[[{opacity:[1,0],transformPerspective:[800,800],rotateY:[0,-55]}]],reset:{transformPerspective:0}},"transition.flipXOut":{defaultDuration:700,calls:[[{opacity:[0,1],transformPerspective:[800,800],rotateY:55}]],reset:{transformPerspective:0,rotateY:0}},"transition.flipYIn":{defaultDuration:800,calls:[[{opacity:[1,0],transformPerspective:[800,800],rotateX:[0,-45]}]],reset:{transformPerspective:0}},"transition.flipYOut":{defaultDuration:800,calls:[[{opacity:[0,1],transformPerspective:[800,800],rotateX:25}]],reset:{transformPerspective:0,rotateX:0}},"transition.flipBounceXIn":{defaultDuration:900,calls:[[{opacity:[.725,0],transformPerspective:[400,400],rotateY:[-10,90]},.5],[{opacity:.8,rotateY:10},.25],[{opacity:1,rotateY:0},.25]],reset:{transformPerspective:0}},"transition.flipBounceXOut":{defaultDuration:800,calls:[[{opacity:[.9,1],transformPerspective:[400,400],rotateY:-10}],[{opacity:0,rotateY:90}]],reset:{transformPerspective:0,rotateY:0}},"transition.flipBounceYIn":{defaultDuration:850,calls:[[{opacity:[.725,0],transformPerspective:[400,400],rotateX:[-10,90]},.5],[{opacity:.8,rotateX:10},.25],[{opacity:1,rotateX:0},.25]],reset:{transformPerspective:0}},"transition.flipBounceYOut":{defaultDuration:800,calls:[[{opacity:[.9,1],transformPerspective:[400,400],rotateX:-15}],[{opacity:0,rotateX:90}]],reset:{transformPerspective:0,rotateX:0}},"transition.swoopIn":{defaultDuration:850,calls:[[{opacity:[1,0],transformOriginX:["100%","50%"],transformOriginY:["100%","100%"],scaleX:[1,0],scaleY:[1,0],translateX:[0,-700],translateZ:0}]],reset:{transformOriginX:"50%",transformOriginY:"50%"}},"transition.swoopOut":{defaultDuration:850,calls:[[{opacity:[0,1],transformOriginX:["50%","100%"],transformOriginY:["100%","100%"],scaleX:0,scaleY:0,translateX:-700,translateZ:0}]],reset:{transformOriginX:"50%",transformOriginY:"50%",scaleX:1,scaleY:1,translateX:0}},"transition.whirlIn":{defaultDuration:850,calls:[[{opacity:[1,0],transformOriginX:["50%","50%"],transformOriginY:["50%","50%"],scaleX:[1,0],scaleY:[1,0],rotateY:[0,160]},1,{easing:"easeInOutSine"}]]},"transition.whirlOut":{defaultDuration:750,calls:[[{opacity:[0,"easeInOutQuint",1],transformOriginX:["50%","50%"],transformOriginY:["50%","50%"],scaleX:0,scaleY:0,rotateY:160},1,{easing:"swing"}]],reset:{scaleX:1,scaleY:1,rotateY:0}},"transition.shrinkIn":{defaultDuration:750,calls:[[{opacity:[1,0],transformOriginX:["50%","50%"],transformOriginY:["50%","50%"],scaleX:[1,1.5],scaleY:[1,1.5],translateZ:0}]]},"transition.shrinkOut":{defaultDuration:600,calls:[[{opacity:[0,1],transformOriginX:["50%","50%"],transformOriginY:["50%","50%"],scaleX:1.3,scaleY:1.3,translateZ:0}]],reset:{scaleX:1,scaleY:1}},"transition.expandIn":{defaultDuration:700,calls:[[{opacity:[1,0],transformOriginX:["50%","50%"],transformOriginY:["50%","50%"],scaleX:[1,.625],scaleY:[1,.625],translateZ:0}]]},"transition.expandOut":{defaultDuration:700,calls:[[{opacity:[0,1],transformOriginX:["50%","50%"],transformOriginY:["50%","50%"],scaleX:.5,scaleY:.5,translateZ:0}]],reset:{scaleX:1,scaleY:1}},"transition.bounceIn":{defaultDuration:800,calls:[[{opacity:[1,0],scaleX:[1.05,.3],scaleY:[1.05,.3]},.35],[{scaleX:.9,scaleY:.9,translateZ:0},.2],[{scaleX:1,scaleY:1},.45]]},"transition.bounceOut":{defaultDuration:800,calls:[[{scaleX:.95,scaleY:.95},.35],[{scaleX:1.1,scaleY:1.1,translateZ:0},.35],[{opacity:[0,1],scaleX:.3,scaleY:.3},.3]],reset:{scaleX:1,scaleY:1}},"transition.bounceUpIn":{defaultDuration:800,calls:[[{opacity:[1,0],translateY:[-30,1e3]},.6,{easing:"easeOutCirc"}],[{translateY:10},.2],[{translateY:0},.2]]},"transition.bounceUpOut":{defaultDuration:1e3,calls:[[{translateY:20},.2],[{opacity:[0,"easeInCirc",1],translateY:-1e3},.8]],reset:{translateY:0}},"transition.bounceDownIn":{defaultDuration:800,calls:[[{opacity:[1,0],translateY:[30,-1e3]},.6,{easing:"easeOutCirc"}],[{translateY:-10},.2],[{translateY:0},.2]]},"transition.bounceDownOut":{defaultDuration:1e3,calls:[[{translateY:-20},.2],[{opacity:[0,"easeInCirc",1],translateY:1e3},.8]],reset:{translateY:0}},"transition.bounceLeftIn":{defaultDuration:750,calls:[[{opacity:[1,0],translateX:[30,-1250]},.6,{easing:"easeOutCirc"}],[{translateX:-10},.2],[{translateX:0},.2]]},"transition.bounceLeftOut":{defaultDuration:750,calls:[[{translateX:30},.2],[{opacity:[0,"easeInCirc",1],translateX:-1250},.8]],reset:{translateX:0}},"transition.bounceRightIn":{defaultDuration:750,calls:[[{opacity:[1,0],translateX:[-30,1250]},.6,{easing:"easeOutCirc"}],[{translateX:10},.2],[{translateX:0},.2]]},"transition.bounceRightOut":{defaultDuration:750,calls:[[{translateX:-30},.2],[{opacity:[0,"easeInCirc",1],translateX:1250},.8]],reset:{translateX:0}},"transition.slideUpIn":{defaultDuration:900,calls:[[{opacity:[1,0],translateY:[0,20],translateZ:0}]]},"transition.slideUpOut":{defaultDuration:900,calls:[[{opacity:[0,1],translateY:-20,translateZ:0}]],reset:{translateY:0}},"transition.slideDownIn":{defaultDuration:900,calls:[[{opacity:[1,0],translateY:[0,-20],translateZ:0}]]},"transition.slideDownOut":{defaultDuration:900,calls:[[{opacity:[0,1],translateY:20,translateZ:0}]],reset:{translateY:0}},"transition.slideLeftIn":{defaultDuration:1e3,calls:[[{opacity:[1,0],translateX:[0,-20],translateZ:0}]]},"transition.slideLeftOut":{defaultDuration:1050,calls:[[{opacity:[0,1],translateX:-20,translateZ:0}]],reset:{translateX:0}},"transition.slideRightIn":{defaultDuration:1e3,calls:[[{opacity:[1,0],translateX:[0,20],translateZ:0}]]},"transition.slideRightOut":{defaultDuration:1050,calls:[[{opacity:[0,1],translateX:20,translateZ:0}]],reset:{translateX:0}},"transition.slideUpBigIn":{defaultDuration:850,calls:[[{opacity:[1,0],translateY:[0,75],translateZ:0}]]},"transition.slideUpBigOut":{defaultDuration:800,calls:[[{opacity:[0,1],translateY:-75,translateZ:0}]],reset:{translateY:0}},"transition.slideDownBigIn":{defaultDuration:850,calls:[[{opacity:[1,0],translateY:[0,-75],translateZ:0}]]},"transition.slideDownBigOut":{defaultDuration:800,calls:[[{opacity:[0,1],translateY:75,translateZ:0}]],reset:{translateY:0}},"transition.slideLeftBigIn":{defaultDuration:800,calls:[[{opacity:[1,0],translateX:[0,-75],translateZ:0}]]},"transition.slideLeftBigOut":{defaultDuration:750,calls:[[{opacity:[0,1],translateX:-75,translateZ:0}]],reset:{translateX:0}},"transition.slideRightBigIn":{defaultDuration:800,calls:[[{opacity:[1,0],translateX:[0,75],translateZ:0}]]},"transition.slideRightBigOut":{defaultDuration:750,calls:[[{opacity:[0,1],translateX:75,translateZ:0}]],reset:{translateX:0}},"transition.perspectiveUpIn":{defaultDuration:800,calls:[[{opacity:[1,0],transformPerspective:[800,800],transformOriginX:[0,0],transformOriginY:["100%","100%"],rotateX:[0,-180]}]],reset:{transformPerspective:0,transformOriginX:"50%",transformOriginY:"50%"}},"transition.perspectiveUpOut":{defaultDuration:850,calls:[[{opacity:[0,1],transformPerspective:[800,800],transformOriginX:[0,0],transformOriginY:["100%","100%"],rotateX:-180}]],reset:{transformPerspective:0,transformOriginX:"50%",transformOriginY:"50%",rotateX:0}},"transition.perspectiveDownIn":{defaultDuration:800,calls:[[{opacity:[1,0],transformPerspective:[800,800],transformOriginX:[0,0],transformOriginY:[0,0],rotateX:[0,180]}]],reset:{transformPerspective:0,transformOriginX:"50%",transformOriginY:"50%"}},"transition.perspectiveDownOut":{defaultDuration:850,calls:[[{opacity:[0,1],transformPerspective:[800,800],transformOriginX:[0,0],transformOriginY:[0,0],rotateX:180}]],reset:{transformPerspective:0,transformOriginX:"50%",transformOriginY:"50%",rotateX:0}},"transition.perspectiveLeftIn":{defaultDuration:950,calls:[[{opacity:[1,0],transformPerspective:[2e3,2e3],transformOriginX:[0,0],transformOriginY:[0,0],rotateY:[0,-180]}]],reset:{transformPerspective:0,transformOriginX:"50%",transformOriginY:"50%"}},"transition.perspectiveLeftOut":{defaultDuration:950,calls:[[{opacity:[0,1],transformPerspective:[2e3,2e3],transformOriginX:[0,0],transformOriginY:[0,0],rotateY:-180}]],reset:{transformPerspective:0,transformOriginX:"50%",transformOriginY:"50%",rotateY:0}},"transition.perspectiveRightIn":{defaultDuration:950,calls:[[{opacity:[1,0],transformPerspective:[2e3,2e3],transformOriginX:["100%","100%"],transformOriginY:[0,0],rotateY:[0,180]}]],reset:{transformPerspective:0,transformOriginX:"50%",transformOriginY:"50%"}},"transition.perspectiveRightOut":{defaultDuration:950,calls:[[{opacity:[0,1],transformPerspective:[2e3,2e3],transformOriginX:["100%","100%"],transformOriginY:[0,0],rotateY:180}]],reset:{transformPerspective:0,transformOriginX:"50%",transformOriginY:"50%",rotateY:0}}};for(var j in e.RegisterEffect.packagedEffects)e.RegisterEffect.packagedEffects.hasOwnProperty(j)&&e.RegisterEffect(j,e.RegisterEffect.packagedEffects[j]);e.RunSequence=function(a){var b=f.extend(!0,[],a);b.length>1&&(f.each(b.reverse(),function(a,c){var d=b[a+1];if(d){var g=c.o||c.options,h=d.o||d.options,i=g&&!1===g.sequenceQueue?"begin":"complete",j=h&&h[i],k={};k[i]=function(){var a=d.e||d.elements,b=a.nodeType?[a]:a;j&&j.call(b,b),e(c)},d.o?d.o=f.extend({},h,k):d.options=f.extend({},h,k)}}),b.reverse()),e(b[0])}}(window.jQuery||window.Zepto||window,window,window?window.document:undefined)});module.exports = {
  install: function (Vue) {
    Vue.prototype.$electron = require('electron')
  }
}
Copyright (c) 2016, SimulatedGREG simulatedgreg@gmail.com

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "vue-electron",
  "version": "1.0.6",
  "description": "The vue plugin that attaches electron APIs to the Vue object, making them accessible to all components.",
  "main": "index.js",
  "dependencies": {},
  "devDependencies": {},
  "repository": {
    "type": "git",
    "url": "git+https://github.com/SimulatedGREG/vue-electron.git"
  },
  "author": "Greg Holguin <simulatedgreg@gmail.com>",
  "license": "ISC",
  "homepage": "https://github.com/SimulatedGREG/vue-electron#readme"
}/*!
  * vue-router v3.5.1
  * (c) 2021 Evan You
  * @license MIT
  */
'use strict';

/*  */

function assert (condition, message) {
  if (!condition) {
    throw new Error(("[vue-router] " + message))
  }
}

function warn (condition, message) {
  if (process.env.NODE_ENV !== 'production' && !condition) {
    typeof console !== 'undefined' && console.warn(("[vue-router] " + message));
  }
}

function extend (a, b) {
  for (var key in b) {
    a[key] = b[key];
  }
  return a
}

/*  */

var encodeReserveRE = /[!'()*]/g;
var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };
var commaRE = /%2C/g;

// fixed encodeURIComponent which is more conformant to RFC3986:
// - escapes [!'()*]
// - preserve commas
var encode = function (str) { return encodeURIComponent(str)
    .replace(encodeReserveRE, encodeReserveReplacer)
    .replace(commaRE, ','); };

function decode (str) {
  try {
    return decodeURIComponent(str)
  } catch (err) {
    if (process.env.NODE_ENV !== 'production') {
      warn(false, ("Error decoding \"" + str + "\". Leaving it intact."));
    }
  }
  return str
}

function resolveQuery (
  query,
  extraQuery,
  _parseQuery
) {
  if ( extraQuery === void 0 ) extraQuery = {};

  var parse = _parseQuery || parseQuery;
  var parsedQuery;
  try {
    parsedQuery = parse(query || '');
  } catch (e) {
    process.env.NODE_ENV !== 'production' && warn(false, e.message);
    parsedQuery = {};
  }
  for (var key in extraQuery) {
    var value = extraQuery[key];
    parsedQuery[key] = Array.isArray(value)
      ? value.map(castQueryParamValue)
      : castQueryParamValue(value);
  }
  return parsedQuery
}

var castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };

function parseQuery (query) {
  var res = {};

  query = query.trim().replace(/^(\?|#|&)/, '');

  if (!query) {
    return res
  }

  query.split('&').forEach(function (param) {
    var parts = param.replace(/\+/g, ' ').split('=');
    var key = decode(parts.shift());
    var val = parts.length > 0 ? decode(parts.join('=')) : null;

    if (res[key] === undefined) {
      res[key] = val;
    } else if (Array.isArray(res[key])) {
      res[key].push(val);
    } else {
      res[key] = [res[key], val];
    }
  });

  return res
}

function stringifyQuery (obj) {
  var res = obj
    ? Object.keys(obj)
      .map(function (key) {
        var val = obj[key];

        if (val === undefined) {
          return ''
        }

        if (val === null) {
          return encode(key)
        }

        if (Array.isArray(val)) {
          var result = [];
          val.forEach(function (val2) {
            if (val2 === undefined) {
              return
            }
            if (val2 === null) {
              result.push(encode(key));
            } else {
              result.push(encode(key) + '=' + encode(val2));
            }
          });
          return result.join('&')
        }

        return encode(key) + '=' + encode(val)
      })
      .filter(function (x) { return x.length > 0; })
      .join('&')
    : null;
  return res ? ("?" + res) : ''
}

/*  */

var trailingSlashRE = /\/?$/;

function createRoute (
  record,
  location,
  redirectedFrom,
  router
) {
  var stringifyQuery = router && router.options.stringifyQuery;

  var query = location.query || {};
  try {
    query = clone(query);
  } catch (e) {}

  var route = {
    name: location.name || (record && record.name),
    meta: (record && record.meta) || {},
    path: location.path || '/',
    hash: location.hash || '',
    query: query,
    params: location.params || {},
    fullPath: getFullPath(location, stringifyQuery),
    matched: record ? formatMatch(record) : []
  };
  if (redirectedFrom) {
    route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);
  }
  return Object.freeze(route)
}

function clone (value) {
  if (Array.isArray(value)) {
    return value.map(clone)
  } else if (value && typeof value === 'object') {
    var res = {};
    for (var key in value) {
      res[key] = clone(value[key]);
    }
    return res
  } else {
    return value
  }
}

// the starting route that represents the initial state
var START = createRoute(null, {
  path: '/'
});

function formatMatch (record) {
  var res = [];
  while (record) {
    res.unshift(record);
    record = record.parent;
  }
  return res
}

function getFullPath (
  ref,
  _stringifyQuery
) {
  var path = ref.path;
  var query = ref.query; if ( query === void 0 ) query = {};
  var hash = ref.hash; if ( hash === void 0 ) hash = '';

  var stringify = _stringifyQuery || stringifyQuery;
  return (path || '/') + stringify(query) + hash
}

function isSameRoute (a, b, onlyPath) {
  if (b === START) {
    return a === b
  } else if (!b) {
    return false
  } else if (a.path && b.path) {
    return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||
      a.hash === b.hash &&
      isObjectEqual(a.query, b.query))
  } else if (a.name && b.name) {
    return (
      a.name === b.name &&
      (onlyPath || (
        a.hash === b.hash &&
      isObjectEqual(a.query, b.query) &&
      isObjectEqual(a.params, b.params))
      )
    )
  } else {
    return false
  }
}

function isObjectEqual (a, b) {
  if ( a === void 0 ) a = {};
  if ( b === void 0 ) b = {};

  // handle null value #1566
  if (!a || !b) { return a === b }
  var aKeys = Object.keys(a).sort();
  var bKeys = Object.keys(b).sort();
  if (aKeys.length !== bKeys.length) {
    return false
  }
  return aKeys.every(function (key, i) {
    var aVal = a[key];
    var bKey = bKeys[i];
    if (bKey !== key) { return false }
    var bVal = b[key];
    // query values can be null and undefined
    if (aVal == null || bVal == null) { return aVal === bVal }
    // check nested equality
    if (typeof aVal === 'object' && typeof bVal === 'object') {
      return isObjectEqual(aVal, bVal)
    }
    return String(aVal) === String(bVal)
  })
}

function isIncludedRoute (current, target) {
  return (
    current.path.replace(trailingSlashRE, '/').indexOf(
      target.path.replace(trailingSlashRE, '/')
    ) === 0 &&
    (!target.hash || current.hash === target.hash) &&
    queryIncludes(current.query, target.query)
  )
}

function queryIncludes (current, target) {
  for (var key in target) {
    if (!(key in current)) {
      return false
    }
  }
  return true
}

function handleRouteEntered (route) {
  for (var i = 0; i < route.matched.length; i++) {
    var record = route.matched[i];
    for (var name in record.instances) {
      var instance = record.instances[name];
      var cbs = record.enteredCbs[name];
      if (!instance || !cbs) { continue }
      delete record.enteredCbs[name];
      for (var i$1 = 0; i$1 < cbs.length; i$1++) {
        if (!instance._isBeingDestroyed) { cbs[i$1](instance); }
      }
    }
  }
}

var View = {
  name: 'RouterView',
  functional: true,
  props: {
    name: {
      type: String,
      default: 'default'
    }
  },
  render: function render (_, ref) {
    var props = ref.props;
    var children = ref.children;
    var parent = ref.parent;
    var data = ref.data;

    // used by devtools to display a router-view badge
    data.routerView = true;

    // directly use parent context's createElement() function
    // so that components rendered by router-view can resolve named slots
    var h = parent.$createElement;
    var name = props.name;
    var route = parent.$route;
    var cache = parent._routerViewCache || (parent._routerViewCache = {});

    // determine current view depth, also check to see if the tree
    // has been toggled inactive but kept-alive.
    var depth = 0;
    var inactive = false;
    while (parent && parent._routerRoot !== parent) {
      var vnodeData = parent.$vnode ? parent.$vnode.data : {};
      if (vnodeData.routerView) {
        depth++;
      }
      if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {
        inactive = true;
      }
      parent = parent.$parent;
    }
    data.routerViewDepth = depth;

    // render previous view if the tree is inactive and kept-alive
    if (inactive) {
      var cachedData = cache[name];
      var cachedComponent = cachedData && cachedData.component;
      if (cachedComponent) {
        // #2301
        // pass props
        if (cachedData.configProps) {
          fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);
        }
        return h(cachedComponent, data, children)
      } else {
        // render previous empty view
        return h()
      }
    }

    var matched = route.matched[depth];
    var component = matched && matched.components[name];

    // render empty node if no matched route or no config component
    if (!matched || !component) {
      cache[name] = null;
      return h()
    }

    // cache component
    cache[name] = { component: component };

    // attach instance registration hook
    // this will be called in the instance's injected lifecycle hooks
    data.registerRouteInstance = function (vm, val) {
      // val could be undefined for unregistration
      var current = matched.instances[name];
      if (
        (val && current !== vm) ||
        (!val && current === vm)
      ) {
        matched.instances[name] = val;
      }
    }

    // also register instance in prepatch hook
    // in case the same component instance is reused across different routes
    ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {
      matched.instances[name] = vnode.componentInstance;
    };

    // register instance in init hook
    // in case kept-alive component be actived when routes changed
    data.hook.init = function (vnode) {
      if (vnode.data.keepAlive &&
        vnode.componentInstance &&
        vnode.componentInstance !== matched.instances[name]
      ) {
        matched.instances[name] = vnode.componentInstance;
      }

      // if the route transition has already been confirmed then we weren't
      // able to call the cbs during confirmation as the component was not
      // registered yet, so we call it here.
      handleRouteEntered(route);
    };

    var configProps = matched.props && matched.props[name];
    // save route and configProps in cache
    if (configProps) {
      extend(cache[name], {
        route: route,
        configProps: configProps
      });
      fillPropsinData(component, data, route, configProps);
    }

    return h(component, data, children)
  }
};

function fillPropsinData (component, data, route, configProps) {
  // resolve props
  var propsToPass = data.props = resolveProps(route, configProps);
  if (propsToPass) {
    // clone to prevent mutation
    propsToPass = data.props = extend({}, propsToPass);
    // pass non-declared props as attrs
    var attrs = data.attrs = data.attrs || {};
    for (var key in propsToPass) {
      if (!component.props || !(key in component.props)) {
        attrs[key] = propsToPass[key];
        delete propsToPass[key];
      }
    }
  }
}

function resolveProps (route, config) {
  switch (typeof config) {
    case 'undefined':
      return
    case 'object':
      return config
    case 'function':
      return config(route)
    case 'boolean':
      return config ? route.params : undefined
    default:
      if (process.env.NODE_ENV !== 'production') {
        warn(
          false,
          "props in \"" + (route.path) + "\" is a " + (typeof config) + ", " +
          "expecting an object, function or boolean."
        );
      }
  }
}

/*  */

function resolvePath (
  relative,
  base,
  append
) {
  var firstChar = relative.charAt(0);
  if (firstChar === '/') {
    return relative
  }

  if (firstChar === '?' || firstChar === '#') {
    return base + relative
  }

  var stack = base.split('/');

  // remove trailing segment if:
  // - not appending
  // - appending to trailing slash (last segment is empty)
  if (!append || !stack[stack.length - 1]) {
    stack.pop();
  }

  // resolve relative path
  var segments = relative.replace(/^\//, '').split('/');
  for (var i = 0; i < segments.length; i++) {
    var segment = segments[i];
    if (segment === '..') {
      stack.pop();
    } else if (segment !== '.') {
      stack.push(segment);
    }
  }

  // ensure leading slash
  if (stack[0] !== '') {
    stack.unshift('');
  }

  return stack.join('/')
}

function parsePath (path) {
  var hash = '';
  var query = '';

  var hashIndex = path.indexOf('#');
  if (hashIndex >= 0) {
    hash = path.slice(hashIndex);
    path = path.slice(0, hashIndex);
  }

  var queryIndex = path.indexOf('?');
  if (queryIndex >= 0) {
    query = path.slice(queryIndex + 1);
    path = path.slice(0, queryIndex);
  }

  return {
    path: path,
    query: query,
    hash: hash
  }
}

function cleanPath (path) {
  return path.replace(/\/\//g, '/')
}

var isarray = Array.isArray || function (arr) {
  return Object.prototype.toString.call(arr) == '[object Array]';
};

/**
 * Expose `pathToRegexp`.
 */
var pathToRegexp_1 = pathToRegexp;
var parse_1 = parse;
var compile_1 = compile;
var tokensToFunction_1 = tokensToFunction;
var tokensToRegExp_1 = tokensToRegExp;

/**
 * The main path matching regexp utility.
 *
 * @type {RegExp}
 */
var PATH_REGEXP = new RegExp([
  // Match escaped characters that would otherwise appear in future matches.
  // This allows the user to escape special characters that won't transform.
  '(\\\\.)',
  // Match Express-style parameters and un-named parameters with a prefix
  // and optional suffixes. Matches appear as:
  //
  // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
  // "/route(\\d+)"  => [undefined, undefined, undefined, "\d+", undefined, undefined]
  // "/*"            => ["/", undefined, undefined, undefined, undefined, "*"]
  '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
].join('|'), 'g');

/**
 * Parse a string for the raw tokens.
 *
 * @param  {string}  str
 * @param  {Object=} options
 * @return {!Array}
 */
function parse (str, options) {
  var tokens = [];
  var key = 0;
  var index = 0;
  var path = '';
  var defaultDelimiter = options && options.delimiter || '/';
  var res;

  while ((res = PATH_REGEXP.exec(str)) != null) {
    var m = res[0];
    var escaped = res[1];
    var offset = res.index;
    path += str.slice(index, offset);
    index = offset + m.length;

    // Ignore already escaped sequences.
    if (escaped) {
      path += escaped[1];
      continue
    }

    var next = str[index];
    var prefix = res[2];
    var name = res[3];
    var capture = res[4];
    var group = res[5];
    var modifier = res[6];
    var asterisk = res[7];

    // Push the current path onto the tokens.
    if (path) {
      tokens.push(path);
      path = '';
    }

    var partial = prefix != null && next != null && next !== prefix;
    var repeat = modifier === '+' || modifier === '*';
    var optional = modifier === '?' || modifier === '*';
    var delimiter = res[2] || defaultDelimiter;
    var pattern = capture || group;

    tokens.push({
      name: name || key++,
      prefix: prefix || '',
      delimiter: delimiter,
      optional: optional,
      repeat: repeat,
      partial: partial,
      asterisk: !!asterisk,
      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
    });
  }

  // Match any characters still remaining.
  if (index < str.length) {
    path += str.substr(index);
  }

  // If the path exists, push it onto the end.
  if (path) {
    tokens.push(path);
  }

  return tokens
}

/**
 * Compile a string to a template function for the path.
 *
 * @param  {string}             str
 * @param  {Object=}            options
 * @return {!function(Object=, Object=)}
 */
function compile (str, options) {
  return tokensToFunction(parse(str, options), options)
}

/**
 * Prettier encoding of URI path segments.
 *
 * @param  {string}
 * @return {string}
 */
function encodeURIComponentPretty (str) {
  return encodeURI(str).replace(/[\/?#]/g, function (c) {
    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  })
}

/**
 * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
 *
 * @param  {string}
 * @return {string}
 */
function encodeAsterisk (str) {
  return encodeURI(str).replace(/[?#]/g, function (c) {
    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  })
}

/**
 * Expose a method for transforming tokens into the path function.
 */
function tokensToFunction (tokens, options) {
  // Compile all the tokens into regexps.
  var matches = new Array(tokens.length);

  // Compile all the patterns before compilation.
  for (var i = 0; i < tokens.length; i++) {
    if (typeof tokens[i] === 'object') {
      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));
    }
  }

  return function (obj, opts) {
    var path = '';
    var data = obj || {};
    var options = opts || {};
    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;

    for (var i = 0; i < tokens.length; i++) {
      var token = tokens[i];

      if (typeof token === 'string') {
        path += token;

        continue
      }

      var value = data[token.name];
      var segment;

      if (value == null) {
        if (token.optional) {
          // Prepend partial segment prefixes.
          if (token.partial) {
            path += token.prefix;
          }

          continue
        } else {
          throw new TypeError('Expected "' + token.name + '" to be defined')
        }
      }

      if (isarray(value)) {
        if (!token.repeat) {
          throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
        }

        if (value.length === 0) {
          if (token.optional) {
            continue
          } else {
            throw new TypeError('Expected "' + token.name + '" to not be empty')
          }
        }

        for (var j = 0; j < value.length; j++) {
          segment = encode(value[j]);

          if (!matches[i].test(segment)) {
            throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
          }

          path += (j === 0 ? token.prefix : token.delimiter) + segment;
        }

        continue
      }

      segment = token.asterisk ? encodeAsterisk(value) : encode(value);

      if (!matches[i].test(segment)) {
        throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
      }

      path += token.prefix + segment;
    }

    return path
  }
}

/**
 * Escape a regular expression string.
 *
 * @param  {string} str
 * @return {string}
 */
function escapeString (str) {
  return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1')
}

/**
 * Escape the capturing group by escaping special characters and meaning.
 *
 * @param  {string} group
 * @return {string}
 */
function escapeGroup (group) {
  return group.replace(/([=!:$\/()])/g, '\\$1')
}

/**
 * Attach the keys as a property of the regexp.
 *
 * @param  {!RegExp} re
 * @param  {Array}   keys
 * @return {!RegExp}
 */
function attachKeys (re, keys) {
  re.keys = keys;
  return re
}

/**
 * Get the flags for a regexp from the options.
 *
 * @param  {Object} options
 * @return {string}
 */
function flags (options) {
  return options && options.sensitive ? '' : 'i'
}

/**
 * Pull out keys from a regexp.
 *
 * @param  {!RegExp} path
 * @param  {!Array}  keys
 * @return {!RegExp}
 */
function regexpToRegexp (path, keys) {
  // Use a negative lookahead to match only capturing groups.
  var groups = path.source.match(/\((?!\?)/g);

  if (groups) {
    for (var i = 0; i < groups.length; i++) {
      keys.push({
        name: i,
        prefix: null,
        delimiter: null,
        optional: false,
        repeat: false,
        partial: false,
        asterisk: false,
        pattern: null
      });
    }
  }

  return attachKeys(path, keys)
}

/**
 * Transform an array into a regexp.
 *
 * @param  {!Array}  path
 * @param  {Array}   keys
 * @param  {!Object} options
 * @return {!RegExp}
 */
function arrayToRegexp (path, keys, options) {
  var parts = [];

  for (var i = 0; i < path.length; i++) {
    parts.push(pathToRegexp(path[i], keys, options).source);
  }

  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));

  return attachKeys(regexp, keys)
}

/**
 * Create a path regexp from string input.
 *
 * @param  {string}  path
 * @param  {!Array}  keys
 * @param  {!Object} options
 * @return {!RegExp}
 */
function stringToRegexp (path, keys, options) {
  return tokensToRegExp(parse(path, options), keys, options)
}

/**
 * Expose a function for taking tokens and returning a RegExp.
 *
 * @param  {!Array}          tokens
 * @param  {(Array|Object)=} keys
 * @param  {Object=}         options
 * @return {!RegExp}
 */
function tokensToRegExp (tokens, keys, options) {
  if (!isarray(keys)) {
    options = /** @type {!Object} */ (keys || options);
    keys = [];
  }

  options = options || {};

  var strict = options.strict;
  var end = options.end !== false;
  var route = '';

  // Iterate over the tokens and create our regexp string.
  for (var i = 0; i < tokens.length; i++) {
    var token = tokens[i];

    if (typeof token === 'string') {
      route += escapeString(token);
    } else {
      var prefix = escapeString(token.prefix);
      var capture = '(?:' + token.pattern + ')';

      keys.push(token);

      if (token.repeat) {
        capture += '(?:' + prefix + capture + ')*';
      }

      if (token.optional) {
        if (!token.partial) {
          capture = '(?:' + prefix + '(' + capture + '))?';
        } else {
          capture = prefix + '(' + capture + ')?';
        }
      } else {
        capture = prefix + '(' + capture + ')';
      }

      route += capture;
    }
  }

  var delimiter = escapeString(options.delimiter || '/');
  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;

  // In non-strict mode we allow a slash at the end of match. If the path to
  // match already ends with a slash, we remove it for consistency. The slash
  // is valid at the end of a path match, not in the middle. This is important
  // in non-ending mode, where "/test/" shouldn't match "/test//route".
  if (!strict) {
    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';
  }

  if (end) {
    route += '$';
  } else {
    // In non-ending mode, we need the capturing groups to match as much as
    // possible by using a positive lookahead to the end or next path segment.
    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';
  }

  return attachKeys(new RegExp('^' + route, flags(options)), keys)
}

/**
 * Normalize the given path string, returning a regular expression.
 *
 * An empty array can be passed in for the keys, which will hold the
 * placeholder key descriptions. For example, using `/user/:id`, `keys` will
 * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
 *
 * @param  {(string|RegExp|Array)} path
 * @param  {(Array|Object)=}       keys
 * @param  {Object=}               options
 * @return {!RegExp}
 */
function pathToRegexp (path, keys, options) {
  if (!isarray(keys)) {
    options = /** @type {!Object} */ (keys || options);
    keys = [];
  }

  options = options || {};

  if (path instanceof RegExp) {
    return regexpToRegexp(path, /** @type {!Array} */ (keys))
  }

  if (isarray(path)) {
    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
  }

  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
}
pathToRegexp_1.parse = parse_1;
pathToRegexp_1.compile = compile_1;
pathToRegexp_1.tokensToFunction = tokensToFunction_1;
pathToRegexp_1.tokensToRegExp = tokensToRegExp_1;

/*  */

// $flow-disable-line
var regexpCompileCache = Object.create(null);

function fillParams (
  path,
  params,
  routeMsg
) {
  params = params || {};
  try {
    var filler =
      regexpCompileCache[path] ||
      (regexpCompileCache[path] = pathToRegexp_1.compile(path));

    // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}
    // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string
    if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }

    return filler(params, { pretty: true })
  } catch (e) {
    if (process.env.NODE_ENV !== 'production') {
      // Fix #3072 no warn if `pathMatch` is string
      warn(typeof params.pathMatch === 'string', ("missing param for " + routeMsg + ": " + (e.message)));
    }
    return ''
  } finally {
    // delete the 0 if it was added
    delete params[0];
  }
}

/*  */

function normalizeLocation (
  raw,
  current,
  append,
  router
) {
  var next = typeof raw === 'string' ? { path: raw } : raw;
  // named target
  if (next._normalized) {
    return next
  } else if (next.name) {
    next = extend({}, raw);
    var params = next.params;
    if (params && typeof params === 'object') {
      next.params = extend({}, params);
    }
    return next
  }

  // relative params
  if (!next.path && next.params && current) {
    next = extend({}, next);
    next._normalized = true;
    var params$1 = extend(extend({}, current.params), next.params);
    if (current.name) {
      next.name = current.name;
      next.params = params$1;
    } else if (current.matched.length) {
      var rawPath = current.matched[current.matched.length - 1].path;
      next.path = fillParams(rawPath, params$1, ("path " + (current.path)));
    } else if (process.env.NODE_ENV !== 'production') {
      warn(false, "relative params navigation requires a current route.");
    }
    return next
  }

  var parsedPath = parsePath(next.path || '');
  var basePath = (current && current.path) || '/';
  var path = parsedPath.path
    ? resolvePath(parsedPath.path, basePath, append || next.append)
    : basePath;

  var query = resolveQuery(
    parsedPath.query,
    next.query,
    router && router.options.parseQuery
  );

  var hash = next.hash || parsedPath.hash;
  if (hash && hash.charAt(0) !== '#') {
    hash = "#" + hash;
  }

  return {
    _normalized: true,
    path: path,
    query: query,
    hash: hash
  }
}

/*  */

// work around weird flow bug
var toTypes = [String, Object];
var eventTypes = [String, Array];

var noop = function () {};

var warnedCustomSlot;
var warnedTagProp;
var warnedEventProp;

var Link = {
  name: 'RouterLink',
  props: {
    to: {
      type: toTypes,
      required: true
    },
    tag: {
      type: String,
      default: 'a'
    },
    custom: Boolean,
    exact: Boolean,
    exactPath: Boolean,
    append: Boolean,
    replace: Boolean,
    activeClass: String,
    exactActiveClass: String,
    ariaCurrentValue: {
      type: String,
      default: 'page'
    },
    event: {
      type: eventTypes,
      default: 'click'
    }
  },
  render: function render (h) {
    var this$1 = this;

    var router = this.$router;
    var current = this.$route;
    var ref = router.resolve(
      this.to,
      current,
      this.append
    );
    var location = ref.location;
    var route = ref.route;
    var href = ref.href;

    var classes = {};
    var globalActiveClass = router.options.linkActiveClass;
    var globalExactActiveClass = router.options.linkExactActiveClass;
    // Support global empty active class
    var activeClassFallback =
      globalActiveClass == null ? 'router-link-active' : globalActiveClass;
    var exactActiveClassFallback =
      globalExactActiveClass == null
        ? 'router-link-exact-active'
        : globalExactActiveClass;
    var activeClass =
      this.activeClass == null ? activeClassFallback : this.activeClass;
    var exactActiveClass =
      this.exactActiveClass == null
        ? exactActiveClassFallback
        : this.exactActiveClass;

    var compareTarget = route.redirectedFrom
      ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)
      : route;

    classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);
    classes[activeClass] = this.exact || this.exactPath
      ? classes[exactActiveClass]
      : isIncludedRoute(current, compareTarget);

    var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;

    var handler = function (e) {
      if (guardEvent(e)) {
        if (this$1.replace) {
          router.replace(location, noop);
        } else {
          router.push(location, noop);
        }
      }
    };

    var on = { click: guardEvent };
    if (Array.isArray(this.event)) {
      this.event.forEach(function (e) {
        on[e] = handler;
      });
    } else {
      on[this.event] = handler;
    }

    var data = { class: classes };

    var scopedSlot =
      !this.$scopedSlots.$hasNormal &&
      this.$scopedSlots.default &&
      this.$scopedSlots.default({
        href: href,
        route: route,
        navigate: handler,
        isActive: classes[activeClass],
        isExactActive: classes[exactActiveClass]
      });

    if (scopedSlot) {
      if (process.env.NODE_ENV !== 'production' && !this.custom) {
        !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n');
        warnedCustomSlot = true;
      }
      if (scopedSlot.length === 1) {
        return scopedSlot[0]
      } else if (scopedSlot.length > 1 || !scopedSlot.length) {
        if (process.env.NODE_ENV !== 'production') {
          warn(
            false,
            ("<router-link> with to=\"" + (this.to) + "\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.")
          );
        }
        return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)
      }
    }

    if (process.env.NODE_ENV !== 'production') {
      if ('tag' in this.$options.propsData && !warnedTagProp) {
        warn(
          false,
          "<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link."
        );
        warnedTagProp = true;
      }
      if ('event' in this.$options.propsData && !warnedEventProp) {
        warn(
          false,
          "<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link."
        );
        warnedEventProp = true;
      }
    }

    if (this.tag === 'a') {
      data.on = on;
      data.attrs = { href: href, 'aria-current': ariaCurrentValue };
    } else {
      // find the first <a> child and apply listener and href
      var a = findAnchor(this.$slots.default);
      if (a) {
        // in case the <a> is a static node
        a.isStatic = false;
        var aData = (a.data = extend({}, a.data));
        aData.on = aData.on || {};
        // transform existing events in both objects into arrays so we can push later
        for (var event in aData.on) {
          var handler$1 = aData.on[event];
          if (event in on) {
            aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];
          }
        }
        // append new listeners for router-link
        for (var event$1 in on) {
          if (event$1 in aData.on) {
            // on[event] is always a function
            aData.on[event$1].push(on[event$1]);
          } else {
            aData.on[event$1] = handler;
          }
        }

        var aAttrs = (a.data.attrs = extend({}, a.data.attrs));
        aAttrs.href = href;
        aAttrs['aria-current'] = ariaCurrentValue;
      } else {
        // doesn't have <a> child, apply listener to self
        data.on = on;
      }
    }

    return h(this.tag, data, this.$slots.default)
  }
};

function guardEvent (e) {
  // don't redirect with control keys
  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }
  // don't redirect when preventDefault called
  if (e.defaultPrevented) { return }
  // don't redirect on right click
  if (e.button !== undefined && e.button !== 0) { return }
  // don't redirect if `target="_blank"`
  if (e.currentTarget && e.currentTarget.getAttribute) {
    var target = e.currentTarget.getAttribute('target');
    if (/\b_blank\b/i.test(target)) { return }
  }
  // this may be a Weex event which doesn't have this method
  if (e.preventDefault) {
    e.preventDefault();
  }
  return true
}

function findAnchor (children) {
  if (children) {
    var child;
    for (var i = 0; i < children.length; i++) {
      child = children[i];
      if (child.tag === 'a') {
        return child
      }
      if (child.children && (child = findAnchor(child.children))) {
        return child
      }
    }
  }
}

var _Vue;

function install (Vue) {
  if (install.installed && _Vue === Vue) { return }
  install.installed = true;

  _Vue = Vue;

  var isDef = function (v) { return v !== undefined; };

  var registerInstance = function (vm, callVal) {
    var i = vm.$options._parentVnode;
    if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {
      i(vm, callVal);
    }
  };

  Vue.mixin({
    beforeCreate: function beforeCreate () {
      if (isDef(this.$options.router)) {
        this._routerRoot = this;
        this._router = this.$options.router;
        this._router.init(this);
        Vue.util.defineReactive(this, '_route', this._router.history.current);
      } else {
        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;
      }
      registerInstance(this, this);
    },
    destroyed: function destroyed () {
      registerInstance(this);
    }
  });

  Object.defineProperty(Vue.prototype, '$router', {
    get: function get () { return this._routerRoot._router }
  });

  Object.defineProperty(Vue.prototype, '$route', {
    get: function get () { return this._routerRoot._route }
  });

  Vue.component('RouterView', View);
  Vue.component('RouterLink', Link);

  var strats = Vue.config.optionMergeStrategies;
  // use the same hook merging strategy for route hooks
  strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;
}

/*  */

var inBrowser = typeof window !== 'undefined';

/*  */

function createRouteMap (
  routes,
  oldPathList,
  oldPathMap,
  oldNameMap,
  parentRoute
) {
  // the path list is used to control path matching priority
  var pathList = oldPathList || [];
  // $flow-disable-line
  var pathMap = oldPathMap || Object.create(null);
  // $flow-disable-line
  var nameMap = oldNameMap || Object.create(null);

  routes.forEach(function (route) {
    addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);
  });

  // ensure wildcard routes are always at the end
  for (var i = 0, l = pathList.length; i < l; i++) {
    if (pathList[i] === '*') {
      pathList.push(pathList.splice(i, 1)[0]);
      l--;
      i--;
    }
  }

  if (process.env.NODE_ENV === 'development') {
    // warn if routes do not include leading slashes
    var found = pathList
    // check for missing leading slash
      .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });

    if (found.length > 0) {
      var pathNames = found.map(function (path) { return ("- " + path); }).join('\n');
      warn(false, ("Non-nested routes must include a leading slash character. Fix the following routes: \n" + pathNames));
    }
  }

  return {
    pathList: pathList,
    pathMap: pathMap,
    nameMap: nameMap
  }
}

function addRouteRecord (
  pathList,
  pathMap,
  nameMap,
  route,
  parent,
  matchAs
) {
  var path = route.path;
  var name = route.name;
  if (process.env.NODE_ENV !== 'production') {
    assert(path != null, "\"path\" is required in a route configuration.");
    assert(
      typeof route.component !== 'string',
      "route config \"component\" for path: " + (String(
        path || name
      )) + " cannot be a " + "string id. Use an actual component instead."
    );

    warn(
      // eslint-disable-next-line no-control-regex
      !/[^\u0000-\u007F]+/.test(path),
      "Route with path \"" + path + "\" contains unencoded characters, make sure " +
        "your path is correctly encoded before passing it to the router. Use " +
        "encodeURI to encode static segments of your path."
    );
  }

  var pathToRegexpOptions =
    route.pathToRegexpOptions || {};
  var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);

  if (typeof route.caseSensitive === 'boolean') {
    pathToRegexpOptions.sensitive = route.caseSensitive;
  }

  var record = {
    path: normalizedPath,
    regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),
    components: route.components || { default: route.component },
    alias: route.alias
      ? typeof route.alias === 'string'
        ? [route.alias]
        : route.alias
      : [],
    instances: {},
    enteredCbs: {},
    name: name,
    parent: parent,
    matchAs: matchAs,
    redirect: route.redirect,
    beforeEnter: route.beforeEnter,
    meta: route.meta || {},
    props:
      route.props == null
        ? {}
        : route.components
          ? route.props
          : { default: route.props }
  };

  if (route.children) {
    // Warn if route is named, does not redirect and has a default child route.
    // If users navigate to this route by name, the default child will
    // not be rendered (GH Issue #629)
    if (process.env.NODE_ENV !== 'production') {
      if (
        route.name &&
        !route.redirect &&
        route.children.some(function (child) { return /^\/?$/.test(child.path); })
      ) {
        warn(
          false,
          "Named Route '" + (route.name) + "' has a default child route. " +
            "When navigating to this named route (:to=\"{name: '" + (route.name) + "'\"), " +
            "the default child route will not be rendered. Remove the name from " +
            "this route and use the name of the default child route for named " +
            "links instead."
        );
      }
    }
    route.children.forEach(function (child) {
      var childMatchAs = matchAs
        ? cleanPath((matchAs + "/" + (child.path)))
        : undefined;
      addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);
    });
  }

  if (!pathMap[record.path]) {
    pathList.push(record.path);
    pathMap[record.path] = record;
  }

  if (route.alias !== undefined) {
    var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];
    for (var i = 0; i < aliases.length; ++i) {
      var alias = aliases[i];
      if (process.env.NODE_ENV !== 'production' && alias === path) {
        warn(
          false,
          ("Found an alias with the same value as the path: \"" + path + "\". You have to remove that alias. It will be ignored in development.")
        );
        // skip in dev to make it work
        continue
      }

      var aliasRoute = {
        path: alias,
        children: route.children
      };
      addRouteRecord(
        pathList,
        pathMap,
        nameMap,
        aliasRoute,
        parent,
        record.path || '/' // matchAs
      );
    }
  }

  if (name) {
    if (!nameMap[name]) {
      nameMap[name] = record;
    } else if (process.env.NODE_ENV !== 'production' && !matchAs) {
      warn(
        false,
        "Duplicate named routes definition: " +
          "{ name: \"" + name + "\", path: \"" + (record.path) + "\" }"
      );
    }
  }
}

function compileRouteRegex (
  path,
  pathToRegexpOptions
) {
  var regex = pathToRegexp_1(path, [], pathToRegexpOptions);
  if (process.env.NODE_ENV !== 'production') {
    var keys = Object.create(null);
    regex.keys.forEach(function (key) {
      warn(
        !keys[key.name],
        ("Duplicate param keys in route with path: \"" + path + "\"")
      );
      keys[key.name] = true;
    });
  }
  return regex
}

function normalizePath (
  path,
  parent,
  strict
) {
  if (!strict) { path = path.replace(/\/$/, ''); }
  if (path[0] === '/') { return path }
  if (parent == null) { return path }
  return cleanPath(((parent.path) + "/" + path))
}

/*  */



function createMatcher (
  routes,
  router
) {
  var ref = createRouteMap(routes);
  var pathList = ref.pathList;
  var pathMap = ref.pathMap;
  var nameMap = ref.nameMap;

  function addRoutes (routes) {
    createRouteMap(routes, pathList, pathMap, nameMap);
  }

  function addRoute (parentOrRoute, route) {
    var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;
    // $flow-disable-line
    createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);

    // add aliases of parent
    if (parent) {
      createRouteMap(
        // $flow-disable-line route is defined if parent is
        parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),
        pathList,
        pathMap,
        nameMap,
        parent
      );
    }
  }

  function getRoutes () {
    return pathList.map(function (path) { return pathMap[path]; })
  }

  function match (
    raw,
    currentRoute,
    redirectedFrom
  ) {
    var location = normalizeLocation(raw, currentRoute, false, router);
    var name = location.name;

    if (name) {
      var record = nameMap[name];
      if (process.env.NODE_ENV !== 'production') {
        warn(record, ("Route with name '" + name + "' does not exist"));
      }
      if (!record) { return _createRoute(null, location) }
      var paramNames = record.regex.keys
        .filter(function (key) { return !key.optional; })
        .map(function (key) { return key.name; });

      if (typeof location.params !== 'object') {
        location.params = {};
      }

      if (currentRoute && typeof currentRoute.params === 'object') {
        for (var key in currentRoute.params) {
          if (!(key in location.params) && paramNames.indexOf(key) > -1) {
            location.params[key] = currentRoute.params[key];
          }
        }
      }

      location.path = fillParams(record.path, location.params, ("named route \"" + name + "\""));
      return _createRoute(record, location, redirectedFrom)
    } else if (location.path) {
      location.params = {};
      for (var i = 0; i < pathList.length; i++) {
        var path = pathList[i];
        var record$1 = pathMap[path];
        if (matchRoute(record$1.regex, location.path, location.params)) {
          return _createRoute(record$1, location, redirectedFrom)
        }
      }
    }
    // no match
    return _createRoute(null, location)
  }

  function redirect (
    record,
    location
  ) {
    var originalRedirect = record.redirect;
    var redirect = typeof originalRedirect === 'function'
      ? originalRedirect(createRoute(record, location, null, router))
      : originalRedirect;

    if (typeof redirect === 'string') {
      redirect = { path: redirect };
    }

    if (!redirect || typeof redirect !== 'object') {
      if (process.env.NODE_ENV !== 'production') {
        warn(
          false, ("invalid redirect option: " + (JSON.stringify(redirect)))
        );
      }
      return _createRoute(null, location)
    }

    var re = redirect;
    var name = re.name;
    var path = re.path;
    var query = location.query;
    var hash = location.hash;
    var params = location.params;
    query = re.hasOwnProperty('query') ? re.query : query;
    hash = re.hasOwnProperty('hash') ? re.hash : hash;
    params = re.hasOwnProperty('params') ? re.params : params;

    if (name) {
      // resolved named direct
      var targetRecord = nameMap[name];
      if (process.env.NODE_ENV !== 'production') {
        assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found."));
      }
      return match({
        _normalized: true,
        name: name,
        query: query,
        hash: hash,
        params: params
      }, undefined, location)
    } else if (path) {
      // 1. resolve relative redirect
      var rawPath = resolveRecordPath(path, record);
      // 2. resolve params
      var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\""));
      // 3. rematch with existing query and hash
      return match({
        _normalized: true,
        path: resolvedPath,
        query: query,
        hash: hash
      }, undefined, location)
    } else {
      if (process.env.NODE_ENV !== 'production') {
        warn(false, ("invalid redirect option: " + (JSON.stringify(redirect))));
      }
      return _createRoute(null, location)
    }
  }

  function alias (
    record,
    location,
    matchAs
  ) {
    var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\""));
    var aliasedMatch = match({
      _normalized: true,
      path: aliasedPath
    });
    if (aliasedMatch) {
      var matched = aliasedMatch.matched;
      var aliasedRecord = matched[matched.length - 1];
      location.params = aliasedMatch.params;
      return _createRoute(aliasedRecord, location)
    }
    return _createRoute(null, location)
  }

  function _createRoute (
    record,
    location,
    redirectedFrom
  ) {
    if (record && record.redirect) {
      return redirect(record, redirectedFrom || location)
    }
    if (record && record.matchAs) {
      return alias(record, location, record.matchAs)
    }
    return createRoute(record, location, redirectedFrom, router)
  }

  return {
    match: match,
    addRoute: addRoute,
    getRoutes: getRoutes,
    addRoutes: addRoutes
  }
}

function matchRoute (
  regex,
  path,
  params
) {
  var m = path.match(regex);

  if (!m) {
    return false
  } else if (!params) {
    return true
  }

  for (var i = 1, len = m.length; i < len; ++i) {
    var key = regex.keys[i - 1];
    if (key) {
      // Fix #1994: using * with props: true generates a param named 0
      params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];
    }
  }

  return true
}

function resolveRecordPath (path, record) {
  return resolvePath(path, record.parent ? record.parent.path : '/', true)
}

/*  */

// use User Timing api (if present) for more accurate key precision
var Time =
  inBrowser && window.performance && window.performance.now
    ? window.performance
    : Date;

function genStateKey () {
  return Time.now().toFixed(3)
}

var _key = genStateKey();

function getStateKey () {
  return _key
}

function setStateKey (key) {
  return (_key = key)
}

/*  */

var positionStore = Object.create(null);

function setupScroll () {
  // Prevent browser scroll behavior on History popstate
  if ('scrollRestoration' in window.history) {
    window.history.scrollRestoration = 'manual';
  }
  // Fix for #1585 for Firefox
  // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678
  // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with
  // window.location.protocol + '//' + window.location.host
  // location.host contains the port and location.hostname doesn't
  var protocolAndPath = window.location.protocol + '//' + window.location.host;
  var absolutePath = window.location.href.replace(protocolAndPath, '');
  // preserve existing history state as it could be overriden by the user
  var stateCopy = extend({}, window.history.state);
  stateCopy.key = getStateKey();
  window.history.replaceState(stateCopy, '', absolutePath);
  window.addEventListener('popstate', handlePopState);
  return function () {
    window.removeEventListener('popstate', handlePopState);
  }
}

function handleScroll (
  router,
  to,
  from,
  isPop
) {
  if (!router.app) {
    return
  }

  var behavior = router.options.scrollBehavior;
  if (!behavior) {
    return
  }

  if (process.env.NODE_ENV !== 'production') {
    assert(typeof behavior === 'function', "scrollBehavior must be a function");
  }

  // wait until re-render finishes before scrolling
  router.app.$nextTick(function () {
    var position = getScrollPosition();
    var shouldScroll = behavior.call(
      router,
      to,
      from,
      isPop ? position : null
    );

    if (!shouldScroll) {
      return
    }

    if (typeof shouldScroll.then === 'function') {
      shouldScroll
        .then(function (shouldScroll) {
          scrollToPosition((shouldScroll), position);
        })
        .catch(function (err) {
          if (process.env.NODE_ENV !== 'production') {
            assert(false, err.toString());
          }
        });
    } else {
      scrollToPosition(shouldScroll, position);
    }
  });
}

function saveScrollPosition () {
  var key = getStateKey();
  if (key) {
    positionStore[key] = {
      x: window.pageXOffset,
      y: window.pageYOffset
    };
  }
}

function handlePopState (e) {
  saveScrollPosition();
  if (e.state && e.state.key) {
    setStateKey(e.state.key);
  }
}

function getScrollPosition () {
  var key = getStateKey();
  if (key) {
    return positionStore[key]
  }
}

function getElementPosition (el, offset) {
  var docEl = document.documentElement;
  var docRect = docEl.getBoundingClientRect();
  var elRect = el.getBoundingClientRect();
  return {
    x: elRect.left - docRect.left - offset.x,
    y: elRect.top - docRect.top - offset.y
  }
}

function isValidPosition (obj) {
  return isNumber(obj.x) || isNumber(obj.y)
}

function normalizePosition (obj) {
  return {
    x: isNumber(obj.x) ? obj.x : window.pageXOffset,
    y: isNumber(obj.y) ? obj.y : window.pageYOffset
  }
}

function normalizeOffset (obj) {
  return {
    x: isNumber(obj.x) ? obj.x : 0,
    y: isNumber(obj.y) ? obj.y : 0
  }
}

function isNumber (v) {
  return typeof v === 'number'
}

var hashStartsWithNumberRE = /^#\d/;

function scrollToPosition (shouldScroll, position) {
  var isObject = typeof shouldScroll === 'object';
  if (isObject && typeof shouldScroll.selector === 'string') {
    // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]
    // but at the same time, it doesn't make much sense to select an element with an id and an extra selector
    var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line
      ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line
      : document.querySelector(shouldScroll.selector);

    if (el) {
      var offset =
        shouldScroll.offset && typeof shouldScroll.offset === 'object'
          ? shouldScroll.offset
          : {};
      offset = normalizeOffset(offset);
      position = getElementPosition(el, offset);
    } else if (isValidPosition(shouldScroll)) {
      position = normalizePosition(shouldScroll);
    }
  } else if (isObject && isValidPosition(shouldScroll)) {
    position = normalizePosition(shouldScroll);
  }

  if (position) {
    // $flow-disable-line
    if ('scrollBehavior' in document.documentElement.style) {
      window.scrollTo({
        left: position.x,
        top: position.y,
        // $flow-disable-line
        behavior: shouldScroll.behavior
      });
    } else {
      window.scrollTo(position.x, position.y);
    }
  }
}

/*  */

var supportsPushState =
  inBrowser &&
  (function () {
    var ua = window.navigator.userAgent;

    if (
      (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&
      ua.indexOf('Mobile Safari') !== -1 &&
      ua.indexOf('Chrome') === -1 &&
      ua.indexOf('Windows Phone') === -1
    ) {
      return false
    }

    return window.history && typeof window.history.pushState === 'function'
  })();

function pushState (url, replace) {
  saveScrollPosition();
  // try...catch the pushState call to get around Safari
  // DOM Exception 18 where it limits to 100 pushState calls
  var history = window.history;
  try {
    if (replace) {
      // preserve existing history state as it could be overriden by the user
      var stateCopy = extend({}, history.state);
      stateCopy.key = getStateKey();
      history.replaceState(stateCopy, '', url);
    } else {
      history.pushState({ key: setStateKey(genStateKey()) }, '', url);
    }
  } catch (e) {
    window.location[replace ? 'replace' : 'assign'](url);
  }
}

function replaceState (url) {
  pushState(url, true);
}

/*  */

function runQueue (queue, fn, cb) {
  var step = function (index) {
    if (index >= queue.length) {
      cb();
    } else {
      if (queue[index]) {
        fn(queue[index], function () {
          step(index + 1);
        });
      } else {
        step(index + 1);
      }
    }
  };
  step(0);
}

// When changing thing, also edit router.d.ts
var NavigationFailureType = {
  redirected: 2,
  aborted: 4,
  cancelled: 8,
  duplicated: 16
};

function createNavigationRedirectedError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.redirected,
    ("Redirected when going from \"" + (from.fullPath) + "\" to \"" + (stringifyRoute(
      to
    )) + "\" via a navigation guard.")
  )
}

function createNavigationDuplicatedError (from, to) {
  var error = createRouterError(
    from,
    to,
    NavigationFailureType.duplicated,
    ("Avoided redundant navigation to current location: \"" + (from.fullPath) + "\".")
  );
  // backwards compatible with the first introduction of Errors
  error.name = 'NavigationDuplicated';
  return error
}

function createNavigationCancelledError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.cancelled,
    ("Navigation cancelled from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" with a new navigation.")
  )
}

function createNavigationAbortedError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.aborted,
    ("Navigation aborted from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" via a navigation guard.")
  )
}

function createRouterError (from, to, type, message) {
  var error = new Error(message);
  error._isRouter = true;
  error.from = from;
  error.to = to;
  error.type = type;

  return error
}

var propertiesToLog = ['params', 'query', 'hash'];

function stringifyRoute (to) {
  if (typeof to === 'string') { return to }
  if ('path' in to) { return to.path }
  var location = {};
  propertiesToLog.forEach(function (key) {
    if (key in to) { location[key] = to[key]; }
  });
  return JSON.stringify(location, null, 2)
}

function isError (err) {
  return Object.prototype.toString.call(err).indexOf('Error') > -1
}

function isNavigationFailure (err, errorType) {
  return (
    isError(err) &&
    err._isRouter &&
    (errorType == null || err.type === errorType)
  )
}

/*  */

function resolveAsyncComponents (matched) {
  return function (to, from, next) {
    var hasAsync = false;
    var pending = 0;
    var error = null;

    flatMapComponents(matched, function (def, _, match, key) {
      // if it's a function and doesn't have cid attached,
      // assume it's an async component resolve function.
      // we are not using Vue's default async resolving mechanism because
      // we want to halt the navigation until the incoming component has been
      // resolved.
      if (typeof def === 'function' && def.cid === undefined) {
        hasAsync = true;
        pending++;

        var resolve = once(function (resolvedDef) {
          if (isESModule(resolvedDef)) {
            resolvedDef = resolvedDef.default;
          }
          // save resolved on async factory in case it's used elsewhere
          def.resolved = typeof resolvedDef === 'function'
            ? resolvedDef
            : _Vue.extend(resolvedDef);
          match.components[key] = resolvedDef;
          pending--;
          if (pending <= 0) {
            next();
          }
        });

        var reject = once(function (reason) {
          var msg = "Failed to resolve async component " + key + ": " + reason;
          process.env.NODE_ENV !== 'production' && warn(false, msg);
          if (!error) {
            error = isError(reason)
              ? reason
              : new Error(msg);
            next(error);
          }
        });

        var res;
        try {
          res = def(resolve, reject);
        } catch (e) {
          reject(e);
        }
        if (res) {
          if (typeof res.then === 'function') {
            res.then(resolve, reject);
          } else {
            // new syntax in Vue 2.3
            var comp = res.component;
            if (comp && typeof comp.then === 'function') {
              comp.then(resolve, reject);
            }
          }
        }
      }
    });

    if (!hasAsync) { next(); }
  }
}

function flatMapComponents (
  matched,
  fn
) {
  return flatten(matched.map(function (m) {
    return Object.keys(m.components).map(function (key) { return fn(
      m.components[key],
      m.instances[key],
      m, key
    ); })
  }))
}

function flatten (arr) {
  return Array.prototype.concat.apply([], arr)
}

var hasSymbol =
  typeof Symbol === 'function' &&
  typeof Symbol.toStringTag === 'symbol';

function isESModule (obj) {
  return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')
}

// in Webpack 2, require.ensure now also returns a Promise
// so the resolve/reject functions may get called an extra time
// if the user uses an arrow function shorthand that happens to
// return that Promise.
function once (fn) {
  var called = false;
  return function () {
    var args = [], len = arguments.length;
    while ( len-- ) args[ len ] = arguments[ len ];

    if (called) { return }
    called = true;
    return fn.apply(this, args)
  }
}

/*  */

var History = function History (router, base) {
  this.router = router;
  this.base = normalizeBase(base);
  // start with a route object that stands for "nowhere"
  this.current = START;
  this.pending = null;
  this.ready = false;
  this.readyCbs = [];
  this.readyErrorCbs = [];
  this.errorCbs = [];
  this.listeners = [];
};

History.prototype.listen = function listen (cb) {
  this.cb = cb;
};

History.prototype.onReady = function onReady (cb, errorCb) {
  if (this.ready) {
    cb();
  } else {
    this.readyCbs.push(cb);
    if (errorCb) {
      this.readyErrorCbs.push(errorCb);
    }
  }
};

History.prototype.onError = function onError (errorCb) {
  this.errorCbs.push(errorCb);
};

History.prototype.transitionTo = function transitionTo (
  location,
  onComplete,
  onAbort
) {
    var this$1 = this;

  var route;
  // catch redirect option https://github.com/vuejs/vue-router/issues/3201
  try {
    route = this.router.match(location, this.current);
  } catch (e) {
    this.errorCbs.forEach(function (cb) {
      cb(e);
    });
    // Exception should still be thrown
    throw e
  }
  var prev = this.current;
  this.confirmTransition(
    route,
    function () {
      this$1.updateRoute(route);
      onComplete && onComplete(route);
      this$1.ensureURL();
      this$1.router.afterHooks.forEach(function (hook) {
        hook && hook(route, prev);
      });

      // fire ready cbs once
      if (!this$1.ready) {
        this$1.ready = true;
        this$1.readyCbs.forEach(function (cb) {
          cb(route);
        });
      }
    },
    function (err) {
      if (onAbort) {
        onAbort(err);
      }
      if (err && !this$1.ready) {
        // Initial redirection should not mark the history as ready yet
        // because it's triggered by the redirection instead
        // https://github.com/vuejs/vue-router/issues/3225
        // https://github.com/vuejs/vue-router/issues/3331
        if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {
          this$1.ready = true;
          this$1.readyErrorCbs.forEach(function (cb) {
            cb(err);
          });
        }
      }
    }
  );
};

History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {
    var this$1 = this;

  var current = this.current;
  this.pending = route;
  var abort = function (err) {
    // changed after adding errors with
    // https://github.com/vuejs/vue-router/pull/3047 before that change,
    // redirect and aborted navigation would produce an err == null
    if (!isNavigationFailure(err) && isError(err)) {
      if (this$1.errorCbs.length) {
        this$1.errorCbs.forEach(function (cb) {
          cb(err);
        });
      } else {
        warn(false, 'uncaught error during route navigation:');
        console.error(err);
      }
    }
    onAbort && onAbort(err);
  };
  var lastRouteIndex = route.matched.length - 1;
  var lastCurrentIndex = current.matched.length - 1;
  if (
    isSameRoute(route, current) &&
    // in the case the route map has been dynamically appended to
    lastRouteIndex === lastCurrentIndex &&
    route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]
  ) {
    this.ensureURL();
    return abort(createNavigationDuplicatedError(current, route))
  }

  var ref = resolveQueue(
    this.current.matched,
    route.matched
  );
    var updated = ref.updated;
    var deactivated = ref.deactivated;
    var activated = ref.activated;

  var queue = [].concat(
    // in-component leave guards
    extractLeaveGuards(deactivated),
    // global before hooks
    this.router.beforeHooks,
    // in-component update hooks
    extractUpdateHooks(updated),
    // in-config enter guards
    activated.map(function (m) { return m.beforeEnter; }),
    // async components
    resolveAsyncComponents(activated)
  );

  var iterator = function (hook, next) {
    if (this$1.pending !== route) {
      return abort(createNavigationCancelledError(current, route))
    }
    try {
      hook(route, current, function (to) {
        if (to === false) {
          // next(false) -> abort navigation, ensure current URL
          this$1.ensureURL(true);
          abort(createNavigationAbortedError(current, route));
        } else if (isError(to)) {
          this$1.ensureURL(true);
          abort(to);
        } else if (
          typeof to === 'string' ||
          (typeof to === 'object' &&
            (typeof to.path === 'string' || typeof to.name === 'string'))
        ) {
          // next('/') or next({ path: '/' }) -> redirect
          abort(createNavigationRedirectedError(current, route));
          if (typeof to === 'object' && to.replace) {
            this$1.replace(to);
          } else {
            this$1.push(to);
          }
        } else {
          // confirm transition and pass on the value
          next(to);
        }
      });
    } catch (e) {
      abort(e);
    }
  };

  runQueue(queue, iterator, function () {
    // wait until async components are resolved before
    // extracting in-component enter guards
    var enterGuards = extractEnterGuards(activated);
    var queue = enterGuards.concat(this$1.router.resolveHooks);
    runQueue(queue, iterator, function () {
      if (this$1.pending !== route) {
        return abort(createNavigationCancelledError(current, route))
      }
      this$1.pending = null;
      onComplete(route);
      if (this$1.router.app) {
        this$1.router.app.$nextTick(function () {
          handleRouteEntered(route);
        });
      }
    });
  });
};

History.prototype.updateRoute = function updateRoute (route) {
  this.current = route;
  this.cb && this.cb(route);
};

History.prototype.setupListeners = function setupListeners () {
  // Default implementation is empty
};

History.prototype.teardown = function teardown () {
  // clean up event listeners
  // https://github.com/vuejs/vue-router/issues/2341
  this.listeners.forEach(function (cleanupListener) {
    cleanupListener();
  });
  this.listeners = [];

  // reset current history route
  // https://github.com/vuejs/vue-router/issues/3294
  this.current = START;
  this.pending = null;
};

function normalizeBase (base) {
  if (!base) {
    if (inBrowser) {
      // respect <base> tag
      var baseEl = document.querySelector('base');
      base = (baseEl && baseEl.getAttribute('href')) || '/';
      // strip full URL origin
      base = base.replace(/^https?:\/\/[^\/]+/, '');
    } else {
      base = '/';
    }
  }
  // make sure there's the starting slash
  if (base.charAt(0) !== '/') {
    base = '/' + base;
  }
  // remove trailing slash
  return base.replace(/\/$/, '')
}

function resolveQueue (
  current,
  next
) {
  var i;
  var max = Math.max(current.length, next.length);
  for (i = 0; i < max; i++) {
    if (current[i] !== next[i]) {
      break
    }
  }
  return {
    updated: next.slice(0, i),
    activated: next.slice(i),
    deactivated: current.slice(i)
  }
}

function extractGuards (
  records,
  name,
  bind,
  reverse
) {
  var guards = flatMapComponents(records, function (def, instance, match, key) {
    var guard = extractGuard(def, name);
    if (guard) {
      return Array.isArray(guard)
        ? guard.map(function (guard) { return bind(guard, instance, match, key); })
        : bind(guard, instance, match, key)
    }
  });
  return flatten(reverse ? guards.reverse() : guards)
}

function extractGuard (
  def,
  key
) {
  if (typeof def !== 'function') {
    // extend now so that global mixins are applied.
    def = _Vue.extend(def);
  }
  return def.options[key]
}

function extractLeaveGuards (deactivated) {
  return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)
}

function extractUpdateHooks (updated) {
  return extractGuards(updated, 'beforeRouteUpdate', bindGuard)
}

function bindGuard (guard, instance) {
  if (instance) {
    return function boundRouteGuard () {
      return guard.apply(instance, arguments)
    }
  }
}

function extractEnterGuards (
  activated
) {
  return extractGuards(
    activated,
    'beforeRouteEnter',
    function (guard, _, match, key) {
      return bindEnterGuard(guard, match, key)
    }
  )
}

function bindEnterGuard (
  guard,
  match,
  key
) {
  return function routeEnterGuard (to, from, next) {
    return guard(to, from, function (cb) {
      if (typeof cb === 'function') {
        if (!match.enteredCbs[key]) {
          match.enteredCbs[key] = [];
        }
        match.enteredCbs[key].push(cb);
      }
      next(cb);
    })
  }
}

/*  */

var HTML5History = /*@__PURE__*/(function (History) {
  function HTML5History (router, base) {
    History.call(this, router, base);

    this._startLocation = getLocation(this.base);
  }

  if ( History ) HTML5History.__proto__ = History;
  HTML5History.prototype = Object.create( History && History.prototype );
  HTML5History.prototype.constructor = HTML5History;

  HTML5History.prototype.setupListeners = function setupListeners () {
    var this$1 = this;

    if (this.listeners.length > 0) {
      return
    }

    var router = this.router;
    var expectScroll = router.options.scrollBehavior;
    var supportsScroll = supportsPushState && expectScroll;

    if (supportsScroll) {
      this.listeners.push(setupScroll());
    }

    var handleRoutingEvent = function () {
      var current = this$1.current;

      // Avoiding first `popstate` event dispatched in some browsers but first
      // history route not updated since async guard at the same time.
      var location = getLocation(this$1.base);
      if (this$1.current === START && location === this$1._startLocation) {
        return
      }

      this$1.transitionTo(location, function (route) {
        if (supportsScroll) {
          handleScroll(router, route, current, true);
        }
      });
    };
    window.addEventListener('popstate', handleRoutingEvent);
    this.listeners.push(function () {
      window.removeEventListener('popstate', handleRoutingEvent);
    });
  };

  HTML5History.prototype.go = function go (n) {
    window.history.go(n);
  };

  HTML5History.prototype.push = function push (location, onComplete, onAbort) {
    var this$1 = this;

    var ref = this;
    var fromRoute = ref.current;
    this.transitionTo(location, function (route) {
      pushState(cleanPath(this$1.base + route.fullPath));
      handleScroll(this$1.router, route, fromRoute, false);
      onComplete && onComplete(route);
    }, onAbort);
  };

  HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {
    var this$1 = this;

    var ref = this;
    var fromRoute = ref.current;
    this.transitionTo(location, function (route) {
      replaceState(cleanPath(this$1.base + route.fullPath));
      handleScroll(this$1.router, route, fromRoute, false);
      onComplete && onComplete(route);
    }, onAbort);
  };

  HTML5History.prototype.ensureURL = function ensureURL (push) {
    if (getLocation(this.base) !== this.current.fullPath) {
      var current = cleanPath(this.base + this.current.fullPath);
      push ? pushState(current) : replaceState(current);
    }
  };

  HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {
    return getLocation(this.base)
  };

  return HTML5History;
}(History));

function getLocation (base) {
  var path = window.location.pathname;
  if (base && path.toLowerCase().indexOf(base.toLowerCase()) === 0) {
    path = path.slice(base.length);
  }
  return (path || '/') + window.location.search + window.location.hash
}

/*  */

var HashHistory = /*@__PURE__*/(function (History) {
  function HashHistory (router, base, fallback) {
    History.call(this, router, base);
    // check history fallback deeplinking
    if (fallback && checkFallback(this.base)) {
      return
    }
    ensureSlash();
  }

  if ( History ) HashHistory.__proto__ = History;
  HashHistory.prototype = Object.create( History && History.prototype );
  HashHistory.prototype.constructor = HashHistory;

  // this is delayed until the app mounts
  // to avoid the hashchange listener being fired too early
  HashHistory.prototype.setupListeners = function setupListeners () {
    var this$1 = this;

    if (this.listeners.length > 0) {
      return
    }

    var router = this.router;
    var expectScroll = router.options.scrollBehavior;
    var supportsScroll = supportsPushState && expectScroll;

    if (supportsScroll) {
      this.listeners.push(setupScroll());
    }

    var handleRoutingEvent = function () {
      var current = this$1.current;
      if (!ensureSlash()) {
        return
      }
      this$1.transitionTo(getHash(), function (route) {
        if (supportsScroll) {
          handleScroll(this$1.router, route, current, true);
        }
        if (!supportsPushState) {
          replaceHash(route.fullPath);
        }
      });
    };
    var eventType = supportsPushState ? 'popstate' : 'hashchange';
    window.addEventListener(
      eventType,
      handleRoutingEvent
    );
    this.listeners.push(function () {
      window.removeEventListener(eventType, handleRoutingEvent);
    });
  };

  HashHistory.prototype.push = function push (location, onComplete, onAbort) {
    var this$1 = this;

    var ref = this;
    var fromRoute = ref.current;
    this.transitionTo(
      location,
      function (route) {
        pushHash(route.fullPath);
        handleScroll(this$1.router, route, fromRoute, false);
        onComplete && onComplete(route);
      },
      onAbort
    );
  };

  HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {
    var this$1 = this;

    var ref = this;
    var fromRoute = ref.current;
    this.transitionTo(
      location,
      function (route) {
        replaceHash(route.fullPath);
        handleScroll(this$1.router, route, fromRoute, false);
        onComplete && onComplete(route);
      },
      onAbort
    );
  };

  HashHistory.prototype.go = function go (n) {
    window.history.go(n);
  };

  HashHistory.prototype.ensureURL = function ensureURL (push) {
    var current = this.current.fullPath;
    if (getHash() !== current) {
      push ? pushHash(current) : replaceHash(current);
    }
  };

  HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {
    return getHash()
  };

  return HashHistory;
}(History));

function checkFallback (base) {
  var location = getLocation(base);
  if (!/^\/#/.test(location)) {
    window.location.replace(cleanPath(base + '/#' + location));
    return true
  }
}

function ensureSlash () {
  var path = getHash();
  if (path.charAt(0) === '/') {
    return true
  }
  replaceHash('/' + path);
  return false
}

function getHash () {
  // We can't use window.location.hash here because it's not
  // consistent across browsers - Firefox will pre-decode it!
  var href = window.location.href;
  var index = href.indexOf('#');
  // empty path
  if (index < 0) { return '' }

  href = href.slice(index + 1);

  return href
}

function getUrl (path) {
  var href = window.location.href;
  var i = href.indexOf('#');
  var base = i >= 0 ? href.slice(0, i) : href;
  return (base + "#" + path)
}

function pushHash (path) {
  if (supportsPushState) {
    pushState(getUrl(path));
  } else {
    window.location.hash = path;
  }
}

function replaceHash (path) {
  if (supportsPushState) {
    replaceState(getUrl(path));
  } else {
    window.location.replace(getUrl(path));
  }
}

/*  */

var AbstractHistory = /*@__PURE__*/(function (History) {
  function AbstractHistory (router, base) {
    History.call(this, router, base);
    this.stack = [];
    this.index = -1;
  }

  if ( History ) AbstractHistory.__proto__ = History;
  AbstractHistory.prototype = Object.create( History && History.prototype );
  AbstractHistory.prototype.constructor = AbstractHistory;

  AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {
    var this$1 = this;

    this.transitionTo(
      location,
      function (route) {
        this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);
        this$1.index++;
        onComplete && onComplete(route);
      },
      onAbort
    );
  };

  AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {
    var this$1 = this;

    this.transitionTo(
      location,
      function (route) {
        this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);
        onComplete && onComplete(route);
      },
      onAbort
    );
  };

  AbstractHistory.prototype.go = function go (n) {
    var this$1 = this;

    var targetIndex = this.index + n;
    if (targetIndex < 0 || targetIndex >= this.stack.length) {
      return
    }
    var route = this.stack[targetIndex];
    this.confirmTransition(
      route,
      function () {
        var prev = this$1.current;
        this$1.index = targetIndex;
        this$1.updateRoute(route);
        this$1.router.afterHooks.forEach(function (hook) {
          hook && hook(route, prev);
        });
      },
      function (err) {
        if (isNavigationFailure(err, NavigationFailureType.duplicated)) {
          this$1.index = targetIndex;
        }
      }
    );
  };

  AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {
    var current = this.stack[this.stack.length - 1];
    return current ? current.fullPath : '/'
  };

  AbstractHistory.prototype.ensureURL = function ensureURL () {
    // noop
  };

  return AbstractHistory;
}(History));

/*  */

var VueRouter = function VueRouter (options) {
  if ( options === void 0 ) options = {};

  this.app = null;
  this.apps = [];
  this.options = options;
  this.beforeHooks = [];
  this.resolveHooks = [];
  this.afterHooks = [];
  this.matcher = createMatcher(options.routes || [], this);

  var mode = options.mode || 'hash';
  this.fallback =
    mode === 'history' && !supportsPushState && options.fallback !== false;
  if (this.fallback) {
    mode = 'hash';
  }
  if (!inBrowser) {
    mode = 'abstract';
  }
  this.mode = mode;

  switch (mode) {
    case 'history':
      this.history = new HTML5History(this, options.base);
      break
    case 'hash':
      this.history = new HashHistory(this, options.base, this.fallback);
      break
    case 'abstract':
      this.history = new AbstractHistory(this, options.base);
      break
    default:
      if (process.env.NODE_ENV !== 'production') {
        assert(false, ("invalid mode: " + mode));
      }
  }
};

var prototypeAccessors = { currentRoute: { configurable: true } };

VueRouter.prototype.match = function match (raw, current, redirectedFrom) {
  return this.matcher.match(raw, current, redirectedFrom)
};

prototypeAccessors.currentRoute.get = function () {
  return this.history && this.history.current
};

VueRouter.prototype.init = function init (app /* Vue component instance */) {
    var this$1 = this;

  process.env.NODE_ENV !== 'production' &&
    assert(
      install.installed,
      "not installed. Make sure to call `Vue.use(VueRouter)` " +
        "before creating root instance."
    );

  this.apps.push(app);

  // set up app destroyed handler
  // https://github.com/vuejs/vue-router/issues/2639
  app.$once('hook:destroyed', function () {
    // clean out app from this.apps array once destroyed
    var index = this$1.apps.indexOf(app);
    if (index > -1) { this$1.apps.splice(index, 1); }
    // ensure we still have a main app or null if no apps
    // we do not release the router so it can be reused
    if (this$1.app === app) { this$1.app = this$1.apps[0] || null; }

    if (!this$1.app) { this$1.history.teardown(); }
  });

  // main app previously initialized
  // return as we don't need to set up new history listener
  if (this.app) {
    return
  }

  this.app = app;

  var history = this.history;

  if (history instanceof HTML5History || history instanceof HashHistory) {
    var handleInitialScroll = function (routeOrError) {
      var from = history.current;
      var expectScroll = this$1.options.scrollBehavior;
      var supportsScroll = supportsPushState && expectScroll;

      if (supportsScroll && 'fullPath' in routeOrError) {
        handleScroll(this$1, routeOrError, from, false);
      }
    };
    var setupListeners = function (routeOrError) {
      history.setupListeners();
      handleInitialScroll(routeOrError);
    };
    history.transitionTo(
      history.getCurrentLocation(),
      setupListeners,
      setupListeners
    );
  }

  history.listen(function (route) {
    this$1.apps.forEach(function (app) {
      app._route = route;
    });
  });
};

VueRouter.prototype.beforeEach = function beforeEach (fn) {
  return registerHook(this.beforeHooks, fn)
};

VueRouter.prototype.beforeResolve = function beforeResolve (fn) {
  return registerHook(this.resolveHooks, fn)
};

VueRouter.prototype.afterEach = function afterEach (fn) {
  return registerHook(this.afterHooks, fn)
};

VueRouter.prototype.onReady = function onReady (cb, errorCb) {
  this.history.onReady(cb, errorCb);
};

VueRouter.prototype.onError = function onError (errorCb) {
  this.history.onError(errorCb);
};

VueRouter.prototype.push = function push (location, onComplete, onAbort) {
    var this$1 = this;

  // $flow-disable-line
  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
    return new Promise(function (resolve, reject) {
      this$1.history.push(location, resolve, reject);
    })
  } else {
    this.history.push(location, onComplete, onAbort);
  }
};

VueRouter.prototype.replace = function replace (location, onComplete, onAbort) {
    var this$1 = this;

  // $flow-disable-line
  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
    return new Promise(function (resolve, reject) {
      this$1.history.replace(location, resolve, reject);
    })
  } else {
    this.history.replace(location, onComplete, onAbort);
  }
};

VueRouter.prototype.go = function go (n) {
  this.history.go(n);
};

VueRouter.prototype.back = function back () {
  this.go(-1);
};

VueRouter.prototype.forward = function forward () {
  this.go(1);
};

VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {
  var route = to
    ? to.matched
      ? to
      : this.resolve(to).route
    : this.currentRoute;
  if (!route) {
    return []
  }
  return [].concat.apply(
    [],
    route.matched.map(function (m) {
      return Object.keys(m.components).map(function (key) {
        return m.components[key]
      })
    })
  )
};

VueRouter.prototype.resolve = function resolve (
  to,
  current,
  append
) {
  current = current || this.history.current;
  var location = normalizeLocation(to, current, append, this);
  var route = this.match(location, current);
  var fullPath = route.redirectedFrom || route.fullPath;
  var base = this.history.base;
  var href = createHref(base, fullPath, this.mode);
  return {
    location: location,
    route: route,
    href: href,
    // for backwards compat
    normalizedTo: location,
    resolved: route
  }
};

VueRouter.prototype.getRoutes = function getRoutes () {
  return this.matcher.getRoutes()
};

VueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {
  this.matcher.addRoute(parentOrRoute, route);
  if (this.history.current !== START) {
    this.history.transitionTo(this.history.getCurrentLocation());
  }
};

VueRouter.prototype.addRoutes = function addRoutes (routes) {
  if (process.env.NODE_ENV !== 'production') {
    warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');
  }
  this.matcher.addRoutes(routes);
  if (this.history.current !== START) {
    this.history.transitionTo(this.history.getCurrentLocation());
  }
};

Object.defineProperties( VueRouter.prototype, prototypeAccessors );

function registerHook (list, fn) {
  list.push(fn);
  return function () {
    var i = list.indexOf(fn);
    if (i > -1) { list.splice(i, 1); }
  }
}

function createHref (base, fullPath, mode) {
  var path = mode === 'hash' ? '#' + fullPath : fullPath;
  return base ? cleanPath(base + '/' + path) : path
}

VueRouter.install = install;
VueRouter.version = '3.5.1';
VueRouter.isNavigationFailure = isNavigationFailure;
VueRouter.NavigationFailureType = NavigationFailureType;
VueRouter.START_LOCATION = START;

if (inBrowser && window.Vue) {
  window.Vue.use(VueRouter);
}

module.exports = VueRouter;
/*!
  * vue-router v3.5.1
  * (c) 2021 Evan You
  * @license MIT
  */
/*  */

function assert (condition, message) {
  if (!condition) {
    throw new Error(`[vue-router] ${message}`)
  }
}

function warn (condition, message) {
  if ( !condition) {
    typeof console !== 'undefined' && console.warn(`[vue-router] ${message}`);
  }
}

function extend (a, b) {
  for (const key in b) {
    a[key] = b[key];
  }
  return a
}

/*  */

const encodeReserveRE = /[!'()*]/g;
const encodeReserveReplacer = c => '%' + c.charCodeAt(0).toString(16);
const commaRE = /%2C/g;

// fixed encodeURIComponent which is more conformant to RFC3986:
// - escapes [!'()*]
// - preserve commas
const encode = str =>
  encodeURIComponent(str)
    .replace(encodeReserveRE, encodeReserveReplacer)
    .replace(commaRE, ',');

function decode (str) {
  try {
    return decodeURIComponent(str)
  } catch (err) {
    {
      warn(false, `Error decoding "${str}". Leaving it intact.`);
    }
  }
  return str
}

function resolveQuery (
  query,
  extraQuery = {},
  _parseQuery
) {
  const parse = _parseQuery || parseQuery;
  let parsedQuery;
  try {
    parsedQuery = parse(query || '');
  } catch (e) {
     warn(false, e.message);
    parsedQuery = {};
  }
  for (const key in extraQuery) {
    const value = extraQuery[key];
    parsedQuery[key] = Array.isArray(value)
      ? value.map(castQueryParamValue)
      : castQueryParamValue(value);
  }
  return parsedQuery
}

const castQueryParamValue = value => (value == null || typeof value === 'object' ? value : String(value));

function parseQuery (query) {
  const res = {};

  query = query.trim().replace(/^(\?|#|&)/, '');

  if (!query) {
    return res
  }

  query.split('&').forEach(param => {
    const parts = param.replace(/\+/g, ' ').split('=');
    const key = decode(parts.shift());
    const val = parts.length > 0 ? decode(parts.join('=')) : null;

    if (res[key] === undefined) {
      res[key] = val;
    } else if (Array.isArray(res[key])) {
      res[key].push(val);
    } else {
      res[key] = [res[key], val];
    }
  });

  return res
}

function stringifyQuery (obj) {
  const res = obj
    ? Object.keys(obj)
      .map(key => {
        const val = obj[key];

        if (val === undefined) {
          return ''
        }

        if (val === null) {
          return encode(key)
        }

        if (Array.isArray(val)) {
          const result = [];
          val.forEach(val2 => {
            if (val2 === undefined) {
              return
            }
            if (val2 === null) {
              result.push(encode(key));
            } else {
              result.push(encode(key) + '=' + encode(val2));
            }
          });
          return result.join('&')
        }

        return encode(key) + '=' + encode(val)
      })
      .filter(x => x.length > 0)
      .join('&')
    : null;
  return res ? `?${res}` : ''
}

/*  */

const trailingSlashRE = /\/?$/;

function createRoute (
  record,
  location,
  redirectedFrom,
  router
) {
  const stringifyQuery = router && router.options.stringifyQuery;

  let query = location.query || {};
  try {
    query = clone(query);
  } catch (e) {}

  const route = {
    name: location.name || (record && record.name),
    meta: (record && record.meta) || {},
    path: location.path || '/',
    hash: location.hash || '',
    query,
    params: location.params || {},
    fullPath: getFullPath(location, stringifyQuery),
    matched: record ? formatMatch(record) : []
  };
  if (redirectedFrom) {
    route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);
  }
  return Object.freeze(route)
}

function clone (value) {
  if (Array.isArray(value)) {
    return value.map(clone)
  } else if (value && typeof value === 'object') {
    const res = {};
    for (const key in value) {
      res[key] = clone(value[key]);
    }
    return res
  } else {
    return value
  }
}

// the starting route that represents the initial state
const START = createRoute(null, {
  path: '/'
});

function formatMatch (record) {
  const res = [];
  while (record) {
    res.unshift(record);
    record = record.parent;
  }
  return res
}

function getFullPath (
  { path, query = {}, hash = '' },
  _stringifyQuery
) {
  const stringify = _stringifyQuery || stringifyQuery;
  return (path || '/') + stringify(query) + hash
}

function isSameRoute (a, b, onlyPath) {
  if (b === START) {
    return a === b
  } else if (!b) {
    return false
  } else if (a.path && b.path) {
    return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||
      a.hash === b.hash &&
      isObjectEqual(a.query, b.query))
  } else if (a.name && b.name) {
    return (
      a.name === b.name &&
      (onlyPath || (
        a.hash === b.hash &&
      isObjectEqual(a.query, b.query) &&
      isObjectEqual(a.params, b.params))
      )
    )
  } else {
    return false
  }
}

function isObjectEqual (a = {}, b = {}) {
  // handle null value #1566
  if (!a || !b) return a === b
  const aKeys = Object.keys(a).sort();
  const bKeys = Object.keys(b).sort();
  if (aKeys.length !== bKeys.length) {
    return false
  }
  return aKeys.every((key, i) => {
    const aVal = a[key];
    const bKey = bKeys[i];
    if (bKey !== key) return false
    const bVal = b[key];
    // query values can be null and undefined
    if (aVal == null || bVal == null) return aVal === bVal
    // check nested equality
    if (typeof aVal === 'object' && typeof bVal === 'object') {
      return isObjectEqual(aVal, bVal)
    }
    return String(aVal) === String(bVal)
  })
}

function isIncludedRoute (current, target) {
  return (
    current.path.replace(trailingSlashRE, '/').indexOf(
      target.path.replace(trailingSlashRE, '/')
    ) === 0 &&
    (!target.hash || current.hash === target.hash) &&
    queryIncludes(current.query, target.query)
  )
}

function queryIncludes (current, target) {
  for (const key in target) {
    if (!(key in current)) {
      return false
    }
  }
  return true
}

function handleRouteEntered (route) {
  for (let i = 0; i < route.matched.length; i++) {
    const record = route.matched[i];
    for (const name in record.instances) {
      const instance = record.instances[name];
      const cbs = record.enteredCbs[name];
      if (!instance || !cbs) continue
      delete record.enteredCbs[name];
      for (let i = 0; i < cbs.length; i++) {
        if (!instance._isBeingDestroyed) cbs[i](instance);
      }
    }
  }
}

var View = {
  name: 'RouterView',
  functional: true,
  props: {
    name: {
      type: String,
      default: 'default'
    }
  },
  render (_, { props, children, parent, data }) {
    // used by devtools to display a router-view badge
    data.routerView = true;

    // directly use parent context's createElement() function
    // so that components rendered by router-view can resolve named slots
    const h = parent.$createElement;
    const name = props.name;
    const route = parent.$route;
    const cache = parent._routerViewCache || (parent._routerViewCache = {});

    // determine current view depth, also check to see if the tree
    // has been toggled inactive but kept-alive.
    let depth = 0;
    let inactive = false;
    while (parent && parent._routerRoot !== parent) {
      const vnodeData = parent.$vnode ? parent.$vnode.data : {};
      if (vnodeData.routerView) {
        depth++;
      }
      if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {
        inactive = true;
      }
      parent = parent.$parent;
    }
    data.routerViewDepth = depth;

    // render previous view if the tree is inactive and kept-alive
    if (inactive) {
      const cachedData = cache[name];
      const cachedComponent = cachedData && cachedData.component;
      if (cachedComponent) {
        // #2301
        // pass props
        if (cachedData.configProps) {
          fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);
        }
        return h(cachedComponent, data, children)
      } else {
        // render previous empty view
        return h()
      }
    }

    const matched = route.matched[depth];
    const component = matched && matched.components[name];

    // render empty node if no matched route or no config component
    if (!matched || !component) {
      cache[name] = null;
      return h()
    }

    // cache component
    cache[name] = { component };

    // attach instance registration hook
    // this will be called in the instance's injected lifecycle hooks
    data.registerRouteInstance = (vm, val) => {
      // val could be undefined for unregistration
      const current = matched.instances[name];
      if (
        (val && current !== vm) ||
        (!val && current === vm)
      ) {
        matched.instances[name] = val;
      }
    }

    // also register instance in prepatch hook
    // in case the same component instance is reused across different routes
    ;(data.hook || (data.hook = {})).prepatch = (_, vnode) => {
      matched.instances[name] = vnode.componentInstance;
    };

    // register instance in init hook
    // in case kept-alive component be actived when routes changed
    data.hook.init = (vnode) => {
      if (vnode.data.keepAlive &&
        vnode.componentInstance &&
        vnode.componentInstance !== matched.instances[name]
      ) {
        matched.instances[name] = vnode.componentInstance;
      }

      // if the route transition has already been confirmed then we weren't
      // able to call the cbs during confirmation as the component was not
      // registered yet, so we call it here.
      handleRouteEntered(route);
    };

    const configProps = matched.props && matched.props[name];
    // save route and configProps in cache
    if (configProps) {
      extend(cache[name], {
        route,
        configProps
      });
      fillPropsinData(component, data, route, configProps);
    }

    return h(component, data, children)
  }
};

function fillPropsinData (component, data, route, configProps) {
  // resolve props
  let propsToPass = data.props = resolveProps(route, configProps);
  if (propsToPass) {
    // clone to prevent mutation
    propsToPass = data.props = extend({}, propsToPass);
    // pass non-declared props as attrs
    const attrs = data.attrs = data.attrs || {};
    for (const key in propsToPass) {
      if (!component.props || !(key in component.props)) {
        attrs[key] = propsToPass[key];
        delete propsToPass[key];
      }
    }
  }
}

function resolveProps (route, config) {
  switch (typeof config) {
    case 'undefined':
      return
    case 'object':
      return config
    case 'function':
      return config(route)
    case 'boolean':
      return config ? route.params : undefined
    default:
      {
        warn(
          false,
          `props in "${route.path}" is a ${typeof config}, ` +
          `expecting an object, function or boolean.`
        );
      }
  }
}

/*  */

function resolvePath (
  relative,
  base,
  append
) {
  const firstChar = relative.charAt(0);
  if (firstChar === '/') {
    return relative
  }

  if (firstChar === '?' || firstChar === '#') {
    return base + relative
  }

  const stack = base.split('/');

  // remove trailing segment if:
  // - not appending
  // - appending to trailing slash (last segment is empty)
  if (!append || !stack[stack.length - 1]) {
    stack.pop();
  }

  // resolve relative path
  const segments = relative.replace(/^\//, '').split('/');
  for (let i = 0; i < segments.length; i++) {
    const segment = segments[i];
    if (segment === '..') {
      stack.pop();
    } else if (segment !== '.') {
      stack.push(segment);
    }
  }

  // ensure leading slash
  if (stack[0] !== '') {
    stack.unshift('');
  }

  return stack.join('/')
}

function parsePath (path) {
  let hash = '';
  let query = '';

  const hashIndex = path.indexOf('#');
  if (hashIndex >= 0) {
    hash = path.slice(hashIndex);
    path = path.slice(0, hashIndex);
  }

  const queryIndex = path.indexOf('?');
  if (queryIndex >= 0) {
    query = path.slice(queryIndex + 1);
    path = path.slice(0, queryIndex);
  }

  return {
    path,
    query,
    hash
  }
}

function cleanPath (path) {
  return path.replace(/\/\//g, '/')
}

var isarray = Array.isArray || function (arr) {
  return Object.prototype.toString.call(arr) == '[object Array]';
};

/**
 * Expose `pathToRegexp`.
 */
var pathToRegexp_1 = pathToRegexp;
var parse_1 = parse;
var compile_1 = compile;
var tokensToFunction_1 = tokensToFunction;
var tokensToRegExp_1 = tokensToRegExp;

/**
 * The main path matching regexp utility.
 *
 * @type {RegExp}
 */
var PATH_REGEXP = new RegExp([
  // Match escaped characters that would otherwise appear in future matches.
  // This allows the user to escape special characters that won't transform.
  '(\\\\.)',
  // Match Express-style parameters and un-named parameters with a prefix
  // and optional suffixes. Matches appear as:
  //
  // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
  // "/route(\\d+)"  => [undefined, undefined, undefined, "\d+", undefined, undefined]
  // "/*"            => ["/", undefined, undefined, undefined, undefined, "*"]
  '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
].join('|'), 'g');

/**
 * Parse a string for the raw tokens.
 *
 * @param  {string}  str
 * @param  {Object=} options
 * @return {!Array}
 */
function parse (str, options) {
  var tokens = [];
  var key = 0;
  var index = 0;
  var path = '';
  var defaultDelimiter = options && options.delimiter || '/';
  var res;

  while ((res = PATH_REGEXP.exec(str)) != null) {
    var m = res[0];
    var escaped = res[1];
    var offset = res.index;
    path += str.slice(index, offset);
    index = offset + m.length;

    // Ignore already escaped sequences.
    if (escaped) {
      path += escaped[1];
      continue
    }

    var next = str[index];
    var prefix = res[2];
    var name = res[3];
    var capture = res[4];
    var group = res[5];
    var modifier = res[6];
    var asterisk = res[7];

    // Push the current path onto the tokens.
    if (path) {
      tokens.push(path);
      path = '';
    }

    var partial = prefix != null && next != null && next !== prefix;
    var repeat = modifier === '+' || modifier === '*';
    var optional = modifier === '?' || modifier === '*';
    var delimiter = res[2] || defaultDelimiter;
    var pattern = capture || group;

    tokens.push({
      name: name || key++,
      prefix: prefix || '',
      delimiter: delimiter,
      optional: optional,
      repeat: repeat,
      partial: partial,
      asterisk: !!asterisk,
      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
    });
  }

  // Match any characters still remaining.
  if (index < str.length) {
    path += str.substr(index);
  }

  // If the path exists, push it onto the end.
  if (path) {
    tokens.push(path);
  }

  return tokens
}

/**
 * Compile a string to a template function for the path.
 *
 * @param  {string}             str
 * @param  {Object=}            options
 * @return {!function(Object=, Object=)}
 */
function compile (str, options) {
  return tokensToFunction(parse(str, options), options)
}

/**
 * Prettier encoding of URI path segments.
 *
 * @param  {string}
 * @return {string}
 */
function encodeURIComponentPretty (str) {
  return encodeURI(str).replace(/[\/?#]/g, function (c) {
    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  })
}

/**
 * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
 *
 * @param  {string}
 * @return {string}
 */
function encodeAsterisk (str) {
  return encodeURI(str).replace(/[?#]/g, function (c) {
    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  })
}

/**
 * Expose a method for transforming tokens into the path function.
 */
function tokensToFunction (tokens, options) {
  // Compile all the tokens into regexps.
  var matches = new Array(tokens.length);

  // Compile all the patterns before compilation.
  for (var i = 0; i < tokens.length; i++) {
    if (typeof tokens[i] === 'object') {
      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));
    }
  }

  return function (obj, opts) {
    var path = '';
    var data = obj || {};
    var options = opts || {};
    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;

    for (var i = 0; i < tokens.length; i++) {
      var token = tokens[i];

      if (typeof token === 'string') {
        path += token;

        continue
      }

      var value = data[token.name];
      var segment;

      if (value == null) {
        if (token.optional) {
          // Prepend partial segment prefixes.
          if (token.partial) {
            path += token.prefix;
          }

          continue
        } else {
          throw new TypeError('Expected "' + token.name + '" to be defined')
        }
      }

      if (isarray(value)) {
        if (!token.repeat) {
          throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
        }

        if (value.length === 0) {
          if (token.optional) {
            continue
          } else {
            throw new TypeError('Expected "' + token.name + '" to not be empty')
          }
        }

        for (var j = 0; j < value.length; j++) {
          segment = encode(value[j]);

          if (!matches[i].test(segment)) {
            throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
          }

          path += (j === 0 ? token.prefix : token.delimiter) + segment;
        }

        continue
      }

      segment = token.asterisk ? encodeAsterisk(value) : encode(value);

      if (!matches[i].test(segment)) {
        throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
      }

      path += token.prefix + segment;
    }

    return path
  }
}

/**
 * Escape a regular expression string.
 *
 * @param  {string} str
 * @return {string}
 */
function escapeString (str) {
  return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1')
}

/**
 * Escape the capturing group by escaping special characters and meaning.
 *
 * @param  {string} group
 * @return {string}
 */
function escapeGroup (group) {
  return group.replace(/([=!:$\/()])/g, '\\$1')
}

/**
 * Attach the keys as a property of the regexp.
 *
 * @param  {!RegExp} re
 * @param  {Array}   keys
 * @return {!RegExp}
 */
function attachKeys (re, keys) {
  re.keys = keys;
  return re
}

/**
 * Get the flags for a regexp from the options.
 *
 * @param  {Object} options
 * @return {string}
 */
function flags (options) {
  return options && options.sensitive ? '' : 'i'
}

/**
 * Pull out keys from a regexp.
 *
 * @param  {!RegExp} path
 * @param  {!Array}  keys
 * @return {!RegExp}
 */
function regexpToRegexp (path, keys) {
  // Use a negative lookahead to match only capturing groups.
  var groups = path.source.match(/\((?!\?)/g);

  if (groups) {
    for (var i = 0; i < groups.length; i++) {
      keys.push({
        name: i,
        prefix: null,
        delimiter: null,
        optional: false,
        repeat: false,
        partial: false,
        asterisk: false,
        pattern: null
      });
    }
  }

  return attachKeys(path, keys)
}

/**
 * Transform an array into a regexp.
 *
 * @param  {!Array}  path
 * @param  {Array}   keys
 * @param  {!Object} options
 * @return {!RegExp}
 */
function arrayToRegexp (path, keys, options) {
  var parts = [];

  for (var i = 0; i < path.length; i++) {
    parts.push(pathToRegexp(path[i], keys, options).source);
  }

  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));

  return attachKeys(regexp, keys)
}

/**
 * Create a path regexp from string input.
 *
 * @param  {string}  path
 * @param  {!Array}  keys
 * @param  {!Object} options
 * @return {!RegExp}
 */
function stringToRegexp (path, keys, options) {
  return tokensToRegExp(parse(path, options), keys, options)
}

/**
 * Expose a function for taking tokens and returning a RegExp.
 *
 * @param  {!Array}          tokens
 * @param  {(Array|Object)=} keys
 * @param  {Object=}         options
 * @return {!RegExp}
 */
function tokensToRegExp (tokens, keys, options) {
  if (!isarray(keys)) {
    options = /** @type {!Object} */ (keys || options);
    keys = [];
  }

  options = options || {};

  var strict = options.strict;
  var end = options.end !== false;
  var route = '';

  // Iterate over the tokens and create our regexp string.
  for (var i = 0; i < tokens.length; i++) {
    var token = tokens[i];

    if (typeof token === 'string') {
      route += escapeString(token);
    } else {
      var prefix = escapeString(token.prefix);
      var capture = '(?:' + token.pattern + ')';

      keys.push(token);

      if (token.repeat) {
        capture += '(?:' + prefix + capture + ')*';
      }

      if (token.optional) {
        if (!token.partial) {
          capture = '(?:' + prefix + '(' + capture + '))?';
        } else {
          capture = prefix + '(' + capture + ')?';
        }
      } else {
        capture = prefix + '(' + capture + ')';
      }

      route += capture;
    }
  }

  var delimiter = escapeString(options.delimiter || '/');
  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;

  // In non-strict mode we allow a slash at the end of match. If the path to
  // match already ends with a slash, we remove it for consistency. The slash
  // is valid at the end of a path match, not in the middle. This is important
  // in non-ending mode, where "/test/" shouldn't match "/test//route".
  if (!strict) {
    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';
  }

  if (end) {
    route += '$';
  } else {
    // In non-ending mode, we need the capturing groups to match as much as
    // possible by using a positive lookahead to the end or next path segment.
    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';
  }

  return attachKeys(new RegExp('^' + route, flags(options)), keys)
}

/**
 * Normalize the given path string, returning a regular expression.
 *
 * An empty array can be passed in for the keys, which will hold the
 * placeholder key descriptions. For example, using `/user/:id`, `keys` will
 * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
 *
 * @param  {(string|RegExp|Array)} path
 * @param  {(Array|Object)=}       keys
 * @param  {Object=}               options
 * @return {!RegExp}
 */
function pathToRegexp (path, keys, options) {
  if (!isarray(keys)) {
    options = /** @type {!Object} */ (keys || options);
    keys = [];
  }

  options = options || {};

  if (path instanceof RegExp) {
    return regexpToRegexp(path, /** @type {!Array} */ (keys))
  }

  if (isarray(path)) {
    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
  }

  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
}
pathToRegexp_1.parse = parse_1;
pathToRegexp_1.compile = compile_1;
pathToRegexp_1.tokensToFunction = tokensToFunction_1;
pathToRegexp_1.tokensToRegExp = tokensToRegExp_1;

/*  */

// $flow-disable-line
const regexpCompileCache = Object.create(null);

function fillParams (
  path,
  params,
  routeMsg
) {
  params = params || {};
  try {
    const filler =
      regexpCompileCache[path] ||
      (regexpCompileCache[path] = pathToRegexp_1.compile(path));

    // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}
    // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string
    if (typeof params.pathMatch === 'string') params[0] = params.pathMatch;

    return filler(params, { pretty: true })
  } catch (e) {
    {
      // Fix #3072 no warn if `pathMatch` is string
      warn(typeof params.pathMatch === 'string', `missing param for ${routeMsg}: ${e.message}`);
    }
    return ''
  } finally {
    // delete the 0 if it was added
    delete params[0];
  }
}

/*  */

function normalizeLocation (
  raw,
  current,
  append,
  router
) {
  let next = typeof raw === 'string' ? { path: raw } : raw;
  // named target
  if (next._normalized) {
    return next
  } else if (next.name) {
    next = extend({}, raw);
    const params = next.params;
    if (params && typeof params === 'object') {
      next.params = extend({}, params);
    }
    return next
  }

  // relative params
  if (!next.path && next.params && current) {
    next = extend({}, next);
    next._normalized = true;
    const params = extend(extend({}, current.params), next.params);
    if (current.name) {
      next.name = current.name;
      next.params = params;
    } else if (current.matched.length) {
      const rawPath = current.matched[current.matched.length - 1].path;
      next.path = fillParams(rawPath, params, `path ${current.path}`);
    } else {
      warn(false, `relative params navigation requires a current route.`);
    }
    return next
  }

  const parsedPath = parsePath(next.path || '');
  const basePath = (current && current.path) || '/';
  const path = parsedPath.path
    ? resolvePath(parsedPath.path, basePath, append || next.append)
    : basePath;

  const query = resolveQuery(
    parsedPath.query,
    next.query,
    router && router.options.parseQuery
  );

  let hash = next.hash || parsedPath.hash;
  if (hash && hash.charAt(0) !== '#') {
    hash = `#${hash}`;
  }

  return {
    _normalized: true,
    path,
    query,
    hash
  }
}

/*  */

// work around weird flow bug
const toTypes = [String, Object];
const eventTypes = [String, Array];

const noop = () => {};

let warnedCustomSlot;
let warnedTagProp;
let warnedEventProp;

var Link = {
  name: 'RouterLink',
  props: {
    to: {
      type: toTypes,
      required: true
    },
    tag: {
      type: String,
      default: 'a'
    },
    custom: Boolean,
    exact: Boolean,
    exactPath: Boolean,
    append: Boolean,
    replace: Boolean,
    activeClass: String,
    exactActiveClass: String,
    ariaCurrentValue: {
      type: String,
      default: 'page'
    },
    event: {
      type: eventTypes,
      default: 'click'
    }
  },
  render (h) {
    const router = this.$router;
    const current = this.$route;
    const { location, route, href } = router.resolve(
      this.to,
      current,
      this.append
    );

    const classes = {};
    const globalActiveClass = router.options.linkActiveClass;
    const globalExactActiveClass = router.options.linkExactActiveClass;
    // Support global empty active class
    const activeClassFallback =
      globalActiveClass == null ? 'router-link-active' : globalActiveClass;
    const exactActiveClassFallback =
      globalExactActiveClass == null
        ? 'router-link-exact-active'
        : globalExactActiveClass;
    const activeClass =
      this.activeClass == null ? activeClassFallback : this.activeClass;
    const exactActiveClass =
      this.exactActiveClass == null
        ? exactActiveClassFallback
        : this.exactActiveClass;

    const compareTarget = route.redirectedFrom
      ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)
      : route;

    classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);
    classes[activeClass] = this.exact || this.exactPath
      ? classes[exactActiveClass]
      : isIncludedRoute(current, compareTarget);

    const ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;

    const handler = e => {
      if (guardEvent(e)) {
        if (this.replace) {
          router.replace(location, noop);
        } else {
          router.push(location, noop);
        }
      }
    };

    const on = { click: guardEvent };
    if (Array.isArray(this.event)) {
      this.event.forEach(e => {
        on[e] = handler;
      });
    } else {
      on[this.event] = handler;
    }

    const data = { class: classes };

    const scopedSlot =
      !this.$scopedSlots.$hasNormal &&
      this.$scopedSlots.default &&
      this.$scopedSlots.default({
        href,
        route,
        navigate: handler,
        isActive: classes[activeClass],
        isExactActive: classes[exactActiveClass]
      });

    if (scopedSlot) {
      if ( !this.custom) {
        !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n');
        warnedCustomSlot = true;
      }
      if (scopedSlot.length === 1) {
        return scopedSlot[0]
      } else if (scopedSlot.length > 1 || !scopedSlot.length) {
        {
          warn(
            false,
            `<router-link> with to="${
              this.to
            }" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.`
          );
        }
        return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)
      }
    }

    {
      if ('tag' in this.$options.propsData && !warnedTagProp) {
        warn(
          false,
          `<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.`
        );
        warnedTagProp = true;
      }
      if ('event' in this.$options.propsData && !warnedEventProp) {
        warn(
          false,
          `<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.`
        );
        warnedEventProp = true;
      }
    }

    if (this.tag === 'a') {
      data.on = on;
      data.attrs = { href, 'aria-current': ariaCurrentValue };
    } else {
      // find the first <a> child and apply listener and href
      const a = findAnchor(this.$slots.default);
      if (a) {
        // in case the <a> is a static node
        a.isStatic = false;
        const aData = (a.data = extend({}, a.data));
        aData.on = aData.on || {};
        // transform existing events in both objects into arrays so we can push later
        for (const event in aData.on) {
          const handler = aData.on[event];
          if (event in on) {
            aData.on[event] = Array.isArray(handler) ? handler : [handler];
          }
        }
        // append new listeners for router-link
        for (const event in on) {
          if (event in aData.on) {
            // on[event] is always a function
            aData.on[event].push(on[event]);
          } else {
            aData.on[event] = handler;
          }
        }

        const aAttrs = (a.data.attrs = extend({}, a.data.attrs));
        aAttrs.href = href;
        aAttrs['aria-current'] = ariaCurrentValue;
      } else {
        // doesn't have <a> child, apply listener to self
        data.on = on;
      }
    }

    return h(this.tag, data, this.$slots.default)
  }
};

function guardEvent (e) {
  // don't redirect with control keys
  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return
  // don't redirect when preventDefault called
  if (e.defaultPrevented) return
  // don't redirect on right click
  if (e.button !== undefined && e.button !== 0) return
  // don't redirect if `target="_blank"`
  if (e.currentTarget && e.currentTarget.getAttribute) {
    const target = e.currentTarget.getAttribute('target');
    if (/\b_blank\b/i.test(target)) return
  }
  // this may be a Weex event which doesn't have this method
  if (e.preventDefault) {
    e.preventDefault();
  }
  return true
}

function findAnchor (children) {
  if (children) {
    let child;
    for (let i = 0; i < children.length; i++) {
      child = children[i];
      if (child.tag === 'a') {
        return child
      }
      if (child.children && (child = findAnchor(child.children))) {
        return child
      }
    }
  }
}

let _Vue;

function install (Vue) {
  if (install.installed && _Vue === Vue) return
  install.installed = true;

  _Vue = Vue;

  const isDef = v => v !== undefined;

  const registerInstance = (vm, callVal) => {
    let i = vm.$options._parentVnode;
    if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {
      i(vm, callVal);
    }
  };

  Vue.mixin({
    beforeCreate () {
      if (isDef(this.$options.router)) {
        this._routerRoot = this;
        this._router = this.$options.router;
        this._router.init(this);
        Vue.util.defineReactive(this, '_route', this._router.history.current);
      } else {
        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;
      }
      registerInstance(this, this);
    },
    destroyed () {
      registerInstance(this);
    }
  });

  Object.defineProperty(Vue.prototype, '$router', {
    get () { return this._routerRoot._router }
  });

  Object.defineProperty(Vue.prototype, '$route', {
    get () { return this._routerRoot._route }
  });

  Vue.component('RouterView', View);
  Vue.component('RouterLink', Link);

  const strats = Vue.config.optionMergeStrategies;
  // use the same hook merging strategy for route hooks
  strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;
}

/*  */

const inBrowser = typeof window !== 'undefined';

/*  */

function createRouteMap (
  routes,
  oldPathList,
  oldPathMap,
  oldNameMap,
  parentRoute
) {
  // the path list is used to control path matching priority
  const pathList = oldPathList || [];
  // $flow-disable-line
  const pathMap = oldPathMap || Object.create(null);
  // $flow-disable-line
  const nameMap = oldNameMap || Object.create(null);

  routes.forEach(route => {
    addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);
  });

  // ensure wildcard routes are always at the end
  for (let i = 0, l = pathList.length; i < l; i++) {
    if (pathList[i] === '*') {
      pathList.push(pathList.splice(i, 1)[0]);
      l--;
      i--;
    }
  }

  {
    // warn if routes do not include leading slashes
    const found = pathList
    // check for missing leading slash
      .filter(path => path && path.charAt(0) !== '*' && path.charAt(0) !== '/');

    if (found.length > 0) {
      const pathNames = found.map(path => `- ${path}`).join('\n');
      warn(false, `Non-nested routes must include a leading slash character. Fix the following routes: \n${pathNames}`);
    }
  }

  return {
    pathList,
    pathMap,
    nameMap
  }
}

function addRouteRecord (
  pathList,
  pathMap,
  nameMap,
  route,
  parent,
  matchAs
) {
  const { path, name } = route;
  {
    assert(path != null, `"path" is required in a route configuration.`);
    assert(
      typeof route.component !== 'string',
      `route config "component" for path: ${String(
        path || name
      )} cannot be a ` + `string id. Use an actual component instead.`
    );

    warn(
      // eslint-disable-next-line no-control-regex
      !/[^\u0000-\u007F]+/.test(path),
      `Route with path "${path}" contains unencoded characters, make sure ` +
        `your path is correctly encoded before passing it to the router. Use ` +
        `encodeURI to encode static segments of your path.`
    );
  }

  const pathToRegexpOptions =
    route.pathToRegexpOptions || {};
  const normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);

  if (typeof route.caseSensitive === 'boolean') {
    pathToRegexpOptions.sensitive = route.caseSensitive;
  }

  const record = {
    path: normalizedPath,
    regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),
    components: route.components || { default: route.component },
    alias: route.alias
      ? typeof route.alias === 'string'
        ? [route.alias]
        : route.alias
      : [],
    instances: {},
    enteredCbs: {},
    name,
    parent,
    matchAs,
    redirect: route.redirect,
    beforeEnter: route.beforeEnter,
    meta: route.meta || {},
    props:
      route.props == null
        ? {}
        : route.components
          ? route.props
          : { default: route.props }
  };

  if (route.children) {
    // Warn if route is named, does not redirect and has a default child route.
    // If users navigate to this route by name, the default child will
    // not be rendered (GH Issue #629)
    {
      if (
        route.name &&
        !route.redirect &&
        route.children.some(child => /^\/?$/.test(child.path))
      ) {
        warn(
          false,
          `Named Route '${route.name}' has a default child route. ` +
            `When navigating to this named route (:to="{name: '${
              route.name
            }'"), ` +
            `the default child route will not be rendered. Remove the name from ` +
            `this route and use the name of the default child route for named ` +
            `links instead.`
        );
      }
    }
    route.children.forEach(child => {
      const childMatchAs = matchAs
        ? cleanPath(`${matchAs}/${child.path}`)
        : undefined;
      addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);
    });
  }

  if (!pathMap[record.path]) {
    pathList.push(record.path);
    pathMap[record.path] = record;
  }

  if (route.alias !== undefined) {
    const aliases = Array.isArray(route.alias) ? route.alias : [route.alias];
    for (let i = 0; i < aliases.length; ++i) {
      const alias = aliases[i];
      if ( alias === path) {
        warn(
          false,
          `Found an alias with the same value as the path: "${path}". You have to remove that alias. It will be ignored in development.`
        );
        // skip in dev to make it work
        continue
      }

      const aliasRoute = {
        path: alias,
        children: route.children
      };
      addRouteRecord(
        pathList,
        pathMap,
        nameMap,
        aliasRoute,
        parent,
        record.path || '/' // matchAs
      );
    }
  }

  if (name) {
    if (!nameMap[name]) {
      nameMap[name] = record;
    } else if ( !matchAs) {
      warn(
        false,
        `Duplicate named routes definition: ` +
          `{ name: "${name}", path: "${record.path}" }`
      );
    }
  }
}

function compileRouteRegex (
  path,
  pathToRegexpOptions
) {
  const regex = pathToRegexp_1(path, [], pathToRegexpOptions);
  {
    const keys = Object.create(null);
    regex.keys.forEach(key => {
      warn(
        !keys[key.name],
        `Duplicate param keys in route with path: "${path}"`
      );
      keys[key.name] = true;
    });
  }
  return regex
}

function normalizePath (
  path,
  parent,
  strict
) {
  if (!strict) path = path.replace(/\/$/, '');
  if (path[0] === '/') return path
  if (parent == null) return path
  return cleanPath(`${parent.path}/${path}`)
}

/*  */



function createMatcher (
  routes,
  router
) {
  const { pathList, pathMap, nameMap } = createRouteMap(routes);

  function addRoutes (routes) {
    createRouteMap(routes, pathList, pathMap, nameMap);
  }

  function addRoute (parentOrRoute, route) {
    const parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;
    // $flow-disable-line
    createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);

    // add aliases of parent
    if (parent) {
      createRouteMap(
        // $flow-disable-line route is defined if parent is
        parent.alias.map(alias => ({ path: alias, children: [route] })),
        pathList,
        pathMap,
        nameMap,
        parent
      );
    }
  }

  function getRoutes () {
    return pathList.map(path => pathMap[path])
  }

  function match (
    raw,
    currentRoute,
    redirectedFrom
  ) {
    const location = normalizeLocation(raw, currentRoute, false, router);
    const { name } = location;

    if (name) {
      const record = nameMap[name];
      {
        warn(record, `Route with name '${name}' does not exist`);
      }
      if (!record) return _createRoute(null, location)
      const paramNames = record.regex.keys
        .filter(key => !key.optional)
        .map(key => key.name);

      if (typeof location.params !== 'object') {
        location.params = {};
      }

      if (currentRoute && typeof currentRoute.params === 'object') {
        for (const key in currentRoute.params) {
          if (!(key in location.params) && paramNames.indexOf(key) > -1) {
            location.params[key] = currentRoute.params[key];
          }
        }
      }

      location.path = fillParams(record.path, location.params, `named route "${name}"`);
      return _createRoute(record, location, redirectedFrom)
    } else if (location.path) {
      location.params = {};
      for (let i = 0; i < pathList.length; i++) {
        const path = pathList[i];
        const record = pathMap[path];
        if (matchRoute(record.regex, location.path, location.params)) {
          return _createRoute(record, location, redirectedFrom)
        }
      }
    }
    // no match
    return _createRoute(null, location)
  }

  function redirect (
    record,
    location
  ) {
    const originalRedirect = record.redirect;
    let redirect = typeof originalRedirect === 'function'
      ? originalRedirect(createRoute(record, location, null, router))
      : originalRedirect;

    if (typeof redirect === 'string') {
      redirect = { path: redirect };
    }

    if (!redirect || typeof redirect !== 'object') {
      {
        warn(
          false, `invalid redirect option: ${JSON.stringify(redirect)}`
        );
      }
      return _createRoute(null, location)
    }

    const re = redirect;
    const { name, path } = re;
    let { query, hash, params } = location;
    query = re.hasOwnProperty('query') ? re.query : query;
    hash = re.hasOwnProperty('hash') ? re.hash : hash;
    params = re.hasOwnProperty('params') ? re.params : params;

    if (name) {
      // resolved named direct
      const targetRecord = nameMap[name];
      {
        assert(targetRecord, `redirect failed: named route "${name}" not found.`);
      }
      return match({
        _normalized: true,
        name,
        query,
        hash,
        params
      }, undefined, location)
    } else if (path) {
      // 1. resolve relative redirect
      const rawPath = resolveRecordPath(path, record);
      // 2. resolve params
      const resolvedPath = fillParams(rawPath, params, `redirect route with path "${rawPath}"`);
      // 3. rematch with existing query and hash
      return match({
        _normalized: true,
        path: resolvedPath,
        query,
        hash
      }, undefined, location)
    } else {
      {
        warn(false, `invalid redirect option: ${JSON.stringify(redirect)}`);
      }
      return _createRoute(null, location)
    }
  }

  function alias (
    record,
    location,
    matchAs
  ) {
    const aliasedPath = fillParams(matchAs, location.params, `aliased route with path "${matchAs}"`);
    const aliasedMatch = match({
      _normalized: true,
      path: aliasedPath
    });
    if (aliasedMatch) {
      const matched = aliasedMatch.matched;
      const aliasedRecord = matched[matched.length - 1];
      location.params = aliasedMatch.params;
      return _createRoute(aliasedRecord, location)
    }
    return _createRoute(null, location)
  }

  function _createRoute (
    record,
    location,
    redirectedFrom
  ) {
    if (record && record.redirect) {
      return redirect(record, redirectedFrom || location)
    }
    if (record && record.matchAs) {
      return alias(record, location, record.matchAs)
    }
    return createRoute(record, location, redirectedFrom, router)
  }

  return {
    match,
    addRoute,
    getRoutes,
    addRoutes
  }
}

function matchRoute (
  regex,
  path,
  params
) {
  const m = path.match(regex);

  if (!m) {
    return false
  } else if (!params) {
    return true
  }

  for (let i = 1, len = m.length; i < len; ++i) {
    const key = regex.keys[i - 1];
    if (key) {
      // Fix #1994: using * with props: true generates a param named 0
      params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];
    }
  }

  return true
}

function resolveRecordPath (path, record) {
  return resolvePath(path, record.parent ? record.parent.path : '/', true)
}

/*  */

// use User Timing api (if present) for more accurate key precision
const Time =
  inBrowser && window.performance && window.performance.now
    ? window.performance
    : Date;

function genStateKey () {
  return Time.now().toFixed(3)
}

let _key = genStateKey();

function getStateKey () {
  return _key
}

function setStateKey (key) {
  return (_key = key)
}

/*  */

const positionStore = Object.create(null);

function setupScroll () {
  // Prevent browser scroll behavior on History popstate
  if ('scrollRestoration' in window.history) {
    window.history.scrollRestoration = 'manual';
  }
  // Fix for #1585 for Firefox
  // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678
  // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with
  // window.location.protocol + '//' + window.location.host
  // location.host contains the port and location.hostname doesn't
  const protocolAndPath = window.location.protocol + '//' + window.location.host;
  const absolutePath = window.location.href.replace(protocolAndPath, '');
  // preserve existing history state as it could be overriden by the user
  const stateCopy = extend({}, window.history.state);
  stateCopy.key = getStateKey();
  window.history.replaceState(stateCopy, '', absolutePath);
  window.addEventListener('popstate', handlePopState);
  return () => {
    window.removeEventListener('popstate', handlePopState);
  }
}

function handleScroll (
  router,
  to,
  from,
  isPop
) {
  if (!router.app) {
    return
  }

  const behavior = router.options.scrollBehavior;
  if (!behavior) {
    return
  }

  {
    assert(typeof behavior === 'function', `scrollBehavior must be a function`);
  }

  // wait until re-render finishes before scrolling
  router.app.$nextTick(() => {
    const position = getScrollPosition();
    const shouldScroll = behavior.call(
      router,
      to,
      from,
      isPop ? position : null
    );

    if (!shouldScroll) {
      return
    }

    if (typeof shouldScroll.then === 'function') {
      shouldScroll
        .then(shouldScroll => {
          scrollToPosition((shouldScroll), position);
        })
        .catch(err => {
          {
            assert(false, err.toString());
          }
        });
    } else {
      scrollToPosition(shouldScroll, position);
    }
  });
}

function saveScrollPosition () {
  const key = getStateKey();
  if (key) {
    positionStore[key] = {
      x: window.pageXOffset,
      y: window.pageYOffset
    };
  }
}

function handlePopState (e) {
  saveScrollPosition();
  if (e.state && e.state.key) {
    setStateKey(e.state.key);
  }
}

function getScrollPosition () {
  const key = getStateKey();
  if (key) {
    return positionStore[key]
  }
}

function getElementPosition (el, offset) {
  const docEl = document.documentElement;
  const docRect = docEl.getBoundingClientRect();
  const elRect = el.getBoundingClientRect();
  return {
    x: elRect.left - docRect.left - offset.x,
    y: elRect.top - docRect.top - offset.y
  }
}

function isValidPosition (obj) {
  return isNumber(obj.x) || isNumber(obj.y)
}

function normalizePosition (obj) {
  return {
    x: isNumber(obj.x) ? obj.x : window.pageXOffset,
    y: isNumber(obj.y) ? obj.y : window.pageYOffset
  }
}

function normalizeOffset (obj) {
  return {
    x: isNumber(obj.x) ? obj.x : 0,
    y: isNumber(obj.y) ? obj.y : 0
  }
}

function isNumber (v) {
  return typeof v === 'number'
}

const hashStartsWithNumberRE = /^#\d/;

function scrollToPosition (shouldScroll, position) {
  const isObject = typeof shouldScroll === 'object';
  if (isObject && typeof shouldScroll.selector === 'string') {
    // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]
    // but at the same time, it doesn't make much sense to select an element with an id and an extra selector
    const el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line
      ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line
      : document.querySelector(shouldScroll.selector);

    if (el) {
      let offset =
        shouldScroll.offset && typeof shouldScroll.offset === 'object'
          ? shouldScroll.offset
          : {};
      offset = normalizeOffset(offset);
      position = getElementPosition(el, offset);
    } else if (isValidPosition(shouldScroll)) {
      position = normalizePosition(shouldScroll);
    }
  } else if (isObject && isValidPosition(shouldScroll)) {
    position = normalizePosition(shouldScroll);
  }

  if (position) {
    // $flow-disable-line
    if ('scrollBehavior' in document.documentElement.style) {
      window.scrollTo({
        left: position.x,
        top: position.y,
        // $flow-disable-line
        behavior: shouldScroll.behavior
      });
    } else {
      window.scrollTo(position.x, position.y);
    }
  }
}

/*  */

const supportsPushState =
  inBrowser &&
  (function () {
    const ua = window.navigator.userAgent;

    if (
      (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&
      ua.indexOf('Mobile Safari') !== -1 &&
      ua.indexOf('Chrome') === -1 &&
      ua.indexOf('Windows Phone') === -1
    ) {
      return false
    }

    return window.history && typeof window.history.pushState === 'function'
  })();

function pushState (url, replace) {
  saveScrollPosition();
  // try...catch the pushState call to get around Safari
  // DOM Exception 18 where it limits to 100 pushState calls
  const history = window.history;
  try {
    if (replace) {
      // preserve existing history state as it could be overriden by the user
      const stateCopy = extend({}, history.state);
      stateCopy.key = getStateKey();
      history.replaceState(stateCopy, '', url);
    } else {
      history.pushState({ key: setStateKey(genStateKey()) }, '', url);
    }
  } catch (e) {
    window.location[replace ? 'replace' : 'assign'](url);
  }
}

function replaceState (url) {
  pushState(url, true);
}

/*  */

function runQueue (queue, fn, cb) {
  const step = index => {
    if (index >= queue.length) {
      cb();
    } else {
      if (queue[index]) {
        fn(queue[index], () => {
          step(index + 1);
        });
      } else {
        step(index + 1);
      }
    }
  };
  step(0);
}

// When changing thing, also edit router.d.ts
const NavigationFailureType = {
  redirected: 2,
  aborted: 4,
  cancelled: 8,
  duplicated: 16
};

function createNavigationRedirectedError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.redirected,
    `Redirected when going from "${from.fullPath}" to "${stringifyRoute(
      to
    )}" via a navigation guard.`
  )
}

function createNavigationDuplicatedError (from, to) {
  const error = createRouterError(
    from,
    to,
    NavigationFailureType.duplicated,
    `Avoided redundant navigation to current location: "${from.fullPath}".`
  );
  // backwards compatible with the first introduction of Errors
  error.name = 'NavigationDuplicated';
  return error
}

function createNavigationCancelledError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.cancelled,
    `Navigation cancelled from "${from.fullPath}" to "${
      to.fullPath
    }" with a new navigation.`
  )
}

function createNavigationAbortedError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.aborted,
    `Navigation aborted from "${from.fullPath}" to "${
      to.fullPath
    }" via a navigation guard.`
  )
}

function createRouterError (from, to, type, message) {
  const error = new Error(message);
  error._isRouter = true;
  error.from = from;
  error.to = to;
  error.type = type;

  return error
}

const propertiesToLog = ['params', 'query', 'hash'];

function stringifyRoute (to) {
  if (typeof to === 'string') return to
  if ('path' in to) return to.path
  const location = {};
  propertiesToLog.forEach(key => {
    if (key in to) location[key] = to[key];
  });
  return JSON.stringify(location, null, 2)
}

function isError (err) {
  return Object.prototype.toString.call(err).indexOf('Error') > -1
}

function isNavigationFailure (err, errorType) {
  return (
    isError(err) &&
    err._isRouter &&
    (errorType == null || err.type === errorType)
  )
}

/*  */

function resolveAsyncComponents (matched) {
  return (to, from, next) => {
    let hasAsync = false;
    let pending = 0;
    let error = null;

    flatMapComponents(matched, (def, _, match, key) => {
      // if it's a function and doesn't have cid attached,
      // assume it's an async component resolve function.
      // we are not using Vue's default async resolving mechanism because
      // we want to halt the navigation until the incoming component has been
      // resolved.
      if (typeof def === 'function' && def.cid === undefined) {
        hasAsync = true;
        pending++;

        const resolve = once(resolvedDef => {
          if (isESModule(resolvedDef)) {
            resolvedDef = resolvedDef.default;
          }
          // save resolved on async factory in case it's used elsewhere
          def.resolved = typeof resolvedDef === 'function'
            ? resolvedDef
            : _Vue.extend(resolvedDef);
          match.components[key] = resolvedDef;
          pending--;
          if (pending <= 0) {
            next();
          }
        });

        const reject = once(reason => {
          const msg = `Failed to resolve async component ${key}: ${reason}`;
           warn(false, msg);
          if (!error) {
            error = isError(reason)
              ? reason
              : new Error(msg);
            next(error);
          }
        });

        let res;
        try {
          res = def(resolve, reject);
        } catch (e) {
          reject(e);
        }
        if (res) {
          if (typeof res.then === 'function') {
            res.then(resolve, reject);
          } else {
            // new syntax in Vue 2.3
            const comp = res.component;
            if (comp && typeof comp.then === 'function') {
              comp.then(resolve, reject);
            }
          }
        }
      }
    });

    if (!hasAsync) next();
  }
}

function flatMapComponents (
  matched,
  fn
) {
  return flatten(matched.map(m => {
    return Object.keys(m.components).map(key => fn(
      m.components[key],
      m.instances[key],
      m, key
    ))
  }))
}

function flatten (arr) {
  return Array.prototype.concat.apply([], arr)
}

const hasSymbol =
  typeof Symbol === 'function' &&
  typeof Symbol.toStringTag === 'symbol';

function isESModule (obj) {
  return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')
}

// in Webpack 2, require.ensure now also returns a Promise
// so the resolve/reject functions may get called an extra time
// if the user uses an arrow function shorthand that happens to
// return that Promise.
function once (fn) {
  let called = false;
  return function (...args) {
    if (called) return
    called = true;
    return fn.apply(this, args)
  }
}

/*  */

class History {
  
  
  
  
  
  
  
  
  
  
  

  // implemented by sub-classes
  
  
  
  
  
  

  constructor (router, base) {
    this.router = router;
    this.base = normalizeBase(base);
    // start with a route object that stands for "nowhere"
    this.current = START;
    this.pending = null;
    this.ready = false;
    this.readyCbs = [];
    this.readyErrorCbs = [];
    this.errorCbs = [];
    this.listeners = [];
  }

  listen (cb) {
    this.cb = cb;
  }

  onReady (cb, errorCb) {
    if (this.ready) {
      cb();
    } else {
      this.readyCbs.push(cb);
      if (errorCb) {
        this.readyErrorCbs.push(errorCb);
      }
    }
  }

  onError (errorCb) {
    this.errorCbs.push(errorCb);
  }

  transitionTo (
    location,
    onComplete,
    onAbort
  ) {
    let route;
    // catch redirect option https://github.com/vuejs/vue-router/issues/3201
    try {
      route = this.router.match(location, this.current);
    } catch (e) {
      this.errorCbs.forEach(cb => {
        cb(e);
      });
      // Exception should still be thrown
      throw e
    }
    const prev = this.current;
    this.confirmTransition(
      route,
      () => {
        this.updateRoute(route);
        onComplete && onComplete(route);
        this.ensureURL();
        this.router.afterHooks.forEach(hook => {
          hook && hook(route, prev);
        });

        // fire ready cbs once
        if (!this.ready) {
          this.ready = true;
          this.readyCbs.forEach(cb => {
            cb(route);
          });
        }
      },
      err => {
        if (onAbort) {
          onAbort(err);
        }
        if (err && !this.ready) {
          // Initial redirection should not mark the history as ready yet
          // because it's triggered by the redirection instead
          // https://github.com/vuejs/vue-router/issues/3225
          // https://github.com/vuejs/vue-router/issues/3331
          if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {
            this.ready = true;
            this.readyErrorCbs.forEach(cb => {
              cb(err);
            });
          }
        }
      }
    );
  }

  confirmTransition (route, onComplete, onAbort) {
    const current = this.current;
    this.pending = route;
    const abort = err => {
      // changed after adding errors with
      // https://github.com/vuejs/vue-router/pull/3047 before that change,
      // redirect and aborted navigation would produce an err == null
      if (!isNavigationFailure(err) && isError(err)) {
        if (this.errorCbs.length) {
          this.errorCbs.forEach(cb => {
            cb(err);
          });
        } else {
          warn(false, 'uncaught error during route navigation:');
          console.error(err);
        }
      }
      onAbort && onAbort(err);
    };
    const lastRouteIndex = route.matched.length - 1;
    const lastCurrentIndex = current.matched.length - 1;
    if (
      isSameRoute(route, current) &&
      // in the case the route map has been dynamically appended to
      lastRouteIndex === lastCurrentIndex &&
      route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]
    ) {
      this.ensureURL();
      return abort(createNavigationDuplicatedError(current, route))
    }

    const { updated, deactivated, activated } = resolveQueue(
      this.current.matched,
      route.matched
    );

    const queue = [].concat(
      // in-component leave guards
      extractLeaveGuards(deactivated),
      // global before hooks
      this.router.beforeHooks,
      // in-component update hooks
      extractUpdateHooks(updated),
      // in-config enter guards
      activated.map(m => m.beforeEnter),
      // async components
      resolveAsyncComponents(activated)
    );

    const iterator = (hook, next) => {
      if (this.pending !== route) {
        return abort(createNavigationCancelledError(current, route))
      }
      try {
        hook(route, current, (to) => {
          if (to === false) {
            // next(false) -> abort navigation, ensure current URL
            this.ensureURL(true);
            abort(createNavigationAbortedError(current, route));
          } else if (isError(to)) {
            this.ensureURL(true);
            abort(to);
          } else if (
            typeof to === 'string' ||
            (typeof to === 'object' &&
              (typeof to.path === 'string' || typeof to.name === 'string'))
          ) {
            // next('/') or next({ path: '/' }) -> redirect
            abort(createNavigationRedirectedError(current, route));
            if (typeof to === 'object' && to.replace) {
              this.replace(to);
            } else {
              this.push(to);
            }
          } else {
            // confirm transition and pass on the value
            next(to);
          }
        });
      } catch (e) {
        abort(e);
      }
    };

    runQueue(queue, iterator, () => {
      // wait until async components are resolved before
      // extracting in-component enter guards
      const enterGuards = extractEnterGuards(activated);
      const queue = enterGuards.concat(this.router.resolveHooks);
      runQueue(queue, iterator, () => {
        if (this.pending !== route) {
          return abort(createNavigationCancelledError(current, route))
        }
        this.pending = null;
        onComplete(route);
        if (this.router.app) {
          this.router.app.$nextTick(() => {
            handleRouteEntered(route);
          });
        }
      });
    });
  }

  updateRoute (route) {
    this.current = route;
    this.cb && this.cb(route);
  }

  setupListeners () {
    // Default implementation is empty
  }

  teardown () {
    // clean up event listeners
    // https://github.com/vuejs/vue-router/issues/2341
    this.listeners.forEach(cleanupListener => {
      cleanupListener();
    });
    this.listeners = [];

    // reset current history route
    // https://github.com/vuejs/vue-router/issues/3294
    this.current = START;
    this.pending = null;
  }
}

function normalizeBase (base) {
  if (!base) {
    if (inBrowser) {
      // respect <base> tag
      const baseEl = document.querySelector('base');
      base = (baseEl && baseEl.getAttribute('href')) || '/';
      // strip full URL origin
      base = base.replace(/^https?:\/\/[^\/]+/, '');
    } else {
      base = '/';
    }
  }
  // make sure there's the starting slash
  if (base.charAt(0) !== '/') {
    base = '/' + base;
  }
  // remove trailing slash
  return base.replace(/\/$/, '')
}

function resolveQueue (
  current,
  next
) {
  let i;
  const max = Math.max(current.length, next.length);
  for (i = 0; i < max; i++) {
    if (current[i] !== next[i]) {
      break
    }
  }
  return {
    updated: next.slice(0, i),
    activated: next.slice(i),
    deactivated: current.slice(i)
  }
}

function extractGuards (
  records,
  name,
  bind,
  reverse
) {
  const guards = flatMapComponents(records, (def, instance, match, key) => {
    const guard = extractGuard(def, name);
    if (guard) {
      return Array.isArray(guard)
        ? guard.map(guard => bind(guard, instance, match, key))
        : bind(guard, instance, match, key)
    }
  });
  return flatten(reverse ? guards.reverse() : guards)
}

function extractGuard (
  def,
  key
) {
  if (typeof def !== 'function') {
    // extend now so that global mixins are applied.
    def = _Vue.extend(def);
  }
  return def.options[key]
}

function extractLeaveGuards (deactivated) {
  return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)
}

function extractUpdateHooks (updated) {
  return extractGuards(updated, 'beforeRouteUpdate', bindGuard)
}

function bindGuard (guard, instance) {
  if (instance) {
    return function boundRouteGuard () {
      return guard.apply(instance, arguments)
    }
  }
}

function extractEnterGuards (
  activated
) {
  return extractGuards(
    activated,
    'beforeRouteEnter',
    (guard, _, match, key) => {
      return bindEnterGuard(guard, match, key)
    }
  )
}

function bindEnterGuard (
  guard,
  match,
  key
) {
  return function routeEnterGuard (to, from, next) {
    return guard(to, from, cb => {
      if (typeof cb === 'function') {
        if (!match.enteredCbs[key]) {
          match.enteredCbs[key] = [];
        }
        match.enteredCbs[key].push(cb);
      }
      next(cb);
    })
  }
}

/*  */

class HTML5History extends History {
  

  constructor (router, base) {
    super(router, base);

    this._startLocation = getLocation(this.base);
  }

  setupListeners () {
    if (this.listeners.length > 0) {
      return
    }

    const router = this.router;
    const expectScroll = router.options.scrollBehavior;
    const supportsScroll = supportsPushState && expectScroll;

    if (supportsScroll) {
      this.listeners.push(setupScroll());
    }

    const handleRoutingEvent = () => {
      const current = this.current;

      // Avoiding first `popstate` event dispatched in some browsers but first
      // history route not updated since async guard at the same time.
      const location = getLocation(this.base);
      if (this.current === START && location === this._startLocation) {
        return
      }

      this.transitionTo(location, route => {
        if (supportsScroll) {
          handleScroll(router, route, current, true);
        }
      });
    };
    window.addEventListener('popstate', handleRoutingEvent);
    this.listeners.push(() => {
      window.removeEventListener('popstate', handleRoutingEvent);
    });
  }

  go (n) {
    window.history.go(n);
  }

  push (location, onComplete, onAbort) {
    const { current: fromRoute } = this;
    this.transitionTo(location, route => {
      pushState(cleanPath(this.base + route.fullPath));
      handleScroll(this.router, route, fromRoute, false);
      onComplete && onComplete(route);
    }, onAbort);
  }

  replace (location, onComplete, onAbort) {
    const { current: fromRoute } = this;
    this.transitionTo(location, route => {
      replaceState(cleanPath(this.base + route.fullPath));
      handleScroll(this.router, route, fromRoute, false);
      onComplete && onComplete(route);
    }, onAbort);
  }

  ensureURL (push) {
    if (getLocation(this.base) !== this.current.fullPath) {
      const current = cleanPath(this.base + this.current.fullPath);
      push ? pushState(current) : replaceState(current);
    }
  }

  getCurrentLocation () {
    return getLocation(this.base)
  }
}

function getLocation (base) {
  let path = window.location.pathname;
  if (base && path.toLowerCase().indexOf(base.toLowerCase()) === 0) {
    path = path.slice(base.length);
  }
  return (path || '/') + window.location.search + window.location.hash
}

/*  */

class HashHistory extends History {
  constructor (router, base, fallback) {
    super(router, base);
    // check history fallback deeplinking
    if (fallback && checkFallback(this.base)) {
      return
    }
    ensureSlash();
  }

  // this is delayed until the app mounts
  // to avoid the hashchange listener being fired too early
  setupListeners () {
    if (this.listeners.length > 0) {
      return
    }

    const router = this.router;
    const expectScroll = router.options.scrollBehavior;
    const supportsScroll = supportsPushState && expectScroll;

    if (supportsScroll) {
      this.listeners.push(setupScroll());
    }

    const handleRoutingEvent = () => {
      const current = this.current;
      if (!ensureSlash()) {
        return
      }
      this.transitionTo(getHash(), route => {
        if (supportsScroll) {
          handleScroll(this.router, route, current, true);
        }
        if (!supportsPushState) {
          replaceHash(route.fullPath);
        }
      });
    };
    const eventType = supportsPushState ? 'popstate' : 'hashchange';
    window.addEventListener(
      eventType,
      handleRoutingEvent
    );
    this.listeners.push(() => {
      window.removeEventListener(eventType, handleRoutingEvent);
    });
  }

  push (location, onComplete, onAbort) {
    const { current: fromRoute } = this;
    this.transitionTo(
      location,
      route => {
        pushHash(route.fullPath);
        handleScroll(this.router, route, fromRoute, false);
        onComplete && onComplete(route);
      },
      onAbort
    );
  }

  replace (location, onComplete, onAbort) {
    const { current: fromRoute } = this;
    this.transitionTo(
      location,
      route => {
        replaceHash(route.fullPath);
        handleScroll(this.router, route, fromRoute, false);
        onComplete && onComplete(route);
      },
      onAbort
    );
  }

  go (n) {
    window.history.go(n);
  }

  ensureURL (push) {
    const current = this.current.fullPath;
    if (getHash() !== current) {
      push ? pushHash(current) : replaceHash(current);
    }
  }

  getCurrentLocation () {
    return getHash()
  }
}

function checkFallback (base) {
  const location = getLocation(base);
  if (!/^\/#/.test(location)) {
    window.location.replace(cleanPath(base + '/#' + location));
    return true
  }
}

function ensureSlash () {
  const path = getHash();
  if (path.charAt(0) === '/') {
    return true
  }
  replaceHash('/' + path);
  return false
}

function getHash () {
  // We can't use window.location.hash here because it's not
  // consistent across browsers - Firefox will pre-decode it!
  let href = window.location.href;
  const index = href.indexOf('#');
  // empty path
  if (index < 0) return ''

  href = href.slice(index + 1);

  return href
}

function getUrl (path) {
  const href = window.location.href;
  const i = href.indexOf('#');
  const base = i >= 0 ? href.slice(0, i) : href;
  return `${base}#${path}`
}

function pushHash (path) {
  if (supportsPushState) {
    pushState(getUrl(path));
  } else {
    window.location.hash = path;
  }
}

function replaceHash (path) {
  if (supportsPushState) {
    replaceState(getUrl(path));
  } else {
    window.location.replace(getUrl(path));
  }
}

/*  */

class AbstractHistory extends History {
  
  

  constructor (router, base) {
    super(router, base);
    this.stack = [];
    this.index = -1;
  }

  push (location, onComplete, onAbort) {
    this.transitionTo(
      location,
      route => {
        this.stack = this.stack.slice(0, this.index + 1).concat(route);
        this.index++;
        onComplete && onComplete(route);
      },
      onAbort
    );
  }

  replace (location, onComplete, onAbort) {
    this.transitionTo(
      location,
      route => {
        this.stack = this.stack.slice(0, this.index).concat(route);
        onComplete && onComplete(route);
      },
      onAbort
    );
  }

  go (n) {
    const targetIndex = this.index + n;
    if (targetIndex < 0 || targetIndex >= this.stack.length) {
      return
    }
    const route = this.stack[targetIndex];
    this.confirmTransition(
      route,
      () => {
        const prev = this.current;
        this.index = targetIndex;
        this.updateRoute(route);
        this.router.afterHooks.forEach(hook => {
          hook && hook(route, prev);
        });
      },
      err => {
        if (isNavigationFailure(err, NavigationFailureType.duplicated)) {
          this.index = targetIndex;
        }
      }
    );
  }

  getCurrentLocation () {
    const current = this.stack[this.stack.length - 1];
    return current ? current.fullPath : '/'
  }

  ensureURL () {
    // noop
  }
}

/*  */

class VueRouter {
  
  
  
  
  

  
  
  
  
  
  
  
  
  
  
  
  

  constructor (options = {}) {
    this.app = null;
    this.apps = [];
    this.options = options;
    this.beforeHooks = [];
    this.resolveHooks = [];
    this.afterHooks = [];
    this.matcher = createMatcher(options.routes || [], this);

    let mode = options.mode || 'hash';
    this.fallback =
      mode === 'history' && !supportsPushState && options.fallback !== false;
    if (this.fallback) {
      mode = 'hash';
    }
    if (!inBrowser) {
      mode = 'abstract';
    }
    this.mode = mode;

    switch (mode) {
      case 'history':
        this.history = new HTML5History(this, options.base);
        break
      case 'hash':
        this.history = new HashHistory(this, options.base, this.fallback);
        break
      case 'abstract':
        this.history = new AbstractHistory(this, options.base);
        break
      default:
        {
          assert(false, `invalid mode: ${mode}`);
        }
    }
  }

  match (raw, current, redirectedFrom) {
    return this.matcher.match(raw, current, redirectedFrom)
  }

  get currentRoute () {
    return this.history && this.history.current
  }

  init (app /* Vue component instance */) {
    
      assert(
        install.installed,
        `not installed. Make sure to call \`Vue.use(VueRouter)\` ` +
          `before creating root instance.`
      );

    this.apps.push(app);

    // set up app destroyed handler
    // https://github.com/vuejs/vue-router/issues/2639
    app.$once('hook:destroyed', () => {
      // clean out app from this.apps array once destroyed
      const index = this.apps.indexOf(app);
      if (index > -1) this.apps.splice(index, 1);
      // ensure we still have a main app or null if no apps
      // we do not release the router so it can be reused
      if (this.app === app) this.app = this.apps[0] || null;

      if (!this.app) this.history.teardown();
    });

    // main app previously initialized
    // return as we don't need to set up new history listener
    if (this.app) {
      return
    }

    this.app = app;

    const history = this.history;

    if (history instanceof HTML5History || history instanceof HashHistory) {
      const handleInitialScroll = routeOrError => {
        const from = history.current;
        const expectScroll = this.options.scrollBehavior;
        const supportsScroll = supportsPushState && expectScroll;

        if (supportsScroll && 'fullPath' in routeOrError) {
          handleScroll(this, routeOrError, from, false);
        }
      };
      const setupListeners = routeOrError => {
        history.setupListeners();
        handleInitialScroll(routeOrError);
      };
      history.transitionTo(
        history.getCurrentLocation(),
        setupListeners,
        setupListeners
      );
    }

    history.listen(route => {
      this.apps.forEach(app => {
        app._route = route;
      });
    });
  }

  beforeEach (fn) {
    return registerHook(this.beforeHooks, fn)
  }

  beforeResolve (fn) {
    return registerHook(this.resolveHooks, fn)
  }

  afterEach (fn) {
    return registerHook(this.afterHooks, fn)
  }

  onReady (cb, errorCb) {
    this.history.onReady(cb, errorCb);
  }

  onError (errorCb) {
    this.history.onError(errorCb);
  }

  push (location, onComplete, onAbort) {
    // $flow-disable-line
    if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
      return new Promise((resolve, reject) => {
        this.history.push(location, resolve, reject);
      })
    } else {
      this.history.push(location, onComplete, onAbort);
    }
  }

  replace (location, onComplete, onAbort) {
    // $flow-disable-line
    if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
      return new Promise((resolve, reject) => {
        this.history.replace(location, resolve, reject);
      })
    } else {
      this.history.replace(location, onComplete, onAbort);
    }
  }

  go (n) {
    this.history.go(n);
  }

  back () {
    this.go(-1);
  }

  forward () {
    this.go(1);
  }

  getMatchedComponents (to) {
    const route = to
      ? to.matched
        ? to
        : this.resolve(to).route
      : this.currentRoute;
    if (!route) {
      return []
    }
    return [].concat.apply(
      [],
      route.matched.map(m => {
        return Object.keys(m.components).map(key => {
          return m.components[key]
        })
      })
    )
  }

  resolve (
    to,
    current,
    append
  ) {
    current = current || this.history.current;
    const location = normalizeLocation(to, current, append, this);
    const route = this.match(location, current);
    const fullPath = route.redirectedFrom || route.fullPath;
    const base = this.history.base;
    const href = createHref(base, fullPath, this.mode);
    return {
      location,
      route,
      href,
      // for backwards compat
      normalizedTo: location,
      resolved: route
    }
  }

  getRoutes () {
    return this.matcher.getRoutes()
  }

  addRoute (parentOrRoute, route) {
    this.matcher.addRoute(parentOrRoute, route);
    if (this.history.current !== START) {
      this.history.transitionTo(this.history.getCurrentLocation());
    }
  }

  addRoutes (routes) {
    {
      warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');
    }
    this.matcher.addRoutes(routes);
    if (this.history.current !== START) {
      this.history.transitionTo(this.history.getCurrentLocation());
    }
  }
}

function registerHook (list, fn) {
  list.push(fn);
  return () => {
    const i = list.indexOf(fn);
    if (i > -1) list.splice(i, 1);
  }
}

function createHref (base, fullPath, mode) {
  var path = mode === 'hash' ? '#' + fullPath : fullPath;
  return base ? cleanPath(base + '/' + path) : path
}

VueRouter.install = install;
VueRouter.version = '3.5.1';
VueRouter.isNavigationFailure = isNavigationFailure;
VueRouter.NavigationFailureType = NavigationFailureType;
VueRouter.START_LOCATION = START;

if (inBrowser && window.Vue) {
  window.Vue.use(VueRouter);
}

export default VueRouter;
/*!
  * vue-router v3.5.1
  * (c) 2021 Evan You
  * @license MIT
  */
function t(t,e){for(const n in e)t[n]=e[n];return t}const e=/[!'()*]/g,n=t=>"%"+t.charCodeAt(0).toString(16),r=/%2C/g,o=t=>encodeURIComponent(t).replace(e,n).replace(r,",");function i(t){try{return decodeURIComponent(t)}catch(t){}return t}const s=t=>null==t||"object"==typeof t?t:String(t);function a(t){const e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(t=>{const n=t.replace(/\+/g," ").split("="),r=i(n.shift()),o=n.length>0?i(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]}),e):e}function c(t){const e=t?Object.keys(t).map(e=>{const n=t[e];if(void 0===n)return"";if(null===n)return o(e);if(Array.isArray(n)){const t=[];return n.forEach(n=>{void 0!==n&&(null===n?t.push(o(e)):t.push(o(e)+"="+o(n)))}),t.join("&")}return o(e)+"="+o(n)}).filter(t=>t.length>0).join("&"):null;return e?`?${e}`:""}const u=/\/?$/;function h(t,e,n,r){const o=r&&r.options.stringifyQuery;let i=e.query||{};try{i=l(i)}catch(t){}const s={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:d(e,o),matched:t?f(t):[]};return n&&(s.redirectedFrom=d(n,o)),Object.freeze(s)}function l(t){if(Array.isArray(t))return t.map(l);if(t&&"object"==typeof t){const e={};for(const n in t)e[n]=l(t[n]);return e}return t}const p=h(null,{path:"/"});function f(t){const e=[];for(;t;)e.unshift(t),t=t.parent;return e}function d({path:t,query:e={},hash:n=""},r){return(t||"/")+(r||c)(e)+n}function y(t,e,n){return e===p?t===e:!!e&&(t.path&&e.path?t.path.replace(u,"")===e.path.replace(u,"")&&(n||t.hash===e.hash&&m(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&m(t.query,e.query)&&m(t.params,e.params))))}function m(t={},e={}){if(!t||!e)return t===e;const n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((n,o)=>{const i=t[n];if(r[o]!==n)return!1;const s=e[n];return null==i||null==s?i===s:"object"==typeof i&&"object"==typeof s?m(i,s):String(i)===String(s)})}function g(t){for(let e=0;e<t.matched.length;e++){const n=t.matched[e];for(const t in n.instances){const e=n.instances[t],r=n.enteredCbs[t];if(e&&r){delete n.enteredCbs[t];for(let t=0;t<r.length;t++)e._isBeingDestroyed||r[t](e)}}}}var w={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render(e,{props:n,children:r,parent:o,data:i}){i.routerView=!0;const s=o.$createElement,a=n.name,c=o.$route,u=o._routerViewCache||(o._routerViewCache={});let h=0,l=!1;for(;o&&o._routerRoot!==o;){const t=o.$vnode?o.$vnode.data:{};t.routerView&&h++,t.keepAlive&&o._directInactive&&o._inactive&&(l=!0),o=o.$parent}if(i.routerViewDepth=h,l){const t=u[a],e=t&&t.component;return e?(t.configProps&&b(e,i,t.route,t.configProps),s(e,i,r)):s()}const p=c.matched[h],f=p&&p.components[a];if(!p||!f)return u[a]=null,s();u[a]={component:f},i.registerRouteInstance=(t,e)=>{const n=p.instances[a];(e&&n!==t||!e&&n===t)&&(p.instances[a]=e)},(i.hook||(i.hook={})).prepatch=(t,e)=>{p.instances[a]=e.componentInstance},i.hook.init=t=>{t.data.keepAlive&&t.componentInstance&&t.componentInstance!==p.instances[a]&&(p.instances[a]=t.componentInstance),g(c)};const d=p.props&&p.props[a];return d&&(t(u[a],{route:c,configProps:d}),b(f,i,c,d)),s(f,i,r)}};function b(e,n,r,o){let i=n.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}(r,o);if(i){i=n.props=t({},i);const r=n.attrs=n.attrs||{};for(const t in i)e.props&&t in e.props||(r[t]=i[t],delete i[t])}}function v(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const o=e.split("/");n&&o[o.length-1]||o.pop();const i=t.replace(/^\//,"").split("/");for(let t=0;t<i.length;t++){const e=i[t];".."===e?o.pop():"."!==e&&o.push(e)}return""!==o[0]&&o.unshift(""),o.join("/")}function x(t){return t.replace(/\/\//g,"/")}var R=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},k=B,E=S,C=function(t,e){return T(S(t,e),e)},$=T,A=U,O=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function S(t,e){for(var n,r=[],o=0,i=0,s="",a=e&&e.delimiter||"/";null!=(n=O.exec(t));){var c=n[0],u=n[1],h=n.index;if(s+=t.slice(i,h),i=h+c.length,u)s+=u[1];else{var l=t[i],p=n[2],f=n[3],d=n[4],y=n[5],m=n[6],g=n[7];s&&(r.push(s),s="");var w=null!=p&&null!=l&&l!==p,b="+"===m||"*"===m,v="?"===m||"*"===m,x=n[2]||a,R=d||y;r.push({name:f||o++,prefix:p||"",delimiter:x,optional:v,repeat:b,partial:w,asterisk:!!g,pattern:R?L(R):g?".*":"[^"+P(x)+"]+?"})}}return i<t.length&&(s+=t.substr(i)),s&&r.push(s),r}function j(t){return encodeURI(t).replace(/[\/?#]/g,function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})}function T(t,e){for(var n=new Array(t.length),r=0;r<t.length;r++)"object"==typeof t[r]&&(n[r]=new RegExp("^(?:"+t[r].pattern+")$",q(e)));return function(e,r){for(var o="",i=e||{},s=(r||{}).pretty?j:encodeURIComponent,a=0;a<t.length;a++){var c=t[a];if("string"!=typeof c){var u,h=i[c.name];if(null==h){if(c.optional){c.partial&&(o+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(R(h)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(h)+"`");if(0===h.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var l=0;l<h.length;l++){if(u=s(h[l]),!n[a].test(u))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(u)+"`");o+=(0===l?c.prefix:c.delimiter)+u}}else{if(u=c.asterisk?encodeURI(h).replace(/[?#]/g,function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}):s(h),!n[a].test(u))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+u+'"');o+=c.prefix+u}}else o+=c}return o}}function P(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function L(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function _(t,e){return t.keys=e,t}function q(t){return t&&t.sensitive?"":"i"}function U(t,e,n){R(e)||(n=e||n,e=[]);for(var r=(n=n||{}).strict,o=!1!==n.end,i="",s=0;s<t.length;s++){var a=t[s];if("string"==typeof a)i+=P(a);else{var c=P(a.prefix),u="(?:"+a.pattern+")";e.push(a),a.repeat&&(u+="(?:"+c+u+")*"),i+=u=a.optional?a.partial?c+"("+u+")?":"(?:"+c+"("+u+"))?":c+"("+u+")"}}var h=P(n.delimiter||"/"),l=i.slice(-h.length)===h;return r||(i=(l?i.slice(0,-h.length):i)+"(?:"+h+"(?=$))?"),i+=o?"$":r&&l?"":"(?="+h+"|$)",_(new RegExp("^"+i,q(n)),e)}function B(t,e,n){return R(e)||(n=e||n,e=[]),n=n||{},t instanceof RegExp?function(t,e){var n=t.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)e.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return _(t,e)}(t,e):R(t)?function(t,e,n){for(var r=[],o=0;o<t.length;o++)r.push(B(t[o],e,n).source);return _(new RegExp("(?:"+r.join("|")+")",q(n)),e)}(t,e,n):function(t,e,n){return U(S(t,n),e,n)}(t,e,n)}k.parse=E,k.compile=C,k.tokensToFunction=$,k.tokensToRegExp=A;const I=Object.create(null);function M(t,e,n){e=e||{};try{const n=I[t]||(I[t]=k.compile(t));return"string"==typeof e.pathMatch&&(e[0]=e.pathMatch),n(e,{pretty:!0})}catch(t){return""}finally{delete e[0]}}function V(e,n,r,o){let i="string"==typeof e?{path:e}:e;if(i._normalized)return i;if(i.name){const n=(i=t({},e)).params;return n&&"object"==typeof n&&(i.params=t({},n)),i}if(!i.path&&i.params&&n){(i=t({},i))._normalized=!0;const e=t(t({},n.params),i.params);if(n.name)i.name=n.name,i.params=e;else if(n.matched.length){const t=n.matched[n.matched.length-1].path;i.path=M(t,e,n.path)}return i}const c=function(t){let e="",n="";const r=t.indexOf("#");r>=0&&(e=t.slice(r),t=t.slice(0,r));const o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(i.path||""),u=n&&n.path||"/",h=c.path?v(c.path,u,r||i.append):u,l=function(t,e={},n){const r=n||a;let o;try{o=r(t||"")}catch(t){o={}}for(const t in e){const n=e[t];o[t]=Array.isArray(n)?n.map(s):s(n)}return o}(c.query,i.query,o&&o.options.parseQuery);let p=i.hash||c.hash;return p&&"#"!==p.charAt(0)&&(p=`#${p}`),{_normalized:!0,path:h,query:l,hash:p}}const H=[String,Object],N=[String,Array],F=()=>{};var z={name:"RouterLink",props:{to:{type:H,required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:N,default:"click"}},render(e){const n=this.$router,r=this.$route,{location:o,route:i,href:s}=n.resolve(this.to,r,this.append),a={},c=n.options.linkActiveClass,l=n.options.linkExactActiveClass,p=null==c?"router-link-active":c,f=null==l?"router-link-exact-active":l,d=null==this.activeClass?p:this.activeClass,m=null==this.exactActiveClass?f:this.exactActiveClass,g=i.redirectedFrom?h(null,V(i.redirectedFrom),null,n):i;a[m]=y(r,g,this.exactPath),a[d]=this.exact||this.exactPath?a[m]:function(t,e){return 0===t.path.replace(u,"/").indexOf(e.path.replace(u,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(const n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,g);const w=a[m]?this.ariaCurrentValue:null,b=t=>{D(t)&&(this.replace?n.replace(o,F):n.push(o,F))},v={click:D};Array.isArray(this.event)?this.event.forEach(t=>{v[t]=b}):v[this.event]=b;const x={class:a},R=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:i,navigate:b,isActive:a[d],isExactActive:a[m]});if(R){if(1===R.length)return R[0];if(R.length>1||!R.length)return 0===R.length?e():e("span",{},R)}if("a"===this.tag)x.on=v,x.attrs={href:s,"aria-current":w};else{const e=function t(e){if(e){let n;for(let r=0;r<e.length;r++){if("a"===(n=e[r]).tag)return n;if(n.children&&(n=t(n.children)))return n}}}(this.$slots.default);if(e){e.isStatic=!1;const n=e.data=t({},e.data);n.on=n.on||{};for(const t in n.on){const e=n.on[t];t in v&&(n.on[t]=Array.isArray(e)?e:[e])}for(const t in v)t in n.on?n.on[t].push(v[t]):n.on[t]=b;const r=e.data.attrs=t({},e.data.attrs);r.href=s,r["aria-current"]=w}else x.on=v}return e(this.tag,x,this.$slots.default)}};function D(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){const e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}let K;const J="undefined"!=typeof window;function Q(t,e,n,r,o){const i=e||[],s=n||Object.create(null),a=r||Object.create(null);t.forEach(t=>{!function t(e,n,r,o,i,s){const{path:a,name:c}=o;const u=o.pathToRegexpOptions||{};const h=function(t,e,n){n||(t=t.replace(/\/$/,""));return"/"===t[0]?t:null==e?t:x(`${e.path}/${t}`)}(a,i,u.strict);"boolean"==typeof o.caseSensitive&&(u.sensitive=o.caseSensitive);const l={path:h,regex:X(h,u),components:o.components||{default:o.component},alias:o.alias?"string"==typeof o.alias?[o.alias]:o.alias:[],instances:{},enteredCbs:{},name:c,parent:i,matchAs:s,redirect:o.redirect,beforeEnter:o.beforeEnter,meta:o.meta||{},props:null==o.props?{}:o.components?o.props:{default:o.props}};o.children&&o.children.forEach(o=>{const i=s?x(`${s}/${o.path}`):void 0;t(e,n,r,o,l,i)});n[l.path]||(e.push(l.path),n[l.path]=l);if(void 0!==o.alias){const s=Array.isArray(o.alias)?o.alias:[o.alias];for(let a=0;a<s.length;++a){const c=s[a],u={path:c,children:o.children};t(e,n,r,u,i,l.path||"/")}}c&&(r[c]||(r[c]=l))}(i,s,a,t,o)});for(let t=0,e=i.length;t<e;t++)"*"===i[t]&&(i.push(i.splice(t,1)[0]),e--,t--);return{pathList:i,pathMap:s,nameMap:a}}function X(t,e){return k(t,[],e)}function Y(t,e){const{pathList:n,pathMap:r,nameMap:o}=Q(t);function i(t,i,s){const c=V(t,i,!1,e),{name:u}=c;if(u){const t=o[u];if(!t)return a(null,c);const e=t.regex.keys.filter(t=>!t.optional).map(t=>t.name);if("object"!=typeof c.params&&(c.params={}),i&&"object"==typeof i.params)for(const t in i.params)!(t in c.params)&&e.indexOf(t)>-1&&(c.params[t]=i.params[t]);return c.path=M(t.path,c.params),a(t,c,s)}if(c.path){c.params={};for(let t=0;t<n.length;t++){const e=n[t],o=r[e];if(W(o.regex,c.path,c.params))return a(o,c,s)}}return a(null,c)}function s(t,n){const r=t.redirect;let s="function"==typeof r?r(h(t,n,null,e)):r;if("string"==typeof s&&(s={path:s}),!s||"object"!=typeof s)return a(null,n);const c=s,{name:u,path:l}=c;let{query:p,hash:f,params:d}=n;if(p=c.hasOwnProperty("query")?c.query:p,f=c.hasOwnProperty("hash")?c.hash:f,d=c.hasOwnProperty("params")?c.params:d,u){o[u];return i({_normalized:!0,name:u,query:p,hash:f,params:d},void 0,n)}if(l){return i({_normalized:!0,path:M(function(t,e){return v(t,e.parent?e.parent.path:"/",!0)}(l,t),d),query:p,hash:f},void 0,n)}return a(null,n)}function a(t,n,r){return t&&t.redirect?s(t,r||n):t&&t.matchAs?function(t,e,n){const r=i({_normalized:!0,path:M(n,e.params)});if(r){const t=r.matched,n=t[t.length-1];return e.params=r.params,a(n,e)}return a(null,e)}(0,n,t.matchAs):h(t,n,r,e)}return{match:i,addRoute:function(t,e){const i="object"!=typeof t?o[t]:void 0;Q([e||t],n,r,o,i),i&&Q(i.alias.map(t=>({path:t,children:[e]})),n,r,o,i)},getRoutes:function(){return n.map(t=>r[t])},addRoutes:function(t){Q(t,n,r,o)}}}function W(t,e,n){const r=e.match(t);if(!r)return!1;if(!n)return!0;for(let e=1,o=r.length;e<o;++e){const o=t.keys[e-1];o&&(n[o.name||"pathMatch"]="string"==typeof r[e]?i(r[e]):r[e])}return!0}const G=J&&window.performance&&window.performance.now?window.performance:Date;function Z(){return G.now().toFixed(3)}let tt=Z();function et(){return tt}function nt(t){return tt=t}const rt=Object.create(null);function ot(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");const e=window.location.protocol+"//"+window.location.host,n=window.location.href.replace(e,""),r=t({},window.history.state);return r.key=et(),window.history.replaceState(r,"",n),window.addEventListener("popstate",at),()=>{window.removeEventListener("popstate",at)}}function it(t,e,n,r){if(!t.app)return;const o=t.options.scrollBehavior;o&&t.app.$nextTick(()=>{const i=function(){const t=et();if(t)return rt[t]}(),s=o.call(t,e,n,r?i:null);s&&("function"==typeof s.then?s.then(t=>{pt(t,i)}).catch(t=>{}):pt(s,i))})}function st(){const t=et();t&&(rt[t]={x:window.pageXOffset,y:window.pageYOffset})}function at(t){st(),t.state&&t.state.key&&nt(t.state.key)}function ct(t){return ht(t.x)||ht(t.y)}function ut(t){return{x:ht(t.x)?t.x:window.pageXOffset,y:ht(t.y)?t.y:window.pageYOffset}}function ht(t){return"number"==typeof t}const lt=/^#\d/;function pt(t,e){const n="object"==typeof t;if(n&&"string"==typeof t.selector){const n=lt.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(n){let o=t.offset&&"object"==typeof t.offset?t.offset:{};e=function(t,e){const n=document.documentElement.getBoundingClientRect(),r=t.getBoundingClientRect();return{x:r.left-n.left-e.x,y:r.top-n.top-e.y}}(n,o={x:ht((r=o).x)?r.x:0,y:ht(r.y)?r.y:0})}else ct(t)&&(e=ut(t))}else n&&ct(t)&&(e=ut(t));var r;e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}const ft=J&&function(){const t=window.navigator.userAgent;return(-1===t.indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&(window.history&&"function"==typeof window.history.pushState)}();function dt(e,n){st();const r=window.history;try{if(n){const n=t({},r.state);n.key=et(),r.replaceState(n,"",e)}else r.pushState({key:nt(Z())},"",e)}catch(t){window.location[n?"replace":"assign"](e)}}function yt(t){dt(t,!0)}function mt(t,e,n){const r=o=>{o>=t.length?n():t[o]?e(t[o],()=>{r(o+1)}):r(o+1)};r(0)}const gt={redirected:2,aborted:4,cancelled:8,duplicated:16};function wt(t,e){return vt(t,e,gt.redirected,`Redirected when going from "${t.fullPath}" to "${function(t){if("string"==typeof t)return t;if("path"in t)return t.path;const e={};return xt.forEach(n=>{n in t&&(e[n]=t[n])}),JSON.stringify(e,null,2)}(e)}" via a navigation guard.`)}function bt(t,e){return vt(t,e,gt.cancelled,`Navigation cancelled from "${t.fullPath}" to "${e.fullPath}" with a new navigation.`)}function vt(t,e,n,r){const o=new Error(r);return o._isRouter=!0,o.from=t,o.to=e,o.type=n,o}const xt=["params","query","hash"];function Rt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function kt(t,e){return Rt(t)&&t._isRouter&&(null==e||t.type===e)}function Et(t){return(e,n,r)=>{let o=!1,i=0,s=null;Ct(t,(t,e,n,a)=>{if("function"==typeof t&&void 0===t.cid){o=!0,i++;const e=Ot(e=>{(function(t){return t.__esModule||At&&"Module"===t[Symbol.toStringTag]})(e)&&(e=e.default),t.resolved="function"==typeof e?e:K.extend(e),n.components[a]=e,--i<=0&&r()}),c=Ot(t=>{const e=`Failed to resolve async component ${a}: ${t}`;s||(s=Rt(t)?t:new Error(e),r(s))});let u;try{u=t(e,c)}catch(t){c(t)}if(u)if("function"==typeof u.then)u.then(e,c);else{const t=u.component;t&&"function"==typeof t.then&&t.then(e,c)}}}),o||r()}}function Ct(t,e){return $t(t.map(t=>Object.keys(t.components).map(n=>e(t.components[n],t.instances[n],t,n))))}function $t(t){return Array.prototype.concat.apply([],t)}const At="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ot(t){let e=!1;return function(...n){if(!e)return e=!0,t.apply(this,n)}}class St{constructor(t,e){this.router=t,this.base=function(t){if(!t)if(J){const e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=p,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]}listen(t){this.cb=t}onReady(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))}onError(t){this.errorCbs.push(t)}transitionTo(t,e,n){let r;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach(e=>{e(t)}),t}const o=this.current;this.confirmTransition(r,()=>{this.updateRoute(r),e&&e(r),this.ensureURL(),this.router.afterHooks.forEach(t=>{t&&t(r,o)}),this.ready||(this.ready=!0,this.readyCbs.forEach(t=>{t(r)}))},t=>{n&&n(t),t&&!this.ready&&(kt(t,gt.redirected)&&o===p||(this.ready=!0,this.readyErrorCbs.forEach(e=>{e(t)})))})}confirmTransition(t,e,n){const r=this.current;this.pending=t;const o=t=>{!kt(t)&&Rt(t)&&(this.errorCbs.length?this.errorCbs.forEach(e=>{e(t)}):console.error(t)),n&&n(t)},i=t.matched.length-1,s=r.matched.length-1;if(y(t,r)&&i===s&&t.matched[i]===r.matched[s])return this.ensureURL(),o(function(t,e){const n=vt(t,e,gt.duplicated,`Avoided redundant navigation to current location: "${t.fullPath}".`);return n.name="NavigationDuplicated",n}(r,t));const{updated:a,deactivated:c,activated:u}=function(t,e){let n;const r=Math.max(t.length,e.length);for(n=0;n<r&&t[n]===e[n];n++);return{updated:e.slice(0,n),activated:e.slice(n),deactivated:t.slice(n)}}(this.current.matched,t.matched),h=[].concat(function(t){return jt(t,"beforeRouteLeave",Tt,!0)}(c),this.router.beforeHooks,function(t){return jt(t,"beforeRouteUpdate",Tt)}(a),u.map(t=>t.beforeEnter),Et(u)),l=(e,n)=>{if(this.pending!==t)return o(bt(r,t));try{e(t,r,e=>{!1===e?(this.ensureURL(!0),o(function(t,e){return vt(t,e,gt.aborted,`Navigation aborted from "${t.fullPath}" to "${e.fullPath}" via a navigation guard.`)}(r,t))):Rt(e)?(this.ensureURL(!0),o(e)):"string"==typeof e||"object"==typeof e&&("string"==typeof e.path||"string"==typeof e.name)?(o(wt(r,t)),"object"==typeof e&&e.replace?this.replace(e):this.push(e)):n(e)})}catch(t){o(t)}};mt(h,l,()=>{mt(function(t){return jt(t,"beforeRouteEnter",(t,e,n,r)=>(function(t,e,n){return function(r,o,i){return t(r,o,t=>{"function"==typeof t&&(e.enteredCbs[n]||(e.enteredCbs[n]=[]),e.enteredCbs[n].push(t)),i(t)})}})(t,n,r))}(u).concat(this.router.resolveHooks),l,()=>{if(this.pending!==t)return o(bt(r,t));this.pending=null,e(t),this.router.app&&this.router.app.$nextTick(()=>{g(t)})})})}updateRoute(t){this.current=t,this.cb&&this.cb(t)}setupListeners(){}teardown(){this.listeners.forEach(t=>{t()}),this.listeners=[],this.current=p,this.pending=null}}function jt(t,e,n,r){const o=Ct(t,(t,r,o,i)=>{const s=function(t,e){"function"!=typeof t&&(t=K.extend(t));return t.options[e]}(t,e);if(s)return Array.isArray(s)?s.map(t=>n(t,r,o,i)):n(s,r,o,i)});return $t(r?o.reverse():o)}function Tt(t,e){if(e)return function(){return t.apply(e,arguments)}}class Pt extends St{constructor(t,e){super(t,e),this._startLocation=Lt(this.base)}setupListeners(){if(this.listeners.length>0)return;const t=this.router,e=t.options.scrollBehavior,n=ft&&e;n&&this.listeners.push(ot());const r=()=>{const e=this.current,r=Lt(this.base);this.current===p&&r===this._startLocation||this.transitionTo(r,r=>{n&&it(t,r,e,!0)})};window.addEventListener("popstate",r),this.listeners.push(()=>{window.removeEventListener("popstate",r)})}go(t){window.history.go(t)}push(t,e,n){const{current:r}=this;this.transitionTo(t,t=>{dt(x(this.base+t.fullPath)),it(this.router,t,r,!1),e&&e(t)},n)}replace(t,e,n){const{current:r}=this;this.transitionTo(t,t=>{yt(x(this.base+t.fullPath)),it(this.router,t,r,!1),e&&e(t)},n)}ensureURL(t){if(Lt(this.base)!==this.current.fullPath){const e=x(this.base+this.current.fullPath);t?dt(e):yt(e)}}getCurrentLocation(){return Lt(this.base)}}function Lt(t){let e=window.location.pathname;return t&&0===e.toLowerCase().indexOf(t.toLowerCase())&&(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}class _t extends St{constructor(t,e,n){super(t,e),n&&function(t){const e=Lt(t);if(!/^\/#/.test(e))return window.location.replace(x(t+"/#"+e)),!0}(this.base)||qt()}setupListeners(){if(this.listeners.length>0)return;const t=this.router.options.scrollBehavior,e=ft&&t;e&&this.listeners.push(ot());const n=()=>{const t=this.current;qt()&&this.transitionTo(Ut(),n=>{e&&it(this.router,n,t,!0),ft||Mt(n.fullPath)})},r=ft?"popstate":"hashchange";window.addEventListener(r,n),this.listeners.push(()=>{window.removeEventListener(r,n)})}push(t,e,n){const{current:r}=this;this.transitionTo(t,t=>{It(t.fullPath),it(this.router,t,r,!1),e&&e(t)},n)}replace(t,e,n){const{current:r}=this;this.transitionTo(t,t=>{Mt(t.fullPath),it(this.router,t,r,!1),e&&e(t)},n)}go(t){window.history.go(t)}ensureURL(t){const e=this.current.fullPath;Ut()!==e&&(t?It(e):Mt(e))}getCurrentLocation(){return Ut()}}function qt(){const t=Ut();return"/"===t.charAt(0)||(Mt("/"+t),!1)}function Ut(){let t=window.location.href;const e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Bt(t){const e=window.location.href,n=e.indexOf("#");return`${n>=0?e.slice(0,n):e}#${t}`}function It(t){ft?dt(Bt(t)):window.location.hash=t}function Mt(t){ft?yt(Bt(t)):window.location.replace(Bt(t))}class Vt extends St{constructor(t,e){super(t,e),this.stack=[],this.index=-1}push(t,e,n){this.transitionTo(t,t=>{this.stack=this.stack.slice(0,this.index+1).concat(t),this.index++,e&&e(t)},n)}replace(t,e,n){this.transitionTo(t,t=>{this.stack=this.stack.slice(0,this.index).concat(t),e&&e(t)},n)}go(t){const e=this.index+t;if(e<0||e>=this.stack.length)return;const n=this.stack[e];this.confirmTransition(n,()=>{const t=this.current;this.index=e,this.updateRoute(n),this.router.afterHooks.forEach(e=>{e&&e(n,t)})},t=>{kt(t,gt.duplicated)&&(this.index=e)})}getCurrentLocation(){const t=this.stack[this.stack.length-1];return t?t.fullPath:"/"}ensureURL(){}}class Ht{constructor(t={}){this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Y(t.routes||[],this);let e=t.mode||"hash";switch(this.fallback="history"===e&&!ft&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new Pt(this,t.base);break;case"hash":this.history=new _t(this,t.base,this.fallback);break;case"abstract":this.history=new Vt(this,t.base)}}match(t,e,n){return this.matcher.match(t,e,n)}get currentRoute(){return this.history&&this.history.current}init(t){if(this.apps.push(t),t.$once("hook:destroyed",()=>{const e=this.apps.indexOf(t);e>-1&&this.apps.splice(e,1),this.app===t&&(this.app=this.apps[0]||null),this.app||this.history.teardown()}),this.app)return;this.app=t;const e=this.history;if(e instanceof Pt||e instanceof _t){const t=t=>{const n=e.current,r=this.options.scrollBehavior;ft&&r&&"fullPath"in t&&it(this,t,n,!1)},n=n=>{e.setupListeners(),t(n)};e.transitionTo(e.getCurrentLocation(),n,n)}e.listen(t=>{this.apps.forEach(e=>{e._route=t})})}beforeEach(t){return Nt(this.beforeHooks,t)}beforeResolve(t){return Nt(this.resolveHooks,t)}afterEach(t){return Nt(this.afterHooks,t)}onReady(t,e){this.history.onReady(t,e)}onError(t){this.history.onError(t)}push(t,e,n){if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((e,n)=>{this.history.push(t,e,n)});this.history.push(t,e,n)}replace(t,e,n){if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((e,n)=>{this.history.replace(t,e,n)});this.history.replace(t,e,n)}go(t){this.history.go(t)}back(){this.go(-1)}forward(){this.go(1)}getMatchedComponents(t){const e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(t=>Object.keys(t.components).map(e=>t.components[e]))):[]}resolve(t,e,n){const r=V(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?x(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}}getRoutes(){return this.matcher.getRoutes()}addRoute(t,e){this.matcher.addRoute(t,e),this.history.current!==p&&this.history.transitionTo(this.history.getCurrentLocation())}addRoutes(t){this.matcher.addRoutes(t),this.history.current!==p&&this.history.transitionTo(this.history.getCurrentLocation())}}function Nt(t,e){return t.push(e),()=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ht.install=function t(e){if(t.installed&&K===e)return;t.installed=!0,K=e;const n=t=>void 0!==t,r=(t,e)=>{let r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get(){return this._routerRoot._route}}),e.component("RouterView",w),e.component("RouterLink",z);const o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created},Ht.version="3.5.1",Ht.isNavigationFailure=kt,Ht.NavigationFailureType=gt,Ht.START_LOCATION=p,J&&window.Vue&&window.Vue.use(Ht);export default Ht;/*!
  * vue-router v3.5.1
  * (c) 2021 Evan You
  * @license MIT
  */
/*  */

function assert (condition, message) {
  if (!condition) {
    throw new Error(("[vue-router] " + message))
  }
}

function warn (condition, message) {
  if (process.env.NODE_ENV !== 'production' && !condition) {
    typeof console !== 'undefined' && console.warn(("[vue-router] " + message));
  }
}

function extend (a, b) {
  for (var key in b) {
    a[key] = b[key];
  }
  return a
}

/*  */

var encodeReserveRE = /[!'()*]/g;
var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };
var commaRE = /%2C/g;

// fixed encodeURIComponent which is more conformant to RFC3986:
// - escapes [!'()*]
// - preserve commas
var encode = function (str) { return encodeURIComponent(str)
    .replace(encodeReserveRE, encodeReserveReplacer)
    .replace(commaRE, ','); };

function decode (str) {
  try {
    return decodeURIComponent(str)
  } catch (err) {
    if (process.env.NODE_ENV !== 'production') {
      warn(false, ("Error decoding \"" + str + "\". Leaving it intact."));
    }
  }
  return str
}

function resolveQuery (
  query,
  extraQuery,
  _parseQuery
) {
  if ( extraQuery === void 0 ) extraQuery = {};

  var parse = _parseQuery || parseQuery;
  var parsedQuery;
  try {
    parsedQuery = parse(query || '');
  } catch (e) {
    process.env.NODE_ENV !== 'production' && warn(false, e.message);
    parsedQuery = {};
  }
  for (var key in extraQuery) {
    var value = extraQuery[key];
    parsedQuery[key] = Array.isArray(value)
      ? value.map(castQueryParamValue)
      : castQueryParamValue(value);
  }
  return parsedQuery
}

var castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };

function parseQuery (query) {
  var res = {};

  query = query.trim().replace(/^(\?|#|&)/, '');

  if (!query) {
    return res
  }

  query.split('&').forEach(function (param) {
    var parts = param.replace(/\+/g, ' ').split('=');
    var key = decode(parts.shift());
    var val = parts.length > 0 ? decode(parts.join('=')) : null;

    if (res[key] === undefined) {
      res[key] = val;
    } else if (Array.isArray(res[key])) {
      res[key].push(val);
    } else {
      res[key] = [res[key], val];
    }
  });

  return res
}

function stringifyQuery (obj) {
  var res = obj
    ? Object.keys(obj)
      .map(function (key) {
        var val = obj[key];

        if (val === undefined) {
          return ''
        }

        if (val === null) {
          return encode(key)
        }

        if (Array.isArray(val)) {
          var result = [];
          val.forEach(function (val2) {
            if (val2 === undefined) {
              return
            }
            if (val2 === null) {
              result.push(encode(key));
            } else {
              result.push(encode(key) + '=' + encode(val2));
            }
          });
          return result.join('&')
        }

        return encode(key) + '=' + encode(val)
      })
      .filter(function (x) { return x.length > 0; })
      .join('&')
    : null;
  return res ? ("?" + res) : ''
}

/*  */

var trailingSlashRE = /\/?$/;

function createRoute (
  record,
  location,
  redirectedFrom,
  router
) {
  var stringifyQuery = router && router.options.stringifyQuery;

  var query = location.query || {};
  try {
    query = clone(query);
  } catch (e) {}

  var route = {
    name: location.name || (record && record.name),
    meta: (record && record.meta) || {},
    path: location.path || '/',
    hash: location.hash || '',
    query: query,
    params: location.params || {},
    fullPath: getFullPath(location, stringifyQuery),
    matched: record ? formatMatch(record) : []
  };
  if (redirectedFrom) {
    route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);
  }
  return Object.freeze(route)
}

function clone (value) {
  if (Array.isArray(value)) {
    return value.map(clone)
  } else if (value && typeof value === 'object') {
    var res = {};
    for (var key in value) {
      res[key] = clone(value[key]);
    }
    return res
  } else {
    return value
  }
}

// the starting route that represents the initial state
var START = createRoute(null, {
  path: '/'
});

function formatMatch (record) {
  var res = [];
  while (record) {
    res.unshift(record);
    record = record.parent;
  }
  return res
}

function getFullPath (
  ref,
  _stringifyQuery
) {
  var path = ref.path;
  var query = ref.query; if ( query === void 0 ) query = {};
  var hash = ref.hash; if ( hash === void 0 ) hash = '';

  var stringify = _stringifyQuery || stringifyQuery;
  return (path || '/') + stringify(query) + hash
}

function isSameRoute (a, b, onlyPath) {
  if (b === START) {
    return a === b
  } else if (!b) {
    return false
  } else if (a.path && b.path) {
    return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||
      a.hash === b.hash &&
      isObjectEqual(a.query, b.query))
  } else if (a.name && b.name) {
    return (
      a.name === b.name &&
      (onlyPath || (
        a.hash === b.hash &&
      isObjectEqual(a.query, b.query) &&
      isObjectEqual(a.params, b.params))
      )
    )
  } else {
    return false
  }
}

function isObjectEqual (a, b) {
  if ( a === void 0 ) a = {};
  if ( b === void 0 ) b = {};

  // handle null value #1566
  if (!a || !b) { return a === b }
  var aKeys = Object.keys(a).sort();
  var bKeys = Object.keys(b).sort();
  if (aKeys.length !== bKeys.length) {
    return false
  }
  return aKeys.every(function (key, i) {
    var aVal = a[key];
    var bKey = bKeys[i];
    if (bKey !== key) { return false }
    var bVal = b[key];
    // query values can be null and undefined
    if (aVal == null || bVal == null) { return aVal === bVal }
    // check nested equality
    if (typeof aVal === 'object' && typeof bVal === 'object') {
      return isObjectEqual(aVal, bVal)
    }
    return String(aVal) === String(bVal)
  })
}

function isIncludedRoute (current, target) {
  return (
    current.path.replace(trailingSlashRE, '/').indexOf(
      target.path.replace(trailingSlashRE, '/')
    ) === 0 &&
    (!target.hash || current.hash === target.hash) &&
    queryIncludes(current.query, target.query)
  )
}

function queryIncludes (current, target) {
  for (var key in target) {
    if (!(key in current)) {
      return false
    }
  }
  return true
}

function handleRouteEntered (route) {
  for (var i = 0; i < route.matched.length; i++) {
    var record = route.matched[i];
    for (var name in record.instances) {
      var instance = record.instances[name];
      var cbs = record.enteredCbs[name];
      if (!instance || !cbs) { continue }
      delete record.enteredCbs[name];
      for (var i$1 = 0; i$1 < cbs.length; i$1++) {
        if (!instance._isBeingDestroyed) { cbs[i$1](instance); }
      }
    }
  }
}

var View = {
  name: 'RouterView',
  functional: true,
  props: {
    name: {
      type: String,
      default: 'default'
    }
  },
  render: function render (_, ref) {
    var props = ref.props;
    var children = ref.children;
    var parent = ref.parent;
    var data = ref.data;

    // used by devtools to display a router-view badge
    data.routerView = true;

    // directly use parent context's createElement() function
    // so that components rendered by router-view can resolve named slots
    var h = parent.$createElement;
    var name = props.name;
    var route = parent.$route;
    var cache = parent._routerViewCache || (parent._routerViewCache = {});

    // determine current view depth, also check to see if the tree
    // has been toggled inactive but kept-alive.
    var depth = 0;
    var inactive = false;
    while (parent && parent._routerRoot !== parent) {
      var vnodeData = parent.$vnode ? parent.$vnode.data : {};
      if (vnodeData.routerView) {
        depth++;
      }
      if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {
        inactive = true;
      }
      parent = parent.$parent;
    }
    data.routerViewDepth = depth;

    // render previous view if the tree is inactive and kept-alive
    if (inactive) {
      var cachedData = cache[name];
      var cachedComponent = cachedData && cachedData.component;
      if (cachedComponent) {
        // #2301
        // pass props
        if (cachedData.configProps) {
          fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);
        }
        return h(cachedComponent, data, children)
      } else {
        // render previous empty view
        return h()
      }
    }

    var matched = route.matched[depth];
    var component = matched && matched.components[name];

    // render empty node if no matched route or no config component
    if (!matched || !component) {
      cache[name] = null;
      return h()
    }

    // cache component
    cache[name] = { component: component };

    // attach instance registration hook
    // this will be called in the instance's injected lifecycle hooks
    data.registerRouteInstance = function (vm, val) {
      // val could be undefined for unregistration
      var current = matched.instances[name];
      if (
        (val && current !== vm) ||
        (!val && current === vm)
      ) {
        matched.instances[name] = val;
      }
    }

    // also register instance in prepatch hook
    // in case the same component instance is reused across different routes
    ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {
      matched.instances[name] = vnode.componentInstance;
    };

    // register instance in init hook
    // in case kept-alive component be actived when routes changed
    data.hook.init = function (vnode) {
      if (vnode.data.keepAlive &&
        vnode.componentInstance &&
        vnode.componentInstance !== matched.instances[name]
      ) {
        matched.instances[name] = vnode.componentInstance;
      }

      // if the route transition has already been confirmed then we weren't
      // able to call the cbs during confirmation as the component was not
      // registered yet, so we call it here.
      handleRouteEntered(route);
    };

    var configProps = matched.props && matched.props[name];
    // save route and configProps in cache
    if (configProps) {
      extend(cache[name], {
        route: route,
        configProps: configProps
      });
      fillPropsinData(component, data, route, configProps);
    }

    return h(component, data, children)
  }
};

function fillPropsinData (component, data, route, configProps) {
  // resolve props
  var propsToPass = data.props = resolveProps(route, configProps);
  if (propsToPass) {
    // clone to prevent mutation
    propsToPass = data.props = extend({}, propsToPass);
    // pass non-declared props as attrs
    var attrs = data.attrs = data.attrs || {};
    for (var key in propsToPass) {
      if (!component.props || !(key in component.props)) {
        attrs[key] = propsToPass[key];
        delete propsToPass[key];
      }
    }
  }
}

function resolveProps (route, config) {
  switch (typeof config) {
    case 'undefined':
      return
    case 'object':
      return config
    case 'function':
      return config(route)
    case 'boolean':
      return config ? route.params : undefined
    default:
      if (process.env.NODE_ENV !== 'production') {
        warn(
          false,
          "props in \"" + (route.path) + "\" is a " + (typeof config) + ", " +
          "expecting an object, function or boolean."
        );
      }
  }
}

/*  */

function resolvePath (
  relative,
  base,
  append
) {
  var firstChar = relative.charAt(0);
  if (firstChar === '/') {
    return relative
  }

  if (firstChar === '?' || firstChar === '#') {
    return base + relative
  }

  var stack = base.split('/');

  // remove trailing segment if:
  // - not appending
  // - appending to trailing slash (last segment is empty)
  if (!append || !stack[stack.length - 1]) {
    stack.pop();
  }

  // resolve relative path
  var segments = relative.replace(/^\//, '').split('/');
  for (var i = 0; i < segments.length; i++) {
    var segment = segments[i];
    if (segment === '..') {
      stack.pop();
    } else if (segment !== '.') {
      stack.push(segment);
    }
  }

  // ensure leading slash
  if (stack[0] !== '') {
    stack.unshift('');
  }

  return stack.join('/')
}

function parsePath (path) {
  var hash = '';
  var query = '';

  var hashIndex = path.indexOf('#');
  if (hashIndex >= 0) {
    hash = path.slice(hashIndex);
    path = path.slice(0, hashIndex);
  }

  var queryIndex = path.indexOf('?');
  if (queryIndex >= 0) {
    query = path.slice(queryIndex + 1);
    path = path.slice(0, queryIndex);
  }

  return {
    path: path,
    query: query,
    hash: hash
  }
}

function cleanPath (path) {
  return path.replace(/\/\//g, '/')
}

var isarray = Array.isArray || function (arr) {
  return Object.prototype.toString.call(arr) == '[object Array]';
};

/**
 * Expose `pathToRegexp`.
 */
var pathToRegexp_1 = pathToRegexp;
var parse_1 = parse;
var compile_1 = compile;
var tokensToFunction_1 = tokensToFunction;
var tokensToRegExp_1 = tokensToRegExp;

/**
 * The main path matching regexp utility.
 *
 * @type {RegExp}
 */
var PATH_REGEXP = new RegExp([
  // Match escaped characters that would otherwise appear in future matches.
  // This allows the user to escape special characters that won't transform.
  '(\\\\.)',
  // Match Express-style parameters and un-named parameters with a prefix
  // and optional suffixes. Matches appear as:
  //
  // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
  // "/route(\\d+)"  => [undefined, undefined, undefined, "\d+", undefined, undefined]
  // "/*"            => ["/", undefined, undefined, undefined, undefined, "*"]
  '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
].join('|'), 'g');

/**
 * Parse a string for the raw tokens.
 *
 * @param  {string}  str
 * @param  {Object=} options
 * @return {!Array}
 */
function parse (str, options) {
  var tokens = [];
  var key = 0;
  var index = 0;
  var path = '';
  var defaultDelimiter = options && options.delimiter || '/';
  var res;

  while ((res = PATH_REGEXP.exec(str)) != null) {
    var m = res[0];
    var escaped = res[1];
    var offset = res.index;
    path += str.slice(index, offset);
    index = offset + m.length;

    // Ignore already escaped sequences.
    if (escaped) {
      path += escaped[1];
      continue
    }

    var next = str[index];
    var prefix = res[2];
    var name = res[3];
    var capture = res[4];
    var group = res[5];
    var modifier = res[6];
    var asterisk = res[7];

    // Push the current path onto the tokens.
    if (path) {
      tokens.push(path);
      path = '';
    }

    var partial = prefix != null && next != null && next !== prefix;
    var repeat = modifier === '+' || modifier === '*';
    var optional = modifier === '?' || modifier === '*';
    var delimiter = res[2] || defaultDelimiter;
    var pattern = capture || group;

    tokens.push({
      name: name || key++,
      prefix: prefix || '',
      delimiter: delimiter,
      optional: optional,
      repeat: repeat,
      partial: partial,
      asterisk: !!asterisk,
      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
    });
  }

  // Match any characters still remaining.
  if (index < str.length) {
    path += str.substr(index);
  }

  // If the path exists, push it onto the end.
  if (path) {
    tokens.push(path);
  }

  return tokens
}

/**
 * Compile a string to a template function for the path.
 *
 * @param  {string}             str
 * @param  {Object=}            options
 * @return {!function(Object=, Object=)}
 */
function compile (str, options) {
  return tokensToFunction(parse(str, options), options)
}

/**
 * Prettier encoding of URI path segments.
 *
 * @param  {string}
 * @return {string}
 */
function encodeURIComponentPretty (str) {
  return encodeURI(str).replace(/[\/?#]/g, function (c) {
    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  })
}

/**
 * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
 *
 * @param  {string}
 * @return {string}
 */
function encodeAsterisk (str) {
  return encodeURI(str).replace(/[?#]/g, function (c) {
    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  })
}

/**
 * Expose a method for transforming tokens into the path function.
 */
function tokensToFunction (tokens, options) {
  // Compile all the tokens into regexps.
  var matches = new Array(tokens.length);

  // Compile all the patterns before compilation.
  for (var i = 0; i < tokens.length; i++) {
    if (typeof tokens[i] === 'object') {
      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));
    }
  }

  return function (obj, opts) {
    var path = '';
    var data = obj || {};
    var options = opts || {};
    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;

    for (var i = 0; i < tokens.length; i++) {
      var token = tokens[i];

      if (typeof token === 'string') {
        path += token;

        continue
      }

      var value = data[token.name];
      var segment;

      if (value == null) {
        if (token.optional) {
          // Prepend partial segment prefixes.
          if (token.partial) {
            path += token.prefix;
          }

          continue
        } else {
          throw new TypeError('Expected "' + token.name + '" to be defined')
        }
      }

      if (isarray(value)) {
        if (!token.repeat) {
          throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
        }

        if (value.length === 0) {
          if (token.optional) {
            continue
          } else {
            throw new TypeError('Expected "' + token.name + '" to not be empty')
          }
        }

        for (var j = 0; j < value.length; j++) {
          segment = encode(value[j]);

          if (!matches[i].test(segment)) {
            throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
          }

          path += (j === 0 ? token.prefix : token.delimiter) + segment;
        }

        continue
      }

      segment = token.asterisk ? encodeAsterisk(value) : encode(value);

      if (!matches[i].test(segment)) {
        throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
      }

      path += token.prefix + segment;
    }

    return path
  }
}

/**
 * Escape a regular expression string.
 *
 * @param  {string} str
 * @return {string}
 */
function escapeString (str) {
  return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1')
}

/**
 * Escape the capturing group by escaping special characters and meaning.
 *
 * @param  {string} group
 * @return {string}
 */
function escapeGroup (group) {
  return group.replace(/([=!:$\/()])/g, '\\$1')
}

/**
 * Attach the keys as a property of the regexp.
 *
 * @param  {!RegExp} re
 * @param  {Array}   keys
 * @return {!RegExp}
 */
function attachKeys (re, keys) {
  re.keys = keys;
  return re
}

/**
 * Get the flags for a regexp from the options.
 *
 * @param  {Object} options
 * @return {string}
 */
function flags (options) {
  return options && options.sensitive ? '' : 'i'
}

/**
 * Pull out keys from a regexp.
 *
 * @param  {!RegExp} path
 * @param  {!Array}  keys
 * @return {!RegExp}
 */
function regexpToRegexp (path, keys) {
  // Use a negative lookahead to match only capturing groups.
  var groups = path.source.match(/\((?!\?)/g);

  if (groups) {
    for (var i = 0; i < groups.length; i++) {
      keys.push({
        name: i,
        prefix: null,
        delimiter: null,
        optional: false,
        repeat: false,
        partial: false,
        asterisk: false,
        pattern: null
      });
    }
  }

  return attachKeys(path, keys)
}

/**
 * Transform an array into a regexp.
 *
 * @param  {!Array}  path
 * @param  {Array}   keys
 * @param  {!Object} options
 * @return {!RegExp}
 */
function arrayToRegexp (path, keys, options) {
  var parts = [];

  for (var i = 0; i < path.length; i++) {
    parts.push(pathToRegexp(path[i], keys, options).source);
  }

  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));

  return attachKeys(regexp, keys)
}

/**
 * Create a path regexp from string input.
 *
 * @param  {string}  path
 * @param  {!Array}  keys
 * @param  {!Object} options
 * @return {!RegExp}
 */
function stringToRegexp (path, keys, options) {
  return tokensToRegExp(parse(path, options), keys, options)
}

/**
 * Expose a function for taking tokens and returning a RegExp.
 *
 * @param  {!Array}          tokens
 * @param  {(Array|Object)=} keys
 * @param  {Object=}         options
 * @return {!RegExp}
 */
function tokensToRegExp (tokens, keys, options) {
  if (!isarray(keys)) {
    options = /** @type {!Object} */ (keys || options);
    keys = [];
  }

  options = options || {};

  var strict = options.strict;
  var end = options.end !== false;
  var route = '';

  // Iterate over the tokens and create our regexp string.
  for (var i = 0; i < tokens.length; i++) {
    var token = tokens[i];

    if (typeof token === 'string') {
      route += escapeString(token);
    } else {
      var prefix = escapeString(token.prefix);
      var capture = '(?:' + token.pattern + ')';

      keys.push(token);

      if (token.repeat) {
        capture += '(?:' + prefix + capture + ')*';
      }

      if (token.optional) {
        if (!token.partial) {
          capture = '(?:' + prefix + '(' + capture + '))?';
        } else {
          capture = prefix + '(' + capture + ')?';
        }
      } else {
        capture = prefix + '(' + capture + ')';
      }

      route += capture;
    }
  }

  var delimiter = escapeString(options.delimiter || '/');
  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;

  // In non-strict mode we allow a slash at the end of match. If the path to
  // match already ends with a slash, we remove it for consistency. The slash
  // is valid at the end of a path match, not in the middle. This is important
  // in non-ending mode, where "/test/" shouldn't match "/test//route".
  if (!strict) {
    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';
  }

  if (end) {
    route += '$';
  } else {
    // In non-ending mode, we need the capturing groups to match as much as
    // possible by using a positive lookahead to the end or next path segment.
    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';
  }

  return attachKeys(new RegExp('^' + route, flags(options)), keys)
}

/**
 * Normalize the given path string, returning a regular expression.
 *
 * An empty array can be passed in for the keys, which will hold the
 * placeholder key descriptions. For example, using `/user/:id`, `keys` will
 * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
 *
 * @param  {(string|RegExp|Array)} path
 * @param  {(Array|Object)=}       keys
 * @param  {Object=}               options
 * @return {!RegExp}
 */
function pathToRegexp (path, keys, options) {
  if (!isarray(keys)) {
    options = /** @type {!Object} */ (keys || options);
    keys = [];
  }

  options = options || {};

  if (path instanceof RegExp) {
    return regexpToRegexp(path, /** @type {!Array} */ (keys))
  }

  if (isarray(path)) {
    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
  }

  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
}
pathToRegexp_1.parse = parse_1;
pathToRegexp_1.compile = compile_1;
pathToRegexp_1.tokensToFunction = tokensToFunction_1;
pathToRegexp_1.tokensToRegExp = tokensToRegExp_1;

/*  */

// $flow-disable-line
var regexpCompileCache = Object.create(null);

function fillParams (
  path,
  params,
  routeMsg
) {
  params = params || {};
  try {
    var filler =
      regexpCompileCache[path] ||
      (regexpCompileCache[path] = pathToRegexp_1.compile(path));

    // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}
    // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string
    if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }

    return filler(params, { pretty: true })
  } catch (e) {
    if (process.env.NODE_ENV !== 'production') {
      // Fix #3072 no warn if `pathMatch` is string
      warn(typeof params.pathMatch === 'string', ("missing param for " + routeMsg + ": " + (e.message)));
    }
    return ''
  } finally {
    // delete the 0 if it was added
    delete params[0];
  }
}

/*  */

function normalizeLocation (
  raw,
  current,
  append,
  router
) {
  var next = typeof raw === 'string' ? { path: raw } : raw;
  // named target
  if (next._normalized) {
    return next
  } else if (next.name) {
    next = extend({}, raw);
    var params = next.params;
    if (params && typeof params === 'object') {
      next.params = extend({}, params);
    }
    return next
  }

  // relative params
  if (!next.path && next.params && current) {
    next = extend({}, next);
    next._normalized = true;
    var params$1 = extend(extend({}, current.params), next.params);
    if (current.name) {
      next.name = current.name;
      next.params = params$1;
    } else if (current.matched.length) {
      var rawPath = current.matched[current.matched.length - 1].path;
      next.path = fillParams(rawPath, params$1, ("path " + (current.path)));
    } else if (process.env.NODE_ENV !== 'production') {
      warn(false, "relative params navigation requires a current route.");
    }
    return next
  }

  var parsedPath = parsePath(next.path || '');
  var basePath = (current && current.path) || '/';
  var path = parsedPath.path
    ? resolvePath(parsedPath.path, basePath, append || next.append)
    : basePath;

  var query = resolveQuery(
    parsedPath.query,
    next.query,
    router && router.options.parseQuery
  );

  var hash = next.hash || parsedPath.hash;
  if (hash && hash.charAt(0) !== '#') {
    hash = "#" + hash;
  }

  return {
    _normalized: true,
    path: path,
    query: query,
    hash: hash
  }
}

/*  */

// work around weird flow bug
var toTypes = [String, Object];
var eventTypes = [String, Array];

var noop = function () {};

var warnedCustomSlot;
var warnedTagProp;
var warnedEventProp;

var Link = {
  name: 'RouterLink',
  props: {
    to: {
      type: toTypes,
      required: true
    },
    tag: {
      type: String,
      default: 'a'
    },
    custom: Boolean,
    exact: Boolean,
    exactPath: Boolean,
    append: Boolean,
    replace: Boolean,
    activeClass: String,
    exactActiveClass: String,
    ariaCurrentValue: {
      type: String,
      default: 'page'
    },
    event: {
      type: eventTypes,
      default: 'click'
    }
  },
  render: function render (h) {
    var this$1 = this;

    var router = this.$router;
    var current = this.$route;
    var ref = router.resolve(
      this.to,
      current,
      this.append
    );
    var location = ref.location;
    var route = ref.route;
    var href = ref.href;

    var classes = {};
    var globalActiveClass = router.options.linkActiveClass;
    var globalExactActiveClass = router.options.linkExactActiveClass;
    // Support global empty active class
    var activeClassFallback =
      globalActiveClass == null ? 'router-link-active' : globalActiveClass;
    var exactActiveClassFallback =
      globalExactActiveClass == null
        ? 'router-link-exact-active'
        : globalExactActiveClass;
    var activeClass =
      this.activeClass == null ? activeClassFallback : this.activeClass;
    var exactActiveClass =
      this.exactActiveClass == null
        ? exactActiveClassFallback
        : this.exactActiveClass;

    var compareTarget = route.redirectedFrom
      ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)
      : route;

    classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);
    classes[activeClass] = this.exact || this.exactPath
      ? classes[exactActiveClass]
      : isIncludedRoute(current, compareTarget);

    var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;

    var handler = function (e) {
      if (guardEvent(e)) {
        if (this$1.replace) {
          router.replace(location, noop);
        } else {
          router.push(location, noop);
        }
      }
    };

    var on = { click: guardEvent };
    if (Array.isArray(this.event)) {
      this.event.forEach(function (e) {
        on[e] = handler;
      });
    } else {
      on[this.event] = handler;
    }

    var data = { class: classes };

    var scopedSlot =
      !this.$scopedSlots.$hasNormal &&
      this.$scopedSlots.default &&
      this.$scopedSlots.default({
        href: href,
        route: route,
        navigate: handler,
        isActive: classes[activeClass],
        isExactActive: classes[exactActiveClass]
      });

    if (scopedSlot) {
      if (process.env.NODE_ENV !== 'production' && !this.custom) {
        !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n');
        warnedCustomSlot = true;
      }
      if (scopedSlot.length === 1) {
        return scopedSlot[0]
      } else if (scopedSlot.length > 1 || !scopedSlot.length) {
        if (process.env.NODE_ENV !== 'production') {
          warn(
            false,
            ("<router-link> with to=\"" + (this.to) + "\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.")
          );
        }
        return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)
      }
    }

    if (process.env.NODE_ENV !== 'production') {
      if ('tag' in this.$options.propsData && !warnedTagProp) {
        warn(
          false,
          "<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link."
        );
        warnedTagProp = true;
      }
      if ('event' in this.$options.propsData && !warnedEventProp) {
        warn(
          false,
          "<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link."
        );
        warnedEventProp = true;
      }
    }

    if (this.tag === 'a') {
      data.on = on;
      data.attrs = { href: href, 'aria-current': ariaCurrentValue };
    } else {
      // find the first <a> child and apply listener and href
      var a = findAnchor(this.$slots.default);
      if (a) {
        // in case the <a> is a static node
        a.isStatic = false;
        var aData = (a.data = extend({}, a.data));
        aData.on = aData.on || {};
        // transform existing events in both objects into arrays so we can push later
        for (var event in aData.on) {
          var handler$1 = aData.on[event];
          if (event in on) {
            aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];
          }
        }
        // append new listeners for router-link
        for (var event$1 in on) {
          if (event$1 in aData.on) {
            // on[event] is always a function
            aData.on[event$1].push(on[event$1]);
          } else {
            aData.on[event$1] = handler;
          }
        }

        var aAttrs = (a.data.attrs = extend({}, a.data.attrs));
        aAttrs.href = href;
        aAttrs['aria-current'] = ariaCurrentValue;
      } else {
        // doesn't have <a> child, apply listener to self
        data.on = on;
      }
    }

    return h(this.tag, data, this.$slots.default)
  }
};

function guardEvent (e) {
  // don't redirect with control keys
  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }
  // don't redirect when preventDefault called
  if (e.defaultPrevented) { return }
  // don't redirect on right click
  if (e.button !== undefined && e.button !== 0) { return }
  // don't redirect if `target="_blank"`
  if (e.currentTarget && e.currentTarget.getAttribute) {
    var target = e.currentTarget.getAttribute('target');
    if (/\b_blank\b/i.test(target)) { return }
  }
  // this may be a Weex event which doesn't have this method
  if (e.preventDefault) {
    e.preventDefault();
  }
  return true
}

function findAnchor (children) {
  if (children) {
    var child;
    for (var i = 0; i < children.length; i++) {
      child = children[i];
      if (child.tag === 'a') {
        return child
      }
      if (child.children && (child = findAnchor(child.children))) {
        return child
      }
    }
  }
}

var _Vue;

function install (Vue) {
  if (install.installed && _Vue === Vue) { return }
  install.installed = true;

  _Vue = Vue;

  var isDef = function (v) { return v !== undefined; };

  var registerInstance = function (vm, callVal) {
    var i = vm.$options._parentVnode;
    if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {
      i(vm, callVal);
    }
  };

  Vue.mixin({
    beforeCreate: function beforeCreate () {
      if (isDef(this.$options.router)) {
        this._routerRoot = this;
        this._router = this.$options.router;
        this._router.init(this);
        Vue.util.defineReactive(this, '_route', this._router.history.current);
      } else {
        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;
      }
      registerInstance(this, this);
    },
    destroyed: function destroyed () {
      registerInstance(this);
    }
  });

  Object.defineProperty(Vue.prototype, '$router', {
    get: function get () { return this._routerRoot._router }
  });

  Object.defineProperty(Vue.prototype, '$route', {
    get: function get () { return this._routerRoot._route }
  });

  Vue.component('RouterView', View);
  Vue.component('RouterLink', Link);

  var strats = Vue.config.optionMergeStrategies;
  // use the same hook merging strategy for route hooks
  strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;
}

/*  */

var inBrowser = typeof window !== 'undefined';

/*  */

function createRouteMap (
  routes,
  oldPathList,
  oldPathMap,
  oldNameMap,
  parentRoute
) {
  // the path list is used to control path matching priority
  var pathList = oldPathList || [];
  // $flow-disable-line
  var pathMap = oldPathMap || Object.create(null);
  // $flow-disable-line
  var nameMap = oldNameMap || Object.create(null);

  routes.forEach(function (route) {
    addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);
  });

  // ensure wildcard routes are always at the end
  for (var i = 0, l = pathList.length; i < l; i++) {
    if (pathList[i] === '*') {
      pathList.push(pathList.splice(i, 1)[0]);
      l--;
      i--;
    }
  }

  if (process.env.NODE_ENV === 'development') {
    // warn if routes do not include leading slashes
    var found = pathList
    // check for missing leading slash
      .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });

    if (found.length > 0) {
      var pathNames = found.map(function (path) { return ("- " + path); }).join('\n');
      warn(false, ("Non-nested routes must include a leading slash character. Fix the following routes: \n" + pathNames));
    }
  }

  return {
    pathList: pathList,
    pathMap: pathMap,
    nameMap: nameMap
  }
}

function addRouteRecord (
  pathList,
  pathMap,
  nameMap,
  route,
  parent,
  matchAs
) {
  var path = route.path;
  var name = route.name;
  if (process.env.NODE_ENV !== 'production') {
    assert(path != null, "\"path\" is required in a route configuration.");
    assert(
      typeof route.component !== 'string',
      "route config \"component\" for path: " + (String(
        path || name
      )) + " cannot be a " + "string id. Use an actual component instead."
    );

    warn(
      // eslint-disable-next-line no-control-regex
      !/[^\u0000-\u007F]+/.test(path),
      "Route with path \"" + path + "\" contains unencoded characters, make sure " +
        "your path is correctly encoded before passing it to the router. Use " +
        "encodeURI to encode static segments of your path."
    );
  }

  var pathToRegexpOptions =
    route.pathToRegexpOptions || {};
  var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);

  if (typeof route.caseSensitive === 'boolean') {
    pathToRegexpOptions.sensitive = route.caseSensitive;
  }

  var record = {
    path: normalizedPath,
    regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),
    components: route.components || { default: route.component },
    alias: route.alias
      ? typeof route.alias === 'string'
        ? [route.alias]
        : route.alias
      : [],
    instances: {},
    enteredCbs: {},
    name: name,
    parent: parent,
    matchAs: matchAs,
    redirect: route.redirect,
    beforeEnter: route.beforeEnter,
    meta: route.meta || {},
    props:
      route.props == null
        ? {}
        : route.components
          ? route.props
          : { default: route.props }
  };

  if (route.children) {
    // Warn if route is named, does not redirect and has a default child route.
    // If users navigate to this route by name, the default child will
    // not be rendered (GH Issue #629)
    if (process.env.NODE_ENV !== 'production') {
      if (
        route.name &&
        !route.redirect &&
        route.children.some(function (child) { return /^\/?$/.test(child.path); })
      ) {
        warn(
          false,
          "Named Route '" + (route.name) + "' has a default child route. " +
            "When navigating to this named route (:to=\"{name: '" + (route.name) + "'\"), " +
            "the default child route will not be rendered. Remove the name from " +
            "this route and use the name of the default child route for named " +
            "links instead."
        );
      }
    }
    route.children.forEach(function (child) {
      var childMatchAs = matchAs
        ? cleanPath((matchAs + "/" + (child.path)))
        : undefined;
      addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);
    });
  }

  if (!pathMap[record.path]) {
    pathList.push(record.path);
    pathMap[record.path] = record;
  }

  if (route.alias !== undefined) {
    var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];
    for (var i = 0; i < aliases.length; ++i) {
      var alias = aliases[i];
      if (process.env.NODE_ENV !== 'production' && alias === path) {
        warn(
          false,
          ("Found an alias with the same value as the path: \"" + path + "\". You have to remove that alias. It will be ignored in development.")
        );
        // skip in dev to make it work
        continue
      }

      var aliasRoute = {
        path: alias,
        children: route.children
      };
      addRouteRecord(
        pathList,
        pathMap,
        nameMap,
        aliasRoute,
        parent,
        record.path || '/' // matchAs
      );
    }
  }

  if (name) {
    if (!nameMap[name]) {
      nameMap[name] = record;
    } else if (process.env.NODE_ENV !== 'production' && !matchAs) {
      warn(
        false,
        "Duplicate named routes definition: " +
          "{ name: \"" + name + "\", path: \"" + (record.path) + "\" }"
      );
    }
  }
}

function compileRouteRegex (
  path,
  pathToRegexpOptions
) {
  var regex = pathToRegexp_1(path, [], pathToRegexpOptions);
  if (process.env.NODE_ENV !== 'production') {
    var keys = Object.create(null);
    regex.keys.forEach(function (key) {
      warn(
        !keys[key.name],
        ("Duplicate param keys in route with path: \"" + path + "\"")
      );
      keys[key.name] = true;
    });
  }
  return regex
}

function normalizePath (
  path,
  parent,
  strict
) {
  if (!strict) { path = path.replace(/\/$/, ''); }
  if (path[0] === '/') { return path }
  if (parent == null) { return path }
  return cleanPath(((parent.path) + "/" + path))
}

/*  */



function createMatcher (
  routes,
  router
) {
  var ref = createRouteMap(routes);
  var pathList = ref.pathList;
  var pathMap = ref.pathMap;
  var nameMap = ref.nameMap;

  function addRoutes (routes) {
    createRouteMap(routes, pathList, pathMap, nameMap);
  }

  function addRoute (parentOrRoute, route) {
    var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;
    // $flow-disable-line
    createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);

    // add aliases of parent
    if (parent) {
      createRouteMap(
        // $flow-disable-line route is defined if parent is
        parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),
        pathList,
        pathMap,
        nameMap,
        parent
      );
    }
  }

  function getRoutes () {
    return pathList.map(function (path) { return pathMap[path]; })
  }

  function match (
    raw,
    currentRoute,
    redirectedFrom
  ) {
    var location = normalizeLocation(raw, currentRoute, false, router);
    var name = location.name;

    if (name) {
      var record = nameMap[name];
      if (process.env.NODE_ENV !== 'production') {
        warn(record, ("Route with name '" + name + "' does not exist"));
      }
      if (!record) { return _createRoute(null, location) }
      var paramNames = record.regex.keys
        .filter(function (key) { return !key.optional; })
        .map(function (key) { return key.name; });

      if (typeof location.params !== 'object') {
        location.params = {};
      }

      if (currentRoute && typeof currentRoute.params === 'object') {
        for (var key in currentRoute.params) {
          if (!(key in location.params) && paramNames.indexOf(key) > -1) {
            location.params[key] = currentRoute.params[key];
          }
        }
      }

      location.path = fillParams(record.path, location.params, ("named route \"" + name + "\""));
      return _createRoute(record, location, redirectedFrom)
    } else if (location.path) {
      location.params = {};
      for (var i = 0; i < pathList.length; i++) {
        var path = pathList[i];
        var record$1 = pathMap[path];
        if (matchRoute(record$1.regex, location.path, location.params)) {
          return _createRoute(record$1, location, redirectedFrom)
        }
      }
    }
    // no match
    return _createRoute(null, location)
  }

  function redirect (
    record,
    location
  ) {
    var originalRedirect = record.redirect;
    var redirect = typeof originalRedirect === 'function'
      ? originalRedirect(createRoute(record, location, null, router))
      : originalRedirect;

    if (typeof redirect === 'string') {
      redirect = { path: redirect };
    }

    if (!redirect || typeof redirect !== 'object') {
      if (process.env.NODE_ENV !== 'production') {
        warn(
          false, ("invalid redirect option: " + (JSON.stringify(redirect)))
        );
      }
      return _createRoute(null, location)
    }

    var re = redirect;
    var name = re.name;
    var path = re.path;
    var query = location.query;
    var hash = location.hash;
    var params = location.params;
    query = re.hasOwnProperty('query') ? re.query : query;
    hash = re.hasOwnProperty('hash') ? re.hash : hash;
    params = re.hasOwnProperty('params') ? re.params : params;

    if (name) {
      // resolved named direct
      var targetRecord = nameMap[name];
      if (process.env.NODE_ENV !== 'production') {
        assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found."));
      }
      return match({
        _normalized: true,
        name: name,
        query: query,
        hash: hash,
        params: params
      }, undefined, location)
    } else if (path) {
      // 1. resolve relative redirect
      var rawPath = resolveRecordPath(path, record);
      // 2. resolve params
      var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\""));
      // 3. rematch with existing query and hash
      return match({
        _normalized: true,
        path: resolvedPath,
        query: query,
        hash: hash
      }, undefined, location)
    } else {
      if (process.env.NODE_ENV !== 'production') {
        warn(false, ("invalid redirect option: " + (JSON.stringify(redirect))));
      }
      return _createRoute(null, location)
    }
  }

  function alias (
    record,
    location,
    matchAs
  ) {
    var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\""));
    var aliasedMatch = match({
      _normalized: true,
      path: aliasedPath
    });
    if (aliasedMatch) {
      var matched = aliasedMatch.matched;
      var aliasedRecord = matched[matched.length - 1];
      location.params = aliasedMatch.params;
      return _createRoute(aliasedRecord, location)
    }
    return _createRoute(null, location)
  }

  function _createRoute (
    record,
    location,
    redirectedFrom
  ) {
    if (record && record.redirect) {
      return redirect(record, redirectedFrom || location)
    }
    if (record && record.matchAs) {
      return alias(record, location, record.matchAs)
    }
    return createRoute(record, location, redirectedFrom, router)
  }

  return {
    match: match,
    addRoute: addRoute,
    getRoutes: getRoutes,
    addRoutes: addRoutes
  }
}

function matchRoute (
  regex,
  path,
  params
) {
  var m = path.match(regex);

  if (!m) {
    return false
  } else if (!params) {
    return true
  }

  for (var i = 1, len = m.length; i < len; ++i) {
    var key = regex.keys[i - 1];
    if (key) {
      // Fix #1994: using * with props: true generates a param named 0
      params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];
    }
  }

  return true
}

function resolveRecordPath (path, record) {
  return resolvePath(path, record.parent ? record.parent.path : '/', true)
}

/*  */

// use User Timing api (if present) for more accurate key precision
var Time =
  inBrowser && window.performance && window.performance.now
    ? window.performance
    : Date;

function genStateKey () {
  return Time.now().toFixed(3)
}

var _key = genStateKey();

function getStateKey () {
  return _key
}

function setStateKey (key) {
  return (_key = key)
}

/*  */

var positionStore = Object.create(null);

function setupScroll () {
  // Prevent browser scroll behavior on History popstate
  if ('scrollRestoration' in window.history) {
    window.history.scrollRestoration = 'manual';
  }
  // Fix for #1585 for Firefox
  // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678
  // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with
  // window.location.protocol + '//' + window.location.host
  // location.host contains the port and location.hostname doesn't
  var protocolAndPath = window.location.protocol + '//' + window.location.host;
  var absolutePath = window.location.href.replace(protocolAndPath, '');
  // preserve existing history state as it could be overriden by the user
  var stateCopy = extend({}, window.history.state);
  stateCopy.key = getStateKey();
  window.history.replaceState(stateCopy, '', absolutePath);
  window.addEventListener('popstate', handlePopState);
  return function () {
    window.removeEventListener('popstate', handlePopState);
  }
}

function handleScroll (
  router,
  to,
  from,
  isPop
) {
  if (!router.app) {
    return
  }

  var behavior = router.options.scrollBehavior;
  if (!behavior) {
    return
  }

  if (process.env.NODE_ENV !== 'production') {
    assert(typeof behavior === 'function', "scrollBehavior must be a function");
  }

  // wait until re-render finishes before scrolling
  router.app.$nextTick(function () {
    var position = getScrollPosition();
    var shouldScroll = behavior.call(
      router,
      to,
      from,
      isPop ? position : null
    );

    if (!shouldScroll) {
      return
    }

    if (typeof shouldScroll.then === 'function') {
      shouldScroll
        .then(function (shouldScroll) {
          scrollToPosition((shouldScroll), position);
        })
        .catch(function (err) {
          if (process.env.NODE_ENV !== 'production') {
            assert(false, err.toString());
          }
        });
    } else {
      scrollToPosition(shouldScroll, position);
    }
  });
}

function saveScrollPosition () {
  var key = getStateKey();
  if (key) {
    positionStore[key] = {
      x: window.pageXOffset,
      y: window.pageYOffset
    };
  }
}

function handlePopState (e) {
  saveScrollPosition();
  if (e.state && e.state.key) {
    setStateKey(e.state.key);
  }
}

function getScrollPosition () {
  var key = getStateKey();
  if (key) {
    return positionStore[key]
  }
}

function getElementPosition (el, offset) {
  var docEl = document.documentElement;
  var docRect = docEl.getBoundingClientRect();
  var elRect = el.getBoundingClientRect();
  return {
    x: elRect.left - docRect.left - offset.x,
    y: elRect.top - docRect.top - offset.y
  }
}

function isValidPosition (obj) {
  return isNumber(obj.x) || isNumber(obj.y)
}

function normalizePosition (obj) {
  return {
    x: isNumber(obj.x) ? obj.x : window.pageXOffset,
    y: isNumber(obj.y) ? obj.y : window.pageYOffset
  }
}

function normalizeOffset (obj) {
  return {
    x: isNumber(obj.x) ? obj.x : 0,
    y: isNumber(obj.y) ? obj.y : 0
  }
}

function isNumber (v) {
  return typeof v === 'number'
}

var hashStartsWithNumberRE = /^#\d/;

function scrollToPosition (shouldScroll, position) {
  var isObject = typeof shouldScroll === 'object';
  if (isObject && typeof shouldScroll.selector === 'string') {
    // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]
    // but at the same time, it doesn't make much sense to select an element with an id and an extra selector
    var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line
      ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line
      : document.querySelector(shouldScroll.selector);

    if (el) {
      var offset =
        shouldScroll.offset && typeof shouldScroll.offset === 'object'
          ? shouldScroll.offset
          : {};
      offset = normalizeOffset(offset);
      position = getElementPosition(el, offset);
    } else if (isValidPosition(shouldScroll)) {
      position = normalizePosition(shouldScroll);
    }
  } else if (isObject && isValidPosition(shouldScroll)) {
    position = normalizePosition(shouldScroll);
  }

  if (position) {
    // $flow-disable-line
    if ('scrollBehavior' in document.documentElement.style) {
      window.scrollTo({
        left: position.x,
        top: position.y,
        // $flow-disable-line
        behavior: shouldScroll.behavior
      });
    } else {
      window.scrollTo(position.x, position.y);
    }
  }
}

/*  */

var supportsPushState =
  inBrowser &&
  (function () {
    var ua = window.navigator.userAgent;

    if (
      (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&
      ua.indexOf('Mobile Safari') !== -1 &&
      ua.indexOf('Chrome') === -1 &&
      ua.indexOf('Windows Phone') === -1
    ) {
      return false
    }

    return window.history && typeof window.history.pushState === 'function'
  })();

function pushState (url, replace) {
  saveScrollPosition();
  // try...catch the pushState call to get around Safari
  // DOM Exception 18 where it limits to 100 pushState calls
  var history = window.history;
  try {
    if (replace) {
      // preserve existing history state as it could be overriden by the user
      var stateCopy = extend({}, history.state);
      stateCopy.key = getStateKey();
      history.replaceState(stateCopy, '', url);
    } else {
      history.pushState({ key: setStateKey(genStateKey()) }, '', url);
    }
  } catch (e) {
    window.location[replace ? 'replace' : 'assign'](url);
  }
}

function replaceState (url) {
  pushState(url, true);
}

/*  */

function runQueue (queue, fn, cb) {
  var step = function (index) {
    if (index >= queue.length) {
      cb();
    } else {
      if (queue[index]) {
        fn(queue[index], function () {
          step(index + 1);
        });
      } else {
        step(index + 1);
      }
    }
  };
  step(0);
}

// When changing thing, also edit router.d.ts
var NavigationFailureType = {
  redirected: 2,
  aborted: 4,
  cancelled: 8,
  duplicated: 16
};

function createNavigationRedirectedError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.redirected,
    ("Redirected when going from \"" + (from.fullPath) + "\" to \"" + (stringifyRoute(
      to
    )) + "\" via a navigation guard.")
  )
}

function createNavigationDuplicatedError (from, to) {
  var error = createRouterError(
    from,
    to,
    NavigationFailureType.duplicated,
    ("Avoided redundant navigation to current location: \"" + (from.fullPath) + "\".")
  );
  // backwards compatible with the first introduction of Errors
  error.name = 'NavigationDuplicated';
  return error
}

function createNavigationCancelledError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.cancelled,
    ("Navigation cancelled from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" with a new navigation.")
  )
}

function createNavigationAbortedError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.aborted,
    ("Navigation aborted from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" via a navigation guard.")
  )
}

function createRouterError (from, to, type, message) {
  var error = new Error(message);
  error._isRouter = true;
  error.from = from;
  error.to = to;
  error.type = type;

  return error
}

var propertiesToLog = ['params', 'query', 'hash'];

function stringifyRoute (to) {
  if (typeof to === 'string') { return to }
  if ('path' in to) { return to.path }
  var location = {};
  propertiesToLog.forEach(function (key) {
    if (key in to) { location[key] = to[key]; }
  });
  return JSON.stringify(location, null, 2)
}

function isError (err) {
  return Object.prototype.toString.call(err).indexOf('Error') > -1
}

function isNavigationFailure (err, errorType) {
  return (
    isError(err) &&
    err._isRouter &&
    (errorType == null || err.type === errorType)
  )
}

/*  */

function resolveAsyncComponents (matched) {
  return function (to, from, next) {
    var hasAsync = false;
    var pending = 0;
    var error = null;

    flatMapComponents(matched, function (def, _, match, key) {
      // if it's a function and doesn't have cid attached,
      // assume it's an async component resolve function.
      // we are not using Vue's default async resolving mechanism because
      // we want to halt the navigation until the incoming component has been
      // resolved.
      if (typeof def === 'function' && def.cid === undefined) {
        hasAsync = true;
        pending++;

        var resolve = once(function (resolvedDef) {
          if (isESModule(resolvedDef)) {
            resolvedDef = resolvedDef.default;
          }
          // save resolved on async factory in case it's used elsewhere
          def.resolved = typeof resolvedDef === 'function'
            ? resolvedDef
            : _Vue.extend(resolvedDef);
          match.components[key] = resolvedDef;
          pending--;
          if (pending <= 0) {
            next();
          }
        });

        var reject = once(function (reason) {
          var msg = "Failed to resolve async component " + key + ": " + reason;
          process.env.NODE_ENV !== 'production' && warn(false, msg);
          if (!error) {
            error = isError(reason)
              ? reason
              : new Error(msg);
            next(error);
          }
        });

        var res;
        try {
          res = def(resolve, reject);
        } catch (e) {
          reject(e);
        }
        if (res) {
          if (typeof res.then === 'function') {
            res.then(resolve, reject);
          } else {
            // new syntax in Vue 2.3
            var comp = res.component;
            if (comp && typeof comp.then === 'function') {
              comp.then(resolve, reject);
            }
          }
        }
      }
    });

    if (!hasAsync) { next(); }
  }
}

function flatMapComponents (
  matched,
  fn
) {
  return flatten(matched.map(function (m) {
    return Object.keys(m.components).map(function (key) { return fn(
      m.components[key],
      m.instances[key],
      m, key
    ); })
  }))
}

function flatten (arr) {
  return Array.prototype.concat.apply([], arr)
}

var hasSymbol =
  typeof Symbol === 'function' &&
  typeof Symbol.toStringTag === 'symbol';

function isESModule (obj) {
  return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')
}

// in Webpack 2, require.ensure now also returns a Promise
// so the resolve/reject functions may get called an extra time
// if the user uses an arrow function shorthand that happens to
// return that Promise.
function once (fn) {
  var called = false;
  return function () {
    var args = [], len = arguments.length;
    while ( len-- ) args[ len ] = arguments[ len ];

    if (called) { return }
    called = true;
    return fn.apply(this, args)
  }
}

/*  */

var History = function History (router, base) {
  this.router = router;
  this.base = normalizeBase(base);
  // start with a route object that stands for "nowhere"
  this.current = START;
  this.pending = null;
  this.ready = false;
  this.readyCbs = [];
  this.readyErrorCbs = [];
  this.errorCbs = [];
  this.listeners = [];
};

History.prototype.listen = function listen (cb) {
  this.cb = cb;
};

History.prototype.onReady = function onReady (cb, errorCb) {
  if (this.ready) {
    cb();
  } else {
    this.readyCbs.push(cb);
    if (errorCb) {
      this.readyErrorCbs.push(errorCb);
    }
  }
};

History.prototype.onError = function onError (errorCb) {
  this.errorCbs.push(errorCb);
};

History.prototype.transitionTo = function transitionTo (
  location,
  onComplete,
  onAbort
) {
    var this$1 = this;

  var route;
  // catch redirect option https://github.com/vuejs/vue-router/issues/3201
  try {
    route = this.router.match(location, this.current);
  } catch (e) {
    this.errorCbs.forEach(function (cb) {
      cb(e);
    });
    // Exception should still be thrown
    throw e
  }
  var prev = this.current;
  this.confirmTransition(
    route,
    function () {
      this$1.updateRoute(route);
      onComplete && onComplete(route);
      this$1.ensureURL();
      this$1.router.afterHooks.forEach(function (hook) {
        hook && hook(route, prev);
      });

      // fire ready cbs once
      if (!this$1.ready) {
        this$1.ready = true;
        this$1.readyCbs.forEach(function (cb) {
          cb(route);
        });
      }
    },
    function (err) {
      if (onAbort) {
        onAbort(err);
      }
      if (err && !this$1.ready) {
        // Initial redirection should not mark the history as ready yet
        // because it's triggered by the redirection instead
        // https://github.com/vuejs/vue-router/issues/3225
        // https://github.com/vuejs/vue-router/issues/3331
        if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {
          this$1.ready = true;
          this$1.readyErrorCbs.forEach(function (cb) {
            cb(err);
          });
        }
      }
    }
  );
};

History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {
    var this$1 = this;

  var current = this.current;
  this.pending = route;
  var abort = function (err) {
    // changed after adding errors with
    // https://github.com/vuejs/vue-router/pull/3047 before that change,
    // redirect and aborted navigation would produce an err == null
    if (!isNavigationFailure(err) && isError(err)) {
      if (this$1.errorCbs.length) {
        this$1.errorCbs.forEach(function (cb) {
          cb(err);
        });
      } else {
        warn(false, 'uncaught error during route navigation:');
        console.error(err);
      }
    }
    onAbort && onAbort(err);
  };
  var lastRouteIndex = route.matched.length - 1;
  var lastCurrentIndex = current.matched.length - 1;
  if (
    isSameRoute(route, current) &&
    // in the case the route map has been dynamically appended to
    lastRouteIndex === lastCurrentIndex &&
    route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]
  ) {
    this.ensureURL();
    return abort(createNavigationDuplicatedError(current, route))
  }

  var ref = resolveQueue(
    this.current.matched,
    route.matched
  );
    var updated = ref.updated;
    var deactivated = ref.deactivated;
    var activated = ref.activated;

  var queue = [].concat(
    // in-component leave guards
    extractLeaveGuards(deactivated),
    // global before hooks
    this.router.beforeHooks,
    // in-component update hooks
    extractUpdateHooks(updated),
    // in-config enter guards
    activated.map(function (m) { return m.beforeEnter; }),
    // async components
    resolveAsyncComponents(activated)
  );

  var iterator = function (hook, next) {
    if (this$1.pending !== route) {
      return abort(createNavigationCancelledError(current, route))
    }
    try {
      hook(route, current, function (to) {
        if (to === false) {
          // next(false) -> abort navigation, ensure current URL
          this$1.ensureURL(true);
          abort(createNavigationAbortedError(current, route));
        } else if (isError(to)) {
          this$1.ensureURL(true);
          abort(to);
        } else if (
          typeof to === 'string' ||
          (typeof to === 'object' &&
            (typeof to.path === 'string' || typeof to.name === 'string'))
        ) {
          // next('/') or next({ path: '/' }) -> redirect
          abort(createNavigationRedirectedError(current, route));
          if (typeof to === 'object' && to.replace) {
            this$1.replace(to);
          } else {
            this$1.push(to);
          }
        } else {
          // confirm transition and pass on the value
          next(to);
        }
      });
    } catch (e) {
      abort(e);
    }
  };

  runQueue(queue, iterator, function () {
    // wait until async components are resolved before
    // extracting in-component enter guards
    var enterGuards = extractEnterGuards(activated);
    var queue = enterGuards.concat(this$1.router.resolveHooks);
    runQueue(queue, iterator, function () {
      if (this$1.pending !== route) {
        return abort(createNavigationCancelledError(current, route))
      }
      this$1.pending = null;
      onComplete(route);
      if (this$1.router.app) {
        this$1.router.app.$nextTick(function () {
          handleRouteEntered(route);
        });
      }
    });
  });
};

History.prototype.updateRoute = function updateRoute (route) {
  this.current = route;
  this.cb && this.cb(route);
};

History.prototype.setupListeners = function setupListeners () {
  // Default implementation is empty
};

History.prototype.teardown = function teardown () {
  // clean up event listeners
  // https://github.com/vuejs/vue-router/issues/2341
  this.listeners.forEach(function (cleanupListener) {
    cleanupListener();
  });
  this.listeners = [];

  // reset current history route
  // https://github.com/vuejs/vue-router/issues/3294
  this.current = START;
  this.pending = null;
};

function normalizeBase (base) {
  if (!base) {
    if (inBrowser) {
      // respect <base> tag
      var baseEl = document.querySelector('base');
      base = (baseEl && baseEl.getAttribute('href')) || '/';
      // strip full URL origin
      base = base.replace(/^https?:\/\/[^\/]+/, '');
    } else {
      base = '/';
    }
  }
  // make sure there's the starting slash
  if (base.charAt(0) !== '/') {
    base = '/' + base;
  }
  // remove trailing slash
  return base.replace(/\/$/, '')
}

function resolveQueue (
  current,
  next
) {
  var i;
  var max = Math.max(current.length, next.length);
  for (i = 0; i < max; i++) {
    if (current[i] !== next[i]) {
      break
    }
  }
  return {
    updated: next.slice(0, i),
    activated: next.slice(i),
    deactivated: current.slice(i)
  }
}

function extractGuards (
  records,
  name,
  bind,
  reverse
) {
  var guards = flatMapComponents(records, function (def, instance, match, key) {
    var guard = extractGuard(def, name);
    if (guard) {
      return Array.isArray(guard)
        ? guard.map(function (guard) { return bind(guard, instance, match, key); })
        : bind(guard, instance, match, key)
    }
  });
  return flatten(reverse ? guards.reverse() : guards)
}

function extractGuard (
  def,
  key
) {
  if (typeof def !== 'function') {
    // extend now so that global mixins are applied.
    def = _Vue.extend(def);
  }
  return def.options[key]
}

function extractLeaveGuards (deactivated) {
  return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)
}

function extractUpdateHooks (updated) {
  return extractGuards(updated, 'beforeRouteUpdate', bindGuard)
}

function bindGuard (guard, instance) {
  if (instance) {
    return function boundRouteGuard () {
      return guard.apply(instance, arguments)
    }
  }
}

function extractEnterGuards (
  activated
) {
  return extractGuards(
    activated,
    'beforeRouteEnter',
    function (guard, _, match, key) {
      return bindEnterGuard(guard, match, key)
    }
  )
}

function bindEnterGuard (
  guard,
  match,
  key
) {
  return function routeEnterGuard (to, from, next) {
    return guard(to, from, function (cb) {
      if (typeof cb === 'function') {
        if (!match.enteredCbs[key]) {
          match.enteredCbs[key] = [];
        }
        match.enteredCbs[key].push(cb);
      }
      next(cb);
    })
  }
}

/*  */

var HTML5History = /*@__PURE__*/(function (History) {
  function HTML5History (router, base) {
    History.call(this, router, base);

    this._startLocation = getLocation(this.base);
  }

  if ( History ) HTML5History.__proto__ = History;
  HTML5History.prototype = Object.create( History && History.prototype );
  HTML5History.prototype.constructor = HTML5History;

  HTML5History.prototype.setupListeners = function setupListeners () {
    var this$1 = this;

    if (this.listeners.length > 0) {
      return
    }

    var router = this.router;
    var expectScroll = router.options.scrollBehavior;
    var supportsScroll = supportsPushState && expectScroll;

    if (supportsScroll) {
      this.listeners.push(setupScroll());
    }

    var handleRoutingEvent = function () {
      var current = this$1.current;

      // Avoiding first `popstate` event dispatched in some browsers but first
      // history route not updated since async guard at the same time.
      var location = getLocation(this$1.base);
      if (this$1.current === START && location === this$1._startLocation) {
        return
      }

      this$1.transitionTo(location, function (route) {
        if (supportsScroll) {
          handleScroll(router, route, current, true);
        }
      });
    };
    window.addEventListener('popstate', handleRoutingEvent);
    this.listeners.push(function () {
      window.removeEventListener('popstate', handleRoutingEvent);
    });
  };

  HTML5History.prototype.go = function go (n) {
    window.history.go(n);
  };

  HTML5History.prototype.push = function push (location, onComplete, onAbort) {
    var this$1 = this;

    var ref = this;
    var fromRoute = ref.current;
    this.transitionTo(location, function (route) {
      pushState(cleanPath(this$1.base + route.fullPath));
      handleScroll(this$1.router, route, fromRoute, false);
      onComplete && onComplete(route);
    }, onAbort);
  };

  HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {
    var this$1 = this;

    var ref = this;
    var fromRoute = ref.current;
    this.transitionTo(location, function (route) {
      replaceState(cleanPath(this$1.base + route.fullPath));
      handleScroll(this$1.router, route, fromRoute, false);
      onComplete && onComplete(route);
    }, onAbort);
  };

  HTML5History.prototype.ensureURL = function ensureURL (push) {
    if (getLocation(this.base) !== this.current.fullPath) {
      var current = cleanPath(this.base + this.current.fullPath);
      push ? pushState(current) : replaceState(current);
    }
  };

  HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {
    return getLocation(this.base)
  };

  return HTML5History;
}(History));

function getLocation (base) {
  var path = window.location.pathname;
  if (base && path.toLowerCase().indexOf(base.toLowerCase()) === 0) {
    path = path.slice(base.length);
  }
  return (path || '/') + window.location.search + window.location.hash
}

/*  */

var HashHistory = /*@__PURE__*/(function (History) {
  function HashHistory (router, base, fallback) {
    History.call(this, router, base);
    // check history fallback deeplinking
    if (fallback && checkFallback(this.base)) {
      return
    }
    ensureSlash();
  }

  if ( History ) HashHistory.__proto__ = History;
  HashHistory.prototype = Object.create( History && History.prototype );
  HashHistory.prototype.constructor = HashHistory;

  // this is delayed until the app mounts
  // to avoid the hashchange listener being fired too early
  HashHistory.prototype.setupListeners = function setupListeners () {
    var this$1 = this;

    if (this.listeners.length > 0) {
      return
    }

    var router = this.router;
    var expectScroll = router.options.scrollBehavior;
    var supportsScroll = supportsPushState && expectScroll;

    if (supportsScroll) {
      this.listeners.push(setupScroll());
    }

    var handleRoutingEvent = function () {
      var current = this$1.current;
      if (!ensureSlash()) {
        return
      }
      this$1.transitionTo(getHash(), function (route) {
        if (supportsScroll) {
          handleScroll(this$1.router, route, current, true);
        }
        if (!supportsPushState) {
          replaceHash(route.fullPath);
        }
      });
    };
    var eventType = supportsPushState ? 'popstate' : 'hashchange';
    window.addEventListener(
      eventType,
      handleRoutingEvent
    );
    this.listeners.push(function () {
      window.removeEventListener(eventType, handleRoutingEvent);
    });
  };

  HashHistory.prototype.push = function push (location, onComplete, onAbort) {
    var this$1 = this;

    var ref = this;
    var fromRoute = ref.current;
    this.transitionTo(
      location,
      function (route) {
        pushHash(route.fullPath);
        handleScroll(this$1.router, route, fromRoute, false);
        onComplete && onComplete(route);
      },
      onAbort
    );
  };

  HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {
    var this$1 = this;

    var ref = this;
    var fromRoute = ref.current;
    this.transitionTo(
      location,
      function (route) {
        replaceHash(route.fullPath);
        handleScroll(this$1.router, route, fromRoute, false);
        onComplete && onComplete(route);
      },
      onAbort
    );
  };

  HashHistory.prototype.go = function go (n) {
    window.history.go(n);
  };

  HashHistory.prototype.ensureURL = function ensureURL (push) {
    var current = this.current.fullPath;
    if (getHash() !== current) {
      push ? pushHash(current) : replaceHash(current);
    }
  };

  HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {
    return getHash()
  };

  return HashHistory;
}(History));

function checkFallback (base) {
  var location = getLocation(base);
  if (!/^\/#/.test(location)) {
    window.location.replace(cleanPath(base + '/#' + location));
    return true
  }
}

function ensureSlash () {
  var path = getHash();
  if (path.charAt(0) === '/') {
    return true
  }
  replaceHash('/' + path);
  return false
}

function getHash () {
  // We can't use window.location.hash here because it's not
  // consistent across browsers - Firefox will pre-decode it!
  var href = window.location.href;
  var index = href.indexOf('#');
  // empty path
  if (index < 0) { return '' }

  href = href.slice(index + 1);

  return href
}

function getUrl (path) {
  var href = window.location.href;
  var i = href.indexOf('#');
  var base = i >= 0 ? href.slice(0, i) : href;
  return (base + "#" + path)
}

function pushHash (path) {
  if (supportsPushState) {
    pushState(getUrl(path));
  } else {
    window.location.hash = path;
  }
}

function replaceHash (path) {
  if (supportsPushState) {
    replaceState(getUrl(path));
  } else {
    window.location.replace(getUrl(path));
  }
}

/*  */

var AbstractHistory = /*@__PURE__*/(function (History) {
  function AbstractHistory (router, base) {
    History.call(this, router, base);
    this.stack = [];
    this.index = -1;
  }

  if ( History ) AbstractHistory.__proto__ = History;
  AbstractHistory.prototype = Object.create( History && History.prototype );
  AbstractHistory.prototype.constructor = AbstractHistory;

  AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {
    var this$1 = this;

    this.transitionTo(
      location,
      function (route) {
        this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);
        this$1.index++;
        onComplete && onComplete(route);
      },
      onAbort
    );
  };

  AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {
    var this$1 = this;

    this.transitionTo(
      location,
      function (route) {
        this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);
        onComplete && onComplete(route);
      },
      onAbort
    );
  };

  AbstractHistory.prototype.go = function go (n) {
    var this$1 = this;

    var targetIndex = this.index + n;
    if (targetIndex < 0 || targetIndex >= this.stack.length) {
      return
    }
    var route = this.stack[targetIndex];
    this.confirmTransition(
      route,
      function () {
        var prev = this$1.current;
        this$1.index = targetIndex;
        this$1.updateRoute(route);
        this$1.router.afterHooks.forEach(function (hook) {
          hook && hook(route, prev);
        });
      },
      function (err) {
        if (isNavigationFailure(err, NavigationFailureType.duplicated)) {
          this$1.index = targetIndex;
        }
      }
    );
  };

  AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {
    var current = this.stack[this.stack.length - 1];
    return current ? current.fullPath : '/'
  };

  AbstractHistory.prototype.ensureURL = function ensureURL () {
    // noop
  };

  return AbstractHistory;
}(History));

/*  */

var VueRouter = function VueRouter (options) {
  if ( options === void 0 ) options = {};

  this.app = null;
  this.apps = [];
  this.options = options;
  this.beforeHooks = [];
  this.resolveHooks = [];
  this.afterHooks = [];
  this.matcher = createMatcher(options.routes || [], this);

  var mode = options.mode || 'hash';
  this.fallback =
    mode === 'history' && !supportsPushState && options.fallback !== false;
  if (this.fallback) {
    mode = 'hash';
  }
  if (!inBrowser) {
    mode = 'abstract';
  }
  this.mode = mode;

  switch (mode) {
    case 'history':
      this.history = new HTML5History(this, options.base);
      break
    case 'hash':
      this.history = new HashHistory(this, options.base, this.fallback);
      break
    case 'abstract':
      this.history = new AbstractHistory(this, options.base);
      break
    default:
      if (process.env.NODE_ENV !== 'production') {
        assert(false, ("invalid mode: " + mode));
      }
  }
};

var prototypeAccessors = { currentRoute: { configurable: true } };

VueRouter.prototype.match = function match (raw, current, redirectedFrom) {
  return this.matcher.match(raw, current, redirectedFrom)
};

prototypeAccessors.currentRoute.get = function () {
  return this.history && this.history.current
};

VueRouter.prototype.init = function init (app /* Vue component instance */) {
    var this$1 = this;

  process.env.NODE_ENV !== 'production' &&
    assert(
      install.installed,
      "not installed. Make sure to call `Vue.use(VueRouter)` " +
        "before creating root instance."
    );

  this.apps.push(app);

  // set up app destroyed handler
  // https://github.com/vuejs/vue-router/issues/2639
  app.$once('hook:destroyed', function () {
    // clean out app from this.apps array once destroyed
    var index = this$1.apps.indexOf(app);
    if (index > -1) { this$1.apps.splice(index, 1); }
    // ensure we still have a main app or null if no apps
    // we do not release the router so it can be reused
    if (this$1.app === app) { this$1.app = this$1.apps[0] || null; }

    if (!this$1.app) { this$1.history.teardown(); }
  });

  // main app previously initialized
  // return as we don't need to set up new history listener
  if (this.app) {
    return
  }

  this.app = app;

  var history = this.history;

  if (history instanceof HTML5History || history instanceof HashHistory) {
    var handleInitialScroll = function (routeOrError) {
      var from = history.current;
      var expectScroll = this$1.options.scrollBehavior;
      var supportsScroll = supportsPushState && expectScroll;

      if (supportsScroll && 'fullPath' in routeOrError) {
        handleScroll(this$1, routeOrError, from, false);
      }
    };
    var setupListeners = function (routeOrError) {
      history.setupListeners();
      handleInitialScroll(routeOrError);
    };
    history.transitionTo(
      history.getCurrentLocation(),
      setupListeners,
      setupListeners
    );
  }

  history.listen(function (route) {
    this$1.apps.forEach(function (app) {
      app._route = route;
    });
  });
};

VueRouter.prototype.beforeEach = function beforeEach (fn) {
  return registerHook(this.beforeHooks, fn)
};

VueRouter.prototype.beforeResolve = function beforeResolve (fn) {
  return registerHook(this.resolveHooks, fn)
};

VueRouter.prototype.afterEach = function afterEach (fn) {
  return registerHook(this.afterHooks, fn)
};

VueRouter.prototype.onReady = function onReady (cb, errorCb) {
  this.history.onReady(cb, errorCb);
};

VueRouter.prototype.onError = function onError (errorCb) {
  this.history.onError(errorCb);
};

VueRouter.prototype.push = function push (location, onComplete, onAbort) {
    var this$1 = this;

  // $flow-disable-line
  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
    return new Promise(function (resolve, reject) {
      this$1.history.push(location, resolve, reject);
    })
  } else {
    this.history.push(location, onComplete, onAbort);
  }
};

VueRouter.prototype.replace = function replace (location, onComplete, onAbort) {
    var this$1 = this;

  // $flow-disable-line
  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
    return new Promise(function (resolve, reject) {
      this$1.history.replace(location, resolve, reject);
    })
  } else {
    this.history.replace(location, onComplete, onAbort);
  }
};

VueRouter.prototype.go = function go (n) {
  this.history.go(n);
};

VueRouter.prototype.back = function back () {
  this.go(-1);
};

VueRouter.prototype.forward = function forward () {
  this.go(1);
};

VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {
  var route = to
    ? to.matched
      ? to
      : this.resolve(to).route
    : this.currentRoute;
  if (!route) {
    return []
  }
  return [].concat.apply(
    [],
    route.matched.map(function (m) {
      return Object.keys(m.components).map(function (key) {
        return m.components[key]
      })
    })
  )
};

VueRouter.prototype.resolve = function resolve (
  to,
  current,
  append
) {
  current = current || this.history.current;
  var location = normalizeLocation(to, current, append, this);
  var route = this.match(location, current);
  var fullPath = route.redirectedFrom || route.fullPath;
  var base = this.history.base;
  var href = createHref(base, fullPath, this.mode);
  return {
    location: location,
    route: route,
    href: href,
    // for backwards compat
    normalizedTo: location,
    resolved: route
  }
};

VueRouter.prototype.getRoutes = function getRoutes () {
  return this.matcher.getRoutes()
};

VueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {
  this.matcher.addRoute(parentOrRoute, route);
  if (this.history.current !== START) {
    this.history.transitionTo(this.history.getCurrentLocation());
  }
};

VueRouter.prototype.addRoutes = function addRoutes (routes) {
  if (process.env.NODE_ENV !== 'production') {
    warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');
  }
  this.matcher.addRoutes(routes);
  if (this.history.current !== START) {
    this.history.transitionTo(this.history.getCurrentLocation());
  }
};

Object.defineProperties( VueRouter.prototype, prototypeAccessors );

function registerHook (list, fn) {
  list.push(fn);
  return function () {
    var i = list.indexOf(fn);
    if (i > -1) { list.splice(i, 1); }
  }
}

function createHref (base, fullPath, mode) {
  var path = mode === 'hash' ? '#' + fullPath : fullPath;
  return base ? cleanPath(base + '/' + path) : path
}

VueRouter.install = install;
VueRouter.version = '3.5.1';
VueRouter.isNavigationFailure = isNavigationFailure;
VueRouter.NavigationFailureType = NavigationFailureType;
VueRouter.START_LOCATION = START;

if (inBrowser && window.Vue) {
  window.Vue.use(VueRouter);
}

export default VueRouter;
/*!
  * vue-router v3.5.1
  * (c) 2021 Evan You
  * @license MIT
  */
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.VueRouter = factory());
}(this, (function () { 'use strict';

  /*  */

  function assert (condition, message) {
    if (!condition) {
      throw new Error(("[vue-router] " + message))
    }
  }

  function warn (condition, message) {
    if ( !condition) {
      typeof console !== 'undefined' && console.warn(("[vue-router] " + message));
    }
  }

  function extend (a, b) {
    for (var key in b) {
      a[key] = b[key];
    }
    return a
  }

  /*  */

  var encodeReserveRE = /[!'()*]/g;
  var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };
  var commaRE = /%2C/g;

  // fixed encodeURIComponent which is more conformant to RFC3986:
  // - escapes [!'()*]
  // - preserve commas
  var encode = function (str) { return encodeURIComponent(str)
      .replace(encodeReserveRE, encodeReserveReplacer)
      .replace(commaRE, ','); };

  function decode (str) {
    try {
      return decodeURIComponent(str)
    } catch (err) {
      {
        warn(false, ("Error decoding \"" + str + "\". Leaving it intact."));
      }
    }
    return str
  }

  function resolveQuery (
    query,
    extraQuery,
    _parseQuery
  ) {
    if ( extraQuery === void 0 ) extraQuery = {};

    var parse = _parseQuery || parseQuery;
    var parsedQuery;
    try {
      parsedQuery = parse(query || '');
    } catch (e) {
       warn(false, e.message);
      parsedQuery = {};
    }
    for (var key in extraQuery) {
      var value = extraQuery[key];
      parsedQuery[key] = Array.isArray(value)
        ? value.map(castQueryParamValue)
        : castQueryParamValue(value);
    }
    return parsedQuery
  }

  var castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };

  function parseQuery (query) {
    var res = {};

    query = query.trim().replace(/^(\?|#|&)/, '');

    if (!query) {
      return res
    }

    query.split('&').forEach(function (param) {
      var parts = param.replace(/\+/g, ' ').split('=');
      var key = decode(parts.shift());
      var val = parts.length > 0 ? decode(parts.join('=')) : null;

      if (res[key] === undefined) {
        res[key] = val;
      } else if (Array.isArray(res[key])) {
        res[key].push(val);
      } else {
        res[key] = [res[key], val];
      }
    });

    return res
  }

  function stringifyQuery (obj) {
    var res = obj
      ? Object.keys(obj)
        .map(function (key) {
          var val = obj[key];

          if (val === undefined) {
            return ''
          }

          if (val === null) {
            return encode(key)
          }

          if (Array.isArray(val)) {
            var result = [];
            val.forEach(function (val2) {
              if (val2 === undefined) {
                return
              }
              if (val2 === null) {
                result.push(encode(key));
              } else {
                result.push(encode(key) + '=' + encode(val2));
              }
            });
            return result.join('&')
          }

          return encode(key) + '=' + encode(val)
        })
        .filter(function (x) { return x.length > 0; })
        .join('&')
      : null;
    return res ? ("?" + res) : ''
  }

  /*  */

  var trailingSlashRE = /\/?$/;

  function createRoute (
    record,
    location,
    redirectedFrom,
    router
  ) {
    var stringifyQuery = router && router.options.stringifyQuery;

    var query = location.query || {};
    try {
      query = clone(query);
    } catch (e) {}

    var route = {
      name: location.name || (record && record.name),
      meta: (record && record.meta) || {},
      path: location.path || '/',
      hash: location.hash || '',
      query: query,
      params: location.params || {},
      fullPath: getFullPath(location, stringifyQuery),
      matched: record ? formatMatch(record) : []
    };
    if (redirectedFrom) {
      route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);
    }
    return Object.freeze(route)
  }

  function clone (value) {
    if (Array.isArray(value)) {
      return value.map(clone)
    } else if (value && typeof value === 'object') {
      var res = {};
      for (var key in value) {
        res[key] = clone(value[key]);
      }
      return res
    } else {
      return value
    }
  }

  // the starting route that represents the initial state
  var START = createRoute(null, {
    path: '/'
  });

  function formatMatch (record) {
    var res = [];
    while (record) {
      res.unshift(record);
      record = record.parent;
    }
    return res
  }

  function getFullPath (
    ref,
    _stringifyQuery
  ) {
    var path = ref.path;
    var query = ref.query; if ( query === void 0 ) query = {};
    var hash = ref.hash; if ( hash === void 0 ) hash = '';

    var stringify = _stringifyQuery || stringifyQuery;
    return (path || '/') + stringify(query) + hash
  }

  function isSameRoute (a, b, onlyPath) {
    if (b === START) {
      return a === b
    } else if (!b) {
      return false
    } else if (a.path && b.path) {
      return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||
        a.hash === b.hash &&
        isObjectEqual(a.query, b.query))
    } else if (a.name && b.name) {
      return (
        a.name === b.name &&
        (onlyPath || (
          a.hash === b.hash &&
        isObjectEqual(a.query, b.query) &&
        isObjectEqual(a.params, b.params))
        )
      )
    } else {
      return false
    }
  }

  function isObjectEqual (a, b) {
    if ( a === void 0 ) a = {};
    if ( b === void 0 ) b = {};

    // handle null value #1566
    if (!a || !b) { return a === b }
    var aKeys = Object.keys(a).sort();
    var bKeys = Object.keys(b).sort();
    if (aKeys.length !== bKeys.length) {
      return false
    }
    return aKeys.every(function (key, i) {
      var aVal = a[key];
      var bKey = bKeys[i];
      if (bKey !== key) { return false }
      var bVal = b[key];
      // query values can be null and undefined
      if (aVal == null || bVal == null) { return aVal === bVal }
      // check nested equality
      if (typeof aVal === 'object' && typeof bVal === 'object') {
        return isObjectEqual(aVal, bVal)
      }
      return String(aVal) === String(bVal)
    })
  }

  function isIncludedRoute (current, target) {
    return (
      current.path.replace(trailingSlashRE, '/').indexOf(
        target.path.replace(trailingSlashRE, '/')
      ) === 0 &&
      (!target.hash || current.hash === target.hash) &&
      queryIncludes(current.query, target.query)
    )
  }

  function queryIncludes (current, target) {
    for (var key in target) {
      if (!(key in current)) {
        return false
      }
    }
    return true
  }

  function handleRouteEntered (route) {
    for (var i = 0; i < route.matched.length; i++) {
      var record = route.matched[i];
      for (var name in record.instances) {
        var instance = record.instances[name];
        var cbs = record.enteredCbs[name];
        if (!instance || !cbs) { continue }
        delete record.enteredCbs[name];
        for (var i$1 = 0; i$1 < cbs.length; i$1++) {
          if (!instance._isBeingDestroyed) { cbs[i$1](instance); }
        }
      }
    }
  }

  var View = {
    name: 'RouterView',
    functional: true,
    props: {
      name: {
        type: String,
        default: 'default'
      }
    },
    render: function render (_, ref) {
      var props = ref.props;
      var children = ref.children;
      var parent = ref.parent;
      var data = ref.data;

      // used by devtools to display a router-view badge
      data.routerView = true;

      // directly use parent context's createElement() function
      // so that components rendered by router-view can resolve named slots
      var h = parent.$createElement;
      var name = props.name;
      var route = parent.$route;
      var cache = parent._routerViewCache || (parent._routerViewCache = {});

      // determine current view depth, also check to see if the tree
      // has been toggled inactive but kept-alive.
      var depth = 0;
      var inactive = false;
      while (parent && parent._routerRoot !== parent) {
        var vnodeData = parent.$vnode ? parent.$vnode.data : {};
        if (vnodeData.routerView) {
          depth++;
        }
        if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {
          inactive = true;
        }
        parent = parent.$parent;
      }
      data.routerViewDepth = depth;

      // render previous view if the tree is inactive and kept-alive
      if (inactive) {
        var cachedData = cache[name];
        var cachedComponent = cachedData && cachedData.component;
        if (cachedComponent) {
          // #2301
          // pass props
          if (cachedData.configProps) {
            fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);
          }
          return h(cachedComponent, data, children)
        } else {
          // render previous empty view
          return h()
        }
      }

      var matched = route.matched[depth];
      var component = matched && matched.components[name];

      // render empty node if no matched route or no config component
      if (!matched || !component) {
        cache[name] = null;
        return h()
      }

      // cache component
      cache[name] = { component: component };

      // attach instance registration hook
      // this will be called in the instance's injected lifecycle hooks
      data.registerRouteInstance = function (vm, val) {
        // val could be undefined for unregistration
        var current = matched.instances[name];
        if (
          (val && current !== vm) ||
          (!val && current === vm)
        ) {
          matched.instances[name] = val;
        }
      }

      // also register instance in prepatch hook
      // in case the same component instance is reused across different routes
      ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {
        matched.instances[name] = vnode.componentInstance;
      };

      // register instance in init hook
      // in case kept-alive component be actived when routes changed
      data.hook.init = function (vnode) {
        if (vnode.data.keepAlive &&
          vnode.componentInstance &&
          vnode.componentInstance !== matched.instances[name]
        ) {
          matched.instances[name] = vnode.componentInstance;
        }

        // if the route transition has already been confirmed then we weren't
        // able to call the cbs during confirmation as the component was not
        // registered yet, so we call it here.
        handleRouteEntered(route);
      };

      var configProps = matched.props && matched.props[name];
      // save route and configProps in cache
      if (configProps) {
        extend(cache[name], {
          route: route,
          configProps: configProps
        });
        fillPropsinData(component, data, route, configProps);
      }

      return h(component, data, children)
    }
  };

  function fillPropsinData (component, data, route, configProps) {
    // resolve props
    var propsToPass = data.props = resolveProps(route, configProps);
    if (propsToPass) {
      // clone to prevent mutation
      propsToPass = data.props = extend({}, propsToPass);
      // pass non-declared props as attrs
      var attrs = data.attrs = data.attrs || {};
      for (var key in propsToPass) {
        if (!component.props || !(key in component.props)) {
          attrs[key] = propsToPass[key];
          delete propsToPass[key];
        }
      }
    }
  }

  function resolveProps (route, config) {
    switch (typeof config) {
      case 'undefined':
        return
      case 'object':
        return config
      case 'function':
        return config(route)
      case 'boolean':
        return config ? route.params : undefined
      default:
        {
          warn(
            false,
            "props in \"" + (route.path) + "\" is a " + (typeof config) + ", " +
            "expecting an object, function or boolean."
          );
        }
    }
  }

  /*  */

  function resolvePath (
    relative,
    base,
    append
  ) {
    var firstChar = relative.charAt(0);
    if (firstChar === '/') {
      return relative
    }

    if (firstChar === '?' || firstChar === '#') {
      return base + relative
    }

    var stack = base.split('/');

    // remove trailing segment if:
    // - not appending
    // - appending to trailing slash (last segment is empty)
    if (!append || !stack[stack.length - 1]) {
      stack.pop();
    }

    // resolve relative path
    var segments = relative.replace(/^\//, '').split('/');
    for (var i = 0; i < segments.length; i++) {
      var segment = segments[i];
      if (segment === '..') {
        stack.pop();
      } else if (segment !== '.') {
        stack.push(segment);
      }
    }

    // ensure leading slash
    if (stack[0] !== '') {
      stack.unshift('');
    }

    return stack.join('/')
  }

  function parsePath (path) {
    var hash = '';
    var query = '';

    var hashIndex = path.indexOf('#');
    if (hashIndex >= 0) {
      hash = path.slice(hashIndex);
      path = path.slice(0, hashIndex);
    }

    var queryIndex = path.indexOf('?');
    if (queryIndex >= 0) {
      query = path.slice(queryIndex + 1);
      path = path.slice(0, queryIndex);
    }

    return {
      path: path,
      query: query,
      hash: hash
    }
  }

  function cleanPath (path) {
    return path.replace(/\/\//g, '/')
  }

  var isarray = Array.isArray || function (arr) {
    return Object.prototype.toString.call(arr) == '[object Array]';
  };

  /**
   * Expose `pathToRegexp`.
   */
  var pathToRegexp_1 = pathToRegexp;
  var parse_1 = parse;
  var compile_1 = compile;
  var tokensToFunction_1 = tokensToFunction;
  var tokensToRegExp_1 = tokensToRegExp;

  /**
   * The main path matching regexp utility.
   *
   * @type {RegExp}
   */
  var PATH_REGEXP = new RegExp([
    // Match escaped characters that would otherwise appear in future matches.
    // This allows the user to escape special characters that won't transform.
    '(\\\\.)',
    // Match Express-style parameters and un-named parameters with a prefix
    // and optional suffixes. Matches appear as:
    //
    // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
    // "/route(\\d+)"  => [undefined, undefined, undefined, "\d+", undefined, undefined]
    // "/*"            => ["/", undefined, undefined, undefined, undefined, "*"]
    '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
  ].join('|'), 'g');

  /**
   * Parse a string for the raw tokens.
   *
   * @param  {string}  str
   * @param  {Object=} options
   * @return {!Array}
   */
  function parse (str, options) {
    var tokens = [];
    var key = 0;
    var index = 0;
    var path = '';
    var defaultDelimiter = options && options.delimiter || '/';
    var res;

    while ((res = PATH_REGEXP.exec(str)) != null) {
      var m = res[0];
      var escaped = res[1];
      var offset = res.index;
      path += str.slice(index, offset);
      index = offset + m.length;

      // Ignore already escaped sequences.
      if (escaped) {
        path += escaped[1];
        continue
      }

      var next = str[index];
      var prefix = res[2];
      var name = res[3];
      var capture = res[4];
      var group = res[5];
      var modifier = res[6];
      var asterisk = res[7];

      // Push the current path onto the tokens.
      if (path) {
        tokens.push(path);
        path = '';
      }

      var partial = prefix != null && next != null && next !== prefix;
      var repeat = modifier === '+' || modifier === '*';
      var optional = modifier === '?' || modifier === '*';
      var delimiter = res[2] || defaultDelimiter;
      var pattern = capture || group;

      tokens.push({
        name: name || key++,
        prefix: prefix || '',
        delimiter: delimiter,
        optional: optional,
        repeat: repeat,
        partial: partial,
        asterisk: !!asterisk,
        pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
      });
    }

    // Match any characters still remaining.
    if (index < str.length) {
      path += str.substr(index);
    }

    // If the path exists, push it onto the end.
    if (path) {
      tokens.push(path);
    }

    return tokens
  }

  /**
   * Compile a string to a template function for the path.
   *
   * @param  {string}             str
   * @param  {Object=}            options
   * @return {!function(Object=, Object=)}
   */
  function compile (str, options) {
    return tokensToFunction(parse(str, options), options)
  }

  /**
   * Prettier encoding of URI path segments.
   *
   * @param  {string}
   * @return {string}
   */
  function encodeURIComponentPretty (str) {
    return encodeURI(str).replace(/[\/?#]/g, function (c) {
      return '%' + c.charCodeAt(0).toString(16).toUpperCase()
    })
  }

  /**
   * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
   *
   * @param  {string}
   * @return {string}
   */
  function encodeAsterisk (str) {
    return encodeURI(str).replace(/[?#]/g, function (c) {
      return '%' + c.charCodeAt(0).toString(16).toUpperCase()
    })
  }

  /**
   * Expose a method for transforming tokens into the path function.
   */
  function tokensToFunction (tokens, options) {
    // Compile all the tokens into regexps.
    var matches = new Array(tokens.length);

    // Compile all the patterns before compilation.
    for (var i = 0; i < tokens.length; i++) {
      if (typeof tokens[i] === 'object') {
        matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));
      }
    }

    return function (obj, opts) {
      var path = '';
      var data = obj || {};
      var options = opts || {};
      var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;

      for (var i = 0; i < tokens.length; i++) {
        var token = tokens[i];

        if (typeof token === 'string') {
          path += token;

          continue
        }

        var value = data[token.name];
        var segment;

        if (value == null) {
          if (token.optional) {
            // Prepend partial segment prefixes.
            if (token.partial) {
              path += token.prefix;
            }

            continue
          } else {
            throw new TypeError('Expected "' + token.name + '" to be defined')
          }
        }

        if (isarray(value)) {
          if (!token.repeat) {
            throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
          }

          if (value.length === 0) {
            if (token.optional) {
              continue
            } else {
              throw new TypeError('Expected "' + token.name + '" to not be empty')
            }
          }

          for (var j = 0; j < value.length; j++) {
            segment = encode(value[j]);

            if (!matches[i].test(segment)) {
              throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
            }

            path += (j === 0 ? token.prefix : token.delimiter) + segment;
          }

          continue
        }

        segment = token.asterisk ? encodeAsterisk(value) : encode(value);

        if (!matches[i].test(segment)) {
          throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
        }

        path += token.prefix + segment;
      }

      return path
    }
  }

  /**
   * Escape a regular expression string.
   *
   * @param  {string} str
   * @return {string}
   */
  function escapeString (str) {
    return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1')
  }

  /**
   * Escape the capturing group by escaping special characters and meaning.
   *
   * @param  {string} group
   * @return {string}
   */
  function escapeGroup (group) {
    return group.replace(/([=!:$\/()])/g, '\\$1')
  }

  /**
   * Attach the keys as a property of the regexp.
   *
   * @param  {!RegExp} re
   * @param  {Array}   keys
   * @return {!RegExp}
   */
  function attachKeys (re, keys) {
    re.keys = keys;
    return re
  }

  /**
   * Get the flags for a regexp from the options.
   *
   * @param  {Object} options
   * @return {string}
   */
  function flags (options) {
    return options && options.sensitive ? '' : 'i'
  }

  /**
   * Pull out keys from a regexp.
   *
   * @param  {!RegExp} path
   * @param  {!Array}  keys
   * @return {!RegExp}
   */
  function regexpToRegexp (path, keys) {
    // Use a negative lookahead to match only capturing groups.
    var groups = path.source.match(/\((?!\?)/g);

    if (groups) {
      for (var i = 0; i < groups.length; i++) {
        keys.push({
          name: i,
          prefix: null,
          delimiter: null,
          optional: false,
          repeat: false,
          partial: false,
          asterisk: false,
          pattern: null
        });
      }
    }

    return attachKeys(path, keys)
  }

  /**
   * Transform an array into a regexp.
   *
   * @param  {!Array}  path
   * @param  {Array}   keys
   * @param  {!Object} options
   * @return {!RegExp}
   */
  function arrayToRegexp (path, keys, options) {
    var parts = [];

    for (var i = 0; i < path.length; i++) {
      parts.push(pathToRegexp(path[i], keys, options).source);
    }

    var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));

    return attachKeys(regexp, keys)
  }

  /**
   * Create a path regexp from string input.
   *
   * @param  {string}  path
   * @param  {!Array}  keys
   * @param  {!Object} options
   * @return {!RegExp}
   */
  function stringToRegexp (path, keys, options) {
    return tokensToRegExp(parse(path, options), keys, options)
  }

  /**
   * Expose a function for taking tokens and returning a RegExp.
   *
   * @param  {!Array}          tokens
   * @param  {(Array|Object)=} keys
   * @param  {Object=}         options
   * @return {!RegExp}
   */
  function tokensToRegExp (tokens, keys, options) {
    if (!isarray(keys)) {
      options = /** @type {!Object} */ (keys || options);
      keys = [];
    }

    options = options || {};

    var strict = options.strict;
    var end = options.end !== false;
    var route = '';

    // Iterate over the tokens and create our regexp string.
    for (var i = 0; i < tokens.length; i++) {
      var token = tokens[i];

      if (typeof token === 'string') {
        route += escapeString(token);
      } else {
        var prefix = escapeString(token.prefix);
        var capture = '(?:' + token.pattern + ')';

        keys.push(token);

        if (token.repeat) {
          capture += '(?:' + prefix + capture + ')*';
        }

        if (token.optional) {
          if (!token.partial) {
            capture = '(?:' + prefix + '(' + capture + '))?';
          } else {
            capture = prefix + '(' + capture + ')?';
          }
        } else {
          capture = prefix + '(' + capture + ')';
        }

        route += capture;
      }
    }

    var delimiter = escapeString(options.delimiter || '/');
    var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;

    // In non-strict mode we allow a slash at the end of match. If the path to
    // match already ends with a slash, we remove it for consistency. The slash
    // is valid at the end of a path match, not in the middle. This is important
    // in non-ending mode, where "/test/" shouldn't match "/test//route".
    if (!strict) {
      route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';
    }

    if (end) {
      route += '$';
    } else {
      // In non-ending mode, we need the capturing groups to match as much as
      // possible by using a positive lookahead to the end or next path segment.
      route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';
    }

    return attachKeys(new RegExp('^' + route, flags(options)), keys)
  }

  /**
   * Normalize the given path string, returning a regular expression.
   *
   * An empty array can be passed in for the keys, which will hold the
   * placeholder key descriptions. For example, using `/user/:id`, `keys` will
   * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
   *
   * @param  {(string|RegExp|Array)} path
   * @param  {(Array|Object)=}       keys
   * @param  {Object=}               options
   * @return {!RegExp}
   */
  function pathToRegexp (path, keys, options) {
    if (!isarray(keys)) {
      options = /** @type {!Object} */ (keys || options);
      keys = [];
    }

    options = options || {};

    if (path instanceof RegExp) {
      return regexpToRegexp(path, /** @type {!Array} */ (keys))
    }

    if (isarray(path)) {
      return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
    }

    return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
  }
  pathToRegexp_1.parse = parse_1;
  pathToRegexp_1.compile = compile_1;
  pathToRegexp_1.tokensToFunction = tokensToFunction_1;
  pathToRegexp_1.tokensToRegExp = tokensToRegExp_1;

  /*  */

  // $flow-disable-line
  var regexpCompileCache = Object.create(null);

  function fillParams (
    path,
    params,
    routeMsg
  ) {
    params = params || {};
    try {
      var filler =
        regexpCompileCache[path] ||
        (regexpCompileCache[path] = pathToRegexp_1.compile(path));

      // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}
      // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string
      if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }

      return filler(params, { pretty: true })
    } catch (e) {
      {
        // Fix #3072 no warn if `pathMatch` is string
        warn(typeof params.pathMatch === 'string', ("missing param for " + routeMsg + ": " + (e.message)));
      }
      return ''
    } finally {
      // delete the 0 if it was added
      delete params[0];
    }
  }

  /*  */

  function normalizeLocation (
    raw,
    current,
    append,
    router
  ) {
    var next = typeof raw === 'string' ? { path: raw } : raw;
    // named target
    if (next._normalized) {
      return next
    } else if (next.name) {
      next = extend({}, raw);
      var params = next.params;
      if (params && typeof params === 'object') {
        next.params = extend({}, params);
      }
      return next
    }

    // relative params
    if (!next.path && next.params && current) {
      next = extend({}, next);
      next._normalized = true;
      var params$1 = extend(extend({}, current.params), next.params);
      if (current.name) {
        next.name = current.name;
        next.params = params$1;
      } else if (current.matched.length) {
        var rawPath = current.matched[current.matched.length - 1].path;
        next.path = fillParams(rawPath, params$1, ("path " + (current.path)));
      } else {
        warn(false, "relative params navigation requires a current route.");
      }
      return next
    }

    var parsedPath = parsePath(next.path || '');
    var basePath = (current && current.path) || '/';
    var path = parsedPath.path
      ? resolvePath(parsedPath.path, basePath, append || next.append)
      : basePath;

    var query = resolveQuery(
      parsedPath.query,
      next.query,
      router && router.options.parseQuery
    );

    var hash = next.hash || parsedPath.hash;
    if (hash && hash.charAt(0) !== '#') {
      hash = "#" + hash;
    }

    return {
      _normalized: true,
      path: path,
      query: query,
      hash: hash
    }
  }

  /*  */

  // work around weird flow bug
  var toTypes = [String, Object];
  var eventTypes = [String, Array];

  var noop = function () {};

  var warnedCustomSlot;
  var warnedTagProp;
  var warnedEventProp;

  var Link = {
    name: 'RouterLink',
    props: {
      to: {
        type: toTypes,
        required: true
      },
      tag: {
        type: String,
        default: 'a'
      },
      custom: Boolean,
      exact: Boolean,
      exactPath: Boolean,
      append: Boolean,
      replace: Boolean,
      activeClass: String,
      exactActiveClass: String,
      ariaCurrentValue: {
        type: String,
        default: 'page'
      },
      event: {
        type: eventTypes,
        default: 'click'
      }
    },
    render: function render (h) {
      var this$1 = this;

      var router = this.$router;
      var current = this.$route;
      var ref = router.resolve(
        this.to,
        current,
        this.append
      );
      var location = ref.location;
      var route = ref.route;
      var href = ref.href;

      var classes = {};
      var globalActiveClass = router.options.linkActiveClass;
      var globalExactActiveClass = router.options.linkExactActiveClass;
      // Support global empty active class
      var activeClassFallback =
        globalActiveClass == null ? 'router-link-active' : globalActiveClass;
      var exactActiveClassFallback =
        globalExactActiveClass == null
          ? 'router-link-exact-active'
          : globalExactActiveClass;
      var activeClass =
        this.activeClass == null ? activeClassFallback : this.activeClass;
      var exactActiveClass =
        this.exactActiveClass == null
          ? exactActiveClassFallback
          : this.exactActiveClass;

      var compareTarget = route.redirectedFrom
        ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)
        : route;

      classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);
      classes[activeClass] = this.exact || this.exactPath
        ? classes[exactActiveClass]
        : isIncludedRoute(current, compareTarget);

      var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;

      var handler = function (e) {
        if (guardEvent(e)) {
          if (this$1.replace) {
            router.replace(location, noop);
          } else {
            router.push(location, noop);
          }
        }
      };

      var on = { click: guardEvent };
      if (Array.isArray(this.event)) {
        this.event.forEach(function (e) {
          on[e] = handler;
        });
      } else {
        on[this.event] = handler;
      }

      var data = { class: classes };

      var scopedSlot =
        !this.$scopedSlots.$hasNormal &&
        this.$scopedSlots.default &&
        this.$scopedSlots.default({
          href: href,
          route: route,
          navigate: handler,
          isActive: classes[activeClass],
          isExactActive: classes[exactActiveClass]
        });

      if (scopedSlot) {
        if ( !this.custom) {
          !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n');
          warnedCustomSlot = true;
        }
        if (scopedSlot.length === 1) {
          return scopedSlot[0]
        } else if (scopedSlot.length > 1 || !scopedSlot.length) {
          {
            warn(
              false,
              ("<router-link> with to=\"" + (this.to) + "\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.")
            );
          }
          return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)
        }
      }

      {
        if ('tag' in this.$options.propsData && !warnedTagProp) {
          warn(
            false,
            "<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link."
          );
          warnedTagProp = true;
        }
        if ('event' in this.$options.propsData && !warnedEventProp) {
          warn(
            false,
            "<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link."
          );
          warnedEventProp = true;
        }
      }

      if (this.tag === 'a') {
        data.on = on;
        data.attrs = { href: href, 'aria-current': ariaCurrentValue };
      } else {
        // find the first <a> child and apply listener and href
        var a = findAnchor(this.$slots.default);
        if (a) {
          // in case the <a> is a static node
          a.isStatic = false;
          var aData = (a.data = extend({}, a.data));
          aData.on = aData.on || {};
          // transform existing events in both objects into arrays so we can push later
          for (var event in aData.on) {
            var handler$1 = aData.on[event];
            if (event in on) {
              aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];
            }
          }
          // append new listeners for router-link
          for (var event$1 in on) {
            if (event$1 in aData.on) {
              // on[event] is always a function
              aData.on[event$1].push(on[event$1]);
            } else {
              aData.on[event$1] = handler;
            }
          }

          var aAttrs = (a.data.attrs = extend({}, a.data.attrs));
          aAttrs.href = href;
          aAttrs['aria-current'] = ariaCurrentValue;
        } else {
          // doesn't have <a> child, apply listener to self
          data.on = on;
        }
      }

      return h(this.tag, data, this.$slots.default)
    }
  };

  function guardEvent (e) {
    // don't redirect with control keys
    if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }
    // don't redirect when preventDefault called
    if (e.defaultPrevented) { return }
    // don't redirect on right click
    if (e.button !== undefined && e.button !== 0) { return }
    // don't redirect if `target="_blank"`
    if (e.currentTarget && e.currentTarget.getAttribute) {
      var target = e.currentTarget.getAttribute('target');
      if (/\b_blank\b/i.test(target)) { return }
    }
    // this may be a Weex event which doesn't have this method
    if (e.preventDefault) {
      e.preventDefault();
    }
    return true
  }

  function findAnchor (children) {
    if (children) {
      var child;
      for (var i = 0; i < children.length; i++) {
        child = children[i];
        if (child.tag === 'a') {
          return child
        }
        if (child.children && (child = findAnchor(child.children))) {
          return child
        }
      }
    }
  }

  var _Vue;

  function install (Vue) {
    if (install.installed && _Vue === Vue) { return }
    install.installed = true;

    _Vue = Vue;

    var isDef = function (v) { return v !== undefined; };

    var registerInstance = function (vm, callVal) {
      var i = vm.$options._parentVnode;
      if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {
        i(vm, callVal);
      }
    };

    Vue.mixin({
      beforeCreate: function beforeCreate () {
        if (isDef(this.$options.router)) {
          this._routerRoot = this;
          this._router = this.$options.router;
          this._router.init(this);
          Vue.util.defineReactive(this, '_route', this._router.history.current);
        } else {
          this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;
        }
        registerInstance(this, this);
      },
      destroyed: function destroyed () {
        registerInstance(this);
      }
    });

    Object.defineProperty(Vue.prototype, '$router', {
      get: function get () { return this._routerRoot._router }
    });

    Object.defineProperty(Vue.prototype, '$route', {
      get: function get () { return this._routerRoot._route }
    });

    Vue.component('RouterView', View);
    Vue.component('RouterLink', Link);

    var strats = Vue.config.optionMergeStrategies;
    // use the same hook merging strategy for route hooks
    strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;
  }

  /*  */

  var inBrowser = typeof window !== 'undefined';

  /*  */

  function createRouteMap (
    routes,
    oldPathList,
    oldPathMap,
    oldNameMap,
    parentRoute
  ) {
    // the path list is used to control path matching priority
    var pathList = oldPathList || [];
    // $flow-disable-line
    var pathMap = oldPathMap || Object.create(null);
    // $flow-disable-line
    var nameMap = oldNameMap || Object.create(null);

    routes.forEach(function (route) {
      addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);
    });

    // ensure wildcard routes are always at the end
    for (var i = 0, l = pathList.length; i < l; i++) {
      if (pathList[i] === '*') {
        pathList.push(pathList.splice(i, 1)[0]);
        l--;
        i--;
      }
    }

    {
      // warn if routes do not include leading slashes
      var found = pathList
      // check for missing leading slash
        .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });

      if (found.length > 0) {
        var pathNames = found.map(function (path) { return ("- " + path); }).join('\n');
        warn(false, ("Non-nested routes must include a leading slash character. Fix the following routes: \n" + pathNames));
      }
    }

    return {
      pathList: pathList,
      pathMap: pathMap,
      nameMap: nameMap
    }
  }

  function addRouteRecord (
    pathList,
    pathMap,
    nameMap,
    route,
    parent,
    matchAs
  ) {
    var path = route.path;
    var name = route.name;
    {
      assert(path != null, "\"path\" is required in a route configuration.");
      assert(
        typeof route.component !== 'string',
        "route config \"component\" for path: " + (String(
          path || name
        )) + " cannot be a " + "string id. Use an actual component instead."
      );

      warn(
        // eslint-disable-next-line no-control-regex
        !/[^\u0000-\u007F]+/.test(path),
        "Route with path \"" + path + "\" contains unencoded characters, make sure " +
          "your path is correctly encoded before passing it to the router. Use " +
          "encodeURI to encode static segments of your path."
      );
    }

    var pathToRegexpOptions =
      route.pathToRegexpOptions || {};
    var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);

    if (typeof route.caseSensitive === 'boolean') {
      pathToRegexpOptions.sensitive = route.caseSensitive;
    }

    var record = {
      path: normalizedPath,
      regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),
      components: route.components || { default: route.component },
      alias: route.alias
        ? typeof route.alias === 'string'
          ? [route.alias]
          : route.alias
        : [],
      instances: {},
      enteredCbs: {},
      name: name,
      parent: parent,
      matchAs: matchAs,
      redirect: route.redirect,
      beforeEnter: route.beforeEnter,
      meta: route.meta || {},
      props:
        route.props == null
          ? {}
          : route.components
            ? route.props
            : { default: route.props }
    };

    if (route.children) {
      // Warn if route is named, does not redirect and has a default child route.
      // If users navigate to this route by name, the default child will
      // not be rendered (GH Issue #629)
      {
        if (
          route.name &&
          !route.redirect &&
          route.children.some(function (child) { return /^\/?$/.test(child.path); })
        ) {
          warn(
            false,
            "Named Route '" + (route.name) + "' has a default child route. " +
              "When navigating to this named route (:to=\"{name: '" + (route.name) + "'\"), " +
              "the default child route will not be rendered. Remove the name from " +
              "this route and use the name of the default child route for named " +
              "links instead."
          );
        }
      }
      route.children.forEach(function (child) {
        var childMatchAs = matchAs
          ? cleanPath((matchAs + "/" + (child.path)))
          : undefined;
        addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);
      });
    }

    if (!pathMap[record.path]) {
      pathList.push(record.path);
      pathMap[record.path] = record;
    }

    if (route.alias !== undefined) {
      var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];
      for (var i = 0; i < aliases.length; ++i) {
        var alias = aliases[i];
        if ( alias === path) {
          warn(
            false,
            ("Found an alias with the same value as the path: \"" + path + "\". You have to remove that alias. It will be ignored in development.")
          );
          // skip in dev to make it work
          continue
        }

        var aliasRoute = {
          path: alias,
          children: route.children
        };
        addRouteRecord(
          pathList,
          pathMap,
          nameMap,
          aliasRoute,
          parent,
          record.path || '/' // matchAs
        );
      }
    }

    if (name) {
      if (!nameMap[name]) {
        nameMap[name] = record;
      } else if ( !matchAs) {
        warn(
          false,
          "Duplicate named routes definition: " +
            "{ name: \"" + name + "\", path: \"" + (record.path) + "\" }"
        );
      }
    }
  }

  function compileRouteRegex (
    path,
    pathToRegexpOptions
  ) {
    var regex = pathToRegexp_1(path, [], pathToRegexpOptions);
    {
      var keys = Object.create(null);
      regex.keys.forEach(function (key) {
        warn(
          !keys[key.name],
          ("Duplicate param keys in route with path: \"" + path + "\"")
        );
        keys[key.name] = true;
      });
    }
    return regex
  }

  function normalizePath (
    path,
    parent,
    strict
  ) {
    if (!strict) { path = path.replace(/\/$/, ''); }
    if (path[0] === '/') { return path }
    if (parent == null) { return path }
    return cleanPath(((parent.path) + "/" + path))
  }

  /*  */



  function createMatcher (
    routes,
    router
  ) {
    var ref = createRouteMap(routes);
    var pathList = ref.pathList;
    var pathMap = ref.pathMap;
    var nameMap = ref.nameMap;

    function addRoutes (routes) {
      createRouteMap(routes, pathList, pathMap, nameMap);
    }

    function addRoute (parentOrRoute, route) {
      var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;
      // $flow-disable-line
      createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);

      // add aliases of parent
      if (parent) {
        createRouteMap(
          // $flow-disable-line route is defined if parent is
          parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),
          pathList,
          pathMap,
          nameMap,
          parent
        );
      }
    }

    function getRoutes () {
      return pathList.map(function (path) { return pathMap[path]; })
    }

    function match (
      raw,
      currentRoute,
      redirectedFrom
    ) {
      var location = normalizeLocation(raw, currentRoute, false, router);
      var name = location.name;

      if (name) {
        var record = nameMap[name];
        {
          warn(record, ("Route with name '" + name + "' does not exist"));
        }
        if (!record) { return _createRoute(null, location) }
        var paramNames = record.regex.keys
          .filter(function (key) { return !key.optional; })
          .map(function (key) { return key.name; });

        if (typeof location.params !== 'object') {
          location.params = {};
        }

        if (currentRoute && typeof currentRoute.params === 'object') {
          for (var key in currentRoute.params) {
            if (!(key in location.params) && paramNames.indexOf(key) > -1) {
              location.params[key] = currentRoute.params[key];
            }
          }
        }

        location.path = fillParams(record.path, location.params, ("named route \"" + name + "\""));
        return _createRoute(record, location, redirectedFrom)
      } else if (location.path) {
        location.params = {};
        for (var i = 0; i < pathList.length; i++) {
          var path = pathList[i];
          var record$1 = pathMap[path];
          if (matchRoute(record$1.regex, location.path, location.params)) {
            return _createRoute(record$1, location, redirectedFrom)
          }
        }
      }
      // no match
      return _createRoute(null, location)
    }

    function redirect (
      record,
      location
    ) {
      var originalRedirect = record.redirect;
      var redirect = typeof originalRedirect === 'function'
        ? originalRedirect(createRoute(record, location, null, router))
        : originalRedirect;

      if (typeof redirect === 'string') {
        redirect = { path: redirect };
      }

      if (!redirect || typeof redirect !== 'object') {
        {
          warn(
            false, ("invalid redirect option: " + (JSON.stringify(redirect)))
          );
        }
        return _createRoute(null, location)
      }

      var re = redirect;
      var name = re.name;
      var path = re.path;
      var query = location.query;
      var hash = location.hash;
      var params = location.params;
      query = re.hasOwnProperty('query') ? re.query : query;
      hash = re.hasOwnProperty('hash') ? re.hash : hash;
      params = re.hasOwnProperty('params') ? re.params : params;

      if (name) {
        // resolved named direct
        var targetRecord = nameMap[name];
        {
          assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found."));
        }
        return match({
          _normalized: true,
          name: name,
          query: query,
          hash: hash,
          params: params
        }, undefined, location)
      } else if (path) {
        // 1. resolve relative redirect
        var rawPath = resolveRecordPath(path, record);
        // 2. resolve params
        var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\""));
        // 3. rematch with existing query and hash
        return match({
          _normalized: true,
          path: resolvedPath,
          query: query,
          hash: hash
        }, undefined, location)
      } else {
        {
          warn(false, ("invalid redirect option: " + (JSON.stringify(redirect))));
        }
        return _createRoute(null, location)
      }
    }

    function alias (
      record,
      location,
      matchAs
    ) {
      var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\""));
      var aliasedMatch = match({
        _normalized: true,
        path: aliasedPath
      });
      if (aliasedMatch) {
        var matched = aliasedMatch.matched;
        var aliasedRecord = matched[matched.length - 1];
        location.params = aliasedMatch.params;
        return _createRoute(aliasedRecord, location)
      }
      return _createRoute(null, location)
    }

    function _createRoute (
      record,
      location,
      redirectedFrom
    ) {
      if (record && record.redirect) {
        return redirect(record, redirectedFrom || location)
      }
      if (record && record.matchAs) {
        return alias(record, location, record.matchAs)
      }
      return createRoute(record, location, redirectedFrom, router)
    }

    return {
      match: match,
      addRoute: addRoute,
      getRoutes: getRoutes,
      addRoutes: addRoutes
    }
  }

  function matchRoute (
    regex,
    path,
    params
  ) {
    var m = path.match(regex);

    if (!m) {
      return false
    } else if (!params) {
      return true
    }

    for (var i = 1, len = m.length; i < len; ++i) {
      var key = regex.keys[i - 1];
      if (key) {
        // Fix #1994: using * with props: true generates a param named 0
        params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];
      }
    }

    return true
  }

  function resolveRecordPath (path, record) {
    return resolvePath(path, record.parent ? record.parent.path : '/', true)
  }

  /*  */

  // use User Timing api (if present) for more accurate key precision
  var Time =
    inBrowser && window.performance && window.performance.now
      ? window.performance
      : Date;

  function genStateKey () {
    return Time.now().toFixed(3)
  }

  var _key = genStateKey();

  function getStateKey () {
    return _key
  }

  function setStateKey (key) {
    return (_key = key)
  }

  /*  */

  var positionStore = Object.create(null);

  function setupScroll () {
    // Prevent browser scroll behavior on History popstate
    if ('scrollRestoration' in window.history) {
      window.history.scrollRestoration = 'manual';
    }
    // Fix for #1585 for Firefox
    // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678
    // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with
    // window.location.protocol + '//' + window.location.host
    // location.host contains the port and location.hostname doesn't
    var protocolAndPath = window.location.protocol + '//' + window.location.host;
    var absolutePath = window.location.href.replace(protocolAndPath, '');
    // preserve existing history state as it could be overriden by the user
    var stateCopy = extend({}, window.history.state);
    stateCopy.key = getStateKey();
    window.history.replaceState(stateCopy, '', absolutePath);
    window.addEventListener('popstate', handlePopState);
    return function () {
      window.removeEventListener('popstate', handlePopState);
    }
  }

  function handleScroll (
    router,
    to,
    from,
    isPop
  ) {
    if (!router.app) {
      return
    }

    var behavior = router.options.scrollBehavior;
    if (!behavior) {
      return
    }

    {
      assert(typeof behavior === 'function', "scrollBehavior must be a function");
    }

    // wait until re-render finishes before scrolling
    router.app.$nextTick(function () {
      var position = getScrollPosition();
      var shouldScroll = behavior.call(
        router,
        to,
        from,
        isPop ? position : null
      );

      if (!shouldScroll) {
        return
      }

      if (typeof shouldScroll.then === 'function') {
        shouldScroll
          .then(function (shouldScroll) {
            scrollToPosition((shouldScroll), position);
          })
          .catch(function (err) {
            {
              assert(false, err.toString());
            }
          });
      } else {
        scrollToPosition(shouldScroll, position);
      }
    });
  }

  function saveScrollPosition () {
    var key = getStateKey();
    if (key) {
      positionStore[key] = {
        x: window.pageXOffset,
        y: window.pageYOffset
      };
    }
  }

  function handlePopState (e) {
    saveScrollPosition();
    if (e.state && e.state.key) {
      setStateKey(e.state.key);
    }
  }

  function getScrollPosition () {
    var key = getStateKey();
    if (key) {
      return positionStore[key]
    }
  }

  function getElementPosition (el, offset) {
    var docEl = document.documentElement;
    var docRect = docEl.getBoundingClientRect();
    var elRect = el.getBoundingClientRect();
    return {
      x: elRect.left - docRect.left - offset.x,
      y: elRect.top - docRect.top - offset.y
    }
  }

  function isValidPosition (obj) {
    return isNumber(obj.x) || isNumber(obj.y)
  }

  function normalizePosition (obj) {
    return {
      x: isNumber(obj.x) ? obj.x : window.pageXOffset,
      y: isNumber(obj.y) ? obj.y : window.pageYOffset
    }
  }

  function normalizeOffset (obj) {
    return {
      x: isNumber(obj.x) ? obj.x : 0,
      y: isNumber(obj.y) ? obj.y : 0
    }
  }

  function isNumber (v) {
    return typeof v === 'number'
  }

  var hashStartsWithNumberRE = /^#\d/;

  function scrollToPosition (shouldScroll, position) {
    var isObject = typeof shouldScroll === 'object';
    if (isObject && typeof shouldScroll.selector === 'string') {
      // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]
      // but at the same time, it doesn't make much sense to select an element with an id and an extra selector
      var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line
        ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line
        : document.querySelector(shouldScroll.selector);

      if (el) {
        var offset =
          shouldScroll.offset && typeof shouldScroll.offset === 'object'
            ? shouldScroll.offset
            : {};
        offset = normalizeOffset(offset);
        position = getElementPosition(el, offset);
      } else if (isValidPosition(shouldScroll)) {
        position = normalizePosition(shouldScroll);
      }
    } else if (isObject && isValidPosition(shouldScroll)) {
      position = normalizePosition(shouldScroll);
    }

    if (position) {
      // $flow-disable-line
      if ('scrollBehavior' in document.documentElement.style) {
        window.scrollTo({
          left: position.x,
          top: position.y,
          // $flow-disable-line
          behavior: shouldScroll.behavior
        });
      } else {
        window.scrollTo(position.x, position.y);
      }
    }
  }

  /*  */

  var supportsPushState =
    inBrowser &&
    (function () {
      var ua = window.navigator.userAgent;

      if (
        (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&
        ua.indexOf('Mobile Safari') !== -1 &&
        ua.indexOf('Chrome') === -1 &&
        ua.indexOf('Windows Phone') === -1
      ) {
        return false
      }

      return window.history && typeof window.history.pushState === 'function'
    })();

  function pushState (url, replace) {
    saveScrollPosition();
    // try...catch the pushState call to get around Safari
    // DOM Exception 18 where it limits to 100 pushState calls
    var history = window.history;
    try {
      if (replace) {
        // preserve existing history state as it could be overriden by the user
        var stateCopy = extend({}, history.state);
        stateCopy.key = getStateKey();
        history.replaceState(stateCopy, '', url);
      } else {
        history.pushState({ key: setStateKey(genStateKey()) }, '', url);
      }
    } catch (e) {
      window.location[replace ? 'replace' : 'assign'](url);
    }
  }

  function replaceState (url) {
    pushState(url, true);
  }

  /*  */

  function runQueue (queue, fn, cb) {
    var step = function (index) {
      if (index >= queue.length) {
        cb();
      } else {
        if (queue[index]) {
          fn(queue[index], function () {
            step(index + 1);
          });
        } else {
          step(index + 1);
        }
      }
    };
    step(0);
  }

  // When changing thing, also edit router.d.ts
  var NavigationFailureType = {
    redirected: 2,
    aborted: 4,
    cancelled: 8,
    duplicated: 16
  };

  function createNavigationRedirectedError (from, to) {
    return createRouterError(
      from,
      to,
      NavigationFailureType.redirected,
      ("Redirected when going from \"" + (from.fullPath) + "\" to \"" + (stringifyRoute(
        to
      )) + "\" via a navigation guard.")
    )
  }

  function createNavigationDuplicatedError (from, to) {
    var error = createRouterError(
      from,
      to,
      NavigationFailureType.duplicated,
      ("Avoided redundant navigation to current location: \"" + (from.fullPath) + "\".")
    );
    // backwards compatible with the first introduction of Errors
    error.name = 'NavigationDuplicated';
    return error
  }

  function createNavigationCancelledError (from, to) {
    return createRouterError(
      from,
      to,
      NavigationFailureType.cancelled,
      ("Navigation cancelled from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" with a new navigation.")
    )
  }

  function createNavigationAbortedError (from, to) {
    return createRouterError(
      from,
      to,
      NavigationFailureType.aborted,
      ("Navigation aborted from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" via a navigation guard.")
    )
  }

  function createRouterError (from, to, type, message) {
    var error = new Error(message);
    error._isRouter = true;
    error.from = from;
    error.to = to;
    error.type = type;

    return error
  }

  var propertiesToLog = ['params', 'query', 'hash'];

  function stringifyRoute (to) {
    if (typeof to === 'string') { return to }
    if ('path' in to) { return to.path }
    var location = {};
    propertiesToLog.forEach(function (key) {
      if (key in to) { location[key] = to[key]; }
    });
    return JSON.stringify(location, null, 2)
  }

  function isError (err) {
    return Object.prototype.toString.call(err).indexOf('Error') > -1
  }

  function isNavigationFailure (err, errorType) {
    return (
      isError(err) &&
      err._isRouter &&
      (errorType == null || err.type === errorType)
    )
  }

  /*  */

  function resolveAsyncComponents (matched) {
    return function (to, from, next) {
      var hasAsync = false;
      var pending = 0;
      var error = null;

      flatMapComponents(matched, function (def, _, match, key) {
        // if it's a function and doesn't have cid attached,
        // assume it's an async component resolve function.
        // we are not using Vue's default async resolving mechanism because
        // we want to halt the navigation until the incoming component has been
        // resolved.
        if (typeof def === 'function' && def.cid === undefined) {
          hasAsync = true;
          pending++;

          var resolve = once(function (resolvedDef) {
            if (isESModule(resolvedDef)) {
              resolvedDef = resolvedDef.default;
            }
            // save resolved on async factory in case it's used elsewhere
            def.resolved = typeof resolvedDef === 'function'
              ? resolvedDef
              : _Vue.extend(resolvedDef);
            match.components[key] = resolvedDef;
            pending--;
            if (pending <= 0) {
              next();
            }
          });

          var reject = once(function (reason) {
            var msg = "Failed to resolve async component " + key + ": " + reason;
             warn(false, msg);
            if (!error) {
              error = isError(reason)
                ? reason
                : new Error(msg);
              next(error);
            }
          });

          var res;
          try {
            res = def(resolve, reject);
          } catch (e) {
            reject(e);
          }
          if (res) {
            if (typeof res.then === 'function') {
              res.then(resolve, reject);
            } else {
              // new syntax in Vue 2.3
              var comp = res.component;
              if (comp && typeof comp.then === 'function') {
                comp.then(resolve, reject);
              }
            }
          }
        }
      });

      if (!hasAsync) { next(); }
    }
  }

  function flatMapComponents (
    matched,
    fn
  ) {
    return flatten(matched.map(function (m) {
      return Object.keys(m.components).map(function (key) { return fn(
        m.components[key],
        m.instances[key],
        m, key
      ); })
    }))
  }

  function flatten (arr) {
    return Array.prototype.concat.apply([], arr)
  }

  var hasSymbol =
    typeof Symbol === 'function' &&
    typeof Symbol.toStringTag === 'symbol';

  function isESModule (obj) {
    return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')
  }

  // in Webpack 2, require.ensure now also returns a Promise
  // so the resolve/reject functions may get called an extra time
  // if the user uses an arrow function shorthand that happens to
  // return that Promise.
  function once (fn) {
    var called = false;
    return function () {
      var args = [], len = arguments.length;
      while ( len-- ) args[ len ] = arguments[ len ];

      if (called) { return }
      called = true;
      return fn.apply(this, args)
    }
  }

  /*  */

  var History = function History (router, base) {
    this.router = router;
    this.base = normalizeBase(base);
    // start with a route object that stands for "nowhere"
    this.current = START;
    this.pending = null;
    this.ready = false;
    this.readyCbs = [];
    this.readyErrorCbs = [];
    this.errorCbs = [];
    this.listeners = [];
  };

  History.prototype.listen = function listen (cb) {
    this.cb = cb;
  };

  History.prototype.onReady = function onReady (cb, errorCb) {
    if (this.ready) {
      cb();
    } else {
      this.readyCbs.push(cb);
      if (errorCb) {
        this.readyErrorCbs.push(errorCb);
      }
    }
  };

  History.prototype.onError = function onError (errorCb) {
    this.errorCbs.push(errorCb);
  };

  History.prototype.transitionTo = function transitionTo (
    location,
    onComplete,
    onAbort
  ) {
      var this$1 = this;

    var route;
    // catch redirect option https://github.com/vuejs/vue-router/issues/3201
    try {
      route = this.router.match(location, this.current);
    } catch (e) {
      this.errorCbs.forEach(function (cb) {
        cb(e);
      });
      // Exception should still be thrown
      throw e
    }
    var prev = this.current;
    this.confirmTransition(
      route,
      function () {
        this$1.updateRoute(route);
        onComplete && onComplete(route);
        this$1.ensureURL();
        this$1.router.afterHooks.forEach(function (hook) {
          hook && hook(route, prev);
        });

        // fire ready cbs once
        if (!this$1.ready) {
          this$1.ready = true;
          this$1.readyCbs.forEach(function (cb) {
            cb(route);
          });
        }
      },
      function (err) {
        if (onAbort) {
          onAbort(err);
        }
        if (err && !this$1.ready) {
          // Initial redirection should not mark the history as ready yet
          // because it's triggered by the redirection instead
          // https://github.com/vuejs/vue-router/issues/3225
          // https://github.com/vuejs/vue-router/issues/3331
          if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {
            this$1.ready = true;
            this$1.readyErrorCbs.forEach(function (cb) {
              cb(err);
            });
          }
        }
      }
    );
  };

  History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {
      var this$1 = this;

    var current = this.current;
    this.pending = route;
    var abort = function (err) {
      // changed after adding errors with
      // https://github.com/vuejs/vue-router/pull/3047 before that change,
      // redirect and aborted navigation would produce an err == null
      if (!isNavigationFailure(err) && isError(err)) {
        if (this$1.errorCbs.length) {
          this$1.errorCbs.forEach(function (cb) {
            cb(err);
          });
        } else {
          warn(false, 'uncaught error during route navigation:');
          console.error(err);
        }
      }
      onAbort && onAbort(err);
    };
    var lastRouteIndex = route.matched.length - 1;
    var lastCurrentIndex = current.matched.length - 1;
    if (
      isSameRoute(route, current) &&
      // in the case the route map has been dynamically appended to
      lastRouteIndex === lastCurrentIndex &&
      route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]
    ) {
      this.ensureURL();
      return abort(createNavigationDuplicatedError(current, route))
    }

    var ref = resolveQueue(
      this.current.matched,
      route.matched
    );
      var updated = ref.updated;
      var deactivated = ref.deactivated;
      var activated = ref.activated;

    var queue = [].concat(
      // in-component leave guards
      extractLeaveGuards(deactivated),
      // global before hooks
      this.router.beforeHooks,
      // in-component update hooks
      extractUpdateHooks(updated),
      // in-config enter guards
      activated.map(function (m) { return m.beforeEnter; }),
      // async components
      resolveAsyncComponents(activated)
    );

    var iterator = function (hook, next) {
      if (this$1.pending !== route) {
        return abort(createNavigationCancelledError(current, route))
      }
      try {
        hook(route, current, function (to) {
          if (to === false) {
            // next(false) -> abort navigation, ensure current URL
            this$1.ensureURL(true);
            abort(createNavigationAbortedError(current, route));
          } else if (isError(to)) {
            this$1.ensureURL(true);
            abort(to);
          } else if (
            typeof to === 'string' ||
            (typeof to === 'object' &&
              (typeof to.path === 'string' || typeof to.name === 'string'))
          ) {
            // next('/') or next({ path: '/' }) -> redirect
            abort(createNavigationRedirectedError(current, route));
            if (typeof to === 'object' && to.replace) {
              this$1.replace(to);
            } else {
              this$1.push(to);
            }
          } else {
            // confirm transition and pass on the value
            next(to);
          }
        });
      } catch (e) {
        abort(e);
      }
    };

    runQueue(queue, iterator, function () {
      // wait until async components are resolved before
      // extracting in-component enter guards
      var enterGuards = extractEnterGuards(activated);
      var queue = enterGuards.concat(this$1.router.resolveHooks);
      runQueue(queue, iterator, function () {
        if (this$1.pending !== route) {
          return abort(createNavigationCancelledError(current, route))
        }
        this$1.pending = null;
        onComplete(route);
        if (this$1.router.app) {
          this$1.router.app.$nextTick(function () {
            handleRouteEntered(route);
          });
        }
      });
    });
  };

  History.prototype.updateRoute = function updateRoute (route) {
    this.current = route;
    this.cb && this.cb(route);
  };

  History.prototype.setupListeners = function setupListeners () {
    // Default implementation is empty
  };

  History.prototype.teardown = function teardown () {
    // clean up event listeners
    // https://github.com/vuejs/vue-router/issues/2341
    this.listeners.forEach(function (cleanupListener) {
      cleanupListener();
    });
    this.listeners = [];

    // reset current history route
    // https://github.com/vuejs/vue-router/issues/3294
    this.current = START;
    this.pending = null;
  };

  function normalizeBase (base) {
    if (!base) {
      if (inBrowser) {
        // respect <base> tag
        var baseEl = document.querySelector('base');
        base = (baseEl && baseEl.getAttribute('href')) || '/';
        // strip full URL origin
        base = base.replace(/^https?:\/\/[^\/]+/, '');
      } else {
        base = '/';
      }
    }
    // make sure there's the starting slash
    if (base.charAt(0) !== '/') {
      base = '/' + base;
    }
    // remove trailing slash
    return base.replace(/\/$/, '')
  }

  function resolveQueue (
    current,
    next
  ) {
    var i;
    var max = Math.max(current.length, next.length);
    for (i = 0; i < max; i++) {
      if (current[i] !== next[i]) {
        break
      }
    }
    return {
      updated: next.slice(0, i),
      activated: next.slice(i),
      deactivated: current.slice(i)
    }
  }

  function extractGuards (
    records,
    name,
    bind,
    reverse
  ) {
    var guards = flatMapComponents(records, function (def, instance, match, key) {
      var guard = extractGuard(def, name);
      if (guard) {
        return Array.isArray(guard)
          ? guard.map(function (guard) { return bind(guard, instance, match, key); })
          : bind(guard, instance, match, key)
      }
    });
    return flatten(reverse ? guards.reverse() : guards)
  }

  function extractGuard (
    def,
    key
  ) {
    if (typeof def !== 'function') {
      // extend now so that global mixins are applied.
      def = _Vue.extend(def);
    }
    return def.options[key]
  }

  function extractLeaveGuards (deactivated) {
    return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)
  }

  function extractUpdateHooks (updated) {
    return extractGuards(updated, 'beforeRouteUpdate', bindGuard)
  }

  function bindGuard (guard, instance) {
    if (instance) {
      return function boundRouteGuard () {
        return guard.apply(instance, arguments)
      }
    }
  }

  function extractEnterGuards (
    activated
  ) {
    return extractGuards(
      activated,
      'beforeRouteEnter',
      function (guard, _, match, key) {
        return bindEnterGuard(guard, match, key)
      }
    )
  }

  function bindEnterGuard (
    guard,
    match,
    key
  ) {
    return function routeEnterGuard (to, from, next) {
      return guard(to, from, function (cb) {
        if (typeof cb === 'function') {
          if (!match.enteredCbs[key]) {
            match.enteredCbs[key] = [];
          }
          match.enteredCbs[key].push(cb);
        }
        next(cb);
      })
    }
  }

  /*  */

  var HTML5History = /*@__PURE__*/(function (History) {
    function HTML5History (router, base) {
      History.call(this, router, base);

      this._startLocation = getLocation(this.base);
    }

    if ( History ) HTML5History.__proto__ = History;
    HTML5History.prototype = Object.create( History && History.prototype );
    HTML5History.prototype.constructor = HTML5History;

    HTML5History.prototype.setupListeners = function setupListeners () {
      var this$1 = this;

      if (this.listeners.length > 0) {
        return
      }

      var router = this.router;
      var expectScroll = router.options.scrollBehavior;
      var supportsScroll = supportsPushState && expectScroll;

      if (supportsScroll) {
        this.listeners.push(setupScroll());
      }

      var handleRoutingEvent = function () {
        var current = this$1.current;

        // Avoiding first `popstate` event dispatched in some browsers but first
        // history route not updated since async guard at the same time.
        var location = getLocation(this$1.base);
        if (this$1.current === START && location === this$1._startLocation) {
          return
        }

        this$1.transitionTo(location, function (route) {
          if (supportsScroll) {
            handleScroll(router, route, current, true);
          }
        });
      };
      window.addEventListener('popstate', handleRoutingEvent);
      this.listeners.push(function () {
        window.removeEventListener('popstate', handleRoutingEvent);
      });
    };

    HTML5History.prototype.go = function go (n) {
      window.history.go(n);
    };

    HTML5History.prototype.push = function push (location, onComplete, onAbort) {
      var this$1 = this;

      var ref = this;
      var fromRoute = ref.current;
      this.transitionTo(location, function (route) {
        pushState(cleanPath(this$1.base + route.fullPath));
        handleScroll(this$1.router, route, fromRoute, false);
        onComplete && onComplete(route);
      }, onAbort);
    };

    HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {
      var this$1 = this;

      var ref = this;
      var fromRoute = ref.current;
      this.transitionTo(location, function (route) {
        replaceState(cleanPath(this$1.base + route.fullPath));
        handleScroll(this$1.router, route, fromRoute, false);
        onComplete && onComplete(route);
      }, onAbort);
    };

    HTML5History.prototype.ensureURL = function ensureURL (push) {
      if (getLocation(this.base) !== this.current.fullPath) {
        var current = cleanPath(this.base + this.current.fullPath);
        push ? pushState(current) : replaceState(current);
      }
    };

    HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {
      return getLocation(this.base)
    };

    return HTML5History;
  }(History));

  function getLocation (base) {
    var path = window.location.pathname;
    if (base && path.toLowerCase().indexOf(base.toLowerCase()) === 0) {
      path = path.slice(base.length);
    }
    return (path || '/') + window.location.search + window.location.hash
  }

  /*  */

  var HashHistory = /*@__PURE__*/(function (History) {
    function HashHistory (router, base, fallback) {
      History.call(this, router, base);
      // check history fallback deeplinking
      if (fallback && checkFallback(this.base)) {
        return
      }
      ensureSlash();
    }

    if ( History ) HashHistory.__proto__ = History;
    HashHistory.prototype = Object.create( History && History.prototype );
    HashHistory.prototype.constructor = HashHistory;

    // this is delayed until the app mounts
    // to avoid the hashchange listener being fired too early
    HashHistory.prototype.setupListeners = function setupListeners () {
      var this$1 = this;

      if (this.listeners.length > 0) {
        return
      }

      var router = this.router;
      var expectScroll = router.options.scrollBehavior;
      var supportsScroll = supportsPushState && expectScroll;

      if (supportsScroll) {
        this.listeners.push(setupScroll());
      }

      var handleRoutingEvent = function () {
        var current = this$1.current;
        if (!ensureSlash()) {
          return
        }
        this$1.transitionTo(getHash(), function (route) {
          if (supportsScroll) {
            handleScroll(this$1.router, route, current, true);
          }
          if (!supportsPushState) {
            replaceHash(route.fullPath);
          }
        });
      };
      var eventType = supportsPushState ? 'popstate' : 'hashchange';
      window.addEventListener(
        eventType,
        handleRoutingEvent
      );
      this.listeners.push(function () {
        window.removeEventListener(eventType, handleRoutingEvent);
      });
    };

    HashHistory.prototype.push = function push (location, onComplete, onAbort) {
      var this$1 = this;

      var ref = this;
      var fromRoute = ref.current;
      this.transitionTo(
        location,
        function (route) {
          pushHash(route.fullPath);
          handleScroll(this$1.router, route, fromRoute, false);
          onComplete && onComplete(route);
        },
        onAbort
      );
    };

    HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {
      var this$1 = this;

      var ref = this;
      var fromRoute = ref.current;
      this.transitionTo(
        location,
        function (route) {
          replaceHash(route.fullPath);
          handleScroll(this$1.router, route, fromRoute, false);
          onComplete && onComplete(route);
        },
        onAbort
      );
    };

    HashHistory.prototype.go = function go (n) {
      window.history.go(n);
    };

    HashHistory.prototype.ensureURL = function ensureURL (push) {
      var current = this.current.fullPath;
      if (getHash() !== current) {
        push ? pushHash(current) : replaceHash(current);
      }
    };

    HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {
      return getHash()
    };

    return HashHistory;
  }(History));

  function checkFallback (base) {
    var location = getLocation(base);
    if (!/^\/#/.test(location)) {
      window.location.replace(cleanPath(base + '/#' + location));
      return true
    }
  }

  function ensureSlash () {
    var path = getHash();
    if (path.charAt(0) === '/') {
      return true
    }
    replaceHash('/' + path);
    return false
  }

  function getHash () {
    // We can't use window.location.hash here because it's not
    // consistent across browsers - Firefox will pre-decode it!
    var href = window.location.href;
    var index = href.indexOf('#');
    // empty path
    if (index < 0) { return '' }

    href = href.slice(index + 1);

    return href
  }

  function getUrl (path) {
    var href = window.location.href;
    var i = href.indexOf('#');
    var base = i >= 0 ? href.slice(0, i) : href;
    return (base + "#" + path)
  }

  function pushHash (path) {
    if (supportsPushState) {
      pushState(getUrl(path));
    } else {
      window.location.hash = path;
    }
  }

  function replaceHash (path) {
    if (supportsPushState) {
      replaceState(getUrl(path));
    } else {
      window.location.replace(getUrl(path));
    }
  }

  /*  */

  var AbstractHistory = /*@__PURE__*/(function (History) {
    function AbstractHistory (router, base) {
      History.call(this, router, base);
      this.stack = [];
      this.index = -1;
    }

    if ( History ) AbstractHistory.__proto__ = History;
    AbstractHistory.prototype = Object.create( History && History.prototype );
    AbstractHistory.prototype.constructor = AbstractHistory;

    AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {
      var this$1 = this;

      this.transitionTo(
        location,
        function (route) {
          this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);
          this$1.index++;
          onComplete && onComplete(route);
        },
        onAbort
      );
    };

    AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {
      var this$1 = this;

      this.transitionTo(
        location,
        function (route) {
          this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);
          onComplete && onComplete(route);
        },
        onAbort
      );
    };

    AbstractHistory.prototype.go = function go (n) {
      var this$1 = this;

      var targetIndex = this.index + n;
      if (targetIndex < 0 || targetIndex >= this.stack.length) {
        return
      }
      var route = this.stack[targetIndex];
      this.confirmTransition(
        route,
        function () {
          var prev = this$1.current;
          this$1.index = targetIndex;
          this$1.updateRoute(route);
          this$1.router.afterHooks.forEach(function (hook) {
            hook && hook(route, prev);
          });
        },
        function (err) {
          if (isNavigationFailure(err, NavigationFailureType.duplicated)) {
            this$1.index = targetIndex;
          }
        }
      );
    };

    AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {
      var current = this.stack[this.stack.length - 1];
      return current ? current.fullPath : '/'
    };

    AbstractHistory.prototype.ensureURL = function ensureURL () {
      // noop
    };

    return AbstractHistory;
  }(History));

  /*  */

  var VueRouter = function VueRouter (options) {
    if ( options === void 0 ) options = {};

    this.app = null;
    this.apps = [];
    this.options = options;
    this.beforeHooks = [];
    this.resolveHooks = [];
    this.afterHooks = [];
    this.matcher = createMatcher(options.routes || [], this);

    var mode = options.mode || 'hash';
    this.fallback =
      mode === 'history' && !supportsPushState && options.fallback !== false;
    if (this.fallback) {
      mode = 'hash';
    }
    if (!inBrowser) {
      mode = 'abstract';
    }
    this.mode = mode;

    switch (mode) {
      case 'history':
        this.history = new HTML5History(this, options.base);
        break
      case 'hash':
        this.history = new HashHistory(this, options.base, this.fallback);
        break
      case 'abstract':
        this.history = new AbstractHistory(this, options.base);
        break
      default:
        {
          assert(false, ("invalid mode: " + mode));
        }
    }
  };

  var prototypeAccessors = { currentRoute: { configurable: true } };

  VueRouter.prototype.match = function match (raw, current, redirectedFrom) {
    return this.matcher.match(raw, current, redirectedFrom)
  };

  prototypeAccessors.currentRoute.get = function () {
    return this.history && this.history.current
  };

  VueRouter.prototype.init = function init (app /* Vue component instance */) {
      var this$1 = this;

    
      assert(
        install.installed,
        "not installed. Make sure to call `Vue.use(VueRouter)` " +
          "before creating root instance."
      );

    this.apps.push(app);

    // set up app destroyed handler
    // https://github.com/vuejs/vue-router/issues/2639
    app.$once('hook:destroyed', function () {
      // clean out app from this.apps array once destroyed
      var index = this$1.apps.indexOf(app);
      if (index > -1) { this$1.apps.splice(index, 1); }
      // ensure we still have a main app or null if no apps
      // we do not release the router so it can be reused
      if (this$1.app === app) { this$1.app = this$1.apps[0] || null; }

      if (!this$1.app) { this$1.history.teardown(); }
    });

    // main app previously initialized
    // return as we don't need to set up new history listener
    if (this.app) {
      return
    }

    this.app = app;

    var history = this.history;

    if (history instanceof HTML5History || history instanceof HashHistory) {
      var handleInitialScroll = function (routeOrError) {
        var from = history.current;
        var expectScroll = this$1.options.scrollBehavior;
        var supportsScroll = supportsPushState && expectScroll;

        if (supportsScroll && 'fullPath' in routeOrError) {
          handleScroll(this$1, routeOrError, from, false);
        }
      };
      var setupListeners = function (routeOrError) {
        history.setupListeners();
        handleInitialScroll(routeOrError);
      };
      history.transitionTo(
        history.getCurrentLocation(),
        setupListeners,
        setupListeners
      );
    }

    history.listen(function (route) {
      this$1.apps.forEach(function (app) {
        app._route = route;
      });
    });
  };

  VueRouter.prototype.beforeEach = function beforeEach (fn) {
    return registerHook(this.beforeHooks, fn)
  };

  VueRouter.prototype.beforeResolve = function beforeResolve (fn) {
    return registerHook(this.resolveHooks, fn)
  };

  VueRouter.prototype.afterEach = function afterEach (fn) {
    return registerHook(this.afterHooks, fn)
  };

  VueRouter.prototype.onReady = function onReady (cb, errorCb) {
    this.history.onReady(cb, errorCb);
  };

  VueRouter.prototype.onError = function onError (errorCb) {
    this.history.onError(errorCb);
  };

  VueRouter.prototype.push = function push (location, onComplete, onAbort) {
      var this$1 = this;

    // $flow-disable-line
    if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
      return new Promise(function (resolve, reject) {
        this$1.history.push(location, resolve, reject);
      })
    } else {
      this.history.push(location, onComplete, onAbort);
    }
  };

  VueRouter.prototype.replace = function replace (location, onComplete, onAbort) {
      var this$1 = this;

    // $flow-disable-line
    if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
      return new Promise(function (resolve, reject) {
        this$1.history.replace(location, resolve, reject);
      })
    } else {
      this.history.replace(location, onComplete, onAbort);
    }
  };

  VueRouter.prototype.go = function go (n) {
    this.history.go(n);
  };

  VueRouter.prototype.back = function back () {
    this.go(-1);
  };

  VueRouter.prototype.forward = function forward () {
    this.go(1);
  };

  VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {
    var route = to
      ? to.matched
        ? to
        : this.resolve(to).route
      : this.currentRoute;
    if (!route) {
      return []
    }
    return [].concat.apply(
      [],
      route.matched.map(function (m) {
        return Object.keys(m.components).map(function (key) {
          return m.components[key]
        })
      })
    )
  };

  VueRouter.prototype.resolve = function resolve (
    to,
    current,
    append
  ) {
    current = current || this.history.current;
    var location = normalizeLocation(to, current, append, this);
    var route = this.match(location, current);
    var fullPath = route.redirectedFrom || route.fullPath;
    var base = this.history.base;
    var href = createHref(base, fullPath, this.mode);
    return {
      location: location,
      route: route,
      href: href,
      // for backwards compat
      normalizedTo: location,
      resolved: route
    }
  };

  VueRouter.prototype.getRoutes = function getRoutes () {
    return this.matcher.getRoutes()
  };

  VueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {
    this.matcher.addRoute(parentOrRoute, route);
    if (this.history.current !== START) {
      this.history.transitionTo(this.history.getCurrentLocation());
    }
  };

  VueRouter.prototype.addRoutes = function addRoutes (routes) {
    {
      warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');
    }
    this.matcher.addRoutes(routes);
    if (this.history.current !== START) {
      this.history.transitionTo(this.history.getCurrentLocation());
    }
  };

  Object.defineProperties( VueRouter.prototype, prototypeAccessors );

  function registerHook (list, fn) {
    list.push(fn);
    return function () {
      var i = list.indexOf(fn);
      if (i > -1) { list.splice(i, 1); }
    }
  }

  function createHref (base, fullPath, mode) {
    var path = mode === 'hash' ? '#' + fullPath : fullPath;
    return base ? cleanPath(base + '/' + path) : path
  }

  VueRouter.install = install;
  VueRouter.version = '3.5.1';
  VueRouter.isNavigationFailure = isNavigationFailure;
  VueRouter.NavigationFailureType = NavigationFailureType;
  VueRouter.START_LOCATION = START;

  if (inBrowser && window.Vue) {
    window.Vue.use(VueRouter);
  }

  return VueRouter;

})));
/*!
  * vue-router v3.5.1
  * (c) 2021 Evan You
  * @license MIT
  */
var t,e;t=this,e=function(){"use strict";function t(t,e){for(var r in e)t[r]=e[r];return t}var e=/[!'()*]/g,r=function(t){return"%"+t.charCodeAt(0).toString(16)},n=/%2C/g,o=function(t){return encodeURIComponent(t).replace(e,r).replace(n,",")};function i(t){try{return decodeURIComponent(t)}catch(t){}return t}var a=function(t){return null==t||"object"==typeof t?t:String(t)};function s(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(function(t){var r=t.replace(/\+/g," ").split("="),n=i(r.shift()),o=r.length>0?i(r.join("=")):null;void 0===e[n]?e[n]=o:Array.isArray(e[n])?e[n].push(o):e[n]=[e[n],o]}),e):e}function u(t){var e=t?Object.keys(t).map(function(e){var r=t[e];if(void 0===r)return"";if(null===r)return o(e);if(Array.isArray(r)){var n=[];return r.forEach(function(t){void 0!==t&&(null===t?n.push(o(e)):n.push(o(e)+"="+o(t)))}),n.join("&")}return o(e)+"="+o(r)}).filter(function(t){return t.length>0}).join("&"):null;return e?"?"+e:""}var c=/\/?$/;function p(t,e,r,n){var o=n&&n.options.stringifyQuery,i=e.query||{};try{i=f(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:d(e,o),matched:t?l(t):[]};return r&&(a.redirectedFrom=d(r,o)),Object.freeze(a)}function f(t){if(Array.isArray(t))return t.map(f);if(t&&"object"==typeof t){var e={};for(var r in t)e[r]=f(t[r]);return e}return t}var h=p(null,{path:"/"});function l(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function d(t,e){var r=t.path,n=t.query;void 0===n&&(n={});var o=t.hash;return void 0===o&&(o=""),(r||"/")+(e||u)(n)+o}function v(t,e,r){return e===h?t===e:!!e&&(t.path&&e.path?t.path.replace(c,"")===e.path.replace(c,"")&&(r||t.hash===e.hash&&y(t.query,e.query)):!(!t.name||!e.name)&&t.name===e.name&&(r||t.hash===e.hash&&y(t.query,e.query)&&y(t.params,e.params)))}function y(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var r=Object.keys(t).sort(),n=Object.keys(e).sort();return r.length===n.length&&r.every(function(r,o){var i=t[r];if(n[o]!==r)return!1;var a=e[r];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?y(i,a):String(i)===String(a)})}function m(t){for(var e=0;e<t.matched.length;e++){var r=t.matched[e];for(var n in r.instances){var o=r.instances[n],i=r.enteredCbs[n];if(o&&i){delete r.enteredCbs[n];for(var a=0;a<i.length;a++)o._isBeingDestroyed||i[a](o)}}}}var g={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(e,r){var n=r.props,o=r.children,i=r.parent,a=r.data;a.routerView=!0;for(var s=i.$createElement,u=n.name,c=i.$route,p=i._routerViewCache||(i._routerViewCache={}),f=0,h=!1;i&&i._routerRoot!==i;){var l=i.$vnode?i.$vnode.data:{};l.routerView&&f++,l.keepAlive&&i._directInactive&&i._inactive&&(h=!0),i=i.$parent}if(a.routerViewDepth=f,h){var d=p[u],v=d&&d.component;return v?(d.configProps&&w(v,a,d.route,d.configProps),s(v,a,o)):s()}var y=c.matched[f],g=y&&y.components[u];if(!y||!g)return p[u]=null,s();p[u]={component:g},a.registerRouteInstance=function(t,e){var r=y.instances[u];(e&&r!==t||!e&&r===t)&&(y.instances[u]=e)},(a.hook||(a.hook={})).prepatch=function(t,e){y.instances[u]=e.componentInstance},a.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==y.instances[u]&&(y.instances[u]=t.componentInstance),m(c)};var b=y.props&&y.props[u];return b&&(t(p[u],{route:c,configProps:b}),w(g,a,c,b)),s(g,a,o)}};function w(e,r,n,o){var i=r.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}(n,o);if(i){i=r.props=t({},i);var a=r.attrs=r.attrs||{};for(var s in i)e.props&&s in e.props||(a[s]=i[s],delete i[s])}}function b(t,e,r){var n=t.charAt(0);if("/"===n)return t;if("?"===n||"#"===n)return e+t;var o=e.split("/");r&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),a=0;a<i.length;a++){var s=i[a];".."===s?o.pop():"."!==s&&o.push(s)}return""!==o[0]&&o.unshift(""),o.join("/")}function x(t){return t.replace(/\/\//g,"/")}var R=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},k=B,E=j,C=function(t,e){return S(j(t,e),e)},A=S,O=U,_=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function j(t,e){for(var r,n=[],o=0,i=0,a="",s=e&&e.delimiter||"/";null!=(r=_.exec(t));){var u=r[0],c=r[1],p=r.index;if(a+=t.slice(i,p),i=p+u.length,c)a+=c[1];else{var f=t[i],h=r[2],l=r[3],d=r[4],v=r[5],y=r[6],m=r[7];a&&(n.push(a),a="");var g=null!=h&&null!=f&&f!==h,w="+"===y||"*"===y,b="?"===y||"*"===y,x=r[2]||s,R=d||v;n.push({name:l||o++,prefix:h||"",delimiter:x,optional:b,repeat:w,partial:g,asterisk:!!m,pattern:R?L(R):m?".*":"[^"+P(x)+"]+?"})}}return i<t.length&&(a+=t.substr(i)),a&&n.push(a),n}function T(t){return encodeURI(t).replace(/[\/?#]/g,function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})}function S(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)"object"==typeof t[n]&&(r[n]=new RegExp("^(?:"+t[n].pattern+")$",q(e)));return function(e,n){for(var o="",i=e||{},a=(n||{}).pretty?T:encodeURIComponent,s=0;s<t.length;s++){var u=t[s];if("string"!=typeof u){var c,p=i[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(R(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(c=a(p[f]),!r[s].test(c))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(c)+"`");o+=(0===f?u.prefix:u.delimiter)+c}}else{if(c=u.asterisk?encodeURI(p).replace(/[?#]/g,function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}):a(p),!r[s].test(c))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+c+'"');o+=u.prefix+c}}else o+=u}return o}}function P(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function L(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function $(t,e){return t.keys=e,t}function q(t){return t&&t.sensitive?"":"i"}function U(t,e,r){R(e)||(r=e||r,e=[]);for(var n=(r=r||{}).strict,o=!1!==r.end,i="",a=0;a<t.length;a++){var s=t[a];if("string"==typeof s)i+=P(s);else{var u=P(s.prefix),c="(?:"+s.pattern+")";e.push(s),s.repeat&&(c+="(?:"+u+c+")*"),i+=c=s.optional?s.partial?u+"("+c+")?":"(?:"+u+"("+c+"))?":u+"("+c+")"}}var p=P(r.delimiter||"/"),f=i.slice(-p.length)===p;return n||(i=(f?i.slice(0,-p.length):i)+"(?:"+p+"(?=$))?"),i+=o?"$":n&&f?"":"(?="+p+"|$)",$(new RegExp("^"+i,q(r)),e)}function B(t,e,r){return R(e)||(r=e||r,e=[]),r=r||{},t instanceof RegExp?function(t,e){var r=t.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)e.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return $(t,e)}(t,e):R(t)?function(t,e,r){for(var n=[],o=0;o<t.length;o++)n.push(B(t[o],e,r).source);return $(new RegExp("(?:"+n.join("|")+")",q(r)),e)}(t,e,r):function(t,e,r){return U(j(t,r),e,r)}(t,e,r)}k.parse=E,k.compile=C,k.tokensToFunction=A,k.tokensToRegExp=O;var I=Object.create(null);function M(t,e,r){e=e||{};try{var n=I[t]||(I[t]=k.compile(t));return"string"==typeof e.pathMatch&&(e[0]=e.pathMatch),n(e,{pretty:!0})}catch(t){return""}finally{delete e[0]}}function V(e,r,n,o){var i="string"==typeof e?{path:e}:e;if(i._normalized)return i;if(i.name){var u=(i=t({},e)).params;return u&&"object"==typeof u&&(i.params=t({},u)),i}if(!i.path&&i.params&&r){(i=t({},i))._normalized=!0;var c=t(t({},r.params),i.params);if(r.name)i.name=r.name,i.params=c;else if(r.matched.length){var p=r.matched[r.matched.length-1].path;i.path=M(p,c,r.path)}return i}var f=function(t){var e="",r="",n=t.indexOf("#");n>=0&&(e=t.slice(n),t=t.slice(0,n));var o=t.indexOf("?");return o>=0&&(r=t.slice(o+1),t=t.slice(0,o)),{path:t,query:r,hash:e}}(i.path||""),h=r&&r.path||"/",l=f.path?b(f.path,h,n||i.append):h,d=function(t,e,r){void 0===e&&(e={});var n,o=r||s;try{n=o(t||"")}catch(t){n={}}for(var i in e){var u=e[i];n[i]=Array.isArray(u)?u.map(a):a(u)}return n}(f.query,i.query,o&&o.options.parseQuery),v=i.hash||f.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:l,query:d,hash:v}}var H,N=[String,Object],F=[String,Array],z=function(){},D={name:"RouterLink",props:{to:{type:N,required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:F,default:"click"}},render:function(e){var r=this,n=this.$router,o=this.$route,i=n.resolve(this.to,o,this.append),a=i.location,s=i.route,u=i.href,f={},h=n.options.linkActiveClass,l=n.options.linkExactActiveClass,d=null==h?"router-link-active":h,y=null==l?"router-link-exact-active":l,m=null==this.activeClass?d:this.activeClass,g=null==this.exactActiveClass?y:this.exactActiveClass,w=s.redirectedFrom?p(null,V(s.redirectedFrom),null,n):s;f[g]=v(o,w,this.exactPath),f[m]=this.exact||this.exactPath?f[g]:function(t,e){return 0===t.path.replace(c,"/").indexOf(e.path.replace(c,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var r in e)if(!(r in t))return!1;return!0}(t.query,e.query)}(o,w);var b=f[g]?this.ariaCurrentValue:null,x=function(t){K(t)&&(r.replace?n.replace(a,z):n.push(a,z))},R={click:K};Array.isArray(this.event)?this.event.forEach(function(t){R[t]=x}):R[this.event]=x;var k={class:f},E=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:u,route:s,navigate:x,isActive:f[m],isExactActive:f[g]});if(E){if(1===E.length)return E[0];if(E.length>1||!E.length)return 0===E.length?e():e("span",{},E)}if("a"===this.tag)k.on=R,k.attrs={href:u,"aria-current":b};else{var C=function t(e){if(e)for(var r,n=0;n<e.length;n++){if("a"===(r=e[n]).tag)return r;if(r.children&&(r=t(r.children)))return r}}(this.$slots.default);if(C){C.isStatic=!1;var A=C.data=t({},C.data);for(var O in A.on=A.on||{},A.on){var _=A.on[O];O in R&&(A.on[O]=Array.isArray(_)?_:[_])}for(var j in R)j in A.on?A.on[j].push(R[j]):A.on[j]=x;var T=C.data.attrs=t({},C.data.attrs);T.href=u,T["aria-current"]=b}else k.on=R}return e(this.tag,k,this.$slots.default)}};function K(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}var J="undefined"!=typeof window;function Q(t,e,r,n,o){var i=e||[],a=r||Object.create(null),s=n||Object.create(null);t.forEach(function(t){!function t(e,r,n,o,i,a){var s=o.path,u=o.name,c=o.pathToRegexpOptions||{},p=function(t,e,r){return r||(t=t.replace(/\/$/,"")),"/"===t[0]?t:null==e?t:x(e.path+"/"+t)}(s,i,c.strict);"boolean"==typeof o.caseSensitive&&(c.sensitive=o.caseSensitive);var f={path:p,regex:X(p,c),components:o.components||{default:o.component},alias:o.alias?"string"==typeof o.alias?[o.alias]:o.alias:[],instances:{},enteredCbs:{},name:u,parent:i,matchAs:a,redirect:o.redirect,beforeEnter:o.beforeEnter,meta:o.meta||{},props:null==o.props?{}:o.components?o.props:{default:o.props}};if(o.children&&o.children.forEach(function(o){var i=a?x(a+"/"+o.path):void 0;t(e,r,n,o,f,i)}),r[f.path]||(e.push(f.path),r[f.path]=f),void 0!==o.alias)for(var h=Array.isArray(o.alias)?o.alias:[o.alias],l=0;l<h.length;++l){var d=h[l],v={path:d,children:o.children};t(e,r,n,v,i,f.path||"/")}u&&(n[u]||(n[u]=f))}(i,a,s,t,o)});for(var u=0,c=i.length;u<c;u++)"*"===i[u]&&(i.push(i.splice(u,1)[0]),c--,u--);return{pathList:i,pathMap:a,nameMap:s}}function X(t,e){return k(t,[],e)}function Y(t,e){var r=Q(t),n=r.pathList,o=r.pathMap,i=r.nameMap;function a(t,r,a){var s=V(t,r,!1,e),c=s.name;if(c){var p=i[c];if(!p)return u(null,s);var f=p.regex.keys.filter(function(t){return!t.optional}).map(function(t){return t.name});if("object"!=typeof s.params&&(s.params={}),r&&"object"==typeof r.params)for(var h in r.params)!(h in s.params)&&f.indexOf(h)>-1&&(s.params[h]=r.params[h]);return s.path=M(p.path,s.params),u(p,s,a)}if(s.path){s.params={};for(var l=0;l<n.length;l++){var d=n[l],v=o[d];if(W(v.regex,s.path,s.params))return u(v,s,a)}}return u(null,s)}function s(t,r){var n=t.redirect,o="function"==typeof n?n(p(t,r,null,e)):n;if("string"==typeof o&&(o={path:o}),!o||"object"!=typeof o)return u(null,r);var s=o,c=s.name,f=s.path,h=r.query,l=r.hash,d=r.params;return h=s.hasOwnProperty("query")?s.query:h,l=s.hasOwnProperty("hash")?s.hash:l,d=s.hasOwnProperty("params")?s.params:d,c?(i[c],a({_normalized:!0,name:c,query:h,hash:l,params:d},void 0,r)):f?a({_normalized:!0,path:M(function(t,e){return b(t,e.parent?e.parent.path:"/",!0)}(f,t),d),query:h,hash:l},void 0,r):u(null,r)}function u(t,r,n){return t&&t.redirect?s(t,n||r):t&&t.matchAs?function(t,e,r){var n=a({_normalized:!0,path:M(r,e.params)});if(n){var o=n.matched,i=o[o.length-1];return e.params=n.params,u(i,e)}return u(null,e)}(0,r,t.matchAs):p(t,r,n,e)}return{match:a,addRoute:function(t,e){var r="object"!=typeof t?i[t]:void 0;Q([e||t],n,o,i,r),r&&Q(r.alias.map(function(t){return{path:t,children:[e]}}),n,o,i,r)},getRoutes:function(){return n.map(function(t){return o[t]})},addRoutes:function(t){Q(t,n,o,i)}}}function W(t,e,r){var n=e.match(t);if(!n)return!1;if(!r)return!0;for(var o=1,a=n.length;o<a;++o){var s=t.keys[o-1];s&&(r[s.name||"pathMatch"]="string"==typeof n[o]?i(n[o]):n[o])}return!0}var G=J&&window.performance&&window.performance.now?window.performance:Date;function Z(){return G.now().toFixed(3)}var tt=Z();function et(){return tt}function rt(t){return tt=t}var nt=Object.create(null);function ot(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var e=window.location.protocol+"//"+window.location.host,r=window.location.href.replace(e,""),n=t({},window.history.state);return n.key=et(),window.history.replaceState(n,"",r),window.addEventListener("popstate",st),function(){window.removeEventListener("popstate",st)}}function it(t,e,r,n){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$nextTick(function(){var i=function(){var t=et();if(t)return nt[t]}(),a=o.call(t,e,r,n?i:null);a&&("function"==typeof a.then?a.then(function(t){ht(t,i)}).catch(function(t){}):ht(a,i))})}}function at(){var t=et();t&&(nt[t]={x:window.pageXOffset,y:window.pageYOffset})}function st(t){at(),t.state&&t.state.key&&rt(t.state.key)}function ut(t){return pt(t.x)||pt(t.y)}function ct(t){return{x:pt(t.x)?t.x:window.pageXOffset,y:pt(t.y)?t.y:window.pageYOffset}}function pt(t){return"number"==typeof t}var ft=/^#\d/;function ht(t,e){var r,n="object"==typeof t;if(n&&"string"==typeof t.selector){var o=ft.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(o){var i=t.offset&&"object"==typeof t.offset?t.offset:{};e=function(t,e){var r=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-r.left-e.x,y:n.top-r.top-e.y}}(o,i={x:pt((r=i).x)?r.x:0,y:pt(r.y)?r.y:0})}else ut(t)&&(e=ct(t))}else n&&ut(t)&&(e=ct(t));e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}var lt,dt=J&&(-1===(lt=window.navigator.userAgent).indexOf("Android 2.")&&-1===lt.indexOf("Android 4.0")||-1===lt.indexOf("Mobile Safari")||-1!==lt.indexOf("Chrome")||-1!==lt.indexOf("Windows Phone"))&&window.history&&"function"==typeof window.history.pushState;function vt(e,r){at();var n=window.history;try{if(r){var o=t({},n.state);o.key=et(),n.replaceState(o,"",e)}else n.pushState({key:rt(Z())},"",e)}catch(t){window.location[r?"replace":"assign"](e)}}function yt(t){vt(t,!0)}function mt(t,e,r){var n=function(o){o>=t.length?r():t[o]?e(t[o],function(){n(o+1)}):n(o+1)};n(0)}var gt={redirected:2,aborted:4,cancelled:8,duplicated:16};function wt(t,e){return xt(t,e,gt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return Rt.forEach(function(r){r in t&&(e[r]=t[r])}),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function bt(t,e){return xt(t,e,gt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function xt(t,e,r,n){var o=new Error(n);return o._isRouter=!0,o.from=t,o.to=e,o.type=r,o}var Rt=["params","query","hash"];function kt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Et(t,e){return kt(t)&&t._isRouter&&(null==e||t.type===e)}function Ct(t){return function(e,r,n){var o=!1,i=0,a=null;At(t,function(t,e,r,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=jt(function(e){var o;((o=e).__esModule||_t&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:H.extend(e),r.components[s]=e,--i<=0&&n()}),p=jt(function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=kt(t)?t:new Error(e),n(a))});try{u=t(c,p)}catch(t){p(t)}if(u)if("function"==typeof u.then)u.then(c,p);else{var f=u.component;f&&"function"==typeof f.then&&f.then(c,p)}}}),o||n()}}function At(t,e){return Ot(t.map(function(t){return Object.keys(t.components).map(function(r){return e(t.components[r],t.instances[r],t,r)})}))}function Ot(t){return Array.prototype.concat.apply([],t)}var _t="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function jt(t){var e=!1;return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];if(!e)return e=!0,t.apply(this,r)}}var Tt=function(t,e){this.router=t,this.base=function(t){if(!t)if(J){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}(e),this.current=h,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function St(t,e,r,n){var o=At(t,function(t,n,o,i){var a=function(t,e){return"function"!=typeof t&&(t=H.extend(t)),t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map(function(t){return r(t,n,o,i)}):r(a,n,o,i)});return Ot(n?o.reverse():o)}function Pt(t,e){if(e)return function(){return t.apply(e,arguments)}}Tt.prototype.listen=function(t){this.cb=t},Tt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Tt.prototype.onError=function(t){this.errorCbs.push(t)},Tt.prototype.transitionTo=function(t,e,r){var n,o=this;try{n=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach(function(e){e(t)}),t}var i=this.current;this.confirmTransition(n,function(){o.updateRoute(n),e&&e(n),o.ensureURL(),o.router.afterHooks.forEach(function(t){t&&t(n,i)}),o.ready||(o.ready=!0,o.readyCbs.forEach(function(t){t(n)}))},function(t){r&&r(t),t&&!o.ready&&(Et(t,gt.redirected)&&i===h||(o.ready=!0,o.readyErrorCbs.forEach(function(e){e(t)})))})},Tt.prototype.confirmTransition=function(t,e,r){var n=this,o=this.current;this.pending=t;var i,a,s=function(t){!Et(t)&&kt(t)&&(n.errorCbs.length?n.errorCbs.forEach(function(e){e(t)}):console.error(t)),r&&r(t)},u=t.matched.length-1,c=o.matched.length-1;if(v(t,o)&&u===c&&t.matched[u]===o.matched[c])return this.ensureURL(),s(((a=xt(i=o,t,gt.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var p=function(t,e){var r,n=Math.max(t.length,e.length);for(r=0;r<n&&t[r]===e[r];r++);return{updated:e.slice(0,r),activated:e.slice(r),deactivated:t.slice(r)}}(this.current.matched,t.matched),f=p.updated,h=p.deactivated,l=p.activated,d=[].concat(function(t){return St(t,"beforeRouteLeave",Pt,!0)}(h),this.router.beforeHooks,function(t){return St(t,"beforeRouteUpdate",Pt)}(f),l.map(function(t){return t.beforeEnter}),Ct(l)),y=function(e,r){if(n.pending!==t)return s(bt(o,t));try{e(t,o,function(e){!1===e?(n.ensureURL(!0),s(function(t,e){return xt(t,e,gt.aborted,'Navigation aborted from "'+t.fullPath+'" to "'+e.fullPath+'" via a navigation guard.')}(o,t))):kt(e)?(n.ensureURL(!0),s(e)):"string"==typeof e||"object"==typeof e&&("string"==typeof e.path||"string"==typeof e.name)?(s(wt(o,t)),"object"==typeof e&&e.replace?n.replace(e):n.push(e)):r(e)})}catch(t){s(t)}};mt(d,y,function(){mt(function(t){return St(t,"beforeRouteEnter",function(t,e,r,n){return function(t,e,r){return function(n,o,i){return t(n,o,function(t){"function"==typeof t&&(e.enteredCbs[r]||(e.enteredCbs[r]=[]),e.enteredCbs[r].push(t)),i(t)})}}(t,r,n)})}(l).concat(n.router.resolveHooks),y,function(){if(n.pending!==t)return s(bt(o,t));n.pending=null,e(t),n.router.app&&n.router.app.$nextTick(function(){m(t)})})})},Tt.prototype.updateRoute=function(t){this.current=t,this.cb&&this.cb(t)},Tt.prototype.setupListeners=function(){},Tt.prototype.teardown=function(){this.listeners.forEach(function(t){t()}),this.listeners=[],this.current=h,this.pending=null};var Lt=function(t){function e(e,r){t.call(this,e,r),this._startLocation=$t(this.base)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,r=e.options.scrollBehavior,n=dt&&r;n&&this.listeners.push(ot());var o=function(){var r=t.current,o=$t(t.base);t.current===h&&o===t._startLocation||t.transitionTo(o,function(t){n&&it(e,t,r,!0)})};window.addEventListener("popstate",o),this.listeners.push(function(){window.removeEventListener("popstate",o)})}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,function(t){vt(x(n.base+t.fullPath)),it(n.router,t,o,!1),e&&e(t)},r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,function(t){yt(x(n.base+t.fullPath)),it(n.router,t,o,!1),e&&e(t)},r)},e.prototype.ensureURL=function(t){if($t(this.base)!==this.current.fullPath){var e=x(this.base+this.current.fullPath);t?vt(e):yt(e)}},e.prototype.getCurrentLocation=function(){return $t(this.base)},e}(Tt);function $t(t){var e=window.location.pathname;return t&&0===e.toLowerCase().indexOf(t.toLowerCase())&&(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var qt=function(t){function e(e,r,n){t.call(this,e,r),n&&function(t){var e=$t(t);if(!/^\/#/.test(e))return window.location.replace(x(t+"/#"+e)),!0}(this.base)||Ut()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,r=dt&&e;r&&this.listeners.push(ot());var n=function(){var e=t.current;Ut()&&t.transitionTo(Bt(),function(n){r&&it(t.router,n,e,!0),dt||Vt(n.fullPath)})},o=dt?"popstate":"hashchange";window.addEventListener(o,n),this.listeners.push(function(){window.removeEventListener(o,n)})}},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,function(t){Mt(t.fullPath),it(n.router,t,o,!1),e&&e(t)},r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,function(t){Vt(t.fullPath),it(n.router,t,o,!1),e&&e(t)},r)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Bt()!==e&&(t?Mt(e):Vt(e))},e.prototype.getCurrentLocation=function(){return Bt()},e}(Tt);function Ut(){var t=Bt();return"/"===t.charAt(0)||(Vt("/"+t),!1)}function Bt(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function It(t){var e=window.location.href,r=e.indexOf("#");return(r>=0?e.slice(0,r):e)+"#"+t}function Mt(t){dt?vt(It(t)):window.location.hash=t}function Vt(t){dt?yt(It(t)):window.location.replace(It(t))}var Ht=function(t){function e(e,r){t.call(this,e,r),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,r){var n=this;this.transitionTo(t,function(t){n.stack=n.stack.slice(0,n.index+1).concat(t),n.index++,e&&e(t)},r)},e.prototype.replace=function(t,e,r){var n=this;this.transitionTo(t,function(t){n.stack=n.stack.slice(0,n.index).concat(t),e&&e(t)},r)},e.prototype.go=function(t){var e=this,r=this.index+t;if(!(r<0||r>=this.stack.length)){var n=this.stack[r];this.confirmTransition(n,function(){var t=e.current;e.index=r,e.updateRoute(n),e.router.afterHooks.forEach(function(e){e&&e(n,t)})},function(t){Et(t,gt.duplicated)&&(e.index=r)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Tt),Nt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Y(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!dt&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new Lt(this,t.base);break;case"hash":this.history=new qt(this,t.base,this.fallback);break;case"abstract":this.history=new Ht(this,t.base)}},Ft={currentRoute:{configurable:!0}};function zt(t,e){return t.push(e),function(){var r=t.indexOf(e);r>-1&&t.splice(r,1)}}return Nt.prototype.match=function(t,e,r){return this.matcher.match(t,e,r)},Ft.currentRoute.get=function(){return this.history&&this.history.current},Nt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",function(){var r=e.apps.indexOf(t);r>-1&&e.apps.splice(r,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()}),!this.app){this.app=t;var r=this.history;if(r instanceof Lt||r instanceof qt){var n=function(t){r.setupListeners(),function(t){var n=r.current,o=e.options.scrollBehavior;dt&&o&&"fullPath"in t&&it(e,t,n,!1)}(t)};r.transitionTo(r.getCurrentLocation(),n,n)}r.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},Nt.prototype.beforeEach=function(t){return zt(this.beforeHooks,t)},Nt.prototype.beforeResolve=function(t){return zt(this.resolveHooks,t)},Nt.prototype.afterEach=function(t){return zt(this.afterHooks,t)},Nt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Nt.prototype.onError=function(t){this.history.onError(t)},Nt.prototype.push=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise(function(e,r){n.history.push(t,e,r)});this.history.push(t,e,r)},Nt.prototype.replace=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise(function(e,r){n.history.replace(t,e,r)});this.history.replace(t,e,r)},Nt.prototype.go=function(t){this.history.go(t)},Nt.prototype.back=function(){this.go(-1)},Nt.prototype.forward=function(){this.go(1)},Nt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},Nt.prototype.resolve=function(t,e,r){var n=V(t,e=e||this.history.current,r,this),o=this.match(n,e),i=o.redirectedFrom||o.fullPath;return{location:n,route:o,href:function(t,e,r){var n="hash"===r?"#"+e:e;return t?x(t+"/"+n):n}(this.history.base,i,this.mode),normalizedTo:n,resolved:o}},Nt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Nt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==h&&this.history.transitionTo(this.history.getCurrentLocation())},Nt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==h&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Nt.prototype,Ft),Nt.install=function t(e){if(!t.installed||H!==e){t.installed=!0,H=e;var r=function(t){return void 0!==t},n=function(t,e){var n=t.$options._parentVnode;r(n)&&r(n=n.data)&&r(n=n.registerRouteInstance)&&n(t,e)};e.mixin({beforeCreate:function(){r(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,n(this,this)},destroyed:function(){n(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",g),e.component("RouterLink",D);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Nt.version="3.5.1",Nt.isNavigationFailure=Et,Nt.NavigationFailureType=gt,Nt.START_LOCATION=h,J&&window.Vue&&window.Vue.use(Nt),Nt},"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).VueRouter=e();MIT License

Copyright (c) 2013-present Evan You

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "vue-router",
  "version": "3.5.1",
  "description": "Official router for Vue.js 2",
  "author": "Evan You",
  "license": "MIT",
  "main": "dist/vue-router.common.js",
  "module": "dist/vue-router.esm.js",
  "unpkg": "dist/vue-router.js",
  "jsdelivr": "dist/vue-router.js",
  "sideEffects": false,
  "repository": {
    "type": "git",
    "url": "https://github.com/vuejs/vue-router.git"
  },
  "typings": "types/index.d.ts",
  "files": [
    "src",
    "dist/*.js",
    "types/*.d.ts",
    "vetur/tags.json",
    "vetur/attributes.json"
  ],
  "vetur": {
    "tags": "vetur/tags.json",
    "attributes": "vetur/attributes.json"
  },
  "gitHooks": {
    "pre-commit": "lint-staged",
    "commit-msg": "node scripts/verifyCommitMsg.js"
  },
  "lint-staged": {
    "*.{js,vue}": [
      "eslint --fix",
      "git add"
    ]
  },
  "devDependencies": {
    "@vuepress/plugin-pwa": "^1.5.3",
    "@vuepress/theme-vue": "^1.5.3",
    "axios": "^0.19.0",
    "babel-core": "^6.24.1",
    "babel-eslint": "^10.0.2",
    "babel-loader": "^7.1.3",
    "babel-plugin-syntax-dynamic-import": "^6.18.0",
    "babel-preset-env": "^1.6.1",
    "babel-preset-flow-vue": "^1.0.0",
    "browserstack-local": "^1.4.8",
    "buble": "^0.19.8",
    "chromedriver": "^86.0.0",
    "conventional-changelog-cli": "^2.0.11",
    "cross-spawn": "^7.0.3",
    "css-loader": "^2.1.1",
    "dotenv": "^8.2.0",
    "es6-promise": "^4.2.8",
    "eslint": "^4.19.1",
    "eslint-plugin-flowtype": "^2.46.1",
    "eslint-plugin-jasmine": "^2.10.1",
    "eslint-plugin-vue-libs": "^2.1.0",
    "express": "^4.17.1",
    "express-urlrewrite": "^1.2.0",
    "flow-bin": "^0.66.0",
    "geckodriver": "^1.20.0",
    "jasmine": "2.8.0",
    "lint-staged": "^8.2.0",
    "nightwatch": "^1.3.6",
    "nightwatch-helpers": "^1.0.0",
    "path-to-regexp": "^1.8.0",
    "rollup": "^2.34.1",
    "rollup-plugin-buble": "^0.19.8",
    "@rollup/plugin-commonjs": "^17.0.0",
    "rollup-plugin-flow-no-whitespace": "^1.0.0",
    "@rollup/plugin-node-resolve": "^11.0.0",
    "rollup-plugin-replace": "^2.0.0",
    "rollup-watch": "^4.0.0",
    "selenium-server": "^3.141.59",
    "terser": "^4.2.0",
    "typescript": "^3.5.2",
    "vue": "^2.6.12",
    "vue-loader": "^15.9.3",
    "vue-server-renderer": "^2.6.12",
    "vue-template-compiler": "^2.6.12",
    "vuepress": "^1.5.3",
    "vuepress-theme-vue": "^1.1.1",
    "webpack": "^4.35.2",
    "webpack-dev-middleware": "^3.7.0",
    "yorkie": "^2.0.0"
  },
  "homepage": "https://github.com/vuejs/vue-router#readme"
}/* @flow */

import { createRoute, isSameRoute, isIncludedRoute } from '../util/route'
import { extend } from '../util/misc'
import { normalizeLocation } from '../util/location'
import { warn } from '../util/warn'

// work around weird flow bug
const toTypes: Array<Function> = [String, Object]
const eventTypes: Array<Function> = [String, Array]

const noop = () => {}

let warnedCustomSlot
let warnedTagProp
let warnedEventProp

export default {
  name: 'RouterLink',
  props: {
    to: {
      type: toTypes,
      required: true
    },
    tag: {
      type: String,
      default: 'a'
    },
    custom: Boolean,
    exact: Boolean,
    exactPath: Boolean,
    append: Boolean,
    replace: Boolean,
    activeClass: String,
    exactActiveClass: String,
    ariaCurrentValue: {
      type: String,
      default: 'page'
    },
    event: {
      type: eventTypes,
      default: 'click'
    }
  },
  render (h: Function) {
    const router = this.$router
    const current = this.$route
    const { location, route, href } = router.resolve(
      this.to,
      current,
      this.append
    )

    const classes = {}
    const globalActiveClass = router.options.linkActiveClass
    const globalExactActiveClass = router.options.linkExactActiveClass
    // Support global empty active class
    const activeClassFallback =
      globalActiveClass == null ? 'router-link-active' : globalActiveClass
    const exactActiveClassFallback =
      globalExactActiveClass == null
        ? 'router-link-exact-active'
        : globalExactActiveClass
    const activeClass =
      this.activeClass == null ? activeClassFallback : this.activeClass
    const exactActiveClass =
      this.exactActiveClass == null
        ? exactActiveClassFallback
        : this.exactActiveClass

    const compareTarget = route.redirectedFrom
      ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)
      : route

    classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath)
    classes[activeClass] = this.exact || this.exactPath
      ? classes[exactActiveClass]
      : isIncludedRoute(current, compareTarget)

    const ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null

    const handler = e => {
      if (guardEvent(e)) {
        if (this.replace) {
          router.replace(location, noop)
        } else {
          router.push(location, noop)
        }
      }
    }

    const on = { click: guardEvent }
    if (Array.isArray(this.event)) {
      this.event.forEach(e => {
        on[e] = handler
      })
    } else {
      on[this.event] = handler
    }

    const data: any = { class: classes }

    const scopedSlot =
      !this.$scopedSlots.$hasNormal &&
      this.$scopedSlots.default &&
      this.$scopedSlots.default({
        href,
        route,
        navigate: handler,
        isActive: classes[activeClass],
        isExactActive: classes[exactActiveClass]
      })

    if (scopedSlot) {
      if (process.env.NODE_ENV !== 'production' && !this.custom) {
        !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n')
        warnedCustomSlot = true
      }
      if (scopedSlot.length === 1) {
        return scopedSlot[0]
      } else if (scopedSlot.length > 1 || !scopedSlot.length) {
        if (process.env.NODE_ENV !== 'production') {
          warn(
            false,
            `<router-link> with to="${
              this.to
            }" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.`
          )
        }
        return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)
      }
    }

    if (process.env.NODE_ENV !== 'production') {
      if ('tag' in this.$options.propsData && !warnedTagProp) {
        warn(
          false,
          `<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.`
        )
        warnedTagProp = true
      }
      if ('event' in this.$options.propsData && !warnedEventProp) {
        warn(
          false,
          `<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.`
        )
        warnedEventProp = true
      }
    }

    if (this.tag === 'a') {
      data.on = on
      data.attrs = { href, 'aria-current': ariaCurrentValue }
    } else {
      // find the first <a> child and apply listener and href
      const a = findAnchor(this.$slots.default)
      if (a) {
        // in case the <a> is a static node
        a.isStatic = false
        const aData = (a.data = extend({}, a.data))
        aData.on = aData.on || {}
        // transform existing events in both objects into arrays so we can push later
        for (const event in aData.on) {
          const handler = aData.on[event]
          if (event in on) {
            aData.on[event] = Array.isArray(handler) ? handler : [handler]
          }
        }
        // append new listeners for router-link
        for (const event in on) {
          if (event in aData.on) {
            // on[event] is always a function
            aData.on[event].push(on[event])
          } else {
            aData.on[event] = handler
          }
        }

        const aAttrs = (a.data.attrs = extend({}, a.data.attrs))
        aAttrs.href = href
        aAttrs['aria-current'] = ariaCurrentValue
      } else {
        // doesn't have <a> child, apply listener to self
        data.on = on
      }
    }

    return h(this.tag, data, this.$slots.default)
  }
}

function guardEvent (e) {
  // don't redirect with control keys
  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return
  // don't redirect when preventDefault called
  if (e.defaultPrevented) return
  // don't redirect on right click
  if (e.button !== undefined && e.button !== 0) return
  // don't redirect if `target="_blank"`
  if (e.currentTarget && e.currentTarget.getAttribute) {
    const target = e.currentTarget.getAttribute('target')
    if (/\b_blank\b/i.test(target)) return
  }
  // this may be a Weex event which doesn't have this method
  if (e.preventDefault) {
    e.preventDefault()
  }
  return true
}

function findAnchor (children) {
  if (children) {
    let child
    for (let i = 0; i < children.length; i++) {
      child = children[i]
      if (child.tag === 'a') {
        return child
      }
      if (child.children && (child = findAnchor(child.children))) {
        return child
      }
    }
  }
}
import { warn } from '../util/warn'
import { extend } from '../util/misc'
import { handleRouteEntered } from '../util/route'

export default {
  name: 'RouterView',
  functional: true,
  props: {
    name: {
      type: String,
      default: 'default'
    }
  },
  render (_, { props, children, parent, data }) {
    // used by devtools to display a router-view badge
    data.routerView = true

    // directly use parent context's createElement() function
    // so that components rendered by router-view can resolve named slots
    const h = parent.$createElement
    const name = props.name
    const route = parent.$route
    const cache = parent._routerViewCache || (parent._routerViewCache = {})

    // determine current view depth, also check to see if the tree
    // has been toggled inactive but kept-alive.
    let depth = 0
    let inactive = false
    while (parent && parent._routerRoot !== parent) {
      const vnodeData = parent.$vnode ? parent.$vnode.data : {}
      if (vnodeData.routerView) {
        depth++
      }
      if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {
        inactive = true
      }
      parent = parent.$parent
    }
    data.routerViewDepth = depth

    // render previous view if the tree is inactive and kept-alive
    if (inactive) {
      const cachedData = cache[name]
      const cachedComponent = cachedData && cachedData.component
      if (cachedComponent) {
        // #2301
        // pass props
        if (cachedData.configProps) {
          fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps)
        }
        return h(cachedComponent, data, children)
      } else {
        // render previous empty view
        return h()
      }
    }

    const matched = route.matched[depth]
    const component = matched && matched.components[name]

    // render empty node if no matched route or no config component
    if (!matched || !component) {
      cache[name] = null
      return h()
    }

    // cache component
    cache[name] = { component }

    // attach instance registration hook
    // this will be called in the instance's injected lifecycle hooks
    data.registerRouteInstance = (vm, val) => {
      // val could be undefined for unregistration
      const current = matched.instances[name]
      if (
        (val && current !== vm) ||
        (!val && current === vm)
      ) {
        matched.instances[name] = val
      }
    }

    // also register instance in prepatch hook
    // in case the same component instance is reused across different routes
    ;(data.hook || (data.hook = {})).prepatch = (_, vnode) => {
      matched.instances[name] = vnode.componentInstance
    }

    // register instance in init hook
    // in case kept-alive component be actived when routes changed
    data.hook.init = (vnode) => {
      if (vnode.data.keepAlive &&
        vnode.componentInstance &&
        vnode.componentInstance !== matched.instances[name]
      ) {
        matched.instances[name] = vnode.componentInstance
      }

      // if the route transition has already been confirmed then we weren't
      // able to call the cbs during confirmation as the component was not
      // registered yet, so we call it here.
      handleRouteEntered(route)
    }

    const configProps = matched.props && matched.props[name]
    // save route and configProps in cache
    if (configProps) {
      extend(cache[name], {
        route,
        configProps
      })
      fillPropsinData(component, data, route, configProps)
    }

    return h(component, data, children)
  }
}

function fillPropsinData (component, data, route, configProps) {
  // resolve props
  let propsToPass = data.props = resolveProps(route, configProps)
  if (propsToPass) {
    // clone to prevent mutation
    propsToPass = data.props = extend({}, propsToPass)
    // pass non-declared props as attrs
    const attrs = data.attrs = data.attrs || {}
    for (const key in propsToPass) {
      if (!component.props || !(key in component.props)) {
        attrs[key] = propsToPass[key]
        delete propsToPass[key]
      }
    }
  }
}

function resolveProps (route, config) {
  switch (typeof config) {
    case 'undefined':
      return
    case 'object':
      return config
    case 'function':
      return config(route)
    case 'boolean':
      return config ? route.params : undefined
    default:
      if (process.env.NODE_ENV !== 'production') {
        warn(
          false,
          `props in "${route.path}" is a ${typeof config}, ` +
          `expecting an object, function or boolean.`
        )
      }
  }
}
/* @flow */

import type VueRouter from './index'
import { resolvePath } from './util/path'
import { assert, warn } from './util/warn'
import { createRoute } from './util/route'
import { fillParams } from './util/params'
import { createRouteMap } from './create-route-map'
import { normalizeLocation } from './util/location'
import { decode } from './util/query'

export type Matcher = {
  match: (raw: RawLocation, current?: Route, redirectedFrom?: Location) => Route;
  addRoutes: (routes: Array<RouteConfig>) => void;
  addRoute: (parentNameOrRoute: string | RouteConfig, route?: RouteConfig) => void;
  getRoutes: () => Array<RouteRecord>;
};

export function createMatcher (
  routes: Array<RouteConfig>,
  router: VueRouter
): Matcher {
  const { pathList, pathMap, nameMap } = createRouteMap(routes)

  function addRoutes (routes) {
    createRouteMap(routes, pathList, pathMap, nameMap)
  }

  function addRoute (parentOrRoute, route) {
    const parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined
    // $flow-disable-line
    createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent)

    // add aliases of parent
    if (parent) {
      createRouteMap(
        // $flow-disable-line route is defined if parent is
        parent.alias.map(alias => ({ path: alias, children: [route] })),
        pathList,
        pathMap,
        nameMap,
        parent
      )
    }
  }

  function getRoutes () {
    return pathList.map(path => pathMap[path])
  }

  function match (
    raw: RawLocation,
    currentRoute?: Route,
    redirectedFrom?: Location
  ): Route {
    const location = normalizeLocation(raw, currentRoute, false, router)
    const { name } = location

    if (name) {
      const record = nameMap[name]
      if (process.env.NODE_ENV !== 'production') {
        warn(record, `Route with name '${name}' does not exist`)
      }
      if (!record) return _createRoute(null, location)
      const paramNames = record.regex.keys
        .filter(key => !key.optional)
        .map(key => key.name)

      if (typeof location.params !== 'object') {
        location.params = {}
      }

      if (currentRoute && typeof currentRoute.params === 'object') {
        for (const key in currentRoute.params) {
          if (!(key in location.params) && paramNames.indexOf(key) > -1) {
            location.params[key] = currentRoute.params[key]
          }
        }
      }

      location.path = fillParams(record.path, location.params, `named route "${name}"`)
      return _createRoute(record, location, redirectedFrom)
    } else if (location.path) {
      location.params = {}
      for (let i = 0; i < pathList.length; i++) {
        const path = pathList[i]
        const record = pathMap[path]
        if (matchRoute(record.regex, location.path, location.params)) {
          return _createRoute(record, location, redirectedFrom)
        }
      }
    }
    // no match
    return _createRoute(null, location)
  }

  function redirect (
    record: RouteRecord,
    location: Location
  ): Route {
    const originalRedirect = record.redirect
    let redirect = typeof originalRedirect === 'function'
      ? originalRedirect(createRoute(record, location, null, router))
      : originalRedirect

    if (typeof redirect === 'string') {
      redirect = { path: redirect }
    }

    if (!redirect || typeof redirect !== 'object') {
      if (process.env.NODE_ENV !== 'production') {
        warn(
          false, `invalid redirect option: ${JSON.stringify(redirect)}`
        )
      }
      return _createRoute(null, location)
    }

    const re: Object = redirect
    const { name, path } = re
    let { query, hash, params } = location
    query = re.hasOwnProperty('query') ? re.query : query
    hash = re.hasOwnProperty('hash') ? re.hash : hash
    params = re.hasOwnProperty('params') ? re.params : params

    if (name) {
      // resolved named direct
      const targetRecord = nameMap[name]
      if (process.env.NODE_ENV !== 'production') {
        assert(targetRecord, `redirect failed: named route "${name}" not found.`)
      }
      return match({
        _normalized: true,
        name,
        query,
        hash,
        params
      }, undefined, location)
    } else if (path) {
      // 1. resolve relative redirect
      const rawPath = resolveRecordPath(path, record)
      // 2. resolve params
      const resolvedPath = fillParams(rawPath, params, `redirect route with path "${rawPath}"`)
      // 3. rematch with existing query and hash
      return match({
        _normalized: true,
        path: resolvedPath,
        query,
        hash
      }, undefined, location)
    } else {
      if (process.env.NODE_ENV !== 'production') {
        warn(false, `invalid redirect option: ${JSON.stringify(redirect)}`)
      }
      return _createRoute(null, location)
    }
  }

  function alias (
    record: RouteRecord,
    location: Location,
    matchAs: string
  ): Route {
    const aliasedPath = fillParams(matchAs, location.params, `aliased route with path "${matchAs}"`)
    const aliasedMatch = match({
      _normalized: true,
      path: aliasedPath
    })
    if (aliasedMatch) {
      const matched = aliasedMatch.matched
      const aliasedRecord = matched[matched.length - 1]
      location.params = aliasedMatch.params
      return _createRoute(aliasedRecord, location)
    }
    return _createRoute(null, location)
  }

  function _createRoute (
    record: ?RouteRecord,
    location: Location,
    redirectedFrom?: Location
  ): Route {
    if (record && record.redirect) {
      return redirect(record, redirectedFrom || location)
    }
    if (record && record.matchAs) {
      return alias(record, location, record.matchAs)
    }
    return createRoute(record, location, redirectedFrom, router)
  }

  return {
    match,
    addRoute,
    getRoutes,
    addRoutes
  }
}

function matchRoute (
  regex: RouteRegExp,
  path: string,
  params: Object
): boolean {
  const m = path.match(regex)

  if (!m) {
    return false
  } else if (!params) {
    return true
  }

  for (let i = 1, len = m.length; i < len; ++i) {
    const key = regex.keys[i - 1]
    if (key) {
      // Fix #1994: using * with props: true generates a param named 0
      params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i]
    }
  }

  return true
}

function resolveRecordPath (path: string, record: RouteRecord): string {
  return resolvePath(path, record.parent ? record.parent.path : '/', true)
}
/* @flow */

import Regexp from 'path-to-regexp'
import { cleanPath } from './util/path'
import { assert, warn } from './util/warn'

export function createRouteMap (
  routes: Array<RouteConfig>,
  oldPathList?: Array<string>,
  oldPathMap?: Dictionary<RouteRecord>,
  oldNameMap?: Dictionary<RouteRecord>,
  parentRoute?: RouteRecord
): {
  pathList: Array<string>,
  pathMap: Dictionary<RouteRecord>,
  nameMap: Dictionary<RouteRecord>
} {
  // the path list is used to control path matching priority
  const pathList: Array<string> = oldPathList || []
  // $flow-disable-line
  const pathMap: Dictionary<RouteRecord> = oldPathMap || Object.create(null)
  // $flow-disable-line
  const nameMap: Dictionary<RouteRecord> = oldNameMap || Object.create(null)

  routes.forEach(route => {
    addRouteRecord(pathList, pathMap, nameMap, route, parentRoute)
  })

  // ensure wildcard routes are always at the end
  for (let i = 0, l = pathList.length; i < l; i++) {
    if (pathList[i] === '*') {
      pathList.push(pathList.splice(i, 1)[0])
      l--
      i--
    }
  }

  if (process.env.NODE_ENV === 'development') {
    // warn if routes do not include leading slashes
    const found = pathList
    // check for missing leading slash
      .filter(path => path && path.charAt(0) !== '*' && path.charAt(0) !== '/')

    if (found.length > 0) {
      const pathNames = found.map(path => `- ${path}`).join('\n')
      warn(false, `Non-nested routes must include a leading slash character. Fix the following routes: \n${pathNames}`)
    }
  }

  return {
    pathList,
    pathMap,
    nameMap
  }
}

function addRouteRecord (
  pathList: Array<string>,
  pathMap: Dictionary<RouteRecord>,
  nameMap: Dictionary<RouteRecord>,
  route: RouteConfig,
  parent?: RouteRecord,
  matchAs?: string
) {
  const { path, name } = route
  if (process.env.NODE_ENV !== 'production') {
    assert(path != null, `"path" is required in a route configuration.`)
    assert(
      typeof route.component !== 'string',
      `route config "component" for path: ${String(
        path || name
      )} cannot be a ` + `string id. Use an actual component instead.`
    )

    warn(
      // eslint-disable-next-line no-control-regex
      !/[^\u0000-\u007F]+/.test(path),
      `Route with path "${path}" contains unencoded characters, make sure ` +
        `your path is correctly encoded before passing it to the router. Use ` +
        `encodeURI to encode static segments of your path.`
    )
  }

  const pathToRegexpOptions: PathToRegexpOptions =
    route.pathToRegexpOptions || {}
  const normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict)

  if (typeof route.caseSensitive === 'boolean') {
    pathToRegexpOptions.sensitive = route.caseSensitive
  }

  const record: RouteRecord = {
    path: normalizedPath,
    regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),
    components: route.components || { default: route.component },
    alias: route.alias
      ? typeof route.alias === 'string'
        ? [route.alias]
        : route.alias
      : [],
    instances: {},
    enteredCbs: {},
    name,
    parent,
    matchAs,
    redirect: route.redirect,
    beforeEnter: route.beforeEnter,
    meta: route.meta || {},
    props:
      route.props == null
        ? {}
        : route.components
          ? route.props
          : { default: route.props }
  }

  if (route.children) {
    // Warn if route is named, does not redirect and has a default child route.
    // If users navigate to this route by name, the default child will
    // not be rendered (GH Issue #629)
    if (process.env.NODE_ENV !== 'production') {
      if (
        route.name &&
        !route.redirect &&
        route.children.some(child => /^\/?$/.test(child.path))
      ) {
        warn(
          false,
          `Named Route '${route.name}' has a default child route. ` +
            `When navigating to this named route (:to="{name: '${
              route.name
            }'"), ` +
            `the default child route will not be rendered. Remove the name from ` +
            `this route and use the name of the default child route for named ` +
            `links instead.`
        )
      }
    }
    route.children.forEach(child => {
      const childMatchAs = matchAs
        ? cleanPath(`${matchAs}/${child.path}`)
        : undefined
      addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs)
    })
  }

  if (!pathMap[record.path]) {
    pathList.push(record.path)
    pathMap[record.path] = record
  }

  if (route.alias !== undefined) {
    const aliases = Array.isArray(route.alias) ? route.alias : [route.alias]
    for (let i = 0; i < aliases.length; ++i) {
      const alias = aliases[i]
      if (process.env.NODE_ENV !== 'production' && alias === path) {
        warn(
          false,
          `Found an alias with the same value as the path: "${path}". You have to remove that alias. It will be ignored in development.`
        )
        // skip in dev to make it work
        continue
      }

      const aliasRoute = {
        path: alias,
        children: route.children
      }
      addRouteRecord(
        pathList,
        pathMap,
        nameMap,
        aliasRoute,
        parent,
        record.path || '/' // matchAs
      )
    }
  }

  if (name) {
    if (!nameMap[name]) {
      nameMap[name] = record
    } else if (process.env.NODE_ENV !== 'production' && !matchAs) {
      warn(
        false,
        `Duplicate named routes definition: ` +
          `{ name: "${name}", path: "${record.path}" }`
      )
    }
  }
}

function compileRouteRegex (
  path: string,
  pathToRegexpOptions: PathToRegexpOptions
): RouteRegExp {
  const regex = Regexp(path, [], pathToRegexpOptions)
  if (process.env.NODE_ENV !== 'production') {
    const keys: any = Object.create(null)
    regex.keys.forEach(key => {
      warn(
        !keys[key.name],
        `Duplicate param keys in route with path: "${path}"`
      )
      keys[key.name] = true
    })
  }
  return regex
}

function normalizePath (
  path: string,
  parent?: RouteRecord,
  strict?: boolean
): string {
  if (!strict) path = path.replace(/\/$/, '')
  if (path[0] === '/') return path
  if (parent == null) return path
  return cleanPath(`${parent.path}/${path}`)
}
/* @flow */

import type Router from '../index'
import { History } from './base'
import { NavigationFailureType, isNavigationFailure } from '../util/errors'

export class AbstractHistory extends History {
  index: number
  stack: Array<Route>

  constructor (router: Router, base: ?string) {
    super(router, base)
    this.stack = []
    this.index = -1
  }

  push (location: RawLocation, onComplete?: Function, onAbort?: Function) {
    this.transitionTo(
      location,
      route => {
        this.stack = this.stack.slice(0, this.index + 1).concat(route)
        this.index++
        onComplete && onComplete(route)
      },
      onAbort
    )
  }

  replace (location: RawLocation, onComplete?: Function, onAbort?: Function) {
    this.transitionTo(
      location,
      route => {
        this.stack = this.stack.slice(0, this.index).concat(route)
        onComplete && onComplete(route)
      },
      onAbort
    )
  }

  go (n: number) {
    const targetIndex = this.index + n
    if (targetIndex < 0 || targetIndex >= this.stack.length) {
      return
    }
    const route = this.stack[targetIndex]
    this.confirmTransition(
      route,
      () => {
        const prev = this.current
        this.index = targetIndex
        this.updateRoute(route)
        this.router.afterHooks.forEach(hook => {
          hook && hook(route, prev)
        })
      },
      err => {
        if (isNavigationFailure(err, NavigationFailureType.duplicated)) {
          this.index = targetIndex
        }
      }
    )
  }

  getCurrentLocation () {
    const current = this.stack[this.stack.length - 1]
    return current ? current.fullPath : '/'
  }

  ensureURL () {
    // noop
  }
}
/* @flow */

import { _Vue } from '../install'
import type Router from '../index'
import { inBrowser } from '../util/dom'
import { runQueue } from '../util/async'
import { warn } from '../util/warn'
import { START, isSameRoute, handleRouteEntered } from '../util/route'
import {
  flatten,
  flatMapComponents,
  resolveAsyncComponents
} from '../util/resolve-components'
import {
  createNavigationDuplicatedError,
  createNavigationCancelledError,
  createNavigationRedirectedError,
  createNavigationAbortedError,
  isError,
  isNavigationFailure,
  NavigationFailureType
} from '../util/errors'

export class History {
  router: Router
  base: string
  current: Route
  pending: ?Route
  cb: (r: Route) => void
  ready: boolean
  readyCbs: Array<Function>
  readyErrorCbs: Array<Function>
  errorCbs: Array<Function>
  listeners: Array<Function>
  cleanupListeners: Function

  // implemented by sub-classes
  +go: (n: number) => void
  +push: (loc: RawLocation, onComplete?: Function, onAbort?: Function) => void
  +replace: (
    loc: RawLocation,
    onComplete?: Function,
    onAbort?: Function
  ) => void
  +ensureURL: (push?: boolean) => void
  +getCurrentLocation: () => string
  +setupListeners: Function

  constructor (router: Router, base: ?string) {
    this.router = router
    this.base = normalizeBase(base)
    // start with a route object that stands for "nowhere"
    this.current = START
    this.pending = null
    this.ready = false
    this.readyCbs = []
    this.readyErrorCbs = []
    this.errorCbs = []
    this.listeners = []
  }

  listen (cb: Function) {
    this.cb = cb
  }

  onReady (cb: Function, errorCb: ?Function) {
    if (this.ready) {
      cb()
    } else {
      this.readyCbs.push(cb)
      if (errorCb) {
        this.readyErrorCbs.push(errorCb)
      }
    }
  }

  onError (errorCb: Function) {
    this.errorCbs.push(errorCb)
  }

  transitionTo (
    location: RawLocation,
    onComplete?: Function,
    onAbort?: Function
  ) {
    let route
    // catch redirect option https://github.com/vuejs/vue-router/issues/3201
    try {
      route = this.router.match(location, this.current)
    } catch (e) {
      this.errorCbs.forEach(cb => {
        cb(e)
      })
      // Exception should still be thrown
      throw e
    }
    const prev = this.current
    this.confirmTransition(
      route,
      () => {
        this.updateRoute(route)
        onComplete && onComplete(route)
        this.ensureURL()
        this.router.afterHooks.forEach(hook => {
          hook && hook(route, prev)
        })

        // fire ready cbs once
        if (!this.ready) {
          this.ready = true
          this.readyCbs.forEach(cb => {
            cb(route)
          })
        }
      },
      err => {
        if (onAbort) {
          onAbort(err)
        }
        if (err && !this.ready) {
          // Initial redirection should not mark the history as ready yet
          // because it's triggered by the redirection instead
          // https://github.com/vuejs/vue-router/issues/3225
          // https://github.com/vuejs/vue-router/issues/3331
          if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {
            this.ready = true
            this.readyErrorCbs.forEach(cb => {
              cb(err)
            })
          }
        }
      }
    )
  }

  confirmTransition (route: Route, onComplete: Function, onAbort?: Function) {
    const current = this.current
    this.pending = route
    const abort = err => {
      // changed after adding errors with
      // https://github.com/vuejs/vue-router/pull/3047 before that change,
      // redirect and aborted navigation would produce an err == null
      if (!isNavigationFailure(err) && isError(err)) {
        if (this.errorCbs.length) {
          this.errorCbs.forEach(cb => {
            cb(err)
          })
        } else {
          warn(false, 'uncaught error during route navigation:')
          console.error(err)
        }
      }
      onAbort && onAbort(err)
    }
    const lastRouteIndex = route.matched.length - 1
    const lastCurrentIndex = current.matched.length - 1
    if (
      isSameRoute(route, current) &&
      // in the case the route map has been dynamically appended to
      lastRouteIndex === lastCurrentIndex &&
      route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]
    ) {
      this.ensureURL()
      return abort(createNavigationDuplicatedError(current, route))
    }

    const { updated, deactivated, activated } = resolveQueue(
      this.current.matched,
      route.matched
    )

    const queue: Array<?NavigationGuard> = [].concat(
      // in-component leave guards
      extractLeaveGuards(deactivated),
      // global before hooks
      this.router.beforeHooks,
      // in-component update hooks
      extractUpdateHooks(updated),
      // in-config enter guards
      activated.map(m => m.beforeEnter),
      // async components
      resolveAsyncComponents(activated)
    )

    const iterator = (hook: NavigationGuard, next) => {
      if (this.pending !== route) {
        return abort(createNavigationCancelledError(current, route))
      }
      try {
        hook(route, current, (to: any) => {
          if (to === false) {
            // next(false) -> abort navigation, ensure current URL
            this.ensureURL(true)
            abort(createNavigationAbortedError(current, route))
          } else if (isError(to)) {
            this.ensureURL(true)
            abort(to)
          } else if (
            typeof to === 'string' ||
            (typeof to === 'object' &&
              (typeof to.path === 'string' || typeof to.name === 'string'))
          ) {
            // next('/') or next({ path: '/' }) -> redirect
            abort(createNavigationRedirectedError(current, route))
            if (typeof to === 'object' && to.replace) {
              this.replace(to)
            } else {
              this.push(to)
            }
          } else {
            // confirm transition and pass on the value
            next(to)
          }
        })
      } catch (e) {
        abort(e)
      }
    }

    runQueue(queue, iterator, () => {
      // wait until async components are resolved before
      // extracting in-component enter guards
      const enterGuards = extractEnterGuards(activated)
      const queue = enterGuards.concat(this.router.resolveHooks)
      runQueue(queue, iterator, () => {
        if (this.pending !== route) {
          return abort(createNavigationCancelledError(current, route))
        }
        this.pending = null
        onComplete(route)
        if (this.router.app) {
          this.router.app.$nextTick(() => {
            handleRouteEntered(route)
          })
        }
      })
    })
  }

  updateRoute (route: Route) {
    this.current = route
    this.cb && this.cb(route)
  }

  setupListeners () {
    // Default implementation is empty
  }

  teardown () {
    // clean up event listeners
    // https://github.com/vuejs/vue-router/issues/2341
    this.listeners.forEach(cleanupListener => {
      cleanupListener()
    })
    this.listeners = []

    // reset current history route
    // https://github.com/vuejs/vue-router/issues/3294
    this.current = START
    this.pending = null
  }
}

function normalizeBase (base: ?string): string {
  if (!base) {
    if (inBrowser) {
      // respect <base> tag
      const baseEl = document.querySelector('base')
      base = (baseEl && baseEl.getAttribute('href')) || '/'
      // strip full URL origin
      base = base.replace(/^https?:\/\/[^\/]+/, '')
    } else {
      base = '/'
    }
  }
  // make sure there's the starting slash
  if (base.charAt(0) !== '/') {
    base = '/' + base
  }
  // remove trailing slash
  return base.replace(/\/$/, '')
}

function resolveQueue (
  current: Array<RouteRecord>,
  next: Array<RouteRecord>
): {
  updated: Array<RouteRecord>,
  activated: Array<RouteRecord>,
  deactivated: Array<RouteRecord>
} {
  let i
  const max = Math.max(current.length, next.length)
  for (i = 0; i < max; i++) {
    if (current[i] !== next[i]) {
      break
    }
  }
  return {
    updated: next.slice(0, i),
    activated: next.slice(i),
    deactivated: current.slice(i)
  }
}

function extractGuards (
  records: Array<RouteRecord>,
  name: string,
  bind: Function,
  reverse?: boolean
): Array<?Function> {
  const guards = flatMapComponents(records, (def, instance, match, key) => {
    const guard = extractGuard(def, name)
    if (guard) {
      return Array.isArray(guard)
        ? guard.map(guard => bind(guard, instance, match, key))
        : bind(guard, instance, match, key)
    }
  })
  return flatten(reverse ? guards.reverse() : guards)
}

function extractGuard (
  def: Object | Function,
  key: string
): NavigationGuard | Array<NavigationGuard> {
  if (typeof def !== 'function') {
    // extend now so that global mixins are applied.
    def = _Vue.extend(def)
  }
  return def.options[key]
}

function extractLeaveGuards (deactivated: Array<RouteRecord>): Array<?Function> {
  return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)
}

function extractUpdateHooks (updated: Array<RouteRecord>): Array<?Function> {
  return extractGuards(updated, 'beforeRouteUpdate', bindGuard)
}

function bindGuard (guard: NavigationGuard, instance: ?_Vue): ?NavigationGuard {
  if (instance) {
    return function boundRouteGuard () {
      return guard.apply(instance, arguments)
    }
  }
}

function extractEnterGuards (
  activated: Array<RouteRecord>
): Array<?Function> {
  return extractGuards(
    activated,
    'beforeRouteEnter',
    (guard, _, match, key) => {
      return bindEnterGuard(guard, match, key)
    }
  )
}

function bindEnterGuard (
  guard: NavigationGuard,
  match: RouteRecord,
  key: string
): NavigationGuard {
  return function routeEnterGuard (to, from, next) {
    return guard(to, from, cb => {
      if (typeof cb === 'function') {
        if (!match.enteredCbs[key]) {
          match.enteredCbs[key] = []
        }
        match.enteredCbs[key].push(cb)
      }
      next(cb)
    })
  }
}
/* @flow */

import type Router from '../index'
import { History } from './base'
import { cleanPath } from '../util/path'
import { getLocation } from './html5'
import { setupScroll, handleScroll } from '../util/scroll'
import { pushState, replaceState, supportsPushState } from '../util/push-state'

export class HashHistory extends History {
  constructor (router: Router, base: ?string, fallback: boolean) {
    super(router, base)
    // check history fallback deeplinking
    if (fallback && checkFallback(this.base)) {
      return
    }
    ensureSlash()
  }

  // this is delayed until the app mounts
  // to avoid the hashchange listener being fired too early
  setupListeners () {
    if (this.listeners.length > 0) {
      return
    }

    const router = this.router
    const expectScroll = router.options.scrollBehavior
    const supportsScroll = supportsPushState && expectScroll

    if (supportsScroll) {
      this.listeners.push(setupScroll())
    }

    const handleRoutingEvent = () => {
      const current = this.current
      if (!ensureSlash()) {
        return
      }
      this.transitionTo(getHash(), route => {
        if (supportsScroll) {
          handleScroll(this.router, route, current, true)
        }
        if (!supportsPushState) {
          replaceHash(route.fullPath)
        }
      })
    }
    const eventType = supportsPushState ? 'popstate' : 'hashchange'
    window.addEventListener(
      eventType,
      handleRoutingEvent
    )
    this.listeners.push(() => {
      window.removeEventListener(eventType, handleRoutingEvent)
    })
  }

  push (location: RawLocation, onComplete?: Function, onAbort?: Function) {
    const { current: fromRoute } = this
    this.transitionTo(
      location,
      route => {
        pushHash(route.fullPath)
        handleScroll(this.router, route, fromRoute, false)
        onComplete && onComplete(route)
      },
      onAbort
    )
  }

  replace (location: RawLocation, onComplete?: Function, onAbort?: Function) {
    const { current: fromRoute } = this
    this.transitionTo(
      location,
      route => {
        replaceHash(route.fullPath)
        handleScroll(this.router, route, fromRoute, false)
        onComplete && onComplete(route)
      },
      onAbort
    )
  }

  go (n: number) {
    window.history.go(n)
  }

  ensureURL (push?: boolean) {
    const current = this.current.fullPath
    if (getHash() !== current) {
      push ? pushHash(current) : replaceHash(current)
    }
  }

  getCurrentLocation () {
    return getHash()
  }
}

function checkFallback (base) {
  const location = getLocation(base)
  if (!/^\/#/.test(location)) {
    window.location.replace(cleanPath(base + '/#' + location))
    return true
  }
}

function ensureSlash (): boolean {
  const path = getHash()
  if (path.charAt(0) === '/') {
    return true
  }
  replaceHash('/' + path)
  return false
}

export function getHash (): string {
  // We can't use window.location.hash here because it's not
  // consistent across browsers - Firefox will pre-decode it!
  let href = window.location.href
  const index = href.indexOf('#')
  // empty path
  if (index < 0) return ''

  href = href.slice(index + 1)

  return href
}

function getUrl (path) {
  const href = window.location.href
  const i = href.indexOf('#')
  const base = i >= 0 ? href.slice(0, i) : href
  return `${base}#${path}`
}

function pushHash (path) {
  if (supportsPushState) {
    pushState(getUrl(path))
  } else {
    window.location.hash = path
  }
}

function replaceHash (path) {
  if (supportsPushState) {
    replaceState(getUrl(path))
  } else {
    window.location.replace(getUrl(path))
  }
}
/* @flow */

import type Router from '../index'
import { History } from './base'
import { cleanPath } from '../util/path'
import { START } from '../util/route'
import { setupScroll, handleScroll } from '../util/scroll'
import { pushState, replaceState, supportsPushState } from '../util/push-state'

export class HTML5History extends History {
  _startLocation: string

  constructor (router: Router, base: ?string) {
    super(router, base)

    this._startLocation = getLocation(this.base)
  }

  setupListeners () {
    if (this.listeners.length > 0) {
      return
    }

    const router = this.router
    const expectScroll = router.options.scrollBehavior
    const supportsScroll = supportsPushState && expectScroll

    if (supportsScroll) {
      this.listeners.push(setupScroll())
    }

    const handleRoutingEvent = () => {
      const current = this.current

      // Avoiding first `popstate` event dispatched in some browsers but first
      // history route not updated since async guard at the same time.
      const location = getLocation(this.base)
      if (this.current === START && location === this._startLocation) {
        return
      }

      this.transitionTo(location, route => {
        if (supportsScroll) {
          handleScroll(router, route, current, true)
        }
      })
    }
    window.addEventListener('popstate', handleRoutingEvent)
    this.listeners.push(() => {
      window.removeEventListener('popstate', handleRoutingEvent)
    })
  }

  go (n: number) {
    window.history.go(n)
  }

  push (location: RawLocation, onComplete?: Function, onAbort?: Function) {
    const { current: fromRoute } = this
    this.transitionTo(location, route => {
      pushState(cleanPath(this.base + route.fullPath))
      handleScroll(this.router, route, fromRoute, false)
      onComplete && onComplete(route)
    }, onAbort)
  }

  replace (location: RawLocation, onComplete?: Function, onAbort?: Function) {
    const { current: fromRoute } = this
    this.transitionTo(location, route => {
      replaceState(cleanPath(this.base + route.fullPath))
      handleScroll(this.router, route, fromRoute, false)
      onComplete && onComplete(route)
    }, onAbort)
  }

  ensureURL (push?: boolean) {
    if (getLocation(this.base) !== this.current.fullPath) {
      const current = cleanPath(this.base + this.current.fullPath)
      push ? pushState(current) : replaceState(current)
    }
  }

  getCurrentLocation (): string {
    return getLocation(this.base)
  }
}

export function getLocation (base: string): string {
  let path = window.location.pathname
  if (base && path.toLowerCase().indexOf(base.toLowerCase()) === 0) {
    path = path.slice(base.length)
  }
  return (path || '/') + window.location.search + window.location.hash
}
/* @flow */

import { install } from './install'
import { START } from './util/route'
import { assert, warn } from './util/warn'
import { inBrowser } from './util/dom'
import { cleanPath } from './util/path'
import { createMatcher } from './create-matcher'
import { normalizeLocation } from './util/location'
import { supportsPushState } from './util/push-state'
import { handleScroll } from './util/scroll'

import { HashHistory } from './history/hash'
import { HTML5History } from './history/html5'
import { AbstractHistory } from './history/abstract'

import type { Matcher } from './create-matcher'

import { isNavigationFailure, NavigationFailureType } from './util/errors'

export default class VueRouter {
  static install: () => void
  static version: string
  static isNavigationFailure: Function
  static NavigationFailureType: any
  static START_LOCATION: Route

  app: any
  apps: Array<any>
  ready: boolean
  readyCbs: Array<Function>
  options: RouterOptions
  mode: string
  history: HashHistory | HTML5History | AbstractHistory
  matcher: Matcher
  fallback: boolean
  beforeHooks: Array<?NavigationGuard>
  resolveHooks: Array<?NavigationGuard>
  afterHooks: Array<?AfterNavigationHook>

  constructor (options: RouterOptions = {}) {
    this.app = null
    this.apps = []
    this.options = options
    this.beforeHooks = []
    this.resolveHooks = []
    this.afterHooks = []
    this.matcher = createMatcher(options.routes || [], this)

    let mode = options.mode || 'hash'
    this.fallback =
      mode === 'history' && !supportsPushState && options.fallback !== false
    if (this.fallback) {
      mode = 'hash'
    }
    if (!inBrowser) {
      mode = 'abstract'
    }
    this.mode = mode

    switch (mode) {
      case 'history':
        this.history = new HTML5History(this, options.base)
        break
      case 'hash':
        this.history = new HashHistory(this, options.base, this.fallback)
        break
      case 'abstract':
        this.history = new AbstractHistory(this, options.base)
        break
      default:
        if (process.env.NODE_ENV !== 'production') {
          assert(false, `invalid mode: ${mode}`)
        }
    }
  }

  match (raw: RawLocation, current?: Route, redirectedFrom?: Location): Route {
    return this.matcher.match(raw, current, redirectedFrom)
  }

  get currentRoute (): ?Route {
    return this.history && this.history.current
  }

  init (app: any /* Vue component instance */) {
    process.env.NODE_ENV !== 'production' &&
      assert(
        install.installed,
        `not installed. Make sure to call \`Vue.use(VueRouter)\` ` +
          `before creating root instance.`
      )

    this.apps.push(app)

    // set up app destroyed handler
    // https://github.com/vuejs/vue-router/issues/2639
    app.$once('hook:destroyed', () => {
      // clean out app from this.apps array once destroyed
      const index = this.apps.indexOf(app)
      if (index > -1) this.apps.splice(index, 1)
      // ensure we still have a main app or null if no apps
      // we do not release the router so it can be reused
      if (this.app === app) this.app = this.apps[0] || null

      if (!this.app) this.history.teardown()
    })

    // main app previously initialized
    // return as we don't need to set up new history listener
    if (this.app) {
      return
    }

    this.app = app

    const history = this.history

    if (history instanceof HTML5History || history instanceof HashHistory) {
      const handleInitialScroll = routeOrError => {
        const from = history.current
        const expectScroll = this.options.scrollBehavior
        const supportsScroll = supportsPushState && expectScroll

        if (supportsScroll && 'fullPath' in routeOrError) {
          handleScroll(this, routeOrError, from, false)
        }
      }
      const setupListeners = routeOrError => {
        history.setupListeners()
        handleInitialScroll(routeOrError)
      }
      history.transitionTo(
        history.getCurrentLocation(),
        setupListeners,
        setupListeners
      )
    }

    history.listen(route => {
      this.apps.forEach(app => {
        app._route = route
      })
    })
  }

  beforeEach (fn: Function): Function {
    return registerHook(this.beforeHooks, fn)
  }

  beforeResolve (fn: Function): Function {
    return registerHook(this.resolveHooks, fn)
  }

  afterEach (fn: Function): Function {
    return registerHook(this.afterHooks, fn)
  }

  onReady (cb: Function, errorCb?: Function) {
    this.history.onReady(cb, errorCb)
  }

  onError (errorCb: Function) {
    this.history.onError(errorCb)
  }

  push (location: RawLocation, onComplete?: Function, onAbort?: Function) {
    // $flow-disable-line
    if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
      return new Promise((resolve, reject) => {
        this.history.push(location, resolve, reject)
      })
    } else {
      this.history.push(location, onComplete, onAbort)
    }
  }

  replace (location: RawLocation, onComplete?: Function, onAbort?: Function) {
    // $flow-disable-line
    if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
      return new Promise((resolve, reject) => {
        this.history.replace(location, resolve, reject)
      })
    } else {
      this.history.replace(location, onComplete, onAbort)
    }
  }

  go (n: number) {
    this.history.go(n)
  }

  back () {
    this.go(-1)
  }

  forward () {
    this.go(1)
  }

  getMatchedComponents (to?: RawLocation | Route): Array<any> {
    const route: any = to
      ? to.matched
        ? to
        : this.resolve(to).route
      : this.currentRoute
    if (!route) {
      return []
    }
    return [].concat.apply(
      [],
      route.matched.map(m => {
        return Object.keys(m.components).map(key => {
          return m.components[key]
        })
      })
    )
  }

  resolve (
    to: RawLocation,
    current?: Route,
    append?: boolean
  ): {
    location: Location,
    route: Route,
    href: string,
    // for backwards compat
    normalizedTo: Location,
    resolved: Route
  } {
    current = current || this.history.current
    const location = normalizeLocation(to, current, append, this)
    const route = this.match(location, current)
    const fullPath = route.redirectedFrom || route.fullPath
    const base = this.history.base
    const href = createHref(base, fullPath, this.mode)
    return {
      location,
      route,
      href,
      // for backwards compat
      normalizedTo: location,
      resolved: route
    }
  }

  getRoutes () {
    return this.matcher.getRoutes()
  }

  addRoute (parentOrRoute: string | RouteConfig, route?: RouteConfig) {
    this.matcher.addRoute(parentOrRoute, route)
    if (this.history.current !== START) {
      this.history.transitionTo(this.history.getCurrentLocation())
    }
  }

  addRoutes (routes: Array<RouteConfig>) {
    if (process.env.NODE_ENV !== 'production') {
      warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.')
    }
    this.matcher.addRoutes(routes)
    if (this.history.current !== START) {
      this.history.transitionTo(this.history.getCurrentLocation())
    }
  }
}

function registerHook (list: Array<any>, fn: Function): Function {
  list.push(fn)
  return () => {
    const i = list.indexOf(fn)
    if (i > -1) list.splice(i, 1)
  }
}

function createHref (base: string, fullPath: string, mode) {
  var path = mode === 'hash' ? '#' + fullPath : fullPath
  return base ? cleanPath(base + '/' + path) : path
}

VueRouter.install = install
VueRouter.version = '__VERSION__'
VueRouter.isNavigationFailure = isNavigationFailure
VueRouter.NavigationFailureType = NavigationFailureType
VueRouter.START_LOCATION = START

if (inBrowser && window.Vue) {
  window.Vue.use(VueRouter)
}
import View from './components/view'
import Link from './components/link'

export let _Vue

export function install (Vue) {
  if (install.installed && _Vue === Vue) return
  install.installed = true

  _Vue = Vue

  const isDef = v => v !== undefined

  const registerInstance = (vm, callVal) => {
    let i = vm.$options._parentVnode
    if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {
      i(vm, callVal)
    }
  }

  Vue.mixin({
    beforeCreate () {
      if (isDef(this.$options.router)) {
        this._routerRoot = this
        this._router = this.$options.router
        this._router.init(this)
        Vue.util.defineReactive(this, '_route', this._router.history.current)
      } else {
        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this
      }
      registerInstance(this, this)
    },
    destroyed () {
      registerInstance(this)
    }
  })

  Object.defineProperty(Vue.prototype, '$router', {
    get () { return this._routerRoot._router }
  })

  Object.defineProperty(Vue.prototype, '$route', {
    get () { return this._routerRoot._route }
  })

  Vue.component('RouterView', View)
  Vue.component('RouterLink', Link)

  const strats = Vue.config.optionMergeStrategies
  // use the same hook merging strategy for route hooks
  strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created
}
/* @flow */

export function runQueue (queue: Array<?NavigationGuard>, fn: Function, cb: Function) {
  const step = index => {
    if (index >= queue.length) {
      cb()
    } else {
      if (queue[index]) {
        fn(queue[index], () => {
          step(index + 1)
        })
      } else {
        step(index + 1)
      }
    }
  }
  step(0)
}
/* @flow */

export const inBrowser = typeof window !== 'undefined'
// When changing thing, also edit router.d.ts
export const NavigationFailureType = {
  redirected: 2,
  aborted: 4,
  cancelled: 8,
  duplicated: 16
}

export function createNavigationRedirectedError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.redirected,
    `Redirected when going from "${from.fullPath}" to "${stringifyRoute(
      to
    )}" via a navigation guard.`
  )
}

export function createNavigationDuplicatedError (from, to) {
  const error = createRouterError(
    from,
    to,
    NavigationFailureType.duplicated,
    `Avoided redundant navigation to current location: "${from.fullPath}".`
  )
  // backwards compatible with the first introduction of Errors
  error.name = 'NavigationDuplicated'
  return error
}

export function createNavigationCancelledError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.cancelled,
    `Navigation cancelled from "${from.fullPath}" to "${
      to.fullPath
    }" with a new navigation.`
  )
}

export function createNavigationAbortedError (from, to) {
  return createRouterError(
    from,
    to,
    NavigationFailureType.aborted,
    `Navigation aborted from "${from.fullPath}" to "${
      to.fullPath
    }" via a navigation guard.`
  )
}

function createRouterError (from, to, type, message) {
  const error = new Error(message)
  error._isRouter = true
  error.from = from
  error.to = to
  error.type = type

  return error
}

const propertiesToLog = ['params', 'query', 'hash']

function stringifyRoute (to) {
  if (typeof to === 'string') return to
  if ('path' in to) return to.path
  const location = {}
  propertiesToLog.forEach(key => {
    if (key in to) location[key] = to[key]
  })
  return JSON.stringify(location, null, 2)
}

export function isError (err) {
  return Object.prototype.toString.call(err).indexOf('Error') > -1
}

export function isNavigationFailure (err, errorType) {
  return (
    isError(err) &&
    err._isRouter &&
    (errorType == null || err.type === errorType)
  )
}
/* @flow */

import type VueRouter from '../index'
import { parsePath, resolvePath } from './path'
import { resolveQuery } from './query'
import { fillParams } from './params'
import { warn } from './warn'
import { extend } from './misc'

export function normalizeLocation (
  raw: RawLocation,
  current: ?Route,
  append: ?boolean,
  router: ?VueRouter
): Location {
  let next: Location = typeof raw === 'string' ? { path: raw } : raw
  // named target
  if (next._normalized) {
    return next
  } else if (next.name) {
    next = extend({}, raw)
    const params = next.params
    if (params && typeof params === 'object') {
      next.params = extend({}, params)
    }
    return next
  }

  // relative params
  if (!next.path && next.params && current) {
    next = extend({}, next)
    next._normalized = true
    const params: any = extend(extend({}, current.params), next.params)
    if (current.name) {
      next.name = current.name
      next.params = params
    } else if (current.matched.length) {
      const rawPath = current.matched[current.matched.length - 1].path
      next.path = fillParams(rawPath, params, `path ${current.path}`)
    } else if (process.env.NODE_ENV !== 'production') {
      warn(false, `relative params navigation requires a current route.`)
    }
    return next
  }

  const parsedPath = parsePath(next.path || '')
  const basePath = (current && current.path) || '/'
  const path = parsedPath.path
    ? resolvePath(parsedPath.path, basePath, append || next.append)
    : basePath

  const query = resolveQuery(
    parsedPath.query,
    next.query,
    router && router.options.parseQuery
  )

  let hash = next.hash || parsedPath.hash
  if (hash && hash.charAt(0) !== '#') {
    hash = `#${hash}`
  }

  return {
    _normalized: true,
    path,
    query,
    hash
  }
}
export function extend (a, b) {
  for (const key in b) {
    a[key] = b[key]
  }
  return a
}
/* @flow */

import { warn } from './warn'
import Regexp from 'path-to-regexp'

// $flow-disable-line
const regexpCompileCache: {
  [key: string]: Function
} = Object.create(null)

export function fillParams (
  path: string,
  params: ?Object,
  routeMsg: string
): string {
  params = params || {}
  try {
    const filler =
      regexpCompileCache[path] ||
      (regexpCompileCache[path] = Regexp.compile(path))

    // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}
    // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string
    if (typeof params.pathMatch === 'string') params[0] = params.pathMatch

    return filler(params, { pretty: true })
  } catch (e) {
    if (process.env.NODE_ENV !== 'production') {
      // Fix #3072 no warn if `pathMatch` is string
      warn(typeof params.pathMatch === 'string', `missing param for ${routeMsg}: ${e.message}`)
    }
    return ''
  } finally {
    // delete the 0 if it was added
    delete params[0]
  }
}
/* @flow */

export function resolvePath (
  relative: string,
  base: string,
  append?: boolean
): string {
  const firstChar = relative.charAt(0)
  if (firstChar === '/') {
    return relative
  }

  if (firstChar === '?' || firstChar === '#') {
    return base + relative
  }

  const stack = base.split('/')

  // remove trailing segment if:
  // - not appending
  // - appending to trailing slash (last segment is empty)
  if (!append || !stack[stack.length - 1]) {
    stack.pop()
  }

  // resolve relative path
  const segments = relative.replace(/^\//, '').split('/')
  for (let i = 0; i < segments.length; i++) {
    const segment = segments[i]
    if (segment === '..') {
      stack.pop()
    } else if (segment !== '.') {
      stack.push(segment)
    }
  }

  // ensure leading slash
  if (stack[0] !== '') {
    stack.unshift('')
  }

  return stack.join('/')
}

export function parsePath (path: string): {
  path: string;
  query: string;
  hash: string;
} {
  let hash = ''
  let query = ''

  const hashIndex = path.indexOf('#')
  if (hashIndex >= 0) {
    hash = path.slice(hashIndex)
    path = path.slice(0, hashIndex)
  }

  const queryIndex = path.indexOf('?')
  if (queryIndex >= 0) {
    query = path.slice(queryIndex + 1)
    path = path.slice(0, queryIndex)
  }

  return {
    path,
    query,
    hash
  }
}

export function cleanPath (path: string): string {
  return path.replace(/\/\//g, '/')
}
/* @flow */

import { inBrowser } from './dom'
import { saveScrollPosition } from './scroll'
import { genStateKey, setStateKey, getStateKey } from './state-key'
import { extend } from './misc'

export const supportsPushState =
  inBrowser &&
  (function () {
    const ua = window.navigator.userAgent

    if (
      (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&
      ua.indexOf('Mobile Safari') !== -1 &&
      ua.indexOf('Chrome') === -1 &&
      ua.indexOf('Windows Phone') === -1
    ) {
      return false
    }

    return window.history && typeof window.history.pushState === 'function'
  })()

export function pushState (url?: string, replace?: boolean) {
  saveScrollPosition()
  // try...catch the pushState call to get around Safari
  // DOM Exception 18 where it limits to 100 pushState calls
  const history = window.history
  try {
    if (replace) {
      // preserve existing history state as it could be overriden by the user
      const stateCopy = extend({}, history.state)
      stateCopy.key = getStateKey()
      history.replaceState(stateCopy, '', url)
    } else {
      history.pushState({ key: setStateKey(genStateKey()) }, '', url)
    }
  } catch (e) {
    window.location[replace ? 'replace' : 'assign'](url)
  }
}

export function replaceState (url?: string) {
  pushState(url, true)
}
/* @flow */

import { warn } from './warn'

const encodeReserveRE = /[!'()*]/g
const encodeReserveReplacer = c => '%' + c.charCodeAt(0).toString(16)
const commaRE = /%2C/g

// fixed encodeURIComponent which is more conformant to RFC3986:
// - escapes [!'()*]
// - preserve commas
const encode = str =>
  encodeURIComponent(str)
    .replace(encodeReserveRE, encodeReserveReplacer)
    .replace(commaRE, ',')

export function decode (str: string) {
  try {
    return decodeURIComponent(str)
  } catch (err) {
    if (process.env.NODE_ENV !== 'production') {
      warn(false, `Error decoding "${str}". Leaving it intact.`)
    }
  }
  return str
}

export function resolveQuery (
  query: ?string,
  extraQuery: Dictionary<string> = {},
  _parseQuery: ?Function
): Dictionary<string> {
  const parse = _parseQuery || parseQuery
  let parsedQuery
  try {
    parsedQuery = parse(query || '')
  } catch (e) {
    process.env.NODE_ENV !== 'production' && warn(false, e.message)
    parsedQuery = {}
  }
  for (const key in extraQuery) {
    const value = extraQuery[key]
    parsedQuery[key] = Array.isArray(value)
      ? value.map(castQueryParamValue)
      : castQueryParamValue(value)
  }
  return parsedQuery
}

const castQueryParamValue = value => (value == null || typeof value === 'object' ? value : String(value))

function parseQuery (query: string): Dictionary<string> {
  const res = {}

  query = query.trim().replace(/^(\?|#|&)/, '')

  if (!query) {
    return res
  }

  query.split('&').forEach(param => {
    const parts = param.replace(/\+/g, ' ').split('=')
    const key = decode(parts.shift())
    const val = parts.length > 0 ? decode(parts.join('=')) : null

    if (res[key] === undefined) {
      res[key] = val
    } else if (Array.isArray(res[key])) {
      res[key].push(val)
    } else {
      res[key] = [res[key], val]
    }
  })

  return res
}

export function stringifyQuery (obj: Dictionary<string>): string {
  const res = obj
    ? Object.keys(obj)
      .map(key => {
        const val = obj[key]

        if (val === undefined) {
          return ''
        }

        if (val === null) {
          return encode(key)
        }

        if (Array.isArray(val)) {
          const result = []
          val.forEach(val2 => {
            if (val2 === undefined) {
              return
            }
            if (val2 === null) {
              result.push(encode(key))
            } else {
              result.push(encode(key) + '=' + encode(val2))
            }
          })
          return result.join('&')
        }

        return encode(key) + '=' + encode(val)
      })
      .filter(x => x.length > 0)
      .join('&')
    : null
  return res ? `?${res}` : ''
}
/* @flow */

import { _Vue } from '../install'
import { warn } from './warn'
import { isError } from '../util/errors'

export function resolveAsyncComponents (matched: Array<RouteRecord>): Function {
  return (to, from, next) => {
    let hasAsync = false
    let pending = 0
    let error = null

    flatMapComponents(matched, (def, _, match, key) => {
      // if it's a function and doesn't have cid attached,
      // assume it's an async component resolve function.
      // we are not using Vue's default async resolving mechanism because
      // we want to halt the navigation until the incoming component has been
      // resolved.
      if (typeof def === 'function' && def.cid === undefined) {
        hasAsync = true
        pending++

        const resolve = once(resolvedDef => {
          if (isESModule(resolvedDef)) {
            resolvedDef = resolvedDef.default
          }
          // save resolved on async factory in case it's used elsewhere
          def.resolved = typeof resolvedDef === 'function'
            ? resolvedDef
            : _Vue.extend(resolvedDef)
          match.components[key] = resolvedDef
          pending--
          if (pending <= 0) {
            next()
          }
        })

        const reject = once(reason => {
          const msg = `Failed to resolve async component ${key}: ${reason}`
          process.env.NODE_ENV !== 'production' && warn(false, msg)
          if (!error) {
            error = isError(reason)
              ? reason
              : new Error(msg)
            next(error)
          }
        })

        let res
        try {
          res = def(resolve, reject)
        } catch (e) {
          reject(e)
        }
        if (res) {
          if (typeof res.then === 'function') {
            res.then(resolve, reject)
          } else {
            // new syntax in Vue 2.3
            const comp = res.component
            if (comp && typeof comp.then === 'function') {
              comp.then(resolve, reject)
            }
          }
        }
      }
    })

    if (!hasAsync) next()
  }
}

export function flatMapComponents (
  matched: Array<RouteRecord>,
  fn: Function
): Array<?Function> {
  return flatten(matched.map(m => {
    return Object.keys(m.components).map(key => fn(
      m.components[key],
      m.instances[key],
      m, key
    ))
  }))
}

export function flatten (arr: Array<any>): Array<any> {
  return Array.prototype.concat.apply([], arr)
}

const hasSymbol =
  typeof Symbol === 'function' &&
  typeof Symbol.toStringTag === 'symbol'

function isESModule (obj) {
  return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')
}

// in Webpack 2, require.ensure now also returns a Promise
// so the resolve/reject functions may get called an extra time
// if the user uses an arrow function shorthand that happens to
// return that Promise.
function once (fn) {
  let called = false
  return function (...args) {
    if (called) return
    called = true
    return fn.apply(this, args)
  }
}
/* @flow */

import type VueRouter from '../index'
import { stringifyQuery } from './query'

const trailingSlashRE = /\/?$/

export function createRoute (
  record: ?RouteRecord,
  location: Location,
  redirectedFrom?: ?Location,
  router?: VueRouter
): Route {
  const stringifyQuery = router && router.options.stringifyQuery

  let query: any = location.query || {}
  try {
    query = clone(query)
  } catch (e) {}

  const route: Route = {
    name: location.name || (record && record.name),
    meta: (record && record.meta) || {},
    path: location.path || '/',
    hash: location.hash || '',
    query,
    params: location.params || {},
    fullPath: getFullPath(location, stringifyQuery),
    matched: record ? formatMatch(record) : []
  }
  if (redirectedFrom) {
    route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery)
  }
  return Object.freeze(route)
}

function clone (value) {
  if (Array.isArray(value)) {
    return value.map(clone)
  } else if (value && typeof value === 'object') {
    const res = {}
    for (const key in value) {
      res[key] = clone(value[key])
    }
    return res
  } else {
    return value
  }
}

// the starting route that represents the initial state
export const START = createRoute(null, {
  path: '/'
})

function formatMatch (record: ?RouteRecord): Array<RouteRecord> {
  const res = []
  while (record) {
    res.unshift(record)
    record = record.parent
  }
  return res
}

function getFullPath (
  { path, query = {}, hash = '' },
  _stringifyQuery
): string {
  const stringify = _stringifyQuery || stringifyQuery
  return (path || '/') + stringify(query) + hash
}

export function isSameRoute (a: Route, b: ?Route, onlyPath: ?boolean): boolean {
  if (b === START) {
    return a === b
  } else if (!b) {
    return false
  } else if (a.path && b.path) {
    return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||
      a.hash === b.hash &&
      isObjectEqual(a.query, b.query))
  } else if (a.name && b.name) {
    return (
      a.name === b.name &&
      (onlyPath || (
        a.hash === b.hash &&
      isObjectEqual(a.query, b.query) &&
      isObjectEqual(a.params, b.params))
      )
    )
  } else {
    return false
  }
}

function isObjectEqual (a = {}, b = {}): boolean {
  // handle null value #1566
  if (!a || !b) return a === b
  const aKeys = Object.keys(a).sort()
  const bKeys = Object.keys(b).sort()
  if (aKeys.length !== bKeys.length) {
    return false
  }
  return aKeys.every((key, i) => {
    const aVal = a[key]
    const bKey = bKeys[i]
    if (bKey !== key) return false
    const bVal = b[key]
    // query values can be null and undefined
    if (aVal == null || bVal == null) return aVal === bVal
    // check nested equality
    if (typeof aVal === 'object' && typeof bVal === 'object') {
      return isObjectEqual(aVal, bVal)
    }
    return String(aVal) === String(bVal)
  })
}

export function isIncludedRoute (current: Route, target: Route): boolean {
  return (
    current.path.replace(trailingSlashRE, '/').indexOf(
      target.path.replace(trailingSlashRE, '/')
    ) === 0 &&
    (!target.hash || current.hash === target.hash) &&
    queryIncludes(current.query, target.query)
  )
}

function queryIncludes (current: Dictionary<string>, target: Dictionary<string>): boolean {
  for (const key in target) {
    if (!(key in current)) {
      return false
    }
  }
  return true
}

export function handleRouteEntered (route: Route) {
  for (let i = 0; i < route.matched.length; i++) {
    const record = route.matched[i]
    for (const name in record.instances) {
      const instance = record.instances[name]
      const cbs = record.enteredCbs[name]
      if (!instance || !cbs) continue
      delete record.enteredCbs[name]
      for (let i = 0; i < cbs.length; i++) {
        if (!instance._isBeingDestroyed) cbs[i](instance)
      }
    }
  }
}
/* @flow */

import type Router from '../index'
import { assert } from './warn'
import { getStateKey, setStateKey } from './state-key'
import { extend } from './misc'

const positionStore = Object.create(null)

export function setupScroll () {
  // Prevent browser scroll behavior on History popstate
  if ('scrollRestoration' in window.history) {
    window.history.scrollRestoration = 'manual'
  }
  // Fix for #1585 for Firefox
  // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678
  // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with
  // window.location.protocol + '//' + window.location.host
  // location.host contains the port and location.hostname doesn't
  const protocolAndPath = window.location.protocol + '//' + window.location.host
  const absolutePath = window.location.href.replace(protocolAndPath, '')
  // preserve existing history state as it could be overriden by the user
  const stateCopy = extend({}, window.history.state)
  stateCopy.key = getStateKey()
  window.history.replaceState(stateCopy, '', absolutePath)
  window.addEventListener('popstate', handlePopState)
  return () => {
    window.removeEventListener('popstate', handlePopState)
  }
}

export function handleScroll (
  router: Router,
  to: Route,
  from: Route,
  isPop: boolean
) {
  if (!router.app) {
    return
  }

  const behavior = router.options.scrollBehavior
  if (!behavior) {
    return
  }

  if (process.env.NODE_ENV !== 'production') {
    assert(typeof behavior === 'function', `scrollBehavior must be a function`)
  }

  // wait until re-render finishes before scrolling
  router.app.$nextTick(() => {
    const position = getScrollPosition()
    const shouldScroll = behavior.call(
      router,
      to,
      from,
      isPop ? position : null
    )

    if (!shouldScroll) {
      return
    }

    if (typeof shouldScroll.then === 'function') {
      shouldScroll
        .then(shouldScroll => {
          scrollToPosition((shouldScroll: any), position)
        })
        .catch(err => {
          if (process.env.NODE_ENV !== 'production') {
            assert(false, err.toString())
          }
        })
    } else {
      scrollToPosition(shouldScroll, position)
    }
  })
}

export function saveScrollPosition () {
  const key = getStateKey()
  if (key) {
    positionStore[key] = {
      x: window.pageXOffset,
      y: window.pageYOffset
    }
  }
}

function handlePopState (e) {
  saveScrollPosition()
  if (e.state && e.state.key) {
    setStateKey(e.state.key)
  }
}

function getScrollPosition (): ?Object {
  const key = getStateKey()
  if (key) {
    return positionStore[key]
  }
}

function getElementPosition (el: Element, offset: Object): Object {
  const docEl: any = document.documentElement
  const docRect = docEl.getBoundingClientRect()
  const elRect = el.getBoundingClientRect()
  return {
    x: elRect.left - docRect.left - offset.x,
    y: elRect.top - docRect.top - offset.y
  }
}

function isValidPosition (obj: Object): boolean {
  return isNumber(obj.x) || isNumber(obj.y)
}

function normalizePosition (obj: Object): Object {
  return {
    x: isNumber(obj.x) ? obj.x : window.pageXOffset,
    y: isNumber(obj.y) ? obj.y : window.pageYOffset
  }
}

function normalizeOffset (obj: Object): Object {
  return {
    x: isNumber(obj.x) ? obj.x : 0,
    y: isNumber(obj.y) ? obj.y : 0
  }
}

function isNumber (v: any): boolean {
  return typeof v === 'number'
}

const hashStartsWithNumberRE = /^#\d/

function scrollToPosition (shouldScroll, position) {
  const isObject = typeof shouldScroll === 'object'
  if (isObject && typeof shouldScroll.selector === 'string') {
    // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]
    // but at the same time, it doesn't make much sense to select an element with an id and an extra selector
    const el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line
      ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line
      : document.querySelector(shouldScroll.selector)

    if (el) {
      let offset =
        shouldScroll.offset && typeof shouldScroll.offset === 'object'
          ? shouldScroll.offset
          : {}
      offset = normalizeOffset(offset)
      position = getElementPosition(el, offset)
    } else if (isValidPosition(shouldScroll)) {
      position = normalizePosition(shouldScroll)
    }
  } else if (isObject && isValidPosition(shouldScroll)) {
    position = normalizePosition(shouldScroll)
  }

  if (position) {
    // $flow-disable-line
    if ('scrollBehavior' in document.documentElement.style) {
      window.scrollTo({
        left: position.x,
        top: position.y,
        // $flow-disable-line
        behavior: shouldScroll.behavior
      })
    } else {
      window.scrollTo(position.x, position.y)
    }
  }
}
/* @flow */
import { inBrowser } from './dom'

// use User Timing api (if present) for more accurate key precision
const Time =
  inBrowser && window.performance && window.performance.now
    ? window.performance
    : Date

export function genStateKey (): string {
  return Time.now().toFixed(3)
}

let _key: string = genStateKey()

export function getStateKey () {
  return _key
}

export function setStateKey (key: string) {
  return (_key = key)
}
/* @flow */

export function assert (condition: any, message: string) {
  if (!condition) {
    throw new Error(`[vue-router] ${message}`)
  }
}

export function warn (condition: any, message: string) {
  if (process.env.NODE_ENV !== 'production' && !condition) {
    typeof console !== 'undefined' && console.warn(`[vue-router] ${message}`)
  }
}

{
  "name": {
    "type": "string",
    "description": "When a `<router-view>` has a `name` prop, it will render the component with the corresponding name in the matched route record's components option."
  },
  "to": {
    "description": "Denotes the target route of the link. When clicked, the value of the `to` prop will be internally passed to `router.push()`, so the value can be either a string or a location descriptor object."
  },
  "append": {
    "type": "boolean",
    "description": "Setting the append prop always appends the relative path to the current path. For example, assuming we are navigating from /a to a relative link b, without append we will end up at /b, but with append we will end up at /a/b."
  },
  "tag": {
    "description": "Specify which tag to render to, and it will still listen to click events for navigation. By default, an `a` tag is rendered."
  },
  "event": {
    "description": "Specify the event(s) that can trigger the link navigation. By default, the `click` event triggers a navigation."
  },
  "replace": {
    "type": "boolean",
    "description": "Call `router.replace()` instead of `router.push()` when the link is clicked, so the navigation replaces the current history entry."
  },
  "exact": {
    "description": "The default active class matching behavior is inclusive match. For example, `<router-link to=\"/a\">` will get this class applied as long as the current path starts with /a/ or is /a.\nOne consequence of this is that `<router-link to=\"/\">` will be active for every route! To force the link into \"exact match mode\", use the exact prop: `<router-link to=\"/\" exact>`"
  },
  "active-class": {
    "type": "string",
    "description": "Configure the active CSS class applied when the link is active. Note the default value can also be configured globally via the `linkActiveClass` router constructor option."
  },
  "exact-active-class": {
    "type": "string",
    "description": "Configure the active CSS class applied when the link is exactly active. Note the default value can also be configured globally via the `linkExactActiveClass` router constructor option."
  },
  "aria-current-value": {
    "options": ["page", "step", "location", "date", "time", "true", "false"],
    "description": "Configure the value of `aria-current` when the link is active with exact match. It must be one of the [allowed values for `aria-current`](https://www.w3.org/TR/wai-aria-1.2/#aria-current) in the ARIA spec. In most cases, the default of `page` should be the best fit."
  }
}
{
  "router-view": {
    "attributes": ["name"],
    "description": "Component that renders the matched component for the current location. Components rendered by `<router-view>` can also contain their own `<router-view>` to render nested routes."
  },
  "router-link": {
    "attributes": [
      "to",
      "replace",
      "append",
      "tag",
      "active-class",
      "exact",
      "event",
      "exact-active-class",
      "aria-current-value"
    ],
    "description": "Component that renders an `<a>` with the correct `href` attribute and click listeners to trigger a local navigation when clicked. Can also customize its rendering by providing the `custom` prop and using its `v-slot` API."
  }
}
module.exports = require('@vue/compiler-sfc')
export * from '@vue/compiler-sfc'
{
  "main": "index.js",
  "module": "index.mjs",
  "types": "index.d.ts"
}
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var compilerSfc = require('@vue/compiler-sfc');



Object.keys(compilerSfc).forEach(function (k) {
	if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
		enumerable: true,
		get: function () { return compilerSfc[k]; }
	});
});
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
'use strict';

const emptyObject = Object.freeze({});
const isArray = Array.isArray;
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef(v) {
    return v === undefined || v === null;
}
function isDef(v) {
    return v !== undefined && v !== null;
}
function isTrue(v) {
    return v === true;
}
function isFalse(v) {
    return v === false;
}
/**
 * Check if value is primitive.
 */
function isPrimitive(value) {
    return (typeof value === 'string' ||
        typeof value === 'number' ||
        // $flow-disable-line
        typeof value === 'symbol' ||
        typeof value === 'boolean');
}
function isFunction(value) {
    return typeof value === 'function';
}
/**
 * Quick object check - this is primarily used to tell
 * objects from primitive values when we know the value
 * is a JSON-compliant type.
 */
function isObject(obj) {
    return obj !== null && typeof obj === 'object';
}
/**
 * Get the raw type string of a value, e.g., [object Object].
 */
const _toString = Object.prototype.toString;
function toRawType(value) {
    return _toString.call(value).slice(8, -1);
}
/**
 * Strict object type check. Only returns true
 * for plain JavaScript objects.
 */
function isPlainObject(obj) {
    return _toString.call(obj) === '[object Object]';
}
function isRegExp(v) {
    return _toString.call(v) === '[object RegExp]';
}
/**
 * Check if val is a valid array index.
 */
function isValidArrayIndex(val) {
    const n = parseFloat(String(val));
    return n >= 0 && Math.floor(n) === n && isFinite(val);
}
function isPromise(val) {
    return (isDef(val) &&
        typeof val.then === 'function' &&
        typeof val.catch === 'function');
}
/**
 * Convert a value to a string that is actually rendered.
 */
function toString(val) {
    return val == null
        ? ''
        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
            ? JSON.stringify(val, null, 2)
            : String(val);
}
/**
 * Convert an input value to a number for persistence.
 * If the conversion fails, return original string.
 */
function toNumber(val) {
    const n = parseFloat(val);
    return isNaN(n) ? val : n;
}
/**
 * Make a map and return a function for checking if a key
 * is in that map.
 */
function makeMap(str, expectsLowerCase) {
    const map = Object.create(null);
    const list = str.split(',');
    for (let i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? val => map[val.toLowerCase()] : val => map[val];
}
/**
 * Check if a tag is a built-in tag.
 */
const isBuiltInTag = makeMap('slot,component', true);
/**
 * Check if an attribute is a reserved attribute.
 */
const isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
/**
 * Remove an item from an array.
 */
function remove$2(arr, item) {
    const len = arr.length;
    if (len) {
        // fast path for the only / last item
        if (item === arr[len - 1]) {
            arr.length = len - 1;
            return;
        }
        const index = arr.indexOf(item);
        if (index > -1) {
            return arr.splice(index, 1);
        }
    }
}
/**
 * Check whether an object has the property.
 */
const hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
    return hasOwnProperty.call(obj, key);
}
/**
 * Create a cached version of a pure function.
 */
function cached(fn) {
    const cache = Object.create(null);
    return function cachedFn(str) {
        const hit = cache[str];
        return hit || (cache[str] = fn(str));
    };
}
/**
 * Camelize a hyphen-delimited string.
 */
const camelizeRE = /-(\w)/g;
const camelize = cached((str) => {
    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
});
/**
 * Capitalize a string.
 */
const capitalize = cached((str) => {
    return str.charAt(0).toUpperCase() + str.slice(1);
});
/**
 * Hyphenate a camelCase string.
 */
const hyphenateRE = /\B([A-Z])/g;
const hyphenate = cached((str) => {
    return str.replace(hyphenateRE, '-$1').toLowerCase();
});
/**
 * Simple bind polyfill for environments that do not support it,
 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
 * since native bind is now performant enough in most browsers.
 * But removing it would mean breaking code that was able to run in
 * PhantomJS 1.x, so this must be kept for backward compatibility.
 */
/* istanbul ignore next */
function polyfillBind(fn, ctx) {
    function boundFn(a) {
        const l = arguments.length;
        return l
            ? l > 1
                ? fn.apply(ctx, arguments)
                : fn.call(ctx, a)
            : fn.call(ctx);
    }
    boundFn._length = fn.length;
    return boundFn;
}
function nativeBind(fn, ctx) {
    return fn.bind(ctx);
}
// @ts-expect-error bind cannot be `undefined`
const bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;
/**
 * Convert an Array-like object to a real Array.
 */
function toArray(list, start) {
    start = start || 0;
    let i = list.length - start;
    const ret = new Array(i);
    while (i--) {
        ret[i] = list[i + start];
    }
    return ret;
}
/**
 * Mix properties into target object.
 */
function extend(to, _from) {
    for (const key in _from) {
        to[key] = _from[key];
    }
    return to;
}
/**
 * Merge an Array of Objects into a single Object.
 */
function toObject(arr) {
    const res = {};
    for (let i = 0; i < arr.length; i++) {
        if (arr[i]) {
            extend(res, arr[i]);
        }
    }
    return res;
}
/* eslint-disable no-unused-vars */
/**
 * Perform no operation.
 * Stubbing args to make Flow happy without leaving useless transpiled code
 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
 */
function noop(a, b, c) { }
/**
 * Always return false.
 */
const no = (a, b, c) => false;
/* eslint-enable no-unused-vars */
/**
 * Return the same value.
 */
const identity = (_) => _;
/**
 * Generate a string containing static keys from compiler modules.
 */
function genStaticKeys$1(modules) {
    return modules
        .reduce((keys, m) => {
        return keys.concat(m.staticKeys || []);
    }, [])
        .join(',');
}
/**
 * Check if two values are loosely equal - that is,
 * if they are plain objects, do they have the same shape?
 */
function looseEqual(a, b) {
    if (a === b)
        return true;
    const isObjectA = isObject(a);
    const isObjectB = isObject(b);
    if (isObjectA && isObjectB) {
        try {
            const isArrayA = Array.isArray(a);
            const isArrayB = Array.isArray(b);
            if (isArrayA && isArrayB) {
                return (a.length === b.length &&
                    a.every((e, i) => {
                        return looseEqual(e, b[i]);
                    }));
            }
            else if (a instanceof Date && b instanceof Date) {
                return a.getTime() === b.getTime();
            }
            else if (!isArrayA && !isArrayB) {
                const keysA = Object.keys(a);
                const keysB = Object.keys(b);
                return (keysA.length === keysB.length &&
                    keysA.every(key => {
                        return looseEqual(a[key], b[key]);
                    }));
            }
            else {
                /* istanbul ignore next */
                return false;
            }
        }
        catch (e) {
            /* istanbul ignore next */
            return false;
        }
    }
    else if (!isObjectA && !isObjectB) {
        return String(a) === String(b);
    }
    else {
        return false;
    }
}
/**
 * Return the first index at which a loosely equal value can be
 * found in the array (if value is a plain object, the array must
 * contain an object of the same shape), or -1 if it is not present.
 */
function looseIndexOf(arr, val) {
    for (let i = 0; i < arr.length; i++) {
        if (looseEqual(arr[i], val))
            return i;
    }
    return -1;
}
/**
 * Ensure a function is called only once.
 */
function once(fn) {
    let called = false;
    return function () {
        if (!called) {
            called = true;
            fn.apply(this, arguments);
        }
    };
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
function hasChanged(x, y) {
    if (x === y) {
        return x === 0 && 1 / x !== 1 / y;
    }
    else {
        return x === x || y === y;
    }
}

const SSR_ATTR = 'data-server-rendered';
const ASSET_TYPES = ['component', 'directive', 'filter'];
const LIFECYCLE_HOOKS = [
    'beforeCreate',
    'created',
    'beforeMount',
    'mounted',
    'beforeUpdate',
    'updated',
    'beforeDestroy',
    'destroyed',
    'activated',
    'deactivated',
    'errorCaptured',
    'serverPrefetch',
    'renderTracked',
    'renderTriggered'
];

var config = {
    /**
     * Option merge strategies (used in core/util/options)
     */
    // $flow-disable-line
    optionMergeStrategies: Object.create(null),
    /**
     * Whether to suppress warnings.
     */
    silent: false,
    /**
     * Show production mode tip message on boot?
     */
    productionTip: true,
    /**
     * Whether to enable devtools
     */
    devtools: true,
    /**
     * Whether to record perf
     */
    performance: false,
    /**
     * Error handler for watcher errors
     */
    errorHandler: null,
    /**
     * Warn handler for watcher warns
     */
    warnHandler: null,
    /**
     * Ignore certain custom elements
     */
    ignoredElements: [],
    /**
     * Custom user key aliases for v-on
     */
    // $flow-disable-line
    keyCodes: Object.create(null),
    /**
     * Check if a tag is reserved so that it cannot be registered as a
     * component. This is platform-dependent and may be overwritten.
     */
    isReservedTag: no,
    /**
     * Check if an attribute is reserved so that it cannot be used as a component
     * prop. This is platform-dependent and may be overwritten.
     */
    isReservedAttr: no,
    /**
     * Check if a tag is an unknown element.
     * Platform-dependent.
     */
    isUnknownElement: no,
    /**
     * Get the namespace of an element
     */
    getTagNamespace: noop,
    /**
     * Parse the real tag name for the specific platform.
     */
    parsePlatformTagName: identity,
    /**
     * Check if an attribute must be bound using property, e.g. value
     * Platform-dependent.
     */
    mustUseProp: no,
    /**
     * Perform updates asynchronously. Intended to be used by Vue Test Utils
     * This will significantly reduce performance if set to false.
     */
    async: true,
    /**
     * Exposed for legacy reasons
     */
    _lifecycleHooks: LIFECYCLE_HOOKS
};

/**
 * unicode letters used for parsing html tags, component names and property paths.
 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
 */
const unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
/**
 * Check if a string starts with $ or _
 */
function isReserved(str) {
    const c = (str + '').charCodeAt(0);
    return c === 0x24 || c === 0x5f;
}
/**
 * Define a property.
 */
function def(obj, key, val, enumerable) {
    Object.defineProperty(obj, key, {
        value: val,
        enumerable: !!enumerable,
        writable: true,
        configurable: true
    });
}
/**
 * Parse simple path.
 */
const bailRE = new RegExp(`[^${unicodeRegExp.source}.$_\\d]`);
function parsePath(path) {
    if (bailRE.test(path)) {
        return;
    }
    const segments = path.split('.');
    return function (obj) {
        for (let i = 0; i < segments.length; i++) {
            if (!obj)
                return;
            obj = obj[segments[i]];
        }
        return obj;
    };
}

// can we use __proto__?
const hasProto = '__proto__' in {};
// Browser environment sniffing
const inBrowser = typeof window !== 'undefined';
const UA = inBrowser && window.navigator.userAgent.toLowerCase();
const isIE = UA && /msie|trident/.test(UA);
const isIE9 = UA && UA.indexOf('msie 9.0') > 0;
const isEdge = UA && UA.indexOf('edge/') > 0;
UA && UA.indexOf('android') > 0;
const isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
UA && /chrome\/\d+/.test(UA) && !isEdge;
UA && /phantomjs/.test(UA);
const isFF = UA && UA.match(/firefox\/(\d+)/);
// Firefox has a "watch" function on Object.prototype...
// @ts-expect-error firebox support
const nativeWatch = {}.watch;
let supportsPassive = false;
if (inBrowser) {
    try {
        const opts = {};
        Object.defineProperty(opts, 'passive', {
            get() {
                /* istanbul ignore next */
                supportsPassive = true;
            }
        }); // https://github.com/facebook/flow/issues/285
        window.addEventListener('test-passive', null, opts);
    }
    catch (e) { }
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
let _isServer;
const isServerRendering = () => {
    if (_isServer === undefined) {
        /* istanbul ignore if */
        if (!inBrowser && typeof global !== 'undefined') {
            // detect presence of vue-server-renderer and avoid
            // Webpack shimming the process
            _isServer =
                global['process'] && global['process'].env.VUE_ENV === 'server';
        }
        else {
            _isServer = false;
        }
    }
    return _isServer;
};
// detect devtools
const devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
/* istanbul ignore next */
function isNative(Ctor) {
    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
const hasSymbol = typeof Symbol !== 'undefined' &&
    isNative(Symbol) &&
    typeof Reflect !== 'undefined' &&
    isNative(Reflect.ownKeys);
let _Set; // $flow-disable-line
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
    // use native Set when available.
    _Set = Set;
}
else {
    // a non-standard Set polyfill that only works with primitive keys.
    _Set = class Set {
        constructor() {
            this.set = Object.create(null);
        }
        has(key) {
            return this.set[key] === true;
        }
        add(key) {
            this.set[key] = true;
        }
        clear() {
            this.set = Object.create(null);
        }
    };
}

let currentInstance = null;
/**
 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
 * relies on it). Do not use this internally, just use `currentInstance`.
 *
 * @internal this function needs manual type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function getCurrentInstance() {
    return currentInstance && { proxy: currentInstance };
}
/**
 * @internal
 */
function setCurrentInstance(vm = null) {
    if (!vm)
        currentInstance && currentInstance._scope.off();
    currentInstance = vm;
    vm && vm._scope.on();
}

/**
 * @internal
 */
class VNode {
    constructor(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
        this.tag = tag;
        this.data = data;
        this.children = children;
        this.text = text;
        this.elm = elm;
        this.ns = undefined;
        this.context = context;
        this.fnContext = undefined;
        this.fnOptions = undefined;
        this.fnScopeId = undefined;
        this.key = data && data.key;
        this.componentOptions = componentOptions;
        this.componentInstance = undefined;
        this.parent = undefined;
        this.raw = false;
        this.isStatic = false;
        this.isRootInsert = true;
        this.isComment = false;
        this.isCloned = false;
        this.isOnce = false;
        this.asyncFactory = asyncFactory;
        this.asyncMeta = undefined;
        this.isAsyncPlaceholder = false;
    }
    // DEPRECATED: alias for componentInstance for backwards compat.
    /* istanbul ignore next */
    get child() {
        return this.componentInstance;
    }
}
const createEmptyVNode = (text = '') => {
    const node = new VNode();
    node.text = text;
    node.isComment = true;
    return node;
};
function createTextVNode(val) {
    return new VNode(undefined, undefined, undefined, String(val));
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode(vnode) {
    const cloned = new VNode(vnode.tag, vnode.data, 
    // #7975
    // clone children array to avoid mutating original in case of cloning
    // a child.
    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
    cloned.ns = vnode.ns;
    cloned.isStatic = vnode.isStatic;
    cloned.key = vnode.key;
    cloned.isComment = vnode.isComment;
    cloned.fnContext = vnode.fnContext;
    cloned.fnOptions = vnode.fnOptions;
    cloned.fnScopeId = vnode.fnScopeId;
    cloned.asyncMeta = vnode.asyncMeta;
    cloned.isCloned = true;
    return cloned;
}

/* not type checking this file because flow doesn't play well with Proxy */
let initProxy;
{
    const allowedGlobals = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
        'require' // for Webpack/Browserify
    );
    const warnNonPresent = (target, key) => {
        warn$2(`Property or method "${key}" is not defined on the instance but ` +
            'referenced during render. Make sure that this property is reactive, ' +
            'either in the data option, or for class-based components, by ' +
            'initializing the property. ' +
            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
    };
    const warnReservedPrefix = (target, key) => {
        warn$2(`Property "${key}" must be accessed with "$data.${key}" because ` +
            'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
            'prevent conflicts with Vue internals. ' +
            'See: https://v2.vuejs.org/v2/api/#data', target);
    };
    const hasProxy = typeof Proxy !== 'undefined' && isNative(Proxy);
    if (hasProxy) {
        const isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
        config.keyCodes = new Proxy(config.keyCodes, {
            set(target, key, value) {
                if (isBuiltInModifier(key)) {
                    warn$2(`Avoid overwriting built-in modifier in config.keyCodes: .${key}`);
                    return false;
                }
                else {
                    target[key] = value;
                    return true;
                }
            }
        });
    }
    const hasHandler = {
        has(target, key) {
            const has = key in target;
            const isAllowed = allowedGlobals(key) ||
                (typeof key === 'string' &&
                    key.charAt(0) === '_' &&
                    !(key in target.$data));
            if (!has && !isAllowed) {
                if (key in target.$data)
                    warnReservedPrefix(target, key);
                else
                    warnNonPresent(target, key);
            }
            return has || !isAllowed;
        }
    };
    const getHandler = {
        get(target, key) {
            if (typeof key === 'string' && !(key in target)) {
                if (key in target.$data)
                    warnReservedPrefix(target, key);
                else
                    warnNonPresent(target, key);
            }
            return target[key];
        }
    };
    initProxy = function initProxy(vm) {
        if (hasProxy) {
            // determine which proxy handler to use
            const options = vm.$options;
            const handlers = options.render && options.render._withStripped ? getHandler : hasHandler;
            vm._renderProxy = new Proxy(vm, handlers);
        }
        else {
            vm._renderProxy = vm;
        }
    };
}

let uid$2 = 0;
const pendingCleanupDeps = [];
const cleanupDeps = () => {
    for (let i = 0; i < pendingCleanupDeps.length; i++) {
        const dep = pendingCleanupDeps[i];
        dep.subs = dep.subs.filter(s => s);
        dep._pending = false;
    }
    pendingCleanupDeps.length = 0;
};
/**
 * A dep is an observable that can have multiple
 * directives subscribing to it.
 * @internal
 */
class Dep {
    constructor() {
        // pending subs cleanup
        this._pending = false;
        this.id = uid$2++;
        this.subs = [];
    }
    addSub(sub) {
        this.subs.push(sub);
    }
    removeSub(sub) {
        // #12696 deps with massive amount of subscribers are extremely slow to
        // clean up in Chromium
        // to workaround this, we unset the sub for now, and clear them on
        // next scheduler flush.
        this.subs[this.subs.indexOf(sub)] = null;
        if (!this._pending) {
            this._pending = true;
            pendingCleanupDeps.push(this);
        }
    }
    depend(info) {
        if (Dep.target) {
            Dep.target.addDep(this);
            if (info && Dep.target.onTrack) {
                Dep.target.onTrack(Object.assign({ effect: Dep.target }, info));
            }
        }
    }
    notify(info) {
        // stabilize the subscriber list first
        const subs = this.subs.filter(s => s);
        if (!config.async) {
            // subs aren't sorted in scheduler if not running async
            // we need to sort them now to make sure they fire in correct
            // order
            subs.sort((a, b) => a.id - b.id);
        }
        for (let i = 0, l = subs.length; i < l; i++) {
            const sub = subs[i];
            if (info) {
                sub.onTrigger &&
                    sub.onTrigger(Object.assign({ effect: subs[i] }, info));
            }
            sub.update();
        }
    }
}
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null;
const targetStack = [];
function pushTarget(target) {
    targetStack.push(target);
    Dep.target = target;
}
function popTarget() {
    targetStack.pop();
    Dep.target = targetStack[targetStack.length - 1];
}

/*
 * not type checking this file because flow doesn't play well with
 * dynamically accessing methods on Array prototype
 */
const arrayProto = Array.prototype;
const arrayMethods = Object.create(arrayProto);
const methodsToPatch = [
    'push',
    'pop',
    'shift',
    'unshift',
    'splice',
    'sort',
    'reverse'
];
/**
 * Intercept mutating methods and emit events
 */
methodsToPatch.forEach(function (method) {
    // cache original method
    const original = arrayProto[method];
    def(arrayMethods, method, function mutator(...args) {
        const result = original.apply(this, args);
        const ob = this.__ob__;
        let inserted;
        switch (method) {
            case 'push':
            case 'unshift':
                inserted = args;
                break;
            case 'splice':
                inserted = args.slice(2);
                break;
        }
        if (inserted)
            ob.observeArray(inserted);
        // notify change
        {
            ob.dep.notify({
                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
                target: this,
                key: method
            });
        }
        return result;
    });
});

const arrayKeys = Object.getOwnPropertyNames(arrayMethods);
const NO_INIITIAL_VALUE = {};
/**
 * In some cases we may want to disable observation inside a component's
 * update computation.
 */
let shouldObserve = true;
function toggleObserving(value) {
    shouldObserve = value;
}
// ssr mock dep
const mockDep = {
    notify: noop,
    depend: noop,
    addSub: noop,
    removeSub: noop
};
/**
 * Observer class that is attached to each observed
 * object. Once attached, the observer converts the target
 * object's property keys into getter/setters that
 * collect dependencies and dispatch updates.
 */
class Observer {
    constructor(value, shallow = false, mock = false) {
        this.value = value;
        this.shallow = shallow;
        this.mock = mock;
        // this.value = value
        this.dep = mock ? mockDep : new Dep();
        this.vmCount = 0;
        def(value, '__ob__', this);
        if (isArray(value)) {
            if (!mock) {
                if (hasProto) {
                    value.__proto__ = arrayMethods;
                    /* eslint-enable no-proto */
                }
                else {
                    for (let i = 0, l = arrayKeys.length; i < l; i++) {
                        const key = arrayKeys[i];
                        def(value, key, arrayMethods[key]);
                    }
                }
            }
            if (!shallow) {
                this.observeArray(value);
            }
        }
        else {
            /**
             * Walk through all properties and convert them into
             * getter/setters. This method should only be called when
             * value type is Object.
             */
            const keys = Object.keys(value);
            for (let i = 0; i < keys.length; i++) {
                const key = keys[i];
                defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
            }
        }
    }
    /**
     * Observe a list of Array items.
     */
    observeArray(value) {
        for (let i = 0, l = value.length; i < l; i++) {
            observe(value[i], false, this.mock);
        }
    }
}
// helpers
/**
 * Attempt to create an observer instance for a value,
 * returns the new observer if successfully observed,
 * or the existing observer if the value already has one.
 */
function observe(value, shallow, ssrMockReactivity) {
    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
        return value.__ob__;
    }
    if (shouldObserve &&
        (ssrMockReactivity || !isServerRendering()) &&
        (isArray(value) || isPlainObject(value)) &&
        Object.isExtensible(value) &&
        !value.__v_skip /* ReactiveFlags.SKIP */ &&
        !isRef(value) &&
        !(value instanceof VNode)) {
        return new Observer(value, shallow, ssrMockReactivity);
    }
}
/**
 * Define a reactive property on an Object.
 */
function defineReactive(obj, key, val, customSetter, shallow, mock) {
    const dep = new Dep();
    const property = Object.getOwnPropertyDescriptor(obj, key);
    if (property && property.configurable === false) {
        return;
    }
    // cater for pre-defined getter/setters
    const getter = property && property.get;
    const setter = property && property.set;
    if ((!getter || setter) &&
        (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
        val = obj[key];
    }
    let childOb = !shallow && observe(val, false, mock);
    Object.defineProperty(obj, key, {
        enumerable: true,
        configurable: true,
        get: function reactiveGetter() {
            const value = getter ? getter.call(obj) : val;
            if (Dep.target) {
                {
                    dep.depend({
                        target: obj,
                        type: "get" /* TrackOpTypes.GET */,
                        key
                    });
                }
                if (childOb) {
                    childOb.dep.depend();
                    if (isArray(value)) {
                        dependArray(value);
                    }
                }
            }
            return isRef(value) && !shallow ? value.value : value;
        },
        set: function reactiveSetter(newVal) {
            const value = getter ? getter.call(obj) : val;
            if (!hasChanged(value, newVal)) {
                return;
            }
            if (customSetter) {
                customSetter();
            }
            if (setter) {
                setter.call(obj, newVal);
            }
            else if (getter) {
                // #7981: for accessor properties without setter
                return;
            }
            else if (!shallow && isRef(value) && !isRef(newVal)) {
                value.value = newVal;
                return;
            }
            else {
                val = newVal;
            }
            childOb = !shallow && observe(newVal, false, mock);
            {
                dep.notify({
                    type: "set" /* TriggerOpTypes.SET */,
                    target: obj,
                    key,
                    newValue: newVal,
                    oldValue: value
                });
            }
        }
    });
    return dep;
}
function set(target, key, val) {
    if ((isUndef(target) || isPrimitive(target))) {
        warn$2(`Cannot set reactive property on undefined, null, or primitive value: ${target}`);
    }
    if (isReadonly(target)) {
        warn$2(`Set operation on key "${key}" failed: target is readonly.`);
        return;
    }
    const ob = target.__ob__;
    if (isArray(target) && isValidArrayIndex(key)) {
        target.length = Math.max(target.length, key);
        target.splice(key, 1, val);
        // when mocking for SSR, array methods are not hijacked
        if (ob && !ob.shallow && ob.mock) {
            observe(val, false, true);
        }
        return val;
    }
    if (key in target && !(key in Object.prototype)) {
        target[key] = val;
        return val;
    }
    if (target._isVue || (ob && ob.vmCount)) {
        warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +
                'at runtime - declare it upfront in the data option.');
        return val;
    }
    if (!ob) {
        target[key] = val;
        return val;
    }
    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
    {
        ob.dep.notify({
            type: "add" /* TriggerOpTypes.ADD */,
            target: target,
            key,
            newValue: val,
            oldValue: undefined
        });
    }
    return val;
}
function del(target, key) {
    if ((isUndef(target) || isPrimitive(target))) {
        warn$2(`Cannot delete reactive property on undefined, null, or primitive value: ${target}`);
    }
    if (isArray(target) && isValidArrayIndex(key)) {
        target.splice(key, 1);
        return;
    }
    const ob = target.__ob__;
    if (target._isVue || (ob && ob.vmCount)) {
        warn$2('Avoid deleting properties on a Vue instance or its root $data ' +
                '- just set it to null.');
        return;
    }
    if (isReadonly(target)) {
        warn$2(`Delete operation on key "${key}" failed: target is readonly.`);
        return;
    }
    if (!hasOwn(target, key)) {
        return;
    }
    delete target[key];
    if (!ob) {
        return;
    }
    {
        ob.dep.notify({
            type: "delete" /* TriggerOpTypes.DELETE */,
            target: target,
            key
        });
    }
}
/**
 * Collect dependencies on array elements when the array is touched, since
 * we cannot intercept array element access like property getters.
 */
function dependArray(value) {
    for (let e, i = 0, l = value.length; i < l; i++) {
        e = value[i];
        if (e && e.__ob__) {
            e.__ob__.dep.depend();
        }
        if (isArray(e)) {
            dependArray(e);
        }
    }
}

function reactive(target) {
    makeReactive(target, false);
    return target;
}
/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
function shallowReactive(target) {
    makeReactive(target, true);
    def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    return target;
}
function makeReactive(target, shallow) {
    // if trying to observe a readonly proxy, return the readonly version.
    if (!isReadonly(target)) {
        {
            if (isArray(target)) {
                warn$2(`Avoid using Array as root value for ${shallow ? `shallowReactive()` : `reactive()`} as it cannot be tracked in watch() or watchEffect(). Use ${shallow ? `shallowRef()` : `ref()`} instead. This is a Vue-2-only limitation.`);
            }
            const existingOb = target && target.__ob__;
            if (existingOb && existingOb.shallow !== shallow) {
                warn$2(`Target is already a ${existingOb.shallow ? `` : `non-`}shallow reactive object, and cannot be converted to ${shallow ? `` : `non-`}shallow.`);
            }
        }
        const ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
        if (!ob) {
            if (target == null || isPrimitive(target)) {
                warn$2(`value cannot be made reactive: ${String(target)}`);
            }
            if (isCollectionType(target)) {
                warn$2(`Vue 2 does not support reactive collection types such as Map or Set.`);
            }
        }
    }
}
function isReactive(value) {
    if (isReadonly(value)) {
        return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
    }
    return !!(value && value.__ob__);
}
function isShallow(value) {
    return !!(value && value.__v_isShallow);
}
function isReadonly(value) {
    return !!(value && value.__v_isReadonly);
}
function isProxy(value) {
    return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
    const raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
    return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
    // non-extensible objects won't be observed anyway
    if (Object.isExtensible(value)) {
        def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
    }
    return value;
}
/**
 * @internal
 */
function isCollectionType(value) {
    const type = toRawType(value);
    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
}

/**
 * @internal
 */
const RefFlag = `__v_isRef`;
function isRef(r) {
    return !!(r && r.__v_isRef === true);
}
function ref$1(value) {
    return createRef(value, false);
}
function shallowRef(value) {
    return createRef(value, true);
}
function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    const ref = {};
    def(ref, RefFlag, true);
    def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
    return ref;
}
function triggerRef(ref) {
    if (!ref.dep) {
        warn$2(`received object is not a triggerable ref.`);
    }
    {
        ref.dep &&
            ref.dep.notify({
                type: "set" /* TriggerOpTypes.SET */,
                target: ref,
                key: 'value'
            });
    }
}
function unref(ref) {
    return isRef(ref) ? ref.value : ref;
}
function proxyRefs(objectWithRefs) {
    if (isReactive(objectWithRefs)) {
        return objectWithRefs;
    }
    const proxy = {};
    const keys = Object.keys(objectWithRefs);
    for (let i = 0; i < keys.length; i++) {
        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
    }
    return proxy;
}
function proxyWithRefUnwrap(target, source, key) {
    Object.defineProperty(target, key, {
        enumerable: true,
        configurable: true,
        get: () => {
            const val = source[key];
            if (isRef(val)) {
                return val.value;
            }
            else {
                const ob = val && val.__ob__;
                if (ob)
                    ob.dep.depend();
                return val;
            }
        },
        set: value => {
            const oldValue = source[key];
            if (isRef(oldValue) && !isRef(value)) {
                oldValue.value = value;
            }
            else {
                source[key] = value;
            }
        }
    });
}
function customRef(factory) {
    const dep = new Dep();
    const { get, set } = factory(() => {
        {
            dep.depend({
                target: ref,
                type: "get" /* TrackOpTypes.GET */,
                key: 'value'
            });
        }
    }, () => {
        {
            dep.notify({
                target: ref,
                type: "set" /* TriggerOpTypes.SET */,
                key: 'value'
            });
        }
    });
    const ref = {
        get value() {
            return get();
        },
        set value(newVal) {
            set(newVal);
        }
    };
    def(ref, RefFlag, true);
    return ref;
}
function toRefs(object) {
    if (!isReactive(object)) {
        warn$2(`toRefs() expects a reactive object but received a plain one.`);
    }
    const ret = isArray(object) ? new Array(object.length) : {};
    for (const key in object) {
        ret[key] = toRef(object, key);
    }
    return ret;
}
function toRef(object, key, defaultValue) {
    const val = object[key];
    if (isRef(val)) {
        return val;
    }
    const ref = {
        get value() {
            const val = object[key];
            return val === undefined ? defaultValue : val;
        },
        set value(newVal) {
            object[key] = newVal;
        }
    };
    def(ref, RefFlag, true);
    return ref;
}

const rawToReadonlyFlag = `__v_rawToReadonly`;
const rawToShallowReadonlyFlag = `__v_rawToShallowReadonly`;
function readonly(target) {
    return createReadonly(target, false);
}
function createReadonly(target, shallow) {
    if (!isPlainObject(target)) {
        {
            if (isArray(target)) {
                warn$2(`Vue 2 does not support readonly arrays.`);
            }
            else if (isCollectionType(target)) {
                warn$2(`Vue 2 does not support readonly collection types such as Map or Set.`);
            }
            else {
                warn$2(`value cannot be made readonly: ${typeof target}`);
            }
        }
        return target;
    }
    if (!Object.isExtensible(target)) {
        warn$2(`Vue 2 does not support creating readonly proxy for non-extensible object.`);
    }
    // already a readonly object
    if (isReadonly(target)) {
        return target;
    }
    // already has a readonly proxy
    const existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
    const existingProxy = target[existingFlag];
    if (existingProxy) {
        return existingProxy;
    }
    const proxy = Object.create(Object.getPrototypeOf(target));
    def(target, existingFlag, proxy);
    def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
    def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
    if (isRef(target)) {
        def(proxy, RefFlag, true);
    }
    if (shallow || isShallow(target)) {
        def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    }
    const keys = Object.keys(target);
    for (let i = 0; i < keys.length; i++) {
        defineReadonlyProperty(proxy, target, keys[i], shallow);
    }
    return proxy;
}
function defineReadonlyProperty(proxy, target, key, shallow) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get() {
            const val = target[key];
            return shallow || !isPlainObject(val) ? val : readonly(val);
        },
        set() {
            warn$2(`Set operation on key "${key}" failed: target is readonly.`);
        }
    });
}
/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
function shallowReadonly(target) {
    return createReadonly(target, true);
}

function computed(getterOrOptions, debugOptions) {
    let getter;
    let setter;
    const onlyGetter = isFunction(getterOrOptions);
    if (onlyGetter) {
        getter = getterOrOptions;
        setter = () => {
                warn$2('Write operation failed: computed value is readonly');
            }
            ;
    }
    else {
        getter = getterOrOptions.get;
        setter = getterOrOptions.set;
    }
    const watcher = isServerRendering()
        ? null
        : new Watcher(currentInstance, getter, noop, { lazy: true });
    if (watcher && debugOptions) {
        watcher.onTrack = debugOptions.onTrack;
        watcher.onTrigger = debugOptions.onTrigger;
    }
    const ref = {
        // some libs rely on the presence effect for checking computed refs
        // from normal refs, but the implementation doesn't matter
        effect: watcher,
        get value() {
            if (watcher) {
                if (watcher.dirty) {
                    watcher.evaluate();
                }
                if (Dep.target) {
                    if (Dep.target.onTrack) {
                        Dep.target.onTrack({
                            effect: Dep.target,
                            target: ref,
                            type: "get" /* TrackOpTypes.GET */,
                            key: 'value'
                        });
                    }
                    watcher.depend();
                }
                return watcher.value;
            }
            else {
                return getter();
            }
        },
        set value(newVal) {
            setter(newVal);
        }
    };
    def(ref, RefFlag, true);
    def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
    return ref;
}

let mark;
let measure;
{
    const perf = inBrowser && window.performance;
    /* istanbul ignore if */
    if (perf &&
        // @ts-ignore
        perf.mark &&
        // @ts-ignore
        perf.measure &&
        // @ts-ignore
        perf.clearMarks &&
        // @ts-ignore
        perf.clearMeasures) {
        mark = tag => perf.mark(tag);
        measure = (name, startTag, endTag) => {
            perf.measure(name, startTag, endTag);
            perf.clearMarks(startTag);
            perf.clearMarks(endTag);
            // perf.clearMeasures(name)
        };
    }
}

const normalizeEvent = cached((name) => {
    const passive = name.charAt(0) === '&';
    name = passive ? name.slice(1) : name;
    const once = name.charAt(0) === '~'; // Prefixed last, checked first
    name = once ? name.slice(1) : name;
    const capture = name.charAt(0) === '!';
    name = capture ? name.slice(1) : name;
    return {
        name,
        once,
        capture,
        passive
    };
});
function createFnInvoker(fns, vm) {
    function invoker() {
        const fns = invoker.fns;
        if (isArray(fns)) {
            const cloned = fns.slice();
            for (let i = 0; i < cloned.length; i++) {
                invokeWithErrorHandling(cloned[i], null, arguments, vm, `v-on handler`);
            }
        }
        else {
            // return handler return value for single handlers
            return invokeWithErrorHandling(fns, null, arguments, vm, `v-on handler`);
        }
    }
    invoker.fns = fns;
    return invoker;
}
function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
    let name, cur, old, event;
    for (name in on) {
        cur = on[name];
        old = oldOn[name];
        event = normalizeEvent(name);
        if (isUndef(cur)) {
            warn$2(`Invalid handler for event "${event.name}": got ` + String(cur), vm);
        }
        else if (isUndef(old)) {
            if (isUndef(cur.fns)) {
                cur = on[name] = createFnInvoker(cur, vm);
            }
            if (isTrue(event.once)) {
                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
            }
            add(event.name, cur, event.capture, event.passive, event.params);
        }
        else if (cur !== old) {
            old.fns = cur;
            on[name] = old;
        }
    }
    for (name in oldOn) {
        if (isUndef(on[name])) {
            event = normalizeEvent(name);
            remove(event.name, oldOn[name], event.capture);
        }
    }
}

function mergeVNodeHook(def, hookKey, hook) {
    if (def instanceof VNode) {
        def = def.data.hook || (def.data.hook = {});
    }
    let invoker;
    const oldHook = def[hookKey];
    function wrappedHook() {
        hook.apply(this, arguments);
        // important: remove merged hook to ensure it's called only once
        // and prevent memory leak
        remove$2(invoker.fns, wrappedHook);
    }
    if (isUndef(oldHook)) {
        // no existing hook
        invoker = createFnInvoker([wrappedHook]);
    }
    else {
        /* istanbul ignore if */
        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
            // already a merged invoker
            invoker = oldHook;
            invoker.fns.push(wrappedHook);
        }
        else {
            // existing plain hook
            invoker = createFnInvoker([oldHook, wrappedHook]);
        }
    }
    invoker.merged = true;
    def[hookKey] = invoker;
}

function extractPropsFromVNodeData(data, Ctor, tag) {
    // we are only extracting raw values here.
    // validation and default values are handled in the child
    // component itself.
    const propOptions = Ctor.options.props;
    if (isUndef(propOptions)) {
        return;
    }
    const res = {};
    const { attrs, props } = data;
    if (isDef(attrs) || isDef(props)) {
        for (const key in propOptions) {
            const altKey = hyphenate(key);
            {
                const keyInLowerCase = key.toLowerCase();
                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
                    tip(`Prop "${keyInLowerCase}" is passed to component ` +
                        `${formatComponentName(
                        // @ts-expect-error tag is string
                        tag || Ctor)}, but the declared prop name is` +
                        ` "${key}". ` +
                        `Note that HTML attributes are case-insensitive and camelCased ` +
                        `props need to use their kebab-case equivalents when using in-DOM ` +
                        `templates. You should probably use "${altKey}" instead of "${key}".`);
                }
            }
            checkProp(res, props, key, altKey, true) ||
                checkProp(res, attrs, key, altKey, false);
        }
    }
    return res;
}
function checkProp(res, hash, key, altKey, preserve) {
    if (isDef(hash)) {
        if (hasOwn(hash, key)) {
            res[key] = hash[key];
            if (!preserve) {
                delete hash[key];
            }
            return true;
        }
        else if (hasOwn(hash, altKey)) {
            res[key] = hash[altKey];
            if (!preserve) {
                delete hash[altKey];
            }
            return true;
        }
    }
    return false;
}

// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren(children) {
    for (let i = 0; i < children.length; i++) {
        if (isArray(children[i])) {
            return Array.prototype.concat.apply([], children);
        }
    }
    return children;
}
// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren(children) {
    return isPrimitive(children)
        ? [createTextVNode(children)]
        : isArray(children)
            ? normalizeArrayChildren(children)
            : undefined;
}
function isTextNode(node) {
    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
}
function normalizeArrayChildren(children, nestedIndex) {
    const res = [];
    let i, c, lastIndex, last;
    for (i = 0; i < children.length; i++) {
        c = children[i];
        if (isUndef(c) || typeof c === 'boolean')
            continue;
        lastIndex = res.length - 1;
        last = res[lastIndex];
        //  nested
        if (isArray(c)) {
            if (c.length > 0) {
                c = normalizeArrayChildren(c, `${nestedIndex || ''}_${i}`);
                // merge adjacent text nodes
                if (isTextNode(c[0]) && isTextNode(last)) {
                    res[lastIndex] = createTextVNode(last.text + c[0].text);
                    c.shift();
                }
                res.push.apply(res, c);
            }
        }
        else if (isPrimitive(c)) {
            if (isTextNode(last)) {
                // merge adjacent text nodes
                // this is necessary for SSR hydration because text nodes are
                // essentially merged when rendered to HTML strings
                res[lastIndex] = createTextVNode(last.text + c);
            }
            else if (c !== '') {
                // convert primitive to vnode
                res.push(createTextVNode(c));
            }
        }
        else {
            if (isTextNode(c) && isTextNode(last)) {
                // merge adjacent text nodes
                res[lastIndex] = createTextVNode(last.text + c.text);
            }
            else {
                // default key for nested array children (likely generated by v-for)
                if (isTrue(children._isVList) &&
                    isDef(c.tag) &&
                    isUndef(c.key) &&
                    isDef(nestedIndex)) {
                    c.key = `__vlist${nestedIndex}_${i}__`;
                }
                res.push(c);
            }
        }
    }
    return res;
}

const SIMPLE_NORMALIZE = 1;
const ALWAYS_NORMALIZE = 2;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
    if (isArray(data) || isPrimitive(data)) {
        normalizationType = children;
        children = data;
        data = undefined;
    }
    if (isTrue(alwaysNormalize)) {
        normalizationType = ALWAYS_NORMALIZE;
    }
    return _createElement(context, tag, data, children, normalizationType);
}
function _createElement(context, tag, data, children, normalizationType) {
    if (isDef(data) && isDef(data.__ob__)) {
        warn$2(`Avoid using observed data object as vnode data: ${JSON.stringify(data)}\n` + 'Always create fresh vnode data objects in each render!', context);
        return createEmptyVNode();
    }
    // object syntax in v-bind
    if (isDef(data) && isDef(data.is)) {
        tag = data.is;
    }
    if (!tag) {
        // in case of component :is set to falsy value
        return createEmptyVNode();
    }
    // warn against non-primitive key
    if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
        warn$2('Avoid using non-primitive value as key, ' +
            'use string/number value instead.', context);
    }
    // support single function children as default scoped slot
    if (isArray(children) && isFunction(children[0])) {
        data = data || {};
        data.scopedSlots = { default: children[0] };
        children.length = 0;
    }
    if (normalizationType === ALWAYS_NORMALIZE) {
        children = normalizeChildren(children);
    }
    else if (normalizationType === SIMPLE_NORMALIZE) {
        children = simpleNormalizeChildren(children);
    }
    let vnode, ns;
    if (typeof tag === 'string') {
        let Ctor;
        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
        if (config.isReservedTag(tag)) {
            // platform built-in elements
            if (isDef(data) &&
                isDef(data.nativeOn) &&
                data.tag !== 'component') {
                warn$2(`The .native modifier for v-on is only valid on components but it was used on <${tag}>.`, context);
            }
            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
        }
        else if ((!data || !data.pre) &&
            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
            // component
            vnode = createComponent(Ctor, data, context, children, tag);
        }
        else {
            // unknown or unlisted namespaced elements
            // check at runtime because it may get assigned a namespace when its
            // parent normalizes children
            vnode = new VNode(tag, data, children, undefined, undefined, context);
        }
    }
    else {
        // direct component options / constructor
        vnode = createComponent(tag, data, context, children);
    }
    if (isArray(vnode)) {
        return vnode;
    }
    else if (isDef(vnode)) {
        if (isDef(ns))
            applyNS(vnode, ns);
        if (isDef(data))
            registerDeepBindings(data);
        return vnode;
    }
    else {
        return createEmptyVNode();
    }
}
function applyNS(vnode, ns, force) {
    vnode.ns = ns;
    if (vnode.tag === 'foreignObject') {
        // use default namespace inside foreignObject
        ns = undefined;
        force = true;
    }
    if (isDef(vnode.children)) {
        for (let i = 0, l = vnode.children.length; i < l; i++) {
            const child = vnode.children[i];
            if (isDef(child.tag) &&
                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
                applyNS(child, ns, force);
            }
        }
    }
}
// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings(data) {
    if (isObject(data.style)) {
        traverse(data.style);
    }
    if (isObject(data.class)) {
        traverse(data.class);
    }
}

/**
 * Runtime helper for rendering v-for lists.
 */
function renderList(val, render) {
    let ret = null, i, l, keys, key;
    if (isArray(val) || typeof val === 'string') {
        ret = new Array(val.length);
        for (i = 0, l = val.length; i < l; i++) {
            ret[i] = render(val[i], i);
        }
    }
    else if (typeof val === 'number') {
        ret = new Array(val);
        for (i = 0; i < val; i++) {
            ret[i] = render(i + 1, i);
        }
    }
    else if (isObject(val)) {
        if (hasSymbol && val[Symbol.iterator]) {
            ret = [];
            const iterator = val[Symbol.iterator]();
            let result = iterator.next();
            while (!result.done) {
                ret.push(render(result.value, ret.length));
                result = iterator.next();
            }
        }
        else {
            keys = Object.keys(val);
            ret = new Array(keys.length);
            for (i = 0, l = keys.length; i < l; i++) {
                key = keys[i];
                ret[i] = render(val[key], key, i);
            }
        }
    }
    if (!isDef(ret)) {
        ret = [];
    }
    ret._isVList = true;
    return ret;
}

/**
 * Runtime helper for rendering <slot>
 */
function renderSlot(name, fallbackRender, props, bindObject) {
    const scopedSlotFn = this.$scopedSlots[name];
    let nodes;
    if (scopedSlotFn) {
        // scoped slot
        props = props || {};
        if (bindObject) {
            if (!isObject(bindObject)) {
                warn$2('slot v-bind without argument expects an Object', this);
            }
            props = extend(extend({}, bindObject), props);
        }
        nodes =
            scopedSlotFn(props) ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    else {
        nodes =
            this.$slots[name] ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    const target = props && props.slot;
    if (target) {
        return this.$createElement('template', { slot: target }, nodes);
    }
    else {
        return nodes;
    }
}

/**
 * Runtime helper for resolving filters
 */
function resolveFilter(id) {
    return resolveAsset(this.$options, 'filters', id, true) || identity;
}

function isKeyNotMatch(expect, actual) {
    if (isArray(expect)) {
        return expect.indexOf(actual) === -1;
    }
    else {
        return expect !== actual;
    }
}
/**
 * Runtime helper for checking keyCodes from config.
 * exposed as Vue.prototype._k
 * passing in eventKeyName as last argument separately for backwards compat
 */
function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
    const mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
        return isKeyNotMatch(builtInKeyName, eventKeyName);
    }
    else if (mappedKeyCode) {
        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
    }
    else if (eventKeyName) {
        return hyphenate(eventKeyName) !== key;
    }
    return eventKeyCode === undefined;
}

/**
 * Runtime helper for merging v-bind="object" into a VNode's data.
 */
function bindObjectProps(data, tag, value, asProp, isSync) {
    if (value) {
        if (!isObject(value)) {
            warn$2('v-bind without argument expects an Object or Array value', this);
        }
        else {
            if (isArray(value)) {
                value = toObject(value);
            }
            let hash;
            for (const key in value) {
                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
                    hash = data;
                }
                else {
                    const type = data.attrs && data.attrs.type;
                    hash =
                        asProp || config.mustUseProp(tag, type, key)
                            ? data.domProps || (data.domProps = {})
                            : data.attrs || (data.attrs = {});
                }
                const camelizedKey = camelize(key);
                const hyphenatedKey = hyphenate(key);
                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
                    hash[key] = value[key];
                    if (isSync) {
                        const on = data.on || (data.on = {});
                        on[`update:${key}`] = function ($event) {
                            value[key] = $event;
                        };
                    }
                }
            }
        }
    }
    return data;
}

/**
 * Runtime helper for rendering static trees.
 */
function renderStatic(index, isInFor) {
    const cached = this._staticTrees || (this._staticTrees = []);
    let tree = cached[index];
    // if has already-rendered static tree and not inside v-for,
    // we can reuse the same tree.
    if (tree && !isInFor) {
        return tree;
    }
    // otherwise, render a fresh tree.
    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
    );
    markStatic$1(tree, `__static__${index}`, false);
    return tree;
}
/**
 * Runtime helper for v-once.
 * Effectively it means marking the node as static with a unique key.
 */
function markOnce(tree, index, key) {
    markStatic$1(tree, `__once__${index}${key ? `_${key}` : ``}`, true);
    return tree;
}
function markStatic$1(tree, key, isOnce) {
    if (isArray(tree)) {
        for (let i = 0; i < tree.length; i++) {
            if (tree[i] && typeof tree[i] !== 'string') {
                markStaticNode(tree[i], `${key}_${i}`, isOnce);
            }
        }
    }
    else {
        markStaticNode(tree, key, isOnce);
    }
}
function markStaticNode(node, key, isOnce) {
    node.isStatic = true;
    node.key = key;
    node.isOnce = isOnce;
}

function bindObjectListeners(data, value) {
    if (value) {
        if (!isPlainObject(value)) {
            warn$2('v-on without argument expects an Object value', this);
        }
        else {
            const on = (data.on = data.on ? extend({}, data.on) : {});
            for (const key in value) {
                const existing = on[key];
                const ours = value[key];
                on[key] = existing ? [].concat(existing, ours) : ours;
            }
        }
    }
    return data;
}

function resolveScopedSlots(fns, res, 
// the following are added in 2.6
hasDynamicKeys, contentHashKey) {
    res = res || { $stable: !hasDynamicKeys };
    for (let i = 0; i < fns.length; i++) {
        const slot = fns[i];
        if (isArray(slot)) {
            resolveScopedSlots(slot, res, hasDynamicKeys);
        }
        else if (slot) {
            // marker for reverse proxying v-slot without scope on this.$slots
            // @ts-expect-error
            if (slot.proxy) {
                // @ts-expect-error
                slot.fn.proxy = true;
            }
            res[slot.key] = slot.fn;
        }
    }
    if (contentHashKey) {
        res.$key = contentHashKey;
    }
    return res;
}

// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
function bindDynamicKeys(baseObj, values) {
    for (let i = 0; i < values.length; i += 2) {
        const key = values[i];
        if (typeof key === 'string' && key) {
            baseObj[values[i]] = values[i + 1];
        }
        else if (key !== '' && key !== null) {
            // null is a special value for explicitly removing a binding
            warn$2(`Invalid value for dynamic directive argument (expected string or null): ${key}`, this);
        }
    }
    return baseObj;
}
// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
function prependModifier(value, symbol) {
    return typeof value === 'string' ? symbol + value : value;
}

function installRenderHelpers(target) {
    target._o = markOnce;
    target._n = toNumber;
    target._s = toString;
    target._l = renderList;
    target._t = renderSlot;
    target._q = looseEqual;
    target._i = looseIndexOf;
    target._m = renderStatic;
    target._f = resolveFilter;
    target._k = checkKeyCodes;
    target._b = bindObjectProps;
    target._v = createTextVNode;
    target._e = createEmptyVNode;
    target._u = resolveScopedSlots;
    target._g = bindObjectListeners;
    target._d = bindDynamicKeys;
    target._p = prependModifier;
}

/**
 * Runtime helper for resolving raw children VNodes into a slot object.
 */
function resolveSlots(children, context) {
    if (!children || !children.length) {
        return {};
    }
    const slots = {};
    for (let i = 0, l = children.length; i < l; i++) {
        const child = children[i];
        const data = child.data;
        // remove slot attribute if the node is resolved as a Vue slot node
        if (data && data.attrs && data.attrs.slot) {
            delete data.attrs.slot;
        }
        // named slots should only be respected if the vnode was rendered in the
        // same context.
        if ((child.context === context || child.fnContext === context) &&
            data &&
            data.slot != null) {
            const name = data.slot;
            const slot = slots[name] || (slots[name] = []);
            if (child.tag === 'template') {
                slot.push.apply(slot, child.children || []);
            }
            else {
                slot.push(child);
            }
        }
        else {
            (slots.default || (slots.default = [])).push(child);
        }
    }
    // ignore slots that contains only whitespace
    for (const name in slots) {
        if (slots[name].every(isWhitespace)) {
            delete slots[name];
        }
    }
    return slots;
}
function isWhitespace(node) {
    return (node.isComment && !node.asyncFactory) || node.text === ' ';
}

function isAsyncPlaceholder(node) {
    // @ts-expect-error not really boolean type
    return node.isComment && node.asyncFactory;
}

function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
    let res;
    const hasNormalSlots = Object.keys(normalSlots).length > 0;
    const isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
    const key = scopedSlots && scopedSlots.$key;
    if (!scopedSlots) {
        res = {};
    }
    else if (scopedSlots._normalized) {
        // fast path 1: child component re-render only, parent did not change
        return scopedSlots._normalized;
    }
    else if (isStable &&
        prevScopedSlots &&
        prevScopedSlots !== emptyObject &&
        key === prevScopedSlots.$key &&
        !hasNormalSlots &&
        !prevScopedSlots.$hasNormal) {
        // fast path 2: stable scoped slots w/ no normal slots to proxy,
        // only need to normalize once
        return prevScopedSlots;
    }
    else {
        res = {};
        for (const key in scopedSlots) {
            if (scopedSlots[key] && key[0] !== '$') {
                res[key] = normalizeScopedSlot(ownerVm, normalSlots, key, scopedSlots[key]);
            }
        }
    }
    // expose normal slots on scopedSlots
    for (const key in normalSlots) {
        if (!(key in res)) {
            res[key] = proxyNormalSlot(normalSlots, key);
        }
    }
    // avoriaz seems to mock a non-extensible $scopedSlots object
    // and when that is passed down this would cause an error
    if (scopedSlots && Object.isExtensible(scopedSlots)) {
        scopedSlots._normalized = res;
    }
    def(res, '$stable', isStable);
    def(res, '$key', key);
    def(res, '$hasNormal', hasNormalSlots);
    return res;
}
function normalizeScopedSlot(vm, normalSlots, key, fn) {
    const normalized = function () {
        const cur = currentInstance;
        setCurrentInstance(vm);
        let res = arguments.length ? fn.apply(null, arguments) : fn({});
        res =
            res && typeof res === 'object' && !isArray(res)
                ? [res] // single vnode
                : normalizeChildren(res);
        const vnode = res && res[0];
        setCurrentInstance(cur);
        return res &&
            (!vnode ||
                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
            ? undefined
            : res;
    };
    // this is a slot using the new v-slot syntax without scope. although it is
    // compiled as a scoped slot, render fn users would expect it to be present
    // on this.$slots because the usage is semantically a normal slot.
    if (fn.proxy) {
        Object.defineProperty(normalSlots, key, {
            get: normalized,
            enumerable: true,
            configurable: true
        });
    }
    return normalized;
}
function proxyNormalSlot(slots, key) {
    return () => slots[key];
}

function initSetup(vm) {
    const options = vm.$options;
    const setup = options.setup;
    if (setup) {
        const ctx = (vm._setupContext = createSetupContext(vm));
        setCurrentInstance(vm);
        pushTarget();
        const setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, `setup`);
        popTarget();
        setCurrentInstance();
        if (isFunction(setupResult)) {
            // render function
            // @ts-ignore
            options.render = setupResult;
        }
        else if (isObject(setupResult)) {
            // bindings
            if (setupResult instanceof VNode) {
                warn$2(`setup() should not return VNodes directly - ` +
                    `return a render function instead.`);
            }
            vm._setupState = setupResult;
            // __sfc indicates compiled bindings from <script setup>
            if (!setupResult.__sfc) {
                for (const key in setupResult) {
                    if (!isReserved(key)) {
                        proxyWithRefUnwrap(vm, setupResult, key);
                    }
                    else {
                        warn$2(`Avoid using variables that start with _ or $ in setup().`);
                    }
                }
            }
            else {
                // exposed for compiled render fn
                const proxy = (vm._setupProxy = {});
                for (const key in setupResult) {
                    if (key !== '__sfc') {
                        proxyWithRefUnwrap(proxy, setupResult, key);
                    }
                }
            }
        }
        else if (setupResult !== undefined) {
            warn$2(`setup() should return an object. Received: ${setupResult === null ? 'null' : typeof setupResult}`);
        }
    }
}
function createSetupContext(vm) {
    let exposeCalled = false;
    return {
        get attrs() {
            if (!vm._attrsProxy) {
                const proxy = (vm._attrsProxy = {});
                def(proxy, '_v_attr_proxy', true);
                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
            }
            return vm._attrsProxy;
        },
        get listeners() {
            if (!vm._listenersProxy) {
                const proxy = (vm._listenersProxy = {});
                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
            }
            return vm._listenersProxy;
        },
        get slots() {
            return initSlotsProxy(vm);
        },
        emit: bind$1(vm.$emit, vm),
        expose(exposed) {
            {
                if (exposeCalled) {
                    warn$2(`expose() should be called only once per setup().`, vm);
                }
                exposeCalled = true;
            }
            if (exposed) {
                Object.keys(exposed).forEach(key => proxyWithRefUnwrap(vm, exposed, key));
            }
        }
    };
}
function syncSetupProxy(to, from, prev, instance, type) {
    let changed = false;
    for (const key in from) {
        if (!(key in to)) {
            changed = true;
            defineProxyAttr(to, key, instance, type);
        }
        else if (from[key] !== prev[key]) {
            changed = true;
        }
    }
    for (const key in to) {
        if (!(key in from)) {
            changed = true;
            delete to[key];
        }
    }
    return changed;
}
function defineProxyAttr(proxy, key, instance, type) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get() {
            return instance[type][key];
        }
    });
}
function initSlotsProxy(vm) {
    if (!vm._slotsProxy) {
        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
    }
    return vm._slotsProxy;
}
function syncSetupSlots(to, from) {
    for (const key in from) {
        to[key] = from[key];
    }
    for (const key in to) {
        if (!(key in from)) {
            delete to[key];
        }
    }
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useSlots() {
    return getContext().slots;
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useAttrs() {
    return getContext().attrs;
}
/**
 * Vue 2 only
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useListeners() {
    return getContext().listeners;
}
function getContext() {
    if (!currentInstance) {
        warn$2(`useContext() called without active instance.`);
    }
    const vm = currentInstance;
    return vm._setupContext || (vm._setupContext = createSetupContext(vm));
}
/**
 * Runtime helper for merging default declarations. Imported by compiled code
 * only.
 * @internal
 */
function mergeDefaults(raw, defaults) {
    const props = isArray(raw)
        ? raw.reduce((normalized, p) => ((normalized[p] = {}), normalized), {})
        : raw;
    for (const key in defaults) {
        const opt = props[key];
        if (opt) {
            if (isArray(opt) || isFunction(opt)) {
                props[key] = { type: opt, default: defaults[key] };
            }
            else {
                opt.default = defaults[key];
            }
        }
        else if (opt === null) {
            props[key] = { default: defaults[key] };
        }
        else {
            warn$2(`props default key "${key}" has no corresponding declaration.`);
        }
    }
    return props;
}

function initRender(vm) {
    vm._vnode = null; // the root of the child tree
    vm._staticTrees = null; // v-once cached trees
    const options = vm.$options;
    const parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
    const renderContext = parentVnode && parentVnode.context;
    vm.$slots = resolveSlots(options._renderChildren, renderContext);
    vm.$scopedSlots = parentVnode
        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
        : emptyObject;
    // bind the createElement fn to this instance
    // so that we get proper render context inside it.
    // args order: tag, data, children, normalizationType, alwaysNormalize
    // internal version is used by render functions compiled from templates
    // @ts-expect-error
    vm._c = (a, b, c, d) => createElement$1(vm, a, b, c, d, false);
    // normalization is always applied for the public version, used in
    // user-written render functions.
    // @ts-expect-error
    vm.$createElement = (a, b, c, d) => createElement$1(vm, a, b, c, d, true);
    // $attrs & $listeners are exposed for easier HOC creation.
    // they need to be reactive so that HOCs using them are always updated
    const parentData = parentVnode && parentVnode.data;
    /* istanbul ignore else */
    {
        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, () => {
            !isUpdatingChildComponent && warn$2(`$attrs is readonly.`, vm);
        }, true);
        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, () => {
            !isUpdatingChildComponent && warn$2(`$listeners is readonly.`, vm);
        }, true);
    }
}
let currentRenderingInstance = null;
function renderMixin(Vue) {
    // install runtime convenience helpers
    installRenderHelpers(Vue.prototype);
    Vue.prototype.$nextTick = function (fn) {
        return nextTick(fn, this);
    };
    Vue.prototype._render = function () {
        const vm = this;
        const { render, _parentVnode } = vm.$options;
        if (_parentVnode && vm._isMounted) {
            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
            if (vm._slotsProxy) {
                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
            }
        }
        // set parent vnode. this allows render functions to have access
        // to the data on the placeholder node.
        vm.$vnode = _parentVnode;
        // render self
        let vnode;
        try {
            // There's no need to maintain a stack because all render fns are called
            // separately from one another. Nested component's render fns are called
            // when parent component is patched.
            setCurrentInstance(vm);
            currentRenderingInstance = vm;
            vnode = render.call(vm._renderProxy, vm.$createElement);
        }
        catch (e) {
            handleError(e, vm, `render`);
            // return error render result,
            // or previous vnode to prevent render error causing blank component
            /* istanbul ignore else */
            if (vm.$options.renderError) {
                try {
                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
                }
                catch (e) {
                    handleError(e, vm, `renderError`);
                    vnode = vm._vnode;
                }
            }
            else {
                vnode = vm._vnode;
            }
        }
        finally {
            currentRenderingInstance = null;
            setCurrentInstance();
        }
        // if the returned array contains only a single node, allow it
        if (isArray(vnode) && vnode.length === 1) {
            vnode = vnode[0];
        }
        // return empty vnode in case the render function errored out
        if (!(vnode instanceof VNode)) {
            if (isArray(vnode)) {
                warn$2('Multiple root nodes returned from render function. Render function ' +
                    'should return a single root node.', vm);
            }
            vnode = createEmptyVNode();
        }
        // set parent
        vnode.parent = _parentVnode;
        return vnode;
    };
}

function ensureCtor(comp, base) {
    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
        comp = comp.default;
    }
    return isObject(comp) ? base.extend(comp) : comp;
}
function createAsyncPlaceholder(factory, data, context, children, tag) {
    const node = createEmptyVNode();
    node.asyncFactory = factory;
    node.asyncMeta = { data, context, children, tag };
    return node;
}
function resolveAsyncComponent(factory, baseCtor) {
    if (isTrue(factory.error) && isDef(factory.errorComp)) {
        return factory.errorComp;
    }
    if (isDef(factory.resolved)) {
        return factory.resolved;
    }
    const owner = currentRenderingInstance;
    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
        // already pending
        factory.owners.push(owner);
    }
    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
        return factory.loadingComp;
    }
    if (owner && !isDef(factory.owners)) {
        const owners = (factory.owners = [owner]);
        let sync = true;
        let timerLoading = null;
        let timerTimeout = null;
        owner.$on('hook:destroyed', () => remove$2(owners, owner));
        const forceRender = (renderCompleted) => {
            for (let i = 0, l = owners.length; i < l; i++) {
                owners[i].$forceUpdate();
            }
            if (renderCompleted) {
                owners.length = 0;
                if (timerLoading !== null) {
                    clearTimeout(timerLoading);
                    timerLoading = null;
                }
                if (timerTimeout !== null) {
                    clearTimeout(timerTimeout);
                    timerTimeout = null;
                }
            }
        };
        const resolve = once((res) => {
            // cache resolved
            factory.resolved = ensureCtor(res, baseCtor);
            // invoke callbacks only if this is not a synchronous resolve
            // (async resolves are shimmed as synchronous during SSR)
            if (!sync) {
                forceRender(true);
            }
            else {
                owners.length = 0;
            }
        });
        const reject = once(reason => {
            warn$2(`Failed to resolve async component: ${String(factory)}` +
                    (reason ? `\nReason: ${reason}` : ''));
            if (isDef(factory.errorComp)) {
                factory.error = true;
                forceRender(true);
            }
        });
        const res = factory(resolve, reject);
        if (isObject(res)) {
            if (isPromise(res)) {
                // () => Promise
                if (isUndef(factory.resolved)) {
                    res.then(resolve, reject);
                }
            }
            else if (isPromise(res.component)) {
                res.component.then(resolve, reject);
                if (isDef(res.error)) {
                    factory.errorComp = ensureCtor(res.error, baseCtor);
                }
                if (isDef(res.loading)) {
                    factory.loadingComp = ensureCtor(res.loading, baseCtor);
                    if (res.delay === 0) {
                        factory.loading = true;
                    }
                    else {
                        // @ts-expect-error NodeJS timeout type
                        timerLoading = setTimeout(() => {
                            timerLoading = null;
                            if (isUndef(factory.resolved) && isUndef(factory.error)) {
                                factory.loading = true;
                                forceRender(false);
                            }
                        }, res.delay || 200);
                    }
                }
                if (isDef(res.timeout)) {
                    // @ts-expect-error NodeJS timeout type
                    timerTimeout = setTimeout(() => {
                        timerTimeout = null;
                        if (isUndef(factory.resolved)) {
                            reject(`timeout (${res.timeout}ms)` );
                        }
                    }, res.timeout);
                }
            }
        }
        sync = false;
        // return in case resolved synchronously
        return factory.loading ? factory.loadingComp : factory.resolved;
    }
}

function getFirstComponentChild(children) {
    if (isArray(children)) {
        for (let i = 0; i < children.length; i++) {
            const c = children[i];
            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
                return c;
            }
        }
    }
}

function initEvents(vm) {
    vm._events = Object.create(null);
    vm._hasHookEvent = false;
    // init parent attached events
    const listeners = vm.$options._parentListeners;
    if (listeners) {
        updateComponentListeners(vm, listeners);
    }
}
let target$1;
function add$1(event, fn) {
    target$1.$on(event, fn);
}
function remove$1(event, fn) {
    target$1.$off(event, fn);
}
function createOnceHandler$1(event, fn) {
    const _target = target$1;
    return function onceHandler() {
        const res = fn.apply(null, arguments);
        if (res !== null) {
            _target.$off(event, onceHandler);
        }
    };
}
function updateComponentListeners(vm, listeners, oldListeners) {
    target$1 = vm;
    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
    target$1 = undefined;
}
function eventsMixin(Vue) {
    const hookRE = /^hook:/;
    Vue.prototype.$on = function (event, fn) {
        const vm = this;
        if (isArray(event)) {
            for (let i = 0, l = event.length; i < l; i++) {
                vm.$on(event[i], fn);
            }
        }
        else {
            (vm._events[event] || (vm._events[event] = [])).push(fn);
            // optimize hook:event cost by using a boolean flag marked at registration
            // instead of a hash lookup
            if (hookRE.test(event)) {
                vm._hasHookEvent = true;
            }
        }
        return vm;
    };
    Vue.prototype.$once = function (event, fn) {
        const vm = this;
        function on() {
            vm.$off(event, on);
            fn.apply(vm, arguments);
        }
        on.fn = fn;
        vm.$on(event, on);
        return vm;
    };
    Vue.prototype.$off = function (event, fn) {
        const vm = this;
        // all
        if (!arguments.length) {
            vm._events = Object.create(null);
            return vm;
        }
        // array of events
        if (isArray(event)) {
            for (let i = 0, l = event.length; i < l; i++) {
                vm.$off(event[i], fn);
            }
            return vm;
        }
        // specific event
        const cbs = vm._events[event];
        if (!cbs) {
            return vm;
        }
        if (!fn) {
            vm._events[event] = null;
            return vm;
        }
        // specific handler
        let cb;
        let i = cbs.length;
        while (i--) {
            cb = cbs[i];
            if (cb === fn || cb.fn === fn) {
                cbs.splice(i, 1);
                break;
            }
        }
        return vm;
    };
    Vue.prototype.$emit = function (event) {
        const vm = this;
        {
            const lowerCaseEvent = event.toLowerCase();
            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
                tip(`Event "${lowerCaseEvent}" is emitted in component ` +
                    `${formatComponentName(vm)} but the handler is registered for "${event}". ` +
                    `Note that HTML attributes are case-insensitive and you cannot use ` +
                    `v-on to listen to camelCase events when using in-DOM templates. ` +
                    `You should probably use "${hyphenate(event)}" instead of "${event}".`);
            }
        }
        let cbs = vm._events[event];
        if (cbs) {
            cbs = cbs.length > 1 ? toArray(cbs) : cbs;
            const args = toArray(arguments, 1);
            const info = `event handler for "${event}"`;
            for (let i = 0, l = cbs.length; i < l; i++) {
                invokeWithErrorHandling(cbs[i], vm, args, vm, info);
            }
        }
        return vm;
    };
}

let activeInstance = null;
let isUpdatingChildComponent = false;
function setActiveInstance(vm) {
    const prevActiveInstance = activeInstance;
    activeInstance = vm;
    return () => {
        activeInstance = prevActiveInstance;
    };
}
function initLifecycle(vm) {
    const options = vm.$options;
    // locate first non-abstract parent
    let parent = options.parent;
    if (parent && !options.abstract) {
        while (parent.$options.abstract && parent.$parent) {
            parent = parent.$parent;
        }
        parent.$children.push(vm);
    }
    vm.$parent = parent;
    vm.$root = parent ? parent.$root : vm;
    vm.$children = [];
    vm.$refs = {};
    vm._provided = parent ? parent._provided : Object.create(null);
    vm._watcher = null;
    vm._inactive = null;
    vm._directInactive = false;
    vm._isMounted = false;
    vm._isDestroyed = false;
    vm._isBeingDestroyed = false;
}
function lifecycleMixin(Vue) {
    Vue.prototype._update = function (vnode, hydrating) {
        const vm = this;
        const prevEl = vm.$el;
        const prevVnode = vm._vnode;
        const restoreActiveInstance = setActiveInstance(vm);
        vm._vnode = vnode;
        // Vue.prototype.__patch__ is injected in entry points
        // based on the rendering backend used.
        if (!prevVnode) {
            // initial render
            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
        }
        else {
            // updates
            vm.$el = vm.__patch__(prevVnode, vnode);
        }
        restoreActiveInstance();
        // update __vue__ reference
        if (prevEl) {
            prevEl.__vue__ = null;
        }
        if (vm.$el) {
            vm.$el.__vue__ = vm;
        }
        // if parent is an HOC, update its $el as well
        let wrapper = vm;
        while (wrapper &&
            wrapper.$vnode &&
            wrapper.$parent &&
            wrapper.$vnode === wrapper.$parent._vnode) {
            wrapper.$parent.$el = wrapper.$el;
            wrapper = wrapper.$parent;
        }
        // updated hook is called by the scheduler to ensure that children are
        // updated in a parent's updated hook.
    };
    Vue.prototype.$forceUpdate = function () {
        const vm = this;
        if (vm._watcher) {
            vm._watcher.update();
        }
    };
    Vue.prototype.$destroy = function () {
        const vm = this;
        if (vm._isBeingDestroyed) {
            return;
        }
        callHook$1(vm, 'beforeDestroy');
        vm._isBeingDestroyed = true;
        // remove self from parent
        const parent = vm.$parent;
        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
            remove$2(parent.$children, vm);
        }
        // teardown scope. this includes both the render watcher and other
        // watchers created
        vm._scope.stop();
        // remove reference from data ob
        // frozen object may not have observer.
        if (vm._data.__ob__) {
            vm._data.__ob__.vmCount--;
        }
        // call the last hook...
        vm._isDestroyed = true;
        // invoke destroy hooks on current rendered tree
        vm.__patch__(vm._vnode, null);
        // fire destroyed hook
        callHook$1(vm, 'destroyed');
        // turn off all instance listeners.
        vm.$off();
        // remove __vue__ reference
        if (vm.$el) {
            vm.$el.__vue__ = null;
        }
        // release circular reference (#6759)
        if (vm.$vnode) {
            vm.$vnode.parent = null;
        }
    };
}
function mountComponent(vm, el, hydrating) {
    vm.$el = el;
    if (!vm.$options.render) {
        // @ts-expect-error invalid type
        vm.$options.render = createEmptyVNode;
        {
            /* istanbul ignore if */
            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
                vm.$options.el ||
                el) {
                warn$2('You are using the runtime-only build of Vue where the template ' +
                    'compiler is not available. Either pre-compile the templates into ' +
                    'render functions, or use the compiler-included build.', vm);
            }
            else {
                warn$2('Failed to mount component: template or render function not defined.', vm);
            }
        }
    }
    callHook$1(vm, 'beforeMount');
    let updateComponent;
    /* istanbul ignore if */
    if (config.performance && mark) {
        updateComponent = () => {
            const name = vm._name;
            const id = vm._uid;
            const startTag = `vue-perf-start:${id}`;
            const endTag = `vue-perf-end:${id}`;
            mark(startTag);
            const vnode = vm._render();
            mark(endTag);
            measure(`vue ${name} render`, startTag, endTag);
            mark(startTag);
            vm._update(vnode, hydrating);
            mark(endTag);
            measure(`vue ${name} patch`, startTag, endTag);
        };
    }
    else {
        updateComponent = () => {
            vm._update(vm._render(), hydrating);
        };
    }
    const watcherOptions = {
        before() {
            if (vm._isMounted && !vm._isDestroyed) {
                callHook$1(vm, 'beforeUpdate');
            }
        }
    };
    {
        watcherOptions.onTrack = e => callHook$1(vm, 'renderTracked', [e]);
        watcherOptions.onTrigger = e => callHook$1(vm, 'renderTriggered', [e]);
    }
    // we set this to vm._watcher inside the watcher's constructor
    // since the watcher's initial patch may call $forceUpdate (e.g. inside child
    // component's mounted hook), which relies on vm._watcher being already defined
    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
    hydrating = false;
    // flush buffer for flush: "pre" watchers queued in setup()
    const preWatchers = vm._preWatchers;
    if (preWatchers) {
        for (let i = 0; i < preWatchers.length; i++) {
            preWatchers[i].run();
        }
    }
    // manually mounted instance, call mounted on self
    // mounted is called for render-created child components in its inserted hook
    if (vm.$vnode == null) {
        vm._isMounted = true;
        callHook$1(vm, 'mounted');
    }
    return vm;
}
function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
    {
        isUpdatingChildComponent = true;
    }
    // determine whether component has slot children
    // we need to do this before overwriting $options._renderChildren.
    // check if there are dynamic scopedSlots (hand-written or compiled but with
    // dynamic slot names). Static scoped slots compiled from template has the
    // "$stable" marker.
    const newScopedSlots = parentVnode.data.scopedSlots;
    const oldScopedSlots = vm.$scopedSlots;
    const hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
        (!newScopedSlots && vm.$scopedSlots.$key));
    // Any static slot children from the parent may have changed during parent's
    // update. Dynamic scoped slots may also have changed. In such cases, a forced
    // update is necessary to ensure correctness.
    let needsForceUpdate = !!(renderChildren || // has new static slots
        vm.$options._renderChildren || // has old static slots
        hasDynamicScopedSlot);
    const prevVNode = vm.$vnode;
    vm.$options._parentVnode = parentVnode;
    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
    if (vm._vnode) {
        // update child tree's parent
        vm._vnode.parent = parentVnode;
    }
    vm.$options._renderChildren = renderChildren;
    // update $attrs and $listeners hash
    // these are also reactive so they may trigger child update if the child
    // used them during render
    const attrs = parentVnode.data.attrs || emptyObject;
    if (vm._attrsProxy) {
        // force update if attrs are accessed and has changed since it may be
        // passed to a child component.
        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
            needsForceUpdate = true;
        }
    }
    vm.$attrs = attrs;
    // update listeners
    listeners = listeners || emptyObject;
    const prevListeners = vm.$options._parentListeners;
    if (vm._listenersProxy) {
        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
    }
    vm.$listeners = vm.$options._parentListeners = listeners;
    updateComponentListeners(vm, listeners, prevListeners);
    // update props
    if (propsData && vm.$options.props) {
        toggleObserving(false);
        const props = vm._props;
        const propKeys = vm.$options._propKeys || [];
        for (let i = 0; i < propKeys.length; i++) {
            const key = propKeys[i];
            const propOptions = vm.$options.props; // wtf flow?
            props[key] = validateProp(key, propOptions, propsData, vm);
        }
        toggleObserving(true);
        // keep a copy of raw propsData
        vm.$options.propsData = propsData;
    }
    // resolve slots + force update if has children
    if (needsForceUpdate) {
        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
        vm.$forceUpdate();
    }
    {
        isUpdatingChildComponent = false;
    }
}
function isInInactiveTree(vm) {
    while (vm && (vm = vm.$parent)) {
        if (vm._inactive)
            return true;
    }
    return false;
}
function activateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = false;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    else if (vm._directInactive) {
        return;
    }
    if (vm._inactive || vm._inactive === null) {
        vm._inactive = false;
        for (let i = 0; i < vm.$children.length; i++) {
            activateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'activated');
    }
}
function deactivateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = true;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    if (!vm._inactive) {
        vm._inactive = true;
        for (let i = 0; i < vm.$children.length; i++) {
            deactivateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'deactivated');
    }
}
function callHook$1(vm, hook, args, setContext = true) {
    // #7573 disable dep collection when invoking lifecycle hooks
    pushTarget();
    const prev = currentInstance;
    setContext && setCurrentInstance(vm);
    const handlers = vm.$options[hook];
    const info = `${hook} hook`;
    if (handlers) {
        for (let i = 0, j = handlers.length; i < j; i++) {
            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
        }
    }
    if (vm._hasHookEvent) {
        vm.$emit('hook:' + hook);
    }
    setContext && setCurrentInstance(prev);
    popTarget();
}

const MAX_UPDATE_COUNT = 100;
const queue = [];
const activatedChildren = [];
let has = {};
let circular = {};
let waiting = false;
let flushing = false;
let index$1 = 0;
/**
 * Reset the scheduler's state.
 */
function resetSchedulerState() {
    index$1 = queue.length = activatedChildren.length = 0;
    has = {};
    {
        circular = {};
    }
    waiting = flushing = false;
}
// Async edge case #6566 requires saving the timestamp when event listeners are
// attached. However, calling performance.now() has a perf overhead especially
// if the page has thousands of event listeners. Instead, we take a timestamp
// every time the scheduler flushes and use that for all event listeners
// attached during that flush.
let currentFlushTimestamp = 0;
// Async edge case fix requires storing an event listener's attach timestamp.
let getNow = Date.now;
// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if (inBrowser && !isIE) {
    const performance = window.performance;
    if (performance &&
        typeof performance.now === 'function' &&
        getNow() > document.createEvent('Event').timeStamp) {
        // if the event timestamp, although evaluated AFTER the Date.now(), is
        // smaller than it, it means the event is using a hi-res timestamp,
        // and we need to use the hi-res version for event listener timestamps as
        // well.
        getNow = () => performance.now();
    }
}
const sortCompareFn = (a, b) => {
    if (a.post) {
        if (!b.post)
            return 1;
    }
    else if (b.post) {
        return -1;
    }
    return a.id - b.id;
};
/**
 * Flush both queues and run the watchers.
 */
function flushSchedulerQueue() {
    currentFlushTimestamp = getNow();
    flushing = true;
    let watcher, id;
    // Sort queue before flush.
    // This ensures that:
    // 1. Components are updated from parent to child. (because parent is always
    //    created before the child)
    // 2. A component's user watchers are run before its render watcher (because
    //    user watchers are created before the render watcher)
    // 3. If a component is destroyed during a parent component's watcher run,
    //    its watchers can be skipped.
    queue.sort(sortCompareFn);
    // do not cache length because more watchers might be pushed
    // as we run existing watchers
    for (index$1 = 0; index$1 < queue.length; index$1++) {
        watcher = queue[index$1];
        if (watcher.before) {
            watcher.before();
        }
        id = watcher.id;
        has[id] = null;
        watcher.run();
        // in dev build, check and stop circular updates.
        if (has[id] != null) {
            circular[id] = (circular[id] || 0) + 1;
            if (circular[id] > MAX_UPDATE_COUNT) {
                warn$2('You may have an infinite update loop ' +
                    (watcher.user
                        ? `in watcher with expression "${watcher.expression}"`
                        : `in a component render function.`), watcher.vm);
                break;
            }
        }
    }
    // keep copies of post queues before resetting state
    const activatedQueue = activatedChildren.slice();
    const updatedQueue = queue.slice();
    resetSchedulerState();
    // call component updated and activated hooks
    callActivatedHooks(activatedQueue);
    callUpdatedHooks(updatedQueue);
    cleanupDeps();
    // devtool hook
    /* istanbul ignore if */
    if (devtools && config.devtools) {
        devtools.emit('flush');
    }
}
function callUpdatedHooks(queue) {
    let i = queue.length;
    while (i--) {
        const watcher = queue[i];
        const vm = watcher.vm;
        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
            callHook$1(vm, 'updated');
        }
    }
}
/**
 * Queue a kept-alive component that was activated during patch.
 * The queue will be processed after the entire tree has been patched.
 */
function queueActivatedComponent(vm) {
    // setting _inactive to false here so that a render function can
    // rely on checking whether it's in an inactive tree (e.g. router-view)
    vm._inactive = false;
    activatedChildren.push(vm);
}
function callActivatedHooks(queue) {
    for (let i = 0; i < queue.length; i++) {
        queue[i]._inactive = true;
        activateChildComponent(queue[i], true /* true */);
    }
}
/**
 * Push a watcher into the watcher queue.
 * Jobs with duplicate IDs will be skipped unless it's
 * pushed when the queue is being flushed.
 */
function queueWatcher(watcher) {
    const id = watcher.id;
    if (has[id] != null) {
        return;
    }
    if (watcher === Dep.target && watcher.noRecurse) {
        return;
    }
    has[id] = true;
    if (!flushing) {
        queue.push(watcher);
    }
    else {
        // if already flushing, splice the watcher based on its id
        // if already past its id, it will be run next immediately.
        let i = queue.length - 1;
        while (i > index$1 && queue[i].id > watcher.id) {
            i--;
        }
        queue.splice(i + 1, 0, watcher);
    }
    // queue the flush
    if (!waiting) {
        waiting = true;
        if (!config.async) {
            flushSchedulerQueue();
            return;
        }
        nextTick(flushSchedulerQueue);
    }
}

const WATCHER = `watcher`;
const WATCHER_CB = `${WATCHER} callback`;
const WATCHER_GETTER = `${WATCHER} getter`;
const WATCHER_CLEANUP = `${WATCHER} cleanup`;
// Simple effect.
function watchEffect(effect, options) {
    return doWatch(effect, null, options);
}
function watchPostEffect(effect, options) {
    return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'post' }) ));
}
function watchSyncEffect(effect, options) {
    return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'sync' }) ));
}
// initial value for watchers to trigger on undefined initial values
const INITIAL_WATCHER_VALUE = {};
// implementation
function watch(source, cb, options) {
    if (typeof cb !== 'function') {
        warn$2(`\`watch(fn, options?)\` signature has been moved to a separate API. ` +
            `Use \`watchEffect(fn, options?)\` instead. \`watch\` now only ` +
            `supports \`watch(source, cb, options?) signature.`);
    }
    return doWatch(source, cb, options);
}
function doWatch(source, cb, { immediate, deep, flush = 'pre', onTrack, onTrigger } = emptyObject) {
    if (!cb) {
        if (immediate !== undefined) {
            warn$2(`watch() "immediate" option is only respected when using the ` +
                `watch(source, callback, options?) signature.`);
        }
        if (deep !== undefined) {
            warn$2(`watch() "deep" option is only respected when using the ` +
                `watch(source, callback, options?) signature.`);
        }
    }
    const warnInvalidSource = (s) => {
        warn$2(`Invalid watch source: ${s}. A watch source can only be a getter/effect ` +
            `function, a ref, a reactive object, or an array of these types.`);
    };
    const instance = currentInstance;
    const call = (fn, type, args = null) => invokeWithErrorHandling(fn, null, args, instance, type);
    let getter;
    let forceTrigger = false;
    let isMultiSource = false;
    if (isRef(source)) {
        getter = () => source.value;
        forceTrigger = isShallow(source);
    }
    else if (isReactive(source)) {
        getter = () => {
            source.__ob__.dep.depend();
            return source;
        };
        deep = true;
    }
    else if (isArray(source)) {
        isMultiSource = true;
        forceTrigger = source.some(s => isReactive(s) || isShallow(s));
        getter = () => source.map(s => {
            if (isRef(s)) {
                return s.value;
            }
            else if (isReactive(s)) {
                return traverse(s);
            }
            else if (isFunction(s)) {
                return call(s, WATCHER_GETTER);
            }
            else {
                warnInvalidSource(s);
            }
        });
    }
    else if (isFunction(source)) {
        if (cb) {
            // getter with cb
            getter = () => call(source, WATCHER_GETTER);
        }
        else {
            // no cb -> simple effect
            getter = () => {
                if (instance && instance._isDestroyed) {
                    return;
                }
                if (cleanup) {
                    cleanup();
                }
                return call(source, WATCHER, [onCleanup]);
            };
        }
    }
    else {
        getter = noop;
        warnInvalidSource(source);
    }
    if (cb && deep) {
        const baseGetter = getter;
        getter = () => traverse(baseGetter());
    }
    let cleanup;
    let onCleanup = (fn) => {
        cleanup = watcher.onStop = () => {
            call(fn, WATCHER_CLEANUP);
        };
    };
    // in SSR there is no need to setup an actual effect, and it should be noop
    // unless it's eager
    if (isServerRendering()) {
        // we will also not call the invalidate callback (+ runner is not set up)
        onCleanup = noop;
        if (!cb) {
            getter();
        }
        else if (immediate) {
            call(cb, WATCHER_CB, [
                getter(),
                isMultiSource ? [] : undefined,
                onCleanup
            ]);
        }
        return noop;
    }
    const watcher = new Watcher(currentInstance, getter, noop, {
        lazy: true
    });
    watcher.noRecurse = !cb;
    let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
    // overwrite default run
    watcher.run = () => {
        if (!watcher.active) {
            return;
        }
        if (cb) {
            // watch(source, cb)
            const newValue = watcher.get();
            if (deep ||
                forceTrigger ||
                (isMultiSource
                    ? newValue.some((v, i) => hasChanged(v, oldValue[i]))
                    : hasChanged(newValue, oldValue))) {
                // cleanup before running cb again
                if (cleanup) {
                    cleanup();
                }
                call(cb, WATCHER_CB, [
                    newValue,
                    // pass undefined as the old value when it's changed for the first time
                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
                    onCleanup
                ]);
                oldValue = newValue;
            }
        }
        else {
            // watchEffect
            watcher.get();
        }
    };
    if (flush === 'sync') {
        watcher.update = watcher.run;
    }
    else if (flush === 'post') {
        watcher.post = true;
        watcher.update = () => queueWatcher(watcher);
    }
    else {
        // pre
        watcher.update = () => {
            if (instance && instance === currentInstance && !instance._isMounted) {
                // pre-watcher triggered before
                const buffer = instance._preWatchers || (instance._preWatchers = []);
                if (buffer.indexOf(watcher) < 0)
                    buffer.push(watcher);
            }
            else {
                queueWatcher(watcher);
            }
        };
    }
    {
        watcher.onTrack = onTrack;
        watcher.onTrigger = onTrigger;
    }
    // initial run
    if (cb) {
        if (immediate) {
            watcher.run();
        }
        else {
            oldValue = watcher.get();
        }
    }
    else if (flush === 'post' && instance) {
        instance.$once('hook:mounted', () => watcher.get());
    }
    else {
        watcher.get();
    }
    return () => {
        watcher.teardown();
    };
}

let activeEffectScope;
class EffectScope {
    constructor(detached = false) {
        this.detached = detached;
        /**
         * @internal
         */
        this.active = true;
        /**
         * @internal
         */
        this.effects = [];
        /**
         * @internal
         */
        this.cleanups = [];
        this.parent = activeEffectScope;
        if (!detached && activeEffectScope) {
            this.index =
                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
        }
    }
    run(fn) {
        if (this.active) {
            const currentEffectScope = activeEffectScope;
            try {
                activeEffectScope = this;
                return fn();
            }
            finally {
                activeEffectScope = currentEffectScope;
            }
        }
        else {
            warn$2(`cannot run an inactive effect scope.`);
        }
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    on() {
        activeEffectScope = this;
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    off() {
        activeEffectScope = this.parent;
    }
    stop(fromParent) {
        if (this.active) {
            let i, l;
            for (i = 0, l = this.effects.length; i < l; i++) {
                this.effects[i].teardown();
            }
            for (i = 0, l = this.cleanups.length; i < l; i++) {
                this.cleanups[i]();
            }
            if (this.scopes) {
                for (i = 0, l = this.scopes.length; i < l; i++) {
                    this.scopes[i].stop(true);
                }
            }
            // nested scope, dereference from parent to avoid memory leaks
            if (!this.detached && this.parent && !fromParent) {
                // optimized O(1) removal
                const last = this.parent.scopes.pop();
                if (last && last !== this) {
                    this.parent.scopes[this.index] = last;
                    last.index = this.index;
                }
            }
            this.parent = undefined;
            this.active = false;
        }
    }
}
function effectScope(detached) {
    return new EffectScope(detached);
}
/**
 * @internal
 */
function recordEffectScope(effect, scope = activeEffectScope) {
    if (scope && scope.active) {
        scope.effects.push(effect);
    }
}
function getCurrentScope() {
    return activeEffectScope;
}
function onScopeDispose(fn) {
    if (activeEffectScope) {
        activeEffectScope.cleanups.push(fn);
    }
    else {
        warn$2(`onScopeDispose() is called when there is no active effect scope` +
            ` to be associated with.`);
    }
}

function provide(key, value) {
    if (!currentInstance) {
        {
            warn$2(`provide() can only be used inside setup().`);
        }
    }
    else {
        // TS doesn't allow symbol as index type
        resolveProvided(currentInstance)[key] = value;
    }
}
function resolveProvided(vm) {
    // by default an instance inherits its parent's provides object
    // but when it needs to provide values of its own, it creates its
    // own provides object using parent provides object as prototype.
    // this way in `inject` we can simply look up injections from direct
    // parent and let the prototype chain do the work.
    const existing = vm._provided;
    const parentProvides = vm.$parent && vm.$parent._provided;
    if (parentProvides === existing) {
        return (vm._provided = Object.create(parentProvides));
    }
    else {
        return existing;
    }
}
function inject(key, defaultValue, treatDefaultAsFactory = false) {
    // fallback to `currentRenderingInstance` so that this can be called in
    // a functional component
    const instance = currentInstance;
    if (instance) {
        // #2400
        // to support `app.use` plugins,
        // fallback to appContext's `provides` if the instance is at root
        const provides = instance.$parent && instance.$parent._provided;
        if (provides && key in provides) {
            // TS doesn't allow symbol as index type
            return provides[key];
        }
        else if (arguments.length > 1) {
            return treatDefaultAsFactory && isFunction(defaultValue)
                ? defaultValue.call(instance)
                : defaultValue;
        }
        else {
            warn$2(`injection "${String(key)}" not found.`);
        }
    }
    else {
        warn$2(`inject() can only be used inside setup() or functional components.`);
    }
}

/**
 * @internal this function needs manual public type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function h(type, props, children) {
    if (!currentInstance) {
        warn$2(`globally imported h() can only be invoked when there is an active ` +
                `component instance, e.g. synchronously in a component's render or setup function.`);
    }
    return createElement$1(currentInstance, type, props, children, 2, true);
}

function handleError(err, vm, info) {
    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
    // See: https://github.com/vuejs/vuex/issues/1505
    pushTarget();
    try {
        if (vm) {
            let cur = vm;
            while ((cur = cur.$parent)) {
                const hooks = cur.$options.errorCaptured;
                if (hooks) {
                    for (let i = 0; i < hooks.length; i++) {
                        try {
                            const capture = hooks[i].call(cur, err, vm, info) === false;
                            if (capture)
                                return;
                        }
                        catch (e) {
                            globalHandleError(e, cur, 'errorCaptured hook');
                        }
                    }
                }
            }
        }
        globalHandleError(err, vm, info);
    }
    finally {
        popTarget();
    }
}
function invokeWithErrorHandling(handler, context, args, vm, info) {
    let res;
    try {
        res = args ? handler.apply(context, args) : handler.call(context);
        if (res && !res._isVue && isPromise(res) && !res._handled) {
            res.catch(e => handleError(e, vm, info + ` (Promise/async)`));
            res._handled = true;
        }
    }
    catch (e) {
        handleError(e, vm, info);
    }
    return res;
}
function globalHandleError(err, vm, info) {
    if (config.errorHandler) {
        try {
            return config.errorHandler.call(null, err, vm, info);
        }
        catch (e) {
            // if the user intentionally throws the original error in the handler,
            // do not log it twice
            if (e !== err) {
                logError(e, null, 'config.errorHandler');
            }
        }
    }
    logError(err, vm, info);
}
function logError(err, vm, info) {
    {
        warn$2(`Error in ${info}: "${err.toString()}"`, vm);
    }
    /* istanbul ignore else */
    if (inBrowser && typeof console !== 'undefined') {
        console.error(err);
    }
    else {
        throw err;
    }
}

/* globals MutationObserver */
let isUsingMicroTask = false;
const callbacks = [];
let pending = false;
function flushCallbacks() {
    pending = false;
    const copies = callbacks.slice(0);
    callbacks.length = 0;
    for (let i = 0; i < copies.length; i++) {
        copies[i]();
    }
}
// Here we have async deferring wrappers using microtasks.
// In 2.5 we used (macro) tasks (in combination with microtasks).
// However, it has subtle problems when state is changed right before repaint
// (e.g. #6813, out-in transitions).
// Also, using (macro) tasks in event handler would cause some weird behaviors
// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
// So we now use microtasks everywhere, again.
// A major drawback of this tradeoff is that there are some scenarios
// where microtasks have too high a priority and fire in between supposedly
// sequential events (e.g. #4521, #6690, which have workarounds)
// or even between bubbling of the same event (#6566).
let timerFunc;
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
    const p = Promise.resolve();
    timerFunc = () => {
        p.then(flushCallbacks);
        // In problematic UIWebViews, Promise.then doesn't completely break, but
        // it can get stuck in a weird state where callbacks are pushed into the
        // microtask queue but the queue isn't being flushed, until the browser
        // needs to do some other work, e.g. handle a timer. Therefore we can
        // "force" the microtask queue to be flushed by adding an empty timer.
        if (isIOS)
            setTimeout(noop);
    };
    isUsingMicroTask = true;
}
else if (!isIE &&
    typeof MutationObserver !== 'undefined' &&
    (isNative(MutationObserver) ||
        // PhantomJS and iOS 7.x
        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
    // Use MutationObserver where native Promise is not available,
    // e.g. PhantomJS, iOS7, Android 4.4
    // (#6466 MutationObserver is unreliable in IE11)
    let counter = 1;
    const observer = new MutationObserver(flushCallbacks);
    const textNode = document.createTextNode(String(counter));
    observer.observe(textNode, {
        characterData: true
    });
    timerFunc = () => {
        counter = (counter + 1) % 2;
        textNode.data = String(counter);
    };
    isUsingMicroTask = true;
}
else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
    // Fallback to setImmediate.
    // Technically it leverages the (macro) task queue,
    // but it is still a better choice than setTimeout.
    timerFunc = () => {
        setImmediate(flushCallbacks);
    };
}
else {
    // Fallback to setTimeout.
    timerFunc = () => {
        setTimeout(flushCallbacks, 0);
    };
}
/**
 * @internal
 */
function nextTick(cb, ctx) {
    let _resolve;
    callbacks.push(() => {
        if (cb) {
            try {
                cb.call(ctx);
            }
            catch (e) {
                handleError(e, ctx, 'nextTick');
            }
        }
        else if (_resolve) {
            _resolve(ctx);
        }
    });
    if (!pending) {
        pending = true;
        timerFunc();
    }
    // $flow-disable-line
    if (!cb && typeof Promise !== 'undefined') {
        return new Promise(resolve => {
            _resolve = resolve;
        });
    }
}

function useCssModule(name = '$style') {
    /* istanbul ignore else */
    {
        if (!currentInstance) {
            warn$2(`useCssModule must be called inside setup()`);
            return emptyObject;
        }
        const mod = currentInstance[name];
        if (!mod) {
            warn$2(`Current instance does not have CSS module named "${name}".`);
            return emptyObject;
        }
        return mod;
    }
}

/**
 * Runtime helper for SFC's CSS variable injection feature.
 * @private
 */
function useCssVars(getter) {
    if (!inBrowser && !false)
        return;
    const instance = currentInstance;
    if (!instance) {
        warn$2(`useCssVars is called without current active component instance.`);
        return;
    }
    watchPostEffect(() => {
        const el = instance.$el;
        const vars = getter(instance, instance._setupProxy);
        if (el && el.nodeType === 1) {
            const style = el.style;
            for (const key in vars) {
                style.setProperty(`--${key}`, vars[key]);
            }
        }
    });
}

/**
 * v3-compatible async component API.
 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
 * because it relies on existing manual types
 */
function defineAsyncComponent(source) {
    if (isFunction(source)) {
        source = { loader: source };
    }
    const { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out
    suspensible = false, // in Vue 3 default is true
    onError: userOnError } = source;
    if (suspensible) {
        warn$2(`The suspensiblbe option for async components is not supported in Vue2. It is ignored.`);
    }
    let pendingRequest = null;
    let retries = 0;
    const retry = () => {
        retries++;
        pendingRequest = null;
        return load();
    };
    const load = () => {
        let thisRequest;
        return (pendingRequest ||
            (thisRequest = pendingRequest =
                loader()
                    .catch(err => {
                    err = err instanceof Error ? err : new Error(String(err));
                    if (userOnError) {
                        return new Promise((resolve, reject) => {
                            const userRetry = () => resolve(retry());
                            const userFail = () => reject(err);
                            userOnError(err, userRetry, userFail, retries + 1);
                        });
                    }
                    else {
                        throw err;
                    }
                })
                    .then((comp) => {
                    if (thisRequest !== pendingRequest && pendingRequest) {
                        return pendingRequest;
                    }
                    if (!comp) {
                        warn$2(`Async component loader resolved to undefined. ` +
                            `If you are using retry(), make sure to return its return value.`);
                    }
                    // interop module default
                    if (comp &&
                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
                        comp = comp.default;
                    }
                    if (comp && !isObject(comp) && !isFunction(comp)) {
                        throw new Error(`Invalid async component load result: ${comp}`);
                    }
                    return comp;
                })));
    };
    return () => {
        const component = load();
        return {
            component,
            delay,
            timeout,
            error: errorComponent,
            loading: loadingComponent
        };
    };
}

function createLifeCycle(hookName) {
    return (fn, target = currentInstance) => {
        if (!target) {
            warn$2(`${formatName(hookName)} is called when there is no active component instance to be ` +
                    `associated with. ` +
                    `Lifecycle injection APIs can only be used during execution of setup().`);
            return;
        }
        return injectHook(target, hookName, fn);
    };
}
function formatName(name) {
    if (name === 'beforeDestroy') {
        name = 'beforeUnmount';
    }
    else if (name === 'destroyed') {
        name = 'unmounted';
    }
    return `on${name[0].toUpperCase() + name.slice(1)}`;
}
function injectHook(instance, hookName, fn) {
    const options = instance.$options;
    options[hookName] = mergeLifecycleHook(options[hookName], fn);
}
const onBeforeMount = createLifeCycle('beforeMount');
const onMounted = createLifeCycle('mounted');
const onBeforeUpdate = createLifeCycle('beforeUpdate');
const onUpdated = createLifeCycle('updated');
const onBeforeUnmount = createLifeCycle('beforeDestroy');
const onUnmounted = createLifeCycle('destroyed');
const onActivated = createLifeCycle('activated');
const onDeactivated = createLifeCycle('deactivated');
const onServerPrefetch = createLifeCycle('serverPrefetch');
const onRenderTracked = createLifeCycle('renderTracked');
const onRenderTriggered = createLifeCycle('renderTriggered');
const injectErrorCapturedHook = createLifeCycle('errorCaptured');
function onErrorCaptured(hook, target = currentInstance) {
    injectErrorCapturedHook(hook, target);
}

/**
 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
 */
const version = '2.7.14';
/**
 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
 */
function defineComponent(options) {
    return options;
}

var vca = /*#__PURE__*/Object.freeze({
  __proto__: null,
  version: version,
  defineComponent: defineComponent,
  ref: ref$1,
  shallowRef: shallowRef,
  isRef: isRef,
  toRef: toRef,
  toRefs: toRefs,
  unref: unref,
  proxyRefs: proxyRefs,
  customRef: customRef,
  triggerRef: triggerRef,
  reactive: reactive,
  isReactive: isReactive,
  isReadonly: isReadonly,
  isShallow: isShallow,
  isProxy: isProxy,
  shallowReactive: shallowReactive,
  markRaw: markRaw,
  toRaw: toRaw,
  readonly: readonly,
  shallowReadonly: shallowReadonly,
  computed: computed,
  watch: watch,
  watchEffect: watchEffect,
  watchPostEffect: watchPostEffect,
  watchSyncEffect: watchSyncEffect,
  EffectScope: EffectScope,
  effectScope: effectScope,
  onScopeDispose: onScopeDispose,
  getCurrentScope: getCurrentScope,
  provide: provide,
  inject: inject,
  h: h,
  getCurrentInstance: getCurrentInstance,
  useSlots: useSlots,
  useAttrs: useAttrs,
  useListeners: useListeners,
  mergeDefaults: mergeDefaults,
  nextTick: nextTick,
  set: set,
  del: del,
  useCssModule: useCssModule,
  useCssVars: useCssVars,
  defineAsyncComponent: defineAsyncComponent,
  onBeforeMount: onBeforeMount,
  onMounted: onMounted,
  onBeforeUpdate: onBeforeUpdate,
  onUpdated: onUpdated,
  onBeforeUnmount: onBeforeUnmount,
  onUnmounted: onUnmounted,
  onActivated: onActivated,
  onDeactivated: onDeactivated,
  onServerPrefetch: onServerPrefetch,
  onRenderTracked: onRenderTracked,
  onRenderTriggered: onRenderTriggered,
  onErrorCaptured: onErrorCaptured
});

const seenObjects = new _Set();
/**
 * Recursively traverse an object to evoke all converted
 * getters, so that every nested property inside the object
 * is collected as a "deep" dependency.
 */
function traverse(val) {
    _traverse(val, seenObjects);
    seenObjects.clear();
    return val;
}
function _traverse(val, seen) {
    let i, keys;
    const isA = isArray(val);
    if ((!isA && !isObject(val)) ||
        val.__v_skip /* ReactiveFlags.SKIP */ ||
        Object.isFrozen(val) ||
        val instanceof VNode) {
        return;
    }
    if (val.__ob__) {
        const depId = val.__ob__.dep.id;
        if (seen.has(depId)) {
            return;
        }
        seen.add(depId);
    }
    if (isA) {
        i = val.length;
        while (i--)
            _traverse(val[i], seen);
    }
    else if (isRef(val)) {
        _traverse(val.value, seen);
    }
    else {
        keys = Object.keys(val);
        i = keys.length;
        while (i--)
            _traverse(val[keys[i]], seen);
    }
}

let uid$1 = 0;
/**
 * A watcher parses an expression, collects dependencies,
 * and fires callback when the expression value changes.
 * This is used for both the $watch() api and directives.
 * @internal
 */
class Watcher {
    constructor(vm, expOrFn, cb, options, isRenderWatcher) {
        recordEffectScope(this, 
        // if the active effect scope is manually created (not a component scope),
        // prioritize it
        activeEffectScope && !activeEffectScope._vm
            ? activeEffectScope
            : vm
                ? vm._scope
                : undefined);
        if ((this.vm = vm) && isRenderWatcher) {
            vm._watcher = this;
        }
        // options
        if (options) {
            this.deep = !!options.deep;
            this.user = !!options.user;
            this.lazy = !!options.lazy;
            this.sync = !!options.sync;
            this.before = options.before;
            {
                this.onTrack = options.onTrack;
                this.onTrigger = options.onTrigger;
            }
        }
        else {
            this.deep = this.user = this.lazy = this.sync = false;
        }
        this.cb = cb;
        this.id = ++uid$1; // uid for batching
        this.active = true;
        this.post = false;
        this.dirty = this.lazy; // for lazy watchers
        this.deps = [];
        this.newDeps = [];
        this.depIds = new _Set();
        this.newDepIds = new _Set();
        this.expression = expOrFn.toString() ;
        // parse expression for getter
        if (isFunction(expOrFn)) {
            this.getter = expOrFn;
        }
        else {
            this.getter = parsePath(expOrFn);
            if (!this.getter) {
                this.getter = noop;
                warn$2(`Failed watching path: "${expOrFn}" ` +
                        'Watcher only accepts simple dot-delimited paths. ' +
                        'For full control, use a function instead.', vm);
            }
        }
        this.value = this.lazy ? undefined : this.get();
    }
    /**
     * Evaluate the getter, and re-collect dependencies.
     */
    get() {
        pushTarget(this);
        let value;
        const vm = this.vm;
        try {
            value = this.getter.call(vm, vm);
        }
        catch (e) {
            if (this.user) {
                handleError(e, vm, `getter for watcher "${this.expression}"`);
            }
            else {
                throw e;
            }
        }
        finally {
            // "touch" every property so they are all tracked as
            // dependencies for deep watching
            if (this.deep) {
                traverse(value);
            }
            popTarget();
            this.cleanupDeps();
        }
        return value;
    }
    /**
     * Add a dependency to this directive.
     */
    addDep(dep) {
        const id = dep.id;
        if (!this.newDepIds.has(id)) {
            this.newDepIds.add(id);
            this.newDeps.push(dep);
            if (!this.depIds.has(id)) {
                dep.addSub(this);
            }
        }
    }
    /**
     * Clean up for dependency collection.
     */
    cleanupDeps() {
        let i = this.deps.length;
        while (i--) {
            const dep = this.deps[i];
            if (!this.newDepIds.has(dep.id)) {
                dep.removeSub(this);
            }
        }
        let tmp = this.depIds;
        this.depIds = this.newDepIds;
        this.newDepIds = tmp;
        this.newDepIds.clear();
        tmp = this.deps;
        this.deps = this.newDeps;
        this.newDeps = tmp;
        this.newDeps.length = 0;
    }
    /**
     * Subscriber interface.
     * Will be called when a dependency changes.
     */
    update() {
        /* istanbul ignore else */
        if (this.lazy) {
            this.dirty = true;
        }
        else if (this.sync) {
            this.run();
        }
        else {
            queueWatcher(this);
        }
    }
    /**
     * Scheduler job interface.
     * Will be called by the scheduler.
     */
    run() {
        if (this.active) {
            const value = this.get();
            if (value !== this.value ||
                // Deep watchers and watchers on Object/Arrays should fire even
                // when the value is the same, because the value may
                // have mutated.
                isObject(value) ||
                this.deep) {
                // set new value
                const oldValue = this.value;
                this.value = value;
                if (this.user) {
                    const info = `callback for watcher "${this.expression}"`;
                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
                }
                else {
                    this.cb.call(this.vm, value, oldValue);
                }
            }
        }
    }
    /**
     * Evaluate the value of the watcher.
     * This only gets called for lazy watchers.
     */
    evaluate() {
        this.value = this.get();
        this.dirty = false;
    }
    /**
     * Depend on all deps collected by this watcher.
     */
    depend() {
        let i = this.deps.length;
        while (i--) {
            this.deps[i].depend();
        }
    }
    /**
     * Remove self from all dependencies' subscriber list.
     */
    teardown() {
        if (this.vm && !this.vm._isBeingDestroyed) {
            remove$2(this.vm._scope.effects, this);
        }
        if (this.active) {
            let i = this.deps.length;
            while (i--) {
                this.deps[i].removeSub(this);
            }
            this.active = false;
            if (this.onStop) {
                this.onStop();
            }
        }
    }
}

const sharedPropertyDefinition = {
    enumerable: true,
    configurable: true,
    get: noop,
    set: noop
};
function proxy(target, sourceKey, key) {
    sharedPropertyDefinition.get = function proxyGetter() {
        return this[sourceKey][key];
    };
    sharedPropertyDefinition.set = function proxySetter(val) {
        this[sourceKey][key] = val;
    };
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function initState(vm) {
    const opts = vm.$options;
    if (opts.props)
        initProps$1(vm, opts.props);
    // Composition API
    initSetup(vm);
    if (opts.methods)
        initMethods(vm, opts.methods);
    if (opts.data) {
        initData(vm);
    }
    else {
        const ob = observe((vm._data = {}));
        ob && ob.vmCount++;
    }
    if (opts.computed)
        initComputed$1(vm, opts.computed);
    if (opts.watch && opts.watch !== nativeWatch) {
        initWatch(vm, opts.watch);
    }
}
function initProps$1(vm, propsOptions) {
    const propsData = vm.$options.propsData || {};
    const props = (vm._props = shallowReactive({}));
    // cache prop keys so that future props updates can iterate using Array
    // instead of dynamic object key enumeration.
    const keys = (vm.$options._propKeys = []);
    const isRoot = !vm.$parent;
    // root instance props should be converted
    if (!isRoot) {
        toggleObserving(false);
    }
    for (const key in propsOptions) {
        keys.push(key);
        const value = validateProp(key, propsOptions, propsData, vm);
        /* istanbul ignore else */
        {
            const hyphenatedKey = hyphenate(key);
            if (isReservedAttribute(hyphenatedKey) ||
                config.isReservedAttr(hyphenatedKey)) {
                warn$2(`"${hyphenatedKey}" is a reserved attribute and cannot be used as component prop.`, vm);
            }
            defineReactive(props, key, value, () => {
                if (!isRoot && !isUpdatingChildComponent) {
                    warn$2(`Avoid mutating a prop directly since the value will be ` +
                        `overwritten whenever the parent component re-renders. ` +
                        `Instead, use a data or computed property based on the prop's ` +
                        `value. Prop being mutated: "${key}"`, vm);
                }
            });
        }
        // static props are already proxied on the component's prototype
        // during Vue.extend(). We only need to proxy props defined at
        // instantiation here.
        if (!(key in vm)) {
            proxy(vm, `_props`, key);
        }
    }
    toggleObserving(true);
}
function initData(vm) {
    let data = vm.$options.data;
    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
    if (!isPlainObject(data)) {
        data = {};
        warn$2('data functions should return an object:\n' +
                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
    }
    // proxy data on instance
    const keys = Object.keys(data);
    const props = vm.$options.props;
    const methods = vm.$options.methods;
    let i = keys.length;
    while (i--) {
        const key = keys[i];
        {
            if (methods && hasOwn(methods, key)) {
                warn$2(`Method "${key}" has already been defined as a data property.`, vm);
            }
        }
        if (props && hasOwn(props, key)) {
            warn$2(`The data property "${key}" is already declared as a prop. ` +
                    `Use prop default value instead.`, vm);
        }
        else if (!isReserved(key)) {
            proxy(vm, `_data`, key);
        }
    }
    // observe data
    const ob = observe(data);
    ob && ob.vmCount++;
}
function getData(data, vm) {
    // #7573 disable dep collection when invoking data getters
    pushTarget();
    try {
        return data.call(vm, vm);
    }
    catch (e) {
        handleError(e, vm, `data()`);
        return {};
    }
    finally {
        popTarget();
    }
}
const computedWatcherOptions = { lazy: true };
function initComputed$1(vm, computed) {
    // $flow-disable-line
    const watchers = (vm._computedWatchers = Object.create(null));
    // computed properties are just getters during SSR
    const isSSR = isServerRendering();
    for (const key in computed) {
        const userDef = computed[key];
        const getter = isFunction(userDef) ? userDef : userDef.get;
        if (getter == null) {
            warn$2(`Getter is missing for computed property "${key}".`, vm);
        }
        if (!isSSR) {
            // create internal watcher for the computed property.
            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
        }
        // component-defined computed properties are already defined on the
        // component prototype. We only need to define computed properties defined
        // at instantiation here.
        if (!(key in vm)) {
            defineComputed(vm, key, userDef);
        }
        else {
            if (key in vm.$data) {
                warn$2(`The computed property "${key}" is already defined in data.`, vm);
            }
            else if (vm.$options.props && key in vm.$options.props) {
                warn$2(`The computed property "${key}" is already defined as a prop.`, vm);
            }
            else if (vm.$options.methods && key in vm.$options.methods) {
                warn$2(`The computed property "${key}" is already defined as a method.`, vm);
            }
        }
    }
}
function defineComputed(target, key, userDef) {
    const shouldCache = !isServerRendering();
    if (isFunction(userDef)) {
        sharedPropertyDefinition.get = shouldCache
            ? createComputedGetter(key)
            : createGetterInvoker(userDef);
        sharedPropertyDefinition.set = noop;
    }
    else {
        sharedPropertyDefinition.get = userDef.get
            ? shouldCache && userDef.cache !== false
                ? createComputedGetter(key)
                : createGetterInvoker(userDef.get)
            : noop;
        sharedPropertyDefinition.set = userDef.set || noop;
    }
    if (sharedPropertyDefinition.set === noop) {
        sharedPropertyDefinition.set = function () {
            warn$2(`Computed property "${key}" was assigned to but it has no setter.`, this);
        };
    }
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function createComputedGetter(key) {
    return function computedGetter() {
        const watcher = this._computedWatchers && this._computedWatchers[key];
        if (watcher) {
            if (watcher.dirty) {
                watcher.evaluate();
            }
            if (Dep.target) {
                if (Dep.target.onTrack) {
                    Dep.target.onTrack({
                        effect: Dep.target,
                        target: this,
                        type: "get" /* TrackOpTypes.GET */,
                        key
                    });
                }
                watcher.depend();
            }
            return watcher.value;
        }
    };
}
function createGetterInvoker(fn) {
    return function computedGetter() {
        return fn.call(this, this);
    };
}
function initMethods(vm, methods) {
    const props = vm.$options.props;
    for (const key in methods) {
        {
            if (typeof methods[key] !== 'function') {
                warn$2(`Method "${key}" has type "${typeof methods[key]}" in the component definition. ` +
                    `Did you reference the function correctly?`, vm);
            }
            if (props && hasOwn(props, key)) {
                warn$2(`Method "${key}" has already been defined as a prop.`, vm);
            }
            if (key in vm && isReserved(key)) {
                warn$2(`Method "${key}" conflicts with an existing Vue instance method. ` +
                    `Avoid defining component methods that start with _ or $.`);
            }
        }
        vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);
    }
}
function initWatch(vm, watch) {
    for (const key in watch) {
        const handler = watch[key];
        if (isArray(handler)) {
            for (let i = 0; i < handler.length; i++) {
                createWatcher(vm, key, handler[i]);
            }
        }
        else {
            createWatcher(vm, key, handler);
        }
    }
}
function createWatcher(vm, expOrFn, handler, options) {
    if (isPlainObject(handler)) {
        options = handler;
        handler = handler.handler;
    }
    if (typeof handler === 'string') {
        handler = vm[handler];
    }
    return vm.$watch(expOrFn, handler, options);
}
function stateMixin(Vue) {
    // flow somehow has problems with directly declared definition object
    // when using Object.defineProperty, so we have to procedurally build up
    // the object here.
    const dataDef = {};
    dataDef.get = function () {
        return this._data;
    };
    const propsDef = {};
    propsDef.get = function () {
        return this._props;
    };
    {
        dataDef.set = function () {
            warn$2('Avoid replacing instance root $data. ' +
                'Use nested data properties instead.', this);
        };
        propsDef.set = function () {
            warn$2(`$props is readonly.`, this);
        };
    }
    Object.defineProperty(Vue.prototype, '$data', dataDef);
    Object.defineProperty(Vue.prototype, '$props', propsDef);
    Vue.prototype.$set = set;
    Vue.prototype.$delete = del;
    Vue.prototype.$watch = function (expOrFn, cb, options) {
        const vm = this;
        if (isPlainObject(cb)) {
            return createWatcher(vm, expOrFn, cb, options);
        }
        options = options || {};
        options.user = true;
        const watcher = new Watcher(vm, expOrFn, cb, options);
        if (options.immediate) {
            const info = `callback for immediate watcher "${watcher.expression}"`;
            pushTarget();
            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
            popTarget();
        }
        return function unwatchFn() {
            watcher.teardown();
        };
    };
}

function initProvide(vm) {
    const provideOption = vm.$options.provide;
    if (provideOption) {
        const provided = isFunction(provideOption)
            ? provideOption.call(vm)
            : provideOption;
        if (!isObject(provided)) {
            return;
        }
        const source = resolveProvided(vm);
        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
        // iterate the keys ourselves.
        const keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
        for (let i = 0; i < keys.length; i++) {
            const key = keys[i];
            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
        }
    }
}
function initInjections(vm) {
    const result = resolveInject(vm.$options.inject, vm);
    if (result) {
        toggleObserving(false);
        Object.keys(result).forEach(key => {
            /* istanbul ignore else */
            {
                defineReactive(vm, key, result[key], () => {
                    warn$2(`Avoid mutating an injected value directly since the changes will be ` +
                        `overwritten whenever the provided component re-renders. ` +
                        `injection being mutated: "${key}"`, vm);
                });
            }
        });
        toggleObserving(true);
    }
}
function resolveInject(inject, vm) {
    if (inject) {
        // inject is :any because flow is not smart enough to figure out cached
        const result = Object.create(null);
        const keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
        for (let i = 0; i < keys.length; i++) {
            const key = keys[i];
            // #6574 in case the inject object is observed...
            if (key === '__ob__')
                continue;
            const provideKey = inject[key].from;
            if (provideKey in vm._provided) {
                result[key] = vm._provided[provideKey];
            }
            else if ('default' in inject[key]) {
                const provideDefault = inject[key].default;
                result[key] = isFunction(provideDefault)
                    ? provideDefault.call(vm)
                    : provideDefault;
            }
            else {
                warn$2(`Injection "${key}" not found`, vm);
            }
        }
        return result;
    }
}

let uid = 0;
function initMixin$1(Vue) {
    Vue.prototype._init = function (options) {
        const vm = this;
        // a uid
        vm._uid = uid++;
        let startTag, endTag;
        /* istanbul ignore if */
        if (config.performance && mark) {
            startTag = `vue-perf-start:${vm._uid}`;
            endTag = `vue-perf-end:${vm._uid}`;
            mark(startTag);
        }
        // a flag to mark this as a Vue instance without having to do instanceof
        // check
        vm._isVue = true;
        // avoid instances from being observed
        vm.__v_skip = true;
        // effect scope
        vm._scope = new EffectScope(true /* detached */);
        vm._scope._vm = true;
        // merge options
        if (options && options._isComponent) {
            // optimize internal component instantiation
            // since dynamic options merging is pretty slow, and none of the
            // internal component options needs special treatment.
            initInternalComponent(vm, options);
        }
        else {
            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
        }
        /* istanbul ignore else */
        {
            initProxy(vm);
        }
        // expose real self
        vm._self = vm;
        initLifecycle(vm);
        initEvents(vm);
        initRender(vm);
        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
        initInjections(vm); // resolve injections before data/props
        initState(vm);
        initProvide(vm); // resolve provide after data/props
        callHook$1(vm, 'created');
        /* istanbul ignore if */
        if (config.performance && mark) {
            vm._name = formatComponentName(vm, false);
            mark(endTag);
            measure(`vue ${vm._name} init`, startTag, endTag);
        }
        if (vm.$options.el) {
            vm.$mount(vm.$options.el);
        }
    };
}
function initInternalComponent(vm, options) {
    const opts = (vm.$options = Object.create(vm.constructor.options));
    // doing this because it's faster than dynamic enumeration.
    const parentVnode = options._parentVnode;
    opts.parent = options.parent;
    opts._parentVnode = parentVnode;
    const vnodeComponentOptions = parentVnode.componentOptions;
    opts.propsData = vnodeComponentOptions.propsData;
    opts._parentListeners = vnodeComponentOptions.listeners;
    opts._renderChildren = vnodeComponentOptions.children;
    opts._componentTag = vnodeComponentOptions.tag;
    if (options.render) {
        opts.render = options.render;
        opts.staticRenderFns = options.staticRenderFns;
    }
}
function resolveConstructorOptions(Ctor) {
    let options = Ctor.options;
    if (Ctor.super) {
        const superOptions = resolveConstructorOptions(Ctor.super);
        const cachedSuperOptions = Ctor.superOptions;
        if (superOptions !== cachedSuperOptions) {
            // super option changed,
            // need to resolve new options.
            Ctor.superOptions = superOptions;
            // check if there are any late-modified/attached options (#4976)
            const modifiedOptions = resolveModifiedOptions(Ctor);
            // update base extend options
            if (modifiedOptions) {
                extend(Ctor.extendOptions, modifiedOptions);
            }
            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
            if (options.name) {
                options.components[options.name] = Ctor;
            }
        }
    }
    return options;
}
function resolveModifiedOptions(Ctor) {
    let modified;
    const latest = Ctor.options;
    const sealed = Ctor.sealedOptions;
    for (const key in latest) {
        if (latest[key] !== sealed[key]) {
            if (!modified)
                modified = {};
            modified[key] = latest[key];
        }
    }
    return modified;
}

function FunctionalRenderContext(data, props, children, parent, Ctor) {
    const options = Ctor.options;
    // ensure the createElement function in functional components
    // gets a unique context - this is necessary for correct named slot check
    let contextVm;
    if (hasOwn(parent, '_uid')) {
        contextVm = Object.create(parent);
        contextVm._original = parent;
    }
    else {
        // the context vm passed in is a functional context as well.
        // in this case we want to make sure we are able to get a hold to the
        // real context instance.
        contextVm = parent;
        // @ts-ignore
        parent = parent._original;
    }
    const isCompiled = isTrue(options._compiled);
    const needNormalization = !isCompiled;
    this.data = data;
    this.props = props;
    this.children = children;
    this.parent = parent;
    this.listeners = data.on || emptyObject;
    this.injections = resolveInject(options.inject, parent);
    this.slots = () => {
        if (!this.$slots) {
            normalizeScopedSlots(parent, data.scopedSlots, (this.$slots = resolveSlots(children, parent)));
        }
        return this.$slots;
    };
    Object.defineProperty(this, 'scopedSlots', {
        enumerable: true,
        get() {
            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
        }
    });
    // support for compiled functional template
    if (isCompiled) {
        // exposing $options for renderStatic()
        this.$options = options;
        // pre-resolve slots for renderSlot()
        this.$slots = this.slots();
        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
    }
    if (options._scopeId) {
        this._c = (a, b, c, d) => {
            const vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
            if (vnode && !isArray(vnode)) {
                vnode.fnScopeId = options._scopeId;
                vnode.fnContext = parent;
            }
            return vnode;
        };
    }
    else {
        this._c = (a, b, c, d) => createElement$1(contextVm, a, b, c, d, needNormalization);
    }
}
installRenderHelpers(FunctionalRenderContext.prototype);
function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
    const options = Ctor.options;
    const props = {};
    const propOptions = options.props;
    if (isDef(propOptions)) {
        for (const key in propOptions) {
            props[key] = validateProp(key, propOptions, propsData || emptyObject);
        }
    }
    else {
        if (isDef(data.attrs))
            mergeProps(props, data.attrs);
        if (isDef(data.props))
            mergeProps(props, data.props);
    }
    const renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
    const vnode = options.render.call(null, renderContext._c, renderContext);
    if (vnode instanceof VNode) {
        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
    }
    else if (isArray(vnode)) {
        const vnodes = normalizeChildren(vnode) || [];
        const res = new Array(vnodes.length);
        for (let i = 0; i < vnodes.length; i++) {
            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
        }
        return res;
    }
}
function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
    // #7817 clone node before setting fnContext, otherwise if the node is reused
    // (e.g. it was from a cached normal slot) the fnContext causes named slots
    // that should not be matched to match.
    const clone = cloneVNode(vnode);
    clone.fnContext = contextVm;
    clone.fnOptions = options;
    {
        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
            renderContext;
    }
    if (data.slot) {
        (clone.data || (clone.data = {})).slot = data.slot;
    }
    return clone;
}
function mergeProps(to, from) {
    for (const key in from) {
        to[camelize(key)] = from[key];
    }
}

function getComponentName(options) {
    return options.name || options.__name || options._componentTag;
}
// inline hooks to be invoked on component VNodes during patch
const componentVNodeHooks = {
    init(vnode, hydrating) {
        if (vnode.componentInstance &&
            !vnode.componentInstance._isDestroyed &&
            vnode.data.keepAlive) {
            // kept-alive components, treat as a patch
            const mountedNode = vnode; // work around flow
            componentVNodeHooks.prepatch(mountedNode, mountedNode);
        }
        else {
            const child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
        }
    },
    prepatch(oldVnode, vnode) {
        const options = vnode.componentOptions;
        const child = (vnode.componentInstance = oldVnode.componentInstance);
        updateChildComponent(child, options.propsData, // updated props
        options.listeners, // updated listeners
        vnode, // new parent vnode
        options.children // new children
        );
    },
    insert(vnode) {
        const { context, componentInstance } = vnode;
        if (!componentInstance._isMounted) {
            componentInstance._isMounted = true;
            callHook$1(componentInstance, 'mounted');
        }
        if (vnode.data.keepAlive) {
            if (context._isMounted) {
                // vue-router#1212
                // During updates, a kept-alive component's child components may
                // change, so directly walking the tree here may call activated hooks
                // on incorrect children. Instead we push them into a queue which will
                // be processed after the whole patch process ended.
                queueActivatedComponent(componentInstance);
            }
            else {
                activateChildComponent(componentInstance, true /* direct */);
            }
        }
    },
    destroy(vnode) {
        const { componentInstance } = vnode;
        if (!componentInstance._isDestroyed) {
            if (!vnode.data.keepAlive) {
                componentInstance.$destroy();
            }
            else {
                deactivateChildComponent(componentInstance, true /* direct */);
            }
        }
    }
};
const hooksToMerge = Object.keys(componentVNodeHooks);
function createComponent(Ctor, data, context, children, tag) {
    if (isUndef(Ctor)) {
        return;
    }
    const baseCtor = context.$options._base;
    // plain options object: turn it into a constructor
    if (isObject(Ctor)) {
        Ctor = baseCtor.extend(Ctor);
    }
    // if at this stage it's not a constructor or an async component factory,
    // reject.
    if (typeof Ctor !== 'function') {
        {
            warn$2(`Invalid Component definition: ${String(Ctor)}`, context);
        }
        return;
    }
    // async component
    let asyncFactory;
    // @ts-expect-error
    if (isUndef(Ctor.cid)) {
        asyncFactory = Ctor;
        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
        if (Ctor === undefined) {
            // return a placeholder node for async component, which is rendered
            // as a comment node but preserves all the raw information for the node.
            // the information will be used for async server-rendering and hydration.
            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
        }
    }
    data = data || {};
    // resolve constructor options in case global mixins are applied after
    // component constructor creation
    resolveConstructorOptions(Ctor);
    // transform component v-model data into props & events
    if (isDef(data.model)) {
        // @ts-expect-error
        transformModel(Ctor.options, data);
    }
    // extract props
    // @ts-expect-error
    const propsData = extractPropsFromVNodeData(data, Ctor, tag);
    // functional component
    // @ts-expect-error
    if (isTrue(Ctor.options.functional)) {
        return createFunctionalComponent(Ctor, propsData, data, context, children);
    }
    // extract listeners, since these needs to be treated as
    // child component listeners instead of DOM listeners
    const listeners = data.on;
    // replace with listeners with .native modifier
    // so it gets processed during parent component patch.
    data.on = data.nativeOn;
    // @ts-expect-error
    if (isTrue(Ctor.options.abstract)) {
        // abstract components do not keep anything
        // other than props & listeners & slot
        // work around flow
        const slot = data.slot;
        data = {};
        if (slot) {
            data.slot = slot;
        }
    }
    // install component management hooks onto the placeholder node
    installComponentHooks(data);
    // return a placeholder vnode
    // @ts-expect-error
    const name = getComponentName(Ctor.options) || tag;
    const vnode = new VNode(
    // @ts-expect-error
    `vue-component-${Ctor.cid}${name ? `-${name}` : ''}`, data, undefined, undefined, undefined, context, 
    // @ts-expect-error
    { Ctor, propsData, listeners, tag, children }, asyncFactory);
    return vnode;
}
function createComponentInstanceForVnode(
// we know it's MountedComponentVNode but flow doesn't
vnode, 
// activeInstance in lifecycle state
parent) {
    const options = {
        _isComponent: true,
        _parentVnode: vnode,
        parent
    };
    // check inline-template render functions
    const inlineTemplate = vnode.data.inlineTemplate;
    if (isDef(inlineTemplate)) {
        options.render = inlineTemplate.render;
        options.staticRenderFns = inlineTemplate.staticRenderFns;
    }
    return new vnode.componentOptions.Ctor(options);
}
function installComponentHooks(data) {
    const hooks = data.hook || (data.hook = {});
    for (let i = 0; i < hooksToMerge.length; i++) {
        const key = hooksToMerge[i];
        const existing = hooks[key];
        const toMerge = componentVNodeHooks[key];
        // @ts-expect-error
        if (existing !== toMerge && !(existing && existing._merged)) {
            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
        }
    }
}
function mergeHook(f1, f2) {
    const merged = (a, b) => {
        // flow complains about extra args which is why we use any
        f1(a, b);
        f2(a, b);
    };
    merged._merged = true;
    return merged;
}
// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel(options, data) {
    const prop = (options.model && options.model.prop) || 'value';
    const event = (options.model && options.model.event) || 'input';
    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
    const on = data.on || (data.on = {});
    const existing = on[event];
    const callback = data.model.callback;
    if (isDef(existing)) {
        if (isArray(existing)
            ? existing.indexOf(callback) === -1
            : existing !== callback) {
            on[event] = [callback].concat(existing);
        }
    }
    else {
        on[event] = callback;
    }
}

let warn$2 = noop;
let tip = noop;
let generateComponentTrace; // work around flow check
let formatComponentName;
{
    const hasConsole = typeof console !== 'undefined';
    const classifyRE = /(?:^|[-_])(\w)/g;
    const classify = str => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');
    warn$2 = (msg, vm = currentInstance) => {
        const trace = vm ? generateComponentTrace(vm) : '';
        if (config.warnHandler) {
            config.warnHandler.call(null, msg, vm, trace);
        }
        else if (hasConsole && !config.silent) {
            console.error(`[Vue warn]: ${msg}${trace}`);
        }
    };
    tip = (msg, vm) => {
        if (hasConsole && !config.silent) {
            console.warn(`[Vue tip]: ${msg}` + (vm ? generateComponentTrace(vm) : ''));
        }
    };
    formatComponentName = (vm, includeFile) => {
        if (vm.$root === vm) {
            return '<Root>';
        }
        const options = isFunction(vm) && vm.cid != null
            ? vm.options
            : vm._isVue
                ? vm.$options || vm.constructor.options
                : vm;
        let name = getComponentName(options);
        const file = options.__file;
        if (!name && file) {
            const match = file.match(/([^/\\]+)\.vue$/);
            name = match && match[1];
        }
        return ((name ? `<${classify(name)}>` : `<Anonymous>`) +
            (file && includeFile !== false ? ` at ${file}` : ''));
    };
    const repeat = (str, n) => {
        let res = '';
        while (n) {
            if (n % 2 === 1)
                res += str;
            if (n > 1)
                str += str;
            n >>= 1;
        }
        return res;
    };
    generateComponentTrace = (vm) => {
        if (vm._isVue && vm.$parent) {
            const tree = [];
            let currentRecursiveSequence = 0;
            while (vm) {
                if (tree.length > 0) {
                    const last = tree[tree.length - 1];
                    if (last.constructor === vm.constructor) {
                        currentRecursiveSequence++;
                        vm = vm.$parent;
                        continue;
                    }
                    else if (currentRecursiveSequence > 0) {
                        tree[tree.length - 1] = [last, currentRecursiveSequence];
                        currentRecursiveSequence = 0;
                    }
                }
                tree.push(vm);
                vm = vm.$parent;
            }
            return ('\n\nfound in\n\n' +
                tree
                    .map((vm, i) => `${i === 0 ? '---> ' : repeat(' ', 5 + i * 2)}${isArray(vm)
                    ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
                    : formatComponentName(vm)}`)
                    .join('\n'));
        }
        else {
            return `\n\n(found in ${formatComponentName(vm)})`;
        }
    };
}

/**
 * Option overwriting strategies are functions that handle
 * how to merge a parent option value and a child option
 * value into the final value.
 */
const strats = config.optionMergeStrategies;
/**
 * Options with restrictions
 */
{
    strats.el = strats.propsData = function (parent, child, vm, key) {
        if (!vm) {
            warn$2(`option "${key}" can only be used during instance ` +
                'creation with the `new` keyword.');
        }
        return defaultStrat(parent, child);
    };
}
/**
 * Helper that recursively merges two data objects together.
 */
function mergeData(to, from, recursive = true) {
    if (!from)
        return to;
    let key, toVal, fromVal;
    const keys = hasSymbol
        ? Reflect.ownKeys(from)
        : Object.keys(from);
    for (let i = 0; i < keys.length; i++) {
        key = keys[i];
        // in case the object is already observed...
        if (key === '__ob__')
            continue;
        toVal = to[key];
        fromVal = from[key];
        if (!recursive || !hasOwn(to, key)) {
            set(to, key, fromVal);
        }
        else if (toVal !== fromVal &&
            isPlainObject(toVal) &&
            isPlainObject(fromVal)) {
            mergeData(toVal, fromVal);
        }
    }
    return to;
}
/**
 * Data
 */
function mergeDataOrFn(parentVal, childVal, vm) {
    if (!vm) {
        // in a Vue.extend merge, both should be functions
        if (!childVal) {
            return parentVal;
        }
        if (!parentVal) {
            return childVal;
        }
        // when parentVal & childVal are both present,
        // we need to return a function that returns the
        // merged result of both functions... no need to
        // check if parentVal is a function here because
        // it has to be a function to pass previous merges.
        return function mergedDataFn() {
            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
        };
    }
    else {
        return function mergedInstanceDataFn() {
            // instance merge
            const instanceData = isFunction(childVal)
                ? childVal.call(vm, vm)
                : childVal;
            const defaultData = isFunction(parentVal)
                ? parentVal.call(vm, vm)
                : parentVal;
            if (instanceData) {
                return mergeData(instanceData, defaultData);
            }
            else {
                return defaultData;
            }
        };
    }
}
strats.data = function (parentVal, childVal, vm) {
    if (!vm) {
        if (childVal && typeof childVal !== 'function') {
            warn$2('The "data" option should be a function ' +
                    'that returns a per-instance value in component ' +
                    'definitions.', vm);
            return parentVal;
        }
        return mergeDataOrFn(parentVal, childVal);
    }
    return mergeDataOrFn(parentVal, childVal, vm);
};
/**
 * Hooks and props are merged as arrays.
 */
function mergeLifecycleHook(parentVal, childVal) {
    const res = childVal
        ? parentVal
            ? parentVal.concat(childVal)
            : isArray(childVal)
                ? childVal
                : [childVal]
        : parentVal;
    return res ? dedupeHooks(res) : res;
}
function dedupeHooks(hooks) {
    const res = [];
    for (let i = 0; i < hooks.length; i++) {
        if (res.indexOf(hooks[i]) === -1) {
            res.push(hooks[i]);
        }
    }
    return res;
}
LIFECYCLE_HOOKS.forEach(hook => {
    strats[hook] = mergeLifecycleHook;
});
/**
 * Assets
 *
 * When a vm is present (instance creation), we need to do
 * a three-way merge between constructor options, instance
 * options and parent options.
 */
function mergeAssets(parentVal, childVal, vm, key) {
    const res = Object.create(parentVal || null);
    if (childVal) {
        assertObjectType(key, childVal, vm);
        return extend(res, childVal);
    }
    else {
        return res;
    }
}
ASSET_TYPES.forEach(function (type) {
    strats[type + 's'] = mergeAssets;
});
/**
 * Watchers.
 *
 * Watchers hashes should not overwrite one
 * another, so we merge them as arrays.
 */
strats.watch = function (parentVal, childVal, vm, key) {
    // work around Firefox's Object.prototype.watch...
    //@ts-expect-error work around
    if (parentVal === nativeWatch)
        parentVal = undefined;
    //@ts-expect-error work around
    if (childVal === nativeWatch)
        childVal = undefined;
    /* istanbul ignore if */
    if (!childVal)
        return Object.create(parentVal || null);
    {
        assertObjectType(key, childVal, vm);
    }
    if (!parentVal)
        return childVal;
    const ret = {};
    extend(ret, parentVal);
    for (const key in childVal) {
        let parent = ret[key];
        const child = childVal[key];
        if (parent && !isArray(parent)) {
            parent = [parent];
        }
        ret[key] = parent ? parent.concat(child) : isArray(child) ? child : [child];
    }
    return ret;
};
/**
 * Other object hashes.
 */
strats.props =
    strats.methods =
        strats.inject =
            strats.computed =
                function (parentVal, childVal, vm, key) {
                    if (childVal && true) {
                        assertObjectType(key, childVal, vm);
                    }
                    if (!parentVal)
                        return childVal;
                    const ret = Object.create(null);
                    extend(ret, parentVal);
                    if (childVal)
                        extend(ret, childVal);
                    return ret;
                };
strats.provide = function (parentVal, childVal) {
    if (!parentVal)
        return childVal;
    return function () {
        const ret = Object.create(null);
        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
        if (childVal) {
            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
            );
        }
        return ret;
    };
};
/**
 * Default strategy.
 */
const defaultStrat = function (parentVal, childVal) {
    return childVal === undefined ? parentVal : childVal;
};
/**
 * Validate component names
 */
function checkComponents(options) {
    for (const key in options.components) {
        validateComponentName(key);
    }
}
function validateComponentName(name) {
    if (!new RegExp(`^[a-zA-Z][\\-\\.0-9_${unicodeRegExp.source}]*$`).test(name)) {
        warn$2('Invalid component name: "' +
            name +
            '". Component names ' +
            'should conform to valid custom element name in html5 specification.');
    }
    if (isBuiltInTag(name) || config.isReservedTag(name)) {
        warn$2('Do not use built-in or reserved HTML elements as component ' +
            'id: ' +
            name);
    }
}
/**
 * Ensure all props option syntax are normalized into the
 * Object-based format.
 */
function normalizeProps(options, vm) {
    const props = options.props;
    if (!props)
        return;
    const res = {};
    let i, val, name;
    if (isArray(props)) {
        i = props.length;
        while (i--) {
            val = props[i];
            if (typeof val === 'string') {
                name = camelize(val);
                res[name] = { type: null };
            }
            else {
                warn$2('props must be strings when using array syntax.');
            }
        }
    }
    else if (isPlainObject(props)) {
        for (const key in props) {
            val = props[key];
            name = camelize(key);
            res[name] = isPlainObject(val) ? val : { type: val };
        }
    }
    else {
        warn$2(`Invalid value for option "props": expected an Array or an Object, ` +
            `but got ${toRawType(props)}.`, vm);
    }
    options.props = res;
}
/**
 * Normalize all injections into Object-based format
 */
function normalizeInject(options, vm) {
    const inject = options.inject;
    if (!inject)
        return;
    const normalized = (options.inject = {});
    if (isArray(inject)) {
        for (let i = 0; i < inject.length; i++) {
            normalized[inject[i]] = { from: inject[i] };
        }
    }
    else if (isPlainObject(inject)) {
        for (const key in inject) {
            const val = inject[key];
            normalized[key] = isPlainObject(val)
                ? extend({ from: key }, val)
                : { from: val };
        }
    }
    else {
        warn$2(`Invalid value for option "inject": expected an Array or an Object, ` +
            `but got ${toRawType(inject)}.`, vm);
    }
}
/**
 * Normalize raw function directives into object format.
 */
function normalizeDirectives$1(options) {
    const dirs = options.directives;
    if (dirs) {
        for (const key in dirs) {
            const def = dirs[key];
            if (isFunction(def)) {
                dirs[key] = { bind: def, update: def };
            }
        }
    }
}
function assertObjectType(name, value, vm) {
    if (!isPlainObject(value)) {
        warn$2(`Invalid value for option "${name}": expected an Object, ` +
            `but got ${toRawType(value)}.`, vm);
    }
}
/**
 * Merge two option objects into a new one.
 * Core utility used in both instantiation and inheritance.
 */
function mergeOptions(parent, child, vm) {
    {
        checkComponents(child);
    }
    if (isFunction(child)) {
        // @ts-expect-error
        child = child.options;
    }
    normalizeProps(child, vm);
    normalizeInject(child, vm);
    normalizeDirectives$1(child);
    // Apply extends and mixins on the child options,
    // but only if it is a raw options object that isn't
    // the result of another mergeOptions call.
    // Only merged options has the _base property.
    if (!child._base) {
        if (child.extends) {
            parent = mergeOptions(parent, child.extends, vm);
        }
        if (child.mixins) {
            for (let i = 0, l = child.mixins.length; i < l; i++) {
                parent = mergeOptions(parent, child.mixins[i], vm);
            }
        }
    }
    const options = {};
    let key;
    for (key in parent) {
        mergeField(key);
    }
    for (key in child) {
        if (!hasOwn(parent, key)) {
            mergeField(key);
        }
    }
    function mergeField(key) {
        const strat = strats[key] || defaultStrat;
        options[key] = strat(parent[key], child[key], vm, key);
    }
    return options;
}
/**
 * Resolve an asset.
 * This function is used because child instances need access
 * to assets defined in its ancestor chain.
 */
function resolveAsset(options, type, id, warnMissing) {
    /* istanbul ignore if */
    if (typeof id !== 'string') {
        return;
    }
    const assets = options[type];
    // check local registration variations first
    if (hasOwn(assets, id))
        return assets[id];
    const camelizedId = camelize(id);
    if (hasOwn(assets, camelizedId))
        return assets[camelizedId];
    const PascalCaseId = capitalize(camelizedId);
    if (hasOwn(assets, PascalCaseId))
        return assets[PascalCaseId];
    // fallback to prototype chain
    const res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
    if (warnMissing && !res) {
        warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
    }
    return res;
}

function validateProp(key, propOptions, propsData, vm) {
    const prop = propOptions[key];
    const absent = !hasOwn(propsData, key);
    let value = propsData[key];
    // boolean casting
    const booleanIndex = getTypeIndex(Boolean, prop.type);
    if (booleanIndex > -1) {
        if (absent && !hasOwn(prop, 'default')) {
            value = false;
        }
        else if (value === '' || value === hyphenate(key)) {
            // only cast empty string / same name to boolean if
            // boolean has higher priority
            const stringIndex = getTypeIndex(String, prop.type);
            if (stringIndex < 0 || booleanIndex < stringIndex) {
                value = true;
            }
        }
    }
    // check default value
    if (value === undefined) {
        value = getPropDefaultValue(vm, prop, key);
        // since the default value is a fresh copy,
        // make sure to observe it.
        const prevShouldObserve = shouldObserve;
        toggleObserving(true);
        observe(value);
        toggleObserving(prevShouldObserve);
    }
    {
        assertProp(prop, key, value, vm, absent);
    }
    return value;
}
/**
 * Get the default value of a prop.
 */
function getPropDefaultValue(vm, prop, key) {
    // no default, return undefined
    if (!hasOwn(prop, 'default')) {
        return undefined;
    }
    const def = prop.default;
    // warn against non-factory defaults for Object & Array
    if (isObject(def)) {
        warn$2('Invalid default value for prop "' +
            key +
            '": ' +
            'Props with type Object/Array must use a factory function ' +
            'to return the default value.', vm);
    }
    // the raw prop value was also undefined from previous render,
    // return previous default value to avoid unnecessary watcher trigger
    if (vm &&
        vm.$options.propsData &&
        vm.$options.propsData[key] === undefined &&
        vm._props[key] !== undefined) {
        return vm._props[key];
    }
    // call factory function for non-Function types
    // a value is Function if its prototype is function even across different execution context
    return isFunction(def) && getType(prop.type) !== 'Function'
        ? def.call(vm)
        : def;
}
/**
 * Assert whether a prop is valid.
 */
function assertProp(prop, name, value, vm, absent) {
    if (prop.required && absent) {
        warn$2('Missing required prop: "' + name + '"', vm);
        return;
    }
    if (value == null && !prop.required) {
        return;
    }
    let type = prop.type;
    let valid = !type || type === true;
    const expectedTypes = [];
    if (type) {
        if (!isArray(type)) {
            type = [type];
        }
        for (let i = 0; i < type.length && !valid; i++) {
            const assertedType = assertType(value, type[i], vm);
            expectedTypes.push(assertedType.expectedType || '');
            valid = assertedType.valid;
        }
    }
    const haveExpectedTypes = expectedTypes.some(t => t);
    if (!valid && haveExpectedTypes) {
        warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
        return;
    }
    const validator = prop.validator;
    if (validator) {
        if (!validator(value)) {
            warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
        }
    }
}
const simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
function assertType(value, type, vm) {
    let valid;
    const expectedType = getType(type);
    if (simpleCheckRE.test(expectedType)) {
        const t = typeof value;
        valid = t === expectedType.toLowerCase();
        // for primitive wrapper objects
        if (!valid && t === 'object') {
            valid = value instanceof type;
        }
    }
    else if (expectedType === 'Object') {
        valid = isPlainObject(value);
    }
    else if (expectedType === 'Array') {
        valid = isArray(value);
    }
    else {
        try {
            valid = value instanceof type;
        }
        catch (e) {
            warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
            valid = false;
        }
    }
    return {
        valid,
        expectedType
    };
}
const functionTypeCheckRE = /^\s*function (\w+)/;
/**
 * Use function string name to check built-in types,
 * because a simple equality check will fail when running
 * across different vms / iframes.
 */
function getType(fn) {
    const match = fn && fn.toString().match(functionTypeCheckRE);
    return match ? match[1] : '';
}
function isSameType(a, b) {
    return getType(a) === getType(b);
}
function getTypeIndex(type, expectedTypes) {
    if (!isArray(expectedTypes)) {
        return isSameType(expectedTypes, type) ? 0 : -1;
    }
    for (let i = 0, len = expectedTypes.length; i < len; i++) {
        if (isSameType(expectedTypes[i], type)) {
            return i;
        }
    }
    return -1;
}
function getInvalidTypeMessage(name, value, expectedTypes) {
    let message = `Invalid prop: type check failed for prop "${name}".` +
        ` Expected ${expectedTypes.map(capitalize).join(', ')}`;
    const expectedType = expectedTypes[0];
    const receivedType = toRawType(value);
    // check if we need to specify expected value
    if (expectedTypes.length === 1 &&
        isExplicable(expectedType) &&
        isExplicable(typeof value) &&
        !isBoolean(expectedType, receivedType)) {
        message += ` with value ${styleValue(value, expectedType)}`;
    }
    message += `, got ${receivedType} `;
    // check if we need to specify received value
    if (isExplicable(receivedType)) {
        message += `with value ${styleValue(value, receivedType)}.`;
    }
    return message;
}
function styleValue(value, type) {
    if (type === 'String') {
        return `"${value}"`;
    }
    else if (type === 'Number') {
        return `${Number(value)}`;
    }
    else {
        return `${value}`;
    }
}
const EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
function isExplicable(value) {
    return EXPLICABLE_TYPES.some(elem => value.toLowerCase() === elem);
}
function isBoolean(...args) {
    return args.some(elem => elem.toLowerCase() === 'boolean');
}

function Vue(options) {
    if (!(this instanceof Vue)) {
        warn$2('Vue is a constructor and should be called with the `new` keyword');
    }
    this._init(options);
}
//@ts-expect-error Vue has function type
initMixin$1(Vue);
//@ts-expect-error Vue has function type
stateMixin(Vue);
//@ts-expect-error Vue has function type
eventsMixin(Vue);
//@ts-expect-error Vue has function type
lifecycleMixin(Vue);
//@ts-expect-error Vue has function type
renderMixin(Vue);

function initUse(Vue) {
    Vue.use = function (plugin) {
        const installedPlugins = this._installedPlugins || (this._installedPlugins = []);
        if (installedPlugins.indexOf(plugin) > -1) {
            return this;
        }
        // additional parameters
        const args = toArray(arguments, 1);
        args.unshift(this);
        if (isFunction(plugin.install)) {
            plugin.install.apply(plugin, args);
        }
        else if (isFunction(plugin)) {
            plugin.apply(null, args);
        }
        installedPlugins.push(plugin);
        return this;
    };
}

function initMixin(Vue) {
    Vue.mixin = function (mixin) {
        this.options = mergeOptions(this.options, mixin);
        return this;
    };
}

function initExtend(Vue) {
    /**
     * Each instance constructor, including Vue, has a unique
     * cid. This enables us to create wrapped "child
     * constructors" for prototypal inheritance and cache them.
     */
    Vue.cid = 0;
    let cid = 1;
    /**
     * Class inheritance
     */
    Vue.extend = function (extendOptions) {
        extendOptions = extendOptions || {};
        const Super = this;
        const SuperId = Super.cid;
        const cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
        if (cachedCtors[SuperId]) {
            return cachedCtors[SuperId];
        }
        const name = getComponentName(extendOptions) || getComponentName(Super.options);
        if (name) {
            validateComponentName(name);
        }
        const Sub = function VueComponent(options) {
            this._init(options);
        };
        Sub.prototype = Object.create(Super.prototype);
        Sub.prototype.constructor = Sub;
        Sub.cid = cid++;
        Sub.options = mergeOptions(Super.options, extendOptions);
        Sub['super'] = Super;
        // For props and computed properties, we define the proxy getters on
        // the Vue instances at extension time, on the extended prototype. This
        // avoids Object.defineProperty calls for each instance created.
        if (Sub.options.props) {
            initProps(Sub);
        }
        if (Sub.options.computed) {
            initComputed(Sub);
        }
        // allow further extension/mixin/plugin usage
        Sub.extend = Super.extend;
        Sub.mixin = Super.mixin;
        Sub.use = Super.use;
        // create asset registers, so extended classes
        // can have their private assets too.
        ASSET_TYPES.forEach(function (type) {
            Sub[type] = Super[type];
        });
        // enable recursive self-lookup
        if (name) {
            Sub.options.components[name] = Sub;
        }
        // keep a reference to the super options at extension time.
        // later at instantiation we can check if Super's options have
        // been updated.
        Sub.superOptions = Super.options;
        Sub.extendOptions = extendOptions;
        Sub.sealedOptions = extend({}, Sub.options);
        // cache constructor
        cachedCtors[SuperId] = Sub;
        return Sub;
    };
}
function initProps(Comp) {
    const props = Comp.options.props;
    for (const key in props) {
        proxy(Comp.prototype, `_props`, key);
    }
}
function initComputed(Comp) {
    const computed = Comp.options.computed;
    for (const key in computed) {
        defineComputed(Comp.prototype, key, computed[key]);
    }
}

function initAssetRegisters(Vue) {
    /**
     * Create asset registration methods.
     */
    ASSET_TYPES.forEach(type => {
        // @ts-expect-error function is not exact same type
        Vue[type] = function (id, definition) {
            if (!definition) {
                return this.options[type + 's'][id];
            }
            else {
                /* istanbul ignore if */
                if (type === 'component') {
                    validateComponentName(id);
                }
                if (type === 'component' && isPlainObject(definition)) {
                    // @ts-expect-error
                    definition.name = definition.name || id;
                    definition = this.options._base.extend(definition);
                }
                if (type === 'directive' && isFunction(definition)) {
                    definition = { bind: definition, update: definition };
                }
                this.options[type + 's'][id] = definition;
                return definition;
            }
        };
    });
}

function _getComponentName(opts) {
    return opts && (getComponentName(opts.Ctor.options) || opts.tag);
}
function matches(pattern, name) {
    if (isArray(pattern)) {
        return pattern.indexOf(name) > -1;
    }
    else if (typeof pattern === 'string') {
        return pattern.split(',').indexOf(name) > -1;
    }
    else if (isRegExp(pattern)) {
        return pattern.test(name);
    }
    /* istanbul ignore next */
    return false;
}
function pruneCache(keepAliveInstance, filter) {
    const { cache, keys, _vnode } = keepAliveInstance;
    for (const key in cache) {
        const entry = cache[key];
        if (entry) {
            const name = entry.name;
            if (name && !filter(name)) {
                pruneCacheEntry(cache, key, keys, _vnode);
            }
        }
    }
}
function pruneCacheEntry(cache, key, keys, current) {
    const entry = cache[key];
    if (entry && (!current || entry.tag !== current.tag)) {
        // @ts-expect-error can be undefined
        entry.componentInstance.$destroy();
    }
    cache[key] = null;
    remove$2(keys, key);
}
const patternTypes = [String, RegExp, Array];
// TODO defineComponent
var KeepAlive = {
    name: 'keep-alive',
    abstract: true,
    props: {
        include: patternTypes,
        exclude: patternTypes,
        max: [String, Number]
    },
    methods: {
        cacheVNode() {
            const { cache, keys, vnodeToCache, keyToCache } = this;
            if (vnodeToCache) {
                const { tag, componentInstance, componentOptions } = vnodeToCache;
                cache[keyToCache] = {
                    name: _getComponentName(componentOptions),
                    tag,
                    componentInstance
                };
                keys.push(keyToCache);
                // prune oldest entry
                if (this.max && keys.length > parseInt(this.max)) {
                    pruneCacheEntry(cache, keys[0], keys, this._vnode);
                }
                this.vnodeToCache = null;
            }
        }
    },
    created() {
        this.cache = Object.create(null);
        this.keys = [];
    },
    destroyed() {
        for (const key in this.cache) {
            pruneCacheEntry(this.cache, key, this.keys);
        }
    },
    mounted() {
        this.cacheVNode();
        this.$watch('include', val => {
            pruneCache(this, name => matches(val, name));
        });
        this.$watch('exclude', val => {
            pruneCache(this, name => !matches(val, name));
        });
    },
    updated() {
        this.cacheVNode();
    },
    render() {
        const slot = this.$slots.default;
        const vnode = getFirstComponentChild(slot);
        const componentOptions = vnode && vnode.componentOptions;
        if (componentOptions) {
            // check pattern
            const name = _getComponentName(componentOptions);
            const { include, exclude } = this;
            if (
            // not included
            (include && (!name || !matches(include, name))) ||
                // excluded
                (exclude && name && matches(exclude, name))) {
                return vnode;
            }
            const { cache, keys } = this;
            const key = vnode.key == null
                ? // same constructor may get registered as different local components
                    // so cid alone is not enough (#3269)
                    componentOptions.Ctor.cid +
                        (componentOptions.tag ? `::${componentOptions.tag}` : '')
                : vnode.key;
            if (cache[key]) {
                vnode.componentInstance = cache[key].componentInstance;
                // make current key freshest
                remove$2(keys, key);
                keys.push(key);
            }
            else {
                // delay setting the cache until update
                this.vnodeToCache = vnode;
                this.keyToCache = key;
            }
            // @ts-expect-error can vnode.data can be undefined
            vnode.data.keepAlive = true;
        }
        return vnode || (slot && slot[0]);
    }
};

var builtInComponents = {
    KeepAlive
};

function initGlobalAPI(Vue) {
    // config
    const configDef = {};
    configDef.get = () => config;
    {
        configDef.set = () => {
            warn$2('Do not replace the Vue.config object, set individual fields instead.');
        };
    }
    Object.defineProperty(Vue, 'config', configDef);
    // exposed util methods.
    // NOTE: these are not considered part of the public API - avoid relying on
    // them unless you are aware of the risk.
    Vue.util = {
        warn: warn$2,
        extend,
        mergeOptions,
        defineReactive
    };
    Vue.set = set;
    Vue.delete = del;
    Vue.nextTick = nextTick;
    // 2.6 explicit observable API
    Vue.observable = (obj) => {
        observe(obj);
        return obj;
    };
    Vue.options = Object.create(null);
    ASSET_TYPES.forEach(type => {
        Vue.options[type + 's'] = Object.create(null);
    });
    // this is used to identify the "base" constructor to extend all plain-object
    // components with in Weex's multi-instance scenarios.
    Vue.options._base = Vue;
    extend(Vue.options.components, builtInComponents);
    initUse(Vue);
    initMixin(Vue);
    initExtend(Vue);
    initAssetRegisters(Vue);
}

initGlobalAPI(Vue);
Object.defineProperty(Vue.prototype, '$isServer', {
    get: isServerRendering
});
Object.defineProperty(Vue.prototype, '$ssrContext', {
    get() {
        /* istanbul ignore next */
        return this.$vnode && this.$vnode.ssrContext;
    }
});
// expose FunctionalRenderContext for ssr runtime helper installation
Object.defineProperty(Vue, 'FunctionalRenderContext', {
    value: FunctionalRenderContext
});
Vue.version = version;

// these are reserved for web because they are directly compiled away
// during template compilation
const isReservedAttr = makeMap('style,class');
// attributes that should be using props for binding
const acceptValue = makeMap('input,textarea,option,select,progress');
const mustUseProp = (tag, type, attr) => {
    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
        (attr === 'selected' && tag === 'option') ||
        (attr === 'checked' && tag === 'input') ||
        (attr === 'muted' && tag === 'video'));
};
const isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
const isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
const convertEnumeratedValue = (key, value) => {
    return isFalsyAttrValue(value) || value === 'false'
        ? 'false'
        : // allow arbitrary string value for contenteditable
            key === 'contenteditable' && isValidContentEditableValue(value)
                ? value
                : 'true';
};
const isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
    'required,reversed,scoped,seamless,selected,sortable,' +
    'truespeed,typemustmatch,visible');
const xlinkNS = 'http://www.w3.org/1999/xlink';
const isXlink = (name) => {
    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
};
const getXlinkProp = (name) => {
    return isXlink(name) ? name.slice(6, name.length) : '';
};
const isFalsyAttrValue = (val) => {
    return val == null || val === false;
};

function genClassForVnode(vnode) {
    let data = vnode.data;
    let parentNode = vnode;
    let childNode = vnode;
    while (isDef(childNode.componentInstance)) {
        childNode = childNode.componentInstance._vnode;
        if (childNode && childNode.data) {
            data = mergeClassData(childNode.data, data);
        }
    }
    // @ts-expect-error parentNode.parent not VNodeWithData
    while (isDef((parentNode = parentNode.parent))) {
        if (parentNode && parentNode.data) {
            data = mergeClassData(data, parentNode.data);
        }
    }
    return renderClass(data.staticClass, data.class);
}
function mergeClassData(child, parent) {
    return {
        staticClass: concat(child.staticClass, parent.staticClass),
        class: isDef(child.class) ? [child.class, parent.class] : parent.class
    };
}
function renderClass(staticClass, dynamicClass) {
    if (isDef(staticClass) || isDef(dynamicClass)) {
        return concat(staticClass, stringifyClass(dynamicClass));
    }
    /* istanbul ignore next */
    return '';
}
function concat(a, b) {
    return a ? (b ? a + ' ' + b : a) : b || '';
}
function stringifyClass(value) {
    if (Array.isArray(value)) {
        return stringifyArray(value);
    }
    if (isObject(value)) {
        return stringifyObject(value);
    }
    if (typeof value === 'string') {
        return value;
    }
    /* istanbul ignore next */
    return '';
}
function stringifyArray(value) {
    let res = '';
    let stringified;
    for (let i = 0, l = value.length; i < l; i++) {
        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
            if (res)
                res += ' ';
            res += stringified;
        }
    }
    return res;
}
function stringifyObject(value) {
    let res = '';
    for (const key in value) {
        if (value[key]) {
            if (res)
                res += ' ';
            res += key;
        }
    }
    return res;
}

const namespaceMap = {
    svg: 'http://www.w3.org/2000/svg',
    math: 'http://www.w3.org/1998/Math/MathML'
};
const isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
    'embed,object,param,source,canvas,script,noscript,del,ins,' +
    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
    'output,progress,select,textarea,' +
    'details,dialog,menu,menuitem,summary,' +
    'content,element,shadow,template,blockquote,iframe,tfoot');
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
const isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
const isPreTag = (tag) => tag === 'pre';
const isReservedTag = (tag) => {
    return isHTMLTag(tag) || isSVG(tag);
};
function getTagNamespace(tag) {
    if (isSVG(tag)) {
        return 'svg';
    }
    // basic support for MathML
    // note it doesn't support other MathML elements being component roots
    if (tag === 'math') {
        return 'math';
    }
}
const unknownElementCache = Object.create(null);
function isUnknownElement(tag) {
    /* istanbul ignore if */
    if (!inBrowser) {
        return true;
    }
    if (isReservedTag(tag)) {
        return false;
    }
    tag = tag.toLowerCase();
    /* istanbul ignore if */
    if (unknownElementCache[tag] != null) {
        return unknownElementCache[tag];
    }
    const el = document.createElement(tag);
    if (tag.indexOf('-') > -1) {
        // http://stackoverflow.com/a/28210364/1070244
        return (unknownElementCache[tag] =
            el.constructor === window.HTMLUnknownElement ||
                el.constructor === window.HTMLElement);
    }
    else {
        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
    }
}
const isTextInputType = makeMap('text,number,password,search,email,tel,url');

/**
 * Query an element selector if it's not an element already.
 */
function query(el) {
    if (typeof el === 'string') {
        const selected = document.querySelector(el);
        if (!selected) {
            warn$2('Cannot find element: ' + el);
            return document.createElement('div');
        }
        return selected;
    }
    else {
        return el;
    }
}

function createElement(tagName, vnode) {
    const elm = document.createElement(tagName);
    if (tagName !== 'select') {
        return elm;
    }
    // false or null will remove the attribute but undefined will not
    if (vnode.data &&
        vnode.data.attrs &&
        vnode.data.attrs.multiple !== undefined) {
        elm.setAttribute('multiple', 'multiple');
    }
    return elm;
}
function createElementNS(namespace, tagName) {
    return document.createElementNS(namespaceMap[namespace], tagName);
}
function createTextNode(text) {
    return document.createTextNode(text);
}
function createComment(text) {
    return document.createComment(text);
}
function insertBefore(parentNode, newNode, referenceNode) {
    parentNode.insertBefore(newNode, referenceNode);
}
function removeChild(node, child) {
    node.removeChild(child);
}
function appendChild(node, child) {
    node.appendChild(child);
}
function parentNode(node) {
    return node.parentNode;
}
function nextSibling(node) {
    return node.nextSibling;
}
function tagName(node) {
    return node.tagName;
}
function setTextContent(node, text) {
    node.textContent = text;
}
function setStyleScope(node, scopeId) {
    node.setAttribute(scopeId, '');
}

var nodeOps = /*#__PURE__*/Object.freeze({
  __proto__: null,
  createElement: createElement,
  createElementNS: createElementNS,
  createTextNode: createTextNode,
  createComment: createComment,
  insertBefore: insertBefore,
  removeChild: removeChild,
  appendChild: appendChild,
  parentNode: parentNode,
  nextSibling: nextSibling,
  tagName: tagName,
  setTextContent: setTextContent,
  setStyleScope: setStyleScope
});

var ref = {
    create(_, vnode) {
        registerRef(vnode);
    },
    update(oldVnode, vnode) {
        if (oldVnode.data.ref !== vnode.data.ref) {
            registerRef(oldVnode, true);
            registerRef(vnode);
        }
    },
    destroy(vnode) {
        registerRef(vnode, true);
    }
};
function registerRef(vnode, isRemoval) {
    const ref = vnode.data.ref;
    if (!isDef(ref))
        return;
    const vm = vnode.context;
    const refValue = vnode.componentInstance || vnode.elm;
    const value = isRemoval ? null : refValue;
    const $refsValue = isRemoval ? undefined : refValue;
    if (isFunction(ref)) {
        invokeWithErrorHandling(ref, vm, [value], vm, `template ref function`);
        return;
    }
    const isFor = vnode.data.refInFor;
    const _isString = typeof ref === 'string' || typeof ref === 'number';
    const _isRef = isRef(ref);
    const refs = vm.$refs;
    if (_isString || _isRef) {
        if (isFor) {
            const existing = _isString ? refs[ref] : ref.value;
            if (isRemoval) {
                isArray(existing) && remove$2(existing, refValue);
            }
            else {
                if (!isArray(existing)) {
                    if (_isString) {
                        refs[ref] = [refValue];
                        setSetupRef(vm, ref, refs[ref]);
                    }
                    else {
                        ref.value = [refValue];
                    }
                }
                else if (!existing.includes(refValue)) {
                    existing.push(refValue);
                }
            }
        }
        else if (_isString) {
            if (isRemoval && refs[ref] !== refValue) {
                return;
            }
            refs[ref] = $refsValue;
            setSetupRef(vm, ref, value);
        }
        else if (_isRef) {
            if (isRemoval && ref.value !== refValue) {
                return;
            }
            ref.value = value;
        }
        else {
            warn$2(`Invalid template ref type: ${typeof ref}`);
        }
    }
}
function setSetupRef({ _setupState }, key, val) {
    if (_setupState && hasOwn(_setupState, key)) {
        if (isRef(_setupState[key])) {
            _setupState[key].value = val;
        }
        else {
            _setupState[key] = val;
        }
    }
}

/**
 * Virtual DOM patching algorithm based on Snabbdom by
 * Simon Friis Vindum (@paldepind)
 * Licensed under the MIT License
 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
 *
 * modified by Evan You (@yyx990803)
 *
 * Not type-checking this because this file is perf-critical and the cost
 * of making flow understand it is not worth it.
 */
const emptyNode = new VNode('', {}, []);
const hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
function sameVnode(a, b) {
    return (a.key === b.key &&
        a.asyncFactory === b.asyncFactory &&
        ((a.tag === b.tag &&
            a.isComment === b.isComment &&
            isDef(a.data) === isDef(b.data) &&
            sameInputType(a, b)) ||
            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
}
function sameInputType(a, b) {
    if (a.tag !== 'input')
        return true;
    let i;
    const typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
    const typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
}
function createKeyToOldIdx(children, beginIdx, endIdx) {
    let i, key;
    const map = {};
    for (i = beginIdx; i <= endIdx; ++i) {
        key = children[i].key;
        if (isDef(key))
            map[key] = i;
    }
    return map;
}
function createPatchFunction(backend) {
    let i, j;
    const cbs = {};
    const { modules, nodeOps } = backend;
    for (i = 0; i < hooks.length; ++i) {
        cbs[hooks[i]] = [];
        for (j = 0; j < modules.length; ++j) {
            if (isDef(modules[j][hooks[i]])) {
                cbs[hooks[i]].push(modules[j][hooks[i]]);
            }
        }
    }
    function emptyNodeAt(elm) {
        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
    }
    function createRmCb(childElm, listeners) {
        function remove() {
            if (--remove.listeners === 0) {
                removeNode(childElm);
            }
        }
        remove.listeners = listeners;
        return remove;
    }
    function removeNode(el) {
        const parent = nodeOps.parentNode(el);
        // element may have already been removed due to v-html / v-text
        if (isDef(parent)) {
            nodeOps.removeChild(parent, el);
        }
    }
    function isUnknownElement(vnode, inVPre) {
        return (!inVPre &&
            !vnode.ns &&
            !(config.ignoredElements.length &&
                config.ignoredElements.some(ignore => {
                    return isRegExp(ignore)
                        ? ignore.test(vnode.tag)
                        : ignore === vnode.tag;
                })) &&
            config.isUnknownElement(vnode.tag));
    }
    let creatingElmInVPre = 0;
    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // This vnode was used in a previous render!
            // now it's used as a new node, overwriting its elm would cause
            // potential patch errors down the road when it's used as an insertion
            // reference node. Instead, we clone the node on-demand before creating
            // associated DOM element for it.
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        vnode.isRootInsert = !nested; // for transition enter check
        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
            return;
        }
        const data = vnode.data;
        const children = vnode.children;
        const tag = vnode.tag;
        if (isDef(tag)) {
            {
                if (data && data.pre) {
                    creatingElmInVPre++;
                }
                if (isUnknownElement(vnode, creatingElmInVPre)) {
                    warn$2('Unknown custom element: <' +
                        tag +
                        '> - did you ' +
                        'register the component correctly? For recursive components, ' +
                        'make sure to provide the "name" option.', vnode.context);
                }
            }
            vnode.elm = vnode.ns
                ? nodeOps.createElementNS(vnode.ns, tag)
                : nodeOps.createElement(tag, vnode);
            setScope(vnode);
            createChildren(vnode, children, insertedVnodeQueue);
            if (isDef(data)) {
                invokeCreateHooks(vnode, insertedVnodeQueue);
            }
            insert(parentElm, vnode.elm, refElm);
            if (data && data.pre) {
                creatingElmInVPre--;
            }
        }
        else if (isTrue(vnode.isComment)) {
            vnode.elm = nodeOps.createComment(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
        else {
            vnode.elm = nodeOps.createTextNode(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
    }
    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        let i = vnode.data;
        if (isDef(i)) {
            const isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
            if (isDef((i = i.hook)) && isDef((i = i.init))) {
                i(vnode, false /* hydrating */);
            }
            // after calling the init hook, if the vnode is a child component
            // it should've created a child instance and mounted it. the child
            // component also has set the placeholder vnode's elm.
            // in that case we can just return the element and be done.
            if (isDef(vnode.componentInstance)) {
                initComponent(vnode, insertedVnodeQueue);
                insert(parentElm, vnode.elm, refElm);
                if (isTrue(isReactivated)) {
                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
                }
                return true;
            }
        }
    }
    function initComponent(vnode, insertedVnodeQueue) {
        if (isDef(vnode.data.pendingInsert)) {
            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
            vnode.data.pendingInsert = null;
        }
        vnode.elm = vnode.componentInstance.$el;
        if (isPatchable(vnode)) {
            invokeCreateHooks(vnode, insertedVnodeQueue);
            setScope(vnode);
        }
        else {
            // empty component root.
            // skip all element-related modules except for ref (#3455)
            registerRef(vnode);
            // make sure to invoke the insert hook
            insertedVnodeQueue.push(vnode);
        }
    }
    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        let i;
        // hack for #4339: a reactivated component with inner transition
        // does not trigger because the inner node's created hooks are not called
        // again. It's not ideal to involve module-specific logic in here but
        // there doesn't seem to be a better way to do it.
        let innerNode = vnode;
        while (innerNode.componentInstance) {
            innerNode = innerNode.componentInstance._vnode;
            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
                for (i = 0; i < cbs.activate.length; ++i) {
                    cbs.activate[i](emptyNode, innerNode);
                }
                insertedVnodeQueue.push(innerNode);
                break;
            }
        }
        // unlike a newly created component,
        // a reactivated keep-alive component doesn't insert itself
        insert(parentElm, vnode.elm, refElm);
    }
    function insert(parent, elm, ref) {
        if (isDef(parent)) {
            if (isDef(ref)) {
                if (nodeOps.parentNode(ref) === parent) {
                    nodeOps.insertBefore(parent, elm, ref);
                }
            }
            else {
                nodeOps.appendChild(parent, elm);
            }
        }
    }
    function createChildren(vnode, children, insertedVnodeQueue) {
        if (isArray(children)) {
            {
                checkDuplicateKeys(children);
            }
            for (let i = 0; i < children.length; ++i) {
                createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);
            }
        }
        else if (isPrimitive(vnode.text)) {
            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
        }
    }
    function isPatchable(vnode) {
        while (vnode.componentInstance) {
            vnode = vnode.componentInstance._vnode;
        }
        return isDef(vnode.tag);
    }
    function invokeCreateHooks(vnode, insertedVnodeQueue) {
        for (let i = 0; i < cbs.create.length; ++i) {
            cbs.create[i](emptyNode, vnode);
        }
        i = vnode.data.hook; // Reuse variable
        if (isDef(i)) {
            if (isDef(i.create))
                i.create(emptyNode, vnode);
            if (isDef(i.insert))
                insertedVnodeQueue.push(vnode);
        }
    }
    // set scope id attribute for scoped CSS.
    // this is implemented as a special case to avoid the overhead
    // of going through the normal attribute patching process.
    function setScope(vnode) {
        let i;
        if (isDef((i = vnode.fnScopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
        else {
            let ancestor = vnode;
            while (ancestor) {
                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
                    nodeOps.setStyleScope(vnode.elm, i);
                }
                ancestor = ancestor.parent;
            }
        }
        // for slot content they should also get the scopeId from the host instance.
        if (isDef((i = activeInstance)) &&
            i !== vnode.context &&
            i !== vnode.fnContext &&
            isDef((i = i.$options._scopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
    }
    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
        for (; startIdx <= endIdx; ++startIdx) {
            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
        }
    }
    function invokeDestroyHook(vnode) {
        let i, j;
        const data = vnode.data;
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.destroy)))
                i(vnode);
            for (i = 0; i < cbs.destroy.length; ++i)
                cbs.destroy[i](vnode);
        }
        if (isDef((i = vnode.children))) {
            for (j = 0; j < vnode.children.length; ++j) {
                invokeDestroyHook(vnode.children[j]);
            }
        }
    }
    function removeVnodes(vnodes, startIdx, endIdx) {
        for (; startIdx <= endIdx; ++startIdx) {
            const ch = vnodes[startIdx];
            if (isDef(ch)) {
                if (isDef(ch.tag)) {
                    removeAndInvokeRemoveHook(ch);
                    invokeDestroyHook(ch);
                }
                else {
                    // Text node
                    removeNode(ch.elm);
                }
            }
        }
    }
    function removeAndInvokeRemoveHook(vnode, rm) {
        if (isDef(rm) || isDef(vnode.data)) {
            let i;
            const listeners = cbs.remove.length + 1;
            if (isDef(rm)) {
                // we have a recursively passed down rm callback
                // increase the listeners count
                rm.listeners += listeners;
            }
            else {
                // directly removing
                rm = createRmCb(vnode.elm, listeners);
            }
            // recursively invoke hooks on child component root node
            if (isDef((i = vnode.componentInstance)) &&
                isDef((i = i._vnode)) &&
                isDef(i.data)) {
                removeAndInvokeRemoveHook(i, rm);
            }
            for (i = 0; i < cbs.remove.length; ++i) {
                cbs.remove[i](vnode, rm);
            }
            if (isDef((i = vnode.data.hook)) && isDef((i = i.remove))) {
                i(vnode, rm);
            }
            else {
                rm();
            }
        }
        else {
            removeNode(vnode.elm);
        }
    }
    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
        let oldStartIdx = 0;
        let newStartIdx = 0;
        let oldEndIdx = oldCh.length - 1;
        let oldStartVnode = oldCh[0];
        let oldEndVnode = oldCh[oldEndIdx];
        let newEndIdx = newCh.length - 1;
        let newStartVnode = newCh[0];
        let newEndVnode = newCh[newEndIdx];
        let oldKeyToIdx, idxInOld, vnodeToMove, refElm;
        // removeOnly is a special flag used only by <transition-group>
        // to ensure removed elements stay in correct relative positions
        // during leaving transitions
        const canMove = !removeOnly;
        {
            checkDuplicateKeys(newCh);
        }
        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
            if (isUndef(oldStartVnode)) {
                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
            }
            else if (isUndef(oldEndVnode)) {
                oldEndVnode = oldCh[--oldEndIdx];
            }
            else if (sameVnode(oldStartVnode, newStartVnode)) {
                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                oldStartVnode = oldCh[++oldStartIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else if (sameVnode(oldEndVnode, newEndVnode)) {
                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                oldEndVnode = oldCh[--oldEndIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldStartVnode, newEndVnode)) {
                // Vnode moved right
                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
                oldStartVnode = oldCh[++oldStartIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldEndVnode, newStartVnode)) {
                // Vnode moved left
                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
                oldEndVnode = oldCh[--oldEndIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else {
                if (isUndef(oldKeyToIdx))
                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
                idxInOld = isDef(newStartVnode.key)
                    ? oldKeyToIdx[newStartVnode.key]
                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
                if (isUndef(idxInOld)) {
                    // New element
                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                }
                else {
                    vnodeToMove = oldCh[idxInOld];
                    if (sameVnode(vnodeToMove, newStartVnode)) {
                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                        oldCh[idxInOld] = undefined;
                        canMove &&
                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
                    }
                    else {
                        // same key but different element. treat as new element
                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                    }
                }
                newStartVnode = newCh[++newStartIdx];
            }
        }
        if (oldStartIdx > oldEndIdx) {
            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
        }
        else if (newStartIdx > newEndIdx) {
            removeVnodes(oldCh, oldStartIdx, oldEndIdx);
        }
    }
    function checkDuplicateKeys(children) {
        const seenKeys = {};
        for (let i = 0; i < children.length; i++) {
            const vnode = children[i];
            const key = vnode.key;
            if (isDef(key)) {
                if (seenKeys[key]) {
                    warn$2(`Duplicate keys detected: '${key}'. This may cause an update error.`, vnode.context);
                }
                else {
                    seenKeys[key] = true;
                }
            }
        }
    }
    function findIdxInOld(node, oldCh, start, end) {
        for (let i = start; i < end; i++) {
            const c = oldCh[i];
            if (isDef(c) && sameVnode(node, c))
                return i;
        }
    }
    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
        if (oldVnode === vnode) {
            return;
        }
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // clone reused vnode
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        const elm = (vnode.elm = oldVnode.elm);
        if (isTrue(oldVnode.isAsyncPlaceholder)) {
            if (isDef(vnode.asyncFactory.resolved)) {
                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
            }
            else {
                vnode.isAsyncPlaceholder = true;
            }
            return;
        }
        // reuse element for static trees.
        // note we only do this if the vnode is cloned -
        // if the new node is not cloned it means the render functions have been
        // reset by the hot-reload-api and we need to do a proper re-render.
        if (isTrue(vnode.isStatic) &&
            isTrue(oldVnode.isStatic) &&
            vnode.key === oldVnode.key &&
            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
            vnode.componentInstance = oldVnode.componentInstance;
            return;
        }
        let i;
        const data = vnode.data;
        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
            i(oldVnode, vnode);
        }
        const oldCh = oldVnode.children;
        const ch = vnode.children;
        if (isDef(data) && isPatchable(vnode)) {
            for (i = 0; i < cbs.update.length; ++i)
                cbs.update[i](oldVnode, vnode);
            if (isDef((i = data.hook)) && isDef((i = i.update)))
                i(oldVnode, vnode);
        }
        if (isUndef(vnode.text)) {
            if (isDef(oldCh) && isDef(ch)) {
                if (oldCh !== ch)
                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
            }
            else if (isDef(ch)) {
                {
                    checkDuplicateKeys(ch);
                }
                if (isDef(oldVnode.text))
                    nodeOps.setTextContent(elm, '');
                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
            }
            else if (isDef(oldCh)) {
                removeVnodes(oldCh, 0, oldCh.length - 1);
            }
            else if (isDef(oldVnode.text)) {
                nodeOps.setTextContent(elm, '');
            }
        }
        else if (oldVnode.text !== vnode.text) {
            nodeOps.setTextContent(elm, vnode.text);
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
                i(oldVnode, vnode);
        }
    }
    function invokeInsertHook(vnode, queue, initial) {
        // delay insert hooks for component root nodes, invoke them after the
        // element is really inserted
        if (isTrue(initial) && isDef(vnode.parent)) {
            vnode.parent.data.pendingInsert = queue;
        }
        else {
            for (let i = 0; i < queue.length; ++i) {
                queue[i].data.hook.insert(queue[i]);
            }
        }
    }
    let hydrationBailed = false;
    // list of modules that can skip create hook during hydration because they
    // are already rendered on the client or has no need for initialization
    // Note: style is excluded because it relies on initial clone for future
    // deep updates (#7063).
    const isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
    // Note: this is a browser-only function so we can assume elms are DOM nodes.
    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
        let i;
        const { tag, data, children } = vnode;
        inVPre = inVPre || (data && data.pre);
        vnode.elm = elm;
        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
            vnode.isAsyncPlaceholder = true;
            return true;
        }
        // assert node match
        {
            if (!assertNodeMatch(elm, vnode, inVPre)) {
                return false;
            }
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.init)))
                i(vnode, true /* hydrating */);
            if (isDef((i = vnode.componentInstance))) {
                // child component. it should have hydrated its own tree.
                initComponent(vnode, insertedVnodeQueue);
                return true;
            }
        }
        if (isDef(tag)) {
            if (isDef(children)) {
                // empty element, allow client to pick up and populate children
                if (!elm.hasChildNodes()) {
                    createChildren(vnode, children, insertedVnodeQueue);
                }
                else {
                    // v-html and domProps: innerHTML
                    if (isDef((i = data)) &&
                        isDef((i = i.domProps)) &&
                        isDef((i = i.innerHTML))) {
                        if (i !== elm.innerHTML) {
                            /* istanbul ignore if */
                            if (typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('server innerHTML: ', i);
                                console.warn('client innerHTML: ', elm.innerHTML);
                            }
                            return false;
                        }
                    }
                    else {
                        // iterate and compare children lists
                        let childrenMatch = true;
                        let childNode = elm.firstChild;
                        for (let i = 0; i < children.length; i++) {
                            if (!childNode ||
                                !hydrate(childNode, children[i], insertedVnodeQueue, inVPre)) {
                                childrenMatch = false;
                                break;
                            }
                            childNode = childNode.nextSibling;
                        }
                        // if childNode is not null, it means the actual childNodes list is
                        // longer than the virtual children list.
                        if (!childrenMatch || childNode) {
                            /* istanbul ignore if */
                            if (typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
                            }
                            return false;
                        }
                    }
                }
            }
            if (isDef(data)) {
                let fullInvoke = false;
                for (const key in data) {
                    if (!isRenderedModule(key)) {
                        fullInvoke = true;
                        invokeCreateHooks(vnode, insertedVnodeQueue);
                        break;
                    }
                }
                if (!fullInvoke && data['class']) {
                    // ensure collecting deps for deep class bindings for future updates
                    traverse(data['class']);
                }
            }
        }
        else if (elm.data !== vnode.text) {
            elm.data = vnode.text;
        }
        return true;
    }
    function assertNodeMatch(node, vnode, inVPre) {
        if (isDef(vnode.tag)) {
            return (vnode.tag.indexOf('vue-component') === 0 ||
                (!isUnknownElement(vnode, inVPre) &&
                    vnode.tag.toLowerCase() ===
                        (node.tagName && node.tagName.toLowerCase())));
        }
        else {
            return node.nodeType === (vnode.isComment ? 8 : 3);
        }
    }
    return function patch(oldVnode, vnode, hydrating, removeOnly) {
        if (isUndef(vnode)) {
            if (isDef(oldVnode))
                invokeDestroyHook(oldVnode);
            return;
        }
        let isInitialPatch = false;
        const insertedVnodeQueue = [];
        if (isUndef(oldVnode)) {
            // empty mount (likely as component), create new root element
            isInitialPatch = true;
            createElm(vnode, insertedVnodeQueue);
        }
        else {
            const isRealElement = isDef(oldVnode.nodeType);
            if (!isRealElement && sameVnode(oldVnode, vnode)) {
                // patch existing root node
                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
            }
            else {
                if (isRealElement) {
                    // mounting to a real element
                    // check if this is server-rendered content and if we can perform
                    // a successful hydration.
                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
                        oldVnode.removeAttribute(SSR_ATTR);
                        hydrating = true;
                    }
                    if (isTrue(hydrating)) {
                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
                            invokeInsertHook(vnode, insertedVnodeQueue, true);
                            return oldVnode;
                        }
                        else {
                            warn$2('The client-side rendered virtual DOM tree is not matching ' +
                                'server-rendered content. This is likely caused by incorrect ' +
                                'HTML markup, for example nesting block-level elements inside ' +
                                '<p>, or missing <tbody>. Bailing hydration and performing ' +
                                'full client-side render.');
                        }
                    }
                    // either not server-rendered, or hydration failed.
                    // create an empty node and replace it
                    oldVnode = emptyNodeAt(oldVnode);
                }
                // replacing existing element
                const oldElm = oldVnode.elm;
                const parentElm = nodeOps.parentNode(oldElm);
                // create new node
                createElm(vnode, insertedVnodeQueue, 
                // extremely rare edge case: do not insert if old element is in a
                // leaving transition. Only happens when combining transition +
                // keep-alive + HOCs. (#4590)
                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
                // update parent placeholder node element, recursively
                if (isDef(vnode.parent)) {
                    let ancestor = vnode.parent;
                    const patchable = isPatchable(vnode);
                    while (ancestor) {
                        for (let i = 0; i < cbs.destroy.length; ++i) {
                            cbs.destroy[i](ancestor);
                        }
                        ancestor.elm = vnode.elm;
                        if (patchable) {
                            for (let i = 0; i < cbs.create.length; ++i) {
                                cbs.create[i](emptyNode, ancestor);
                            }
                            // #6513
                            // invoke insert hooks that may have been merged by create hooks.
                            // e.g. for directives that uses the "inserted" hook.
                            const insert = ancestor.data.hook.insert;
                            if (insert.merged) {
                                // start at index 1 to avoid re-invoking component mounted hook
                                for (let i = 1; i < insert.fns.length; i++) {
                                    insert.fns[i]();
                                }
                            }
                        }
                        else {
                            registerRef(ancestor);
                        }
                        ancestor = ancestor.parent;
                    }
                }
                // destroy old node
                if (isDef(parentElm)) {
                    removeVnodes([oldVnode], 0, 0);
                }
                else if (isDef(oldVnode.tag)) {
                    invokeDestroyHook(oldVnode);
                }
            }
        }
        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
        return vnode.elm;
    };
}

var directives$1 = {
    create: updateDirectives,
    update: updateDirectives,
    destroy: function unbindDirectives(vnode) {
        // @ts-expect-error emptyNode is not VNodeWithData
        updateDirectives(vnode, emptyNode);
    }
};
function updateDirectives(oldVnode, vnode) {
    if (oldVnode.data.directives || vnode.data.directives) {
        _update(oldVnode, vnode);
    }
}
function _update(oldVnode, vnode) {
    const isCreate = oldVnode === emptyNode;
    const isDestroy = vnode === emptyNode;
    const oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
    const newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
    const dirsWithInsert = [];
    const dirsWithPostpatch = [];
    let key, oldDir, dir;
    for (key in newDirs) {
        oldDir = oldDirs[key];
        dir = newDirs[key];
        if (!oldDir) {
            // new directive, bind
            callHook(dir, 'bind', vnode, oldVnode);
            if (dir.def && dir.def.inserted) {
                dirsWithInsert.push(dir);
            }
        }
        else {
            // existing directive, update
            dir.oldValue = oldDir.value;
            dir.oldArg = oldDir.arg;
            callHook(dir, 'update', vnode, oldVnode);
            if (dir.def && dir.def.componentUpdated) {
                dirsWithPostpatch.push(dir);
            }
        }
    }
    if (dirsWithInsert.length) {
        const callInsert = () => {
            for (let i = 0; i < dirsWithInsert.length; i++) {
                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
            }
        };
        if (isCreate) {
            mergeVNodeHook(vnode, 'insert', callInsert);
        }
        else {
            callInsert();
        }
    }
    if (dirsWithPostpatch.length) {
        mergeVNodeHook(vnode, 'postpatch', () => {
            for (let i = 0; i < dirsWithPostpatch.length; i++) {
                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
            }
        });
    }
    if (!isCreate) {
        for (key in oldDirs) {
            if (!newDirs[key]) {
                // no longer present, unbind
                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
            }
        }
    }
}
const emptyModifiers = Object.create(null);
function normalizeDirectives(dirs, vm) {
    const res = Object.create(null);
    if (!dirs) {
        // $flow-disable-line
        return res;
    }
    let i, dir;
    for (i = 0; i < dirs.length; i++) {
        dir = dirs[i];
        if (!dir.modifiers) {
            // $flow-disable-line
            dir.modifiers = emptyModifiers;
        }
        res[getRawDirName(dir)] = dir;
        if (vm._setupState && vm._setupState.__sfc) {
            const setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
            if (typeof setupDef === 'function') {
                dir.def = {
                    bind: setupDef,
                    update: setupDef,
                };
            }
            else {
                dir.def = setupDef;
            }
        }
        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
    }
    // $flow-disable-line
    return res;
}
function getRawDirName(dir) {
    return (dir.rawName || `${dir.name}.${Object.keys(dir.modifiers || {}).join('.')}`);
}
function callHook(dir, hook, vnode, oldVnode, isDestroy) {
    const fn = dir.def && dir.def[hook];
    if (fn) {
        try {
            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
        }
        catch (e) {
            handleError(e, vnode.context, `directive ${dir.name} ${hook} hook`);
        }
    }
}

var baseModules = [ref, directives$1];

function updateAttrs(oldVnode, vnode) {
    const opts = vnode.componentOptions;
    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
        return;
    }
    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
        return;
    }
    let key, cur, old;
    const elm = vnode.elm;
    const oldAttrs = oldVnode.data.attrs || {};
    let attrs = vnode.data.attrs || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
        attrs = vnode.data.attrs = extend({}, attrs);
    }
    for (key in attrs) {
        cur = attrs[key];
        old = oldAttrs[key];
        if (old !== cur) {
            setAttr(elm, key, cur, vnode.data.pre);
        }
    }
    // #4391: in IE9, setting type can reset value for input[type=radio]
    // #6666: IE/Edge forces progress value down to 1 before setting a max
    /* istanbul ignore if */
    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
        setAttr(elm, 'value', attrs.value);
    }
    for (key in oldAttrs) {
        if (isUndef(attrs[key])) {
            if (isXlink(key)) {
                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
            }
            else if (!isEnumeratedAttr(key)) {
                elm.removeAttribute(key);
            }
        }
    }
}
function setAttr(el, key, value, isInPre) {
    if (isInPre || el.tagName.indexOf('-') > -1) {
        baseSetAttr(el, key, value);
    }
    else if (isBooleanAttr(key)) {
        // set attribute for blank value
        // e.g. <option disabled>Select one</option>
        if (isFalsyAttrValue(value)) {
            el.removeAttribute(key);
        }
        else {
            // technically allowfullscreen is a boolean attribute for <iframe>,
            // but Flash expects a value of "true" when used on <embed> tag
            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
            el.setAttribute(key, value);
        }
    }
    else if (isEnumeratedAttr(key)) {
        el.setAttribute(key, convertEnumeratedValue(key, value));
    }
    else if (isXlink(key)) {
        if (isFalsyAttrValue(value)) {
            el.removeAttributeNS(xlinkNS, getXlinkProp(key));
        }
        else {
            el.setAttributeNS(xlinkNS, key, value);
        }
    }
    else {
        baseSetAttr(el, key, value);
    }
}
function baseSetAttr(el, key, value) {
    if (isFalsyAttrValue(value)) {
        el.removeAttribute(key);
    }
    else {
        // #7138: IE10 & 11 fires input event when setting placeholder on
        // <textarea>... block the first input event and remove the blocker
        // immediately.
        /* istanbul ignore if */
        if (isIE &&
            !isIE9 &&
            el.tagName === 'TEXTAREA' &&
            key === 'placeholder' &&
            value !== '' &&
            !el.__ieph) {
            const blocker = e => {
                e.stopImmediatePropagation();
                el.removeEventListener('input', blocker);
            };
            el.addEventListener('input', blocker);
            // $flow-disable-line
            el.__ieph = true; /* IE placeholder patched */
        }
        el.setAttribute(key, value);
    }
}
var attrs = {
    create: updateAttrs,
    update: updateAttrs
};

function updateClass(oldVnode, vnode) {
    const el = vnode.elm;
    const data = vnode.data;
    const oldData = oldVnode.data;
    if (isUndef(data.staticClass) &&
        isUndef(data.class) &&
        (isUndef(oldData) ||
            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
        return;
    }
    let cls = genClassForVnode(vnode);
    // handle transition classes
    const transitionClass = el._transitionClasses;
    if (isDef(transitionClass)) {
        cls = concat(cls, stringifyClass(transitionClass));
    }
    // set the class
    if (cls !== el._prevClass) {
        el.setAttribute('class', cls);
        el._prevClass = cls;
    }
}
var klass$1 = {
    create: updateClass,
    update: updateClass
};

const validDivisionCharRE = /[\w).+\-_$\]]/;
function parseFilters(exp) {
    let inSingle = false;
    let inDouble = false;
    let inTemplateString = false;
    let inRegex = false;
    let curly = 0;
    let square = 0;
    let paren = 0;
    let lastFilterIndex = 0;
    let c, prev, i, expression, filters;
    for (i = 0; i < exp.length; i++) {
        prev = c;
        c = exp.charCodeAt(i);
        if (inSingle) {
            if (c === 0x27 && prev !== 0x5c)
                inSingle = false;
        }
        else if (inDouble) {
            if (c === 0x22 && prev !== 0x5c)
                inDouble = false;
        }
        else if (inTemplateString) {
            if (c === 0x60 && prev !== 0x5c)
                inTemplateString = false;
        }
        else if (inRegex) {
            if (c === 0x2f && prev !== 0x5c)
                inRegex = false;
        }
        else if (c === 0x7c && // pipe
            exp.charCodeAt(i + 1) !== 0x7c &&
            exp.charCodeAt(i - 1) !== 0x7c &&
            !curly &&
            !square &&
            !paren) {
            if (expression === undefined) {
                // first filter, end of expression
                lastFilterIndex = i + 1;
                expression = exp.slice(0, i).trim();
            }
            else {
                pushFilter();
            }
        }
        else {
            switch (c) {
                case 0x22:
                    inDouble = true;
                    break; // "
                case 0x27:
                    inSingle = true;
                    break; // '
                case 0x60:
                    inTemplateString = true;
                    break; // `
                case 0x28:
                    paren++;
                    break; // (
                case 0x29:
                    paren--;
                    break; // )
                case 0x5b:
                    square++;
                    break; // [
                case 0x5d:
                    square--;
                    break; // ]
                case 0x7b:
                    curly++;
                    break; // {
                case 0x7d:
                    curly--;
                    break; // }
            }
            if (c === 0x2f) {
                // /
                let j = i - 1;
                let p;
                // find first non-whitespace prev char
                for (; j >= 0; j--) {
                    p = exp.charAt(j);
                    if (p !== ' ')
                        break;
                }
                if (!p || !validDivisionCharRE.test(p)) {
                    inRegex = true;
                }
            }
        }
    }
    if (expression === undefined) {
        expression = exp.slice(0, i).trim();
    }
    else if (lastFilterIndex !== 0) {
        pushFilter();
    }
    function pushFilter() {
        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
        lastFilterIndex = i + 1;
    }
    if (filters) {
        for (i = 0; i < filters.length; i++) {
            expression = wrapFilter(expression, filters[i]);
        }
    }
    return expression;
}
function wrapFilter(exp, filter) {
    const i = filter.indexOf('(');
    if (i < 0) {
        // _f: resolveFilter
        return `_f("${filter}")(${exp})`;
    }
    else {
        const name = filter.slice(0, i);
        const args = filter.slice(i + 1);
        return `_f("${name}")(${exp}${args !== ')' ? ',' + args : args}`;
    }
}

/* eslint-disable no-unused-vars */
function baseWarn(msg, range) {
    console.error(`[Vue compiler]: ${msg}`);
}
/* eslint-enable no-unused-vars */
function pluckModuleFunction(modules, key) {
    return modules ? modules.map(m => m[key]).filter(_ => _) : [];
}
function addProp(el, name, value, range, dynamic) {
    (el.props || (el.props = [])).push(rangeSetItem({ name, value, dynamic }, range));
    el.plain = false;
}
function addAttr(el, name, value, range, dynamic) {
    const attrs = dynamic
        ? el.dynamicAttrs || (el.dynamicAttrs = [])
        : el.attrs || (el.attrs = []);
    attrs.push(rangeSetItem({ name, value, dynamic }, range));
    el.plain = false;
}
// add a raw attr (use this in preTransforms)
function addRawAttr(el, name, value, range) {
    el.attrsMap[name] = value;
    el.attrsList.push(rangeSetItem({ name, value }, range));
}
function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
    (el.directives || (el.directives = [])).push(rangeSetItem({
        name,
        rawName,
        value,
        arg,
        isDynamicArg,
        modifiers
    }, range));
    el.plain = false;
}
function prependModifierMarker(symbol, name, dynamic) {
    return dynamic ? `_p(${name},"${symbol}")` : symbol + name; // mark the event as captured
}
function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
    modifiers = modifiers || emptyObject;
    // warn prevent and passive modifier
    /* istanbul ignore if */
    if (warn && modifiers.prevent && modifiers.passive) {
        warn("passive and prevent can't be used together. " +
            "Passive handler can't prevent default event.", range);
    }
    // normalize click.right and click.middle since they don't actually fire
    // this is technically browser-specific, but at least for now browsers are
    // the only target envs that have right/middle clicks.
    if (modifiers.right) {
        if (dynamic) {
            name = `(${name})==='click'?'contextmenu':(${name})`;
        }
        else if (name === 'click') {
            name = 'contextmenu';
            delete modifiers.right;
        }
    }
    else if (modifiers.middle) {
        if (dynamic) {
            name = `(${name})==='click'?'mouseup':(${name})`;
        }
        else if (name === 'click') {
            name = 'mouseup';
        }
    }
    // check capture modifier
    if (modifiers.capture) {
        delete modifiers.capture;
        name = prependModifierMarker('!', name, dynamic);
    }
    if (modifiers.once) {
        delete modifiers.once;
        name = prependModifierMarker('~', name, dynamic);
    }
    /* istanbul ignore if */
    if (modifiers.passive) {
        delete modifiers.passive;
        name = prependModifierMarker('&', name, dynamic);
    }
    let events;
    if (modifiers.native) {
        delete modifiers.native;
        events = el.nativeEvents || (el.nativeEvents = {});
    }
    else {
        events = el.events || (el.events = {});
    }
    const newHandler = rangeSetItem({ value: value.trim(), dynamic }, range);
    if (modifiers !== emptyObject) {
        newHandler.modifiers = modifiers;
    }
    const handlers = events[name];
    /* istanbul ignore if */
    if (Array.isArray(handlers)) {
        important ? handlers.unshift(newHandler) : handlers.push(newHandler);
    }
    else if (handlers) {
        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
    }
    else {
        events[name] = newHandler;
    }
    el.plain = false;
}
function getRawBindingAttr(el, name) {
    return (el.rawAttrsMap[':' + name] ||
        el.rawAttrsMap['v-bind:' + name] ||
        el.rawAttrsMap[name]);
}
function getBindingAttr(el, name, getStatic) {
    const dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
    if (dynamicValue != null) {
        return parseFilters(dynamicValue);
    }
    else if (getStatic !== false) {
        const staticValue = getAndRemoveAttr(el, name);
        if (staticValue != null) {
            return JSON.stringify(staticValue);
        }
    }
}
// note: this only removes the attr from the Array (attrsList) so that it
// doesn't get processed by processAttrs.
// By default it does NOT remove it from the map (attrsMap) because the map is
// needed during codegen.
function getAndRemoveAttr(el, name, removeFromMap) {
    let val;
    if ((val = el.attrsMap[name]) != null) {
        const list = el.attrsList;
        for (let i = 0, l = list.length; i < l; i++) {
            if (list[i].name === name) {
                list.splice(i, 1);
                break;
            }
        }
    }
    if (removeFromMap) {
        delete el.attrsMap[name];
    }
    return val;
}
function getAndRemoveAttrByRegex(el, name) {
    const list = el.attrsList;
    for (let i = 0, l = list.length; i < l; i++) {
        const attr = list[i];
        if (name.test(attr.name)) {
            list.splice(i, 1);
            return attr;
        }
    }
}
function rangeSetItem(item, range) {
    if (range) {
        if (range.start != null) {
            item.start = range.start;
        }
        if (range.end != null) {
            item.end = range.end;
        }
    }
    return item;
}

/**
 * Cross-platform code generation for component v-model
 */
function genComponentModel(el, value, modifiers) {
    const { number, trim } = modifiers || {};
    const baseValueExpression = '$$v';
    let valueExpression = baseValueExpression;
    if (trim) {
        valueExpression =
            `(typeof ${baseValueExpression} === 'string'` +
                `? ${baseValueExpression}.trim()` +
                `: ${baseValueExpression})`;
    }
    if (number) {
        valueExpression = `_n(${valueExpression})`;
    }
    const assignment = genAssignmentCode(value, valueExpression);
    el.model = {
        value: `(${value})`,
        expression: JSON.stringify(value),
        callback: `function (${baseValueExpression}) {${assignment}}`
    };
}
/**
 * Cross-platform codegen helper for generating v-model value assignment code.
 */
function genAssignmentCode(value, assignment) {
    const res = parseModel(value);
    if (res.key === null) {
        return `${value}=${assignment}`;
    }
    else {
        return `$set(${res.exp}, ${res.key}, ${assignment})`;
    }
}
/**
 * Parse a v-model expression into a base path and a final key segment.
 * Handles both dot-path and possible square brackets.
 *
 * Possible cases:
 *
 * - test
 * - test[key]
 * - test[test1[key]]
 * - test["a"][key]
 * - xxx.test[a[a].test1[key]]
 * - test.xxx.a["asa"][test1[key]]
 *
 */
let len, str, chr, index, expressionPos, expressionEndPos;
function parseModel(val) {
    // Fix https://github.com/vuejs/vue/pull/7730
    // allow v-model="obj.val " (trailing whitespace)
    val = val.trim();
    len = val.length;
    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
        index = val.lastIndexOf('.');
        if (index > -1) {
            return {
                exp: val.slice(0, index),
                key: '"' + val.slice(index + 1) + '"'
            };
        }
        else {
            return {
                exp: val,
                key: null
            };
        }
    }
    str = val;
    index = expressionPos = expressionEndPos = 0;
    while (!eof()) {
        chr = next();
        /* istanbul ignore if */
        if (isStringStart(chr)) {
            parseString(chr);
        }
        else if (chr === 0x5b) {
            parseBracket(chr);
        }
    }
    return {
        exp: val.slice(0, expressionPos),
        key: val.slice(expressionPos + 1, expressionEndPos)
    };
}
function next() {
    return str.charCodeAt(++index);
}
function eof() {
    return index >= len;
}
function isStringStart(chr) {
    return chr === 0x22 || chr === 0x27;
}
function parseBracket(chr) {
    let inBracket = 1;
    expressionPos = index;
    while (!eof()) {
        chr = next();
        if (isStringStart(chr)) {
            parseString(chr);
            continue;
        }
        if (chr === 0x5b)
            inBracket++;
        if (chr === 0x5d)
            inBracket--;
        if (inBracket === 0) {
            expressionEndPos = index;
            break;
        }
    }
}
function parseString(chr) {
    const stringQuote = chr;
    while (!eof()) {
        chr = next();
        if (chr === stringQuote) {
            break;
        }
    }
}

let warn$1;
// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
const RANGE_TOKEN = '__r';
const CHECKBOX_RADIO_TOKEN = '__c';
function model$1(el, dir, _warn) {
    warn$1 = _warn;
    const value = dir.value;
    const modifiers = dir.modifiers;
    const tag = el.tag;
    const type = el.attrsMap.type;
    {
        // inputs with type="file" are read only and setting the input's
        // value will throw an error.
        if (tag === 'input' && type === 'file') {
            warn$1(`<${el.tag} v-model="${value}" type="file">:\n` +
                `File inputs are read only. Use a v-on:change listener instead.`, el.rawAttrsMap['v-model']);
        }
    }
    if (el.component) {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    else if (tag === 'select') {
        genSelect(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'checkbox') {
        genCheckboxModel(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'radio') {
        genRadioModel(el, value, modifiers);
    }
    else if (tag === 'input' || tag === 'textarea') {
        genDefaultModel(el, value, modifiers);
    }
    else if (!config.isReservedTag(tag)) {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    else {
        warn$1(`<${el.tag} v-model="${value}">: ` +
            `v-model is not supported on this element type. ` +
            "If you are working with contenteditable, it's recommended to " +
            'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);
    }
    // ensure runtime directive metadata
    return true;
}
function genCheckboxModel(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    const valueBinding = getBindingAttr(el, 'value') || 'null';
    const trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
    const falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
    addProp(el, 'checked', `Array.isArray(${value})` +
        `?_i(${value},${valueBinding})>-1` +
        (trueValueBinding === 'true'
            ? `:(${value})`
            : `:_q(${value},${trueValueBinding})`));
    addHandler(el, 'change', `var $$a=${value},` +
        '$$el=$event.target,' +
        `$$c=$$el.checked?(${trueValueBinding}):(${falseValueBinding});` +
        'if(Array.isArray($$a)){' +
        `var $$v=${number ? '_n(' + valueBinding + ')' : valueBinding},` +
        '$$i=_i($$a,$$v);' +
        `if($$el.checked){$$i<0&&(${genAssignmentCode(value, '$$a.concat([$$v])')})}` +
        `else{$$i>-1&&(${genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')})}` +
        `}else{${genAssignmentCode(value, '$$c')}}`, null, true);
}
function genRadioModel(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    let valueBinding = getBindingAttr(el, 'value') || 'null';
    valueBinding = number ? `_n(${valueBinding})` : valueBinding;
    addProp(el, 'checked', `_q(${value},${valueBinding})`);
    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
}
function genSelect(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    const selectedVal = `Array.prototype.filter` +
        `.call($event.target.options,function(o){return o.selected})` +
        `.map(function(o){var val = "_value" in o ? o._value : o.value;` +
        `return ${number ? '_n(val)' : 'val'}})`;
    const assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
    let code = `var $$selectedVal = ${selectedVal};`;
    code = `${code} ${genAssignmentCode(value, assignment)}`;
    addHandler(el, 'change', code, null, true);
}
function genDefaultModel(el, value, modifiers) {
    const type = el.attrsMap.type;
    // warn if v-bind:value conflicts with v-model
    // except for inputs with v-bind:type
    {
        const value = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
        const typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
        if (value && !typeBinding) {
            const binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
            warn$1(`${binding}="${value}" conflicts with v-model on the same element ` +
                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
        }
    }
    const { lazy, number, trim } = modifiers || {};
    const needCompositionGuard = !lazy && type !== 'range';
    const event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
    let valueExpression = '$event.target.value';
    if (trim) {
        valueExpression = `$event.target.value.trim()`;
    }
    if (number) {
        valueExpression = `_n(${valueExpression})`;
    }
    let code = genAssignmentCode(value, valueExpression);
    if (needCompositionGuard) {
        code = `if($event.target.composing)return;${code}`;
    }
    addProp(el, 'value', `(${value})`);
    addHandler(el, event, code, null, true);
    if (trim || number) {
        addHandler(el, 'blur', '$forceUpdate()');
    }
}

// normalize v-model event tokens that can only be determined at runtime.
// it's important to place the event as the first in the array because
// the whole point is ensuring the v-model callback gets called before
// user-attached handlers.
function normalizeEvents(on) {
    /* istanbul ignore if */
    if (isDef(on[RANGE_TOKEN])) {
        // IE input[type=range] only supports `change` event
        const event = isIE ? 'change' : 'input';
        on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);
        delete on[RANGE_TOKEN];
    }
    // This was originally intended to fix #4521 but no longer necessary
    // after 2.5. Keeping it for backwards compat with generated code from < 2.4
    /* istanbul ignore if */
    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
        delete on[CHECKBOX_RADIO_TOKEN];
    }
}
let target;
function createOnceHandler(event, handler, capture) {
    const _target = target; // save current target element in closure
    return function onceHandler() {
        const res = handler.apply(null, arguments);
        if (res !== null) {
            remove(event, onceHandler, capture, _target);
        }
    };
}
// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
// implementation and does not fire microtasks in between event propagation, so
// safe to exclude.
const useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
function add(name, handler, capture, passive) {
    // async edge case #6566: inner click event triggers patch, event handler
    // attached to outer element during patch, and triggered again. This
    // happens because browsers fire microtask ticks between event propagation.
    // the solution is simple: we save the timestamp when a handler is attached,
    // and the handler would only fire if the event passed to it was fired
    // AFTER it was attached.
    if (useMicrotaskFix) {
        const attachedTimestamp = currentFlushTimestamp;
        const original = handler;
        //@ts-expect-error
        handler = original._wrapper = function (e) {
            if (
            // no bubbling, should always fire.
            // this is just a safety net in case event.timeStamp is unreliable in
            // certain weird environments...
            e.target === e.currentTarget ||
                // event is fired after handler attachment
                e.timeStamp >= attachedTimestamp ||
                // bail for environments that have buggy event.timeStamp implementations
                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
                // #9681 QtWebEngine event.timeStamp is negative value
                e.timeStamp <= 0 ||
                // #9448 bail if event is fired in another document in a multi-page
                // electron/nw.js app, since event.timeStamp will be using a different
                // starting reference
                e.target.ownerDocument !== document) {
                return original.apply(this, arguments);
            }
        };
    }
    target.addEventListener(name, handler, supportsPassive ? { capture, passive } : capture);
}
function remove(name, handler, capture, _target) {
    (_target || target).removeEventListener(name, 
    //@ts-expect-error
    handler._wrapper || handler, capture);
}
function updateDOMListeners(oldVnode, vnode) {
    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
        return;
    }
    const on = vnode.data.on || {};
    const oldOn = oldVnode.data.on || {};
    // vnode is empty when removing all listeners,
    // and use old vnode dom element
    target = vnode.elm || oldVnode.elm;
    normalizeEvents(on);
    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
    target = undefined;
}
var events = {
    create: updateDOMListeners,
    update: updateDOMListeners,
    // @ts-expect-error emptyNode has actually data
    destroy: (vnode) => updateDOMListeners(vnode, emptyNode)
};

let svgContainer;
function updateDOMProps(oldVnode, vnode) {
    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
        return;
    }
    let key, cur;
    const elm = vnode.elm;
    const oldProps = oldVnode.data.domProps || {};
    let props = vnode.data.domProps || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
        props = vnode.data.domProps = extend({}, props);
    }
    for (key in oldProps) {
        if (!(key in props)) {
            elm[key] = '';
        }
    }
    for (key in props) {
        cur = props[key];
        // ignore children if the node has textContent or innerHTML,
        // as these will throw away existing DOM nodes and cause removal errors
        // on subsequent patches (#3360)
        if (key === 'textContent' || key === 'innerHTML') {
            if (vnode.children)
                vnode.children.length = 0;
            if (cur === oldProps[key])
                continue;
            // #6601 work around Chrome version <= 55 bug where single textNode
            // replaced by innerHTML/textContent retains its parentNode property
            if (elm.childNodes.length === 1) {
                elm.removeChild(elm.childNodes[0]);
            }
        }
        if (key === 'value' && elm.tagName !== 'PROGRESS') {
            // store value as _value as well since
            // non-string values will be stringified
            elm._value = cur;
            // avoid resetting cursor position when value is the same
            const strCur = isUndef(cur) ? '' : String(cur);
            if (shouldUpdateValue(elm, strCur)) {
                elm.value = strCur;
            }
        }
        else if (key === 'innerHTML' &&
            isSVG(elm.tagName) &&
            isUndef(elm.innerHTML)) {
            // IE doesn't support innerHTML for SVG elements
            svgContainer = svgContainer || document.createElement('div');
            svgContainer.innerHTML = `<svg>${cur}</svg>`;
            const svg = svgContainer.firstChild;
            while (elm.firstChild) {
                elm.removeChild(elm.firstChild);
            }
            while (svg.firstChild) {
                elm.appendChild(svg.firstChild);
            }
        }
        else if (
        // skip the update if old and new VDOM state is the same.
        // `value` is handled separately because the DOM value may be temporarily
        // out of sync with VDOM state due to focus, composition and modifiers.
        // This  #4521 by skipping the unnecessary `checked` update.
        cur !== oldProps[key]) {
            // some property updates can throw
            // e.g. `value` on <progress> w/ non-finite value
            try {
                elm[key] = cur;
            }
            catch (e) { }
        }
    }
}
function shouldUpdateValue(elm, checkVal) {
    return (
    //@ts-expect-error
    !elm.composing &&
        (elm.tagName === 'OPTION' ||
            isNotInFocusAndDirty(elm, checkVal) ||
            isDirtyWithModifiers(elm, checkVal)));
}
function isNotInFocusAndDirty(elm, checkVal) {
    // return true when textbox (.number and .trim) loses focus and its value is
    // not equal to the updated value
    let notInFocus = true;
    // #6157
    // work around IE bug when accessing document.activeElement in an iframe
    try {
        notInFocus = document.activeElement !== elm;
    }
    catch (e) { }
    return notInFocus && elm.value !== checkVal;
}
function isDirtyWithModifiers(elm, newVal) {
    const value = elm.value;
    const modifiers = elm._vModifiers; // injected by v-model runtime
    if (isDef(modifiers)) {
        if (modifiers.number) {
            return toNumber(value) !== toNumber(newVal);
        }
        if (modifiers.trim) {
            return value.trim() !== newVal.trim();
        }
    }
    return value !== newVal;
}
var domProps = {
    create: updateDOMProps,
    update: updateDOMProps
};

const parseStyleText = cached(function (cssText) {
    const res = {};
    const listDelimiter = /;(?![^(]*\))/g;
    const propertyDelimiter = /:(.+)/;
    cssText.split(listDelimiter).forEach(function (item) {
        if (item) {
            const tmp = item.split(propertyDelimiter);
            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return res;
});
// merge static and dynamic style data on the same vnode
function normalizeStyleData(data) {
    const style = normalizeStyleBinding(data.style);
    // static style is pre-processed into an object during compilation
    // and is always a fresh object, so it's safe to merge into it
    return data.staticStyle ? extend(data.staticStyle, style) : style;
}
// normalize possible array / string values into Object
function normalizeStyleBinding(bindingStyle) {
    if (Array.isArray(bindingStyle)) {
        return toObject(bindingStyle);
    }
    if (typeof bindingStyle === 'string') {
        return parseStyleText(bindingStyle);
    }
    return bindingStyle;
}
/**
 * parent component style should be after child's
 * so that parent component's style could override it
 */
function getStyle(vnode, checkChild) {
    const res = {};
    let styleData;
    if (checkChild) {
        let childNode = vnode;
        while (childNode.componentInstance) {
            childNode = childNode.componentInstance._vnode;
            if (childNode &&
                childNode.data &&
                (styleData = normalizeStyleData(childNode.data))) {
                extend(res, styleData);
            }
        }
    }
    if ((styleData = normalizeStyleData(vnode.data))) {
        extend(res, styleData);
    }
    let parentNode = vnode;
    // @ts-expect-error parentNode.parent not VNodeWithData
    while ((parentNode = parentNode.parent)) {
        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
            extend(res, styleData);
        }
    }
    return res;
}

const cssVarRE = /^--/;
const importantRE = /\s*!important$/;
const setProp = (el, name, val) => {
    /* istanbul ignore if */
    if (cssVarRE.test(name)) {
        el.style.setProperty(name, val);
    }
    else if (importantRE.test(val)) {
        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
    }
    else {
        const normalizedName = normalize(name);
        if (Array.isArray(val)) {
            // Support values array created by autoprefixer, e.g.
            // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
            // Set them one by one, and the browser will only set those it can recognize
            for (let i = 0, len = val.length; i < len; i++) {
                el.style[normalizedName] = val[i];
            }
        }
        else {
            el.style[normalizedName] = val;
        }
    }
};
const vendorNames = ['Webkit', 'Moz', 'ms'];
let emptyStyle;
const normalize = cached(function (prop) {
    emptyStyle = emptyStyle || document.createElement('div').style;
    prop = camelize(prop);
    if (prop !== 'filter' && prop in emptyStyle) {
        return prop;
    }
    const capName = prop.charAt(0).toUpperCase() + prop.slice(1);
    for (let i = 0; i < vendorNames.length; i++) {
        const name = vendorNames[i] + capName;
        if (name in emptyStyle) {
            return name;
        }
    }
});
function updateStyle(oldVnode, vnode) {
    const data = vnode.data;
    const oldData = oldVnode.data;
    if (isUndef(data.staticStyle) &&
        isUndef(data.style) &&
        isUndef(oldData.staticStyle) &&
        isUndef(oldData.style)) {
        return;
    }
    let cur, name;
    const el = vnode.elm;
    const oldStaticStyle = oldData.staticStyle;
    const oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
    // if static style exists, stylebinding already merged into it when doing normalizeStyleData
    const oldStyle = oldStaticStyle || oldStyleBinding;
    const style = normalizeStyleBinding(vnode.data.style) || {};
    // store normalized style under a different key for next diff
    // make sure to clone it if it's reactive, since the user likely wants
    // to mutate it.
    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
    const newStyle = getStyle(vnode, true);
    for (name in oldStyle) {
        if (isUndef(newStyle[name])) {
            setProp(el, name, '');
        }
    }
    for (name in newStyle) {
        cur = newStyle[name];
        if (cur !== oldStyle[name]) {
            // ie9 setting to null has no effect, must use empty string
            setProp(el, name, cur == null ? '' : cur);
        }
    }
}
var style$1 = {
    create: updateStyle,
    update: updateStyle
};

const whitespaceRE$1 = /\s+/;
/**
 * Add class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function addClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE$1).forEach(c => el.classList.add(c));
        }
        else {
            el.classList.add(cls);
        }
    }
    else {
        const cur = ` ${el.getAttribute('class') || ''} `;
        if (cur.indexOf(' ' + cls + ' ') < 0) {
            el.setAttribute('class', (cur + cls).trim());
        }
    }
}
/**
 * Remove class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function removeClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE$1).forEach(c => el.classList.remove(c));
        }
        else {
            el.classList.remove(cls);
        }
        if (!el.classList.length) {
            el.removeAttribute('class');
        }
    }
    else {
        let cur = ` ${el.getAttribute('class') || ''} `;
        const tar = ' ' + cls + ' ';
        while (cur.indexOf(tar) >= 0) {
            cur = cur.replace(tar, ' ');
        }
        cur = cur.trim();
        if (cur) {
            el.setAttribute('class', cur);
        }
        else {
            el.removeAttribute('class');
        }
    }
}

function resolveTransition(def) {
    if (!def) {
        return;
    }
    /* istanbul ignore else */
    if (typeof def === 'object') {
        const res = {};
        if (def.css !== false) {
            extend(res, autoCssTransition(def.name || 'v'));
        }
        extend(res, def);
        return res;
    }
    else if (typeof def === 'string') {
        return autoCssTransition(def);
    }
}
const autoCssTransition = cached(name => {
    return {
        enterClass: `${name}-enter`,
        enterToClass: `${name}-enter-to`,
        enterActiveClass: `${name}-enter-active`,
        leaveClass: `${name}-leave`,
        leaveToClass: `${name}-leave-to`,
        leaveActiveClass: `${name}-leave-active`
    };
});
const hasTransition = inBrowser && !isIE9;
const TRANSITION = 'transition';
const ANIMATION = 'animation';
// Transition property/event sniffing
let transitionProp = 'transition';
let transitionEndEvent = 'transitionend';
let animationProp = 'animation';
let animationEndEvent = 'animationend';
if (hasTransition) {
    /* istanbul ignore if */
    if (window.ontransitionend === undefined &&
        window.onwebkittransitionend !== undefined) {
        transitionProp = 'WebkitTransition';
        transitionEndEvent = 'webkitTransitionEnd';
    }
    if (window.onanimationend === undefined &&
        window.onwebkitanimationend !== undefined) {
        animationProp = 'WebkitAnimation';
        animationEndEvent = 'webkitAnimationEnd';
    }
}
// binding to window is necessary to make hot reload work in IE in strict mode
const raf = inBrowser
    ? window.requestAnimationFrame
        ? window.requestAnimationFrame.bind(window)
        : setTimeout
    : /* istanbul ignore next */ /* istanbul ignore next */ fn => fn();
function nextFrame(fn) {
    raf(() => {
        // @ts-expect-error
        raf(fn);
    });
}
function addTransitionClass(el, cls) {
    const transitionClasses = el._transitionClasses || (el._transitionClasses = []);
    if (transitionClasses.indexOf(cls) < 0) {
        transitionClasses.push(cls);
        addClass(el, cls);
    }
}
function removeTransitionClass(el, cls) {
    if (el._transitionClasses) {
        remove$2(el._transitionClasses, cls);
    }
    removeClass(el, cls);
}
function whenTransitionEnds(el, expectedType, cb) {
    const { type, timeout, propCount } = getTransitionInfo(el, expectedType);
    if (!type)
        return cb();
    const event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
    let ended = 0;
    const end = () => {
        el.removeEventListener(event, onEnd);
        cb();
    };
    const onEnd = e => {
        if (e.target === el) {
            if (++ended >= propCount) {
                end();
            }
        }
    };
    setTimeout(() => {
        if (ended < propCount) {
            end();
        }
    }, timeout + 1);
    el.addEventListener(event, onEnd);
}
const transformRE = /\b(transform|all)(,|$)/;
function getTransitionInfo(el, expectedType) {
    const styles = window.getComputedStyle(el);
    // JSDOM may return undefined for transition properties
    const transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
    const transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
    const transitionTimeout = getTimeout(transitionDelays, transitionDurations);
    const animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
    const animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
    const animationTimeout = getTimeout(animationDelays, animationDurations);
    let type;
    let timeout = 0;
    let propCount = 0;
    /* istanbul ignore if */
    if (expectedType === TRANSITION) {
        if (transitionTimeout > 0) {
            type = TRANSITION;
            timeout = transitionTimeout;
            propCount = transitionDurations.length;
        }
    }
    else if (expectedType === ANIMATION) {
        if (animationTimeout > 0) {
            type = ANIMATION;
            timeout = animationTimeout;
            propCount = animationDurations.length;
        }
    }
    else {
        timeout = Math.max(transitionTimeout, animationTimeout);
        type =
            timeout > 0
                ? transitionTimeout > animationTimeout
                    ? TRANSITION
                    : ANIMATION
                : null;
        propCount = type
            ? type === TRANSITION
                ? transitionDurations.length
                : animationDurations.length
            : 0;
    }
    const hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
    return {
        type,
        timeout,
        propCount,
        hasTransform
    };
}
function getTimeout(delays, durations) {
    /* istanbul ignore next */
    while (delays.length < durations.length) {
        delays = delays.concat(delays);
    }
    return Math.max.apply(null, durations.map((d, i) => {
        return toMs(d) + toMs(delays[i]);
    }));
}
// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
// in a locale-dependent way, using a comma instead of a dot.
// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
// as a floor function) causing unexpected behaviors
function toMs(s) {
    return Number(s.slice(0, -1).replace(',', '.')) * 1000;
}

function enter(vnode, toggleDisplay) {
    const el = vnode.elm;
    // call leave callback now
    if (isDef(el._leaveCb)) {
        el._leaveCb.cancelled = true;
        el._leaveCb();
    }
    const data = resolveTransition(vnode.data.transition);
    if (isUndef(data)) {
        return;
    }
    /* istanbul ignore if */
    if (isDef(el._enterCb) || el.nodeType !== 1) {
        return;
    }
    const { css, type, enterClass, enterToClass, enterActiveClass, appearClass, appearToClass, appearActiveClass, beforeEnter, enter, afterEnter, enterCancelled, beforeAppear, appear, afterAppear, appearCancelled, duration } = data;
    // activeInstance will always be the <transition> component managing this
    // transition. One edge case to check is when the <transition> is placed
    // as the root node of a child component. In that case we need to check
    // <transition>'s parent for appear check.
    let context = activeInstance;
    let transitionNode = activeInstance.$vnode;
    while (transitionNode && transitionNode.parent) {
        context = transitionNode.context;
        transitionNode = transitionNode.parent;
    }
    const isAppear = !context._isMounted || !vnode.isRootInsert;
    if (isAppear && !appear && appear !== '') {
        return;
    }
    const startClass = isAppear && appearClass ? appearClass : enterClass;
    const activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
    const toClass = isAppear && appearToClass ? appearToClass : enterToClass;
    const beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
    const enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
    const afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
    const enterCancelledHook = isAppear
        ? appearCancelled || enterCancelled
        : enterCancelled;
    const explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
    if (explicitEnterDuration != null) {
        checkDuration(explicitEnterDuration, 'enter', vnode);
    }
    const expectsCSS = css !== false && !isIE9;
    const userWantsControl = getHookArgumentsLength(enterHook);
    const cb = (el._enterCb = once(() => {
        if (expectsCSS) {
            removeTransitionClass(el, toClass);
            removeTransitionClass(el, activeClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, startClass);
            }
            enterCancelledHook && enterCancelledHook(el);
        }
        else {
            afterEnterHook && afterEnterHook(el);
        }
        el._enterCb = null;
    }));
    if (!vnode.data.show) {
        // remove pending leave element on enter by injecting an insert hook
        mergeVNodeHook(vnode, 'insert', () => {
            const parent = el.parentNode;
            const pendingNode = parent && parent._pending && parent._pending[vnode.key];
            if (pendingNode &&
                pendingNode.tag === vnode.tag &&
                pendingNode.elm._leaveCb) {
                pendingNode.elm._leaveCb();
            }
            enterHook && enterHook(el, cb);
        });
    }
    // start enter transition
    beforeEnterHook && beforeEnterHook(el);
    if (expectsCSS) {
        addTransitionClass(el, startClass);
        addTransitionClass(el, activeClass);
        nextFrame(() => {
            removeTransitionClass(el, startClass);
            // @ts-expect-error
            if (!cb.cancelled) {
                addTransitionClass(el, toClass);
                if (!userWantsControl) {
                    if (isValidDuration(explicitEnterDuration)) {
                        setTimeout(cb, explicitEnterDuration);
                    }
                    else {
                        whenTransitionEnds(el, type, cb);
                    }
                }
            }
        });
    }
    if (vnode.data.show) {
        toggleDisplay && toggleDisplay();
        enterHook && enterHook(el, cb);
    }
    if (!expectsCSS && !userWantsControl) {
        cb();
    }
}
function leave(vnode, rm) {
    const el = vnode.elm;
    // call enter callback now
    if (isDef(el._enterCb)) {
        el._enterCb.cancelled = true;
        el._enterCb();
    }
    const data = resolveTransition(vnode.data.transition);
    if (isUndef(data) || el.nodeType !== 1) {
        return rm();
    }
    /* istanbul ignore if */
    if (isDef(el._leaveCb)) {
        return;
    }
    const { css, type, leaveClass, leaveToClass, leaveActiveClass, beforeLeave, leave, afterLeave, leaveCancelled, delayLeave, duration } = data;
    const expectsCSS = css !== false && !isIE9;
    const userWantsControl = getHookArgumentsLength(leave);
    const explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
    if (isDef(explicitLeaveDuration)) {
        checkDuration(explicitLeaveDuration, 'leave', vnode);
    }
    const cb = (el._leaveCb = once(() => {
        if (el.parentNode && el.parentNode._pending) {
            el.parentNode._pending[vnode.key] = null;
        }
        if (expectsCSS) {
            removeTransitionClass(el, leaveToClass);
            removeTransitionClass(el, leaveActiveClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, leaveClass);
            }
            leaveCancelled && leaveCancelled(el);
        }
        else {
            rm();
            afterLeave && afterLeave(el);
        }
        el._leaveCb = null;
    }));
    if (delayLeave) {
        delayLeave(performLeave);
    }
    else {
        performLeave();
    }
    function performLeave() {
        // the delayed leave may have already been cancelled
        // @ts-expect-error
        if (cb.cancelled) {
            return;
        }
        // record leaving element
        if (!vnode.data.show && el.parentNode) {
            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
                vnode;
        }
        beforeLeave && beforeLeave(el);
        if (expectsCSS) {
            addTransitionClass(el, leaveClass);
            addTransitionClass(el, leaveActiveClass);
            nextFrame(() => {
                removeTransitionClass(el, leaveClass);
                // @ts-expect-error
                if (!cb.cancelled) {
                    addTransitionClass(el, leaveToClass);
                    if (!userWantsControl) {
                        if (isValidDuration(explicitLeaveDuration)) {
                            setTimeout(cb, explicitLeaveDuration);
                        }
                        else {
                            whenTransitionEnds(el, type, cb);
                        }
                    }
                }
            });
        }
        leave && leave(el, cb);
        if (!expectsCSS && !userWantsControl) {
            cb();
        }
    }
}
// only used in dev mode
function checkDuration(val, name, vnode) {
    if (typeof val !== 'number') {
        warn$2(`<transition> explicit ${name} duration is not a valid number - ` +
            `got ${JSON.stringify(val)}.`, vnode.context);
    }
    else if (isNaN(val)) {
        warn$2(`<transition> explicit ${name} duration is NaN - ` +
            'the duration expression might be incorrect.', vnode.context);
    }
}
function isValidDuration(val) {
    return typeof val === 'number' && !isNaN(val);
}
/**
 * Normalize a transition hook's argument length. The hook may be:
 * - a merged hook (invoker) with the original in .fns
 * - a wrapped component method (check ._length)
 * - a plain function (.length)
 */
function getHookArgumentsLength(fn) {
    if (isUndef(fn)) {
        return false;
    }
    // @ts-expect-error
    const invokerFns = fn.fns;
    if (isDef(invokerFns)) {
        // invoker
        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
    }
    else {
        // @ts-expect-error
        return (fn._length || fn.length) > 1;
    }
}
function _enter(_, vnode) {
    if (vnode.data.show !== true) {
        enter(vnode);
    }
}
var transition = inBrowser
    ? {
        create: _enter,
        activate: _enter,
        remove(vnode, rm) {
            /* istanbul ignore else */
            if (vnode.data.show !== true) {
                // @ts-expect-error
                leave(vnode, rm);
            }
            else {
                rm();
            }
        }
    }
    : {};

var platformModules = [attrs, klass$1, events, domProps, style$1, transition];

// the directive module should be applied last, after all
// built-in modules have been applied.
const modules$1 = platformModules.concat(baseModules);
const patch = createPatchFunction({ nodeOps, modules: modules$1 });

/**
 * Not type checking this file because flow doesn't like attaching
 * properties to Elements.
 */
/* istanbul ignore if */
if (isIE9) {
    // http://www.matts411.com/post/internet-explorer-9-oninput/
    document.addEventListener('selectionchange', () => {
        const el = document.activeElement;
        // @ts-expect-error
        if (el && el.vmodel) {
            trigger(el, 'input');
        }
    });
}
const directive = {
    inserted(el, binding, vnode, oldVnode) {
        if (vnode.tag === 'select') {
            // #6903
            if (oldVnode.elm && !oldVnode.elm._vOptions) {
                mergeVNodeHook(vnode, 'postpatch', () => {
                    directive.componentUpdated(el, binding, vnode);
                });
            }
            else {
                setSelected(el, binding, vnode.context);
            }
            el._vOptions = [].map.call(el.options, getValue);
        }
        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
            el._vModifiers = binding.modifiers;
            if (!binding.modifiers.lazy) {
                el.addEventListener('compositionstart', onCompositionStart);
                el.addEventListener('compositionend', onCompositionEnd);
                // Safari < 10.2 & UIWebView doesn't fire compositionend when
                // switching focus before confirming composition choice
                // this also fixes the issue where some browsers e.g. iOS Chrome
                // fires "change" instead of "input" on autocomplete.
                el.addEventListener('change', onCompositionEnd);
                /* istanbul ignore if */
                if (isIE9) {
                    el.vmodel = true;
                }
            }
        }
    },
    componentUpdated(el, binding, vnode) {
        if (vnode.tag === 'select') {
            setSelected(el, binding, vnode.context);
            // in case the options rendered by v-for have changed,
            // it's possible that the value is out-of-sync with the rendered options.
            // detect such cases and filter out values that no longer has a matching
            // option in the DOM.
            const prevOptions = el._vOptions;
            const curOptions = (el._vOptions = [].map.call(el.options, getValue));
            if (curOptions.some((o, i) => !looseEqual(o, prevOptions[i]))) {
                // trigger change event if
                // no matching option found for at least one value
                const needReset = el.multiple
                    ? binding.value.some(v => hasNoMatchingOption(v, curOptions))
                    : binding.value !== binding.oldValue &&
                        hasNoMatchingOption(binding.value, curOptions);
                if (needReset) {
                    trigger(el, 'change');
                }
            }
        }
    }
};
function setSelected(el, binding, vm) {
    actuallySetSelected(el, binding, vm);
    /* istanbul ignore if */
    if (isIE || isEdge) {
        setTimeout(() => {
            actuallySetSelected(el, binding, vm);
        }, 0);
    }
}
function actuallySetSelected(el, binding, vm) {
    const value = binding.value;
    const isMultiple = el.multiple;
    if (isMultiple && !Array.isArray(value)) {
        warn$2(`<select multiple v-model="${binding.expression}"> ` +
                `expects an Array value for its binding, but got ${Object.prototype.toString
                    .call(value)
                    .slice(8, -1)}`, vm);
        return;
    }
    let selected, option;
    for (let i = 0, l = el.options.length; i < l; i++) {
        option = el.options[i];
        if (isMultiple) {
            selected = looseIndexOf(value, getValue(option)) > -1;
            if (option.selected !== selected) {
                option.selected = selected;
            }
        }
        else {
            if (looseEqual(getValue(option), value)) {
                if (el.selectedIndex !== i) {
                    el.selectedIndex = i;
                }
                return;
            }
        }
    }
    if (!isMultiple) {
        el.selectedIndex = -1;
    }
}
function hasNoMatchingOption(value, options) {
    return options.every(o => !looseEqual(o, value));
}
function getValue(option) {
    return '_value' in option ? option._value : option.value;
}
function onCompositionStart(e) {
    e.target.composing = true;
}
function onCompositionEnd(e) {
    // prevent triggering an input event for no reason
    if (!e.target.composing)
        return;
    e.target.composing = false;
    trigger(e.target, 'input');
}
function trigger(el, type) {
    const e = document.createEvent('HTMLEvents');
    e.initEvent(type, true, true);
    el.dispatchEvent(e);
}

// recursively search for possible transition defined inside the component root
function locateNode(vnode) {
    // @ts-expect-error
    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
        ? locateNode(vnode.componentInstance._vnode)
        : vnode;
}
var show = {
    bind(el, { value }, vnode) {
        vnode = locateNode(vnode);
        const transition = vnode.data && vnode.data.transition;
        const originalDisplay = (el.__vOriginalDisplay =
            el.style.display === 'none' ? '' : el.style.display);
        if (value && transition) {
            vnode.data.show = true;
            enter(vnode, () => {
                el.style.display = originalDisplay;
            });
        }
        else {
            el.style.display = value ? originalDisplay : 'none';
        }
    },
    update(el, { value, oldValue }, vnode) {
        /* istanbul ignore if */
        if (!value === !oldValue)
            return;
        vnode = locateNode(vnode);
        const transition = vnode.data && vnode.data.transition;
        if (transition) {
            vnode.data.show = true;
            if (value) {
                enter(vnode, () => {
                    el.style.display = el.__vOriginalDisplay;
                });
            }
            else {
                leave(vnode, () => {
                    el.style.display = 'none';
                });
            }
        }
        else {
            el.style.display = value ? el.__vOriginalDisplay : 'none';
        }
    },
    unbind(el, binding, vnode, oldVnode, isDestroy) {
        if (!isDestroy) {
            el.style.display = el.__vOriginalDisplay;
        }
    }
};

var platformDirectives = {
    model: directive,
    show
};

// Provides transition support for a single element/component.
const transitionProps = {
    name: String,
    appear: Boolean,
    css: Boolean,
    mode: String,
    type: String,
    enterClass: String,
    leaveClass: String,
    enterToClass: String,
    leaveToClass: String,
    enterActiveClass: String,
    leaveActiveClass: String,
    appearClass: String,
    appearActiveClass: String,
    appearToClass: String,
    duration: [Number, String, Object]
};
// in case the child is also an abstract component, e.g. <keep-alive>
// we want to recursively retrieve the real component to be rendered
function getRealChild(vnode) {
    const compOptions = vnode && vnode.componentOptions;
    if (compOptions && compOptions.Ctor.options.abstract) {
        return getRealChild(getFirstComponentChild(compOptions.children));
    }
    else {
        return vnode;
    }
}
function extractTransitionData(comp) {
    const data = {};
    const options = comp.$options;
    // props
    for (const key in options.propsData) {
        data[key] = comp[key];
    }
    // events.
    // extract listeners and pass them directly to the transition methods
    const listeners = options._parentListeners;
    for (const key in listeners) {
        data[camelize(key)] = listeners[key];
    }
    return data;
}
function placeholder(h, rawChild) {
    // @ts-expect-error
    if (/\d-keep-alive$/.test(rawChild.tag)) {
        return h('keep-alive', {
            props: rawChild.componentOptions.propsData
        });
    }
}
function hasParentTransition(vnode) {
    while ((vnode = vnode.parent)) {
        if (vnode.data.transition) {
            return true;
        }
    }
}
function isSameChild(child, oldChild) {
    return oldChild.key === child.key && oldChild.tag === child.tag;
}
const isNotTextNode = (c) => c.tag || isAsyncPlaceholder(c);
const isVShowDirective = d => d.name === 'show';
var Transition = {
    name: 'transition',
    props: transitionProps,
    abstract: true,
    render(h) {
        let children = this.$slots.default;
        if (!children) {
            return;
        }
        // filter out text nodes (possible whitespaces)
        children = children.filter(isNotTextNode);
        /* istanbul ignore if */
        if (!children.length) {
            return;
        }
        // warn multiple elements
        if (children.length > 1) {
            warn$2('<transition> can only be used on a single element. Use ' +
                '<transition-group> for lists.', this.$parent);
        }
        const mode = this.mode;
        // warn invalid mode
        if (mode && mode !== 'in-out' && mode !== 'out-in') {
            warn$2('invalid <transition> mode: ' + mode, this.$parent);
        }
        const rawChild = children[0];
        // if this is a component root node and the component's
        // parent container node also has transition, skip.
        if (hasParentTransition(this.$vnode)) {
            return rawChild;
        }
        // apply transition data to child
        // use getRealChild() to ignore abstract components e.g. keep-alive
        const child = getRealChild(rawChild);
        /* istanbul ignore if */
        if (!child) {
            return rawChild;
        }
        if (this._leaving) {
            return placeholder(h, rawChild);
        }
        // ensure a key that is unique to the vnode type and to this transition
        // component instance. This key will be used to remove pending leaving nodes
        // during entering.
        const id = `__transition-${this._uid}-`;
        child.key =
            child.key == null
                ? child.isComment
                    ? id + 'comment'
                    : id + child.tag
                : isPrimitive(child.key)
                    ? String(child.key).indexOf(id) === 0
                        ? child.key
                        : id + child.key
                    : child.key;
        const data = ((child.data || (child.data = {})).transition =
            extractTransitionData(this));
        const oldRawChild = this._vnode;
        const oldChild = getRealChild(oldRawChild);
        // mark v-show
        // so that the transition module can hand over the control to the directive
        if (child.data.directives && child.data.directives.some(isVShowDirective)) {
            child.data.show = true;
        }
        if (oldChild &&
            oldChild.data &&
            !isSameChild(child, oldChild) &&
            !isAsyncPlaceholder(oldChild) &&
            // #6687 component root is a comment node
            !(oldChild.componentInstance &&
                oldChild.componentInstance._vnode.isComment)) {
            // replace old child transition data with fresh one
            // important for dynamic transitions!
            const oldData = (oldChild.data.transition = extend({}, data));
            // handle transition mode
            if (mode === 'out-in') {
                // return placeholder node and queue update when leave finishes
                this._leaving = true;
                mergeVNodeHook(oldData, 'afterLeave', () => {
                    this._leaving = false;
                    this.$forceUpdate();
                });
                return placeholder(h, rawChild);
            }
            else if (mode === 'in-out') {
                if (isAsyncPlaceholder(child)) {
                    return oldRawChild;
                }
                let delayedLeave;
                const performLeave = () => {
                    delayedLeave();
                };
                mergeVNodeHook(data, 'afterEnter', performLeave);
                mergeVNodeHook(data, 'enterCancelled', performLeave);
                mergeVNodeHook(oldData, 'delayLeave', leave => {
                    delayedLeave = leave;
                });
            }
        }
        return rawChild;
    }
};

// Provides transition support for list items.
const props = extend({
    tag: String,
    moveClass: String
}, transitionProps);
delete props.mode;
var TransitionGroup = {
    props,
    beforeMount() {
        const update = this._update;
        this._update = (vnode, hydrating) => {
            const restoreActiveInstance = setActiveInstance(this);
            // force removing pass
            this.__patch__(this._vnode, this.kept, false, // hydrating
            true // removeOnly (!important, avoids unnecessary moves)
            );
            this._vnode = this.kept;
            restoreActiveInstance();
            update.call(this, vnode, hydrating);
        };
    },
    render(h) {
        const tag = this.tag || this.$vnode.data.tag || 'span';
        const map = Object.create(null);
        const prevChildren = (this.prevChildren = this.children);
        const rawChildren = this.$slots.default || [];
        const children = (this.children = []);
        const transitionData = extractTransitionData(this);
        for (let i = 0; i < rawChildren.length; i++) {
            const c = rawChildren[i];
            if (c.tag) {
                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
                    children.push(c);
                    map[c.key] = c;
                    (c.data || (c.data = {})).transition = transitionData;
                }
                else {
                    const opts = c.componentOptions;
                    const name = opts
                        ? getComponentName(opts.Ctor.options) || opts.tag || ''
                        : c.tag;
                    warn$2(`<transition-group> children must be keyed: <${name}>`);
                }
            }
        }
        if (prevChildren) {
            const kept = [];
            const removed = [];
            for (let i = 0; i < prevChildren.length; i++) {
                const c = prevChildren[i];
                c.data.transition = transitionData;
                // @ts-expect-error .getBoundingClientRect is not typed in Node
                c.data.pos = c.elm.getBoundingClientRect();
                if (map[c.key]) {
                    kept.push(c);
                }
                else {
                    removed.push(c);
                }
            }
            this.kept = h(tag, null, kept);
            this.removed = removed;
        }
        return h(tag, null, children);
    },
    updated() {
        const children = this.prevChildren;
        const moveClass = this.moveClass || (this.name || 'v') + '-move';
        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
            return;
        }
        // we divide the work into three loops to avoid mixing DOM reads and writes
        // in each iteration - which helps prevent layout thrashing.
        children.forEach(callPendingCbs);
        children.forEach(recordPosition);
        children.forEach(applyTranslation);
        // force reflow to put everything in position
        // assign to this to avoid being removed in tree-shaking
        // $flow-disable-line
        this._reflow = document.body.offsetHeight;
        children.forEach((c) => {
            if (c.data.moved) {
                const el = c.elm;
                const s = el.style;
                addTransitionClass(el, moveClass);
                s.transform = s.WebkitTransform = s.transitionDuration = '';
                el.addEventListener(transitionEndEvent, (el._moveCb = function cb(e) {
                    if (e && e.target !== el) {
                        return;
                    }
                    if (!e || /transform$/.test(e.propertyName)) {
                        el.removeEventListener(transitionEndEvent, cb);
                        el._moveCb = null;
                        removeTransitionClass(el, moveClass);
                    }
                }));
            }
        });
    },
    methods: {
        hasMove(el, moveClass) {
            /* istanbul ignore if */
            if (!hasTransition) {
                return false;
            }
            /* istanbul ignore if */
            if (this._hasMove) {
                return this._hasMove;
            }
            // Detect whether an element with the move class applied has
            // CSS transitions. Since the element may be inside an entering
            // transition at this very moment, we make a clone of it and remove
            // all other transition classes applied to ensure only the move class
            // is applied.
            const clone = el.cloneNode();
            if (el._transitionClasses) {
                el._transitionClasses.forEach((cls) => {
                    removeClass(clone, cls);
                });
            }
            addClass(clone, moveClass);
            clone.style.display = 'none';
            this.$el.appendChild(clone);
            const info = getTransitionInfo(clone);
            this.$el.removeChild(clone);
            return (this._hasMove = info.hasTransform);
        }
    }
};
function callPendingCbs(c) {
    /* istanbul ignore if */
    if (c.elm._moveCb) {
        c.elm._moveCb();
    }
    /* istanbul ignore if */
    if (c.elm._enterCb) {
        c.elm._enterCb();
    }
}
function recordPosition(c) {
    c.data.newPos = c.elm.getBoundingClientRect();
}
function applyTranslation(c) {
    const oldPos = c.data.pos;
    const newPos = c.data.newPos;
    const dx = oldPos.left - newPos.left;
    const dy = oldPos.top - newPos.top;
    if (dx || dy) {
        c.data.moved = true;
        const s = c.elm.style;
        s.transform = s.WebkitTransform = `translate(${dx}px,${dy}px)`;
        s.transitionDuration = '0s';
    }
}

var platformComponents = {
    Transition,
    TransitionGroup
};

// install platform specific utils
Vue.config.mustUseProp = mustUseProp;
Vue.config.isReservedTag = isReservedTag;
Vue.config.isReservedAttr = isReservedAttr;
Vue.config.getTagNamespace = getTagNamespace;
Vue.config.isUnknownElement = isUnknownElement;
// install platform runtime directives & components
extend(Vue.options.directives, platformDirectives);
extend(Vue.options.components, platformComponents);
// install platform patch function
Vue.prototype.__patch__ = inBrowser ? patch : noop;
// public mount method
Vue.prototype.$mount = function (el, hydrating) {
    el = el && inBrowser ? query(el) : undefined;
    return mountComponent(this, el, hydrating);
};
// devtools global hook
/* istanbul ignore next */
if (inBrowser) {
    setTimeout(() => {
        if (config.devtools) {
            if (devtools) {
                devtools.emit('init', Vue);
            }
            else {
                // @ts-expect-error
                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
                    'https://github.com/vuejs/vue-devtools');
            }
        }
        if (config.productionTip !== false &&
            typeof console !== 'undefined') {
            // @ts-expect-error
            console[console.info ? 'info' : 'log'](`You are running Vue in development mode.\n` +
                `Make sure to turn on production mode when deploying for production.\n` +
                `See more tips at https://vuejs.org/guide/deployment.html`);
        }
    }, 0);
}

const defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
const regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
const buildRegex = cached(delimiters => {
    const open = delimiters[0].replace(regexEscapeRE, '\\$&');
    const close = delimiters[1].replace(regexEscapeRE, '\\$&');
    return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
});
function parseText(text, delimiters) {
    //@ts-expect-error
    const tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
    if (!tagRE.test(text)) {
        return;
    }
    const tokens = [];
    const rawTokens = [];
    let lastIndex = (tagRE.lastIndex = 0);
    let match, index, tokenValue;
    while ((match = tagRE.exec(text))) {
        index = match.index;
        // push text token
        if (index > lastIndex) {
            rawTokens.push((tokenValue = text.slice(lastIndex, index)));
            tokens.push(JSON.stringify(tokenValue));
        }
        // tag token
        const exp = parseFilters(match[1].trim());
        tokens.push(`_s(${exp})`);
        rawTokens.push({ '@binding': exp });
        lastIndex = index + match[0].length;
    }
    if (lastIndex < text.length) {
        rawTokens.push((tokenValue = text.slice(lastIndex)));
        tokens.push(JSON.stringify(tokenValue));
    }
    return {
        expression: tokens.join('+'),
        tokens: rawTokens
    };
}

function transformNode$1(el, options) {
    const warn = options.warn || baseWarn;
    const staticClass = getAndRemoveAttr(el, 'class');
    if (staticClass) {
        const res = parseText(staticClass, options.delimiters);
        if (res) {
            warn(`class="${staticClass}": ` +
                'Interpolation inside attributes has been removed. ' +
                'Use v-bind or the colon shorthand instead. For example, ' +
                'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
        }
    }
    if (staticClass) {
        el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
    }
    const classBinding = getBindingAttr(el, 'class', false /* getStatic */);
    if (classBinding) {
        el.classBinding = classBinding;
    }
}
function genData$2(el) {
    let data = '';
    if (el.staticClass) {
        data += `staticClass:${el.staticClass},`;
    }
    if (el.classBinding) {
        data += `class:${el.classBinding},`;
    }
    return data;
}
var klass = {
    staticKeys: ['staticClass'],
    transformNode: transformNode$1,
    genData: genData$2
};

function transformNode(el, options) {
    const warn = options.warn || baseWarn;
    const staticStyle = getAndRemoveAttr(el, 'style');
    if (staticStyle) {
        /* istanbul ignore if */
        {
            const res = parseText(staticStyle, options.delimiters);
            if (res) {
                warn(`style="${staticStyle}": ` +
                    'Interpolation inside attributes has been removed. ' +
                    'Use v-bind or the colon shorthand instead. For example, ' +
                    'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
            }
        }
        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
    }
    const styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
    if (styleBinding) {
        el.styleBinding = styleBinding;
    }
}
function genData$1(el) {
    let data = '';
    if (el.staticStyle) {
        data += `staticStyle:${el.staticStyle},`;
    }
    if (el.styleBinding) {
        data += `style:(${el.styleBinding}),`;
    }
    return data;
}
var style = {
    staticKeys: ['staticStyle'],
    transformNode,
    genData: genData$1
};

let decoder;
var he = {
    decode(html) {
        decoder = decoder || document.createElement('div');
        decoder.innerHTML = html;
        return decoder.textContent;
    }
};

const isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
    'link,meta,param,source,track,wbr');
// Elements that you can, intentionally, leave open
// (and which close themselves)
const canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
const isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
    'title,tr,track');

/**
 * Not type-checking this file because it's mostly vendor code.
 */
// Regular Expressions for parsing tags and attributes
const attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
const dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
const ncname = `[a-zA-Z_][\\-\\.0-9_a-zA-Z${unicodeRegExp.source}]*`;
const qnameCapture = `((?:${ncname}\\:)?${ncname})`;
const startTagOpen = new RegExp(`^<${qnameCapture}`);
const startTagClose = /^\s*(\/?)>/;
const endTag = new RegExp(`^<\\/${qnameCapture}[^>]*>`);
const doctype = /^<!DOCTYPE [^>]+>/i;
// #7298: escape - to avoid being passed as HTML comment when inlined in page
const comment = /^<!\--/;
const conditionalComment = /^<!\[/;
// Special Elements (can contain anything)
const isPlainTextElement = makeMap('script,style,textarea', true);
const reCache = {};
const decodingMap = {
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&amp;': '&',
    '&#10;': '\n',
    '&#9;': '\t',
    '&#39;': "'"
};
const encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
const encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
// #5992
const isIgnoreNewlineTag = makeMap('pre,textarea', true);
const shouldIgnoreFirstNewline = (tag, html) => tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
function decodeAttr(value, shouldDecodeNewlines) {
    const re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
    return value.replace(re, match => decodingMap[match]);
}
function parseHTML(html, options) {
    const stack = [];
    const expectHTML = options.expectHTML;
    const isUnaryTag = options.isUnaryTag || no;
    const canBeLeftOpenTag = options.canBeLeftOpenTag || no;
    let index = 0;
    let last, lastTag;
    while (html) {
        last = html;
        // Make sure we're not in a plaintext content element like script/style
        if (!lastTag || !isPlainTextElement(lastTag)) {
            let textEnd = html.indexOf('<');
            if (textEnd === 0) {
                // Comment:
                if (comment.test(html)) {
                    const commentEnd = html.indexOf('-->');
                    if (commentEnd >= 0) {
                        if (options.shouldKeepComment && options.comment) {
                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
                        }
                        advance(commentEnd + 3);
                        continue;
                    }
                }
                // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
                if (conditionalComment.test(html)) {
                    const conditionalEnd = html.indexOf(']>');
                    if (conditionalEnd >= 0) {
                        advance(conditionalEnd + 2);
                        continue;
                    }
                }
                // Doctype:
                const doctypeMatch = html.match(doctype);
                if (doctypeMatch) {
                    advance(doctypeMatch[0].length);
                    continue;
                }
                // End tag:
                const endTagMatch = html.match(endTag);
                if (endTagMatch) {
                    const curIndex = index;
                    advance(endTagMatch[0].length);
                    parseEndTag(endTagMatch[1], curIndex, index);
                    continue;
                }
                // Start tag:
                const startTagMatch = parseStartTag();
                if (startTagMatch) {
                    handleStartTag(startTagMatch);
                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
                        advance(1);
                    }
                    continue;
                }
            }
            let text, rest, next;
            if (textEnd >= 0) {
                rest = html.slice(textEnd);
                while (!endTag.test(rest) &&
                    !startTagOpen.test(rest) &&
                    !comment.test(rest) &&
                    !conditionalComment.test(rest)) {
                    // < in plain text, be forgiving and treat it as text
                    next = rest.indexOf('<', 1);
                    if (next < 0)
                        break;
                    textEnd += next;
                    rest = html.slice(textEnd);
                }
                text = html.substring(0, textEnd);
            }
            if (textEnd < 0) {
                text = html;
            }
            if (text) {
                advance(text.length);
            }
            if (options.chars && text) {
                options.chars(text, index - text.length, index);
            }
        }
        else {
            let endTagLength = 0;
            const stackedTag = lastTag.toLowerCase();
            const reStackedTag = reCache[stackedTag] ||
                (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));
            const rest = html.replace(reStackedTag, function (all, text, endTag) {
                endTagLength = endTag.length;
                if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {
                    text = text
                        .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
                        .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
                }
                if (shouldIgnoreFirstNewline(stackedTag, text)) {
                    text = text.slice(1);
                }
                if (options.chars) {
                    options.chars(text);
                }
                return '';
            });
            index += html.length - rest.length;
            html = rest;
            parseEndTag(stackedTag, index - endTagLength, index);
        }
        if (html === last) {
            options.chars && options.chars(html);
            if (!stack.length && options.warn) {
                options.warn(`Mal-formatted tag at end of template: "${html}"`, {
                    start: index + html.length
                });
            }
            break;
        }
    }
    // Clean up any remaining tags
    parseEndTag();
    function advance(n) {
        index += n;
        html = html.substring(n);
    }
    function parseStartTag() {
        const start = html.match(startTagOpen);
        if (start) {
            const match = {
                tagName: start[1],
                attrs: [],
                start: index
            };
            advance(start[0].length);
            let end, attr;
            while (!(end = html.match(startTagClose)) &&
                (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
                attr.start = index;
                advance(attr[0].length);
                attr.end = index;
                match.attrs.push(attr);
            }
            if (end) {
                match.unarySlash = end[1];
                advance(end[0].length);
                match.end = index;
                return match;
            }
        }
    }
    function handleStartTag(match) {
        const tagName = match.tagName;
        const unarySlash = match.unarySlash;
        if (expectHTML) {
            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
                parseEndTag(lastTag);
            }
            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
                parseEndTag(tagName);
            }
        }
        const unary = isUnaryTag(tagName) || !!unarySlash;
        const l = match.attrs.length;
        const attrs = new Array(l);
        for (let i = 0; i < l; i++) {
            const args = match.attrs[i];
            const value = args[3] || args[4] || args[5] || '';
            const shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
                ? options.shouldDecodeNewlinesForHref
                : options.shouldDecodeNewlines;
            attrs[i] = {
                name: args[1],
                value: decodeAttr(value, shouldDecodeNewlines)
            };
            if (options.outputSourceRange) {
                attrs[i].start = args.start + args[0].match(/^\s*/).length;
                attrs[i].end = args.end;
            }
        }
        if (!unary) {
            stack.push({
                tag: tagName,
                lowerCasedTag: tagName.toLowerCase(),
                attrs: attrs,
                start: match.start,
                end: match.end
            });
            lastTag = tagName;
        }
        if (options.start) {
            options.start(tagName, attrs, unary, match.start, match.end);
        }
    }
    function parseEndTag(tagName, start, end) {
        let pos, lowerCasedTagName;
        if (start == null)
            start = index;
        if (end == null)
            end = index;
        // Find the closest opened tag of the same type
        if (tagName) {
            lowerCasedTagName = tagName.toLowerCase();
            for (pos = stack.length - 1; pos >= 0; pos--) {
                if (stack[pos].lowerCasedTag === lowerCasedTagName) {
                    break;
                }
            }
        }
        else {
            // If no tag name is provided, clean shop
            pos = 0;
        }
        if (pos >= 0) {
            // Close all the open elements, up the stack
            for (let i = stack.length - 1; i >= pos; i--) {
                if ((i > pos || !tagName) && options.warn) {
                    options.warn(`tag <${stack[i].tag}> has no matching end tag.`, {
                        start: stack[i].start,
                        end: stack[i].end
                    });
                }
                if (options.end) {
                    options.end(stack[i].tag, start, end);
                }
            }
            // Remove the open elements from the stack
            stack.length = pos;
            lastTag = pos && stack[pos - 1].tag;
        }
        else if (lowerCasedTagName === 'br') {
            if (options.start) {
                options.start(tagName, [], true, start, end);
            }
        }
        else if (lowerCasedTagName === 'p') {
            if (options.start) {
                options.start(tagName, [], false, start, end);
            }
            if (options.end) {
                options.end(tagName, start, end);
            }
        }
    }
}

const onRE = /^@|^v-on:/;
const dirRE = /^v-|^@|^:|^#/;
const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
const forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
const stripParensRE = /^\(|\)$/g;
const dynamicArgRE = /^\[.*\]$/;
const argRE = /:(.*)$/;
const bindRE = /^:|^\.|^v-bind:/;
const modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
const slotRE = /^v-slot(:|$)|^#/;
const lineBreakRE = /[\r\n]/;
const whitespaceRE = /[ \f\t\r\n]+/g;
const invalidAttributeRE = /[\s"'<>\/=]/;
const decodeHTMLCached = cached(he.decode);
const emptySlotScopeToken = `_empty_`;
// configurable state
let warn;
let delimiters;
let transforms;
let preTransforms;
let postTransforms;
let platformIsPreTag;
let platformMustUseProp;
let platformGetTagNamespace;
let maybeComponent;
function createASTElement(tag, attrs, parent) {
    return {
        type: 1,
        tag,
        attrsList: attrs,
        attrsMap: makeAttrsMap(attrs),
        rawAttrsMap: {},
        parent,
        children: []
    };
}
/**
 * Convert HTML string to AST.
 */
function parse(template, options) {
    warn = options.warn || baseWarn;
    platformIsPreTag = options.isPreTag || no;
    platformMustUseProp = options.mustUseProp || no;
    platformGetTagNamespace = options.getTagNamespace || no;
    const isReservedTag = options.isReservedTag || no;
    maybeComponent = (el) => !!(el.component ||
        el.attrsMap[':is'] ||
        el.attrsMap['v-bind:is'] ||
        !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
    transforms = pluckModuleFunction(options.modules, 'transformNode');
    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
    delimiters = options.delimiters;
    const stack = [];
    const preserveWhitespace = options.preserveWhitespace !== false;
    const whitespaceOption = options.whitespace;
    let root;
    let currentParent;
    let inVPre = false;
    let inPre = false;
    let warned = false;
    function warnOnce(msg, range) {
        if (!warned) {
            warned = true;
            warn(msg, range);
        }
    }
    function closeElement(element) {
        trimEndingWhitespace(element);
        if (!inVPre && !element.processed) {
            element = processElement(element, options);
        }
        // tree management
        if (!stack.length && element !== root) {
            // allow root elements with v-if, v-else-if and v-else
            if (root.if && (element.elseif || element.else)) {
                {
                    checkRootConstraints(element);
                }
                addIfCondition(root, {
                    exp: element.elseif,
                    block: element
                });
            }
            else {
                warnOnce(`Component template should contain exactly one root element. ` +
                    `If you are using v-if on multiple elements, ` +
                    `use v-else-if to chain them instead.`, { start: element.start });
            }
        }
        if (currentParent && !element.forbidden) {
            if (element.elseif || element.else) {
                processIfConditions(element, currentParent);
            }
            else {
                if (element.slotScope) {
                    // scoped slot
                    // keep it in the children list so that v-else(-if) conditions can
                    // find it as the prev node.
                    const name = element.slotTarget || '"default"';
                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;
                }
                currentParent.children.push(element);
                element.parent = currentParent;
            }
        }
        // final children cleanup
        // filter out scoped slots
        element.children = element.children.filter(c => !c.slotScope);
        // remove trailing whitespace node again
        trimEndingWhitespace(element);
        // check pre state
        if (element.pre) {
            inVPre = false;
        }
        if (platformIsPreTag(element.tag)) {
            inPre = false;
        }
        // apply post-transforms
        for (let i = 0; i < postTransforms.length; i++) {
            postTransforms[i](element, options);
        }
    }
    function trimEndingWhitespace(el) {
        // remove trailing whitespace node
        if (!inPre) {
            let lastNode;
            while ((lastNode = el.children[el.children.length - 1]) &&
                lastNode.type === 3 &&
                lastNode.text === ' ') {
                el.children.pop();
            }
        }
    }
    function checkRootConstraints(el) {
        if (el.tag === 'slot' || el.tag === 'template') {
            warnOnce(`Cannot use <${el.tag}> as component root element because it may ` +
                'contain multiple nodes.', { start: el.start });
        }
        if (el.attrsMap.hasOwnProperty('v-for')) {
            warnOnce('Cannot use v-for on stateful component root element because ' +
                'it renders multiple elements.', el.rawAttrsMap['v-for']);
        }
    }
    parseHTML(template, {
        warn,
        expectHTML: options.expectHTML,
        isUnaryTag: options.isUnaryTag,
        canBeLeftOpenTag: options.canBeLeftOpenTag,
        shouldDecodeNewlines: options.shouldDecodeNewlines,
        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
        shouldKeepComment: options.comments,
        outputSourceRange: options.outputSourceRange,
        start(tag, attrs, unary, start, end) {
            // check namespace.
            // inherit parent ns if there is one
            const ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
            // handle IE svg bug
            /* istanbul ignore if */
            if (isIE && ns === 'svg') {
                attrs = guardIESVGBug(attrs);
            }
            let element = createASTElement(tag, attrs, currentParent);
            if (ns) {
                element.ns = ns;
            }
            {
                if (options.outputSourceRange) {
                    element.start = start;
                    element.end = end;
                    element.rawAttrsMap = element.attrsList.reduce((cumulated, attr) => {
                        cumulated[attr.name] = attr;
                        return cumulated;
                    }, {});
                }
                attrs.forEach(attr => {
                    if (invalidAttributeRE.test(attr.name)) {
                        warn(`Invalid dynamic argument expression: attribute names cannot contain ` +
                            `spaces, quotes, <, >, / or =.`, options.outputSourceRange
                            ? {
                                start: attr.start + attr.name.indexOf(`[`),
                                end: attr.start + attr.name.length
                            }
                            : undefined);
                    }
                });
            }
            if (isForbiddenTag(element) && !isServerRendering()) {
                element.forbidden = true;
                warn('Templates should only be responsible for mapping the state to the ' +
                        'UI. Avoid placing tags with side-effects in your templates, such as ' +
                        `<${tag}>` +
                        ', as they will not be parsed.', { start: element.start });
            }
            // apply pre-transforms
            for (let i = 0; i < preTransforms.length; i++) {
                element = preTransforms[i](element, options) || element;
            }
            if (!inVPre) {
                processPre(element);
                if (element.pre) {
                    inVPre = true;
                }
            }
            if (platformIsPreTag(element.tag)) {
                inPre = true;
            }
            if (inVPre) {
                processRawAttrs(element);
            }
            else if (!element.processed) {
                // structural directives
                processFor(element);
                processIf(element);
                processOnce(element);
            }
            if (!root) {
                root = element;
                {
                    checkRootConstraints(root);
                }
            }
            if (!unary) {
                currentParent = element;
                stack.push(element);
            }
            else {
                closeElement(element);
            }
        },
        end(tag, start, end) {
            const element = stack[stack.length - 1];
            // pop stack
            stack.length -= 1;
            currentParent = stack[stack.length - 1];
            if (options.outputSourceRange) {
                element.end = end;
            }
            closeElement(element);
        },
        chars(text, start, end) {
            if (!currentParent) {
                {
                    if (text === template) {
                        warnOnce('Component template requires a root element, rather than just text.', { start });
                    }
                    else if ((text = text.trim())) {
                        warnOnce(`text "${text}" outside root element will be ignored.`, {
                            start
                        });
                    }
                }
                return;
            }
            // IE textarea placeholder bug
            /* istanbul ignore if */
            if (isIE &&
                currentParent.tag === 'textarea' &&
                currentParent.attrsMap.placeholder === text) {
                return;
            }
            const children = currentParent.children;
            if (inPre || text.trim()) {
                text = isTextTag(currentParent)
                    ? text
                    : decodeHTMLCached(text);
            }
            else if (!children.length) {
                // remove the whitespace-only node right after an opening tag
                text = '';
            }
            else if (whitespaceOption) {
                if (whitespaceOption === 'condense') {
                    // in condense mode, remove the whitespace node if it contains
                    // line break, otherwise condense to a single space
                    text = lineBreakRE.test(text) ? '' : ' ';
                }
                else {
                    text = ' ';
                }
            }
            else {
                text = preserveWhitespace ? ' ' : '';
            }
            if (text) {
                if (!inPre && whitespaceOption === 'condense') {
                    // condense consecutive whitespaces into single space
                    text = text.replace(whitespaceRE, ' ');
                }
                let res;
                let child;
                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
                    child = {
                        type: 2,
                        expression: res.expression,
                        tokens: res.tokens,
                        text
                    };
                }
                else if (text !== ' ' ||
                    !children.length ||
                    children[children.length - 1].text !== ' ') {
                    child = {
                        type: 3,
                        text
                    };
                }
                if (child) {
                    if (options.outputSourceRange) {
                        child.start = start;
                        child.end = end;
                    }
                    children.push(child);
                }
            }
        },
        comment(text, start, end) {
            // adding anything as a sibling to the root node is forbidden
            // comments should still be allowed, but ignored
            if (currentParent) {
                const child = {
                    type: 3,
                    text,
                    isComment: true
                };
                if (options.outputSourceRange) {
                    child.start = start;
                    child.end = end;
                }
                currentParent.children.push(child);
            }
        }
    });
    return root;
}
function processPre(el) {
    if (getAndRemoveAttr(el, 'v-pre') != null) {
        el.pre = true;
    }
}
function processRawAttrs(el) {
    const list = el.attrsList;
    const len = list.length;
    if (len) {
        const attrs = (el.attrs = new Array(len));
        for (let i = 0; i < len; i++) {
            attrs[i] = {
                name: list[i].name,
                value: JSON.stringify(list[i].value)
            };
            if (list[i].start != null) {
                attrs[i].start = list[i].start;
                attrs[i].end = list[i].end;
            }
        }
    }
    else if (!el.pre) {
        // non root node in pre blocks with no attributes
        el.plain = true;
    }
}
function processElement(element, options) {
    processKey(element);
    // determine whether this is a plain element after
    // removing structural attributes
    element.plain =
        !element.key && !element.scopedSlots && !element.attrsList.length;
    processRef(element);
    processSlotContent(element);
    processSlotOutlet(element);
    processComponent(element);
    for (let i = 0; i < transforms.length; i++) {
        element = transforms[i](element, options) || element;
    }
    processAttrs(element);
    return element;
}
function processKey(el) {
    const exp = getBindingAttr(el, 'key');
    if (exp) {
        {
            if (el.tag === 'template') {
                warn(`<template> cannot be keyed. Place the key on real elements instead.`, getRawBindingAttr(el, 'key'));
            }
            if (el.for) {
                const iterator = el.iterator2 || el.iterator1;
                const parent = el.parent;
                if (iterator &&
                    iterator === exp &&
                    parent &&
                    parent.tag === 'transition-group') {
                    warn(`Do not use v-for index as key on <transition-group> children, ` +
                        `this is the same as not using keys.`, getRawBindingAttr(el, 'key'), true /* tip */);
                }
            }
        }
        el.key = exp;
    }
}
function processRef(el) {
    const ref = getBindingAttr(el, 'ref');
    if (ref) {
        el.ref = ref;
        el.refInFor = checkInFor(el);
    }
}
function processFor(el) {
    let exp;
    if ((exp = getAndRemoveAttr(el, 'v-for'))) {
        const res = parseFor(exp);
        if (res) {
            extend(el, res);
        }
        else {
            warn(`Invalid v-for expression: ${exp}`, el.rawAttrsMap['v-for']);
        }
    }
}
function parseFor(exp) {
    const inMatch = exp.match(forAliasRE);
    if (!inMatch)
        return;
    const res = {};
    res.for = inMatch[2].trim();
    const alias = inMatch[1].trim().replace(stripParensRE, '');
    const iteratorMatch = alias.match(forIteratorRE);
    if (iteratorMatch) {
        res.alias = alias.replace(forIteratorRE, '').trim();
        res.iterator1 = iteratorMatch[1].trim();
        if (iteratorMatch[2]) {
            res.iterator2 = iteratorMatch[2].trim();
        }
    }
    else {
        res.alias = alias;
    }
    return res;
}
function processIf(el) {
    const exp = getAndRemoveAttr(el, 'v-if');
    if (exp) {
        el.if = exp;
        addIfCondition(el, {
            exp: exp,
            block: el
        });
    }
    else {
        if (getAndRemoveAttr(el, 'v-else') != null) {
            el.else = true;
        }
        const elseif = getAndRemoveAttr(el, 'v-else-if');
        if (elseif) {
            el.elseif = elseif;
        }
    }
}
function processIfConditions(el, parent) {
    const prev = findPrevElement(parent.children);
    if (prev && prev.if) {
        addIfCondition(prev, {
            exp: el.elseif,
            block: el
        });
    }
    else {
        warn(`v-${el.elseif ? 'else-if="' + el.elseif + '"' : 'else'} ` +
            `used on element <${el.tag}> without corresponding v-if.`, el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
    }
}
function findPrevElement(children) {
    let i = children.length;
    while (i--) {
        if (children[i].type === 1) {
            return children[i];
        }
        else {
            if (children[i].text !== ' ') {
                warn(`text "${children[i].text.trim()}" between v-if and v-else(-if) ` +
                    `will be ignored.`, children[i]);
            }
            children.pop();
        }
    }
}
function addIfCondition(el, condition) {
    if (!el.ifConditions) {
        el.ifConditions = [];
    }
    el.ifConditions.push(condition);
}
function processOnce(el) {
    const once = getAndRemoveAttr(el, 'v-once');
    if (once != null) {
        el.once = true;
    }
}
// handle content being passed to a component as slot,
// e.g. <template slot="xxx">, <div slot-scope="xxx">
function processSlotContent(el) {
    let slotScope;
    if (el.tag === 'template') {
        slotScope = getAndRemoveAttr(el, 'scope');
        /* istanbul ignore if */
        if (slotScope) {
            warn(`the "scope" attribute for scoped slots have been deprecated and ` +
                `replaced by "slot-scope" since 2.5. The new "slot-scope" attribute ` +
                `can also be used on plain elements in addition to <template> to ` +
                `denote scoped slots.`, el.rawAttrsMap['scope'], true);
        }
        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
    }
    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
        /* istanbul ignore if */
        if (el.attrsMap['v-for']) {
            warn(`Ambiguous combined usage of slot-scope and v-for on <${el.tag}> ` +
                `(v-for takes higher priority). Use a wrapper <template> for the ` +
                `scoped slot to make it clearer.`, el.rawAttrsMap['slot-scope'], true);
        }
        el.slotScope = slotScope;
    }
    // slot="xxx"
    const slotTarget = getBindingAttr(el, 'slot');
    if (slotTarget) {
        el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
        // preserve slot as an attribute for native shadow DOM compat
        // only for non-scoped slots.
        if (el.tag !== 'template' && !el.slotScope) {
            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
        }
    }
    // 2.6 v-slot syntax
    {
        if (el.tag === 'template') {
            // v-slot on <template>
            const slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                {
                    if (el.slotTarget || el.slotScope) {
                        warn(`Unexpected mixed usage of different slot syntaxes.`, el);
                    }
                    if (el.parent && !maybeComponent(el.parent)) {
                        warn(`<template v-slot> can only appear at the root level inside ` +
                            `the receiving component`, el);
                    }
                }
                const { name, dynamic } = getSlotName(slotBinding);
                el.slotTarget = name;
                el.slotTargetDynamic = dynamic;
                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
            }
        }
        else {
            // v-slot on component, denotes default slot
            const slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                {
                    if (!maybeComponent(el)) {
                        warn(`v-slot can only be used on components or <template>.`, slotBinding);
                    }
                    if (el.slotScope || el.slotTarget) {
                        warn(`Unexpected mixed usage of different slot syntaxes.`, el);
                    }
                    if (el.scopedSlots) {
                        warn(`To avoid scope ambiguity, the default slot should also use ` +
                            `<template> syntax when there are other named slots.`, slotBinding);
                    }
                }
                // add the component's children to its default slot
                const slots = el.scopedSlots || (el.scopedSlots = {});
                const { name, dynamic } = getSlotName(slotBinding);
                const slotContainer = (slots[name] = createASTElement('template', [], el));
                slotContainer.slotTarget = name;
                slotContainer.slotTargetDynamic = dynamic;
                slotContainer.children = el.children.filter((c) => {
                    if (!c.slotScope) {
                        c.parent = slotContainer;
                        return true;
                    }
                });
                slotContainer.slotScope = slotBinding.value || emptySlotScopeToken;
                // remove children as they are returned from scopedSlots now
                el.children = [];
                // mark el non-plain so data gets generated
                el.plain = false;
            }
        }
    }
}
function getSlotName(binding) {
    let name = binding.name.replace(slotRE, '');
    if (!name) {
        if (binding.name[0] !== '#') {
            name = 'default';
        }
        else {
            warn(`v-slot shorthand syntax requires a slot name.`, binding);
        }
    }
    return dynamicArgRE.test(name)
        ? // dynamic [name]
            { name: name.slice(1, -1), dynamic: true }
        : // static name
            { name: `"${name}"`, dynamic: false };
}
// handle <slot/> outlets
function processSlotOutlet(el) {
    if (el.tag === 'slot') {
        el.slotName = getBindingAttr(el, 'name');
        if (el.key) {
            warn(`\`key\` does not work on <slot> because slots are abstract outlets ` +
                `and can possibly expand into multiple elements. ` +
                `Use the key on a wrapping element instead.`, getRawBindingAttr(el, 'key'));
        }
    }
}
function processComponent(el) {
    let binding;
    if ((binding = getBindingAttr(el, 'is'))) {
        el.component = binding;
    }
    if (getAndRemoveAttr(el, 'inline-template') != null) {
        el.inlineTemplate = true;
    }
}
function processAttrs(el) {
    const list = el.attrsList;
    let i, l, name, rawName, value, modifiers, syncGen, isDynamic;
    for (i = 0, l = list.length; i < l; i++) {
        name = rawName = list[i].name;
        value = list[i].value;
        if (dirRE.test(name)) {
            // mark element as dynamic
            el.hasBindings = true;
            // modifiers
            modifiers = parseModifiers(name.replace(dirRE, ''));
            // support .foo shorthand syntax for the .prop modifier
            if (modifiers) {
                name = name.replace(modifierRE, '');
            }
            if (bindRE.test(name)) {
                // v-bind
                name = name.replace(bindRE, '');
                value = parseFilters(value);
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                if (value.trim().length === 0) {
                    warn(`The value for a v-bind expression cannot be empty. Found in "v-bind:${name}"`);
                }
                if (modifiers) {
                    if (modifiers.prop && !isDynamic) {
                        name = camelize(name);
                        if (name === 'innerHtml')
                            name = 'innerHTML';
                    }
                    if (modifiers.camel && !isDynamic) {
                        name = camelize(name);
                    }
                    if (modifiers.sync) {
                        syncGen = genAssignmentCode(value, `$event`);
                        if (!isDynamic) {
                            addHandler(el, `update:${camelize(name)}`, syncGen, null, false, warn, list[i]);
                            if (hyphenate(name) !== camelize(name)) {
                                addHandler(el, `update:${hyphenate(name)}`, syncGen, null, false, warn, list[i]);
                            }
                        }
                        else {
                            // handler w/ dynamic event name
                            addHandler(el, `"update:"+(${name})`, syncGen, null, false, warn, list[i], true // dynamic
                            );
                        }
                    }
                }
                if ((modifiers && modifiers.prop) ||
                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
                    addProp(el, name, value, list[i], isDynamic);
                }
                else {
                    addAttr(el, name, value, list[i], isDynamic);
                }
            }
            else if (onRE.test(name)) {
                // v-on
                name = name.replace(onRE, '');
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);
            }
            else {
                // normal directives
                name = name.replace(dirRE, '');
                // parse arg
                const argMatch = name.match(argRE);
                let arg = argMatch && argMatch[1];
                isDynamic = false;
                if (arg) {
                    name = name.slice(0, -(arg.length + 1));
                    if (dynamicArgRE.test(arg)) {
                        arg = arg.slice(1, -1);
                        isDynamic = true;
                    }
                }
                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
                if (name === 'model') {
                    checkForAliasModel(el, value);
                }
            }
        }
        else {
            // literal attribute
            {
                const res = parseText(value, delimiters);
                if (res) {
                    warn(`${name}="${value}": ` +
                        'Interpolation inside attributes has been removed. ' +
                        'Use v-bind or the colon shorthand instead. For example, ' +
                        'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
                }
            }
            addAttr(el, name, JSON.stringify(value), list[i]);
            // #6887 firefox doesn't update muted state if set via attribute
            // even immediately after element creation
            if (!el.component &&
                name === 'muted' &&
                platformMustUseProp(el.tag, el.attrsMap.type, name)) {
                addProp(el, name, 'true', list[i]);
            }
        }
    }
}
function checkInFor(el) {
    let parent = el;
    while (parent) {
        if (parent.for !== undefined) {
            return true;
        }
        parent = parent.parent;
    }
    return false;
}
function parseModifiers(name) {
    const match = name.match(modifierRE);
    if (match) {
        const ret = {};
        match.forEach(m => {
            ret[m.slice(1)] = true;
        });
        return ret;
    }
}
function makeAttrsMap(attrs) {
    const map = {};
    for (let i = 0, l = attrs.length; i < l; i++) {
        if (map[attrs[i].name] && !isIE && !isEdge) {
            warn('duplicate attribute: ' + attrs[i].name, attrs[i]);
        }
        map[attrs[i].name] = attrs[i].value;
    }
    return map;
}
// for script (e.g. type="x/template") or style, do not decode content
function isTextTag(el) {
    return el.tag === 'script' || el.tag === 'style';
}
function isForbiddenTag(el) {
    return (el.tag === 'style' ||
        (el.tag === 'script' &&
            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
}
const ieNSBug = /^xmlns:NS\d+/;
const ieNSPrefix = /^NS\d+:/;
/* istanbul ignore next */
function guardIESVGBug(attrs) {
    const res = [];
    for (let i = 0; i < attrs.length; i++) {
        const attr = attrs[i];
        if (!ieNSBug.test(attr.name)) {
            attr.name = attr.name.replace(ieNSPrefix, '');
            res.push(attr);
        }
    }
    return res;
}
function checkForAliasModel(el, value) {
    let _el = el;
    while (_el) {
        if (_el.for && _el.alias === value) {
            warn(`<${el.tag} v-model="${value}">: ` +
                `You are binding v-model directly to a v-for iteration alias. ` +
                `This will not be able to modify the v-for source array because ` +
                `writing to the alias is like modifying a function local variable. ` +
                `Consider using an array of objects and use v-model on an object property instead.`, el.rawAttrsMap['v-model']);
        }
        _el = _el.parent;
    }
}

/**
 * Expand input[v-model] with dynamic type bindings into v-if-else chains
 * Turn this:
 *   <input v-model="data[type]" :type="type">
 * into this:
 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
 *   <input v-else :type="type" v-model="data[type]">
 */
function preTransformNode(el, options) {
    if (el.tag === 'input') {
        const map = el.attrsMap;
        if (!map['v-model']) {
            return;
        }
        let typeBinding;
        if (map[':type'] || map['v-bind:type']) {
            typeBinding = getBindingAttr(el, 'type');
        }
        if (!map.type && !typeBinding && map['v-bind']) {
            typeBinding = `(${map['v-bind']}).type`;
        }
        if (typeBinding) {
            const ifCondition = getAndRemoveAttr(el, 'v-if', true);
            const ifConditionExtra = ifCondition ? `&&(${ifCondition})` : ``;
            const hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
            const elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
            // 1. checkbox
            const branch0 = cloneASTElement(el);
            // process for on the main node
            processFor(branch0);
            addRawAttr(branch0, 'type', 'checkbox');
            processElement(branch0, options);
            branch0.processed = true; // prevent it from double-processed
            branch0.if = `(${typeBinding})==='checkbox'` + ifConditionExtra;
            addIfCondition(branch0, {
                exp: branch0.if,
                block: branch0
            });
            // 2. add radio else-if condition
            const branch1 = cloneASTElement(el);
            getAndRemoveAttr(branch1, 'v-for', true);
            addRawAttr(branch1, 'type', 'radio');
            processElement(branch1, options);
            addIfCondition(branch0, {
                exp: `(${typeBinding})==='radio'` + ifConditionExtra,
                block: branch1
            });
            // 3. other
            const branch2 = cloneASTElement(el);
            getAndRemoveAttr(branch2, 'v-for', true);
            addRawAttr(branch2, ':type', typeBinding);
            processElement(branch2, options);
            addIfCondition(branch0, {
                exp: ifCondition,
                block: branch2
            });
            if (hasElse) {
                branch0.else = true;
            }
            else if (elseIfCondition) {
                branch0.elseif = elseIfCondition;
            }
            return branch0;
        }
    }
}
function cloneASTElement(el) {
    return createASTElement(el.tag, el.attrsList.slice(), el.parent);
}
var model = {
    preTransformNode
};

var modules = [klass, style, model];

function text(el, dir) {
    if (dir.value) {
        addProp(el, 'textContent', `_s(${dir.value})`, dir);
    }
}

function html(el, dir) {
    if (dir.value) {
        addProp(el, 'innerHTML', `_s(${dir.value})`, dir);
    }
}

var directives = {
    model: model$1,
    text,
    html
};

const baseOptions = {
    expectHTML: true,
    modules,
    directives,
    isPreTag,
    isUnaryTag,
    mustUseProp,
    canBeLeftOpenTag,
    isReservedTag,
    getTagNamespace,
    staticKeys: genStaticKeys$1(modules)
};

let isStaticKey;
let isPlatformReservedTag;
const genStaticKeysCached = cached(genStaticKeys);
/**
 * Goal of the optimizer: walk the generated template AST tree
 * and detect sub-trees that are purely static, i.e. parts of
 * the DOM that never needs to change.
 *
 * Once we detect these sub-trees, we can:
 *
 * 1. Hoist them into constants, so that we no longer need to
 *    create fresh nodes for them on each re-render;
 * 2. Completely skip them in the patching process.
 */
function optimize(root, options) {
    if (!root)
        return;
    isStaticKey = genStaticKeysCached(options.staticKeys || '');
    isPlatformReservedTag = options.isReservedTag || no;
    // first pass: mark all non-static nodes.
    markStatic(root);
    // second pass: mark static roots.
    markStaticRoots(root, false);
}
function genStaticKeys(keys) {
    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
        (keys ? ',' + keys : ''));
}
function markStatic(node) {
    node.static = isStatic(node);
    if (node.type === 1) {
        // do not make component slot content static. this avoids
        // 1. components not able to mutate slot nodes
        // 2. static slot content fails for hot-reloading
        if (!isPlatformReservedTag(node.tag) &&
            node.tag !== 'slot' &&
            node.attrsMap['inline-template'] == null) {
            return;
        }
        for (let i = 0, l = node.children.length; i < l; i++) {
            const child = node.children[i];
            markStatic(child);
            if (!child.static) {
                node.static = false;
            }
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                const block = node.ifConditions[i].block;
                markStatic(block);
                if (!block.static) {
                    node.static = false;
                }
            }
        }
    }
}
function markStaticRoots(node, isInFor) {
    if (node.type === 1) {
        if (node.static || node.once) {
            node.staticInFor = isInFor;
        }
        // For a node to qualify as a static root, it should have children that
        // are not just static text. Otherwise the cost of hoisting out will
        // outweigh the benefits and it's better off to just always render it fresh.
        if (node.static &&
            node.children.length &&
            !(node.children.length === 1 && node.children[0].type === 3)) {
            node.staticRoot = true;
            return;
        }
        else {
            node.staticRoot = false;
        }
        if (node.children) {
            for (let i = 0, l = node.children.length; i < l; i++) {
                markStaticRoots(node.children[i], isInFor || !!node.for);
            }
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                markStaticRoots(node.ifConditions[i].block, isInFor);
            }
        }
    }
}
function isStatic(node) {
    if (node.type === 2) {
        // expression
        return false;
    }
    if (node.type === 3) {
        // text
        return true;
    }
    return !!(node.pre ||
        (!node.hasBindings && // no dynamic bindings
            !node.if &&
            !node.for && // not v-if or v-for or v-else
            !isBuiltInTag(node.tag) && // not a built-in
            isPlatformReservedTag(node.tag) && // not a component
            !isDirectChildOfTemplateFor(node) &&
            Object.keys(node).every(isStaticKey)));
}
function isDirectChildOfTemplateFor(node) {
    while (node.parent) {
        node = node.parent;
        if (node.tag !== 'template') {
            return false;
        }
        if (node.for) {
            return true;
        }
    }
    return false;
}

const fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
const fnInvokeRE = /\([^)]*?\);*$/;
const simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
// KeyboardEvent.keyCode aliases
const keyCodes = {
    esc: 27,
    tab: 9,
    enter: 13,
    space: 32,
    up: 38,
    left: 37,
    right: 39,
    down: 40,
    delete: [8, 46]
};
// KeyboardEvent.key aliases
const keyNames = {
    // #7880: IE11 and Edge use `Esc` for Escape key name.
    esc: ['Esc', 'Escape'],
    tab: 'Tab',
    enter: 'Enter',
    // #9112: IE11 uses `Spacebar` for Space key name.
    space: [' ', 'Spacebar'],
    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
    up: ['Up', 'ArrowUp'],
    left: ['Left', 'ArrowLeft'],
    right: ['Right', 'ArrowRight'],
    down: ['Down', 'ArrowDown'],
    // #9112: IE11 uses `Del` for Delete key name.
    delete: ['Backspace', 'Delete', 'Del']
};
// #4868: modifiers that prevent the execution of the listener
// need to explicitly return null so that we can determine whether to remove
// the listener for .once
const genGuard = condition => `if(${condition})return null;`;
const modifierCode = {
    stop: '$event.stopPropagation();',
    prevent: '$event.preventDefault();',
    self: genGuard(`$event.target !== $event.currentTarget`),
    ctrl: genGuard(`!$event.ctrlKey`),
    shift: genGuard(`!$event.shiftKey`),
    alt: genGuard(`!$event.altKey`),
    meta: genGuard(`!$event.metaKey`),
    left: genGuard(`'button' in $event && $event.button !== 0`),
    middle: genGuard(`'button' in $event && $event.button !== 1`),
    right: genGuard(`'button' in $event && $event.button !== 2`)
};
function genHandlers(events, isNative) {
    const prefix = isNative ? 'nativeOn:' : 'on:';
    let staticHandlers = ``;
    let dynamicHandlers = ``;
    for (const name in events) {
        const handlerCode = genHandler(events[name]);
        //@ts-expect-error
        if (events[name] && events[name].dynamic) {
            dynamicHandlers += `${name},${handlerCode},`;
        }
        else {
            staticHandlers += `"${name}":${handlerCode},`;
        }
    }
    staticHandlers = `{${staticHandlers.slice(0, -1)}}`;
    if (dynamicHandlers) {
        return prefix + `_d(${staticHandlers},[${dynamicHandlers.slice(0, -1)}])`;
    }
    else {
        return prefix + staticHandlers;
    }
}
function genHandler(handler) {
    if (!handler) {
        return 'function(){}';
    }
    if (Array.isArray(handler)) {
        return `[${handler.map(handler => genHandler(handler)).join(',')}]`;
    }
    const isMethodPath = simplePathRE.test(handler.value);
    const isFunctionExpression = fnExpRE.test(handler.value);
    const isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
    if (!handler.modifiers) {
        if (isMethodPath || isFunctionExpression) {
            return handler.value;
        }
        return `function($event){${isFunctionInvocation ? `return ${handler.value}` : handler.value}}`; // inline statement
    }
    else {
        let code = '';
        let genModifierCode = '';
        const keys = [];
        for (const key in handler.modifiers) {
            if (modifierCode[key]) {
                genModifierCode += modifierCode[key];
                // left/right
                if (keyCodes[key]) {
                    keys.push(key);
                }
            }
            else if (key === 'exact') {
                const modifiers = handler.modifiers;
                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
                    .filter(keyModifier => !modifiers[keyModifier])
                    .map(keyModifier => `$event.${keyModifier}Key`)
                    .join('||'));
            }
            else {
                keys.push(key);
            }
        }
        if (keys.length) {
            code += genKeyFilter(keys);
        }
        // Make sure modifiers like prevent and stop get executed after key filtering
        if (genModifierCode) {
            code += genModifierCode;
        }
        const handlerCode = isMethodPath
            ? `return ${handler.value}.apply(null, arguments)`
            : isFunctionExpression
                ? `return (${handler.value}).apply(null, arguments)`
                : isFunctionInvocation
                    ? `return ${handler.value}`
                    : handler.value;
        return `function($event){${code}${handlerCode}}`;
    }
}
function genKeyFilter(keys) {
    return (
    // make sure the key filters only apply to KeyboardEvents
    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
    // key events that do not have keyCode property...
    `if(!$event.type.indexOf('key')&&` +
        `${keys.map(genFilterCode).join('&&')})return null;`);
}
function genFilterCode(key) {
    const keyVal = parseInt(key, 10);
    if (keyVal) {
        return `$event.keyCode!==${keyVal}`;
    }
    const keyCode = keyCodes[key];
    const keyName = keyNames[key];
    return (`_k($event.keyCode,` +
        `${JSON.stringify(key)},` +
        `${JSON.stringify(keyCode)},` +
        `$event.key,` +
        `${JSON.stringify(keyName)}` +
        `)`);
}

function on(el, dir) {
    if (dir.modifiers) {
        warn$2(`v-on without argument does not support modifiers.`);
    }
    el.wrapListeners = (code) => `_g(${code},${dir.value})`;
}

function bind(el, dir) {
    el.wrapData = (code) => {
        return `_b(${code},'${el.tag}',${dir.value},${dir.modifiers && dir.modifiers.prop ? 'true' : 'false'}${dir.modifiers && dir.modifiers.sync ? ',true' : ''})`;
    };
}

var baseDirectives = {
    on,
    bind,
    cloak: noop
};

class CodegenState {
    constructor(options) {
        this.options = options;
        this.warn = options.warn || baseWarn;
        this.transforms = pluckModuleFunction(options.modules, 'transformCode');
        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
        this.directives = extend(extend({}, baseDirectives), options.directives);
        const isReservedTag = options.isReservedTag || no;
        this.maybeComponent = (el) => !!el.component || !isReservedTag(el.tag);
        this.onceId = 0;
        this.staticRenderFns = [];
        this.pre = false;
    }
}
function generate(ast, options) {
    const state = new CodegenState(options);
    // fix #11483, Root level <script> tags should not be rendered.
    const code = ast
        ? ast.tag === 'script'
            ? 'null'
            : genElement(ast, state)
        : '_c("div")';
    return {
        render: `with(this){return ${code}}`,
        staticRenderFns: state.staticRenderFns
    };
}
function genElement(el, state) {
    if (el.parent) {
        el.pre = el.pre || el.parent.pre;
    }
    if (el.staticRoot && !el.staticProcessed) {
        return genStatic(el, state);
    }
    else if (el.once && !el.onceProcessed) {
        return genOnce(el, state);
    }
    else if (el.for && !el.forProcessed) {
        return genFor(el, state);
    }
    else if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
        return genChildren(el, state) || 'void 0';
    }
    else if (el.tag === 'slot') {
        return genSlot(el, state);
    }
    else {
        // component or element
        let code;
        if (el.component) {
            code = genComponent(el.component, el, state);
        }
        else {
            let data;
            const maybeComponent = state.maybeComponent(el);
            if (!el.plain || (el.pre && maybeComponent)) {
                data = genData(el, state);
            }
            let tag;
            // check if this is a component in <script setup>
            const bindings = state.options.bindings;
            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
                tag = checkBindingType(bindings, el.tag);
            }
            if (!tag)
                tag = `'${el.tag}'`;
            const children = el.inlineTemplate ? null : genChildren(el, state, true);
            code = `_c(${tag}${data ? `,${data}` : '' // data
            }${children ? `,${children}` : '' // children
            })`;
        }
        // module transforms
        for (let i = 0; i < state.transforms.length; i++) {
            code = state.transforms[i](el, code);
        }
        return code;
    }
}
function checkBindingType(bindings, key) {
    const camelName = camelize(key);
    const PascalName = capitalize(camelName);
    const checkType = (type) => {
        if (bindings[key] === type) {
            return key;
        }
        if (bindings[camelName] === type) {
            return camelName;
        }
        if (bindings[PascalName] === type) {
            return PascalName;
        }
    };
    const fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
        checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
    if (fromConst) {
        return fromConst;
    }
    const fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
        checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
        checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
    if (fromMaybeRef) {
        return fromMaybeRef;
    }
}
// hoist static sub-trees out
function genStatic(el, state) {
    el.staticProcessed = true;
    // Some elements (templates) need to behave differently inside of a v-pre
    // node.  All pre nodes are static roots, so we can use this as a location to
    // wrap a state change and reset it upon exiting the pre node.
    const originalPreState = state.pre;
    if (el.pre) {
        state.pre = el.pre;
    }
    state.staticRenderFns.push(`with(this){return ${genElement(el, state)}}`);
    state.pre = originalPreState;
    return `_m(${state.staticRenderFns.length - 1}${el.staticInFor ? ',true' : ''})`;
}
// v-once
function genOnce(el, state) {
    el.onceProcessed = true;
    if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.staticInFor) {
        let key = '';
        let parent = el.parent;
        while (parent) {
            if (parent.for) {
                key = parent.key;
                break;
            }
            parent = parent.parent;
        }
        if (!key) {
            state.warn(`v-once can only be used inside v-for that is keyed. `, el.rawAttrsMap['v-once']);
            return genElement(el, state);
        }
        return `_o(${genElement(el, state)},${state.onceId++},${key})`;
    }
    else {
        return genStatic(el, state);
    }
}
function genIf(el, state, altGen, altEmpty) {
    el.ifProcessed = true; // avoid recursion
    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
}
function genIfConditions(conditions, state, altGen, altEmpty) {
    if (!conditions.length) {
        return altEmpty || '_e()';
    }
    const condition = conditions.shift();
    if (condition.exp) {
        return `(${condition.exp})?${genTernaryExp(condition.block)}:${genIfConditions(conditions, state, altGen, altEmpty)}`;
    }
    else {
        return `${genTernaryExp(condition.block)}`;
    }
    // v-if with v-once should generate code like (a)?_m(0):_m(1)
    function genTernaryExp(el) {
        return altGen
            ? altGen(el, state)
            : el.once
                ? genOnce(el, state)
                : genElement(el, state);
    }
}
function genFor(el, state, altGen, altHelper) {
    const exp = el.for;
    const alias = el.alias;
    const iterator1 = el.iterator1 ? `,${el.iterator1}` : '';
    const iterator2 = el.iterator2 ? `,${el.iterator2}` : '';
    if (state.maybeComponent(el) &&
        el.tag !== 'slot' &&
        el.tag !== 'template' &&
        !el.key) {
        state.warn(`<${el.tag} v-for="${alias} in ${exp}">: component lists rendered with ` +
            `v-for should have explicit keys. ` +
            `See https://v2.vuejs.org/v2/guide/list.html#key for more info.`, el.rawAttrsMap['v-for'], true /* tip */);
    }
    el.forProcessed = true; // avoid recursion
    return (`${altHelper || '_l'}((${exp}),` +
        `function(${alias}${iterator1}${iterator2}){` +
        `return ${(altGen || genElement)(el, state)}` +
        '})');
}
function genData(el, state) {
    let data = '{';
    // directives first.
    // directives may mutate the el's other properties before they are generated.
    const dirs = genDirectives(el, state);
    if (dirs)
        data += dirs + ',';
    // key
    if (el.key) {
        data += `key:${el.key},`;
    }
    // ref
    if (el.ref) {
        data += `ref:${el.ref},`;
    }
    if (el.refInFor) {
        data += `refInFor:true,`;
    }
    // pre
    if (el.pre) {
        data += `pre:true,`;
    }
    // record original tag name for components using "is" attribute
    if (el.component) {
        data += `tag:"${el.tag}",`;
    }
    // module data generation functions
    for (let i = 0; i < state.dataGenFns.length; i++) {
        data += state.dataGenFns[i](el);
    }
    // attributes
    if (el.attrs) {
        data += `attrs:${genProps(el.attrs)},`;
    }
    // DOM props
    if (el.props) {
        data += `domProps:${genProps(el.props)},`;
    }
    // event handlers
    if (el.events) {
        data += `${genHandlers(el.events, false)},`;
    }
    if (el.nativeEvents) {
        data += `${genHandlers(el.nativeEvents, true)},`;
    }
    // slot target
    // only for non-scoped slots
    if (el.slotTarget && !el.slotScope) {
        data += `slot:${el.slotTarget},`;
    }
    // scoped slots
    if (el.scopedSlots) {
        data += `${genScopedSlots(el, el.scopedSlots, state)},`;
    }
    // component v-model
    if (el.model) {
        data += `model:{value:${el.model.value},callback:${el.model.callback},expression:${el.model.expression}},`;
    }
    // inline-template
    if (el.inlineTemplate) {
        const inlineTemplate = genInlineTemplate(el, state);
        if (inlineTemplate) {
            data += `${inlineTemplate},`;
        }
    }
    data = data.replace(/,$/, '') + '}';
    // v-bind dynamic argument wrap
    // v-bind with dynamic arguments must be applied using the same v-bind object
    // merge helper so that class/style/mustUseProp attrs are handled correctly.
    if (el.dynamicAttrs) {
        data = `_b(${data},"${el.tag}",${genProps(el.dynamicAttrs)})`;
    }
    // v-bind data wrap
    if (el.wrapData) {
        data = el.wrapData(data);
    }
    // v-on data wrap
    if (el.wrapListeners) {
        data = el.wrapListeners(data);
    }
    return data;
}
function genDirectives(el, state) {
    const dirs = el.directives;
    if (!dirs)
        return;
    let res = 'directives:[';
    let hasRuntime = false;
    let i, l, dir, needRuntime;
    for (i = 0, l = dirs.length; i < l; i++) {
        dir = dirs[i];
        needRuntime = true;
        const gen = state.directives[dir.name];
        if (gen) {
            // compile-time directive that manipulates AST.
            // returns true if it also needs a runtime counterpart.
            needRuntime = !!gen(el, dir, state.warn);
        }
        if (needRuntime) {
            hasRuntime = true;
            res += `{name:"${dir.name}",rawName:"${dir.rawName}"${dir.value
                ? `,value:(${dir.value}),expression:${JSON.stringify(dir.value)}`
                : ''}${dir.arg ? `,arg:${dir.isDynamicArg ? dir.arg : `"${dir.arg}"`}` : ''}${dir.modifiers ? `,modifiers:${JSON.stringify(dir.modifiers)}` : ''}},`;
        }
    }
    if (hasRuntime) {
        return res.slice(0, -1) + ']';
    }
}
function genInlineTemplate(el, state) {
    const ast = el.children[0];
    if ((el.children.length !== 1 || ast.type !== 1)) {
        state.warn('Inline-template components must have exactly one child element.', { start: el.start });
    }
    if (ast && ast.type === 1) {
        const inlineRenderFns = generate(ast, state.options);
        return `inlineTemplate:{render:function(){${inlineRenderFns.render}},staticRenderFns:[${inlineRenderFns.staticRenderFns
            .map(code => `function(){${code}}`)
            .join(',')}]}`;
    }
}
function genScopedSlots(el, slots, state) {
    // by default scoped slots are considered "stable", this allows child
    // components with only scoped slots to skip forced updates from parent.
    // but in some cases we have to bail-out of this optimization
    // for example if the slot contains dynamic names, has v-if or v-for on them...
    let needsForceUpdate = el.for ||
        Object.keys(slots).some(key => {
            const slot = slots[key];
            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
            );
        });
    // #9534: if a component with scoped slots is inside a conditional branch,
    // it's possible for the same component to be reused but with different
    // compiled slot content. To avoid that, we generate a unique key based on
    // the generated code of all the slot contents.
    let needsKey = !!el.if;
    // OR when it is inside another scoped slot or v-for (the reactivity may be
    // disconnected due to the intermediate scope variable)
    // #9438, #9506
    // TODO: this can be further optimized by properly analyzing in-scope bindings
    // and skip force updating ones that do not actually use scope variables.
    if (!needsForceUpdate) {
        let parent = el.parent;
        while (parent) {
            if ((parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||
                parent.for) {
                needsForceUpdate = true;
                break;
            }
            if (parent.if) {
                needsKey = true;
            }
            parent = parent.parent;
        }
    }
    const generatedSlots = Object.keys(slots)
        .map(key => genScopedSlot(slots[key], state))
        .join(',');
    return `scopedSlots:_u([${generatedSlots}]${needsForceUpdate ? `,null,true` : ``}${!needsForceUpdate && needsKey ? `,null,false,${hash(generatedSlots)}` : ``})`;
}
function hash(str) {
    let hash = 5381;
    let i = str.length;
    while (i) {
        hash = (hash * 33) ^ str.charCodeAt(--i);
    }
    return hash >>> 0;
}
function containsSlotChild(el) {
    if (el.type === 1) {
        if (el.tag === 'slot') {
            return true;
        }
        return el.children.some(containsSlotChild);
    }
    return false;
}
function genScopedSlot(el, state) {
    const isLegacySyntax = el.attrsMap['slot-scope'];
    if (el.if && !el.ifProcessed && !isLegacySyntax) {
        return genIf(el, state, genScopedSlot, `null`);
    }
    if (el.for && !el.forProcessed) {
        return genFor(el, state, genScopedSlot);
    }
    const slotScope = el.slotScope === emptySlotScopeToken ? `` : String(el.slotScope);
    const fn = `function(${slotScope}){` +
        `return ${el.tag === 'template'
            ? el.if && isLegacySyntax
                ? `(${el.if})?${genChildren(el, state) || 'undefined'}:undefined`
                : genChildren(el, state) || 'undefined'
            : genElement(el, state)}}`;
    // reverse proxy v-slot without scope on this.$slots
    const reverseProxy = slotScope ? `` : `,proxy:true`;
    return `{key:${el.slotTarget || `"default"`},fn:${fn}${reverseProxy}}`;
}
function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
    const children = el.children;
    if (children.length) {
        const el = children[0];
        // optimize single v-for
        if (children.length === 1 &&
            el.for &&
            el.tag !== 'template' &&
            el.tag !== 'slot') {
            const normalizationType = checkSkip
                ? state.maybeComponent(el)
                    ? `,1`
                    : `,0`
                : ``;
            return `${(altGenElement || genElement)(el, state)}${normalizationType}`;
        }
        const normalizationType = checkSkip
            ? getNormalizationType(children, state.maybeComponent)
            : 0;
        const gen = altGenNode || genNode;
        return `[${children.map(c => gen(c, state)).join(',')}]${normalizationType ? `,${normalizationType}` : ''}`;
    }
}
// determine the normalization needed for the children array.
// 0: no normalization needed
// 1: simple normalization needed (possible 1-level deep nested array)
// 2: full normalization needed
function getNormalizationType(children, maybeComponent) {
    let res = 0;
    for (let i = 0; i < children.length; i++) {
        const el = children[i];
        if (el.type !== 1) {
            continue;
        }
        if (needsNormalization(el) ||
            (el.ifConditions &&
                el.ifConditions.some(c => needsNormalization(c.block)))) {
            res = 2;
            break;
        }
        if (maybeComponent(el) ||
            (el.ifConditions && el.ifConditions.some(c => maybeComponent(c.block)))) {
            res = 1;
        }
    }
    return res;
}
function needsNormalization(el) {
    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
}
function genNode(node, state) {
    if (node.type === 1) {
        return genElement(node, state);
    }
    else if (node.type === 3 && node.isComment) {
        return genComment(node);
    }
    else {
        return genText(node);
    }
}
function genText(text) {
    return `_v(${text.type === 2
        ? text.expression // no need for () because already wrapped in _s()
        : transformSpecialNewlines(JSON.stringify(text.text))})`;
}
function genComment(comment) {
    return `_e(${JSON.stringify(comment.text)})`;
}
function genSlot(el, state) {
    const slotName = el.slotName || '"default"';
    const children = genChildren(el, state);
    let res = `_t(${slotName}${children ? `,function(){return ${children}}` : ''}`;
    const attrs = el.attrs || el.dynamicAttrs
        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(attr => ({
            // slot props are camelized
            name: camelize(attr.name),
            value: attr.value,
            dynamic: attr.dynamic
        })))
        : null;
    const bind = el.attrsMap['v-bind'];
    if ((attrs || bind) && !children) {
        res += `,null`;
    }
    if (attrs) {
        res += `,${attrs}`;
    }
    if (bind) {
        res += `${attrs ? '' : ',null'},${bind}`;
    }
    return res + ')';
}
// componentName is el.component, take it as argument to shun flow's pessimistic refinement
function genComponent(componentName, el, state) {
    const children = el.inlineTemplate ? null : genChildren(el, state, true);
    return `_c(${componentName},${genData(el, state)}${children ? `,${children}` : ''})`;
}
function genProps(props) {
    let staticProps = ``;
    let dynamicProps = ``;
    for (let i = 0; i < props.length; i++) {
        const prop = props[i];
        const value = transformSpecialNewlines(prop.value);
        if (prop.dynamic) {
            dynamicProps += `${prop.name},${value},`;
        }
        else {
            staticProps += `"${prop.name}":${value},`;
        }
    }
    staticProps = `{${staticProps.slice(0, -1)}}`;
    if (dynamicProps) {
        return `_d(${staticProps},[${dynamicProps.slice(0, -1)}])`;
    }
    else {
        return staticProps;
    }
}
// #3895, #4268
function transformSpecialNewlines(text) {
    return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
}

// these keywords should not appear inside expressions, but operators like
// typeof, instanceof and in are allowed
const prohibitedKeywordRE = new RegExp('\\b' +
    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
        'super,throw,while,yield,delete,export,import,return,switch,default,' +
        'extends,finally,continue,debugger,function,arguments')
        .split(',')
        .join('\\b|\\b') +
    '\\b');
// these unary operators should not be used as property/method names
const unaryOperatorsRE = new RegExp('\\b' +
    'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
    '\\s*\\([^\\)]*\\)');
// strip strings in expressions
const stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
// detect problematic expressions in a template
function detectErrors(ast, warn) {
    if (ast) {
        checkNode(ast, warn);
    }
}
function checkNode(node, warn) {
    if (node.type === 1) {
        for (const name in node.attrsMap) {
            if (dirRE.test(name)) {
                const value = node.attrsMap[name];
                if (value) {
                    const range = node.rawAttrsMap[name];
                    if (name === 'v-for') {
                        checkFor(node, `v-for="${value}"`, warn, range);
                    }
                    else if (name === 'v-slot' || name[0] === '#') {
                        checkFunctionParameterExpression(value, `${name}="${value}"`, warn, range);
                    }
                    else if (onRE.test(name)) {
                        checkEvent(value, `${name}="${value}"`, warn, range);
                    }
                    else {
                        checkExpression(value, `${name}="${value}"`, warn, range);
                    }
                }
            }
        }
        if (node.children) {
            for (let i = 0; i < node.children.length; i++) {
                checkNode(node.children[i], warn);
            }
        }
    }
    else if (node.type === 2) {
        checkExpression(node.expression, node.text, warn, node);
    }
}
function checkEvent(exp, text, warn, range) {
    const stripped = exp.replace(stripStringRE, '');
    const keywordMatch = stripped.match(unaryOperatorsRE);
    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
        warn(`avoid using JavaScript unary operator as property name: ` +
            `"${keywordMatch[0]}" in expression ${text.trim()}`, range);
    }
    checkExpression(exp, text, warn, range);
}
function checkFor(node, text, warn, range) {
    checkExpression(node.for || '', text, warn, range);
    checkIdentifier(node.alias, 'v-for alias', text, warn, range);
    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
}
function checkIdentifier(ident, type, text, warn, range) {
    if (typeof ident === 'string') {
        try {
            new Function(`var ${ident}=_`);
        }
        catch (e) {
            warn(`invalid ${type} "${ident}" in expression: ${text.trim()}`, range);
        }
    }
}
function checkExpression(exp, text, warn, range) {
    try {
        new Function(`return ${exp}`);
    }
    catch (e) {
        const keywordMatch = exp
            .replace(stripStringRE, '')
            .match(prohibitedKeywordRE);
        if (keywordMatch) {
            warn(`avoid using JavaScript keyword as property name: ` +
                `"${keywordMatch[0]}"\n  Raw expression: ${text.trim()}`, range);
        }
        else {
            warn(`invalid expression: ${e.message} in\n\n` +
                `    ${exp}\n\n` +
                `  Raw expression: ${text.trim()}\n`, range);
        }
    }
}
function checkFunctionParameterExpression(exp, text, warn, range) {
    try {
        new Function(exp, '');
    }
    catch (e) {
        warn(`invalid function parameter expression: ${e.message} in\n\n` +
            `    ${exp}\n\n` +
            `  Raw expression: ${text.trim()}\n`, range);
    }
}

const range = 2;
function generateCodeFrame(source, start = 0, end = source.length) {
    const lines = source.split(/\r?\n/);
    let count = 0;
    const res = [];
    for (let i = 0; i < lines.length; i++) {
        count += lines[i].length + 1;
        if (count >= start) {
            for (let j = i - range; j <= i + range || end > count; j++) {
                if (j < 0 || j >= lines.length)
                    continue;
                res.push(`${j + 1}${repeat(` `, 3 - String(j + 1).length)}|  ${lines[j]}`);
                const lineLength = lines[j].length;
                if (j === i) {
                    // push underline
                    const pad = start - (count - lineLength) + 1;
                    const length = end > count ? lineLength - pad : end - start;
                    res.push(`   |  ` + repeat(` `, pad) + repeat(`^`, length));
                }
                else if (j > i) {
                    if (end > count) {
                        const length = Math.min(end - count, lineLength);
                        res.push(`   |  ` + repeat(`^`, length));
                    }
                    count += lineLength + 1;
                }
            }
            break;
        }
    }
    return res.join('\n');
}
function repeat(str, n) {
    let result = '';
    if (n > 0) {
        // eslint-disable-next-line no-constant-condition
        while (true) {
            // eslint-disable-line
            if (n & 1)
                result += str;
            n >>>= 1;
            if (n <= 0)
                break;
            str += str;
        }
    }
    return result;
}

function createFunction(code, errors) {
    try {
        return new Function(code);
    }
    catch (err) {
        errors.push({ err, code });
        return noop;
    }
}
function createCompileToFunctionFn(compile) {
    const cache = Object.create(null);
    return function compileToFunctions(template, options, vm) {
        options = extend({}, options);
        const warn = options.warn || warn$2;
        delete options.warn;
        /* istanbul ignore if */
        {
            // detect possible CSP restriction
            try {
                new Function('return 1');
            }
            catch (e) {
                if (e.toString().match(/unsafe-eval|CSP/)) {
                    warn('It seems you are using the standalone build of Vue.js in an ' +
                        'environment with Content Security Policy that prohibits unsafe-eval. ' +
                        'The template compiler cannot work in this environment. Consider ' +
                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
                        'templates into render functions.');
                }
            }
        }
        // check cache
        const key = options.delimiters
            ? String(options.delimiters) + template
            : template;
        if (cache[key]) {
            return cache[key];
        }
        // compile
        const compiled = compile(template, options);
        // check compilation errors/tips
        {
            if (compiled.errors && compiled.errors.length) {
                if (options.outputSourceRange) {
                    compiled.errors.forEach(e => {
                        warn(`Error compiling template:\n\n${e.msg}\n\n` +
                            generateCodeFrame(template, e.start, e.end), vm);
                    });
                }
                else {
                    warn(`Error compiling template:\n\n${template}\n\n` +
                        compiled.errors.map(e => `- ${e}`).join('\n') +
                        '\n', vm);
                }
            }
            if (compiled.tips && compiled.tips.length) {
                if (options.outputSourceRange) {
                    compiled.tips.forEach(e => tip(e.msg, vm));
                }
                else {
                    compiled.tips.forEach(msg => tip(msg, vm));
                }
            }
        }
        // turn code into functions
        const res = {};
        const fnGenErrors = [];
        res.render = createFunction(compiled.render, fnGenErrors);
        res.staticRenderFns = compiled.staticRenderFns.map(code => {
            return createFunction(code, fnGenErrors);
        });
        // check function generation errors.
        // this should only happen if there is a bug in the compiler itself.
        // mostly for codegen development use
        /* istanbul ignore if */
        {
            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
                warn(`Failed to generate render function:\n\n` +
                    fnGenErrors
                        .map(({ err, code }) => `${err.toString()} in\n\n${code}\n`)
                        .join('\n'), vm);
            }
        }
        return (cache[key] = res);
    };
}

function createCompilerCreator(baseCompile) {
    return function createCompiler(baseOptions) {
        function compile(template, options) {
            const finalOptions = Object.create(baseOptions);
            const errors = [];
            const tips = [];
            let warn = (msg, range, tip) => {
                (tip ? tips : errors).push(msg);
            };
            if (options) {
                if (options.outputSourceRange) {
                    // $flow-disable-line
                    const leadingSpaceLength = template.match(/^\s*/)[0].length;
                    warn = (msg, range, tip) => {
                        const data = typeof msg === 'string' ? { msg } : msg;
                        if (range) {
                            if (range.start != null) {
                                data.start = range.start + leadingSpaceLength;
                            }
                            if (range.end != null) {
                                data.end = range.end + leadingSpaceLength;
                            }
                        }
                        (tip ? tips : errors).push(data);
                    };
                }
                // merge custom modules
                if (options.modules) {
                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
                }
                // merge custom directives
                if (options.directives) {
                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
                }
                // copy other options
                for (const key in options) {
                    if (key !== 'modules' && key !== 'directives') {
                        finalOptions[key] = options[key];
                    }
                }
            }
            finalOptions.warn = warn;
            const compiled = baseCompile(template.trim(), finalOptions);
            {
                detectErrors(compiled.ast, warn);
            }
            compiled.errors = errors;
            compiled.tips = tips;
            return compiled;
        }
        return {
            compile,
            compileToFunctions: createCompileToFunctionFn(compile)
        };
    };
}

// `createCompilerCreator` allows creating compilers that use alternative
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
// Here we just export a default compiler using the default parts.
const createCompiler = createCompilerCreator(function baseCompile(template, options) {
    const ast = parse(template.trim(), options);
    if (options.optimize !== false) {
        optimize(ast, options);
    }
    const code = generate(ast, options);
    return {
        ast,
        render: code.render,
        staticRenderFns: code.staticRenderFns
    };
});

const { compile, compileToFunctions } = createCompiler(baseOptions);

// check whether current browser encodes a char inside attribute values
let div;
function getShouldDecode(href) {
    div = div || document.createElement('div');
    div.innerHTML = href ? `<a href="\n"/>` : `<div a="\n"/>`;
    return div.innerHTML.indexOf('&#10;') > 0;
}
// #3663: IE encodes newlines inside attribute values while other browsers don't
const shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
// #6828: chrome encodes content in a[href]
const shouldDecodeNewlinesForHref = inBrowser
    ? getShouldDecode(true)
    : false;

const idToTemplate = cached(id => {
    const el = query(id);
    return el && el.innerHTML;
});
const mount = Vue.prototype.$mount;
Vue.prototype.$mount = function (el, hydrating) {
    el = el && query(el);
    /* istanbul ignore if */
    if (el === document.body || el === document.documentElement) {
        warn$2(`Do not mount Vue to <html> or <body> - mount to normal elements instead.`);
        return this;
    }
    const options = this.$options;
    // resolve template/el and convert to render function
    if (!options.render) {
        let template = options.template;
        if (template) {
            if (typeof template === 'string') {
                if (template.charAt(0) === '#') {
                    template = idToTemplate(template);
                    /* istanbul ignore if */
                    if (!template) {
                        warn$2(`Template element not found or is empty: ${options.template}`, this);
                    }
                }
            }
            else if (template.nodeType) {
                template = template.innerHTML;
            }
            else {
                {
                    warn$2('invalid template option:' + template, this);
                }
                return this;
            }
        }
        else if (el) {
            // @ts-expect-error
            template = getOuterHTML(el);
        }
        if (template) {
            /* istanbul ignore if */
            if (config.performance && mark) {
                mark('compile');
            }
            const { render, staticRenderFns } = compileToFunctions(template, {
                outputSourceRange: true,
                shouldDecodeNewlines,
                shouldDecodeNewlinesForHref,
                delimiters: options.delimiters,
                comments: options.comments
            }, this);
            options.render = render;
            options.staticRenderFns = staticRenderFns;
            /* istanbul ignore if */
            if (config.performance && mark) {
                mark('compile end');
                measure(`vue ${this._name} compile`, 'compile', 'compile end');
            }
        }
    }
    return mount.call(this, el, hydrating);
};
/**
 * Get outerHTML of elements, taking care
 * of SVG elements in IE as well.
 */
function getOuterHTML(el) {
    if (el.outerHTML) {
        return el.outerHTML;
    }
    else {
        const container = document.createElement('div');
        container.appendChild(el.cloneNode(true));
        return container.innerHTML;
    }
}
Vue.compile = compileToFunctions;

// export type EffectScheduler = (...args: any[]) => any
/**
 * @internal since we are not exposing this in Vue 2, it's used only for
 * internal testing.
 */
function effect(fn, scheduler) {
    const watcher = new Watcher(currentInstance, fn, noop, {
        sync: true
    });
    if (scheduler) {
        watcher.update = () => {
            scheduler(() => watcher.run());
        };
    }
}

extend(Vue, vca);
Vue.effect = effect;

module.exports = Vue;
if (process.env.NODE_ENV === 'production') {
  module.exports = require('./vue.common.prod.js')
} else {
  module.exports = require('./vue.common.dev.js')
}
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
"use strict";const t=Object.freeze({}),e=Array.isArray;function n(t){return null==t}function o(t){return null!=t}function r(t){return!0===t}function s(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function i(t){return"function"==typeof t}function c(t){return null!==t&&"object"==typeof t}const a=Object.prototype.toString;function l(t){return"[object Object]"===a.call(t)}function u(t){const e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||l(t)&&t.toString===a?JSON.stringify(t,null,2):String(t)}function p(t){const e=parseFloat(t);return isNaN(e)?t:e}function h(t,e){const n=Object.create(null),o=t.split(",");for(let t=0;t<o.length;t++)n[o[t]]=!0;return e?t=>n[t.toLowerCase()]:t=>n[t]}const m=h("slot,component",!0),g=h("key,ref,slot,slot-scope,is");function v(t,e){const n=t.length;if(n){if(e===t[n-1])return void(t.length=n-1);const o=t.indexOf(e);if(o>-1)return t.splice(o,1)}}const y=Object.prototype.hasOwnProperty;function _(t,e){return y.call(t,e)}function $(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const b=/-(\w)/g,w=$((t=>t.replace(b,((t,e)=>e?e.toUpperCase():"")))),x=$((t=>t.charAt(0).toUpperCase()+t.slice(1))),C=/\B([A-Z])/g,k=$((t=>t.replace(C,"-$1").toLowerCase()));const S=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){const o=arguments.length;return o?o>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function O(t,e){e=e||0;let n=t.length-e;const o=new Array(n);for(;n--;)o[n]=t[n+e];return o}function T(t,e){for(const n in e)t[n]=e[n];return t}function A(t){const e={};for(let n=0;n<t.length;n++)t[n]&&T(e,t[n]);return e}function j(t,e,n){}const E=(t,e,n)=>!1,N=t=>t;function P(t,e){if(t===e)return!0;const n=c(t),o=c(e);if(!n||!o)return!n&&!o&&String(t)===String(e);try{const n=Array.isArray(t),o=Array.isArray(e);if(n&&o)return t.length===e.length&&t.every(((t,n)=>P(t,e[n])));if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(n||o)return!1;{const n=Object.keys(t),o=Object.keys(e);return n.length===o.length&&n.every((n=>P(t[n],e[n])))}}catch(t){return!1}}function D(t,e){for(let n=0;n<t.length;n++)if(P(t[n],e))return n;return-1}function M(t){let e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function I(t,e){return t===e?0===t&&1/t!=1/e:t==t||e==e}const L=["component","directive","filter"],R=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"];var F={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:E,isReservedAttr:E,isUnknownElement:E,getTagNamespace:j,parsePlatformTagName:N,mustUseProp:E,async:!0,_lifecycleHooks:R};const H=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function B(t){const e=(t+"").charCodeAt(0);return 36===e||95===e}function U(t,e,n,o){Object.defineProperty(t,e,{value:n,enumerable:!!o,writable:!0,configurable:!0})}const z=new RegExp(`[^${H.source}.$_\\d]`);const V="__proto__"in{},K="undefined"!=typeof window,J=K&&window.navigator.userAgent.toLowerCase(),q=J&&/msie|trident/.test(J),W=J&&J.indexOf("msie 9.0")>0,Z=J&&J.indexOf("edge/")>0;J&&J.indexOf("android");const G=J&&/iphone|ipad|ipod|ios/.test(J);J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J);const X=J&&J.match(/firefox\/(\d+)/),Y={}.watch;let Q,tt=!1;if(K)try{const t={};Object.defineProperty(t,"passive",{get(){tt=!0}}),window.addEventListener("test-passive",null,t)}catch(t){}const et=()=>(void 0===Q&&(Q=!K&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),Q),nt=K&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ot(t){return"function"==typeof t&&/native code/.test(t.toString())}const rt="undefined"!=typeof Symbol&&ot(Symbol)&&"undefined"!=typeof Reflect&&ot(Reflect.ownKeys);let st;st="undefined"!=typeof Set&&ot(Set)?Set:class{constructor(){this.set=Object.create(null)}has(t){return!0===this.set[t]}add(t){this.set[t]=!0}clear(){this.set=Object.create(null)}};let it=null;function ct(t=null){t||it&&it._scope.off(),it=t,t&&t._scope.on()}class at{constructor(t,e,n,o,r,s,i,c){this.tag=t,this.data=e,this.children=n,this.text=o,this.elm=r,this.ns=void 0,this.context=s,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=i,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=c,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}get child(){return this.componentInstance}}const lt=(t="")=>{const e=new at;return e.text=t,e.isComment=!0,e};function ut(t){return new at(void 0,void 0,void 0,String(t))}function ft(t){const e=new at(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}let dt=0;const pt=[];class ht{constructor(){this._pending=!1,this.id=dt++,this.subs=[]}addSub(t){this.subs.push(t)}removeSub(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,pt.push(this))}depend(t){ht.target&&ht.target.addDep(this)}notify(t){const e=this.subs.filter((t=>t));for(let t=0,n=e.length;t<n;t++){e[t].update()}}}ht.target=null;const mt=[];function gt(t){mt.push(t),ht.target=t}function vt(){mt.pop(),ht.target=mt[mt.length-1]}const yt=Array.prototype,_t=Object.create(yt);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(t){const e=yt[t];U(_t,t,(function(...n){const o=e.apply(this,n),r=this.__ob__;let s;switch(t){case"push":case"unshift":s=n;break;case"splice":s=n.slice(2)}return s&&r.observeArray(s),r.dep.notify(),o}))}));const $t=Object.getOwnPropertyNames(_t),bt={};let wt=!0;function xt(t){wt=t}const Ct={notify:j,depend:j,addSub:j,removeSub:j};class kt{constructor(t,n=!1,o=!1){if(this.value=t,this.shallow=n,this.mock=o,this.dep=o?Ct:new ht,this.vmCount=0,U(t,"__ob__",this),e(t)){if(!o)if(V)t.__proto__=_t;else for(let e=0,n=$t.length;e<n;e++){const n=$t[e];U(t,n,_t[n])}n||this.observeArray(t)}else{const e=Object.keys(t);for(let r=0;r<e.length;r++){Ot(t,e[r],bt,void 0,n,o)}}}observeArray(t){for(let e=0,n=t.length;e<n;e++)St(t[e],!1,this.mock)}}function St(t,n,o){return t&&_(t,"__ob__")&&t.__ob__ instanceof kt?t.__ob__:!wt||!o&&et()||!e(t)&&!l(t)||!Object.isExtensible(t)||t.__v_skip||It(t)||t instanceof at?void 0:new kt(t,n,o)}function Ot(t,n,o,r,s,i){const c=new ht,a=Object.getOwnPropertyDescriptor(t,n);if(a&&!1===a.configurable)return;const l=a&&a.get,u=a&&a.set;l&&!u||o!==bt&&2!==arguments.length||(o=t[n]);let f=!s&&St(o,!1,i);return Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){const n=l?l.call(t):o;return ht.target&&(c.depend(),f&&(f.dep.depend(),e(n)&&jt(n))),It(n)&&!s?n.value:n},set:function(e){const n=l?l.call(t):o;if(I(n,e)){if(u)u.call(t,e);else{if(l)return;if(!s&&It(n)&&!It(e))return void(n.value=e);o=e}f=!s&&St(e,!1,i),c.notify()}}}),c}function Tt(t,n,o){if(Mt(t))return;const r=t.__ob__;return e(t)&&u(n)?(t.length=Math.max(t.length,n),t.splice(n,1,o),r&&!r.shallow&&r.mock&&St(o,!1,!0),o):n in t&&!(n in Object.prototype)?(t[n]=o,o):t._isVue||r&&r.vmCount?o:r?(Ot(r.value,n,o,void 0,r.shallow,r.mock),r.dep.notify(),o):(t[n]=o,o)}function At(t,n){if(e(t)&&u(n))return void t.splice(n,1);const o=t.__ob__;t._isVue||o&&o.vmCount||Mt(t)||_(t,n)&&(delete t[n],o&&o.dep.notify())}function jt(t){for(let n,o=0,r=t.length;o<r;o++)n=t[o],n&&n.__ob__&&n.__ob__.dep.depend(),e(n)&&jt(n)}function Et(t){return Nt(t,!0),U(t,"__v_isShallow",!0),t}function Nt(t,e){Mt(t)||St(t,e,et())}function Pt(t){return Mt(t)?Pt(t.__v_raw):!(!t||!t.__ob__)}function Dt(t){return!(!t||!t.__v_isShallow)}function Mt(t){return!(!t||!t.__v_isReadonly)}function It(t){return!(!t||!0!==t.__v_isRef)}function Lt(t,e){if(It(t))return t;const n={};return U(n,"__v_isRef",!0),U(n,"__v_isShallow",e),U(n,"dep",Ot(n,"value",t,null,e,et())),n}function Rt(t,e,n){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>{const t=e[n];if(It(t))return t.value;{const e=t&&t.__ob__;return e&&e.dep.depend(),t}},set:t=>{const o=e[n];It(o)&&!It(t)?o.value=t:e[n]=t}})}function Ft(t,e,n){const o=t[e];if(It(o))return o;const r={get value(){const o=t[e];return void 0===o?n:o},set value(n){t[e]=n}};return U(r,"__v_isRef",!0),r}function Ht(t){return Bt(t,!1)}function Bt(t,e){if(!l(t))return t;if(Mt(t))return t;const n=e?"__v_rawToShallowReadonly":"__v_rawToReadonly",o=t[n];if(o)return o;const r=Object.create(Object.getPrototypeOf(t));U(t,n,r),U(r,"__v_isReadonly",!0),U(r,"__v_raw",t),It(t)&&U(r,"__v_isRef",!0),(e||Dt(t))&&U(r,"__v_isShallow",!0);const s=Object.keys(t);for(let n=0;n<s.length;n++)Ut(r,t,s[n],e);return r}function Ut(t,e,n,o){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get(){const t=e[n];return o||!l(t)?t:Ht(t)},set(){}})}const zt=$((t=>{const e="&"===t.charAt(0),n="~"===(t=e?t.slice(1):t).charAt(0),o="!"===(t=n?t.slice(1):t).charAt(0);return{name:t=o?t.slice(1):t,once:n,capture:o,passive:e}}));function Vt(t,n){function o(){const t=o.fns;if(!e(t))return on(t,null,arguments,n,"v-on handler");{const e=t.slice();for(let t=0;t<e.length;t++)on(e[t],null,arguments,n,"v-on handler")}}return o.fns=t,o}function Kt(t,e,o,s,i,c){let a,l,u,f;for(a in t)l=t[a],u=e[a],f=zt(a),n(l)||(n(u)?(n(l.fns)&&(l=t[a]=Vt(l,c)),r(f.once)&&(l=t[a]=i(f.name,l,f.capture)),o(f.name,l,f.capture,f.passive,f.params)):l!==u&&(u.fns=l,t[a]=u));for(a in e)n(t[a])&&(f=zt(a),s(f.name,e[a],f.capture))}function Jt(t,e,s){let i;t instanceof at&&(t=t.data.hook||(t.data.hook={}));const c=t[e];function a(){s.apply(this,arguments),v(i.fns,a)}n(c)?i=Vt([a]):o(c.fns)&&r(c.merged)?(i=c,i.fns.push(a)):i=Vt([c,a]),i.merged=!0,t[e]=i}function qt(t,e,n,r,s){if(o(e)){if(_(e,n))return t[n]=e[n],s||delete e[n],!0;if(_(e,r))return t[n]=e[r],s||delete e[r],!0}return!1}function Wt(t){return s(t)?[ut(t)]:e(t)?Gt(t):void 0}function Zt(t){return o(t)&&o(t.text)&&!1===t.isComment}function Gt(t,i){const c=[];let a,l,u,f;for(a=0;a<t.length;a++)l=t[a],n(l)||"boolean"==typeof l||(u=c.length-1,f=c[u],e(l)?l.length>0&&(l=Gt(l,`${i||""}_${a}`),Zt(l[0])&&Zt(f)&&(c[u]=ut(f.text+l[0].text),l.shift()),c.push.apply(c,l)):s(l)?Zt(f)?c[u]=ut(f.text+l):""!==l&&c.push(ut(l)):Zt(l)&&Zt(f)?c[u]=ut(f.text+l.text):(r(t._isVList)&&o(l.tag)&&n(l.key)&&o(i)&&(l.key=`__vlist${i}_${a}__`),c.push(l)));return c}function Xt(t,n,a,l,u,f){return(e(a)||s(a))&&(u=l,l=a,a=void 0),r(f)&&(u=2),function(t,n,r,s,a){if(o(r)&&o(r.__ob__))return lt();o(r)&&o(r.is)&&(n=r.is);if(!n)return lt();e(s)&&i(s[0])&&((r=r||{}).scopedSlots={default:s[0]},s.length=0);2===a?s=Wt(s):1===a&&(s=function(t){for(let n=0;n<t.length;n++)if(e(t[n]))return Array.prototype.concat.apply([],t);return t}(s));let l,u;if("string"==typeof n){let e;u=t.$vnode&&t.$vnode.ns||F.getTagNamespace(n),l=F.isReservedTag(n)?new at(F.parsePlatformTagName(n),r,s,void 0,void 0,t):r&&r.pre||!o(e=so(t.$options,"components",n))?new at(n,r,s,void 0,void 0,t):Zn(e,r,t,s,n)}else l=Zn(n,r,t,s);return e(l)?l:o(l)?(o(u)&&Yt(l,u),o(r)&&function(t){c(t.style)&&Tn(t.style);c(t.class)&&Tn(t.class)}(r),l):lt()}(t,n,a,l,u)}function Yt(t,e,s){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,s=!0),o(t.children))for(let i=0,c=t.children.length;i<c;i++){const c=t.children[i];o(c.tag)&&(n(c.ns)||r(s)&&"svg"!==c.tag)&&Yt(c,e,s)}}function Qt(t,n){let r,s,i,a,l=null;if(e(t)||"string"==typeof t)for(l=new Array(t.length),r=0,s=t.length;r<s;r++)l[r]=n(t[r],r);else if("number"==typeof t)for(l=new Array(t),r=0;r<t;r++)l[r]=n(r+1,r);else if(c(t))if(rt&&t[Symbol.iterator]){l=[];const e=t[Symbol.iterator]();let o=e.next();for(;!o.done;)l.push(n(o.value,l.length)),o=e.next()}else for(i=Object.keys(t),l=new Array(i.length),r=0,s=i.length;r<s;r++)a=i[r],l[r]=n(t[a],a,r);return o(l)||(l=[]),l._isVList=!0,l}function te(t,e,n,o){const r=this.$scopedSlots[t];let s;r?(n=n||{},o&&(n=T(T({},o),n)),s=r(n)||(i(e)?e():e)):s=this.$slots[t]||(i(e)?e():e);const c=n&&n.slot;return c?this.$createElement("template",{slot:c},s):s}function ee(t){return so(this.$options,"filters",t)||N}function ne(t,n){return e(t)?-1===t.indexOf(n):t!==n}function oe(t,e,n,o,r){const s=F.keyCodes[e]||n;return r&&o&&!F.keyCodes[e]?ne(r,o):s?ne(s,t):o?k(o)!==e:void 0===t}function re(t,n,o,r,s){if(o)if(c(o)){let i;e(o)&&(o=A(o));for(const e in o){if("class"===e||"style"===e||g(e))i=t;else{const o=t.attrs&&t.attrs.type;i=r||F.mustUseProp(n,o,e)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}const c=w(e),a=k(e);if(!(c in i)&&!(a in i)&&(i[e]=o[e],s)){(t.on||(t.on={}))[`update:${e}`]=function(t){o[e]=t}}}}else;return t}function se(t,e){const n=this._staticTrees||(this._staticTrees=[]);let o=n[t];return o&&!e||(o=n[t]=this.$options.staticRenderFns[t].call(this._renderProxy,this._c,this),ce(o,`__static__${t}`,!1)),o}function ie(t,e,n){return ce(t,`__once__${e}${n?`_${n}`:""}`,!0),t}function ce(t,n,o){if(e(t))for(let e=0;e<t.length;e++)t[e]&&"string"!=typeof t[e]&&ae(t[e],`${n}_${e}`,o);else ae(t,n,o)}function ae(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function le(t,e){if(e)if(l(e)){const n=t.on=t.on?T({},t.on):{};for(const t in e){const o=n[t],r=e[t];n[t]=o?[].concat(o,r):r}}else;return t}function ue(t,n,o,r){n=n||{$stable:!o};for(let r=0;r<t.length;r++){const s=t[r];e(s)?ue(s,n,o):s&&(s.proxy&&(s.fn.proxy=!0),n[s.key]=s.fn)}return r&&(n.$key=r),n}function fe(t,e){for(let n=0;n<e.length;n+=2){const o=e[n];"string"==typeof o&&o&&(t[e[n]]=e[n+1])}return t}function de(t,e){return"string"==typeof t?e+t:t}function pe(t){t._o=ie,t._n=p,t._s=d,t._l=Qt,t._t=te,t._q=P,t._i=D,t._m=se,t._f=ee,t._k=oe,t._b=re,t._v=ut,t._e=lt,t._u=ue,t._g=le,t._d=fe,t._p=de}function he(t,e){if(!t||!t.length)return{};const n={};for(let o=0,r=t.length;o<r;o++){const r=t[o],s=r.data;if(s&&s.attrs&&s.attrs.slot&&delete s.attrs.slot,r.context!==e&&r.fnContext!==e||!s||null==s.slot)(n.default||(n.default=[])).push(r);else{const t=s.slot,e=n[t]||(n[t]=[]);"template"===r.tag?e.push.apply(e,r.children||[]):e.push(r)}}for(const t in n)n[t].every(me)&&delete n[t];return n}function me(t){return t.isComment&&!t.asyncFactory||" "===t.text}function ge(t){return t.isComment&&t.asyncFactory}function ve(e,n,o,r){let s;const i=Object.keys(o).length>0,c=n?!!n.$stable:!i,a=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(c&&r&&r!==t&&a===r.$key&&!i&&!r.$hasNormal)return r;s={};for(const t in n)n[t]&&"$"!==t[0]&&(s[t]=ye(e,o,t,n[t]))}else s={};for(const t in o)t in s||(s[t]=_e(o,t));return n&&Object.isExtensible(n)&&(n._normalized=s),U(s,"$stable",c),U(s,"$key",a),U(s,"$hasNormal",i),s}function ye(t,n,o,r){const s=function(){const n=it;ct(t);let o=arguments.length?r.apply(null,arguments):r({});o=o&&"object"==typeof o&&!e(o)?[o]:Wt(o);const s=o&&o[0];return ct(n),o&&(!s||1===o.length&&s.isComment&&!ge(s))?void 0:o};return r.proxy&&Object.defineProperty(n,o,{get:s,enumerable:!0,configurable:!0}),s}function _e(t,e){return()=>t[e]}function $e(e){return{get attrs(){if(!e._attrsProxy){const n=e._attrsProxy={};U(n,"_v_attr_proxy",!0),be(n,e.$attrs,t,e,"$attrs")}return e._attrsProxy},get listeners(){if(!e._listenersProxy){be(e._listenersProxy={},e.$listeners,t,e,"$listeners")}return e._listenersProxy},get slots(){return function(t){t._slotsProxy||xe(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(e)},emit:S(e.$emit,e),expose(t){t&&Object.keys(t).forEach((n=>Rt(e,t,n)))}}}function be(t,e,n,o,r){let s=!1;for(const i in e)i in t?e[i]!==n[i]&&(s=!0):(s=!0,we(t,i,o,r));for(const n in t)n in e||(s=!0,delete t[n]);return s}function we(t,e,n,o){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:()=>n[o][e]})}function xe(t,e){for(const n in e)t[n]=e[n];for(const n in t)n in e||delete t[n]}function Ce(){const t=it;return t._setupContext||(t._setupContext=$e(t))}let ke,Se=null;function Oe(t,e){return(t.__esModule||rt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),c(t)?e.extend(t):t}function Te(t){if(e(t))for(let e=0;e<t.length;e++){const n=t[e];if(o(n)&&(o(n.componentOptions)||ge(n)))return n}}function Ae(t,e){ke.$on(t,e)}function je(t,e){ke.$off(t,e)}function Ee(t,e){const n=ke;return function o(){const r=e.apply(null,arguments);null!==r&&n.$off(t,o)}}function Ne(t,e,n){ke=t,Kt(e,n||{},Ae,je,Ee,t),ke=void 0}let Pe=null;function De(t){const e=Pe;return Pe=t,()=>{Pe=e}}function Me(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function Ie(t,e){if(e){if(t._directInactive=!1,Me(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(let e=0;e<t.$children.length;e++)Ie(t.$children[e]);Re(t,"activated")}}function Le(t,e){if(!(e&&(t._directInactive=!0,Me(t))||t._inactive)){t._inactive=!0;for(let e=0;e<t.$children.length;e++)Le(t.$children[e]);Re(t,"deactivated")}}function Re(t,e,n,o=!0){gt();const r=it;o&&ct(t);const s=t.$options[e],i=`${e} hook`;if(s)for(let e=0,o=s.length;e<o;e++)on(s[e],t,n||null,t,i);t._hasHookEvent&&t.$emit("hook:"+e),o&&ct(r),vt()}const Fe=[],He=[];let Be={},Ue=!1,ze=!1,Ve=0;let Ke=0,Je=Date.now;if(K&&!q){const t=window.performance;t&&"function"==typeof t.now&&Je()>document.createEvent("Event").timeStamp&&(Je=()=>t.now())}const qe=(t,e)=>{if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function We(){let t,e;for(Ke=Je(),ze=!0,Fe.sort(qe),Ve=0;Ve<Fe.length;Ve++)t=Fe[Ve],t.before&&t.before(),e=t.id,Be[e]=null,t.run();const n=He.slice(),o=Fe.slice();Ve=Fe.length=He.length=0,Be={},Ue=ze=!1,function(t){for(let e=0;e<t.length;e++)t[e]._inactive=!0,Ie(t[e],!0)}(n),function(t){let e=t.length;for(;e--;){const n=t[e],o=n.vm;o&&o._watcher===n&&o._isMounted&&!o._isDestroyed&&Re(o,"updated")}}(o),(()=>{for(let t=0;t<pt.length;t++){const e=pt[t];e.subs=e.subs.filter((t=>t)),e._pending=!1}pt.length=0})(),nt&&F.devtools&&nt.emit("flush")}function Ze(t){const e=t.id;if(null==Be[e]&&(t!==ht.target||!t.noRecurse)){if(Be[e]=!0,ze){let e=Fe.length-1;for(;e>Ve&&Fe[e].id>t.id;)e--;Fe.splice(e+1,0,t)}else Fe.push(t);Ue||(Ue=!0,dn(We))}}function Ge(t,e){return Ye(t,null,{flush:"post"})}const Xe={};function Ye(n,o,{immediate:r,deep:s,flush:c="pre",onTrack:a,onTrigger:l}=t){const u=it,f=(t,e,n=null)=>on(t,null,n,u,e);let d,p,h=!1,m=!1;if(It(n)?(d=()=>n.value,h=Dt(n)):Pt(n)?(d=()=>(n.__ob__.dep.depend(),n),s=!0):e(n)?(m=!0,h=n.some((t=>Pt(t)||Dt(t))),d=()=>n.map((t=>It(t)?t.value:Pt(t)?Tn(t):i(t)?f(t,"watcher getter"):void 0))):d=i(n)?o?()=>f(n,"watcher getter"):()=>{if(!u||!u._isDestroyed)return p&&p(),f(n,"watcher",[g])}:j,o&&s){const t=d;d=()=>Tn(t())}let g=t=>{p=v.onStop=()=>{f(t,"watcher cleanup")}};if(et())return g=j,o?r&&f(o,"watcher callback",[d(),m?[]:void 0,g]):d(),j;const v=new En(it,d,j,{lazy:!0});v.noRecurse=!o;let y=m?[]:Xe;return v.run=()=>{if(v.active)if(o){const t=v.get();(s||h||(m?t.some(((t,e)=>I(t,y[e]))):I(t,y)))&&(p&&p(),f(o,"watcher callback",[t,y===Xe?void 0:y,g]),y=t)}else v.get()},"sync"===c?v.update=v.run:"post"===c?(v.post=!0,v.update=()=>Ze(v)):v.update=()=>{if(u&&u===it&&!u._isMounted){const t=u._preWatchers||(u._preWatchers=[]);t.indexOf(v)<0&&t.push(v)}else Ze(v)},o?r?v.run():y=v.get():"post"===c&&u?u.$once("hook:mounted",(()=>v.get())):v.get(),()=>{v.teardown()}}let Qe;class tn{constructor(t=!1){this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Qe,!t&&Qe&&(this.index=(Qe.scopes||(Qe.scopes=[])).push(this)-1)}run(t){if(this.active){const e=Qe;try{return Qe=this,t()}finally{Qe=e}}}on(){Qe=this}off(){Qe=this.parent}stop(t){if(this.active){let e,n;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].teardown();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(!this.detached&&this.parent&&!t){const t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.parent=void 0,this.active=!1}}}function en(t){const e=t._provided,n=t.$parent&&t.$parent._provided;return n===e?t._provided=Object.create(n):e}function nn(t,e,n){gt();try{if(e){let o=e;for(;o=o.$parent;){const r=o.$options.errorCaptured;if(r)for(let s=0;s<r.length;s++)try{if(!1===r[s].call(o,t,e,n))return}catch(t){rn(t,o,"errorCaptured hook")}}}rn(t,e,n)}finally{vt()}}function on(t,e,n,o,r){let s;try{s=n?t.apply(e,n):t.call(e),s&&!s._isVue&&f(s)&&!s._handled&&(s.catch((t=>nn(t,o,r+" (Promise/async)"))),s._handled=!0)}catch(t){nn(t,o,r)}return s}function rn(t,e,n){if(F.errorHandler)try{return F.errorHandler.call(null,t,e,n)}catch(e){e!==t&&sn(e)}sn(t)}function sn(t,e,n){if(!K||"undefined"==typeof console)throw t;console.error(t)}let cn=!1;const an=[];let ln,un=!1;function fn(){un=!1;const t=an.slice(0);an.length=0;for(let e=0;e<t.length;e++)t[e]()}if("undefined"!=typeof Promise&&ot(Promise)){const t=Promise.resolve();ln=()=>{t.then(fn),G&&setTimeout(j)},cn=!0}else if(q||"undefined"==typeof MutationObserver||!ot(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())ln="undefined"!=typeof setImmediate&&ot(setImmediate)?()=>{setImmediate(fn)}:()=>{setTimeout(fn,0)};else{let t=1;const e=new MutationObserver(fn),n=document.createTextNode(String(t));e.observe(n,{characterData:!0}),ln=()=>{t=(t+1)%2,n.data=String(t)},cn=!0}function dn(t,e){let n;if(an.push((()=>{if(t)try{t.call(e)}catch(t){nn(t,e,"nextTick")}else n&&n(e)})),un||(un=!0,ln()),!t&&"undefined"!=typeof Promise)return new Promise((t=>{n=t}))}function pn(t){return(e,n=it)=>{if(n)return function(t,e,n){const o=t.$options;o[e]=eo(o[e],n)}(n,t,e)}}const hn=pn("beforeMount"),mn=pn("mounted"),gn=pn("beforeUpdate"),vn=pn("updated"),yn=pn("beforeDestroy"),_n=pn("destroyed"),$n=pn("activated"),bn=pn("deactivated"),wn=pn("serverPrefetch"),xn=pn("renderTracked"),Cn=pn("renderTriggered"),kn=pn("errorCaptured");var Sn=Object.freeze({__proto__:null,version:"2.7.14",defineComponent:function(t){return t},ref:function(t){return Lt(t,!1)},shallowRef:function(t){return Lt(t,!0)},isRef:It,toRef:Ft,toRefs:function(t){const n=e(t)?new Array(t.length):{};for(const e in t)n[e]=Ft(t,e);return n},unref:function(t){return It(t)?t.value:t},proxyRefs:function(t){if(Pt(t))return t;const e={},n=Object.keys(t);for(let o=0;o<n.length;o++)Rt(e,t,n[o]);return e},customRef:function(t){const e=new ht,{get:n,set:o}=t((()=>{e.depend()}),(()=>{e.notify()})),r={get value(){return n()},set value(t){o(t)}};return U(r,"__v_isRef",!0),r},triggerRef:function(t){t.dep&&t.dep.notify()},reactive:function(t){return Nt(t,!1),t},isReactive:Pt,isReadonly:Mt,isShallow:Dt,isProxy:function(t){return Pt(t)||Mt(t)},shallowReactive:Et,markRaw:function(t){return Object.isExtensible(t)&&U(t,"__v_skip",!0),t},toRaw:function t(e){const n=e&&e.__v_raw;return n?t(n):e},readonly:Ht,shallowReadonly:function(t){return Bt(t,!0)},computed:function(t,e){let n,o;const r=i(t);r?(n=t,o=j):(n=t.get,o=t.set);const s=et()?null:new En(it,n,j,{lazy:!0}),c={effect:s,get value(){return s?(s.dirty&&s.evaluate(),ht.target&&s.depend(),s.value):n()},set value(t){o(t)}};return U(c,"__v_isRef",!0),U(c,"__v_isReadonly",r),c},watch:function(t,e,n){return Ye(t,e,n)},watchEffect:function(t,e){return Ye(t,null,e)},watchPostEffect:Ge,watchSyncEffect:function(t,e){return Ye(t,null,{flush:"sync"})},EffectScope:tn,effectScope:function(t){return new tn(t)},onScopeDispose:function(t){Qe&&Qe.cleanups.push(t)},getCurrentScope:function(){return Qe},provide:function(t,e){it&&(en(it)[t]=e)},inject:function(t,e,n=!1){const o=it;if(o){const r=o.$parent&&o.$parent._provided;if(r&&t in r)return r[t];if(arguments.length>1)return n&&i(e)?e.call(o):e}},h:function(t,e,n){return Xt(it,t,e,n,2,!0)},getCurrentInstance:function(){return it&&{proxy:it}},useSlots:function(){return Ce().slots},useAttrs:function(){return Ce().attrs},useListeners:function(){return Ce().listeners},mergeDefaults:function(t,n){const o=e(t)?t.reduce(((t,e)=>(t[e]={},t)),{}):t;for(const t in n){const r=o[t];r?e(r)||i(r)?o[t]={type:r,default:n[t]}:r.default=n[t]:null===r&&(o[t]={default:n[t]})}return o},nextTick:dn,set:Tt,del:At,useCssModule:function(e="$style"){{if(!it)return t;const n=it[e];return n||t}},useCssVars:function(t){if(!K)return;const e=it;e&&Ge((()=>{const n=e.$el,o=t(e,e._setupProxy);if(n&&1===n.nodeType){const t=n.style;for(const e in o)t.setProperty(`--${e}`,o[e])}}))},defineAsyncComponent:function(t){i(t)&&(t={loader:t});const{loader:e,loadingComponent:n,errorComponent:o,delay:r=200,timeout:s,suspensible:c=!1,onError:a}=t;let l=null,u=0;const f=()=>{let t;return l||(t=l=e().catch((t=>{if(t=t instanceof Error?t:new Error(String(t)),a)return new Promise(((e,n)=>{a(t,(()=>e((u++,l=null,f()))),(()=>n(t)),u+1)}));throw t})).then((e=>t!==l&&l?l:(e&&(e.__esModule||"Module"===e[Symbol.toStringTag])&&(e=e.default),e))))};return()=>({component:f(),delay:r,timeout:s,error:o,loading:n})},onBeforeMount:hn,onMounted:mn,onBeforeUpdate:gn,onUpdated:vn,onBeforeUnmount:yn,onUnmounted:_n,onActivated:$n,onDeactivated:bn,onServerPrefetch:wn,onRenderTracked:xn,onRenderTriggered:Cn,onErrorCaptured:function(t,e=it){kn(t,e)}});const On=new st;function Tn(t){return An(t,On),On.clear(),t}function An(t,n){let o,r;const s=e(t);if(!(!s&&!c(t)||t.__v_skip||Object.isFrozen(t)||t instanceof at)){if(t.__ob__){const e=t.__ob__.dep.id;if(n.has(e))return;n.add(e)}if(s)for(o=t.length;o--;)An(t[o],n);else if(It(t))An(t.value,n);else for(r=Object.keys(t),o=r.length;o--;)An(t[r[o]],n)}}let jn=0;class En{constructor(t,e,n,o,r){!function(t,e=Qe){e&&e.active&&e.effects.push(t)}(this,Qe&&!Qe._vm?Qe:t?t._scope:void 0),(this.vm=t)&&r&&(t._watcher=this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++jn,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new st,this.newDepIds=new st,this.expression="",i(e)?this.getter=e:(this.getter=function(t){if(z.test(t))return;const e=t.split(".");return function(t){for(let n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}(e),this.getter||(this.getter=j)),this.value=this.lazy?void 0:this.get()}get(){let t;gt(this);const e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;nn(t,e,`getter for watcher "${this.expression}"`)}finally{this.deep&&Tn(t),vt(),this.cleanupDeps()}return t}addDep(t){const e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))}cleanupDeps(){let t=this.deps.length;for(;t--;){const e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}let e=this.depIds;this.depIds=this.newDepIds,this.newDepIds=e,this.newDepIds.clear(),e=this.deps,this.deps=this.newDeps,this.newDeps=e,this.newDeps.length=0}update(){this.lazy?this.dirty=!0:this.sync?this.run():Ze(this)}run(){if(this.active){const t=this.get();if(t!==this.value||c(t)||this.deep){const e=this.value;if(this.value=t,this.user){const n=`callback for watcher "${this.expression}"`;on(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}}evaluate(){this.value=this.get(),this.dirty=!1}depend(){let t=this.deps.length;for(;t--;)this.deps[t].depend()}teardown(){if(this.vm&&!this.vm._isBeingDestroyed&&v(this.vm._scope.effects,this),this.active){let t=this.deps.length;for(;t--;)this.deps[t].removeSub(this);this.active=!1,this.onStop&&this.onStop()}}}const Nn={enumerable:!0,configurable:!0,get:j,set:j};function Pn(t,e,n){Nn.get=function(){return this[e][n]},Nn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,Nn)}function Dn(t){const n=t.$options;if(n.props&&function(t,e){const n=t.$options.propsData||{},o=t._props=Et({}),r=t.$options._propKeys=[];t.$parent&&xt(!1);for(const s in e){r.push(s);Ot(o,s,io(s,e,n,t)),s in t||Pn(t,"_props",s)}xt(!0)}(t,n.props),function(t){const e=t.$options,n=e.setup;if(n){const o=t._setupContext=$e(t);ct(t),gt();const r=on(n,null,[t._props||Et({}),o],t,"setup");if(vt(),ct(),i(r))e.render=r;else if(c(r))if(t._setupState=r,r.__sfc){const e=t._setupProxy={};for(const t in r)"__sfc"!==t&&Rt(e,r,t)}else for(const e in r)B(e)||Rt(t,r,e)}}(t),n.methods&&function(t,e){t.$options.props;for(const n in e)t[n]="function"!=typeof e[n]?j:S(e[n],t)}(t,n.methods),n.data)!function(t){let e=t.$options.data;e=t._data=i(e)?function(t,e){gt();try{return t.call(e,e)}catch(t){return nn(t,e,"data()"),{}}finally{vt()}}(e,t):e||{},l(e)||(e={});const n=Object.keys(e),o=t.$options.props;t.$options.methods;let r=n.length;for(;r--;){const e=n[r];o&&_(o,e)||B(e)||Pn(t,"_data",e)}const s=St(e);s&&s.vmCount++}(t);else{const e=St(t._data={});e&&e.vmCount++}n.computed&&function(t,e){const n=t._computedWatchers=Object.create(null),o=et();for(const r in e){const s=e[r],c=i(s)?s:s.get;o||(n[r]=new En(t,c||j,j,Mn)),r in t||In(t,r,s)}}(t,n.computed),n.watch&&n.watch!==Y&&function(t,n){for(const o in n){const r=n[o];if(e(r))for(let e=0;e<r.length;e++)Fn(t,o,r[e]);else Fn(t,o,r)}}(t,n.watch)}const Mn={lazy:!0};function In(t,e,n){const o=!et();i(n)?(Nn.get=o?Ln(e):Rn(n),Nn.set=j):(Nn.get=n.get?o&&!1!==n.cache?Ln(e):Rn(n.get):j,Nn.set=n.set||j),Object.defineProperty(t,e,Nn)}function Ln(t){return function(){const e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),ht.target&&e.depend(),e.value}}function Rn(t){return function(){return t.call(this,this)}}function Fn(t,e,n,o){return l(n)&&(o=n,n=n.handler),"string"==typeof n&&(n=t[n]),t.$watch(e,n,o)}function Hn(t,e){if(t){const n=Object.create(null),o=rt?Reflect.ownKeys(t):Object.keys(t);for(let r=0;r<o.length;r++){const s=o[r];if("__ob__"===s)continue;const c=t[s].from;if(c in e._provided)n[s]=e._provided[c];else if("default"in t[s]){const o=t[s].default;n[s]=i(o)?o.call(e):o}}return n}}let Bn=0;function Un(t){let e=t.options;if(t.super){const n=Un(t.super);if(n!==t.superOptions){t.superOptions=n;const o=function(t){let e;const n=t.options,o=t.sealedOptions;for(const t in n)n[t]!==o[t]&&(e||(e={}),e[t]=n[t]);return e}(t);o&&T(t.extendOptions,o),e=t.options=ro(n,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function zn(n,o,s,i,c){const a=c.options;let l;_(i,"_uid")?(l=Object.create(i),l._original=i):(l=i,i=i._original);const u=r(a._compiled),f=!u;this.data=n,this.props=o,this.children=s,this.parent=i,this.listeners=n.on||t,this.injections=Hn(a.inject,i),this.slots=()=>(this.$slots||ve(i,n.scopedSlots,this.$slots=he(s,i)),this.$slots),Object.defineProperty(this,"scopedSlots",{enumerable:!0,get(){return ve(i,n.scopedSlots,this.slots())}}),u&&(this.$options=a,this.$slots=this.slots(),this.$scopedSlots=ve(i,n.scopedSlots,this.$slots)),a._scopeId?this._c=(t,n,o,r)=>{const s=Xt(l,t,n,o,r,f);return s&&!e(s)&&(s.fnScopeId=a._scopeId,s.fnContext=i),s}:this._c=(t,e,n,o)=>Xt(l,t,e,n,o,f)}function Vn(t,e,n,o,r){const s=ft(t);return s.fnContext=n,s.fnOptions=o,e.slot&&((s.data||(s.data={})).slot=e.slot),s}function Kn(t,e){for(const n in e)t[w(n)]=e[n]}function Jn(t){return t.name||t.__name||t._componentTag}pe(zn.prototype);const qn={init(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){const e=t;qn.prepatch(e,e)}else{(t.componentInstance=function(t,e){const n={_isComponent:!0,_parentVnode:t,parent:e},r=t.data.inlineTemplate;o(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns);return new t.componentOptions.Ctor(n)}(t,Pe)).$mount(e?t.elm:void 0,e)}},prepatch(e,n){const o=n.componentOptions;!function(e,n,o,r,s){const i=r.data.scopedSlots,c=e.$scopedSlots,a=!!(i&&!i.$stable||c!==t&&!c.$stable||i&&e.$scopedSlots.$key!==i.$key||!i&&e.$scopedSlots.$key);let l=!!(s||e.$options._renderChildren||a);const u=e.$vnode;e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=s;const f=r.data.attrs||t;e._attrsProxy&&be(e._attrsProxy,f,u.data&&u.data.attrs||t,e,"$attrs")&&(l=!0),e.$attrs=f,o=o||t;const d=e.$options._parentListeners;if(e._listenersProxy&&be(e._listenersProxy,o,d||t,e,"$listeners"),e.$listeners=e.$options._parentListeners=o,Ne(e,o,d),n&&e.$options.props){xt(!1);const t=e._props,o=e.$options._propKeys||[];for(let r=0;r<o.length;r++){const s=o[r],i=e.$options.props;t[s]=io(s,i,n,e)}xt(!0),e.$options.propsData=n}l&&(e.$slots=he(s,r.context),e.$forceUpdate())}(n.componentInstance=e.componentInstance,o.propsData,o.listeners,n,o.children)},insert(t){const{context:e,componentInstance:n}=t;var o;n._isMounted||(n._isMounted=!0,Re(n,"mounted")),t.data.keepAlive&&(e._isMounted?((o=n)._inactive=!1,He.push(o)):Ie(n,!0))},destroy(t){const{componentInstance:e}=t;e._isDestroyed||(t.data.keepAlive?Le(e,!0):e.$destroy())}},Wn=Object.keys(qn);function Zn(s,i,a,l,u){if(n(s))return;const d=a.$options._base;if(c(s)&&(s=d.extend(s)),"function"!=typeof s)return;let p;if(n(s.cid)&&(p=s,s=function(t,e){if(r(t.error)&&o(t.errorComp))return t.errorComp;if(o(t.resolved))return t.resolved;const s=Se;if(s&&o(t.owners)&&-1===t.owners.indexOf(s)&&t.owners.push(s),r(t.loading)&&o(t.loadingComp))return t.loadingComp;if(s&&!o(t.owners)){const r=t.owners=[s];let i=!0,a=null,l=null;s.$on("hook:destroyed",(()=>v(r,s)));const u=t=>{for(let t=0,e=r.length;t<e;t++)r[t].$forceUpdate();t&&(r.length=0,null!==a&&(clearTimeout(a),a=null),null!==l&&(clearTimeout(l),l=null))},d=M((n=>{t.resolved=Oe(n,e),i?r.length=0:u(!0)})),p=M((e=>{o(t.errorComp)&&(t.error=!0,u(!0))})),h=t(d,p);return c(h)&&(f(h)?n(t.resolved)&&h.then(d,p):f(h.component)&&(h.component.then(d,p),o(h.error)&&(t.errorComp=Oe(h.error,e)),o(h.loading)&&(t.loadingComp=Oe(h.loading,e),0===h.delay?t.loading=!0:a=setTimeout((()=>{a=null,n(t.resolved)&&n(t.error)&&(t.loading=!0,u(!1))}),h.delay||200)),o(h.timeout)&&(l=setTimeout((()=>{l=null,n(t.resolved)&&p(null)}),h.timeout)))),i=!1,t.loading?t.loadingComp:t.resolved}}(p,d),void 0===s))return function(t,e,n,o,r){const s=lt();return s.asyncFactory=t,s.asyncMeta={data:e,context:n,children:o,tag:r},s}(p,i,a,l,u);i=i||{},Un(s),o(i.model)&&function(t,n){const r=t.model&&t.model.prop||"value",s=t.model&&t.model.event||"input";(n.attrs||(n.attrs={}))[r]=n.model.value;const i=n.on||(n.on={}),c=i[s],a=n.model.callback;o(c)?(e(c)?-1===c.indexOf(a):c!==a)&&(i[s]=[a].concat(c)):i[s]=a}(s.options,i);const h=function(t,e,r){const s=e.options.props;if(n(s))return;const i={},{attrs:c,props:a}=t;if(o(c)||o(a))for(const t in s){const e=k(t);qt(i,a,t,e,!0)||qt(i,c,t,e,!1)}return i}(i,s);if(r(s.options.functional))return function(n,r,s,i,c){const a=n.options,l={},u=a.props;if(o(u))for(const e in u)l[e]=io(e,u,r||t);else o(s.attrs)&&Kn(l,s.attrs),o(s.props)&&Kn(l,s.props);const f=new zn(s,l,c,i,n),d=a.render.call(null,f._c,f);if(d instanceof at)return Vn(d,s,f.parent,a);if(e(d)){const t=Wt(d)||[],e=new Array(t.length);for(let n=0;n<t.length;n++)e[n]=Vn(t[n],s,f.parent,a);return e}}(s,h,i,a,l);const m=i.on;if(i.on=i.nativeOn,r(s.options.abstract)){const t=i.slot;i={},t&&(i.slot=t)}!function(t){const e=t.hook||(t.hook={});for(let t=0;t<Wn.length;t++){const n=Wn[t],o=e[n],r=qn[n];o===r||o&&o._merged||(e[n]=o?Gn(r,o):r)}}(i);const g=Jn(s.options)||u;return new at(`vue-component-${s.cid}${g?`-${g}`:""}`,i,void 0,void 0,void 0,a,{Ctor:s,propsData:h,listeners:m,tag:u,children:l},p)}function Gn(t,e){const n=(n,o)=>{t(n,o),e(n,o)};return n._merged=!0,n}let Xn=j;const Yn=F.optionMergeStrategies;function Qn(t,e,n=!0){if(!e)return t;let o,r,s;const i=rt?Reflect.ownKeys(e):Object.keys(e);for(let c=0;c<i.length;c++)o=i[c],"__ob__"!==o&&(r=t[o],s=e[o],n&&_(t,o)?r!==s&&l(r)&&l(s)&&Qn(r,s):Tt(t,o,s));return t}function to(t,e,n){return n?function(){const o=i(e)?e.call(n,n):e,r=i(t)?t.call(n,n):t;return o?Qn(o,r):r}:e?t?function(){return Qn(i(e)?e.call(this,this):e,i(t)?t.call(this,this):t)}:e:t}function eo(t,n){const o=n?t?t.concat(n):e(n)?n:[n]:t;return o?function(t){const e=[];for(let n=0;n<t.length;n++)-1===e.indexOf(t[n])&&e.push(t[n]);return e}(o):o}function no(t,e,n,o){const r=Object.create(t||null);return e?T(r,e):r}Yn.data=function(t,e,n){return n?to(t,e,n):e&&"function"!=typeof e?t:to(t,e)},R.forEach((t=>{Yn[t]=eo})),L.forEach((function(t){Yn[t+"s"]=no})),Yn.watch=function(t,n,o,r){if(t===Y&&(t=void 0),n===Y&&(n=void 0),!n)return Object.create(t||null);if(!t)return n;const s={};T(s,t);for(const t in n){let o=s[t];const r=n[t];o&&!e(o)&&(o=[o]),s[t]=o?o.concat(r):e(r)?r:[r]}return s},Yn.props=Yn.methods=Yn.inject=Yn.computed=function(t,e,n,o){if(!t)return e;const r=Object.create(null);return T(r,t),e&&T(r,e),r},Yn.provide=function(t,e){return t?function(){const n=Object.create(null);return Qn(n,i(t)?t.call(this):t),e&&Qn(n,i(e)?e.call(this):e,!1),n}:e};const oo=function(t,e){return void 0===e?t:e};function ro(t,n,o){if(i(n)&&(n=n.options),function(t,n){const o=t.props;if(!o)return;const r={};let s,i,c;if(e(o))for(s=o.length;s--;)i=o[s],"string"==typeof i&&(c=w(i),r[c]={type:null});else if(l(o))for(const t in o)i=o[t],c=w(t),r[c]=l(i)?i:{type:i};t.props=r}(n),function(t,n){const o=t.inject;if(!o)return;const r=t.inject={};if(e(o))for(let t=0;t<o.length;t++)r[o[t]]={from:o[t]};else if(l(o))for(const t in o){const e=o[t];r[t]=l(e)?T({from:t},e):{from:e}}}(n),function(t){const e=t.directives;if(e)for(const t in e){const n=e[t];i(n)&&(e[t]={bind:n,update:n})}}(n),!n._base&&(n.extends&&(t=ro(t,n.extends,o)),n.mixins))for(let e=0,r=n.mixins.length;e<r;e++)t=ro(t,n.mixins[e],o);const r={};let s;for(s in t)c(s);for(s in n)_(t,s)||c(s);function c(e){const s=Yn[e]||oo;r[e]=s(t[e],n[e],o,e)}return r}function so(t,e,n,o){if("string"!=typeof n)return;const r=t[e];if(_(r,n))return r[n];const s=w(n);if(_(r,s))return r[s];const i=x(s);if(_(r,i))return r[i];return r[n]||r[s]||r[i]}function io(t,e,n,o){const r=e[t],s=!_(n,t);let c=n[t];const a=uo(Boolean,r.type);if(a>-1)if(s&&!_(r,"default"))c=!1;else if(""===c||c===k(t)){const t=uo(String,r.type);(t<0||a<t)&&(c=!0)}if(void 0===c){c=function(t,e,n){if(!_(e,"default"))return;const o=e.default;if(t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n])return t._props[n];return i(o)&&"Function"!==ao(e.type)?o.call(t):o}(o,r,t);const e=wt;xt(!0),St(c),xt(e)}return c}const co=/^\s*function (\w+)/;function ao(t){const e=t&&t.toString().match(co);return e?e[1]:""}function lo(t,e){return ao(t)===ao(e)}function uo(t,n){if(!e(n))return lo(n,t)?0:-1;for(let e=0,o=n.length;e<o;e++)if(lo(n[e],t))return e;return-1}function fo(t){this._init(t)}function po(t){t.cid=0;let e=1;t.extend=function(t){t=t||{};const n=this,o=n.cid,r=t._Ctor||(t._Ctor={});if(r[o])return r[o];const s=Jn(t)||Jn(n.options),i=function(t){this._init(t)};return(i.prototype=Object.create(n.prototype)).constructor=i,i.cid=e++,i.options=ro(n.options,t),i.super=n,i.options.props&&function(t){const e=t.options.props;for(const n in e)Pn(t.prototype,"_props",n)}(i),i.options.computed&&function(t){const e=t.options.computed;for(const n in e)In(t.prototype,n,e[n])}(i),i.extend=n.extend,i.mixin=n.mixin,i.use=n.use,L.forEach((function(t){i[t]=n[t]})),s&&(i.options.components[s]=i),i.superOptions=n.options,i.extendOptions=t,i.sealedOptions=T({},i.options),r[o]=i,i}}function ho(t){return t&&(Jn(t.Ctor.options)||t.tag)}function mo(t,n){return e(t)?t.indexOf(n)>-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(o=t,"[object RegExp]"===a.call(o)&&t.test(n));var o}function go(t,e){const{cache:n,keys:o,_vnode:r}=t;for(const t in n){const s=n[t];if(s){const i=s.name;i&&!e(i)&&vo(n,t,o,r)}}}function vo(t,e,n,o){const r=t[e];!r||o&&r.tag===o.tag||r.componentInstance.$destroy(),t[e]=null,v(n,e)}!function(e){e.prototype._init=function(e){const n=this;n._uid=Bn++,n._isVue=!0,n.__v_skip=!0,n._scope=new tn(!0),n._scope._vm=!0,e&&e._isComponent?function(t,e){const n=t.$options=Object.create(t.constructor.options),o=e._parentVnode;n.parent=e.parent,n._parentVnode=o;const r=o.componentOptions;n.propsData=r.propsData,n._parentListeners=r.listeners,n._renderChildren=r.children,n._componentTag=r.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=ro(Un(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){const e=t.$options;let n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;const e=t.$options._parentListeners;e&&Ne(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;const n=e.$options,o=e.$vnode=n._parentVnode,r=o&&o.context;e.$slots=he(n._renderChildren,r),e.$scopedSlots=o?ve(e.$parent,o.data.scopedSlots,e.$slots):t,e._c=(t,n,o,r)=>Xt(e,t,n,o,r,!1),e.$createElement=(t,n,o,r)=>Xt(e,t,n,o,r,!0);const s=o&&o.data;Ot(e,"$attrs",s&&s.attrs||t,null,!0),Ot(e,"$listeners",n._parentListeners||t,null,!0)}(n),Re(n,"beforeCreate",void 0,!1),function(t){const e=Hn(t.$options.inject,t);e&&(xt(!1),Object.keys(e).forEach((n=>{Ot(t,n,e[n])})),xt(!0))}(n),Dn(n),function(t){const e=t.$options.provide;if(e){const n=i(e)?e.call(t):e;if(!c(n))return;const o=en(t),r=rt?Reflect.ownKeys(n):Object.keys(n);for(let t=0;t<r.length;t++){const e=r[t];Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(n,e))}}}(n),Re(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(fo),function(t){const e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=Tt,t.prototype.$delete=At,t.prototype.$watch=function(t,e,n){const o=this;if(l(e))return Fn(o,t,e,n);(n=n||{}).user=!0;const r=new En(o,t,e,n);if(n.immediate){const t=`callback for immediate watcher "${r.expression}"`;gt(),on(e,o,[r.value],o,t),vt()}return function(){r.teardown()}}}(fo),function(t){const n=/^hook:/;t.prototype.$on=function(t,o){const r=this;if(e(t))for(let e=0,n=t.length;e<n;e++)r.$on(t[e],o);else(r._events[t]||(r._events[t]=[])).push(o),n.test(t)&&(r._hasHookEvent=!0);return r},t.prototype.$once=function(t,e){const n=this;function o(){n.$off(t,o),e.apply(n,arguments)}return o.fn=e,n.$on(t,o),n},t.prototype.$off=function(t,n){const o=this;if(!arguments.length)return o._events=Object.create(null),o;if(e(t)){for(let e=0,r=t.length;e<r;e++)o.$off(t[e],n);return o}const r=o._events[t];if(!r)return o;if(!n)return o._events[t]=null,o;let s,i=r.length;for(;i--;)if(s=r[i],s===n||s.fn===n){r.splice(i,1);break}return o},t.prototype.$emit=function(t){const e=this;let n=e._events[t];if(n){n=n.length>1?O(n):n;const o=O(arguments,1),r=`event handler for "${t}"`;for(let t=0,s=n.length;t<s;t++)on(n[t],e,o,e,r)}return e}}(fo),function(t){t.prototype._update=function(t,e){const n=this,o=n.$el,r=n._vnode,s=De(n);n._vnode=t,n.$el=r?n.__patch__(r,t):n.__patch__(n.$el,t,e,!1),s(),o&&(o.__vue__=null),n.$el&&(n.$el.__vue__=n);let i=n;for(;i&&i.$vnode&&i.$parent&&i.$vnode===i.$parent._vnode;)i.$parent.$el=i.$el,i=i.$parent},t.prototype.$forceUpdate=function(){const t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){const t=this;if(t._isBeingDestroyed)return;Re(t,"beforeDestroy"),t._isBeingDestroyed=!0;const e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||v(e.$children,t),t._scope.stop(),t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),Re(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}(fo),function(t){pe(t.prototype),t.prototype.$nextTick=function(t){return dn(t,this)},t.prototype._render=function(){const t=this,{render:n,_parentVnode:o}=t.$options;let r;o&&t._isMounted&&(t.$scopedSlots=ve(t.$parent,o.data.scopedSlots,t.$slots,t.$scopedSlots),t._slotsProxy&&xe(t._slotsProxy,t.$scopedSlots)),t.$vnode=o;try{ct(t),Se=t,r=n.call(t._renderProxy,t.$createElement)}catch(e){nn(e,t,"render"),r=t._vnode}finally{Se=null,ct()}return e(r)&&1===r.length&&(r=r[0]),r instanceof at||(r=lt()),r.parent=o,r}}(fo);const yo=[String,RegExp,Array];var _o={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:yo,exclude:yo,max:[String,Number]},methods:{cacheVNode(){const{cache:t,keys:e,vnodeToCache:n,keyToCache:o}=this;if(n){const{tag:r,componentInstance:s,componentOptions:i}=n;t[o]={name:ho(i),tag:r,componentInstance:s},e.push(o),this.max&&e.length>parseInt(this.max)&&vo(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created(){this.cache=Object.create(null),this.keys=[]},destroyed(){for(const t in this.cache)vo(this.cache,t,this.keys)},mounted(){this.cacheVNode(),this.$watch("include",(t=>{go(this,(e=>mo(t,e)))})),this.$watch("exclude",(t=>{go(this,(e=>!mo(t,e)))}))},updated(){this.cacheVNode()},render(){const t=this.$slots.default,e=Te(t),n=e&&e.componentOptions;if(n){const t=ho(n),{include:o,exclude:r}=this;if(o&&(!t||!mo(o,t))||r&&t&&mo(r,t))return e;const{cache:s,keys:i}=this,c=null==e.key?n.Ctor.cid+(n.tag?`::${n.tag}`:""):e.key;s[c]?(e.componentInstance=s[c].componentInstance,v(i,c),i.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){const e={get:()=>F};Object.defineProperty(t,"config",e),t.util={warn:Xn,extend:T,mergeOptions:ro,defineReactive:Ot},t.set=Tt,t.delete=At,t.nextTick=dn,t.observable=t=>(St(t),t),t.options=Object.create(null),L.forEach((e=>{t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,_o),function(t){t.use=function(t){const e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;const n=O(arguments,1);return n.unshift(this),i(t.install)?t.install.apply(t,n):i(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=ro(this.options,t),this}}(t),po(t),function(t){L.forEach((e=>{t[e]=function(t,n){return n?("component"===e&&l(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&i(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(fo),Object.defineProperty(fo.prototype,"$isServer",{get:et}),Object.defineProperty(fo.prototype,"$ssrContext",{get(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(fo,"FunctionalRenderContext",{value:zn}),fo.version="2.7.14";const $o=h("style,class"),bo=h("input,textarea,option,select,progress"),wo=(t,e,n)=>"value"===n&&bo(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t,xo=h("contenteditable,draggable,spellcheck"),Co=h("events,caret,typing,plaintext-only"),ko=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),So="http://www.w3.org/1999/xlink",Oo=t=>":"===t.charAt(5)&&"xlink"===t.slice(0,5),To=t=>Oo(t)?t.slice(6,t.length):"",Ao=t=>null==t||!1===t;function jo(t){let e=t.data,n=t,r=t;for(;o(r.componentInstance);)r=r.componentInstance._vnode,r&&r.data&&(e=Eo(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=Eo(e,n.data));return function(t,e){if(o(t)||o(e))return No(t,Po(e));return""}(e.staticClass,e.class)}function Eo(t,e){return{staticClass:No(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function No(t,e){return t?e?t+" "+e:t:e||""}function Po(t){return Array.isArray(t)?function(t){let e,n="";for(let r=0,s=t.length;r<s;r++)o(e=Po(t[r]))&&""!==e&&(n&&(n+=" "),n+=e);return n}(t):c(t)?function(t){let e="";for(const n in t)t[n]&&(e&&(e+=" "),e+=n);return e}(t):"string"==typeof t?t:""}const Do={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Mo=h("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Io=h("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Lo=t=>Mo(t)||Io(t);function Ro(t){return Io(t)?"svg":"math"===t?"math":void 0}const Fo=Object.create(null);const Ho=h("text,number,password,search,email,tel,url");function Bo(t){if("string"==typeof t){const e=document.querySelector(t);return e||document.createElement("div")}return t}var Uo=Object.freeze({__proto__:null,createElement:function(t,e){const n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(t,e){return document.createElementNS(Do[t],e)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,e,n){t.insertBefore(e,n)},removeChild:function(t,e){t.removeChild(e)},appendChild:function(t,e){t.appendChild(e)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,e){t.textContent=e},setStyleScope:function(t,e){t.setAttribute(e,"")}}),zo={create(t,e){Vo(e)},update(t,e){t.data.ref!==e.data.ref&&(Vo(t,!0),Vo(e))},destroy(t){Vo(t,!0)}};function Vo(t,n){const r=t.data.ref;if(!o(r))return;const s=t.context,c=t.componentInstance||t.elm,a=n?null:c,l=n?void 0:c;if(i(r))return void on(r,s,[a],s,"template ref function");const u=t.data.refInFor,f="string"==typeof r||"number"==typeof r,d=It(r),p=s.$refs;if(f||d)if(u){const t=f?p[r]:r.value;n?e(t)&&v(t,c):e(t)?t.includes(c)||t.push(c):f?(p[r]=[c],Ko(s,r,p[r])):r.value=[c]}else if(f){if(n&&p[r]!==c)return;p[r]=l,Ko(s,r,a)}else if(d){if(n&&r.value!==c)return;r.value=a}}function Ko({_setupState:t},e,n){t&&_(t,e)&&(It(t[e])?t[e].value=n:t[e]=n)}const Jo=new at("",{},[]),qo=["create","activate","update","remove","destroy"];function Wo(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&function(t,e){if("input"!==t.tag)return!0;let n;const r=o(n=t.data)&&o(n=n.attrs)&&n.type,s=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===s||Ho(r)&&Ho(s)}(t,e)||r(t.isAsyncPlaceholder)&&n(e.asyncFactory.error))}function Zo(t,e,n){let r,s;const i={};for(r=e;r<=n;++r)s=t[r].key,o(s)&&(i[s]=r);return i}var Go={create:Xo,update:Xo,destroy:function(t){Xo(t,Jo)}};function Xo(t,e){(t.data.directives||e.data.directives)&&function(t,e){const n=t===Jo,o=e===Jo,r=Qo(t.data.directives,t.context),s=Qo(e.data.directives,e.context),i=[],c=[];let a,l,u;for(a in s)l=r[a],u=s[a],l?(u.oldValue=l.value,u.oldArg=l.arg,er(u,"update",e,t),u.def&&u.def.componentUpdated&&c.push(u)):(er(u,"bind",e,t),u.def&&u.def.inserted&&i.push(u));if(i.length){const o=()=>{for(let n=0;n<i.length;n++)er(i[n],"inserted",e,t)};n?Jt(e,"insert",o):o()}c.length&&Jt(e,"postpatch",(()=>{for(let n=0;n<c.length;n++)er(c[n],"componentUpdated",e,t)}));if(!n)for(a in r)s[a]||er(r[a],"unbind",t,t,o)}(t,e)}const Yo=Object.create(null);function Qo(t,e){const n=Object.create(null);if(!t)return n;let o,r;for(o=0;o<t.length;o++){if(r=t[o],r.modifiers||(r.modifiers=Yo),n[tr(r)]=r,e._setupState&&e._setupState.__sfc){const t=r.def||so(e,"_setupState","v-"+r.name);r.def="function"==typeof t?{bind:t,update:t}:t}r.def=r.def||so(e.$options,"directives",r.name)}return n}function tr(t){return t.rawName||`${t.name}.${Object.keys(t.modifiers||{}).join(".")}`}function er(t,e,n,o,r){const s=t.def&&t.def[e];if(s)try{s(n.elm,t,n,o,r)}catch(o){nn(o,n.context,`directive ${t.name} ${e} hook`)}}var nr=[zo,Go];function or(t,e){const s=e.componentOptions;if(o(s)&&!1===s.Ctor.options.inheritAttrs)return;if(n(t.data.attrs)&&n(e.data.attrs))return;let i,c,a;const l=e.elm,u=t.data.attrs||{};let f=e.data.attrs||{};for(i in(o(f.__ob__)||r(f._v_attr_proxy))&&(f=e.data.attrs=T({},f)),f)c=f[i],a=u[i],a!==c&&rr(l,i,c,e.data.pre);for(i in(q||Z)&&f.value!==u.value&&rr(l,"value",f.value),u)n(f[i])&&(Oo(i)?l.removeAttributeNS(So,To(i)):xo(i)||l.removeAttribute(i))}function rr(t,e,n,o){o||t.tagName.indexOf("-")>-1?sr(t,e,n):ko(e)?Ao(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):xo(e)?t.setAttribute(e,((t,e)=>Ao(e)||"false"===e?"false":"contenteditable"===t&&Co(e)?e:"true")(e,n)):Oo(e)?Ao(n)?t.removeAttributeNS(So,To(e)):t.setAttributeNS(So,e,n):sr(t,e,n)}function sr(t,e,n){if(Ao(n))t.removeAttribute(e);else{if(q&&!W&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){const e=n=>{n.stopImmediatePropagation(),t.removeEventListener("input",e)};t.addEventListener("input",e),t.__ieph=!0}t.setAttribute(e,n)}}var ir={create:or,update:or};function cr(t,e){const r=e.elm,s=e.data,i=t.data;if(n(s.staticClass)&&n(s.class)&&(n(i)||n(i.staticClass)&&n(i.class)))return;let c=jo(e);const a=r._transitionClasses;o(a)&&(c=No(c,Po(a))),c!==r._prevClass&&(r.setAttribute("class",c),r._prevClass=c)}var ar={create:cr,update:cr};const lr=/[\w).+\-_$\]]/;function ur(t){let e,n,o,r,s,i=!1,c=!1,a=!1,l=!1,u=0,f=0,d=0,p=0;for(o=0;o<t.length;o++)if(n=e,e=t.charCodeAt(o),i)39===e&&92!==n&&(i=!1);else if(c)34===e&&92!==n&&(c=!1);else if(a)96===e&&92!==n&&(a=!1);else if(l)47===e&&92!==n&&(l=!1);else if(124!==e||124===t.charCodeAt(o+1)||124===t.charCodeAt(o-1)||u||f||d){switch(e){case 34:c=!0;break;case 39:i=!0;break;case 96:a=!0;break;case 40:d++;break;case 41:d--;break;case 91:f++;break;case 93:f--;break;case 123:u++;break;case 125:u--}if(47===e){let e,n=o-1;for(;n>=0&&(e=t.charAt(n)," "===e);n--);e&&lr.test(e)||(l=!0)}}else void 0===r?(p=o+1,r=t.slice(0,o).trim()):h();function h(){(s||(s=[])).push(t.slice(p,o).trim()),p=o+1}if(void 0===r?r=t.slice(0,o).trim():0!==p&&h(),s)for(o=0;o<s.length;o++)r=fr(r,s[o]);return r}function fr(t,e){const n=e.indexOf("(");if(n<0)return`_f("${e}")(${t})`;{const o=e.slice(0,n),r=e.slice(n+1);return`_f("${o}")(${t}${")"!==r?","+r:r}`}}function dr(t,e){console.error(`[Vue compiler]: ${t}`)}function pr(t,e){return t?t.map((t=>t[e])).filter((t=>t)):[]}function hr(t,e,n,o,r){(t.props||(t.props=[])).push(xr({name:e,value:n,dynamic:r},o)),t.plain=!1}function mr(t,e,n,o,r){(r?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(t.attrs=[])).push(xr({name:e,value:n,dynamic:r},o)),t.plain=!1}function gr(t,e,n,o){t.attrsMap[e]=n,t.attrsList.push(xr({name:e,value:n},o))}function vr(t,e,n,o,r,s,i,c){(t.directives||(t.directives=[])).push(xr({name:e,rawName:n,value:o,arg:r,isDynamicArg:s,modifiers:i},c)),t.plain=!1}function yr(t,e,n){return n?`_p(${e},"${t}")`:t+e}function _r(e,n,o,r,s,i,c,a){let l;(r=r||t).right?a?n=`(${n})==='click'?'contextmenu':(${n})`:"click"===n&&(n="contextmenu",delete r.right):r.middle&&(a?n=`(${n})==='click'?'mouseup':(${n})`:"click"===n&&(n="mouseup")),r.capture&&(delete r.capture,n=yr("!",n,a)),r.once&&(delete r.once,n=yr("~",n,a)),r.passive&&(delete r.passive,n=yr("&",n,a)),r.native?(delete r.native,l=e.nativeEvents||(e.nativeEvents={})):l=e.events||(e.events={});const u=xr({value:o.trim(),dynamic:a},c);r!==t&&(u.modifiers=r);const f=l[n];Array.isArray(f)?s?f.unshift(u):f.push(u):l[n]=f?s?[u,f]:[f,u]:u,e.plain=!1}function $r(t,e,n){const o=br(t,":"+e)||br(t,"v-bind:"+e);if(null!=o)return ur(o);if(!1!==n){const n=br(t,e);if(null!=n)return JSON.stringify(n)}}function br(t,e,n){let o;if(null!=(o=t.attrsMap[e])){const n=t.attrsList;for(let t=0,o=n.length;t<o;t++)if(n[t].name===e){n.splice(t,1);break}}return n&&delete t.attrsMap[e],o}function wr(t,e){const n=t.attrsList;for(let t=0,o=n.length;t<o;t++){const o=n[t];if(e.test(o.name))return n.splice(t,1),o}}function xr(t,e){return e&&(null!=e.start&&(t.start=e.start),null!=e.end&&(t.end=e.end)),t}function Cr(t,e,n){const{number:o,trim:r}=n||{},s="$$v";let i=s;r&&(i="(typeof $$v === 'string'? $$v.trim(): $$v)"),o&&(i=`_n(${i})`);const c=kr(e,i);t.model={value:`(${e})`,expression:JSON.stringify(e),callback:`function ($$v) {${c}}`}}function kr(t,e){const n=function(t){if(t=t.trim(),Sr=t.length,t.indexOf("[")<0||t.lastIndexOf("]")<Sr-1)return Ar=t.lastIndexOf("."),Ar>-1?{exp:t.slice(0,Ar),key:'"'+t.slice(Ar+1)+'"'}:{exp:t,key:null};Or=t,Ar=jr=Er=0;for(;!Pr();)Tr=Nr(),Dr(Tr)?Ir(Tr):91===Tr&&Mr(Tr);return{exp:t.slice(0,jr),key:t.slice(jr+1,Er)}}(t);return null===n.key?`${t}=${e}`:`$set(${n.exp}, ${n.key}, ${e})`}let Sr,Or,Tr,Ar,jr,Er;function Nr(){return Or.charCodeAt(++Ar)}function Pr(){return Ar>=Sr}function Dr(t){return 34===t||39===t}function Mr(t){let e=1;for(jr=Ar;!Pr();)if(Dr(t=Nr()))Ir(t);else if(91===t&&e++,93===t&&e--,0===e){Er=Ar;break}}function Ir(t){const e=t;for(;!Pr()&&(t=Nr())!==e;);}let Lr;function Rr(t,e,n){const o=Lr;return function r(){const s=e.apply(null,arguments);null!==s&&Br(t,r,n,o)}}const Fr=cn&&!(X&&Number(X[1])<=53);function Hr(t,e,n,o){if(Fr){const t=Ke,n=e;e=n._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=t||e.timeStamp<=0||e.target.ownerDocument!==document)return n.apply(this,arguments)}}Lr.addEventListener(t,e,tt?{capture:n,passive:o}:n)}function Br(t,e,n,o){(o||Lr).removeEventListener(t,e._wrapper||e,n)}function Ur(t,e){if(n(t.data.on)&&n(e.data.on))return;const r=e.data.on||{},s=t.data.on||{};Lr=e.elm||t.elm,function(t){if(o(t.__r)){const e=q?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}o(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(r),Kt(r,s,Hr,Br,Rr,e.context),Lr=void 0}var zr={create:Ur,update:Ur,destroy:t=>Ur(t,Jo)};let Vr;function Kr(t,e){if(n(t.data.domProps)&&n(e.data.domProps))return;let s,i;const c=e.elm,a=t.data.domProps||{};let l=e.data.domProps||{};for(s in(o(l.__ob__)||r(l._v_attr_proxy))&&(l=e.data.domProps=T({},l)),a)s in l||(c[s]="");for(s in l){if(i=l[s],"textContent"===s||"innerHTML"===s){if(e.children&&(e.children.length=0),i===a[s])continue;1===c.childNodes.length&&c.removeChild(c.childNodes[0])}if("value"===s&&"PROGRESS"!==c.tagName){c._value=i;const t=n(i)?"":String(i);Jr(c,t)&&(c.value=t)}else if("innerHTML"===s&&Io(c.tagName)&&n(c.innerHTML)){Vr=Vr||document.createElement("div"),Vr.innerHTML=`<svg>${i}</svg>`;const t=Vr.firstChild;for(;c.firstChild;)c.removeChild(c.firstChild);for(;t.firstChild;)c.appendChild(t.firstChild)}else if(i!==a[s])try{c[s]=i}catch(t){}}}function Jr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){let n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){const n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return p(n)!==p(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var qr={create:Kr,update:Kr};const Wr=$((function(t){const e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){const o=t.split(n);o.length>1&&(e[o[0].trim()]=o[1].trim())}})),e}));function Zr(t){const e=Gr(t.style);return t.staticStyle?T(t.staticStyle,e):e}function Gr(t){return Array.isArray(t)?A(t):"string"==typeof t?Wr(t):t}const Xr=/^--/,Yr=/\s*!important$/,Qr=(t,e,n)=>{if(Xr.test(e))t.style.setProperty(e,n);else if(Yr.test(n))t.style.setProperty(k(e),n.replace(Yr,""),"important");else{const o=ns(e);if(Array.isArray(n))for(let e=0,r=n.length;e<r;e++)t.style[o]=n[e];else t.style[o]=n}},ts=["Webkit","Moz","ms"];let es;const ns=$((function(t){if(es=es||document.createElement("div").style,"filter"!==(t=w(t))&&t in es)return t;const e=t.charAt(0).toUpperCase()+t.slice(1);for(let t=0;t<ts.length;t++){const n=ts[t]+e;if(n in es)return n}}));function os(t,e){const r=e.data,s=t.data;if(n(r.staticStyle)&&n(r.style)&&n(s.staticStyle)&&n(s.style))return;let i,c;const a=e.elm,l=s.staticStyle,u=s.normalizedStyle||s.style||{},f=l||u,d=Gr(e.data.style)||{};e.data.normalizedStyle=o(d.__ob__)?T({},d):d;const p=function(t,e){const n={};let o;if(e){let e=t;for(;e.componentInstance;)e=e.componentInstance._vnode,e&&e.data&&(o=Zr(e.data))&&T(n,o)}(o=Zr(t.data))&&T(n,o);let r=t;for(;r=r.parent;)r.data&&(o=Zr(r.data))&&T(n,o);return n}(e,!0);for(c in f)n(p[c])&&Qr(a,c,"");for(c in p)i=p[c],i!==f[c]&&Qr(a,c,null==i?"":i)}var rs={create:os,update:os};const ss=/\s+/;function is(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(ss).forEach((e=>t.classList.add(e))):t.classList.add(e);else{const n=` ${t.getAttribute("class")||""} `;n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function cs(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(ss).forEach((e=>t.classList.remove(e))):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{let n=` ${t.getAttribute("class")||""} `;const o=" "+e+" ";for(;n.indexOf(o)>=0;)n=n.replace(o," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function as(t){if(t){if("object"==typeof t){const e={};return!1!==t.css&&T(e,ls(t.name||"v")),T(e,t),e}return"string"==typeof t?ls(t):void 0}}const ls=$((t=>({enterClass:`${t}-enter`,enterToClass:`${t}-enter-to`,enterActiveClass:`${t}-enter-active`,leaveClass:`${t}-leave`,leaveToClass:`${t}-leave-to`,leaveActiveClass:`${t}-leave-active`}))),us=K&&!W;let fs="transition",ds="transitionend",ps="animation",hs="animationend";us&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(fs="WebkitTransition",ds="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ps="WebkitAnimation",hs="webkitAnimationEnd"));const ms=K?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:t=>t();function gs(t){ms((()=>{ms(t)}))}function vs(t,e){const n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),is(t,e))}function ys(t,e){t._transitionClasses&&v(t._transitionClasses,e),cs(t,e)}function _s(t,e,n){const{type:o,timeout:r,propCount:s}=bs(t,e);if(!o)return n();const i="transition"===o?ds:hs;let c=0;const a=()=>{t.removeEventListener(i,l),n()},l=e=>{e.target===t&&++c>=s&&a()};setTimeout((()=>{c<s&&a()}),r+1),t.addEventListener(i,l)}const $s=/\b(transform|all)(,|$)/;function bs(t,e){const n=window.getComputedStyle(t),o=(n[fs+"Delay"]||"").split(", "),r=(n[fs+"Duration"]||"").split(", "),s=ws(o,r),i=(n[ps+"Delay"]||"").split(", "),c=(n[ps+"Duration"]||"").split(", "),a=ws(i,c);let l,u=0,f=0;"transition"===e?s>0&&(l="transition",u=s,f=r.length):"animation"===e?a>0&&(l="animation",u=a,f=c.length):(u=Math.max(s,a),l=u>0?s>a?"transition":"animation":null,f=l?"transition"===l?r.length:c.length:0);return{type:l,timeout:u,propCount:f,hasTransform:"transition"===l&&$s.test(n[fs+"Property"])}}function ws(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map(((e,n)=>xs(e)+xs(t[n]))))}function xs(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function Cs(t,e){const r=t.elm;o(r._leaveCb)&&(r._leaveCb.cancelled=!0,r._leaveCb());const s=as(t.data.transition);if(n(s))return;if(o(r._enterCb)||1!==r.nodeType)return;const{css:a,type:l,enterClass:u,enterToClass:f,enterActiveClass:d,appearClass:h,appearToClass:m,appearActiveClass:g,beforeEnter:v,enter:y,afterEnter:_,enterCancelled:$,beforeAppear:b,appear:w,afterAppear:x,appearCancelled:C,duration:k}=s;let S=Pe,O=Pe.$vnode;for(;O&&O.parent;)S=O.context,O=O.parent;const T=!S._isMounted||!t.isRootInsert;if(T&&!w&&""!==w)return;const A=T&&h?h:u,j=T&&g?g:d,E=T&&m?m:f,N=T&&b||v,P=T&&i(w)?w:y,D=T&&x||_,I=T&&C||$,L=p(c(k)?k.enter:k),R=!1!==a&&!W,F=Os(P),H=r._enterCb=M((()=>{R&&(ys(r,E),ys(r,j)),H.cancelled?(R&&ys(r,A),I&&I(r)):D&&D(r),r._enterCb=null}));t.data.show||Jt(t,"insert",(()=>{const e=r.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),P&&P(r,H)})),N&&N(r),R&&(vs(r,A),vs(r,j),gs((()=>{ys(r,A),H.cancelled||(vs(r,E),F||(Ss(L)?setTimeout(H,L):_s(r,l,H)))}))),t.data.show&&(e&&e(),P&&P(r,H)),R||F||H()}function ks(t,e){const r=t.elm;o(r._enterCb)&&(r._enterCb.cancelled=!0,r._enterCb());const s=as(t.data.transition);if(n(s)||1!==r.nodeType)return e();if(o(r._leaveCb))return;const{css:i,type:a,leaveClass:l,leaveToClass:u,leaveActiveClass:f,beforeLeave:d,leave:h,afterLeave:m,leaveCancelled:g,delayLeave:v,duration:y}=s,_=!1!==i&&!W,$=Os(h),b=p(c(y)?y.leave:y),w=r._leaveCb=M((()=>{r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[t.key]=null),_&&(ys(r,u),ys(r,f)),w.cancelled?(_&&ys(r,l),g&&g(r)):(e(),m&&m(r)),r._leaveCb=null}));function x(){w.cancelled||(!t.data.show&&r.parentNode&&((r.parentNode._pending||(r.parentNode._pending={}))[t.key]=t),d&&d(r),_&&(vs(r,l),vs(r,f),gs((()=>{ys(r,l),w.cancelled||(vs(r,u),$||(Ss(b)?setTimeout(w,b):_s(r,a,w)))}))),h&&h(r,w),_||$||w())}v?v(x):x()}function Ss(t){return"number"==typeof t&&!isNaN(t)}function Os(t){if(n(t))return!1;const e=t.fns;return o(e)?Os(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function Ts(t,e){!0!==e.data.show&&Cs(e)}const As=function(t){let i,c;const a={},{modules:l,nodeOps:u}=t;for(i=0;i<qo.length;++i)for(a[qo[i]]=[],c=0;c<l.length;++c)o(l[c][qo[i]])&&a[qo[i]].push(l[c][qo[i]]);function f(t){const e=u.parentNode(t);o(e)&&u.removeChild(e,t)}function d(t,e,n,s,i,c,l){if(o(t.elm)&&o(c)&&(t=c[l]=ft(t)),t.isRootInsert=!i,function(t,e,n,s){let i=t.data;if(o(i)){const c=o(t.componentInstance)&&i.keepAlive;if(o(i=i.hook)&&o(i=i.init)&&i(t,!1),o(t.componentInstance))return p(t,e),m(n,t.elm,s),r(c)&&function(t,e,n,r){let s,i=t;for(;i.componentInstance;)if(i=i.componentInstance._vnode,o(s=i.data)&&o(s=s.transition)){for(s=0;s<a.activate.length;++s)a.activate[s](Jo,i);e.push(i);break}m(n,t.elm,r)}(t,e,n,s),!0}}(t,e,n,s))return;const f=t.data,d=t.children,h=t.tag;o(h)?(t.elm=t.ns?u.createElementNS(t.ns,h):u.createElement(h,t),_(t),g(t,d,e),o(f)&&y(t,e),m(n,t.elm,s)):r(t.isComment)?(t.elm=u.createComment(t.text),m(n,t.elm,s)):(t.elm=u.createTextNode(t.text),m(n,t.elm,s))}function p(t,e){o(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,v(t)?(y(t,e),_(t)):(Vo(t),e.push(t))}function m(t,e,n){o(t)&&(o(n)?u.parentNode(n)===t&&u.insertBefore(t,e,n):u.appendChild(t,e))}function g(t,n,o){if(e(n))for(let e=0;e<n.length;++e)d(n[e],o,t.elm,null,!0,n,e);else s(t.text)&&u.appendChild(t.elm,u.createTextNode(String(t.text)))}function v(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return o(t.tag)}function y(t,e){for(let e=0;e<a.create.length;++e)a.create[e](Jo,t);i=t.data.hook,o(i)&&(o(i.create)&&i.create(Jo,t),o(i.insert)&&e.push(t))}function _(t){let e;if(o(e=t.fnScopeId))u.setStyleScope(t.elm,e);else{let n=t;for(;n;)o(e=n.context)&&o(e=e.$options._scopeId)&&u.setStyleScope(t.elm,e),n=n.parent}o(e=Pe)&&e!==t.context&&e!==t.fnContext&&o(e=e.$options._scopeId)&&u.setStyleScope(t.elm,e)}function $(t,e,n,o,r,s){for(;o<=r;++o)d(n[o],s,t,e,!1,n,o)}function b(t){let e,n;const r=t.data;if(o(r))for(o(e=r.hook)&&o(e=e.destroy)&&e(t),e=0;e<a.destroy.length;++e)a.destroy[e](t);if(o(e=t.children))for(n=0;n<t.children.length;++n)b(t.children[n])}function w(t,e,n){for(;e<=n;++e){const n=t[e];o(n)&&(o(n.tag)?(x(n),b(n)):f(n.elm))}}function x(t,e){if(o(e)||o(t.data)){let n;const r=a.remove.length+1;for(o(e)?e.listeners+=r:e=function(t,e){function n(){0==--n.listeners&&f(t)}return n.listeners=e,n}(t.elm,r),o(n=t.componentInstance)&&o(n=n._vnode)&&o(n.data)&&x(n,e),n=0;n<a.remove.length;++n)a.remove[n](t,e);o(n=t.data.hook)&&o(n=n.remove)?n(t,e):e()}else f(t.elm)}function C(t,e,n,r){for(let s=n;s<r;s++){const n=e[s];if(o(n)&&Wo(t,n))return s}}function k(t,e,s,i,c,l){if(t===e)return;o(e.elm)&&o(i)&&(e=i[c]=ft(e));const f=e.elm=t.elm;if(r(t.isAsyncPlaceholder))return void(o(e.asyncFactory.resolved)?T(t.elm,e,s):e.isAsyncPlaceholder=!0);if(r(e.isStatic)&&r(t.isStatic)&&e.key===t.key&&(r(e.isCloned)||r(e.isOnce)))return void(e.componentInstance=t.componentInstance);let p;const h=e.data;o(h)&&o(p=h.hook)&&o(p=p.prepatch)&&p(t,e);const m=t.children,g=e.children;if(o(h)&&v(e)){for(p=0;p<a.update.length;++p)a.update[p](t,e);o(p=h.hook)&&o(p=p.update)&&p(t,e)}n(e.text)?o(m)&&o(g)?m!==g&&function(t,e,r,s,i){let c,a,l,f,p=0,h=0,m=e.length-1,g=e[0],v=e[m],y=r.length-1,_=r[0],b=r[y];const x=!i;for(;p<=m&&h<=y;)n(g)?g=e[++p]:n(v)?v=e[--m]:Wo(g,_)?(k(g,_,s,r,h),g=e[++p],_=r[++h]):Wo(v,b)?(k(v,b,s,r,y),v=e[--m],b=r[--y]):Wo(g,b)?(k(g,b,s,r,y),x&&u.insertBefore(t,g.elm,u.nextSibling(v.elm)),g=e[++p],b=r[--y]):Wo(v,_)?(k(v,_,s,r,h),x&&u.insertBefore(t,v.elm,g.elm),v=e[--m],_=r[++h]):(n(c)&&(c=Zo(e,p,m)),a=o(_.key)?c[_.key]:C(_,e,p,m),n(a)?d(_,s,t,g.elm,!1,r,h):(l=e[a],Wo(l,_)?(k(l,_,s,r,h),e[a]=void 0,x&&u.insertBefore(t,l.elm,g.elm)):d(_,s,t,g.elm,!1,r,h)),_=r[++h]);p>m?(f=n(r[y+1])?null:r[y+1].elm,$(t,f,r,h,y,s)):h>y&&w(e,p,m)}(f,m,g,s,l):o(g)?(o(t.text)&&u.setTextContent(f,""),$(f,null,g,0,g.length-1,s)):o(m)?w(m,0,m.length-1):o(t.text)&&u.setTextContent(f,""):t.text!==e.text&&u.setTextContent(f,e.text),o(h)&&o(p=h.hook)&&o(p=p.postpatch)&&p(t,e)}function S(t,e,n){if(r(n)&&o(t.parent))t.parent.data.pendingInsert=e;else for(let t=0;t<e.length;++t)e[t].data.hook.insert(e[t])}const O=h("attrs,class,staticClass,staticStyle,key");function T(t,e,n,s){let i;const{tag:c,data:a,children:l}=e;if(s=s||a&&a.pre,e.elm=t,r(e.isComment)&&o(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(o(a)&&(o(i=a.hook)&&o(i=i.init)&&i(e,!0),o(i=e.componentInstance)))return p(e,n),!0;if(o(c)){if(o(l))if(t.hasChildNodes())if(o(i=a)&&o(i=i.domProps)&&o(i=i.innerHTML)){if(i!==t.innerHTML)return!1}else{let e=!0,o=t.firstChild;for(let t=0;t<l.length;t++){if(!o||!T(o,l[t],n,s)){e=!1;break}o=o.nextSibling}if(!e||o)return!1}else g(e,l,n);if(o(a)){let t=!1;for(const o in a)if(!O(o)){t=!0,y(e,n);break}!t&&a.class&&Tn(a.class)}}else t.data!==e.text&&(t.data=e.text);return!0}return function(t,e,s,i){if(n(e))return void(o(t)&&b(t));let c=!1;const l=[];if(n(t))c=!0,d(e,l);else{const n=o(t.nodeType);if(!n&&Wo(t,e))k(t,e,l,null,null,i);else{if(n){if(1===t.nodeType&&t.hasAttribute("data-server-rendered")&&(t.removeAttribute("data-server-rendered"),s=!0),r(s)&&T(t,e,l))return S(e,l,!0),t;f=t,t=new at(u.tagName(f).toLowerCase(),{},[],void 0,f)}const i=t.elm,c=u.parentNode(i);if(d(e,l,i._leaveCb?null:c,u.nextSibling(i)),o(e.parent)){let t=e.parent;const n=v(e);for(;t;){for(let e=0;e<a.destroy.length;++e)a.destroy[e](t);if(t.elm=e.elm,n){for(let e=0;e<a.create.length;++e)a.create[e](Jo,t);const e=t.data.hook.insert;if(e.merged)for(let t=1;t<e.fns.length;t++)e.fns[t]()}else Vo(t);t=t.parent}}o(c)?w([t],0,0):o(t.tag)&&b(t)}}var f;return S(e,l,c),e.elm}}({nodeOps:Uo,modules:[ir,ar,zr,qr,rs,K?{create:Ts,activate:Ts,remove(t,e){!0!==t.data.show?ks(t,e):e()}}:{}].concat(nr)});W&&document.addEventListener("selectionchange",(()=>{const t=document.activeElement;t&&t.vmodel&&Ls(t,"input")}));const js={inserted(t,e,n,o){"select"===n.tag?(o.elm&&!o.elm._vOptions?Jt(n,"postpatch",(()=>{js.componentUpdated(t,e,n)})):Es(t,e,n.context),t._vOptions=[].map.call(t.options,Ds)):("textarea"===n.tag||Ho(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",Ms),t.addEventListener("compositionend",Is),t.addEventListener("change",Is),W&&(t.vmodel=!0)))},componentUpdated(t,e,n){if("select"===n.tag){Es(t,e,n.context);const o=t._vOptions,r=t._vOptions=[].map.call(t.options,Ds);if(r.some(((t,e)=>!P(t,o[e])))){(t.multiple?e.value.some((t=>Ps(t,r))):e.value!==e.oldValue&&Ps(e.value,r))&&Ls(t,"change")}}}};function Es(t,e,n){Ns(t,e),(q||Z)&&setTimeout((()=>{Ns(t,e)}),0)}function Ns(t,e,n){const o=e.value,r=t.multiple;if(r&&!Array.isArray(o))return;let s,i;for(let e=0,n=t.options.length;e<n;e++)if(i=t.options[e],r)s=D(o,Ds(i))>-1,i.selected!==s&&(i.selected=s);else if(P(Ds(i),o))return void(t.selectedIndex!==e&&(t.selectedIndex=e));r||(t.selectedIndex=-1)}function Ps(t,e){return e.every((e=>!P(e,t)))}function Ds(t){return"_value"in t?t._value:t.value}function Ms(t){t.target.composing=!0}function Is(t){t.target.composing&&(t.target.composing=!1,Ls(t.target,"input"))}function Ls(t,e){const n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Rs(t){return!t.componentInstance||t.data&&t.data.transition?t:Rs(t.componentInstance._vnode)}var Fs={bind(t,{value:e},n){const o=(n=Rs(n)).data&&n.data.transition,r=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;e&&o?(n.data.show=!0,Cs(n,(()=>{t.style.display=r}))):t.style.display=e?r:"none"},update(t,{value:e,oldValue:n},o){if(!e==!n)return;(o=Rs(o)).data&&o.data.transition?(o.data.show=!0,e?Cs(o,(()=>{t.style.display=t.__vOriginalDisplay})):ks(o,(()=>{t.style.display="none"}))):t.style.display=e?t.__vOriginalDisplay:"none"},unbind(t,e,n,o,r){r||(t.style.display=t.__vOriginalDisplay)}},Hs={model:js,show:Fs};const Bs={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Us(t){const e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Us(Te(e.children)):t}function zs(t){const e={},n=t.$options;for(const o in n.propsData)e[o]=t[o];const o=n._parentListeners;for(const t in o)e[w(t)]=o[t];return e}function Vs(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}const Ks=t=>t.tag||ge(t),Js=t=>"show"===t.name;var qs={name:"transition",props:Bs,abstract:!0,render(t){let e=this.$slots.default;if(!e)return;if(e=e.filter(Ks),!e.length)return;const n=this.mode,o=e[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;const r=Us(o);if(!r)return o;if(this._leaving)return Vs(t,o);const i=`__transition-${this._uid}-`;r.key=null==r.key?r.isComment?i+"comment":i+r.tag:s(r.key)?0===String(r.key).indexOf(i)?r.key:i+r.key:r.key;const c=(r.data||(r.data={})).transition=zs(this),a=this._vnode,l=Us(a);if(r.data.directives&&r.data.directives.some(Js)&&(r.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(r,l)&&!ge(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){const e=l.data.transition=T({},c);if("out-in"===n)return this._leaving=!0,Jt(e,"afterLeave",(()=>{this._leaving=!1,this.$forceUpdate()})),Vs(t,o);if("in-out"===n){if(ge(r))return a;let t;const n=()=>{t()};Jt(c,"afterEnter",n),Jt(c,"enterCancelled",n),Jt(e,"delayLeave",(e=>{t=e}))}}return o}};const Ws=T({tag:String,moveClass:String},Bs);delete Ws.mode;var Zs={props:Ws,beforeMount(){const t=this._update;this._update=(e,n)=>{const o=De(this);this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept,o(),t.call(this,e,n)}},render(t){const e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),o=this.prevChildren=this.children,r=this.$slots.default||[],s=this.children=[],i=zs(this);for(let t=0;t<r.length;t++){const e=r[t];e.tag&&null!=e.key&&0!==String(e.key).indexOf("__vlist")&&(s.push(e),n[e.key]=e,(e.data||(e.data={})).transition=i)}if(o){const r=[],s=[];for(let t=0;t<o.length;t++){const e=o[t];e.data.transition=i,e.data.pos=e.elm.getBoundingClientRect(),n[e.key]?r.push(e):s.push(e)}this.kept=t(e,null,r),this.removed=s}return t(e,null,s)},updated(){const t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(Gs),t.forEach(Xs),t.forEach(Ys),this._reflow=document.body.offsetHeight,t.forEach((t=>{if(t.data.moved){const n=t.elm,o=n.style;vs(n,e),o.transform=o.WebkitTransform=o.transitionDuration="",n.addEventListener(ds,n._moveCb=function t(o){o&&o.target!==n||o&&!/transform$/.test(o.propertyName)||(n.removeEventListener(ds,t),n._moveCb=null,ys(n,e))})}})))},methods:{hasMove(t,e){if(!us)return!1;if(this._hasMove)return this._hasMove;const n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((t=>{cs(n,t)})),is(n,e),n.style.display="none",this.$el.appendChild(n);const o=bs(n);return this.$el.removeChild(n),this._hasMove=o.hasTransform}}};function Gs(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Xs(t){t.data.newPos=t.elm.getBoundingClientRect()}function Ys(t){const e=t.data.pos,n=t.data.newPos,o=e.left-n.left,r=e.top-n.top;if(o||r){t.data.moved=!0;const e=t.elm.style;e.transform=e.WebkitTransform=`translate(${o}px,${r}px)`,e.transitionDuration="0s"}}var Qs={Transition:qs,TransitionGroup:Zs};fo.config.mustUseProp=wo,fo.config.isReservedTag=Lo,fo.config.isReservedAttr=$o,fo.config.getTagNamespace=Ro,fo.config.isUnknownElement=function(t){if(!K)return!0;if(Lo(t))return!1;if(t=t.toLowerCase(),null!=Fo[t])return Fo[t];const e=document.createElement(t);return t.indexOf("-")>-1?Fo[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Fo[t]=/HTMLUnknownElement/.test(e.toString())},T(fo.options.directives,Hs),T(fo.options.components,Qs),fo.prototype.__patch__=K?As:j,fo.prototype.$mount=function(t,e){return function(t,e,n){let o;t.$el=e,t.$options.render||(t.$options.render=lt),Re(t,"beforeMount"),o=()=>{t._update(t._render(),n)},new En(t,o,j,{before(){t._isMounted&&!t._isDestroyed&&Re(t,"beforeUpdate")}},!0),n=!1;const r=t._preWatchers;if(r)for(let t=0;t<r.length;t++)r[t].run();return null==t.$vnode&&(t._isMounted=!0,Re(t,"mounted")),t}(this,t=t&&K?Bo(t):void 0,e)},K&&setTimeout((()=>{F.devtools&&nt&&nt.emit("init",fo)}),0);const ti=/\{\{((?:.|\r?\n)+?)\}\}/g,ei=/[-.*+?^${}()|[\]\/\\]/g,ni=$((t=>{const e=t[0].replace(ei,"\\$&"),n=t[1].replace(ei,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}));var oi={staticKeys:["staticClass"],transformNode:function(t,e){e.warn;const n=br(t,"class");n&&(t.staticClass=JSON.stringify(n.replace(/\s+/g," ").trim()));const o=$r(t,"class",!1);o&&(t.classBinding=o)},genData:function(t){let e="";return t.staticClass&&(e+=`staticClass:${t.staticClass},`),t.classBinding&&(e+=`class:${t.classBinding},`),e}};var ri={staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;const n=br(t,"style");n&&(t.staticStyle=JSON.stringify(Wr(n)));const o=$r(t,"style",!1);o&&(t.styleBinding=o)},genData:function(t){let e="";return t.staticStyle&&(e+=`staticStyle:${t.staticStyle},`),t.styleBinding&&(e+=`style:(${t.styleBinding}),`),e}};let si;var ii={decode:t=>(si=si||document.createElement("div"),si.innerHTML=t,si.textContent)};const ci=h("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),ai=h("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),li=h("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),ui=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,fi=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,di=`[a-zA-Z_][\\-\\.0-9_a-zA-Z${H.source}]*`,pi=`((?:${di}\\:)?${di})`,hi=new RegExp(`^<${pi}`),mi=/^\s*(\/?)>/,gi=new RegExp(`^<\\/${pi}[^>]*>`),vi=/^<!DOCTYPE [^>]+>/i,yi=/^<!\--/,_i=/^<!\[/,$i=h("script,style,textarea",!0),bi={},wi={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n","&#9;":"\t","&#39;":"'"},xi=/&(?:lt|gt|quot|amp|#39);/g,Ci=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,ki=h("pre,textarea",!0),Si=(t,e)=>t&&ki(t)&&"\n"===e[0];function Oi(t,e){const n=e?Ci:xi;return t.replace(n,(t=>wi[t]))}const Ti=/^@|^v-on:/,Ai=/^v-|^@|^:|^#/,ji=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Ei=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Ni=/^\(|\)$/g,Pi=/^\[.*\]$/,Di=/:(.*)$/,Mi=/^:|^\.|^v-bind:/,Ii=/\.[^.\]]+(?=[^\]]*$)/g,Li=/^v-slot(:|$)|^#/,Ri=/[\r\n]/,Fi=/[ \f\t\r\n]+/g,Hi=$(ii.decode);let Bi,Ui,zi,Vi,Ki,Ji,qi,Wi;function Zi(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:nc(e),rawAttrsMap:{},parent:n,children:[]}}function Gi(t,e){Bi=e.warn||dr,Ji=e.isPreTag||E,qi=e.mustUseProp||E,Wi=e.getTagNamespace||E,e.isReservedTag,zi=pr(e.modules,"transformNode"),Vi=pr(e.modules,"preTransformNode"),Ki=pr(e.modules,"postTransformNode"),Ui=e.delimiters;const n=[],o=!1!==e.preserveWhitespace,r=e.whitespace;let s,i,c=!1,a=!1;function l(t){if(u(t),c||t.processed||(t=Xi(t,e)),n.length||t===s||s.if&&(t.elseif||t.else)&&Qi(s,{exp:t.elseif,block:t}),i&&!t.forbidden)if(t.elseif||t.else)!function(t,e){const n=function(t){let e=t.length;for(;e--;){if(1===t[e].type)return t[e];t.pop()}}(e.children);n&&n.if&&Qi(n,{exp:t.elseif,block:t})}(t,i);else{if(t.slotScope){const e=t.slotTarget||'"default"';(i.scopedSlots||(i.scopedSlots={}))[e]=t}i.children.push(t),t.parent=i}t.children=t.children.filter((t=>!t.slotScope)),u(t),t.pre&&(c=!1),Ji(t.tag)&&(a=!1);for(let n=0;n<Ki.length;n++)Ki[n](t,e)}function u(t){if(!a){let e;for(;(e=t.children[t.children.length-1])&&3===e.type&&" "===e.text;)t.children.pop()}}return function(t,e){const n=[],o=e.expectHTML,r=e.isUnaryTag||E,s=e.canBeLeftOpenTag||E;let i,c,a=0;for(;t;){if(i=t,c&&$i(c)){let n=0;const o=c.toLowerCase(),r=bi[o]||(bi[o]=new RegExp("([\\s\\S]*?)(</"+o+"[^>]*>)","i")),s=t.replace(r,(function(t,r,s){return n=s.length,$i(o)||"noscript"===o||(r=r.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),Si(o,r)&&(r=r.slice(1)),e.chars&&e.chars(r),""}));a+=t.length-s.length,t=s,d(o,a-n,a)}else{let n,o,r,s=t.indexOf("<");if(0===s){if(yi.test(t)){const n=t.indexOf("--\x3e");if(n>=0){e.shouldKeepComment&&e.comment&&e.comment(t.substring(4,n),a,a+n+3),l(n+3);continue}}if(_i.test(t)){const e=t.indexOf("]>");if(e>=0){l(e+2);continue}}const n=t.match(vi);if(n){l(n[0].length);continue}const o=t.match(gi);if(o){const t=a;l(o[0].length),d(o[1],t,a);continue}const r=u();if(r){f(r),Si(r.tagName,t)&&l(1);continue}}if(s>=0){for(o=t.slice(s);!(gi.test(o)||hi.test(o)||yi.test(o)||_i.test(o)||(r=o.indexOf("<",1),r<0));)s+=r,o=t.slice(s);n=t.substring(0,s)}s<0&&(n=t),n&&l(n.length),e.chars&&n&&e.chars(n,a-n.length,a)}if(t===i){e.chars&&e.chars(t);break}}function l(e){a+=e,t=t.substring(e)}function u(){const e=t.match(hi);if(e){const n={tagName:e[1],attrs:[],start:a};let o,r;for(l(e[0].length);!(o=t.match(mi))&&(r=t.match(fi)||t.match(ui));)r.start=a,l(r[0].length),r.end=a,n.attrs.push(r);if(o)return n.unarySlash=o[1],l(o[0].length),n.end=a,n}}function f(t){const i=t.tagName,a=t.unarySlash;o&&("p"===c&&li(i)&&d(c),s(i)&&c===i&&d(i));const l=r(i)||!!a,u=t.attrs.length,f=new Array(u);for(let n=0;n<u;n++){const o=t.attrs[n],r=o[3]||o[4]||o[5]||"",s="a"===i&&"href"===o[1]?e.shouldDecodeNewlinesForHref:e.shouldDecodeNewlines;f[n]={name:o[1],value:Oi(r,s)}}l||(n.push({tag:i,lowerCasedTag:i.toLowerCase(),attrs:f,start:t.start,end:t.end}),c=i),e.start&&e.start(i,f,l,t.start,t.end)}function d(t,o,r){let s,i;if(null==o&&(o=a),null==r&&(r=a),t)for(i=t.toLowerCase(),s=n.length-1;s>=0&&n[s].lowerCasedTag!==i;s--);else s=0;if(s>=0){for(let t=n.length-1;t>=s;t--)e.end&&e.end(n[t].tag,o,r);n.length=s,c=s&&n[s-1].tag}else"br"===i?e.start&&e.start(t,[],!0,o,r):"p"===i&&(e.start&&e.start(t,[],!1,o,r),e.end&&e.end(t,o,r))}d()}(t,{warn:Bi,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start(t,o,r,u,f){const d=i&&i.ns||Wi(t);q&&"svg"===d&&(o=function(t){const e=[];for(let n=0;n<t.length;n++){const o=t[n];oc.test(o.name)||(o.name=o.name.replace(rc,""),e.push(o))}return e}(o));let p=Zi(t,o,i);var h;d&&(p.ns=d),"style"!==(h=p).tag&&("script"!==h.tag||h.attrsMap.type&&"text/javascript"!==h.attrsMap.type)||et()||(p.forbidden=!0);for(let t=0;t<Vi.length;t++)p=Vi[t](p,e)||p;c||(!function(t){null!=br(t,"v-pre")&&(t.pre=!0)}(p),p.pre&&(c=!0)),Ji(p.tag)&&(a=!0),c?function(t){const e=t.attrsList,n=e.length;if(n){const o=t.attrs=new Array(n);for(let t=0;t<n;t++)o[t]={name:e[t].name,value:JSON.stringify(e[t].value)},null!=e[t].start&&(o[t].start=e[t].start,o[t].end=e[t].end)}else t.pre||(t.plain=!0)}(p):p.processed||(Yi(p),function(t){const e=br(t,"v-if");if(e)t.if=e,Qi(t,{exp:e,block:t});else{null!=br(t,"v-else")&&(t.else=!0);const e=br(t,"v-else-if");e&&(t.elseif=e)}}(p),function(t){null!=br(t,"v-once")&&(t.once=!0)}(p)),s||(s=p),r?l(p):(i=p,n.push(p))},end(t,e,o){const r=n[n.length-1];n.length-=1,i=n[n.length-1],l(r)},chars(t,e,n){if(!i)return;if(q&&"textarea"===i.tag&&i.attrsMap.placeholder===t)return;const s=i.children;var l;if(t=a||t.trim()?"script"===(l=i).tag||"style"===l.tag?t:Hi(t):s.length?r?"condense"===r&&Ri.test(t)?"":" ":o?" ":"":""){let e,n;a||"condense"!==r||(t=t.replace(Fi," ")),!c&&" "!==t&&(e=function(t,e){const n=e?ni(e):ti;if(!n.test(t))return;const o=[],r=[];let s,i,c,a=n.lastIndex=0;for(;s=n.exec(t);){i=s.index,i>a&&(r.push(c=t.slice(a,i)),o.push(JSON.stringify(c)));const e=ur(s[1].trim());o.push(`_s(${e})`),r.push({"@binding":e}),a=i+s[0].length}return a<t.length&&(r.push(c=t.slice(a)),o.push(JSON.stringify(c))),{expression:o.join("+"),tokens:r}}(t,Ui))?n={type:2,expression:e.expression,tokens:e.tokens,text:t}:" "===t&&s.length&&" "===s[s.length-1].text||(n={type:3,text:t}),n&&s.push(n)}},comment(t,e,n){if(i){const e={type:3,text:t,isComment:!0};i.children.push(e)}}}),s}function Xi(t,e){var n;!function(t){const e=$r(t,"key");e&&(t.key=e)}(t),t.plain=!t.key&&!t.scopedSlots&&!t.attrsList.length,function(t){const e=$r(t,"ref");e&&(t.ref=e,t.refInFor=function(t){let e=t;for(;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}(t))}(t),function(t){let e;"template"===t.tag?(e=br(t,"scope"),t.slotScope=e||br(t,"slot-scope")):(e=br(t,"slot-scope"))&&(t.slotScope=e);const n=$r(t,"slot");n&&(t.slotTarget='""'===n?'"default"':n,t.slotTargetDynamic=!(!t.attrsMap[":slot"]&&!t.attrsMap["v-bind:slot"]),"template"===t.tag||t.slotScope||mr(t,"slot",n,function(t,e){return t.rawAttrsMap[":"+e]||t.rawAttrsMap["v-bind:"+e]||t.rawAttrsMap[e]}(t,"slot")));if("template"===t.tag){const e=wr(t,Li);if(e){const{name:n,dynamic:o}=tc(e);t.slotTarget=n,t.slotTargetDynamic=o,t.slotScope=e.value||"_empty_"}}else{const e=wr(t,Li);if(e){const n=t.scopedSlots||(t.scopedSlots={}),{name:o,dynamic:r}=tc(e),s=n[o]=Zi("template",[],t);s.slotTarget=o,s.slotTargetDynamic=r,s.children=t.children.filter((t=>{if(!t.slotScope)return t.parent=s,!0})),s.slotScope=e.value||"_empty_",t.children=[],t.plain=!1}}}(t),"slot"===(n=t).tag&&(n.slotName=$r(n,"name")),function(t){let e;(e=$r(t,"is"))&&(t.component=e);null!=br(t,"inline-template")&&(t.inlineTemplate=!0)}(t);for(let n=0;n<zi.length;n++)t=zi[n](t,e)||t;return function(t){const e=t.attrsList;let n,o,r,s,i,c,a,l;for(n=0,o=e.length;n<o;n++)if(r=s=e[n].name,i=e[n].value,Ai.test(r))if(t.hasBindings=!0,c=ec(r.replace(Ai,"")),c&&(r=r.replace(Ii,"")),Mi.test(r))r=r.replace(Mi,""),i=ur(i),l=Pi.test(r),l&&(r=r.slice(1,-1)),c&&(c.prop&&!l&&(r=w(r),"innerHtml"===r&&(r="innerHTML")),c.camel&&!l&&(r=w(r)),c.sync&&(a=kr(i,"$event"),l?_r(t,`"update:"+(${r})`,a,null,!1,0,e[n],!0):(_r(t,`update:${w(r)}`,a,null,!1,0,e[n]),k(r)!==w(r)&&_r(t,`update:${k(r)}`,a,null,!1,0,e[n])))),c&&c.prop||!t.component&&qi(t.tag,t.attrsMap.type,r)?hr(t,r,i,e[n],l):mr(t,r,i,e[n],l);else if(Ti.test(r))r=r.replace(Ti,""),l=Pi.test(r),l&&(r=r.slice(1,-1)),_r(t,r,i,c,!1,0,e[n],l);else{r=r.replace(Ai,"");const o=r.match(Di);let a=o&&o[1];l=!1,a&&(r=r.slice(0,-(a.length+1)),Pi.test(a)&&(a=a.slice(1,-1),l=!0)),vr(t,r,s,i,a,l,c,e[n])}else mr(t,r,JSON.stringify(i),e[n]),!t.component&&"muted"===r&&qi(t.tag,t.attrsMap.type,r)&&hr(t,r,"true",e[n])}(t),t}function Yi(t){let e;if(e=br(t,"v-for")){const n=function(t){const e=t.match(ji);if(!e)return;const n={};n.for=e[2].trim();const o=e[1].trim().replace(Ni,""),r=o.match(Ei);r?(n.alias=o.replace(Ei,"").trim(),n.iterator1=r[1].trim(),r[2]&&(n.iterator2=r[2].trim())):n.alias=o;return n}(e);n&&T(t,n)}}function Qi(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(e)}function tc(t){let e=t.name.replace(Li,"");return e||"#"!==t.name[0]&&(e="default"),Pi.test(e)?{name:e.slice(1,-1),dynamic:!0}:{name:`"${e}"`,dynamic:!1}}function ec(t){const e=t.match(Ii);if(e){const t={};return e.forEach((e=>{t[e.slice(1)]=!0})),t}}function nc(t){const e={};for(let n=0,o=t.length;n<o;n++)e[t[n].name]=t[n].value;return e}const oc=/^xmlns:NS\d+/,rc=/^NS\d+:/;function sc(t){return Zi(t.tag,t.attrsList.slice(),t.parent)}var ic=[oi,ri,{preTransformNode:function(t,e){if("input"===t.tag){const n=t.attrsMap;if(!n["v-model"])return;let o;if((n[":type"]||n["v-bind:type"])&&(o=$r(t,"type")),n.type||o||!n["v-bind"]||(o=`(${n["v-bind"]}).type`),o){const n=br(t,"v-if",!0),r=n?`&&(${n})`:"",s=null!=br(t,"v-else",!0),i=br(t,"v-else-if",!0),c=sc(t);Yi(c),gr(c,"type","checkbox"),Xi(c,e),c.processed=!0,c.if=`(${o})==='checkbox'`+r,Qi(c,{exp:c.if,block:c});const a=sc(t);br(a,"v-for",!0),gr(a,"type","radio"),Xi(a,e),Qi(c,{exp:`(${o})==='radio'`+r,block:a});const l=sc(t);return br(l,"v-for",!0),gr(l,":type",o),Xi(l,e),Qi(c,{exp:n,block:l}),s?c.else=!0:i&&(c.elseif=i),c}}}}];const cc={expectHTML:!0,modules:ic,directives:{model:function(t,e,n){const o=e.value,r=e.modifiers,s=t.tag,i=t.attrsMap.type;if(t.component)return Cr(t,o,r),!1;if("select"===s)!function(t,e,n){const o=n&&n.number;let r=`var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return ${o?"_n(val)":"val"}});`;r=`${r} ${kr(e,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]")}`,_r(t,"change",r,null,!0)}(t,o,r);else if("input"===s&&"checkbox"===i)!function(t,e,n){const o=n&&n.number,r=$r(t,"value")||"null",s=$r(t,"true-value")||"true",i=$r(t,"false-value")||"false";hr(t,"checked",`Array.isArray(${e})?_i(${e},${r})>-1`+("true"===s?`:(${e})`:`:_q(${e},${s})`)),_r(t,"change",`var $$a=${e},$$el=$event.target,$$c=$$el.checked?(${s}):(${i});if(Array.isArray($$a)){var $$v=${o?"_n("+r+")":r},$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(${kr(e,"$$a.concat([$$v])")})}else{$$i>-1&&(${kr(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")})}}else{${kr(e,"$$c")}}`,null,!0)}(t,o,r);else if("input"===s&&"radio"===i)!function(t,e,n){const o=n&&n.number;let r=$r(t,"value")||"null";r=o?`_n(${r})`:r,hr(t,"checked",`_q(${e},${r})`),_r(t,"change",kr(e,r),null,!0)}(t,o,r);else if("input"===s||"textarea"===s)!function(t,e,n){const o=t.attrsMap.type,{lazy:r,number:s,trim:i}=n||{},c=!r&&"range"!==o,a=r?"change":"range"===o?"__r":"input";let l="$event.target.value";i&&(l="$event.target.value.trim()");s&&(l=`_n(${l})`);let u=kr(e,l);c&&(u=`if($event.target.composing)return;${u}`);hr(t,"value",`(${e})`),_r(t,a,u,null,!0),(i||s)&&_r(t,"blur","$forceUpdate()")}(t,o,r);else if(!F.isReservedTag(s))return Cr(t,o,r),!1;return!0},text:function(t,e){e.value&&hr(t,"textContent",`_s(${e.value})`,e)},html:function(t,e){e.value&&hr(t,"innerHTML",`_s(${e.value})`,e)}},isPreTag:t=>"pre"===t,isUnaryTag:ci,mustUseProp:wo,canBeLeftOpenTag:ai,isReservedTag:Lo,getTagNamespace:Ro,staticKeys:function(t){return t.reduce(((t,e)=>t.concat(e.staticKeys||[])),[]).join(",")}(ic)};let ac,lc;const uc=$((function(t){return h("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}));function fc(t,e){t&&(ac=uc(e.staticKeys||""),lc=e.isReservedTag||E,dc(t),pc(t,!1))}function dc(t){if(t.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||m(t.tag)||!lc(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(ac)))}(t),1===t.type){if(!lc(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(let e=0,n=t.children.length;e<n;e++){const n=t.children[e];dc(n),n.static||(t.static=!1)}if(t.ifConditions)for(let e=1,n=t.ifConditions.length;e<n;e++){const n=t.ifConditions[e].block;dc(n),n.static||(t.static=!1)}}}function pc(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(let n=0,o=t.children.length;n<o;n++)pc(t.children[n],e||!!t.for);if(t.ifConditions)for(let n=1,o=t.ifConditions.length;n<o;n++)pc(t.ifConditions[n].block,e)}}const hc=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,mc=/\([^)]*?\);*$/,gc=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,vc={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},yc={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},_c=t=>`if(${t})return null;`,$c={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:_c("$event.target !== $event.currentTarget"),ctrl:_c("!$event.ctrlKey"),shift:_c("!$event.shiftKey"),alt:_c("!$event.altKey"),meta:_c("!$event.metaKey"),left:_c("'button' in $event && $event.button !== 0"),middle:_c("'button' in $event && $event.button !== 1"),right:_c("'button' in $event && $event.button !== 2")};function bc(t,e){const n=e?"nativeOn:":"on:";let o="",r="";for(const e in t){const n=wc(t[e]);t[e]&&t[e].dynamic?r+=`${e},${n},`:o+=`"${e}":${n},`}return o=`{${o.slice(0,-1)}}`,r?n+`_d(${o},[${r.slice(0,-1)}])`:n+o}function wc(t){if(!t)return"function(){}";if(Array.isArray(t))return`[${t.map((t=>wc(t))).join(",")}]`;const e=gc.test(t.value),n=hc.test(t.value),o=gc.test(t.value.replace(mc,""));if(t.modifiers){let r="",s="";const i=[];for(const e in t.modifiers)if($c[e])s+=$c[e],vc[e]&&i.push(e);else if("exact"===e){const e=t.modifiers;s+=_c(["ctrl","shift","alt","meta"].filter((t=>!e[t])).map((t=>`$event.${t}Key`)).join("||"))}else i.push(e);i.length&&(r+=function(t){return`if(!$event.type.indexOf('key')&&${t.map(xc).join("&&")})return null;`}(i)),s&&(r+=s);return`function($event){${r}${e?`return ${t.value}.apply(null, arguments)`:n?`return (${t.value}).apply(null, arguments)`:o?`return ${t.value}`:t.value}}`}return e||n?t.value:`function($event){${o?`return ${t.value}`:t.value}}`}function xc(t){const e=parseInt(t,10);if(e)return`$event.keyCode!==${e}`;const n=vc[t],o=yc[t];return`_k($event.keyCode,${JSON.stringify(t)},${JSON.stringify(n)},$event.key,${JSON.stringify(o)})`}var Cc={on:function(t,e){t.wrapListeners=t=>`_g(${t},${e.value})`},bind:function(t,e){t.wrapData=n=>`_b(${n},'${t.tag}',${e.value},${e.modifiers&&e.modifiers.prop?"true":"false"}${e.modifiers&&e.modifiers.sync?",true":""})`},cloak:j};class kc{constructor(t){this.options=t,this.warn=t.warn||dr,this.transforms=pr(t.modules,"transformCode"),this.dataGenFns=pr(t.modules,"genData"),this.directives=T(T({},Cc),t.directives);const e=t.isReservedTag||E;this.maybeComponent=t=>!!t.component||!e(t.tag),this.onceId=0,this.staticRenderFns=[],this.pre=!1}}function Sc(t,e){const n=new kc(e);return{render:`with(this){return ${t?"script"===t.tag?"null":Oc(t,n):'_c("div")'}}`,staticRenderFns:n.staticRenderFns}}function Oc(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Tc(t,e);if(t.once&&!t.onceProcessed)return Ac(t,e);if(t.for&&!t.forProcessed)return Nc(t,e);if(t.if&&!t.ifProcessed)return jc(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){const n=t.slotName||'"default"',o=Ic(t,e);let r=`_t(${n}${o?`,function(){return ${o}}`:""}`;const s=t.attrs||t.dynamicAttrs?Fc((t.attrs||[]).concat(t.dynamicAttrs||[]).map((t=>({name:w(t.name),value:t.value,dynamic:t.dynamic})))):null,i=t.attrsMap["v-bind"];!s&&!i||o||(r+=",null");s&&(r+=`,${s}`);i&&(r+=`${s?"":",null"},${i}`);return r+")"}(t,e);{let n;if(t.component)n=function(t,e,n){const o=e.inlineTemplate?null:Ic(e,n,!0);return`_c(${t},${Pc(e,n)}${o?`,${o}`:""})`}(t.component,t,e);else{let o;const r=e.maybeComponent(t);let s;(!t.plain||t.pre&&r)&&(o=Pc(t,e));const i=e.options.bindings;r&&i&&!1!==i.__isScriptSetup&&(s=function(t,e){const n=w(e),o=x(n),r=r=>t[e]===r?e:t[n]===r?n:t[o]===r?o:void 0,s=r("setup-const")||r("setup-reactive-const");if(s)return s;const i=r("setup-let")||r("setup-ref")||r("setup-maybe-ref");if(i)return i}(i,t.tag)),s||(s=`'${t.tag}'`);const c=t.inlineTemplate?null:Ic(t,e,!0);n=`_c(${s}${o?`,${o}`:""}${c?`,${c}`:""})`}for(let o=0;o<e.transforms.length;o++)n=e.transforms[o](t,n);return n}}return Ic(t,e)||"void 0"}function Tc(t,e){t.staticProcessed=!0;const n=e.pre;return t.pre&&(e.pre=t.pre),e.staticRenderFns.push(`with(this){return ${Oc(t,e)}}`),e.pre=n,`_m(${e.staticRenderFns.length-1}${t.staticInFor?",true":""})`}function Ac(t,e){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return jc(t,e);if(t.staticInFor){let n="",o=t.parent;for(;o;){if(o.for){n=o.key;break}o=o.parent}return n?`_o(${Oc(t,e)},${e.onceId++},${n})`:Oc(t,e)}return Tc(t,e)}function jc(t,e,n,o){return t.ifProcessed=!0,Ec(t.ifConditions.slice(),e,n,o)}function Ec(t,e,n,o){if(!t.length)return o||"_e()";const r=t.shift();return r.exp?`(${r.exp})?${s(r.block)}:${Ec(t,e,n,o)}`:`${s(r.block)}`;function s(t){return n?n(t,e):t.once?Ac(t,e):Oc(t,e)}}function Nc(t,e,n,o){const r=t.for,s=t.alias,i=t.iterator1?`,${t.iterator1}`:"",c=t.iterator2?`,${t.iterator2}`:"";return t.forProcessed=!0,`${o||"_l"}((${r}),function(${s}${i}${c}){return ${(n||Oc)(t,e)}})`}function Pc(t,e){let n="{";const o=function(t,e){const n=t.directives;if(!n)return;let o,r,s,i,c="directives:[",a=!1;for(o=0,r=n.length;o<r;o++){s=n[o],i=!0;const r=e.directives[s.name];r&&(i=!!r(t,s,e.warn)),i&&(a=!0,c+=`{name:"${s.name}",rawName:"${s.rawName}"${s.value?`,value:(${s.value}),expression:${JSON.stringify(s.value)}`:""}${s.arg?`,arg:${s.isDynamicArg?s.arg:`"${s.arg}"`}`:""}${s.modifiers?`,modifiers:${JSON.stringify(s.modifiers)}`:""}},`)}if(a)return c.slice(0,-1)+"]"}(t,e);o&&(n+=o+","),t.key&&(n+=`key:${t.key},`),t.ref&&(n+=`ref:${t.ref},`),t.refInFor&&(n+="refInFor:true,"),t.pre&&(n+="pre:true,"),t.component&&(n+=`tag:"${t.tag}",`);for(let o=0;o<e.dataGenFns.length;o++)n+=e.dataGenFns[o](t);if(t.attrs&&(n+=`attrs:${Fc(t.attrs)},`),t.props&&(n+=`domProps:${Fc(t.props)},`),t.events&&(n+=`${bc(t.events,!1)},`),t.nativeEvents&&(n+=`${bc(t.nativeEvents,!0)},`),t.slotTarget&&!t.slotScope&&(n+=`slot:${t.slotTarget},`),t.scopedSlots&&(n+=`${function(t,e,n){let o=t.for||Object.keys(e).some((t=>{const n=e[t];return n.slotTargetDynamic||n.if||n.for||Dc(n)})),r=!!t.if;if(!o){let e=t.parent;for(;e;){if(e.slotScope&&"_empty_"!==e.slotScope||e.for){o=!0;break}e.if&&(r=!0),e=e.parent}}const s=Object.keys(e).map((t=>Mc(e[t],n))).join(",");return`scopedSlots:_u([${s}]${o?",null,true":""}${!o&&r?`,null,false,${function(t){let e=5381,n=t.length;for(;n;)e=33*e^t.charCodeAt(--n);return e>>>0}(s)}`:""})`}(t,t.scopedSlots,e)},`),t.model&&(n+=`model:{value:${t.model.value},callback:${t.model.callback},expression:${t.model.expression}},`),t.inlineTemplate){const o=function(t,e){const n=t.children[0];if(n&&1===n.type){const t=Sc(n,e.options);return`inlineTemplate:{render:function(){${t.render}},staticRenderFns:[${t.staticRenderFns.map((t=>`function(){${t}}`)).join(",")}]}`}}(t,e);o&&(n+=`${o},`)}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n=`_b(${n},"${t.tag}",${Fc(t.dynamicAttrs)})`),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function Dc(t){return 1===t.type&&("slot"===t.tag||t.children.some(Dc))}function Mc(t,e){const n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return jc(t,e,Mc,"null");if(t.for&&!t.forProcessed)return Nc(t,e,Mc);const o="_empty_"===t.slotScope?"":String(t.slotScope),r=`function(${o}){return ${"template"===t.tag?t.if&&n?`(${t.if})?${Ic(t,e)||"undefined"}:undefined`:Ic(t,e)||"undefined":Oc(t,e)}}`,s=o?"":",proxy:true";return`{key:${t.slotTarget||'"default"'},fn:${r}${s}}`}function Ic(t,e,n,o,r){const s=t.children;if(s.length){const t=s[0];if(1===s.length&&t.for&&"template"!==t.tag&&"slot"!==t.tag){const r=n?e.maybeComponent(t)?",1":",0":"";return`${(o||Oc)(t,e)}${r}`}const i=n?function(t,e){let n=0;for(let o=0;o<t.length;o++){const r=t[o];if(1===r.type){if(Lc(r)||r.ifConditions&&r.ifConditions.some((t=>Lc(t.block)))){n=2;break}(e(r)||r.ifConditions&&r.ifConditions.some((t=>e(t.block))))&&(n=1)}}return n}(s,e.maybeComponent):0,c=r||Rc;return`[${s.map((t=>c(t,e))).join(",")}]${i?`,${i}`:""}`}}function Lc(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}function Rc(t,e){return 1===t.type?Oc(t,e):3===t.type&&t.isComment?function(t){return`_e(${JSON.stringify(t.text)})`}(t):function(t){return`_v(${2===t.type?t.expression:Hc(JSON.stringify(t.text))})`}(t)}function Fc(t){let e="",n="";for(let o=0;o<t.length;o++){const r=t[o],s=Hc(r.value);r.dynamic?n+=`${r.name},${s},`:e+=`"${r.name}":${s},`}return e=`{${e.slice(0,-1)}}`,n?`_d(${e},[${n.slice(0,-1)}])`:e}function Hc(t){return t.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function Bc(t,e){try{return new Function(t)}catch(n){return e.push({err:n,code:t}),j}}function Uc(t){const e=Object.create(null);return function(n,o,r){(o=T({},o)).warn,delete o.warn;const s=o.delimiters?String(o.delimiters)+n:n;if(e[s])return e[s];const i=t(n,o),c={},a=[];return c.render=Bc(i.render,a),c.staticRenderFns=i.staticRenderFns.map((t=>Bc(t,a))),e[s]=c}}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)");const zc=(Vc=function(t,e){const n=Gi(t.trim(),e);!1!==e.optimize&&fc(n,e);const o=Sc(n,e);return{ast:n,render:o.render,staticRenderFns:o.staticRenderFns}},function(t){function e(e,n){const o=Object.create(t),r=[],s=[];if(n){n.modules&&(o.modules=(t.modules||[]).concat(n.modules)),n.directives&&(o.directives=T(Object.create(t.directives||null),n.directives));for(const t in n)"modules"!==t&&"directives"!==t&&(o[t]=n[t])}o.warn=(t,e,n)=>{(n?s:r).push(t)};const i=Vc(e.trim(),o);return i.errors=r,i.tips=s,i}return{compile:e,compileToFunctions:Uc(e)}});var Vc;const{compile:Kc,compileToFunctions:Jc}=zc(cc);let qc;function Wc(t){return qc=qc||document.createElement("div"),qc.innerHTML=t?'<a href="\n"/>':'<div a="\n"/>',qc.innerHTML.indexOf("&#10;")>0}const Zc=!!K&&Wc(!1),Gc=!!K&&Wc(!0),Xc=$((t=>{const e=Bo(t);return e&&e.innerHTML})),Yc=fo.prototype.$mount;fo.prototype.$mount=function(t,e){if((t=t&&Bo(t))===document.body||t===document.documentElement)return this;const n=this.$options;if(!n.render){let e=n.template;if(e)if("string"==typeof e)"#"===e.charAt(0)&&(e=Xc(e));else{if(!e.nodeType)return this;e=e.innerHTML}else t&&(e=function(t){if(t.outerHTML)return t.outerHTML;{const e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}}(t));if(e){const{render:t,staticRenderFns:o}=Jc(e,{outputSourceRange:!1,shouldDecodeNewlines:Zc,shouldDecodeNewlinesForHref:Gc,delimiters:n.delimiters,comments:n.comments},this);n.render=t,n.staticRenderFns=o}}return Yc.call(this,t,e)},fo.compile=Jc,T(fo,Sn),fo.effect=function(t,e){const n=new En(it,t,j,{sync:!0});e&&(n.update=()=>{e((()=>n.run()))})},module.exports=fo;/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
const emptyObject = Object.freeze({});
const isArray = Array.isArray;
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef(v) {
    return v === undefined || v === null;
}
function isDef(v) {
    return v !== undefined && v !== null;
}
function isTrue(v) {
    return v === true;
}
function isFalse(v) {
    return v === false;
}
/**
 * Check if value is primitive.
 */
function isPrimitive(value) {
    return (typeof value === 'string' ||
        typeof value === 'number' ||
        // $flow-disable-line
        typeof value === 'symbol' ||
        typeof value === 'boolean');
}
function isFunction(value) {
    return typeof value === 'function';
}
/**
 * Quick object check - this is primarily used to tell
 * objects from primitive values when we know the value
 * is a JSON-compliant type.
 */
function isObject(obj) {
    return obj !== null && typeof obj === 'object';
}
/**
 * Get the raw type string of a value, e.g., [object Object].
 */
const _toString = Object.prototype.toString;
function toRawType(value) {
    return _toString.call(value).slice(8, -1);
}
/**
 * Strict object type check. Only returns true
 * for plain JavaScript objects.
 */
function isPlainObject(obj) {
    return _toString.call(obj) === '[object Object]';
}
function isRegExp(v) {
    return _toString.call(v) === '[object RegExp]';
}
/**
 * Check if val is a valid array index.
 */
function isValidArrayIndex(val) {
    const n = parseFloat(String(val));
    return n >= 0 && Math.floor(n) === n && isFinite(val);
}
function isPromise(val) {
    return (isDef(val) &&
        typeof val.then === 'function' &&
        typeof val.catch === 'function');
}
/**
 * Convert a value to a string that is actually rendered.
 */
function toString(val) {
    return val == null
        ? ''
        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
            ? JSON.stringify(val, null, 2)
            : String(val);
}
/**
 * Convert an input value to a number for persistence.
 * If the conversion fails, return original string.
 */
function toNumber(val) {
    const n = parseFloat(val);
    return isNaN(n) ? val : n;
}
/**
 * Make a map and return a function for checking if a key
 * is in that map.
 */
function makeMap(str, expectsLowerCase) {
    const map = Object.create(null);
    const list = str.split(',');
    for (let i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? val => map[val.toLowerCase()] : val => map[val];
}
/**
 * Check if a tag is a built-in tag.
 */
const isBuiltInTag = makeMap('slot,component', true);
/**
 * Check if an attribute is a reserved attribute.
 */
const isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
/**
 * Remove an item from an array.
 */
function remove$2(arr, item) {
    const len = arr.length;
    if (len) {
        // fast path for the only / last item
        if (item === arr[len - 1]) {
            arr.length = len - 1;
            return;
        }
        const index = arr.indexOf(item);
        if (index > -1) {
            return arr.splice(index, 1);
        }
    }
}
/**
 * Check whether an object has the property.
 */
const hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
    return hasOwnProperty.call(obj, key);
}
/**
 * Create a cached version of a pure function.
 */
function cached(fn) {
    const cache = Object.create(null);
    return function cachedFn(str) {
        const hit = cache[str];
        return hit || (cache[str] = fn(str));
    };
}
/**
 * Camelize a hyphen-delimited string.
 */
const camelizeRE = /-(\w)/g;
const camelize = cached((str) => {
    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
});
/**
 * Capitalize a string.
 */
const capitalize = cached((str) => {
    return str.charAt(0).toUpperCase() + str.slice(1);
});
/**
 * Hyphenate a camelCase string.
 */
const hyphenateRE = /\B([A-Z])/g;
const hyphenate = cached((str) => {
    return str.replace(hyphenateRE, '-$1').toLowerCase();
});
/**
 * Simple bind polyfill for environments that do not support it,
 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
 * since native bind is now performant enough in most browsers.
 * But removing it would mean breaking code that was able to run in
 * PhantomJS 1.x, so this must be kept for backward compatibility.
 */
/* istanbul ignore next */
function polyfillBind(fn, ctx) {
    function boundFn(a) {
        const l = arguments.length;
        return l
            ? l > 1
                ? fn.apply(ctx, arguments)
                : fn.call(ctx, a)
            : fn.call(ctx);
    }
    boundFn._length = fn.length;
    return boundFn;
}
function nativeBind(fn, ctx) {
    return fn.bind(ctx);
}
// @ts-expect-error bind cannot be `undefined`
const bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;
/**
 * Convert an Array-like object to a real Array.
 */
function toArray(list, start) {
    start = start || 0;
    let i = list.length - start;
    const ret = new Array(i);
    while (i--) {
        ret[i] = list[i + start];
    }
    return ret;
}
/**
 * Mix properties into target object.
 */
function extend(to, _from) {
    for (const key in _from) {
        to[key] = _from[key];
    }
    return to;
}
/**
 * Merge an Array of Objects into a single Object.
 */
function toObject(arr) {
    const res = {};
    for (let i = 0; i < arr.length; i++) {
        if (arr[i]) {
            extend(res, arr[i]);
        }
    }
    return res;
}
/* eslint-disable no-unused-vars */
/**
 * Perform no operation.
 * Stubbing args to make Flow happy without leaving useless transpiled code
 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
 */
function noop(a, b, c) { }
/**
 * Always return false.
 */
const no = (a, b, c) => false;
/* eslint-enable no-unused-vars */
/**
 * Return the same value.
 */
const identity = (_) => _;
/**
 * Generate a string containing static keys from compiler modules.
 */
function genStaticKeys$1(modules) {
    return modules
        .reduce((keys, m) => {
        return keys.concat(m.staticKeys || []);
    }, [])
        .join(',');
}
/**
 * Check if two values are loosely equal - that is,
 * if they are plain objects, do they have the same shape?
 */
function looseEqual(a, b) {
    if (a === b)
        return true;
    const isObjectA = isObject(a);
    const isObjectB = isObject(b);
    if (isObjectA && isObjectB) {
        try {
            const isArrayA = Array.isArray(a);
            const isArrayB = Array.isArray(b);
            if (isArrayA && isArrayB) {
                return (a.length === b.length &&
                    a.every((e, i) => {
                        return looseEqual(e, b[i]);
                    }));
            }
            else if (a instanceof Date && b instanceof Date) {
                return a.getTime() === b.getTime();
            }
            else if (!isArrayA && !isArrayB) {
                const keysA = Object.keys(a);
                const keysB = Object.keys(b);
                return (keysA.length === keysB.length &&
                    keysA.every(key => {
                        return looseEqual(a[key], b[key]);
                    }));
            }
            else {
                /* istanbul ignore next */
                return false;
            }
        }
        catch (e) {
            /* istanbul ignore next */
            return false;
        }
    }
    else if (!isObjectA && !isObjectB) {
        return String(a) === String(b);
    }
    else {
        return false;
    }
}
/**
 * Return the first index at which a loosely equal value can be
 * found in the array (if value is a plain object, the array must
 * contain an object of the same shape), or -1 if it is not present.
 */
function looseIndexOf(arr, val) {
    for (let i = 0; i < arr.length; i++) {
        if (looseEqual(arr[i], val))
            return i;
    }
    return -1;
}
/**
 * Ensure a function is called only once.
 */
function once(fn) {
    let called = false;
    return function () {
        if (!called) {
            called = true;
            fn.apply(this, arguments);
        }
    };
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
function hasChanged(x, y) {
    if (x === y) {
        return x === 0 && 1 / x !== 1 / y;
    }
    else {
        return x === x || y === y;
    }
}

const SSR_ATTR = 'data-server-rendered';
const ASSET_TYPES = ['component', 'directive', 'filter'];
const LIFECYCLE_HOOKS = [
    'beforeCreate',
    'created',
    'beforeMount',
    'mounted',
    'beforeUpdate',
    'updated',
    'beforeDestroy',
    'destroyed',
    'activated',
    'deactivated',
    'errorCaptured',
    'serverPrefetch',
    'renderTracked',
    'renderTriggered'
];

var config = {
    /**
     * Option merge strategies (used in core/util/options)
     */
    // $flow-disable-line
    optionMergeStrategies: Object.create(null),
    /**
     * Whether to suppress warnings.
     */
    silent: false,
    /**
     * Show production mode tip message on boot?
     */
    productionTip: true,
    /**
     * Whether to enable devtools
     */
    devtools: true,
    /**
     * Whether to record perf
     */
    performance: false,
    /**
     * Error handler for watcher errors
     */
    errorHandler: null,
    /**
     * Warn handler for watcher warns
     */
    warnHandler: null,
    /**
     * Ignore certain custom elements
     */
    ignoredElements: [],
    /**
     * Custom user key aliases for v-on
     */
    // $flow-disable-line
    keyCodes: Object.create(null),
    /**
     * Check if a tag is reserved so that it cannot be registered as a
     * component. This is platform-dependent and may be overwritten.
     */
    isReservedTag: no,
    /**
     * Check if an attribute is reserved so that it cannot be used as a component
     * prop. This is platform-dependent and may be overwritten.
     */
    isReservedAttr: no,
    /**
     * Check if a tag is an unknown element.
     * Platform-dependent.
     */
    isUnknownElement: no,
    /**
     * Get the namespace of an element
     */
    getTagNamespace: noop,
    /**
     * Parse the real tag name for the specific platform.
     */
    parsePlatformTagName: identity,
    /**
     * Check if an attribute must be bound using property, e.g. value
     * Platform-dependent.
     */
    mustUseProp: no,
    /**
     * Perform updates asynchronously. Intended to be used by Vue Test Utils
     * This will significantly reduce performance if set to false.
     */
    async: true,
    /**
     * Exposed for legacy reasons
     */
    _lifecycleHooks: LIFECYCLE_HOOKS
};

/**
 * unicode letters used for parsing html tags, component names and property paths.
 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
 */
const unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
/**
 * Check if a string starts with $ or _
 */
function isReserved(str) {
    const c = (str + '').charCodeAt(0);
    return c === 0x24 || c === 0x5f;
}
/**
 * Define a property.
 */
function def(obj, key, val, enumerable) {
    Object.defineProperty(obj, key, {
        value: val,
        enumerable: !!enumerable,
        writable: true,
        configurable: true
    });
}
/**
 * Parse simple path.
 */
const bailRE = new RegExp(`[^${unicodeRegExp.source}.$_\\d]`);
function parsePath(path) {
    if (bailRE.test(path)) {
        return;
    }
    const segments = path.split('.');
    return function (obj) {
        for (let i = 0; i < segments.length; i++) {
            if (!obj)
                return;
            obj = obj[segments[i]];
        }
        return obj;
    };
}

// can we use __proto__?
const hasProto = '__proto__' in {};
// Browser environment sniffing
const inBrowser = typeof window !== 'undefined';
const UA = inBrowser && window.navigator.userAgent.toLowerCase();
const isIE = UA && /msie|trident/.test(UA);
const isIE9 = UA && UA.indexOf('msie 9.0') > 0;
const isEdge = UA && UA.indexOf('edge/') > 0;
UA && UA.indexOf('android') > 0;
const isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
UA && /chrome\/\d+/.test(UA) && !isEdge;
UA && /phantomjs/.test(UA);
const isFF = UA && UA.match(/firefox\/(\d+)/);
// Firefox has a "watch" function on Object.prototype...
// @ts-expect-error firebox support
const nativeWatch = {}.watch;
let supportsPassive = false;
if (inBrowser) {
    try {
        const opts = {};
        Object.defineProperty(opts, 'passive', {
            get() {
                /* istanbul ignore next */
                supportsPassive = true;
            }
        }); // https://github.com/facebook/flow/issues/285
        window.addEventListener('test-passive', null, opts);
    }
    catch (e) { }
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
let _isServer;
const isServerRendering = () => {
    if (_isServer === undefined) {
        /* istanbul ignore if */
        if (!inBrowser && typeof global !== 'undefined') {
            // detect presence of vue-server-renderer and avoid
            // Webpack shimming the process
            _isServer =
                global['process'] && global['process'].env.VUE_ENV === 'server';
        }
        else {
            _isServer = false;
        }
    }
    return _isServer;
};
// detect devtools
const devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
/* istanbul ignore next */
function isNative(Ctor) {
    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
const hasSymbol = typeof Symbol !== 'undefined' &&
    isNative(Symbol) &&
    typeof Reflect !== 'undefined' &&
    isNative(Reflect.ownKeys);
let _Set; // $flow-disable-line
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
    // use native Set when available.
    _Set = Set;
}
else {
    // a non-standard Set polyfill that only works with primitive keys.
    _Set = class Set {
        constructor() {
            this.set = Object.create(null);
        }
        has(key) {
            return this.set[key] === true;
        }
        add(key) {
            this.set[key] = true;
        }
        clear() {
            this.set = Object.create(null);
        }
    };
}

let currentInstance = null;
/**
 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
 * relies on it). Do not use this internally, just use `currentInstance`.
 *
 * @internal this function needs manual type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function getCurrentInstance() {
    return currentInstance && { proxy: currentInstance };
}
/**
 * @internal
 */
function setCurrentInstance(vm = null) {
    if (!vm)
        currentInstance && currentInstance._scope.off();
    currentInstance = vm;
    vm && vm._scope.on();
}

/**
 * @internal
 */
class VNode {
    constructor(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
        this.tag = tag;
        this.data = data;
        this.children = children;
        this.text = text;
        this.elm = elm;
        this.ns = undefined;
        this.context = context;
        this.fnContext = undefined;
        this.fnOptions = undefined;
        this.fnScopeId = undefined;
        this.key = data && data.key;
        this.componentOptions = componentOptions;
        this.componentInstance = undefined;
        this.parent = undefined;
        this.raw = false;
        this.isStatic = false;
        this.isRootInsert = true;
        this.isComment = false;
        this.isCloned = false;
        this.isOnce = false;
        this.asyncFactory = asyncFactory;
        this.asyncMeta = undefined;
        this.isAsyncPlaceholder = false;
    }
    // DEPRECATED: alias for componentInstance for backwards compat.
    /* istanbul ignore next */
    get child() {
        return this.componentInstance;
    }
}
const createEmptyVNode = (text = '') => {
    const node = new VNode();
    node.text = text;
    node.isComment = true;
    return node;
};
function createTextVNode(val) {
    return new VNode(undefined, undefined, undefined, String(val));
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode(vnode) {
    const cloned = new VNode(vnode.tag, vnode.data, 
    // #7975
    // clone children array to avoid mutating original in case of cloning
    // a child.
    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
    cloned.ns = vnode.ns;
    cloned.isStatic = vnode.isStatic;
    cloned.key = vnode.key;
    cloned.isComment = vnode.isComment;
    cloned.fnContext = vnode.fnContext;
    cloned.fnOptions = vnode.fnOptions;
    cloned.fnScopeId = vnode.fnScopeId;
    cloned.asyncMeta = vnode.asyncMeta;
    cloned.isCloned = true;
    return cloned;
}

/* not type checking this file because flow doesn't play well with Proxy */
let initProxy;
{
    const allowedGlobals = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
        'require' // for Webpack/Browserify
    );
    const warnNonPresent = (target, key) => {
        warn$2(`Property or method "${key}" is not defined on the instance but ` +
            'referenced during render. Make sure that this property is reactive, ' +
            'either in the data option, or for class-based components, by ' +
            'initializing the property. ' +
            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
    };
    const warnReservedPrefix = (target, key) => {
        warn$2(`Property "${key}" must be accessed with "$data.${key}" because ` +
            'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
            'prevent conflicts with Vue internals. ' +
            'See: https://v2.vuejs.org/v2/api/#data', target);
    };
    const hasProxy = typeof Proxy !== 'undefined' && isNative(Proxy);
    if (hasProxy) {
        const isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
        config.keyCodes = new Proxy(config.keyCodes, {
            set(target, key, value) {
                if (isBuiltInModifier(key)) {
                    warn$2(`Avoid overwriting built-in modifier in config.keyCodes: .${key}`);
                    return false;
                }
                else {
                    target[key] = value;
                    return true;
                }
            }
        });
    }
    const hasHandler = {
        has(target, key) {
            const has = key in target;
            const isAllowed = allowedGlobals(key) ||
                (typeof key === 'string' &&
                    key.charAt(0) === '_' &&
                    !(key in target.$data));
            if (!has && !isAllowed) {
                if (key in target.$data)
                    warnReservedPrefix(target, key);
                else
                    warnNonPresent(target, key);
            }
            return has || !isAllowed;
        }
    };
    const getHandler = {
        get(target, key) {
            if (typeof key === 'string' && !(key in target)) {
                if (key in target.$data)
                    warnReservedPrefix(target, key);
                else
                    warnNonPresent(target, key);
            }
            return target[key];
        }
    };
    initProxy = function initProxy(vm) {
        if (hasProxy) {
            // determine which proxy handler to use
            const options = vm.$options;
            const handlers = options.render && options.render._withStripped ? getHandler : hasHandler;
            vm._renderProxy = new Proxy(vm, handlers);
        }
        else {
            vm._renderProxy = vm;
        }
    };
}

let uid$2 = 0;
const pendingCleanupDeps = [];
const cleanupDeps = () => {
    for (let i = 0; i < pendingCleanupDeps.length; i++) {
        const dep = pendingCleanupDeps[i];
        dep.subs = dep.subs.filter(s => s);
        dep._pending = false;
    }
    pendingCleanupDeps.length = 0;
};
/**
 * A dep is an observable that can have multiple
 * directives subscribing to it.
 * @internal
 */
class Dep {
    constructor() {
        // pending subs cleanup
        this._pending = false;
        this.id = uid$2++;
        this.subs = [];
    }
    addSub(sub) {
        this.subs.push(sub);
    }
    removeSub(sub) {
        // #12696 deps with massive amount of subscribers are extremely slow to
        // clean up in Chromium
        // to workaround this, we unset the sub for now, and clear them on
        // next scheduler flush.
        this.subs[this.subs.indexOf(sub)] = null;
        if (!this._pending) {
            this._pending = true;
            pendingCleanupDeps.push(this);
        }
    }
    depend(info) {
        if (Dep.target) {
            Dep.target.addDep(this);
            if (info && Dep.target.onTrack) {
                Dep.target.onTrack(Object.assign({ effect: Dep.target }, info));
            }
        }
    }
    notify(info) {
        // stabilize the subscriber list first
        const subs = this.subs.filter(s => s);
        if (!config.async) {
            // subs aren't sorted in scheduler if not running async
            // we need to sort them now to make sure they fire in correct
            // order
            subs.sort((a, b) => a.id - b.id);
        }
        for (let i = 0, l = subs.length; i < l; i++) {
            const sub = subs[i];
            if (info) {
                sub.onTrigger &&
                    sub.onTrigger(Object.assign({ effect: subs[i] }, info));
            }
            sub.update();
        }
    }
}
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null;
const targetStack = [];
function pushTarget(target) {
    targetStack.push(target);
    Dep.target = target;
}
function popTarget() {
    targetStack.pop();
    Dep.target = targetStack[targetStack.length - 1];
}

/*
 * not type checking this file because flow doesn't play well with
 * dynamically accessing methods on Array prototype
 */
const arrayProto = Array.prototype;
const arrayMethods = Object.create(arrayProto);
const methodsToPatch = [
    'push',
    'pop',
    'shift',
    'unshift',
    'splice',
    'sort',
    'reverse'
];
/**
 * Intercept mutating methods and emit events
 */
methodsToPatch.forEach(function (method) {
    // cache original method
    const original = arrayProto[method];
    def(arrayMethods, method, function mutator(...args) {
        const result = original.apply(this, args);
        const ob = this.__ob__;
        let inserted;
        switch (method) {
            case 'push':
            case 'unshift':
                inserted = args;
                break;
            case 'splice':
                inserted = args.slice(2);
                break;
        }
        if (inserted)
            ob.observeArray(inserted);
        // notify change
        {
            ob.dep.notify({
                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
                target: this,
                key: method
            });
        }
        return result;
    });
});

const arrayKeys = Object.getOwnPropertyNames(arrayMethods);
const NO_INIITIAL_VALUE = {};
/**
 * In some cases we may want to disable observation inside a component's
 * update computation.
 */
let shouldObserve = true;
function toggleObserving(value) {
    shouldObserve = value;
}
// ssr mock dep
const mockDep = {
    notify: noop,
    depend: noop,
    addSub: noop,
    removeSub: noop
};
/**
 * Observer class that is attached to each observed
 * object. Once attached, the observer converts the target
 * object's property keys into getter/setters that
 * collect dependencies and dispatch updates.
 */
class Observer {
    constructor(value, shallow = false, mock = false) {
        this.value = value;
        this.shallow = shallow;
        this.mock = mock;
        // this.value = value
        this.dep = mock ? mockDep : new Dep();
        this.vmCount = 0;
        def(value, '__ob__', this);
        if (isArray(value)) {
            if (!mock) {
                if (hasProto) {
                    value.__proto__ = arrayMethods;
                    /* eslint-enable no-proto */
                }
                else {
                    for (let i = 0, l = arrayKeys.length; i < l; i++) {
                        const key = arrayKeys[i];
                        def(value, key, arrayMethods[key]);
                    }
                }
            }
            if (!shallow) {
                this.observeArray(value);
            }
        }
        else {
            /**
             * Walk through all properties and convert them into
             * getter/setters. This method should only be called when
             * value type is Object.
             */
            const keys = Object.keys(value);
            for (let i = 0; i < keys.length; i++) {
                const key = keys[i];
                defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
            }
        }
    }
    /**
     * Observe a list of Array items.
     */
    observeArray(value) {
        for (let i = 0, l = value.length; i < l; i++) {
            observe(value[i], false, this.mock);
        }
    }
}
// helpers
/**
 * Attempt to create an observer instance for a value,
 * returns the new observer if successfully observed,
 * or the existing observer if the value already has one.
 */
function observe(value, shallow, ssrMockReactivity) {
    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
        return value.__ob__;
    }
    if (shouldObserve &&
        (ssrMockReactivity || !isServerRendering()) &&
        (isArray(value) || isPlainObject(value)) &&
        Object.isExtensible(value) &&
        !value.__v_skip /* ReactiveFlags.SKIP */ &&
        !isRef(value) &&
        !(value instanceof VNode)) {
        return new Observer(value, shallow, ssrMockReactivity);
    }
}
/**
 * Define a reactive property on an Object.
 */
function defineReactive(obj, key, val, customSetter, shallow, mock) {
    const dep = new Dep();
    const property = Object.getOwnPropertyDescriptor(obj, key);
    if (property && property.configurable === false) {
        return;
    }
    // cater for pre-defined getter/setters
    const getter = property && property.get;
    const setter = property && property.set;
    if ((!getter || setter) &&
        (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
        val = obj[key];
    }
    let childOb = !shallow && observe(val, false, mock);
    Object.defineProperty(obj, key, {
        enumerable: true,
        configurable: true,
        get: function reactiveGetter() {
            const value = getter ? getter.call(obj) : val;
            if (Dep.target) {
                {
                    dep.depend({
                        target: obj,
                        type: "get" /* TrackOpTypes.GET */,
                        key
                    });
                }
                if (childOb) {
                    childOb.dep.depend();
                    if (isArray(value)) {
                        dependArray(value);
                    }
                }
            }
            return isRef(value) && !shallow ? value.value : value;
        },
        set: function reactiveSetter(newVal) {
            const value = getter ? getter.call(obj) : val;
            if (!hasChanged(value, newVal)) {
                return;
            }
            if (customSetter) {
                customSetter();
            }
            if (setter) {
                setter.call(obj, newVal);
            }
            else if (getter) {
                // #7981: for accessor properties without setter
                return;
            }
            else if (!shallow && isRef(value) && !isRef(newVal)) {
                value.value = newVal;
                return;
            }
            else {
                val = newVal;
            }
            childOb = !shallow && observe(newVal, false, mock);
            {
                dep.notify({
                    type: "set" /* TriggerOpTypes.SET */,
                    target: obj,
                    key,
                    newValue: newVal,
                    oldValue: value
                });
            }
        }
    });
    return dep;
}
function set(target, key, val) {
    if ((isUndef(target) || isPrimitive(target))) {
        warn$2(`Cannot set reactive property on undefined, null, or primitive value: ${target}`);
    }
    if (isReadonly(target)) {
        warn$2(`Set operation on key "${key}" failed: target is readonly.`);
        return;
    }
    const ob = target.__ob__;
    if (isArray(target) && isValidArrayIndex(key)) {
        target.length = Math.max(target.length, key);
        target.splice(key, 1, val);
        // when mocking for SSR, array methods are not hijacked
        if (ob && !ob.shallow && ob.mock) {
            observe(val, false, true);
        }
        return val;
    }
    if (key in target && !(key in Object.prototype)) {
        target[key] = val;
        return val;
    }
    if (target._isVue || (ob && ob.vmCount)) {
        warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +
                'at runtime - declare it upfront in the data option.');
        return val;
    }
    if (!ob) {
        target[key] = val;
        return val;
    }
    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
    {
        ob.dep.notify({
            type: "add" /* TriggerOpTypes.ADD */,
            target: target,
            key,
            newValue: val,
            oldValue: undefined
        });
    }
    return val;
}
function del(target, key) {
    if ((isUndef(target) || isPrimitive(target))) {
        warn$2(`Cannot delete reactive property on undefined, null, or primitive value: ${target}`);
    }
    if (isArray(target) && isValidArrayIndex(key)) {
        target.splice(key, 1);
        return;
    }
    const ob = target.__ob__;
    if (target._isVue || (ob && ob.vmCount)) {
        warn$2('Avoid deleting properties on a Vue instance or its root $data ' +
                '- just set it to null.');
        return;
    }
    if (isReadonly(target)) {
        warn$2(`Delete operation on key "${key}" failed: target is readonly.`);
        return;
    }
    if (!hasOwn(target, key)) {
        return;
    }
    delete target[key];
    if (!ob) {
        return;
    }
    {
        ob.dep.notify({
            type: "delete" /* TriggerOpTypes.DELETE */,
            target: target,
            key
        });
    }
}
/**
 * Collect dependencies on array elements when the array is touched, since
 * we cannot intercept array element access like property getters.
 */
function dependArray(value) {
    for (let e, i = 0, l = value.length; i < l; i++) {
        e = value[i];
        if (e && e.__ob__) {
            e.__ob__.dep.depend();
        }
        if (isArray(e)) {
            dependArray(e);
        }
    }
}

function reactive(target) {
    makeReactive(target, false);
    return target;
}
/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
function shallowReactive(target) {
    makeReactive(target, true);
    def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    return target;
}
function makeReactive(target, shallow) {
    // if trying to observe a readonly proxy, return the readonly version.
    if (!isReadonly(target)) {
        {
            if (isArray(target)) {
                warn$2(`Avoid using Array as root value for ${shallow ? `shallowReactive()` : `reactive()`} as it cannot be tracked in watch() or watchEffect(). Use ${shallow ? `shallowRef()` : `ref()`} instead. This is a Vue-2-only limitation.`);
            }
            const existingOb = target && target.__ob__;
            if (existingOb && existingOb.shallow !== shallow) {
                warn$2(`Target is already a ${existingOb.shallow ? `` : `non-`}shallow reactive object, and cannot be converted to ${shallow ? `` : `non-`}shallow.`);
            }
        }
        const ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
        if (!ob) {
            if (target == null || isPrimitive(target)) {
                warn$2(`value cannot be made reactive: ${String(target)}`);
            }
            if (isCollectionType(target)) {
                warn$2(`Vue 2 does not support reactive collection types such as Map or Set.`);
            }
        }
    }
}
function isReactive(value) {
    if (isReadonly(value)) {
        return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
    }
    return !!(value && value.__ob__);
}
function isShallow(value) {
    return !!(value && value.__v_isShallow);
}
function isReadonly(value) {
    return !!(value && value.__v_isReadonly);
}
function isProxy(value) {
    return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
    const raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
    return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
    // non-extensible objects won't be observed anyway
    if (Object.isExtensible(value)) {
        def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
    }
    return value;
}
/**
 * @internal
 */
function isCollectionType(value) {
    const type = toRawType(value);
    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
}

/**
 * @internal
 */
const RefFlag = `__v_isRef`;
function isRef(r) {
    return !!(r && r.__v_isRef === true);
}
function ref$1(value) {
    return createRef(value, false);
}
function shallowRef(value) {
    return createRef(value, true);
}
function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    const ref = {};
    def(ref, RefFlag, true);
    def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
    return ref;
}
function triggerRef(ref) {
    if (!ref.dep) {
        warn$2(`received object is not a triggerable ref.`);
    }
    {
        ref.dep &&
            ref.dep.notify({
                type: "set" /* TriggerOpTypes.SET */,
                target: ref,
                key: 'value'
            });
    }
}
function unref(ref) {
    return isRef(ref) ? ref.value : ref;
}
function proxyRefs(objectWithRefs) {
    if (isReactive(objectWithRefs)) {
        return objectWithRefs;
    }
    const proxy = {};
    const keys = Object.keys(objectWithRefs);
    for (let i = 0; i < keys.length; i++) {
        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
    }
    return proxy;
}
function proxyWithRefUnwrap(target, source, key) {
    Object.defineProperty(target, key, {
        enumerable: true,
        configurable: true,
        get: () => {
            const val = source[key];
            if (isRef(val)) {
                return val.value;
            }
            else {
                const ob = val && val.__ob__;
                if (ob)
                    ob.dep.depend();
                return val;
            }
        },
        set: value => {
            const oldValue = source[key];
            if (isRef(oldValue) && !isRef(value)) {
                oldValue.value = value;
            }
            else {
                source[key] = value;
            }
        }
    });
}
function customRef(factory) {
    const dep = new Dep();
    const { get, set } = factory(() => {
        {
            dep.depend({
                target: ref,
                type: "get" /* TrackOpTypes.GET */,
                key: 'value'
            });
        }
    }, () => {
        {
            dep.notify({
                target: ref,
                type: "set" /* TriggerOpTypes.SET */,
                key: 'value'
            });
        }
    });
    const ref = {
        get value() {
            return get();
        },
        set value(newVal) {
            set(newVal);
        }
    };
    def(ref, RefFlag, true);
    return ref;
}
function toRefs(object) {
    if (!isReactive(object)) {
        warn$2(`toRefs() expects a reactive object but received a plain one.`);
    }
    const ret = isArray(object) ? new Array(object.length) : {};
    for (const key in object) {
        ret[key] = toRef(object, key);
    }
    return ret;
}
function toRef(object, key, defaultValue) {
    const val = object[key];
    if (isRef(val)) {
        return val;
    }
    const ref = {
        get value() {
            const val = object[key];
            return val === undefined ? defaultValue : val;
        },
        set value(newVal) {
            object[key] = newVal;
        }
    };
    def(ref, RefFlag, true);
    return ref;
}

const rawToReadonlyFlag = `__v_rawToReadonly`;
const rawToShallowReadonlyFlag = `__v_rawToShallowReadonly`;
function readonly(target) {
    return createReadonly(target, false);
}
function createReadonly(target, shallow) {
    if (!isPlainObject(target)) {
        {
            if (isArray(target)) {
                warn$2(`Vue 2 does not support readonly arrays.`);
            }
            else if (isCollectionType(target)) {
                warn$2(`Vue 2 does not support readonly collection types such as Map or Set.`);
            }
            else {
                warn$2(`value cannot be made readonly: ${typeof target}`);
            }
        }
        return target;
    }
    if (!Object.isExtensible(target)) {
        warn$2(`Vue 2 does not support creating readonly proxy for non-extensible object.`);
    }
    // already a readonly object
    if (isReadonly(target)) {
        return target;
    }
    // already has a readonly proxy
    const existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
    const existingProxy = target[existingFlag];
    if (existingProxy) {
        return existingProxy;
    }
    const proxy = Object.create(Object.getPrototypeOf(target));
    def(target, existingFlag, proxy);
    def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
    def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
    if (isRef(target)) {
        def(proxy, RefFlag, true);
    }
    if (shallow || isShallow(target)) {
        def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    }
    const keys = Object.keys(target);
    for (let i = 0; i < keys.length; i++) {
        defineReadonlyProperty(proxy, target, keys[i], shallow);
    }
    return proxy;
}
function defineReadonlyProperty(proxy, target, key, shallow) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get() {
            const val = target[key];
            return shallow || !isPlainObject(val) ? val : readonly(val);
        },
        set() {
            warn$2(`Set operation on key "${key}" failed: target is readonly.`);
        }
    });
}
/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
function shallowReadonly(target) {
    return createReadonly(target, true);
}

function computed(getterOrOptions, debugOptions) {
    let getter;
    let setter;
    const onlyGetter = isFunction(getterOrOptions);
    if (onlyGetter) {
        getter = getterOrOptions;
        setter = () => {
                warn$2('Write operation failed: computed value is readonly');
            }
            ;
    }
    else {
        getter = getterOrOptions.get;
        setter = getterOrOptions.set;
    }
    const watcher = isServerRendering()
        ? null
        : new Watcher(currentInstance, getter, noop, { lazy: true });
    if (watcher && debugOptions) {
        watcher.onTrack = debugOptions.onTrack;
        watcher.onTrigger = debugOptions.onTrigger;
    }
    const ref = {
        // some libs rely on the presence effect for checking computed refs
        // from normal refs, but the implementation doesn't matter
        effect: watcher,
        get value() {
            if (watcher) {
                if (watcher.dirty) {
                    watcher.evaluate();
                }
                if (Dep.target) {
                    if (Dep.target.onTrack) {
                        Dep.target.onTrack({
                            effect: Dep.target,
                            target: ref,
                            type: "get" /* TrackOpTypes.GET */,
                            key: 'value'
                        });
                    }
                    watcher.depend();
                }
                return watcher.value;
            }
            else {
                return getter();
            }
        },
        set value(newVal) {
            setter(newVal);
        }
    };
    def(ref, RefFlag, true);
    def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
    return ref;
}

let mark;
let measure;
{
    const perf = inBrowser && window.performance;
    /* istanbul ignore if */
    if (perf &&
        // @ts-ignore
        perf.mark &&
        // @ts-ignore
        perf.measure &&
        // @ts-ignore
        perf.clearMarks &&
        // @ts-ignore
        perf.clearMeasures) {
        mark = tag => perf.mark(tag);
        measure = (name, startTag, endTag) => {
            perf.measure(name, startTag, endTag);
            perf.clearMarks(startTag);
            perf.clearMarks(endTag);
            // perf.clearMeasures(name)
        };
    }
}

const normalizeEvent = cached((name) => {
    const passive = name.charAt(0) === '&';
    name = passive ? name.slice(1) : name;
    const once = name.charAt(0) === '~'; // Prefixed last, checked first
    name = once ? name.slice(1) : name;
    const capture = name.charAt(0) === '!';
    name = capture ? name.slice(1) : name;
    return {
        name,
        once,
        capture,
        passive
    };
});
function createFnInvoker(fns, vm) {
    function invoker() {
        const fns = invoker.fns;
        if (isArray(fns)) {
            const cloned = fns.slice();
            for (let i = 0; i < cloned.length; i++) {
                invokeWithErrorHandling(cloned[i], null, arguments, vm, `v-on handler`);
            }
        }
        else {
            // return handler return value for single handlers
            return invokeWithErrorHandling(fns, null, arguments, vm, `v-on handler`);
        }
    }
    invoker.fns = fns;
    return invoker;
}
function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
    let name, cur, old, event;
    for (name in on) {
        cur = on[name];
        old = oldOn[name];
        event = normalizeEvent(name);
        if (isUndef(cur)) {
            warn$2(`Invalid handler for event "${event.name}": got ` + String(cur), vm);
        }
        else if (isUndef(old)) {
            if (isUndef(cur.fns)) {
                cur = on[name] = createFnInvoker(cur, vm);
            }
            if (isTrue(event.once)) {
                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
            }
            add(event.name, cur, event.capture, event.passive, event.params);
        }
        else if (cur !== old) {
            old.fns = cur;
            on[name] = old;
        }
    }
    for (name in oldOn) {
        if (isUndef(on[name])) {
            event = normalizeEvent(name);
            remove(event.name, oldOn[name], event.capture);
        }
    }
}

function mergeVNodeHook(def, hookKey, hook) {
    if (def instanceof VNode) {
        def = def.data.hook || (def.data.hook = {});
    }
    let invoker;
    const oldHook = def[hookKey];
    function wrappedHook() {
        hook.apply(this, arguments);
        // important: remove merged hook to ensure it's called only once
        // and prevent memory leak
        remove$2(invoker.fns, wrappedHook);
    }
    if (isUndef(oldHook)) {
        // no existing hook
        invoker = createFnInvoker([wrappedHook]);
    }
    else {
        /* istanbul ignore if */
        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
            // already a merged invoker
            invoker = oldHook;
            invoker.fns.push(wrappedHook);
        }
        else {
            // existing plain hook
            invoker = createFnInvoker([oldHook, wrappedHook]);
        }
    }
    invoker.merged = true;
    def[hookKey] = invoker;
}

function extractPropsFromVNodeData(data, Ctor, tag) {
    // we are only extracting raw values here.
    // validation and default values are handled in the child
    // component itself.
    const propOptions = Ctor.options.props;
    if (isUndef(propOptions)) {
        return;
    }
    const res = {};
    const { attrs, props } = data;
    if (isDef(attrs) || isDef(props)) {
        for (const key in propOptions) {
            const altKey = hyphenate(key);
            {
                const keyInLowerCase = key.toLowerCase();
                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
                    tip(`Prop "${keyInLowerCase}" is passed to component ` +
                        `${formatComponentName(
                        // @ts-expect-error tag is string
                        tag || Ctor)}, but the declared prop name is` +
                        ` "${key}". ` +
                        `Note that HTML attributes are case-insensitive and camelCased ` +
                        `props need to use their kebab-case equivalents when using in-DOM ` +
                        `templates. You should probably use "${altKey}" instead of "${key}".`);
                }
            }
            checkProp(res, props, key, altKey, true) ||
                checkProp(res, attrs, key, altKey, false);
        }
    }
    return res;
}
function checkProp(res, hash, key, altKey, preserve) {
    if (isDef(hash)) {
        if (hasOwn(hash, key)) {
            res[key] = hash[key];
            if (!preserve) {
                delete hash[key];
            }
            return true;
        }
        else if (hasOwn(hash, altKey)) {
            res[key] = hash[altKey];
            if (!preserve) {
                delete hash[altKey];
            }
            return true;
        }
    }
    return false;
}

// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren(children) {
    for (let i = 0; i < children.length; i++) {
        if (isArray(children[i])) {
            return Array.prototype.concat.apply([], children);
        }
    }
    return children;
}
// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren(children) {
    return isPrimitive(children)
        ? [createTextVNode(children)]
        : isArray(children)
            ? normalizeArrayChildren(children)
            : undefined;
}
function isTextNode(node) {
    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
}
function normalizeArrayChildren(children, nestedIndex) {
    const res = [];
    let i, c, lastIndex, last;
    for (i = 0; i < children.length; i++) {
        c = children[i];
        if (isUndef(c) || typeof c === 'boolean')
            continue;
        lastIndex = res.length - 1;
        last = res[lastIndex];
        //  nested
        if (isArray(c)) {
            if (c.length > 0) {
                c = normalizeArrayChildren(c, `${nestedIndex || ''}_${i}`);
                // merge adjacent text nodes
                if (isTextNode(c[0]) && isTextNode(last)) {
                    res[lastIndex] = createTextVNode(last.text + c[0].text);
                    c.shift();
                }
                res.push.apply(res, c);
            }
        }
        else if (isPrimitive(c)) {
            if (isTextNode(last)) {
                // merge adjacent text nodes
                // this is necessary for SSR hydration because text nodes are
                // essentially merged when rendered to HTML strings
                res[lastIndex] = createTextVNode(last.text + c);
            }
            else if (c !== '') {
                // convert primitive to vnode
                res.push(createTextVNode(c));
            }
        }
        else {
            if (isTextNode(c) && isTextNode(last)) {
                // merge adjacent text nodes
                res[lastIndex] = createTextVNode(last.text + c.text);
            }
            else {
                // default key for nested array children (likely generated by v-for)
                if (isTrue(children._isVList) &&
                    isDef(c.tag) &&
                    isUndef(c.key) &&
                    isDef(nestedIndex)) {
                    c.key = `__vlist${nestedIndex}_${i}__`;
                }
                res.push(c);
            }
        }
    }
    return res;
}

const SIMPLE_NORMALIZE = 1;
const ALWAYS_NORMALIZE = 2;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
    if (isArray(data) || isPrimitive(data)) {
        normalizationType = children;
        children = data;
        data = undefined;
    }
    if (isTrue(alwaysNormalize)) {
        normalizationType = ALWAYS_NORMALIZE;
    }
    return _createElement(context, tag, data, children, normalizationType);
}
function _createElement(context, tag, data, children, normalizationType) {
    if (isDef(data) && isDef(data.__ob__)) {
        warn$2(`Avoid using observed data object as vnode data: ${JSON.stringify(data)}\n` + 'Always create fresh vnode data objects in each render!', context);
        return createEmptyVNode();
    }
    // object syntax in v-bind
    if (isDef(data) && isDef(data.is)) {
        tag = data.is;
    }
    if (!tag) {
        // in case of component :is set to falsy value
        return createEmptyVNode();
    }
    // warn against non-primitive key
    if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
        warn$2('Avoid using non-primitive value as key, ' +
            'use string/number value instead.', context);
    }
    // support single function children as default scoped slot
    if (isArray(children) && isFunction(children[0])) {
        data = data || {};
        data.scopedSlots = { default: children[0] };
        children.length = 0;
    }
    if (normalizationType === ALWAYS_NORMALIZE) {
        children = normalizeChildren(children);
    }
    else if (normalizationType === SIMPLE_NORMALIZE) {
        children = simpleNormalizeChildren(children);
    }
    let vnode, ns;
    if (typeof tag === 'string') {
        let Ctor;
        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
        if (config.isReservedTag(tag)) {
            // platform built-in elements
            if (isDef(data) &&
                isDef(data.nativeOn) &&
                data.tag !== 'component') {
                warn$2(`The .native modifier for v-on is only valid on components but it was used on <${tag}>.`, context);
            }
            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
        }
        else if ((!data || !data.pre) &&
            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
            // component
            vnode = createComponent(Ctor, data, context, children, tag);
        }
        else {
            // unknown or unlisted namespaced elements
            // check at runtime because it may get assigned a namespace when its
            // parent normalizes children
            vnode = new VNode(tag, data, children, undefined, undefined, context);
        }
    }
    else {
        // direct component options / constructor
        vnode = createComponent(tag, data, context, children);
    }
    if (isArray(vnode)) {
        return vnode;
    }
    else if (isDef(vnode)) {
        if (isDef(ns))
            applyNS(vnode, ns);
        if (isDef(data))
            registerDeepBindings(data);
        return vnode;
    }
    else {
        return createEmptyVNode();
    }
}
function applyNS(vnode, ns, force) {
    vnode.ns = ns;
    if (vnode.tag === 'foreignObject') {
        // use default namespace inside foreignObject
        ns = undefined;
        force = true;
    }
    if (isDef(vnode.children)) {
        for (let i = 0, l = vnode.children.length; i < l; i++) {
            const child = vnode.children[i];
            if (isDef(child.tag) &&
                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
                applyNS(child, ns, force);
            }
        }
    }
}
// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings(data) {
    if (isObject(data.style)) {
        traverse(data.style);
    }
    if (isObject(data.class)) {
        traverse(data.class);
    }
}

/**
 * Runtime helper for rendering v-for lists.
 */
function renderList(val, render) {
    let ret = null, i, l, keys, key;
    if (isArray(val) || typeof val === 'string') {
        ret = new Array(val.length);
        for (i = 0, l = val.length; i < l; i++) {
            ret[i] = render(val[i], i);
        }
    }
    else if (typeof val === 'number') {
        ret = new Array(val);
        for (i = 0; i < val; i++) {
            ret[i] = render(i + 1, i);
        }
    }
    else if (isObject(val)) {
        if (hasSymbol && val[Symbol.iterator]) {
            ret = [];
            const iterator = val[Symbol.iterator]();
            let result = iterator.next();
            while (!result.done) {
                ret.push(render(result.value, ret.length));
                result = iterator.next();
            }
        }
        else {
            keys = Object.keys(val);
            ret = new Array(keys.length);
            for (i = 0, l = keys.length; i < l; i++) {
                key = keys[i];
                ret[i] = render(val[key], key, i);
            }
        }
    }
    if (!isDef(ret)) {
        ret = [];
    }
    ret._isVList = true;
    return ret;
}

/**
 * Runtime helper for rendering <slot>
 */
function renderSlot(name, fallbackRender, props, bindObject) {
    const scopedSlotFn = this.$scopedSlots[name];
    let nodes;
    if (scopedSlotFn) {
        // scoped slot
        props = props || {};
        if (bindObject) {
            if (!isObject(bindObject)) {
                warn$2('slot v-bind without argument expects an Object', this);
            }
            props = extend(extend({}, bindObject), props);
        }
        nodes =
            scopedSlotFn(props) ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    else {
        nodes =
            this.$slots[name] ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    const target = props && props.slot;
    if (target) {
        return this.$createElement('template', { slot: target }, nodes);
    }
    else {
        return nodes;
    }
}

/**
 * Runtime helper for resolving filters
 */
function resolveFilter(id) {
    return resolveAsset(this.$options, 'filters', id, true) || identity;
}

function isKeyNotMatch(expect, actual) {
    if (isArray(expect)) {
        return expect.indexOf(actual) === -1;
    }
    else {
        return expect !== actual;
    }
}
/**
 * Runtime helper for checking keyCodes from config.
 * exposed as Vue.prototype._k
 * passing in eventKeyName as last argument separately for backwards compat
 */
function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
    const mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
        return isKeyNotMatch(builtInKeyName, eventKeyName);
    }
    else if (mappedKeyCode) {
        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
    }
    else if (eventKeyName) {
        return hyphenate(eventKeyName) !== key;
    }
    return eventKeyCode === undefined;
}

/**
 * Runtime helper for merging v-bind="object" into a VNode's data.
 */
function bindObjectProps(data, tag, value, asProp, isSync) {
    if (value) {
        if (!isObject(value)) {
            warn$2('v-bind without argument expects an Object or Array value', this);
        }
        else {
            if (isArray(value)) {
                value = toObject(value);
            }
            let hash;
            for (const key in value) {
                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
                    hash = data;
                }
                else {
                    const type = data.attrs && data.attrs.type;
                    hash =
                        asProp || config.mustUseProp(tag, type, key)
                            ? data.domProps || (data.domProps = {})
                            : data.attrs || (data.attrs = {});
                }
                const camelizedKey = camelize(key);
                const hyphenatedKey = hyphenate(key);
                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
                    hash[key] = value[key];
                    if (isSync) {
                        const on = data.on || (data.on = {});
                        on[`update:${key}`] = function ($event) {
                            value[key] = $event;
                        };
                    }
                }
            }
        }
    }
    return data;
}

/**
 * Runtime helper for rendering static trees.
 */
function renderStatic(index, isInFor) {
    const cached = this._staticTrees || (this._staticTrees = []);
    let tree = cached[index];
    // if has already-rendered static tree and not inside v-for,
    // we can reuse the same tree.
    if (tree && !isInFor) {
        return tree;
    }
    // otherwise, render a fresh tree.
    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
    );
    markStatic$1(tree, `__static__${index}`, false);
    return tree;
}
/**
 * Runtime helper for v-once.
 * Effectively it means marking the node as static with a unique key.
 */
function markOnce(tree, index, key) {
    markStatic$1(tree, `__once__${index}${key ? `_${key}` : ``}`, true);
    return tree;
}
function markStatic$1(tree, key, isOnce) {
    if (isArray(tree)) {
        for (let i = 0; i < tree.length; i++) {
            if (tree[i] && typeof tree[i] !== 'string') {
                markStaticNode(tree[i], `${key}_${i}`, isOnce);
            }
        }
    }
    else {
        markStaticNode(tree, key, isOnce);
    }
}
function markStaticNode(node, key, isOnce) {
    node.isStatic = true;
    node.key = key;
    node.isOnce = isOnce;
}

function bindObjectListeners(data, value) {
    if (value) {
        if (!isPlainObject(value)) {
            warn$2('v-on without argument expects an Object value', this);
        }
        else {
            const on = (data.on = data.on ? extend({}, data.on) : {});
            for (const key in value) {
                const existing = on[key];
                const ours = value[key];
                on[key] = existing ? [].concat(existing, ours) : ours;
            }
        }
    }
    return data;
}

function resolveScopedSlots(fns, res, 
// the following are added in 2.6
hasDynamicKeys, contentHashKey) {
    res = res || { $stable: !hasDynamicKeys };
    for (let i = 0; i < fns.length; i++) {
        const slot = fns[i];
        if (isArray(slot)) {
            resolveScopedSlots(slot, res, hasDynamicKeys);
        }
        else if (slot) {
            // marker for reverse proxying v-slot without scope on this.$slots
            // @ts-expect-error
            if (slot.proxy) {
                // @ts-expect-error
                slot.fn.proxy = true;
            }
            res[slot.key] = slot.fn;
        }
    }
    if (contentHashKey) {
        res.$key = contentHashKey;
    }
    return res;
}

// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
function bindDynamicKeys(baseObj, values) {
    for (let i = 0; i < values.length; i += 2) {
        const key = values[i];
        if (typeof key === 'string' && key) {
            baseObj[values[i]] = values[i + 1];
        }
        else if (key !== '' && key !== null) {
            // null is a special value for explicitly removing a binding
            warn$2(`Invalid value for dynamic directive argument (expected string or null): ${key}`, this);
        }
    }
    return baseObj;
}
// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
function prependModifier(value, symbol) {
    return typeof value === 'string' ? symbol + value : value;
}

function installRenderHelpers(target) {
    target._o = markOnce;
    target._n = toNumber;
    target._s = toString;
    target._l = renderList;
    target._t = renderSlot;
    target._q = looseEqual;
    target._i = looseIndexOf;
    target._m = renderStatic;
    target._f = resolveFilter;
    target._k = checkKeyCodes;
    target._b = bindObjectProps;
    target._v = createTextVNode;
    target._e = createEmptyVNode;
    target._u = resolveScopedSlots;
    target._g = bindObjectListeners;
    target._d = bindDynamicKeys;
    target._p = prependModifier;
}

/**
 * Runtime helper for resolving raw children VNodes into a slot object.
 */
function resolveSlots(children, context) {
    if (!children || !children.length) {
        return {};
    }
    const slots = {};
    for (let i = 0, l = children.length; i < l; i++) {
        const child = children[i];
        const data = child.data;
        // remove slot attribute if the node is resolved as a Vue slot node
        if (data && data.attrs && data.attrs.slot) {
            delete data.attrs.slot;
        }
        // named slots should only be respected if the vnode was rendered in the
        // same context.
        if ((child.context === context || child.fnContext === context) &&
            data &&
            data.slot != null) {
            const name = data.slot;
            const slot = slots[name] || (slots[name] = []);
            if (child.tag === 'template') {
                slot.push.apply(slot, child.children || []);
            }
            else {
                slot.push(child);
            }
        }
        else {
            (slots.default || (slots.default = [])).push(child);
        }
    }
    // ignore slots that contains only whitespace
    for (const name in slots) {
        if (slots[name].every(isWhitespace)) {
            delete slots[name];
        }
    }
    return slots;
}
function isWhitespace(node) {
    return (node.isComment && !node.asyncFactory) || node.text === ' ';
}

function isAsyncPlaceholder(node) {
    // @ts-expect-error not really boolean type
    return node.isComment && node.asyncFactory;
}

function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
    let res;
    const hasNormalSlots = Object.keys(normalSlots).length > 0;
    const isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
    const key = scopedSlots && scopedSlots.$key;
    if (!scopedSlots) {
        res = {};
    }
    else if (scopedSlots._normalized) {
        // fast path 1: child component re-render only, parent did not change
        return scopedSlots._normalized;
    }
    else if (isStable &&
        prevScopedSlots &&
        prevScopedSlots !== emptyObject &&
        key === prevScopedSlots.$key &&
        !hasNormalSlots &&
        !prevScopedSlots.$hasNormal) {
        // fast path 2: stable scoped slots w/ no normal slots to proxy,
        // only need to normalize once
        return prevScopedSlots;
    }
    else {
        res = {};
        for (const key in scopedSlots) {
            if (scopedSlots[key] && key[0] !== '$') {
                res[key] = normalizeScopedSlot(ownerVm, normalSlots, key, scopedSlots[key]);
            }
        }
    }
    // expose normal slots on scopedSlots
    for (const key in normalSlots) {
        if (!(key in res)) {
            res[key] = proxyNormalSlot(normalSlots, key);
        }
    }
    // avoriaz seems to mock a non-extensible $scopedSlots object
    // and when that is passed down this would cause an error
    if (scopedSlots && Object.isExtensible(scopedSlots)) {
        scopedSlots._normalized = res;
    }
    def(res, '$stable', isStable);
    def(res, '$key', key);
    def(res, '$hasNormal', hasNormalSlots);
    return res;
}
function normalizeScopedSlot(vm, normalSlots, key, fn) {
    const normalized = function () {
        const cur = currentInstance;
        setCurrentInstance(vm);
        let res = arguments.length ? fn.apply(null, arguments) : fn({});
        res =
            res && typeof res === 'object' && !isArray(res)
                ? [res] // single vnode
                : normalizeChildren(res);
        const vnode = res && res[0];
        setCurrentInstance(cur);
        return res &&
            (!vnode ||
                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
            ? undefined
            : res;
    };
    // this is a slot using the new v-slot syntax without scope. although it is
    // compiled as a scoped slot, render fn users would expect it to be present
    // on this.$slots because the usage is semantically a normal slot.
    if (fn.proxy) {
        Object.defineProperty(normalSlots, key, {
            get: normalized,
            enumerable: true,
            configurable: true
        });
    }
    return normalized;
}
function proxyNormalSlot(slots, key) {
    return () => slots[key];
}

function initSetup(vm) {
    const options = vm.$options;
    const setup = options.setup;
    if (setup) {
        const ctx = (vm._setupContext = createSetupContext(vm));
        setCurrentInstance(vm);
        pushTarget();
        const setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, `setup`);
        popTarget();
        setCurrentInstance();
        if (isFunction(setupResult)) {
            // render function
            // @ts-ignore
            options.render = setupResult;
        }
        else if (isObject(setupResult)) {
            // bindings
            if (setupResult instanceof VNode) {
                warn$2(`setup() should not return VNodes directly - ` +
                    `return a render function instead.`);
            }
            vm._setupState = setupResult;
            // __sfc indicates compiled bindings from <script setup>
            if (!setupResult.__sfc) {
                for (const key in setupResult) {
                    if (!isReserved(key)) {
                        proxyWithRefUnwrap(vm, setupResult, key);
                    }
                    else {
                        warn$2(`Avoid using variables that start with _ or $ in setup().`);
                    }
                }
            }
            else {
                // exposed for compiled render fn
                const proxy = (vm._setupProxy = {});
                for (const key in setupResult) {
                    if (key !== '__sfc') {
                        proxyWithRefUnwrap(proxy, setupResult, key);
                    }
                }
            }
        }
        else if (setupResult !== undefined) {
            warn$2(`setup() should return an object. Received: ${setupResult === null ? 'null' : typeof setupResult}`);
        }
    }
}
function createSetupContext(vm) {
    let exposeCalled = false;
    return {
        get attrs() {
            if (!vm._attrsProxy) {
                const proxy = (vm._attrsProxy = {});
                def(proxy, '_v_attr_proxy', true);
                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
            }
            return vm._attrsProxy;
        },
        get listeners() {
            if (!vm._listenersProxy) {
                const proxy = (vm._listenersProxy = {});
                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
            }
            return vm._listenersProxy;
        },
        get slots() {
            return initSlotsProxy(vm);
        },
        emit: bind$1(vm.$emit, vm),
        expose(exposed) {
            {
                if (exposeCalled) {
                    warn$2(`expose() should be called only once per setup().`, vm);
                }
                exposeCalled = true;
            }
            if (exposed) {
                Object.keys(exposed).forEach(key => proxyWithRefUnwrap(vm, exposed, key));
            }
        }
    };
}
function syncSetupProxy(to, from, prev, instance, type) {
    let changed = false;
    for (const key in from) {
        if (!(key in to)) {
            changed = true;
            defineProxyAttr(to, key, instance, type);
        }
        else if (from[key] !== prev[key]) {
            changed = true;
        }
    }
    for (const key in to) {
        if (!(key in from)) {
            changed = true;
            delete to[key];
        }
    }
    return changed;
}
function defineProxyAttr(proxy, key, instance, type) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get() {
            return instance[type][key];
        }
    });
}
function initSlotsProxy(vm) {
    if (!vm._slotsProxy) {
        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
    }
    return vm._slotsProxy;
}
function syncSetupSlots(to, from) {
    for (const key in from) {
        to[key] = from[key];
    }
    for (const key in to) {
        if (!(key in from)) {
            delete to[key];
        }
    }
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useSlots() {
    return getContext().slots;
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useAttrs() {
    return getContext().attrs;
}
/**
 * Vue 2 only
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useListeners() {
    return getContext().listeners;
}
function getContext() {
    if (!currentInstance) {
        warn$2(`useContext() called without active instance.`);
    }
    const vm = currentInstance;
    return vm._setupContext || (vm._setupContext = createSetupContext(vm));
}
/**
 * Runtime helper for merging default declarations. Imported by compiled code
 * only.
 * @internal
 */
function mergeDefaults(raw, defaults) {
    const props = isArray(raw)
        ? raw.reduce((normalized, p) => ((normalized[p] = {}), normalized), {})
        : raw;
    for (const key in defaults) {
        const opt = props[key];
        if (opt) {
            if (isArray(opt) || isFunction(opt)) {
                props[key] = { type: opt, default: defaults[key] };
            }
            else {
                opt.default = defaults[key];
            }
        }
        else if (opt === null) {
            props[key] = { default: defaults[key] };
        }
        else {
            warn$2(`props default key "${key}" has no corresponding declaration.`);
        }
    }
    return props;
}

function initRender(vm) {
    vm._vnode = null; // the root of the child tree
    vm._staticTrees = null; // v-once cached trees
    const options = vm.$options;
    const parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
    const renderContext = parentVnode && parentVnode.context;
    vm.$slots = resolveSlots(options._renderChildren, renderContext);
    vm.$scopedSlots = parentVnode
        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
        : emptyObject;
    // bind the createElement fn to this instance
    // so that we get proper render context inside it.
    // args order: tag, data, children, normalizationType, alwaysNormalize
    // internal version is used by render functions compiled from templates
    // @ts-expect-error
    vm._c = (a, b, c, d) => createElement$1(vm, a, b, c, d, false);
    // normalization is always applied for the public version, used in
    // user-written render functions.
    // @ts-expect-error
    vm.$createElement = (a, b, c, d) => createElement$1(vm, a, b, c, d, true);
    // $attrs & $listeners are exposed for easier HOC creation.
    // they need to be reactive so that HOCs using them are always updated
    const parentData = parentVnode && parentVnode.data;
    /* istanbul ignore else */
    {
        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, () => {
            !isUpdatingChildComponent && warn$2(`$attrs is readonly.`, vm);
        }, true);
        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, () => {
            !isUpdatingChildComponent && warn$2(`$listeners is readonly.`, vm);
        }, true);
    }
}
let currentRenderingInstance = null;
function renderMixin(Vue) {
    // install runtime convenience helpers
    installRenderHelpers(Vue.prototype);
    Vue.prototype.$nextTick = function (fn) {
        return nextTick(fn, this);
    };
    Vue.prototype._render = function () {
        const vm = this;
        const { render, _parentVnode } = vm.$options;
        if (_parentVnode && vm._isMounted) {
            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
            if (vm._slotsProxy) {
                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
            }
        }
        // set parent vnode. this allows render functions to have access
        // to the data on the placeholder node.
        vm.$vnode = _parentVnode;
        // render self
        let vnode;
        try {
            // There's no need to maintain a stack because all render fns are called
            // separately from one another. Nested component's render fns are called
            // when parent component is patched.
            setCurrentInstance(vm);
            currentRenderingInstance = vm;
            vnode = render.call(vm._renderProxy, vm.$createElement);
        }
        catch (e) {
            handleError(e, vm, `render`);
            // return error render result,
            // or previous vnode to prevent render error causing blank component
            /* istanbul ignore else */
            if (vm.$options.renderError) {
                try {
                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
                }
                catch (e) {
                    handleError(e, vm, `renderError`);
                    vnode = vm._vnode;
                }
            }
            else {
                vnode = vm._vnode;
            }
        }
        finally {
            currentRenderingInstance = null;
            setCurrentInstance();
        }
        // if the returned array contains only a single node, allow it
        if (isArray(vnode) && vnode.length === 1) {
            vnode = vnode[0];
        }
        // return empty vnode in case the render function errored out
        if (!(vnode instanceof VNode)) {
            if (isArray(vnode)) {
                warn$2('Multiple root nodes returned from render function. Render function ' +
                    'should return a single root node.', vm);
            }
            vnode = createEmptyVNode();
        }
        // set parent
        vnode.parent = _parentVnode;
        return vnode;
    };
}

function ensureCtor(comp, base) {
    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
        comp = comp.default;
    }
    return isObject(comp) ? base.extend(comp) : comp;
}
function createAsyncPlaceholder(factory, data, context, children, tag) {
    const node = createEmptyVNode();
    node.asyncFactory = factory;
    node.asyncMeta = { data, context, children, tag };
    return node;
}
function resolveAsyncComponent(factory, baseCtor) {
    if (isTrue(factory.error) && isDef(factory.errorComp)) {
        return factory.errorComp;
    }
    if (isDef(factory.resolved)) {
        return factory.resolved;
    }
    const owner = currentRenderingInstance;
    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
        // already pending
        factory.owners.push(owner);
    }
    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
        return factory.loadingComp;
    }
    if (owner && !isDef(factory.owners)) {
        const owners = (factory.owners = [owner]);
        let sync = true;
        let timerLoading = null;
        let timerTimeout = null;
        owner.$on('hook:destroyed', () => remove$2(owners, owner));
        const forceRender = (renderCompleted) => {
            for (let i = 0, l = owners.length; i < l; i++) {
                owners[i].$forceUpdate();
            }
            if (renderCompleted) {
                owners.length = 0;
                if (timerLoading !== null) {
                    clearTimeout(timerLoading);
                    timerLoading = null;
                }
                if (timerTimeout !== null) {
                    clearTimeout(timerTimeout);
                    timerTimeout = null;
                }
            }
        };
        const resolve = once((res) => {
            // cache resolved
            factory.resolved = ensureCtor(res, baseCtor);
            // invoke callbacks only if this is not a synchronous resolve
            // (async resolves are shimmed as synchronous during SSR)
            if (!sync) {
                forceRender(true);
            }
            else {
                owners.length = 0;
            }
        });
        const reject = once(reason => {
            warn$2(`Failed to resolve async component: ${String(factory)}` +
                    (reason ? `\nReason: ${reason}` : ''));
            if (isDef(factory.errorComp)) {
                factory.error = true;
                forceRender(true);
            }
        });
        const res = factory(resolve, reject);
        if (isObject(res)) {
            if (isPromise(res)) {
                // () => Promise
                if (isUndef(factory.resolved)) {
                    res.then(resolve, reject);
                }
            }
            else if (isPromise(res.component)) {
                res.component.then(resolve, reject);
                if (isDef(res.error)) {
                    factory.errorComp = ensureCtor(res.error, baseCtor);
                }
                if (isDef(res.loading)) {
                    factory.loadingComp = ensureCtor(res.loading, baseCtor);
                    if (res.delay === 0) {
                        factory.loading = true;
                    }
                    else {
                        // @ts-expect-error NodeJS timeout type
                        timerLoading = setTimeout(() => {
                            timerLoading = null;
                            if (isUndef(factory.resolved) && isUndef(factory.error)) {
                                factory.loading = true;
                                forceRender(false);
                            }
                        }, res.delay || 200);
                    }
                }
                if (isDef(res.timeout)) {
                    // @ts-expect-error NodeJS timeout type
                    timerTimeout = setTimeout(() => {
                        timerTimeout = null;
                        if (isUndef(factory.resolved)) {
                            reject(`timeout (${res.timeout}ms)` );
                        }
                    }, res.timeout);
                }
            }
        }
        sync = false;
        // return in case resolved synchronously
        return factory.loading ? factory.loadingComp : factory.resolved;
    }
}

function getFirstComponentChild(children) {
    if (isArray(children)) {
        for (let i = 0; i < children.length; i++) {
            const c = children[i];
            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
                return c;
            }
        }
    }
}

function initEvents(vm) {
    vm._events = Object.create(null);
    vm._hasHookEvent = false;
    // init parent attached events
    const listeners = vm.$options._parentListeners;
    if (listeners) {
        updateComponentListeners(vm, listeners);
    }
}
let target$1;
function add$1(event, fn) {
    target$1.$on(event, fn);
}
function remove$1(event, fn) {
    target$1.$off(event, fn);
}
function createOnceHandler$1(event, fn) {
    const _target = target$1;
    return function onceHandler() {
        const res = fn.apply(null, arguments);
        if (res !== null) {
            _target.$off(event, onceHandler);
        }
    };
}
function updateComponentListeners(vm, listeners, oldListeners) {
    target$1 = vm;
    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
    target$1 = undefined;
}
function eventsMixin(Vue) {
    const hookRE = /^hook:/;
    Vue.prototype.$on = function (event, fn) {
        const vm = this;
        if (isArray(event)) {
            for (let i = 0, l = event.length; i < l; i++) {
                vm.$on(event[i], fn);
            }
        }
        else {
            (vm._events[event] || (vm._events[event] = [])).push(fn);
            // optimize hook:event cost by using a boolean flag marked at registration
            // instead of a hash lookup
            if (hookRE.test(event)) {
                vm._hasHookEvent = true;
            }
        }
        return vm;
    };
    Vue.prototype.$once = function (event, fn) {
        const vm = this;
        function on() {
            vm.$off(event, on);
            fn.apply(vm, arguments);
        }
        on.fn = fn;
        vm.$on(event, on);
        return vm;
    };
    Vue.prototype.$off = function (event, fn) {
        const vm = this;
        // all
        if (!arguments.length) {
            vm._events = Object.create(null);
            return vm;
        }
        // array of events
        if (isArray(event)) {
            for (let i = 0, l = event.length; i < l; i++) {
                vm.$off(event[i], fn);
            }
            return vm;
        }
        // specific event
        const cbs = vm._events[event];
        if (!cbs) {
            return vm;
        }
        if (!fn) {
            vm._events[event] = null;
            return vm;
        }
        // specific handler
        let cb;
        let i = cbs.length;
        while (i--) {
            cb = cbs[i];
            if (cb === fn || cb.fn === fn) {
                cbs.splice(i, 1);
                break;
            }
        }
        return vm;
    };
    Vue.prototype.$emit = function (event) {
        const vm = this;
        {
            const lowerCaseEvent = event.toLowerCase();
            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
                tip(`Event "${lowerCaseEvent}" is emitted in component ` +
                    `${formatComponentName(vm)} but the handler is registered for "${event}". ` +
                    `Note that HTML attributes are case-insensitive and you cannot use ` +
                    `v-on to listen to camelCase events when using in-DOM templates. ` +
                    `You should probably use "${hyphenate(event)}" instead of "${event}".`);
            }
        }
        let cbs = vm._events[event];
        if (cbs) {
            cbs = cbs.length > 1 ? toArray(cbs) : cbs;
            const args = toArray(arguments, 1);
            const info = `event handler for "${event}"`;
            for (let i = 0, l = cbs.length; i < l; i++) {
                invokeWithErrorHandling(cbs[i], vm, args, vm, info);
            }
        }
        return vm;
    };
}

let activeInstance = null;
let isUpdatingChildComponent = false;
function setActiveInstance(vm) {
    const prevActiveInstance = activeInstance;
    activeInstance = vm;
    return () => {
        activeInstance = prevActiveInstance;
    };
}
function initLifecycle(vm) {
    const options = vm.$options;
    // locate first non-abstract parent
    let parent = options.parent;
    if (parent && !options.abstract) {
        while (parent.$options.abstract && parent.$parent) {
            parent = parent.$parent;
        }
        parent.$children.push(vm);
    }
    vm.$parent = parent;
    vm.$root = parent ? parent.$root : vm;
    vm.$children = [];
    vm.$refs = {};
    vm._provided = parent ? parent._provided : Object.create(null);
    vm._watcher = null;
    vm._inactive = null;
    vm._directInactive = false;
    vm._isMounted = false;
    vm._isDestroyed = false;
    vm._isBeingDestroyed = false;
}
function lifecycleMixin(Vue) {
    Vue.prototype._update = function (vnode, hydrating) {
        const vm = this;
        const prevEl = vm.$el;
        const prevVnode = vm._vnode;
        const restoreActiveInstance = setActiveInstance(vm);
        vm._vnode = vnode;
        // Vue.prototype.__patch__ is injected in entry points
        // based on the rendering backend used.
        if (!prevVnode) {
            // initial render
            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
        }
        else {
            // updates
            vm.$el = vm.__patch__(prevVnode, vnode);
        }
        restoreActiveInstance();
        // update __vue__ reference
        if (prevEl) {
            prevEl.__vue__ = null;
        }
        if (vm.$el) {
            vm.$el.__vue__ = vm;
        }
        // if parent is an HOC, update its $el as well
        let wrapper = vm;
        while (wrapper &&
            wrapper.$vnode &&
            wrapper.$parent &&
            wrapper.$vnode === wrapper.$parent._vnode) {
            wrapper.$parent.$el = wrapper.$el;
            wrapper = wrapper.$parent;
        }
        // updated hook is called by the scheduler to ensure that children are
        // updated in a parent's updated hook.
    };
    Vue.prototype.$forceUpdate = function () {
        const vm = this;
        if (vm._watcher) {
            vm._watcher.update();
        }
    };
    Vue.prototype.$destroy = function () {
        const vm = this;
        if (vm._isBeingDestroyed) {
            return;
        }
        callHook$1(vm, 'beforeDestroy');
        vm._isBeingDestroyed = true;
        // remove self from parent
        const parent = vm.$parent;
        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
            remove$2(parent.$children, vm);
        }
        // teardown scope. this includes both the render watcher and other
        // watchers created
        vm._scope.stop();
        // remove reference from data ob
        // frozen object may not have observer.
        if (vm._data.__ob__) {
            vm._data.__ob__.vmCount--;
        }
        // call the last hook...
        vm._isDestroyed = true;
        // invoke destroy hooks on current rendered tree
        vm.__patch__(vm._vnode, null);
        // fire destroyed hook
        callHook$1(vm, 'destroyed');
        // turn off all instance listeners.
        vm.$off();
        // remove __vue__ reference
        if (vm.$el) {
            vm.$el.__vue__ = null;
        }
        // release circular reference (#6759)
        if (vm.$vnode) {
            vm.$vnode.parent = null;
        }
    };
}
function mountComponent(vm, el, hydrating) {
    vm.$el = el;
    if (!vm.$options.render) {
        // @ts-expect-error invalid type
        vm.$options.render = createEmptyVNode;
        {
            /* istanbul ignore if */
            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
                vm.$options.el ||
                el) {
                warn$2('You are using the runtime-only build of Vue where the template ' +
                    'compiler is not available. Either pre-compile the templates into ' +
                    'render functions, or use the compiler-included build.', vm);
            }
            else {
                warn$2('Failed to mount component: template or render function not defined.', vm);
            }
        }
    }
    callHook$1(vm, 'beforeMount');
    let updateComponent;
    /* istanbul ignore if */
    if (config.performance && mark) {
        updateComponent = () => {
            const name = vm._name;
            const id = vm._uid;
            const startTag = `vue-perf-start:${id}`;
            const endTag = `vue-perf-end:${id}`;
            mark(startTag);
            const vnode = vm._render();
            mark(endTag);
            measure(`vue ${name} render`, startTag, endTag);
            mark(startTag);
            vm._update(vnode, hydrating);
            mark(endTag);
            measure(`vue ${name} patch`, startTag, endTag);
        };
    }
    else {
        updateComponent = () => {
            vm._update(vm._render(), hydrating);
        };
    }
    const watcherOptions = {
        before() {
            if (vm._isMounted && !vm._isDestroyed) {
                callHook$1(vm, 'beforeUpdate');
            }
        }
    };
    {
        watcherOptions.onTrack = e => callHook$1(vm, 'renderTracked', [e]);
        watcherOptions.onTrigger = e => callHook$1(vm, 'renderTriggered', [e]);
    }
    // we set this to vm._watcher inside the watcher's constructor
    // since the watcher's initial patch may call $forceUpdate (e.g. inside child
    // component's mounted hook), which relies on vm._watcher being already defined
    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
    hydrating = false;
    // flush buffer for flush: "pre" watchers queued in setup()
    const preWatchers = vm._preWatchers;
    if (preWatchers) {
        for (let i = 0; i < preWatchers.length; i++) {
            preWatchers[i].run();
        }
    }
    // manually mounted instance, call mounted on self
    // mounted is called for render-created child components in its inserted hook
    if (vm.$vnode == null) {
        vm._isMounted = true;
        callHook$1(vm, 'mounted');
    }
    return vm;
}
function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
    {
        isUpdatingChildComponent = true;
    }
    // determine whether component has slot children
    // we need to do this before overwriting $options._renderChildren.
    // check if there are dynamic scopedSlots (hand-written or compiled but with
    // dynamic slot names). Static scoped slots compiled from template has the
    // "$stable" marker.
    const newScopedSlots = parentVnode.data.scopedSlots;
    const oldScopedSlots = vm.$scopedSlots;
    const hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
        (!newScopedSlots && vm.$scopedSlots.$key));
    // Any static slot children from the parent may have changed during parent's
    // update. Dynamic scoped slots may also have changed. In such cases, a forced
    // update is necessary to ensure correctness.
    let needsForceUpdate = !!(renderChildren || // has new static slots
        vm.$options._renderChildren || // has old static slots
        hasDynamicScopedSlot);
    const prevVNode = vm.$vnode;
    vm.$options._parentVnode = parentVnode;
    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
    if (vm._vnode) {
        // update child tree's parent
        vm._vnode.parent = parentVnode;
    }
    vm.$options._renderChildren = renderChildren;
    // update $attrs and $listeners hash
    // these are also reactive so they may trigger child update if the child
    // used them during render
    const attrs = parentVnode.data.attrs || emptyObject;
    if (vm._attrsProxy) {
        // force update if attrs are accessed and has changed since it may be
        // passed to a child component.
        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
            needsForceUpdate = true;
        }
    }
    vm.$attrs = attrs;
    // update listeners
    listeners = listeners || emptyObject;
    const prevListeners = vm.$options._parentListeners;
    if (vm._listenersProxy) {
        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
    }
    vm.$listeners = vm.$options._parentListeners = listeners;
    updateComponentListeners(vm, listeners, prevListeners);
    // update props
    if (propsData && vm.$options.props) {
        toggleObserving(false);
        const props = vm._props;
        const propKeys = vm.$options._propKeys || [];
        for (let i = 0; i < propKeys.length; i++) {
            const key = propKeys[i];
            const propOptions = vm.$options.props; // wtf flow?
            props[key] = validateProp(key, propOptions, propsData, vm);
        }
        toggleObserving(true);
        // keep a copy of raw propsData
        vm.$options.propsData = propsData;
    }
    // resolve slots + force update if has children
    if (needsForceUpdate) {
        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
        vm.$forceUpdate();
    }
    {
        isUpdatingChildComponent = false;
    }
}
function isInInactiveTree(vm) {
    while (vm && (vm = vm.$parent)) {
        if (vm._inactive)
            return true;
    }
    return false;
}
function activateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = false;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    else if (vm._directInactive) {
        return;
    }
    if (vm._inactive || vm._inactive === null) {
        vm._inactive = false;
        for (let i = 0; i < vm.$children.length; i++) {
            activateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'activated');
    }
}
function deactivateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = true;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    if (!vm._inactive) {
        vm._inactive = true;
        for (let i = 0; i < vm.$children.length; i++) {
            deactivateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'deactivated');
    }
}
function callHook$1(vm, hook, args, setContext = true) {
    // #7573 disable dep collection when invoking lifecycle hooks
    pushTarget();
    const prev = currentInstance;
    setContext && setCurrentInstance(vm);
    const handlers = vm.$options[hook];
    const info = `${hook} hook`;
    if (handlers) {
        for (let i = 0, j = handlers.length; i < j; i++) {
            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
        }
    }
    if (vm._hasHookEvent) {
        vm.$emit('hook:' + hook);
    }
    setContext && setCurrentInstance(prev);
    popTarget();
}

const MAX_UPDATE_COUNT = 100;
const queue = [];
const activatedChildren = [];
let has = {};
let circular = {};
let waiting = false;
let flushing = false;
let index$1 = 0;
/**
 * Reset the scheduler's state.
 */
function resetSchedulerState() {
    index$1 = queue.length = activatedChildren.length = 0;
    has = {};
    {
        circular = {};
    }
    waiting = flushing = false;
}
// Async edge case #6566 requires saving the timestamp when event listeners are
// attached. However, calling performance.now() has a perf overhead especially
// if the page has thousands of event listeners. Instead, we take a timestamp
// every time the scheduler flushes and use that for all event listeners
// attached during that flush.
let currentFlushTimestamp = 0;
// Async edge case fix requires storing an event listener's attach timestamp.
let getNow = Date.now;
// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if (inBrowser && !isIE) {
    const performance = window.performance;
    if (performance &&
        typeof performance.now === 'function' &&
        getNow() > document.createEvent('Event').timeStamp) {
        // if the event timestamp, although evaluated AFTER the Date.now(), is
        // smaller than it, it means the event is using a hi-res timestamp,
        // and we need to use the hi-res version for event listener timestamps as
        // well.
        getNow = () => performance.now();
    }
}
const sortCompareFn = (a, b) => {
    if (a.post) {
        if (!b.post)
            return 1;
    }
    else if (b.post) {
        return -1;
    }
    return a.id - b.id;
};
/**
 * Flush both queues and run the watchers.
 */
function flushSchedulerQueue() {
    currentFlushTimestamp = getNow();
    flushing = true;
    let watcher, id;
    // Sort queue before flush.
    // This ensures that:
    // 1. Components are updated from parent to child. (because parent is always
    //    created before the child)
    // 2. A component's user watchers are run before its render watcher (because
    //    user watchers are created before the render watcher)
    // 3. If a component is destroyed during a parent component's watcher run,
    //    its watchers can be skipped.
    queue.sort(sortCompareFn);
    // do not cache length because more watchers might be pushed
    // as we run existing watchers
    for (index$1 = 0; index$1 < queue.length; index$1++) {
        watcher = queue[index$1];
        if (watcher.before) {
            watcher.before();
        }
        id = watcher.id;
        has[id] = null;
        watcher.run();
        // in dev build, check and stop circular updates.
        if (has[id] != null) {
            circular[id] = (circular[id] || 0) + 1;
            if (circular[id] > MAX_UPDATE_COUNT) {
                warn$2('You may have an infinite update loop ' +
                    (watcher.user
                        ? `in watcher with expression "${watcher.expression}"`
                        : `in a component render function.`), watcher.vm);
                break;
            }
        }
    }
    // keep copies of post queues before resetting state
    const activatedQueue = activatedChildren.slice();
    const updatedQueue = queue.slice();
    resetSchedulerState();
    // call component updated and activated hooks
    callActivatedHooks(activatedQueue);
    callUpdatedHooks(updatedQueue);
    cleanupDeps();
    // devtool hook
    /* istanbul ignore if */
    if (devtools && config.devtools) {
        devtools.emit('flush');
    }
}
function callUpdatedHooks(queue) {
    let i = queue.length;
    while (i--) {
        const watcher = queue[i];
        const vm = watcher.vm;
        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
            callHook$1(vm, 'updated');
        }
    }
}
/**
 * Queue a kept-alive component that was activated during patch.
 * The queue will be processed after the entire tree has been patched.
 */
function queueActivatedComponent(vm) {
    // setting _inactive to false here so that a render function can
    // rely on checking whether it's in an inactive tree (e.g. router-view)
    vm._inactive = false;
    activatedChildren.push(vm);
}
function callActivatedHooks(queue) {
    for (let i = 0; i < queue.length; i++) {
        queue[i]._inactive = true;
        activateChildComponent(queue[i], true /* true */);
    }
}
/**
 * Push a watcher into the watcher queue.
 * Jobs with duplicate IDs will be skipped unless it's
 * pushed when the queue is being flushed.
 */
function queueWatcher(watcher) {
    const id = watcher.id;
    if (has[id] != null) {
        return;
    }
    if (watcher === Dep.target && watcher.noRecurse) {
        return;
    }
    has[id] = true;
    if (!flushing) {
        queue.push(watcher);
    }
    else {
        // if already flushing, splice the watcher based on its id
        // if already past its id, it will be run next immediately.
        let i = queue.length - 1;
        while (i > index$1 && queue[i].id > watcher.id) {
            i--;
        }
        queue.splice(i + 1, 0, watcher);
    }
    // queue the flush
    if (!waiting) {
        waiting = true;
        if (!config.async) {
            flushSchedulerQueue();
            return;
        }
        nextTick(flushSchedulerQueue);
    }
}

const WATCHER = `watcher`;
const WATCHER_CB = `${WATCHER} callback`;
const WATCHER_GETTER = `${WATCHER} getter`;
const WATCHER_CLEANUP = `${WATCHER} cleanup`;
// Simple effect.
function watchEffect(effect, options) {
    return doWatch(effect, null, options);
}
function watchPostEffect(effect, options) {
    return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'post' }) ));
}
function watchSyncEffect(effect, options) {
    return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'sync' }) ));
}
// initial value for watchers to trigger on undefined initial values
const INITIAL_WATCHER_VALUE = {};
// implementation
function watch(source, cb, options) {
    if (typeof cb !== 'function') {
        warn$2(`\`watch(fn, options?)\` signature has been moved to a separate API. ` +
            `Use \`watchEffect(fn, options?)\` instead. \`watch\` now only ` +
            `supports \`watch(source, cb, options?) signature.`);
    }
    return doWatch(source, cb, options);
}
function doWatch(source, cb, { immediate, deep, flush = 'pre', onTrack, onTrigger } = emptyObject) {
    if (!cb) {
        if (immediate !== undefined) {
            warn$2(`watch() "immediate" option is only respected when using the ` +
                `watch(source, callback, options?) signature.`);
        }
        if (deep !== undefined) {
            warn$2(`watch() "deep" option is only respected when using the ` +
                `watch(source, callback, options?) signature.`);
        }
    }
    const warnInvalidSource = (s) => {
        warn$2(`Invalid watch source: ${s}. A watch source can only be a getter/effect ` +
            `function, a ref, a reactive object, or an array of these types.`);
    };
    const instance = currentInstance;
    const call = (fn, type, args = null) => invokeWithErrorHandling(fn, null, args, instance, type);
    let getter;
    let forceTrigger = false;
    let isMultiSource = false;
    if (isRef(source)) {
        getter = () => source.value;
        forceTrigger = isShallow(source);
    }
    else if (isReactive(source)) {
        getter = () => {
            source.__ob__.dep.depend();
            return source;
        };
        deep = true;
    }
    else if (isArray(source)) {
        isMultiSource = true;
        forceTrigger = source.some(s => isReactive(s) || isShallow(s));
        getter = () => source.map(s => {
            if (isRef(s)) {
                return s.value;
            }
            else if (isReactive(s)) {
                return traverse(s);
            }
            else if (isFunction(s)) {
                return call(s, WATCHER_GETTER);
            }
            else {
                warnInvalidSource(s);
            }
        });
    }
    else if (isFunction(source)) {
        if (cb) {
            // getter with cb
            getter = () => call(source, WATCHER_GETTER);
        }
        else {
            // no cb -> simple effect
            getter = () => {
                if (instance && instance._isDestroyed) {
                    return;
                }
                if (cleanup) {
                    cleanup();
                }
                return call(source, WATCHER, [onCleanup]);
            };
        }
    }
    else {
        getter = noop;
        warnInvalidSource(source);
    }
    if (cb && deep) {
        const baseGetter = getter;
        getter = () => traverse(baseGetter());
    }
    let cleanup;
    let onCleanup = (fn) => {
        cleanup = watcher.onStop = () => {
            call(fn, WATCHER_CLEANUP);
        };
    };
    // in SSR there is no need to setup an actual effect, and it should be noop
    // unless it's eager
    if (isServerRendering()) {
        // we will also not call the invalidate callback (+ runner is not set up)
        onCleanup = noop;
        if (!cb) {
            getter();
        }
        else if (immediate) {
            call(cb, WATCHER_CB, [
                getter(),
                isMultiSource ? [] : undefined,
                onCleanup
            ]);
        }
        return noop;
    }
    const watcher = new Watcher(currentInstance, getter, noop, {
        lazy: true
    });
    watcher.noRecurse = !cb;
    let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
    // overwrite default run
    watcher.run = () => {
        if (!watcher.active) {
            return;
        }
        if (cb) {
            // watch(source, cb)
            const newValue = watcher.get();
            if (deep ||
                forceTrigger ||
                (isMultiSource
                    ? newValue.some((v, i) => hasChanged(v, oldValue[i]))
                    : hasChanged(newValue, oldValue))) {
                // cleanup before running cb again
                if (cleanup) {
                    cleanup();
                }
                call(cb, WATCHER_CB, [
                    newValue,
                    // pass undefined as the old value when it's changed for the first time
                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
                    onCleanup
                ]);
                oldValue = newValue;
            }
        }
        else {
            // watchEffect
            watcher.get();
        }
    };
    if (flush === 'sync') {
        watcher.update = watcher.run;
    }
    else if (flush === 'post') {
        watcher.post = true;
        watcher.update = () => queueWatcher(watcher);
    }
    else {
        // pre
        watcher.update = () => {
            if (instance && instance === currentInstance && !instance._isMounted) {
                // pre-watcher triggered before
                const buffer = instance._preWatchers || (instance._preWatchers = []);
                if (buffer.indexOf(watcher) < 0)
                    buffer.push(watcher);
            }
            else {
                queueWatcher(watcher);
            }
        };
    }
    {
        watcher.onTrack = onTrack;
        watcher.onTrigger = onTrigger;
    }
    // initial run
    if (cb) {
        if (immediate) {
            watcher.run();
        }
        else {
            oldValue = watcher.get();
        }
    }
    else if (flush === 'post' && instance) {
        instance.$once('hook:mounted', () => watcher.get());
    }
    else {
        watcher.get();
    }
    return () => {
        watcher.teardown();
    };
}

let activeEffectScope;
class EffectScope {
    constructor(detached = false) {
        this.detached = detached;
        /**
         * @internal
         */
        this.active = true;
        /**
         * @internal
         */
        this.effects = [];
        /**
         * @internal
         */
        this.cleanups = [];
        this.parent = activeEffectScope;
        if (!detached && activeEffectScope) {
            this.index =
                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
        }
    }
    run(fn) {
        if (this.active) {
            const currentEffectScope = activeEffectScope;
            try {
                activeEffectScope = this;
                return fn();
            }
            finally {
                activeEffectScope = currentEffectScope;
            }
        }
        else {
            warn$2(`cannot run an inactive effect scope.`);
        }
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    on() {
        activeEffectScope = this;
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    off() {
        activeEffectScope = this.parent;
    }
    stop(fromParent) {
        if (this.active) {
            let i, l;
            for (i = 0, l = this.effects.length; i < l; i++) {
                this.effects[i].teardown();
            }
            for (i = 0, l = this.cleanups.length; i < l; i++) {
                this.cleanups[i]();
            }
            if (this.scopes) {
                for (i = 0, l = this.scopes.length; i < l; i++) {
                    this.scopes[i].stop(true);
                }
            }
            // nested scope, dereference from parent to avoid memory leaks
            if (!this.detached && this.parent && !fromParent) {
                // optimized O(1) removal
                const last = this.parent.scopes.pop();
                if (last && last !== this) {
                    this.parent.scopes[this.index] = last;
                    last.index = this.index;
                }
            }
            this.parent = undefined;
            this.active = false;
        }
    }
}
function effectScope(detached) {
    return new EffectScope(detached);
}
/**
 * @internal
 */
function recordEffectScope(effect, scope = activeEffectScope) {
    if (scope && scope.active) {
        scope.effects.push(effect);
    }
}
function getCurrentScope() {
    return activeEffectScope;
}
function onScopeDispose(fn) {
    if (activeEffectScope) {
        activeEffectScope.cleanups.push(fn);
    }
    else {
        warn$2(`onScopeDispose() is called when there is no active effect scope` +
            ` to be associated with.`);
    }
}

function provide(key, value) {
    if (!currentInstance) {
        {
            warn$2(`provide() can only be used inside setup().`);
        }
    }
    else {
        // TS doesn't allow symbol as index type
        resolveProvided(currentInstance)[key] = value;
    }
}
function resolveProvided(vm) {
    // by default an instance inherits its parent's provides object
    // but when it needs to provide values of its own, it creates its
    // own provides object using parent provides object as prototype.
    // this way in `inject` we can simply look up injections from direct
    // parent and let the prototype chain do the work.
    const existing = vm._provided;
    const parentProvides = vm.$parent && vm.$parent._provided;
    if (parentProvides === existing) {
        return (vm._provided = Object.create(parentProvides));
    }
    else {
        return existing;
    }
}
function inject(key, defaultValue, treatDefaultAsFactory = false) {
    // fallback to `currentRenderingInstance` so that this can be called in
    // a functional component
    const instance = currentInstance;
    if (instance) {
        // #2400
        // to support `app.use` plugins,
        // fallback to appContext's `provides` if the instance is at root
        const provides = instance.$parent && instance.$parent._provided;
        if (provides && key in provides) {
            // TS doesn't allow symbol as index type
            return provides[key];
        }
        else if (arguments.length > 1) {
            return treatDefaultAsFactory && isFunction(defaultValue)
                ? defaultValue.call(instance)
                : defaultValue;
        }
        else {
            warn$2(`injection "${String(key)}" not found.`);
        }
    }
    else {
        warn$2(`inject() can only be used inside setup() or functional components.`);
    }
}

/**
 * @internal this function needs manual public type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function h(type, props, children) {
    if (!currentInstance) {
        warn$2(`globally imported h() can only be invoked when there is an active ` +
                `component instance, e.g. synchronously in a component's render or setup function.`);
    }
    return createElement$1(currentInstance, type, props, children, 2, true);
}

function handleError(err, vm, info) {
    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
    // See: https://github.com/vuejs/vuex/issues/1505
    pushTarget();
    try {
        if (vm) {
            let cur = vm;
            while ((cur = cur.$parent)) {
                const hooks = cur.$options.errorCaptured;
                if (hooks) {
                    for (let i = 0; i < hooks.length; i++) {
                        try {
                            const capture = hooks[i].call(cur, err, vm, info) === false;
                            if (capture)
                                return;
                        }
                        catch (e) {
                            globalHandleError(e, cur, 'errorCaptured hook');
                        }
                    }
                }
            }
        }
        globalHandleError(err, vm, info);
    }
    finally {
        popTarget();
    }
}
function invokeWithErrorHandling(handler, context, args, vm, info) {
    let res;
    try {
        res = args ? handler.apply(context, args) : handler.call(context);
        if (res && !res._isVue && isPromise(res) && !res._handled) {
            res.catch(e => handleError(e, vm, info + ` (Promise/async)`));
            res._handled = true;
        }
    }
    catch (e) {
        handleError(e, vm, info);
    }
    return res;
}
function globalHandleError(err, vm, info) {
    if (config.errorHandler) {
        try {
            return config.errorHandler.call(null, err, vm, info);
        }
        catch (e) {
            // if the user intentionally throws the original error in the handler,
            // do not log it twice
            if (e !== err) {
                logError(e, null, 'config.errorHandler');
            }
        }
    }
    logError(err, vm, info);
}
function logError(err, vm, info) {
    {
        warn$2(`Error in ${info}: "${err.toString()}"`, vm);
    }
    /* istanbul ignore else */
    if (inBrowser && typeof console !== 'undefined') {
        console.error(err);
    }
    else {
        throw err;
    }
}

/* globals MutationObserver */
let isUsingMicroTask = false;
const callbacks = [];
let pending = false;
function flushCallbacks() {
    pending = false;
    const copies = callbacks.slice(0);
    callbacks.length = 0;
    for (let i = 0; i < copies.length; i++) {
        copies[i]();
    }
}
// Here we have async deferring wrappers using microtasks.
// In 2.5 we used (macro) tasks (in combination with microtasks).
// However, it has subtle problems when state is changed right before repaint
// (e.g. #6813, out-in transitions).
// Also, using (macro) tasks in event handler would cause some weird behaviors
// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
// So we now use microtasks everywhere, again.
// A major drawback of this tradeoff is that there are some scenarios
// where microtasks have too high a priority and fire in between supposedly
// sequential events (e.g. #4521, #6690, which have workarounds)
// or even between bubbling of the same event (#6566).
let timerFunc;
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
    const p = Promise.resolve();
    timerFunc = () => {
        p.then(flushCallbacks);
        // In problematic UIWebViews, Promise.then doesn't completely break, but
        // it can get stuck in a weird state where callbacks are pushed into the
        // microtask queue but the queue isn't being flushed, until the browser
        // needs to do some other work, e.g. handle a timer. Therefore we can
        // "force" the microtask queue to be flushed by adding an empty timer.
        if (isIOS)
            setTimeout(noop);
    };
    isUsingMicroTask = true;
}
else if (!isIE &&
    typeof MutationObserver !== 'undefined' &&
    (isNative(MutationObserver) ||
        // PhantomJS and iOS 7.x
        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
    // Use MutationObserver where native Promise is not available,
    // e.g. PhantomJS, iOS7, Android 4.4
    // (#6466 MutationObserver is unreliable in IE11)
    let counter = 1;
    const observer = new MutationObserver(flushCallbacks);
    const textNode = document.createTextNode(String(counter));
    observer.observe(textNode, {
        characterData: true
    });
    timerFunc = () => {
        counter = (counter + 1) % 2;
        textNode.data = String(counter);
    };
    isUsingMicroTask = true;
}
else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
    // Fallback to setImmediate.
    // Technically it leverages the (macro) task queue,
    // but it is still a better choice than setTimeout.
    timerFunc = () => {
        setImmediate(flushCallbacks);
    };
}
else {
    // Fallback to setTimeout.
    timerFunc = () => {
        setTimeout(flushCallbacks, 0);
    };
}
/**
 * @internal
 */
function nextTick(cb, ctx) {
    let _resolve;
    callbacks.push(() => {
        if (cb) {
            try {
                cb.call(ctx);
            }
            catch (e) {
                handleError(e, ctx, 'nextTick');
            }
        }
        else if (_resolve) {
            _resolve(ctx);
        }
    });
    if (!pending) {
        pending = true;
        timerFunc();
    }
    // $flow-disable-line
    if (!cb && typeof Promise !== 'undefined') {
        return new Promise(resolve => {
            _resolve = resolve;
        });
    }
}

function useCssModule(name = '$style') {
    /* istanbul ignore else */
    {
        {
            warn$2(`useCssModule() is not supported in the global build.`);
        }
        return emptyObject;
    }
}

/**
 * Runtime helper for SFC's CSS variable injection feature.
 * @private
 */
function useCssVars(getter) {
    if (!inBrowser && !false)
        return;
    const instance = currentInstance;
    if (!instance) {
        warn$2(`useCssVars is called without current active component instance.`);
        return;
    }
    watchPostEffect(() => {
        const el = instance.$el;
        const vars = getter(instance, instance._setupProxy);
        if (el && el.nodeType === 1) {
            const style = el.style;
            for (const key in vars) {
                style.setProperty(`--${key}`, vars[key]);
            }
        }
    });
}

/**
 * v3-compatible async component API.
 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
 * because it relies on existing manual types
 */
function defineAsyncComponent(source) {
    if (isFunction(source)) {
        source = { loader: source };
    }
    const { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out
    suspensible = false, // in Vue 3 default is true
    onError: userOnError } = source;
    if (suspensible) {
        warn$2(`The suspensiblbe option for async components is not supported in Vue2. It is ignored.`);
    }
    let pendingRequest = null;
    let retries = 0;
    const retry = () => {
        retries++;
        pendingRequest = null;
        return load();
    };
    const load = () => {
        let thisRequest;
        return (pendingRequest ||
            (thisRequest = pendingRequest =
                loader()
                    .catch(err => {
                    err = err instanceof Error ? err : new Error(String(err));
                    if (userOnError) {
                        return new Promise((resolve, reject) => {
                            const userRetry = () => resolve(retry());
                            const userFail = () => reject(err);
                            userOnError(err, userRetry, userFail, retries + 1);
                        });
                    }
                    else {
                        throw err;
                    }
                })
                    .then((comp) => {
                    if (thisRequest !== pendingRequest && pendingRequest) {
                        return pendingRequest;
                    }
                    if (!comp) {
                        warn$2(`Async component loader resolved to undefined. ` +
                            `If you are using retry(), make sure to return its return value.`);
                    }
                    // interop module default
                    if (comp &&
                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
                        comp = comp.default;
                    }
                    if (comp && !isObject(comp) && !isFunction(comp)) {
                        throw new Error(`Invalid async component load result: ${comp}`);
                    }
                    return comp;
                })));
    };
    return () => {
        const component = load();
        return {
            component,
            delay,
            timeout,
            error: errorComponent,
            loading: loadingComponent
        };
    };
}

function createLifeCycle(hookName) {
    return (fn, target = currentInstance) => {
        if (!target) {
            warn$2(`${formatName(hookName)} is called when there is no active component instance to be ` +
                    `associated with. ` +
                    `Lifecycle injection APIs can only be used during execution of setup().`);
            return;
        }
        return injectHook(target, hookName, fn);
    };
}
function formatName(name) {
    if (name === 'beforeDestroy') {
        name = 'beforeUnmount';
    }
    else if (name === 'destroyed') {
        name = 'unmounted';
    }
    return `on${name[0].toUpperCase() + name.slice(1)}`;
}
function injectHook(instance, hookName, fn) {
    const options = instance.$options;
    options[hookName] = mergeLifecycleHook(options[hookName], fn);
}
const onBeforeMount = createLifeCycle('beforeMount');
const onMounted = createLifeCycle('mounted');
const onBeforeUpdate = createLifeCycle('beforeUpdate');
const onUpdated = createLifeCycle('updated');
const onBeforeUnmount = createLifeCycle('beforeDestroy');
const onUnmounted = createLifeCycle('destroyed');
const onActivated = createLifeCycle('activated');
const onDeactivated = createLifeCycle('deactivated');
const onServerPrefetch = createLifeCycle('serverPrefetch');
const onRenderTracked = createLifeCycle('renderTracked');
const onRenderTriggered = createLifeCycle('renderTriggered');
const injectErrorCapturedHook = createLifeCycle('errorCaptured');
function onErrorCaptured(hook, target = currentInstance) {
    injectErrorCapturedHook(hook, target);
}

/**
 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
 */
const version = '2.7.14';
/**
 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
 */
function defineComponent(options) {
    return options;
}

const seenObjects = new _Set();
/**
 * Recursively traverse an object to evoke all converted
 * getters, so that every nested property inside the object
 * is collected as a "deep" dependency.
 */
function traverse(val) {
    _traverse(val, seenObjects);
    seenObjects.clear();
    return val;
}
function _traverse(val, seen) {
    let i, keys;
    const isA = isArray(val);
    if ((!isA && !isObject(val)) ||
        val.__v_skip /* ReactiveFlags.SKIP */ ||
        Object.isFrozen(val) ||
        val instanceof VNode) {
        return;
    }
    if (val.__ob__) {
        const depId = val.__ob__.dep.id;
        if (seen.has(depId)) {
            return;
        }
        seen.add(depId);
    }
    if (isA) {
        i = val.length;
        while (i--)
            _traverse(val[i], seen);
    }
    else if (isRef(val)) {
        _traverse(val.value, seen);
    }
    else {
        keys = Object.keys(val);
        i = keys.length;
        while (i--)
            _traverse(val[keys[i]], seen);
    }
}

let uid$1 = 0;
/**
 * A watcher parses an expression, collects dependencies,
 * and fires callback when the expression value changes.
 * This is used for both the $watch() api and directives.
 * @internal
 */
class Watcher {
    constructor(vm, expOrFn, cb, options, isRenderWatcher) {
        recordEffectScope(this, 
        // if the active effect scope is manually created (not a component scope),
        // prioritize it
        activeEffectScope && !activeEffectScope._vm
            ? activeEffectScope
            : vm
                ? vm._scope
                : undefined);
        if ((this.vm = vm) && isRenderWatcher) {
            vm._watcher = this;
        }
        // options
        if (options) {
            this.deep = !!options.deep;
            this.user = !!options.user;
            this.lazy = !!options.lazy;
            this.sync = !!options.sync;
            this.before = options.before;
            {
                this.onTrack = options.onTrack;
                this.onTrigger = options.onTrigger;
            }
        }
        else {
            this.deep = this.user = this.lazy = this.sync = false;
        }
        this.cb = cb;
        this.id = ++uid$1; // uid for batching
        this.active = true;
        this.post = false;
        this.dirty = this.lazy; // for lazy watchers
        this.deps = [];
        this.newDeps = [];
        this.depIds = new _Set();
        this.newDepIds = new _Set();
        this.expression = expOrFn.toString() ;
        // parse expression for getter
        if (isFunction(expOrFn)) {
            this.getter = expOrFn;
        }
        else {
            this.getter = parsePath(expOrFn);
            if (!this.getter) {
                this.getter = noop;
                warn$2(`Failed watching path: "${expOrFn}" ` +
                        'Watcher only accepts simple dot-delimited paths. ' +
                        'For full control, use a function instead.', vm);
            }
        }
        this.value = this.lazy ? undefined : this.get();
    }
    /**
     * Evaluate the getter, and re-collect dependencies.
     */
    get() {
        pushTarget(this);
        let value;
        const vm = this.vm;
        try {
            value = this.getter.call(vm, vm);
        }
        catch (e) {
            if (this.user) {
                handleError(e, vm, `getter for watcher "${this.expression}"`);
            }
            else {
                throw e;
            }
        }
        finally {
            // "touch" every property so they are all tracked as
            // dependencies for deep watching
            if (this.deep) {
                traverse(value);
            }
            popTarget();
            this.cleanupDeps();
        }
        return value;
    }
    /**
     * Add a dependency to this directive.
     */
    addDep(dep) {
        const id = dep.id;
        if (!this.newDepIds.has(id)) {
            this.newDepIds.add(id);
            this.newDeps.push(dep);
            if (!this.depIds.has(id)) {
                dep.addSub(this);
            }
        }
    }
    /**
     * Clean up for dependency collection.
     */
    cleanupDeps() {
        let i = this.deps.length;
        while (i--) {
            const dep = this.deps[i];
            if (!this.newDepIds.has(dep.id)) {
                dep.removeSub(this);
            }
        }
        let tmp = this.depIds;
        this.depIds = this.newDepIds;
        this.newDepIds = tmp;
        this.newDepIds.clear();
        tmp = this.deps;
        this.deps = this.newDeps;
        this.newDeps = tmp;
        this.newDeps.length = 0;
    }
    /**
     * Subscriber interface.
     * Will be called when a dependency changes.
     */
    update() {
        /* istanbul ignore else */
        if (this.lazy) {
            this.dirty = true;
        }
        else if (this.sync) {
            this.run();
        }
        else {
            queueWatcher(this);
        }
    }
    /**
     * Scheduler job interface.
     * Will be called by the scheduler.
     */
    run() {
        if (this.active) {
            const value = this.get();
            if (value !== this.value ||
                // Deep watchers and watchers on Object/Arrays should fire even
                // when the value is the same, because the value may
                // have mutated.
                isObject(value) ||
                this.deep) {
                // set new value
                const oldValue = this.value;
                this.value = value;
                if (this.user) {
                    const info = `callback for watcher "${this.expression}"`;
                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
                }
                else {
                    this.cb.call(this.vm, value, oldValue);
                }
            }
        }
    }
    /**
     * Evaluate the value of the watcher.
     * This only gets called for lazy watchers.
     */
    evaluate() {
        this.value = this.get();
        this.dirty = false;
    }
    /**
     * Depend on all deps collected by this watcher.
     */
    depend() {
        let i = this.deps.length;
        while (i--) {
            this.deps[i].depend();
        }
    }
    /**
     * Remove self from all dependencies' subscriber list.
     */
    teardown() {
        if (this.vm && !this.vm._isBeingDestroyed) {
            remove$2(this.vm._scope.effects, this);
        }
        if (this.active) {
            let i = this.deps.length;
            while (i--) {
                this.deps[i].removeSub(this);
            }
            this.active = false;
            if (this.onStop) {
                this.onStop();
            }
        }
    }
}

const sharedPropertyDefinition = {
    enumerable: true,
    configurable: true,
    get: noop,
    set: noop
};
function proxy(target, sourceKey, key) {
    sharedPropertyDefinition.get = function proxyGetter() {
        return this[sourceKey][key];
    };
    sharedPropertyDefinition.set = function proxySetter(val) {
        this[sourceKey][key] = val;
    };
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function initState(vm) {
    const opts = vm.$options;
    if (opts.props)
        initProps$1(vm, opts.props);
    // Composition API
    initSetup(vm);
    if (opts.methods)
        initMethods(vm, opts.methods);
    if (opts.data) {
        initData(vm);
    }
    else {
        const ob = observe((vm._data = {}));
        ob && ob.vmCount++;
    }
    if (opts.computed)
        initComputed$1(vm, opts.computed);
    if (opts.watch && opts.watch !== nativeWatch) {
        initWatch(vm, opts.watch);
    }
}
function initProps$1(vm, propsOptions) {
    const propsData = vm.$options.propsData || {};
    const props = (vm._props = shallowReactive({}));
    // cache prop keys so that future props updates can iterate using Array
    // instead of dynamic object key enumeration.
    const keys = (vm.$options._propKeys = []);
    const isRoot = !vm.$parent;
    // root instance props should be converted
    if (!isRoot) {
        toggleObserving(false);
    }
    for (const key in propsOptions) {
        keys.push(key);
        const value = validateProp(key, propsOptions, propsData, vm);
        /* istanbul ignore else */
        {
            const hyphenatedKey = hyphenate(key);
            if (isReservedAttribute(hyphenatedKey) ||
                config.isReservedAttr(hyphenatedKey)) {
                warn$2(`"${hyphenatedKey}" is a reserved attribute and cannot be used as component prop.`, vm);
            }
            defineReactive(props, key, value, () => {
                if (!isRoot && !isUpdatingChildComponent) {
                    warn$2(`Avoid mutating a prop directly since the value will be ` +
                        `overwritten whenever the parent component re-renders. ` +
                        `Instead, use a data or computed property based on the prop's ` +
                        `value. Prop being mutated: "${key}"`, vm);
                }
            });
        }
        // static props are already proxied on the component's prototype
        // during Vue.extend(). We only need to proxy props defined at
        // instantiation here.
        if (!(key in vm)) {
            proxy(vm, `_props`, key);
        }
    }
    toggleObserving(true);
}
function initData(vm) {
    let data = vm.$options.data;
    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
    if (!isPlainObject(data)) {
        data = {};
        warn$2('data functions should return an object:\n' +
                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
    }
    // proxy data on instance
    const keys = Object.keys(data);
    const props = vm.$options.props;
    const methods = vm.$options.methods;
    let i = keys.length;
    while (i--) {
        const key = keys[i];
        {
            if (methods && hasOwn(methods, key)) {
                warn$2(`Method "${key}" has already been defined as a data property.`, vm);
            }
        }
        if (props && hasOwn(props, key)) {
            warn$2(`The data property "${key}" is already declared as a prop. ` +
                    `Use prop default value instead.`, vm);
        }
        else if (!isReserved(key)) {
            proxy(vm, `_data`, key);
        }
    }
    // observe data
    const ob = observe(data);
    ob && ob.vmCount++;
}
function getData(data, vm) {
    // #7573 disable dep collection when invoking data getters
    pushTarget();
    try {
        return data.call(vm, vm);
    }
    catch (e) {
        handleError(e, vm, `data()`);
        return {};
    }
    finally {
        popTarget();
    }
}
const computedWatcherOptions = { lazy: true };
function initComputed$1(vm, computed) {
    // $flow-disable-line
    const watchers = (vm._computedWatchers = Object.create(null));
    // computed properties are just getters during SSR
    const isSSR = isServerRendering();
    for (const key in computed) {
        const userDef = computed[key];
        const getter = isFunction(userDef) ? userDef : userDef.get;
        if (getter == null) {
            warn$2(`Getter is missing for computed property "${key}".`, vm);
        }
        if (!isSSR) {
            // create internal watcher for the computed property.
            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
        }
        // component-defined computed properties are already defined on the
        // component prototype. We only need to define computed properties defined
        // at instantiation here.
        if (!(key in vm)) {
            defineComputed(vm, key, userDef);
        }
        else {
            if (key in vm.$data) {
                warn$2(`The computed property "${key}" is already defined in data.`, vm);
            }
            else if (vm.$options.props && key in vm.$options.props) {
                warn$2(`The computed property "${key}" is already defined as a prop.`, vm);
            }
            else if (vm.$options.methods && key in vm.$options.methods) {
                warn$2(`The computed property "${key}" is already defined as a method.`, vm);
            }
        }
    }
}
function defineComputed(target, key, userDef) {
    const shouldCache = !isServerRendering();
    if (isFunction(userDef)) {
        sharedPropertyDefinition.get = shouldCache
            ? createComputedGetter(key)
            : createGetterInvoker(userDef);
        sharedPropertyDefinition.set = noop;
    }
    else {
        sharedPropertyDefinition.get = userDef.get
            ? shouldCache && userDef.cache !== false
                ? createComputedGetter(key)
                : createGetterInvoker(userDef.get)
            : noop;
        sharedPropertyDefinition.set = userDef.set || noop;
    }
    if (sharedPropertyDefinition.set === noop) {
        sharedPropertyDefinition.set = function () {
            warn$2(`Computed property "${key}" was assigned to but it has no setter.`, this);
        };
    }
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function createComputedGetter(key) {
    return function computedGetter() {
        const watcher = this._computedWatchers && this._computedWatchers[key];
        if (watcher) {
            if (watcher.dirty) {
                watcher.evaluate();
            }
            if (Dep.target) {
                if (Dep.target.onTrack) {
                    Dep.target.onTrack({
                        effect: Dep.target,
                        target: this,
                        type: "get" /* TrackOpTypes.GET */,
                        key
                    });
                }
                watcher.depend();
            }
            return watcher.value;
        }
    };
}
function createGetterInvoker(fn) {
    return function computedGetter() {
        return fn.call(this, this);
    };
}
function initMethods(vm, methods) {
    const props = vm.$options.props;
    for (const key in methods) {
        {
            if (typeof methods[key] !== 'function') {
                warn$2(`Method "${key}" has type "${typeof methods[key]}" in the component definition. ` +
                    `Did you reference the function correctly?`, vm);
            }
            if (props && hasOwn(props, key)) {
                warn$2(`Method "${key}" has already been defined as a prop.`, vm);
            }
            if (key in vm && isReserved(key)) {
                warn$2(`Method "${key}" conflicts with an existing Vue instance method. ` +
                    `Avoid defining component methods that start with _ or $.`);
            }
        }
        vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);
    }
}
function initWatch(vm, watch) {
    for (const key in watch) {
        const handler = watch[key];
        if (isArray(handler)) {
            for (let i = 0; i < handler.length; i++) {
                createWatcher(vm, key, handler[i]);
            }
        }
        else {
            createWatcher(vm, key, handler);
        }
    }
}
function createWatcher(vm, expOrFn, handler, options) {
    if (isPlainObject(handler)) {
        options = handler;
        handler = handler.handler;
    }
    if (typeof handler === 'string') {
        handler = vm[handler];
    }
    return vm.$watch(expOrFn, handler, options);
}
function stateMixin(Vue) {
    // flow somehow has problems with directly declared definition object
    // when using Object.defineProperty, so we have to procedurally build up
    // the object here.
    const dataDef = {};
    dataDef.get = function () {
        return this._data;
    };
    const propsDef = {};
    propsDef.get = function () {
        return this._props;
    };
    {
        dataDef.set = function () {
            warn$2('Avoid replacing instance root $data. ' +
                'Use nested data properties instead.', this);
        };
        propsDef.set = function () {
            warn$2(`$props is readonly.`, this);
        };
    }
    Object.defineProperty(Vue.prototype, '$data', dataDef);
    Object.defineProperty(Vue.prototype, '$props', propsDef);
    Vue.prototype.$set = set;
    Vue.prototype.$delete = del;
    Vue.prototype.$watch = function (expOrFn, cb, options) {
        const vm = this;
        if (isPlainObject(cb)) {
            return createWatcher(vm, expOrFn, cb, options);
        }
        options = options || {};
        options.user = true;
        const watcher = new Watcher(vm, expOrFn, cb, options);
        if (options.immediate) {
            const info = `callback for immediate watcher "${watcher.expression}"`;
            pushTarget();
            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
            popTarget();
        }
        return function unwatchFn() {
            watcher.teardown();
        };
    };
}

function initProvide(vm) {
    const provideOption = vm.$options.provide;
    if (provideOption) {
        const provided = isFunction(provideOption)
            ? provideOption.call(vm)
            : provideOption;
        if (!isObject(provided)) {
            return;
        }
        const source = resolveProvided(vm);
        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
        // iterate the keys ourselves.
        const keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
        for (let i = 0; i < keys.length; i++) {
            const key = keys[i];
            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
        }
    }
}
function initInjections(vm) {
    const result = resolveInject(vm.$options.inject, vm);
    if (result) {
        toggleObserving(false);
        Object.keys(result).forEach(key => {
            /* istanbul ignore else */
            {
                defineReactive(vm, key, result[key], () => {
                    warn$2(`Avoid mutating an injected value directly since the changes will be ` +
                        `overwritten whenever the provided component re-renders. ` +
                        `injection being mutated: "${key}"`, vm);
                });
            }
        });
        toggleObserving(true);
    }
}
function resolveInject(inject, vm) {
    if (inject) {
        // inject is :any because flow is not smart enough to figure out cached
        const result = Object.create(null);
        const keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
        for (let i = 0; i < keys.length; i++) {
            const key = keys[i];
            // #6574 in case the inject object is observed...
            if (key === '__ob__')
                continue;
            const provideKey = inject[key].from;
            if (provideKey in vm._provided) {
                result[key] = vm._provided[provideKey];
            }
            else if ('default' in inject[key]) {
                const provideDefault = inject[key].default;
                result[key] = isFunction(provideDefault)
                    ? provideDefault.call(vm)
                    : provideDefault;
            }
            else {
                warn$2(`Injection "${key}" not found`, vm);
            }
        }
        return result;
    }
}

let uid = 0;
function initMixin$1(Vue) {
    Vue.prototype._init = function (options) {
        const vm = this;
        // a uid
        vm._uid = uid++;
        let startTag, endTag;
        /* istanbul ignore if */
        if (config.performance && mark) {
            startTag = `vue-perf-start:${vm._uid}`;
            endTag = `vue-perf-end:${vm._uid}`;
            mark(startTag);
        }
        // a flag to mark this as a Vue instance without having to do instanceof
        // check
        vm._isVue = true;
        // avoid instances from being observed
        vm.__v_skip = true;
        // effect scope
        vm._scope = new EffectScope(true /* detached */);
        vm._scope._vm = true;
        // merge options
        if (options && options._isComponent) {
            // optimize internal component instantiation
            // since dynamic options merging is pretty slow, and none of the
            // internal component options needs special treatment.
            initInternalComponent(vm, options);
        }
        else {
            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
        }
        /* istanbul ignore else */
        {
            initProxy(vm);
        }
        // expose real self
        vm._self = vm;
        initLifecycle(vm);
        initEvents(vm);
        initRender(vm);
        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
        initInjections(vm); // resolve injections before data/props
        initState(vm);
        initProvide(vm); // resolve provide after data/props
        callHook$1(vm, 'created');
        /* istanbul ignore if */
        if (config.performance && mark) {
            vm._name = formatComponentName(vm, false);
            mark(endTag);
            measure(`vue ${vm._name} init`, startTag, endTag);
        }
        if (vm.$options.el) {
            vm.$mount(vm.$options.el);
        }
    };
}
function initInternalComponent(vm, options) {
    const opts = (vm.$options = Object.create(vm.constructor.options));
    // doing this because it's faster than dynamic enumeration.
    const parentVnode = options._parentVnode;
    opts.parent = options.parent;
    opts._parentVnode = parentVnode;
    const vnodeComponentOptions = parentVnode.componentOptions;
    opts.propsData = vnodeComponentOptions.propsData;
    opts._parentListeners = vnodeComponentOptions.listeners;
    opts._renderChildren = vnodeComponentOptions.children;
    opts._componentTag = vnodeComponentOptions.tag;
    if (options.render) {
        opts.render = options.render;
        opts.staticRenderFns = options.staticRenderFns;
    }
}
function resolveConstructorOptions(Ctor) {
    let options = Ctor.options;
    if (Ctor.super) {
        const superOptions = resolveConstructorOptions(Ctor.super);
        const cachedSuperOptions = Ctor.superOptions;
        if (superOptions !== cachedSuperOptions) {
            // super option changed,
            // need to resolve new options.
            Ctor.superOptions = superOptions;
            // check if there are any late-modified/attached options (#4976)
            const modifiedOptions = resolveModifiedOptions(Ctor);
            // update base extend options
            if (modifiedOptions) {
                extend(Ctor.extendOptions, modifiedOptions);
            }
            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
            if (options.name) {
                options.components[options.name] = Ctor;
            }
        }
    }
    return options;
}
function resolveModifiedOptions(Ctor) {
    let modified;
    const latest = Ctor.options;
    const sealed = Ctor.sealedOptions;
    for (const key in latest) {
        if (latest[key] !== sealed[key]) {
            if (!modified)
                modified = {};
            modified[key] = latest[key];
        }
    }
    return modified;
}

function FunctionalRenderContext(data, props, children, parent, Ctor) {
    const options = Ctor.options;
    // ensure the createElement function in functional components
    // gets a unique context - this is necessary for correct named slot check
    let contextVm;
    if (hasOwn(parent, '_uid')) {
        contextVm = Object.create(parent);
        contextVm._original = parent;
    }
    else {
        // the context vm passed in is a functional context as well.
        // in this case we want to make sure we are able to get a hold to the
        // real context instance.
        contextVm = parent;
        // @ts-ignore
        parent = parent._original;
    }
    const isCompiled = isTrue(options._compiled);
    const needNormalization = !isCompiled;
    this.data = data;
    this.props = props;
    this.children = children;
    this.parent = parent;
    this.listeners = data.on || emptyObject;
    this.injections = resolveInject(options.inject, parent);
    this.slots = () => {
        if (!this.$slots) {
            normalizeScopedSlots(parent, data.scopedSlots, (this.$slots = resolveSlots(children, parent)));
        }
        return this.$slots;
    };
    Object.defineProperty(this, 'scopedSlots', {
        enumerable: true,
        get() {
            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
        }
    });
    // support for compiled functional template
    if (isCompiled) {
        // exposing $options for renderStatic()
        this.$options = options;
        // pre-resolve slots for renderSlot()
        this.$slots = this.slots();
        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
    }
    if (options._scopeId) {
        this._c = (a, b, c, d) => {
            const vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
            if (vnode && !isArray(vnode)) {
                vnode.fnScopeId = options._scopeId;
                vnode.fnContext = parent;
            }
            return vnode;
        };
    }
    else {
        this._c = (a, b, c, d) => createElement$1(contextVm, a, b, c, d, needNormalization);
    }
}
installRenderHelpers(FunctionalRenderContext.prototype);
function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
    const options = Ctor.options;
    const props = {};
    const propOptions = options.props;
    if (isDef(propOptions)) {
        for (const key in propOptions) {
            props[key] = validateProp(key, propOptions, propsData || emptyObject);
        }
    }
    else {
        if (isDef(data.attrs))
            mergeProps(props, data.attrs);
        if (isDef(data.props))
            mergeProps(props, data.props);
    }
    const renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
    const vnode = options.render.call(null, renderContext._c, renderContext);
    if (vnode instanceof VNode) {
        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
    }
    else if (isArray(vnode)) {
        const vnodes = normalizeChildren(vnode) || [];
        const res = new Array(vnodes.length);
        for (let i = 0; i < vnodes.length; i++) {
            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
        }
        return res;
    }
}
function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
    // #7817 clone node before setting fnContext, otherwise if the node is reused
    // (e.g. it was from a cached normal slot) the fnContext causes named slots
    // that should not be matched to match.
    const clone = cloneVNode(vnode);
    clone.fnContext = contextVm;
    clone.fnOptions = options;
    {
        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
            renderContext;
    }
    if (data.slot) {
        (clone.data || (clone.data = {})).slot = data.slot;
    }
    return clone;
}
function mergeProps(to, from) {
    for (const key in from) {
        to[camelize(key)] = from[key];
    }
}

function getComponentName(options) {
    return options.name || options.__name || options._componentTag;
}
// inline hooks to be invoked on component VNodes during patch
const componentVNodeHooks = {
    init(vnode, hydrating) {
        if (vnode.componentInstance &&
            !vnode.componentInstance._isDestroyed &&
            vnode.data.keepAlive) {
            // kept-alive components, treat as a patch
            const mountedNode = vnode; // work around flow
            componentVNodeHooks.prepatch(mountedNode, mountedNode);
        }
        else {
            const child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
        }
    },
    prepatch(oldVnode, vnode) {
        const options = vnode.componentOptions;
        const child = (vnode.componentInstance = oldVnode.componentInstance);
        updateChildComponent(child, options.propsData, // updated props
        options.listeners, // updated listeners
        vnode, // new parent vnode
        options.children // new children
        );
    },
    insert(vnode) {
        const { context, componentInstance } = vnode;
        if (!componentInstance._isMounted) {
            componentInstance._isMounted = true;
            callHook$1(componentInstance, 'mounted');
        }
        if (vnode.data.keepAlive) {
            if (context._isMounted) {
                // vue-router#1212
                // During updates, a kept-alive component's child components may
                // change, so directly walking the tree here may call activated hooks
                // on incorrect children. Instead we push them into a queue which will
                // be processed after the whole patch process ended.
                queueActivatedComponent(componentInstance);
            }
            else {
                activateChildComponent(componentInstance, true /* direct */);
            }
        }
    },
    destroy(vnode) {
        const { componentInstance } = vnode;
        if (!componentInstance._isDestroyed) {
            if (!vnode.data.keepAlive) {
                componentInstance.$destroy();
            }
            else {
                deactivateChildComponent(componentInstance, true /* direct */);
            }
        }
    }
};
const hooksToMerge = Object.keys(componentVNodeHooks);
function createComponent(Ctor, data, context, children, tag) {
    if (isUndef(Ctor)) {
        return;
    }
    const baseCtor = context.$options._base;
    // plain options object: turn it into a constructor
    if (isObject(Ctor)) {
        Ctor = baseCtor.extend(Ctor);
    }
    // if at this stage it's not a constructor or an async component factory,
    // reject.
    if (typeof Ctor !== 'function') {
        {
            warn$2(`Invalid Component definition: ${String(Ctor)}`, context);
        }
        return;
    }
    // async component
    let asyncFactory;
    // @ts-expect-error
    if (isUndef(Ctor.cid)) {
        asyncFactory = Ctor;
        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
        if (Ctor === undefined) {
            // return a placeholder node for async component, which is rendered
            // as a comment node but preserves all the raw information for the node.
            // the information will be used for async server-rendering and hydration.
            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
        }
    }
    data = data || {};
    // resolve constructor options in case global mixins are applied after
    // component constructor creation
    resolveConstructorOptions(Ctor);
    // transform component v-model data into props & events
    if (isDef(data.model)) {
        // @ts-expect-error
        transformModel(Ctor.options, data);
    }
    // extract props
    // @ts-expect-error
    const propsData = extractPropsFromVNodeData(data, Ctor, tag);
    // functional component
    // @ts-expect-error
    if (isTrue(Ctor.options.functional)) {
        return createFunctionalComponent(Ctor, propsData, data, context, children);
    }
    // extract listeners, since these needs to be treated as
    // child component listeners instead of DOM listeners
    const listeners = data.on;
    // replace with listeners with .native modifier
    // so it gets processed during parent component patch.
    data.on = data.nativeOn;
    // @ts-expect-error
    if (isTrue(Ctor.options.abstract)) {
        // abstract components do not keep anything
        // other than props & listeners & slot
        // work around flow
        const slot = data.slot;
        data = {};
        if (slot) {
            data.slot = slot;
        }
    }
    // install component management hooks onto the placeholder node
    installComponentHooks(data);
    // return a placeholder vnode
    // @ts-expect-error
    const name = getComponentName(Ctor.options) || tag;
    const vnode = new VNode(
    // @ts-expect-error
    `vue-component-${Ctor.cid}${name ? `-${name}` : ''}`, data, undefined, undefined, undefined, context, 
    // @ts-expect-error
    { Ctor, propsData, listeners, tag, children }, asyncFactory);
    return vnode;
}
function createComponentInstanceForVnode(
// we know it's MountedComponentVNode but flow doesn't
vnode, 
// activeInstance in lifecycle state
parent) {
    const options = {
        _isComponent: true,
        _parentVnode: vnode,
        parent
    };
    // check inline-template render functions
    const inlineTemplate = vnode.data.inlineTemplate;
    if (isDef(inlineTemplate)) {
        options.render = inlineTemplate.render;
        options.staticRenderFns = inlineTemplate.staticRenderFns;
    }
    return new vnode.componentOptions.Ctor(options);
}
function installComponentHooks(data) {
    const hooks = data.hook || (data.hook = {});
    for (let i = 0; i < hooksToMerge.length; i++) {
        const key = hooksToMerge[i];
        const existing = hooks[key];
        const toMerge = componentVNodeHooks[key];
        // @ts-expect-error
        if (existing !== toMerge && !(existing && existing._merged)) {
            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
        }
    }
}
function mergeHook(f1, f2) {
    const merged = (a, b) => {
        // flow complains about extra args which is why we use any
        f1(a, b);
        f2(a, b);
    };
    merged._merged = true;
    return merged;
}
// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel(options, data) {
    const prop = (options.model && options.model.prop) || 'value';
    const event = (options.model && options.model.event) || 'input';
    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
    const on = data.on || (data.on = {});
    const existing = on[event];
    const callback = data.model.callback;
    if (isDef(existing)) {
        if (isArray(existing)
            ? existing.indexOf(callback) === -1
            : existing !== callback) {
            on[event] = [callback].concat(existing);
        }
    }
    else {
        on[event] = callback;
    }
}

let warn$2 = noop;
let tip = noop;
let generateComponentTrace; // work around flow check
let formatComponentName;
{
    const hasConsole = typeof console !== 'undefined';
    const classifyRE = /(?:^|[-_])(\w)/g;
    const classify = str => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');
    warn$2 = (msg, vm = currentInstance) => {
        const trace = vm ? generateComponentTrace(vm) : '';
        if (config.warnHandler) {
            config.warnHandler.call(null, msg, vm, trace);
        }
        else if (hasConsole && !config.silent) {
            console.error(`[Vue warn]: ${msg}${trace}`);
        }
    };
    tip = (msg, vm) => {
        if (hasConsole && !config.silent) {
            console.warn(`[Vue tip]: ${msg}` + (vm ? generateComponentTrace(vm) : ''));
        }
    };
    formatComponentName = (vm, includeFile) => {
        if (vm.$root === vm) {
            return '<Root>';
        }
        const options = isFunction(vm) && vm.cid != null
            ? vm.options
            : vm._isVue
                ? vm.$options || vm.constructor.options
                : vm;
        let name = getComponentName(options);
        const file = options.__file;
        if (!name && file) {
            const match = file.match(/([^/\\]+)\.vue$/);
            name = match && match[1];
        }
        return ((name ? `<${classify(name)}>` : `<Anonymous>`) +
            (file && includeFile !== false ? ` at ${file}` : ''));
    };
    const repeat = (str, n) => {
        let res = '';
        while (n) {
            if (n % 2 === 1)
                res += str;
            if (n > 1)
                str += str;
            n >>= 1;
        }
        return res;
    };
    generateComponentTrace = (vm) => {
        if (vm._isVue && vm.$parent) {
            const tree = [];
            let currentRecursiveSequence = 0;
            while (vm) {
                if (tree.length > 0) {
                    const last = tree[tree.length - 1];
                    if (last.constructor === vm.constructor) {
                        currentRecursiveSequence++;
                        vm = vm.$parent;
                        continue;
                    }
                    else if (currentRecursiveSequence > 0) {
                        tree[tree.length - 1] = [last, currentRecursiveSequence];
                        currentRecursiveSequence = 0;
                    }
                }
                tree.push(vm);
                vm = vm.$parent;
            }
            return ('\n\nfound in\n\n' +
                tree
                    .map((vm, i) => `${i === 0 ? '---> ' : repeat(' ', 5 + i * 2)}${isArray(vm)
                    ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
                    : formatComponentName(vm)}`)
                    .join('\n'));
        }
        else {
            return `\n\n(found in ${formatComponentName(vm)})`;
        }
    };
}

/**
 * Option overwriting strategies are functions that handle
 * how to merge a parent option value and a child option
 * value into the final value.
 */
const strats = config.optionMergeStrategies;
/**
 * Options with restrictions
 */
{
    strats.el = strats.propsData = function (parent, child, vm, key) {
        if (!vm) {
            warn$2(`option "${key}" can only be used during instance ` +
                'creation with the `new` keyword.');
        }
        return defaultStrat(parent, child);
    };
}
/**
 * Helper that recursively merges two data objects together.
 */
function mergeData(to, from, recursive = true) {
    if (!from)
        return to;
    let key, toVal, fromVal;
    const keys = hasSymbol
        ? Reflect.ownKeys(from)
        : Object.keys(from);
    for (let i = 0; i < keys.length; i++) {
        key = keys[i];
        // in case the object is already observed...
        if (key === '__ob__')
            continue;
        toVal = to[key];
        fromVal = from[key];
        if (!recursive || !hasOwn(to, key)) {
            set(to, key, fromVal);
        }
        else if (toVal !== fromVal &&
            isPlainObject(toVal) &&
            isPlainObject(fromVal)) {
            mergeData(toVal, fromVal);
        }
    }
    return to;
}
/**
 * Data
 */
function mergeDataOrFn(parentVal, childVal, vm) {
    if (!vm) {
        // in a Vue.extend merge, both should be functions
        if (!childVal) {
            return parentVal;
        }
        if (!parentVal) {
            return childVal;
        }
        // when parentVal & childVal are both present,
        // we need to return a function that returns the
        // merged result of both functions... no need to
        // check if parentVal is a function here because
        // it has to be a function to pass previous merges.
        return function mergedDataFn() {
            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
        };
    }
    else {
        return function mergedInstanceDataFn() {
            // instance merge
            const instanceData = isFunction(childVal)
                ? childVal.call(vm, vm)
                : childVal;
            const defaultData = isFunction(parentVal)
                ? parentVal.call(vm, vm)
                : parentVal;
            if (instanceData) {
                return mergeData(instanceData, defaultData);
            }
            else {
                return defaultData;
            }
        };
    }
}
strats.data = function (parentVal, childVal, vm) {
    if (!vm) {
        if (childVal && typeof childVal !== 'function') {
            warn$2('The "data" option should be a function ' +
                    'that returns a per-instance value in component ' +
                    'definitions.', vm);
            return parentVal;
        }
        return mergeDataOrFn(parentVal, childVal);
    }
    return mergeDataOrFn(parentVal, childVal, vm);
};
/**
 * Hooks and props are merged as arrays.
 */
function mergeLifecycleHook(parentVal, childVal) {
    const res = childVal
        ? parentVal
            ? parentVal.concat(childVal)
            : isArray(childVal)
                ? childVal
                : [childVal]
        : parentVal;
    return res ? dedupeHooks(res) : res;
}
function dedupeHooks(hooks) {
    const res = [];
    for (let i = 0; i < hooks.length; i++) {
        if (res.indexOf(hooks[i]) === -1) {
            res.push(hooks[i]);
        }
    }
    return res;
}
LIFECYCLE_HOOKS.forEach(hook => {
    strats[hook] = mergeLifecycleHook;
});
/**
 * Assets
 *
 * When a vm is present (instance creation), we need to do
 * a three-way merge between constructor options, instance
 * options and parent options.
 */
function mergeAssets(parentVal, childVal, vm, key) {
    const res = Object.create(parentVal || null);
    if (childVal) {
        assertObjectType(key, childVal, vm);
        return extend(res, childVal);
    }
    else {
        return res;
    }
}
ASSET_TYPES.forEach(function (type) {
    strats[type + 's'] = mergeAssets;
});
/**
 * Watchers.
 *
 * Watchers hashes should not overwrite one
 * another, so we merge them as arrays.
 */
strats.watch = function (parentVal, childVal, vm, key) {
    // work around Firefox's Object.prototype.watch...
    //@ts-expect-error work around
    if (parentVal === nativeWatch)
        parentVal = undefined;
    //@ts-expect-error work around
    if (childVal === nativeWatch)
        childVal = undefined;
    /* istanbul ignore if */
    if (!childVal)
        return Object.create(parentVal || null);
    {
        assertObjectType(key, childVal, vm);
    }
    if (!parentVal)
        return childVal;
    const ret = {};
    extend(ret, parentVal);
    for (const key in childVal) {
        let parent = ret[key];
        const child = childVal[key];
        if (parent && !isArray(parent)) {
            parent = [parent];
        }
        ret[key] = parent ? parent.concat(child) : isArray(child) ? child : [child];
    }
    return ret;
};
/**
 * Other object hashes.
 */
strats.props =
    strats.methods =
        strats.inject =
            strats.computed =
                function (parentVal, childVal, vm, key) {
                    if (childVal && true) {
                        assertObjectType(key, childVal, vm);
                    }
                    if (!parentVal)
                        return childVal;
                    const ret = Object.create(null);
                    extend(ret, parentVal);
                    if (childVal)
                        extend(ret, childVal);
                    return ret;
                };
strats.provide = function (parentVal, childVal) {
    if (!parentVal)
        return childVal;
    return function () {
        const ret = Object.create(null);
        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
        if (childVal) {
            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
            );
        }
        return ret;
    };
};
/**
 * Default strategy.
 */
const defaultStrat = function (parentVal, childVal) {
    return childVal === undefined ? parentVal : childVal;
};
/**
 * Validate component names
 */
function checkComponents(options) {
    for (const key in options.components) {
        validateComponentName(key);
    }
}
function validateComponentName(name) {
    if (!new RegExp(`^[a-zA-Z][\\-\\.0-9_${unicodeRegExp.source}]*$`).test(name)) {
        warn$2('Invalid component name: "' +
            name +
            '". Component names ' +
            'should conform to valid custom element name in html5 specification.');
    }
    if (isBuiltInTag(name) || config.isReservedTag(name)) {
        warn$2('Do not use built-in or reserved HTML elements as component ' +
            'id: ' +
            name);
    }
}
/**
 * Ensure all props option syntax are normalized into the
 * Object-based format.
 */
function normalizeProps(options, vm) {
    const props = options.props;
    if (!props)
        return;
    const res = {};
    let i, val, name;
    if (isArray(props)) {
        i = props.length;
        while (i--) {
            val = props[i];
            if (typeof val === 'string') {
                name = camelize(val);
                res[name] = { type: null };
            }
            else {
                warn$2('props must be strings when using array syntax.');
            }
        }
    }
    else if (isPlainObject(props)) {
        for (const key in props) {
            val = props[key];
            name = camelize(key);
            res[name] = isPlainObject(val) ? val : { type: val };
        }
    }
    else {
        warn$2(`Invalid value for option "props": expected an Array or an Object, ` +
            `but got ${toRawType(props)}.`, vm);
    }
    options.props = res;
}
/**
 * Normalize all injections into Object-based format
 */
function normalizeInject(options, vm) {
    const inject = options.inject;
    if (!inject)
        return;
    const normalized = (options.inject = {});
    if (isArray(inject)) {
        for (let i = 0; i < inject.length; i++) {
            normalized[inject[i]] = { from: inject[i] };
        }
    }
    else if (isPlainObject(inject)) {
        for (const key in inject) {
            const val = inject[key];
            normalized[key] = isPlainObject(val)
                ? extend({ from: key }, val)
                : { from: val };
        }
    }
    else {
        warn$2(`Invalid value for option "inject": expected an Array or an Object, ` +
            `but got ${toRawType(inject)}.`, vm);
    }
}
/**
 * Normalize raw function directives into object format.
 */
function normalizeDirectives$1(options) {
    const dirs = options.directives;
    if (dirs) {
        for (const key in dirs) {
            const def = dirs[key];
            if (isFunction(def)) {
                dirs[key] = { bind: def, update: def };
            }
        }
    }
}
function assertObjectType(name, value, vm) {
    if (!isPlainObject(value)) {
        warn$2(`Invalid value for option "${name}": expected an Object, ` +
            `but got ${toRawType(value)}.`, vm);
    }
}
/**
 * Merge two option objects into a new one.
 * Core utility used in both instantiation and inheritance.
 */
function mergeOptions(parent, child, vm) {
    {
        checkComponents(child);
    }
    if (isFunction(child)) {
        // @ts-expect-error
        child = child.options;
    }
    normalizeProps(child, vm);
    normalizeInject(child, vm);
    normalizeDirectives$1(child);
    // Apply extends and mixins on the child options,
    // but only if it is a raw options object that isn't
    // the result of another mergeOptions call.
    // Only merged options has the _base property.
    if (!child._base) {
        if (child.extends) {
            parent = mergeOptions(parent, child.extends, vm);
        }
        if (child.mixins) {
            for (let i = 0, l = child.mixins.length; i < l; i++) {
                parent = mergeOptions(parent, child.mixins[i], vm);
            }
        }
    }
    const options = {};
    let key;
    for (key in parent) {
        mergeField(key);
    }
    for (key in child) {
        if (!hasOwn(parent, key)) {
            mergeField(key);
        }
    }
    function mergeField(key) {
        const strat = strats[key] || defaultStrat;
        options[key] = strat(parent[key], child[key], vm, key);
    }
    return options;
}
/**
 * Resolve an asset.
 * This function is used because child instances need access
 * to assets defined in its ancestor chain.
 */
function resolveAsset(options, type, id, warnMissing) {
    /* istanbul ignore if */
    if (typeof id !== 'string') {
        return;
    }
    const assets = options[type];
    // check local registration variations first
    if (hasOwn(assets, id))
        return assets[id];
    const camelizedId = camelize(id);
    if (hasOwn(assets, camelizedId))
        return assets[camelizedId];
    const PascalCaseId = capitalize(camelizedId);
    if (hasOwn(assets, PascalCaseId))
        return assets[PascalCaseId];
    // fallback to prototype chain
    const res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
    if (warnMissing && !res) {
        warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
    }
    return res;
}

function validateProp(key, propOptions, propsData, vm) {
    const prop = propOptions[key];
    const absent = !hasOwn(propsData, key);
    let value = propsData[key];
    // boolean casting
    const booleanIndex = getTypeIndex(Boolean, prop.type);
    if (booleanIndex > -1) {
        if (absent && !hasOwn(prop, 'default')) {
            value = false;
        }
        else if (value === '' || value === hyphenate(key)) {
            // only cast empty string / same name to boolean if
            // boolean has higher priority
            const stringIndex = getTypeIndex(String, prop.type);
            if (stringIndex < 0 || booleanIndex < stringIndex) {
                value = true;
            }
        }
    }
    // check default value
    if (value === undefined) {
        value = getPropDefaultValue(vm, prop, key);
        // since the default value is a fresh copy,
        // make sure to observe it.
        const prevShouldObserve = shouldObserve;
        toggleObserving(true);
        observe(value);
        toggleObserving(prevShouldObserve);
    }
    {
        assertProp(prop, key, value, vm, absent);
    }
    return value;
}
/**
 * Get the default value of a prop.
 */
function getPropDefaultValue(vm, prop, key) {
    // no default, return undefined
    if (!hasOwn(prop, 'default')) {
        return undefined;
    }
    const def = prop.default;
    // warn against non-factory defaults for Object & Array
    if (isObject(def)) {
        warn$2('Invalid default value for prop "' +
            key +
            '": ' +
            'Props with type Object/Array must use a factory function ' +
            'to return the default value.', vm);
    }
    // the raw prop value was also undefined from previous render,
    // return previous default value to avoid unnecessary watcher trigger
    if (vm &&
        vm.$options.propsData &&
        vm.$options.propsData[key] === undefined &&
        vm._props[key] !== undefined) {
        return vm._props[key];
    }
    // call factory function for non-Function types
    // a value is Function if its prototype is function even across different execution context
    return isFunction(def) && getType(prop.type) !== 'Function'
        ? def.call(vm)
        : def;
}
/**
 * Assert whether a prop is valid.
 */
function assertProp(prop, name, value, vm, absent) {
    if (prop.required && absent) {
        warn$2('Missing required prop: "' + name + '"', vm);
        return;
    }
    if (value == null && !prop.required) {
        return;
    }
    let type = prop.type;
    let valid = !type || type === true;
    const expectedTypes = [];
    if (type) {
        if (!isArray(type)) {
            type = [type];
        }
        for (let i = 0; i < type.length && !valid; i++) {
            const assertedType = assertType(value, type[i], vm);
            expectedTypes.push(assertedType.expectedType || '');
            valid = assertedType.valid;
        }
    }
    const haveExpectedTypes = expectedTypes.some(t => t);
    if (!valid && haveExpectedTypes) {
        warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
        return;
    }
    const validator = prop.validator;
    if (validator) {
        if (!validator(value)) {
            warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
        }
    }
}
const simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
function assertType(value, type, vm) {
    let valid;
    const expectedType = getType(type);
    if (simpleCheckRE.test(expectedType)) {
        const t = typeof value;
        valid = t === expectedType.toLowerCase();
        // for primitive wrapper objects
        if (!valid && t === 'object') {
            valid = value instanceof type;
        }
    }
    else if (expectedType === 'Object') {
        valid = isPlainObject(value);
    }
    else if (expectedType === 'Array') {
        valid = isArray(value);
    }
    else {
        try {
            valid = value instanceof type;
        }
        catch (e) {
            warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
            valid = false;
        }
    }
    return {
        valid,
        expectedType
    };
}
const functionTypeCheckRE = /^\s*function (\w+)/;
/**
 * Use function string name to check built-in types,
 * because a simple equality check will fail when running
 * across different vms / iframes.
 */
function getType(fn) {
    const match = fn && fn.toString().match(functionTypeCheckRE);
    return match ? match[1] : '';
}
function isSameType(a, b) {
    return getType(a) === getType(b);
}
function getTypeIndex(type, expectedTypes) {
    if (!isArray(expectedTypes)) {
        return isSameType(expectedTypes, type) ? 0 : -1;
    }
    for (let i = 0, len = expectedTypes.length; i < len; i++) {
        if (isSameType(expectedTypes[i], type)) {
            return i;
        }
    }
    return -1;
}
function getInvalidTypeMessage(name, value, expectedTypes) {
    let message = `Invalid prop: type check failed for prop "${name}".` +
        ` Expected ${expectedTypes.map(capitalize).join(', ')}`;
    const expectedType = expectedTypes[0];
    const receivedType = toRawType(value);
    // check if we need to specify expected value
    if (expectedTypes.length === 1 &&
        isExplicable(expectedType) &&
        isExplicable(typeof value) &&
        !isBoolean(expectedType, receivedType)) {
        message += ` with value ${styleValue(value, expectedType)}`;
    }
    message += `, got ${receivedType} `;
    // check if we need to specify received value
    if (isExplicable(receivedType)) {
        message += `with value ${styleValue(value, receivedType)}.`;
    }
    return message;
}
function styleValue(value, type) {
    if (type === 'String') {
        return `"${value}"`;
    }
    else if (type === 'Number') {
        return `${Number(value)}`;
    }
    else {
        return `${value}`;
    }
}
const EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
function isExplicable(value) {
    return EXPLICABLE_TYPES.some(elem => value.toLowerCase() === elem);
}
function isBoolean(...args) {
    return args.some(elem => elem.toLowerCase() === 'boolean');
}

function Vue(options) {
    if (!(this instanceof Vue)) {
        warn$2('Vue is a constructor and should be called with the `new` keyword');
    }
    this._init(options);
}
//@ts-expect-error Vue has function type
initMixin$1(Vue);
//@ts-expect-error Vue has function type
stateMixin(Vue);
//@ts-expect-error Vue has function type
eventsMixin(Vue);
//@ts-expect-error Vue has function type
lifecycleMixin(Vue);
//@ts-expect-error Vue has function type
renderMixin(Vue);

function initUse(Vue) {
    Vue.use = function (plugin) {
        const installedPlugins = this._installedPlugins || (this._installedPlugins = []);
        if (installedPlugins.indexOf(plugin) > -1) {
            return this;
        }
        // additional parameters
        const args = toArray(arguments, 1);
        args.unshift(this);
        if (isFunction(plugin.install)) {
            plugin.install.apply(plugin, args);
        }
        else if (isFunction(plugin)) {
            plugin.apply(null, args);
        }
        installedPlugins.push(plugin);
        return this;
    };
}

function initMixin(Vue) {
    Vue.mixin = function (mixin) {
        this.options = mergeOptions(this.options, mixin);
        return this;
    };
}

function initExtend(Vue) {
    /**
     * Each instance constructor, including Vue, has a unique
     * cid. This enables us to create wrapped "child
     * constructors" for prototypal inheritance and cache them.
     */
    Vue.cid = 0;
    let cid = 1;
    /**
     * Class inheritance
     */
    Vue.extend = function (extendOptions) {
        extendOptions = extendOptions || {};
        const Super = this;
        const SuperId = Super.cid;
        const cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
        if (cachedCtors[SuperId]) {
            return cachedCtors[SuperId];
        }
        const name = getComponentName(extendOptions) || getComponentName(Super.options);
        if (name) {
            validateComponentName(name);
        }
        const Sub = function VueComponent(options) {
            this._init(options);
        };
        Sub.prototype = Object.create(Super.prototype);
        Sub.prototype.constructor = Sub;
        Sub.cid = cid++;
        Sub.options = mergeOptions(Super.options, extendOptions);
        Sub['super'] = Super;
        // For props and computed properties, we define the proxy getters on
        // the Vue instances at extension time, on the extended prototype. This
        // avoids Object.defineProperty calls for each instance created.
        if (Sub.options.props) {
            initProps(Sub);
        }
        if (Sub.options.computed) {
            initComputed(Sub);
        }
        // allow further extension/mixin/plugin usage
        Sub.extend = Super.extend;
        Sub.mixin = Super.mixin;
        Sub.use = Super.use;
        // create asset registers, so extended classes
        // can have their private assets too.
        ASSET_TYPES.forEach(function (type) {
            Sub[type] = Super[type];
        });
        // enable recursive self-lookup
        if (name) {
            Sub.options.components[name] = Sub;
        }
        // keep a reference to the super options at extension time.
        // later at instantiation we can check if Super's options have
        // been updated.
        Sub.superOptions = Super.options;
        Sub.extendOptions = extendOptions;
        Sub.sealedOptions = extend({}, Sub.options);
        // cache constructor
        cachedCtors[SuperId] = Sub;
        return Sub;
    };
}
function initProps(Comp) {
    const props = Comp.options.props;
    for (const key in props) {
        proxy(Comp.prototype, `_props`, key);
    }
}
function initComputed(Comp) {
    const computed = Comp.options.computed;
    for (const key in computed) {
        defineComputed(Comp.prototype, key, computed[key]);
    }
}

function initAssetRegisters(Vue) {
    /**
     * Create asset registration methods.
     */
    ASSET_TYPES.forEach(type => {
        // @ts-expect-error function is not exact same type
        Vue[type] = function (id, definition) {
            if (!definition) {
                return this.options[type + 's'][id];
            }
            else {
                /* istanbul ignore if */
                if (type === 'component') {
                    validateComponentName(id);
                }
                if (type === 'component' && isPlainObject(definition)) {
                    // @ts-expect-error
                    definition.name = definition.name || id;
                    definition = this.options._base.extend(definition);
                }
                if (type === 'directive' && isFunction(definition)) {
                    definition = { bind: definition, update: definition };
                }
                this.options[type + 's'][id] = definition;
                return definition;
            }
        };
    });
}

function _getComponentName(opts) {
    return opts && (getComponentName(opts.Ctor.options) || opts.tag);
}
function matches(pattern, name) {
    if (isArray(pattern)) {
        return pattern.indexOf(name) > -1;
    }
    else if (typeof pattern === 'string') {
        return pattern.split(',').indexOf(name) > -1;
    }
    else if (isRegExp(pattern)) {
        return pattern.test(name);
    }
    /* istanbul ignore next */
    return false;
}
function pruneCache(keepAliveInstance, filter) {
    const { cache, keys, _vnode } = keepAliveInstance;
    for (const key in cache) {
        const entry = cache[key];
        if (entry) {
            const name = entry.name;
            if (name && !filter(name)) {
                pruneCacheEntry(cache, key, keys, _vnode);
            }
        }
    }
}
function pruneCacheEntry(cache, key, keys, current) {
    const entry = cache[key];
    if (entry && (!current || entry.tag !== current.tag)) {
        // @ts-expect-error can be undefined
        entry.componentInstance.$destroy();
    }
    cache[key] = null;
    remove$2(keys, key);
}
const patternTypes = [String, RegExp, Array];
// TODO defineComponent
var KeepAlive = {
    name: 'keep-alive',
    abstract: true,
    props: {
        include: patternTypes,
        exclude: patternTypes,
        max: [String, Number]
    },
    methods: {
        cacheVNode() {
            const { cache, keys, vnodeToCache, keyToCache } = this;
            if (vnodeToCache) {
                const { tag, componentInstance, componentOptions } = vnodeToCache;
                cache[keyToCache] = {
                    name: _getComponentName(componentOptions),
                    tag,
                    componentInstance
                };
                keys.push(keyToCache);
                // prune oldest entry
                if (this.max && keys.length > parseInt(this.max)) {
                    pruneCacheEntry(cache, keys[0], keys, this._vnode);
                }
                this.vnodeToCache = null;
            }
        }
    },
    created() {
        this.cache = Object.create(null);
        this.keys = [];
    },
    destroyed() {
        for (const key in this.cache) {
            pruneCacheEntry(this.cache, key, this.keys);
        }
    },
    mounted() {
        this.cacheVNode();
        this.$watch('include', val => {
            pruneCache(this, name => matches(val, name));
        });
        this.$watch('exclude', val => {
            pruneCache(this, name => !matches(val, name));
        });
    },
    updated() {
        this.cacheVNode();
    },
    render() {
        const slot = this.$slots.default;
        const vnode = getFirstComponentChild(slot);
        const componentOptions = vnode && vnode.componentOptions;
        if (componentOptions) {
            // check pattern
            const name = _getComponentName(componentOptions);
            const { include, exclude } = this;
            if (
            // not included
            (include && (!name || !matches(include, name))) ||
                // excluded
                (exclude && name && matches(exclude, name))) {
                return vnode;
            }
            const { cache, keys } = this;
            const key = vnode.key == null
                ? // same constructor may get registered as different local components
                    // so cid alone is not enough (#3269)
                    componentOptions.Ctor.cid +
                        (componentOptions.tag ? `::${componentOptions.tag}` : '')
                : vnode.key;
            if (cache[key]) {
                vnode.componentInstance = cache[key].componentInstance;
                // make current key freshest
                remove$2(keys, key);
                keys.push(key);
            }
            else {
                // delay setting the cache until update
                this.vnodeToCache = vnode;
                this.keyToCache = key;
            }
            // @ts-expect-error can vnode.data can be undefined
            vnode.data.keepAlive = true;
        }
        return vnode || (slot && slot[0]);
    }
};

var builtInComponents = {
    KeepAlive
};

function initGlobalAPI(Vue) {
    // config
    const configDef = {};
    configDef.get = () => config;
    {
        configDef.set = () => {
            warn$2('Do not replace the Vue.config object, set individual fields instead.');
        };
    }
    Object.defineProperty(Vue, 'config', configDef);
    // exposed util methods.
    // NOTE: these are not considered part of the public API - avoid relying on
    // them unless you are aware of the risk.
    Vue.util = {
        warn: warn$2,
        extend,
        mergeOptions,
        defineReactive
    };
    Vue.set = set;
    Vue.delete = del;
    Vue.nextTick = nextTick;
    // 2.6 explicit observable API
    Vue.observable = (obj) => {
        observe(obj);
        return obj;
    };
    Vue.options = Object.create(null);
    ASSET_TYPES.forEach(type => {
        Vue.options[type + 's'] = Object.create(null);
    });
    // this is used to identify the "base" constructor to extend all plain-object
    // components with in Weex's multi-instance scenarios.
    Vue.options._base = Vue;
    extend(Vue.options.components, builtInComponents);
    initUse(Vue);
    initMixin(Vue);
    initExtend(Vue);
    initAssetRegisters(Vue);
}

initGlobalAPI(Vue);
Object.defineProperty(Vue.prototype, '$isServer', {
    get: isServerRendering
});
Object.defineProperty(Vue.prototype, '$ssrContext', {
    get() {
        /* istanbul ignore next */
        return this.$vnode && this.$vnode.ssrContext;
    }
});
// expose FunctionalRenderContext for ssr runtime helper installation
Object.defineProperty(Vue, 'FunctionalRenderContext', {
    value: FunctionalRenderContext
});
Vue.version = version;

// these are reserved for web because they are directly compiled away
// during template compilation
const isReservedAttr = makeMap('style,class');
// attributes that should be using props for binding
const acceptValue = makeMap('input,textarea,option,select,progress');
const mustUseProp = (tag, type, attr) => {
    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
        (attr === 'selected' && tag === 'option') ||
        (attr === 'checked' && tag === 'input') ||
        (attr === 'muted' && tag === 'video'));
};
const isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
const isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
const convertEnumeratedValue = (key, value) => {
    return isFalsyAttrValue(value) || value === 'false'
        ? 'false'
        : // allow arbitrary string value for contenteditable
            key === 'contenteditable' && isValidContentEditableValue(value)
                ? value
                : 'true';
};
const isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
    'required,reversed,scoped,seamless,selected,sortable,' +
    'truespeed,typemustmatch,visible');
const xlinkNS = 'http://www.w3.org/1999/xlink';
const isXlink = (name) => {
    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
};
const getXlinkProp = (name) => {
    return isXlink(name) ? name.slice(6, name.length) : '';
};
const isFalsyAttrValue = (val) => {
    return val == null || val === false;
};

function genClassForVnode(vnode) {
    let data = vnode.data;
    let parentNode = vnode;
    let childNode = vnode;
    while (isDef(childNode.componentInstance)) {
        childNode = childNode.componentInstance._vnode;
        if (childNode && childNode.data) {
            data = mergeClassData(childNode.data, data);
        }
    }
    // @ts-expect-error parentNode.parent not VNodeWithData
    while (isDef((parentNode = parentNode.parent))) {
        if (parentNode && parentNode.data) {
            data = mergeClassData(data, parentNode.data);
        }
    }
    return renderClass(data.staticClass, data.class);
}
function mergeClassData(child, parent) {
    return {
        staticClass: concat(child.staticClass, parent.staticClass),
        class: isDef(child.class) ? [child.class, parent.class] : parent.class
    };
}
function renderClass(staticClass, dynamicClass) {
    if (isDef(staticClass) || isDef(dynamicClass)) {
        return concat(staticClass, stringifyClass(dynamicClass));
    }
    /* istanbul ignore next */
    return '';
}
function concat(a, b) {
    return a ? (b ? a + ' ' + b : a) : b || '';
}
function stringifyClass(value) {
    if (Array.isArray(value)) {
        return stringifyArray(value);
    }
    if (isObject(value)) {
        return stringifyObject(value);
    }
    if (typeof value === 'string') {
        return value;
    }
    /* istanbul ignore next */
    return '';
}
function stringifyArray(value) {
    let res = '';
    let stringified;
    for (let i = 0, l = value.length; i < l; i++) {
        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
            if (res)
                res += ' ';
            res += stringified;
        }
    }
    return res;
}
function stringifyObject(value) {
    let res = '';
    for (const key in value) {
        if (value[key]) {
            if (res)
                res += ' ';
            res += key;
        }
    }
    return res;
}

const namespaceMap = {
    svg: 'http://www.w3.org/2000/svg',
    math: 'http://www.w3.org/1998/Math/MathML'
};
const isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
    'embed,object,param,source,canvas,script,noscript,del,ins,' +
    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
    'output,progress,select,textarea,' +
    'details,dialog,menu,menuitem,summary,' +
    'content,element,shadow,template,blockquote,iframe,tfoot');
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
const isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
const isPreTag = (tag) => tag === 'pre';
const isReservedTag = (tag) => {
    return isHTMLTag(tag) || isSVG(tag);
};
function getTagNamespace(tag) {
    if (isSVG(tag)) {
        return 'svg';
    }
    // basic support for MathML
    // note it doesn't support other MathML elements being component roots
    if (tag === 'math') {
        return 'math';
    }
}
const unknownElementCache = Object.create(null);
function isUnknownElement(tag) {
    /* istanbul ignore if */
    if (!inBrowser) {
        return true;
    }
    if (isReservedTag(tag)) {
        return false;
    }
    tag = tag.toLowerCase();
    /* istanbul ignore if */
    if (unknownElementCache[tag] != null) {
        return unknownElementCache[tag];
    }
    const el = document.createElement(tag);
    if (tag.indexOf('-') > -1) {
        // http://stackoverflow.com/a/28210364/1070244
        return (unknownElementCache[tag] =
            el.constructor === window.HTMLUnknownElement ||
                el.constructor === window.HTMLElement);
    }
    else {
        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
    }
}
const isTextInputType = makeMap('text,number,password,search,email,tel,url');

/**
 * Query an element selector if it's not an element already.
 */
function query(el) {
    if (typeof el === 'string') {
        const selected = document.querySelector(el);
        if (!selected) {
            warn$2('Cannot find element: ' + el);
            return document.createElement('div');
        }
        return selected;
    }
    else {
        return el;
    }
}

function createElement(tagName, vnode) {
    const elm = document.createElement(tagName);
    if (tagName !== 'select') {
        return elm;
    }
    // false or null will remove the attribute but undefined will not
    if (vnode.data &&
        vnode.data.attrs &&
        vnode.data.attrs.multiple !== undefined) {
        elm.setAttribute('multiple', 'multiple');
    }
    return elm;
}
function createElementNS(namespace, tagName) {
    return document.createElementNS(namespaceMap[namespace], tagName);
}
function createTextNode(text) {
    return document.createTextNode(text);
}
function createComment(text) {
    return document.createComment(text);
}
function insertBefore(parentNode, newNode, referenceNode) {
    parentNode.insertBefore(newNode, referenceNode);
}
function removeChild(node, child) {
    node.removeChild(child);
}
function appendChild(node, child) {
    node.appendChild(child);
}
function parentNode(node) {
    return node.parentNode;
}
function nextSibling(node) {
    return node.nextSibling;
}
function tagName(node) {
    return node.tagName;
}
function setTextContent(node, text) {
    node.textContent = text;
}
function setStyleScope(node, scopeId) {
    node.setAttribute(scopeId, '');
}

var nodeOps = /*#__PURE__*/Object.freeze({
  __proto__: null,
  createElement: createElement,
  createElementNS: createElementNS,
  createTextNode: createTextNode,
  createComment: createComment,
  insertBefore: insertBefore,
  removeChild: removeChild,
  appendChild: appendChild,
  parentNode: parentNode,
  nextSibling: nextSibling,
  tagName: tagName,
  setTextContent: setTextContent,
  setStyleScope: setStyleScope
});

var ref = {
    create(_, vnode) {
        registerRef(vnode);
    },
    update(oldVnode, vnode) {
        if (oldVnode.data.ref !== vnode.data.ref) {
            registerRef(oldVnode, true);
            registerRef(vnode);
        }
    },
    destroy(vnode) {
        registerRef(vnode, true);
    }
};
function registerRef(vnode, isRemoval) {
    const ref = vnode.data.ref;
    if (!isDef(ref))
        return;
    const vm = vnode.context;
    const refValue = vnode.componentInstance || vnode.elm;
    const value = isRemoval ? null : refValue;
    const $refsValue = isRemoval ? undefined : refValue;
    if (isFunction(ref)) {
        invokeWithErrorHandling(ref, vm, [value], vm, `template ref function`);
        return;
    }
    const isFor = vnode.data.refInFor;
    const _isString = typeof ref === 'string' || typeof ref === 'number';
    const _isRef = isRef(ref);
    const refs = vm.$refs;
    if (_isString || _isRef) {
        if (isFor) {
            const existing = _isString ? refs[ref] : ref.value;
            if (isRemoval) {
                isArray(existing) && remove$2(existing, refValue);
            }
            else {
                if (!isArray(existing)) {
                    if (_isString) {
                        refs[ref] = [refValue];
                        setSetupRef(vm, ref, refs[ref]);
                    }
                    else {
                        ref.value = [refValue];
                    }
                }
                else if (!existing.includes(refValue)) {
                    existing.push(refValue);
                }
            }
        }
        else if (_isString) {
            if (isRemoval && refs[ref] !== refValue) {
                return;
            }
            refs[ref] = $refsValue;
            setSetupRef(vm, ref, value);
        }
        else if (_isRef) {
            if (isRemoval && ref.value !== refValue) {
                return;
            }
            ref.value = value;
        }
        else {
            warn$2(`Invalid template ref type: ${typeof ref}`);
        }
    }
}
function setSetupRef({ _setupState }, key, val) {
    if (_setupState && hasOwn(_setupState, key)) {
        if (isRef(_setupState[key])) {
            _setupState[key].value = val;
        }
        else {
            _setupState[key] = val;
        }
    }
}

/**
 * Virtual DOM patching algorithm based on Snabbdom by
 * Simon Friis Vindum (@paldepind)
 * Licensed under the MIT License
 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
 *
 * modified by Evan You (@yyx990803)
 *
 * Not type-checking this because this file is perf-critical and the cost
 * of making flow understand it is not worth it.
 */
const emptyNode = new VNode('', {}, []);
const hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
function sameVnode(a, b) {
    return (a.key === b.key &&
        a.asyncFactory === b.asyncFactory &&
        ((a.tag === b.tag &&
            a.isComment === b.isComment &&
            isDef(a.data) === isDef(b.data) &&
            sameInputType(a, b)) ||
            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
}
function sameInputType(a, b) {
    if (a.tag !== 'input')
        return true;
    let i;
    const typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
    const typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
}
function createKeyToOldIdx(children, beginIdx, endIdx) {
    let i, key;
    const map = {};
    for (i = beginIdx; i <= endIdx; ++i) {
        key = children[i].key;
        if (isDef(key))
            map[key] = i;
    }
    return map;
}
function createPatchFunction(backend) {
    let i, j;
    const cbs = {};
    const { modules, nodeOps } = backend;
    for (i = 0; i < hooks.length; ++i) {
        cbs[hooks[i]] = [];
        for (j = 0; j < modules.length; ++j) {
            if (isDef(modules[j][hooks[i]])) {
                cbs[hooks[i]].push(modules[j][hooks[i]]);
            }
        }
    }
    function emptyNodeAt(elm) {
        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
    }
    function createRmCb(childElm, listeners) {
        function remove() {
            if (--remove.listeners === 0) {
                removeNode(childElm);
            }
        }
        remove.listeners = listeners;
        return remove;
    }
    function removeNode(el) {
        const parent = nodeOps.parentNode(el);
        // element may have already been removed due to v-html / v-text
        if (isDef(parent)) {
            nodeOps.removeChild(parent, el);
        }
    }
    function isUnknownElement(vnode, inVPre) {
        return (!inVPre &&
            !vnode.ns &&
            !(config.ignoredElements.length &&
                config.ignoredElements.some(ignore => {
                    return isRegExp(ignore)
                        ? ignore.test(vnode.tag)
                        : ignore === vnode.tag;
                })) &&
            config.isUnknownElement(vnode.tag));
    }
    let creatingElmInVPre = 0;
    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // This vnode was used in a previous render!
            // now it's used as a new node, overwriting its elm would cause
            // potential patch errors down the road when it's used as an insertion
            // reference node. Instead, we clone the node on-demand before creating
            // associated DOM element for it.
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        vnode.isRootInsert = !nested; // for transition enter check
        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
            return;
        }
        const data = vnode.data;
        const children = vnode.children;
        const tag = vnode.tag;
        if (isDef(tag)) {
            {
                if (data && data.pre) {
                    creatingElmInVPre++;
                }
                if (isUnknownElement(vnode, creatingElmInVPre)) {
                    warn$2('Unknown custom element: <' +
                        tag +
                        '> - did you ' +
                        'register the component correctly? For recursive components, ' +
                        'make sure to provide the "name" option.', vnode.context);
                }
            }
            vnode.elm = vnode.ns
                ? nodeOps.createElementNS(vnode.ns, tag)
                : nodeOps.createElement(tag, vnode);
            setScope(vnode);
            createChildren(vnode, children, insertedVnodeQueue);
            if (isDef(data)) {
                invokeCreateHooks(vnode, insertedVnodeQueue);
            }
            insert(parentElm, vnode.elm, refElm);
            if (data && data.pre) {
                creatingElmInVPre--;
            }
        }
        else if (isTrue(vnode.isComment)) {
            vnode.elm = nodeOps.createComment(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
        else {
            vnode.elm = nodeOps.createTextNode(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
    }
    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        let i = vnode.data;
        if (isDef(i)) {
            const isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
            if (isDef((i = i.hook)) && isDef((i = i.init))) {
                i(vnode, false /* hydrating */);
            }
            // after calling the init hook, if the vnode is a child component
            // it should've created a child instance and mounted it. the child
            // component also has set the placeholder vnode's elm.
            // in that case we can just return the element and be done.
            if (isDef(vnode.componentInstance)) {
                initComponent(vnode, insertedVnodeQueue);
                insert(parentElm, vnode.elm, refElm);
                if (isTrue(isReactivated)) {
                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
                }
                return true;
            }
        }
    }
    function initComponent(vnode, insertedVnodeQueue) {
        if (isDef(vnode.data.pendingInsert)) {
            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
            vnode.data.pendingInsert = null;
        }
        vnode.elm = vnode.componentInstance.$el;
        if (isPatchable(vnode)) {
            invokeCreateHooks(vnode, insertedVnodeQueue);
            setScope(vnode);
        }
        else {
            // empty component root.
            // skip all element-related modules except for ref (#3455)
            registerRef(vnode);
            // make sure to invoke the insert hook
            insertedVnodeQueue.push(vnode);
        }
    }
    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        let i;
        // hack for #4339: a reactivated component with inner transition
        // does not trigger because the inner node's created hooks are not called
        // again. It's not ideal to involve module-specific logic in here but
        // there doesn't seem to be a better way to do it.
        let innerNode = vnode;
        while (innerNode.componentInstance) {
            innerNode = innerNode.componentInstance._vnode;
            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
                for (i = 0; i < cbs.activate.length; ++i) {
                    cbs.activate[i](emptyNode, innerNode);
                }
                insertedVnodeQueue.push(innerNode);
                break;
            }
        }
        // unlike a newly created component,
        // a reactivated keep-alive component doesn't insert itself
        insert(parentElm, vnode.elm, refElm);
    }
    function insert(parent, elm, ref) {
        if (isDef(parent)) {
            if (isDef(ref)) {
                if (nodeOps.parentNode(ref) === parent) {
                    nodeOps.insertBefore(parent, elm, ref);
                }
            }
            else {
                nodeOps.appendChild(parent, elm);
            }
        }
    }
    function createChildren(vnode, children, insertedVnodeQueue) {
        if (isArray(children)) {
            {
                checkDuplicateKeys(children);
            }
            for (let i = 0; i < children.length; ++i) {
                createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);
            }
        }
        else if (isPrimitive(vnode.text)) {
            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
        }
    }
    function isPatchable(vnode) {
        while (vnode.componentInstance) {
            vnode = vnode.componentInstance._vnode;
        }
        return isDef(vnode.tag);
    }
    function invokeCreateHooks(vnode, insertedVnodeQueue) {
        for (let i = 0; i < cbs.create.length; ++i) {
            cbs.create[i](emptyNode, vnode);
        }
        i = vnode.data.hook; // Reuse variable
        if (isDef(i)) {
            if (isDef(i.create))
                i.create(emptyNode, vnode);
            if (isDef(i.insert))
                insertedVnodeQueue.push(vnode);
        }
    }
    // set scope id attribute for scoped CSS.
    // this is implemented as a special case to avoid the overhead
    // of going through the normal attribute patching process.
    function setScope(vnode) {
        let i;
        if (isDef((i = vnode.fnScopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
        else {
            let ancestor = vnode;
            while (ancestor) {
                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
                    nodeOps.setStyleScope(vnode.elm, i);
                }
                ancestor = ancestor.parent;
            }
        }
        // for slot content they should also get the scopeId from the host instance.
        if (isDef((i = activeInstance)) &&
            i !== vnode.context &&
            i !== vnode.fnContext &&
            isDef((i = i.$options._scopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
    }
    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
        for (; startIdx <= endIdx; ++startIdx) {
            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
        }
    }
    function invokeDestroyHook(vnode) {
        let i, j;
        const data = vnode.data;
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.destroy)))
                i(vnode);
            for (i = 0; i < cbs.destroy.length; ++i)
                cbs.destroy[i](vnode);
        }
        if (isDef((i = vnode.children))) {
            for (j = 0; j < vnode.children.length; ++j) {
                invokeDestroyHook(vnode.children[j]);
            }
        }
    }
    function removeVnodes(vnodes, startIdx, endIdx) {
        for (; startIdx <= endIdx; ++startIdx) {
            const ch = vnodes[startIdx];
            if (isDef(ch)) {
                if (isDef(ch.tag)) {
                    removeAndInvokeRemoveHook(ch);
                    invokeDestroyHook(ch);
                }
                else {
                    // Text node
                    removeNode(ch.elm);
                }
            }
        }
    }
    function removeAndInvokeRemoveHook(vnode, rm) {
        if (isDef(rm) || isDef(vnode.data)) {
            let i;
            const listeners = cbs.remove.length + 1;
            if (isDef(rm)) {
                // we have a recursively passed down rm callback
                // increase the listeners count
                rm.listeners += listeners;
            }
            else {
                // directly removing
                rm = createRmCb(vnode.elm, listeners);
            }
            // recursively invoke hooks on child component root node
            if (isDef((i = vnode.componentInstance)) &&
                isDef((i = i._vnode)) &&
                isDef(i.data)) {
                removeAndInvokeRemoveHook(i, rm);
            }
            for (i = 0; i < cbs.remove.length; ++i) {
                cbs.remove[i](vnode, rm);
            }
            if (isDef((i = vnode.data.hook)) && isDef((i = i.remove))) {
                i(vnode, rm);
            }
            else {
                rm();
            }
        }
        else {
            removeNode(vnode.elm);
        }
    }
    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
        let oldStartIdx = 0;
        let newStartIdx = 0;
        let oldEndIdx = oldCh.length - 1;
        let oldStartVnode = oldCh[0];
        let oldEndVnode = oldCh[oldEndIdx];
        let newEndIdx = newCh.length - 1;
        let newStartVnode = newCh[0];
        let newEndVnode = newCh[newEndIdx];
        let oldKeyToIdx, idxInOld, vnodeToMove, refElm;
        // removeOnly is a special flag used only by <transition-group>
        // to ensure removed elements stay in correct relative positions
        // during leaving transitions
        const canMove = !removeOnly;
        {
            checkDuplicateKeys(newCh);
        }
        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
            if (isUndef(oldStartVnode)) {
                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
            }
            else if (isUndef(oldEndVnode)) {
                oldEndVnode = oldCh[--oldEndIdx];
            }
            else if (sameVnode(oldStartVnode, newStartVnode)) {
                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                oldStartVnode = oldCh[++oldStartIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else if (sameVnode(oldEndVnode, newEndVnode)) {
                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                oldEndVnode = oldCh[--oldEndIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldStartVnode, newEndVnode)) {
                // Vnode moved right
                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
                oldStartVnode = oldCh[++oldStartIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldEndVnode, newStartVnode)) {
                // Vnode moved left
                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
                oldEndVnode = oldCh[--oldEndIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else {
                if (isUndef(oldKeyToIdx))
                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
                idxInOld = isDef(newStartVnode.key)
                    ? oldKeyToIdx[newStartVnode.key]
                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
                if (isUndef(idxInOld)) {
                    // New element
                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                }
                else {
                    vnodeToMove = oldCh[idxInOld];
                    if (sameVnode(vnodeToMove, newStartVnode)) {
                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                        oldCh[idxInOld] = undefined;
                        canMove &&
                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
                    }
                    else {
                        // same key but different element. treat as new element
                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                    }
                }
                newStartVnode = newCh[++newStartIdx];
            }
        }
        if (oldStartIdx > oldEndIdx) {
            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
        }
        else if (newStartIdx > newEndIdx) {
            removeVnodes(oldCh, oldStartIdx, oldEndIdx);
        }
    }
    function checkDuplicateKeys(children) {
        const seenKeys = {};
        for (let i = 0; i < children.length; i++) {
            const vnode = children[i];
            const key = vnode.key;
            if (isDef(key)) {
                if (seenKeys[key]) {
                    warn$2(`Duplicate keys detected: '${key}'. This may cause an update error.`, vnode.context);
                }
                else {
                    seenKeys[key] = true;
                }
            }
        }
    }
    function findIdxInOld(node, oldCh, start, end) {
        for (let i = start; i < end; i++) {
            const c = oldCh[i];
            if (isDef(c) && sameVnode(node, c))
                return i;
        }
    }
    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
        if (oldVnode === vnode) {
            return;
        }
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // clone reused vnode
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        const elm = (vnode.elm = oldVnode.elm);
        if (isTrue(oldVnode.isAsyncPlaceholder)) {
            if (isDef(vnode.asyncFactory.resolved)) {
                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
            }
            else {
                vnode.isAsyncPlaceholder = true;
            }
            return;
        }
        // reuse element for static trees.
        // note we only do this if the vnode is cloned -
        // if the new node is not cloned it means the render functions have been
        // reset by the hot-reload-api and we need to do a proper re-render.
        if (isTrue(vnode.isStatic) &&
            isTrue(oldVnode.isStatic) &&
            vnode.key === oldVnode.key &&
            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
            vnode.componentInstance = oldVnode.componentInstance;
            return;
        }
        let i;
        const data = vnode.data;
        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
            i(oldVnode, vnode);
        }
        const oldCh = oldVnode.children;
        const ch = vnode.children;
        if (isDef(data) && isPatchable(vnode)) {
            for (i = 0; i < cbs.update.length; ++i)
                cbs.update[i](oldVnode, vnode);
            if (isDef((i = data.hook)) && isDef((i = i.update)))
                i(oldVnode, vnode);
        }
        if (isUndef(vnode.text)) {
            if (isDef(oldCh) && isDef(ch)) {
                if (oldCh !== ch)
                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
            }
            else if (isDef(ch)) {
                {
                    checkDuplicateKeys(ch);
                }
                if (isDef(oldVnode.text))
                    nodeOps.setTextContent(elm, '');
                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
            }
            else if (isDef(oldCh)) {
                removeVnodes(oldCh, 0, oldCh.length - 1);
            }
            else if (isDef(oldVnode.text)) {
                nodeOps.setTextContent(elm, '');
            }
        }
        else if (oldVnode.text !== vnode.text) {
            nodeOps.setTextContent(elm, vnode.text);
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
                i(oldVnode, vnode);
        }
    }
    function invokeInsertHook(vnode, queue, initial) {
        // delay insert hooks for component root nodes, invoke them after the
        // element is really inserted
        if (isTrue(initial) && isDef(vnode.parent)) {
            vnode.parent.data.pendingInsert = queue;
        }
        else {
            for (let i = 0; i < queue.length; ++i) {
                queue[i].data.hook.insert(queue[i]);
            }
        }
    }
    let hydrationBailed = false;
    // list of modules that can skip create hook during hydration because they
    // are already rendered on the client or has no need for initialization
    // Note: style is excluded because it relies on initial clone for future
    // deep updates (#7063).
    const isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
    // Note: this is a browser-only function so we can assume elms are DOM nodes.
    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
        let i;
        const { tag, data, children } = vnode;
        inVPre = inVPre || (data && data.pre);
        vnode.elm = elm;
        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
            vnode.isAsyncPlaceholder = true;
            return true;
        }
        // assert node match
        {
            if (!assertNodeMatch(elm, vnode, inVPre)) {
                return false;
            }
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.init)))
                i(vnode, true /* hydrating */);
            if (isDef((i = vnode.componentInstance))) {
                // child component. it should have hydrated its own tree.
                initComponent(vnode, insertedVnodeQueue);
                return true;
            }
        }
        if (isDef(tag)) {
            if (isDef(children)) {
                // empty element, allow client to pick up and populate children
                if (!elm.hasChildNodes()) {
                    createChildren(vnode, children, insertedVnodeQueue);
                }
                else {
                    // v-html and domProps: innerHTML
                    if (isDef((i = data)) &&
                        isDef((i = i.domProps)) &&
                        isDef((i = i.innerHTML))) {
                        if (i !== elm.innerHTML) {
                            /* istanbul ignore if */
                            if (typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('server innerHTML: ', i);
                                console.warn('client innerHTML: ', elm.innerHTML);
                            }
                            return false;
                        }
                    }
                    else {
                        // iterate and compare children lists
                        let childrenMatch = true;
                        let childNode = elm.firstChild;
                        for (let i = 0; i < children.length; i++) {
                            if (!childNode ||
                                !hydrate(childNode, children[i], insertedVnodeQueue, inVPre)) {
                                childrenMatch = false;
                                break;
                            }
                            childNode = childNode.nextSibling;
                        }
                        // if childNode is not null, it means the actual childNodes list is
                        // longer than the virtual children list.
                        if (!childrenMatch || childNode) {
                            /* istanbul ignore if */
                            if (typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
                            }
                            return false;
                        }
                    }
                }
            }
            if (isDef(data)) {
                let fullInvoke = false;
                for (const key in data) {
                    if (!isRenderedModule(key)) {
                        fullInvoke = true;
                        invokeCreateHooks(vnode, insertedVnodeQueue);
                        break;
                    }
                }
                if (!fullInvoke && data['class']) {
                    // ensure collecting deps for deep class bindings for future updates
                    traverse(data['class']);
                }
            }
        }
        else if (elm.data !== vnode.text) {
            elm.data = vnode.text;
        }
        return true;
    }
    function assertNodeMatch(node, vnode, inVPre) {
        if (isDef(vnode.tag)) {
            return (vnode.tag.indexOf('vue-component') === 0 ||
                (!isUnknownElement(vnode, inVPre) &&
                    vnode.tag.toLowerCase() ===
                        (node.tagName && node.tagName.toLowerCase())));
        }
        else {
            return node.nodeType === (vnode.isComment ? 8 : 3);
        }
    }
    return function patch(oldVnode, vnode, hydrating, removeOnly) {
        if (isUndef(vnode)) {
            if (isDef(oldVnode))
                invokeDestroyHook(oldVnode);
            return;
        }
        let isInitialPatch = false;
        const insertedVnodeQueue = [];
        if (isUndef(oldVnode)) {
            // empty mount (likely as component), create new root element
            isInitialPatch = true;
            createElm(vnode, insertedVnodeQueue);
        }
        else {
            const isRealElement = isDef(oldVnode.nodeType);
            if (!isRealElement && sameVnode(oldVnode, vnode)) {
                // patch existing root node
                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
            }
            else {
                if (isRealElement) {
                    // mounting to a real element
                    // check if this is server-rendered content and if we can perform
                    // a successful hydration.
                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
                        oldVnode.removeAttribute(SSR_ATTR);
                        hydrating = true;
                    }
                    if (isTrue(hydrating)) {
                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
                            invokeInsertHook(vnode, insertedVnodeQueue, true);
                            return oldVnode;
                        }
                        else {
                            warn$2('The client-side rendered virtual DOM tree is not matching ' +
                                'server-rendered content. This is likely caused by incorrect ' +
                                'HTML markup, for example nesting block-level elements inside ' +
                                '<p>, or missing <tbody>. Bailing hydration and performing ' +
                                'full client-side render.');
                        }
                    }
                    // either not server-rendered, or hydration failed.
                    // create an empty node and replace it
                    oldVnode = emptyNodeAt(oldVnode);
                }
                // replacing existing element
                const oldElm = oldVnode.elm;
                const parentElm = nodeOps.parentNode(oldElm);
                // create new node
                createElm(vnode, insertedVnodeQueue, 
                // extremely rare edge case: do not insert if old element is in a
                // leaving transition. Only happens when combining transition +
                // keep-alive + HOCs. (#4590)
                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
                // update parent placeholder node element, recursively
                if (isDef(vnode.parent)) {
                    let ancestor = vnode.parent;
                    const patchable = isPatchable(vnode);
                    while (ancestor) {
                        for (let i = 0; i < cbs.destroy.length; ++i) {
                            cbs.destroy[i](ancestor);
                        }
                        ancestor.elm = vnode.elm;
                        if (patchable) {
                            for (let i = 0; i < cbs.create.length; ++i) {
                                cbs.create[i](emptyNode, ancestor);
                            }
                            // #6513
                            // invoke insert hooks that may have been merged by create hooks.
                            // e.g. for directives that uses the "inserted" hook.
                            const insert = ancestor.data.hook.insert;
                            if (insert.merged) {
                                // start at index 1 to avoid re-invoking component mounted hook
                                for (let i = 1; i < insert.fns.length; i++) {
                                    insert.fns[i]();
                                }
                            }
                        }
                        else {
                            registerRef(ancestor);
                        }
                        ancestor = ancestor.parent;
                    }
                }
                // destroy old node
                if (isDef(parentElm)) {
                    removeVnodes([oldVnode], 0, 0);
                }
                else if (isDef(oldVnode.tag)) {
                    invokeDestroyHook(oldVnode);
                }
            }
        }
        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
        return vnode.elm;
    };
}

var directives$1 = {
    create: updateDirectives,
    update: updateDirectives,
    destroy: function unbindDirectives(vnode) {
        // @ts-expect-error emptyNode is not VNodeWithData
        updateDirectives(vnode, emptyNode);
    }
};
function updateDirectives(oldVnode, vnode) {
    if (oldVnode.data.directives || vnode.data.directives) {
        _update(oldVnode, vnode);
    }
}
function _update(oldVnode, vnode) {
    const isCreate = oldVnode === emptyNode;
    const isDestroy = vnode === emptyNode;
    const oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
    const newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
    const dirsWithInsert = [];
    const dirsWithPostpatch = [];
    let key, oldDir, dir;
    for (key in newDirs) {
        oldDir = oldDirs[key];
        dir = newDirs[key];
        if (!oldDir) {
            // new directive, bind
            callHook(dir, 'bind', vnode, oldVnode);
            if (dir.def && dir.def.inserted) {
                dirsWithInsert.push(dir);
            }
        }
        else {
            // existing directive, update
            dir.oldValue = oldDir.value;
            dir.oldArg = oldDir.arg;
            callHook(dir, 'update', vnode, oldVnode);
            if (dir.def && dir.def.componentUpdated) {
                dirsWithPostpatch.push(dir);
            }
        }
    }
    if (dirsWithInsert.length) {
        const callInsert = () => {
            for (let i = 0; i < dirsWithInsert.length; i++) {
                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
            }
        };
        if (isCreate) {
            mergeVNodeHook(vnode, 'insert', callInsert);
        }
        else {
            callInsert();
        }
    }
    if (dirsWithPostpatch.length) {
        mergeVNodeHook(vnode, 'postpatch', () => {
            for (let i = 0; i < dirsWithPostpatch.length; i++) {
                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
            }
        });
    }
    if (!isCreate) {
        for (key in oldDirs) {
            if (!newDirs[key]) {
                // no longer present, unbind
                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
            }
        }
    }
}
const emptyModifiers = Object.create(null);
function normalizeDirectives(dirs, vm) {
    const res = Object.create(null);
    if (!dirs) {
        // $flow-disable-line
        return res;
    }
    let i, dir;
    for (i = 0; i < dirs.length; i++) {
        dir = dirs[i];
        if (!dir.modifiers) {
            // $flow-disable-line
            dir.modifiers = emptyModifiers;
        }
        res[getRawDirName(dir)] = dir;
        if (vm._setupState && vm._setupState.__sfc) {
            const setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
            if (typeof setupDef === 'function') {
                dir.def = {
                    bind: setupDef,
                    update: setupDef,
                };
            }
            else {
                dir.def = setupDef;
            }
        }
        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
    }
    // $flow-disable-line
    return res;
}
function getRawDirName(dir) {
    return (dir.rawName || `${dir.name}.${Object.keys(dir.modifiers || {}).join('.')}`);
}
function callHook(dir, hook, vnode, oldVnode, isDestroy) {
    const fn = dir.def && dir.def[hook];
    if (fn) {
        try {
            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
        }
        catch (e) {
            handleError(e, vnode.context, `directive ${dir.name} ${hook} hook`);
        }
    }
}

var baseModules = [ref, directives$1];

function updateAttrs(oldVnode, vnode) {
    const opts = vnode.componentOptions;
    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
        return;
    }
    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
        return;
    }
    let key, cur, old;
    const elm = vnode.elm;
    const oldAttrs = oldVnode.data.attrs || {};
    let attrs = vnode.data.attrs || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
        attrs = vnode.data.attrs = extend({}, attrs);
    }
    for (key in attrs) {
        cur = attrs[key];
        old = oldAttrs[key];
        if (old !== cur) {
            setAttr(elm, key, cur, vnode.data.pre);
        }
    }
    // #4391: in IE9, setting type can reset value for input[type=radio]
    // #6666: IE/Edge forces progress value down to 1 before setting a max
    /* istanbul ignore if */
    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
        setAttr(elm, 'value', attrs.value);
    }
    for (key in oldAttrs) {
        if (isUndef(attrs[key])) {
            if (isXlink(key)) {
                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
            }
            else if (!isEnumeratedAttr(key)) {
                elm.removeAttribute(key);
            }
        }
    }
}
function setAttr(el, key, value, isInPre) {
    if (isInPre || el.tagName.indexOf('-') > -1) {
        baseSetAttr(el, key, value);
    }
    else if (isBooleanAttr(key)) {
        // set attribute for blank value
        // e.g. <option disabled>Select one</option>
        if (isFalsyAttrValue(value)) {
            el.removeAttribute(key);
        }
        else {
            // technically allowfullscreen is a boolean attribute for <iframe>,
            // but Flash expects a value of "true" when used on <embed> tag
            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
            el.setAttribute(key, value);
        }
    }
    else if (isEnumeratedAttr(key)) {
        el.setAttribute(key, convertEnumeratedValue(key, value));
    }
    else if (isXlink(key)) {
        if (isFalsyAttrValue(value)) {
            el.removeAttributeNS(xlinkNS, getXlinkProp(key));
        }
        else {
            el.setAttributeNS(xlinkNS, key, value);
        }
    }
    else {
        baseSetAttr(el, key, value);
    }
}
function baseSetAttr(el, key, value) {
    if (isFalsyAttrValue(value)) {
        el.removeAttribute(key);
    }
    else {
        // #7138: IE10 & 11 fires input event when setting placeholder on
        // <textarea>... block the first input event and remove the blocker
        // immediately.
        /* istanbul ignore if */
        if (isIE &&
            !isIE9 &&
            el.tagName === 'TEXTAREA' &&
            key === 'placeholder' &&
            value !== '' &&
            !el.__ieph) {
            const blocker = e => {
                e.stopImmediatePropagation();
                el.removeEventListener('input', blocker);
            };
            el.addEventListener('input', blocker);
            // $flow-disable-line
            el.__ieph = true; /* IE placeholder patched */
        }
        el.setAttribute(key, value);
    }
}
var attrs = {
    create: updateAttrs,
    update: updateAttrs
};

function updateClass(oldVnode, vnode) {
    const el = vnode.elm;
    const data = vnode.data;
    const oldData = oldVnode.data;
    if (isUndef(data.staticClass) &&
        isUndef(data.class) &&
        (isUndef(oldData) ||
            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
        return;
    }
    let cls = genClassForVnode(vnode);
    // handle transition classes
    const transitionClass = el._transitionClasses;
    if (isDef(transitionClass)) {
        cls = concat(cls, stringifyClass(transitionClass));
    }
    // set the class
    if (cls !== el._prevClass) {
        el.setAttribute('class', cls);
        el._prevClass = cls;
    }
}
var klass$1 = {
    create: updateClass,
    update: updateClass
};

const validDivisionCharRE = /[\w).+\-_$\]]/;
function parseFilters(exp) {
    let inSingle = false;
    let inDouble = false;
    let inTemplateString = false;
    let inRegex = false;
    let curly = 0;
    let square = 0;
    let paren = 0;
    let lastFilterIndex = 0;
    let c, prev, i, expression, filters;
    for (i = 0; i < exp.length; i++) {
        prev = c;
        c = exp.charCodeAt(i);
        if (inSingle) {
            if (c === 0x27 && prev !== 0x5c)
                inSingle = false;
        }
        else if (inDouble) {
            if (c === 0x22 && prev !== 0x5c)
                inDouble = false;
        }
        else if (inTemplateString) {
            if (c === 0x60 && prev !== 0x5c)
                inTemplateString = false;
        }
        else if (inRegex) {
            if (c === 0x2f && prev !== 0x5c)
                inRegex = false;
        }
        else if (c === 0x7c && // pipe
            exp.charCodeAt(i + 1) !== 0x7c &&
            exp.charCodeAt(i - 1) !== 0x7c &&
            !curly &&
            !square &&
            !paren) {
            if (expression === undefined) {
                // first filter, end of expression
                lastFilterIndex = i + 1;
                expression = exp.slice(0, i).trim();
            }
            else {
                pushFilter();
            }
        }
        else {
            switch (c) {
                case 0x22:
                    inDouble = true;
                    break; // "
                case 0x27:
                    inSingle = true;
                    break; // '
                case 0x60:
                    inTemplateString = true;
                    break; // `
                case 0x28:
                    paren++;
                    break; // (
                case 0x29:
                    paren--;
                    break; // )
                case 0x5b:
                    square++;
                    break; // [
                case 0x5d:
                    square--;
                    break; // ]
                case 0x7b:
                    curly++;
                    break; // {
                case 0x7d:
                    curly--;
                    break; // }
            }
            if (c === 0x2f) {
                // /
                let j = i - 1;
                let p;
                // find first non-whitespace prev char
                for (; j >= 0; j--) {
                    p = exp.charAt(j);
                    if (p !== ' ')
                        break;
                }
                if (!p || !validDivisionCharRE.test(p)) {
                    inRegex = true;
                }
            }
        }
    }
    if (expression === undefined) {
        expression = exp.slice(0, i).trim();
    }
    else if (lastFilterIndex !== 0) {
        pushFilter();
    }
    function pushFilter() {
        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
        lastFilterIndex = i + 1;
    }
    if (filters) {
        for (i = 0; i < filters.length; i++) {
            expression = wrapFilter(expression, filters[i]);
        }
    }
    return expression;
}
function wrapFilter(exp, filter) {
    const i = filter.indexOf('(');
    if (i < 0) {
        // _f: resolveFilter
        return `_f("${filter}")(${exp})`;
    }
    else {
        const name = filter.slice(0, i);
        const args = filter.slice(i + 1);
        return `_f("${name}")(${exp}${args !== ')' ? ',' + args : args}`;
    }
}

/* eslint-disable no-unused-vars */
function baseWarn(msg, range) {
    console.error(`[Vue compiler]: ${msg}`);
}
/* eslint-enable no-unused-vars */
function pluckModuleFunction(modules, key) {
    return modules ? modules.map(m => m[key]).filter(_ => _) : [];
}
function addProp(el, name, value, range, dynamic) {
    (el.props || (el.props = [])).push(rangeSetItem({ name, value, dynamic }, range));
    el.plain = false;
}
function addAttr(el, name, value, range, dynamic) {
    const attrs = dynamic
        ? el.dynamicAttrs || (el.dynamicAttrs = [])
        : el.attrs || (el.attrs = []);
    attrs.push(rangeSetItem({ name, value, dynamic }, range));
    el.plain = false;
}
// add a raw attr (use this in preTransforms)
function addRawAttr(el, name, value, range) {
    el.attrsMap[name] = value;
    el.attrsList.push(rangeSetItem({ name, value }, range));
}
function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
    (el.directives || (el.directives = [])).push(rangeSetItem({
        name,
        rawName,
        value,
        arg,
        isDynamicArg,
        modifiers
    }, range));
    el.plain = false;
}
function prependModifierMarker(symbol, name, dynamic) {
    return dynamic ? `_p(${name},"${symbol}")` : symbol + name; // mark the event as captured
}
function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
    modifiers = modifiers || emptyObject;
    // warn prevent and passive modifier
    /* istanbul ignore if */
    if (warn && modifiers.prevent && modifiers.passive) {
        warn("passive and prevent can't be used together. " +
            "Passive handler can't prevent default event.", range);
    }
    // normalize click.right and click.middle since they don't actually fire
    // this is technically browser-specific, but at least for now browsers are
    // the only target envs that have right/middle clicks.
    if (modifiers.right) {
        if (dynamic) {
            name = `(${name})==='click'?'contextmenu':(${name})`;
        }
        else if (name === 'click') {
            name = 'contextmenu';
            delete modifiers.right;
        }
    }
    else if (modifiers.middle) {
        if (dynamic) {
            name = `(${name})==='click'?'mouseup':(${name})`;
        }
        else if (name === 'click') {
            name = 'mouseup';
        }
    }
    // check capture modifier
    if (modifiers.capture) {
        delete modifiers.capture;
        name = prependModifierMarker('!', name, dynamic);
    }
    if (modifiers.once) {
        delete modifiers.once;
        name = prependModifierMarker('~', name, dynamic);
    }
    /* istanbul ignore if */
    if (modifiers.passive) {
        delete modifiers.passive;
        name = prependModifierMarker('&', name, dynamic);
    }
    let events;
    if (modifiers.native) {
        delete modifiers.native;
        events = el.nativeEvents || (el.nativeEvents = {});
    }
    else {
        events = el.events || (el.events = {});
    }
    const newHandler = rangeSetItem({ value: value.trim(), dynamic }, range);
    if (modifiers !== emptyObject) {
        newHandler.modifiers = modifiers;
    }
    const handlers = events[name];
    /* istanbul ignore if */
    if (Array.isArray(handlers)) {
        important ? handlers.unshift(newHandler) : handlers.push(newHandler);
    }
    else if (handlers) {
        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
    }
    else {
        events[name] = newHandler;
    }
    el.plain = false;
}
function getRawBindingAttr(el, name) {
    return (el.rawAttrsMap[':' + name] ||
        el.rawAttrsMap['v-bind:' + name] ||
        el.rawAttrsMap[name]);
}
function getBindingAttr(el, name, getStatic) {
    const dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
    if (dynamicValue != null) {
        return parseFilters(dynamicValue);
    }
    else if (getStatic !== false) {
        const staticValue = getAndRemoveAttr(el, name);
        if (staticValue != null) {
            return JSON.stringify(staticValue);
        }
    }
}
// note: this only removes the attr from the Array (attrsList) so that it
// doesn't get processed by processAttrs.
// By default it does NOT remove it from the map (attrsMap) because the map is
// needed during codegen.
function getAndRemoveAttr(el, name, removeFromMap) {
    let val;
    if ((val = el.attrsMap[name]) != null) {
        const list = el.attrsList;
        for (let i = 0, l = list.length; i < l; i++) {
            if (list[i].name === name) {
                list.splice(i, 1);
                break;
            }
        }
    }
    if (removeFromMap) {
        delete el.attrsMap[name];
    }
    return val;
}
function getAndRemoveAttrByRegex(el, name) {
    const list = el.attrsList;
    for (let i = 0, l = list.length; i < l; i++) {
        const attr = list[i];
        if (name.test(attr.name)) {
            list.splice(i, 1);
            return attr;
        }
    }
}
function rangeSetItem(item, range) {
    if (range) {
        if (range.start != null) {
            item.start = range.start;
        }
        if (range.end != null) {
            item.end = range.end;
        }
    }
    return item;
}

/**
 * Cross-platform code generation for component v-model
 */
function genComponentModel(el, value, modifiers) {
    const { number, trim } = modifiers || {};
    const baseValueExpression = '$$v';
    let valueExpression = baseValueExpression;
    if (trim) {
        valueExpression =
            `(typeof ${baseValueExpression} === 'string'` +
                `? ${baseValueExpression}.trim()` +
                `: ${baseValueExpression})`;
    }
    if (number) {
        valueExpression = `_n(${valueExpression})`;
    }
    const assignment = genAssignmentCode(value, valueExpression);
    el.model = {
        value: `(${value})`,
        expression: JSON.stringify(value),
        callback: `function (${baseValueExpression}) {${assignment}}`
    };
}
/**
 * Cross-platform codegen helper for generating v-model value assignment code.
 */
function genAssignmentCode(value, assignment) {
    const res = parseModel(value);
    if (res.key === null) {
        return `${value}=${assignment}`;
    }
    else {
        return `$set(${res.exp}, ${res.key}, ${assignment})`;
    }
}
/**
 * Parse a v-model expression into a base path and a final key segment.
 * Handles both dot-path and possible square brackets.
 *
 * Possible cases:
 *
 * - test
 * - test[key]
 * - test[test1[key]]
 * - test["a"][key]
 * - xxx.test[a[a].test1[key]]
 * - test.xxx.a["asa"][test1[key]]
 *
 */
let len, str, chr, index, expressionPos, expressionEndPos;
function parseModel(val) {
    // Fix https://github.com/vuejs/vue/pull/7730
    // allow v-model="obj.val " (trailing whitespace)
    val = val.trim();
    len = val.length;
    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
        index = val.lastIndexOf('.');
        if (index > -1) {
            return {
                exp: val.slice(0, index),
                key: '"' + val.slice(index + 1) + '"'
            };
        }
        else {
            return {
                exp: val,
                key: null
            };
        }
    }
    str = val;
    index = expressionPos = expressionEndPos = 0;
    while (!eof()) {
        chr = next();
        /* istanbul ignore if */
        if (isStringStart(chr)) {
            parseString(chr);
        }
        else if (chr === 0x5b) {
            parseBracket(chr);
        }
    }
    return {
        exp: val.slice(0, expressionPos),
        key: val.slice(expressionPos + 1, expressionEndPos)
    };
}
function next() {
    return str.charCodeAt(++index);
}
function eof() {
    return index >= len;
}
function isStringStart(chr) {
    return chr === 0x22 || chr === 0x27;
}
function parseBracket(chr) {
    let inBracket = 1;
    expressionPos = index;
    while (!eof()) {
        chr = next();
        if (isStringStart(chr)) {
            parseString(chr);
            continue;
        }
        if (chr === 0x5b)
            inBracket++;
        if (chr === 0x5d)
            inBracket--;
        if (inBracket === 0) {
            expressionEndPos = index;
            break;
        }
    }
}
function parseString(chr) {
    const stringQuote = chr;
    while (!eof()) {
        chr = next();
        if (chr === stringQuote) {
            break;
        }
    }
}

let warn$1;
// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
const RANGE_TOKEN = '__r';
const CHECKBOX_RADIO_TOKEN = '__c';
function model$1(el, dir, _warn) {
    warn$1 = _warn;
    const value = dir.value;
    const modifiers = dir.modifiers;
    const tag = el.tag;
    const type = el.attrsMap.type;
    {
        // inputs with type="file" are read only and setting the input's
        // value will throw an error.
        if (tag === 'input' && type === 'file') {
            warn$1(`<${el.tag} v-model="${value}" type="file">:\n` +
                `File inputs are read only. Use a v-on:change listener instead.`, el.rawAttrsMap['v-model']);
        }
    }
    if (el.component) {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    else if (tag === 'select') {
        genSelect(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'checkbox') {
        genCheckboxModel(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'radio') {
        genRadioModel(el, value, modifiers);
    }
    else if (tag === 'input' || tag === 'textarea') {
        genDefaultModel(el, value, modifiers);
    }
    else if (!config.isReservedTag(tag)) {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    else {
        warn$1(`<${el.tag} v-model="${value}">: ` +
            `v-model is not supported on this element type. ` +
            "If you are working with contenteditable, it's recommended to " +
            'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);
    }
    // ensure runtime directive metadata
    return true;
}
function genCheckboxModel(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    const valueBinding = getBindingAttr(el, 'value') || 'null';
    const trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
    const falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
    addProp(el, 'checked', `Array.isArray(${value})` +
        `?_i(${value},${valueBinding})>-1` +
        (trueValueBinding === 'true'
            ? `:(${value})`
            : `:_q(${value},${trueValueBinding})`));
    addHandler(el, 'change', `var $$a=${value},` +
        '$$el=$event.target,' +
        `$$c=$$el.checked?(${trueValueBinding}):(${falseValueBinding});` +
        'if(Array.isArray($$a)){' +
        `var $$v=${number ? '_n(' + valueBinding + ')' : valueBinding},` +
        '$$i=_i($$a,$$v);' +
        `if($$el.checked){$$i<0&&(${genAssignmentCode(value, '$$a.concat([$$v])')})}` +
        `else{$$i>-1&&(${genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')})}` +
        `}else{${genAssignmentCode(value, '$$c')}}`, null, true);
}
function genRadioModel(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    let valueBinding = getBindingAttr(el, 'value') || 'null';
    valueBinding = number ? `_n(${valueBinding})` : valueBinding;
    addProp(el, 'checked', `_q(${value},${valueBinding})`);
    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
}
function genSelect(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    const selectedVal = `Array.prototype.filter` +
        `.call($event.target.options,function(o){return o.selected})` +
        `.map(function(o){var val = "_value" in o ? o._value : o.value;` +
        `return ${number ? '_n(val)' : 'val'}})`;
    const assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
    let code = `var $$selectedVal = ${selectedVal};`;
    code = `${code} ${genAssignmentCode(value, assignment)}`;
    addHandler(el, 'change', code, null, true);
}
function genDefaultModel(el, value, modifiers) {
    const type = el.attrsMap.type;
    // warn if v-bind:value conflicts with v-model
    // except for inputs with v-bind:type
    {
        const value = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
        const typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
        if (value && !typeBinding) {
            const binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
            warn$1(`${binding}="${value}" conflicts with v-model on the same element ` +
                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
        }
    }
    const { lazy, number, trim } = modifiers || {};
    const needCompositionGuard = !lazy && type !== 'range';
    const event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
    let valueExpression = '$event.target.value';
    if (trim) {
        valueExpression = `$event.target.value.trim()`;
    }
    if (number) {
        valueExpression = `_n(${valueExpression})`;
    }
    let code = genAssignmentCode(value, valueExpression);
    if (needCompositionGuard) {
        code = `if($event.target.composing)return;${code}`;
    }
    addProp(el, 'value', `(${value})`);
    addHandler(el, event, code, null, true);
    if (trim || number) {
        addHandler(el, 'blur', '$forceUpdate()');
    }
}

// normalize v-model event tokens that can only be determined at runtime.
// it's important to place the event as the first in the array because
// the whole point is ensuring the v-model callback gets called before
// user-attached handlers.
function normalizeEvents(on) {
    /* istanbul ignore if */
    if (isDef(on[RANGE_TOKEN])) {
        // IE input[type=range] only supports `change` event
        const event = isIE ? 'change' : 'input';
        on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);
        delete on[RANGE_TOKEN];
    }
    // This was originally intended to fix #4521 but no longer necessary
    // after 2.5. Keeping it for backwards compat with generated code from < 2.4
    /* istanbul ignore if */
    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
        delete on[CHECKBOX_RADIO_TOKEN];
    }
}
let target;
function createOnceHandler(event, handler, capture) {
    const _target = target; // save current target element in closure
    return function onceHandler() {
        const res = handler.apply(null, arguments);
        if (res !== null) {
            remove(event, onceHandler, capture, _target);
        }
    };
}
// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
// implementation and does not fire microtasks in between event propagation, so
// safe to exclude.
const useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
function add(name, handler, capture, passive) {
    // async edge case #6566: inner click event triggers patch, event handler
    // attached to outer element during patch, and triggered again. This
    // happens because browsers fire microtask ticks between event propagation.
    // the solution is simple: we save the timestamp when a handler is attached,
    // and the handler would only fire if the event passed to it was fired
    // AFTER it was attached.
    if (useMicrotaskFix) {
        const attachedTimestamp = currentFlushTimestamp;
        const original = handler;
        //@ts-expect-error
        handler = original._wrapper = function (e) {
            if (
            // no bubbling, should always fire.
            // this is just a safety net in case event.timeStamp is unreliable in
            // certain weird environments...
            e.target === e.currentTarget ||
                // event is fired after handler attachment
                e.timeStamp >= attachedTimestamp ||
                // bail for environments that have buggy event.timeStamp implementations
                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
                // #9681 QtWebEngine event.timeStamp is negative value
                e.timeStamp <= 0 ||
                // #9448 bail if event is fired in another document in a multi-page
                // electron/nw.js app, since event.timeStamp will be using a different
                // starting reference
                e.target.ownerDocument !== document) {
                return original.apply(this, arguments);
            }
        };
    }
    target.addEventListener(name, handler, supportsPassive ? { capture, passive } : capture);
}
function remove(name, handler, capture, _target) {
    (_target || target).removeEventListener(name, 
    //@ts-expect-error
    handler._wrapper || handler, capture);
}
function updateDOMListeners(oldVnode, vnode) {
    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
        return;
    }
    const on = vnode.data.on || {};
    const oldOn = oldVnode.data.on || {};
    // vnode is empty when removing all listeners,
    // and use old vnode dom element
    target = vnode.elm || oldVnode.elm;
    normalizeEvents(on);
    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
    target = undefined;
}
var events = {
    create: updateDOMListeners,
    update: updateDOMListeners,
    // @ts-expect-error emptyNode has actually data
    destroy: (vnode) => updateDOMListeners(vnode, emptyNode)
};

let svgContainer;
function updateDOMProps(oldVnode, vnode) {
    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
        return;
    }
    let key, cur;
    const elm = vnode.elm;
    const oldProps = oldVnode.data.domProps || {};
    let props = vnode.data.domProps || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
        props = vnode.data.domProps = extend({}, props);
    }
    for (key in oldProps) {
        if (!(key in props)) {
            elm[key] = '';
        }
    }
    for (key in props) {
        cur = props[key];
        // ignore children if the node has textContent or innerHTML,
        // as these will throw away existing DOM nodes and cause removal errors
        // on subsequent patches (#3360)
        if (key === 'textContent' || key === 'innerHTML') {
            if (vnode.children)
                vnode.children.length = 0;
            if (cur === oldProps[key])
                continue;
            // #6601 work around Chrome version <= 55 bug where single textNode
            // replaced by innerHTML/textContent retains its parentNode property
            if (elm.childNodes.length === 1) {
                elm.removeChild(elm.childNodes[0]);
            }
        }
        if (key === 'value' && elm.tagName !== 'PROGRESS') {
            // store value as _value as well since
            // non-string values will be stringified
            elm._value = cur;
            // avoid resetting cursor position when value is the same
            const strCur = isUndef(cur) ? '' : String(cur);
            if (shouldUpdateValue(elm, strCur)) {
                elm.value = strCur;
            }
        }
        else if (key === 'innerHTML' &&
            isSVG(elm.tagName) &&
            isUndef(elm.innerHTML)) {
            // IE doesn't support innerHTML for SVG elements
            svgContainer = svgContainer || document.createElement('div');
            svgContainer.innerHTML = `<svg>${cur}</svg>`;
            const svg = svgContainer.firstChild;
            while (elm.firstChild) {
                elm.removeChild(elm.firstChild);
            }
            while (svg.firstChild) {
                elm.appendChild(svg.firstChild);
            }
        }
        else if (
        // skip the update if old and new VDOM state is the same.
        // `value` is handled separately because the DOM value may be temporarily
        // out of sync with VDOM state due to focus, composition and modifiers.
        // This  #4521 by skipping the unnecessary `checked` update.
        cur !== oldProps[key]) {
            // some property updates can throw
            // e.g. `value` on <progress> w/ non-finite value
            try {
                elm[key] = cur;
            }
            catch (e) { }
        }
    }
}
function shouldUpdateValue(elm, checkVal) {
    return (
    //@ts-expect-error
    !elm.composing &&
        (elm.tagName === 'OPTION' ||
            isNotInFocusAndDirty(elm, checkVal) ||
            isDirtyWithModifiers(elm, checkVal)));
}
function isNotInFocusAndDirty(elm, checkVal) {
    // return true when textbox (.number and .trim) loses focus and its value is
    // not equal to the updated value
    let notInFocus = true;
    // #6157
    // work around IE bug when accessing document.activeElement in an iframe
    try {
        notInFocus = document.activeElement !== elm;
    }
    catch (e) { }
    return notInFocus && elm.value !== checkVal;
}
function isDirtyWithModifiers(elm, newVal) {
    const value = elm.value;
    const modifiers = elm._vModifiers; // injected by v-model runtime
    if (isDef(modifiers)) {
        if (modifiers.number) {
            return toNumber(value) !== toNumber(newVal);
        }
        if (modifiers.trim) {
            return value.trim() !== newVal.trim();
        }
    }
    return value !== newVal;
}
var domProps = {
    create: updateDOMProps,
    update: updateDOMProps
};

const parseStyleText = cached(function (cssText) {
    const res = {};
    const listDelimiter = /;(?![^(]*\))/g;
    const propertyDelimiter = /:(.+)/;
    cssText.split(listDelimiter).forEach(function (item) {
        if (item) {
            const tmp = item.split(propertyDelimiter);
            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return res;
});
// merge static and dynamic style data on the same vnode
function normalizeStyleData(data) {
    const style = normalizeStyleBinding(data.style);
    // static style is pre-processed into an object during compilation
    // and is always a fresh object, so it's safe to merge into it
    return data.staticStyle ? extend(data.staticStyle, style) : style;
}
// normalize possible array / string values into Object
function normalizeStyleBinding(bindingStyle) {
    if (Array.isArray(bindingStyle)) {
        return toObject(bindingStyle);
    }
    if (typeof bindingStyle === 'string') {
        return parseStyleText(bindingStyle);
    }
    return bindingStyle;
}
/**
 * parent component style should be after child's
 * so that parent component's style could override it
 */
function getStyle(vnode, checkChild) {
    const res = {};
    let styleData;
    if (checkChild) {
        let childNode = vnode;
        while (childNode.componentInstance) {
            childNode = childNode.componentInstance._vnode;
            if (childNode &&
                childNode.data &&
                (styleData = normalizeStyleData(childNode.data))) {
                extend(res, styleData);
            }
        }
    }
    if ((styleData = normalizeStyleData(vnode.data))) {
        extend(res, styleData);
    }
    let parentNode = vnode;
    // @ts-expect-error parentNode.parent not VNodeWithData
    while ((parentNode = parentNode.parent)) {
        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
            extend(res, styleData);
        }
    }
    return res;
}

const cssVarRE = /^--/;
const importantRE = /\s*!important$/;
const setProp = (el, name, val) => {
    /* istanbul ignore if */
    if (cssVarRE.test(name)) {
        el.style.setProperty(name, val);
    }
    else if (importantRE.test(val)) {
        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
    }
    else {
        const normalizedName = normalize(name);
        if (Array.isArray(val)) {
            // Support values array created by autoprefixer, e.g.
            // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
            // Set them one by one, and the browser will only set those it can recognize
            for (let i = 0, len = val.length; i < len; i++) {
                el.style[normalizedName] = val[i];
            }
        }
        else {
            el.style[normalizedName] = val;
        }
    }
};
const vendorNames = ['Webkit', 'Moz', 'ms'];
let emptyStyle;
const normalize = cached(function (prop) {
    emptyStyle = emptyStyle || document.createElement('div').style;
    prop = camelize(prop);
    if (prop !== 'filter' && prop in emptyStyle) {
        return prop;
    }
    const capName = prop.charAt(0).toUpperCase() + prop.slice(1);
    for (let i = 0; i < vendorNames.length; i++) {
        const name = vendorNames[i] + capName;
        if (name in emptyStyle) {
            return name;
        }
    }
});
function updateStyle(oldVnode, vnode) {
    const data = vnode.data;
    const oldData = oldVnode.data;
    if (isUndef(data.staticStyle) &&
        isUndef(data.style) &&
        isUndef(oldData.staticStyle) &&
        isUndef(oldData.style)) {
        return;
    }
    let cur, name;
    const el = vnode.elm;
    const oldStaticStyle = oldData.staticStyle;
    const oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
    // if static style exists, stylebinding already merged into it when doing normalizeStyleData
    const oldStyle = oldStaticStyle || oldStyleBinding;
    const style = normalizeStyleBinding(vnode.data.style) || {};
    // store normalized style under a different key for next diff
    // make sure to clone it if it's reactive, since the user likely wants
    // to mutate it.
    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
    const newStyle = getStyle(vnode, true);
    for (name in oldStyle) {
        if (isUndef(newStyle[name])) {
            setProp(el, name, '');
        }
    }
    for (name in newStyle) {
        cur = newStyle[name];
        if (cur !== oldStyle[name]) {
            // ie9 setting to null has no effect, must use empty string
            setProp(el, name, cur == null ? '' : cur);
        }
    }
}
var style$1 = {
    create: updateStyle,
    update: updateStyle
};

const whitespaceRE$1 = /\s+/;
/**
 * Add class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function addClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE$1).forEach(c => el.classList.add(c));
        }
        else {
            el.classList.add(cls);
        }
    }
    else {
        const cur = ` ${el.getAttribute('class') || ''} `;
        if (cur.indexOf(' ' + cls + ' ') < 0) {
            el.setAttribute('class', (cur + cls).trim());
        }
    }
}
/**
 * Remove class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function removeClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE$1).forEach(c => el.classList.remove(c));
        }
        else {
            el.classList.remove(cls);
        }
        if (!el.classList.length) {
            el.removeAttribute('class');
        }
    }
    else {
        let cur = ` ${el.getAttribute('class') || ''} `;
        const tar = ' ' + cls + ' ';
        while (cur.indexOf(tar) >= 0) {
            cur = cur.replace(tar, ' ');
        }
        cur = cur.trim();
        if (cur) {
            el.setAttribute('class', cur);
        }
        else {
            el.removeAttribute('class');
        }
    }
}

function resolveTransition(def) {
    if (!def) {
        return;
    }
    /* istanbul ignore else */
    if (typeof def === 'object') {
        const res = {};
        if (def.css !== false) {
            extend(res, autoCssTransition(def.name || 'v'));
        }
        extend(res, def);
        return res;
    }
    else if (typeof def === 'string') {
        return autoCssTransition(def);
    }
}
const autoCssTransition = cached(name => {
    return {
        enterClass: `${name}-enter`,
        enterToClass: `${name}-enter-to`,
        enterActiveClass: `${name}-enter-active`,
        leaveClass: `${name}-leave`,
        leaveToClass: `${name}-leave-to`,
        leaveActiveClass: `${name}-leave-active`
    };
});
const hasTransition = inBrowser && !isIE9;
const TRANSITION = 'transition';
const ANIMATION = 'animation';
// Transition property/event sniffing
let transitionProp = 'transition';
let transitionEndEvent = 'transitionend';
let animationProp = 'animation';
let animationEndEvent = 'animationend';
if (hasTransition) {
    /* istanbul ignore if */
    if (window.ontransitionend === undefined &&
        window.onwebkittransitionend !== undefined) {
        transitionProp = 'WebkitTransition';
        transitionEndEvent = 'webkitTransitionEnd';
    }
    if (window.onanimationend === undefined &&
        window.onwebkitanimationend !== undefined) {
        animationProp = 'WebkitAnimation';
        animationEndEvent = 'webkitAnimationEnd';
    }
}
// binding to window is necessary to make hot reload work in IE in strict mode
const raf = inBrowser
    ? window.requestAnimationFrame
        ? window.requestAnimationFrame.bind(window)
        : setTimeout
    : /* istanbul ignore next */ /* istanbul ignore next */ fn => fn();
function nextFrame(fn) {
    raf(() => {
        // @ts-expect-error
        raf(fn);
    });
}
function addTransitionClass(el, cls) {
    const transitionClasses = el._transitionClasses || (el._transitionClasses = []);
    if (transitionClasses.indexOf(cls) < 0) {
        transitionClasses.push(cls);
        addClass(el, cls);
    }
}
function removeTransitionClass(el, cls) {
    if (el._transitionClasses) {
        remove$2(el._transitionClasses, cls);
    }
    removeClass(el, cls);
}
function whenTransitionEnds(el, expectedType, cb) {
    const { type, timeout, propCount } = getTransitionInfo(el, expectedType);
    if (!type)
        return cb();
    const event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
    let ended = 0;
    const end = () => {
        el.removeEventListener(event, onEnd);
        cb();
    };
    const onEnd = e => {
        if (e.target === el) {
            if (++ended >= propCount) {
                end();
            }
        }
    };
    setTimeout(() => {
        if (ended < propCount) {
            end();
        }
    }, timeout + 1);
    el.addEventListener(event, onEnd);
}
const transformRE = /\b(transform|all)(,|$)/;
function getTransitionInfo(el, expectedType) {
    const styles = window.getComputedStyle(el);
    // JSDOM may return undefined for transition properties
    const transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
    const transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
    const transitionTimeout = getTimeout(transitionDelays, transitionDurations);
    const animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
    const animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
    const animationTimeout = getTimeout(animationDelays, animationDurations);
    let type;
    let timeout = 0;
    let propCount = 0;
    /* istanbul ignore if */
    if (expectedType === TRANSITION) {
        if (transitionTimeout > 0) {
            type = TRANSITION;
            timeout = transitionTimeout;
            propCount = transitionDurations.length;
        }
    }
    else if (expectedType === ANIMATION) {
        if (animationTimeout > 0) {
            type = ANIMATION;
            timeout = animationTimeout;
            propCount = animationDurations.length;
        }
    }
    else {
        timeout = Math.max(transitionTimeout, animationTimeout);
        type =
            timeout > 0
                ? transitionTimeout > animationTimeout
                    ? TRANSITION
                    : ANIMATION
                : null;
        propCount = type
            ? type === TRANSITION
                ? transitionDurations.length
                : animationDurations.length
            : 0;
    }
    const hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
    return {
        type,
        timeout,
        propCount,
        hasTransform
    };
}
function getTimeout(delays, durations) {
    /* istanbul ignore next */
    while (delays.length < durations.length) {
        delays = delays.concat(delays);
    }
    return Math.max.apply(null, durations.map((d, i) => {
        return toMs(d) + toMs(delays[i]);
    }));
}
// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
// in a locale-dependent way, using a comma instead of a dot.
// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
// as a floor function) causing unexpected behaviors
function toMs(s) {
    return Number(s.slice(0, -1).replace(',', '.')) * 1000;
}

function enter(vnode, toggleDisplay) {
    const el = vnode.elm;
    // call leave callback now
    if (isDef(el._leaveCb)) {
        el._leaveCb.cancelled = true;
        el._leaveCb();
    }
    const data = resolveTransition(vnode.data.transition);
    if (isUndef(data)) {
        return;
    }
    /* istanbul ignore if */
    if (isDef(el._enterCb) || el.nodeType !== 1) {
        return;
    }
    const { css, type, enterClass, enterToClass, enterActiveClass, appearClass, appearToClass, appearActiveClass, beforeEnter, enter, afterEnter, enterCancelled, beforeAppear, appear, afterAppear, appearCancelled, duration } = data;
    // activeInstance will always be the <transition> component managing this
    // transition. One edge case to check is when the <transition> is placed
    // as the root node of a child component. In that case we need to check
    // <transition>'s parent for appear check.
    let context = activeInstance;
    let transitionNode = activeInstance.$vnode;
    while (transitionNode && transitionNode.parent) {
        context = transitionNode.context;
        transitionNode = transitionNode.parent;
    }
    const isAppear = !context._isMounted || !vnode.isRootInsert;
    if (isAppear && !appear && appear !== '') {
        return;
    }
    const startClass = isAppear && appearClass ? appearClass : enterClass;
    const activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
    const toClass = isAppear && appearToClass ? appearToClass : enterToClass;
    const beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
    const enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
    const afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
    const enterCancelledHook = isAppear
        ? appearCancelled || enterCancelled
        : enterCancelled;
    const explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
    if (explicitEnterDuration != null) {
        checkDuration(explicitEnterDuration, 'enter', vnode);
    }
    const expectsCSS = css !== false && !isIE9;
    const userWantsControl = getHookArgumentsLength(enterHook);
    const cb = (el._enterCb = once(() => {
        if (expectsCSS) {
            removeTransitionClass(el, toClass);
            removeTransitionClass(el, activeClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, startClass);
            }
            enterCancelledHook && enterCancelledHook(el);
        }
        else {
            afterEnterHook && afterEnterHook(el);
        }
        el._enterCb = null;
    }));
    if (!vnode.data.show) {
        // remove pending leave element on enter by injecting an insert hook
        mergeVNodeHook(vnode, 'insert', () => {
            const parent = el.parentNode;
            const pendingNode = parent && parent._pending && parent._pending[vnode.key];
            if (pendingNode &&
                pendingNode.tag === vnode.tag &&
                pendingNode.elm._leaveCb) {
                pendingNode.elm._leaveCb();
            }
            enterHook && enterHook(el, cb);
        });
    }
    // start enter transition
    beforeEnterHook && beforeEnterHook(el);
    if (expectsCSS) {
        addTransitionClass(el, startClass);
        addTransitionClass(el, activeClass);
        nextFrame(() => {
            removeTransitionClass(el, startClass);
            // @ts-expect-error
            if (!cb.cancelled) {
                addTransitionClass(el, toClass);
                if (!userWantsControl) {
                    if (isValidDuration(explicitEnterDuration)) {
                        setTimeout(cb, explicitEnterDuration);
                    }
                    else {
                        whenTransitionEnds(el, type, cb);
                    }
                }
            }
        });
    }
    if (vnode.data.show) {
        toggleDisplay && toggleDisplay();
        enterHook && enterHook(el, cb);
    }
    if (!expectsCSS && !userWantsControl) {
        cb();
    }
}
function leave(vnode, rm) {
    const el = vnode.elm;
    // call enter callback now
    if (isDef(el._enterCb)) {
        el._enterCb.cancelled = true;
        el._enterCb();
    }
    const data = resolveTransition(vnode.data.transition);
    if (isUndef(data) || el.nodeType !== 1) {
        return rm();
    }
    /* istanbul ignore if */
    if (isDef(el._leaveCb)) {
        return;
    }
    const { css, type, leaveClass, leaveToClass, leaveActiveClass, beforeLeave, leave, afterLeave, leaveCancelled, delayLeave, duration } = data;
    const expectsCSS = css !== false && !isIE9;
    const userWantsControl = getHookArgumentsLength(leave);
    const explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
    if (isDef(explicitLeaveDuration)) {
        checkDuration(explicitLeaveDuration, 'leave', vnode);
    }
    const cb = (el._leaveCb = once(() => {
        if (el.parentNode && el.parentNode._pending) {
            el.parentNode._pending[vnode.key] = null;
        }
        if (expectsCSS) {
            removeTransitionClass(el, leaveToClass);
            removeTransitionClass(el, leaveActiveClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, leaveClass);
            }
            leaveCancelled && leaveCancelled(el);
        }
        else {
            rm();
            afterLeave && afterLeave(el);
        }
        el._leaveCb = null;
    }));
    if (delayLeave) {
        delayLeave(performLeave);
    }
    else {
        performLeave();
    }
    function performLeave() {
        // the delayed leave may have already been cancelled
        // @ts-expect-error
        if (cb.cancelled) {
            return;
        }
        // record leaving element
        if (!vnode.data.show && el.parentNode) {
            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
                vnode;
        }
        beforeLeave && beforeLeave(el);
        if (expectsCSS) {
            addTransitionClass(el, leaveClass);
            addTransitionClass(el, leaveActiveClass);
            nextFrame(() => {
                removeTransitionClass(el, leaveClass);
                // @ts-expect-error
                if (!cb.cancelled) {
                    addTransitionClass(el, leaveToClass);
                    if (!userWantsControl) {
                        if (isValidDuration(explicitLeaveDuration)) {
                            setTimeout(cb, explicitLeaveDuration);
                        }
                        else {
                            whenTransitionEnds(el, type, cb);
                        }
                    }
                }
            });
        }
        leave && leave(el, cb);
        if (!expectsCSS && !userWantsControl) {
            cb();
        }
    }
}
// only used in dev mode
function checkDuration(val, name, vnode) {
    if (typeof val !== 'number') {
        warn$2(`<transition> explicit ${name} duration is not a valid number - ` +
            `got ${JSON.stringify(val)}.`, vnode.context);
    }
    else if (isNaN(val)) {
        warn$2(`<transition> explicit ${name} duration is NaN - ` +
            'the duration expression might be incorrect.', vnode.context);
    }
}
function isValidDuration(val) {
    return typeof val === 'number' && !isNaN(val);
}
/**
 * Normalize a transition hook's argument length. The hook may be:
 * - a merged hook (invoker) with the original in .fns
 * - a wrapped component method (check ._length)
 * - a plain function (.length)
 */
function getHookArgumentsLength(fn) {
    if (isUndef(fn)) {
        return false;
    }
    // @ts-expect-error
    const invokerFns = fn.fns;
    if (isDef(invokerFns)) {
        // invoker
        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
    }
    else {
        // @ts-expect-error
        return (fn._length || fn.length) > 1;
    }
}
function _enter(_, vnode) {
    if (vnode.data.show !== true) {
        enter(vnode);
    }
}
var transition = inBrowser
    ? {
        create: _enter,
        activate: _enter,
        remove(vnode, rm) {
            /* istanbul ignore else */
            if (vnode.data.show !== true) {
                // @ts-expect-error
                leave(vnode, rm);
            }
            else {
                rm();
            }
        }
    }
    : {};

var platformModules = [attrs, klass$1, events, domProps, style$1, transition];

// the directive module should be applied last, after all
// built-in modules have been applied.
const modules$1 = platformModules.concat(baseModules);
const patch = createPatchFunction({ nodeOps, modules: modules$1 });

/**
 * Not type checking this file because flow doesn't like attaching
 * properties to Elements.
 */
/* istanbul ignore if */
if (isIE9) {
    // http://www.matts411.com/post/internet-explorer-9-oninput/
    document.addEventListener('selectionchange', () => {
        const el = document.activeElement;
        // @ts-expect-error
        if (el && el.vmodel) {
            trigger(el, 'input');
        }
    });
}
const directive = {
    inserted(el, binding, vnode, oldVnode) {
        if (vnode.tag === 'select') {
            // #6903
            if (oldVnode.elm && !oldVnode.elm._vOptions) {
                mergeVNodeHook(vnode, 'postpatch', () => {
                    directive.componentUpdated(el, binding, vnode);
                });
            }
            else {
                setSelected(el, binding, vnode.context);
            }
            el._vOptions = [].map.call(el.options, getValue);
        }
        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
            el._vModifiers = binding.modifiers;
            if (!binding.modifiers.lazy) {
                el.addEventListener('compositionstart', onCompositionStart);
                el.addEventListener('compositionend', onCompositionEnd);
                // Safari < 10.2 & UIWebView doesn't fire compositionend when
                // switching focus before confirming composition choice
                // this also fixes the issue where some browsers e.g. iOS Chrome
                // fires "change" instead of "input" on autocomplete.
                el.addEventListener('change', onCompositionEnd);
                /* istanbul ignore if */
                if (isIE9) {
                    el.vmodel = true;
                }
            }
        }
    },
    componentUpdated(el, binding, vnode) {
        if (vnode.tag === 'select') {
            setSelected(el, binding, vnode.context);
            // in case the options rendered by v-for have changed,
            // it's possible that the value is out-of-sync with the rendered options.
            // detect such cases and filter out values that no longer has a matching
            // option in the DOM.
            const prevOptions = el._vOptions;
            const curOptions = (el._vOptions = [].map.call(el.options, getValue));
            if (curOptions.some((o, i) => !looseEqual(o, prevOptions[i]))) {
                // trigger change event if
                // no matching option found for at least one value
                const needReset = el.multiple
                    ? binding.value.some(v => hasNoMatchingOption(v, curOptions))
                    : binding.value !== binding.oldValue &&
                        hasNoMatchingOption(binding.value, curOptions);
                if (needReset) {
                    trigger(el, 'change');
                }
            }
        }
    }
};
function setSelected(el, binding, vm) {
    actuallySetSelected(el, binding, vm);
    /* istanbul ignore if */
    if (isIE || isEdge) {
        setTimeout(() => {
            actuallySetSelected(el, binding, vm);
        }, 0);
    }
}
function actuallySetSelected(el, binding, vm) {
    const value = binding.value;
    const isMultiple = el.multiple;
    if (isMultiple && !Array.isArray(value)) {
        warn$2(`<select multiple v-model="${binding.expression}"> ` +
                `expects an Array value for its binding, but got ${Object.prototype.toString
                    .call(value)
                    .slice(8, -1)}`, vm);
        return;
    }
    let selected, option;
    for (let i = 0, l = el.options.length; i < l; i++) {
        option = el.options[i];
        if (isMultiple) {
            selected = looseIndexOf(value, getValue(option)) > -1;
            if (option.selected !== selected) {
                option.selected = selected;
            }
        }
        else {
            if (looseEqual(getValue(option), value)) {
                if (el.selectedIndex !== i) {
                    el.selectedIndex = i;
                }
                return;
            }
        }
    }
    if (!isMultiple) {
        el.selectedIndex = -1;
    }
}
function hasNoMatchingOption(value, options) {
    return options.every(o => !looseEqual(o, value));
}
function getValue(option) {
    return '_value' in option ? option._value : option.value;
}
function onCompositionStart(e) {
    e.target.composing = true;
}
function onCompositionEnd(e) {
    // prevent triggering an input event for no reason
    if (!e.target.composing)
        return;
    e.target.composing = false;
    trigger(e.target, 'input');
}
function trigger(el, type) {
    const e = document.createEvent('HTMLEvents');
    e.initEvent(type, true, true);
    el.dispatchEvent(e);
}

// recursively search for possible transition defined inside the component root
function locateNode(vnode) {
    // @ts-expect-error
    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
        ? locateNode(vnode.componentInstance._vnode)
        : vnode;
}
var show = {
    bind(el, { value }, vnode) {
        vnode = locateNode(vnode);
        const transition = vnode.data && vnode.data.transition;
        const originalDisplay = (el.__vOriginalDisplay =
            el.style.display === 'none' ? '' : el.style.display);
        if (value && transition) {
            vnode.data.show = true;
            enter(vnode, () => {
                el.style.display = originalDisplay;
            });
        }
        else {
            el.style.display = value ? originalDisplay : 'none';
        }
    },
    update(el, { value, oldValue }, vnode) {
        /* istanbul ignore if */
        if (!value === !oldValue)
            return;
        vnode = locateNode(vnode);
        const transition = vnode.data && vnode.data.transition;
        if (transition) {
            vnode.data.show = true;
            if (value) {
                enter(vnode, () => {
                    el.style.display = el.__vOriginalDisplay;
                });
            }
            else {
                leave(vnode, () => {
                    el.style.display = 'none';
                });
            }
        }
        else {
            el.style.display = value ? el.__vOriginalDisplay : 'none';
        }
    },
    unbind(el, binding, vnode, oldVnode, isDestroy) {
        if (!isDestroy) {
            el.style.display = el.__vOriginalDisplay;
        }
    }
};

var platformDirectives = {
    model: directive,
    show
};

// Provides transition support for a single element/component.
const transitionProps = {
    name: String,
    appear: Boolean,
    css: Boolean,
    mode: String,
    type: String,
    enterClass: String,
    leaveClass: String,
    enterToClass: String,
    leaveToClass: String,
    enterActiveClass: String,
    leaveActiveClass: String,
    appearClass: String,
    appearActiveClass: String,
    appearToClass: String,
    duration: [Number, String, Object]
};
// in case the child is also an abstract component, e.g. <keep-alive>
// we want to recursively retrieve the real component to be rendered
function getRealChild(vnode) {
    const compOptions = vnode && vnode.componentOptions;
    if (compOptions && compOptions.Ctor.options.abstract) {
        return getRealChild(getFirstComponentChild(compOptions.children));
    }
    else {
        return vnode;
    }
}
function extractTransitionData(comp) {
    const data = {};
    const options = comp.$options;
    // props
    for (const key in options.propsData) {
        data[key] = comp[key];
    }
    // events.
    // extract listeners and pass them directly to the transition methods
    const listeners = options._parentListeners;
    for (const key in listeners) {
        data[camelize(key)] = listeners[key];
    }
    return data;
}
function placeholder(h, rawChild) {
    // @ts-expect-error
    if (/\d-keep-alive$/.test(rawChild.tag)) {
        return h('keep-alive', {
            props: rawChild.componentOptions.propsData
        });
    }
}
function hasParentTransition(vnode) {
    while ((vnode = vnode.parent)) {
        if (vnode.data.transition) {
            return true;
        }
    }
}
function isSameChild(child, oldChild) {
    return oldChild.key === child.key && oldChild.tag === child.tag;
}
const isNotTextNode = (c) => c.tag || isAsyncPlaceholder(c);
const isVShowDirective = d => d.name === 'show';
var Transition = {
    name: 'transition',
    props: transitionProps,
    abstract: true,
    render(h) {
        let children = this.$slots.default;
        if (!children) {
            return;
        }
        // filter out text nodes (possible whitespaces)
        children = children.filter(isNotTextNode);
        /* istanbul ignore if */
        if (!children.length) {
            return;
        }
        // warn multiple elements
        if (children.length > 1) {
            warn$2('<transition> can only be used on a single element. Use ' +
                '<transition-group> for lists.', this.$parent);
        }
        const mode = this.mode;
        // warn invalid mode
        if (mode && mode !== 'in-out' && mode !== 'out-in') {
            warn$2('invalid <transition> mode: ' + mode, this.$parent);
        }
        const rawChild = children[0];
        // if this is a component root node and the component's
        // parent container node also has transition, skip.
        if (hasParentTransition(this.$vnode)) {
            return rawChild;
        }
        // apply transition data to child
        // use getRealChild() to ignore abstract components e.g. keep-alive
        const child = getRealChild(rawChild);
        /* istanbul ignore if */
        if (!child) {
            return rawChild;
        }
        if (this._leaving) {
            return placeholder(h, rawChild);
        }
        // ensure a key that is unique to the vnode type and to this transition
        // component instance. This key will be used to remove pending leaving nodes
        // during entering.
        const id = `__transition-${this._uid}-`;
        child.key =
            child.key == null
                ? child.isComment
                    ? id + 'comment'
                    : id + child.tag
                : isPrimitive(child.key)
                    ? String(child.key).indexOf(id) === 0
                        ? child.key
                        : id + child.key
                    : child.key;
        const data = ((child.data || (child.data = {})).transition =
            extractTransitionData(this));
        const oldRawChild = this._vnode;
        const oldChild = getRealChild(oldRawChild);
        // mark v-show
        // so that the transition module can hand over the control to the directive
        if (child.data.directives && child.data.directives.some(isVShowDirective)) {
            child.data.show = true;
        }
        if (oldChild &&
            oldChild.data &&
            !isSameChild(child, oldChild) &&
            !isAsyncPlaceholder(oldChild) &&
            // #6687 component root is a comment node
            !(oldChild.componentInstance &&
                oldChild.componentInstance._vnode.isComment)) {
            // replace old child transition data with fresh one
            // important for dynamic transitions!
            const oldData = (oldChild.data.transition = extend({}, data));
            // handle transition mode
            if (mode === 'out-in') {
                // return placeholder node and queue update when leave finishes
                this._leaving = true;
                mergeVNodeHook(oldData, 'afterLeave', () => {
                    this._leaving = false;
                    this.$forceUpdate();
                });
                return placeholder(h, rawChild);
            }
            else if (mode === 'in-out') {
                if (isAsyncPlaceholder(child)) {
                    return oldRawChild;
                }
                let delayedLeave;
                const performLeave = () => {
                    delayedLeave();
                };
                mergeVNodeHook(data, 'afterEnter', performLeave);
                mergeVNodeHook(data, 'enterCancelled', performLeave);
                mergeVNodeHook(oldData, 'delayLeave', leave => {
                    delayedLeave = leave;
                });
            }
        }
        return rawChild;
    }
};

// Provides transition support for list items.
const props = extend({
    tag: String,
    moveClass: String
}, transitionProps);
delete props.mode;
var TransitionGroup = {
    props,
    beforeMount() {
        const update = this._update;
        this._update = (vnode, hydrating) => {
            const restoreActiveInstance = setActiveInstance(this);
            // force removing pass
            this.__patch__(this._vnode, this.kept, false, // hydrating
            true // removeOnly (!important, avoids unnecessary moves)
            );
            this._vnode = this.kept;
            restoreActiveInstance();
            update.call(this, vnode, hydrating);
        };
    },
    render(h) {
        const tag = this.tag || this.$vnode.data.tag || 'span';
        const map = Object.create(null);
        const prevChildren = (this.prevChildren = this.children);
        const rawChildren = this.$slots.default || [];
        const children = (this.children = []);
        const transitionData = extractTransitionData(this);
        for (let i = 0; i < rawChildren.length; i++) {
            const c = rawChildren[i];
            if (c.tag) {
                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
                    children.push(c);
                    map[c.key] = c;
                    (c.data || (c.data = {})).transition = transitionData;
                }
                else {
                    const opts = c.componentOptions;
                    const name = opts
                        ? getComponentName(opts.Ctor.options) || opts.tag || ''
                        : c.tag;
                    warn$2(`<transition-group> children must be keyed: <${name}>`);
                }
            }
        }
        if (prevChildren) {
            const kept = [];
            const removed = [];
            for (let i = 0; i < prevChildren.length; i++) {
                const c = prevChildren[i];
                c.data.transition = transitionData;
                // @ts-expect-error .getBoundingClientRect is not typed in Node
                c.data.pos = c.elm.getBoundingClientRect();
                if (map[c.key]) {
                    kept.push(c);
                }
                else {
                    removed.push(c);
                }
            }
            this.kept = h(tag, null, kept);
            this.removed = removed;
        }
        return h(tag, null, children);
    },
    updated() {
        const children = this.prevChildren;
        const moveClass = this.moveClass || (this.name || 'v') + '-move';
        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
            return;
        }
        // we divide the work into three loops to avoid mixing DOM reads and writes
        // in each iteration - which helps prevent layout thrashing.
        children.forEach(callPendingCbs);
        children.forEach(recordPosition);
        children.forEach(applyTranslation);
        // force reflow to put everything in position
        // assign to this to avoid being removed in tree-shaking
        // $flow-disable-line
        this._reflow = document.body.offsetHeight;
        children.forEach((c) => {
            if (c.data.moved) {
                const el = c.elm;
                const s = el.style;
                addTransitionClass(el, moveClass);
                s.transform = s.WebkitTransform = s.transitionDuration = '';
                el.addEventListener(transitionEndEvent, (el._moveCb = function cb(e) {
                    if (e && e.target !== el) {
                        return;
                    }
                    if (!e || /transform$/.test(e.propertyName)) {
                        el.removeEventListener(transitionEndEvent, cb);
                        el._moveCb = null;
                        removeTransitionClass(el, moveClass);
                    }
                }));
            }
        });
    },
    methods: {
        hasMove(el, moveClass) {
            /* istanbul ignore if */
            if (!hasTransition) {
                return false;
            }
            /* istanbul ignore if */
            if (this._hasMove) {
                return this._hasMove;
            }
            // Detect whether an element with the move class applied has
            // CSS transitions. Since the element may be inside an entering
            // transition at this very moment, we make a clone of it and remove
            // all other transition classes applied to ensure only the move class
            // is applied.
            const clone = el.cloneNode();
            if (el._transitionClasses) {
                el._transitionClasses.forEach((cls) => {
                    removeClass(clone, cls);
                });
            }
            addClass(clone, moveClass);
            clone.style.display = 'none';
            this.$el.appendChild(clone);
            const info = getTransitionInfo(clone);
            this.$el.removeChild(clone);
            return (this._hasMove = info.hasTransform);
        }
    }
};
function callPendingCbs(c) {
    /* istanbul ignore if */
    if (c.elm._moveCb) {
        c.elm._moveCb();
    }
    /* istanbul ignore if */
    if (c.elm._enterCb) {
        c.elm._enterCb();
    }
}
function recordPosition(c) {
    c.data.newPos = c.elm.getBoundingClientRect();
}
function applyTranslation(c) {
    const oldPos = c.data.pos;
    const newPos = c.data.newPos;
    const dx = oldPos.left - newPos.left;
    const dy = oldPos.top - newPos.top;
    if (dx || dy) {
        c.data.moved = true;
        const s = c.elm.style;
        s.transform = s.WebkitTransform = `translate(${dx}px,${dy}px)`;
        s.transitionDuration = '0s';
    }
}

var platformComponents = {
    Transition,
    TransitionGroup
};

// install platform specific utils
Vue.config.mustUseProp = mustUseProp;
Vue.config.isReservedTag = isReservedTag;
Vue.config.isReservedAttr = isReservedAttr;
Vue.config.getTagNamespace = getTagNamespace;
Vue.config.isUnknownElement = isUnknownElement;
// install platform runtime directives & components
extend(Vue.options.directives, platformDirectives);
extend(Vue.options.components, platformComponents);
// install platform patch function
Vue.prototype.__patch__ = inBrowser ? patch : noop;
// public mount method
Vue.prototype.$mount = function (el, hydrating) {
    el = el && inBrowser ? query(el) : undefined;
    return mountComponent(this, el, hydrating);
};
// devtools global hook
/* istanbul ignore next */
if (inBrowser) {
    setTimeout(() => {
        if (config.devtools) {
            if (devtools) {
                devtools.emit('init', Vue);
            }
            else {
                // @ts-expect-error
                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
                    'https://github.com/vuejs/vue-devtools');
            }
        }
        if (config.productionTip !== false &&
            typeof console !== 'undefined') {
            // @ts-expect-error
            console[console.info ? 'info' : 'log'](`You are running Vue in development mode.\n` +
                `Make sure to turn on production mode when deploying for production.\n` +
                `See more tips at https://vuejs.org/guide/deployment.html`);
        }
    }, 0);
}

const defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
const regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
const buildRegex = cached(delimiters => {
    const open = delimiters[0].replace(regexEscapeRE, '\\$&');
    const close = delimiters[1].replace(regexEscapeRE, '\\$&');
    return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
});
function parseText(text, delimiters) {
    //@ts-expect-error
    const tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
    if (!tagRE.test(text)) {
        return;
    }
    const tokens = [];
    const rawTokens = [];
    let lastIndex = (tagRE.lastIndex = 0);
    let match, index, tokenValue;
    while ((match = tagRE.exec(text))) {
        index = match.index;
        // push text token
        if (index > lastIndex) {
            rawTokens.push((tokenValue = text.slice(lastIndex, index)));
            tokens.push(JSON.stringify(tokenValue));
        }
        // tag token
        const exp = parseFilters(match[1].trim());
        tokens.push(`_s(${exp})`);
        rawTokens.push({ '@binding': exp });
        lastIndex = index + match[0].length;
    }
    if (lastIndex < text.length) {
        rawTokens.push((tokenValue = text.slice(lastIndex)));
        tokens.push(JSON.stringify(tokenValue));
    }
    return {
        expression: tokens.join('+'),
        tokens: rawTokens
    };
}

function transformNode$1(el, options) {
    const warn = options.warn || baseWarn;
    const staticClass = getAndRemoveAttr(el, 'class');
    if (staticClass) {
        const res = parseText(staticClass, options.delimiters);
        if (res) {
            warn(`class="${staticClass}": ` +
                'Interpolation inside attributes has been removed. ' +
                'Use v-bind or the colon shorthand instead. For example, ' +
                'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
        }
    }
    if (staticClass) {
        el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
    }
    const classBinding = getBindingAttr(el, 'class', false /* getStatic */);
    if (classBinding) {
        el.classBinding = classBinding;
    }
}
function genData$2(el) {
    let data = '';
    if (el.staticClass) {
        data += `staticClass:${el.staticClass},`;
    }
    if (el.classBinding) {
        data += `class:${el.classBinding},`;
    }
    return data;
}
var klass = {
    staticKeys: ['staticClass'],
    transformNode: transformNode$1,
    genData: genData$2
};

function transformNode(el, options) {
    const warn = options.warn || baseWarn;
    const staticStyle = getAndRemoveAttr(el, 'style');
    if (staticStyle) {
        /* istanbul ignore if */
        {
            const res = parseText(staticStyle, options.delimiters);
            if (res) {
                warn(`style="${staticStyle}": ` +
                    'Interpolation inside attributes has been removed. ' +
                    'Use v-bind or the colon shorthand instead. For example, ' +
                    'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
            }
        }
        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
    }
    const styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
    if (styleBinding) {
        el.styleBinding = styleBinding;
    }
}
function genData$1(el) {
    let data = '';
    if (el.staticStyle) {
        data += `staticStyle:${el.staticStyle},`;
    }
    if (el.styleBinding) {
        data += `style:(${el.styleBinding}),`;
    }
    return data;
}
var style = {
    staticKeys: ['staticStyle'],
    transformNode,
    genData: genData$1
};

let decoder;
var he = {
    decode(html) {
        decoder = decoder || document.createElement('div');
        decoder.innerHTML = html;
        return decoder.textContent;
    }
};

const isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
    'link,meta,param,source,track,wbr');
// Elements that you can, intentionally, leave open
// (and which close themselves)
const canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
const isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
    'title,tr,track');

/**
 * Not type-checking this file because it's mostly vendor code.
 */
// Regular Expressions for parsing tags and attributes
const attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
const dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
const ncname = `[a-zA-Z_][\\-\\.0-9_a-zA-Z${unicodeRegExp.source}]*`;
const qnameCapture = `((?:${ncname}\\:)?${ncname})`;
const startTagOpen = new RegExp(`^<${qnameCapture}`);
const startTagClose = /^\s*(\/?)>/;
const endTag = new RegExp(`^<\\/${qnameCapture}[^>]*>`);
const doctype = /^<!DOCTYPE [^>]+>/i;
// #7298: escape - to avoid being passed as HTML comment when inlined in page
const comment = /^<!\--/;
const conditionalComment = /^<!\[/;
// Special Elements (can contain anything)
const isPlainTextElement = makeMap('script,style,textarea', true);
const reCache = {};
const decodingMap = {
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&amp;': '&',
    '&#10;': '\n',
    '&#9;': '\t',
    '&#39;': "'"
};
const encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
const encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
// #5992
const isIgnoreNewlineTag = makeMap('pre,textarea', true);
const shouldIgnoreFirstNewline = (tag, html) => tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
function decodeAttr(value, shouldDecodeNewlines) {
    const re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
    return value.replace(re, match => decodingMap[match]);
}
function parseHTML(html, options) {
    const stack = [];
    const expectHTML = options.expectHTML;
    const isUnaryTag = options.isUnaryTag || no;
    const canBeLeftOpenTag = options.canBeLeftOpenTag || no;
    let index = 0;
    let last, lastTag;
    while (html) {
        last = html;
        // Make sure we're not in a plaintext content element like script/style
        if (!lastTag || !isPlainTextElement(lastTag)) {
            let textEnd = html.indexOf('<');
            if (textEnd === 0) {
                // Comment:
                if (comment.test(html)) {
                    const commentEnd = html.indexOf('-->');
                    if (commentEnd >= 0) {
                        if (options.shouldKeepComment && options.comment) {
                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
                        }
                        advance(commentEnd + 3);
                        continue;
                    }
                }
                // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
                if (conditionalComment.test(html)) {
                    const conditionalEnd = html.indexOf(']>');
                    if (conditionalEnd >= 0) {
                        advance(conditionalEnd + 2);
                        continue;
                    }
                }
                // Doctype:
                const doctypeMatch = html.match(doctype);
                if (doctypeMatch) {
                    advance(doctypeMatch[0].length);
                    continue;
                }
                // End tag:
                const endTagMatch = html.match(endTag);
                if (endTagMatch) {
                    const curIndex = index;
                    advance(endTagMatch[0].length);
                    parseEndTag(endTagMatch[1], curIndex, index);
                    continue;
                }
                // Start tag:
                const startTagMatch = parseStartTag();
                if (startTagMatch) {
                    handleStartTag(startTagMatch);
                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
                        advance(1);
                    }
                    continue;
                }
            }
            let text, rest, next;
            if (textEnd >= 0) {
                rest = html.slice(textEnd);
                while (!endTag.test(rest) &&
                    !startTagOpen.test(rest) &&
                    !comment.test(rest) &&
                    !conditionalComment.test(rest)) {
                    // < in plain text, be forgiving and treat it as text
                    next = rest.indexOf('<', 1);
                    if (next < 0)
                        break;
                    textEnd += next;
                    rest = html.slice(textEnd);
                }
                text = html.substring(0, textEnd);
            }
            if (textEnd < 0) {
                text = html;
            }
            if (text) {
                advance(text.length);
            }
            if (options.chars && text) {
                options.chars(text, index - text.length, index);
            }
        }
        else {
            let endTagLength = 0;
            const stackedTag = lastTag.toLowerCase();
            const reStackedTag = reCache[stackedTag] ||
                (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));
            const rest = html.replace(reStackedTag, function (all, text, endTag) {
                endTagLength = endTag.length;
                if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {
                    text = text
                        .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
                        .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
                }
                if (shouldIgnoreFirstNewline(stackedTag, text)) {
                    text = text.slice(1);
                }
                if (options.chars) {
                    options.chars(text);
                }
                return '';
            });
            index += html.length - rest.length;
            html = rest;
            parseEndTag(stackedTag, index - endTagLength, index);
        }
        if (html === last) {
            options.chars && options.chars(html);
            if (!stack.length && options.warn) {
                options.warn(`Mal-formatted tag at end of template: "${html}"`, {
                    start: index + html.length
                });
            }
            break;
        }
    }
    // Clean up any remaining tags
    parseEndTag();
    function advance(n) {
        index += n;
        html = html.substring(n);
    }
    function parseStartTag() {
        const start = html.match(startTagOpen);
        if (start) {
            const match = {
                tagName: start[1],
                attrs: [],
                start: index
            };
            advance(start[0].length);
            let end, attr;
            while (!(end = html.match(startTagClose)) &&
                (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
                attr.start = index;
                advance(attr[0].length);
                attr.end = index;
                match.attrs.push(attr);
            }
            if (end) {
                match.unarySlash = end[1];
                advance(end[0].length);
                match.end = index;
                return match;
            }
        }
    }
    function handleStartTag(match) {
        const tagName = match.tagName;
        const unarySlash = match.unarySlash;
        if (expectHTML) {
            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
                parseEndTag(lastTag);
            }
            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
                parseEndTag(tagName);
            }
        }
        const unary = isUnaryTag(tagName) || !!unarySlash;
        const l = match.attrs.length;
        const attrs = new Array(l);
        for (let i = 0; i < l; i++) {
            const args = match.attrs[i];
            const value = args[3] || args[4] || args[5] || '';
            const shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
                ? options.shouldDecodeNewlinesForHref
                : options.shouldDecodeNewlines;
            attrs[i] = {
                name: args[1],
                value: decodeAttr(value, shouldDecodeNewlines)
            };
            if (options.outputSourceRange) {
                attrs[i].start = args.start + args[0].match(/^\s*/).length;
                attrs[i].end = args.end;
            }
        }
        if (!unary) {
            stack.push({
                tag: tagName,
                lowerCasedTag: tagName.toLowerCase(),
                attrs: attrs,
                start: match.start,
                end: match.end
            });
            lastTag = tagName;
        }
        if (options.start) {
            options.start(tagName, attrs, unary, match.start, match.end);
        }
    }
    function parseEndTag(tagName, start, end) {
        let pos, lowerCasedTagName;
        if (start == null)
            start = index;
        if (end == null)
            end = index;
        // Find the closest opened tag of the same type
        if (tagName) {
            lowerCasedTagName = tagName.toLowerCase();
            for (pos = stack.length - 1; pos >= 0; pos--) {
                if (stack[pos].lowerCasedTag === lowerCasedTagName) {
                    break;
                }
            }
        }
        else {
            // If no tag name is provided, clean shop
            pos = 0;
        }
        if (pos >= 0) {
            // Close all the open elements, up the stack
            for (let i = stack.length - 1; i >= pos; i--) {
                if ((i > pos || !tagName) && options.warn) {
                    options.warn(`tag <${stack[i].tag}> has no matching end tag.`, {
                        start: stack[i].start,
                        end: stack[i].end
                    });
                }
                if (options.end) {
                    options.end(stack[i].tag, start, end);
                }
            }
            // Remove the open elements from the stack
            stack.length = pos;
            lastTag = pos && stack[pos - 1].tag;
        }
        else if (lowerCasedTagName === 'br') {
            if (options.start) {
                options.start(tagName, [], true, start, end);
            }
        }
        else if (lowerCasedTagName === 'p') {
            if (options.start) {
                options.start(tagName, [], false, start, end);
            }
            if (options.end) {
                options.end(tagName, start, end);
            }
        }
    }
}

const onRE = /^@|^v-on:/;
const dirRE = /^v-|^@|^:|^#/;
const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
const forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
const stripParensRE = /^\(|\)$/g;
const dynamicArgRE = /^\[.*\]$/;
const argRE = /:(.*)$/;
const bindRE = /^:|^\.|^v-bind:/;
const modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
const slotRE = /^v-slot(:|$)|^#/;
const lineBreakRE = /[\r\n]/;
const whitespaceRE = /[ \f\t\r\n]+/g;
const invalidAttributeRE = /[\s"'<>\/=]/;
const decodeHTMLCached = cached(he.decode);
const emptySlotScopeToken = `_empty_`;
// configurable state
let warn;
let delimiters;
let transforms;
let preTransforms;
let postTransforms;
let platformIsPreTag;
let platformMustUseProp;
let platformGetTagNamespace;
let maybeComponent;
function createASTElement(tag, attrs, parent) {
    return {
        type: 1,
        tag,
        attrsList: attrs,
        attrsMap: makeAttrsMap(attrs),
        rawAttrsMap: {},
        parent,
        children: []
    };
}
/**
 * Convert HTML string to AST.
 */
function parse(template, options) {
    warn = options.warn || baseWarn;
    platformIsPreTag = options.isPreTag || no;
    platformMustUseProp = options.mustUseProp || no;
    platformGetTagNamespace = options.getTagNamespace || no;
    const isReservedTag = options.isReservedTag || no;
    maybeComponent = (el) => !!(el.component ||
        el.attrsMap[':is'] ||
        el.attrsMap['v-bind:is'] ||
        !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
    transforms = pluckModuleFunction(options.modules, 'transformNode');
    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
    delimiters = options.delimiters;
    const stack = [];
    const preserveWhitespace = options.preserveWhitespace !== false;
    const whitespaceOption = options.whitespace;
    let root;
    let currentParent;
    let inVPre = false;
    let inPre = false;
    let warned = false;
    function warnOnce(msg, range) {
        if (!warned) {
            warned = true;
            warn(msg, range);
        }
    }
    function closeElement(element) {
        trimEndingWhitespace(element);
        if (!inVPre && !element.processed) {
            element = processElement(element, options);
        }
        // tree management
        if (!stack.length && element !== root) {
            // allow root elements with v-if, v-else-if and v-else
            if (root.if && (element.elseif || element.else)) {
                {
                    checkRootConstraints(element);
                }
                addIfCondition(root, {
                    exp: element.elseif,
                    block: element
                });
            }
            else {
                warnOnce(`Component template should contain exactly one root element. ` +
                    `If you are using v-if on multiple elements, ` +
                    `use v-else-if to chain them instead.`, { start: element.start });
            }
        }
        if (currentParent && !element.forbidden) {
            if (element.elseif || element.else) {
                processIfConditions(element, currentParent);
            }
            else {
                if (element.slotScope) {
                    // scoped slot
                    // keep it in the children list so that v-else(-if) conditions can
                    // find it as the prev node.
                    const name = element.slotTarget || '"default"';
                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;
                }
                currentParent.children.push(element);
                element.parent = currentParent;
            }
        }
        // final children cleanup
        // filter out scoped slots
        element.children = element.children.filter(c => !c.slotScope);
        // remove trailing whitespace node again
        trimEndingWhitespace(element);
        // check pre state
        if (element.pre) {
            inVPre = false;
        }
        if (platformIsPreTag(element.tag)) {
            inPre = false;
        }
        // apply post-transforms
        for (let i = 0; i < postTransforms.length; i++) {
            postTransforms[i](element, options);
        }
    }
    function trimEndingWhitespace(el) {
        // remove trailing whitespace node
        if (!inPre) {
            let lastNode;
            while ((lastNode = el.children[el.children.length - 1]) &&
                lastNode.type === 3 &&
                lastNode.text === ' ') {
                el.children.pop();
            }
        }
    }
    function checkRootConstraints(el) {
        if (el.tag === 'slot' || el.tag === 'template') {
            warnOnce(`Cannot use <${el.tag}> as component root element because it may ` +
                'contain multiple nodes.', { start: el.start });
        }
        if (el.attrsMap.hasOwnProperty('v-for')) {
            warnOnce('Cannot use v-for on stateful component root element because ' +
                'it renders multiple elements.', el.rawAttrsMap['v-for']);
        }
    }
    parseHTML(template, {
        warn,
        expectHTML: options.expectHTML,
        isUnaryTag: options.isUnaryTag,
        canBeLeftOpenTag: options.canBeLeftOpenTag,
        shouldDecodeNewlines: options.shouldDecodeNewlines,
        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
        shouldKeepComment: options.comments,
        outputSourceRange: options.outputSourceRange,
        start(tag, attrs, unary, start, end) {
            // check namespace.
            // inherit parent ns if there is one
            const ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
            // handle IE svg bug
            /* istanbul ignore if */
            if (isIE && ns === 'svg') {
                attrs = guardIESVGBug(attrs);
            }
            let element = createASTElement(tag, attrs, currentParent);
            if (ns) {
                element.ns = ns;
            }
            {
                if (options.outputSourceRange) {
                    element.start = start;
                    element.end = end;
                    element.rawAttrsMap = element.attrsList.reduce((cumulated, attr) => {
                        cumulated[attr.name] = attr;
                        return cumulated;
                    }, {});
                }
                attrs.forEach(attr => {
                    if (invalidAttributeRE.test(attr.name)) {
                        warn(`Invalid dynamic argument expression: attribute names cannot contain ` +
                            `spaces, quotes, <, >, / or =.`, options.outputSourceRange
                            ? {
                                start: attr.start + attr.name.indexOf(`[`),
                                end: attr.start + attr.name.length
                            }
                            : undefined);
                    }
                });
            }
            if (isForbiddenTag(element) && !isServerRendering()) {
                element.forbidden = true;
                warn('Templates should only be responsible for mapping the state to the ' +
                        'UI. Avoid placing tags with side-effects in your templates, such as ' +
                        `<${tag}>` +
                        ', as they will not be parsed.', { start: element.start });
            }
            // apply pre-transforms
            for (let i = 0; i < preTransforms.length; i++) {
                element = preTransforms[i](element, options) || element;
            }
            if (!inVPre) {
                processPre(element);
                if (element.pre) {
                    inVPre = true;
                }
            }
            if (platformIsPreTag(element.tag)) {
                inPre = true;
            }
            if (inVPre) {
                processRawAttrs(element);
            }
            else if (!element.processed) {
                // structural directives
                processFor(element);
                processIf(element);
                processOnce(element);
            }
            if (!root) {
                root = element;
                {
                    checkRootConstraints(root);
                }
            }
            if (!unary) {
                currentParent = element;
                stack.push(element);
            }
            else {
                closeElement(element);
            }
        },
        end(tag, start, end) {
            const element = stack[stack.length - 1];
            // pop stack
            stack.length -= 1;
            currentParent = stack[stack.length - 1];
            if (options.outputSourceRange) {
                element.end = end;
            }
            closeElement(element);
        },
        chars(text, start, end) {
            if (!currentParent) {
                {
                    if (text === template) {
                        warnOnce('Component template requires a root element, rather than just text.', { start });
                    }
                    else if ((text = text.trim())) {
                        warnOnce(`text "${text}" outside root element will be ignored.`, {
                            start
                        });
                    }
                }
                return;
            }
            // IE textarea placeholder bug
            /* istanbul ignore if */
            if (isIE &&
                currentParent.tag === 'textarea' &&
                currentParent.attrsMap.placeholder === text) {
                return;
            }
            const children = currentParent.children;
            if (inPre || text.trim()) {
                text = isTextTag(currentParent)
                    ? text
                    : decodeHTMLCached(text);
            }
            else if (!children.length) {
                // remove the whitespace-only node right after an opening tag
                text = '';
            }
            else if (whitespaceOption) {
                if (whitespaceOption === 'condense') {
                    // in condense mode, remove the whitespace node if it contains
                    // line break, otherwise condense to a single space
                    text = lineBreakRE.test(text) ? '' : ' ';
                }
                else {
                    text = ' ';
                }
            }
            else {
                text = preserveWhitespace ? ' ' : '';
            }
            if (text) {
                if (!inPre && whitespaceOption === 'condense') {
                    // condense consecutive whitespaces into single space
                    text = text.replace(whitespaceRE, ' ');
                }
                let res;
                let child;
                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
                    child = {
                        type: 2,
                        expression: res.expression,
                        tokens: res.tokens,
                        text
                    };
                }
                else if (text !== ' ' ||
                    !children.length ||
                    children[children.length - 1].text !== ' ') {
                    child = {
                        type: 3,
                        text
                    };
                }
                if (child) {
                    if (options.outputSourceRange) {
                        child.start = start;
                        child.end = end;
                    }
                    children.push(child);
                }
            }
        },
        comment(text, start, end) {
            // adding anything as a sibling to the root node is forbidden
            // comments should still be allowed, but ignored
            if (currentParent) {
                const child = {
                    type: 3,
                    text,
                    isComment: true
                };
                if (options.outputSourceRange) {
                    child.start = start;
                    child.end = end;
                }
                currentParent.children.push(child);
            }
        }
    });
    return root;
}
function processPre(el) {
    if (getAndRemoveAttr(el, 'v-pre') != null) {
        el.pre = true;
    }
}
function processRawAttrs(el) {
    const list = el.attrsList;
    const len = list.length;
    if (len) {
        const attrs = (el.attrs = new Array(len));
        for (let i = 0; i < len; i++) {
            attrs[i] = {
                name: list[i].name,
                value: JSON.stringify(list[i].value)
            };
            if (list[i].start != null) {
                attrs[i].start = list[i].start;
                attrs[i].end = list[i].end;
            }
        }
    }
    else if (!el.pre) {
        // non root node in pre blocks with no attributes
        el.plain = true;
    }
}
function processElement(element, options) {
    processKey(element);
    // determine whether this is a plain element after
    // removing structural attributes
    element.plain =
        !element.key && !element.scopedSlots && !element.attrsList.length;
    processRef(element);
    processSlotContent(element);
    processSlotOutlet(element);
    processComponent(element);
    for (let i = 0; i < transforms.length; i++) {
        element = transforms[i](element, options) || element;
    }
    processAttrs(element);
    return element;
}
function processKey(el) {
    const exp = getBindingAttr(el, 'key');
    if (exp) {
        {
            if (el.tag === 'template') {
                warn(`<template> cannot be keyed. Place the key on real elements instead.`, getRawBindingAttr(el, 'key'));
            }
            if (el.for) {
                const iterator = el.iterator2 || el.iterator1;
                const parent = el.parent;
                if (iterator &&
                    iterator === exp &&
                    parent &&
                    parent.tag === 'transition-group') {
                    warn(`Do not use v-for index as key on <transition-group> children, ` +
                        `this is the same as not using keys.`, getRawBindingAttr(el, 'key'), true /* tip */);
                }
            }
        }
        el.key = exp;
    }
}
function processRef(el) {
    const ref = getBindingAttr(el, 'ref');
    if (ref) {
        el.ref = ref;
        el.refInFor = checkInFor(el);
    }
}
function processFor(el) {
    let exp;
    if ((exp = getAndRemoveAttr(el, 'v-for'))) {
        const res = parseFor(exp);
        if (res) {
            extend(el, res);
        }
        else {
            warn(`Invalid v-for expression: ${exp}`, el.rawAttrsMap['v-for']);
        }
    }
}
function parseFor(exp) {
    const inMatch = exp.match(forAliasRE);
    if (!inMatch)
        return;
    const res = {};
    res.for = inMatch[2].trim();
    const alias = inMatch[1].trim().replace(stripParensRE, '');
    const iteratorMatch = alias.match(forIteratorRE);
    if (iteratorMatch) {
        res.alias = alias.replace(forIteratorRE, '').trim();
        res.iterator1 = iteratorMatch[1].trim();
        if (iteratorMatch[2]) {
            res.iterator2 = iteratorMatch[2].trim();
        }
    }
    else {
        res.alias = alias;
    }
    return res;
}
function processIf(el) {
    const exp = getAndRemoveAttr(el, 'v-if');
    if (exp) {
        el.if = exp;
        addIfCondition(el, {
            exp: exp,
            block: el
        });
    }
    else {
        if (getAndRemoveAttr(el, 'v-else') != null) {
            el.else = true;
        }
        const elseif = getAndRemoveAttr(el, 'v-else-if');
        if (elseif) {
            el.elseif = elseif;
        }
    }
}
function processIfConditions(el, parent) {
    const prev = findPrevElement(parent.children);
    if (prev && prev.if) {
        addIfCondition(prev, {
            exp: el.elseif,
            block: el
        });
    }
    else {
        warn(`v-${el.elseif ? 'else-if="' + el.elseif + '"' : 'else'} ` +
            `used on element <${el.tag}> without corresponding v-if.`, el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
    }
}
function findPrevElement(children) {
    let i = children.length;
    while (i--) {
        if (children[i].type === 1) {
            return children[i];
        }
        else {
            if (children[i].text !== ' ') {
                warn(`text "${children[i].text.trim()}" between v-if and v-else(-if) ` +
                    `will be ignored.`, children[i]);
            }
            children.pop();
        }
    }
}
function addIfCondition(el, condition) {
    if (!el.ifConditions) {
        el.ifConditions = [];
    }
    el.ifConditions.push(condition);
}
function processOnce(el) {
    const once = getAndRemoveAttr(el, 'v-once');
    if (once != null) {
        el.once = true;
    }
}
// handle content being passed to a component as slot,
// e.g. <template slot="xxx">, <div slot-scope="xxx">
function processSlotContent(el) {
    let slotScope;
    if (el.tag === 'template') {
        slotScope = getAndRemoveAttr(el, 'scope');
        /* istanbul ignore if */
        if (slotScope) {
            warn(`the "scope" attribute for scoped slots have been deprecated and ` +
                `replaced by "slot-scope" since 2.5. The new "slot-scope" attribute ` +
                `can also be used on plain elements in addition to <template> to ` +
                `denote scoped slots.`, el.rawAttrsMap['scope'], true);
        }
        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
    }
    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
        /* istanbul ignore if */
        if (el.attrsMap['v-for']) {
            warn(`Ambiguous combined usage of slot-scope and v-for on <${el.tag}> ` +
                `(v-for takes higher priority). Use a wrapper <template> for the ` +
                `scoped slot to make it clearer.`, el.rawAttrsMap['slot-scope'], true);
        }
        el.slotScope = slotScope;
    }
    // slot="xxx"
    const slotTarget = getBindingAttr(el, 'slot');
    if (slotTarget) {
        el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
        // preserve slot as an attribute for native shadow DOM compat
        // only for non-scoped slots.
        if (el.tag !== 'template' && !el.slotScope) {
            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
        }
    }
    // 2.6 v-slot syntax
    {
        if (el.tag === 'template') {
            // v-slot on <template>
            const slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                {
                    if (el.slotTarget || el.slotScope) {
                        warn(`Unexpected mixed usage of different slot syntaxes.`, el);
                    }
                    if (el.parent && !maybeComponent(el.parent)) {
                        warn(`<template v-slot> can only appear at the root level inside ` +
                            `the receiving component`, el);
                    }
                }
                const { name, dynamic } = getSlotName(slotBinding);
                el.slotTarget = name;
                el.slotTargetDynamic = dynamic;
                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
            }
        }
        else {
            // v-slot on component, denotes default slot
            const slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                {
                    if (!maybeComponent(el)) {
                        warn(`v-slot can only be used on components or <template>.`, slotBinding);
                    }
                    if (el.slotScope || el.slotTarget) {
                        warn(`Unexpected mixed usage of different slot syntaxes.`, el);
                    }
                    if (el.scopedSlots) {
                        warn(`To avoid scope ambiguity, the default slot should also use ` +
                            `<template> syntax when there are other named slots.`, slotBinding);
                    }
                }
                // add the component's children to its default slot
                const slots = el.scopedSlots || (el.scopedSlots = {});
                const { name, dynamic } = getSlotName(slotBinding);
                const slotContainer = (slots[name] = createASTElement('template', [], el));
                slotContainer.slotTarget = name;
                slotContainer.slotTargetDynamic = dynamic;
                slotContainer.children = el.children.filter((c) => {
                    if (!c.slotScope) {
                        c.parent = slotContainer;
                        return true;
                    }
                });
                slotContainer.slotScope = slotBinding.value || emptySlotScopeToken;
                // remove children as they are returned from scopedSlots now
                el.children = [];
                // mark el non-plain so data gets generated
                el.plain = false;
            }
        }
    }
}
function getSlotName(binding) {
    let name = binding.name.replace(slotRE, '');
    if (!name) {
        if (binding.name[0] !== '#') {
            name = 'default';
        }
        else {
            warn(`v-slot shorthand syntax requires a slot name.`, binding);
        }
    }
    return dynamicArgRE.test(name)
        ? // dynamic [name]
            { name: name.slice(1, -1), dynamic: true }
        : // static name
            { name: `"${name}"`, dynamic: false };
}
// handle <slot/> outlets
function processSlotOutlet(el) {
    if (el.tag === 'slot') {
        el.slotName = getBindingAttr(el, 'name');
        if (el.key) {
            warn(`\`key\` does not work on <slot> because slots are abstract outlets ` +
                `and can possibly expand into multiple elements. ` +
                `Use the key on a wrapping element instead.`, getRawBindingAttr(el, 'key'));
        }
    }
}
function processComponent(el) {
    let binding;
    if ((binding = getBindingAttr(el, 'is'))) {
        el.component = binding;
    }
    if (getAndRemoveAttr(el, 'inline-template') != null) {
        el.inlineTemplate = true;
    }
}
function processAttrs(el) {
    const list = el.attrsList;
    let i, l, name, rawName, value, modifiers, syncGen, isDynamic;
    for (i = 0, l = list.length; i < l; i++) {
        name = rawName = list[i].name;
        value = list[i].value;
        if (dirRE.test(name)) {
            // mark element as dynamic
            el.hasBindings = true;
            // modifiers
            modifiers = parseModifiers(name.replace(dirRE, ''));
            // support .foo shorthand syntax for the .prop modifier
            if (modifiers) {
                name = name.replace(modifierRE, '');
            }
            if (bindRE.test(name)) {
                // v-bind
                name = name.replace(bindRE, '');
                value = parseFilters(value);
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                if (value.trim().length === 0) {
                    warn(`The value for a v-bind expression cannot be empty. Found in "v-bind:${name}"`);
                }
                if (modifiers) {
                    if (modifiers.prop && !isDynamic) {
                        name = camelize(name);
                        if (name === 'innerHtml')
                            name = 'innerHTML';
                    }
                    if (modifiers.camel && !isDynamic) {
                        name = camelize(name);
                    }
                    if (modifiers.sync) {
                        syncGen = genAssignmentCode(value, `$event`);
                        if (!isDynamic) {
                            addHandler(el, `update:${camelize(name)}`, syncGen, null, false, warn, list[i]);
                            if (hyphenate(name) !== camelize(name)) {
                                addHandler(el, `update:${hyphenate(name)}`, syncGen, null, false, warn, list[i]);
                            }
                        }
                        else {
                            // handler w/ dynamic event name
                            addHandler(el, `"update:"+(${name})`, syncGen, null, false, warn, list[i], true // dynamic
                            );
                        }
                    }
                }
                if ((modifiers && modifiers.prop) ||
                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
                    addProp(el, name, value, list[i], isDynamic);
                }
                else {
                    addAttr(el, name, value, list[i], isDynamic);
                }
            }
            else if (onRE.test(name)) {
                // v-on
                name = name.replace(onRE, '');
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);
            }
            else {
                // normal directives
                name = name.replace(dirRE, '');
                // parse arg
                const argMatch = name.match(argRE);
                let arg = argMatch && argMatch[1];
                isDynamic = false;
                if (arg) {
                    name = name.slice(0, -(arg.length + 1));
                    if (dynamicArgRE.test(arg)) {
                        arg = arg.slice(1, -1);
                        isDynamic = true;
                    }
                }
                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
                if (name === 'model') {
                    checkForAliasModel(el, value);
                }
            }
        }
        else {
            // literal attribute
            {
                const res = parseText(value, delimiters);
                if (res) {
                    warn(`${name}="${value}": ` +
                        'Interpolation inside attributes has been removed. ' +
                        'Use v-bind or the colon shorthand instead. For example, ' +
                        'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
                }
            }
            addAttr(el, name, JSON.stringify(value), list[i]);
            // #6887 firefox doesn't update muted state if set via attribute
            // even immediately after element creation
            if (!el.component &&
                name === 'muted' &&
                platformMustUseProp(el.tag, el.attrsMap.type, name)) {
                addProp(el, name, 'true', list[i]);
            }
        }
    }
}
function checkInFor(el) {
    let parent = el;
    while (parent) {
        if (parent.for !== undefined) {
            return true;
        }
        parent = parent.parent;
    }
    return false;
}
function parseModifiers(name) {
    const match = name.match(modifierRE);
    if (match) {
        const ret = {};
        match.forEach(m => {
            ret[m.slice(1)] = true;
        });
        return ret;
    }
}
function makeAttrsMap(attrs) {
    const map = {};
    for (let i = 0, l = attrs.length; i < l; i++) {
        if (map[attrs[i].name] && !isIE && !isEdge) {
            warn('duplicate attribute: ' + attrs[i].name, attrs[i]);
        }
        map[attrs[i].name] = attrs[i].value;
    }
    return map;
}
// for script (e.g. type="x/template") or style, do not decode content
function isTextTag(el) {
    return el.tag === 'script' || el.tag === 'style';
}
function isForbiddenTag(el) {
    return (el.tag === 'style' ||
        (el.tag === 'script' &&
            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
}
const ieNSBug = /^xmlns:NS\d+/;
const ieNSPrefix = /^NS\d+:/;
/* istanbul ignore next */
function guardIESVGBug(attrs) {
    const res = [];
    for (let i = 0; i < attrs.length; i++) {
        const attr = attrs[i];
        if (!ieNSBug.test(attr.name)) {
            attr.name = attr.name.replace(ieNSPrefix, '');
            res.push(attr);
        }
    }
    return res;
}
function checkForAliasModel(el, value) {
    let _el = el;
    while (_el) {
        if (_el.for && _el.alias === value) {
            warn(`<${el.tag} v-model="${value}">: ` +
                `You are binding v-model directly to a v-for iteration alias. ` +
                `This will not be able to modify the v-for source array because ` +
                `writing to the alias is like modifying a function local variable. ` +
                `Consider using an array of objects and use v-model on an object property instead.`, el.rawAttrsMap['v-model']);
        }
        _el = _el.parent;
    }
}

/**
 * Expand input[v-model] with dynamic type bindings into v-if-else chains
 * Turn this:
 *   <input v-model="data[type]" :type="type">
 * into this:
 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
 *   <input v-else :type="type" v-model="data[type]">
 */
function preTransformNode(el, options) {
    if (el.tag === 'input') {
        const map = el.attrsMap;
        if (!map['v-model']) {
            return;
        }
        let typeBinding;
        if (map[':type'] || map['v-bind:type']) {
            typeBinding = getBindingAttr(el, 'type');
        }
        if (!map.type && !typeBinding && map['v-bind']) {
            typeBinding = `(${map['v-bind']}).type`;
        }
        if (typeBinding) {
            const ifCondition = getAndRemoveAttr(el, 'v-if', true);
            const ifConditionExtra = ifCondition ? `&&(${ifCondition})` : ``;
            const hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
            const elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
            // 1. checkbox
            const branch0 = cloneASTElement(el);
            // process for on the main node
            processFor(branch0);
            addRawAttr(branch0, 'type', 'checkbox');
            processElement(branch0, options);
            branch0.processed = true; // prevent it from double-processed
            branch0.if = `(${typeBinding})==='checkbox'` + ifConditionExtra;
            addIfCondition(branch0, {
                exp: branch0.if,
                block: branch0
            });
            // 2. add radio else-if condition
            const branch1 = cloneASTElement(el);
            getAndRemoveAttr(branch1, 'v-for', true);
            addRawAttr(branch1, 'type', 'radio');
            processElement(branch1, options);
            addIfCondition(branch0, {
                exp: `(${typeBinding})==='radio'` + ifConditionExtra,
                block: branch1
            });
            // 3. other
            const branch2 = cloneASTElement(el);
            getAndRemoveAttr(branch2, 'v-for', true);
            addRawAttr(branch2, ':type', typeBinding);
            processElement(branch2, options);
            addIfCondition(branch0, {
                exp: ifCondition,
                block: branch2
            });
            if (hasElse) {
                branch0.else = true;
            }
            else if (elseIfCondition) {
                branch0.elseif = elseIfCondition;
            }
            return branch0;
        }
    }
}
function cloneASTElement(el) {
    return createASTElement(el.tag, el.attrsList.slice(), el.parent);
}
var model = {
    preTransformNode
};

var modules = [klass, style, model];

function text(el, dir) {
    if (dir.value) {
        addProp(el, 'textContent', `_s(${dir.value})`, dir);
    }
}

function html(el, dir) {
    if (dir.value) {
        addProp(el, 'innerHTML', `_s(${dir.value})`, dir);
    }
}

var directives = {
    model: model$1,
    text,
    html
};

const baseOptions = {
    expectHTML: true,
    modules,
    directives,
    isPreTag,
    isUnaryTag,
    mustUseProp,
    canBeLeftOpenTag,
    isReservedTag,
    getTagNamespace,
    staticKeys: genStaticKeys$1(modules)
};

let isStaticKey;
let isPlatformReservedTag;
const genStaticKeysCached = cached(genStaticKeys);
/**
 * Goal of the optimizer: walk the generated template AST tree
 * and detect sub-trees that are purely static, i.e. parts of
 * the DOM that never needs to change.
 *
 * Once we detect these sub-trees, we can:
 *
 * 1. Hoist them into constants, so that we no longer need to
 *    create fresh nodes for them on each re-render;
 * 2. Completely skip them in the patching process.
 */
function optimize(root, options) {
    if (!root)
        return;
    isStaticKey = genStaticKeysCached(options.staticKeys || '');
    isPlatformReservedTag = options.isReservedTag || no;
    // first pass: mark all non-static nodes.
    markStatic(root);
    // second pass: mark static roots.
    markStaticRoots(root, false);
}
function genStaticKeys(keys) {
    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
        (keys ? ',' + keys : ''));
}
function markStatic(node) {
    node.static = isStatic(node);
    if (node.type === 1) {
        // do not make component slot content static. this avoids
        // 1. components not able to mutate slot nodes
        // 2. static slot content fails for hot-reloading
        if (!isPlatformReservedTag(node.tag) &&
            node.tag !== 'slot' &&
            node.attrsMap['inline-template'] == null) {
            return;
        }
        for (let i = 0, l = node.children.length; i < l; i++) {
            const child = node.children[i];
            markStatic(child);
            if (!child.static) {
                node.static = false;
            }
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                const block = node.ifConditions[i].block;
                markStatic(block);
                if (!block.static) {
                    node.static = false;
                }
            }
        }
    }
}
function markStaticRoots(node, isInFor) {
    if (node.type === 1) {
        if (node.static || node.once) {
            node.staticInFor = isInFor;
        }
        // For a node to qualify as a static root, it should have children that
        // are not just static text. Otherwise the cost of hoisting out will
        // outweigh the benefits and it's better off to just always render it fresh.
        if (node.static &&
            node.children.length &&
            !(node.children.length === 1 && node.children[0].type === 3)) {
            node.staticRoot = true;
            return;
        }
        else {
            node.staticRoot = false;
        }
        if (node.children) {
            for (let i = 0, l = node.children.length; i < l; i++) {
                markStaticRoots(node.children[i], isInFor || !!node.for);
            }
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                markStaticRoots(node.ifConditions[i].block, isInFor);
            }
        }
    }
}
function isStatic(node) {
    if (node.type === 2) {
        // expression
        return false;
    }
    if (node.type === 3) {
        // text
        return true;
    }
    return !!(node.pre ||
        (!node.hasBindings && // no dynamic bindings
            !node.if &&
            !node.for && // not v-if or v-for or v-else
            !isBuiltInTag(node.tag) && // not a built-in
            isPlatformReservedTag(node.tag) && // not a component
            !isDirectChildOfTemplateFor(node) &&
            Object.keys(node).every(isStaticKey)));
}
function isDirectChildOfTemplateFor(node) {
    while (node.parent) {
        node = node.parent;
        if (node.tag !== 'template') {
            return false;
        }
        if (node.for) {
            return true;
        }
    }
    return false;
}

const fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
const fnInvokeRE = /\([^)]*?\);*$/;
const simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
// KeyboardEvent.keyCode aliases
const keyCodes = {
    esc: 27,
    tab: 9,
    enter: 13,
    space: 32,
    up: 38,
    left: 37,
    right: 39,
    down: 40,
    delete: [8, 46]
};
// KeyboardEvent.key aliases
const keyNames = {
    // #7880: IE11 and Edge use `Esc` for Escape key name.
    esc: ['Esc', 'Escape'],
    tab: 'Tab',
    enter: 'Enter',
    // #9112: IE11 uses `Spacebar` for Space key name.
    space: [' ', 'Spacebar'],
    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
    up: ['Up', 'ArrowUp'],
    left: ['Left', 'ArrowLeft'],
    right: ['Right', 'ArrowRight'],
    down: ['Down', 'ArrowDown'],
    // #9112: IE11 uses `Del` for Delete key name.
    delete: ['Backspace', 'Delete', 'Del']
};
// #4868: modifiers that prevent the execution of the listener
// need to explicitly return null so that we can determine whether to remove
// the listener for .once
const genGuard = condition => `if(${condition})return null;`;
const modifierCode = {
    stop: '$event.stopPropagation();',
    prevent: '$event.preventDefault();',
    self: genGuard(`$event.target !== $event.currentTarget`),
    ctrl: genGuard(`!$event.ctrlKey`),
    shift: genGuard(`!$event.shiftKey`),
    alt: genGuard(`!$event.altKey`),
    meta: genGuard(`!$event.metaKey`),
    left: genGuard(`'button' in $event && $event.button !== 0`),
    middle: genGuard(`'button' in $event && $event.button !== 1`),
    right: genGuard(`'button' in $event && $event.button !== 2`)
};
function genHandlers(events, isNative) {
    const prefix = isNative ? 'nativeOn:' : 'on:';
    let staticHandlers = ``;
    let dynamicHandlers = ``;
    for (const name in events) {
        const handlerCode = genHandler(events[name]);
        //@ts-expect-error
        if (events[name] && events[name].dynamic) {
            dynamicHandlers += `${name},${handlerCode},`;
        }
        else {
            staticHandlers += `"${name}":${handlerCode},`;
        }
    }
    staticHandlers = `{${staticHandlers.slice(0, -1)}}`;
    if (dynamicHandlers) {
        return prefix + `_d(${staticHandlers},[${dynamicHandlers.slice(0, -1)}])`;
    }
    else {
        return prefix + staticHandlers;
    }
}
function genHandler(handler) {
    if (!handler) {
        return 'function(){}';
    }
    if (Array.isArray(handler)) {
        return `[${handler.map(handler => genHandler(handler)).join(',')}]`;
    }
    const isMethodPath = simplePathRE.test(handler.value);
    const isFunctionExpression = fnExpRE.test(handler.value);
    const isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
    if (!handler.modifiers) {
        if (isMethodPath || isFunctionExpression) {
            return handler.value;
        }
        return `function($event){${isFunctionInvocation ? `return ${handler.value}` : handler.value}}`; // inline statement
    }
    else {
        let code = '';
        let genModifierCode = '';
        const keys = [];
        for (const key in handler.modifiers) {
            if (modifierCode[key]) {
                genModifierCode += modifierCode[key];
                // left/right
                if (keyCodes[key]) {
                    keys.push(key);
                }
            }
            else if (key === 'exact') {
                const modifiers = handler.modifiers;
                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
                    .filter(keyModifier => !modifiers[keyModifier])
                    .map(keyModifier => `$event.${keyModifier}Key`)
                    .join('||'));
            }
            else {
                keys.push(key);
            }
        }
        if (keys.length) {
            code += genKeyFilter(keys);
        }
        // Make sure modifiers like prevent and stop get executed after key filtering
        if (genModifierCode) {
            code += genModifierCode;
        }
        const handlerCode = isMethodPath
            ? `return ${handler.value}.apply(null, arguments)`
            : isFunctionExpression
                ? `return (${handler.value}).apply(null, arguments)`
                : isFunctionInvocation
                    ? `return ${handler.value}`
                    : handler.value;
        return `function($event){${code}${handlerCode}}`;
    }
}
function genKeyFilter(keys) {
    return (
    // make sure the key filters only apply to KeyboardEvents
    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
    // key events that do not have keyCode property...
    `if(!$event.type.indexOf('key')&&` +
        `${keys.map(genFilterCode).join('&&')})return null;`);
}
function genFilterCode(key) {
    const keyVal = parseInt(key, 10);
    if (keyVal) {
        return `$event.keyCode!==${keyVal}`;
    }
    const keyCode = keyCodes[key];
    const keyName = keyNames[key];
    return (`_k($event.keyCode,` +
        `${JSON.stringify(key)},` +
        `${JSON.stringify(keyCode)},` +
        `$event.key,` +
        `${JSON.stringify(keyName)}` +
        `)`);
}

function on(el, dir) {
    if (dir.modifiers) {
        warn$2(`v-on without argument does not support modifiers.`);
    }
    el.wrapListeners = (code) => `_g(${code},${dir.value})`;
}

function bind(el, dir) {
    el.wrapData = (code) => {
        return `_b(${code},'${el.tag}',${dir.value},${dir.modifiers && dir.modifiers.prop ? 'true' : 'false'}${dir.modifiers && dir.modifiers.sync ? ',true' : ''})`;
    };
}

var baseDirectives = {
    on,
    bind,
    cloak: noop
};

class CodegenState {
    constructor(options) {
        this.options = options;
        this.warn = options.warn || baseWarn;
        this.transforms = pluckModuleFunction(options.modules, 'transformCode');
        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
        this.directives = extend(extend({}, baseDirectives), options.directives);
        const isReservedTag = options.isReservedTag || no;
        this.maybeComponent = (el) => !!el.component || !isReservedTag(el.tag);
        this.onceId = 0;
        this.staticRenderFns = [];
        this.pre = false;
    }
}
function generate(ast, options) {
    const state = new CodegenState(options);
    // fix #11483, Root level <script> tags should not be rendered.
    const code = ast
        ? ast.tag === 'script'
            ? 'null'
            : genElement(ast, state)
        : '_c("div")';
    return {
        render: `with(this){return ${code}}`,
        staticRenderFns: state.staticRenderFns
    };
}
function genElement(el, state) {
    if (el.parent) {
        el.pre = el.pre || el.parent.pre;
    }
    if (el.staticRoot && !el.staticProcessed) {
        return genStatic(el, state);
    }
    else if (el.once && !el.onceProcessed) {
        return genOnce(el, state);
    }
    else if (el.for && !el.forProcessed) {
        return genFor(el, state);
    }
    else if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
        return genChildren(el, state) || 'void 0';
    }
    else if (el.tag === 'slot') {
        return genSlot(el, state);
    }
    else {
        // component or element
        let code;
        if (el.component) {
            code = genComponent(el.component, el, state);
        }
        else {
            let data;
            const maybeComponent = state.maybeComponent(el);
            if (!el.plain || (el.pre && maybeComponent)) {
                data = genData(el, state);
            }
            let tag;
            // check if this is a component in <script setup>
            const bindings = state.options.bindings;
            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
                tag = checkBindingType(bindings, el.tag);
            }
            if (!tag)
                tag = `'${el.tag}'`;
            const children = el.inlineTemplate ? null : genChildren(el, state, true);
            code = `_c(${tag}${data ? `,${data}` : '' // data
            }${children ? `,${children}` : '' // children
            })`;
        }
        // module transforms
        for (let i = 0; i < state.transforms.length; i++) {
            code = state.transforms[i](el, code);
        }
        return code;
    }
}
function checkBindingType(bindings, key) {
    const camelName = camelize(key);
    const PascalName = capitalize(camelName);
    const checkType = (type) => {
        if (bindings[key] === type) {
            return key;
        }
        if (bindings[camelName] === type) {
            return camelName;
        }
        if (bindings[PascalName] === type) {
            return PascalName;
        }
    };
    const fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
        checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
    if (fromConst) {
        return fromConst;
    }
    const fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
        checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
        checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
    if (fromMaybeRef) {
        return fromMaybeRef;
    }
}
// hoist static sub-trees out
function genStatic(el, state) {
    el.staticProcessed = true;
    // Some elements (templates) need to behave differently inside of a v-pre
    // node.  All pre nodes are static roots, so we can use this as a location to
    // wrap a state change and reset it upon exiting the pre node.
    const originalPreState = state.pre;
    if (el.pre) {
        state.pre = el.pre;
    }
    state.staticRenderFns.push(`with(this){return ${genElement(el, state)}}`);
    state.pre = originalPreState;
    return `_m(${state.staticRenderFns.length - 1}${el.staticInFor ? ',true' : ''})`;
}
// v-once
function genOnce(el, state) {
    el.onceProcessed = true;
    if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.staticInFor) {
        let key = '';
        let parent = el.parent;
        while (parent) {
            if (parent.for) {
                key = parent.key;
                break;
            }
            parent = parent.parent;
        }
        if (!key) {
            state.warn(`v-once can only be used inside v-for that is keyed. `, el.rawAttrsMap['v-once']);
            return genElement(el, state);
        }
        return `_o(${genElement(el, state)},${state.onceId++},${key})`;
    }
    else {
        return genStatic(el, state);
    }
}
function genIf(el, state, altGen, altEmpty) {
    el.ifProcessed = true; // avoid recursion
    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
}
function genIfConditions(conditions, state, altGen, altEmpty) {
    if (!conditions.length) {
        return altEmpty || '_e()';
    }
    const condition = conditions.shift();
    if (condition.exp) {
        return `(${condition.exp})?${genTernaryExp(condition.block)}:${genIfConditions(conditions, state, altGen, altEmpty)}`;
    }
    else {
        return `${genTernaryExp(condition.block)}`;
    }
    // v-if with v-once should generate code like (a)?_m(0):_m(1)
    function genTernaryExp(el) {
        return altGen
            ? altGen(el, state)
            : el.once
                ? genOnce(el, state)
                : genElement(el, state);
    }
}
function genFor(el, state, altGen, altHelper) {
    const exp = el.for;
    const alias = el.alias;
    const iterator1 = el.iterator1 ? `,${el.iterator1}` : '';
    const iterator2 = el.iterator2 ? `,${el.iterator2}` : '';
    if (state.maybeComponent(el) &&
        el.tag !== 'slot' &&
        el.tag !== 'template' &&
        !el.key) {
        state.warn(`<${el.tag} v-for="${alias} in ${exp}">: component lists rendered with ` +
            `v-for should have explicit keys. ` +
            `See https://v2.vuejs.org/v2/guide/list.html#key for more info.`, el.rawAttrsMap['v-for'], true /* tip */);
    }
    el.forProcessed = true; // avoid recursion
    return (`${altHelper || '_l'}((${exp}),` +
        `function(${alias}${iterator1}${iterator2}){` +
        `return ${(altGen || genElement)(el, state)}` +
        '})');
}
function genData(el, state) {
    let data = '{';
    // directives first.
    // directives may mutate the el's other properties before they are generated.
    const dirs = genDirectives(el, state);
    if (dirs)
        data += dirs + ',';
    // key
    if (el.key) {
        data += `key:${el.key},`;
    }
    // ref
    if (el.ref) {
        data += `ref:${el.ref},`;
    }
    if (el.refInFor) {
        data += `refInFor:true,`;
    }
    // pre
    if (el.pre) {
        data += `pre:true,`;
    }
    // record original tag name for components using "is" attribute
    if (el.component) {
        data += `tag:"${el.tag}",`;
    }
    // module data generation functions
    for (let i = 0; i < state.dataGenFns.length; i++) {
        data += state.dataGenFns[i](el);
    }
    // attributes
    if (el.attrs) {
        data += `attrs:${genProps(el.attrs)},`;
    }
    // DOM props
    if (el.props) {
        data += `domProps:${genProps(el.props)},`;
    }
    // event handlers
    if (el.events) {
        data += `${genHandlers(el.events, false)},`;
    }
    if (el.nativeEvents) {
        data += `${genHandlers(el.nativeEvents, true)},`;
    }
    // slot target
    // only for non-scoped slots
    if (el.slotTarget && !el.slotScope) {
        data += `slot:${el.slotTarget},`;
    }
    // scoped slots
    if (el.scopedSlots) {
        data += `${genScopedSlots(el, el.scopedSlots, state)},`;
    }
    // component v-model
    if (el.model) {
        data += `model:{value:${el.model.value},callback:${el.model.callback},expression:${el.model.expression}},`;
    }
    // inline-template
    if (el.inlineTemplate) {
        const inlineTemplate = genInlineTemplate(el, state);
        if (inlineTemplate) {
            data += `${inlineTemplate},`;
        }
    }
    data = data.replace(/,$/, '') + '}';
    // v-bind dynamic argument wrap
    // v-bind with dynamic arguments must be applied using the same v-bind object
    // merge helper so that class/style/mustUseProp attrs are handled correctly.
    if (el.dynamicAttrs) {
        data = `_b(${data},"${el.tag}",${genProps(el.dynamicAttrs)})`;
    }
    // v-bind data wrap
    if (el.wrapData) {
        data = el.wrapData(data);
    }
    // v-on data wrap
    if (el.wrapListeners) {
        data = el.wrapListeners(data);
    }
    return data;
}
function genDirectives(el, state) {
    const dirs = el.directives;
    if (!dirs)
        return;
    let res = 'directives:[';
    let hasRuntime = false;
    let i, l, dir, needRuntime;
    for (i = 0, l = dirs.length; i < l; i++) {
        dir = dirs[i];
        needRuntime = true;
        const gen = state.directives[dir.name];
        if (gen) {
            // compile-time directive that manipulates AST.
            // returns true if it also needs a runtime counterpart.
            needRuntime = !!gen(el, dir, state.warn);
        }
        if (needRuntime) {
            hasRuntime = true;
            res += `{name:"${dir.name}",rawName:"${dir.rawName}"${dir.value
                ? `,value:(${dir.value}),expression:${JSON.stringify(dir.value)}`
                : ''}${dir.arg ? `,arg:${dir.isDynamicArg ? dir.arg : `"${dir.arg}"`}` : ''}${dir.modifiers ? `,modifiers:${JSON.stringify(dir.modifiers)}` : ''}},`;
        }
    }
    if (hasRuntime) {
        return res.slice(0, -1) + ']';
    }
}
function genInlineTemplate(el, state) {
    const ast = el.children[0];
    if ((el.children.length !== 1 || ast.type !== 1)) {
        state.warn('Inline-template components must have exactly one child element.', { start: el.start });
    }
    if (ast && ast.type === 1) {
        const inlineRenderFns = generate(ast, state.options);
        return `inlineTemplate:{render:function(){${inlineRenderFns.render}},staticRenderFns:[${inlineRenderFns.staticRenderFns
            .map(code => `function(){${code}}`)
            .join(',')}]}`;
    }
}
function genScopedSlots(el, slots, state) {
    // by default scoped slots are considered "stable", this allows child
    // components with only scoped slots to skip forced updates from parent.
    // but in some cases we have to bail-out of this optimization
    // for example if the slot contains dynamic names, has v-if or v-for on them...
    let needsForceUpdate = el.for ||
        Object.keys(slots).some(key => {
            const slot = slots[key];
            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
            );
        });
    // #9534: if a component with scoped slots is inside a conditional branch,
    // it's possible for the same component to be reused but with different
    // compiled slot content. To avoid that, we generate a unique key based on
    // the generated code of all the slot contents.
    let needsKey = !!el.if;
    // OR when it is inside another scoped slot or v-for (the reactivity may be
    // disconnected due to the intermediate scope variable)
    // #9438, #9506
    // TODO: this can be further optimized by properly analyzing in-scope bindings
    // and skip force updating ones that do not actually use scope variables.
    if (!needsForceUpdate) {
        let parent = el.parent;
        while (parent) {
            if ((parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||
                parent.for) {
                needsForceUpdate = true;
                break;
            }
            if (parent.if) {
                needsKey = true;
            }
            parent = parent.parent;
        }
    }
    const generatedSlots = Object.keys(slots)
        .map(key => genScopedSlot(slots[key], state))
        .join(',');
    return `scopedSlots:_u([${generatedSlots}]${needsForceUpdate ? `,null,true` : ``}${!needsForceUpdate && needsKey ? `,null,false,${hash(generatedSlots)}` : ``})`;
}
function hash(str) {
    let hash = 5381;
    let i = str.length;
    while (i) {
        hash = (hash * 33) ^ str.charCodeAt(--i);
    }
    return hash >>> 0;
}
function containsSlotChild(el) {
    if (el.type === 1) {
        if (el.tag === 'slot') {
            return true;
        }
        return el.children.some(containsSlotChild);
    }
    return false;
}
function genScopedSlot(el, state) {
    const isLegacySyntax = el.attrsMap['slot-scope'];
    if (el.if && !el.ifProcessed && !isLegacySyntax) {
        return genIf(el, state, genScopedSlot, `null`);
    }
    if (el.for && !el.forProcessed) {
        return genFor(el, state, genScopedSlot);
    }
    const slotScope = el.slotScope === emptySlotScopeToken ? `` : String(el.slotScope);
    const fn = `function(${slotScope}){` +
        `return ${el.tag === 'template'
            ? el.if && isLegacySyntax
                ? `(${el.if})?${genChildren(el, state) || 'undefined'}:undefined`
                : genChildren(el, state) || 'undefined'
            : genElement(el, state)}}`;
    // reverse proxy v-slot without scope on this.$slots
    const reverseProxy = slotScope ? `` : `,proxy:true`;
    return `{key:${el.slotTarget || `"default"`},fn:${fn}${reverseProxy}}`;
}
function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
    const children = el.children;
    if (children.length) {
        const el = children[0];
        // optimize single v-for
        if (children.length === 1 &&
            el.for &&
            el.tag !== 'template' &&
            el.tag !== 'slot') {
            const normalizationType = checkSkip
                ? state.maybeComponent(el)
                    ? `,1`
                    : `,0`
                : ``;
            return `${(altGenElement || genElement)(el, state)}${normalizationType}`;
        }
        const normalizationType = checkSkip
            ? getNormalizationType(children, state.maybeComponent)
            : 0;
        const gen = altGenNode || genNode;
        return `[${children.map(c => gen(c, state)).join(',')}]${normalizationType ? `,${normalizationType}` : ''}`;
    }
}
// determine the normalization needed for the children array.
// 0: no normalization needed
// 1: simple normalization needed (possible 1-level deep nested array)
// 2: full normalization needed
function getNormalizationType(children, maybeComponent) {
    let res = 0;
    for (let i = 0; i < children.length; i++) {
        const el = children[i];
        if (el.type !== 1) {
            continue;
        }
        if (needsNormalization(el) ||
            (el.ifConditions &&
                el.ifConditions.some(c => needsNormalization(c.block)))) {
            res = 2;
            break;
        }
        if (maybeComponent(el) ||
            (el.ifConditions && el.ifConditions.some(c => maybeComponent(c.block)))) {
            res = 1;
        }
    }
    return res;
}
function needsNormalization(el) {
    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
}
function genNode(node, state) {
    if (node.type === 1) {
        return genElement(node, state);
    }
    else if (node.type === 3 && node.isComment) {
        return genComment(node);
    }
    else {
        return genText(node);
    }
}
function genText(text) {
    return `_v(${text.type === 2
        ? text.expression // no need for () because already wrapped in _s()
        : transformSpecialNewlines(JSON.stringify(text.text))})`;
}
function genComment(comment) {
    return `_e(${JSON.stringify(comment.text)})`;
}
function genSlot(el, state) {
    const slotName = el.slotName || '"default"';
    const children = genChildren(el, state);
    let res = `_t(${slotName}${children ? `,function(){return ${children}}` : ''}`;
    const attrs = el.attrs || el.dynamicAttrs
        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(attr => ({
            // slot props are camelized
            name: camelize(attr.name),
            value: attr.value,
            dynamic: attr.dynamic
        })))
        : null;
    const bind = el.attrsMap['v-bind'];
    if ((attrs || bind) && !children) {
        res += `,null`;
    }
    if (attrs) {
        res += `,${attrs}`;
    }
    if (bind) {
        res += `${attrs ? '' : ',null'},${bind}`;
    }
    return res + ')';
}
// componentName is el.component, take it as argument to shun flow's pessimistic refinement
function genComponent(componentName, el, state) {
    const children = el.inlineTemplate ? null : genChildren(el, state, true);
    return `_c(${componentName},${genData(el, state)}${children ? `,${children}` : ''})`;
}
function genProps(props) {
    let staticProps = ``;
    let dynamicProps = ``;
    for (let i = 0; i < props.length; i++) {
        const prop = props[i];
        const value = transformSpecialNewlines(prop.value);
        if (prop.dynamic) {
            dynamicProps += `${prop.name},${value},`;
        }
        else {
            staticProps += `"${prop.name}":${value},`;
        }
    }
    staticProps = `{${staticProps.slice(0, -1)}}`;
    if (dynamicProps) {
        return `_d(${staticProps},[${dynamicProps.slice(0, -1)}])`;
    }
    else {
        return staticProps;
    }
}
// #3895, #4268
function transformSpecialNewlines(text) {
    return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
}

// these keywords should not appear inside expressions, but operators like
// typeof, instanceof and in are allowed
const prohibitedKeywordRE = new RegExp('\\b' +
    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
        'super,throw,while,yield,delete,export,import,return,switch,default,' +
        'extends,finally,continue,debugger,function,arguments')
        .split(',')
        .join('\\b|\\b') +
    '\\b');
// these unary operators should not be used as property/method names
const unaryOperatorsRE = new RegExp('\\b' +
    'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
    '\\s*\\([^\\)]*\\)');
// strip strings in expressions
const stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
// detect problematic expressions in a template
function detectErrors(ast, warn) {
    if (ast) {
        checkNode(ast, warn);
    }
}
function checkNode(node, warn) {
    if (node.type === 1) {
        for (const name in node.attrsMap) {
            if (dirRE.test(name)) {
                const value = node.attrsMap[name];
                if (value) {
                    const range = node.rawAttrsMap[name];
                    if (name === 'v-for') {
                        checkFor(node, `v-for="${value}"`, warn, range);
                    }
                    else if (name === 'v-slot' || name[0] === '#') {
                        checkFunctionParameterExpression(value, `${name}="${value}"`, warn, range);
                    }
                    else if (onRE.test(name)) {
                        checkEvent(value, `${name}="${value}"`, warn, range);
                    }
                    else {
                        checkExpression(value, `${name}="${value}"`, warn, range);
                    }
                }
            }
        }
        if (node.children) {
            for (let i = 0; i < node.children.length; i++) {
                checkNode(node.children[i], warn);
            }
        }
    }
    else if (node.type === 2) {
        checkExpression(node.expression, node.text, warn, node);
    }
}
function checkEvent(exp, text, warn, range) {
    const stripped = exp.replace(stripStringRE, '');
    const keywordMatch = stripped.match(unaryOperatorsRE);
    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
        warn(`avoid using JavaScript unary operator as property name: ` +
            `"${keywordMatch[0]}" in expression ${text.trim()}`, range);
    }
    checkExpression(exp, text, warn, range);
}
function checkFor(node, text, warn, range) {
    checkExpression(node.for || '', text, warn, range);
    checkIdentifier(node.alias, 'v-for alias', text, warn, range);
    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
}
function checkIdentifier(ident, type, text, warn, range) {
    if (typeof ident === 'string') {
        try {
            new Function(`var ${ident}=_`);
        }
        catch (e) {
            warn(`invalid ${type} "${ident}" in expression: ${text.trim()}`, range);
        }
    }
}
function checkExpression(exp, text, warn, range) {
    try {
        new Function(`return ${exp}`);
    }
    catch (e) {
        const keywordMatch = exp
            .replace(stripStringRE, '')
            .match(prohibitedKeywordRE);
        if (keywordMatch) {
            warn(`avoid using JavaScript keyword as property name: ` +
                `"${keywordMatch[0]}"\n  Raw expression: ${text.trim()}`, range);
        }
        else {
            warn(`invalid expression: ${e.message} in\n\n` +
                `    ${exp}\n\n` +
                `  Raw expression: ${text.trim()}\n`, range);
        }
    }
}
function checkFunctionParameterExpression(exp, text, warn, range) {
    try {
        new Function(exp, '');
    }
    catch (e) {
        warn(`invalid function parameter expression: ${e.message} in\n\n` +
            `    ${exp}\n\n` +
            `  Raw expression: ${text.trim()}\n`, range);
    }
}

const range = 2;
function generateCodeFrame(source, start = 0, end = source.length) {
    const lines = source.split(/\r?\n/);
    let count = 0;
    const res = [];
    for (let i = 0; i < lines.length; i++) {
        count += lines[i].length + 1;
        if (count >= start) {
            for (let j = i - range; j <= i + range || end > count; j++) {
                if (j < 0 || j >= lines.length)
                    continue;
                res.push(`${j + 1}${repeat(` `, 3 - String(j + 1).length)}|  ${lines[j]}`);
                const lineLength = lines[j].length;
                if (j === i) {
                    // push underline
                    const pad = start - (count - lineLength) + 1;
                    const length = end > count ? lineLength - pad : end - start;
                    res.push(`   |  ` + repeat(` `, pad) + repeat(`^`, length));
                }
                else if (j > i) {
                    if (end > count) {
                        const length = Math.min(end - count, lineLength);
                        res.push(`   |  ` + repeat(`^`, length));
                    }
                    count += lineLength + 1;
                }
            }
            break;
        }
    }
    return res.join('\n');
}
function repeat(str, n) {
    let result = '';
    if (n > 0) {
        // eslint-disable-next-line no-constant-condition
        while (true) {
            // eslint-disable-line
            if (n & 1)
                result += str;
            n >>>= 1;
            if (n <= 0)
                break;
            str += str;
        }
    }
    return result;
}

function createFunction(code, errors) {
    try {
        return new Function(code);
    }
    catch (err) {
        errors.push({ err, code });
        return noop;
    }
}
function createCompileToFunctionFn(compile) {
    const cache = Object.create(null);
    return function compileToFunctions(template, options, vm) {
        options = extend({}, options);
        const warn = options.warn || warn$2;
        delete options.warn;
        /* istanbul ignore if */
        {
            // detect possible CSP restriction
            try {
                new Function('return 1');
            }
            catch (e) {
                if (e.toString().match(/unsafe-eval|CSP/)) {
                    warn('It seems you are using the standalone build of Vue.js in an ' +
                        'environment with Content Security Policy that prohibits unsafe-eval. ' +
                        'The template compiler cannot work in this environment. Consider ' +
                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
                        'templates into render functions.');
                }
            }
        }
        // check cache
        const key = options.delimiters
            ? String(options.delimiters) + template
            : template;
        if (cache[key]) {
            return cache[key];
        }
        // compile
        const compiled = compile(template, options);
        // check compilation errors/tips
        {
            if (compiled.errors && compiled.errors.length) {
                if (options.outputSourceRange) {
                    compiled.errors.forEach(e => {
                        warn(`Error compiling template:\n\n${e.msg}\n\n` +
                            generateCodeFrame(template, e.start, e.end), vm);
                    });
                }
                else {
                    warn(`Error compiling template:\n\n${template}\n\n` +
                        compiled.errors.map(e => `- ${e}`).join('\n') +
                        '\n', vm);
                }
            }
            if (compiled.tips && compiled.tips.length) {
                if (options.outputSourceRange) {
                    compiled.tips.forEach(e => tip(e.msg, vm));
                }
                else {
                    compiled.tips.forEach(msg => tip(msg, vm));
                }
            }
        }
        // turn code into functions
        const res = {};
        const fnGenErrors = [];
        res.render = createFunction(compiled.render, fnGenErrors);
        res.staticRenderFns = compiled.staticRenderFns.map(code => {
            return createFunction(code, fnGenErrors);
        });
        // check function generation errors.
        // this should only happen if there is a bug in the compiler itself.
        // mostly for codegen development use
        /* istanbul ignore if */
        {
            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
                warn(`Failed to generate render function:\n\n` +
                    fnGenErrors
                        .map(({ err, code }) => `${err.toString()} in\n\n${code}\n`)
                        .join('\n'), vm);
            }
        }
        return (cache[key] = res);
    };
}

function createCompilerCreator(baseCompile) {
    return function createCompiler(baseOptions) {
        function compile(template, options) {
            const finalOptions = Object.create(baseOptions);
            const errors = [];
            const tips = [];
            let warn = (msg, range, tip) => {
                (tip ? tips : errors).push(msg);
            };
            if (options) {
                if (options.outputSourceRange) {
                    // $flow-disable-line
                    const leadingSpaceLength = template.match(/^\s*/)[0].length;
                    warn = (msg, range, tip) => {
                        const data = typeof msg === 'string' ? { msg } : msg;
                        if (range) {
                            if (range.start != null) {
                                data.start = range.start + leadingSpaceLength;
                            }
                            if (range.end != null) {
                                data.end = range.end + leadingSpaceLength;
                            }
                        }
                        (tip ? tips : errors).push(data);
                    };
                }
                // merge custom modules
                if (options.modules) {
                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
                }
                // merge custom directives
                if (options.directives) {
                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
                }
                // copy other options
                for (const key in options) {
                    if (key !== 'modules' && key !== 'directives') {
                        finalOptions[key] = options[key];
                    }
                }
            }
            finalOptions.warn = warn;
            const compiled = baseCompile(template.trim(), finalOptions);
            {
                detectErrors(compiled.ast, warn);
            }
            compiled.errors = errors;
            compiled.tips = tips;
            return compiled;
        }
        return {
            compile,
            compileToFunctions: createCompileToFunctionFn(compile)
        };
    };
}

// `createCompilerCreator` allows creating compilers that use alternative
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
// Here we just export a default compiler using the default parts.
const createCompiler = createCompilerCreator(function baseCompile(template, options) {
    const ast = parse(template.trim(), options);
    if (options.optimize !== false) {
        optimize(ast, options);
    }
    const code = generate(ast, options);
    return {
        ast,
        render: code.render,
        staticRenderFns: code.staticRenderFns
    };
});

const { compile, compileToFunctions } = createCompiler(baseOptions);

// check whether current browser encodes a char inside attribute values
let div;
function getShouldDecode(href) {
    div = div || document.createElement('div');
    div.innerHTML = href ? `<a href="\n"/>` : `<div a="\n"/>`;
    return div.innerHTML.indexOf('&#10;') > 0;
}
// #3663: IE encodes newlines inside attribute values while other browsers don't
const shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
// #6828: chrome encodes content in a[href]
const shouldDecodeNewlinesForHref = inBrowser
    ? getShouldDecode(true)
    : false;

const idToTemplate = cached(id => {
    const el = query(id);
    return el && el.innerHTML;
});
const mount = Vue.prototype.$mount;
Vue.prototype.$mount = function (el, hydrating) {
    el = el && query(el);
    /* istanbul ignore if */
    if (el === document.body || el === document.documentElement) {
        warn$2(`Do not mount Vue to <html> or <body> - mount to normal elements instead.`);
        return this;
    }
    const options = this.$options;
    // resolve template/el and convert to render function
    if (!options.render) {
        let template = options.template;
        if (template) {
            if (typeof template === 'string') {
                if (template.charAt(0) === '#') {
                    template = idToTemplate(template);
                    /* istanbul ignore if */
                    if (!template) {
                        warn$2(`Template element not found or is empty: ${options.template}`, this);
                    }
                }
            }
            else if (template.nodeType) {
                template = template.innerHTML;
            }
            else {
                {
                    warn$2('invalid template option:' + template, this);
                }
                return this;
            }
        }
        else if (el) {
            // @ts-expect-error
            template = getOuterHTML(el);
        }
        if (template) {
            /* istanbul ignore if */
            if (config.performance && mark) {
                mark('compile');
            }
            const { render, staticRenderFns } = compileToFunctions(template, {
                outputSourceRange: true,
                shouldDecodeNewlines,
                shouldDecodeNewlinesForHref,
                delimiters: options.delimiters,
                comments: options.comments
            }, this);
            options.render = render;
            options.staticRenderFns = staticRenderFns;
            /* istanbul ignore if */
            if (config.performance && mark) {
                mark('compile end');
                measure(`vue ${this._name} compile`, 'compile', 'compile end');
            }
        }
    }
    return mount.call(this, el, hydrating);
};
/**
 * Get outerHTML of elements, taking care
 * of SVG elements in IE as well.
 */
function getOuterHTML(el) {
    if (el.outerHTML) {
        return el.outerHTML;
    }
    else {
        const container = document.createElement('div');
        container.appendChild(el.cloneNode(true));
        return container.innerHTML;
    }
}
Vue.compile = compileToFunctions;

export { EffectScope, computed, customRef, Vue as default, defineAsyncComponent, defineComponent, del, effectScope, getCurrentInstance, getCurrentScope, h, inject, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, mergeDefaults, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, provide, proxyRefs, reactive, readonly, ref$1 as ref, set, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, useAttrs, useCssModule, useCssVars, useListeners, useSlots, version, watch, watchEffect, watchPostEffect, watchSyncEffect };
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
const t=Object.freeze({}),e=Array.isArray;function n(t){return null==t}function o(t){return null!=t}function r(t){return!0===t}function s(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function i(t){return"function"==typeof t}function c(t){return null!==t&&"object"==typeof t}const a=Object.prototype.toString;function l(t){return"[object Object]"===a.call(t)}function u(t){const e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||l(t)&&t.toString===a?JSON.stringify(t,null,2):String(t)}function p(t){const e=parseFloat(t);return isNaN(e)?t:e}function h(t,e){const n=Object.create(null),o=t.split(",");for(let t=0;t<o.length;t++)n[o[t]]=!0;return e?t=>n[t.toLowerCase()]:t=>n[t]}const m=h("slot,component",!0),g=h("key,ref,slot,slot-scope,is");function v(t,e){const n=t.length;if(n){if(e===t[n-1])return void(t.length=n-1);const o=t.indexOf(e);if(o>-1)return t.splice(o,1)}}const y=Object.prototype.hasOwnProperty;function _(t,e){return y.call(t,e)}function $(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const b=/-(\w)/g,w=$((t=>t.replace(b,((t,e)=>e?e.toUpperCase():"")))),x=$((t=>t.charAt(0).toUpperCase()+t.slice(1))),C=/\B([A-Z])/g,k=$((t=>t.replace(C,"-$1").toLowerCase()));const O=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){const o=arguments.length;return o?o>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function S(t,e){e=e||0;let n=t.length-e;const o=new Array(n);for(;n--;)o[n]=t[n+e];return o}function T(t,e){for(const n in e)t[n]=e[n];return t}function A(t){const e={};for(let n=0;n<t.length;n++)t[n]&&T(e,t[n]);return e}function j(t,e,n){}const E=(t,e,n)=>!1,N=t=>t;function P(t,e){if(t===e)return!0;const n=c(t),o=c(e);if(!n||!o)return!n&&!o&&String(t)===String(e);try{const n=Array.isArray(t),o=Array.isArray(e);if(n&&o)return t.length===e.length&&t.every(((t,n)=>P(t,e[n])));if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(n||o)return!1;{const n=Object.keys(t),o=Object.keys(e);return n.length===o.length&&n.every((n=>P(t[n],e[n])))}}catch(t){return!1}}function D(t,e){for(let n=0;n<t.length;n++)if(P(t[n],e))return n;return-1}function M(t){let e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function I(t,e){return t===e?0===t&&1/t!=1/e:t==t||e==e}const L=["component","directive","filter"],F=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"];var R={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:E,isReservedAttr:E,isUnknownElement:E,getTagNamespace:j,parsePlatformTagName:N,mustUseProp:E,async:!0,_lifecycleHooks:F};const H=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function B(t){const e=(t+"").charCodeAt(0);return 36===e||95===e}function U(t,e,n,o){Object.defineProperty(t,e,{value:n,enumerable:!!o,writable:!0,configurable:!0})}const z=new RegExp(`[^${H.source}.$_\\d]`);const V="__proto__"in{},K="undefined"!=typeof window,J=K&&window.navigator.userAgent.toLowerCase(),q=J&&/msie|trident/.test(J),W=J&&J.indexOf("msie 9.0")>0,Z=J&&J.indexOf("edge/")>0;J&&J.indexOf("android");const G=J&&/iphone|ipad|ipod|ios/.test(J);J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J);const X=J&&J.match(/firefox\/(\d+)/),Y={}.watch;let Q,tt=!1;if(K)try{const t={};Object.defineProperty(t,"passive",{get(){tt=!0}}),window.addEventListener("test-passive",null,t)}catch(t){}const et=()=>(void 0===Q&&(Q=!K&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),Q),nt=K&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ot(t){return"function"==typeof t&&/native code/.test(t.toString())}const rt="undefined"!=typeof Symbol&&ot(Symbol)&&"undefined"!=typeof Reflect&&ot(Reflect.ownKeys);let st;st="undefined"!=typeof Set&&ot(Set)?Set:class{constructor(){this.set=Object.create(null)}has(t){return!0===this.set[t]}add(t){this.set[t]=!0}clear(){this.set=Object.create(null)}};let it=null;function ct(){return it&&{proxy:it}}function at(t=null){t||it&&it._scope.off(),it=t,t&&t._scope.on()}class lt{constructor(t,e,n,o,r,s,i,c){this.tag=t,this.data=e,this.children=n,this.text=o,this.elm=r,this.ns=void 0,this.context=s,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=i,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=c,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}get child(){return this.componentInstance}}const ut=(t="")=>{const e=new lt;return e.text=t,e.isComment=!0,e};function ft(t){return new lt(void 0,void 0,void 0,String(t))}function dt(t){const e=new lt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}let pt=0;const ht=[];class mt{constructor(){this._pending=!1,this.id=pt++,this.subs=[]}addSub(t){this.subs.push(t)}removeSub(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,ht.push(this))}depend(t){mt.target&&mt.target.addDep(this)}notify(t){const e=this.subs.filter((t=>t));for(let t=0,n=e.length;t<n;t++){e[t].update()}}}mt.target=null;const gt=[];function vt(t){gt.push(t),mt.target=t}function yt(){gt.pop(),mt.target=gt[gt.length-1]}const _t=Array.prototype,$t=Object.create(_t);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(t){const e=_t[t];U($t,t,(function(...n){const o=e.apply(this,n),r=this.__ob__;let s;switch(t){case"push":case"unshift":s=n;break;case"splice":s=n.slice(2)}return s&&r.observeArray(s),r.dep.notify(),o}))}));const bt=Object.getOwnPropertyNames($t),wt={};let xt=!0;function Ct(t){xt=t}const kt={notify:j,depend:j,addSub:j,removeSub:j};class Ot{constructor(t,n=!1,o=!1){if(this.value=t,this.shallow=n,this.mock=o,this.dep=o?kt:new mt,this.vmCount=0,U(t,"__ob__",this),e(t)){if(!o)if(V)t.__proto__=$t;else for(let e=0,n=bt.length;e<n;e++){const n=bt[e];U(t,n,$t[n])}n||this.observeArray(t)}else{const e=Object.keys(t);for(let r=0;r<e.length;r++){Tt(t,e[r],wt,void 0,n,o)}}}observeArray(t){for(let e=0,n=t.length;e<n;e++)St(t[e],!1,this.mock)}}function St(t,n,o){return t&&_(t,"__ob__")&&t.__ob__ instanceof Ot?t.__ob__:!xt||!o&&et()||!e(t)&&!l(t)||!Object.isExtensible(t)||t.__v_skip||Bt(t)||t instanceof lt?void 0:new Ot(t,n,o)}function Tt(t,n,o,r,s,i){const c=new mt,a=Object.getOwnPropertyDescriptor(t,n);if(a&&!1===a.configurable)return;const l=a&&a.get,u=a&&a.set;l&&!u||o!==wt&&2!==arguments.length||(o=t[n]);let f=!s&&St(o,!1,i);return Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){const n=l?l.call(t):o;return mt.target&&(c.depend(),f&&(f.dep.depend(),e(n)&&Et(n))),Bt(n)&&!s?n.value:n},set:function(e){const n=l?l.call(t):o;if(I(n,e)){if(u)u.call(t,e);else{if(l)return;if(!s&&Bt(n)&&!Bt(e))return void(n.value=e);o=e}f=!s&&St(e,!1,i),c.notify()}}}),c}function At(t,n,o){if(Lt(t))return;const r=t.__ob__;return e(t)&&u(n)?(t.length=Math.max(t.length,n),t.splice(n,1,o),r&&!r.shallow&&r.mock&&St(o,!1,!0),o):n in t&&!(n in Object.prototype)?(t[n]=o,o):t._isVue||r&&r.vmCount?o:r?(Tt(r.value,n,o,void 0,r.shallow,r.mock),r.dep.notify(),o):(t[n]=o,o)}function jt(t,n){if(e(t)&&u(n))return void t.splice(n,1);const o=t.__ob__;t._isVue||o&&o.vmCount||Lt(t)||_(t,n)&&(delete t[n],o&&o.dep.notify())}function Et(t){for(let n,o=0,r=t.length;o<r;o++)n=t[o],n&&n.__ob__&&n.__ob__.dep.depend(),e(n)&&Et(n)}function Nt(t){return Dt(t,!1),t}function Pt(t){return Dt(t,!0),U(t,"__v_isShallow",!0),t}function Dt(t,e){Lt(t)||St(t,e,et())}function Mt(t){return Lt(t)?Mt(t.__v_raw):!(!t||!t.__ob__)}function It(t){return!(!t||!t.__v_isShallow)}function Lt(t){return!(!t||!t.__v_isReadonly)}function Ft(t){return Mt(t)||Lt(t)}function Rt(t){const e=t&&t.__v_raw;return e?Rt(e):t}function Ht(t){return Object.isExtensible(t)&&U(t,"__v_skip",!0),t}function Bt(t){return!(!t||!0!==t.__v_isRef)}function Ut(t){return Vt(t,!1)}function zt(t){return Vt(t,!0)}function Vt(t,e){if(Bt(t))return t;const n={};return U(n,"__v_isRef",!0),U(n,"__v_isShallow",e),U(n,"dep",Tt(n,"value",t,null,e,et())),n}function Kt(t){t.dep&&t.dep.notify()}function Jt(t){return Bt(t)?t.value:t}function qt(t){if(Mt(t))return t;const e={},n=Object.keys(t);for(let o=0;o<n.length;o++)Wt(e,t,n[o]);return e}function Wt(t,e,n){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>{const t=e[n];if(Bt(t))return t.value;{const e=t&&t.__ob__;return e&&e.dep.depend(),t}},set:t=>{const o=e[n];Bt(o)&&!Bt(t)?o.value=t:e[n]=t}})}function Zt(t){const e=new mt,{get:n,set:o}=t((()=>{e.depend()}),(()=>{e.notify()})),r={get value(){return n()},set value(t){o(t)}};return U(r,"__v_isRef",!0),r}function Gt(t){const n=e(t)?new Array(t.length):{};for(const e in t)n[e]=Xt(t,e);return n}function Xt(t,e,n){const o=t[e];if(Bt(o))return o;const r={get value(){const o=t[e];return void 0===o?n:o},set value(n){t[e]=n}};return U(r,"__v_isRef",!0),r}function Yt(t){return Qt(t,!1)}function Qt(t,e){if(!l(t))return t;if(Lt(t))return t;const n=e?"__v_rawToShallowReadonly":"__v_rawToReadonly",o=t[n];if(o)return o;const r=Object.create(Object.getPrototypeOf(t));U(t,n,r),U(r,"__v_isReadonly",!0),U(r,"__v_raw",t),Bt(t)&&U(r,"__v_isRef",!0),(e||It(t))&&U(r,"__v_isShallow",!0);const s=Object.keys(t);for(let n=0;n<s.length;n++)te(r,t,s[n],e);return r}function te(t,e,n,o){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get(){const t=e[n];return o||!l(t)?t:Yt(t)},set(){}})}function ee(t){return Qt(t,!0)}function ne(t,e){let n,o;const r=i(t);r?(n=t,o=j):(n=t.get,o=t.set);const s=et()?null:new lo(it,n,j,{lazy:!0}),c={effect:s,get value(){return s?(s.dirty&&s.evaluate(),mt.target&&s.depend(),s.value):n()},set value(t){o(t)}};return U(c,"__v_isRef",!0),U(c,"__v_isReadonly",r),c}const oe=$((t=>{const e="&"===t.charAt(0),n="~"===(t=e?t.slice(1):t).charAt(0),o="!"===(t=n?t.slice(1):t).charAt(0);return{name:t=o?t.slice(1):t,once:n,capture:o,passive:e}}));function re(t,n){function o(){const t=o.fns;if(!e(t))return En(t,null,arguments,n,"v-on handler");{const e=t.slice();for(let t=0;t<e.length;t++)En(e[t],null,arguments,n,"v-on handler")}}return o.fns=t,o}function se(t,e,o,s,i,c){let a,l,u,f;for(a in t)l=t[a],u=e[a],f=oe(a),n(l)||(n(u)?(n(l.fns)&&(l=t[a]=re(l,c)),r(f.once)&&(l=t[a]=i(f.name,l,f.capture)),o(f.name,l,f.capture,f.passive,f.params)):l!==u&&(u.fns=l,t[a]=u));for(a in e)n(t[a])&&(f=oe(a),s(f.name,e[a],f.capture))}function ie(t,e,s){let i;t instanceof lt&&(t=t.data.hook||(t.data.hook={}));const c=t[e];function a(){s.apply(this,arguments),v(i.fns,a)}n(c)?i=re([a]):o(c.fns)&&r(c.merged)?(i=c,i.fns.push(a)):i=re([c,a]),i.merged=!0,t[e]=i}function ce(t,e,n,r,s){if(o(e)){if(_(e,n))return t[n]=e[n],s||delete e[n],!0;if(_(e,r))return t[n]=e[r],s||delete e[r],!0}return!1}function ae(t){return s(t)?[ft(t)]:e(t)?ue(t):void 0}function le(t){return o(t)&&o(t.text)&&!1===t.isComment}function ue(t,i){const c=[];let a,l,u,f;for(a=0;a<t.length;a++)l=t[a],n(l)||"boolean"==typeof l||(u=c.length-1,f=c[u],e(l)?l.length>0&&(l=ue(l,`${i||""}_${a}`),le(l[0])&&le(f)&&(c[u]=ft(f.text+l[0].text),l.shift()),c.push.apply(c,l)):s(l)?le(f)?c[u]=ft(f.text+l):""!==l&&c.push(ft(l)):le(l)&&le(f)?c[u]=ft(f.text+l.text):(r(t._isVList)&&o(l.tag)&&n(l.key)&&o(i)&&(l.key=`__vlist${i}_${a}__`),c.push(l)));return c}function fe(t,n,a,l,u,f){return(e(a)||s(a))&&(u=l,l=a,a=void 0),r(f)&&(u=2),function(t,n,r,s,a){if(o(r)&&o(r.__ob__))return ut();o(r)&&o(r.is)&&(n=r.is);if(!n)return ut();e(s)&&i(s[0])&&((r=r||{}).scopedSlots={default:s[0]},s.length=0);2===a?s=ae(s):1===a&&(s=function(t){for(let n=0;n<t.length;n++)if(e(t[n]))return Array.prototype.concat.apply([],t);return t}(s));let l,u;if("string"==typeof n){let e;u=t.$vnode&&t.$vnode.ns||R.getTagNamespace(n),l=R.isReservedTag(n)?new lt(R.parsePlatformTagName(n),r,s,void 0,void 0,t):r&&r.pre||!o(e=Fo(t.$options,"components",n))?new lt(n,r,s,void 0,void 0,t):To(e,r,t,s,n)}else l=To(n,r,t,s);return e(l)?l:o(l)?(o(u)&&de(l,u),o(r)&&function(t){c(t.style)&&io(t.style);c(t.class)&&io(t.class)}(r),l):ut()}(t,n,a,l,u)}function de(t,e,s){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,s=!0),o(t.children))for(let i=0,c=t.children.length;i<c;i++){const c=t.children[i];o(c.tag)&&(n(c.ns)||r(s)&&"svg"!==c.tag)&&de(c,e,s)}}function pe(t,n){let r,s,i,a,l=null;if(e(t)||"string"==typeof t)for(l=new Array(t.length),r=0,s=t.length;r<s;r++)l[r]=n(t[r],r);else if("number"==typeof t)for(l=new Array(t),r=0;r<t;r++)l[r]=n(r+1,r);else if(c(t))if(rt&&t[Symbol.iterator]){l=[];const e=t[Symbol.iterator]();let o=e.next();for(;!o.done;)l.push(n(o.value,l.length)),o=e.next()}else for(i=Object.keys(t),l=new Array(i.length),r=0,s=i.length;r<s;r++)a=i[r],l[r]=n(t[a],a,r);return o(l)||(l=[]),l._isVList=!0,l}function he(t,e,n,o){const r=this.$scopedSlots[t];let s;r?(n=n||{},o&&(n=T(T({},o),n)),s=r(n)||(i(e)?e():e)):s=this.$slots[t]||(i(e)?e():e);const c=n&&n.slot;return c?this.$createElement("template",{slot:c},s):s}function me(t){return Fo(this.$options,"filters",t)||N}function ge(t,n){return e(t)?-1===t.indexOf(n):t!==n}function ve(t,e,n,o,r){const s=R.keyCodes[e]||n;return r&&o&&!R.keyCodes[e]?ge(r,o):s?ge(s,t):o?k(o)!==e:void 0===t}function ye(t,n,o,r,s){if(o)if(c(o)){let i;e(o)&&(o=A(o));for(const e in o){if("class"===e||"style"===e||g(e))i=t;else{const o=t.attrs&&t.attrs.type;i=r||R.mustUseProp(n,o,e)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}const c=w(e),a=k(e);if(!(c in i)&&!(a in i)&&(i[e]=o[e],s)){(t.on||(t.on={}))[`update:${e}`]=function(t){o[e]=t}}}}else;return t}function _e(t,e){const n=this._staticTrees||(this._staticTrees=[]);let o=n[t];return o&&!e||(o=n[t]=this.$options.staticRenderFns[t].call(this._renderProxy,this._c,this),be(o,`__static__${t}`,!1)),o}function $e(t,e,n){return be(t,`__once__${e}${n?`_${n}`:""}`,!0),t}function be(t,n,o){if(e(t))for(let e=0;e<t.length;e++)t[e]&&"string"!=typeof t[e]&&we(t[e],`${n}_${e}`,o);else we(t,n,o)}function we(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function xe(t,e){if(e)if(l(e)){const n=t.on=t.on?T({},t.on):{};for(const t in e){const o=n[t],r=e[t];n[t]=o?[].concat(o,r):r}}else;return t}function Ce(t,n,o,r){n=n||{$stable:!o};for(let r=0;r<t.length;r++){const s=t[r];e(s)?Ce(s,n,o):s&&(s.proxy&&(s.fn.proxy=!0),n[s.key]=s.fn)}return r&&(n.$key=r),n}function ke(t,e){for(let n=0;n<e.length;n+=2){const o=e[n];"string"==typeof o&&o&&(t[e[n]]=e[n+1])}return t}function Oe(t,e){return"string"==typeof t?e+t:t}function Se(t){t._o=$e,t._n=p,t._s=d,t._l=pe,t._t=he,t._q=P,t._i=D,t._m=_e,t._f=me,t._k=ve,t._b=ye,t._v=ft,t._e=ut,t._u=Ce,t._g=xe,t._d=ke,t._p=Oe}function Te(t,e){if(!t||!t.length)return{};const n={};for(let o=0,r=t.length;o<r;o++){const r=t[o],s=r.data;if(s&&s.attrs&&s.attrs.slot&&delete s.attrs.slot,r.context!==e&&r.fnContext!==e||!s||null==s.slot)(n.default||(n.default=[])).push(r);else{const t=s.slot,e=n[t]||(n[t]=[]);"template"===r.tag?e.push.apply(e,r.children||[]):e.push(r)}}for(const t in n)n[t].every(Ae)&&delete n[t];return n}function Ae(t){return t.isComment&&!t.asyncFactory||" "===t.text}function je(t){return t.isComment&&t.asyncFactory}function Ee(e,n,o,r){let s;const i=Object.keys(o).length>0,c=n?!!n.$stable:!i,a=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(c&&r&&r!==t&&a===r.$key&&!i&&!r.$hasNormal)return r;s={};for(const t in n)n[t]&&"$"!==t[0]&&(s[t]=Ne(e,o,t,n[t]))}else s={};for(const t in o)t in s||(s[t]=Pe(o,t));return n&&Object.isExtensible(n)&&(n._normalized=s),U(s,"$stable",c),U(s,"$key",a),U(s,"$hasNormal",i),s}function Ne(t,n,o,r){const s=function(){const n=it;at(t);let o=arguments.length?r.apply(null,arguments):r({});o=o&&"object"==typeof o&&!e(o)?[o]:ae(o);const s=o&&o[0];return at(n),o&&(!s||1===o.length&&s.isComment&&!je(s))?void 0:o};return r.proxy&&Object.defineProperty(n,o,{get:s,enumerable:!0,configurable:!0}),s}function Pe(t,e){return()=>t[e]}function De(e){return{get attrs(){if(!e._attrsProxy){const n=e._attrsProxy={};U(n,"_v_attr_proxy",!0),Me(n,e.$attrs,t,e,"$attrs")}return e._attrsProxy},get listeners(){if(!e._listenersProxy){Me(e._listenersProxy={},e.$listeners,t,e,"$listeners")}return e._listenersProxy},get slots(){return function(t){t._slotsProxy||Le(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(e)},emit:O(e.$emit,e),expose(t){t&&Object.keys(t).forEach((n=>Wt(e,t,n)))}}}function Me(t,e,n,o,r){let s=!1;for(const i in e)i in t?e[i]!==n[i]&&(s=!0):(s=!0,Ie(t,i,o,r));for(const n in t)n in e||(s=!0,delete t[n]);return s}function Ie(t,e,n,o){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:()=>n[o][e]})}function Le(t,e){for(const n in e)t[n]=e[n];for(const n in t)n in e||delete t[n]}function Fe(){return Be().slots}function Re(){return Be().attrs}function He(){return Be().listeners}function Be(){const t=it;return t._setupContext||(t._setupContext=De(t))}function Ue(t,n){const o=e(t)?t.reduce(((t,e)=>(t[e]={},t)),{}):t;for(const t in n){const r=o[t];r?e(r)||i(r)?o[t]={type:r,default:n[t]}:r.default=n[t]:null===r&&(o[t]={default:n[t]})}return o}let ze,Ve=null;function Ke(t,e){return(t.__esModule||rt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),c(t)?e.extend(t):t}function Je(t){if(e(t))for(let e=0;e<t.length;e++){const n=t[e];if(o(n)&&(o(n.componentOptions)||je(n)))return n}}function qe(t,e){ze.$on(t,e)}function We(t,e){ze.$off(t,e)}function Ze(t,e){const n=ze;return function o(){const r=e.apply(null,arguments);null!==r&&n.$off(t,o)}}function Ge(t,e,n){ze=t,se(e,n||{},qe,We,Ze,t),ze=void 0}let Xe=null;function Ye(t){const e=Xe;return Xe=t,()=>{Xe=e}}function Qe(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function tn(t,e){if(e){if(t._directInactive=!1,Qe(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(let e=0;e<t.$children.length;e++)tn(t.$children[e]);nn(t,"activated")}}function en(t,e){if(!(e&&(t._directInactive=!0,Qe(t))||t._inactive)){t._inactive=!0;for(let e=0;e<t.$children.length;e++)en(t.$children[e]);nn(t,"deactivated")}}function nn(t,e,n,o=!0){vt();const r=it;o&&at(t);const s=t.$options[e],i=`${e} hook`;if(s)for(let e=0,o=s.length;e<o;e++)En(s[e],t,n||null,t,i);t._hasHookEvent&&t.$emit("hook:"+e),o&&at(r),yt()}const on=[],rn=[];let sn={},cn=!1,an=!1,ln=0;let un=0,fn=Date.now;if(K&&!q){const t=window.performance;t&&"function"==typeof t.now&&fn()>document.createEvent("Event").timeStamp&&(fn=()=>t.now())}const dn=(t,e)=>{if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function pn(){let t,e;for(un=fn(),an=!0,on.sort(dn),ln=0;ln<on.length;ln++)t=on[ln],t.before&&t.before(),e=t.id,sn[e]=null,t.run();const n=rn.slice(),o=on.slice();ln=on.length=rn.length=0,sn={},cn=an=!1,function(t){for(let e=0;e<t.length;e++)t[e]._inactive=!0,tn(t[e],!0)}(n),function(t){let e=t.length;for(;e--;){const n=t[e],o=n.vm;o&&o._watcher===n&&o._isMounted&&!o._isDestroyed&&nn(o,"updated")}}(o),(()=>{for(let t=0;t<ht.length;t++){const e=ht[t];e.subs=e.subs.filter((t=>t)),e._pending=!1}ht.length=0})(),nt&&R.devtools&&nt.emit("flush")}function hn(t){const e=t.id;if(null==sn[e]&&(t!==mt.target||!t.noRecurse)){if(sn[e]=!0,an){let e=on.length-1;for(;e>ln&&on[e].id>t.id;)e--;on.splice(e+1,0,t)}else on.push(t);cn||(cn=!0,Rn(pn))}}function mn(t,e){return $n(t,null,e)}function gn(t,e){return $n(t,null,{flush:"post"})}function vn(t,e){return $n(t,null,{flush:"sync"})}const yn={};function _n(t,e,n){return $n(t,e,n)}function $n(n,o,{immediate:r,deep:s,flush:c="pre",onTrack:a,onTrigger:l}=t){const u=it,f=(t,e,n=null)=>En(t,null,n,u,e);let d,p,h=!1,m=!1;if(Bt(n)?(d=()=>n.value,h=It(n)):Mt(n)?(d=()=>(n.__ob__.dep.depend(),n),s=!0):e(n)?(m=!0,h=n.some((t=>Mt(t)||It(t))),d=()=>n.map((t=>Bt(t)?t.value:Mt(t)?io(t):i(t)?f(t,"watcher getter"):void 0))):d=i(n)?o?()=>f(n,"watcher getter"):()=>{if(!u||!u._isDestroyed)return p&&p(),f(n,"watcher",[g])}:j,o&&s){const t=d;d=()=>io(t())}let g=t=>{p=v.onStop=()=>{f(t,"watcher cleanup")}};if(et())return g=j,o?r&&f(o,"watcher callback",[d(),m?[]:void 0,g]):d(),j;const v=new lo(it,d,j,{lazy:!0});v.noRecurse=!o;let y=m?[]:yn;return v.run=()=>{if(v.active)if(o){const t=v.get();(s||h||(m?t.some(((t,e)=>I(t,y[e]))):I(t,y)))&&(p&&p(),f(o,"watcher callback",[t,y===yn?void 0:y,g]),y=t)}else v.get()},"sync"===c?v.update=v.run:"post"===c?(v.post=!0,v.update=()=>hn(v)):v.update=()=>{if(u&&u===it&&!u._isMounted){const t=u._preWatchers||(u._preWatchers=[]);t.indexOf(v)<0&&t.push(v)}else hn(v)},o?r?v.run():y=v.get():"post"===c&&u?u.$once("hook:mounted",(()=>v.get())):v.get(),()=>{v.teardown()}}let bn;class wn{constructor(t=!1){this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=bn,!t&&bn&&(this.index=(bn.scopes||(bn.scopes=[])).push(this)-1)}run(t){if(this.active){const e=bn;try{return bn=this,t()}finally{bn=e}}}on(){bn=this}off(){bn=this.parent}stop(t){if(this.active){let e,n;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].teardown();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(!this.detached&&this.parent&&!t){const t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.parent=void 0,this.active=!1}}}function xn(t){return new wn(t)}function Cn(){return bn}function kn(t){bn&&bn.cleanups.push(t)}function On(t,e){it&&(Sn(it)[t]=e)}function Sn(t){const e=t._provided,n=t.$parent&&t.$parent._provided;return n===e?t._provided=Object.create(n):e}function Tn(t,e,n=!1){const o=it;if(o){const r=o.$parent&&o.$parent._provided;if(r&&t in r)return r[t];if(arguments.length>1)return n&&i(e)?e.call(o):e}}function An(t,e,n){return fe(it,t,e,n,2,!0)}function jn(t,e,n){vt();try{if(e){let o=e;for(;o=o.$parent;){const r=o.$options.errorCaptured;if(r)for(let s=0;s<r.length;s++)try{if(!1===r[s].call(o,t,e,n))return}catch(t){Nn(t,o,"errorCaptured hook")}}}Nn(t,e,n)}finally{yt()}}function En(t,e,n,o,r){let s;try{s=n?t.apply(e,n):t.call(e),s&&!s._isVue&&f(s)&&!s._handled&&(s.catch((t=>jn(t,o,r+" (Promise/async)"))),s._handled=!0)}catch(t){jn(t,o,r)}return s}function Nn(t,e,n){if(R.errorHandler)try{return R.errorHandler.call(null,t,e,n)}catch(e){e!==t&&Pn(e)}Pn(t)}function Pn(t,e,n){if(!K||"undefined"==typeof console)throw t;console.error(t)}let Dn=!1;const Mn=[];let In,Ln=!1;function Fn(){Ln=!1;const t=Mn.slice(0);Mn.length=0;for(let e=0;e<t.length;e++)t[e]()}if("undefined"!=typeof Promise&&ot(Promise)){const t=Promise.resolve();In=()=>{t.then(Fn),G&&setTimeout(j)},Dn=!0}else if(q||"undefined"==typeof MutationObserver||!ot(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())In="undefined"!=typeof setImmediate&&ot(setImmediate)?()=>{setImmediate(Fn)}:()=>{setTimeout(Fn,0)};else{let t=1;const e=new MutationObserver(Fn),n=document.createTextNode(String(t));e.observe(n,{characterData:!0}),In=()=>{t=(t+1)%2,n.data=String(t)},Dn=!0}function Rn(t,e){let n;if(Mn.push((()=>{if(t)try{t.call(e)}catch(t){jn(t,e,"nextTick")}else n&&n(e)})),Ln||(Ln=!0,In()),!t&&"undefined"!=typeof Promise)return new Promise((t=>{n=t}))}function Hn(e="$style"){return t}function Bn(t){if(!K)return;const e=it;e&&gn((()=>{const n=e.$el,o=t(e,e._setupProxy);if(n&&1===n.nodeType){const t=n.style;for(const e in o)t.setProperty(`--${e}`,o[e])}}))}function Un(t){i(t)&&(t={loader:t});const{loader:e,loadingComponent:n,errorComponent:o,delay:r=200,timeout:s,suspensible:c=!1,onError:a}=t;let l=null,u=0;const f=()=>{let t;return l||(t=l=e().catch((t=>{if(t=t instanceof Error?t:new Error(String(t)),a)return new Promise(((e,n)=>{a(t,(()=>e((u++,l=null,f()))),(()=>n(t)),u+1)}));throw t})).then((e=>t!==l&&l?l:(e&&(e.__esModule||"Module"===e[Symbol.toStringTag])&&(e=e.default),e))))};return()=>({component:f(),delay:r,timeout:s,error:o,loading:n})}function zn(t){return(e,n=it)=>{if(n)return function(t,e,n){const o=t.$options;o[e]=Do(o[e],n)}(n,t,e)}}const Vn=zn("beforeMount"),Kn=zn("mounted"),Jn=zn("beforeUpdate"),qn=zn("updated"),Wn=zn("beforeDestroy"),Zn=zn("destroyed"),Gn=zn("activated"),Xn=zn("deactivated"),Yn=zn("serverPrefetch"),Qn=zn("renderTracked"),to=zn("renderTriggered"),eo=zn("errorCaptured");function no(t,e=it){eo(t,e)}const oo="2.7.14";function ro(t){return t}const so=new st;function io(t){return co(t,so),so.clear(),t}function co(t,n){let o,r;const s=e(t);if(!(!s&&!c(t)||t.__v_skip||Object.isFrozen(t)||t instanceof lt)){if(t.__ob__){const e=t.__ob__.dep.id;if(n.has(e))return;n.add(e)}if(s)for(o=t.length;o--;)co(t[o],n);else if(Bt(t))co(t.value,n);else for(r=Object.keys(t),o=r.length;o--;)co(t[r[o]],n)}}let ao=0;class lo{constructor(t,e,n,o,r){!function(t,e=bn){e&&e.active&&e.effects.push(t)}(this,bn&&!bn._vm?bn:t?t._scope:void 0),(this.vm=t)&&r&&(t._watcher=this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++ao,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new st,this.newDepIds=new st,this.expression="",i(e)?this.getter=e:(this.getter=function(t){if(z.test(t))return;const e=t.split(".");return function(t){for(let n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}(e),this.getter||(this.getter=j)),this.value=this.lazy?void 0:this.get()}get(){let t;vt(this);const e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;jn(t,e,`getter for watcher "${this.expression}"`)}finally{this.deep&&io(t),yt(),this.cleanupDeps()}return t}addDep(t){const e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))}cleanupDeps(){let t=this.deps.length;for(;t--;){const e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}let e=this.depIds;this.depIds=this.newDepIds,this.newDepIds=e,this.newDepIds.clear(),e=this.deps,this.deps=this.newDeps,this.newDeps=e,this.newDeps.length=0}update(){this.lazy?this.dirty=!0:this.sync?this.run():hn(this)}run(){if(this.active){const t=this.get();if(t!==this.value||c(t)||this.deep){const e=this.value;if(this.value=t,this.user){const n=`callback for watcher "${this.expression}"`;En(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}}evaluate(){this.value=this.get(),this.dirty=!1}depend(){let t=this.deps.length;for(;t--;)this.deps[t].depend()}teardown(){if(this.vm&&!this.vm._isBeingDestroyed&&v(this.vm._scope.effects,this),this.active){let t=this.deps.length;for(;t--;)this.deps[t].removeSub(this);this.active=!1,this.onStop&&this.onStop()}}}const uo={enumerable:!0,configurable:!0,get:j,set:j};function fo(t,e,n){uo.get=function(){return this[e][n]},uo.set=function(t){this[e][n]=t},Object.defineProperty(t,n,uo)}function po(t){const n=t.$options;if(n.props&&function(t,e){const n=t.$options.propsData||{},o=t._props=Pt({}),r=t.$options._propKeys=[];t.$parent&&Ct(!1);for(const s in e){r.push(s);Tt(o,s,Ro(s,e,n,t)),s in t||fo(t,"_props",s)}Ct(!0)}(t,n.props),function(t){const e=t.$options,n=e.setup;if(n){const o=t._setupContext=De(t);at(t),vt();const r=En(n,null,[t._props||Pt({}),o],t,"setup");if(yt(),at(),i(r))e.render=r;else if(c(r))if(t._setupState=r,r.__sfc){const e=t._setupProxy={};for(const t in r)"__sfc"!==t&&Wt(e,r,t)}else for(const e in r)B(e)||Wt(t,r,e)}}(t),n.methods&&function(t,e){t.$options.props;for(const n in e)t[n]="function"!=typeof e[n]?j:O(e[n],t)}(t,n.methods),n.data)!function(t){let e=t.$options.data;e=t._data=i(e)?function(t,e){vt();try{return t.call(e,e)}catch(t){return jn(t,e,"data()"),{}}finally{yt()}}(e,t):e||{},l(e)||(e={});const n=Object.keys(e),o=t.$options.props;t.$options.methods;let r=n.length;for(;r--;){const e=n[r];o&&_(o,e)||B(e)||fo(t,"_data",e)}const s=St(e);s&&s.vmCount++}(t);else{const e=St(t._data={});e&&e.vmCount++}n.computed&&function(t,e){const n=t._computedWatchers=Object.create(null),o=et();for(const r in e){const s=e[r],c=i(s)?s:s.get;o||(n[r]=new lo(t,c||j,j,ho)),r in t||mo(t,r,s)}}(t,n.computed),n.watch&&n.watch!==Y&&function(t,n){for(const o in n){const r=n[o];if(e(r))for(let e=0;e<r.length;e++)yo(t,o,r[e]);else yo(t,o,r)}}(t,n.watch)}const ho={lazy:!0};function mo(t,e,n){const o=!et();i(n)?(uo.get=o?go(e):vo(n),uo.set=j):(uo.get=n.get?o&&!1!==n.cache?go(e):vo(n.get):j,uo.set=n.set||j),Object.defineProperty(t,e,uo)}function go(t){return function(){const e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),mt.target&&e.depend(),e.value}}function vo(t){return function(){return t.call(this,this)}}function yo(t,e,n,o){return l(n)&&(o=n,n=n.handler),"string"==typeof n&&(n=t[n]),t.$watch(e,n,o)}function _o(t,e){if(t){const n=Object.create(null),o=rt?Reflect.ownKeys(t):Object.keys(t);for(let r=0;r<o.length;r++){const s=o[r];if("__ob__"===s)continue;const c=t[s].from;if(c in e._provided)n[s]=e._provided[c];else if("default"in t[s]){const o=t[s].default;n[s]=i(o)?o.call(e):o}}return n}}let $o=0;function bo(t){let e=t.options;if(t.super){const n=bo(t.super);if(n!==t.superOptions){t.superOptions=n;const o=function(t){let e;const n=t.options,o=t.sealedOptions;for(const t in n)n[t]!==o[t]&&(e||(e={}),e[t]=n[t]);return e}(t);o&&T(t.extendOptions,o),e=t.options=Lo(n,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function wo(n,o,s,i,c){const a=c.options;let l;_(i,"_uid")?(l=Object.create(i),l._original=i):(l=i,i=i._original);const u=r(a._compiled),f=!u;this.data=n,this.props=o,this.children=s,this.parent=i,this.listeners=n.on||t,this.injections=_o(a.inject,i),this.slots=()=>(this.$slots||Ee(i,n.scopedSlots,this.$slots=Te(s,i)),this.$slots),Object.defineProperty(this,"scopedSlots",{enumerable:!0,get(){return Ee(i,n.scopedSlots,this.slots())}}),u&&(this.$options=a,this.$slots=this.slots(),this.$scopedSlots=Ee(i,n.scopedSlots,this.$slots)),a._scopeId?this._c=(t,n,o,r)=>{const s=fe(l,t,n,o,r,f);return s&&!e(s)&&(s.fnScopeId=a._scopeId,s.fnContext=i),s}:this._c=(t,e,n,o)=>fe(l,t,e,n,o,f)}function xo(t,e,n,o,r){const s=dt(t);return s.fnContext=n,s.fnOptions=o,e.slot&&((s.data||(s.data={})).slot=e.slot),s}function Co(t,e){for(const n in e)t[w(n)]=e[n]}function ko(t){return t.name||t.__name||t._componentTag}Se(wo.prototype);const Oo={init(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){const e=t;Oo.prepatch(e,e)}else{(t.componentInstance=function(t,e){const n={_isComponent:!0,_parentVnode:t,parent:e},r=t.data.inlineTemplate;o(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns);return new t.componentOptions.Ctor(n)}(t,Xe)).$mount(e?t.elm:void 0,e)}},prepatch(e,n){const o=n.componentOptions;!function(e,n,o,r,s){const i=r.data.scopedSlots,c=e.$scopedSlots,a=!!(i&&!i.$stable||c!==t&&!c.$stable||i&&e.$scopedSlots.$key!==i.$key||!i&&e.$scopedSlots.$key);let l=!!(s||e.$options._renderChildren||a);const u=e.$vnode;e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=s;const f=r.data.attrs||t;e._attrsProxy&&Me(e._attrsProxy,f,u.data&&u.data.attrs||t,e,"$attrs")&&(l=!0),e.$attrs=f,o=o||t;const d=e.$options._parentListeners;if(e._listenersProxy&&Me(e._listenersProxy,o,d||t,e,"$listeners"),e.$listeners=e.$options._parentListeners=o,Ge(e,o,d),n&&e.$options.props){Ct(!1);const t=e._props,o=e.$options._propKeys||[];for(let r=0;r<o.length;r++){const s=o[r],i=e.$options.props;t[s]=Ro(s,i,n,e)}Ct(!0),e.$options.propsData=n}l&&(e.$slots=Te(s,r.context),e.$forceUpdate())}(n.componentInstance=e.componentInstance,o.propsData,o.listeners,n,o.children)},insert(t){const{context:e,componentInstance:n}=t;var o;n._isMounted||(n._isMounted=!0,nn(n,"mounted")),t.data.keepAlive&&(e._isMounted?((o=n)._inactive=!1,rn.push(o)):tn(n,!0))},destroy(t){const{componentInstance:e}=t;e._isDestroyed||(t.data.keepAlive?en(e,!0):e.$destroy())}},So=Object.keys(Oo);function To(s,i,a,l,u){if(n(s))return;const d=a.$options._base;if(c(s)&&(s=d.extend(s)),"function"!=typeof s)return;let p;if(n(s.cid)&&(p=s,s=function(t,e){if(r(t.error)&&o(t.errorComp))return t.errorComp;if(o(t.resolved))return t.resolved;const s=Ve;if(s&&o(t.owners)&&-1===t.owners.indexOf(s)&&t.owners.push(s),r(t.loading)&&o(t.loadingComp))return t.loadingComp;if(s&&!o(t.owners)){const r=t.owners=[s];let i=!0,a=null,l=null;s.$on("hook:destroyed",(()=>v(r,s)));const u=t=>{for(let t=0,e=r.length;t<e;t++)r[t].$forceUpdate();t&&(r.length=0,null!==a&&(clearTimeout(a),a=null),null!==l&&(clearTimeout(l),l=null))},d=M((n=>{t.resolved=Ke(n,e),i?r.length=0:u(!0)})),p=M((e=>{o(t.errorComp)&&(t.error=!0,u(!0))})),h=t(d,p);return c(h)&&(f(h)?n(t.resolved)&&h.then(d,p):f(h.component)&&(h.component.then(d,p),o(h.error)&&(t.errorComp=Ke(h.error,e)),o(h.loading)&&(t.loadingComp=Ke(h.loading,e),0===h.delay?t.loading=!0:a=setTimeout((()=>{a=null,n(t.resolved)&&n(t.error)&&(t.loading=!0,u(!1))}),h.delay||200)),o(h.timeout)&&(l=setTimeout((()=>{l=null,n(t.resolved)&&p(null)}),h.timeout)))),i=!1,t.loading?t.loadingComp:t.resolved}}(p,d),void 0===s))return function(t,e,n,o,r){const s=ut();return s.asyncFactory=t,s.asyncMeta={data:e,context:n,children:o,tag:r},s}(p,i,a,l,u);i=i||{},bo(s),o(i.model)&&function(t,n){const r=t.model&&t.model.prop||"value",s=t.model&&t.model.event||"input";(n.attrs||(n.attrs={}))[r]=n.model.value;const i=n.on||(n.on={}),c=i[s],a=n.model.callback;o(c)?(e(c)?-1===c.indexOf(a):c!==a)&&(i[s]=[a].concat(c)):i[s]=a}(s.options,i);const h=function(t,e,r){const s=e.options.props;if(n(s))return;const i={},{attrs:c,props:a}=t;if(o(c)||o(a))for(const t in s){const e=k(t);ce(i,a,t,e,!0)||ce(i,c,t,e,!1)}return i}(i,s);if(r(s.options.functional))return function(n,r,s,i,c){const a=n.options,l={},u=a.props;if(o(u))for(const e in u)l[e]=Ro(e,u,r||t);else o(s.attrs)&&Co(l,s.attrs),o(s.props)&&Co(l,s.props);const f=new wo(s,l,c,i,n),d=a.render.call(null,f._c,f);if(d instanceof lt)return xo(d,s,f.parent,a);if(e(d)){const t=ae(d)||[],e=new Array(t.length);for(let n=0;n<t.length;n++)e[n]=xo(t[n],s,f.parent,a);return e}}(s,h,i,a,l);const m=i.on;if(i.on=i.nativeOn,r(s.options.abstract)){const t=i.slot;i={},t&&(i.slot=t)}!function(t){const e=t.hook||(t.hook={});for(let t=0;t<So.length;t++){const n=So[t],o=e[n],r=Oo[n];o===r||o&&o._merged||(e[n]=o?Ao(r,o):r)}}(i);const g=ko(s.options)||u;return new lt(`vue-component-${s.cid}${g?`-${g}`:""}`,i,void 0,void 0,void 0,a,{Ctor:s,propsData:h,listeners:m,tag:u,children:l},p)}function Ao(t,e){const n=(n,o)=>{t(n,o),e(n,o)};return n._merged=!0,n}let jo=j;const Eo=R.optionMergeStrategies;function No(t,e,n=!0){if(!e)return t;let o,r,s;const i=rt?Reflect.ownKeys(e):Object.keys(e);for(let c=0;c<i.length;c++)o=i[c],"__ob__"!==o&&(r=t[o],s=e[o],n&&_(t,o)?r!==s&&l(r)&&l(s)&&No(r,s):At(t,o,s));return t}function Po(t,e,n){return n?function(){const o=i(e)?e.call(n,n):e,r=i(t)?t.call(n,n):t;return o?No(o,r):r}:e?t?function(){return No(i(e)?e.call(this,this):e,i(t)?t.call(this,this):t)}:e:t}function Do(t,n){const o=n?t?t.concat(n):e(n)?n:[n]:t;return o?function(t){const e=[];for(let n=0;n<t.length;n++)-1===e.indexOf(t[n])&&e.push(t[n]);return e}(o):o}function Mo(t,e,n,o){const r=Object.create(t||null);return e?T(r,e):r}Eo.data=function(t,e,n){return n?Po(t,e,n):e&&"function"!=typeof e?t:Po(t,e)},F.forEach((t=>{Eo[t]=Do})),L.forEach((function(t){Eo[t+"s"]=Mo})),Eo.watch=function(t,n,o,r){if(t===Y&&(t=void 0),n===Y&&(n=void 0),!n)return Object.create(t||null);if(!t)return n;const s={};T(s,t);for(const t in n){let o=s[t];const r=n[t];o&&!e(o)&&(o=[o]),s[t]=o?o.concat(r):e(r)?r:[r]}return s},Eo.props=Eo.methods=Eo.inject=Eo.computed=function(t,e,n,o){if(!t)return e;const r=Object.create(null);return T(r,t),e&&T(r,e),r},Eo.provide=function(t,e){return t?function(){const n=Object.create(null);return No(n,i(t)?t.call(this):t),e&&No(n,i(e)?e.call(this):e,!1),n}:e};const Io=function(t,e){return void 0===e?t:e};function Lo(t,n,o){if(i(n)&&(n=n.options),function(t,n){const o=t.props;if(!o)return;const r={};let s,i,c;if(e(o))for(s=o.length;s--;)i=o[s],"string"==typeof i&&(c=w(i),r[c]={type:null});else if(l(o))for(const t in o)i=o[t],c=w(t),r[c]=l(i)?i:{type:i};t.props=r}(n),function(t,n){const o=t.inject;if(!o)return;const r=t.inject={};if(e(o))for(let t=0;t<o.length;t++)r[o[t]]={from:o[t]};else if(l(o))for(const t in o){const e=o[t];r[t]=l(e)?T({from:t},e):{from:e}}}(n),function(t){const e=t.directives;if(e)for(const t in e){const n=e[t];i(n)&&(e[t]={bind:n,update:n})}}(n),!n._base&&(n.extends&&(t=Lo(t,n.extends,o)),n.mixins))for(let e=0,r=n.mixins.length;e<r;e++)t=Lo(t,n.mixins[e],o);const r={};let s;for(s in t)c(s);for(s in n)_(t,s)||c(s);function c(e){const s=Eo[e]||Io;r[e]=s(t[e],n[e],o,e)}return r}function Fo(t,e,n,o){if("string"!=typeof n)return;const r=t[e];if(_(r,n))return r[n];const s=w(n);if(_(r,s))return r[s];const i=x(s);if(_(r,i))return r[i];return r[n]||r[s]||r[i]}function Ro(t,e,n,o){const r=e[t],s=!_(n,t);let c=n[t];const a=zo(Boolean,r.type);if(a>-1)if(s&&!_(r,"default"))c=!1;else if(""===c||c===k(t)){const t=zo(String,r.type);(t<0||a<t)&&(c=!0)}if(void 0===c){c=function(t,e,n){if(!_(e,"default"))return;const o=e.default;if(t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n])return t._props[n];return i(o)&&"Function"!==Bo(e.type)?o.call(t):o}(o,r,t);const e=xt;Ct(!0),St(c),Ct(e)}return c}const Ho=/^\s*function (\w+)/;function Bo(t){const e=t&&t.toString().match(Ho);return e?e[1]:""}function Uo(t,e){return Bo(t)===Bo(e)}function zo(t,n){if(!e(n))return Uo(n,t)?0:-1;for(let e=0,o=n.length;e<o;e++)if(Uo(n[e],t))return e;return-1}function Vo(t){this._init(t)}function Ko(t){t.cid=0;let e=1;t.extend=function(t){t=t||{};const n=this,o=n.cid,r=t._Ctor||(t._Ctor={});if(r[o])return r[o];const s=ko(t)||ko(n.options),i=function(t){this._init(t)};return(i.prototype=Object.create(n.prototype)).constructor=i,i.cid=e++,i.options=Lo(n.options,t),i.super=n,i.options.props&&function(t){const e=t.options.props;for(const n in e)fo(t.prototype,"_props",n)}(i),i.options.computed&&function(t){const e=t.options.computed;for(const n in e)mo(t.prototype,n,e[n])}(i),i.extend=n.extend,i.mixin=n.mixin,i.use=n.use,L.forEach((function(t){i[t]=n[t]})),s&&(i.options.components[s]=i),i.superOptions=n.options,i.extendOptions=t,i.sealedOptions=T({},i.options),r[o]=i,i}}function Jo(t){return t&&(ko(t.Ctor.options)||t.tag)}function qo(t,n){return e(t)?t.indexOf(n)>-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(o=t,"[object RegExp]"===a.call(o)&&t.test(n));var o}function Wo(t,e){const{cache:n,keys:o,_vnode:r}=t;for(const t in n){const s=n[t];if(s){const i=s.name;i&&!e(i)&&Zo(n,t,o,r)}}}function Zo(t,e,n,o){const r=t[e];!r||o&&r.tag===o.tag||r.componentInstance.$destroy(),t[e]=null,v(n,e)}!function(e){e.prototype._init=function(e){const n=this;n._uid=$o++,n._isVue=!0,n.__v_skip=!0,n._scope=new wn(!0),n._scope._vm=!0,e&&e._isComponent?function(t,e){const n=t.$options=Object.create(t.constructor.options),o=e._parentVnode;n.parent=e.parent,n._parentVnode=o;const r=o.componentOptions;n.propsData=r.propsData,n._parentListeners=r.listeners,n._renderChildren=r.children,n._componentTag=r.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=Lo(bo(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){const e=t.$options;let n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;const e=t.$options._parentListeners;e&&Ge(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;const n=e.$options,o=e.$vnode=n._parentVnode,r=o&&o.context;e.$slots=Te(n._renderChildren,r),e.$scopedSlots=o?Ee(e.$parent,o.data.scopedSlots,e.$slots):t,e._c=(t,n,o,r)=>fe(e,t,n,o,r,!1),e.$createElement=(t,n,o,r)=>fe(e,t,n,o,r,!0);const s=o&&o.data;Tt(e,"$attrs",s&&s.attrs||t,null,!0),Tt(e,"$listeners",n._parentListeners||t,null,!0)}(n),nn(n,"beforeCreate",void 0,!1),function(t){const e=_o(t.$options.inject,t);e&&(Ct(!1),Object.keys(e).forEach((n=>{Tt(t,n,e[n])})),Ct(!0))}(n),po(n),function(t){const e=t.$options.provide;if(e){const n=i(e)?e.call(t):e;if(!c(n))return;const o=Sn(t),r=rt?Reflect.ownKeys(n):Object.keys(n);for(let t=0;t<r.length;t++){const e=r[t];Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(n,e))}}}(n),nn(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(Vo),function(t){const e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=At,t.prototype.$delete=jt,t.prototype.$watch=function(t,e,n){const o=this;if(l(e))return yo(o,t,e,n);(n=n||{}).user=!0;const r=new lo(o,t,e,n);if(n.immediate){const t=`callback for immediate watcher "${r.expression}"`;vt(),En(e,o,[r.value],o,t),yt()}return function(){r.teardown()}}}(Vo),function(t){const n=/^hook:/;t.prototype.$on=function(t,o){const r=this;if(e(t))for(let e=0,n=t.length;e<n;e++)r.$on(t[e],o);else(r._events[t]||(r._events[t]=[])).push(o),n.test(t)&&(r._hasHookEvent=!0);return r},t.prototype.$once=function(t,e){const n=this;function o(){n.$off(t,o),e.apply(n,arguments)}return o.fn=e,n.$on(t,o),n},t.prototype.$off=function(t,n){const o=this;if(!arguments.length)return o._events=Object.create(null),o;if(e(t)){for(let e=0,r=t.length;e<r;e++)o.$off(t[e],n);return o}const r=o._events[t];if(!r)return o;if(!n)return o._events[t]=null,o;let s,i=r.length;for(;i--;)if(s=r[i],s===n||s.fn===n){r.splice(i,1);break}return o},t.prototype.$emit=function(t){const e=this;let n=e._events[t];if(n){n=n.length>1?S(n):n;const o=S(arguments,1),r=`event handler for "${t}"`;for(let t=0,s=n.length;t<s;t++)En(n[t],e,o,e,r)}return e}}(Vo),function(t){t.prototype._update=function(t,e){const n=this,o=n.$el,r=n._vnode,s=Ye(n);n._vnode=t,n.$el=r?n.__patch__(r,t):n.__patch__(n.$el,t,e,!1),s(),o&&(o.__vue__=null),n.$el&&(n.$el.__vue__=n);let i=n;for(;i&&i.$vnode&&i.$parent&&i.$vnode===i.$parent._vnode;)i.$parent.$el=i.$el,i=i.$parent},t.prototype.$forceUpdate=function(){const t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){const t=this;if(t._isBeingDestroyed)return;nn(t,"beforeDestroy"),t._isBeingDestroyed=!0;const e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||v(e.$children,t),t._scope.stop(),t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),nn(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}(Vo),function(t){Se(t.prototype),t.prototype.$nextTick=function(t){return Rn(t,this)},t.prototype._render=function(){const t=this,{render:n,_parentVnode:o}=t.$options;let r;o&&t._isMounted&&(t.$scopedSlots=Ee(t.$parent,o.data.scopedSlots,t.$slots,t.$scopedSlots),t._slotsProxy&&Le(t._slotsProxy,t.$scopedSlots)),t.$vnode=o;try{at(t),Ve=t,r=n.call(t._renderProxy,t.$createElement)}catch(e){jn(e,t,"render"),r=t._vnode}finally{Ve=null,at()}return e(r)&&1===r.length&&(r=r[0]),r instanceof lt||(r=ut()),r.parent=o,r}}(Vo);const Go=[String,RegExp,Array];var Xo={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Go,exclude:Go,max:[String,Number]},methods:{cacheVNode(){const{cache:t,keys:e,vnodeToCache:n,keyToCache:o}=this;if(n){const{tag:r,componentInstance:s,componentOptions:i}=n;t[o]={name:Jo(i),tag:r,componentInstance:s},e.push(o),this.max&&e.length>parseInt(this.max)&&Zo(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created(){this.cache=Object.create(null),this.keys=[]},destroyed(){for(const t in this.cache)Zo(this.cache,t,this.keys)},mounted(){this.cacheVNode(),this.$watch("include",(t=>{Wo(this,(e=>qo(t,e)))})),this.$watch("exclude",(t=>{Wo(this,(e=>!qo(t,e)))}))},updated(){this.cacheVNode()},render(){const t=this.$slots.default,e=Je(t),n=e&&e.componentOptions;if(n){const t=Jo(n),{include:o,exclude:r}=this;if(o&&(!t||!qo(o,t))||r&&t&&qo(r,t))return e;const{cache:s,keys:i}=this,c=null==e.key?n.Ctor.cid+(n.tag?`::${n.tag}`:""):e.key;s[c]?(e.componentInstance=s[c].componentInstance,v(i,c),i.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){const e={get:()=>R};Object.defineProperty(t,"config",e),t.util={warn:jo,extend:T,mergeOptions:Lo,defineReactive:Tt},t.set=At,t.delete=jt,t.nextTick=Rn,t.observable=t=>(St(t),t),t.options=Object.create(null),L.forEach((e=>{t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,Xo),function(t){t.use=function(t){const e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;const n=S(arguments,1);return n.unshift(this),i(t.install)?t.install.apply(t,n):i(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Lo(this.options,t),this}}(t),Ko(t),function(t){L.forEach((e=>{t[e]=function(t,n){return n?("component"===e&&l(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&i(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Vo),Object.defineProperty(Vo.prototype,"$isServer",{get:et}),Object.defineProperty(Vo.prototype,"$ssrContext",{get(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Vo,"FunctionalRenderContext",{value:wo}),Vo.version="2.7.14";const Yo=h("style,class"),Qo=h("input,textarea,option,select,progress"),tr=(t,e,n)=>"value"===n&&Qo(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t,er=h("contenteditable,draggable,spellcheck"),nr=h("events,caret,typing,plaintext-only"),or=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),rr="http://www.w3.org/1999/xlink",sr=t=>":"===t.charAt(5)&&"xlink"===t.slice(0,5),ir=t=>sr(t)?t.slice(6,t.length):"",cr=t=>null==t||!1===t;function ar(t){let e=t.data,n=t,r=t;for(;o(r.componentInstance);)r=r.componentInstance._vnode,r&&r.data&&(e=lr(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=lr(e,n.data));return function(t,e){if(o(t)||o(e))return ur(t,fr(e));return""}(e.staticClass,e.class)}function lr(t,e){return{staticClass:ur(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function ur(t,e){return t?e?t+" "+e:t:e||""}function fr(t){return Array.isArray(t)?function(t){let e,n="";for(let r=0,s=t.length;r<s;r++)o(e=fr(t[r]))&&""!==e&&(n&&(n+=" "),n+=e);return n}(t):c(t)?function(t){let e="";for(const n in t)t[n]&&(e&&(e+=" "),e+=n);return e}(t):"string"==typeof t?t:""}const dr={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},pr=h("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),hr=h("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),mr=t=>pr(t)||hr(t);function gr(t){return hr(t)?"svg":"math"===t?"math":void 0}const vr=Object.create(null);const yr=h("text,number,password,search,email,tel,url");function _r(t){if("string"==typeof t){const e=document.querySelector(t);return e||document.createElement("div")}return t}var $r=Object.freeze({__proto__:null,createElement:function(t,e){const n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(t,e){return document.createElementNS(dr[t],e)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,e,n){t.insertBefore(e,n)},removeChild:function(t,e){t.removeChild(e)},appendChild:function(t,e){t.appendChild(e)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,e){t.textContent=e},setStyleScope:function(t,e){t.setAttribute(e,"")}}),br={create(t,e){wr(e)},update(t,e){t.data.ref!==e.data.ref&&(wr(t,!0),wr(e))},destroy(t){wr(t,!0)}};function wr(t,n){const r=t.data.ref;if(!o(r))return;const s=t.context,c=t.componentInstance||t.elm,a=n?null:c,l=n?void 0:c;if(i(r))return void En(r,s,[a],s,"template ref function");const u=t.data.refInFor,f="string"==typeof r||"number"==typeof r,d=Bt(r),p=s.$refs;if(f||d)if(u){const t=f?p[r]:r.value;n?e(t)&&v(t,c):e(t)?t.includes(c)||t.push(c):f?(p[r]=[c],xr(s,r,p[r])):r.value=[c]}else if(f){if(n&&p[r]!==c)return;p[r]=l,xr(s,r,a)}else if(d){if(n&&r.value!==c)return;r.value=a}}function xr({_setupState:t},e,n){t&&_(t,e)&&(Bt(t[e])?t[e].value=n:t[e]=n)}const Cr=new lt("",{},[]),kr=["create","activate","update","remove","destroy"];function Or(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&function(t,e){if("input"!==t.tag)return!0;let n;const r=o(n=t.data)&&o(n=n.attrs)&&n.type,s=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===s||yr(r)&&yr(s)}(t,e)||r(t.isAsyncPlaceholder)&&n(e.asyncFactory.error))}function Sr(t,e,n){let r,s;const i={};for(r=e;r<=n;++r)s=t[r].key,o(s)&&(i[s]=r);return i}var Tr={create:Ar,update:Ar,destroy:function(t){Ar(t,Cr)}};function Ar(t,e){(t.data.directives||e.data.directives)&&function(t,e){const n=t===Cr,o=e===Cr,r=Er(t.data.directives,t.context),s=Er(e.data.directives,e.context),i=[],c=[];let a,l,u;for(a in s)l=r[a],u=s[a],l?(u.oldValue=l.value,u.oldArg=l.arg,Pr(u,"update",e,t),u.def&&u.def.componentUpdated&&c.push(u)):(Pr(u,"bind",e,t),u.def&&u.def.inserted&&i.push(u));if(i.length){const o=()=>{for(let n=0;n<i.length;n++)Pr(i[n],"inserted",e,t)};n?ie(e,"insert",o):o()}c.length&&ie(e,"postpatch",(()=>{for(let n=0;n<c.length;n++)Pr(c[n],"componentUpdated",e,t)}));if(!n)for(a in r)s[a]||Pr(r[a],"unbind",t,t,o)}(t,e)}const jr=Object.create(null);function Er(t,e){const n=Object.create(null);if(!t)return n;let o,r;for(o=0;o<t.length;o++){if(r=t[o],r.modifiers||(r.modifiers=jr),n[Nr(r)]=r,e._setupState&&e._setupState.__sfc){const t=r.def||Fo(e,"_setupState","v-"+r.name);r.def="function"==typeof t?{bind:t,update:t}:t}r.def=r.def||Fo(e.$options,"directives",r.name)}return n}function Nr(t){return t.rawName||`${t.name}.${Object.keys(t.modifiers||{}).join(".")}`}function Pr(t,e,n,o,r){const s=t.def&&t.def[e];if(s)try{s(n.elm,t,n,o,r)}catch(o){jn(o,n.context,`directive ${t.name} ${e} hook`)}}var Dr=[br,Tr];function Mr(t,e){const s=e.componentOptions;if(o(s)&&!1===s.Ctor.options.inheritAttrs)return;if(n(t.data.attrs)&&n(e.data.attrs))return;let i,c,a;const l=e.elm,u=t.data.attrs||{};let f=e.data.attrs||{};for(i in(o(f.__ob__)||r(f._v_attr_proxy))&&(f=e.data.attrs=T({},f)),f)c=f[i],a=u[i],a!==c&&Ir(l,i,c,e.data.pre);for(i in(q||Z)&&f.value!==u.value&&Ir(l,"value",f.value),u)n(f[i])&&(sr(i)?l.removeAttributeNS(rr,ir(i)):er(i)||l.removeAttribute(i))}function Ir(t,e,n,o){o||t.tagName.indexOf("-")>-1?Lr(t,e,n):or(e)?cr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):er(e)?t.setAttribute(e,((t,e)=>cr(e)||"false"===e?"false":"contenteditable"===t&&nr(e)?e:"true")(e,n)):sr(e)?cr(n)?t.removeAttributeNS(rr,ir(e)):t.setAttributeNS(rr,e,n):Lr(t,e,n)}function Lr(t,e,n){if(cr(n))t.removeAttribute(e);else{if(q&&!W&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){const e=n=>{n.stopImmediatePropagation(),t.removeEventListener("input",e)};t.addEventListener("input",e),t.__ieph=!0}t.setAttribute(e,n)}}var Fr={create:Mr,update:Mr};function Rr(t,e){const r=e.elm,s=e.data,i=t.data;if(n(s.staticClass)&&n(s.class)&&(n(i)||n(i.staticClass)&&n(i.class)))return;let c=ar(e);const a=r._transitionClasses;o(a)&&(c=ur(c,fr(a))),c!==r._prevClass&&(r.setAttribute("class",c),r._prevClass=c)}var Hr={create:Rr,update:Rr};const Br=/[\w).+\-_$\]]/;function Ur(t){let e,n,o,r,s,i=!1,c=!1,a=!1,l=!1,u=0,f=0,d=0,p=0;for(o=0;o<t.length;o++)if(n=e,e=t.charCodeAt(o),i)39===e&&92!==n&&(i=!1);else if(c)34===e&&92!==n&&(c=!1);else if(a)96===e&&92!==n&&(a=!1);else if(l)47===e&&92!==n&&(l=!1);else if(124!==e||124===t.charCodeAt(o+1)||124===t.charCodeAt(o-1)||u||f||d){switch(e){case 34:c=!0;break;case 39:i=!0;break;case 96:a=!0;break;case 40:d++;break;case 41:d--;break;case 91:f++;break;case 93:f--;break;case 123:u++;break;case 125:u--}if(47===e){let e,n=o-1;for(;n>=0&&(e=t.charAt(n)," "===e);n--);e&&Br.test(e)||(l=!0)}}else void 0===r?(p=o+1,r=t.slice(0,o).trim()):h();function h(){(s||(s=[])).push(t.slice(p,o).trim()),p=o+1}if(void 0===r?r=t.slice(0,o).trim():0!==p&&h(),s)for(o=0;o<s.length;o++)r=zr(r,s[o]);return r}function zr(t,e){const n=e.indexOf("(");if(n<0)return`_f("${e}")(${t})`;{const o=e.slice(0,n),r=e.slice(n+1);return`_f("${o}")(${t}${")"!==r?","+r:r}`}}function Vr(t,e){console.error(`[Vue compiler]: ${t}`)}function Kr(t,e){return t?t.map((t=>t[e])).filter((t=>t)):[]}function Jr(t,e,n,o,r){(t.props||(t.props=[])).push(es({name:e,value:n,dynamic:r},o)),t.plain=!1}function qr(t,e,n,o,r){(r?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(t.attrs=[])).push(es({name:e,value:n,dynamic:r},o)),t.plain=!1}function Wr(t,e,n,o){t.attrsMap[e]=n,t.attrsList.push(es({name:e,value:n},o))}function Zr(t,e,n,o,r,s,i,c){(t.directives||(t.directives=[])).push(es({name:e,rawName:n,value:o,arg:r,isDynamicArg:s,modifiers:i},c)),t.plain=!1}function Gr(t,e,n){return n?`_p(${e},"${t}")`:t+e}function Xr(e,n,o,r,s,i,c,a){let l;(r=r||t).right?a?n=`(${n})==='click'?'contextmenu':(${n})`:"click"===n&&(n="contextmenu",delete r.right):r.middle&&(a?n=`(${n})==='click'?'mouseup':(${n})`:"click"===n&&(n="mouseup")),r.capture&&(delete r.capture,n=Gr("!",n,a)),r.once&&(delete r.once,n=Gr("~",n,a)),r.passive&&(delete r.passive,n=Gr("&",n,a)),r.native?(delete r.native,l=e.nativeEvents||(e.nativeEvents={})):l=e.events||(e.events={});const u=es({value:o.trim(),dynamic:a},c);r!==t&&(u.modifiers=r);const f=l[n];Array.isArray(f)?s?f.unshift(u):f.push(u):l[n]=f?s?[u,f]:[f,u]:u,e.plain=!1}function Yr(t,e,n){const o=Qr(t,":"+e)||Qr(t,"v-bind:"+e);if(null!=o)return Ur(o);if(!1!==n){const n=Qr(t,e);if(null!=n)return JSON.stringify(n)}}function Qr(t,e,n){let o;if(null!=(o=t.attrsMap[e])){const n=t.attrsList;for(let t=0,o=n.length;t<o;t++)if(n[t].name===e){n.splice(t,1);break}}return n&&delete t.attrsMap[e],o}function ts(t,e){const n=t.attrsList;for(let t=0,o=n.length;t<o;t++){const o=n[t];if(e.test(o.name))return n.splice(t,1),o}}function es(t,e){return e&&(null!=e.start&&(t.start=e.start),null!=e.end&&(t.end=e.end)),t}function ns(t,e,n){const{number:o,trim:r}=n||{},s="$$v";let i=s;r&&(i="(typeof $$v === 'string'? $$v.trim(): $$v)"),o&&(i=`_n(${i})`);const c=os(e,i);t.model={value:`(${e})`,expression:JSON.stringify(e),callback:`function ($$v) {${c}}`}}function os(t,e){const n=function(t){if(t=t.trim(),rs=t.length,t.indexOf("[")<0||t.lastIndexOf("]")<rs-1)return cs=t.lastIndexOf("."),cs>-1?{exp:t.slice(0,cs),key:'"'+t.slice(cs+1)+'"'}:{exp:t,key:null};ss=t,cs=as=ls=0;for(;!fs();)is=us(),ds(is)?hs(is):91===is&&ps(is);return{exp:t.slice(0,as),key:t.slice(as+1,ls)}}(t);return null===n.key?`${t}=${e}`:`$set(${n.exp}, ${n.key}, ${e})`}let rs,ss,is,cs,as,ls;function us(){return ss.charCodeAt(++cs)}function fs(){return cs>=rs}function ds(t){return 34===t||39===t}function ps(t){let e=1;for(as=cs;!fs();)if(ds(t=us()))hs(t);else if(91===t&&e++,93===t&&e--,0===e){ls=cs;break}}function hs(t){const e=t;for(;!fs()&&(t=us())!==e;);}let ms;function gs(t,e,n){const o=ms;return function r(){const s=e.apply(null,arguments);null!==s&&_s(t,r,n,o)}}const vs=Dn&&!(X&&Number(X[1])<=53);function ys(t,e,n,o){if(vs){const t=un,n=e;e=n._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=t||e.timeStamp<=0||e.target.ownerDocument!==document)return n.apply(this,arguments)}}ms.addEventListener(t,e,tt?{capture:n,passive:o}:n)}function _s(t,e,n,o){(o||ms).removeEventListener(t,e._wrapper||e,n)}function $s(t,e){if(n(t.data.on)&&n(e.data.on))return;const r=e.data.on||{},s=t.data.on||{};ms=e.elm||t.elm,function(t){if(o(t.__r)){const e=q?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}o(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(r),se(r,s,ys,_s,gs,e.context),ms=void 0}var bs={create:$s,update:$s,destroy:t=>$s(t,Cr)};let ws;function xs(t,e){if(n(t.data.domProps)&&n(e.data.domProps))return;let s,i;const c=e.elm,a=t.data.domProps||{};let l=e.data.domProps||{};for(s in(o(l.__ob__)||r(l._v_attr_proxy))&&(l=e.data.domProps=T({},l)),a)s in l||(c[s]="");for(s in l){if(i=l[s],"textContent"===s||"innerHTML"===s){if(e.children&&(e.children.length=0),i===a[s])continue;1===c.childNodes.length&&c.removeChild(c.childNodes[0])}if("value"===s&&"PROGRESS"!==c.tagName){c._value=i;const t=n(i)?"":String(i);Cs(c,t)&&(c.value=t)}else if("innerHTML"===s&&hr(c.tagName)&&n(c.innerHTML)){ws=ws||document.createElement("div"),ws.innerHTML=`<svg>${i}</svg>`;const t=ws.firstChild;for(;c.firstChild;)c.removeChild(c.firstChild);for(;t.firstChild;)c.appendChild(t.firstChild)}else if(i!==a[s])try{c[s]=i}catch(t){}}}function Cs(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){let n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){const n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return p(n)!==p(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var ks={create:xs,update:xs};const Os=$((function(t){const e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){const o=t.split(n);o.length>1&&(e[o[0].trim()]=o[1].trim())}})),e}));function Ss(t){const e=Ts(t.style);return t.staticStyle?T(t.staticStyle,e):e}function Ts(t){return Array.isArray(t)?A(t):"string"==typeof t?Os(t):t}const As=/^--/,js=/\s*!important$/,Es=(t,e,n)=>{if(As.test(e))t.style.setProperty(e,n);else if(js.test(n))t.style.setProperty(k(e),n.replace(js,""),"important");else{const o=Ds(e);if(Array.isArray(n))for(let e=0,r=n.length;e<r;e++)t.style[o]=n[e];else t.style[o]=n}},Ns=["Webkit","Moz","ms"];let Ps;const Ds=$((function(t){if(Ps=Ps||document.createElement("div").style,"filter"!==(t=w(t))&&t in Ps)return t;const e=t.charAt(0).toUpperCase()+t.slice(1);for(let t=0;t<Ns.length;t++){const n=Ns[t]+e;if(n in Ps)return n}}));function Ms(t,e){const r=e.data,s=t.data;if(n(r.staticStyle)&&n(r.style)&&n(s.staticStyle)&&n(s.style))return;let i,c;const a=e.elm,l=s.staticStyle,u=s.normalizedStyle||s.style||{},f=l||u,d=Ts(e.data.style)||{};e.data.normalizedStyle=o(d.__ob__)?T({},d):d;const p=function(t,e){const n={};let o;if(e){let e=t;for(;e.componentInstance;)e=e.componentInstance._vnode,e&&e.data&&(o=Ss(e.data))&&T(n,o)}(o=Ss(t.data))&&T(n,o);let r=t;for(;r=r.parent;)r.data&&(o=Ss(r.data))&&T(n,o);return n}(e,!0);for(c in f)n(p[c])&&Es(a,c,"");for(c in p)i=p[c],i!==f[c]&&Es(a,c,null==i?"":i)}var Is={create:Ms,update:Ms};const Ls=/\s+/;function Fs(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Ls).forEach((e=>t.classList.add(e))):t.classList.add(e);else{const n=` ${t.getAttribute("class")||""} `;n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Rs(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Ls).forEach((e=>t.classList.remove(e))):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{let n=` ${t.getAttribute("class")||""} `;const o=" "+e+" ";for(;n.indexOf(o)>=0;)n=n.replace(o," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function Hs(t){if(t){if("object"==typeof t){const e={};return!1!==t.css&&T(e,Bs(t.name||"v")),T(e,t),e}return"string"==typeof t?Bs(t):void 0}}const Bs=$((t=>({enterClass:`${t}-enter`,enterToClass:`${t}-enter-to`,enterActiveClass:`${t}-enter-active`,leaveClass:`${t}-leave`,leaveToClass:`${t}-leave-to`,leaveActiveClass:`${t}-leave-active`}))),Us=K&&!W;let zs="transition",Vs="transitionend",Ks="animation",Js="animationend";Us&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(zs="WebkitTransition",Vs="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ks="WebkitAnimation",Js="webkitAnimationEnd"));const qs=K?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:t=>t();function Ws(t){qs((()=>{qs(t)}))}function Zs(t,e){const n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Fs(t,e))}function Gs(t,e){t._transitionClasses&&v(t._transitionClasses,e),Rs(t,e)}function Xs(t,e,n){const{type:o,timeout:r,propCount:s}=Qs(t,e);if(!o)return n();const i="transition"===o?Vs:Js;let c=0;const a=()=>{t.removeEventListener(i,l),n()},l=e=>{e.target===t&&++c>=s&&a()};setTimeout((()=>{c<s&&a()}),r+1),t.addEventListener(i,l)}const Ys=/\b(transform|all)(,|$)/;function Qs(t,e){const n=window.getComputedStyle(t),o=(n[zs+"Delay"]||"").split(", "),r=(n[zs+"Duration"]||"").split(", "),s=ti(o,r),i=(n[Ks+"Delay"]||"").split(", "),c=(n[Ks+"Duration"]||"").split(", "),a=ti(i,c);let l,u=0,f=0;"transition"===e?s>0&&(l="transition",u=s,f=r.length):"animation"===e?a>0&&(l="animation",u=a,f=c.length):(u=Math.max(s,a),l=u>0?s>a?"transition":"animation":null,f=l?"transition"===l?r.length:c.length:0);return{type:l,timeout:u,propCount:f,hasTransform:"transition"===l&&Ys.test(n[zs+"Property"])}}function ti(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map(((e,n)=>ei(e)+ei(t[n]))))}function ei(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function ni(t,e){const r=t.elm;o(r._leaveCb)&&(r._leaveCb.cancelled=!0,r._leaveCb());const s=Hs(t.data.transition);if(n(s))return;if(o(r._enterCb)||1!==r.nodeType)return;const{css:a,type:l,enterClass:u,enterToClass:f,enterActiveClass:d,appearClass:h,appearToClass:m,appearActiveClass:g,beforeEnter:v,enter:y,afterEnter:_,enterCancelled:$,beforeAppear:b,appear:w,afterAppear:x,appearCancelled:C,duration:k}=s;let O=Xe,S=Xe.$vnode;for(;S&&S.parent;)O=S.context,S=S.parent;const T=!O._isMounted||!t.isRootInsert;if(T&&!w&&""!==w)return;const A=T&&h?h:u,j=T&&g?g:d,E=T&&m?m:f,N=T&&b||v,P=T&&i(w)?w:y,D=T&&x||_,I=T&&C||$,L=p(c(k)?k.enter:k),F=!1!==a&&!W,R=si(P),H=r._enterCb=M((()=>{F&&(Gs(r,E),Gs(r,j)),H.cancelled?(F&&Gs(r,A),I&&I(r)):D&&D(r),r._enterCb=null}));t.data.show||ie(t,"insert",(()=>{const e=r.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),P&&P(r,H)})),N&&N(r),F&&(Zs(r,A),Zs(r,j),Ws((()=>{Gs(r,A),H.cancelled||(Zs(r,E),R||(ri(L)?setTimeout(H,L):Xs(r,l,H)))}))),t.data.show&&(e&&e(),P&&P(r,H)),F||R||H()}function oi(t,e){const r=t.elm;o(r._enterCb)&&(r._enterCb.cancelled=!0,r._enterCb());const s=Hs(t.data.transition);if(n(s)||1!==r.nodeType)return e();if(o(r._leaveCb))return;const{css:i,type:a,leaveClass:l,leaveToClass:u,leaveActiveClass:f,beforeLeave:d,leave:h,afterLeave:m,leaveCancelled:g,delayLeave:v,duration:y}=s,_=!1!==i&&!W,$=si(h),b=p(c(y)?y.leave:y),w=r._leaveCb=M((()=>{r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[t.key]=null),_&&(Gs(r,u),Gs(r,f)),w.cancelled?(_&&Gs(r,l),g&&g(r)):(e(),m&&m(r)),r._leaveCb=null}));function x(){w.cancelled||(!t.data.show&&r.parentNode&&((r.parentNode._pending||(r.parentNode._pending={}))[t.key]=t),d&&d(r),_&&(Zs(r,l),Zs(r,f),Ws((()=>{Gs(r,l),w.cancelled||(Zs(r,u),$||(ri(b)?setTimeout(w,b):Xs(r,a,w)))}))),h&&h(r,w),_||$||w())}v?v(x):x()}function ri(t){return"number"==typeof t&&!isNaN(t)}function si(t){if(n(t))return!1;const e=t.fns;return o(e)?si(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function ii(t,e){!0!==e.data.show&&ni(e)}const ci=function(t){let i,c;const a={},{modules:l,nodeOps:u}=t;for(i=0;i<kr.length;++i)for(a[kr[i]]=[],c=0;c<l.length;++c)o(l[c][kr[i]])&&a[kr[i]].push(l[c][kr[i]]);function f(t){const e=u.parentNode(t);o(e)&&u.removeChild(e,t)}function d(t,e,n,s,i,c,l){if(o(t.elm)&&o(c)&&(t=c[l]=dt(t)),t.isRootInsert=!i,function(t,e,n,s){let i=t.data;if(o(i)){const c=o(t.componentInstance)&&i.keepAlive;if(o(i=i.hook)&&o(i=i.init)&&i(t,!1),o(t.componentInstance))return p(t,e),m(n,t.elm,s),r(c)&&function(t,e,n,r){let s,i=t;for(;i.componentInstance;)if(i=i.componentInstance._vnode,o(s=i.data)&&o(s=s.transition)){for(s=0;s<a.activate.length;++s)a.activate[s](Cr,i);e.push(i);break}m(n,t.elm,r)}(t,e,n,s),!0}}(t,e,n,s))return;const f=t.data,d=t.children,h=t.tag;o(h)?(t.elm=t.ns?u.createElementNS(t.ns,h):u.createElement(h,t),_(t),g(t,d,e),o(f)&&y(t,e),m(n,t.elm,s)):r(t.isComment)?(t.elm=u.createComment(t.text),m(n,t.elm,s)):(t.elm=u.createTextNode(t.text),m(n,t.elm,s))}function p(t,e){o(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,v(t)?(y(t,e),_(t)):(wr(t),e.push(t))}function m(t,e,n){o(t)&&(o(n)?u.parentNode(n)===t&&u.insertBefore(t,e,n):u.appendChild(t,e))}function g(t,n,o){if(e(n))for(let e=0;e<n.length;++e)d(n[e],o,t.elm,null,!0,n,e);else s(t.text)&&u.appendChild(t.elm,u.createTextNode(String(t.text)))}function v(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return o(t.tag)}function y(t,e){for(let e=0;e<a.create.length;++e)a.create[e](Cr,t);i=t.data.hook,o(i)&&(o(i.create)&&i.create(Cr,t),o(i.insert)&&e.push(t))}function _(t){let e;if(o(e=t.fnScopeId))u.setStyleScope(t.elm,e);else{let n=t;for(;n;)o(e=n.context)&&o(e=e.$options._scopeId)&&u.setStyleScope(t.elm,e),n=n.parent}o(e=Xe)&&e!==t.context&&e!==t.fnContext&&o(e=e.$options._scopeId)&&u.setStyleScope(t.elm,e)}function $(t,e,n,o,r,s){for(;o<=r;++o)d(n[o],s,t,e,!1,n,o)}function b(t){let e,n;const r=t.data;if(o(r))for(o(e=r.hook)&&o(e=e.destroy)&&e(t),e=0;e<a.destroy.length;++e)a.destroy[e](t);if(o(e=t.children))for(n=0;n<t.children.length;++n)b(t.children[n])}function w(t,e,n){for(;e<=n;++e){const n=t[e];o(n)&&(o(n.tag)?(x(n),b(n)):f(n.elm))}}function x(t,e){if(o(e)||o(t.data)){let n;const r=a.remove.length+1;for(o(e)?e.listeners+=r:e=function(t,e){function n(){0==--n.listeners&&f(t)}return n.listeners=e,n}(t.elm,r),o(n=t.componentInstance)&&o(n=n._vnode)&&o(n.data)&&x(n,e),n=0;n<a.remove.length;++n)a.remove[n](t,e);o(n=t.data.hook)&&o(n=n.remove)?n(t,e):e()}else f(t.elm)}function C(t,e,n,r){for(let s=n;s<r;s++){const n=e[s];if(o(n)&&Or(t,n))return s}}function k(t,e,s,i,c,l){if(t===e)return;o(e.elm)&&o(i)&&(e=i[c]=dt(e));const f=e.elm=t.elm;if(r(t.isAsyncPlaceholder))return void(o(e.asyncFactory.resolved)?T(t.elm,e,s):e.isAsyncPlaceholder=!0);if(r(e.isStatic)&&r(t.isStatic)&&e.key===t.key&&(r(e.isCloned)||r(e.isOnce)))return void(e.componentInstance=t.componentInstance);let p;const h=e.data;o(h)&&o(p=h.hook)&&o(p=p.prepatch)&&p(t,e);const m=t.children,g=e.children;if(o(h)&&v(e)){for(p=0;p<a.update.length;++p)a.update[p](t,e);o(p=h.hook)&&o(p=p.update)&&p(t,e)}n(e.text)?o(m)&&o(g)?m!==g&&function(t,e,r,s,i){let c,a,l,f,p=0,h=0,m=e.length-1,g=e[0],v=e[m],y=r.length-1,_=r[0],b=r[y];const x=!i;for(;p<=m&&h<=y;)n(g)?g=e[++p]:n(v)?v=e[--m]:Or(g,_)?(k(g,_,s,r,h),g=e[++p],_=r[++h]):Or(v,b)?(k(v,b,s,r,y),v=e[--m],b=r[--y]):Or(g,b)?(k(g,b,s,r,y),x&&u.insertBefore(t,g.elm,u.nextSibling(v.elm)),g=e[++p],b=r[--y]):Or(v,_)?(k(v,_,s,r,h),x&&u.insertBefore(t,v.elm,g.elm),v=e[--m],_=r[++h]):(n(c)&&(c=Sr(e,p,m)),a=o(_.key)?c[_.key]:C(_,e,p,m),n(a)?d(_,s,t,g.elm,!1,r,h):(l=e[a],Or(l,_)?(k(l,_,s,r,h),e[a]=void 0,x&&u.insertBefore(t,l.elm,g.elm)):d(_,s,t,g.elm,!1,r,h)),_=r[++h]);p>m?(f=n(r[y+1])?null:r[y+1].elm,$(t,f,r,h,y,s)):h>y&&w(e,p,m)}(f,m,g,s,l):o(g)?(o(t.text)&&u.setTextContent(f,""),$(f,null,g,0,g.length-1,s)):o(m)?w(m,0,m.length-1):o(t.text)&&u.setTextContent(f,""):t.text!==e.text&&u.setTextContent(f,e.text),o(h)&&o(p=h.hook)&&o(p=p.postpatch)&&p(t,e)}function O(t,e,n){if(r(n)&&o(t.parent))t.parent.data.pendingInsert=e;else for(let t=0;t<e.length;++t)e[t].data.hook.insert(e[t])}const S=h("attrs,class,staticClass,staticStyle,key");function T(t,e,n,s){let i;const{tag:c,data:a,children:l}=e;if(s=s||a&&a.pre,e.elm=t,r(e.isComment)&&o(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(o(a)&&(o(i=a.hook)&&o(i=i.init)&&i(e,!0),o(i=e.componentInstance)))return p(e,n),!0;if(o(c)){if(o(l))if(t.hasChildNodes())if(o(i=a)&&o(i=i.domProps)&&o(i=i.innerHTML)){if(i!==t.innerHTML)return!1}else{let e=!0,o=t.firstChild;for(let t=0;t<l.length;t++){if(!o||!T(o,l[t],n,s)){e=!1;break}o=o.nextSibling}if(!e||o)return!1}else g(e,l,n);if(o(a)){let t=!1;for(const o in a)if(!S(o)){t=!0,y(e,n);break}!t&&a.class&&io(a.class)}}else t.data!==e.text&&(t.data=e.text);return!0}return function(t,e,s,i){if(n(e))return void(o(t)&&b(t));let c=!1;const l=[];if(n(t))c=!0,d(e,l);else{const n=o(t.nodeType);if(!n&&Or(t,e))k(t,e,l,null,null,i);else{if(n){if(1===t.nodeType&&t.hasAttribute("data-server-rendered")&&(t.removeAttribute("data-server-rendered"),s=!0),r(s)&&T(t,e,l))return O(e,l,!0),t;f=t,t=new lt(u.tagName(f).toLowerCase(),{},[],void 0,f)}const i=t.elm,c=u.parentNode(i);if(d(e,l,i._leaveCb?null:c,u.nextSibling(i)),o(e.parent)){let t=e.parent;const n=v(e);for(;t;){for(let e=0;e<a.destroy.length;++e)a.destroy[e](t);if(t.elm=e.elm,n){for(let e=0;e<a.create.length;++e)a.create[e](Cr,t);const e=t.data.hook.insert;if(e.merged)for(let t=1;t<e.fns.length;t++)e.fns[t]()}else wr(t);t=t.parent}}o(c)?w([t],0,0):o(t.tag)&&b(t)}}var f;return O(e,l,c),e.elm}}({nodeOps:$r,modules:[Fr,Hr,bs,ks,Is,K?{create:ii,activate:ii,remove(t,e){!0!==t.data.show?oi(t,e):e()}}:{}].concat(Dr)});W&&document.addEventListener("selectionchange",(()=>{const t=document.activeElement;t&&t.vmodel&&mi(t,"input")}));const ai={inserted(t,e,n,o){"select"===n.tag?(o.elm&&!o.elm._vOptions?ie(n,"postpatch",(()=>{ai.componentUpdated(t,e,n)})):li(t,e,n.context),t._vOptions=[].map.call(t.options,di)):("textarea"===n.tag||yr(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",pi),t.addEventListener("compositionend",hi),t.addEventListener("change",hi),W&&(t.vmodel=!0)))},componentUpdated(t,e,n){if("select"===n.tag){li(t,e,n.context);const o=t._vOptions,r=t._vOptions=[].map.call(t.options,di);if(r.some(((t,e)=>!P(t,o[e])))){(t.multiple?e.value.some((t=>fi(t,r))):e.value!==e.oldValue&&fi(e.value,r))&&mi(t,"change")}}}};function li(t,e,n){ui(t,e),(q||Z)&&setTimeout((()=>{ui(t,e)}),0)}function ui(t,e,n){const o=e.value,r=t.multiple;if(r&&!Array.isArray(o))return;let s,i;for(let e=0,n=t.options.length;e<n;e++)if(i=t.options[e],r)s=D(o,di(i))>-1,i.selected!==s&&(i.selected=s);else if(P(di(i),o))return void(t.selectedIndex!==e&&(t.selectedIndex=e));r||(t.selectedIndex=-1)}function fi(t,e){return e.every((e=>!P(e,t)))}function di(t){return"_value"in t?t._value:t.value}function pi(t){t.target.composing=!0}function hi(t){t.target.composing&&(t.target.composing=!1,mi(t.target,"input"))}function mi(t,e){const n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function gi(t){return!t.componentInstance||t.data&&t.data.transition?t:gi(t.componentInstance._vnode)}var vi={bind(t,{value:e},n){const o=(n=gi(n)).data&&n.data.transition,r=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;e&&o?(n.data.show=!0,ni(n,(()=>{t.style.display=r}))):t.style.display=e?r:"none"},update(t,{value:e,oldValue:n},o){if(!e==!n)return;(o=gi(o)).data&&o.data.transition?(o.data.show=!0,e?ni(o,(()=>{t.style.display=t.__vOriginalDisplay})):oi(o,(()=>{t.style.display="none"}))):t.style.display=e?t.__vOriginalDisplay:"none"},unbind(t,e,n,o,r){r||(t.style.display=t.__vOriginalDisplay)}},yi={model:ai,show:vi};const _i={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function $i(t){const e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?$i(Je(e.children)):t}function bi(t){const e={},n=t.$options;for(const o in n.propsData)e[o]=t[o];const o=n._parentListeners;for(const t in o)e[w(t)]=o[t];return e}function wi(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}const xi=t=>t.tag||je(t),Ci=t=>"show"===t.name;var ki={name:"transition",props:_i,abstract:!0,render(t){let e=this.$slots.default;if(!e)return;if(e=e.filter(xi),!e.length)return;const n=this.mode,o=e[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;const r=$i(o);if(!r)return o;if(this._leaving)return wi(t,o);const i=`__transition-${this._uid}-`;r.key=null==r.key?r.isComment?i+"comment":i+r.tag:s(r.key)?0===String(r.key).indexOf(i)?r.key:i+r.key:r.key;const c=(r.data||(r.data={})).transition=bi(this),a=this._vnode,l=$i(a);if(r.data.directives&&r.data.directives.some(Ci)&&(r.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(r,l)&&!je(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){const e=l.data.transition=T({},c);if("out-in"===n)return this._leaving=!0,ie(e,"afterLeave",(()=>{this._leaving=!1,this.$forceUpdate()})),wi(t,o);if("in-out"===n){if(je(r))return a;let t;const n=()=>{t()};ie(c,"afterEnter",n),ie(c,"enterCancelled",n),ie(e,"delayLeave",(e=>{t=e}))}}return o}};const Oi=T({tag:String,moveClass:String},_i);delete Oi.mode;var Si={props:Oi,beforeMount(){const t=this._update;this._update=(e,n)=>{const o=Ye(this);this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept,o(),t.call(this,e,n)}},render(t){const e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),o=this.prevChildren=this.children,r=this.$slots.default||[],s=this.children=[],i=bi(this);for(let t=0;t<r.length;t++){const e=r[t];e.tag&&null!=e.key&&0!==String(e.key).indexOf("__vlist")&&(s.push(e),n[e.key]=e,(e.data||(e.data={})).transition=i)}if(o){const r=[],s=[];for(let t=0;t<o.length;t++){const e=o[t];e.data.transition=i,e.data.pos=e.elm.getBoundingClientRect(),n[e.key]?r.push(e):s.push(e)}this.kept=t(e,null,r),this.removed=s}return t(e,null,s)},updated(){const t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(Ti),t.forEach(Ai),t.forEach(ji),this._reflow=document.body.offsetHeight,t.forEach((t=>{if(t.data.moved){const n=t.elm,o=n.style;Zs(n,e),o.transform=o.WebkitTransform=o.transitionDuration="",n.addEventListener(Vs,n._moveCb=function t(o){o&&o.target!==n||o&&!/transform$/.test(o.propertyName)||(n.removeEventListener(Vs,t),n._moveCb=null,Gs(n,e))})}})))},methods:{hasMove(t,e){if(!Us)return!1;if(this._hasMove)return this._hasMove;const n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((t=>{Rs(n,t)})),Fs(n,e),n.style.display="none",this.$el.appendChild(n);const o=Qs(n);return this.$el.removeChild(n),this._hasMove=o.hasTransform}}};function Ti(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Ai(t){t.data.newPos=t.elm.getBoundingClientRect()}function ji(t){const e=t.data.pos,n=t.data.newPos,o=e.left-n.left,r=e.top-n.top;if(o||r){t.data.moved=!0;const e=t.elm.style;e.transform=e.WebkitTransform=`translate(${o}px,${r}px)`,e.transitionDuration="0s"}}var Ei={Transition:ki,TransitionGroup:Si};Vo.config.mustUseProp=tr,Vo.config.isReservedTag=mr,Vo.config.isReservedAttr=Yo,Vo.config.getTagNamespace=gr,Vo.config.isUnknownElement=function(t){if(!K)return!0;if(mr(t))return!1;if(t=t.toLowerCase(),null!=vr[t])return vr[t];const e=document.createElement(t);return t.indexOf("-")>-1?vr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:vr[t]=/HTMLUnknownElement/.test(e.toString())},T(Vo.options.directives,yi),T(Vo.options.components,Ei),Vo.prototype.__patch__=K?ci:j,Vo.prototype.$mount=function(t,e){return function(t,e,n){let o;t.$el=e,t.$options.render||(t.$options.render=ut),nn(t,"beforeMount"),o=()=>{t._update(t._render(),n)},new lo(t,o,j,{before(){t._isMounted&&!t._isDestroyed&&nn(t,"beforeUpdate")}},!0),n=!1;const r=t._preWatchers;if(r)for(let t=0;t<r.length;t++)r[t].run();return null==t.$vnode&&(t._isMounted=!0,nn(t,"mounted")),t}(this,t=t&&K?_r(t):void 0,e)},K&&setTimeout((()=>{R.devtools&&nt&&nt.emit("init",Vo)}),0);const Ni=/\{\{((?:.|\r?\n)+?)\}\}/g,Pi=/[-.*+?^${}()|[\]\/\\]/g,Di=$((t=>{const e=t[0].replace(Pi,"\\$&"),n=t[1].replace(Pi,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}));var Mi={staticKeys:["staticClass"],transformNode:function(t,e){e.warn;const n=Qr(t,"class");n&&(t.staticClass=JSON.stringify(n.replace(/\s+/g," ").trim()));const o=Yr(t,"class",!1);o&&(t.classBinding=o)},genData:function(t){let e="";return t.staticClass&&(e+=`staticClass:${t.staticClass},`),t.classBinding&&(e+=`class:${t.classBinding},`),e}};var Ii={staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;const n=Qr(t,"style");n&&(t.staticStyle=JSON.stringify(Os(n)));const o=Yr(t,"style",!1);o&&(t.styleBinding=o)},genData:function(t){let e="";return t.staticStyle&&(e+=`staticStyle:${t.staticStyle},`),t.styleBinding&&(e+=`style:(${t.styleBinding}),`),e}};let Li;var Fi={decode:t=>(Li=Li||document.createElement("div"),Li.innerHTML=t,Li.textContent)};const Ri=h("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Hi=h("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Bi=h("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Ui=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,zi=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Vi=`[a-zA-Z_][\\-\\.0-9_a-zA-Z${H.source}]*`,Ki=`((?:${Vi}\\:)?${Vi})`,Ji=new RegExp(`^<${Ki}`),qi=/^\s*(\/?)>/,Wi=new RegExp(`^<\\/${Ki}[^>]*>`),Zi=/^<!DOCTYPE [^>]+>/i,Gi=/^<!\--/,Xi=/^<!\[/,Yi=h("script,style,textarea",!0),Qi={},tc={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n","&#9;":"\t","&#39;":"'"},ec=/&(?:lt|gt|quot|amp|#39);/g,nc=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,oc=h("pre,textarea",!0),rc=(t,e)=>t&&oc(t)&&"\n"===e[0];function sc(t,e){const n=e?nc:ec;return t.replace(n,(t=>tc[t]))}const ic=/^@|^v-on:/,cc=/^v-|^@|^:|^#/,ac=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,lc=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,uc=/^\(|\)$/g,fc=/^\[.*\]$/,dc=/:(.*)$/,pc=/^:|^\.|^v-bind:/,hc=/\.[^.\]]+(?=[^\]]*$)/g,mc=/^v-slot(:|$)|^#/,gc=/[\r\n]/,vc=/[ \f\t\r\n]+/g,yc=$(Fi.decode);let _c,$c,bc,wc,xc,Cc,kc,Oc;function Sc(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:Dc(e),rawAttrsMap:{},parent:n,children:[]}}function Tc(t,e){_c=e.warn||Vr,Cc=e.isPreTag||E,kc=e.mustUseProp||E,Oc=e.getTagNamespace||E,e.isReservedTag,bc=Kr(e.modules,"transformNode"),wc=Kr(e.modules,"preTransformNode"),xc=Kr(e.modules,"postTransformNode"),$c=e.delimiters;const n=[],o=!1!==e.preserveWhitespace,r=e.whitespace;let s,i,c=!1,a=!1;function l(t){if(u(t),c||t.processed||(t=Ac(t,e)),n.length||t===s||s.if&&(t.elseif||t.else)&&Ec(s,{exp:t.elseif,block:t}),i&&!t.forbidden)if(t.elseif||t.else)!function(t,e){const n=function(t){let e=t.length;for(;e--;){if(1===t[e].type)return t[e];t.pop()}}(e.children);n&&n.if&&Ec(n,{exp:t.elseif,block:t})}(t,i);else{if(t.slotScope){const e=t.slotTarget||'"default"';(i.scopedSlots||(i.scopedSlots={}))[e]=t}i.children.push(t),t.parent=i}t.children=t.children.filter((t=>!t.slotScope)),u(t),t.pre&&(c=!1),Cc(t.tag)&&(a=!1);for(let n=0;n<xc.length;n++)xc[n](t,e)}function u(t){if(!a){let e;for(;(e=t.children[t.children.length-1])&&3===e.type&&" "===e.text;)t.children.pop()}}return function(t,e){const n=[],o=e.expectHTML,r=e.isUnaryTag||E,s=e.canBeLeftOpenTag||E;let i,c,a=0;for(;t;){if(i=t,c&&Yi(c)){let n=0;const o=c.toLowerCase(),r=Qi[o]||(Qi[o]=new RegExp("([\\s\\S]*?)(</"+o+"[^>]*>)","i")),s=t.replace(r,(function(t,r,s){return n=s.length,Yi(o)||"noscript"===o||(r=r.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),rc(o,r)&&(r=r.slice(1)),e.chars&&e.chars(r),""}));a+=t.length-s.length,t=s,d(o,a-n,a)}else{let n,o,r,s=t.indexOf("<");if(0===s){if(Gi.test(t)){const n=t.indexOf("--\x3e");if(n>=0){e.shouldKeepComment&&e.comment&&e.comment(t.substring(4,n),a,a+n+3),l(n+3);continue}}if(Xi.test(t)){const e=t.indexOf("]>");if(e>=0){l(e+2);continue}}const n=t.match(Zi);if(n){l(n[0].length);continue}const o=t.match(Wi);if(o){const t=a;l(o[0].length),d(o[1],t,a);continue}const r=u();if(r){f(r),rc(r.tagName,t)&&l(1);continue}}if(s>=0){for(o=t.slice(s);!(Wi.test(o)||Ji.test(o)||Gi.test(o)||Xi.test(o)||(r=o.indexOf("<",1),r<0));)s+=r,o=t.slice(s);n=t.substring(0,s)}s<0&&(n=t),n&&l(n.length),e.chars&&n&&e.chars(n,a-n.length,a)}if(t===i){e.chars&&e.chars(t);break}}function l(e){a+=e,t=t.substring(e)}function u(){const e=t.match(Ji);if(e){const n={tagName:e[1],attrs:[],start:a};let o,r;for(l(e[0].length);!(o=t.match(qi))&&(r=t.match(zi)||t.match(Ui));)r.start=a,l(r[0].length),r.end=a,n.attrs.push(r);if(o)return n.unarySlash=o[1],l(o[0].length),n.end=a,n}}function f(t){const i=t.tagName,a=t.unarySlash;o&&("p"===c&&Bi(i)&&d(c),s(i)&&c===i&&d(i));const l=r(i)||!!a,u=t.attrs.length,f=new Array(u);for(let n=0;n<u;n++){const o=t.attrs[n],r=o[3]||o[4]||o[5]||"",s="a"===i&&"href"===o[1]?e.shouldDecodeNewlinesForHref:e.shouldDecodeNewlines;f[n]={name:o[1],value:sc(r,s)}}l||(n.push({tag:i,lowerCasedTag:i.toLowerCase(),attrs:f,start:t.start,end:t.end}),c=i),e.start&&e.start(i,f,l,t.start,t.end)}function d(t,o,r){let s,i;if(null==o&&(o=a),null==r&&(r=a),t)for(i=t.toLowerCase(),s=n.length-1;s>=0&&n[s].lowerCasedTag!==i;s--);else s=0;if(s>=0){for(let t=n.length-1;t>=s;t--)e.end&&e.end(n[t].tag,o,r);n.length=s,c=s&&n[s-1].tag}else"br"===i?e.start&&e.start(t,[],!0,o,r):"p"===i&&(e.start&&e.start(t,[],!1,o,r),e.end&&e.end(t,o,r))}d()}(t,{warn:_c,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start(t,o,r,u,f){const d=i&&i.ns||Oc(t);q&&"svg"===d&&(o=function(t){const e=[];for(let n=0;n<t.length;n++){const o=t[n];Mc.test(o.name)||(o.name=o.name.replace(Ic,""),e.push(o))}return e}(o));let p=Sc(t,o,i);var h;d&&(p.ns=d),"style"!==(h=p).tag&&("script"!==h.tag||h.attrsMap.type&&"text/javascript"!==h.attrsMap.type)||et()||(p.forbidden=!0);for(let t=0;t<wc.length;t++)p=wc[t](p,e)||p;c||(!function(t){null!=Qr(t,"v-pre")&&(t.pre=!0)}(p),p.pre&&(c=!0)),Cc(p.tag)&&(a=!0),c?function(t){const e=t.attrsList,n=e.length;if(n){const o=t.attrs=new Array(n);for(let t=0;t<n;t++)o[t]={name:e[t].name,value:JSON.stringify(e[t].value)},null!=e[t].start&&(o[t].start=e[t].start,o[t].end=e[t].end)}else t.pre||(t.plain=!0)}(p):p.processed||(jc(p),function(t){const e=Qr(t,"v-if");if(e)t.if=e,Ec(t,{exp:e,block:t});else{null!=Qr(t,"v-else")&&(t.else=!0);const e=Qr(t,"v-else-if");e&&(t.elseif=e)}}(p),function(t){null!=Qr(t,"v-once")&&(t.once=!0)}(p)),s||(s=p),r?l(p):(i=p,n.push(p))},end(t,e,o){const r=n[n.length-1];n.length-=1,i=n[n.length-1],l(r)},chars(t,e,n){if(!i)return;if(q&&"textarea"===i.tag&&i.attrsMap.placeholder===t)return;const s=i.children;var l;if(t=a||t.trim()?"script"===(l=i).tag||"style"===l.tag?t:yc(t):s.length?r?"condense"===r&&gc.test(t)?"":" ":o?" ":"":""){let e,n;a||"condense"!==r||(t=t.replace(vc," ")),!c&&" "!==t&&(e=function(t,e){const n=e?Di(e):Ni;if(!n.test(t))return;const o=[],r=[];let s,i,c,a=n.lastIndex=0;for(;s=n.exec(t);){i=s.index,i>a&&(r.push(c=t.slice(a,i)),o.push(JSON.stringify(c)));const e=Ur(s[1].trim());o.push(`_s(${e})`),r.push({"@binding":e}),a=i+s[0].length}return a<t.length&&(r.push(c=t.slice(a)),o.push(JSON.stringify(c))),{expression:o.join("+"),tokens:r}}(t,$c))?n={type:2,expression:e.expression,tokens:e.tokens,text:t}:" "===t&&s.length&&" "===s[s.length-1].text||(n={type:3,text:t}),n&&s.push(n)}},comment(t,e,n){if(i){const e={type:3,text:t,isComment:!0};i.children.push(e)}}}),s}function Ac(t,e){var n;!function(t){const e=Yr(t,"key");e&&(t.key=e)}(t),t.plain=!t.key&&!t.scopedSlots&&!t.attrsList.length,function(t){const e=Yr(t,"ref");e&&(t.ref=e,t.refInFor=function(t){let e=t;for(;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}(t))}(t),function(t){let e;"template"===t.tag?(e=Qr(t,"scope"),t.slotScope=e||Qr(t,"slot-scope")):(e=Qr(t,"slot-scope"))&&(t.slotScope=e);const n=Yr(t,"slot");n&&(t.slotTarget='""'===n?'"default"':n,t.slotTargetDynamic=!(!t.attrsMap[":slot"]&&!t.attrsMap["v-bind:slot"]),"template"===t.tag||t.slotScope||qr(t,"slot",n,function(t,e){return t.rawAttrsMap[":"+e]||t.rawAttrsMap["v-bind:"+e]||t.rawAttrsMap[e]}(t,"slot")));if("template"===t.tag){const e=ts(t,mc);if(e){const{name:n,dynamic:o}=Nc(e);t.slotTarget=n,t.slotTargetDynamic=o,t.slotScope=e.value||"_empty_"}}else{const e=ts(t,mc);if(e){const n=t.scopedSlots||(t.scopedSlots={}),{name:o,dynamic:r}=Nc(e),s=n[o]=Sc("template",[],t);s.slotTarget=o,s.slotTargetDynamic=r,s.children=t.children.filter((t=>{if(!t.slotScope)return t.parent=s,!0})),s.slotScope=e.value||"_empty_",t.children=[],t.plain=!1}}}(t),"slot"===(n=t).tag&&(n.slotName=Yr(n,"name")),function(t){let e;(e=Yr(t,"is"))&&(t.component=e);null!=Qr(t,"inline-template")&&(t.inlineTemplate=!0)}(t);for(let n=0;n<bc.length;n++)t=bc[n](t,e)||t;return function(t){const e=t.attrsList;let n,o,r,s,i,c,a,l;for(n=0,o=e.length;n<o;n++)if(r=s=e[n].name,i=e[n].value,cc.test(r))if(t.hasBindings=!0,c=Pc(r.replace(cc,"")),c&&(r=r.replace(hc,"")),pc.test(r))r=r.replace(pc,""),i=Ur(i),l=fc.test(r),l&&(r=r.slice(1,-1)),c&&(c.prop&&!l&&(r=w(r),"innerHtml"===r&&(r="innerHTML")),c.camel&&!l&&(r=w(r)),c.sync&&(a=os(i,"$event"),l?Xr(t,`"update:"+(${r})`,a,null,!1,0,e[n],!0):(Xr(t,`update:${w(r)}`,a,null,!1,0,e[n]),k(r)!==w(r)&&Xr(t,`update:${k(r)}`,a,null,!1,0,e[n])))),c&&c.prop||!t.component&&kc(t.tag,t.attrsMap.type,r)?Jr(t,r,i,e[n],l):qr(t,r,i,e[n],l);else if(ic.test(r))r=r.replace(ic,""),l=fc.test(r),l&&(r=r.slice(1,-1)),Xr(t,r,i,c,!1,0,e[n],l);else{r=r.replace(cc,"");const o=r.match(dc);let a=o&&o[1];l=!1,a&&(r=r.slice(0,-(a.length+1)),fc.test(a)&&(a=a.slice(1,-1),l=!0)),Zr(t,r,s,i,a,l,c,e[n])}else qr(t,r,JSON.stringify(i),e[n]),!t.component&&"muted"===r&&kc(t.tag,t.attrsMap.type,r)&&Jr(t,r,"true",e[n])}(t),t}function jc(t){let e;if(e=Qr(t,"v-for")){const n=function(t){const e=t.match(ac);if(!e)return;const n={};n.for=e[2].trim();const o=e[1].trim().replace(uc,""),r=o.match(lc);r?(n.alias=o.replace(lc,"").trim(),n.iterator1=r[1].trim(),r[2]&&(n.iterator2=r[2].trim())):n.alias=o;return n}(e);n&&T(t,n)}}function Ec(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(e)}function Nc(t){let e=t.name.replace(mc,"");return e||"#"!==t.name[0]&&(e="default"),fc.test(e)?{name:e.slice(1,-1),dynamic:!0}:{name:`"${e}"`,dynamic:!1}}function Pc(t){const e=t.match(hc);if(e){const t={};return e.forEach((e=>{t[e.slice(1)]=!0})),t}}function Dc(t){const e={};for(let n=0,o=t.length;n<o;n++)e[t[n].name]=t[n].value;return e}const Mc=/^xmlns:NS\d+/,Ic=/^NS\d+:/;function Lc(t){return Sc(t.tag,t.attrsList.slice(),t.parent)}var Fc=[Mi,Ii,{preTransformNode:function(t,e){if("input"===t.tag){const n=t.attrsMap;if(!n["v-model"])return;let o;if((n[":type"]||n["v-bind:type"])&&(o=Yr(t,"type")),n.type||o||!n["v-bind"]||(o=`(${n["v-bind"]}).type`),o){const n=Qr(t,"v-if",!0),r=n?`&&(${n})`:"",s=null!=Qr(t,"v-else",!0),i=Qr(t,"v-else-if",!0),c=Lc(t);jc(c),Wr(c,"type","checkbox"),Ac(c,e),c.processed=!0,c.if=`(${o})==='checkbox'`+r,Ec(c,{exp:c.if,block:c});const a=Lc(t);Qr(a,"v-for",!0),Wr(a,"type","radio"),Ac(a,e),Ec(c,{exp:`(${o})==='radio'`+r,block:a});const l=Lc(t);return Qr(l,"v-for",!0),Wr(l,":type",o),Ac(l,e),Ec(c,{exp:n,block:l}),s?c.else=!0:i&&(c.elseif=i),c}}}}];const Rc={expectHTML:!0,modules:Fc,directives:{model:function(t,e,n){const o=e.value,r=e.modifiers,s=t.tag,i=t.attrsMap.type;if(t.component)return ns(t,o,r),!1;if("select"===s)!function(t,e,n){const o=n&&n.number;let r=`var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return ${o?"_n(val)":"val"}});`;r=`${r} ${os(e,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]")}`,Xr(t,"change",r,null,!0)}(t,o,r);else if("input"===s&&"checkbox"===i)!function(t,e,n){const o=n&&n.number,r=Yr(t,"value")||"null",s=Yr(t,"true-value")||"true",i=Yr(t,"false-value")||"false";Jr(t,"checked",`Array.isArray(${e})?_i(${e},${r})>-1`+("true"===s?`:(${e})`:`:_q(${e},${s})`)),Xr(t,"change",`var $$a=${e},$$el=$event.target,$$c=$$el.checked?(${s}):(${i});if(Array.isArray($$a)){var $$v=${o?"_n("+r+")":r},$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(${os(e,"$$a.concat([$$v])")})}else{$$i>-1&&(${os(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")})}}else{${os(e,"$$c")}}`,null,!0)}(t,o,r);else if("input"===s&&"radio"===i)!function(t,e,n){const o=n&&n.number;let r=Yr(t,"value")||"null";r=o?`_n(${r})`:r,Jr(t,"checked",`_q(${e},${r})`),Xr(t,"change",os(e,r),null,!0)}(t,o,r);else if("input"===s||"textarea"===s)!function(t,e,n){const o=t.attrsMap.type,{lazy:r,number:s,trim:i}=n||{},c=!r&&"range"!==o,a=r?"change":"range"===o?"__r":"input";let l="$event.target.value";i&&(l="$event.target.value.trim()");s&&(l=`_n(${l})`);let u=os(e,l);c&&(u=`if($event.target.composing)return;${u}`);Jr(t,"value",`(${e})`),Xr(t,a,u,null,!0),(i||s)&&Xr(t,"blur","$forceUpdate()")}(t,o,r);else if(!R.isReservedTag(s))return ns(t,o,r),!1;return!0},text:function(t,e){e.value&&Jr(t,"textContent",`_s(${e.value})`,e)},html:function(t,e){e.value&&Jr(t,"innerHTML",`_s(${e.value})`,e)}},isPreTag:t=>"pre"===t,isUnaryTag:Ri,mustUseProp:tr,canBeLeftOpenTag:Hi,isReservedTag:mr,getTagNamespace:gr,staticKeys:function(t){return t.reduce(((t,e)=>t.concat(e.staticKeys||[])),[]).join(",")}(Fc)};let Hc,Bc;const Uc=$((function(t){return h("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}));function zc(t,e){t&&(Hc=Uc(e.staticKeys||""),Bc=e.isReservedTag||E,Vc(t),Kc(t,!1))}function Vc(t){if(t.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||m(t.tag)||!Bc(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(Hc)))}(t),1===t.type){if(!Bc(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(let e=0,n=t.children.length;e<n;e++){const n=t.children[e];Vc(n),n.static||(t.static=!1)}if(t.ifConditions)for(let e=1,n=t.ifConditions.length;e<n;e++){const n=t.ifConditions[e].block;Vc(n),n.static||(t.static=!1)}}}function Kc(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(let n=0,o=t.children.length;n<o;n++)Kc(t.children[n],e||!!t.for);if(t.ifConditions)for(let n=1,o=t.ifConditions.length;n<o;n++)Kc(t.ifConditions[n].block,e)}}const Jc=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,qc=/\([^)]*?\);*$/,Wc=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Zc={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Gc={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Xc=t=>`if(${t})return null;`,Yc={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Xc("$event.target !== $event.currentTarget"),ctrl:Xc("!$event.ctrlKey"),shift:Xc("!$event.shiftKey"),alt:Xc("!$event.altKey"),meta:Xc("!$event.metaKey"),left:Xc("'button' in $event && $event.button !== 0"),middle:Xc("'button' in $event && $event.button !== 1"),right:Xc("'button' in $event && $event.button !== 2")};function Qc(t,e){const n=e?"nativeOn:":"on:";let o="",r="";for(const e in t){const n=ta(t[e]);t[e]&&t[e].dynamic?r+=`${e},${n},`:o+=`"${e}":${n},`}return o=`{${o.slice(0,-1)}}`,r?n+`_d(${o},[${r.slice(0,-1)}])`:n+o}function ta(t){if(!t)return"function(){}";if(Array.isArray(t))return`[${t.map((t=>ta(t))).join(",")}]`;const e=Wc.test(t.value),n=Jc.test(t.value),o=Wc.test(t.value.replace(qc,""));if(t.modifiers){let r="",s="";const i=[];for(const e in t.modifiers)if(Yc[e])s+=Yc[e],Zc[e]&&i.push(e);else if("exact"===e){const e=t.modifiers;s+=Xc(["ctrl","shift","alt","meta"].filter((t=>!e[t])).map((t=>`$event.${t}Key`)).join("||"))}else i.push(e);i.length&&(r+=function(t){return`if(!$event.type.indexOf('key')&&${t.map(ea).join("&&")})return null;`}(i)),s&&(r+=s);return`function($event){${r}${e?`return ${t.value}.apply(null, arguments)`:n?`return (${t.value}).apply(null, arguments)`:o?`return ${t.value}`:t.value}}`}return e||n?t.value:`function($event){${o?`return ${t.value}`:t.value}}`}function ea(t){const e=parseInt(t,10);if(e)return`$event.keyCode!==${e}`;const n=Zc[t],o=Gc[t];return`_k($event.keyCode,${JSON.stringify(t)},${JSON.stringify(n)},$event.key,${JSON.stringify(o)})`}var na={on:function(t,e){t.wrapListeners=t=>`_g(${t},${e.value})`},bind:function(t,e){t.wrapData=n=>`_b(${n},'${t.tag}',${e.value},${e.modifiers&&e.modifiers.prop?"true":"false"}${e.modifiers&&e.modifiers.sync?",true":""})`},cloak:j};class oa{constructor(t){this.options=t,this.warn=t.warn||Vr,this.transforms=Kr(t.modules,"transformCode"),this.dataGenFns=Kr(t.modules,"genData"),this.directives=T(T({},na),t.directives);const e=t.isReservedTag||E;this.maybeComponent=t=>!!t.component||!e(t.tag),this.onceId=0,this.staticRenderFns=[],this.pre=!1}}function ra(t,e){const n=new oa(e);return{render:`with(this){return ${t?"script"===t.tag?"null":sa(t,n):'_c("div")'}}`,staticRenderFns:n.staticRenderFns}}function sa(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return ia(t,e);if(t.once&&!t.onceProcessed)return ca(t,e);if(t.for&&!t.forProcessed)return ua(t,e);if(t.if&&!t.ifProcessed)return aa(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){const n=t.slotName||'"default"',o=ha(t,e);let r=`_t(${n}${o?`,function(){return ${o}}`:""}`;const s=t.attrs||t.dynamicAttrs?va((t.attrs||[]).concat(t.dynamicAttrs||[]).map((t=>({name:w(t.name),value:t.value,dynamic:t.dynamic})))):null,i=t.attrsMap["v-bind"];!s&&!i||o||(r+=",null");s&&(r+=`,${s}`);i&&(r+=`${s?"":",null"},${i}`);return r+")"}(t,e);{let n;if(t.component)n=function(t,e,n){const o=e.inlineTemplate?null:ha(e,n,!0);return`_c(${t},${fa(e,n)}${o?`,${o}`:""})`}(t.component,t,e);else{let o;const r=e.maybeComponent(t);let s;(!t.plain||t.pre&&r)&&(o=fa(t,e));const i=e.options.bindings;r&&i&&!1!==i.__isScriptSetup&&(s=function(t,e){const n=w(e),o=x(n),r=r=>t[e]===r?e:t[n]===r?n:t[o]===r?o:void 0,s=r("setup-const")||r("setup-reactive-const");if(s)return s;const i=r("setup-let")||r("setup-ref")||r("setup-maybe-ref");if(i)return i}(i,t.tag)),s||(s=`'${t.tag}'`);const c=t.inlineTemplate?null:ha(t,e,!0);n=`_c(${s}${o?`,${o}`:""}${c?`,${c}`:""})`}for(let o=0;o<e.transforms.length;o++)n=e.transforms[o](t,n);return n}}return ha(t,e)||"void 0"}function ia(t,e){t.staticProcessed=!0;const n=e.pre;return t.pre&&(e.pre=t.pre),e.staticRenderFns.push(`with(this){return ${sa(t,e)}}`),e.pre=n,`_m(${e.staticRenderFns.length-1}${t.staticInFor?",true":""})`}function ca(t,e){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return aa(t,e);if(t.staticInFor){let n="",o=t.parent;for(;o;){if(o.for){n=o.key;break}o=o.parent}return n?`_o(${sa(t,e)},${e.onceId++},${n})`:sa(t,e)}return ia(t,e)}function aa(t,e,n,o){return t.ifProcessed=!0,la(t.ifConditions.slice(),e,n,o)}function la(t,e,n,o){if(!t.length)return o||"_e()";const r=t.shift();return r.exp?`(${r.exp})?${s(r.block)}:${la(t,e,n,o)}`:`${s(r.block)}`;function s(t){return n?n(t,e):t.once?ca(t,e):sa(t,e)}}function ua(t,e,n,o){const r=t.for,s=t.alias,i=t.iterator1?`,${t.iterator1}`:"",c=t.iterator2?`,${t.iterator2}`:"";return t.forProcessed=!0,`${o||"_l"}((${r}),function(${s}${i}${c}){return ${(n||sa)(t,e)}})`}function fa(t,e){let n="{";const o=function(t,e){const n=t.directives;if(!n)return;let o,r,s,i,c="directives:[",a=!1;for(o=0,r=n.length;o<r;o++){s=n[o],i=!0;const r=e.directives[s.name];r&&(i=!!r(t,s,e.warn)),i&&(a=!0,c+=`{name:"${s.name}",rawName:"${s.rawName}"${s.value?`,value:(${s.value}),expression:${JSON.stringify(s.value)}`:""}${s.arg?`,arg:${s.isDynamicArg?s.arg:`"${s.arg}"`}`:""}${s.modifiers?`,modifiers:${JSON.stringify(s.modifiers)}`:""}},`)}if(a)return c.slice(0,-1)+"]"}(t,e);o&&(n+=o+","),t.key&&(n+=`key:${t.key},`),t.ref&&(n+=`ref:${t.ref},`),t.refInFor&&(n+="refInFor:true,"),t.pre&&(n+="pre:true,"),t.component&&(n+=`tag:"${t.tag}",`);for(let o=0;o<e.dataGenFns.length;o++)n+=e.dataGenFns[o](t);if(t.attrs&&(n+=`attrs:${va(t.attrs)},`),t.props&&(n+=`domProps:${va(t.props)},`),t.events&&(n+=`${Qc(t.events,!1)},`),t.nativeEvents&&(n+=`${Qc(t.nativeEvents,!0)},`),t.slotTarget&&!t.slotScope&&(n+=`slot:${t.slotTarget},`),t.scopedSlots&&(n+=`${function(t,e,n){let o=t.for||Object.keys(e).some((t=>{const n=e[t];return n.slotTargetDynamic||n.if||n.for||da(n)})),r=!!t.if;if(!o){let e=t.parent;for(;e;){if(e.slotScope&&"_empty_"!==e.slotScope||e.for){o=!0;break}e.if&&(r=!0),e=e.parent}}const s=Object.keys(e).map((t=>pa(e[t],n))).join(",");return`scopedSlots:_u([${s}]${o?",null,true":""}${!o&&r?`,null,false,${function(t){let e=5381,n=t.length;for(;n;)e=33*e^t.charCodeAt(--n);return e>>>0}(s)}`:""})`}(t,t.scopedSlots,e)},`),t.model&&(n+=`model:{value:${t.model.value},callback:${t.model.callback},expression:${t.model.expression}},`),t.inlineTemplate){const o=function(t,e){const n=t.children[0];if(n&&1===n.type){const t=ra(n,e.options);return`inlineTemplate:{render:function(){${t.render}},staticRenderFns:[${t.staticRenderFns.map((t=>`function(){${t}}`)).join(",")}]}`}}(t,e);o&&(n+=`${o},`)}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n=`_b(${n},"${t.tag}",${va(t.dynamicAttrs)})`),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function da(t){return 1===t.type&&("slot"===t.tag||t.children.some(da))}function pa(t,e){const n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return aa(t,e,pa,"null");if(t.for&&!t.forProcessed)return ua(t,e,pa);const o="_empty_"===t.slotScope?"":String(t.slotScope),r=`function(${o}){return ${"template"===t.tag?t.if&&n?`(${t.if})?${ha(t,e)||"undefined"}:undefined`:ha(t,e)||"undefined":sa(t,e)}}`,s=o?"":",proxy:true";return`{key:${t.slotTarget||'"default"'},fn:${r}${s}}`}function ha(t,e,n,o,r){const s=t.children;if(s.length){const t=s[0];if(1===s.length&&t.for&&"template"!==t.tag&&"slot"!==t.tag){const r=n?e.maybeComponent(t)?",1":",0":"";return`${(o||sa)(t,e)}${r}`}const i=n?function(t,e){let n=0;for(let o=0;o<t.length;o++){const r=t[o];if(1===r.type){if(ma(r)||r.ifConditions&&r.ifConditions.some((t=>ma(t.block)))){n=2;break}(e(r)||r.ifConditions&&r.ifConditions.some((t=>e(t.block))))&&(n=1)}}return n}(s,e.maybeComponent):0,c=r||ga;return`[${s.map((t=>c(t,e))).join(",")}]${i?`,${i}`:""}`}}function ma(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}function ga(t,e){return 1===t.type?sa(t,e):3===t.type&&t.isComment?function(t){return`_e(${JSON.stringify(t.text)})`}(t):function(t){return`_v(${2===t.type?t.expression:ya(JSON.stringify(t.text))})`}(t)}function va(t){let e="",n="";for(let o=0;o<t.length;o++){const r=t[o],s=ya(r.value);r.dynamic?n+=`${r.name},${s},`:e+=`"${r.name}":${s},`}return e=`{${e.slice(0,-1)}}`,n?`_d(${e},[${n.slice(0,-1)}])`:e}function ya(t){return t.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function _a(t,e){try{return new Function(t)}catch(n){return e.push({err:n,code:t}),j}}function $a(t){const e=Object.create(null);return function(n,o,r){(o=T({},o)).warn,delete o.warn;const s=o.delimiters?String(o.delimiters)+n:n;if(e[s])return e[s];const i=t(n,o),c={},a=[];return c.render=_a(i.render,a),c.staticRenderFns=i.staticRenderFns.map((t=>_a(t,a))),e[s]=c}}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)");const ba=(wa=function(t,e){const n=Tc(t.trim(),e);!1!==e.optimize&&zc(n,e);const o=ra(n,e);return{ast:n,render:o.render,staticRenderFns:o.staticRenderFns}},function(t){function e(e,n){const o=Object.create(t),r=[],s=[];if(n){n.modules&&(o.modules=(t.modules||[]).concat(n.modules)),n.directives&&(o.directives=T(Object.create(t.directives||null),n.directives));for(const t in n)"modules"!==t&&"directives"!==t&&(o[t]=n[t])}o.warn=(t,e,n)=>{(n?s:r).push(t)};const i=wa(e.trim(),o);return i.errors=r,i.tips=s,i}return{compile:e,compileToFunctions:$a(e)}});var wa;const{compile:xa,compileToFunctions:Ca}=ba(Rc);let ka;function Oa(t){return ka=ka||document.createElement("div"),ka.innerHTML=t?'<a href="\n"/>':'<div a="\n"/>',ka.innerHTML.indexOf("&#10;")>0}const Sa=!!K&&Oa(!1),Ta=!!K&&Oa(!0),Aa=$((t=>{const e=_r(t);return e&&e.innerHTML})),ja=Vo.prototype.$mount;Vo.prototype.$mount=function(t,e){if((t=t&&_r(t))===document.body||t===document.documentElement)return this;const n=this.$options;if(!n.render){let e=n.template;if(e)if("string"==typeof e)"#"===e.charAt(0)&&(e=Aa(e));else{if(!e.nodeType)return this;e=e.innerHTML}else t&&(e=function(t){if(t.outerHTML)return t.outerHTML;{const e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}}(t));if(e){const{render:t,staticRenderFns:o}=Ca(e,{outputSourceRange:!1,shouldDecodeNewlines:Sa,shouldDecodeNewlinesForHref:Ta,delimiters:n.delimiters,comments:n.comments},this);n.render=t,n.staticRenderFns=o}}return ja.call(this,t,e)},Vo.compile=Ca;export{wn as EffectScope,ne as computed,Zt as customRef,Vo as default,Un as defineAsyncComponent,ro as defineComponent,jt as del,xn as effectScope,ct as getCurrentInstance,Cn as getCurrentScope,An as h,Tn as inject,Ft as isProxy,Mt as isReactive,Lt as isReadonly,Bt as isRef,It as isShallow,Ht as markRaw,Ue as mergeDefaults,Rn as nextTick,Gn as onActivated,Vn as onBeforeMount,Wn as onBeforeUnmount,Jn as onBeforeUpdate,Xn as onDeactivated,no as onErrorCaptured,Kn as onMounted,Qn as onRenderTracked,to as onRenderTriggered,kn as onScopeDispose,Yn as onServerPrefetch,Zn as onUnmounted,qn as onUpdated,On as provide,qt as proxyRefs,Nt as reactive,Yt as readonly,Ut as ref,At as set,Pt as shallowReactive,ee as shallowReadonly,zt as shallowRef,Rt as toRaw,Xt as toRef,Gt as toRefs,Kt as triggerRef,Jt as unref,Re as useAttrs,Hn as useCssModule,Bn as useCssVars,He as useListeners,Fe as useSlots,oo as version,_n as watch,mn as watchEffect,gn as watchPostEffect,vn as watchSyncEffect};/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
var emptyObject = Object.freeze({});
var isArray = Array.isArray;
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef(v) {
    return v === undefined || v === null;
}
function isDef(v) {
    return v !== undefined && v !== null;
}
function isTrue(v) {
    return v === true;
}
function isFalse(v) {
    return v === false;
}
/**
 * Check if value is primitive.
 */
function isPrimitive(value) {
    return (typeof value === 'string' ||
        typeof value === 'number' ||
        // $flow-disable-line
        typeof value === 'symbol' ||
        typeof value === 'boolean');
}
function isFunction(value) {
    return typeof value === 'function';
}
/**
 * Quick object check - this is primarily used to tell
 * objects from primitive values when we know the value
 * is a JSON-compliant type.
 */
function isObject(obj) {
    return obj !== null && typeof obj === 'object';
}
/**
 * Get the raw type string of a value, e.g., [object Object].
 */
var _toString = Object.prototype.toString;
function toRawType(value) {
    return _toString.call(value).slice(8, -1);
}
/**
 * Strict object type check. Only returns true
 * for plain JavaScript objects.
 */
function isPlainObject(obj) {
    return _toString.call(obj) === '[object Object]';
}
function isRegExp(v) {
    return _toString.call(v) === '[object RegExp]';
}
/**
 * Check if val is a valid array index.
 */
function isValidArrayIndex(val) {
    var n = parseFloat(String(val));
    return n >= 0 && Math.floor(n) === n && isFinite(val);
}
function isPromise(val) {
    return (isDef(val) &&
        typeof val.then === 'function' &&
        typeof val.catch === 'function');
}
/**
 * Convert a value to a string that is actually rendered.
 */
function toString(val) {
    return val == null
        ? ''
        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
            ? JSON.stringify(val, null, 2)
            : String(val);
}
/**
 * Convert an input value to a number for persistence.
 * If the conversion fails, return original string.
 */
function toNumber(val) {
    var n = parseFloat(val);
    return isNaN(n) ? val : n;
}
/**
 * Make a map and return a function for checking if a key
 * is in that map.
 */
function makeMap(str, expectsLowerCase) {
    var map = Object.create(null);
    var list = str.split(',');
    for (var i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };
}
/**
 * Check if a tag is a built-in tag.
 */
var isBuiltInTag = makeMap('slot,component', true);
/**
 * Check if an attribute is a reserved attribute.
 */
var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
/**
 * Remove an item from an array.
 */
function remove$2(arr, item) {
    var len = arr.length;
    if (len) {
        // fast path for the only / last item
        if (item === arr[len - 1]) {
            arr.length = len - 1;
            return;
        }
        var index = arr.indexOf(item);
        if (index > -1) {
            return arr.splice(index, 1);
        }
    }
}
/**
 * Check whether an object has the property.
 */
var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
    return hasOwnProperty.call(obj, key);
}
/**
 * Create a cached version of a pure function.
 */
function cached(fn) {
    var cache = Object.create(null);
    return function cachedFn(str) {
        var hit = cache[str];
        return hit || (cache[str] = fn(str));
    };
}
/**
 * Camelize a hyphen-delimited string.
 */
var camelizeRE = /-(\w)/g;
var camelize = cached(function (str) {
    return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });
});
/**
 * Capitalize a string.
 */
var capitalize = cached(function (str) {
    return str.charAt(0).toUpperCase() + str.slice(1);
});
/**
 * Hyphenate a camelCase string.
 */
var hyphenateRE = /\B([A-Z])/g;
var hyphenate = cached(function (str) {
    return str.replace(hyphenateRE, '-$1').toLowerCase();
});
/**
 * Simple bind polyfill for environments that do not support it,
 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
 * since native bind is now performant enough in most browsers.
 * But removing it would mean breaking code that was able to run in
 * PhantomJS 1.x, so this must be kept for backward compatibility.
 */
/* istanbul ignore next */
function polyfillBind(fn, ctx) {
    function boundFn(a) {
        var l = arguments.length;
        return l
            ? l > 1
                ? fn.apply(ctx, arguments)
                : fn.call(ctx, a)
            : fn.call(ctx);
    }
    boundFn._length = fn.length;
    return boundFn;
}
function nativeBind(fn, ctx) {
    return fn.bind(ctx);
}
// @ts-expect-error bind cannot be `undefined`
var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;
/**
 * Convert an Array-like object to a real Array.
 */
function toArray(list, start) {
    start = start || 0;
    var i = list.length - start;
    var ret = new Array(i);
    while (i--) {
        ret[i] = list[i + start];
    }
    return ret;
}
/**
 * Mix properties into target object.
 */
function extend(to, _from) {
    for (var key in _from) {
        to[key] = _from[key];
    }
    return to;
}
/**
 * Merge an Array of Objects into a single Object.
 */
function toObject(arr) {
    var res = {};
    for (var i = 0; i < arr.length; i++) {
        if (arr[i]) {
            extend(res, arr[i]);
        }
    }
    return res;
}
/* eslint-disable no-unused-vars */
/**
 * Perform no operation.
 * Stubbing args to make Flow happy without leaving useless transpiled code
 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
 */
function noop(a, b, c) { }
/**
 * Always return false.
 */
var no = function (a, b, c) { return false; };
/* eslint-enable no-unused-vars */
/**
 * Return the same value.
 */
var identity = function (_) { return _; };
/**
 * Generate a string containing static keys from compiler modules.
 */
function genStaticKeys$1(modules) {
    return modules
        .reduce(function (keys, m) {
        return keys.concat(m.staticKeys || []);
    }, [])
        .join(',');
}
/**
 * Check if two values are loosely equal - that is,
 * if they are plain objects, do they have the same shape?
 */
function looseEqual(a, b) {
    if (a === b)
        return true;
    var isObjectA = isObject(a);
    var isObjectB = isObject(b);
    if (isObjectA && isObjectB) {
        try {
            var isArrayA = Array.isArray(a);
            var isArrayB = Array.isArray(b);
            if (isArrayA && isArrayB) {
                return (a.length === b.length &&
                    a.every(function (e, i) {
                        return looseEqual(e, b[i]);
                    }));
            }
            else if (a instanceof Date && b instanceof Date) {
                return a.getTime() === b.getTime();
            }
            else if (!isArrayA && !isArrayB) {
                var keysA = Object.keys(a);
                var keysB = Object.keys(b);
                return (keysA.length === keysB.length &&
                    keysA.every(function (key) {
                        return looseEqual(a[key], b[key]);
                    }));
            }
            else {
                /* istanbul ignore next */
                return false;
            }
        }
        catch (e) {
            /* istanbul ignore next */
            return false;
        }
    }
    else if (!isObjectA && !isObjectB) {
        return String(a) === String(b);
    }
    else {
        return false;
    }
}
/**
 * Return the first index at which a loosely equal value can be
 * found in the array (if value is a plain object, the array must
 * contain an object of the same shape), or -1 if it is not present.
 */
function looseIndexOf(arr, val) {
    for (var i = 0; i < arr.length; i++) {
        if (looseEqual(arr[i], val))
            return i;
    }
    return -1;
}
/**
 * Ensure a function is called only once.
 */
function once(fn) {
    var called = false;
    return function () {
        if (!called) {
            called = true;
            fn.apply(this, arguments);
        }
    };
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
function hasChanged(x, y) {
    if (x === y) {
        return x === 0 && 1 / x !== 1 / y;
    }
    else {
        return x === x || y === y;
    }
}

var SSR_ATTR = 'data-server-rendered';
var ASSET_TYPES = ['component', 'directive', 'filter'];
var LIFECYCLE_HOOKS = [
    'beforeCreate',
    'created',
    'beforeMount',
    'mounted',
    'beforeUpdate',
    'updated',
    'beforeDestroy',
    'destroyed',
    'activated',
    'deactivated',
    'errorCaptured',
    'serverPrefetch',
    'renderTracked',
    'renderTriggered'
];

var config = {
    /**
     * Option merge strategies (used in core/util/options)
     */
    // $flow-disable-line
    optionMergeStrategies: Object.create(null),
    /**
     * Whether to suppress warnings.
     */
    silent: false,
    /**
     * Show production mode tip message on boot?
     */
    productionTip: process.env.NODE_ENV !== 'production',
    /**
     * Whether to enable devtools
     */
    devtools: process.env.NODE_ENV !== 'production',
    /**
     * Whether to record perf
     */
    performance: false,
    /**
     * Error handler for watcher errors
     */
    errorHandler: null,
    /**
     * Warn handler for watcher warns
     */
    warnHandler: null,
    /**
     * Ignore certain custom elements
     */
    ignoredElements: [],
    /**
     * Custom user key aliases for v-on
     */
    // $flow-disable-line
    keyCodes: Object.create(null),
    /**
     * Check if a tag is reserved so that it cannot be registered as a
     * component. This is platform-dependent and may be overwritten.
     */
    isReservedTag: no,
    /**
     * Check if an attribute is reserved so that it cannot be used as a component
     * prop. This is platform-dependent and may be overwritten.
     */
    isReservedAttr: no,
    /**
     * Check if a tag is an unknown element.
     * Platform-dependent.
     */
    isUnknownElement: no,
    /**
     * Get the namespace of an element
     */
    getTagNamespace: noop,
    /**
     * Parse the real tag name for the specific platform.
     */
    parsePlatformTagName: identity,
    /**
     * Check if an attribute must be bound using property, e.g. value
     * Platform-dependent.
     */
    mustUseProp: no,
    /**
     * Perform updates asynchronously. Intended to be used by Vue Test Utils
     * This will significantly reduce performance if set to false.
     */
    async: true,
    /**
     * Exposed for legacy reasons
     */
    _lifecycleHooks: LIFECYCLE_HOOKS
};

/**
 * unicode letters used for parsing html tags, component names and property paths.
 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
 */
var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
/**
 * Check if a string starts with $ or _
 */
function isReserved(str) {
    var c = (str + '').charCodeAt(0);
    return c === 0x24 || c === 0x5f;
}
/**
 * Define a property.
 */
function def(obj, key, val, enumerable) {
    Object.defineProperty(obj, key, {
        value: val,
        enumerable: !!enumerable,
        writable: true,
        configurable: true
    });
}
/**
 * Parse simple path.
 */
var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]"));
function parsePath(path) {
    if (bailRE.test(path)) {
        return;
    }
    var segments = path.split('.');
    return function (obj) {
        for (var i = 0; i < segments.length; i++) {
            if (!obj)
                return;
            obj = obj[segments[i]];
        }
        return obj;
    };
}

// can we use __proto__?
var hasProto = '__proto__' in {};
// Browser environment sniffing
var inBrowser = typeof window !== 'undefined';
var UA = inBrowser && window.navigator.userAgent.toLowerCase();
var isIE = UA && /msie|trident/.test(UA);
var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
var isEdge = UA && UA.indexOf('edge/') > 0;
UA && UA.indexOf('android') > 0;
var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
UA && /chrome\/\d+/.test(UA) && !isEdge;
UA && /phantomjs/.test(UA);
var isFF = UA && UA.match(/firefox\/(\d+)/);
// Firefox has a "watch" function on Object.prototype...
// @ts-expect-error firebox support
var nativeWatch = {}.watch;
var supportsPassive = false;
if (inBrowser) {
    try {
        var opts = {};
        Object.defineProperty(opts, 'passive', {
            get: function () {
                /* istanbul ignore next */
                supportsPassive = true;
            }
        }); // https://github.com/facebook/flow/issues/285
        window.addEventListener('test-passive', null, opts);
    }
    catch (e) { }
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
var _isServer;
var isServerRendering = function () {
    if (_isServer === undefined) {
        /* istanbul ignore if */
        if (!inBrowser && typeof global !== 'undefined') {
            // detect presence of vue-server-renderer and avoid
            // Webpack shimming the process
            _isServer =
                global['process'] && global['process'].env.VUE_ENV === 'server';
        }
        else {
            _isServer = false;
        }
    }
    return _isServer;
};
// detect devtools
var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
/* istanbul ignore next */
function isNative(Ctor) {
    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
var hasSymbol = typeof Symbol !== 'undefined' &&
    isNative(Symbol) &&
    typeof Reflect !== 'undefined' &&
    isNative(Reflect.ownKeys);
var _Set; // $flow-disable-line
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
    // use native Set when available.
    _Set = Set;
}
else {
    // a non-standard Set polyfill that only works with primitive keys.
    _Set = /** @class */ (function () {
        function Set() {
            this.set = Object.create(null);
        }
        Set.prototype.has = function (key) {
            return this.set[key] === true;
        };
        Set.prototype.add = function (key) {
            this.set[key] = true;
        };
        Set.prototype.clear = function () {
            this.set = Object.create(null);
        };
        return Set;
    }());
}

var currentInstance = null;
/**
 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
 * relies on it). Do not use this internally, just use `currentInstance`.
 *
 * @internal this function needs manual type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function getCurrentInstance() {
    return currentInstance && { proxy: currentInstance };
}
/**
 * @internal
 */
function setCurrentInstance(vm) {
    if (vm === void 0) { vm = null; }
    if (!vm)
        currentInstance && currentInstance._scope.off();
    currentInstance = vm;
    vm && vm._scope.on();
}

/**
 * @internal
 */
var VNode = /** @class */ (function () {
    function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
        this.tag = tag;
        this.data = data;
        this.children = children;
        this.text = text;
        this.elm = elm;
        this.ns = undefined;
        this.context = context;
        this.fnContext = undefined;
        this.fnOptions = undefined;
        this.fnScopeId = undefined;
        this.key = data && data.key;
        this.componentOptions = componentOptions;
        this.componentInstance = undefined;
        this.parent = undefined;
        this.raw = false;
        this.isStatic = false;
        this.isRootInsert = true;
        this.isComment = false;
        this.isCloned = false;
        this.isOnce = false;
        this.asyncFactory = asyncFactory;
        this.asyncMeta = undefined;
        this.isAsyncPlaceholder = false;
    }
    Object.defineProperty(VNode.prototype, "child", {
        // DEPRECATED: alias for componentInstance for backwards compat.
        /* istanbul ignore next */
        get: function () {
            return this.componentInstance;
        },
        enumerable: false,
        configurable: true
    });
    return VNode;
}());
var createEmptyVNode = function (text) {
    if (text === void 0) { text = ''; }
    var node = new VNode();
    node.text = text;
    node.isComment = true;
    return node;
};
function createTextVNode(val) {
    return new VNode(undefined, undefined, undefined, String(val));
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode(vnode) {
    var cloned = new VNode(vnode.tag, vnode.data, 
    // #7975
    // clone children array to avoid mutating original in case of cloning
    // a child.
    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
    cloned.ns = vnode.ns;
    cloned.isStatic = vnode.isStatic;
    cloned.key = vnode.key;
    cloned.isComment = vnode.isComment;
    cloned.fnContext = vnode.fnContext;
    cloned.fnOptions = vnode.fnOptions;
    cloned.fnScopeId = vnode.fnScopeId;
    cloned.asyncMeta = vnode.asyncMeta;
    cloned.isCloned = true;
    return cloned;
}

/* not type checking this file because flow doesn't play well with Proxy */
var initProxy;
if (process.env.NODE_ENV !== 'production') {
    var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
        'require' // for Webpack/Browserify
    );
    var warnNonPresent_1 = function (target, key) {
        warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") +
            'referenced during render. Make sure that this property is reactive, ' +
            'either in the data option, or for class-based components, by ' +
            'initializing the property. ' +
            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
    };
    var warnReservedPrefix_1 = function (target, key) {
        warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") +
            'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
            'prevent conflicts with Vue internals. ' +
            'See: https://v2.vuejs.org/v2/api/#data', target);
    };
    var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
    if (hasProxy_1) {
        var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
        config.keyCodes = new Proxy(config.keyCodes, {
            set: function (target, key, value) {
                if (isBuiltInModifier_1(key)) {
                    warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key));
                    return false;
                }
                else {
                    target[key] = value;
                    return true;
                }
            }
        });
    }
    var hasHandler_1 = {
        has: function (target, key) {
            var has = key in target;
            var isAllowed = allowedGlobals_1(key) ||
                (typeof key === 'string' &&
                    key.charAt(0) === '_' &&
                    !(key in target.$data));
            if (!has && !isAllowed) {
                if (key in target.$data)
                    warnReservedPrefix_1(target, key);
                else
                    warnNonPresent_1(target, key);
            }
            return has || !isAllowed;
        }
    };
    var getHandler_1 = {
        get: function (target, key) {
            if (typeof key === 'string' && !(key in target)) {
                if (key in target.$data)
                    warnReservedPrefix_1(target, key);
                else
                    warnNonPresent_1(target, key);
            }
            return target[key];
        }
    };
    initProxy = function initProxy(vm) {
        if (hasProxy_1) {
            // determine which proxy handler to use
            var options = vm.$options;
            var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;
            vm._renderProxy = new Proxy(vm, handlers);
        }
        else {
            vm._renderProxy = vm;
        }
    };
}

/******************************************************************************
Copyright (c) Microsoft Corporation.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */

var __assign = function() {
    __assign = Object.assign || function __assign(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};

var uid$2 = 0;
var pendingCleanupDeps = [];
var cleanupDeps = function () {
    for (var i = 0; i < pendingCleanupDeps.length; i++) {
        var dep = pendingCleanupDeps[i];
        dep.subs = dep.subs.filter(function (s) { return s; });
        dep._pending = false;
    }
    pendingCleanupDeps.length = 0;
};
/**
 * A dep is an observable that can have multiple
 * directives subscribing to it.
 * @internal
 */
var Dep = /** @class */ (function () {
    function Dep() {
        // pending subs cleanup
        this._pending = false;
        this.id = uid$2++;
        this.subs = [];
    }
    Dep.prototype.addSub = function (sub) {
        this.subs.push(sub);
    };
    Dep.prototype.removeSub = function (sub) {
        // #12696 deps with massive amount of subscribers are extremely slow to
        // clean up in Chromium
        // to workaround this, we unset the sub for now, and clear them on
        // next scheduler flush.
        this.subs[this.subs.indexOf(sub)] = null;
        if (!this._pending) {
            this._pending = true;
            pendingCleanupDeps.push(this);
        }
    };
    Dep.prototype.depend = function (info) {
        if (Dep.target) {
            Dep.target.addDep(this);
            if (process.env.NODE_ENV !== 'production' && info && Dep.target.onTrack) {
                Dep.target.onTrack(__assign({ effect: Dep.target }, info));
            }
        }
    };
    Dep.prototype.notify = function (info) {
        // stabilize the subscriber list first
        var subs = this.subs.filter(function (s) { return s; });
        if (process.env.NODE_ENV !== 'production' && !config.async) {
            // subs aren't sorted in scheduler if not running async
            // we need to sort them now to make sure they fire in correct
            // order
            subs.sort(function (a, b) { return a.id - b.id; });
        }
        for (var i = 0, l = subs.length; i < l; i++) {
            var sub = subs[i];
            if (process.env.NODE_ENV !== 'production' && info) {
                sub.onTrigger &&
                    sub.onTrigger(__assign({ effect: subs[i] }, info));
            }
            sub.update();
        }
    };
    return Dep;
}());
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null;
var targetStack = [];
function pushTarget(target) {
    targetStack.push(target);
    Dep.target = target;
}
function popTarget() {
    targetStack.pop();
    Dep.target = targetStack[targetStack.length - 1];
}

/*
 * not type checking this file because flow doesn't play well with
 * dynamically accessing methods on Array prototype
 */
var arrayProto = Array.prototype;
var arrayMethods = Object.create(arrayProto);
var methodsToPatch = [
    'push',
    'pop',
    'shift',
    'unshift',
    'splice',
    'sort',
    'reverse'
];
/**
 * Intercept mutating methods and emit events
 */
methodsToPatch.forEach(function (method) {
    // cache original method
    var original = arrayProto[method];
    def(arrayMethods, method, function mutator() {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
        }
        var result = original.apply(this, args);
        var ob = this.__ob__;
        var inserted;
        switch (method) {
            case 'push':
            case 'unshift':
                inserted = args;
                break;
            case 'splice':
                inserted = args.slice(2);
                break;
        }
        if (inserted)
            ob.observeArray(inserted);
        // notify change
        if (process.env.NODE_ENV !== 'production') {
            ob.dep.notify({
                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
                target: this,
                key: method
            });
        }
        else {
            ob.dep.notify();
        }
        return result;
    });
});

var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
var NO_INIITIAL_VALUE = {};
/**
 * In some cases we may want to disable observation inside a component's
 * update computation.
 */
var shouldObserve = true;
function toggleObserving(value) {
    shouldObserve = value;
}
// ssr mock dep
var mockDep = {
    notify: noop,
    depend: noop,
    addSub: noop,
    removeSub: noop
};
/**
 * Observer class that is attached to each observed
 * object. Once attached, the observer converts the target
 * object's property keys into getter/setters that
 * collect dependencies and dispatch updates.
 */
var Observer = /** @class */ (function () {
    function Observer(value, shallow, mock) {
        if (shallow === void 0) { shallow = false; }
        if (mock === void 0) { mock = false; }
        this.value = value;
        this.shallow = shallow;
        this.mock = mock;
        // this.value = value
        this.dep = mock ? mockDep : new Dep();
        this.vmCount = 0;
        def(value, '__ob__', this);
        if (isArray(value)) {
            if (!mock) {
                if (hasProto) {
                    value.__proto__ = arrayMethods;
                    /* eslint-enable no-proto */
                }
                else {
                    for (var i = 0, l = arrayKeys.length; i < l; i++) {
                        var key = arrayKeys[i];
                        def(value, key, arrayMethods[key]);
                    }
                }
            }
            if (!shallow) {
                this.observeArray(value);
            }
        }
        else {
            /**
             * Walk through all properties and convert them into
             * getter/setters. This method should only be called when
             * value type is Object.
             */
            var keys = Object.keys(value);
            for (var i = 0; i < keys.length; i++) {
                var key = keys[i];
                defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
            }
        }
    }
    /**
     * Observe a list of Array items.
     */
    Observer.prototype.observeArray = function (value) {
        for (var i = 0, l = value.length; i < l; i++) {
            observe(value[i], false, this.mock);
        }
    };
    return Observer;
}());
// helpers
/**
 * Attempt to create an observer instance for a value,
 * returns the new observer if successfully observed,
 * or the existing observer if the value already has one.
 */
function observe(value, shallow, ssrMockReactivity) {
    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
        return value.__ob__;
    }
    if (shouldObserve &&
        (ssrMockReactivity || !isServerRendering()) &&
        (isArray(value) || isPlainObject(value)) &&
        Object.isExtensible(value) &&
        !value.__v_skip /* ReactiveFlags.SKIP */ &&
        !isRef(value) &&
        !(value instanceof VNode)) {
        return new Observer(value, shallow, ssrMockReactivity);
    }
}
/**
 * Define a reactive property on an Object.
 */
function defineReactive(obj, key, val, customSetter, shallow, mock) {
    var dep = new Dep();
    var property = Object.getOwnPropertyDescriptor(obj, key);
    if (property && property.configurable === false) {
        return;
    }
    // cater for pre-defined getter/setters
    var getter = property && property.get;
    var setter = property && property.set;
    if ((!getter || setter) &&
        (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
        val = obj[key];
    }
    var childOb = !shallow && observe(val, false, mock);
    Object.defineProperty(obj, key, {
        enumerable: true,
        configurable: true,
        get: function reactiveGetter() {
            var value = getter ? getter.call(obj) : val;
            if (Dep.target) {
                if (process.env.NODE_ENV !== 'production') {
                    dep.depend({
                        target: obj,
                        type: "get" /* TrackOpTypes.GET */,
                        key: key
                    });
                }
                else {
                    dep.depend();
                }
                if (childOb) {
                    childOb.dep.depend();
                    if (isArray(value)) {
                        dependArray(value);
                    }
                }
            }
            return isRef(value) && !shallow ? value.value : value;
        },
        set: function reactiveSetter(newVal) {
            var value = getter ? getter.call(obj) : val;
            if (!hasChanged(value, newVal)) {
                return;
            }
            if (process.env.NODE_ENV !== 'production' && customSetter) {
                customSetter();
            }
            if (setter) {
                setter.call(obj, newVal);
            }
            else if (getter) {
                // #7981: for accessor properties without setter
                return;
            }
            else if (!shallow && isRef(value) && !isRef(newVal)) {
                value.value = newVal;
                return;
            }
            else {
                val = newVal;
            }
            childOb = !shallow && observe(newVal, false, mock);
            if (process.env.NODE_ENV !== 'production') {
                dep.notify({
                    type: "set" /* TriggerOpTypes.SET */,
                    target: obj,
                    key: key,
                    newValue: newVal,
                    oldValue: value
                });
            }
            else {
                dep.notify();
            }
        }
    });
    return dep;
}
function set(target, key, val) {
    if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {
        warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target));
    }
    if (isReadonly(target)) {
        process.env.NODE_ENV !== 'production' && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
        return;
    }
    var ob = target.__ob__;
    if (isArray(target) && isValidArrayIndex(key)) {
        target.length = Math.max(target.length, key);
        target.splice(key, 1, val);
        // when mocking for SSR, array methods are not hijacked
        if (ob && !ob.shallow && ob.mock) {
            observe(val, false, true);
        }
        return val;
    }
    if (key in target && !(key in Object.prototype)) {
        target[key] = val;
        return val;
    }
    if (target._isVue || (ob && ob.vmCount)) {
        process.env.NODE_ENV !== 'production' &&
            warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +
                'at runtime - declare it upfront in the data option.');
        return val;
    }
    if (!ob) {
        target[key] = val;
        return val;
    }
    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
    if (process.env.NODE_ENV !== 'production') {
        ob.dep.notify({
            type: "add" /* TriggerOpTypes.ADD */,
            target: target,
            key: key,
            newValue: val,
            oldValue: undefined
        });
    }
    else {
        ob.dep.notify();
    }
    return val;
}
function del(target, key) {
    if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {
        warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target));
    }
    if (isArray(target) && isValidArrayIndex(key)) {
        target.splice(key, 1);
        return;
    }
    var ob = target.__ob__;
    if (target._isVue || (ob && ob.vmCount)) {
        process.env.NODE_ENV !== 'production' &&
            warn$2('Avoid deleting properties on a Vue instance or its root $data ' +
                '- just set it to null.');
        return;
    }
    if (isReadonly(target)) {
        process.env.NODE_ENV !== 'production' &&
            warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly."));
        return;
    }
    if (!hasOwn(target, key)) {
        return;
    }
    delete target[key];
    if (!ob) {
        return;
    }
    if (process.env.NODE_ENV !== 'production') {
        ob.dep.notify({
            type: "delete" /* TriggerOpTypes.DELETE */,
            target: target,
            key: key
        });
    }
    else {
        ob.dep.notify();
    }
}
/**
 * Collect dependencies on array elements when the array is touched, since
 * we cannot intercept array element access like property getters.
 */
function dependArray(value) {
    for (var e = void 0, i = 0, l = value.length; i < l; i++) {
        e = value[i];
        if (e && e.__ob__) {
            e.__ob__.dep.depend();
        }
        if (isArray(e)) {
            dependArray(e);
        }
    }
}

function reactive(target) {
    makeReactive(target, false);
    return target;
}
/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
function shallowReactive(target) {
    makeReactive(target, true);
    def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    return target;
}
function makeReactive(target, shallow) {
    // if trying to observe a readonly proxy, return the readonly version.
    if (!isReadonly(target)) {
        if (process.env.NODE_ENV !== 'production') {
            if (isArray(target)) {
                warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation."));
            }
            var existingOb = target && target.__ob__;
            if (existingOb && existingOb.shallow !== shallow) {
                warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
            }
        }
        var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
        if (process.env.NODE_ENV !== 'production' && !ob) {
            if (target == null || isPrimitive(target)) {
                warn$2("value cannot be made reactive: ".concat(String(target)));
            }
            if (isCollectionType(target)) {
                warn$2("Vue 2 does not support reactive collection types such as Map or Set.");
            }
        }
    }
}
function isReactive(value) {
    if (isReadonly(value)) {
        return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
    }
    return !!(value && value.__ob__);
}
function isShallow(value) {
    return !!(value && value.__v_isShallow);
}
function isReadonly(value) {
    return !!(value && value.__v_isReadonly);
}
function isProxy(value) {
    return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
    var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
    return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
    // non-extensible objects won't be observed anyway
    if (Object.isExtensible(value)) {
        def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
    }
    return value;
}
/**
 * @internal
 */
function isCollectionType(value) {
    var type = toRawType(value);
    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
}

/**
 * @internal
 */
var RefFlag = "__v_isRef";
function isRef(r) {
    return !!(r && r.__v_isRef === true);
}
function ref$1(value) {
    return createRef(value, false);
}
function shallowRef(value) {
    return createRef(value, true);
}
function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    var ref = {};
    def(ref, RefFlag, true);
    def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
    return ref;
}
function triggerRef(ref) {
    if (process.env.NODE_ENV !== 'production' && !ref.dep) {
        warn$2("received object is not a triggerable ref.");
    }
    if (process.env.NODE_ENV !== 'production') {
        ref.dep &&
            ref.dep.notify({
                type: "set" /* TriggerOpTypes.SET */,
                target: ref,
                key: 'value'
            });
    }
    else {
        ref.dep && ref.dep.notify();
    }
}
function unref(ref) {
    return isRef(ref) ? ref.value : ref;
}
function proxyRefs(objectWithRefs) {
    if (isReactive(objectWithRefs)) {
        return objectWithRefs;
    }
    var proxy = {};
    var keys = Object.keys(objectWithRefs);
    for (var i = 0; i < keys.length; i++) {
        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
    }
    return proxy;
}
function proxyWithRefUnwrap(target, source, key) {
    Object.defineProperty(target, key, {
        enumerable: true,
        configurable: true,
        get: function () {
            var val = source[key];
            if (isRef(val)) {
                return val.value;
            }
            else {
                var ob = val && val.__ob__;
                if (ob)
                    ob.dep.depend();
                return val;
            }
        },
        set: function (value) {
            var oldValue = source[key];
            if (isRef(oldValue) && !isRef(value)) {
                oldValue.value = value;
            }
            else {
                source[key] = value;
            }
        }
    });
}
function customRef(factory) {
    var dep = new Dep();
    var _a = factory(function () {
        if (process.env.NODE_ENV !== 'production') {
            dep.depend({
                target: ref,
                type: "get" /* TrackOpTypes.GET */,
                key: 'value'
            });
        }
        else {
            dep.depend();
        }
    }, function () {
        if (process.env.NODE_ENV !== 'production') {
            dep.notify({
                target: ref,
                type: "set" /* TriggerOpTypes.SET */,
                key: 'value'
            });
        }
        else {
            dep.notify();
        }
    }), get = _a.get, set = _a.set;
    var ref = {
        get value() {
            return get();
        },
        set value(newVal) {
            set(newVal);
        }
    };
    def(ref, RefFlag, true);
    return ref;
}
function toRefs(object) {
    if (process.env.NODE_ENV !== 'production' && !isReactive(object)) {
        warn$2("toRefs() expects a reactive object but received a plain one.");
    }
    var ret = isArray(object) ? new Array(object.length) : {};
    for (var key in object) {
        ret[key] = toRef(object, key);
    }
    return ret;
}
function toRef(object, key, defaultValue) {
    var val = object[key];
    if (isRef(val)) {
        return val;
    }
    var ref = {
        get value() {
            var val = object[key];
            return val === undefined ? defaultValue : val;
        },
        set value(newVal) {
            object[key] = newVal;
        }
    };
    def(ref, RefFlag, true);
    return ref;
}

var rawToReadonlyFlag = "__v_rawToReadonly";
var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly";
function readonly(target) {
    return createReadonly(target, false);
}
function createReadonly(target, shallow) {
    if (!isPlainObject(target)) {
        if (process.env.NODE_ENV !== 'production') {
            if (isArray(target)) {
                warn$2("Vue 2 does not support readonly arrays.");
            }
            else if (isCollectionType(target)) {
                warn$2("Vue 2 does not support readonly collection types such as Map or Set.");
            }
            else {
                warn$2("value cannot be made readonly: ".concat(typeof target));
            }
        }
        return target;
    }
    if (process.env.NODE_ENV !== 'production' && !Object.isExtensible(target)) {
        warn$2("Vue 2 does not support creating readonly proxy for non-extensible object.");
    }
    // already a readonly object
    if (isReadonly(target)) {
        return target;
    }
    // already has a readonly proxy
    var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
    var existingProxy = target[existingFlag];
    if (existingProxy) {
        return existingProxy;
    }
    var proxy = Object.create(Object.getPrototypeOf(target));
    def(target, existingFlag, proxy);
    def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
    def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
    if (isRef(target)) {
        def(proxy, RefFlag, true);
    }
    if (shallow || isShallow(target)) {
        def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    }
    var keys = Object.keys(target);
    for (var i = 0; i < keys.length; i++) {
        defineReadonlyProperty(proxy, target, keys[i], shallow);
    }
    return proxy;
}
function defineReadonlyProperty(proxy, target, key, shallow) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get: function () {
            var val = target[key];
            return shallow || !isPlainObject(val) ? val : readonly(val);
        },
        set: function () {
            process.env.NODE_ENV !== 'production' &&
                warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
        }
    });
}
/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
function shallowReadonly(target) {
    return createReadonly(target, true);
}

function computed(getterOrOptions, debugOptions) {
    var getter;
    var setter;
    var onlyGetter = isFunction(getterOrOptions);
    if (onlyGetter) {
        getter = getterOrOptions;
        setter = process.env.NODE_ENV !== 'production'
            ? function () {
                warn$2('Write operation failed: computed value is readonly');
            }
            : noop;
    }
    else {
        getter = getterOrOptions.get;
        setter = getterOrOptions.set;
    }
    var watcher = isServerRendering()
        ? null
        : new Watcher(currentInstance, getter, noop, { lazy: true });
    if (process.env.NODE_ENV !== 'production' && watcher && debugOptions) {
        watcher.onTrack = debugOptions.onTrack;
        watcher.onTrigger = debugOptions.onTrigger;
    }
    var ref = {
        // some libs rely on the presence effect for checking computed refs
        // from normal refs, but the implementation doesn't matter
        effect: watcher,
        get value() {
            if (watcher) {
                if (watcher.dirty) {
                    watcher.evaluate();
                }
                if (Dep.target) {
                    if (process.env.NODE_ENV !== 'production' && Dep.target.onTrack) {
                        Dep.target.onTrack({
                            effect: Dep.target,
                            target: ref,
                            type: "get" /* TrackOpTypes.GET */,
                            key: 'value'
                        });
                    }
                    watcher.depend();
                }
                return watcher.value;
            }
            else {
                return getter();
            }
        },
        set value(newVal) {
            setter(newVal);
        }
    };
    def(ref, RefFlag, true);
    def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
    return ref;
}

var mark;
var measure;
if (process.env.NODE_ENV !== 'production') {
    var perf_1 = inBrowser && window.performance;
    /* istanbul ignore if */
    if (perf_1 &&
        // @ts-ignore
        perf_1.mark &&
        // @ts-ignore
        perf_1.measure &&
        // @ts-ignore
        perf_1.clearMarks &&
        // @ts-ignore
        perf_1.clearMeasures) {
        mark = function (tag) { return perf_1.mark(tag); };
        measure = function (name, startTag, endTag) {
            perf_1.measure(name, startTag, endTag);
            perf_1.clearMarks(startTag);
            perf_1.clearMarks(endTag);
            // perf.clearMeasures(name)
        };
    }
}

var normalizeEvent = cached(function (name) {
    var passive = name.charAt(0) === '&';
    name = passive ? name.slice(1) : name;
    var once = name.charAt(0) === '~'; // Prefixed last, checked first
    name = once ? name.slice(1) : name;
    var capture = name.charAt(0) === '!';
    name = capture ? name.slice(1) : name;
    return {
        name: name,
        once: once,
        capture: capture,
        passive: passive
    };
});
function createFnInvoker(fns, vm) {
    function invoker() {
        var fns = invoker.fns;
        if (isArray(fns)) {
            var cloned = fns.slice();
            for (var i = 0; i < cloned.length; i++) {
                invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler");
            }
        }
        else {
            // return handler return value for single handlers
            return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
        }
    }
    invoker.fns = fns;
    return invoker;
}
function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
    var name, cur, old, event;
    for (name in on) {
        cur = on[name];
        old = oldOn[name];
        event = normalizeEvent(name);
        if (isUndef(cur)) {
            process.env.NODE_ENV !== 'production' &&
                warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm);
        }
        else if (isUndef(old)) {
            if (isUndef(cur.fns)) {
                cur = on[name] = createFnInvoker(cur, vm);
            }
            if (isTrue(event.once)) {
                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
            }
            add(event.name, cur, event.capture, event.passive, event.params);
        }
        else if (cur !== old) {
            old.fns = cur;
            on[name] = old;
        }
    }
    for (name in oldOn) {
        if (isUndef(on[name])) {
            event = normalizeEvent(name);
            remove(event.name, oldOn[name], event.capture);
        }
    }
}

function mergeVNodeHook(def, hookKey, hook) {
    if (def instanceof VNode) {
        def = def.data.hook || (def.data.hook = {});
    }
    var invoker;
    var oldHook = def[hookKey];
    function wrappedHook() {
        hook.apply(this, arguments);
        // important: remove merged hook to ensure it's called only once
        // and prevent memory leak
        remove$2(invoker.fns, wrappedHook);
    }
    if (isUndef(oldHook)) {
        // no existing hook
        invoker = createFnInvoker([wrappedHook]);
    }
    else {
        /* istanbul ignore if */
        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
            // already a merged invoker
            invoker = oldHook;
            invoker.fns.push(wrappedHook);
        }
        else {
            // existing plain hook
            invoker = createFnInvoker([oldHook, wrappedHook]);
        }
    }
    invoker.merged = true;
    def[hookKey] = invoker;
}

function extractPropsFromVNodeData(data, Ctor, tag) {
    // we are only extracting raw values here.
    // validation and default values are handled in the child
    // component itself.
    var propOptions = Ctor.options.props;
    if (isUndef(propOptions)) {
        return;
    }
    var res = {};
    var attrs = data.attrs, props = data.props;
    if (isDef(attrs) || isDef(props)) {
        for (var key in propOptions) {
            var altKey = hyphenate(key);
            if (process.env.NODE_ENV !== 'production') {
                var keyInLowerCase = key.toLowerCase();
                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
                    tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") +
                        "".concat(formatComponentName(
                        // @ts-expect-error tag is string
                        tag || Ctor), ", but the declared prop name is") +
                        " \"".concat(key, "\". ") +
                        "Note that HTML attributes are case-insensitive and camelCased " +
                        "props need to use their kebab-case equivalents when using in-DOM " +
                        "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\"."));
                }
            }
            checkProp(res, props, key, altKey, true) ||
                checkProp(res, attrs, key, altKey, false);
        }
    }
    return res;
}
function checkProp(res, hash, key, altKey, preserve) {
    if (isDef(hash)) {
        if (hasOwn(hash, key)) {
            res[key] = hash[key];
            if (!preserve) {
                delete hash[key];
            }
            return true;
        }
        else if (hasOwn(hash, altKey)) {
            res[key] = hash[altKey];
            if (!preserve) {
                delete hash[altKey];
            }
            return true;
        }
    }
    return false;
}

// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren(children) {
    for (var i = 0; i < children.length; i++) {
        if (isArray(children[i])) {
            return Array.prototype.concat.apply([], children);
        }
    }
    return children;
}
// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren(children) {
    return isPrimitive(children)
        ? [createTextVNode(children)]
        : isArray(children)
            ? normalizeArrayChildren(children)
            : undefined;
}
function isTextNode(node) {
    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
}
function normalizeArrayChildren(children, nestedIndex) {
    var res = [];
    var i, c, lastIndex, last;
    for (i = 0; i < children.length; i++) {
        c = children[i];
        if (isUndef(c) || typeof c === 'boolean')
            continue;
        lastIndex = res.length - 1;
        last = res[lastIndex];
        //  nested
        if (isArray(c)) {
            if (c.length > 0) {
                c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i));
                // merge adjacent text nodes
                if (isTextNode(c[0]) && isTextNode(last)) {
                    res[lastIndex] = createTextVNode(last.text + c[0].text);
                    c.shift();
                }
                res.push.apply(res, c);
            }
        }
        else if (isPrimitive(c)) {
            if (isTextNode(last)) {
                // merge adjacent text nodes
                // this is necessary for SSR hydration because text nodes are
                // essentially merged when rendered to HTML strings
                res[lastIndex] = createTextVNode(last.text + c);
            }
            else if (c !== '') {
                // convert primitive to vnode
                res.push(createTextVNode(c));
            }
        }
        else {
            if (isTextNode(c) && isTextNode(last)) {
                // merge adjacent text nodes
                res[lastIndex] = createTextVNode(last.text + c.text);
            }
            else {
                // default key for nested array children (likely generated by v-for)
                if (isTrue(children._isVList) &&
                    isDef(c.tag) &&
                    isUndef(c.key) &&
                    isDef(nestedIndex)) {
                    c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__");
                }
                res.push(c);
            }
        }
    }
    return res;
}

var SIMPLE_NORMALIZE = 1;
var ALWAYS_NORMALIZE = 2;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
    if (isArray(data) || isPrimitive(data)) {
        normalizationType = children;
        children = data;
        data = undefined;
    }
    if (isTrue(alwaysNormalize)) {
        normalizationType = ALWAYS_NORMALIZE;
    }
    return _createElement(context, tag, data, children, normalizationType);
}
function _createElement(context, tag, data, children, normalizationType) {
    if (isDef(data) && isDef(data.__ob__)) {
        process.env.NODE_ENV !== 'production' &&
            warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context);
        return createEmptyVNode();
    }
    // object syntax in v-bind
    if (isDef(data) && isDef(data.is)) {
        tag = data.is;
    }
    if (!tag) {
        // in case of component :is set to falsy value
        return createEmptyVNode();
    }
    // warn against non-primitive key
    if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
        warn$2('Avoid using non-primitive value as key, ' +
            'use string/number value instead.', context);
    }
    // support single function children as default scoped slot
    if (isArray(children) && isFunction(children[0])) {
        data = data || {};
        data.scopedSlots = { default: children[0] };
        children.length = 0;
    }
    if (normalizationType === ALWAYS_NORMALIZE) {
        children = normalizeChildren(children);
    }
    else if (normalizationType === SIMPLE_NORMALIZE) {
        children = simpleNormalizeChildren(children);
    }
    var vnode, ns;
    if (typeof tag === 'string') {
        var Ctor = void 0;
        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
        if (config.isReservedTag(tag)) {
            // platform built-in elements
            if (process.env.NODE_ENV !== 'production' &&
                isDef(data) &&
                isDef(data.nativeOn) &&
                data.tag !== 'component') {
                warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context);
            }
            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
        }
        else if ((!data || !data.pre) &&
            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
            // component
            vnode = createComponent(Ctor, data, context, children, tag);
        }
        else {
            // unknown or unlisted namespaced elements
            // check at runtime because it may get assigned a namespace when its
            // parent normalizes children
            vnode = new VNode(tag, data, children, undefined, undefined, context);
        }
    }
    else {
        // direct component options / constructor
        vnode = createComponent(tag, data, context, children);
    }
    if (isArray(vnode)) {
        return vnode;
    }
    else if (isDef(vnode)) {
        if (isDef(ns))
            applyNS(vnode, ns);
        if (isDef(data))
            registerDeepBindings(data);
        return vnode;
    }
    else {
        return createEmptyVNode();
    }
}
function applyNS(vnode, ns, force) {
    vnode.ns = ns;
    if (vnode.tag === 'foreignObject') {
        // use default namespace inside foreignObject
        ns = undefined;
        force = true;
    }
    if (isDef(vnode.children)) {
        for (var i = 0, l = vnode.children.length; i < l; i++) {
            var child = vnode.children[i];
            if (isDef(child.tag) &&
                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
                applyNS(child, ns, force);
            }
        }
    }
}
// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings(data) {
    if (isObject(data.style)) {
        traverse(data.style);
    }
    if (isObject(data.class)) {
        traverse(data.class);
    }
}

/**
 * Runtime helper for rendering v-for lists.
 */
function renderList(val, render) {
    var ret = null, i, l, keys, key;
    if (isArray(val) || typeof val === 'string') {
        ret = new Array(val.length);
        for (i = 0, l = val.length; i < l; i++) {
            ret[i] = render(val[i], i);
        }
    }
    else if (typeof val === 'number') {
        ret = new Array(val);
        for (i = 0; i < val; i++) {
            ret[i] = render(i + 1, i);
        }
    }
    else if (isObject(val)) {
        if (hasSymbol && val[Symbol.iterator]) {
            ret = [];
            var iterator = val[Symbol.iterator]();
            var result = iterator.next();
            while (!result.done) {
                ret.push(render(result.value, ret.length));
                result = iterator.next();
            }
        }
        else {
            keys = Object.keys(val);
            ret = new Array(keys.length);
            for (i = 0, l = keys.length; i < l; i++) {
                key = keys[i];
                ret[i] = render(val[key], key, i);
            }
        }
    }
    if (!isDef(ret)) {
        ret = [];
    }
    ret._isVList = true;
    return ret;
}

/**
 * Runtime helper for rendering <slot>
 */
function renderSlot(name, fallbackRender, props, bindObject) {
    var scopedSlotFn = this.$scopedSlots[name];
    var nodes;
    if (scopedSlotFn) {
        // scoped slot
        props = props || {};
        if (bindObject) {
            if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {
                warn$2('slot v-bind without argument expects an Object', this);
            }
            props = extend(extend({}, bindObject), props);
        }
        nodes =
            scopedSlotFn(props) ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    else {
        nodes =
            this.$slots[name] ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    var target = props && props.slot;
    if (target) {
        return this.$createElement('template', { slot: target }, nodes);
    }
    else {
        return nodes;
    }
}

/**
 * Runtime helper for resolving filters
 */
function resolveFilter(id) {
    return resolveAsset(this.$options, 'filters', id, true) || identity;
}

function isKeyNotMatch(expect, actual) {
    if (isArray(expect)) {
        return expect.indexOf(actual) === -1;
    }
    else {
        return expect !== actual;
    }
}
/**
 * Runtime helper for checking keyCodes from config.
 * exposed as Vue.prototype._k
 * passing in eventKeyName as last argument separately for backwards compat
 */
function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
    var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
        return isKeyNotMatch(builtInKeyName, eventKeyName);
    }
    else if (mappedKeyCode) {
        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
    }
    else if (eventKeyName) {
        return hyphenate(eventKeyName) !== key;
    }
    return eventKeyCode === undefined;
}

/**
 * Runtime helper for merging v-bind="object" into a VNode's data.
 */
function bindObjectProps(data, tag, value, asProp, isSync) {
    if (value) {
        if (!isObject(value)) {
            process.env.NODE_ENV !== 'production' &&
                warn$2('v-bind without argument expects an Object or Array value', this);
        }
        else {
            if (isArray(value)) {
                value = toObject(value);
            }
            var hash = void 0;
            var _loop_1 = function (key) {
                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
                    hash = data;
                }
                else {
                    var type = data.attrs && data.attrs.type;
                    hash =
                        asProp || config.mustUseProp(tag, type, key)
                            ? data.domProps || (data.domProps = {})
                            : data.attrs || (data.attrs = {});
                }
                var camelizedKey = camelize(key);
                var hyphenatedKey = hyphenate(key);
                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
                    hash[key] = value[key];
                    if (isSync) {
                        var on = data.on || (data.on = {});
                        on["update:".concat(key)] = function ($event) {
                            value[key] = $event;
                        };
                    }
                }
            };
            for (var key in value) {
                _loop_1(key);
            }
        }
    }
    return data;
}

/**
 * Runtime helper for rendering static trees.
 */
function renderStatic(index, isInFor) {
    var cached = this._staticTrees || (this._staticTrees = []);
    var tree = cached[index];
    // if has already-rendered static tree and not inside v-for,
    // we can reuse the same tree.
    if (tree && !isInFor) {
        return tree;
    }
    // otherwise, render a fresh tree.
    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
    );
    markStatic$1(tree, "__static__".concat(index), false);
    return tree;
}
/**
 * Runtime helper for v-once.
 * Effectively it means marking the node as static with a unique key.
 */
function markOnce(tree, index, key) {
    markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true);
    return tree;
}
function markStatic$1(tree, key, isOnce) {
    if (isArray(tree)) {
        for (var i = 0; i < tree.length; i++) {
            if (tree[i] && typeof tree[i] !== 'string') {
                markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce);
            }
        }
    }
    else {
        markStaticNode(tree, key, isOnce);
    }
}
function markStaticNode(node, key, isOnce) {
    node.isStatic = true;
    node.key = key;
    node.isOnce = isOnce;
}

function bindObjectListeners(data, value) {
    if (value) {
        if (!isPlainObject(value)) {
            process.env.NODE_ENV !== 'production' && warn$2('v-on without argument expects an Object value', this);
        }
        else {
            var on = (data.on = data.on ? extend({}, data.on) : {});
            for (var key in value) {
                var existing = on[key];
                var ours = value[key];
                on[key] = existing ? [].concat(existing, ours) : ours;
            }
        }
    }
    return data;
}

function resolveScopedSlots(fns, res, 
// the following are added in 2.6
hasDynamicKeys, contentHashKey) {
    res = res || { $stable: !hasDynamicKeys };
    for (var i = 0; i < fns.length; i++) {
        var slot = fns[i];
        if (isArray(slot)) {
            resolveScopedSlots(slot, res, hasDynamicKeys);
        }
        else if (slot) {
            // marker for reverse proxying v-slot without scope on this.$slots
            // @ts-expect-error
            if (slot.proxy) {
                // @ts-expect-error
                slot.fn.proxy = true;
            }
            res[slot.key] = slot.fn;
        }
    }
    if (contentHashKey) {
        res.$key = contentHashKey;
    }
    return res;
}

// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
function bindDynamicKeys(baseObj, values) {
    for (var i = 0; i < values.length; i += 2) {
        var key = values[i];
        if (typeof key === 'string' && key) {
            baseObj[values[i]] = values[i + 1];
        }
        else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {
            // null is a special value for explicitly removing a binding
            warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this);
        }
    }
    return baseObj;
}
// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
function prependModifier(value, symbol) {
    return typeof value === 'string' ? symbol + value : value;
}

function installRenderHelpers(target) {
    target._o = markOnce;
    target._n = toNumber;
    target._s = toString;
    target._l = renderList;
    target._t = renderSlot;
    target._q = looseEqual;
    target._i = looseIndexOf;
    target._m = renderStatic;
    target._f = resolveFilter;
    target._k = checkKeyCodes;
    target._b = bindObjectProps;
    target._v = createTextVNode;
    target._e = createEmptyVNode;
    target._u = resolveScopedSlots;
    target._g = bindObjectListeners;
    target._d = bindDynamicKeys;
    target._p = prependModifier;
}

/**
 * Runtime helper for resolving raw children VNodes into a slot object.
 */
function resolveSlots(children, context) {
    if (!children || !children.length) {
        return {};
    }
    var slots = {};
    for (var i = 0, l = children.length; i < l; i++) {
        var child = children[i];
        var data = child.data;
        // remove slot attribute if the node is resolved as a Vue slot node
        if (data && data.attrs && data.attrs.slot) {
            delete data.attrs.slot;
        }
        // named slots should only be respected if the vnode was rendered in the
        // same context.
        if ((child.context === context || child.fnContext === context) &&
            data &&
            data.slot != null) {
            var name_1 = data.slot;
            var slot = slots[name_1] || (slots[name_1] = []);
            if (child.tag === 'template') {
                slot.push.apply(slot, child.children || []);
            }
            else {
                slot.push(child);
            }
        }
        else {
            (slots.default || (slots.default = [])).push(child);
        }
    }
    // ignore slots that contains only whitespace
    for (var name_2 in slots) {
        if (slots[name_2].every(isWhitespace)) {
            delete slots[name_2];
        }
    }
    return slots;
}
function isWhitespace(node) {
    return (node.isComment && !node.asyncFactory) || node.text === ' ';
}

function isAsyncPlaceholder(node) {
    // @ts-expect-error not really boolean type
    return node.isComment && node.asyncFactory;
}

function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
    var res;
    var hasNormalSlots = Object.keys(normalSlots).length > 0;
    var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
    var key = scopedSlots && scopedSlots.$key;
    if (!scopedSlots) {
        res = {};
    }
    else if (scopedSlots._normalized) {
        // fast path 1: child component re-render only, parent did not change
        return scopedSlots._normalized;
    }
    else if (isStable &&
        prevScopedSlots &&
        prevScopedSlots !== emptyObject &&
        key === prevScopedSlots.$key &&
        !hasNormalSlots &&
        !prevScopedSlots.$hasNormal) {
        // fast path 2: stable scoped slots w/ no normal slots to proxy,
        // only need to normalize once
        return prevScopedSlots;
    }
    else {
        res = {};
        for (var key_1 in scopedSlots) {
            if (scopedSlots[key_1] && key_1[0] !== '$') {
                res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);
            }
        }
    }
    // expose normal slots on scopedSlots
    for (var key_2 in normalSlots) {
        if (!(key_2 in res)) {
            res[key_2] = proxyNormalSlot(normalSlots, key_2);
        }
    }
    // avoriaz seems to mock a non-extensible $scopedSlots object
    // and when that is passed down this would cause an error
    if (scopedSlots && Object.isExtensible(scopedSlots)) {
        scopedSlots._normalized = res;
    }
    def(res, '$stable', isStable);
    def(res, '$key', key);
    def(res, '$hasNormal', hasNormalSlots);
    return res;
}
function normalizeScopedSlot(vm, normalSlots, key, fn) {
    var normalized = function () {
        var cur = currentInstance;
        setCurrentInstance(vm);
        var res = arguments.length ? fn.apply(null, arguments) : fn({});
        res =
            res && typeof res === 'object' && !isArray(res)
                ? [res] // single vnode
                : normalizeChildren(res);
        var vnode = res && res[0];
        setCurrentInstance(cur);
        return res &&
            (!vnode ||
                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
            ? undefined
            : res;
    };
    // this is a slot using the new v-slot syntax without scope. although it is
    // compiled as a scoped slot, render fn users would expect it to be present
    // on this.$slots because the usage is semantically a normal slot.
    if (fn.proxy) {
        Object.defineProperty(normalSlots, key, {
            get: normalized,
            enumerable: true,
            configurable: true
        });
    }
    return normalized;
}
function proxyNormalSlot(slots, key) {
    return function () { return slots[key]; };
}

function initSetup(vm) {
    var options = vm.$options;
    var setup = options.setup;
    if (setup) {
        var ctx = (vm._setupContext = createSetupContext(vm));
        setCurrentInstance(vm);
        pushTarget();
        var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup");
        popTarget();
        setCurrentInstance();
        if (isFunction(setupResult)) {
            // render function
            // @ts-ignore
            options.render = setupResult;
        }
        else if (isObject(setupResult)) {
            // bindings
            if (process.env.NODE_ENV !== 'production' && setupResult instanceof VNode) {
                warn$2("setup() should not return VNodes directly - " +
                    "return a render function instead.");
            }
            vm._setupState = setupResult;
            // __sfc indicates compiled bindings from <script setup>
            if (!setupResult.__sfc) {
                for (var key in setupResult) {
                    if (!isReserved(key)) {
                        proxyWithRefUnwrap(vm, setupResult, key);
                    }
                    else if (process.env.NODE_ENV !== 'production') {
                        warn$2("Avoid using variables that start with _ or $ in setup().");
                    }
                }
            }
            else {
                // exposed for compiled render fn
                var proxy = (vm._setupProxy = {});
                for (var key in setupResult) {
                    if (key !== '__sfc') {
                        proxyWithRefUnwrap(proxy, setupResult, key);
                    }
                }
            }
        }
        else if (process.env.NODE_ENV !== 'production' && setupResult !== undefined) {
            warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult));
        }
    }
}
function createSetupContext(vm) {
    var exposeCalled = false;
    return {
        get attrs() {
            if (!vm._attrsProxy) {
                var proxy = (vm._attrsProxy = {});
                def(proxy, '_v_attr_proxy', true);
                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
            }
            return vm._attrsProxy;
        },
        get listeners() {
            if (!vm._listenersProxy) {
                var proxy = (vm._listenersProxy = {});
                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
            }
            return vm._listenersProxy;
        },
        get slots() {
            return initSlotsProxy(vm);
        },
        emit: bind$1(vm.$emit, vm),
        expose: function (exposed) {
            if (process.env.NODE_ENV !== 'production') {
                if (exposeCalled) {
                    warn$2("expose() should be called only once per setup().", vm);
                }
                exposeCalled = true;
            }
            if (exposed) {
                Object.keys(exposed).forEach(function (key) {
                    return proxyWithRefUnwrap(vm, exposed, key);
                });
            }
        }
    };
}
function syncSetupProxy(to, from, prev, instance, type) {
    var changed = false;
    for (var key in from) {
        if (!(key in to)) {
            changed = true;
            defineProxyAttr(to, key, instance, type);
        }
        else if (from[key] !== prev[key]) {
            changed = true;
        }
    }
    for (var key in to) {
        if (!(key in from)) {
            changed = true;
            delete to[key];
        }
    }
    return changed;
}
function defineProxyAttr(proxy, key, instance, type) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get: function () {
            return instance[type][key];
        }
    });
}
function initSlotsProxy(vm) {
    if (!vm._slotsProxy) {
        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
    }
    return vm._slotsProxy;
}
function syncSetupSlots(to, from) {
    for (var key in from) {
        to[key] = from[key];
    }
    for (var key in to) {
        if (!(key in from)) {
            delete to[key];
        }
    }
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useSlots() {
    return getContext().slots;
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useAttrs() {
    return getContext().attrs;
}
/**
 * Vue 2 only
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useListeners() {
    return getContext().listeners;
}
function getContext() {
    if (process.env.NODE_ENV !== 'production' && !currentInstance) {
        warn$2("useContext() called without active instance.");
    }
    var vm = currentInstance;
    return vm._setupContext || (vm._setupContext = createSetupContext(vm));
}
/**
 * Runtime helper for merging default declarations. Imported by compiled code
 * only.
 * @internal
 */
function mergeDefaults(raw, defaults) {
    var props = isArray(raw)
        ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})
        : raw;
    for (var key in defaults) {
        var opt = props[key];
        if (opt) {
            if (isArray(opt) || isFunction(opt)) {
                props[key] = { type: opt, default: defaults[key] };
            }
            else {
                opt.default = defaults[key];
            }
        }
        else if (opt === null) {
            props[key] = { default: defaults[key] };
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn$2("props default key \"".concat(key, "\" has no corresponding declaration."));
        }
    }
    return props;
}

function initRender(vm) {
    vm._vnode = null; // the root of the child tree
    vm._staticTrees = null; // v-once cached trees
    var options = vm.$options;
    var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
    var renderContext = parentVnode && parentVnode.context;
    vm.$slots = resolveSlots(options._renderChildren, renderContext);
    vm.$scopedSlots = parentVnode
        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
        : emptyObject;
    // bind the createElement fn to this instance
    // so that we get proper render context inside it.
    // args order: tag, data, children, normalizationType, alwaysNormalize
    // internal version is used by render functions compiled from templates
    // @ts-expect-error
    vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };
    // normalization is always applied for the public version, used in
    // user-written render functions.
    // @ts-expect-error
    vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };
    // $attrs & $listeners are exposed for easier HOC creation.
    // they need to be reactive so that HOCs using them are always updated
    var parentData = parentVnode && parentVnode.data;
    /* istanbul ignore else */
    if (process.env.NODE_ENV !== 'production') {
        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {
            !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm);
        }, true);
        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
            !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm);
        }, true);
    }
    else {
        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, null, true);
        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, null, true);
    }
}
var currentRenderingInstance = null;
function renderMixin(Vue) {
    // install runtime convenience helpers
    installRenderHelpers(Vue.prototype);
    Vue.prototype.$nextTick = function (fn) {
        return nextTick(fn, this);
    };
    Vue.prototype._render = function () {
        var vm = this;
        var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;
        if (_parentVnode && vm._isMounted) {
            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
            if (vm._slotsProxy) {
                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
            }
        }
        // set parent vnode. this allows render functions to have access
        // to the data on the placeholder node.
        vm.$vnode = _parentVnode;
        // render self
        var vnode;
        try {
            // There's no need to maintain a stack because all render fns are called
            // separately from one another. Nested component's render fns are called
            // when parent component is patched.
            setCurrentInstance(vm);
            currentRenderingInstance = vm;
            vnode = render.call(vm._renderProxy, vm.$createElement);
        }
        catch (e) {
            handleError(e, vm, "render");
            // return error render result,
            // or previous vnode to prevent render error causing blank component
            /* istanbul ignore else */
            if (process.env.NODE_ENV !== 'production' && vm.$options.renderError) {
                try {
                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
                }
                catch (e) {
                    handleError(e, vm, "renderError");
                    vnode = vm._vnode;
                }
            }
            else {
                vnode = vm._vnode;
            }
        }
        finally {
            currentRenderingInstance = null;
            setCurrentInstance();
        }
        // if the returned array contains only a single node, allow it
        if (isArray(vnode) && vnode.length === 1) {
            vnode = vnode[0];
        }
        // return empty vnode in case the render function errored out
        if (!(vnode instanceof VNode)) {
            if (process.env.NODE_ENV !== 'production' && isArray(vnode)) {
                warn$2('Multiple root nodes returned from render function. Render function ' +
                    'should return a single root node.', vm);
            }
            vnode = createEmptyVNode();
        }
        // set parent
        vnode.parent = _parentVnode;
        return vnode;
    };
}

function ensureCtor(comp, base) {
    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
        comp = comp.default;
    }
    return isObject(comp) ? base.extend(comp) : comp;
}
function createAsyncPlaceholder(factory, data, context, children, tag) {
    var node = createEmptyVNode();
    node.asyncFactory = factory;
    node.asyncMeta = { data: data, context: context, children: children, tag: tag };
    return node;
}
function resolveAsyncComponent(factory, baseCtor) {
    if (isTrue(factory.error) && isDef(factory.errorComp)) {
        return factory.errorComp;
    }
    if (isDef(factory.resolved)) {
        return factory.resolved;
    }
    var owner = currentRenderingInstance;
    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
        // already pending
        factory.owners.push(owner);
    }
    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
        return factory.loadingComp;
    }
    if (owner && !isDef(factory.owners)) {
        var owners_1 = (factory.owners = [owner]);
        var sync_1 = true;
        var timerLoading_1 = null;
        var timerTimeout_1 = null;
        owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });
        var forceRender_1 = function (renderCompleted) {
            for (var i = 0, l = owners_1.length; i < l; i++) {
                owners_1[i].$forceUpdate();
            }
            if (renderCompleted) {
                owners_1.length = 0;
                if (timerLoading_1 !== null) {
                    clearTimeout(timerLoading_1);
                    timerLoading_1 = null;
                }
                if (timerTimeout_1 !== null) {
                    clearTimeout(timerTimeout_1);
                    timerTimeout_1 = null;
                }
            }
        };
        var resolve = once(function (res) {
            // cache resolved
            factory.resolved = ensureCtor(res, baseCtor);
            // invoke callbacks only if this is not a synchronous resolve
            // (async resolves are shimmed as synchronous during SSR)
            if (!sync_1) {
                forceRender_1(true);
            }
            else {
                owners_1.length = 0;
            }
        });
        var reject_1 = once(function (reason) {
            process.env.NODE_ENV !== 'production' &&
                warn$2("Failed to resolve async component: ".concat(String(factory)) +
                    (reason ? "\nReason: ".concat(reason) : ''));
            if (isDef(factory.errorComp)) {
                factory.error = true;
                forceRender_1(true);
            }
        });
        var res_1 = factory(resolve, reject_1);
        if (isObject(res_1)) {
            if (isPromise(res_1)) {
                // () => Promise
                if (isUndef(factory.resolved)) {
                    res_1.then(resolve, reject_1);
                }
            }
            else if (isPromise(res_1.component)) {
                res_1.component.then(resolve, reject_1);
                if (isDef(res_1.error)) {
                    factory.errorComp = ensureCtor(res_1.error, baseCtor);
                }
                if (isDef(res_1.loading)) {
                    factory.loadingComp = ensureCtor(res_1.loading, baseCtor);
                    if (res_1.delay === 0) {
                        factory.loading = true;
                    }
                    else {
                        // @ts-expect-error NodeJS timeout type
                        timerLoading_1 = setTimeout(function () {
                            timerLoading_1 = null;
                            if (isUndef(factory.resolved) && isUndef(factory.error)) {
                                factory.loading = true;
                                forceRender_1(false);
                            }
                        }, res_1.delay || 200);
                    }
                }
                if (isDef(res_1.timeout)) {
                    // @ts-expect-error NodeJS timeout type
                    timerTimeout_1 = setTimeout(function () {
                        timerTimeout_1 = null;
                        if (isUndef(factory.resolved)) {
                            reject_1(process.env.NODE_ENV !== 'production' ? "timeout (".concat(res_1.timeout, "ms)") : null);
                        }
                    }, res_1.timeout);
                }
            }
        }
        sync_1 = false;
        // return in case resolved synchronously
        return factory.loading ? factory.loadingComp : factory.resolved;
    }
}

function getFirstComponentChild(children) {
    if (isArray(children)) {
        for (var i = 0; i < children.length; i++) {
            var c = children[i];
            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
                return c;
            }
        }
    }
}

function initEvents(vm) {
    vm._events = Object.create(null);
    vm._hasHookEvent = false;
    // init parent attached events
    var listeners = vm.$options._parentListeners;
    if (listeners) {
        updateComponentListeners(vm, listeners);
    }
}
var target$1;
function add$1(event, fn) {
    target$1.$on(event, fn);
}
function remove$1(event, fn) {
    target$1.$off(event, fn);
}
function createOnceHandler$1(event, fn) {
    var _target = target$1;
    return function onceHandler() {
        var res = fn.apply(null, arguments);
        if (res !== null) {
            _target.$off(event, onceHandler);
        }
    };
}
function updateComponentListeners(vm, listeners, oldListeners) {
    target$1 = vm;
    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
    target$1 = undefined;
}
function eventsMixin(Vue) {
    var hookRE = /^hook:/;
    Vue.prototype.$on = function (event, fn) {
        var vm = this;
        if (isArray(event)) {
            for (var i = 0, l = event.length; i < l; i++) {
                vm.$on(event[i], fn);
            }
        }
        else {
            (vm._events[event] || (vm._events[event] = [])).push(fn);
            // optimize hook:event cost by using a boolean flag marked at registration
            // instead of a hash lookup
            if (hookRE.test(event)) {
                vm._hasHookEvent = true;
            }
        }
        return vm;
    };
    Vue.prototype.$once = function (event, fn) {
        var vm = this;
        function on() {
            vm.$off(event, on);
            fn.apply(vm, arguments);
        }
        on.fn = fn;
        vm.$on(event, on);
        return vm;
    };
    Vue.prototype.$off = function (event, fn) {
        var vm = this;
        // all
        if (!arguments.length) {
            vm._events = Object.create(null);
            return vm;
        }
        // array of events
        if (isArray(event)) {
            for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {
                vm.$off(event[i_1], fn);
            }
            return vm;
        }
        // specific event
        var cbs = vm._events[event];
        if (!cbs) {
            return vm;
        }
        if (!fn) {
            vm._events[event] = null;
            return vm;
        }
        // specific handler
        var cb;
        var i = cbs.length;
        while (i--) {
            cb = cbs[i];
            if (cb === fn || cb.fn === fn) {
                cbs.splice(i, 1);
                break;
            }
        }
        return vm;
    };
    Vue.prototype.$emit = function (event) {
        var vm = this;
        if (process.env.NODE_ENV !== 'production') {
            var lowerCaseEvent = event.toLowerCase();
            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
                tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") +
                    "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") +
                    "Note that HTML attributes are case-insensitive and you cannot use " +
                    "v-on to listen to camelCase events when using in-DOM templates. " +
                    "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\"."));
            }
        }
        var cbs = vm._events[event];
        if (cbs) {
            cbs = cbs.length > 1 ? toArray(cbs) : cbs;
            var args = toArray(arguments, 1);
            var info = "event handler for \"".concat(event, "\"");
            for (var i = 0, l = cbs.length; i < l; i++) {
                invokeWithErrorHandling(cbs[i], vm, args, vm, info);
            }
        }
        return vm;
    };
}

var activeInstance = null;
var isUpdatingChildComponent = false;
function setActiveInstance(vm) {
    var prevActiveInstance = activeInstance;
    activeInstance = vm;
    return function () {
        activeInstance = prevActiveInstance;
    };
}
function initLifecycle(vm) {
    var options = vm.$options;
    // locate first non-abstract parent
    var parent = options.parent;
    if (parent && !options.abstract) {
        while (parent.$options.abstract && parent.$parent) {
            parent = parent.$parent;
        }
        parent.$children.push(vm);
    }
    vm.$parent = parent;
    vm.$root = parent ? parent.$root : vm;
    vm.$children = [];
    vm.$refs = {};
    vm._provided = parent ? parent._provided : Object.create(null);
    vm._watcher = null;
    vm._inactive = null;
    vm._directInactive = false;
    vm._isMounted = false;
    vm._isDestroyed = false;
    vm._isBeingDestroyed = false;
}
function lifecycleMixin(Vue) {
    Vue.prototype._update = function (vnode, hydrating) {
        var vm = this;
        var prevEl = vm.$el;
        var prevVnode = vm._vnode;
        var restoreActiveInstance = setActiveInstance(vm);
        vm._vnode = vnode;
        // Vue.prototype.__patch__ is injected in entry points
        // based on the rendering backend used.
        if (!prevVnode) {
            // initial render
            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
        }
        else {
            // updates
            vm.$el = vm.__patch__(prevVnode, vnode);
        }
        restoreActiveInstance();
        // update __vue__ reference
        if (prevEl) {
            prevEl.__vue__ = null;
        }
        if (vm.$el) {
            vm.$el.__vue__ = vm;
        }
        // if parent is an HOC, update its $el as well
        var wrapper = vm;
        while (wrapper &&
            wrapper.$vnode &&
            wrapper.$parent &&
            wrapper.$vnode === wrapper.$parent._vnode) {
            wrapper.$parent.$el = wrapper.$el;
            wrapper = wrapper.$parent;
        }
        // updated hook is called by the scheduler to ensure that children are
        // updated in a parent's updated hook.
    };
    Vue.prototype.$forceUpdate = function () {
        var vm = this;
        if (vm._watcher) {
            vm._watcher.update();
        }
    };
    Vue.prototype.$destroy = function () {
        var vm = this;
        if (vm._isBeingDestroyed) {
            return;
        }
        callHook$1(vm, 'beforeDestroy');
        vm._isBeingDestroyed = true;
        // remove self from parent
        var parent = vm.$parent;
        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
            remove$2(parent.$children, vm);
        }
        // teardown scope. this includes both the render watcher and other
        // watchers created
        vm._scope.stop();
        // remove reference from data ob
        // frozen object may not have observer.
        if (vm._data.__ob__) {
            vm._data.__ob__.vmCount--;
        }
        // call the last hook...
        vm._isDestroyed = true;
        // invoke destroy hooks on current rendered tree
        vm.__patch__(vm._vnode, null);
        // fire destroyed hook
        callHook$1(vm, 'destroyed');
        // turn off all instance listeners.
        vm.$off();
        // remove __vue__ reference
        if (vm.$el) {
            vm.$el.__vue__ = null;
        }
        // release circular reference (#6759)
        if (vm.$vnode) {
            vm.$vnode.parent = null;
        }
    };
}
function mountComponent(vm, el, hydrating) {
    vm.$el = el;
    if (!vm.$options.render) {
        // @ts-expect-error invalid type
        vm.$options.render = createEmptyVNode;
        if (process.env.NODE_ENV !== 'production') {
            /* istanbul ignore if */
            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
                vm.$options.el ||
                el) {
                warn$2('You are using the runtime-only build of Vue where the template ' +
                    'compiler is not available. Either pre-compile the templates into ' +
                    'render functions, or use the compiler-included build.', vm);
            }
            else {
                warn$2('Failed to mount component: template or render function not defined.', vm);
            }
        }
    }
    callHook$1(vm, 'beforeMount');
    var updateComponent;
    /* istanbul ignore if */
    if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
        updateComponent = function () {
            var name = vm._name;
            var id = vm._uid;
            var startTag = "vue-perf-start:".concat(id);
            var endTag = "vue-perf-end:".concat(id);
            mark(startTag);
            var vnode = vm._render();
            mark(endTag);
            measure("vue ".concat(name, " render"), startTag, endTag);
            mark(startTag);
            vm._update(vnode, hydrating);
            mark(endTag);
            measure("vue ".concat(name, " patch"), startTag, endTag);
        };
    }
    else {
        updateComponent = function () {
            vm._update(vm._render(), hydrating);
        };
    }
    var watcherOptions = {
        before: function () {
            if (vm._isMounted && !vm._isDestroyed) {
                callHook$1(vm, 'beforeUpdate');
            }
        }
    };
    if (process.env.NODE_ENV !== 'production') {
        watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };
        watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };
    }
    // we set this to vm._watcher inside the watcher's constructor
    // since the watcher's initial patch may call $forceUpdate (e.g. inside child
    // component's mounted hook), which relies on vm._watcher being already defined
    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
    hydrating = false;
    // flush buffer for flush: "pre" watchers queued in setup()
    var preWatchers = vm._preWatchers;
    if (preWatchers) {
        for (var i = 0; i < preWatchers.length; i++) {
            preWatchers[i].run();
        }
    }
    // manually mounted instance, call mounted on self
    // mounted is called for render-created child components in its inserted hook
    if (vm.$vnode == null) {
        vm._isMounted = true;
        callHook$1(vm, 'mounted');
    }
    return vm;
}
function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
    if (process.env.NODE_ENV !== 'production') {
        isUpdatingChildComponent = true;
    }
    // determine whether component has slot children
    // we need to do this before overwriting $options._renderChildren.
    // check if there are dynamic scopedSlots (hand-written or compiled but with
    // dynamic slot names). Static scoped slots compiled from template has the
    // "$stable" marker.
    var newScopedSlots = parentVnode.data.scopedSlots;
    var oldScopedSlots = vm.$scopedSlots;
    var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
        (!newScopedSlots && vm.$scopedSlots.$key));
    // Any static slot children from the parent may have changed during parent's
    // update. Dynamic scoped slots may also have changed. In such cases, a forced
    // update is necessary to ensure correctness.
    var needsForceUpdate = !!(renderChildren || // has new static slots
        vm.$options._renderChildren || // has old static slots
        hasDynamicScopedSlot);
    var prevVNode = vm.$vnode;
    vm.$options._parentVnode = parentVnode;
    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
    if (vm._vnode) {
        // update child tree's parent
        vm._vnode.parent = parentVnode;
    }
    vm.$options._renderChildren = renderChildren;
    // update $attrs and $listeners hash
    // these are also reactive so they may trigger child update if the child
    // used them during render
    var attrs = parentVnode.data.attrs || emptyObject;
    if (vm._attrsProxy) {
        // force update if attrs are accessed and has changed since it may be
        // passed to a child component.
        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
            needsForceUpdate = true;
        }
    }
    vm.$attrs = attrs;
    // update listeners
    listeners = listeners || emptyObject;
    var prevListeners = vm.$options._parentListeners;
    if (vm._listenersProxy) {
        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
    }
    vm.$listeners = vm.$options._parentListeners = listeners;
    updateComponentListeners(vm, listeners, prevListeners);
    // update props
    if (propsData && vm.$options.props) {
        toggleObserving(false);
        var props = vm._props;
        var propKeys = vm.$options._propKeys || [];
        for (var i = 0; i < propKeys.length; i++) {
            var key = propKeys[i];
            var propOptions = vm.$options.props; // wtf flow?
            props[key] = validateProp(key, propOptions, propsData, vm);
        }
        toggleObserving(true);
        // keep a copy of raw propsData
        vm.$options.propsData = propsData;
    }
    // resolve slots + force update if has children
    if (needsForceUpdate) {
        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
        vm.$forceUpdate();
    }
    if (process.env.NODE_ENV !== 'production') {
        isUpdatingChildComponent = false;
    }
}
function isInInactiveTree(vm) {
    while (vm && (vm = vm.$parent)) {
        if (vm._inactive)
            return true;
    }
    return false;
}
function activateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = false;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    else if (vm._directInactive) {
        return;
    }
    if (vm._inactive || vm._inactive === null) {
        vm._inactive = false;
        for (var i = 0; i < vm.$children.length; i++) {
            activateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'activated');
    }
}
function deactivateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = true;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    if (!vm._inactive) {
        vm._inactive = true;
        for (var i = 0; i < vm.$children.length; i++) {
            deactivateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'deactivated');
    }
}
function callHook$1(vm, hook, args, setContext) {
    if (setContext === void 0) { setContext = true; }
    // #7573 disable dep collection when invoking lifecycle hooks
    pushTarget();
    var prev = currentInstance;
    setContext && setCurrentInstance(vm);
    var handlers = vm.$options[hook];
    var info = "".concat(hook, " hook");
    if (handlers) {
        for (var i = 0, j = handlers.length; i < j; i++) {
            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
        }
    }
    if (vm._hasHookEvent) {
        vm.$emit('hook:' + hook);
    }
    setContext && setCurrentInstance(prev);
    popTarget();
}

var MAX_UPDATE_COUNT = 100;
var queue = [];
var activatedChildren = [];
var has = {};
var circular = {};
var waiting = false;
var flushing = false;
var index$1 = 0;
/**
 * Reset the scheduler's state.
 */
function resetSchedulerState() {
    index$1 = queue.length = activatedChildren.length = 0;
    has = {};
    if (process.env.NODE_ENV !== 'production') {
        circular = {};
    }
    waiting = flushing = false;
}
// Async edge case #6566 requires saving the timestamp when event listeners are
// attached. However, calling performance.now() has a perf overhead especially
// if the page has thousands of event listeners. Instead, we take a timestamp
// every time the scheduler flushes and use that for all event listeners
// attached during that flush.
var currentFlushTimestamp = 0;
// Async edge case fix requires storing an event listener's attach timestamp.
var getNow = Date.now;
// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if (inBrowser && !isIE) {
    var performance_1 = window.performance;
    if (performance_1 &&
        typeof performance_1.now === 'function' &&
        getNow() > document.createEvent('Event').timeStamp) {
        // if the event timestamp, although evaluated AFTER the Date.now(), is
        // smaller than it, it means the event is using a hi-res timestamp,
        // and we need to use the hi-res version for event listener timestamps as
        // well.
        getNow = function () { return performance_1.now(); };
    }
}
var sortCompareFn = function (a, b) {
    if (a.post) {
        if (!b.post)
            return 1;
    }
    else if (b.post) {
        return -1;
    }
    return a.id - b.id;
};
/**
 * Flush both queues and run the watchers.
 */
function flushSchedulerQueue() {
    currentFlushTimestamp = getNow();
    flushing = true;
    var watcher, id;
    // Sort queue before flush.
    // This ensures that:
    // 1. Components are updated from parent to child. (because parent is always
    //    created before the child)
    // 2. A component's user watchers are run before its render watcher (because
    //    user watchers are created before the render watcher)
    // 3. If a component is destroyed during a parent component's watcher run,
    //    its watchers can be skipped.
    queue.sort(sortCompareFn);
    // do not cache length because more watchers might be pushed
    // as we run existing watchers
    for (index$1 = 0; index$1 < queue.length; index$1++) {
        watcher = queue[index$1];
        if (watcher.before) {
            watcher.before();
        }
        id = watcher.id;
        has[id] = null;
        watcher.run();
        // in dev build, check and stop circular updates.
        if (process.env.NODE_ENV !== 'production' && has[id] != null) {
            circular[id] = (circular[id] || 0) + 1;
            if (circular[id] > MAX_UPDATE_COUNT) {
                warn$2('You may have an infinite update loop ' +
                    (watcher.user
                        ? "in watcher with expression \"".concat(watcher.expression, "\"")
                        : "in a component render function."), watcher.vm);
                break;
            }
        }
    }
    // keep copies of post queues before resetting state
    var activatedQueue = activatedChildren.slice();
    var updatedQueue = queue.slice();
    resetSchedulerState();
    // call component updated and activated hooks
    callActivatedHooks(activatedQueue);
    callUpdatedHooks(updatedQueue);
    cleanupDeps();
    // devtool hook
    /* istanbul ignore if */
    if (devtools && config.devtools) {
        devtools.emit('flush');
    }
}
function callUpdatedHooks(queue) {
    var i = queue.length;
    while (i--) {
        var watcher = queue[i];
        var vm = watcher.vm;
        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
            callHook$1(vm, 'updated');
        }
    }
}
/**
 * Queue a kept-alive component that was activated during patch.
 * The queue will be processed after the entire tree has been patched.
 */
function queueActivatedComponent(vm) {
    // setting _inactive to false here so that a render function can
    // rely on checking whether it's in an inactive tree (e.g. router-view)
    vm._inactive = false;
    activatedChildren.push(vm);
}
function callActivatedHooks(queue) {
    for (var i = 0; i < queue.length; i++) {
        queue[i]._inactive = true;
        activateChildComponent(queue[i], true /* true */);
    }
}
/**
 * Push a watcher into the watcher queue.
 * Jobs with duplicate IDs will be skipped unless it's
 * pushed when the queue is being flushed.
 */
function queueWatcher(watcher) {
    var id = watcher.id;
    if (has[id] != null) {
        return;
    }
    if (watcher === Dep.target && watcher.noRecurse) {
        return;
    }
    has[id] = true;
    if (!flushing) {
        queue.push(watcher);
    }
    else {
        // if already flushing, splice the watcher based on its id
        // if already past its id, it will be run next immediately.
        var i = queue.length - 1;
        while (i > index$1 && queue[i].id > watcher.id) {
            i--;
        }
        queue.splice(i + 1, 0, watcher);
    }
    // queue the flush
    if (!waiting) {
        waiting = true;
        if (process.env.NODE_ENV !== 'production' && !config.async) {
            flushSchedulerQueue();
            return;
        }
        nextTick(flushSchedulerQueue);
    }
}

var WATCHER = "watcher";
var WATCHER_CB = "".concat(WATCHER, " callback");
var WATCHER_GETTER = "".concat(WATCHER, " getter");
var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup");
// Simple effect.
function watchEffect(effect, options) {
    return doWatch(effect, null, options);
}
function watchPostEffect(effect, options) {
    return doWatch(effect, null, (process.env.NODE_ENV !== 'production'
        ? __assign(__assign({}, options), { flush: 'post' }) : { flush: 'post' }));
}
function watchSyncEffect(effect, options) {
    return doWatch(effect, null, (process.env.NODE_ENV !== 'production'
        ? __assign(__assign({}, options), { flush: 'sync' }) : { flush: 'sync' }));
}
// initial value for watchers to trigger on undefined initial values
var INITIAL_WATCHER_VALUE = {};
// implementation
function watch(source, cb, options) {
    if (process.env.NODE_ENV !== 'production' && typeof cb !== 'function') {
        warn$2("`watch(fn, options?)` signature has been moved to a separate API. " +
            "Use `watchEffect(fn, options?)` instead. `watch` now only " +
            "supports `watch(source, cb, options?) signature.");
    }
    return doWatch(source, cb, options);
}
function doWatch(source, cb, _a) {
    var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;
    if (process.env.NODE_ENV !== 'production' && !cb) {
        if (immediate !== undefined) {
            warn$2("watch() \"immediate\" option is only respected when using the " +
                "watch(source, callback, options?) signature.");
        }
        if (deep !== undefined) {
            warn$2("watch() \"deep\" option is only respected when using the " +
                "watch(source, callback, options?) signature.");
        }
    }
    var warnInvalidSource = function (s) {
        warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") +
            "function, a ref, a reactive object, or an array of these types.");
    };
    var instance = currentInstance;
    var call = function (fn, type, args) {
        if (args === void 0) { args = null; }
        return invokeWithErrorHandling(fn, null, args, instance, type);
    };
    var getter;
    var forceTrigger = false;
    var isMultiSource = false;
    if (isRef(source)) {
        getter = function () { return source.value; };
        forceTrigger = isShallow(source);
    }
    else if (isReactive(source)) {
        getter = function () {
            source.__ob__.dep.depend();
            return source;
        };
        deep = true;
    }
    else if (isArray(source)) {
        isMultiSource = true;
        forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });
        getter = function () {
            return source.map(function (s) {
                if (isRef(s)) {
                    return s.value;
                }
                else if (isReactive(s)) {
                    return traverse(s);
                }
                else if (isFunction(s)) {
                    return call(s, WATCHER_GETTER);
                }
                else {
                    process.env.NODE_ENV !== 'production' && warnInvalidSource(s);
                }
            });
        };
    }
    else if (isFunction(source)) {
        if (cb) {
            // getter with cb
            getter = function () { return call(source, WATCHER_GETTER); };
        }
        else {
            // no cb -> simple effect
            getter = function () {
                if (instance && instance._isDestroyed) {
                    return;
                }
                if (cleanup) {
                    cleanup();
                }
                return call(source, WATCHER, [onCleanup]);
            };
        }
    }
    else {
        getter = noop;
        process.env.NODE_ENV !== 'production' && warnInvalidSource(source);
    }
    if (cb && deep) {
        var baseGetter_1 = getter;
        getter = function () { return traverse(baseGetter_1()); };
    }
    var cleanup;
    var onCleanup = function (fn) {
        cleanup = watcher.onStop = function () {
            call(fn, WATCHER_CLEANUP);
        };
    };
    // in SSR there is no need to setup an actual effect, and it should be noop
    // unless it's eager
    if (isServerRendering()) {
        // we will also not call the invalidate callback (+ runner is not set up)
        onCleanup = noop;
        if (!cb) {
            getter();
        }
        else if (immediate) {
            call(cb, WATCHER_CB, [
                getter(),
                isMultiSource ? [] : undefined,
                onCleanup
            ]);
        }
        return noop;
    }
    var watcher = new Watcher(currentInstance, getter, noop, {
        lazy: true
    });
    watcher.noRecurse = !cb;
    var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
    // overwrite default run
    watcher.run = function () {
        if (!watcher.active) {
            return;
        }
        if (cb) {
            // watch(source, cb)
            var newValue = watcher.get();
            if (deep ||
                forceTrigger ||
                (isMultiSource
                    ? newValue.some(function (v, i) {
                        return hasChanged(v, oldValue[i]);
                    })
                    : hasChanged(newValue, oldValue))) {
                // cleanup before running cb again
                if (cleanup) {
                    cleanup();
                }
                call(cb, WATCHER_CB, [
                    newValue,
                    // pass undefined as the old value when it's changed for the first time
                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
                    onCleanup
                ]);
                oldValue = newValue;
            }
        }
        else {
            // watchEffect
            watcher.get();
        }
    };
    if (flush === 'sync') {
        watcher.update = watcher.run;
    }
    else if (flush === 'post') {
        watcher.post = true;
        watcher.update = function () { return queueWatcher(watcher); };
    }
    else {
        // pre
        watcher.update = function () {
            if (instance && instance === currentInstance && !instance._isMounted) {
                // pre-watcher triggered before
                var buffer = instance._preWatchers || (instance._preWatchers = []);
                if (buffer.indexOf(watcher) < 0)
                    buffer.push(watcher);
            }
            else {
                queueWatcher(watcher);
            }
        };
    }
    if (process.env.NODE_ENV !== 'production') {
        watcher.onTrack = onTrack;
        watcher.onTrigger = onTrigger;
    }
    // initial run
    if (cb) {
        if (immediate) {
            watcher.run();
        }
        else {
            oldValue = watcher.get();
        }
    }
    else if (flush === 'post' && instance) {
        instance.$once('hook:mounted', function () { return watcher.get(); });
    }
    else {
        watcher.get();
    }
    return function () {
        watcher.teardown();
    };
}

var activeEffectScope;
var EffectScope = /** @class */ (function () {
    function EffectScope(detached) {
        if (detached === void 0) { detached = false; }
        this.detached = detached;
        /**
         * @internal
         */
        this.active = true;
        /**
         * @internal
         */
        this.effects = [];
        /**
         * @internal
         */
        this.cleanups = [];
        this.parent = activeEffectScope;
        if (!detached && activeEffectScope) {
            this.index =
                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
        }
    }
    EffectScope.prototype.run = function (fn) {
        if (this.active) {
            var currentEffectScope = activeEffectScope;
            try {
                activeEffectScope = this;
                return fn();
            }
            finally {
                activeEffectScope = currentEffectScope;
            }
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn$2("cannot run an inactive effect scope.");
        }
    };
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    EffectScope.prototype.on = function () {
        activeEffectScope = this;
    };
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    EffectScope.prototype.off = function () {
        activeEffectScope = this.parent;
    };
    EffectScope.prototype.stop = function (fromParent) {
        if (this.active) {
            var i = void 0, l = void 0;
            for (i = 0, l = this.effects.length; i < l; i++) {
                this.effects[i].teardown();
            }
            for (i = 0, l = this.cleanups.length; i < l; i++) {
                this.cleanups[i]();
            }
            if (this.scopes) {
                for (i = 0, l = this.scopes.length; i < l; i++) {
                    this.scopes[i].stop(true);
                }
            }
            // nested scope, dereference from parent to avoid memory leaks
            if (!this.detached && this.parent && !fromParent) {
                // optimized O(1) removal
                var last = this.parent.scopes.pop();
                if (last && last !== this) {
                    this.parent.scopes[this.index] = last;
                    last.index = this.index;
                }
            }
            this.parent = undefined;
            this.active = false;
        }
    };
    return EffectScope;
}());
function effectScope(detached) {
    return new EffectScope(detached);
}
/**
 * @internal
 */
function recordEffectScope(effect, scope) {
    if (scope === void 0) { scope = activeEffectScope; }
    if (scope && scope.active) {
        scope.effects.push(effect);
    }
}
function getCurrentScope() {
    return activeEffectScope;
}
function onScopeDispose(fn) {
    if (activeEffectScope) {
        activeEffectScope.cleanups.push(fn);
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$2("onScopeDispose() is called when there is no active effect scope" +
            " to be associated with.");
    }
}

function provide(key, value) {
    if (!currentInstance) {
        if (process.env.NODE_ENV !== 'production') {
            warn$2("provide() can only be used inside setup().");
        }
    }
    else {
        // TS doesn't allow symbol as index type
        resolveProvided(currentInstance)[key] = value;
    }
}
function resolveProvided(vm) {
    // by default an instance inherits its parent's provides object
    // but when it needs to provide values of its own, it creates its
    // own provides object using parent provides object as prototype.
    // this way in `inject` we can simply look up injections from direct
    // parent and let the prototype chain do the work.
    var existing = vm._provided;
    var parentProvides = vm.$parent && vm.$parent._provided;
    if (parentProvides === existing) {
        return (vm._provided = Object.create(parentProvides));
    }
    else {
        return existing;
    }
}
function inject(key, defaultValue, treatDefaultAsFactory) {
    if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }
    // fallback to `currentRenderingInstance` so that this can be called in
    // a functional component
    var instance = currentInstance;
    if (instance) {
        // #2400
        // to support `app.use` plugins,
        // fallback to appContext's `provides` if the instance is at root
        var provides = instance.$parent && instance.$parent._provided;
        if (provides && key in provides) {
            // TS doesn't allow symbol as index type
            return provides[key];
        }
        else if (arguments.length > 1) {
            return treatDefaultAsFactory && isFunction(defaultValue)
                ? defaultValue.call(instance)
                : defaultValue;
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn$2("injection \"".concat(String(key), "\" not found."));
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$2("inject() can only be used inside setup() or functional components.");
    }
}

/**
 * @internal this function needs manual public type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function h(type, props, children) {
    if (!currentInstance) {
        process.env.NODE_ENV !== 'production' &&
            warn$2("globally imported h() can only be invoked when there is an active " +
                "component instance, e.g. synchronously in a component's render or setup function.");
    }
    return createElement$1(currentInstance, type, props, children, 2, true);
}

function handleError(err, vm, info) {
    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
    // See: https://github.com/vuejs/vuex/issues/1505
    pushTarget();
    try {
        if (vm) {
            var cur = vm;
            while ((cur = cur.$parent)) {
                var hooks = cur.$options.errorCaptured;
                if (hooks) {
                    for (var i = 0; i < hooks.length; i++) {
                        try {
                            var capture = hooks[i].call(cur, err, vm, info) === false;
                            if (capture)
                                return;
                        }
                        catch (e) {
                            globalHandleError(e, cur, 'errorCaptured hook');
                        }
                    }
                }
            }
        }
        globalHandleError(err, vm, info);
    }
    finally {
        popTarget();
    }
}
function invokeWithErrorHandling(handler, context, args, vm, info) {
    var res;
    try {
        res = args ? handler.apply(context, args) : handler.call(context);
        if (res && !res._isVue && isPromise(res) && !res._handled) {
            res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
            res._handled = true;
        }
    }
    catch (e) {
        handleError(e, vm, info);
    }
    return res;
}
function globalHandleError(err, vm, info) {
    if (config.errorHandler) {
        try {
            return config.errorHandler.call(null, err, vm, info);
        }
        catch (e) {
            // if the user intentionally throws the original error in the handler,
            // do not log it twice
            if (e !== err) {
                logError(e, null, 'config.errorHandler');
            }
        }
    }
    logError(err, vm, info);
}
function logError(err, vm, info) {
    if (process.env.NODE_ENV !== 'production') {
        warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm);
    }
    /* istanbul ignore else */
    if (inBrowser && typeof console !== 'undefined') {
        console.error(err);
    }
    else {
        throw err;
    }
}

/* globals MutationObserver */
var isUsingMicroTask = false;
var callbacks = [];
var pending = false;
function flushCallbacks() {
    pending = false;
    var copies = callbacks.slice(0);
    callbacks.length = 0;
    for (var i = 0; i < copies.length; i++) {
        copies[i]();
    }
}
// Here we have async deferring wrappers using microtasks.
// In 2.5 we used (macro) tasks (in combination with microtasks).
// However, it has subtle problems when state is changed right before repaint
// (e.g. #6813, out-in transitions).
// Also, using (macro) tasks in event handler would cause some weird behaviors
// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
// So we now use microtasks everywhere, again.
// A major drawback of this tradeoff is that there are some scenarios
// where microtasks have too high a priority and fire in between supposedly
// sequential events (e.g. #4521, #6690, which have workarounds)
// or even between bubbling of the same event (#6566).
var timerFunc;
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
    var p_1 = Promise.resolve();
    timerFunc = function () {
        p_1.then(flushCallbacks);
        // In problematic UIWebViews, Promise.then doesn't completely break, but
        // it can get stuck in a weird state where callbacks are pushed into the
        // microtask queue but the queue isn't being flushed, until the browser
        // needs to do some other work, e.g. handle a timer. Therefore we can
        // "force" the microtask queue to be flushed by adding an empty timer.
        if (isIOS)
            setTimeout(noop);
    };
    isUsingMicroTask = true;
}
else if (!isIE &&
    typeof MutationObserver !== 'undefined' &&
    (isNative(MutationObserver) ||
        // PhantomJS and iOS 7.x
        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
    // Use MutationObserver where native Promise is not available,
    // e.g. PhantomJS, iOS7, Android 4.4
    // (#6466 MutationObserver is unreliable in IE11)
    var counter_1 = 1;
    var observer = new MutationObserver(flushCallbacks);
    var textNode_1 = document.createTextNode(String(counter_1));
    observer.observe(textNode_1, {
        characterData: true
    });
    timerFunc = function () {
        counter_1 = (counter_1 + 1) % 2;
        textNode_1.data = String(counter_1);
    };
    isUsingMicroTask = true;
}
else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
    // Fallback to setImmediate.
    // Technically it leverages the (macro) task queue,
    // but it is still a better choice than setTimeout.
    timerFunc = function () {
        setImmediate(flushCallbacks);
    };
}
else {
    // Fallback to setTimeout.
    timerFunc = function () {
        setTimeout(flushCallbacks, 0);
    };
}
/**
 * @internal
 */
function nextTick(cb, ctx) {
    var _resolve;
    callbacks.push(function () {
        if (cb) {
            try {
                cb.call(ctx);
            }
            catch (e) {
                handleError(e, ctx, 'nextTick');
            }
        }
        else if (_resolve) {
            _resolve(ctx);
        }
    });
    if (!pending) {
        pending = true;
        timerFunc();
    }
    // $flow-disable-line
    if (!cb && typeof Promise !== 'undefined') {
        return new Promise(function (resolve) {
            _resolve = resolve;
        });
    }
}

function useCssModule(name) {
    if (name === void 0) { name = '$style'; }
    /* istanbul ignore else */
    {
        if (!currentInstance) {
            process.env.NODE_ENV !== 'production' && warn$2("useCssModule must be called inside setup()");
            return emptyObject;
        }
        var mod = currentInstance[name];
        if (!mod) {
            process.env.NODE_ENV !== 'production' &&
                warn$2("Current instance does not have CSS module named \"".concat(name, "\"."));
            return emptyObject;
        }
        return mod;
    }
}

/**
 * Runtime helper for SFC's CSS variable injection feature.
 * @private
 */
function useCssVars(getter) {
    if (!inBrowser && !false)
        return;
    var instance = currentInstance;
    if (!instance) {
        process.env.NODE_ENV !== 'production' &&
            warn$2("useCssVars is called without current active component instance.");
        return;
    }
    watchPostEffect(function () {
        var el = instance.$el;
        var vars = getter(instance, instance._setupProxy);
        if (el && el.nodeType === 1) {
            var style = el.style;
            for (var key in vars) {
                style.setProperty("--".concat(key), vars[key]);
            }
        }
    });
}

/**
 * v3-compatible async component API.
 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
 * because it relies on existing manual types
 */
function defineAsyncComponent(source) {
    if (isFunction(source)) {
        source = { loader: source };
    }
    var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out
    _b = source.suspensible, // undefined = never times out
    suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true
    userOnError = source.onError;
    if (process.env.NODE_ENV !== 'production' && suspensible) {
        warn$2("The suspensiblbe option for async components is not supported in Vue2. It is ignored.");
    }
    var pendingRequest = null;
    var retries = 0;
    var retry = function () {
        retries++;
        pendingRequest = null;
        return load();
    };
    var load = function () {
        var thisRequest;
        return (pendingRequest ||
            (thisRequest = pendingRequest =
                loader()
                    .catch(function (err) {
                    err = err instanceof Error ? err : new Error(String(err));
                    if (userOnError) {
                        return new Promise(function (resolve, reject) {
                            var userRetry = function () { return resolve(retry()); };
                            var userFail = function () { return reject(err); };
                            userOnError(err, userRetry, userFail, retries + 1);
                        });
                    }
                    else {
                        throw err;
                    }
                })
                    .then(function (comp) {
                    if (thisRequest !== pendingRequest && pendingRequest) {
                        return pendingRequest;
                    }
                    if (process.env.NODE_ENV !== 'production' && !comp) {
                        warn$2("Async component loader resolved to undefined. " +
                            "If you are using retry(), make sure to return its return value.");
                    }
                    // interop module default
                    if (comp &&
                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
                        comp = comp.default;
                    }
                    if (process.env.NODE_ENV !== 'production' && comp && !isObject(comp) && !isFunction(comp)) {
                        throw new Error("Invalid async component load result: ".concat(comp));
                    }
                    return comp;
                })));
    };
    return function () {
        var component = load();
        return {
            component: component,
            delay: delay,
            timeout: timeout,
            error: errorComponent,
            loading: loadingComponent
        };
    };
}

function createLifeCycle(hookName) {
    return function (fn, target) {
        if (target === void 0) { target = currentInstance; }
        if (!target) {
            process.env.NODE_ENV !== 'production' &&
                warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") +
                    "associated with. " +
                    "Lifecycle injection APIs can only be used during execution of setup().");
            return;
        }
        return injectHook(target, hookName, fn);
    };
}
function formatName(name) {
    if (name === 'beforeDestroy') {
        name = 'beforeUnmount';
    }
    else if (name === 'destroyed') {
        name = 'unmounted';
    }
    return "on".concat(name[0].toUpperCase() + name.slice(1));
}
function injectHook(instance, hookName, fn) {
    var options = instance.$options;
    options[hookName] = mergeLifecycleHook(options[hookName], fn);
}
var onBeforeMount = createLifeCycle('beforeMount');
var onMounted = createLifeCycle('mounted');
var onBeforeUpdate = createLifeCycle('beforeUpdate');
var onUpdated = createLifeCycle('updated');
var onBeforeUnmount = createLifeCycle('beforeDestroy');
var onUnmounted = createLifeCycle('destroyed');
var onActivated = createLifeCycle('activated');
var onDeactivated = createLifeCycle('deactivated');
var onServerPrefetch = createLifeCycle('serverPrefetch');
var onRenderTracked = createLifeCycle('renderTracked');
var onRenderTriggered = createLifeCycle('renderTriggered');
var injectErrorCapturedHook = createLifeCycle('errorCaptured');
function onErrorCaptured(hook, target) {
    if (target === void 0) { target = currentInstance; }
    injectErrorCapturedHook(hook, target);
}

/**
 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
 */
var version = '2.7.14';
/**
 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
 */
function defineComponent(options) {
    return options;
}

var seenObjects = new _Set();
/**
 * Recursively traverse an object to evoke all converted
 * getters, so that every nested property inside the object
 * is collected as a "deep" dependency.
 */
function traverse(val) {
    _traverse(val, seenObjects);
    seenObjects.clear();
    return val;
}
function _traverse(val, seen) {
    var i, keys;
    var isA = isArray(val);
    if ((!isA && !isObject(val)) ||
        val.__v_skip /* ReactiveFlags.SKIP */ ||
        Object.isFrozen(val) ||
        val instanceof VNode) {
        return;
    }
    if (val.__ob__) {
        var depId = val.__ob__.dep.id;
        if (seen.has(depId)) {
            return;
        }
        seen.add(depId);
    }
    if (isA) {
        i = val.length;
        while (i--)
            _traverse(val[i], seen);
    }
    else if (isRef(val)) {
        _traverse(val.value, seen);
    }
    else {
        keys = Object.keys(val);
        i = keys.length;
        while (i--)
            _traverse(val[keys[i]], seen);
    }
}

var uid$1 = 0;
/**
 * A watcher parses an expression, collects dependencies,
 * and fires callback when the expression value changes.
 * This is used for both the $watch() api and directives.
 * @internal
 */
var Watcher = /** @class */ (function () {
    function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {
        recordEffectScope(this, 
        // if the active effect scope is manually created (not a component scope),
        // prioritize it
        activeEffectScope && !activeEffectScope._vm
            ? activeEffectScope
            : vm
                ? vm._scope
                : undefined);
        if ((this.vm = vm) && isRenderWatcher) {
            vm._watcher = this;
        }
        // options
        if (options) {
            this.deep = !!options.deep;
            this.user = !!options.user;
            this.lazy = !!options.lazy;
            this.sync = !!options.sync;
            this.before = options.before;
            if (process.env.NODE_ENV !== 'production') {
                this.onTrack = options.onTrack;
                this.onTrigger = options.onTrigger;
            }
        }
        else {
            this.deep = this.user = this.lazy = this.sync = false;
        }
        this.cb = cb;
        this.id = ++uid$1; // uid for batching
        this.active = true;
        this.post = false;
        this.dirty = this.lazy; // for lazy watchers
        this.deps = [];
        this.newDeps = [];
        this.depIds = new _Set();
        this.newDepIds = new _Set();
        this.expression = process.env.NODE_ENV !== 'production' ? expOrFn.toString() : '';
        // parse expression for getter
        if (isFunction(expOrFn)) {
            this.getter = expOrFn;
        }
        else {
            this.getter = parsePath(expOrFn);
            if (!this.getter) {
                this.getter = noop;
                process.env.NODE_ENV !== 'production' &&
                    warn$2("Failed watching path: \"".concat(expOrFn, "\" ") +
                        'Watcher only accepts simple dot-delimited paths. ' +
                        'For full control, use a function instead.', vm);
            }
        }
        this.value = this.lazy ? undefined : this.get();
    }
    /**
     * Evaluate the getter, and re-collect dependencies.
     */
    Watcher.prototype.get = function () {
        pushTarget(this);
        var value;
        var vm = this.vm;
        try {
            value = this.getter.call(vm, vm);
        }
        catch (e) {
            if (this.user) {
                handleError(e, vm, "getter for watcher \"".concat(this.expression, "\""));
            }
            else {
                throw e;
            }
        }
        finally {
            // "touch" every property so they are all tracked as
            // dependencies for deep watching
            if (this.deep) {
                traverse(value);
            }
            popTarget();
            this.cleanupDeps();
        }
        return value;
    };
    /**
     * Add a dependency to this directive.
     */
    Watcher.prototype.addDep = function (dep) {
        var id = dep.id;
        if (!this.newDepIds.has(id)) {
            this.newDepIds.add(id);
            this.newDeps.push(dep);
            if (!this.depIds.has(id)) {
                dep.addSub(this);
            }
        }
    };
    /**
     * Clean up for dependency collection.
     */
    Watcher.prototype.cleanupDeps = function () {
        var i = this.deps.length;
        while (i--) {
            var dep = this.deps[i];
            if (!this.newDepIds.has(dep.id)) {
                dep.removeSub(this);
            }
        }
        var tmp = this.depIds;
        this.depIds = this.newDepIds;
        this.newDepIds = tmp;
        this.newDepIds.clear();
        tmp = this.deps;
        this.deps = this.newDeps;
        this.newDeps = tmp;
        this.newDeps.length = 0;
    };
    /**
     * Subscriber interface.
     * Will be called when a dependency changes.
     */
    Watcher.prototype.update = function () {
        /* istanbul ignore else */
        if (this.lazy) {
            this.dirty = true;
        }
        else if (this.sync) {
            this.run();
        }
        else {
            queueWatcher(this);
        }
    };
    /**
     * Scheduler job interface.
     * Will be called by the scheduler.
     */
    Watcher.prototype.run = function () {
        if (this.active) {
            var value = this.get();
            if (value !== this.value ||
                // Deep watchers and watchers on Object/Arrays should fire even
                // when the value is the same, because the value may
                // have mutated.
                isObject(value) ||
                this.deep) {
                // set new value
                var oldValue = this.value;
                this.value = value;
                if (this.user) {
                    var info = "callback for watcher \"".concat(this.expression, "\"");
                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
                }
                else {
                    this.cb.call(this.vm, value, oldValue);
                }
            }
        }
    };
    /**
     * Evaluate the value of the watcher.
     * This only gets called for lazy watchers.
     */
    Watcher.prototype.evaluate = function () {
        this.value = this.get();
        this.dirty = false;
    };
    /**
     * Depend on all deps collected by this watcher.
     */
    Watcher.prototype.depend = function () {
        var i = this.deps.length;
        while (i--) {
            this.deps[i].depend();
        }
    };
    /**
     * Remove self from all dependencies' subscriber list.
     */
    Watcher.prototype.teardown = function () {
        if (this.vm && !this.vm._isBeingDestroyed) {
            remove$2(this.vm._scope.effects, this);
        }
        if (this.active) {
            var i = this.deps.length;
            while (i--) {
                this.deps[i].removeSub(this);
            }
            this.active = false;
            if (this.onStop) {
                this.onStop();
            }
        }
    };
    return Watcher;
}());

var sharedPropertyDefinition = {
    enumerable: true,
    configurable: true,
    get: noop,
    set: noop
};
function proxy(target, sourceKey, key) {
    sharedPropertyDefinition.get = function proxyGetter() {
        return this[sourceKey][key];
    };
    sharedPropertyDefinition.set = function proxySetter(val) {
        this[sourceKey][key] = val;
    };
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function initState(vm) {
    var opts = vm.$options;
    if (opts.props)
        initProps$1(vm, opts.props);
    // Composition API
    initSetup(vm);
    if (opts.methods)
        initMethods(vm, opts.methods);
    if (opts.data) {
        initData(vm);
    }
    else {
        var ob = observe((vm._data = {}));
        ob && ob.vmCount++;
    }
    if (opts.computed)
        initComputed$1(vm, opts.computed);
    if (opts.watch && opts.watch !== nativeWatch) {
        initWatch(vm, opts.watch);
    }
}
function initProps$1(vm, propsOptions) {
    var propsData = vm.$options.propsData || {};
    var props = (vm._props = shallowReactive({}));
    // cache prop keys so that future props updates can iterate using Array
    // instead of dynamic object key enumeration.
    var keys = (vm.$options._propKeys = []);
    var isRoot = !vm.$parent;
    // root instance props should be converted
    if (!isRoot) {
        toggleObserving(false);
    }
    var _loop_1 = function (key) {
        keys.push(key);
        var value = validateProp(key, propsOptions, propsData, vm);
        /* istanbul ignore else */
        if (process.env.NODE_ENV !== 'production') {
            var hyphenatedKey = hyphenate(key);
            if (isReservedAttribute(hyphenatedKey) ||
                config.isReservedAttr(hyphenatedKey)) {
                warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm);
            }
            defineReactive(props, key, value, function () {
                if (!isRoot && !isUpdatingChildComponent) {
                    warn$2("Avoid mutating a prop directly since the value will be " +
                        "overwritten whenever the parent component re-renders. " +
                        "Instead, use a data or computed property based on the prop's " +
                        "value. Prop being mutated: \"".concat(key, "\""), vm);
                }
            });
        }
        else {
            defineReactive(props, key, value);
        }
        // static props are already proxied on the component's prototype
        // during Vue.extend(). We only need to proxy props defined at
        // instantiation here.
        if (!(key in vm)) {
            proxy(vm, "_props", key);
        }
    };
    for (var key in propsOptions) {
        _loop_1(key);
    }
    toggleObserving(true);
}
function initData(vm) {
    var data = vm.$options.data;
    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
    if (!isPlainObject(data)) {
        data = {};
        process.env.NODE_ENV !== 'production' &&
            warn$2('data functions should return an object:\n' +
                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
    }
    // proxy data on instance
    var keys = Object.keys(data);
    var props = vm.$options.props;
    var methods = vm.$options.methods;
    var i = keys.length;
    while (i--) {
        var key = keys[i];
        if (process.env.NODE_ENV !== 'production') {
            if (methods && hasOwn(methods, key)) {
                warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm);
            }
        }
        if (props && hasOwn(props, key)) {
            process.env.NODE_ENV !== 'production' &&
                warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") +
                    "Use prop default value instead.", vm);
        }
        else if (!isReserved(key)) {
            proxy(vm, "_data", key);
        }
    }
    // observe data
    var ob = observe(data);
    ob && ob.vmCount++;
}
function getData(data, vm) {
    // #7573 disable dep collection when invoking data getters
    pushTarget();
    try {
        return data.call(vm, vm);
    }
    catch (e) {
        handleError(e, vm, "data()");
        return {};
    }
    finally {
        popTarget();
    }
}
var computedWatcherOptions = { lazy: true };
function initComputed$1(vm, computed) {
    // $flow-disable-line
    var watchers = (vm._computedWatchers = Object.create(null));
    // computed properties are just getters during SSR
    var isSSR = isServerRendering();
    for (var key in computed) {
        var userDef = computed[key];
        var getter = isFunction(userDef) ? userDef : userDef.get;
        if (process.env.NODE_ENV !== 'production' && getter == null) {
            warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm);
        }
        if (!isSSR) {
            // create internal watcher for the computed property.
            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
        }
        // component-defined computed properties are already defined on the
        // component prototype. We only need to define computed properties defined
        // at instantiation here.
        if (!(key in vm)) {
            defineComputed(vm, key, userDef);
        }
        else if (process.env.NODE_ENV !== 'production') {
            if (key in vm.$data) {
                warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm);
            }
            else if (vm.$options.props && key in vm.$options.props) {
                warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm);
            }
            else if (vm.$options.methods && key in vm.$options.methods) {
                warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm);
            }
        }
    }
}
function defineComputed(target, key, userDef) {
    var shouldCache = !isServerRendering();
    if (isFunction(userDef)) {
        sharedPropertyDefinition.get = shouldCache
            ? createComputedGetter(key)
            : createGetterInvoker(userDef);
        sharedPropertyDefinition.set = noop;
    }
    else {
        sharedPropertyDefinition.get = userDef.get
            ? shouldCache && userDef.cache !== false
                ? createComputedGetter(key)
                : createGetterInvoker(userDef.get)
            : noop;
        sharedPropertyDefinition.set = userDef.set || noop;
    }
    if (process.env.NODE_ENV !== 'production' && sharedPropertyDefinition.set === noop) {
        sharedPropertyDefinition.set = function () {
            warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this);
        };
    }
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function createComputedGetter(key) {
    return function computedGetter() {
        var watcher = this._computedWatchers && this._computedWatchers[key];
        if (watcher) {
            if (watcher.dirty) {
                watcher.evaluate();
            }
            if (Dep.target) {
                if (process.env.NODE_ENV !== 'production' && Dep.target.onTrack) {
                    Dep.target.onTrack({
                        effect: Dep.target,
                        target: this,
                        type: "get" /* TrackOpTypes.GET */,
                        key: key
                    });
                }
                watcher.depend();
            }
            return watcher.value;
        }
    };
}
function createGetterInvoker(fn) {
    return function computedGetter() {
        return fn.call(this, this);
    };
}
function initMethods(vm, methods) {
    var props = vm.$options.props;
    for (var key in methods) {
        if (process.env.NODE_ENV !== 'production') {
            if (typeof methods[key] !== 'function') {
                warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") +
                    "Did you reference the function correctly?", vm);
            }
            if (props && hasOwn(props, key)) {
                warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm);
            }
            if (key in vm && isReserved(key)) {
                warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") +
                    "Avoid defining component methods that start with _ or $.");
            }
        }
        vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);
    }
}
function initWatch(vm, watch) {
    for (var key in watch) {
        var handler = watch[key];
        if (isArray(handler)) {
            for (var i = 0; i < handler.length; i++) {
                createWatcher(vm, key, handler[i]);
            }
        }
        else {
            createWatcher(vm, key, handler);
        }
    }
}
function createWatcher(vm, expOrFn, handler, options) {
    if (isPlainObject(handler)) {
        options = handler;
        handler = handler.handler;
    }
    if (typeof handler === 'string') {
        handler = vm[handler];
    }
    return vm.$watch(expOrFn, handler, options);
}
function stateMixin(Vue) {
    // flow somehow has problems with directly declared definition object
    // when using Object.defineProperty, so we have to procedurally build up
    // the object here.
    var dataDef = {};
    dataDef.get = function () {
        return this._data;
    };
    var propsDef = {};
    propsDef.get = function () {
        return this._props;
    };
    if (process.env.NODE_ENV !== 'production') {
        dataDef.set = function () {
            warn$2('Avoid replacing instance root $data. ' +
                'Use nested data properties instead.', this);
        };
        propsDef.set = function () {
            warn$2("$props is readonly.", this);
        };
    }
    Object.defineProperty(Vue.prototype, '$data', dataDef);
    Object.defineProperty(Vue.prototype, '$props', propsDef);
    Vue.prototype.$set = set;
    Vue.prototype.$delete = del;
    Vue.prototype.$watch = function (expOrFn, cb, options) {
        var vm = this;
        if (isPlainObject(cb)) {
            return createWatcher(vm, expOrFn, cb, options);
        }
        options = options || {};
        options.user = true;
        var watcher = new Watcher(vm, expOrFn, cb, options);
        if (options.immediate) {
            var info = "callback for immediate watcher \"".concat(watcher.expression, "\"");
            pushTarget();
            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
            popTarget();
        }
        return function unwatchFn() {
            watcher.teardown();
        };
    };
}

function initProvide(vm) {
    var provideOption = vm.$options.provide;
    if (provideOption) {
        var provided = isFunction(provideOption)
            ? provideOption.call(vm)
            : provideOption;
        if (!isObject(provided)) {
            return;
        }
        var source = resolveProvided(vm);
        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
        // iterate the keys ourselves.
        var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
        for (var i = 0; i < keys.length; i++) {
            var key = keys[i];
            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
        }
    }
}
function initInjections(vm) {
    var result = resolveInject(vm.$options.inject, vm);
    if (result) {
        toggleObserving(false);
        Object.keys(result).forEach(function (key) {
            /* istanbul ignore else */
            if (process.env.NODE_ENV !== 'production') {
                defineReactive(vm, key, result[key], function () {
                    warn$2("Avoid mutating an injected value directly since the changes will be " +
                        "overwritten whenever the provided component re-renders. " +
                        "injection being mutated: \"".concat(key, "\""), vm);
                });
            }
            else {
                defineReactive(vm, key, result[key]);
            }
        });
        toggleObserving(true);
    }
}
function resolveInject(inject, vm) {
    if (inject) {
        // inject is :any because flow is not smart enough to figure out cached
        var result = Object.create(null);
        var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
        for (var i = 0; i < keys.length; i++) {
            var key = keys[i];
            // #6574 in case the inject object is observed...
            if (key === '__ob__')
                continue;
            var provideKey = inject[key].from;
            if (provideKey in vm._provided) {
                result[key] = vm._provided[provideKey];
            }
            else if ('default' in inject[key]) {
                var provideDefault = inject[key].default;
                result[key] = isFunction(provideDefault)
                    ? provideDefault.call(vm)
                    : provideDefault;
            }
            else if (process.env.NODE_ENV !== 'production') {
                warn$2("Injection \"".concat(key, "\" not found"), vm);
            }
        }
        return result;
    }
}

var uid = 0;
function initMixin$1(Vue) {
    Vue.prototype._init = function (options) {
        var vm = this;
        // a uid
        vm._uid = uid++;
        var startTag, endTag;
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
            startTag = "vue-perf-start:".concat(vm._uid);
            endTag = "vue-perf-end:".concat(vm._uid);
            mark(startTag);
        }
        // a flag to mark this as a Vue instance without having to do instanceof
        // check
        vm._isVue = true;
        // avoid instances from being observed
        vm.__v_skip = true;
        // effect scope
        vm._scope = new EffectScope(true /* detached */);
        vm._scope._vm = true;
        // merge options
        if (options && options._isComponent) {
            // optimize internal component instantiation
            // since dynamic options merging is pretty slow, and none of the
            // internal component options needs special treatment.
            initInternalComponent(vm, options);
        }
        else {
            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
        }
        /* istanbul ignore else */
        if (process.env.NODE_ENV !== 'production') {
            initProxy(vm);
        }
        else {
            vm._renderProxy = vm;
        }
        // expose real self
        vm._self = vm;
        initLifecycle(vm);
        initEvents(vm);
        initRender(vm);
        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
        initInjections(vm); // resolve injections before data/props
        initState(vm);
        initProvide(vm); // resolve provide after data/props
        callHook$1(vm, 'created');
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
            vm._name = formatComponentName(vm, false);
            mark(endTag);
            measure("vue ".concat(vm._name, " init"), startTag, endTag);
        }
        if (vm.$options.el) {
            vm.$mount(vm.$options.el);
        }
    };
}
function initInternalComponent(vm, options) {
    var opts = (vm.$options = Object.create(vm.constructor.options));
    // doing this because it's faster than dynamic enumeration.
    var parentVnode = options._parentVnode;
    opts.parent = options.parent;
    opts._parentVnode = parentVnode;
    var vnodeComponentOptions = parentVnode.componentOptions;
    opts.propsData = vnodeComponentOptions.propsData;
    opts._parentListeners = vnodeComponentOptions.listeners;
    opts._renderChildren = vnodeComponentOptions.children;
    opts._componentTag = vnodeComponentOptions.tag;
    if (options.render) {
        opts.render = options.render;
        opts.staticRenderFns = options.staticRenderFns;
    }
}
function resolveConstructorOptions(Ctor) {
    var options = Ctor.options;
    if (Ctor.super) {
        var superOptions = resolveConstructorOptions(Ctor.super);
        var cachedSuperOptions = Ctor.superOptions;
        if (superOptions !== cachedSuperOptions) {
            // super option changed,
            // need to resolve new options.
            Ctor.superOptions = superOptions;
            // check if there are any late-modified/attached options (#4976)
            var modifiedOptions = resolveModifiedOptions(Ctor);
            // update base extend options
            if (modifiedOptions) {
                extend(Ctor.extendOptions, modifiedOptions);
            }
            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
            if (options.name) {
                options.components[options.name] = Ctor;
            }
        }
    }
    return options;
}
function resolveModifiedOptions(Ctor) {
    var modified;
    var latest = Ctor.options;
    var sealed = Ctor.sealedOptions;
    for (var key in latest) {
        if (latest[key] !== sealed[key]) {
            if (!modified)
                modified = {};
            modified[key] = latest[key];
        }
    }
    return modified;
}

function FunctionalRenderContext(data, props, children, parent, Ctor) {
    var _this = this;
    var options = Ctor.options;
    // ensure the createElement function in functional components
    // gets a unique context - this is necessary for correct named slot check
    var contextVm;
    if (hasOwn(parent, '_uid')) {
        contextVm = Object.create(parent);
        contextVm._original = parent;
    }
    else {
        // the context vm passed in is a functional context as well.
        // in this case we want to make sure we are able to get a hold to the
        // real context instance.
        contextVm = parent;
        // @ts-ignore
        parent = parent._original;
    }
    var isCompiled = isTrue(options._compiled);
    var needNormalization = !isCompiled;
    this.data = data;
    this.props = props;
    this.children = children;
    this.parent = parent;
    this.listeners = data.on || emptyObject;
    this.injections = resolveInject(options.inject, parent);
    this.slots = function () {
        if (!_this.$slots) {
            normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));
        }
        return _this.$slots;
    };
    Object.defineProperty(this, 'scopedSlots', {
        enumerable: true,
        get: function () {
            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
        }
    });
    // support for compiled functional template
    if (isCompiled) {
        // exposing $options for renderStatic()
        this.$options = options;
        // pre-resolve slots for renderSlot()
        this.$slots = this.slots();
        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
    }
    if (options._scopeId) {
        this._c = function (a, b, c, d) {
            var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
            if (vnode && !isArray(vnode)) {
                vnode.fnScopeId = options._scopeId;
                vnode.fnContext = parent;
            }
            return vnode;
        };
    }
    else {
        this._c = function (a, b, c, d) {
            return createElement$1(contextVm, a, b, c, d, needNormalization);
        };
    }
}
installRenderHelpers(FunctionalRenderContext.prototype);
function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
    var options = Ctor.options;
    var props = {};
    var propOptions = options.props;
    if (isDef(propOptions)) {
        for (var key in propOptions) {
            props[key] = validateProp(key, propOptions, propsData || emptyObject);
        }
    }
    else {
        if (isDef(data.attrs))
            mergeProps(props, data.attrs);
        if (isDef(data.props))
            mergeProps(props, data.props);
    }
    var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
    var vnode = options.render.call(null, renderContext._c, renderContext);
    if (vnode instanceof VNode) {
        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
    }
    else if (isArray(vnode)) {
        var vnodes = normalizeChildren(vnode) || [];
        var res = new Array(vnodes.length);
        for (var i = 0; i < vnodes.length; i++) {
            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
        }
        return res;
    }
}
function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
    // #7817 clone node before setting fnContext, otherwise if the node is reused
    // (e.g. it was from a cached normal slot) the fnContext causes named slots
    // that should not be matched to match.
    var clone = cloneVNode(vnode);
    clone.fnContext = contextVm;
    clone.fnOptions = options;
    if (process.env.NODE_ENV !== 'production') {
        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
            renderContext;
    }
    if (data.slot) {
        (clone.data || (clone.data = {})).slot = data.slot;
    }
    return clone;
}
function mergeProps(to, from) {
    for (var key in from) {
        to[camelize(key)] = from[key];
    }
}

function getComponentName(options) {
    return options.name || options.__name || options._componentTag;
}
// inline hooks to be invoked on component VNodes during patch
var componentVNodeHooks = {
    init: function (vnode, hydrating) {
        if (vnode.componentInstance &&
            !vnode.componentInstance._isDestroyed &&
            vnode.data.keepAlive) {
            // kept-alive components, treat as a patch
            var mountedNode = vnode; // work around flow
            componentVNodeHooks.prepatch(mountedNode, mountedNode);
        }
        else {
            var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
        }
    },
    prepatch: function (oldVnode, vnode) {
        var options = vnode.componentOptions;
        var child = (vnode.componentInstance = oldVnode.componentInstance);
        updateChildComponent(child, options.propsData, // updated props
        options.listeners, // updated listeners
        vnode, // new parent vnode
        options.children // new children
        );
    },
    insert: function (vnode) {
        var context = vnode.context, componentInstance = vnode.componentInstance;
        if (!componentInstance._isMounted) {
            componentInstance._isMounted = true;
            callHook$1(componentInstance, 'mounted');
        }
        if (vnode.data.keepAlive) {
            if (context._isMounted) {
                // vue-router#1212
                // During updates, a kept-alive component's child components may
                // change, so directly walking the tree here may call activated hooks
                // on incorrect children. Instead we push them into a queue which will
                // be processed after the whole patch process ended.
                queueActivatedComponent(componentInstance);
            }
            else {
                activateChildComponent(componentInstance, true /* direct */);
            }
        }
    },
    destroy: function (vnode) {
        var componentInstance = vnode.componentInstance;
        if (!componentInstance._isDestroyed) {
            if (!vnode.data.keepAlive) {
                componentInstance.$destroy();
            }
            else {
                deactivateChildComponent(componentInstance, true /* direct */);
            }
        }
    }
};
var hooksToMerge = Object.keys(componentVNodeHooks);
function createComponent(Ctor, data, context, children, tag) {
    if (isUndef(Ctor)) {
        return;
    }
    var baseCtor = context.$options._base;
    // plain options object: turn it into a constructor
    if (isObject(Ctor)) {
        Ctor = baseCtor.extend(Ctor);
    }
    // if at this stage it's not a constructor or an async component factory,
    // reject.
    if (typeof Ctor !== 'function') {
        if (process.env.NODE_ENV !== 'production') {
            warn$2("Invalid Component definition: ".concat(String(Ctor)), context);
        }
        return;
    }
    // async component
    var asyncFactory;
    // @ts-expect-error
    if (isUndef(Ctor.cid)) {
        asyncFactory = Ctor;
        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
        if (Ctor === undefined) {
            // return a placeholder node for async component, which is rendered
            // as a comment node but preserves all the raw information for the node.
            // the information will be used for async server-rendering and hydration.
            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
        }
    }
    data = data || {};
    // resolve constructor options in case global mixins are applied after
    // component constructor creation
    resolveConstructorOptions(Ctor);
    // transform component v-model data into props & events
    if (isDef(data.model)) {
        // @ts-expect-error
        transformModel(Ctor.options, data);
    }
    // extract props
    // @ts-expect-error
    var propsData = extractPropsFromVNodeData(data, Ctor, tag);
    // functional component
    // @ts-expect-error
    if (isTrue(Ctor.options.functional)) {
        return createFunctionalComponent(Ctor, propsData, data, context, children);
    }
    // extract listeners, since these needs to be treated as
    // child component listeners instead of DOM listeners
    var listeners = data.on;
    // replace with listeners with .native modifier
    // so it gets processed during parent component patch.
    data.on = data.nativeOn;
    // @ts-expect-error
    if (isTrue(Ctor.options.abstract)) {
        // abstract components do not keep anything
        // other than props & listeners & slot
        // work around flow
        var slot = data.slot;
        data = {};
        if (slot) {
            data.slot = slot;
        }
    }
    // install component management hooks onto the placeholder node
    installComponentHooks(data);
    // return a placeholder vnode
    // @ts-expect-error
    var name = getComponentName(Ctor.options) || tag;
    var vnode = new VNode(
    // @ts-expect-error
    "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 
    // @ts-expect-error
    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);
    return vnode;
}
function createComponentInstanceForVnode(
// we know it's MountedComponentVNode but flow doesn't
vnode, 
// activeInstance in lifecycle state
parent) {
    var options = {
        _isComponent: true,
        _parentVnode: vnode,
        parent: parent
    };
    // check inline-template render functions
    var inlineTemplate = vnode.data.inlineTemplate;
    if (isDef(inlineTemplate)) {
        options.render = inlineTemplate.render;
        options.staticRenderFns = inlineTemplate.staticRenderFns;
    }
    return new vnode.componentOptions.Ctor(options);
}
function installComponentHooks(data) {
    var hooks = data.hook || (data.hook = {});
    for (var i = 0; i < hooksToMerge.length; i++) {
        var key = hooksToMerge[i];
        var existing = hooks[key];
        var toMerge = componentVNodeHooks[key];
        // @ts-expect-error
        if (existing !== toMerge && !(existing && existing._merged)) {
            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
        }
    }
}
function mergeHook(f1, f2) {
    var merged = function (a, b) {
        // flow complains about extra args which is why we use any
        f1(a, b);
        f2(a, b);
    };
    merged._merged = true;
    return merged;
}
// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel(options, data) {
    var prop = (options.model && options.model.prop) || 'value';
    var event = (options.model && options.model.event) || 'input';
    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
    var on = data.on || (data.on = {});
    var existing = on[event];
    var callback = data.model.callback;
    if (isDef(existing)) {
        if (isArray(existing)
            ? existing.indexOf(callback) === -1
            : existing !== callback) {
            on[event] = [callback].concat(existing);
        }
    }
    else {
        on[event] = callback;
    }
}

var warn$2 = noop;
var tip = noop;
var generateComponentTrace; // work around flow check
var formatComponentName;
if (process.env.NODE_ENV !== 'production') {
    var hasConsole_1 = typeof console !== 'undefined';
    var classifyRE_1 = /(?:^|[-_])(\w)/g;
    var classify_1 = function (str) {
        return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');
    };
    warn$2 = function (msg, vm) {
        if (vm === void 0) { vm = currentInstance; }
        var trace = vm ? generateComponentTrace(vm) : '';
        if (config.warnHandler) {
            config.warnHandler.call(null, msg, vm, trace);
        }
        else if (hasConsole_1 && !config.silent) {
            console.error("[Vue warn]: ".concat(msg).concat(trace));
        }
    };
    tip = function (msg, vm) {
        if (hasConsole_1 && !config.silent) {
            console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : ''));
        }
    };
    formatComponentName = function (vm, includeFile) {
        if (vm.$root === vm) {
            return '<Root>';
        }
        var options = isFunction(vm) && vm.cid != null
            ? vm.options
            : vm._isVue
                ? vm.$options || vm.constructor.options
                : vm;
        var name = getComponentName(options);
        var file = options.__file;
        if (!name && file) {
            var match = file.match(/([^/\\]+)\.vue$/);
            name = match && match[1];
        }
        return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") +
            (file && includeFile !== false ? " at ".concat(file) : ''));
    };
    var repeat_1 = function (str, n) {
        var res = '';
        while (n) {
            if (n % 2 === 1)
                res += str;
            if (n > 1)
                str += str;
            n >>= 1;
        }
        return res;
    };
    generateComponentTrace = function (vm) {
        if (vm._isVue && vm.$parent) {
            var tree = [];
            var currentRecursiveSequence = 0;
            while (vm) {
                if (tree.length > 0) {
                    var last = tree[tree.length - 1];
                    if (last.constructor === vm.constructor) {
                        currentRecursiveSequence++;
                        vm = vm.$parent;
                        continue;
                    }
                    else if (currentRecursiveSequence > 0) {
                        tree[tree.length - 1] = [last, currentRecursiveSequence];
                        currentRecursiveSequence = 0;
                    }
                }
                tree.push(vm);
                vm = vm.$parent;
            }
            return ('\n\nfound in\n\n' +
                tree
                    .map(function (vm, i) {
                    return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)
                        ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)")
                        : formatComponentName(vm));
                })
                    .join('\n'));
        }
        else {
            return "\n\n(found in ".concat(formatComponentName(vm), ")");
        }
    };
}

/**
 * Option overwriting strategies are functions that handle
 * how to merge a parent option value and a child option
 * value into the final value.
 */
var strats = config.optionMergeStrategies;
/**
 * Options with restrictions
 */
if (process.env.NODE_ENV !== 'production') {
    strats.el = strats.propsData = function (parent, child, vm, key) {
        if (!vm) {
            warn$2("option \"".concat(key, "\" can only be used during instance ") +
                'creation with the `new` keyword.');
        }
        return defaultStrat(parent, child);
    };
}
/**
 * Helper that recursively merges two data objects together.
 */
function mergeData(to, from, recursive) {
    if (recursive === void 0) { recursive = true; }
    if (!from)
        return to;
    var key, toVal, fromVal;
    var keys = hasSymbol
        ? Reflect.ownKeys(from)
        : Object.keys(from);
    for (var i = 0; i < keys.length; i++) {
        key = keys[i];
        // in case the object is already observed...
        if (key === '__ob__')
            continue;
        toVal = to[key];
        fromVal = from[key];
        if (!recursive || !hasOwn(to, key)) {
            set(to, key, fromVal);
        }
        else if (toVal !== fromVal &&
            isPlainObject(toVal) &&
            isPlainObject(fromVal)) {
            mergeData(toVal, fromVal);
        }
    }
    return to;
}
/**
 * Data
 */
function mergeDataOrFn(parentVal, childVal, vm) {
    if (!vm) {
        // in a Vue.extend merge, both should be functions
        if (!childVal) {
            return parentVal;
        }
        if (!parentVal) {
            return childVal;
        }
        // when parentVal & childVal are both present,
        // we need to return a function that returns the
        // merged result of both functions... no need to
        // check if parentVal is a function here because
        // it has to be a function to pass previous merges.
        return function mergedDataFn() {
            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
        };
    }
    else {
        return function mergedInstanceDataFn() {
            // instance merge
            var instanceData = isFunction(childVal)
                ? childVal.call(vm, vm)
                : childVal;
            var defaultData = isFunction(parentVal)
                ? parentVal.call(vm, vm)
                : parentVal;
            if (instanceData) {
                return mergeData(instanceData, defaultData);
            }
            else {
                return defaultData;
            }
        };
    }
}
strats.data = function (parentVal, childVal, vm) {
    if (!vm) {
        if (childVal && typeof childVal !== 'function') {
            process.env.NODE_ENV !== 'production' &&
                warn$2('The "data" option should be a function ' +
                    'that returns a per-instance value in component ' +
                    'definitions.', vm);
            return parentVal;
        }
        return mergeDataOrFn(parentVal, childVal);
    }
    return mergeDataOrFn(parentVal, childVal, vm);
};
/**
 * Hooks and props are merged as arrays.
 */
function mergeLifecycleHook(parentVal, childVal) {
    var res = childVal
        ? parentVal
            ? parentVal.concat(childVal)
            : isArray(childVal)
                ? childVal
                : [childVal]
        : parentVal;
    return res ? dedupeHooks(res) : res;
}
function dedupeHooks(hooks) {
    var res = [];
    for (var i = 0; i < hooks.length; i++) {
        if (res.indexOf(hooks[i]) === -1) {
            res.push(hooks[i]);
        }
    }
    return res;
}
LIFECYCLE_HOOKS.forEach(function (hook) {
    strats[hook] = mergeLifecycleHook;
});
/**
 * Assets
 *
 * When a vm is present (instance creation), we need to do
 * a three-way merge between constructor options, instance
 * options and parent options.
 */
function mergeAssets(parentVal, childVal, vm, key) {
    var res = Object.create(parentVal || null);
    if (childVal) {
        process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);
        return extend(res, childVal);
    }
    else {
        return res;
    }
}
ASSET_TYPES.forEach(function (type) {
    strats[type + 's'] = mergeAssets;
});
/**
 * Watchers.
 *
 * Watchers hashes should not overwrite one
 * another, so we merge them as arrays.
 */
strats.watch = function (parentVal, childVal, vm, key) {
    // work around Firefox's Object.prototype.watch...
    //@ts-expect-error work around
    if (parentVal === nativeWatch)
        parentVal = undefined;
    //@ts-expect-error work around
    if (childVal === nativeWatch)
        childVal = undefined;
    /* istanbul ignore if */
    if (!childVal)
        return Object.create(parentVal || null);
    if (process.env.NODE_ENV !== 'production') {
        assertObjectType(key, childVal, vm);
    }
    if (!parentVal)
        return childVal;
    var ret = {};
    extend(ret, parentVal);
    for (var key_1 in childVal) {
        var parent_1 = ret[key_1];
        var child = childVal[key_1];
        if (parent_1 && !isArray(parent_1)) {
            parent_1 = [parent_1];
        }
        ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];
    }
    return ret;
};
/**
 * Other object hashes.
 */
strats.props =
    strats.methods =
        strats.inject =
            strats.computed =
                function (parentVal, childVal, vm, key) {
                    if (childVal && process.env.NODE_ENV !== 'production') {
                        assertObjectType(key, childVal, vm);
                    }
                    if (!parentVal)
                        return childVal;
                    var ret = Object.create(null);
                    extend(ret, parentVal);
                    if (childVal)
                        extend(ret, childVal);
                    return ret;
                };
strats.provide = function (parentVal, childVal) {
    if (!parentVal)
        return childVal;
    return function () {
        var ret = Object.create(null);
        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
        if (childVal) {
            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
            );
        }
        return ret;
    };
};
/**
 * Default strategy.
 */
var defaultStrat = function (parentVal, childVal) {
    return childVal === undefined ? parentVal : childVal;
};
/**
 * Validate component names
 */
function checkComponents(options) {
    for (var key in options.components) {
        validateComponentName(key);
    }
}
function validateComponentName(name) {
    if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) {
        warn$2('Invalid component name: "' +
            name +
            '". Component names ' +
            'should conform to valid custom element name in html5 specification.');
    }
    if (isBuiltInTag(name) || config.isReservedTag(name)) {
        warn$2('Do not use built-in or reserved HTML elements as component ' +
            'id: ' +
            name);
    }
}
/**
 * Ensure all props option syntax are normalized into the
 * Object-based format.
 */
function normalizeProps(options, vm) {
    var props = options.props;
    if (!props)
        return;
    var res = {};
    var i, val, name;
    if (isArray(props)) {
        i = props.length;
        while (i--) {
            val = props[i];
            if (typeof val === 'string') {
                name = camelize(val);
                res[name] = { type: null };
            }
            else if (process.env.NODE_ENV !== 'production') {
                warn$2('props must be strings when using array syntax.');
            }
        }
    }
    else if (isPlainObject(props)) {
        for (var key in props) {
            val = props[key];
            name = camelize(key);
            res[name] = isPlainObject(val) ? val : { type: val };
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$2("Invalid value for option \"props\": expected an Array or an Object, " +
            "but got ".concat(toRawType(props), "."), vm);
    }
    options.props = res;
}
/**
 * Normalize all injections into Object-based format
 */
function normalizeInject(options, vm) {
    var inject = options.inject;
    if (!inject)
        return;
    var normalized = (options.inject = {});
    if (isArray(inject)) {
        for (var i = 0; i < inject.length; i++) {
            normalized[inject[i]] = { from: inject[i] };
        }
    }
    else if (isPlainObject(inject)) {
        for (var key in inject) {
            var val = inject[key];
            normalized[key] = isPlainObject(val)
                ? extend({ from: key }, val)
                : { from: val };
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$2("Invalid value for option \"inject\": expected an Array or an Object, " +
            "but got ".concat(toRawType(inject), "."), vm);
    }
}
/**
 * Normalize raw function directives into object format.
 */
function normalizeDirectives$1(options) {
    var dirs = options.directives;
    if (dirs) {
        for (var key in dirs) {
            var def = dirs[key];
            if (isFunction(def)) {
                dirs[key] = { bind: def, update: def };
            }
        }
    }
}
function assertObjectType(name, value, vm) {
    if (!isPlainObject(value)) {
        warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") +
            "but got ".concat(toRawType(value), "."), vm);
    }
}
/**
 * Merge two option objects into a new one.
 * Core utility used in both instantiation and inheritance.
 */
function mergeOptions(parent, child, vm) {
    if (process.env.NODE_ENV !== 'production') {
        checkComponents(child);
    }
    if (isFunction(child)) {
        // @ts-expect-error
        child = child.options;
    }
    normalizeProps(child, vm);
    normalizeInject(child, vm);
    normalizeDirectives$1(child);
    // Apply extends and mixins on the child options,
    // but only if it is a raw options object that isn't
    // the result of another mergeOptions call.
    // Only merged options has the _base property.
    if (!child._base) {
        if (child.extends) {
            parent = mergeOptions(parent, child.extends, vm);
        }
        if (child.mixins) {
            for (var i = 0, l = child.mixins.length; i < l; i++) {
                parent = mergeOptions(parent, child.mixins[i], vm);
            }
        }
    }
    var options = {};
    var key;
    for (key in parent) {
        mergeField(key);
    }
    for (key in child) {
        if (!hasOwn(parent, key)) {
            mergeField(key);
        }
    }
    function mergeField(key) {
        var strat = strats[key] || defaultStrat;
        options[key] = strat(parent[key], child[key], vm, key);
    }
    return options;
}
/**
 * Resolve an asset.
 * This function is used because child instances need access
 * to assets defined in its ancestor chain.
 */
function resolveAsset(options, type, id, warnMissing) {
    /* istanbul ignore if */
    if (typeof id !== 'string') {
        return;
    }
    var assets = options[type];
    // check local registration variations first
    if (hasOwn(assets, id))
        return assets[id];
    var camelizedId = camelize(id);
    if (hasOwn(assets, camelizedId))
        return assets[camelizedId];
    var PascalCaseId = capitalize(camelizedId);
    if (hasOwn(assets, PascalCaseId))
        return assets[PascalCaseId];
    // fallback to prototype chain
    var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
    if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {
        warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
    }
    return res;
}

function validateProp(key, propOptions, propsData, vm) {
    var prop = propOptions[key];
    var absent = !hasOwn(propsData, key);
    var value = propsData[key];
    // boolean casting
    var booleanIndex = getTypeIndex(Boolean, prop.type);
    if (booleanIndex > -1) {
        if (absent && !hasOwn(prop, 'default')) {
            value = false;
        }
        else if (value === '' || value === hyphenate(key)) {
            // only cast empty string / same name to boolean if
            // boolean has higher priority
            var stringIndex = getTypeIndex(String, prop.type);
            if (stringIndex < 0 || booleanIndex < stringIndex) {
                value = true;
            }
        }
    }
    // check default value
    if (value === undefined) {
        value = getPropDefaultValue(vm, prop, key);
        // since the default value is a fresh copy,
        // make sure to observe it.
        var prevShouldObserve = shouldObserve;
        toggleObserving(true);
        observe(value);
        toggleObserving(prevShouldObserve);
    }
    if (process.env.NODE_ENV !== 'production') {
        assertProp(prop, key, value, vm, absent);
    }
    return value;
}
/**
 * Get the default value of a prop.
 */
function getPropDefaultValue(vm, prop, key) {
    // no default, return undefined
    if (!hasOwn(prop, 'default')) {
        return undefined;
    }
    var def = prop.default;
    // warn against non-factory defaults for Object & Array
    if (process.env.NODE_ENV !== 'production' && isObject(def)) {
        warn$2('Invalid default value for prop "' +
            key +
            '": ' +
            'Props with type Object/Array must use a factory function ' +
            'to return the default value.', vm);
    }
    // the raw prop value was also undefined from previous render,
    // return previous default value to avoid unnecessary watcher trigger
    if (vm &&
        vm.$options.propsData &&
        vm.$options.propsData[key] === undefined &&
        vm._props[key] !== undefined) {
        return vm._props[key];
    }
    // call factory function for non-Function types
    // a value is Function if its prototype is function even across different execution context
    return isFunction(def) && getType(prop.type) !== 'Function'
        ? def.call(vm)
        : def;
}
/**
 * Assert whether a prop is valid.
 */
function assertProp(prop, name, value, vm, absent) {
    if (prop.required && absent) {
        warn$2('Missing required prop: "' + name + '"', vm);
        return;
    }
    if (value == null && !prop.required) {
        return;
    }
    var type = prop.type;
    var valid = !type || type === true;
    var expectedTypes = [];
    if (type) {
        if (!isArray(type)) {
            type = [type];
        }
        for (var i = 0; i < type.length && !valid; i++) {
            var assertedType = assertType(value, type[i], vm);
            expectedTypes.push(assertedType.expectedType || '');
            valid = assertedType.valid;
        }
    }
    var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
    if (!valid && haveExpectedTypes) {
        warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
        return;
    }
    var validator = prop.validator;
    if (validator) {
        if (!validator(value)) {
            warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
        }
    }
}
var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
function assertType(value, type, vm) {
    var valid;
    var expectedType = getType(type);
    if (simpleCheckRE.test(expectedType)) {
        var t = typeof value;
        valid = t === expectedType.toLowerCase();
        // for primitive wrapper objects
        if (!valid && t === 'object') {
            valid = value instanceof type;
        }
    }
    else if (expectedType === 'Object') {
        valid = isPlainObject(value);
    }
    else if (expectedType === 'Array') {
        valid = isArray(value);
    }
    else {
        try {
            valid = value instanceof type;
        }
        catch (e) {
            warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
            valid = false;
        }
    }
    return {
        valid: valid,
        expectedType: expectedType
    };
}
var functionTypeCheckRE = /^\s*function (\w+)/;
/**
 * Use function string name to check built-in types,
 * because a simple equality check will fail when running
 * across different vms / iframes.
 */
function getType(fn) {
    var match = fn && fn.toString().match(functionTypeCheckRE);
    return match ? match[1] : '';
}
function isSameType(a, b) {
    return getType(a) === getType(b);
}
function getTypeIndex(type, expectedTypes) {
    if (!isArray(expectedTypes)) {
        return isSameType(expectedTypes, type) ? 0 : -1;
    }
    for (var i = 0, len = expectedTypes.length; i < len; i++) {
        if (isSameType(expectedTypes[i], type)) {
            return i;
        }
    }
    return -1;
}
function getInvalidTypeMessage(name, value, expectedTypes) {
    var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") +
        " Expected ".concat(expectedTypes.map(capitalize).join(', '));
    var expectedType = expectedTypes[0];
    var receivedType = toRawType(value);
    // check if we need to specify expected value
    if (expectedTypes.length === 1 &&
        isExplicable(expectedType) &&
        isExplicable(typeof value) &&
        !isBoolean(expectedType, receivedType)) {
        message += " with value ".concat(styleValue(value, expectedType));
    }
    message += ", got ".concat(receivedType, " ");
    // check if we need to specify received value
    if (isExplicable(receivedType)) {
        message += "with value ".concat(styleValue(value, receivedType), ".");
    }
    return message;
}
function styleValue(value, type) {
    if (type === 'String') {
        return "\"".concat(value, "\"");
    }
    else if (type === 'Number') {
        return "".concat(Number(value));
    }
    else {
        return "".concat(value);
    }
}
var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
function isExplicable(value) {
    return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });
}
function isBoolean() {
    var args = [];
    for (var _i = 0; _i < arguments.length; _i++) {
        args[_i] = arguments[_i];
    }
    return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });
}

function Vue(options) {
    if (process.env.NODE_ENV !== 'production' && !(this instanceof Vue)) {
        warn$2('Vue is a constructor and should be called with the `new` keyword');
    }
    this._init(options);
}
//@ts-expect-error Vue has function type
initMixin$1(Vue);
//@ts-expect-error Vue has function type
stateMixin(Vue);
//@ts-expect-error Vue has function type
eventsMixin(Vue);
//@ts-expect-error Vue has function type
lifecycleMixin(Vue);
//@ts-expect-error Vue has function type
renderMixin(Vue);

function initUse(Vue) {
    Vue.use = function (plugin) {
        var installedPlugins = this._installedPlugins || (this._installedPlugins = []);
        if (installedPlugins.indexOf(plugin) > -1) {
            return this;
        }
        // additional parameters
        var args = toArray(arguments, 1);
        args.unshift(this);
        if (isFunction(plugin.install)) {
            plugin.install.apply(plugin, args);
        }
        else if (isFunction(plugin)) {
            plugin.apply(null, args);
        }
        installedPlugins.push(plugin);
        return this;
    };
}

function initMixin(Vue) {
    Vue.mixin = function (mixin) {
        this.options = mergeOptions(this.options, mixin);
        return this;
    };
}

function initExtend(Vue) {
    /**
     * Each instance constructor, including Vue, has a unique
     * cid. This enables us to create wrapped "child
     * constructors" for prototypal inheritance and cache them.
     */
    Vue.cid = 0;
    var cid = 1;
    /**
     * Class inheritance
     */
    Vue.extend = function (extendOptions) {
        extendOptions = extendOptions || {};
        var Super = this;
        var SuperId = Super.cid;
        var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
        if (cachedCtors[SuperId]) {
            return cachedCtors[SuperId];
        }
        var name = getComponentName(extendOptions) || getComponentName(Super.options);
        if (process.env.NODE_ENV !== 'production' && name) {
            validateComponentName(name);
        }
        var Sub = function VueComponent(options) {
            this._init(options);
        };
        Sub.prototype = Object.create(Super.prototype);
        Sub.prototype.constructor = Sub;
        Sub.cid = cid++;
        Sub.options = mergeOptions(Super.options, extendOptions);
        Sub['super'] = Super;
        // For props and computed properties, we define the proxy getters on
        // the Vue instances at extension time, on the extended prototype. This
        // avoids Object.defineProperty calls for each instance created.
        if (Sub.options.props) {
            initProps(Sub);
        }
        if (Sub.options.computed) {
            initComputed(Sub);
        }
        // allow further extension/mixin/plugin usage
        Sub.extend = Super.extend;
        Sub.mixin = Super.mixin;
        Sub.use = Super.use;
        // create asset registers, so extended classes
        // can have their private assets too.
        ASSET_TYPES.forEach(function (type) {
            Sub[type] = Super[type];
        });
        // enable recursive self-lookup
        if (name) {
            Sub.options.components[name] = Sub;
        }
        // keep a reference to the super options at extension time.
        // later at instantiation we can check if Super's options have
        // been updated.
        Sub.superOptions = Super.options;
        Sub.extendOptions = extendOptions;
        Sub.sealedOptions = extend({}, Sub.options);
        // cache constructor
        cachedCtors[SuperId] = Sub;
        return Sub;
    };
}
function initProps(Comp) {
    var props = Comp.options.props;
    for (var key in props) {
        proxy(Comp.prototype, "_props", key);
    }
}
function initComputed(Comp) {
    var computed = Comp.options.computed;
    for (var key in computed) {
        defineComputed(Comp.prototype, key, computed[key]);
    }
}

function initAssetRegisters(Vue) {
    /**
     * Create asset registration methods.
     */
    ASSET_TYPES.forEach(function (type) {
        // @ts-expect-error function is not exact same type
        Vue[type] = function (id, definition) {
            if (!definition) {
                return this.options[type + 's'][id];
            }
            else {
                /* istanbul ignore if */
                if (process.env.NODE_ENV !== 'production' && type === 'component') {
                    validateComponentName(id);
                }
                if (type === 'component' && isPlainObject(definition)) {
                    // @ts-expect-error
                    definition.name = definition.name || id;
                    definition = this.options._base.extend(definition);
                }
                if (type === 'directive' && isFunction(definition)) {
                    definition = { bind: definition, update: definition };
                }
                this.options[type + 's'][id] = definition;
                return definition;
            }
        };
    });
}

function _getComponentName(opts) {
    return opts && (getComponentName(opts.Ctor.options) || opts.tag);
}
function matches(pattern, name) {
    if (isArray(pattern)) {
        return pattern.indexOf(name) > -1;
    }
    else if (typeof pattern === 'string') {
        return pattern.split(',').indexOf(name) > -1;
    }
    else if (isRegExp(pattern)) {
        return pattern.test(name);
    }
    /* istanbul ignore next */
    return false;
}
function pruneCache(keepAliveInstance, filter) {
    var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode;
    for (var key in cache) {
        var entry = cache[key];
        if (entry) {
            var name_1 = entry.name;
            if (name_1 && !filter(name_1)) {
                pruneCacheEntry(cache, key, keys, _vnode);
            }
        }
    }
}
function pruneCacheEntry(cache, key, keys, current) {
    var entry = cache[key];
    if (entry && (!current || entry.tag !== current.tag)) {
        // @ts-expect-error can be undefined
        entry.componentInstance.$destroy();
    }
    cache[key] = null;
    remove$2(keys, key);
}
var patternTypes = [String, RegExp, Array];
// TODO defineComponent
var KeepAlive = {
    name: 'keep-alive',
    abstract: true,
    props: {
        include: patternTypes,
        exclude: patternTypes,
        max: [String, Number]
    },
    methods: {
        cacheVNode: function () {
            var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;
            if (vnodeToCache) {
                var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;
                cache[keyToCache] = {
                    name: _getComponentName(componentOptions),
                    tag: tag,
                    componentInstance: componentInstance
                };
                keys.push(keyToCache);
                // prune oldest entry
                if (this.max && keys.length > parseInt(this.max)) {
                    pruneCacheEntry(cache, keys[0], keys, this._vnode);
                }
                this.vnodeToCache = null;
            }
        }
    },
    created: function () {
        this.cache = Object.create(null);
        this.keys = [];
    },
    destroyed: function () {
        for (var key in this.cache) {
            pruneCacheEntry(this.cache, key, this.keys);
        }
    },
    mounted: function () {
        var _this = this;
        this.cacheVNode();
        this.$watch('include', function (val) {
            pruneCache(_this, function (name) { return matches(val, name); });
        });
        this.$watch('exclude', function (val) {
            pruneCache(_this, function (name) { return !matches(val, name); });
        });
    },
    updated: function () {
        this.cacheVNode();
    },
    render: function () {
        var slot = this.$slots.default;
        var vnode = getFirstComponentChild(slot);
        var componentOptions = vnode && vnode.componentOptions;
        if (componentOptions) {
            // check pattern
            var name_2 = _getComponentName(componentOptions);
            var _a = this, include = _a.include, exclude = _a.exclude;
            if (
            // not included
            (include && (!name_2 || !matches(include, name_2))) ||
                // excluded
                (exclude && name_2 && matches(exclude, name_2))) {
                return vnode;
            }
            var _b = this, cache = _b.cache, keys = _b.keys;
            var key = vnode.key == null
                ? // same constructor may get registered as different local components
                    // so cid alone is not enough (#3269)
                    componentOptions.Ctor.cid +
                        (componentOptions.tag ? "::".concat(componentOptions.tag) : '')
                : vnode.key;
            if (cache[key]) {
                vnode.componentInstance = cache[key].componentInstance;
                // make current key freshest
                remove$2(keys, key);
                keys.push(key);
            }
            else {
                // delay setting the cache until update
                this.vnodeToCache = vnode;
                this.keyToCache = key;
            }
            // @ts-expect-error can vnode.data can be undefined
            vnode.data.keepAlive = true;
        }
        return vnode || (slot && slot[0]);
    }
};

var builtInComponents = {
    KeepAlive: KeepAlive
};

function initGlobalAPI(Vue) {
    // config
    var configDef = {};
    configDef.get = function () { return config; };
    if (process.env.NODE_ENV !== 'production') {
        configDef.set = function () {
            warn$2('Do not replace the Vue.config object, set individual fields instead.');
        };
    }
    Object.defineProperty(Vue, 'config', configDef);
    // exposed util methods.
    // NOTE: these are not considered part of the public API - avoid relying on
    // them unless you are aware of the risk.
    Vue.util = {
        warn: warn$2,
        extend: extend,
        mergeOptions: mergeOptions,
        defineReactive: defineReactive
    };
    Vue.set = set;
    Vue.delete = del;
    Vue.nextTick = nextTick;
    // 2.6 explicit observable API
    Vue.observable = function (obj) {
        observe(obj);
        return obj;
    };
    Vue.options = Object.create(null);
    ASSET_TYPES.forEach(function (type) {
        Vue.options[type + 's'] = Object.create(null);
    });
    // this is used to identify the "base" constructor to extend all plain-object
    // components with in Weex's multi-instance scenarios.
    Vue.options._base = Vue;
    extend(Vue.options.components, builtInComponents);
    initUse(Vue);
    initMixin(Vue);
    initExtend(Vue);
    initAssetRegisters(Vue);
}

initGlobalAPI(Vue);
Object.defineProperty(Vue.prototype, '$isServer', {
    get: isServerRendering
});
Object.defineProperty(Vue.prototype, '$ssrContext', {
    get: function () {
        /* istanbul ignore next */
        return this.$vnode && this.$vnode.ssrContext;
    }
});
// expose FunctionalRenderContext for ssr runtime helper installation
Object.defineProperty(Vue, 'FunctionalRenderContext', {
    value: FunctionalRenderContext
});
Vue.version = version;

// these are reserved for web because they are directly compiled away
// during template compilation
var isReservedAttr = makeMap('style,class');
// attributes that should be using props for binding
var acceptValue = makeMap('input,textarea,option,select,progress');
var mustUseProp = function (tag, type, attr) {
    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
        (attr === 'selected' && tag === 'option') ||
        (attr === 'checked' && tag === 'input') ||
        (attr === 'muted' && tag === 'video'));
};
var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
var convertEnumeratedValue = function (key, value) {
    return isFalsyAttrValue(value) || value === 'false'
        ? 'false'
        : // allow arbitrary string value for contenteditable
            key === 'contenteditable' && isValidContentEditableValue(value)
                ? value
                : 'true';
};
var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
    'required,reversed,scoped,seamless,selected,sortable,' +
    'truespeed,typemustmatch,visible');
var xlinkNS = 'http://www.w3.org/1999/xlink';
var isXlink = function (name) {
    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
};
var getXlinkProp = function (name) {
    return isXlink(name) ? name.slice(6, name.length) : '';
};
var isFalsyAttrValue = function (val) {
    return val == null || val === false;
};

function genClassForVnode(vnode) {
    var data = vnode.data;
    var parentNode = vnode;
    var childNode = vnode;
    while (isDef(childNode.componentInstance)) {
        childNode = childNode.componentInstance._vnode;
        if (childNode && childNode.data) {
            data = mergeClassData(childNode.data, data);
        }
    }
    // @ts-expect-error parentNode.parent not VNodeWithData
    while (isDef((parentNode = parentNode.parent))) {
        if (parentNode && parentNode.data) {
            data = mergeClassData(data, parentNode.data);
        }
    }
    return renderClass(data.staticClass, data.class);
}
function mergeClassData(child, parent) {
    return {
        staticClass: concat(child.staticClass, parent.staticClass),
        class: isDef(child.class) ? [child.class, parent.class] : parent.class
    };
}
function renderClass(staticClass, dynamicClass) {
    if (isDef(staticClass) || isDef(dynamicClass)) {
        return concat(staticClass, stringifyClass(dynamicClass));
    }
    /* istanbul ignore next */
    return '';
}
function concat(a, b) {
    return a ? (b ? a + ' ' + b : a) : b || '';
}
function stringifyClass(value) {
    if (Array.isArray(value)) {
        return stringifyArray(value);
    }
    if (isObject(value)) {
        return stringifyObject(value);
    }
    if (typeof value === 'string') {
        return value;
    }
    /* istanbul ignore next */
    return '';
}
function stringifyArray(value) {
    var res = '';
    var stringified;
    for (var i = 0, l = value.length; i < l; i++) {
        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
            if (res)
                res += ' ';
            res += stringified;
        }
    }
    return res;
}
function stringifyObject(value) {
    var res = '';
    for (var key in value) {
        if (value[key]) {
            if (res)
                res += ' ';
            res += key;
        }
    }
    return res;
}

var namespaceMap = {
    svg: 'http://www.w3.org/2000/svg',
    math: 'http://www.w3.org/1998/Math/MathML'
};
var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
    'embed,object,param,source,canvas,script,noscript,del,ins,' +
    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
    'output,progress,select,textarea,' +
    'details,dialog,menu,menuitem,summary,' +
    'content,element,shadow,template,blockquote,iframe,tfoot');
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
var isPreTag = function (tag) { return tag === 'pre'; };
var isReservedTag = function (tag) {
    return isHTMLTag(tag) || isSVG(tag);
};
function getTagNamespace(tag) {
    if (isSVG(tag)) {
        return 'svg';
    }
    // basic support for MathML
    // note it doesn't support other MathML elements being component roots
    if (tag === 'math') {
        return 'math';
    }
}
var unknownElementCache = Object.create(null);
function isUnknownElement(tag) {
    /* istanbul ignore if */
    if (!inBrowser) {
        return true;
    }
    if (isReservedTag(tag)) {
        return false;
    }
    tag = tag.toLowerCase();
    /* istanbul ignore if */
    if (unknownElementCache[tag] != null) {
        return unknownElementCache[tag];
    }
    var el = document.createElement(tag);
    if (tag.indexOf('-') > -1) {
        // http://stackoverflow.com/a/28210364/1070244
        return (unknownElementCache[tag] =
            el.constructor === window.HTMLUnknownElement ||
                el.constructor === window.HTMLElement);
    }
    else {
        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
    }
}
var isTextInputType = makeMap('text,number,password,search,email,tel,url');

/**
 * Query an element selector if it's not an element already.
 */
function query(el) {
    if (typeof el === 'string') {
        var selected = document.querySelector(el);
        if (!selected) {
            process.env.NODE_ENV !== 'production' && warn$2('Cannot find element: ' + el);
            return document.createElement('div');
        }
        return selected;
    }
    else {
        return el;
    }
}

function createElement(tagName, vnode) {
    var elm = document.createElement(tagName);
    if (tagName !== 'select') {
        return elm;
    }
    // false or null will remove the attribute but undefined will not
    if (vnode.data &&
        vnode.data.attrs &&
        vnode.data.attrs.multiple !== undefined) {
        elm.setAttribute('multiple', 'multiple');
    }
    return elm;
}
function createElementNS(namespace, tagName) {
    return document.createElementNS(namespaceMap[namespace], tagName);
}
function createTextNode(text) {
    return document.createTextNode(text);
}
function createComment(text) {
    return document.createComment(text);
}
function insertBefore(parentNode, newNode, referenceNode) {
    parentNode.insertBefore(newNode, referenceNode);
}
function removeChild(node, child) {
    node.removeChild(child);
}
function appendChild(node, child) {
    node.appendChild(child);
}
function parentNode(node) {
    return node.parentNode;
}
function nextSibling(node) {
    return node.nextSibling;
}
function tagName(node) {
    return node.tagName;
}
function setTextContent(node, text) {
    node.textContent = text;
}
function setStyleScope(node, scopeId) {
    node.setAttribute(scopeId, '');
}

var nodeOps = /*#__PURE__*/Object.freeze({
  __proto__: null,
  createElement: createElement,
  createElementNS: createElementNS,
  createTextNode: createTextNode,
  createComment: createComment,
  insertBefore: insertBefore,
  removeChild: removeChild,
  appendChild: appendChild,
  parentNode: parentNode,
  nextSibling: nextSibling,
  tagName: tagName,
  setTextContent: setTextContent,
  setStyleScope: setStyleScope
});

var ref = {
    create: function (_, vnode) {
        registerRef(vnode);
    },
    update: function (oldVnode, vnode) {
        if (oldVnode.data.ref !== vnode.data.ref) {
            registerRef(oldVnode, true);
            registerRef(vnode);
        }
    },
    destroy: function (vnode) {
        registerRef(vnode, true);
    }
};
function registerRef(vnode, isRemoval) {
    var ref = vnode.data.ref;
    if (!isDef(ref))
        return;
    var vm = vnode.context;
    var refValue = vnode.componentInstance || vnode.elm;
    var value = isRemoval ? null : refValue;
    var $refsValue = isRemoval ? undefined : refValue;
    if (isFunction(ref)) {
        invokeWithErrorHandling(ref, vm, [value], vm, "template ref function");
        return;
    }
    var isFor = vnode.data.refInFor;
    var _isString = typeof ref === 'string' || typeof ref === 'number';
    var _isRef = isRef(ref);
    var refs = vm.$refs;
    if (_isString || _isRef) {
        if (isFor) {
            var existing = _isString ? refs[ref] : ref.value;
            if (isRemoval) {
                isArray(existing) && remove$2(existing, refValue);
            }
            else {
                if (!isArray(existing)) {
                    if (_isString) {
                        refs[ref] = [refValue];
                        setSetupRef(vm, ref, refs[ref]);
                    }
                    else {
                        ref.value = [refValue];
                    }
                }
                else if (!existing.includes(refValue)) {
                    existing.push(refValue);
                }
            }
        }
        else if (_isString) {
            if (isRemoval && refs[ref] !== refValue) {
                return;
            }
            refs[ref] = $refsValue;
            setSetupRef(vm, ref, value);
        }
        else if (_isRef) {
            if (isRemoval && ref.value !== refValue) {
                return;
            }
            ref.value = value;
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn$2("Invalid template ref type: ".concat(typeof ref));
        }
    }
}
function setSetupRef(_a, key, val) {
    var _setupState = _a._setupState;
    if (_setupState && hasOwn(_setupState, key)) {
        if (isRef(_setupState[key])) {
            _setupState[key].value = val;
        }
        else {
            _setupState[key] = val;
        }
    }
}

/**
 * Virtual DOM patching algorithm based on Snabbdom by
 * Simon Friis Vindum (@paldepind)
 * Licensed under the MIT License
 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
 *
 * modified by Evan You (@yyx990803)
 *
 * Not type-checking this because this file is perf-critical and the cost
 * of making flow understand it is not worth it.
 */
var emptyNode = new VNode('', {}, []);
var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
function sameVnode(a, b) {
    return (a.key === b.key &&
        a.asyncFactory === b.asyncFactory &&
        ((a.tag === b.tag &&
            a.isComment === b.isComment &&
            isDef(a.data) === isDef(b.data) &&
            sameInputType(a, b)) ||
            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
}
function sameInputType(a, b) {
    if (a.tag !== 'input')
        return true;
    var i;
    var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
    var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
}
function createKeyToOldIdx(children, beginIdx, endIdx) {
    var i, key;
    var map = {};
    for (i = beginIdx; i <= endIdx; ++i) {
        key = children[i].key;
        if (isDef(key))
            map[key] = i;
    }
    return map;
}
function createPatchFunction(backend) {
    var i, j;
    var cbs = {};
    var modules = backend.modules, nodeOps = backend.nodeOps;
    for (i = 0; i < hooks.length; ++i) {
        cbs[hooks[i]] = [];
        for (j = 0; j < modules.length; ++j) {
            if (isDef(modules[j][hooks[i]])) {
                cbs[hooks[i]].push(modules[j][hooks[i]]);
            }
        }
    }
    function emptyNodeAt(elm) {
        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
    }
    function createRmCb(childElm, listeners) {
        function remove() {
            if (--remove.listeners === 0) {
                removeNode(childElm);
            }
        }
        remove.listeners = listeners;
        return remove;
    }
    function removeNode(el) {
        var parent = nodeOps.parentNode(el);
        // element may have already been removed due to v-html / v-text
        if (isDef(parent)) {
            nodeOps.removeChild(parent, el);
        }
    }
    function isUnknownElement(vnode, inVPre) {
        return (!inVPre &&
            !vnode.ns &&
            !(config.ignoredElements.length &&
                config.ignoredElements.some(function (ignore) {
                    return isRegExp(ignore)
                        ? ignore.test(vnode.tag)
                        : ignore === vnode.tag;
                })) &&
            config.isUnknownElement(vnode.tag));
    }
    var creatingElmInVPre = 0;
    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // This vnode was used in a previous render!
            // now it's used as a new node, overwriting its elm would cause
            // potential patch errors down the road when it's used as an insertion
            // reference node. Instead, we clone the node on-demand before creating
            // associated DOM element for it.
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        vnode.isRootInsert = !nested; // for transition enter check
        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
            return;
        }
        var data = vnode.data;
        var children = vnode.children;
        var tag = vnode.tag;
        if (isDef(tag)) {
            if (process.env.NODE_ENV !== 'production') {
                if (data && data.pre) {
                    creatingElmInVPre++;
                }
                if (isUnknownElement(vnode, creatingElmInVPre)) {
                    warn$2('Unknown custom element: <' +
                        tag +
                        '> - did you ' +
                        'register the component correctly? For recursive components, ' +
                        'make sure to provide the "name" option.', vnode.context);
                }
            }
            vnode.elm = vnode.ns
                ? nodeOps.createElementNS(vnode.ns, tag)
                : nodeOps.createElement(tag, vnode);
            setScope(vnode);
            createChildren(vnode, children, insertedVnodeQueue);
            if (isDef(data)) {
                invokeCreateHooks(vnode, insertedVnodeQueue);
            }
            insert(parentElm, vnode.elm, refElm);
            if (process.env.NODE_ENV !== 'production' && data && data.pre) {
                creatingElmInVPre--;
            }
        }
        else if (isTrue(vnode.isComment)) {
            vnode.elm = nodeOps.createComment(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
        else {
            vnode.elm = nodeOps.createTextNode(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
    }
    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        var i = vnode.data;
        if (isDef(i)) {
            var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
            if (isDef((i = i.hook)) && isDef((i = i.init))) {
                i(vnode, false /* hydrating */);
            }
            // after calling the init hook, if the vnode is a child component
            // it should've created a child instance and mounted it. the child
            // component also has set the placeholder vnode's elm.
            // in that case we can just return the element and be done.
            if (isDef(vnode.componentInstance)) {
                initComponent(vnode, insertedVnodeQueue);
                insert(parentElm, vnode.elm, refElm);
                if (isTrue(isReactivated)) {
                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
                }
                return true;
            }
        }
    }
    function initComponent(vnode, insertedVnodeQueue) {
        if (isDef(vnode.data.pendingInsert)) {
            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
            vnode.data.pendingInsert = null;
        }
        vnode.elm = vnode.componentInstance.$el;
        if (isPatchable(vnode)) {
            invokeCreateHooks(vnode, insertedVnodeQueue);
            setScope(vnode);
        }
        else {
            // empty component root.
            // skip all element-related modules except for ref (#3455)
            registerRef(vnode);
            // make sure to invoke the insert hook
            insertedVnodeQueue.push(vnode);
        }
    }
    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        var i;
        // hack for #4339: a reactivated component with inner transition
        // does not trigger because the inner node's created hooks are not called
        // again. It's not ideal to involve module-specific logic in here but
        // there doesn't seem to be a better way to do it.
        var innerNode = vnode;
        while (innerNode.componentInstance) {
            innerNode = innerNode.componentInstance._vnode;
            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
                for (i = 0; i < cbs.activate.length; ++i) {
                    cbs.activate[i](emptyNode, innerNode);
                }
                insertedVnodeQueue.push(innerNode);
                break;
            }
        }
        // unlike a newly created component,
        // a reactivated keep-alive component doesn't insert itself
        insert(parentElm, vnode.elm, refElm);
    }
    function insert(parent, elm, ref) {
        if (isDef(parent)) {
            if (isDef(ref)) {
                if (nodeOps.parentNode(ref) === parent) {
                    nodeOps.insertBefore(parent, elm, ref);
                }
            }
            else {
                nodeOps.appendChild(parent, elm);
            }
        }
    }
    function createChildren(vnode, children, insertedVnodeQueue) {
        if (isArray(children)) {
            if (process.env.NODE_ENV !== 'production') {
                checkDuplicateKeys(children);
            }
            for (var i_1 = 0; i_1 < children.length; ++i_1) {
                createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);
            }
        }
        else if (isPrimitive(vnode.text)) {
            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
        }
    }
    function isPatchable(vnode) {
        while (vnode.componentInstance) {
            vnode = vnode.componentInstance._vnode;
        }
        return isDef(vnode.tag);
    }
    function invokeCreateHooks(vnode, insertedVnodeQueue) {
        for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {
            cbs.create[i_2](emptyNode, vnode);
        }
        i = vnode.data.hook; // Reuse variable
        if (isDef(i)) {
            if (isDef(i.create))
                i.create(emptyNode, vnode);
            if (isDef(i.insert))
                insertedVnodeQueue.push(vnode);
        }
    }
    // set scope id attribute for scoped CSS.
    // this is implemented as a special case to avoid the overhead
    // of going through the normal attribute patching process.
    function setScope(vnode) {
        var i;
        if (isDef((i = vnode.fnScopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
        else {
            var ancestor = vnode;
            while (ancestor) {
                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
                    nodeOps.setStyleScope(vnode.elm, i);
                }
                ancestor = ancestor.parent;
            }
        }
        // for slot content they should also get the scopeId from the host instance.
        if (isDef((i = activeInstance)) &&
            i !== vnode.context &&
            i !== vnode.fnContext &&
            isDef((i = i.$options._scopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
    }
    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
        for (; startIdx <= endIdx; ++startIdx) {
            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
        }
    }
    function invokeDestroyHook(vnode) {
        var i, j;
        var data = vnode.data;
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.destroy)))
                i(vnode);
            for (i = 0; i < cbs.destroy.length; ++i)
                cbs.destroy[i](vnode);
        }
        if (isDef((i = vnode.children))) {
            for (j = 0; j < vnode.children.length; ++j) {
                invokeDestroyHook(vnode.children[j]);
            }
        }
    }
    function removeVnodes(vnodes, startIdx, endIdx) {
        for (; startIdx <= endIdx; ++startIdx) {
            var ch = vnodes[startIdx];
            if (isDef(ch)) {
                if (isDef(ch.tag)) {
                    removeAndInvokeRemoveHook(ch);
                    invokeDestroyHook(ch);
                }
                else {
                    // Text node
                    removeNode(ch.elm);
                }
            }
        }
    }
    function removeAndInvokeRemoveHook(vnode, rm) {
        if (isDef(rm) || isDef(vnode.data)) {
            var i_3;
            var listeners = cbs.remove.length + 1;
            if (isDef(rm)) {
                // we have a recursively passed down rm callback
                // increase the listeners count
                rm.listeners += listeners;
            }
            else {
                // directly removing
                rm = createRmCb(vnode.elm, listeners);
            }
            // recursively invoke hooks on child component root node
            if (isDef((i_3 = vnode.componentInstance)) &&
                isDef((i_3 = i_3._vnode)) &&
                isDef(i_3.data)) {
                removeAndInvokeRemoveHook(i_3, rm);
            }
            for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {
                cbs.remove[i_3](vnode, rm);
            }
            if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {
                i_3(vnode, rm);
            }
            else {
                rm();
            }
        }
        else {
            removeNode(vnode.elm);
        }
    }
    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
        var oldStartIdx = 0;
        var newStartIdx = 0;
        var oldEndIdx = oldCh.length - 1;
        var oldStartVnode = oldCh[0];
        var oldEndVnode = oldCh[oldEndIdx];
        var newEndIdx = newCh.length - 1;
        var newStartVnode = newCh[0];
        var newEndVnode = newCh[newEndIdx];
        var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
        // removeOnly is a special flag used only by <transition-group>
        // to ensure removed elements stay in correct relative positions
        // during leaving transitions
        var canMove = !removeOnly;
        if (process.env.NODE_ENV !== 'production') {
            checkDuplicateKeys(newCh);
        }
        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
            if (isUndef(oldStartVnode)) {
                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
            }
            else if (isUndef(oldEndVnode)) {
                oldEndVnode = oldCh[--oldEndIdx];
            }
            else if (sameVnode(oldStartVnode, newStartVnode)) {
                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                oldStartVnode = oldCh[++oldStartIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else if (sameVnode(oldEndVnode, newEndVnode)) {
                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                oldEndVnode = oldCh[--oldEndIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldStartVnode, newEndVnode)) {
                // Vnode moved right
                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
                oldStartVnode = oldCh[++oldStartIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldEndVnode, newStartVnode)) {
                // Vnode moved left
                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
                oldEndVnode = oldCh[--oldEndIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else {
                if (isUndef(oldKeyToIdx))
                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
                idxInOld = isDef(newStartVnode.key)
                    ? oldKeyToIdx[newStartVnode.key]
                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
                if (isUndef(idxInOld)) {
                    // New element
                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                }
                else {
                    vnodeToMove = oldCh[idxInOld];
                    if (sameVnode(vnodeToMove, newStartVnode)) {
                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                        oldCh[idxInOld] = undefined;
                        canMove &&
                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
                    }
                    else {
                        // same key but different element. treat as new element
                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                    }
                }
                newStartVnode = newCh[++newStartIdx];
            }
        }
        if (oldStartIdx > oldEndIdx) {
            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
        }
        else if (newStartIdx > newEndIdx) {
            removeVnodes(oldCh, oldStartIdx, oldEndIdx);
        }
    }
    function checkDuplicateKeys(children) {
        var seenKeys = {};
        for (var i_4 = 0; i_4 < children.length; i_4++) {
            var vnode = children[i_4];
            var key = vnode.key;
            if (isDef(key)) {
                if (seenKeys[key]) {
                    warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context);
                }
                else {
                    seenKeys[key] = true;
                }
            }
        }
    }
    function findIdxInOld(node, oldCh, start, end) {
        for (var i_5 = start; i_5 < end; i_5++) {
            var c = oldCh[i_5];
            if (isDef(c) && sameVnode(node, c))
                return i_5;
        }
    }
    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
        if (oldVnode === vnode) {
            return;
        }
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // clone reused vnode
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        var elm = (vnode.elm = oldVnode.elm);
        if (isTrue(oldVnode.isAsyncPlaceholder)) {
            if (isDef(vnode.asyncFactory.resolved)) {
                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
            }
            else {
                vnode.isAsyncPlaceholder = true;
            }
            return;
        }
        // reuse element for static trees.
        // note we only do this if the vnode is cloned -
        // if the new node is not cloned it means the render functions have been
        // reset by the hot-reload-api and we need to do a proper re-render.
        if (isTrue(vnode.isStatic) &&
            isTrue(oldVnode.isStatic) &&
            vnode.key === oldVnode.key &&
            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
            vnode.componentInstance = oldVnode.componentInstance;
            return;
        }
        var i;
        var data = vnode.data;
        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
            i(oldVnode, vnode);
        }
        var oldCh = oldVnode.children;
        var ch = vnode.children;
        if (isDef(data) && isPatchable(vnode)) {
            for (i = 0; i < cbs.update.length; ++i)
                cbs.update[i](oldVnode, vnode);
            if (isDef((i = data.hook)) && isDef((i = i.update)))
                i(oldVnode, vnode);
        }
        if (isUndef(vnode.text)) {
            if (isDef(oldCh) && isDef(ch)) {
                if (oldCh !== ch)
                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
            }
            else if (isDef(ch)) {
                if (process.env.NODE_ENV !== 'production') {
                    checkDuplicateKeys(ch);
                }
                if (isDef(oldVnode.text))
                    nodeOps.setTextContent(elm, '');
                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
            }
            else if (isDef(oldCh)) {
                removeVnodes(oldCh, 0, oldCh.length - 1);
            }
            else if (isDef(oldVnode.text)) {
                nodeOps.setTextContent(elm, '');
            }
        }
        else if (oldVnode.text !== vnode.text) {
            nodeOps.setTextContent(elm, vnode.text);
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
                i(oldVnode, vnode);
        }
    }
    function invokeInsertHook(vnode, queue, initial) {
        // delay insert hooks for component root nodes, invoke them after the
        // element is really inserted
        if (isTrue(initial) && isDef(vnode.parent)) {
            vnode.parent.data.pendingInsert = queue;
        }
        else {
            for (var i_6 = 0; i_6 < queue.length; ++i_6) {
                queue[i_6].data.hook.insert(queue[i_6]);
            }
        }
    }
    var hydrationBailed = false;
    // list of modules that can skip create hook during hydration because they
    // are already rendered on the client or has no need for initialization
    // Note: style is excluded because it relies on initial clone for future
    // deep updates (#7063).
    var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
    // Note: this is a browser-only function so we can assume elms are DOM nodes.
    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
        var i;
        var tag = vnode.tag, data = vnode.data, children = vnode.children;
        inVPre = inVPre || (data && data.pre);
        vnode.elm = elm;
        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
            vnode.isAsyncPlaceholder = true;
            return true;
        }
        // assert node match
        if (process.env.NODE_ENV !== 'production') {
            if (!assertNodeMatch(elm, vnode, inVPre)) {
                return false;
            }
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.init)))
                i(vnode, true /* hydrating */);
            if (isDef((i = vnode.componentInstance))) {
                // child component. it should have hydrated its own tree.
                initComponent(vnode, insertedVnodeQueue);
                return true;
            }
        }
        if (isDef(tag)) {
            if (isDef(children)) {
                // empty element, allow client to pick up and populate children
                if (!elm.hasChildNodes()) {
                    createChildren(vnode, children, insertedVnodeQueue);
                }
                else {
                    // v-html and domProps: innerHTML
                    if (isDef((i = data)) &&
                        isDef((i = i.domProps)) &&
                        isDef((i = i.innerHTML))) {
                        if (i !== elm.innerHTML) {
                            /* istanbul ignore if */
                            if (process.env.NODE_ENV !== 'production' &&
                                typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('server innerHTML: ', i);
                                console.warn('client innerHTML: ', elm.innerHTML);
                            }
                            return false;
                        }
                    }
                    else {
                        // iterate and compare children lists
                        var childrenMatch = true;
                        var childNode = elm.firstChild;
                        for (var i_7 = 0; i_7 < children.length; i_7++) {
                            if (!childNode ||
                                !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {
                                childrenMatch = false;
                                break;
                            }
                            childNode = childNode.nextSibling;
                        }
                        // if childNode is not null, it means the actual childNodes list is
                        // longer than the virtual children list.
                        if (!childrenMatch || childNode) {
                            /* istanbul ignore if */
                            if (process.env.NODE_ENV !== 'production' &&
                                typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
                            }
                            return false;
                        }
                    }
                }
            }
            if (isDef(data)) {
                var fullInvoke = false;
                for (var key in data) {
                    if (!isRenderedModule(key)) {
                        fullInvoke = true;
                        invokeCreateHooks(vnode, insertedVnodeQueue);
                        break;
                    }
                }
                if (!fullInvoke && data['class']) {
                    // ensure collecting deps for deep class bindings for future updates
                    traverse(data['class']);
                }
            }
        }
        else if (elm.data !== vnode.text) {
            elm.data = vnode.text;
        }
        return true;
    }
    function assertNodeMatch(node, vnode, inVPre) {
        if (isDef(vnode.tag)) {
            return (vnode.tag.indexOf('vue-component') === 0 ||
                (!isUnknownElement(vnode, inVPre) &&
                    vnode.tag.toLowerCase() ===
                        (node.tagName && node.tagName.toLowerCase())));
        }
        else {
            return node.nodeType === (vnode.isComment ? 8 : 3);
        }
    }
    return function patch(oldVnode, vnode, hydrating, removeOnly) {
        if (isUndef(vnode)) {
            if (isDef(oldVnode))
                invokeDestroyHook(oldVnode);
            return;
        }
        var isInitialPatch = false;
        var insertedVnodeQueue = [];
        if (isUndef(oldVnode)) {
            // empty mount (likely as component), create new root element
            isInitialPatch = true;
            createElm(vnode, insertedVnodeQueue);
        }
        else {
            var isRealElement = isDef(oldVnode.nodeType);
            if (!isRealElement && sameVnode(oldVnode, vnode)) {
                // patch existing root node
                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
            }
            else {
                if (isRealElement) {
                    // mounting to a real element
                    // check if this is server-rendered content and if we can perform
                    // a successful hydration.
                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
                        oldVnode.removeAttribute(SSR_ATTR);
                        hydrating = true;
                    }
                    if (isTrue(hydrating)) {
                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
                            invokeInsertHook(vnode, insertedVnodeQueue, true);
                            return oldVnode;
                        }
                        else if (process.env.NODE_ENV !== 'production') {
                            warn$2('The client-side rendered virtual DOM tree is not matching ' +
                                'server-rendered content. This is likely caused by incorrect ' +
                                'HTML markup, for example nesting block-level elements inside ' +
                                '<p>, or missing <tbody>. Bailing hydration and performing ' +
                                'full client-side render.');
                        }
                    }
                    // either not server-rendered, or hydration failed.
                    // create an empty node and replace it
                    oldVnode = emptyNodeAt(oldVnode);
                }
                // replacing existing element
                var oldElm = oldVnode.elm;
                var parentElm = nodeOps.parentNode(oldElm);
                // create new node
                createElm(vnode, insertedVnodeQueue, 
                // extremely rare edge case: do not insert if old element is in a
                // leaving transition. Only happens when combining transition +
                // keep-alive + HOCs. (#4590)
                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
                // update parent placeholder node element, recursively
                if (isDef(vnode.parent)) {
                    var ancestor = vnode.parent;
                    var patchable = isPatchable(vnode);
                    while (ancestor) {
                        for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {
                            cbs.destroy[i_8](ancestor);
                        }
                        ancestor.elm = vnode.elm;
                        if (patchable) {
                            for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {
                                cbs.create[i_9](emptyNode, ancestor);
                            }
                            // #6513
                            // invoke insert hooks that may have been merged by create hooks.
                            // e.g. for directives that uses the "inserted" hook.
                            var insert_1 = ancestor.data.hook.insert;
                            if (insert_1.merged) {
                                // start at index 1 to avoid re-invoking component mounted hook
                                for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) {
                                    insert_1.fns[i_10]();
                                }
                            }
                        }
                        else {
                            registerRef(ancestor);
                        }
                        ancestor = ancestor.parent;
                    }
                }
                // destroy old node
                if (isDef(parentElm)) {
                    removeVnodes([oldVnode], 0, 0);
                }
                else if (isDef(oldVnode.tag)) {
                    invokeDestroyHook(oldVnode);
                }
            }
        }
        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
        return vnode.elm;
    };
}

var directives$1 = {
    create: updateDirectives,
    update: updateDirectives,
    destroy: function unbindDirectives(vnode) {
        // @ts-expect-error emptyNode is not VNodeWithData
        updateDirectives(vnode, emptyNode);
    }
};
function updateDirectives(oldVnode, vnode) {
    if (oldVnode.data.directives || vnode.data.directives) {
        _update(oldVnode, vnode);
    }
}
function _update(oldVnode, vnode) {
    var isCreate = oldVnode === emptyNode;
    var isDestroy = vnode === emptyNode;
    var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
    var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
    var dirsWithInsert = [];
    var dirsWithPostpatch = [];
    var key, oldDir, dir;
    for (key in newDirs) {
        oldDir = oldDirs[key];
        dir = newDirs[key];
        if (!oldDir) {
            // new directive, bind
            callHook(dir, 'bind', vnode, oldVnode);
            if (dir.def && dir.def.inserted) {
                dirsWithInsert.push(dir);
            }
        }
        else {
            // existing directive, update
            dir.oldValue = oldDir.value;
            dir.oldArg = oldDir.arg;
            callHook(dir, 'update', vnode, oldVnode);
            if (dir.def && dir.def.componentUpdated) {
                dirsWithPostpatch.push(dir);
            }
        }
    }
    if (dirsWithInsert.length) {
        var callInsert = function () {
            for (var i = 0; i < dirsWithInsert.length; i++) {
                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
            }
        };
        if (isCreate) {
            mergeVNodeHook(vnode, 'insert', callInsert);
        }
        else {
            callInsert();
        }
    }
    if (dirsWithPostpatch.length) {
        mergeVNodeHook(vnode, 'postpatch', function () {
            for (var i = 0; i < dirsWithPostpatch.length; i++) {
                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
            }
        });
    }
    if (!isCreate) {
        for (key in oldDirs) {
            if (!newDirs[key]) {
                // no longer present, unbind
                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
            }
        }
    }
}
var emptyModifiers = Object.create(null);
function normalizeDirectives(dirs, vm) {
    var res = Object.create(null);
    if (!dirs) {
        // $flow-disable-line
        return res;
    }
    var i, dir;
    for (i = 0; i < dirs.length; i++) {
        dir = dirs[i];
        if (!dir.modifiers) {
            // $flow-disable-line
            dir.modifiers = emptyModifiers;
        }
        res[getRawDirName(dir)] = dir;
        if (vm._setupState && vm._setupState.__sfc) {
            var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
            if (typeof setupDef === 'function') {
                dir.def = {
                    bind: setupDef,
                    update: setupDef,
                };
            }
            else {
                dir.def = setupDef;
            }
        }
        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
    }
    // $flow-disable-line
    return res;
}
function getRawDirName(dir) {
    return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.')));
}
function callHook(dir, hook, vnode, oldVnode, isDestroy) {
    var fn = dir.def && dir.def[hook];
    if (fn) {
        try {
            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
        }
        catch (e) {
            handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook"));
        }
    }
}

var baseModules = [ref, directives$1];

function updateAttrs(oldVnode, vnode) {
    var opts = vnode.componentOptions;
    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
        return;
    }
    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
        return;
    }
    var key, cur, old;
    var elm = vnode.elm;
    var oldAttrs = oldVnode.data.attrs || {};
    var attrs = vnode.data.attrs || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
        attrs = vnode.data.attrs = extend({}, attrs);
    }
    for (key in attrs) {
        cur = attrs[key];
        old = oldAttrs[key];
        if (old !== cur) {
            setAttr(elm, key, cur, vnode.data.pre);
        }
    }
    // #4391: in IE9, setting type can reset value for input[type=radio]
    // #6666: IE/Edge forces progress value down to 1 before setting a max
    /* istanbul ignore if */
    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
        setAttr(elm, 'value', attrs.value);
    }
    for (key in oldAttrs) {
        if (isUndef(attrs[key])) {
            if (isXlink(key)) {
                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
            }
            else if (!isEnumeratedAttr(key)) {
                elm.removeAttribute(key);
            }
        }
    }
}
function setAttr(el, key, value, isInPre) {
    if (isInPre || el.tagName.indexOf('-') > -1) {
        baseSetAttr(el, key, value);
    }
    else if (isBooleanAttr(key)) {
        // set attribute for blank value
        // e.g. <option disabled>Select one</option>
        if (isFalsyAttrValue(value)) {
            el.removeAttribute(key);
        }
        else {
            // technically allowfullscreen is a boolean attribute for <iframe>,
            // but Flash expects a value of "true" when used on <embed> tag
            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
            el.setAttribute(key, value);
        }
    }
    else if (isEnumeratedAttr(key)) {
        el.setAttribute(key, convertEnumeratedValue(key, value));
    }
    else if (isXlink(key)) {
        if (isFalsyAttrValue(value)) {
            el.removeAttributeNS(xlinkNS, getXlinkProp(key));
        }
        else {
            el.setAttributeNS(xlinkNS, key, value);
        }
    }
    else {
        baseSetAttr(el, key, value);
    }
}
function baseSetAttr(el, key, value) {
    if (isFalsyAttrValue(value)) {
        el.removeAttribute(key);
    }
    else {
        // #7138: IE10 & 11 fires input event when setting placeholder on
        // <textarea>... block the first input event and remove the blocker
        // immediately.
        /* istanbul ignore if */
        if (isIE &&
            !isIE9 &&
            el.tagName === 'TEXTAREA' &&
            key === 'placeholder' &&
            value !== '' &&
            !el.__ieph) {
            var blocker_1 = function (e) {
                e.stopImmediatePropagation();
                el.removeEventListener('input', blocker_1);
            };
            el.addEventListener('input', blocker_1);
            // $flow-disable-line
            el.__ieph = true; /* IE placeholder patched */
        }
        el.setAttribute(key, value);
    }
}
var attrs = {
    create: updateAttrs,
    update: updateAttrs
};

function updateClass(oldVnode, vnode) {
    var el = vnode.elm;
    var data = vnode.data;
    var oldData = oldVnode.data;
    if (isUndef(data.staticClass) &&
        isUndef(data.class) &&
        (isUndef(oldData) ||
            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
        return;
    }
    var cls = genClassForVnode(vnode);
    // handle transition classes
    var transitionClass = el._transitionClasses;
    if (isDef(transitionClass)) {
        cls = concat(cls, stringifyClass(transitionClass));
    }
    // set the class
    if (cls !== el._prevClass) {
        el.setAttribute('class', cls);
        el._prevClass = cls;
    }
}
var klass$1 = {
    create: updateClass,
    update: updateClass
};

var validDivisionCharRE = /[\w).+\-_$\]]/;
function parseFilters(exp) {
    var inSingle = false;
    var inDouble = false;
    var inTemplateString = false;
    var inRegex = false;
    var curly = 0;
    var square = 0;
    var paren = 0;
    var lastFilterIndex = 0;
    var c, prev, i, expression, filters;
    for (i = 0; i < exp.length; i++) {
        prev = c;
        c = exp.charCodeAt(i);
        if (inSingle) {
            if (c === 0x27 && prev !== 0x5c)
                inSingle = false;
        }
        else if (inDouble) {
            if (c === 0x22 && prev !== 0x5c)
                inDouble = false;
        }
        else if (inTemplateString) {
            if (c === 0x60 && prev !== 0x5c)
                inTemplateString = false;
        }
        else if (inRegex) {
            if (c === 0x2f && prev !== 0x5c)
                inRegex = false;
        }
        else if (c === 0x7c && // pipe
            exp.charCodeAt(i + 1) !== 0x7c &&
            exp.charCodeAt(i - 1) !== 0x7c &&
            !curly &&
            !square &&
            !paren) {
            if (expression === undefined) {
                // first filter, end of expression
                lastFilterIndex = i + 1;
                expression = exp.slice(0, i).trim();
            }
            else {
                pushFilter();
            }
        }
        else {
            switch (c) {
                case 0x22:
                    inDouble = true;
                    break; // "
                case 0x27:
                    inSingle = true;
                    break; // '
                case 0x60:
                    inTemplateString = true;
                    break; // `
                case 0x28:
                    paren++;
                    break; // (
                case 0x29:
                    paren--;
                    break; // )
                case 0x5b:
                    square++;
                    break; // [
                case 0x5d:
                    square--;
                    break; // ]
                case 0x7b:
                    curly++;
                    break; // {
                case 0x7d:
                    curly--;
                    break; // }
            }
            if (c === 0x2f) {
                // /
                var j = i - 1;
                var p 
                // find first non-whitespace prev char
                = void 0;
                // find first non-whitespace prev char
                for (; j >= 0; j--) {
                    p = exp.charAt(j);
                    if (p !== ' ')
                        break;
                }
                if (!p || !validDivisionCharRE.test(p)) {
                    inRegex = true;
                }
            }
        }
    }
    if (expression === undefined) {
        expression = exp.slice(0, i).trim();
    }
    else if (lastFilterIndex !== 0) {
        pushFilter();
    }
    function pushFilter() {
        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
        lastFilterIndex = i + 1;
    }
    if (filters) {
        for (i = 0; i < filters.length; i++) {
            expression = wrapFilter(expression, filters[i]);
        }
    }
    return expression;
}
function wrapFilter(exp, filter) {
    var i = filter.indexOf('(');
    if (i < 0) {
        // _f: resolveFilter
        return "_f(\"".concat(filter, "\")(").concat(exp, ")");
    }
    else {
        var name_1 = filter.slice(0, i);
        var args = filter.slice(i + 1);
        return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args);
    }
}

/* eslint-disable no-unused-vars */
function baseWarn(msg, range) {
    console.error("[Vue compiler]: ".concat(msg));
}
/* eslint-enable no-unused-vars */
function pluckModuleFunction(modules, key) {
    return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];
}
function addProp(el, name, value, range, dynamic) {
    (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
    el.plain = false;
}
function addAttr(el, name, value, range, dynamic) {
    var attrs = dynamic
        ? el.dynamicAttrs || (el.dynamicAttrs = [])
        : el.attrs || (el.attrs = []);
    attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
    el.plain = false;
}
// add a raw attr (use this in preTransforms)
function addRawAttr(el, name, value, range) {
    el.attrsMap[name] = value;
    el.attrsList.push(rangeSetItem({ name: name, value: value }, range));
}
function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
    (el.directives || (el.directives = [])).push(rangeSetItem({
        name: name,
        rawName: rawName,
        value: value,
        arg: arg,
        isDynamicArg: isDynamicArg,
        modifiers: modifiers
    }, range));
    el.plain = false;
}
function prependModifierMarker(symbol, name, dynamic) {
    return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured
}
function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
    modifiers = modifiers || emptyObject;
    // warn prevent and passive modifier
    /* istanbul ignore if */
    if (process.env.NODE_ENV !== 'production' && warn && modifiers.prevent && modifiers.passive) {
        warn("passive and prevent can't be used together. " +
            "Passive handler can't prevent default event.", range);
    }
    // normalize click.right and click.middle since they don't actually fire
    // this is technically browser-specific, but at least for now browsers are
    // the only target envs that have right/middle clicks.
    if (modifiers.right) {
        if (dynamic) {
            name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")");
        }
        else if (name === 'click') {
            name = 'contextmenu';
            delete modifiers.right;
        }
    }
    else if (modifiers.middle) {
        if (dynamic) {
            name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")");
        }
        else if (name === 'click') {
            name = 'mouseup';
        }
    }
    // check capture modifier
    if (modifiers.capture) {
        delete modifiers.capture;
        name = prependModifierMarker('!', name, dynamic);
    }
    if (modifiers.once) {
        delete modifiers.once;
        name = prependModifierMarker('~', name, dynamic);
    }
    /* istanbul ignore if */
    if (modifiers.passive) {
        delete modifiers.passive;
        name = prependModifierMarker('&', name, dynamic);
    }
    var events;
    if (modifiers.native) {
        delete modifiers.native;
        events = el.nativeEvents || (el.nativeEvents = {});
    }
    else {
        events = el.events || (el.events = {});
    }
    var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);
    if (modifiers !== emptyObject) {
        newHandler.modifiers = modifiers;
    }
    var handlers = events[name];
    /* istanbul ignore if */
    if (Array.isArray(handlers)) {
        important ? handlers.unshift(newHandler) : handlers.push(newHandler);
    }
    else if (handlers) {
        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
    }
    else {
        events[name] = newHandler;
    }
    el.plain = false;
}
function getRawBindingAttr(el, name) {
    return (el.rawAttrsMap[':' + name] ||
        el.rawAttrsMap['v-bind:' + name] ||
        el.rawAttrsMap[name]);
}
function getBindingAttr(el, name, getStatic) {
    var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
    if (dynamicValue != null) {
        return parseFilters(dynamicValue);
    }
    else if (getStatic !== false) {
        var staticValue = getAndRemoveAttr(el, name);
        if (staticValue != null) {
            return JSON.stringify(staticValue);
        }
    }
}
// note: this only removes the attr from the Array (attrsList) so that it
// doesn't get processed by processAttrs.
// By default it does NOT remove it from the map (attrsMap) because the map is
// needed during codegen.
function getAndRemoveAttr(el, name, removeFromMap) {
    var val;
    if ((val = el.attrsMap[name]) != null) {
        var list = el.attrsList;
        for (var i = 0, l = list.length; i < l; i++) {
            if (list[i].name === name) {
                list.splice(i, 1);
                break;
            }
        }
    }
    if (removeFromMap) {
        delete el.attrsMap[name];
    }
    return val;
}
function getAndRemoveAttrByRegex(el, name) {
    var list = el.attrsList;
    for (var i = 0, l = list.length; i < l; i++) {
        var attr = list[i];
        if (name.test(attr.name)) {
            list.splice(i, 1);
            return attr;
        }
    }
}
function rangeSetItem(item, range) {
    if (range) {
        if (range.start != null) {
            item.start = range.start;
        }
        if (range.end != null) {
            item.end = range.end;
        }
    }
    return item;
}

/**
 * Cross-platform code generation for component v-model
 */
function genComponentModel(el, value, modifiers) {
    var _a = modifiers || {}, number = _a.number, trim = _a.trim;
    var baseValueExpression = '$$v';
    var valueExpression = baseValueExpression;
    if (trim) {
        valueExpression =
            "(typeof ".concat(baseValueExpression, " === 'string'") +
                "? ".concat(baseValueExpression, ".trim()") +
                ": ".concat(baseValueExpression, ")");
    }
    if (number) {
        valueExpression = "_n(".concat(valueExpression, ")");
    }
    var assignment = genAssignmentCode(value, valueExpression);
    el.model = {
        value: "(".concat(value, ")"),
        expression: JSON.stringify(value),
        callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}")
    };
}
/**
 * Cross-platform codegen helper for generating v-model value assignment code.
 */
function genAssignmentCode(value, assignment) {
    var res = parseModel(value);
    if (res.key === null) {
        return "".concat(value, "=").concat(assignment);
    }
    else {
        return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")");
    }
}
/**
 * Parse a v-model expression into a base path and a final key segment.
 * Handles both dot-path and possible square brackets.
 *
 * Possible cases:
 *
 * - test
 * - test[key]
 * - test[test1[key]]
 * - test["a"][key]
 * - xxx.test[a[a].test1[key]]
 * - test.xxx.a["asa"][test1[key]]
 *
 */
var len, str, chr, index, expressionPos, expressionEndPos;
function parseModel(val) {
    // Fix https://github.com/vuejs/vue/pull/7730
    // allow v-model="obj.val " (trailing whitespace)
    val = val.trim();
    len = val.length;
    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
        index = val.lastIndexOf('.');
        if (index > -1) {
            return {
                exp: val.slice(0, index),
                key: '"' + val.slice(index + 1) + '"'
            };
        }
        else {
            return {
                exp: val,
                key: null
            };
        }
    }
    str = val;
    index = expressionPos = expressionEndPos = 0;
    while (!eof()) {
        chr = next();
        /* istanbul ignore if */
        if (isStringStart(chr)) {
            parseString(chr);
        }
        else if (chr === 0x5b) {
            parseBracket(chr);
        }
    }
    return {
        exp: val.slice(0, expressionPos),
        key: val.slice(expressionPos + 1, expressionEndPos)
    };
}
function next() {
    return str.charCodeAt(++index);
}
function eof() {
    return index >= len;
}
function isStringStart(chr) {
    return chr === 0x22 || chr === 0x27;
}
function parseBracket(chr) {
    var inBracket = 1;
    expressionPos = index;
    while (!eof()) {
        chr = next();
        if (isStringStart(chr)) {
            parseString(chr);
            continue;
        }
        if (chr === 0x5b)
            inBracket++;
        if (chr === 0x5d)
            inBracket--;
        if (inBracket === 0) {
            expressionEndPos = index;
            break;
        }
    }
}
function parseString(chr) {
    var stringQuote = chr;
    while (!eof()) {
        chr = next();
        if (chr === stringQuote) {
            break;
        }
    }
}

var warn$1;
// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
var RANGE_TOKEN = '__r';
var CHECKBOX_RADIO_TOKEN = '__c';
function model$1(el, dir, _warn) {
    warn$1 = _warn;
    var value = dir.value;
    var modifiers = dir.modifiers;
    var tag = el.tag;
    var type = el.attrsMap.type;
    if (process.env.NODE_ENV !== 'production') {
        // inputs with type="file" are read only and setting the input's
        // value will throw an error.
        if (tag === 'input' && type === 'file') {
            warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") +
                "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']);
        }
    }
    if (el.component) {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    else if (tag === 'select') {
        genSelect(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'checkbox') {
        genCheckboxModel(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'radio') {
        genRadioModel(el, value, modifiers);
    }
    else if (tag === 'input' || tag === 'textarea') {
        genDefaultModel(el, value, modifiers);
    }
    else if (!config.isReservedTag(tag)) {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
            "v-model is not supported on this element type. " +
            "If you are working with contenteditable, it's recommended to " +
            'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);
    }
    // ensure runtime directive metadata
    return true;
}
function genCheckboxModel(el, value, modifiers) {
    var number = modifiers && modifiers.number;
    var valueBinding = getBindingAttr(el, 'value') || 'null';
    var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
    var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
    addProp(el, 'checked', "Array.isArray(".concat(value, ")") +
        "?_i(".concat(value, ",").concat(valueBinding, ")>-1") +
        (trueValueBinding === 'true'
            ? ":(".concat(value, ")")
            : ":_q(".concat(value, ",").concat(trueValueBinding, ")")));
    addHandler(el, 'change', "var $$a=".concat(value, ",") +
        '$$el=$event.target,' +
        "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") +
        'if(Array.isArray($$a)){' +
        "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") +
        '$$i=_i($$a,$$v);' +
        "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") +
        "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") +
        "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true);
}
function genRadioModel(el, value, modifiers) {
    var number = modifiers && modifiers.number;
    var valueBinding = getBindingAttr(el, 'value') || 'null';
    valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding;
    addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")"));
    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
}
function genSelect(el, value, modifiers) {
    var number = modifiers && modifiers.number;
    var selectedVal = "Array.prototype.filter" +
        ".call($event.target.options,function(o){return o.selected})" +
        ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
        "return ".concat(number ? '_n(val)' : 'val', "})");
    var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
    var code = "var $$selectedVal = ".concat(selectedVal, ";");
    code = "".concat(code, " ").concat(genAssignmentCode(value, assignment));
    addHandler(el, 'change', code, null, true);
}
function genDefaultModel(el, value, modifiers) {
    var type = el.attrsMap.type;
    // warn if v-bind:value conflicts with v-model
    // except for inputs with v-bind:type
    if (process.env.NODE_ENV !== 'production') {
        var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
        var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
        if (value_1 && !typeBinding) {
            var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
            warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") +
                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
        }
    }
    var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;
    var needCompositionGuard = !lazy && type !== 'range';
    var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
    var valueExpression = '$event.target.value';
    if (trim) {
        valueExpression = "$event.target.value.trim()";
    }
    if (number) {
        valueExpression = "_n(".concat(valueExpression, ")");
    }
    var code = genAssignmentCode(value, valueExpression);
    if (needCompositionGuard) {
        code = "if($event.target.composing)return;".concat(code);
    }
    addProp(el, 'value', "(".concat(value, ")"));
    addHandler(el, event, code, null, true);
    if (trim || number) {
        addHandler(el, 'blur', '$forceUpdate()');
    }
}

// normalize v-model event tokens that can only be determined at runtime.
// it's important to place the event as the first in the array because
// the whole point is ensuring the v-model callback gets called before
// user-attached handlers.
function normalizeEvents(on) {
    /* istanbul ignore if */
    if (isDef(on[RANGE_TOKEN])) {
        // IE input[type=range] only supports `change` event
        var event_1 = isIE ? 'change' : 'input';
        on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);
        delete on[RANGE_TOKEN];
    }
    // This was originally intended to fix #4521 but no longer necessary
    // after 2.5. Keeping it for backwards compat with generated code from < 2.4
    /* istanbul ignore if */
    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
        delete on[CHECKBOX_RADIO_TOKEN];
    }
}
var target;
function createOnceHandler(event, handler, capture) {
    var _target = target; // save current target element in closure
    return function onceHandler() {
        var res = handler.apply(null, arguments);
        if (res !== null) {
            remove(event, onceHandler, capture, _target);
        }
    };
}
// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
// implementation and does not fire microtasks in between event propagation, so
// safe to exclude.
var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
function add(name, handler, capture, passive) {
    // async edge case #6566: inner click event triggers patch, event handler
    // attached to outer element during patch, and triggered again. This
    // happens because browsers fire microtask ticks between event propagation.
    // the solution is simple: we save the timestamp when a handler is attached,
    // and the handler would only fire if the event passed to it was fired
    // AFTER it was attached.
    if (useMicrotaskFix) {
        var attachedTimestamp_1 = currentFlushTimestamp;
        var original_1 = handler;
        //@ts-expect-error
        handler = original_1._wrapper = function (e) {
            if (
            // no bubbling, should always fire.
            // this is just a safety net in case event.timeStamp is unreliable in
            // certain weird environments...
            e.target === e.currentTarget ||
                // event is fired after handler attachment
                e.timeStamp >= attachedTimestamp_1 ||
                // bail for environments that have buggy event.timeStamp implementations
                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
                // #9681 QtWebEngine event.timeStamp is negative value
                e.timeStamp <= 0 ||
                // #9448 bail if event is fired in another document in a multi-page
                // electron/nw.js app, since event.timeStamp will be using a different
                // starting reference
                e.target.ownerDocument !== document) {
                return original_1.apply(this, arguments);
            }
        };
    }
    target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);
}
function remove(name, handler, capture, _target) {
    (_target || target).removeEventListener(name, 
    //@ts-expect-error
    handler._wrapper || handler, capture);
}
function updateDOMListeners(oldVnode, vnode) {
    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
        return;
    }
    var on = vnode.data.on || {};
    var oldOn = oldVnode.data.on || {};
    // vnode is empty when removing all listeners,
    // and use old vnode dom element
    target = vnode.elm || oldVnode.elm;
    normalizeEvents(on);
    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
    target = undefined;
}
var events = {
    create: updateDOMListeners,
    update: updateDOMListeners,
    // @ts-expect-error emptyNode has actually data
    destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }
};

var svgContainer;
function updateDOMProps(oldVnode, vnode) {
    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
        return;
    }
    var key, cur;
    var elm = vnode.elm;
    var oldProps = oldVnode.data.domProps || {};
    var props = vnode.data.domProps || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
        props = vnode.data.domProps = extend({}, props);
    }
    for (key in oldProps) {
        if (!(key in props)) {
            elm[key] = '';
        }
    }
    for (key in props) {
        cur = props[key];
        // ignore children if the node has textContent or innerHTML,
        // as these will throw away existing DOM nodes and cause removal errors
        // on subsequent patches (#3360)
        if (key === 'textContent' || key === 'innerHTML') {
            if (vnode.children)
                vnode.children.length = 0;
            if (cur === oldProps[key])
                continue;
            // #6601 work around Chrome version <= 55 bug where single textNode
            // replaced by innerHTML/textContent retains its parentNode property
            if (elm.childNodes.length === 1) {
                elm.removeChild(elm.childNodes[0]);
            }
        }
        if (key === 'value' && elm.tagName !== 'PROGRESS') {
            // store value as _value as well since
            // non-string values will be stringified
            elm._value = cur;
            // avoid resetting cursor position when value is the same
            var strCur = isUndef(cur) ? '' : String(cur);
            if (shouldUpdateValue(elm, strCur)) {
                elm.value = strCur;
            }
        }
        else if (key === 'innerHTML' &&
            isSVG(elm.tagName) &&
            isUndef(elm.innerHTML)) {
            // IE doesn't support innerHTML for SVG elements
            svgContainer = svgContainer || document.createElement('div');
            svgContainer.innerHTML = "<svg>".concat(cur, "</svg>");
            var svg = svgContainer.firstChild;
            while (elm.firstChild) {
                elm.removeChild(elm.firstChild);
            }
            while (svg.firstChild) {
                elm.appendChild(svg.firstChild);
            }
        }
        else if (
        // skip the update if old and new VDOM state is the same.
        // `value` is handled separately because the DOM value may be temporarily
        // out of sync with VDOM state due to focus, composition and modifiers.
        // This  #4521 by skipping the unnecessary `checked` update.
        cur !== oldProps[key]) {
            // some property updates can throw
            // e.g. `value` on <progress> w/ non-finite value
            try {
                elm[key] = cur;
            }
            catch (e) { }
        }
    }
}
function shouldUpdateValue(elm, checkVal) {
    return (
    //@ts-expect-error
    !elm.composing &&
        (elm.tagName === 'OPTION' ||
            isNotInFocusAndDirty(elm, checkVal) ||
            isDirtyWithModifiers(elm, checkVal)));
}
function isNotInFocusAndDirty(elm, checkVal) {
    // return true when textbox (.number and .trim) loses focus and its value is
    // not equal to the updated value
    var notInFocus = true;
    // #6157
    // work around IE bug when accessing document.activeElement in an iframe
    try {
        notInFocus = document.activeElement !== elm;
    }
    catch (e) { }
    return notInFocus && elm.value !== checkVal;
}
function isDirtyWithModifiers(elm, newVal) {
    var value = elm.value;
    var modifiers = elm._vModifiers; // injected by v-model runtime
    if (isDef(modifiers)) {
        if (modifiers.number) {
            return toNumber(value) !== toNumber(newVal);
        }
        if (modifiers.trim) {
            return value.trim() !== newVal.trim();
        }
    }
    return value !== newVal;
}
var domProps = {
    create: updateDOMProps,
    update: updateDOMProps
};

var parseStyleText = cached(function (cssText) {
    var res = {};
    var listDelimiter = /;(?![^(]*\))/g;
    var propertyDelimiter = /:(.+)/;
    cssText.split(listDelimiter).forEach(function (item) {
        if (item) {
            var tmp = item.split(propertyDelimiter);
            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return res;
});
// merge static and dynamic style data on the same vnode
function normalizeStyleData(data) {
    var style = normalizeStyleBinding(data.style);
    // static style is pre-processed into an object during compilation
    // and is always a fresh object, so it's safe to merge into it
    return data.staticStyle ? extend(data.staticStyle, style) : style;
}
// normalize possible array / string values into Object
function normalizeStyleBinding(bindingStyle) {
    if (Array.isArray(bindingStyle)) {
        return toObject(bindingStyle);
    }
    if (typeof bindingStyle === 'string') {
        return parseStyleText(bindingStyle);
    }
    return bindingStyle;
}
/**
 * parent component style should be after child's
 * so that parent component's style could override it
 */
function getStyle(vnode, checkChild) {
    var res = {};
    var styleData;
    if (checkChild) {
        var childNode = vnode;
        while (childNode.componentInstance) {
            childNode = childNode.componentInstance._vnode;
            if (childNode &&
                childNode.data &&
                (styleData = normalizeStyleData(childNode.data))) {
                extend(res, styleData);
            }
        }
    }
    if ((styleData = normalizeStyleData(vnode.data))) {
        extend(res, styleData);
    }
    var parentNode = vnode;
    // @ts-expect-error parentNode.parent not VNodeWithData
    while ((parentNode = parentNode.parent)) {
        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
            extend(res, styleData);
        }
    }
    return res;
}

var cssVarRE = /^--/;
var importantRE = /\s*!important$/;
var setProp = function (el, name, val) {
    /* istanbul ignore if */
    if (cssVarRE.test(name)) {
        el.style.setProperty(name, val);
    }
    else if (importantRE.test(val)) {
        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
    }
    else {
        var normalizedName = normalize(name);
        if (Array.isArray(val)) {
            // Support values array created by autoprefixer, e.g.
            // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
            // Set them one by one, and the browser will only set those it can recognize
            for (var i = 0, len = val.length; i < len; i++) {
                el.style[normalizedName] = val[i];
            }
        }
        else {
            el.style[normalizedName] = val;
        }
    }
};
var vendorNames = ['Webkit', 'Moz', 'ms'];
var emptyStyle;
var normalize = cached(function (prop) {
    emptyStyle = emptyStyle || document.createElement('div').style;
    prop = camelize(prop);
    if (prop !== 'filter' && prop in emptyStyle) {
        return prop;
    }
    var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
    for (var i = 0; i < vendorNames.length; i++) {
        var name_1 = vendorNames[i] + capName;
        if (name_1 in emptyStyle) {
            return name_1;
        }
    }
});
function updateStyle(oldVnode, vnode) {
    var data = vnode.data;
    var oldData = oldVnode.data;
    if (isUndef(data.staticStyle) &&
        isUndef(data.style) &&
        isUndef(oldData.staticStyle) &&
        isUndef(oldData.style)) {
        return;
    }
    var cur, name;
    var el = vnode.elm;
    var oldStaticStyle = oldData.staticStyle;
    var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
    // if static style exists, stylebinding already merged into it when doing normalizeStyleData
    var oldStyle = oldStaticStyle || oldStyleBinding;
    var style = normalizeStyleBinding(vnode.data.style) || {};
    // store normalized style under a different key for next diff
    // make sure to clone it if it's reactive, since the user likely wants
    // to mutate it.
    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
    var newStyle = getStyle(vnode, true);
    for (name in oldStyle) {
        if (isUndef(newStyle[name])) {
            setProp(el, name, '');
        }
    }
    for (name in newStyle) {
        cur = newStyle[name];
        if (cur !== oldStyle[name]) {
            // ie9 setting to null has no effect, must use empty string
            setProp(el, name, cur == null ? '' : cur);
        }
    }
}
var style$1 = {
    create: updateStyle,
    update: updateStyle
};

var whitespaceRE$1 = /\s+/;
/**
 * Add class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function addClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); });
        }
        else {
            el.classList.add(cls);
        }
    }
    else {
        var cur = " ".concat(el.getAttribute('class') || '', " ");
        if (cur.indexOf(' ' + cls + ' ') < 0) {
            el.setAttribute('class', (cur + cls).trim());
        }
    }
}
/**
 * Remove class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function removeClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); });
        }
        else {
            el.classList.remove(cls);
        }
        if (!el.classList.length) {
            el.removeAttribute('class');
        }
    }
    else {
        var cur = " ".concat(el.getAttribute('class') || '', " ");
        var tar = ' ' + cls + ' ';
        while (cur.indexOf(tar) >= 0) {
            cur = cur.replace(tar, ' ');
        }
        cur = cur.trim();
        if (cur) {
            el.setAttribute('class', cur);
        }
        else {
            el.removeAttribute('class');
        }
    }
}

function resolveTransition(def) {
    if (!def) {
        return;
    }
    /* istanbul ignore else */
    if (typeof def === 'object') {
        var res = {};
        if (def.css !== false) {
            extend(res, autoCssTransition(def.name || 'v'));
        }
        extend(res, def);
        return res;
    }
    else if (typeof def === 'string') {
        return autoCssTransition(def);
    }
}
var autoCssTransition = cached(function (name) {
    return {
        enterClass: "".concat(name, "-enter"),
        enterToClass: "".concat(name, "-enter-to"),
        enterActiveClass: "".concat(name, "-enter-active"),
        leaveClass: "".concat(name, "-leave"),
        leaveToClass: "".concat(name, "-leave-to"),
        leaveActiveClass: "".concat(name, "-leave-active")
    };
});
var hasTransition = inBrowser && !isIE9;
var TRANSITION = 'transition';
var ANIMATION = 'animation';
// Transition property/event sniffing
var transitionProp = 'transition';
var transitionEndEvent = 'transitionend';
var animationProp = 'animation';
var animationEndEvent = 'animationend';
if (hasTransition) {
    /* istanbul ignore if */
    if (window.ontransitionend === undefined &&
        window.onwebkittransitionend !== undefined) {
        transitionProp = 'WebkitTransition';
        transitionEndEvent = 'webkitTransitionEnd';
    }
    if (window.onanimationend === undefined &&
        window.onwebkitanimationend !== undefined) {
        animationProp = 'WebkitAnimation';
        animationEndEvent = 'webkitAnimationEnd';
    }
}
// binding to window is necessary to make hot reload work in IE in strict mode
var raf = inBrowser
    ? window.requestAnimationFrame
        ? window.requestAnimationFrame.bind(window)
        : setTimeout
    : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };
function nextFrame(fn) {
    raf(function () {
        // @ts-expect-error
        raf(fn);
    });
}
function addTransitionClass(el, cls) {
    var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
    if (transitionClasses.indexOf(cls) < 0) {
        transitionClasses.push(cls);
        addClass(el, cls);
    }
}
function removeTransitionClass(el, cls) {
    if (el._transitionClasses) {
        remove$2(el._transitionClasses, cls);
    }
    removeClass(el, cls);
}
function whenTransitionEnds(el, expectedType, cb) {
    var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;
    if (!type)
        return cb();
    var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
    var ended = 0;
    var end = function () {
        el.removeEventListener(event, onEnd);
        cb();
    };
    var onEnd = function (e) {
        if (e.target === el) {
            if (++ended >= propCount) {
                end();
            }
        }
    };
    setTimeout(function () {
        if (ended < propCount) {
            end();
        }
    }, timeout + 1);
    el.addEventListener(event, onEnd);
}
var transformRE = /\b(transform|all)(,|$)/;
function getTransitionInfo(el, expectedType) {
    var styles = window.getComputedStyle(el);
    // JSDOM may return undefined for transition properties
    var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
    var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
    var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
    var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
    var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
    var animationTimeout = getTimeout(animationDelays, animationDurations);
    var type;
    var timeout = 0;
    var propCount = 0;
    /* istanbul ignore if */
    if (expectedType === TRANSITION) {
        if (transitionTimeout > 0) {
            type = TRANSITION;
            timeout = transitionTimeout;
            propCount = transitionDurations.length;
        }
    }
    else if (expectedType === ANIMATION) {
        if (animationTimeout > 0) {
            type = ANIMATION;
            timeout = animationTimeout;
            propCount = animationDurations.length;
        }
    }
    else {
        timeout = Math.max(transitionTimeout, animationTimeout);
        type =
            timeout > 0
                ? transitionTimeout > animationTimeout
                    ? TRANSITION
                    : ANIMATION
                : null;
        propCount = type
            ? type === TRANSITION
                ? transitionDurations.length
                : animationDurations.length
            : 0;
    }
    var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
    return {
        type: type,
        timeout: timeout,
        propCount: propCount,
        hasTransform: hasTransform
    };
}
function getTimeout(delays, durations) {
    /* istanbul ignore next */
    while (delays.length < durations.length) {
        delays = delays.concat(delays);
    }
    return Math.max.apply(null, durations.map(function (d, i) {
        return toMs(d) + toMs(delays[i]);
    }));
}
// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
// in a locale-dependent way, using a comma instead of a dot.
// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
// as a floor function) causing unexpected behaviors
function toMs(s) {
    return Number(s.slice(0, -1).replace(',', '.')) * 1000;
}

function enter(vnode, toggleDisplay) {
    var el = vnode.elm;
    // call leave callback now
    if (isDef(el._leaveCb)) {
        el._leaveCb.cancelled = true;
        el._leaveCb();
    }
    var data = resolveTransition(vnode.data.transition);
    if (isUndef(data)) {
        return;
    }
    /* istanbul ignore if */
    if (isDef(el._enterCb) || el.nodeType !== 1) {
        return;
    }
    var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;
    // activeInstance will always be the <transition> component managing this
    // transition. One edge case to check is when the <transition> is placed
    // as the root node of a child component. In that case we need to check
    // <transition>'s parent for appear check.
    var context = activeInstance;
    var transitionNode = activeInstance.$vnode;
    while (transitionNode && transitionNode.parent) {
        context = transitionNode.context;
        transitionNode = transitionNode.parent;
    }
    var isAppear = !context._isMounted || !vnode.isRootInsert;
    if (isAppear && !appear && appear !== '') {
        return;
    }
    var startClass = isAppear && appearClass ? appearClass : enterClass;
    var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
    var toClass = isAppear && appearToClass ? appearToClass : enterToClass;
    var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
    var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
    var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
    var enterCancelledHook = isAppear
        ? appearCancelled || enterCancelled
        : enterCancelled;
    var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
    if (process.env.NODE_ENV !== 'production' && explicitEnterDuration != null) {
        checkDuration(explicitEnterDuration, 'enter', vnode);
    }
    var expectsCSS = css !== false && !isIE9;
    var userWantsControl = getHookArgumentsLength(enterHook);
    var cb = (el._enterCb = once(function () {
        if (expectsCSS) {
            removeTransitionClass(el, toClass);
            removeTransitionClass(el, activeClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, startClass);
            }
            enterCancelledHook && enterCancelledHook(el);
        }
        else {
            afterEnterHook && afterEnterHook(el);
        }
        el._enterCb = null;
    }));
    if (!vnode.data.show) {
        // remove pending leave element on enter by injecting an insert hook
        mergeVNodeHook(vnode, 'insert', function () {
            var parent = el.parentNode;
            var pendingNode = parent && parent._pending && parent._pending[vnode.key];
            if (pendingNode &&
                pendingNode.tag === vnode.tag &&
                pendingNode.elm._leaveCb) {
                pendingNode.elm._leaveCb();
            }
            enterHook && enterHook(el, cb);
        });
    }
    // start enter transition
    beforeEnterHook && beforeEnterHook(el);
    if (expectsCSS) {
        addTransitionClass(el, startClass);
        addTransitionClass(el, activeClass);
        nextFrame(function () {
            removeTransitionClass(el, startClass);
            // @ts-expect-error
            if (!cb.cancelled) {
                addTransitionClass(el, toClass);
                if (!userWantsControl) {
                    if (isValidDuration(explicitEnterDuration)) {
                        setTimeout(cb, explicitEnterDuration);
                    }
                    else {
                        whenTransitionEnds(el, type, cb);
                    }
                }
            }
        });
    }
    if (vnode.data.show) {
        toggleDisplay && toggleDisplay();
        enterHook && enterHook(el, cb);
    }
    if (!expectsCSS && !userWantsControl) {
        cb();
    }
}
function leave(vnode, rm) {
    var el = vnode.elm;
    // call enter callback now
    if (isDef(el._enterCb)) {
        el._enterCb.cancelled = true;
        el._enterCb();
    }
    var data = resolveTransition(vnode.data.transition);
    if (isUndef(data) || el.nodeType !== 1) {
        return rm();
    }
    /* istanbul ignore if */
    if (isDef(el._leaveCb)) {
        return;
    }
    var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;
    var expectsCSS = css !== false && !isIE9;
    var userWantsControl = getHookArgumentsLength(leave);
    var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
    if (process.env.NODE_ENV !== 'production' && isDef(explicitLeaveDuration)) {
        checkDuration(explicitLeaveDuration, 'leave', vnode);
    }
    var cb = (el._leaveCb = once(function () {
        if (el.parentNode && el.parentNode._pending) {
            el.parentNode._pending[vnode.key] = null;
        }
        if (expectsCSS) {
            removeTransitionClass(el, leaveToClass);
            removeTransitionClass(el, leaveActiveClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, leaveClass);
            }
            leaveCancelled && leaveCancelled(el);
        }
        else {
            rm();
            afterLeave && afterLeave(el);
        }
        el._leaveCb = null;
    }));
    if (delayLeave) {
        delayLeave(performLeave);
    }
    else {
        performLeave();
    }
    function performLeave() {
        // the delayed leave may have already been cancelled
        // @ts-expect-error
        if (cb.cancelled) {
            return;
        }
        // record leaving element
        if (!vnode.data.show && el.parentNode) {
            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
                vnode;
        }
        beforeLeave && beforeLeave(el);
        if (expectsCSS) {
            addTransitionClass(el, leaveClass);
            addTransitionClass(el, leaveActiveClass);
            nextFrame(function () {
                removeTransitionClass(el, leaveClass);
                // @ts-expect-error
                if (!cb.cancelled) {
                    addTransitionClass(el, leaveToClass);
                    if (!userWantsControl) {
                        if (isValidDuration(explicitLeaveDuration)) {
                            setTimeout(cb, explicitLeaveDuration);
                        }
                        else {
                            whenTransitionEnds(el, type, cb);
                        }
                    }
                }
            });
        }
        leave && leave(el, cb);
        if (!expectsCSS && !userWantsControl) {
            cb();
        }
    }
}
// only used in dev mode
function checkDuration(val, name, vnode) {
    if (typeof val !== 'number') {
        warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") +
            "got ".concat(JSON.stringify(val), "."), vnode.context);
    }
    else if (isNaN(val)) {
        warn$2("<transition> explicit ".concat(name, " duration is NaN - ") +
            'the duration expression might be incorrect.', vnode.context);
    }
}
function isValidDuration(val) {
    return typeof val === 'number' && !isNaN(val);
}
/**
 * Normalize a transition hook's argument length. The hook may be:
 * - a merged hook (invoker) with the original in .fns
 * - a wrapped component method (check ._length)
 * - a plain function (.length)
 */
function getHookArgumentsLength(fn) {
    if (isUndef(fn)) {
        return false;
    }
    // @ts-expect-error
    var invokerFns = fn.fns;
    if (isDef(invokerFns)) {
        // invoker
        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
    }
    else {
        // @ts-expect-error
        return (fn._length || fn.length) > 1;
    }
}
function _enter(_, vnode) {
    if (vnode.data.show !== true) {
        enter(vnode);
    }
}
var transition = inBrowser
    ? {
        create: _enter,
        activate: _enter,
        remove: function (vnode, rm) {
            /* istanbul ignore else */
            if (vnode.data.show !== true) {
                // @ts-expect-error
                leave(vnode, rm);
            }
            else {
                rm();
            }
        }
    }
    : {};

var platformModules = [attrs, klass$1, events, domProps, style$1, transition];

// the directive module should be applied last, after all
// built-in modules have been applied.
var modules$1 = platformModules.concat(baseModules);
var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 });

/**
 * Not type checking this file because flow doesn't like attaching
 * properties to Elements.
 */
/* istanbul ignore if */
if (isIE9) {
    // http://www.matts411.com/post/internet-explorer-9-oninput/
    document.addEventListener('selectionchange', function () {
        var el = document.activeElement;
        // @ts-expect-error
        if (el && el.vmodel) {
            trigger(el, 'input');
        }
    });
}
var directive = {
    inserted: function (el, binding, vnode, oldVnode) {
        if (vnode.tag === 'select') {
            // #6903
            if (oldVnode.elm && !oldVnode.elm._vOptions) {
                mergeVNodeHook(vnode, 'postpatch', function () {
                    directive.componentUpdated(el, binding, vnode);
                });
            }
            else {
                setSelected(el, binding, vnode.context);
            }
            el._vOptions = [].map.call(el.options, getValue);
        }
        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
            el._vModifiers = binding.modifiers;
            if (!binding.modifiers.lazy) {
                el.addEventListener('compositionstart', onCompositionStart);
                el.addEventListener('compositionend', onCompositionEnd);
                // Safari < 10.2 & UIWebView doesn't fire compositionend when
                // switching focus before confirming composition choice
                // this also fixes the issue where some browsers e.g. iOS Chrome
                // fires "change" instead of "input" on autocomplete.
                el.addEventListener('change', onCompositionEnd);
                /* istanbul ignore if */
                if (isIE9) {
                    el.vmodel = true;
                }
            }
        }
    },
    componentUpdated: function (el, binding, vnode) {
        if (vnode.tag === 'select') {
            setSelected(el, binding, vnode.context);
            // in case the options rendered by v-for have changed,
            // it's possible that the value is out-of-sync with the rendered options.
            // detect such cases and filter out values that no longer has a matching
            // option in the DOM.
            var prevOptions_1 = el._vOptions;
            var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));
            if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {
                // trigger change event if
                // no matching option found for at least one value
                var needReset = el.multiple
                    ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })
                    : binding.value !== binding.oldValue &&
                        hasNoMatchingOption(binding.value, curOptions_1);
                if (needReset) {
                    trigger(el, 'change');
                }
            }
        }
    }
};
function setSelected(el, binding, vm) {
    actuallySetSelected(el, binding, vm);
    /* istanbul ignore if */
    if (isIE || isEdge) {
        setTimeout(function () {
            actuallySetSelected(el, binding, vm);
        }, 0);
    }
}
function actuallySetSelected(el, binding, vm) {
    var value = binding.value;
    var isMultiple = el.multiple;
    if (isMultiple && !Array.isArray(value)) {
        process.env.NODE_ENV !== 'production' &&
            warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") +
                "expects an Array value for its binding, but got ".concat(Object.prototype.toString
                    .call(value)
                    .slice(8, -1)), vm);
        return;
    }
    var selected, option;
    for (var i = 0, l = el.options.length; i < l; i++) {
        option = el.options[i];
        if (isMultiple) {
            selected = looseIndexOf(value, getValue(option)) > -1;
            if (option.selected !== selected) {
                option.selected = selected;
            }
        }
        else {
            if (looseEqual(getValue(option), value)) {
                if (el.selectedIndex !== i) {
                    el.selectedIndex = i;
                }
                return;
            }
        }
    }
    if (!isMultiple) {
        el.selectedIndex = -1;
    }
}
function hasNoMatchingOption(value, options) {
    return options.every(function (o) { return !looseEqual(o, value); });
}
function getValue(option) {
    return '_value' in option ? option._value : option.value;
}
function onCompositionStart(e) {
    e.target.composing = true;
}
function onCompositionEnd(e) {
    // prevent triggering an input event for no reason
    if (!e.target.composing)
        return;
    e.target.composing = false;
    trigger(e.target, 'input');
}
function trigger(el, type) {
    var e = document.createEvent('HTMLEvents');
    e.initEvent(type, true, true);
    el.dispatchEvent(e);
}

// recursively search for possible transition defined inside the component root
function locateNode(vnode) {
    // @ts-expect-error
    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
        ? locateNode(vnode.componentInstance._vnode)
        : vnode;
}
var show = {
    bind: function (el, _a, vnode) {
        var value = _a.value;
        vnode = locateNode(vnode);
        var transition = vnode.data && vnode.data.transition;
        var originalDisplay = (el.__vOriginalDisplay =
            el.style.display === 'none' ? '' : el.style.display);
        if (value && transition) {
            vnode.data.show = true;
            enter(vnode, function () {
                el.style.display = originalDisplay;
            });
        }
        else {
            el.style.display = value ? originalDisplay : 'none';
        }
    },
    update: function (el, _a, vnode) {
        var value = _a.value, oldValue = _a.oldValue;
        /* istanbul ignore if */
        if (!value === !oldValue)
            return;
        vnode = locateNode(vnode);
        var transition = vnode.data && vnode.data.transition;
        if (transition) {
            vnode.data.show = true;
            if (value) {
                enter(vnode, function () {
                    el.style.display = el.__vOriginalDisplay;
                });
            }
            else {
                leave(vnode, function () {
                    el.style.display = 'none';
                });
            }
        }
        else {
            el.style.display = value ? el.__vOriginalDisplay : 'none';
        }
    },
    unbind: function (el, binding, vnode, oldVnode, isDestroy) {
        if (!isDestroy) {
            el.style.display = el.__vOriginalDisplay;
        }
    }
};

var platformDirectives = {
    model: directive,
    show: show
};

// Provides transition support for a single element/component.
var transitionProps = {
    name: String,
    appear: Boolean,
    css: Boolean,
    mode: String,
    type: String,
    enterClass: String,
    leaveClass: String,
    enterToClass: String,
    leaveToClass: String,
    enterActiveClass: String,
    leaveActiveClass: String,
    appearClass: String,
    appearActiveClass: String,
    appearToClass: String,
    duration: [Number, String, Object]
};
// in case the child is also an abstract component, e.g. <keep-alive>
// we want to recursively retrieve the real component to be rendered
function getRealChild(vnode) {
    var compOptions = vnode && vnode.componentOptions;
    if (compOptions && compOptions.Ctor.options.abstract) {
        return getRealChild(getFirstComponentChild(compOptions.children));
    }
    else {
        return vnode;
    }
}
function extractTransitionData(comp) {
    var data = {};
    var options = comp.$options;
    // props
    for (var key in options.propsData) {
        data[key] = comp[key];
    }
    // events.
    // extract listeners and pass them directly to the transition methods
    var listeners = options._parentListeners;
    for (var key in listeners) {
        data[camelize(key)] = listeners[key];
    }
    return data;
}
function placeholder(h, rawChild) {
    // @ts-expect-error
    if (/\d-keep-alive$/.test(rawChild.tag)) {
        return h('keep-alive', {
            props: rawChild.componentOptions.propsData
        });
    }
}
function hasParentTransition(vnode) {
    while ((vnode = vnode.parent)) {
        if (vnode.data.transition) {
            return true;
        }
    }
}
function isSameChild(child, oldChild) {
    return oldChild.key === child.key && oldChild.tag === child.tag;
}
var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
var isVShowDirective = function (d) { return d.name === 'show'; };
var Transition = {
    name: 'transition',
    props: transitionProps,
    abstract: true,
    render: function (h) {
        var _this = this;
        var children = this.$slots.default;
        if (!children) {
            return;
        }
        // filter out text nodes (possible whitespaces)
        children = children.filter(isNotTextNode);
        /* istanbul ignore if */
        if (!children.length) {
            return;
        }
        // warn multiple elements
        if (process.env.NODE_ENV !== 'production' && children.length > 1) {
            warn$2('<transition> can only be used on a single element. Use ' +
                '<transition-group> for lists.', this.$parent);
        }
        var mode = this.mode;
        // warn invalid mode
        if (process.env.NODE_ENV !== 'production' && mode && mode !== 'in-out' && mode !== 'out-in') {
            warn$2('invalid <transition> mode: ' + mode, this.$parent);
        }
        var rawChild = children[0];
        // if this is a component root node and the component's
        // parent container node also has transition, skip.
        if (hasParentTransition(this.$vnode)) {
            return rawChild;
        }
        // apply transition data to child
        // use getRealChild() to ignore abstract components e.g. keep-alive
        var child = getRealChild(rawChild);
        /* istanbul ignore if */
        if (!child) {
            return rawChild;
        }
        if (this._leaving) {
            return placeholder(h, rawChild);
        }
        // ensure a key that is unique to the vnode type and to this transition
        // component instance. This key will be used to remove pending leaving nodes
        // during entering.
        var id = "__transition-".concat(this._uid, "-");
        child.key =
            child.key == null
                ? child.isComment
                    ? id + 'comment'
                    : id + child.tag
                : isPrimitive(child.key)
                    ? String(child.key).indexOf(id) === 0
                        ? child.key
                        : id + child.key
                    : child.key;
        var data = ((child.data || (child.data = {})).transition =
            extractTransitionData(this));
        var oldRawChild = this._vnode;
        var oldChild = getRealChild(oldRawChild);
        // mark v-show
        // so that the transition module can hand over the control to the directive
        if (child.data.directives && child.data.directives.some(isVShowDirective)) {
            child.data.show = true;
        }
        if (oldChild &&
            oldChild.data &&
            !isSameChild(child, oldChild) &&
            !isAsyncPlaceholder(oldChild) &&
            // #6687 component root is a comment node
            !(oldChild.componentInstance &&
                oldChild.componentInstance._vnode.isComment)) {
            // replace old child transition data with fresh one
            // important for dynamic transitions!
            var oldData = (oldChild.data.transition = extend({}, data));
            // handle transition mode
            if (mode === 'out-in') {
                // return placeholder node and queue update when leave finishes
                this._leaving = true;
                mergeVNodeHook(oldData, 'afterLeave', function () {
                    _this._leaving = false;
                    _this.$forceUpdate();
                });
                return placeholder(h, rawChild);
            }
            else if (mode === 'in-out') {
                if (isAsyncPlaceholder(child)) {
                    return oldRawChild;
                }
                var delayedLeave_1;
                var performLeave = function () {
                    delayedLeave_1();
                };
                mergeVNodeHook(data, 'afterEnter', performLeave);
                mergeVNodeHook(data, 'enterCancelled', performLeave);
                mergeVNodeHook(oldData, 'delayLeave', function (leave) {
                    delayedLeave_1 = leave;
                });
            }
        }
        return rawChild;
    }
};

// Provides transition support for list items.
var props = extend({
    tag: String,
    moveClass: String
}, transitionProps);
delete props.mode;
var TransitionGroup = {
    props: props,
    beforeMount: function () {
        var _this = this;
        var update = this._update;
        this._update = function (vnode, hydrating) {
            var restoreActiveInstance = setActiveInstance(_this);
            // force removing pass
            _this.__patch__(_this._vnode, _this.kept, false, // hydrating
            true // removeOnly (!important, avoids unnecessary moves)
            );
            _this._vnode = _this.kept;
            restoreActiveInstance();
            update.call(_this, vnode, hydrating);
        };
    },
    render: function (h) {
        var tag = this.tag || this.$vnode.data.tag || 'span';
        var map = Object.create(null);
        var prevChildren = (this.prevChildren = this.children);
        var rawChildren = this.$slots.default || [];
        var children = (this.children = []);
        var transitionData = extractTransitionData(this);
        for (var i = 0; i < rawChildren.length; i++) {
            var c = rawChildren[i];
            if (c.tag) {
                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
                    children.push(c);
                    map[c.key] = c;
                    (c.data || (c.data = {})).transition = transitionData;
                }
                else if (process.env.NODE_ENV !== 'production') {
                    var opts = c.componentOptions;
                    var name_1 = opts
                        ? getComponentName(opts.Ctor.options) || opts.tag || ''
                        : c.tag;
                    warn$2("<transition-group> children must be keyed: <".concat(name_1, ">"));
                }
            }
        }
        if (prevChildren) {
            var kept = [];
            var removed = [];
            for (var i = 0; i < prevChildren.length; i++) {
                var c = prevChildren[i];
                c.data.transition = transitionData;
                // @ts-expect-error .getBoundingClientRect is not typed in Node
                c.data.pos = c.elm.getBoundingClientRect();
                if (map[c.key]) {
                    kept.push(c);
                }
                else {
                    removed.push(c);
                }
            }
            this.kept = h(tag, null, kept);
            this.removed = removed;
        }
        return h(tag, null, children);
    },
    updated: function () {
        var children = this.prevChildren;
        var moveClass = this.moveClass || (this.name || 'v') + '-move';
        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
            return;
        }
        // we divide the work into three loops to avoid mixing DOM reads and writes
        // in each iteration - which helps prevent layout thrashing.
        children.forEach(callPendingCbs);
        children.forEach(recordPosition);
        children.forEach(applyTranslation);
        // force reflow to put everything in position
        // assign to this to avoid being removed in tree-shaking
        // $flow-disable-line
        this._reflow = document.body.offsetHeight;
        children.forEach(function (c) {
            if (c.data.moved) {
                var el_1 = c.elm;
                var s = el_1.style;
                addTransitionClass(el_1, moveClass);
                s.transform = s.WebkitTransform = s.transitionDuration = '';
                el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {
                    if (e && e.target !== el_1) {
                        return;
                    }
                    if (!e || /transform$/.test(e.propertyName)) {
                        el_1.removeEventListener(transitionEndEvent, cb);
                        el_1._moveCb = null;
                        removeTransitionClass(el_1, moveClass);
                    }
                }));
            }
        });
    },
    methods: {
        hasMove: function (el, moveClass) {
            /* istanbul ignore if */
            if (!hasTransition) {
                return false;
            }
            /* istanbul ignore if */
            if (this._hasMove) {
                return this._hasMove;
            }
            // Detect whether an element with the move class applied has
            // CSS transitions. Since the element may be inside an entering
            // transition at this very moment, we make a clone of it and remove
            // all other transition classes applied to ensure only the move class
            // is applied.
            var clone = el.cloneNode();
            if (el._transitionClasses) {
                el._transitionClasses.forEach(function (cls) {
                    removeClass(clone, cls);
                });
            }
            addClass(clone, moveClass);
            clone.style.display = 'none';
            this.$el.appendChild(clone);
            var info = getTransitionInfo(clone);
            this.$el.removeChild(clone);
            return (this._hasMove = info.hasTransform);
        }
    }
};
function callPendingCbs(c) {
    /* istanbul ignore if */
    if (c.elm._moveCb) {
        c.elm._moveCb();
    }
    /* istanbul ignore if */
    if (c.elm._enterCb) {
        c.elm._enterCb();
    }
}
function recordPosition(c) {
    c.data.newPos = c.elm.getBoundingClientRect();
}
function applyTranslation(c) {
    var oldPos = c.data.pos;
    var newPos = c.data.newPos;
    var dx = oldPos.left - newPos.left;
    var dy = oldPos.top - newPos.top;
    if (dx || dy) {
        c.data.moved = true;
        var s = c.elm.style;
        s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)");
        s.transitionDuration = '0s';
    }
}

var platformComponents = {
    Transition: Transition,
    TransitionGroup: TransitionGroup
};

// install platform specific utils
Vue.config.mustUseProp = mustUseProp;
Vue.config.isReservedTag = isReservedTag;
Vue.config.isReservedAttr = isReservedAttr;
Vue.config.getTagNamespace = getTagNamespace;
Vue.config.isUnknownElement = isUnknownElement;
// install platform runtime directives & components
extend(Vue.options.directives, platformDirectives);
extend(Vue.options.components, platformComponents);
// install platform patch function
Vue.prototype.__patch__ = inBrowser ? patch : noop;
// public mount method
Vue.prototype.$mount = function (el, hydrating) {
    el = el && inBrowser ? query(el) : undefined;
    return mountComponent(this, el, hydrating);
};
// devtools global hook
/* istanbul ignore next */
if (inBrowser) {
    setTimeout(function () {
        if (config.devtools) {
            if (devtools) {
                devtools.emit('init', Vue);
            }
            else if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {
                // @ts-expect-error
                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
                    'https://github.com/vuejs/vue-devtools');
            }
        }
        if (process.env.NODE_ENV !== 'production' &&
            process.env.NODE_ENV !== 'test' &&
            config.productionTip !== false &&
            typeof console !== 'undefined') {
            // @ts-expect-error
            console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" +
                "Make sure to turn on production mode when deploying for production.\n" +
                "See more tips at https://vuejs.org/guide/deployment.html");
        }
    }, 0);
}

var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
var buildRegex = cached(function (delimiters) {
    var open = delimiters[0].replace(regexEscapeRE, '\\$&');
    var close = delimiters[1].replace(regexEscapeRE, '\\$&');
    return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
});
function parseText(text, delimiters) {
    //@ts-expect-error
    var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
    if (!tagRE.test(text)) {
        return;
    }
    var tokens = [];
    var rawTokens = [];
    var lastIndex = (tagRE.lastIndex = 0);
    var match, index, tokenValue;
    while ((match = tagRE.exec(text))) {
        index = match.index;
        // push text token
        if (index > lastIndex) {
            rawTokens.push((tokenValue = text.slice(lastIndex, index)));
            tokens.push(JSON.stringify(tokenValue));
        }
        // tag token
        var exp = parseFilters(match[1].trim());
        tokens.push("_s(".concat(exp, ")"));
        rawTokens.push({ '@binding': exp });
        lastIndex = index + match[0].length;
    }
    if (lastIndex < text.length) {
        rawTokens.push((tokenValue = text.slice(lastIndex)));
        tokens.push(JSON.stringify(tokenValue));
    }
    return {
        expression: tokens.join('+'),
        tokens: rawTokens
    };
}

function transformNode$1(el, options) {
    var warn = options.warn || baseWarn;
    var staticClass = getAndRemoveAttr(el, 'class');
    if (process.env.NODE_ENV !== 'production' && staticClass) {
        var res = parseText(staticClass, options.delimiters);
        if (res) {
            warn("class=\"".concat(staticClass, "\": ") +
                'Interpolation inside attributes has been removed. ' +
                'Use v-bind or the colon shorthand instead. For example, ' +
                'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
        }
    }
    if (staticClass) {
        el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
    }
    var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
    if (classBinding) {
        el.classBinding = classBinding;
    }
}
function genData$2(el) {
    var data = '';
    if (el.staticClass) {
        data += "staticClass:".concat(el.staticClass, ",");
    }
    if (el.classBinding) {
        data += "class:".concat(el.classBinding, ",");
    }
    return data;
}
var klass = {
    staticKeys: ['staticClass'],
    transformNode: transformNode$1,
    genData: genData$2
};

function transformNode(el, options) {
    var warn = options.warn || baseWarn;
    var staticStyle = getAndRemoveAttr(el, 'style');
    if (staticStyle) {
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production') {
            var res = parseText(staticStyle, options.delimiters);
            if (res) {
                warn("style=\"".concat(staticStyle, "\": ") +
                    'Interpolation inside attributes has been removed. ' +
                    'Use v-bind or the colon shorthand instead. For example, ' +
                    'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
            }
        }
        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
    }
    var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
    if (styleBinding) {
        el.styleBinding = styleBinding;
    }
}
function genData$1(el) {
    var data = '';
    if (el.staticStyle) {
        data += "staticStyle:".concat(el.staticStyle, ",");
    }
    if (el.styleBinding) {
        data += "style:(".concat(el.styleBinding, "),");
    }
    return data;
}
var style = {
    staticKeys: ['staticStyle'],
    transformNode: transformNode,
    genData: genData$1
};

var decoder;
var he = {
    decode: function (html) {
        decoder = decoder || document.createElement('div');
        decoder.innerHTML = html;
        return decoder.textContent;
    }
};

var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
    'link,meta,param,source,track,wbr');
// Elements that you can, intentionally, leave open
// (and which close themselves)
var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
    'title,tr,track');

/**
 * Not type-checking this file because it's mostly vendor code.
 */
// Regular Expressions for parsing tags and attributes
var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*");
var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")");
var startTagOpen = new RegExp("^<".concat(qnameCapture));
var startTagClose = /^\s*(\/?)>/;
var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>"));
var doctype = /^<!DOCTYPE [^>]+>/i;
// #7298: escape - to avoid being passed as HTML comment when inlined in page
var comment = /^<!\--/;
var conditionalComment = /^<!\[/;
// Special Elements (can contain anything)
var isPlainTextElement = makeMap('script,style,textarea', true);
var reCache = {};
var decodingMap = {
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&amp;': '&',
    '&#10;': '\n',
    '&#9;': '\t',
    '&#39;': "'"
};
var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
// #5992
var isIgnoreNewlineTag = makeMap('pre,textarea', true);
var shouldIgnoreFirstNewline = function (tag, html) {
    return tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
};
function decodeAttr(value, shouldDecodeNewlines) {
    var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
    return value.replace(re, function (match) { return decodingMap[match]; });
}
function parseHTML(html, options) {
    var stack = [];
    var expectHTML = options.expectHTML;
    var isUnaryTag = options.isUnaryTag || no;
    var canBeLeftOpenTag = options.canBeLeftOpenTag || no;
    var index = 0;
    var last, lastTag;
    var _loop_1 = function () {
        last = html;
        // Make sure we're not in a plaintext content element like script/style
        if (!lastTag || !isPlainTextElement(lastTag)) {
            var textEnd = html.indexOf('<');
            if (textEnd === 0) {
                // Comment:
                if (comment.test(html)) {
                    var commentEnd = html.indexOf('-->');
                    if (commentEnd >= 0) {
                        if (options.shouldKeepComment && options.comment) {
                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
                        }
                        advance(commentEnd + 3);
                        return "continue";
                    }
                }
                // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
                if (conditionalComment.test(html)) {
                    var conditionalEnd = html.indexOf(']>');
                    if (conditionalEnd >= 0) {
                        advance(conditionalEnd + 2);
                        return "continue";
                    }
                }
                // Doctype:
                var doctypeMatch = html.match(doctype);
                if (doctypeMatch) {
                    advance(doctypeMatch[0].length);
                    return "continue";
                }
                // End tag:
                var endTagMatch = html.match(endTag);
                if (endTagMatch) {
                    var curIndex = index;
                    advance(endTagMatch[0].length);
                    parseEndTag(endTagMatch[1], curIndex, index);
                    return "continue";
                }
                // Start tag:
                var startTagMatch = parseStartTag();
                if (startTagMatch) {
                    handleStartTag(startTagMatch);
                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
                        advance(1);
                    }
                    return "continue";
                }
            }
            var text = void 0, rest = void 0, next = void 0;
            if (textEnd >= 0) {
                rest = html.slice(textEnd);
                while (!endTag.test(rest) &&
                    !startTagOpen.test(rest) &&
                    !comment.test(rest) &&
                    !conditionalComment.test(rest)) {
                    // < in plain text, be forgiving and treat it as text
                    next = rest.indexOf('<', 1);
                    if (next < 0)
                        break;
                    textEnd += next;
                    rest = html.slice(textEnd);
                }
                text = html.substring(0, textEnd);
            }
            if (textEnd < 0) {
                text = html;
            }
            if (text) {
                advance(text.length);
            }
            if (options.chars && text) {
                options.chars(text, index - text.length, index);
            }
        }
        else {
            var endTagLength_1 = 0;
            var stackedTag_1 = lastTag.toLowerCase();
            var reStackedTag = reCache[stackedTag_1] ||
                (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));
            var rest = html.replace(reStackedTag, function (all, text, endTag) {
                endTagLength_1 = endTag.length;
                if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {
                    text = text
                        .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
                        .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
                }
                if (shouldIgnoreFirstNewline(stackedTag_1, text)) {
                    text = text.slice(1);
                }
                if (options.chars) {
                    options.chars(text);
                }
                return '';
            });
            index += html.length - rest.length;
            html = rest;
            parseEndTag(stackedTag_1, index - endTagLength_1, index);
        }
        if (html === last) {
            options.chars && options.chars(html);
            if (process.env.NODE_ENV !== 'production' && !stack.length && options.warn) {
                options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), {
                    start: index + html.length
                });
            }
            return "break";
        }
    };
    while (html) {
        var state_1 = _loop_1();
        if (state_1 === "break")
            break;
    }
    // Clean up any remaining tags
    parseEndTag();
    function advance(n) {
        index += n;
        html = html.substring(n);
    }
    function parseStartTag() {
        var start = html.match(startTagOpen);
        if (start) {
            var match = {
                tagName: start[1],
                attrs: [],
                start: index
            };
            advance(start[0].length);
            var end = void 0, attr = void 0;
            while (!(end = html.match(startTagClose)) &&
                (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
                attr.start = index;
                advance(attr[0].length);
                attr.end = index;
                match.attrs.push(attr);
            }
            if (end) {
                match.unarySlash = end[1];
                advance(end[0].length);
                match.end = index;
                return match;
            }
        }
    }
    function handleStartTag(match) {
        var tagName = match.tagName;
        var unarySlash = match.unarySlash;
        if (expectHTML) {
            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
                parseEndTag(lastTag);
            }
            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
                parseEndTag(tagName);
            }
        }
        var unary = isUnaryTag(tagName) || !!unarySlash;
        var l = match.attrs.length;
        var attrs = new Array(l);
        for (var i = 0; i < l; i++) {
            var args = match.attrs[i];
            var value = args[3] || args[4] || args[5] || '';
            var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
                ? options.shouldDecodeNewlinesForHref
                : options.shouldDecodeNewlines;
            attrs[i] = {
                name: args[1],
                value: decodeAttr(value, shouldDecodeNewlines)
            };
            if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                attrs[i].start = args.start + args[0].match(/^\s*/).length;
                attrs[i].end = args.end;
            }
        }
        if (!unary) {
            stack.push({
                tag: tagName,
                lowerCasedTag: tagName.toLowerCase(),
                attrs: attrs,
                start: match.start,
                end: match.end
            });
            lastTag = tagName;
        }
        if (options.start) {
            options.start(tagName, attrs, unary, match.start, match.end);
        }
    }
    function parseEndTag(tagName, start, end) {
        var pos, lowerCasedTagName;
        if (start == null)
            start = index;
        if (end == null)
            end = index;
        // Find the closest opened tag of the same type
        if (tagName) {
            lowerCasedTagName = tagName.toLowerCase();
            for (pos = stack.length - 1; pos >= 0; pos--) {
                if (stack[pos].lowerCasedTag === lowerCasedTagName) {
                    break;
                }
            }
        }
        else {
            // If no tag name is provided, clean shop
            pos = 0;
        }
        if (pos >= 0) {
            // Close all the open elements, up the stack
            for (var i = stack.length - 1; i >= pos; i--) {
                if (process.env.NODE_ENV !== 'production' && (i > pos || !tagName) && options.warn) {
                    options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), {
                        start: stack[i].start,
                        end: stack[i].end
                    });
                }
                if (options.end) {
                    options.end(stack[i].tag, start, end);
                }
            }
            // Remove the open elements from the stack
            stack.length = pos;
            lastTag = pos && stack[pos - 1].tag;
        }
        else if (lowerCasedTagName === 'br') {
            if (options.start) {
                options.start(tagName, [], true, start, end);
            }
        }
        else if (lowerCasedTagName === 'p') {
            if (options.start) {
                options.start(tagName, [], false, start, end);
            }
            if (options.end) {
                options.end(tagName, start, end);
            }
        }
    }
}

var onRE = /^@|^v-on:/;
var dirRE = /^v-|^@|^:|^#/;
var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
var stripParensRE = /^\(|\)$/g;
var dynamicArgRE = /^\[.*\]$/;
var argRE = /:(.*)$/;
var bindRE = /^:|^\.|^v-bind:/;
var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
var slotRE = /^v-slot(:|$)|^#/;
var lineBreakRE = /[\r\n]/;
var whitespaceRE = /[ \f\t\r\n]+/g;
var invalidAttributeRE = /[\s"'<>\/=]/;
var decodeHTMLCached = cached(he.decode);
var emptySlotScopeToken = "_empty_";
// configurable state
var warn;
var delimiters;
var transforms;
var preTransforms;
var postTransforms;
var platformIsPreTag;
var platformMustUseProp;
var platformGetTagNamespace;
var maybeComponent;
function createASTElement(tag, attrs, parent) {
    return {
        type: 1,
        tag: tag,
        attrsList: attrs,
        attrsMap: makeAttrsMap(attrs),
        rawAttrsMap: {},
        parent: parent,
        children: []
    };
}
/**
 * Convert HTML string to AST.
 */
function parse(template, options) {
    warn = options.warn || baseWarn;
    platformIsPreTag = options.isPreTag || no;
    platformMustUseProp = options.mustUseProp || no;
    platformGetTagNamespace = options.getTagNamespace || no;
    var isReservedTag = options.isReservedTag || no;
    maybeComponent = function (el) {
        return !!(el.component ||
            el.attrsMap[':is'] ||
            el.attrsMap['v-bind:is'] ||
            !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
    };
    transforms = pluckModuleFunction(options.modules, 'transformNode');
    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
    delimiters = options.delimiters;
    var stack = [];
    var preserveWhitespace = options.preserveWhitespace !== false;
    var whitespaceOption = options.whitespace;
    var root;
    var currentParent;
    var inVPre = false;
    var inPre = false;
    var warned = false;
    function warnOnce(msg, range) {
        if (!warned) {
            warned = true;
            warn(msg, range);
        }
    }
    function closeElement(element) {
        trimEndingWhitespace(element);
        if (!inVPre && !element.processed) {
            element = processElement(element, options);
        }
        // tree management
        if (!stack.length && element !== root) {
            // allow root elements with v-if, v-else-if and v-else
            if (root.if && (element.elseif || element.else)) {
                if (process.env.NODE_ENV !== 'production') {
                    checkRootConstraints(element);
                }
                addIfCondition(root, {
                    exp: element.elseif,
                    block: element
                });
            }
            else if (process.env.NODE_ENV !== 'production') {
                warnOnce("Component template should contain exactly one root element. " +
                    "If you are using v-if on multiple elements, " +
                    "use v-else-if to chain them instead.", { start: element.start });
            }
        }
        if (currentParent && !element.forbidden) {
            if (element.elseif || element.else) {
                processIfConditions(element, currentParent);
            }
            else {
                if (element.slotScope) {
                    // scoped slot
                    // keep it in the children list so that v-else(-if) conditions can
                    // find it as the prev node.
                    var name_1 = element.slotTarget || '"default"';
                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;
                }
                currentParent.children.push(element);
                element.parent = currentParent;
            }
        }
        // final children cleanup
        // filter out scoped slots
        element.children = element.children.filter(function (c) { return !c.slotScope; });
        // remove trailing whitespace node again
        trimEndingWhitespace(element);
        // check pre state
        if (element.pre) {
            inVPre = false;
        }
        if (platformIsPreTag(element.tag)) {
            inPre = false;
        }
        // apply post-transforms
        for (var i = 0; i < postTransforms.length; i++) {
            postTransforms[i](element, options);
        }
    }
    function trimEndingWhitespace(el) {
        // remove trailing whitespace node
        if (!inPre) {
            var lastNode = void 0;
            while ((lastNode = el.children[el.children.length - 1]) &&
                lastNode.type === 3 &&
                lastNode.text === ' ') {
                el.children.pop();
            }
        }
    }
    function checkRootConstraints(el) {
        if (el.tag === 'slot' || el.tag === 'template') {
            warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") +
                'contain multiple nodes.', { start: el.start });
        }
        if (el.attrsMap.hasOwnProperty('v-for')) {
            warnOnce('Cannot use v-for on stateful component root element because ' +
                'it renders multiple elements.', el.rawAttrsMap['v-for']);
        }
    }
    parseHTML(template, {
        warn: warn,
        expectHTML: options.expectHTML,
        isUnaryTag: options.isUnaryTag,
        canBeLeftOpenTag: options.canBeLeftOpenTag,
        shouldDecodeNewlines: options.shouldDecodeNewlines,
        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
        shouldKeepComment: options.comments,
        outputSourceRange: options.outputSourceRange,
        start: function (tag, attrs, unary, start, end) {
            // check namespace.
            // inherit parent ns if there is one
            var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
            // handle IE svg bug
            /* istanbul ignore if */
            if (isIE && ns === 'svg') {
                attrs = guardIESVGBug(attrs);
            }
            var element = createASTElement(tag, attrs, currentParent);
            if (ns) {
                element.ns = ns;
            }
            if (process.env.NODE_ENV !== 'production') {
                if (options.outputSourceRange) {
                    element.start = start;
                    element.end = end;
                    element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
                        cumulated[attr.name] = attr;
                        return cumulated;
                    }, {});
                }
                attrs.forEach(function (attr) {
                    if (invalidAttributeRE.test(attr.name)) {
                        warn("Invalid dynamic argument expression: attribute names cannot contain " +
                            "spaces, quotes, <, >, / or =.", options.outputSourceRange
                            ? {
                                start: attr.start + attr.name.indexOf("["),
                                end: attr.start + attr.name.length
                            }
                            : undefined);
                    }
                });
            }
            if (isForbiddenTag(element) && !isServerRendering()) {
                element.forbidden = true;
                process.env.NODE_ENV !== 'production' &&
                    warn('Templates should only be responsible for mapping the state to the ' +
                        'UI. Avoid placing tags with side-effects in your templates, such as ' +
                        "<".concat(tag, ">") +
                        ', as they will not be parsed.', { start: element.start });
            }
            // apply pre-transforms
            for (var i = 0; i < preTransforms.length; i++) {
                element = preTransforms[i](element, options) || element;
            }
            if (!inVPre) {
                processPre(element);
                if (element.pre) {
                    inVPre = true;
                }
            }
            if (platformIsPreTag(element.tag)) {
                inPre = true;
            }
            if (inVPre) {
                processRawAttrs(element);
            }
            else if (!element.processed) {
                // structural directives
                processFor(element);
                processIf(element);
                processOnce(element);
            }
            if (!root) {
                root = element;
                if (process.env.NODE_ENV !== 'production') {
                    checkRootConstraints(root);
                }
            }
            if (!unary) {
                currentParent = element;
                stack.push(element);
            }
            else {
                closeElement(element);
            }
        },
        end: function (tag, start, end) {
            var element = stack[stack.length - 1];
            // pop stack
            stack.length -= 1;
            currentParent = stack[stack.length - 1];
            if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                element.end = end;
            }
            closeElement(element);
        },
        chars: function (text, start, end) {
            if (!currentParent) {
                if (process.env.NODE_ENV !== 'production') {
                    if (text === template) {
                        warnOnce('Component template requires a root element, rather than just text.', { start: start });
                    }
                    else if ((text = text.trim())) {
                        warnOnce("text \"".concat(text, "\" outside root element will be ignored."), {
                            start: start
                        });
                    }
                }
                return;
            }
            // IE textarea placeholder bug
            /* istanbul ignore if */
            if (isIE &&
                currentParent.tag === 'textarea' &&
                currentParent.attrsMap.placeholder === text) {
                return;
            }
            var children = currentParent.children;
            if (inPre || text.trim()) {
                text = isTextTag(currentParent)
                    ? text
                    : decodeHTMLCached(text);
            }
            else if (!children.length) {
                // remove the whitespace-only node right after an opening tag
                text = '';
            }
            else if (whitespaceOption) {
                if (whitespaceOption === 'condense') {
                    // in condense mode, remove the whitespace node if it contains
                    // line break, otherwise condense to a single space
                    text = lineBreakRE.test(text) ? '' : ' ';
                }
                else {
                    text = ' ';
                }
            }
            else {
                text = preserveWhitespace ? ' ' : '';
            }
            if (text) {
                if (!inPre && whitespaceOption === 'condense') {
                    // condense consecutive whitespaces into single space
                    text = text.replace(whitespaceRE, ' ');
                }
                var res = void 0;
                var child = void 0;
                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
                    child = {
                        type: 2,
                        expression: res.expression,
                        tokens: res.tokens,
                        text: text
                    };
                }
                else if (text !== ' ' ||
                    !children.length ||
                    children[children.length - 1].text !== ' ') {
                    child = {
                        type: 3,
                        text: text
                    };
                }
                if (child) {
                    if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                        child.start = start;
                        child.end = end;
                    }
                    children.push(child);
                }
            }
        },
        comment: function (text, start, end) {
            // adding anything as a sibling to the root node is forbidden
            // comments should still be allowed, but ignored
            if (currentParent) {
                var child = {
                    type: 3,
                    text: text,
                    isComment: true
                };
                if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                    child.start = start;
                    child.end = end;
                }
                currentParent.children.push(child);
            }
        }
    });
    return root;
}
function processPre(el) {
    if (getAndRemoveAttr(el, 'v-pre') != null) {
        el.pre = true;
    }
}
function processRawAttrs(el) {
    var list = el.attrsList;
    var len = list.length;
    if (len) {
        var attrs = (el.attrs = new Array(len));
        for (var i = 0; i < len; i++) {
            attrs[i] = {
                name: list[i].name,
                value: JSON.stringify(list[i].value)
            };
            if (list[i].start != null) {
                attrs[i].start = list[i].start;
                attrs[i].end = list[i].end;
            }
        }
    }
    else if (!el.pre) {
        // non root node in pre blocks with no attributes
        el.plain = true;
    }
}
function processElement(element, options) {
    processKey(element);
    // determine whether this is a plain element after
    // removing structural attributes
    element.plain =
        !element.key && !element.scopedSlots && !element.attrsList.length;
    processRef(element);
    processSlotContent(element);
    processSlotOutlet(element);
    processComponent(element);
    for (var i = 0; i < transforms.length; i++) {
        element = transforms[i](element, options) || element;
    }
    processAttrs(element);
    return element;
}
function processKey(el) {
    var exp = getBindingAttr(el, 'key');
    if (exp) {
        if (process.env.NODE_ENV !== 'production') {
            if (el.tag === 'template') {
                warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key'));
            }
            if (el.for) {
                var iterator = el.iterator2 || el.iterator1;
                var parent_1 = el.parent;
                if (iterator &&
                    iterator === exp &&
                    parent_1 &&
                    parent_1.tag === 'transition-group') {
                    warn("Do not use v-for index as key on <transition-group> children, " +
                        "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */);
                }
            }
        }
        el.key = exp;
    }
}
function processRef(el) {
    var ref = getBindingAttr(el, 'ref');
    if (ref) {
        el.ref = ref;
        el.refInFor = checkInFor(el);
    }
}
function processFor(el) {
    var exp;
    if ((exp = getAndRemoveAttr(el, 'v-for'))) {
        var res = parseFor(exp);
        if (res) {
            extend(el, res);
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']);
        }
    }
}
function parseFor(exp) {
    var inMatch = exp.match(forAliasRE);
    if (!inMatch)
        return;
    var res = {};
    res.for = inMatch[2].trim();
    var alias = inMatch[1].trim().replace(stripParensRE, '');
    var iteratorMatch = alias.match(forIteratorRE);
    if (iteratorMatch) {
        res.alias = alias.replace(forIteratorRE, '').trim();
        res.iterator1 = iteratorMatch[1].trim();
        if (iteratorMatch[2]) {
            res.iterator2 = iteratorMatch[2].trim();
        }
    }
    else {
        res.alias = alias;
    }
    return res;
}
function processIf(el) {
    var exp = getAndRemoveAttr(el, 'v-if');
    if (exp) {
        el.if = exp;
        addIfCondition(el, {
            exp: exp,
            block: el
        });
    }
    else {
        if (getAndRemoveAttr(el, 'v-else') != null) {
            el.else = true;
        }
        var elseif = getAndRemoveAttr(el, 'v-else-if');
        if (elseif) {
            el.elseif = elseif;
        }
    }
}
function processIfConditions(el, parent) {
    var prev = findPrevElement(parent.children);
    if (prev && prev.if) {
        addIfCondition(prev, {
            exp: el.elseif,
            block: el
        });
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") +
            "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
    }
}
function findPrevElement(children) {
    var i = children.length;
    while (i--) {
        if (children[i].type === 1) {
            return children[i];
        }
        else {
            if (process.env.NODE_ENV !== 'production' && children[i].text !== ' ') {
                warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") +
                    "will be ignored.", children[i]);
            }
            children.pop();
        }
    }
}
function addIfCondition(el, condition) {
    if (!el.ifConditions) {
        el.ifConditions = [];
    }
    el.ifConditions.push(condition);
}
function processOnce(el) {
    var once = getAndRemoveAttr(el, 'v-once');
    if (once != null) {
        el.once = true;
    }
}
// handle content being passed to a component as slot,
// e.g. <template slot="xxx">, <div slot-scope="xxx">
function processSlotContent(el) {
    var slotScope;
    if (el.tag === 'template') {
        slotScope = getAndRemoveAttr(el, 'scope');
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && slotScope) {
            warn("the \"scope\" attribute for scoped slots have been deprecated and " +
                "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
                "can also be used on plain elements in addition to <template> to " +
                "denote scoped slots.", el.rawAttrsMap['scope'], true);
        }
        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
    }
    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && el.attrsMap['v-for']) {
            warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") +
                "(v-for takes higher priority). Use a wrapper <template> for the " +
                "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true);
        }
        el.slotScope = slotScope;
    }
    // slot="xxx"
    var slotTarget = getBindingAttr(el, 'slot');
    if (slotTarget) {
        el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
        // preserve slot as an attribute for native shadow DOM compat
        // only for non-scoped slots.
        if (el.tag !== 'template' && !el.slotScope) {
            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
        }
    }
    // 2.6 v-slot syntax
    {
        if (el.tag === 'template') {
            // v-slot on <template>
            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                if (process.env.NODE_ENV !== 'production') {
                    if (el.slotTarget || el.slotScope) {
                        warn("Unexpected mixed usage of different slot syntaxes.", el);
                    }
                    if (el.parent && !maybeComponent(el.parent)) {
                        warn("<template v-slot> can only appear at the root level inside " +
                            "the receiving component", el);
                    }
                }
                var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;
                el.slotTarget = name_2;
                el.slotTargetDynamic = dynamic;
                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
            }
        }
        else {
            // v-slot on component, denotes default slot
            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                if (process.env.NODE_ENV !== 'production') {
                    if (!maybeComponent(el)) {
                        warn("v-slot can only be used on components or <template>.", slotBinding);
                    }
                    if (el.slotScope || el.slotTarget) {
                        warn("Unexpected mixed usage of different slot syntaxes.", el);
                    }
                    if (el.scopedSlots) {
                        warn("To avoid scope ambiguity, the default slot should also use " +
                            "<template> syntax when there are other named slots.", slotBinding);
                    }
                }
                // add the component's children to its default slot
                var slots = el.scopedSlots || (el.scopedSlots = {});
                var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;
                var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));
                slotContainer_1.slotTarget = name_3;
                slotContainer_1.slotTargetDynamic = dynamic;
                slotContainer_1.children = el.children.filter(function (c) {
                    if (!c.slotScope) {
                        c.parent = slotContainer_1;
                        return true;
                    }
                });
                slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;
                // remove children as they are returned from scopedSlots now
                el.children = [];
                // mark el non-plain so data gets generated
                el.plain = false;
            }
        }
    }
}
function getSlotName(binding) {
    var name = binding.name.replace(slotRE, '');
    if (!name) {
        if (binding.name[0] !== '#') {
            name = 'default';
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn("v-slot shorthand syntax requires a slot name.", binding);
        }
    }
    return dynamicArgRE.test(name)
        ? // dynamic [name]
            { name: name.slice(1, -1), dynamic: true }
        : // static name
            { name: "\"".concat(name, "\""), dynamic: false };
}
// handle <slot/> outlets
function processSlotOutlet(el) {
    if (el.tag === 'slot') {
        el.slotName = getBindingAttr(el, 'name');
        if (process.env.NODE_ENV !== 'production' && el.key) {
            warn("`key` does not work on <slot> because slots are abstract outlets " +
                "and can possibly expand into multiple elements. " +
                "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key'));
        }
    }
}
function processComponent(el) {
    var binding;
    if ((binding = getBindingAttr(el, 'is'))) {
        el.component = binding;
    }
    if (getAndRemoveAttr(el, 'inline-template') != null) {
        el.inlineTemplate = true;
    }
}
function processAttrs(el) {
    var list = el.attrsList;
    var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
    for (i = 0, l = list.length; i < l; i++) {
        name = rawName = list[i].name;
        value = list[i].value;
        if (dirRE.test(name)) {
            // mark element as dynamic
            el.hasBindings = true;
            // modifiers
            modifiers = parseModifiers(name.replace(dirRE, ''));
            // support .foo shorthand syntax for the .prop modifier
            if (modifiers) {
                name = name.replace(modifierRE, '');
            }
            if (bindRE.test(name)) {
                // v-bind
                name = name.replace(bindRE, '');
                value = parseFilters(value);
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                if (process.env.NODE_ENV !== 'production' && value.trim().length === 0) {
                    warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\""));
                }
                if (modifiers) {
                    if (modifiers.prop && !isDynamic) {
                        name = camelize(name);
                        if (name === 'innerHtml')
                            name = 'innerHTML';
                    }
                    if (modifiers.camel && !isDynamic) {
                        name = camelize(name);
                    }
                    if (modifiers.sync) {
                        syncGen = genAssignmentCode(value, "$event");
                        if (!isDynamic) {
                            addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]);
                            if (hyphenate(name) !== camelize(name)) {
                                addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);
                            }
                        }
                        else {
                            // handler w/ dynamic event name
                            addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic
                            );
                        }
                    }
                }
                if ((modifiers && modifiers.prop) ||
                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
                    addProp(el, name, value, list[i], isDynamic);
                }
                else {
                    addAttr(el, name, value, list[i], isDynamic);
                }
            }
            else if (onRE.test(name)) {
                // v-on
                name = name.replace(onRE, '');
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);
            }
            else {
                // normal directives
                name = name.replace(dirRE, '');
                // parse arg
                var argMatch = name.match(argRE);
                var arg = argMatch && argMatch[1];
                isDynamic = false;
                if (arg) {
                    name = name.slice(0, -(arg.length + 1));
                    if (dynamicArgRE.test(arg)) {
                        arg = arg.slice(1, -1);
                        isDynamic = true;
                    }
                }
                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
                if (process.env.NODE_ENV !== 'production' && name === 'model') {
                    checkForAliasModel(el, value);
                }
            }
        }
        else {
            // literal attribute
            if (process.env.NODE_ENV !== 'production') {
                var res = parseText(value, delimiters);
                if (res) {
                    warn("".concat(name, "=\"").concat(value, "\": ") +
                        'Interpolation inside attributes has been removed. ' +
                        'Use v-bind or the colon shorthand instead. For example, ' +
                        'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
                }
            }
            addAttr(el, name, JSON.stringify(value), list[i]);
            // #6887 firefox doesn't update muted state if set via attribute
            // even immediately after element creation
            if (!el.component &&
                name === 'muted' &&
                platformMustUseProp(el.tag, el.attrsMap.type, name)) {
                addProp(el, name, 'true', list[i]);
            }
        }
    }
}
function checkInFor(el) {
    var parent = el;
    while (parent) {
        if (parent.for !== undefined) {
            return true;
        }
        parent = parent.parent;
    }
    return false;
}
function parseModifiers(name) {
    var match = name.match(modifierRE);
    if (match) {
        var ret_1 = {};
        match.forEach(function (m) {
            ret_1[m.slice(1)] = true;
        });
        return ret_1;
    }
}
function makeAttrsMap(attrs) {
    var map = {};
    for (var i = 0, l = attrs.length; i < l; i++) {
        if (process.env.NODE_ENV !== 'production' && map[attrs[i].name] && !isIE && !isEdge) {
            warn('duplicate attribute: ' + attrs[i].name, attrs[i]);
        }
        map[attrs[i].name] = attrs[i].value;
    }
    return map;
}
// for script (e.g. type="x/template") or style, do not decode content
function isTextTag(el) {
    return el.tag === 'script' || el.tag === 'style';
}
function isForbiddenTag(el) {
    return (el.tag === 'style' ||
        (el.tag === 'script' &&
            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
}
var ieNSBug = /^xmlns:NS\d+/;
var ieNSPrefix = /^NS\d+:/;
/* istanbul ignore next */
function guardIESVGBug(attrs) {
    var res = [];
    for (var i = 0; i < attrs.length; i++) {
        var attr = attrs[i];
        if (!ieNSBug.test(attr.name)) {
            attr.name = attr.name.replace(ieNSPrefix, '');
            res.push(attr);
        }
    }
    return res;
}
function checkForAliasModel(el, value) {
    var _el = el;
    while (_el) {
        if (_el.for && _el.alias === value) {
            warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
                "You are binding v-model directly to a v-for iteration alias. " +
                "This will not be able to modify the v-for source array because " +
                "writing to the alias is like modifying a function local variable. " +
                "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']);
        }
        _el = _el.parent;
    }
}

/**
 * Expand input[v-model] with dynamic type bindings into v-if-else chains
 * Turn this:
 *   <input v-model="data[type]" :type="type">
 * into this:
 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
 *   <input v-else :type="type" v-model="data[type]">
 */
function preTransformNode(el, options) {
    if (el.tag === 'input') {
        var map = el.attrsMap;
        if (!map['v-model']) {
            return;
        }
        var typeBinding = void 0;
        if (map[':type'] || map['v-bind:type']) {
            typeBinding = getBindingAttr(el, 'type');
        }
        if (!map.type && !typeBinding && map['v-bind']) {
            typeBinding = "(".concat(map['v-bind'], ").type");
        }
        if (typeBinding) {
            var ifCondition = getAndRemoveAttr(el, 'v-if', true);
            var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : "";
            var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
            var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
            // 1. checkbox
            var branch0 = cloneASTElement(el);
            // process for on the main node
            processFor(branch0);
            addRawAttr(branch0, 'type', 'checkbox');
            processElement(branch0, options);
            branch0.processed = true; // prevent it from double-processed
            branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra;
            addIfCondition(branch0, {
                exp: branch0.if,
                block: branch0
            });
            // 2. add radio else-if condition
            var branch1 = cloneASTElement(el);
            getAndRemoveAttr(branch1, 'v-for', true);
            addRawAttr(branch1, 'type', 'radio');
            processElement(branch1, options);
            addIfCondition(branch0, {
                exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra,
                block: branch1
            });
            // 3. other
            var branch2 = cloneASTElement(el);
            getAndRemoveAttr(branch2, 'v-for', true);
            addRawAttr(branch2, ':type', typeBinding);
            processElement(branch2, options);
            addIfCondition(branch0, {
                exp: ifCondition,
                block: branch2
            });
            if (hasElse) {
                branch0.else = true;
            }
            else if (elseIfCondition) {
                branch0.elseif = elseIfCondition;
            }
            return branch0;
        }
    }
}
function cloneASTElement(el) {
    return createASTElement(el.tag, el.attrsList.slice(), el.parent);
}
var model = {
    preTransformNode: preTransformNode
};

var modules = [klass, style, model];

function text(el, dir) {
    if (dir.value) {
        addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir);
    }
}

function html(el, dir) {
    if (dir.value) {
        addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir);
    }
}

var directives = {
    model: model$1,
    text: text,
    html: html
};

var baseOptions = {
    expectHTML: true,
    modules: modules,
    directives: directives,
    isPreTag: isPreTag,
    isUnaryTag: isUnaryTag,
    mustUseProp: mustUseProp,
    canBeLeftOpenTag: canBeLeftOpenTag,
    isReservedTag: isReservedTag,
    getTagNamespace: getTagNamespace,
    staticKeys: genStaticKeys$1(modules)
};

var isStaticKey;
var isPlatformReservedTag;
var genStaticKeysCached = cached(genStaticKeys);
/**
 * Goal of the optimizer: walk the generated template AST tree
 * and detect sub-trees that are purely static, i.e. parts of
 * the DOM that never needs to change.
 *
 * Once we detect these sub-trees, we can:
 *
 * 1. Hoist them into constants, so that we no longer need to
 *    create fresh nodes for them on each re-render;
 * 2. Completely skip them in the patching process.
 */
function optimize(root, options) {
    if (!root)
        return;
    isStaticKey = genStaticKeysCached(options.staticKeys || '');
    isPlatformReservedTag = options.isReservedTag || no;
    // first pass: mark all non-static nodes.
    markStatic(root);
    // second pass: mark static roots.
    markStaticRoots(root, false);
}
function genStaticKeys(keys) {
    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
        (keys ? ',' + keys : ''));
}
function markStatic(node) {
    node.static = isStatic(node);
    if (node.type === 1) {
        // do not make component slot content static. this avoids
        // 1. components not able to mutate slot nodes
        // 2. static slot content fails for hot-reloading
        if (!isPlatformReservedTag(node.tag) &&
            node.tag !== 'slot' &&
            node.attrsMap['inline-template'] == null) {
            return;
        }
        for (var i = 0, l = node.children.length; i < l; i++) {
            var child = node.children[i];
            markStatic(child);
            if (!child.static) {
                node.static = false;
            }
        }
        if (node.ifConditions) {
            for (var i = 1, l = node.ifConditions.length; i < l; i++) {
                var block = node.ifConditions[i].block;
                markStatic(block);
                if (!block.static) {
                    node.static = false;
                }
            }
        }
    }
}
function markStaticRoots(node, isInFor) {
    if (node.type === 1) {
        if (node.static || node.once) {
            node.staticInFor = isInFor;
        }
        // For a node to qualify as a static root, it should have children that
        // are not just static text. Otherwise the cost of hoisting out will
        // outweigh the benefits and it's better off to just always render it fresh.
        if (node.static &&
            node.children.length &&
            !(node.children.length === 1 && node.children[0].type === 3)) {
            node.staticRoot = true;
            return;
        }
        else {
            node.staticRoot = false;
        }
        if (node.children) {
            for (var i = 0, l = node.children.length; i < l; i++) {
                markStaticRoots(node.children[i], isInFor || !!node.for);
            }
        }
        if (node.ifConditions) {
            for (var i = 1, l = node.ifConditions.length; i < l; i++) {
                markStaticRoots(node.ifConditions[i].block, isInFor);
            }
        }
    }
}
function isStatic(node) {
    if (node.type === 2) {
        // expression
        return false;
    }
    if (node.type === 3) {
        // text
        return true;
    }
    return !!(node.pre ||
        (!node.hasBindings && // no dynamic bindings
            !node.if &&
            !node.for && // not v-if or v-for or v-else
            !isBuiltInTag(node.tag) && // not a built-in
            isPlatformReservedTag(node.tag) && // not a component
            !isDirectChildOfTemplateFor(node) &&
            Object.keys(node).every(isStaticKey)));
}
function isDirectChildOfTemplateFor(node) {
    while (node.parent) {
        node = node.parent;
        if (node.tag !== 'template') {
            return false;
        }
        if (node.for) {
            return true;
        }
    }
    return false;
}

var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
var fnInvokeRE = /\([^)]*?\);*$/;
var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
// KeyboardEvent.keyCode aliases
var keyCodes = {
    esc: 27,
    tab: 9,
    enter: 13,
    space: 32,
    up: 38,
    left: 37,
    right: 39,
    down: 40,
    delete: [8, 46]
};
// KeyboardEvent.key aliases
var keyNames = {
    // #7880: IE11 and Edge use `Esc` for Escape key name.
    esc: ['Esc', 'Escape'],
    tab: 'Tab',
    enter: 'Enter',
    // #9112: IE11 uses `Spacebar` for Space key name.
    space: [' ', 'Spacebar'],
    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
    up: ['Up', 'ArrowUp'],
    left: ['Left', 'ArrowLeft'],
    right: ['Right', 'ArrowRight'],
    down: ['Down', 'ArrowDown'],
    // #9112: IE11 uses `Del` for Delete key name.
    delete: ['Backspace', 'Delete', 'Del']
};
// #4868: modifiers that prevent the execution of the listener
// need to explicitly return null so that we can determine whether to remove
// the listener for .once
var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); };
var modifierCode = {
    stop: '$event.stopPropagation();',
    prevent: '$event.preventDefault();',
    self: genGuard("$event.target !== $event.currentTarget"),
    ctrl: genGuard("!$event.ctrlKey"),
    shift: genGuard("!$event.shiftKey"),
    alt: genGuard("!$event.altKey"),
    meta: genGuard("!$event.metaKey"),
    left: genGuard("'button' in $event && $event.button !== 0"),
    middle: genGuard("'button' in $event && $event.button !== 1"),
    right: genGuard("'button' in $event && $event.button !== 2")
};
function genHandlers(events, isNative) {
    var prefix = isNative ? 'nativeOn:' : 'on:';
    var staticHandlers = "";
    var dynamicHandlers = "";
    for (var name_1 in events) {
        var handlerCode = genHandler(events[name_1]);
        //@ts-expect-error
        if (events[name_1] && events[name_1].dynamic) {
            dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ",");
        }
        else {
            staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ",");
        }
    }
    staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}");
    if (dynamicHandlers) {
        return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])");
    }
    else {
        return prefix + staticHandlers;
    }
}
function genHandler(handler) {
    if (!handler) {
        return 'function(){}';
    }
    if (Array.isArray(handler)) {
        return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]");
    }
    var isMethodPath = simplePathRE.test(handler.value);
    var isFunctionExpression = fnExpRE.test(handler.value);
    var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
    if (!handler.modifiers) {
        if (isMethodPath || isFunctionExpression) {
            return handler.value;
        }
        return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement
    }
    else {
        var code = '';
        var genModifierCode = '';
        var keys = [];
        var _loop_1 = function (key) {
            if (modifierCode[key]) {
                genModifierCode += modifierCode[key];
                // left/right
                if (keyCodes[key]) {
                    keys.push(key);
                }
            }
            else if (key === 'exact') {
                var modifiers_1 = handler.modifiers;
                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
                    .filter(function (keyModifier) { return !modifiers_1[keyModifier]; })
                    .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); })
                    .join('||'));
            }
            else {
                keys.push(key);
            }
        };
        for (var key in handler.modifiers) {
            _loop_1(key);
        }
        if (keys.length) {
            code += genKeyFilter(keys);
        }
        // Make sure modifiers like prevent and stop get executed after key filtering
        if (genModifierCode) {
            code += genModifierCode;
        }
        var handlerCode = isMethodPath
            ? "return ".concat(handler.value, ".apply(null, arguments)")
            : isFunctionExpression
                ? "return (".concat(handler.value, ").apply(null, arguments)")
                : isFunctionInvocation
                    ? "return ".concat(handler.value)
                    : handler.value;
        return "function($event){".concat(code).concat(handlerCode, "}");
    }
}
function genKeyFilter(keys) {
    return (
    // make sure the key filters only apply to KeyboardEvents
    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
    // key events that do not have keyCode property...
    "if(!$event.type.indexOf('key')&&" +
        "".concat(keys.map(genFilterCode).join('&&'), ")return null;"));
}
function genFilterCode(key) {
    var keyVal = parseInt(key, 10);
    if (keyVal) {
        return "$event.keyCode!==".concat(keyVal);
    }
    var keyCode = keyCodes[key];
    var keyName = keyNames[key];
    return ("_k($event.keyCode," +
        "".concat(JSON.stringify(key), ",") +
        "".concat(JSON.stringify(keyCode), ",") +
        "$event.key," +
        "".concat(JSON.stringify(keyName)) +
        ")");
}

function on(el, dir) {
    if (process.env.NODE_ENV !== 'production' && dir.modifiers) {
        warn$2("v-on without argument does not support modifiers.");
    }
    el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); };
}

function bind(el, dir) {
    el.wrapData = function (code) {
        return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")");
    };
}

var baseDirectives = {
    on: on,
    bind: bind,
    cloak: noop
};

var CodegenState = /** @class */ (function () {
    function CodegenState(options) {
        this.options = options;
        this.warn = options.warn || baseWarn;
        this.transforms = pluckModuleFunction(options.modules, 'transformCode');
        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
        this.directives = extend(extend({}, baseDirectives), options.directives);
        var isReservedTag = options.isReservedTag || no;
        this.maybeComponent = function (el) {
            return !!el.component || !isReservedTag(el.tag);
        };
        this.onceId = 0;
        this.staticRenderFns = [];
        this.pre = false;
    }
    return CodegenState;
}());
function generate(ast, options) {
    var state = new CodegenState(options);
    // fix #11483, Root level <script> tags should not be rendered.
    var code = ast
        ? ast.tag === 'script'
            ? 'null'
            : genElement(ast, state)
        : '_c("div")';
    return {
        render: "with(this){return ".concat(code, "}"),
        staticRenderFns: state.staticRenderFns
    };
}
function genElement(el, state) {
    if (el.parent) {
        el.pre = el.pre || el.parent.pre;
    }
    if (el.staticRoot && !el.staticProcessed) {
        return genStatic(el, state);
    }
    else if (el.once && !el.onceProcessed) {
        return genOnce(el, state);
    }
    else if (el.for && !el.forProcessed) {
        return genFor(el, state);
    }
    else if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
        return genChildren(el, state) || 'void 0';
    }
    else if (el.tag === 'slot') {
        return genSlot(el, state);
    }
    else {
        // component or element
        var code = void 0;
        if (el.component) {
            code = genComponent(el.component, el, state);
        }
        else {
            var data = void 0;
            var maybeComponent = state.maybeComponent(el);
            if (!el.plain || (el.pre && maybeComponent)) {
                data = genData(el, state);
            }
            var tag 
            // check if this is a component in <script setup>
            = void 0;
            // check if this is a component in <script setup>
            var bindings = state.options.bindings;
            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
                tag = checkBindingType(bindings, el.tag);
            }
            if (!tag)
                tag = "'".concat(el.tag, "'");
            var children = el.inlineTemplate ? null : genChildren(el, state, true);
            code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data
            ).concat(children ? ",".concat(children) : '' // children
            , ")");
        }
        // module transforms
        for (var i = 0; i < state.transforms.length; i++) {
            code = state.transforms[i](el, code);
        }
        return code;
    }
}
function checkBindingType(bindings, key) {
    var camelName = camelize(key);
    var PascalName = capitalize(camelName);
    var checkType = function (type) {
        if (bindings[key] === type) {
            return key;
        }
        if (bindings[camelName] === type) {
            return camelName;
        }
        if (bindings[PascalName] === type) {
            return PascalName;
        }
    };
    var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
        checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
    if (fromConst) {
        return fromConst;
    }
    var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
        checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
        checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
    if (fromMaybeRef) {
        return fromMaybeRef;
    }
}
// hoist static sub-trees out
function genStatic(el, state) {
    el.staticProcessed = true;
    // Some elements (templates) need to behave differently inside of a v-pre
    // node.  All pre nodes are static roots, so we can use this as a location to
    // wrap a state change and reset it upon exiting the pre node.
    var originalPreState = state.pre;
    if (el.pre) {
        state.pre = el.pre;
    }
    state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}"));
    state.pre = originalPreState;
    return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")");
}
// v-once
function genOnce(el, state) {
    el.onceProcessed = true;
    if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.staticInFor) {
        var key = '';
        var parent_1 = el.parent;
        while (parent_1) {
            if (parent_1.for) {
                key = parent_1.key;
                break;
            }
            parent_1 = parent_1.parent;
        }
        if (!key) {
            process.env.NODE_ENV !== 'production' &&
                state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']);
            return genElement(el, state);
        }
        return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")");
    }
    else {
        return genStatic(el, state);
    }
}
function genIf(el, state, altGen, altEmpty) {
    el.ifProcessed = true; // avoid recursion
    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
}
function genIfConditions(conditions, state, altGen, altEmpty) {
    if (!conditions.length) {
        return altEmpty || '_e()';
    }
    var condition = conditions.shift();
    if (condition.exp) {
        return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty));
    }
    else {
        return "".concat(genTernaryExp(condition.block));
    }
    // v-if with v-once should generate code like (a)?_m(0):_m(1)
    function genTernaryExp(el) {
        return altGen
            ? altGen(el, state)
            : el.once
                ? genOnce(el, state)
                : genElement(el, state);
    }
}
function genFor(el, state, altGen, altHelper) {
    var exp = el.for;
    var alias = el.alias;
    var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : '';
    var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : '';
    if (process.env.NODE_ENV !== 'production' &&
        state.maybeComponent(el) &&
        el.tag !== 'slot' &&
        el.tag !== 'template' &&
        !el.key) {
        state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") +
            "v-for should have explicit keys. " +
            "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */);
    }
    el.forProcessed = true; // avoid recursion
    return ("".concat(altHelper || '_l', "((").concat(exp, "),") +
        "function(".concat(alias).concat(iterator1).concat(iterator2, "){") +
        "return ".concat((altGen || genElement)(el, state)) +
        '})');
}
function genData(el, state) {
    var data = '{';
    // directives first.
    // directives may mutate the el's other properties before they are generated.
    var dirs = genDirectives(el, state);
    if (dirs)
        data += dirs + ',';
    // key
    if (el.key) {
        data += "key:".concat(el.key, ",");
    }
    // ref
    if (el.ref) {
        data += "ref:".concat(el.ref, ",");
    }
    if (el.refInFor) {
        data += "refInFor:true,";
    }
    // pre
    if (el.pre) {
        data += "pre:true,";
    }
    // record original tag name for components using "is" attribute
    if (el.component) {
        data += "tag:\"".concat(el.tag, "\",");
    }
    // module data generation functions
    for (var i = 0; i < state.dataGenFns.length; i++) {
        data += state.dataGenFns[i](el);
    }
    // attributes
    if (el.attrs) {
        data += "attrs:".concat(genProps(el.attrs), ",");
    }
    // DOM props
    if (el.props) {
        data += "domProps:".concat(genProps(el.props), ",");
    }
    // event handlers
    if (el.events) {
        data += "".concat(genHandlers(el.events, false), ",");
    }
    if (el.nativeEvents) {
        data += "".concat(genHandlers(el.nativeEvents, true), ",");
    }
    // slot target
    // only for non-scoped slots
    if (el.slotTarget && !el.slotScope) {
        data += "slot:".concat(el.slotTarget, ",");
    }
    // scoped slots
    if (el.scopedSlots) {
        data += "".concat(genScopedSlots(el, el.scopedSlots, state), ",");
    }
    // component v-model
    if (el.model) {
        data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},");
    }
    // inline-template
    if (el.inlineTemplate) {
        var inlineTemplate = genInlineTemplate(el, state);
        if (inlineTemplate) {
            data += "".concat(inlineTemplate, ",");
        }
    }
    data = data.replace(/,$/, '') + '}';
    // v-bind dynamic argument wrap
    // v-bind with dynamic arguments must be applied using the same v-bind object
    // merge helper so that class/style/mustUseProp attrs are handled correctly.
    if (el.dynamicAttrs) {
        data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")");
    }
    // v-bind data wrap
    if (el.wrapData) {
        data = el.wrapData(data);
    }
    // v-on data wrap
    if (el.wrapListeners) {
        data = el.wrapListeners(data);
    }
    return data;
}
function genDirectives(el, state) {
    var dirs = el.directives;
    if (!dirs)
        return;
    var res = 'directives:[';
    var hasRuntime = false;
    var i, l, dir, needRuntime;
    for (i = 0, l = dirs.length; i < l; i++) {
        dir = dirs[i];
        needRuntime = true;
        var gen = state.directives[dir.name];
        if (gen) {
            // compile-time directive that manipulates AST.
            // returns true if it also needs a runtime counterpart.
            needRuntime = !!gen(el, dir, state.warn);
        }
        if (needRuntime) {
            hasRuntime = true;
            res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value
                ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value))
                : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},");
        }
    }
    if (hasRuntime) {
        return res.slice(0, -1) + ']';
    }
}
function genInlineTemplate(el, state) {
    var ast = el.children[0];
    if (process.env.NODE_ENV !== 'production' && (el.children.length !== 1 || ast.type !== 1)) {
        state.warn('Inline-template components must have exactly one child element.', { start: el.start });
    }
    if (ast && ast.type === 1) {
        var inlineRenderFns = generate(ast, state.options);
        return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns
            .map(function (code) { return "function(){".concat(code, "}"); })
            .join(','), "]}");
    }
}
function genScopedSlots(el, slots, state) {
    // by default scoped slots are considered "stable", this allows child
    // components with only scoped slots to skip forced updates from parent.
    // but in some cases we have to bail-out of this optimization
    // for example if the slot contains dynamic names, has v-if or v-for on them...
    var needsForceUpdate = el.for ||
        Object.keys(slots).some(function (key) {
            var slot = slots[key];
            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
            );
        });
    // #9534: if a component with scoped slots is inside a conditional branch,
    // it's possible for the same component to be reused but with different
    // compiled slot content. To avoid that, we generate a unique key based on
    // the generated code of all the slot contents.
    var needsKey = !!el.if;
    // OR when it is inside another scoped slot or v-for (the reactivity may be
    // disconnected due to the intermediate scope variable)
    // #9438, #9506
    // TODO: this can be further optimized by properly analyzing in-scope bindings
    // and skip force updating ones that do not actually use scope variables.
    if (!needsForceUpdate) {
        var parent_2 = el.parent;
        while (parent_2) {
            if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||
                parent_2.for) {
                needsForceUpdate = true;
                break;
            }
            if (parent_2.if) {
                needsKey = true;
            }
            parent_2 = parent_2.parent;
        }
    }
    var generatedSlots = Object.keys(slots)
        .map(function (key) { return genScopedSlot(slots[key], state); })
        .join(',');
    return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")");
}
function hash(str) {
    var hash = 5381;
    var i = str.length;
    while (i) {
        hash = (hash * 33) ^ str.charCodeAt(--i);
    }
    return hash >>> 0;
}
function containsSlotChild(el) {
    if (el.type === 1) {
        if (el.tag === 'slot') {
            return true;
        }
        return el.children.some(containsSlotChild);
    }
    return false;
}
function genScopedSlot(el, state) {
    var isLegacySyntax = el.attrsMap['slot-scope'];
    if (el.if && !el.ifProcessed && !isLegacySyntax) {
        return genIf(el, state, genScopedSlot, "null");
    }
    if (el.for && !el.forProcessed) {
        return genFor(el, state, genScopedSlot);
    }
    var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope);
    var fn = "function(".concat(slotScope, "){") +
        "return ".concat(el.tag === 'template'
            ? el.if && isLegacySyntax
                ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined")
                : genChildren(el, state) || 'undefined'
            : genElement(el, state), "}");
    // reverse proxy v-slot without scope on this.$slots
    var reverseProxy = slotScope ? "" : ",proxy:true";
    return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}");
}
function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
    var children = el.children;
    if (children.length) {
        var el_1 = children[0];
        // optimize single v-for
        if (children.length === 1 &&
            el_1.for &&
            el_1.tag !== 'template' &&
            el_1.tag !== 'slot') {
            var normalizationType_1 = checkSkip
                ? state.maybeComponent(el_1)
                    ? ",1"
                    : ",0"
                : "";
            return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);
        }
        var normalizationType = checkSkip
            ? getNormalizationType(children, state.maybeComponent)
            : 0;
        var gen_1 = altGenNode || genNode;
        return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : '');
    }
}
// determine the normalization needed for the children array.
// 0: no normalization needed
// 1: simple normalization needed (possible 1-level deep nested array)
// 2: full normalization needed
function getNormalizationType(children, maybeComponent) {
    var res = 0;
    for (var i = 0; i < children.length; i++) {
        var el = children[i];
        if (el.type !== 1) {
            continue;
        }
        if (needsNormalization(el) ||
            (el.ifConditions &&
                el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
            res = 2;
            break;
        }
        if (maybeComponent(el) ||
            (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
            res = 1;
        }
    }
    return res;
}
function needsNormalization(el) {
    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
}
function genNode(node, state) {
    if (node.type === 1) {
        return genElement(node, state);
    }
    else if (node.type === 3 && node.isComment) {
        return genComment(node);
    }
    else {
        return genText(node);
    }
}
function genText(text) {
    return "_v(".concat(text.type === 2
        ? text.expression // no need for () because already wrapped in _s()
        : transformSpecialNewlines(JSON.stringify(text.text)), ")");
}
function genComment(comment) {
    return "_e(".concat(JSON.stringify(comment.text), ")");
}
function genSlot(el, state) {
    var slotName = el.slotName || '"default"';
    var children = genChildren(el, state);
    var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : '');
    var attrs = el.attrs || el.dynamicAttrs
        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({
            // slot props are camelized
            name: camelize(attr.name),
            value: attr.value,
            dynamic: attr.dynamic
        }); }))
        : null;
    var bind = el.attrsMap['v-bind'];
    if ((attrs || bind) && !children) {
        res += ",null";
    }
    if (attrs) {
        res += ",".concat(attrs);
    }
    if (bind) {
        res += "".concat(attrs ? '' : ',null', ",").concat(bind);
    }
    return res + ')';
}
// componentName is el.component, take it as argument to shun flow's pessimistic refinement
function genComponent(componentName, el, state) {
    var children = el.inlineTemplate ? null : genChildren(el, state, true);
    return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")");
}
function genProps(props) {
    var staticProps = "";
    var dynamicProps = "";
    for (var i = 0; i < props.length; i++) {
        var prop = props[i];
        var value = transformSpecialNewlines(prop.value);
        if (prop.dynamic) {
            dynamicProps += "".concat(prop.name, ",").concat(value, ",");
        }
        else {
            staticProps += "\"".concat(prop.name, "\":").concat(value, ",");
        }
    }
    staticProps = "{".concat(staticProps.slice(0, -1), "}");
    if (dynamicProps) {
        return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])");
    }
    else {
        return staticProps;
    }
}
// #3895, #4268
function transformSpecialNewlines(text) {
    return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
}

// these keywords should not appear inside expressions, but operators like
// typeof, instanceof and in are allowed
var prohibitedKeywordRE = new RegExp('\\b' +
    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
        'super,throw,while,yield,delete,export,import,return,switch,default,' +
        'extends,finally,continue,debugger,function,arguments')
        .split(',')
        .join('\\b|\\b') +
    '\\b');
// these unary operators should not be used as property/method names
var unaryOperatorsRE = new RegExp('\\b' +
    'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
    '\\s*\\([^\\)]*\\)');
// strip strings in expressions
var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
// detect problematic expressions in a template
function detectErrors(ast, warn) {
    if (ast) {
        checkNode(ast, warn);
    }
}
function checkNode(node, warn) {
    if (node.type === 1) {
        for (var name_1 in node.attrsMap) {
            if (dirRE.test(name_1)) {
                var value = node.attrsMap[name_1];
                if (value) {
                    var range = node.rawAttrsMap[name_1];
                    if (name_1 === 'v-for') {
                        checkFor(node, "v-for=\"".concat(value, "\""), warn, range);
                    }
                    else if (name_1 === 'v-slot' || name_1[0] === '#') {
                        checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
                    }
                    else if (onRE.test(name_1)) {
                        checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
                    }
                    else {
                        checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
                    }
                }
            }
        }
        if (node.children) {
            for (var i = 0; i < node.children.length; i++) {
                checkNode(node.children[i], warn);
            }
        }
    }
    else if (node.type === 2) {
        checkExpression(node.expression, node.text, warn, node);
    }
}
function checkEvent(exp, text, warn, range) {
    var stripped = exp.replace(stripStringRE, '');
    var keywordMatch = stripped.match(unaryOperatorsRE);
    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
        warn("avoid using JavaScript unary operator as property name: " +
            "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range);
    }
    checkExpression(exp, text, warn, range);
}
function checkFor(node, text, warn, range) {
    checkExpression(node.for || '', text, warn, range);
    checkIdentifier(node.alias, 'v-for alias', text, warn, range);
    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
}
function checkIdentifier(ident, type, text, warn, range) {
    if (typeof ident === 'string') {
        try {
            new Function("var ".concat(ident, "=_"));
        }
        catch (e) {
            warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range);
        }
    }
}
function checkExpression(exp, text, warn, range) {
    try {
        new Function("return ".concat(exp));
    }
    catch (e) {
        var keywordMatch = exp
            .replace(stripStringRE, '')
            .match(prohibitedKeywordRE);
        if (keywordMatch) {
            warn("avoid using JavaScript keyword as property name: " +
                "\"".concat(keywordMatch[0], "\"\n  Raw expression: ").concat(text.trim()), range);
        }
        else {
            warn("invalid expression: ".concat(e.message, " in\n\n") +
                "    ".concat(exp, "\n\n") +
                "  Raw expression: ".concat(text.trim(), "\n"), range);
        }
    }
}
function checkFunctionParameterExpression(exp, text, warn, range) {
    try {
        new Function(exp, '');
    }
    catch (e) {
        warn("invalid function parameter expression: ".concat(e.message, " in\n\n") +
            "    ".concat(exp, "\n\n") +
            "  Raw expression: ".concat(text.trim(), "\n"), range);
    }
}

var range = 2;
function generateCodeFrame(source, start, end) {
    if (start === void 0) { start = 0; }
    if (end === void 0) { end = source.length; }
    var lines = source.split(/\r?\n/);
    var count = 0;
    var res = [];
    for (var i = 0; i < lines.length; i++) {
        count += lines[i].length + 1;
        if (count >= start) {
            for (var j = i - range; j <= i + range || end > count; j++) {
                if (j < 0 || j >= lines.length)
                    continue;
                res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "|  ").concat(lines[j]));
                var lineLength = lines[j].length;
                if (j === i) {
                    // push underline
                    var pad = start - (count - lineLength) + 1;
                    var length_1 = end > count ? lineLength - pad : end - start;
                    res.push("   |  " + repeat(" ", pad) + repeat("^", length_1));
                }
                else if (j > i) {
                    if (end > count) {
                        var length_2 = Math.min(end - count, lineLength);
                        res.push("   |  " + repeat("^", length_2));
                    }
                    count += lineLength + 1;
                }
            }
            break;
        }
    }
    return res.join('\n');
}
function repeat(str, n) {
    var result = '';
    if (n > 0) {
        // eslint-disable-next-line no-constant-condition
        while (true) {
            // eslint-disable-line
            if (n & 1)
                result += str;
            n >>>= 1;
            if (n <= 0)
                break;
            str += str;
        }
    }
    return result;
}

function createFunction(code, errors) {
    try {
        return new Function(code);
    }
    catch (err) {
        errors.push({ err: err, code: code });
        return noop;
    }
}
function createCompileToFunctionFn(compile) {
    var cache = Object.create(null);
    return function compileToFunctions(template, options, vm) {
        options = extend({}, options);
        var warn = options.warn || warn$2;
        delete options.warn;
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production') {
            // detect possible CSP restriction
            try {
                new Function('return 1');
            }
            catch (e) {
                if (e.toString().match(/unsafe-eval|CSP/)) {
                    warn('It seems you are using the standalone build of Vue.js in an ' +
                        'environment with Content Security Policy that prohibits unsafe-eval. ' +
                        'The template compiler cannot work in this environment. Consider ' +
                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
                        'templates into render functions.');
                }
            }
        }
        // check cache
        var key = options.delimiters
            ? String(options.delimiters) + template
            : template;
        if (cache[key]) {
            return cache[key];
        }
        // compile
        var compiled = compile(template, options);
        // check compilation errors/tips
        if (process.env.NODE_ENV !== 'production') {
            if (compiled.errors && compiled.errors.length) {
                if (options.outputSourceRange) {
                    compiled.errors.forEach(function (e) {
                        warn("Error compiling template:\n\n".concat(e.msg, "\n\n") +
                            generateCodeFrame(template, e.start, e.end), vm);
                    });
                }
                else {
                    warn("Error compiling template:\n\n".concat(template, "\n\n") +
                        compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') +
                        '\n', vm);
                }
            }
            if (compiled.tips && compiled.tips.length) {
                if (options.outputSourceRange) {
                    compiled.tips.forEach(function (e) { return tip(e.msg, vm); });
                }
                else {
                    compiled.tips.forEach(function (msg) { return tip(msg, vm); });
                }
            }
        }
        // turn code into functions
        var res = {};
        var fnGenErrors = [];
        res.render = createFunction(compiled.render, fnGenErrors);
        res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
            return createFunction(code, fnGenErrors);
        });
        // check function generation errors.
        // this should only happen if there is a bug in the compiler itself.
        // mostly for codegen development use
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production') {
            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
                warn("Failed to generate render function:\n\n" +
                    fnGenErrors
                        .map(function (_a) {
                        var err = _a.err, code = _a.code;
                        return "".concat(err.toString(), " in\n\n").concat(code, "\n");
                    })
                        .join('\n'), vm);
            }
        }
        return (cache[key] = res);
    };
}

function createCompilerCreator(baseCompile) {
    return function createCompiler(baseOptions) {
        function compile(template, options) {
            var finalOptions = Object.create(baseOptions);
            var errors = [];
            var tips = [];
            var warn = function (msg, range, tip) {
                (tip ? tips : errors).push(msg);
            };
            if (options) {
                if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                    // $flow-disable-line
                    var leadingSpaceLength_1 = template.match(/^\s*/)[0].length;
                    warn = function (msg, range, tip) {
                        var data = typeof msg === 'string' ? { msg: msg } : msg;
                        if (range) {
                            if (range.start != null) {
                                data.start = range.start + leadingSpaceLength_1;
                            }
                            if (range.end != null) {
                                data.end = range.end + leadingSpaceLength_1;
                            }
                        }
                        (tip ? tips : errors).push(data);
                    };
                }
                // merge custom modules
                if (options.modules) {
                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
                }
                // merge custom directives
                if (options.directives) {
                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
                }
                // copy other options
                for (var key in options) {
                    if (key !== 'modules' && key !== 'directives') {
                        finalOptions[key] = options[key];
                    }
                }
            }
            finalOptions.warn = warn;
            var compiled = baseCompile(template.trim(), finalOptions);
            if (process.env.NODE_ENV !== 'production') {
                detectErrors(compiled.ast, warn);
            }
            compiled.errors = errors;
            compiled.tips = tips;
            return compiled;
        }
        return {
            compile: compile,
            compileToFunctions: createCompileToFunctionFn(compile)
        };
    };
}

// `createCompilerCreator` allows creating compilers that use alternative
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
// Here we just export a default compiler using the default parts.
var createCompiler = createCompilerCreator(function baseCompile(template, options) {
    var ast = parse(template.trim(), options);
    if (options.optimize !== false) {
        optimize(ast, options);
    }
    var code = generate(ast, options);
    return {
        ast: ast,
        render: code.render,
        staticRenderFns: code.staticRenderFns
    };
});

var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;

// check whether current browser encodes a char inside attribute values
var div;
function getShouldDecode(href) {
    div = div || document.createElement('div');
    div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
    return div.innerHTML.indexOf('&#10;') > 0;
}
// #3663: IE encodes newlines inside attribute values while other browsers don't
var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
// #6828: chrome encodes content in a[href]
var shouldDecodeNewlinesForHref = inBrowser
    ? getShouldDecode(true)
    : false;

var idToTemplate = cached(function (id) {
    var el = query(id);
    return el && el.innerHTML;
});
var mount = Vue.prototype.$mount;
Vue.prototype.$mount = function (el, hydrating) {
    el = el && query(el);
    /* istanbul ignore if */
    if (el === document.body || el === document.documentElement) {
        process.env.NODE_ENV !== 'production' &&
            warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead.");
        return this;
    }
    var options = this.$options;
    // resolve template/el and convert to render function
    if (!options.render) {
        var template = options.template;
        if (template) {
            if (typeof template === 'string') {
                if (template.charAt(0) === '#') {
                    template = idToTemplate(template);
                    /* istanbul ignore if */
                    if (process.env.NODE_ENV !== 'production' && !template) {
                        warn$2("Template element not found or is empty: ".concat(options.template), this);
                    }
                }
            }
            else if (template.nodeType) {
                template = template.innerHTML;
            }
            else {
                if (process.env.NODE_ENV !== 'production') {
                    warn$2('invalid template option:' + template, this);
                }
                return this;
            }
        }
        else if (el) {
            // @ts-expect-error
            template = getOuterHTML(el);
        }
        if (template) {
            /* istanbul ignore if */
            if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
                mark('compile');
            }
            var _a = compileToFunctions(template, {
                outputSourceRange: process.env.NODE_ENV !== 'production',
                shouldDecodeNewlines: shouldDecodeNewlines,
                shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
                delimiters: options.delimiters,
                comments: options.comments
            }, this), render = _a.render, staticRenderFns = _a.staticRenderFns;
            options.render = render;
            options.staticRenderFns = staticRenderFns;
            /* istanbul ignore if */
            if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
                mark('compile end');
                measure("vue ".concat(this._name, " compile"), 'compile', 'compile end');
            }
        }
    }
    return mount.call(this, el, hydrating);
};
/**
 * Get outerHTML of elements, taking care
 * of SVG elements in IE as well.
 */
function getOuterHTML(el) {
    if (el.outerHTML) {
        return el.outerHTML;
    }
    else {
        var container = document.createElement('div');
        container.appendChild(el.cloneNode(true));
        return container.innerHTML;
    }
}
Vue.compile = compileToFunctions;

export { EffectScope, computed, customRef, Vue as default, defineAsyncComponent, defineComponent, del, effectScope, getCurrentInstance, getCurrentScope, h, inject, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, mergeDefaults, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, provide, proxyRefs, reactive, readonly, ref$1 as ref, set, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, useAttrs, useCssModule, useCssVars, useListeners, useSlots, version, watch, watchEffect, watchPostEffect, watchSyncEffect };
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Vue = factory());
})(this, (function () { 'use strict';

  var emptyObject = Object.freeze({});
  var isArray = Array.isArray;
  // These helpers produce better VM code in JS engines due to their
  // explicitness and function inlining.
  function isUndef(v) {
      return v === undefined || v === null;
  }
  function isDef(v) {
      return v !== undefined && v !== null;
  }
  function isTrue(v) {
      return v === true;
  }
  function isFalse(v) {
      return v === false;
  }
  /**
   * Check if value is primitive.
   */
  function isPrimitive(value) {
      return (typeof value === 'string' ||
          typeof value === 'number' ||
          // $flow-disable-line
          typeof value === 'symbol' ||
          typeof value === 'boolean');
  }
  function isFunction(value) {
      return typeof value === 'function';
  }
  /**
   * Quick object check - this is primarily used to tell
   * objects from primitive values when we know the value
   * is a JSON-compliant type.
   */
  function isObject(obj) {
      return obj !== null && typeof obj === 'object';
  }
  /**
   * Get the raw type string of a value, e.g., [object Object].
   */
  var _toString = Object.prototype.toString;
  function toRawType(value) {
      return _toString.call(value).slice(8, -1);
  }
  /**
   * Strict object type check. Only returns true
   * for plain JavaScript objects.
   */
  function isPlainObject(obj) {
      return _toString.call(obj) === '[object Object]';
  }
  function isRegExp(v) {
      return _toString.call(v) === '[object RegExp]';
  }
  /**
   * Check if val is a valid array index.
   */
  function isValidArrayIndex(val) {
      var n = parseFloat(String(val));
      return n >= 0 && Math.floor(n) === n && isFinite(val);
  }
  function isPromise(val) {
      return (isDef(val) &&
          typeof val.then === 'function' &&
          typeof val.catch === 'function');
  }
  /**
   * Convert a value to a string that is actually rendered.
   */
  function toString(val) {
      return val == null
          ? ''
          : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
              ? JSON.stringify(val, null, 2)
              : String(val);
  }
  /**
   * Convert an input value to a number for persistence.
   * If the conversion fails, return original string.
   */
  function toNumber(val) {
      var n = parseFloat(val);
      return isNaN(n) ? val : n;
  }
  /**
   * Make a map and return a function for checking if a key
   * is in that map.
   */
  function makeMap(str, expectsLowerCase) {
      var map = Object.create(null);
      var list = str.split(',');
      for (var i = 0; i < list.length; i++) {
          map[list[i]] = true;
      }
      return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };
  }
  /**
   * Check if a tag is a built-in tag.
   */
  var isBuiltInTag = makeMap('slot,component', true);
  /**
   * Check if an attribute is a reserved attribute.
   */
  var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
  /**
   * Remove an item from an array.
   */
  function remove$2(arr, item) {
      var len = arr.length;
      if (len) {
          // fast path for the only / last item
          if (item === arr[len - 1]) {
              arr.length = len - 1;
              return;
          }
          var index = arr.indexOf(item);
          if (index > -1) {
              return arr.splice(index, 1);
          }
      }
  }
  /**
   * Check whether an object has the property.
   */
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  function hasOwn(obj, key) {
      return hasOwnProperty.call(obj, key);
  }
  /**
   * Create a cached version of a pure function.
   */
  function cached(fn) {
      var cache = Object.create(null);
      return function cachedFn(str) {
          var hit = cache[str];
          return hit || (cache[str] = fn(str));
      };
  }
  /**
   * Camelize a hyphen-delimited string.
   */
  var camelizeRE = /-(\w)/g;
  var camelize = cached(function (str) {
      return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });
  });
  /**
   * Capitalize a string.
   */
  var capitalize = cached(function (str) {
      return str.charAt(0).toUpperCase() + str.slice(1);
  });
  /**
   * Hyphenate a camelCase string.
   */
  var hyphenateRE = /\B([A-Z])/g;
  var hyphenate = cached(function (str) {
      return str.replace(hyphenateRE, '-$1').toLowerCase();
  });
  /**
   * Simple bind polyfill for environments that do not support it,
   * e.g., PhantomJS 1.x. Technically, we don't need this anymore
   * since native bind is now performant enough in most browsers.
   * But removing it would mean breaking code that was able to run in
   * PhantomJS 1.x, so this must be kept for backward compatibility.
   */
  /* istanbul ignore next */
  function polyfillBind(fn, ctx) {
      function boundFn(a) {
          var l = arguments.length;
          return l
              ? l > 1
                  ? fn.apply(ctx, arguments)
                  : fn.call(ctx, a)
              : fn.call(ctx);
      }
      boundFn._length = fn.length;
      return boundFn;
  }
  function nativeBind(fn, ctx) {
      return fn.bind(ctx);
  }
  // @ts-expect-error bind cannot be `undefined`
  var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;
  /**
   * Convert an Array-like object to a real Array.
   */
  function toArray(list, start) {
      start = start || 0;
      var i = list.length - start;
      var ret = new Array(i);
      while (i--) {
          ret[i] = list[i + start];
      }
      return ret;
  }
  /**
   * Mix properties into target object.
   */
  function extend(to, _from) {
      for (var key in _from) {
          to[key] = _from[key];
      }
      return to;
  }
  /**
   * Merge an Array of Objects into a single Object.
   */
  function toObject(arr) {
      var res = {};
      for (var i = 0; i < arr.length; i++) {
          if (arr[i]) {
              extend(res, arr[i]);
          }
      }
      return res;
  }
  /* eslint-disable no-unused-vars */
  /**
   * Perform no operation.
   * Stubbing args to make Flow happy without leaving useless transpiled code
   * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
   */
  function noop(a, b, c) { }
  /**
   * Always return false.
   */
  var no = function (a, b, c) { return false; };
  /* eslint-enable no-unused-vars */
  /**
   * Return the same value.
   */
  var identity = function (_) { return _; };
  /**
   * Generate a string containing static keys from compiler modules.
   */
  function genStaticKeys$1(modules) {
      return modules
          .reduce(function (keys, m) {
          return keys.concat(m.staticKeys || []);
      }, [])
          .join(',');
  }
  /**
   * Check if two values are loosely equal - that is,
   * if they are plain objects, do they have the same shape?
   */
  function looseEqual(a, b) {
      if (a === b)
          return true;
      var isObjectA = isObject(a);
      var isObjectB = isObject(b);
      if (isObjectA && isObjectB) {
          try {
              var isArrayA = Array.isArray(a);
              var isArrayB = Array.isArray(b);
              if (isArrayA && isArrayB) {
                  return (a.length === b.length &&
                      a.every(function (e, i) {
                          return looseEqual(e, b[i]);
                      }));
              }
              else if (a instanceof Date && b instanceof Date) {
                  return a.getTime() === b.getTime();
              }
              else if (!isArrayA && !isArrayB) {
                  var keysA = Object.keys(a);
                  var keysB = Object.keys(b);
                  return (keysA.length === keysB.length &&
                      keysA.every(function (key) {
                          return looseEqual(a[key], b[key]);
                      }));
              }
              else {
                  /* istanbul ignore next */
                  return false;
              }
          }
          catch (e) {
              /* istanbul ignore next */
              return false;
          }
      }
      else if (!isObjectA && !isObjectB) {
          return String(a) === String(b);
      }
      else {
          return false;
      }
  }
  /**
   * Return the first index at which a loosely equal value can be
   * found in the array (if value is a plain object, the array must
   * contain an object of the same shape), or -1 if it is not present.
   */
  function looseIndexOf(arr, val) {
      for (var i = 0; i < arr.length; i++) {
          if (looseEqual(arr[i], val))
              return i;
      }
      return -1;
  }
  /**
   * Ensure a function is called only once.
   */
  function once(fn) {
      var called = false;
      return function () {
          if (!called) {
              called = true;
              fn.apply(this, arguments);
          }
      };
  }
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
  function hasChanged(x, y) {
      if (x === y) {
          return x === 0 && 1 / x !== 1 / y;
      }
      else {
          return x === x || y === y;
      }
  }

  var SSR_ATTR = 'data-server-rendered';
  var ASSET_TYPES = ['component', 'directive', 'filter'];
  var LIFECYCLE_HOOKS = [
      'beforeCreate',
      'created',
      'beforeMount',
      'mounted',
      'beforeUpdate',
      'updated',
      'beforeDestroy',
      'destroyed',
      'activated',
      'deactivated',
      'errorCaptured',
      'serverPrefetch',
      'renderTracked',
      'renderTriggered'
  ];

  var config = {
      /**
       * Option merge strategies (used in core/util/options)
       */
      // $flow-disable-line
      optionMergeStrategies: Object.create(null),
      /**
       * Whether to suppress warnings.
       */
      silent: false,
      /**
       * Show production mode tip message on boot?
       */
      productionTip: true,
      /**
       * Whether to enable devtools
       */
      devtools: true,
      /**
       * Whether to record perf
       */
      performance: false,
      /**
       * Error handler for watcher errors
       */
      errorHandler: null,
      /**
       * Warn handler for watcher warns
       */
      warnHandler: null,
      /**
       * Ignore certain custom elements
       */
      ignoredElements: [],
      /**
       * Custom user key aliases for v-on
       */
      // $flow-disable-line
      keyCodes: Object.create(null),
      /**
       * Check if a tag is reserved so that it cannot be registered as a
       * component. This is platform-dependent and may be overwritten.
       */
      isReservedTag: no,
      /**
       * Check if an attribute is reserved so that it cannot be used as a component
       * prop. This is platform-dependent and may be overwritten.
       */
      isReservedAttr: no,
      /**
       * Check if a tag is an unknown element.
       * Platform-dependent.
       */
      isUnknownElement: no,
      /**
       * Get the namespace of an element
       */
      getTagNamespace: noop,
      /**
       * Parse the real tag name for the specific platform.
       */
      parsePlatformTagName: identity,
      /**
       * Check if an attribute must be bound using property, e.g. value
       * Platform-dependent.
       */
      mustUseProp: no,
      /**
       * Perform updates asynchronously. Intended to be used by Vue Test Utils
       * This will significantly reduce performance if set to false.
       */
      async: true,
      /**
       * Exposed for legacy reasons
       */
      _lifecycleHooks: LIFECYCLE_HOOKS
  };

  /**
   * unicode letters used for parsing html tags, component names and property paths.
   * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
   * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
   */
  var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
  /**
   * Check if a string starts with $ or _
   */
  function isReserved(str) {
      var c = (str + '').charCodeAt(0);
      return c === 0x24 || c === 0x5f;
  }
  /**
   * Define a property.
   */
  function def(obj, key, val, enumerable) {
      Object.defineProperty(obj, key, {
          value: val,
          enumerable: !!enumerable,
          writable: true,
          configurable: true
      });
  }
  /**
   * Parse simple path.
   */
  var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]"));
  function parsePath(path) {
      if (bailRE.test(path)) {
          return;
      }
      var segments = path.split('.');
      return function (obj) {
          for (var i = 0; i < segments.length; i++) {
              if (!obj)
                  return;
              obj = obj[segments[i]];
          }
          return obj;
      };
  }

  // can we use __proto__?
  var hasProto = '__proto__' in {};
  // Browser environment sniffing
  var inBrowser = typeof window !== 'undefined';
  var UA = inBrowser && window.navigator.userAgent.toLowerCase();
  var isIE = UA && /msie|trident/.test(UA);
  var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
  var isEdge = UA && UA.indexOf('edge/') > 0;
  UA && UA.indexOf('android') > 0;
  var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
  UA && /chrome\/\d+/.test(UA) && !isEdge;
  UA && /phantomjs/.test(UA);
  var isFF = UA && UA.match(/firefox\/(\d+)/);
  // Firefox has a "watch" function on Object.prototype...
  // @ts-expect-error firebox support
  var nativeWatch = {}.watch;
  var supportsPassive = false;
  if (inBrowser) {
      try {
          var opts = {};
          Object.defineProperty(opts, 'passive', {
              get: function () {
                  /* istanbul ignore next */
                  supportsPassive = true;
              }
          }); // https://github.com/facebook/flow/issues/285
          window.addEventListener('test-passive', null, opts);
      }
      catch (e) { }
  }
  // this needs to be lazy-evaled because vue may be required before
  // vue-server-renderer can set VUE_ENV
  var _isServer;
  var isServerRendering = function () {
      if (_isServer === undefined) {
          /* istanbul ignore if */
          if (!inBrowser && typeof global !== 'undefined') {
              // detect presence of vue-server-renderer and avoid
              // Webpack shimming the process
              _isServer =
                  global['process'] && global['process'].env.VUE_ENV === 'server';
          }
          else {
              _isServer = false;
          }
      }
      return _isServer;
  };
  // detect devtools
  var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
  /* istanbul ignore next */
  function isNative(Ctor) {
      return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
  }
  var hasSymbol = typeof Symbol !== 'undefined' &&
      isNative(Symbol) &&
      typeof Reflect !== 'undefined' &&
      isNative(Reflect.ownKeys);
  var _Set; // $flow-disable-line
  /* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
      // use native Set when available.
      _Set = Set;
  }
  else {
      // a non-standard Set polyfill that only works with primitive keys.
      _Set = /** @class */ (function () {
          function Set() {
              this.set = Object.create(null);
          }
          Set.prototype.has = function (key) {
              return this.set[key] === true;
          };
          Set.prototype.add = function (key) {
              this.set[key] = true;
          };
          Set.prototype.clear = function () {
              this.set = Object.create(null);
          };
          return Set;
      }());
  }

  var currentInstance = null;
  /**
   * This is exposed for compatibility with v3 (e.g. some functions in VueUse
   * relies on it). Do not use this internally, just use `currentInstance`.
   *
   * @internal this function needs manual type declaration because it relies
   * on previously manually authored types from Vue 2
   */
  function getCurrentInstance() {
      return currentInstance && { proxy: currentInstance };
  }
  /**
   * @internal
   */
  function setCurrentInstance(vm) {
      if (vm === void 0) { vm = null; }
      if (!vm)
          currentInstance && currentInstance._scope.off();
      currentInstance = vm;
      vm && vm._scope.on();
  }

  /**
   * @internal
   */
  var VNode = /** @class */ (function () {
      function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
          this.tag = tag;
          this.data = data;
          this.children = children;
          this.text = text;
          this.elm = elm;
          this.ns = undefined;
          this.context = context;
          this.fnContext = undefined;
          this.fnOptions = undefined;
          this.fnScopeId = undefined;
          this.key = data && data.key;
          this.componentOptions = componentOptions;
          this.componentInstance = undefined;
          this.parent = undefined;
          this.raw = false;
          this.isStatic = false;
          this.isRootInsert = true;
          this.isComment = false;
          this.isCloned = false;
          this.isOnce = false;
          this.asyncFactory = asyncFactory;
          this.asyncMeta = undefined;
          this.isAsyncPlaceholder = false;
      }
      Object.defineProperty(VNode.prototype, "child", {
          // DEPRECATED: alias for componentInstance for backwards compat.
          /* istanbul ignore next */
          get: function () {
              return this.componentInstance;
          },
          enumerable: false,
          configurable: true
      });
      return VNode;
  }());
  var createEmptyVNode = function (text) {
      if (text === void 0) { text = ''; }
      var node = new VNode();
      node.text = text;
      node.isComment = true;
      return node;
  };
  function createTextVNode(val) {
      return new VNode(undefined, undefined, undefined, String(val));
  }
  // optimized shallow clone
  // used for static nodes and slot nodes because they may be reused across
  // multiple renders, cloning them avoids errors when DOM manipulations rely
  // on their elm reference.
  function cloneVNode(vnode) {
      var cloned = new VNode(vnode.tag, vnode.data, 
      // #7975
      // clone children array to avoid mutating original in case of cloning
      // a child.
      vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
      cloned.ns = vnode.ns;
      cloned.isStatic = vnode.isStatic;
      cloned.key = vnode.key;
      cloned.isComment = vnode.isComment;
      cloned.fnContext = vnode.fnContext;
      cloned.fnOptions = vnode.fnOptions;
      cloned.fnScopeId = vnode.fnScopeId;
      cloned.asyncMeta = vnode.asyncMeta;
      cloned.isCloned = true;
      return cloned;
  }

  /* not type checking this file because flow doesn't play well with Proxy */
  var initProxy;
  {
      var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
          'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
          'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
          'require' // for Webpack/Browserify
      );
      var warnNonPresent_1 = function (target, key) {
          warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") +
              'referenced during render. Make sure that this property is reactive, ' +
              'either in the data option, or for class-based components, by ' +
              'initializing the property. ' +
              'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
      };
      var warnReservedPrefix_1 = function (target, key) {
          warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") +
              'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
              'prevent conflicts with Vue internals. ' +
              'See: https://v2.vuejs.org/v2/api/#data', target);
      };
      var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
      if (hasProxy_1) {
          var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
          config.keyCodes = new Proxy(config.keyCodes, {
              set: function (target, key, value) {
                  if (isBuiltInModifier_1(key)) {
                      warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key));
                      return false;
                  }
                  else {
                      target[key] = value;
                      return true;
                  }
              }
          });
      }
      var hasHandler_1 = {
          has: function (target, key) {
              var has = key in target;
              var isAllowed = allowedGlobals_1(key) ||
                  (typeof key === 'string' &&
                      key.charAt(0) === '_' &&
                      !(key in target.$data));
              if (!has && !isAllowed) {
                  if (key in target.$data)
                      warnReservedPrefix_1(target, key);
                  else
                      warnNonPresent_1(target, key);
              }
              return has || !isAllowed;
          }
      };
      var getHandler_1 = {
          get: function (target, key) {
              if (typeof key === 'string' && !(key in target)) {
                  if (key in target.$data)
                      warnReservedPrefix_1(target, key);
                  else
                      warnNonPresent_1(target, key);
              }
              return target[key];
          }
      };
      initProxy = function initProxy(vm) {
          if (hasProxy_1) {
              // determine which proxy handler to use
              var options = vm.$options;
              var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;
              vm._renderProxy = new Proxy(vm, handlers);
          }
          else {
              vm._renderProxy = vm;
          }
      };
  }

  /******************************************************************************
  Copyright (c) Microsoft Corporation.

  Permission to use, copy, modify, and/or distribute this software for any
  purpose with or without fee is hereby granted.

  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  PERFORMANCE OF THIS SOFTWARE.
  ***************************************************************************** */

  var __assign = function() {
      __assign = Object.assign || function __assign(t) {
          for (var s, i = 1, n = arguments.length; i < n; i++) {
              s = arguments[i];
              for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
          }
          return t;
      };
      return __assign.apply(this, arguments);
  };

  var uid$2 = 0;
  var pendingCleanupDeps = [];
  var cleanupDeps = function () {
      for (var i = 0; i < pendingCleanupDeps.length; i++) {
          var dep = pendingCleanupDeps[i];
          dep.subs = dep.subs.filter(function (s) { return s; });
          dep._pending = false;
      }
      pendingCleanupDeps.length = 0;
  };
  /**
   * A dep is an observable that can have multiple
   * directives subscribing to it.
   * @internal
   */
  var Dep = /** @class */ (function () {
      function Dep() {
          // pending subs cleanup
          this._pending = false;
          this.id = uid$2++;
          this.subs = [];
      }
      Dep.prototype.addSub = function (sub) {
          this.subs.push(sub);
      };
      Dep.prototype.removeSub = function (sub) {
          // #12696 deps with massive amount of subscribers are extremely slow to
          // clean up in Chromium
          // to workaround this, we unset the sub for now, and clear them on
          // next scheduler flush.
          this.subs[this.subs.indexOf(sub)] = null;
          if (!this._pending) {
              this._pending = true;
              pendingCleanupDeps.push(this);
          }
      };
      Dep.prototype.depend = function (info) {
          if (Dep.target) {
              Dep.target.addDep(this);
              if (info && Dep.target.onTrack) {
                  Dep.target.onTrack(__assign({ effect: Dep.target }, info));
              }
          }
      };
      Dep.prototype.notify = function (info) {
          // stabilize the subscriber list first
          var subs = this.subs.filter(function (s) { return s; });
          if (!config.async) {
              // subs aren't sorted in scheduler if not running async
              // we need to sort them now to make sure they fire in correct
              // order
              subs.sort(function (a, b) { return a.id - b.id; });
          }
          for (var i = 0, l = subs.length; i < l; i++) {
              var sub = subs[i];
              if (info) {
                  sub.onTrigger &&
                      sub.onTrigger(__assign({ effect: subs[i] }, info));
              }
              sub.update();
          }
      };
      return Dep;
  }());
  // The current target watcher being evaluated.
  // This is globally unique because only one watcher
  // can be evaluated at a time.
  Dep.target = null;
  var targetStack = [];
  function pushTarget(target) {
      targetStack.push(target);
      Dep.target = target;
  }
  function popTarget() {
      targetStack.pop();
      Dep.target = targetStack[targetStack.length - 1];
  }

  /*
   * not type checking this file because flow doesn't play well with
   * dynamically accessing methods on Array prototype
   */
  var arrayProto = Array.prototype;
  var arrayMethods = Object.create(arrayProto);
  var methodsToPatch = [
      'push',
      'pop',
      'shift',
      'unshift',
      'splice',
      'sort',
      'reverse'
  ];
  /**
   * Intercept mutating methods and emit events
   */
  methodsToPatch.forEach(function (method) {
      // cache original method
      var original = arrayProto[method];
      def(arrayMethods, method, function mutator() {
          var args = [];
          for (var _i = 0; _i < arguments.length; _i++) {
              args[_i] = arguments[_i];
          }
          var result = original.apply(this, args);
          var ob = this.__ob__;
          var inserted;
          switch (method) {
              case 'push':
              case 'unshift':
                  inserted = args;
                  break;
              case 'splice':
                  inserted = args.slice(2);
                  break;
          }
          if (inserted)
              ob.observeArray(inserted);
          // notify change
          {
              ob.dep.notify({
                  type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
                  target: this,
                  key: method
              });
          }
          return result;
      });
  });

  var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
  var NO_INIITIAL_VALUE = {};
  /**
   * In some cases we may want to disable observation inside a component's
   * update computation.
   */
  var shouldObserve = true;
  function toggleObserving(value) {
      shouldObserve = value;
  }
  // ssr mock dep
  var mockDep = {
      notify: noop,
      depend: noop,
      addSub: noop,
      removeSub: noop
  };
  /**
   * Observer class that is attached to each observed
   * object. Once attached, the observer converts the target
   * object's property keys into getter/setters that
   * collect dependencies and dispatch updates.
   */
  var Observer = /** @class */ (function () {
      function Observer(value, shallow, mock) {
          if (shallow === void 0) { shallow = false; }
          if (mock === void 0) { mock = false; }
          this.value = value;
          this.shallow = shallow;
          this.mock = mock;
          // this.value = value
          this.dep = mock ? mockDep : new Dep();
          this.vmCount = 0;
          def(value, '__ob__', this);
          if (isArray(value)) {
              if (!mock) {
                  if (hasProto) {
                      value.__proto__ = arrayMethods;
                      /* eslint-enable no-proto */
                  }
                  else {
                      for (var i = 0, l = arrayKeys.length; i < l; i++) {
                          var key = arrayKeys[i];
                          def(value, key, arrayMethods[key]);
                      }
                  }
              }
              if (!shallow) {
                  this.observeArray(value);
              }
          }
          else {
              /**
               * Walk through all properties and convert them into
               * getter/setters. This method should only be called when
               * value type is Object.
               */
              var keys = Object.keys(value);
              for (var i = 0; i < keys.length; i++) {
                  var key = keys[i];
                  defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
              }
          }
      }
      /**
       * Observe a list of Array items.
       */
      Observer.prototype.observeArray = function (value) {
          for (var i = 0, l = value.length; i < l; i++) {
              observe(value[i], false, this.mock);
          }
      };
      return Observer;
  }());
  // helpers
  /**
   * Attempt to create an observer instance for a value,
   * returns the new observer if successfully observed,
   * or the existing observer if the value already has one.
   */
  function observe(value, shallow, ssrMockReactivity) {
      if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
          return value.__ob__;
      }
      if (shouldObserve &&
          (ssrMockReactivity || !isServerRendering()) &&
          (isArray(value) || isPlainObject(value)) &&
          Object.isExtensible(value) &&
          !value.__v_skip /* ReactiveFlags.SKIP */ &&
          !isRef(value) &&
          !(value instanceof VNode)) {
          return new Observer(value, shallow, ssrMockReactivity);
      }
  }
  /**
   * Define a reactive property on an Object.
   */
  function defineReactive(obj, key, val, customSetter, shallow, mock) {
      var dep = new Dep();
      var property = Object.getOwnPropertyDescriptor(obj, key);
      if (property && property.configurable === false) {
          return;
      }
      // cater for pre-defined getter/setters
      var getter = property && property.get;
      var setter = property && property.set;
      if ((!getter || setter) &&
          (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
          val = obj[key];
      }
      var childOb = !shallow && observe(val, false, mock);
      Object.defineProperty(obj, key, {
          enumerable: true,
          configurable: true,
          get: function reactiveGetter() {
              var value = getter ? getter.call(obj) : val;
              if (Dep.target) {
                  {
                      dep.depend({
                          target: obj,
                          type: "get" /* TrackOpTypes.GET */,
                          key: key
                      });
                  }
                  if (childOb) {
                      childOb.dep.depend();
                      if (isArray(value)) {
                          dependArray(value);
                      }
                  }
              }
              return isRef(value) && !shallow ? value.value : value;
          },
          set: function reactiveSetter(newVal) {
              var value = getter ? getter.call(obj) : val;
              if (!hasChanged(value, newVal)) {
                  return;
              }
              if (customSetter) {
                  customSetter();
              }
              if (setter) {
                  setter.call(obj, newVal);
              }
              else if (getter) {
                  // #7981: for accessor properties without setter
                  return;
              }
              else if (!shallow && isRef(value) && !isRef(newVal)) {
                  value.value = newVal;
                  return;
              }
              else {
                  val = newVal;
              }
              childOb = !shallow && observe(newVal, false, mock);
              {
                  dep.notify({
                      type: "set" /* TriggerOpTypes.SET */,
                      target: obj,
                      key: key,
                      newValue: newVal,
                      oldValue: value
                  });
              }
          }
      });
      return dep;
  }
  function set(target, key, val) {
      if ((isUndef(target) || isPrimitive(target))) {
          warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target));
      }
      if (isReadonly(target)) {
          warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
          return;
      }
      var ob = target.__ob__;
      if (isArray(target) && isValidArrayIndex(key)) {
          target.length = Math.max(target.length, key);
          target.splice(key, 1, val);
          // when mocking for SSR, array methods are not hijacked
          if (ob && !ob.shallow && ob.mock) {
              observe(val, false, true);
          }
          return val;
      }
      if (key in target && !(key in Object.prototype)) {
          target[key] = val;
          return val;
      }
      if (target._isVue || (ob && ob.vmCount)) {
          warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +
                  'at runtime - declare it upfront in the data option.');
          return val;
      }
      if (!ob) {
          target[key] = val;
          return val;
      }
      defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
      {
          ob.dep.notify({
              type: "add" /* TriggerOpTypes.ADD */,
              target: target,
              key: key,
              newValue: val,
              oldValue: undefined
          });
      }
      return val;
  }
  function del(target, key) {
      if ((isUndef(target) || isPrimitive(target))) {
          warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target));
      }
      if (isArray(target) && isValidArrayIndex(key)) {
          target.splice(key, 1);
          return;
      }
      var ob = target.__ob__;
      if (target._isVue || (ob && ob.vmCount)) {
          warn$2('Avoid deleting properties on a Vue instance or its root $data ' +
                  '- just set it to null.');
          return;
      }
      if (isReadonly(target)) {
          warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly."));
          return;
      }
      if (!hasOwn(target, key)) {
          return;
      }
      delete target[key];
      if (!ob) {
          return;
      }
      {
          ob.dep.notify({
              type: "delete" /* TriggerOpTypes.DELETE */,
              target: target,
              key: key
          });
      }
  }
  /**
   * Collect dependencies on array elements when the array is touched, since
   * we cannot intercept array element access like property getters.
   */
  function dependArray(value) {
      for (var e = void 0, i = 0, l = value.length; i < l; i++) {
          e = value[i];
          if (e && e.__ob__) {
              e.__ob__.dep.depend();
          }
          if (isArray(e)) {
              dependArray(e);
          }
      }
  }

  function reactive(target) {
      makeReactive(target, false);
      return target;
  }
  /**
   * Return a shallowly-reactive copy of the original object, where only the root
   * level properties are reactive. It also does not auto-unwrap refs (even at the
   * root level).
   */
  function shallowReactive(target) {
      makeReactive(target, true);
      def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
      return target;
  }
  function makeReactive(target, shallow) {
      // if trying to observe a readonly proxy, return the readonly version.
      if (!isReadonly(target)) {
          {
              if (isArray(target)) {
                  warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation."));
              }
              var existingOb = target && target.__ob__;
              if (existingOb && existingOb.shallow !== shallow) {
                  warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
              }
          }
          var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
          if (!ob) {
              if (target == null || isPrimitive(target)) {
                  warn$2("value cannot be made reactive: ".concat(String(target)));
              }
              if (isCollectionType(target)) {
                  warn$2("Vue 2 does not support reactive collection types such as Map or Set.");
              }
          }
      }
  }
  function isReactive(value) {
      if (isReadonly(value)) {
          return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
      }
      return !!(value && value.__ob__);
  }
  function isShallow(value) {
      return !!(value && value.__v_isShallow);
  }
  function isReadonly(value) {
      return !!(value && value.__v_isReadonly);
  }
  function isProxy(value) {
      return isReactive(value) || isReadonly(value);
  }
  function toRaw(observed) {
      var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
      return raw ? toRaw(raw) : observed;
  }
  function markRaw(value) {
      // non-extensible objects won't be observed anyway
      if (Object.isExtensible(value)) {
          def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
      }
      return value;
  }
  /**
   * @internal
   */
  function isCollectionType(value) {
      var type = toRawType(value);
      return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
  }

  /**
   * @internal
   */
  var RefFlag = "__v_isRef";
  function isRef(r) {
      return !!(r && r.__v_isRef === true);
  }
  function ref$1(value) {
      return createRef(value, false);
  }
  function shallowRef(value) {
      return createRef(value, true);
  }
  function createRef(rawValue, shallow) {
      if (isRef(rawValue)) {
          return rawValue;
      }
      var ref = {};
      def(ref, RefFlag, true);
      def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
      def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
      return ref;
  }
  function triggerRef(ref) {
      if (!ref.dep) {
          warn$2("received object is not a triggerable ref.");
      }
      {
          ref.dep &&
              ref.dep.notify({
                  type: "set" /* TriggerOpTypes.SET */,
                  target: ref,
                  key: 'value'
              });
      }
  }
  function unref(ref) {
      return isRef(ref) ? ref.value : ref;
  }
  function proxyRefs(objectWithRefs) {
      if (isReactive(objectWithRefs)) {
          return objectWithRefs;
      }
      var proxy = {};
      var keys = Object.keys(objectWithRefs);
      for (var i = 0; i < keys.length; i++) {
          proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
      }
      return proxy;
  }
  function proxyWithRefUnwrap(target, source, key) {
      Object.defineProperty(target, key, {
          enumerable: true,
          configurable: true,
          get: function () {
              var val = source[key];
              if (isRef(val)) {
                  return val.value;
              }
              else {
                  var ob = val && val.__ob__;
                  if (ob)
                      ob.dep.depend();
                  return val;
              }
          },
          set: function (value) {
              var oldValue = source[key];
              if (isRef(oldValue) && !isRef(value)) {
                  oldValue.value = value;
              }
              else {
                  source[key] = value;
              }
          }
      });
  }
  function customRef(factory) {
      var dep = new Dep();
      var _a = factory(function () {
          {
              dep.depend({
                  target: ref,
                  type: "get" /* TrackOpTypes.GET */,
                  key: 'value'
              });
          }
      }, function () {
          {
              dep.notify({
                  target: ref,
                  type: "set" /* TriggerOpTypes.SET */,
                  key: 'value'
              });
          }
      }), get = _a.get, set = _a.set;
      var ref = {
          get value() {
              return get();
          },
          set value(newVal) {
              set(newVal);
          }
      };
      def(ref, RefFlag, true);
      return ref;
  }
  function toRefs(object) {
      if (!isReactive(object)) {
          warn$2("toRefs() expects a reactive object but received a plain one.");
      }
      var ret = isArray(object) ? new Array(object.length) : {};
      for (var key in object) {
          ret[key] = toRef(object, key);
      }
      return ret;
  }
  function toRef(object, key, defaultValue) {
      var val = object[key];
      if (isRef(val)) {
          return val;
      }
      var ref = {
          get value() {
              var val = object[key];
              return val === undefined ? defaultValue : val;
          },
          set value(newVal) {
              object[key] = newVal;
          }
      };
      def(ref, RefFlag, true);
      return ref;
  }

  var rawToReadonlyFlag = "__v_rawToReadonly";
  var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly";
  function readonly(target) {
      return createReadonly(target, false);
  }
  function createReadonly(target, shallow) {
      if (!isPlainObject(target)) {
          {
              if (isArray(target)) {
                  warn$2("Vue 2 does not support readonly arrays.");
              }
              else if (isCollectionType(target)) {
                  warn$2("Vue 2 does not support readonly collection types such as Map or Set.");
              }
              else {
                  warn$2("value cannot be made readonly: ".concat(typeof target));
              }
          }
          return target;
      }
      if (!Object.isExtensible(target)) {
          warn$2("Vue 2 does not support creating readonly proxy for non-extensible object.");
      }
      // already a readonly object
      if (isReadonly(target)) {
          return target;
      }
      // already has a readonly proxy
      var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
      var existingProxy = target[existingFlag];
      if (existingProxy) {
          return existingProxy;
      }
      var proxy = Object.create(Object.getPrototypeOf(target));
      def(target, existingFlag, proxy);
      def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
      def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
      if (isRef(target)) {
          def(proxy, RefFlag, true);
      }
      if (shallow || isShallow(target)) {
          def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
      }
      var keys = Object.keys(target);
      for (var i = 0; i < keys.length; i++) {
          defineReadonlyProperty(proxy, target, keys[i], shallow);
      }
      return proxy;
  }
  function defineReadonlyProperty(proxy, target, key, shallow) {
      Object.defineProperty(proxy, key, {
          enumerable: true,
          configurable: true,
          get: function () {
              var val = target[key];
              return shallow || !isPlainObject(val) ? val : readonly(val);
          },
          set: function () {
              warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
          }
      });
  }
  /**
   * Returns a reactive-copy of the original object, where only the root level
   * properties are readonly, and does NOT unwrap refs nor recursively convert
   * returned properties.
   * This is used for creating the props proxy object for stateful components.
   */
  function shallowReadonly(target) {
      return createReadonly(target, true);
  }

  function computed(getterOrOptions, debugOptions) {
      var getter;
      var setter;
      var onlyGetter = isFunction(getterOrOptions);
      if (onlyGetter) {
          getter = getterOrOptions;
          setter = function () {
                  warn$2('Write operation failed: computed value is readonly');
              }
              ;
      }
      else {
          getter = getterOrOptions.get;
          setter = getterOrOptions.set;
      }
      var watcher = isServerRendering()
          ? null
          : new Watcher(currentInstance, getter, noop, { lazy: true });
      if (watcher && debugOptions) {
          watcher.onTrack = debugOptions.onTrack;
          watcher.onTrigger = debugOptions.onTrigger;
      }
      var ref = {
          // some libs rely on the presence effect for checking computed refs
          // from normal refs, but the implementation doesn't matter
          effect: watcher,
          get value() {
              if (watcher) {
                  if (watcher.dirty) {
                      watcher.evaluate();
                  }
                  if (Dep.target) {
                      if (Dep.target.onTrack) {
                          Dep.target.onTrack({
                              effect: Dep.target,
                              target: ref,
                              type: "get" /* TrackOpTypes.GET */,
                              key: 'value'
                          });
                      }
                      watcher.depend();
                  }
                  return watcher.value;
              }
              else {
                  return getter();
              }
          },
          set value(newVal) {
              setter(newVal);
          }
      };
      def(ref, RefFlag, true);
      def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
      return ref;
  }

  var mark;
  var measure;
  {
      var perf_1 = inBrowser && window.performance;
      /* istanbul ignore if */
      if (perf_1 &&
          // @ts-ignore
          perf_1.mark &&
          // @ts-ignore
          perf_1.measure &&
          // @ts-ignore
          perf_1.clearMarks &&
          // @ts-ignore
          perf_1.clearMeasures) {
          mark = function (tag) { return perf_1.mark(tag); };
          measure = function (name, startTag, endTag) {
              perf_1.measure(name, startTag, endTag);
              perf_1.clearMarks(startTag);
              perf_1.clearMarks(endTag);
              // perf.clearMeasures(name)
          };
      }
  }

  var normalizeEvent = cached(function (name) {
      var passive = name.charAt(0) === '&';
      name = passive ? name.slice(1) : name;
      var once = name.charAt(0) === '~'; // Prefixed last, checked first
      name = once ? name.slice(1) : name;
      var capture = name.charAt(0) === '!';
      name = capture ? name.slice(1) : name;
      return {
          name: name,
          once: once,
          capture: capture,
          passive: passive
      };
  });
  function createFnInvoker(fns, vm) {
      function invoker() {
          var fns = invoker.fns;
          if (isArray(fns)) {
              var cloned = fns.slice();
              for (var i = 0; i < cloned.length; i++) {
                  invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler");
              }
          }
          else {
              // return handler return value for single handlers
              return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
          }
      }
      invoker.fns = fns;
      return invoker;
  }
  function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
      var name, cur, old, event;
      for (name in on) {
          cur = on[name];
          old = oldOn[name];
          event = normalizeEvent(name);
          if (isUndef(cur)) {
              warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm);
          }
          else if (isUndef(old)) {
              if (isUndef(cur.fns)) {
                  cur = on[name] = createFnInvoker(cur, vm);
              }
              if (isTrue(event.once)) {
                  cur = on[name] = createOnceHandler(event.name, cur, event.capture);
              }
              add(event.name, cur, event.capture, event.passive, event.params);
          }
          else if (cur !== old) {
              old.fns = cur;
              on[name] = old;
          }
      }
      for (name in oldOn) {
          if (isUndef(on[name])) {
              event = normalizeEvent(name);
              remove(event.name, oldOn[name], event.capture);
          }
      }
  }

  function mergeVNodeHook(def, hookKey, hook) {
      if (def instanceof VNode) {
          def = def.data.hook || (def.data.hook = {});
      }
      var invoker;
      var oldHook = def[hookKey];
      function wrappedHook() {
          hook.apply(this, arguments);
          // important: remove merged hook to ensure it's called only once
          // and prevent memory leak
          remove$2(invoker.fns, wrappedHook);
      }
      if (isUndef(oldHook)) {
          // no existing hook
          invoker = createFnInvoker([wrappedHook]);
      }
      else {
          /* istanbul ignore if */
          if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
              // already a merged invoker
              invoker = oldHook;
              invoker.fns.push(wrappedHook);
          }
          else {
              // existing plain hook
              invoker = createFnInvoker([oldHook, wrappedHook]);
          }
      }
      invoker.merged = true;
      def[hookKey] = invoker;
  }

  function extractPropsFromVNodeData(data, Ctor, tag) {
      // we are only extracting raw values here.
      // validation and default values are handled in the child
      // component itself.
      var propOptions = Ctor.options.props;
      if (isUndef(propOptions)) {
          return;
      }
      var res = {};
      var attrs = data.attrs, props = data.props;
      if (isDef(attrs) || isDef(props)) {
          for (var key in propOptions) {
              var altKey = hyphenate(key);
              {
                  var keyInLowerCase = key.toLowerCase();
                  if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
                      tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") +
                          "".concat(formatComponentName(
                          // @ts-expect-error tag is string
                          tag || Ctor), ", but the declared prop name is") +
                          " \"".concat(key, "\". ") +
                          "Note that HTML attributes are case-insensitive and camelCased " +
                          "props need to use their kebab-case equivalents when using in-DOM " +
                          "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\"."));
                  }
              }
              checkProp(res, props, key, altKey, true) ||
                  checkProp(res, attrs, key, altKey, false);
          }
      }
      return res;
  }
  function checkProp(res, hash, key, altKey, preserve) {
      if (isDef(hash)) {
          if (hasOwn(hash, key)) {
              res[key] = hash[key];
              if (!preserve) {
                  delete hash[key];
              }
              return true;
          }
          else if (hasOwn(hash, altKey)) {
              res[key] = hash[altKey];
              if (!preserve) {
                  delete hash[altKey];
              }
              return true;
          }
      }
      return false;
  }

  // The template compiler attempts to minimize the need for normalization by
  // statically analyzing the template at compile time.
  //
  // For plain HTML markup, normalization can be completely skipped because the
  // generated render function is guaranteed to return Array<VNode>. There are
  // two cases where extra normalization is needed:
  // 1. When the children contains components - because a functional component
  // may return an Array instead of a single root. In this case, just a simple
  // normalization is needed - if any child is an Array, we flatten the whole
  // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
  // because functional components already normalize their own children.
  function simpleNormalizeChildren(children) {
      for (var i = 0; i < children.length; i++) {
          if (isArray(children[i])) {
              return Array.prototype.concat.apply([], children);
          }
      }
      return children;
  }
  // 2. When the children contains constructs that always generated nested Arrays,
  // e.g. <template>, <slot>, v-for, or when the children is provided by user
  // with hand-written render functions / JSX. In such cases a full normalization
  // is needed to cater to all possible types of children values.
  function normalizeChildren(children) {
      return isPrimitive(children)
          ? [createTextVNode(children)]
          : isArray(children)
              ? normalizeArrayChildren(children)
              : undefined;
  }
  function isTextNode(node) {
      return isDef(node) && isDef(node.text) && isFalse(node.isComment);
  }
  function normalizeArrayChildren(children, nestedIndex) {
      var res = [];
      var i, c, lastIndex, last;
      for (i = 0; i < children.length; i++) {
          c = children[i];
          if (isUndef(c) || typeof c === 'boolean')
              continue;
          lastIndex = res.length - 1;
          last = res[lastIndex];
          //  nested
          if (isArray(c)) {
              if (c.length > 0) {
                  c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i));
                  // merge adjacent text nodes
                  if (isTextNode(c[0]) && isTextNode(last)) {
                      res[lastIndex] = createTextVNode(last.text + c[0].text);
                      c.shift();
                  }
                  res.push.apply(res, c);
              }
          }
          else if (isPrimitive(c)) {
              if (isTextNode(last)) {
                  // merge adjacent text nodes
                  // this is necessary for SSR hydration because text nodes are
                  // essentially merged when rendered to HTML strings
                  res[lastIndex] = createTextVNode(last.text + c);
              }
              else if (c !== '') {
                  // convert primitive to vnode
                  res.push(createTextVNode(c));
              }
          }
          else {
              if (isTextNode(c) && isTextNode(last)) {
                  // merge adjacent text nodes
                  res[lastIndex] = createTextVNode(last.text + c.text);
              }
              else {
                  // default key for nested array children (likely generated by v-for)
                  if (isTrue(children._isVList) &&
                      isDef(c.tag) &&
                      isUndef(c.key) &&
                      isDef(nestedIndex)) {
                      c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__");
                  }
                  res.push(c);
              }
          }
      }
      return res;
  }

  var SIMPLE_NORMALIZE = 1;
  var ALWAYS_NORMALIZE = 2;
  // wrapper function for providing a more flexible interface
  // without getting yelled at by flow
  function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
      if (isArray(data) || isPrimitive(data)) {
          normalizationType = children;
          children = data;
          data = undefined;
      }
      if (isTrue(alwaysNormalize)) {
          normalizationType = ALWAYS_NORMALIZE;
      }
      return _createElement(context, tag, data, children, normalizationType);
  }
  function _createElement(context, tag, data, children, normalizationType) {
      if (isDef(data) && isDef(data.__ob__)) {
          warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context);
          return createEmptyVNode();
      }
      // object syntax in v-bind
      if (isDef(data) && isDef(data.is)) {
          tag = data.is;
      }
      if (!tag) {
          // in case of component :is set to falsy value
          return createEmptyVNode();
      }
      // warn against non-primitive key
      if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
          warn$2('Avoid using non-primitive value as key, ' +
              'use string/number value instead.', context);
      }
      // support single function children as default scoped slot
      if (isArray(children) && isFunction(children[0])) {
          data = data || {};
          data.scopedSlots = { default: children[0] };
          children.length = 0;
      }
      if (normalizationType === ALWAYS_NORMALIZE) {
          children = normalizeChildren(children);
      }
      else if (normalizationType === SIMPLE_NORMALIZE) {
          children = simpleNormalizeChildren(children);
      }
      var vnode, ns;
      if (typeof tag === 'string') {
          var Ctor = void 0;
          ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
          if (config.isReservedTag(tag)) {
              // platform built-in elements
              if (isDef(data) &&
                  isDef(data.nativeOn) &&
                  data.tag !== 'component') {
                  warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context);
              }
              vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
          }
          else if ((!data || !data.pre) &&
              isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
              // component
              vnode = createComponent(Ctor, data, context, children, tag);
          }
          else {
              // unknown or unlisted namespaced elements
              // check at runtime because it may get assigned a namespace when its
              // parent normalizes children
              vnode = new VNode(tag, data, children, undefined, undefined, context);
          }
      }
      else {
          // direct component options / constructor
          vnode = createComponent(tag, data, context, children);
      }
      if (isArray(vnode)) {
          return vnode;
      }
      else if (isDef(vnode)) {
          if (isDef(ns))
              applyNS(vnode, ns);
          if (isDef(data))
              registerDeepBindings(data);
          return vnode;
      }
      else {
          return createEmptyVNode();
      }
  }
  function applyNS(vnode, ns, force) {
      vnode.ns = ns;
      if (vnode.tag === 'foreignObject') {
          // use default namespace inside foreignObject
          ns = undefined;
          force = true;
      }
      if (isDef(vnode.children)) {
          for (var i = 0, l = vnode.children.length; i < l; i++) {
              var child = vnode.children[i];
              if (isDef(child.tag) &&
                  (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
                  applyNS(child, ns, force);
              }
          }
      }
  }
  // ref #5318
  // necessary to ensure parent re-render when deep bindings like :style and
  // :class are used on slot nodes
  function registerDeepBindings(data) {
      if (isObject(data.style)) {
          traverse(data.style);
      }
      if (isObject(data.class)) {
          traverse(data.class);
      }
  }

  /**
   * Runtime helper for rendering v-for lists.
   */
  function renderList(val, render) {
      var ret = null, i, l, keys, key;
      if (isArray(val) || typeof val === 'string') {
          ret = new Array(val.length);
          for (i = 0, l = val.length; i < l; i++) {
              ret[i] = render(val[i], i);
          }
      }
      else if (typeof val === 'number') {
          ret = new Array(val);
          for (i = 0; i < val; i++) {
              ret[i] = render(i + 1, i);
          }
      }
      else if (isObject(val)) {
          if (hasSymbol && val[Symbol.iterator]) {
              ret = [];
              var iterator = val[Symbol.iterator]();
              var result = iterator.next();
              while (!result.done) {
                  ret.push(render(result.value, ret.length));
                  result = iterator.next();
              }
          }
          else {
              keys = Object.keys(val);
              ret = new Array(keys.length);
              for (i = 0, l = keys.length; i < l; i++) {
                  key = keys[i];
                  ret[i] = render(val[key], key, i);
              }
          }
      }
      if (!isDef(ret)) {
          ret = [];
      }
      ret._isVList = true;
      return ret;
  }

  /**
   * Runtime helper for rendering <slot>
   */
  function renderSlot(name, fallbackRender, props, bindObject) {
      var scopedSlotFn = this.$scopedSlots[name];
      var nodes;
      if (scopedSlotFn) {
          // scoped slot
          props = props || {};
          if (bindObject) {
              if (!isObject(bindObject)) {
                  warn$2('slot v-bind without argument expects an Object', this);
              }
              props = extend(extend({}, bindObject), props);
          }
          nodes =
              scopedSlotFn(props) ||
                  (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
      }
      else {
          nodes =
              this.$slots[name] ||
                  (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
      }
      var target = props && props.slot;
      if (target) {
          return this.$createElement('template', { slot: target }, nodes);
      }
      else {
          return nodes;
      }
  }

  /**
   * Runtime helper for resolving filters
   */
  function resolveFilter(id) {
      return resolveAsset(this.$options, 'filters', id, true) || identity;
  }

  function isKeyNotMatch(expect, actual) {
      if (isArray(expect)) {
          return expect.indexOf(actual) === -1;
      }
      else {
          return expect !== actual;
      }
  }
  /**
   * Runtime helper for checking keyCodes from config.
   * exposed as Vue.prototype._k
   * passing in eventKeyName as last argument separately for backwards compat
   */
  function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
      var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
      if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
          return isKeyNotMatch(builtInKeyName, eventKeyName);
      }
      else if (mappedKeyCode) {
          return isKeyNotMatch(mappedKeyCode, eventKeyCode);
      }
      else if (eventKeyName) {
          return hyphenate(eventKeyName) !== key;
      }
      return eventKeyCode === undefined;
  }

  /**
   * Runtime helper for merging v-bind="object" into a VNode's data.
   */
  function bindObjectProps(data, tag, value, asProp, isSync) {
      if (value) {
          if (!isObject(value)) {
              warn$2('v-bind without argument expects an Object or Array value', this);
          }
          else {
              if (isArray(value)) {
                  value = toObject(value);
              }
              var hash = void 0;
              var _loop_1 = function (key) {
                  if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
                      hash = data;
                  }
                  else {
                      var type = data.attrs && data.attrs.type;
                      hash =
                          asProp || config.mustUseProp(tag, type, key)
                              ? data.domProps || (data.domProps = {})
                              : data.attrs || (data.attrs = {});
                  }
                  var camelizedKey = camelize(key);
                  var hyphenatedKey = hyphenate(key);
                  if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
                      hash[key] = value[key];
                      if (isSync) {
                          var on = data.on || (data.on = {});
                          on["update:".concat(key)] = function ($event) {
                              value[key] = $event;
                          };
                      }
                  }
              };
              for (var key in value) {
                  _loop_1(key);
              }
          }
      }
      return data;
  }

  /**
   * Runtime helper for rendering static trees.
   */
  function renderStatic(index, isInFor) {
      var cached = this._staticTrees || (this._staticTrees = []);
      var tree = cached[index];
      // if has already-rendered static tree and not inside v-for,
      // we can reuse the same tree.
      if (tree && !isInFor) {
          return tree;
      }
      // otherwise, render a fresh tree.
      tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
      );
      markStatic$1(tree, "__static__".concat(index), false);
      return tree;
  }
  /**
   * Runtime helper for v-once.
   * Effectively it means marking the node as static with a unique key.
   */
  function markOnce(tree, index, key) {
      markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true);
      return tree;
  }
  function markStatic$1(tree, key, isOnce) {
      if (isArray(tree)) {
          for (var i = 0; i < tree.length; i++) {
              if (tree[i] && typeof tree[i] !== 'string') {
                  markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce);
              }
          }
      }
      else {
          markStaticNode(tree, key, isOnce);
      }
  }
  function markStaticNode(node, key, isOnce) {
      node.isStatic = true;
      node.key = key;
      node.isOnce = isOnce;
  }

  function bindObjectListeners(data, value) {
      if (value) {
          if (!isPlainObject(value)) {
              warn$2('v-on without argument expects an Object value', this);
          }
          else {
              var on = (data.on = data.on ? extend({}, data.on) : {});
              for (var key in value) {
                  var existing = on[key];
                  var ours = value[key];
                  on[key] = existing ? [].concat(existing, ours) : ours;
              }
          }
      }
      return data;
  }

  function resolveScopedSlots(fns, res, 
  // the following are added in 2.6
  hasDynamicKeys, contentHashKey) {
      res = res || { $stable: !hasDynamicKeys };
      for (var i = 0; i < fns.length; i++) {
          var slot = fns[i];
          if (isArray(slot)) {
              resolveScopedSlots(slot, res, hasDynamicKeys);
          }
          else if (slot) {
              // marker for reverse proxying v-slot without scope on this.$slots
              // @ts-expect-error
              if (slot.proxy) {
                  // @ts-expect-error
                  slot.fn.proxy = true;
              }
              res[slot.key] = slot.fn;
          }
      }
      if (contentHashKey) {
          res.$key = contentHashKey;
      }
      return res;
  }

  // helper to process dynamic keys for dynamic arguments in v-bind and v-on.
  function bindDynamicKeys(baseObj, values) {
      for (var i = 0; i < values.length; i += 2) {
          var key = values[i];
          if (typeof key === 'string' && key) {
              baseObj[values[i]] = values[i + 1];
          }
          else if (key !== '' && key !== null) {
              // null is a special value for explicitly removing a binding
              warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this);
          }
      }
      return baseObj;
  }
  // helper to dynamically append modifier runtime markers to event names.
  // ensure only append when value is already string, otherwise it will be cast
  // to string and cause the type check to miss.
  function prependModifier(value, symbol) {
      return typeof value === 'string' ? symbol + value : value;
  }

  function installRenderHelpers(target) {
      target._o = markOnce;
      target._n = toNumber;
      target._s = toString;
      target._l = renderList;
      target._t = renderSlot;
      target._q = looseEqual;
      target._i = looseIndexOf;
      target._m = renderStatic;
      target._f = resolveFilter;
      target._k = checkKeyCodes;
      target._b = bindObjectProps;
      target._v = createTextVNode;
      target._e = createEmptyVNode;
      target._u = resolveScopedSlots;
      target._g = bindObjectListeners;
      target._d = bindDynamicKeys;
      target._p = prependModifier;
  }

  /**
   * Runtime helper for resolving raw children VNodes into a slot object.
   */
  function resolveSlots(children, context) {
      if (!children || !children.length) {
          return {};
      }
      var slots = {};
      for (var i = 0, l = children.length; i < l; i++) {
          var child = children[i];
          var data = child.data;
          // remove slot attribute if the node is resolved as a Vue slot node
          if (data && data.attrs && data.attrs.slot) {
              delete data.attrs.slot;
          }
          // named slots should only be respected if the vnode was rendered in the
          // same context.
          if ((child.context === context || child.fnContext === context) &&
              data &&
              data.slot != null) {
              var name_1 = data.slot;
              var slot = slots[name_1] || (slots[name_1] = []);
              if (child.tag === 'template') {
                  slot.push.apply(slot, child.children || []);
              }
              else {
                  slot.push(child);
              }
          }
          else {
              (slots.default || (slots.default = [])).push(child);
          }
      }
      // ignore slots that contains only whitespace
      for (var name_2 in slots) {
          if (slots[name_2].every(isWhitespace)) {
              delete slots[name_2];
          }
      }
      return slots;
  }
  function isWhitespace(node) {
      return (node.isComment && !node.asyncFactory) || node.text === ' ';
  }

  function isAsyncPlaceholder(node) {
      // @ts-expect-error not really boolean type
      return node.isComment && node.asyncFactory;
  }

  function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
      var res;
      var hasNormalSlots = Object.keys(normalSlots).length > 0;
      var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
      var key = scopedSlots && scopedSlots.$key;
      if (!scopedSlots) {
          res = {};
      }
      else if (scopedSlots._normalized) {
          // fast path 1: child component re-render only, parent did not change
          return scopedSlots._normalized;
      }
      else if (isStable &&
          prevScopedSlots &&
          prevScopedSlots !== emptyObject &&
          key === prevScopedSlots.$key &&
          !hasNormalSlots &&
          !prevScopedSlots.$hasNormal) {
          // fast path 2: stable scoped slots w/ no normal slots to proxy,
          // only need to normalize once
          return prevScopedSlots;
      }
      else {
          res = {};
          for (var key_1 in scopedSlots) {
              if (scopedSlots[key_1] && key_1[0] !== '$') {
                  res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);
              }
          }
      }
      // expose normal slots on scopedSlots
      for (var key_2 in normalSlots) {
          if (!(key_2 in res)) {
              res[key_2] = proxyNormalSlot(normalSlots, key_2);
          }
      }
      // avoriaz seems to mock a non-extensible $scopedSlots object
      // and when that is passed down this would cause an error
      if (scopedSlots && Object.isExtensible(scopedSlots)) {
          scopedSlots._normalized = res;
      }
      def(res, '$stable', isStable);
      def(res, '$key', key);
      def(res, '$hasNormal', hasNormalSlots);
      return res;
  }
  function normalizeScopedSlot(vm, normalSlots, key, fn) {
      var normalized = function () {
          var cur = currentInstance;
          setCurrentInstance(vm);
          var res = arguments.length ? fn.apply(null, arguments) : fn({});
          res =
              res && typeof res === 'object' && !isArray(res)
                  ? [res] // single vnode
                  : normalizeChildren(res);
          var vnode = res && res[0];
          setCurrentInstance(cur);
          return res &&
              (!vnode ||
                  (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
              ? undefined
              : res;
      };
      // this is a slot using the new v-slot syntax without scope. although it is
      // compiled as a scoped slot, render fn users would expect it to be present
      // on this.$slots because the usage is semantically a normal slot.
      if (fn.proxy) {
          Object.defineProperty(normalSlots, key, {
              get: normalized,
              enumerable: true,
              configurable: true
          });
      }
      return normalized;
  }
  function proxyNormalSlot(slots, key) {
      return function () { return slots[key]; };
  }

  function initSetup(vm) {
      var options = vm.$options;
      var setup = options.setup;
      if (setup) {
          var ctx = (vm._setupContext = createSetupContext(vm));
          setCurrentInstance(vm);
          pushTarget();
          var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup");
          popTarget();
          setCurrentInstance();
          if (isFunction(setupResult)) {
              // render function
              // @ts-ignore
              options.render = setupResult;
          }
          else if (isObject(setupResult)) {
              // bindings
              if (setupResult instanceof VNode) {
                  warn$2("setup() should not return VNodes directly - " +
                      "return a render function instead.");
              }
              vm._setupState = setupResult;
              // __sfc indicates compiled bindings from <script setup>
              if (!setupResult.__sfc) {
                  for (var key in setupResult) {
                      if (!isReserved(key)) {
                          proxyWithRefUnwrap(vm, setupResult, key);
                      }
                      else {
                          warn$2("Avoid using variables that start with _ or $ in setup().");
                      }
                  }
              }
              else {
                  // exposed for compiled render fn
                  var proxy = (vm._setupProxy = {});
                  for (var key in setupResult) {
                      if (key !== '__sfc') {
                          proxyWithRefUnwrap(proxy, setupResult, key);
                      }
                  }
              }
          }
          else if (setupResult !== undefined) {
              warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult));
          }
      }
  }
  function createSetupContext(vm) {
      var exposeCalled = false;
      return {
          get attrs() {
              if (!vm._attrsProxy) {
                  var proxy = (vm._attrsProxy = {});
                  def(proxy, '_v_attr_proxy', true);
                  syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
              }
              return vm._attrsProxy;
          },
          get listeners() {
              if (!vm._listenersProxy) {
                  var proxy = (vm._listenersProxy = {});
                  syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
              }
              return vm._listenersProxy;
          },
          get slots() {
              return initSlotsProxy(vm);
          },
          emit: bind$1(vm.$emit, vm),
          expose: function (exposed) {
              {
                  if (exposeCalled) {
                      warn$2("expose() should be called only once per setup().", vm);
                  }
                  exposeCalled = true;
              }
              if (exposed) {
                  Object.keys(exposed).forEach(function (key) {
                      return proxyWithRefUnwrap(vm, exposed, key);
                  });
              }
          }
      };
  }
  function syncSetupProxy(to, from, prev, instance, type) {
      var changed = false;
      for (var key in from) {
          if (!(key in to)) {
              changed = true;
              defineProxyAttr(to, key, instance, type);
          }
          else if (from[key] !== prev[key]) {
              changed = true;
          }
      }
      for (var key in to) {
          if (!(key in from)) {
              changed = true;
              delete to[key];
          }
      }
      return changed;
  }
  function defineProxyAttr(proxy, key, instance, type) {
      Object.defineProperty(proxy, key, {
          enumerable: true,
          configurable: true,
          get: function () {
              return instance[type][key];
          }
      });
  }
  function initSlotsProxy(vm) {
      if (!vm._slotsProxy) {
          syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
      }
      return vm._slotsProxy;
  }
  function syncSetupSlots(to, from) {
      for (var key in from) {
          to[key] = from[key];
      }
      for (var key in to) {
          if (!(key in from)) {
              delete to[key];
          }
      }
  }
  /**
   * @internal use manual type def because public setup context type relies on
   * legacy VNode types
   */
  function useSlots() {
      return getContext().slots;
  }
  /**
   * @internal use manual type def because public setup context type relies on
   * legacy VNode types
   */
  function useAttrs() {
      return getContext().attrs;
  }
  /**
   * Vue 2 only
   * @internal use manual type def because public setup context type relies on
   * legacy VNode types
   */
  function useListeners() {
      return getContext().listeners;
  }
  function getContext() {
      if (!currentInstance) {
          warn$2("useContext() called without active instance.");
      }
      var vm = currentInstance;
      return vm._setupContext || (vm._setupContext = createSetupContext(vm));
  }
  /**
   * Runtime helper for merging default declarations. Imported by compiled code
   * only.
   * @internal
   */
  function mergeDefaults(raw, defaults) {
      var props = isArray(raw)
          ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})
          : raw;
      for (var key in defaults) {
          var opt = props[key];
          if (opt) {
              if (isArray(opt) || isFunction(opt)) {
                  props[key] = { type: opt, default: defaults[key] };
              }
              else {
                  opt.default = defaults[key];
              }
          }
          else if (opt === null) {
              props[key] = { default: defaults[key] };
          }
          else {
              warn$2("props default key \"".concat(key, "\" has no corresponding declaration."));
          }
      }
      return props;
  }

  function initRender(vm) {
      vm._vnode = null; // the root of the child tree
      vm._staticTrees = null; // v-once cached trees
      var options = vm.$options;
      var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
      var renderContext = parentVnode && parentVnode.context;
      vm.$slots = resolveSlots(options._renderChildren, renderContext);
      vm.$scopedSlots = parentVnode
          ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
          : emptyObject;
      // bind the createElement fn to this instance
      // so that we get proper render context inside it.
      // args order: tag, data, children, normalizationType, alwaysNormalize
      // internal version is used by render functions compiled from templates
      // @ts-expect-error
      vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };
      // normalization is always applied for the public version, used in
      // user-written render functions.
      // @ts-expect-error
      vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };
      // $attrs & $listeners are exposed for easier HOC creation.
      // they need to be reactive so that HOCs using them are always updated
      var parentData = parentVnode && parentVnode.data;
      /* istanbul ignore else */
      {
          defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {
              !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm);
          }, true);
          defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
              !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm);
          }, true);
      }
  }
  var currentRenderingInstance = null;
  function renderMixin(Vue) {
      // install runtime convenience helpers
      installRenderHelpers(Vue.prototype);
      Vue.prototype.$nextTick = function (fn) {
          return nextTick(fn, this);
      };
      Vue.prototype._render = function () {
          var vm = this;
          var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;
          if (_parentVnode && vm._isMounted) {
              vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
              if (vm._slotsProxy) {
                  syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
              }
          }
          // set parent vnode. this allows render functions to have access
          // to the data on the placeholder node.
          vm.$vnode = _parentVnode;
          // render self
          var vnode;
          try {
              // There's no need to maintain a stack because all render fns are called
              // separately from one another. Nested component's render fns are called
              // when parent component is patched.
              setCurrentInstance(vm);
              currentRenderingInstance = vm;
              vnode = render.call(vm._renderProxy, vm.$createElement);
          }
          catch (e) {
              handleError(e, vm, "render");
              // return error render result,
              // or previous vnode to prevent render error causing blank component
              /* istanbul ignore else */
              if (vm.$options.renderError) {
                  try {
                      vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
                  }
                  catch (e) {
                      handleError(e, vm, "renderError");
                      vnode = vm._vnode;
                  }
              }
              else {
                  vnode = vm._vnode;
              }
          }
          finally {
              currentRenderingInstance = null;
              setCurrentInstance();
          }
          // if the returned array contains only a single node, allow it
          if (isArray(vnode) && vnode.length === 1) {
              vnode = vnode[0];
          }
          // return empty vnode in case the render function errored out
          if (!(vnode instanceof VNode)) {
              if (isArray(vnode)) {
                  warn$2('Multiple root nodes returned from render function. Render function ' +
                      'should return a single root node.', vm);
              }
              vnode = createEmptyVNode();
          }
          // set parent
          vnode.parent = _parentVnode;
          return vnode;
      };
  }

  function ensureCtor(comp, base) {
      if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
          comp = comp.default;
      }
      return isObject(comp) ? base.extend(comp) : comp;
  }
  function createAsyncPlaceholder(factory, data, context, children, tag) {
      var node = createEmptyVNode();
      node.asyncFactory = factory;
      node.asyncMeta = { data: data, context: context, children: children, tag: tag };
      return node;
  }
  function resolveAsyncComponent(factory, baseCtor) {
      if (isTrue(factory.error) && isDef(factory.errorComp)) {
          return factory.errorComp;
      }
      if (isDef(factory.resolved)) {
          return factory.resolved;
      }
      var owner = currentRenderingInstance;
      if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
          // already pending
          factory.owners.push(owner);
      }
      if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
          return factory.loadingComp;
      }
      if (owner && !isDef(factory.owners)) {
          var owners_1 = (factory.owners = [owner]);
          var sync_1 = true;
          var timerLoading_1 = null;
          var timerTimeout_1 = null;
          owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });
          var forceRender_1 = function (renderCompleted) {
              for (var i = 0, l = owners_1.length; i < l; i++) {
                  owners_1[i].$forceUpdate();
              }
              if (renderCompleted) {
                  owners_1.length = 0;
                  if (timerLoading_1 !== null) {
                      clearTimeout(timerLoading_1);
                      timerLoading_1 = null;
                  }
                  if (timerTimeout_1 !== null) {
                      clearTimeout(timerTimeout_1);
                      timerTimeout_1 = null;
                  }
              }
          };
          var resolve = once(function (res) {
              // cache resolved
              factory.resolved = ensureCtor(res, baseCtor);
              // invoke callbacks only if this is not a synchronous resolve
              // (async resolves are shimmed as synchronous during SSR)
              if (!sync_1) {
                  forceRender_1(true);
              }
              else {
                  owners_1.length = 0;
              }
          });
          var reject_1 = once(function (reason) {
              warn$2("Failed to resolve async component: ".concat(String(factory)) +
                      (reason ? "\nReason: ".concat(reason) : ''));
              if (isDef(factory.errorComp)) {
                  factory.error = true;
                  forceRender_1(true);
              }
          });
          var res_1 = factory(resolve, reject_1);
          if (isObject(res_1)) {
              if (isPromise(res_1)) {
                  // () => Promise
                  if (isUndef(factory.resolved)) {
                      res_1.then(resolve, reject_1);
                  }
              }
              else if (isPromise(res_1.component)) {
                  res_1.component.then(resolve, reject_1);
                  if (isDef(res_1.error)) {
                      factory.errorComp = ensureCtor(res_1.error, baseCtor);
                  }
                  if (isDef(res_1.loading)) {
                      factory.loadingComp = ensureCtor(res_1.loading, baseCtor);
                      if (res_1.delay === 0) {
                          factory.loading = true;
                      }
                      else {
                          // @ts-expect-error NodeJS timeout type
                          timerLoading_1 = setTimeout(function () {
                              timerLoading_1 = null;
                              if (isUndef(factory.resolved) && isUndef(factory.error)) {
                                  factory.loading = true;
                                  forceRender_1(false);
                              }
                          }, res_1.delay || 200);
                      }
                  }
                  if (isDef(res_1.timeout)) {
                      // @ts-expect-error NodeJS timeout type
                      timerTimeout_1 = setTimeout(function () {
                          timerTimeout_1 = null;
                          if (isUndef(factory.resolved)) {
                              reject_1("timeout (".concat(res_1.timeout, "ms)") );
                          }
                      }, res_1.timeout);
                  }
              }
          }
          sync_1 = false;
          // return in case resolved synchronously
          return factory.loading ? factory.loadingComp : factory.resolved;
      }
  }

  function getFirstComponentChild(children) {
      if (isArray(children)) {
          for (var i = 0; i < children.length; i++) {
              var c = children[i];
              if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
                  return c;
              }
          }
      }
  }

  function initEvents(vm) {
      vm._events = Object.create(null);
      vm._hasHookEvent = false;
      // init parent attached events
      var listeners = vm.$options._parentListeners;
      if (listeners) {
          updateComponentListeners(vm, listeners);
      }
  }
  var target$1;
  function add$1(event, fn) {
      target$1.$on(event, fn);
  }
  function remove$1(event, fn) {
      target$1.$off(event, fn);
  }
  function createOnceHandler$1(event, fn) {
      var _target = target$1;
      return function onceHandler() {
          var res = fn.apply(null, arguments);
          if (res !== null) {
              _target.$off(event, onceHandler);
          }
      };
  }
  function updateComponentListeners(vm, listeners, oldListeners) {
      target$1 = vm;
      updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
      target$1 = undefined;
  }
  function eventsMixin(Vue) {
      var hookRE = /^hook:/;
      Vue.prototype.$on = function (event, fn) {
          var vm = this;
          if (isArray(event)) {
              for (var i = 0, l = event.length; i < l; i++) {
                  vm.$on(event[i], fn);
              }
          }
          else {
              (vm._events[event] || (vm._events[event] = [])).push(fn);
              // optimize hook:event cost by using a boolean flag marked at registration
              // instead of a hash lookup
              if (hookRE.test(event)) {
                  vm._hasHookEvent = true;
              }
          }
          return vm;
      };
      Vue.prototype.$once = function (event, fn) {
          var vm = this;
          function on() {
              vm.$off(event, on);
              fn.apply(vm, arguments);
          }
          on.fn = fn;
          vm.$on(event, on);
          return vm;
      };
      Vue.prototype.$off = function (event, fn) {
          var vm = this;
          // all
          if (!arguments.length) {
              vm._events = Object.create(null);
              return vm;
          }
          // array of events
          if (isArray(event)) {
              for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {
                  vm.$off(event[i_1], fn);
              }
              return vm;
          }
          // specific event
          var cbs = vm._events[event];
          if (!cbs) {
              return vm;
          }
          if (!fn) {
              vm._events[event] = null;
              return vm;
          }
          // specific handler
          var cb;
          var i = cbs.length;
          while (i--) {
              cb = cbs[i];
              if (cb === fn || cb.fn === fn) {
                  cbs.splice(i, 1);
                  break;
              }
          }
          return vm;
      };
      Vue.prototype.$emit = function (event) {
          var vm = this;
          {
              var lowerCaseEvent = event.toLowerCase();
              if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
                  tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") +
                      "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") +
                      "Note that HTML attributes are case-insensitive and you cannot use " +
                      "v-on to listen to camelCase events when using in-DOM templates. " +
                      "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\"."));
              }
          }
          var cbs = vm._events[event];
          if (cbs) {
              cbs = cbs.length > 1 ? toArray(cbs) : cbs;
              var args = toArray(arguments, 1);
              var info = "event handler for \"".concat(event, "\"");
              for (var i = 0, l = cbs.length; i < l; i++) {
                  invokeWithErrorHandling(cbs[i], vm, args, vm, info);
              }
          }
          return vm;
      };
  }

  var activeInstance = null;
  var isUpdatingChildComponent = false;
  function setActiveInstance(vm) {
      var prevActiveInstance = activeInstance;
      activeInstance = vm;
      return function () {
          activeInstance = prevActiveInstance;
      };
  }
  function initLifecycle(vm) {
      var options = vm.$options;
      // locate first non-abstract parent
      var parent = options.parent;
      if (parent && !options.abstract) {
          while (parent.$options.abstract && parent.$parent) {
              parent = parent.$parent;
          }
          parent.$children.push(vm);
      }
      vm.$parent = parent;
      vm.$root = parent ? parent.$root : vm;
      vm.$children = [];
      vm.$refs = {};
      vm._provided = parent ? parent._provided : Object.create(null);
      vm._watcher = null;
      vm._inactive = null;
      vm._directInactive = false;
      vm._isMounted = false;
      vm._isDestroyed = false;
      vm._isBeingDestroyed = false;
  }
  function lifecycleMixin(Vue) {
      Vue.prototype._update = function (vnode, hydrating) {
          var vm = this;
          var prevEl = vm.$el;
          var prevVnode = vm._vnode;
          var restoreActiveInstance = setActiveInstance(vm);
          vm._vnode = vnode;
          // Vue.prototype.__patch__ is injected in entry points
          // based on the rendering backend used.
          if (!prevVnode) {
              // initial render
              vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
          }
          else {
              // updates
              vm.$el = vm.__patch__(prevVnode, vnode);
          }
          restoreActiveInstance();
          // update __vue__ reference
          if (prevEl) {
              prevEl.__vue__ = null;
          }
          if (vm.$el) {
              vm.$el.__vue__ = vm;
          }
          // if parent is an HOC, update its $el as well
          var wrapper = vm;
          while (wrapper &&
              wrapper.$vnode &&
              wrapper.$parent &&
              wrapper.$vnode === wrapper.$parent._vnode) {
              wrapper.$parent.$el = wrapper.$el;
              wrapper = wrapper.$parent;
          }
          // updated hook is called by the scheduler to ensure that children are
          // updated in a parent's updated hook.
      };
      Vue.prototype.$forceUpdate = function () {
          var vm = this;
          if (vm._watcher) {
              vm._watcher.update();
          }
      };
      Vue.prototype.$destroy = function () {
          var vm = this;
          if (vm._isBeingDestroyed) {
              return;
          }
          callHook$1(vm, 'beforeDestroy');
          vm._isBeingDestroyed = true;
          // remove self from parent
          var parent = vm.$parent;
          if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
              remove$2(parent.$children, vm);
          }
          // teardown scope. this includes both the render watcher and other
          // watchers created
          vm._scope.stop();
          // remove reference from data ob
          // frozen object may not have observer.
          if (vm._data.__ob__) {
              vm._data.__ob__.vmCount--;
          }
          // call the last hook...
          vm._isDestroyed = true;
          // invoke destroy hooks on current rendered tree
          vm.__patch__(vm._vnode, null);
          // fire destroyed hook
          callHook$1(vm, 'destroyed');
          // turn off all instance listeners.
          vm.$off();
          // remove __vue__ reference
          if (vm.$el) {
              vm.$el.__vue__ = null;
          }
          // release circular reference (#6759)
          if (vm.$vnode) {
              vm.$vnode.parent = null;
          }
      };
  }
  function mountComponent(vm, el, hydrating) {
      vm.$el = el;
      if (!vm.$options.render) {
          // @ts-expect-error invalid type
          vm.$options.render = createEmptyVNode;
          {
              /* istanbul ignore if */
              if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
                  vm.$options.el ||
                  el) {
                  warn$2('You are using the runtime-only build of Vue where the template ' +
                      'compiler is not available. Either pre-compile the templates into ' +
                      'render functions, or use the compiler-included build.', vm);
              }
              else {
                  warn$2('Failed to mount component: template or render function not defined.', vm);
              }
          }
      }
      callHook$1(vm, 'beforeMount');
      var updateComponent;
      /* istanbul ignore if */
      if (config.performance && mark) {
          updateComponent = function () {
              var name = vm._name;
              var id = vm._uid;
              var startTag = "vue-perf-start:".concat(id);
              var endTag = "vue-perf-end:".concat(id);
              mark(startTag);
              var vnode = vm._render();
              mark(endTag);
              measure("vue ".concat(name, " render"), startTag, endTag);
              mark(startTag);
              vm._update(vnode, hydrating);
              mark(endTag);
              measure("vue ".concat(name, " patch"), startTag, endTag);
          };
      }
      else {
          updateComponent = function () {
              vm._update(vm._render(), hydrating);
          };
      }
      var watcherOptions = {
          before: function () {
              if (vm._isMounted && !vm._isDestroyed) {
                  callHook$1(vm, 'beforeUpdate');
              }
          }
      };
      {
          watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };
          watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };
      }
      // we set this to vm._watcher inside the watcher's constructor
      // since the watcher's initial patch may call $forceUpdate (e.g. inside child
      // component's mounted hook), which relies on vm._watcher being already defined
      new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
      hydrating = false;
      // flush buffer for flush: "pre" watchers queued in setup()
      var preWatchers = vm._preWatchers;
      if (preWatchers) {
          for (var i = 0; i < preWatchers.length; i++) {
              preWatchers[i].run();
          }
      }
      // manually mounted instance, call mounted on self
      // mounted is called for render-created child components in its inserted hook
      if (vm.$vnode == null) {
          vm._isMounted = true;
          callHook$1(vm, 'mounted');
      }
      return vm;
  }
  function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
      {
          isUpdatingChildComponent = true;
      }
      // determine whether component has slot children
      // we need to do this before overwriting $options._renderChildren.
      // check if there are dynamic scopedSlots (hand-written or compiled but with
      // dynamic slot names). Static scoped slots compiled from template has the
      // "$stable" marker.
      var newScopedSlots = parentVnode.data.scopedSlots;
      var oldScopedSlots = vm.$scopedSlots;
      var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
          (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
          (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
          (!newScopedSlots && vm.$scopedSlots.$key));
      // Any static slot children from the parent may have changed during parent's
      // update. Dynamic scoped slots may also have changed. In such cases, a forced
      // update is necessary to ensure correctness.
      var needsForceUpdate = !!(renderChildren || // has new static slots
          vm.$options._renderChildren || // has old static slots
          hasDynamicScopedSlot);
      var prevVNode = vm.$vnode;
      vm.$options._parentVnode = parentVnode;
      vm.$vnode = parentVnode; // update vm's placeholder node without re-render
      if (vm._vnode) {
          // update child tree's parent
          vm._vnode.parent = parentVnode;
      }
      vm.$options._renderChildren = renderChildren;
      // update $attrs and $listeners hash
      // these are also reactive so they may trigger child update if the child
      // used them during render
      var attrs = parentVnode.data.attrs || emptyObject;
      if (vm._attrsProxy) {
          // force update if attrs are accessed and has changed since it may be
          // passed to a child component.
          if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
              needsForceUpdate = true;
          }
      }
      vm.$attrs = attrs;
      // update listeners
      listeners = listeners || emptyObject;
      var prevListeners = vm.$options._parentListeners;
      if (vm._listenersProxy) {
          syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
      }
      vm.$listeners = vm.$options._parentListeners = listeners;
      updateComponentListeners(vm, listeners, prevListeners);
      // update props
      if (propsData && vm.$options.props) {
          toggleObserving(false);
          var props = vm._props;
          var propKeys = vm.$options._propKeys || [];
          for (var i = 0; i < propKeys.length; i++) {
              var key = propKeys[i];
              var propOptions = vm.$options.props; // wtf flow?
              props[key] = validateProp(key, propOptions, propsData, vm);
          }
          toggleObserving(true);
          // keep a copy of raw propsData
          vm.$options.propsData = propsData;
      }
      // resolve slots + force update if has children
      if (needsForceUpdate) {
          vm.$slots = resolveSlots(renderChildren, parentVnode.context);
          vm.$forceUpdate();
      }
      {
          isUpdatingChildComponent = false;
      }
  }
  function isInInactiveTree(vm) {
      while (vm && (vm = vm.$parent)) {
          if (vm._inactive)
              return true;
      }
      return false;
  }
  function activateChildComponent(vm, direct) {
      if (direct) {
          vm._directInactive = false;
          if (isInInactiveTree(vm)) {
              return;
          }
      }
      else if (vm._directInactive) {
          return;
      }
      if (vm._inactive || vm._inactive === null) {
          vm._inactive = false;
          for (var i = 0; i < vm.$children.length; i++) {
              activateChildComponent(vm.$children[i]);
          }
          callHook$1(vm, 'activated');
      }
  }
  function deactivateChildComponent(vm, direct) {
      if (direct) {
          vm._directInactive = true;
          if (isInInactiveTree(vm)) {
              return;
          }
      }
      if (!vm._inactive) {
          vm._inactive = true;
          for (var i = 0; i < vm.$children.length; i++) {
              deactivateChildComponent(vm.$children[i]);
          }
          callHook$1(vm, 'deactivated');
      }
  }
  function callHook$1(vm, hook, args, setContext) {
      if (setContext === void 0) { setContext = true; }
      // #7573 disable dep collection when invoking lifecycle hooks
      pushTarget();
      var prev = currentInstance;
      setContext && setCurrentInstance(vm);
      var handlers = vm.$options[hook];
      var info = "".concat(hook, " hook");
      if (handlers) {
          for (var i = 0, j = handlers.length; i < j; i++) {
              invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
          }
      }
      if (vm._hasHookEvent) {
          vm.$emit('hook:' + hook);
      }
      setContext && setCurrentInstance(prev);
      popTarget();
  }

  var MAX_UPDATE_COUNT = 100;
  var queue = [];
  var activatedChildren = [];
  var has = {};
  var circular = {};
  var waiting = false;
  var flushing = false;
  var index$1 = 0;
  /**
   * Reset the scheduler's state.
   */
  function resetSchedulerState() {
      index$1 = queue.length = activatedChildren.length = 0;
      has = {};
      {
          circular = {};
      }
      waiting = flushing = false;
  }
  // Async edge case #6566 requires saving the timestamp when event listeners are
  // attached. However, calling performance.now() has a perf overhead especially
  // if the page has thousands of event listeners. Instead, we take a timestamp
  // every time the scheduler flushes and use that for all event listeners
  // attached during that flush.
  var currentFlushTimestamp = 0;
  // Async edge case fix requires storing an event listener's attach timestamp.
  var getNow = Date.now;
  // Determine what event timestamp the browser is using. Annoyingly, the
  // timestamp can either be hi-res (relative to page load) or low-res
  // (relative to UNIX epoch), so in order to compare time we have to use the
  // same timestamp type when saving the flush timestamp.
  // All IE versions use low-res event timestamps, and have problematic clock
  // implementations (#9632)
  if (inBrowser && !isIE) {
      var performance_1 = window.performance;
      if (performance_1 &&
          typeof performance_1.now === 'function' &&
          getNow() > document.createEvent('Event').timeStamp) {
          // if the event timestamp, although evaluated AFTER the Date.now(), is
          // smaller than it, it means the event is using a hi-res timestamp,
          // and we need to use the hi-res version for event listener timestamps as
          // well.
          getNow = function () { return performance_1.now(); };
      }
  }
  var sortCompareFn = function (a, b) {
      if (a.post) {
          if (!b.post)
              return 1;
      }
      else if (b.post) {
          return -1;
      }
      return a.id - b.id;
  };
  /**
   * Flush both queues and run the watchers.
   */
  function flushSchedulerQueue() {
      currentFlushTimestamp = getNow();
      flushing = true;
      var watcher, id;
      // Sort queue before flush.
      // This ensures that:
      // 1. Components are updated from parent to child. (because parent is always
      //    created before the child)
      // 2. A component's user watchers are run before its render watcher (because
      //    user watchers are created before the render watcher)
      // 3. If a component is destroyed during a parent component's watcher run,
      //    its watchers can be skipped.
      queue.sort(sortCompareFn);
      // do not cache length because more watchers might be pushed
      // as we run existing watchers
      for (index$1 = 0; index$1 < queue.length; index$1++) {
          watcher = queue[index$1];
          if (watcher.before) {
              watcher.before();
          }
          id = watcher.id;
          has[id] = null;
          watcher.run();
          // in dev build, check and stop circular updates.
          if (has[id] != null) {
              circular[id] = (circular[id] || 0) + 1;
              if (circular[id] > MAX_UPDATE_COUNT) {
                  warn$2('You may have an infinite update loop ' +
                      (watcher.user
                          ? "in watcher with expression \"".concat(watcher.expression, "\"")
                          : "in a component render function."), watcher.vm);
                  break;
              }
          }
      }
      // keep copies of post queues before resetting state
      var activatedQueue = activatedChildren.slice();
      var updatedQueue = queue.slice();
      resetSchedulerState();
      // call component updated and activated hooks
      callActivatedHooks(activatedQueue);
      callUpdatedHooks(updatedQueue);
      cleanupDeps();
      // devtool hook
      /* istanbul ignore if */
      if (devtools && config.devtools) {
          devtools.emit('flush');
      }
  }
  function callUpdatedHooks(queue) {
      var i = queue.length;
      while (i--) {
          var watcher = queue[i];
          var vm = watcher.vm;
          if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
              callHook$1(vm, 'updated');
          }
      }
  }
  /**
   * Queue a kept-alive component that was activated during patch.
   * The queue will be processed after the entire tree has been patched.
   */
  function queueActivatedComponent(vm) {
      // setting _inactive to false here so that a render function can
      // rely on checking whether it's in an inactive tree (e.g. router-view)
      vm._inactive = false;
      activatedChildren.push(vm);
  }
  function callActivatedHooks(queue) {
      for (var i = 0; i < queue.length; i++) {
          queue[i]._inactive = true;
          activateChildComponent(queue[i], true /* true */);
      }
  }
  /**
   * Push a watcher into the watcher queue.
   * Jobs with duplicate IDs will be skipped unless it's
   * pushed when the queue is being flushed.
   */
  function queueWatcher(watcher) {
      var id = watcher.id;
      if (has[id] != null) {
          return;
      }
      if (watcher === Dep.target && watcher.noRecurse) {
          return;
      }
      has[id] = true;
      if (!flushing) {
          queue.push(watcher);
      }
      else {
          // if already flushing, splice the watcher based on its id
          // if already past its id, it will be run next immediately.
          var i = queue.length - 1;
          while (i > index$1 && queue[i].id > watcher.id) {
              i--;
          }
          queue.splice(i + 1, 0, watcher);
      }
      // queue the flush
      if (!waiting) {
          waiting = true;
          if (!config.async) {
              flushSchedulerQueue();
              return;
          }
          nextTick(flushSchedulerQueue);
      }
  }

  var WATCHER = "watcher";
  var WATCHER_CB = "".concat(WATCHER, " callback");
  var WATCHER_GETTER = "".concat(WATCHER, " getter");
  var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup");
  // Simple effect.
  function watchEffect(effect, options) {
      return doWatch(effect, null, options);
  }
  function watchPostEffect(effect, options) {
      return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'post' }) ));
  }
  function watchSyncEffect(effect, options) {
      return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'sync' }) ));
  }
  // initial value for watchers to trigger on undefined initial values
  var INITIAL_WATCHER_VALUE = {};
  // implementation
  function watch(source, cb, options) {
      if (typeof cb !== 'function') {
          warn$2("`watch(fn, options?)` signature has been moved to a separate API. " +
              "Use `watchEffect(fn, options?)` instead. `watch` now only " +
              "supports `watch(source, cb, options?) signature.");
      }
      return doWatch(source, cb, options);
  }
  function doWatch(source, cb, _a) {
      var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;
      if (!cb) {
          if (immediate !== undefined) {
              warn$2("watch() \"immediate\" option is only respected when using the " +
                  "watch(source, callback, options?) signature.");
          }
          if (deep !== undefined) {
              warn$2("watch() \"deep\" option is only respected when using the " +
                  "watch(source, callback, options?) signature.");
          }
      }
      var warnInvalidSource = function (s) {
          warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") +
              "function, a ref, a reactive object, or an array of these types.");
      };
      var instance = currentInstance;
      var call = function (fn, type, args) {
          if (args === void 0) { args = null; }
          return invokeWithErrorHandling(fn, null, args, instance, type);
      };
      var getter;
      var forceTrigger = false;
      var isMultiSource = false;
      if (isRef(source)) {
          getter = function () { return source.value; };
          forceTrigger = isShallow(source);
      }
      else if (isReactive(source)) {
          getter = function () {
              source.__ob__.dep.depend();
              return source;
          };
          deep = true;
      }
      else if (isArray(source)) {
          isMultiSource = true;
          forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });
          getter = function () {
              return source.map(function (s) {
                  if (isRef(s)) {
                      return s.value;
                  }
                  else if (isReactive(s)) {
                      return traverse(s);
                  }
                  else if (isFunction(s)) {
                      return call(s, WATCHER_GETTER);
                  }
                  else {
                      warnInvalidSource(s);
                  }
              });
          };
      }
      else if (isFunction(source)) {
          if (cb) {
              // getter with cb
              getter = function () { return call(source, WATCHER_GETTER); };
          }
          else {
              // no cb -> simple effect
              getter = function () {
                  if (instance && instance._isDestroyed) {
                      return;
                  }
                  if (cleanup) {
                      cleanup();
                  }
                  return call(source, WATCHER, [onCleanup]);
              };
          }
      }
      else {
          getter = noop;
          warnInvalidSource(source);
      }
      if (cb && deep) {
          var baseGetter_1 = getter;
          getter = function () { return traverse(baseGetter_1()); };
      }
      var cleanup;
      var onCleanup = function (fn) {
          cleanup = watcher.onStop = function () {
              call(fn, WATCHER_CLEANUP);
          };
      };
      // in SSR there is no need to setup an actual effect, and it should be noop
      // unless it's eager
      if (isServerRendering()) {
          // we will also not call the invalidate callback (+ runner is not set up)
          onCleanup = noop;
          if (!cb) {
              getter();
          }
          else if (immediate) {
              call(cb, WATCHER_CB, [
                  getter(),
                  isMultiSource ? [] : undefined,
                  onCleanup
              ]);
          }
          return noop;
      }
      var watcher = new Watcher(currentInstance, getter, noop, {
          lazy: true
      });
      watcher.noRecurse = !cb;
      var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
      // overwrite default run
      watcher.run = function () {
          if (!watcher.active) {
              return;
          }
          if (cb) {
              // watch(source, cb)
              var newValue = watcher.get();
              if (deep ||
                  forceTrigger ||
                  (isMultiSource
                      ? newValue.some(function (v, i) {
                          return hasChanged(v, oldValue[i]);
                      })
                      : hasChanged(newValue, oldValue))) {
                  // cleanup before running cb again
                  if (cleanup) {
                      cleanup();
                  }
                  call(cb, WATCHER_CB, [
                      newValue,
                      // pass undefined as the old value when it's changed for the first time
                      oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
                      onCleanup
                  ]);
                  oldValue = newValue;
              }
          }
          else {
              // watchEffect
              watcher.get();
          }
      };
      if (flush === 'sync') {
          watcher.update = watcher.run;
      }
      else if (flush === 'post') {
          watcher.post = true;
          watcher.update = function () { return queueWatcher(watcher); };
      }
      else {
          // pre
          watcher.update = function () {
              if (instance && instance === currentInstance && !instance._isMounted) {
                  // pre-watcher triggered before
                  var buffer = instance._preWatchers || (instance._preWatchers = []);
                  if (buffer.indexOf(watcher) < 0)
                      buffer.push(watcher);
              }
              else {
                  queueWatcher(watcher);
              }
          };
      }
      {
          watcher.onTrack = onTrack;
          watcher.onTrigger = onTrigger;
      }
      // initial run
      if (cb) {
          if (immediate) {
              watcher.run();
          }
          else {
              oldValue = watcher.get();
          }
      }
      else if (flush === 'post' && instance) {
          instance.$once('hook:mounted', function () { return watcher.get(); });
      }
      else {
          watcher.get();
      }
      return function () {
          watcher.teardown();
      };
  }

  var activeEffectScope;
  var EffectScope = /** @class */ (function () {
      function EffectScope(detached) {
          if (detached === void 0) { detached = false; }
          this.detached = detached;
          /**
           * @internal
           */
          this.active = true;
          /**
           * @internal
           */
          this.effects = [];
          /**
           * @internal
           */
          this.cleanups = [];
          this.parent = activeEffectScope;
          if (!detached && activeEffectScope) {
              this.index =
                  (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
          }
      }
      EffectScope.prototype.run = function (fn) {
          if (this.active) {
              var currentEffectScope = activeEffectScope;
              try {
                  activeEffectScope = this;
                  return fn();
              }
              finally {
                  activeEffectScope = currentEffectScope;
              }
          }
          else {
              warn$2("cannot run an inactive effect scope.");
          }
      };
      /**
       * This should only be called on non-detached scopes
       * @internal
       */
      EffectScope.prototype.on = function () {
          activeEffectScope = this;
      };
      /**
       * This should only be called on non-detached scopes
       * @internal
       */
      EffectScope.prototype.off = function () {
          activeEffectScope = this.parent;
      };
      EffectScope.prototype.stop = function (fromParent) {
          if (this.active) {
              var i = void 0, l = void 0;
              for (i = 0, l = this.effects.length; i < l; i++) {
                  this.effects[i].teardown();
              }
              for (i = 0, l = this.cleanups.length; i < l; i++) {
                  this.cleanups[i]();
              }
              if (this.scopes) {
                  for (i = 0, l = this.scopes.length; i < l; i++) {
                      this.scopes[i].stop(true);
                  }
              }
              // nested scope, dereference from parent to avoid memory leaks
              if (!this.detached && this.parent && !fromParent) {
                  // optimized O(1) removal
                  var last = this.parent.scopes.pop();
                  if (last && last !== this) {
                      this.parent.scopes[this.index] = last;
                      last.index = this.index;
                  }
              }
              this.parent = undefined;
              this.active = false;
          }
      };
      return EffectScope;
  }());
  function effectScope(detached) {
      return new EffectScope(detached);
  }
  /**
   * @internal
   */
  function recordEffectScope(effect, scope) {
      if (scope === void 0) { scope = activeEffectScope; }
      if (scope && scope.active) {
          scope.effects.push(effect);
      }
  }
  function getCurrentScope() {
      return activeEffectScope;
  }
  function onScopeDispose(fn) {
      if (activeEffectScope) {
          activeEffectScope.cleanups.push(fn);
      }
      else {
          warn$2("onScopeDispose() is called when there is no active effect scope" +
              " to be associated with.");
      }
  }

  function provide(key, value) {
      if (!currentInstance) {
          {
              warn$2("provide() can only be used inside setup().");
          }
      }
      else {
          // TS doesn't allow symbol as index type
          resolveProvided(currentInstance)[key] = value;
      }
  }
  function resolveProvided(vm) {
      // by default an instance inherits its parent's provides object
      // but when it needs to provide values of its own, it creates its
      // own provides object using parent provides object as prototype.
      // this way in `inject` we can simply look up injections from direct
      // parent and let the prototype chain do the work.
      var existing = vm._provided;
      var parentProvides = vm.$parent && vm.$parent._provided;
      if (parentProvides === existing) {
          return (vm._provided = Object.create(parentProvides));
      }
      else {
          return existing;
      }
  }
  function inject(key, defaultValue, treatDefaultAsFactory) {
      if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }
      // fallback to `currentRenderingInstance` so that this can be called in
      // a functional component
      var instance = currentInstance;
      if (instance) {
          // #2400
          // to support `app.use` plugins,
          // fallback to appContext's `provides` if the instance is at root
          var provides = instance.$parent && instance.$parent._provided;
          if (provides && key in provides) {
              // TS doesn't allow symbol as index type
              return provides[key];
          }
          else if (arguments.length > 1) {
              return treatDefaultAsFactory && isFunction(defaultValue)
                  ? defaultValue.call(instance)
                  : defaultValue;
          }
          else {
              warn$2("injection \"".concat(String(key), "\" not found."));
          }
      }
      else {
          warn$2("inject() can only be used inside setup() or functional components.");
      }
  }

  /**
   * @internal this function needs manual public type declaration because it relies
   * on previously manually authored types from Vue 2
   */
  function h(type, props, children) {
      if (!currentInstance) {
          warn$2("globally imported h() can only be invoked when there is an active " +
                  "component instance, e.g. synchronously in a component's render or setup function.");
      }
      return createElement$1(currentInstance, type, props, children, 2, true);
  }

  function handleError(err, vm, info) {
      // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
      // See: https://github.com/vuejs/vuex/issues/1505
      pushTarget();
      try {
          if (vm) {
              var cur = vm;
              while ((cur = cur.$parent)) {
                  var hooks = cur.$options.errorCaptured;
                  if (hooks) {
                      for (var i = 0; i < hooks.length; i++) {
                          try {
                              var capture = hooks[i].call(cur, err, vm, info) === false;
                              if (capture)
                                  return;
                          }
                          catch (e) {
                              globalHandleError(e, cur, 'errorCaptured hook');
                          }
                      }
                  }
              }
          }
          globalHandleError(err, vm, info);
      }
      finally {
          popTarget();
      }
  }
  function invokeWithErrorHandling(handler, context, args, vm, info) {
      var res;
      try {
          res = args ? handler.apply(context, args) : handler.call(context);
          if (res && !res._isVue && isPromise(res) && !res._handled) {
              res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
              res._handled = true;
          }
      }
      catch (e) {
          handleError(e, vm, info);
      }
      return res;
  }
  function globalHandleError(err, vm, info) {
      if (config.errorHandler) {
          try {
              return config.errorHandler.call(null, err, vm, info);
          }
          catch (e) {
              // if the user intentionally throws the original error in the handler,
              // do not log it twice
              if (e !== err) {
                  logError(e, null, 'config.errorHandler');
              }
          }
      }
      logError(err, vm, info);
  }
  function logError(err, vm, info) {
      {
          warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm);
      }
      /* istanbul ignore else */
      if (inBrowser && typeof console !== 'undefined') {
          console.error(err);
      }
      else {
          throw err;
      }
  }

  /* globals MutationObserver */
  var isUsingMicroTask = false;
  var callbacks = [];
  var pending = false;
  function flushCallbacks() {
      pending = false;
      var copies = callbacks.slice(0);
      callbacks.length = 0;
      for (var i = 0; i < copies.length; i++) {
          copies[i]();
      }
  }
  // Here we have async deferring wrappers using microtasks.
  // In 2.5 we used (macro) tasks (in combination with microtasks).
  // However, it has subtle problems when state is changed right before repaint
  // (e.g. #6813, out-in transitions).
  // Also, using (macro) tasks in event handler would cause some weird behaviors
  // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
  // So we now use microtasks everywhere, again.
  // A major drawback of this tradeoff is that there are some scenarios
  // where microtasks have too high a priority and fire in between supposedly
  // sequential events (e.g. #4521, #6690, which have workarounds)
  // or even between bubbling of the same event (#6566).
  var timerFunc;
  // The nextTick behavior leverages the microtask queue, which can be accessed
  // via either native Promise.then or MutationObserver.
  // MutationObserver has wider support, however it is seriously bugged in
  // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
  // completely stops working after triggering a few times... so, if native
  // Promise is available, we will use it:
  /* istanbul ignore next, $flow-disable-line */
  if (typeof Promise !== 'undefined' && isNative(Promise)) {
      var p_1 = Promise.resolve();
      timerFunc = function () {
          p_1.then(flushCallbacks);
          // In problematic UIWebViews, Promise.then doesn't completely break, but
          // it can get stuck in a weird state where callbacks are pushed into the
          // microtask queue but the queue isn't being flushed, until the browser
          // needs to do some other work, e.g. handle a timer. Therefore we can
          // "force" the microtask queue to be flushed by adding an empty timer.
          if (isIOS)
              setTimeout(noop);
      };
      isUsingMicroTask = true;
  }
  else if (!isIE &&
      typeof MutationObserver !== 'undefined' &&
      (isNative(MutationObserver) ||
          // PhantomJS and iOS 7.x
          MutationObserver.toString() === '[object MutationObserverConstructor]')) {
      // Use MutationObserver where native Promise is not available,
      // e.g. PhantomJS, iOS7, Android 4.4
      // (#6466 MutationObserver is unreliable in IE11)
      var counter_1 = 1;
      var observer = new MutationObserver(flushCallbacks);
      var textNode_1 = document.createTextNode(String(counter_1));
      observer.observe(textNode_1, {
          characterData: true
      });
      timerFunc = function () {
          counter_1 = (counter_1 + 1) % 2;
          textNode_1.data = String(counter_1);
      };
      isUsingMicroTask = true;
  }
  else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
      // Fallback to setImmediate.
      // Technically it leverages the (macro) task queue,
      // but it is still a better choice than setTimeout.
      timerFunc = function () {
          setImmediate(flushCallbacks);
      };
  }
  else {
      // Fallback to setTimeout.
      timerFunc = function () {
          setTimeout(flushCallbacks, 0);
      };
  }
  /**
   * @internal
   */
  function nextTick(cb, ctx) {
      var _resolve;
      callbacks.push(function () {
          if (cb) {
              try {
                  cb.call(ctx);
              }
              catch (e) {
                  handleError(e, ctx, 'nextTick');
              }
          }
          else if (_resolve) {
              _resolve(ctx);
          }
      });
      if (!pending) {
          pending = true;
          timerFunc();
      }
      // $flow-disable-line
      if (!cb && typeof Promise !== 'undefined') {
          return new Promise(function (resolve) {
              _resolve = resolve;
          });
      }
  }

  function useCssModule(name) {
      /* istanbul ignore else */
      {
          {
              warn$2("useCssModule() is not supported in the global build.");
          }
          return emptyObject;
      }
  }

  /**
   * Runtime helper for SFC's CSS variable injection feature.
   * @private
   */
  function useCssVars(getter) {
      if (!inBrowser && !false)
          return;
      var instance = currentInstance;
      if (!instance) {
          warn$2("useCssVars is called without current active component instance.");
          return;
      }
      watchPostEffect(function () {
          var el = instance.$el;
          var vars = getter(instance, instance._setupProxy);
          if (el && el.nodeType === 1) {
              var style = el.style;
              for (var key in vars) {
                  style.setProperty("--".concat(key), vars[key]);
              }
          }
      });
  }

  /**
   * v3-compatible async component API.
   * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
   * because it relies on existing manual types
   */
  function defineAsyncComponent(source) {
      if (isFunction(source)) {
          source = { loader: source };
      }
      var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out
      _b = source.suspensible, // undefined = never times out
      suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true
      userOnError = source.onError;
      if (suspensible) {
          warn$2("The suspensiblbe option for async components is not supported in Vue2. It is ignored.");
      }
      var pendingRequest = null;
      var retries = 0;
      var retry = function () {
          retries++;
          pendingRequest = null;
          return load();
      };
      var load = function () {
          var thisRequest;
          return (pendingRequest ||
              (thisRequest = pendingRequest =
                  loader()
                      .catch(function (err) {
                      err = err instanceof Error ? err : new Error(String(err));
                      if (userOnError) {
                          return new Promise(function (resolve, reject) {
                              var userRetry = function () { return resolve(retry()); };
                              var userFail = function () { return reject(err); };
                              userOnError(err, userRetry, userFail, retries + 1);
                          });
                      }
                      else {
                          throw err;
                      }
                  })
                      .then(function (comp) {
                      if (thisRequest !== pendingRequest && pendingRequest) {
                          return pendingRequest;
                      }
                      if (!comp) {
                          warn$2("Async component loader resolved to undefined. " +
                              "If you are using retry(), make sure to return its return value.");
                      }
                      // interop module default
                      if (comp &&
                          (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
                          comp = comp.default;
                      }
                      if (comp && !isObject(comp) && !isFunction(comp)) {
                          throw new Error("Invalid async component load result: ".concat(comp));
                      }
                      return comp;
                  })));
      };
      return function () {
          var component = load();
          return {
              component: component,
              delay: delay,
              timeout: timeout,
              error: errorComponent,
              loading: loadingComponent
          };
      };
  }

  function createLifeCycle(hookName) {
      return function (fn, target) {
          if (target === void 0) { target = currentInstance; }
          if (!target) {
              warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") +
                      "associated with. " +
                      "Lifecycle injection APIs can only be used during execution of setup().");
              return;
          }
          return injectHook(target, hookName, fn);
      };
  }
  function formatName(name) {
      if (name === 'beforeDestroy') {
          name = 'beforeUnmount';
      }
      else if (name === 'destroyed') {
          name = 'unmounted';
      }
      return "on".concat(name[0].toUpperCase() + name.slice(1));
  }
  function injectHook(instance, hookName, fn) {
      var options = instance.$options;
      options[hookName] = mergeLifecycleHook(options[hookName], fn);
  }
  var onBeforeMount = createLifeCycle('beforeMount');
  var onMounted = createLifeCycle('mounted');
  var onBeforeUpdate = createLifeCycle('beforeUpdate');
  var onUpdated = createLifeCycle('updated');
  var onBeforeUnmount = createLifeCycle('beforeDestroy');
  var onUnmounted = createLifeCycle('destroyed');
  var onActivated = createLifeCycle('activated');
  var onDeactivated = createLifeCycle('deactivated');
  var onServerPrefetch = createLifeCycle('serverPrefetch');
  var onRenderTracked = createLifeCycle('renderTracked');
  var onRenderTriggered = createLifeCycle('renderTriggered');
  var injectErrorCapturedHook = createLifeCycle('errorCaptured');
  function onErrorCaptured(hook, target) {
      if (target === void 0) { target = currentInstance; }
      injectErrorCapturedHook(hook, target);
  }

  /**
   * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
   */
  var version = '2.7.14';
  /**
   * @internal type is manually declared in <root>/types/v3-define-component.d.ts
   */
  function defineComponent(options) {
      return options;
  }

  var vca = /*#__PURE__*/Object.freeze({
    __proto__: null,
    version: version,
    defineComponent: defineComponent,
    ref: ref$1,
    shallowRef: shallowRef,
    isRef: isRef,
    toRef: toRef,
    toRefs: toRefs,
    unref: unref,
    proxyRefs: proxyRefs,
    customRef: customRef,
    triggerRef: triggerRef,
    reactive: reactive,
    isReactive: isReactive,
    isReadonly: isReadonly,
    isShallow: isShallow,
    isProxy: isProxy,
    shallowReactive: shallowReactive,
    markRaw: markRaw,
    toRaw: toRaw,
    readonly: readonly,
    shallowReadonly: shallowReadonly,
    computed: computed,
    watch: watch,
    watchEffect: watchEffect,
    watchPostEffect: watchPostEffect,
    watchSyncEffect: watchSyncEffect,
    EffectScope: EffectScope,
    effectScope: effectScope,
    onScopeDispose: onScopeDispose,
    getCurrentScope: getCurrentScope,
    provide: provide,
    inject: inject,
    h: h,
    getCurrentInstance: getCurrentInstance,
    useSlots: useSlots,
    useAttrs: useAttrs,
    useListeners: useListeners,
    mergeDefaults: mergeDefaults,
    nextTick: nextTick,
    set: set,
    del: del,
    useCssModule: useCssModule,
    useCssVars: useCssVars,
    defineAsyncComponent: defineAsyncComponent,
    onBeforeMount: onBeforeMount,
    onMounted: onMounted,
    onBeforeUpdate: onBeforeUpdate,
    onUpdated: onUpdated,
    onBeforeUnmount: onBeforeUnmount,
    onUnmounted: onUnmounted,
    onActivated: onActivated,
    onDeactivated: onDeactivated,
    onServerPrefetch: onServerPrefetch,
    onRenderTracked: onRenderTracked,
    onRenderTriggered: onRenderTriggered,
    onErrorCaptured: onErrorCaptured
  });

  var seenObjects = new _Set();
  /**
   * Recursively traverse an object to evoke all converted
   * getters, so that every nested property inside the object
   * is collected as a "deep" dependency.
   */
  function traverse(val) {
      _traverse(val, seenObjects);
      seenObjects.clear();
      return val;
  }
  function _traverse(val, seen) {
      var i, keys;
      var isA = isArray(val);
      if ((!isA && !isObject(val)) ||
          val.__v_skip /* ReactiveFlags.SKIP */ ||
          Object.isFrozen(val) ||
          val instanceof VNode) {
          return;
      }
      if (val.__ob__) {
          var depId = val.__ob__.dep.id;
          if (seen.has(depId)) {
              return;
          }
          seen.add(depId);
      }
      if (isA) {
          i = val.length;
          while (i--)
              _traverse(val[i], seen);
      }
      else if (isRef(val)) {
          _traverse(val.value, seen);
      }
      else {
          keys = Object.keys(val);
          i = keys.length;
          while (i--)
              _traverse(val[keys[i]], seen);
      }
  }

  var uid$1 = 0;
  /**
   * A watcher parses an expression, collects dependencies,
   * and fires callback when the expression value changes.
   * This is used for both the $watch() api and directives.
   * @internal
   */
  var Watcher = /** @class */ (function () {
      function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {
          recordEffectScope(this, 
          // if the active effect scope is manually created (not a component scope),
          // prioritize it
          activeEffectScope && !activeEffectScope._vm
              ? activeEffectScope
              : vm
                  ? vm._scope
                  : undefined);
          if ((this.vm = vm) && isRenderWatcher) {
              vm._watcher = this;
          }
          // options
          if (options) {
              this.deep = !!options.deep;
              this.user = !!options.user;
              this.lazy = !!options.lazy;
              this.sync = !!options.sync;
              this.before = options.before;
              {
                  this.onTrack = options.onTrack;
                  this.onTrigger = options.onTrigger;
              }
          }
          else {
              this.deep = this.user = this.lazy = this.sync = false;
          }
          this.cb = cb;
          this.id = ++uid$1; // uid for batching
          this.active = true;
          this.post = false;
          this.dirty = this.lazy; // for lazy watchers
          this.deps = [];
          this.newDeps = [];
          this.depIds = new _Set();
          this.newDepIds = new _Set();
          this.expression = expOrFn.toString() ;
          // parse expression for getter
          if (isFunction(expOrFn)) {
              this.getter = expOrFn;
          }
          else {
              this.getter = parsePath(expOrFn);
              if (!this.getter) {
                  this.getter = noop;
                  warn$2("Failed watching path: \"".concat(expOrFn, "\" ") +
                          'Watcher only accepts simple dot-delimited paths. ' +
                          'For full control, use a function instead.', vm);
              }
          }
          this.value = this.lazy ? undefined : this.get();
      }
      /**
       * Evaluate the getter, and re-collect dependencies.
       */
      Watcher.prototype.get = function () {
          pushTarget(this);
          var value;
          var vm = this.vm;
          try {
              value = this.getter.call(vm, vm);
          }
          catch (e) {
              if (this.user) {
                  handleError(e, vm, "getter for watcher \"".concat(this.expression, "\""));
              }
              else {
                  throw e;
              }
          }
          finally {
              // "touch" every property so they are all tracked as
              // dependencies for deep watching
              if (this.deep) {
                  traverse(value);
              }
              popTarget();
              this.cleanupDeps();
          }
          return value;
      };
      /**
       * Add a dependency to this directive.
       */
      Watcher.prototype.addDep = function (dep) {
          var id = dep.id;
          if (!this.newDepIds.has(id)) {
              this.newDepIds.add(id);
              this.newDeps.push(dep);
              if (!this.depIds.has(id)) {
                  dep.addSub(this);
              }
          }
      };
      /**
       * Clean up for dependency collection.
       */
      Watcher.prototype.cleanupDeps = function () {
          var i = this.deps.length;
          while (i--) {
              var dep = this.deps[i];
              if (!this.newDepIds.has(dep.id)) {
                  dep.removeSub(this);
              }
          }
          var tmp = this.depIds;
          this.depIds = this.newDepIds;
          this.newDepIds = tmp;
          this.newDepIds.clear();
          tmp = this.deps;
          this.deps = this.newDeps;
          this.newDeps = tmp;
          this.newDeps.length = 0;
      };
      /**
       * Subscriber interface.
       * Will be called when a dependency changes.
       */
      Watcher.prototype.update = function () {
          /* istanbul ignore else */
          if (this.lazy) {
              this.dirty = true;
          }
          else if (this.sync) {
              this.run();
          }
          else {
              queueWatcher(this);
          }
      };
      /**
       * Scheduler job interface.
       * Will be called by the scheduler.
       */
      Watcher.prototype.run = function () {
          if (this.active) {
              var value = this.get();
              if (value !== this.value ||
                  // Deep watchers and watchers on Object/Arrays should fire even
                  // when the value is the same, because the value may
                  // have mutated.
                  isObject(value) ||
                  this.deep) {
                  // set new value
                  var oldValue = this.value;
                  this.value = value;
                  if (this.user) {
                      var info = "callback for watcher \"".concat(this.expression, "\"");
                      invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
                  }
                  else {
                      this.cb.call(this.vm, value, oldValue);
                  }
              }
          }
      };
      /**
       * Evaluate the value of the watcher.
       * This only gets called for lazy watchers.
       */
      Watcher.prototype.evaluate = function () {
          this.value = this.get();
          this.dirty = false;
      };
      /**
       * Depend on all deps collected by this watcher.
       */
      Watcher.prototype.depend = function () {
          var i = this.deps.length;
          while (i--) {
              this.deps[i].depend();
          }
      };
      /**
       * Remove self from all dependencies' subscriber list.
       */
      Watcher.prototype.teardown = function () {
          if (this.vm && !this.vm._isBeingDestroyed) {
              remove$2(this.vm._scope.effects, this);
          }
          if (this.active) {
              var i = this.deps.length;
              while (i--) {
                  this.deps[i].removeSub(this);
              }
              this.active = false;
              if (this.onStop) {
                  this.onStop();
              }
          }
      };
      return Watcher;
  }());

  var sharedPropertyDefinition = {
      enumerable: true,
      configurable: true,
      get: noop,
      set: noop
  };
  function proxy(target, sourceKey, key) {
      sharedPropertyDefinition.get = function proxyGetter() {
          return this[sourceKey][key];
      };
      sharedPropertyDefinition.set = function proxySetter(val) {
          this[sourceKey][key] = val;
      };
      Object.defineProperty(target, key, sharedPropertyDefinition);
  }
  function initState(vm) {
      var opts = vm.$options;
      if (opts.props)
          initProps$1(vm, opts.props);
      // Composition API
      initSetup(vm);
      if (opts.methods)
          initMethods(vm, opts.methods);
      if (opts.data) {
          initData(vm);
      }
      else {
          var ob = observe((vm._data = {}));
          ob && ob.vmCount++;
      }
      if (opts.computed)
          initComputed$1(vm, opts.computed);
      if (opts.watch && opts.watch !== nativeWatch) {
          initWatch(vm, opts.watch);
      }
  }
  function initProps$1(vm, propsOptions) {
      var propsData = vm.$options.propsData || {};
      var props = (vm._props = shallowReactive({}));
      // cache prop keys so that future props updates can iterate using Array
      // instead of dynamic object key enumeration.
      var keys = (vm.$options._propKeys = []);
      var isRoot = !vm.$parent;
      // root instance props should be converted
      if (!isRoot) {
          toggleObserving(false);
      }
      var _loop_1 = function (key) {
          keys.push(key);
          var value = validateProp(key, propsOptions, propsData, vm);
          /* istanbul ignore else */
          {
              var hyphenatedKey = hyphenate(key);
              if (isReservedAttribute(hyphenatedKey) ||
                  config.isReservedAttr(hyphenatedKey)) {
                  warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm);
              }
              defineReactive(props, key, value, function () {
                  if (!isRoot && !isUpdatingChildComponent) {
                      warn$2("Avoid mutating a prop directly since the value will be " +
                          "overwritten whenever the parent component re-renders. " +
                          "Instead, use a data or computed property based on the prop's " +
                          "value. Prop being mutated: \"".concat(key, "\""), vm);
                  }
              });
          }
          // static props are already proxied on the component's prototype
          // during Vue.extend(). We only need to proxy props defined at
          // instantiation here.
          if (!(key in vm)) {
              proxy(vm, "_props", key);
          }
      };
      for (var key in propsOptions) {
          _loop_1(key);
      }
      toggleObserving(true);
  }
  function initData(vm) {
      var data = vm.$options.data;
      data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
      if (!isPlainObject(data)) {
          data = {};
          warn$2('data functions should return an object:\n' +
                  'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
      }
      // proxy data on instance
      var keys = Object.keys(data);
      var props = vm.$options.props;
      var methods = vm.$options.methods;
      var i = keys.length;
      while (i--) {
          var key = keys[i];
          {
              if (methods && hasOwn(methods, key)) {
                  warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm);
              }
          }
          if (props && hasOwn(props, key)) {
              warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") +
                      "Use prop default value instead.", vm);
          }
          else if (!isReserved(key)) {
              proxy(vm, "_data", key);
          }
      }
      // observe data
      var ob = observe(data);
      ob && ob.vmCount++;
  }
  function getData(data, vm) {
      // #7573 disable dep collection when invoking data getters
      pushTarget();
      try {
          return data.call(vm, vm);
      }
      catch (e) {
          handleError(e, vm, "data()");
          return {};
      }
      finally {
          popTarget();
      }
  }
  var computedWatcherOptions = { lazy: true };
  function initComputed$1(vm, computed) {
      // $flow-disable-line
      var watchers = (vm._computedWatchers = Object.create(null));
      // computed properties are just getters during SSR
      var isSSR = isServerRendering();
      for (var key in computed) {
          var userDef = computed[key];
          var getter = isFunction(userDef) ? userDef : userDef.get;
          if (getter == null) {
              warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm);
          }
          if (!isSSR) {
              // create internal watcher for the computed property.
              watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
          }
          // component-defined computed properties are already defined on the
          // component prototype. We only need to define computed properties defined
          // at instantiation here.
          if (!(key in vm)) {
              defineComputed(vm, key, userDef);
          }
          else {
              if (key in vm.$data) {
                  warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm);
              }
              else if (vm.$options.props && key in vm.$options.props) {
                  warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm);
              }
              else if (vm.$options.methods && key in vm.$options.methods) {
                  warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm);
              }
          }
      }
  }
  function defineComputed(target, key, userDef) {
      var shouldCache = !isServerRendering();
      if (isFunction(userDef)) {
          sharedPropertyDefinition.get = shouldCache
              ? createComputedGetter(key)
              : createGetterInvoker(userDef);
          sharedPropertyDefinition.set = noop;
      }
      else {
          sharedPropertyDefinition.get = userDef.get
              ? shouldCache && userDef.cache !== false
                  ? createComputedGetter(key)
                  : createGetterInvoker(userDef.get)
              : noop;
          sharedPropertyDefinition.set = userDef.set || noop;
      }
      if (sharedPropertyDefinition.set === noop) {
          sharedPropertyDefinition.set = function () {
              warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this);
          };
      }
      Object.defineProperty(target, key, sharedPropertyDefinition);
  }
  function createComputedGetter(key) {
      return function computedGetter() {
          var watcher = this._computedWatchers && this._computedWatchers[key];
          if (watcher) {
              if (watcher.dirty) {
                  watcher.evaluate();
              }
              if (Dep.target) {
                  if (Dep.target.onTrack) {
                      Dep.target.onTrack({
                          effect: Dep.target,
                          target: this,
                          type: "get" /* TrackOpTypes.GET */,
                          key: key
                      });
                  }
                  watcher.depend();
              }
              return watcher.value;
          }
      };
  }
  function createGetterInvoker(fn) {
      return function computedGetter() {
          return fn.call(this, this);
      };
  }
  function initMethods(vm, methods) {
      var props = vm.$options.props;
      for (var key in methods) {
          {
              if (typeof methods[key] !== 'function') {
                  warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") +
                      "Did you reference the function correctly?", vm);
              }
              if (props && hasOwn(props, key)) {
                  warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm);
              }
              if (key in vm && isReserved(key)) {
                  warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") +
                      "Avoid defining component methods that start with _ or $.");
              }
          }
          vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);
      }
  }
  function initWatch(vm, watch) {
      for (var key in watch) {
          var handler = watch[key];
          if (isArray(handler)) {
              for (var i = 0; i < handler.length; i++) {
                  createWatcher(vm, key, handler[i]);
              }
          }
          else {
              createWatcher(vm, key, handler);
          }
      }
  }
  function createWatcher(vm, expOrFn, handler, options) {
      if (isPlainObject(handler)) {
          options = handler;
          handler = handler.handler;
      }
      if (typeof handler === 'string') {
          handler = vm[handler];
      }
      return vm.$watch(expOrFn, handler, options);
  }
  function stateMixin(Vue) {
      // flow somehow has problems with directly declared definition object
      // when using Object.defineProperty, so we have to procedurally build up
      // the object here.
      var dataDef = {};
      dataDef.get = function () {
          return this._data;
      };
      var propsDef = {};
      propsDef.get = function () {
          return this._props;
      };
      {
          dataDef.set = function () {
              warn$2('Avoid replacing instance root $data. ' +
                  'Use nested data properties instead.', this);
          };
          propsDef.set = function () {
              warn$2("$props is readonly.", this);
          };
      }
      Object.defineProperty(Vue.prototype, '$data', dataDef);
      Object.defineProperty(Vue.prototype, '$props', propsDef);
      Vue.prototype.$set = set;
      Vue.prototype.$delete = del;
      Vue.prototype.$watch = function (expOrFn, cb, options) {
          var vm = this;
          if (isPlainObject(cb)) {
              return createWatcher(vm, expOrFn, cb, options);
          }
          options = options || {};
          options.user = true;
          var watcher = new Watcher(vm, expOrFn, cb, options);
          if (options.immediate) {
              var info = "callback for immediate watcher \"".concat(watcher.expression, "\"");
              pushTarget();
              invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
              popTarget();
          }
          return function unwatchFn() {
              watcher.teardown();
          };
      };
  }

  function initProvide(vm) {
      var provideOption = vm.$options.provide;
      if (provideOption) {
          var provided = isFunction(provideOption)
              ? provideOption.call(vm)
              : provideOption;
          if (!isObject(provided)) {
              return;
          }
          var source = resolveProvided(vm);
          // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
          // iterate the keys ourselves.
          var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
          for (var i = 0; i < keys.length; i++) {
              var key = keys[i];
              Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
          }
      }
  }
  function initInjections(vm) {
      var result = resolveInject(vm.$options.inject, vm);
      if (result) {
          toggleObserving(false);
          Object.keys(result).forEach(function (key) {
              /* istanbul ignore else */
              {
                  defineReactive(vm, key, result[key], function () {
                      warn$2("Avoid mutating an injected value directly since the changes will be " +
                          "overwritten whenever the provided component re-renders. " +
                          "injection being mutated: \"".concat(key, "\""), vm);
                  });
              }
          });
          toggleObserving(true);
      }
  }
  function resolveInject(inject, vm) {
      if (inject) {
          // inject is :any because flow is not smart enough to figure out cached
          var result = Object.create(null);
          var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
          for (var i = 0; i < keys.length; i++) {
              var key = keys[i];
              // #6574 in case the inject object is observed...
              if (key === '__ob__')
                  continue;
              var provideKey = inject[key].from;
              if (provideKey in vm._provided) {
                  result[key] = vm._provided[provideKey];
              }
              else if ('default' in inject[key]) {
                  var provideDefault = inject[key].default;
                  result[key] = isFunction(provideDefault)
                      ? provideDefault.call(vm)
                      : provideDefault;
              }
              else {
                  warn$2("Injection \"".concat(key, "\" not found"), vm);
              }
          }
          return result;
      }
  }

  var uid = 0;
  function initMixin$1(Vue) {
      Vue.prototype._init = function (options) {
          var vm = this;
          // a uid
          vm._uid = uid++;
          var startTag, endTag;
          /* istanbul ignore if */
          if (config.performance && mark) {
              startTag = "vue-perf-start:".concat(vm._uid);
              endTag = "vue-perf-end:".concat(vm._uid);
              mark(startTag);
          }
          // a flag to mark this as a Vue instance without having to do instanceof
          // check
          vm._isVue = true;
          // avoid instances from being observed
          vm.__v_skip = true;
          // effect scope
          vm._scope = new EffectScope(true /* detached */);
          vm._scope._vm = true;
          // merge options
          if (options && options._isComponent) {
              // optimize internal component instantiation
              // since dynamic options merging is pretty slow, and none of the
              // internal component options needs special treatment.
              initInternalComponent(vm, options);
          }
          else {
              vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
          }
          /* istanbul ignore else */
          {
              initProxy(vm);
          }
          // expose real self
          vm._self = vm;
          initLifecycle(vm);
          initEvents(vm);
          initRender(vm);
          callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
          initInjections(vm); // resolve injections before data/props
          initState(vm);
          initProvide(vm); // resolve provide after data/props
          callHook$1(vm, 'created');
          /* istanbul ignore if */
          if (config.performance && mark) {
              vm._name = formatComponentName(vm, false);
              mark(endTag);
              measure("vue ".concat(vm._name, " init"), startTag, endTag);
          }
          if (vm.$options.el) {
              vm.$mount(vm.$options.el);
          }
      };
  }
  function initInternalComponent(vm, options) {
      var opts = (vm.$options = Object.create(vm.constructor.options));
      // doing this because it's faster than dynamic enumeration.
      var parentVnode = options._parentVnode;
      opts.parent = options.parent;
      opts._parentVnode = parentVnode;
      var vnodeComponentOptions = parentVnode.componentOptions;
      opts.propsData = vnodeComponentOptions.propsData;
      opts._parentListeners = vnodeComponentOptions.listeners;
      opts._renderChildren = vnodeComponentOptions.children;
      opts._componentTag = vnodeComponentOptions.tag;
      if (options.render) {
          opts.render = options.render;
          opts.staticRenderFns = options.staticRenderFns;
      }
  }
  function resolveConstructorOptions(Ctor) {
      var options = Ctor.options;
      if (Ctor.super) {
          var superOptions = resolveConstructorOptions(Ctor.super);
          var cachedSuperOptions = Ctor.superOptions;
          if (superOptions !== cachedSuperOptions) {
              // super option changed,
              // need to resolve new options.
              Ctor.superOptions = superOptions;
              // check if there are any late-modified/attached options (#4976)
              var modifiedOptions = resolveModifiedOptions(Ctor);
              // update base extend options
              if (modifiedOptions) {
                  extend(Ctor.extendOptions, modifiedOptions);
              }
              options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
              if (options.name) {
                  options.components[options.name] = Ctor;
              }
          }
      }
      return options;
  }
  function resolveModifiedOptions(Ctor) {
      var modified;
      var latest = Ctor.options;
      var sealed = Ctor.sealedOptions;
      for (var key in latest) {
          if (latest[key] !== sealed[key]) {
              if (!modified)
                  modified = {};
              modified[key] = latest[key];
          }
      }
      return modified;
  }

  function FunctionalRenderContext(data, props, children, parent, Ctor) {
      var _this = this;
      var options = Ctor.options;
      // ensure the createElement function in functional components
      // gets a unique context - this is necessary for correct named slot check
      var contextVm;
      if (hasOwn(parent, '_uid')) {
          contextVm = Object.create(parent);
          contextVm._original = parent;
      }
      else {
          // the context vm passed in is a functional context as well.
          // in this case we want to make sure we are able to get a hold to the
          // real context instance.
          contextVm = parent;
          // @ts-ignore
          parent = parent._original;
      }
      var isCompiled = isTrue(options._compiled);
      var needNormalization = !isCompiled;
      this.data = data;
      this.props = props;
      this.children = children;
      this.parent = parent;
      this.listeners = data.on || emptyObject;
      this.injections = resolveInject(options.inject, parent);
      this.slots = function () {
          if (!_this.$slots) {
              normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));
          }
          return _this.$slots;
      };
      Object.defineProperty(this, 'scopedSlots', {
          enumerable: true,
          get: function () {
              return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
          }
      });
      // support for compiled functional template
      if (isCompiled) {
          // exposing $options for renderStatic()
          this.$options = options;
          // pre-resolve slots for renderSlot()
          this.$slots = this.slots();
          this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
      }
      if (options._scopeId) {
          this._c = function (a, b, c, d) {
              var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
              if (vnode && !isArray(vnode)) {
                  vnode.fnScopeId = options._scopeId;
                  vnode.fnContext = parent;
              }
              return vnode;
          };
      }
      else {
          this._c = function (a, b, c, d) {
              return createElement$1(contextVm, a, b, c, d, needNormalization);
          };
      }
  }
  installRenderHelpers(FunctionalRenderContext.prototype);
  function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
      var options = Ctor.options;
      var props = {};
      var propOptions = options.props;
      if (isDef(propOptions)) {
          for (var key in propOptions) {
              props[key] = validateProp(key, propOptions, propsData || emptyObject);
          }
      }
      else {
          if (isDef(data.attrs))
              mergeProps(props, data.attrs);
          if (isDef(data.props))
              mergeProps(props, data.props);
      }
      var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
      var vnode = options.render.call(null, renderContext._c, renderContext);
      if (vnode instanceof VNode) {
          return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
      }
      else if (isArray(vnode)) {
          var vnodes = normalizeChildren(vnode) || [];
          var res = new Array(vnodes.length);
          for (var i = 0; i < vnodes.length; i++) {
              res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
          }
          return res;
      }
  }
  function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
      // #7817 clone node before setting fnContext, otherwise if the node is reused
      // (e.g. it was from a cached normal slot) the fnContext causes named slots
      // that should not be matched to match.
      var clone = cloneVNode(vnode);
      clone.fnContext = contextVm;
      clone.fnOptions = options;
      {
          (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
              renderContext;
      }
      if (data.slot) {
          (clone.data || (clone.data = {})).slot = data.slot;
      }
      return clone;
  }
  function mergeProps(to, from) {
      for (var key in from) {
          to[camelize(key)] = from[key];
      }
  }

  function getComponentName(options) {
      return options.name || options.__name || options._componentTag;
  }
  // inline hooks to be invoked on component VNodes during patch
  var componentVNodeHooks = {
      init: function (vnode, hydrating) {
          if (vnode.componentInstance &&
              !vnode.componentInstance._isDestroyed &&
              vnode.data.keepAlive) {
              // kept-alive components, treat as a patch
              var mountedNode = vnode; // work around flow
              componentVNodeHooks.prepatch(mountedNode, mountedNode);
          }
          else {
              var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
              child.$mount(hydrating ? vnode.elm : undefined, hydrating);
          }
      },
      prepatch: function (oldVnode, vnode) {
          var options = vnode.componentOptions;
          var child = (vnode.componentInstance = oldVnode.componentInstance);
          updateChildComponent(child, options.propsData, // updated props
          options.listeners, // updated listeners
          vnode, // new parent vnode
          options.children // new children
          );
      },
      insert: function (vnode) {
          var context = vnode.context, componentInstance = vnode.componentInstance;
          if (!componentInstance._isMounted) {
              componentInstance._isMounted = true;
              callHook$1(componentInstance, 'mounted');
          }
          if (vnode.data.keepAlive) {
              if (context._isMounted) {
                  // vue-router#1212
                  // During updates, a kept-alive component's child components may
                  // change, so directly walking the tree here may call activated hooks
                  // on incorrect children. Instead we push them into a queue which will
                  // be processed after the whole patch process ended.
                  queueActivatedComponent(componentInstance);
              }
              else {
                  activateChildComponent(componentInstance, true /* direct */);
              }
          }
      },
      destroy: function (vnode) {
          var componentInstance = vnode.componentInstance;
          if (!componentInstance._isDestroyed) {
              if (!vnode.data.keepAlive) {
                  componentInstance.$destroy();
              }
              else {
                  deactivateChildComponent(componentInstance, true /* direct */);
              }
          }
      }
  };
  var hooksToMerge = Object.keys(componentVNodeHooks);
  function createComponent(Ctor, data, context, children, tag) {
      if (isUndef(Ctor)) {
          return;
      }
      var baseCtor = context.$options._base;
      // plain options object: turn it into a constructor
      if (isObject(Ctor)) {
          Ctor = baseCtor.extend(Ctor);
      }
      // if at this stage it's not a constructor or an async component factory,
      // reject.
      if (typeof Ctor !== 'function') {
          {
              warn$2("Invalid Component definition: ".concat(String(Ctor)), context);
          }
          return;
      }
      // async component
      var asyncFactory;
      // @ts-expect-error
      if (isUndef(Ctor.cid)) {
          asyncFactory = Ctor;
          Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
          if (Ctor === undefined) {
              // return a placeholder node for async component, which is rendered
              // as a comment node but preserves all the raw information for the node.
              // the information will be used for async server-rendering and hydration.
              return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
          }
      }
      data = data || {};
      // resolve constructor options in case global mixins are applied after
      // component constructor creation
      resolveConstructorOptions(Ctor);
      // transform component v-model data into props & events
      if (isDef(data.model)) {
          // @ts-expect-error
          transformModel(Ctor.options, data);
      }
      // extract props
      // @ts-expect-error
      var propsData = extractPropsFromVNodeData(data, Ctor, tag);
      // functional component
      // @ts-expect-error
      if (isTrue(Ctor.options.functional)) {
          return createFunctionalComponent(Ctor, propsData, data, context, children);
      }
      // extract listeners, since these needs to be treated as
      // child component listeners instead of DOM listeners
      var listeners = data.on;
      // replace with listeners with .native modifier
      // so it gets processed during parent component patch.
      data.on = data.nativeOn;
      // @ts-expect-error
      if (isTrue(Ctor.options.abstract)) {
          // abstract components do not keep anything
          // other than props & listeners & slot
          // work around flow
          var slot = data.slot;
          data = {};
          if (slot) {
              data.slot = slot;
          }
      }
      // install component management hooks onto the placeholder node
      installComponentHooks(data);
      // return a placeholder vnode
      // @ts-expect-error
      var name = getComponentName(Ctor.options) || tag;
      var vnode = new VNode(
      // @ts-expect-error
      "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 
      // @ts-expect-error
      { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);
      return vnode;
  }
  function createComponentInstanceForVnode(
  // we know it's MountedComponentVNode but flow doesn't
  vnode, 
  // activeInstance in lifecycle state
  parent) {
      var options = {
          _isComponent: true,
          _parentVnode: vnode,
          parent: parent
      };
      // check inline-template render functions
      var inlineTemplate = vnode.data.inlineTemplate;
      if (isDef(inlineTemplate)) {
          options.render = inlineTemplate.render;
          options.staticRenderFns = inlineTemplate.staticRenderFns;
      }
      return new vnode.componentOptions.Ctor(options);
  }
  function installComponentHooks(data) {
      var hooks = data.hook || (data.hook = {});
      for (var i = 0; i < hooksToMerge.length; i++) {
          var key = hooksToMerge[i];
          var existing = hooks[key];
          var toMerge = componentVNodeHooks[key];
          // @ts-expect-error
          if (existing !== toMerge && !(existing && existing._merged)) {
              hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
          }
      }
  }
  function mergeHook(f1, f2) {
      var merged = function (a, b) {
          // flow complains about extra args which is why we use any
          f1(a, b);
          f2(a, b);
      };
      merged._merged = true;
      return merged;
  }
  // transform component v-model info (value and callback) into
  // prop and event handler respectively.
  function transformModel(options, data) {
      var prop = (options.model && options.model.prop) || 'value';
      var event = (options.model && options.model.event) || 'input';
      (data.attrs || (data.attrs = {}))[prop] = data.model.value;
      var on = data.on || (data.on = {});
      var existing = on[event];
      var callback = data.model.callback;
      if (isDef(existing)) {
          if (isArray(existing)
              ? existing.indexOf(callback) === -1
              : existing !== callback) {
              on[event] = [callback].concat(existing);
          }
      }
      else {
          on[event] = callback;
      }
  }

  var warn$2 = noop;
  var tip = noop;
  var generateComponentTrace; // work around flow check
  var formatComponentName;
  {
      var hasConsole_1 = typeof console !== 'undefined';
      var classifyRE_1 = /(?:^|[-_])(\w)/g;
      var classify_1 = function (str) {
          return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');
      };
      warn$2 = function (msg, vm) {
          if (vm === void 0) { vm = currentInstance; }
          var trace = vm ? generateComponentTrace(vm) : '';
          if (config.warnHandler) {
              config.warnHandler.call(null, msg, vm, trace);
          }
          else if (hasConsole_1 && !config.silent) {
              console.error("[Vue warn]: ".concat(msg).concat(trace));
          }
      };
      tip = function (msg, vm) {
          if (hasConsole_1 && !config.silent) {
              console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : ''));
          }
      };
      formatComponentName = function (vm, includeFile) {
          if (vm.$root === vm) {
              return '<Root>';
          }
          var options = isFunction(vm) && vm.cid != null
              ? vm.options
              : vm._isVue
                  ? vm.$options || vm.constructor.options
                  : vm;
          var name = getComponentName(options);
          var file = options.__file;
          if (!name && file) {
              var match = file.match(/([^/\\]+)\.vue$/);
              name = match && match[1];
          }
          return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") +
              (file && includeFile !== false ? " at ".concat(file) : ''));
      };
      var repeat_1 = function (str, n) {
          var res = '';
          while (n) {
              if (n % 2 === 1)
                  res += str;
              if (n > 1)
                  str += str;
              n >>= 1;
          }
          return res;
      };
      generateComponentTrace = function (vm) {
          if (vm._isVue && vm.$parent) {
              var tree = [];
              var currentRecursiveSequence = 0;
              while (vm) {
                  if (tree.length > 0) {
                      var last = tree[tree.length - 1];
                      if (last.constructor === vm.constructor) {
                          currentRecursiveSequence++;
                          vm = vm.$parent;
                          continue;
                      }
                      else if (currentRecursiveSequence > 0) {
                          tree[tree.length - 1] = [last, currentRecursiveSequence];
                          currentRecursiveSequence = 0;
                      }
                  }
                  tree.push(vm);
                  vm = vm.$parent;
              }
              return ('\n\nfound in\n\n' +
                  tree
                      .map(function (vm, i) {
                      return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)
                          ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)")
                          : formatComponentName(vm));
                  })
                      .join('\n'));
          }
          else {
              return "\n\n(found in ".concat(formatComponentName(vm), ")");
          }
      };
  }

  /**
   * Option overwriting strategies are functions that handle
   * how to merge a parent option value and a child option
   * value into the final value.
   */
  var strats = config.optionMergeStrategies;
  /**
   * Options with restrictions
   */
  {
      strats.el = strats.propsData = function (parent, child, vm, key) {
          if (!vm) {
              warn$2("option \"".concat(key, "\" can only be used during instance ") +
                  'creation with the `new` keyword.');
          }
          return defaultStrat(parent, child);
      };
  }
  /**
   * Helper that recursively merges two data objects together.
   */
  function mergeData(to, from, recursive) {
      if (recursive === void 0) { recursive = true; }
      if (!from)
          return to;
      var key, toVal, fromVal;
      var keys = hasSymbol
          ? Reflect.ownKeys(from)
          : Object.keys(from);
      for (var i = 0; i < keys.length; i++) {
          key = keys[i];
          // in case the object is already observed...
          if (key === '__ob__')
              continue;
          toVal = to[key];
          fromVal = from[key];
          if (!recursive || !hasOwn(to, key)) {
              set(to, key, fromVal);
          }
          else if (toVal !== fromVal &&
              isPlainObject(toVal) &&
              isPlainObject(fromVal)) {
              mergeData(toVal, fromVal);
          }
      }
      return to;
  }
  /**
   * Data
   */
  function mergeDataOrFn(parentVal, childVal, vm) {
      if (!vm) {
          // in a Vue.extend merge, both should be functions
          if (!childVal) {
              return parentVal;
          }
          if (!parentVal) {
              return childVal;
          }
          // when parentVal & childVal are both present,
          // we need to return a function that returns the
          // merged result of both functions... no need to
          // check if parentVal is a function here because
          // it has to be a function to pass previous merges.
          return function mergedDataFn() {
              return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
          };
      }
      else {
          return function mergedInstanceDataFn() {
              // instance merge
              var instanceData = isFunction(childVal)
                  ? childVal.call(vm, vm)
                  : childVal;
              var defaultData = isFunction(parentVal)
                  ? parentVal.call(vm, vm)
                  : parentVal;
              if (instanceData) {
                  return mergeData(instanceData, defaultData);
              }
              else {
                  return defaultData;
              }
          };
      }
  }
  strats.data = function (parentVal, childVal, vm) {
      if (!vm) {
          if (childVal && typeof childVal !== 'function') {
              warn$2('The "data" option should be a function ' +
                      'that returns a per-instance value in component ' +
                      'definitions.', vm);
              return parentVal;
          }
          return mergeDataOrFn(parentVal, childVal);
      }
      return mergeDataOrFn(parentVal, childVal, vm);
  };
  /**
   * Hooks and props are merged as arrays.
   */
  function mergeLifecycleHook(parentVal, childVal) {
      var res = childVal
          ? parentVal
              ? parentVal.concat(childVal)
              : isArray(childVal)
                  ? childVal
                  : [childVal]
          : parentVal;
      return res ? dedupeHooks(res) : res;
  }
  function dedupeHooks(hooks) {
      var res = [];
      for (var i = 0; i < hooks.length; i++) {
          if (res.indexOf(hooks[i]) === -1) {
              res.push(hooks[i]);
          }
      }
      return res;
  }
  LIFECYCLE_HOOKS.forEach(function (hook) {
      strats[hook] = mergeLifecycleHook;
  });
  /**
   * Assets
   *
   * When a vm is present (instance creation), we need to do
   * a three-way merge between constructor options, instance
   * options and parent options.
   */
  function mergeAssets(parentVal, childVal, vm, key) {
      var res = Object.create(parentVal || null);
      if (childVal) {
          assertObjectType(key, childVal, vm);
          return extend(res, childVal);
      }
      else {
          return res;
      }
  }
  ASSET_TYPES.forEach(function (type) {
      strats[type + 's'] = mergeAssets;
  });
  /**
   * Watchers.
   *
   * Watchers hashes should not overwrite one
   * another, so we merge them as arrays.
   */
  strats.watch = function (parentVal, childVal, vm, key) {
      // work around Firefox's Object.prototype.watch...
      //@ts-expect-error work around
      if (parentVal === nativeWatch)
          parentVal = undefined;
      //@ts-expect-error work around
      if (childVal === nativeWatch)
          childVal = undefined;
      /* istanbul ignore if */
      if (!childVal)
          return Object.create(parentVal || null);
      {
          assertObjectType(key, childVal, vm);
      }
      if (!parentVal)
          return childVal;
      var ret = {};
      extend(ret, parentVal);
      for (var key_1 in childVal) {
          var parent_1 = ret[key_1];
          var child = childVal[key_1];
          if (parent_1 && !isArray(parent_1)) {
              parent_1 = [parent_1];
          }
          ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];
      }
      return ret;
  };
  /**
   * Other object hashes.
   */
  strats.props =
      strats.methods =
          strats.inject =
              strats.computed =
                  function (parentVal, childVal, vm, key) {
                      if (childVal && true) {
                          assertObjectType(key, childVal, vm);
                      }
                      if (!parentVal)
                          return childVal;
                      var ret = Object.create(null);
                      extend(ret, parentVal);
                      if (childVal)
                          extend(ret, childVal);
                      return ret;
                  };
  strats.provide = function (parentVal, childVal) {
      if (!parentVal)
          return childVal;
      return function () {
          var ret = Object.create(null);
          mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
          if (childVal) {
              mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
              );
          }
          return ret;
      };
  };
  /**
   * Default strategy.
   */
  var defaultStrat = function (parentVal, childVal) {
      return childVal === undefined ? parentVal : childVal;
  };
  /**
   * Validate component names
   */
  function checkComponents(options) {
      for (var key in options.components) {
          validateComponentName(key);
      }
  }
  function validateComponentName(name) {
      if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) {
          warn$2('Invalid component name: "' +
              name +
              '". Component names ' +
              'should conform to valid custom element name in html5 specification.');
      }
      if (isBuiltInTag(name) || config.isReservedTag(name)) {
          warn$2('Do not use built-in or reserved HTML elements as component ' +
              'id: ' +
              name);
      }
  }
  /**
   * Ensure all props option syntax are normalized into the
   * Object-based format.
   */
  function normalizeProps(options, vm) {
      var props = options.props;
      if (!props)
          return;
      var res = {};
      var i, val, name;
      if (isArray(props)) {
          i = props.length;
          while (i--) {
              val = props[i];
              if (typeof val === 'string') {
                  name = camelize(val);
                  res[name] = { type: null };
              }
              else {
                  warn$2('props must be strings when using array syntax.');
              }
          }
      }
      else if (isPlainObject(props)) {
          for (var key in props) {
              val = props[key];
              name = camelize(key);
              res[name] = isPlainObject(val) ? val : { type: val };
          }
      }
      else {
          warn$2("Invalid value for option \"props\": expected an Array or an Object, " +
              "but got ".concat(toRawType(props), "."), vm);
      }
      options.props = res;
  }
  /**
   * Normalize all injections into Object-based format
   */
  function normalizeInject(options, vm) {
      var inject = options.inject;
      if (!inject)
          return;
      var normalized = (options.inject = {});
      if (isArray(inject)) {
          for (var i = 0; i < inject.length; i++) {
              normalized[inject[i]] = { from: inject[i] };
          }
      }
      else if (isPlainObject(inject)) {
          for (var key in inject) {
              var val = inject[key];
              normalized[key] = isPlainObject(val)
                  ? extend({ from: key }, val)
                  : { from: val };
          }
      }
      else {
          warn$2("Invalid value for option \"inject\": expected an Array or an Object, " +
              "but got ".concat(toRawType(inject), "."), vm);
      }
  }
  /**
   * Normalize raw function directives into object format.
   */
  function normalizeDirectives$1(options) {
      var dirs = options.directives;
      if (dirs) {
          for (var key in dirs) {
              var def = dirs[key];
              if (isFunction(def)) {
                  dirs[key] = { bind: def, update: def };
              }
          }
      }
  }
  function assertObjectType(name, value, vm) {
      if (!isPlainObject(value)) {
          warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") +
              "but got ".concat(toRawType(value), "."), vm);
      }
  }
  /**
   * Merge two option objects into a new one.
   * Core utility used in both instantiation and inheritance.
   */
  function mergeOptions(parent, child, vm) {
      {
          checkComponents(child);
      }
      if (isFunction(child)) {
          // @ts-expect-error
          child = child.options;
      }
      normalizeProps(child, vm);
      normalizeInject(child, vm);
      normalizeDirectives$1(child);
      // Apply extends and mixins on the child options,
      // but only if it is a raw options object that isn't
      // the result of another mergeOptions call.
      // Only merged options has the _base property.
      if (!child._base) {
          if (child.extends) {
              parent = mergeOptions(parent, child.extends, vm);
          }
          if (child.mixins) {
              for (var i = 0, l = child.mixins.length; i < l; i++) {
                  parent = mergeOptions(parent, child.mixins[i], vm);
              }
          }
      }
      var options = {};
      var key;
      for (key in parent) {
          mergeField(key);
      }
      for (key in child) {
          if (!hasOwn(parent, key)) {
              mergeField(key);
          }
      }
      function mergeField(key) {
          var strat = strats[key] || defaultStrat;
          options[key] = strat(parent[key], child[key], vm, key);
      }
      return options;
  }
  /**
   * Resolve an asset.
   * This function is used because child instances need access
   * to assets defined in its ancestor chain.
   */
  function resolveAsset(options, type, id, warnMissing) {
      /* istanbul ignore if */
      if (typeof id !== 'string') {
          return;
      }
      var assets = options[type];
      // check local registration variations first
      if (hasOwn(assets, id))
          return assets[id];
      var camelizedId = camelize(id);
      if (hasOwn(assets, camelizedId))
          return assets[camelizedId];
      var PascalCaseId = capitalize(camelizedId);
      if (hasOwn(assets, PascalCaseId))
          return assets[PascalCaseId];
      // fallback to prototype chain
      var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
      if (warnMissing && !res) {
          warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
      }
      return res;
  }

  function validateProp(key, propOptions, propsData, vm) {
      var prop = propOptions[key];
      var absent = !hasOwn(propsData, key);
      var value = propsData[key];
      // boolean casting
      var booleanIndex = getTypeIndex(Boolean, prop.type);
      if (booleanIndex > -1) {
          if (absent && !hasOwn(prop, 'default')) {
              value = false;
          }
          else if (value === '' || value === hyphenate(key)) {
              // only cast empty string / same name to boolean if
              // boolean has higher priority
              var stringIndex = getTypeIndex(String, prop.type);
              if (stringIndex < 0 || booleanIndex < stringIndex) {
                  value = true;
              }
          }
      }
      // check default value
      if (value === undefined) {
          value = getPropDefaultValue(vm, prop, key);
          // since the default value is a fresh copy,
          // make sure to observe it.
          var prevShouldObserve = shouldObserve;
          toggleObserving(true);
          observe(value);
          toggleObserving(prevShouldObserve);
      }
      {
          assertProp(prop, key, value, vm, absent);
      }
      return value;
  }
  /**
   * Get the default value of a prop.
   */
  function getPropDefaultValue(vm, prop, key) {
      // no default, return undefined
      if (!hasOwn(prop, 'default')) {
          return undefined;
      }
      var def = prop.default;
      // warn against non-factory defaults for Object & Array
      if (isObject(def)) {
          warn$2('Invalid default value for prop "' +
              key +
              '": ' +
              'Props with type Object/Array must use a factory function ' +
              'to return the default value.', vm);
      }
      // the raw prop value was also undefined from previous render,
      // return previous default value to avoid unnecessary watcher trigger
      if (vm &&
          vm.$options.propsData &&
          vm.$options.propsData[key] === undefined &&
          vm._props[key] !== undefined) {
          return vm._props[key];
      }
      // call factory function for non-Function types
      // a value is Function if its prototype is function even across different execution context
      return isFunction(def) && getType(prop.type) !== 'Function'
          ? def.call(vm)
          : def;
  }
  /**
   * Assert whether a prop is valid.
   */
  function assertProp(prop, name, value, vm, absent) {
      if (prop.required && absent) {
          warn$2('Missing required prop: "' + name + '"', vm);
          return;
      }
      if (value == null && !prop.required) {
          return;
      }
      var type = prop.type;
      var valid = !type || type === true;
      var expectedTypes = [];
      if (type) {
          if (!isArray(type)) {
              type = [type];
          }
          for (var i = 0; i < type.length && !valid; i++) {
              var assertedType = assertType(value, type[i], vm);
              expectedTypes.push(assertedType.expectedType || '');
              valid = assertedType.valid;
          }
      }
      var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
      if (!valid && haveExpectedTypes) {
          warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
          return;
      }
      var validator = prop.validator;
      if (validator) {
          if (!validator(value)) {
              warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
          }
      }
  }
  var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
  function assertType(value, type, vm) {
      var valid;
      var expectedType = getType(type);
      if (simpleCheckRE.test(expectedType)) {
          var t = typeof value;
          valid = t === expectedType.toLowerCase();
          // for primitive wrapper objects
          if (!valid && t === 'object') {
              valid = value instanceof type;
          }
      }
      else if (expectedType === 'Object') {
          valid = isPlainObject(value);
      }
      else if (expectedType === 'Array') {
          valid = isArray(value);
      }
      else {
          try {
              valid = value instanceof type;
          }
          catch (e) {
              warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
              valid = false;
          }
      }
      return {
          valid: valid,
          expectedType: expectedType
      };
  }
  var functionTypeCheckRE = /^\s*function (\w+)/;
  /**
   * Use function string name to check built-in types,
   * because a simple equality check will fail when running
   * across different vms / iframes.
   */
  function getType(fn) {
      var match = fn && fn.toString().match(functionTypeCheckRE);
      return match ? match[1] : '';
  }
  function isSameType(a, b) {
      return getType(a) === getType(b);
  }
  function getTypeIndex(type, expectedTypes) {
      if (!isArray(expectedTypes)) {
          return isSameType(expectedTypes, type) ? 0 : -1;
      }
      for (var i = 0, len = expectedTypes.length; i < len; i++) {
          if (isSameType(expectedTypes[i], type)) {
              return i;
          }
      }
      return -1;
  }
  function getInvalidTypeMessage(name, value, expectedTypes) {
      var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") +
          " Expected ".concat(expectedTypes.map(capitalize).join(', '));
      var expectedType = expectedTypes[0];
      var receivedType = toRawType(value);
      // check if we need to specify expected value
      if (expectedTypes.length === 1 &&
          isExplicable(expectedType) &&
          isExplicable(typeof value) &&
          !isBoolean(expectedType, receivedType)) {
          message += " with value ".concat(styleValue(value, expectedType));
      }
      message += ", got ".concat(receivedType, " ");
      // check if we need to specify received value
      if (isExplicable(receivedType)) {
          message += "with value ".concat(styleValue(value, receivedType), ".");
      }
      return message;
  }
  function styleValue(value, type) {
      if (type === 'String') {
          return "\"".concat(value, "\"");
      }
      else if (type === 'Number') {
          return "".concat(Number(value));
      }
      else {
          return "".concat(value);
      }
  }
  var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
  function isExplicable(value) {
      return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });
  }
  function isBoolean() {
      var args = [];
      for (var _i = 0; _i < arguments.length; _i++) {
          args[_i] = arguments[_i];
      }
      return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });
  }

  function Vue(options) {
      if (!(this instanceof Vue)) {
          warn$2('Vue is a constructor and should be called with the `new` keyword');
      }
      this._init(options);
  }
  //@ts-expect-error Vue has function type
  initMixin$1(Vue);
  //@ts-expect-error Vue has function type
  stateMixin(Vue);
  //@ts-expect-error Vue has function type
  eventsMixin(Vue);
  //@ts-expect-error Vue has function type
  lifecycleMixin(Vue);
  //@ts-expect-error Vue has function type
  renderMixin(Vue);

  function initUse(Vue) {
      Vue.use = function (plugin) {
          var installedPlugins = this._installedPlugins || (this._installedPlugins = []);
          if (installedPlugins.indexOf(plugin) > -1) {
              return this;
          }
          // additional parameters
          var args = toArray(arguments, 1);
          args.unshift(this);
          if (isFunction(plugin.install)) {
              plugin.install.apply(plugin, args);
          }
          else if (isFunction(plugin)) {
              plugin.apply(null, args);
          }
          installedPlugins.push(plugin);
          return this;
      };
  }

  function initMixin(Vue) {
      Vue.mixin = function (mixin) {
          this.options = mergeOptions(this.options, mixin);
          return this;
      };
  }

  function initExtend(Vue) {
      /**
       * Each instance constructor, including Vue, has a unique
       * cid. This enables us to create wrapped "child
       * constructors" for prototypal inheritance and cache them.
       */
      Vue.cid = 0;
      var cid = 1;
      /**
       * Class inheritance
       */
      Vue.extend = function (extendOptions) {
          extendOptions = extendOptions || {};
          var Super = this;
          var SuperId = Super.cid;
          var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
          if (cachedCtors[SuperId]) {
              return cachedCtors[SuperId];
          }
          var name = getComponentName(extendOptions) || getComponentName(Super.options);
          if (name) {
              validateComponentName(name);
          }
          var Sub = function VueComponent(options) {
              this._init(options);
          };
          Sub.prototype = Object.create(Super.prototype);
          Sub.prototype.constructor = Sub;
          Sub.cid = cid++;
          Sub.options = mergeOptions(Super.options, extendOptions);
          Sub['super'] = Super;
          // For props and computed properties, we define the proxy getters on
          // the Vue instances at extension time, on the extended prototype. This
          // avoids Object.defineProperty calls for each instance created.
          if (Sub.options.props) {
              initProps(Sub);
          }
          if (Sub.options.computed) {
              initComputed(Sub);
          }
          // allow further extension/mixin/plugin usage
          Sub.extend = Super.extend;
          Sub.mixin = Super.mixin;
          Sub.use = Super.use;
          // create asset registers, so extended classes
          // can have their private assets too.
          ASSET_TYPES.forEach(function (type) {
              Sub[type] = Super[type];
          });
          // enable recursive self-lookup
          if (name) {
              Sub.options.components[name] = Sub;
          }
          // keep a reference to the super options at extension time.
          // later at instantiation we can check if Super's options have
          // been updated.
          Sub.superOptions = Super.options;
          Sub.extendOptions = extendOptions;
          Sub.sealedOptions = extend({}, Sub.options);
          // cache constructor
          cachedCtors[SuperId] = Sub;
          return Sub;
      };
  }
  function initProps(Comp) {
      var props = Comp.options.props;
      for (var key in props) {
          proxy(Comp.prototype, "_props", key);
      }
  }
  function initComputed(Comp) {
      var computed = Comp.options.computed;
      for (var key in computed) {
          defineComputed(Comp.prototype, key, computed[key]);
      }
  }

  function initAssetRegisters(Vue) {
      /**
       * Create asset registration methods.
       */
      ASSET_TYPES.forEach(function (type) {
          // @ts-expect-error function is not exact same type
          Vue[type] = function (id, definition) {
              if (!definition) {
                  return this.options[type + 's'][id];
              }
              else {
                  /* istanbul ignore if */
                  if (type === 'component') {
                      validateComponentName(id);
                  }
                  if (type === 'component' && isPlainObject(definition)) {
                      // @ts-expect-error
                      definition.name = definition.name || id;
                      definition = this.options._base.extend(definition);
                  }
                  if (type === 'directive' && isFunction(definition)) {
                      definition = { bind: definition, update: definition };
                  }
                  this.options[type + 's'][id] = definition;
                  return definition;
              }
          };
      });
  }

  function _getComponentName(opts) {
      return opts && (getComponentName(opts.Ctor.options) || opts.tag);
  }
  function matches(pattern, name) {
      if (isArray(pattern)) {
          return pattern.indexOf(name) > -1;
      }
      else if (typeof pattern === 'string') {
          return pattern.split(',').indexOf(name) > -1;
      }
      else if (isRegExp(pattern)) {
          return pattern.test(name);
      }
      /* istanbul ignore next */
      return false;
  }
  function pruneCache(keepAliveInstance, filter) {
      var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode;
      for (var key in cache) {
          var entry = cache[key];
          if (entry) {
              var name_1 = entry.name;
              if (name_1 && !filter(name_1)) {
                  pruneCacheEntry(cache, key, keys, _vnode);
              }
          }
      }
  }
  function pruneCacheEntry(cache, key, keys, current) {
      var entry = cache[key];
      if (entry && (!current || entry.tag !== current.tag)) {
          // @ts-expect-error can be undefined
          entry.componentInstance.$destroy();
      }
      cache[key] = null;
      remove$2(keys, key);
  }
  var patternTypes = [String, RegExp, Array];
  // TODO defineComponent
  var KeepAlive = {
      name: 'keep-alive',
      abstract: true,
      props: {
          include: patternTypes,
          exclude: patternTypes,
          max: [String, Number]
      },
      methods: {
          cacheVNode: function () {
              var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;
              if (vnodeToCache) {
                  var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;
                  cache[keyToCache] = {
                      name: _getComponentName(componentOptions),
                      tag: tag,
                      componentInstance: componentInstance
                  };
                  keys.push(keyToCache);
                  // prune oldest entry
                  if (this.max && keys.length > parseInt(this.max)) {
                      pruneCacheEntry(cache, keys[0], keys, this._vnode);
                  }
                  this.vnodeToCache = null;
              }
          }
      },
      created: function () {
          this.cache = Object.create(null);
          this.keys = [];
      },
      destroyed: function () {
          for (var key in this.cache) {
              pruneCacheEntry(this.cache, key, this.keys);
          }
      },
      mounted: function () {
          var _this = this;
          this.cacheVNode();
          this.$watch('include', function (val) {
              pruneCache(_this, function (name) { return matches(val, name); });
          });
          this.$watch('exclude', function (val) {
              pruneCache(_this, function (name) { return !matches(val, name); });
          });
      },
      updated: function () {
          this.cacheVNode();
      },
      render: function () {
          var slot = this.$slots.default;
          var vnode = getFirstComponentChild(slot);
          var componentOptions = vnode && vnode.componentOptions;
          if (componentOptions) {
              // check pattern
              var name_2 = _getComponentName(componentOptions);
              var _a = this, include = _a.include, exclude = _a.exclude;
              if (
              // not included
              (include && (!name_2 || !matches(include, name_2))) ||
                  // excluded
                  (exclude && name_2 && matches(exclude, name_2))) {
                  return vnode;
              }
              var _b = this, cache = _b.cache, keys = _b.keys;
              var key = vnode.key == null
                  ? // same constructor may get registered as different local components
                      // so cid alone is not enough (#3269)
                      componentOptions.Ctor.cid +
                          (componentOptions.tag ? "::".concat(componentOptions.tag) : '')
                  : vnode.key;
              if (cache[key]) {
                  vnode.componentInstance = cache[key].componentInstance;
                  // make current key freshest
                  remove$2(keys, key);
                  keys.push(key);
              }
              else {
                  // delay setting the cache until update
                  this.vnodeToCache = vnode;
                  this.keyToCache = key;
              }
              // @ts-expect-error can vnode.data can be undefined
              vnode.data.keepAlive = true;
          }
          return vnode || (slot && slot[0]);
      }
  };

  var builtInComponents = {
      KeepAlive: KeepAlive
  };

  function initGlobalAPI(Vue) {
      // config
      var configDef = {};
      configDef.get = function () { return config; };
      {
          configDef.set = function () {
              warn$2('Do not replace the Vue.config object, set individual fields instead.');
          };
      }
      Object.defineProperty(Vue, 'config', configDef);
      // exposed util methods.
      // NOTE: these are not considered part of the public API - avoid relying on
      // them unless you are aware of the risk.
      Vue.util = {
          warn: warn$2,
          extend: extend,
          mergeOptions: mergeOptions,
          defineReactive: defineReactive
      };
      Vue.set = set;
      Vue.delete = del;
      Vue.nextTick = nextTick;
      // 2.6 explicit observable API
      Vue.observable = function (obj) {
          observe(obj);
          return obj;
      };
      Vue.options = Object.create(null);
      ASSET_TYPES.forEach(function (type) {
          Vue.options[type + 's'] = Object.create(null);
      });
      // this is used to identify the "base" constructor to extend all plain-object
      // components with in Weex's multi-instance scenarios.
      Vue.options._base = Vue;
      extend(Vue.options.components, builtInComponents);
      initUse(Vue);
      initMixin(Vue);
      initExtend(Vue);
      initAssetRegisters(Vue);
  }

  initGlobalAPI(Vue);
  Object.defineProperty(Vue.prototype, '$isServer', {
      get: isServerRendering
  });
  Object.defineProperty(Vue.prototype, '$ssrContext', {
      get: function () {
          /* istanbul ignore next */
          return this.$vnode && this.$vnode.ssrContext;
      }
  });
  // expose FunctionalRenderContext for ssr runtime helper installation
  Object.defineProperty(Vue, 'FunctionalRenderContext', {
      value: FunctionalRenderContext
  });
  Vue.version = version;

  // these are reserved for web because they are directly compiled away
  // during template compilation
  var isReservedAttr = makeMap('style,class');
  // attributes that should be using props for binding
  var acceptValue = makeMap('input,textarea,option,select,progress');
  var mustUseProp = function (tag, type, attr) {
      return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
          (attr === 'selected' && tag === 'option') ||
          (attr === 'checked' && tag === 'input') ||
          (attr === 'muted' && tag === 'video'));
  };
  var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
  var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
  var convertEnumeratedValue = function (key, value) {
      return isFalsyAttrValue(value) || value === 'false'
          ? 'false'
          : // allow arbitrary string value for contenteditable
              key === 'contenteditable' && isValidContentEditableValue(value)
                  ? value
                  : 'true';
  };
  var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
      'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
      'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
      'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
      'required,reversed,scoped,seamless,selected,sortable,' +
      'truespeed,typemustmatch,visible');
  var xlinkNS = 'http://www.w3.org/1999/xlink';
  var isXlink = function (name) {
      return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
  };
  var getXlinkProp = function (name) {
      return isXlink(name) ? name.slice(6, name.length) : '';
  };
  var isFalsyAttrValue = function (val) {
      return val == null || val === false;
  };

  function genClassForVnode(vnode) {
      var data = vnode.data;
      var parentNode = vnode;
      var childNode = vnode;
      while (isDef(childNode.componentInstance)) {
          childNode = childNode.componentInstance._vnode;
          if (childNode && childNode.data) {
              data = mergeClassData(childNode.data, data);
          }
      }
      // @ts-expect-error parentNode.parent not VNodeWithData
      while (isDef((parentNode = parentNode.parent))) {
          if (parentNode && parentNode.data) {
              data = mergeClassData(data, parentNode.data);
          }
      }
      return renderClass(data.staticClass, data.class);
  }
  function mergeClassData(child, parent) {
      return {
          staticClass: concat(child.staticClass, parent.staticClass),
          class: isDef(child.class) ? [child.class, parent.class] : parent.class
      };
  }
  function renderClass(staticClass, dynamicClass) {
      if (isDef(staticClass) || isDef(dynamicClass)) {
          return concat(staticClass, stringifyClass(dynamicClass));
      }
      /* istanbul ignore next */
      return '';
  }
  function concat(a, b) {
      return a ? (b ? a + ' ' + b : a) : b || '';
  }
  function stringifyClass(value) {
      if (Array.isArray(value)) {
          return stringifyArray(value);
      }
      if (isObject(value)) {
          return stringifyObject(value);
      }
      if (typeof value === 'string') {
          return value;
      }
      /* istanbul ignore next */
      return '';
  }
  function stringifyArray(value) {
      var res = '';
      var stringified;
      for (var i = 0, l = value.length; i < l; i++) {
          if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
              if (res)
                  res += ' ';
              res += stringified;
          }
      }
      return res;
  }
  function stringifyObject(value) {
      var res = '';
      for (var key in value) {
          if (value[key]) {
              if (res)
                  res += ' ';
              res += key;
          }
      }
      return res;
  }

  var namespaceMap = {
      svg: 'http://www.w3.org/2000/svg',
      math: 'http://www.w3.org/1998/Math/MathML'
  };
  var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
      'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
      'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
      'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
      's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
      'embed,object,param,source,canvas,script,noscript,del,ins,' +
      'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
      'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
      'output,progress,select,textarea,' +
      'details,dialog,menu,menuitem,summary,' +
      'content,element,shadow,template,blockquote,iframe,tfoot');
  // this map is intentionally selective, only covering SVG elements that may
  // contain child elements.
  var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
      'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
      'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
  var isPreTag = function (tag) { return tag === 'pre'; };
  var isReservedTag = function (tag) {
      return isHTMLTag(tag) || isSVG(tag);
  };
  function getTagNamespace(tag) {
      if (isSVG(tag)) {
          return 'svg';
      }
      // basic support for MathML
      // note it doesn't support other MathML elements being component roots
      if (tag === 'math') {
          return 'math';
      }
  }
  var unknownElementCache = Object.create(null);
  function isUnknownElement(tag) {
      /* istanbul ignore if */
      if (!inBrowser) {
          return true;
      }
      if (isReservedTag(tag)) {
          return false;
      }
      tag = tag.toLowerCase();
      /* istanbul ignore if */
      if (unknownElementCache[tag] != null) {
          return unknownElementCache[tag];
      }
      var el = document.createElement(tag);
      if (tag.indexOf('-') > -1) {
          // http://stackoverflow.com/a/28210364/1070244
          return (unknownElementCache[tag] =
              el.constructor === window.HTMLUnknownElement ||
                  el.constructor === window.HTMLElement);
      }
      else {
          return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
      }
  }
  var isTextInputType = makeMap('text,number,password,search,email,tel,url');

  /**
   * Query an element selector if it's not an element already.
   */
  function query(el) {
      if (typeof el === 'string') {
          var selected = document.querySelector(el);
          if (!selected) {
              warn$2('Cannot find element: ' + el);
              return document.createElement('div');
          }
          return selected;
      }
      else {
          return el;
      }
  }

  function createElement(tagName, vnode) {
      var elm = document.createElement(tagName);
      if (tagName !== 'select') {
          return elm;
      }
      // false or null will remove the attribute but undefined will not
      if (vnode.data &&
          vnode.data.attrs &&
          vnode.data.attrs.multiple !== undefined) {
          elm.setAttribute('multiple', 'multiple');
      }
      return elm;
  }
  function createElementNS(namespace, tagName) {
      return document.createElementNS(namespaceMap[namespace], tagName);
  }
  function createTextNode(text) {
      return document.createTextNode(text);
  }
  function createComment(text) {
      return document.createComment(text);
  }
  function insertBefore(parentNode, newNode, referenceNode) {
      parentNode.insertBefore(newNode, referenceNode);
  }
  function removeChild(node, child) {
      node.removeChild(child);
  }
  function appendChild(node, child) {
      node.appendChild(child);
  }
  function parentNode(node) {
      return node.parentNode;
  }
  function nextSibling(node) {
      return node.nextSibling;
  }
  function tagName(node) {
      return node.tagName;
  }
  function setTextContent(node, text) {
      node.textContent = text;
  }
  function setStyleScope(node, scopeId) {
      node.setAttribute(scopeId, '');
  }

  var nodeOps = /*#__PURE__*/Object.freeze({
    __proto__: null,
    createElement: createElement,
    createElementNS: createElementNS,
    createTextNode: createTextNode,
    createComment: createComment,
    insertBefore: insertBefore,
    removeChild: removeChild,
    appendChild: appendChild,
    parentNode: parentNode,
    nextSibling: nextSibling,
    tagName: tagName,
    setTextContent: setTextContent,
    setStyleScope: setStyleScope
  });

  var ref = {
      create: function (_, vnode) {
          registerRef(vnode);
      },
      update: function (oldVnode, vnode) {
          if (oldVnode.data.ref !== vnode.data.ref) {
              registerRef(oldVnode, true);
              registerRef(vnode);
          }
      },
      destroy: function (vnode) {
          registerRef(vnode, true);
      }
  };
  function registerRef(vnode, isRemoval) {
      var ref = vnode.data.ref;
      if (!isDef(ref))
          return;
      var vm = vnode.context;
      var refValue = vnode.componentInstance || vnode.elm;
      var value = isRemoval ? null : refValue;
      var $refsValue = isRemoval ? undefined : refValue;
      if (isFunction(ref)) {
          invokeWithErrorHandling(ref, vm, [value], vm, "template ref function");
          return;
      }
      var isFor = vnode.data.refInFor;
      var _isString = typeof ref === 'string' || typeof ref === 'number';
      var _isRef = isRef(ref);
      var refs = vm.$refs;
      if (_isString || _isRef) {
          if (isFor) {
              var existing = _isString ? refs[ref] : ref.value;
              if (isRemoval) {
                  isArray(existing) && remove$2(existing, refValue);
              }
              else {
                  if (!isArray(existing)) {
                      if (_isString) {
                          refs[ref] = [refValue];
                          setSetupRef(vm, ref, refs[ref]);
                      }
                      else {
                          ref.value = [refValue];
                      }
                  }
                  else if (!existing.includes(refValue)) {
                      existing.push(refValue);
                  }
              }
          }
          else if (_isString) {
              if (isRemoval && refs[ref] !== refValue) {
                  return;
              }
              refs[ref] = $refsValue;
              setSetupRef(vm, ref, value);
          }
          else if (_isRef) {
              if (isRemoval && ref.value !== refValue) {
                  return;
              }
              ref.value = value;
          }
          else {
              warn$2("Invalid template ref type: ".concat(typeof ref));
          }
      }
  }
  function setSetupRef(_a, key, val) {
      var _setupState = _a._setupState;
      if (_setupState && hasOwn(_setupState, key)) {
          if (isRef(_setupState[key])) {
              _setupState[key].value = val;
          }
          else {
              _setupState[key] = val;
          }
      }
  }

  /**
   * Virtual DOM patching algorithm based on Snabbdom by
   * Simon Friis Vindum (@paldepind)
   * Licensed under the MIT License
   * https://github.com/paldepind/snabbdom/blob/master/LICENSE
   *
   * modified by Evan You (@yyx990803)
   *
   * Not type-checking this because this file is perf-critical and the cost
   * of making flow understand it is not worth it.
   */
  var emptyNode = new VNode('', {}, []);
  var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
  function sameVnode(a, b) {
      return (a.key === b.key &&
          a.asyncFactory === b.asyncFactory &&
          ((a.tag === b.tag &&
              a.isComment === b.isComment &&
              isDef(a.data) === isDef(b.data) &&
              sameInputType(a, b)) ||
              (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
  }
  function sameInputType(a, b) {
      if (a.tag !== 'input')
          return true;
      var i;
      var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
      var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
      return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
  }
  function createKeyToOldIdx(children, beginIdx, endIdx) {
      var i, key;
      var map = {};
      for (i = beginIdx; i <= endIdx; ++i) {
          key = children[i].key;
          if (isDef(key))
              map[key] = i;
      }
      return map;
  }
  function createPatchFunction(backend) {
      var i, j;
      var cbs = {};
      var modules = backend.modules, nodeOps = backend.nodeOps;
      for (i = 0; i < hooks.length; ++i) {
          cbs[hooks[i]] = [];
          for (j = 0; j < modules.length; ++j) {
              if (isDef(modules[j][hooks[i]])) {
                  cbs[hooks[i]].push(modules[j][hooks[i]]);
              }
          }
      }
      function emptyNodeAt(elm) {
          return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
      }
      function createRmCb(childElm, listeners) {
          function remove() {
              if (--remove.listeners === 0) {
                  removeNode(childElm);
              }
          }
          remove.listeners = listeners;
          return remove;
      }
      function removeNode(el) {
          var parent = nodeOps.parentNode(el);
          // element may have already been removed due to v-html / v-text
          if (isDef(parent)) {
              nodeOps.removeChild(parent, el);
          }
      }
      function isUnknownElement(vnode, inVPre) {
          return (!inVPre &&
              !vnode.ns &&
              !(config.ignoredElements.length &&
                  config.ignoredElements.some(function (ignore) {
                      return isRegExp(ignore)
                          ? ignore.test(vnode.tag)
                          : ignore === vnode.tag;
                  })) &&
              config.isUnknownElement(vnode.tag));
      }
      var creatingElmInVPre = 0;
      function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
          if (isDef(vnode.elm) && isDef(ownerArray)) {
              // This vnode was used in a previous render!
              // now it's used as a new node, overwriting its elm would cause
              // potential patch errors down the road when it's used as an insertion
              // reference node. Instead, we clone the node on-demand before creating
              // associated DOM element for it.
              vnode = ownerArray[index] = cloneVNode(vnode);
          }
          vnode.isRootInsert = !nested; // for transition enter check
          if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
              return;
          }
          var data = vnode.data;
          var children = vnode.children;
          var tag = vnode.tag;
          if (isDef(tag)) {
              {
                  if (data && data.pre) {
                      creatingElmInVPre++;
                  }
                  if (isUnknownElement(vnode, creatingElmInVPre)) {
                      warn$2('Unknown custom element: <' +
                          tag +
                          '> - did you ' +
                          'register the component correctly? For recursive components, ' +
                          'make sure to provide the "name" option.', vnode.context);
                  }
              }
              vnode.elm = vnode.ns
                  ? nodeOps.createElementNS(vnode.ns, tag)
                  : nodeOps.createElement(tag, vnode);
              setScope(vnode);
              createChildren(vnode, children, insertedVnodeQueue);
              if (isDef(data)) {
                  invokeCreateHooks(vnode, insertedVnodeQueue);
              }
              insert(parentElm, vnode.elm, refElm);
              if (data && data.pre) {
                  creatingElmInVPre--;
              }
          }
          else if (isTrue(vnode.isComment)) {
              vnode.elm = nodeOps.createComment(vnode.text);
              insert(parentElm, vnode.elm, refElm);
          }
          else {
              vnode.elm = nodeOps.createTextNode(vnode.text);
              insert(parentElm, vnode.elm, refElm);
          }
      }
      function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
          var i = vnode.data;
          if (isDef(i)) {
              var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
              if (isDef((i = i.hook)) && isDef((i = i.init))) {
                  i(vnode, false /* hydrating */);
              }
              // after calling the init hook, if the vnode is a child component
              // it should've created a child instance and mounted it. the child
              // component also has set the placeholder vnode's elm.
              // in that case we can just return the element and be done.
              if (isDef(vnode.componentInstance)) {
                  initComponent(vnode, insertedVnodeQueue);
                  insert(parentElm, vnode.elm, refElm);
                  if (isTrue(isReactivated)) {
                      reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
                  }
                  return true;
              }
          }
      }
      function initComponent(vnode, insertedVnodeQueue) {
          if (isDef(vnode.data.pendingInsert)) {
              insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
              vnode.data.pendingInsert = null;
          }
          vnode.elm = vnode.componentInstance.$el;
          if (isPatchable(vnode)) {
              invokeCreateHooks(vnode, insertedVnodeQueue);
              setScope(vnode);
          }
          else {
              // empty component root.
              // skip all element-related modules except for ref (#3455)
              registerRef(vnode);
              // make sure to invoke the insert hook
              insertedVnodeQueue.push(vnode);
          }
      }
      function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
          var i;
          // hack for #4339: a reactivated component with inner transition
          // does not trigger because the inner node's created hooks are not called
          // again. It's not ideal to involve module-specific logic in here but
          // there doesn't seem to be a better way to do it.
          var innerNode = vnode;
          while (innerNode.componentInstance) {
              innerNode = innerNode.componentInstance._vnode;
              if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
                  for (i = 0; i < cbs.activate.length; ++i) {
                      cbs.activate[i](emptyNode, innerNode);
                  }
                  insertedVnodeQueue.push(innerNode);
                  break;
              }
          }
          // unlike a newly created component,
          // a reactivated keep-alive component doesn't insert itself
          insert(parentElm, vnode.elm, refElm);
      }
      function insert(parent, elm, ref) {
          if (isDef(parent)) {
              if (isDef(ref)) {
                  if (nodeOps.parentNode(ref) === parent) {
                      nodeOps.insertBefore(parent, elm, ref);
                  }
              }
              else {
                  nodeOps.appendChild(parent, elm);
              }
          }
      }
      function createChildren(vnode, children, insertedVnodeQueue) {
          if (isArray(children)) {
              {
                  checkDuplicateKeys(children);
              }
              for (var i_1 = 0; i_1 < children.length; ++i_1) {
                  createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);
              }
          }
          else if (isPrimitive(vnode.text)) {
              nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
          }
      }
      function isPatchable(vnode) {
          while (vnode.componentInstance) {
              vnode = vnode.componentInstance._vnode;
          }
          return isDef(vnode.tag);
      }
      function invokeCreateHooks(vnode, insertedVnodeQueue) {
          for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {
              cbs.create[i_2](emptyNode, vnode);
          }
          i = vnode.data.hook; // Reuse variable
          if (isDef(i)) {
              if (isDef(i.create))
                  i.create(emptyNode, vnode);
              if (isDef(i.insert))
                  insertedVnodeQueue.push(vnode);
          }
      }
      // set scope id attribute for scoped CSS.
      // this is implemented as a special case to avoid the overhead
      // of going through the normal attribute patching process.
      function setScope(vnode) {
          var i;
          if (isDef((i = vnode.fnScopeId))) {
              nodeOps.setStyleScope(vnode.elm, i);
          }
          else {
              var ancestor = vnode;
              while (ancestor) {
                  if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
                      nodeOps.setStyleScope(vnode.elm, i);
                  }
                  ancestor = ancestor.parent;
              }
          }
          // for slot content they should also get the scopeId from the host instance.
          if (isDef((i = activeInstance)) &&
              i !== vnode.context &&
              i !== vnode.fnContext &&
              isDef((i = i.$options._scopeId))) {
              nodeOps.setStyleScope(vnode.elm, i);
          }
      }
      function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
          for (; startIdx <= endIdx; ++startIdx) {
              createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
          }
      }
      function invokeDestroyHook(vnode) {
          var i, j;
          var data = vnode.data;
          if (isDef(data)) {
              if (isDef((i = data.hook)) && isDef((i = i.destroy)))
                  i(vnode);
              for (i = 0; i < cbs.destroy.length; ++i)
                  cbs.destroy[i](vnode);
          }
          if (isDef((i = vnode.children))) {
              for (j = 0; j < vnode.children.length; ++j) {
                  invokeDestroyHook(vnode.children[j]);
              }
          }
      }
      function removeVnodes(vnodes, startIdx, endIdx) {
          for (; startIdx <= endIdx; ++startIdx) {
              var ch = vnodes[startIdx];
              if (isDef(ch)) {
                  if (isDef(ch.tag)) {
                      removeAndInvokeRemoveHook(ch);
                      invokeDestroyHook(ch);
                  }
                  else {
                      // Text node
                      removeNode(ch.elm);
                  }
              }
          }
      }
      function removeAndInvokeRemoveHook(vnode, rm) {
          if (isDef(rm) || isDef(vnode.data)) {
              var i_3;
              var listeners = cbs.remove.length + 1;
              if (isDef(rm)) {
                  // we have a recursively passed down rm callback
                  // increase the listeners count
                  rm.listeners += listeners;
              }
              else {
                  // directly removing
                  rm = createRmCb(vnode.elm, listeners);
              }
              // recursively invoke hooks on child component root node
              if (isDef((i_3 = vnode.componentInstance)) &&
                  isDef((i_3 = i_3._vnode)) &&
                  isDef(i_3.data)) {
                  removeAndInvokeRemoveHook(i_3, rm);
              }
              for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {
                  cbs.remove[i_3](vnode, rm);
              }
              if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {
                  i_3(vnode, rm);
              }
              else {
                  rm();
              }
          }
          else {
              removeNode(vnode.elm);
          }
      }
      function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
          var oldStartIdx = 0;
          var newStartIdx = 0;
          var oldEndIdx = oldCh.length - 1;
          var oldStartVnode = oldCh[0];
          var oldEndVnode = oldCh[oldEndIdx];
          var newEndIdx = newCh.length - 1;
          var newStartVnode = newCh[0];
          var newEndVnode = newCh[newEndIdx];
          var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
          // removeOnly is a special flag used only by <transition-group>
          // to ensure removed elements stay in correct relative positions
          // during leaving transitions
          var canMove = !removeOnly;
          {
              checkDuplicateKeys(newCh);
          }
          while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
              if (isUndef(oldStartVnode)) {
                  oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
              }
              else if (isUndef(oldEndVnode)) {
                  oldEndVnode = oldCh[--oldEndIdx];
              }
              else if (sameVnode(oldStartVnode, newStartVnode)) {
                  patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                  oldStartVnode = oldCh[++oldStartIdx];
                  newStartVnode = newCh[++newStartIdx];
              }
              else if (sameVnode(oldEndVnode, newEndVnode)) {
                  patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                  oldEndVnode = oldCh[--oldEndIdx];
                  newEndVnode = newCh[--newEndIdx];
              }
              else if (sameVnode(oldStartVnode, newEndVnode)) {
                  // Vnode moved right
                  patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                  canMove &&
                      nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
                  oldStartVnode = oldCh[++oldStartIdx];
                  newEndVnode = newCh[--newEndIdx];
              }
              else if (sameVnode(oldEndVnode, newStartVnode)) {
                  // Vnode moved left
                  patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                  canMove &&
                      nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
                  oldEndVnode = oldCh[--oldEndIdx];
                  newStartVnode = newCh[++newStartIdx];
              }
              else {
                  if (isUndef(oldKeyToIdx))
                      oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
                  idxInOld = isDef(newStartVnode.key)
                      ? oldKeyToIdx[newStartVnode.key]
                      : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
                  if (isUndef(idxInOld)) {
                      // New element
                      createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                  }
                  else {
                      vnodeToMove = oldCh[idxInOld];
                      if (sameVnode(vnodeToMove, newStartVnode)) {
                          patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                          oldCh[idxInOld] = undefined;
                          canMove &&
                              nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
                      }
                      else {
                          // same key but different element. treat as new element
                          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                      }
                  }
                  newStartVnode = newCh[++newStartIdx];
              }
          }
          if (oldStartIdx > oldEndIdx) {
              refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
              addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
          }
          else if (newStartIdx > newEndIdx) {
              removeVnodes(oldCh, oldStartIdx, oldEndIdx);
          }
      }
      function checkDuplicateKeys(children) {
          var seenKeys = {};
          for (var i_4 = 0; i_4 < children.length; i_4++) {
              var vnode = children[i_4];
              var key = vnode.key;
              if (isDef(key)) {
                  if (seenKeys[key]) {
                      warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context);
                  }
                  else {
                      seenKeys[key] = true;
                  }
              }
          }
      }
      function findIdxInOld(node, oldCh, start, end) {
          for (var i_5 = start; i_5 < end; i_5++) {
              var c = oldCh[i_5];
              if (isDef(c) && sameVnode(node, c))
                  return i_5;
          }
      }
      function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
          if (oldVnode === vnode) {
              return;
          }
          if (isDef(vnode.elm) && isDef(ownerArray)) {
              // clone reused vnode
              vnode = ownerArray[index] = cloneVNode(vnode);
          }
          var elm = (vnode.elm = oldVnode.elm);
          if (isTrue(oldVnode.isAsyncPlaceholder)) {
              if (isDef(vnode.asyncFactory.resolved)) {
                  hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
              }
              else {
                  vnode.isAsyncPlaceholder = true;
              }
              return;
          }
          // reuse element for static trees.
          // note we only do this if the vnode is cloned -
          // if the new node is not cloned it means the render functions have been
          // reset by the hot-reload-api and we need to do a proper re-render.
          if (isTrue(vnode.isStatic) &&
              isTrue(oldVnode.isStatic) &&
              vnode.key === oldVnode.key &&
              (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
              vnode.componentInstance = oldVnode.componentInstance;
              return;
          }
          var i;
          var data = vnode.data;
          if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
              i(oldVnode, vnode);
          }
          var oldCh = oldVnode.children;
          var ch = vnode.children;
          if (isDef(data) && isPatchable(vnode)) {
              for (i = 0; i < cbs.update.length; ++i)
                  cbs.update[i](oldVnode, vnode);
              if (isDef((i = data.hook)) && isDef((i = i.update)))
                  i(oldVnode, vnode);
          }
          if (isUndef(vnode.text)) {
              if (isDef(oldCh) && isDef(ch)) {
                  if (oldCh !== ch)
                      updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
              }
              else if (isDef(ch)) {
                  {
                      checkDuplicateKeys(ch);
                  }
                  if (isDef(oldVnode.text))
                      nodeOps.setTextContent(elm, '');
                  addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
              }
              else if (isDef(oldCh)) {
                  removeVnodes(oldCh, 0, oldCh.length - 1);
              }
              else if (isDef(oldVnode.text)) {
                  nodeOps.setTextContent(elm, '');
              }
          }
          else if (oldVnode.text !== vnode.text) {
              nodeOps.setTextContent(elm, vnode.text);
          }
          if (isDef(data)) {
              if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
                  i(oldVnode, vnode);
          }
      }
      function invokeInsertHook(vnode, queue, initial) {
          // delay insert hooks for component root nodes, invoke them after the
          // element is really inserted
          if (isTrue(initial) && isDef(vnode.parent)) {
              vnode.parent.data.pendingInsert = queue;
          }
          else {
              for (var i_6 = 0; i_6 < queue.length; ++i_6) {
                  queue[i_6].data.hook.insert(queue[i_6]);
              }
          }
      }
      var hydrationBailed = false;
      // list of modules that can skip create hook during hydration because they
      // are already rendered on the client or has no need for initialization
      // Note: style is excluded because it relies on initial clone for future
      // deep updates (#7063).
      var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
      // Note: this is a browser-only function so we can assume elms are DOM nodes.
      function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
          var i;
          var tag = vnode.tag, data = vnode.data, children = vnode.children;
          inVPre = inVPre || (data && data.pre);
          vnode.elm = elm;
          if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
              vnode.isAsyncPlaceholder = true;
              return true;
          }
          // assert node match
          {
              if (!assertNodeMatch(elm, vnode, inVPre)) {
                  return false;
              }
          }
          if (isDef(data)) {
              if (isDef((i = data.hook)) && isDef((i = i.init)))
                  i(vnode, true /* hydrating */);
              if (isDef((i = vnode.componentInstance))) {
                  // child component. it should have hydrated its own tree.
                  initComponent(vnode, insertedVnodeQueue);
                  return true;
              }
          }
          if (isDef(tag)) {
              if (isDef(children)) {
                  // empty element, allow client to pick up and populate children
                  if (!elm.hasChildNodes()) {
                      createChildren(vnode, children, insertedVnodeQueue);
                  }
                  else {
                      // v-html and domProps: innerHTML
                      if (isDef((i = data)) &&
                          isDef((i = i.domProps)) &&
                          isDef((i = i.innerHTML))) {
                          if (i !== elm.innerHTML) {
                              /* istanbul ignore if */
                              if (typeof console !== 'undefined' &&
                                  !hydrationBailed) {
                                  hydrationBailed = true;
                                  console.warn('Parent: ', elm);
                                  console.warn('server innerHTML: ', i);
                                  console.warn('client innerHTML: ', elm.innerHTML);
                              }
                              return false;
                          }
                      }
                      else {
                          // iterate and compare children lists
                          var childrenMatch = true;
                          var childNode = elm.firstChild;
                          for (var i_7 = 0; i_7 < children.length; i_7++) {
                              if (!childNode ||
                                  !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {
                                  childrenMatch = false;
                                  break;
                              }
                              childNode = childNode.nextSibling;
                          }
                          // if childNode is not null, it means the actual childNodes list is
                          // longer than the virtual children list.
                          if (!childrenMatch || childNode) {
                              /* istanbul ignore if */
                              if (typeof console !== 'undefined' &&
                                  !hydrationBailed) {
                                  hydrationBailed = true;
                                  console.warn('Parent: ', elm);
                                  console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
                              }
                              return false;
                          }
                      }
                  }
              }
              if (isDef(data)) {
                  var fullInvoke = false;
                  for (var key in data) {
                      if (!isRenderedModule(key)) {
                          fullInvoke = true;
                          invokeCreateHooks(vnode, insertedVnodeQueue);
                          break;
                      }
                  }
                  if (!fullInvoke && data['class']) {
                      // ensure collecting deps for deep class bindings for future updates
                      traverse(data['class']);
                  }
              }
          }
          else if (elm.data !== vnode.text) {
              elm.data = vnode.text;
          }
          return true;
      }
      function assertNodeMatch(node, vnode, inVPre) {
          if (isDef(vnode.tag)) {
              return (vnode.tag.indexOf('vue-component') === 0 ||
                  (!isUnknownElement(vnode, inVPre) &&
                      vnode.tag.toLowerCase() ===
                          (node.tagName && node.tagName.toLowerCase())));
          }
          else {
              return node.nodeType === (vnode.isComment ? 8 : 3);
          }
      }
      return function patch(oldVnode, vnode, hydrating, removeOnly) {
          if (isUndef(vnode)) {
              if (isDef(oldVnode))
                  invokeDestroyHook(oldVnode);
              return;
          }
          var isInitialPatch = false;
          var insertedVnodeQueue = [];
          if (isUndef(oldVnode)) {
              // empty mount (likely as component), create new root element
              isInitialPatch = true;
              createElm(vnode, insertedVnodeQueue);
          }
          else {
              var isRealElement = isDef(oldVnode.nodeType);
              if (!isRealElement && sameVnode(oldVnode, vnode)) {
                  // patch existing root node
                  patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
              }
              else {
                  if (isRealElement) {
                      // mounting to a real element
                      // check if this is server-rendered content and if we can perform
                      // a successful hydration.
                      if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
                          oldVnode.removeAttribute(SSR_ATTR);
                          hydrating = true;
                      }
                      if (isTrue(hydrating)) {
                          if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
                              invokeInsertHook(vnode, insertedVnodeQueue, true);
                              return oldVnode;
                          }
                          else {
                              warn$2('The client-side rendered virtual DOM tree is not matching ' +
                                  'server-rendered content. This is likely caused by incorrect ' +
                                  'HTML markup, for example nesting block-level elements inside ' +
                                  '<p>, or missing <tbody>. Bailing hydration and performing ' +
                                  'full client-side render.');
                          }
                      }
                      // either not server-rendered, or hydration failed.
                      // create an empty node and replace it
                      oldVnode = emptyNodeAt(oldVnode);
                  }
                  // replacing existing element
                  var oldElm = oldVnode.elm;
                  var parentElm = nodeOps.parentNode(oldElm);
                  // create new node
                  createElm(vnode, insertedVnodeQueue, 
                  // extremely rare edge case: do not insert if old element is in a
                  // leaving transition. Only happens when combining transition +
                  // keep-alive + HOCs. (#4590)
                  oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
                  // update parent placeholder node element, recursively
                  if (isDef(vnode.parent)) {
                      var ancestor = vnode.parent;
                      var patchable = isPatchable(vnode);
                      while (ancestor) {
                          for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {
                              cbs.destroy[i_8](ancestor);
                          }
                          ancestor.elm = vnode.elm;
                          if (patchable) {
                              for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {
                                  cbs.create[i_9](emptyNode, ancestor);
                              }
                              // #6513
                              // invoke insert hooks that may have been merged by create hooks.
                              // e.g. for directives that uses the "inserted" hook.
                              var insert_1 = ancestor.data.hook.insert;
                              if (insert_1.merged) {
                                  // start at index 1 to avoid re-invoking component mounted hook
                                  for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) {
                                      insert_1.fns[i_10]();
                                  }
                              }
                          }
                          else {
                              registerRef(ancestor);
                          }
                          ancestor = ancestor.parent;
                      }
                  }
                  // destroy old node
                  if (isDef(parentElm)) {
                      removeVnodes([oldVnode], 0, 0);
                  }
                  else if (isDef(oldVnode.tag)) {
                      invokeDestroyHook(oldVnode);
                  }
              }
          }
          invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
          return vnode.elm;
      };
  }

  var directives$1 = {
      create: updateDirectives,
      update: updateDirectives,
      destroy: function unbindDirectives(vnode) {
          // @ts-expect-error emptyNode is not VNodeWithData
          updateDirectives(vnode, emptyNode);
      }
  };
  function updateDirectives(oldVnode, vnode) {
      if (oldVnode.data.directives || vnode.data.directives) {
          _update(oldVnode, vnode);
      }
  }
  function _update(oldVnode, vnode) {
      var isCreate = oldVnode === emptyNode;
      var isDestroy = vnode === emptyNode;
      var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
      var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
      var dirsWithInsert = [];
      var dirsWithPostpatch = [];
      var key, oldDir, dir;
      for (key in newDirs) {
          oldDir = oldDirs[key];
          dir = newDirs[key];
          if (!oldDir) {
              // new directive, bind
              callHook(dir, 'bind', vnode, oldVnode);
              if (dir.def && dir.def.inserted) {
                  dirsWithInsert.push(dir);
              }
          }
          else {
              // existing directive, update
              dir.oldValue = oldDir.value;
              dir.oldArg = oldDir.arg;
              callHook(dir, 'update', vnode, oldVnode);
              if (dir.def && dir.def.componentUpdated) {
                  dirsWithPostpatch.push(dir);
              }
          }
      }
      if (dirsWithInsert.length) {
          var callInsert = function () {
              for (var i = 0; i < dirsWithInsert.length; i++) {
                  callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
              }
          };
          if (isCreate) {
              mergeVNodeHook(vnode, 'insert', callInsert);
          }
          else {
              callInsert();
          }
      }
      if (dirsWithPostpatch.length) {
          mergeVNodeHook(vnode, 'postpatch', function () {
              for (var i = 0; i < dirsWithPostpatch.length; i++) {
                  callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
              }
          });
      }
      if (!isCreate) {
          for (key in oldDirs) {
              if (!newDirs[key]) {
                  // no longer present, unbind
                  callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
              }
          }
      }
  }
  var emptyModifiers = Object.create(null);
  function normalizeDirectives(dirs, vm) {
      var res = Object.create(null);
      if (!dirs) {
          // $flow-disable-line
          return res;
      }
      var i, dir;
      for (i = 0; i < dirs.length; i++) {
          dir = dirs[i];
          if (!dir.modifiers) {
              // $flow-disable-line
              dir.modifiers = emptyModifiers;
          }
          res[getRawDirName(dir)] = dir;
          if (vm._setupState && vm._setupState.__sfc) {
              var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
              if (typeof setupDef === 'function') {
                  dir.def = {
                      bind: setupDef,
                      update: setupDef,
                  };
              }
              else {
                  dir.def = setupDef;
              }
          }
          dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
      }
      // $flow-disable-line
      return res;
  }
  function getRawDirName(dir) {
      return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.')));
  }
  function callHook(dir, hook, vnode, oldVnode, isDestroy) {
      var fn = dir.def && dir.def[hook];
      if (fn) {
          try {
              fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
          }
          catch (e) {
              handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook"));
          }
      }
  }

  var baseModules = [ref, directives$1];

  function updateAttrs(oldVnode, vnode) {
      var opts = vnode.componentOptions;
      if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
          return;
      }
      if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
          return;
      }
      var key, cur, old;
      var elm = vnode.elm;
      var oldAttrs = oldVnode.data.attrs || {};
      var attrs = vnode.data.attrs || {};
      // clone observed objects, as the user probably wants to mutate it
      if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
          attrs = vnode.data.attrs = extend({}, attrs);
      }
      for (key in attrs) {
          cur = attrs[key];
          old = oldAttrs[key];
          if (old !== cur) {
              setAttr(elm, key, cur, vnode.data.pre);
          }
      }
      // #4391: in IE9, setting type can reset value for input[type=radio]
      // #6666: IE/Edge forces progress value down to 1 before setting a max
      /* istanbul ignore if */
      if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
          setAttr(elm, 'value', attrs.value);
      }
      for (key in oldAttrs) {
          if (isUndef(attrs[key])) {
              if (isXlink(key)) {
                  elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
              }
              else if (!isEnumeratedAttr(key)) {
                  elm.removeAttribute(key);
              }
          }
      }
  }
  function setAttr(el, key, value, isInPre) {
      if (isInPre || el.tagName.indexOf('-') > -1) {
          baseSetAttr(el, key, value);
      }
      else if (isBooleanAttr(key)) {
          // set attribute for blank value
          // e.g. <option disabled>Select one</option>
          if (isFalsyAttrValue(value)) {
              el.removeAttribute(key);
          }
          else {
              // technically allowfullscreen is a boolean attribute for <iframe>,
              // but Flash expects a value of "true" when used on <embed> tag
              value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
              el.setAttribute(key, value);
          }
      }
      else if (isEnumeratedAttr(key)) {
          el.setAttribute(key, convertEnumeratedValue(key, value));
      }
      else if (isXlink(key)) {
          if (isFalsyAttrValue(value)) {
              el.removeAttributeNS(xlinkNS, getXlinkProp(key));
          }
          else {
              el.setAttributeNS(xlinkNS, key, value);
          }
      }
      else {
          baseSetAttr(el, key, value);
      }
  }
  function baseSetAttr(el, key, value) {
      if (isFalsyAttrValue(value)) {
          el.removeAttribute(key);
      }
      else {
          // #7138: IE10 & 11 fires input event when setting placeholder on
          // <textarea>... block the first input event and remove the blocker
          // immediately.
          /* istanbul ignore if */
          if (isIE &&
              !isIE9 &&
              el.tagName === 'TEXTAREA' &&
              key === 'placeholder' &&
              value !== '' &&
              !el.__ieph) {
              var blocker_1 = function (e) {
                  e.stopImmediatePropagation();
                  el.removeEventListener('input', blocker_1);
              };
              el.addEventListener('input', blocker_1);
              // $flow-disable-line
              el.__ieph = true; /* IE placeholder patched */
          }
          el.setAttribute(key, value);
      }
  }
  var attrs = {
      create: updateAttrs,
      update: updateAttrs
  };

  function updateClass(oldVnode, vnode) {
      var el = vnode.elm;
      var data = vnode.data;
      var oldData = oldVnode.data;
      if (isUndef(data.staticClass) &&
          isUndef(data.class) &&
          (isUndef(oldData) ||
              (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
          return;
      }
      var cls = genClassForVnode(vnode);
      // handle transition classes
      var transitionClass = el._transitionClasses;
      if (isDef(transitionClass)) {
          cls = concat(cls, stringifyClass(transitionClass));
      }
      // set the class
      if (cls !== el._prevClass) {
          el.setAttribute('class', cls);
          el._prevClass = cls;
      }
  }
  var klass$1 = {
      create: updateClass,
      update: updateClass
  };

  var validDivisionCharRE = /[\w).+\-_$\]]/;
  function parseFilters(exp) {
      var inSingle = false;
      var inDouble = false;
      var inTemplateString = false;
      var inRegex = false;
      var curly = 0;
      var square = 0;
      var paren = 0;
      var lastFilterIndex = 0;
      var c, prev, i, expression, filters;
      for (i = 0; i < exp.length; i++) {
          prev = c;
          c = exp.charCodeAt(i);
          if (inSingle) {
              if (c === 0x27 && prev !== 0x5c)
                  inSingle = false;
          }
          else if (inDouble) {
              if (c === 0x22 && prev !== 0x5c)
                  inDouble = false;
          }
          else if (inTemplateString) {
              if (c === 0x60 && prev !== 0x5c)
                  inTemplateString = false;
          }
          else if (inRegex) {
              if (c === 0x2f && prev !== 0x5c)
                  inRegex = false;
          }
          else if (c === 0x7c && // pipe
              exp.charCodeAt(i + 1) !== 0x7c &&
              exp.charCodeAt(i - 1) !== 0x7c &&
              !curly &&
              !square &&
              !paren) {
              if (expression === undefined) {
                  // first filter, end of expression
                  lastFilterIndex = i + 1;
                  expression = exp.slice(0, i).trim();
              }
              else {
                  pushFilter();
              }
          }
          else {
              switch (c) {
                  case 0x22:
                      inDouble = true;
                      break; // "
                  case 0x27:
                      inSingle = true;
                      break; // '
                  case 0x60:
                      inTemplateString = true;
                      break; // `
                  case 0x28:
                      paren++;
                      break; // (
                  case 0x29:
                      paren--;
                      break; // )
                  case 0x5b:
                      square++;
                      break; // [
                  case 0x5d:
                      square--;
                      break; // ]
                  case 0x7b:
                      curly++;
                      break; // {
                  case 0x7d:
                      curly--;
                      break; // }
              }
              if (c === 0x2f) {
                  // /
                  var j = i - 1;
                  var p 
                  // find first non-whitespace prev char
                  = void 0;
                  // find first non-whitespace prev char
                  for (; j >= 0; j--) {
                      p = exp.charAt(j);
                      if (p !== ' ')
                          break;
                  }
                  if (!p || !validDivisionCharRE.test(p)) {
                      inRegex = true;
                  }
              }
          }
      }
      if (expression === undefined) {
          expression = exp.slice(0, i).trim();
      }
      else if (lastFilterIndex !== 0) {
          pushFilter();
      }
      function pushFilter() {
          (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
          lastFilterIndex = i + 1;
      }
      if (filters) {
          for (i = 0; i < filters.length; i++) {
              expression = wrapFilter(expression, filters[i]);
          }
      }
      return expression;
  }
  function wrapFilter(exp, filter) {
      var i = filter.indexOf('(');
      if (i < 0) {
          // _f: resolveFilter
          return "_f(\"".concat(filter, "\")(").concat(exp, ")");
      }
      else {
          var name_1 = filter.slice(0, i);
          var args = filter.slice(i + 1);
          return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args);
      }
  }

  /* eslint-disable no-unused-vars */
  function baseWarn(msg, range) {
      console.error("[Vue compiler]: ".concat(msg));
  }
  /* eslint-enable no-unused-vars */
  function pluckModuleFunction(modules, key) {
      return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];
  }
  function addProp(el, name, value, range, dynamic) {
      (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
      el.plain = false;
  }
  function addAttr(el, name, value, range, dynamic) {
      var attrs = dynamic
          ? el.dynamicAttrs || (el.dynamicAttrs = [])
          : el.attrs || (el.attrs = []);
      attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
      el.plain = false;
  }
  // add a raw attr (use this in preTransforms)
  function addRawAttr(el, name, value, range) {
      el.attrsMap[name] = value;
      el.attrsList.push(rangeSetItem({ name: name, value: value }, range));
  }
  function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
      (el.directives || (el.directives = [])).push(rangeSetItem({
          name: name,
          rawName: rawName,
          value: value,
          arg: arg,
          isDynamicArg: isDynamicArg,
          modifiers: modifiers
      }, range));
      el.plain = false;
  }
  function prependModifierMarker(symbol, name, dynamic) {
      return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured
  }
  function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
      modifiers = modifiers || emptyObject;
      // warn prevent and passive modifier
      /* istanbul ignore if */
      if (warn && modifiers.prevent && modifiers.passive) {
          warn("passive and prevent can't be used together. " +
              "Passive handler can't prevent default event.", range);
      }
      // normalize click.right and click.middle since they don't actually fire
      // this is technically browser-specific, but at least for now browsers are
      // the only target envs that have right/middle clicks.
      if (modifiers.right) {
          if (dynamic) {
              name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")");
          }
          else if (name === 'click') {
              name = 'contextmenu';
              delete modifiers.right;
          }
      }
      else if (modifiers.middle) {
          if (dynamic) {
              name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")");
          }
          else if (name === 'click') {
              name = 'mouseup';
          }
      }
      // check capture modifier
      if (modifiers.capture) {
          delete modifiers.capture;
          name = prependModifierMarker('!', name, dynamic);
      }
      if (modifiers.once) {
          delete modifiers.once;
          name = prependModifierMarker('~', name, dynamic);
      }
      /* istanbul ignore if */
      if (modifiers.passive) {
          delete modifiers.passive;
          name = prependModifierMarker('&', name, dynamic);
      }
      var events;
      if (modifiers.native) {
          delete modifiers.native;
          events = el.nativeEvents || (el.nativeEvents = {});
      }
      else {
          events = el.events || (el.events = {});
      }
      var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);
      if (modifiers !== emptyObject) {
          newHandler.modifiers = modifiers;
      }
      var handlers = events[name];
      /* istanbul ignore if */
      if (Array.isArray(handlers)) {
          important ? handlers.unshift(newHandler) : handlers.push(newHandler);
      }
      else if (handlers) {
          events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
      }
      else {
          events[name] = newHandler;
      }
      el.plain = false;
  }
  function getRawBindingAttr(el, name) {
      return (el.rawAttrsMap[':' + name] ||
          el.rawAttrsMap['v-bind:' + name] ||
          el.rawAttrsMap[name]);
  }
  function getBindingAttr(el, name, getStatic) {
      var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
      if (dynamicValue != null) {
          return parseFilters(dynamicValue);
      }
      else if (getStatic !== false) {
          var staticValue = getAndRemoveAttr(el, name);
          if (staticValue != null) {
              return JSON.stringify(staticValue);
          }
      }
  }
  // note: this only removes the attr from the Array (attrsList) so that it
  // doesn't get processed by processAttrs.
  // By default it does NOT remove it from the map (attrsMap) because the map is
  // needed during codegen.
  function getAndRemoveAttr(el, name, removeFromMap) {
      var val;
      if ((val = el.attrsMap[name]) != null) {
          var list = el.attrsList;
          for (var i = 0, l = list.length; i < l; i++) {
              if (list[i].name === name) {
                  list.splice(i, 1);
                  break;
              }
          }
      }
      if (removeFromMap) {
          delete el.attrsMap[name];
      }
      return val;
  }
  function getAndRemoveAttrByRegex(el, name) {
      var list = el.attrsList;
      for (var i = 0, l = list.length; i < l; i++) {
          var attr = list[i];
          if (name.test(attr.name)) {
              list.splice(i, 1);
              return attr;
          }
      }
  }
  function rangeSetItem(item, range) {
      if (range) {
          if (range.start != null) {
              item.start = range.start;
          }
          if (range.end != null) {
              item.end = range.end;
          }
      }
      return item;
  }

  /**
   * Cross-platform code generation for component v-model
   */
  function genComponentModel(el, value, modifiers) {
      var _a = modifiers || {}, number = _a.number, trim = _a.trim;
      var baseValueExpression = '$$v';
      var valueExpression = baseValueExpression;
      if (trim) {
          valueExpression =
              "(typeof ".concat(baseValueExpression, " === 'string'") +
                  "? ".concat(baseValueExpression, ".trim()") +
                  ": ".concat(baseValueExpression, ")");
      }
      if (number) {
          valueExpression = "_n(".concat(valueExpression, ")");
      }
      var assignment = genAssignmentCode(value, valueExpression);
      el.model = {
          value: "(".concat(value, ")"),
          expression: JSON.stringify(value),
          callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}")
      };
  }
  /**
   * Cross-platform codegen helper for generating v-model value assignment code.
   */
  function genAssignmentCode(value, assignment) {
      var res = parseModel(value);
      if (res.key === null) {
          return "".concat(value, "=").concat(assignment);
      }
      else {
          return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")");
      }
  }
  /**
   * Parse a v-model expression into a base path and a final key segment.
   * Handles both dot-path and possible square brackets.
   *
   * Possible cases:
   *
   * - test
   * - test[key]
   * - test[test1[key]]
   * - test["a"][key]
   * - xxx.test[a[a].test1[key]]
   * - test.xxx.a["asa"][test1[key]]
   *
   */
  var len, str, chr, index, expressionPos, expressionEndPos;
  function parseModel(val) {
      // Fix https://github.com/vuejs/vue/pull/7730
      // allow v-model="obj.val " (trailing whitespace)
      val = val.trim();
      len = val.length;
      if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
          index = val.lastIndexOf('.');
          if (index > -1) {
              return {
                  exp: val.slice(0, index),
                  key: '"' + val.slice(index + 1) + '"'
              };
          }
          else {
              return {
                  exp: val,
                  key: null
              };
          }
      }
      str = val;
      index = expressionPos = expressionEndPos = 0;
      while (!eof()) {
          chr = next();
          /* istanbul ignore if */
          if (isStringStart(chr)) {
              parseString(chr);
          }
          else if (chr === 0x5b) {
              parseBracket(chr);
          }
      }
      return {
          exp: val.slice(0, expressionPos),
          key: val.slice(expressionPos + 1, expressionEndPos)
      };
  }
  function next() {
      return str.charCodeAt(++index);
  }
  function eof() {
      return index >= len;
  }
  function isStringStart(chr) {
      return chr === 0x22 || chr === 0x27;
  }
  function parseBracket(chr) {
      var inBracket = 1;
      expressionPos = index;
      while (!eof()) {
          chr = next();
          if (isStringStart(chr)) {
              parseString(chr);
              continue;
          }
          if (chr === 0x5b)
              inBracket++;
          if (chr === 0x5d)
              inBracket--;
          if (inBracket === 0) {
              expressionEndPos = index;
              break;
          }
      }
  }
  function parseString(chr) {
      var stringQuote = chr;
      while (!eof()) {
          chr = next();
          if (chr === stringQuote) {
              break;
          }
      }
  }

  var warn$1;
  // in some cases, the event used has to be determined at runtime
  // so we used some reserved tokens during compile.
  var RANGE_TOKEN = '__r';
  var CHECKBOX_RADIO_TOKEN = '__c';
  function model$1(el, dir, _warn) {
      warn$1 = _warn;
      var value = dir.value;
      var modifiers = dir.modifiers;
      var tag = el.tag;
      var type = el.attrsMap.type;
      {
          // inputs with type="file" are read only and setting the input's
          // value will throw an error.
          if (tag === 'input' && type === 'file') {
              warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") +
                  "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']);
          }
      }
      if (el.component) {
          genComponentModel(el, value, modifiers);
          // component v-model doesn't need extra runtime
          return false;
      }
      else if (tag === 'select') {
          genSelect(el, value, modifiers);
      }
      else if (tag === 'input' && type === 'checkbox') {
          genCheckboxModel(el, value, modifiers);
      }
      else if (tag === 'input' && type === 'radio') {
          genRadioModel(el, value, modifiers);
      }
      else if (tag === 'input' || tag === 'textarea') {
          genDefaultModel(el, value, modifiers);
      }
      else if (!config.isReservedTag(tag)) {
          genComponentModel(el, value, modifiers);
          // component v-model doesn't need extra runtime
          return false;
      }
      else {
          warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
              "v-model is not supported on this element type. " +
              "If you are working with contenteditable, it's recommended to " +
              'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);
      }
      // ensure runtime directive metadata
      return true;
  }
  function genCheckboxModel(el, value, modifiers) {
      var number = modifiers && modifiers.number;
      var valueBinding = getBindingAttr(el, 'value') || 'null';
      var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
      var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
      addProp(el, 'checked', "Array.isArray(".concat(value, ")") +
          "?_i(".concat(value, ",").concat(valueBinding, ")>-1") +
          (trueValueBinding === 'true'
              ? ":(".concat(value, ")")
              : ":_q(".concat(value, ",").concat(trueValueBinding, ")")));
      addHandler(el, 'change', "var $$a=".concat(value, ",") +
          '$$el=$event.target,' +
          "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") +
          'if(Array.isArray($$a)){' +
          "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") +
          '$$i=_i($$a,$$v);' +
          "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") +
          "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") +
          "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true);
  }
  function genRadioModel(el, value, modifiers) {
      var number = modifiers && modifiers.number;
      var valueBinding = getBindingAttr(el, 'value') || 'null';
      valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding;
      addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")"));
      addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
  }
  function genSelect(el, value, modifiers) {
      var number = modifiers && modifiers.number;
      var selectedVal = "Array.prototype.filter" +
          ".call($event.target.options,function(o){return o.selected})" +
          ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
          "return ".concat(number ? '_n(val)' : 'val', "})");
      var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
      var code = "var $$selectedVal = ".concat(selectedVal, ";");
      code = "".concat(code, " ").concat(genAssignmentCode(value, assignment));
      addHandler(el, 'change', code, null, true);
  }
  function genDefaultModel(el, value, modifiers) {
      var type = el.attrsMap.type;
      // warn if v-bind:value conflicts with v-model
      // except for inputs with v-bind:type
      {
          var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
          var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
          if (value_1 && !typeBinding) {
              var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
              warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") +
                  'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
          }
      }
      var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;
      var needCompositionGuard = !lazy && type !== 'range';
      var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
      var valueExpression = '$event.target.value';
      if (trim) {
          valueExpression = "$event.target.value.trim()";
      }
      if (number) {
          valueExpression = "_n(".concat(valueExpression, ")");
      }
      var code = genAssignmentCode(value, valueExpression);
      if (needCompositionGuard) {
          code = "if($event.target.composing)return;".concat(code);
      }
      addProp(el, 'value', "(".concat(value, ")"));
      addHandler(el, event, code, null, true);
      if (trim || number) {
          addHandler(el, 'blur', '$forceUpdate()');
      }
  }

  // normalize v-model event tokens that can only be determined at runtime.
  // it's important to place the event as the first in the array because
  // the whole point is ensuring the v-model callback gets called before
  // user-attached handlers.
  function normalizeEvents(on) {
      /* istanbul ignore if */
      if (isDef(on[RANGE_TOKEN])) {
          // IE input[type=range] only supports `change` event
          var event_1 = isIE ? 'change' : 'input';
          on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);
          delete on[RANGE_TOKEN];
      }
      // This was originally intended to fix #4521 but no longer necessary
      // after 2.5. Keeping it for backwards compat with generated code from < 2.4
      /* istanbul ignore if */
      if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
          on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
          delete on[CHECKBOX_RADIO_TOKEN];
      }
  }
  var target;
  function createOnceHandler(event, handler, capture) {
      var _target = target; // save current target element in closure
      return function onceHandler() {
          var res = handler.apply(null, arguments);
          if (res !== null) {
              remove(event, onceHandler, capture, _target);
          }
      };
  }
  // #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
  // implementation and does not fire microtasks in between event propagation, so
  // safe to exclude.
  var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
  function add(name, handler, capture, passive) {
      // async edge case #6566: inner click event triggers patch, event handler
      // attached to outer element during patch, and triggered again. This
      // happens because browsers fire microtask ticks between event propagation.
      // the solution is simple: we save the timestamp when a handler is attached,
      // and the handler would only fire if the event passed to it was fired
      // AFTER it was attached.
      if (useMicrotaskFix) {
          var attachedTimestamp_1 = currentFlushTimestamp;
          var original_1 = handler;
          //@ts-expect-error
          handler = original_1._wrapper = function (e) {
              if (
              // no bubbling, should always fire.
              // this is just a safety net in case event.timeStamp is unreliable in
              // certain weird environments...
              e.target === e.currentTarget ||
                  // event is fired after handler attachment
                  e.timeStamp >= attachedTimestamp_1 ||
                  // bail for environments that have buggy event.timeStamp implementations
                  // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
                  // #9681 QtWebEngine event.timeStamp is negative value
                  e.timeStamp <= 0 ||
                  // #9448 bail if event is fired in another document in a multi-page
                  // electron/nw.js app, since event.timeStamp will be using a different
                  // starting reference
                  e.target.ownerDocument !== document) {
                  return original_1.apply(this, arguments);
              }
          };
      }
      target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);
  }
  function remove(name, handler, capture, _target) {
      (_target || target).removeEventListener(name, 
      //@ts-expect-error
      handler._wrapper || handler, capture);
  }
  function updateDOMListeners(oldVnode, vnode) {
      if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
          return;
      }
      var on = vnode.data.on || {};
      var oldOn = oldVnode.data.on || {};
      // vnode is empty when removing all listeners,
      // and use old vnode dom element
      target = vnode.elm || oldVnode.elm;
      normalizeEvents(on);
      updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
      target = undefined;
  }
  var events = {
      create: updateDOMListeners,
      update: updateDOMListeners,
      // @ts-expect-error emptyNode has actually data
      destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }
  };

  var svgContainer;
  function updateDOMProps(oldVnode, vnode) {
      if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
          return;
      }
      var key, cur;
      var elm = vnode.elm;
      var oldProps = oldVnode.data.domProps || {};
      var props = vnode.data.domProps || {};
      // clone observed objects, as the user probably wants to mutate it
      if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
          props = vnode.data.domProps = extend({}, props);
      }
      for (key in oldProps) {
          if (!(key in props)) {
              elm[key] = '';
          }
      }
      for (key in props) {
          cur = props[key];
          // ignore children if the node has textContent or innerHTML,
          // as these will throw away existing DOM nodes and cause removal errors
          // on subsequent patches (#3360)
          if (key === 'textContent' || key === 'innerHTML') {
              if (vnode.children)
                  vnode.children.length = 0;
              if (cur === oldProps[key])
                  continue;
              // #6601 work around Chrome version <= 55 bug where single textNode
              // replaced by innerHTML/textContent retains its parentNode property
              if (elm.childNodes.length === 1) {
                  elm.removeChild(elm.childNodes[0]);
              }
          }
          if (key === 'value' && elm.tagName !== 'PROGRESS') {
              // store value as _value as well since
              // non-string values will be stringified
              elm._value = cur;
              // avoid resetting cursor position when value is the same
              var strCur = isUndef(cur) ? '' : String(cur);
              if (shouldUpdateValue(elm, strCur)) {
                  elm.value = strCur;
              }
          }
          else if (key === 'innerHTML' &&
              isSVG(elm.tagName) &&
              isUndef(elm.innerHTML)) {
              // IE doesn't support innerHTML for SVG elements
              svgContainer = svgContainer || document.createElement('div');
              svgContainer.innerHTML = "<svg>".concat(cur, "</svg>");
              var svg = svgContainer.firstChild;
              while (elm.firstChild) {
                  elm.removeChild(elm.firstChild);
              }
              while (svg.firstChild) {
                  elm.appendChild(svg.firstChild);
              }
          }
          else if (
          // skip the update if old and new VDOM state is the same.
          // `value` is handled separately because the DOM value may be temporarily
          // out of sync with VDOM state due to focus, composition and modifiers.
          // This  #4521 by skipping the unnecessary `checked` update.
          cur !== oldProps[key]) {
              // some property updates can throw
              // e.g. `value` on <progress> w/ non-finite value
              try {
                  elm[key] = cur;
              }
              catch (e) { }
          }
      }
  }
  function shouldUpdateValue(elm, checkVal) {
      return (
      //@ts-expect-error
      !elm.composing &&
          (elm.tagName === 'OPTION' ||
              isNotInFocusAndDirty(elm, checkVal) ||
              isDirtyWithModifiers(elm, checkVal)));
  }
  function isNotInFocusAndDirty(elm, checkVal) {
      // return true when textbox (.number and .trim) loses focus and its value is
      // not equal to the updated value
      var notInFocus = true;
      // #6157
      // work around IE bug when accessing document.activeElement in an iframe
      try {
          notInFocus = document.activeElement !== elm;
      }
      catch (e) { }
      return notInFocus && elm.value !== checkVal;
  }
  function isDirtyWithModifiers(elm, newVal) {
      var value = elm.value;
      var modifiers = elm._vModifiers; // injected by v-model runtime
      if (isDef(modifiers)) {
          if (modifiers.number) {
              return toNumber(value) !== toNumber(newVal);
          }
          if (modifiers.trim) {
              return value.trim() !== newVal.trim();
          }
      }
      return value !== newVal;
  }
  var domProps = {
      create: updateDOMProps,
      update: updateDOMProps
  };

  var parseStyleText = cached(function (cssText) {
      var res = {};
      var listDelimiter = /;(?![^(]*\))/g;
      var propertyDelimiter = /:(.+)/;
      cssText.split(listDelimiter).forEach(function (item) {
          if (item) {
              var tmp = item.split(propertyDelimiter);
              tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
          }
      });
      return res;
  });
  // merge static and dynamic style data on the same vnode
  function normalizeStyleData(data) {
      var style = normalizeStyleBinding(data.style);
      // static style is pre-processed into an object during compilation
      // and is always a fresh object, so it's safe to merge into it
      return data.staticStyle ? extend(data.staticStyle, style) : style;
  }
  // normalize possible array / string values into Object
  function normalizeStyleBinding(bindingStyle) {
      if (Array.isArray(bindingStyle)) {
          return toObject(bindingStyle);
      }
      if (typeof bindingStyle === 'string') {
          return parseStyleText(bindingStyle);
      }
      return bindingStyle;
  }
  /**
   * parent component style should be after child's
   * so that parent component's style could override it
   */
  function getStyle(vnode, checkChild) {
      var res = {};
      var styleData;
      if (checkChild) {
          var childNode = vnode;
          while (childNode.componentInstance) {
              childNode = childNode.componentInstance._vnode;
              if (childNode &&
                  childNode.data &&
                  (styleData = normalizeStyleData(childNode.data))) {
                  extend(res, styleData);
              }
          }
      }
      if ((styleData = normalizeStyleData(vnode.data))) {
          extend(res, styleData);
      }
      var parentNode = vnode;
      // @ts-expect-error parentNode.parent not VNodeWithData
      while ((parentNode = parentNode.parent)) {
          if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
              extend(res, styleData);
          }
      }
      return res;
  }

  var cssVarRE = /^--/;
  var importantRE = /\s*!important$/;
  var setProp = function (el, name, val) {
      /* istanbul ignore if */
      if (cssVarRE.test(name)) {
          el.style.setProperty(name, val);
      }
      else if (importantRE.test(val)) {
          el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
      }
      else {
          var normalizedName = normalize(name);
          if (Array.isArray(val)) {
              // Support values array created by autoprefixer, e.g.
              // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
              // Set them one by one, and the browser will only set those it can recognize
              for (var i = 0, len = val.length; i < len; i++) {
                  el.style[normalizedName] = val[i];
              }
          }
          else {
              el.style[normalizedName] = val;
          }
      }
  };
  var vendorNames = ['Webkit', 'Moz', 'ms'];
  var emptyStyle;
  var normalize = cached(function (prop) {
      emptyStyle = emptyStyle || document.createElement('div').style;
      prop = camelize(prop);
      if (prop !== 'filter' && prop in emptyStyle) {
          return prop;
      }
      var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
      for (var i = 0; i < vendorNames.length; i++) {
          var name_1 = vendorNames[i] + capName;
          if (name_1 in emptyStyle) {
              return name_1;
          }
      }
  });
  function updateStyle(oldVnode, vnode) {
      var data = vnode.data;
      var oldData = oldVnode.data;
      if (isUndef(data.staticStyle) &&
          isUndef(data.style) &&
          isUndef(oldData.staticStyle) &&
          isUndef(oldData.style)) {
          return;
      }
      var cur, name;
      var el = vnode.elm;
      var oldStaticStyle = oldData.staticStyle;
      var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
      // if static style exists, stylebinding already merged into it when doing normalizeStyleData
      var oldStyle = oldStaticStyle || oldStyleBinding;
      var style = normalizeStyleBinding(vnode.data.style) || {};
      // store normalized style under a different key for next diff
      // make sure to clone it if it's reactive, since the user likely wants
      // to mutate it.
      vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
      var newStyle = getStyle(vnode, true);
      for (name in oldStyle) {
          if (isUndef(newStyle[name])) {
              setProp(el, name, '');
          }
      }
      for (name in newStyle) {
          cur = newStyle[name];
          if (cur !== oldStyle[name]) {
              // ie9 setting to null has no effect, must use empty string
              setProp(el, name, cur == null ? '' : cur);
          }
      }
  }
  var style$1 = {
      create: updateStyle,
      update: updateStyle
  };

  var whitespaceRE$1 = /\s+/;
  /**
   * Add class with compatibility for SVG since classList is not supported on
   * SVG elements in IE
   */
  function addClass(el, cls) {
      /* istanbul ignore if */
      if (!cls || !(cls = cls.trim())) {
          return;
      }
      /* istanbul ignore else */
      if (el.classList) {
          if (cls.indexOf(' ') > -1) {
              cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); });
          }
          else {
              el.classList.add(cls);
          }
      }
      else {
          var cur = " ".concat(el.getAttribute('class') || '', " ");
          if (cur.indexOf(' ' + cls + ' ') < 0) {
              el.setAttribute('class', (cur + cls).trim());
          }
      }
  }
  /**
   * Remove class with compatibility for SVG since classList is not supported on
   * SVG elements in IE
   */
  function removeClass(el, cls) {
      /* istanbul ignore if */
      if (!cls || !(cls = cls.trim())) {
          return;
      }
      /* istanbul ignore else */
      if (el.classList) {
          if (cls.indexOf(' ') > -1) {
              cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); });
          }
          else {
              el.classList.remove(cls);
          }
          if (!el.classList.length) {
              el.removeAttribute('class');
          }
      }
      else {
          var cur = " ".concat(el.getAttribute('class') || '', " ");
          var tar = ' ' + cls + ' ';
          while (cur.indexOf(tar) >= 0) {
              cur = cur.replace(tar, ' ');
          }
          cur = cur.trim();
          if (cur) {
              el.setAttribute('class', cur);
          }
          else {
              el.removeAttribute('class');
          }
      }
  }

  function resolveTransition(def) {
      if (!def) {
          return;
      }
      /* istanbul ignore else */
      if (typeof def === 'object') {
          var res = {};
          if (def.css !== false) {
              extend(res, autoCssTransition(def.name || 'v'));
          }
          extend(res, def);
          return res;
      }
      else if (typeof def === 'string') {
          return autoCssTransition(def);
      }
  }
  var autoCssTransition = cached(function (name) {
      return {
          enterClass: "".concat(name, "-enter"),
          enterToClass: "".concat(name, "-enter-to"),
          enterActiveClass: "".concat(name, "-enter-active"),
          leaveClass: "".concat(name, "-leave"),
          leaveToClass: "".concat(name, "-leave-to"),
          leaveActiveClass: "".concat(name, "-leave-active")
      };
  });
  var hasTransition = inBrowser && !isIE9;
  var TRANSITION = 'transition';
  var ANIMATION = 'animation';
  // Transition property/event sniffing
  var transitionProp = 'transition';
  var transitionEndEvent = 'transitionend';
  var animationProp = 'animation';
  var animationEndEvent = 'animationend';
  if (hasTransition) {
      /* istanbul ignore if */
      if (window.ontransitionend === undefined &&
          window.onwebkittransitionend !== undefined) {
          transitionProp = 'WebkitTransition';
          transitionEndEvent = 'webkitTransitionEnd';
      }
      if (window.onanimationend === undefined &&
          window.onwebkitanimationend !== undefined) {
          animationProp = 'WebkitAnimation';
          animationEndEvent = 'webkitAnimationEnd';
      }
  }
  // binding to window is necessary to make hot reload work in IE in strict mode
  var raf = inBrowser
      ? window.requestAnimationFrame
          ? window.requestAnimationFrame.bind(window)
          : setTimeout
      : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };
  function nextFrame(fn) {
      raf(function () {
          // @ts-expect-error
          raf(fn);
      });
  }
  function addTransitionClass(el, cls) {
      var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
      if (transitionClasses.indexOf(cls) < 0) {
          transitionClasses.push(cls);
          addClass(el, cls);
      }
  }
  function removeTransitionClass(el, cls) {
      if (el._transitionClasses) {
          remove$2(el._transitionClasses, cls);
      }
      removeClass(el, cls);
  }
  function whenTransitionEnds(el, expectedType, cb) {
      var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;
      if (!type)
          return cb();
      var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
      var ended = 0;
      var end = function () {
          el.removeEventListener(event, onEnd);
          cb();
      };
      var onEnd = function (e) {
          if (e.target === el) {
              if (++ended >= propCount) {
                  end();
              }
          }
      };
      setTimeout(function () {
          if (ended < propCount) {
              end();
          }
      }, timeout + 1);
      el.addEventListener(event, onEnd);
  }
  var transformRE = /\b(transform|all)(,|$)/;
  function getTransitionInfo(el, expectedType) {
      var styles = window.getComputedStyle(el);
      // JSDOM may return undefined for transition properties
      var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
      var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
      var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
      var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
      var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
      var animationTimeout = getTimeout(animationDelays, animationDurations);
      var type;
      var timeout = 0;
      var propCount = 0;
      /* istanbul ignore if */
      if (expectedType === TRANSITION) {
          if (transitionTimeout > 0) {
              type = TRANSITION;
              timeout = transitionTimeout;
              propCount = transitionDurations.length;
          }
      }
      else if (expectedType === ANIMATION) {
          if (animationTimeout > 0) {
              type = ANIMATION;
              timeout = animationTimeout;
              propCount = animationDurations.length;
          }
      }
      else {
          timeout = Math.max(transitionTimeout, animationTimeout);
          type =
              timeout > 0
                  ? transitionTimeout > animationTimeout
                      ? TRANSITION
                      : ANIMATION
                  : null;
          propCount = type
              ? type === TRANSITION
                  ? transitionDurations.length
                  : animationDurations.length
              : 0;
      }
      var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
      return {
          type: type,
          timeout: timeout,
          propCount: propCount,
          hasTransform: hasTransform
      };
  }
  function getTimeout(delays, durations) {
      /* istanbul ignore next */
      while (delays.length < durations.length) {
          delays = delays.concat(delays);
      }
      return Math.max.apply(null, durations.map(function (d, i) {
          return toMs(d) + toMs(delays[i]);
      }));
  }
  // Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
  // in a locale-dependent way, using a comma instead of a dot.
  // If comma is not replaced with a dot, the input will be rounded down (i.e. acting
  // as a floor function) causing unexpected behaviors
  function toMs(s) {
      return Number(s.slice(0, -1).replace(',', '.')) * 1000;
  }

  function enter(vnode, toggleDisplay) {
      var el = vnode.elm;
      // call leave callback now
      if (isDef(el._leaveCb)) {
          el._leaveCb.cancelled = true;
          el._leaveCb();
      }
      var data = resolveTransition(vnode.data.transition);
      if (isUndef(data)) {
          return;
      }
      /* istanbul ignore if */
      if (isDef(el._enterCb) || el.nodeType !== 1) {
          return;
      }
      var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;
      // activeInstance will always be the <transition> component managing this
      // transition. One edge case to check is when the <transition> is placed
      // as the root node of a child component. In that case we need to check
      // <transition>'s parent for appear check.
      var context = activeInstance;
      var transitionNode = activeInstance.$vnode;
      while (transitionNode && transitionNode.parent) {
          context = transitionNode.context;
          transitionNode = transitionNode.parent;
      }
      var isAppear = !context._isMounted || !vnode.isRootInsert;
      if (isAppear && !appear && appear !== '') {
          return;
      }
      var startClass = isAppear && appearClass ? appearClass : enterClass;
      var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
      var toClass = isAppear && appearToClass ? appearToClass : enterToClass;
      var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
      var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
      var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
      var enterCancelledHook = isAppear
          ? appearCancelled || enterCancelled
          : enterCancelled;
      var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
      if (explicitEnterDuration != null) {
          checkDuration(explicitEnterDuration, 'enter', vnode);
      }
      var expectsCSS = css !== false && !isIE9;
      var userWantsControl = getHookArgumentsLength(enterHook);
      var cb = (el._enterCb = once(function () {
          if (expectsCSS) {
              removeTransitionClass(el, toClass);
              removeTransitionClass(el, activeClass);
          }
          // @ts-expect-error
          if (cb.cancelled) {
              if (expectsCSS) {
                  removeTransitionClass(el, startClass);
              }
              enterCancelledHook && enterCancelledHook(el);
          }
          else {
              afterEnterHook && afterEnterHook(el);
          }
          el._enterCb = null;
      }));
      if (!vnode.data.show) {
          // remove pending leave element on enter by injecting an insert hook
          mergeVNodeHook(vnode, 'insert', function () {
              var parent = el.parentNode;
              var pendingNode = parent && parent._pending && parent._pending[vnode.key];
              if (pendingNode &&
                  pendingNode.tag === vnode.tag &&
                  pendingNode.elm._leaveCb) {
                  pendingNode.elm._leaveCb();
              }
              enterHook && enterHook(el, cb);
          });
      }
      // start enter transition
      beforeEnterHook && beforeEnterHook(el);
      if (expectsCSS) {
          addTransitionClass(el, startClass);
          addTransitionClass(el, activeClass);
          nextFrame(function () {
              removeTransitionClass(el, startClass);
              // @ts-expect-error
              if (!cb.cancelled) {
                  addTransitionClass(el, toClass);
                  if (!userWantsControl) {
                      if (isValidDuration(explicitEnterDuration)) {
                          setTimeout(cb, explicitEnterDuration);
                      }
                      else {
                          whenTransitionEnds(el, type, cb);
                      }
                  }
              }
          });
      }
      if (vnode.data.show) {
          toggleDisplay && toggleDisplay();
          enterHook && enterHook(el, cb);
      }
      if (!expectsCSS && !userWantsControl) {
          cb();
      }
  }
  function leave(vnode, rm) {
      var el = vnode.elm;
      // call enter callback now
      if (isDef(el._enterCb)) {
          el._enterCb.cancelled = true;
          el._enterCb();
      }
      var data = resolveTransition(vnode.data.transition);
      if (isUndef(data) || el.nodeType !== 1) {
          return rm();
      }
      /* istanbul ignore if */
      if (isDef(el._leaveCb)) {
          return;
      }
      var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;
      var expectsCSS = css !== false && !isIE9;
      var userWantsControl = getHookArgumentsLength(leave);
      var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
      if (isDef(explicitLeaveDuration)) {
          checkDuration(explicitLeaveDuration, 'leave', vnode);
      }
      var cb = (el._leaveCb = once(function () {
          if (el.parentNode && el.parentNode._pending) {
              el.parentNode._pending[vnode.key] = null;
          }
          if (expectsCSS) {
              removeTransitionClass(el, leaveToClass);
              removeTransitionClass(el, leaveActiveClass);
          }
          // @ts-expect-error
          if (cb.cancelled) {
              if (expectsCSS) {
                  removeTransitionClass(el, leaveClass);
              }
              leaveCancelled && leaveCancelled(el);
          }
          else {
              rm();
              afterLeave && afterLeave(el);
          }
          el._leaveCb = null;
      }));
      if (delayLeave) {
          delayLeave(performLeave);
      }
      else {
          performLeave();
      }
      function performLeave() {
          // the delayed leave may have already been cancelled
          // @ts-expect-error
          if (cb.cancelled) {
              return;
          }
          // record leaving element
          if (!vnode.data.show && el.parentNode) {
              (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
                  vnode;
          }
          beforeLeave && beforeLeave(el);
          if (expectsCSS) {
              addTransitionClass(el, leaveClass);
              addTransitionClass(el, leaveActiveClass);
              nextFrame(function () {
                  removeTransitionClass(el, leaveClass);
                  // @ts-expect-error
                  if (!cb.cancelled) {
                      addTransitionClass(el, leaveToClass);
                      if (!userWantsControl) {
                          if (isValidDuration(explicitLeaveDuration)) {
                              setTimeout(cb, explicitLeaveDuration);
                          }
                          else {
                              whenTransitionEnds(el, type, cb);
                          }
                      }
                  }
              });
          }
          leave && leave(el, cb);
          if (!expectsCSS && !userWantsControl) {
              cb();
          }
      }
  }
  // only used in dev mode
  function checkDuration(val, name, vnode) {
      if (typeof val !== 'number') {
          warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") +
              "got ".concat(JSON.stringify(val), "."), vnode.context);
      }
      else if (isNaN(val)) {
          warn$2("<transition> explicit ".concat(name, " duration is NaN - ") +
              'the duration expression might be incorrect.', vnode.context);
      }
  }
  function isValidDuration(val) {
      return typeof val === 'number' && !isNaN(val);
  }
  /**
   * Normalize a transition hook's argument length. The hook may be:
   * - a merged hook (invoker) with the original in .fns
   * - a wrapped component method (check ._length)
   * - a plain function (.length)
   */
  function getHookArgumentsLength(fn) {
      if (isUndef(fn)) {
          return false;
      }
      // @ts-expect-error
      var invokerFns = fn.fns;
      if (isDef(invokerFns)) {
          // invoker
          return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
      }
      else {
          // @ts-expect-error
          return (fn._length || fn.length) > 1;
      }
  }
  function _enter(_, vnode) {
      if (vnode.data.show !== true) {
          enter(vnode);
      }
  }
  var transition = inBrowser
      ? {
          create: _enter,
          activate: _enter,
          remove: function (vnode, rm) {
              /* istanbul ignore else */
              if (vnode.data.show !== true) {
                  // @ts-expect-error
                  leave(vnode, rm);
              }
              else {
                  rm();
              }
          }
      }
      : {};

  var platformModules = [attrs, klass$1, events, domProps, style$1, transition];

  // the directive module should be applied last, after all
  // built-in modules have been applied.
  var modules$1 = platformModules.concat(baseModules);
  var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 });

  /**
   * Not type checking this file because flow doesn't like attaching
   * properties to Elements.
   */
  /* istanbul ignore if */
  if (isIE9) {
      // http://www.matts411.com/post/internet-explorer-9-oninput/
      document.addEventListener('selectionchange', function () {
          var el = document.activeElement;
          // @ts-expect-error
          if (el && el.vmodel) {
              trigger(el, 'input');
          }
      });
  }
  var directive = {
      inserted: function (el, binding, vnode, oldVnode) {
          if (vnode.tag === 'select') {
              // #6903
              if (oldVnode.elm && !oldVnode.elm._vOptions) {
                  mergeVNodeHook(vnode, 'postpatch', function () {
                      directive.componentUpdated(el, binding, vnode);
                  });
              }
              else {
                  setSelected(el, binding, vnode.context);
              }
              el._vOptions = [].map.call(el.options, getValue);
          }
          else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
              el._vModifiers = binding.modifiers;
              if (!binding.modifiers.lazy) {
                  el.addEventListener('compositionstart', onCompositionStart);
                  el.addEventListener('compositionend', onCompositionEnd);
                  // Safari < 10.2 & UIWebView doesn't fire compositionend when
                  // switching focus before confirming composition choice
                  // this also fixes the issue where some browsers e.g. iOS Chrome
                  // fires "change" instead of "input" on autocomplete.
                  el.addEventListener('change', onCompositionEnd);
                  /* istanbul ignore if */
                  if (isIE9) {
                      el.vmodel = true;
                  }
              }
          }
      },
      componentUpdated: function (el, binding, vnode) {
          if (vnode.tag === 'select') {
              setSelected(el, binding, vnode.context);
              // in case the options rendered by v-for have changed,
              // it's possible that the value is out-of-sync with the rendered options.
              // detect such cases and filter out values that no longer has a matching
              // option in the DOM.
              var prevOptions_1 = el._vOptions;
              var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));
              if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {
                  // trigger change event if
                  // no matching option found for at least one value
                  var needReset = el.multiple
                      ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })
                      : binding.value !== binding.oldValue &&
                          hasNoMatchingOption(binding.value, curOptions_1);
                  if (needReset) {
                      trigger(el, 'change');
                  }
              }
          }
      }
  };
  function setSelected(el, binding, vm) {
      actuallySetSelected(el, binding, vm);
      /* istanbul ignore if */
      if (isIE || isEdge) {
          setTimeout(function () {
              actuallySetSelected(el, binding, vm);
          }, 0);
      }
  }
  function actuallySetSelected(el, binding, vm) {
      var value = binding.value;
      var isMultiple = el.multiple;
      if (isMultiple && !Array.isArray(value)) {
          warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") +
                  "expects an Array value for its binding, but got ".concat(Object.prototype.toString
                      .call(value)
                      .slice(8, -1)), vm);
          return;
      }
      var selected, option;
      for (var i = 0, l = el.options.length; i < l; i++) {
          option = el.options[i];
          if (isMultiple) {
              selected = looseIndexOf(value, getValue(option)) > -1;
              if (option.selected !== selected) {
                  option.selected = selected;
              }
          }
          else {
              if (looseEqual(getValue(option), value)) {
                  if (el.selectedIndex !== i) {
                      el.selectedIndex = i;
                  }
                  return;
              }
          }
      }
      if (!isMultiple) {
          el.selectedIndex = -1;
      }
  }
  function hasNoMatchingOption(value, options) {
      return options.every(function (o) { return !looseEqual(o, value); });
  }
  function getValue(option) {
      return '_value' in option ? option._value : option.value;
  }
  function onCompositionStart(e) {
      e.target.composing = true;
  }
  function onCompositionEnd(e) {
      // prevent triggering an input event for no reason
      if (!e.target.composing)
          return;
      e.target.composing = false;
      trigger(e.target, 'input');
  }
  function trigger(el, type) {
      var e = document.createEvent('HTMLEvents');
      e.initEvent(type, true, true);
      el.dispatchEvent(e);
  }

  // recursively search for possible transition defined inside the component root
  function locateNode(vnode) {
      // @ts-expect-error
      return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
          ? locateNode(vnode.componentInstance._vnode)
          : vnode;
  }
  var show = {
      bind: function (el, _a, vnode) {
          var value = _a.value;
          vnode = locateNode(vnode);
          var transition = vnode.data && vnode.data.transition;
          var originalDisplay = (el.__vOriginalDisplay =
              el.style.display === 'none' ? '' : el.style.display);
          if (value && transition) {
              vnode.data.show = true;
              enter(vnode, function () {
                  el.style.display = originalDisplay;
              });
          }
          else {
              el.style.display = value ? originalDisplay : 'none';
          }
      },
      update: function (el, _a, vnode) {
          var value = _a.value, oldValue = _a.oldValue;
          /* istanbul ignore if */
          if (!value === !oldValue)
              return;
          vnode = locateNode(vnode);
          var transition = vnode.data && vnode.data.transition;
          if (transition) {
              vnode.data.show = true;
              if (value) {
                  enter(vnode, function () {
                      el.style.display = el.__vOriginalDisplay;
                  });
              }
              else {
                  leave(vnode, function () {
                      el.style.display = 'none';
                  });
              }
          }
          else {
              el.style.display = value ? el.__vOriginalDisplay : 'none';
          }
      },
      unbind: function (el, binding, vnode, oldVnode, isDestroy) {
          if (!isDestroy) {
              el.style.display = el.__vOriginalDisplay;
          }
      }
  };

  var platformDirectives = {
      model: directive,
      show: show
  };

  // Provides transition support for a single element/component.
  var transitionProps = {
      name: String,
      appear: Boolean,
      css: Boolean,
      mode: String,
      type: String,
      enterClass: String,
      leaveClass: String,
      enterToClass: String,
      leaveToClass: String,
      enterActiveClass: String,
      leaveActiveClass: String,
      appearClass: String,
      appearActiveClass: String,
      appearToClass: String,
      duration: [Number, String, Object]
  };
  // in case the child is also an abstract component, e.g. <keep-alive>
  // we want to recursively retrieve the real component to be rendered
  function getRealChild(vnode) {
      var compOptions = vnode && vnode.componentOptions;
      if (compOptions && compOptions.Ctor.options.abstract) {
          return getRealChild(getFirstComponentChild(compOptions.children));
      }
      else {
          return vnode;
      }
  }
  function extractTransitionData(comp) {
      var data = {};
      var options = comp.$options;
      // props
      for (var key in options.propsData) {
          data[key] = comp[key];
      }
      // events.
      // extract listeners and pass them directly to the transition methods
      var listeners = options._parentListeners;
      for (var key in listeners) {
          data[camelize(key)] = listeners[key];
      }
      return data;
  }
  function placeholder(h, rawChild) {
      // @ts-expect-error
      if (/\d-keep-alive$/.test(rawChild.tag)) {
          return h('keep-alive', {
              props: rawChild.componentOptions.propsData
          });
      }
  }
  function hasParentTransition(vnode) {
      while ((vnode = vnode.parent)) {
          if (vnode.data.transition) {
              return true;
          }
      }
  }
  function isSameChild(child, oldChild) {
      return oldChild.key === child.key && oldChild.tag === child.tag;
  }
  var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
  var isVShowDirective = function (d) { return d.name === 'show'; };
  var Transition = {
      name: 'transition',
      props: transitionProps,
      abstract: true,
      render: function (h) {
          var _this = this;
          var children = this.$slots.default;
          if (!children) {
              return;
          }
          // filter out text nodes (possible whitespaces)
          children = children.filter(isNotTextNode);
          /* istanbul ignore if */
          if (!children.length) {
              return;
          }
          // warn multiple elements
          if (children.length > 1) {
              warn$2('<transition> can only be used on a single element. Use ' +
                  '<transition-group> for lists.', this.$parent);
          }
          var mode = this.mode;
          // warn invalid mode
          if (mode && mode !== 'in-out' && mode !== 'out-in') {
              warn$2('invalid <transition> mode: ' + mode, this.$parent);
          }
          var rawChild = children[0];
          // if this is a component root node and the component's
          // parent container node also has transition, skip.
          if (hasParentTransition(this.$vnode)) {
              return rawChild;
          }
          // apply transition data to child
          // use getRealChild() to ignore abstract components e.g. keep-alive
          var child = getRealChild(rawChild);
          /* istanbul ignore if */
          if (!child) {
              return rawChild;
          }
          if (this._leaving) {
              return placeholder(h, rawChild);
          }
          // ensure a key that is unique to the vnode type and to this transition
          // component instance. This key will be used to remove pending leaving nodes
          // during entering.
          var id = "__transition-".concat(this._uid, "-");
          child.key =
              child.key == null
                  ? child.isComment
                      ? id + 'comment'
                      : id + child.tag
                  : isPrimitive(child.key)
                      ? String(child.key).indexOf(id) === 0
                          ? child.key
                          : id + child.key
                      : child.key;
          var data = ((child.data || (child.data = {})).transition =
              extractTransitionData(this));
          var oldRawChild = this._vnode;
          var oldChild = getRealChild(oldRawChild);
          // mark v-show
          // so that the transition module can hand over the control to the directive
          if (child.data.directives && child.data.directives.some(isVShowDirective)) {
              child.data.show = true;
          }
          if (oldChild &&
              oldChild.data &&
              !isSameChild(child, oldChild) &&
              !isAsyncPlaceholder(oldChild) &&
              // #6687 component root is a comment node
              !(oldChild.componentInstance &&
                  oldChild.componentInstance._vnode.isComment)) {
              // replace old child transition data with fresh one
              // important for dynamic transitions!
              var oldData = (oldChild.data.transition = extend({}, data));
              // handle transition mode
              if (mode === 'out-in') {
                  // return placeholder node and queue update when leave finishes
                  this._leaving = true;
                  mergeVNodeHook(oldData, 'afterLeave', function () {
                      _this._leaving = false;
                      _this.$forceUpdate();
                  });
                  return placeholder(h, rawChild);
              }
              else if (mode === 'in-out') {
                  if (isAsyncPlaceholder(child)) {
                      return oldRawChild;
                  }
                  var delayedLeave_1;
                  var performLeave = function () {
                      delayedLeave_1();
                  };
                  mergeVNodeHook(data, 'afterEnter', performLeave);
                  mergeVNodeHook(data, 'enterCancelled', performLeave);
                  mergeVNodeHook(oldData, 'delayLeave', function (leave) {
                      delayedLeave_1 = leave;
                  });
              }
          }
          return rawChild;
      }
  };

  // Provides transition support for list items.
  var props = extend({
      tag: String,
      moveClass: String
  }, transitionProps);
  delete props.mode;
  var TransitionGroup = {
      props: props,
      beforeMount: function () {
          var _this = this;
          var update = this._update;
          this._update = function (vnode, hydrating) {
              var restoreActiveInstance = setActiveInstance(_this);
              // force removing pass
              _this.__patch__(_this._vnode, _this.kept, false, // hydrating
              true // removeOnly (!important, avoids unnecessary moves)
              );
              _this._vnode = _this.kept;
              restoreActiveInstance();
              update.call(_this, vnode, hydrating);
          };
      },
      render: function (h) {
          var tag = this.tag || this.$vnode.data.tag || 'span';
          var map = Object.create(null);
          var prevChildren = (this.prevChildren = this.children);
          var rawChildren = this.$slots.default || [];
          var children = (this.children = []);
          var transitionData = extractTransitionData(this);
          for (var i = 0; i < rawChildren.length; i++) {
              var c = rawChildren[i];
              if (c.tag) {
                  if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
                      children.push(c);
                      map[c.key] = c;
                      (c.data || (c.data = {})).transition = transitionData;
                  }
                  else {
                      var opts = c.componentOptions;
                      var name_1 = opts
                          ? getComponentName(opts.Ctor.options) || opts.tag || ''
                          : c.tag;
                      warn$2("<transition-group> children must be keyed: <".concat(name_1, ">"));
                  }
              }
          }
          if (prevChildren) {
              var kept = [];
              var removed = [];
              for (var i = 0; i < prevChildren.length; i++) {
                  var c = prevChildren[i];
                  c.data.transition = transitionData;
                  // @ts-expect-error .getBoundingClientRect is not typed in Node
                  c.data.pos = c.elm.getBoundingClientRect();
                  if (map[c.key]) {
                      kept.push(c);
                  }
                  else {
                      removed.push(c);
                  }
              }
              this.kept = h(tag, null, kept);
              this.removed = removed;
          }
          return h(tag, null, children);
      },
      updated: function () {
          var children = this.prevChildren;
          var moveClass = this.moveClass || (this.name || 'v') + '-move';
          if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
              return;
          }
          // we divide the work into three loops to avoid mixing DOM reads and writes
          // in each iteration - which helps prevent layout thrashing.
          children.forEach(callPendingCbs);
          children.forEach(recordPosition);
          children.forEach(applyTranslation);
          // force reflow to put everything in position
          // assign to this to avoid being removed in tree-shaking
          // $flow-disable-line
          this._reflow = document.body.offsetHeight;
          children.forEach(function (c) {
              if (c.data.moved) {
                  var el_1 = c.elm;
                  var s = el_1.style;
                  addTransitionClass(el_1, moveClass);
                  s.transform = s.WebkitTransform = s.transitionDuration = '';
                  el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {
                      if (e && e.target !== el_1) {
                          return;
                      }
                      if (!e || /transform$/.test(e.propertyName)) {
                          el_1.removeEventListener(transitionEndEvent, cb);
                          el_1._moveCb = null;
                          removeTransitionClass(el_1, moveClass);
                      }
                  }));
              }
          });
      },
      methods: {
          hasMove: function (el, moveClass) {
              /* istanbul ignore if */
              if (!hasTransition) {
                  return false;
              }
              /* istanbul ignore if */
              if (this._hasMove) {
                  return this._hasMove;
              }
              // Detect whether an element with the move class applied has
              // CSS transitions. Since the element may be inside an entering
              // transition at this very moment, we make a clone of it and remove
              // all other transition classes applied to ensure only the move class
              // is applied.
              var clone = el.cloneNode();
              if (el._transitionClasses) {
                  el._transitionClasses.forEach(function (cls) {
                      removeClass(clone, cls);
                  });
              }
              addClass(clone, moveClass);
              clone.style.display = 'none';
              this.$el.appendChild(clone);
              var info = getTransitionInfo(clone);
              this.$el.removeChild(clone);
              return (this._hasMove = info.hasTransform);
          }
      }
  };
  function callPendingCbs(c) {
      /* istanbul ignore if */
      if (c.elm._moveCb) {
          c.elm._moveCb();
      }
      /* istanbul ignore if */
      if (c.elm._enterCb) {
          c.elm._enterCb();
      }
  }
  function recordPosition(c) {
      c.data.newPos = c.elm.getBoundingClientRect();
  }
  function applyTranslation(c) {
      var oldPos = c.data.pos;
      var newPos = c.data.newPos;
      var dx = oldPos.left - newPos.left;
      var dy = oldPos.top - newPos.top;
      if (dx || dy) {
          c.data.moved = true;
          var s = c.elm.style;
          s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)");
          s.transitionDuration = '0s';
      }
  }

  var platformComponents = {
      Transition: Transition,
      TransitionGroup: TransitionGroup
  };

  // install platform specific utils
  Vue.config.mustUseProp = mustUseProp;
  Vue.config.isReservedTag = isReservedTag;
  Vue.config.isReservedAttr = isReservedAttr;
  Vue.config.getTagNamespace = getTagNamespace;
  Vue.config.isUnknownElement = isUnknownElement;
  // install platform runtime directives & components
  extend(Vue.options.directives, platformDirectives);
  extend(Vue.options.components, platformComponents);
  // install platform patch function
  Vue.prototype.__patch__ = inBrowser ? patch : noop;
  // public mount method
  Vue.prototype.$mount = function (el, hydrating) {
      el = el && inBrowser ? query(el) : undefined;
      return mountComponent(this, el, hydrating);
  };
  // devtools global hook
  /* istanbul ignore next */
  if (inBrowser) {
      setTimeout(function () {
          if (config.devtools) {
              if (devtools) {
                  devtools.emit('init', Vue);
              }
              else {
                  // @ts-expect-error
                  console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
                      'https://github.com/vuejs/vue-devtools');
              }
          }
          if (config.productionTip !== false &&
              typeof console !== 'undefined') {
              // @ts-expect-error
              console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" +
                  "Make sure to turn on production mode when deploying for production.\n" +
                  "See more tips at https://vuejs.org/guide/deployment.html");
          }
      }, 0);
  }

  var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
  var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
  var buildRegex = cached(function (delimiters) {
      var open = delimiters[0].replace(regexEscapeRE, '\\$&');
      var close = delimiters[1].replace(regexEscapeRE, '\\$&');
      return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
  });
  function parseText(text, delimiters) {
      //@ts-expect-error
      var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
      if (!tagRE.test(text)) {
          return;
      }
      var tokens = [];
      var rawTokens = [];
      var lastIndex = (tagRE.lastIndex = 0);
      var match, index, tokenValue;
      while ((match = tagRE.exec(text))) {
          index = match.index;
          // push text token
          if (index > lastIndex) {
              rawTokens.push((tokenValue = text.slice(lastIndex, index)));
              tokens.push(JSON.stringify(tokenValue));
          }
          // tag token
          var exp = parseFilters(match[1].trim());
          tokens.push("_s(".concat(exp, ")"));
          rawTokens.push({ '@binding': exp });
          lastIndex = index + match[0].length;
      }
      if (lastIndex < text.length) {
          rawTokens.push((tokenValue = text.slice(lastIndex)));
          tokens.push(JSON.stringify(tokenValue));
      }
      return {
          expression: tokens.join('+'),
          tokens: rawTokens
      };
  }

  function transformNode$1(el, options) {
      var warn = options.warn || baseWarn;
      var staticClass = getAndRemoveAttr(el, 'class');
      if (staticClass) {
          var res = parseText(staticClass, options.delimiters);
          if (res) {
              warn("class=\"".concat(staticClass, "\": ") +
                  'Interpolation inside attributes has been removed. ' +
                  'Use v-bind or the colon shorthand instead. For example, ' +
                  'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
          }
      }
      if (staticClass) {
          el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
      }
      var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
      if (classBinding) {
          el.classBinding = classBinding;
      }
  }
  function genData$2(el) {
      var data = '';
      if (el.staticClass) {
          data += "staticClass:".concat(el.staticClass, ",");
      }
      if (el.classBinding) {
          data += "class:".concat(el.classBinding, ",");
      }
      return data;
  }
  var klass = {
      staticKeys: ['staticClass'],
      transformNode: transformNode$1,
      genData: genData$2
  };

  function transformNode(el, options) {
      var warn = options.warn || baseWarn;
      var staticStyle = getAndRemoveAttr(el, 'style');
      if (staticStyle) {
          /* istanbul ignore if */
          {
              var res = parseText(staticStyle, options.delimiters);
              if (res) {
                  warn("style=\"".concat(staticStyle, "\": ") +
                      'Interpolation inside attributes has been removed. ' +
                      'Use v-bind or the colon shorthand instead. For example, ' +
                      'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
              }
          }
          el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
      }
      var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
      if (styleBinding) {
          el.styleBinding = styleBinding;
      }
  }
  function genData$1(el) {
      var data = '';
      if (el.staticStyle) {
          data += "staticStyle:".concat(el.staticStyle, ",");
      }
      if (el.styleBinding) {
          data += "style:(".concat(el.styleBinding, "),");
      }
      return data;
  }
  var style = {
      staticKeys: ['staticStyle'],
      transformNode: transformNode,
      genData: genData$1
  };

  var decoder;
  var he = {
      decode: function (html) {
          decoder = decoder || document.createElement('div');
          decoder.innerHTML = html;
          return decoder.textContent;
      }
  };

  var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
      'link,meta,param,source,track,wbr');
  // Elements that you can, intentionally, leave open
  // (and which close themselves)
  var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
  // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
  // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
  var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
      'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
      'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
      'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
      'title,tr,track');

  /**
   * Not type-checking this file because it's mostly vendor code.
   */
  // Regular Expressions for parsing tags and attributes
  var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
  var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
  var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*");
  var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")");
  var startTagOpen = new RegExp("^<".concat(qnameCapture));
  var startTagClose = /^\s*(\/?)>/;
  var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>"));
  var doctype = /^<!DOCTYPE [^>]+>/i;
  // #7298: escape - to avoid being passed as HTML comment when inlined in page
  var comment = /^<!\--/;
  var conditionalComment = /^<!\[/;
  // Special Elements (can contain anything)
  var isPlainTextElement = makeMap('script,style,textarea', true);
  var reCache = {};
  var decodingMap = {
      '&lt;': '<',
      '&gt;': '>',
      '&quot;': '"',
      '&amp;': '&',
      '&#10;': '\n',
      '&#9;': '\t',
      '&#39;': "'"
  };
  var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
  var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
  // #5992
  var isIgnoreNewlineTag = makeMap('pre,textarea', true);
  var shouldIgnoreFirstNewline = function (tag, html) {
      return tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
  };
  function decodeAttr(value, shouldDecodeNewlines) {
      var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
      return value.replace(re, function (match) { return decodingMap[match]; });
  }
  function parseHTML(html, options) {
      var stack = [];
      var expectHTML = options.expectHTML;
      var isUnaryTag = options.isUnaryTag || no;
      var canBeLeftOpenTag = options.canBeLeftOpenTag || no;
      var index = 0;
      var last, lastTag;
      var _loop_1 = function () {
          last = html;
          // Make sure we're not in a plaintext content element like script/style
          if (!lastTag || !isPlainTextElement(lastTag)) {
              var textEnd = html.indexOf('<');
              if (textEnd === 0) {
                  // Comment:
                  if (comment.test(html)) {
                      var commentEnd = html.indexOf('-->');
                      if (commentEnd >= 0) {
                          if (options.shouldKeepComment && options.comment) {
                              options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
                          }
                          advance(commentEnd + 3);
                          return "continue";
                      }
                  }
                  // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
                  if (conditionalComment.test(html)) {
                      var conditionalEnd = html.indexOf(']>');
                      if (conditionalEnd >= 0) {
                          advance(conditionalEnd + 2);
                          return "continue";
                      }
                  }
                  // Doctype:
                  var doctypeMatch = html.match(doctype);
                  if (doctypeMatch) {
                      advance(doctypeMatch[0].length);
                      return "continue";
                  }
                  // End tag:
                  var endTagMatch = html.match(endTag);
                  if (endTagMatch) {
                      var curIndex = index;
                      advance(endTagMatch[0].length);
                      parseEndTag(endTagMatch[1], curIndex, index);
                      return "continue";
                  }
                  // Start tag:
                  var startTagMatch = parseStartTag();
                  if (startTagMatch) {
                      handleStartTag(startTagMatch);
                      if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
                          advance(1);
                      }
                      return "continue";
                  }
              }
              var text = void 0, rest = void 0, next = void 0;
              if (textEnd >= 0) {
                  rest = html.slice(textEnd);
                  while (!endTag.test(rest) &&
                      !startTagOpen.test(rest) &&
                      !comment.test(rest) &&
                      !conditionalComment.test(rest)) {
                      // < in plain text, be forgiving and treat it as text
                      next = rest.indexOf('<', 1);
                      if (next < 0)
                          break;
                      textEnd += next;
                      rest = html.slice(textEnd);
                  }
                  text = html.substring(0, textEnd);
              }
              if (textEnd < 0) {
                  text = html;
              }
              if (text) {
                  advance(text.length);
              }
              if (options.chars && text) {
                  options.chars(text, index - text.length, index);
              }
          }
          else {
              var endTagLength_1 = 0;
              var stackedTag_1 = lastTag.toLowerCase();
              var reStackedTag = reCache[stackedTag_1] ||
                  (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));
              var rest = html.replace(reStackedTag, function (all, text, endTag) {
                  endTagLength_1 = endTag.length;
                  if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {
                      text = text
                          .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
                          .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
                  }
                  if (shouldIgnoreFirstNewline(stackedTag_1, text)) {
                      text = text.slice(1);
                  }
                  if (options.chars) {
                      options.chars(text);
                  }
                  return '';
              });
              index += html.length - rest.length;
              html = rest;
              parseEndTag(stackedTag_1, index - endTagLength_1, index);
          }
          if (html === last) {
              options.chars && options.chars(html);
              if (!stack.length && options.warn) {
                  options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), {
                      start: index + html.length
                  });
              }
              return "break";
          }
      };
      while (html) {
          var state_1 = _loop_1();
          if (state_1 === "break")
              break;
      }
      // Clean up any remaining tags
      parseEndTag();
      function advance(n) {
          index += n;
          html = html.substring(n);
      }
      function parseStartTag() {
          var start = html.match(startTagOpen);
          if (start) {
              var match = {
                  tagName: start[1],
                  attrs: [],
                  start: index
              };
              advance(start[0].length);
              var end = void 0, attr = void 0;
              while (!(end = html.match(startTagClose)) &&
                  (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
                  attr.start = index;
                  advance(attr[0].length);
                  attr.end = index;
                  match.attrs.push(attr);
              }
              if (end) {
                  match.unarySlash = end[1];
                  advance(end[0].length);
                  match.end = index;
                  return match;
              }
          }
      }
      function handleStartTag(match) {
          var tagName = match.tagName;
          var unarySlash = match.unarySlash;
          if (expectHTML) {
              if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
                  parseEndTag(lastTag);
              }
              if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
                  parseEndTag(tagName);
              }
          }
          var unary = isUnaryTag(tagName) || !!unarySlash;
          var l = match.attrs.length;
          var attrs = new Array(l);
          for (var i = 0; i < l; i++) {
              var args = match.attrs[i];
              var value = args[3] || args[4] || args[5] || '';
              var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
                  ? options.shouldDecodeNewlinesForHref
                  : options.shouldDecodeNewlines;
              attrs[i] = {
                  name: args[1],
                  value: decodeAttr(value, shouldDecodeNewlines)
              };
              if (options.outputSourceRange) {
                  attrs[i].start = args.start + args[0].match(/^\s*/).length;
                  attrs[i].end = args.end;
              }
          }
          if (!unary) {
              stack.push({
                  tag: tagName,
                  lowerCasedTag: tagName.toLowerCase(),
                  attrs: attrs,
                  start: match.start,
                  end: match.end
              });
              lastTag = tagName;
          }
          if (options.start) {
              options.start(tagName, attrs, unary, match.start, match.end);
          }
      }
      function parseEndTag(tagName, start, end) {
          var pos, lowerCasedTagName;
          if (start == null)
              start = index;
          if (end == null)
              end = index;
          // Find the closest opened tag of the same type
          if (tagName) {
              lowerCasedTagName = tagName.toLowerCase();
              for (pos = stack.length - 1; pos >= 0; pos--) {
                  if (stack[pos].lowerCasedTag === lowerCasedTagName) {
                      break;
                  }
              }
          }
          else {
              // If no tag name is provided, clean shop
              pos = 0;
          }
          if (pos >= 0) {
              // Close all the open elements, up the stack
              for (var i = stack.length - 1; i >= pos; i--) {
                  if ((i > pos || !tagName) && options.warn) {
                      options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), {
                          start: stack[i].start,
                          end: stack[i].end
                      });
                  }
                  if (options.end) {
                      options.end(stack[i].tag, start, end);
                  }
              }
              // Remove the open elements from the stack
              stack.length = pos;
              lastTag = pos && stack[pos - 1].tag;
          }
          else if (lowerCasedTagName === 'br') {
              if (options.start) {
                  options.start(tagName, [], true, start, end);
              }
          }
          else if (lowerCasedTagName === 'p') {
              if (options.start) {
                  options.start(tagName, [], false, start, end);
              }
              if (options.end) {
                  options.end(tagName, start, end);
              }
          }
      }
  }

  var onRE = /^@|^v-on:/;
  var dirRE = /^v-|^@|^:|^#/;
  var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
  var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
  var stripParensRE = /^\(|\)$/g;
  var dynamicArgRE = /^\[.*\]$/;
  var argRE = /:(.*)$/;
  var bindRE = /^:|^\.|^v-bind:/;
  var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
  var slotRE = /^v-slot(:|$)|^#/;
  var lineBreakRE = /[\r\n]/;
  var whitespaceRE = /[ \f\t\r\n]+/g;
  var invalidAttributeRE = /[\s"'<>\/=]/;
  var decodeHTMLCached = cached(he.decode);
  var emptySlotScopeToken = "_empty_";
  // configurable state
  var warn;
  var delimiters;
  var transforms;
  var preTransforms;
  var postTransforms;
  var platformIsPreTag;
  var platformMustUseProp;
  var platformGetTagNamespace;
  var maybeComponent;
  function createASTElement(tag, attrs, parent) {
      return {
          type: 1,
          tag: tag,
          attrsList: attrs,
          attrsMap: makeAttrsMap(attrs),
          rawAttrsMap: {},
          parent: parent,
          children: []
      };
  }
  /**
   * Convert HTML string to AST.
   */
  function parse(template, options) {
      warn = options.warn || baseWarn;
      platformIsPreTag = options.isPreTag || no;
      platformMustUseProp = options.mustUseProp || no;
      platformGetTagNamespace = options.getTagNamespace || no;
      var isReservedTag = options.isReservedTag || no;
      maybeComponent = function (el) {
          return !!(el.component ||
              el.attrsMap[':is'] ||
              el.attrsMap['v-bind:is'] ||
              !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
      };
      transforms = pluckModuleFunction(options.modules, 'transformNode');
      preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
      postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
      delimiters = options.delimiters;
      var stack = [];
      var preserveWhitespace = options.preserveWhitespace !== false;
      var whitespaceOption = options.whitespace;
      var root;
      var currentParent;
      var inVPre = false;
      var inPre = false;
      var warned = false;
      function warnOnce(msg, range) {
          if (!warned) {
              warned = true;
              warn(msg, range);
          }
      }
      function closeElement(element) {
          trimEndingWhitespace(element);
          if (!inVPre && !element.processed) {
              element = processElement(element, options);
          }
          // tree management
          if (!stack.length && element !== root) {
              // allow root elements with v-if, v-else-if and v-else
              if (root.if && (element.elseif || element.else)) {
                  {
                      checkRootConstraints(element);
                  }
                  addIfCondition(root, {
                      exp: element.elseif,
                      block: element
                  });
              }
              else {
                  warnOnce("Component template should contain exactly one root element. " +
                      "If you are using v-if on multiple elements, " +
                      "use v-else-if to chain them instead.", { start: element.start });
              }
          }
          if (currentParent && !element.forbidden) {
              if (element.elseif || element.else) {
                  processIfConditions(element, currentParent);
              }
              else {
                  if (element.slotScope) {
                      // scoped slot
                      // keep it in the children list so that v-else(-if) conditions can
                      // find it as the prev node.
                      var name_1 = element.slotTarget || '"default"';
                      (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;
                  }
                  currentParent.children.push(element);
                  element.parent = currentParent;
              }
          }
          // final children cleanup
          // filter out scoped slots
          element.children = element.children.filter(function (c) { return !c.slotScope; });
          // remove trailing whitespace node again
          trimEndingWhitespace(element);
          // check pre state
          if (element.pre) {
              inVPre = false;
          }
          if (platformIsPreTag(element.tag)) {
              inPre = false;
          }
          // apply post-transforms
          for (var i = 0; i < postTransforms.length; i++) {
              postTransforms[i](element, options);
          }
      }
      function trimEndingWhitespace(el) {
          // remove trailing whitespace node
          if (!inPre) {
              var lastNode = void 0;
              while ((lastNode = el.children[el.children.length - 1]) &&
                  lastNode.type === 3 &&
                  lastNode.text === ' ') {
                  el.children.pop();
              }
          }
      }
      function checkRootConstraints(el) {
          if (el.tag === 'slot' || el.tag === 'template') {
              warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") +
                  'contain multiple nodes.', { start: el.start });
          }
          if (el.attrsMap.hasOwnProperty('v-for')) {
              warnOnce('Cannot use v-for on stateful component root element because ' +
                  'it renders multiple elements.', el.rawAttrsMap['v-for']);
          }
      }
      parseHTML(template, {
          warn: warn,
          expectHTML: options.expectHTML,
          isUnaryTag: options.isUnaryTag,
          canBeLeftOpenTag: options.canBeLeftOpenTag,
          shouldDecodeNewlines: options.shouldDecodeNewlines,
          shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
          shouldKeepComment: options.comments,
          outputSourceRange: options.outputSourceRange,
          start: function (tag, attrs, unary, start, end) {
              // check namespace.
              // inherit parent ns if there is one
              var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
              // handle IE svg bug
              /* istanbul ignore if */
              if (isIE && ns === 'svg') {
                  attrs = guardIESVGBug(attrs);
              }
              var element = createASTElement(tag, attrs, currentParent);
              if (ns) {
                  element.ns = ns;
              }
              {
                  if (options.outputSourceRange) {
                      element.start = start;
                      element.end = end;
                      element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
                          cumulated[attr.name] = attr;
                          return cumulated;
                      }, {});
                  }
                  attrs.forEach(function (attr) {
                      if (invalidAttributeRE.test(attr.name)) {
                          warn("Invalid dynamic argument expression: attribute names cannot contain " +
                              "spaces, quotes, <, >, / or =.", options.outputSourceRange
                              ? {
                                  start: attr.start + attr.name.indexOf("["),
                                  end: attr.start + attr.name.length
                              }
                              : undefined);
                      }
                  });
              }
              if (isForbiddenTag(element) && !isServerRendering()) {
                  element.forbidden = true;
                  warn('Templates should only be responsible for mapping the state to the ' +
                          'UI. Avoid placing tags with side-effects in your templates, such as ' +
                          "<".concat(tag, ">") +
                          ', as they will not be parsed.', { start: element.start });
              }
              // apply pre-transforms
              for (var i = 0; i < preTransforms.length; i++) {
                  element = preTransforms[i](element, options) || element;
              }
              if (!inVPre) {
                  processPre(element);
                  if (element.pre) {
                      inVPre = true;
                  }
              }
              if (platformIsPreTag(element.tag)) {
                  inPre = true;
              }
              if (inVPre) {
                  processRawAttrs(element);
              }
              else if (!element.processed) {
                  // structural directives
                  processFor(element);
                  processIf(element);
                  processOnce(element);
              }
              if (!root) {
                  root = element;
                  {
                      checkRootConstraints(root);
                  }
              }
              if (!unary) {
                  currentParent = element;
                  stack.push(element);
              }
              else {
                  closeElement(element);
              }
          },
          end: function (tag, start, end) {
              var element = stack[stack.length - 1];
              // pop stack
              stack.length -= 1;
              currentParent = stack[stack.length - 1];
              if (options.outputSourceRange) {
                  element.end = end;
              }
              closeElement(element);
          },
          chars: function (text, start, end) {
              if (!currentParent) {
                  {
                      if (text === template) {
                          warnOnce('Component template requires a root element, rather than just text.', { start: start });
                      }
                      else if ((text = text.trim())) {
                          warnOnce("text \"".concat(text, "\" outside root element will be ignored."), {
                              start: start
                          });
                      }
                  }
                  return;
              }
              // IE textarea placeholder bug
              /* istanbul ignore if */
              if (isIE &&
                  currentParent.tag === 'textarea' &&
                  currentParent.attrsMap.placeholder === text) {
                  return;
              }
              var children = currentParent.children;
              if (inPre || text.trim()) {
                  text = isTextTag(currentParent)
                      ? text
                      : decodeHTMLCached(text);
              }
              else if (!children.length) {
                  // remove the whitespace-only node right after an opening tag
                  text = '';
              }
              else if (whitespaceOption) {
                  if (whitespaceOption === 'condense') {
                      // in condense mode, remove the whitespace node if it contains
                      // line break, otherwise condense to a single space
                      text = lineBreakRE.test(text) ? '' : ' ';
                  }
                  else {
                      text = ' ';
                  }
              }
              else {
                  text = preserveWhitespace ? ' ' : '';
              }
              if (text) {
                  if (!inPre && whitespaceOption === 'condense') {
                      // condense consecutive whitespaces into single space
                      text = text.replace(whitespaceRE, ' ');
                  }
                  var res = void 0;
                  var child = void 0;
                  if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
                      child = {
                          type: 2,
                          expression: res.expression,
                          tokens: res.tokens,
                          text: text
                      };
                  }
                  else if (text !== ' ' ||
                      !children.length ||
                      children[children.length - 1].text !== ' ') {
                      child = {
                          type: 3,
                          text: text
                      };
                  }
                  if (child) {
                      if (options.outputSourceRange) {
                          child.start = start;
                          child.end = end;
                      }
                      children.push(child);
                  }
              }
          },
          comment: function (text, start, end) {
              // adding anything as a sibling to the root node is forbidden
              // comments should still be allowed, but ignored
              if (currentParent) {
                  var child = {
                      type: 3,
                      text: text,
                      isComment: true
                  };
                  if (options.outputSourceRange) {
                      child.start = start;
                      child.end = end;
                  }
                  currentParent.children.push(child);
              }
          }
      });
      return root;
  }
  function processPre(el) {
      if (getAndRemoveAttr(el, 'v-pre') != null) {
          el.pre = true;
      }
  }
  function processRawAttrs(el) {
      var list = el.attrsList;
      var len = list.length;
      if (len) {
          var attrs = (el.attrs = new Array(len));
          for (var i = 0; i < len; i++) {
              attrs[i] = {
                  name: list[i].name,
                  value: JSON.stringify(list[i].value)
              };
              if (list[i].start != null) {
                  attrs[i].start = list[i].start;
                  attrs[i].end = list[i].end;
              }
          }
      }
      else if (!el.pre) {
          // non root node in pre blocks with no attributes
          el.plain = true;
      }
  }
  function processElement(element, options) {
      processKey(element);
      // determine whether this is a plain element after
      // removing structural attributes
      element.plain =
          !element.key && !element.scopedSlots && !element.attrsList.length;
      processRef(element);
      processSlotContent(element);
      processSlotOutlet(element);
      processComponent(element);
      for (var i = 0; i < transforms.length; i++) {
          element = transforms[i](element, options) || element;
      }
      processAttrs(element);
      return element;
  }
  function processKey(el) {
      var exp = getBindingAttr(el, 'key');
      if (exp) {
          {
              if (el.tag === 'template') {
                  warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key'));
              }
              if (el.for) {
                  var iterator = el.iterator2 || el.iterator1;
                  var parent_1 = el.parent;
                  if (iterator &&
                      iterator === exp &&
                      parent_1 &&
                      parent_1.tag === 'transition-group') {
                      warn("Do not use v-for index as key on <transition-group> children, " +
                          "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */);
                  }
              }
          }
          el.key = exp;
      }
  }
  function processRef(el) {
      var ref = getBindingAttr(el, 'ref');
      if (ref) {
          el.ref = ref;
          el.refInFor = checkInFor(el);
      }
  }
  function processFor(el) {
      var exp;
      if ((exp = getAndRemoveAttr(el, 'v-for'))) {
          var res = parseFor(exp);
          if (res) {
              extend(el, res);
          }
          else {
              warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']);
          }
      }
  }
  function parseFor(exp) {
      var inMatch = exp.match(forAliasRE);
      if (!inMatch)
          return;
      var res = {};
      res.for = inMatch[2].trim();
      var alias = inMatch[1].trim().replace(stripParensRE, '');
      var iteratorMatch = alias.match(forIteratorRE);
      if (iteratorMatch) {
          res.alias = alias.replace(forIteratorRE, '').trim();
          res.iterator1 = iteratorMatch[1].trim();
          if (iteratorMatch[2]) {
              res.iterator2 = iteratorMatch[2].trim();
          }
      }
      else {
          res.alias = alias;
      }
      return res;
  }
  function processIf(el) {
      var exp = getAndRemoveAttr(el, 'v-if');
      if (exp) {
          el.if = exp;
          addIfCondition(el, {
              exp: exp,
              block: el
          });
      }
      else {
          if (getAndRemoveAttr(el, 'v-else') != null) {
              el.else = true;
          }
          var elseif = getAndRemoveAttr(el, 'v-else-if');
          if (elseif) {
              el.elseif = elseif;
          }
      }
  }
  function processIfConditions(el, parent) {
      var prev = findPrevElement(parent.children);
      if (prev && prev.if) {
          addIfCondition(prev, {
              exp: el.elseif,
              block: el
          });
      }
      else {
          warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") +
              "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
      }
  }
  function findPrevElement(children) {
      var i = children.length;
      while (i--) {
          if (children[i].type === 1) {
              return children[i];
          }
          else {
              if (children[i].text !== ' ') {
                  warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") +
                      "will be ignored.", children[i]);
              }
              children.pop();
          }
      }
  }
  function addIfCondition(el, condition) {
      if (!el.ifConditions) {
          el.ifConditions = [];
      }
      el.ifConditions.push(condition);
  }
  function processOnce(el) {
      var once = getAndRemoveAttr(el, 'v-once');
      if (once != null) {
          el.once = true;
      }
  }
  // handle content being passed to a component as slot,
  // e.g. <template slot="xxx">, <div slot-scope="xxx">
  function processSlotContent(el) {
      var slotScope;
      if (el.tag === 'template') {
          slotScope = getAndRemoveAttr(el, 'scope');
          /* istanbul ignore if */
          if (slotScope) {
              warn("the \"scope\" attribute for scoped slots have been deprecated and " +
                  "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
                  "can also be used on plain elements in addition to <template> to " +
                  "denote scoped slots.", el.rawAttrsMap['scope'], true);
          }
          el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
      }
      else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
          /* istanbul ignore if */
          if (el.attrsMap['v-for']) {
              warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") +
                  "(v-for takes higher priority). Use a wrapper <template> for the " +
                  "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true);
          }
          el.slotScope = slotScope;
      }
      // slot="xxx"
      var slotTarget = getBindingAttr(el, 'slot');
      if (slotTarget) {
          el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
          el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
          // preserve slot as an attribute for native shadow DOM compat
          // only for non-scoped slots.
          if (el.tag !== 'template' && !el.slotScope) {
              addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
          }
      }
      // 2.6 v-slot syntax
      {
          if (el.tag === 'template') {
              // v-slot on <template>
              var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
              if (slotBinding) {
                  {
                      if (el.slotTarget || el.slotScope) {
                          warn("Unexpected mixed usage of different slot syntaxes.", el);
                      }
                      if (el.parent && !maybeComponent(el.parent)) {
                          warn("<template v-slot> can only appear at the root level inside " +
                              "the receiving component", el);
                      }
                  }
                  var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;
                  el.slotTarget = name_2;
                  el.slotTargetDynamic = dynamic;
                  el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
              }
          }
          else {
              // v-slot on component, denotes default slot
              var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
              if (slotBinding) {
                  {
                      if (!maybeComponent(el)) {
                          warn("v-slot can only be used on components or <template>.", slotBinding);
                      }
                      if (el.slotScope || el.slotTarget) {
                          warn("Unexpected mixed usage of different slot syntaxes.", el);
                      }
                      if (el.scopedSlots) {
                          warn("To avoid scope ambiguity, the default slot should also use " +
                              "<template> syntax when there are other named slots.", slotBinding);
                      }
                  }
                  // add the component's children to its default slot
                  var slots = el.scopedSlots || (el.scopedSlots = {});
                  var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;
                  var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));
                  slotContainer_1.slotTarget = name_3;
                  slotContainer_1.slotTargetDynamic = dynamic;
                  slotContainer_1.children = el.children.filter(function (c) {
                      if (!c.slotScope) {
                          c.parent = slotContainer_1;
                          return true;
                      }
                  });
                  slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;
                  // remove children as they are returned from scopedSlots now
                  el.children = [];
                  // mark el non-plain so data gets generated
                  el.plain = false;
              }
          }
      }
  }
  function getSlotName(binding) {
      var name = binding.name.replace(slotRE, '');
      if (!name) {
          if (binding.name[0] !== '#') {
              name = 'default';
          }
          else {
              warn("v-slot shorthand syntax requires a slot name.", binding);
          }
      }
      return dynamicArgRE.test(name)
          ? // dynamic [name]
              { name: name.slice(1, -1), dynamic: true }
          : // static name
              { name: "\"".concat(name, "\""), dynamic: false };
  }
  // handle <slot/> outlets
  function processSlotOutlet(el) {
      if (el.tag === 'slot') {
          el.slotName = getBindingAttr(el, 'name');
          if (el.key) {
              warn("`key` does not work on <slot> because slots are abstract outlets " +
                  "and can possibly expand into multiple elements. " +
                  "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key'));
          }
      }
  }
  function processComponent(el) {
      var binding;
      if ((binding = getBindingAttr(el, 'is'))) {
          el.component = binding;
      }
      if (getAndRemoveAttr(el, 'inline-template') != null) {
          el.inlineTemplate = true;
      }
  }
  function processAttrs(el) {
      var list = el.attrsList;
      var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
      for (i = 0, l = list.length; i < l; i++) {
          name = rawName = list[i].name;
          value = list[i].value;
          if (dirRE.test(name)) {
              // mark element as dynamic
              el.hasBindings = true;
              // modifiers
              modifiers = parseModifiers(name.replace(dirRE, ''));
              // support .foo shorthand syntax for the .prop modifier
              if (modifiers) {
                  name = name.replace(modifierRE, '');
              }
              if (bindRE.test(name)) {
                  // v-bind
                  name = name.replace(bindRE, '');
                  value = parseFilters(value);
                  isDynamic = dynamicArgRE.test(name);
                  if (isDynamic) {
                      name = name.slice(1, -1);
                  }
                  if (value.trim().length === 0) {
                      warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\""));
                  }
                  if (modifiers) {
                      if (modifiers.prop && !isDynamic) {
                          name = camelize(name);
                          if (name === 'innerHtml')
                              name = 'innerHTML';
                      }
                      if (modifiers.camel && !isDynamic) {
                          name = camelize(name);
                      }
                      if (modifiers.sync) {
                          syncGen = genAssignmentCode(value, "$event");
                          if (!isDynamic) {
                              addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]);
                              if (hyphenate(name) !== camelize(name)) {
                                  addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);
                              }
                          }
                          else {
                              // handler w/ dynamic event name
                              addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic
                              );
                          }
                      }
                  }
                  if ((modifiers && modifiers.prop) ||
                      (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
                      addProp(el, name, value, list[i], isDynamic);
                  }
                  else {
                      addAttr(el, name, value, list[i], isDynamic);
                  }
              }
              else if (onRE.test(name)) {
                  // v-on
                  name = name.replace(onRE, '');
                  isDynamic = dynamicArgRE.test(name);
                  if (isDynamic) {
                      name = name.slice(1, -1);
                  }
                  addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);
              }
              else {
                  // normal directives
                  name = name.replace(dirRE, '');
                  // parse arg
                  var argMatch = name.match(argRE);
                  var arg = argMatch && argMatch[1];
                  isDynamic = false;
                  if (arg) {
                      name = name.slice(0, -(arg.length + 1));
                      if (dynamicArgRE.test(arg)) {
                          arg = arg.slice(1, -1);
                          isDynamic = true;
                      }
                  }
                  addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
                  if (name === 'model') {
                      checkForAliasModel(el, value);
                  }
              }
          }
          else {
              // literal attribute
              {
                  var res = parseText(value, delimiters);
                  if (res) {
                      warn("".concat(name, "=\"").concat(value, "\": ") +
                          'Interpolation inside attributes has been removed. ' +
                          'Use v-bind or the colon shorthand instead. For example, ' +
                          'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
                  }
              }
              addAttr(el, name, JSON.stringify(value), list[i]);
              // #6887 firefox doesn't update muted state if set via attribute
              // even immediately after element creation
              if (!el.component &&
                  name === 'muted' &&
                  platformMustUseProp(el.tag, el.attrsMap.type, name)) {
                  addProp(el, name, 'true', list[i]);
              }
          }
      }
  }
  function checkInFor(el) {
      var parent = el;
      while (parent) {
          if (parent.for !== undefined) {
              return true;
          }
          parent = parent.parent;
      }
      return false;
  }
  function parseModifiers(name) {
      var match = name.match(modifierRE);
      if (match) {
          var ret_1 = {};
          match.forEach(function (m) {
              ret_1[m.slice(1)] = true;
          });
          return ret_1;
      }
  }
  function makeAttrsMap(attrs) {
      var map = {};
      for (var i = 0, l = attrs.length; i < l; i++) {
          if (map[attrs[i].name] && !isIE && !isEdge) {
              warn('duplicate attribute: ' + attrs[i].name, attrs[i]);
          }
          map[attrs[i].name] = attrs[i].value;
      }
      return map;
  }
  // for script (e.g. type="x/template") or style, do not decode content
  function isTextTag(el) {
      return el.tag === 'script' || el.tag === 'style';
  }
  function isForbiddenTag(el) {
      return (el.tag === 'style' ||
          (el.tag === 'script' &&
              (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
  }
  var ieNSBug = /^xmlns:NS\d+/;
  var ieNSPrefix = /^NS\d+:/;
  /* istanbul ignore next */
  function guardIESVGBug(attrs) {
      var res = [];
      for (var i = 0; i < attrs.length; i++) {
          var attr = attrs[i];
          if (!ieNSBug.test(attr.name)) {
              attr.name = attr.name.replace(ieNSPrefix, '');
              res.push(attr);
          }
      }
      return res;
  }
  function checkForAliasModel(el, value) {
      var _el = el;
      while (_el) {
          if (_el.for && _el.alias === value) {
              warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
                  "You are binding v-model directly to a v-for iteration alias. " +
                  "This will not be able to modify the v-for source array because " +
                  "writing to the alias is like modifying a function local variable. " +
                  "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']);
          }
          _el = _el.parent;
      }
  }

  /**
   * Expand input[v-model] with dynamic type bindings into v-if-else chains
   * Turn this:
   *   <input v-model="data[type]" :type="type">
   * into this:
   *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
   *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
   *   <input v-else :type="type" v-model="data[type]">
   */
  function preTransformNode(el, options) {
      if (el.tag === 'input') {
          var map = el.attrsMap;
          if (!map['v-model']) {
              return;
          }
          var typeBinding = void 0;
          if (map[':type'] || map['v-bind:type']) {
              typeBinding = getBindingAttr(el, 'type');
          }
          if (!map.type && !typeBinding && map['v-bind']) {
              typeBinding = "(".concat(map['v-bind'], ").type");
          }
          if (typeBinding) {
              var ifCondition = getAndRemoveAttr(el, 'v-if', true);
              var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : "";
              var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
              var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
              // 1. checkbox
              var branch0 = cloneASTElement(el);
              // process for on the main node
              processFor(branch0);
              addRawAttr(branch0, 'type', 'checkbox');
              processElement(branch0, options);
              branch0.processed = true; // prevent it from double-processed
              branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra;
              addIfCondition(branch0, {
                  exp: branch0.if,
                  block: branch0
              });
              // 2. add radio else-if condition
              var branch1 = cloneASTElement(el);
              getAndRemoveAttr(branch1, 'v-for', true);
              addRawAttr(branch1, 'type', 'radio');
              processElement(branch1, options);
              addIfCondition(branch0, {
                  exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra,
                  block: branch1
              });
              // 3. other
              var branch2 = cloneASTElement(el);
              getAndRemoveAttr(branch2, 'v-for', true);
              addRawAttr(branch2, ':type', typeBinding);
              processElement(branch2, options);
              addIfCondition(branch0, {
                  exp: ifCondition,
                  block: branch2
              });
              if (hasElse) {
                  branch0.else = true;
              }
              else if (elseIfCondition) {
                  branch0.elseif = elseIfCondition;
              }
              return branch0;
          }
      }
  }
  function cloneASTElement(el) {
      return createASTElement(el.tag, el.attrsList.slice(), el.parent);
  }
  var model = {
      preTransformNode: preTransformNode
  };

  var modules = [klass, style, model];

  function text(el, dir) {
      if (dir.value) {
          addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir);
      }
  }

  function html(el, dir) {
      if (dir.value) {
          addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir);
      }
  }

  var directives = {
      model: model$1,
      text: text,
      html: html
  };

  var baseOptions = {
      expectHTML: true,
      modules: modules,
      directives: directives,
      isPreTag: isPreTag,
      isUnaryTag: isUnaryTag,
      mustUseProp: mustUseProp,
      canBeLeftOpenTag: canBeLeftOpenTag,
      isReservedTag: isReservedTag,
      getTagNamespace: getTagNamespace,
      staticKeys: genStaticKeys$1(modules)
  };

  var isStaticKey;
  var isPlatformReservedTag;
  var genStaticKeysCached = cached(genStaticKeys);
  /**
   * Goal of the optimizer: walk the generated template AST tree
   * and detect sub-trees that are purely static, i.e. parts of
   * the DOM that never needs to change.
   *
   * Once we detect these sub-trees, we can:
   *
   * 1. Hoist them into constants, so that we no longer need to
   *    create fresh nodes for them on each re-render;
   * 2. Completely skip them in the patching process.
   */
  function optimize(root, options) {
      if (!root)
          return;
      isStaticKey = genStaticKeysCached(options.staticKeys || '');
      isPlatformReservedTag = options.isReservedTag || no;
      // first pass: mark all non-static nodes.
      markStatic(root);
      // second pass: mark static roots.
      markStaticRoots(root, false);
  }
  function genStaticKeys(keys) {
      return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
          (keys ? ',' + keys : ''));
  }
  function markStatic(node) {
      node.static = isStatic(node);
      if (node.type === 1) {
          // do not make component slot content static. this avoids
          // 1. components not able to mutate slot nodes
          // 2. static slot content fails for hot-reloading
          if (!isPlatformReservedTag(node.tag) &&
              node.tag !== 'slot' &&
              node.attrsMap['inline-template'] == null) {
              return;
          }
          for (var i = 0, l = node.children.length; i < l; i++) {
              var child = node.children[i];
              markStatic(child);
              if (!child.static) {
                  node.static = false;
              }
          }
          if (node.ifConditions) {
              for (var i = 1, l = node.ifConditions.length; i < l; i++) {
                  var block = node.ifConditions[i].block;
                  markStatic(block);
                  if (!block.static) {
                      node.static = false;
                  }
              }
          }
      }
  }
  function markStaticRoots(node, isInFor) {
      if (node.type === 1) {
          if (node.static || node.once) {
              node.staticInFor = isInFor;
          }
          // For a node to qualify as a static root, it should have children that
          // are not just static text. Otherwise the cost of hoisting out will
          // outweigh the benefits and it's better off to just always render it fresh.
          if (node.static &&
              node.children.length &&
              !(node.children.length === 1 && node.children[0].type === 3)) {
              node.staticRoot = true;
              return;
          }
          else {
              node.staticRoot = false;
          }
          if (node.children) {
              for (var i = 0, l = node.children.length; i < l; i++) {
                  markStaticRoots(node.children[i], isInFor || !!node.for);
              }
          }
          if (node.ifConditions) {
              for (var i = 1, l = node.ifConditions.length; i < l; i++) {
                  markStaticRoots(node.ifConditions[i].block, isInFor);
              }
          }
      }
  }
  function isStatic(node) {
      if (node.type === 2) {
          // expression
          return false;
      }
      if (node.type === 3) {
          // text
          return true;
      }
      return !!(node.pre ||
          (!node.hasBindings && // no dynamic bindings
              !node.if &&
              !node.for && // not v-if or v-for or v-else
              !isBuiltInTag(node.tag) && // not a built-in
              isPlatformReservedTag(node.tag) && // not a component
              !isDirectChildOfTemplateFor(node) &&
              Object.keys(node).every(isStaticKey)));
  }
  function isDirectChildOfTemplateFor(node) {
      while (node.parent) {
          node = node.parent;
          if (node.tag !== 'template') {
              return false;
          }
          if (node.for) {
              return true;
          }
      }
      return false;
  }

  var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
  var fnInvokeRE = /\([^)]*?\);*$/;
  var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
  // KeyboardEvent.keyCode aliases
  var keyCodes = {
      esc: 27,
      tab: 9,
      enter: 13,
      space: 32,
      up: 38,
      left: 37,
      right: 39,
      down: 40,
      delete: [8, 46]
  };
  // KeyboardEvent.key aliases
  var keyNames = {
      // #7880: IE11 and Edge use `Esc` for Escape key name.
      esc: ['Esc', 'Escape'],
      tab: 'Tab',
      enter: 'Enter',
      // #9112: IE11 uses `Spacebar` for Space key name.
      space: [' ', 'Spacebar'],
      // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
      up: ['Up', 'ArrowUp'],
      left: ['Left', 'ArrowLeft'],
      right: ['Right', 'ArrowRight'],
      down: ['Down', 'ArrowDown'],
      // #9112: IE11 uses `Del` for Delete key name.
      delete: ['Backspace', 'Delete', 'Del']
  };
  // #4868: modifiers that prevent the execution of the listener
  // need to explicitly return null so that we can determine whether to remove
  // the listener for .once
  var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); };
  var modifierCode = {
      stop: '$event.stopPropagation();',
      prevent: '$event.preventDefault();',
      self: genGuard("$event.target !== $event.currentTarget"),
      ctrl: genGuard("!$event.ctrlKey"),
      shift: genGuard("!$event.shiftKey"),
      alt: genGuard("!$event.altKey"),
      meta: genGuard("!$event.metaKey"),
      left: genGuard("'button' in $event && $event.button !== 0"),
      middle: genGuard("'button' in $event && $event.button !== 1"),
      right: genGuard("'button' in $event && $event.button !== 2")
  };
  function genHandlers(events, isNative) {
      var prefix = isNative ? 'nativeOn:' : 'on:';
      var staticHandlers = "";
      var dynamicHandlers = "";
      for (var name_1 in events) {
          var handlerCode = genHandler(events[name_1]);
          //@ts-expect-error
          if (events[name_1] && events[name_1].dynamic) {
              dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ",");
          }
          else {
              staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ",");
          }
      }
      staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}");
      if (dynamicHandlers) {
          return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])");
      }
      else {
          return prefix + staticHandlers;
      }
  }
  function genHandler(handler) {
      if (!handler) {
          return 'function(){}';
      }
      if (Array.isArray(handler)) {
          return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]");
      }
      var isMethodPath = simplePathRE.test(handler.value);
      var isFunctionExpression = fnExpRE.test(handler.value);
      var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
      if (!handler.modifiers) {
          if (isMethodPath || isFunctionExpression) {
              return handler.value;
          }
          return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement
      }
      else {
          var code = '';
          var genModifierCode = '';
          var keys = [];
          var _loop_1 = function (key) {
              if (modifierCode[key]) {
                  genModifierCode += modifierCode[key];
                  // left/right
                  if (keyCodes[key]) {
                      keys.push(key);
                  }
              }
              else if (key === 'exact') {
                  var modifiers_1 = handler.modifiers;
                  genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
                      .filter(function (keyModifier) { return !modifiers_1[keyModifier]; })
                      .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); })
                      .join('||'));
              }
              else {
                  keys.push(key);
              }
          };
          for (var key in handler.modifiers) {
              _loop_1(key);
          }
          if (keys.length) {
              code += genKeyFilter(keys);
          }
          // Make sure modifiers like prevent and stop get executed after key filtering
          if (genModifierCode) {
              code += genModifierCode;
          }
          var handlerCode = isMethodPath
              ? "return ".concat(handler.value, ".apply(null, arguments)")
              : isFunctionExpression
                  ? "return (".concat(handler.value, ").apply(null, arguments)")
                  : isFunctionInvocation
                      ? "return ".concat(handler.value)
                      : handler.value;
          return "function($event){".concat(code).concat(handlerCode, "}");
      }
  }
  function genKeyFilter(keys) {
      return (
      // make sure the key filters only apply to KeyboardEvents
      // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
      // key events that do not have keyCode property...
      "if(!$event.type.indexOf('key')&&" +
          "".concat(keys.map(genFilterCode).join('&&'), ")return null;"));
  }
  function genFilterCode(key) {
      var keyVal = parseInt(key, 10);
      if (keyVal) {
          return "$event.keyCode!==".concat(keyVal);
      }
      var keyCode = keyCodes[key];
      var keyName = keyNames[key];
      return ("_k($event.keyCode," +
          "".concat(JSON.stringify(key), ",") +
          "".concat(JSON.stringify(keyCode), ",") +
          "$event.key," +
          "".concat(JSON.stringify(keyName)) +
          ")");
  }

  function on(el, dir) {
      if (dir.modifiers) {
          warn$2("v-on without argument does not support modifiers.");
      }
      el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); };
  }

  function bind(el, dir) {
      el.wrapData = function (code) {
          return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")");
      };
  }

  var baseDirectives = {
      on: on,
      bind: bind,
      cloak: noop
  };

  var CodegenState = /** @class */ (function () {
      function CodegenState(options) {
          this.options = options;
          this.warn = options.warn || baseWarn;
          this.transforms = pluckModuleFunction(options.modules, 'transformCode');
          this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
          this.directives = extend(extend({}, baseDirectives), options.directives);
          var isReservedTag = options.isReservedTag || no;
          this.maybeComponent = function (el) {
              return !!el.component || !isReservedTag(el.tag);
          };
          this.onceId = 0;
          this.staticRenderFns = [];
          this.pre = false;
      }
      return CodegenState;
  }());
  function generate(ast, options) {
      var state = new CodegenState(options);
      // fix #11483, Root level <script> tags should not be rendered.
      var code = ast
          ? ast.tag === 'script'
              ? 'null'
              : genElement(ast, state)
          : '_c("div")';
      return {
          render: "with(this){return ".concat(code, "}"),
          staticRenderFns: state.staticRenderFns
      };
  }
  function genElement(el, state) {
      if (el.parent) {
          el.pre = el.pre || el.parent.pre;
      }
      if (el.staticRoot && !el.staticProcessed) {
          return genStatic(el, state);
      }
      else if (el.once && !el.onceProcessed) {
          return genOnce(el, state);
      }
      else if (el.for && !el.forProcessed) {
          return genFor(el, state);
      }
      else if (el.if && !el.ifProcessed) {
          return genIf(el, state);
      }
      else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
          return genChildren(el, state) || 'void 0';
      }
      else if (el.tag === 'slot') {
          return genSlot(el, state);
      }
      else {
          // component or element
          var code = void 0;
          if (el.component) {
              code = genComponent(el.component, el, state);
          }
          else {
              var data = void 0;
              var maybeComponent = state.maybeComponent(el);
              if (!el.plain || (el.pre && maybeComponent)) {
                  data = genData(el, state);
              }
              var tag 
              // check if this is a component in <script setup>
              = void 0;
              // check if this is a component in <script setup>
              var bindings = state.options.bindings;
              if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
                  tag = checkBindingType(bindings, el.tag);
              }
              if (!tag)
                  tag = "'".concat(el.tag, "'");
              var children = el.inlineTemplate ? null : genChildren(el, state, true);
              code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data
              ).concat(children ? ",".concat(children) : '' // children
              , ")");
          }
          // module transforms
          for (var i = 0; i < state.transforms.length; i++) {
              code = state.transforms[i](el, code);
          }
          return code;
      }
  }
  function checkBindingType(bindings, key) {
      var camelName = camelize(key);
      var PascalName = capitalize(camelName);
      var checkType = function (type) {
          if (bindings[key] === type) {
              return key;
          }
          if (bindings[camelName] === type) {
              return camelName;
          }
          if (bindings[PascalName] === type) {
              return PascalName;
          }
      };
      var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
          checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
      if (fromConst) {
          return fromConst;
      }
      var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
          checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
          checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
      if (fromMaybeRef) {
          return fromMaybeRef;
      }
  }
  // hoist static sub-trees out
  function genStatic(el, state) {
      el.staticProcessed = true;
      // Some elements (templates) need to behave differently inside of a v-pre
      // node.  All pre nodes are static roots, so we can use this as a location to
      // wrap a state change and reset it upon exiting the pre node.
      var originalPreState = state.pre;
      if (el.pre) {
          state.pre = el.pre;
      }
      state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}"));
      state.pre = originalPreState;
      return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")");
  }
  // v-once
  function genOnce(el, state) {
      el.onceProcessed = true;
      if (el.if && !el.ifProcessed) {
          return genIf(el, state);
      }
      else if (el.staticInFor) {
          var key = '';
          var parent_1 = el.parent;
          while (parent_1) {
              if (parent_1.for) {
                  key = parent_1.key;
                  break;
              }
              parent_1 = parent_1.parent;
          }
          if (!key) {
              state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']);
              return genElement(el, state);
          }
          return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")");
      }
      else {
          return genStatic(el, state);
      }
  }
  function genIf(el, state, altGen, altEmpty) {
      el.ifProcessed = true; // avoid recursion
      return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
  }
  function genIfConditions(conditions, state, altGen, altEmpty) {
      if (!conditions.length) {
          return altEmpty || '_e()';
      }
      var condition = conditions.shift();
      if (condition.exp) {
          return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty));
      }
      else {
          return "".concat(genTernaryExp(condition.block));
      }
      // v-if with v-once should generate code like (a)?_m(0):_m(1)
      function genTernaryExp(el) {
          return altGen
              ? altGen(el, state)
              : el.once
                  ? genOnce(el, state)
                  : genElement(el, state);
      }
  }
  function genFor(el, state, altGen, altHelper) {
      var exp = el.for;
      var alias = el.alias;
      var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : '';
      var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : '';
      if (state.maybeComponent(el) &&
          el.tag !== 'slot' &&
          el.tag !== 'template' &&
          !el.key) {
          state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") +
              "v-for should have explicit keys. " +
              "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */);
      }
      el.forProcessed = true; // avoid recursion
      return ("".concat(altHelper || '_l', "((").concat(exp, "),") +
          "function(".concat(alias).concat(iterator1).concat(iterator2, "){") +
          "return ".concat((altGen || genElement)(el, state)) +
          '})');
  }
  function genData(el, state) {
      var data = '{';
      // directives first.
      // directives may mutate the el's other properties before they are generated.
      var dirs = genDirectives(el, state);
      if (dirs)
          data += dirs + ',';
      // key
      if (el.key) {
          data += "key:".concat(el.key, ",");
      }
      // ref
      if (el.ref) {
          data += "ref:".concat(el.ref, ",");
      }
      if (el.refInFor) {
          data += "refInFor:true,";
      }
      // pre
      if (el.pre) {
          data += "pre:true,";
      }
      // record original tag name for components using "is" attribute
      if (el.component) {
          data += "tag:\"".concat(el.tag, "\",");
      }
      // module data generation functions
      for (var i = 0; i < state.dataGenFns.length; i++) {
          data += state.dataGenFns[i](el);
      }
      // attributes
      if (el.attrs) {
          data += "attrs:".concat(genProps(el.attrs), ",");
      }
      // DOM props
      if (el.props) {
          data += "domProps:".concat(genProps(el.props), ",");
      }
      // event handlers
      if (el.events) {
          data += "".concat(genHandlers(el.events, false), ",");
      }
      if (el.nativeEvents) {
          data += "".concat(genHandlers(el.nativeEvents, true), ",");
      }
      // slot target
      // only for non-scoped slots
      if (el.slotTarget && !el.slotScope) {
          data += "slot:".concat(el.slotTarget, ",");
      }
      // scoped slots
      if (el.scopedSlots) {
          data += "".concat(genScopedSlots(el, el.scopedSlots, state), ",");
      }
      // component v-model
      if (el.model) {
          data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},");
      }
      // inline-template
      if (el.inlineTemplate) {
          var inlineTemplate = genInlineTemplate(el, state);
          if (inlineTemplate) {
              data += "".concat(inlineTemplate, ",");
          }
      }
      data = data.replace(/,$/, '') + '}';
      // v-bind dynamic argument wrap
      // v-bind with dynamic arguments must be applied using the same v-bind object
      // merge helper so that class/style/mustUseProp attrs are handled correctly.
      if (el.dynamicAttrs) {
          data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")");
      }
      // v-bind data wrap
      if (el.wrapData) {
          data = el.wrapData(data);
      }
      // v-on data wrap
      if (el.wrapListeners) {
          data = el.wrapListeners(data);
      }
      return data;
  }
  function genDirectives(el, state) {
      var dirs = el.directives;
      if (!dirs)
          return;
      var res = 'directives:[';
      var hasRuntime = false;
      var i, l, dir, needRuntime;
      for (i = 0, l = dirs.length; i < l; i++) {
          dir = dirs[i];
          needRuntime = true;
          var gen = state.directives[dir.name];
          if (gen) {
              // compile-time directive that manipulates AST.
              // returns true if it also needs a runtime counterpart.
              needRuntime = !!gen(el, dir, state.warn);
          }
          if (needRuntime) {
              hasRuntime = true;
              res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value
                  ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value))
                  : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},");
          }
      }
      if (hasRuntime) {
          return res.slice(0, -1) + ']';
      }
  }
  function genInlineTemplate(el, state) {
      var ast = el.children[0];
      if ((el.children.length !== 1 || ast.type !== 1)) {
          state.warn('Inline-template components must have exactly one child element.', { start: el.start });
      }
      if (ast && ast.type === 1) {
          var inlineRenderFns = generate(ast, state.options);
          return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns
              .map(function (code) { return "function(){".concat(code, "}"); })
              .join(','), "]}");
      }
  }
  function genScopedSlots(el, slots, state) {
      // by default scoped slots are considered "stable", this allows child
      // components with only scoped slots to skip forced updates from parent.
      // but in some cases we have to bail-out of this optimization
      // for example if the slot contains dynamic names, has v-if or v-for on them...
      var needsForceUpdate = el.for ||
          Object.keys(slots).some(function (key) {
              var slot = slots[key];
              return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
              );
          });
      // #9534: if a component with scoped slots is inside a conditional branch,
      // it's possible for the same component to be reused but with different
      // compiled slot content. To avoid that, we generate a unique key based on
      // the generated code of all the slot contents.
      var needsKey = !!el.if;
      // OR when it is inside another scoped slot or v-for (the reactivity may be
      // disconnected due to the intermediate scope variable)
      // #9438, #9506
      // TODO: this can be further optimized by properly analyzing in-scope bindings
      // and skip force updating ones that do not actually use scope variables.
      if (!needsForceUpdate) {
          var parent_2 = el.parent;
          while (parent_2) {
              if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||
                  parent_2.for) {
                  needsForceUpdate = true;
                  break;
              }
              if (parent_2.if) {
                  needsKey = true;
              }
              parent_2 = parent_2.parent;
          }
      }
      var generatedSlots = Object.keys(slots)
          .map(function (key) { return genScopedSlot(slots[key], state); })
          .join(',');
      return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")");
  }
  function hash(str) {
      var hash = 5381;
      var i = str.length;
      while (i) {
          hash = (hash * 33) ^ str.charCodeAt(--i);
      }
      return hash >>> 0;
  }
  function containsSlotChild(el) {
      if (el.type === 1) {
          if (el.tag === 'slot') {
              return true;
          }
          return el.children.some(containsSlotChild);
      }
      return false;
  }
  function genScopedSlot(el, state) {
      var isLegacySyntax = el.attrsMap['slot-scope'];
      if (el.if && !el.ifProcessed && !isLegacySyntax) {
          return genIf(el, state, genScopedSlot, "null");
      }
      if (el.for && !el.forProcessed) {
          return genFor(el, state, genScopedSlot);
      }
      var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope);
      var fn = "function(".concat(slotScope, "){") +
          "return ".concat(el.tag === 'template'
              ? el.if && isLegacySyntax
                  ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined")
                  : genChildren(el, state) || 'undefined'
              : genElement(el, state), "}");
      // reverse proxy v-slot without scope on this.$slots
      var reverseProxy = slotScope ? "" : ",proxy:true";
      return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}");
  }
  function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
      var children = el.children;
      if (children.length) {
          var el_1 = children[0];
          // optimize single v-for
          if (children.length === 1 &&
              el_1.for &&
              el_1.tag !== 'template' &&
              el_1.tag !== 'slot') {
              var normalizationType_1 = checkSkip
                  ? state.maybeComponent(el_1)
                      ? ",1"
                      : ",0"
                  : "";
              return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);
          }
          var normalizationType = checkSkip
              ? getNormalizationType(children, state.maybeComponent)
              : 0;
          var gen_1 = altGenNode || genNode;
          return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : '');
      }
  }
  // determine the normalization needed for the children array.
  // 0: no normalization needed
  // 1: simple normalization needed (possible 1-level deep nested array)
  // 2: full normalization needed
  function getNormalizationType(children, maybeComponent) {
      var res = 0;
      for (var i = 0; i < children.length; i++) {
          var el = children[i];
          if (el.type !== 1) {
              continue;
          }
          if (needsNormalization(el) ||
              (el.ifConditions &&
                  el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
              res = 2;
              break;
          }
          if (maybeComponent(el) ||
              (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
              res = 1;
          }
      }
      return res;
  }
  function needsNormalization(el) {
      return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
  }
  function genNode(node, state) {
      if (node.type === 1) {
          return genElement(node, state);
      }
      else if (node.type === 3 && node.isComment) {
          return genComment(node);
      }
      else {
          return genText(node);
      }
  }
  function genText(text) {
      return "_v(".concat(text.type === 2
          ? text.expression // no need for () because already wrapped in _s()
          : transformSpecialNewlines(JSON.stringify(text.text)), ")");
  }
  function genComment(comment) {
      return "_e(".concat(JSON.stringify(comment.text), ")");
  }
  function genSlot(el, state) {
      var slotName = el.slotName || '"default"';
      var children = genChildren(el, state);
      var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : '');
      var attrs = el.attrs || el.dynamicAttrs
          ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({
              // slot props are camelized
              name: camelize(attr.name),
              value: attr.value,
              dynamic: attr.dynamic
          }); }))
          : null;
      var bind = el.attrsMap['v-bind'];
      if ((attrs || bind) && !children) {
          res += ",null";
      }
      if (attrs) {
          res += ",".concat(attrs);
      }
      if (bind) {
          res += "".concat(attrs ? '' : ',null', ",").concat(bind);
      }
      return res + ')';
  }
  // componentName is el.component, take it as argument to shun flow's pessimistic refinement
  function genComponent(componentName, el, state) {
      var children = el.inlineTemplate ? null : genChildren(el, state, true);
      return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")");
  }
  function genProps(props) {
      var staticProps = "";
      var dynamicProps = "";
      for (var i = 0; i < props.length; i++) {
          var prop = props[i];
          var value = transformSpecialNewlines(prop.value);
          if (prop.dynamic) {
              dynamicProps += "".concat(prop.name, ",").concat(value, ",");
          }
          else {
              staticProps += "\"".concat(prop.name, "\":").concat(value, ",");
          }
      }
      staticProps = "{".concat(staticProps.slice(0, -1), "}");
      if (dynamicProps) {
          return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])");
      }
      else {
          return staticProps;
      }
  }
  // #3895, #4268
  function transformSpecialNewlines(text) {
      return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
  }

  // these keywords should not appear inside expressions, but operators like
  // typeof, instanceof and in are allowed
  var prohibitedKeywordRE = new RegExp('\\b' +
      ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
          'super,throw,while,yield,delete,export,import,return,switch,default,' +
          'extends,finally,continue,debugger,function,arguments')
          .split(',')
          .join('\\b|\\b') +
      '\\b');
  // these unary operators should not be used as property/method names
  var unaryOperatorsRE = new RegExp('\\b' +
      'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
      '\\s*\\([^\\)]*\\)');
  // strip strings in expressions
  var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
  // detect problematic expressions in a template
  function detectErrors(ast, warn) {
      if (ast) {
          checkNode(ast, warn);
      }
  }
  function checkNode(node, warn) {
      if (node.type === 1) {
          for (var name_1 in node.attrsMap) {
              if (dirRE.test(name_1)) {
                  var value = node.attrsMap[name_1];
                  if (value) {
                      var range = node.rawAttrsMap[name_1];
                      if (name_1 === 'v-for') {
                          checkFor(node, "v-for=\"".concat(value, "\""), warn, range);
                      }
                      else if (name_1 === 'v-slot' || name_1[0] === '#') {
                          checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
                      }
                      else if (onRE.test(name_1)) {
                          checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
                      }
                      else {
                          checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
                      }
                  }
              }
          }
          if (node.children) {
              for (var i = 0; i < node.children.length; i++) {
                  checkNode(node.children[i], warn);
              }
          }
      }
      else if (node.type === 2) {
          checkExpression(node.expression, node.text, warn, node);
      }
  }
  function checkEvent(exp, text, warn, range) {
      var stripped = exp.replace(stripStringRE, '');
      var keywordMatch = stripped.match(unaryOperatorsRE);
      if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
          warn("avoid using JavaScript unary operator as property name: " +
              "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range);
      }
      checkExpression(exp, text, warn, range);
  }
  function checkFor(node, text, warn, range) {
      checkExpression(node.for || '', text, warn, range);
      checkIdentifier(node.alias, 'v-for alias', text, warn, range);
      checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
      checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
  }
  function checkIdentifier(ident, type, text, warn, range) {
      if (typeof ident === 'string') {
          try {
              new Function("var ".concat(ident, "=_"));
          }
          catch (e) {
              warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range);
          }
      }
  }
  function checkExpression(exp, text, warn, range) {
      try {
          new Function("return ".concat(exp));
      }
      catch (e) {
          var keywordMatch = exp
              .replace(stripStringRE, '')
              .match(prohibitedKeywordRE);
          if (keywordMatch) {
              warn("avoid using JavaScript keyword as property name: " +
                  "\"".concat(keywordMatch[0], "\"\n  Raw expression: ").concat(text.trim()), range);
          }
          else {
              warn("invalid expression: ".concat(e.message, " in\n\n") +
                  "    ".concat(exp, "\n\n") +
                  "  Raw expression: ".concat(text.trim(), "\n"), range);
          }
      }
  }
  function checkFunctionParameterExpression(exp, text, warn, range) {
      try {
          new Function(exp, '');
      }
      catch (e) {
          warn("invalid function parameter expression: ".concat(e.message, " in\n\n") +
              "    ".concat(exp, "\n\n") +
              "  Raw expression: ".concat(text.trim(), "\n"), range);
      }
  }

  var range = 2;
  function generateCodeFrame(source, start, end) {
      if (start === void 0) { start = 0; }
      if (end === void 0) { end = source.length; }
      var lines = source.split(/\r?\n/);
      var count = 0;
      var res = [];
      for (var i = 0; i < lines.length; i++) {
          count += lines[i].length + 1;
          if (count >= start) {
              for (var j = i - range; j <= i + range || end > count; j++) {
                  if (j < 0 || j >= lines.length)
                      continue;
                  res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "|  ").concat(lines[j]));
                  var lineLength = lines[j].length;
                  if (j === i) {
                      // push underline
                      var pad = start - (count - lineLength) + 1;
                      var length_1 = end > count ? lineLength - pad : end - start;
                      res.push("   |  " + repeat(" ", pad) + repeat("^", length_1));
                  }
                  else if (j > i) {
                      if (end > count) {
                          var length_2 = Math.min(end - count, lineLength);
                          res.push("   |  " + repeat("^", length_2));
                      }
                      count += lineLength + 1;
                  }
              }
              break;
          }
      }
      return res.join('\n');
  }
  function repeat(str, n) {
      var result = '';
      if (n > 0) {
          // eslint-disable-next-line no-constant-condition
          while (true) {
              // eslint-disable-line
              if (n & 1)
                  result += str;
              n >>>= 1;
              if (n <= 0)
                  break;
              str += str;
          }
      }
      return result;
  }

  function createFunction(code, errors) {
      try {
          return new Function(code);
      }
      catch (err) {
          errors.push({ err: err, code: code });
          return noop;
      }
  }
  function createCompileToFunctionFn(compile) {
      var cache = Object.create(null);
      return function compileToFunctions(template, options, vm) {
          options = extend({}, options);
          var warn = options.warn || warn$2;
          delete options.warn;
          /* istanbul ignore if */
          {
              // detect possible CSP restriction
              try {
                  new Function('return 1');
              }
              catch (e) {
                  if (e.toString().match(/unsafe-eval|CSP/)) {
                      warn('It seems you are using the standalone build of Vue.js in an ' +
                          'environment with Content Security Policy that prohibits unsafe-eval. ' +
                          'The template compiler cannot work in this environment. Consider ' +
                          'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
                          'templates into render functions.');
                  }
              }
          }
          // check cache
          var key = options.delimiters
              ? String(options.delimiters) + template
              : template;
          if (cache[key]) {
              return cache[key];
          }
          // compile
          var compiled = compile(template, options);
          // check compilation errors/tips
          {
              if (compiled.errors && compiled.errors.length) {
                  if (options.outputSourceRange) {
                      compiled.errors.forEach(function (e) {
                          warn("Error compiling template:\n\n".concat(e.msg, "\n\n") +
                              generateCodeFrame(template, e.start, e.end), vm);
                      });
                  }
                  else {
                      warn("Error compiling template:\n\n".concat(template, "\n\n") +
                          compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') +
                          '\n', vm);
                  }
              }
              if (compiled.tips && compiled.tips.length) {
                  if (options.outputSourceRange) {
                      compiled.tips.forEach(function (e) { return tip(e.msg, vm); });
                  }
                  else {
                      compiled.tips.forEach(function (msg) { return tip(msg, vm); });
                  }
              }
          }
          // turn code into functions
          var res = {};
          var fnGenErrors = [];
          res.render = createFunction(compiled.render, fnGenErrors);
          res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
              return createFunction(code, fnGenErrors);
          });
          // check function generation errors.
          // this should only happen if there is a bug in the compiler itself.
          // mostly for codegen development use
          /* istanbul ignore if */
          {
              if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
                  warn("Failed to generate render function:\n\n" +
                      fnGenErrors
                          .map(function (_a) {
                          var err = _a.err, code = _a.code;
                          return "".concat(err.toString(), " in\n\n").concat(code, "\n");
                      })
                          .join('\n'), vm);
              }
          }
          return (cache[key] = res);
      };
  }

  function createCompilerCreator(baseCompile) {
      return function createCompiler(baseOptions) {
          function compile(template, options) {
              var finalOptions = Object.create(baseOptions);
              var errors = [];
              var tips = [];
              var warn = function (msg, range, tip) {
                  (tip ? tips : errors).push(msg);
              };
              if (options) {
                  if (options.outputSourceRange) {
                      // $flow-disable-line
                      var leadingSpaceLength_1 = template.match(/^\s*/)[0].length;
                      warn = function (msg, range, tip) {
                          var data = typeof msg === 'string' ? { msg: msg } : msg;
                          if (range) {
                              if (range.start != null) {
                                  data.start = range.start + leadingSpaceLength_1;
                              }
                              if (range.end != null) {
                                  data.end = range.end + leadingSpaceLength_1;
                              }
                          }
                          (tip ? tips : errors).push(data);
                      };
                  }
                  // merge custom modules
                  if (options.modules) {
                      finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
                  }
                  // merge custom directives
                  if (options.directives) {
                      finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
                  }
                  // copy other options
                  for (var key in options) {
                      if (key !== 'modules' && key !== 'directives') {
                          finalOptions[key] = options[key];
                      }
                  }
              }
              finalOptions.warn = warn;
              var compiled = baseCompile(template.trim(), finalOptions);
              {
                  detectErrors(compiled.ast, warn);
              }
              compiled.errors = errors;
              compiled.tips = tips;
              return compiled;
          }
          return {
              compile: compile,
              compileToFunctions: createCompileToFunctionFn(compile)
          };
      };
  }

  // `createCompilerCreator` allows creating compilers that use alternative
  // parser/optimizer/codegen, e.g the SSR optimizing compiler.
  // Here we just export a default compiler using the default parts.
  var createCompiler = createCompilerCreator(function baseCompile(template, options) {
      var ast = parse(template.trim(), options);
      if (options.optimize !== false) {
          optimize(ast, options);
      }
      var code = generate(ast, options);
      return {
          ast: ast,
          render: code.render,
          staticRenderFns: code.staticRenderFns
      };
  });

  var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;

  // check whether current browser encodes a char inside attribute values
  var div;
  function getShouldDecode(href) {
      div = div || document.createElement('div');
      div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
      return div.innerHTML.indexOf('&#10;') > 0;
  }
  // #3663: IE encodes newlines inside attribute values while other browsers don't
  var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
  // #6828: chrome encodes content in a[href]
  var shouldDecodeNewlinesForHref = inBrowser
      ? getShouldDecode(true)
      : false;

  var idToTemplate = cached(function (id) {
      var el = query(id);
      return el && el.innerHTML;
  });
  var mount = Vue.prototype.$mount;
  Vue.prototype.$mount = function (el, hydrating) {
      el = el && query(el);
      /* istanbul ignore if */
      if (el === document.body || el === document.documentElement) {
          warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead.");
          return this;
      }
      var options = this.$options;
      // resolve template/el and convert to render function
      if (!options.render) {
          var template = options.template;
          if (template) {
              if (typeof template === 'string') {
                  if (template.charAt(0) === '#') {
                      template = idToTemplate(template);
                      /* istanbul ignore if */
                      if (!template) {
                          warn$2("Template element not found or is empty: ".concat(options.template), this);
                      }
                  }
              }
              else if (template.nodeType) {
                  template = template.innerHTML;
              }
              else {
                  {
                      warn$2('invalid template option:' + template, this);
                  }
                  return this;
              }
          }
          else if (el) {
              // @ts-expect-error
              template = getOuterHTML(el);
          }
          if (template) {
              /* istanbul ignore if */
              if (config.performance && mark) {
                  mark('compile');
              }
              var _a = compileToFunctions(template, {
                  outputSourceRange: true,
                  shouldDecodeNewlines: shouldDecodeNewlines,
                  shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
                  delimiters: options.delimiters,
                  comments: options.comments
              }, this), render = _a.render, staticRenderFns = _a.staticRenderFns;
              options.render = render;
              options.staticRenderFns = staticRenderFns;
              /* istanbul ignore if */
              if (config.performance && mark) {
                  mark('compile end');
                  measure("vue ".concat(this._name, " compile"), 'compile', 'compile end');
              }
          }
      }
      return mount.call(this, el, hydrating);
  };
  /**
   * Get outerHTML of elements, taking care
   * of SVG elements in IE as well.
   */
  function getOuterHTML(el) {
      if (el.outerHTML) {
          return el.outerHTML;
      }
      else {
          var container = document.createElement('div');
          container.appendChild(el.cloneNode(true));
          return container.innerHTML;
      }
  }
  Vue.compile = compileToFunctions;

  // export type EffectScheduler = (...args: any[]) => any
  /**
   * @internal since we are not exposing this in Vue 2, it's used only for
   * internal testing.
   */
  function effect(fn, scheduler) {
      var watcher = new Watcher(currentInstance, fn, noop, {
          sync: true
      });
      if (scheduler) {
          watcher.update = function () {
              scheduler(function () { return watcher.run(); });
          };
      }
  }

  extend(Vue, vca);
  Vue.effect = effect;

  return Vue;

}));
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Vue=e()}(this,(function(){"use strict";var t=Object.freeze({}),e=Array.isArray;function n(t){return null==t}function r(t){return null!=t}function o(t){return!0===t}function i(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function a(t){return"function"==typeof t}function s(t){return null!==t&&"object"==typeof t}var c=Object.prototype.toString;function u(t){return"[object Object]"===c.call(t)}function l(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return r(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||u(t)&&t.toString===c?JSON.stringify(t,null,2):String(t)}function p(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}var h=v("slot,component",!0),m=v("key,ref,slot,slot-scope,is");function g(t,e){var n=t.length;if(n){if(e===t[n-1])return void(t.length=n-1);var r=t.indexOf(e);if(r>-1)return t.splice(r,1)}}var y=Object.prototype.hasOwnProperty;function _(t,e){return y.call(t,e)}function b(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var $=/-(\w)/g,w=b((function(t){return t.replace($,(function(t,e){return e?e.toUpperCase():""}))})),x=b((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),C=/\B([A-Z])/g,k=b((function(t){return t.replace(C,"-$1").toLowerCase()}));var S=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function O(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function T(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n<t.length;n++)t[n]&&T(e,t[n]);return e}function j(t,e,n){}var E=function(t,e,n){return!1},N=function(t){return t};function P(t,e){if(t===e)return!0;var n=s(t),r=s(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{var o=Array.isArray(t),i=Array.isArray(e);if(o&&i)return t.length===e.length&&t.every((function(t,n){return P(t,e[n])}));if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(o||i)return!1;var a=Object.keys(t),c=Object.keys(e);return a.length===c.length&&a.every((function(n){return P(t[n],e[n])}))}catch(t){return!1}}function D(t,e){for(var n=0;n<t.length;n++)if(P(t[n],e))return n;return-1}function M(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function I(t,e){return t===e?0===t&&1/t!=1/e:t==t||e==e}var L="data-server-rendered",R=["component","directive","filter"],F=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"],H={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:E,isReservedAttr:E,isUnknownElement:E,getTagNamespace:j,parsePlatformTagName:N,mustUseProp:E,async:!0,_lifecycleHooks:F},B=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function U(t){var e=(t+"").charCodeAt(0);return 36===e||95===e}function z(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var V=new RegExp("[^".concat(B.source,".$_\\d]"));var K="__proto__"in{},J="undefined"!=typeof window,q=J&&window.navigator.userAgent.toLowerCase(),W=q&&/msie|trident/.test(q),Z=q&&q.indexOf("msie 9.0")>0,G=q&&q.indexOf("edge/")>0;q&&q.indexOf("android");var X=q&&/iphone|ipad|ipod|ios/.test(q);q&&/chrome\/\d+/.test(q),q&&/phantomjs/.test(q);var Y,Q=q&&q.match(/firefox\/(\d+)/),tt={}.watch,et=!1;if(J)try{var nt={};Object.defineProperty(nt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,nt)}catch(t){}var rt=function(){return void 0===Y&&(Y=!J&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),Y},ot=J&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function it(t){return"function"==typeof t&&/native code/.test(t.toString())}var at,st="undefined"!=typeof Symbol&&it(Symbol)&&"undefined"!=typeof Reflect&&it(Reflect.ownKeys);at="undefined"!=typeof Set&&it(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ct=null;function ut(t){void 0===t&&(t=null),t||ct&&ct._scope.off(),ct=t,t&&t._scope.on()}var lt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),ft=function(t){void 0===t&&(t="");var e=new lt;return e.text=t,e.isComment=!0,e};function dt(t){return new lt(void 0,void 0,void 0,String(t))}function pt(t){var e=new lt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var vt=0,ht=[],mt=function(){function t(){this._pending=!1,this.id=vt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,ht.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){for(var e=this.subs.filter((function(t){return t})),n=0,r=e.length;n<r;n++){e[n].update()}},t}();mt.target=null;var gt=[];function yt(t){gt.push(t),mt.target=t}function _t(){gt.pop(),mt.target=gt[gt.length-1]}var bt=Array.prototype,$t=Object.create(bt);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(t){var e=bt[t];z($t,t,(function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var o,i=e.apply(this,n),a=this.__ob__;switch(t){case"push":case"unshift":o=n;break;case"splice":o=n.slice(2)}return o&&a.observeArray(o),a.dep.notify(),i}))}));var wt=Object.getOwnPropertyNames($t),xt={},Ct=!0;function kt(t){Ct=t}var St={notify:j,depend:j,addSub:j,removeSub:j},Ot=function(){function t(t,n,r){if(void 0===n&&(n=!1),void 0===r&&(r=!1),this.value=t,this.shallow=n,this.mock=r,this.dep=r?St:new mt,this.vmCount=0,z(t,"__ob__",this),e(t)){if(!r)if(K)t.__proto__=$t;else for(var o=0,i=wt.length;o<i;o++){z(t,s=wt[o],$t[s])}n||this.observeArray(t)}else{var a=Object.keys(t);for(o=0;o<a.length;o++){var s;At(t,s=a[o],xt,void 0,n,r)}}}return t.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)Tt(t[e],!1,this.mock)},t}();function Tt(t,n,r){return t&&_(t,"__ob__")&&t.__ob__ instanceof Ot?t.__ob__:!Ct||!r&&rt()||!e(t)&&!u(t)||!Object.isExtensible(t)||t.__v_skip||Ft(t)||t instanceof lt?void 0:new Ot(t,n,r)}function At(t,n,r,o,i,a){var s=new mt,c=Object.getOwnPropertyDescriptor(t,n);if(!c||!1!==c.configurable){var u=c&&c.get,l=c&&c.set;u&&!l||r!==xt&&2!==arguments.length||(r=t[n]);var f=!i&&Tt(r,!1,a);return Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var n=u?u.call(t):r;return mt.target&&(s.depend(),f&&(f.dep.depend(),e(n)&&Nt(n))),Ft(n)&&!i?n.value:n},set:function(e){var n=u?u.call(t):r;if(I(n,e)){if(l)l.call(t,e);else{if(u)return;if(!i&&Ft(n)&&!Ft(e))return void(n.value=e);r=e}f=!i&&Tt(e,!1,a),s.notify()}}}),s}}function jt(t,n,r){if(!Lt(t)){var o=t.__ob__;return e(t)&&l(n)?(t.length=Math.max(t.length,n),t.splice(n,1,r),o&&!o.shallow&&o.mock&&Tt(r,!1,!0),r):n in t&&!(n in Object.prototype)?(t[n]=r,r):t._isVue||o&&o.vmCount?r:o?(At(o.value,n,r,void 0,o.shallow,o.mock),o.dep.notify(),r):(t[n]=r,r)}}function Et(t,n){if(e(t)&&l(n))t.splice(n,1);else{var r=t.__ob__;t._isVue||r&&r.vmCount||Lt(t)||_(t,n)&&(delete t[n],r&&r.dep.notify())}}function Nt(t){for(var n=void 0,r=0,o=t.length;r<o;r++)(n=t[r])&&n.__ob__&&n.__ob__.dep.depend(),e(n)&&Nt(n)}function Pt(t){return Dt(t,!0),z(t,"__v_isShallow",!0),t}function Dt(t,e){Lt(t)||Tt(t,e,rt())}function Mt(t){return Lt(t)?Mt(t.__v_raw):!(!t||!t.__ob__)}function It(t){return!(!t||!t.__v_isShallow)}function Lt(t){return!(!t||!t.__v_isReadonly)}var Rt="__v_isRef";function Ft(t){return!(!t||!0!==t.__v_isRef)}function Ht(t,e){if(Ft(t))return t;var n={};return z(n,Rt,!0),z(n,"__v_isShallow",e),z(n,"dep",At(n,"value",t,null,e,rt())),n}function Bt(t,e,n){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var t=e[n];if(Ft(t))return t.value;var r=t&&t.__ob__;return r&&r.dep.depend(),t},set:function(t){var r=e[n];Ft(r)&&!Ft(t)?r.value=t:e[n]=t}})}function Ut(t,e,n){var r=t[e];if(Ft(r))return r;var o={get value(){var r=t[e];return void 0===r?n:r},set value(n){t[e]=n}};return z(o,Rt,!0),o}function zt(t){return Vt(t,!1)}function Vt(t,e){if(!u(t))return t;if(Lt(t))return t;var n=e?"__v_rawToShallowReadonly":"__v_rawToReadonly",r=t[n];if(r)return r;var o=Object.create(Object.getPrototypeOf(t));z(t,n,o),z(o,"__v_isReadonly",!0),z(o,"__v_raw",t),Ft(t)&&z(o,Rt,!0),(e||It(t))&&z(o,"__v_isShallow",!0);for(var i=Object.keys(t),a=0;a<i.length;a++)Kt(o,t,i[a],e);return o}function Kt(t,e,n,r){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var t=e[n];return r||!u(t)?t:zt(t)},set:function(){}})}var Jt=b((function(t){var e="&"===t.charAt(0),n="~"===(t=e?t.slice(1):t).charAt(0),r="!"===(t=n?t.slice(1):t).charAt(0);return{name:t=r?t.slice(1):t,once:n,capture:r,passive:e}}));function qt(t,n){function r(){var t=r.fns;if(!e(t))return dn(t,null,arguments,n,"v-on handler");for(var o=t.slice(),i=0;i<o.length;i++)dn(o[i],null,arguments,n,"v-on handler")}return r.fns=t,r}function Wt(t,e,r,i,a,s){var c,u,l,f;for(c in t)u=t[c],l=e[c],f=Jt(c),n(u)||(n(l)?(n(u.fns)&&(u=t[c]=qt(u,s)),o(f.once)&&(u=t[c]=a(f.name,u,f.capture)),r(f.name,u,f.capture,f.passive,f.params)):u!==l&&(l.fns=u,t[c]=l));for(c in e)n(t[c])&&i((f=Jt(c)).name,e[c],f.capture)}function Zt(t,e,i){var a;t instanceof lt&&(t=t.data.hook||(t.data.hook={}));var s=t[e];function c(){i.apply(this,arguments),g(a.fns,c)}n(s)?a=qt([c]):r(s.fns)&&o(s.merged)?(a=s).fns.push(c):a=qt([s,c]),a.merged=!0,t[e]=a}function Gt(t,e,n,o,i){if(r(e)){if(_(e,n))return t[n]=e[n],i||delete e[n],!0;if(_(e,o))return t[n]=e[o],i||delete e[o],!0}return!1}function Xt(t){return i(t)?[dt(t)]:e(t)?Qt(t):void 0}function Yt(t){return r(t)&&r(t.text)&&!1===t.isComment}function Qt(t,a){var s,c,u,l,f=[];for(s=0;s<t.length;s++)n(c=t[s])||"boolean"==typeof c||(l=f[u=f.length-1],e(c)?c.length>0&&(Yt((c=Qt(c,"".concat(a||"","_").concat(s)))[0])&&Yt(l)&&(f[u]=dt(l.text+c[0].text),c.shift()),f.push.apply(f,c)):i(c)?Yt(l)?f[u]=dt(l.text+c):""!==c&&f.push(dt(c)):Yt(c)&&Yt(l)?f[u]=dt(l.text+c.text):(o(t._isVList)&&r(c.tag)&&n(c.key)&&r(a)&&(c.key="__vlist".concat(a,"_").concat(s,"__")),f.push(c)));return f}function te(t,n,c,u,l,f){return(e(c)||i(c))&&(l=u,u=c,c=void 0),o(f)&&(l=2),function(t,n,o,i,c){if(r(o)&&r(o.__ob__))return ft();r(o)&&r(o.is)&&(n=o.is);if(!n)return ft();e(i)&&a(i[0])&&((o=o||{}).scopedSlots={default:i[0]},i.length=0);2===c?i=Xt(i):1===c&&(i=function(t){for(var n=0;n<t.length;n++)if(e(t[n]))return Array.prototype.concat.apply([],t);return t}(i));var u,l;if("string"==typeof n){var f=void 0;l=t.$vnode&&t.$vnode.ns||H.getTagNamespace(n),u=H.isReservedTag(n)?new lt(H.parsePlatformTagName(n),o,i,void 0,void 0,t):o&&o.pre||!r(f=yr(t.$options,"components",n))?new lt(n,o,i,void 0,void 0,t):cr(f,o,t,i,n)}else u=cr(n,o,t,i);return e(u)?u:r(u)?(r(l)&&ee(u,l),r(o)&&function(t){s(t.style)&&Bn(t.style);s(t.class)&&Bn(t.class)}(o),u):ft()}(t,n,c,u,l)}function ee(t,e,i){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,i=!0),r(t.children))for(var a=0,s=t.children.length;a<s;a++){var c=t.children[a];r(c.tag)&&(n(c.ns)||o(i)&&"svg"!==c.tag)&&ee(c,e,i)}}function ne(t,n){var o,i,a,c,u=null;if(e(t)||"string"==typeof t)for(u=new Array(t.length),o=0,i=t.length;o<i;o++)u[o]=n(t[o],o);else if("number"==typeof t)for(u=new Array(t),o=0;o<t;o++)u[o]=n(o+1,o);else if(s(t))if(st&&t[Symbol.iterator]){u=[];for(var l=t[Symbol.iterator](),f=l.next();!f.done;)u.push(n(f.value,u.length)),f=l.next()}else for(a=Object.keys(t),u=new Array(a.length),o=0,i=a.length;o<i;o++)c=a[o],u[o]=n(t[c],c,o);return r(u)||(u=[]),u._isVList=!0,u}function re(t,e,n,r){var o,i=this.$scopedSlots[t];i?(n=n||{},r&&(n=T(T({},r),n)),o=i(n)||(a(e)?e():e)):o=this.$slots[t]||(a(e)?e():e);var s=n&&n.slot;return s?this.$createElement("template",{slot:s},o):o}function oe(t){return yr(this.$options,"filters",t)||N}function ie(t,n){return e(t)?-1===t.indexOf(n):t!==n}function ae(t,e,n,r,o){var i=H.keyCodes[e]||n;return o&&r&&!H.keyCodes[e]?ie(o,r):i?ie(i,t):r?k(r)!==e:void 0===t}function se(t,n,r,o,i){if(r)if(s(r)){e(r)&&(r=A(r));var a=void 0,c=function(e){if("class"===e||"style"===e||m(e))a=t;else{var s=t.attrs&&t.attrs.type;a=o||H.mustUseProp(n,s,e)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}var c=w(e),u=k(e);c in a||u in a||(a[e]=r[e],i&&((t.on||(t.on={}))["update:".concat(e)]=function(t){r[e]=t}))};for(var u in r)c(u)}else;return t}function ce(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];return r&&!e||le(r=n[t]=this.$options.staticRenderFns[t].call(this._renderProxy,this._c,this),"__static__".concat(t),!1),r}function ue(t,e,n){return le(t,"__once__".concat(e).concat(n?"_".concat(n):""),!0),t}function le(t,n,r){if(e(t))for(var o=0;o<t.length;o++)t[o]&&"string"!=typeof t[o]&&fe(t[o],"".concat(n,"_").concat(o),r);else fe(t,n,r)}function fe(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function de(t,e){if(e)if(u(e)){var n=t.on=t.on?T({},t.on):{};for(var r in e){var o=n[r],i=e[r];n[r]=o?[].concat(o,i):i}}else;return t}function pe(t,n,r,o){n=n||{$stable:!r};for(var i=0;i<t.length;i++){var a=t[i];e(a)?pe(a,n,r):a&&(a.proxy&&(a.fn.proxy=!0),n[a.key]=a.fn)}return o&&(n.$key=o),n}function ve(t,e){for(var n=0;n<e.length;n+=2){var r=e[n];"string"==typeof r&&r&&(t[e[n]]=e[n+1])}return t}function he(t,e){return"string"==typeof t?e+t:t}function me(t){t._o=ue,t._n=p,t._s=d,t._l=ne,t._t=re,t._q=P,t._i=D,t._m=ce,t._f=oe,t._k=ae,t._b=se,t._v=dt,t._e=ft,t._u=pe,t._g=de,t._d=ve,t._p=he}function ge(t,e){if(!t||!t.length)return{};for(var n={},r=0,o=t.length;r<o;r++){var i=t[r],a=i.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,i.context!==e&&i.fnContext!==e||!a||null==a.slot)(n.default||(n.default=[])).push(i);else{var s=a.slot,c=n[s]||(n[s]=[]);"template"===i.tag?c.push.apply(c,i.children||[]):c.push(i)}}for(var u in n)n[u].every(ye)&&delete n[u];return n}function ye(t){return t.isComment&&!t.asyncFactory||" "===t.text}function _e(t){return t.isComment&&t.asyncFactory}function be(e,n,r,o){var i,a=Object.keys(r).length>0,s=n?!!n.$stable:!a,c=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(s&&o&&o!==t&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},n)n[u]&&"$"!==u[0]&&(i[u]=$e(e,r,u,n[u]))}else i={};for(var l in r)l in i||(i[l]=we(r,l));return n&&Object.isExtensible(n)&&(n._normalized=i),z(i,"$stable",s),z(i,"$key",c),z(i,"$hasNormal",a),i}function $e(t,n,r,o){var i=function(){var n=ct;ut(t);var r=arguments.length?o.apply(null,arguments):o({}),i=(r=r&&"object"==typeof r&&!e(r)?[r]:Xt(r))&&r[0];return ut(n),r&&(!i||1===r.length&&i.isComment&&!_e(i))?void 0:r};return o.proxy&&Object.defineProperty(n,r,{get:i,enumerable:!0,configurable:!0}),i}function we(t,e){return function(){return t[e]}}function xe(e){return{get attrs(){if(!e._attrsProxy){var n=e._attrsProxy={};z(n,"_v_attr_proxy",!0),Ce(n,e.$attrs,t,e,"$attrs")}return e._attrsProxy},get listeners(){e._listenersProxy||Ce(e._listenersProxy={},e.$listeners,t,e,"$listeners");return e._listenersProxy},get slots(){return function(t){t._slotsProxy||Se(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(e)},emit:S(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return Bt(e,t,n)}))}}}function Ce(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,ke(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function ke(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function Se(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}function Oe(){var t=ct;return t._setupContext||(t._setupContext=xe(t))}var Te,Ae=null;function je(t,e){return(t.__esModule||st&&"Module"===t[Symbol.toStringTag])&&(t=t.default),s(t)?e.extend(t):t}function Ee(t){if(e(t))for(var n=0;n<t.length;n++){var o=t[n];if(r(o)&&(r(o.componentOptions)||_e(o)))return o}}function Ne(t,e){Te.$on(t,e)}function Pe(t,e){Te.$off(t,e)}function De(t,e){var n=Te;return function r(){var o=e.apply(null,arguments);null!==o&&n.$off(t,r)}}function Me(t,e,n){Te=t,Wt(e,n||{},Ne,Pe,De,t),Te=void 0}var Ie=null;function Le(t){var e=Ie;return Ie=t,function(){Ie=e}}function Re(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function Fe(t,e){if(e){if(t._directInactive=!1,Re(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)Fe(t.$children[n]);Be(t,"activated")}}function He(t,e){if(!(e&&(t._directInactive=!0,Re(t))||t._inactive)){t._inactive=!0;for(var n=0;n<t.$children.length;n++)He(t.$children[n]);Be(t,"deactivated")}}function Be(t,e,n,r){void 0===r&&(r=!0),yt();var o=ct;r&&ut(t);var i=t.$options[e],a="".concat(e," hook");if(i)for(var s=0,c=i.length;s<c;s++)dn(i[s],t,n||null,t,a);t._hasHookEvent&&t.$emit("hook:"+e),r&&ut(o),_t()}var Ue=[],ze=[],Ve={},Ke=!1,Je=!1,qe=0;var We=0,Ze=Date.now;if(J&&!W){var Ge=window.performance;Ge&&"function"==typeof Ge.now&&Ze()>document.createEvent("Event").timeStamp&&(Ze=function(){return Ge.now()})}var Xe=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function Ye(){var t,e;for(We=Ze(),Je=!0,Ue.sort(Xe),qe=0;qe<Ue.length;qe++)(t=Ue[qe]).before&&t.before(),e=t.id,Ve[e]=null,t.run();var n=ze.slice(),r=Ue.slice();qe=Ue.length=ze.length=0,Ve={},Ke=Je=!1,function(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,Fe(t[e],!0)}(n),function(t){var e=t.length;for(;e--;){var n=t[e],r=n.vm;r&&r._watcher===n&&r._isMounted&&!r._isDestroyed&&Be(r,"updated")}}(r),function(){for(var t=0;t<ht.length;t++){var e=ht[t];e.subs=e.subs.filter((function(t){return t})),e._pending=!1}ht.length=0}(),ot&&H.devtools&&ot.emit("flush")}function Qe(t){var e=t.id;if(null==Ve[e]&&(t!==mt.target||!t.noRecurse)){if(Ve[e]=!0,Je){for(var n=Ue.length-1;n>qe&&Ue[n].id>t.id;)n--;Ue.splice(n+1,0,t)}else Ue.push(t);Ke||(Ke=!0,Cn(Ye))}}var tn="watcher",en="".concat(tn," callback"),nn="".concat(tn," getter"),rn="".concat(tn," cleanup");function on(t,e){return cn(t,null,{flush:"post"})}var an,sn={};function cn(n,r,o){var i=void 0===o?t:o,s=i.immediate,c=i.deep,u=i.flush,l=void 0===u?"pre":u;i.onTrack,i.onTrigger;var f,d,p=ct,v=function(t,e,n){return void 0===n&&(n=null),dn(t,null,n,p,e)},h=!1,m=!1;if(Ft(n)?(f=function(){return n.value},h=It(n)):Mt(n)?(f=function(){return n.__ob__.dep.depend(),n},c=!0):e(n)?(m=!0,h=n.some((function(t){return Mt(t)||It(t)})),f=function(){return n.map((function(t){return Ft(t)?t.value:Mt(t)?Bn(t):a(t)?v(t,nn):void 0}))}):f=a(n)?r?function(){return v(n,nn)}:function(){if(!p||!p._isDestroyed)return d&&d(),v(n,tn,[y])}:j,r&&c){var g=f;f=function(){return Bn(g())}}var y=function(t){d=_.onStop=function(){v(t,rn)}};if(rt())return y=j,r?s&&v(r,en,[f(),m?[]:void 0,y]):f(),j;var _=new Vn(ct,f,j,{lazy:!0});_.noRecurse=!r;var b=m?[]:sn;return _.run=function(){if(_.active)if(r){var t=_.get();(c||h||(m?t.some((function(t,e){return I(t,b[e])})):I(t,b)))&&(d&&d(),v(r,en,[t,b===sn?void 0:b,y]),b=t)}else _.get()},"sync"===l?_.update=_.run:"post"===l?(_.post=!0,_.update=function(){return Qe(_)}):_.update=function(){if(p&&p===ct&&!p._isMounted){var t=p._preWatchers||(p._preWatchers=[]);t.indexOf(_)<0&&t.push(_)}else Qe(_)},r?s?_.run():b=_.get():"post"===l&&p?p.$once("hook:mounted",(function(){return _.get()})):_.get(),function(){_.teardown()}}var un=function(){function t(t){void 0===t&&(t=!1),this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=an,!t&&an&&(this.index=(an.scopes||(an.scopes=[])).push(this)-1)}return t.prototype.run=function(t){if(this.active){var e=an;try{return an=this,t()}finally{an=e}}},t.prototype.on=function(){an=this},t.prototype.off=function(){an=this.parent},t.prototype.stop=function(t){if(this.active){var e=void 0,n=void 0;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].teardown();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(!this.detached&&this.parent&&!t){var r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0,this.active=!1}},t}();function ln(t){var e=t._provided,n=t.$parent&&t.$parent._provided;return n===e?t._provided=Object.create(n):e}function fn(t,e,n){yt();try{if(e)for(var r=e;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,t,e,n))return}catch(t){pn(t,r,"errorCaptured hook")}}pn(t,e,n)}finally{_t()}}function dn(t,e,n,r,o){var i;try{(i=n?t.apply(e,n):t.call(e))&&!i._isVue&&f(i)&&!i._handled&&(i.catch((function(t){return fn(t,r,o+" (Promise/async)")})),i._handled=!0)}catch(t){fn(t,r,o)}return i}function pn(t,e,n){if(H.errorHandler)try{return H.errorHandler.call(null,t,e,n)}catch(e){e!==t&&vn(e)}vn(t)}function vn(t,e,n){if(!J||"undefined"==typeof console)throw t;console.error(t)}var hn,mn=!1,gn=[],yn=!1;function _n(){yn=!1;var t=gn.slice(0);gn.length=0;for(var e=0;e<t.length;e++)t[e]()}if("undefined"!=typeof Promise&&it(Promise)){var bn=Promise.resolve();hn=function(){bn.then(_n),X&&setTimeout(j)},mn=!0}else if(W||"undefined"==typeof MutationObserver||!it(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())hn="undefined"!=typeof setImmediate&&it(setImmediate)?function(){setImmediate(_n)}:function(){setTimeout(_n,0)};else{var $n=1,wn=new MutationObserver(_n),xn=document.createTextNode(String($n));wn.observe(xn,{characterData:!0}),hn=function(){$n=($n+1)%2,xn.data=String($n)},mn=!0}function Cn(t,e){var n;if(gn.push((function(){if(t)try{t.call(e)}catch(t){fn(t,e,"nextTick")}else n&&n(e)})),yn||(yn=!0,hn()),!t&&"undefined"!=typeof Promise)return new Promise((function(t){n=t}))}function kn(t){return function(e,n){if(void 0===n&&(n=ct),n)return function(t,e,n){var r=t.$options;r[e]=vr(r[e],n)}(n,t,e)}}var Sn=kn("beforeMount"),On=kn("mounted"),Tn=kn("beforeUpdate"),An=kn("updated"),jn=kn("beforeDestroy"),En=kn("destroyed"),Nn=kn("activated"),Pn=kn("deactivated"),Dn=kn("serverPrefetch"),Mn=kn("renderTracked"),In=kn("renderTriggered"),Ln=kn("errorCaptured");var Rn="2.7.14";var Fn=Object.freeze({__proto__:null,version:Rn,defineComponent:function(t){return t},ref:function(t){return Ht(t,!1)},shallowRef:function(t){return Ht(t,!0)},isRef:Ft,toRef:Ut,toRefs:function(t){var n=e(t)?new Array(t.length):{};for(var r in t)n[r]=Ut(t,r);return n},unref:function(t){return Ft(t)?t.value:t},proxyRefs:function(t){if(Mt(t))return t;for(var e={},n=Object.keys(t),r=0;r<n.length;r++)Bt(e,t,n[r]);return e},customRef:function(t){var e=new mt,n=t((function(){e.depend()}),(function(){e.notify()})),r=n.get,o=n.set,i={get value(){return r()},set value(t){o(t)}};return z(i,Rt,!0),i},triggerRef:function(t){t.dep&&t.dep.notify()},reactive:function(t){return Dt(t,!1),t},isReactive:Mt,isReadonly:Lt,isShallow:It,isProxy:function(t){return Mt(t)||Lt(t)},shallowReactive:Pt,markRaw:function(t){return Object.isExtensible(t)&&z(t,"__v_skip",!0),t},toRaw:function t(e){var n=e&&e.__v_raw;return n?t(n):e},readonly:zt,shallowReadonly:function(t){return Vt(t,!0)},computed:function(t,e){var n,r,o=a(t);o?(n=t,r=j):(n=t.get,r=t.set);var i=rt()?null:new Vn(ct,n,j,{lazy:!0}),s={effect:i,get value(){return i?(i.dirty&&i.evaluate(),mt.target&&i.depend(),i.value):n()},set value(t){r(t)}};return z(s,Rt,!0),z(s,"__v_isReadonly",o),s},watch:function(t,e,n){return cn(t,e,n)},watchEffect:function(t,e){return cn(t,null,e)},watchPostEffect:on,watchSyncEffect:function(t,e){return cn(t,null,{flush:"sync"})},EffectScope:un,effectScope:function(t){return new un(t)},onScopeDispose:function(t){an&&an.cleanups.push(t)},getCurrentScope:function(){return an},provide:function(t,e){ct&&(ln(ct)[t]=e)},inject:function(t,e,n){void 0===n&&(n=!1);var r=ct;if(r){var o=r.$parent&&r.$parent._provided;if(o&&t in o)return o[t];if(arguments.length>1)return n&&a(e)?e.call(r):e}},h:function(t,e,n){return te(ct,t,e,n,2,!0)},getCurrentInstance:function(){return ct&&{proxy:ct}},useSlots:function(){return Oe().slots},useAttrs:function(){return Oe().attrs},useListeners:function(){return Oe().listeners},mergeDefaults:function(t,n){var r=e(t)?t.reduce((function(t,e){return t[e]={},t}),{}):t;for(var o in n){var i=r[o];i?e(i)||a(i)?r[o]={type:i,default:n[o]}:i.default=n[o]:null===i&&(r[o]={default:n[o]})}return r},nextTick:Cn,set:jt,del:Et,useCssModule:function(e){return t},useCssVars:function(t){if(J){var e=ct;e&&on((function(){var n=e.$el,r=t(e,e._setupProxy);if(n&&1===n.nodeType){var o=n.style;for(var i in r)o.setProperty("--".concat(i),r[i])}}))}},defineAsyncComponent:function(t){a(t)&&(t={loader:t});var e=t.loader,n=t.loadingComponent,r=t.errorComponent,o=t.delay,i=void 0===o?200:o,s=t.timeout;t.suspensible;var c=t.onError,u=null,l=0,f=function(){var t;return u||(t=u=e().catch((function(t){if(t=t instanceof Error?t:new Error(String(t)),c)return new Promise((function(e,n){c(t,(function(){return e((l++,u=null,f()))}),(function(){return n(t)}),l+1)}));throw t})).then((function(e){return t!==u&&u?u:(e&&(e.__esModule||"Module"===e[Symbol.toStringTag])&&(e=e.default),e)})))};return function(){return{component:f(),delay:i,timeout:s,error:r,loading:n}}},onBeforeMount:Sn,onMounted:On,onBeforeUpdate:Tn,onUpdated:An,onBeforeUnmount:jn,onUnmounted:En,onActivated:Nn,onDeactivated:Pn,onServerPrefetch:Dn,onRenderTracked:Mn,onRenderTriggered:In,onErrorCaptured:function(t,e){void 0===e&&(e=ct),Ln(t,e)}}),Hn=new at;function Bn(t){return Un(t,Hn),Hn.clear(),t}function Un(t,n){var r,o,i=e(t);if(!(!i&&!s(t)||t.__v_skip||Object.isFrozen(t)||t instanceof lt)){if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(i)for(r=t.length;r--;)Un(t[r],n);else if(Ft(t))Un(t.value,n);else for(r=(o=Object.keys(t)).length;r--;)Un(t[o[r]],n)}}var zn=0,Vn=function(){function t(t,e,n,r,o){!function(t,e){void 0===e&&(e=an),e&&e.active&&e.effects.push(t)}(this,an&&!an._vm?an:t?t._scope:void 0),(this.vm=t)&&o&&(t._watcher=this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++zn,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new at,this.newDepIds=new at,this.expression="",a(e)?this.getter=e:(this.getter=function(t){if(!V.test(t)){var e=t.split(".");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}(e),this.getter||(this.getter=j)),this.value=this.lazy?void 0:this.get()}return t.prototype.get=function(){var t;yt(this);var e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;fn(t,e,'getter for watcher "'.concat(this.expression,'"'))}finally{this.deep&&Bn(t),_t(),this.cleanupDeps()}return t},t.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},t.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},t.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Qe(this)},t.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||s(t)||this.deep){var e=this.value;if(this.value=t,this.user){var n='callback for watcher "'.concat(this.expression,'"');dn(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}},t.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},t.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},t.prototype.teardown=function(){if(this.vm&&!this.vm._isBeingDestroyed&&g(this.vm._scope.effects,this),this.active){for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1,this.onStop&&this.onStop()}},t}(),Kn={enumerable:!0,configurable:!0,get:j,set:j};function Jn(t,e,n){Kn.get=function(){return this[e][n]},Kn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,Kn)}function qn(t){var n=t.$options;if(n.props&&function(t,e){var n=t.$options.propsData||{},r=t._props=Pt({}),o=t.$options._propKeys=[];t.$parent&&kt(!1);var i=function(i){o.push(i);var a=_r(i,e,n,t);At(r,i,a),i in t||Jn(t,"_props",i)};for(var a in e)i(a);kt(!0)}(t,n.props),function(t){var e=t.$options,n=e.setup;if(n){var r=t._setupContext=xe(t);ut(t),yt();var o=dn(n,null,[t._props||Pt({}),r],t,"setup");if(_t(),ut(),a(o))e.render=o;else if(s(o))if(t._setupState=o,o.__sfc){var i=t._setupProxy={};for(var c in o)"__sfc"!==c&&Bt(i,o,c)}else for(var c in o)U(c)||Bt(t,o,c)}}(t),n.methods&&function(t,e){for(var n in t.$options.props,e)t[n]="function"!=typeof e[n]?j:S(e[n],t)}(t,n.methods),n.data)!function(t){var e=t.$options.data;u(e=t._data=a(e)?function(t,e){yt();try{return t.call(e,e)}catch(t){return fn(t,e,"data()"),{}}finally{_t()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props;t.$options.methods;var o=n.length;for(;o--;){var i=n[o];r&&_(r,i)||U(i)||Jn(t,"_data",i)}var s=Tt(e);s&&s.vmCount++}(t);else{var r=Tt(t._data={});r&&r.vmCount++}n.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=rt();for(var o in e){var i=e[o],s=a(i)?i:i.get;r||(n[o]=new Vn(t,s||j,j,Wn)),o in t||Zn(t,o,i)}}(t,n.computed),n.watch&&n.watch!==tt&&function(t,n){for(var r in n){var o=n[r];if(e(o))for(var i=0;i<o.length;i++)Yn(t,r,o[i]);else Yn(t,r,o)}}(t,n.watch)}var Wn={lazy:!0};function Zn(t,e,n){var r=!rt();a(n)?(Kn.get=r?Gn(e):Xn(n),Kn.set=j):(Kn.get=n.get?r&&!1!==n.cache?Gn(e):Xn(n.get):j,Kn.set=n.set||j),Object.defineProperty(t,e,Kn)}function Gn(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),mt.target&&e.depend(),e.value}}function Xn(t){return function(){return t.call(this,this)}}function Yn(t,e,n,r){return u(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=t[n]),t.$watch(e,n,r)}function Qn(t,e){if(t){for(var n=Object.create(null),r=st?Reflect.ownKeys(t):Object.keys(t),o=0;o<r.length;o++){var i=r[o];if("__ob__"!==i){var s=t[i].from;if(s in e._provided)n[i]=e._provided[s];else if("default"in t[i]){var c=t[i].default;n[i]=a(c)?c.call(e):c}}}return n}}var tr=0;function er(t){var e=t.options;if(t.super){var n=er(t.super);if(n!==t.superOptions){t.superOptions=n;var r=function(t){var e,n=t.options,r=t.sealedOptions;for(var o in n)n[o]!==r[o]&&(e||(e={}),e[o]=n[o]);return e}(t);r&&T(t.extendOptions,r),(e=t.options=gr(n,t.extendOptions)).name&&(e.components[e.name]=t)}}return e}function nr(n,r,i,a,s){var c,u=this,l=s.options;_(a,"_uid")?(c=Object.create(a))._original=a:(c=a,a=a._original);var f=o(l._compiled),d=!f;this.data=n,this.props=r,this.children=i,this.parent=a,this.listeners=n.on||t,this.injections=Qn(l.inject,a),this.slots=function(){return u.$slots||be(a,n.scopedSlots,u.$slots=ge(i,a)),u.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return be(a,n.scopedSlots,this.slots())}}),f&&(this.$options=l,this.$slots=this.slots(),this.$scopedSlots=be(a,n.scopedSlots,this.$slots)),l._scopeId?this._c=function(t,n,r,o){var i=te(c,t,n,r,o,d);return i&&!e(i)&&(i.fnScopeId=l._scopeId,i.fnContext=a),i}:this._c=function(t,e,n,r){return te(c,t,e,n,r,d)}}function rr(t,e,n,r,o){var i=pt(t);return i.fnContext=n,i.fnOptions=r,e.slot&&((i.data||(i.data={})).slot=e.slot),i}function or(t,e){for(var n in e)t[w(n)]=e[n]}function ir(t){return t.name||t.__name||t._componentTag}me(nr.prototype);var ar={init:function(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var n=t;ar.prepatch(n,n)}else{(t.componentInstance=function(t,e){var n={_isComponent:!0,_parentVnode:t,parent:e},o=t.data.inlineTemplate;r(o)&&(n.render=o.render,n.staticRenderFns=o.staticRenderFns);return new t.componentOptions.Ctor(n)}(t,Ie)).$mount(e?t.elm:void 0,e)}},prepatch:function(e,n){var r=n.componentOptions;!function(e,n,r,o,i){var a=o.data.scopedSlots,s=e.$scopedSlots,c=!!(a&&!a.$stable||s!==t&&!s.$stable||a&&e.$scopedSlots.$key!==a.$key||!a&&e.$scopedSlots.$key),u=!!(i||e.$options._renderChildren||c),l=e.$vnode;e.$options._parentVnode=o,e.$vnode=o,e._vnode&&(e._vnode.parent=o),e.$options._renderChildren=i;var f=o.data.attrs||t;e._attrsProxy&&Ce(e._attrsProxy,f,l.data&&l.data.attrs||t,e,"$attrs")&&(u=!0),e.$attrs=f,r=r||t;var d=e.$options._parentListeners;if(e._listenersProxy&&Ce(e._listenersProxy,r,d||t,e,"$listeners"),e.$listeners=e.$options._parentListeners=r,Me(e,r,d),n&&e.$options.props){kt(!1);for(var p=e._props,v=e.$options._propKeys||[],h=0;h<v.length;h++){var m=v[h],g=e.$options.props;p[m]=_r(m,g,n,e)}kt(!0),e.$options.propsData=n}u&&(e.$slots=ge(i,o.context),e.$forceUpdate())}(n.componentInstance=e.componentInstance,r.propsData,r.listeners,n,r.children)},insert:function(t){var e,n=t.context,r=t.componentInstance;r._isMounted||(r._isMounted=!0,Be(r,"mounted")),t.data.keepAlive&&(n._isMounted?((e=r)._inactive=!1,ze.push(e)):Fe(r,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?He(e,!0):e.$destroy())}},sr=Object.keys(ar);function cr(i,a,c,u,l){if(!n(i)){var d=c.$options._base;if(s(i)&&(i=d.extend(i)),"function"==typeof i){var p;if(n(i.cid)&&(i=function(t,e){if(o(t.error)&&r(t.errorComp))return t.errorComp;if(r(t.resolved))return t.resolved;var i=Ae;if(i&&r(t.owners)&&-1===t.owners.indexOf(i)&&t.owners.push(i),o(t.loading)&&r(t.loadingComp))return t.loadingComp;if(i&&!r(t.owners)){var a=t.owners=[i],c=!0,u=null,l=null;i.$on("hook:destroyed",(function(){return g(a,i)}));var d=function(t){for(var e=0,n=a.length;e<n;e++)a[e].$forceUpdate();t&&(a.length=0,null!==u&&(clearTimeout(u),u=null),null!==l&&(clearTimeout(l),l=null))},p=M((function(n){t.resolved=je(n,e),c?a.length=0:d(!0)})),v=M((function(e){r(t.errorComp)&&(t.error=!0,d(!0))})),h=t(p,v);return s(h)&&(f(h)?n(t.resolved)&&h.then(p,v):f(h.component)&&(h.component.then(p,v),r(h.error)&&(t.errorComp=je(h.error,e)),r(h.loading)&&(t.loadingComp=je(h.loading,e),0===h.delay?t.loading=!0:u=setTimeout((function(){u=null,n(t.resolved)&&n(t.error)&&(t.loading=!0,d(!1))}),h.delay||200)),r(h.timeout)&&(l=setTimeout((function(){l=null,n(t.resolved)&&v(null)}),h.timeout)))),c=!1,t.loading?t.loadingComp:t.resolved}}(p=i,d),void 0===i))return function(t,e,n,r,o){var i=ft();return i.asyncFactory=t,i.asyncMeta={data:e,context:n,children:r,tag:o},i}(p,a,c,u,l);a=a||{},er(i),r(a.model)&&function(t,n){var o=t.model&&t.model.prop||"value",i=t.model&&t.model.event||"input";(n.attrs||(n.attrs={}))[o]=n.model.value;var a=n.on||(n.on={}),s=a[i],c=n.model.callback;r(s)?(e(s)?-1===s.indexOf(c):s!==c)&&(a[i]=[c].concat(s)):a[i]=c}(i.options,a);var v=function(t,e,o){var i=e.options.props;if(!n(i)){var a={},s=t.attrs,c=t.props;if(r(s)||r(c))for(var u in i){var l=k(u);Gt(a,c,u,l,!0)||Gt(a,s,u,l,!1)}return a}}(a,i);if(o(i.options.functional))return function(n,o,i,a,s){var c=n.options,u={},l=c.props;if(r(l))for(var f in l)u[f]=_r(f,l,o||t);else r(i.attrs)&&or(u,i.attrs),r(i.props)&&or(u,i.props);var d=new nr(i,u,s,a,n),p=c.render.call(null,d._c,d);if(p instanceof lt)return rr(p,i,d.parent,c);if(e(p)){for(var v=Xt(p)||[],h=new Array(v.length),m=0;m<v.length;m++)h[m]=rr(v[m],i,d.parent,c);return h}}(i,v,a,c,u);var h=a.on;if(a.on=a.nativeOn,o(i.options.abstract)){var m=a.slot;a={},m&&(a.slot=m)}!function(t){for(var e=t.hook||(t.hook={}),n=0;n<sr.length;n++){var r=sr[n],o=e[r],i=ar[r];o===i||o&&o._merged||(e[r]=o?ur(i,o):i)}}(a);var y=ir(i.options)||l;return new lt("vue-component-".concat(i.cid).concat(y?"-".concat(y):""),a,void 0,void 0,void 0,c,{Ctor:i,propsData:v,listeners:h,tag:l,children:u},p)}}}function ur(t,e){var n=function(n,r){t(n,r),e(n,r)};return n._merged=!0,n}var lr=j,fr=H.optionMergeStrategies;function dr(t,e,n){if(void 0===n&&(n=!0),!e)return t;for(var r,o,i,a=st?Reflect.ownKeys(e):Object.keys(e),s=0;s<a.length;s++)"__ob__"!==(r=a[s])&&(o=t[r],i=e[r],n&&_(t,r)?o!==i&&u(o)&&u(i)&&dr(o,i):jt(t,r,i));return t}function pr(t,e,n){return n?function(){var r=a(e)?e.call(n,n):e,o=a(t)?t.call(n,n):t;return r?dr(r,o):o}:e?t?function(){return dr(a(e)?e.call(this,this):e,a(t)?t.call(this,this):t)}:e:t}function vr(t,n){var r=n?t?t.concat(n):e(n)?n:[n]:t;return r?function(t){for(var e=[],n=0;n<t.length;n++)-1===e.indexOf(t[n])&&e.push(t[n]);return e}(r):r}function hr(t,e,n,r){var o=Object.create(t||null);return e?T(o,e):o}fr.data=function(t,e,n){return n?pr(t,e,n):e&&"function"!=typeof e?t:pr(t,e)},F.forEach((function(t){fr[t]=vr})),R.forEach((function(t){fr[t+"s"]=hr})),fr.watch=function(t,n,r,o){if(t===tt&&(t=void 0),n===tt&&(n=void 0),!n)return Object.create(t||null);if(!t)return n;var i={};for(var a in T(i,t),n){var s=i[a],c=n[a];s&&!e(s)&&(s=[s]),i[a]=s?s.concat(c):e(c)?c:[c]}return i},fr.props=fr.methods=fr.inject=fr.computed=function(t,e,n,r){if(!t)return e;var o=Object.create(null);return T(o,t),e&&T(o,e),o},fr.provide=function(t,e){return t?function(){var n=Object.create(null);return dr(n,a(t)?t.call(this):t),e&&dr(n,a(e)?e.call(this):e,!1),n}:e};var mr=function(t,e){return void 0===e?t:e};function gr(t,n,r){if(a(n)&&(n=n.options),function(t,n){var r=t.props;if(r){var o,i,a={};if(e(r))for(o=r.length;o--;)"string"==typeof(i=r[o])&&(a[w(i)]={type:null});else if(u(r))for(var s in r)i=r[s],a[w(s)]=u(i)?i:{type:i};t.props=a}}(n),function(t,n){var r=t.inject;if(r){var o=t.inject={};if(e(r))for(var i=0;i<r.length;i++)o[r[i]]={from:r[i]};else if(u(r))for(var a in r){var s=r[a];o[a]=u(s)?T({from:a},s):{from:s}}}}(n),function(t){var e=t.directives;if(e)for(var n in e){var r=e[n];a(r)&&(e[n]={bind:r,update:r})}}(n),!n._base&&(n.extends&&(t=gr(t,n.extends,r)),n.mixins))for(var o=0,i=n.mixins.length;o<i;o++)t=gr(t,n.mixins[o],r);var s,c={};for(s in t)l(s);for(s in n)_(t,s)||l(s);function l(e){var o=fr[e]||mr;c[e]=o(t[e],n[e],r,e)}return c}function yr(t,e,n,r){if("string"==typeof n){var o=t[e];if(_(o,n))return o[n];var i=w(n);if(_(o,i))return o[i];var a=x(i);return _(o,a)?o[a]:o[n]||o[i]||o[a]}}function _r(t,e,n,r){var o=e[t],i=!_(n,t),s=n[t],c=xr(Boolean,o.type);if(c>-1)if(i&&!_(o,"default"))s=!1;else if(""===s||s===k(t)){var u=xr(String,o.type);(u<0||c<u)&&(s=!0)}if(void 0===s){s=function(t,e,n){if(!_(e,"default"))return;var r=e.default;if(t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n])return t._props[n];return a(r)&&"Function"!==$r(e.type)?r.call(t):r}(r,o,t);var l=Ct;kt(!0),Tt(s),kt(l)}return s}var br=/^\s*function (\w+)/;function $r(t){var e=t&&t.toString().match(br);return e?e[1]:""}function wr(t,e){return $r(t)===$r(e)}function xr(t,n){if(!e(n))return wr(n,t)?0:-1;for(var r=0,o=n.length;r<o;r++)if(wr(n[r],t))return r;return-1}function Cr(t){this._init(t)}function kr(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=ir(t)||ir(n.options),a=function(t){this._init(t)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=e++,a.options=gr(n.options,t),a.super=n,a.options.props&&function(t){var e=t.options.props;for(var n in e)Jn(t.prototype,"_props",n)}(a),a.options.computed&&function(t){var e=t.options.computed;for(var n in e)Zn(t.prototype,n,e[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,R.forEach((function(t){a[t]=n[t]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=T({},a.options),o[r]=a,a}}function Sr(t){return t&&(ir(t.Ctor.options)||t.tag)}function Or(t,n){return e(t)?t.indexOf(n)>-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(r=t,"[object RegExp]"===c.call(r)&&t.test(n));var r}function Tr(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Ar(n,i,r,o)}}}function Ar(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,g(n,e)}!function(e){e.prototype._init=function(e){var n=this;n._uid=tr++,n._isVue=!0,n.__v_skip=!0,n._scope=new un(!0),n._scope._vm=!0,e&&e._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=gr(er(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Me(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;var n=e.$options,r=e.$vnode=n._parentVnode,o=r&&r.context;e.$slots=ge(n._renderChildren,o),e.$scopedSlots=r?be(e.$parent,r.data.scopedSlots,e.$slots):t,e._c=function(t,n,r,o){return te(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return te(e,t,n,r,o,!0)};var i=r&&r.data;At(e,"$attrs",i&&i.attrs||t,null,!0),At(e,"$listeners",n._parentListeners||t,null,!0)}(n),Be(n,"beforeCreate",void 0,!1),function(t){var e=Qn(t.$options.inject,t);e&&(kt(!1),Object.keys(e).forEach((function(n){At(t,n,e[n])})),kt(!0))}(n),qn(n),function(t){var e=t.$options.provide;if(e){var n=a(e)?e.call(t):e;if(!s(n))return;for(var r=ln(t),o=st?Reflect.ownKeys(n):Object.keys(n),i=0;i<o.length;i++){var c=o[i];Object.defineProperty(r,c,Object.getOwnPropertyDescriptor(n,c))}}}(n),Be(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(Cr),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=jt,t.prototype.$delete=Et,t.prototype.$watch=function(t,e,n){var r=this;if(u(e))return Yn(r,t,e,n);(n=n||{}).user=!0;var o=new Vn(r,t,e,n);if(n.immediate){var i='callback for immediate watcher "'.concat(o.expression,'"');yt(),dn(e,r,[o.value],r,i),_t()}return function(){o.teardown()}}}(Cr),function(t){var n=/^hook:/;t.prototype.$on=function(t,r){var o=this;if(e(t))for(var i=0,a=t.length;i<a;i++)o.$on(t[i],r);else(o._events[t]||(o._events[t]=[])).push(r),n.test(t)&&(o._hasHookEvent=!0);return o},t.prototype.$once=function(t,e){var n=this;function r(){n.$off(t,r),e.apply(n,arguments)}return r.fn=e,n.$on(t,r),n},t.prototype.$off=function(t,n){var r=this;if(!arguments.length)return r._events=Object.create(null),r;if(e(t)){for(var o=0,i=t.length;o<i;o++)r.$off(t[o],n);return r}var a,s=r._events[t];if(!s)return r;if(!n)return r._events[t]=null,r;for(var c=s.length;c--;)if((a=s[c])===n||a.fn===n){s.splice(c,1);break}return r},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?O(n):n;for(var r=O(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;i<a;i++)dn(n[i],e,r,e,o)}return e}}(Cr),function(t){t.prototype._update=function(t,e){var n=this,r=n.$el,o=n._vnode,i=Le(n);n._vnode=t,n.$el=o?n.__patch__(o,t):n.__patch__(n.$el,t,e,!1),i(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n);for(var a=n;a&&a.$vnode&&a.$parent&&a.$vnode===a.$parent._vnode;)a.$parent.$el=a.$el,a=a.$parent},t.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){Be(t,"beforeDestroy"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||g(e.$children,t),t._scope.stop(),t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),Be(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}}(Cr),function(t){me(t.prototype),t.prototype.$nextTick=function(t){return Cn(t,this)},t.prototype._render=function(){var t,n=this,r=n.$options,o=r.render,i=r._parentVnode;i&&n._isMounted&&(n.$scopedSlots=be(n.$parent,i.data.scopedSlots,n.$slots,n.$scopedSlots),n._slotsProxy&&Se(n._slotsProxy,n.$scopedSlots)),n.$vnode=i;try{ut(n),Ae=n,t=o.call(n._renderProxy,n.$createElement)}catch(e){fn(e,n,"render"),t=n._vnode}finally{Ae=null,ut()}return e(t)&&1===t.length&&(t=t[0]),t instanceof lt||(t=ft()),t.parent=i,t}}(Cr);var jr=[String,RegExp,Array],Er={name:"keep-alive",abstract:!0,props:{include:jr,exclude:jr,max:[String,Number]},methods:{cacheVNode:function(){var t=this,e=t.cache,n=t.keys,r=t.vnodeToCache,o=t.keyToCache;if(r){var i=r.tag,a=r.componentInstance,s=r.componentOptions;e[o]={name:Sr(s),tag:i,componentInstance:a},n.push(o),this.max&&n.length>parseInt(this.max)&&Ar(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Ar(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Tr(t,(function(t){return Or(e,t)}))})),this.$watch("exclude",(function(e){Tr(t,(function(t){return!Or(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=Ee(t),n=e&&e.componentOptions;if(n){var r=Sr(n),o=this.include,i=this.exclude;if(o&&(!r||!Or(o,r))||i&&r&&Or(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,g(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}},Nr={KeepAlive:Er};!function(t){var e={get:function(){return H}};Object.defineProperty(t,"config",e),t.util={warn:lr,extend:T,mergeOptions:gr,defineReactive:At},t.set=jt,t.delete=Et,t.nextTick=Cn,t.observable=function(t){return Tt(t),t},t.options=Object.create(null),R.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,Nr),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=O(arguments,1);return n.unshift(this),a(t.install)?t.install.apply(t,n):a(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=gr(this.options,t),this}}(t),kr(t),function(t){R.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&u(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&a(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Cr),Object.defineProperty(Cr.prototype,"$isServer",{get:rt}),Object.defineProperty(Cr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Cr,"FunctionalRenderContext",{value:nr}),Cr.version=Rn;var Pr=v("style,class"),Dr=v("input,textarea,option,select,progress"),Mr=function(t,e,n){return"value"===n&&Dr(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Ir=v("contenteditable,draggable,spellcheck"),Lr=v("events,caret,typing,plaintext-only"),Rr=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Fr="http://www.w3.org/1999/xlink",Hr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Br=function(t){return Hr(t)?t.slice(6,t.length):""},Ur=function(t){return null==t||!1===t};function zr(t){for(var e=t.data,n=t,o=t;r(o.componentInstance);)(o=o.componentInstance._vnode)&&o.data&&(e=Vr(o.data,e));for(;r(n=n.parent);)n&&n.data&&(e=Vr(e,n.data));return function(t,e){if(r(t)||r(e))return Kr(t,Jr(e));return""}(e.staticClass,e.class)}function Vr(t,e){return{staticClass:Kr(t.staticClass,e.staticClass),class:r(t.class)?[t.class,e.class]:e.class}}function Kr(t,e){return t?e?t+" "+e:t:e||""}function Jr(t){return Array.isArray(t)?function(t){for(var e,n="",o=0,i=t.length;o<i;o++)r(e=Jr(t[o]))&&""!==e&&(n&&(n+=" "),n+=e);return n}(t):s(t)?function(t){var e="";for(var n in t)t[n]&&(e&&(e+=" "),e+=n);return e}(t):"string"==typeof t?t:""}var qr={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Wr=v("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Zr=v("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Gr=function(t){return Wr(t)||Zr(t)};function Xr(t){return Zr(t)?"svg":"math"===t?"math":void 0}var Yr=Object.create(null);var Qr=v("text,number,password,search,email,tel,url");function to(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}var eo=Object.freeze({__proto__:null,createElement:function(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(t,e){return document.createElementNS(qr[t],e)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,e,n){t.insertBefore(e,n)},removeChild:function(t,e){t.removeChild(e)},appendChild:function(t,e){t.appendChild(e)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,e){t.textContent=e},setStyleScope:function(t,e){t.setAttribute(e,"")}}),no={create:function(t,e){ro(e)},update:function(t,e){t.data.ref!==e.data.ref&&(ro(t,!0),ro(e))},destroy:function(t){ro(t,!0)}};function ro(t,n){var o=t.data.ref;if(r(o)){var i=t.context,s=t.componentInstance||t.elm,c=n?null:s,u=n?void 0:s;if(a(o))dn(o,i,[c],i,"template ref function");else{var l=t.data.refInFor,f="string"==typeof o||"number"==typeof o,d=Ft(o),p=i.$refs;if(f||d)if(l){var v=f?p[o]:o.value;n?e(v)&&g(v,s):e(v)?v.includes(s)||v.push(s):f?(p[o]=[s],oo(i,o,p[o])):o.value=[s]}else if(f){if(n&&p[o]!==s)return;p[o]=u,oo(i,o,c)}else if(d){if(n&&o.value!==s)return;o.value=c}}}}function oo(t,e,n){var r=t._setupState;r&&_(r,e)&&(Ft(r[e])?r[e].value=n:r[e]=n)}var io=new lt("",{},[]),ao=["create","activate","update","remove","destroy"];function so(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&r(t.data)===r(e.data)&&function(t,e){if("input"!==t.tag)return!0;var n,o=r(n=t.data)&&r(n=n.attrs)&&n.type,i=r(n=e.data)&&r(n=n.attrs)&&n.type;return o===i||Qr(o)&&Qr(i)}(t,e)||o(t.isAsyncPlaceholder)&&n(e.asyncFactory.error))}function co(t,e,n){var o,i,a={};for(o=e;o<=n;++o)r(i=t[o].key)&&(a[i]=o);return a}var uo={create:lo,update:lo,destroy:function(t){lo(t,io)}};function lo(t,e){(t.data.directives||e.data.directives)&&function(t,e){var n,r,o,i=t===io,a=e===io,s=po(t.data.directives,t.context),c=po(e.data.directives,e.context),u=[],l=[];for(n in c)r=s[n],o=c[n],r?(o.oldValue=r.value,o.oldArg=r.arg,ho(o,"update",e,t),o.def&&o.def.componentUpdated&&l.push(o)):(ho(o,"bind",e,t),o.def&&o.def.inserted&&u.push(o));if(u.length){var f=function(){for(var n=0;n<u.length;n++)ho(u[n],"inserted",e,t)};i?Zt(e,"insert",f):f()}l.length&&Zt(e,"postpatch",(function(){for(var n=0;n<l.length;n++)ho(l[n],"componentUpdated",e,t)}));if(!i)for(n in s)c[n]||ho(s[n],"unbind",t,t,a)}(t,e)}var fo=Object.create(null);function po(t,e){var n,r,o=Object.create(null);if(!t)return o;for(n=0;n<t.length;n++){if((r=t[n]).modifiers||(r.modifiers=fo),o[vo(r)]=r,e._setupState&&e._setupState.__sfc){var i=r.def||yr(e,"_setupState","v-"+r.name);r.def="function"==typeof i?{bind:i,update:i}:i}r.def=r.def||yr(e.$options,"directives",r.name)}return o}function vo(t){return t.rawName||"".concat(t.name,".").concat(Object.keys(t.modifiers||{}).join("."))}function ho(t,e,n,r,o){var i=t.def&&t.def[e];if(i)try{i(n.elm,t,n,r,o)}catch(r){fn(r,n.context,"directive ".concat(t.name," ").concat(e," hook"))}}var mo=[no,uo];function go(t,e){var i=e.componentOptions;if(!(r(i)&&!1===i.Ctor.options.inheritAttrs||n(t.data.attrs)&&n(e.data.attrs))){var a,s,c=e.elm,u=t.data.attrs||{},l=e.data.attrs||{};for(a in(r(l.__ob__)||o(l._v_attr_proxy))&&(l=e.data.attrs=T({},l)),l)s=l[a],u[a]!==s&&yo(c,a,s,e.data.pre);for(a in(W||G)&&l.value!==u.value&&yo(c,"value",l.value),u)n(l[a])&&(Hr(a)?c.removeAttributeNS(Fr,Br(a)):Ir(a)||c.removeAttribute(a))}}function yo(t,e,n,r){r||t.tagName.indexOf("-")>-1?_o(t,e,n):Rr(e)?Ur(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Ir(e)?t.setAttribute(e,function(t,e){return Ur(e)||"false"===e?"false":"contenteditable"===t&&Lr(e)?e:"true"}(e,n)):Hr(e)?Ur(n)?t.removeAttributeNS(Fr,Br(e)):t.setAttributeNS(Fr,e,n):_o(t,e,n)}function _o(t,e,n){if(Ur(n))t.removeAttribute(e);else{if(W&&!Z&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var bo={create:go,update:go};function $o(t,e){var o=e.elm,i=e.data,a=t.data;if(!(n(i.staticClass)&&n(i.class)&&(n(a)||n(a.staticClass)&&n(a.class)))){var s=zr(e),c=o._transitionClasses;r(c)&&(s=Kr(s,Jr(c))),s!==o._prevClass&&(o.setAttribute("class",s),o._prevClass=s)}}var wo,xo,Co,ko,So,Oo,To={create:$o,update:$o},Ao=/[\w).+\-_$\]]/;function jo(t){var e,n,r,o,i,a=!1,s=!1,c=!1,u=!1,l=0,f=0,d=0,p=0;for(r=0;r<t.length;r++)if(n=e,e=t.charCodeAt(r),a)39===e&&92!==n&&(a=!1);else if(s)34===e&&92!==n&&(s=!1);else if(c)96===e&&92!==n&&(c=!1);else if(u)47===e&&92!==n&&(u=!1);else if(124!==e||124===t.charCodeAt(r+1)||124===t.charCodeAt(r-1)||l||f||d){switch(e){case 34:s=!0;break;case 39:a=!0;break;case 96:c=!0;break;case 40:d++;break;case 41:d--;break;case 91:f++;break;case 93:f--;break;case 123:l++;break;case 125:l--}if(47===e){for(var v=r-1,h=void 0;v>=0&&" "===(h=t.charAt(v));v--);h&&Ao.test(h)||(u=!0)}}else void 0===o?(p=r+1,o=t.slice(0,r).trim()):m();function m(){(i||(i=[])).push(t.slice(p,r).trim()),p=r+1}if(void 0===o?o=t.slice(0,r).trim():0!==p&&m(),i)for(r=0;r<i.length;r++)o=Eo(o,i[r]);return o}function Eo(t,e){var n=e.indexOf("(");if(n<0)return'_f("'.concat(e,'")(').concat(t,")");var r=e.slice(0,n),o=e.slice(n+1);return'_f("'.concat(r,'")(').concat(t).concat(")"!==o?","+o:o)}function No(t,e){console.error("[Vue compiler]: ".concat(t))}function Po(t,e){return t?t.map((function(t){return t[e]})).filter((function(t){return t})):[]}function Do(t,e,n,r,o){(t.props||(t.props=[])).push(zo({name:e,value:n,dynamic:o},r)),t.plain=!1}function Mo(t,e,n,r,o){(o?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(t.attrs=[])).push(zo({name:e,value:n,dynamic:o},r)),t.plain=!1}function Io(t,e,n,r){t.attrsMap[e]=n,t.attrsList.push(zo({name:e,value:n},r))}function Lo(t,e,n,r,o,i,a,s){(t.directives||(t.directives=[])).push(zo({name:e,rawName:n,value:r,arg:o,isDynamicArg:i,modifiers:a},s)),t.plain=!1}function Ro(t,e,n){return n?"_p(".concat(e,',"').concat(t,'")'):t+e}function Fo(e,n,r,o,i,a,s,c){var u;(o=o||t).right?c?n="(".concat(n,")==='click'?'contextmenu':(").concat(n,")"):"click"===n&&(n="contextmenu",delete o.right):o.middle&&(c?n="(".concat(n,")==='click'?'mouseup':(").concat(n,")"):"click"===n&&(n="mouseup")),o.capture&&(delete o.capture,n=Ro("!",n,c)),o.once&&(delete o.once,n=Ro("~",n,c)),o.passive&&(delete o.passive,n=Ro("&",n,c)),o.native?(delete o.native,u=e.nativeEvents||(e.nativeEvents={})):u=e.events||(e.events={});var l=zo({value:r.trim(),dynamic:c},s);o!==t&&(l.modifiers=o);var f=u[n];Array.isArray(f)?i?f.unshift(l):f.push(l):u[n]=f?i?[l,f]:[f,l]:l,e.plain=!1}function Ho(t,e,n){var r=Bo(t,":"+e)||Bo(t,"v-bind:"+e);if(null!=r)return jo(r);if(!1!==n){var o=Bo(t,e);if(null!=o)return JSON.stringify(o)}}function Bo(t,e,n){var r;if(null!=(r=t.attrsMap[e]))for(var o=t.attrsList,i=0,a=o.length;i<a;i++)if(o[i].name===e){o.splice(i,1);break}return n&&delete t.attrsMap[e],r}function Uo(t,e){for(var n=t.attrsList,r=0,o=n.length;r<o;r++){var i=n[r];if(e.test(i.name))return n.splice(r,1),i}}function zo(t,e){return e&&(null!=e.start&&(t.start=e.start),null!=e.end&&(t.end=e.end)),t}function Vo(t,e,n){var r=n||{},o=r.number,i="$$v",a=i;r.trim&&(a="(typeof ".concat(i," === 'string'")+"? ".concat(i,".trim()")+": ".concat(i,")")),o&&(a="_n(".concat(a,")"));var s=Ko(e,a);t.model={value:"(".concat(e,")"),expression:JSON.stringify(e),callback:"function (".concat(i,") {").concat(s,"}")}}function Ko(t,e){var n=function(t){if(t=t.trim(),wo=t.length,t.indexOf("[")<0||t.lastIndexOf("]")<wo-1)return(ko=t.lastIndexOf("."))>-1?{exp:t.slice(0,ko),key:'"'+t.slice(ko+1)+'"'}:{exp:t,key:null};xo=t,ko=So=Oo=0;for(;!qo();)Wo(Co=Jo())?Go(Co):91===Co&&Zo(Co);return{exp:t.slice(0,So),key:t.slice(So+1,Oo)}}(t);return null===n.key?"".concat(t,"=").concat(e):"$set(".concat(n.exp,", ").concat(n.key,", ").concat(e,")")}function Jo(){return xo.charCodeAt(++ko)}function qo(){return ko>=wo}function Wo(t){return 34===t||39===t}function Zo(t){var e=1;for(So=ko;!qo();)if(Wo(t=Jo()))Go(t);else if(91===t&&e++,93===t&&e--,0===e){Oo=ko;break}}function Go(t){for(var e=t;!qo()&&(t=Jo())!==e;);}var Xo,Yo="__r";function Qo(t,e,n){var r=Xo;return function o(){var i=e.apply(null,arguments);null!==i&&ni(t,o,n,r)}}var ti=mn&&!(Q&&Number(Q[1])<=53);function ei(t,e,n,r){if(ti){var o=We,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Xo.addEventListener(t,e,et?{capture:n,passive:r}:n)}function ni(t,e,n,r){(r||Xo).removeEventListener(t,e._wrapper||e,n)}function ri(t,e){if(!n(t.data.on)||!n(e.data.on)){var o=e.data.on||{},i=t.data.on||{};Xo=e.elm||t.elm,function(t){if(r(t.__r)){var e=W?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}r(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(o),Wt(o,i,ei,ni,Qo,e.context),Xo=void 0}}var oi,ii={create:ri,update:ri,destroy:function(t){return ri(t,io)}};function ai(t,e){if(!n(t.data.domProps)||!n(e.data.domProps)){var i,a,s=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(i in(r(u.__ob__)||o(u._v_attr_proxy))&&(u=e.data.domProps=T({},u)),c)i in u||(s[i]="");for(i in u){if(a=u[i],"textContent"===i||"innerHTML"===i){if(e.children&&(e.children.length=0),a===c[i])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===i&&"PROGRESS"!==s.tagName){s._value=a;var l=n(a)?"":String(a);si(s,l)&&(s.value=l)}else if("innerHTML"===i&&Zr(s.tagName)&&n(s.innerHTML)){(oi=oi||document.createElement("div")).innerHTML="<svg>".concat(a,"</svg>");for(var f=oi.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;f.firstChild;)s.appendChild(f.firstChild)}else if(a!==c[i])try{s[i]=a}catch(t){}}}}function si(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,o=t._vModifiers;if(r(o)){if(o.number)return p(n)!==p(e);if(o.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var ci={create:ai,update:ai},ui=b((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function li(t){var e=fi(t.style);return t.staticStyle?T(t.staticStyle,e):e}function fi(t){return Array.isArray(t)?A(t):"string"==typeof t?ui(t):t}var di,pi=/^--/,vi=/\s*!important$/,hi=function(t,e,n){if(pi.test(e))t.style.setProperty(e,n);else if(vi.test(n))t.style.setProperty(k(e),n.replace(vi,""),"important");else{var r=gi(e);if(Array.isArray(n))for(var o=0,i=n.length;o<i;o++)t.style[r]=n[o];else t.style[r]=n}},mi=["Webkit","Moz","ms"],gi=b((function(t){if(di=di||document.createElement("div").style,"filter"!==(t=w(t))&&t in di)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<mi.length;n++){var r=mi[n]+e;if(r in di)return r}}));function yi(t,e){var o=e.data,i=t.data;if(!(n(o.staticStyle)&&n(o.style)&&n(i.staticStyle)&&n(i.style))){var a,s,c=e.elm,u=i.staticStyle,l=i.normalizedStyle||i.style||{},f=u||l,d=fi(e.data.style)||{};e.data.normalizedStyle=r(d.__ob__)?T({},d):d;var p=function(t,e){var n,r={};if(e)for(var o=t;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=li(o.data))&&T(r,n);(n=li(t.data))&&T(r,n);for(var i=t;i=i.parent;)i.data&&(n=li(i.data))&&T(r,n);return r}(e,!0);for(s in f)n(p[s])&&hi(c,s,"");for(s in p)(a=p[s])!==f[s]&&hi(c,s,null==a?"":a)}}var _i={create:yi,update:yi},bi=/\s+/;function $i(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(bi).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function wi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(bi).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function xi(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&T(e,Ci(t.name||"v")),T(e,t),e}return"string"==typeof t?Ci(t):void 0}}var Ci=b((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),ki=J&&!Z,Si="transition",Oi="animation",Ti="transition",Ai="transitionend",ji="animation",Ei="animationend";ki&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ti="WebkitTransition",Ai="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ji="WebkitAnimation",Ei="webkitAnimationEnd"));var Ni=J?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Pi(t){Ni((function(){Ni(t)}))}function Di(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),$i(t,e))}function Mi(t,e){t._transitionClasses&&g(t._transitionClasses,e),wi(t,e)}function Ii(t,e,n){var r=Ri(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===Si?Ai:Ei,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c<a&&u()}),i+1),t.addEventListener(s,l)}var Li=/\b(transform|all)(,|$)/;function Ri(t,e){var n,r=window.getComputedStyle(t),o=(r[Ti+"Delay"]||"").split(", "),i=(r[Ti+"Duration"]||"").split(", "),a=Fi(o,i),s=(r[ji+"Delay"]||"").split(", "),c=(r[ji+"Duration"]||"").split(", "),u=Fi(s,c),l=0,f=0;return e===Si?a>0&&(n=Si,l=a,f=i.length):e===Oi?u>0&&(n=Oi,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?Si:Oi:null)?n===Si?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===Si&&Li.test(r[Ti+"Property"])}}function Fi(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map((function(e,n){return Hi(e)+Hi(t[n])})))}function Hi(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function Bi(t,e){var o=t.elm;r(o._leaveCb)&&(o._leaveCb.cancelled=!0,o._leaveCb());var i=xi(t.data.transition);if(!n(i)&&!r(o._enterCb)&&1===o.nodeType){for(var c=i.css,u=i.type,l=i.enterClass,f=i.enterToClass,d=i.enterActiveClass,v=i.appearClass,h=i.appearToClass,m=i.appearActiveClass,g=i.beforeEnter,y=i.enter,_=i.afterEnter,b=i.enterCancelled,$=i.beforeAppear,w=i.appear,x=i.afterAppear,C=i.appearCancelled,k=i.duration,S=Ie,O=Ie.$vnode;O&&O.parent;)S=O.context,O=O.parent;var T=!S._isMounted||!t.isRootInsert;if(!T||w||""===w){var A=T&&v?v:l,j=T&&m?m:d,E=T&&h?h:f,N=T&&$||g,P=T&&a(w)?w:y,D=T&&x||_,I=T&&C||b,L=p(s(k)?k.enter:k),R=!1!==c&&!Z,F=Vi(P),H=o._enterCb=M((function(){R&&(Mi(o,E),Mi(o,j)),H.cancelled?(R&&Mi(o,A),I&&I(o)):D&&D(o),o._enterCb=null}));t.data.show||Zt(t,"insert",(function(){var e=o.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),P&&P(o,H)})),N&&N(o),R&&(Di(o,A),Di(o,j),Pi((function(){Mi(o,A),H.cancelled||(Di(o,E),F||(zi(L)?setTimeout(H,L):Ii(o,u,H)))}))),t.data.show&&(e&&e(),P&&P(o,H)),R||F||H()}}}function Ui(t,e){var o=t.elm;r(o._enterCb)&&(o._enterCb.cancelled=!0,o._enterCb());var i=xi(t.data.transition);if(n(i)||1!==o.nodeType)return e();if(!r(o._leaveCb)){var a=i.css,c=i.type,u=i.leaveClass,l=i.leaveToClass,f=i.leaveActiveClass,d=i.beforeLeave,v=i.leave,h=i.afterLeave,m=i.leaveCancelled,g=i.delayLeave,y=i.duration,_=!1!==a&&!Z,b=Vi(v),$=p(s(y)?y.leave:y),w=o._leaveCb=M((function(){o.parentNode&&o.parentNode._pending&&(o.parentNode._pending[t.key]=null),_&&(Mi(o,l),Mi(o,f)),w.cancelled?(_&&Mi(o,u),m&&m(o)):(e(),h&&h(o)),o._leaveCb=null}));g?g(x):x()}function x(){w.cancelled||(!t.data.show&&o.parentNode&&((o.parentNode._pending||(o.parentNode._pending={}))[t.key]=t),d&&d(o),_&&(Di(o,u),Di(o,f),Pi((function(){Mi(o,u),w.cancelled||(Di(o,l),b||(zi($)?setTimeout(w,$):Ii(o,c,w)))}))),v&&v(o,w),_||b||w())}}function zi(t){return"number"==typeof t&&!isNaN(t)}function Vi(t){if(n(t))return!1;var e=t.fns;return r(e)?Vi(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function Ki(t,e){!0!==e.data.show&&Bi(e)}var Ji=function(t){var a,s,c={},u=t.modules,l=t.nodeOps;for(a=0;a<ao.length;++a)for(c[ao[a]]=[],s=0;s<u.length;++s)r(u[s][ao[a]])&&c[ao[a]].push(u[s][ao[a]]);function f(t){var e=l.parentNode(t);r(e)&&l.removeChild(e,t)}function d(t,e,n,i,a,s,u){if(r(t.elm)&&r(s)&&(t=s[u]=pt(t)),t.isRootInsert=!a,!function(t,e,n,i){var a=t.data;if(r(a)){var s=r(t.componentInstance)&&a.keepAlive;if(r(a=a.hook)&&r(a=a.init)&&a(t,!1),r(t.componentInstance))return p(t,e),h(n,t.elm,i),o(s)&&function(t,e,n,o){var i,a=t;for(;a.componentInstance;)if(r(i=(a=a.componentInstance._vnode).data)&&r(i=i.transition)){for(i=0;i<c.activate.length;++i)c.activate[i](io,a);e.push(a);break}h(n,t.elm,o)}(t,e,n,i),!0}}(t,e,n,i)){var f=t.data,d=t.children,v=t.tag;r(v)?(t.elm=t.ns?l.createElementNS(t.ns,v):l.createElement(v,t),_(t),m(t,d,e),r(f)&&y(t,e),h(n,t.elm,i)):o(t.isComment)?(t.elm=l.createComment(t.text),h(n,t.elm,i)):(t.elm=l.createTextNode(t.text),h(n,t.elm,i))}}function p(t,e){r(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,g(t)?(y(t,e),_(t)):(ro(t),e.push(t))}function h(t,e,n){r(t)&&(r(n)?l.parentNode(n)===t&&l.insertBefore(t,e,n):l.appendChild(t,e))}function m(t,n,r){if(e(n))for(var o=0;o<n.length;++o)d(n[o],r,t.elm,null,!0,n,o);else i(t.text)&&l.appendChild(t.elm,l.createTextNode(String(t.text)))}function g(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return r(t.tag)}function y(t,e){for(var n=0;n<c.create.length;++n)c.create[n](io,t);r(a=t.data.hook)&&(r(a.create)&&a.create(io,t),r(a.insert)&&e.push(t))}function _(t){var e;if(r(e=t.fnScopeId))l.setStyleScope(t.elm,e);else for(var n=t;n;)r(e=n.context)&&r(e=e.$options._scopeId)&&l.setStyleScope(t.elm,e),n=n.parent;r(e=Ie)&&e!==t.context&&e!==t.fnContext&&r(e=e.$options._scopeId)&&l.setStyleScope(t.elm,e)}function b(t,e,n,r,o,i){for(;r<=o;++r)d(n[r],i,t,e,!1,n,r)}function $(t){var e,n,o=t.data;if(r(o))for(r(e=o.hook)&&r(e=e.destroy)&&e(t),e=0;e<c.destroy.length;++e)c.destroy[e](t);if(r(e=t.children))for(n=0;n<t.children.length;++n)$(t.children[n])}function w(t,e,n){for(;e<=n;++e){var o=t[e];r(o)&&(r(o.tag)?(x(o),$(o)):f(o.elm))}}function x(t,e){if(r(e)||r(t.data)){var n,o=c.remove.length+1;for(r(e)?e.listeners+=o:e=function(t,e){function n(){0==--n.listeners&&f(t)}return n.listeners=e,n}(t.elm,o),r(n=t.componentInstance)&&r(n=n._vnode)&&r(n.data)&&x(n,e),n=0;n<c.remove.length;++n)c.remove[n](t,e);r(n=t.data.hook)&&r(n=n.remove)?n(t,e):e()}else f(t.elm)}function C(t,e,n,o){for(var i=n;i<o;i++){var a=e[i];if(r(a)&&so(t,a))return i}}function k(t,e,i,a,s,u){if(t!==e){r(e.elm)&&r(a)&&(e=a[s]=pt(e));var f=e.elm=t.elm;if(o(t.isAsyncPlaceholder))r(e.asyncFactory.resolved)?T(t.elm,e,i):e.isAsyncPlaceholder=!0;else if(o(e.isStatic)&&o(t.isStatic)&&e.key===t.key&&(o(e.isCloned)||o(e.isOnce)))e.componentInstance=t.componentInstance;else{var p,v=e.data;r(v)&&r(p=v.hook)&&r(p=p.prepatch)&&p(t,e);var h=t.children,m=e.children;if(r(v)&&g(e)){for(p=0;p<c.update.length;++p)c.update[p](t,e);r(p=v.hook)&&r(p=p.update)&&p(t,e)}n(e.text)?r(h)&&r(m)?h!==m&&function(t,e,o,i,a){for(var s,c,u,f=0,p=0,v=e.length-1,h=e[0],m=e[v],g=o.length-1,y=o[0],_=o[g],$=!a;f<=v&&p<=g;)n(h)?h=e[++f]:n(m)?m=e[--v]:so(h,y)?(k(h,y,i,o,p),h=e[++f],y=o[++p]):so(m,_)?(k(m,_,i,o,g),m=e[--v],_=o[--g]):so(h,_)?(k(h,_,i,o,g),$&&l.insertBefore(t,h.elm,l.nextSibling(m.elm)),h=e[++f],_=o[--g]):so(m,y)?(k(m,y,i,o,p),$&&l.insertBefore(t,m.elm,h.elm),m=e[--v],y=o[++p]):(n(s)&&(s=co(e,f,v)),n(c=r(y.key)?s[y.key]:C(y,e,f,v))?d(y,i,t,h.elm,!1,o,p):so(u=e[c],y)?(k(u,y,i,o,p),e[c]=void 0,$&&l.insertBefore(t,u.elm,h.elm)):d(y,i,t,h.elm,!1,o,p),y=o[++p]);f>v?b(t,n(o[g+1])?null:o[g+1].elm,o,p,g,i):p>g&&w(e,f,v)}(f,h,m,i,u):r(m)?(r(t.text)&&l.setTextContent(f,""),b(f,null,m,0,m.length-1,i)):r(h)?w(h,0,h.length-1):r(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),r(v)&&r(p=v.hook)&&r(p=p.postpatch)&&p(t,e)}}}function S(t,e,n){if(o(n)&&r(t.parent))t.parent.data.pendingInsert=e;else for(var i=0;i<e.length;++i)e[i].data.hook.insert(e[i])}var O=v("attrs,class,staticClass,staticStyle,key");function T(t,e,n,i){var a,s=e.tag,c=e.data,u=e.children;if(i=i||c&&c.pre,e.elm=t,o(e.isComment)&&r(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(r(c)&&(r(a=c.hook)&&r(a=a.init)&&a(e,!0),r(a=e.componentInstance)))return p(e,n),!0;if(r(s)){if(r(u))if(t.hasChildNodes())if(r(a=c)&&r(a=a.domProps)&&r(a=a.innerHTML)){if(a!==t.innerHTML)return!1}else{for(var l=!0,f=t.firstChild,d=0;d<u.length;d++){if(!f||!T(f,u[d],n,i)){l=!1;break}f=f.nextSibling}if(!l||f)return!1}else m(e,u,n);if(r(c)){var v=!1;for(var h in c)if(!O(h)){v=!0,y(e,n);break}!v&&c.class&&Bn(c.class)}}else t.data!==e.text&&(t.data=e.text);return!0}return function(t,e,i,a){if(!n(e)){var s,u=!1,f=[];if(n(t))u=!0,d(e,f);else{var p=r(t.nodeType);if(!p&&so(t,e))k(t,e,f,null,null,a);else{if(p){if(1===t.nodeType&&t.hasAttribute(L)&&(t.removeAttribute(L),i=!0),o(i)&&T(t,e,f))return S(e,f,!0),t;s=t,t=new lt(l.tagName(s).toLowerCase(),{},[],void 0,s)}var v=t.elm,h=l.parentNode(v);if(d(e,f,v._leaveCb?null:h,l.nextSibling(v)),r(e.parent))for(var m=e.parent,y=g(e);m;){for(var _=0;_<c.destroy.length;++_)c.destroy[_](m);if(m.elm=e.elm,y){for(var b=0;b<c.create.length;++b)c.create[b](io,m);var x=m.data.hook.insert;if(x.merged)for(var C=1;C<x.fns.length;C++)x.fns[C]()}else ro(m);m=m.parent}r(h)?w([t],0,0):r(t.tag)&&$(t)}}return S(e,f,u),e.elm}r(t)&&$(t)}}({nodeOps:eo,modules:[bo,To,ii,ci,_i,J?{create:Ki,activate:Ki,remove:function(t,e){!0!==t.data.show?Ui(t,e):e()}}:{}].concat(mo)});Z&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&ta(t,"input")}));var qi={inserted:function(t,e,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?Zt(n,"postpatch",(function(){qi.componentUpdated(t,e,n)})):Wi(t,e,n.context),t._vOptions=[].map.call(t.options,Xi)):("textarea"===n.tag||Qr(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",Yi),t.addEventListener("compositionend",Qi),t.addEventListener("change",Qi),Z&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){Wi(t,e,n.context);var r=t._vOptions,o=t._vOptions=[].map.call(t.options,Xi);if(o.some((function(t,e){return!P(t,r[e])})))(t.multiple?e.value.some((function(t){return Gi(t,o)})):e.value!==e.oldValue&&Gi(e.value,o))&&ta(t,"change")}}};function Wi(t,e,n){Zi(t,e),(W||G)&&setTimeout((function(){Zi(t,e)}),0)}function Zi(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=t.options.length;s<c;s++)if(a=t.options[s],o)i=D(r,Xi(a))>-1,a.selected!==i&&(a.selected=i);else if(P(Xi(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Gi(t,e){return e.every((function(e){return!P(e,t)}))}function Xi(t){return"_value"in t?t._value:t.value}function Yi(t){t.target.composing=!0}function Qi(t){t.target.composing&&(t.target.composing=!1,ta(t.target,"input"))}function ta(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function ea(t){return!t.componentInstance||t.data&&t.data.transition?t:ea(t.componentInstance._vnode)}var na={bind:function(t,e,n){var r=e.value,o=(n=ea(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Bi(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=ea(n)).data&&n.data.transition?(n.data.show=!0,r?Bi(n,(function(){t.style.display=t.__vOriginalDisplay})):Ui(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}},ra={model:qi,show:na},oa={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function ia(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?ia(Ee(e.children)):t}function aa(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[w(r)]=o[r];return e}function sa(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var ca=function(t){return t.tag||_e(t)},ua=function(t){return"show"===t.name},la={name:"transition",props:oa,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(ca)).length){var r=this.mode,o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var a=ia(o);if(!a)return o;if(this._leaving)return sa(t,o);var s="__transition-".concat(this._uid,"-");a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=aa(this),u=this._vnode,l=ia(u);if(a.data.directives&&a.data.directives.some(ua)&&(a.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(a,l)&&!_e(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=T({},c);if("out-in"===r)return this._leaving=!0,Zt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),sa(t,o);if("in-out"===r){if(_e(a))return u;var d,p=function(){d()};Zt(c,"afterEnter",p),Zt(c,"enterCancelled",p),Zt(f,"delayLeave",(function(t){d=t}))}}return o}}},fa=T({tag:String,moveClass:String},oa);delete fa.mode;var da={props:fa,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Le(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=aa(this),s=0;s<o.length;s++){(l=o[s]).tag&&null!=l.key&&0!==String(l.key).indexOf("__vlist")&&(i.push(l),n[l.key]=l,(l.data||(l.data={})).transition=a)}if(r){var c=[],u=[];for(s=0;s<r.length;s++){var l;(l=r[s]).data.transition=a,l.data.pos=l.elm.getBoundingClientRect(),n[l.key]?c.push(l):u.push(l)}this.kept=t(e,null,c),this.removed=u}return t(e,null,i)},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(pa),t.forEach(va),t.forEach(ha),this._reflow=document.body.offsetHeight,t.forEach((function(t){if(t.data.moved){var n=t.elm,r=n.style;Di(n,e),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Ai,n._moveCb=function t(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Ai,t),n._moveCb=null,Mi(n,e))})}})))},methods:{hasMove:function(t,e){if(!ki)return!1;if(this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((function(t){wi(n,t)})),$i(n,e),n.style.display="none",this.$el.appendChild(n);var r=Ri(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}};function pa(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function va(t){t.data.newPos=t.elm.getBoundingClientRect()}function ha(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}var ma={Transition:la,TransitionGroup:da};Cr.config.mustUseProp=Mr,Cr.config.isReservedTag=Gr,Cr.config.isReservedAttr=Pr,Cr.config.getTagNamespace=Xr,Cr.config.isUnknownElement=function(t){if(!J)return!0;if(Gr(t))return!1;if(t=t.toLowerCase(),null!=Yr[t])return Yr[t];var e=document.createElement(t);return t.indexOf("-")>-1?Yr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Yr[t]=/HTMLUnknownElement/.test(e.toString())},T(Cr.options.directives,ra),T(Cr.options.components,ma),Cr.prototype.__patch__=J?Ji:j,Cr.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=ft),Be(t,"beforeMount"),r=function(){t._update(t._render(),n)},new Vn(t,r,j,{before:function(){t._isMounted&&!t._isDestroyed&&Be(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i<o.length;i++)o[i].run();return null==t.$vnode&&(t._isMounted=!0,Be(t,"mounted")),t}(this,t=t&&J?to(t):void 0,e)},J&&setTimeout((function(){H.devtools&&ot&&ot.emit("init",Cr)}),0);var ga=/\{\{((?:.|\r?\n)+?)\}\}/g,ya=/[-.*+?^${}()|[\]\/\\]/g,_a=b((function(t){var e=t[0].replace(ya,"\\$&"),n=t[1].replace(ya,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}));var ba={staticKeys:["staticClass"],transformNode:function(t,e){e.warn;var n=Bo(t,"class");n&&(t.staticClass=JSON.stringify(n.replace(/\s+/g," ").trim()));var r=Ho(t,"class",!1);r&&(t.classBinding=r)},genData:function(t){var e="";return t.staticClass&&(e+="staticClass:".concat(t.staticClass,",")),t.classBinding&&(e+="class:".concat(t.classBinding,",")),e}};var $a,wa={staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;var n=Bo(t,"style");n&&(t.staticStyle=JSON.stringify(ui(n)));var r=Ho(t,"style",!1);r&&(t.styleBinding=r)},genData:function(t){var e="";return t.staticStyle&&(e+="staticStyle:".concat(t.staticStyle,",")),t.styleBinding&&(e+="style:(".concat(t.styleBinding,"),")),e}},xa=function(t){return($a=$a||document.createElement("div")).innerHTML=t,$a.textContent},Ca=v("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),ka=v("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Sa=v("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Oa=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ta=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Aa="[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(B.source,"]*"),ja="((?:".concat(Aa,"\\:)?").concat(Aa,")"),Ea=new RegExp("^<".concat(ja)),Na=/^\s*(\/?)>/,Pa=new RegExp("^<\\/".concat(ja,"[^>]*>")),Da=/^<!DOCTYPE [^>]+>/i,Ma=/^<!\--/,Ia=/^<!\[/,La=v("script,style,textarea",!0),Ra={},Fa={"&lt;":"<","&gt;":">","&quot;":'"',"&amp;":"&","&#10;":"\n","&#9;":"\t","&#39;":"'"},Ha=/&(?:lt|gt|quot|amp|#39);/g,Ba=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Ua=v("pre,textarea",!0),za=function(t,e){return t&&Ua(t)&&"\n"===e[0]};function Va(t,e){var n=e?Ba:Ha;return t.replace(n,(function(t){return Fa[t]}))}function Ka(t,e){for(var n,r,o=[],i=e.expectHTML,a=e.isUnaryTag||E,s=e.canBeLeftOpenTag||E,c=0,u=function(){if(n=t,r&&La(r)){var u=0,d=r.toLowerCase(),p=Ra[d]||(Ra[d]=new RegExp("([\\s\\S]*?)(</"+d+"[^>]*>)","i"));w=t.replace(p,(function(t,n,r){return u=r.length,La(d)||"noscript"===d||(n=n.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),za(d,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""}));c+=t.length-w.length,t=w,f(d,c-u,c)}else{var v=t.indexOf("<");if(0===v){if(Ma.test(t)){var h=t.indexOf("--\x3e");if(h>=0)return e.shouldKeepComment&&e.comment&&e.comment(t.substring(4,h),c,c+h+3),l(h+3),"continue"}if(Ia.test(t)){var m=t.indexOf("]>");if(m>=0)return l(m+2),"continue"}var g=t.match(Da);if(g)return l(g[0].length),"continue";var y=t.match(Pa);if(y){var _=c;return l(y[0].length),f(y[1],_,c),"continue"}var b=function(){var e=t.match(Ea);if(e){var n={tagName:e[1],attrs:[],start:c};l(e[0].length);for(var r=void 0,o=void 0;!(r=t.match(Na))&&(o=t.match(Ta)||t.match(Oa));)o.start=c,l(o[0].length),o.end=c,n.attrs.push(o);if(r)return n.unarySlash=r[1],l(r[0].length),n.end=c,n}}();if(b)return function(t){var n=t.tagName,c=t.unarySlash;i&&("p"===r&&Sa(n)&&f(r),s(n)&&r===n&&f(n));for(var u=a(n)||!!c,l=t.attrs.length,d=new Array(l),p=0;p<l;p++){var v=t.attrs[p],h=v[3]||v[4]||v[5]||"",m="a"===n&&"href"===v[1]?e.shouldDecodeNewlinesForHref:e.shouldDecodeNewlines;d[p]={name:v[1],value:Va(h,m)}}u||(o.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:d,start:t.start,end:t.end}),r=n);e.start&&e.start(n,d,u,t.start,t.end)}(b),za(b.tagName,t)&&l(1),"continue"}var $=void 0,w=void 0,x=void 0;if(v>=0){for(w=t.slice(v);!(Pa.test(w)||Ea.test(w)||Ma.test(w)||Ia.test(w)||(x=w.indexOf("<",1))<0);)v+=x,w=t.slice(v);$=t.substring(0,v)}v<0&&($=t),$&&l($.length),e.chars&&$&&e.chars($,c-$.length,c)}if(t===n)return e.chars&&e.chars(t),"break"};t;){if("break"===u())break}function l(e){c+=e,t=t.substring(e)}function f(t,n,i){var a,s;if(null==n&&(n=c),null==i&&(i=c),t)for(s=t.toLowerCase(),a=o.length-1;a>=0&&o[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=o.length-1;u>=a;u--)e.end&&e.end(o[u].tag,n,i);o.length=a,r=a&&o[a-1].tag}else"br"===s?e.start&&e.start(t,[],!0,n,i):"p"===s&&(e.start&&e.start(t,[],!1,n,i),e.end&&e.end(t,n,i))}f()}var Ja,qa,Wa,Za,Ga,Xa,Ya,Qa,ts=/^@|^v-on:/,es=/^v-|^@|^:|^#/,ns=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,rs=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,os=/^\(|\)$/g,is=/^\[.*\]$/,as=/:(.*)$/,ss=/^:|^\.|^v-bind:/,cs=/\.[^.\]]+(?=[^\]]*$)/g,us=/^v-slot(:|$)|^#/,ls=/[\r\n]/,fs=/[ \f\t\r\n]+/g,ds=b(xa),ps="_empty_";function vs(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:$s(e),rawAttrsMap:{},parent:n,children:[]}}function hs(t,e){Ja=e.warn||No,Xa=e.isPreTag||E,Ya=e.mustUseProp||E,Qa=e.getTagNamespace||E,e.isReservedTag,Wa=Po(e.modules,"transformNode"),Za=Po(e.modules,"preTransformNode"),Ga=Po(e.modules,"postTransformNode"),qa=e.delimiters;var n,r,o=[],i=!1!==e.preserveWhitespace,a=e.whitespace,s=!1,c=!1;function u(t){if(l(t),s||t.processed||(t=ms(t,e)),o.length||t===n||n.if&&(t.elseif||t.else)&&ys(n,{exp:t.elseif,block:t}),r&&!t.forbidden)if(t.elseif||t.else)a=t,u=function(t){for(var e=t.length;e--;){if(1===t[e].type)return t[e];t.pop()}}(r.children),u&&u.if&&ys(u,{exp:a.elseif,block:a});else{if(t.slotScope){var i=t.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[i]=t}r.children.push(t),t.parent=r}var a,u;t.children=t.children.filter((function(t){return!t.slotScope})),l(t),t.pre&&(s=!1),Xa(t.tag)&&(c=!1);for(var f=0;f<Ga.length;f++)Ga[f](t,e)}function l(t){if(!c)for(var e=void 0;(e=t.children[t.children.length-1])&&3===e.type&&" "===e.text;)t.children.pop()}return Ka(t,{warn:Ja,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start:function(t,i,a,l,f){var d=r&&r.ns||Qa(t);W&&"svg"===d&&(i=function(t){for(var e=[],n=0;n<t.length;n++){var r=t[n];ws.test(r.name)||(r.name=r.name.replace(xs,""),e.push(r))}return e}(i));var p,v=vs(t,i,r);d&&(v.ns=d),"style"!==(p=v).tag&&("script"!==p.tag||p.attrsMap.type&&"text/javascript"!==p.attrsMap.type)||rt()||(v.forbidden=!0);for(var h=0;h<Za.length;h++)v=Za[h](v,e)||v;s||(!function(t){null!=Bo(t,"v-pre")&&(t.pre=!0)}(v),v.pre&&(s=!0)),Xa(v.tag)&&(c=!0),s?function(t){var e=t.attrsList,n=e.length;if(n)for(var r=t.attrs=new Array(n),o=0;o<n;o++)r[o]={name:e[o].name,value:JSON.stringify(e[o].value)},null!=e[o].start&&(r[o].start=e[o].start,r[o].end=e[o].end);else t.pre||(t.plain=!0)}(v):v.processed||(gs(v),function(t){var e=Bo(t,"v-if");if(e)t.if=e,ys(t,{exp:e,block:t});else{null!=Bo(t,"v-else")&&(t.else=!0);var n=Bo(t,"v-else-if");n&&(t.elseif=n)}}(v),function(t){null!=Bo(t,"v-once")&&(t.once=!0)}(v)),n||(n=v),a?u(v):(r=v,o.push(v))},end:function(t,e,n){var i=o[o.length-1];o.length-=1,r=o[o.length-1],u(i)},chars:function(t,e,n){if(r&&(!W||"textarea"!==r.tag||r.attrsMap.placeholder!==t)){var o,u=r.children;if(t=c||t.trim()?"script"===(o=r).tag||"style"===o.tag?t:ds(t):u.length?a?"condense"===a&&ls.test(t)?"":" ":i?" ":"":""){c||"condense"!==a||(t=t.replace(fs," "));var l=void 0,f=void 0;!s&&" "!==t&&(l=function(t,e){var n=e?_a(e):ga;if(n.test(t)){for(var r,o,i,a=[],s=[],c=n.lastIndex=0;r=n.exec(t);){(o=r.index)>c&&(s.push(i=t.slice(c,o)),a.push(JSON.stringify(i)));var u=jo(r[1].trim());a.push("_s(".concat(u,")")),s.push({"@binding":u}),c=o+r[0].length}return c<t.length&&(s.push(i=t.slice(c)),a.push(JSON.stringify(i))),{expression:a.join("+"),tokens:s}}}(t,qa))?f={type:2,expression:l.expression,tokens:l.tokens,text:t}:" "===t&&u.length&&" "===u[u.length-1].text||(f={type:3,text:t}),f&&u.push(f)}}},comment:function(t,e,n){if(r){var o={type:3,text:t,isComment:!0};r.children.push(o)}}}),n}function ms(t,e){var n,r;(r=Ho(n=t,"key"))&&(n.key=r),t.plain=!t.key&&!t.scopedSlots&&!t.attrsList.length,function(t){var e=Ho(t,"ref");e&&(t.ref=e,t.refInFor=function(t){var e=t;for(;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}(t))}(t),function(t){var e;"template"===t.tag?(e=Bo(t,"scope"),t.slotScope=e||Bo(t,"slot-scope")):(e=Bo(t,"slot-scope"))&&(t.slotScope=e);var n=Ho(t,"slot");n&&(t.slotTarget='""'===n?'"default"':n,t.slotTargetDynamic=!(!t.attrsMap[":slot"]&&!t.attrsMap["v-bind:slot"]),"template"===t.tag||t.slotScope||Mo(t,"slot",n,function(t,e){return t.rawAttrsMap[":"+e]||t.rawAttrsMap["v-bind:"+e]||t.rawAttrsMap[e]}(t,"slot")));if("template"===t.tag){if(a=Uo(t,us)){var r=_s(a),o=r.name,i=r.dynamic;t.slotTarget=o,t.slotTargetDynamic=i,t.slotScope=a.value||ps}}else{var a;if(a=Uo(t,us)){var s=t.scopedSlots||(t.scopedSlots={}),c=_s(a),u=c.name,l=(i=c.dynamic,s[u]=vs("template",[],t));l.slotTarget=u,l.slotTargetDynamic=i,l.children=t.children.filter((function(t){if(!t.slotScope)return t.parent=l,!0})),l.slotScope=a.value||ps,t.children=[],t.plain=!1}}}(t),function(t){"slot"===t.tag&&(t.slotName=Ho(t,"name"))}(t),function(t){var e;(e=Ho(t,"is"))&&(t.component=e);null!=Bo(t,"inline-template")&&(t.inlineTemplate=!0)}(t);for(var o=0;o<Wa.length;o++)t=Wa[o](t,e)||t;return function(t){var e,n,r,o,i,a,s,c,u=t.attrsList;for(e=0,n=u.length;e<n;e++)if(r=o=u[e].name,i=u[e].value,es.test(r))if(t.hasBindings=!0,(a=bs(r.replace(es,"")))&&(r=r.replace(cs,"")),ss.test(r))r=r.replace(ss,""),i=jo(i),(c=is.test(r))&&(r=r.slice(1,-1)),a&&(a.prop&&!c&&"innerHtml"===(r=w(r))&&(r="innerHTML"),a.camel&&!c&&(r=w(r)),a.sync&&(s=Ko(i,"$event"),c?Fo(t,'"update:"+('.concat(r,")"),s,null,!1,0,u[e],!0):(Fo(t,"update:".concat(w(r)),s,null,!1,0,u[e]),k(r)!==w(r)&&Fo(t,"update:".concat(k(r)),s,null,!1,0,u[e])))),a&&a.prop||!t.component&&Ya(t.tag,t.attrsMap.type,r)?Do(t,r,i,u[e],c):Mo(t,r,i,u[e],c);else if(ts.test(r))r=r.replace(ts,""),(c=is.test(r))&&(r=r.slice(1,-1)),Fo(t,r,i,a,!1,0,u[e],c);else{var l=(r=r.replace(es,"")).match(as),f=l&&l[1];c=!1,f&&(r=r.slice(0,-(f.length+1)),is.test(f)&&(f=f.slice(1,-1),c=!0)),Lo(t,r,o,i,f,c,a,u[e])}else Mo(t,r,JSON.stringify(i),u[e]),!t.component&&"muted"===r&&Ya(t.tag,t.attrsMap.type,r)&&Do(t,r,"true",u[e])}(t),t}function gs(t){var e;if(e=Bo(t,"v-for")){var n=function(t){var e=t.match(ns);if(!e)return;var n={};n.for=e[2].trim();var r=e[1].trim().replace(os,""),o=r.match(rs);o?(n.alias=r.replace(rs,"").trim(),n.iterator1=o[1].trim(),o[2]&&(n.iterator2=o[2].trim())):n.alias=r;return n}(e);n&&T(t,n)}}function ys(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(e)}function _s(t){var e=t.name.replace(us,"");return e||"#"!==t.name[0]&&(e="default"),is.test(e)?{name:e.slice(1,-1),dynamic:!0}:{name:'"'.concat(e,'"'),dynamic:!1}}function bs(t){var e=t.match(cs);if(e){var n={};return e.forEach((function(t){n[t.slice(1)]=!0})),n}}function $s(t){for(var e={},n=0,r=t.length;n<r;n++)e[t[n].name]=t[n].value;return e}var ws=/^xmlns:NS\d+/,xs=/^NS\d+:/;function Cs(t){return vs(t.tag,t.attrsList.slice(),t.parent)}var ks=[ba,wa,{preTransformNode:function(t,e){if("input"===t.tag){var n=t.attrsMap;if(!n["v-model"])return;var r=void 0;if((n[":type"]||n["v-bind:type"])&&(r=Ho(t,"type")),n.type||r||!n["v-bind"]||(r="(".concat(n["v-bind"],").type")),r){var o=Bo(t,"v-if",!0),i=o?"&&(".concat(o,")"):"",a=null!=Bo(t,"v-else",!0),s=Bo(t,"v-else-if",!0),c=Cs(t);gs(c),Io(c,"type","checkbox"),ms(c,e),c.processed=!0,c.if="(".concat(r,")==='checkbox'")+i,ys(c,{exp:c.if,block:c});var u=Cs(t);Bo(u,"v-for",!0),Io(u,"type","radio"),ms(u,e),ys(c,{exp:"(".concat(r,")==='radio'")+i,block:u});var l=Cs(t);return Bo(l,"v-for",!0),Io(l,":type",r),ms(l,e),ys(c,{exp:o,block:l}),a?c.else=!0:s&&(c.elseif=s),c}}}}];var Ss,Os,Ts={model:function(t,e,n){var r=e.value,o=e.modifiers,i=t.tag,a=t.attrsMap.type;if(t.component)return Vo(t,r,o),!1;if("select"===i)!function(t,e,n){var r=n&&n.number,o='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;'+"return ".concat(r?"_n(val)":"val","})"),i="$event.target.multiple ? $$selectedVal : $$selectedVal[0]",a="var $$selectedVal = ".concat(o,";");a="".concat(a," ").concat(Ko(e,i)),Fo(t,"change",a,null,!0)}(t,r,o);else if("input"===i&&"checkbox"===a)!function(t,e,n){var r=n&&n.number,o=Ho(t,"value")||"null",i=Ho(t,"true-value")||"true",a=Ho(t,"false-value")||"false";Do(t,"checked","Array.isArray(".concat(e,")")+"?_i(".concat(e,",").concat(o,")>-1")+("true"===i?":(".concat(e,")"):":_q(".concat(e,",").concat(i,")"))),Fo(t,"change","var $$a=".concat(e,",")+"$$el=$event.target,"+"$$c=$$el.checked?(".concat(i,"):(").concat(a,");")+"if(Array.isArray($$a)){"+"var $$v=".concat(r?"_n("+o+")":o,",")+"$$i=_i($$a,$$v);"+"if($$el.checked){$$i<0&&(".concat(Ko(e,"$$a.concat([$$v])"),")}")+"else{$$i>-1&&(".concat(Ko(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))"),")}")+"}else{".concat(Ko(e,"$$c"),"}"),null,!0)}(t,r,o);else if("input"===i&&"radio"===a)!function(t,e,n){var r=n&&n.number,o=Ho(t,"value")||"null";o=r?"_n(".concat(o,")"):o,Do(t,"checked","_q(".concat(e,",").concat(o,")")),Fo(t,"change",Ko(e,o),null,!0)}(t,r,o);else if("input"===i||"textarea"===i)!function(t,e,n){var r=t.attrsMap.type,o=n||{},i=o.lazy,a=o.number,s=o.trim,c=!i&&"range"!==r,u=i?"change":"range"===r?Yo:"input",l="$event.target.value";s&&(l="$event.target.value.trim()");a&&(l="_n(".concat(l,")"));var f=Ko(e,l);c&&(f="if($event.target.composing)return;".concat(f));Do(t,"value","(".concat(e,")")),Fo(t,u,f,null,!0),(s||a)&&Fo(t,"blur","$forceUpdate()")}(t,r,o);else if(!H.isReservedTag(i))return Vo(t,r,o),!1;return!0},text:function(t,e){e.value&&Do(t,"textContent","_s(".concat(e.value,")"),e)},html:function(t,e){e.value&&Do(t,"innerHTML","_s(".concat(e.value,")"),e)}},As={expectHTML:!0,modules:ks,directives:Ts,isPreTag:function(t){return"pre"===t},isUnaryTag:Ca,mustUseProp:Mr,canBeLeftOpenTag:ka,isReservedTag:Gr,getTagNamespace:Xr,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(ks)},js=b((function(t){return v("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}));function Es(t,e){t&&(Ss=js(e.staticKeys||""),Os=e.isReservedTag||E,Ns(t),Ps(t,!1))}function Ns(t){if(t.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||h(t.tag)||!Os(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(Ss)))}(t),1===t.type){if(!Os(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var e=0,n=t.children.length;e<n;e++){var r=t.children[e];Ns(r),r.static||(t.static=!1)}if(t.ifConditions)for(e=1,n=t.ifConditions.length;e<n;e++){var o=t.ifConditions[e].block;Ns(o),o.static||(t.static=!1)}}}function Ps(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var n=0,r=t.children.length;n<r;n++)Ps(t.children[n],e||!!t.for);if(t.ifConditions)for(n=1,r=t.ifConditions.length;n<r;n++)Ps(t.ifConditions[n].block,e)}}var Ds=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,Ms=/\([^)]*?\);*$/,Is=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ls={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Rs={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Fs=function(t){return"if(".concat(t,")return null;")},Hs={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Fs("$event.target !== $event.currentTarget"),ctrl:Fs("!$event.ctrlKey"),shift:Fs("!$event.shiftKey"),alt:Fs("!$event.altKey"),meta:Fs("!$event.metaKey"),left:Fs("'button' in $event && $event.button !== 0"),middle:Fs("'button' in $event && $event.button !== 1"),right:Fs("'button' in $event && $event.button !== 2")};function Bs(t,e){var n=e?"nativeOn:":"on:",r="",o="";for(var i in t){var a=Us(t[i]);t[i]&&t[i].dynamic?o+="".concat(i,",").concat(a,","):r+='"'.concat(i,'":').concat(a,",")}return r="{".concat(r.slice(0,-1),"}"),o?n+"_d(".concat(r,",[").concat(o.slice(0,-1),"])"):n+r}function Us(t){if(!t)return"function(){}";if(Array.isArray(t))return"[".concat(t.map((function(t){return Us(t)})).join(","),"]");var e=Is.test(t.value),n=Ds.test(t.value),r=Is.test(t.value.replace(Ms,""));if(t.modifiers){var o="",i="",a=[],s=function(e){if(Hs[e])i+=Hs[e],Ls[e]&&a.push(e);else if("exact"===e){var n=t.modifiers;i+=Fs(["ctrl","shift","alt","meta"].filter((function(t){return!n[t]})).map((function(t){return"$event.".concat(t,"Key")})).join("||"))}else a.push(e)};for(var c in t.modifiers)s(c);a.length&&(o+=function(t){return"if(!$event.type.indexOf('key')&&"+"".concat(t.map(zs).join("&&"),")return null;")}(a)),i&&(o+=i);var u=e?"return ".concat(t.value,".apply(null, arguments)"):n?"return (".concat(t.value,").apply(null, arguments)"):r?"return ".concat(t.value):t.value;return"function($event){".concat(o).concat(u,"}")}return e||n?t.value:"function($event){".concat(r?"return ".concat(t.value):t.value,"}")}function zs(t){var e=parseInt(t,10);if(e)return"$event.keyCode!==".concat(e);var n=Ls[t],r=Rs[t];return"_k($event.keyCode,"+"".concat(JSON.stringify(t),",")+"".concat(JSON.stringify(n),",")+"$event.key,"+"".concat(JSON.stringify(r))+")"}var Vs={on:function(t,e){t.wrapListeners=function(t){return"_g(".concat(t,",").concat(e.value,")")}},bind:function(t,e){t.wrapData=function(n){return"_b(".concat(n,",'").concat(t.tag,"',").concat(e.value,",").concat(e.modifiers&&e.modifiers.prop?"true":"false").concat(e.modifiers&&e.modifiers.sync?",true":"",")")}},cloak:j},Ks=function(t){this.options=t,this.warn=t.warn||No,this.transforms=Po(t.modules,"transformCode"),this.dataGenFns=Po(t.modules,"genData"),this.directives=T(T({},Vs),t.directives);var e=t.isReservedTag||E;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Js(t,e){var n=new Ks(e),r=t?"script"===t.tag?"null":qs(t,n):'_c("div")';return{render:"with(this){return ".concat(r,"}"),staticRenderFns:n.staticRenderFns}}function qs(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Ws(t,e);if(t.once&&!t.onceProcessed)return Zs(t,e);if(t.for&&!t.forProcessed)return Ys(t,e);if(t.if&&!t.ifProcessed)return Gs(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){var n=t.slotName||'"default"',r=nc(t,e),o="_t(".concat(n).concat(r?",function(){return ".concat(r,"}"):""),i=t.attrs||t.dynamicAttrs?ic((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:w(t.name),value:t.value,dynamic:t.dynamic}}))):null,a=t.attrsMap["v-bind"];!i&&!a||r||(o+=",null");i&&(o+=",".concat(i));a&&(o+="".concat(i?"":",null",",").concat(a));return o+")"}(t,e);var n=void 0;if(t.component)n=function(t,e,n){var r=e.inlineTemplate?null:nc(e,n,!0);return"_c(".concat(t,",").concat(Qs(e,n)).concat(r?",".concat(r):"",")")}(t.component,t,e);else{var r=void 0,o=e.maybeComponent(t);(!t.plain||t.pre&&o)&&(r=Qs(t,e));var i=void 0,a=e.options.bindings;o&&a&&!1!==a.__isScriptSetup&&(i=function(t,e){var n=w(e),r=x(n),o=function(o){return t[e]===o?e:t[n]===o?n:t[r]===o?r:void 0},i=o("setup-const")||o("setup-reactive-const");if(i)return i;var a=o("setup-let")||o("setup-ref")||o("setup-maybe-ref");if(a)return a}(a,t.tag)),i||(i="'".concat(t.tag,"'"));var s=t.inlineTemplate?null:nc(t,e,!0);n="_c(".concat(i).concat(r?",".concat(r):"").concat(s?",".concat(s):"",")")}for(var c=0;c<e.transforms.length;c++)n=e.transforms[c](t,n);return n}return nc(t,e)||"void 0"}function Ws(t,e){t.staticProcessed=!0;var n=e.pre;return t.pre&&(e.pre=t.pre),e.staticRenderFns.push("with(this){return ".concat(qs(t,e),"}")),e.pre=n,"_m(".concat(e.staticRenderFns.length-1).concat(t.staticInFor?",true":"",")")}function Zs(t,e){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return Gs(t,e);if(t.staticInFor){for(var n="",r=t.parent;r;){if(r.for){n=r.key;break}r=r.parent}return n?"_o(".concat(qs(t,e),",").concat(e.onceId++,",").concat(n,")"):qs(t,e)}return Ws(t,e)}function Gs(t,e,n,r){return t.ifProcessed=!0,Xs(t.ifConditions.slice(),e,n,r)}function Xs(t,e,n,r){if(!t.length)return r||"_e()";var o=t.shift();return o.exp?"(".concat(o.exp,")?").concat(i(o.block),":").concat(Xs(t,e,n,r)):"".concat(i(o.block));function i(t){return n?n(t,e):t.once?Zs(t,e):qs(t,e)}}function Ys(t,e,n,r){var o=t.for,i=t.alias,a=t.iterator1?",".concat(t.iterator1):"",s=t.iterator2?",".concat(t.iterator2):"";return t.forProcessed=!0,"".concat(r||"_l","((").concat(o,"),")+"function(".concat(i).concat(a).concat(s,"){")+"return ".concat((n||qs)(t,e))+"})"}function Qs(t,e){var n="{",r=function(t,e){var n=t.directives;if(!n)return;var r,o,i,a,s="directives:[",c=!1;for(r=0,o=n.length;r<o;r++){i=n[r],a=!0;var u=e.directives[i.name];u&&(a=!!u(t,i,e.warn)),a&&(c=!0,s+='{name:"'.concat(i.name,'",rawName:"').concat(i.rawName,'"').concat(i.value?",value:(".concat(i.value,"),expression:").concat(JSON.stringify(i.value)):"").concat(i.arg?",arg:".concat(i.isDynamicArg?i.arg:'"'.concat(i.arg,'"')):"").concat(i.modifiers?",modifiers:".concat(JSON.stringify(i.modifiers)):"","},"))}if(c)return s.slice(0,-1)+"]"}(t,e);r&&(n+=r+","),t.key&&(n+="key:".concat(t.key,",")),t.ref&&(n+="ref:".concat(t.ref,",")),t.refInFor&&(n+="refInFor:true,"),t.pre&&(n+="pre:true,"),t.component&&(n+='tag:"'.concat(t.tag,'",'));for(var o=0;o<e.dataGenFns.length;o++)n+=e.dataGenFns[o](t);if(t.attrs&&(n+="attrs:".concat(ic(t.attrs),",")),t.props&&(n+="domProps:".concat(ic(t.props),",")),t.events&&(n+="".concat(Bs(t.events,!1),",")),t.nativeEvents&&(n+="".concat(Bs(t.nativeEvents,!0),",")),t.slotTarget&&!t.slotScope&&(n+="slot:".concat(t.slotTarget,",")),t.scopedSlots&&(n+="".concat(function(t,e,n){var r=t.for||Object.keys(e).some((function(t){var n=e[t];return n.slotTargetDynamic||n.if||n.for||tc(n)})),o=!!t.if;if(!r)for(var i=t.parent;i;){if(i.slotScope&&i.slotScope!==ps||i.for){r=!0;break}i.if&&(o=!0),i=i.parent}var a=Object.keys(e).map((function(t){return ec(e[t],n)})).join(",");return"scopedSlots:_u([".concat(a,"]").concat(r?",null,true":"").concat(!r&&o?",null,false,".concat(function(t){var e=5381,n=t.length;for(;n;)e=33*e^t.charCodeAt(--n);return e>>>0}(a)):"",")")}(t,t.scopedSlots,e),",")),t.model&&(n+="model:{value:".concat(t.model.value,",callback:").concat(t.model.callback,",expression:").concat(t.model.expression,"},")),t.inlineTemplate){var i=function(t,e){var n=t.children[0];if(n&&1===n.type){var r=Js(n,e.options);return"inlineTemplate:{render:function(){".concat(r.render,"},staticRenderFns:[").concat(r.staticRenderFns.map((function(t){return"function(){".concat(t,"}")})).join(","),"]}")}}(t,e);i&&(n+="".concat(i,","))}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n="_b(".concat(n,',"').concat(t.tag,'",').concat(ic(t.dynamicAttrs),")")),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function tc(t){return 1===t.type&&("slot"===t.tag||t.children.some(tc))}function ec(t,e){var n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return Gs(t,e,ec,"null");if(t.for&&!t.forProcessed)return Ys(t,e,ec);var r=t.slotScope===ps?"":String(t.slotScope),o="function(".concat(r,"){")+"return ".concat("template"===t.tag?t.if&&n?"(".concat(t.if,")?").concat(nc(t,e)||"undefined",":undefined"):nc(t,e)||"undefined":qs(t,e),"}"),i=r?"":",proxy:true";return"{key:".concat(t.slotTarget||'"default"',",fn:").concat(o).concat(i,"}")}function nc(t,e,n,r,o){var i=t.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?e.maybeComponent(a)?",1":",0":"";return"".concat((r||qs)(a,e)).concat(s)}var c=n?function(t,e){for(var n=0,r=0;r<t.length;r++){var o=t[r];if(1===o.type){if(rc(o)||o.ifConditions&&o.ifConditions.some((function(t){return rc(t.block)}))){n=2;break}(e(o)||o.ifConditions&&o.ifConditions.some((function(t){return e(t.block)})))&&(n=1)}}return n}(i,e.maybeComponent):0,u=o||oc;return"[".concat(i.map((function(t){return u(t,e)})).join(","),"]").concat(c?",".concat(c):"")}}function rc(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}function oc(t,e){return 1===t.type?qs(t,e):3===t.type&&t.isComment?function(t){return"_e(".concat(JSON.stringify(t.text),")")}(t):function(t){return"_v(".concat(2===t.type?t.expression:ac(JSON.stringify(t.text)),")")}(t)}function ic(t){for(var e="",n="",r=0;r<t.length;r++){var o=t[r],i=ac(o.value);o.dynamic?n+="".concat(o.name,",").concat(i,","):e+='"'.concat(o.name,'":').concat(i,",")}return e="{".concat(e.slice(0,-1),"}"),n?"_d(".concat(e,",[").concat(n.slice(0,-1),"])"):e}function ac(t){return t.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function sc(t,e){try{return new Function(t)}catch(n){return e.push({err:n,code:t}),j}}function cc(t){var e=Object.create(null);return function(n,r,o){(r=T({},r)).warn,delete r.warn;var i=r.delimiters?String(r.delimiters)+n:n;if(e[i])return e[i];var a=t(n,r),s={},c=[];return s.render=sc(a.render,c),s.staticRenderFns=a.staticRenderFns.map((function(t){return sc(t,c)})),e[i]=s}}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)");var uc,lc,fc=(uc=function(t,e){var n=hs(t.trim(),e);!1!==e.optimize&&Es(n,e);var r=Js(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(t){function e(e,n){var r=Object.create(t),o=[],i=[];if(n)for(var a in n.modules&&(r.modules=(t.modules||[]).concat(n.modules)),n.directives&&(r.directives=T(Object.create(t.directives||null),n.directives)),n)"modules"!==a&&"directives"!==a&&(r[a]=n[a]);r.warn=function(t,e,n){(n?i:o).push(t)};var s=uc(e.trim(),r);return s.errors=o,s.tips=i,s}return{compile:e,compileToFunctions:cc(e)}}),dc=fc(As).compileToFunctions;function pc(t){return(lc=lc||document.createElement("div")).innerHTML=t?'<a href="\n"/>':'<div a="\n"/>',lc.innerHTML.indexOf("&#10;")>0}var vc=!!J&&pc(!1),hc=!!J&&pc(!0),mc=b((function(t){var e=to(t);return e&&e.innerHTML})),gc=Cr.prototype.$mount;return Cr.prototype.$mount=function(t,e){if((t=t&&to(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=mc(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(r){var o=dc(r,{outputSourceRange:!1,shouldDecodeNewlines:vc,shouldDecodeNewlinesForHref:hc,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a}}return gc.call(this,t,e)},Cr.compile=dc,T(Cr,Fn),Cr.effect=function(t,e){var n=new Vn(ct,t,j,{sync:!0});e&&(n.update=function(){e((function(){return n.run()}))})},Cr}));/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
'use strict';

const emptyObject = Object.freeze({});
const isArray = Array.isArray;
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef(v) {
    return v === undefined || v === null;
}
function isDef(v) {
    return v !== undefined && v !== null;
}
function isTrue(v) {
    return v === true;
}
function isFalse(v) {
    return v === false;
}
/**
 * Check if value is primitive.
 */
function isPrimitive(value) {
    return (typeof value === 'string' ||
        typeof value === 'number' ||
        // $flow-disable-line
        typeof value === 'symbol' ||
        typeof value === 'boolean');
}
function isFunction(value) {
    return typeof value === 'function';
}
/**
 * Quick object check - this is primarily used to tell
 * objects from primitive values when we know the value
 * is a JSON-compliant type.
 */
function isObject(obj) {
    return obj !== null && typeof obj === 'object';
}
/**
 * Get the raw type string of a value, e.g., [object Object].
 */
const _toString = Object.prototype.toString;
function toRawType(value) {
    return _toString.call(value).slice(8, -1);
}
/**
 * Strict object type check. Only returns true
 * for plain JavaScript objects.
 */
function isPlainObject(obj) {
    return _toString.call(obj) === '[object Object]';
}
function isRegExp(v) {
    return _toString.call(v) === '[object RegExp]';
}
/**
 * Check if val is a valid array index.
 */
function isValidArrayIndex(val) {
    const n = parseFloat(String(val));
    return n >= 0 && Math.floor(n) === n && isFinite(val);
}
function isPromise(val) {
    return (isDef(val) &&
        typeof val.then === 'function' &&
        typeof val.catch === 'function');
}
/**
 * Convert a value to a string that is actually rendered.
 */
function toString(val) {
    return val == null
        ? ''
        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
            ? JSON.stringify(val, null, 2)
            : String(val);
}
/**
 * Convert an input value to a number for persistence.
 * If the conversion fails, return original string.
 */
function toNumber(val) {
    const n = parseFloat(val);
    return isNaN(n) ? val : n;
}
/**
 * Make a map and return a function for checking if a key
 * is in that map.
 */
function makeMap(str, expectsLowerCase) {
    const map = Object.create(null);
    const list = str.split(',');
    for (let i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? val => map[val.toLowerCase()] : val => map[val];
}
/**
 * Check if a tag is a built-in tag.
 */
const isBuiltInTag = makeMap('slot,component', true);
/**
 * Check if an attribute is a reserved attribute.
 */
const isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
/**
 * Remove an item from an array.
 */
function remove$2(arr, item) {
    const len = arr.length;
    if (len) {
        // fast path for the only / last item
        if (item === arr[len - 1]) {
            arr.length = len - 1;
            return;
        }
        const index = arr.indexOf(item);
        if (index > -1) {
            return arr.splice(index, 1);
        }
    }
}
/**
 * Check whether an object has the property.
 */
const hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
    return hasOwnProperty.call(obj, key);
}
/**
 * Create a cached version of a pure function.
 */
function cached(fn) {
    const cache = Object.create(null);
    return function cachedFn(str) {
        const hit = cache[str];
        return hit || (cache[str] = fn(str));
    };
}
/**
 * Camelize a hyphen-delimited string.
 */
const camelizeRE = /-(\w)/g;
const camelize = cached((str) => {
    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
});
/**
 * Capitalize a string.
 */
const capitalize = cached((str) => {
    return str.charAt(0).toUpperCase() + str.slice(1);
});
/**
 * Hyphenate a camelCase string.
 */
const hyphenateRE = /\B([A-Z])/g;
const hyphenate = cached((str) => {
    return str.replace(hyphenateRE, '-$1').toLowerCase();
});
/**
 * Simple bind polyfill for environments that do not support it,
 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
 * since native bind is now performant enough in most browsers.
 * But removing it would mean breaking code that was able to run in
 * PhantomJS 1.x, so this must be kept for backward compatibility.
 */
/* istanbul ignore next */
function polyfillBind(fn, ctx) {
    function boundFn(a) {
        const l = arguments.length;
        return l
            ? l > 1
                ? fn.apply(ctx, arguments)
                : fn.call(ctx, a)
            : fn.call(ctx);
    }
    boundFn._length = fn.length;
    return boundFn;
}
function nativeBind(fn, ctx) {
    return fn.bind(ctx);
}
// @ts-expect-error bind cannot be `undefined`
const bind = Function.prototype.bind ? nativeBind : polyfillBind;
/**
 * Convert an Array-like object to a real Array.
 */
function toArray(list, start) {
    start = start || 0;
    let i = list.length - start;
    const ret = new Array(i);
    while (i--) {
        ret[i] = list[i + start];
    }
    return ret;
}
/**
 * Mix properties into target object.
 */
function extend(to, _from) {
    for (const key in _from) {
        to[key] = _from[key];
    }
    return to;
}
/**
 * Merge an Array of Objects into a single Object.
 */
function toObject(arr) {
    const res = {};
    for (let i = 0; i < arr.length; i++) {
        if (arr[i]) {
            extend(res, arr[i]);
        }
    }
    return res;
}
/* eslint-disable no-unused-vars */
/**
 * Perform no operation.
 * Stubbing args to make Flow happy without leaving useless transpiled code
 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
 */
function noop(a, b, c) { }
/**
 * Always return false.
 */
const no = (a, b, c) => false;
/* eslint-enable no-unused-vars */
/**
 * Return the same value.
 */
const identity = (_) => _;
/**
 * Check if two values are loosely equal - that is,
 * if they are plain objects, do they have the same shape?
 */
function looseEqual(a, b) {
    if (a === b)
        return true;
    const isObjectA = isObject(a);
    const isObjectB = isObject(b);
    if (isObjectA && isObjectB) {
        try {
            const isArrayA = Array.isArray(a);
            const isArrayB = Array.isArray(b);
            if (isArrayA && isArrayB) {
                return (a.length === b.length &&
                    a.every((e, i) => {
                        return looseEqual(e, b[i]);
                    }));
            }
            else if (a instanceof Date && b instanceof Date) {
                return a.getTime() === b.getTime();
            }
            else if (!isArrayA && !isArrayB) {
                const keysA = Object.keys(a);
                const keysB = Object.keys(b);
                return (keysA.length === keysB.length &&
                    keysA.every(key => {
                        return looseEqual(a[key], b[key]);
                    }));
            }
            else {
                /* istanbul ignore next */
                return false;
            }
        }
        catch (e) {
            /* istanbul ignore next */
            return false;
        }
    }
    else if (!isObjectA && !isObjectB) {
        return String(a) === String(b);
    }
    else {
        return false;
    }
}
/**
 * Return the first index at which a loosely equal value can be
 * found in the array (if value is a plain object, the array must
 * contain an object of the same shape), or -1 if it is not present.
 */
function looseIndexOf(arr, val) {
    for (let i = 0; i < arr.length; i++) {
        if (looseEqual(arr[i], val))
            return i;
    }
    return -1;
}
/**
 * Ensure a function is called only once.
 */
function once(fn) {
    let called = false;
    return function () {
        if (!called) {
            called = true;
            fn.apply(this, arguments);
        }
    };
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
function hasChanged(x, y) {
    if (x === y) {
        return x === 0 && 1 / x !== 1 / y;
    }
    else {
        return x === x || y === y;
    }
}

const SSR_ATTR = 'data-server-rendered';
const ASSET_TYPES = ['component', 'directive', 'filter'];
const LIFECYCLE_HOOKS = [
    'beforeCreate',
    'created',
    'beforeMount',
    'mounted',
    'beforeUpdate',
    'updated',
    'beforeDestroy',
    'destroyed',
    'activated',
    'deactivated',
    'errorCaptured',
    'serverPrefetch',
    'renderTracked',
    'renderTriggered'
];

var config = {
    /**
     * Option merge strategies (used in core/util/options)
     */
    // $flow-disable-line
    optionMergeStrategies: Object.create(null),
    /**
     * Whether to suppress warnings.
     */
    silent: false,
    /**
     * Show production mode tip message on boot?
     */
    productionTip: true,
    /**
     * Whether to enable devtools
     */
    devtools: true,
    /**
     * Whether to record perf
     */
    performance: false,
    /**
     * Error handler for watcher errors
     */
    errorHandler: null,
    /**
     * Warn handler for watcher warns
     */
    warnHandler: null,
    /**
     * Ignore certain custom elements
     */
    ignoredElements: [],
    /**
     * Custom user key aliases for v-on
     */
    // $flow-disable-line
    keyCodes: Object.create(null),
    /**
     * Check if a tag is reserved so that it cannot be registered as a
     * component. This is platform-dependent and may be overwritten.
     */
    isReservedTag: no,
    /**
     * Check if an attribute is reserved so that it cannot be used as a component
     * prop. This is platform-dependent and may be overwritten.
     */
    isReservedAttr: no,
    /**
     * Check if a tag is an unknown element.
     * Platform-dependent.
     */
    isUnknownElement: no,
    /**
     * Get the namespace of an element
     */
    getTagNamespace: noop,
    /**
     * Parse the real tag name for the specific platform.
     */
    parsePlatformTagName: identity,
    /**
     * Check if an attribute must be bound using property, e.g. value
     * Platform-dependent.
     */
    mustUseProp: no,
    /**
     * Perform updates asynchronously. Intended to be used by Vue Test Utils
     * This will significantly reduce performance if set to false.
     */
    async: true,
    /**
     * Exposed for legacy reasons
     */
    _lifecycleHooks: LIFECYCLE_HOOKS
};

/**
 * unicode letters used for parsing html tags, component names and property paths.
 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
 */
const unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
/**
 * Check if a string starts with $ or _
 */
function isReserved(str) {
    const c = (str + '').charCodeAt(0);
    return c === 0x24 || c === 0x5f;
}
/**
 * Define a property.
 */
function def(obj, key, val, enumerable) {
    Object.defineProperty(obj, key, {
        value: val,
        enumerable: !!enumerable,
        writable: true,
        configurable: true
    });
}
/**
 * Parse simple path.
 */
const bailRE = new RegExp(`[^${unicodeRegExp.source}.$_\\d]`);
function parsePath(path) {
    if (bailRE.test(path)) {
        return;
    }
    const segments = path.split('.');
    return function (obj) {
        for (let i = 0; i < segments.length; i++) {
            if (!obj)
                return;
            obj = obj[segments[i]];
        }
        return obj;
    };
}

// can we use __proto__?
const hasProto = '__proto__' in {};
// Browser environment sniffing
const inBrowser = typeof window !== 'undefined';
const UA = inBrowser && window.navigator.userAgent.toLowerCase();
const isIE = UA && /msie|trident/.test(UA);
const isIE9 = UA && UA.indexOf('msie 9.0') > 0;
const isEdge = UA && UA.indexOf('edge/') > 0;
UA && UA.indexOf('android') > 0;
const isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
UA && /chrome\/\d+/.test(UA) && !isEdge;
UA && /phantomjs/.test(UA);
const isFF = UA && UA.match(/firefox\/(\d+)/);
// Firefox has a "watch" function on Object.prototype...
// @ts-expect-error firebox support
const nativeWatch = {}.watch;
let supportsPassive = false;
if (inBrowser) {
    try {
        const opts = {};
        Object.defineProperty(opts, 'passive', {
            get() {
                /* istanbul ignore next */
                supportsPassive = true;
            }
        }); // https://github.com/facebook/flow/issues/285
        window.addEventListener('test-passive', null, opts);
    }
    catch (e) { }
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
let _isServer;
const isServerRendering = () => {
    if (_isServer === undefined) {
        /* istanbul ignore if */
        if (!inBrowser && typeof global !== 'undefined') {
            // detect presence of vue-server-renderer and avoid
            // Webpack shimming the process
            _isServer =
                global['process'] && global['process'].env.VUE_ENV === 'server';
        }
        else {
            _isServer = false;
        }
    }
    return _isServer;
};
// detect devtools
const devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
/* istanbul ignore next */
function isNative(Ctor) {
    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
const hasSymbol = typeof Symbol !== 'undefined' &&
    isNative(Symbol) &&
    typeof Reflect !== 'undefined' &&
    isNative(Reflect.ownKeys);
let _Set; // $flow-disable-line
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
    // use native Set when available.
    _Set = Set;
}
else {
    // a non-standard Set polyfill that only works with primitive keys.
    _Set = class Set {
        constructor() {
            this.set = Object.create(null);
        }
        has(key) {
            return this.set[key] === true;
        }
        add(key) {
            this.set[key] = true;
        }
        clear() {
            this.set = Object.create(null);
        }
    };
}

let currentInstance = null;
/**
 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
 * relies on it). Do not use this internally, just use `currentInstance`.
 *
 * @internal this function needs manual type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function getCurrentInstance() {
    return currentInstance && { proxy: currentInstance };
}
/**
 * @internal
 */
function setCurrentInstance(vm = null) {
    if (!vm)
        currentInstance && currentInstance._scope.off();
    currentInstance = vm;
    vm && vm._scope.on();
}

/**
 * @internal
 */
class VNode {
    constructor(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
        this.tag = tag;
        this.data = data;
        this.children = children;
        this.text = text;
        this.elm = elm;
        this.ns = undefined;
        this.context = context;
        this.fnContext = undefined;
        this.fnOptions = undefined;
        this.fnScopeId = undefined;
        this.key = data && data.key;
        this.componentOptions = componentOptions;
        this.componentInstance = undefined;
        this.parent = undefined;
        this.raw = false;
        this.isStatic = false;
        this.isRootInsert = true;
        this.isComment = false;
        this.isCloned = false;
        this.isOnce = false;
        this.asyncFactory = asyncFactory;
        this.asyncMeta = undefined;
        this.isAsyncPlaceholder = false;
    }
    // DEPRECATED: alias for componentInstance for backwards compat.
    /* istanbul ignore next */
    get child() {
        return this.componentInstance;
    }
}
const createEmptyVNode = (text = '') => {
    const node = new VNode();
    node.text = text;
    node.isComment = true;
    return node;
};
function createTextVNode(val) {
    return new VNode(undefined, undefined, undefined, String(val));
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode(vnode) {
    const cloned = new VNode(vnode.tag, vnode.data, 
    // #7975
    // clone children array to avoid mutating original in case of cloning
    // a child.
    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
    cloned.ns = vnode.ns;
    cloned.isStatic = vnode.isStatic;
    cloned.key = vnode.key;
    cloned.isComment = vnode.isComment;
    cloned.fnContext = vnode.fnContext;
    cloned.fnOptions = vnode.fnOptions;
    cloned.fnScopeId = vnode.fnScopeId;
    cloned.asyncMeta = vnode.asyncMeta;
    cloned.isCloned = true;
    return cloned;
}

let uid$2 = 0;
const pendingCleanupDeps = [];
const cleanupDeps = () => {
    for (let i = 0; i < pendingCleanupDeps.length; i++) {
        const dep = pendingCleanupDeps[i];
        dep.subs = dep.subs.filter(s => s);
        dep._pending = false;
    }
    pendingCleanupDeps.length = 0;
};
/**
 * A dep is an observable that can have multiple
 * directives subscribing to it.
 * @internal
 */
class Dep {
    constructor() {
        // pending subs cleanup
        this._pending = false;
        this.id = uid$2++;
        this.subs = [];
    }
    addSub(sub) {
        this.subs.push(sub);
    }
    removeSub(sub) {
        // #12696 deps with massive amount of subscribers are extremely slow to
        // clean up in Chromium
        // to workaround this, we unset the sub for now, and clear them on
        // next scheduler flush.
        this.subs[this.subs.indexOf(sub)] = null;
        if (!this._pending) {
            this._pending = true;
            pendingCleanupDeps.push(this);
        }
    }
    depend(info) {
        if (Dep.target) {
            Dep.target.addDep(this);
            if (info && Dep.target.onTrack) {
                Dep.target.onTrack(Object.assign({ effect: Dep.target }, info));
            }
        }
    }
    notify(info) {
        // stabilize the subscriber list first
        const subs = this.subs.filter(s => s);
        if (!config.async) {
            // subs aren't sorted in scheduler if not running async
            // we need to sort them now to make sure they fire in correct
            // order
            subs.sort((a, b) => a.id - b.id);
        }
        for (let i = 0, l = subs.length; i < l; i++) {
            const sub = subs[i];
            if (info) {
                sub.onTrigger &&
                    sub.onTrigger(Object.assign({ effect: subs[i] }, info));
            }
            sub.update();
        }
    }
}
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null;
const targetStack = [];
function pushTarget(target) {
    targetStack.push(target);
    Dep.target = target;
}
function popTarget() {
    targetStack.pop();
    Dep.target = targetStack[targetStack.length - 1];
}

/*
 * not type checking this file because flow doesn't play well with
 * dynamically accessing methods on Array prototype
 */
const arrayProto = Array.prototype;
const arrayMethods = Object.create(arrayProto);
const methodsToPatch = [
    'push',
    'pop',
    'shift',
    'unshift',
    'splice',
    'sort',
    'reverse'
];
/**
 * Intercept mutating methods and emit events
 */
methodsToPatch.forEach(function (method) {
    // cache original method
    const original = arrayProto[method];
    def(arrayMethods, method, function mutator(...args) {
        const result = original.apply(this, args);
        const ob = this.__ob__;
        let inserted;
        switch (method) {
            case 'push':
            case 'unshift':
                inserted = args;
                break;
            case 'splice':
                inserted = args.slice(2);
                break;
        }
        if (inserted)
            ob.observeArray(inserted);
        // notify change
        {
            ob.dep.notify({
                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
                target: this,
                key: method
            });
        }
        return result;
    });
});

const arrayKeys = Object.getOwnPropertyNames(arrayMethods);
const NO_INIITIAL_VALUE = {};
/**
 * In some cases we may want to disable observation inside a component's
 * update computation.
 */
let shouldObserve = true;
function toggleObserving(value) {
    shouldObserve = value;
}
// ssr mock dep
const mockDep = {
    notify: noop,
    depend: noop,
    addSub: noop,
    removeSub: noop
};
/**
 * Observer class that is attached to each observed
 * object. Once attached, the observer converts the target
 * object's property keys into getter/setters that
 * collect dependencies and dispatch updates.
 */
class Observer {
    constructor(value, shallow = false, mock = false) {
        this.value = value;
        this.shallow = shallow;
        this.mock = mock;
        // this.value = value
        this.dep = mock ? mockDep : new Dep();
        this.vmCount = 0;
        def(value, '__ob__', this);
        if (isArray(value)) {
            if (!mock) {
                if (hasProto) {
                    value.__proto__ = arrayMethods;
                    /* eslint-enable no-proto */
                }
                else {
                    for (let i = 0, l = arrayKeys.length; i < l; i++) {
                        const key = arrayKeys[i];
                        def(value, key, arrayMethods[key]);
                    }
                }
            }
            if (!shallow) {
                this.observeArray(value);
            }
        }
        else {
            /**
             * Walk through all properties and convert them into
             * getter/setters. This method should only be called when
             * value type is Object.
             */
            const keys = Object.keys(value);
            for (let i = 0; i < keys.length; i++) {
                const key = keys[i];
                defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
            }
        }
    }
    /**
     * Observe a list of Array items.
     */
    observeArray(value) {
        for (let i = 0, l = value.length; i < l; i++) {
            observe(value[i], false, this.mock);
        }
    }
}
// helpers
/**
 * Attempt to create an observer instance for a value,
 * returns the new observer if successfully observed,
 * or the existing observer if the value already has one.
 */
function observe(value, shallow, ssrMockReactivity) {
    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
        return value.__ob__;
    }
    if (shouldObserve &&
        (ssrMockReactivity || !isServerRendering()) &&
        (isArray(value) || isPlainObject(value)) &&
        Object.isExtensible(value) &&
        !value.__v_skip /* ReactiveFlags.SKIP */ &&
        !isRef(value) &&
        !(value instanceof VNode)) {
        return new Observer(value, shallow, ssrMockReactivity);
    }
}
/**
 * Define a reactive property on an Object.
 */
function defineReactive(obj, key, val, customSetter, shallow, mock) {
    const dep = new Dep();
    const property = Object.getOwnPropertyDescriptor(obj, key);
    if (property && property.configurable === false) {
        return;
    }
    // cater for pre-defined getter/setters
    const getter = property && property.get;
    const setter = property && property.set;
    if ((!getter || setter) &&
        (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
        val = obj[key];
    }
    let childOb = !shallow && observe(val, false, mock);
    Object.defineProperty(obj, key, {
        enumerable: true,
        configurable: true,
        get: function reactiveGetter() {
            const value = getter ? getter.call(obj) : val;
            if (Dep.target) {
                {
                    dep.depend({
                        target: obj,
                        type: "get" /* TrackOpTypes.GET */,
                        key
                    });
                }
                if (childOb) {
                    childOb.dep.depend();
                    if (isArray(value)) {
                        dependArray(value);
                    }
                }
            }
            return isRef(value) && !shallow ? value.value : value;
        },
        set: function reactiveSetter(newVal) {
            const value = getter ? getter.call(obj) : val;
            if (!hasChanged(value, newVal)) {
                return;
            }
            if (customSetter) {
                customSetter();
            }
            if (setter) {
                setter.call(obj, newVal);
            }
            else if (getter) {
                // #7981: for accessor properties without setter
                return;
            }
            else if (!shallow && isRef(value) && !isRef(newVal)) {
                value.value = newVal;
                return;
            }
            else {
                val = newVal;
            }
            childOb = !shallow && observe(newVal, false, mock);
            {
                dep.notify({
                    type: "set" /* TriggerOpTypes.SET */,
                    target: obj,
                    key,
                    newValue: newVal,
                    oldValue: value
                });
            }
        }
    });
    return dep;
}
function set(target, key, val) {
    if ((isUndef(target) || isPrimitive(target))) {
        warn(`Cannot set reactive property on undefined, null, or primitive value: ${target}`);
    }
    if (isReadonly(target)) {
        warn(`Set operation on key "${key}" failed: target is readonly.`);
        return;
    }
    const ob = target.__ob__;
    if (isArray(target) && isValidArrayIndex(key)) {
        target.length = Math.max(target.length, key);
        target.splice(key, 1, val);
        // when mocking for SSR, array methods are not hijacked
        if (ob && !ob.shallow && ob.mock) {
            observe(val, false, true);
        }
        return val;
    }
    if (key in target && !(key in Object.prototype)) {
        target[key] = val;
        return val;
    }
    if (target._isVue || (ob && ob.vmCount)) {
        warn('Avoid adding reactive properties to a Vue instance or its root $data ' +
                'at runtime - declare it upfront in the data option.');
        return val;
    }
    if (!ob) {
        target[key] = val;
        return val;
    }
    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
    {
        ob.dep.notify({
            type: "add" /* TriggerOpTypes.ADD */,
            target: target,
            key,
            newValue: val,
            oldValue: undefined
        });
    }
    return val;
}
function del(target, key) {
    if ((isUndef(target) || isPrimitive(target))) {
        warn(`Cannot delete reactive property on undefined, null, or primitive value: ${target}`);
    }
    if (isArray(target) && isValidArrayIndex(key)) {
        target.splice(key, 1);
        return;
    }
    const ob = target.__ob__;
    if (target._isVue || (ob && ob.vmCount)) {
        warn('Avoid deleting properties on a Vue instance or its root $data ' +
                '- just set it to null.');
        return;
    }
    if (isReadonly(target)) {
        warn(`Delete operation on key "${key}" failed: target is readonly.`);
        return;
    }
    if (!hasOwn(target, key)) {
        return;
    }
    delete target[key];
    if (!ob) {
        return;
    }
    {
        ob.dep.notify({
            type: "delete" /* TriggerOpTypes.DELETE */,
            target: target,
            key
        });
    }
}
/**
 * Collect dependencies on array elements when the array is touched, since
 * we cannot intercept array element access like property getters.
 */
function dependArray(value) {
    for (let e, i = 0, l = value.length; i < l; i++) {
        e = value[i];
        if (e && e.__ob__) {
            e.__ob__.dep.depend();
        }
        if (isArray(e)) {
            dependArray(e);
        }
    }
}

function reactive(target) {
    makeReactive(target, false);
    return target;
}
/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
function shallowReactive(target) {
    makeReactive(target, true);
    def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    return target;
}
function makeReactive(target, shallow) {
    // if trying to observe a readonly proxy, return the readonly version.
    if (!isReadonly(target)) {
        {
            if (isArray(target)) {
                warn(`Avoid using Array as root value for ${shallow ? `shallowReactive()` : `reactive()`} as it cannot be tracked in watch() or watchEffect(). Use ${shallow ? `shallowRef()` : `ref()`} instead. This is a Vue-2-only limitation.`);
            }
            const existingOb = target && target.__ob__;
            if (existingOb && existingOb.shallow !== shallow) {
                warn(`Target is already a ${existingOb.shallow ? `` : `non-`}shallow reactive object, and cannot be converted to ${shallow ? `` : `non-`}shallow.`);
            }
        }
        const ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
        if (!ob) {
            if (target == null || isPrimitive(target)) {
                warn(`value cannot be made reactive: ${String(target)}`);
            }
            if (isCollectionType(target)) {
                warn(`Vue 2 does not support reactive collection types such as Map or Set.`);
            }
        }
    }
}
function isReactive(value) {
    if (isReadonly(value)) {
        return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
    }
    return !!(value && value.__ob__);
}
function isShallow(value) {
    return !!(value && value.__v_isShallow);
}
function isReadonly(value) {
    return !!(value && value.__v_isReadonly);
}
function isProxy(value) {
    return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
    const raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
    return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
    // non-extensible objects won't be observed anyway
    if (Object.isExtensible(value)) {
        def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
    }
    return value;
}
/**
 * @internal
 */
function isCollectionType(value) {
    const type = toRawType(value);
    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
}

/**
 * @internal
 */
const RefFlag = `__v_isRef`;
function isRef(r) {
    return !!(r && r.__v_isRef === true);
}
function ref$1(value) {
    return createRef(value, false);
}
function shallowRef(value) {
    return createRef(value, true);
}
function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    const ref = {};
    def(ref, RefFlag, true);
    def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
    return ref;
}
function triggerRef(ref) {
    if (!ref.dep) {
        warn(`received object is not a triggerable ref.`);
    }
    {
        ref.dep &&
            ref.dep.notify({
                type: "set" /* TriggerOpTypes.SET */,
                target: ref,
                key: 'value'
            });
    }
}
function unref(ref) {
    return isRef(ref) ? ref.value : ref;
}
function proxyRefs(objectWithRefs) {
    if (isReactive(objectWithRefs)) {
        return objectWithRefs;
    }
    const proxy = {};
    const keys = Object.keys(objectWithRefs);
    for (let i = 0; i < keys.length; i++) {
        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
    }
    return proxy;
}
function proxyWithRefUnwrap(target, source, key) {
    Object.defineProperty(target, key, {
        enumerable: true,
        configurable: true,
        get: () => {
            const val = source[key];
            if (isRef(val)) {
                return val.value;
            }
            else {
                const ob = val && val.__ob__;
                if (ob)
                    ob.dep.depend();
                return val;
            }
        },
        set: value => {
            const oldValue = source[key];
            if (isRef(oldValue) && !isRef(value)) {
                oldValue.value = value;
            }
            else {
                source[key] = value;
            }
        }
    });
}
function customRef(factory) {
    const dep = new Dep();
    const { get, set } = factory(() => {
        {
            dep.depend({
                target: ref,
                type: "get" /* TrackOpTypes.GET */,
                key: 'value'
            });
        }
    }, () => {
        {
            dep.notify({
                target: ref,
                type: "set" /* TriggerOpTypes.SET */,
                key: 'value'
            });
        }
    });
    const ref = {
        get value() {
            return get();
        },
        set value(newVal) {
            set(newVal);
        }
    };
    def(ref, RefFlag, true);
    return ref;
}
function toRefs(object) {
    if (!isReactive(object)) {
        warn(`toRefs() expects a reactive object but received a plain one.`);
    }
    const ret = isArray(object) ? new Array(object.length) : {};
    for (const key in object) {
        ret[key] = toRef(object, key);
    }
    return ret;
}
function toRef(object, key, defaultValue) {
    const val = object[key];
    if (isRef(val)) {
        return val;
    }
    const ref = {
        get value() {
            const val = object[key];
            return val === undefined ? defaultValue : val;
        },
        set value(newVal) {
            object[key] = newVal;
        }
    };
    def(ref, RefFlag, true);
    return ref;
}

const rawToReadonlyFlag = `__v_rawToReadonly`;
const rawToShallowReadonlyFlag = `__v_rawToShallowReadonly`;
function readonly(target) {
    return createReadonly(target, false);
}
function createReadonly(target, shallow) {
    if (!isPlainObject(target)) {
        {
            if (isArray(target)) {
                warn(`Vue 2 does not support readonly arrays.`);
            }
            else if (isCollectionType(target)) {
                warn(`Vue 2 does not support readonly collection types such as Map or Set.`);
            }
            else {
                warn(`value cannot be made readonly: ${typeof target}`);
            }
        }
        return target;
    }
    if (!Object.isExtensible(target)) {
        warn(`Vue 2 does not support creating readonly proxy for non-extensible object.`);
    }
    // already a readonly object
    if (isReadonly(target)) {
        return target;
    }
    // already has a readonly proxy
    const existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
    const existingProxy = target[existingFlag];
    if (existingProxy) {
        return existingProxy;
    }
    const proxy = Object.create(Object.getPrototypeOf(target));
    def(target, existingFlag, proxy);
    def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
    def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
    if (isRef(target)) {
        def(proxy, RefFlag, true);
    }
    if (shallow || isShallow(target)) {
        def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    }
    const keys = Object.keys(target);
    for (let i = 0; i < keys.length; i++) {
        defineReadonlyProperty(proxy, target, keys[i], shallow);
    }
    return proxy;
}
function defineReadonlyProperty(proxy, target, key, shallow) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get() {
            const val = target[key];
            return shallow || !isPlainObject(val) ? val : readonly(val);
        },
        set() {
            warn(`Set operation on key "${key}" failed: target is readonly.`);
        }
    });
}
/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
function shallowReadonly(target) {
    return createReadonly(target, true);
}

function computed(getterOrOptions, debugOptions) {
    let getter;
    let setter;
    const onlyGetter = isFunction(getterOrOptions);
    if (onlyGetter) {
        getter = getterOrOptions;
        setter = () => {
                warn('Write operation failed: computed value is readonly');
            }
            ;
    }
    else {
        getter = getterOrOptions.get;
        setter = getterOrOptions.set;
    }
    const watcher = isServerRendering()
        ? null
        : new Watcher(currentInstance, getter, noop, { lazy: true });
    if (watcher && debugOptions) {
        watcher.onTrack = debugOptions.onTrack;
        watcher.onTrigger = debugOptions.onTrigger;
    }
    const ref = {
        // some libs rely on the presence effect for checking computed refs
        // from normal refs, but the implementation doesn't matter
        effect: watcher,
        get value() {
            if (watcher) {
                if (watcher.dirty) {
                    watcher.evaluate();
                }
                if (Dep.target) {
                    if (Dep.target.onTrack) {
                        Dep.target.onTrack({
                            effect: Dep.target,
                            target: ref,
                            type: "get" /* TrackOpTypes.GET */,
                            key: 'value'
                        });
                    }
                    watcher.depend();
                }
                return watcher.value;
            }
            else {
                return getter();
            }
        },
        set value(newVal) {
            setter(newVal);
        }
    };
    def(ref, RefFlag, true);
    def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
    return ref;
}

const WATCHER = `watcher`;
const WATCHER_CB = `${WATCHER} callback`;
const WATCHER_GETTER = `${WATCHER} getter`;
const WATCHER_CLEANUP = `${WATCHER} cleanup`;
// Simple effect.
function watchEffect(effect, options) {
    return doWatch(effect, null, options);
}
function watchPostEffect(effect, options) {
    return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'post' }) ));
}
function watchSyncEffect(effect, options) {
    return doWatch(effect, null, (Object.assign(Object.assign({}, options), { flush: 'sync' }) ));
}
// initial value for watchers to trigger on undefined initial values
const INITIAL_WATCHER_VALUE = {};
// implementation
function watch(source, cb, options) {
    if (typeof cb !== 'function') {
        warn(`\`watch(fn, options?)\` signature has been moved to a separate API. ` +
            `Use \`watchEffect(fn, options?)\` instead. \`watch\` now only ` +
            `supports \`watch(source, cb, options?) signature.`);
    }
    return doWatch(source, cb, options);
}
function doWatch(source, cb, { immediate, deep, flush = 'pre', onTrack, onTrigger } = emptyObject) {
    if (!cb) {
        if (immediate !== undefined) {
            warn(`watch() "immediate" option is only respected when using the ` +
                `watch(source, callback, options?) signature.`);
        }
        if (deep !== undefined) {
            warn(`watch() "deep" option is only respected when using the ` +
                `watch(source, callback, options?) signature.`);
        }
    }
    const warnInvalidSource = (s) => {
        warn(`Invalid watch source: ${s}. A watch source can only be a getter/effect ` +
            `function, a ref, a reactive object, or an array of these types.`);
    };
    const instance = currentInstance;
    const call = (fn, type, args = null) => invokeWithErrorHandling(fn, null, args, instance, type);
    let getter;
    let forceTrigger = false;
    let isMultiSource = false;
    if (isRef(source)) {
        getter = () => source.value;
        forceTrigger = isShallow(source);
    }
    else if (isReactive(source)) {
        getter = () => {
            source.__ob__.dep.depend();
            return source;
        };
        deep = true;
    }
    else if (isArray(source)) {
        isMultiSource = true;
        forceTrigger = source.some(s => isReactive(s) || isShallow(s));
        getter = () => source.map(s => {
            if (isRef(s)) {
                return s.value;
            }
            else if (isReactive(s)) {
                return traverse(s);
            }
            else if (isFunction(s)) {
                return call(s, WATCHER_GETTER);
            }
            else {
                warnInvalidSource(s);
            }
        });
    }
    else if (isFunction(source)) {
        if (cb) {
            // getter with cb
            getter = () => call(source, WATCHER_GETTER);
        }
        else {
            // no cb -> simple effect
            getter = () => {
                if (instance && instance._isDestroyed) {
                    return;
                }
                if (cleanup) {
                    cleanup();
                }
                return call(source, WATCHER, [onCleanup]);
            };
        }
    }
    else {
        getter = noop;
        warnInvalidSource(source);
    }
    if (cb && deep) {
        const baseGetter = getter;
        getter = () => traverse(baseGetter());
    }
    let cleanup;
    let onCleanup = (fn) => {
        cleanup = watcher.onStop = () => {
            call(fn, WATCHER_CLEANUP);
        };
    };
    // in SSR there is no need to setup an actual effect, and it should be noop
    // unless it's eager
    if (isServerRendering()) {
        // we will also not call the invalidate callback (+ runner is not set up)
        onCleanup = noop;
        if (!cb) {
            getter();
        }
        else if (immediate) {
            call(cb, WATCHER_CB, [
                getter(),
                isMultiSource ? [] : undefined,
                onCleanup
            ]);
        }
        return noop;
    }
    const watcher = new Watcher(currentInstance, getter, noop, {
        lazy: true
    });
    watcher.noRecurse = !cb;
    let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
    // overwrite default run
    watcher.run = () => {
        if (!watcher.active) {
            return;
        }
        if (cb) {
            // watch(source, cb)
            const newValue = watcher.get();
            if (deep ||
                forceTrigger ||
                (isMultiSource
                    ? newValue.some((v, i) => hasChanged(v, oldValue[i]))
                    : hasChanged(newValue, oldValue))) {
                // cleanup before running cb again
                if (cleanup) {
                    cleanup();
                }
                call(cb, WATCHER_CB, [
                    newValue,
                    // pass undefined as the old value when it's changed for the first time
                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
                    onCleanup
                ]);
                oldValue = newValue;
            }
        }
        else {
            // watchEffect
            watcher.get();
        }
    };
    if (flush === 'sync') {
        watcher.update = watcher.run;
    }
    else if (flush === 'post') {
        watcher.post = true;
        watcher.update = () => queueWatcher(watcher);
    }
    else {
        // pre
        watcher.update = () => {
            if (instance && instance === currentInstance && !instance._isMounted) {
                // pre-watcher triggered before
                const buffer = instance._preWatchers || (instance._preWatchers = []);
                if (buffer.indexOf(watcher) < 0)
                    buffer.push(watcher);
            }
            else {
                queueWatcher(watcher);
            }
        };
    }
    {
        watcher.onTrack = onTrack;
        watcher.onTrigger = onTrigger;
    }
    // initial run
    if (cb) {
        if (immediate) {
            watcher.run();
        }
        else {
            oldValue = watcher.get();
        }
    }
    else if (flush === 'post' && instance) {
        instance.$once('hook:mounted', () => watcher.get());
    }
    else {
        watcher.get();
    }
    return () => {
        watcher.teardown();
    };
}

let activeEffectScope;
class EffectScope {
    constructor(detached = false) {
        this.detached = detached;
        /**
         * @internal
         */
        this.active = true;
        /**
         * @internal
         */
        this.effects = [];
        /**
         * @internal
         */
        this.cleanups = [];
        this.parent = activeEffectScope;
        if (!detached && activeEffectScope) {
            this.index =
                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
        }
    }
    run(fn) {
        if (this.active) {
            const currentEffectScope = activeEffectScope;
            try {
                activeEffectScope = this;
                return fn();
            }
            finally {
                activeEffectScope = currentEffectScope;
            }
        }
        else {
            warn(`cannot run an inactive effect scope.`);
        }
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    on() {
        activeEffectScope = this;
    }
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    off() {
        activeEffectScope = this.parent;
    }
    stop(fromParent) {
        if (this.active) {
            let i, l;
            for (i = 0, l = this.effects.length; i < l; i++) {
                this.effects[i].teardown();
            }
            for (i = 0, l = this.cleanups.length; i < l; i++) {
                this.cleanups[i]();
            }
            if (this.scopes) {
                for (i = 0, l = this.scopes.length; i < l; i++) {
                    this.scopes[i].stop(true);
                }
            }
            // nested scope, dereference from parent to avoid memory leaks
            if (!this.detached && this.parent && !fromParent) {
                // optimized O(1) removal
                const last = this.parent.scopes.pop();
                if (last && last !== this) {
                    this.parent.scopes[this.index] = last;
                    last.index = this.index;
                }
            }
            this.parent = undefined;
            this.active = false;
        }
    }
}
function effectScope(detached) {
    return new EffectScope(detached);
}
/**
 * @internal
 */
function recordEffectScope(effect, scope = activeEffectScope) {
    if (scope && scope.active) {
        scope.effects.push(effect);
    }
}
function getCurrentScope() {
    return activeEffectScope;
}
function onScopeDispose(fn) {
    if (activeEffectScope) {
        activeEffectScope.cleanups.push(fn);
    }
    else {
        warn(`onScopeDispose() is called when there is no active effect scope` +
            ` to be associated with.`);
    }
}

function provide(key, value) {
    if (!currentInstance) {
        {
            warn(`provide() can only be used inside setup().`);
        }
    }
    else {
        // TS doesn't allow symbol as index type
        resolveProvided(currentInstance)[key] = value;
    }
}
function resolveProvided(vm) {
    // by default an instance inherits its parent's provides object
    // but when it needs to provide values of its own, it creates its
    // own provides object using parent provides object as prototype.
    // this way in `inject` we can simply look up injections from direct
    // parent and let the prototype chain do the work.
    const existing = vm._provided;
    const parentProvides = vm.$parent && vm.$parent._provided;
    if (parentProvides === existing) {
        return (vm._provided = Object.create(parentProvides));
    }
    else {
        return existing;
    }
}
function inject(key, defaultValue, treatDefaultAsFactory = false) {
    // fallback to `currentRenderingInstance` so that this can be called in
    // a functional component
    const instance = currentInstance;
    if (instance) {
        // #2400
        // to support `app.use` plugins,
        // fallback to appContext's `provides` if the instance is at root
        const provides = instance.$parent && instance.$parent._provided;
        if (provides && key in provides) {
            // TS doesn't allow symbol as index type
            return provides[key];
        }
        else if (arguments.length > 1) {
            return treatDefaultAsFactory && isFunction(defaultValue)
                ? defaultValue.call(instance)
                : defaultValue;
        }
        else {
            warn(`injection "${String(key)}" not found.`);
        }
    }
    else {
        warn(`inject() can only be used inside setup() or functional components.`);
    }
}

const normalizeEvent = cached((name) => {
    const passive = name.charAt(0) === '&';
    name = passive ? name.slice(1) : name;
    const once = name.charAt(0) === '~'; // Prefixed last, checked first
    name = once ? name.slice(1) : name;
    const capture = name.charAt(0) === '!';
    name = capture ? name.slice(1) : name;
    return {
        name,
        once,
        capture,
        passive
    };
});
function createFnInvoker(fns, vm) {
    function invoker() {
        const fns = invoker.fns;
        if (isArray(fns)) {
            const cloned = fns.slice();
            for (let i = 0; i < cloned.length; i++) {
                invokeWithErrorHandling(cloned[i], null, arguments, vm, `v-on handler`);
            }
        }
        else {
            // return handler return value for single handlers
            return invokeWithErrorHandling(fns, null, arguments, vm, `v-on handler`);
        }
    }
    invoker.fns = fns;
    return invoker;
}
function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
    let name, cur, old, event;
    for (name in on) {
        cur = on[name];
        old = oldOn[name];
        event = normalizeEvent(name);
        if (isUndef(cur)) {
            warn(`Invalid handler for event "${event.name}": got ` + String(cur), vm);
        }
        else if (isUndef(old)) {
            if (isUndef(cur.fns)) {
                cur = on[name] = createFnInvoker(cur, vm);
            }
            if (isTrue(event.once)) {
                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
            }
            add(event.name, cur, event.capture, event.passive, event.params);
        }
        else if (cur !== old) {
            old.fns = cur;
            on[name] = old;
        }
    }
    for (name in oldOn) {
        if (isUndef(on[name])) {
            event = normalizeEvent(name);
            remove(event.name, oldOn[name], event.capture);
        }
    }
}

function mergeVNodeHook(def, hookKey, hook) {
    if (def instanceof VNode) {
        def = def.data.hook || (def.data.hook = {});
    }
    let invoker;
    const oldHook = def[hookKey];
    function wrappedHook() {
        hook.apply(this, arguments);
        // important: remove merged hook to ensure it's called only once
        // and prevent memory leak
        remove$2(invoker.fns, wrappedHook);
    }
    if (isUndef(oldHook)) {
        // no existing hook
        invoker = createFnInvoker([wrappedHook]);
    }
    else {
        /* istanbul ignore if */
        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
            // already a merged invoker
            invoker = oldHook;
            invoker.fns.push(wrappedHook);
        }
        else {
            // existing plain hook
            invoker = createFnInvoker([oldHook, wrappedHook]);
        }
    }
    invoker.merged = true;
    def[hookKey] = invoker;
}

function extractPropsFromVNodeData(data, Ctor, tag) {
    // we are only extracting raw values here.
    // validation and default values are handled in the child
    // component itself.
    const propOptions = Ctor.options.props;
    if (isUndef(propOptions)) {
        return;
    }
    const res = {};
    const { attrs, props } = data;
    if (isDef(attrs) || isDef(props)) {
        for (const key in propOptions) {
            const altKey = hyphenate(key);
            {
                const keyInLowerCase = key.toLowerCase();
                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
                    tip(`Prop "${keyInLowerCase}" is passed to component ` +
                        `${formatComponentName(
                        // @ts-expect-error tag is string
                        tag || Ctor)}, but the declared prop name is` +
                        ` "${key}". ` +
                        `Note that HTML attributes are case-insensitive and camelCased ` +
                        `props need to use their kebab-case equivalents when using in-DOM ` +
                        `templates. You should probably use "${altKey}" instead of "${key}".`);
                }
            }
            checkProp(res, props, key, altKey, true) ||
                checkProp(res, attrs, key, altKey, false);
        }
    }
    return res;
}
function checkProp(res, hash, key, altKey, preserve) {
    if (isDef(hash)) {
        if (hasOwn(hash, key)) {
            res[key] = hash[key];
            if (!preserve) {
                delete hash[key];
            }
            return true;
        }
        else if (hasOwn(hash, altKey)) {
            res[key] = hash[altKey];
            if (!preserve) {
                delete hash[altKey];
            }
            return true;
        }
    }
    return false;
}

// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren(children) {
    for (let i = 0; i < children.length; i++) {
        if (isArray(children[i])) {
            return Array.prototype.concat.apply([], children);
        }
    }
    return children;
}
// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren(children) {
    return isPrimitive(children)
        ? [createTextVNode(children)]
        : isArray(children)
            ? normalizeArrayChildren(children)
            : undefined;
}
function isTextNode(node) {
    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
}
function normalizeArrayChildren(children, nestedIndex) {
    const res = [];
    let i, c, lastIndex, last;
    for (i = 0; i < children.length; i++) {
        c = children[i];
        if (isUndef(c) || typeof c === 'boolean')
            continue;
        lastIndex = res.length - 1;
        last = res[lastIndex];
        //  nested
        if (isArray(c)) {
            if (c.length > 0) {
                c = normalizeArrayChildren(c, `${nestedIndex || ''}_${i}`);
                // merge adjacent text nodes
                if (isTextNode(c[0]) && isTextNode(last)) {
                    res[lastIndex] = createTextVNode(last.text + c[0].text);
                    c.shift();
                }
                res.push.apply(res, c);
            }
        }
        else if (isPrimitive(c)) {
            if (isTextNode(last)) {
                // merge adjacent text nodes
                // this is necessary for SSR hydration because text nodes are
                // essentially merged when rendered to HTML strings
                res[lastIndex] = createTextVNode(last.text + c);
            }
            else if (c !== '') {
                // convert primitive to vnode
                res.push(createTextVNode(c));
            }
        }
        else {
            if (isTextNode(c) && isTextNode(last)) {
                // merge adjacent text nodes
                res[lastIndex] = createTextVNode(last.text + c.text);
            }
            else {
                // default key for nested array children (likely generated by v-for)
                if (isTrue(children._isVList) &&
                    isDef(c.tag) &&
                    isUndef(c.key) &&
                    isDef(nestedIndex)) {
                    c.key = `__vlist${nestedIndex}_${i}__`;
                }
                res.push(c);
            }
        }
    }
    return res;
}

/**
 * Runtime helper for rendering v-for lists.
 */
function renderList(val, render) {
    let ret = null, i, l, keys, key;
    if (isArray(val) || typeof val === 'string') {
        ret = new Array(val.length);
        for (i = 0, l = val.length; i < l; i++) {
            ret[i] = render(val[i], i);
        }
    }
    else if (typeof val === 'number') {
        ret = new Array(val);
        for (i = 0; i < val; i++) {
            ret[i] = render(i + 1, i);
        }
    }
    else if (isObject(val)) {
        if (hasSymbol && val[Symbol.iterator]) {
            ret = [];
            const iterator = val[Symbol.iterator]();
            let result = iterator.next();
            while (!result.done) {
                ret.push(render(result.value, ret.length));
                result = iterator.next();
            }
        }
        else {
            keys = Object.keys(val);
            ret = new Array(keys.length);
            for (i = 0, l = keys.length; i < l; i++) {
                key = keys[i];
                ret[i] = render(val[key], key, i);
            }
        }
    }
    if (!isDef(ret)) {
        ret = [];
    }
    ret._isVList = true;
    return ret;
}

/**
 * Runtime helper for rendering <slot>
 */
function renderSlot(name, fallbackRender, props, bindObject) {
    const scopedSlotFn = this.$scopedSlots[name];
    let nodes;
    if (scopedSlotFn) {
        // scoped slot
        props = props || {};
        if (bindObject) {
            if (!isObject(bindObject)) {
                warn('slot v-bind without argument expects an Object', this);
            }
            props = extend(extend({}, bindObject), props);
        }
        nodes =
            scopedSlotFn(props) ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    else {
        nodes =
            this.$slots[name] ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    const target = props && props.slot;
    if (target) {
        return this.$createElement('template', { slot: target }, nodes);
    }
    else {
        return nodes;
    }
}

/**
 * Runtime helper for resolving filters
 */
function resolveFilter(id) {
    return resolveAsset(this.$options, 'filters', id, true) || identity;
}

function isKeyNotMatch(expect, actual) {
    if (isArray(expect)) {
        return expect.indexOf(actual) === -1;
    }
    else {
        return expect !== actual;
    }
}
/**
 * Runtime helper for checking keyCodes from config.
 * exposed as Vue.prototype._k
 * passing in eventKeyName as last argument separately for backwards compat
 */
function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
    const mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
        return isKeyNotMatch(builtInKeyName, eventKeyName);
    }
    else if (mappedKeyCode) {
        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
    }
    else if (eventKeyName) {
        return hyphenate(eventKeyName) !== key;
    }
    return eventKeyCode === undefined;
}

/**
 * Runtime helper for merging v-bind="object" into a VNode's data.
 */
function bindObjectProps(data, tag, value, asProp, isSync) {
    if (value) {
        if (!isObject(value)) {
            warn('v-bind without argument expects an Object or Array value', this);
        }
        else {
            if (isArray(value)) {
                value = toObject(value);
            }
            let hash;
            for (const key in value) {
                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
                    hash = data;
                }
                else {
                    const type = data.attrs && data.attrs.type;
                    hash =
                        asProp || config.mustUseProp(tag, type, key)
                            ? data.domProps || (data.domProps = {})
                            : data.attrs || (data.attrs = {});
                }
                const camelizedKey = camelize(key);
                const hyphenatedKey = hyphenate(key);
                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
                    hash[key] = value[key];
                    if (isSync) {
                        const on = data.on || (data.on = {});
                        on[`update:${key}`] = function ($event) {
                            value[key] = $event;
                        };
                    }
                }
            }
        }
    }
    return data;
}

/**
 * Runtime helper for rendering static trees.
 */
function renderStatic(index, isInFor) {
    const cached = this._staticTrees || (this._staticTrees = []);
    let tree = cached[index];
    // if has already-rendered static tree and not inside v-for,
    // we can reuse the same tree.
    if (tree && !isInFor) {
        return tree;
    }
    // otherwise, render a fresh tree.
    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
    );
    markStatic(tree, `__static__${index}`, false);
    return tree;
}
/**
 * Runtime helper for v-once.
 * Effectively it means marking the node as static with a unique key.
 */
function markOnce(tree, index, key) {
    markStatic(tree, `__once__${index}${key ? `_${key}` : ``}`, true);
    return tree;
}
function markStatic(tree, key, isOnce) {
    if (isArray(tree)) {
        for (let i = 0; i < tree.length; i++) {
            if (tree[i] && typeof tree[i] !== 'string') {
                markStaticNode(tree[i], `${key}_${i}`, isOnce);
            }
        }
    }
    else {
        markStaticNode(tree, key, isOnce);
    }
}
function markStaticNode(node, key, isOnce) {
    node.isStatic = true;
    node.key = key;
    node.isOnce = isOnce;
}

function bindObjectListeners(data, value) {
    if (value) {
        if (!isPlainObject(value)) {
            warn('v-on without argument expects an Object value', this);
        }
        else {
            const on = (data.on = data.on ? extend({}, data.on) : {});
            for (const key in value) {
                const existing = on[key];
                const ours = value[key];
                on[key] = existing ? [].concat(existing, ours) : ours;
            }
        }
    }
    return data;
}

function resolveScopedSlots(fns, res, 
// the following are added in 2.6
hasDynamicKeys, contentHashKey) {
    res = res || { $stable: !hasDynamicKeys };
    for (let i = 0; i < fns.length; i++) {
        const slot = fns[i];
        if (isArray(slot)) {
            resolveScopedSlots(slot, res, hasDynamicKeys);
        }
        else if (slot) {
            // marker for reverse proxying v-slot without scope on this.$slots
            // @ts-expect-error
            if (slot.proxy) {
                // @ts-expect-error
                slot.fn.proxy = true;
            }
            res[slot.key] = slot.fn;
        }
    }
    if (contentHashKey) {
        res.$key = contentHashKey;
    }
    return res;
}

// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
function bindDynamicKeys(baseObj, values) {
    for (let i = 0; i < values.length; i += 2) {
        const key = values[i];
        if (typeof key === 'string' && key) {
            baseObj[values[i]] = values[i + 1];
        }
        else if (key !== '' && key !== null) {
            // null is a special value for explicitly removing a binding
            warn(`Invalid value for dynamic directive argument (expected string or null): ${key}`, this);
        }
    }
    return baseObj;
}
// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
function prependModifier(value, symbol) {
    return typeof value === 'string' ? symbol + value : value;
}

function installRenderHelpers(target) {
    target._o = markOnce;
    target._n = toNumber;
    target._s = toString;
    target._l = renderList;
    target._t = renderSlot;
    target._q = looseEqual;
    target._i = looseIndexOf;
    target._m = renderStatic;
    target._f = resolveFilter;
    target._k = checkKeyCodes;
    target._b = bindObjectProps;
    target._v = createTextVNode;
    target._e = createEmptyVNode;
    target._u = resolveScopedSlots;
    target._g = bindObjectListeners;
    target._d = bindDynamicKeys;
    target._p = prependModifier;
}

/**
 * Runtime helper for resolving raw children VNodes into a slot object.
 */
function resolveSlots(children, context) {
    if (!children || !children.length) {
        return {};
    }
    const slots = {};
    for (let i = 0, l = children.length; i < l; i++) {
        const child = children[i];
        const data = child.data;
        // remove slot attribute if the node is resolved as a Vue slot node
        if (data && data.attrs && data.attrs.slot) {
            delete data.attrs.slot;
        }
        // named slots should only be respected if the vnode was rendered in the
        // same context.
        if ((child.context === context || child.fnContext === context) &&
            data &&
            data.slot != null) {
            const name = data.slot;
            const slot = slots[name] || (slots[name] = []);
            if (child.tag === 'template') {
                slot.push.apply(slot, child.children || []);
            }
            else {
                slot.push(child);
            }
        }
        else {
            (slots.default || (slots.default = [])).push(child);
        }
    }
    // ignore slots that contains only whitespace
    for (const name in slots) {
        if (slots[name].every(isWhitespace)) {
            delete slots[name];
        }
    }
    return slots;
}
function isWhitespace(node) {
    return (node.isComment && !node.asyncFactory) || node.text === ' ';
}

function isAsyncPlaceholder(node) {
    // @ts-expect-error not really boolean type
    return node.isComment && node.asyncFactory;
}

function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
    let res;
    const hasNormalSlots = Object.keys(normalSlots).length > 0;
    const isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
    const key = scopedSlots && scopedSlots.$key;
    if (!scopedSlots) {
        res = {};
    }
    else if (scopedSlots._normalized) {
        // fast path 1: child component re-render only, parent did not change
        return scopedSlots._normalized;
    }
    else if (isStable &&
        prevScopedSlots &&
        prevScopedSlots !== emptyObject &&
        key === prevScopedSlots.$key &&
        !hasNormalSlots &&
        !prevScopedSlots.$hasNormal) {
        // fast path 2: stable scoped slots w/ no normal slots to proxy,
        // only need to normalize once
        return prevScopedSlots;
    }
    else {
        res = {};
        for (const key in scopedSlots) {
            if (scopedSlots[key] && key[0] !== '$') {
                res[key] = normalizeScopedSlot(ownerVm, normalSlots, key, scopedSlots[key]);
            }
        }
    }
    // expose normal slots on scopedSlots
    for (const key in normalSlots) {
        if (!(key in res)) {
            res[key] = proxyNormalSlot(normalSlots, key);
        }
    }
    // avoriaz seems to mock a non-extensible $scopedSlots object
    // and when that is passed down this would cause an error
    if (scopedSlots && Object.isExtensible(scopedSlots)) {
        scopedSlots._normalized = res;
    }
    def(res, '$stable', isStable);
    def(res, '$key', key);
    def(res, '$hasNormal', hasNormalSlots);
    return res;
}
function normalizeScopedSlot(vm, normalSlots, key, fn) {
    const normalized = function () {
        const cur = currentInstance;
        setCurrentInstance(vm);
        let res = arguments.length ? fn.apply(null, arguments) : fn({});
        res =
            res && typeof res === 'object' && !isArray(res)
                ? [res] // single vnode
                : normalizeChildren(res);
        const vnode = res && res[0];
        setCurrentInstance(cur);
        return res &&
            (!vnode ||
                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
            ? undefined
            : res;
    };
    // this is a slot using the new v-slot syntax without scope. although it is
    // compiled as a scoped slot, render fn users would expect it to be present
    // on this.$slots because the usage is semantically a normal slot.
    if (fn.proxy) {
        Object.defineProperty(normalSlots, key, {
            get: normalized,
            enumerable: true,
            configurable: true
        });
    }
    return normalized;
}
function proxyNormalSlot(slots, key) {
    return () => slots[key];
}

function initSetup(vm) {
    const options = vm.$options;
    const setup = options.setup;
    if (setup) {
        const ctx = (vm._setupContext = createSetupContext(vm));
        setCurrentInstance(vm);
        pushTarget();
        const setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, `setup`);
        popTarget();
        setCurrentInstance();
        if (isFunction(setupResult)) {
            // render function
            // @ts-ignore
            options.render = setupResult;
        }
        else if (isObject(setupResult)) {
            // bindings
            if (setupResult instanceof VNode) {
                warn(`setup() should not return VNodes directly - ` +
                    `return a render function instead.`);
            }
            vm._setupState = setupResult;
            // __sfc indicates compiled bindings from <script setup>
            if (!setupResult.__sfc) {
                for (const key in setupResult) {
                    if (!isReserved(key)) {
                        proxyWithRefUnwrap(vm, setupResult, key);
                    }
                    else {
                        warn(`Avoid using variables that start with _ or $ in setup().`);
                    }
                }
            }
            else {
                // exposed for compiled render fn
                const proxy = (vm._setupProxy = {});
                for (const key in setupResult) {
                    if (key !== '__sfc') {
                        proxyWithRefUnwrap(proxy, setupResult, key);
                    }
                }
            }
        }
        else if (setupResult !== undefined) {
            warn(`setup() should return an object. Received: ${setupResult === null ? 'null' : typeof setupResult}`);
        }
    }
}
function createSetupContext(vm) {
    let exposeCalled = false;
    return {
        get attrs() {
            if (!vm._attrsProxy) {
                const proxy = (vm._attrsProxy = {});
                def(proxy, '_v_attr_proxy', true);
                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
            }
            return vm._attrsProxy;
        },
        get listeners() {
            if (!vm._listenersProxy) {
                const proxy = (vm._listenersProxy = {});
                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
            }
            return vm._listenersProxy;
        },
        get slots() {
            return initSlotsProxy(vm);
        },
        emit: bind(vm.$emit, vm),
        expose(exposed) {
            {
                if (exposeCalled) {
                    warn(`expose() should be called only once per setup().`, vm);
                }
                exposeCalled = true;
            }
            if (exposed) {
                Object.keys(exposed).forEach(key => proxyWithRefUnwrap(vm, exposed, key));
            }
        }
    };
}
function syncSetupProxy(to, from, prev, instance, type) {
    let changed = false;
    for (const key in from) {
        if (!(key in to)) {
            changed = true;
            defineProxyAttr(to, key, instance, type);
        }
        else if (from[key] !== prev[key]) {
            changed = true;
        }
    }
    for (const key in to) {
        if (!(key in from)) {
            changed = true;
            delete to[key];
        }
    }
    return changed;
}
function defineProxyAttr(proxy, key, instance, type) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get() {
            return instance[type][key];
        }
    });
}
function initSlotsProxy(vm) {
    if (!vm._slotsProxy) {
        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
    }
    return vm._slotsProxy;
}
function syncSetupSlots(to, from) {
    for (const key in from) {
        to[key] = from[key];
    }
    for (const key in to) {
        if (!(key in from)) {
            delete to[key];
        }
    }
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useSlots() {
    return getContext().slots;
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useAttrs() {
    return getContext().attrs;
}
/**
 * Vue 2 only
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useListeners() {
    return getContext().listeners;
}
function getContext() {
    if (!currentInstance) {
        warn(`useContext() called without active instance.`);
    }
    const vm = currentInstance;
    return vm._setupContext || (vm._setupContext = createSetupContext(vm));
}
/**
 * Runtime helper for merging default declarations. Imported by compiled code
 * only.
 * @internal
 */
function mergeDefaults(raw, defaults) {
    const props = isArray(raw)
        ? raw.reduce((normalized, p) => ((normalized[p] = {}), normalized), {})
        : raw;
    for (const key in defaults) {
        const opt = props[key];
        if (opt) {
            if (isArray(opt) || isFunction(opt)) {
                props[key] = { type: opt, default: defaults[key] };
            }
            else {
                opt.default = defaults[key];
            }
        }
        else if (opt === null) {
            props[key] = { default: defaults[key] };
        }
        else {
            warn(`props default key "${key}" has no corresponding declaration.`);
        }
    }
    return props;
}

function initRender(vm) {
    vm._vnode = null; // the root of the child tree
    vm._staticTrees = null; // v-once cached trees
    const options = vm.$options;
    const parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
    const renderContext = parentVnode && parentVnode.context;
    vm.$slots = resolveSlots(options._renderChildren, renderContext);
    vm.$scopedSlots = parentVnode
        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
        : emptyObject;
    // bind the createElement fn to this instance
    // so that we get proper render context inside it.
    // args order: tag, data, children, normalizationType, alwaysNormalize
    // internal version is used by render functions compiled from templates
    // @ts-expect-error
    vm._c = (a, b, c, d) => createElement$1(vm, a, b, c, d, false);
    // normalization is always applied for the public version, used in
    // user-written render functions.
    // @ts-expect-error
    vm.$createElement = (a, b, c, d) => createElement$1(vm, a, b, c, d, true);
    // $attrs & $listeners are exposed for easier HOC creation.
    // they need to be reactive so that HOCs using them are always updated
    const parentData = parentVnode && parentVnode.data;
    /* istanbul ignore else */
    {
        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, () => {
            !isUpdatingChildComponent && warn(`$attrs is readonly.`, vm);
        }, true);
        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, () => {
            !isUpdatingChildComponent && warn(`$listeners is readonly.`, vm);
        }, true);
    }
}
let currentRenderingInstance = null;
function renderMixin(Vue) {
    // install runtime convenience helpers
    installRenderHelpers(Vue.prototype);
    Vue.prototype.$nextTick = function (fn) {
        return nextTick(fn, this);
    };
    Vue.prototype._render = function () {
        const vm = this;
        const { render, _parentVnode } = vm.$options;
        if (_parentVnode && vm._isMounted) {
            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
            if (vm._slotsProxy) {
                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
            }
        }
        // set parent vnode. this allows render functions to have access
        // to the data on the placeholder node.
        vm.$vnode = _parentVnode;
        // render self
        let vnode;
        try {
            // There's no need to maintain a stack because all render fns are called
            // separately from one another. Nested component's render fns are called
            // when parent component is patched.
            setCurrentInstance(vm);
            currentRenderingInstance = vm;
            vnode = render.call(vm._renderProxy, vm.$createElement);
        }
        catch (e) {
            handleError(e, vm, `render`);
            // return error render result,
            // or previous vnode to prevent render error causing blank component
            /* istanbul ignore else */
            if (vm.$options.renderError) {
                try {
                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
                }
                catch (e) {
                    handleError(e, vm, `renderError`);
                    vnode = vm._vnode;
                }
            }
            else {
                vnode = vm._vnode;
            }
        }
        finally {
            currentRenderingInstance = null;
            setCurrentInstance();
        }
        // if the returned array contains only a single node, allow it
        if (isArray(vnode) && vnode.length === 1) {
            vnode = vnode[0];
        }
        // return empty vnode in case the render function errored out
        if (!(vnode instanceof VNode)) {
            if (isArray(vnode)) {
                warn('Multiple root nodes returned from render function. Render function ' +
                    'should return a single root node.', vm);
            }
            vnode = createEmptyVNode();
        }
        // set parent
        vnode.parent = _parentVnode;
        return vnode;
    };
}

function ensureCtor(comp, base) {
    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
        comp = comp.default;
    }
    return isObject(comp) ? base.extend(comp) : comp;
}
function createAsyncPlaceholder(factory, data, context, children, tag) {
    const node = createEmptyVNode();
    node.asyncFactory = factory;
    node.asyncMeta = { data, context, children, tag };
    return node;
}
function resolveAsyncComponent(factory, baseCtor) {
    if (isTrue(factory.error) && isDef(factory.errorComp)) {
        return factory.errorComp;
    }
    if (isDef(factory.resolved)) {
        return factory.resolved;
    }
    const owner = currentRenderingInstance;
    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
        // already pending
        factory.owners.push(owner);
    }
    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
        return factory.loadingComp;
    }
    if (owner && !isDef(factory.owners)) {
        const owners = (factory.owners = [owner]);
        let sync = true;
        let timerLoading = null;
        let timerTimeout = null;
        owner.$on('hook:destroyed', () => remove$2(owners, owner));
        const forceRender = (renderCompleted) => {
            for (let i = 0, l = owners.length; i < l; i++) {
                owners[i].$forceUpdate();
            }
            if (renderCompleted) {
                owners.length = 0;
                if (timerLoading !== null) {
                    clearTimeout(timerLoading);
                    timerLoading = null;
                }
                if (timerTimeout !== null) {
                    clearTimeout(timerTimeout);
                    timerTimeout = null;
                }
            }
        };
        const resolve = once((res) => {
            // cache resolved
            factory.resolved = ensureCtor(res, baseCtor);
            // invoke callbacks only if this is not a synchronous resolve
            // (async resolves are shimmed as synchronous during SSR)
            if (!sync) {
                forceRender(true);
            }
            else {
                owners.length = 0;
            }
        });
        const reject = once(reason => {
            warn(`Failed to resolve async component: ${String(factory)}` +
                    (reason ? `\nReason: ${reason}` : ''));
            if (isDef(factory.errorComp)) {
                factory.error = true;
                forceRender(true);
            }
        });
        const res = factory(resolve, reject);
        if (isObject(res)) {
            if (isPromise(res)) {
                // () => Promise
                if (isUndef(factory.resolved)) {
                    res.then(resolve, reject);
                }
            }
            else if (isPromise(res.component)) {
                res.component.then(resolve, reject);
                if (isDef(res.error)) {
                    factory.errorComp = ensureCtor(res.error, baseCtor);
                }
                if (isDef(res.loading)) {
                    factory.loadingComp = ensureCtor(res.loading, baseCtor);
                    if (res.delay === 0) {
                        factory.loading = true;
                    }
                    else {
                        // @ts-expect-error NodeJS timeout type
                        timerLoading = setTimeout(() => {
                            timerLoading = null;
                            if (isUndef(factory.resolved) && isUndef(factory.error)) {
                                factory.loading = true;
                                forceRender(false);
                            }
                        }, res.delay || 200);
                    }
                }
                if (isDef(res.timeout)) {
                    // @ts-expect-error NodeJS timeout type
                    timerTimeout = setTimeout(() => {
                        timerTimeout = null;
                        if (isUndef(factory.resolved)) {
                            reject(`timeout (${res.timeout}ms)` );
                        }
                    }, res.timeout);
                }
            }
        }
        sync = false;
        // return in case resolved synchronously
        return factory.loading ? factory.loadingComp : factory.resolved;
    }
}

function getFirstComponentChild(children) {
    if (isArray(children)) {
        for (let i = 0; i < children.length; i++) {
            const c = children[i];
            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
                return c;
            }
        }
    }
}

const SIMPLE_NORMALIZE = 1;
const ALWAYS_NORMALIZE = 2;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
    if (isArray(data) || isPrimitive(data)) {
        normalizationType = children;
        children = data;
        data = undefined;
    }
    if (isTrue(alwaysNormalize)) {
        normalizationType = ALWAYS_NORMALIZE;
    }
    return _createElement(context, tag, data, children, normalizationType);
}
function _createElement(context, tag, data, children, normalizationType) {
    if (isDef(data) && isDef(data.__ob__)) {
        warn(`Avoid using observed data object as vnode data: ${JSON.stringify(data)}\n` + 'Always create fresh vnode data objects in each render!', context);
        return createEmptyVNode();
    }
    // object syntax in v-bind
    if (isDef(data) && isDef(data.is)) {
        tag = data.is;
    }
    if (!tag) {
        // in case of component :is set to falsy value
        return createEmptyVNode();
    }
    // warn against non-primitive key
    if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
        warn('Avoid using non-primitive value as key, ' +
            'use string/number value instead.', context);
    }
    // support single function children as default scoped slot
    if (isArray(children) && isFunction(children[0])) {
        data = data || {};
        data.scopedSlots = { default: children[0] };
        children.length = 0;
    }
    if (normalizationType === ALWAYS_NORMALIZE) {
        children = normalizeChildren(children);
    }
    else if (normalizationType === SIMPLE_NORMALIZE) {
        children = simpleNormalizeChildren(children);
    }
    let vnode, ns;
    if (typeof tag === 'string') {
        let Ctor;
        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
        if (config.isReservedTag(tag)) {
            // platform built-in elements
            if (isDef(data) &&
                isDef(data.nativeOn) &&
                data.tag !== 'component') {
                warn(`The .native modifier for v-on is only valid on components but it was used on <${tag}>.`, context);
            }
            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
        }
        else if ((!data || !data.pre) &&
            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
            // component
            vnode = createComponent(Ctor, data, context, children, tag);
        }
        else {
            // unknown or unlisted namespaced elements
            // check at runtime because it may get assigned a namespace when its
            // parent normalizes children
            vnode = new VNode(tag, data, children, undefined, undefined, context);
        }
    }
    else {
        // direct component options / constructor
        vnode = createComponent(tag, data, context, children);
    }
    if (isArray(vnode)) {
        return vnode;
    }
    else if (isDef(vnode)) {
        if (isDef(ns))
            applyNS(vnode, ns);
        if (isDef(data))
            registerDeepBindings(data);
        return vnode;
    }
    else {
        return createEmptyVNode();
    }
}
function applyNS(vnode, ns, force) {
    vnode.ns = ns;
    if (vnode.tag === 'foreignObject') {
        // use default namespace inside foreignObject
        ns = undefined;
        force = true;
    }
    if (isDef(vnode.children)) {
        for (let i = 0, l = vnode.children.length; i < l; i++) {
            const child = vnode.children[i];
            if (isDef(child.tag) &&
                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
                applyNS(child, ns, force);
            }
        }
    }
}
// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings(data) {
    if (isObject(data.style)) {
        traverse(data.style);
    }
    if (isObject(data.class)) {
        traverse(data.class);
    }
}

/**
 * @internal this function needs manual public type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function h(type, props, children) {
    if (!currentInstance) {
        warn(`globally imported h() can only be invoked when there is an active ` +
                `component instance, e.g. synchronously in a component's render or setup function.`);
    }
    return createElement$1(currentInstance, type, props, children, 2, true);
}

function handleError(err, vm, info) {
    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
    // See: https://github.com/vuejs/vuex/issues/1505
    pushTarget();
    try {
        if (vm) {
            let cur = vm;
            while ((cur = cur.$parent)) {
                const hooks = cur.$options.errorCaptured;
                if (hooks) {
                    for (let i = 0; i < hooks.length; i++) {
                        try {
                            const capture = hooks[i].call(cur, err, vm, info) === false;
                            if (capture)
                                return;
                        }
                        catch (e) {
                            globalHandleError(e, cur, 'errorCaptured hook');
                        }
                    }
                }
            }
        }
        globalHandleError(err, vm, info);
    }
    finally {
        popTarget();
    }
}
function invokeWithErrorHandling(handler, context, args, vm, info) {
    let res;
    try {
        res = args ? handler.apply(context, args) : handler.call(context);
        if (res && !res._isVue && isPromise(res) && !res._handled) {
            res.catch(e => handleError(e, vm, info + ` (Promise/async)`));
            res._handled = true;
        }
    }
    catch (e) {
        handleError(e, vm, info);
    }
    return res;
}
function globalHandleError(err, vm, info) {
    if (config.errorHandler) {
        try {
            return config.errorHandler.call(null, err, vm, info);
        }
        catch (e) {
            // if the user intentionally throws the original error in the handler,
            // do not log it twice
            if (e !== err) {
                logError(e, null, 'config.errorHandler');
            }
        }
    }
    logError(err, vm, info);
}
function logError(err, vm, info) {
    {
        warn(`Error in ${info}: "${err.toString()}"`, vm);
    }
    /* istanbul ignore else */
    if (inBrowser && typeof console !== 'undefined') {
        console.error(err);
    }
    else {
        throw err;
    }
}

/* globals MutationObserver */
let isUsingMicroTask = false;
const callbacks = [];
let pending = false;
function flushCallbacks() {
    pending = false;
    const copies = callbacks.slice(0);
    callbacks.length = 0;
    for (let i = 0; i < copies.length; i++) {
        copies[i]();
    }
}
// Here we have async deferring wrappers using microtasks.
// In 2.5 we used (macro) tasks (in combination with microtasks).
// However, it has subtle problems when state is changed right before repaint
// (e.g. #6813, out-in transitions).
// Also, using (macro) tasks in event handler would cause some weird behaviors
// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
// So we now use microtasks everywhere, again.
// A major drawback of this tradeoff is that there are some scenarios
// where microtasks have too high a priority and fire in between supposedly
// sequential events (e.g. #4521, #6690, which have workarounds)
// or even between bubbling of the same event (#6566).
let timerFunc;
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
    const p = Promise.resolve();
    timerFunc = () => {
        p.then(flushCallbacks);
        // In problematic UIWebViews, Promise.then doesn't completely break, but
        // it can get stuck in a weird state where callbacks are pushed into the
        // microtask queue but the queue isn't being flushed, until the browser
        // needs to do some other work, e.g. handle a timer. Therefore we can
        // "force" the microtask queue to be flushed by adding an empty timer.
        if (isIOS)
            setTimeout(noop);
    };
    isUsingMicroTask = true;
}
else if (!isIE &&
    typeof MutationObserver !== 'undefined' &&
    (isNative(MutationObserver) ||
        // PhantomJS and iOS 7.x
        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
    // Use MutationObserver where native Promise is not available,
    // e.g. PhantomJS, iOS7, Android 4.4
    // (#6466 MutationObserver is unreliable in IE11)
    let counter = 1;
    const observer = new MutationObserver(flushCallbacks);
    const textNode = document.createTextNode(String(counter));
    observer.observe(textNode, {
        characterData: true
    });
    timerFunc = () => {
        counter = (counter + 1) % 2;
        textNode.data = String(counter);
    };
    isUsingMicroTask = true;
}
else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
    // Fallback to setImmediate.
    // Technically it leverages the (macro) task queue,
    // but it is still a better choice than setTimeout.
    timerFunc = () => {
        setImmediate(flushCallbacks);
    };
}
else {
    // Fallback to setTimeout.
    timerFunc = () => {
        setTimeout(flushCallbacks, 0);
    };
}
/**
 * @internal
 */
function nextTick(cb, ctx) {
    let _resolve;
    callbacks.push(() => {
        if (cb) {
            try {
                cb.call(ctx);
            }
            catch (e) {
                handleError(e, ctx, 'nextTick');
            }
        }
        else if (_resolve) {
            _resolve(ctx);
        }
    });
    if (!pending) {
        pending = true;
        timerFunc();
    }
    // $flow-disable-line
    if (!cb && typeof Promise !== 'undefined') {
        return new Promise(resolve => {
            _resolve = resolve;
        });
    }
}

function useCssModule(name = '$style') {
    /* istanbul ignore else */
    {
        if (!currentInstance) {
            warn(`useCssModule must be called inside setup()`);
            return emptyObject;
        }
        const mod = currentInstance[name];
        if (!mod) {
            warn(`Current instance does not have CSS module named "${name}".`);
            return emptyObject;
        }
        return mod;
    }
}

/**
 * Runtime helper for SFC's CSS variable injection feature.
 * @private
 */
function useCssVars(getter) {
    if (!inBrowser && !false)
        return;
    const instance = currentInstance;
    if (!instance) {
        warn(`useCssVars is called without current active component instance.`);
        return;
    }
    watchPostEffect(() => {
        const el = instance.$el;
        const vars = getter(instance, instance._setupProxy);
        if (el && el.nodeType === 1) {
            const style = el.style;
            for (const key in vars) {
                style.setProperty(`--${key}`, vars[key]);
            }
        }
    });
}

/**
 * v3-compatible async component API.
 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
 * because it relies on existing manual types
 */
function defineAsyncComponent(source) {
    if (isFunction(source)) {
        source = { loader: source };
    }
    const { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out
    suspensible = false, // in Vue 3 default is true
    onError: userOnError } = source;
    if (suspensible) {
        warn(`The suspensiblbe option for async components is not supported in Vue2. It is ignored.`);
    }
    let pendingRequest = null;
    let retries = 0;
    const retry = () => {
        retries++;
        pendingRequest = null;
        return load();
    };
    const load = () => {
        let thisRequest;
        return (pendingRequest ||
            (thisRequest = pendingRequest =
                loader()
                    .catch(err => {
                    err = err instanceof Error ? err : new Error(String(err));
                    if (userOnError) {
                        return new Promise((resolve, reject) => {
                            const userRetry = () => resolve(retry());
                            const userFail = () => reject(err);
                            userOnError(err, userRetry, userFail, retries + 1);
                        });
                    }
                    else {
                        throw err;
                    }
                })
                    .then((comp) => {
                    if (thisRequest !== pendingRequest && pendingRequest) {
                        return pendingRequest;
                    }
                    if (!comp) {
                        warn(`Async component loader resolved to undefined. ` +
                            `If you are using retry(), make sure to return its return value.`);
                    }
                    // interop module default
                    if (comp &&
                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
                        comp = comp.default;
                    }
                    if (comp && !isObject(comp) && !isFunction(comp)) {
                        throw new Error(`Invalid async component load result: ${comp}`);
                    }
                    return comp;
                })));
    };
    return () => {
        const component = load();
        return {
            component,
            delay,
            timeout,
            error: errorComponent,
            loading: loadingComponent
        };
    };
}

function createLifeCycle(hookName) {
    return (fn, target = currentInstance) => {
        if (!target) {
            warn(`${formatName(hookName)} is called when there is no active component instance to be ` +
                    `associated with. ` +
                    `Lifecycle injection APIs can only be used during execution of setup().`);
            return;
        }
        return injectHook(target, hookName, fn);
    };
}
function formatName(name) {
    if (name === 'beforeDestroy') {
        name = 'beforeUnmount';
    }
    else if (name === 'destroyed') {
        name = 'unmounted';
    }
    return `on${name[0].toUpperCase() + name.slice(1)}`;
}
function injectHook(instance, hookName, fn) {
    const options = instance.$options;
    options[hookName] = mergeLifecycleHook(options[hookName], fn);
}
const onBeforeMount = createLifeCycle('beforeMount');
const onMounted = createLifeCycle('mounted');
const onBeforeUpdate = createLifeCycle('beforeUpdate');
const onUpdated = createLifeCycle('updated');
const onBeforeUnmount = createLifeCycle('beforeDestroy');
const onUnmounted = createLifeCycle('destroyed');
const onActivated = createLifeCycle('activated');
const onDeactivated = createLifeCycle('deactivated');
const onServerPrefetch = createLifeCycle('serverPrefetch');
const onRenderTracked = createLifeCycle('renderTracked');
const onRenderTriggered = createLifeCycle('renderTriggered');
const injectErrorCapturedHook = createLifeCycle('errorCaptured');
function onErrorCaptured(hook, target = currentInstance) {
    injectErrorCapturedHook(hook, target);
}

/**
 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
 */
const version = '2.7.14';
/**
 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
 */
function defineComponent(options) {
    return options;
}

var vca = /*#__PURE__*/Object.freeze({
  __proto__: null,
  version: version,
  defineComponent: defineComponent,
  ref: ref$1,
  shallowRef: shallowRef,
  isRef: isRef,
  toRef: toRef,
  toRefs: toRefs,
  unref: unref,
  proxyRefs: proxyRefs,
  customRef: customRef,
  triggerRef: triggerRef,
  reactive: reactive,
  isReactive: isReactive,
  isReadonly: isReadonly,
  isShallow: isShallow,
  isProxy: isProxy,
  shallowReactive: shallowReactive,
  markRaw: markRaw,
  toRaw: toRaw,
  readonly: readonly,
  shallowReadonly: shallowReadonly,
  computed: computed,
  watch: watch,
  watchEffect: watchEffect,
  watchPostEffect: watchPostEffect,
  watchSyncEffect: watchSyncEffect,
  EffectScope: EffectScope,
  effectScope: effectScope,
  onScopeDispose: onScopeDispose,
  getCurrentScope: getCurrentScope,
  provide: provide,
  inject: inject,
  h: h,
  getCurrentInstance: getCurrentInstance,
  useSlots: useSlots,
  useAttrs: useAttrs,
  useListeners: useListeners,
  mergeDefaults: mergeDefaults,
  nextTick: nextTick,
  set: set,
  del: del,
  useCssModule: useCssModule,
  useCssVars: useCssVars,
  defineAsyncComponent: defineAsyncComponent,
  onBeforeMount: onBeforeMount,
  onMounted: onMounted,
  onBeforeUpdate: onBeforeUpdate,
  onUpdated: onUpdated,
  onBeforeUnmount: onBeforeUnmount,
  onUnmounted: onUnmounted,
  onActivated: onActivated,
  onDeactivated: onDeactivated,
  onServerPrefetch: onServerPrefetch,
  onRenderTracked: onRenderTracked,
  onRenderTriggered: onRenderTriggered,
  onErrorCaptured: onErrorCaptured
});

const seenObjects = new _Set();
/**
 * Recursively traverse an object to evoke all converted
 * getters, so that every nested property inside the object
 * is collected as a "deep" dependency.
 */
function traverse(val) {
    _traverse(val, seenObjects);
    seenObjects.clear();
    return val;
}
function _traverse(val, seen) {
    let i, keys;
    const isA = isArray(val);
    if ((!isA && !isObject(val)) ||
        val.__v_skip /* ReactiveFlags.SKIP */ ||
        Object.isFrozen(val) ||
        val instanceof VNode) {
        return;
    }
    if (val.__ob__) {
        const depId = val.__ob__.dep.id;
        if (seen.has(depId)) {
            return;
        }
        seen.add(depId);
    }
    if (isA) {
        i = val.length;
        while (i--)
            _traverse(val[i], seen);
    }
    else if (isRef(val)) {
        _traverse(val.value, seen);
    }
    else {
        keys = Object.keys(val);
        i = keys.length;
        while (i--)
            _traverse(val[keys[i]], seen);
    }
}

let uid$1 = 0;
/**
 * A watcher parses an expression, collects dependencies,
 * and fires callback when the expression value changes.
 * This is used for both the $watch() api and directives.
 * @internal
 */
class Watcher {
    constructor(vm, expOrFn, cb, options, isRenderWatcher) {
        recordEffectScope(this, 
        // if the active effect scope is manually created (not a component scope),
        // prioritize it
        activeEffectScope && !activeEffectScope._vm
            ? activeEffectScope
            : vm
                ? vm._scope
                : undefined);
        if ((this.vm = vm) && isRenderWatcher) {
            vm._watcher = this;
        }
        // options
        if (options) {
            this.deep = !!options.deep;
            this.user = !!options.user;
            this.lazy = !!options.lazy;
            this.sync = !!options.sync;
            this.before = options.before;
            {
                this.onTrack = options.onTrack;
                this.onTrigger = options.onTrigger;
            }
        }
        else {
            this.deep = this.user = this.lazy = this.sync = false;
        }
        this.cb = cb;
        this.id = ++uid$1; // uid for batching
        this.active = true;
        this.post = false;
        this.dirty = this.lazy; // for lazy watchers
        this.deps = [];
        this.newDeps = [];
        this.depIds = new _Set();
        this.newDepIds = new _Set();
        this.expression = expOrFn.toString() ;
        // parse expression for getter
        if (isFunction(expOrFn)) {
            this.getter = expOrFn;
        }
        else {
            this.getter = parsePath(expOrFn);
            if (!this.getter) {
                this.getter = noop;
                warn(`Failed watching path: "${expOrFn}" ` +
                        'Watcher only accepts simple dot-delimited paths. ' +
                        'For full control, use a function instead.', vm);
            }
        }
        this.value = this.lazy ? undefined : this.get();
    }
    /**
     * Evaluate the getter, and re-collect dependencies.
     */
    get() {
        pushTarget(this);
        let value;
        const vm = this.vm;
        try {
            value = this.getter.call(vm, vm);
        }
        catch (e) {
            if (this.user) {
                handleError(e, vm, `getter for watcher "${this.expression}"`);
            }
            else {
                throw e;
            }
        }
        finally {
            // "touch" every property so they are all tracked as
            // dependencies for deep watching
            if (this.deep) {
                traverse(value);
            }
            popTarget();
            this.cleanupDeps();
        }
        return value;
    }
    /**
     * Add a dependency to this directive.
     */
    addDep(dep) {
        const id = dep.id;
        if (!this.newDepIds.has(id)) {
            this.newDepIds.add(id);
            this.newDeps.push(dep);
            if (!this.depIds.has(id)) {
                dep.addSub(this);
            }
        }
    }
    /**
     * Clean up for dependency collection.
     */
    cleanupDeps() {
        let i = this.deps.length;
        while (i--) {
            const dep = this.deps[i];
            if (!this.newDepIds.has(dep.id)) {
                dep.removeSub(this);
            }
        }
        let tmp = this.depIds;
        this.depIds = this.newDepIds;
        this.newDepIds = tmp;
        this.newDepIds.clear();
        tmp = this.deps;
        this.deps = this.newDeps;
        this.newDeps = tmp;
        this.newDeps.length = 0;
    }
    /**
     * Subscriber interface.
     * Will be called when a dependency changes.
     */
    update() {
        /* istanbul ignore else */
        if (this.lazy) {
            this.dirty = true;
        }
        else if (this.sync) {
            this.run();
        }
        else {
            queueWatcher(this);
        }
    }
    /**
     * Scheduler job interface.
     * Will be called by the scheduler.
     */
    run() {
        if (this.active) {
            const value = this.get();
            if (value !== this.value ||
                // Deep watchers and watchers on Object/Arrays should fire even
                // when the value is the same, because the value may
                // have mutated.
                isObject(value) ||
                this.deep) {
                // set new value
                const oldValue = this.value;
                this.value = value;
                if (this.user) {
                    const info = `callback for watcher "${this.expression}"`;
                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
                }
                else {
                    this.cb.call(this.vm, value, oldValue);
                }
            }
        }
    }
    /**
     * Evaluate the value of the watcher.
     * This only gets called for lazy watchers.
     */
    evaluate() {
        this.value = this.get();
        this.dirty = false;
    }
    /**
     * Depend on all deps collected by this watcher.
     */
    depend() {
        let i = this.deps.length;
        while (i--) {
            this.deps[i].depend();
        }
    }
    /**
     * Remove self from all dependencies' subscriber list.
     */
    teardown() {
        if (this.vm && !this.vm._isBeingDestroyed) {
            remove$2(this.vm._scope.effects, this);
        }
        if (this.active) {
            let i = this.deps.length;
            while (i--) {
                this.deps[i].removeSub(this);
            }
            this.active = false;
            if (this.onStop) {
                this.onStop();
            }
        }
    }
}

let mark;
let measure;
{
    const perf = inBrowser && window.performance;
    /* istanbul ignore if */
    if (perf &&
        // @ts-ignore
        perf.mark &&
        // @ts-ignore
        perf.measure &&
        // @ts-ignore
        perf.clearMarks &&
        // @ts-ignore
        perf.clearMeasures) {
        mark = tag => perf.mark(tag);
        measure = (name, startTag, endTag) => {
            perf.measure(name, startTag, endTag);
            perf.clearMarks(startTag);
            perf.clearMarks(endTag);
            // perf.clearMeasures(name)
        };
    }
}

function initEvents(vm) {
    vm._events = Object.create(null);
    vm._hasHookEvent = false;
    // init parent attached events
    const listeners = vm.$options._parentListeners;
    if (listeners) {
        updateComponentListeners(vm, listeners);
    }
}
let target$1;
function add$1(event, fn) {
    target$1.$on(event, fn);
}
function remove$1(event, fn) {
    target$1.$off(event, fn);
}
function createOnceHandler$1(event, fn) {
    const _target = target$1;
    return function onceHandler() {
        const res = fn.apply(null, arguments);
        if (res !== null) {
            _target.$off(event, onceHandler);
        }
    };
}
function updateComponentListeners(vm, listeners, oldListeners) {
    target$1 = vm;
    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
    target$1 = undefined;
}
function eventsMixin(Vue) {
    const hookRE = /^hook:/;
    Vue.prototype.$on = function (event, fn) {
        const vm = this;
        if (isArray(event)) {
            for (let i = 0, l = event.length; i < l; i++) {
                vm.$on(event[i], fn);
            }
        }
        else {
            (vm._events[event] || (vm._events[event] = [])).push(fn);
            // optimize hook:event cost by using a boolean flag marked at registration
            // instead of a hash lookup
            if (hookRE.test(event)) {
                vm._hasHookEvent = true;
            }
        }
        return vm;
    };
    Vue.prototype.$once = function (event, fn) {
        const vm = this;
        function on() {
            vm.$off(event, on);
            fn.apply(vm, arguments);
        }
        on.fn = fn;
        vm.$on(event, on);
        return vm;
    };
    Vue.prototype.$off = function (event, fn) {
        const vm = this;
        // all
        if (!arguments.length) {
            vm._events = Object.create(null);
            return vm;
        }
        // array of events
        if (isArray(event)) {
            for (let i = 0, l = event.length; i < l; i++) {
                vm.$off(event[i], fn);
            }
            return vm;
        }
        // specific event
        const cbs = vm._events[event];
        if (!cbs) {
            return vm;
        }
        if (!fn) {
            vm._events[event] = null;
            return vm;
        }
        // specific handler
        let cb;
        let i = cbs.length;
        while (i--) {
            cb = cbs[i];
            if (cb === fn || cb.fn === fn) {
                cbs.splice(i, 1);
                break;
            }
        }
        return vm;
    };
    Vue.prototype.$emit = function (event) {
        const vm = this;
        {
            const lowerCaseEvent = event.toLowerCase();
            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
                tip(`Event "${lowerCaseEvent}" is emitted in component ` +
                    `${formatComponentName(vm)} but the handler is registered for "${event}". ` +
                    `Note that HTML attributes are case-insensitive and you cannot use ` +
                    `v-on to listen to camelCase events when using in-DOM templates. ` +
                    `You should probably use "${hyphenate(event)}" instead of "${event}".`);
            }
        }
        let cbs = vm._events[event];
        if (cbs) {
            cbs = cbs.length > 1 ? toArray(cbs) : cbs;
            const args = toArray(arguments, 1);
            const info = `event handler for "${event}"`;
            for (let i = 0, l = cbs.length; i < l; i++) {
                invokeWithErrorHandling(cbs[i], vm, args, vm, info);
            }
        }
        return vm;
    };
}

let activeInstance = null;
let isUpdatingChildComponent = false;
function setActiveInstance(vm) {
    const prevActiveInstance = activeInstance;
    activeInstance = vm;
    return () => {
        activeInstance = prevActiveInstance;
    };
}
function initLifecycle(vm) {
    const options = vm.$options;
    // locate first non-abstract parent
    let parent = options.parent;
    if (parent && !options.abstract) {
        while (parent.$options.abstract && parent.$parent) {
            parent = parent.$parent;
        }
        parent.$children.push(vm);
    }
    vm.$parent = parent;
    vm.$root = parent ? parent.$root : vm;
    vm.$children = [];
    vm.$refs = {};
    vm._provided = parent ? parent._provided : Object.create(null);
    vm._watcher = null;
    vm._inactive = null;
    vm._directInactive = false;
    vm._isMounted = false;
    vm._isDestroyed = false;
    vm._isBeingDestroyed = false;
}
function lifecycleMixin(Vue) {
    Vue.prototype._update = function (vnode, hydrating) {
        const vm = this;
        const prevEl = vm.$el;
        const prevVnode = vm._vnode;
        const restoreActiveInstance = setActiveInstance(vm);
        vm._vnode = vnode;
        // Vue.prototype.__patch__ is injected in entry points
        // based on the rendering backend used.
        if (!prevVnode) {
            // initial render
            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
        }
        else {
            // updates
            vm.$el = vm.__patch__(prevVnode, vnode);
        }
        restoreActiveInstance();
        // update __vue__ reference
        if (prevEl) {
            prevEl.__vue__ = null;
        }
        if (vm.$el) {
            vm.$el.__vue__ = vm;
        }
        // if parent is an HOC, update its $el as well
        let wrapper = vm;
        while (wrapper &&
            wrapper.$vnode &&
            wrapper.$parent &&
            wrapper.$vnode === wrapper.$parent._vnode) {
            wrapper.$parent.$el = wrapper.$el;
            wrapper = wrapper.$parent;
        }
        // updated hook is called by the scheduler to ensure that children are
        // updated in a parent's updated hook.
    };
    Vue.prototype.$forceUpdate = function () {
        const vm = this;
        if (vm._watcher) {
            vm._watcher.update();
        }
    };
    Vue.prototype.$destroy = function () {
        const vm = this;
        if (vm._isBeingDestroyed) {
            return;
        }
        callHook$1(vm, 'beforeDestroy');
        vm._isBeingDestroyed = true;
        // remove self from parent
        const parent = vm.$parent;
        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
            remove$2(parent.$children, vm);
        }
        // teardown scope. this includes both the render watcher and other
        // watchers created
        vm._scope.stop();
        // remove reference from data ob
        // frozen object may not have observer.
        if (vm._data.__ob__) {
            vm._data.__ob__.vmCount--;
        }
        // call the last hook...
        vm._isDestroyed = true;
        // invoke destroy hooks on current rendered tree
        vm.__patch__(vm._vnode, null);
        // fire destroyed hook
        callHook$1(vm, 'destroyed');
        // turn off all instance listeners.
        vm.$off();
        // remove __vue__ reference
        if (vm.$el) {
            vm.$el.__vue__ = null;
        }
        // release circular reference (#6759)
        if (vm.$vnode) {
            vm.$vnode.parent = null;
        }
    };
}
function mountComponent(vm, el, hydrating) {
    vm.$el = el;
    if (!vm.$options.render) {
        // @ts-expect-error invalid type
        vm.$options.render = createEmptyVNode;
        {
            /* istanbul ignore if */
            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
                vm.$options.el ||
                el) {
                warn('You are using the runtime-only build of Vue where the template ' +
                    'compiler is not available. Either pre-compile the templates into ' +
                    'render functions, or use the compiler-included build.', vm);
            }
            else {
                warn('Failed to mount component: template or render function not defined.', vm);
            }
        }
    }
    callHook$1(vm, 'beforeMount');
    let updateComponent;
    /* istanbul ignore if */
    if (config.performance && mark) {
        updateComponent = () => {
            const name = vm._name;
            const id = vm._uid;
            const startTag = `vue-perf-start:${id}`;
            const endTag = `vue-perf-end:${id}`;
            mark(startTag);
            const vnode = vm._render();
            mark(endTag);
            measure(`vue ${name} render`, startTag, endTag);
            mark(startTag);
            vm._update(vnode, hydrating);
            mark(endTag);
            measure(`vue ${name} patch`, startTag, endTag);
        };
    }
    else {
        updateComponent = () => {
            vm._update(vm._render(), hydrating);
        };
    }
    const watcherOptions = {
        before() {
            if (vm._isMounted && !vm._isDestroyed) {
                callHook$1(vm, 'beforeUpdate');
            }
        }
    };
    {
        watcherOptions.onTrack = e => callHook$1(vm, 'renderTracked', [e]);
        watcherOptions.onTrigger = e => callHook$1(vm, 'renderTriggered', [e]);
    }
    // we set this to vm._watcher inside the watcher's constructor
    // since the watcher's initial patch may call $forceUpdate (e.g. inside child
    // component's mounted hook), which relies on vm._watcher being already defined
    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
    hydrating = false;
    // flush buffer for flush: "pre" watchers queued in setup()
    const preWatchers = vm._preWatchers;
    if (preWatchers) {
        for (let i = 0; i < preWatchers.length; i++) {
            preWatchers[i].run();
        }
    }
    // manually mounted instance, call mounted on self
    // mounted is called for render-created child components in its inserted hook
    if (vm.$vnode == null) {
        vm._isMounted = true;
        callHook$1(vm, 'mounted');
    }
    return vm;
}
function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
    {
        isUpdatingChildComponent = true;
    }
    // determine whether component has slot children
    // we need to do this before overwriting $options._renderChildren.
    // check if there are dynamic scopedSlots (hand-written or compiled but with
    // dynamic slot names). Static scoped slots compiled from template has the
    // "$stable" marker.
    const newScopedSlots = parentVnode.data.scopedSlots;
    const oldScopedSlots = vm.$scopedSlots;
    const hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
        (!newScopedSlots && vm.$scopedSlots.$key));
    // Any static slot children from the parent may have changed during parent's
    // update. Dynamic scoped slots may also have changed. In such cases, a forced
    // update is necessary to ensure correctness.
    let needsForceUpdate = !!(renderChildren || // has new static slots
        vm.$options._renderChildren || // has old static slots
        hasDynamicScopedSlot);
    const prevVNode = vm.$vnode;
    vm.$options._parentVnode = parentVnode;
    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
    if (vm._vnode) {
        // update child tree's parent
        vm._vnode.parent = parentVnode;
    }
    vm.$options._renderChildren = renderChildren;
    // update $attrs and $listeners hash
    // these are also reactive so they may trigger child update if the child
    // used them during render
    const attrs = parentVnode.data.attrs || emptyObject;
    if (vm._attrsProxy) {
        // force update if attrs are accessed and has changed since it may be
        // passed to a child component.
        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
            needsForceUpdate = true;
        }
    }
    vm.$attrs = attrs;
    // update listeners
    listeners = listeners || emptyObject;
    const prevListeners = vm.$options._parentListeners;
    if (vm._listenersProxy) {
        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
    }
    vm.$listeners = vm.$options._parentListeners = listeners;
    updateComponentListeners(vm, listeners, prevListeners);
    // update props
    if (propsData && vm.$options.props) {
        toggleObserving(false);
        const props = vm._props;
        const propKeys = vm.$options._propKeys || [];
        for (let i = 0; i < propKeys.length; i++) {
            const key = propKeys[i];
            const propOptions = vm.$options.props; // wtf flow?
            props[key] = validateProp(key, propOptions, propsData, vm);
        }
        toggleObserving(true);
        // keep a copy of raw propsData
        vm.$options.propsData = propsData;
    }
    // resolve slots + force update if has children
    if (needsForceUpdate) {
        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
        vm.$forceUpdate();
    }
    {
        isUpdatingChildComponent = false;
    }
}
function isInInactiveTree(vm) {
    while (vm && (vm = vm.$parent)) {
        if (vm._inactive)
            return true;
    }
    return false;
}
function activateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = false;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    else if (vm._directInactive) {
        return;
    }
    if (vm._inactive || vm._inactive === null) {
        vm._inactive = false;
        for (let i = 0; i < vm.$children.length; i++) {
            activateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'activated');
    }
}
function deactivateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = true;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    if (!vm._inactive) {
        vm._inactive = true;
        for (let i = 0; i < vm.$children.length; i++) {
            deactivateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'deactivated');
    }
}
function callHook$1(vm, hook, args, setContext = true) {
    // #7573 disable dep collection when invoking lifecycle hooks
    pushTarget();
    const prev = currentInstance;
    setContext && setCurrentInstance(vm);
    const handlers = vm.$options[hook];
    const info = `${hook} hook`;
    if (handlers) {
        for (let i = 0, j = handlers.length; i < j; i++) {
            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
        }
    }
    if (vm._hasHookEvent) {
        vm.$emit('hook:' + hook);
    }
    setContext && setCurrentInstance(prev);
    popTarget();
}

const MAX_UPDATE_COUNT = 100;
const queue = [];
const activatedChildren = [];
let has = {};
let circular = {};
let waiting = false;
let flushing = false;
let index = 0;
/**
 * Reset the scheduler's state.
 */
function resetSchedulerState() {
    index = queue.length = activatedChildren.length = 0;
    has = {};
    {
        circular = {};
    }
    waiting = flushing = false;
}
// Async edge case #6566 requires saving the timestamp when event listeners are
// attached. However, calling performance.now() has a perf overhead especially
// if the page has thousands of event listeners. Instead, we take a timestamp
// every time the scheduler flushes and use that for all event listeners
// attached during that flush.
let currentFlushTimestamp = 0;
// Async edge case fix requires storing an event listener's attach timestamp.
let getNow = Date.now;
// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if (inBrowser && !isIE) {
    const performance = window.performance;
    if (performance &&
        typeof performance.now === 'function' &&
        getNow() > document.createEvent('Event').timeStamp) {
        // if the event timestamp, although evaluated AFTER the Date.now(), is
        // smaller than it, it means the event is using a hi-res timestamp,
        // and we need to use the hi-res version for event listener timestamps as
        // well.
        getNow = () => performance.now();
    }
}
const sortCompareFn = (a, b) => {
    if (a.post) {
        if (!b.post)
            return 1;
    }
    else if (b.post) {
        return -1;
    }
    return a.id - b.id;
};
/**
 * Flush both queues and run the watchers.
 */
function flushSchedulerQueue() {
    currentFlushTimestamp = getNow();
    flushing = true;
    let watcher, id;
    // Sort queue before flush.
    // This ensures that:
    // 1. Components are updated from parent to child. (because parent is always
    //    created before the child)
    // 2. A component's user watchers are run before its render watcher (because
    //    user watchers are created before the render watcher)
    // 3. If a component is destroyed during a parent component's watcher run,
    //    its watchers can be skipped.
    queue.sort(sortCompareFn);
    // do not cache length because more watchers might be pushed
    // as we run existing watchers
    for (index = 0; index < queue.length; index++) {
        watcher = queue[index];
        if (watcher.before) {
            watcher.before();
        }
        id = watcher.id;
        has[id] = null;
        watcher.run();
        // in dev build, check and stop circular updates.
        if (has[id] != null) {
            circular[id] = (circular[id] || 0) + 1;
            if (circular[id] > MAX_UPDATE_COUNT) {
                warn('You may have an infinite update loop ' +
                    (watcher.user
                        ? `in watcher with expression "${watcher.expression}"`
                        : `in a component render function.`), watcher.vm);
                break;
            }
        }
    }
    // keep copies of post queues before resetting state
    const activatedQueue = activatedChildren.slice();
    const updatedQueue = queue.slice();
    resetSchedulerState();
    // call component updated and activated hooks
    callActivatedHooks(activatedQueue);
    callUpdatedHooks(updatedQueue);
    cleanupDeps();
    // devtool hook
    /* istanbul ignore if */
    if (devtools && config.devtools) {
        devtools.emit('flush');
    }
}
function callUpdatedHooks(queue) {
    let i = queue.length;
    while (i--) {
        const watcher = queue[i];
        const vm = watcher.vm;
        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
            callHook$1(vm, 'updated');
        }
    }
}
/**
 * Queue a kept-alive component that was activated during patch.
 * The queue will be processed after the entire tree has been patched.
 */
function queueActivatedComponent(vm) {
    // setting _inactive to false here so that a render function can
    // rely on checking whether it's in an inactive tree (e.g. router-view)
    vm._inactive = false;
    activatedChildren.push(vm);
}
function callActivatedHooks(queue) {
    for (let i = 0; i < queue.length; i++) {
        queue[i]._inactive = true;
        activateChildComponent(queue[i], true /* true */);
    }
}
/**
 * Push a watcher into the watcher queue.
 * Jobs with duplicate IDs will be skipped unless it's
 * pushed when the queue is being flushed.
 */
function queueWatcher(watcher) {
    const id = watcher.id;
    if (has[id] != null) {
        return;
    }
    if (watcher === Dep.target && watcher.noRecurse) {
        return;
    }
    has[id] = true;
    if (!flushing) {
        queue.push(watcher);
    }
    else {
        // if already flushing, splice the watcher based on its id
        // if already past its id, it will be run next immediately.
        let i = queue.length - 1;
        while (i > index && queue[i].id > watcher.id) {
            i--;
        }
        queue.splice(i + 1, 0, watcher);
    }
    // queue the flush
    if (!waiting) {
        waiting = true;
        if (!config.async) {
            flushSchedulerQueue();
            return;
        }
        nextTick(flushSchedulerQueue);
    }
}

function initProvide(vm) {
    const provideOption = vm.$options.provide;
    if (provideOption) {
        const provided = isFunction(provideOption)
            ? provideOption.call(vm)
            : provideOption;
        if (!isObject(provided)) {
            return;
        }
        const source = resolveProvided(vm);
        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
        // iterate the keys ourselves.
        const keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
        for (let i = 0; i < keys.length; i++) {
            const key = keys[i];
            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
        }
    }
}
function initInjections(vm) {
    const result = resolveInject(vm.$options.inject, vm);
    if (result) {
        toggleObserving(false);
        Object.keys(result).forEach(key => {
            /* istanbul ignore else */
            {
                defineReactive(vm, key, result[key], () => {
                    warn(`Avoid mutating an injected value directly since the changes will be ` +
                        `overwritten whenever the provided component re-renders. ` +
                        `injection being mutated: "${key}"`, vm);
                });
            }
        });
        toggleObserving(true);
    }
}
function resolveInject(inject, vm) {
    if (inject) {
        // inject is :any because flow is not smart enough to figure out cached
        const result = Object.create(null);
        const keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
        for (let i = 0; i < keys.length; i++) {
            const key = keys[i];
            // #6574 in case the inject object is observed...
            if (key === '__ob__')
                continue;
            const provideKey = inject[key].from;
            if (provideKey in vm._provided) {
                result[key] = vm._provided[provideKey];
            }
            else if ('default' in inject[key]) {
                const provideDefault = inject[key].default;
                result[key] = isFunction(provideDefault)
                    ? provideDefault.call(vm)
                    : provideDefault;
            }
            else {
                warn(`Injection "${key}" not found`, vm);
            }
        }
        return result;
    }
}

function FunctionalRenderContext(data, props, children, parent, Ctor) {
    const options = Ctor.options;
    // ensure the createElement function in functional components
    // gets a unique context - this is necessary for correct named slot check
    let contextVm;
    if (hasOwn(parent, '_uid')) {
        contextVm = Object.create(parent);
        contextVm._original = parent;
    }
    else {
        // the context vm passed in is a functional context as well.
        // in this case we want to make sure we are able to get a hold to the
        // real context instance.
        contextVm = parent;
        // @ts-ignore
        parent = parent._original;
    }
    const isCompiled = isTrue(options._compiled);
    const needNormalization = !isCompiled;
    this.data = data;
    this.props = props;
    this.children = children;
    this.parent = parent;
    this.listeners = data.on || emptyObject;
    this.injections = resolveInject(options.inject, parent);
    this.slots = () => {
        if (!this.$slots) {
            normalizeScopedSlots(parent, data.scopedSlots, (this.$slots = resolveSlots(children, parent)));
        }
        return this.$slots;
    };
    Object.defineProperty(this, 'scopedSlots', {
        enumerable: true,
        get() {
            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
        }
    });
    // support for compiled functional template
    if (isCompiled) {
        // exposing $options for renderStatic()
        this.$options = options;
        // pre-resolve slots for renderSlot()
        this.$slots = this.slots();
        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
    }
    if (options._scopeId) {
        this._c = (a, b, c, d) => {
            const vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
            if (vnode && !isArray(vnode)) {
                vnode.fnScopeId = options._scopeId;
                vnode.fnContext = parent;
            }
            return vnode;
        };
    }
    else {
        this._c = (a, b, c, d) => createElement$1(contextVm, a, b, c, d, needNormalization);
    }
}
installRenderHelpers(FunctionalRenderContext.prototype);
function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
    const options = Ctor.options;
    const props = {};
    const propOptions = options.props;
    if (isDef(propOptions)) {
        for (const key in propOptions) {
            props[key] = validateProp(key, propOptions, propsData || emptyObject);
        }
    }
    else {
        if (isDef(data.attrs))
            mergeProps(props, data.attrs);
        if (isDef(data.props))
            mergeProps(props, data.props);
    }
    const renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
    const vnode = options.render.call(null, renderContext._c, renderContext);
    if (vnode instanceof VNode) {
        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
    }
    else if (isArray(vnode)) {
        const vnodes = normalizeChildren(vnode) || [];
        const res = new Array(vnodes.length);
        for (let i = 0; i < vnodes.length; i++) {
            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
        }
        return res;
    }
}
function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
    // #7817 clone node before setting fnContext, otherwise if the node is reused
    // (e.g. it was from a cached normal slot) the fnContext causes named slots
    // that should not be matched to match.
    const clone = cloneVNode(vnode);
    clone.fnContext = contextVm;
    clone.fnOptions = options;
    {
        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
            renderContext;
    }
    if (data.slot) {
        (clone.data || (clone.data = {})).slot = data.slot;
    }
    return clone;
}
function mergeProps(to, from) {
    for (const key in from) {
        to[camelize(key)] = from[key];
    }
}

function getComponentName(options) {
    return options.name || options.__name || options._componentTag;
}
// inline hooks to be invoked on component VNodes during patch
const componentVNodeHooks = {
    init(vnode, hydrating) {
        if (vnode.componentInstance &&
            !vnode.componentInstance._isDestroyed &&
            vnode.data.keepAlive) {
            // kept-alive components, treat as a patch
            const mountedNode = vnode; // work around flow
            componentVNodeHooks.prepatch(mountedNode, mountedNode);
        }
        else {
            const child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
        }
    },
    prepatch(oldVnode, vnode) {
        const options = vnode.componentOptions;
        const child = (vnode.componentInstance = oldVnode.componentInstance);
        updateChildComponent(child, options.propsData, // updated props
        options.listeners, // updated listeners
        vnode, // new parent vnode
        options.children // new children
        );
    },
    insert(vnode) {
        const { context, componentInstance } = vnode;
        if (!componentInstance._isMounted) {
            componentInstance._isMounted = true;
            callHook$1(componentInstance, 'mounted');
        }
        if (vnode.data.keepAlive) {
            if (context._isMounted) {
                // vue-router#1212
                // During updates, a kept-alive component's child components may
                // change, so directly walking the tree here may call activated hooks
                // on incorrect children. Instead we push them into a queue which will
                // be processed after the whole patch process ended.
                queueActivatedComponent(componentInstance);
            }
            else {
                activateChildComponent(componentInstance, true /* direct */);
            }
        }
    },
    destroy(vnode) {
        const { componentInstance } = vnode;
        if (!componentInstance._isDestroyed) {
            if (!vnode.data.keepAlive) {
                componentInstance.$destroy();
            }
            else {
                deactivateChildComponent(componentInstance, true /* direct */);
            }
        }
    }
};
const hooksToMerge = Object.keys(componentVNodeHooks);
function createComponent(Ctor, data, context, children, tag) {
    if (isUndef(Ctor)) {
        return;
    }
    const baseCtor = context.$options._base;
    // plain options object: turn it into a constructor
    if (isObject(Ctor)) {
        Ctor = baseCtor.extend(Ctor);
    }
    // if at this stage it's not a constructor or an async component factory,
    // reject.
    if (typeof Ctor !== 'function') {
        {
            warn(`Invalid Component definition: ${String(Ctor)}`, context);
        }
        return;
    }
    // async component
    let asyncFactory;
    // @ts-expect-error
    if (isUndef(Ctor.cid)) {
        asyncFactory = Ctor;
        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
        if (Ctor === undefined) {
            // return a placeholder node for async component, which is rendered
            // as a comment node but preserves all the raw information for the node.
            // the information will be used for async server-rendering and hydration.
            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
        }
    }
    data = data || {};
    // resolve constructor options in case global mixins are applied after
    // component constructor creation
    resolveConstructorOptions(Ctor);
    // transform component v-model data into props & events
    if (isDef(data.model)) {
        // @ts-expect-error
        transformModel(Ctor.options, data);
    }
    // extract props
    // @ts-expect-error
    const propsData = extractPropsFromVNodeData(data, Ctor, tag);
    // functional component
    // @ts-expect-error
    if (isTrue(Ctor.options.functional)) {
        return createFunctionalComponent(Ctor, propsData, data, context, children);
    }
    // extract listeners, since these needs to be treated as
    // child component listeners instead of DOM listeners
    const listeners = data.on;
    // replace with listeners with .native modifier
    // so it gets processed during parent component patch.
    data.on = data.nativeOn;
    // @ts-expect-error
    if (isTrue(Ctor.options.abstract)) {
        // abstract components do not keep anything
        // other than props & listeners & slot
        // work around flow
        const slot = data.slot;
        data = {};
        if (slot) {
            data.slot = slot;
        }
    }
    // install component management hooks onto the placeholder node
    installComponentHooks(data);
    // return a placeholder vnode
    // @ts-expect-error
    const name = getComponentName(Ctor.options) || tag;
    const vnode = new VNode(
    // @ts-expect-error
    `vue-component-${Ctor.cid}${name ? `-${name}` : ''}`, data, undefined, undefined, undefined, context, 
    // @ts-expect-error
    { Ctor, propsData, listeners, tag, children }, asyncFactory);
    return vnode;
}
function createComponentInstanceForVnode(
// we know it's MountedComponentVNode but flow doesn't
vnode, 
// activeInstance in lifecycle state
parent) {
    const options = {
        _isComponent: true,
        _parentVnode: vnode,
        parent
    };
    // check inline-template render functions
    const inlineTemplate = vnode.data.inlineTemplate;
    if (isDef(inlineTemplate)) {
        options.render = inlineTemplate.render;
        options.staticRenderFns = inlineTemplate.staticRenderFns;
    }
    return new vnode.componentOptions.Ctor(options);
}
function installComponentHooks(data) {
    const hooks = data.hook || (data.hook = {});
    for (let i = 0; i < hooksToMerge.length; i++) {
        const key = hooksToMerge[i];
        const existing = hooks[key];
        const toMerge = componentVNodeHooks[key];
        // @ts-expect-error
        if (existing !== toMerge && !(existing && existing._merged)) {
            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
        }
    }
}
function mergeHook(f1, f2) {
    const merged = (a, b) => {
        // flow complains about extra args which is why we use any
        f1(a, b);
        f2(a, b);
    };
    merged._merged = true;
    return merged;
}
// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel(options, data) {
    const prop = (options.model && options.model.prop) || 'value';
    const event = (options.model && options.model.event) || 'input';
    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
    const on = data.on || (data.on = {});
    const existing = on[event];
    const callback = data.model.callback;
    if (isDef(existing)) {
        if (isArray(existing)
            ? existing.indexOf(callback) === -1
            : existing !== callback) {
            on[event] = [callback].concat(existing);
        }
    }
    else {
        on[event] = callback;
    }
}

let warn = noop;
let tip = noop;
let generateComponentTrace; // work around flow check
let formatComponentName;
{
    const hasConsole = typeof console !== 'undefined';
    const classifyRE = /(?:^|[-_])(\w)/g;
    const classify = str => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');
    warn = (msg, vm = currentInstance) => {
        const trace = vm ? generateComponentTrace(vm) : '';
        if (config.warnHandler) {
            config.warnHandler.call(null, msg, vm, trace);
        }
        else if (hasConsole && !config.silent) {
            console.error(`[Vue warn]: ${msg}${trace}`);
        }
    };
    tip = (msg, vm) => {
        if (hasConsole && !config.silent) {
            console.warn(`[Vue tip]: ${msg}` + (vm ? generateComponentTrace(vm) : ''));
        }
    };
    formatComponentName = (vm, includeFile) => {
        if (vm.$root === vm) {
            return '<Root>';
        }
        const options = isFunction(vm) && vm.cid != null
            ? vm.options
            : vm._isVue
                ? vm.$options || vm.constructor.options
                : vm;
        let name = getComponentName(options);
        const file = options.__file;
        if (!name && file) {
            const match = file.match(/([^/\\]+)\.vue$/);
            name = match && match[1];
        }
        return ((name ? `<${classify(name)}>` : `<Anonymous>`) +
            (file && includeFile !== false ? ` at ${file}` : ''));
    };
    const repeat = (str, n) => {
        let res = '';
        while (n) {
            if (n % 2 === 1)
                res += str;
            if (n > 1)
                str += str;
            n >>= 1;
        }
        return res;
    };
    generateComponentTrace = (vm) => {
        if (vm._isVue && vm.$parent) {
            const tree = [];
            let currentRecursiveSequence = 0;
            while (vm) {
                if (tree.length > 0) {
                    const last = tree[tree.length - 1];
                    if (last.constructor === vm.constructor) {
                        currentRecursiveSequence++;
                        vm = vm.$parent;
                        continue;
                    }
                    else if (currentRecursiveSequence > 0) {
                        tree[tree.length - 1] = [last, currentRecursiveSequence];
                        currentRecursiveSequence = 0;
                    }
                }
                tree.push(vm);
                vm = vm.$parent;
            }
            return ('\n\nfound in\n\n' +
                tree
                    .map((vm, i) => `${i === 0 ? '---> ' : repeat(' ', 5 + i * 2)}${isArray(vm)
                    ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
                    : formatComponentName(vm)}`)
                    .join('\n'));
        }
        else {
            return `\n\n(found in ${formatComponentName(vm)})`;
        }
    };
}

/**
 * Option overwriting strategies are functions that handle
 * how to merge a parent option value and a child option
 * value into the final value.
 */
const strats = config.optionMergeStrategies;
/**
 * Options with restrictions
 */
{
    strats.el = strats.propsData = function (parent, child, vm, key) {
        if (!vm) {
            warn(`option "${key}" can only be used during instance ` +
                'creation with the `new` keyword.');
        }
        return defaultStrat(parent, child);
    };
}
/**
 * Helper that recursively merges two data objects together.
 */
function mergeData(to, from, recursive = true) {
    if (!from)
        return to;
    let key, toVal, fromVal;
    const keys = hasSymbol
        ? Reflect.ownKeys(from)
        : Object.keys(from);
    for (let i = 0; i < keys.length; i++) {
        key = keys[i];
        // in case the object is already observed...
        if (key === '__ob__')
            continue;
        toVal = to[key];
        fromVal = from[key];
        if (!recursive || !hasOwn(to, key)) {
            set(to, key, fromVal);
        }
        else if (toVal !== fromVal &&
            isPlainObject(toVal) &&
            isPlainObject(fromVal)) {
            mergeData(toVal, fromVal);
        }
    }
    return to;
}
/**
 * Data
 */
function mergeDataOrFn(parentVal, childVal, vm) {
    if (!vm) {
        // in a Vue.extend merge, both should be functions
        if (!childVal) {
            return parentVal;
        }
        if (!parentVal) {
            return childVal;
        }
        // when parentVal & childVal are both present,
        // we need to return a function that returns the
        // merged result of both functions... no need to
        // check if parentVal is a function here because
        // it has to be a function to pass previous merges.
        return function mergedDataFn() {
            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
        };
    }
    else {
        return function mergedInstanceDataFn() {
            // instance merge
            const instanceData = isFunction(childVal)
                ? childVal.call(vm, vm)
                : childVal;
            const defaultData = isFunction(parentVal)
                ? parentVal.call(vm, vm)
                : parentVal;
            if (instanceData) {
                return mergeData(instanceData, defaultData);
            }
            else {
                return defaultData;
            }
        };
    }
}
strats.data = function (parentVal, childVal, vm) {
    if (!vm) {
        if (childVal && typeof childVal !== 'function') {
            warn('The "data" option should be a function ' +
                    'that returns a per-instance value in component ' +
                    'definitions.', vm);
            return parentVal;
        }
        return mergeDataOrFn(parentVal, childVal);
    }
    return mergeDataOrFn(parentVal, childVal, vm);
};
/**
 * Hooks and props are merged as arrays.
 */
function mergeLifecycleHook(parentVal, childVal) {
    const res = childVal
        ? parentVal
            ? parentVal.concat(childVal)
            : isArray(childVal)
                ? childVal
                : [childVal]
        : parentVal;
    return res ? dedupeHooks(res) : res;
}
function dedupeHooks(hooks) {
    const res = [];
    for (let i = 0; i < hooks.length; i++) {
        if (res.indexOf(hooks[i]) === -1) {
            res.push(hooks[i]);
        }
    }
    return res;
}
LIFECYCLE_HOOKS.forEach(hook => {
    strats[hook] = mergeLifecycleHook;
});
/**
 * Assets
 *
 * When a vm is present (instance creation), we need to do
 * a three-way merge between constructor options, instance
 * options and parent options.
 */
function mergeAssets(parentVal, childVal, vm, key) {
    const res = Object.create(parentVal || null);
    if (childVal) {
        assertObjectType(key, childVal, vm);
        return extend(res, childVal);
    }
    else {
        return res;
    }
}
ASSET_TYPES.forEach(function (type) {
    strats[type + 's'] = mergeAssets;
});
/**
 * Watchers.
 *
 * Watchers hashes should not overwrite one
 * another, so we merge them as arrays.
 */
strats.watch = function (parentVal, childVal, vm, key) {
    // work around Firefox's Object.prototype.watch...
    //@ts-expect-error work around
    if (parentVal === nativeWatch)
        parentVal = undefined;
    //@ts-expect-error work around
    if (childVal === nativeWatch)
        childVal = undefined;
    /* istanbul ignore if */
    if (!childVal)
        return Object.create(parentVal || null);
    {
        assertObjectType(key, childVal, vm);
    }
    if (!parentVal)
        return childVal;
    const ret = {};
    extend(ret, parentVal);
    for (const key in childVal) {
        let parent = ret[key];
        const child = childVal[key];
        if (parent && !isArray(parent)) {
            parent = [parent];
        }
        ret[key] = parent ? parent.concat(child) : isArray(child) ? child : [child];
    }
    return ret;
};
/**
 * Other object hashes.
 */
strats.props =
    strats.methods =
        strats.inject =
            strats.computed =
                function (parentVal, childVal, vm, key) {
                    if (childVal && true) {
                        assertObjectType(key, childVal, vm);
                    }
                    if (!parentVal)
                        return childVal;
                    const ret = Object.create(null);
                    extend(ret, parentVal);
                    if (childVal)
                        extend(ret, childVal);
                    return ret;
                };
strats.provide = function (parentVal, childVal) {
    if (!parentVal)
        return childVal;
    return function () {
        const ret = Object.create(null);
        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
        if (childVal) {
            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
            );
        }
        return ret;
    };
};
/**
 * Default strategy.
 */
const defaultStrat = function (parentVal, childVal) {
    return childVal === undefined ? parentVal : childVal;
};
/**
 * Validate component names
 */
function checkComponents(options) {
    for (const key in options.components) {
        validateComponentName(key);
    }
}
function validateComponentName(name) {
    if (!new RegExp(`^[a-zA-Z][\\-\\.0-9_${unicodeRegExp.source}]*$`).test(name)) {
        warn('Invalid component name: "' +
            name +
            '". Component names ' +
            'should conform to valid custom element name in html5 specification.');
    }
    if (isBuiltInTag(name) || config.isReservedTag(name)) {
        warn('Do not use built-in or reserved HTML elements as component ' +
            'id: ' +
            name);
    }
}
/**
 * Ensure all props option syntax are normalized into the
 * Object-based format.
 */
function normalizeProps(options, vm) {
    const props = options.props;
    if (!props)
        return;
    const res = {};
    let i, val, name;
    if (isArray(props)) {
        i = props.length;
        while (i--) {
            val = props[i];
            if (typeof val === 'string') {
                name = camelize(val);
                res[name] = { type: null };
            }
            else {
                warn('props must be strings when using array syntax.');
            }
        }
    }
    else if (isPlainObject(props)) {
        for (const key in props) {
            val = props[key];
            name = camelize(key);
            res[name] = isPlainObject(val) ? val : { type: val };
        }
    }
    else {
        warn(`Invalid value for option "props": expected an Array or an Object, ` +
            `but got ${toRawType(props)}.`, vm);
    }
    options.props = res;
}
/**
 * Normalize all injections into Object-based format
 */
function normalizeInject(options, vm) {
    const inject = options.inject;
    if (!inject)
        return;
    const normalized = (options.inject = {});
    if (isArray(inject)) {
        for (let i = 0; i < inject.length; i++) {
            normalized[inject[i]] = { from: inject[i] };
        }
    }
    else if (isPlainObject(inject)) {
        for (const key in inject) {
            const val = inject[key];
            normalized[key] = isPlainObject(val)
                ? extend({ from: key }, val)
                : { from: val };
        }
    }
    else {
        warn(`Invalid value for option "inject": expected an Array or an Object, ` +
            `but got ${toRawType(inject)}.`, vm);
    }
}
/**
 * Normalize raw function directives into object format.
 */
function normalizeDirectives$1(options) {
    const dirs = options.directives;
    if (dirs) {
        for (const key in dirs) {
            const def = dirs[key];
            if (isFunction(def)) {
                dirs[key] = { bind: def, update: def };
            }
        }
    }
}
function assertObjectType(name, value, vm) {
    if (!isPlainObject(value)) {
        warn(`Invalid value for option "${name}": expected an Object, ` +
            `but got ${toRawType(value)}.`, vm);
    }
}
/**
 * Merge two option objects into a new one.
 * Core utility used in both instantiation and inheritance.
 */
function mergeOptions(parent, child, vm) {
    {
        checkComponents(child);
    }
    if (isFunction(child)) {
        // @ts-expect-error
        child = child.options;
    }
    normalizeProps(child, vm);
    normalizeInject(child, vm);
    normalizeDirectives$1(child);
    // Apply extends and mixins on the child options,
    // but only if it is a raw options object that isn't
    // the result of another mergeOptions call.
    // Only merged options has the _base property.
    if (!child._base) {
        if (child.extends) {
            parent = mergeOptions(parent, child.extends, vm);
        }
        if (child.mixins) {
            for (let i = 0, l = child.mixins.length; i < l; i++) {
                parent = mergeOptions(parent, child.mixins[i], vm);
            }
        }
    }
    const options = {};
    let key;
    for (key in parent) {
        mergeField(key);
    }
    for (key in child) {
        if (!hasOwn(parent, key)) {
            mergeField(key);
        }
    }
    function mergeField(key) {
        const strat = strats[key] || defaultStrat;
        options[key] = strat(parent[key], child[key], vm, key);
    }
    return options;
}
/**
 * Resolve an asset.
 * This function is used because child instances need access
 * to assets defined in its ancestor chain.
 */
function resolveAsset(options, type, id, warnMissing) {
    /* istanbul ignore if */
    if (typeof id !== 'string') {
        return;
    }
    const assets = options[type];
    // check local registration variations first
    if (hasOwn(assets, id))
        return assets[id];
    const camelizedId = camelize(id);
    if (hasOwn(assets, camelizedId))
        return assets[camelizedId];
    const PascalCaseId = capitalize(camelizedId);
    if (hasOwn(assets, PascalCaseId))
        return assets[PascalCaseId];
    // fallback to prototype chain
    const res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
    if (warnMissing && !res) {
        warn('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
    }
    return res;
}

function validateProp(key, propOptions, propsData, vm) {
    const prop = propOptions[key];
    const absent = !hasOwn(propsData, key);
    let value = propsData[key];
    // boolean casting
    const booleanIndex = getTypeIndex(Boolean, prop.type);
    if (booleanIndex > -1) {
        if (absent && !hasOwn(prop, 'default')) {
            value = false;
        }
        else if (value === '' || value === hyphenate(key)) {
            // only cast empty string / same name to boolean if
            // boolean has higher priority
            const stringIndex = getTypeIndex(String, prop.type);
            if (stringIndex < 0 || booleanIndex < stringIndex) {
                value = true;
            }
        }
    }
    // check default value
    if (value === undefined) {
        value = getPropDefaultValue(vm, prop, key);
        // since the default value is a fresh copy,
        // make sure to observe it.
        const prevShouldObserve = shouldObserve;
        toggleObserving(true);
        observe(value);
        toggleObserving(prevShouldObserve);
    }
    {
        assertProp(prop, key, value, vm, absent);
    }
    return value;
}
/**
 * Get the default value of a prop.
 */
function getPropDefaultValue(vm, prop, key) {
    // no default, return undefined
    if (!hasOwn(prop, 'default')) {
        return undefined;
    }
    const def = prop.default;
    // warn against non-factory defaults for Object & Array
    if (isObject(def)) {
        warn('Invalid default value for prop "' +
            key +
            '": ' +
            'Props with type Object/Array must use a factory function ' +
            'to return the default value.', vm);
    }
    // the raw prop value was also undefined from previous render,
    // return previous default value to avoid unnecessary watcher trigger
    if (vm &&
        vm.$options.propsData &&
        vm.$options.propsData[key] === undefined &&
        vm._props[key] !== undefined) {
        return vm._props[key];
    }
    // call factory function for non-Function types
    // a value is Function if its prototype is function even across different execution context
    return isFunction(def) && getType(prop.type) !== 'Function'
        ? def.call(vm)
        : def;
}
/**
 * Assert whether a prop is valid.
 */
function assertProp(prop, name, value, vm, absent) {
    if (prop.required && absent) {
        warn('Missing required prop: "' + name + '"', vm);
        return;
    }
    if (value == null && !prop.required) {
        return;
    }
    let type = prop.type;
    let valid = !type || type === true;
    const expectedTypes = [];
    if (type) {
        if (!isArray(type)) {
            type = [type];
        }
        for (let i = 0; i < type.length && !valid; i++) {
            const assertedType = assertType(value, type[i], vm);
            expectedTypes.push(assertedType.expectedType || '');
            valid = assertedType.valid;
        }
    }
    const haveExpectedTypes = expectedTypes.some(t => t);
    if (!valid && haveExpectedTypes) {
        warn(getInvalidTypeMessage(name, value, expectedTypes), vm);
        return;
    }
    const validator = prop.validator;
    if (validator) {
        if (!validator(value)) {
            warn('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
        }
    }
}
const simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
function assertType(value, type, vm) {
    let valid;
    const expectedType = getType(type);
    if (simpleCheckRE.test(expectedType)) {
        const t = typeof value;
        valid = t === expectedType.toLowerCase();
        // for primitive wrapper objects
        if (!valid && t === 'object') {
            valid = value instanceof type;
        }
    }
    else if (expectedType === 'Object') {
        valid = isPlainObject(value);
    }
    else if (expectedType === 'Array') {
        valid = isArray(value);
    }
    else {
        try {
            valid = value instanceof type;
        }
        catch (e) {
            warn('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
            valid = false;
        }
    }
    return {
        valid,
        expectedType
    };
}
const functionTypeCheckRE = /^\s*function (\w+)/;
/**
 * Use function string name to check built-in types,
 * because a simple equality check will fail when running
 * across different vms / iframes.
 */
function getType(fn) {
    const match = fn && fn.toString().match(functionTypeCheckRE);
    return match ? match[1] : '';
}
function isSameType(a, b) {
    return getType(a) === getType(b);
}
function getTypeIndex(type, expectedTypes) {
    if (!isArray(expectedTypes)) {
        return isSameType(expectedTypes, type) ? 0 : -1;
    }
    for (let i = 0, len = expectedTypes.length; i < len; i++) {
        if (isSameType(expectedTypes[i], type)) {
            return i;
        }
    }
    return -1;
}
function getInvalidTypeMessage(name, value, expectedTypes) {
    let message = `Invalid prop: type check failed for prop "${name}".` +
        ` Expected ${expectedTypes.map(capitalize).join(', ')}`;
    const expectedType = expectedTypes[0];
    const receivedType = toRawType(value);
    // check if we need to specify expected value
    if (expectedTypes.length === 1 &&
        isExplicable(expectedType) &&
        isExplicable(typeof value) &&
        !isBoolean(expectedType, receivedType)) {
        message += ` with value ${styleValue(value, expectedType)}`;
    }
    message += `, got ${receivedType} `;
    // check if we need to specify received value
    if (isExplicable(receivedType)) {
        message += `with value ${styleValue(value, receivedType)}.`;
    }
    return message;
}
function styleValue(value, type) {
    if (type === 'String') {
        return `"${value}"`;
    }
    else if (type === 'Number') {
        return `${Number(value)}`;
    }
    else {
        return `${value}`;
    }
}
const EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
function isExplicable(value) {
    return EXPLICABLE_TYPES.some(elem => value.toLowerCase() === elem);
}
function isBoolean(...args) {
    return args.some(elem => elem.toLowerCase() === 'boolean');
}

/* not type checking this file because flow doesn't play well with Proxy */
let initProxy;
{
    const allowedGlobals = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
        'require' // for Webpack/Browserify
    );
    const warnNonPresent = (target, key) => {
        warn(`Property or method "${key}" is not defined on the instance but ` +
            'referenced during render. Make sure that this property is reactive, ' +
            'either in the data option, or for class-based components, by ' +
            'initializing the property. ' +
            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
    };
    const warnReservedPrefix = (target, key) => {
        warn(`Property "${key}" must be accessed with "$data.${key}" because ` +
            'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
            'prevent conflicts with Vue internals. ' +
            'See: https://v2.vuejs.org/v2/api/#data', target);
    };
    const hasProxy = typeof Proxy !== 'undefined' && isNative(Proxy);
    if (hasProxy) {
        const isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
        config.keyCodes = new Proxy(config.keyCodes, {
            set(target, key, value) {
                if (isBuiltInModifier(key)) {
                    warn(`Avoid overwriting built-in modifier in config.keyCodes: .${key}`);
                    return false;
                }
                else {
                    target[key] = value;
                    return true;
                }
            }
        });
    }
    const hasHandler = {
        has(target, key) {
            const has = key in target;
            const isAllowed = allowedGlobals(key) ||
                (typeof key === 'string' &&
                    key.charAt(0) === '_' &&
                    !(key in target.$data));
            if (!has && !isAllowed) {
                if (key in target.$data)
                    warnReservedPrefix(target, key);
                else
                    warnNonPresent(target, key);
            }
            return has || !isAllowed;
        }
    };
    const getHandler = {
        get(target, key) {
            if (typeof key === 'string' && !(key in target)) {
                if (key in target.$data)
                    warnReservedPrefix(target, key);
                else
                    warnNonPresent(target, key);
            }
            return target[key];
        }
    };
    initProxy = function initProxy(vm) {
        if (hasProxy) {
            // determine which proxy handler to use
            const options = vm.$options;
            const handlers = options.render && options.render._withStripped ? getHandler : hasHandler;
            vm._renderProxy = new Proxy(vm, handlers);
        }
        else {
            vm._renderProxy = vm;
        }
    };
}

const sharedPropertyDefinition = {
    enumerable: true,
    configurable: true,
    get: noop,
    set: noop
};
function proxy(target, sourceKey, key) {
    sharedPropertyDefinition.get = function proxyGetter() {
        return this[sourceKey][key];
    };
    sharedPropertyDefinition.set = function proxySetter(val) {
        this[sourceKey][key] = val;
    };
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function initState(vm) {
    const opts = vm.$options;
    if (opts.props)
        initProps$1(vm, opts.props);
    // Composition API
    initSetup(vm);
    if (opts.methods)
        initMethods(vm, opts.methods);
    if (opts.data) {
        initData(vm);
    }
    else {
        const ob = observe((vm._data = {}));
        ob && ob.vmCount++;
    }
    if (opts.computed)
        initComputed$1(vm, opts.computed);
    if (opts.watch && opts.watch !== nativeWatch) {
        initWatch(vm, opts.watch);
    }
}
function initProps$1(vm, propsOptions) {
    const propsData = vm.$options.propsData || {};
    const props = (vm._props = shallowReactive({}));
    // cache prop keys so that future props updates can iterate using Array
    // instead of dynamic object key enumeration.
    const keys = (vm.$options._propKeys = []);
    const isRoot = !vm.$parent;
    // root instance props should be converted
    if (!isRoot) {
        toggleObserving(false);
    }
    for (const key in propsOptions) {
        keys.push(key);
        const value = validateProp(key, propsOptions, propsData, vm);
        /* istanbul ignore else */
        {
            const hyphenatedKey = hyphenate(key);
            if (isReservedAttribute(hyphenatedKey) ||
                config.isReservedAttr(hyphenatedKey)) {
                warn(`"${hyphenatedKey}" is a reserved attribute and cannot be used as component prop.`, vm);
            }
            defineReactive(props, key, value, () => {
                if (!isRoot && !isUpdatingChildComponent) {
                    warn(`Avoid mutating a prop directly since the value will be ` +
                        `overwritten whenever the parent component re-renders. ` +
                        `Instead, use a data or computed property based on the prop's ` +
                        `value. Prop being mutated: "${key}"`, vm);
                }
            });
        }
        // static props are already proxied on the component's prototype
        // during Vue.extend(). We only need to proxy props defined at
        // instantiation here.
        if (!(key in vm)) {
            proxy(vm, `_props`, key);
        }
    }
    toggleObserving(true);
}
function initData(vm) {
    let data = vm.$options.data;
    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
    if (!isPlainObject(data)) {
        data = {};
        warn('data functions should return an object:\n' +
                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
    }
    // proxy data on instance
    const keys = Object.keys(data);
    const props = vm.$options.props;
    const methods = vm.$options.methods;
    let i = keys.length;
    while (i--) {
        const key = keys[i];
        {
            if (methods && hasOwn(methods, key)) {
                warn(`Method "${key}" has already been defined as a data property.`, vm);
            }
        }
        if (props && hasOwn(props, key)) {
            warn(`The data property "${key}" is already declared as a prop. ` +
                    `Use prop default value instead.`, vm);
        }
        else if (!isReserved(key)) {
            proxy(vm, `_data`, key);
        }
    }
    // observe data
    const ob = observe(data);
    ob && ob.vmCount++;
}
function getData(data, vm) {
    // #7573 disable dep collection when invoking data getters
    pushTarget();
    try {
        return data.call(vm, vm);
    }
    catch (e) {
        handleError(e, vm, `data()`);
        return {};
    }
    finally {
        popTarget();
    }
}
const computedWatcherOptions = { lazy: true };
function initComputed$1(vm, computed) {
    // $flow-disable-line
    const watchers = (vm._computedWatchers = Object.create(null));
    // computed properties are just getters during SSR
    const isSSR = isServerRendering();
    for (const key in computed) {
        const userDef = computed[key];
        const getter = isFunction(userDef) ? userDef : userDef.get;
        if (getter == null) {
            warn(`Getter is missing for computed property "${key}".`, vm);
        }
        if (!isSSR) {
            // create internal watcher for the computed property.
            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
        }
        // component-defined computed properties are already defined on the
        // component prototype. We only need to define computed properties defined
        // at instantiation here.
        if (!(key in vm)) {
            defineComputed(vm, key, userDef);
        }
        else {
            if (key in vm.$data) {
                warn(`The computed property "${key}" is already defined in data.`, vm);
            }
            else if (vm.$options.props && key in vm.$options.props) {
                warn(`The computed property "${key}" is already defined as a prop.`, vm);
            }
            else if (vm.$options.methods && key in vm.$options.methods) {
                warn(`The computed property "${key}" is already defined as a method.`, vm);
            }
        }
    }
}
function defineComputed(target, key, userDef) {
    const shouldCache = !isServerRendering();
    if (isFunction(userDef)) {
        sharedPropertyDefinition.get = shouldCache
            ? createComputedGetter(key)
            : createGetterInvoker(userDef);
        sharedPropertyDefinition.set = noop;
    }
    else {
        sharedPropertyDefinition.get = userDef.get
            ? shouldCache && userDef.cache !== false
                ? createComputedGetter(key)
                : createGetterInvoker(userDef.get)
            : noop;
        sharedPropertyDefinition.set = userDef.set || noop;
    }
    if (sharedPropertyDefinition.set === noop) {
        sharedPropertyDefinition.set = function () {
            warn(`Computed property "${key}" was assigned to but it has no setter.`, this);
        };
    }
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function createComputedGetter(key) {
    return function computedGetter() {
        const watcher = this._computedWatchers && this._computedWatchers[key];
        if (watcher) {
            if (watcher.dirty) {
                watcher.evaluate();
            }
            if (Dep.target) {
                if (Dep.target.onTrack) {
                    Dep.target.onTrack({
                        effect: Dep.target,
                        target: this,
                        type: "get" /* TrackOpTypes.GET */,
                        key
                    });
                }
                watcher.depend();
            }
            return watcher.value;
        }
    };
}
function createGetterInvoker(fn) {
    return function computedGetter() {
        return fn.call(this, this);
    };
}
function initMethods(vm, methods) {
    const props = vm.$options.props;
    for (const key in methods) {
        {
            if (typeof methods[key] !== 'function') {
                warn(`Method "${key}" has type "${typeof methods[key]}" in the component definition. ` +
                    `Did you reference the function correctly?`, vm);
            }
            if (props && hasOwn(props, key)) {
                warn(`Method "${key}" has already been defined as a prop.`, vm);
            }
            if (key in vm && isReserved(key)) {
                warn(`Method "${key}" conflicts with an existing Vue instance method. ` +
                    `Avoid defining component methods that start with _ or $.`);
            }
        }
        vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
    }
}
function initWatch(vm, watch) {
    for (const key in watch) {
        const handler = watch[key];
        if (isArray(handler)) {
            for (let i = 0; i < handler.length; i++) {
                createWatcher(vm, key, handler[i]);
            }
        }
        else {
            createWatcher(vm, key, handler);
        }
    }
}
function createWatcher(vm, expOrFn, handler, options) {
    if (isPlainObject(handler)) {
        options = handler;
        handler = handler.handler;
    }
    if (typeof handler === 'string') {
        handler = vm[handler];
    }
    return vm.$watch(expOrFn, handler, options);
}
function stateMixin(Vue) {
    // flow somehow has problems with directly declared definition object
    // when using Object.defineProperty, so we have to procedurally build up
    // the object here.
    const dataDef = {};
    dataDef.get = function () {
        return this._data;
    };
    const propsDef = {};
    propsDef.get = function () {
        return this._props;
    };
    {
        dataDef.set = function () {
            warn('Avoid replacing instance root $data. ' +
                'Use nested data properties instead.', this);
        };
        propsDef.set = function () {
            warn(`$props is readonly.`, this);
        };
    }
    Object.defineProperty(Vue.prototype, '$data', dataDef);
    Object.defineProperty(Vue.prototype, '$props', propsDef);
    Vue.prototype.$set = set;
    Vue.prototype.$delete = del;
    Vue.prototype.$watch = function (expOrFn, cb, options) {
        const vm = this;
        if (isPlainObject(cb)) {
            return createWatcher(vm, expOrFn, cb, options);
        }
        options = options || {};
        options.user = true;
        const watcher = new Watcher(vm, expOrFn, cb, options);
        if (options.immediate) {
            const info = `callback for immediate watcher "${watcher.expression}"`;
            pushTarget();
            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
            popTarget();
        }
        return function unwatchFn() {
            watcher.teardown();
        };
    };
}

let uid = 0;
function initMixin$1(Vue) {
    Vue.prototype._init = function (options) {
        const vm = this;
        // a uid
        vm._uid = uid++;
        let startTag, endTag;
        /* istanbul ignore if */
        if (config.performance && mark) {
            startTag = `vue-perf-start:${vm._uid}`;
            endTag = `vue-perf-end:${vm._uid}`;
            mark(startTag);
        }
        // a flag to mark this as a Vue instance without having to do instanceof
        // check
        vm._isVue = true;
        // avoid instances from being observed
        vm.__v_skip = true;
        // effect scope
        vm._scope = new EffectScope(true /* detached */);
        vm._scope._vm = true;
        // merge options
        if (options && options._isComponent) {
            // optimize internal component instantiation
            // since dynamic options merging is pretty slow, and none of the
            // internal component options needs special treatment.
            initInternalComponent(vm, options);
        }
        else {
            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
        }
        /* istanbul ignore else */
        {
            initProxy(vm);
        }
        // expose real self
        vm._self = vm;
        initLifecycle(vm);
        initEvents(vm);
        initRender(vm);
        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
        initInjections(vm); // resolve injections before data/props
        initState(vm);
        initProvide(vm); // resolve provide after data/props
        callHook$1(vm, 'created');
        /* istanbul ignore if */
        if (config.performance && mark) {
            vm._name = formatComponentName(vm, false);
            mark(endTag);
            measure(`vue ${vm._name} init`, startTag, endTag);
        }
        if (vm.$options.el) {
            vm.$mount(vm.$options.el);
        }
    };
}
function initInternalComponent(vm, options) {
    const opts = (vm.$options = Object.create(vm.constructor.options));
    // doing this because it's faster than dynamic enumeration.
    const parentVnode = options._parentVnode;
    opts.parent = options.parent;
    opts._parentVnode = parentVnode;
    const vnodeComponentOptions = parentVnode.componentOptions;
    opts.propsData = vnodeComponentOptions.propsData;
    opts._parentListeners = vnodeComponentOptions.listeners;
    opts._renderChildren = vnodeComponentOptions.children;
    opts._componentTag = vnodeComponentOptions.tag;
    if (options.render) {
        opts.render = options.render;
        opts.staticRenderFns = options.staticRenderFns;
    }
}
function resolveConstructorOptions(Ctor) {
    let options = Ctor.options;
    if (Ctor.super) {
        const superOptions = resolveConstructorOptions(Ctor.super);
        const cachedSuperOptions = Ctor.superOptions;
        if (superOptions !== cachedSuperOptions) {
            // super option changed,
            // need to resolve new options.
            Ctor.superOptions = superOptions;
            // check if there are any late-modified/attached options (#4976)
            const modifiedOptions = resolveModifiedOptions(Ctor);
            // update base extend options
            if (modifiedOptions) {
                extend(Ctor.extendOptions, modifiedOptions);
            }
            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
            if (options.name) {
                options.components[options.name] = Ctor;
            }
        }
    }
    return options;
}
function resolveModifiedOptions(Ctor) {
    let modified;
    const latest = Ctor.options;
    const sealed = Ctor.sealedOptions;
    for (const key in latest) {
        if (latest[key] !== sealed[key]) {
            if (!modified)
                modified = {};
            modified[key] = latest[key];
        }
    }
    return modified;
}

function Vue(options) {
    if (!(this instanceof Vue)) {
        warn('Vue is a constructor and should be called with the `new` keyword');
    }
    this._init(options);
}
//@ts-expect-error Vue has function type
initMixin$1(Vue);
//@ts-expect-error Vue has function type
stateMixin(Vue);
//@ts-expect-error Vue has function type
eventsMixin(Vue);
//@ts-expect-error Vue has function type
lifecycleMixin(Vue);
//@ts-expect-error Vue has function type
renderMixin(Vue);

function initUse(Vue) {
    Vue.use = function (plugin) {
        const installedPlugins = this._installedPlugins || (this._installedPlugins = []);
        if (installedPlugins.indexOf(plugin) > -1) {
            return this;
        }
        // additional parameters
        const args = toArray(arguments, 1);
        args.unshift(this);
        if (isFunction(plugin.install)) {
            plugin.install.apply(plugin, args);
        }
        else if (isFunction(plugin)) {
            plugin.apply(null, args);
        }
        installedPlugins.push(plugin);
        return this;
    };
}

function initMixin(Vue) {
    Vue.mixin = function (mixin) {
        this.options = mergeOptions(this.options, mixin);
        return this;
    };
}

function initExtend(Vue) {
    /**
     * Each instance constructor, including Vue, has a unique
     * cid. This enables us to create wrapped "child
     * constructors" for prototypal inheritance and cache them.
     */
    Vue.cid = 0;
    let cid = 1;
    /**
     * Class inheritance
     */
    Vue.extend = function (extendOptions) {
        extendOptions = extendOptions || {};
        const Super = this;
        const SuperId = Super.cid;
        const cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
        if (cachedCtors[SuperId]) {
            return cachedCtors[SuperId];
        }
        const name = getComponentName(extendOptions) || getComponentName(Super.options);
        if (name) {
            validateComponentName(name);
        }
        const Sub = function VueComponent(options) {
            this._init(options);
        };
        Sub.prototype = Object.create(Super.prototype);
        Sub.prototype.constructor = Sub;
        Sub.cid = cid++;
        Sub.options = mergeOptions(Super.options, extendOptions);
        Sub['super'] = Super;
        // For props and computed properties, we define the proxy getters on
        // the Vue instances at extension time, on the extended prototype. This
        // avoids Object.defineProperty calls for each instance created.
        if (Sub.options.props) {
            initProps(Sub);
        }
        if (Sub.options.computed) {
            initComputed(Sub);
        }
        // allow further extension/mixin/plugin usage
        Sub.extend = Super.extend;
        Sub.mixin = Super.mixin;
        Sub.use = Super.use;
        // create asset registers, so extended classes
        // can have their private assets too.
        ASSET_TYPES.forEach(function (type) {
            Sub[type] = Super[type];
        });
        // enable recursive self-lookup
        if (name) {
            Sub.options.components[name] = Sub;
        }
        // keep a reference to the super options at extension time.
        // later at instantiation we can check if Super's options have
        // been updated.
        Sub.superOptions = Super.options;
        Sub.extendOptions = extendOptions;
        Sub.sealedOptions = extend({}, Sub.options);
        // cache constructor
        cachedCtors[SuperId] = Sub;
        return Sub;
    };
}
function initProps(Comp) {
    const props = Comp.options.props;
    for (const key in props) {
        proxy(Comp.prototype, `_props`, key);
    }
}
function initComputed(Comp) {
    const computed = Comp.options.computed;
    for (const key in computed) {
        defineComputed(Comp.prototype, key, computed[key]);
    }
}

function initAssetRegisters(Vue) {
    /**
     * Create asset registration methods.
     */
    ASSET_TYPES.forEach(type => {
        // @ts-expect-error function is not exact same type
        Vue[type] = function (id, definition) {
            if (!definition) {
                return this.options[type + 's'][id];
            }
            else {
                /* istanbul ignore if */
                if (type === 'component') {
                    validateComponentName(id);
                }
                if (type === 'component' && isPlainObject(definition)) {
                    // @ts-expect-error
                    definition.name = definition.name || id;
                    definition = this.options._base.extend(definition);
                }
                if (type === 'directive' && isFunction(definition)) {
                    definition = { bind: definition, update: definition };
                }
                this.options[type + 's'][id] = definition;
                return definition;
            }
        };
    });
}

function _getComponentName(opts) {
    return opts && (getComponentName(opts.Ctor.options) || opts.tag);
}
function matches(pattern, name) {
    if (isArray(pattern)) {
        return pattern.indexOf(name) > -1;
    }
    else if (typeof pattern === 'string') {
        return pattern.split(',').indexOf(name) > -1;
    }
    else if (isRegExp(pattern)) {
        return pattern.test(name);
    }
    /* istanbul ignore next */
    return false;
}
function pruneCache(keepAliveInstance, filter) {
    const { cache, keys, _vnode } = keepAliveInstance;
    for (const key in cache) {
        const entry = cache[key];
        if (entry) {
            const name = entry.name;
            if (name && !filter(name)) {
                pruneCacheEntry(cache, key, keys, _vnode);
            }
        }
    }
}
function pruneCacheEntry(cache, key, keys, current) {
    const entry = cache[key];
    if (entry && (!current || entry.tag !== current.tag)) {
        // @ts-expect-error can be undefined
        entry.componentInstance.$destroy();
    }
    cache[key] = null;
    remove$2(keys, key);
}
const patternTypes = [String, RegExp, Array];
// TODO defineComponent
var KeepAlive = {
    name: 'keep-alive',
    abstract: true,
    props: {
        include: patternTypes,
        exclude: patternTypes,
        max: [String, Number]
    },
    methods: {
        cacheVNode() {
            const { cache, keys, vnodeToCache, keyToCache } = this;
            if (vnodeToCache) {
                const { tag, componentInstance, componentOptions } = vnodeToCache;
                cache[keyToCache] = {
                    name: _getComponentName(componentOptions),
                    tag,
                    componentInstance
                };
                keys.push(keyToCache);
                // prune oldest entry
                if (this.max && keys.length > parseInt(this.max)) {
                    pruneCacheEntry(cache, keys[0], keys, this._vnode);
                }
                this.vnodeToCache = null;
            }
        }
    },
    created() {
        this.cache = Object.create(null);
        this.keys = [];
    },
    destroyed() {
        for (const key in this.cache) {
            pruneCacheEntry(this.cache, key, this.keys);
        }
    },
    mounted() {
        this.cacheVNode();
        this.$watch('include', val => {
            pruneCache(this, name => matches(val, name));
        });
        this.$watch('exclude', val => {
            pruneCache(this, name => !matches(val, name));
        });
    },
    updated() {
        this.cacheVNode();
    },
    render() {
        const slot = this.$slots.default;
        const vnode = getFirstComponentChild(slot);
        const componentOptions = vnode && vnode.componentOptions;
        if (componentOptions) {
            // check pattern
            const name = _getComponentName(componentOptions);
            const { include, exclude } = this;
            if (
            // not included
            (include && (!name || !matches(include, name))) ||
                // excluded
                (exclude && name && matches(exclude, name))) {
                return vnode;
            }
            const { cache, keys } = this;
            const key = vnode.key == null
                ? // same constructor may get registered as different local components
                    // so cid alone is not enough (#3269)
                    componentOptions.Ctor.cid +
                        (componentOptions.tag ? `::${componentOptions.tag}` : '')
                : vnode.key;
            if (cache[key]) {
                vnode.componentInstance = cache[key].componentInstance;
                // make current key freshest
                remove$2(keys, key);
                keys.push(key);
            }
            else {
                // delay setting the cache until update
                this.vnodeToCache = vnode;
                this.keyToCache = key;
            }
            // @ts-expect-error can vnode.data can be undefined
            vnode.data.keepAlive = true;
        }
        return vnode || (slot && slot[0]);
    }
};

var builtInComponents = {
    KeepAlive
};

function initGlobalAPI(Vue) {
    // config
    const configDef = {};
    configDef.get = () => config;
    {
        configDef.set = () => {
            warn('Do not replace the Vue.config object, set individual fields instead.');
        };
    }
    Object.defineProperty(Vue, 'config', configDef);
    // exposed util methods.
    // NOTE: these are not considered part of the public API - avoid relying on
    // them unless you are aware of the risk.
    Vue.util = {
        warn,
        extend,
        mergeOptions,
        defineReactive
    };
    Vue.set = set;
    Vue.delete = del;
    Vue.nextTick = nextTick;
    // 2.6 explicit observable API
    Vue.observable = (obj) => {
        observe(obj);
        return obj;
    };
    Vue.options = Object.create(null);
    ASSET_TYPES.forEach(type => {
        Vue.options[type + 's'] = Object.create(null);
    });
    // this is used to identify the "base" constructor to extend all plain-object
    // components with in Weex's multi-instance scenarios.
    Vue.options._base = Vue;
    extend(Vue.options.components, builtInComponents);
    initUse(Vue);
    initMixin(Vue);
    initExtend(Vue);
    initAssetRegisters(Vue);
}

initGlobalAPI(Vue);
Object.defineProperty(Vue.prototype, '$isServer', {
    get: isServerRendering
});
Object.defineProperty(Vue.prototype, '$ssrContext', {
    get() {
        /* istanbul ignore next */
        return this.$vnode && this.$vnode.ssrContext;
    }
});
// expose FunctionalRenderContext for ssr runtime helper installation
Object.defineProperty(Vue, 'FunctionalRenderContext', {
    value: FunctionalRenderContext
});
Vue.version = version;

// these are reserved for web because they are directly compiled away
// during template compilation
const isReservedAttr = makeMap('style,class');
// attributes that should be using props for binding
const acceptValue = makeMap('input,textarea,option,select,progress');
const mustUseProp = (tag, type, attr) => {
    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
        (attr === 'selected' && tag === 'option') ||
        (attr === 'checked' && tag === 'input') ||
        (attr === 'muted' && tag === 'video'));
};
const isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
const isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
const convertEnumeratedValue = (key, value) => {
    return isFalsyAttrValue(value) || value === 'false'
        ? 'false'
        : // allow arbitrary string value for contenteditable
            key === 'contenteditable' && isValidContentEditableValue(value)
                ? value
                : 'true';
};
const isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
    'required,reversed,scoped,seamless,selected,sortable,' +
    'truespeed,typemustmatch,visible');
const xlinkNS = 'http://www.w3.org/1999/xlink';
const isXlink = (name) => {
    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
};
const getXlinkProp = (name) => {
    return isXlink(name) ? name.slice(6, name.length) : '';
};
const isFalsyAttrValue = (val) => {
    return val == null || val === false;
};

function genClassForVnode(vnode) {
    let data = vnode.data;
    let parentNode = vnode;
    let childNode = vnode;
    while (isDef(childNode.componentInstance)) {
        childNode = childNode.componentInstance._vnode;
        if (childNode && childNode.data) {
            data = mergeClassData(childNode.data, data);
        }
    }
    // @ts-expect-error parentNode.parent not VNodeWithData
    while (isDef((parentNode = parentNode.parent))) {
        if (parentNode && parentNode.data) {
            data = mergeClassData(data, parentNode.data);
        }
    }
    return renderClass(data.staticClass, data.class);
}
function mergeClassData(child, parent) {
    return {
        staticClass: concat(child.staticClass, parent.staticClass),
        class: isDef(child.class) ? [child.class, parent.class] : parent.class
    };
}
function renderClass(staticClass, dynamicClass) {
    if (isDef(staticClass) || isDef(dynamicClass)) {
        return concat(staticClass, stringifyClass(dynamicClass));
    }
    /* istanbul ignore next */
    return '';
}
function concat(a, b) {
    return a ? (b ? a + ' ' + b : a) : b || '';
}
function stringifyClass(value) {
    if (Array.isArray(value)) {
        return stringifyArray(value);
    }
    if (isObject(value)) {
        return stringifyObject(value);
    }
    if (typeof value === 'string') {
        return value;
    }
    /* istanbul ignore next */
    return '';
}
function stringifyArray(value) {
    let res = '';
    let stringified;
    for (let i = 0, l = value.length; i < l; i++) {
        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
            if (res)
                res += ' ';
            res += stringified;
        }
    }
    return res;
}
function stringifyObject(value) {
    let res = '';
    for (const key in value) {
        if (value[key]) {
            if (res)
                res += ' ';
            res += key;
        }
    }
    return res;
}

const namespaceMap = {
    svg: 'http://www.w3.org/2000/svg',
    math: 'http://www.w3.org/1998/Math/MathML'
};
const isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
    'embed,object,param,source,canvas,script,noscript,del,ins,' +
    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
    'output,progress,select,textarea,' +
    'details,dialog,menu,menuitem,summary,' +
    'content,element,shadow,template,blockquote,iframe,tfoot');
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
const isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
const isReservedTag = (tag) => {
    return isHTMLTag(tag) || isSVG(tag);
};
function getTagNamespace(tag) {
    if (isSVG(tag)) {
        return 'svg';
    }
    // basic support for MathML
    // note it doesn't support other MathML elements being component roots
    if (tag === 'math') {
        return 'math';
    }
}
const unknownElementCache = Object.create(null);
function isUnknownElement(tag) {
    /* istanbul ignore if */
    if (!inBrowser) {
        return true;
    }
    if (isReservedTag(tag)) {
        return false;
    }
    tag = tag.toLowerCase();
    /* istanbul ignore if */
    if (unknownElementCache[tag] != null) {
        return unknownElementCache[tag];
    }
    const el = document.createElement(tag);
    if (tag.indexOf('-') > -1) {
        // http://stackoverflow.com/a/28210364/1070244
        return (unknownElementCache[tag] =
            el.constructor === window.HTMLUnknownElement ||
                el.constructor === window.HTMLElement);
    }
    else {
        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
    }
}
const isTextInputType = makeMap('text,number,password,search,email,tel,url');

/**
 * Query an element selector if it's not an element already.
 */
function query(el) {
    if (typeof el === 'string') {
        const selected = document.querySelector(el);
        if (!selected) {
            warn('Cannot find element: ' + el);
            return document.createElement('div');
        }
        return selected;
    }
    else {
        return el;
    }
}

function createElement(tagName, vnode) {
    const elm = document.createElement(tagName);
    if (tagName !== 'select') {
        return elm;
    }
    // false or null will remove the attribute but undefined will not
    if (vnode.data &&
        vnode.data.attrs &&
        vnode.data.attrs.multiple !== undefined) {
        elm.setAttribute('multiple', 'multiple');
    }
    return elm;
}
function createElementNS(namespace, tagName) {
    return document.createElementNS(namespaceMap[namespace], tagName);
}
function createTextNode(text) {
    return document.createTextNode(text);
}
function createComment(text) {
    return document.createComment(text);
}
function insertBefore(parentNode, newNode, referenceNode) {
    parentNode.insertBefore(newNode, referenceNode);
}
function removeChild(node, child) {
    node.removeChild(child);
}
function appendChild(node, child) {
    node.appendChild(child);
}
function parentNode(node) {
    return node.parentNode;
}
function nextSibling(node) {
    return node.nextSibling;
}
function tagName(node) {
    return node.tagName;
}
function setTextContent(node, text) {
    node.textContent = text;
}
function setStyleScope(node, scopeId) {
    node.setAttribute(scopeId, '');
}

var nodeOps = /*#__PURE__*/Object.freeze({
  __proto__: null,
  createElement: createElement,
  createElementNS: createElementNS,
  createTextNode: createTextNode,
  createComment: createComment,
  insertBefore: insertBefore,
  removeChild: removeChild,
  appendChild: appendChild,
  parentNode: parentNode,
  nextSibling: nextSibling,
  tagName: tagName,
  setTextContent: setTextContent,
  setStyleScope: setStyleScope
});

var ref = {
    create(_, vnode) {
        registerRef(vnode);
    },
    update(oldVnode, vnode) {
        if (oldVnode.data.ref !== vnode.data.ref) {
            registerRef(oldVnode, true);
            registerRef(vnode);
        }
    },
    destroy(vnode) {
        registerRef(vnode, true);
    }
};
function registerRef(vnode, isRemoval) {
    const ref = vnode.data.ref;
    if (!isDef(ref))
        return;
    const vm = vnode.context;
    const refValue = vnode.componentInstance || vnode.elm;
    const value = isRemoval ? null : refValue;
    const $refsValue = isRemoval ? undefined : refValue;
    if (isFunction(ref)) {
        invokeWithErrorHandling(ref, vm, [value], vm, `template ref function`);
        return;
    }
    const isFor = vnode.data.refInFor;
    const _isString = typeof ref === 'string' || typeof ref === 'number';
    const _isRef = isRef(ref);
    const refs = vm.$refs;
    if (_isString || _isRef) {
        if (isFor) {
            const existing = _isString ? refs[ref] : ref.value;
            if (isRemoval) {
                isArray(existing) && remove$2(existing, refValue);
            }
            else {
                if (!isArray(existing)) {
                    if (_isString) {
                        refs[ref] = [refValue];
                        setSetupRef(vm, ref, refs[ref]);
                    }
                    else {
                        ref.value = [refValue];
                    }
                }
                else if (!existing.includes(refValue)) {
                    existing.push(refValue);
                }
            }
        }
        else if (_isString) {
            if (isRemoval && refs[ref] !== refValue) {
                return;
            }
            refs[ref] = $refsValue;
            setSetupRef(vm, ref, value);
        }
        else if (_isRef) {
            if (isRemoval && ref.value !== refValue) {
                return;
            }
            ref.value = value;
        }
        else {
            warn(`Invalid template ref type: ${typeof ref}`);
        }
    }
}
function setSetupRef({ _setupState }, key, val) {
    if (_setupState && hasOwn(_setupState, key)) {
        if (isRef(_setupState[key])) {
            _setupState[key].value = val;
        }
        else {
            _setupState[key] = val;
        }
    }
}

/**
 * Virtual DOM patching algorithm based on Snabbdom by
 * Simon Friis Vindum (@paldepind)
 * Licensed under the MIT License
 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
 *
 * modified by Evan You (@yyx990803)
 *
 * Not type-checking this because this file is perf-critical and the cost
 * of making flow understand it is not worth it.
 */
const emptyNode = new VNode('', {}, []);
const hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
function sameVnode(a, b) {
    return (a.key === b.key &&
        a.asyncFactory === b.asyncFactory &&
        ((a.tag === b.tag &&
            a.isComment === b.isComment &&
            isDef(a.data) === isDef(b.data) &&
            sameInputType(a, b)) ||
            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
}
function sameInputType(a, b) {
    if (a.tag !== 'input')
        return true;
    let i;
    const typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
    const typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
}
function createKeyToOldIdx(children, beginIdx, endIdx) {
    let i, key;
    const map = {};
    for (i = beginIdx; i <= endIdx; ++i) {
        key = children[i].key;
        if (isDef(key))
            map[key] = i;
    }
    return map;
}
function createPatchFunction(backend) {
    let i, j;
    const cbs = {};
    const { modules, nodeOps } = backend;
    for (i = 0; i < hooks.length; ++i) {
        cbs[hooks[i]] = [];
        for (j = 0; j < modules.length; ++j) {
            if (isDef(modules[j][hooks[i]])) {
                cbs[hooks[i]].push(modules[j][hooks[i]]);
            }
        }
    }
    function emptyNodeAt(elm) {
        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
    }
    function createRmCb(childElm, listeners) {
        function remove() {
            if (--remove.listeners === 0) {
                removeNode(childElm);
            }
        }
        remove.listeners = listeners;
        return remove;
    }
    function removeNode(el) {
        const parent = nodeOps.parentNode(el);
        // element may have already been removed due to v-html / v-text
        if (isDef(parent)) {
            nodeOps.removeChild(parent, el);
        }
    }
    function isUnknownElement(vnode, inVPre) {
        return (!inVPre &&
            !vnode.ns &&
            !(config.ignoredElements.length &&
                config.ignoredElements.some(ignore => {
                    return isRegExp(ignore)
                        ? ignore.test(vnode.tag)
                        : ignore === vnode.tag;
                })) &&
            config.isUnknownElement(vnode.tag));
    }
    let creatingElmInVPre = 0;
    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // This vnode was used in a previous render!
            // now it's used as a new node, overwriting its elm would cause
            // potential patch errors down the road when it's used as an insertion
            // reference node. Instead, we clone the node on-demand before creating
            // associated DOM element for it.
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        vnode.isRootInsert = !nested; // for transition enter check
        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
            return;
        }
        const data = vnode.data;
        const children = vnode.children;
        const tag = vnode.tag;
        if (isDef(tag)) {
            {
                if (data && data.pre) {
                    creatingElmInVPre++;
                }
                if (isUnknownElement(vnode, creatingElmInVPre)) {
                    warn('Unknown custom element: <' +
                        tag +
                        '> - did you ' +
                        'register the component correctly? For recursive components, ' +
                        'make sure to provide the "name" option.', vnode.context);
                }
            }
            vnode.elm = vnode.ns
                ? nodeOps.createElementNS(vnode.ns, tag)
                : nodeOps.createElement(tag, vnode);
            setScope(vnode);
            createChildren(vnode, children, insertedVnodeQueue);
            if (isDef(data)) {
                invokeCreateHooks(vnode, insertedVnodeQueue);
            }
            insert(parentElm, vnode.elm, refElm);
            if (data && data.pre) {
                creatingElmInVPre--;
            }
        }
        else if (isTrue(vnode.isComment)) {
            vnode.elm = nodeOps.createComment(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
        else {
            vnode.elm = nodeOps.createTextNode(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
    }
    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        let i = vnode.data;
        if (isDef(i)) {
            const isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
            if (isDef((i = i.hook)) && isDef((i = i.init))) {
                i(vnode, false /* hydrating */);
            }
            // after calling the init hook, if the vnode is a child component
            // it should've created a child instance and mounted it. the child
            // component also has set the placeholder vnode's elm.
            // in that case we can just return the element and be done.
            if (isDef(vnode.componentInstance)) {
                initComponent(vnode, insertedVnodeQueue);
                insert(parentElm, vnode.elm, refElm);
                if (isTrue(isReactivated)) {
                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
                }
                return true;
            }
        }
    }
    function initComponent(vnode, insertedVnodeQueue) {
        if (isDef(vnode.data.pendingInsert)) {
            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
            vnode.data.pendingInsert = null;
        }
        vnode.elm = vnode.componentInstance.$el;
        if (isPatchable(vnode)) {
            invokeCreateHooks(vnode, insertedVnodeQueue);
            setScope(vnode);
        }
        else {
            // empty component root.
            // skip all element-related modules except for ref (#3455)
            registerRef(vnode);
            // make sure to invoke the insert hook
            insertedVnodeQueue.push(vnode);
        }
    }
    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        let i;
        // hack for #4339: a reactivated component with inner transition
        // does not trigger because the inner node's created hooks are not called
        // again. It's not ideal to involve module-specific logic in here but
        // there doesn't seem to be a better way to do it.
        let innerNode = vnode;
        while (innerNode.componentInstance) {
            innerNode = innerNode.componentInstance._vnode;
            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
                for (i = 0; i < cbs.activate.length; ++i) {
                    cbs.activate[i](emptyNode, innerNode);
                }
                insertedVnodeQueue.push(innerNode);
                break;
            }
        }
        // unlike a newly created component,
        // a reactivated keep-alive component doesn't insert itself
        insert(parentElm, vnode.elm, refElm);
    }
    function insert(parent, elm, ref) {
        if (isDef(parent)) {
            if (isDef(ref)) {
                if (nodeOps.parentNode(ref) === parent) {
                    nodeOps.insertBefore(parent, elm, ref);
                }
            }
            else {
                nodeOps.appendChild(parent, elm);
            }
        }
    }
    function createChildren(vnode, children, insertedVnodeQueue) {
        if (isArray(children)) {
            {
                checkDuplicateKeys(children);
            }
            for (let i = 0; i < children.length; ++i) {
                createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);
            }
        }
        else if (isPrimitive(vnode.text)) {
            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
        }
    }
    function isPatchable(vnode) {
        while (vnode.componentInstance) {
            vnode = vnode.componentInstance._vnode;
        }
        return isDef(vnode.tag);
    }
    function invokeCreateHooks(vnode, insertedVnodeQueue) {
        for (let i = 0; i < cbs.create.length; ++i) {
            cbs.create[i](emptyNode, vnode);
        }
        i = vnode.data.hook; // Reuse variable
        if (isDef(i)) {
            if (isDef(i.create))
                i.create(emptyNode, vnode);
            if (isDef(i.insert))
                insertedVnodeQueue.push(vnode);
        }
    }
    // set scope id attribute for scoped CSS.
    // this is implemented as a special case to avoid the overhead
    // of going through the normal attribute patching process.
    function setScope(vnode) {
        let i;
        if (isDef((i = vnode.fnScopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
        else {
            let ancestor = vnode;
            while (ancestor) {
                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
                    nodeOps.setStyleScope(vnode.elm, i);
                }
                ancestor = ancestor.parent;
            }
        }
        // for slot content they should also get the scopeId from the host instance.
        if (isDef((i = activeInstance)) &&
            i !== vnode.context &&
            i !== vnode.fnContext &&
            isDef((i = i.$options._scopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
    }
    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
        for (; startIdx <= endIdx; ++startIdx) {
            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
        }
    }
    function invokeDestroyHook(vnode) {
        let i, j;
        const data = vnode.data;
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.destroy)))
                i(vnode);
            for (i = 0; i < cbs.destroy.length; ++i)
                cbs.destroy[i](vnode);
        }
        if (isDef((i = vnode.children))) {
            for (j = 0; j < vnode.children.length; ++j) {
                invokeDestroyHook(vnode.children[j]);
            }
        }
    }
    function removeVnodes(vnodes, startIdx, endIdx) {
        for (; startIdx <= endIdx; ++startIdx) {
            const ch = vnodes[startIdx];
            if (isDef(ch)) {
                if (isDef(ch.tag)) {
                    removeAndInvokeRemoveHook(ch);
                    invokeDestroyHook(ch);
                }
                else {
                    // Text node
                    removeNode(ch.elm);
                }
            }
        }
    }
    function removeAndInvokeRemoveHook(vnode, rm) {
        if (isDef(rm) || isDef(vnode.data)) {
            let i;
            const listeners = cbs.remove.length + 1;
            if (isDef(rm)) {
                // we have a recursively passed down rm callback
                // increase the listeners count
                rm.listeners += listeners;
            }
            else {
                // directly removing
                rm = createRmCb(vnode.elm, listeners);
            }
            // recursively invoke hooks on child component root node
            if (isDef((i = vnode.componentInstance)) &&
                isDef((i = i._vnode)) &&
                isDef(i.data)) {
                removeAndInvokeRemoveHook(i, rm);
            }
            for (i = 0; i < cbs.remove.length; ++i) {
                cbs.remove[i](vnode, rm);
            }
            if (isDef((i = vnode.data.hook)) && isDef((i = i.remove))) {
                i(vnode, rm);
            }
            else {
                rm();
            }
        }
        else {
            removeNode(vnode.elm);
        }
    }
    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
        let oldStartIdx = 0;
        let newStartIdx = 0;
        let oldEndIdx = oldCh.length - 1;
        let oldStartVnode = oldCh[0];
        let oldEndVnode = oldCh[oldEndIdx];
        let newEndIdx = newCh.length - 1;
        let newStartVnode = newCh[0];
        let newEndVnode = newCh[newEndIdx];
        let oldKeyToIdx, idxInOld, vnodeToMove, refElm;
        // removeOnly is a special flag used only by <transition-group>
        // to ensure removed elements stay in correct relative positions
        // during leaving transitions
        const canMove = !removeOnly;
        {
            checkDuplicateKeys(newCh);
        }
        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
            if (isUndef(oldStartVnode)) {
                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
            }
            else if (isUndef(oldEndVnode)) {
                oldEndVnode = oldCh[--oldEndIdx];
            }
            else if (sameVnode(oldStartVnode, newStartVnode)) {
                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                oldStartVnode = oldCh[++oldStartIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else if (sameVnode(oldEndVnode, newEndVnode)) {
                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                oldEndVnode = oldCh[--oldEndIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldStartVnode, newEndVnode)) {
                // Vnode moved right
                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
                oldStartVnode = oldCh[++oldStartIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldEndVnode, newStartVnode)) {
                // Vnode moved left
                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
                oldEndVnode = oldCh[--oldEndIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else {
                if (isUndef(oldKeyToIdx))
                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
                idxInOld = isDef(newStartVnode.key)
                    ? oldKeyToIdx[newStartVnode.key]
                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
                if (isUndef(idxInOld)) {
                    // New element
                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                }
                else {
                    vnodeToMove = oldCh[idxInOld];
                    if (sameVnode(vnodeToMove, newStartVnode)) {
                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                        oldCh[idxInOld] = undefined;
                        canMove &&
                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
                    }
                    else {
                        // same key but different element. treat as new element
                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                    }
                }
                newStartVnode = newCh[++newStartIdx];
            }
        }
        if (oldStartIdx > oldEndIdx) {
            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
        }
        else if (newStartIdx > newEndIdx) {
            removeVnodes(oldCh, oldStartIdx, oldEndIdx);
        }
    }
    function checkDuplicateKeys(children) {
        const seenKeys = {};
        for (let i = 0; i < children.length; i++) {
            const vnode = children[i];
            const key = vnode.key;
            if (isDef(key)) {
                if (seenKeys[key]) {
                    warn(`Duplicate keys detected: '${key}'. This may cause an update error.`, vnode.context);
                }
                else {
                    seenKeys[key] = true;
                }
            }
        }
    }
    function findIdxInOld(node, oldCh, start, end) {
        for (let i = start; i < end; i++) {
            const c = oldCh[i];
            if (isDef(c) && sameVnode(node, c))
                return i;
        }
    }
    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
        if (oldVnode === vnode) {
            return;
        }
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // clone reused vnode
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        const elm = (vnode.elm = oldVnode.elm);
        if (isTrue(oldVnode.isAsyncPlaceholder)) {
            if (isDef(vnode.asyncFactory.resolved)) {
                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
            }
            else {
                vnode.isAsyncPlaceholder = true;
            }
            return;
        }
        // reuse element for static trees.
        // note we only do this if the vnode is cloned -
        // if the new node is not cloned it means the render functions have been
        // reset by the hot-reload-api and we need to do a proper re-render.
        if (isTrue(vnode.isStatic) &&
            isTrue(oldVnode.isStatic) &&
            vnode.key === oldVnode.key &&
            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
            vnode.componentInstance = oldVnode.componentInstance;
            return;
        }
        let i;
        const data = vnode.data;
        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
            i(oldVnode, vnode);
        }
        const oldCh = oldVnode.children;
        const ch = vnode.children;
        if (isDef(data) && isPatchable(vnode)) {
            for (i = 0; i < cbs.update.length; ++i)
                cbs.update[i](oldVnode, vnode);
            if (isDef((i = data.hook)) && isDef((i = i.update)))
                i(oldVnode, vnode);
        }
        if (isUndef(vnode.text)) {
            if (isDef(oldCh) && isDef(ch)) {
                if (oldCh !== ch)
                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
            }
            else if (isDef(ch)) {
                {
                    checkDuplicateKeys(ch);
                }
                if (isDef(oldVnode.text))
                    nodeOps.setTextContent(elm, '');
                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
            }
            else if (isDef(oldCh)) {
                removeVnodes(oldCh, 0, oldCh.length - 1);
            }
            else if (isDef(oldVnode.text)) {
                nodeOps.setTextContent(elm, '');
            }
        }
        else if (oldVnode.text !== vnode.text) {
            nodeOps.setTextContent(elm, vnode.text);
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
                i(oldVnode, vnode);
        }
    }
    function invokeInsertHook(vnode, queue, initial) {
        // delay insert hooks for component root nodes, invoke them after the
        // element is really inserted
        if (isTrue(initial) && isDef(vnode.parent)) {
            vnode.parent.data.pendingInsert = queue;
        }
        else {
            for (let i = 0; i < queue.length; ++i) {
                queue[i].data.hook.insert(queue[i]);
            }
        }
    }
    let hydrationBailed = false;
    // list of modules that can skip create hook during hydration because they
    // are already rendered on the client or has no need for initialization
    // Note: style is excluded because it relies on initial clone for future
    // deep updates (#7063).
    const isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
    // Note: this is a browser-only function so we can assume elms are DOM nodes.
    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
        let i;
        const { tag, data, children } = vnode;
        inVPre = inVPre || (data && data.pre);
        vnode.elm = elm;
        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
            vnode.isAsyncPlaceholder = true;
            return true;
        }
        // assert node match
        {
            if (!assertNodeMatch(elm, vnode, inVPre)) {
                return false;
            }
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.init)))
                i(vnode, true /* hydrating */);
            if (isDef((i = vnode.componentInstance))) {
                // child component. it should have hydrated its own tree.
                initComponent(vnode, insertedVnodeQueue);
                return true;
            }
        }
        if (isDef(tag)) {
            if (isDef(children)) {
                // empty element, allow client to pick up and populate children
                if (!elm.hasChildNodes()) {
                    createChildren(vnode, children, insertedVnodeQueue);
                }
                else {
                    // v-html and domProps: innerHTML
                    if (isDef((i = data)) &&
                        isDef((i = i.domProps)) &&
                        isDef((i = i.innerHTML))) {
                        if (i !== elm.innerHTML) {
                            /* istanbul ignore if */
                            if (typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('server innerHTML: ', i);
                                console.warn('client innerHTML: ', elm.innerHTML);
                            }
                            return false;
                        }
                    }
                    else {
                        // iterate and compare children lists
                        let childrenMatch = true;
                        let childNode = elm.firstChild;
                        for (let i = 0; i < children.length; i++) {
                            if (!childNode ||
                                !hydrate(childNode, children[i], insertedVnodeQueue, inVPre)) {
                                childrenMatch = false;
                                break;
                            }
                            childNode = childNode.nextSibling;
                        }
                        // if childNode is not null, it means the actual childNodes list is
                        // longer than the virtual children list.
                        if (!childrenMatch || childNode) {
                            /* istanbul ignore if */
                            if (typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
                            }
                            return false;
                        }
                    }
                }
            }
            if (isDef(data)) {
                let fullInvoke = false;
                for (const key in data) {
                    if (!isRenderedModule(key)) {
                        fullInvoke = true;
                        invokeCreateHooks(vnode, insertedVnodeQueue);
                        break;
                    }
                }
                if (!fullInvoke && data['class']) {
                    // ensure collecting deps for deep class bindings for future updates
                    traverse(data['class']);
                }
            }
        }
        else if (elm.data !== vnode.text) {
            elm.data = vnode.text;
        }
        return true;
    }
    function assertNodeMatch(node, vnode, inVPre) {
        if (isDef(vnode.tag)) {
            return (vnode.tag.indexOf('vue-component') === 0 ||
                (!isUnknownElement(vnode, inVPre) &&
                    vnode.tag.toLowerCase() ===
                        (node.tagName && node.tagName.toLowerCase())));
        }
        else {
            return node.nodeType === (vnode.isComment ? 8 : 3);
        }
    }
    return function patch(oldVnode, vnode, hydrating, removeOnly) {
        if (isUndef(vnode)) {
            if (isDef(oldVnode))
                invokeDestroyHook(oldVnode);
            return;
        }
        let isInitialPatch = false;
        const insertedVnodeQueue = [];
        if (isUndef(oldVnode)) {
            // empty mount (likely as component), create new root element
            isInitialPatch = true;
            createElm(vnode, insertedVnodeQueue);
        }
        else {
            const isRealElement = isDef(oldVnode.nodeType);
            if (!isRealElement && sameVnode(oldVnode, vnode)) {
                // patch existing root node
                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
            }
            else {
                if (isRealElement) {
                    // mounting to a real element
                    // check if this is server-rendered content and if we can perform
                    // a successful hydration.
                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
                        oldVnode.removeAttribute(SSR_ATTR);
                        hydrating = true;
                    }
                    if (isTrue(hydrating)) {
                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
                            invokeInsertHook(vnode, insertedVnodeQueue, true);
                            return oldVnode;
                        }
                        else {
                            warn('The client-side rendered virtual DOM tree is not matching ' +
                                'server-rendered content. This is likely caused by incorrect ' +
                                'HTML markup, for example nesting block-level elements inside ' +
                                '<p>, or missing <tbody>. Bailing hydration and performing ' +
                                'full client-side render.');
                        }
                    }
                    // either not server-rendered, or hydration failed.
                    // create an empty node and replace it
                    oldVnode = emptyNodeAt(oldVnode);
                }
                // replacing existing element
                const oldElm = oldVnode.elm;
                const parentElm = nodeOps.parentNode(oldElm);
                // create new node
                createElm(vnode, insertedVnodeQueue, 
                // extremely rare edge case: do not insert if old element is in a
                // leaving transition. Only happens when combining transition +
                // keep-alive + HOCs. (#4590)
                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
                // update parent placeholder node element, recursively
                if (isDef(vnode.parent)) {
                    let ancestor = vnode.parent;
                    const patchable = isPatchable(vnode);
                    while (ancestor) {
                        for (let i = 0; i < cbs.destroy.length; ++i) {
                            cbs.destroy[i](ancestor);
                        }
                        ancestor.elm = vnode.elm;
                        if (patchable) {
                            for (let i = 0; i < cbs.create.length; ++i) {
                                cbs.create[i](emptyNode, ancestor);
                            }
                            // #6513
                            // invoke insert hooks that may have been merged by create hooks.
                            // e.g. for directives that uses the "inserted" hook.
                            const insert = ancestor.data.hook.insert;
                            if (insert.merged) {
                                // start at index 1 to avoid re-invoking component mounted hook
                                for (let i = 1; i < insert.fns.length; i++) {
                                    insert.fns[i]();
                                }
                            }
                        }
                        else {
                            registerRef(ancestor);
                        }
                        ancestor = ancestor.parent;
                    }
                }
                // destroy old node
                if (isDef(parentElm)) {
                    removeVnodes([oldVnode], 0, 0);
                }
                else if (isDef(oldVnode.tag)) {
                    invokeDestroyHook(oldVnode);
                }
            }
        }
        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
        return vnode.elm;
    };
}

var directives = {
    create: updateDirectives,
    update: updateDirectives,
    destroy: function unbindDirectives(vnode) {
        // @ts-expect-error emptyNode is not VNodeWithData
        updateDirectives(vnode, emptyNode);
    }
};
function updateDirectives(oldVnode, vnode) {
    if (oldVnode.data.directives || vnode.data.directives) {
        _update(oldVnode, vnode);
    }
}
function _update(oldVnode, vnode) {
    const isCreate = oldVnode === emptyNode;
    const isDestroy = vnode === emptyNode;
    const oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
    const newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
    const dirsWithInsert = [];
    const dirsWithPostpatch = [];
    let key, oldDir, dir;
    for (key in newDirs) {
        oldDir = oldDirs[key];
        dir = newDirs[key];
        if (!oldDir) {
            // new directive, bind
            callHook(dir, 'bind', vnode, oldVnode);
            if (dir.def && dir.def.inserted) {
                dirsWithInsert.push(dir);
            }
        }
        else {
            // existing directive, update
            dir.oldValue = oldDir.value;
            dir.oldArg = oldDir.arg;
            callHook(dir, 'update', vnode, oldVnode);
            if (dir.def && dir.def.componentUpdated) {
                dirsWithPostpatch.push(dir);
            }
        }
    }
    if (dirsWithInsert.length) {
        const callInsert = () => {
            for (let i = 0; i < dirsWithInsert.length; i++) {
                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
            }
        };
        if (isCreate) {
            mergeVNodeHook(vnode, 'insert', callInsert);
        }
        else {
            callInsert();
        }
    }
    if (dirsWithPostpatch.length) {
        mergeVNodeHook(vnode, 'postpatch', () => {
            for (let i = 0; i < dirsWithPostpatch.length; i++) {
                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
            }
        });
    }
    if (!isCreate) {
        for (key in oldDirs) {
            if (!newDirs[key]) {
                // no longer present, unbind
                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
            }
        }
    }
}
const emptyModifiers = Object.create(null);
function normalizeDirectives(dirs, vm) {
    const res = Object.create(null);
    if (!dirs) {
        // $flow-disable-line
        return res;
    }
    let i, dir;
    for (i = 0; i < dirs.length; i++) {
        dir = dirs[i];
        if (!dir.modifiers) {
            // $flow-disable-line
            dir.modifiers = emptyModifiers;
        }
        res[getRawDirName(dir)] = dir;
        if (vm._setupState && vm._setupState.__sfc) {
            const setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
            if (typeof setupDef === 'function') {
                dir.def = {
                    bind: setupDef,
                    update: setupDef,
                };
            }
            else {
                dir.def = setupDef;
            }
        }
        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
    }
    // $flow-disable-line
    return res;
}
function getRawDirName(dir) {
    return (dir.rawName || `${dir.name}.${Object.keys(dir.modifiers || {}).join('.')}`);
}
function callHook(dir, hook, vnode, oldVnode, isDestroy) {
    const fn = dir.def && dir.def[hook];
    if (fn) {
        try {
            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
        }
        catch (e) {
            handleError(e, vnode.context, `directive ${dir.name} ${hook} hook`);
        }
    }
}

var baseModules = [ref, directives];

function updateAttrs(oldVnode, vnode) {
    const opts = vnode.componentOptions;
    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
        return;
    }
    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
        return;
    }
    let key, cur, old;
    const elm = vnode.elm;
    const oldAttrs = oldVnode.data.attrs || {};
    let attrs = vnode.data.attrs || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
        attrs = vnode.data.attrs = extend({}, attrs);
    }
    for (key in attrs) {
        cur = attrs[key];
        old = oldAttrs[key];
        if (old !== cur) {
            setAttr(elm, key, cur, vnode.data.pre);
        }
    }
    // #4391: in IE9, setting type can reset value for input[type=radio]
    // #6666: IE/Edge forces progress value down to 1 before setting a max
    /* istanbul ignore if */
    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
        setAttr(elm, 'value', attrs.value);
    }
    for (key in oldAttrs) {
        if (isUndef(attrs[key])) {
            if (isXlink(key)) {
                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
            }
            else if (!isEnumeratedAttr(key)) {
                elm.removeAttribute(key);
            }
        }
    }
}
function setAttr(el, key, value, isInPre) {
    if (isInPre || el.tagName.indexOf('-') > -1) {
        baseSetAttr(el, key, value);
    }
    else if (isBooleanAttr(key)) {
        // set attribute for blank value
        // e.g. <option disabled>Select one</option>
        if (isFalsyAttrValue(value)) {
            el.removeAttribute(key);
        }
        else {
            // technically allowfullscreen is a boolean attribute for <iframe>,
            // but Flash expects a value of "true" when used on <embed> tag
            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
            el.setAttribute(key, value);
        }
    }
    else if (isEnumeratedAttr(key)) {
        el.setAttribute(key, convertEnumeratedValue(key, value));
    }
    else if (isXlink(key)) {
        if (isFalsyAttrValue(value)) {
            el.removeAttributeNS(xlinkNS, getXlinkProp(key));
        }
        else {
            el.setAttributeNS(xlinkNS, key, value);
        }
    }
    else {
        baseSetAttr(el, key, value);
    }
}
function baseSetAttr(el, key, value) {
    if (isFalsyAttrValue(value)) {
        el.removeAttribute(key);
    }
    else {
        // #7138: IE10 & 11 fires input event when setting placeholder on
        // <textarea>... block the first input event and remove the blocker
        // immediately.
        /* istanbul ignore if */
        if (isIE &&
            !isIE9 &&
            el.tagName === 'TEXTAREA' &&
            key === 'placeholder' &&
            value !== '' &&
            !el.__ieph) {
            const blocker = e => {
                e.stopImmediatePropagation();
                el.removeEventListener('input', blocker);
            };
            el.addEventListener('input', blocker);
            // $flow-disable-line
            el.__ieph = true; /* IE placeholder patched */
        }
        el.setAttribute(key, value);
    }
}
var attrs = {
    create: updateAttrs,
    update: updateAttrs
};

function updateClass(oldVnode, vnode) {
    const el = vnode.elm;
    const data = vnode.data;
    const oldData = oldVnode.data;
    if (isUndef(data.staticClass) &&
        isUndef(data.class) &&
        (isUndef(oldData) ||
            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
        return;
    }
    let cls = genClassForVnode(vnode);
    // handle transition classes
    const transitionClass = el._transitionClasses;
    if (isDef(transitionClass)) {
        cls = concat(cls, stringifyClass(transitionClass));
    }
    // set the class
    if (cls !== el._prevClass) {
        el.setAttribute('class', cls);
        el._prevClass = cls;
    }
}
var klass = {
    create: updateClass,
    update: updateClass
};

// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
const RANGE_TOKEN = '__r';
const CHECKBOX_RADIO_TOKEN = '__c';

// normalize v-model event tokens that can only be determined at runtime.
// it's important to place the event as the first in the array because
// the whole point is ensuring the v-model callback gets called before
// user-attached handlers.
function normalizeEvents(on) {
    /* istanbul ignore if */
    if (isDef(on[RANGE_TOKEN])) {
        // IE input[type=range] only supports `change` event
        const event = isIE ? 'change' : 'input';
        on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);
        delete on[RANGE_TOKEN];
    }
    // This was originally intended to fix #4521 but no longer necessary
    // after 2.5. Keeping it for backwards compat with generated code from < 2.4
    /* istanbul ignore if */
    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
        delete on[CHECKBOX_RADIO_TOKEN];
    }
}
let target;
function createOnceHandler(event, handler, capture) {
    const _target = target; // save current target element in closure
    return function onceHandler() {
        const res = handler.apply(null, arguments);
        if (res !== null) {
            remove(event, onceHandler, capture, _target);
        }
    };
}
// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
// implementation and does not fire microtasks in between event propagation, so
// safe to exclude.
const useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
function add(name, handler, capture, passive) {
    // async edge case #6566: inner click event triggers patch, event handler
    // attached to outer element during patch, and triggered again. This
    // happens because browsers fire microtask ticks between event propagation.
    // the solution is simple: we save the timestamp when a handler is attached,
    // and the handler would only fire if the event passed to it was fired
    // AFTER it was attached.
    if (useMicrotaskFix) {
        const attachedTimestamp = currentFlushTimestamp;
        const original = handler;
        //@ts-expect-error
        handler = original._wrapper = function (e) {
            if (
            // no bubbling, should always fire.
            // this is just a safety net in case event.timeStamp is unreliable in
            // certain weird environments...
            e.target === e.currentTarget ||
                // event is fired after handler attachment
                e.timeStamp >= attachedTimestamp ||
                // bail for environments that have buggy event.timeStamp implementations
                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
                // #9681 QtWebEngine event.timeStamp is negative value
                e.timeStamp <= 0 ||
                // #9448 bail if event is fired in another document in a multi-page
                // electron/nw.js app, since event.timeStamp will be using a different
                // starting reference
                e.target.ownerDocument !== document) {
                return original.apply(this, arguments);
            }
        };
    }
    target.addEventListener(name, handler, supportsPassive ? { capture, passive } : capture);
}
function remove(name, handler, capture, _target) {
    (_target || target).removeEventListener(name, 
    //@ts-expect-error
    handler._wrapper || handler, capture);
}
function updateDOMListeners(oldVnode, vnode) {
    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
        return;
    }
    const on = vnode.data.on || {};
    const oldOn = oldVnode.data.on || {};
    // vnode is empty when removing all listeners,
    // and use old vnode dom element
    target = vnode.elm || oldVnode.elm;
    normalizeEvents(on);
    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
    target = undefined;
}
var events = {
    create: updateDOMListeners,
    update: updateDOMListeners,
    // @ts-expect-error emptyNode has actually data
    destroy: (vnode) => updateDOMListeners(vnode, emptyNode)
};

let svgContainer;
function updateDOMProps(oldVnode, vnode) {
    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
        return;
    }
    let key, cur;
    const elm = vnode.elm;
    const oldProps = oldVnode.data.domProps || {};
    let props = vnode.data.domProps || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
        props = vnode.data.domProps = extend({}, props);
    }
    for (key in oldProps) {
        if (!(key in props)) {
            elm[key] = '';
        }
    }
    for (key in props) {
        cur = props[key];
        // ignore children if the node has textContent or innerHTML,
        // as these will throw away existing DOM nodes and cause removal errors
        // on subsequent patches (#3360)
        if (key === 'textContent' || key === 'innerHTML') {
            if (vnode.children)
                vnode.children.length = 0;
            if (cur === oldProps[key])
                continue;
            // #6601 work around Chrome version <= 55 bug where single textNode
            // replaced by innerHTML/textContent retains its parentNode property
            if (elm.childNodes.length === 1) {
                elm.removeChild(elm.childNodes[0]);
            }
        }
        if (key === 'value' && elm.tagName !== 'PROGRESS') {
            // store value as _value as well since
            // non-string values will be stringified
            elm._value = cur;
            // avoid resetting cursor position when value is the same
            const strCur = isUndef(cur) ? '' : String(cur);
            if (shouldUpdateValue(elm, strCur)) {
                elm.value = strCur;
            }
        }
        else if (key === 'innerHTML' &&
            isSVG(elm.tagName) &&
            isUndef(elm.innerHTML)) {
            // IE doesn't support innerHTML for SVG elements
            svgContainer = svgContainer || document.createElement('div');
            svgContainer.innerHTML = `<svg>${cur}</svg>`;
            const svg = svgContainer.firstChild;
            while (elm.firstChild) {
                elm.removeChild(elm.firstChild);
            }
            while (svg.firstChild) {
                elm.appendChild(svg.firstChild);
            }
        }
        else if (
        // skip the update if old and new VDOM state is the same.
        // `value` is handled separately because the DOM value may be temporarily
        // out of sync with VDOM state due to focus, composition and modifiers.
        // This  #4521 by skipping the unnecessary `checked` update.
        cur !== oldProps[key]) {
            // some property updates can throw
            // e.g. `value` on <progress> w/ non-finite value
            try {
                elm[key] = cur;
            }
            catch (e) { }
        }
    }
}
function shouldUpdateValue(elm, checkVal) {
    return (
    //@ts-expect-error
    !elm.composing &&
        (elm.tagName === 'OPTION' ||
            isNotInFocusAndDirty(elm, checkVal) ||
            isDirtyWithModifiers(elm, checkVal)));
}
function isNotInFocusAndDirty(elm, checkVal) {
    // return true when textbox (.number and .trim) loses focus and its value is
    // not equal to the updated value
    let notInFocus = true;
    // #6157
    // work around IE bug when accessing document.activeElement in an iframe
    try {
        notInFocus = document.activeElement !== elm;
    }
    catch (e) { }
    return notInFocus && elm.value !== checkVal;
}
function isDirtyWithModifiers(elm, newVal) {
    const value = elm.value;
    const modifiers = elm._vModifiers; // injected by v-model runtime
    if (isDef(modifiers)) {
        if (modifiers.number) {
            return toNumber(value) !== toNumber(newVal);
        }
        if (modifiers.trim) {
            return value.trim() !== newVal.trim();
        }
    }
    return value !== newVal;
}
var domProps = {
    create: updateDOMProps,
    update: updateDOMProps
};

const parseStyleText = cached(function (cssText) {
    const res = {};
    const listDelimiter = /;(?![^(]*\))/g;
    const propertyDelimiter = /:(.+)/;
    cssText.split(listDelimiter).forEach(function (item) {
        if (item) {
            const tmp = item.split(propertyDelimiter);
            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return res;
});
// merge static and dynamic style data on the same vnode
function normalizeStyleData(data) {
    const style = normalizeStyleBinding(data.style);
    // static style is pre-processed into an object during compilation
    // and is always a fresh object, so it's safe to merge into it
    return data.staticStyle ? extend(data.staticStyle, style) : style;
}
// normalize possible array / string values into Object
function normalizeStyleBinding(bindingStyle) {
    if (Array.isArray(bindingStyle)) {
        return toObject(bindingStyle);
    }
    if (typeof bindingStyle === 'string') {
        return parseStyleText(bindingStyle);
    }
    return bindingStyle;
}
/**
 * parent component style should be after child's
 * so that parent component's style could override it
 */
function getStyle(vnode, checkChild) {
    const res = {};
    let styleData;
    if (checkChild) {
        let childNode = vnode;
        while (childNode.componentInstance) {
            childNode = childNode.componentInstance._vnode;
            if (childNode &&
                childNode.data &&
                (styleData = normalizeStyleData(childNode.data))) {
                extend(res, styleData);
            }
        }
    }
    if ((styleData = normalizeStyleData(vnode.data))) {
        extend(res, styleData);
    }
    let parentNode = vnode;
    // @ts-expect-error parentNode.parent not VNodeWithData
    while ((parentNode = parentNode.parent)) {
        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
            extend(res, styleData);
        }
    }
    return res;
}

const cssVarRE = /^--/;
const importantRE = /\s*!important$/;
const setProp = (el, name, val) => {
    /* istanbul ignore if */
    if (cssVarRE.test(name)) {
        el.style.setProperty(name, val);
    }
    else if (importantRE.test(val)) {
        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
    }
    else {
        const normalizedName = normalize(name);
        if (Array.isArray(val)) {
            // Support values array created by autoprefixer, e.g.
            // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
            // Set them one by one, and the browser will only set those it can recognize
            for (let i = 0, len = val.length; i < len; i++) {
                el.style[normalizedName] = val[i];
            }
        }
        else {
            el.style[normalizedName] = val;
        }
    }
};
const vendorNames = ['Webkit', 'Moz', 'ms'];
let emptyStyle;
const normalize = cached(function (prop) {
    emptyStyle = emptyStyle || document.createElement('div').style;
    prop = camelize(prop);
    if (prop !== 'filter' && prop in emptyStyle) {
        return prop;
    }
    const capName = prop.charAt(0).toUpperCase() + prop.slice(1);
    for (let i = 0; i < vendorNames.length; i++) {
        const name = vendorNames[i] + capName;
        if (name in emptyStyle) {
            return name;
        }
    }
});
function updateStyle(oldVnode, vnode) {
    const data = vnode.data;
    const oldData = oldVnode.data;
    if (isUndef(data.staticStyle) &&
        isUndef(data.style) &&
        isUndef(oldData.staticStyle) &&
        isUndef(oldData.style)) {
        return;
    }
    let cur, name;
    const el = vnode.elm;
    const oldStaticStyle = oldData.staticStyle;
    const oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
    // if static style exists, stylebinding already merged into it when doing normalizeStyleData
    const oldStyle = oldStaticStyle || oldStyleBinding;
    const style = normalizeStyleBinding(vnode.data.style) || {};
    // store normalized style under a different key for next diff
    // make sure to clone it if it's reactive, since the user likely wants
    // to mutate it.
    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
    const newStyle = getStyle(vnode, true);
    for (name in oldStyle) {
        if (isUndef(newStyle[name])) {
            setProp(el, name, '');
        }
    }
    for (name in newStyle) {
        cur = newStyle[name];
        if (cur !== oldStyle[name]) {
            // ie9 setting to null has no effect, must use empty string
            setProp(el, name, cur == null ? '' : cur);
        }
    }
}
var style = {
    create: updateStyle,
    update: updateStyle
};

const whitespaceRE = /\s+/;
/**
 * Add class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function addClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE).forEach(c => el.classList.add(c));
        }
        else {
            el.classList.add(cls);
        }
    }
    else {
        const cur = ` ${el.getAttribute('class') || ''} `;
        if (cur.indexOf(' ' + cls + ' ') < 0) {
            el.setAttribute('class', (cur + cls).trim());
        }
    }
}
/**
 * Remove class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function removeClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE).forEach(c => el.classList.remove(c));
        }
        else {
            el.classList.remove(cls);
        }
        if (!el.classList.length) {
            el.removeAttribute('class');
        }
    }
    else {
        let cur = ` ${el.getAttribute('class') || ''} `;
        const tar = ' ' + cls + ' ';
        while (cur.indexOf(tar) >= 0) {
            cur = cur.replace(tar, ' ');
        }
        cur = cur.trim();
        if (cur) {
            el.setAttribute('class', cur);
        }
        else {
            el.removeAttribute('class');
        }
    }
}

function resolveTransition(def) {
    if (!def) {
        return;
    }
    /* istanbul ignore else */
    if (typeof def === 'object') {
        const res = {};
        if (def.css !== false) {
            extend(res, autoCssTransition(def.name || 'v'));
        }
        extend(res, def);
        return res;
    }
    else if (typeof def === 'string') {
        return autoCssTransition(def);
    }
}
const autoCssTransition = cached(name => {
    return {
        enterClass: `${name}-enter`,
        enterToClass: `${name}-enter-to`,
        enterActiveClass: `${name}-enter-active`,
        leaveClass: `${name}-leave`,
        leaveToClass: `${name}-leave-to`,
        leaveActiveClass: `${name}-leave-active`
    };
});
const hasTransition = inBrowser && !isIE9;
const TRANSITION = 'transition';
const ANIMATION = 'animation';
// Transition property/event sniffing
let transitionProp = 'transition';
let transitionEndEvent = 'transitionend';
let animationProp = 'animation';
let animationEndEvent = 'animationend';
if (hasTransition) {
    /* istanbul ignore if */
    if (window.ontransitionend === undefined &&
        window.onwebkittransitionend !== undefined) {
        transitionProp = 'WebkitTransition';
        transitionEndEvent = 'webkitTransitionEnd';
    }
    if (window.onanimationend === undefined &&
        window.onwebkitanimationend !== undefined) {
        animationProp = 'WebkitAnimation';
        animationEndEvent = 'webkitAnimationEnd';
    }
}
// binding to window is necessary to make hot reload work in IE in strict mode
const raf = inBrowser
    ? window.requestAnimationFrame
        ? window.requestAnimationFrame.bind(window)
        : setTimeout
    : /* istanbul ignore next */ /* istanbul ignore next */ fn => fn();
function nextFrame(fn) {
    raf(() => {
        // @ts-expect-error
        raf(fn);
    });
}
function addTransitionClass(el, cls) {
    const transitionClasses = el._transitionClasses || (el._transitionClasses = []);
    if (transitionClasses.indexOf(cls) < 0) {
        transitionClasses.push(cls);
        addClass(el, cls);
    }
}
function removeTransitionClass(el, cls) {
    if (el._transitionClasses) {
        remove$2(el._transitionClasses, cls);
    }
    removeClass(el, cls);
}
function whenTransitionEnds(el, expectedType, cb) {
    const { type, timeout, propCount } = getTransitionInfo(el, expectedType);
    if (!type)
        return cb();
    const event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
    let ended = 0;
    const end = () => {
        el.removeEventListener(event, onEnd);
        cb();
    };
    const onEnd = e => {
        if (e.target === el) {
            if (++ended >= propCount) {
                end();
            }
        }
    };
    setTimeout(() => {
        if (ended < propCount) {
            end();
        }
    }, timeout + 1);
    el.addEventListener(event, onEnd);
}
const transformRE = /\b(transform|all)(,|$)/;
function getTransitionInfo(el, expectedType) {
    const styles = window.getComputedStyle(el);
    // JSDOM may return undefined for transition properties
    const transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
    const transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
    const transitionTimeout = getTimeout(transitionDelays, transitionDurations);
    const animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
    const animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
    const animationTimeout = getTimeout(animationDelays, animationDurations);
    let type;
    let timeout = 0;
    let propCount = 0;
    /* istanbul ignore if */
    if (expectedType === TRANSITION) {
        if (transitionTimeout > 0) {
            type = TRANSITION;
            timeout = transitionTimeout;
            propCount = transitionDurations.length;
        }
    }
    else if (expectedType === ANIMATION) {
        if (animationTimeout > 0) {
            type = ANIMATION;
            timeout = animationTimeout;
            propCount = animationDurations.length;
        }
    }
    else {
        timeout = Math.max(transitionTimeout, animationTimeout);
        type =
            timeout > 0
                ? transitionTimeout > animationTimeout
                    ? TRANSITION
                    : ANIMATION
                : null;
        propCount = type
            ? type === TRANSITION
                ? transitionDurations.length
                : animationDurations.length
            : 0;
    }
    const hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
    return {
        type,
        timeout,
        propCount,
        hasTransform
    };
}
function getTimeout(delays, durations) {
    /* istanbul ignore next */
    while (delays.length < durations.length) {
        delays = delays.concat(delays);
    }
    return Math.max.apply(null, durations.map((d, i) => {
        return toMs(d) + toMs(delays[i]);
    }));
}
// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
// in a locale-dependent way, using a comma instead of a dot.
// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
// as a floor function) causing unexpected behaviors
function toMs(s) {
    return Number(s.slice(0, -1).replace(',', '.')) * 1000;
}

function enter(vnode, toggleDisplay) {
    const el = vnode.elm;
    // call leave callback now
    if (isDef(el._leaveCb)) {
        el._leaveCb.cancelled = true;
        el._leaveCb();
    }
    const data = resolveTransition(vnode.data.transition);
    if (isUndef(data)) {
        return;
    }
    /* istanbul ignore if */
    if (isDef(el._enterCb) || el.nodeType !== 1) {
        return;
    }
    const { css, type, enterClass, enterToClass, enterActiveClass, appearClass, appearToClass, appearActiveClass, beforeEnter, enter, afterEnter, enterCancelled, beforeAppear, appear, afterAppear, appearCancelled, duration } = data;
    // activeInstance will always be the <transition> component managing this
    // transition. One edge case to check is when the <transition> is placed
    // as the root node of a child component. In that case we need to check
    // <transition>'s parent for appear check.
    let context = activeInstance;
    let transitionNode = activeInstance.$vnode;
    while (transitionNode && transitionNode.parent) {
        context = transitionNode.context;
        transitionNode = transitionNode.parent;
    }
    const isAppear = !context._isMounted || !vnode.isRootInsert;
    if (isAppear && !appear && appear !== '') {
        return;
    }
    const startClass = isAppear && appearClass ? appearClass : enterClass;
    const activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
    const toClass = isAppear && appearToClass ? appearToClass : enterToClass;
    const beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
    const enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
    const afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
    const enterCancelledHook = isAppear
        ? appearCancelled || enterCancelled
        : enterCancelled;
    const explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
    if (explicitEnterDuration != null) {
        checkDuration(explicitEnterDuration, 'enter', vnode);
    }
    const expectsCSS = css !== false && !isIE9;
    const userWantsControl = getHookArgumentsLength(enterHook);
    const cb = (el._enterCb = once(() => {
        if (expectsCSS) {
            removeTransitionClass(el, toClass);
            removeTransitionClass(el, activeClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, startClass);
            }
            enterCancelledHook && enterCancelledHook(el);
        }
        else {
            afterEnterHook && afterEnterHook(el);
        }
        el._enterCb = null;
    }));
    if (!vnode.data.show) {
        // remove pending leave element on enter by injecting an insert hook
        mergeVNodeHook(vnode, 'insert', () => {
            const parent = el.parentNode;
            const pendingNode = parent && parent._pending && parent._pending[vnode.key];
            if (pendingNode &&
                pendingNode.tag === vnode.tag &&
                pendingNode.elm._leaveCb) {
                pendingNode.elm._leaveCb();
            }
            enterHook && enterHook(el, cb);
        });
    }
    // start enter transition
    beforeEnterHook && beforeEnterHook(el);
    if (expectsCSS) {
        addTransitionClass(el, startClass);
        addTransitionClass(el, activeClass);
        nextFrame(() => {
            removeTransitionClass(el, startClass);
            // @ts-expect-error
            if (!cb.cancelled) {
                addTransitionClass(el, toClass);
                if (!userWantsControl) {
                    if (isValidDuration(explicitEnterDuration)) {
                        setTimeout(cb, explicitEnterDuration);
                    }
                    else {
                        whenTransitionEnds(el, type, cb);
                    }
                }
            }
        });
    }
    if (vnode.data.show) {
        toggleDisplay && toggleDisplay();
        enterHook && enterHook(el, cb);
    }
    if (!expectsCSS && !userWantsControl) {
        cb();
    }
}
function leave(vnode, rm) {
    const el = vnode.elm;
    // call enter callback now
    if (isDef(el._enterCb)) {
        el._enterCb.cancelled = true;
        el._enterCb();
    }
    const data = resolveTransition(vnode.data.transition);
    if (isUndef(data) || el.nodeType !== 1) {
        return rm();
    }
    /* istanbul ignore if */
    if (isDef(el._leaveCb)) {
        return;
    }
    const { css, type, leaveClass, leaveToClass, leaveActiveClass, beforeLeave, leave, afterLeave, leaveCancelled, delayLeave, duration } = data;
    const expectsCSS = css !== false && !isIE9;
    const userWantsControl = getHookArgumentsLength(leave);
    const explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
    if (isDef(explicitLeaveDuration)) {
        checkDuration(explicitLeaveDuration, 'leave', vnode);
    }
    const cb = (el._leaveCb = once(() => {
        if (el.parentNode && el.parentNode._pending) {
            el.parentNode._pending[vnode.key] = null;
        }
        if (expectsCSS) {
            removeTransitionClass(el, leaveToClass);
            removeTransitionClass(el, leaveActiveClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, leaveClass);
            }
            leaveCancelled && leaveCancelled(el);
        }
        else {
            rm();
            afterLeave && afterLeave(el);
        }
        el._leaveCb = null;
    }));
    if (delayLeave) {
        delayLeave(performLeave);
    }
    else {
        performLeave();
    }
    function performLeave() {
        // the delayed leave may have already been cancelled
        // @ts-expect-error
        if (cb.cancelled) {
            return;
        }
        // record leaving element
        if (!vnode.data.show && el.parentNode) {
            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
                vnode;
        }
        beforeLeave && beforeLeave(el);
        if (expectsCSS) {
            addTransitionClass(el, leaveClass);
            addTransitionClass(el, leaveActiveClass);
            nextFrame(() => {
                removeTransitionClass(el, leaveClass);
                // @ts-expect-error
                if (!cb.cancelled) {
                    addTransitionClass(el, leaveToClass);
                    if (!userWantsControl) {
                        if (isValidDuration(explicitLeaveDuration)) {
                            setTimeout(cb, explicitLeaveDuration);
                        }
                        else {
                            whenTransitionEnds(el, type, cb);
                        }
                    }
                }
            });
        }
        leave && leave(el, cb);
        if (!expectsCSS && !userWantsControl) {
            cb();
        }
    }
}
// only used in dev mode
function checkDuration(val, name, vnode) {
    if (typeof val !== 'number') {
        warn(`<transition> explicit ${name} duration is not a valid number - ` +
            `got ${JSON.stringify(val)}.`, vnode.context);
    }
    else if (isNaN(val)) {
        warn(`<transition> explicit ${name} duration is NaN - ` +
            'the duration expression might be incorrect.', vnode.context);
    }
}
function isValidDuration(val) {
    return typeof val === 'number' && !isNaN(val);
}
/**
 * Normalize a transition hook's argument length. The hook may be:
 * - a merged hook (invoker) with the original in .fns
 * - a wrapped component method (check ._length)
 * - a plain function (.length)
 */
function getHookArgumentsLength(fn) {
    if (isUndef(fn)) {
        return false;
    }
    // @ts-expect-error
    const invokerFns = fn.fns;
    if (isDef(invokerFns)) {
        // invoker
        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
    }
    else {
        // @ts-expect-error
        return (fn._length || fn.length) > 1;
    }
}
function _enter(_, vnode) {
    if (vnode.data.show !== true) {
        enter(vnode);
    }
}
var transition = inBrowser
    ? {
        create: _enter,
        activate: _enter,
        remove(vnode, rm) {
            /* istanbul ignore else */
            if (vnode.data.show !== true) {
                // @ts-expect-error
                leave(vnode, rm);
            }
            else {
                rm();
            }
        }
    }
    : {};

var platformModules = [attrs, klass, events, domProps, style, transition];

// the directive module should be applied last, after all
// built-in modules have been applied.
const modules = platformModules.concat(baseModules);
const patch = createPatchFunction({ nodeOps, modules });

/**
 * Not type checking this file because flow doesn't like attaching
 * properties to Elements.
 */
/* istanbul ignore if */
if (isIE9) {
    // http://www.matts411.com/post/internet-explorer-9-oninput/
    document.addEventListener('selectionchange', () => {
        const el = document.activeElement;
        // @ts-expect-error
        if (el && el.vmodel) {
            trigger(el, 'input');
        }
    });
}
const directive = {
    inserted(el, binding, vnode, oldVnode) {
        if (vnode.tag === 'select') {
            // #6903
            if (oldVnode.elm && !oldVnode.elm._vOptions) {
                mergeVNodeHook(vnode, 'postpatch', () => {
                    directive.componentUpdated(el, binding, vnode);
                });
            }
            else {
                setSelected(el, binding, vnode.context);
            }
            el._vOptions = [].map.call(el.options, getValue);
        }
        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
            el._vModifiers = binding.modifiers;
            if (!binding.modifiers.lazy) {
                el.addEventListener('compositionstart', onCompositionStart);
                el.addEventListener('compositionend', onCompositionEnd);
                // Safari < 10.2 & UIWebView doesn't fire compositionend when
                // switching focus before confirming composition choice
                // this also fixes the issue where some browsers e.g. iOS Chrome
                // fires "change" instead of "input" on autocomplete.
                el.addEventListener('change', onCompositionEnd);
                /* istanbul ignore if */
                if (isIE9) {
                    el.vmodel = true;
                }
            }
        }
    },
    componentUpdated(el, binding, vnode) {
        if (vnode.tag === 'select') {
            setSelected(el, binding, vnode.context);
            // in case the options rendered by v-for have changed,
            // it's possible that the value is out-of-sync with the rendered options.
            // detect such cases and filter out values that no longer has a matching
            // option in the DOM.
            const prevOptions = el._vOptions;
            const curOptions = (el._vOptions = [].map.call(el.options, getValue));
            if (curOptions.some((o, i) => !looseEqual(o, prevOptions[i]))) {
                // trigger change event if
                // no matching option found for at least one value
                const needReset = el.multiple
                    ? binding.value.some(v => hasNoMatchingOption(v, curOptions))
                    : binding.value !== binding.oldValue &&
                        hasNoMatchingOption(binding.value, curOptions);
                if (needReset) {
                    trigger(el, 'change');
                }
            }
        }
    }
};
function setSelected(el, binding, vm) {
    actuallySetSelected(el, binding, vm);
    /* istanbul ignore if */
    if (isIE || isEdge) {
        setTimeout(() => {
            actuallySetSelected(el, binding, vm);
        }, 0);
    }
}
function actuallySetSelected(el, binding, vm) {
    const value = binding.value;
    const isMultiple = el.multiple;
    if (isMultiple && !Array.isArray(value)) {
        warn(`<select multiple v-model="${binding.expression}"> ` +
                `expects an Array value for its binding, but got ${Object.prototype.toString
                    .call(value)
                    .slice(8, -1)}`, vm);
        return;
    }
    let selected, option;
    for (let i = 0, l = el.options.length; i < l; i++) {
        option = el.options[i];
        if (isMultiple) {
            selected = looseIndexOf(value, getValue(option)) > -1;
            if (option.selected !== selected) {
                option.selected = selected;
            }
        }
        else {
            if (looseEqual(getValue(option), value)) {
                if (el.selectedIndex !== i) {
                    el.selectedIndex = i;
                }
                return;
            }
        }
    }
    if (!isMultiple) {
        el.selectedIndex = -1;
    }
}
function hasNoMatchingOption(value, options) {
    return options.every(o => !looseEqual(o, value));
}
function getValue(option) {
    return '_value' in option ? option._value : option.value;
}
function onCompositionStart(e) {
    e.target.composing = true;
}
function onCompositionEnd(e) {
    // prevent triggering an input event for no reason
    if (!e.target.composing)
        return;
    e.target.composing = false;
    trigger(e.target, 'input');
}
function trigger(el, type) {
    const e = document.createEvent('HTMLEvents');
    e.initEvent(type, true, true);
    el.dispatchEvent(e);
}

// recursively search for possible transition defined inside the component root
function locateNode(vnode) {
    // @ts-expect-error
    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
        ? locateNode(vnode.componentInstance._vnode)
        : vnode;
}
var show = {
    bind(el, { value }, vnode) {
        vnode = locateNode(vnode);
        const transition = vnode.data && vnode.data.transition;
        const originalDisplay = (el.__vOriginalDisplay =
            el.style.display === 'none' ? '' : el.style.display);
        if (value && transition) {
            vnode.data.show = true;
            enter(vnode, () => {
                el.style.display = originalDisplay;
            });
        }
        else {
            el.style.display = value ? originalDisplay : 'none';
        }
    },
    update(el, { value, oldValue }, vnode) {
        /* istanbul ignore if */
        if (!value === !oldValue)
            return;
        vnode = locateNode(vnode);
        const transition = vnode.data && vnode.data.transition;
        if (transition) {
            vnode.data.show = true;
            if (value) {
                enter(vnode, () => {
                    el.style.display = el.__vOriginalDisplay;
                });
            }
            else {
                leave(vnode, () => {
                    el.style.display = 'none';
                });
            }
        }
        else {
            el.style.display = value ? el.__vOriginalDisplay : 'none';
        }
    },
    unbind(el, binding, vnode, oldVnode, isDestroy) {
        if (!isDestroy) {
            el.style.display = el.__vOriginalDisplay;
        }
    }
};

var platformDirectives = {
    model: directive,
    show
};

// Provides transition support for a single element/component.
const transitionProps = {
    name: String,
    appear: Boolean,
    css: Boolean,
    mode: String,
    type: String,
    enterClass: String,
    leaveClass: String,
    enterToClass: String,
    leaveToClass: String,
    enterActiveClass: String,
    leaveActiveClass: String,
    appearClass: String,
    appearActiveClass: String,
    appearToClass: String,
    duration: [Number, String, Object]
};
// in case the child is also an abstract component, e.g. <keep-alive>
// we want to recursively retrieve the real component to be rendered
function getRealChild(vnode) {
    const compOptions = vnode && vnode.componentOptions;
    if (compOptions && compOptions.Ctor.options.abstract) {
        return getRealChild(getFirstComponentChild(compOptions.children));
    }
    else {
        return vnode;
    }
}
function extractTransitionData(comp) {
    const data = {};
    const options = comp.$options;
    // props
    for (const key in options.propsData) {
        data[key] = comp[key];
    }
    // events.
    // extract listeners and pass them directly to the transition methods
    const listeners = options._parentListeners;
    for (const key in listeners) {
        data[camelize(key)] = listeners[key];
    }
    return data;
}
function placeholder(h, rawChild) {
    // @ts-expect-error
    if (/\d-keep-alive$/.test(rawChild.tag)) {
        return h('keep-alive', {
            props: rawChild.componentOptions.propsData
        });
    }
}
function hasParentTransition(vnode) {
    while ((vnode = vnode.parent)) {
        if (vnode.data.transition) {
            return true;
        }
    }
}
function isSameChild(child, oldChild) {
    return oldChild.key === child.key && oldChild.tag === child.tag;
}
const isNotTextNode = (c) => c.tag || isAsyncPlaceholder(c);
const isVShowDirective = d => d.name === 'show';
var Transition = {
    name: 'transition',
    props: transitionProps,
    abstract: true,
    render(h) {
        let children = this.$slots.default;
        if (!children) {
            return;
        }
        // filter out text nodes (possible whitespaces)
        children = children.filter(isNotTextNode);
        /* istanbul ignore if */
        if (!children.length) {
            return;
        }
        // warn multiple elements
        if (children.length > 1) {
            warn('<transition> can only be used on a single element. Use ' +
                '<transition-group> for lists.', this.$parent);
        }
        const mode = this.mode;
        // warn invalid mode
        if (mode && mode !== 'in-out' && mode !== 'out-in') {
            warn('invalid <transition> mode: ' + mode, this.$parent);
        }
        const rawChild = children[0];
        // if this is a component root node and the component's
        // parent container node also has transition, skip.
        if (hasParentTransition(this.$vnode)) {
            return rawChild;
        }
        // apply transition data to child
        // use getRealChild() to ignore abstract components e.g. keep-alive
        const child = getRealChild(rawChild);
        /* istanbul ignore if */
        if (!child) {
            return rawChild;
        }
        if (this._leaving) {
            return placeholder(h, rawChild);
        }
        // ensure a key that is unique to the vnode type and to this transition
        // component instance. This key will be used to remove pending leaving nodes
        // during entering.
        const id = `__transition-${this._uid}-`;
        child.key =
            child.key == null
                ? child.isComment
                    ? id + 'comment'
                    : id + child.tag
                : isPrimitive(child.key)
                    ? String(child.key).indexOf(id) === 0
                        ? child.key
                        : id + child.key
                    : child.key;
        const data = ((child.data || (child.data = {})).transition =
            extractTransitionData(this));
        const oldRawChild = this._vnode;
        const oldChild = getRealChild(oldRawChild);
        // mark v-show
        // so that the transition module can hand over the control to the directive
        if (child.data.directives && child.data.directives.some(isVShowDirective)) {
            child.data.show = true;
        }
        if (oldChild &&
            oldChild.data &&
            !isSameChild(child, oldChild) &&
            !isAsyncPlaceholder(oldChild) &&
            // #6687 component root is a comment node
            !(oldChild.componentInstance &&
                oldChild.componentInstance._vnode.isComment)) {
            // replace old child transition data with fresh one
            // important for dynamic transitions!
            const oldData = (oldChild.data.transition = extend({}, data));
            // handle transition mode
            if (mode === 'out-in') {
                // return placeholder node and queue update when leave finishes
                this._leaving = true;
                mergeVNodeHook(oldData, 'afterLeave', () => {
                    this._leaving = false;
                    this.$forceUpdate();
                });
                return placeholder(h, rawChild);
            }
            else if (mode === 'in-out') {
                if (isAsyncPlaceholder(child)) {
                    return oldRawChild;
                }
                let delayedLeave;
                const performLeave = () => {
                    delayedLeave();
                };
                mergeVNodeHook(data, 'afterEnter', performLeave);
                mergeVNodeHook(data, 'enterCancelled', performLeave);
                mergeVNodeHook(oldData, 'delayLeave', leave => {
                    delayedLeave = leave;
                });
            }
        }
        return rawChild;
    }
};

// Provides transition support for list items.
const props = extend({
    tag: String,
    moveClass: String
}, transitionProps);
delete props.mode;
var TransitionGroup = {
    props,
    beforeMount() {
        const update = this._update;
        this._update = (vnode, hydrating) => {
            const restoreActiveInstance = setActiveInstance(this);
            // force removing pass
            this.__patch__(this._vnode, this.kept, false, // hydrating
            true // removeOnly (!important, avoids unnecessary moves)
            );
            this._vnode = this.kept;
            restoreActiveInstance();
            update.call(this, vnode, hydrating);
        };
    },
    render(h) {
        const tag = this.tag || this.$vnode.data.tag || 'span';
        const map = Object.create(null);
        const prevChildren = (this.prevChildren = this.children);
        const rawChildren = this.$slots.default || [];
        const children = (this.children = []);
        const transitionData = extractTransitionData(this);
        for (let i = 0; i < rawChildren.length; i++) {
            const c = rawChildren[i];
            if (c.tag) {
                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
                    children.push(c);
                    map[c.key] = c;
                    (c.data || (c.data = {})).transition = transitionData;
                }
                else {
                    const opts = c.componentOptions;
                    const name = opts
                        ? getComponentName(opts.Ctor.options) || opts.tag || ''
                        : c.tag;
                    warn(`<transition-group> children must be keyed: <${name}>`);
                }
            }
        }
        if (prevChildren) {
            const kept = [];
            const removed = [];
            for (let i = 0; i < prevChildren.length; i++) {
                const c = prevChildren[i];
                c.data.transition = transitionData;
                // @ts-expect-error .getBoundingClientRect is not typed in Node
                c.data.pos = c.elm.getBoundingClientRect();
                if (map[c.key]) {
                    kept.push(c);
                }
                else {
                    removed.push(c);
                }
            }
            this.kept = h(tag, null, kept);
            this.removed = removed;
        }
        return h(tag, null, children);
    },
    updated() {
        const children = this.prevChildren;
        const moveClass = this.moveClass || (this.name || 'v') + '-move';
        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
            return;
        }
        // we divide the work into three loops to avoid mixing DOM reads and writes
        // in each iteration - which helps prevent layout thrashing.
        children.forEach(callPendingCbs);
        children.forEach(recordPosition);
        children.forEach(applyTranslation);
        // force reflow to put everything in position
        // assign to this to avoid being removed in tree-shaking
        // $flow-disable-line
        this._reflow = document.body.offsetHeight;
        children.forEach((c) => {
            if (c.data.moved) {
                const el = c.elm;
                const s = el.style;
                addTransitionClass(el, moveClass);
                s.transform = s.WebkitTransform = s.transitionDuration = '';
                el.addEventListener(transitionEndEvent, (el._moveCb = function cb(e) {
                    if (e && e.target !== el) {
                        return;
                    }
                    if (!e || /transform$/.test(e.propertyName)) {
                        el.removeEventListener(transitionEndEvent, cb);
                        el._moveCb = null;
                        removeTransitionClass(el, moveClass);
                    }
                }));
            }
        });
    },
    methods: {
        hasMove(el, moveClass) {
            /* istanbul ignore if */
            if (!hasTransition) {
                return false;
            }
            /* istanbul ignore if */
            if (this._hasMove) {
                return this._hasMove;
            }
            // Detect whether an element with the move class applied has
            // CSS transitions. Since the element may be inside an entering
            // transition at this very moment, we make a clone of it and remove
            // all other transition classes applied to ensure only the move class
            // is applied.
            const clone = el.cloneNode();
            if (el._transitionClasses) {
                el._transitionClasses.forEach((cls) => {
                    removeClass(clone, cls);
                });
            }
            addClass(clone, moveClass);
            clone.style.display = 'none';
            this.$el.appendChild(clone);
            const info = getTransitionInfo(clone);
            this.$el.removeChild(clone);
            return (this._hasMove = info.hasTransform);
        }
    }
};
function callPendingCbs(c) {
    /* istanbul ignore if */
    if (c.elm._moveCb) {
        c.elm._moveCb();
    }
    /* istanbul ignore if */
    if (c.elm._enterCb) {
        c.elm._enterCb();
    }
}
function recordPosition(c) {
    c.data.newPos = c.elm.getBoundingClientRect();
}
function applyTranslation(c) {
    const oldPos = c.data.pos;
    const newPos = c.data.newPos;
    const dx = oldPos.left - newPos.left;
    const dy = oldPos.top - newPos.top;
    if (dx || dy) {
        c.data.moved = true;
        const s = c.elm.style;
        s.transform = s.WebkitTransform = `translate(${dx}px,${dy}px)`;
        s.transitionDuration = '0s';
    }
}

var platformComponents = {
    Transition,
    TransitionGroup
};

// install platform specific utils
Vue.config.mustUseProp = mustUseProp;
Vue.config.isReservedTag = isReservedTag;
Vue.config.isReservedAttr = isReservedAttr;
Vue.config.getTagNamespace = getTagNamespace;
Vue.config.isUnknownElement = isUnknownElement;
// install platform runtime directives & components
extend(Vue.options.directives, platformDirectives);
extend(Vue.options.components, platformComponents);
// install platform patch function
Vue.prototype.__patch__ = inBrowser ? patch : noop;
// public mount method
Vue.prototype.$mount = function (el, hydrating) {
    el = el && inBrowser ? query(el) : undefined;
    return mountComponent(this, el, hydrating);
};
// devtools global hook
/* istanbul ignore next */
if (inBrowser) {
    setTimeout(() => {
        if (config.devtools) {
            if (devtools) {
                devtools.emit('init', Vue);
            }
            else {
                // @ts-expect-error
                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
                    'https://github.com/vuejs/vue-devtools');
            }
        }
        if (config.productionTip !== false &&
            typeof console !== 'undefined') {
            // @ts-expect-error
            console[console.info ? 'info' : 'log'](`You are running Vue in development mode.\n` +
                `Make sure to turn on production mode when deploying for production.\n` +
                `See more tips at https://vuejs.org/guide/deployment.html`);
        }
    }, 0);
}

extend(Vue, vca);

module.exports = Vue;
if (process.env.NODE_ENV === 'production') {
  module.exports = require('./vue.runtime.common.prod.js')
} else {
  module.exports = require('./vue.runtime.common.dev.js')
}
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
"use strict";const t=Object.freeze({}),e=Array.isArray;function n(t){return null==t}function o(t){return null!=t}function r(t){return!0===t}function s(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function i(t){return"function"==typeof t}function c(t){return null!==t&&"object"==typeof t}const a=Object.prototype.toString;function l(t){return"[object Object]"===a.call(t)}function u(t){const e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||l(t)&&t.toString===a?JSON.stringify(t,null,2):String(t)}function p(t){const e=parseFloat(t);return isNaN(e)?t:e}function h(t,e){const n=Object.create(null),o=t.split(",");for(let t=0;t<o.length;t++)n[o[t]]=!0;return e?t=>n[t.toLowerCase()]:t=>n[t]}const m=h("key,ref,slot,slot-scope,is");function _(t,e){const n=t.length;if(n){if(e===t[n-1])return void(t.length=n-1);const o=t.indexOf(e);if(o>-1)return t.splice(o,1)}}const v=Object.prototype.hasOwnProperty;function y(t,e){return v.call(t,e)}function g(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const b=/-(\w)/g,$=g((t=>t.replace(b,((t,e)=>e?e.toUpperCase():"")))),w=g((t=>t.charAt(0).toUpperCase()+t.slice(1))),C=/\B([A-Z])/g,x=g((t=>t.replace(C,"-$1").toLowerCase()));const k=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){const o=arguments.length;return o?o>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function O(t,e){e=e||0;let n=t.length-e;const o=new Array(n);for(;n--;)o[n]=t[n+e];return o}function S(t,e){for(const n in e)t[n]=e[n];return t}function j(t){const e={};for(let n=0;n<t.length;n++)t[n]&&S(e,t[n]);return e}function A(t,e,n){}const T=(t,e,n)=>!1,E=t=>t;function P(t,e){if(t===e)return!0;const n=c(t),o=c(e);if(!n||!o)return!n&&!o&&String(t)===String(e);try{const n=Array.isArray(t),o=Array.isArray(e);if(n&&o)return t.length===e.length&&t.every(((t,n)=>P(t,e[n])));if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(n||o)return!1;{const n=Object.keys(t),o=Object.keys(e);return n.length===o.length&&n.every((n=>P(t[n],e[n])))}}catch(t){return!1}}function I(t,e){for(let n=0;n<t.length;n++)if(P(t[n],e))return n;return-1}function D(t){let e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function N(t,e){return t===e?0===t&&1/t!=1/e:t==t||e==e}const M=["component","directive","filter"],R=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"];var L={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:T,isReservedAttr:T,isUnknownElement:T,getTagNamespace:A,parsePlatformTagName:E,mustUseProp:T,async:!0,_lifecycleHooks:R};function F(t){const e=(t+"").charCodeAt(0);return 36===e||95===e}function U(t,e,n,o){Object.defineProperty(t,e,{value:n,enumerable:!!o,writable:!0,configurable:!0})}const B=new RegExp(`[^${/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/.source}.$_\\d]`);const V="__proto__"in{},z="undefined"!=typeof window,H=z&&window.navigator.userAgent.toLowerCase(),W=H&&/msie|trident/.test(H),K=H&&H.indexOf("msie 9.0")>0,q=H&&H.indexOf("edge/")>0;H&&H.indexOf("android");const G=H&&/iphone|ipad|ipod|ios/.test(H);H&&/chrome\/\d+/.test(H),H&&/phantomjs/.test(H);const Z=H&&H.match(/firefox\/(\d+)/),J={}.watch;let X,Q=!1;if(z)try{const t={};Object.defineProperty(t,"passive",{get(){Q=!0}}),window.addEventListener("test-passive",null,t)}catch(t){}const Y=()=>(void 0===X&&(X=!z&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),X),tt=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function et(t){return"function"==typeof t&&/native code/.test(t.toString())}const nt="undefined"!=typeof Symbol&&et(Symbol)&&"undefined"!=typeof Reflect&&et(Reflect.ownKeys);let ot;ot="undefined"!=typeof Set&&et(Set)?Set:class{constructor(){this.set=Object.create(null)}has(t){return!0===this.set[t]}add(t){this.set[t]=!0}clear(){this.set=Object.create(null)}};let rt=null;function st(t=null){t||rt&&rt._scope.off(),rt=t,t&&t._scope.on()}class it{constructor(t,e,n,o,r,s,i,c){this.tag=t,this.data=e,this.children=n,this.text=o,this.elm=r,this.ns=void 0,this.context=s,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=i,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=c,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}get child(){return this.componentInstance}}const ct=(t="")=>{const e=new it;return e.text=t,e.isComment=!0,e};function at(t){return new it(void 0,void 0,void 0,String(t))}function lt(t){const e=new it(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}let ut=0;const ft=[];class dt{constructor(){this._pending=!1,this.id=ut++,this.subs=[]}addSub(t){this.subs.push(t)}removeSub(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,ft.push(this))}depend(t){dt.target&&dt.target.addDep(this)}notify(t){const e=this.subs.filter((t=>t));for(let t=0,n=e.length;t<n;t++){e[t].update()}}}dt.target=null;const pt=[];function ht(t){pt.push(t),dt.target=t}function mt(){pt.pop(),dt.target=pt[pt.length-1]}const _t=Array.prototype,vt=Object.create(_t);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(t){const e=_t[t];U(vt,t,(function(...n){const o=e.apply(this,n),r=this.__ob__;let s;switch(t){case"push":case"unshift":s=n;break;case"splice":s=n.slice(2)}return s&&r.observeArray(s),r.dep.notify(),o}))}));const yt=Object.getOwnPropertyNames(vt),gt={};let bt=!0;function $t(t){bt=t}const wt={notify:A,depend:A,addSub:A,removeSub:A};class Ct{constructor(t,n=!1,o=!1){if(this.value=t,this.shallow=n,this.mock=o,this.dep=o?wt:new dt,this.vmCount=0,U(t,"__ob__",this),e(t)){if(!o)if(V)t.__proto__=vt;else for(let e=0,n=yt.length;e<n;e++){const n=yt[e];U(t,n,vt[n])}n||this.observeArray(t)}else{const e=Object.keys(t);for(let r=0;r<e.length;r++){kt(t,e[r],gt,void 0,n,o)}}}observeArray(t){for(let e=0,n=t.length;e<n;e++)xt(t[e],!1,this.mock)}}function xt(t,n,o){return t&&y(t,"__ob__")&&t.__ob__ instanceof Ct?t.__ob__:!bt||!o&&Y()||!e(t)&&!l(t)||!Object.isExtensible(t)||t.__v_skip||Dt(t)||t instanceof it?void 0:new Ct(t,n,o)}function kt(t,n,o,r,s,i){const c=new dt,a=Object.getOwnPropertyDescriptor(t,n);if(a&&!1===a.configurable)return;const l=a&&a.get,u=a&&a.set;l&&!u||o!==gt&&2!==arguments.length||(o=t[n]);let f=!s&&xt(o,!1,i);return Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){const n=l?l.call(t):o;return dt.target&&(c.depend(),f&&(f.dep.depend(),e(n)&&jt(n))),Dt(n)&&!s?n.value:n},set:function(e){const n=l?l.call(t):o;if(N(n,e)){if(u)u.call(t,e);else{if(l)return;if(!s&&Dt(n)&&!Dt(e))return void(n.value=e);o=e}f=!s&&xt(e,!1,i),c.notify()}}}),c}function Ot(t,n,o){if(It(t))return;const r=t.__ob__;return e(t)&&u(n)?(t.length=Math.max(t.length,n),t.splice(n,1,o),r&&!r.shallow&&r.mock&&xt(o,!1,!0),o):n in t&&!(n in Object.prototype)?(t[n]=o,o):t._isVue||r&&r.vmCount?o:r?(kt(r.value,n,o,void 0,r.shallow,r.mock),r.dep.notify(),o):(t[n]=o,o)}function St(t,n){if(e(t)&&u(n))return void t.splice(n,1);const o=t.__ob__;t._isVue||o&&o.vmCount||It(t)||y(t,n)&&(delete t[n],o&&o.dep.notify())}function jt(t){for(let n,o=0,r=t.length;o<r;o++)n=t[o],n&&n.__ob__&&n.__ob__.dep.depend(),e(n)&&jt(n)}function At(t){return Tt(t,!0),U(t,"__v_isShallow",!0),t}function Tt(t,e){It(t)||xt(t,e,Y())}function Et(t){return It(t)?Et(t.__v_raw):!(!t||!t.__ob__)}function Pt(t){return!(!t||!t.__v_isShallow)}function It(t){return!(!t||!t.__v_isReadonly)}function Dt(t){return!(!t||!0!==t.__v_isRef)}function Nt(t,e){if(Dt(t))return t;const n={};return U(n,"__v_isRef",!0),U(n,"__v_isShallow",e),U(n,"dep",kt(n,"value",t,null,e,Y())),n}function Mt(t,e,n){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>{const t=e[n];if(Dt(t))return t.value;{const e=t&&t.__ob__;return e&&e.dep.depend(),t}},set:t=>{const o=e[n];Dt(o)&&!Dt(t)?o.value=t:e[n]=t}})}function Rt(t,e,n){const o=t[e];if(Dt(o))return o;const r={get value(){const o=t[e];return void 0===o?n:o},set value(n){t[e]=n}};return U(r,"__v_isRef",!0),r}function Lt(t){return Ft(t,!1)}function Ft(t,e){if(!l(t))return t;if(It(t))return t;const n=e?"__v_rawToShallowReadonly":"__v_rawToReadonly",o=t[n];if(o)return o;const r=Object.create(Object.getPrototypeOf(t));U(t,n,r),U(r,"__v_isReadonly",!0),U(r,"__v_raw",t),Dt(t)&&U(r,"__v_isRef",!0),(e||Pt(t))&&U(r,"__v_isShallow",!0);const s=Object.keys(t);for(let n=0;n<s.length;n++)Ut(r,t,s[n],e);return r}function Ut(t,e,n,o){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get(){const t=e[n];return o||!l(t)?t:Lt(t)},set(){}})}function Bt(t,e){return zt(t,null,{flush:"post"})}const Vt={};function zt(n,o,{immediate:r,deep:s,flush:c="pre",onTrack:a,onTrigger:l}=t){const u=rt,f=(t,e,n=null)=>Ie(t,null,n,u,e);let d,p,h=!1,m=!1;if(Dt(n)?(d=()=>n.value,h=Pt(n)):Et(n)?(d=()=>(n.__ob__.dep.depend(),n),s=!0):e(n)?(m=!0,h=n.some((t=>Et(t)||Pt(t))),d=()=>n.map((t=>Dt(t)?t.value:Et(t)?on(t):i(t)?f(t,"watcher getter"):void 0))):d=i(n)?o?()=>f(n,"watcher getter"):()=>{if(!u||!u._isDestroyed)return p&&p(),f(n,"watcher",[_])}:A,o&&s){const t=d;d=()=>on(t())}let _=t=>{p=v.onStop=()=>{f(t,"watcher cleanup")}};if(Y())return _=A,o?r&&f(o,"watcher callback",[d(),m?[]:void 0,_]):d(),A;const v=new an(rt,d,A,{lazy:!0});v.noRecurse=!o;let y=m?[]:Vt;return v.run=()=>{if(v.active)if(o){const t=v.get();(s||h||(m?t.some(((t,e)=>N(t,y[e]))):N(t,y)))&&(p&&p(),f(o,"watcher callback",[t,y===Vt?void 0:y,_]),y=t)}else v.get()},"sync"===c?v.update=v.run:"post"===c?(v.post=!0,v.update=()=>An(v)):v.update=()=>{if(u&&u===rt&&!u._isMounted){const t=u._preWatchers||(u._preWatchers=[]);t.indexOf(v)<0&&t.push(v)}else An(v)},o?r?v.run():y=v.get():"post"===c&&u?u.$once("hook:mounted",(()=>v.get())):v.get(),()=>{v.teardown()}}let Ht;class Wt{constructor(t=!1){this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Ht,!t&&Ht&&(this.index=(Ht.scopes||(Ht.scopes=[])).push(this)-1)}run(t){if(this.active){const e=Ht;try{return Ht=this,t()}finally{Ht=e}}}on(){Ht=this}off(){Ht=this.parent}stop(t){if(this.active){let e,n;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].teardown();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(!this.detached&&this.parent&&!t){const t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.parent=void 0,this.active=!1}}}function Kt(t){const e=t._provided,n=t.$parent&&t.$parent._provided;return n===e?t._provided=Object.create(n):e}const qt=g((t=>{const e="&"===t.charAt(0),n="~"===(t=e?t.slice(1):t).charAt(0),o="!"===(t=n?t.slice(1):t).charAt(0);return{name:t=o?t.slice(1):t,once:n,capture:o,passive:e}}));function Gt(t,n){function o(){const t=o.fns;if(!e(t))return Ie(t,null,arguments,n,"v-on handler");{const e=t.slice();for(let t=0;t<e.length;t++)Ie(e[t],null,arguments,n,"v-on handler")}}return o.fns=t,o}function Zt(t,e,o,s,i,c){let a,l,u,f;for(a in t)l=t[a],u=e[a],f=qt(a),n(l)||(n(u)?(n(l.fns)&&(l=t[a]=Gt(l,c)),r(f.once)&&(l=t[a]=i(f.name,l,f.capture)),o(f.name,l,f.capture,f.passive,f.params)):l!==u&&(u.fns=l,t[a]=u));for(a in e)n(t[a])&&(f=qt(a),s(f.name,e[a],f.capture))}function Jt(t,e,s){let i;t instanceof it&&(t=t.data.hook||(t.data.hook={}));const c=t[e];function a(){s.apply(this,arguments),_(i.fns,a)}n(c)?i=Gt([a]):o(c.fns)&&r(c.merged)?(i=c,i.fns.push(a)):i=Gt([c,a]),i.merged=!0,t[e]=i}function Xt(t,e,n,r,s){if(o(e)){if(y(e,n))return t[n]=e[n],s||delete e[n],!0;if(y(e,r))return t[n]=e[r],s||delete e[r],!0}return!1}function Qt(t){return s(t)?[at(t)]:e(t)?te(t):void 0}function Yt(t){return o(t)&&o(t.text)&&!1===t.isComment}function te(t,i){const c=[];let a,l,u,f;for(a=0;a<t.length;a++)l=t[a],n(l)||"boolean"==typeof l||(u=c.length-1,f=c[u],e(l)?l.length>0&&(l=te(l,`${i||""}_${a}`),Yt(l[0])&&Yt(f)&&(c[u]=at(f.text+l[0].text),l.shift()),c.push.apply(c,l)):s(l)?Yt(f)?c[u]=at(f.text+l):""!==l&&c.push(at(l)):Yt(l)&&Yt(f)?c[u]=at(f.text+l.text):(r(t._isVList)&&o(l.tag)&&n(l.key)&&o(i)&&(l.key=`__vlist${i}_${a}__`),c.push(l)));return c}function ee(t,n){let r,s,i,a,l=null;if(e(t)||"string"==typeof t)for(l=new Array(t.length),r=0,s=t.length;r<s;r++)l[r]=n(t[r],r);else if("number"==typeof t)for(l=new Array(t),r=0;r<t;r++)l[r]=n(r+1,r);else if(c(t))if(nt&&t[Symbol.iterator]){l=[];const e=t[Symbol.iterator]();let o=e.next();for(;!o.done;)l.push(n(o.value,l.length)),o=e.next()}else for(i=Object.keys(t),l=new Array(i.length),r=0,s=i.length;r<s;r++)a=i[r],l[r]=n(t[a],a,r);return o(l)||(l=[]),l._isVList=!0,l}function ne(t,e,n,o){const r=this.$scopedSlots[t];let s;r?(n=n||{},o&&(n=S(S({},o),n)),s=r(n)||(i(e)?e():e)):s=this.$slots[t]||(i(e)?e():e);const c=n&&n.slot;return c?this.$createElement("template",{slot:c},s):s}function oe(t){return qn(this.$options,"filters",t)||E}function re(t,n){return e(t)?-1===t.indexOf(n):t!==n}function se(t,e,n,o,r){const s=L.keyCodes[e]||n;return r&&o&&!L.keyCodes[e]?re(r,o):s?re(s,t):o?x(o)!==e:void 0===t}function ie(t,n,o,r,s){if(o)if(c(o)){let i;e(o)&&(o=j(o));for(const e in o){if("class"===e||"style"===e||m(e))i=t;else{const o=t.attrs&&t.attrs.type;i=r||L.mustUseProp(n,o,e)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}const c=$(e),a=x(e);if(!(c in i)&&!(a in i)&&(i[e]=o[e],s)){(t.on||(t.on={}))[`update:${e}`]=function(t){o[e]=t}}}}else;return t}function ce(t,e){const n=this._staticTrees||(this._staticTrees=[]);let o=n[t];return o&&!e||(o=n[t]=this.$options.staticRenderFns[t].call(this._renderProxy,this._c,this),le(o,`__static__${t}`,!1)),o}function ae(t,e,n){return le(t,`__once__${e}${n?`_${n}`:""}`,!0),t}function le(t,n,o){if(e(t))for(let e=0;e<t.length;e++)t[e]&&"string"!=typeof t[e]&&ue(t[e],`${n}_${e}`,o);else ue(t,n,o)}function ue(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function fe(t,e){if(e)if(l(e)){const n=t.on=t.on?S({},t.on):{};for(const t in e){const o=n[t],r=e[t];n[t]=o?[].concat(o,r):r}}else;return t}function de(t,n,o,r){n=n||{$stable:!o};for(let r=0;r<t.length;r++){const s=t[r];e(s)?de(s,n,o):s&&(s.proxy&&(s.fn.proxy=!0),n[s.key]=s.fn)}return r&&(n.$key=r),n}function pe(t,e){for(let n=0;n<e.length;n+=2){const o=e[n];"string"==typeof o&&o&&(t[e[n]]=e[n+1])}return t}function he(t,e){return"string"==typeof t?e+t:t}function me(t){t._o=ae,t._n=p,t._s=d,t._l=ee,t._t=ne,t._q=P,t._i=I,t._m=ce,t._f=oe,t._k=se,t._b=ie,t._v=at,t._e=ct,t._u=de,t._g=fe,t._d=pe,t._p=he}function _e(t,e){if(!t||!t.length)return{};const n={};for(let o=0,r=t.length;o<r;o++){const r=t[o],s=r.data;if(s&&s.attrs&&s.attrs.slot&&delete s.attrs.slot,r.context!==e&&r.fnContext!==e||!s||null==s.slot)(n.default||(n.default=[])).push(r);else{const t=s.slot,e=n[t]||(n[t]=[]);"template"===r.tag?e.push.apply(e,r.children||[]):e.push(r)}}for(const t in n)n[t].every(ve)&&delete n[t];return n}function ve(t){return t.isComment&&!t.asyncFactory||" "===t.text}function ye(t){return t.isComment&&t.asyncFactory}function ge(e,n,o,r){let s;const i=Object.keys(o).length>0,c=n?!!n.$stable:!i,a=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(c&&r&&r!==t&&a===r.$key&&!i&&!r.$hasNormal)return r;s={};for(const t in n)n[t]&&"$"!==t[0]&&(s[t]=be(e,o,t,n[t]))}else s={};for(const t in o)t in s||(s[t]=$e(o,t));return n&&Object.isExtensible(n)&&(n._normalized=s),U(s,"$stable",c),U(s,"$key",a),U(s,"$hasNormal",i),s}function be(t,n,o,r){const s=function(){const n=rt;st(t);let o=arguments.length?r.apply(null,arguments):r({});o=o&&"object"==typeof o&&!e(o)?[o]:Qt(o);const s=o&&o[0];return st(n),o&&(!s||1===o.length&&s.isComment&&!ye(s))?void 0:o};return r.proxy&&Object.defineProperty(n,o,{get:s,enumerable:!0,configurable:!0}),s}function $e(t,e){return()=>t[e]}function we(e){return{get attrs(){if(!e._attrsProxy){const n=e._attrsProxy={};U(n,"_v_attr_proxy",!0),Ce(n,e.$attrs,t,e,"$attrs")}return e._attrsProxy},get listeners(){if(!e._listenersProxy){Ce(e._listenersProxy={},e.$listeners,t,e,"$listeners")}return e._listenersProxy},get slots(){return function(t){t._slotsProxy||ke(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(e)},emit:k(e.$emit,e),expose(t){t&&Object.keys(t).forEach((n=>Mt(e,t,n)))}}}function Ce(t,e,n,o,r){let s=!1;for(const i in e)i in t?e[i]!==n[i]&&(s=!0):(s=!0,xe(t,i,o,r));for(const n in t)n in e||(s=!0,delete t[n]);return s}function xe(t,e,n,o){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:()=>n[o][e]})}function ke(t,e){for(const n in e)t[n]=e[n];for(const n in t)n in e||delete t[n]}function Oe(){const t=rt;return t._setupContext||(t._setupContext=we(t))}let Se=null;function je(t,e){return(t.__esModule||nt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),c(t)?e.extend(t):t}function Ae(t){if(e(t))for(let e=0;e<t.length;e++){const n=t[e];if(o(n)&&(o(n.componentOptions)||ye(n)))return n}}function Te(t,n,a,l,u,f){return(e(a)||s(a))&&(u=l,l=a,a=void 0),r(f)&&(u=2),function(t,n,r,s,a){if(o(r)&&o(r.__ob__))return ct();o(r)&&o(r.is)&&(n=r.is);if(!n)return ct();e(s)&&i(s[0])&&((r=r||{}).scopedSlots={default:s[0]},s.length=0);2===a?s=Qt(s):1===a&&(s=function(t){for(let n=0;n<t.length;n++)if(e(t[n]))return Array.prototype.concat.apply([],t);return t}(s));let l,u;if("string"==typeof n){let e;u=t.$vnode&&t.$vnode.ns||L.getTagNamespace(n),l=L.isReservedTag(n)?new it(L.parsePlatformTagName(n),r,s,void 0,void 0,t):r&&r.pre||!o(e=qn(t.$options,"components",n))?new it(n,r,s,void 0,void 0,t):Rn(e,r,t,s,n)}else l=Rn(n,r,t,s);return e(l)?l:o(l)?(o(u)&&Ee(l,u),o(r)&&function(t){c(t.style)&&on(t.style);c(t.class)&&on(t.class)}(r),l):ct()}(t,n,a,l,u)}function Ee(t,e,s){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,s=!0),o(t.children))for(let i=0,c=t.children.length;i<c;i++){const c=t.children[i];o(c.tag)&&(n(c.ns)||r(s)&&"svg"!==c.tag)&&Ee(c,e,s)}}function Pe(t,e,n){ht();try{if(e){let o=e;for(;o=o.$parent;){const r=o.$options.errorCaptured;if(r)for(let s=0;s<r.length;s++)try{if(!1===r[s].call(o,t,e,n))return}catch(t){De(t,o,"errorCaptured hook")}}}De(t,e,n)}finally{mt()}}function Ie(t,e,n,o,r){let s;try{s=n?t.apply(e,n):t.call(e),s&&!s._isVue&&f(s)&&!s._handled&&(s.catch((t=>Pe(t,o,r+" (Promise/async)"))),s._handled=!0)}catch(t){Pe(t,o,r)}return s}function De(t,e,n){if(L.errorHandler)try{return L.errorHandler.call(null,t,e,n)}catch(e){e!==t&&Ne(e)}Ne(t)}function Ne(t,e,n){if(!z||"undefined"==typeof console)throw t;console.error(t)}let Me=!1;const Re=[];let Le,Fe=!1;function Ue(){Fe=!1;const t=Re.slice(0);Re.length=0;for(let e=0;e<t.length;e++)t[e]()}if("undefined"!=typeof Promise&&et(Promise)){const t=Promise.resolve();Le=()=>{t.then(Ue),G&&setTimeout(A)},Me=!0}else if(W||"undefined"==typeof MutationObserver||!et(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())Le="undefined"!=typeof setImmediate&&et(setImmediate)?()=>{setImmediate(Ue)}:()=>{setTimeout(Ue,0)};else{let t=1;const e=new MutationObserver(Ue),n=document.createTextNode(String(t));e.observe(n,{characterData:!0}),Le=()=>{t=(t+1)%2,n.data=String(t)},Me=!0}function Be(t,e){let n;if(Re.push((()=>{if(t)try{t.call(e)}catch(t){Pe(t,e,"nextTick")}else n&&n(e)})),Fe||(Fe=!0,Le()),!t&&"undefined"!=typeof Promise)return new Promise((t=>{n=t}))}function Ve(t){return(e,n=rt)=>{if(n)return function(t,e,n){const o=t.$options;o[e]=zn(o[e],n)}(n,t,e)}}const ze=Ve("beforeMount"),He=Ve("mounted"),We=Ve("beforeUpdate"),Ke=Ve("updated"),qe=Ve("beforeDestroy"),Ge=Ve("destroyed"),Ze=Ve("activated"),Je=Ve("deactivated"),Xe=Ve("serverPrefetch"),Qe=Ve("renderTracked"),Ye=Ve("renderTriggered"),tn=Ve("errorCaptured");var en=Object.freeze({__proto__:null,version:"2.7.14",defineComponent:function(t){return t},ref:function(t){return Nt(t,!1)},shallowRef:function(t){return Nt(t,!0)},isRef:Dt,toRef:Rt,toRefs:function(t){const n=e(t)?new Array(t.length):{};for(const e in t)n[e]=Rt(t,e);return n},unref:function(t){return Dt(t)?t.value:t},proxyRefs:function(t){if(Et(t))return t;const e={},n=Object.keys(t);for(let o=0;o<n.length;o++)Mt(e,t,n[o]);return e},customRef:function(t){const e=new dt,{get:n,set:o}=t((()=>{e.depend()}),(()=>{e.notify()})),r={get value(){return n()},set value(t){o(t)}};return U(r,"__v_isRef",!0),r},triggerRef:function(t){t.dep&&t.dep.notify()},reactive:function(t){return Tt(t,!1),t},isReactive:Et,isReadonly:It,isShallow:Pt,isProxy:function(t){return Et(t)||It(t)},shallowReactive:At,markRaw:function(t){return Object.isExtensible(t)&&U(t,"__v_skip",!0),t},toRaw:function t(e){const n=e&&e.__v_raw;return n?t(n):e},readonly:Lt,shallowReadonly:function(t){return Ft(t,!0)},computed:function(t,e){let n,o;const r=i(t);r?(n=t,o=A):(n=t.get,o=t.set);const s=Y()?null:new an(rt,n,A,{lazy:!0}),c={effect:s,get value(){return s?(s.dirty&&s.evaluate(),dt.target&&s.depend(),s.value):n()},set value(t){o(t)}};return U(c,"__v_isRef",!0),U(c,"__v_isReadonly",r),c},watch:function(t,e,n){return zt(t,e,n)},watchEffect:function(t,e){return zt(t,null,e)},watchPostEffect:Bt,watchSyncEffect:function(t,e){return zt(t,null,{flush:"sync"})},EffectScope:Wt,effectScope:function(t){return new Wt(t)},onScopeDispose:function(t){Ht&&Ht.cleanups.push(t)},getCurrentScope:function(){return Ht},provide:function(t,e){rt&&(Kt(rt)[t]=e)},inject:function(t,e,n=!1){const o=rt;if(o){const r=o.$parent&&o.$parent._provided;if(r&&t in r)return r[t];if(arguments.length>1)return n&&i(e)?e.call(o):e}},h:function(t,e,n){return Te(rt,t,e,n,2,!0)},getCurrentInstance:function(){return rt&&{proxy:rt}},useSlots:function(){return Oe().slots},useAttrs:function(){return Oe().attrs},useListeners:function(){return Oe().listeners},mergeDefaults:function(t,n){const o=e(t)?t.reduce(((t,e)=>(t[e]={},t)),{}):t;for(const t in n){const r=o[t];r?e(r)||i(r)?o[t]={type:r,default:n[t]}:r.default=n[t]:null===r&&(o[t]={default:n[t]})}return o},nextTick:Be,set:Ot,del:St,useCssModule:function(e="$style"){{if(!rt)return t;const n=rt[e];return n||t}},useCssVars:function(t){if(!z)return;const e=rt;e&&Bt((()=>{const n=e.$el,o=t(e,e._setupProxy);if(n&&1===n.nodeType){const t=n.style;for(const e in o)t.setProperty(`--${e}`,o[e])}}))},defineAsyncComponent:function(t){i(t)&&(t={loader:t});const{loader:e,loadingComponent:n,errorComponent:o,delay:r=200,timeout:s,suspensible:c=!1,onError:a}=t;let l=null,u=0;const f=()=>{let t;return l||(t=l=e().catch((t=>{if(t=t instanceof Error?t:new Error(String(t)),a)return new Promise(((e,n)=>{a(t,(()=>e((u++,l=null,f()))),(()=>n(t)),u+1)}));throw t})).then((e=>t!==l&&l?l:(e&&(e.__esModule||"Module"===e[Symbol.toStringTag])&&(e=e.default),e))))};return()=>({component:f(),delay:r,timeout:s,error:o,loading:n})},onBeforeMount:ze,onMounted:He,onBeforeUpdate:We,onUpdated:Ke,onBeforeUnmount:qe,onUnmounted:Ge,onActivated:Ze,onDeactivated:Je,onServerPrefetch:Xe,onRenderTracked:Qe,onRenderTriggered:Ye,onErrorCaptured:function(t,e=rt){tn(t,e)}});const nn=new ot;function on(t){return rn(t,nn),nn.clear(),t}function rn(t,n){let o,r;const s=e(t);if(!(!s&&!c(t)||t.__v_skip||Object.isFrozen(t)||t instanceof it)){if(t.__ob__){const e=t.__ob__.dep.id;if(n.has(e))return;n.add(e)}if(s)for(o=t.length;o--;)rn(t[o],n);else if(Dt(t))rn(t.value,n);else for(r=Object.keys(t),o=r.length;o--;)rn(t[r[o]],n)}}let sn,cn=0;class an{constructor(t,e,n,o,r){!function(t,e=Ht){e&&e.active&&e.effects.push(t)}(this,Ht&&!Ht._vm?Ht:t?t._scope:void 0),(this.vm=t)&&r&&(t._watcher=this),o?(this.deep=!!o.deep,this.user=!!o.user,this.lazy=!!o.lazy,this.sync=!!o.sync,this.before=o.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++cn,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ot,this.newDepIds=new ot,this.expression="",i(e)?this.getter=e:(this.getter=function(t){if(B.test(t))return;const e=t.split(".");return function(t){for(let n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}(e),this.getter||(this.getter=A)),this.value=this.lazy?void 0:this.get()}get(){let t;ht(this);const e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;Pe(t,e,`getter for watcher "${this.expression}"`)}finally{this.deep&&on(t),mt(),this.cleanupDeps()}return t}addDep(t){const e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))}cleanupDeps(){let t=this.deps.length;for(;t--;){const e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}let e=this.depIds;this.depIds=this.newDepIds,this.newDepIds=e,this.newDepIds.clear(),e=this.deps,this.deps=this.newDeps,this.newDeps=e,this.newDeps.length=0}update(){this.lazy?this.dirty=!0:this.sync?this.run():An(this)}run(){if(this.active){const t=this.get();if(t!==this.value||c(t)||this.deep){const e=this.value;if(this.value=t,this.user){const n=`callback for watcher "${this.expression}"`;Ie(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}}evaluate(){this.value=this.get(),this.dirty=!1}depend(){let t=this.deps.length;for(;t--;)this.deps[t].depend()}teardown(){if(this.vm&&!this.vm._isBeingDestroyed&&_(this.vm._scope.effects,this),this.active){let t=this.deps.length;for(;t--;)this.deps[t].removeSub(this);this.active=!1,this.onStop&&this.onStop()}}}function ln(t,e){sn.$on(t,e)}function un(t,e){sn.$off(t,e)}function fn(t,e){const n=sn;return function o(){const r=e.apply(null,arguments);null!==r&&n.$off(t,o)}}function dn(t,e,n){sn=t,Zt(e,n||{},ln,un,fn,t),sn=void 0}let pn=null;function hn(t){const e=pn;return pn=t,()=>{pn=e}}function mn(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function _n(t,e){if(e){if(t._directInactive=!1,mn(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(let e=0;e<t.$children.length;e++)_n(t.$children[e]);yn(t,"activated")}}function vn(t,e){if(!(e&&(t._directInactive=!0,mn(t))||t._inactive)){t._inactive=!0;for(let e=0;e<t.$children.length;e++)vn(t.$children[e]);yn(t,"deactivated")}}function yn(t,e,n,o=!0){ht();const r=rt;o&&st(t);const s=t.$options[e],i=`${e} hook`;if(s)for(let e=0,o=s.length;e<o;e++)Ie(s[e],t,n||null,t,i);t._hasHookEvent&&t.$emit("hook:"+e),o&&st(r),mt()}const gn=[],bn=[];let $n={},wn=!1,Cn=!1,xn=0;let kn=0,On=Date.now;if(z&&!W){const t=window.performance;t&&"function"==typeof t.now&&On()>document.createEvent("Event").timeStamp&&(On=()=>t.now())}const Sn=(t,e)=>{if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function jn(){let t,e;for(kn=On(),Cn=!0,gn.sort(Sn),xn=0;xn<gn.length;xn++)t=gn[xn],t.before&&t.before(),e=t.id,$n[e]=null,t.run();const n=bn.slice(),o=gn.slice();xn=gn.length=bn.length=0,$n={},wn=Cn=!1,function(t){for(let e=0;e<t.length;e++)t[e]._inactive=!0,_n(t[e],!0)}(n),function(t){let e=t.length;for(;e--;){const n=t[e],o=n.vm;o&&o._watcher===n&&o._isMounted&&!o._isDestroyed&&yn(o,"updated")}}(o),(()=>{for(let t=0;t<ft.length;t++){const e=ft[t];e.subs=e.subs.filter((t=>t)),e._pending=!1}ft.length=0})(),tt&&L.devtools&&tt.emit("flush")}function An(t){const e=t.id;if(null==$n[e]&&(t!==dt.target||!t.noRecurse)){if($n[e]=!0,Cn){let e=gn.length-1;for(;e>xn&&gn[e].id>t.id;)e--;gn.splice(e+1,0,t)}else gn.push(t);wn||(wn=!0,Be(jn))}}function Tn(t,e){if(t){const n=Object.create(null),o=nt?Reflect.ownKeys(t):Object.keys(t);for(let r=0;r<o.length;r++){const s=o[r];if("__ob__"===s)continue;const c=t[s].from;if(c in e._provided)n[s]=e._provided[c];else if("default"in t[s]){const o=t[s].default;n[s]=i(o)?o.call(e):o}}return n}}function En(n,o,s,i,c){const a=c.options;let l;y(i,"_uid")?(l=Object.create(i),l._original=i):(l=i,i=i._original);const u=r(a._compiled),f=!u;this.data=n,this.props=o,this.children=s,this.parent=i,this.listeners=n.on||t,this.injections=Tn(a.inject,i),this.slots=()=>(this.$slots||ge(i,n.scopedSlots,this.$slots=_e(s,i)),this.$slots),Object.defineProperty(this,"scopedSlots",{enumerable:!0,get(){return ge(i,n.scopedSlots,this.slots())}}),u&&(this.$options=a,this.$slots=this.slots(),this.$scopedSlots=ge(i,n.scopedSlots,this.$slots)),a._scopeId?this._c=(t,n,o,r)=>{const s=Te(l,t,n,o,r,f);return s&&!e(s)&&(s.fnScopeId=a._scopeId,s.fnContext=i),s}:this._c=(t,e,n,o)=>Te(l,t,e,n,o,f)}function Pn(t,e,n,o,r){const s=lt(t);return s.fnContext=n,s.fnOptions=o,e.slot&&((s.data||(s.data={})).slot=e.slot),s}function In(t,e){for(const n in e)t[$(n)]=e[n]}function Dn(t){return t.name||t.__name||t._componentTag}me(En.prototype);const Nn={init(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){const e=t;Nn.prepatch(e,e)}else{(t.componentInstance=function(t,e){const n={_isComponent:!0,_parentVnode:t,parent:e},r=t.data.inlineTemplate;o(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns);return new t.componentOptions.Ctor(n)}(t,pn)).$mount(e?t.elm:void 0,e)}},prepatch(e,n){const o=n.componentOptions;!function(e,n,o,r,s){const i=r.data.scopedSlots,c=e.$scopedSlots,a=!!(i&&!i.$stable||c!==t&&!c.$stable||i&&e.$scopedSlots.$key!==i.$key||!i&&e.$scopedSlots.$key);let l=!!(s||e.$options._renderChildren||a);const u=e.$vnode;e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=s;const f=r.data.attrs||t;e._attrsProxy&&Ce(e._attrsProxy,f,u.data&&u.data.attrs||t,e,"$attrs")&&(l=!0),e.$attrs=f,o=o||t;const d=e.$options._parentListeners;if(e._listenersProxy&&Ce(e._listenersProxy,o,d||t,e,"$listeners"),e.$listeners=e.$options._parentListeners=o,dn(e,o,d),n&&e.$options.props){$t(!1);const t=e._props,o=e.$options._propKeys||[];for(let r=0;r<o.length;r++){const s=o[r],i=e.$options.props;t[s]=Gn(s,i,n,e)}$t(!0),e.$options.propsData=n}l&&(e.$slots=_e(s,r.context),e.$forceUpdate())}(n.componentInstance=e.componentInstance,o.propsData,o.listeners,n,o.children)},insert(t){const{context:e,componentInstance:n}=t;var o;n._isMounted||(n._isMounted=!0,yn(n,"mounted")),t.data.keepAlive&&(e._isMounted?((o=n)._inactive=!1,bn.push(o)):_n(n,!0))},destroy(t){const{componentInstance:e}=t;e._isDestroyed||(t.data.keepAlive?vn(e,!0):e.$destroy())}},Mn=Object.keys(Nn);function Rn(s,i,a,l,u){if(n(s))return;const d=a.$options._base;if(c(s)&&(s=d.extend(s)),"function"!=typeof s)return;let p;if(n(s.cid)&&(p=s,s=function(t,e){if(r(t.error)&&o(t.errorComp))return t.errorComp;if(o(t.resolved))return t.resolved;const s=Se;if(s&&o(t.owners)&&-1===t.owners.indexOf(s)&&t.owners.push(s),r(t.loading)&&o(t.loadingComp))return t.loadingComp;if(s&&!o(t.owners)){const r=t.owners=[s];let i=!0,a=null,l=null;s.$on("hook:destroyed",(()=>_(r,s)));const u=t=>{for(let t=0,e=r.length;t<e;t++)r[t].$forceUpdate();t&&(r.length=0,null!==a&&(clearTimeout(a),a=null),null!==l&&(clearTimeout(l),l=null))},d=D((n=>{t.resolved=je(n,e),i?r.length=0:u(!0)})),p=D((e=>{o(t.errorComp)&&(t.error=!0,u(!0))})),h=t(d,p);return c(h)&&(f(h)?n(t.resolved)&&h.then(d,p):f(h.component)&&(h.component.then(d,p),o(h.error)&&(t.errorComp=je(h.error,e)),o(h.loading)&&(t.loadingComp=je(h.loading,e),0===h.delay?t.loading=!0:a=setTimeout((()=>{a=null,n(t.resolved)&&n(t.error)&&(t.loading=!0,u(!1))}),h.delay||200)),o(h.timeout)&&(l=setTimeout((()=>{l=null,n(t.resolved)&&p(null)}),h.timeout)))),i=!1,t.loading?t.loadingComp:t.resolved}}(p,d),void 0===s))return function(t,e,n,o,r){const s=ct();return s.asyncFactory=t,s.asyncMeta={data:e,context:n,children:o,tag:r},s}(p,i,a,l,u);i=i||{},ao(s),o(i.model)&&function(t,n){const r=t.model&&t.model.prop||"value",s=t.model&&t.model.event||"input";(n.attrs||(n.attrs={}))[r]=n.model.value;const i=n.on||(n.on={}),c=i[s],a=n.model.callback;o(c)?(e(c)?-1===c.indexOf(a):c!==a)&&(i[s]=[a].concat(c)):i[s]=a}(s.options,i);const h=function(t,e,r){const s=e.options.props;if(n(s))return;const i={},{attrs:c,props:a}=t;if(o(c)||o(a))for(const t in s){const e=x(t);Xt(i,a,t,e,!0)||Xt(i,c,t,e,!1)}return i}(i,s);if(r(s.options.functional))return function(n,r,s,i,c){const a=n.options,l={},u=a.props;if(o(u))for(const e in u)l[e]=Gn(e,u,r||t);else o(s.attrs)&&In(l,s.attrs),o(s.props)&&In(l,s.props);const f=new En(s,l,c,i,n),d=a.render.call(null,f._c,f);if(d instanceof it)return Pn(d,s,f.parent,a);if(e(d)){const t=Qt(d)||[],e=new Array(t.length);for(let n=0;n<t.length;n++)e[n]=Pn(t[n],s,f.parent,a);return e}}(s,h,i,a,l);const m=i.on;if(i.on=i.nativeOn,r(s.options.abstract)){const t=i.slot;i={},t&&(i.slot=t)}!function(t){const e=t.hook||(t.hook={});for(let t=0;t<Mn.length;t++){const n=Mn[t],o=e[n],r=Nn[n];o===r||o&&o._merged||(e[n]=o?Ln(r,o):r)}}(i);const v=Dn(s.options)||u;return new it(`vue-component-${s.cid}${v?`-${v}`:""}`,i,void 0,void 0,void 0,a,{Ctor:s,propsData:h,listeners:m,tag:u,children:l},p)}function Ln(t,e){const n=(n,o)=>{t(n,o),e(n,o)};return n._merged=!0,n}let Fn=A;const Un=L.optionMergeStrategies;function Bn(t,e,n=!0){if(!e)return t;let o,r,s;const i=nt?Reflect.ownKeys(e):Object.keys(e);for(let c=0;c<i.length;c++)o=i[c],"__ob__"!==o&&(r=t[o],s=e[o],n&&y(t,o)?r!==s&&l(r)&&l(s)&&Bn(r,s):Ot(t,o,s));return t}function Vn(t,e,n){return n?function(){const o=i(e)?e.call(n,n):e,r=i(t)?t.call(n,n):t;return o?Bn(o,r):r}:e?t?function(){return Bn(i(e)?e.call(this,this):e,i(t)?t.call(this,this):t)}:e:t}function zn(t,n){const o=n?t?t.concat(n):e(n)?n:[n]:t;return o?function(t){const e=[];for(let n=0;n<t.length;n++)-1===e.indexOf(t[n])&&e.push(t[n]);return e}(o):o}function Hn(t,e,n,o){const r=Object.create(t||null);return e?S(r,e):r}Un.data=function(t,e,n){return n?Vn(t,e,n):e&&"function"!=typeof e?t:Vn(t,e)},R.forEach((t=>{Un[t]=zn})),M.forEach((function(t){Un[t+"s"]=Hn})),Un.watch=function(t,n,o,r){if(t===J&&(t=void 0),n===J&&(n=void 0),!n)return Object.create(t||null);if(!t)return n;const s={};S(s,t);for(const t in n){let o=s[t];const r=n[t];o&&!e(o)&&(o=[o]),s[t]=o?o.concat(r):e(r)?r:[r]}return s},Un.props=Un.methods=Un.inject=Un.computed=function(t,e,n,o){if(!t)return e;const r=Object.create(null);return S(r,t),e&&S(r,e),r},Un.provide=function(t,e){return t?function(){const n=Object.create(null);return Bn(n,i(t)?t.call(this):t),e&&Bn(n,i(e)?e.call(this):e,!1),n}:e};const Wn=function(t,e){return void 0===e?t:e};function Kn(t,n,o){if(i(n)&&(n=n.options),function(t,n){const o=t.props;if(!o)return;const r={};let s,i,c;if(e(o))for(s=o.length;s--;)i=o[s],"string"==typeof i&&(c=$(i),r[c]={type:null});else if(l(o))for(const t in o)i=o[t],c=$(t),r[c]=l(i)?i:{type:i};t.props=r}(n),function(t,n){const o=t.inject;if(!o)return;const r=t.inject={};if(e(o))for(let t=0;t<o.length;t++)r[o[t]]={from:o[t]};else if(l(o))for(const t in o){const e=o[t];r[t]=l(e)?S({from:t},e):{from:e}}}(n),function(t){const e=t.directives;if(e)for(const t in e){const n=e[t];i(n)&&(e[t]={bind:n,update:n})}}(n),!n._base&&(n.extends&&(t=Kn(t,n.extends,o)),n.mixins))for(let e=0,r=n.mixins.length;e<r;e++)t=Kn(t,n.mixins[e],o);const r={};let s;for(s in t)c(s);for(s in n)y(t,s)||c(s);function c(e){const s=Un[e]||Wn;r[e]=s(t[e],n[e],o,e)}return r}function qn(t,e,n,o){if("string"!=typeof n)return;const r=t[e];if(y(r,n))return r[n];const s=$(n);if(y(r,s))return r[s];const i=w(s);if(y(r,i))return r[i];return r[n]||r[s]||r[i]}function Gn(t,e,n,o){const r=e[t],s=!y(n,t);let c=n[t];const a=Qn(Boolean,r.type);if(a>-1)if(s&&!y(r,"default"))c=!1;else if(""===c||c===x(t)){const t=Qn(String,r.type);(t<0||a<t)&&(c=!0)}if(void 0===c){c=function(t,e,n){if(!y(e,"default"))return;const o=e.default;if(t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n])return t._props[n];return i(o)&&"Function"!==Jn(e.type)?o.call(t):o}(o,r,t);const e=bt;$t(!0),xt(c),$t(e)}return c}const Zn=/^\s*function (\w+)/;function Jn(t){const e=t&&t.toString().match(Zn);return e?e[1]:""}function Xn(t,e){return Jn(t)===Jn(e)}function Qn(t,n){if(!e(n))return Xn(n,t)?0:-1;for(let e=0,o=n.length;e<o;e++)if(Xn(n[e],t))return e;return-1}const Yn={enumerable:!0,configurable:!0,get:A,set:A};function to(t,e,n){Yn.get=function(){return this[e][n]},Yn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,Yn)}function eo(t){const n=t.$options;if(n.props&&function(t,e){const n=t.$options.propsData||{},o=t._props=At({}),r=t.$options._propKeys=[];t.$parent&&$t(!1);for(const s in e){r.push(s);kt(o,s,Gn(s,e,n,t)),s in t||to(t,"_props",s)}$t(!0)}(t,n.props),function(t){const e=t.$options,n=e.setup;if(n){const o=t._setupContext=we(t);st(t),ht();const r=Ie(n,null,[t._props||At({}),o],t,"setup");if(mt(),st(),i(r))e.render=r;else if(c(r))if(t._setupState=r,r.__sfc){const e=t._setupProxy={};for(const t in r)"__sfc"!==t&&Mt(e,r,t)}else for(const e in r)F(e)||Mt(t,r,e)}}(t),n.methods&&function(t,e){t.$options.props;for(const n in e)t[n]="function"!=typeof e[n]?A:k(e[n],t)}(t,n.methods),n.data)!function(t){let e=t.$options.data;e=t._data=i(e)?function(t,e){ht();try{return t.call(e,e)}catch(t){return Pe(t,e,"data()"),{}}finally{mt()}}(e,t):e||{},l(e)||(e={});const n=Object.keys(e),o=t.$options.props;t.$options.methods;let r=n.length;for(;r--;){const e=n[r];o&&y(o,e)||F(e)||to(t,"_data",e)}const s=xt(e);s&&s.vmCount++}(t);else{const e=xt(t._data={});e&&e.vmCount++}n.computed&&function(t,e){const n=t._computedWatchers=Object.create(null),o=Y();for(const r in e){const s=e[r],c=i(s)?s:s.get;o||(n[r]=new an(t,c||A,A,no)),r in t||oo(t,r,s)}}(t,n.computed),n.watch&&n.watch!==J&&function(t,n){for(const o in n){const r=n[o];if(e(r))for(let e=0;e<r.length;e++)io(t,o,r[e]);else io(t,o,r)}}(t,n.watch)}const no={lazy:!0};function oo(t,e,n){const o=!Y();i(n)?(Yn.get=o?ro(e):so(n),Yn.set=A):(Yn.get=n.get?o&&!1!==n.cache?ro(e):so(n.get):A,Yn.set=n.set||A),Object.defineProperty(t,e,Yn)}function ro(t){return function(){const e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),dt.target&&e.depend(),e.value}}function so(t){return function(){return t.call(this,this)}}function io(t,e,n,o){return l(n)&&(o=n,n=n.handler),"string"==typeof n&&(n=t[n]),t.$watch(e,n,o)}let co=0;function ao(t){let e=t.options;if(t.super){const n=ao(t.super);if(n!==t.superOptions){t.superOptions=n;const o=function(t){let e;const n=t.options,o=t.sealedOptions;for(const t in n)n[t]!==o[t]&&(e||(e={}),e[t]=n[t]);return e}(t);o&&S(t.extendOptions,o),e=t.options=Kn(n,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function lo(t){this._init(t)}function uo(t){t.cid=0;let e=1;t.extend=function(t){t=t||{};const n=this,o=n.cid,r=t._Ctor||(t._Ctor={});if(r[o])return r[o];const s=Dn(t)||Dn(n.options),i=function(t){this._init(t)};return(i.prototype=Object.create(n.prototype)).constructor=i,i.cid=e++,i.options=Kn(n.options,t),i.super=n,i.options.props&&function(t){const e=t.options.props;for(const n in e)to(t.prototype,"_props",n)}(i),i.options.computed&&function(t){const e=t.options.computed;for(const n in e)oo(t.prototype,n,e[n])}(i),i.extend=n.extend,i.mixin=n.mixin,i.use=n.use,M.forEach((function(t){i[t]=n[t]})),s&&(i.options.components[s]=i),i.superOptions=n.options,i.extendOptions=t,i.sealedOptions=S({},i.options),r[o]=i,i}}function fo(t){return t&&(Dn(t.Ctor.options)||t.tag)}function po(t,n){return e(t)?t.indexOf(n)>-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(o=t,"[object RegExp]"===a.call(o)&&t.test(n));var o}function ho(t,e){const{cache:n,keys:o,_vnode:r}=t;for(const t in n){const s=n[t];if(s){const i=s.name;i&&!e(i)&&mo(n,t,o,r)}}}function mo(t,e,n,o){const r=t[e];!r||o&&r.tag===o.tag||r.componentInstance.$destroy(),t[e]=null,_(n,e)}!function(e){e.prototype._init=function(e){const n=this;n._uid=co++,n._isVue=!0,n.__v_skip=!0,n._scope=new Wt(!0),n._scope._vm=!0,e&&e._isComponent?function(t,e){const n=t.$options=Object.create(t.constructor.options),o=e._parentVnode;n.parent=e.parent,n._parentVnode=o;const r=o.componentOptions;n.propsData=r.propsData,n._parentListeners=r.listeners,n._renderChildren=r.children,n._componentTag=r.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=Kn(ao(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){const e=t.$options;let n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;const e=t.$options._parentListeners;e&&dn(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;const n=e.$options,o=e.$vnode=n._parentVnode,r=o&&o.context;e.$slots=_e(n._renderChildren,r),e.$scopedSlots=o?ge(e.$parent,o.data.scopedSlots,e.$slots):t,e._c=(t,n,o,r)=>Te(e,t,n,o,r,!1),e.$createElement=(t,n,o,r)=>Te(e,t,n,o,r,!0);const s=o&&o.data;kt(e,"$attrs",s&&s.attrs||t,null,!0),kt(e,"$listeners",n._parentListeners||t,null,!0)}(n),yn(n,"beforeCreate",void 0,!1),function(t){const e=Tn(t.$options.inject,t);e&&($t(!1),Object.keys(e).forEach((n=>{kt(t,n,e[n])})),$t(!0))}(n),eo(n),function(t){const e=t.$options.provide;if(e){const n=i(e)?e.call(t):e;if(!c(n))return;const o=Kt(t),r=nt?Reflect.ownKeys(n):Object.keys(n);for(let t=0;t<r.length;t++){const e=r[t];Object.defineProperty(o,e,Object.getOwnPropertyDescriptor(n,e))}}}(n),yn(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(lo),function(t){const e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=Ot,t.prototype.$delete=St,t.prototype.$watch=function(t,e,n){const o=this;if(l(e))return io(o,t,e,n);(n=n||{}).user=!0;const r=new an(o,t,e,n);if(n.immediate){const t=`callback for immediate watcher "${r.expression}"`;ht(),Ie(e,o,[r.value],o,t),mt()}return function(){r.teardown()}}}(lo),function(t){const n=/^hook:/;t.prototype.$on=function(t,o){const r=this;if(e(t))for(let e=0,n=t.length;e<n;e++)r.$on(t[e],o);else(r._events[t]||(r._events[t]=[])).push(o),n.test(t)&&(r._hasHookEvent=!0);return r},t.prototype.$once=function(t,e){const n=this;function o(){n.$off(t,o),e.apply(n,arguments)}return o.fn=e,n.$on(t,o),n},t.prototype.$off=function(t,n){const o=this;if(!arguments.length)return o._events=Object.create(null),o;if(e(t)){for(let e=0,r=t.length;e<r;e++)o.$off(t[e],n);return o}const r=o._events[t];if(!r)return o;if(!n)return o._events[t]=null,o;let s,i=r.length;for(;i--;)if(s=r[i],s===n||s.fn===n){r.splice(i,1);break}return o},t.prototype.$emit=function(t){const e=this;let n=e._events[t];if(n){n=n.length>1?O(n):n;const o=O(arguments,1),r=`event handler for "${t}"`;for(let t=0,s=n.length;t<s;t++)Ie(n[t],e,o,e,r)}return e}}(lo),function(t){t.prototype._update=function(t,e){const n=this,o=n.$el,r=n._vnode,s=hn(n);n._vnode=t,n.$el=r?n.__patch__(r,t):n.__patch__(n.$el,t,e,!1),s(),o&&(o.__vue__=null),n.$el&&(n.$el.__vue__=n);let i=n;for(;i&&i.$vnode&&i.$parent&&i.$vnode===i.$parent._vnode;)i.$parent.$el=i.$el,i=i.$parent},t.prototype.$forceUpdate=function(){const t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){const t=this;if(t._isBeingDestroyed)return;yn(t,"beforeDestroy"),t._isBeingDestroyed=!0;const e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||_(e.$children,t),t._scope.stop(),t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),yn(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}(lo),function(t){me(t.prototype),t.prototype.$nextTick=function(t){return Be(t,this)},t.prototype._render=function(){const t=this,{render:n,_parentVnode:o}=t.$options;let r;o&&t._isMounted&&(t.$scopedSlots=ge(t.$parent,o.data.scopedSlots,t.$slots,t.$scopedSlots),t._slotsProxy&&ke(t._slotsProxy,t.$scopedSlots)),t.$vnode=o;try{st(t),Se=t,r=n.call(t._renderProxy,t.$createElement)}catch(e){Pe(e,t,"render"),r=t._vnode}finally{Se=null,st()}return e(r)&&1===r.length&&(r=r[0]),r instanceof it||(r=ct()),r.parent=o,r}}(lo);const _o=[String,RegExp,Array];var vo={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:_o,exclude:_o,max:[String,Number]},methods:{cacheVNode(){const{cache:t,keys:e,vnodeToCache:n,keyToCache:o}=this;if(n){const{tag:r,componentInstance:s,componentOptions:i}=n;t[o]={name:fo(i),tag:r,componentInstance:s},e.push(o),this.max&&e.length>parseInt(this.max)&&mo(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created(){this.cache=Object.create(null),this.keys=[]},destroyed(){for(const t in this.cache)mo(this.cache,t,this.keys)},mounted(){this.cacheVNode(),this.$watch("include",(t=>{ho(this,(e=>po(t,e)))})),this.$watch("exclude",(t=>{ho(this,(e=>!po(t,e)))}))},updated(){this.cacheVNode()},render(){const t=this.$slots.default,e=Ae(t),n=e&&e.componentOptions;if(n){const t=fo(n),{include:o,exclude:r}=this;if(o&&(!t||!po(o,t))||r&&t&&po(r,t))return e;const{cache:s,keys:i}=this,c=null==e.key?n.Ctor.cid+(n.tag?`::${n.tag}`:""):e.key;s[c]?(e.componentInstance=s[c].componentInstance,_(i,c),i.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){const e={get:()=>L};Object.defineProperty(t,"config",e),t.util={warn:Fn,extend:S,mergeOptions:Kn,defineReactive:kt},t.set=Ot,t.delete=St,t.nextTick=Be,t.observable=t=>(xt(t),t),t.options=Object.create(null),M.forEach((e=>{t.options[e+"s"]=Object.create(null)})),t.options._base=t,S(t.options.components,vo),function(t){t.use=function(t){const e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;const n=O(arguments,1);return n.unshift(this),i(t.install)?t.install.apply(t,n):i(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Kn(this.options,t),this}}(t),uo(t),function(t){M.forEach((e=>{t[e]=function(t,n){return n?("component"===e&&l(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&i(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(lo),Object.defineProperty(lo.prototype,"$isServer",{get:Y}),Object.defineProperty(lo.prototype,"$ssrContext",{get(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(lo,"FunctionalRenderContext",{value:En}),lo.version="2.7.14";const yo=h("style,class"),go=h("input,textarea,option,select,progress"),bo=h("contenteditable,draggable,spellcheck"),$o=h("events,caret,typing,plaintext-only"),wo=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Co="http://www.w3.org/1999/xlink",xo=t=>":"===t.charAt(5)&&"xlink"===t.slice(0,5),ko=t=>xo(t)?t.slice(6,t.length):"",Oo=t=>null==t||!1===t;function So(t){let e=t.data,n=t,r=t;for(;o(r.componentInstance);)r=r.componentInstance._vnode,r&&r.data&&(e=jo(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=jo(e,n.data));return function(t,e){if(o(t)||o(e))return Ao(t,To(e));return""}(e.staticClass,e.class)}function jo(t,e){return{staticClass:Ao(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function Ao(t,e){return t?e?t+" "+e:t:e||""}function To(t){return Array.isArray(t)?function(t){let e,n="";for(let r=0,s=t.length;r<s;r++)o(e=To(t[r]))&&""!==e&&(n&&(n+=" "),n+=e);return n}(t):c(t)?function(t){let e="";for(const n in t)t[n]&&(e&&(e+=" "),e+=n);return e}(t):"string"==typeof t?t:""}const Eo={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Po=h("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Io=h("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Do=t=>Po(t)||Io(t);const No=Object.create(null);const Mo=h("text,number,password,search,email,tel,url");var Ro=Object.freeze({__proto__:null,createElement:function(t,e){const n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(t,e){return document.createElementNS(Eo[t],e)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,e,n){t.insertBefore(e,n)},removeChild:function(t,e){t.removeChild(e)},appendChild:function(t,e){t.appendChild(e)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,e){t.textContent=e},setStyleScope:function(t,e){t.setAttribute(e,"")}}),Lo={create(t,e){Fo(e)},update(t,e){t.data.ref!==e.data.ref&&(Fo(t,!0),Fo(e))},destroy(t){Fo(t,!0)}};function Fo(t,n){const r=t.data.ref;if(!o(r))return;const s=t.context,c=t.componentInstance||t.elm,a=n?null:c,l=n?void 0:c;if(i(r))return void Ie(r,s,[a],s,"template ref function");const u=t.data.refInFor,f="string"==typeof r||"number"==typeof r,d=Dt(r),p=s.$refs;if(f||d)if(u){const t=f?p[r]:r.value;n?e(t)&&_(t,c):e(t)?t.includes(c)||t.push(c):f?(p[r]=[c],Uo(s,r,p[r])):r.value=[c]}else if(f){if(n&&p[r]!==c)return;p[r]=l,Uo(s,r,a)}else if(d){if(n&&r.value!==c)return;r.value=a}}function Uo({_setupState:t},e,n){t&&y(t,e)&&(Dt(t[e])?t[e].value=n:t[e]=n)}const Bo=new it("",{},[]),Vo=["create","activate","update","remove","destroy"];function zo(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&o(t.data)===o(e.data)&&function(t,e){if("input"!==t.tag)return!0;let n;const r=o(n=t.data)&&o(n=n.attrs)&&n.type,s=o(n=e.data)&&o(n=n.attrs)&&n.type;return r===s||Mo(r)&&Mo(s)}(t,e)||r(t.isAsyncPlaceholder)&&n(e.asyncFactory.error))}function Ho(t,e,n){let r,s;const i={};for(r=e;r<=n;++r)s=t[r].key,o(s)&&(i[s]=r);return i}var Wo={create:Ko,update:Ko,destroy:function(t){Ko(t,Bo)}};function Ko(t,e){(t.data.directives||e.data.directives)&&function(t,e){const n=t===Bo,o=e===Bo,r=Go(t.data.directives,t.context),s=Go(e.data.directives,e.context),i=[],c=[];let a,l,u;for(a in s)l=r[a],u=s[a],l?(u.oldValue=l.value,u.oldArg=l.arg,Jo(u,"update",e,t),u.def&&u.def.componentUpdated&&c.push(u)):(Jo(u,"bind",e,t),u.def&&u.def.inserted&&i.push(u));if(i.length){const o=()=>{for(let n=0;n<i.length;n++)Jo(i[n],"inserted",e,t)};n?Jt(e,"insert",o):o()}c.length&&Jt(e,"postpatch",(()=>{for(let n=0;n<c.length;n++)Jo(c[n],"componentUpdated",e,t)}));if(!n)for(a in r)s[a]||Jo(r[a],"unbind",t,t,o)}(t,e)}const qo=Object.create(null);function Go(t,e){const n=Object.create(null);if(!t)return n;let o,r;for(o=0;o<t.length;o++){if(r=t[o],r.modifiers||(r.modifiers=qo),n[Zo(r)]=r,e._setupState&&e._setupState.__sfc){const t=r.def||qn(e,"_setupState","v-"+r.name);r.def="function"==typeof t?{bind:t,update:t}:t}r.def=r.def||qn(e.$options,"directives",r.name)}return n}function Zo(t){return t.rawName||`${t.name}.${Object.keys(t.modifiers||{}).join(".")}`}function Jo(t,e,n,o,r){const s=t.def&&t.def[e];if(s)try{s(n.elm,t,n,o,r)}catch(o){Pe(o,n.context,`directive ${t.name} ${e} hook`)}}var Xo=[Lo,Wo];function Qo(t,e){const s=e.componentOptions;if(o(s)&&!1===s.Ctor.options.inheritAttrs)return;if(n(t.data.attrs)&&n(e.data.attrs))return;let i,c,a;const l=e.elm,u=t.data.attrs||{};let f=e.data.attrs||{};for(i in(o(f.__ob__)||r(f._v_attr_proxy))&&(f=e.data.attrs=S({},f)),f)c=f[i],a=u[i],a!==c&&Yo(l,i,c,e.data.pre);for(i in(W||q)&&f.value!==u.value&&Yo(l,"value",f.value),u)n(f[i])&&(xo(i)?l.removeAttributeNS(Co,ko(i)):bo(i)||l.removeAttribute(i))}function Yo(t,e,n,o){o||t.tagName.indexOf("-")>-1?tr(t,e,n):wo(e)?Oo(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):bo(e)?t.setAttribute(e,((t,e)=>Oo(e)||"false"===e?"false":"contenteditable"===t&&$o(e)?e:"true")(e,n)):xo(e)?Oo(n)?t.removeAttributeNS(Co,ko(e)):t.setAttributeNS(Co,e,n):tr(t,e,n)}function tr(t,e,n){if(Oo(n))t.removeAttribute(e);else{if(W&&!K&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){const e=n=>{n.stopImmediatePropagation(),t.removeEventListener("input",e)};t.addEventListener("input",e),t.__ieph=!0}t.setAttribute(e,n)}}var er={create:Qo,update:Qo};function nr(t,e){const r=e.elm,s=e.data,i=t.data;if(n(s.staticClass)&&n(s.class)&&(n(i)||n(i.staticClass)&&n(i.class)))return;let c=So(e);const a=r._transitionClasses;o(a)&&(c=Ao(c,To(a))),c!==r._prevClass&&(r.setAttribute("class",c),r._prevClass=c)}var or={create:nr,update:nr};let rr;function sr(t,e,n){const o=rr;return function r(){const s=e.apply(null,arguments);null!==s&&ar(t,r,n,o)}}const ir=Me&&!(Z&&Number(Z[1])<=53);function cr(t,e,n,o){if(ir){const t=kn,n=e;e=n._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=t||e.timeStamp<=0||e.target.ownerDocument!==document)return n.apply(this,arguments)}}rr.addEventListener(t,e,Q?{capture:n,passive:o}:n)}function ar(t,e,n,o){(o||rr).removeEventListener(t,e._wrapper||e,n)}function lr(t,e){if(n(t.data.on)&&n(e.data.on))return;const r=e.data.on||{},s=t.data.on||{};rr=e.elm||t.elm,function(t){if(o(t.__r)){const e=W?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}o(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(r),Zt(r,s,cr,ar,sr,e.context),rr=void 0}var ur={create:lr,update:lr,destroy:t=>lr(t,Bo)};let fr;function dr(t,e){if(n(t.data.domProps)&&n(e.data.domProps))return;let s,i;const c=e.elm,a=t.data.domProps||{};let l=e.data.domProps||{};for(s in(o(l.__ob__)||r(l._v_attr_proxy))&&(l=e.data.domProps=S({},l)),a)s in l||(c[s]="");for(s in l){if(i=l[s],"textContent"===s||"innerHTML"===s){if(e.children&&(e.children.length=0),i===a[s])continue;1===c.childNodes.length&&c.removeChild(c.childNodes[0])}if("value"===s&&"PROGRESS"!==c.tagName){c._value=i;const t=n(i)?"":String(i);pr(c,t)&&(c.value=t)}else if("innerHTML"===s&&Io(c.tagName)&&n(c.innerHTML)){fr=fr||document.createElement("div"),fr.innerHTML=`<svg>${i}</svg>`;const t=fr.firstChild;for(;c.firstChild;)c.removeChild(c.firstChild);for(;t.firstChild;)c.appendChild(t.firstChild)}else if(i!==a[s])try{c[s]=i}catch(t){}}}function pr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){let n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){const n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return p(n)!==p(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var hr={create:dr,update:dr};const mr=g((function(t){const e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){const o=t.split(n);o.length>1&&(e[o[0].trim()]=o[1].trim())}})),e}));function _r(t){const e=vr(t.style);return t.staticStyle?S(t.staticStyle,e):e}function vr(t){return Array.isArray(t)?j(t):"string"==typeof t?mr(t):t}const yr=/^--/,gr=/\s*!important$/,br=(t,e,n)=>{if(yr.test(e))t.style.setProperty(e,n);else if(gr.test(n))t.style.setProperty(x(e),n.replace(gr,""),"important");else{const o=Cr(e);if(Array.isArray(n))for(let e=0,r=n.length;e<r;e++)t.style[o]=n[e];else t.style[o]=n}},$r=["Webkit","Moz","ms"];let wr;const Cr=g((function(t){if(wr=wr||document.createElement("div").style,"filter"!==(t=$(t))&&t in wr)return t;const e=t.charAt(0).toUpperCase()+t.slice(1);for(let t=0;t<$r.length;t++){const n=$r[t]+e;if(n in wr)return n}}));function xr(t,e){const r=e.data,s=t.data;if(n(r.staticStyle)&&n(r.style)&&n(s.staticStyle)&&n(s.style))return;let i,c;const a=e.elm,l=s.staticStyle,u=s.normalizedStyle||s.style||{},f=l||u,d=vr(e.data.style)||{};e.data.normalizedStyle=o(d.__ob__)?S({},d):d;const p=function(t,e){const n={};let o;if(e){let e=t;for(;e.componentInstance;)e=e.componentInstance._vnode,e&&e.data&&(o=_r(e.data))&&S(n,o)}(o=_r(t.data))&&S(n,o);let r=t;for(;r=r.parent;)r.data&&(o=_r(r.data))&&S(n,o);return n}(e,!0);for(c in f)n(p[c])&&br(a,c,"");for(c in p)i=p[c],i!==f[c]&&br(a,c,null==i?"":i)}var kr={create:xr,update:xr};const Or=/\s+/;function Sr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Or).forEach((e=>t.classList.add(e))):t.classList.add(e);else{const n=` ${t.getAttribute("class")||""} `;n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function jr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Or).forEach((e=>t.classList.remove(e))):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{let n=` ${t.getAttribute("class")||""} `;const o=" "+e+" ";for(;n.indexOf(o)>=0;)n=n.replace(o," ");n=n.trim(),n?t.setAttribute("class",n):t.removeAttribute("class")}}function Ar(t){if(t){if("object"==typeof t){const e={};return!1!==t.css&&S(e,Tr(t.name||"v")),S(e,t),e}return"string"==typeof t?Tr(t):void 0}}const Tr=g((t=>({enterClass:`${t}-enter`,enterToClass:`${t}-enter-to`,enterActiveClass:`${t}-enter-active`,leaveClass:`${t}-leave`,leaveToClass:`${t}-leave-to`,leaveActiveClass:`${t}-leave-active`}))),Er=z&&!K;let Pr="transition",Ir="transitionend",Dr="animation",Nr="animationend";Er&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Pr="WebkitTransition",Ir="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Dr="WebkitAnimation",Nr="webkitAnimationEnd"));const Mr=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:t=>t();function Rr(t){Mr((()=>{Mr(t)}))}function Lr(t,e){const n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Sr(t,e))}function Fr(t,e){t._transitionClasses&&_(t._transitionClasses,e),jr(t,e)}function Ur(t,e,n){const{type:o,timeout:r,propCount:s}=Vr(t,e);if(!o)return n();const i="transition"===o?Ir:Nr;let c=0;const a=()=>{t.removeEventListener(i,l),n()},l=e=>{e.target===t&&++c>=s&&a()};setTimeout((()=>{c<s&&a()}),r+1),t.addEventListener(i,l)}const Br=/\b(transform|all)(,|$)/;function Vr(t,e){const n=window.getComputedStyle(t),o=(n[Pr+"Delay"]||"").split(", "),r=(n[Pr+"Duration"]||"").split(", "),s=zr(o,r),i=(n[Dr+"Delay"]||"").split(", "),c=(n[Dr+"Duration"]||"").split(", "),a=zr(i,c);let l,u=0,f=0;"transition"===e?s>0&&(l="transition",u=s,f=r.length):"animation"===e?a>0&&(l="animation",u=a,f=c.length):(u=Math.max(s,a),l=u>0?s>a?"transition":"animation":null,f=l?"transition"===l?r.length:c.length:0);return{type:l,timeout:u,propCount:f,hasTransform:"transition"===l&&Br.test(n[Pr+"Property"])}}function zr(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map(((e,n)=>Hr(e)+Hr(t[n]))))}function Hr(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function Wr(t,e){const r=t.elm;o(r._leaveCb)&&(r._leaveCb.cancelled=!0,r._leaveCb());const s=Ar(t.data.transition);if(n(s))return;if(o(r._enterCb)||1!==r.nodeType)return;const{css:a,type:l,enterClass:u,enterToClass:f,enterActiveClass:d,appearClass:h,appearToClass:m,appearActiveClass:_,beforeEnter:v,enter:y,afterEnter:g,enterCancelled:b,beforeAppear:$,appear:w,afterAppear:C,appearCancelled:x,duration:k}=s;let O=pn,S=pn.$vnode;for(;S&&S.parent;)O=S.context,S=S.parent;const j=!O._isMounted||!t.isRootInsert;if(j&&!w&&""!==w)return;const A=j&&h?h:u,T=j&&_?_:d,E=j&&m?m:f,P=j&&$||v,I=j&&i(w)?w:y,N=j&&C||g,M=j&&x||b,R=p(c(k)?k.enter:k),L=!1!==a&&!K,F=Gr(I),U=r._enterCb=D((()=>{L&&(Fr(r,E),Fr(r,T)),U.cancelled?(L&&Fr(r,A),M&&M(r)):N&&N(r),r._enterCb=null}));t.data.show||Jt(t,"insert",(()=>{const e=r.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),I&&I(r,U)})),P&&P(r),L&&(Lr(r,A),Lr(r,T),Rr((()=>{Fr(r,A),U.cancelled||(Lr(r,E),F||(qr(R)?setTimeout(U,R):Ur(r,l,U)))}))),t.data.show&&(e&&e(),I&&I(r,U)),L||F||U()}function Kr(t,e){const r=t.elm;o(r._enterCb)&&(r._enterCb.cancelled=!0,r._enterCb());const s=Ar(t.data.transition);if(n(s)||1!==r.nodeType)return e();if(o(r._leaveCb))return;const{css:i,type:a,leaveClass:l,leaveToClass:u,leaveActiveClass:f,beforeLeave:d,leave:h,afterLeave:m,leaveCancelled:_,delayLeave:v,duration:y}=s,g=!1!==i&&!K,b=Gr(h),$=p(c(y)?y.leave:y),w=r._leaveCb=D((()=>{r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[t.key]=null),g&&(Fr(r,u),Fr(r,f)),w.cancelled?(g&&Fr(r,l),_&&_(r)):(e(),m&&m(r)),r._leaveCb=null}));function C(){w.cancelled||(!t.data.show&&r.parentNode&&((r.parentNode._pending||(r.parentNode._pending={}))[t.key]=t),d&&d(r),g&&(Lr(r,l),Lr(r,f),Rr((()=>{Fr(r,l),w.cancelled||(Lr(r,u),b||(qr($)?setTimeout(w,$):Ur(r,a,w)))}))),h&&h(r,w),g||b||w())}v?v(C):C()}function qr(t){return"number"==typeof t&&!isNaN(t)}function Gr(t){if(n(t))return!1;const e=t.fns;return o(e)?Gr(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function Zr(t,e){!0!==e.data.show&&Wr(e)}const Jr=function(t){let i,c;const a={},{modules:l,nodeOps:u}=t;for(i=0;i<Vo.length;++i)for(a[Vo[i]]=[],c=0;c<l.length;++c)o(l[c][Vo[i]])&&a[Vo[i]].push(l[c][Vo[i]]);function f(t){const e=u.parentNode(t);o(e)&&u.removeChild(e,t)}function d(t,e,n,s,i,c,l){if(o(t.elm)&&o(c)&&(t=c[l]=lt(t)),t.isRootInsert=!i,function(t,e,n,s){let i=t.data;if(o(i)){const c=o(t.componentInstance)&&i.keepAlive;if(o(i=i.hook)&&o(i=i.init)&&i(t,!1),o(t.componentInstance))return p(t,e),m(n,t.elm,s),r(c)&&function(t,e,n,r){let s,i=t;for(;i.componentInstance;)if(i=i.componentInstance._vnode,o(s=i.data)&&o(s=s.transition)){for(s=0;s<a.activate.length;++s)a.activate[s](Bo,i);e.push(i);break}m(n,t.elm,r)}(t,e,n,s),!0}}(t,e,n,s))return;const f=t.data,d=t.children,h=t.tag;o(h)?(t.elm=t.ns?u.createElementNS(t.ns,h):u.createElement(h,t),g(t),_(t,d,e),o(f)&&y(t,e),m(n,t.elm,s)):r(t.isComment)?(t.elm=u.createComment(t.text),m(n,t.elm,s)):(t.elm=u.createTextNode(t.text),m(n,t.elm,s))}function p(t,e){o(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,v(t)?(y(t,e),g(t)):(Fo(t),e.push(t))}function m(t,e,n){o(t)&&(o(n)?u.parentNode(n)===t&&u.insertBefore(t,e,n):u.appendChild(t,e))}function _(t,n,o){if(e(n))for(let e=0;e<n.length;++e)d(n[e],o,t.elm,null,!0,n,e);else s(t.text)&&u.appendChild(t.elm,u.createTextNode(String(t.text)))}function v(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return o(t.tag)}function y(t,e){for(let e=0;e<a.create.length;++e)a.create[e](Bo,t);i=t.data.hook,o(i)&&(o(i.create)&&i.create(Bo,t),o(i.insert)&&e.push(t))}function g(t){let e;if(o(e=t.fnScopeId))u.setStyleScope(t.elm,e);else{let n=t;for(;n;)o(e=n.context)&&o(e=e.$options._scopeId)&&u.setStyleScope(t.elm,e),n=n.parent}o(e=pn)&&e!==t.context&&e!==t.fnContext&&o(e=e.$options._scopeId)&&u.setStyleScope(t.elm,e)}function b(t,e,n,o,r,s){for(;o<=r;++o)d(n[o],s,t,e,!1,n,o)}function $(t){let e,n;const r=t.data;if(o(r))for(o(e=r.hook)&&o(e=e.destroy)&&e(t),e=0;e<a.destroy.length;++e)a.destroy[e](t);if(o(e=t.children))for(n=0;n<t.children.length;++n)$(t.children[n])}function w(t,e,n){for(;e<=n;++e){const n=t[e];o(n)&&(o(n.tag)?(C(n),$(n)):f(n.elm))}}function C(t,e){if(o(e)||o(t.data)){let n;const r=a.remove.length+1;for(o(e)?e.listeners+=r:e=function(t,e){function n(){0==--n.listeners&&f(t)}return n.listeners=e,n}(t.elm,r),o(n=t.componentInstance)&&o(n=n._vnode)&&o(n.data)&&C(n,e),n=0;n<a.remove.length;++n)a.remove[n](t,e);o(n=t.data.hook)&&o(n=n.remove)?n(t,e):e()}else f(t.elm)}function x(t,e,n,r){for(let s=n;s<r;s++){const n=e[s];if(o(n)&&zo(t,n))return s}}function k(t,e,s,i,c,l){if(t===e)return;o(e.elm)&&o(i)&&(e=i[c]=lt(e));const f=e.elm=t.elm;if(r(t.isAsyncPlaceholder))return void(o(e.asyncFactory.resolved)?j(t.elm,e,s):e.isAsyncPlaceholder=!0);if(r(e.isStatic)&&r(t.isStatic)&&e.key===t.key&&(r(e.isCloned)||r(e.isOnce)))return void(e.componentInstance=t.componentInstance);let p;const h=e.data;o(h)&&o(p=h.hook)&&o(p=p.prepatch)&&p(t,e);const m=t.children,_=e.children;if(o(h)&&v(e)){for(p=0;p<a.update.length;++p)a.update[p](t,e);o(p=h.hook)&&o(p=p.update)&&p(t,e)}n(e.text)?o(m)&&o(_)?m!==_&&function(t,e,r,s,i){let c,a,l,f,p=0,h=0,m=e.length-1,_=e[0],v=e[m],y=r.length-1,g=r[0],$=r[y];const C=!i;for(;p<=m&&h<=y;)n(_)?_=e[++p]:n(v)?v=e[--m]:zo(_,g)?(k(_,g,s,r,h),_=e[++p],g=r[++h]):zo(v,$)?(k(v,$,s,r,y),v=e[--m],$=r[--y]):zo(_,$)?(k(_,$,s,r,y),C&&u.insertBefore(t,_.elm,u.nextSibling(v.elm)),_=e[++p],$=r[--y]):zo(v,g)?(k(v,g,s,r,h),C&&u.insertBefore(t,v.elm,_.elm),v=e[--m],g=r[++h]):(n(c)&&(c=Ho(e,p,m)),a=o(g.key)?c[g.key]:x(g,e,p,m),n(a)?d(g,s,t,_.elm,!1,r,h):(l=e[a],zo(l,g)?(k(l,g,s,r,h),e[a]=void 0,C&&u.insertBefore(t,l.elm,_.elm)):d(g,s,t,_.elm,!1,r,h)),g=r[++h]);p>m?(f=n(r[y+1])?null:r[y+1].elm,b(t,f,r,h,y,s)):h>y&&w(e,p,m)}(f,m,_,s,l):o(_)?(o(t.text)&&u.setTextContent(f,""),b(f,null,_,0,_.length-1,s)):o(m)?w(m,0,m.length-1):o(t.text)&&u.setTextContent(f,""):t.text!==e.text&&u.setTextContent(f,e.text),o(h)&&o(p=h.hook)&&o(p=p.postpatch)&&p(t,e)}function O(t,e,n){if(r(n)&&o(t.parent))t.parent.data.pendingInsert=e;else for(let t=0;t<e.length;++t)e[t].data.hook.insert(e[t])}const S=h("attrs,class,staticClass,staticStyle,key");function j(t,e,n,s){let i;const{tag:c,data:a,children:l}=e;if(s=s||a&&a.pre,e.elm=t,r(e.isComment)&&o(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(o(a)&&(o(i=a.hook)&&o(i=i.init)&&i(e,!0),o(i=e.componentInstance)))return p(e,n),!0;if(o(c)){if(o(l))if(t.hasChildNodes())if(o(i=a)&&o(i=i.domProps)&&o(i=i.innerHTML)){if(i!==t.innerHTML)return!1}else{let e=!0,o=t.firstChild;for(let t=0;t<l.length;t++){if(!o||!j(o,l[t],n,s)){e=!1;break}o=o.nextSibling}if(!e||o)return!1}else _(e,l,n);if(o(a)){let t=!1;for(const o in a)if(!S(o)){t=!0,y(e,n);break}!t&&a.class&&on(a.class)}}else t.data!==e.text&&(t.data=e.text);return!0}return function(t,e,s,i){if(n(e))return void(o(t)&&$(t));let c=!1;const l=[];if(n(t))c=!0,d(e,l);else{const n=o(t.nodeType);if(!n&&zo(t,e))k(t,e,l,null,null,i);else{if(n){if(1===t.nodeType&&t.hasAttribute("data-server-rendered")&&(t.removeAttribute("data-server-rendered"),s=!0),r(s)&&j(t,e,l))return O(e,l,!0),t;f=t,t=new it(u.tagName(f).toLowerCase(),{},[],void 0,f)}const i=t.elm,c=u.parentNode(i);if(d(e,l,i._leaveCb?null:c,u.nextSibling(i)),o(e.parent)){let t=e.parent;const n=v(e);for(;t;){for(let e=0;e<a.destroy.length;++e)a.destroy[e](t);if(t.elm=e.elm,n){for(let e=0;e<a.create.length;++e)a.create[e](Bo,t);const e=t.data.hook.insert;if(e.merged)for(let t=1;t<e.fns.length;t++)e.fns[t]()}else Fo(t);t=t.parent}}o(c)?w([t],0,0):o(t.tag)&&$(t)}}var f;return O(e,l,c),e.elm}}({nodeOps:Ro,modules:[er,or,ur,hr,kr,z?{create:Zr,activate:Zr,remove(t,e){!0!==t.data.show?Kr(t,e):e()}}:{}].concat(Xo)});K&&document.addEventListener("selectionchange",(()=>{const t=document.activeElement;t&&t.vmodel&&rs(t,"input")}));const Xr={inserted(t,e,n,o){"select"===n.tag?(o.elm&&!o.elm._vOptions?Jt(n,"postpatch",(()=>{Xr.componentUpdated(t,e,n)})):Qr(t,e,n.context),t._vOptions=[].map.call(t.options,es)):("textarea"===n.tag||Mo(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",ns),t.addEventListener("compositionend",os),t.addEventListener("change",os),K&&(t.vmodel=!0)))},componentUpdated(t,e,n){if("select"===n.tag){Qr(t,e,n.context);const o=t._vOptions,r=t._vOptions=[].map.call(t.options,es);if(r.some(((t,e)=>!P(t,o[e])))){(t.multiple?e.value.some((t=>ts(t,r))):e.value!==e.oldValue&&ts(e.value,r))&&rs(t,"change")}}}};function Qr(t,e,n){Yr(t,e),(W||q)&&setTimeout((()=>{Yr(t,e)}),0)}function Yr(t,e,n){const o=e.value,r=t.multiple;if(r&&!Array.isArray(o))return;let s,i;for(let e=0,n=t.options.length;e<n;e++)if(i=t.options[e],r)s=I(o,es(i))>-1,i.selected!==s&&(i.selected=s);else if(P(es(i),o))return void(t.selectedIndex!==e&&(t.selectedIndex=e));r||(t.selectedIndex=-1)}function ts(t,e){return e.every((e=>!P(e,t)))}function es(t){return"_value"in t?t._value:t.value}function ns(t){t.target.composing=!0}function os(t){t.target.composing&&(t.target.composing=!1,rs(t.target,"input"))}function rs(t,e){const n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function ss(t){return!t.componentInstance||t.data&&t.data.transition?t:ss(t.componentInstance._vnode)}var is={bind(t,{value:e},n){const o=(n=ss(n)).data&&n.data.transition,r=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;e&&o?(n.data.show=!0,Wr(n,(()=>{t.style.display=r}))):t.style.display=e?r:"none"},update(t,{value:e,oldValue:n},o){if(!e==!n)return;(o=ss(o)).data&&o.data.transition?(o.data.show=!0,e?Wr(o,(()=>{t.style.display=t.__vOriginalDisplay})):Kr(o,(()=>{t.style.display="none"}))):t.style.display=e?t.__vOriginalDisplay:"none"},unbind(t,e,n,o,r){r||(t.style.display=t.__vOriginalDisplay)}},cs={model:Xr,show:is};const as={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function ls(t){const e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?ls(Ae(e.children)):t}function us(t){const e={},n=t.$options;for(const o in n.propsData)e[o]=t[o];const o=n._parentListeners;for(const t in o)e[$(t)]=o[t];return e}function fs(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}const ds=t=>t.tag||ye(t),ps=t=>"show"===t.name;var hs={name:"transition",props:as,abstract:!0,render(t){let e=this.$slots.default;if(!e)return;if(e=e.filter(ds),!e.length)return;const n=this.mode,o=e[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;const r=ls(o);if(!r)return o;if(this._leaving)return fs(t,o);const i=`__transition-${this._uid}-`;r.key=null==r.key?r.isComment?i+"comment":i+r.tag:s(r.key)?0===String(r.key).indexOf(i)?r.key:i+r.key:r.key;const c=(r.data||(r.data={})).transition=us(this),a=this._vnode,l=ls(a);if(r.data.directives&&r.data.directives.some(ps)&&(r.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(r,l)&&!ye(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){const e=l.data.transition=S({},c);if("out-in"===n)return this._leaving=!0,Jt(e,"afterLeave",(()=>{this._leaving=!1,this.$forceUpdate()})),fs(t,o);if("in-out"===n){if(ye(r))return a;let t;const n=()=>{t()};Jt(c,"afterEnter",n),Jt(c,"enterCancelled",n),Jt(e,"delayLeave",(e=>{t=e}))}}return o}};const ms=S({tag:String,moveClass:String},as);delete ms.mode;var _s={props:ms,beforeMount(){const t=this._update;this._update=(e,n)=>{const o=hn(this);this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept,o(),t.call(this,e,n)}},render(t){const e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),o=this.prevChildren=this.children,r=this.$slots.default||[],s=this.children=[],i=us(this);for(let t=0;t<r.length;t++){const e=r[t];e.tag&&null!=e.key&&0!==String(e.key).indexOf("__vlist")&&(s.push(e),n[e.key]=e,(e.data||(e.data={})).transition=i)}if(o){const r=[],s=[];for(let t=0;t<o.length;t++){const e=o[t];e.data.transition=i,e.data.pos=e.elm.getBoundingClientRect(),n[e.key]?r.push(e):s.push(e)}this.kept=t(e,null,r),this.removed=s}return t(e,null,s)},updated(){const t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(vs),t.forEach(ys),t.forEach(gs),this._reflow=document.body.offsetHeight,t.forEach((t=>{if(t.data.moved){const n=t.elm,o=n.style;Lr(n,e),o.transform=o.WebkitTransform=o.transitionDuration="",n.addEventListener(Ir,n._moveCb=function t(o){o&&o.target!==n||o&&!/transform$/.test(o.propertyName)||(n.removeEventListener(Ir,t),n._moveCb=null,Fr(n,e))})}})))},methods:{hasMove(t,e){if(!Er)return!1;if(this._hasMove)return this._hasMove;const n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((t=>{jr(n,t)})),Sr(n,e),n.style.display="none",this.$el.appendChild(n);const o=Vr(n);return this.$el.removeChild(n),this._hasMove=o.hasTransform}}};function vs(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function ys(t){t.data.newPos=t.elm.getBoundingClientRect()}function gs(t){const e=t.data.pos,n=t.data.newPos,o=e.left-n.left,r=e.top-n.top;if(o||r){t.data.moved=!0;const e=t.elm.style;e.transform=e.WebkitTransform=`translate(${o}px,${r}px)`,e.transitionDuration="0s"}}var bs={Transition:hs,TransitionGroup:_s};lo.config.mustUseProp=(t,e,n)=>"value"===n&&go(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t,lo.config.isReservedTag=Do,lo.config.isReservedAttr=yo,lo.config.getTagNamespace=function(t){return Io(t)?"svg":"math"===t?"math":void 0},lo.config.isUnknownElement=function(t){if(!z)return!0;if(Do(t))return!1;if(t=t.toLowerCase(),null!=No[t])return No[t];const e=document.createElement(t);return t.indexOf("-")>-1?No[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:No[t]=/HTMLUnknownElement/.test(e.toString())},S(lo.options.directives,cs),S(lo.options.components,bs),lo.prototype.__patch__=z?Jr:A,lo.prototype.$mount=function(t,e){return function(t,e,n){let o;t.$el=e,t.$options.render||(t.$options.render=ct),yn(t,"beforeMount"),o=()=>{t._update(t._render(),n)},new an(t,o,A,{before(){t._isMounted&&!t._isDestroyed&&yn(t,"beforeUpdate")}},!0),n=!1;const r=t._preWatchers;if(r)for(let t=0;t<r.length;t++)r[t].run();return null==t.$vnode&&(t._isMounted=!0,yn(t,"mounted")),t}(this,t=t&&z?function(t){if("string"==typeof t){return document.querySelector(t)||document.createElement("div")}return t}(t):void 0,e)},z&&setTimeout((()=>{L.devtools&&tt&&tt.emit("init",lo)}),0),S(lo,en),module.exports=lo;/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
var emptyObject = Object.freeze({});
var isArray = Array.isArray;
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef(v) {
    return v === undefined || v === null;
}
function isDef(v) {
    return v !== undefined && v !== null;
}
function isTrue(v) {
    return v === true;
}
function isFalse(v) {
    return v === false;
}
/**
 * Check if value is primitive.
 */
function isPrimitive(value) {
    return (typeof value === 'string' ||
        typeof value === 'number' ||
        // $flow-disable-line
        typeof value === 'symbol' ||
        typeof value === 'boolean');
}
function isFunction(value) {
    return typeof value === 'function';
}
/**
 * Quick object check - this is primarily used to tell
 * objects from primitive values when we know the value
 * is a JSON-compliant type.
 */
function isObject(obj) {
    return obj !== null && typeof obj === 'object';
}
/**
 * Get the raw type string of a value, e.g., [object Object].
 */
var _toString = Object.prototype.toString;
function toRawType(value) {
    return _toString.call(value).slice(8, -1);
}
/**
 * Strict object type check. Only returns true
 * for plain JavaScript objects.
 */
function isPlainObject(obj) {
    return _toString.call(obj) === '[object Object]';
}
function isRegExp(v) {
    return _toString.call(v) === '[object RegExp]';
}
/**
 * Check if val is a valid array index.
 */
function isValidArrayIndex(val) {
    var n = parseFloat(String(val));
    return n >= 0 && Math.floor(n) === n && isFinite(val);
}
function isPromise(val) {
    return (isDef(val) &&
        typeof val.then === 'function' &&
        typeof val.catch === 'function');
}
/**
 * Convert a value to a string that is actually rendered.
 */
function toString(val) {
    return val == null
        ? ''
        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
            ? JSON.stringify(val, null, 2)
            : String(val);
}
/**
 * Convert an input value to a number for persistence.
 * If the conversion fails, return original string.
 */
function toNumber(val) {
    var n = parseFloat(val);
    return isNaN(n) ? val : n;
}
/**
 * Make a map and return a function for checking if a key
 * is in that map.
 */
function makeMap(str, expectsLowerCase) {
    var map = Object.create(null);
    var list = str.split(',');
    for (var i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };
}
/**
 * Check if a tag is a built-in tag.
 */
var isBuiltInTag = makeMap('slot,component', true);
/**
 * Check if an attribute is a reserved attribute.
 */
var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
/**
 * Remove an item from an array.
 */
function remove$2(arr, item) {
    var len = arr.length;
    if (len) {
        // fast path for the only / last item
        if (item === arr[len - 1]) {
            arr.length = len - 1;
            return;
        }
        var index = arr.indexOf(item);
        if (index > -1) {
            return arr.splice(index, 1);
        }
    }
}
/**
 * Check whether an object has the property.
 */
var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
    return hasOwnProperty.call(obj, key);
}
/**
 * Create a cached version of a pure function.
 */
function cached(fn) {
    var cache = Object.create(null);
    return function cachedFn(str) {
        var hit = cache[str];
        return hit || (cache[str] = fn(str));
    };
}
/**
 * Camelize a hyphen-delimited string.
 */
var camelizeRE = /-(\w)/g;
var camelize = cached(function (str) {
    return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });
});
/**
 * Capitalize a string.
 */
var capitalize = cached(function (str) {
    return str.charAt(0).toUpperCase() + str.slice(1);
});
/**
 * Hyphenate a camelCase string.
 */
var hyphenateRE = /\B([A-Z])/g;
var hyphenate = cached(function (str) {
    return str.replace(hyphenateRE, '-$1').toLowerCase();
});
/**
 * Simple bind polyfill for environments that do not support it,
 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
 * since native bind is now performant enough in most browsers.
 * But removing it would mean breaking code that was able to run in
 * PhantomJS 1.x, so this must be kept for backward compatibility.
 */
/* istanbul ignore next */
function polyfillBind(fn, ctx) {
    function boundFn(a) {
        var l = arguments.length;
        return l
            ? l > 1
                ? fn.apply(ctx, arguments)
                : fn.call(ctx, a)
            : fn.call(ctx);
    }
    boundFn._length = fn.length;
    return boundFn;
}
function nativeBind(fn, ctx) {
    return fn.bind(ctx);
}
// @ts-expect-error bind cannot be `undefined`
var bind = Function.prototype.bind ? nativeBind : polyfillBind;
/**
 * Convert an Array-like object to a real Array.
 */
function toArray(list, start) {
    start = start || 0;
    var i = list.length - start;
    var ret = new Array(i);
    while (i--) {
        ret[i] = list[i + start];
    }
    return ret;
}
/**
 * Mix properties into target object.
 */
function extend(to, _from) {
    for (var key in _from) {
        to[key] = _from[key];
    }
    return to;
}
/**
 * Merge an Array of Objects into a single Object.
 */
function toObject(arr) {
    var res = {};
    for (var i = 0; i < arr.length; i++) {
        if (arr[i]) {
            extend(res, arr[i]);
        }
    }
    return res;
}
/* eslint-disable no-unused-vars */
/**
 * Perform no operation.
 * Stubbing args to make Flow happy without leaving useless transpiled code
 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
 */
function noop(a, b, c) { }
/**
 * Always return false.
 */
var no = function (a, b, c) { return false; };
/* eslint-enable no-unused-vars */
/**
 * Return the same value.
 */
var identity = function (_) { return _; };
/**
 * Check if two values are loosely equal - that is,
 * if they are plain objects, do they have the same shape?
 */
function looseEqual(a, b) {
    if (a === b)
        return true;
    var isObjectA = isObject(a);
    var isObjectB = isObject(b);
    if (isObjectA && isObjectB) {
        try {
            var isArrayA = Array.isArray(a);
            var isArrayB = Array.isArray(b);
            if (isArrayA && isArrayB) {
                return (a.length === b.length &&
                    a.every(function (e, i) {
                        return looseEqual(e, b[i]);
                    }));
            }
            else if (a instanceof Date && b instanceof Date) {
                return a.getTime() === b.getTime();
            }
            else if (!isArrayA && !isArrayB) {
                var keysA = Object.keys(a);
                var keysB = Object.keys(b);
                return (keysA.length === keysB.length &&
                    keysA.every(function (key) {
                        return looseEqual(a[key], b[key]);
                    }));
            }
            else {
                /* istanbul ignore next */
                return false;
            }
        }
        catch (e) {
            /* istanbul ignore next */
            return false;
        }
    }
    else if (!isObjectA && !isObjectB) {
        return String(a) === String(b);
    }
    else {
        return false;
    }
}
/**
 * Return the first index at which a loosely equal value can be
 * found in the array (if value is a plain object, the array must
 * contain an object of the same shape), or -1 if it is not present.
 */
function looseIndexOf(arr, val) {
    for (var i = 0; i < arr.length; i++) {
        if (looseEqual(arr[i], val))
            return i;
    }
    return -1;
}
/**
 * Ensure a function is called only once.
 */
function once(fn) {
    var called = false;
    return function () {
        if (!called) {
            called = true;
            fn.apply(this, arguments);
        }
    };
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
function hasChanged(x, y) {
    if (x === y) {
        return x === 0 && 1 / x !== 1 / y;
    }
    else {
        return x === x || y === y;
    }
}

var SSR_ATTR = 'data-server-rendered';
var ASSET_TYPES = ['component', 'directive', 'filter'];
var LIFECYCLE_HOOKS = [
    'beforeCreate',
    'created',
    'beforeMount',
    'mounted',
    'beforeUpdate',
    'updated',
    'beforeDestroy',
    'destroyed',
    'activated',
    'deactivated',
    'errorCaptured',
    'serverPrefetch',
    'renderTracked',
    'renderTriggered'
];

var config = {
    /**
     * Option merge strategies (used in core/util/options)
     */
    // $flow-disable-line
    optionMergeStrategies: Object.create(null),
    /**
     * Whether to suppress warnings.
     */
    silent: false,
    /**
     * Show production mode tip message on boot?
     */
    productionTip: process.env.NODE_ENV !== 'production',
    /**
     * Whether to enable devtools
     */
    devtools: process.env.NODE_ENV !== 'production',
    /**
     * Whether to record perf
     */
    performance: false,
    /**
     * Error handler for watcher errors
     */
    errorHandler: null,
    /**
     * Warn handler for watcher warns
     */
    warnHandler: null,
    /**
     * Ignore certain custom elements
     */
    ignoredElements: [],
    /**
     * Custom user key aliases for v-on
     */
    // $flow-disable-line
    keyCodes: Object.create(null),
    /**
     * Check if a tag is reserved so that it cannot be registered as a
     * component. This is platform-dependent and may be overwritten.
     */
    isReservedTag: no,
    /**
     * Check if an attribute is reserved so that it cannot be used as a component
     * prop. This is platform-dependent and may be overwritten.
     */
    isReservedAttr: no,
    /**
     * Check if a tag is an unknown element.
     * Platform-dependent.
     */
    isUnknownElement: no,
    /**
     * Get the namespace of an element
     */
    getTagNamespace: noop,
    /**
     * Parse the real tag name for the specific platform.
     */
    parsePlatformTagName: identity,
    /**
     * Check if an attribute must be bound using property, e.g. value
     * Platform-dependent.
     */
    mustUseProp: no,
    /**
     * Perform updates asynchronously. Intended to be used by Vue Test Utils
     * This will significantly reduce performance if set to false.
     */
    async: true,
    /**
     * Exposed for legacy reasons
     */
    _lifecycleHooks: LIFECYCLE_HOOKS
};

/**
 * unicode letters used for parsing html tags, component names and property paths.
 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
 */
var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
/**
 * Check if a string starts with $ or _
 */
function isReserved(str) {
    var c = (str + '').charCodeAt(0);
    return c === 0x24 || c === 0x5f;
}
/**
 * Define a property.
 */
function def(obj, key, val, enumerable) {
    Object.defineProperty(obj, key, {
        value: val,
        enumerable: !!enumerable,
        writable: true,
        configurable: true
    });
}
/**
 * Parse simple path.
 */
var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]"));
function parsePath(path) {
    if (bailRE.test(path)) {
        return;
    }
    var segments = path.split('.');
    return function (obj) {
        for (var i = 0; i < segments.length; i++) {
            if (!obj)
                return;
            obj = obj[segments[i]];
        }
        return obj;
    };
}

// can we use __proto__?
var hasProto = '__proto__' in {};
// Browser environment sniffing
var inBrowser = typeof window !== 'undefined';
var UA = inBrowser && window.navigator.userAgent.toLowerCase();
var isIE = UA && /msie|trident/.test(UA);
var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
var isEdge = UA && UA.indexOf('edge/') > 0;
UA && UA.indexOf('android') > 0;
var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
UA && /chrome\/\d+/.test(UA) && !isEdge;
UA && /phantomjs/.test(UA);
var isFF = UA && UA.match(/firefox\/(\d+)/);
// Firefox has a "watch" function on Object.prototype...
// @ts-expect-error firebox support
var nativeWatch = {}.watch;
var supportsPassive = false;
if (inBrowser) {
    try {
        var opts = {};
        Object.defineProperty(opts, 'passive', {
            get: function () {
                /* istanbul ignore next */
                supportsPassive = true;
            }
        }); // https://github.com/facebook/flow/issues/285
        window.addEventListener('test-passive', null, opts);
    }
    catch (e) { }
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
var _isServer;
var isServerRendering = function () {
    if (_isServer === undefined) {
        /* istanbul ignore if */
        if (!inBrowser && typeof global !== 'undefined') {
            // detect presence of vue-server-renderer and avoid
            // Webpack shimming the process
            _isServer =
                global['process'] && global['process'].env.VUE_ENV === 'server';
        }
        else {
            _isServer = false;
        }
    }
    return _isServer;
};
// detect devtools
var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
/* istanbul ignore next */
function isNative(Ctor) {
    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
var hasSymbol = typeof Symbol !== 'undefined' &&
    isNative(Symbol) &&
    typeof Reflect !== 'undefined' &&
    isNative(Reflect.ownKeys);
var _Set; // $flow-disable-line
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
    // use native Set when available.
    _Set = Set;
}
else {
    // a non-standard Set polyfill that only works with primitive keys.
    _Set = /** @class */ (function () {
        function Set() {
            this.set = Object.create(null);
        }
        Set.prototype.has = function (key) {
            return this.set[key] === true;
        };
        Set.prototype.add = function (key) {
            this.set[key] = true;
        };
        Set.prototype.clear = function () {
            this.set = Object.create(null);
        };
        return Set;
    }());
}

var currentInstance = null;
/**
 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
 * relies on it). Do not use this internally, just use `currentInstance`.
 *
 * @internal this function needs manual type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function getCurrentInstance() {
    return currentInstance && { proxy: currentInstance };
}
/**
 * @internal
 */
function setCurrentInstance(vm) {
    if (vm === void 0) { vm = null; }
    if (!vm)
        currentInstance && currentInstance._scope.off();
    currentInstance = vm;
    vm && vm._scope.on();
}

/**
 * @internal
 */
var VNode = /** @class */ (function () {
    function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
        this.tag = tag;
        this.data = data;
        this.children = children;
        this.text = text;
        this.elm = elm;
        this.ns = undefined;
        this.context = context;
        this.fnContext = undefined;
        this.fnOptions = undefined;
        this.fnScopeId = undefined;
        this.key = data && data.key;
        this.componentOptions = componentOptions;
        this.componentInstance = undefined;
        this.parent = undefined;
        this.raw = false;
        this.isStatic = false;
        this.isRootInsert = true;
        this.isComment = false;
        this.isCloned = false;
        this.isOnce = false;
        this.asyncFactory = asyncFactory;
        this.asyncMeta = undefined;
        this.isAsyncPlaceholder = false;
    }
    Object.defineProperty(VNode.prototype, "child", {
        // DEPRECATED: alias for componentInstance for backwards compat.
        /* istanbul ignore next */
        get: function () {
            return this.componentInstance;
        },
        enumerable: false,
        configurable: true
    });
    return VNode;
}());
var createEmptyVNode = function (text) {
    if (text === void 0) { text = ''; }
    var node = new VNode();
    node.text = text;
    node.isComment = true;
    return node;
};
function createTextVNode(val) {
    return new VNode(undefined, undefined, undefined, String(val));
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode(vnode) {
    var cloned = new VNode(vnode.tag, vnode.data, 
    // #7975
    // clone children array to avoid mutating original in case of cloning
    // a child.
    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
    cloned.ns = vnode.ns;
    cloned.isStatic = vnode.isStatic;
    cloned.key = vnode.key;
    cloned.isComment = vnode.isComment;
    cloned.fnContext = vnode.fnContext;
    cloned.fnOptions = vnode.fnOptions;
    cloned.fnScopeId = vnode.fnScopeId;
    cloned.asyncMeta = vnode.asyncMeta;
    cloned.isCloned = true;
    return cloned;
}

/******************************************************************************
Copyright (c) Microsoft Corporation.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */

var __assign = function() {
    __assign = Object.assign || function __assign(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};

var uid$2 = 0;
var pendingCleanupDeps = [];
var cleanupDeps = function () {
    for (var i = 0; i < pendingCleanupDeps.length; i++) {
        var dep = pendingCleanupDeps[i];
        dep.subs = dep.subs.filter(function (s) { return s; });
        dep._pending = false;
    }
    pendingCleanupDeps.length = 0;
};
/**
 * A dep is an observable that can have multiple
 * directives subscribing to it.
 * @internal
 */
var Dep = /** @class */ (function () {
    function Dep() {
        // pending subs cleanup
        this._pending = false;
        this.id = uid$2++;
        this.subs = [];
    }
    Dep.prototype.addSub = function (sub) {
        this.subs.push(sub);
    };
    Dep.prototype.removeSub = function (sub) {
        // #12696 deps with massive amount of subscribers are extremely slow to
        // clean up in Chromium
        // to workaround this, we unset the sub for now, and clear them on
        // next scheduler flush.
        this.subs[this.subs.indexOf(sub)] = null;
        if (!this._pending) {
            this._pending = true;
            pendingCleanupDeps.push(this);
        }
    };
    Dep.prototype.depend = function (info) {
        if (Dep.target) {
            Dep.target.addDep(this);
            if (process.env.NODE_ENV !== 'production' && info && Dep.target.onTrack) {
                Dep.target.onTrack(__assign({ effect: Dep.target }, info));
            }
        }
    };
    Dep.prototype.notify = function (info) {
        // stabilize the subscriber list first
        var subs = this.subs.filter(function (s) { return s; });
        if (process.env.NODE_ENV !== 'production' && !config.async) {
            // subs aren't sorted in scheduler if not running async
            // we need to sort them now to make sure they fire in correct
            // order
            subs.sort(function (a, b) { return a.id - b.id; });
        }
        for (var i = 0, l = subs.length; i < l; i++) {
            var sub = subs[i];
            if (process.env.NODE_ENV !== 'production' && info) {
                sub.onTrigger &&
                    sub.onTrigger(__assign({ effect: subs[i] }, info));
            }
            sub.update();
        }
    };
    return Dep;
}());
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null;
var targetStack = [];
function pushTarget(target) {
    targetStack.push(target);
    Dep.target = target;
}
function popTarget() {
    targetStack.pop();
    Dep.target = targetStack[targetStack.length - 1];
}

/*
 * not type checking this file because flow doesn't play well with
 * dynamically accessing methods on Array prototype
 */
var arrayProto = Array.prototype;
var arrayMethods = Object.create(arrayProto);
var methodsToPatch = [
    'push',
    'pop',
    'shift',
    'unshift',
    'splice',
    'sort',
    'reverse'
];
/**
 * Intercept mutating methods and emit events
 */
methodsToPatch.forEach(function (method) {
    // cache original method
    var original = arrayProto[method];
    def(arrayMethods, method, function mutator() {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
        }
        var result = original.apply(this, args);
        var ob = this.__ob__;
        var inserted;
        switch (method) {
            case 'push':
            case 'unshift':
                inserted = args;
                break;
            case 'splice':
                inserted = args.slice(2);
                break;
        }
        if (inserted)
            ob.observeArray(inserted);
        // notify change
        if (process.env.NODE_ENV !== 'production') {
            ob.dep.notify({
                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
                target: this,
                key: method
            });
        }
        else {
            ob.dep.notify();
        }
        return result;
    });
});

var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
var NO_INIITIAL_VALUE = {};
/**
 * In some cases we may want to disable observation inside a component's
 * update computation.
 */
var shouldObserve = true;
function toggleObserving(value) {
    shouldObserve = value;
}
// ssr mock dep
var mockDep = {
    notify: noop,
    depend: noop,
    addSub: noop,
    removeSub: noop
};
/**
 * Observer class that is attached to each observed
 * object. Once attached, the observer converts the target
 * object's property keys into getter/setters that
 * collect dependencies and dispatch updates.
 */
var Observer = /** @class */ (function () {
    function Observer(value, shallow, mock) {
        if (shallow === void 0) { shallow = false; }
        if (mock === void 0) { mock = false; }
        this.value = value;
        this.shallow = shallow;
        this.mock = mock;
        // this.value = value
        this.dep = mock ? mockDep : new Dep();
        this.vmCount = 0;
        def(value, '__ob__', this);
        if (isArray(value)) {
            if (!mock) {
                if (hasProto) {
                    value.__proto__ = arrayMethods;
                    /* eslint-enable no-proto */
                }
                else {
                    for (var i = 0, l = arrayKeys.length; i < l; i++) {
                        var key = arrayKeys[i];
                        def(value, key, arrayMethods[key]);
                    }
                }
            }
            if (!shallow) {
                this.observeArray(value);
            }
        }
        else {
            /**
             * Walk through all properties and convert them into
             * getter/setters. This method should only be called when
             * value type is Object.
             */
            var keys = Object.keys(value);
            for (var i = 0; i < keys.length; i++) {
                var key = keys[i];
                defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
            }
        }
    }
    /**
     * Observe a list of Array items.
     */
    Observer.prototype.observeArray = function (value) {
        for (var i = 0, l = value.length; i < l; i++) {
            observe(value[i], false, this.mock);
        }
    };
    return Observer;
}());
// helpers
/**
 * Attempt to create an observer instance for a value,
 * returns the new observer if successfully observed,
 * or the existing observer if the value already has one.
 */
function observe(value, shallow, ssrMockReactivity) {
    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
        return value.__ob__;
    }
    if (shouldObserve &&
        (ssrMockReactivity || !isServerRendering()) &&
        (isArray(value) || isPlainObject(value)) &&
        Object.isExtensible(value) &&
        !value.__v_skip /* ReactiveFlags.SKIP */ &&
        !isRef(value) &&
        !(value instanceof VNode)) {
        return new Observer(value, shallow, ssrMockReactivity);
    }
}
/**
 * Define a reactive property on an Object.
 */
function defineReactive(obj, key, val, customSetter, shallow, mock) {
    var dep = new Dep();
    var property = Object.getOwnPropertyDescriptor(obj, key);
    if (property && property.configurable === false) {
        return;
    }
    // cater for pre-defined getter/setters
    var getter = property && property.get;
    var setter = property && property.set;
    if ((!getter || setter) &&
        (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
        val = obj[key];
    }
    var childOb = !shallow && observe(val, false, mock);
    Object.defineProperty(obj, key, {
        enumerable: true,
        configurable: true,
        get: function reactiveGetter() {
            var value = getter ? getter.call(obj) : val;
            if (Dep.target) {
                if (process.env.NODE_ENV !== 'production') {
                    dep.depend({
                        target: obj,
                        type: "get" /* TrackOpTypes.GET */,
                        key: key
                    });
                }
                else {
                    dep.depend();
                }
                if (childOb) {
                    childOb.dep.depend();
                    if (isArray(value)) {
                        dependArray(value);
                    }
                }
            }
            return isRef(value) && !shallow ? value.value : value;
        },
        set: function reactiveSetter(newVal) {
            var value = getter ? getter.call(obj) : val;
            if (!hasChanged(value, newVal)) {
                return;
            }
            if (process.env.NODE_ENV !== 'production' && customSetter) {
                customSetter();
            }
            if (setter) {
                setter.call(obj, newVal);
            }
            else if (getter) {
                // #7981: for accessor properties without setter
                return;
            }
            else if (!shallow && isRef(value) && !isRef(newVal)) {
                value.value = newVal;
                return;
            }
            else {
                val = newVal;
            }
            childOb = !shallow && observe(newVal, false, mock);
            if (process.env.NODE_ENV !== 'production') {
                dep.notify({
                    type: "set" /* TriggerOpTypes.SET */,
                    target: obj,
                    key: key,
                    newValue: newVal,
                    oldValue: value
                });
            }
            else {
                dep.notify();
            }
        }
    });
    return dep;
}
function set(target, key, val) {
    if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {
        warn("Cannot set reactive property on undefined, null, or primitive value: ".concat(target));
    }
    if (isReadonly(target)) {
        process.env.NODE_ENV !== 'production' && warn("Set operation on key \"".concat(key, "\" failed: target is readonly."));
        return;
    }
    var ob = target.__ob__;
    if (isArray(target) && isValidArrayIndex(key)) {
        target.length = Math.max(target.length, key);
        target.splice(key, 1, val);
        // when mocking for SSR, array methods are not hijacked
        if (ob && !ob.shallow && ob.mock) {
            observe(val, false, true);
        }
        return val;
    }
    if (key in target && !(key in Object.prototype)) {
        target[key] = val;
        return val;
    }
    if (target._isVue || (ob && ob.vmCount)) {
        process.env.NODE_ENV !== 'production' &&
            warn('Avoid adding reactive properties to a Vue instance or its root $data ' +
                'at runtime - declare it upfront in the data option.');
        return val;
    }
    if (!ob) {
        target[key] = val;
        return val;
    }
    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
    if (process.env.NODE_ENV !== 'production') {
        ob.dep.notify({
            type: "add" /* TriggerOpTypes.ADD */,
            target: target,
            key: key,
            newValue: val,
            oldValue: undefined
        });
    }
    else {
        ob.dep.notify();
    }
    return val;
}
function del(target, key) {
    if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {
        warn("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target));
    }
    if (isArray(target) && isValidArrayIndex(key)) {
        target.splice(key, 1);
        return;
    }
    var ob = target.__ob__;
    if (target._isVue || (ob && ob.vmCount)) {
        process.env.NODE_ENV !== 'production' &&
            warn('Avoid deleting properties on a Vue instance or its root $data ' +
                '- just set it to null.');
        return;
    }
    if (isReadonly(target)) {
        process.env.NODE_ENV !== 'production' &&
            warn("Delete operation on key \"".concat(key, "\" failed: target is readonly."));
        return;
    }
    if (!hasOwn(target, key)) {
        return;
    }
    delete target[key];
    if (!ob) {
        return;
    }
    if (process.env.NODE_ENV !== 'production') {
        ob.dep.notify({
            type: "delete" /* TriggerOpTypes.DELETE */,
            target: target,
            key: key
        });
    }
    else {
        ob.dep.notify();
    }
}
/**
 * Collect dependencies on array elements when the array is touched, since
 * we cannot intercept array element access like property getters.
 */
function dependArray(value) {
    for (var e = void 0, i = 0, l = value.length; i < l; i++) {
        e = value[i];
        if (e && e.__ob__) {
            e.__ob__.dep.depend();
        }
        if (isArray(e)) {
            dependArray(e);
        }
    }
}

function reactive(target) {
    makeReactive(target, false);
    return target;
}
/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
function shallowReactive(target) {
    makeReactive(target, true);
    def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    return target;
}
function makeReactive(target, shallow) {
    // if trying to observe a readonly proxy, return the readonly version.
    if (!isReadonly(target)) {
        if (process.env.NODE_ENV !== 'production') {
            if (isArray(target)) {
                warn("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation."));
            }
            var existingOb = target && target.__ob__;
            if (existingOb && existingOb.shallow !== shallow) {
                warn("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
            }
        }
        var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
        if (process.env.NODE_ENV !== 'production' && !ob) {
            if (target == null || isPrimitive(target)) {
                warn("value cannot be made reactive: ".concat(String(target)));
            }
            if (isCollectionType(target)) {
                warn("Vue 2 does not support reactive collection types such as Map or Set.");
            }
        }
    }
}
function isReactive(value) {
    if (isReadonly(value)) {
        return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
    }
    return !!(value && value.__ob__);
}
function isShallow(value) {
    return !!(value && value.__v_isShallow);
}
function isReadonly(value) {
    return !!(value && value.__v_isReadonly);
}
function isProxy(value) {
    return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
    var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
    return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
    // non-extensible objects won't be observed anyway
    if (Object.isExtensible(value)) {
        def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
    }
    return value;
}
/**
 * @internal
 */
function isCollectionType(value) {
    var type = toRawType(value);
    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
}

/**
 * @internal
 */
var RefFlag = "__v_isRef";
function isRef(r) {
    return !!(r && r.__v_isRef === true);
}
function ref$1(value) {
    return createRef(value, false);
}
function shallowRef(value) {
    return createRef(value, true);
}
function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    var ref = {};
    def(ref, RefFlag, true);
    def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
    return ref;
}
function triggerRef(ref) {
    if (process.env.NODE_ENV !== 'production' && !ref.dep) {
        warn("received object is not a triggerable ref.");
    }
    if (process.env.NODE_ENV !== 'production') {
        ref.dep &&
            ref.dep.notify({
                type: "set" /* TriggerOpTypes.SET */,
                target: ref,
                key: 'value'
            });
    }
    else {
        ref.dep && ref.dep.notify();
    }
}
function unref(ref) {
    return isRef(ref) ? ref.value : ref;
}
function proxyRefs(objectWithRefs) {
    if (isReactive(objectWithRefs)) {
        return objectWithRefs;
    }
    var proxy = {};
    var keys = Object.keys(objectWithRefs);
    for (var i = 0; i < keys.length; i++) {
        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
    }
    return proxy;
}
function proxyWithRefUnwrap(target, source, key) {
    Object.defineProperty(target, key, {
        enumerable: true,
        configurable: true,
        get: function () {
            var val = source[key];
            if (isRef(val)) {
                return val.value;
            }
            else {
                var ob = val && val.__ob__;
                if (ob)
                    ob.dep.depend();
                return val;
            }
        },
        set: function (value) {
            var oldValue = source[key];
            if (isRef(oldValue) && !isRef(value)) {
                oldValue.value = value;
            }
            else {
                source[key] = value;
            }
        }
    });
}
function customRef(factory) {
    var dep = new Dep();
    var _a = factory(function () {
        if (process.env.NODE_ENV !== 'production') {
            dep.depend({
                target: ref,
                type: "get" /* TrackOpTypes.GET */,
                key: 'value'
            });
        }
        else {
            dep.depend();
        }
    }, function () {
        if (process.env.NODE_ENV !== 'production') {
            dep.notify({
                target: ref,
                type: "set" /* TriggerOpTypes.SET */,
                key: 'value'
            });
        }
        else {
            dep.notify();
        }
    }), get = _a.get, set = _a.set;
    var ref = {
        get value() {
            return get();
        },
        set value(newVal) {
            set(newVal);
        }
    };
    def(ref, RefFlag, true);
    return ref;
}
function toRefs(object) {
    if (process.env.NODE_ENV !== 'production' && !isReactive(object)) {
        warn("toRefs() expects a reactive object but received a plain one.");
    }
    var ret = isArray(object) ? new Array(object.length) : {};
    for (var key in object) {
        ret[key] = toRef(object, key);
    }
    return ret;
}
function toRef(object, key, defaultValue) {
    var val = object[key];
    if (isRef(val)) {
        return val;
    }
    var ref = {
        get value() {
            var val = object[key];
            return val === undefined ? defaultValue : val;
        },
        set value(newVal) {
            object[key] = newVal;
        }
    };
    def(ref, RefFlag, true);
    return ref;
}

var rawToReadonlyFlag = "__v_rawToReadonly";
var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly";
function readonly(target) {
    return createReadonly(target, false);
}
function createReadonly(target, shallow) {
    if (!isPlainObject(target)) {
        if (process.env.NODE_ENV !== 'production') {
            if (isArray(target)) {
                warn("Vue 2 does not support readonly arrays.");
            }
            else if (isCollectionType(target)) {
                warn("Vue 2 does not support readonly collection types such as Map or Set.");
            }
            else {
                warn("value cannot be made readonly: ".concat(typeof target));
            }
        }
        return target;
    }
    if (process.env.NODE_ENV !== 'production' && !Object.isExtensible(target)) {
        warn("Vue 2 does not support creating readonly proxy for non-extensible object.");
    }
    // already a readonly object
    if (isReadonly(target)) {
        return target;
    }
    // already has a readonly proxy
    var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
    var existingProxy = target[existingFlag];
    if (existingProxy) {
        return existingProxy;
    }
    var proxy = Object.create(Object.getPrototypeOf(target));
    def(target, existingFlag, proxy);
    def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
    def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
    if (isRef(target)) {
        def(proxy, RefFlag, true);
    }
    if (shallow || isShallow(target)) {
        def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
    }
    var keys = Object.keys(target);
    for (var i = 0; i < keys.length; i++) {
        defineReadonlyProperty(proxy, target, keys[i], shallow);
    }
    return proxy;
}
function defineReadonlyProperty(proxy, target, key, shallow) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get: function () {
            var val = target[key];
            return shallow || !isPlainObject(val) ? val : readonly(val);
        },
        set: function () {
            process.env.NODE_ENV !== 'production' &&
                warn("Set operation on key \"".concat(key, "\" failed: target is readonly."));
        }
    });
}
/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
function shallowReadonly(target) {
    return createReadonly(target, true);
}

function computed(getterOrOptions, debugOptions) {
    var getter;
    var setter;
    var onlyGetter = isFunction(getterOrOptions);
    if (onlyGetter) {
        getter = getterOrOptions;
        setter = process.env.NODE_ENV !== 'production'
            ? function () {
                warn('Write operation failed: computed value is readonly');
            }
            : noop;
    }
    else {
        getter = getterOrOptions.get;
        setter = getterOrOptions.set;
    }
    var watcher = isServerRendering()
        ? null
        : new Watcher(currentInstance, getter, noop, { lazy: true });
    if (process.env.NODE_ENV !== 'production' && watcher && debugOptions) {
        watcher.onTrack = debugOptions.onTrack;
        watcher.onTrigger = debugOptions.onTrigger;
    }
    var ref = {
        // some libs rely on the presence effect for checking computed refs
        // from normal refs, but the implementation doesn't matter
        effect: watcher,
        get value() {
            if (watcher) {
                if (watcher.dirty) {
                    watcher.evaluate();
                }
                if (Dep.target) {
                    if (process.env.NODE_ENV !== 'production' && Dep.target.onTrack) {
                        Dep.target.onTrack({
                            effect: Dep.target,
                            target: ref,
                            type: "get" /* TrackOpTypes.GET */,
                            key: 'value'
                        });
                    }
                    watcher.depend();
                }
                return watcher.value;
            }
            else {
                return getter();
            }
        },
        set value(newVal) {
            setter(newVal);
        }
    };
    def(ref, RefFlag, true);
    def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
    return ref;
}

var WATCHER = "watcher";
var WATCHER_CB = "".concat(WATCHER, " callback");
var WATCHER_GETTER = "".concat(WATCHER, " getter");
var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup");
// Simple effect.
function watchEffect(effect, options) {
    return doWatch(effect, null, options);
}
function watchPostEffect(effect, options) {
    return doWatch(effect, null, (process.env.NODE_ENV !== 'production'
        ? __assign(__assign({}, options), { flush: 'post' }) : { flush: 'post' }));
}
function watchSyncEffect(effect, options) {
    return doWatch(effect, null, (process.env.NODE_ENV !== 'production'
        ? __assign(__assign({}, options), { flush: 'sync' }) : { flush: 'sync' }));
}
// initial value for watchers to trigger on undefined initial values
var INITIAL_WATCHER_VALUE = {};
// implementation
function watch(source, cb, options) {
    if (process.env.NODE_ENV !== 'production' && typeof cb !== 'function') {
        warn("`watch(fn, options?)` signature has been moved to a separate API. " +
            "Use `watchEffect(fn, options?)` instead. `watch` now only " +
            "supports `watch(source, cb, options?) signature.");
    }
    return doWatch(source, cb, options);
}
function doWatch(source, cb, _a) {
    var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;
    if (process.env.NODE_ENV !== 'production' && !cb) {
        if (immediate !== undefined) {
            warn("watch() \"immediate\" option is only respected when using the " +
                "watch(source, callback, options?) signature.");
        }
        if (deep !== undefined) {
            warn("watch() \"deep\" option is only respected when using the " +
                "watch(source, callback, options?) signature.");
        }
    }
    var warnInvalidSource = function (s) {
        warn("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") +
            "function, a ref, a reactive object, or an array of these types.");
    };
    var instance = currentInstance;
    var call = function (fn, type, args) {
        if (args === void 0) { args = null; }
        return invokeWithErrorHandling(fn, null, args, instance, type);
    };
    var getter;
    var forceTrigger = false;
    var isMultiSource = false;
    if (isRef(source)) {
        getter = function () { return source.value; };
        forceTrigger = isShallow(source);
    }
    else if (isReactive(source)) {
        getter = function () {
            source.__ob__.dep.depend();
            return source;
        };
        deep = true;
    }
    else if (isArray(source)) {
        isMultiSource = true;
        forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });
        getter = function () {
            return source.map(function (s) {
                if (isRef(s)) {
                    return s.value;
                }
                else if (isReactive(s)) {
                    return traverse(s);
                }
                else if (isFunction(s)) {
                    return call(s, WATCHER_GETTER);
                }
                else {
                    process.env.NODE_ENV !== 'production' && warnInvalidSource(s);
                }
            });
        };
    }
    else if (isFunction(source)) {
        if (cb) {
            // getter with cb
            getter = function () { return call(source, WATCHER_GETTER); };
        }
        else {
            // no cb -> simple effect
            getter = function () {
                if (instance && instance._isDestroyed) {
                    return;
                }
                if (cleanup) {
                    cleanup();
                }
                return call(source, WATCHER, [onCleanup]);
            };
        }
    }
    else {
        getter = noop;
        process.env.NODE_ENV !== 'production' && warnInvalidSource(source);
    }
    if (cb && deep) {
        var baseGetter_1 = getter;
        getter = function () { return traverse(baseGetter_1()); };
    }
    var cleanup;
    var onCleanup = function (fn) {
        cleanup = watcher.onStop = function () {
            call(fn, WATCHER_CLEANUP);
        };
    };
    // in SSR there is no need to setup an actual effect, and it should be noop
    // unless it's eager
    if (isServerRendering()) {
        // we will also not call the invalidate callback (+ runner is not set up)
        onCleanup = noop;
        if (!cb) {
            getter();
        }
        else if (immediate) {
            call(cb, WATCHER_CB, [
                getter(),
                isMultiSource ? [] : undefined,
                onCleanup
            ]);
        }
        return noop;
    }
    var watcher = new Watcher(currentInstance, getter, noop, {
        lazy: true
    });
    watcher.noRecurse = !cb;
    var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
    // overwrite default run
    watcher.run = function () {
        if (!watcher.active) {
            return;
        }
        if (cb) {
            // watch(source, cb)
            var newValue = watcher.get();
            if (deep ||
                forceTrigger ||
                (isMultiSource
                    ? newValue.some(function (v, i) {
                        return hasChanged(v, oldValue[i]);
                    })
                    : hasChanged(newValue, oldValue))) {
                // cleanup before running cb again
                if (cleanup) {
                    cleanup();
                }
                call(cb, WATCHER_CB, [
                    newValue,
                    // pass undefined as the old value when it's changed for the first time
                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
                    onCleanup
                ]);
                oldValue = newValue;
            }
        }
        else {
            // watchEffect
            watcher.get();
        }
    };
    if (flush === 'sync') {
        watcher.update = watcher.run;
    }
    else if (flush === 'post') {
        watcher.post = true;
        watcher.update = function () { return queueWatcher(watcher); };
    }
    else {
        // pre
        watcher.update = function () {
            if (instance && instance === currentInstance && !instance._isMounted) {
                // pre-watcher triggered before
                var buffer = instance._preWatchers || (instance._preWatchers = []);
                if (buffer.indexOf(watcher) < 0)
                    buffer.push(watcher);
            }
            else {
                queueWatcher(watcher);
            }
        };
    }
    if (process.env.NODE_ENV !== 'production') {
        watcher.onTrack = onTrack;
        watcher.onTrigger = onTrigger;
    }
    // initial run
    if (cb) {
        if (immediate) {
            watcher.run();
        }
        else {
            oldValue = watcher.get();
        }
    }
    else if (flush === 'post' && instance) {
        instance.$once('hook:mounted', function () { return watcher.get(); });
    }
    else {
        watcher.get();
    }
    return function () {
        watcher.teardown();
    };
}

var activeEffectScope;
var EffectScope = /** @class */ (function () {
    function EffectScope(detached) {
        if (detached === void 0) { detached = false; }
        this.detached = detached;
        /**
         * @internal
         */
        this.active = true;
        /**
         * @internal
         */
        this.effects = [];
        /**
         * @internal
         */
        this.cleanups = [];
        this.parent = activeEffectScope;
        if (!detached && activeEffectScope) {
            this.index =
                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
        }
    }
    EffectScope.prototype.run = function (fn) {
        if (this.active) {
            var currentEffectScope = activeEffectScope;
            try {
                activeEffectScope = this;
                return fn();
            }
            finally {
                activeEffectScope = currentEffectScope;
            }
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn("cannot run an inactive effect scope.");
        }
    };
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    EffectScope.prototype.on = function () {
        activeEffectScope = this;
    };
    /**
     * This should only be called on non-detached scopes
     * @internal
     */
    EffectScope.prototype.off = function () {
        activeEffectScope = this.parent;
    };
    EffectScope.prototype.stop = function (fromParent) {
        if (this.active) {
            var i = void 0, l = void 0;
            for (i = 0, l = this.effects.length; i < l; i++) {
                this.effects[i].teardown();
            }
            for (i = 0, l = this.cleanups.length; i < l; i++) {
                this.cleanups[i]();
            }
            if (this.scopes) {
                for (i = 0, l = this.scopes.length; i < l; i++) {
                    this.scopes[i].stop(true);
                }
            }
            // nested scope, dereference from parent to avoid memory leaks
            if (!this.detached && this.parent && !fromParent) {
                // optimized O(1) removal
                var last = this.parent.scopes.pop();
                if (last && last !== this) {
                    this.parent.scopes[this.index] = last;
                    last.index = this.index;
                }
            }
            this.parent = undefined;
            this.active = false;
        }
    };
    return EffectScope;
}());
function effectScope(detached) {
    return new EffectScope(detached);
}
/**
 * @internal
 */
function recordEffectScope(effect, scope) {
    if (scope === void 0) { scope = activeEffectScope; }
    if (scope && scope.active) {
        scope.effects.push(effect);
    }
}
function getCurrentScope() {
    return activeEffectScope;
}
function onScopeDispose(fn) {
    if (activeEffectScope) {
        activeEffectScope.cleanups.push(fn);
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn("onScopeDispose() is called when there is no active effect scope" +
            " to be associated with.");
    }
}

function provide(key, value) {
    if (!currentInstance) {
        if (process.env.NODE_ENV !== 'production') {
            warn("provide() can only be used inside setup().");
        }
    }
    else {
        // TS doesn't allow symbol as index type
        resolveProvided(currentInstance)[key] = value;
    }
}
function resolveProvided(vm) {
    // by default an instance inherits its parent's provides object
    // but when it needs to provide values of its own, it creates its
    // own provides object using parent provides object as prototype.
    // this way in `inject` we can simply look up injections from direct
    // parent and let the prototype chain do the work.
    var existing = vm._provided;
    var parentProvides = vm.$parent && vm.$parent._provided;
    if (parentProvides === existing) {
        return (vm._provided = Object.create(parentProvides));
    }
    else {
        return existing;
    }
}
function inject(key, defaultValue, treatDefaultAsFactory) {
    if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }
    // fallback to `currentRenderingInstance` so that this can be called in
    // a functional component
    var instance = currentInstance;
    if (instance) {
        // #2400
        // to support `app.use` plugins,
        // fallback to appContext's `provides` if the instance is at root
        var provides = instance.$parent && instance.$parent._provided;
        if (provides && key in provides) {
            // TS doesn't allow symbol as index type
            return provides[key];
        }
        else if (arguments.length > 1) {
            return treatDefaultAsFactory && isFunction(defaultValue)
                ? defaultValue.call(instance)
                : defaultValue;
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn("injection \"".concat(String(key), "\" not found."));
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn("inject() can only be used inside setup() or functional components.");
    }
}

var normalizeEvent = cached(function (name) {
    var passive = name.charAt(0) === '&';
    name = passive ? name.slice(1) : name;
    var once = name.charAt(0) === '~'; // Prefixed last, checked first
    name = once ? name.slice(1) : name;
    var capture = name.charAt(0) === '!';
    name = capture ? name.slice(1) : name;
    return {
        name: name,
        once: once,
        capture: capture,
        passive: passive
    };
});
function createFnInvoker(fns, vm) {
    function invoker() {
        var fns = invoker.fns;
        if (isArray(fns)) {
            var cloned = fns.slice();
            for (var i = 0; i < cloned.length; i++) {
                invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler");
            }
        }
        else {
            // return handler return value for single handlers
            return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
        }
    }
    invoker.fns = fns;
    return invoker;
}
function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
    var name, cur, old, event;
    for (name in on) {
        cur = on[name];
        old = oldOn[name];
        event = normalizeEvent(name);
        if (isUndef(cur)) {
            process.env.NODE_ENV !== 'production' &&
                warn("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm);
        }
        else if (isUndef(old)) {
            if (isUndef(cur.fns)) {
                cur = on[name] = createFnInvoker(cur, vm);
            }
            if (isTrue(event.once)) {
                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
            }
            add(event.name, cur, event.capture, event.passive, event.params);
        }
        else if (cur !== old) {
            old.fns = cur;
            on[name] = old;
        }
    }
    for (name in oldOn) {
        if (isUndef(on[name])) {
            event = normalizeEvent(name);
            remove(event.name, oldOn[name], event.capture);
        }
    }
}

function mergeVNodeHook(def, hookKey, hook) {
    if (def instanceof VNode) {
        def = def.data.hook || (def.data.hook = {});
    }
    var invoker;
    var oldHook = def[hookKey];
    function wrappedHook() {
        hook.apply(this, arguments);
        // important: remove merged hook to ensure it's called only once
        // and prevent memory leak
        remove$2(invoker.fns, wrappedHook);
    }
    if (isUndef(oldHook)) {
        // no existing hook
        invoker = createFnInvoker([wrappedHook]);
    }
    else {
        /* istanbul ignore if */
        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
            // already a merged invoker
            invoker = oldHook;
            invoker.fns.push(wrappedHook);
        }
        else {
            // existing plain hook
            invoker = createFnInvoker([oldHook, wrappedHook]);
        }
    }
    invoker.merged = true;
    def[hookKey] = invoker;
}

function extractPropsFromVNodeData(data, Ctor, tag) {
    // we are only extracting raw values here.
    // validation and default values are handled in the child
    // component itself.
    var propOptions = Ctor.options.props;
    if (isUndef(propOptions)) {
        return;
    }
    var res = {};
    var attrs = data.attrs, props = data.props;
    if (isDef(attrs) || isDef(props)) {
        for (var key in propOptions) {
            var altKey = hyphenate(key);
            if (process.env.NODE_ENV !== 'production') {
                var keyInLowerCase = key.toLowerCase();
                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
                    tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") +
                        "".concat(formatComponentName(
                        // @ts-expect-error tag is string
                        tag || Ctor), ", but the declared prop name is") +
                        " \"".concat(key, "\". ") +
                        "Note that HTML attributes are case-insensitive and camelCased " +
                        "props need to use their kebab-case equivalents when using in-DOM " +
                        "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\"."));
                }
            }
            checkProp(res, props, key, altKey, true) ||
                checkProp(res, attrs, key, altKey, false);
        }
    }
    return res;
}
function checkProp(res, hash, key, altKey, preserve) {
    if (isDef(hash)) {
        if (hasOwn(hash, key)) {
            res[key] = hash[key];
            if (!preserve) {
                delete hash[key];
            }
            return true;
        }
        else if (hasOwn(hash, altKey)) {
            res[key] = hash[altKey];
            if (!preserve) {
                delete hash[altKey];
            }
            return true;
        }
    }
    return false;
}

// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren(children) {
    for (var i = 0; i < children.length; i++) {
        if (isArray(children[i])) {
            return Array.prototype.concat.apply([], children);
        }
    }
    return children;
}
// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren(children) {
    return isPrimitive(children)
        ? [createTextVNode(children)]
        : isArray(children)
            ? normalizeArrayChildren(children)
            : undefined;
}
function isTextNode(node) {
    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
}
function normalizeArrayChildren(children, nestedIndex) {
    var res = [];
    var i, c, lastIndex, last;
    for (i = 0; i < children.length; i++) {
        c = children[i];
        if (isUndef(c) || typeof c === 'boolean')
            continue;
        lastIndex = res.length - 1;
        last = res[lastIndex];
        //  nested
        if (isArray(c)) {
            if (c.length > 0) {
                c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i));
                // merge adjacent text nodes
                if (isTextNode(c[0]) && isTextNode(last)) {
                    res[lastIndex] = createTextVNode(last.text + c[0].text);
                    c.shift();
                }
                res.push.apply(res, c);
            }
        }
        else if (isPrimitive(c)) {
            if (isTextNode(last)) {
                // merge adjacent text nodes
                // this is necessary for SSR hydration because text nodes are
                // essentially merged when rendered to HTML strings
                res[lastIndex] = createTextVNode(last.text + c);
            }
            else if (c !== '') {
                // convert primitive to vnode
                res.push(createTextVNode(c));
            }
        }
        else {
            if (isTextNode(c) && isTextNode(last)) {
                // merge adjacent text nodes
                res[lastIndex] = createTextVNode(last.text + c.text);
            }
            else {
                // default key for nested array children (likely generated by v-for)
                if (isTrue(children._isVList) &&
                    isDef(c.tag) &&
                    isUndef(c.key) &&
                    isDef(nestedIndex)) {
                    c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__");
                }
                res.push(c);
            }
        }
    }
    return res;
}

/**
 * Runtime helper for rendering v-for lists.
 */
function renderList(val, render) {
    var ret = null, i, l, keys, key;
    if (isArray(val) || typeof val === 'string') {
        ret = new Array(val.length);
        for (i = 0, l = val.length; i < l; i++) {
            ret[i] = render(val[i], i);
        }
    }
    else if (typeof val === 'number') {
        ret = new Array(val);
        for (i = 0; i < val; i++) {
            ret[i] = render(i + 1, i);
        }
    }
    else if (isObject(val)) {
        if (hasSymbol && val[Symbol.iterator]) {
            ret = [];
            var iterator = val[Symbol.iterator]();
            var result = iterator.next();
            while (!result.done) {
                ret.push(render(result.value, ret.length));
                result = iterator.next();
            }
        }
        else {
            keys = Object.keys(val);
            ret = new Array(keys.length);
            for (i = 0, l = keys.length; i < l; i++) {
                key = keys[i];
                ret[i] = render(val[key], key, i);
            }
        }
    }
    if (!isDef(ret)) {
        ret = [];
    }
    ret._isVList = true;
    return ret;
}

/**
 * Runtime helper for rendering <slot>
 */
function renderSlot(name, fallbackRender, props, bindObject) {
    var scopedSlotFn = this.$scopedSlots[name];
    var nodes;
    if (scopedSlotFn) {
        // scoped slot
        props = props || {};
        if (bindObject) {
            if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {
                warn('slot v-bind without argument expects an Object', this);
            }
            props = extend(extend({}, bindObject), props);
        }
        nodes =
            scopedSlotFn(props) ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    else {
        nodes =
            this.$slots[name] ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    var target = props && props.slot;
    if (target) {
        return this.$createElement('template', { slot: target }, nodes);
    }
    else {
        return nodes;
    }
}

/**
 * Runtime helper for resolving filters
 */
function resolveFilter(id) {
    return resolveAsset(this.$options, 'filters', id, true) || identity;
}

function isKeyNotMatch(expect, actual) {
    if (isArray(expect)) {
        return expect.indexOf(actual) === -1;
    }
    else {
        return expect !== actual;
    }
}
/**
 * Runtime helper for checking keyCodes from config.
 * exposed as Vue.prototype._k
 * passing in eventKeyName as last argument separately for backwards compat
 */
function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
    var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
        return isKeyNotMatch(builtInKeyName, eventKeyName);
    }
    else if (mappedKeyCode) {
        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
    }
    else if (eventKeyName) {
        return hyphenate(eventKeyName) !== key;
    }
    return eventKeyCode === undefined;
}

/**
 * Runtime helper for merging v-bind="object" into a VNode's data.
 */
function bindObjectProps(data, tag, value, asProp, isSync) {
    if (value) {
        if (!isObject(value)) {
            process.env.NODE_ENV !== 'production' &&
                warn('v-bind without argument expects an Object or Array value', this);
        }
        else {
            if (isArray(value)) {
                value = toObject(value);
            }
            var hash = void 0;
            var _loop_1 = function (key) {
                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
                    hash = data;
                }
                else {
                    var type = data.attrs && data.attrs.type;
                    hash =
                        asProp || config.mustUseProp(tag, type, key)
                            ? data.domProps || (data.domProps = {})
                            : data.attrs || (data.attrs = {});
                }
                var camelizedKey = camelize(key);
                var hyphenatedKey = hyphenate(key);
                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
                    hash[key] = value[key];
                    if (isSync) {
                        var on = data.on || (data.on = {});
                        on["update:".concat(key)] = function ($event) {
                            value[key] = $event;
                        };
                    }
                }
            };
            for (var key in value) {
                _loop_1(key);
            }
        }
    }
    return data;
}

/**
 * Runtime helper for rendering static trees.
 */
function renderStatic(index, isInFor) {
    var cached = this._staticTrees || (this._staticTrees = []);
    var tree = cached[index];
    // if has already-rendered static tree and not inside v-for,
    // we can reuse the same tree.
    if (tree && !isInFor) {
        return tree;
    }
    // otherwise, render a fresh tree.
    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
    );
    markStatic(tree, "__static__".concat(index), false);
    return tree;
}
/**
 * Runtime helper for v-once.
 * Effectively it means marking the node as static with a unique key.
 */
function markOnce(tree, index, key) {
    markStatic(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true);
    return tree;
}
function markStatic(tree, key, isOnce) {
    if (isArray(tree)) {
        for (var i = 0; i < tree.length; i++) {
            if (tree[i] && typeof tree[i] !== 'string') {
                markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce);
            }
        }
    }
    else {
        markStaticNode(tree, key, isOnce);
    }
}
function markStaticNode(node, key, isOnce) {
    node.isStatic = true;
    node.key = key;
    node.isOnce = isOnce;
}

function bindObjectListeners(data, value) {
    if (value) {
        if (!isPlainObject(value)) {
            process.env.NODE_ENV !== 'production' && warn('v-on without argument expects an Object value', this);
        }
        else {
            var on = (data.on = data.on ? extend({}, data.on) : {});
            for (var key in value) {
                var existing = on[key];
                var ours = value[key];
                on[key] = existing ? [].concat(existing, ours) : ours;
            }
        }
    }
    return data;
}

function resolveScopedSlots(fns, res, 
// the following are added in 2.6
hasDynamicKeys, contentHashKey) {
    res = res || { $stable: !hasDynamicKeys };
    for (var i = 0; i < fns.length; i++) {
        var slot = fns[i];
        if (isArray(slot)) {
            resolveScopedSlots(slot, res, hasDynamicKeys);
        }
        else if (slot) {
            // marker for reverse proxying v-slot without scope on this.$slots
            // @ts-expect-error
            if (slot.proxy) {
                // @ts-expect-error
                slot.fn.proxy = true;
            }
            res[slot.key] = slot.fn;
        }
    }
    if (contentHashKey) {
        res.$key = contentHashKey;
    }
    return res;
}

// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
function bindDynamicKeys(baseObj, values) {
    for (var i = 0; i < values.length; i += 2) {
        var key = values[i];
        if (typeof key === 'string' && key) {
            baseObj[values[i]] = values[i + 1];
        }
        else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {
            // null is a special value for explicitly removing a binding
            warn("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this);
        }
    }
    return baseObj;
}
// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
function prependModifier(value, symbol) {
    return typeof value === 'string' ? symbol + value : value;
}

function installRenderHelpers(target) {
    target._o = markOnce;
    target._n = toNumber;
    target._s = toString;
    target._l = renderList;
    target._t = renderSlot;
    target._q = looseEqual;
    target._i = looseIndexOf;
    target._m = renderStatic;
    target._f = resolveFilter;
    target._k = checkKeyCodes;
    target._b = bindObjectProps;
    target._v = createTextVNode;
    target._e = createEmptyVNode;
    target._u = resolveScopedSlots;
    target._g = bindObjectListeners;
    target._d = bindDynamicKeys;
    target._p = prependModifier;
}

/**
 * Runtime helper for resolving raw children VNodes into a slot object.
 */
function resolveSlots(children, context) {
    if (!children || !children.length) {
        return {};
    }
    var slots = {};
    for (var i = 0, l = children.length; i < l; i++) {
        var child = children[i];
        var data = child.data;
        // remove slot attribute if the node is resolved as a Vue slot node
        if (data && data.attrs && data.attrs.slot) {
            delete data.attrs.slot;
        }
        // named slots should only be respected if the vnode was rendered in the
        // same context.
        if ((child.context === context || child.fnContext === context) &&
            data &&
            data.slot != null) {
            var name_1 = data.slot;
            var slot = slots[name_1] || (slots[name_1] = []);
            if (child.tag === 'template') {
                slot.push.apply(slot, child.children || []);
            }
            else {
                slot.push(child);
            }
        }
        else {
            (slots.default || (slots.default = [])).push(child);
        }
    }
    // ignore slots that contains only whitespace
    for (var name_2 in slots) {
        if (slots[name_2].every(isWhitespace)) {
            delete slots[name_2];
        }
    }
    return slots;
}
function isWhitespace(node) {
    return (node.isComment && !node.asyncFactory) || node.text === ' ';
}

function isAsyncPlaceholder(node) {
    // @ts-expect-error not really boolean type
    return node.isComment && node.asyncFactory;
}

function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
    var res;
    var hasNormalSlots = Object.keys(normalSlots).length > 0;
    var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
    var key = scopedSlots && scopedSlots.$key;
    if (!scopedSlots) {
        res = {};
    }
    else if (scopedSlots._normalized) {
        // fast path 1: child component re-render only, parent did not change
        return scopedSlots._normalized;
    }
    else if (isStable &&
        prevScopedSlots &&
        prevScopedSlots !== emptyObject &&
        key === prevScopedSlots.$key &&
        !hasNormalSlots &&
        !prevScopedSlots.$hasNormal) {
        // fast path 2: stable scoped slots w/ no normal slots to proxy,
        // only need to normalize once
        return prevScopedSlots;
    }
    else {
        res = {};
        for (var key_1 in scopedSlots) {
            if (scopedSlots[key_1] && key_1[0] !== '$') {
                res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);
            }
        }
    }
    // expose normal slots on scopedSlots
    for (var key_2 in normalSlots) {
        if (!(key_2 in res)) {
            res[key_2] = proxyNormalSlot(normalSlots, key_2);
        }
    }
    // avoriaz seems to mock a non-extensible $scopedSlots object
    // and when that is passed down this would cause an error
    if (scopedSlots && Object.isExtensible(scopedSlots)) {
        scopedSlots._normalized = res;
    }
    def(res, '$stable', isStable);
    def(res, '$key', key);
    def(res, '$hasNormal', hasNormalSlots);
    return res;
}
function normalizeScopedSlot(vm, normalSlots, key, fn) {
    var normalized = function () {
        var cur = currentInstance;
        setCurrentInstance(vm);
        var res = arguments.length ? fn.apply(null, arguments) : fn({});
        res =
            res && typeof res === 'object' && !isArray(res)
                ? [res] // single vnode
                : normalizeChildren(res);
        var vnode = res && res[0];
        setCurrentInstance(cur);
        return res &&
            (!vnode ||
                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
            ? undefined
            : res;
    };
    // this is a slot using the new v-slot syntax without scope. although it is
    // compiled as a scoped slot, render fn users would expect it to be present
    // on this.$slots because the usage is semantically a normal slot.
    if (fn.proxy) {
        Object.defineProperty(normalSlots, key, {
            get: normalized,
            enumerable: true,
            configurable: true
        });
    }
    return normalized;
}
function proxyNormalSlot(slots, key) {
    return function () { return slots[key]; };
}

function initSetup(vm) {
    var options = vm.$options;
    var setup = options.setup;
    if (setup) {
        var ctx = (vm._setupContext = createSetupContext(vm));
        setCurrentInstance(vm);
        pushTarget();
        var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup");
        popTarget();
        setCurrentInstance();
        if (isFunction(setupResult)) {
            // render function
            // @ts-ignore
            options.render = setupResult;
        }
        else if (isObject(setupResult)) {
            // bindings
            if (process.env.NODE_ENV !== 'production' && setupResult instanceof VNode) {
                warn("setup() should not return VNodes directly - " +
                    "return a render function instead.");
            }
            vm._setupState = setupResult;
            // __sfc indicates compiled bindings from <script setup>
            if (!setupResult.__sfc) {
                for (var key in setupResult) {
                    if (!isReserved(key)) {
                        proxyWithRefUnwrap(vm, setupResult, key);
                    }
                    else if (process.env.NODE_ENV !== 'production') {
                        warn("Avoid using variables that start with _ or $ in setup().");
                    }
                }
            }
            else {
                // exposed for compiled render fn
                var proxy = (vm._setupProxy = {});
                for (var key in setupResult) {
                    if (key !== '__sfc') {
                        proxyWithRefUnwrap(proxy, setupResult, key);
                    }
                }
            }
        }
        else if (process.env.NODE_ENV !== 'production' && setupResult !== undefined) {
            warn("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult));
        }
    }
}
function createSetupContext(vm) {
    var exposeCalled = false;
    return {
        get attrs() {
            if (!vm._attrsProxy) {
                var proxy = (vm._attrsProxy = {});
                def(proxy, '_v_attr_proxy', true);
                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
            }
            return vm._attrsProxy;
        },
        get listeners() {
            if (!vm._listenersProxy) {
                var proxy = (vm._listenersProxy = {});
                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
            }
            return vm._listenersProxy;
        },
        get slots() {
            return initSlotsProxy(vm);
        },
        emit: bind(vm.$emit, vm),
        expose: function (exposed) {
            if (process.env.NODE_ENV !== 'production') {
                if (exposeCalled) {
                    warn("expose() should be called only once per setup().", vm);
                }
                exposeCalled = true;
            }
            if (exposed) {
                Object.keys(exposed).forEach(function (key) {
                    return proxyWithRefUnwrap(vm, exposed, key);
                });
            }
        }
    };
}
function syncSetupProxy(to, from, prev, instance, type) {
    var changed = false;
    for (var key in from) {
        if (!(key in to)) {
            changed = true;
            defineProxyAttr(to, key, instance, type);
        }
        else if (from[key] !== prev[key]) {
            changed = true;
        }
    }
    for (var key in to) {
        if (!(key in from)) {
            changed = true;
            delete to[key];
        }
    }
    return changed;
}
function defineProxyAttr(proxy, key, instance, type) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get: function () {
            return instance[type][key];
        }
    });
}
function initSlotsProxy(vm) {
    if (!vm._slotsProxy) {
        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
    }
    return vm._slotsProxy;
}
function syncSetupSlots(to, from) {
    for (var key in from) {
        to[key] = from[key];
    }
    for (var key in to) {
        if (!(key in from)) {
            delete to[key];
        }
    }
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useSlots() {
    return getContext().slots;
}
/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useAttrs() {
    return getContext().attrs;
}
/**
 * Vue 2 only
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
function useListeners() {
    return getContext().listeners;
}
function getContext() {
    if (process.env.NODE_ENV !== 'production' && !currentInstance) {
        warn("useContext() called without active instance.");
    }
    var vm = currentInstance;
    return vm._setupContext || (vm._setupContext = createSetupContext(vm));
}
/**
 * Runtime helper for merging default declarations. Imported by compiled code
 * only.
 * @internal
 */
function mergeDefaults(raw, defaults) {
    var props = isArray(raw)
        ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})
        : raw;
    for (var key in defaults) {
        var opt = props[key];
        if (opt) {
            if (isArray(opt) || isFunction(opt)) {
                props[key] = { type: opt, default: defaults[key] };
            }
            else {
                opt.default = defaults[key];
            }
        }
        else if (opt === null) {
            props[key] = { default: defaults[key] };
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn("props default key \"".concat(key, "\" has no corresponding declaration."));
        }
    }
    return props;
}

function initRender(vm) {
    vm._vnode = null; // the root of the child tree
    vm._staticTrees = null; // v-once cached trees
    var options = vm.$options;
    var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
    var renderContext = parentVnode && parentVnode.context;
    vm.$slots = resolveSlots(options._renderChildren, renderContext);
    vm.$scopedSlots = parentVnode
        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
        : emptyObject;
    // bind the createElement fn to this instance
    // so that we get proper render context inside it.
    // args order: tag, data, children, normalizationType, alwaysNormalize
    // internal version is used by render functions compiled from templates
    // @ts-expect-error
    vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };
    // normalization is always applied for the public version, used in
    // user-written render functions.
    // @ts-expect-error
    vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };
    // $attrs & $listeners are exposed for easier HOC creation.
    // they need to be reactive so that HOCs using them are always updated
    var parentData = parentVnode && parentVnode.data;
    /* istanbul ignore else */
    if (process.env.NODE_ENV !== 'production') {
        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {
            !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
        }, true);
        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
            !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
        }, true);
    }
    else {
        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, null, true);
        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, null, true);
    }
}
var currentRenderingInstance = null;
function renderMixin(Vue) {
    // install runtime convenience helpers
    installRenderHelpers(Vue.prototype);
    Vue.prototype.$nextTick = function (fn) {
        return nextTick(fn, this);
    };
    Vue.prototype._render = function () {
        var vm = this;
        var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;
        if (_parentVnode && vm._isMounted) {
            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
            if (vm._slotsProxy) {
                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
            }
        }
        // set parent vnode. this allows render functions to have access
        // to the data on the placeholder node.
        vm.$vnode = _parentVnode;
        // render self
        var vnode;
        try {
            // There's no need to maintain a stack because all render fns are called
            // separately from one another. Nested component's render fns are called
            // when parent component is patched.
            setCurrentInstance(vm);
            currentRenderingInstance = vm;
            vnode = render.call(vm._renderProxy, vm.$createElement);
        }
        catch (e) {
            handleError(e, vm, "render");
            // return error render result,
            // or previous vnode to prevent render error causing blank component
            /* istanbul ignore else */
            if (process.env.NODE_ENV !== 'production' && vm.$options.renderError) {
                try {
                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
                }
                catch (e) {
                    handleError(e, vm, "renderError");
                    vnode = vm._vnode;
                }
            }
            else {
                vnode = vm._vnode;
            }
        }
        finally {
            currentRenderingInstance = null;
            setCurrentInstance();
        }
        // if the returned array contains only a single node, allow it
        if (isArray(vnode) && vnode.length === 1) {
            vnode = vnode[0];
        }
        // return empty vnode in case the render function errored out
        if (!(vnode instanceof VNode)) {
            if (process.env.NODE_ENV !== 'production' && isArray(vnode)) {
                warn('Multiple root nodes returned from render function. Render function ' +
                    'should return a single root node.', vm);
            }
            vnode = createEmptyVNode();
        }
        // set parent
        vnode.parent = _parentVnode;
        return vnode;
    };
}

function ensureCtor(comp, base) {
    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
        comp = comp.default;
    }
    return isObject(comp) ? base.extend(comp) : comp;
}
function createAsyncPlaceholder(factory, data, context, children, tag) {
    var node = createEmptyVNode();
    node.asyncFactory = factory;
    node.asyncMeta = { data: data, context: context, children: children, tag: tag };
    return node;
}
function resolveAsyncComponent(factory, baseCtor) {
    if (isTrue(factory.error) && isDef(factory.errorComp)) {
        return factory.errorComp;
    }
    if (isDef(factory.resolved)) {
        return factory.resolved;
    }
    var owner = currentRenderingInstance;
    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
        // already pending
        factory.owners.push(owner);
    }
    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
        return factory.loadingComp;
    }
    if (owner && !isDef(factory.owners)) {
        var owners_1 = (factory.owners = [owner]);
        var sync_1 = true;
        var timerLoading_1 = null;
        var timerTimeout_1 = null;
        owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });
        var forceRender_1 = function (renderCompleted) {
            for (var i = 0, l = owners_1.length; i < l; i++) {
                owners_1[i].$forceUpdate();
            }
            if (renderCompleted) {
                owners_1.length = 0;
                if (timerLoading_1 !== null) {
                    clearTimeout(timerLoading_1);
                    timerLoading_1 = null;
                }
                if (timerTimeout_1 !== null) {
                    clearTimeout(timerTimeout_1);
                    timerTimeout_1 = null;
                }
            }
        };
        var resolve = once(function (res) {
            // cache resolved
            factory.resolved = ensureCtor(res, baseCtor);
            // invoke callbacks only if this is not a synchronous resolve
            // (async resolves are shimmed as synchronous during SSR)
            if (!sync_1) {
                forceRender_1(true);
            }
            else {
                owners_1.length = 0;
            }
        });
        var reject_1 = once(function (reason) {
            process.env.NODE_ENV !== 'production' &&
                warn("Failed to resolve async component: ".concat(String(factory)) +
                    (reason ? "\nReason: ".concat(reason) : ''));
            if (isDef(factory.errorComp)) {
                factory.error = true;
                forceRender_1(true);
            }
        });
        var res_1 = factory(resolve, reject_1);
        if (isObject(res_1)) {
            if (isPromise(res_1)) {
                // () => Promise
                if (isUndef(factory.resolved)) {
                    res_1.then(resolve, reject_1);
                }
            }
            else if (isPromise(res_1.component)) {
                res_1.component.then(resolve, reject_1);
                if (isDef(res_1.error)) {
                    factory.errorComp = ensureCtor(res_1.error, baseCtor);
                }
                if (isDef(res_1.loading)) {
                    factory.loadingComp = ensureCtor(res_1.loading, baseCtor);
                    if (res_1.delay === 0) {
                        factory.loading = true;
                    }
                    else {
                        // @ts-expect-error NodeJS timeout type
                        timerLoading_1 = setTimeout(function () {
                            timerLoading_1 = null;
                            if (isUndef(factory.resolved) && isUndef(factory.error)) {
                                factory.loading = true;
                                forceRender_1(false);
                            }
                        }, res_1.delay || 200);
                    }
                }
                if (isDef(res_1.timeout)) {
                    // @ts-expect-error NodeJS timeout type
                    timerTimeout_1 = setTimeout(function () {
                        timerTimeout_1 = null;
                        if (isUndef(factory.resolved)) {
                            reject_1(process.env.NODE_ENV !== 'production' ? "timeout (".concat(res_1.timeout, "ms)") : null);
                        }
                    }, res_1.timeout);
                }
            }
        }
        sync_1 = false;
        // return in case resolved synchronously
        return factory.loading ? factory.loadingComp : factory.resolved;
    }
}

function getFirstComponentChild(children) {
    if (isArray(children)) {
        for (var i = 0; i < children.length; i++) {
            var c = children[i];
            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
                return c;
            }
        }
    }
}

var SIMPLE_NORMALIZE = 1;
var ALWAYS_NORMALIZE = 2;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
    if (isArray(data) || isPrimitive(data)) {
        normalizationType = children;
        children = data;
        data = undefined;
    }
    if (isTrue(alwaysNormalize)) {
        normalizationType = ALWAYS_NORMALIZE;
    }
    return _createElement(context, tag, data, children, normalizationType);
}
function _createElement(context, tag, data, children, normalizationType) {
    if (isDef(data) && isDef(data.__ob__)) {
        process.env.NODE_ENV !== 'production' &&
            warn("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context);
        return createEmptyVNode();
    }
    // object syntax in v-bind
    if (isDef(data) && isDef(data.is)) {
        tag = data.is;
    }
    if (!tag) {
        // in case of component :is set to falsy value
        return createEmptyVNode();
    }
    // warn against non-primitive key
    if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
        warn('Avoid using non-primitive value as key, ' +
            'use string/number value instead.', context);
    }
    // support single function children as default scoped slot
    if (isArray(children) && isFunction(children[0])) {
        data = data || {};
        data.scopedSlots = { default: children[0] };
        children.length = 0;
    }
    if (normalizationType === ALWAYS_NORMALIZE) {
        children = normalizeChildren(children);
    }
    else if (normalizationType === SIMPLE_NORMALIZE) {
        children = simpleNormalizeChildren(children);
    }
    var vnode, ns;
    if (typeof tag === 'string') {
        var Ctor = void 0;
        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
        if (config.isReservedTag(tag)) {
            // platform built-in elements
            if (process.env.NODE_ENV !== 'production' &&
                isDef(data) &&
                isDef(data.nativeOn) &&
                data.tag !== 'component') {
                warn("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context);
            }
            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
        }
        else if ((!data || !data.pre) &&
            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
            // component
            vnode = createComponent(Ctor, data, context, children, tag);
        }
        else {
            // unknown or unlisted namespaced elements
            // check at runtime because it may get assigned a namespace when its
            // parent normalizes children
            vnode = new VNode(tag, data, children, undefined, undefined, context);
        }
    }
    else {
        // direct component options / constructor
        vnode = createComponent(tag, data, context, children);
    }
    if (isArray(vnode)) {
        return vnode;
    }
    else if (isDef(vnode)) {
        if (isDef(ns))
            applyNS(vnode, ns);
        if (isDef(data))
            registerDeepBindings(data);
        return vnode;
    }
    else {
        return createEmptyVNode();
    }
}
function applyNS(vnode, ns, force) {
    vnode.ns = ns;
    if (vnode.tag === 'foreignObject') {
        // use default namespace inside foreignObject
        ns = undefined;
        force = true;
    }
    if (isDef(vnode.children)) {
        for (var i = 0, l = vnode.children.length; i < l; i++) {
            var child = vnode.children[i];
            if (isDef(child.tag) &&
                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
                applyNS(child, ns, force);
            }
        }
    }
}
// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings(data) {
    if (isObject(data.style)) {
        traverse(data.style);
    }
    if (isObject(data.class)) {
        traverse(data.class);
    }
}

/**
 * @internal this function needs manual public type declaration because it relies
 * on previously manually authored types from Vue 2
 */
function h(type, props, children) {
    if (!currentInstance) {
        process.env.NODE_ENV !== 'production' &&
            warn("globally imported h() can only be invoked when there is an active " +
                "component instance, e.g. synchronously in a component's render or setup function.");
    }
    return createElement$1(currentInstance, type, props, children, 2, true);
}

function handleError(err, vm, info) {
    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
    // See: https://github.com/vuejs/vuex/issues/1505
    pushTarget();
    try {
        if (vm) {
            var cur = vm;
            while ((cur = cur.$parent)) {
                var hooks = cur.$options.errorCaptured;
                if (hooks) {
                    for (var i = 0; i < hooks.length; i++) {
                        try {
                            var capture = hooks[i].call(cur, err, vm, info) === false;
                            if (capture)
                                return;
                        }
                        catch (e) {
                            globalHandleError(e, cur, 'errorCaptured hook');
                        }
                    }
                }
            }
        }
        globalHandleError(err, vm, info);
    }
    finally {
        popTarget();
    }
}
function invokeWithErrorHandling(handler, context, args, vm, info) {
    var res;
    try {
        res = args ? handler.apply(context, args) : handler.call(context);
        if (res && !res._isVue && isPromise(res) && !res._handled) {
            res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
            res._handled = true;
        }
    }
    catch (e) {
        handleError(e, vm, info);
    }
    return res;
}
function globalHandleError(err, vm, info) {
    if (config.errorHandler) {
        try {
            return config.errorHandler.call(null, err, vm, info);
        }
        catch (e) {
            // if the user intentionally throws the original error in the handler,
            // do not log it twice
            if (e !== err) {
                logError(e, null, 'config.errorHandler');
            }
        }
    }
    logError(err, vm, info);
}
function logError(err, vm, info) {
    if (process.env.NODE_ENV !== 'production') {
        warn("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm);
    }
    /* istanbul ignore else */
    if (inBrowser && typeof console !== 'undefined') {
        console.error(err);
    }
    else {
        throw err;
    }
}

/* globals MutationObserver */
var isUsingMicroTask = false;
var callbacks = [];
var pending = false;
function flushCallbacks() {
    pending = false;
    var copies = callbacks.slice(0);
    callbacks.length = 0;
    for (var i = 0; i < copies.length; i++) {
        copies[i]();
    }
}
// Here we have async deferring wrappers using microtasks.
// In 2.5 we used (macro) tasks (in combination with microtasks).
// However, it has subtle problems when state is changed right before repaint
// (e.g. #6813, out-in transitions).
// Also, using (macro) tasks in event handler would cause some weird behaviors
// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
// So we now use microtasks everywhere, again.
// A major drawback of this tradeoff is that there are some scenarios
// where microtasks have too high a priority and fire in between supposedly
// sequential events (e.g. #4521, #6690, which have workarounds)
// or even between bubbling of the same event (#6566).
var timerFunc;
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
    var p_1 = Promise.resolve();
    timerFunc = function () {
        p_1.then(flushCallbacks);
        // In problematic UIWebViews, Promise.then doesn't completely break, but
        // it can get stuck in a weird state where callbacks are pushed into the
        // microtask queue but the queue isn't being flushed, until the browser
        // needs to do some other work, e.g. handle a timer. Therefore we can
        // "force" the microtask queue to be flushed by adding an empty timer.
        if (isIOS)
            setTimeout(noop);
    };
    isUsingMicroTask = true;
}
else if (!isIE &&
    typeof MutationObserver !== 'undefined' &&
    (isNative(MutationObserver) ||
        // PhantomJS and iOS 7.x
        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
    // Use MutationObserver where native Promise is not available,
    // e.g. PhantomJS, iOS7, Android 4.4
    // (#6466 MutationObserver is unreliable in IE11)
    var counter_1 = 1;
    var observer = new MutationObserver(flushCallbacks);
    var textNode_1 = document.createTextNode(String(counter_1));
    observer.observe(textNode_1, {
        characterData: true
    });
    timerFunc = function () {
        counter_1 = (counter_1 + 1) % 2;
        textNode_1.data = String(counter_1);
    };
    isUsingMicroTask = true;
}
else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
    // Fallback to setImmediate.
    // Technically it leverages the (macro) task queue,
    // but it is still a better choice than setTimeout.
    timerFunc = function () {
        setImmediate(flushCallbacks);
    };
}
else {
    // Fallback to setTimeout.
    timerFunc = function () {
        setTimeout(flushCallbacks, 0);
    };
}
/**
 * @internal
 */
function nextTick(cb, ctx) {
    var _resolve;
    callbacks.push(function () {
        if (cb) {
            try {
                cb.call(ctx);
            }
            catch (e) {
                handleError(e, ctx, 'nextTick');
            }
        }
        else if (_resolve) {
            _resolve(ctx);
        }
    });
    if (!pending) {
        pending = true;
        timerFunc();
    }
    // $flow-disable-line
    if (!cb && typeof Promise !== 'undefined') {
        return new Promise(function (resolve) {
            _resolve = resolve;
        });
    }
}

function useCssModule(name) {
    if (name === void 0) { name = '$style'; }
    /* istanbul ignore else */
    {
        if (!currentInstance) {
            process.env.NODE_ENV !== 'production' && warn("useCssModule must be called inside setup()");
            return emptyObject;
        }
        var mod = currentInstance[name];
        if (!mod) {
            process.env.NODE_ENV !== 'production' &&
                warn("Current instance does not have CSS module named \"".concat(name, "\"."));
            return emptyObject;
        }
        return mod;
    }
}

/**
 * Runtime helper for SFC's CSS variable injection feature.
 * @private
 */
function useCssVars(getter) {
    if (!inBrowser && !false)
        return;
    var instance = currentInstance;
    if (!instance) {
        process.env.NODE_ENV !== 'production' &&
            warn("useCssVars is called without current active component instance.");
        return;
    }
    watchPostEffect(function () {
        var el = instance.$el;
        var vars = getter(instance, instance._setupProxy);
        if (el && el.nodeType === 1) {
            var style = el.style;
            for (var key in vars) {
                style.setProperty("--".concat(key), vars[key]);
            }
        }
    });
}

/**
 * v3-compatible async component API.
 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
 * because it relies on existing manual types
 */
function defineAsyncComponent(source) {
    if (isFunction(source)) {
        source = { loader: source };
    }
    var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out
    _b = source.suspensible, // undefined = never times out
    suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true
    userOnError = source.onError;
    if (process.env.NODE_ENV !== 'production' && suspensible) {
        warn("The suspensiblbe option for async components is not supported in Vue2. It is ignored.");
    }
    var pendingRequest = null;
    var retries = 0;
    var retry = function () {
        retries++;
        pendingRequest = null;
        return load();
    };
    var load = function () {
        var thisRequest;
        return (pendingRequest ||
            (thisRequest = pendingRequest =
                loader()
                    .catch(function (err) {
                    err = err instanceof Error ? err : new Error(String(err));
                    if (userOnError) {
                        return new Promise(function (resolve, reject) {
                            var userRetry = function () { return resolve(retry()); };
                            var userFail = function () { return reject(err); };
                            userOnError(err, userRetry, userFail, retries + 1);
                        });
                    }
                    else {
                        throw err;
                    }
                })
                    .then(function (comp) {
                    if (thisRequest !== pendingRequest && pendingRequest) {
                        return pendingRequest;
                    }
                    if (process.env.NODE_ENV !== 'production' && !comp) {
                        warn("Async component loader resolved to undefined. " +
                            "If you are using retry(), make sure to return its return value.");
                    }
                    // interop module default
                    if (comp &&
                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
                        comp = comp.default;
                    }
                    if (process.env.NODE_ENV !== 'production' && comp && !isObject(comp) && !isFunction(comp)) {
                        throw new Error("Invalid async component load result: ".concat(comp));
                    }
                    return comp;
                })));
    };
    return function () {
        var component = load();
        return {
            component: component,
            delay: delay,
            timeout: timeout,
            error: errorComponent,
            loading: loadingComponent
        };
    };
}

function createLifeCycle(hookName) {
    return function (fn, target) {
        if (target === void 0) { target = currentInstance; }
        if (!target) {
            process.env.NODE_ENV !== 'production' &&
                warn("".concat(formatName(hookName), " is called when there is no active component instance to be ") +
                    "associated with. " +
                    "Lifecycle injection APIs can only be used during execution of setup().");
            return;
        }
        return injectHook(target, hookName, fn);
    };
}
function formatName(name) {
    if (name === 'beforeDestroy') {
        name = 'beforeUnmount';
    }
    else if (name === 'destroyed') {
        name = 'unmounted';
    }
    return "on".concat(name[0].toUpperCase() + name.slice(1));
}
function injectHook(instance, hookName, fn) {
    var options = instance.$options;
    options[hookName] = mergeLifecycleHook(options[hookName], fn);
}
var onBeforeMount = createLifeCycle('beforeMount');
var onMounted = createLifeCycle('mounted');
var onBeforeUpdate = createLifeCycle('beforeUpdate');
var onUpdated = createLifeCycle('updated');
var onBeforeUnmount = createLifeCycle('beforeDestroy');
var onUnmounted = createLifeCycle('destroyed');
var onActivated = createLifeCycle('activated');
var onDeactivated = createLifeCycle('deactivated');
var onServerPrefetch = createLifeCycle('serverPrefetch');
var onRenderTracked = createLifeCycle('renderTracked');
var onRenderTriggered = createLifeCycle('renderTriggered');
var injectErrorCapturedHook = createLifeCycle('errorCaptured');
function onErrorCaptured(hook, target) {
    if (target === void 0) { target = currentInstance; }
    injectErrorCapturedHook(hook, target);
}

/**
 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
 */
var version = '2.7.14';
/**
 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
 */
function defineComponent(options) {
    return options;
}

var seenObjects = new _Set();
/**
 * Recursively traverse an object to evoke all converted
 * getters, so that every nested property inside the object
 * is collected as a "deep" dependency.
 */
function traverse(val) {
    _traverse(val, seenObjects);
    seenObjects.clear();
    return val;
}
function _traverse(val, seen) {
    var i, keys;
    var isA = isArray(val);
    if ((!isA && !isObject(val)) ||
        val.__v_skip /* ReactiveFlags.SKIP */ ||
        Object.isFrozen(val) ||
        val instanceof VNode) {
        return;
    }
    if (val.__ob__) {
        var depId = val.__ob__.dep.id;
        if (seen.has(depId)) {
            return;
        }
        seen.add(depId);
    }
    if (isA) {
        i = val.length;
        while (i--)
            _traverse(val[i], seen);
    }
    else if (isRef(val)) {
        _traverse(val.value, seen);
    }
    else {
        keys = Object.keys(val);
        i = keys.length;
        while (i--)
            _traverse(val[keys[i]], seen);
    }
}

var uid$1 = 0;
/**
 * A watcher parses an expression, collects dependencies,
 * and fires callback when the expression value changes.
 * This is used for both the $watch() api and directives.
 * @internal
 */
var Watcher = /** @class */ (function () {
    function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {
        recordEffectScope(this, 
        // if the active effect scope is manually created (not a component scope),
        // prioritize it
        activeEffectScope && !activeEffectScope._vm
            ? activeEffectScope
            : vm
                ? vm._scope
                : undefined);
        if ((this.vm = vm) && isRenderWatcher) {
            vm._watcher = this;
        }
        // options
        if (options) {
            this.deep = !!options.deep;
            this.user = !!options.user;
            this.lazy = !!options.lazy;
            this.sync = !!options.sync;
            this.before = options.before;
            if (process.env.NODE_ENV !== 'production') {
                this.onTrack = options.onTrack;
                this.onTrigger = options.onTrigger;
            }
        }
        else {
            this.deep = this.user = this.lazy = this.sync = false;
        }
        this.cb = cb;
        this.id = ++uid$1; // uid for batching
        this.active = true;
        this.post = false;
        this.dirty = this.lazy; // for lazy watchers
        this.deps = [];
        this.newDeps = [];
        this.depIds = new _Set();
        this.newDepIds = new _Set();
        this.expression = process.env.NODE_ENV !== 'production' ? expOrFn.toString() : '';
        // parse expression for getter
        if (isFunction(expOrFn)) {
            this.getter = expOrFn;
        }
        else {
            this.getter = parsePath(expOrFn);
            if (!this.getter) {
                this.getter = noop;
                process.env.NODE_ENV !== 'production' &&
                    warn("Failed watching path: \"".concat(expOrFn, "\" ") +
                        'Watcher only accepts simple dot-delimited paths. ' +
                        'For full control, use a function instead.', vm);
            }
        }
        this.value = this.lazy ? undefined : this.get();
    }
    /**
     * Evaluate the getter, and re-collect dependencies.
     */
    Watcher.prototype.get = function () {
        pushTarget(this);
        var value;
        var vm = this.vm;
        try {
            value = this.getter.call(vm, vm);
        }
        catch (e) {
            if (this.user) {
                handleError(e, vm, "getter for watcher \"".concat(this.expression, "\""));
            }
            else {
                throw e;
            }
        }
        finally {
            // "touch" every property so they are all tracked as
            // dependencies for deep watching
            if (this.deep) {
                traverse(value);
            }
            popTarget();
            this.cleanupDeps();
        }
        return value;
    };
    /**
     * Add a dependency to this directive.
     */
    Watcher.prototype.addDep = function (dep) {
        var id = dep.id;
        if (!this.newDepIds.has(id)) {
            this.newDepIds.add(id);
            this.newDeps.push(dep);
            if (!this.depIds.has(id)) {
                dep.addSub(this);
            }
        }
    };
    /**
     * Clean up for dependency collection.
     */
    Watcher.prototype.cleanupDeps = function () {
        var i = this.deps.length;
        while (i--) {
            var dep = this.deps[i];
            if (!this.newDepIds.has(dep.id)) {
                dep.removeSub(this);
            }
        }
        var tmp = this.depIds;
        this.depIds = this.newDepIds;
        this.newDepIds = tmp;
        this.newDepIds.clear();
        tmp = this.deps;
        this.deps = this.newDeps;
        this.newDeps = tmp;
        this.newDeps.length = 0;
    };
    /**
     * Subscriber interface.
     * Will be called when a dependency changes.
     */
    Watcher.prototype.update = function () {
        /* istanbul ignore else */
        if (this.lazy) {
            this.dirty = true;
        }
        else if (this.sync) {
            this.run();
        }
        else {
            queueWatcher(this);
        }
    };
    /**
     * Scheduler job interface.
     * Will be called by the scheduler.
     */
    Watcher.prototype.run = function () {
        if (this.active) {
            var value = this.get();
            if (value !== this.value ||
                // Deep watchers and watchers on Object/Arrays should fire even
                // when the value is the same, because the value may
                // have mutated.
                isObject(value) ||
                this.deep) {
                // set new value
                var oldValue = this.value;
                this.value = value;
                if (this.user) {
                    var info = "callback for watcher \"".concat(this.expression, "\"");
                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
                }
                else {
                    this.cb.call(this.vm, value, oldValue);
                }
            }
        }
    };
    /**
     * Evaluate the value of the watcher.
     * This only gets called for lazy watchers.
     */
    Watcher.prototype.evaluate = function () {
        this.value = this.get();
        this.dirty = false;
    };
    /**
     * Depend on all deps collected by this watcher.
     */
    Watcher.prototype.depend = function () {
        var i = this.deps.length;
        while (i--) {
            this.deps[i].depend();
        }
    };
    /**
     * Remove self from all dependencies' subscriber list.
     */
    Watcher.prototype.teardown = function () {
        if (this.vm && !this.vm._isBeingDestroyed) {
            remove$2(this.vm._scope.effects, this);
        }
        if (this.active) {
            var i = this.deps.length;
            while (i--) {
                this.deps[i].removeSub(this);
            }
            this.active = false;
            if (this.onStop) {
                this.onStop();
            }
        }
    };
    return Watcher;
}());

var mark;
var measure;
if (process.env.NODE_ENV !== 'production') {
    var perf_1 = inBrowser && window.performance;
    /* istanbul ignore if */
    if (perf_1 &&
        // @ts-ignore
        perf_1.mark &&
        // @ts-ignore
        perf_1.measure &&
        // @ts-ignore
        perf_1.clearMarks &&
        // @ts-ignore
        perf_1.clearMeasures) {
        mark = function (tag) { return perf_1.mark(tag); };
        measure = function (name, startTag, endTag) {
            perf_1.measure(name, startTag, endTag);
            perf_1.clearMarks(startTag);
            perf_1.clearMarks(endTag);
            // perf.clearMeasures(name)
        };
    }
}

function initEvents(vm) {
    vm._events = Object.create(null);
    vm._hasHookEvent = false;
    // init parent attached events
    var listeners = vm.$options._parentListeners;
    if (listeners) {
        updateComponentListeners(vm, listeners);
    }
}
var target$1;
function add$1(event, fn) {
    target$1.$on(event, fn);
}
function remove$1(event, fn) {
    target$1.$off(event, fn);
}
function createOnceHandler$1(event, fn) {
    var _target = target$1;
    return function onceHandler() {
        var res = fn.apply(null, arguments);
        if (res !== null) {
            _target.$off(event, onceHandler);
        }
    };
}
function updateComponentListeners(vm, listeners, oldListeners) {
    target$1 = vm;
    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
    target$1 = undefined;
}
function eventsMixin(Vue) {
    var hookRE = /^hook:/;
    Vue.prototype.$on = function (event, fn) {
        var vm = this;
        if (isArray(event)) {
            for (var i = 0, l = event.length; i < l; i++) {
                vm.$on(event[i], fn);
            }
        }
        else {
            (vm._events[event] || (vm._events[event] = [])).push(fn);
            // optimize hook:event cost by using a boolean flag marked at registration
            // instead of a hash lookup
            if (hookRE.test(event)) {
                vm._hasHookEvent = true;
            }
        }
        return vm;
    };
    Vue.prototype.$once = function (event, fn) {
        var vm = this;
        function on() {
            vm.$off(event, on);
            fn.apply(vm, arguments);
        }
        on.fn = fn;
        vm.$on(event, on);
        return vm;
    };
    Vue.prototype.$off = function (event, fn) {
        var vm = this;
        // all
        if (!arguments.length) {
            vm._events = Object.create(null);
            return vm;
        }
        // array of events
        if (isArray(event)) {
            for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {
                vm.$off(event[i_1], fn);
            }
            return vm;
        }
        // specific event
        var cbs = vm._events[event];
        if (!cbs) {
            return vm;
        }
        if (!fn) {
            vm._events[event] = null;
            return vm;
        }
        // specific handler
        var cb;
        var i = cbs.length;
        while (i--) {
            cb = cbs[i];
            if (cb === fn || cb.fn === fn) {
                cbs.splice(i, 1);
                break;
            }
        }
        return vm;
    };
    Vue.prototype.$emit = function (event) {
        var vm = this;
        if (process.env.NODE_ENV !== 'production') {
            var lowerCaseEvent = event.toLowerCase();
            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
                tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") +
                    "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") +
                    "Note that HTML attributes are case-insensitive and you cannot use " +
                    "v-on to listen to camelCase events when using in-DOM templates. " +
                    "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\"."));
            }
        }
        var cbs = vm._events[event];
        if (cbs) {
            cbs = cbs.length > 1 ? toArray(cbs) : cbs;
            var args = toArray(arguments, 1);
            var info = "event handler for \"".concat(event, "\"");
            for (var i = 0, l = cbs.length; i < l; i++) {
                invokeWithErrorHandling(cbs[i], vm, args, vm, info);
            }
        }
        return vm;
    };
}

var activeInstance = null;
var isUpdatingChildComponent = false;
function setActiveInstance(vm) {
    var prevActiveInstance = activeInstance;
    activeInstance = vm;
    return function () {
        activeInstance = prevActiveInstance;
    };
}
function initLifecycle(vm) {
    var options = vm.$options;
    // locate first non-abstract parent
    var parent = options.parent;
    if (parent && !options.abstract) {
        while (parent.$options.abstract && parent.$parent) {
            parent = parent.$parent;
        }
        parent.$children.push(vm);
    }
    vm.$parent = parent;
    vm.$root = parent ? parent.$root : vm;
    vm.$children = [];
    vm.$refs = {};
    vm._provided = parent ? parent._provided : Object.create(null);
    vm._watcher = null;
    vm._inactive = null;
    vm._directInactive = false;
    vm._isMounted = false;
    vm._isDestroyed = false;
    vm._isBeingDestroyed = false;
}
function lifecycleMixin(Vue) {
    Vue.prototype._update = function (vnode, hydrating) {
        var vm = this;
        var prevEl = vm.$el;
        var prevVnode = vm._vnode;
        var restoreActiveInstance = setActiveInstance(vm);
        vm._vnode = vnode;
        // Vue.prototype.__patch__ is injected in entry points
        // based on the rendering backend used.
        if (!prevVnode) {
            // initial render
            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
        }
        else {
            // updates
            vm.$el = vm.__patch__(prevVnode, vnode);
        }
        restoreActiveInstance();
        // update __vue__ reference
        if (prevEl) {
            prevEl.__vue__ = null;
        }
        if (vm.$el) {
            vm.$el.__vue__ = vm;
        }
        // if parent is an HOC, update its $el as well
        var wrapper = vm;
        while (wrapper &&
            wrapper.$vnode &&
            wrapper.$parent &&
            wrapper.$vnode === wrapper.$parent._vnode) {
            wrapper.$parent.$el = wrapper.$el;
            wrapper = wrapper.$parent;
        }
        // updated hook is called by the scheduler to ensure that children are
        // updated in a parent's updated hook.
    };
    Vue.prototype.$forceUpdate = function () {
        var vm = this;
        if (vm._watcher) {
            vm._watcher.update();
        }
    };
    Vue.prototype.$destroy = function () {
        var vm = this;
        if (vm._isBeingDestroyed) {
            return;
        }
        callHook$1(vm, 'beforeDestroy');
        vm._isBeingDestroyed = true;
        // remove self from parent
        var parent = vm.$parent;
        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
            remove$2(parent.$children, vm);
        }
        // teardown scope. this includes both the render watcher and other
        // watchers created
        vm._scope.stop();
        // remove reference from data ob
        // frozen object may not have observer.
        if (vm._data.__ob__) {
            vm._data.__ob__.vmCount--;
        }
        // call the last hook...
        vm._isDestroyed = true;
        // invoke destroy hooks on current rendered tree
        vm.__patch__(vm._vnode, null);
        // fire destroyed hook
        callHook$1(vm, 'destroyed');
        // turn off all instance listeners.
        vm.$off();
        // remove __vue__ reference
        if (vm.$el) {
            vm.$el.__vue__ = null;
        }
        // release circular reference (#6759)
        if (vm.$vnode) {
            vm.$vnode.parent = null;
        }
    };
}
function mountComponent(vm, el, hydrating) {
    vm.$el = el;
    if (!vm.$options.render) {
        // @ts-expect-error invalid type
        vm.$options.render = createEmptyVNode;
        if (process.env.NODE_ENV !== 'production') {
            /* istanbul ignore if */
            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
                vm.$options.el ||
                el) {
                warn('You are using the runtime-only build of Vue where the template ' +
                    'compiler is not available. Either pre-compile the templates into ' +
                    'render functions, or use the compiler-included build.', vm);
            }
            else {
                warn('Failed to mount component: template or render function not defined.', vm);
            }
        }
    }
    callHook$1(vm, 'beforeMount');
    var updateComponent;
    /* istanbul ignore if */
    if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
        updateComponent = function () {
            var name = vm._name;
            var id = vm._uid;
            var startTag = "vue-perf-start:".concat(id);
            var endTag = "vue-perf-end:".concat(id);
            mark(startTag);
            var vnode = vm._render();
            mark(endTag);
            measure("vue ".concat(name, " render"), startTag, endTag);
            mark(startTag);
            vm._update(vnode, hydrating);
            mark(endTag);
            measure("vue ".concat(name, " patch"), startTag, endTag);
        };
    }
    else {
        updateComponent = function () {
            vm._update(vm._render(), hydrating);
        };
    }
    var watcherOptions = {
        before: function () {
            if (vm._isMounted && !vm._isDestroyed) {
                callHook$1(vm, 'beforeUpdate');
            }
        }
    };
    if (process.env.NODE_ENV !== 'production') {
        watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };
        watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };
    }
    // we set this to vm._watcher inside the watcher's constructor
    // since the watcher's initial patch may call $forceUpdate (e.g. inside child
    // component's mounted hook), which relies on vm._watcher being already defined
    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
    hydrating = false;
    // flush buffer for flush: "pre" watchers queued in setup()
    var preWatchers = vm._preWatchers;
    if (preWatchers) {
        for (var i = 0; i < preWatchers.length; i++) {
            preWatchers[i].run();
        }
    }
    // manually mounted instance, call mounted on self
    // mounted is called for render-created child components in its inserted hook
    if (vm.$vnode == null) {
        vm._isMounted = true;
        callHook$1(vm, 'mounted');
    }
    return vm;
}
function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
    if (process.env.NODE_ENV !== 'production') {
        isUpdatingChildComponent = true;
    }
    // determine whether component has slot children
    // we need to do this before overwriting $options._renderChildren.
    // check if there are dynamic scopedSlots (hand-written or compiled but with
    // dynamic slot names). Static scoped slots compiled from template has the
    // "$stable" marker.
    var newScopedSlots = parentVnode.data.scopedSlots;
    var oldScopedSlots = vm.$scopedSlots;
    var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
        (!newScopedSlots && vm.$scopedSlots.$key));
    // Any static slot children from the parent may have changed during parent's
    // update. Dynamic scoped slots may also have changed. In such cases, a forced
    // update is necessary to ensure correctness.
    var needsForceUpdate = !!(renderChildren || // has new static slots
        vm.$options._renderChildren || // has old static slots
        hasDynamicScopedSlot);
    var prevVNode = vm.$vnode;
    vm.$options._parentVnode = parentVnode;
    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
    if (vm._vnode) {
        // update child tree's parent
        vm._vnode.parent = parentVnode;
    }
    vm.$options._renderChildren = renderChildren;
    // update $attrs and $listeners hash
    // these are also reactive so they may trigger child update if the child
    // used them during render
    var attrs = parentVnode.data.attrs || emptyObject;
    if (vm._attrsProxy) {
        // force update if attrs are accessed and has changed since it may be
        // passed to a child component.
        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
            needsForceUpdate = true;
        }
    }
    vm.$attrs = attrs;
    // update listeners
    listeners = listeners || emptyObject;
    var prevListeners = vm.$options._parentListeners;
    if (vm._listenersProxy) {
        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
    }
    vm.$listeners = vm.$options._parentListeners = listeners;
    updateComponentListeners(vm, listeners, prevListeners);
    // update props
    if (propsData && vm.$options.props) {
        toggleObserving(false);
        var props = vm._props;
        var propKeys = vm.$options._propKeys || [];
        for (var i = 0; i < propKeys.length; i++) {
            var key = propKeys[i];
            var propOptions = vm.$options.props; // wtf flow?
            props[key] = validateProp(key, propOptions, propsData, vm);
        }
        toggleObserving(true);
        // keep a copy of raw propsData
        vm.$options.propsData = propsData;
    }
    // resolve slots + force update if has children
    if (needsForceUpdate) {
        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
        vm.$forceUpdate();
    }
    if (process.env.NODE_ENV !== 'production') {
        isUpdatingChildComponent = false;
    }
}
function isInInactiveTree(vm) {
    while (vm && (vm = vm.$parent)) {
        if (vm._inactive)
            return true;
    }
    return false;
}
function activateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = false;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    else if (vm._directInactive) {
        return;
    }
    if (vm._inactive || vm._inactive === null) {
        vm._inactive = false;
        for (var i = 0; i < vm.$children.length; i++) {
            activateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'activated');
    }
}
function deactivateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = true;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    if (!vm._inactive) {
        vm._inactive = true;
        for (var i = 0; i < vm.$children.length; i++) {
            deactivateChildComponent(vm.$children[i]);
        }
        callHook$1(vm, 'deactivated');
    }
}
function callHook$1(vm, hook, args, setContext) {
    if (setContext === void 0) { setContext = true; }
    // #7573 disable dep collection when invoking lifecycle hooks
    pushTarget();
    var prev = currentInstance;
    setContext && setCurrentInstance(vm);
    var handlers = vm.$options[hook];
    var info = "".concat(hook, " hook");
    if (handlers) {
        for (var i = 0, j = handlers.length; i < j; i++) {
            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
        }
    }
    if (vm._hasHookEvent) {
        vm.$emit('hook:' + hook);
    }
    setContext && setCurrentInstance(prev);
    popTarget();
}

var MAX_UPDATE_COUNT = 100;
var queue = [];
var activatedChildren = [];
var has = {};
var circular = {};
var waiting = false;
var flushing = false;
var index = 0;
/**
 * Reset the scheduler's state.
 */
function resetSchedulerState() {
    index = queue.length = activatedChildren.length = 0;
    has = {};
    if (process.env.NODE_ENV !== 'production') {
        circular = {};
    }
    waiting = flushing = false;
}
// Async edge case #6566 requires saving the timestamp when event listeners are
// attached. However, calling performance.now() has a perf overhead especially
// if the page has thousands of event listeners. Instead, we take a timestamp
// every time the scheduler flushes and use that for all event listeners
// attached during that flush.
var currentFlushTimestamp = 0;
// Async edge case fix requires storing an event listener's attach timestamp.
var getNow = Date.now;
// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if (inBrowser && !isIE) {
    var performance_1 = window.performance;
    if (performance_1 &&
        typeof performance_1.now === 'function' &&
        getNow() > document.createEvent('Event').timeStamp) {
        // if the event timestamp, although evaluated AFTER the Date.now(), is
        // smaller than it, it means the event is using a hi-res timestamp,
        // and we need to use the hi-res version for event listener timestamps as
        // well.
        getNow = function () { return performance_1.now(); };
    }
}
var sortCompareFn = function (a, b) {
    if (a.post) {
        if (!b.post)
            return 1;
    }
    else if (b.post) {
        return -1;
    }
    return a.id - b.id;
};
/**
 * Flush both queues and run the watchers.
 */
function flushSchedulerQueue() {
    currentFlushTimestamp = getNow();
    flushing = true;
    var watcher, id;
    // Sort queue before flush.
    // This ensures that:
    // 1. Components are updated from parent to child. (because parent is always
    //    created before the child)
    // 2. A component's user watchers are run before its render watcher (because
    //    user watchers are created before the render watcher)
    // 3. If a component is destroyed during a parent component's watcher run,
    //    its watchers can be skipped.
    queue.sort(sortCompareFn);
    // do not cache length because more watchers might be pushed
    // as we run existing watchers
    for (index = 0; index < queue.length; index++) {
        watcher = queue[index];
        if (watcher.before) {
            watcher.before();
        }
        id = watcher.id;
        has[id] = null;
        watcher.run();
        // in dev build, check and stop circular updates.
        if (process.env.NODE_ENV !== 'production' && has[id] != null) {
            circular[id] = (circular[id] || 0) + 1;
            if (circular[id] > MAX_UPDATE_COUNT) {
                warn('You may have an infinite update loop ' +
                    (watcher.user
                        ? "in watcher with expression \"".concat(watcher.expression, "\"")
                        : "in a component render function."), watcher.vm);
                break;
            }
        }
    }
    // keep copies of post queues before resetting state
    var activatedQueue = activatedChildren.slice();
    var updatedQueue = queue.slice();
    resetSchedulerState();
    // call component updated and activated hooks
    callActivatedHooks(activatedQueue);
    callUpdatedHooks(updatedQueue);
    cleanupDeps();
    // devtool hook
    /* istanbul ignore if */
    if (devtools && config.devtools) {
        devtools.emit('flush');
    }
}
function callUpdatedHooks(queue) {
    var i = queue.length;
    while (i--) {
        var watcher = queue[i];
        var vm = watcher.vm;
        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
            callHook$1(vm, 'updated');
        }
    }
}
/**
 * Queue a kept-alive component that was activated during patch.
 * The queue will be processed after the entire tree has been patched.
 */
function queueActivatedComponent(vm) {
    // setting _inactive to false here so that a render function can
    // rely on checking whether it's in an inactive tree (e.g. router-view)
    vm._inactive = false;
    activatedChildren.push(vm);
}
function callActivatedHooks(queue) {
    for (var i = 0; i < queue.length; i++) {
        queue[i]._inactive = true;
        activateChildComponent(queue[i], true /* true */);
    }
}
/**
 * Push a watcher into the watcher queue.
 * Jobs with duplicate IDs will be skipped unless it's
 * pushed when the queue is being flushed.
 */
function queueWatcher(watcher) {
    var id = watcher.id;
    if (has[id] != null) {
        return;
    }
    if (watcher === Dep.target && watcher.noRecurse) {
        return;
    }
    has[id] = true;
    if (!flushing) {
        queue.push(watcher);
    }
    else {
        // if already flushing, splice the watcher based on its id
        // if already past its id, it will be run next immediately.
        var i = queue.length - 1;
        while (i > index && queue[i].id > watcher.id) {
            i--;
        }
        queue.splice(i + 1, 0, watcher);
    }
    // queue the flush
    if (!waiting) {
        waiting = true;
        if (process.env.NODE_ENV !== 'production' && !config.async) {
            flushSchedulerQueue();
            return;
        }
        nextTick(flushSchedulerQueue);
    }
}

function initProvide(vm) {
    var provideOption = vm.$options.provide;
    if (provideOption) {
        var provided = isFunction(provideOption)
            ? provideOption.call(vm)
            : provideOption;
        if (!isObject(provided)) {
            return;
        }
        var source = resolveProvided(vm);
        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
        // iterate the keys ourselves.
        var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
        for (var i = 0; i < keys.length; i++) {
            var key = keys[i];
            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
        }
    }
}
function initInjections(vm) {
    var result = resolveInject(vm.$options.inject, vm);
    if (result) {
        toggleObserving(false);
        Object.keys(result).forEach(function (key) {
            /* istanbul ignore else */
            if (process.env.NODE_ENV !== 'production') {
                defineReactive(vm, key, result[key], function () {
                    warn("Avoid mutating an injected value directly since the changes will be " +
                        "overwritten whenever the provided component re-renders. " +
                        "injection being mutated: \"".concat(key, "\""), vm);
                });
            }
            else {
                defineReactive(vm, key, result[key]);
            }
        });
        toggleObserving(true);
    }
}
function resolveInject(inject, vm) {
    if (inject) {
        // inject is :any because flow is not smart enough to figure out cached
        var result = Object.create(null);
        var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
        for (var i = 0; i < keys.length; i++) {
            var key = keys[i];
            // #6574 in case the inject object is observed...
            if (key === '__ob__')
                continue;
            var provideKey = inject[key].from;
            if (provideKey in vm._provided) {
                result[key] = vm._provided[provideKey];
            }
            else if ('default' in inject[key]) {
                var provideDefault = inject[key].default;
                result[key] = isFunction(provideDefault)
                    ? provideDefault.call(vm)
                    : provideDefault;
            }
            else if (process.env.NODE_ENV !== 'production') {
                warn("Injection \"".concat(key, "\" not found"), vm);
            }
        }
        return result;
    }
}

function FunctionalRenderContext(data, props, children, parent, Ctor) {
    var _this = this;
    var options = Ctor.options;
    // ensure the createElement function in functional components
    // gets a unique context - this is necessary for correct named slot check
    var contextVm;
    if (hasOwn(parent, '_uid')) {
        contextVm = Object.create(parent);
        contextVm._original = parent;
    }
    else {
        // the context vm passed in is a functional context as well.
        // in this case we want to make sure we are able to get a hold to the
        // real context instance.
        contextVm = parent;
        // @ts-ignore
        parent = parent._original;
    }
    var isCompiled = isTrue(options._compiled);
    var needNormalization = !isCompiled;
    this.data = data;
    this.props = props;
    this.children = children;
    this.parent = parent;
    this.listeners = data.on || emptyObject;
    this.injections = resolveInject(options.inject, parent);
    this.slots = function () {
        if (!_this.$slots) {
            normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));
        }
        return _this.$slots;
    };
    Object.defineProperty(this, 'scopedSlots', {
        enumerable: true,
        get: function () {
            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
        }
    });
    // support for compiled functional template
    if (isCompiled) {
        // exposing $options for renderStatic()
        this.$options = options;
        // pre-resolve slots for renderSlot()
        this.$slots = this.slots();
        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
    }
    if (options._scopeId) {
        this._c = function (a, b, c, d) {
            var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
            if (vnode && !isArray(vnode)) {
                vnode.fnScopeId = options._scopeId;
                vnode.fnContext = parent;
            }
            return vnode;
        };
    }
    else {
        this._c = function (a, b, c, d) {
            return createElement$1(contextVm, a, b, c, d, needNormalization);
        };
    }
}
installRenderHelpers(FunctionalRenderContext.prototype);
function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
    var options = Ctor.options;
    var props = {};
    var propOptions = options.props;
    if (isDef(propOptions)) {
        for (var key in propOptions) {
            props[key] = validateProp(key, propOptions, propsData || emptyObject);
        }
    }
    else {
        if (isDef(data.attrs))
            mergeProps(props, data.attrs);
        if (isDef(data.props))
            mergeProps(props, data.props);
    }
    var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
    var vnode = options.render.call(null, renderContext._c, renderContext);
    if (vnode instanceof VNode) {
        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
    }
    else if (isArray(vnode)) {
        var vnodes = normalizeChildren(vnode) || [];
        var res = new Array(vnodes.length);
        for (var i = 0; i < vnodes.length; i++) {
            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
        }
        return res;
    }
}
function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
    // #7817 clone node before setting fnContext, otherwise if the node is reused
    // (e.g. it was from a cached normal slot) the fnContext causes named slots
    // that should not be matched to match.
    var clone = cloneVNode(vnode);
    clone.fnContext = contextVm;
    clone.fnOptions = options;
    if (process.env.NODE_ENV !== 'production') {
        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
            renderContext;
    }
    if (data.slot) {
        (clone.data || (clone.data = {})).slot = data.slot;
    }
    return clone;
}
function mergeProps(to, from) {
    for (var key in from) {
        to[camelize(key)] = from[key];
    }
}

function getComponentName(options) {
    return options.name || options.__name || options._componentTag;
}
// inline hooks to be invoked on component VNodes during patch
var componentVNodeHooks = {
    init: function (vnode, hydrating) {
        if (vnode.componentInstance &&
            !vnode.componentInstance._isDestroyed &&
            vnode.data.keepAlive) {
            // kept-alive components, treat as a patch
            var mountedNode = vnode; // work around flow
            componentVNodeHooks.prepatch(mountedNode, mountedNode);
        }
        else {
            var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
        }
    },
    prepatch: function (oldVnode, vnode) {
        var options = vnode.componentOptions;
        var child = (vnode.componentInstance = oldVnode.componentInstance);
        updateChildComponent(child, options.propsData, // updated props
        options.listeners, // updated listeners
        vnode, // new parent vnode
        options.children // new children
        );
    },
    insert: function (vnode) {
        var context = vnode.context, componentInstance = vnode.componentInstance;
        if (!componentInstance._isMounted) {
            componentInstance._isMounted = true;
            callHook$1(componentInstance, 'mounted');
        }
        if (vnode.data.keepAlive) {
            if (context._isMounted) {
                // vue-router#1212
                // During updates, a kept-alive component's child components may
                // change, so directly walking the tree here may call activated hooks
                // on incorrect children. Instead we push them into a queue which will
                // be processed after the whole patch process ended.
                queueActivatedComponent(componentInstance);
            }
            else {
                activateChildComponent(componentInstance, true /* direct */);
            }
        }
    },
    destroy: function (vnode) {
        var componentInstance = vnode.componentInstance;
        if (!componentInstance._isDestroyed) {
            if (!vnode.data.keepAlive) {
                componentInstance.$destroy();
            }
            else {
                deactivateChildComponent(componentInstance, true /* direct */);
            }
        }
    }
};
var hooksToMerge = Object.keys(componentVNodeHooks);
function createComponent(Ctor, data, context, children, tag) {
    if (isUndef(Ctor)) {
        return;
    }
    var baseCtor = context.$options._base;
    // plain options object: turn it into a constructor
    if (isObject(Ctor)) {
        Ctor = baseCtor.extend(Ctor);
    }
    // if at this stage it's not a constructor or an async component factory,
    // reject.
    if (typeof Ctor !== 'function') {
        if (process.env.NODE_ENV !== 'production') {
            warn("Invalid Component definition: ".concat(String(Ctor)), context);
        }
        return;
    }
    // async component
    var asyncFactory;
    // @ts-expect-error
    if (isUndef(Ctor.cid)) {
        asyncFactory = Ctor;
        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
        if (Ctor === undefined) {
            // return a placeholder node for async component, which is rendered
            // as a comment node but preserves all the raw information for the node.
            // the information will be used for async server-rendering and hydration.
            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
        }
    }
    data = data || {};
    // resolve constructor options in case global mixins are applied after
    // component constructor creation
    resolveConstructorOptions(Ctor);
    // transform component v-model data into props & events
    if (isDef(data.model)) {
        // @ts-expect-error
        transformModel(Ctor.options, data);
    }
    // extract props
    // @ts-expect-error
    var propsData = extractPropsFromVNodeData(data, Ctor, tag);
    // functional component
    // @ts-expect-error
    if (isTrue(Ctor.options.functional)) {
        return createFunctionalComponent(Ctor, propsData, data, context, children);
    }
    // extract listeners, since these needs to be treated as
    // child component listeners instead of DOM listeners
    var listeners = data.on;
    // replace with listeners with .native modifier
    // so it gets processed during parent component patch.
    data.on = data.nativeOn;
    // @ts-expect-error
    if (isTrue(Ctor.options.abstract)) {
        // abstract components do not keep anything
        // other than props & listeners & slot
        // work around flow
        var slot = data.slot;
        data = {};
        if (slot) {
            data.slot = slot;
        }
    }
    // install component management hooks onto the placeholder node
    installComponentHooks(data);
    // return a placeholder vnode
    // @ts-expect-error
    var name = getComponentName(Ctor.options) || tag;
    var vnode = new VNode(
    // @ts-expect-error
    "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 
    // @ts-expect-error
    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);
    return vnode;
}
function createComponentInstanceForVnode(
// we know it's MountedComponentVNode but flow doesn't
vnode, 
// activeInstance in lifecycle state
parent) {
    var options = {
        _isComponent: true,
        _parentVnode: vnode,
        parent: parent
    };
    // check inline-template render functions
    var inlineTemplate = vnode.data.inlineTemplate;
    if (isDef(inlineTemplate)) {
        options.render = inlineTemplate.render;
        options.staticRenderFns = inlineTemplate.staticRenderFns;
    }
    return new vnode.componentOptions.Ctor(options);
}
function installComponentHooks(data) {
    var hooks = data.hook || (data.hook = {});
    for (var i = 0; i < hooksToMerge.length; i++) {
        var key = hooksToMerge[i];
        var existing = hooks[key];
        var toMerge = componentVNodeHooks[key];
        // @ts-expect-error
        if (existing !== toMerge && !(existing && existing._merged)) {
            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
        }
    }
}
function mergeHook(f1, f2) {
    var merged = function (a, b) {
        // flow complains about extra args which is why we use any
        f1(a, b);
        f2(a, b);
    };
    merged._merged = true;
    return merged;
}
// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel(options, data) {
    var prop = (options.model && options.model.prop) || 'value';
    var event = (options.model && options.model.event) || 'input';
    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
    var on = data.on || (data.on = {});
    var existing = on[event];
    var callback = data.model.callback;
    if (isDef(existing)) {
        if (isArray(existing)
            ? existing.indexOf(callback) === -1
            : existing !== callback) {
            on[event] = [callback].concat(existing);
        }
    }
    else {
        on[event] = callback;
    }
}

var warn = noop;
var tip = noop;
var generateComponentTrace; // work around flow check
var formatComponentName;
if (process.env.NODE_ENV !== 'production') {
    var hasConsole_1 = typeof console !== 'undefined';
    var classifyRE_1 = /(?:^|[-_])(\w)/g;
    var classify_1 = function (str) {
        return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');
    };
    warn = function (msg, vm) {
        if (vm === void 0) { vm = currentInstance; }
        var trace = vm ? generateComponentTrace(vm) : '';
        if (config.warnHandler) {
            config.warnHandler.call(null, msg, vm, trace);
        }
        else if (hasConsole_1 && !config.silent) {
            console.error("[Vue warn]: ".concat(msg).concat(trace));
        }
    };
    tip = function (msg, vm) {
        if (hasConsole_1 && !config.silent) {
            console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : ''));
        }
    };
    formatComponentName = function (vm, includeFile) {
        if (vm.$root === vm) {
            return '<Root>';
        }
        var options = isFunction(vm) && vm.cid != null
            ? vm.options
            : vm._isVue
                ? vm.$options || vm.constructor.options
                : vm;
        var name = getComponentName(options);
        var file = options.__file;
        if (!name && file) {
            var match = file.match(/([^/\\]+)\.vue$/);
            name = match && match[1];
        }
        return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") +
            (file && includeFile !== false ? " at ".concat(file) : ''));
    };
    var repeat_1 = function (str, n) {
        var res = '';
        while (n) {
            if (n % 2 === 1)
                res += str;
            if (n > 1)
                str += str;
            n >>= 1;
        }
        return res;
    };
    generateComponentTrace = function (vm) {
        if (vm._isVue && vm.$parent) {
            var tree = [];
            var currentRecursiveSequence = 0;
            while (vm) {
                if (tree.length > 0) {
                    var last = tree[tree.length - 1];
                    if (last.constructor === vm.constructor) {
                        currentRecursiveSequence++;
                        vm = vm.$parent;
                        continue;
                    }
                    else if (currentRecursiveSequence > 0) {
                        tree[tree.length - 1] = [last, currentRecursiveSequence];
                        currentRecursiveSequence = 0;
                    }
                }
                tree.push(vm);
                vm = vm.$parent;
            }
            return ('\n\nfound in\n\n' +
                tree
                    .map(function (vm, i) {
                    return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)
                        ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)")
                        : formatComponentName(vm));
                })
                    .join('\n'));
        }
        else {
            return "\n\n(found in ".concat(formatComponentName(vm), ")");
        }
    };
}

/**
 * Option overwriting strategies are functions that handle
 * how to merge a parent option value and a child option
 * value into the final value.
 */
var strats = config.optionMergeStrategies;
/**
 * Options with restrictions
 */
if (process.env.NODE_ENV !== 'production') {
    strats.el = strats.propsData = function (parent, child, vm, key) {
        if (!vm) {
            warn("option \"".concat(key, "\" can only be used during instance ") +
                'creation with the `new` keyword.');
        }
        return defaultStrat(parent, child);
    };
}
/**
 * Helper that recursively merges two data objects together.
 */
function mergeData(to, from, recursive) {
    if (recursive === void 0) { recursive = true; }
    if (!from)
        return to;
    var key, toVal, fromVal;
    var keys = hasSymbol
        ? Reflect.ownKeys(from)
        : Object.keys(from);
    for (var i = 0; i < keys.length; i++) {
        key = keys[i];
        // in case the object is already observed...
        if (key === '__ob__')
            continue;
        toVal = to[key];
        fromVal = from[key];
        if (!recursive || !hasOwn(to, key)) {
            set(to, key, fromVal);
        }
        else if (toVal !== fromVal &&
            isPlainObject(toVal) &&
            isPlainObject(fromVal)) {
            mergeData(toVal, fromVal);
        }
    }
    return to;
}
/**
 * Data
 */
function mergeDataOrFn(parentVal, childVal, vm) {
    if (!vm) {
        // in a Vue.extend merge, both should be functions
        if (!childVal) {
            return parentVal;
        }
        if (!parentVal) {
            return childVal;
        }
        // when parentVal & childVal are both present,
        // we need to return a function that returns the
        // merged result of both functions... no need to
        // check if parentVal is a function here because
        // it has to be a function to pass previous merges.
        return function mergedDataFn() {
            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
        };
    }
    else {
        return function mergedInstanceDataFn() {
            // instance merge
            var instanceData = isFunction(childVal)
                ? childVal.call(vm, vm)
                : childVal;
            var defaultData = isFunction(parentVal)
                ? parentVal.call(vm, vm)
                : parentVal;
            if (instanceData) {
                return mergeData(instanceData, defaultData);
            }
            else {
                return defaultData;
            }
        };
    }
}
strats.data = function (parentVal, childVal, vm) {
    if (!vm) {
        if (childVal && typeof childVal !== 'function') {
            process.env.NODE_ENV !== 'production' &&
                warn('The "data" option should be a function ' +
                    'that returns a per-instance value in component ' +
                    'definitions.', vm);
            return parentVal;
        }
        return mergeDataOrFn(parentVal, childVal);
    }
    return mergeDataOrFn(parentVal, childVal, vm);
};
/**
 * Hooks and props are merged as arrays.
 */
function mergeLifecycleHook(parentVal, childVal) {
    var res = childVal
        ? parentVal
            ? parentVal.concat(childVal)
            : isArray(childVal)
                ? childVal
                : [childVal]
        : parentVal;
    return res ? dedupeHooks(res) : res;
}
function dedupeHooks(hooks) {
    var res = [];
    for (var i = 0; i < hooks.length; i++) {
        if (res.indexOf(hooks[i]) === -1) {
            res.push(hooks[i]);
        }
    }
    return res;
}
LIFECYCLE_HOOKS.forEach(function (hook) {
    strats[hook] = mergeLifecycleHook;
});
/**
 * Assets
 *
 * When a vm is present (instance creation), we need to do
 * a three-way merge between constructor options, instance
 * options and parent options.
 */
function mergeAssets(parentVal, childVal, vm, key) {
    var res = Object.create(parentVal || null);
    if (childVal) {
        process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);
        return extend(res, childVal);
    }
    else {
        return res;
    }
}
ASSET_TYPES.forEach(function (type) {
    strats[type + 's'] = mergeAssets;
});
/**
 * Watchers.
 *
 * Watchers hashes should not overwrite one
 * another, so we merge them as arrays.
 */
strats.watch = function (parentVal, childVal, vm, key) {
    // work around Firefox's Object.prototype.watch...
    //@ts-expect-error work around
    if (parentVal === nativeWatch)
        parentVal = undefined;
    //@ts-expect-error work around
    if (childVal === nativeWatch)
        childVal = undefined;
    /* istanbul ignore if */
    if (!childVal)
        return Object.create(parentVal || null);
    if (process.env.NODE_ENV !== 'production') {
        assertObjectType(key, childVal, vm);
    }
    if (!parentVal)
        return childVal;
    var ret = {};
    extend(ret, parentVal);
    for (var key_1 in childVal) {
        var parent_1 = ret[key_1];
        var child = childVal[key_1];
        if (parent_1 && !isArray(parent_1)) {
            parent_1 = [parent_1];
        }
        ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];
    }
    return ret;
};
/**
 * Other object hashes.
 */
strats.props =
    strats.methods =
        strats.inject =
            strats.computed =
                function (parentVal, childVal, vm, key) {
                    if (childVal && process.env.NODE_ENV !== 'production') {
                        assertObjectType(key, childVal, vm);
                    }
                    if (!parentVal)
                        return childVal;
                    var ret = Object.create(null);
                    extend(ret, parentVal);
                    if (childVal)
                        extend(ret, childVal);
                    return ret;
                };
strats.provide = function (parentVal, childVal) {
    if (!parentVal)
        return childVal;
    return function () {
        var ret = Object.create(null);
        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
        if (childVal) {
            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
            );
        }
        return ret;
    };
};
/**
 * Default strategy.
 */
var defaultStrat = function (parentVal, childVal) {
    return childVal === undefined ? parentVal : childVal;
};
/**
 * Validate component names
 */
function checkComponents(options) {
    for (var key in options.components) {
        validateComponentName(key);
    }
}
function validateComponentName(name) {
    if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) {
        warn('Invalid component name: "' +
            name +
            '". Component names ' +
            'should conform to valid custom element name in html5 specification.');
    }
    if (isBuiltInTag(name) || config.isReservedTag(name)) {
        warn('Do not use built-in or reserved HTML elements as component ' +
            'id: ' +
            name);
    }
}
/**
 * Ensure all props option syntax are normalized into the
 * Object-based format.
 */
function normalizeProps(options, vm) {
    var props = options.props;
    if (!props)
        return;
    var res = {};
    var i, val, name;
    if (isArray(props)) {
        i = props.length;
        while (i--) {
            val = props[i];
            if (typeof val === 'string') {
                name = camelize(val);
                res[name] = { type: null };
            }
            else if (process.env.NODE_ENV !== 'production') {
                warn('props must be strings when using array syntax.');
            }
        }
    }
    else if (isPlainObject(props)) {
        for (var key in props) {
            val = props[key];
            name = camelize(key);
            res[name] = isPlainObject(val) ? val : { type: val };
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn("Invalid value for option \"props\": expected an Array or an Object, " +
            "but got ".concat(toRawType(props), "."), vm);
    }
    options.props = res;
}
/**
 * Normalize all injections into Object-based format
 */
function normalizeInject(options, vm) {
    var inject = options.inject;
    if (!inject)
        return;
    var normalized = (options.inject = {});
    if (isArray(inject)) {
        for (var i = 0; i < inject.length; i++) {
            normalized[inject[i]] = { from: inject[i] };
        }
    }
    else if (isPlainObject(inject)) {
        for (var key in inject) {
            var val = inject[key];
            normalized[key] = isPlainObject(val)
                ? extend({ from: key }, val)
                : { from: val };
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn("Invalid value for option \"inject\": expected an Array or an Object, " +
            "but got ".concat(toRawType(inject), "."), vm);
    }
}
/**
 * Normalize raw function directives into object format.
 */
function normalizeDirectives$1(options) {
    var dirs = options.directives;
    if (dirs) {
        for (var key in dirs) {
            var def = dirs[key];
            if (isFunction(def)) {
                dirs[key] = { bind: def, update: def };
            }
        }
    }
}
function assertObjectType(name, value, vm) {
    if (!isPlainObject(value)) {
        warn("Invalid value for option \"".concat(name, "\": expected an Object, ") +
            "but got ".concat(toRawType(value), "."), vm);
    }
}
/**
 * Merge two option objects into a new one.
 * Core utility used in both instantiation and inheritance.
 */
function mergeOptions(parent, child, vm) {
    if (process.env.NODE_ENV !== 'production') {
        checkComponents(child);
    }
    if (isFunction(child)) {
        // @ts-expect-error
        child = child.options;
    }
    normalizeProps(child, vm);
    normalizeInject(child, vm);
    normalizeDirectives$1(child);
    // Apply extends and mixins on the child options,
    // but only if it is a raw options object that isn't
    // the result of another mergeOptions call.
    // Only merged options has the _base property.
    if (!child._base) {
        if (child.extends) {
            parent = mergeOptions(parent, child.extends, vm);
        }
        if (child.mixins) {
            for (var i = 0, l = child.mixins.length; i < l; i++) {
                parent = mergeOptions(parent, child.mixins[i], vm);
            }
        }
    }
    var options = {};
    var key;
    for (key in parent) {
        mergeField(key);
    }
    for (key in child) {
        if (!hasOwn(parent, key)) {
            mergeField(key);
        }
    }
    function mergeField(key) {
        var strat = strats[key] || defaultStrat;
        options[key] = strat(parent[key], child[key], vm, key);
    }
    return options;
}
/**
 * Resolve an asset.
 * This function is used because child instances need access
 * to assets defined in its ancestor chain.
 */
function resolveAsset(options, type, id, warnMissing) {
    /* istanbul ignore if */
    if (typeof id !== 'string') {
        return;
    }
    var assets = options[type];
    // check local registration variations first
    if (hasOwn(assets, id))
        return assets[id];
    var camelizedId = camelize(id);
    if (hasOwn(assets, camelizedId))
        return assets[camelizedId];
    var PascalCaseId = capitalize(camelizedId);
    if (hasOwn(assets, PascalCaseId))
        return assets[PascalCaseId];
    // fallback to prototype chain
    var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
    if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {
        warn('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
    }
    return res;
}

function validateProp(key, propOptions, propsData, vm) {
    var prop = propOptions[key];
    var absent = !hasOwn(propsData, key);
    var value = propsData[key];
    // boolean casting
    var booleanIndex = getTypeIndex(Boolean, prop.type);
    if (booleanIndex > -1) {
        if (absent && !hasOwn(prop, 'default')) {
            value = false;
        }
        else if (value === '' || value === hyphenate(key)) {
            // only cast empty string / same name to boolean if
            // boolean has higher priority
            var stringIndex = getTypeIndex(String, prop.type);
            if (stringIndex < 0 || booleanIndex < stringIndex) {
                value = true;
            }
        }
    }
    // check default value
    if (value === undefined) {
        value = getPropDefaultValue(vm, prop, key);
        // since the default value is a fresh copy,
        // make sure to observe it.
        var prevShouldObserve = shouldObserve;
        toggleObserving(true);
        observe(value);
        toggleObserving(prevShouldObserve);
    }
    if (process.env.NODE_ENV !== 'production') {
        assertProp(prop, key, value, vm, absent);
    }
    return value;
}
/**
 * Get the default value of a prop.
 */
function getPropDefaultValue(vm, prop, key) {
    // no default, return undefined
    if (!hasOwn(prop, 'default')) {
        return undefined;
    }
    var def = prop.default;
    // warn against non-factory defaults for Object & Array
    if (process.env.NODE_ENV !== 'production' && isObject(def)) {
        warn('Invalid default value for prop "' +
            key +
            '": ' +
            'Props with type Object/Array must use a factory function ' +
            'to return the default value.', vm);
    }
    // the raw prop value was also undefined from previous render,
    // return previous default value to avoid unnecessary watcher trigger
    if (vm &&
        vm.$options.propsData &&
        vm.$options.propsData[key] === undefined &&
        vm._props[key] !== undefined) {
        return vm._props[key];
    }
    // call factory function for non-Function types
    // a value is Function if its prototype is function even across different execution context
    return isFunction(def) && getType(prop.type) !== 'Function'
        ? def.call(vm)
        : def;
}
/**
 * Assert whether a prop is valid.
 */
function assertProp(prop, name, value, vm, absent) {
    if (prop.required && absent) {
        warn('Missing required prop: "' + name + '"', vm);
        return;
    }
    if (value == null && !prop.required) {
        return;
    }
    var type = prop.type;
    var valid = !type || type === true;
    var expectedTypes = [];
    if (type) {
        if (!isArray(type)) {
            type = [type];
        }
        for (var i = 0; i < type.length && !valid; i++) {
            var assertedType = assertType(value, type[i], vm);
            expectedTypes.push(assertedType.expectedType || '');
            valid = assertedType.valid;
        }
    }
    var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
    if (!valid && haveExpectedTypes) {
        warn(getInvalidTypeMessage(name, value, expectedTypes), vm);
        return;
    }
    var validator = prop.validator;
    if (validator) {
        if (!validator(value)) {
            warn('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
        }
    }
}
var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
function assertType(value, type, vm) {
    var valid;
    var expectedType = getType(type);
    if (simpleCheckRE.test(expectedType)) {
        var t = typeof value;
        valid = t === expectedType.toLowerCase();
        // for primitive wrapper objects
        if (!valid && t === 'object') {
            valid = value instanceof type;
        }
    }
    else if (expectedType === 'Object') {
        valid = isPlainObject(value);
    }
    else if (expectedType === 'Array') {
        valid = isArray(value);
    }
    else {
        try {
            valid = value instanceof type;
        }
        catch (e) {
            warn('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
            valid = false;
        }
    }
    return {
        valid: valid,
        expectedType: expectedType
    };
}
var functionTypeCheckRE = /^\s*function (\w+)/;
/**
 * Use function string name to check built-in types,
 * because a simple equality check will fail when running
 * across different vms / iframes.
 */
function getType(fn) {
    var match = fn && fn.toString().match(functionTypeCheckRE);
    return match ? match[1] : '';
}
function isSameType(a, b) {
    return getType(a) === getType(b);
}
function getTypeIndex(type, expectedTypes) {
    if (!isArray(expectedTypes)) {
        return isSameType(expectedTypes, type) ? 0 : -1;
    }
    for (var i = 0, len = expectedTypes.length; i < len; i++) {
        if (isSameType(expectedTypes[i], type)) {
            return i;
        }
    }
    return -1;
}
function getInvalidTypeMessage(name, value, expectedTypes) {
    var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") +
        " Expected ".concat(expectedTypes.map(capitalize).join(', '));
    var expectedType = expectedTypes[0];
    var receivedType = toRawType(value);
    // check if we need to specify expected value
    if (expectedTypes.length === 1 &&
        isExplicable(expectedType) &&
        isExplicable(typeof value) &&
        !isBoolean(expectedType, receivedType)) {
        message += " with value ".concat(styleValue(value, expectedType));
    }
    message += ", got ".concat(receivedType, " ");
    // check if we need to specify received value
    if (isExplicable(receivedType)) {
        message += "with value ".concat(styleValue(value, receivedType), ".");
    }
    return message;
}
function styleValue(value, type) {
    if (type === 'String') {
        return "\"".concat(value, "\"");
    }
    else if (type === 'Number') {
        return "".concat(Number(value));
    }
    else {
        return "".concat(value);
    }
}
var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
function isExplicable(value) {
    return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });
}
function isBoolean() {
    var args = [];
    for (var _i = 0; _i < arguments.length; _i++) {
        args[_i] = arguments[_i];
    }
    return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });
}

/* not type checking this file because flow doesn't play well with Proxy */
var initProxy;
if (process.env.NODE_ENV !== 'production') {
    var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
        'require' // for Webpack/Browserify
    );
    var warnNonPresent_1 = function (target, key) {
        warn("Property or method \"".concat(key, "\" is not defined on the instance but ") +
            'referenced during render. Make sure that this property is reactive, ' +
            'either in the data option, or for class-based components, by ' +
            'initializing the property. ' +
            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
    };
    var warnReservedPrefix_1 = function (target, key) {
        warn("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") +
            'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
            'prevent conflicts with Vue internals. ' +
            'See: https://v2.vuejs.org/v2/api/#data', target);
    };
    var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
    if (hasProxy_1) {
        var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
        config.keyCodes = new Proxy(config.keyCodes, {
            set: function (target, key, value) {
                if (isBuiltInModifier_1(key)) {
                    warn("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key));
                    return false;
                }
                else {
                    target[key] = value;
                    return true;
                }
            }
        });
    }
    var hasHandler_1 = {
        has: function (target, key) {
            var has = key in target;
            var isAllowed = allowedGlobals_1(key) ||
                (typeof key === 'string' &&
                    key.charAt(0) === '_' &&
                    !(key in target.$data));
            if (!has && !isAllowed) {
                if (key in target.$data)
                    warnReservedPrefix_1(target, key);
                else
                    warnNonPresent_1(target, key);
            }
            return has || !isAllowed;
        }
    };
    var getHandler_1 = {
        get: function (target, key) {
            if (typeof key === 'string' && !(key in target)) {
                if (key in target.$data)
                    warnReservedPrefix_1(target, key);
                else
                    warnNonPresent_1(target, key);
            }
            return target[key];
        }
    };
    initProxy = function initProxy(vm) {
        if (hasProxy_1) {
            // determine which proxy handler to use
            var options = vm.$options;
            var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;
            vm._renderProxy = new Proxy(vm, handlers);
        }
        else {
            vm._renderProxy = vm;
        }
    };
}

var sharedPropertyDefinition = {
    enumerable: true,
    configurable: true,
    get: noop,
    set: noop
};
function proxy(target, sourceKey, key) {
    sharedPropertyDefinition.get = function proxyGetter() {
        return this[sourceKey][key];
    };
    sharedPropertyDefinition.set = function proxySetter(val) {
        this[sourceKey][key] = val;
    };
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function initState(vm) {
    var opts = vm.$options;
    if (opts.props)
        initProps$1(vm, opts.props);
    // Composition API
    initSetup(vm);
    if (opts.methods)
        initMethods(vm, opts.methods);
    if (opts.data) {
        initData(vm);
    }
    else {
        var ob = observe((vm._data = {}));
        ob && ob.vmCount++;
    }
    if (opts.computed)
        initComputed$1(vm, opts.computed);
    if (opts.watch && opts.watch !== nativeWatch) {
        initWatch(vm, opts.watch);
    }
}
function initProps$1(vm, propsOptions) {
    var propsData = vm.$options.propsData || {};
    var props = (vm._props = shallowReactive({}));
    // cache prop keys so that future props updates can iterate using Array
    // instead of dynamic object key enumeration.
    var keys = (vm.$options._propKeys = []);
    var isRoot = !vm.$parent;
    // root instance props should be converted
    if (!isRoot) {
        toggleObserving(false);
    }
    var _loop_1 = function (key) {
        keys.push(key);
        var value = validateProp(key, propsOptions, propsData, vm);
        /* istanbul ignore else */
        if (process.env.NODE_ENV !== 'production') {
            var hyphenatedKey = hyphenate(key);
            if (isReservedAttribute(hyphenatedKey) ||
                config.isReservedAttr(hyphenatedKey)) {
                warn("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm);
            }
            defineReactive(props, key, value, function () {
                if (!isRoot && !isUpdatingChildComponent) {
                    warn("Avoid mutating a prop directly since the value will be " +
                        "overwritten whenever the parent component re-renders. " +
                        "Instead, use a data or computed property based on the prop's " +
                        "value. Prop being mutated: \"".concat(key, "\""), vm);
                }
            });
        }
        else {
            defineReactive(props, key, value);
        }
        // static props are already proxied on the component's prototype
        // during Vue.extend(). We only need to proxy props defined at
        // instantiation here.
        if (!(key in vm)) {
            proxy(vm, "_props", key);
        }
    };
    for (var key in propsOptions) {
        _loop_1(key);
    }
    toggleObserving(true);
}
function initData(vm) {
    var data = vm.$options.data;
    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
    if (!isPlainObject(data)) {
        data = {};
        process.env.NODE_ENV !== 'production' &&
            warn('data functions should return an object:\n' +
                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
    }
    // proxy data on instance
    var keys = Object.keys(data);
    var props = vm.$options.props;
    var methods = vm.$options.methods;
    var i = keys.length;
    while (i--) {
        var key = keys[i];
        if (process.env.NODE_ENV !== 'production') {
            if (methods && hasOwn(methods, key)) {
                warn("Method \"".concat(key, "\" has already been defined as a data property."), vm);
            }
        }
        if (props && hasOwn(props, key)) {
            process.env.NODE_ENV !== 'production' &&
                warn("The data property \"".concat(key, "\" is already declared as a prop. ") +
                    "Use prop default value instead.", vm);
        }
        else if (!isReserved(key)) {
            proxy(vm, "_data", key);
        }
    }
    // observe data
    var ob = observe(data);
    ob && ob.vmCount++;
}
function getData(data, vm) {
    // #7573 disable dep collection when invoking data getters
    pushTarget();
    try {
        return data.call(vm, vm);
    }
    catch (e) {
        handleError(e, vm, "data()");
        return {};
    }
    finally {
        popTarget();
    }
}
var computedWatcherOptions = { lazy: true };
function initComputed$1(vm, computed) {
    // $flow-disable-line
    var watchers = (vm._computedWatchers = Object.create(null));
    // computed properties are just getters during SSR
    var isSSR = isServerRendering();
    for (var key in computed) {
        var userDef = computed[key];
        var getter = isFunction(userDef) ? userDef : userDef.get;
        if (process.env.NODE_ENV !== 'production' && getter == null) {
            warn("Getter is missing for computed property \"".concat(key, "\"."), vm);
        }
        if (!isSSR) {
            // create internal watcher for the computed property.
            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
        }
        // component-defined computed properties are already defined on the
        // component prototype. We only need to define computed properties defined
        // at instantiation here.
        if (!(key in vm)) {
            defineComputed(vm, key, userDef);
        }
        else if (process.env.NODE_ENV !== 'production') {
            if (key in vm.$data) {
                warn("The computed property \"".concat(key, "\" is already defined in data."), vm);
            }
            else if (vm.$options.props && key in vm.$options.props) {
                warn("The computed property \"".concat(key, "\" is already defined as a prop."), vm);
            }
            else if (vm.$options.methods && key in vm.$options.methods) {
                warn("The computed property \"".concat(key, "\" is already defined as a method."), vm);
            }
        }
    }
}
function defineComputed(target, key, userDef) {
    var shouldCache = !isServerRendering();
    if (isFunction(userDef)) {
        sharedPropertyDefinition.get = shouldCache
            ? createComputedGetter(key)
            : createGetterInvoker(userDef);
        sharedPropertyDefinition.set = noop;
    }
    else {
        sharedPropertyDefinition.get = userDef.get
            ? shouldCache && userDef.cache !== false
                ? createComputedGetter(key)
                : createGetterInvoker(userDef.get)
            : noop;
        sharedPropertyDefinition.set = userDef.set || noop;
    }
    if (process.env.NODE_ENV !== 'production' && sharedPropertyDefinition.set === noop) {
        sharedPropertyDefinition.set = function () {
            warn("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this);
        };
    }
    Object.defineProperty(target, key, sharedPropertyDefinition);
}
function createComputedGetter(key) {
    return function computedGetter() {
        var watcher = this._computedWatchers && this._computedWatchers[key];
        if (watcher) {
            if (watcher.dirty) {
                watcher.evaluate();
            }
            if (Dep.target) {
                if (process.env.NODE_ENV !== 'production' && Dep.target.onTrack) {
                    Dep.target.onTrack({
                        effect: Dep.target,
                        target: this,
                        type: "get" /* TrackOpTypes.GET */,
                        key: key
                    });
                }
                watcher.depend();
            }
            return watcher.value;
        }
    };
}
function createGetterInvoker(fn) {
    return function computedGetter() {
        return fn.call(this, this);
    };
}
function initMethods(vm, methods) {
    var props = vm.$options.props;
    for (var key in methods) {
        if (process.env.NODE_ENV !== 'production') {
            if (typeof methods[key] !== 'function') {
                warn("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") +
                    "Did you reference the function correctly?", vm);
            }
            if (props && hasOwn(props, key)) {
                warn("Method \"".concat(key, "\" has already been defined as a prop."), vm);
            }
            if (key in vm && isReserved(key)) {
                warn("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") +
                    "Avoid defining component methods that start with _ or $.");
            }
        }
        vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
    }
}
function initWatch(vm, watch) {
    for (var key in watch) {
        var handler = watch[key];
        if (isArray(handler)) {
            for (var i = 0; i < handler.length; i++) {
                createWatcher(vm, key, handler[i]);
            }
        }
        else {
            createWatcher(vm, key, handler);
        }
    }
}
function createWatcher(vm, expOrFn, handler, options) {
    if (isPlainObject(handler)) {
        options = handler;
        handler = handler.handler;
    }
    if (typeof handler === 'string') {
        handler = vm[handler];
    }
    return vm.$watch(expOrFn, handler, options);
}
function stateMixin(Vue) {
    // flow somehow has problems with directly declared definition object
    // when using Object.defineProperty, so we have to procedurally build up
    // the object here.
    var dataDef = {};
    dataDef.get = function () {
        return this._data;
    };
    var propsDef = {};
    propsDef.get = function () {
        return this._props;
    };
    if (process.env.NODE_ENV !== 'production') {
        dataDef.set = function () {
            warn('Avoid replacing instance root $data. ' +
                'Use nested data properties instead.', this);
        };
        propsDef.set = function () {
            warn("$props is readonly.", this);
        };
    }
    Object.defineProperty(Vue.prototype, '$data', dataDef);
    Object.defineProperty(Vue.prototype, '$props', propsDef);
    Vue.prototype.$set = set;
    Vue.prototype.$delete = del;
    Vue.prototype.$watch = function (expOrFn, cb, options) {
        var vm = this;
        if (isPlainObject(cb)) {
            return createWatcher(vm, expOrFn, cb, options);
        }
        options = options || {};
        options.user = true;
        var watcher = new Watcher(vm, expOrFn, cb, options);
        if (options.immediate) {
            var info = "callback for immediate watcher \"".concat(watcher.expression, "\"");
            pushTarget();
            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
            popTarget();
        }
        return function unwatchFn() {
            watcher.teardown();
        };
    };
}

var uid = 0;
function initMixin$1(Vue) {
    Vue.prototype._init = function (options) {
        var vm = this;
        // a uid
        vm._uid = uid++;
        var startTag, endTag;
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
            startTag = "vue-perf-start:".concat(vm._uid);
            endTag = "vue-perf-end:".concat(vm._uid);
            mark(startTag);
        }
        // a flag to mark this as a Vue instance without having to do instanceof
        // check
        vm._isVue = true;
        // avoid instances from being observed
        vm.__v_skip = true;
        // effect scope
        vm._scope = new EffectScope(true /* detached */);
        vm._scope._vm = true;
        // merge options
        if (options && options._isComponent) {
            // optimize internal component instantiation
            // since dynamic options merging is pretty slow, and none of the
            // internal component options needs special treatment.
            initInternalComponent(vm, options);
        }
        else {
            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
        }
        /* istanbul ignore else */
        if (process.env.NODE_ENV !== 'production') {
            initProxy(vm);
        }
        else {
            vm._renderProxy = vm;
        }
        // expose real self
        vm._self = vm;
        initLifecycle(vm);
        initEvents(vm);
        initRender(vm);
        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
        initInjections(vm); // resolve injections before data/props
        initState(vm);
        initProvide(vm); // resolve provide after data/props
        callHook$1(vm, 'created');
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
            vm._name = formatComponentName(vm, false);
            mark(endTag);
            measure("vue ".concat(vm._name, " init"), startTag, endTag);
        }
        if (vm.$options.el) {
            vm.$mount(vm.$options.el);
        }
    };
}
function initInternalComponent(vm, options) {
    var opts = (vm.$options = Object.create(vm.constructor.options));
    // doing this because it's faster than dynamic enumeration.
    var parentVnode = options._parentVnode;
    opts.parent = options.parent;
    opts._parentVnode = parentVnode;
    var vnodeComponentOptions = parentVnode.componentOptions;
    opts.propsData = vnodeComponentOptions.propsData;
    opts._parentListeners = vnodeComponentOptions.listeners;
    opts._renderChildren = vnodeComponentOptions.children;
    opts._componentTag = vnodeComponentOptions.tag;
    if (options.render) {
        opts.render = options.render;
        opts.staticRenderFns = options.staticRenderFns;
    }
}
function resolveConstructorOptions(Ctor) {
    var options = Ctor.options;
    if (Ctor.super) {
        var superOptions = resolveConstructorOptions(Ctor.super);
        var cachedSuperOptions = Ctor.superOptions;
        if (superOptions !== cachedSuperOptions) {
            // super option changed,
            // need to resolve new options.
            Ctor.superOptions = superOptions;
            // check if there are any late-modified/attached options (#4976)
            var modifiedOptions = resolveModifiedOptions(Ctor);
            // update base extend options
            if (modifiedOptions) {
                extend(Ctor.extendOptions, modifiedOptions);
            }
            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
            if (options.name) {
                options.components[options.name] = Ctor;
            }
        }
    }
    return options;
}
function resolveModifiedOptions(Ctor) {
    var modified;
    var latest = Ctor.options;
    var sealed = Ctor.sealedOptions;
    for (var key in latest) {
        if (latest[key] !== sealed[key]) {
            if (!modified)
                modified = {};
            modified[key] = latest[key];
        }
    }
    return modified;
}

function Vue(options) {
    if (process.env.NODE_ENV !== 'production' && !(this instanceof Vue)) {
        warn('Vue is a constructor and should be called with the `new` keyword');
    }
    this._init(options);
}
//@ts-expect-error Vue has function type
initMixin$1(Vue);
//@ts-expect-error Vue has function type
stateMixin(Vue);
//@ts-expect-error Vue has function type
eventsMixin(Vue);
//@ts-expect-error Vue has function type
lifecycleMixin(Vue);
//@ts-expect-error Vue has function type
renderMixin(Vue);

function initUse(Vue) {
    Vue.use = function (plugin) {
        var installedPlugins = this._installedPlugins || (this._installedPlugins = []);
        if (installedPlugins.indexOf(plugin) > -1) {
            return this;
        }
        // additional parameters
        var args = toArray(arguments, 1);
        args.unshift(this);
        if (isFunction(plugin.install)) {
            plugin.install.apply(plugin, args);
        }
        else if (isFunction(plugin)) {
            plugin.apply(null, args);
        }
        installedPlugins.push(plugin);
        return this;
    };
}

function initMixin(Vue) {
    Vue.mixin = function (mixin) {
        this.options = mergeOptions(this.options, mixin);
        return this;
    };
}

function initExtend(Vue) {
    /**
     * Each instance constructor, including Vue, has a unique
     * cid. This enables us to create wrapped "child
     * constructors" for prototypal inheritance and cache them.
     */
    Vue.cid = 0;
    var cid = 1;
    /**
     * Class inheritance
     */
    Vue.extend = function (extendOptions) {
        extendOptions = extendOptions || {};
        var Super = this;
        var SuperId = Super.cid;
        var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
        if (cachedCtors[SuperId]) {
            return cachedCtors[SuperId];
        }
        var name = getComponentName(extendOptions) || getComponentName(Super.options);
        if (process.env.NODE_ENV !== 'production' && name) {
            validateComponentName(name);
        }
        var Sub = function VueComponent(options) {
            this._init(options);
        };
        Sub.prototype = Object.create(Super.prototype);
        Sub.prototype.constructor = Sub;
        Sub.cid = cid++;
        Sub.options = mergeOptions(Super.options, extendOptions);
        Sub['super'] = Super;
        // For props and computed properties, we define the proxy getters on
        // the Vue instances at extension time, on the extended prototype. This
        // avoids Object.defineProperty calls for each instance created.
        if (Sub.options.props) {
            initProps(Sub);
        }
        if (Sub.options.computed) {
            initComputed(Sub);
        }
        // allow further extension/mixin/plugin usage
        Sub.extend = Super.extend;
        Sub.mixin = Super.mixin;
        Sub.use = Super.use;
        // create asset registers, so extended classes
        // can have their private assets too.
        ASSET_TYPES.forEach(function (type) {
            Sub[type] = Super[type];
        });
        // enable recursive self-lookup
        if (name) {
            Sub.options.components[name] = Sub;
        }
        // keep a reference to the super options at extension time.
        // later at instantiation we can check if Super's options have
        // been updated.
        Sub.superOptions = Super.options;
        Sub.extendOptions = extendOptions;
        Sub.sealedOptions = extend({}, Sub.options);
        // cache constructor
        cachedCtors[SuperId] = Sub;
        return Sub;
    };
}
function initProps(Comp) {
    var props = Comp.options.props;
    for (var key in props) {
        proxy(Comp.prototype, "_props", key);
    }
}
function initComputed(Comp) {
    var computed = Comp.options.computed;
    for (var key in computed) {
        defineComputed(Comp.prototype, key, computed[key]);
    }
}

function initAssetRegisters(Vue) {
    /**
     * Create asset registration methods.
     */
    ASSET_TYPES.forEach(function (type) {
        // @ts-expect-error function is not exact same type
        Vue[type] = function (id, definition) {
            if (!definition) {
                return this.options[type + 's'][id];
            }
            else {
                /* istanbul ignore if */
                if (process.env.NODE_ENV !== 'production' && type === 'component') {
                    validateComponentName(id);
                }
                if (type === 'component' && isPlainObject(definition)) {
                    // @ts-expect-error
                    definition.name = definition.name || id;
                    definition = this.options._base.extend(definition);
                }
                if (type === 'directive' && isFunction(definition)) {
                    definition = { bind: definition, update: definition };
                }
                this.options[type + 's'][id] = definition;
                return definition;
            }
        };
    });
}

function _getComponentName(opts) {
    return opts && (getComponentName(opts.Ctor.options) || opts.tag);
}
function matches(pattern, name) {
    if (isArray(pattern)) {
        return pattern.indexOf(name) > -1;
    }
    else if (typeof pattern === 'string') {
        return pattern.split(',').indexOf(name) > -1;
    }
    else if (isRegExp(pattern)) {
        return pattern.test(name);
    }
    /* istanbul ignore next */
    return false;
}
function pruneCache(keepAliveInstance, filter) {
    var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode;
    for (var key in cache) {
        var entry = cache[key];
        if (entry) {
            var name_1 = entry.name;
            if (name_1 && !filter(name_1)) {
                pruneCacheEntry(cache, key, keys, _vnode);
            }
        }
    }
}
function pruneCacheEntry(cache, key, keys, current) {
    var entry = cache[key];
    if (entry && (!current || entry.tag !== current.tag)) {
        // @ts-expect-error can be undefined
        entry.componentInstance.$destroy();
    }
    cache[key] = null;
    remove$2(keys, key);
}
var patternTypes = [String, RegExp, Array];
// TODO defineComponent
var KeepAlive = {
    name: 'keep-alive',
    abstract: true,
    props: {
        include: patternTypes,
        exclude: patternTypes,
        max: [String, Number]
    },
    methods: {
        cacheVNode: function () {
            var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;
            if (vnodeToCache) {
                var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;
                cache[keyToCache] = {
                    name: _getComponentName(componentOptions),
                    tag: tag,
                    componentInstance: componentInstance
                };
                keys.push(keyToCache);
                // prune oldest entry
                if (this.max && keys.length > parseInt(this.max)) {
                    pruneCacheEntry(cache, keys[0], keys, this._vnode);
                }
                this.vnodeToCache = null;
            }
        }
    },
    created: function () {
        this.cache = Object.create(null);
        this.keys = [];
    },
    destroyed: function () {
        for (var key in this.cache) {
            pruneCacheEntry(this.cache, key, this.keys);
        }
    },
    mounted: function () {
        var _this = this;
        this.cacheVNode();
        this.$watch('include', function (val) {
            pruneCache(_this, function (name) { return matches(val, name); });
        });
        this.$watch('exclude', function (val) {
            pruneCache(_this, function (name) { return !matches(val, name); });
        });
    },
    updated: function () {
        this.cacheVNode();
    },
    render: function () {
        var slot = this.$slots.default;
        var vnode = getFirstComponentChild(slot);
        var componentOptions = vnode && vnode.componentOptions;
        if (componentOptions) {
            // check pattern
            var name_2 = _getComponentName(componentOptions);
            var _a = this, include = _a.include, exclude = _a.exclude;
            if (
            // not included
            (include && (!name_2 || !matches(include, name_2))) ||
                // excluded
                (exclude && name_2 && matches(exclude, name_2))) {
                return vnode;
            }
            var _b = this, cache = _b.cache, keys = _b.keys;
            var key = vnode.key == null
                ? // same constructor may get registered as different local components
                    // so cid alone is not enough (#3269)
                    componentOptions.Ctor.cid +
                        (componentOptions.tag ? "::".concat(componentOptions.tag) : '')
                : vnode.key;
            if (cache[key]) {
                vnode.componentInstance = cache[key].componentInstance;
                // make current key freshest
                remove$2(keys, key);
                keys.push(key);
            }
            else {
                // delay setting the cache until update
                this.vnodeToCache = vnode;
                this.keyToCache = key;
            }
            // @ts-expect-error can vnode.data can be undefined
            vnode.data.keepAlive = true;
        }
        return vnode || (slot && slot[0]);
    }
};

var builtInComponents = {
    KeepAlive: KeepAlive
};

function initGlobalAPI(Vue) {
    // config
    var configDef = {};
    configDef.get = function () { return config; };
    if (process.env.NODE_ENV !== 'production') {
        configDef.set = function () {
            warn('Do not replace the Vue.config object, set individual fields instead.');
        };
    }
    Object.defineProperty(Vue, 'config', configDef);
    // exposed util methods.
    // NOTE: these are not considered part of the public API - avoid relying on
    // them unless you are aware of the risk.
    Vue.util = {
        warn: warn,
        extend: extend,
        mergeOptions: mergeOptions,
        defineReactive: defineReactive
    };
    Vue.set = set;
    Vue.delete = del;
    Vue.nextTick = nextTick;
    // 2.6 explicit observable API
    Vue.observable = function (obj) {
        observe(obj);
        return obj;
    };
    Vue.options = Object.create(null);
    ASSET_TYPES.forEach(function (type) {
        Vue.options[type + 's'] = Object.create(null);
    });
    // this is used to identify the "base" constructor to extend all plain-object
    // components with in Weex's multi-instance scenarios.
    Vue.options._base = Vue;
    extend(Vue.options.components, builtInComponents);
    initUse(Vue);
    initMixin(Vue);
    initExtend(Vue);
    initAssetRegisters(Vue);
}

initGlobalAPI(Vue);
Object.defineProperty(Vue.prototype, '$isServer', {
    get: isServerRendering
});
Object.defineProperty(Vue.prototype, '$ssrContext', {
    get: function () {
        /* istanbul ignore next */
        return this.$vnode && this.$vnode.ssrContext;
    }
});
// expose FunctionalRenderContext for ssr runtime helper installation
Object.defineProperty(Vue, 'FunctionalRenderContext', {
    value: FunctionalRenderContext
});
Vue.version = version;

// these are reserved for web because they are directly compiled away
// during template compilation
var isReservedAttr = makeMap('style,class');
// attributes that should be using props for binding
var acceptValue = makeMap('input,textarea,option,select,progress');
var mustUseProp = function (tag, type, attr) {
    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
        (attr === 'selected' && tag === 'option') ||
        (attr === 'checked' && tag === 'input') ||
        (attr === 'muted' && tag === 'video'));
};
var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
var convertEnumeratedValue = function (key, value) {
    return isFalsyAttrValue(value) || value === 'false'
        ? 'false'
        : // allow arbitrary string value for contenteditable
            key === 'contenteditable' && isValidContentEditableValue(value)
                ? value
                : 'true';
};
var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
    'required,reversed,scoped,seamless,selected,sortable,' +
    'truespeed,typemustmatch,visible');
var xlinkNS = 'http://www.w3.org/1999/xlink';
var isXlink = function (name) {
    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
};
var getXlinkProp = function (name) {
    return isXlink(name) ? name.slice(6, name.length) : '';
};
var isFalsyAttrValue = function (val) {
    return val == null || val === false;
};

function genClassForVnode(vnode) {
    var data = vnode.data;
    var parentNode = vnode;
    var childNode = vnode;
    while (isDef(childNode.componentInstance)) {
        childNode = childNode.componentInstance._vnode;
        if (childNode && childNode.data) {
            data = mergeClassData(childNode.data, data);
        }
    }
    // @ts-expect-error parentNode.parent not VNodeWithData
    while (isDef((parentNode = parentNode.parent))) {
        if (parentNode && parentNode.data) {
            data = mergeClassData(data, parentNode.data);
        }
    }
    return renderClass(data.staticClass, data.class);
}
function mergeClassData(child, parent) {
    return {
        staticClass: concat(child.staticClass, parent.staticClass),
        class: isDef(child.class) ? [child.class, parent.class] : parent.class
    };
}
function renderClass(staticClass, dynamicClass) {
    if (isDef(staticClass) || isDef(dynamicClass)) {
        return concat(staticClass, stringifyClass(dynamicClass));
    }
    /* istanbul ignore next */
    return '';
}
function concat(a, b) {
    return a ? (b ? a + ' ' + b : a) : b || '';
}
function stringifyClass(value) {
    if (Array.isArray(value)) {
        return stringifyArray(value);
    }
    if (isObject(value)) {
        return stringifyObject(value);
    }
    if (typeof value === 'string') {
        return value;
    }
    /* istanbul ignore next */
    return '';
}
function stringifyArray(value) {
    var res = '';
    var stringified;
    for (var i = 0, l = value.length; i < l; i++) {
        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
            if (res)
                res += ' ';
            res += stringified;
        }
    }
    return res;
}
function stringifyObject(value) {
    var res = '';
    for (var key in value) {
        if (value[key]) {
            if (res)
                res += ' ';
            res += key;
        }
    }
    return res;
}

var namespaceMap = {
    svg: 'http://www.w3.org/2000/svg',
    math: 'http://www.w3.org/1998/Math/MathML'
};
var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
    'embed,object,param,source,canvas,script,noscript,del,ins,' +
    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
    'output,progress,select,textarea,' +
    'details,dialog,menu,menuitem,summary,' +
    'content,element,shadow,template,blockquote,iframe,tfoot');
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
var isReservedTag = function (tag) {
    return isHTMLTag(tag) || isSVG(tag);
};
function getTagNamespace(tag) {
    if (isSVG(tag)) {
        return 'svg';
    }
    // basic support for MathML
    // note it doesn't support other MathML elements being component roots
    if (tag === 'math') {
        return 'math';
    }
}
var unknownElementCache = Object.create(null);
function isUnknownElement(tag) {
    /* istanbul ignore if */
    if (!inBrowser) {
        return true;
    }
    if (isReservedTag(tag)) {
        return false;
    }
    tag = tag.toLowerCase();
    /* istanbul ignore if */
    if (unknownElementCache[tag] != null) {
        return unknownElementCache[tag];
    }
    var el = document.createElement(tag);
    if (tag.indexOf('-') > -1) {
        // http://stackoverflow.com/a/28210364/1070244
        return (unknownElementCache[tag] =
            el.constructor === window.HTMLUnknownElement ||
                el.constructor === window.HTMLElement);
    }
    else {
        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
    }
}
var isTextInputType = makeMap('text,number,password,search,email,tel,url');

/**
 * Query an element selector if it's not an element already.
 */
function query(el) {
    if (typeof el === 'string') {
        var selected = document.querySelector(el);
        if (!selected) {
            process.env.NODE_ENV !== 'production' && warn('Cannot find element: ' + el);
            return document.createElement('div');
        }
        return selected;
    }
    else {
        return el;
    }
}

function createElement(tagName, vnode) {
    var elm = document.createElement(tagName);
    if (tagName !== 'select') {
        return elm;
    }
    // false or null will remove the attribute but undefined will not
    if (vnode.data &&
        vnode.data.attrs &&
        vnode.data.attrs.multiple !== undefined) {
        elm.setAttribute('multiple', 'multiple');
    }
    return elm;
}
function createElementNS(namespace, tagName) {
    return document.createElementNS(namespaceMap[namespace], tagName);
}
function createTextNode(text) {
    return document.createTextNode(text);
}
function createComment(text) {
    return document.createComment(text);
}
function insertBefore(parentNode, newNode, referenceNode) {
    parentNode.insertBefore(newNode, referenceNode);
}
function removeChild(node, child) {
    node.removeChild(child);
}
function appendChild(node, child) {
    node.appendChild(child);
}
function parentNode(node) {
    return node.parentNode;
}
function nextSibling(node) {
    return node.nextSibling;
}
function tagName(node) {
    return node.tagName;
}
function setTextContent(node, text) {
    node.textContent = text;
}
function setStyleScope(node, scopeId) {
    node.setAttribute(scopeId, '');
}

var nodeOps = /*#__PURE__*/Object.freeze({
  __proto__: null,
  createElement: createElement,
  createElementNS: createElementNS,
  createTextNode: createTextNode,
  createComment: createComment,
  insertBefore: insertBefore,
  removeChild: removeChild,
  appendChild: appendChild,
  parentNode: parentNode,
  nextSibling: nextSibling,
  tagName: tagName,
  setTextContent: setTextContent,
  setStyleScope: setStyleScope
});

var ref = {
    create: function (_, vnode) {
        registerRef(vnode);
    },
    update: function (oldVnode, vnode) {
        if (oldVnode.data.ref !== vnode.data.ref) {
            registerRef(oldVnode, true);
            registerRef(vnode);
        }
    },
    destroy: function (vnode) {
        registerRef(vnode, true);
    }
};
function registerRef(vnode, isRemoval) {
    var ref = vnode.data.ref;
    if (!isDef(ref))
        return;
    var vm = vnode.context;
    var refValue = vnode.componentInstance || vnode.elm;
    var value = isRemoval ? null : refValue;
    var $refsValue = isRemoval ? undefined : refValue;
    if (isFunction(ref)) {
        invokeWithErrorHandling(ref, vm, [value], vm, "template ref function");
        return;
    }
    var isFor = vnode.data.refInFor;
    var _isString = typeof ref === 'string' || typeof ref === 'number';
    var _isRef = isRef(ref);
    var refs = vm.$refs;
    if (_isString || _isRef) {
        if (isFor) {
            var existing = _isString ? refs[ref] : ref.value;
            if (isRemoval) {
                isArray(existing) && remove$2(existing, refValue);
            }
            else {
                if (!isArray(existing)) {
                    if (_isString) {
                        refs[ref] = [refValue];
                        setSetupRef(vm, ref, refs[ref]);
                    }
                    else {
                        ref.value = [refValue];
                    }
                }
                else if (!existing.includes(refValue)) {
                    existing.push(refValue);
                }
            }
        }
        else if (_isString) {
            if (isRemoval && refs[ref] !== refValue) {
                return;
            }
            refs[ref] = $refsValue;
            setSetupRef(vm, ref, value);
        }
        else if (_isRef) {
            if (isRemoval && ref.value !== refValue) {
                return;
            }
            ref.value = value;
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn("Invalid template ref type: ".concat(typeof ref));
        }
    }
}
function setSetupRef(_a, key, val) {
    var _setupState = _a._setupState;
    if (_setupState && hasOwn(_setupState, key)) {
        if (isRef(_setupState[key])) {
            _setupState[key].value = val;
        }
        else {
            _setupState[key] = val;
        }
    }
}

/**
 * Virtual DOM patching algorithm based on Snabbdom by
 * Simon Friis Vindum (@paldepind)
 * Licensed under the MIT License
 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
 *
 * modified by Evan You (@yyx990803)
 *
 * Not type-checking this because this file is perf-critical and the cost
 * of making flow understand it is not worth it.
 */
var emptyNode = new VNode('', {}, []);
var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
function sameVnode(a, b) {
    return (a.key === b.key &&
        a.asyncFactory === b.asyncFactory &&
        ((a.tag === b.tag &&
            a.isComment === b.isComment &&
            isDef(a.data) === isDef(b.data) &&
            sameInputType(a, b)) ||
            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
}
function sameInputType(a, b) {
    if (a.tag !== 'input')
        return true;
    var i;
    var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
    var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
}
function createKeyToOldIdx(children, beginIdx, endIdx) {
    var i, key;
    var map = {};
    for (i = beginIdx; i <= endIdx; ++i) {
        key = children[i].key;
        if (isDef(key))
            map[key] = i;
    }
    return map;
}
function createPatchFunction(backend) {
    var i, j;
    var cbs = {};
    var modules = backend.modules, nodeOps = backend.nodeOps;
    for (i = 0; i < hooks.length; ++i) {
        cbs[hooks[i]] = [];
        for (j = 0; j < modules.length; ++j) {
            if (isDef(modules[j][hooks[i]])) {
                cbs[hooks[i]].push(modules[j][hooks[i]]);
            }
        }
    }
    function emptyNodeAt(elm) {
        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
    }
    function createRmCb(childElm, listeners) {
        function remove() {
            if (--remove.listeners === 0) {
                removeNode(childElm);
            }
        }
        remove.listeners = listeners;
        return remove;
    }
    function removeNode(el) {
        var parent = nodeOps.parentNode(el);
        // element may have already been removed due to v-html / v-text
        if (isDef(parent)) {
            nodeOps.removeChild(parent, el);
        }
    }
    function isUnknownElement(vnode, inVPre) {
        return (!inVPre &&
            !vnode.ns &&
            !(config.ignoredElements.length &&
                config.ignoredElements.some(function (ignore) {
                    return isRegExp(ignore)
                        ? ignore.test(vnode.tag)
                        : ignore === vnode.tag;
                })) &&
            config.isUnknownElement(vnode.tag));
    }
    var creatingElmInVPre = 0;
    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // This vnode was used in a previous render!
            // now it's used as a new node, overwriting its elm would cause
            // potential patch errors down the road when it's used as an insertion
            // reference node. Instead, we clone the node on-demand before creating
            // associated DOM element for it.
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        vnode.isRootInsert = !nested; // for transition enter check
        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
            return;
        }
        var data = vnode.data;
        var children = vnode.children;
        var tag = vnode.tag;
        if (isDef(tag)) {
            if (process.env.NODE_ENV !== 'production') {
                if (data && data.pre) {
                    creatingElmInVPre++;
                }
                if (isUnknownElement(vnode, creatingElmInVPre)) {
                    warn('Unknown custom element: <' +
                        tag +
                        '> - did you ' +
                        'register the component correctly? For recursive components, ' +
                        'make sure to provide the "name" option.', vnode.context);
                }
            }
            vnode.elm = vnode.ns
                ? nodeOps.createElementNS(vnode.ns, tag)
                : nodeOps.createElement(tag, vnode);
            setScope(vnode);
            createChildren(vnode, children, insertedVnodeQueue);
            if (isDef(data)) {
                invokeCreateHooks(vnode, insertedVnodeQueue);
            }
            insert(parentElm, vnode.elm, refElm);
            if (process.env.NODE_ENV !== 'production' && data && data.pre) {
                creatingElmInVPre--;
            }
        }
        else if (isTrue(vnode.isComment)) {
            vnode.elm = nodeOps.createComment(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
        else {
            vnode.elm = nodeOps.createTextNode(vnode.text);
            insert(parentElm, vnode.elm, refElm);
        }
    }
    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        var i = vnode.data;
        if (isDef(i)) {
            var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
            if (isDef((i = i.hook)) && isDef((i = i.init))) {
                i(vnode, false /* hydrating */);
            }
            // after calling the init hook, if the vnode is a child component
            // it should've created a child instance and mounted it. the child
            // component also has set the placeholder vnode's elm.
            // in that case we can just return the element and be done.
            if (isDef(vnode.componentInstance)) {
                initComponent(vnode, insertedVnodeQueue);
                insert(parentElm, vnode.elm, refElm);
                if (isTrue(isReactivated)) {
                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
                }
                return true;
            }
        }
    }
    function initComponent(vnode, insertedVnodeQueue) {
        if (isDef(vnode.data.pendingInsert)) {
            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
            vnode.data.pendingInsert = null;
        }
        vnode.elm = vnode.componentInstance.$el;
        if (isPatchable(vnode)) {
            invokeCreateHooks(vnode, insertedVnodeQueue);
            setScope(vnode);
        }
        else {
            // empty component root.
            // skip all element-related modules except for ref (#3455)
            registerRef(vnode);
            // make sure to invoke the insert hook
            insertedVnodeQueue.push(vnode);
        }
    }
    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
        var i;
        // hack for #4339: a reactivated component with inner transition
        // does not trigger because the inner node's created hooks are not called
        // again. It's not ideal to involve module-specific logic in here but
        // there doesn't seem to be a better way to do it.
        var innerNode = vnode;
        while (innerNode.componentInstance) {
            innerNode = innerNode.componentInstance._vnode;
            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
                for (i = 0; i < cbs.activate.length; ++i) {
                    cbs.activate[i](emptyNode, innerNode);
                }
                insertedVnodeQueue.push(innerNode);
                break;
            }
        }
        // unlike a newly created component,
        // a reactivated keep-alive component doesn't insert itself
        insert(parentElm, vnode.elm, refElm);
    }
    function insert(parent, elm, ref) {
        if (isDef(parent)) {
            if (isDef(ref)) {
                if (nodeOps.parentNode(ref) === parent) {
                    nodeOps.insertBefore(parent, elm, ref);
                }
            }
            else {
                nodeOps.appendChild(parent, elm);
            }
        }
    }
    function createChildren(vnode, children, insertedVnodeQueue) {
        if (isArray(children)) {
            if (process.env.NODE_ENV !== 'production') {
                checkDuplicateKeys(children);
            }
            for (var i_1 = 0; i_1 < children.length; ++i_1) {
                createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);
            }
        }
        else if (isPrimitive(vnode.text)) {
            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
        }
    }
    function isPatchable(vnode) {
        while (vnode.componentInstance) {
            vnode = vnode.componentInstance._vnode;
        }
        return isDef(vnode.tag);
    }
    function invokeCreateHooks(vnode, insertedVnodeQueue) {
        for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {
            cbs.create[i_2](emptyNode, vnode);
        }
        i = vnode.data.hook; // Reuse variable
        if (isDef(i)) {
            if (isDef(i.create))
                i.create(emptyNode, vnode);
            if (isDef(i.insert))
                insertedVnodeQueue.push(vnode);
        }
    }
    // set scope id attribute for scoped CSS.
    // this is implemented as a special case to avoid the overhead
    // of going through the normal attribute patching process.
    function setScope(vnode) {
        var i;
        if (isDef((i = vnode.fnScopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
        else {
            var ancestor = vnode;
            while (ancestor) {
                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
                    nodeOps.setStyleScope(vnode.elm, i);
                }
                ancestor = ancestor.parent;
            }
        }
        // for slot content they should also get the scopeId from the host instance.
        if (isDef((i = activeInstance)) &&
            i !== vnode.context &&
            i !== vnode.fnContext &&
            isDef((i = i.$options._scopeId))) {
            nodeOps.setStyleScope(vnode.elm, i);
        }
    }
    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
        for (; startIdx <= endIdx; ++startIdx) {
            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
        }
    }
    function invokeDestroyHook(vnode) {
        var i, j;
        var data = vnode.data;
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.destroy)))
                i(vnode);
            for (i = 0; i < cbs.destroy.length; ++i)
                cbs.destroy[i](vnode);
        }
        if (isDef((i = vnode.children))) {
            for (j = 0; j < vnode.children.length; ++j) {
                invokeDestroyHook(vnode.children[j]);
            }
        }
    }
    function removeVnodes(vnodes, startIdx, endIdx) {
        for (; startIdx <= endIdx; ++startIdx) {
            var ch = vnodes[startIdx];
            if (isDef(ch)) {
                if (isDef(ch.tag)) {
                    removeAndInvokeRemoveHook(ch);
                    invokeDestroyHook(ch);
                }
                else {
                    // Text node
                    removeNode(ch.elm);
                }
            }
        }
    }
    function removeAndInvokeRemoveHook(vnode, rm) {
        if (isDef(rm) || isDef(vnode.data)) {
            var i_3;
            var listeners = cbs.remove.length + 1;
            if (isDef(rm)) {
                // we have a recursively passed down rm callback
                // increase the listeners count
                rm.listeners += listeners;
            }
            else {
                // directly removing
                rm = createRmCb(vnode.elm, listeners);
            }
            // recursively invoke hooks on child component root node
            if (isDef((i_3 = vnode.componentInstance)) &&
                isDef((i_3 = i_3._vnode)) &&
                isDef(i_3.data)) {
                removeAndInvokeRemoveHook(i_3, rm);
            }
            for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {
                cbs.remove[i_3](vnode, rm);
            }
            if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {
                i_3(vnode, rm);
            }
            else {
                rm();
            }
        }
        else {
            removeNode(vnode.elm);
        }
    }
    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
        var oldStartIdx = 0;
        var newStartIdx = 0;
        var oldEndIdx = oldCh.length - 1;
        var oldStartVnode = oldCh[0];
        var oldEndVnode = oldCh[oldEndIdx];
        var newEndIdx = newCh.length - 1;
        var newStartVnode = newCh[0];
        var newEndVnode = newCh[newEndIdx];
        var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
        // removeOnly is a special flag used only by <transition-group>
        // to ensure removed elements stay in correct relative positions
        // during leaving transitions
        var canMove = !removeOnly;
        if (process.env.NODE_ENV !== 'production') {
            checkDuplicateKeys(newCh);
        }
        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
            if (isUndef(oldStartVnode)) {
                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
            }
            else if (isUndef(oldEndVnode)) {
                oldEndVnode = oldCh[--oldEndIdx];
            }
            else if (sameVnode(oldStartVnode, newStartVnode)) {
                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                oldStartVnode = oldCh[++oldStartIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else if (sameVnode(oldEndVnode, newEndVnode)) {
                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                oldEndVnode = oldCh[--oldEndIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldStartVnode, newEndVnode)) {
                // Vnode moved right
                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
                oldStartVnode = oldCh[++oldStartIdx];
                newEndVnode = newCh[--newEndIdx];
            }
            else if (sameVnode(oldEndVnode, newStartVnode)) {
                // Vnode moved left
                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                canMove &&
                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
                oldEndVnode = oldCh[--oldEndIdx];
                newStartVnode = newCh[++newStartIdx];
            }
            else {
                if (isUndef(oldKeyToIdx))
                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
                idxInOld = isDef(newStartVnode.key)
                    ? oldKeyToIdx[newStartVnode.key]
                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
                if (isUndef(idxInOld)) {
                    // New element
                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                }
                else {
                    vnodeToMove = oldCh[idxInOld];
                    if (sameVnode(vnodeToMove, newStartVnode)) {
                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                        oldCh[idxInOld] = undefined;
                        canMove &&
                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
                    }
                    else {
                        // same key but different element. treat as new element
                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                    }
                }
                newStartVnode = newCh[++newStartIdx];
            }
        }
        if (oldStartIdx > oldEndIdx) {
            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
        }
        else if (newStartIdx > newEndIdx) {
            removeVnodes(oldCh, oldStartIdx, oldEndIdx);
        }
    }
    function checkDuplicateKeys(children) {
        var seenKeys = {};
        for (var i_4 = 0; i_4 < children.length; i_4++) {
            var vnode = children[i_4];
            var key = vnode.key;
            if (isDef(key)) {
                if (seenKeys[key]) {
                    warn("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context);
                }
                else {
                    seenKeys[key] = true;
                }
            }
        }
    }
    function findIdxInOld(node, oldCh, start, end) {
        for (var i_5 = start; i_5 < end; i_5++) {
            var c = oldCh[i_5];
            if (isDef(c) && sameVnode(node, c))
                return i_5;
        }
    }
    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
        if (oldVnode === vnode) {
            return;
        }
        if (isDef(vnode.elm) && isDef(ownerArray)) {
            // clone reused vnode
            vnode = ownerArray[index] = cloneVNode(vnode);
        }
        var elm = (vnode.elm = oldVnode.elm);
        if (isTrue(oldVnode.isAsyncPlaceholder)) {
            if (isDef(vnode.asyncFactory.resolved)) {
                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
            }
            else {
                vnode.isAsyncPlaceholder = true;
            }
            return;
        }
        // reuse element for static trees.
        // note we only do this if the vnode is cloned -
        // if the new node is not cloned it means the render functions have been
        // reset by the hot-reload-api and we need to do a proper re-render.
        if (isTrue(vnode.isStatic) &&
            isTrue(oldVnode.isStatic) &&
            vnode.key === oldVnode.key &&
            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
            vnode.componentInstance = oldVnode.componentInstance;
            return;
        }
        var i;
        var data = vnode.data;
        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
            i(oldVnode, vnode);
        }
        var oldCh = oldVnode.children;
        var ch = vnode.children;
        if (isDef(data) && isPatchable(vnode)) {
            for (i = 0; i < cbs.update.length; ++i)
                cbs.update[i](oldVnode, vnode);
            if (isDef((i = data.hook)) && isDef((i = i.update)))
                i(oldVnode, vnode);
        }
        if (isUndef(vnode.text)) {
            if (isDef(oldCh) && isDef(ch)) {
                if (oldCh !== ch)
                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
            }
            else if (isDef(ch)) {
                if (process.env.NODE_ENV !== 'production') {
                    checkDuplicateKeys(ch);
                }
                if (isDef(oldVnode.text))
                    nodeOps.setTextContent(elm, '');
                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
            }
            else if (isDef(oldCh)) {
                removeVnodes(oldCh, 0, oldCh.length - 1);
            }
            else if (isDef(oldVnode.text)) {
                nodeOps.setTextContent(elm, '');
            }
        }
        else if (oldVnode.text !== vnode.text) {
            nodeOps.setTextContent(elm, vnode.text);
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
                i(oldVnode, vnode);
        }
    }
    function invokeInsertHook(vnode, queue, initial) {
        // delay insert hooks for component root nodes, invoke them after the
        // element is really inserted
        if (isTrue(initial) && isDef(vnode.parent)) {
            vnode.parent.data.pendingInsert = queue;
        }
        else {
            for (var i_6 = 0; i_6 < queue.length; ++i_6) {
                queue[i_6].data.hook.insert(queue[i_6]);
            }
        }
    }
    var hydrationBailed = false;
    // list of modules that can skip create hook during hydration because they
    // are already rendered on the client or has no need for initialization
    // Note: style is excluded because it relies on initial clone for future
    // deep updates (#7063).
    var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
    // Note: this is a browser-only function so we can assume elms are DOM nodes.
    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
        var i;
        var tag = vnode.tag, data = vnode.data, children = vnode.children;
        inVPre = inVPre || (data && data.pre);
        vnode.elm = elm;
        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
            vnode.isAsyncPlaceholder = true;
            return true;
        }
        // assert node match
        if (process.env.NODE_ENV !== 'production') {
            if (!assertNodeMatch(elm, vnode, inVPre)) {
                return false;
            }
        }
        if (isDef(data)) {
            if (isDef((i = data.hook)) && isDef((i = i.init)))
                i(vnode, true /* hydrating */);
            if (isDef((i = vnode.componentInstance))) {
                // child component. it should have hydrated its own tree.
                initComponent(vnode, insertedVnodeQueue);
                return true;
            }
        }
        if (isDef(tag)) {
            if (isDef(children)) {
                // empty element, allow client to pick up and populate children
                if (!elm.hasChildNodes()) {
                    createChildren(vnode, children, insertedVnodeQueue);
                }
                else {
                    // v-html and domProps: innerHTML
                    if (isDef((i = data)) &&
                        isDef((i = i.domProps)) &&
                        isDef((i = i.innerHTML))) {
                        if (i !== elm.innerHTML) {
                            /* istanbul ignore if */
                            if (process.env.NODE_ENV !== 'production' &&
                                typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('server innerHTML: ', i);
                                console.warn('client innerHTML: ', elm.innerHTML);
                            }
                            return false;
                        }
                    }
                    else {
                        // iterate and compare children lists
                        var childrenMatch = true;
                        var childNode = elm.firstChild;
                        for (var i_7 = 0; i_7 < children.length; i_7++) {
                            if (!childNode ||
                                !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {
                                childrenMatch = false;
                                break;
                            }
                            childNode = childNode.nextSibling;
                        }
                        // if childNode is not null, it means the actual childNodes list is
                        // longer than the virtual children list.
                        if (!childrenMatch || childNode) {
                            /* istanbul ignore if */
                            if (process.env.NODE_ENV !== 'production' &&
                                typeof console !== 'undefined' &&
                                !hydrationBailed) {
                                hydrationBailed = true;
                                console.warn('Parent: ', elm);
                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
                            }
                            return false;
                        }
                    }
                }
            }
            if (isDef(data)) {
                var fullInvoke = false;
                for (var key in data) {
                    if (!isRenderedModule(key)) {
                        fullInvoke = true;
                        invokeCreateHooks(vnode, insertedVnodeQueue);
                        break;
                    }
                }
                if (!fullInvoke && data['class']) {
                    // ensure collecting deps for deep class bindings for future updates
                    traverse(data['class']);
                }
            }
        }
        else if (elm.data !== vnode.text) {
            elm.data = vnode.text;
        }
        return true;
    }
    function assertNodeMatch(node, vnode, inVPre) {
        if (isDef(vnode.tag)) {
            return (vnode.tag.indexOf('vue-component') === 0 ||
                (!isUnknownElement(vnode, inVPre) &&
                    vnode.tag.toLowerCase() ===
                        (node.tagName && node.tagName.toLowerCase())));
        }
        else {
            return node.nodeType === (vnode.isComment ? 8 : 3);
        }
    }
    return function patch(oldVnode, vnode, hydrating, removeOnly) {
        if (isUndef(vnode)) {
            if (isDef(oldVnode))
                invokeDestroyHook(oldVnode);
            return;
        }
        var isInitialPatch = false;
        var insertedVnodeQueue = [];
        if (isUndef(oldVnode)) {
            // empty mount (likely as component), create new root element
            isInitialPatch = true;
            createElm(vnode, insertedVnodeQueue);
        }
        else {
            var isRealElement = isDef(oldVnode.nodeType);
            if (!isRealElement && sameVnode(oldVnode, vnode)) {
                // patch existing root node
                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
            }
            else {
                if (isRealElement) {
                    // mounting to a real element
                    // check if this is server-rendered content and if we can perform
                    // a successful hydration.
                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
                        oldVnode.removeAttribute(SSR_ATTR);
                        hydrating = true;
                    }
                    if (isTrue(hydrating)) {
                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
                            invokeInsertHook(vnode, insertedVnodeQueue, true);
                            return oldVnode;
                        }
                        else if (process.env.NODE_ENV !== 'production') {
                            warn('The client-side rendered virtual DOM tree is not matching ' +
                                'server-rendered content. This is likely caused by incorrect ' +
                                'HTML markup, for example nesting block-level elements inside ' +
                                '<p>, or missing <tbody>. Bailing hydration and performing ' +
                                'full client-side render.');
                        }
                    }
                    // either not server-rendered, or hydration failed.
                    // create an empty node and replace it
                    oldVnode = emptyNodeAt(oldVnode);
                }
                // replacing existing element
                var oldElm = oldVnode.elm;
                var parentElm = nodeOps.parentNode(oldElm);
                // create new node
                createElm(vnode, insertedVnodeQueue, 
                // extremely rare edge case: do not insert if old element is in a
                // leaving transition. Only happens when combining transition +
                // keep-alive + HOCs. (#4590)
                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
                // update parent placeholder node element, recursively
                if (isDef(vnode.parent)) {
                    var ancestor = vnode.parent;
                    var patchable = isPatchable(vnode);
                    while (ancestor) {
                        for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {
                            cbs.destroy[i_8](ancestor);
                        }
                        ancestor.elm = vnode.elm;
                        if (patchable) {
                            for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {
                                cbs.create[i_9](emptyNode, ancestor);
                            }
                            // #6513
                            // invoke insert hooks that may have been merged by create hooks.
                            // e.g. for directives that uses the "inserted" hook.
                            var insert_1 = ancestor.data.hook.insert;
                            if (insert_1.merged) {
                                // start at index 1 to avoid re-invoking component mounted hook
                                for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) {
                                    insert_1.fns[i_10]();
                                }
                            }
                        }
                        else {
                            registerRef(ancestor);
                        }
                        ancestor = ancestor.parent;
                    }
                }
                // destroy old node
                if (isDef(parentElm)) {
                    removeVnodes([oldVnode], 0, 0);
                }
                else if (isDef(oldVnode.tag)) {
                    invokeDestroyHook(oldVnode);
                }
            }
        }
        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
        return vnode.elm;
    };
}

var directives = {
    create: updateDirectives,
    update: updateDirectives,
    destroy: function unbindDirectives(vnode) {
        // @ts-expect-error emptyNode is not VNodeWithData
        updateDirectives(vnode, emptyNode);
    }
};
function updateDirectives(oldVnode, vnode) {
    if (oldVnode.data.directives || vnode.data.directives) {
        _update(oldVnode, vnode);
    }
}
function _update(oldVnode, vnode) {
    var isCreate = oldVnode === emptyNode;
    var isDestroy = vnode === emptyNode;
    var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
    var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
    var dirsWithInsert = [];
    var dirsWithPostpatch = [];
    var key, oldDir, dir;
    for (key in newDirs) {
        oldDir = oldDirs[key];
        dir = newDirs[key];
        if (!oldDir) {
            // new directive, bind
            callHook(dir, 'bind', vnode, oldVnode);
            if (dir.def && dir.def.inserted) {
                dirsWithInsert.push(dir);
            }
        }
        else {
            // existing directive, update
            dir.oldValue = oldDir.value;
            dir.oldArg = oldDir.arg;
            callHook(dir, 'update', vnode, oldVnode);
            if (dir.def && dir.def.componentUpdated) {
                dirsWithPostpatch.push(dir);
            }
        }
    }
    if (dirsWithInsert.length) {
        var callInsert = function () {
            for (var i = 0; i < dirsWithInsert.length; i++) {
                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
            }
        };
        if (isCreate) {
            mergeVNodeHook(vnode, 'insert', callInsert);
        }
        else {
            callInsert();
        }
    }
    if (dirsWithPostpatch.length) {
        mergeVNodeHook(vnode, 'postpatch', function () {
            for (var i = 0; i < dirsWithPostpatch.length; i++) {
                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
            }
        });
    }
    if (!isCreate) {
        for (key in oldDirs) {
            if (!newDirs[key]) {
                // no longer present, unbind
                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
            }
        }
    }
}
var emptyModifiers = Object.create(null);
function normalizeDirectives(dirs, vm) {
    var res = Object.create(null);
    if (!dirs) {
        // $flow-disable-line
        return res;
    }
    var i, dir;
    for (i = 0; i < dirs.length; i++) {
        dir = dirs[i];
        if (!dir.modifiers) {
            // $flow-disable-line
            dir.modifiers = emptyModifiers;
        }
        res[getRawDirName(dir)] = dir;
        if (vm._setupState && vm._setupState.__sfc) {
            var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
            if (typeof setupDef === 'function') {
                dir.def = {
                    bind: setupDef,
                    update: setupDef,
                };
            }
            else {
                dir.def = setupDef;
            }
        }
        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
    }
    // $flow-disable-line
    return res;
}
function getRawDirName(dir) {
    return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.')));
}
function callHook(dir, hook, vnode, oldVnode, isDestroy) {
    var fn = dir.def && dir.def[hook];
    if (fn) {
        try {
            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
        }
        catch (e) {
            handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook"));
        }
    }
}

var baseModules = [ref, directives];

function updateAttrs(oldVnode, vnode) {
    var opts = vnode.componentOptions;
    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
        return;
    }
    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
        return;
    }
    var key, cur, old;
    var elm = vnode.elm;
    var oldAttrs = oldVnode.data.attrs || {};
    var attrs = vnode.data.attrs || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
        attrs = vnode.data.attrs = extend({}, attrs);
    }
    for (key in attrs) {
        cur = attrs[key];
        old = oldAttrs[key];
        if (old !== cur) {
            setAttr(elm, key, cur, vnode.data.pre);
        }
    }
    // #4391: in IE9, setting type can reset value for input[type=radio]
    // #6666: IE/Edge forces progress value down to 1 before setting a max
    /* istanbul ignore if */
    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
        setAttr(elm, 'value', attrs.value);
    }
    for (key in oldAttrs) {
        if (isUndef(attrs[key])) {
            if (isXlink(key)) {
                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
            }
            else if (!isEnumeratedAttr(key)) {
                elm.removeAttribute(key);
            }
        }
    }
}
function setAttr(el, key, value, isInPre) {
    if (isInPre || el.tagName.indexOf('-') > -1) {
        baseSetAttr(el, key, value);
    }
    else if (isBooleanAttr(key)) {
        // set attribute for blank value
        // e.g. <option disabled>Select one</option>
        if (isFalsyAttrValue(value)) {
            el.removeAttribute(key);
        }
        else {
            // technically allowfullscreen is a boolean attribute for <iframe>,
            // but Flash expects a value of "true" when used on <embed> tag
            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
            el.setAttribute(key, value);
        }
    }
    else if (isEnumeratedAttr(key)) {
        el.setAttribute(key, convertEnumeratedValue(key, value));
    }
    else if (isXlink(key)) {
        if (isFalsyAttrValue(value)) {
            el.removeAttributeNS(xlinkNS, getXlinkProp(key));
        }
        else {
            el.setAttributeNS(xlinkNS, key, value);
        }
    }
    else {
        baseSetAttr(el, key, value);
    }
}
function baseSetAttr(el, key, value) {
    if (isFalsyAttrValue(value)) {
        el.removeAttribute(key);
    }
    else {
        // #7138: IE10 & 11 fires input event when setting placeholder on
        // <textarea>... block the first input event and remove the blocker
        // immediately.
        /* istanbul ignore if */
        if (isIE &&
            !isIE9 &&
            el.tagName === 'TEXTAREA' &&
            key === 'placeholder' &&
            value !== '' &&
            !el.__ieph) {
            var blocker_1 = function (e) {
                e.stopImmediatePropagation();
                el.removeEventListener('input', blocker_1);
            };
            el.addEventListener('input', blocker_1);
            // $flow-disable-line
            el.__ieph = true; /* IE placeholder patched */
        }
        el.setAttribute(key, value);
    }
}
var attrs = {
    create: updateAttrs,
    update: updateAttrs
};

function updateClass(oldVnode, vnode) {
    var el = vnode.elm;
    var data = vnode.data;
    var oldData = oldVnode.data;
    if (isUndef(data.staticClass) &&
        isUndef(data.class) &&
        (isUndef(oldData) ||
            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
        return;
    }
    var cls = genClassForVnode(vnode);
    // handle transition classes
    var transitionClass = el._transitionClasses;
    if (isDef(transitionClass)) {
        cls = concat(cls, stringifyClass(transitionClass));
    }
    // set the class
    if (cls !== el._prevClass) {
        el.setAttribute('class', cls);
        el._prevClass = cls;
    }
}
var klass = {
    create: updateClass,
    update: updateClass
};

// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
var RANGE_TOKEN = '__r';
var CHECKBOX_RADIO_TOKEN = '__c';

// normalize v-model event tokens that can only be determined at runtime.
// it's important to place the event as the first in the array because
// the whole point is ensuring the v-model callback gets called before
// user-attached handlers.
function normalizeEvents(on) {
    /* istanbul ignore if */
    if (isDef(on[RANGE_TOKEN])) {
        // IE input[type=range] only supports `change` event
        var event_1 = isIE ? 'change' : 'input';
        on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);
        delete on[RANGE_TOKEN];
    }
    // This was originally intended to fix #4521 but no longer necessary
    // after 2.5. Keeping it for backwards compat with generated code from < 2.4
    /* istanbul ignore if */
    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
        delete on[CHECKBOX_RADIO_TOKEN];
    }
}
var target;
function createOnceHandler(event, handler, capture) {
    var _target = target; // save current target element in closure
    return function onceHandler() {
        var res = handler.apply(null, arguments);
        if (res !== null) {
            remove(event, onceHandler, capture, _target);
        }
    };
}
// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
// implementation and does not fire microtasks in between event propagation, so
// safe to exclude.
var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
function add(name, handler, capture, passive) {
    // async edge case #6566: inner click event triggers patch, event handler
    // attached to outer element during patch, and triggered again. This
    // happens because browsers fire microtask ticks between event propagation.
    // the solution is simple: we save the timestamp when a handler is attached,
    // and the handler would only fire if the event passed to it was fired
    // AFTER it was attached.
    if (useMicrotaskFix) {
        var attachedTimestamp_1 = currentFlushTimestamp;
        var original_1 = handler;
        //@ts-expect-error
        handler = original_1._wrapper = function (e) {
            if (
            // no bubbling, should always fire.
            // this is just a safety net in case event.timeStamp is unreliable in
            // certain weird environments...
            e.target === e.currentTarget ||
                // event is fired after handler attachment
                e.timeStamp >= attachedTimestamp_1 ||
                // bail for environments that have buggy event.timeStamp implementations
                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
                // #9681 QtWebEngine event.timeStamp is negative value
                e.timeStamp <= 0 ||
                // #9448 bail if event is fired in another document in a multi-page
                // electron/nw.js app, since event.timeStamp will be using a different
                // starting reference
                e.target.ownerDocument !== document) {
                return original_1.apply(this, arguments);
            }
        };
    }
    target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);
}
function remove(name, handler, capture, _target) {
    (_target || target).removeEventListener(name, 
    //@ts-expect-error
    handler._wrapper || handler, capture);
}
function updateDOMListeners(oldVnode, vnode) {
    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
        return;
    }
    var on = vnode.data.on || {};
    var oldOn = oldVnode.data.on || {};
    // vnode is empty when removing all listeners,
    // and use old vnode dom element
    target = vnode.elm || oldVnode.elm;
    normalizeEvents(on);
    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
    target = undefined;
}
var events = {
    create: updateDOMListeners,
    update: updateDOMListeners,
    // @ts-expect-error emptyNode has actually data
    destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }
};

var svgContainer;
function updateDOMProps(oldVnode, vnode) {
    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
        return;
    }
    var key, cur;
    var elm = vnode.elm;
    var oldProps = oldVnode.data.domProps || {};
    var props = vnode.data.domProps || {};
    // clone observed objects, as the user probably wants to mutate it
    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
        props = vnode.data.domProps = extend({}, props);
    }
    for (key in oldProps) {
        if (!(key in props)) {
            elm[key] = '';
        }
    }
    for (key in props) {
        cur = props[key];
        // ignore children if the node has textContent or innerHTML,
        // as these will throw away existing DOM nodes and cause removal errors
        // on subsequent patches (#3360)
        if (key === 'textContent' || key === 'innerHTML') {
            if (vnode.children)
                vnode.children.length = 0;
            if (cur === oldProps[key])
                continue;
            // #6601 work around Chrome version <= 55 bug where single textNode
            // replaced by innerHTML/textContent retains its parentNode property
            if (elm.childNodes.length === 1) {
                elm.removeChild(elm.childNodes[0]);
            }
        }
        if (key === 'value' && elm.tagName !== 'PROGRESS') {
            // store value as _value as well since
            // non-string values will be stringified
            elm._value = cur;
            // avoid resetting cursor position when value is the same
            var strCur = isUndef(cur) ? '' : String(cur);
            if (shouldUpdateValue(elm, strCur)) {
                elm.value = strCur;
            }
        }
        else if (key === 'innerHTML' &&
            isSVG(elm.tagName) &&
            isUndef(elm.innerHTML)) {
            // IE doesn't support innerHTML for SVG elements
            svgContainer = svgContainer || document.createElement('div');
            svgContainer.innerHTML = "<svg>".concat(cur, "</svg>");
            var svg = svgContainer.firstChild;
            while (elm.firstChild) {
                elm.removeChild(elm.firstChild);
            }
            while (svg.firstChild) {
                elm.appendChild(svg.firstChild);
            }
        }
        else if (
        // skip the update if old and new VDOM state is the same.
        // `value` is handled separately because the DOM value may be temporarily
        // out of sync with VDOM state due to focus, composition and modifiers.
        // This  #4521 by skipping the unnecessary `checked` update.
        cur !== oldProps[key]) {
            // some property updates can throw
            // e.g. `value` on <progress> w/ non-finite value
            try {
                elm[key] = cur;
            }
            catch (e) { }
        }
    }
}
function shouldUpdateValue(elm, checkVal) {
    return (
    //@ts-expect-error
    !elm.composing &&
        (elm.tagName === 'OPTION' ||
            isNotInFocusAndDirty(elm, checkVal) ||
            isDirtyWithModifiers(elm, checkVal)));
}
function isNotInFocusAndDirty(elm, checkVal) {
    // return true when textbox (.number and .trim) loses focus and its value is
    // not equal to the updated value
    var notInFocus = true;
    // #6157
    // work around IE bug when accessing document.activeElement in an iframe
    try {
        notInFocus = document.activeElement !== elm;
    }
    catch (e) { }
    return notInFocus && elm.value !== checkVal;
}
function isDirtyWithModifiers(elm, newVal) {
    var value = elm.value;
    var modifiers = elm._vModifiers; // injected by v-model runtime
    if (isDef(modifiers)) {
        if (modifiers.number) {
            return toNumber(value) !== toNumber(newVal);
        }
        if (modifiers.trim) {
            return value.trim() !== newVal.trim();
        }
    }
    return value !== newVal;
}
var domProps = {
    create: updateDOMProps,
    update: updateDOMProps
};

var parseStyleText = cached(function (cssText) {
    var res = {};
    var listDelimiter = /;(?![^(]*\))/g;
    var propertyDelimiter = /:(.+)/;
    cssText.split(listDelimiter).forEach(function (item) {
        if (item) {
            var tmp = item.split(propertyDelimiter);
            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return res;
});
// merge static and dynamic style data on the same vnode
function normalizeStyleData(data) {
    var style = normalizeStyleBinding(data.style);
    // static style is pre-processed into an object during compilation
    // and is always a fresh object, so it's safe to merge into it
    return data.staticStyle ? extend(data.staticStyle, style) : style;
}
// normalize possible array / string values into Object
function normalizeStyleBinding(bindingStyle) {
    if (Array.isArray(bindingStyle)) {
        return toObject(bindingStyle);
    }
    if (typeof bindingStyle === 'string') {
        return parseStyleText(bindingStyle);
    }
    return bindingStyle;
}
/**
 * parent component style should be after child's
 * so that parent component's style could override it
 */
function getStyle(vnode, checkChild) {
    var res = {};
    var styleData;
    if (checkChild) {
        var childNode = vnode;
        while (childNode.componentInstance) {
            childNode = childNode.componentInstance._vnode;
            if (childNode &&
                childNode.data &&
                (styleData = normalizeStyleData(childNode.data))) {
                extend(res, styleData);
            }
        }
    }
    if ((styleData = normalizeStyleData(vnode.data))) {
        extend(res, styleData);
    }
    var parentNode = vnode;
    // @ts-expect-error parentNode.parent not VNodeWithData
    while ((parentNode = parentNode.parent)) {
        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
            extend(res, styleData);
        }
    }
    return res;
}

var cssVarRE = /^--/;
var importantRE = /\s*!important$/;
var setProp = function (el, name, val) {
    /* istanbul ignore if */
    if (cssVarRE.test(name)) {
        el.style.setProperty(name, val);
    }
    else if (importantRE.test(val)) {
        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
    }
    else {
        var normalizedName = normalize(name);
        if (Array.isArray(val)) {
            // Support values array created by autoprefixer, e.g.
            // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
            // Set them one by one, and the browser will only set those it can recognize
            for (var i = 0, len = val.length; i < len; i++) {
                el.style[normalizedName] = val[i];
            }
        }
        else {
            el.style[normalizedName] = val;
        }
    }
};
var vendorNames = ['Webkit', 'Moz', 'ms'];
var emptyStyle;
var normalize = cached(function (prop) {
    emptyStyle = emptyStyle || document.createElement('div').style;
    prop = camelize(prop);
    if (prop !== 'filter' && prop in emptyStyle) {
        return prop;
    }
    var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
    for (var i = 0; i < vendorNames.length; i++) {
        var name_1 = vendorNames[i] + capName;
        if (name_1 in emptyStyle) {
            return name_1;
        }
    }
});
function updateStyle(oldVnode, vnode) {
    var data = vnode.data;
    var oldData = oldVnode.data;
    if (isUndef(data.staticStyle) &&
        isUndef(data.style) &&
        isUndef(oldData.staticStyle) &&
        isUndef(oldData.style)) {
        return;
    }
    var cur, name;
    var el = vnode.elm;
    var oldStaticStyle = oldData.staticStyle;
    var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
    // if static style exists, stylebinding already merged into it when doing normalizeStyleData
    var oldStyle = oldStaticStyle || oldStyleBinding;
    var style = normalizeStyleBinding(vnode.data.style) || {};
    // store normalized style under a different key for next diff
    // make sure to clone it if it's reactive, since the user likely wants
    // to mutate it.
    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
    var newStyle = getStyle(vnode, true);
    for (name in oldStyle) {
        if (isUndef(newStyle[name])) {
            setProp(el, name, '');
        }
    }
    for (name in newStyle) {
        cur = newStyle[name];
        if (cur !== oldStyle[name]) {
            // ie9 setting to null has no effect, must use empty string
            setProp(el, name, cur == null ? '' : cur);
        }
    }
}
var style = {
    create: updateStyle,
    update: updateStyle
};

var whitespaceRE = /\s+/;
/**
 * Add class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function addClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });
        }
        else {
            el.classList.add(cls);
        }
    }
    else {
        var cur = " ".concat(el.getAttribute('class') || '', " ");
        if (cur.indexOf(' ' + cls + ' ') < 0) {
            el.setAttribute('class', (cur + cls).trim());
        }
    }
}
/**
 * Remove class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
function removeClass(el, cls) {
    /* istanbul ignore if */
    if (!cls || !(cls = cls.trim())) {
        return;
    }
    /* istanbul ignore else */
    if (el.classList) {
        if (cls.indexOf(' ') > -1) {
            cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });
        }
        else {
            el.classList.remove(cls);
        }
        if (!el.classList.length) {
            el.removeAttribute('class');
        }
    }
    else {
        var cur = " ".concat(el.getAttribute('class') || '', " ");
        var tar = ' ' + cls + ' ';
        while (cur.indexOf(tar) >= 0) {
            cur = cur.replace(tar, ' ');
        }
        cur = cur.trim();
        if (cur) {
            el.setAttribute('class', cur);
        }
        else {
            el.removeAttribute('class');
        }
    }
}

function resolveTransition(def) {
    if (!def) {
        return;
    }
    /* istanbul ignore else */
    if (typeof def === 'object') {
        var res = {};
        if (def.css !== false) {
            extend(res, autoCssTransition(def.name || 'v'));
        }
        extend(res, def);
        return res;
    }
    else if (typeof def === 'string') {
        return autoCssTransition(def);
    }
}
var autoCssTransition = cached(function (name) {
    return {
        enterClass: "".concat(name, "-enter"),
        enterToClass: "".concat(name, "-enter-to"),
        enterActiveClass: "".concat(name, "-enter-active"),
        leaveClass: "".concat(name, "-leave"),
        leaveToClass: "".concat(name, "-leave-to"),
        leaveActiveClass: "".concat(name, "-leave-active")
    };
});
var hasTransition = inBrowser && !isIE9;
var TRANSITION = 'transition';
var ANIMATION = 'animation';
// Transition property/event sniffing
var transitionProp = 'transition';
var transitionEndEvent = 'transitionend';
var animationProp = 'animation';
var animationEndEvent = 'animationend';
if (hasTransition) {
    /* istanbul ignore if */
    if (window.ontransitionend === undefined &&
        window.onwebkittransitionend !== undefined) {
        transitionProp = 'WebkitTransition';
        transitionEndEvent = 'webkitTransitionEnd';
    }
    if (window.onanimationend === undefined &&
        window.onwebkitanimationend !== undefined) {
        animationProp = 'WebkitAnimation';
        animationEndEvent = 'webkitAnimationEnd';
    }
}
// binding to window is necessary to make hot reload work in IE in strict mode
var raf = inBrowser
    ? window.requestAnimationFrame
        ? window.requestAnimationFrame.bind(window)
        : setTimeout
    : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };
function nextFrame(fn) {
    raf(function () {
        // @ts-expect-error
        raf(fn);
    });
}
function addTransitionClass(el, cls) {
    var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
    if (transitionClasses.indexOf(cls) < 0) {
        transitionClasses.push(cls);
        addClass(el, cls);
    }
}
function removeTransitionClass(el, cls) {
    if (el._transitionClasses) {
        remove$2(el._transitionClasses, cls);
    }
    removeClass(el, cls);
}
function whenTransitionEnds(el, expectedType, cb) {
    var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;
    if (!type)
        return cb();
    var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
    var ended = 0;
    var end = function () {
        el.removeEventListener(event, onEnd);
        cb();
    };
    var onEnd = function (e) {
        if (e.target === el) {
            if (++ended >= propCount) {
                end();
            }
        }
    };
    setTimeout(function () {
        if (ended < propCount) {
            end();
        }
    }, timeout + 1);
    el.addEventListener(event, onEnd);
}
var transformRE = /\b(transform|all)(,|$)/;
function getTransitionInfo(el, expectedType) {
    var styles = window.getComputedStyle(el);
    // JSDOM may return undefined for transition properties
    var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
    var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
    var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
    var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
    var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
    var animationTimeout = getTimeout(animationDelays, animationDurations);
    var type;
    var timeout = 0;
    var propCount = 0;
    /* istanbul ignore if */
    if (expectedType === TRANSITION) {
        if (transitionTimeout > 0) {
            type = TRANSITION;
            timeout = transitionTimeout;
            propCount = transitionDurations.length;
        }
    }
    else if (expectedType === ANIMATION) {
        if (animationTimeout > 0) {
            type = ANIMATION;
            timeout = animationTimeout;
            propCount = animationDurations.length;
        }
    }
    else {
        timeout = Math.max(transitionTimeout, animationTimeout);
        type =
            timeout > 0
                ? transitionTimeout > animationTimeout
                    ? TRANSITION
                    : ANIMATION
                : null;
        propCount = type
            ? type === TRANSITION
                ? transitionDurations.length
                : animationDurations.length
            : 0;
    }
    var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
    return {
        type: type,
        timeout: timeout,
        propCount: propCount,
        hasTransform: hasTransform
    };
}
function getTimeout(delays, durations) {
    /* istanbul ignore next */
    while (delays.length < durations.length) {
        delays = delays.concat(delays);
    }
    return Math.max.apply(null, durations.map(function (d, i) {
        return toMs(d) + toMs(delays[i]);
    }));
}
// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
// in a locale-dependent way, using a comma instead of a dot.
// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
// as a floor function) causing unexpected behaviors
function toMs(s) {
    return Number(s.slice(0, -1).replace(',', '.')) * 1000;
}

function enter(vnode, toggleDisplay) {
    var el = vnode.elm;
    // call leave callback now
    if (isDef(el._leaveCb)) {
        el._leaveCb.cancelled = true;
        el._leaveCb();
    }
    var data = resolveTransition(vnode.data.transition);
    if (isUndef(data)) {
        return;
    }
    /* istanbul ignore if */
    if (isDef(el._enterCb) || el.nodeType !== 1) {
        return;
    }
    var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;
    // activeInstance will always be the <transition> component managing this
    // transition. One edge case to check is when the <transition> is placed
    // as the root node of a child component. In that case we need to check
    // <transition>'s parent for appear check.
    var context = activeInstance;
    var transitionNode = activeInstance.$vnode;
    while (transitionNode && transitionNode.parent) {
        context = transitionNode.context;
        transitionNode = transitionNode.parent;
    }
    var isAppear = !context._isMounted || !vnode.isRootInsert;
    if (isAppear && !appear && appear !== '') {
        return;
    }
    var startClass = isAppear && appearClass ? appearClass : enterClass;
    var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
    var toClass = isAppear && appearToClass ? appearToClass : enterToClass;
    var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
    var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
    var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
    var enterCancelledHook = isAppear
        ? appearCancelled || enterCancelled
        : enterCancelled;
    var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
    if (process.env.NODE_ENV !== 'production' && explicitEnterDuration != null) {
        checkDuration(explicitEnterDuration, 'enter', vnode);
    }
    var expectsCSS = css !== false && !isIE9;
    var userWantsControl = getHookArgumentsLength(enterHook);
    var cb = (el._enterCb = once(function () {
        if (expectsCSS) {
            removeTransitionClass(el, toClass);
            removeTransitionClass(el, activeClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, startClass);
            }
            enterCancelledHook && enterCancelledHook(el);
        }
        else {
            afterEnterHook && afterEnterHook(el);
        }
        el._enterCb = null;
    }));
    if (!vnode.data.show) {
        // remove pending leave element on enter by injecting an insert hook
        mergeVNodeHook(vnode, 'insert', function () {
            var parent = el.parentNode;
            var pendingNode = parent && parent._pending && parent._pending[vnode.key];
            if (pendingNode &&
                pendingNode.tag === vnode.tag &&
                pendingNode.elm._leaveCb) {
                pendingNode.elm._leaveCb();
            }
            enterHook && enterHook(el, cb);
        });
    }
    // start enter transition
    beforeEnterHook && beforeEnterHook(el);
    if (expectsCSS) {
        addTransitionClass(el, startClass);
        addTransitionClass(el, activeClass);
        nextFrame(function () {
            removeTransitionClass(el, startClass);
            // @ts-expect-error
            if (!cb.cancelled) {
                addTransitionClass(el, toClass);
                if (!userWantsControl) {
                    if (isValidDuration(explicitEnterDuration)) {
                        setTimeout(cb, explicitEnterDuration);
                    }
                    else {
                        whenTransitionEnds(el, type, cb);
                    }
                }
            }
        });
    }
    if (vnode.data.show) {
        toggleDisplay && toggleDisplay();
        enterHook && enterHook(el, cb);
    }
    if (!expectsCSS && !userWantsControl) {
        cb();
    }
}
function leave(vnode, rm) {
    var el = vnode.elm;
    // call enter callback now
    if (isDef(el._enterCb)) {
        el._enterCb.cancelled = true;
        el._enterCb();
    }
    var data = resolveTransition(vnode.data.transition);
    if (isUndef(data) || el.nodeType !== 1) {
        return rm();
    }
    /* istanbul ignore if */
    if (isDef(el._leaveCb)) {
        return;
    }
    var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;
    var expectsCSS = css !== false && !isIE9;
    var userWantsControl = getHookArgumentsLength(leave);
    var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
    if (process.env.NODE_ENV !== 'production' && isDef(explicitLeaveDuration)) {
        checkDuration(explicitLeaveDuration, 'leave', vnode);
    }
    var cb = (el._leaveCb = once(function () {
        if (el.parentNode && el.parentNode._pending) {
            el.parentNode._pending[vnode.key] = null;
        }
        if (expectsCSS) {
            removeTransitionClass(el, leaveToClass);
            removeTransitionClass(el, leaveActiveClass);
        }
        // @ts-expect-error
        if (cb.cancelled) {
            if (expectsCSS) {
                removeTransitionClass(el, leaveClass);
            }
            leaveCancelled && leaveCancelled(el);
        }
        else {
            rm();
            afterLeave && afterLeave(el);
        }
        el._leaveCb = null;
    }));
    if (delayLeave) {
        delayLeave(performLeave);
    }
    else {
        performLeave();
    }
    function performLeave() {
        // the delayed leave may have already been cancelled
        // @ts-expect-error
        if (cb.cancelled) {
            return;
        }
        // record leaving element
        if (!vnode.data.show && el.parentNode) {
            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
                vnode;
        }
        beforeLeave && beforeLeave(el);
        if (expectsCSS) {
            addTransitionClass(el, leaveClass);
            addTransitionClass(el, leaveActiveClass);
            nextFrame(function () {
                removeTransitionClass(el, leaveClass);
                // @ts-expect-error
                if (!cb.cancelled) {
                    addTransitionClass(el, leaveToClass);
                    if (!userWantsControl) {
                        if (isValidDuration(explicitLeaveDuration)) {
                            setTimeout(cb, explicitLeaveDuration);
                        }
                        else {
                            whenTransitionEnds(el, type, cb);
                        }
                    }
                }
            });
        }
        leave && leave(el, cb);
        if (!expectsCSS && !userWantsControl) {
            cb();
        }
    }
}
// only used in dev mode
function checkDuration(val, name, vnode) {
    if (typeof val !== 'number') {
        warn("<transition> explicit ".concat(name, " duration is not a valid number - ") +
            "got ".concat(JSON.stringify(val), "."), vnode.context);
    }
    else if (isNaN(val)) {
        warn("<transition> explicit ".concat(name, " duration is NaN - ") +
            'the duration expression might be incorrect.', vnode.context);
    }
}
function isValidDuration(val) {
    return typeof val === 'number' && !isNaN(val);
}
/**
 * Normalize a transition hook's argument length. The hook may be:
 * - a merged hook (invoker) with the original in .fns
 * - a wrapped component method (check ._length)
 * - a plain function (.length)
 */
function getHookArgumentsLength(fn) {
    if (isUndef(fn)) {
        return false;
    }
    // @ts-expect-error
    var invokerFns = fn.fns;
    if (isDef(invokerFns)) {
        // invoker
        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
    }
    else {
        // @ts-expect-error
        return (fn._length || fn.length) > 1;
    }
}
function _enter(_, vnode) {
    if (vnode.data.show !== true) {
        enter(vnode);
    }
}
var transition = inBrowser
    ? {
        create: _enter,
        activate: _enter,
        remove: function (vnode, rm) {
            /* istanbul ignore else */
            if (vnode.data.show !== true) {
                // @ts-expect-error
                leave(vnode, rm);
            }
            else {
                rm();
            }
        }
    }
    : {};

var platformModules = [attrs, klass, events, domProps, style, transition];

// the directive module should be applied last, after all
// built-in modules have been applied.
var modules = platformModules.concat(baseModules);
var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });

/**
 * Not type checking this file because flow doesn't like attaching
 * properties to Elements.
 */
/* istanbul ignore if */
if (isIE9) {
    // http://www.matts411.com/post/internet-explorer-9-oninput/
    document.addEventListener('selectionchange', function () {
        var el = document.activeElement;
        // @ts-expect-error
        if (el && el.vmodel) {
            trigger(el, 'input');
        }
    });
}
var directive = {
    inserted: function (el, binding, vnode, oldVnode) {
        if (vnode.tag === 'select') {
            // #6903
            if (oldVnode.elm && !oldVnode.elm._vOptions) {
                mergeVNodeHook(vnode, 'postpatch', function () {
                    directive.componentUpdated(el, binding, vnode);
                });
            }
            else {
                setSelected(el, binding, vnode.context);
            }
            el._vOptions = [].map.call(el.options, getValue);
        }
        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
            el._vModifiers = binding.modifiers;
            if (!binding.modifiers.lazy) {
                el.addEventListener('compositionstart', onCompositionStart);
                el.addEventListener('compositionend', onCompositionEnd);
                // Safari < 10.2 & UIWebView doesn't fire compositionend when
                // switching focus before confirming composition choice
                // this also fixes the issue where some browsers e.g. iOS Chrome
                // fires "change" instead of "input" on autocomplete.
                el.addEventListener('change', onCompositionEnd);
                /* istanbul ignore if */
                if (isIE9) {
                    el.vmodel = true;
                }
            }
        }
    },
    componentUpdated: function (el, binding, vnode) {
        if (vnode.tag === 'select') {
            setSelected(el, binding, vnode.context);
            // in case the options rendered by v-for have changed,
            // it's possible that the value is out-of-sync with the rendered options.
            // detect such cases and filter out values that no longer has a matching
            // option in the DOM.
            var prevOptions_1 = el._vOptions;
            var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));
            if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {
                // trigger change event if
                // no matching option found for at least one value
                var needReset = el.multiple
                    ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })
                    : binding.value !== binding.oldValue &&
                        hasNoMatchingOption(binding.value, curOptions_1);
                if (needReset) {
                    trigger(el, 'change');
                }
            }
        }
    }
};
function setSelected(el, binding, vm) {
    actuallySetSelected(el, binding, vm);
    /* istanbul ignore if */
    if (isIE || isEdge) {
        setTimeout(function () {
            actuallySetSelected(el, binding, vm);
        }, 0);
    }
}
function actuallySetSelected(el, binding, vm) {
    var value = binding.value;
    var isMultiple = el.multiple;
    if (isMultiple && !Array.isArray(value)) {
        process.env.NODE_ENV !== 'production' &&
            warn("<select multiple v-model=\"".concat(binding.expression, "\"> ") +
                "expects an Array value for its binding, but got ".concat(Object.prototype.toString
                    .call(value)
                    .slice(8, -1)), vm);
        return;
    }
    var selected, option;
    for (var i = 0, l = el.options.length; i < l; i++) {
        option = el.options[i];
        if (isMultiple) {
            selected = looseIndexOf(value, getValue(option)) > -1;
            if (option.selected !== selected) {
                option.selected = selected;
            }
        }
        else {
            if (looseEqual(getValue(option), value)) {
                if (el.selectedIndex !== i) {
                    el.selectedIndex = i;
                }
                return;
            }
        }
    }
    if (!isMultiple) {
        el.selectedIndex = -1;
    }
}
function hasNoMatchingOption(value, options) {
    return options.every(function (o) { return !looseEqual(o, value); });
}
function getValue(option) {
    return '_value' in option ? option._value : option.value;
}
function onCompositionStart(e) {
    e.target.composing = true;
}
function onCompositionEnd(e) {
    // prevent triggering an input event for no reason
    if (!e.target.composing)
        return;
    e.target.composing = false;
    trigger(e.target, 'input');
}
function trigger(el, type) {
    var e = document.createEvent('HTMLEvents');
    e.initEvent(type, true, true);
    el.dispatchEvent(e);
}

// recursively search for possible transition defined inside the component root
function locateNode(vnode) {
    // @ts-expect-error
    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
        ? locateNode(vnode.componentInstance._vnode)
        : vnode;
}
var show = {
    bind: function (el, _a, vnode) {
        var value = _a.value;
        vnode = locateNode(vnode);
        var transition = vnode.data && vnode.data.transition;
        var originalDisplay = (el.__vOriginalDisplay =
            el.style.display === 'none' ? '' : el.style.display);
        if (value && transition) {
            vnode.data.show = true;
            enter(vnode, function () {
                el.style.display = originalDisplay;
            });
        }
        else {
            el.style.display = value ? originalDisplay : 'none';
        }
    },
    update: function (el, _a, vnode) {
        var value = _a.value, oldValue = _a.oldValue;
        /* istanbul ignore if */
        if (!value === !oldValue)
            return;
        vnode = locateNode(vnode);
        var transition = vnode.data && vnode.data.transition;
        if (transition) {
            vnode.data.show = true;
            if (value) {
                enter(vnode, function () {
                    el.style.display = el.__vOriginalDisplay;
                });
            }
            else {
                leave(vnode, function () {
                    el.style.display = 'none';
                });
            }
        }
        else {
            el.style.display = value ? el.__vOriginalDisplay : 'none';
        }
    },
    unbind: function (el, binding, vnode, oldVnode, isDestroy) {
        if (!isDestroy) {
            el.style.display = el.__vOriginalDisplay;
        }
    }
};

var platformDirectives = {
    model: directive,
    show: show
};

// Provides transition support for a single element/component.
var transitionProps = {
    name: String,
    appear: Boolean,
    css: Boolean,
    mode: String,
    type: String,
    enterClass: String,
    leaveClass: String,
    enterToClass: String,
    leaveToClass: String,
    enterActiveClass: String,
    leaveActiveClass: String,
    appearClass: String,
    appearActiveClass: String,
    appearToClass: String,
    duration: [Number, String, Object]
};
// in case the child is also an abstract component, e.g. <keep-alive>
// we want to recursively retrieve the real component to be rendered
function getRealChild(vnode) {
    var compOptions = vnode && vnode.componentOptions;
    if (compOptions && compOptions.Ctor.options.abstract) {
        return getRealChild(getFirstComponentChild(compOptions.children));
    }
    else {
        return vnode;
    }
}
function extractTransitionData(comp) {
    var data = {};
    var options = comp.$options;
    // props
    for (var key in options.propsData) {
        data[key] = comp[key];
    }
    // events.
    // extract listeners and pass them directly to the transition methods
    var listeners = options._parentListeners;
    for (var key in listeners) {
        data[camelize(key)] = listeners[key];
    }
    return data;
}
function placeholder(h, rawChild) {
    // @ts-expect-error
    if (/\d-keep-alive$/.test(rawChild.tag)) {
        return h('keep-alive', {
            props: rawChild.componentOptions.propsData
        });
    }
}
function hasParentTransition(vnode) {
    while ((vnode = vnode.parent)) {
        if (vnode.data.transition) {
            return true;
        }
    }
}
function isSameChild(child, oldChild) {
    return oldChild.key === child.key && oldChild.tag === child.tag;
}
var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
var isVShowDirective = function (d) { return d.name === 'show'; };
var Transition = {
    name: 'transition',
    props: transitionProps,
    abstract: true,
    render: function (h) {
        var _this = this;
        var children = this.$slots.default;
        if (!children) {
            return;
        }
        // filter out text nodes (possible whitespaces)
        children = children.filter(isNotTextNode);
        /* istanbul ignore if */
        if (!children.length) {
            return;
        }
        // warn multiple elements
        if (process.env.NODE_ENV !== 'production' && children.length > 1) {
            warn('<transition> can only be used on a single element. Use ' +
                '<transition-group> for lists.', this.$parent);
        }
        var mode = this.mode;
        // warn invalid mode
        if (process.env.NODE_ENV !== 'production' && mode && mode !== 'in-out' && mode !== 'out-in') {
            warn('invalid <transition> mode: ' + mode, this.$parent);
        }
        var rawChild = children[0];
        // if this is a component root node and the component's
        // parent container node also has transition, skip.
        if (hasParentTransition(this.$vnode)) {
            return rawChild;
        }
        // apply transition data to child
        // use getRealChild() to ignore abstract components e.g. keep-alive
        var child = getRealChild(rawChild);
        /* istanbul ignore if */
        if (!child) {
            return rawChild;
        }
        if (this._leaving) {
            return placeholder(h, rawChild);
        }
        // ensure a key that is unique to the vnode type and to this transition
        // component instance. This key will be used to remove pending leaving nodes
        // during entering.
        var id = "__transition-".concat(this._uid, "-");
        child.key =
            child.key == null
                ? child.isComment
                    ? id + 'comment'
                    : id + child.tag
                : isPrimitive(child.key)
                    ? String(child.key).indexOf(id) === 0
                        ? child.key
                        : id + child.key
                    : child.key;
        var data = ((child.data || (child.data = {})).transition =
            extractTransitionData(this));
        var oldRawChild = this._vnode;
        var oldChild = getRealChild(oldRawChild);
        // mark v-show
        // so that the transition module can hand over the control to the directive
        if (child.data.directives && child.data.directives.some(isVShowDirective)) {
            child.data.show = true;
        }
        if (oldChild &&
            oldChild.data &&
            !isSameChild(child, oldChild) &&
            !isAsyncPlaceholder(oldChild) &&
            // #6687 component root is a comment node
            !(oldChild.componentInstance &&
                oldChild.componentInstance._vnode.isComment)) {
            // replace old child transition data with fresh one
            // important for dynamic transitions!
            var oldData = (oldChild.data.transition = extend({}, data));
            // handle transition mode
            if (mode === 'out-in') {
                // return placeholder node and queue update when leave finishes
                this._leaving = true;
                mergeVNodeHook(oldData, 'afterLeave', function () {
                    _this._leaving = false;
                    _this.$forceUpdate();
                });
                return placeholder(h, rawChild);
            }
            else if (mode === 'in-out') {
                if (isAsyncPlaceholder(child)) {
                    return oldRawChild;
                }
                var delayedLeave_1;
                var performLeave = function () {
                    delayedLeave_1();
                };
                mergeVNodeHook(data, 'afterEnter', performLeave);
                mergeVNodeHook(data, 'enterCancelled', performLeave);
                mergeVNodeHook(oldData, 'delayLeave', function (leave) {
                    delayedLeave_1 = leave;
                });
            }
        }
        return rawChild;
    }
};

// Provides transition support for list items.
var props = extend({
    tag: String,
    moveClass: String
}, transitionProps);
delete props.mode;
var TransitionGroup = {
    props: props,
    beforeMount: function () {
        var _this = this;
        var update = this._update;
        this._update = function (vnode, hydrating) {
            var restoreActiveInstance = setActiveInstance(_this);
            // force removing pass
            _this.__patch__(_this._vnode, _this.kept, false, // hydrating
            true // removeOnly (!important, avoids unnecessary moves)
            );
            _this._vnode = _this.kept;
            restoreActiveInstance();
            update.call(_this, vnode, hydrating);
        };
    },
    render: function (h) {
        var tag = this.tag || this.$vnode.data.tag || 'span';
        var map = Object.create(null);
        var prevChildren = (this.prevChildren = this.children);
        var rawChildren = this.$slots.default || [];
        var children = (this.children = []);
        var transitionData = extractTransitionData(this);
        for (var i = 0; i < rawChildren.length; i++) {
            var c = rawChildren[i];
            if (c.tag) {
                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
                    children.push(c);
                    map[c.key] = c;
                    (c.data || (c.data = {})).transition = transitionData;
                }
                else if (process.env.NODE_ENV !== 'production') {
                    var opts = c.componentOptions;
                    var name_1 = opts
                        ? getComponentName(opts.Ctor.options) || opts.tag || ''
                        : c.tag;
                    warn("<transition-group> children must be keyed: <".concat(name_1, ">"));
                }
            }
        }
        if (prevChildren) {
            var kept = [];
            var removed = [];
            for (var i = 0; i < prevChildren.length; i++) {
                var c = prevChildren[i];
                c.data.transition = transitionData;
                // @ts-expect-error .getBoundingClientRect is not typed in Node
                c.data.pos = c.elm.getBoundingClientRect();
                if (map[c.key]) {
                    kept.push(c);
                }
                else {
                    removed.push(c);
                }
            }
            this.kept = h(tag, null, kept);
            this.removed = removed;
        }
        return h(tag, null, children);
    },
    updated: function () {
        var children = this.prevChildren;
        var moveClass = this.moveClass || (this.name || 'v') + '-move';
        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
            return;
        }
        // we divide the work into three loops to avoid mixing DOM reads and writes
        // in each iteration - which helps prevent layout thrashing.
        children.forEach(callPendingCbs);
        children.forEach(recordPosition);
        children.forEach(applyTranslation);
        // force reflow to put everything in position
        // assign to this to avoid being removed in tree-shaking
        // $flow-disable-line
        this._reflow = document.body.offsetHeight;
        children.forEach(function (c) {
            if (c.data.moved) {
                var el_1 = c.elm;
                var s = el_1.style;
                addTransitionClass(el_1, moveClass);
                s.transform = s.WebkitTransform = s.transitionDuration = '';
                el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {
                    if (e && e.target !== el_1) {
                        return;
                    }
                    if (!e || /transform$/.test(e.propertyName)) {
                        el_1.removeEventListener(transitionEndEvent, cb);
                        el_1._moveCb = null;
                        removeTransitionClass(el_1, moveClass);
                    }
                }));
            }
        });
    },
    methods: {
        hasMove: function (el, moveClass) {
            /* istanbul ignore if */
            if (!hasTransition) {
                return false;
            }
            /* istanbul ignore if */
            if (this._hasMove) {
                return this._hasMove;
            }
            // Detect whether an element with the move class applied has
            // CSS transitions. Since the element may be inside an entering
            // transition at this very moment, we make a clone of it and remove
            // all other transition classes applied to ensure only the move class
            // is applied.
            var clone = el.cloneNode();
            if (el._transitionClasses) {
                el._transitionClasses.forEach(function (cls) {
                    removeClass(clone, cls);
                });
            }
            addClass(clone, moveClass);
            clone.style.display = 'none';
            this.$el.appendChild(clone);
            var info = getTransitionInfo(clone);
            this.$el.removeChild(clone);
            return (this._hasMove = info.hasTransform);
        }
    }
};
function callPendingCbs(c) {
    /* istanbul ignore if */
    if (c.elm._moveCb) {
        c.elm._moveCb();
    }
    /* istanbul ignore if */
    if (c.elm._enterCb) {
        c.elm._enterCb();
    }
}
function recordPosition(c) {
    c.data.newPos = c.elm.getBoundingClientRect();
}
function applyTranslation(c) {
    var oldPos = c.data.pos;
    var newPos = c.data.newPos;
    var dx = oldPos.left - newPos.left;
    var dy = oldPos.top - newPos.top;
    if (dx || dy) {
        c.data.moved = true;
        var s = c.elm.style;
        s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)");
        s.transitionDuration = '0s';
    }
}

var platformComponents = {
    Transition: Transition,
    TransitionGroup: TransitionGroup
};

// install platform specific utils
Vue.config.mustUseProp = mustUseProp;
Vue.config.isReservedTag = isReservedTag;
Vue.config.isReservedAttr = isReservedAttr;
Vue.config.getTagNamespace = getTagNamespace;
Vue.config.isUnknownElement = isUnknownElement;
// install platform runtime directives & components
extend(Vue.options.directives, platformDirectives);
extend(Vue.options.components, platformComponents);
// install platform patch function
Vue.prototype.__patch__ = inBrowser ? patch : noop;
// public mount method
Vue.prototype.$mount = function (el, hydrating) {
    el = el && inBrowser ? query(el) : undefined;
    return mountComponent(this, el, hydrating);
};
// devtools global hook
/* istanbul ignore next */
if (inBrowser) {
    setTimeout(function () {
        if (config.devtools) {
            if (devtools) {
                devtools.emit('init', Vue);
            }
            else if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {
                // @ts-expect-error
                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
                    'https://github.com/vuejs/vue-devtools');
            }
        }
        if (process.env.NODE_ENV !== 'production' &&
            process.env.NODE_ENV !== 'test' &&
            config.productionTip !== false &&
            typeof console !== 'undefined') {
            // @ts-expect-error
            console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" +
                "Make sure to turn on production mode when deploying for production.\n" +
                "See more tips at https://vuejs.org/guide/deployment.html");
        }
    }, 0);
}

export { EffectScope, computed, customRef, Vue as default, defineAsyncComponent, defineComponent, del, effectScope, getCurrentInstance, getCurrentScope, h, inject, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, mergeDefaults, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, provide, proxyRefs, reactive, readonly, ref$1 as ref, set, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, useAttrs, useCssModule, useCssVars, useListeners, useSlots, version, watch, watchEffect, watchPostEffect, watchSyncEffect };
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Vue = factory());
})(this, (function () { 'use strict';

  var emptyObject = Object.freeze({});
  var isArray = Array.isArray;
  // These helpers produce better VM code in JS engines due to their
  // explicitness and function inlining.
  function isUndef(v) {
      return v === undefined || v === null;
  }
  function isDef(v) {
      return v !== undefined && v !== null;
  }
  function isTrue(v) {
      return v === true;
  }
  function isFalse(v) {
      return v === false;
  }
  /**
   * Check if value is primitive.
   */
  function isPrimitive(value) {
      return (typeof value === 'string' ||
          typeof value === 'number' ||
          // $flow-disable-line
          typeof value === 'symbol' ||
          typeof value === 'boolean');
  }
  function isFunction(value) {
      return typeof value === 'function';
  }
  /**
   * Quick object check - this is primarily used to tell
   * objects from primitive values when we know the value
   * is a JSON-compliant type.
   */
  function isObject(obj) {
      return obj !== null && typeof obj === 'object';
  }
  /**
   * Get the raw type string of a value, e.g., [object Object].
   */
  var _toString = Object.prototype.toString;
  function toRawType(value) {
      return _toString.call(value).slice(8, -1);
  }
  /**
   * Strict object type check. Only returns true
   * for plain JavaScript objects.
   */
  function isPlainObject(obj) {
      return _toString.call(obj) === '[object Object]';
  }
  function isRegExp(v) {
      return _toString.call(v) === '[object RegExp]';
  }
  /**
   * Check if val is a valid array index.
   */
  function isValidArrayIndex(val) {
      var n = parseFloat(String(val));
      return n >= 0 && Math.floor(n) === n && isFinite(val);
  }
  function isPromise(val) {
      return (isDef(val) &&
          typeof val.then === 'function' &&
          typeof val.catch === 'function');
  }
  /**
   * Convert a value to a string that is actually rendered.
   */
  function toString(val) {
      return val == null
          ? ''
          : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
              ? JSON.stringify(val, null, 2)
              : String(val);
  }
  /**
   * Convert an input value to a number for persistence.
   * If the conversion fails, return original string.
   */
  function toNumber(val) {
      var n = parseFloat(val);
      return isNaN(n) ? val : n;
  }
  /**
   * Make a map and return a function for checking if a key
   * is in that map.
   */
  function makeMap(str, expectsLowerCase) {
      var map = Object.create(null);
      var list = str.split(',');
      for (var i = 0; i < list.length; i++) {
          map[list[i]] = true;
      }
      return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };
  }
  /**
   * Check if a tag is a built-in tag.
   */
  var isBuiltInTag = makeMap('slot,component', true);
  /**
   * Check if an attribute is a reserved attribute.
   */
  var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
  /**
   * Remove an item from an array.
   */
  function remove$2(arr, item) {
      var len = arr.length;
      if (len) {
          // fast path for the only / last item
          if (item === arr[len - 1]) {
              arr.length = len - 1;
              return;
          }
          var index = arr.indexOf(item);
          if (index > -1) {
              return arr.splice(index, 1);
          }
      }
  }
  /**
   * Check whether an object has the property.
   */
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  function hasOwn(obj, key) {
      return hasOwnProperty.call(obj, key);
  }
  /**
   * Create a cached version of a pure function.
   */
  function cached(fn) {
      var cache = Object.create(null);
      return function cachedFn(str) {
          var hit = cache[str];
          return hit || (cache[str] = fn(str));
      };
  }
  /**
   * Camelize a hyphen-delimited string.
   */
  var camelizeRE = /-(\w)/g;
  var camelize = cached(function (str) {
      return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });
  });
  /**
   * Capitalize a string.
   */
  var capitalize = cached(function (str) {
      return str.charAt(0).toUpperCase() + str.slice(1);
  });
  /**
   * Hyphenate a camelCase string.
   */
  var hyphenateRE = /\B([A-Z])/g;
  var hyphenate = cached(function (str) {
      return str.replace(hyphenateRE, '-$1').toLowerCase();
  });
  /**
   * Simple bind polyfill for environments that do not support it,
   * e.g., PhantomJS 1.x. Technically, we don't need this anymore
   * since native bind is now performant enough in most browsers.
   * But removing it would mean breaking code that was able to run in
   * PhantomJS 1.x, so this must be kept for backward compatibility.
   */
  /* istanbul ignore next */
  function polyfillBind(fn, ctx) {
      function boundFn(a) {
          var l = arguments.length;
          return l
              ? l > 1
                  ? fn.apply(ctx, arguments)
                  : fn.call(ctx, a)
              : fn.call(ctx);
      }
      boundFn._length = fn.length;
      return boundFn;
  }
  function nativeBind(fn, ctx) {
      return fn.bind(ctx);
  }
  // @ts-expect-error bind cannot be `undefined`
  var bind = Function.prototype.bind ? nativeBind : polyfillBind;
  /**
   * Convert an Array-like object to a real Array.
   */
  function toArray(list, start) {
      start = start || 0;
      var i = list.length - start;
      var ret = new Array(i);
      while (i--) {
          ret[i] = list[i + start];
      }
      return ret;
  }
  /**
   * Mix properties into target object.
   */
  function extend(to, _from) {
      for (var key in _from) {
          to[key] = _from[key];
      }
      return to;
  }
  /**
   * Merge an Array of Objects into a single Object.
   */
  function toObject(arr) {
      var res = {};
      for (var i = 0; i < arr.length; i++) {
          if (arr[i]) {
              extend(res, arr[i]);
          }
      }
      return res;
  }
  /* eslint-disable no-unused-vars */
  /**
   * Perform no operation.
   * Stubbing args to make Flow happy without leaving useless transpiled code
   * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
   */
  function noop(a, b, c) { }
  /**
   * Always return false.
   */
  var no = function (a, b, c) { return false; };
  /* eslint-enable no-unused-vars */
  /**
   * Return the same value.
   */
  var identity = function (_) { return _; };
  /**
   * Check if two values are loosely equal - that is,
   * if they are plain objects, do they have the same shape?
   */
  function looseEqual(a, b) {
      if (a === b)
          return true;
      var isObjectA = isObject(a);
      var isObjectB = isObject(b);
      if (isObjectA && isObjectB) {
          try {
              var isArrayA = Array.isArray(a);
              var isArrayB = Array.isArray(b);
              if (isArrayA && isArrayB) {
                  return (a.length === b.length &&
                      a.every(function (e, i) {
                          return looseEqual(e, b[i]);
                      }));
              }
              else if (a instanceof Date && b instanceof Date) {
                  return a.getTime() === b.getTime();
              }
              else if (!isArrayA && !isArrayB) {
                  var keysA = Object.keys(a);
                  var keysB = Object.keys(b);
                  return (keysA.length === keysB.length &&
                      keysA.every(function (key) {
                          return looseEqual(a[key], b[key]);
                      }));
              }
              else {
                  /* istanbul ignore next */
                  return false;
              }
          }
          catch (e) {
              /* istanbul ignore next */
              return false;
          }
      }
      else if (!isObjectA && !isObjectB) {
          return String(a) === String(b);
      }
      else {
          return false;
      }
  }
  /**
   * Return the first index at which a loosely equal value can be
   * found in the array (if value is a plain object, the array must
   * contain an object of the same shape), or -1 if it is not present.
   */
  function looseIndexOf(arr, val) {
      for (var i = 0; i < arr.length; i++) {
          if (looseEqual(arr[i], val))
              return i;
      }
      return -1;
  }
  /**
   * Ensure a function is called only once.
   */
  function once(fn) {
      var called = false;
      return function () {
          if (!called) {
              called = true;
              fn.apply(this, arguments);
          }
      };
  }
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
  function hasChanged(x, y) {
      if (x === y) {
          return x === 0 && 1 / x !== 1 / y;
      }
      else {
          return x === x || y === y;
      }
  }

  var SSR_ATTR = 'data-server-rendered';
  var ASSET_TYPES = ['component', 'directive', 'filter'];
  var LIFECYCLE_HOOKS = [
      'beforeCreate',
      'created',
      'beforeMount',
      'mounted',
      'beforeUpdate',
      'updated',
      'beforeDestroy',
      'destroyed',
      'activated',
      'deactivated',
      'errorCaptured',
      'serverPrefetch',
      'renderTracked',
      'renderTriggered'
  ];

  var config = {
      /**
       * Option merge strategies (used in core/util/options)
       */
      // $flow-disable-line
      optionMergeStrategies: Object.create(null),
      /**
       * Whether to suppress warnings.
       */
      silent: false,
      /**
       * Show production mode tip message on boot?
       */
      productionTip: true,
      /**
       * Whether to enable devtools
       */
      devtools: true,
      /**
       * Whether to record perf
       */
      performance: false,
      /**
       * Error handler for watcher errors
       */
      errorHandler: null,
      /**
       * Warn handler for watcher warns
       */
      warnHandler: null,
      /**
       * Ignore certain custom elements
       */
      ignoredElements: [],
      /**
       * Custom user key aliases for v-on
       */
      // $flow-disable-line
      keyCodes: Object.create(null),
      /**
       * Check if a tag is reserved so that it cannot be registered as a
       * component. This is platform-dependent and may be overwritten.
       */
      isReservedTag: no,
      /**
       * Check if an attribute is reserved so that it cannot be used as a component
       * prop. This is platform-dependent and may be overwritten.
       */
      isReservedAttr: no,
      /**
       * Check if a tag is an unknown element.
       * Platform-dependent.
       */
      isUnknownElement: no,
      /**
       * Get the namespace of an element
       */
      getTagNamespace: noop,
      /**
       * Parse the real tag name for the specific platform.
       */
      parsePlatformTagName: identity,
      /**
       * Check if an attribute must be bound using property, e.g. value
       * Platform-dependent.
       */
      mustUseProp: no,
      /**
       * Perform updates asynchronously. Intended to be used by Vue Test Utils
       * This will significantly reduce performance if set to false.
       */
      async: true,
      /**
       * Exposed for legacy reasons
       */
      _lifecycleHooks: LIFECYCLE_HOOKS
  };

  /**
   * unicode letters used for parsing html tags, component names and property paths.
   * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
   * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
   */
  var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
  /**
   * Check if a string starts with $ or _
   */
  function isReserved(str) {
      var c = (str + '').charCodeAt(0);
      return c === 0x24 || c === 0x5f;
  }
  /**
   * Define a property.
   */
  function def(obj, key, val, enumerable) {
      Object.defineProperty(obj, key, {
          value: val,
          enumerable: !!enumerable,
          writable: true,
          configurable: true
      });
  }
  /**
   * Parse simple path.
   */
  var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]"));
  function parsePath(path) {
      if (bailRE.test(path)) {
          return;
      }
      var segments = path.split('.');
      return function (obj) {
          for (var i = 0; i < segments.length; i++) {
              if (!obj)
                  return;
              obj = obj[segments[i]];
          }
          return obj;
      };
  }

  // can we use __proto__?
  var hasProto = '__proto__' in {};
  // Browser environment sniffing
  var inBrowser = typeof window !== 'undefined';
  var UA = inBrowser && window.navigator.userAgent.toLowerCase();
  var isIE = UA && /msie|trident/.test(UA);
  var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
  var isEdge = UA && UA.indexOf('edge/') > 0;
  UA && UA.indexOf('android') > 0;
  var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
  UA && /chrome\/\d+/.test(UA) && !isEdge;
  UA && /phantomjs/.test(UA);
  var isFF = UA && UA.match(/firefox\/(\d+)/);
  // Firefox has a "watch" function on Object.prototype...
  // @ts-expect-error firebox support
  var nativeWatch = {}.watch;
  var supportsPassive = false;
  if (inBrowser) {
      try {
          var opts = {};
          Object.defineProperty(opts, 'passive', {
              get: function () {
                  /* istanbul ignore next */
                  supportsPassive = true;
              }
          }); // https://github.com/facebook/flow/issues/285
          window.addEventListener('test-passive', null, opts);
      }
      catch (e) { }
  }
  // this needs to be lazy-evaled because vue may be required before
  // vue-server-renderer can set VUE_ENV
  var _isServer;
  var isServerRendering = function () {
      if (_isServer === undefined) {
          /* istanbul ignore if */
          if (!inBrowser && typeof global !== 'undefined') {
              // detect presence of vue-server-renderer and avoid
              // Webpack shimming the process
              _isServer =
                  global['process'] && global['process'].env.VUE_ENV === 'server';
          }
          else {
              _isServer = false;
          }
      }
      return _isServer;
  };
  // detect devtools
  var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
  /* istanbul ignore next */
  function isNative(Ctor) {
      return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
  }
  var hasSymbol = typeof Symbol !== 'undefined' &&
      isNative(Symbol) &&
      typeof Reflect !== 'undefined' &&
      isNative(Reflect.ownKeys);
  var _Set; // $flow-disable-line
  /* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
      // use native Set when available.
      _Set = Set;
  }
  else {
      // a non-standard Set polyfill that only works with primitive keys.
      _Set = /** @class */ (function () {
          function Set() {
              this.set = Object.create(null);
          }
          Set.prototype.has = function (key) {
              return this.set[key] === true;
          };
          Set.prototype.add = function (key) {
              this.set[key] = true;
          };
          Set.prototype.clear = function () {
              this.set = Object.create(null);
          };
          return Set;
      }());
  }

  var currentInstance = null;
  /**
   * This is exposed for compatibility with v3 (e.g. some functions in VueUse
   * relies on it). Do not use this internally, just use `currentInstance`.
   *
   * @internal this function needs manual type declaration because it relies
   * on previously manually authored types from Vue 2
   */
  function getCurrentInstance() {
      return currentInstance && { proxy: currentInstance };
  }
  /**
   * @internal
   */
  function setCurrentInstance(vm) {
      if (vm === void 0) { vm = null; }
      if (!vm)
          currentInstance && currentInstance._scope.off();
      currentInstance = vm;
      vm && vm._scope.on();
  }

  /**
   * @internal
   */
  var VNode = /** @class */ (function () {
      function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
          this.tag = tag;
          this.data = data;
          this.children = children;
          this.text = text;
          this.elm = elm;
          this.ns = undefined;
          this.context = context;
          this.fnContext = undefined;
          this.fnOptions = undefined;
          this.fnScopeId = undefined;
          this.key = data && data.key;
          this.componentOptions = componentOptions;
          this.componentInstance = undefined;
          this.parent = undefined;
          this.raw = false;
          this.isStatic = false;
          this.isRootInsert = true;
          this.isComment = false;
          this.isCloned = false;
          this.isOnce = false;
          this.asyncFactory = asyncFactory;
          this.asyncMeta = undefined;
          this.isAsyncPlaceholder = false;
      }
      Object.defineProperty(VNode.prototype, "child", {
          // DEPRECATED: alias for componentInstance for backwards compat.
          /* istanbul ignore next */
          get: function () {
              return this.componentInstance;
          },
          enumerable: false,
          configurable: true
      });
      return VNode;
  }());
  var createEmptyVNode = function (text) {
      if (text === void 0) { text = ''; }
      var node = new VNode();
      node.text = text;
      node.isComment = true;
      return node;
  };
  function createTextVNode(val) {
      return new VNode(undefined, undefined, undefined, String(val));
  }
  // optimized shallow clone
  // used for static nodes and slot nodes because they may be reused across
  // multiple renders, cloning them avoids errors when DOM manipulations rely
  // on their elm reference.
  function cloneVNode(vnode) {
      var cloned = new VNode(vnode.tag, vnode.data, 
      // #7975
      // clone children array to avoid mutating original in case of cloning
      // a child.
      vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
      cloned.ns = vnode.ns;
      cloned.isStatic = vnode.isStatic;
      cloned.key = vnode.key;
      cloned.isComment = vnode.isComment;
      cloned.fnContext = vnode.fnContext;
      cloned.fnOptions = vnode.fnOptions;
      cloned.fnScopeId = vnode.fnScopeId;
      cloned.asyncMeta = vnode.asyncMeta;
      cloned.isCloned = true;
      return cloned;
  }

  /******************************************************************************
  Copyright (c) Microsoft Corporation.

  Permission to use, copy, modify, and/or distribute this software for any
  purpose with or without fee is hereby granted.

  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  PERFORMANCE OF THIS SOFTWARE.
  ***************************************************************************** */

  var __assign = function() {
      __assign = Object.assign || function __assign(t) {
          for (var s, i = 1, n = arguments.length; i < n; i++) {
              s = arguments[i];
              for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
          }
          return t;
      };
      return __assign.apply(this, arguments);
  };

  var uid$2 = 0;
  var pendingCleanupDeps = [];
  var cleanupDeps = function () {
      for (var i = 0; i < pendingCleanupDeps.length; i++) {
          var dep = pendingCleanupDeps[i];
          dep.subs = dep.subs.filter(function (s) { return s; });
          dep._pending = false;
      }
      pendingCleanupDeps.length = 0;
  };
  /**
   * A dep is an observable that can have multiple
   * directives subscribing to it.
   * @internal
   */
  var Dep = /** @class */ (function () {
      function Dep() {
          // pending subs cleanup
          this._pending = false;
          this.id = uid$2++;
          this.subs = [];
      }
      Dep.prototype.addSub = function (sub) {
          this.subs.push(sub);
      };
      Dep.prototype.removeSub = function (sub) {
          // #12696 deps with massive amount of subscribers are extremely slow to
          // clean up in Chromium
          // to workaround this, we unset the sub for now, and clear them on
          // next scheduler flush.
          this.subs[this.subs.indexOf(sub)] = null;
          if (!this._pending) {
              this._pending = true;
              pendingCleanupDeps.push(this);
          }
      };
      Dep.prototype.depend = function (info) {
          if (Dep.target) {
              Dep.target.addDep(this);
              if (info && Dep.target.onTrack) {
                  Dep.target.onTrack(__assign({ effect: Dep.target }, info));
              }
          }
      };
      Dep.prototype.notify = function (info) {
          // stabilize the subscriber list first
          var subs = this.subs.filter(function (s) { return s; });
          if (!config.async) {
              // subs aren't sorted in scheduler if not running async
              // we need to sort them now to make sure they fire in correct
              // order
              subs.sort(function (a, b) { return a.id - b.id; });
          }
          for (var i = 0, l = subs.length; i < l; i++) {
              var sub = subs[i];
              if (info) {
                  sub.onTrigger &&
                      sub.onTrigger(__assign({ effect: subs[i] }, info));
              }
              sub.update();
          }
      };
      return Dep;
  }());
  // The current target watcher being evaluated.
  // This is globally unique because only one watcher
  // can be evaluated at a time.
  Dep.target = null;
  var targetStack = [];
  function pushTarget(target) {
      targetStack.push(target);
      Dep.target = target;
  }
  function popTarget() {
      targetStack.pop();
      Dep.target = targetStack[targetStack.length - 1];
  }

  /*
   * not type checking this file because flow doesn't play well with
   * dynamically accessing methods on Array prototype
   */
  var arrayProto = Array.prototype;
  var arrayMethods = Object.create(arrayProto);
  var methodsToPatch = [
      'push',
      'pop',
      'shift',
      'unshift',
      'splice',
      'sort',
      'reverse'
  ];
  /**
   * Intercept mutating methods and emit events
   */
  methodsToPatch.forEach(function (method) {
      // cache original method
      var original = arrayProto[method];
      def(arrayMethods, method, function mutator() {
          var args = [];
          for (var _i = 0; _i < arguments.length; _i++) {
              args[_i] = arguments[_i];
          }
          var result = original.apply(this, args);
          var ob = this.__ob__;
          var inserted;
          switch (method) {
              case 'push':
              case 'unshift':
                  inserted = args;
                  break;
              case 'splice':
                  inserted = args.slice(2);
                  break;
          }
          if (inserted)
              ob.observeArray(inserted);
          // notify change
          {
              ob.dep.notify({
                  type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
                  target: this,
                  key: method
              });
          }
          return result;
      });
  });

  var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
  var NO_INIITIAL_VALUE = {};
  /**
   * In some cases we may want to disable observation inside a component's
   * update computation.
   */
  var shouldObserve = true;
  function toggleObserving(value) {
      shouldObserve = value;
  }
  // ssr mock dep
  var mockDep = {
      notify: noop,
      depend: noop,
      addSub: noop,
      removeSub: noop
  };
  /**
   * Observer class that is attached to each observed
   * object. Once attached, the observer converts the target
   * object's property keys into getter/setters that
   * collect dependencies and dispatch updates.
   */
  var Observer = /** @class */ (function () {
      function Observer(value, shallow, mock) {
          if (shallow === void 0) { shallow = false; }
          if (mock === void 0) { mock = false; }
          this.value = value;
          this.shallow = shallow;
          this.mock = mock;
          // this.value = value
          this.dep = mock ? mockDep : new Dep();
          this.vmCount = 0;
          def(value, '__ob__', this);
          if (isArray(value)) {
              if (!mock) {
                  if (hasProto) {
                      value.__proto__ = arrayMethods;
                      /* eslint-enable no-proto */
                  }
                  else {
                      for (var i = 0, l = arrayKeys.length; i < l; i++) {
                          var key = arrayKeys[i];
                          def(value, key, arrayMethods[key]);
                      }
                  }
              }
              if (!shallow) {
                  this.observeArray(value);
              }
          }
          else {
              /**
               * Walk through all properties and convert them into
               * getter/setters. This method should only be called when
               * value type is Object.
               */
              var keys = Object.keys(value);
              for (var i = 0; i < keys.length; i++) {
                  var key = keys[i];
                  defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
              }
          }
      }
      /**
       * Observe a list of Array items.
       */
      Observer.prototype.observeArray = function (value) {
          for (var i = 0, l = value.length; i < l; i++) {
              observe(value[i], false, this.mock);
          }
      };
      return Observer;
  }());
  // helpers
  /**
   * Attempt to create an observer instance for a value,
   * returns the new observer if successfully observed,
   * or the existing observer if the value already has one.
   */
  function observe(value, shallow, ssrMockReactivity) {
      if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
          return value.__ob__;
      }
      if (shouldObserve &&
          (ssrMockReactivity || !isServerRendering()) &&
          (isArray(value) || isPlainObject(value)) &&
          Object.isExtensible(value) &&
          !value.__v_skip /* ReactiveFlags.SKIP */ &&
          !isRef(value) &&
          !(value instanceof VNode)) {
          return new Observer(value, shallow, ssrMockReactivity);
      }
  }
  /**
   * Define a reactive property on an Object.
   */
  function defineReactive(obj, key, val, customSetter, shallow, mock) {
      var dep = new Dep();
      var property = Object.getOwnPropertyDescriptor(obj, key);
      if (property && property.configurable === false) {
          return;
      }
      // cater for pre-defined getter/setters
      var getter = property && property.get;
      var setter = property && property.set;
      if ((!getter || setter) &&
          (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
          val = obj[key];
      }
      var childOb = !shallow && observe(val, false, mock);
      Object.defineProperty(obj, key, {
          enumerable: true,
          configurable: true,
          get: function reactiveGetter() {
              var value = getter ? getter.call(obj) : val;
              if (Dep.target) {
                  {
                      dep.depend({
                          target: obj,
                          type: "get" /* TrackOpTypes.GET */,
                          key: key
                      });
                  }
                  if (childOb) {
                      childOb.dep.depend();
                      if (isArray(value)) {
                          dependArray(value);
                      }
                  }
              }
              return isRef(value) && !shallow ? value.value : value;
          },
          set: function reactiveSetter(newVal) {
              var value = getter ? getter.call(obj) : val;
              if (!hasChanged(value, newVal)) {
                  return;
              }
              if (customSetter) {
                  customSetter();
              }
              if (setter) {
                  setter.call(obj, newVal);
              }
              else if (getter) {
                  // #7981: for accessor properties without setter
                  return;
              }
              else if (!shallow && isRef(value) && !isRef(newVal)) {
                  value.value = newVal;
                  return;
              }
              else {
                  val = newVal;
              }
              childOb = !shallow && observe(newVal, false, mock);
              {
                  dep.notify({
                      type: "set" /* TriggerOpTypes.SET */,
                      target: obj,
                      key: key,
                      newValue: newVal,
                      oldValue: value
                  });
              }
          }
      });
      return dep;
  }
  function set(target, key, val) {
      if ((isUndef(target) || isPrimitive(target))) {
          warn("Cannot set reactive property on undefined, null, or primitive value: ".concat(target));
      }
      if (isReadonly(target)) {
          warn("Set operation on key \"".concat(key, "\" failed: target is readonly."));
          return;
      }
      var ob = target.__ob__;
      if (isArray(target) && isValidArrayIndex(key)) {
          target.length = Math.max(target.length, key);
          target.splice(key, 1, val);
          // when mocking for SSR, array methods are not hijacked
          if (ob && !ob.shallow && ob.mock) {
              observe(val, false, true);
          }
          return val;
      }
      if (key in target && !(key in Object.prototype)) {
          target[key] = val;
          return val;
      }
      if (target._isVue || (ob && ob.vmCount)) {
          warn('Avoid adding reactive properties to a Vue instance or its root $data ' +
                  'at runtime - declare it upfront in the data option.');
          return val;
      }
      if (!ob) {
          target[key] = val;
          return val;
      }
      defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
      {
          ob.dep.notify({
              type: "add" /* TriggerOpTypes.ADD */,
              target: target,
              key: key,
              newValue: val,
              oldValue: undefined
          });
      }
      return val;
  }
  function del(target, key) {
      if ((isUndef(target) || isPrimitive(target))) {
          warn("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target));
      }
      if (isArray(target) && isValidArrayIndex(key)) {
          target.splice(key, 1);
          return;
      }
      var ob = target.__ob__;
      if (target._isVue || (ob && ob.vmCount)) {
          warn('Avoid deleting properties on a Vue instance or its root $data ' +
                  '- just set it to null.');
          return;
      }
      if (isReadonly(target)) {
          warn("Delete operation on key \"".concat(key, "\" failed: target is readonly."));
          return;
      }
      if (!hasOwn(target, key)) {
          return;
      }
      delete target[key];
      if (!ob) {
          return;
      }
      {
          ob.dep.notify({
              type: "delete" /* TriggerOpTypes.DELETE */,
              target: target,
              key: key
          });
      }
  }
  /**
   * Collect dependencies on array elements when the array is touched, since
   * we cannot intercept array element access like property getters.
   */
  function dependArray(value) {
      for (var e = void 0, i = 0, l = value.length; i < l; i++) {
          e = value[i];
          if (e && e.__ob__) {
              e.__ob__.dep.depend();
          }
          if (isArray(e)) {
              dependArray(e);
          }
      }
  }

  function reactive(target) {
      makeReactive(target, false);
      return target;
  }
  /**
   * Return a shallowly-reactive copy of the original object, where only the root
   * level properties are reactive. It also does not auto-unwrap refs (even at the
   * root level).
   */
  function shallowReactive(target) {
      makeReactive(target, true);
      def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
      return target;
  }
  function makeReactive(target, shallow) {
      // if trying to observe a readonly proxy, return the readonly version.
      if (!isReadonly(target)) {
          {
              if (isArray(target)) {
                  warn("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation."));
              }
              var existingOb = target && target.__ob__;
              if (existingOb && existingOb.shallow !== shallow) {
                  warn("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
              }
          }
          var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
          if (!ob) {
              if (target == null || isPrimitive(target)) {
                  warn("value cannot be made reactive: ".concat(String(target)));
              }
              if (isCollectionType(target)) {
                  warn("Vue 2 does not support reactive collection types such as Map or Set.");
              }
          }
      }
  }
  function isReactive(value) {
      if (isReadonly(value)) {
          return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
      }
      return !!(value && value.__ob__);
  }
  function isShallow(value) {
      return !!(value && value.__v_isShallow);
  }
  function isReadonly(value) {
      return !!(value && value.__v_isReadonly);
  }
  function isProxy(value) {
      return isReactive(value) || isReadonly(value);
  }
  function toRaw(observed) {
      var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
      return raw ? toRaw(raw) : observed;
  }
  function markRaw(value) {
      // non-extensible objects won't be observed anyway
      if (Object.isExtensible(value)) {
          def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
      }
      return value;
  }
  /**
   * @internal
   */
  function isCollectionType(value) {
      var type = toRawType(value);
      return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
  }

  /**
   * @internal
   */
  var RefFlag = "__v_isRef";
  function isRef(r) {
      return !!(r && r.__v_isRef === true);
  }
  function ref$1(value) {
      return createRef(value, false);
  }
  function shallowRef(value) {
      return createRef(value, true);
  }
  function createRef(rawValue, shallow) {
      if (isRef(rawValue)) {
          return rawValue;
      }
      var ref = {};
      def(ref, RefFlag, true);
      def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
      def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
      return ref;
  }
  function triggerRef(ref) {
      if (!ref.dep) {
          warn("received object is not a triggerable ref.");
      }
      {
          ref.dep &&
              ref.dep.notify({
                  type: "set" /* TriggerOpTypes.SET */,
                  target: ref,
                  key: 'value'
              });
      }
  }
  function unref(ref) {
      return isRef(ref) ? ref.value : ref;
  }
  function proxyRefs(objectWithRefs) {
      if (isReactive(objectWithRefs)) {
          return objectWithRefs;
      }
      var proxy = {};
      var keys = Object.keys(objectWithRefs);
      for (var i = 0; i < keys.length; i++) {
          proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
      }
      return proxy;
  }
  function proxyWithRefUnwrap(target, source, key) {
      Object.defineProperty(target, key, {
          enumerable: true,
          configurable: true,
          get: function () {
              var val = source[key];
              if (isRef(val)) {
                  return val.value;
              }
              else {
                  var ob = val && val.__ob__;
                  if (ob)
                      ob.dep.depend();
                  return val;
              }
          },
          set: function (value) {
              var oldValue = source[key];
              if (isRef(oldValue) && !isRef(value)) {
                  oldValue.value = value;
              }
              else {
                  source[key] = value;
              }
          }
      });
  }
  function customRef(factory) {
      var dep = new Dep();
      var _a = factory(function () {
          {
              dep.depend({
                  target: ref,
                  type: "get" /* TrackOpTypes.GET */,
                  key: 'value'
              });
          }
      }, function () {
          {
              dep.notify({
                  target: ref,
                  type: "set" /* TriggerOpTypes.SET */,
                  key: 'value'
              });
          }
      }), get = _a.get, set = _a.set;
      var ref = {
          get value() {
              return get();
          },
          set value(newVal) {
              set(newVal);
          }
      };
      def(ref, RefFlag, true);
      return ref;
  }
  function toRefs(object) {
      if (!isReactive(object)) {
          warn("toRefs() expects a reactive object but received a plain one.");
      }
      var ret = isArray(object) ? new Array(object.length) : {};
      for (var key in object) {
          ret[key] = toRef(object, key);
      }
      return ret;
  }
  function toRef(object, key, defaultValue) {
      var val = object[key];
      if (isRef(val)) {
          return val;
      }
      var ref = {
          get value() {
              var val = object[key];
              return val === undefined ? defaultValue : val;
          },
          set value(newVal) {
              object[key] = newVal;
          }
      };
      def(ref, RefFlag, true);
      return ref;
  }

  var rawToReadonlyFlag = "__v_rawToReadonly";
  var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly";
  function readonly(target) {
      return createReadonly(target, false);
  }
  function createReadonly(target, shallow) {
      if (!isPlainObject(target)) {
          {
              if (isArray(target)) {
                  warn("Vue 2 does not support readonly arrays.");
              }
              else if (isCollectionType(target)) {
                  warn("Vue 2 does not support readonly collection types such as Map or Set.");
              }
              else {
                  warn("value cannot be made readonly: ".concat(typeof target));
              }
          }
          return target;
      }
      if (!Object.isExtensible(target)) {
          warn("Vue 2 does not support creating readonly proxy for non-extensible object.");
      }
      // already a readonly object
      if (isReadonly(target)) {
          return target;
      }
      // already has a readonly proxy
      var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
      var existingProxy = target[existingFlag];
      if (existingProxy) {
          return existingProxy;
      }
      var proxy = Object.create(Object.getPrototypeOf(target));
      def(target, existingFlag, proxy);
      def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
      def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
      if (isRef(target)) {
          def(proxy, RefFlag, true);
      }
      if (shallow || isShallow(target)) {
          def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
      }
      var keys = Object.keys(target);
      for (var i = 0; i < keys.length; i++) {
          defineReadonlyProperty(proxy, target, keys[i], shallow);
      }
      return proxy;
  }
  function defineReadonlyProperty(proxy, target, key, shallow) {
      Object.defineProperty(proxy, key, {
          enumerable: true,
          configurable: true,
          get: function () {
              var val = target[key];
              return shallow || !isPlainObject(val) ? val : readonly(val);
          },
          set: function () {
              warn("Set operation on key \"".concat(key, "\" failed: target is readonly."));
          }
      });
  }
  /**
   * Returns a reactive-copy of the original object, where only the root level
   * properties are readonly, and does NOT unwrap refs nor recursively convert
   * returned properties.
   * This is used for creating the props proxy object for stateful components.
   */
  function shallowReadonly(target) {
      return createReadonly(target, true);
  }

  function computed(getterOrOptions, debugOptions) {
      var getter;
      var setter;
      var onlyGetter = isFunction(getterOrOptions);
      if (onlyGetter) {
          getter = getterOrOptions;
          setter = function () {
                  warn('Write operation failed: computed value is readonly');
              }
              ;
      }
      else {
          getter = getterOrOptions.get;
          setter = getterOrOptions.set;
      }
      var watcher = isServerRendering()
          ? null
          : new Watcher(currentInstance, getter, noop, { lazy: true });
      if (watcher && debugOptions) {
          watcher.onTrack = debugOptions.onTrack;
          watcher.onTrigger = debugOptions.onTrigger;
      }
      var ref = {
          // some libs rely on the presence effect for checking computed refs
          // from normal refs, but the implementation doesn't matter
          effect: watcher,
          get value() {
              if (watcher) {
                  if (watcher.dirty) {
                      watcher.evaluate();
                  }
                  if (Dep.target) {
                      if (Dep.target.onTrack) {
                          Dep.target.onTrack({
                              effect: Dep.target,
                              target: ref,
                              type: "get" /* TrackOpTypes.GET */,
                              key: 'value'
                          });
                      }
                      watcher.depend();
                  }
                  return watcher.value;
              }
              else {
                  return getter();
              }
          },
          set value(newVal) {
              setter(newVal);
          }
      };
      def(ref, RefFlag, true);
      def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
      return ref;
  }

  var WATCHER = "watcher";
  var WATCHER_CB = "".concat(WATCHER, " callback");
  var WATCHER_GETTER = "".concat(WATCHER, " getter");
  var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup");
  // Simple effect.
  function watchEffect(effect, options) {
      return doWatch(effect, null, options);
  }
  function watchPostEffect(effect, options) {
      return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'post' }) ));
  }
  function watchSyncEffect(effect, options) {
      return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'sync' }) ));
  }
  // initial value for watchers to trigger on undefined initial values
  var INITIAL_WATCHER_VALUE = {};
  // implementation
  function watch(source, cb, options) {
      if (typeof cb !== 'function') {
          warn("`watch(fn, options?)` signature has been moved to a separate API. " +
              "Use `watchEffect(fn, options?)` instead. `watch` now only " +
              "supports `watch(source, cb, options?) signature.");
      }
      return doWatch(source, cb, options);
  }
  function doWatch(source, cb, _a) {
      var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;
      if (!cb) {
          if (immediate !== undefined) {
              warn("watch() \"immediate\" option is only respected when using the " +
                  "watch(source, callback, options?) signature.");
          }
          if (deep !== undefined) {
              warn("watch() \"deep\" option is only respected when using the " +
                  "watch(source, callback, options?) signature.");
          }
      }
      var warnInvalidSource = function (s) {
          warn("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") +
              "function, a ref, a reactive object, or an array of these types.");
      };
      var instance = currentInstance;
      var call = function (fn, type, args) {
          if (args === void 0) { args = null; }
          return invokeWithErrorHandling(fn, null, args, instance, type);
      };
      var getter;
      var forceTrigger = false;
      var isMultiSource = false;
      if (isRef(source)) {
          getter = function () { return source.value; };
          forceTrigger = isShallow(source);
      }
      else if (isReactive(source)) {
          getter = function () {
              source.__ob__.dep.depend();
              return source;
          };
          deep = true;
      }
      else if (isArray(source)) {
          isMultiSource = true;
          forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });
          getter = function () {
              return source.map(function (s) {
                  if (isRef(s)) {
                      return s.value;
                  }
                  else if (isReactive(s)) {
                      return traverse(s);
                  }
                  else if (isFunction(s)) {
                      return call(s, WATCHER_GETTER);
                  }
                  else {
                      warnInvalidSource(s);
                  }
              });
          };
      }
      else if (isFunction(source)) {
          if (cb) {
              // getter with cb
              getter = function () { return call(source, WATCHER_GETTER); };
          }
          else {
              // no cb -> simple effect
              getter = function () {
                  if (instance && instance._isDestroyed) {
                      return;
                  }
                  if (cleanup) {
                      cleanup();
                  }
                  return call(source, WATCHER, [onCleanup]);
              };
          }
      }
      else {
          getter = noop;
          warnInvalidSource(source);
      }
      if (cb && deep) {
          var baseGetter_1 = getter;
          getter = function () { return traverse(baseGetter_1()); };
      }
      var cleanup;
      var onCleanup = function (fn) {
          cleanup = watcher.onStop = function () {
              call(fn, WATCHER_CLEANUP);
          };
      };
      // in SSR there is no need to setup an actual effect, and it should be noop
      // unless it's eager
      if (isServerRendering()) {
          // we will also not call the invalidate callback (+ runner is not set up)
          onCleanup = noop;
          if (!cb) {
              getter();
          }
          else if (immediate) {
              call(cb, WATCHER_CB, [
                  getter(),
                  isMultiSource ? [] : undefined,
                  onCleanup
              ]);
          }
          return noop;
      }
      var watcher = new Watcher(currentInstance, getter, noop, {
          lazy: true
      });
      watcher.noRecurse = !cb;
      var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
      // overwrite default run
      watcher.run = function () {
          if (!watcher.active) {
              return;
          }
          if (cb) {
              // watch(source, cb)
              var newValue = watcher.get();
              if (deep ||
                  forceTrigger ||
                  (isMultiSource
                      ? newValue.some(function (v, i) {
                          return hasChanged(v, oldValue[i]);
                      })
                      : hasChanged(newValue, oldValue))) {
                  // cleanup before running cb again
                  if (cleanup) {
                      cleanup();
                  }
                  call(cb, WATCHER_CB, [
                      newValue,
                      // pass undefined as the old value when it's changed for the first time
                      oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
                      onCleanup
                  ]);
                  oldValue = newValue;
              }
          }
          else {
              // watchEffect
              watcher.get();
          }
      };
      if (flush === 'sync') {
          watcher.update = watcher.run;
      }
      else if (flush === 'post') {
          watcher.post = true;
          watcher.update = function () { return queueWatcher(watcher); };
      }
      else {
          // pre
          watcher.update = function () {
              if (instance && instance === currentInstance && !instance._isMounted) {
                  // pre-watcher triggered before
                  var buffer = instance._preWatchers || (instance._preWatchers = []);
                  if (buffer.indexOf(watcher) < 0)
                      buffer.push(watcher);
              }
              else {
                  queueWatcher(watcher);
              }
          };
      }
      {
          watcher.onTrack = onTrack;
          watcher.onTrigger = onTrigger;
      }
      // initial run
      if (cb) {
          if (immediate) {
              watcher.run();
          }
          else {
              oldValue = watcher.get();
          }
      }
      else if (flush === 'post' && instance) {
          instance.$once('hook:mounted', function () { return watcher.get(); });
      }
      else {
          watcher.get();
      }
      return function () {
          watcher.teardown();
      };
  }

  var activeEffectScope;
  var EffectScope = /** @class */ (function () {
      function EffectScope(detached) {
          if (detached === void 0) { detached = false; }
          this.detached = detached;
          /**
           * @internal
           */
          this.active = true;
          /**
           * @internal
           */
          this.effects = [];
          /**
           * @internal
           */
          this.cleanups = [];
          this.parent = activeEffectScope;
          if (!detached && activeEffectScope) {
              this.index =
                  (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
          }
      }
      EffectScope.prototype.run = function (fn) {
          if (this.active) {
              var currentEffectScope = activeEffectScope;
              try {
                  activeEffectScope = this;
                  return fn();
              }
              finally {
                  activeEffectScope = currentEffectScope;
              }
          }
          else {
              warn("cannot run an inactive effect scope.");
          }
      };
      /**
       * This should only be called on non-detached scopes
       * @internal
       */
      EffectScope.prototype.on = function () {
          activeEffectScope = this;
      };
      /**
       * This should only be called on non-detached scopes
       * @internal
       */
      EffectScope.prototype.off = function () {
          activeEffectScope = this.parent;
      };
      EffectScope.prototype.stop = function (fromParent) {
          if (this.active) {
              var i = void 0, l = void 0;
              for (i = 0, l = this.effects.length; i < l; i++) {
                  this.effects[i].teardown();
              }
              for (i = 0, l = this.cleanups.length; i < l; i++) {
                  this.cleanups[i]();
              }
              if (this.scopes) {
                  for (i = 0, l = this.scopes.length; i < l; i++) {
                      this.scopes[i].stop(true);
                  }
              }
              // nested scope, dereference from parent to avoid memory leaks
              if (!this.detached && this.parent && !fromParent) {
                  // optimized O(1) removal
                  var last = this.parent.scopes.pop();
                  if (last && last !== this) {
                      this.parent.scopes[this.index] = last;
                      last.index = this.index;
                  }
              }
              this.parent = undefined;
              this.active = false;
          }
      };
      return EffectScope;
  }());
  function effectScope(detached) {
      return new EffectScope(detached);
  }
  /**
   * @internal
   */
  function recordEffectScope(effect, scope) {
      if (scope === void 0) { scope = activeEffectScope; }
      if (scope && scope.active) {
          scope.effects.push(effect);
      }
  }
  function getCurrentScope() {
      return activeEffectScope;
  }
  function onScopeDispose(fn) {
      if (activeEffectScope) {
          activeEffectScope.cleanups.push(fn);
      }
      else {
          warn("onScopeDispose() is called when there is no active effect scope" +
              " to be associated with.");
      }
  }

  function provide(key, value) {
      if (!currentInstance) {
          {
              warn("provide() can only be used inside setup().");
          }
      }
      else {
          // TS doesn't allow symbol as index type
          resolveProvided(currentInstance)[key] = value;
      }
  }
  function resolveProvided(vm) {
      // by default an instance inherits its parent's provides object
      // but when it needs to provide values of its own, it creates its
      // own provides object using parent provides object as prototype.
      // this way in `inject` we can simply look up injections from direct
      // parent and let the prototype chain do the work.
      var existing = vm._provided;
      var parentProvides = vm.$parent && vm.$parent._provided;
      if (parentProvides === existing) {
          return (vm._provided = Object.create(parentProvides));
      }
      else {
          return existing;
      }
  }
  function inject(key, defaultValue, treatDefaultAsFactory) {
      if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }
      // fallback to `currentRenderingInstance` so that this can be called in
      // a functional component
      var instance = currentInstance;
      if (instance) {
          // #2400
          // to support `app.use` plugins,
          // fallback to appContext's `provides` if the instance is at root
          var provides = instance.$parent && instance.$parent._provided;
          if (provides && key in provides) {
              // TS doesn't allow symbol as index type
              return provides[key];
          }
          else if (arguments.length > 1) {
              return treatDefaultAsFactory && isFunction(defaultValue)
                  ? defaultValue.call(instance)
                  : defaultValue;
          }
          else {
              warn("injection \"".concat(String(key), "\" not found."));
          }
      }
      else {
          warn("inject() can only be used inside setup() or functional components.");
      }
  }

  var normalizeEvent = cached(function (name) {
      var passive = name.charAt(0) === '&';
      name = passive ? name.slice(1) : name;
      var once = name.charAt(0) === '~'; // Prefixed last, checked first
      name = once ? name.slice(1) : name;
      var capture = name.charAt(0) === '!';
      name = capture ? name.slice(1) : name;
      return {
          name: name,
          once: once,
          capture: capture,
          passive: passive
      };
  });
  function createFnInvoker(fns, vm) {
      function invoker() {
          var fns = invoker.fns;
          if (isArray(fns)) {
              var cloned = fns.slice();
              for (var i = 0; i < cloned.length; i++) {
                  invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler");
              }
          }
          else {
              // return handler return value for single handlers
              return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
          }
      }
      invoker.fns = fns;
      return invoker;
  }
  function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
      var name, cur, old, event;
      for (name in on) {
          cur = on[name];
          old = oldOn[name];
          event = normalizeEvent(name);
          if (isUndef(cur)) {
              warn("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm);
          }
          else if (isUndef(old)) {
              if (isUndef(cur.fns)) {
                  cur = on[name] = createFnInvoker(cur, vm);
              }
              if (isTrue(event.once)) {
                  cur = on[name] = createOnceHandler(event.name, cur, event.capture);
              }
              add(event.name, cur, event.capture, event.passive, event.params);
          }
          else if (cur !== old) {
              old.fns = cur;
              on[name] = old;
          }
      }
      for (name in oldOn) {
          if (isUndef(on[name])) {
              event = normalizeEvent(name);
              remove(event.name, oldOn[name], event.capture);
          }
      }
  }

  function mergeVNodeHook(def, hookKey, hook) {
      if (def instanceof VNode) {
          def = def.data.hook || (def.data.hook = {});
      }
      var invoker;
      var oldHook = def[hookKey];
      function wrappedHook() {
          hook.apply(this, arguments);
          // important: remove merged hook to ensure it's called only once
          // and prevent memory leak
          remove$2(invoker.fns, wrappedHook);
      }
      if (isUndef(oldHook)) {
          // no existing hook
          invoker = createFnInvoker([wrappedHook]);
      }
      else {
          /* istanbul ignore if */
          if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
              // already a merged invoker
              invoker = oldHook;
              invoker.fns.push(wrappedHook);
          }
          else {
              // existing plain hook
              invoker = createFnInvoker([oldHook, wrappedHook]);
          }
      }
      invoker.merged = true;
      def[hookKey] = invoker;
  }

  function extractPropsFromVNodeData(data, Ctor, tag) {
      // we are only extracting raw values here.
      // validation and default values are handled in the child
      // component itself.
      var propOptions = Ctor.options.props;
      if (isUndef(propOptions)) {
          return;
      }
      var res = {};
      var attrs = data.attrs, props = data.props;
      if (isDef(attrs) || isDef(props)) {
          for (var key in propOptions) {
              var altKey = hyphenate(key);
              {
                  var keyInLowerCase = key.toLowerCase();
                  if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
                      tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") +
                          "".concat(formatComponentName(
                          // @ts-expect-error tag is string
                          tag || Ctor), ", but the declared prop name is") +
                          " \"".concat(key, "\". ") +
                          "Note that HTML attributes are case-insensitive and camelCased " +
                          "props need to use their kebab-case equivalents when using in-DOM " +
                          "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\"."));
                  }
              }
              checkProp(res, props, key, altKey, true) ||
                  checkProp(res, attrs, key, altKey, false);
          }
      }
      return res;
  }
  function checkProp(res, hash, key, altKey, preserve) {
      if (isDef(hash)) {
          if (hasOwn(hash, key)) {
              res[key] = hash[key];
              if (!preserve) {
                  delete hash[key];
              }
              return true;
          }
          else if (hasOwn(hash, altKey)) {
              res[key] = hash[altKey];
              if (!preserve) {
                  delete hash[altKey];
              }
              return true;
          }
      }
      return false;
  }

  // The template compiler attempts to minimize the need for normalization by
  // statically analyzing the template at compile time.
  //
  // For plain HTML markup, normalization can be completely skipped because the
  // generated render function is guaranteed to return Array<VNode>. There are
  // two cases where extra normalization is needed:
  // 1. When the children contains components - because a functional component
  // may return an Array instead of a single root. In this case, just a simple
  // normalization is needed - if any child is an Array, we flatten the whole
  // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
  // because functional components already normalize their own children.
  function simpleNormalizeChildren(children) {
      for (var i = 0; i < children.length; i++) {
          if (isArray(children[i])) {
              return Array.prototype.concat.apply([], children);
          }
      }
      return children;
  }
  // 2. When the children contains constructs that always generated nested Arrays,
  // e.g. <template>, <slot>, v-for, or when the children is provided by user
  // with hand-written render functions / JSX. In such cases a full normalization
  // is needed to cater to all possible types of children values.
  function normalizeChildren(children) {
      return isPrimitive(children)
          ? [createTextVNode(children)]
          : isArray(children)
              ? normalizeArrayChildren(children)
              : undefined;
  }
  function isTextNode(node) {
      return isDef(node) && isDef(node.text) && isFalse(node.isComment);
  }
  function normalizeArrayChildren(children, nestedIndex) {
      var res = [];
      var i, c, lastIndex, last;
      for (i = 0; i < children.length; i++) {
          c = children[i];
          if (isUndef(c) || typeof c === 'boolean')
              continue;
          lastIndex = res.length - 1;
          last = res[lastIndex];
          //  nested
          if (isArray(c)) {
              if (c.length > 0) {
                  c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i));
                  // merge adjacent text nodes
                  if (isTextNode(c[0]) && isTextNode(last)) {
                      res[lastIndex] = createTextVNode(last.text + c[0].text);
                      c.shift();
                  }
                  res.push.apply(res, c);
              }
          }
          else if (isPrimitive(c)) {
              if (isTextNode(last)) {
                  // merge adjacent text nodes
                  // this is necessary for SSR hydration because text nodes are
                  // essentially merged when rendered to HTML strings
                  res[lastIndex] = createTextVNode(last.text + c);
              }
              else if (c !== '') {
                  // convert primitive to vnode
                  res.push(createTextVNode(c));
              }
          }
          else {
              if (isTextNode(c) && isTextNode(last)) {
                  // merge adjacent text nodes
                  res[lastIndex] = createTextVNode(last.text + c.text);
              }
              else {
                  // default key for nested array children (likely generated by v-for)
                  if (isTrue(children._isVList) &&
                      isDef(c.tag) &&
                      isUndef(c.key) &&
                      isDef(nestedIndex)) {
                      c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__");
                  }
                  res.push(c);
              }
          }
      }
      return res;
  }

  /**
   * Runtime helper for rendering v-for lists.
   */
  function renderList(val, render) {
      var ret = null, i, l, keys, key;
      if (isArray(val) || typeof val === 'string') {
          ret = new Array(val.length);
          for (i = 0, l = val.length; i < l; i++) {
              ret[i] = render(val[i], i);
          }
      }
      else if (typeof val === 'number') {
          ret = new Array(val);
          for (i = 0; i < val; i++) {
              ret[i] = render(i + 1, i);
          }
      }
      else if (isObject(val)) {
          if (hasSymbol && val[Symbol.iterator]) {
              ret = [];
              var iterator = val[Symbol.iterator]();
              var result = iterator.next();
              while (!result.done) {
                  ret.push(render(result.value, ret.length));
                  result = iterator.next();
              }
          }
          else {
              keys = Object.keys(val);
              ret = new Array(keys.length);
              for (i = 0, l = keys.length; i < l; i++) {
                  key = keys[i];
                  ret[i] = render(val[key], key, i);
              }
          }
      }
      if (!isDef(ret)) {
          ret = [];
      }
      ret._isVList = true;
      return ret;
  }

  /**
   * Runtime helper for rendering <slot>
   */
  function renderSlot(name, fallbackRender, props, bindObject) {
      var scopedSlotFn = this.$scopedSlots[name];
      var nodes;
      if (scopedSlotFn) {
          // scoped slot
          props = props || {};
          if (bindObject) {
              if (!isObject(bindObject)) {
                  warn('slot v-bind without argument expects an Object', this);
              }
              props = extend(extend({}, bindObject), props);
          }
          nodes =
              scopedSlotFn(props) ||
                  (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
      }
      else {
          nodes =
              this.$slots[name] ||
                  (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
      }
      var target = props && props.slot;
      if (target) {
          return this.$createElement('template', { slot: target }, nodes);
      }
      else {
          return nodes;
      }
  }

  /**
   * Runtime helper for resolving filters
   */
  function resolveFilter(id) {
      return resolveAsset(this.$options, 'filters', id, true) || identity;
  }

  function isKeyNotMatch(expect, actual) {
      if (isArray(expect)) {
          return expect.indexOf(actual) === -1;
      }
      else {
          return expect !== actual;
      }
  }
  /**
   * Runtime helper for checking keyCodes from config.
   * exposed as Vue.prototype._k
   * passing in eventKeyName as last argument separately for backwards compat
   */
  function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
      var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
      if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
          return isKeyNotMatch(builtInKeyName, eventKeyName);
      }
      else if (mappedKeyCode) {
          return isKeyNotMatch(mappedKeyCode, eventKeyCode);
      }
      else if (eventKeyName) {
          return hyphenate(eventKeyName) !== key;
      }
      return eventKeyCode === undefined;
  }

  /**
   * Runtime helper for merging v-bind="object" into a VNode's data.
   */
  function bindObjectProps(data, tag, value, asProp, isSync) {
      if (value) {
          if (!isObject(value)) {
              warn('v-bind without argument expects an Object or Array value', this);
          }
          else {
              if (isArray(value)) {
                  value = toObject(value);
              }
              var hash = void 0;
              var _loop_1 = function (key) {
                  if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
                      hash = data;
                  }
                  else {
                      var type = data.attrs && data.attrs.type;
                      hash =
                          asProp || config.mustUseProp(tag, type, key)
                              ? data.domProps || (data.domProps = {})
                              : data.attrs || (data.attrs = {});
                  }
                  var camelizedKey = camelize(key);
                  var hyphenatedKey = hyphenate(key);
                  if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
                      hash[key] = value[key];
                      if (isSync) {
                          var on = data.on || (data.on = {});
                          on["update:".concat(key)] = function ($event) {
                              value[key] = $event;
                          };
                      }
                  }
              };
              for (var key in value) {
                  _loop_1(key);
              }
          }
      }
      return data;
  }

  /**
   * Runtime helper for rendering static trees.
   */
  function renderStatic(index, isInFor) {
      var cached = this._staticTrees || (this._staticTrees = []);
      var tree = cached[index];
      // if has already-rendered static tree and not inside v-for,
      // we can reuse the same tree.
      if (tree && !isInFor) {
          return tree;
      }
      // otherwise, render a fresh tree.
      tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
      );
      markStatic(tree, "__static__".concat(index), false);
      return tree;
  }
  /**
   * Runtime helper for v-once.
   * Effectively it means marking the node as static with a unique key.
   */
  function markOnce(tree, index, key) {
      markStatic(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true);
      return tree;
  }
  function markStatic(tree, key, isOnce) {
      if (isArray(tree)) {
          for (var i = 0; i < tree.length; i++) {
              if (tree[i] && typeof tree[i] !== 'string') {
                  markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce);
              }
          }
      }
      else {
          markStaticNode(tree, key, isOnce);
      }
  }
  function markStaticNode(node, key, isOnce) {
      node.isStatic = true;
      node.key = key;
      node.isOnce = isOnce;
  }

  function bindObjectListeners(data, value) {
      if (value) {
          if (!isPlainObject(value)) {
              warn('v-on without argument expects an Object value', this);
          }
          else {
              var on = (data.on = data.on ? extend({}, data.on) : {});
              for (var key in value) {
                  var existing = on[key];
                  var ours = value[key];
                  on[key] = existing ? [].concat(existing, ours) : ours;
              }
          }
      }
      return data;
  }

  function resolveScopedSlots(fns, res, 
  // the following are added in 2.6
  hasDynamicKeys, contentHashKey) {
      res = res || { $stable: !hasDynamicKeys };
      for (var i = 0; i < fns.length; i++) {
          var slot = fns[i];
          if (isArray(slot)) {
              resolveScopedSlots(slot, res, hasDynamicKeys);
          }
          else if (slot) {
              // marker for reverse proxying v-slot without scope on this.$slots
              // @ts-expect-error
              if (slot.proxy) {
                  // @ts-expect-error
                  slot.fn.proxy = true;
              }
              res[slot.key] = slot.fn;
          }
      }
      if (contentHashKey) {
          res.$key = contentHashKey;
      }
      return res;
  }

  // helper to process dynamic keys for dynamic arguments in v-bind and v-on.
  function bindDynamicKeys(baseObj, values) {
      for (var i = 0; i < values.length; i += 2) {
          var key = values[i];
          if (typeof key === 'string' && key) {
              baseObj[values[i]] = values[i + 1];
          }
          else if (key !== '' && key !== null) {
              // null is a special value for explicitly removing a binding
              warn("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this);
          }
      }
      return baseObj;
  }
  // helper to dynamically append modifier runtime markers to event names.
  // ensure only append when value is already string, otherwise it will be cast
  // to string and cause the type check to miss.
  function prependModifier(value, symbol) {
      return typeof value === 'string' ? symbol + value : value;
  }

  function installRenderHelpers(target) {
      target._o = markOnce;
      target._n = toNumber;
      target._s = toString;
      target._l = renderList;
      target._t = renderSlot;
      target._q = looseEqual;
      target._i = looseIndexOf;
      target._m = renderStatic;
      target._f = resolveFilter;
      target._k = checkKeyCodes;
      target._b = bindObjectProps;
      target._v = createTextVNode;
      target._e = createEmptyVNode;
      target._u = resolveScopedSlots;
      target._g = bindObjectListeners;
      target._d = bindDynamicKeys;
      target._p = prependModifier;
  }

  /**
   * Runtime helper for resolving raw children VNodes into a slot object.
   */
  function resolveSlots(children, context) {
      if (!children || !children.length) {
          return {};
      }
      var slots = {};
      for (var i = 0, l = children.length; i < l; i++) {
          var child = children[i];
          var data = child.data;
          // remove slot attribute if the node is resolved as a Vue slot node
          if (data && data.attrs && data.attrs.slot) {
              delete data.attrs.slot;
          }
          // named slots should only be respected if the vnode was rendered in the
          // same context.
          if ((child.context === context || child.fnContext === context) &&
              data &&
              data.slot != null) {
              var name_1 = data.slot;
              var slot = slots[name_1] || (slots[name_1] = []);
              if (child.tag === 'template') {
                  slot.push.apply(slot, child.children || []);
              }
              else {
                  slot.push(child);
              }
          }
          else {
              (slots.default || (slots.default = [])).push(child);
          }
      }
      // ignore slots that contains only whitespace
      for (var name_2 in slots) {
          if (slots[name_2].every(isWhitespace)) {
              delete slots[name_2];
          }
      }
      return slots;
  }
  function isWhitespace(node) {
      return (node.isComment && !node.asyncFactory) || node.text === ' ';
  }

  function isAsyncPlaceholder(node) {
      // @ts-expect-error not really boolean type
      return node.isComment && node.asyncFactory;
  }

  function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
      var res;
      var hasNormalSlots = Object.keys(normalSlots).length > 0;
      var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
      var key = scopedSlots && scopedSlots.$key;
      if (!scopedSlots) {
          res = {};
      }
      else if (scopedSlots._normalized) {
          // fast path 1: child component re-render only, parent did not change
          return scopedSlots._normalized;
      }
      else if (isStable &&
          prevScopedSlots &&
          prevScopedSlots !== emptyObject &&
          key === prevScopedSlots.$key &&
          !hasNormalSlots &&
          !prevScopedSlots.$hasNormal) {
          // fast path 2: stable scoped slots w/ no normal slots to proxy,
          // only need to normalize once
          return prevScopedSlots;
      }
      else {
          res = {};
          for (var key_1 in scopedSlots) {
              if (scopedSlots[key_1] && key_1[0] !== '$') {
                  res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);
              }
          }
      }
      // expose normal slots on scopedSlots
      for (var key_2 in normalSlots) {
          if (!(key_2 in res)) {
              res[key_2] = proxyNormalSlot(normalSlots, key_2);
          }
      }
      // avoriaz seems to mock a non-extensible $scopedSlots object
      // and when that is passed down this would cause an error
      if (scopedSlots && Object.isExtensible(scopedSlots)) {
          scopedSlots._normalized = res;
      }
      def(res, '$stable', isStable);
      def(res, '$key', key);
      def(res, '$hasNormal', hasNormalSlots);
      return res;
  }
  function normalizeScopedSlot(vm, normalSlots, key, fn) {
      var normalized = function () {
          var cur = currentInstance;
          setCurrentInstance(vm);
          var res = arguments.length ? fn.apply(null, arguments) : fn({});
          res =
              res && typeof res === 'object' && !isArray(res)
                  ? [res] // single vnode
                  : normalizeChildren(res);
          var vnode = res && res[0];
          setCurrentInstance(cur);
          return res &&
              (!vnode ||
                  (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
              ? undefined
              : res;
      };
      // this is a slot using the new v-slot syntax without scope. although it is
      // compiled as a scoped slot, render fn users would expect it to be present
      // on this.$slots because the usage is semantically a normal slot.
      if (fn.proxy) {
          Object.defineProperty(normalSlots, key, {
              get: normalized,
              enumerable: true,
              configurable: true
          });
      }
      return normalized;
  }
  function proxyNormalSlot(slots, key) {
      return function () { return slots[key]; };
  }

  function initSetup(vm) {
      var options = vm.$options;
      var setup = options.setup;
      if (setup) {
          var ctx = (vm._setupContext = createSetupContext(vm));
          setCurrentInstance(vm);
          pushTarget();
          var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup");
          popTarget();
          setCurrentInstance();
          if (isFunction(setupResult)) {
              // render function
              // @ts-ignore
              options.render = setupResult;
          }
          else if (isObject(setupResult)) {
              // bindings
              if (setupResult instanceof VNode) {
                  warn("setup() should not return VNodes directly - " +
                      "return a render function instead.");
              }
              vm._setupState = setupResult;
              // __sfc indicates compiled bindings from <script setup>
              if (!setupResult.__sfc) {
                  for (var key in setupResult) {
                      if (!isReserved(key)) {
                          proxyWithRefUnwrap(vm, setupResult, key);
                      }
                      else {
                          warn("Avoid using variables that start with _ or $ in setup().");
                      }
                  }
              }
              else {
                  // exposed for compiled render fn
                  var proxy = (vm._setupProxy = {});
                  for (var key in setupResult) {
                      if (key !== '__sfc') {
                          proxyWithRefUnwrap(proxy, setupResult, key);
                      }
                  }
              }
          }
          else if (setupResult !== undefined) {
              warn("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult));
          }
      }
  }
  function createSetupContext(vm) {
      var exposeCalled = false;
      return {
          get attrs() {
              if (!vm._attrsProxy) {
                  var proxy = (vm._attrsProxy = {});
                  def(proxy, '_v_attr_proxy', true);
                  syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
              }
              return vm._attrsProxy;
          },
          get listeners() {
              if (!vm._listenersProxy) {
                  var proxy = (vm._listenersProxy = {});
                  syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
              }
              return vm._listenersProxy;
          },
          get slots() {
              return initSlotsProxy(vm);
          },
          emit: bind(vm.$emit, vm),
          expose: function (exposed) {
              {
                  if (exposeCalled) {
                      warn("expose() should be called only once per setup().", vm);
                  }
                  exposeCalled = true;
              }
              if (exposed) {
                  Object.keys(exposed).forEach(function (key) {
                      return proxyWithRefUnwrap(vm, exposed, key);
                  });
              }
          }
      };
  }
  function syncSetupProxy(to, from, prev, instance, type) {
      var changed = false;
      for (var key in from) {
          if (!(key in to)) {
              changed = true;
              defineProxyAttr(to, key, instance, type);
          }
          else if (from[key] !== prev[key]) {
              changed = true;
          }
      }
      for (var key in to) {
          if (!(key in from)) {
              changed = true;
              delete to[key];
          }
      }
      return changed;
  }
  function defineProxyAttr(proxy, key, instance, type) {
      Object.defineProperty(proxy, key, {
          enumerable: true,
          configurable: true,
          get: function () {
              return instance[type][key];
          }
      });
  }
  function initSlotsProxy(vm) {
      if (!vm._slotsProxy) {
          syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
      }
      return vm._slotsProxy;
  }
  function syncSetupSlots(to, from) {
      for (var key in from) {
          to[key] = from[key];
      }
      for (var key in to) {
          if (!(key in from)) {
              delete to[key];
          }
      }
  }
  /**
   * @internal use manual type def because public setup context type relies on
   * legacy VNode types
   */
  function useSlots() {
      return getContext().slots;
  }
  /**
   * @internal use manual type def because public setup context type relies on
   * legacy VNode types
   */
  function useAttrs() {
      return getContext().attrs;
  }
  /**
   * Vue 2 only
   * @internal use manual type def because public setup context type relies on
   * legacy VNode types
   */
  function useListeners() {
      return getContext().listeners;
  }
  function getContext() {
      if (!currentInstance) {
          warn("useContext() called without active instance.");
      }
      var vm = currentInstance;
      return vm._setupContext || (vm._setupContext = createSetupContext(vm));
  }
  /**
   * Runtime helper for merging default declarations. Imported by compiled code
   * only.
   * @internal
   */
  function mergeDefaults(raw, defaults) {
      var props = isArray(raw)
          ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})
          : raw;
      for (var key in defaults) {
          var opt = props[key];
          if (opt) {
              if (isArray(opt) || isFunction(opt)) {
                  props[key] = { type: opt, default: defaults[key] };
              }
              else {
                  opt.default = defaults[key];
              }
          }
          else if (opt === null) {
              props[key] = { default: defaults[key] };
          }
          else {
              warn("props default key \"".concat(key, "\" has no corresponding declaration."));
          }
      }
      return props;
  }

  function initRender(vm) {
      vm._vnode = null; // the root of the child tree
      vm._staticTrees = null; // v-once cached trees
      var options = vm.$options;
      var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
      var renderContext = parentVnode && parentVnode.context;
      vm.$slots = resolveSlots(options._renderChildren, renderContext);
      vm.$scopedSlots = parentVnode
          ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
          : emptyObject;
      // bind the createElement fn to this instance
      // so that we get proper render context inside it.
      // args order: tag, data, children, normalizationType, alwaysNormalize
      // internal version is used by render functions compiled from templates
      // @ts-expect-error
      vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };
      // normalization is always applied for the public version, used in
      // user-written render functions.
      // @ts-expect-error
      vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };
      // $attrs & $listeners are exposed for easier HOC creation.
      // they need to be reactive so that HOCs using them are always updated
      var parentData = parentVnode && parentVnode.data;
      /* istanbul ignore else */
      {
          defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {
              !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
          }, true);
          defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
              !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
          }, true);
      }
  }
  var currentRenderingInstance = null;
  function renderMixin(Vue) {
      // install runtime convenience helpers
      installRenderHelpers(Vue.prototype);
      Vue.prototype.$nextTick = function (fn) {
          return nextTick(fn, this);
      };
      Vue.prototype._render = function () {
          var vm = this;
          var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;
          if (_parentVnode && vm._isMounted) {
              vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
              if (vm._slotsProxy) {
                  syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
              }
          }
          // set parent vnode. this allows render functions to have access
          // to the data on the placeholder node.
          vm.$vnode = _parentVnode;
          // render self
          var vnode;
          try {
              // There's no need to maintain a stack because all render fns are called
              // separately from one another. Nested component's render fns are called
              // when parent component is patched.
              setCurrentInstance(vm);
              currentRenderingInstance = vm;
              vnode = render.call(vm._renderProxy, vm.$createElement);
          }
          catch (e) {
              handleError(e, vm, "render");
              // return error render result,
              // or previous vnode to prevent render error causing blank component
              /* istanbul ignore else */
              if (vm.$options.renderError) {
                  try {
                      vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
                  }
                  catch (e) {
                      handleError(e, vm, "renderError");
                      vnode = vm._vnode;
                  }
              }
              else {
                  vnode = vm._vnode;
              }
          }
          finally {
              currentRenderingInstance = null;
              setCurrentInstance();
          }
          // if the returned array contains only a single node, allow it
          if (isArray(vnode) && vnode.length === 1) {
              vnode = vnode[0];
          }
          // return empty vnode in case the render function errored out
          if (!(vnode instanceof VNode)) {
              if (isArray(vnode)) {
                  warn('Multiple root nodes returned from render function. Render function ' +
                      'should return a single root node.', vm);
              }
              vnode = createEmptyVNode();
          }
          // set parent
          vnode.parent = _parentVnode;
          return vnode;
      };
  }

  function ensureCtor(comp, base) {
      if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
          comp = comp.default;
      }
      return isObject(comp) ? base.extend(comp) : comp;
  }
  function createAsyncPlaceholder(factory, data, context, children, tag) {
      var node = createEmptyVNode();
      node.asyncFactory = factory;
      node.asyncMeta = { data: data, context: context, children: children, tag: tag };
      return node;
  }
  function resolveAsyncComponent(factory, baseCtor) {
      if (isTrue(factory.error) && isDef(factory.errorComp)) {
          return factory.errorComp;
      }
      if (isDef(factory.resolved)) {
          return factory.resolved;
      }
      var owner = currentRenderingInstance;
      if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
          // already pending
          factory.owners.push(owner);
      }
      if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
          return factory.loadingComp;
      }
      if (owner && !isDef(factory.owners)) {
          var owners_1 = (factory.owners = [owner]);
          var sync_1 = true;
          var timerLoading_1 = null;
          var timerTimeout_1 = null;
          owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });
          var forceRender_1 = function (renderCompleted) {
              for (var i = 0, l = owners_1.length; i < l; i++) {
                  owners_1[i].$forceUpdate();
              }
              if (renderCompleted) {
                  owners_1.length = 0;
                  if (timerLoading_1 !== null) {
                      clearTimeout(timerLoading_1);
                      timerLoading_1 = null;
                  }
                  if (timerTimeout_1 !== null) {
                      clearTimeout(timerTimeout_1);
                      timerTimeout_1 = null;
                  }
              }
          };
          var resolve = once(function (res) {
              // cache resolved
              factory.resolved = ensureCtor(res, baseCtor);
              // invoke callbacks only if this is not a synchronous resolve
              // (async resolves are shimmed as synchronous during SSR)
              if (!sync_1) {
                  forceRender_1(true);
              }
              else {
                  owners_1.length = 0;
              }
          });
          var reject_1 = once(function (reason) {
              warn("Failed to resolve async component: ".concat(String(factory)) +
                      (reason ? "\nReason: ".concat(reason) : ''));
              if (isDef(factory.errorComp)) {
                  factory.error = true;
                  forceRender_1(true);
              }
          });
          var res_1 = factory(resolve, reject_1);
          if (isObject(res_1)) {
              if (isPromise(res_1)) {
                  // () => Promise
                  if (isUndef(factory.resolved)) {
                      res_1.then(resolve, reject_1);
                  }
              }
              else if (isPromise(res_1.component)) {
                  res_1.component.then(resolve, reject_1);
                  if (isDef(res_1.error)) {
                      factory.errorComp = ensureCtor(res_1.error, baseCtor);
                  }
                  if (isDef(res_1.loading)) {
                      factory.loadingComp = ensureCtor(res_1.loading, baseCtor);
                      if (res_1.delay === 0) {
                          factory.loading = true;
                      }
                      else {
                          // @ts-expect-error NodeJS timeout type
                          timerLoading_1 = setTimeout(function () {
                              timerLoading_1 = null;
                              if (isUndef(factory.resolved) && isUndef(factory.error)) {
                                  factory.loading = true;
                                  forceRender_1(false);
                              }
                          }, res_1.delay || 200);
                      }
                  }
                  if (isDef(res_1.timeout)) {
                      // @ts-expect-error NodeJS timeout type
                      timerTimeout_1 = setTimeout(function () {
                          timerTimeout_1 = null;
                          if (isUndef(factory.resolved)) {
                              reject_1("timeout (".concat(res_1.timeout, "ms)") );
                          }
                      }, res_1.timeout);
                  }
              }
          }
          sync_1 = false;
          // return in case resolved synchronously
          return factory.loading ? factory.loadingComp : factory.resolved;
      }
  }

  function getFirstComponentChild(children) {
      if (isArray(children)) {
          for (var i = 0; i < children.length; i++) {
              var c = children[i];
              if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
                  return c;
              }
          }
      }
  }

  var SIMPLE_NORMALIZE = 1;
  var ALWAYS_NORMALIZE = 2;
  // wrapper function for providing a more flexible interface
  // without getting yelled at by flow
  function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
      if (isArray(data) || isPrimitive(data)) {
          normalizationType = children;
          children = data;
          data = undefined;
      }
      if (isTrue(alwaysNormalize)) {
          normalizationType = ALWAYS_NORMALIZE;
      }
      return _createElement(context, tag, data, children, normalizationType);
  }
  function _createElement(context, tag, data, children, normalizationType) {
      if (isDef(data) && isDef(data.__ob__)) {
          warn("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context);
          return createEmptyVNode();
      }
      // object syntax in v-bind
      if (isDef(data) && isDef(data.is)) {
          tag = data.is;
      }
      if (!tag) {
          // in case of component :is set to falsy value
          return createEmptyVNode();
      }
      // warn against non-primitive key
      if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
          warn('Avoid using non-primitive value as key, ' +
              'use string/number value instead.', context);
      }
      // support single function children as default scoped slot
      if (isArray(children) && isFunction(children[0])) {
          data = data || {};
          data.scopedSlots = { default: children[0] };
          children.length = 0;
      }
      if (normalizationType === ALWAYS_NORMALIZE) {
          children = normalizeChildren(children);
      }
      else if (normalizationType === SIMPLE_NORMALIZE) {
          children = simpleNormalizeChildren(children);
      }
      var vnode, ns;
      if (typeof tag === 'string') {
          var Ctor = void 0;
          ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
          if (config.isReservedTag(tag)) {
              // platform built-in elements
              if (isDef(data) &&
                  isDef(data.nativeOn) &&
                  data.tag !== 'component') {
                  warn("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context);
              }
              vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
          }
          else if ((!data || !data.pre) &&
              isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
              // component
              vnode = createComponent(Ctor, data, context, children, tag);
          }
          else {
              // unknown or unlisted namespaced elements
              // check at runtime because it may get assigned a namespace when its
              // parent normalizes children
              vnode = new VNode(tag, data, children, undefined, undefined, context);
          }
      }
      else {
          // direct component options / constructor
          vnode = createComponent(tag, data, context, children);
      }
      if (isArray(vnode)) {
          return vnode;
      }
      else if (isDef(vnode)) {
          if (isDef(ns))
              applyNS(vnode, ns);
          if (isDef(data))
              registerDeepBindings(data);
          return vnode;
      }
      else {
          return createEmptyVNode();
      }
  }
  function applyNS(vnode, ns, force) {
      vnode.ns = ns;
      if (vnode.tag === 'foreignObject') {
          // use default namespace inside foreignObject
          ns = undefined;
          force = true;
      }
      if (isDef(vnode.children)) {
          for (var i = 0, l = vnode.children.length; i < l; i++) {
              var child = vnode.children[i];
              if (isDef(child.tag) &&
                  (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
                  applyNS(child, ns, force);
              }
          }
      }
  }
  // ref #5318
  // necessary to ensure parent re-render when deep bindings like :style and
  // :class are used on slot nodes
  function registerDeepBindings(data) {
      if (isObject(data.style)) {
          traverse(data.style);
      }
      if (isObject(data.class)) {
          traverse(data.class);
      }
  }

  /**
   * @internal this function needs manual public type declaration because it relies
   * on previously manually authored types from Vue 2
   */
  function h(type, props, children) {
      if (!currentInstance) {
          warn("globally imported h() can only be invoked when there is an active " +
                  "component instance, e.g. synchronously in a component's render or setup function.");
      }
      return createElement$1(currentInstance, type, props, children, 2, true);
  }

  function handleError(err, vm, info) {
      // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
      // See: https://github.com/vuejs/vuex/issues/1505
      pushTarget();
      try {
          if (vm) {
              var cur = vm;
              while ((cur = cur.$parent)) {
                  var hooks = cur.$options.errorCaptured;
                  if (hooks) {
                      for (var i = 0; i < hooks.length; i++) {
                          try {
                              var capture = hooks[i].call(cur, err, vm, info) === false;
                              if (capture)
                                  return;
                          }
                          catch (e) {
                              globalHandleError(e, cur, 'errorCaptured hook');
                          }
                      }
                  }
              }
          }
          globalHandleError(err, vm, info);
      }
      finally {
          popTarget();
      }
  }
  function invokeWithErrorHandling(handler, context, args, vm, info) {
      var res;
      try {
          res = args ? handler.apply(context, args) : handler.call(context);
          if (res && !res._isVue && isPromise(res) && !res._handled) {
              res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
              res._handled = true;
          }
      }
      catch (e) {
          handleError(e, vm, info);
      }
      return res;
  }
  function globalHandleError(err, vm, info) {
      if (config.errorHandler) {
          try {
              return config.errorHandler.call(null, err, vm, info);
          }
          catch (e) {
              // if the user intentionally throws the original error in the handler,
              // do not log it twice
              if (e !== err) {
                  logError(e, null, 'config.errorHandler');
              }
          }
      }
      logError(err, vm, info);
  }
  function logError(err, vm, info) {
      {
          warn("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm);
      }
      /* istanbul ignore else */
      if (inBrowser && typeof console !== 'undefined') {
          console.error(err);
      }
      else {
          throw err;
      }
  }

  /* globals MutationObserver */
  var isUsingMicroTask = false;
  var callbacks = [];
  var pending = false;
  function flushCallbacks() {
      pending = false;
      var copies = callbacks.slice(0);
      callbacks.length = 0;
      for (var i = 0; i < copies.length; i++) {
          copies[i]();
      }
  }
  // Here we have async deferring wrappers using microtasks.
  // In 2.5 we used (macro) tasks (in combination with microtasks).
  // However, it has subtle problems when state is changed right before repaint
  // (e.g. #6813, out-in transitions).
  // Also, using (macro) tasks in event handler would cause some weird behaviors
  // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
  // So we now use microtasks everywhere, again.
  // A major drawback of this tradeoff is that there are some scenarios
  // where microtasks have too high a priority and fire in between supposedly
  // sequential events (e.g. #4521, #6690, which have workarounds)
  // or even between bubbling of the same event (#6566).
  var timerFunc;
  // The nextTick behavior leverages the microtask queue, which can be accessed
  // via either native Promise.then or MutationObserver.
  // MutationObserver has wider support, however it is seriously bugged in
  // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
  // completely stops working after triggering a few times... so, if native
  // Promise is available, we will use it:
  /* istanbul ignore next, $flow-disable-line */
  if (typeof Promise !== 'undefined' && isNative(Promise)) {
      var p_1 = Promise.resolve();
      timerFunc = function () {
          p_1.then(flushCallbacks);
          // In problematic UIWebViews, Promise.then doesn't completely break, but
          // it can get stuck in a weird state where callbacks are pushed into the
          // microtask queue but the queue isn't being flushed, until the browser
          // needs to do some other work, e.g. handle a timer. Therefore we can
          // "force" the microtask queue to be flushed by adding an empty timer.
          if (isIOS)
              setTimeout(noop);
      };
      isUsingMicroTask = true;
  }
  else if (!isIE &&
      typeof MutationObserver !== 'undefined' &&
      (isNative(MutationObserver) ||
          // PhantomJS and iOS 7.x
          MutationObserver.toString() === '[object MutationObserverConstructor]')) {
      // Use MutationObserver where native Promise is not available,
      // e.g. PhantomJS, iOS7, Android 4.4
      // (#6466 MutationObserver is unreliable in IE11)
      var counter_1 = 1;
      var observer = new MutationObserver(flushCallbacks);
      var textNode_1 = document.createTextNode(String(counter_1));
      observer.observe(textNode_1, {
          characterData: true
      });
      timerFunc = function () {
          counter_1 = (counter_1 + 1) % 2;
          textNode_1.data = String(counter_1);
      };
      isUsingMicroTask = true;
  }
  else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
      // Fallback to setImmediate.
      // Technically it leverages the (macro) task queue,
      // but it is still a better choice than setTimeout.
      timerFunc = function () {
          setImmediate(flushCallbacks);
      };
  }
  else {
      // Fallback to setTimeout.
      timerFunc = function () {
          setTimeout(flushCallbacks, 0);
      };
  }
  /**
   * @internal
   */
  function nextTick(cb, ctx) {
      var _resolve;
      callbacks.push(function () {
          if (cb) {
              try {
                  cb.call(ctx);
              }
              catch (e) {
                  handleError(e, ctx, 'nextTick');
              }
          }
          else if (_resolve) {
              _resolve(ctx);
          }
      });
      if (!pending) {
          pending = true;
          timerFunc();
      }
      // $flow-disable-line
      if (!cb && typeof Promise !== 'undefined') {
          return new Promise(function (resolve) {
              _resolve = resolve;
          });
      }
  }

  function useCssModule(name) {
      /* istanbul ignore else */
      {
          {
              warn("useCssModule() is not supported in the global build.");
          }
          return emptyObject;
      }
  }

  /**
   * Runtime helper for SFC's CSS variable injection feature.
   * @private
   */
  function useCssVars(getter) {
      if (!inBrowser && !false)
          return;
      var instance = currentInstance;
      if (!instance) {
          warn("useCssVars is called without current active component instance.");
          return;
      }
      watchPostEffect(function () {
          var el = instance.$el;
          var vars = getter(instance, instance._setupProxy);
          if (el && el.nodeType === 1) {
              var style = el.style;
              for (var key in vars) {
                  style.setProperty("--".concat(key), vars[key]);
              }
          }
      });
  }

  /**
   * v3-compatible async component API.
   * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
   * because it relies on existing manual types
   */
  function defineAsyncComponent(source) {
      if (isFunction(source)) {
          source = { loader: source };
      }
      var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out
      _b = source.suspensible, // undefined = never times out
      suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true
      userOnError = source.onError;
      if (suspensible) {
          warn("The suspensiblbe option for async components is not supported in Vue2. It is ignored.");
      }
      var pendingRequest = null;
      var retries = 0;
      var retry = function () {
          retries++;
          pendingRequest = null;
          return load();
      };
      var load = function () {
          var thisRequest;
          return (pendingRequest ||
              (thisRequest = pendingRequest =
                  loader()
                      .catch(function (err) {
                      err = err instanceof Error ? err : new Error(String(err));
                      if (userOnError) {
                          return new Promise(function (resolve, reject) {
                              var userRetry = function () { return resolve(retry()); };
                              var userFail = function () { return reject(err); };
                              userOnError(err, userRetry, userFail, retries + 1);
                          });
                      }
                      else {
                          throw err;
                      }
                  })
                      .then(function (comp) {
                      if (thisRequest !== pendingRequest && pendingRequest) {
                          return pendingRequest;
                      }
                      if (!comp) {
                          warn("Async component loader resolved to undefined. " +
                              "If you are using retry(), make sure to return its return value.");
                      }
                      // interop module default
                      if (comp &&
                          (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
                          comp = comp.default;
                      }
                      if (comp && !isObject(comp) && !isFunction(comp)) {
                          throw new Error("Invalid async component load result: ".concat(comp));
                      }
                      return comp;
                  })));
      };
      return function () {
          var component = load();
          return {
              component: component,
              delay: delay,
              timeout: timeout,
              error: errorComponent,
              loading: loadingComponent
          };
      };
  }

  function createLifeCycle(hookName) {
      return function (fn, target) {
          if (target === void 0) { target = currentInstance; }
          if (!target) {
              warn("".concat(formatName(hookName), " is called when there is no active component instance to be ") +
                      "associated with. " +
                      "Lifecycle injection APIs can only be used during execution of setup().");
              return;
          }
          return injectHook(target, hookName, fn);
      };
  }
  function formatName(name) {
      if (name === 'beforeDestroy') {
          name = 'beforeUnmount';
      }
      else if (name === 'destroyed') {
          name = 'unmounted';
      }
      return "on".concat(name[0].toUpperCase() + name.slice(1));
  }
  function injectHook(instance, hookName, fn) {
      var options = instance.$options;
      options[hookName] = mergeLifecycleHook(options[hookName], fn);
  }
  var onBeforeMount = createLifeCycle('beforeMount');
  var onMounted = createLifeCycle('mounted');
  var onBeforeUpdate = createLifeCycle('beforeUpdate');
  var onUpdated = createLifeCycle('updated');
  var onBeforeUnmount = createLifeCycle('beforeDestroy');
  var onUnmounted = createLifeCycle('destroyed');
  var onActivated = createLifeCycle('activated');
  var onDeactivated = createLifeCycle('deactivated');
  var onServerPrefetch = createLifeCycle('serverPrefetch');
  var onRenderTracked = createLifeCycle('renderTracked');
  var onRenderTriggered = createLifeCycle('renderTriggered');
  var injectErrorCapturedHook = createLifeCycle('errorCaptured');
  function onErrorCaptured(hook, target) {
      if (target === void 0) { target = currentInstance; }
      injectErrorCapturedHook(hook, target);
  }

  /**
   * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
   */
  var version = '2.7.14';
  /**
   * @internal type is manually declared in <root>/types/v3-define-component.d.ts
   */
  function defineComponent(options) {
      return options;
  }

  var vca = /*#__PURE__*/Object.freeze({
    __proto__: null,
    version: version,
    defineComponent: defineComponent,
    ref: ref$1,
    shallowRef: shallowRef,
    isRef: isRef,
    toRef: toRef,
    toRefs: toRefs,
    unref: unref,
    proxyRefs: proxyRefs,
    customRef: customRef,
    triggerRef: triggerRef,
    reactive: reactive,
    isReactive: isReactive,
    isReadonly: isReadonly,
    isShallow: isShallow,
    isProxy: isProxy,
    shallowReactive: shallowReactive,
    markRaw: markRaw,
    toRaw: toRaw,
    readonly: readonly,
    shallowReadonly: shallowReadonly,
    computed: computed,
    watch: watch,
    watchEffect: watchEffect,
    watchPostEffect: watchPostEffect,
    watchSyncEffect: watchSyncEffect,
    EffectScope: EffectScope,
    effectScope: effectScope,
    onScopeDispose: onScopeDispose,
    getCurrentScope: getCurrentScope,
    provide: provide,
    inject: inject,
    h: h,
    getCurrentInstance: getCurrentInstance,
    useSlots: useSlots,
    useAttrs: useAttrs,
    useListeners: useListeners,
    mergeDefaults: mergeDefaults,
    nextTick: nextTick,
    set: set,
    del: del,
    useCssModule: useCssModule,
    useCssVars: useCssVars,
    defineAsyncComponent: defineAsyncComponent,
    onBeforeMount: onBeforeMount,
    onMounted: onMounted,
    onBeforeUpdate: onBeforeUpdate,
    onUpdated: onUpdated,
    onBeforeUnmount: onBeforeUnmount,
    onUnmounted: onUnmounted,
    onActivated: onActivated,
    onDeactivated: onDeactivated,
    onServerPrefetch: onServerPrefetch,
    onRenderTracked: onRenderTracked,
    onRenderTriggered: onRenderTriggered,
    onErrorCaptured: onErrorCaptured
  });

  var seenObjects = new _Set();
  /**
   * Recursively traverse an object to evoke all converted
   * getters, so that every nested property inside the object
   * is collected as a "deep" dependency.
   */
  function traverse(val) {
      _traverse(val, seenObjects);
      seenObjects.clear();
      return val;
  }
  function _traverse(val, seen) {
      var i, keys;
      var isA = isArray(val);
      if ((!isA && !isObject(val)) ||
          val.__v_skip /* ReactiveFlags.SKIP */ ||
          Object.isFrozen(val) ||
          val instanceof VNode) {
          return;
      }
      if (val.__ob__) {
          var depId = val.__ob__.dep.id;
          if (seen.has(depId)) {
              return;
          }
          seen.add(depId);
      }
      if (isA) {
          i = val.length;
          while (i--)
              _traverse(val[i], seen);
      }
      else if (isRef(val)) {
          _traverse(val.value, seen);
      }
      else {
          keys = Object.keys(val);
          i = keys.length;
          while (i--)
              _traverse(val[keys[i]], seen);
      }
  }

  var uid$1 = 0;
  /**
   * A watcher parses an expression, collects dependencies,
   * and fires callback when the expression value changes.
   * This is used for both the $watch() api and directives.
   * @internal
   */
  var Watcher = /** @class */ (function () {
      function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {
          recordEffectScope(this, 
          // if the active effect scope is manually created (not a component scope),
          // prioritize it
          activeEffectScope && !activeEffectScope._vm
              ? activeEffectScope
              : vm
                  ? vm._scope
                  : undefined);
          if ((this.vm = vm) && isRenderWatcher) {
              vm._watcher = this;
          }
          // options
          if (options) {
              this.deep = !!options.deep;
              this.user = !!options.user;
              this.lazy = !!options.lazy;
              this.sync = !!options.sync;
              this.before = options.before;
              {
                  this.onTrack = options.onTrack;
                  this.onTrigger = options.onTrigger;
              }
          }
          else {
              this.deep = this.user = this.lazy = this.sync = false;
          }
          this.cb = cb;
          this.id = ++uid$1; // uid for batching
          this.active = true;
          this.post = false;
          this.dirty = this.lazy; // for lazy watchers
          this.deps = [];
          this.newDeps = [];
          this.depIds = new _Set();
          this.newDepIds = new _Set();
          this.expression = expOrFn.toString() ;
          // parse expression for getter
          if (isFunction(expOrFn)) {
              this.getter = expOrFn;
          }
          else {
              this.getter = parsePath(expOrFn);
              if (!this.getter) {
                  this.getter = noop;
                  warn("Failed watching path: \"".concat(expOrFn, "\" ") +
                          'Watcher only accepts simple dot-delimited paths. ' +
                          'For full control, use a function instead.', vm);
              }
          }
          this.value = this.lazy ? undefined : this.get();
      }
      /**
       * Evaluate the getter, and re-collect dependencies.
       */
      Watcher.prototype.get = function () {
          pushTarget(this);
          var value;
          var vm = this.vm;
          try {
              value = this.getter.call(vm, vm);
          }
          catch (e) {
              if (this.user) {
                  handleError(e, vm, "getter for watcher \"".concat(this.expression, "\""));
              }
              else {
                  throw e;
              }
          }
          finally {
              // "touch" every property so they are all tracked as
              // dependencies for deep watching
              if (this.deep) {
                  traverse(value);
              }
              popTarget();
              this.cleanupDeps();
          }
          return value;
      };
      /**
       * Add a dependency to this directive.
       */
      Watcher.prototype.addDep = function (dep) {
          var id = dep.id;
          if (!this.newDepIds.has(id)) {
              this.newDepIds.add(id);
              this.newDeps.push(dep);
              if (!this.depIds.has(id)) {
                  dep.addSub(this);
              }
          }
      };
      /**
       * Clean up for dependency collection.
       */
      Watcher.prototype.cleanupDeps = function () {
          var i = this.deps.length;
          while (i--) {
              var dep = this.deps[i];
              if (!this.newDepIds.has(dep.id)) {
                  dep.removeSub(this);
              }
          }
          var tmp = this.depIds;
          this.depIds = this.newDepIds;
          this.newDepIds = tmp;
          this.newDepIds.clear();
          tmp = this.deps;
          this.deps = this.newDeps;
          this.newDeps = tmp;
          this.newDeps.length = 0;
      };
      /**
       * Subscriber interface.
       * Will be called when a dependency changes.
       */
      Watcher.prototype.update = function () {
          /* istanbul ignore else */
          if (this.lazy) {
              this.dirty = true;
          }
          else if (this.sync) {
              this.run();
          }
          else {
              queueWatcher(this);
          }
      };
      /**
       * Scheduler job interface.
       * Will be called by the scheduler.
       */
      Watcher.prototype.run = function () {
          if (this.active) {
              var value = this.get();
              if (value !== this.value ||
                  // Deep watchers and watchers on Object/Arrays should fire even
                  // when the value is the same, because the value may
                  // have mutated.
                  isObject(value) ||
                  this.deep) {
                  // set new value
                  var oldValue = this.value;
                  this.value = value;
                  if (this.user) {
                      var info = "callback for watcher \"".concat(this.expression, "\"");
                      invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
                  }
                  else {
                      this.cb.call(this.vm, value, oldValue);
                  }
              }
          }
      };
      /**
       * Evaluate the value of the watcher.
       * This only gets called for lazy watchers.
       */
      Watcher.prototype.evaluate = function () {
          this.value = this.get();
          this.dirty = false;
      };
      /**
       * Depend on all deps collected by this watcher.
       */
      Watcher.prototype.depend = function () {
          var i = this.deps.length;
          while (i--) {
              this.deps[i].depend();
          }
      };
      /**
       * Remove self from all dependencies' subscriber list.
       */
      Watcher.prototype.teardown = function () {
          if (this.vm && !this.vm._isBeingDestroyed) {
              remove$2(this.vm._scope.effects, this);
          }
          if (this.active) {
              var i = this.deps.length;
              while (i--) {
                  this.deps[i].removeSub(this);
              }
              this.active = false;
              if (this.onStop) {
                  this.onStop();
              }
          }
      };
      return Watcher;
  }());

  var mark;
  var measure;
  {
      var perf_1 = inBrowser && window.performance;
      /* istanbul ignore if */
      if (perf_1 &&
          // @ts-ignore
          perf_1.mark &&
          // @ts-ignore
          perf_1.measure &&
          // @ts-ignore
          perf_1.clearMarks &&
          // @ts-ignore
          perf_1.clearMeasures) {
          mark = function (tag) { return perf_1.mark(tag); };
          measure = function (name, startTag, endTag) {
              perf_1.measure(name, startTag, endTag);
              perf_1.clearMarks(startTag);
              perf_1.clearMarks(endTag);
              // perf.clearMeasures(name)
          };
      }
  }

  function initEvents(vm) {
      vm._events = Object.create(null);
      vm._hasHookEvent = false;
      // init parent attached events
      var listeners = vm.$options._parentListeners;
      if (listeners) {
          updateComponentListeners(vm, listeners);
      }
  }
  var target$1;
  function add$1(event, fn) {
      target$1.$on(event, fn);
  }
  function remove$1(event, fn) {
      target$1.$off(event, fn);
  }
  function createOnceHandler$1(event, fn) {
      var _target = target$1;
      return function onceHandler() {
          var res = fn.apply(null, arguments);
          if (res !== null) {
              _target.$off(event, onceHandler);
          }
      };
  }
  function updateComponentListeners(vm, listeners, oldListeners) {
      target$1 = vm;
      updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
      target$1 = undefined;
  }
  function eventsMixin(Vue) {
      var hookRE = /^hook:/;
      Vue.prototype.$on = function (event, fn) {
          var vm = this;
          if (isArray(event)) {
              for (var i = 0, l = event.length; i < l; i++) {
                  vm.$on(event[i], fn);
              }
          }
          else {
              (vm._events[event] || (vm._events[event] = [])).push(fn);
              // optimize hook:event cost by using a boolean flag marked at registration
              // instead of a hash lookup
              if (hookRE.test(event)) {
                  vm._hasHookEvent = true;
              }
          }
          return vm;
      };
      Vue.prototype.$once = function (event, fn) {
          var vm = this;
          function on() {
              vm.$off(event, on);
              fn.apply(vm, arguments);
          }
          on.fn = fn;
          vm.$on(event, on);
          return vm;
      };
      Vue.prototype.$off = function (event, fn) {
          var vm = this;
          // all
          if (!arguments.length) {
              vm._events = Object.create(null);
              return vm;
          }
          // array of events
          if (isArray(event)) {
              for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {
                  vm.$off(event[i_1], fn);
              }
              return vm;
          }
          // specific event
          var cbs = vm._events[event];
          if (!cbs) {
              return vm;
          }
          if (!fn) {
              vm._events[event] = null;
              return vm;
          }
          // specific handler
          var cb;
          var i = cbs.length;
          while (i--) {
              cb = cbs[i];
              if (cb === fn || cb.fn === fn) {
                  cbs.splice(i, 1);
                  break;
              }
          }
          return vm;
      };
      Vue.prototype.$emit = function (event) {
          var vm = this;
          {
              var lowerCaseEvent = event.toLowerCase();
              if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
                  tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") +
                      "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") +
                      "Note that HTML attributes are case-insensitive and you cannot use " +
                      "v-on to listen to camelCase events when using in-DOM templates. " +
                      "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\"."));
              }
          }
          var cbs = vm._events[event];
          if (cbs) {
              cbs = cbs.length > 1 ? toArray(cbs) : cbs;
              var args = toArray(arguments, 1);
              var info = "event handler for \"".concat(event, "\"");
              for (var i = 0, l = cbs.length; i < l; i++) {
                  invokeWithErrorHandling(cbs[i], vm, args, vm, info);
              }
          }
          return vm;
      };
  }

  var activeInstance = null;
  var isUpdatingChildComponent = false;
  function setActiveInstance(vm) {
      var prevActiveInstance = activeInstance;
      activeInstance = vm;
      return function () {
          activeInstance = prevActiveInstance;
      };
  }
  function initLifecycle(vm) {
      var options = vm.$options;
      // locate first non-abstract parent
      var parent = options.parent;
      if (parent && !options.abstract) {
          while (parent.$options.abstract && parent.$parent) {
              parent = parent.$parent;
          }
          parent.$children.push(vm);
      }
      vm.$parent = parent;
      vm.$root = parent ? parent.$root : vm;
      vm.$children = [];
      vm.$refs = {};
      vm._provided = parent ? parent._provided : Object.create(null);
      vm._watcher = null;
      vm._inactive = null;
      vm._directInactive = false;
      vm._isMounted = false;
      vm._isDestroyed = false;
      vm._isBeingDestroyed = false;
  }
  function lifecycleMixin(Vue) {
      Vue.prototype._update = function (vnode, hydrating) {
          var vm = this;
          var prevEl = vm.$el;
          var prevVnode = vm._vnode;
          var restoreActiveInstance = setActiveInstance(vm);
          vm._vnode = vnode;
          // Vue.prototype.__patch__ is injected in entry points
          // based on the rendering backend used.
          if (!prevVnode) {
              // initial render
              vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
          }
          else {
              // updates
              vm.$el = vm.__patch__(prevVnode, vnode);
          }
          restoreActiveInstance();
          // update __vue__ reference
          if (prevEl) {
              prevEl.__vue__ = null;
          }
          if (vm.$el) {
              vm.$el.__vue__ = vm;
          }
          // if parent is an HOC, update its $el as well
          var wrapper = vm;
          while (wrapper &&
              wrapper.$vnode &&
              wrapper.$parent &&
              wrapper.$vnode === wrapper.$parent._vnode) {
              wrapper.$parent.$el = wrapper.$el;
              wrapper = wrapper.$parent;
          }
          // updated hook is called by the scheduler to ensure that children are
          // updated in a parent's updated hook.
      };
      Vue.prototype.$forceUpdate = function () {
          var vm = this;
          if (vm._watcher) {
              vm._watcher.update();
          }
      };
      Vue.prototype.$destroy = function () {
          var vm = this;
          if (vm._isBeingDestroyed) {
              return;
          }
          callHook$1(vm, 'beforeDestroy');
          vm._isBeingDestroyed = true;
          // remove self from parent
          var parent = vm.$parent;
          if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
              remove$2(parent.$children, vm);
          }
          // teardown scope. this includes both the render watcher and other
          // watchers created
          vm._scope.stop();
          // remove reference from data ob
          // frozen object may not have observer.
          if (vm._data.__ob__) {
              vm._data.__ob__.vmCount--;
          }
          // call the last hook...
          vm._isDestroyed = true;
          // invoke destroy hooks on current rendered tree
          vm.__patch__(vm._vnode, null);
          // fire destroyed hook
          callHook$1(vm, 'destroyed');
          // turn off all instance listeners.
          vm.$off();
          // remove __vue__ reference
          if (vm.$el) {
              vm.$el.__vue__ = null;
          }
          // release circular reference (#6759)
          if (vm.$vnode) {
              vm.$vnode.parent = null;
          }
      };
  }
  function mountComponent(vm, el, hydrating) {
      vm.$el = el;
      if (!vm.$options.render) {
          // @ts-expect-error invalid type
          vm.$options.render = createEmptyVNode;
          {
              /* istanbul ignore if */
              if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
                  vm.$options.el ||
                  el) {
                  warn('You are using the runtime-only build of Vue where the template ' +
                      'compiler is not available. Either pre-compile the templates into ' +
                      'render functions, or use the compiler-included build.', vm);
              }
              else {
                  warn('Failed to mount component: template or render function not defined.', vm);
              }
          }
      }
      callHook$1(vm, 'beforeMount');
      var updateComponent;
      /* istanbul ignore if */
      if (config.performance && mark) {
          updateComponent = function () {
              var name = vm._name;
              var id = vm._uid;
              var startTag = "vue-perf-start:".concat(id);
              var endTag = "vue-perf-end:".concat(id);
              mark(startTag);
              var vnode = vm._render();
              mark(endTag);
              measure("vue ".concat(name, " render"), startTag, endTag);
              mark(startTag);
              vm._update(vnode, hydrating);
              mark(endTag);
              measure("vue ".concat(name, " patch"), startTag, endTag);
          };
      }
      else {
          updateComponent = function () {
              vm._update(vm._render(), hydrating);
          };
      }
      var watcherOptions = {
          before: function () {
              if (vm._isMounted && !vm._isDestroyed) {
                  callHook$1(vm, 'beforeUpdate');
              }
          }
      };
      {
          watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };
          watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };
      }
      // we set this to vm._watcher inside the watcher's constructor
      // since the watcher's initial patch may call $forceUpdate (e.g. inside child
      // component's mounted hook), which relies on vm._watcher being already defined
      new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
      hydrating = false;
      // flush buffer for flush: "pre" watchers queued in setup()
      var preWatchers = vm._preWatchers;
      if (preWatchers) {
          for (var i = 0; i < preWatchers.length; i++) {
              preWatchers[i].run();
          }
      }
      // manually mounted instance, call mounted on self
      // mounted is called for render-created child components in its inserted hook
      if (vm.$vnode == null) {
          vm._isMounted = true;
          callHook$1(vm, 'mounted');
      }
      return vm;
  }
  function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
      {
          isUpdatingChildComponent = true;
      }
      // determine whether component has slot children
      // we need to do this before overwriting $options._renderChildren.
      // check if there are dynamic scopedSlots (hand-written or compiled but with
      // dynamic slot names). Static scoped slots compiled from template has the
      // "$stable" marker.
      var newScopedSlots = parentVnode.data.scopedSlots;
      var oldScopedSlots = vm.$scopedSlots;
      var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
          (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
          (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
          (!newScopedSlots && vm.$scopedSlots.$key));
      // Any static slot children from the parent may have changed during parent's
      // update. Dynamic scoped slots may also have changed. In such cases, a forced
      // update is necessary to ensure correctness.
      var needsForceUpdate = !!(renderChildren || // has new static slots
          vm.$options._renderChildren || // has old static slots
          hasDynamicScopedSlot);
      var prevVNode = vm.$vnode;
      vm.$options._parentVnode = parentVnode;
      vm.$vnode = parentVnode; // update vm's placeholder node without re-render
      if (vm._vnode) {
          // update child tree's parent
          vm._vnode.parent = parentVnode;
      }
      vm.$options._renderChildren = renderChildren;
      // update $attrs and $listeners hash
      // these are also reactive so they may trigger child update if the child
      // used them during render
      var attrs = parentVnode.data.attrs || emptyObject;
      if (vm._attrsProxy) {
          // force update if attrs are accessed and has changed since it may be
          // passed to a child component.
          if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
              needsForceUpdate = true;
          }
      }
      vm.$attrs = attrs;
      // update listeners
      listeners = listeners || emptyObject;
      var prevListeners = vm.$options._parentListeners;
      if (vm._listenersProxy) {
          syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
      }
      vm.$listeners = vm.$options._parentListeners = listeners;
      updateComponentListeners(vm, listeners, prevListeners);
      // update props
      if (propsData && vm.$options.props) {
          toggleObserving(false);
          var props = vm._props;
          var propKeys = vm.$options._propKeys || [];
          for (var i = 0; i < propKeys.length; i++) {
              var key = propKeys[i];
              var propOptions = vm.$options.props; // wtf flow?
              props[key] = validateProp(key, propOptions, propsData, vm);
          }
          toggleObserving(true);
          // keep a copy of raw propsData
          vm.$options.propsData = propsData;
      }
      // resolve slots + force update if has children
      if (needsForceUpdate) {
          vm.$slots = resolveSlots(renderChildren, parentVnode.context);
          vm.$forceUpdate();
      }
      {
          isUpdatingChildComponent = false;
      }
  }
  function isInInactiveTree(vm) {
      while (vm && (vm = vm.$parent)) {
          if (vm._inactive)
              return true;
      }
      return false;
  }
  function activateChildComponent(vm, direct) {
      if (direct) {
          vm._directInactive = false;
          if (isInInactiveTree(vm)) {
              return;
          }
      }
      else if (vm._directInactive) {
          return;
      }
      if (vm._inactive || vm._inactive === null) {
          vm._inactive = false;
          for (var i = 0; i < vm.$children.length; i++) {
              activateChildComponent(vm.$children[i]);
          }
          callHook$1(vm, 'activated');
      }
  }
  function deactivateChildComponent(vm, direct) {
      if (direct) {
          vm._directInactive = true;
          if (isInInactiveTree(vm)) {
              return;
          }
      }
      if (!vm._inactive) {
          vm._inactive = true;
          for (var i = 0; i < vm.$children.length; i++) {
              deactivateChildComponent(vm.$children[i]);
          }
          callHook$1(vm, 'deactivated');
      }
  }
  function callHook$1(vm, hook, args, setContext) {
      if (setContext === void 0) { setContext = true; }
      // #7573 disable dep collection when invoking lifecycle hooks
      pushTarget();
      var prev = currentInstance;
      setContext && setCurrentInstance(vm);
      var handlers = vm.$options[hook];
      var info = "".concat(hook, " hook");
      if (handlers) {
          for (var i = 0, j = handlers.length; i < j; i++) {
              invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
          }
      }
      if (vm._hasHookEvent) {
          vm.$emit('hook:' + hook);
      }
      setContext && setCurrentInstance(prev);
      popTarget();
  }

  var MAX_UPDATE_COUNT = 100;
  var queue = [];
  var activatedChildren = [];
  var has = {};
  var circular = {};
  var waiting = false;
  var flushing = false;
  var index = 0;
  /**
   * Reset the scheduler's state.
   */
  function resetSchedulerState() {
      index = queue.length = activatedChildren.length = 0;
      has = {};
      {
          circular = {};
      }
      waiting = flushing = false;
  }
  // Async edge case #6566 requires saving the timestamp when event listeners are
  // attached. However, calling performance.now() has a perf overhead especially
  // if the page has thousands of event listeners. Instead, we take a timestamp
  // every time the scheduler flushes and use that for all event listeners
  // attached during that flush.
  var currentFlushTimestamp = 0;
  // Async edge case fix requires storing an event listener's attach timestamp.
  var getNow = Date.now;
  // Determine what event timestamp the browser is using. Annoyingly, the
  // timestamp can either be hi-res (relative to page load) or low-res
  // (relative to UNIX epoch), so in order to compare time we have to use the
  // same timestamp type when saving the flush timestamp.
  // All IE versions use low-res event timestamps, and have problematic clock
  // implementations (#9632)
  if (inBrowser && !isIE) {
      var performance_1 = window.performance;
      if (performance_1 &&
          typeof performance_1.now === 'function' &&
          getNow() > document.createEvent('Event').timeStamp) {
          // if the event timestamp, although evaluated AFTER the Date.now(), is
          // smaller than it, it means the event is using a hi-res timestamp,
          // and we need to use the hi-res version for event listener timestamps as
          // well.
          getNow = function () { return performance_1.now(); };
      }
  }
  var sortCompareFn = function (a, b) {
      if (a.post) {
          if (!b.post)
              return 1;
      }
      else if (b.post) {
          return -1;
      }
      return a.id - b.id;
  };
  /**
   * Flush both queues and run the watchers.
   */
  function flushSchedulerQueue() {
      currentFlushTimestamp = getNow();
      flushing = true;
      var watcher, id;
      // Sort queue before flush.
      // This ensures that:
      // 1. Components are updated from parent to child. (because parent is always
      //    created before the child)
      // 2. A component's user watchers are run before its render watcher (because
      //    user watchers are created before the render watcher)
      // 3. If a component is destroyed during a parent component's watcher run,
      //    its watchers can be skipped.
      queue.sort(sortCompareFn);
      // do not cache length because more watchers might be pushed
      // as we run existing watchers
      for (index = 0; index < queue.length; index++) {
          watcher = queue[index];
          if (watcher.before) {
              watcher.before();
          }
          id = watcher.id;
          has[id] = null;
          watcher.run();
          // in dev build, check and stop circular updates.
          if (has[id] != null) {
              circular[id] = (circular[id] || 0) + 1;
              if (circular[id] > MAX_UPDATE_COUNT) {
                  warn('You may have an infinite update loop ' +
                      (watcher.user
                          ? "in watcher with expression \"".concat(watcher.expression, "\"")
                          : "in a component render function."), watcher.vm);
                  break;
              }
          }
      }
      // keep copies of post queues before resetting state
      var activatedQueue = activatedChildren.slice();
      var updatedQueue = queue.slice();
      resetSchedulerState();
      // call component updated and activated hooks
      callActivatedHooks(activatedQueue);
      callUpdatedHooks(updatedQueue);
      cleanupDeps();
      // devtool hook
      /* istanbul ignore if */
      if (devtools && config.devtools) {
          devtools.emit('flush');
      }
  }
  function callUpdatedHooks(queue) {
      var i = queue.length;
      while (i--) {
          var watcher = queue[i];
          var vm = watcher.vm;
          if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
              callHook$1(vm, 'updated');
          }
      }
  }
  /**
   * Queue a kept-alive component that was activated during patch.
   * The queue will be processed after the entire tree has been patched.
   */
  function queueActivatedComponent(vm) {
      // setting _inactive to false here so that a render function can
      // rely on checking whether it's in an inactive tree (e.g. router-view)
      vm._inactive = false;
      activatedChildren.push(vm);
  }
  function callActivatedHooks(queue) {
      for (var i = 0; i < queue.length; i++) {
          queue[i]._inactive = true;
          activateChildComponent(queue[i], true /* true */);
      }
  }
  /**
   * Push a watcher into the watcher queue.
   * Jobs with duplicate IDs will be skipped unless it's
   * pushed when the queue is being flushed.
   */
  function queueWatcher(watcher) {
      var id = watcher.id;
      if (has[id] != null) {
          return;
      }
      if (watcher === Dep.target && watcher.noRecurse) {
          return;
      }
      has[id] = true;
      if (!flushing) {
          queue.push(watcher);
      }
      else {
          // if already flushing, splice the watcher based on its id
          // if already past its id, it will be run next immediately.
          var i = queue.length - 1;
          while (i > index && queue[i].id > watcher.id) {
              i--;
          }
          queue.splice(i + 1, 0, watcher);
      }
      // queue the flush
      if (!waiting) {
          waiting = true;
          if (!config.async) {
              flushSchedulerQueue();
              return;
          }
          nextTick(flushSchedulerQueue);
      }
  }

  function initProvide(vm) {
      var provideOption = vm.$options.provide;
      if (provideOption) {
          var provided = isFunction(provideOption)
              ? provideOption.call(vm)
              : provideOption;
          if (!isObject(provided)) {
              return;
          }
          var source = resolveProvided(vm);
          // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
          // iterate the keys ourselves.
          var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
          for (var i = 0; i < keys.length; i++) {
              var key = keys[i];
              Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
          }
      }
  }
  function initInjections(vm) {
      var result = resolveInject(vm.$options.inject, vm);
      if (result) {
          toggleObserving(false);
          Object.keys(result).forEach(function (key) {
              /* istanbul ignore else */
              {
                  defineReactive(vm, key, result[key], function () {
                      warn("Avoid mutating an injected value directly since the changes will be " +
                          "overwritten whenever the provided component re-renders. " +
                          "injection being mutated: \"".concat(key, "\""), vm);
                  });
              }
          });
          toggleObserving(true);
      }
  }
  function resolveInject(inject, vm) {
      if (inject) {
          // inject is :any because flow is not smart enough to figure out cached
          var result = Object.create(null);
          var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
          for (var i = 0; i < keys.length; i++) {
              var key = keys[i];
              // #6574 in case the inject object is observed...
              if (key === '__ob__')
                  continue;
              var provideKey = inject[key].from;
              if (provideKey in vm._provided) {
                  result[key] = vm._provided[provideKey];
              }
              else if ('default' in inject[key]) {
                  var provideDefault = inject[key].default;
                  result[key] = isFunction(provideDefault)
                      ? provideDefault.call(vm)
                      : provideDefault;
              }
              else {
                  warn("Injection \"".concat(key, "\" not found"), vm);
              }
          }
          return result;
      }
  }

  function FunctionalRenderContext(data, props, children, parent, Ctor) {
      var _this = this;
      var options = Ctor.options;
      // ensure the createElement function in functional components
      // gets a unique context - this is necessary for correct named slot check
      var contextVm;
      if (hasOwn(parent, '_uid')) {
          contextVm = Object.create(parent);
          contextVm._original = parent;
      }
      else {
          // the context vm passed in is a functional context as well.
          // in this case we want to make sure we are able to get a hold to the
          // real context instance.
          contextVm = parent;
          // @ts-ignore
          parent = parent._original;
      }
      var isCompiled = isTrue(options._compiled);
      var needNormalization = !isCompiled;
      this.data = data;
      this.props = props;
      this.children = children;
      this.parent = parent;
      this.listeners = data.on || emptyObject;
      this.injections = resolveInject(options.inject, parent);
      this.slots = function () {
          if (!_this.$slots) {
              normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));
          }
          return _this.$slots;
      };
      Object.defineProperty(this, 'scopedSlots', {
          enumerable: true,
          get: function () {
              return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
          }
      });
      // support for compiled functional template
      if (isCompiled) {
          // exposing $options for renderStatic()
          this.$options = options;
          // pre-resolve slots for renderSlot()
          this.$slots = this.slots();
          this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
      }
      if (options._scopeId) {
          this._c = function (a, b, c, d) {
              var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
              if (vnode && !isArray(vnode)) {
                  vnode.fnScopeId = options._scopeId;
                  vnode.fnContext = parent;
              }
              return vnode;
          };
      }
      else {
          this._c = function (a, b, c, d) {
              return createElement$1(contextVm, a, b, c, d, needNormalization);
          };
      }
  }
  installRenderHelpers(FunctionalRenderContext.prototype);
  function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
      var options = Ctor.options;
      var props = {};
      var propOptions = options.props;
      if (isDef(propOptions)) {
          for (var key in propOptions) {
              props[key] = validateProp(key, propOptions, propsData || emptyObject);
          }
      }
      else {
          if (isDef(data.attrs))
              mergeProps(props, data.attrs);
          if (isDef(data.props))
              mergeProps(props, data.props);
      }
      var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
      var vnode = options.render.call(null, renderContext._c, renderContext);
      if (vnode instanceof VNode) {
          return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
      }
      else if (isArray(vnode)) {
          var vnodes = normalizeChildren(vnode) || [];
          var res = new Array(vnodes.length);
          for (var i = 0; i < vnodes.length; i++) {
              res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
          }
          return res;
      }
  }
  function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
      // #7817 clone node before setting fnContext, otherwise if the node is reused
      // (e.g. it was from a cached normal slot) the fnContext causes named slots
      // that should not be matched to match.
      var clone = cloneVNode(vnode);
      clone.fnContext = contextVm;
      clone.fnOptions = options;
      {
          (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
              renderContext;
      }
      if (data.slot) {
          (clone.data || (clone.data = {})).slot = data.slot;
      }
      return clone;
  }
  function mergeProps(to, from) {
      for (var key in from) {
          to[camelize(key)] = from[key];
      }
  }

  function getComponentName(options) {
      return options.name || options.__name || options._componentTag;
  }
  // inline hooks to be invoked on component VNodes during patch
  var componentVNodeHooks = {
      init: function (vnode, hydrating) {
          if (vnode.componentInstance &&
              !vnode.componentInstance._isDestroyed &&
              vnode.data.keepAlive) {
              // kept-alive components, treat as a patch
              var mountedNode = vnode; // work around flow
              componentVNodeHooks.prepatch(mountedNode, mountedNode);
          }
          else {
              var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
              child.$mount(hydrating ? vnode.elm : undefined, hydrating);
          }
      },
      prepatch: function (oldVnode, vnode) {
          var options = vnode.componentOptions;
          var child = (vnode.componentInstance = oldVnode.componentInstance);
          updateChildComponent(child, options.propsData, // updated props
          options.listeners, // updated listeners
          vnode, // new parent vnode
          options.children // new children
          );
      },
      insert: function (vnode) {
          var context = vnode.context, componentInstance = vnode.componentInstance;
          if (!componentInstance._isMounted) {
              componentInstance._isMounted = true;
              callHook$1(componentInstance, 'mounted');
          }
          if (vnode.data.keepAlive) {
              if (context._isMounted) {
                  // vue-router#1212
                  // During updates, a kept-alive component's child components may
                  // change, so directly walking the tree here may call activated hooks
                  // on incorrect children. Instead we push them into a queue which will
                  // be processed after the whole patch process ended.
                  queueActivatedComponent(componentInstance);
              }
              else {
                  activateChildComponent(componentInstance, true /* direct */);
              }
          }
      },
      destroy: function (vnode) {
          var componentInstance = vnode.componentInstance;
          if (!componentInstance._isDestroyed) {
              if (!vnode.data.keepAlive) {
                  componentInstance.$destroy();
              }
              else {
                  deactivateChildComponent(componentInstance, true /* direct */);
              }
          }
      }
  };
  var hooksToMerge = Object.keys(componentVNodeHooks);
  function createComponent(Ctor, data, context, children, tag) {
      if (isUndef(Ctor)) {
          return;
      }
      var baseCtor = context.$options._base;
      // plain options object: turn it into a constructor
      if (isObject(Ctor)) {
          Ctor = baseCtor.extend(Ctor);
      }
      // if at this stage it's not a constructor or an async component factory,
      // reject.
      if (typeof Ctor !== 'function') {
          {
              warn("Invalid Component definition: ".concat(String(Ctor)), context);
          }
          return;
      }
      // async component
      var asyncFactory;
      // @ts-expect-error
      if (isUndef(Ctor.cid)) {
          asyncFactory = Ctor;
          Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
          if (Ctor === undefined) {
              // return a placeholder node for async component, which is rendered
              // as a comment node but preserves all the raw information for the node.
              // the information will be used for async server-rendering and hydration.
              return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
          }
      }
      data = data || {};
      // resolve constructor options in case global mixins are applied after
      // component constructor creation
      resolveConstructorOptions(Ctor);
      // transform component v-model data into props & events
      if (isDef(data.model)) {
          // @ts-expect-error
          transformModel(Ctor.options, data);
      }
      // extract props
      // @ts-expect-error
      var propsData = extractPropsFromVNodeData(data, Ctor, tag);
      // functional component
      // @ts-expect-error
      if (isTrue(Ctor.options.functional)) {
          return createFunctionalComponent(Ctor, propsData, data, context, children);
      }
      // extract listeners, since these needs to be treated as
      // child component listeners instead of DOM listeners
      var listeners = data.on;
      // replace with listeners with .native modifier
      // so it gets processed during parent component patch.
      data.on = data.nativeOn;
      // @ts-expect-error
      if (isTrue(Ctor.options.abstract)) {
          // abstract components do not keep anything
          // other than props & listeners & slot
          // work around flow
          var slot = data.slot;
          data = {};
          if (slot) {
              data.slot = slot;
          }
      }
      // install component management hooks onto the placeholder node
      installComponentHooks(data);
      // return a placeholder vnode
      // @ts-expect-error
      var name = getComponentName(Ctor.options) || tag;
      var vnode = new VNode(
      // @ts-expect-error
      "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 
      // @ts-expect-error
      { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);
      return vnode;
  }
  function createComponentInstanceForVnode(
  // we know it's MountedComponentVNode but flow doesn't
  vnode, 
  // activeInstance in lifecycle state
  parent) {
      var options = {
          _isComponent: true,
          _parentVnode: vnode,
          parent: parent
      };
      // check inline-template render functions
      var inlineTemplate = vnode.data.inlineTemplate;
      if (isDef(inlineTemplate)) {
          options.render = inlineTemplate.render;
          options.staticRenderFns = inlineTemplate.staticRenderFns;
      }
      return new vnode.componentOptions.Ctor(options);
  }
  function installComponentHooks(data) {
      var hooks = data.hook || (data.hook = {});
      for (var i = 0; i < hooksToMerge.length; i++) {
          var key = hooksToMerge[i];
          var existing = hooks[key];
          var toMerge = componentVNodeHooks[key];
          // @ts-expect-error
          if (existing !== toMerge && !(existing && existing._merged)) {
              hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
          }
      }
  }
  function mergeHook(f1, f2) {
      var merged = function (a, b) {
          // flow complains about extra args which is why we use any
          f1(a, b);
          f2(a, b);
      };
      merged._merged = true;
      return merged;
  }
  // transform component v-model info (value and callback) into
  // prop and event handler respectively.
  function transformModel(options, data) {
      var prop = (options.model && options.model.prop) || 'value';
      var event = (options.model && options.model.event) || 'input';
      (data.attrs || (data.attrs = {}))[prop] = data.model.value;
      var on = data.on || (data.on = {});
      var existing = on[event];
      var callback = data.model.callback;
      if (isDef(existing)) {
          if (isArray(existing)
              ? existing.indexOf(callback) === -1
              : existing !== callback) {
              on[event] = [callback].concat(existing);
          }
      }
      else {
          on[event] = callback;
      }
  }

  var warn = noop;
  var tip = noop;
  var generateComponentTrace; // work around flow check
  var formatComponentName;
  {
      var hasConsole_1 = typeof console !== 'undefined';
      var classifyRE_1 = /(?:^|[-_])(\w)/g;
      var classify_1 = function (str) {
          return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');
      };
      warn = function (msg, vm) {
          if (vm === void 0) { vm = currentInstance; }
          var trace = vm ? generateComponentTrace(vm) : '';
          if (config.warnHandler) {
              config.warnHandler.call(null, msg, vm, trace);
          }
          else if (hasConsole_1 && !config.silent) {
              console.error("[Vue warn]: ".concat(msg).concat(trace));
          }
      };
      tip = function (msg, vm) {
          if (hasConsole_1 && !config.silent) {
              console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : ''));
          }
      };
      formatComponentName = function (vm, includeFile) {
          if (vm.$root === vm) {
              return '<Root>';
          }
          var options = isFunction(vm) && vm.cid != null
              ? vm.options
              : vm._isVue
                  ? vm.$options || vm.constructor.options
                  : vm;
          var name = getComponentName(options);
          var file = options.__file;
          if (!name && file) {
              var match = file.match(/([^/\\]+)\.vue$/);
              name = match && match[1];
          }
          return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") +
              (file && includeFile !== false ? " at ".concat(file) : ''));
      };
      var repeat_1 = function (str, n) {
          var res = '';
          while (n) {
              if (n % 2 === 1)
                  res += str;
              if (n > 1)
                  str += str;
              n >>= 1;
          }
          return res;
      };
      generateComponentTrace = function (vm) {
          if (vm._isVue && vm.$parent) {
              var tree = [];
              var currentRecursiveSequence = 0;
              while (vm) {
                  if (tree.length > 0) {
                      var last = tree[tree.length - 1];
                      if (last.constructor === vm.constructor) {
                          currentRecursiveSequence++;
                          vm = vm.$parent;
                          continue;
                      }
                      else if (currentRecursiveSequence > 0) {
                          tree[tree.length - 1] = [last, currentRecursiveSequence];
                          currentRecursiveSequence = 0;
                      }
                  }
                  tree.push(vm);
                  vm = vm.$parent;
              }
              return ('\n\nfound in\n\n' +
                  tree
                      .map(function (vm, i) {
                      return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)
                          ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)")
                          : formatComponentName(vm));
                  })
                      .join('\n'));
          }
          else {
              return "\n\n(found in ".concat(formatComponentName(vm), ")");
          }
      };
  }

  /**
   * Option overwriting strategies are functions that handle
   * how to merge a parent option value and a child option
   * value into the final value.
   */
  var strats = config.optionMergeStrategies;
  /**
   * Options with restrictions
   */
  {
      strats.el = strats.propsData = function (parent, child, vm, key) {
          if (!vm) {
              warn("option \"".concat(key, "\" can only be used during instance ") +
                  'creation with the `new` keyword.');
          }
          return defaultStrat(parent, child);
      };
  }
  /**
   * Helper that recursively merges two data objects together.
   */
  function mergeData(to, from, recursive) {
      if (recursive === void 0) { recursive = true; }
      if (!from)
          return to;
      var key, toVal, fromVal;
      var keys = hasSymbol
          ? Reflect.ownKeys(from)
          : Object.keys(from);
      for (var i = 0; i < keys.length; i++) {
          key = keys[i];
          // in case the object is already observed...
          if (key === '__ob__')
              continue;
          toVal = to[key];
          fromVal = from[key];
          if (!recursive || !hasOwn(to, key)) {
              set(to, key, fromVal);
          }
          else if (toVal !== fromVal &&
              isPlainObject(toVal) &&
              isPlainObject(fromVal)) {
              mergeData(toVal, fromVal);
          }
      }
      return to;
  }
  /**
   * Data
   */
  function mergeDataOrFn(parentVal, childVal, vm) {
      if (!vm) {
          // in a Vue.extend merge, both should be functions
          if (!childVal) {
              return parentVal;
          }
          if (!parentVal) {
              return childVal;
          }
          // when parentVal & childVal are both present,
          // we need to return a function that returns the
          // merged result of both functions... no need to
          // check if parentVal is a function here because
          // it has to be a function to pass previous merges.
          return function mergedDataFn() {
              return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
          };
      }
      else {
          return function mergedInstanceDataFn() {
              // instance merge
              var instanceData = isFunction(childVal)
                  ? childVal.call(vm, vm)
                  : childVal;
              var defaultData = isFunction(parentVal)
                  ? parentVal.call(vm, vm)
                  : parentVal;
              if (instanceData) {
                  return mergeData(instanceData, defaultData);
              }
              else {
                  return defaultData;
              }
          };
      }
  }
  strats.data = function (parentVal, childVal, vm) {
      if (!vm) {
          if (childVal && typeof childVal !== 'function') {
              warn('The "data" option should be a function ' +
                      'that returns a per-instance value in component ' +
                      'definitions.', vm);
              return parentVal;
          }
          return mergeDataOrFn(parentVal, childVal);
      }
      return mergeDataOrFn(parentVal, childVal, vm);
  };
  /**
   * Hooks and props are merged as arrays.
   */
  function mergeLifecycleHook(parentVal, childVal) {
      var res = childVal
          ? parentVal
              ? parentVal.concat(childVal)
              : isArray(childVal)
                  ? childVal
                  : [childVal]
          : parentVal;
      return res ? dedupeHooks(res) : res;
  }
  function dedupeHooks(hooks) {
      var res = [];
      for (var i = 0; i < hooks.length; i++) {
          if (res.indexOf(hooks[i]) === -1) {
              res.push(hooks[i]);
          }
      }
      return res;
  }
  LIFECYCLE_HOOKS.forEach(function (hook) {
      strats[hook] = mergeLifecycleHook;
  });
  /**
   * Assets
   *
   * When a vm is present (instance creation), we need to do
   * a three-way merge between constructor options, instance
   * options and parent options.
   */
  function mergeAssets(parentVal, childVal, vm, key) {
      var res = Object.create(parentVal || null);
      if (childVal) {
          assertObjectType(key, childVal, vm);
          return extend(res, childVal);
      }
      else {
          return res;
      }
  }
  ASSET_TYPES.forEach(function (type) {
      strats[type + 's'] = mergeAssets;
  });
  /**
   * Watchers.
   *
   * Watchers hashes should not overwrite one
   * another, so we merge them as arrays.
   */
  strats.watch = function (parentVal, childVal, vm, key) {
      // work around Firefox's Object.prototype.watch...
      //@ts-expect-error work around
      if (parentVal === nativeWatch)
          parentVal = undefined;
      //@ts-expect-error work around
      if (childVal === nativeWatch)
          childVal = undefined;
      /* istanbul ignore if */
      if (!childVal)
          return Object.create(parentVal || null);
      {
          assertObjectType(key, childVal, vm);
      }
      if (!parentVal)
          return childVal;
      var ret = {};
      extend(ret, parentVal);
      for (var key_1 in childVal) {
          var parent_1 = ret[key_1];
          var child = childVal[key_1];
          if (parent_1 && !isArray(parent_1)) {
              parent_1 = [parent_1];
          }
          ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];
      }
      return ret;
  };
  /**
   * Other object hashes.
   */
  strats.props =
      strats.methods =
          strats.inject =
              strats.computed =
                  function (parentVal, childVal, vm, key) {
                      if (childVal && true) {
                          assertObjectType(key, childVal, vm);
                      }
                      if (!parentVal)
                          return childVal;
                      var ret = Object.create(null);
                      extend(ret, parentVal);
                      if (childVal)
                          extend(ret, childVal);
                      return ret;
                  };
  strats.provide = function (parentVal, childVal) {
      if (!parentVal)
          return childVal;
      return function () {
          var ret = Object.create(null);
          mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
          if (childVal) {
              mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
              );
          }
          return ret;
      };
  };
  /**
   * Default strategy.
   */
  var defaultStrat = function (parentVal, childVal) {
      return childVal === undefined ? parentVal : childVal;
  };
  /**
   * Validate component names
   */
  function checkComponents(options) {
      for (var key in options.components) {
          validateComponentName(key);
      }
  }
  function validateComponentName(name) {
      if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) {
          warn('Invalid component name: "' +
              name +
              '". Component names ' +
              'should conform to valid custom element name in html5 specification.');
      }
      if (isBuiltInTag(name) || config.isReservedTag(name)) {
          warn('Do not use built-in or reserved HTML elements as component ' +
              'id: ' +
              name);
      }
  }
  /**
   * Ensure all props option syntax are normalized into the
   * Object-based format.
   */
  function normalizeProps(options, vm) {
      var props = options.props;
      if (!props)
          return;
      var res = {};
      var i, val, name;
      if (isArray(props)) {
          i = props.length;
          while (i--) {
              val = props[i];
              if (typeof val === 'string') {
                  name = camelize(val);
                  res[name] = { type: null };
              }
              else {
                  warn('props must be strings when using array syntax.');
              }
          }
      }
      else if (isPlainObject(props)) {
          for (var key in props) {
              val = props[key];
              name = camelize(key);
              res[name] = isPlainObject(val) ? val : { type: val };
          }
      }
      else {
          warn("Invalid value for option \"props\": expected an Array or an Object, " +
              "but got ".concat(toRawType(props), "."), vm);
      }
      options.props = res;
  }
  /**
   * Normalize all injections into Object-based format
   */
  function normalizeInject(options, vm) {
      var inject = options.inject;
      if (!inject)
          return;
      var normalized = (options.inject = {});
      if (isArray(inject)) {
          for (var i = 0; i < inject.length; i++) {
              normalized[inject[i]] = { from: inject[i] };
          }
      }
      else if (isPlainObject(inject)) {
          for (var key in inject) {
              var val = inject[key];
              normalized[key] = isPlainObject(val)
                  ? extend({ from: key }, val)
                  : { from: val };
          }
      }
      else {
          warn("Invalid value for option \"inject\": expected an Array or an Object, " +
              "but got ".concat(toRawType(inject), "."), vm);
      }
  }
  /**
   * Normalize raw function directives into object format.
   */
  function normalizeDirectives$1(options) {
      var dirs = options.directives;
      if (dirs) {
          for (var key in dirs) {
              var def = dirs[key];
              if (isFunction(def)) {
                  dirs[key] = { bind: def, update: def };
              }
          }
      }
  }
  function assertObjectType(name, value, vm) {
      if (!isPlainObject(value)) {
          warn("Invalid value for option \"".concat(name, "\": expected an Object, ") +
              "but got ".concat(toRawType(value), "."), vm);
      }
  }
  /**
   * Merge two option objects into a new one.
   * Core utility used in both instantiation and inheritance.
   */
  function mergeOptions(parent, child, vm) {
      {
          checkComponents(child);
      }
      if (isFunction(child)) {
          // @ts-expect-error
          child = child.options;
      }
      normalizeProps(child, vm);
      normalizeInject(child, vm);
      normalizeDirectives$1(child);
      // Apply extends and mixins on the child options,
      // but only if it is a raw options object that isn't
      // the result of another mergeOptions call.
      // Only merged options has the _base property.
      if (!child._base) {
          if (child.extends) {
              parent = mergeOptions(parent, child.extends, vm);
          }
          if (child.mixins) {
              for (var i = 0, l = child.mixins.length; i < l; i++) {
                  parent = mergeOptions(parent, child.mixins[i], vm);
              }
          }
      }
      var options = {};
      var key;
      for (key in parent) {
          mergeField(key);
      }
      for (key in child) {
          if (!hasOwn(parent, key)) {
              mergeField(key);
          }
      }
      function mergeField(key) {
          var strat = strats[key] || defaultStrat;
          options[key] = strat(parent[key], child[key], vm, key);
      }
      return options;
  }
  /**
   * Resolve an asset.
   * This function is used because child instances need access
   * to assets defined in its ancestor chain.
   */
  function resolveAsset(options, type, id, warnMissing) {
      /* istanbul ignore if */
      if (typeof id !== 'string') {
          return;
      }
      var assets = options[type];
      // check local registration variations first
      if (hasOwn(assets, id))
          return assets[id];
      var camelizedId = camelize(id);
      if (hasOwn(assets, camelizedId))
          return assets[camelizedId];
      var PascalCaseId = capitalize(camelizedId);
      if (hasOwn(assets, PascalCaseId))
          return assets[PascalCaseId];
      // fallback to prototype chain
      var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
      if (warnMissing && !res) {
          warn('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
      }
      return res;
  }

  function validateProp(key, propOptions, propsData, vm) {
      var prop = propOptions[key];
      var absent = !hasOwn(propsData, key);
      var value = propsData[key];
      // boolean casting
      var booleanIndex = getTypeIndex(Boolean, prop.type);
      if (booleanIndex > -1) {
          if (absent && !hasOwn(prop, 'default')) {
              value = false;
          }
          else if (value === '' || value === hyphenate(key)) {
              // only cast empty string / same name to boolean if
              // boolean has higher priority
              var stringIndex = getTypeIndex(String, prop.type);
              if (stringIndex < 0 || booleanIndex < stringIndex) {
                  value = true;
              }
          }
      }
      // check default value
      if (value === undefined) {
          value = getPropDefaultValue(vm, prop, key);
          // since the default value is a fresh copy,
          // make sure to observe it.
          var prevShouldObserve = shouldObserve;
          toggleObserving(true);
          observe(value);
          toggleObserving(prevShouldObserve);
      }
      {
          assertProp(prop, key, value, vm, absent);
      }
      return value;
  }
  /**
   * Get the default value of a prop.
   */
  function getPropDefaultValue(vm, prop, key) {
      // no default, return undefined
      if (!hasOwn(prop, 'default')) {
          return undefined;
      }
      var def = prop.default;
      // warn against non-factory defaults for Object & Array
      if (isObject(def)) {
          warn('Invalid default value for prop "' +
              key +
              '": ' +
              'Props with type Object/Array must use a factory function ' +
              'to return the default value.', vm);
      }
      // the raw prop value was also undefined from previous render,
      // return previous default value to avoid unnecessary watcher trigger
      if (vm &&
          vm.$options.propsData &&
          vm.$options.propsData[key] === undefined &&
          vm._props[key] !== undefined) {
          return vm._props[key];
      }
      // call factory function for non-Function types
      // a value is Function if its prototype is function even across different execution context
      return isFunction(def) && getType(prop.type) !== 'Function'
          ? def.call(vm)
          : def;
  }
  /**
   * Assert whether a prop is valid.
   */
  function assertProp(prop, name, value, vm, absent) {
      if (prop.required && absent) {
          warn('Missing required prop: "' + name + '"', vm);
          return;
      }
      if (value == null && !prop.required) {
          return;
      }
      var type = prop.type;
      var valid = !type || type === true;
      var expectedTypes = [];
      if (type) {
          if (!isArray(type)) {
              type = [type];
          }
          for (var i = 0; i < type.length && !valid; i++) {
              var assertedType = assertType(value, type[i], vm);
              expectedTypes.push(assertedType.expectedType || '');
              valid = assertedType.valid;
          }
      }
      var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
      if (!valid && haveExpectedTypes) {
          warn(getInvalidTypeMessage(name, value, expectedTypes), vm);
          return;
      }
      var validator = prop.validator;
      if (validator) {
          if (!validator(value)) {
              warn('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
          }
      }
  }
  var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
  function assertType(value, type, vm) {
      var valid;
      var expectedType = getType(type);
      if (simpleCheckRE.test(expectedType)) {
          var t = typeof value;
          valid = t === expectedType.toLowerCase();
          // for primitive wrapper objects
          if (!valid && t === 'object') {
              valid = value instanceof type;
          }
      }
      else if (expectedType === 'Object') {
          valid = isPlainObject(value);
      }
      else if (expectedType === 'Array') {
          valid = isArray(value);
      }
      else {
          try {
              valid = value instanceof type;
          }
          catch (e) {
              warn('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
              valid = false;
          }
      }
      return {
          valid: valid,
          expectedType: expectedType
      };
  }
  var functionTypeCheckRE = /^\s*function (\w+)/;
  /**
   * Use function string name to check built-in types,
   * because a simple equality check will fail when running
   * across different vms / iframes.
   */
  function getType(fn) {
      var match = fn && fn.toString().match(functionTypeCheckRE);
      return match ? match[1] : '';
  }
  function isSameType(a, b) {
      return getType(a) === getType(b);
  }
  function getTypeIndex(type, expectedTypes) {
      if (!isArray(expectedTypes)) {
          return isSameType(expectedTypes, type) ? 0 : -1;
      }
      for (var i = 0, len = expectedTypes.length; i < len; i++) {
          if (isSameType(expectedTypes[i], type)) {
              return i;
          }
      }
      return -1;
  }
  function getInvalidTypeMessage(name, value, expectedTypes) {
      var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") +
          " Expected ".concat(expectedTypes.map(capitalize).join(', '));
      var expectedType = expectedTypes[0];
      var receivedType = toRawType(value);
      // check if we need to specify expected value
      if (expectedTypes.length === 1 &&
          isExplicable(expectedType) &&
          isExplicable(typeof value) &&
          !isBoolean(expectedType, receivedType)) {
          message += " with value ".concat(styleValue(value, expectedType));
      }
      message += ", got ".concat(receivedType, " ");
      // check if we need to specify received value
      if (isExplicable(receivedType)) {
          message += "with value ".concat(styleValue(value, receivedType), ".");
      }
      return message;
  }
  function styleValue(value, type) {
      if (type === 'String') {
          return "\"".concat(value, "\"");
      }
      else if (type === 'Number') {
          return "".concat(Number(value));
      }
      else {
          return "".concat(value);
      }
  }
  var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
  function isExplicable(value) {
      return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });
  }
  function isBoolean() {
      var args = [];
      for (var _i = 0; _i < arguments.length; _i++) {
          args[_i] = arguments[_i];
      }
      return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });
  }

  /* not type checking this file because flow doesn't play well with Proxy */
  var initProxy;
  {
      var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
          'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
          'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
          'require' // for Webpack/Browserify
      );
      var warnNonPresent_1 = function (target, key) {
          warn("Property or method \"".concat(key, "\" is not defined on the instance but ") +
              'referenced during render. Make sure that this property is reactive, ' +
              'either in the data option, or for class-based components, by ' +
              'initializing the property. ' +
              'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
      };
      var warnReservedPrefix_1 = function (target, key) {
          warn("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") +
              'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
              'prevent conflicts with Vue internals. ' +
              'See: https://v2.vuejs.org/v2/api/#data', target);
      };
      var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
      if (hasProxy_1) {
          var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
          config.keyCodes = new Proxy(config.keyCodes, {
              set: function (target, key, value) {
                  if (isBuiltInModifier_1(key)) {
                      warn("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key));
                      return false;
                  }
                  else {
                      target[key] = value;
                      return true;
                  }
              }
          });
      }
      var hasHandler_1 = {
          has: function (target, key) {
              var has = key in target;
              var isAllowed = allowedGlobals_1(key) ||
                  (typeof key === 'string' &&
                      key.charAt(0) === '_' &&
                      !(key in target.$data));
              if (!has && !isAllowed) {
                  if (key in target.$data)
                      warnReservedPrefix_1(target, key);
                  else
                      warnNonPresent_1(target, key);
              }
              return has || !isAllowed;
          }
      };
      var getHandler_1 = {
          get: function (target, key) {
              if (typeof key === 'string' && !(key in target)) {
                  if (key in target.$data)
                      warnReservedPrefix_1(target, key);
                  else
                      warnNonPresent_1(target, key);
              }
              return target[key];
          }
      };
      initProxy = function initProxy(vm) {
          if (hasProxy_1) {
              // determine which proxy handler to use
              var options = vm.$options;
              var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;
              vm._renderProxy = new Proxy(vm, handlers);
          }
          else {
              vm._renderProxy = vm;
          }
      };
  }

  var sharedPropertyDefinition = {
      enumerable: true,
      configurable: true,
      get: noop,
      set: noop
  };
  function proxy(target, sourceKey, key) {
      sharedPropertyDefinition.get = function proxyGetter() {
          return this[sourceKey][key];
      };
      sharedPropertyDefinition.set = function proxySetter(val) {
          this[sourceKey][key] = val;
      };
      Object.defineProperty(target, key, sharedPropertyDefinition);
  }
  function initState(vm) {
      var opts = vm.$options;
      if (opts.props)
          initProps$1(vm, opts.props);
      // Composition API
      initSetup(vm);
      if (opts.methods)
          initMethods(vm, opts.methods);
      if (opts.data) {
          initData(vm);
      }
      else {
          var ob = observe((vm._data = {}));
          ob && ob.vmCount++;
      }
      if (opts.computed)
          initComputed$1(vm, opts.computed);
      if (opts.watch && opts.watch !== nativeWatch) {
          initWatch(vm, opts.watch);
      }
  }
  function initProps$1(vm, propsOptions) {
      var propsData = vm.$options.propsData || {};
      var props = (vm._props = shallowReactive({}));
      // cache prop keys so that future props updates can iterate using Array
      // instead of dynamic object key enumeration.
      var keys = (vm.$options._propKeys = []);
      var isRoot = !vm.$parent;
      // root instance props should be converted
      if (!isRoot) {
          toggleObserving(false);
      }
      var _loop_1 = function (key) {
          keys.push(key);
          var value = validateProp(key, propsOptions, propsData, vm);
          /* istanbul ignore else */
          {
              var hyphenatedKey = hyphenate(key);
              if (isReservedAttribute(hyphenatedKey) ||
                  config.isReservedAttr(hyphenatedKey)) {
                  warn("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm);
              }
              defineReactive(props, key, value, function () {
                  if (!isRoot && !isUpdatingChildComponent) {
                      warn("Avoid mutating a prop directly since the value will be " +
                          "overwritten whenever the parent component re-renders. " +
                          "Instead, use a data or computed property based on the prop's " +
                          "value. Prop being mutated: \"".concat(key, "\""), vm);
                  }
              });
          }
          // static props are already proxied on the component's prototype
          // during Vue.extend(). We only need to proxy props defined at
          // instantiation here.
          if (!(key in vm)) {
              proxy(vm, "_props", key);
          }
      };
      for (var key in propsOptions) {
          _loop_1(key);
      }
      toggleObserving(true);
  }
  function initData(vm) {
      var data = vm.$options.data;
      data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
      if (!isPlainObject(data)) {
          data = {};
          warn('data functions should return an object:\n' +
                  'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
      }
      // proxy data on instance
      var keys = Object.keys(data);
      var props = vm.$options.props;
      var methods = vm.$options.methods;
      var i = keys.length;
      while (i--) {
          var key = keys[i];
          {
              if (methods && hasOwn(methods, key)) {
                  warn("Method \"".concat(key, "\" has already been defined as a data property."), vm);
              }
          }
          if (props && hasOwn(props, key)) {
              warn("The data property \"".concat(key, "\" is already declared as a prop. ") +
                      "Use prop default value instead.", vm);
          }
          else if (!isReserved(key)) {
              proxy(vm, "_data", key);
          }
      }
      // observe data
      var ob = observe(data);
      ob && ob.vmCount++;
  }
  function getData(data, vm) {
      // #7573 disable dep collection when invoking data getters
      pushTarget();
      try {
          return data.call(vm, vm);
      }
      catch (e) {
          handleError(e, vm, "data()");
          return {};
      }
      finally {
          popTarget();
      }
  }
  var computedWatcherOptions = { lazy: true };
  function initComputed$1(vm, computed) {
      // $flow-disable-line
      var watchers = (vm._computedWatchers = Object.create(null));
      // computed properties are just getters during SSR
      var isSSR = isServerRendering();
      for (var key in computed) {
          var userDef = computed[key];
          var getter = isFunction(userDef) ? userDef : userDef.get;
          if (getter == null) {
              warn("Getter is missing for computed property \"".concat(key, "\"."), vm);
          }
          if (!isSSR) {
              // create internal watcher for the computed property.
              watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
          }
          // component-defined computed properties are already defined on the
          // component prototype. We only need to define computed properties defined
          // at instantiation here.
          if (!(key in vm)) {
              defineComputed(vm, key, userDef);
          }
          else {
              if (key in vm.$data) {
                  warn("The computed property \"".concat(key, "\" is already defined in data."), vm);
              }
              else if (vm.$options.props && key in vm.$options.props) {
                  warn("The computed property \"".concat(key, "\" is already defined as a prop."), vm);
              }
              else if (vm.$options.methods && key in vm.$options.methods) {
                  warn("The computed property \"".concat(key, "\" is already defined as a method."), vm);
              }
          }
      }
  }
  function defineComputed(target, key, userDef) {
      var shouldCache = !isServerRendering();
      if (isFunction(userDef)) {
          sharedPropertyDefinition.get = shouldCache
              ? createComputedGetter(key)
              : createGetterInvoker(userDef);
          sharedPropertyDefinition.set = noop;
      }
      else {
          sharedPropertyDefinition.get = userDef.get
              ? shouldCache && userDef.cache !== false
                  ? createComputedGetter(key)
                  : createGetterInvoker(userDef.get)
              : noop;
          sharedPropertyDefinition.set = userDef.set || noop;
      }
      if (sharedPropertyDefinition.set === noop) {
          sharedPropertyDefinition.set = function () {
              warn("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this);
          };
      }
      Object.defineProperty(target, key, sharedPropertyDefinition);
  }
  function createComputedGetter(key) {
      return function computedGetter() {
          var watcher = this._computedWatchers && this._computedWatchers[key];
          if (watcher) {
              if (watcher.dirty) {
                  watcher.evaluate();
              }
              if (Dep.target) {
                  if (Dep.target.onTrack) {
                      Dep.target.onTrack({
                          effect: Dep.target,
                          target: this,
                          type: "get" /* TrackOpTypes.GET */,
                          key: key
                      });
                  }
                  watcher.depend();
              }
              return watcher.value;
          }
      };
  }
  function createGetterInvoker(fn) {
      return function computedGetter() {
          return fn.call(this, this);
      };
  }
  function initMethods(vm, methods) {
      var props = vm.$options.props;
      for (var key in methods) {
          {
              if (typeof methods[key] !== 'function') {
                  warn("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") +
                      "Did you reference the function correctly?", vm);
              }
              if (props && hasOwn(props, key)) {
                  warn("Method \"".concat(key, "\" has already been defined as a prop."), vm);
              }
              if (key in vm && isReserved(key)) {
                  warn("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") +
                      "Avoid defining component methods that start with _ or $.");
              }
          }
          vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
      }
  }
  function initWatch(vm, watch) {
      for (var key in watch) {
          var handler = watch[key];
          if (isArray(handler)) {
              for (var i = 0; i < handler.length; i++) {
                  createWatcher(vm, key, handler[i]);
              }
          }
          else {
              createWatcher(vm, key, handler);
          }
      }
  }
  function createWatcher(vm, expOrFn, handler, options) {
      if (isPlainObject(handler)) {
          options = handler;
          handler = handler.handler;
      }
      if (typeof handler === 'string') {
          handler = vm[handler];
      }
      return vm.$watch(expOrFn, handler, options);
  }
  function stateMixin(Vue) {
      // flow somehow has problems with directly declared definition object
      // when using Object.defineProperty, so we have to procedurally build up
      // the object here.
      var dataDef = {};
      dataDef.get = function () {
          return this._data;
      };
      var propsDef = {};
      propsDef.get = function () {
          return this._props;
      };
      {
          dataDef.set = function () {
              warn('Avoid replacing instance root $data. ' +
                  'Use nested data properties instead.', this);
          };
          propsDef.set = function () {
              warn("$props is readonly.", this);
          };
      }
      Object.defineProperty(Vue.prototype, '$data', dataDef);
      Object.defineProperty(Vue.prototype, '$props', propsDef);
      Vue.prototype.$set = set;
      Vue.prototype.$delete = del;
      Vue.prototype.$watch = function (expOrFn, cb, options) {
          var vm = this;
          if (isPlainObject(cb)) {
              return createWatcher(vm, expOrFn, cb, options);
          }
          options = options || {};
          options.user = true;
          var watcher = new Watcher(vm, expOrFn, cb, options);
          if (options.immediate) {
              var info = "callback for immediate watcher \"".concat(watcher.expression, "\"");
              pushTarget();
              invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
              popTarget();
          }
          return function unwatchFn() {
              watcher.teardown();
          };
      };
  }

  var uid = 0;
  function initMixin$1(Vue) {
      Vue.prototype._init = function (options) {
          var vm = this;
          // a uid
          vm._uid = uid++;
          var startTag, endTag;
          /* istanbul ignore if */
          if (config.performance && mark) {
              startTag = "vue-perf-start:".concat(vm._uid);
              endTag = "vue-perf-end:".concat(vm._uid);
              mark(startTag);
          }
          // a flag to mark this as a Vue instance without having to do instanceof
          // check
          vm._isVue = true;
          // avoid instances from being observed
          vm.__v_skip = true;
          // effect scope
          vm._scope = new EffectScope(true /* detached */);
          vm._scope._vm = true;
          // merge options
          if (options && options._isComponent) {
              // optimize internal component instantiation
              // since dynamic options merging is pretty slow, and none of the
              // internal component options needs special treatment.
              initInternalComponent(vm, options);
          }
          else {
              vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
          }
          /* istanbul ignore else */
          {
              initProxy(vm);
          }
          // expose real self
          vm._self = vm;
          initLifecycle(vm);
          initEvents(vm);
          initRender(vm);
          callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
          initInjections(vm); // resolve injections before data/props
          initState(vm);
          initProvide(vm); // resolve provide after data/props
          callHook$1(vm, 'created');
          /* istanbul ignore if */
          if (config.performance && mark) {
              vm._name = formatComponentName(vm, false);
              mark(endTag);
              measure("vue ".concat(vm._name, " init"), startTag, endTag);
          }
          if (vm.$options.el) {
              vm.$mount(vm.$options.el);
          }
      };
  }
  function initInternalComponent(vm, options) {
      var opts = (vm.$options = Object.create(vm.constructor.options));
      // doing this because it's faster than dynamic enumeration.
      var parentVnode = options._parentVnode;
      opts.parent = options.parent;
      opts._parentVnode = parentVnode;
      var vnodeComponentOptions = parentVnode.componentOptions;
      opts.propsData = vnodeComponentOptions.propsData;
      opts._parentListeners = vnodeComponentOptions.listeners;
      opts._renderChildren = vnodeComponentOptions.children;
      opts._componentTag = vnodeComponentOptions.tag;
      if (options.render) {
          opts.render = options.render;
          opts.staticRenderFns = options.staticRenderFns;
      }
  }
  function resolveConstructorOptions(Ctor) {
      var options = Ctor.options;
      if (Ctor.super) {
          var superOptions = resolveConstructorOptions(Ctor.super);
          var cachedSuperOptions = Ctor.superOptions;
          if (superOptions !== cachedSuperOptions) {
              // super option changed,
              // need to resolve new options.
              Ctor.superOptions = superOptions;
              // check if there are any late-modified/attached options (#4976)
              var modifiedOptions = resolveModifiedOptions(Ctor);
              // update base extend options
              if (modifiedOptions) {
                  extend(Ctor.extendOptions, modifiedOptions);
              }
              options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
              if (options.name) {
                  options.components[options.name] = Ctor;
              }
          }
      }
      return options;
  }
  function resolveModifiedOptions(Ctor) {
      var modified;
      var latest = Ctor.options;
      var sealed = Ctor.sealedOptions;
      for (var key in latest) {
          if (latest[key] !== sealed[key]) {
              if (!modified)
                  modified = {};
              modified[key] = latest[key];
          }
      }
      return modified;
  }

  function Vue(options) {
      if (!(this instanceof Vue)) {
          warn('Vue is a constructor and should be called with the `new` keyword');
      }
      this._init(options);
  }
  //@ts-expect-error Vue has function type
  initMixin$1(Vue);
  //@ts-expect-error Vue has function type
  stateMixin(Vue);
  //@ts-expect-error Vue has function type
  eventsMixin(Vue);
  //@ts-expect-error Vue has function type
  lifecycleMixin(Vue);
  //@ts-expect-error Vue has function type
  renderMixin(Vue);

  function initUse(Vue) {
      Vue.use = function (plugin) {
          var installedPlugins = this._installedPlugins || (this._installedPlugins = []);
          if (installedPlugins.indexOf(plugin) > -1) {
              return this;
          }
          // additional parameters
          var args = toArray(arguments, 1);
          args.unshift(this);
          if (isFunction(plugin.install)) {
              plugin.install.apply(plugin, args);
          }
          else if (isFunction(plugin)) {
              plugin.apply(null, args);
          }
          installedPlugins.push(plugin);
          return this;
      };
  }

  function initMixin(Vue) {
      Vue.mixin = function (mixin) {
          this.options = mergeOptions(this.options, mixin);
          return this;
      };
  }

  function initExtend(Vue) {
      /**
       * Each instance constructor, including Vue, has a unique
       * cid. This enables us to create wrapped "child
       * constructors" for prototypal inheritance and cache them.
       */
      Vue.cid = 0;
      var cid = 1;
      /**
       * Class inheritance
       */
      Vue.extend = function (extendOptions) {
          extendOptions = extendOptions || {};
          var Super = this;
          var SuperId = Super.cid;
          var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
          if (cachedCtors[SuperId]) {
              return cachedCtors[SuperId];
          }
          var name = getComponentName(extendOptions) || getComponentName(Super.options);
          if (name) {
              validateComponentName(name);
          }
          var Sub = function VueComponent(options) {
              this._init(options);
          };
          Sub.prototype = Object.create(Super.prototype);
          Sub.prototype.constructor = Sub;
          Sub.cid = cid++;
          Sub.options = mergeOptions(Super.options, extendOptions);
          Sub['super'] = Super;
          // For props and computed properties, we define the proxy getters on
          // the Vue instances at extension time, on the extended prototype. This
          // avoids Object.defineProperty calls for each instance created.
          if (Sub.options.props) {
              initProps(Sub);
          }
          if (Sub.options.computed) {
              initComputed(Sub);
          }
          // allow further extension/mixin/plugin usage
          Sub.extend = Super.extend;
          Sub.mixin = Super.mixin;
          Sub.use = Super.use;
          // create asset registers, so extended classes
          // can have their private assets too.
          ASSET_TYPES.forEach(function (type) {
              Sub[type] = Super[type];
          });
          // enable recursive self-lookup
          if (name) {
              Sub.options.components[name] = Sub;
          }
          // keep a reference to the super options at extension time.
          // later at instantiation we can check if Super's options have
          // been updated.
          Sub.superOptions = Super.options;
          Sub.extendOptions = extendOptions;
          Sub.sealedOptions = extend({}, Sub.options);
          // cache constructor
          cachedCtors[SuperId] = Sub;
          return Sub;
      };
  }
  function initProps(Comp) {
      var props = Comp.options.props;
      for (var key in props) {
          proxy(Comp.prototype, "_props", key);
      }
  }
  function initComputed(Comp) {
      var computed = Comp.options.computed;
      for (var key in computed) {
          defineComputed(Comp.prototype, key, computed[key]);
      }
  }

  function initAssetRegisters(Vue) {
      /**
       * Create asset registration methods.
       */
      ASSET_TYPES.forEach(function (type) {
          // @ts-expect-error function is not exact same type
          Vue[type] = function (id, definition) {
              if (!definition) {
                  return this.options[type + 's'][id];
              }
              else {
                  /* istanbul ignore if */
                  if (type === 'component') {
                      validateComponentName(id);
                  }
                  if (type === 'component' && isPlainObject(definition)) {
                      // @ts-expect-error
                      definition.name = definition.name || id;
                      definition = this.options._base.extend(definition);
                  }
                  if (type === 'directive' && isFunction(definition)) {
                      definition = { bind: definition, update: definition };
                  }
                  this.options[type + 's'][id] = definition;
                  return definition;
              }
          };
      });
  }

  function _getComponentName(opts) {
      return opts && (getComponentName(opts.Ctor.options) || opts.tag);
  }
  function matches(pattern, name) {
      if (isArray(pattern)) {
          return pattern.indexOf(name) > -1;
      }
      else if (typeof pattern === 'string') {
          return pattern.split(',').indexOf(name) > -1;
      }
      else if (isRegExp(pattern)) {
          return pattern.test(name);
      }
      /* istanbul ignore next */
      return false;
  }
  function pruneCache(keepAliveInstance, filter) {
      var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode;
      for (var key in cache) {
          var entry = cache[key];
          if (entry) {
              var name_1 = entry.name;
              if (name_1 && !filter(name_1)) {
                  pruneCacheEntry(cache, key, keys, _vnode);
              }
          }
      }
  }
  function pruneCacheEntry(cache, key, keys, current) {
      var entry = cache[key];
      if (entry && (!current || entry.tag !== current.tag)) {
          // @ts-expect-error can be undefined
          entry.componentInstance.$destroy();
      }
      cache[key] = null;
      remove$2(keys, key);
  }
  var patternTypes = [String, RegExp, Array];
  // TODO defineComponent
  var KeepAlive = {
      name: 'keep-alive',
      abstract: true,
      props: {
          include: patternTypes,
          exclude: patternTypes,
          max: [String, Number]
      },
      methods: {
          cacheVNode: function () {
              var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;
              if (vnodeToCache) {
                  var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;
                  cache[keyToCache] = {
                      name: _getComponentName(componentOptions),
                      tag: tag,
                      componentInstance: componentInstance
                  };
                  keys.push(keyToCache);
                  // prune oldest entry
                  if (this.max && keys.length > parseInt(this.max)) {
                      pruneCacheEntry(cache, keys[0], keys, this._vnode);
                  }
                  this.vnodeToCache = null;
              }
          }
      },
      created: function () {
          this.cache = Object.create(null);
          this.keys = [];
      },
      destroyed: function () {
          for (var key in this.cache) {
              pruneCacheEntry(this.cache, key, this.keys);
          }
      },
      mounted: function () {
          var _this = this;
          this.cacheVNode();
          this.$watch('include', function (val) {
              pruneCache(_this, function (name) { return matches(val, name); });
          });
          this.$watch('exclude', function (val) {
              pruneCache(_this, function (name) { return !matches(val, name); });
          });
      },
      updated: function () {
          this.cacheVNode();
      },
      render: function () {
          var slot = this.$slots.default;
          var vnode = getFirstComponentChild(slot);
          var componentOptions = vnode && vnode.componentOptions;
          if (componentOptions) {
              // check pattern
              var name_2 = _getComponentName(componentOptions);
              var _a = this, include = _a.include, exclude = _a.exclude;
              if (
              // not included
              (include && (!name_2 || !matches(include, name_2))) ||
                  // excluded
                  (exclude && name_2 && matches(exclude, name_2))) {
                  return vnode;
              }
              var _b = this, cache = _b.cache, keys = _b.keys;
              var key = vnode.key == null
                  ? // same constructor may get registered as different local components
                      // so cid alone is not enough (#3269)
                      componentOptions.Ctor.cid +
                          (componentOptions.tag ? "::".concat(componentOptions.tag) : '')
                  : vnode.key;
              if (cache[key]) {
                  vnode.componentInstance = cache[key].componentInstance;
                  // make current key freshest
                  remove$2(keys, key);
                  keys.push(key);
              }
              else {
                  // delay setting the cache until update
                  this.vnodeToCache = vnode;
                  this.keyToCache = key;
              }
              // @ts-expect-error can vnode.data can be undefined
              vnode.data.keepAlive = true;
          }
          return vnode || (slot && slot[0]);
      }
  };

  var builtInComponents = {
      KeepAlive: KeepAlive
  };

  function initGlobalAPI(Vue) {
      // config
      var configDef = {};
      configDef.get = function () { return config; };
      {
          configDef.set = function () {
              warn('Do not replace the Vue.config object, set individual fields instead.');
          };
      }
      Object.defineProperty(Vue, 'config', configDef);
      // exposed util methods.
      // NOTE: these are not considered part of the public API - avoid relying on
      // them unless you are aware of the risk.
      Vue.util = {
          warn: warn,
          extend: extend,
          mergeOptions: mergeOptions,
          defineReactive: defineReactive
      };
      Vue.set = set;
      Vue.delete = del;
      Vue.nextTick = nextTick;
      // 2.6 explicit observable API
      Vue.observable = function (obj) {
          observe(obj);
          return obj;
      };
      Vue.options = Object.create(null);
      ASSET_TYPES.forEach(function (type) {
          Vue.options[type + 's'] = Object.create(null);
      });
      // this is used to identify the "base" constructor to extend all plain-object
      // components with in Weex's multi-instance scenarios.
      Vue.options._base = Vue;
      extend(Vue.options.components, builtInComponents);
      initUse(Vue);
      initMixin(Vue);
      initExtend(Vue);
      initAssetRegisters(Vue);
  }

  initGlobalAPI(Vue);
  Object.defineProperty(Vue.prototype, '$isServer', {
      get: isServerRendering
  });
  Object.defineProperty(Vue.prototype, '$ssrContext', {
      get: function () {
          /* istanbul ignore next */
          return this.$vnode && this.$vnode.ssrContext;
      }
  });
  // expose FunctionalRenderContext for ssr runtime helper installation
  Object.defineProperty(Vue, 'FunctionalRenderContext', {
      value: FunctionalRenderContext
  });
  Vue.version = version;

  // these are reserved for web because they are directly compiled away
  // during template compilation
  var isReservedAttr = makeMap('style,class');
  // attributes that should be using props for binding
  var acceptValue = makeMap('input,textarea,option,select,progress');
  var mustUseProp = function (tag, type, attr) {
      return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
          (attr === 'selected' && tag === 'option') ||
          (attr === 'checked' && tag === 'input') ||
          (attr === 'muted' && tag === 'video'));
  };
  var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
  var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
  var convertEnumeratedValue = function (key, value) {
      return isFalsyAttrValue(value) || value === 'false'
          ? 'false'
          : // allow arbitrary string value for contenteditable
              key === 'contenteditable' && isValidContentEditableValue(value)
                  ? value
                  : 'true';
  };
  var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
      'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
      'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
      'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
      'required,reversed,scoped,seamless,selected,sortable,' +
      'truespeed,typemustmatch,visible');
  var xlinkNS = 'http://www.w3.org/1999/xlink';
  var isXlink = function (name) {
      return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
  };
  var getXlinkProp = function (name) {
      return isXlink(name) ? name.slice(6, name.length) : '';
  };
  var isFalsyAttrValue = function (val) {
      return val == null || val === false;
  };

  function genClassForVnode(vnode) {
      var data = vnode.data;
      var parentNode = vnode;
      var childNode = vnode;
      while (isDef(childNode.componentInstance)) {
          childNode = childNode.componentInstance._vnode;
          if (childNode && childNode.data) {
              data = mergeClassData(childNode.data, data);
          }
      }
      // @ts-expect-error parentNode.parent not VNodeWithData
      while (isDef((parentNode = parentNode.parent))) {
          if (parentNode && parentNode.data) {
              data = mergeClassData(data, parentNode.data);
          }
      }
      return renderClass(data.staticClass, data.class);
  }
  function mergeClassData(child, parent) {
      return {
          staticClass: concat(child.staticClass, parent.staticClass),
          class: isDef(child.class) ? [child.class, parent.class] : parent.class
      };
  }
  function renderClass(staticClass, dynamicClass) {
      if (isDef(staticClass) || isDef(dynamicClass)) {
          return concat(staticClass, stringifyClass(dynamicClass));
      }
      /* istanbul ignore next */
      return '';
  }
  function concat(a, b) {
      return a ? (b ? a + ' ' + b : a) : b || '';
  }
  function stringifyClass(value) {
      if (Array.isArray(value)) {
          return stringifyArray(value);
      }
      if (isObject(value)) {
          return stringifyObject(value);
      }
      if (typeof value === 'string') {
          return value;
      }
      /* istanbul ignore next */
      return '';
  }
  function stringifyArray(value) {
      var res = '';
      var stringified;
      for (var i = 0, l = value.length; i < l; i++) {
          if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
              if (res)
                  res += ' ';
              res += stringified;
          }
      }
      return res;
  }
  function stringifyObject(value) {
      var res = '';
      for (var key in value) {
          if (value[key]) {
              if (res)
                  res += ' ';
              res += key;
          }
      }
      return res;
  }

  var namespaceMap = {
      svg: 'http://www.w3.org/2000/svg',
      math: 'http://www.w3.org/1998/Math/MathML'
  };
  var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
      'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
      'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
      'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
      's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
      'embed,object,param,source,canvas,script,noscript,del,ins,' +
      'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
      'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
      'output,progress,select,textarea,' +
      'details,dialog,menu,menuitem,summary,' +
      'content,element,shadow,template,blockquote,iframe,tfoot');
  // this map is intentionally selective, only covering SVG elements that may
  // contain child elements.
  var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
      'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
      'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
  var isReservedTag = function (tag) {
      return isHTMLTag(tag) || isSVG(tag);
  };
  function getTagNamespace(tag) {
      if (isSVG(tag)) {
          return 'svg';
      }
      // basic support for MathML
      // note it doesn't support other MathML elements being component roots
      if (tag === 'math') {
          return 'math';
      }
  }
  var unknownElementCache = Object.create(null);
  function isUnknownElement(tag) {
      /* istanbul ignore if */
      if (!inBrowser) {
          return true;
      }
      if (isReservedTag(tag)) {
          return false;
      }
      tag = tag.toLowerCase();
      /* istanbul ignore if */
      if (unknownElementCache[tag] != null) {
          return unknownElementCache[tag];
      }
      var el = document.createElement(tag);
      if (tag.indexOf('-') > -1) {
          // http://stackoverflow.com/a/28210364/1070244
          return (unknownElementCache[tag] =
              el.constructor === window.HTMLUnknownElement ||
                  el.constructor === window.HTMLElement);
      }
      else {
          return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
      }
  }
  var isTextInputType = makeMap('text,number,password,search,email,tel,url');

  /**
   * Query an element selector if it's not an element already.
   */
  function query(el) {
      if (typeof el === 'string') {
          var selected = document.querySelector(el);
          if (!selected) {
              warn('Cannot find element: ' + el);
              return document.createElement('div');
          }
          return selected;
      }
      else {
          return el;
      }
  }

  function createElement(tagName, vnode) {
      var elm = document.createElement(tagName);
      if (tagName !== 'select') {
          return elm;
      }
      // false or null will remove the attribute but undefined will not
      if (vnode.data &&
          vnode.data.attrs &&
          vnode.data.attrs.multiple !== undefined) {
          elm.setAttribute('multiple', 'multiple');
      }
      return elm;
  }
  function createElementNS(namespace, tagName) {
      return document.createElementNS(namespaceMap[namespace], tagName);
  }
  function createTextNode(text) {
      return document.createTextNode(text);
  }
  function createComment(text) {
      return document.createComment(text);
  }
  function insertBefore(parentNode, newNode, referenceNode) {
      parentNode.insertBefore(newNode, referenceNode);
  }
  function removeChild(node, child) {
      node.removeChild(child);
  }
  function appendChild(node, child) {
      node.appendChild(child);
  }
  function parentNode(node) {
      return node.parentNode;
  }
  function nextSibling(node) {
      return node.nextSibling;
  }
  function tagName(node) {
      return node.tagName;
  }
  function setTextContent(node, text) {
      node.textContent = text;
  }
  function setStyleScope(node, scopeId) {
      node.setAttribute(scopeId, '');
  }

  var nodeOps = /*#__PURE__*/Object.freeze({
    __proto__: null,
    createElement: createElement,
    createElementNS: createElementNS,
    createTextNode: createTextNode,
    createComment: createComment,
    insertBefore: insertBefore,
    removeChild: removeChild,
    appendChild: appendChild,
    parentNode: parentNode,
    nextSibling: nextSibling,
    tagName: tagName,
    setTextContent: setTextContent,
    setStyleScope: setStyleScope
  });

  var ref = {
      create: function (_, vnode) {
          registerRef(vnode);
      },
      update: function (oldVnode, vnode) {
          if (oldVnode.data.ref !== vnode.data.ref) {
              registerRef(oldVnode, true);
              registerRef(vnode);
          }
      },
      destroy: function (vnode) {
          registerRef(vnode, true);
      }
  };
  function registerRef(vnode, isRemoval) {
      var ref = vnode.data.ref;
      if (!isDef(ref))
          return;
      var vm = vnode.context;
      var refValue = vnode.componentInstance || vnode.elm;
      var value = isRemoval ? null : refValue;
      var $refsValue = isRemoval ? undefined : refValue;
      if (isFunction(ref)) {
          invokeWithErrorHandling(ref, vm, [value], vm, "template ref function");
          return;
      }
      var isFor = vnode.data.refInFor;
      var _isString = typeof ref === 'string' || typeof ref === 'number';
      var _isRef = isRef(ref);
      var refs = vm.$refs;
      if (_isString || _isRef) {
          if (isFor) {
              var existing = _isString ? refs[ref] : ref.value;
              if (isRemoval) {
                  isArray(existing) && remove$2(existing, refValue);
              }
              else {
                  if (!isArray(existing)) {
                      if (_isString) {
                          refs[ref] = [refValue];
                          setSetupRef(vm, ref, refs[ref]);
                      }
                      else {
                          ref.value = [refValue];
                      }
                  }
                  else if (!existing.includes(refValue)) {
                      existing.push(refValue);
                  }
              }
          }
          else if (_isString) {
              if (isRemoval && refs[ref] !== refValue) {
                  return;
              }
              refs[ref] = $refsValue;
              setSetupRef(vm, ref, value);
          }
          else if (_isRef) {
              if (isRemoval && ref.value !== refValue) {
                  return;
              }
              ref.value = value;
          }
          else {
              warn("Invalid template ref type: ".concat(typeof ref));
          }
      }
  }
  function setSetupRef(_a, key, val) {
      var _setupState = _a._setupState;
      if (_setupState && hasOwn(_setupState, key)) {
          if (isRef(_setupState[key])) {
              _setupState[key].value = val;
          }
          else {
              _setupState[key] = val;
          }
      }
  }

  /**
   * Virtual DOM patching algorithm based on Snabbdom by
   * Simon Friis Vindum (@paldepind)
   * Licensed under the MIT License
   * https://github.com/paldepind/snabbdom/blob/master/LICENSE
   *
   * modified by Evan You (@yyx990803)
   *
   * Not type-checking this because this file is perf-critical and the cost
   * of making flow understand it is not worth it.
   */
  var emptyNode = new VNode('', {}, []);
  var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
  function sameVnode(a, b) {
      return (a.key === b.key &&
          a.asyncFactory === b.asyncFactory &&
          ((a.tag === b.tag &&
              a.isComment === b.isComment &&
              isDef(a.data) === isDef(b.data) &&
              sameInputType(a, b)) ||
              (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
  }
  function sameInputType(a, b) {
      if (a.tag !== 'input')
          return true;
      var i;
      var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
      var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
      return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
  }
  function createKeyToOldIdx(children, beginIdx, endIdx) {
      var i, key;
      var map = {};
      for (i = beginIdx; i <= endIdx; ++i) {
          key = children[i].key;
          if (isDef(key))
              map[key] = i;
      }
      return map;
  }
  function createPatchFunction(backend) {
      var i, j;
      var cbs = {};
      var modules = backend.modules, nodeOps = backend.nodeOps;
      for (i = 0; i < hooks.length; ++i) {
          cbs[hooks[i]] = [];
          for (j = 0; j < modules.length; ++j) {
              if (isDef(modules[j][hooks[i]])) {
                  cbs[hooks[i]].push(modules[j][hooks[i]]);
              }
          }
      }
      function emptyNodeAt(elm) {
          return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
      }
      function createRmCb(childElm, listeners) {
          function remove() {
              if (--remove.listeners === 0) {
                  removeNode(childElm);
              }
          }
          remove.listeners = listeners;
          return remove;
      }
      function removeNode(el) {
          var parent = nodeOps.parentNode(el);
          // element may have already been removed due to v-html / v-text
          if (isDef(parent)) {
              nodeOps.removeChild(parent, el);
          }
      }
      function isUnknownElement(vnode, inVPre) {
          return (!inVPre &&
              !vnode.ns &&
              !(config.ignoredElements.length &&
                  config.ignoredElements.some(function (ignore) {
                      return isRegExp(ignore)
                          ? ignore.test(vnode.tag)
                          : ignore === vnode.tag;
                  })) &&
              config.isUnknownElement(vnode.tag));
      }
      var creatingElmInVPre = 0;
      function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
          if (isDef(vnode.elm) && isDef(ownerArray)) {
              // This vnode was used in a previous render!
              // now it's used as a new node, overwriting its elm would cause
              // potential patch errors down the road when it's used as an insertion
              // reference node. Instead, we clone the node on-demand before creating
              // associated DOM element for it.
              vnode = ownerArray[index] = cloneVNode(vnode);
          }
          vnode.isRootInsert = !nested; // for transition enter check
          if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
              return;
          }
          var data = vnode.data;
          var children = vnode.children;
          var tag = vnode.tag;
          if (isDef(tag)) {
              {
                  if (data && data.pre) {
                      creatingElmInVPre++;
                  }
                  if (isUnknownElement(vnode, creatingElmInVPre)) {
                      warn('Unknown custom element: <' +
                          tag +
                          '> - did you ' +
                          'register the component correctly? For recursive components, ' +
                          'make sure to provide the "name" option.', vnode.context);
                  }
              }
              vnode.elm = vnode.ns
                  ? nodeOps.createElementNS(vnode.ns, tag)
                  : nodeOps.createElement(tag, vnode);
              setScope(vnode);
              createChildren(vnode, children, insertedVnodeQueue);
              if (isDef(data)) {
                  invokeCreateHooks(vnode, insertedVnodeQueue);
              }
              insert(parentElm, vnode.elm, refElm);
              if (data && data.pre) {
                  creatingElmInVPre--;
              }
          }
          else if (isTrue(vnode.isComment)) {
              vnode.elm = nodeOps.createComment(vnode.text);
              insert(parentElm, vnode.elm, refElm);
          }
          else {
              vnode.elm = nodeOps.createTextNode(vnode.text);
              insert(parentElm, vnode.elm, refElm);
          }
      }
      function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
          var i = vnode.data;
          if (isDef(i)) {
              var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
              if (isDef((i = i.hook)) && isDef((i = i.init))) {
                  i(vnode, false /* hydrating */);
              }
              // after calling the init hook, if the vnode is a child component
              // it should've created a child instance and mounted it. the child
              // component also has set the placeholder vnode's elm.
              // in that case we can just return the element and be done.
              if (isDef(vnode.componentInstance)) {
                  initComponent(vnode, insertedVnodeQueue);
                  insert(parentElm, vnode.elm, refElm);
                  if (isTrue(isReactivated)) {
                      reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
                  }
                  return true;
              }
          }
      }
      function initComponent(vnode, insertedVnodeQueue) {
          if (isDef(vnode.data.pendingInsert)) {
              insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
              vnode.data.pendingInsert = null;
          }
          vnode.elm = vnode.componentInstance.$el;
          if (isPatchable(vnode)) {
              invokeCreateHooks(vnode, insertedVnodeQueue);
              setScope(vnode);
          }
          else {
              // empty component root.
              // skip all element-related modules except for ref (#3455)
              registerRef(vnode);
              // make sure to invoke the insert hook
              insertedVnodeQueue.push(vnode);
          }
      }
      function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
          var i;
          // hack for #4339: a reactivated component with inner transition
          // does not trigger because the inner node's created hooks are not called
          // again. It's not ideal to involve module-specific logic in here but
          // there doesn't seem to be a better way to do it.
          var innerNode = vnode;
          while (innerNode.componentInstance) {
              innerNode = innerNode.componentInstance._vnode;
              if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
                  for (i = 0; i < cbs.activate.length; ++i) {
                      cbs.activate[i](emptyNode, innerNode);
                  }
                  insertedVnodeQueue.push(innerNode);
                  break;
              }
          }
          // unlike a newly created component,
          // a reactivated keep-alive component doesn't insert itself
          insert(parentElm, vnode.elm, refElm);
      }
      function insert(parent, elm, ref) {
          if (isDef(parent)) {
              if (isDef(ref)) {
                  if (nodeOps.parentNode(ref) === parent) {
                      nodeOps.insertBefore(parent, elm, ref);
                  }
              }
              else {
                  nodeOps.appendChild(parent, elm);
              }
          }
      }
      function createChildren(vnode, children, insertedVnodeQueue) {
          if (isArray(children)) {
              {
                  checkDuplicateKeys(children);
              }
              for (var i_1 = 0; i_1 < children.length; ++i_1) {
                  createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);
              }
          }
          else if (isPrimitive(vnode.text)) {
              nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
          }
      }
      function isPatchable(vnode) {
          while (vnode.componentInstance) {
              vnode = vnode.componentInstance._vnode;
          }
          return isDef(vnode.tag);
      }
      function invokeCreateHooks(vnode, insertedVnodeQueue) {
          for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {
              cbs.create[i_2](emptyNode, vnode);
          }
          i = vnode.data.hook; // Reuse variable
          if (isDef(i)) {
              if (isDef(i.create))
                  i.create(emptyNode, vnode);
              if (isDef(i.insert))
                  insertedVnodeQueue.push(vnode);
          }
      }
      // set scope id attribute for scoped CSS.
      // this is implemented as a special case to avoid the overhead
      // of going through the normal attribute patching process.
      function setScope(vnode) {
          var i;
          if (isDef((i = vnode.fnScopeId))) {
              nodeOps.setStyleScope(vnode.elm, i);
          }
          else {
              var ancestor = vnode;
              while (ancestor) {
                  if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
                      nodeOps.setStyleScope(vnode.elm, i);
                  }
                  ancestor = ancestor.parent;
              }
          }
          // for slot content they should also get the scopeId from the host instance.
          if (isDef((i = activeInstance)) &&
              i !== vnode.context &&
              i !== vnode.fnContext &&
              isDef((i = i.$options._scopeId))) {
              nodeOps.setStyleScope(vnode.elm, i);
          }
      }
      function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
          for (; startIdx <= endIdx; ++startIdx) {
              createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
          }
      }
      function invokeDestroyHook(vnode) {
          var i, j;
          var data = vnode.data;
          if (isDef(data)) {
              if (isDef((i = data.hook)) && isDef((i = i.destroy)))
                  i(vnode);
              for (i = 0; i < cbs.destroy.length; ++i)
                  cbs.destroy[i](vnode);
          }
          if (isDef((i = vnode.children))) {
              for (j = 0; j < vnode.children.length; ++j) {
                  invokeDestroyHook(vnode.children[j]);
              }
          }
      }
      function removeVnodes(vnodes, startIdx, endIdx) {
          for (; startIdx <= endIdx; ++startIdx) {
              var ch = vnodes[startIdx];
              if (isDef(ch)) {
                  if (isDef(ch.tag)) {
                      removeAndInvokeRemoveHook(ch);
                      invokeDestroyHook(ch);
                  }
                  else {
                      // Text node
                      removeNode(ch.elm);
                  }
              }
          }
      }
      function removeAndInvokeRemoveHook(vnode, rm) {
          if (isDef(rm) || isDef(vnode.data)) {
              var i_3;
              var listeners = cbs.remove.length + 1;
              if (isDef(rm)) {
                  // we have a recursively passed down rm callback
                  // increase the listeners count
                  rm.listeners += listeners;
              }
              else {
                  // directly removing
                  rm = createRmCb(vnode.elm, listeners);
              }
              // recursively invoke hooks on child component root node
              if (isDef((i_3 = vnode.componentInstance)) &&
                  isDef((i_3 = i_3._vnode)) &&
                  isDef(i_3.data)) {
                  removeAndInvokeRemoveHook(i_3, rm);
              }
              for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {
                  cbs.remove[i_3](vnode, rm);
              }
              if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {
                  i_3(vnode, rm);
              }
              else {
                  rm();
              }
          }
          else {
              removeNode(vnode.elm);
          }
      }
      function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
          var oldStartIdx = 0;
          var newStartIdx = 0;
          var oldEndIdx = oldCh.length - 1;
          var oldStartVnode = oldCh[0];
          var oldEndVnode = oldCh[oldEndIdx];
          var newEndIdx = newCh.length - 1;
          var newStartVnode = newCh[0];
          var newEndVnode = newCh[newEndIdx];
          var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
          // removeOnly is a special flag used only by <transition-group>
          // to ensure removed elements stay in correct relative positions
          // during leaving transitions
          var canMove = !removeOnly;
          {
              checkDuplicateKeys(newCh);
          }
          while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
              if (isUndef(oldStartVnode)) {
                  oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
              }
              else if (isUndef(oldEndVnode)) {
                  oldEndVnode = oldCh[--oldEndIdx];
              }
              else if (sameVnode(oldStartVnode, newStartVnode)) {
                  patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                  oldStartVnode = oldCh[++oldStartIdx];
                  newStartVnode = newCh[++newStartIdx];
              }
              else if (sameVnode(oldEndVnode, newEndVnode)) {
                  patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                  oldEndVnode = oldCh[--oldEndIdx];
                  newEndVnode = newCh[--newEndIdx];
              }
              else if (sameVnode(oldStartVnode, newEndVnode)) {
                  // Vnode moved right
                  patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
                  canMove &&
                      nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
                  oldStartVnode = oldCh[++oldStartIdx];
                  newEndVnode = newCh[--newEndIdx];
              }
              else if (sameVnode(oldEndVnode, newStartVnode)) {
                  // Vnode moved left
                  patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                  canMove &&
                      nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
                  oldEndVnode = oldCh[--oldEndIdx];
                  newStartVnode = newCh[++newStartIdx];
              }
              else {
                  if (isUndef(oldKeyToIdx))
                      oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
                  idxInOld = isDef(newStartVnode.key)
                      ? oldKeyToIdx[newStartVnode.key]
                      : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
                  if (isUndef(idxInOld)) {
                      // New element
                      createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                  }
                  else {
                      vnodeToMove = oldCh[idxInOld];
                      if (sameVnode(vnodeToMove, newStartVnode)) {
                          patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
                          oldCh[idxInOld] = undefined;
                          canMove &&
                              nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
                      }
                      else {
                          // same key but different element. treat as new element
                          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
                      }
                  }
                  newStartVnode = newCh[++newStartIdx];
              }
          }
          if (oldStartIdx > oldEndIdx) {
              refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
              addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
          }
          else if (newStartIdx > newEndIdx) {
              removeVnodes(oldCh, oldStartIdx, oldEndIdx);
          }
      }
      function checkDuplicateKeys(children) {
          var seenKeys = {};
          for (var i_4 = 0; i_4 < children.length; i_4++) {
              var vnode = children[i_4];
              var key = vnode.key;
              if (isDef(key)) {
                  if (seenKeys[key]) {
                      warn("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context);
                  }
                  else {
                      seenKeys[key] = true;
                  }
              }
          }
      }
      function findIdxInOld(node, oldCh, start, end) {
          for (var i_5 = start; i_5 < end; i_5++) {
              var c = oldCh[i_5];
              if (isDef(c) && sameVnode(node, c))
                  return i_5;
          }
      }
      function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
          if (oldVnode === vnode) {
              return;
          }
          if (isDef(vnode.elm) && isDef(ownerArray)) {
              // clone reused vnode
              vnode = ownerArray[index] = cloneVNode(vnode);
          }
          var elm = (vnode.elm = oldVnode.elm);
          if (isTrue(oldVnode.isAsyncPlaceholder)) {
              if (isDef(vnode.asyncFactory.resolved)) {
                  hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
              }
              else {
                  vnode.isAsyncPlaceholder = true;
              }
              return;
          }
          // reuse element for static trees.
          // note we only do this if the vnode is cloned -
          // if the new node is not cloned it means the render functions have been
          // reset by the hot-reload-api and we need to do a proper re-render.
          if (isTrue(vnode.isStatic) &&
              isTrue(oldVnode.isStatic) &&
              vnode.key === oldVnode.key &&
              (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
              vnode.componentInstance = oldVnode.componentInstance;
              return;
          }
          var i;
          var data = vnode.data;
          if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
              i(oldVnode, vnode);
          }
          var oldCh = oldVnode.children;
          var ch = vnode.children;
          if (isDef(data) && isPatchable(vnode)) {
              for (i = 0; i < cbs.update.length; ++i)
                  cbs.update[i](oldVnode, vnode);
              if (isDef((i = data.hook)) && isDef((i = i.update)))
                  i(oldVnode, vnode);
          }
          if (isUndef(vnode.text)) {
              if (isDef(oldCh) && isDef(ch)) {
                  if (oldCh !== ch)
                      updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
              }
              else if (isDef(ch)) {
                  {
                      checkDuplicateKeys(ch);
                  }
                  if (isDef(oldVnode.text))
                      nodeOps.setTextContent(elm, '');
                  addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
              }
              else if (isDef(oldCh)) {
                  removeVnodes(oldCh, 0, oldCh.length - 1);
              }
              else if (isDef(oldVnode.text)) {
                  nodeOps.setTextContent(elm, '');
              }
          }
          else if (oldVnode.text !== vnode.text) {
              nodeOps.setTextContent(elm, vnode.text);
          }
          if (isDef(data)) {
              if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
                  i(oldVnode, vnode);
          }
      }
      function invokeInsertHook(vnode, queue, initial) {
          // delay insert hooks for component root nodes, invoke them after the
          // element is really inserted
          if (isTrue(initial) && isDef(vnode.parent)) {
              vnode.parent.data.pendingInsert = queue;
          }
          else {
              for (var i_6 = 0; i_6 < queue.length; ++i_6) {
                  queue[i_6].data.hook.insert(queue[i_6]);
              }
          }
      }
      var hydrationBailed = false;
      // list of modules that can skip create hook during hydration because they
      // are already rendered on the client or has no need for initialization
      // Note: style is excluded because it relies on initial clone for future
      // deep updates (#7063).
      var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
      // Note: this is a browser-only function so we can assume elms are DOM nodes.
      function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
          var i;
          var tag = vnode.tag, data = vnode.data, children = vnode.children;
          inVPre = inVPre || (data && data.pre);
          vnode.elm = elm;
          if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
              vnode.isAsyncPlaceholder = true;
              return true;
          }
          // assert node match
          {
              if (!assertNodeMatch(elm, vnode, inVPre)) {
                  return false;
              }
          }
          if (isDef(data)) {
              if (isDef((i = data.hook)) && isDef((i = i.init)))
                  i(vnode, true /* hydrating */);
              if (isDef((i = vnode.componentInstance))) {
                  // child component. it should have hydrated its own tree.
                  initComponent(vnode, insertedVnodeQueue);
                  return true;
              }
          }
          if (isDef(tag)) {
              if (isDef(children)) {
                  // empty element, allow client to pick up and populate children
                  if (!elm.hasChildNodes()) {
                      createChildren(vnode, children, insertedVnodeQueue);
                  }
                  else {
                      // v-html and domProps: innerHTML
                      if (isDef((i = data)) &&
                          isDef((i = i.domProps)) &&
                          isDef((i = i.innerHTML))) {
                          if (i !== elm.innerHTML) {
                              /* istanbul ignore if */
                              if (typeof console !== 'undefined' &&
                                  !hydrationBailed) {
                                  hydrationBailed = true;
                                  console.warn('Parent: ', elm);
                                  console.warn('server innerHTML: ', i);
                                  console.warn('client innerHTML: ', elm.innerHTML);
                              }
                              return false;
                          }
                      }
                      else {
                          // iterate and compare children lists
                          var childrenMatch = true;
                          var childNode = elm.firstChild;
                          for (var i_7 = 0; i_7 < children.length; i_7++) {
                              if (!childNode ||
                                  !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {
                                  childrenMatch = false;
                                  break;
                              }
                              childNode = childNode.nextSibling;
                          }
                          // if childNode is not null, it means the actual childNodes list is
                          // longer than the virtual children list.
                          if (!childrenMatch || childNode) {
                              /* istanbul ignore if */
                              if (typeof console !== 'undefined' &&
                                  !hydrationBailed) {
                                  hydrationBailed = true;
                                  console.warn('Parent: ', elm);
                                  console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
                              }
                              return false;
                          }
                      }
                  }
              }
              if (isDef(data)) {
                  var fullInvoke = false;
                  for (var key in data) {
                      if (!isRenderedModule(key)) {
                          fullInvoke = true;
                          invokeCreateHooks(vnode, insertedVnodeQueue);
                          break;
                      }
                  }
                  if (!fullInvoke && data['class']) {
                      // ensure collecting deps for deep class bindings for future updates
                      traverse(data['class']);
                  }
              }
          }
          else if (elm.data !== vnode.text) {
              elm.data = vnode.text;
          }
          return true;
      }
      function assertNodeMatch(node, vnode, inVPre) {
          if (isDef(vnode.tag)) {
              return (vnode.tag.indexOf('vue-component') === 0 ||
                  (!isUnknownElement(vnode, inVPre) &&
                      vnode.tag.toLowerCase() ===
                          (node.tagName && node.tagName.toLowerCase())));
          }
          else {
              return node.nodeType === (vnode.isComment ? 8 : 3);
          }
      }
      return function patch(oldVnode, vnode, hydrating, removeOnly) {
          if (isUndef(vnode)) {
              if (isDef(oldVnode))
                  invokeDestroyHook(oldVnode);
              return;
          }
          var isInitialPatch = false;
          var insertedVnodeQueue = [];
          if (isUndef(oldVnode)) {
              // empty mount (likely as component), create new root element
              isInitialPatch = true;
              createElm(vnode, insertedVnodeQueue);
          }
          else {
              var isRealElement = isDef(oldVnode.nodeType);
              if (!isRealElement && sameVnode(oldVnode, vnode)) {
                  // patch existing root node
                  patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
              }
              else {
                  if (isRealElement) {
                      // mounting to a real element
                      // check if this is server-rendered content and if we can perform
                      // a successful hydration.
                      if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
                          oldVnode.removeAttribute(SSR_ATTR);
                          hydrating = true;
                      }
                      if (isTrue(hydrating)) {
                          if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
                              invokeInsertHook(vnode, insertedVnodeQueue, true);
                              return oldVnode;
                          }
                          else {
                              warn('The client-side rendered virtual DOM tree is not matching ' +
                                  'server-rendered content. This is likely caused by incorrect ' +
                                  'HTML markup, for example nesting block-level elements inside ' +
                                  '<p>, or missing <tbody>. Bailing hydration and performing ' +
                                  'full client-side render.');
                          }
                      }
                      // either not server-rendered, or hydration failed.
                      // create an empty node and replace it
                      oldVnode = emptyNodeAt(oldVnode);
                  }
                  // replacing existing element
                  var oldElm = oldVnode.elm;
                  var parentElm = nodeOps.parentNode(oldElm);
                  // create new node
                  createElm(vnode, insertedVnodeQueue, 
                  // extremely rare edge case: do not insert if old element is in a
                  // leaving transition. Only happens when combining transition +
                  // keep-alive + HOCs. (#4590)
                  oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
                  // update parent placeholder node element, recursively
                  if (isDef(vnode.parent)) {
                      var ancestor = vnode.parent;
                      var patchable = isPatchable(vnode);
                      while (ancestor) {
                          for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {
                              cbs.destroy[i_8](ancestor);
                          }
                          ancestor.elm = vnode.elm;
                          if (patchable) {
                              for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {
                                  cbs.create[i_9](emptyNode, ancestor);
                              }
                              // #6513
                              // invoke insert hooks that may have been merged by create hooks.
                              // e.g. for directives that uses the "inserted" hook.
                              var insert_1 = ancestor.data.hook.insert;
                              if (insert_1.merged) {
                                  // start at index 1 to avoid re-invoking component mounted hook
                                  for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) {
                                      insert_1.fns[i_10]();
                                  }
                              }
                          }
                          else {
                              registerRef(ancestor);
                          }
                          ancestor = ancestor.parent;
                      }
                  }
                  // destroy old node
                  if (isDef(parentElm)) {
                      removeVnodes([oldVnode], 0, 0);
                  }
                  else if (isDef(oldVnode.tag)) {
                      invokeDestroyHook(oldVnode);
                  }
              }
          }
          invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
          return vnode.elm;
      };
  }

  var directives = {
      create: updateDirectives,
      update: updateDirectives,
      destroy: function unbindDirectives(vnode) {
          // @ts-expect-error emptyNode is not VNodeWithData
          updateDirectives(vnode, emptyNode);
      }
  };
  function updateDirectives(oldVnode, vnode) {
      if (oldVnode.data.directives || vnode.data.directives) {
          _update(oldVnode, vnode);
      }
  }
  function _update(oldVnode, vnode) {
      var isCreate = oldVnode === emptyNode;
      var isDestroy = vnode === emptyNode;
      var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
      var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
      var dirsWithInsert = [];
      var dirsWithPostpatch = [];
      var key, oldDir, dir;
      for (key in newDirs) {
          oldDir = oldDirs[key];
          dir = newDirs[key];
          if (!oldDir) {
              // new directive, bind
              callHook(dir, 'bind', vnode, oldVnode);
              if (dir.def && dir.def.inserted) {
                  dirsWithInsert.push(dir);
              }
          }
          else {
              // existing directive, update
              dir.oldValue = oldDir.value;
              dir.oldArg = oldDir.arg;
              callHook(dir, 'update', vnode, oldVnode);
              if (dir.def && dir.def.componentUpdated) {
                  dirsWithPostpatch.push(dir);
              }
          }
      }
      if (dirsWithInsert.length) {
          var callInsert = function () {
              for (var i = 0; i < dirsWithInsert.length; i++) {
                  callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
              }
          };
          if (isCreate) {
              mergeVNodeHook(vnode, 'insert', callInsert);
          }
          else {
              callInsert();
          }
      }
      if (dirsWithPostpatch.length) {
          mergeVNodeHook(vnode, 'postpatch', function () {
              for (var i = 0; i < dirsWithPostpatch.length; i++) {
                  callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
              }
          });
      }
      if (!isCreate) {
          for (key in oldDirs) {
              if (!newDirs[key]) {
                  // no longer present, unbind
                  callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
              }
          }
      }
  }
  var emptyModifiers = Object.create(null);
  function normalizeDirectives(dirs, vm) {
      var res = Object.create(null);
      if (!dirs) {
          // $flow-disable-line
          return res;
      }
      var i, dir;
      for (i = 0; i < dirs.length; i++) {
          dir = dirs[i];
          if (!dir.modifiers) {
              // $flow-disable-line
              dir.modifiers = emptyModifiers;
          }
          res[getRawDirName(dir)] = dir;
          if (vm._setupState && vm._setupState.__sfc) {
              var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
              if (typeof setupDef === 'function') {
                  dir.def = {
                      bind: setupDef,
                      update: setupDef,
                  };
              }
              else {
                  dir.def = setupDef;
              }
          }
          dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
      }
      // $flow-disable-line
      return res;
  }
  function getRawDirName(dir) {
      return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.')));
  }
  function callHook(dir, hook, vnode, oldVnode, isDestroy) {
      var fn = dir.def && dir.def[hook];
      if (fn) {
          try {
              fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
          }
          catch (e) {
              handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook"));
          }
      }
  }

  var baseModules = [ref, directives];

  function updateAttrs(oldVnode, vnode) {
      var opts = vnode.componentOptions;
      if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
          return;
      }
      if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
          return;
      }
      var key, cur, old;
      var elm = vnode.elm;
      var oldAttrs = oldVnode.data.attrs || {};
      var attrs = vnode.data.attrs || {};
      // clone observed objects, as the user probably wants to mutate it
      if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
          attrs = vnode.data.attrs = extend({}, attrs);
      }
      for (key in attrs) {
          cur = attrs[key];
          old = oldAttrs[key];
          if (old !== cur) {
              setAttr(elm, key, cur, vnode.data.pre);
          }
      }
      // #4391: in IE9, setting type can reset value for input[type=radio]
      // #6666: IE/Edge forces progress value down to 1 before setting a max
      /* istanbul ignore if */
      if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
          setAttr(elm, 'value', attrs.value);
      }
      for (key in oldAttrs) {
          if (isUndef(attrs[key])) {
              if (isXlink(key)) {
                  elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
              }
              else if (!isEnumeratedAttr(key)) {
                  elm.removeAttribute(key);
              }
          }
      }
  }
  function setAttr(el, key, value, isInPre) {
      if (isInPre || el.tagName.indexOf('-') > -1) {
          baseSetAttr(el, key, value);
      }
      else if (isBooleanAttr(key)) {
          // set attribute for blank value
          // e.g. <option disabled>Select one</option>
          if (isFalsyAttrValue(value)) {
              el.removeAttribute(key);
          }
          else {
              // technically allowfullscreen is a boolean attribute for <iframe>,
              // but Flash expects a value of "true" when used on <embed> tag
              value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
              el.setAttribute(key, value);
          }
      }
      else if (isEnumeratedAttr(key)) {
          el.setAttribute(key, convertEnumeratedValue(key, value));
      }
      else if (isXlink(key)) {
          if (isFalsyAttrValue(value)) {
              el.removeAttributeNS(xlinkNS, getXlinkProp(key));
          }
          else {
              el.setAttributeNS(xlinkNS, key, value);
          }
      }
      else {
          baseSetAttr(el, key, value);
      }
  }
  function baseSetAttr(el, key, value) {
      if (isFalsyAttrValue(value)) {
          el.removeAttribute(key);
      }
      else {
          // #7138: IE10 & 11 fires input event when setting placeholder on
          // <textarea>... block the first input event and remove the blocker
          // immediately.
          /* istanbul ignore if */
          if (isIE &&
              !isIE9 &&
              el.tagName === 'TEXTAREA' &&
              key === 'placeholder' &&
              value !== '' &&
              !el.__ieph) {
              var blocker_1 = function (e) {
                  e.stopImmediatePropagation();
                  el.removeEventListener('input', blocker_1);
              };
              el.addEventListener('input', blocker_1);
              // $flow-disable-line
              el.__ieph = true; /* IE placeholder patched */
          }
          el.setAttribute(key, value);
      }
  }
  var attrs = {
      create: updateAttrs,
      update: updateAttrs
  };

  function updateClass(oldVnode, vnode) {
      var el = vnode.elm;
      var data = vnode.data;
      var oldData = oldVnode.data;
      if (isUndef(data.staticClass) &&
          isUndef(data.class) &&
          (isUndef(oldData) ||
              (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
          return;
      }
      var cls = genClassForVnode(vnode);
      // handle transition classes
      var transitionClass = el._transitionClasses;
      if (isDef(transitionClass)) {
          cls = concat(cls, stringifyClass(transitionClass));
      }
      // set the class
      if (cls !== el._prevClass) {
          el.setAttribute('class', cls);
          el._prevClass = cls;
      }
  }
  var klass = {
      create: updateClass,
      update: updateClass
  };

  // in some cases, the event used has to be determined at runtime
  // so we used some reserved tokens during compile.
  var RANGE_TOKEN = '__r';
  var CHECKBOX_RADIO_TOKEN = '__c';

  // normalize v-model event tokens that can only be determined at runtime.
  // it's important to place the event as the first in the array because
  // the whole point is ensuring the v-model callback gets called before
  // user-attached handlers.
  function normalizeEvents(on) {
      /* istanbul ignore if */
      if (isDef(on[RANGE_TOKEN])) {
          // IE input[type=range] only supports `change` event
          var event_1 = isIE ? 'change' : 'input';
          on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);
          delete on[RANGE_TOKEN];
      }
      // This was originally intended to fix #4521 but no longer necessary
      // after 2.5. Keeping it for backwards compat with generated code from < 2.4
      /* istanbul ignore if */
      if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
          on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
          delete on[CHECKBOX_RADIO_TOKEN];
      }
  }
  var target;
  function createOnceHandler(event, handler, capture) {
      var _target = target; // save current target element in closure
      return function onceHandler() {
          var res = handler.apply(null, arguments);
          if (res !== null) {
              remove(event, onceHandler, capture, _target);
          }
      };
  }
  // #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
  // implementation and does not fire microtasks in between event propagation, so
  // safe to exclude.
  var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
  function add(name, handler, capture, passive) {
      // async edge case #6566: inner click event triggers patch, event handler
      // attached to outer element during patch, and triggered again. This
      // happens because browsers fire microtask ticks between event propagation.
      // the solution is simple: we save the timestamp when a handler is attached,
      // and the handler would only fire if the event passed to it was fired
      // AFTER it was attached.
      if (useMicrotaskFix) {
          var attachedTimestamp_1 = currentFlushTimestamp;
          var original_1 = handler;
          //@ts-expect-error
          handler = original_1._wrapper = function (e) {
              if (
              // no bubbling, should always fire.
              // this is just a safety net in case event.timeStamp is unreliable in
              // certain weird environments...
              e.target === e.currentTarget ||
                  // event is fired after handler attachment
                  e.timeStamp >= attachedTimestamp_1 ||
                  // bail for environments that have buggy event.timeStamp implementations
                  // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
                  // #9681 QtWebEngine event.timeStamp is negative value
                  e.timeStamp <= 0 ||
                  // #9448 bail if event is fired in another document in a multi-page
                  // electron/nw.js app, since event.timeStamp will be using a different
                  // starting reference
                  e.target.ownerDocument !== document) {
                  return original_1.apply(this, arguments);
              }
          };
      }
      target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);
  }
  function remove(name, handler, capture, _target) {
      (_target || target).removeEventListener(name, 
      //@ts-expect-error
      handler._wrapper || handler, capture);
  }
  function updateDOMListeners(oldVnode, vnode) {
      if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
          return;
      }
      var on = vnode.data.on || {};
      var oldOn = oldVnode.data.on || {};
      // vnode is empty when removing all listeners,
      // and use old vnode dom element
      target = vnode.elm || oldVnode.elm;
      normalizeEvents(on);
      updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
      target = undefined;
  }
  var events = {
      create: updateDOMListeners,
      update: updateDOMListeners,
      // @ts-expect-error emptyNode has actually data
      destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }
  };

  var svgContainer;
  function updateDOMProps(oldVnode, vnode) {
      if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
          return;
      }
      var key, cur;
      var elm = vnode.elm;
      var oldProps = oldVnode.data.domProps || {};
      var props = vnode.data.domProps || {};
      // clone observed objects, as the user probably wants to mutate it
      if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
          props = vnode.data.domProps = extend({}, props);
      }
      for (key in oldProps) {
          if (!(key in props)) {
              elm[key] = '';
          }
      }
      for (key in props) {
          cur = props[key];
          // ignore children if the node has textContent or innerHTML,
          // as these will throw away existing DOM nodes and cause removal errors
          // on subsequent patches (#3360)
          if (key === 'textContent' || key === 'innerHTML') {
              if (vnode.children)
                  vnode.children.length = 0;
              if (cur === oldProps[key])
                  continue;
              // #6601 work around Chrome version <= 55 bug where single textNode
              // replaced by innerHTML/textContent retains its parentNode property
              if (elm.childNodes.length === 1) {
                  elm.removeChild(elm.childNodes[0]);
              }
          }
          if (key === 'value' && elm.tagName !== 'PROGRESS') {
              // store value as _value as well since
              // non-string values will be stringified
              elm._value = cur;
              // avoid resetting cursor position when value is the same
              var strCur = isUndef(cur) ? '' : String(cur);
              if (shouldUpdateValue(elm, strCur)) {
                  elm.value = strCur;
              }
          }
          else if (key === 'innerHTML' &&
              isSVG(elm.tagName) &&
              isUndef(elm.innerHTML)) {
              // IE doesn't support innerHTML for SVG elements
              svgContainer = svgContainer || document.createElement('div');
              svgContainer.innerHTML = "<svg>".concat(cur, "</svg>");
              var svg = svgContainer.firstChild;
              while (elm.firstChild) {
                  elm.removeChild(elm.firstChild);
              }
              while (svg.firstChild) {
                  elm.appendChild(svg.firstChild);
              }
          }
          else if (
          // skip the update if old and new VDOM state is the same.
          // `value` is handled separately because the DOM value may be temporarily
          // out of sync with VDOM state due to focus, composition and modifiers.
          // This  #4521 by skipping the unnecessary `checked` update.
          cur !== oldProps[key]) {
              // some property updates can throw
              // e.g. `value` on <progress> w/ non-finite value
              try {
                  elm[key] = cur;
              }
              catch (e) { }
          }
      }
  }
  function shouldUpdateValue(elm, checkVal) {
      return (
      //@ts-expect-error
      !elm.composing &&
          (elm.tagName === 'OPTION' ||
              isNotInFocusAndDirty(elm, checkVal) ||
              isDirtyWithModifiers(elm, checkVal)));
  }
  function isNotInFocusAndDirty(elm, checkVal) {
      // return true when textbox (.number and .trim) loses focus and its value is
      // not equal to the updated value
      var notInFocus = true;
      // #6157
      // work around IE bug when accessing document.activeElement in an iframe
      try {
          notInFocus = document.activeElement !== elm;
      }
      catch (e) { }
      return notInFocus && elm.value !== checkVal;
  }
  function isDirtyWithModifiers(elm, newVal) {
      var value = elm.value;
      var modifiers = elm._vModifiers; // injected by v-model runtime
      if (isDef(modifiers)) {
          if (modifiers.number) {
              return toNumber(value) !== toNumber(newVal);
          }
          if (modifiers.trim) {
              return value.trim() !== newVal.trim();
          }
      }
      return value !== newVal;
  }
  var domProps = {
      create: updateDOMProps,
      update: updateDOMProps
  };

  var parseStyleText = cached(function (cssText) {
      var res = {};
      var listDelimiter = /;(?![^(]*\))/g;
      var propertyDelimiter = /:(.+)/;
      cssText.split(listDelimiter).forEach(function (item) {
          if (item) {
              var tmp = item.split(propertyDelimiter);
              tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
          }
      });
      return res;
  });
  // merge static and dynamic style data on the same vnode
  function normalizeStyleData(data) {
      var style = normalizeStyleBinding(data.style);
      // static style is pre-processed into an object during compilation
      // and is always a fresh object, so it's safe to merge into it
      return data.staticStyle ? extend(data.staticStyle, style) : style;
  }
  // normalize possible array / string values into Object
  function normalizeStyleBinding(bindingStyle) {
      if (Array.isArray(bindingStyle)) {
          return toObject(bindingStyle);
      }
      if (typeof bindingStyle === 'string') {
          return parseStyleText(bindingStyle);
      }
      return bindingStyle;
  }
  /**
   * parent component style should be after child's
   * so that parent component's style could override it
   */
  function getStyle(vnode, checkChild) {
      var res = {};
      var styleData;
      if (checkChild) {
          var childNode = vnode;
          while (childNode.componentInstance) {
              childNode = childNode.componentInstance._vnode;
              if (childNode &&
                  childNode.data &&
                  (styleData = normalizeStyleData(childNode.data))) {
                  extend(res, styleData);
              }
          }
      }
      if ((styleData = normalizeStyleData(vnode.data))) {
          extend(res, styleData);
      }
      var parentNode = vnode;
      // @ts-expect-error parentNode.parent not VNodeWithData
      while ((parentNode = parentNode.parent)) {
          if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
              extend(res, styleData);
          }
      }
      return res;
  }

  var cssVarRE = /^--/;
  var importantRE = /\s*!important$/;
  var setProp = function (el, name, val) {
      /* istanbul ignore if */
      if (cssVarRE.test(name)) {
          el.style.setProperty(name, val);
      }
      else if (importantRE.test(val)) {
          el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
      }
      else {
          var normalizedName = normalize(name);
          if (Array.isArray(val)) {
              // Support values array created by autoprefixer, e.g.
              // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
              // Set them one by one, and the browser will only set those it can recognize
              for (var i = 0, len = val.length; i < len; i++) {
                  el.style[normalizedName] = val[i];
              }
          }
          else {
              el.style[normalizedName] = val;
          }
      }
  };
  var vendorNames = ['Webkit', 'Moz', 'ms'];
  var emptyStyle;
  var normalize = cached(function (prop) {
      emptyStyle = emptyStyle || document.createElement('div').style;
      prop = camelize(prop);
      if (prop !== 'filter' && prop in emptyStyle) {
          return prop;
      }
      var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
      for (var i = 0; i < vendorNames.length; i++) {
          var name_1 = vendorNames[i] + capName;
          if (name_1 in emptyStyle) {
              return name_1;
          }
      }
  });
  function updateStyle(oldVnode, vnode) {
      var data = vnode.data;
      var oldData = oldVnode.data;
      if (isUndef(data.staticStyle) &&
          isUndef(data.style) &&
          isUndef(oldData.staticStyle) &&
          isUndef(oldData.style)) {
          return;
      }
      var cur, name;
      var el = vnode.elm;
      var oldStaticStyle = oldData.staticStyle;
      var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
      // if static style exists, stylebinding already merged into it when doing normalizeStyleData
      var oldStyle = oldStaticStyle || oldStyleBinding;
      var style = normalizeStyleBinding(vnode.data.style) || {};
      // store normalized style under a different key for next diff
      // make sure to clone it if it's reactive, since the user likely wants
      // to mutate it.
      vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
      var newStyle = getStyle(vnode, true);
      for (name in oldStyle) {
          if (isUndef(newStyle[name])) {
              setProp(el, name, '');
          }
      }
      for (name in newStyle) {
          cur = newStyle[name];
          if (cur !== oldStyle[name]) {
              // ie9 setting to null has no effect, must use empty string
              setProp(el, name, cur == null ? '' : cur);
          }
      }
  }
  var style = {
      create: updateStyle,
      update: updateStyle
  };

  var whitespaceRE = /\s+/;
  /**
   * Add class with compatibility for SVG since classList is not supported on
   * SVG elements in IE
   */
  function addClass(el, cls) {
      /* istanbul ignore if */
      if (!cls || !(cls = cls.trim())) {
          return;
      }
      /* istanbul ignore else */
      if (el.classList) {
          if (cls.indexOf(' ') > -1) {
              cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });
          }
          else {
              el.classList.add(cls);
          }
      }
      else {
          var cur = " ".concat(el.getAttribute('class') || '', " ");
          if (cur.indexOf(' ' + cls + ' ') < 0) {
              el.setAttribute('class', (cur + cls).trim());
          }
      }
  }
  /**
   * Remove class with compatibility for SVG since classList is not supported on
   * SVG elements in IE
   */
  function removeClass(el, cls) {
      /* istanbul ignore if */
      if (!cls || !(cls = cls.trim())) {
          return;
      }
      /* istanbul ignore else */
      if (el.classList) {
          if (cls.indexOf(' ') > -1) {
              cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });
          }
          else {
              el.classList.remove(cls);
          }
          if (!el.classList.length) {
              el.removeAttribute('class');
          }
      }
      else {
          var cur = " ".concat(el.getAttribute('class') || '', " ");
          var tar = ' ' + cls + ' ';
          while (cur.indexOf(tar) >= 0) {
              cur = cur.replace(tar, ' ');
          }
          cur = cur.trim();
          if (cur) {
              el.setAttribute('class', cur);
          }
          else {
              el.removeAttribute('class');
          }
      }
  }

  function resolveTransition(def) {
      if (!def) {
          return;
      }
      /* istanbul ignore else */
      if (typeof def === 'object') {
          var res = {};
          if (def.css !== false) {
              extend(res, autoCssTransition(def.name || 'v'));
          }
          extend(res, def);
          return res;
      }
      else if (typeof def === 'string') {
          return autoCssTransition(def);
      }
  }
  var autoCssTransition = cached(function (name) {
      return {
          enterClass: "".concat(name, "-enter"),
          enterToClass: "".concat(name, "-enter-to"),
          enterActiveClass: "".concat(name, "-enter-active"),
          leaveClass: "".concat(name, "-leave"),
          leaveToClass: "".concat(name, "-leave-to"),
          leaveActiveClass: "".concat(name, "-leave-active")
      };
  });
  var hasTransition = inBrowser && !isIE9;
  var TRANSITION = 'transition';
  var ANIMATION = 'animation';
  // Transition property/event sniffing
  var transitionProp = 'transition';
  var transitionEndEvent = 'transitionend';
  var animationProp = 'animation';
  var animationEndEvent = 'animationend';
  if (hasTransition) {
      /* istanbul ignore if */
      if (window.ontransitionend === undefined &&
          window.onwebkittransitionend !== undefined) {
          transitionProp = 'WebkitTransition';
          transitionEndEvent = 'webkitTransitionEnd';
      }
      if (window.onanimationend === undefined &&
          window.onwebkitanimationend !== undefined) {
          animationProp = 'WebkitAnimation';
          animationEndEvent = 'webkitAnimationEnd';
      }
  }
  // binding to window is necessary to make hot reload work in IE in strict mode
  var raf = inBrowser
      ? window.requestAnimationFrame
          ? window.requestAnimationFrame.bind(window)
          : setTimeout
      : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };
  function nextFrame(fn) {
      raf(function () {
          // @ts-expect-error
          raf(fn);
      });
  }
  function addTransitionClass(el, cls) {
      var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
      if (transitionClasses.indexOf(cls) < 0) {
          transitionClasses.push(cls);
          addClass(el, cls);
      }
  }
  function removeTransitionClass(el, cls) {
      if (el._transitionClasses) {
          remove$2(el._transitionClasses, cls);
      }
      removeClass(el, cls);
  }
  function whenTransitionEnds(el, expectedType, cb) {
      var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;
      if (!type)
          return cb();
      var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
      var ended = 0;
      var end = function () {
          el.removeEventListener(event, onEnd);
          cb();
      };
      var onEnd = function (e) {
          if (e.target === el) {
              if (++ended >= propCount) {
                  end();
              }
          }
      };
      setTimeout(function () {
          if (ended < propCount) {
              end();
          }
      }, timeout + 1);
      el.addEventListener(event, onEnd);
  }
  var transformRE = /\b(transform|all)(,|$)/;
  function getTransitionInfo(el, expectedType) {
      var styles = window.getComputedStyle(el);
      // JSDOM may return undefined for transition properties
      var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
      var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
      var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
      var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
      var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
      var animationTimeout = getTimeout(animationDelays, animationDurations);
      var type;
      var timeout = 0;
      var propCount = 0;
      /* istanbul ignore if */
      if (expectedType === TRANSITION) {
          if (transitionTimeout > 0) {
              type = TRANSITION;
              timeout = transitionTimeout;
              propCount = transitionDurations.length;
          }
      }
      else if (expectedType === ANIMATION) {
          if (animationTimeout > 0) {
              type = ANIMATION;
              timeout = animationTimeout;
              propCount = animationDurations.length;
          }
      }
      else {
          timeout = Math.max(transitionTimeout, animationTimeout);
          type =
              timeout > 0
                  ? transitionTimeout > animationTimeout
                      ? TRANSITION
                      : ANIMATION
                  : null;
          propCount = type
              ? type === TRANSITION
                  ? transitionDurations.length
                  : animationDurations.length
              : 0;
      }
      var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
      return {
          type: type,
          timeout: timeout,
          propCount: propCount,
          hasTransform: hasTransform
      };
  }
  function getTimeout(delays, durations) {
      /* istanbul ignore next */
      while (delays.length < durations.length) {
          delays = delays.concat(delays);
      }
      return Math.max.apply(null, durations.map(function (d, i) {
          return toMs(d) + toMs(delays[i]);
      }));
  }
  // Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
  // in a locale-dependent way, using a comma instead of a dot.
  // If comma is not replaced with a dot, the input will be rounded down (i.e. acting
  // as a floor function) causing unexpected behaviors
  function toMs(s) {
      return Number(s.slice(0, -1).replace(',', '.')) * 1000;
  }

  function enter(vnode, toggleDisplay) {
      var el = vnode.elm;
      // call leave callback now
      if (isDef(el._leaveCb)) {
          el._leaveCb.cancelled = true;
          el._leaveCb();
      }
      var data = resolveTransition(vnode.data.transition);
      if (isUndef(data)) {
          return;
      }
      /* istanbul ignore if */
      if (isDef(el._enterCb) || el.nodeType !== 1) {
          return;
      }
      var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;
      // activeInstance will always be the <transition> component managing this
      // transition. One edge case to check is when the <transition> is placed
      // as the root node of a child component. In that case we need to check
      // <transition>'s parent for appear check.
      var context = activeInstance;
      var transitionNode = activeInstance.$vnode;
      while (transitionNode && transitionNode.parent) {
          context = transitionNode.context;
          transitionNode = transitionNode.parent;
      }
      var isAppear = !context._isMounted || !vnode.isRootInsert;
      if (isAppear && !appear && appear !== '') {
          return;
      }
      var startClass = isAppear && appearClass ? appearClass : enterClass;
      var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
      var toClass = isAppear && appearToClass ? appearToClass : enterToClass;
      var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
      var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
      var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
      var enterCancelledHook = isAppear
          ? appearCancelled || enterCancelled
          : enterCancelled;
      var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
      if (explicitEnterDuration != null) {
          checkDuration(explicitEnterDuration, 'enter', vnode);
      }
      var expectsCSS = css !== false && !isIE9;
      var userWantsControl = getHookArgumentsLength(enterHook);
      var cb = (el._enterCb = once(function () {
          if (expectsCSS) {
              removeTransitionClass(el, toClass);
              removeTransitionClass(el, activeClass);
          }
          // @ts-expect-error
          if (cb.cancelled) {
              if (expectsCSS) {
                  removeTransitionClass(el, startClass);
              }
              enterCancelledHook && enterCancelledHook(el);
          }
          else {
              afterEnterHook && afterEnterHook(el);
          }
          el._enterCb = null;
      }));
      if (!vnode.data.show) {
          // remove pending leave element on enter by injecting an insert hook
          mergeVNodeHook(vnode, 'insert', function () {
              var parent = el.parentNode;
              var pendingNode = parent && parent._pending && parent._pending[vnode.key];
              if (pendingNode &&
                  pendingNode.tag === vnode.tag &&
                  pendingNode.elm._leaveCb) {
                  pendingNode.elm._leaveCb();
              }
              enterHook && enterHook(el, cb);
          });
      }
      // start enter transition
      beforeEnterHook && beforeEnterHook(el);
      if (expectsCSS) {
          addTransitionClass(el, startClass);
          addTransitionClass(el, activeClass);
          nextFrame(function () {
              removeTransitionClass(el, startClass);
              // @ts-expect-error
              if (!cb.cancelled) {
                  addTransitionClass(el, toClass);
                  if (!userWantsControl) {
                      if (isValidDuration(explicitEnterDuration)) {
                          setTimeout(cb, explicitEnterDuration);
                      }
                      else {
                          whenTransitionEnds(el, type, cb);
                      }
                  }
              }
          });
      }
      if (vnode.data.show) {
          toggleDisplay && toggleDisplay();
          enterHook && enterHook(el, cb);
      }
      if (!expectsCSS && !userWantsControl) {
          cb();
      }
  }
  function leave(vnode, rm) {
      var el = vnode.elm;
      // call enter callback now
      if (isDef(el._enterCb)) {
          el._enterCb.cancelled = true;
          el._enterCb();
      }
      var data = resolveTransition(vnode.data.transition);
      if (isUndef(data) || el.nodeType !== 1) {
          return rm();
      }
      /* istanbul ignore if */
      if (isDef(el._leaveCb)) {
          return;
      }
      var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;
      var expectsCSS = css !== false && !isIE9;
      var userWantsControl = getHookArgumentsLength(leave);
      var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
      if (isDef(explicitLeaveDuration)) {
          checkDuration(explicitLeaveDuration, 'leave', vnode);
      }
      var cb = (el._leaveCb = once(function () {
          if (el.parentNode && el.parentNode._pending) {
              el.parentNode._pending[vnode.key] = null;
          }
          if (expectsCSS) {
              removeTransitionClass(el, leaveToClass);
              removeTransitionClass(el, leaveActiveClass);
          }
          // @ts-expect-error
          if (cb.cancelled) {
              if (expectsCSS) {
                  removeTransitionClass(el, leaveClass);
              }
              leaveCancelled && leaveCancelled(el);
          }
          else {
              rm();
              afterLeave && afterLeave(el);
          }
          el._leaveCb = null;
      }));
      if (delayLeave) {
          delayLeave(performLeave);
      }
      else {
          performLeave();
      }
      function performLeave() {
          // the delayed leave may have already been cancelled
          // @ts-expect-error
          if (cb.cancelled) {
              return;
          }
          // record leaving element
          if (!vnode.data.show && el.parentNode) {
              (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
                  vnode;
          }
          beforeLeave && beforeLeave(el);
          if (expectsCSS) {
              addTransitionClass(el, leaveClass);
              addTransitionClass(el, leaveActiveClass);
              nextFrame(function () {
                  removeTransitionClass(el, leaveClass);
                  // @ts-expect-error
                  if (!cb.cancelled) {
                      addTransitionClass(el, leaveToClass);
                      if (!userWantsControl) {
                          if (isValidDuration(explicitLeaveDuration)) {
                              setTimeout(cb, explicitLeaveDuration);
                          }
                          else {
                              whenTransitionEnds(el, type, cb);
                          }
                      }
                  }
              });
          }
          leave && leave(el, cb);
          if (!expectsCSS && !userWantsControl) {
              cb();
          }
      }
  }
  // only used in dev mode
  function checkDuration(val, name, vnode) {
      if (typeof val !== 'number') {
          warn("<transition> explicit ".concat(name, " duration is not a valid number - ") +
              "got ".concat(JSON.stringify(val), "."), vnode.context);
      }
      else if (isNaN(val)) {
          warn("<transition> explicit ".concat(name, " duration is NaN - ") +
              'the duration expression might be incorrect.', vnode.context);
      }
  }
  function isValidDuration(val) {
      return typeof val === 'number' && !isNaN(val);
  }
  /**
   * Normalize a transition hook's argument length. The hook may be:
   * - a merged hook (invoker) with the original in .fns
   * - a wrapped component method (check ._length)
   * - a plain function (.length)
   */
  function getHookArgumentsLength(fn) {
      if (isUndef(fn)) {
          return false;
      }
      // @ts-expect-error
      var invokerFns = fn.fns;
      if (isDef(invokerFns)) {
          // invoker
          return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
      }
      else {
          // @ts-expect-error
          return (fn._length || fn.length) > 1;
      }
  }
  function _enter(_, vnode) {
      if (vnode.data.show !== true) {
          enter(vnode);
      }
  }
  var transition = inBrowser
      ? {
          create: _enter,
          activate: _enter,
          remove: function (vnode, rm) {
              /* istanbul ignore else */
              if (vnode.data.show !== true) {
                  // @ts-expect-error
                  leave(vnode, rm);
              }
              else {
                  rm();
              }
          }
      }
      : {};

  var platformModules = [attrs, klass, events, domProps, style, transition];

  // the directive module should be applied last, after all
  // built-in modules have been applied.
  var modules = platformModules.concat(baseModules);
  var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });

  /**
   * Not type checking this file because flow doesn't like attaching
   * properties to Elements.
   */
  /* istanbul ignore if */
  if (isIE9) {
      // http://www.matts411.com/post/internet-explorer-9-oninput/
      document.addEventListener('selectionchange', function () {
          var el = document.activeElement;
          // @ts-expect-error
          if (el && el.vmodel) {
              trigger(el, 'input');
          }
      });
  }
  var directive = {
      inserted: function (el, binding, vnode, oldVnode) {
          if (vnode.tag === 'select') {
              // #6903
              if (oldVnode.elm && !oldVnode.elm._vOptions) {
                  mergeVNodeHook(vnode, 'postpatch', function () {
                      directive.componentUpdated(el, binding, vnode);
                  });
              }
              else {
                  setSelected(el, binding, vnode.context);
              }
              el._vOptions = [].map.call(el.options, getValue);
          }
          else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
              el._vModifiers = binding.modifiers;
              if (!binding.modifiers.lazy) {
                  el.addEventListener('compositionstart', onCompositionStart);
                  el.addEventListener('compositionend', onCompositionEnd);
                  // Safari < 10.2 & UIWebView doesn't fire compositionend when
                  // switching focus before confirming composition choice
                  // this also fixes the issue where some browsers e.g. iOS Chrome
                  // fires "change" instead of "input" on autocomplete.
                  el.addEventListener('change', onCompositionEnd);
                  /* istanbul ignore if */
                  if (isIE9) {
                      el.vmodel = true;
                  }
              }
          }
      },
      componentUpdated: function (el, binding, vnode) {
          if (vnode.tag === 'select') {
              setSelected(el, binding, vnode.context);
              // in case the options rendered by v-for have changed,
              // it's possible that the value is out-of-sync with the rendered options.
              // detect such cases and filter out values that no longer has a matching
              // option in the DOM.
              var prevOptions_1 = el._vOptions;
              var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));
              if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {
                  // trigger change event if
                  // no matching option found for at least one value
                  var needReset = el.multiple
                      ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })
                      : binding.value !== binding.oldValue &&
                          hasNoMatchingOption(binding.value, curOptions_1);
                  if (needReset) {
                      trigger(el, 'change');
                  }
              }
          }
      }
  };
  function setSelected(el, binding, vm) {
      actuallySetSelected(el, binding, vm);
      /* istanbul ignore if */
      if (isIE || isEdge) {
          setTimeout(function () {
              actuallySetSelected(el, binding, vm);
          }, 0);
      }
  }
  function actuallySetSelected(el, binding, vm) {
      var value = binding.value;
      var isMultiple = el.multiple;
      if (isMultiple && !Array.isArray(value)) {
          warn("<select multiple v-model=\"".concat(binding.expression, "\"> ") +
                  "expects an Array value for its binding, but got ".concat(Object.prototype.toString
                      .call(value)
                      .slice(8, -1)), vm);
          return;
      }
      var selected, option;
      for (var i = 0, l = el.options.length; i < l; i++) {
          option = el.options[i];
          if (isMultiple) {
              selected = looseIndexOf(value, getValue(option)) > -1;
              if (option.selected !== selected) {
                  option.selected = selected;
              }
          }
          else {
              if (looseEqual(getValue(option), value)) {
                  if (el.selectedIndex !== i) {
                      el.selectedIndex = i;
                  }
                  return;
              }
          }
      }
      if (!isMultiple) {
          el.selectedIndex = -1;
      }
  }
  function hasNoMatchingOption(value, options) {
      return options.every(function (o) { return !looseEqual(o, value); });
  }
  function getValue(option) {
      return '_value' in option ? option._value : option.value;
  }
  function onCompositionStart(e) {
      e.target.composing = true;
  }
  function onCompositionEnd(e) {
      // prevent triggering an input event for no reason
      if (!e.target.composing)
          return;
      e.target.composing = false;
      trigger(e.target, 'input');
  }
  function trigger(el, type) {
      var e = document.createEvent('HTMLEvents');
      e.initEvent(type, true, true);
      el.dispatchEvent(e);
  }

  // recursively search for possible transition defined inside the component root
  function locateNode(vnode) {
      // @ts-expect-error
      return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
          ? locateNode(vnode.componentInstance._vnode)
          : vnode;
  }
  var show = {
      bind: function (el, _a, vnode) {
          var value = _a.value;
          vnode = locateNode(vnode);
          var transition = vnode.data && vnode.data.transition;
          var originalDisplay = (el.__vOriginalDisplay =
              el.style.display === 'none' ? '' : el.style.display);
          if (value && transition) {
              vnode.data.show = true;
              enter(vnode, function () {
                  el.style.display = originalDisplay;
              });
          }
          else {
              el.style.display = value ? originalDisplay : 'none';
          }
      },
      update: function (el, _a, vnode) {
          var value = _a.value, oldValue = _a.oldValue;
          /* istanbul ignore if */
          if (!value === !oldValue)
              return;
          vnode = locateNode(vnode);
          var transition = vnode.data && vnode.data.transition;
          if (transition) {
              vnode.data.show = true;
              if (value) {
                  enter(vnode, function () {
                      el.style.display = el.__vOriginalDisplay;
                  });
              }
              else {
                  leave(vnode, function () {
                      el.style.display = 'none';
                  });
              }
          }
          else {
              el.style.display = value ? el.__vOriginalDisplay : 'none';
          }
      },
      unbind: function (el, binding, vnode, oldVnode, isDestroy) {
          if (!isDestroy) {
              el.style.display = el.__vOriginalDisplay;
          }
      }
  };

  var platformDirectives = {
      model: directive,
      show: show
  };

  // Provides transition support for a single element/component.
  var transitionProps = {
      name: String,
      appear: Boolean,
      css: Boolean,
      mode: String,
      type: String,
      enterClass: String,
      leaveClass: String,
      enterToClass: String,
      leaveToClass: String,
      enterActiveClass: String,
      leaveActiveClass: String,
      appearClass: String,
      appearActiveClass: String,
      appearToClass: String,
      duration: [Number, String, Object]
  };
  // in case the child is also an abstract component, e.g. <keep-alive>
  // we want to recursively retrieve the real component to be rendered
  function getRealChild(vnode) {
      var compOptions = vnode && vnode.componentOptions;
      if (compOptions && compOptions.Ctor.options.abstract) {
          return getRealChild(getFirstComponentChild(compOptions.children));
      }
      else {
          return vnode;
      }
  }
  function extractTransitionData(comp) {
      var data = {};
      var options = comp.$options;
      // props
      for (var key in options.propsData) {
          data[key] = comp[key];
      }
      // events.
      // extract listeners and pass them directly to the transition methods
      var listeners = options._parentListeners;
      for (var key in listeners) {
          data[camelize(key)] = listeners[key];
      }
      return data;
  }
  function placeholder(h, rawChild) {
      // @ts-expect-error
      if (/\d-keep-alive$/.test(rawChild.tag)) {
          return h('keep-alive', {
              props: rawChild.componentOptions.propsData
          });
      }
  }
  function hasParentTransition(vnode) {
      while ((vnode = vnode.parent)) {
          if (vnode.data.transition) {
              return true;
          }
      }
  }
  function isSameChild(child, oldChild) {
      return oldChild.key === child.key && oldChild.tag === child.tag;
  }
  var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
  var isVShowDirective = function (d) { return d.name === 'show'; };
  var Transition = {
      name: 'transition',
      props: transitionProps,
      abstract: true,
      render: function (h) {
          var _this = this;
          var children = this.$slots.default;
          if (!children) {
              return;
          }
          // filter out text nodes (possible whitespaces)
          children = children.filter(isNotTextNode);
          /* istanbul ignore if */
          if (!children.length) {
              return;
          }
          // warn multiple elements
          if (children.length > 1) {
              warn('<transition> can only be used on a single element. Use ' +
                  '<transition-group> for lists.', this.$parent);
          }
          var mode = this.mode;
          // warn invalid mode
          if (mode && mode !== 'in-out' && mode !== 'out-in') {
              warn('invalid <transition> mode: ' + mode, this.$parent);
          }
          var rawChild = children[0];
          // if this is a component root node and the component's
          // parent container node also has transition, skip.
          if (hasParentTransition(this.$vnode)) {
              return rawChild;
          }
          // apply transition data to child
          // use getRealChild() to ignore abstract components e.g. keep-alive
          var child = getRealChild(rawChild);
          /* istanbul ignore if */
          if (!child) {
              return rawChild;
          }
          if (this._leaving) {
              return placeholder(h, rawChild);
          }
          // ensure a key that is unique to the vnode type and to this transition
          // component instance. This key will be used to remove pending leaving nodes
          // during entering.
          var id = "__transition-".concat(this._uid, "-");
          child.key =
              child.key == null
                  ? child.isComment
                      ? id + 'comment'
                      : id + child.tag
                  : isPrimitive(child.key)
                      ? String(child.key).indexOf(id) === 0
                          ? child.key
                          : id + child.key
                      : child.key;
          var data = ((child.data || (child.data = {})).transition =
              extractTransitionData(this));
          var oldRawChild = this._vnode;
          var oldChild = getRealChild(oldRawChild);
          // mark v-show
          // so that the transition module can hand over the control to the directive
          if (child.data.directives && child.data.directives.some(isVShowDirective)) {
              child.data.show = true;
          }
          if (oldChild &&
              oldChild.data &&
              !isSameChild(child, oldChild) &&
              !isAsyncPlaceholder(oldChild) &&
              // #6687 component root is a comment node
              !(oldChild.componentInstance &&
                  oldChild.componentInstance._vnode.isComment)) {
              // replace old child transition data with fresh one
              // important for dynamic transitions!
              var oldData = (oldChild.data.transition = extend({}, data));
              // handle transition mode
              if (mode === 'out-in') {
                  // return placeholder node and queue update when leave finishes
                  this._leaving = true;
                  mergeVNodeHook(oldData, 'afterLeave', function () {
                      _this._leaving = false;
                      _this.$forceUpdate();
                  });
                  return placeholder(h, rawChild);
              }
              else if (mode === 'in-out') {
                  if (isAsyncPlaceholder(child)) {
                      return oldRawChild;
                  }
                  var delayedLeave_1;
                  var performLeave = function () {
                      delayedLeave_1();
                  };
                  mergeVNodeHook(data, 'afterEnter', performLeave);
                  mergeVNodeHook(data, 'enterCancelled', performLeave);
                  mergeVNodeHook(oldData, 'delayLeave', function (leave) {
                      delayedLeave_1 = leave;
                  });
              }
          }
          return rawChild;
      }
  };

  // Provides transition support for list items.
  var props = extend({
      tag: String,
      moveClass: String
  }, transitionProps);
  delete props.mode;
  var TransitionGroup = {
      props: props,
      beforeMount: function () {
          var _this = this;
          var update = this._update;
          this._update = function (vnode, hydrating) {
              var restoreActiveInstance = setActiveInstance(_this);
              // force removing pass
              _this.__patch__(_this._vnode, _this.kept, false, // hydrating
              true // removeOnly (!important, avoids unnecessary moves)
              );
              _this._vnode = _this.kept;
              restoreActiveInstance();
              update.call(_this, vnode, hydrating);
          };
      },
      render: function (h) {
          var tag = this.tag || this.$vnode.data.tag || 'span';
          var map = Object.create(null);
          var prevChildren = (this.prevChildren = this.children);
          var rawChildren = this.$slots.default || [];
          var children = (this.children = []);
          var transitionData = extractTransitionData(this);
          for (var i = 0; i < rawChildren.length; i++) {
              var c = rawChildren[i];
              if (c.tag) {
                  if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
                      children.push(c);
                      map[c.key] = c;
                      (c.data || (c.data = {})).transition = transitionData;
                  }
                  else {
                      var opts = c.componentOptions;
                      var name_1 = opts
                          ? getComponentName(opts.Ctor.options) || opts.tag || ''
                          : c.tag;
                      warn("<transition-group> children must be keyed: <".concat(name_1, ">"));
                  }
              }
          }
          if (prevChildren) {
              var kept = [];
              var removed = [];
              for (var i = 0; i < prevChildren.length; i++) {
                  var c = prevChildren[i];
                  c.data.transition = transitionData;
                  // @ts-expect-error .getBoundingClientRect is not typed in Node
                  c.data.pos = c.elm.getBoundingClientRect();
                  if (map[c.key]) {
                      kept.push(c);
                  }
                  else {
                      removed.push(c);
                  }
              }
              this.kept = h(tag, null, kept);
              this.removed = removed;
          }
          return h(tag, null, children);
      },
      updated: function () {
          var children = this.prevChildren;
          var moveClass = this.moveClass || (this.name || 'v') + '-move';
          if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
              return;
          }
          // we divide the work into three loops to avoid mixing DOM reads and writes
          // in each iteration - which helps prevent layout thrashing.
          children.forEach(callPendingCbs);
          children.forEach(recordPosition);
          children.forEach(applyTranslation);
          // force reflow to put everything in position
          // assign to this to avoid being removed in tree-shaking
          // $flow-disable-line
          this._reflow = document.body.offsetHeight;
          children.forEach(function (c) {
              if (c.data.moved) {
                  var el_1 = c.elm;
                  var s = el_1.style;
                  addTransitionClass(el_1, moveClass);
                  s.transform = s.WebkitTransform = s.transitionDuration = '';
                  el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {
                      if (e && e.target !== el_1) {
                          return;
                      }
                      if (!e || /transform$/.test(e.propertyName)) {
                          el_1.removeEventListener(transitionEndEvent, cb);
                          el_1._moveCb = null;
                          removeTransitionClass(el_1, moveClass);
                      }
                  }));
              }
          });
      },
      methods: {
          hasMove: function (el, moveClass) {
              /* istanbul ignore if */
              if (!hasTransition) {
                  return false;
              }
              /* istanbul ignore if */
              if (this._hasMove) {
                  return this._hasMove;
              }
              // Detect whether an element with the move class applied has
              // CSS transitions. Since the element may be inside an entering
              // transition at this very moment, we make a clone of it and remove
              // all other transition classes applied to ensure only the move class
              // is applied.
              var clone = el.cloneNode();
              if (el._transitionClasses) {
                  el._transitionClasses.forEach(function (cls) {
                      removeClass(clone, cls);
                  });
              }
              addClass(clone, moveClass);
              clone.style.display = 'none';
              this.$el.appendChild(clone);
              var info = getTransitionInfo(clone);
              this.$el.removeChild(clone);
              return (this._hasMove = info.hasTransform);
          }
      }
  };
  function callPendingCbs(c) {
      /* istanbul ignore if */
      if (c.elm._moveCb) {
          c.elm._moveCb();
      }
      /* istanbul ignore if */
      if (c.elm._enterCb) {
          c.elm._enterCb();
      }
  }
  function recordPosition(c) {
      c.data.newPos = c.elm.getBoundingClientRect();
  }
  function applyTranslation(c) {
      var oldPos = c.data.pos;
      var newPos = c.data.newPos;
      var dx = oldPos.left - newPos.left;
      var dy = oldPos.top - newPos.top;
      if (dx || dy) {
          c.data.moved = true;
          var s = c.elm.style;
          s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)");
          s.transitionDuration = '0s';
      }
  }

  var platformComponents = {
      Transition: Transition,
      TransitionGroup: TransitionGroup
  };

  // install platform specific utils
  Vue.config.mustUseProp = mustUseProp;
  Vue.config.isReservedTag = isReservedTag;
  Vue.config.isReservedAttr = isReservedAttr;
  Vue.config.getTagNamespace = getTagNamespace;
  Vue.config.isUnknownElement = isUnknownElement;
  // install platform runtime directives & components
  extend(Vue.options.directives, platformDirectives);
  extend(Vue.options.components, platformComponents);
  // install platform patch function
  Vue.prototype.__patch__ = inBrowser ? patch : noop;
  // public mount method
  Vue.prototype.$mount = function (el, hydrating) {
      el = el && inBrowser ? query(el) : undefined;
      return mountComponent(this, el, hydrating);
  };
  // devtools global hook
  /* istanbul ignore next */
  if (inBrowser) {
      setTimeout(function () {
          if (config.devtools) {
              if (devtools) {
                  devtools.emit('init', Vue);
              }
              else {
                  // @ts-expect-error
                  console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
                      'https://github.com/vuejs/vue-devtools');
              }
          }
          if (config.productionTip !== false &&
              typeof console !== 'undefined') {
              // @ts-expect-error
              console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" +
                  "Make sure to turn on production mode when deploying for production.\n" +
                  "See more tips at https://vuejs.org/guide/deployment.html");
          }
      }, 0);
  }

  extend(Vue, vca);

  return Vue;

}));
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
/*!
 * Vue.js v2.7.14
 * (c) 2014-2022 Evan You
 * Released under the MIT License.
 */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Vue=e()}(this,(function(){"use strict";var t=Object.freeze({}),e=Array.isArray;function n(t){return null==t}function r(t){return null!=t}function o(t){return!0===t}function i(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function a(t){return"function"==typeof t}function s(t){return null!==t&&"object"==typeof t}var c=Object.prototype.toString;function u(t){return"[object Object]"===c.call(t)}function f(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function l(t){return r(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||u(t)&&t.toString===c?JSON.stringify(t,null,2):String(t)}function p(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}var h=v("key,ref,slot,slot-scope,is");function m(t,e){var n=t.length;if(n){if(e===t[n-1])return void(t.length=n-1);var r=t.indexOf(e);if(r>-1)return t.splice(r,1)}}var _=Object.prototype.hasOwnProperty;function y(t,e){return _.call(t,e)}function g(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var b=/-(\w)/g,w=g((function(t){return t.replace(b,(function(t,e){return e?e.toUpperCase():""}))})),C=g((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),$=/\B([A-Z])/g,x=g((function(t){return t.replace($,"-$1").toLowerCase()}));var O=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function k(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function S(t,e){for(var n in e)t[n]=e[n];return t}function j(t){for(var e={},n=0;n<t.length;n++)t[n]&&S(e,t[n]);return e}function T(t,e,n){}var A=function(t,e,n){return!1},E=function(t){return t};function P(t,e){if(t===e)return!0;var n=s(t),r=s(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{var o=Array.isArray(t),i=Array.isArray(e);if(o&&i)return t.length===e.length&&t.every((function(t,n){return P(t,e[n])}));if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(o||i)return!1;var a=Object.keys(t),c=Object.keys(e);return a.length===c.length&&a.every((function(n){return P(t[n],e[n])}))}catch(t){return!1}}function I(t,e){for(var n=0;n<t.length;n++)if(P(t[n],e))return n;return-1}function D(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function N(t,e){return t===e?0===t&&1/t!=1/e:t==t||e==e}var M="data-server-rendered",L=["component","directive","filter"],R=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"],F={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:A,isReservedAttr:A,isUnknownElement:A,getTagNamespace:T,parsePlatformTagName:E,mustUseProp:A,async:!0,_lifecycleHooks:R};function U(t){var e=(t+"").charCodeAt(0);return 36===e||95===e}function V(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var B=new RegExp("[^".concat(/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/.source,".$_\\d]"));var z="__proto__"in{},H="undefined"!=typeof window,W=H&&window.navigator.userAgent.toLowerCase(),K=W&&/msie|trident/.test(W),q=W&&W.indexOf("msie 9.0")>0,G=W&&W.indexOf("edge/")>0;W&&W.indexOf("android");var Z=W&&/iphone|ipad|ipod|ios/.test(W);W&&/chrome\/\d+/.test(W),W&&/phantomjs/.test(W);var J,X=W&&W.match(/firefox\/(\d+)/),Q={}.watch,Y=!1;if(H)try{var tt={};Object.defineProperty(tt,"passive",{get:function(){Y=!0}}),window.addEventListener("test-passive",null,tt)}catch(t){}var et=function(){return void 0===J&&(J=!H&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),J},nt=H&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function rt(t){return"function"==typeof t&&/native code/.test(t.toString())}var ot,it="undefined"!=typeof Symbol&&rt(Symbol)&&"undefined"!=typeof Reflect&&rt(Reflect.ownKeys);ot="undefined"!=typeof Set&&rt(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var at=null;function st(t){void 0===t&&(t=null),t||at&&at._scope.off(),at=t,t&&t._scope.on()}var ct=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),ut=function(t){void 0===t&&(t="");var e=new ct;return e.text=t,e.isComment=!0,e};function ft(t){return new ct(void 0,void 0,void 0,String(t))}function lt(t){var e=new ct(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var dt=0,pt=[],vt=function(){function t(){this._pending=!1,this.id=dt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,pt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){for(var e=this.subs.filter((function(t){return t})),n=0,r=e.length;n<r;n++){e[n].update()}},t}();vt.target=null;var ht=[];function mt(t){ht.push(t),vt.target=t}function _t(){ht.pop(),vt.target=ht[ht.length-1]}var yt=Array.prototype,gt=Object.create(yt);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(t){var e=yt[t];V(gt,t,(function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var o,i=e.apply(this,n),a=this.__ob__;switch(t){case"push":case"unshift":o=n;break;case"splice":o=n.slice(2)}return o&&a.observeArray(o),a.dep.notify(),i}))}));var bt=Object.getOwnPropertyNames(gt),wt={},Ct=!0;function $t(t){Ct=t}var xt={notify:T,depend:T,addSub:T,removeSub:T},Ot=function(){function t(t,n,r){if(void 0===n&&(n=!1),void 0===r&&(r=!1),this.value=t,this.shallow=n,this.mock=r,this.dep=r?xt:new vt,this.vmCount=0,V(t,"__ob__",this),e(t)){if(!r)if(z)t.__proto__=gt;else for(var o=0,i=bt.length;o<i;o++){V(t,s=bt[o],gt[s])}n||this.observeArray(t)}else{var a=Object.keys(t);for(o=0;o<a.length;o++){var s;St(t,s=a[o],wt,void 0,n,r)}}}return t.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)kt(t[e],!1,this.mock)},t}();function kt(t,n,r){return t&&y(t,"__ob__")&&t.__ob__ instanceof Ot?t.__ob__:!Ct||!r&&et()||!e(t)&&!u(t)||!Object.isExtensible(t)||t.__v_skip||Lt(t)||t instanceof ct?void 0:new Ot(t,n,r)}function St(t,n,r,o,i,a){var s=new vt,c=Object.getOwnPropertyDescriptor(t,n);if(!c||!1!==c.configurable){var u=c&&c.get,f=c&&c.set;u&&!f||r!==wt&&2!==arguments.length||(r=t[n]);var l=!i&&kt(r,!1,a);return Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var n=u?u.call(t):r;return vt.target&&(s.depend(),l&&(l.dep.depend(),e(n)&&At(n))),Lt(n)&&!i?n.value:n},set:function(e){var n=u?u.call(t):r;if(N(n,e)){if(f)f.call(t,e);else{if(u)return;if(!i&&Lt(n)&&!Lt(e))return void(n.value=e);r=e}l=!i&&kt(e,!1,a),s.notify()}}}),s}}function jt(t,n,r){if(!Nt(t)){var o=t.__ob__;return e(t)&&f(n)?(t.length=Math.max(t.length,n),t.splice(n,1,r),o&&!o.shallow&&o.mock&&kt(r,!1,!0),r):n in t&&!(n in Object.prototype)?(t[n]=r,r):t._isVue||o&&o.vmCount?r:o?(St(o.value,n,r,void 0,o.shallow,o.mock),o.dep.notify(),r):(t[n]=r,r)}}function Tt(t,n){if(e(t)&&f(n))t.splice(n,1);else{var r=t.__ob__;t._isVue||r&&r.vmCount||Nt(t)||y(t,n)&&(delete t[n],r&&r.dep.notify())}}function At(t){for(var n=void 0,r=0,o=t.length;r<o;r++)(n=t[r])&&n.__ob__&&n.__ob__.dep.depend(),e(n)&&At(n)}function Et(t){return Pt(t,!0),V(t,"__v_isShallow",!0),t}function Pt(t,e){Nt(t)||kt(t,e,et())}function It(t){return Nt(t)?It(t.__v_raw):!(!t||!t.__ob__)}function Dt(t){return!(!t||!t.__v_isShallow)}function Nt(t){return!(!t||!t.__v_isReadonly)}var Mt="__v_isRef";function Lt(t){return!(!t||!0!==t.__v_isRef)}function Rt(t,e){if(Lt(t))return t;var n={};return V(n,Mt,!0),V(n,"__v_isShallow",e),V(n,"dep",St(n,"value",t,null,e,et())),n}function Ft(t,e,n){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var t=e[n];if(Lt(t))return t.value;var r=t&&t.__ob__;return r&&r.dep.depend(),t},set:function(t){var r=e[n];Lt(r)&&!Lt(t)?r.value=t:e[n]=t}})}function Ut(t,e,n){var r=t[e];if(Lt(r))return r;var o={get value(){var r=t[e];return void 0===r?n:r},set value(n){t[e]=n}};return V(o,Mt,!0),o}function Vt(t){return Bt(t,!1)}function Bt(t,e){if(!u(t))return t;if(Nt(t))return t;var n=e?"__v_rawToShallowReadonly":"__v_rawToReadonly",r=t[n];if(r)return r;var o=Object.create(Object.getPrototypeOf(t));V(t,n,o),V(o,"__v_isReadonly",!0),V(o,"__v_raw",t),Lt(t)&&V(o,Mt,!0),(e||Dt(t))&&V(o,"__v_isShallow",!0);for(var i=Object.keys(t),a=0;a<i.length;a++)zt(o,t,i[a],e);return o}function zt(t,e,n,r){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var t=e[n];return r||!u(t)?t:Vt(t)},set:function(){}})}var Ht="watcher",Wt="".concat(Ht," callback"),Kt="".concat(Ht," getter"),qt="".concat(Ht," cleanup");function Gt(t,e){return Xt(t,null,{flush:"post"})}var Zt,Jt={};function Xt(n,r,o){var i=void 0===o?t:o,s=i.immediate,c=i.deep,u=i.flush,f=void 0===u?"pre":u;i.onTrack,i.onTrigger;var l,d,p=at,v=function(t,e,n){return void 0===n&&(n=null),Ue(t,null,n,p,e)},h=!1,m=!1;if(Lt(n)?(l=function(){return n.value},h=Dt(n)):It(n)?(l=function(){return n.__ob__.dep.depend(),n},c=!0):e(n)?(m=!0,h=n.some((function(t){return It(t)||Dt(t)})),l=function(){return n.map((function(t){return Lt(t)?t.value:It(t)?mn(t):a(t)?v(t,Kt):void 0}))}):l=a(n)?r?function(){return v(n,Kt)}:function(){if(!p||!p._isDestroyed)return d&&d(),v(n,Ht,[y])}:T,r&&c){var _=l;l=function(){return mn(_())}}var y=function(t){d=g.onStop=function(){v(t,qt)}};if(et())return y=T,r?s&&v(r,Wt,[l(),m?[]:void 0,y]):l(),T;var g=new bn(at,l,T,{lazy:!0});g.noRecurse=!r;var b=m?[]:Jt;return g.run=function(){if(g.active)if(r){var t=g.get();(c||h||(m?t.some((function(t,e){return N(t,b[e])})):N(t,b)))&&(d&&d(),v(r,Wt,[t,b===Jt?void 0:b,y]),b=t)}else g.get()},"sync"===f?g.update=g.run:"post"===f?(g.post=!0,g.update=function(){return Bn(g)}):g.update=function(){if(p&&p===at&&!p._isMounted){var t=p._preWatchers||(p._preWatchers=[]);t.indexOf(g)<0&&t.push(g)}else Bn(g)},r?s?g.run():b=g.get():"post"===f&&p?p.$once("hook:mounted",(function(){return g.get()})):g.get(),function(){g.teardown()}}var Qt=function(){function t(t){void 0===t&&(t=!1),this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Zt,!t&&Zt&&(this.index=(Zt.scopes||(Zt.scopes=[])).push(this)-1)}return t.prototype.run=function(t){if(this.active){var e=Zt;try{return Zt=this,t()}finally{Zt=e}}},t.prototype.on=function(){Zt=this},t.prototype.off=function(){Zt=this.parent},t.prototype.stop=function(t){if(this.active){var e=void 0,n=void 0;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].teardown();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(!this.detached&&this.parent&&!t){var r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0,this.active=!1}},t}();function Yt(t){var e=t._provided,n=t.$parent&&t.$parent._provided;return n===e?t._provided=Object.create(n):e}var te=g((function(t){var e="&"===t.charAt(0),n="~"===(t=e?t.slice(1):t).charAt(0),r="!"===(t=n?t.slice(1):t).charAt(0);return{name:t=r?t.slice(1):t,once:n,capture:r,passive:e}}));function ee(t,n){function r(){var t=r.fns;if(!e(t))return Ue(t,null,arguments,n,"v-on handler");for(var o=t.slice(),i=0;i<o.length;i++)Ue(o[i],null,arguments,n,"v-on handler")}return r.fns=t,r}function ne(t,e,r,i,a,s){var c,u,f,l;for(c in t)u=t[c],f=e[c],l=te(c),n(u)||(n(f)?(n(u.fns)&&(u=t[c]=ee(u,s)),o(l.once)&&(u=t[c]=a(l.name,u,l.capture)),r(l.name,u,l.capture,l.passive,l.params)):u!==f&&(f.fns=u,t[c]=f));for(c in e)n(t[c])&&i((l=te(c)).name,e[c],l.capture)}function re(t,e,i){var a;t instanceof ct&&(t=t.data.hook||(t.data.hook={}));var s=t[e];function c(){i.apply(this,arguments),m(a.fns,c)}n(s)?a=ee([c]):r(s.fns)&&o(s.merged)?(a=s).fns.push(c):a=ee([s,c]),a.merged=!0,t[e]=a}function oe(t,e,n,o,i){if(r(e)){if(y(e,n))return t[n]=e[n],i||delete e[n],!0;if(y(e,o))return t[n]=e[o],i||delete e[o],!0}return!1}function ie(t){return i(t)?[ft(t)]:e(t)?se(t):void 0}function ae(t){return r(t)&&r(t.text)&&!1===t.isComment}function se(t,a){var s,c,u,f,l=[];for(s=0;s<t.length;s++)n(c=t[s])||"boolean"==typeof c||(f=l[u=l.length-1],e(c)?c.length>0&&(ae((c=se(c,"".concat(a||"","_").concat(s)))[0])&&ae(f)&&(l[u]=ft(f.text+c[0].text),c.shift()),l.push.apply(l,c)):i(c)?ae(f)?l[u]=ft(f.text+c):""!==c&&l.push(ft(c)):ae(c)&&ae(f)?l[u]=ft(f.text+c.text):(o(t._isVList)&&r(c.tag)&&n(c.key)&&r(a)&&(c.key="__vlist".concat(a,"_").concat(s,"__")),l.push(c)));return l}function ce(t,n){var o,i,a,c,u=null;if(e(t)||"string"==typeof t)for(u=new Array(t.length),o=0,i=t.length;o<i;o++)u[o]=n(t[o],o);else if("number"==typeof t)for(u=new Array(t),o=0;o<t;o++)u[o]=n(o+1,o);else if(s(t))if(it&&t[Symbol.iterator]){u=[];for(var f=t[Symbol.iterator](),l=f.next();!l.done;)u.push(n(l.value,u.length)),l=f.next()}else for(a=Object.keys(t),u=new Array(a.length),o=0,i=a.length;o<i;o++)c=a[o],u[o]=n(t[c],c,o);return r(u)||(u=[]),u._isVList=!0,u}function ue(t,e,n,r){var o,i=this.$scopedSlots[t];i?(n=n||{},r&&(n=S(S({},r),n)),o=i(n)||(a(e)?e():e)):o=this.$slots[t]||(a(e)?e():e);var s=n&&n.slot;return s?this.$createElement("template",{slot:s},o):o}function fe(t){return ar(this.$options,"filters",t)||E}function le(t,n){return e(t)?-1===t.indexOf(n):t!==n}function de(t,e,n,r,o){var i=F.keyCodes[e]||n;return o&&r&&!F.keyCodes[e]?le(o,r):i?le(i,t):r?x(r)!==e:void 0===t}function pe(t,n,r,o,i){if(r)if(s(r)){e(r)&&(r=j(r));var a=void 0,c=function(e){if("class"===e||"style"===e||h(e))a=t;else{var s=t.attrs&&t.attrs.type;a=o||F.mustUseProp(n,s,e)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}var c=w(e),u=x(e);c in a||u in a||(a[e]=r[e],i&&((t.on||(t.on={}))["update:".concat(e)]=function(t){r[e]=t}))};for(var u in r)c(u)}else;return t}function ve(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];return r&&!e||me(r=n[t]=this.$options.staticRenderFns[t].call(this._renderProxy,this._c,this),"__static__".concat(t),!1),r}function he(t,e,n){return me(t,"__once__".concat(e).concat(n?"_".concat(n):""),!0),t}function me(t,n,r){if(e(t))for(var o=0;o<t.length;o++)t[o]&&"string"!=typeof t[o]&&_e(t[o],"".concat(n,"_").concat(o),r);else _e(t,n,r)}function _e(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function ye(t,e){if(e)if(u(e)){var n=t.on=t.on?S({},t.on):{};for(var r in e){var o=n[r],i=e[r];n[r]=o?[].concat(o,i):i}}else;return t}function ge(t,n,r,o){n=n||{$stable:!r};for(var i=0;i<t.length;i++){var a=t[i];e(a)?ge(a,n,r):a&&(a.proxy&&(a.fn.proxy=!0),n[a.key]=a.fn)}return o&&(n.$key=o),n}function be(t,e){for(var n=0;n<e.length;n+=2){var r=e[n];"string"==typeof r&&r&&(t[e[n]]=e[n+1])}return t}function we(t,e){return"string"==typeof t?e+t:t}function Ce(t){t._o=he,t._n=p,t._s=d,t._l=ce,t._t=ue,t._q=P,t._i=I,t._m=ve,t._f=fe,t._k=de,t._b=pe,t._v=ft,t._e=ut,t._u=ge,t._g=ye,t._d=be,t._p=we}function $e(t,e){if(!t||!t.length)return{};for(var n={},r=0,o=t.length;r<o;r++){var i=t[r],a=i.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,i.context!==e&&i.fnContext!==e||!a||null==a.slot)(n.default||(n.default=[])).push(i);else{var s=a.slot,c=n[s]||(n[s]=[]);"template"===i.tag?c.push.apply(c,i.children||[]):c.push(i)}}for(var u in n)n[u].every(xe)&&delete n[u];return n}function xe(t){return t.isComment&&!t.asyncFactory||" "===t.text}function Oe(t){return t.isComment&&t.asyncFactory}function ke(e,n,r,o){var i,a=Object.keys(r).length>0,s=n?!!n.$stable:!a,c=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(s&&o&&o!==t&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},n)n[u]&&"$"!==u[0]&&(i[u]=Se(e,r,u,n[u]))}else i={};for(var f in r)f in i||(i[f]=je(r,f));return n&&Object.isExtensible(n)&&(n._normalized=i),V(i,"$stable",s),V(i,"$key",c),V(i,"$hasNormal",a),i}function Se(t,n,r,o){var i=function(){var n=at;st(t);var r=arguments.length?o.apply(null,arguments):o({}),i=(r=r&&"object"==typeof r&&!e(r)?[r]:ie(r))&&r[0];return st(n),r&&(!i||1===r.length&&i.isComment&&!Oe(i))?void 0:r};return o.proxy&&Object.defineProperty(n,r,{get:i,enumerable:!0,configurable:!0}),i}function je(t,e){return function(){return t[e]}}function Te(e){return{get attrs(){if(!e._attrsProxy){var n=e._attrsProxy={};V(n,"_v_attr_proxy",!0),Ae(n,e.$attrs,t,e,"$attrs")}return e._attrsProxy},get listeners(){e._listenersProxy||Ae(e._listenersProxy={},e.$listeners,t,e,"$listeners");return e._listenersProxy},get slots(){return function(t){t._slotsProxy||Pe(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(e)},emit:O(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return Ft(e,t,n)}))}}}function Ae(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,Ee(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function Ee(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function Pe(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}function Ie(){var t=at;return t._setupContext||(t._setupContext=Te(t))}var De=null;function Ne(t,e){return(t.__esModule||it&&"Module"===t[Symbol.toStringTag])&&(t=t.default),s(t)?e.extend(t):t}function Me(t){if(e(t))for(var n=0;n<t.length;n++){var o=t[n];if(r(o)&&(r(o.componentOptions)||Oe(o)))return o}}function Le(t,n,c,u,f,l){return(e(c)||i(c))&&(f=u,u=c,c=void 0),o(l)&&(f=2),function(t,n,o,i,c){if(r(o)&&r(o.__ob__))return ut();r(o)&&r(o.is)&&(n=o.is);if(!n)return ut();e(i)&&a(i[0])&&((o=o||{}).scopedSlots={default:i[0]},i.length=0);2===c?i=ie(i):1===c&&(i=function(t){for(var n=0;n<t.length;n++)if(e(t[n]))return Array.prototype.concat.apply([],t);return t}(i));var u,f;if("string"==typeof n){var l=void 0;f=t.$vnode&&t.$vnode.ns||F.getTagNamespace(n),u=F.isReservedTag(n)?new ct(F.parsePlatformTagName(n),o,i,void 0,void 0,t):o&&o.pre||!r(l=ar(t.$options,"components",n))?new ct(n,o,i,void 0,void 0,t):Jn(l,o,t,i,n)}else u=Jn(n,o,t,i);return e(u)?u:r(u)?(r(f)&&Re(u,f),r(o)&&function(t){s(t.style)&&mn(t.style);s(t.class)&&mn(t.class)}(o),u):ut()}(t,n,c,u,f)}function Re(t,e,i){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,i=!0),r(t.children))for(var a=0,s=t.children.length;a<s;a++){var c=t.children[a];r(c.tag)&&(n(c.ns)||o(i)&&"svg"!==c.tag)&&Re(c,e,i)}}function Fe(t,e,n){mt();try{if(e)for(var r=e;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,t,e,n))return}catch(t){Ve(t,r,"errorCaptured hook")}}Ve(t,e,n)}finally{_t()}}function Ue(t,e,n,r,o){var i;try{(i=n?t.apply(e,n):t.call(e))&&!i._isVue&&l(i)&&!i._handled&&(i.catch((function(t){return Fe(t,r,o+" (Promise/async)")})),i._handled=!0)}catch(t){Fe(t,r,o)}return i}function Ve(t,e,n){if(F.errorHandler)try{return F.errorHandler.call(null,t,e,n)}catch(e){e!==t&&Be(e)}Be(t)}function Be(t,e,n){if(!H||"undefined"==typeof console)throw t;console.error(t)}var ze,He=!1,We=[],Ke=!1;function qe(){Ke=!1;var t=We.slice(0);We.length=0;for(var e=0;e<t.length;e++)t[e]()}if("undefined"!=typeof Promise&&rt(Promise)){var Ge=Promise.resolve();ze=function(){Ge.then(qe),Z&&setTimeout(T)},He=!0}else if(K||"undefined"==typeof MutationObserver||!rt(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())ze="undefined"!=typeof setImmediate&&rt(setImmediate)?function(){setImmediate(qe)}:function(){setTimeout(qe,0)};else{var Ze=1,Je=new MutationObserver(qe),Xe=document.createTextNode(String(Ze));Je.observe(Xe,{characterData:!0}),ze=function(){Ze=(Ze+1)%2,Xe.data=String(Ze)},He=!0}function Qe(t,e){var n;if(We.push((function(){if(t)try{t.call(e)}catch(t){Fe(t,e,"nextTick")}else n&&n(e)})),Ke||(Ke=!0,ze()),!t&&"undefined"!=typeof Promise)return new Promise((function(t){n=t}))}function Ye(t){return function(e,n){if(void 0===n&&(n=at),n)return function(t,e,n){var r=t.$options;r[e]=nr(r[e],n)}(n,t,e)}}var tn=Ye("beforeMount"),en=Ye("mounted"),nn=Ye("beforeUpdate"),rn=Ye("updated"),on=Ye("beforeDestroy"),an=Ye("destroyed"),sn=Ye("activated"),cn=Ye("deactivated"),un=Ye("serverPrefetch"),fn=Ye("renderTracked"),ln=Ye("renderTriggered"),dn=Ye("errorCaptured");var pn="2.7.14";var vn=Object.freeze({__proto__:null,version:pn,defineComponent:function(t){return t},ref:function(t){return Rt(t,!1)},shallowRef:function(t){return Rt(t,!0)},isRef:Lt,toRef:Ut,toRefs:function(t){var n=e(t)?new Array(t.length):{};for(var r in t)n[r]=Ut(t,r);return n},unref:function(t){return Lt(t)?t.value:t},proxyRefs:function(t){if(It(t))return t;for(var e={},n=Object.keys(t),r=0;r<n.length;r++)Ft(e,t,n[r]);return e},customRef:function(t){var e=new vt,n=t((function(){e.depend()}),(function(){e.notify()})),r=n.get,o=n.set,i={get value(){return r()},set value(t){o(t)}};return V(i,Mt,!0),i},triggerRef:function(t){t.dep&&t.dep.notify()},reactive:function(t){return Pt(t,!1),t},isReactive:It,isReadonly:Nt,isShallow:Dt,isProxy:function(t){return It(t)||Nt(t)},shallowReactive:Et,markRaw:function(t){return Object.isExtensible(t)&&V(t,"__v_skip",!0),t},toRaw:function t(e){var n=e&&e.__v_raw;return n?t(n):e},readonly:Vt,shallowReadonly:function(t){return Bt(t,!0)},computed:function(t,e){var n,r,o=a(t);o?(n=t,r=T):(n=t.get,r=t.set);var i=et()?null:new bn(at,n,T,{lazy:!0}),s={effect:i,get value(){return i?(i.dirty&&i.evaluate(),vt.target&&i.depend(),i.value):n()},set value(t){r(t)}};return V(s,Mt,!0),V(s,"__v_isReadonly",o),s},watch:function(t,e,n){return Xt(t,e,n)},watchEffect:function(t,e){return Xt(t,null,e)},watchPostEffect:Gt,watchSyncEffect:function(t,e){return Xt(t,null,{flush:"sync"})},EffectScope:Qt,effectScope:function(t){return new Qt(t)},onScopeDispose:function(t){Zt&&Zt.cleanups.push(t)},getCurrentScope:function(){return Zt},provide:function(t,e){at&&(Yt(at)[t]=e)},inject:function(t,e,n){void 0===n&&(n=!1);var r=at;if(r){var o=r.$parent&&r.$parent._provided;if(o&&t in o)return o[t];if(arguments.length>1)return n&&a(e)?e.call(r):e}},h:function(t,e,n){return Le(at,t,e,n,2,!0)},getCurrentInstance:function(){return at&&{proxy:at}},useSlots:function(){return Ie().slots},useAttrs:function(){return Ie().attrs},useListeners:function(){return Ie().listeners},mergeDefaults:function(t,n){var r=e(t)?t.reduce((function(t,e){return t[e]={},t}),{}):t;for(var o in n){var i=r[o];i?e(i)||a(i)?r[o]={type:i,default:n[o]}:i.default=n[o]:null===i&&(r[o]={default:n[o]})}return r},nextTick:Qe,set:jt,del:Tt,useCssModule:function(e){return t},useCssVars:function(t){if(H){var e=at;e&&Gt((function(){var n=e.$el,r=t(e,e._setupProxy);if(n&&1===n.nodeType){var o=n.style;for(var i in r)o.setProperty("--".concat(i),r[i])}}))}},defineAsyncComponent:function(t){a(t)&&(t={loader:t});var e=t.loader,n=t.loadingComponent,r=t.errorComponent,o=t.delay,i=void 0===o?200:o,s=t.timeout;t.suspensible;var c=t.onError,u=null,f=0,l=function(){var t;return u||(t=u=e().catch((function(t){if(t=t instanceof Error?t:new Error(String(t)),c)return new Promise((function(e,n){c(t,(function(){return e((f++,u=null,l()))}),(function(){return n(t)}),f+1)}));throw t})).then((function(e){return t!==u&&u?u:(e&&(e.__esModule||"Module"===e[Symbol.toStringTag])&&(e=e.default),e)})))};return function(){return{component:l(),delay:i,timeout:s,error:r,loading:n}}},onBeforeMount:tn,onMounted:en,onBeforeUpdate:nn,onUpdated:rn,onBeforeUnmount:on,onUnmounted:an,onActivated:sn,onDeactivated:cn,onServerPrefetch:un,onRenderTracked:fn,onRenderTriggered:ln,onErrorCaptured:function(t,e){void 0===e&&(e=at),dn(t,e)}}),hn=new ot;function mn(t){return _n(t,hn),hn.clear(),t}function _n(t,n){var r,o,i=e(t);if(!(!i&&!s(t)||t.__v_skip||Object.isFrozen(t)||t instanceof ct)){if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(i)for(r=t.length;r--;)_n(t[r],n);else if(Lt(t))_n(t.value,n);else for(r=(o=Object.keys(t)).length;r--;)_n(t[o[r]],n)}}var yn,gn=0,bn=function(){function t(t,e,n,r,o){var i,s;i=this,void 0===(s=Zt&&!Zt._vm?Zt:t?t._scope:void 0)&&(s=Zt),s&&s.active&&s.effects.push(i),(this.vm=t)&&o&&(t._watcher=this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++gn,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ot,this.newDepIds=new ot,this.expression="",a(e)?this.getter=e:(this.getter=function(t){if(!B.test(t)){var e=t.split(".");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}(e),this.getter||(this.getter=T)),this.value=this.lazy?void 0:this.get()}return t.prototype.get=function(){var t;mt(this);var e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;Fe(t,e,'getter for watcher "'.concat(this.expression,'"'))}finally{this.deep&&mn(t),_t(),this.cleanupDeps()}return t},t.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},t.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},t.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Bn(this)},t.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||s(t)||this.deep){var e=this.value;if(this.value=t,this.user){var n='callback for watcher "'.concat(this.expression,'"');Ue(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}},t.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},t.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},t.prototype.teardown=function(){if(this.vm&&!this.vm._isBeingDestroyed&&m(this.vm._scope.effects,this),this.active){for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1,this.onStop&&this.onStop()}},t}();function wn(t,e){yn.$on(t,e)}function Cn(t,e){yn.$off(t,e)}function $n(t,e){var n=yn;return function r(){var o=e.apply(null,arguments);null!==o&&n.$off(t,r)}}function xn(t,e,n){yn=t,ne(e,n||{},wn,Cn,$n,t),yn=void 0}var On=null;function kn(t){var e=On;return On=t,function(){On=e}}function Sn(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function jn(t,e){if(e){if(t._directInactive=!1,Sn(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)jn(t.$children[n]);An(t,"activated")}}function Tn(t,e){if(!(e&&(t._directInactive=!0,Sn(t))||t._inactive)){t._inactive=!0;for(var n=0;n<t.$children.length;n++)Tn(t.$children[n]);An(t,"deactivated")}}function An(t,e,n,r){void 0===r&&(r=!0),mt();var o=at;r&&st(t);var i=t.$options[e],a="".concat(e," hook");if(i)for(var s=0,c=i.length;s<c;s++)Ue(i[s],t,n||null,t,a);t._hasHookEvent&&t.$emit("hook:"+e),r&&st(o),_t()}var En=[],Pn=[],In={},Dn=!1,Nn=!1,Mn=0;var Ln=0,Rn=Date.now;if(H&&!K){var Fn=window.performance;Fn&&"function"==typeof Fn.now&&Rn()>document.createEvent("Event").timeStamp&&(Rn=function(){return Fn.now()})}var Un=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function Vn(){var t,e;for(Ln=Rn(),Nn=!0,En.sort(Un),Mn=0;Mn<En.length;Mn++)(t=En[Mn]).before&&t.before(),e=t.id,In[e]=null,t.run();var n=Pn.slice(),r=En.slice();Mn=En.length=Pn.length=0,In={},Dn=Nn=!1,function(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,jn(t[e],!0)}(n),function(t){var e=t.length;for(;e--;){var n=t[e],r=n.vm;r&&r._watcher===n&&r._isMounted&&!r._isDestroyed&&An(r,"updated")}}(r),function(){for(var t=0;t<pt.length;t++){var e=pt[t];e.subs=e.subs.filter((function(t){return t})),e._pending=!1}pt.length=0}(),nt&&F.devtools&&nt.emit("flush")}function Bn(t){var e=t.id;if(null==In[e]&&(t!==vt.target||!t.noRecurse)){if(In[e]=!0,Nn){for(var n=En.length-1;n>Mn&&En[n].id>t.id;)n--;En.splice(n+1,0,t)}else En.push(t);Dn||(Dn=!0,Qe(Vn))}}function zn(t,e){if(t){for(var n=Object.create(null),r=it?Reflect.ownKeys(t):Object.keys(t),o=0;o<r.length;o++){var i=r[o];if("__ob__"!==i){var s=t[i].from;if(s in e._provided)n[i]=e._provided[s];else if("default"in t[i]){var c=t[i].default;n[i]=a(c)?c.call(e):c}}}return n}}function Hn(n,r,i,a,s){var c,u=this,f=s.options;y(a,"_uid")?(c=Object.create(a))._original=a:(c=a,a=a._original);var l=o(f._compiled),d=!l;this.data=n,this.props=r,this.children=i,this.parent=a,this.listeners=n.on||t,this.injections=zn(f.inject,a),this.slots=function(){return u.$slots||ke(a,n.scopedSlots,u.$slots=$e(i,a)),u.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return ke(a,n.scopedSlots,this.slots())}}),l&&(this.$options=f,this.$slots=this.slots(),this.$scopedSlots=ke(a,n.scopedSlots,this.$slots)),f._scopeId?this._c=function(t,n,r,o){var i=Le(c,t,n,r,o,d);return i&&!e(i)&&(i.fnScopeId=f._scopeId,i.fnContext=a),i}:this._c=function(t,e,n,r){return Le(c,t,e,n,r,d)}}function Wn(t,e,n,r,o){var i=lt(t);return i.fnContext=n,i.fnOptions=r,e.slot&&((i.data||(i.data={})).slot=e.slot),i}function Kn(t,e){for(var n in e)t[w(n)]=e[n]}function qn(t){return t.name||t.__name||t._componentTag}Ce(Hn.prototype);var Gn={init:function(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var n=t;Gn.prepatch(n,n)}else{(t.componentInstance=function(t,e){var n={_isComponent:!0,_parentVnode:t,parent:e},o=t.data.inlineTemplate;r(o)&&(n.render=o.render,n.staticRenderFns=o.staticRenderFns);return new t.componentOptions.Ctor(n)}(t,On)).$mount(e?t.elm:void 0,e)}},prepatch:function(e,n){var r=n.componentOptions;!function(e,n,r,o,i){var a=o.data.scopedSlots,s=e.$scopedSlots,c=!!(a&&!a.$stable||s!==t&&!s.$stable||a&&e.$scopedSlots.$key!==a.$key||!a&&e.$scopedSlots.$key),u=!!(i||e.$options._renderChildren||c),f=e.$vnode;e.$options._parentVnode=o,e.$vnode=o,e._vnode&&(e._vnode.parent=o),e.$options._renderChildren=i;var l=o.data.attrs||t;e._attrsProxy&&Ae(e._attrsProxy,l,f.data&&f.data.attrs||t,e,"$attrs")&&(u=!0),e.$attrs=l,r=r||t;var d=e.$options._parentListeners;if(e._listenersProxy&&Ae(e._listenersProxy,r,d||t,e,"$listeners"),e.$listeners=e.$options._parentListeners=r,xn(e,r,d),n&&e.$options.props){$t(!1);for(var p=e._props,v=e.$options._propKeys||[],h=0;h<v.length;h++){var m=v[h],_=e.$options.props;p[m]=sr(m,_,n,e)}$t(!0),e.$options.propsData=n}u&&(e.$slots=$e(i,o.context),e.$forceUpdate())}(n.componentInstance=e.componentInstance,r.propsData,r.listeners,n,r.children)},insert:function(t){var e,n=t.context,r=t.componentInstance;r._isMounted||(r._isMounted=!0,An(r,"mounted")),t.data.keepAlive&&(n._isMounted?((e=r)._inactive=!1,Pn.push(e)):jn(r,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?Tn(e,!0):e.$destroy())}},Zn=Object.keys(Gn);function Jn(i,a,c,u,f){if(!n(i)){var d=c.$options._base;if(s(i)&&(i=d.extend(i)),"function"==typeof i){var p;if(n(i.cid)&&(i=function(t,e){if(o(t.error)&&r(t.errorComp))return t.errorComp;if(r(t.resolved))return t.resolved;var i=De;if(i&&r(t.owners)&&-1===t.owners.indexOf(i)&&t.owners.push(i),o(t.loading)&&r(t.loadingComp))return t.loadingComp;if(i&&!r(t.owners)){var a=t.owners=[i],c=!0,u=null,f=null;i.$on("hook:destroyed",(function(){return m(a,i)}));var d=function(t){for(var e=0,n=a.length;e<n;e++)a[e].$forceUpdate();t&&(a.length=0,null!==u&&(clearTimeout(u),u=null),null!==f&&(clearTimeout(f),f=null))},p=D((function(n){t.resolved=Ne(n,e),c?a.length=0:d(!0)})),v=D((function(e){r(t.errorComp)&&(t.error=!0,d(!0))})),h=t(p,v);return s(h)&&(l(h)?n(t.resolved)&&h.then(p,v):l(h.component)&&(h.component.then(p,v),r(h.error)&&(t.errorComp=Ne(h.error,e)),r(h.loading)&&(t.loadingComp=Ne(h.loading,e),0===h.delay?t.loading=!0:u=setTimeout((function(){u=null,n(t.resolved)&&n(t.error)&&(t.loading=!0,d(!1))}),h.delay||200)),r(h.timeout)&&(f=setTimeout((function(){f=null,n(t.resolved)&&v(null)}),h.timeout)))),c=!1,t.loading?t.loadingComp:t.resolved}}(p=i,d),void 0===i))return function(t,e,n,r,o){var i=ut();return i.asyncFactory=t,i.asyncMeta={data:e,context:n,children:r,tag:o},i}(p,a,c,u,f);a=a||{},wr(i),r(a.model)&&function(t,n){var o=t.model&&t.model.prop||"value",i=t.model&&t.model.event||"input";(n.attrs||(n.attrs={}))[o]=n.model.value;var a=n.on||(n.on={}),s=a[i],c=n.model.callback;r(s)?(e(s)?-1===s.indexOf(c):s!==c)&&(a[i]=[c].concat(s)):a[i]=c}(i.options,a);var v=function(t,e,o){var i=e.options.props;if(!n(i)){var a={},s=t.attrs,c=t.props;if(r(s)||r(c))for(var u in i){var f=x(u);oe(a,c,u,f,!0)||oe(a,s,u,f,!1)}return a}}(a,i);if(o(i.options.functional))return function(n,o,i,a,s){var c=n.options,u={},f=c.props;if(r(f))for(var l in f)u[l]=sr(l,f,o||t);else r(i.attrs)&&Kn(u,i.attrs),r(i.props)&&Kn(u,i.props);var d=new Hn(i,u,s,a,n),p=c.render.call(null,d._c,d);if(p instanceof ct)return Wn(p,i,d.parent,c);if(e(p)){for(var v=ie(p)||[],h=new Array(v.length),m=0;m<v.length;m++)h[m]=Wn(v[m],i,d.parent,c);return h}}(i,v,a,c,u);var h=a.on;if(a.on=a.nativeOn,o(i.options.abstract)){var _=a.slot;a={},_&&(a.slot=_)}!function(t){for(var e=t.hook||(t.hook={}),n=0;n<Zn.length;n++){var r=Zn[n],o=e[r],i=Gn[r];o===i||o&&o._merged||(e[r]=o?Xn(i,o):i)}}(a);var y=qn(i.options)||f;return new ct("vue-component-".concat(i.cid).concat(y?"-".concat(y):""),a,void 0,void 0,void 0,c,{Ctor:i,propsData:v,listeners:h,tag:f,children:u},p)}}}function Xn(t,e){var n=function(n,r){t(n,r),e(n,r)};return n._merged=!0,n}var Qn=T,Yn=F.optionMergeStrategies;function tr(t,e,n){if(void 0===n&&(n=!0),!e)return t;for(var r,o,i,a=it?Reflect.ownKeys(e):Object.keys(e),s=0;s<a.length;s++)"__ob__"!==(r=a[s])&&(o=t[r],i=e[r],n&&y(t,r)?o!==i&&u(o)&&u(i)&&tr(o,i):jt(t,r,i));return t}function er(t,e,n){return n?function(){var r=a(e)?e.call(n,n):e,o=a(t)?t.call(n,n):t;return r?tr(r,o):o}:e?t?function(){return tr(a(e)?e.call(this,this):e,a(t)?t.call(this,this):t)}:e:t}function nr(t,n){var r=n?t?t.concat(n):e(n)?n:[n]:t;return r?function(t){for(var e=[],n=0;n<t.length;n++)-1===e.indexOf(t[n])&&e.push(t[n]);return e}(r):r}function rr(t,e,n,r){var o=Object.create(t||null);return e?S(o,e):o}Yn.data=function(t,e,n){return n?er(t,e,n):e&&"function"!=typeof e?t:er(t,e)},R.forEach((function(t){Yn[t]=nr})),L.forEach((function(t){Yn[t+"s"]=rr})),Yn.watch=function(t,n,r,o){if(t===Q&&(t=void 0),n===Q&&(n=void 0),!n)return Object.create(t||null);if(!t)return n;var i={};for(var a in S(i,t),n){var s=i[a],c=n[a];s&&!e(s)&&(s=[s]),i[a]=s?s.concat(c):e(c)?c:[c]}return i},Yn.props=Yn.methods=Yn.inject=Yn.computed=function(t,e,n,r){if(!t)return e;var o=Object.create(null);return S(o,t),e&&S(o,e),o},Yn.provide=function(t,e){return t?function(){var n=Object.create(null);return tr(n,a(t)?t.call(this):t),e&&tr(n,a(e)?e.call(this):e,!1),n}:e};var or=function(t,e){return void 0===e?t:e};function ir(t,n,r){if(a(n)&&(n=n.options),function(t,n){var r=t.props;if(r){var o,i,a={};if(e(r))for(o=r.length;o--;)"string"==typeof(i=r[o])&&(a[w(i)]={type:null});else if(u(r))for(var s in r)i=r[s],a[w(s)]=u(i)?i:{type:i};t.props=a}}(n),function(t,n){var r=t.inject;if(r){var o=t.inject={};if(e(r))for(var i=0;i<r.length;i++)o[r[i]]={from:r[i]};else if(u(r))for(var a in r){var s=r[a];o[a]=u(s)?S({from:a},s):{from:s}}}}(n),function(t){var e=t.directives;if(e)for(var n in e){var r=e[n];a(r)&&(e[n]={bind:r,update:r})}}(n),!n._base&&(n.extends&&(t=ir(t,n.extends,r)),n.mixins))for(var o=0,i=n.mixins.length;o<i;o++)t=ir(t,n.mixins[o],r);var s,c={};for(s in t)f(s);for(s in n)y(t,s)||f(s);function f(e){var o=Yn[e]||or;c[e]=o(t[e],n[e],r,e)}return c}function ar(t,e,n,r){if("string"==typeof n){var o=t[e];if(y(o,n))return o[n];var i=w(n);if(y(o,i))return o[i];var a=C(i);return y(o,a)?o[a]:o[n]||o[i]||o[a]}}function sr(t,e,n,r){var o=e[t],i=!y(n,t),s=n[t],c=lr(Boolean,o.type);if(c>-1)if(i&&!y(o,"default"))s=!1;else if(""===s||s===x(t)){var u=lr(String,o.type);(u<0||c<u)&&(s=!0)}if(void 0===s){s=function(t,e,n){if(!y(e,"default"))return;var r=e.default;if(t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n])return t._props[n];return a(r)&&"Function"!==ur(e.type)?r.call(t):r}(r,o,t);var f=Ct;$t(!0),kt(s),$t(f)}return s}var cr=/^\s*function (\w+)/;function ur(t){var e=t&&t.toString().match(cr);return e?e[1]:""}function fr(t,e){return ur(t)===ur(e)}function lr(t,n){if(!e(n))return fr(n,t)?0:-1;for(var r=0,o=n.length;r<o;r++)if(fr(n[r],t))return r;return-1}var dr={enumerable:!0,configurable:!0,get:T,set:T};function pr(t,e,n){dr.get=function(){return this[e][n]},dr.set=function(t){this[e][n]=t},Object.defineProperty(t,n,dr)}function vr(t){var n=t.$options;if(n.props&&function(t,e){var n=t.$options.propsData||{},r=t._props=Et({}),o=t.$options._propKeys=[];t.$parent&&$t(!1);var i=function(i){o.push(i);var a=sr(i,e,n,t);St(r,i,a),i in t||pr(t,"_props",i)};for(var a in e)i(a);$t(!0)}(t,n.props),function(t){var e=t.$options,n=e.setup;if(n){var r=t._setupContext=Te(t);st(t),mt();var o=Ue(n,null,[t._props||Et({}),r],t,"setup");if(_t(),st(),a(o))e.render=o;else if(s(o))if(t._setupState=o,o.__sfc){var i=t._setupProxy={};for(var c in o)"__sfc"!==c&&Ft(i,o,c)}else for(var c in o)U(c)||Ft(t,o,c)}}(t),n.methods&&function(t,e){for(var n in t.$options.props,e)t[n]="function"!=typeof e[n]?T:O(e[n],t)}(t,n.methods),n.data)!function(t){var e=t.$options.data;u(e=t._data=a(e)?function(t,e){mt();try{return t.call(e,e)}catch(t){return Fe(t,e,"data()"),{}}finally{_t()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props;t.$options.methods;var o=n.length;for(;o--;){var i=n[o];r&&y(r,i)||U(i)||pr(t,"_data",i)}var s=kt(e);s&&s.vmCount++}(t);else{var r=kt(t._data={});r&&r.vmCount++}n.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=et();for(var o in e){var i=e[o],s=a(i)?i:i.get;r||(n[o]=new bn(t,s||T,T,hr)),o in t||mr(t,o,i)}}(t,n.computed),n.watch&&n.watch!==Q&&function(t,n){for(var r in n){var o=n[r];if(e(o))for(var i=0;i<o.length;i++)gr(t,r,o[i]);else gr(t,r,o)}}(t,n.watch)}var hr={lazy:!0};function mr(t,e,n){var r=!et();a(n)?(dr.get=r?_r(e):yr(n),dr.set=T):(dr.get=n.get?r&&!1!==n.cache?_r(e):yr(n.get):T,dr.set=n.set||T),Object.defineProperty(t,e,dr)}function _r(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),vt.target&&e.depend(),e.value}}function yr(t){return function(){return t.call(this,this)}}function gr(t,e,n,r){return u(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=t[n]),t.$watch(e,n,r)}var br=0;function wr(t){var e=t.options;if(t.super){var n=wr(t.super);if(n!==t.superOptions){t.superOptions=n;var r=function(t){var e,n=t.options,r=t.sealedOptions;for(var o in n)n[o]!==r[o]&&(e||(e={}),e[o]=n[o]);return e}(t);r&&S(t.extendOptions,r),(e=t.options=ir(n,t.extendOptions)).name&&(e.components[e.name]=t)}}return e}function Cr(t){this._init(t)}function $r(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=qn(t)||qn(n.options),a=function(t){this._init(t)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=e++,a.options=ir(n.options,t),a.super=n,a.options.props&&function(t){var e=t.options.props;for(var n in e)pr(t.prototype,"_props",n)}(a),a.options.computed&&function(t){var e=t.options.computed;for(var n in e)mr(t.prototype,n,e[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,L.forEach((function(t){a[t]=n[t]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=S({},a.options),o[r]=a,a}}function xr(t){return t&&(qn(t.Ctor.options)||t.tag)}function Or(t,n){return e(t)?t.indexOf(n)>-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(r=t,"[object RegExp]"===c.call(r)&&t.test(n));var r}function kr(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Sr(n,i,r,o)}}}function Sr(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,m(n,e)}!function(e){e.prototype._init=function(e){var n=this;n._uid=br++,n._isVue=!0,n.__v_skip=!0,n._scope=new Qt(!0),n._scope._vm=!0,e&&e._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=ir(wr(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&xn(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;var n=e.$options,r=e.$vnode=n._parentVnode,o=r&&r.context;e.$slots=$e(n._renderChildren,o),e.$scopedSlots=r?ke(e.$parent,r.data.scopedSlots,e.$slots):t,e._c=function(t,n,r,o){return Le(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return Le(e,t,n,r,o,!0)};var i=r&&r.data;St(e,"$attrs",i&&i.attrs||t,null,!0),St(e,"$listeners",n._parentListeners||t,null,!0)}(n),An(n,"beforeCreate",void 0,!1),function(t){var e=zn(t.$options.inject,t);e&&($t(!1),Object.keys(e).forEach((function(n){St(t,n,e[n])})),$t(!0))}(n),vr(n),function(t){var e=t.$options.provide;if(e){var n=a(e)?e.call(t):e;if(!s(n))return;for(var r=Yt(t),o=it?Reflect.ownKeys(n):Object.keys(n),i=0;i<o.length;i++){var c=o[i];Object.defineProperty(r,c,Object.getOwnPropertyDescriptor(n,c))}}}(n),An(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(Cr),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=jt,t.prototype.$delete=Tt,t.prototype.$watch=function(t,e,n){var r=this;if(u(e))return gr(r,t,e,n);(n=n||{}).user=!0;var o=new bn(r,t,e,n);if(n.immediate){var i='callback for immediate watcher "'.concat(o.expression,'"');mt(),Ue(e,r,[o.value],r,i),_t()}return function(){o.teardown()}}}(Cr),function(t){var n=/^hook:/;t.prototype.$on=function(t,r){var o=this;if(e(t))for(var i=0,a=t.length;i<a;i++)o.$on(t[i],r);else(o._events[t]||(o._events[t]=[])).push(r),n.test(t)&&(o._hasHookEvent=!0);return o},t.prototype.$once=function(t,e){var n=this;function r(){n.$off(t,r),e.apply(n,arguments)}return r.fn=e,n.$on(t,r),n},t.prototype.$off=function(t,n){var r=this;if(!arguments.length)return r._events=Object.create(null),r;if(e(t)){for(var o=0,i=t.length;o<i;o++)r.$off(t[o],n);return r}var a,s=r._events[t];if(!s)return r;if(!n)return r._events[t]=null,r;for(var c=s.length;c--;)if((a=s[c])===n||a.fn===n){s.splice(c,1);break}return r},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?k(n):n;for(var r=k(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;i<a;i++)Ue(n[i],e,r,e,o)}return e}}(Cr),function(t){t.prototype._update=function(t,e){var n=this,r=n.$el,o=n._vnode,i=kn(n);n._vnode=t,n.$el=o?n.__patch__(o,t):n.__patch__(n.$el,t,e,!1),i(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n);for(var a=n;a&&a.$vnode&&a.$parent&&a.$vnode===a.$parent._vnode;)a.$parent.$el=a.$el,a=a.$parent},t.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){An(t,"beforeDestroy"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||m(e.$children,t),t._scope.stop(),t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),An(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}}(Cr),function(t){Ce(t.prototype),t.prototype.$nextTick=function(t){return Qe(t,this)},t.prototype._render=function(){var t,n=this,r=n.$options,o=r.render,i=r._parentVnode;i&&n._isMounted&&(n.$scopedSlots=ke(n.$parent,i.data.scopedSlots,n.$slots,n.$scopedSlots),n._slotsProxy&&Pe(n._slotsProxy,n.$scopedSlots)),n.$vnode=i;try{st(n),De=n,t=o.call(n._renderProxy,n.$createElement)}catch(e){Fe(e,n,"render"),t=n._vnode}finally{De=null,st()}return e(t)&&1===t.length&&(t=t[0]),t instanceof ct||(t=ut()),t.parent=i,t}}(Cr);var jr=[String,RegExp,Array],Tr={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:jr,exclude:jr,max:[String,Number]},methods:{cacheVNode:function(){var t=this,e=t.cache,n=t.keys,r=t.vnodeToCache,o=t.keyToCache;if(r){var i=r.tag,a=r.componentInstance,s=r.componentOptions;e[o]={name:xr(s),tag:i,componentInstance:a},n.push(o),this.max&&n.length>parseInt(this.max)&&Sr(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Sr(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){kr(t,(function(t){return Or(e,t)}))})),this.$watch("exclude",(function(e){kr(t,(function(t){return!Or(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=Me(t),n=e&&e.componentOptions;if(n){var r=xr(n),o=this.include,i=this.exclude;if(o&&(!r||!Or(o,r))||i&&r&&Or(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,m(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return F}};Object.defineProperty(t,"config",e),t.util={warn:Qn,extend:S,mergeOptions:ir,defineReactive:St},t.set=jt,t.delete=Tt,t.nextTick=Qe,t.observable=function(t){return kt(t),t},t.options=Object.create(null),L.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,S(t.options.components,Tr),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=k(arguments,1);return n.unshift(this),a(t.install)?t.install.apply(t,n):a(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=ir(this.options,t),this}}(t),$r(t),function(t){L.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&u(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&a(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Cr),Object.defineProperty(Cr.prototype,"$isServer",{get:et}),Object.defineProperty(Cr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Cr,"FunctionalRenderContext",{value:Hn}),Cr.version=pn;var Ar=v("style,class"),Er=v("input,textarea,option,select,progress"),Pr=v("contenteditable,draggable,spellcheck"),Ir=v("events,caret,typing,plaintext-only"),Dr=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Nr="http://www.w3.org/1999/xlink",Mr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Lr=function(t){return Mr(t)?t.slice(6,t.length):""},Rr=function(t){return null==t||!1===t};function Fr(t){for(var e=t.data,n=t,o=t;r(o.componentInstance);)(o=o.componentInstance._vnode)&&o.data&&(e=Ur(o.data,e));for(;r(n=n.parent);)n&&n.data&&(e=Ur(e,n.data));return function(t,e){if(r(t)||r(e))return Vr(t,Br(e));return""}(e.staticClass,e.class)}function Ur(t,e){return{staticClass:Vr(t.staticClass,e.staticClass),class:r(t.class)?[t.class,e.class]:e.class}}function Vr(t,e){return t?e?t+" "+e:t:e||""}function Br(t){return Array.isArray(t)?function(t){for(var e,n="",o=0,i=t.length;o<i;o++)r(e=Br(t[o]))&&""!==e&&(n&&(n+=" "),n+=e);return n}(t):s(t)?function(t){var e="";for(var n in t)t[n]&&(e&&(e+=" "),e+=n);return e}(t):"string"==typeof t?t:""}var zr={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Hr=v("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Wr=v("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Kr=function(t){return Hr(t)||Wr(t)};var qr=Object.create(null);var Gr=v("text,number,password,search,email,tel,url");var Zr=Object.freeze({__proto__:null,createElement:function(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(t,e){return document.createElementNS(zr[t],e)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,e,n){t.insertBefore(e,n)},removeChild:function(t,e){t.removeChild(e)},appendChild:function(t,e){t.appendChild(e)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,e){t.textContent=e},setStyleScope:function(t,e){t.setAttribute(e,"")}}),Jr={create:function(t,e){Xr(e)},update:function(t,e){t.data.ref!==e.data.ref&&(Xr(t,!0),Xr(e))},destroy:function(t){Xr(t,!0)}};function Xr(t,n){var o=t.data.ref;if(r(o)){var i=t.context,s=t.componentInstance||t.elm,c=n?null:s,u=n?void 0:s;if(a(o))Ue(o,i,[c],i,"template ref function");else{var f=t.data.refInFor,l="string"==typeof o||"number"==typeof o,d=Lt(o),p=i.$refs;if(l||d)if(f){var v=l?p[o]:o.value;n?e(v)&&m(v,s):e(v)?v.includes(s)||v.push(s):l?(p[o]=[s],Qr(i,o,p[o])):o.value=[s]}else if(l){if(n&&p[o]!==s)return;p[o]=u,Qr(i,o,c)}else if(d){if(n&&o.value!==s)return;o.value=c}}}}function Qr(t,e,n){var r=t._setupState;r&&y(r,e)&&(Lt(r[e])?r[e].value=n:r[e]=n)}var Yr=new ct("",{},[]),to=["create","activate","update","remove","destroy"];function eo(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&r(t.data)===r(e.data)&&function(t,e){if("input"!==t.tag)return!0;var n,o=r(n=t.data)&&r(n=n.attrs)&&n.type,i=r(n=e.data)&&r(n=n.attrs)&&n.type;return o===i||Gr(o)&&Gr(i)}(t,e)||o(t.isAsyncPlaceholder)&&n(e.asyncFactory.error))}function no(t,e,n){var o,i,a={};for(o=e;o<=n;++o)r(i=t[o].key)&&(a[i]=o);return a}var ro={create:oo,update:oo,destroy:function(t){oo(t,Yr)}};function oo(t,e){(t.data.directives||e.data.directives)&&function(t,e){var n,r,o,i=t===Yr,a=e===Yr,s=ao(t.data.directives,t.context),c=ao(e.data.directives,e.context),u=[],f=[];for(n in c)r=s[n],o=c[n],r?(o.oldValue=r.value,o.oldArg=r.arg,co(o,"update",e,t),o.def&&o.def.componentUpdated&&f.push(o)):(co(o,"bind",e,t),o.def&&o.def.inserted&&u.push(o));if(u.length){var l=function(){for(var n=0;n<u.length;n++)co(u[n],"inserted",e,t)};i?re(e,"insert",l):l()}f.length&&re(e,"postpatch",(function(){for(var n=0;n<f.length;n++)co(f[n],"componentUpdated",e,t)}));if(!i)for(n in s)c[n]||co(s[n],"unbind",t,t,a)}(t,e)}var io=Object.create(null);function ao(t,e){var n,r,o=Object.create(null);if(!t)return o;for(n=0;n<t.length;n++){if((r=t[n]).modifiers||(r.modifiers=io),o[so(r)]=r,e._setupState&&e._setupState.__sfc){var i=r.def||ar(e,"_setupState","v-"+r.name);r.def="function"==typeof i?{bind:i,update:i}:i}r.def=r.def||ar(e.$options,"directives",r.name)}return o}function so(t){return t.rawName||"".concat(t.name,".").concat(Object.keys(t.modifiers||{}).join("."))}function co(t,e,n,r,o){var i=t.def&&t.def[e];if(i)try{i(n.elm,t,n,r,o)}catch(r){Fe(r,n.context,"directive ".concat(t.name," ").concat(e," hook"))}}var uo=[Jr,ro];function fo(t,e){var i=e.componentOptions;if(!(r(i)&&!1===i.Ctor.options.inheritAttrs||n(t.data.attrs)&&n(e.data.attrs))){var a,s,c=e.elm,u=t.data.attrs||{},f=e.data.attrs||{};for(a in(r(f.__ob__)||o(f._v_attr_proxy))&&(f=e.data.attrs=S({},f)),f)s=f[a],u[a]!==s&&lo(c,a,s,e.data.pre);for(a in(K||G)&&f.value!==u.value&&lo(c,"value",f.value),u)n(f[a])&&(Mr(a)?c.removeAttributeNS(Nr,Lr(a)):Pr(a)||c.removeAttribute(a))}}function lo(t,e,n,r){r||t.tagName.indexOf("-")>-1?po(t,e,n):Dr(e)?Rr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Pr(e)?t.setAttribute(e,function(t,e){return Rr(e)||"false"===e?"false":"contenteditable"===t&&Ir(e)?e:"true"}(e,n)):Mr(e)?Rr(n)?t.removeAttributeNS(Nr,Lr(e)):t.setAttributeNS(Nr,e,n):po(t,e,n)}function po(t,e,n){if(Rr(n))t.removeAttribute(e);else{if(K&&!q&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var vo={create:fo,update:fo};function ho(t,e){var o=e.elm,i=e.data,a=t.data;if(!(n(i.staticClass)&&n(i.class)&&(n(a)||n(a.staticClass)&&n(a.class)))){var s=Fr(e),c=o._transitionClasses;r(c)&&(s=Vr(s,Br(c))),s!==o._prevClass&&(o.setAttribute("class",s),o._prevClass=s)}}var mo,_o={create:ho,update:ho};function yo(t,e,n){var r=mo;return function o(){var i=e.apply(null,arguments);null!==i&&wo(t,o,n,r)}}var go=He&&!(X&&Number(X[1])<=53);function bo(t,e,n,r){if(go){var o=Ln,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}mo.addEventListener(t,e,Y?{capture:n,passive:r}:n)}function wo(t,e,n,r){(r||mo).removeEventListener(t,e._wrapper||e,n)}function Co(t,e){if(!n(t.data.on)||!n(e.data.on)){var o=e.data.on||{},i=t.data.on||{};mo=e.elm||t.elm,function(t){if(r(t.__r)){var e=K?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}r(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(o),ne(o,i,bo,wo,yo,e.context),mo=void 0}}var $o,xo={create:Co,update:Co,destroy:function(t){return Co(t,Yr)}};function Oo(t,e){if(!n(t.data.domProps)||!n(e.data.domProps)){var i,a,s=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(i in(r(u.__ob__)||o(u._v_attr_proxy))&&(u=e.data.domProps=S({},u)),c)i in u||(s[i]="");for(i in u){if(a=u[i],"textContent"===i||"innerHTML"===i){if(e.children&&(e.children.length=0),a===c[i])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===i&&"PROGRESS"!==s.tagName){s._value=a;var f=n(a)?"":String(a);ko(s,f)&&(s.value=f)}else if("innerHTML"===i&&Wr(s.tagName)&&n(s.innerHTML)){($o=$o||document.createElement("div")).innerHTML="<svg>".concat(a,"</svg>");for(var l=$o.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;l.firstChild;)s.appendChild(l.firstChild)}else if(a!==c[i])try{s[i]=a}catch(t){}}}}function ko(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,o=t._vModifiers;if(r(o)){if(o.number)return p(n)!==p(e);if(o.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var So={create:Oo,update:Oo},jo=g((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function To(t){var e=Ao(t.style);return t.staticStyle?S(t.staticStyle,e):e}function Ao(t){return Array.isArray(t)?j(t):"string"==typeof t?jo(t):t}var Eo,Po=/^--/,Io=/\s*!important$/,Do=function(t,e,n){if(Po.test(e))t.style.setProperty(e,n);else if(Io.test(n))t.style.setProperty(x(e),n.replace(Io,""),"important");else{var r=Mo(e);if(Array.isArray(n))for(var o=0,i=n.length;o<i;o++)t.style[r]=n[o];else t.style[r]=n}},No=["Webkit","Moz","ms"],Mo=g((function(t){if(Eo=Eo||document.createElement("div").style,"filter"!==(t=w(t))&&t in Eo)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<No.length;n++){var r=No[n]+e;if(r in Eo)return r}}));function Lo(t,e){var o=e.data,i=t.data;if(!(n(o.staticStyle)&&n(o.style)&&n(i.staticStyle)&&n(i.style))){var a,s,c=e.elm,u=i.staticStyle,f=i.normalizedStyle||i.style||{},l=u||f,d=Ao(e.data.style)||{};e.data.normalizedStyle=r(d.__ob__)?S({},d):d;var p=function(t,e){var n,r={};if(e)for(var o=t;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=To(o.data))&&S(r,n);(n=To(t.data))&&S(r,n);for(var i=t;i=i.parent;)i.data&&(n=To(i.data))&&S(r,n);return r}(e,!0);for(s in l)n(p[s])&&Do(c,s,"");for(s in p)(a=p[s])!==l[s]&&Do(c,s,null==a?"":a)}}var Ro={create:Lo,update:Lo},Fo=/\s+/;function Uo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Fo).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Vo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Fo).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function Bo(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&S(e,zo(t.name||"v")),S(e,t),e}return"string"==typeof t?zo(t):void 0}}var zo=g((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),Ho=H&&!q,Wo="transition",Ko="animation",qo="transition",Go="transitionend",Zo="animation",Jo="animationend";Ho&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(qo="WebkitTransition",Go="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Zo="WebkitAnimation",Jo="webkitAnimationEnd"));var Xo=H?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Qo(t){Xo((function(){Xo(t)}))}function Yo(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Uo(t,e))}function ti(t,e){t._transitionClasses&&m(t._transitionClasses,e),Vo(t,e)}function ei(t,e,n){var r=ri(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===Wo?Go:Jo,c=0,u=function(){t.removeEventListener(s,f),n()},f=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c<a&&u()}),i+1),t.addEventListener(s,f)}var ni=/\b(transform|all)(,|$)/;function ri(t,e){var n,r=window.getComputedStyle(t),o=(r[qo+"Delay"]||"").split(", "),i=(r[qo+"Duration"]||"").split(", "),a=oi(o,i),s=(r[Zo+"Delay"]||"").split(", "),c=(r[Zo+"Duration"]||"").split(", "),u=oi(s,c),f=0,l=0;return e===Wo?a>0&&(n=Wo,f=a,l=i.length):e===Ko?u>0&&(n=Ko,f=u,l=c.length):l=(n=(f=Math.max(a,u))>0?a>u?Wo:Ko:null)?n===Wo?i.length:c.length:0,{type:n,timeout:f,propCount:l,hasTransform:n===Wo&&ni.test(r[qo+"Property"])}}function oi(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map((function(e,n){return ii(e)+ii(t[n])})))}function ii(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function ai(t,e){var o=t.elm;r(o._leaveCb)&&(o._leaveCb.cancelled=!0,o._leaveCb());var i=Bo(t.data.transition);if(!n(i)&&!r(o._enterCb)&&1===o.nodeType){for(var c=i.css,u=i.type,f=i.enterClass,l=i.enterToClass,d=i.enterActiveClass,v=i.appearClass,h=i.appearToClass,m=i.appearActiveClass,_=i.beforeEnter,y=i.enter,g=i.afterEnter,b=i.enterCancelled,w=i.beforeAppear,C=i.appear,$=i.afterAppear,x=i.appearCancelled,O=i.duration,k=On,S=On.$vnode;S&&S.parent;)k=S.context,S=S.parent;var j=!k._isMounted||!t.isRootInsert;if(!j||C||""===C){var T=j&&v?v:f,A=j&&m?m:d,E=j&&h?h:l,P=j&&w||_,I=j&&a(C)?C:y,N=j&&$||g,M=j&&x||b,L=p(s(O)?O.enter:O),R=!1!==c&&!q,F=ui(I),U=o._enterCb=D((function(){R&&(ti(o,E),ti(o,A)),U.cancelled?(R&&ti(o,T),M&&M(o)):N&&N(o),o._enterCb=null}));t.data.show||re(t,"insert",(function(){var e=o.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),I&&I(o,U)})),P&&P(o),R&&(Yo(o,T),Yo(o,A),Qo((function(){ti(o,T),U.cancelled||(Yo(o,E),F||(ci(L)?setTimeout(U,L):ei(o,u,U)))}))),t.data.show&&(e&&e(),I&&I(o,U)),R||F||U()}}}function si(t,e){var o=t.elm;r(o._enterCb)&&(o._enterCb.cancelled=!0,o._enterCb());var i=Bo(t.data.transition);if(n(i)||1!==o.nodeType)return e();if(!r(o._leaveCb)){var a=i.css,c=i.type,u=i.leaveClass,f=i.leaveToClass,l=i.leaveActiveClass,d=i.beforeLeave,v=i.leave,h=i.afterLeave,m=i.leaveCancelled,_=i.delayLeave,y=i.duration,g=!1!==a&&!q,b=ui(v),w=p(s(y)?y.leave:y),C=o._leaveCb=D((function(){o.parentNode&&o.parentNode._pending&&(o.parentNode._pending[t.key]=null),g&&(ti(o,f),ti(o,l)),C.cancelled?(g&&ti(o,u),m&&m(o)):(e(),h&&h(o)),o._leaveCb=null}));_?_($):$()}function $(){C.cancelled||(!t.data.show&&o.parentNode&&((o.parentNode._pending||(o.parentNode._pending={}))[t.key]=t),d&&d(o),g&&(Yo(o,u),Yo(o,l),Qo((function(){ti(o,u),C.cancelled||(Yo(o,f),b||(ci(w)?setTimeout(C,w):ei(o,c,C)))}))),v&&v(o,C),g||b||C())}}function ci(t){return"number"==typeof t&&!isNaN(t)}function ui(t){if(n(t))return!1;var e=t.fns;return r(e)?ui(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function fi(t,e){!0!==e.data.show&&ai(e)}var li=function(t){var a,s,c={},u=t.modules,f=t.nodeOps;for(a=0;a<to.length;++a)for(c[to[a]]=[],s=0;s<u.length;++s)r(u[s][to[a]])&&c[to[a]].push(u[s][to[a]]);function l(t){var e=f.parentNode(t);r(e)&&f.removeChild(e,t)}function d(t,e,n,i,a,s,u){if(r(t.elm)&&r(s)&&(t=s[u]=lt(t)),t.isRootInsert=!a,!function(t,e,n,i){var a=t.data;if(r(a)){var s=r(t.componentInstance)&&a.keepAlive;if(r(a=a.hook)&&r(a=a.init)&&a(t,!1),r(t.componentInstance))return p(t,e),h(n,t.elm,i),o(s)&&function(t,e,n,o){var i,a=t;for(;a.componentInstance;)if(r(i=(a=a.componentInstance._vnode).data)&&r(i=i.transition)){for(i=0;i<c.activate.length;++i)c.activate[i](Yr,a);e.push(a);break}h(n,t.elm,o)}(t,e,n,i),!0}}(t,e,n,i)){var l=t.data,d=t.children,v=t.tag;r(v)?(t.elm=t.ns?f.createElementNS(t.ns,v):f.createElement(v,t),g(t),m(t,d,e),r(l)&&y(t,e),h(n,t.elm,i)):o(t.isComment)?(t.elm=f.createComment(t.text),h(n,t.elm,i)):(t.elm=f.createTextNode(t.text),h(n,t.elm,i))}}function p(t,e){r(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,_(t)?(y(t,e),g(t)):(Xr(t),e.push(t))}function h(t,e,n){r(t)&&(r(n)?f.parentNode(n)===t&&f.insertBefore(t,e,n):f.appendChild(t,e))}function m(t,n,r){if(e(n))for(var o=0;o<n.length;++o)d(n[o],r,t.elm,null,!0,n,o);else i(t.text)&&f.appendChild(t.elm,f.createTextNode(String(t.text)))}function _(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return r(t.tag)}function y(t,e){for(var n=0;n<c.create.length;++n)c.create[n](Yr,t);r(a=t.data.hook)&&(r(a.create)&&a.create(Yr,t),r(a.insert)&&e.push(t))}function g(t){var e;if(r(e=t.fnScopeId))f.setStyleScope(t.elm,e);else for(var n=t;n;)r(e=n.context)&&r(e=e.$options._scopeId)&&f.setStyleScope(t.elm,e),n=n.parent;r(e=On)&&e!==t.context&&e!==t.fnContext&&r(e=e.$options._scopeId)&&f.setStyleScope(t.elm,e)}function b(t,e,n,r,o,i){for(;r<=o;++r)d(n[r],i,t,e,!1,n,r)}function w(t){var e,n,o=t.data;if(r(o))for(r(e=o.hook)&&r(e=e.destroy)&&e(t),e=0;e<c.destroy.length;++e)c.destroy[e](t);if(r(e=t.children))for(n=0;n<t.children.length;++n)w(t.children[n])}function C(t,e,n){for(;e<=n;++e){var o=t[e];r(o)&&(r(o.tag)?($(o),w(o)):l(o.elm))}}function $(t,e){if(r(e)||r(t.data)){var n,o=c.remove.length+1;for(r(e)?e.listeners+=o:e=function(t,e){function n(){0==--n.listeners&&l(t)}return n.listeners=e,n}(t.elm,o),r(n=t.componentInstance)&&r(n=n._vnode)&&r(n.data)&&$(n,e),n=0;n<c.remove.length;++n)c.remove[n](t,e);r(n=t.data.hook)&&r(n=n.remove)?n(t,e):e()}else l(t.elm)}function x(t,e,n,o){for(var i=n;i<o;i++){var a=e[i];if(r(a)&&eo(t,a))return i}}function O(t,e,i,a,s,u){if(t!==e){r(e.elm)&&r(a)&&(e=a[s]=lt(e));var l=e.elm=t.elm;if(o(t.isAsyncPlaceholder))r(e.asyncFactory.resolved)?j(t.elm,e,i):e.isAsyncPlaceholder=!0;else if(o(e.isStatic)&&o(t.isStatic)&&e.key===t.key&&(o(e.isCloned)||o(e.isOnce)))e.componentInstance=t.componentInstance;else{var p,v=e.data;r(v)&&r(p=v.hook)&&r(p=p.prepatch)&&p(t,e);var h=t.children,m=e.children;if(r(v)&&_(e)){for(p=0;p<c.update.length;++p)c.update[p](t,e);r(p=v.hook)&&r(p=p.update)&&p(t,e)}n(e.text)?r(h)&&r(m)?h!==m&&function(t,e,o,i,a){for(var s,c,u,l=0,p=0,v=e.length-1,h=e[0],m=e[v],_=o.length-1,y=o[0],g=o[_],w=!a;l<=v&&p<=_;)n(h)?h=e[++l]:n(m)?m=e[--v]:eo(h,y)?(O(h,y,i,o,p),h=e[++l],y=o[++p]):eo(m,g)?(O(m,g,i,o,_),m=e[--v],g=o[--_]):eo(h,g)?(O(h,g,i,o,_),w&&f.insertBefore(t,h.elm,f.nextSibling(m.elm)),h=e[++l],g=o[--_]):eo(m,y)?(O(m,y,i,o,p),w&&f.insertBefore(t,m.elm,h.elm),m=e[--v],y=o[++p]):(n(s)&&(s=no(e,l,v)),n(c=r(y.key)?s[y.key]:x(y,e,l,v))?d(y,i,t,h.elm,!1,o,p):eo(u=e[c],y)?(O(u,y,i,o,p),e[c]=void 0,w&&f.insertBefore(t,u.elm,h.elm)):d(y,i,t,h.elm,!1,o,p),y=o[++p]);l>v?b(t,n(o[_+1])?null:o[_+1].elm,o,p,_,i):p>_&&C(e,l,v)}(l,h,m,i,u):r(m)?(r(t.text)&&f.setTextContent(l,""),b(l,null,m,0,m.length-1,i)):r(h)?C(h,0,h.length-1):r(t.text)&&f.setTextContent(l,""):t.text!==e.text&&f.setTextContent(l,e.text),r(v)&&r(p=v.hook)&&r(p=p.postpatch)&&p(t,e)}}}function k(t,e,n){if(o(n)&&r(t.parent))t.parent.data.pendingInsert=e;else for(var i=0;i<e.length;++i)e[i].data.hook.insert(e[i])}var S=v("attrs,class,staticClass,staticStyle,key");function j(t,e,n,i){var a,s=e.tag,c=e.data,u=e.children;if(i=i||c&&c.pre,e.elm=t,o(e.isComment)&&r(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(r(c)&&(r(a=c.hook)&&r(a=a.init)&&a(e,!0),r(a=e.componentInstance)))return p(e,n),!0;if(r(s)){if(r(u))if(t.hasChildNodes())if(r(a=c)&&r(a=a.domProps)&&r(a=a.innerHTML)){if(a!==t.innerHTML)return!1}else{for(var f=!0,l=t.firstChild,d=0;d<u.length;d++){if(!l||!j(l,u[d],n,i)){f=!1;break}l=l.nextSibling}if(!f||l)return!1}else m(e,u,n);if(r(c)){var v=!1;for(var h in c)if(!S(h)){v=!0,y(e,n);break}!v&&c.class&&mn(c.class)}}else t.data!==e.text&&(t.data=e.text);return!0}return function(t,e,i,a){if(!n(e)){var s,u=!1,l=[];if(n(t))u=!0,d(e,l);else{var p=r(t.nodeType);if(!p&&eo(t,e))O(t,e,l,null,null,a);else{if(p){if(1===t.nodeType&&t.hasAttribute(M)&&(t.removeAttribute(M),i=!0),o(i)&&j(t,e,l))return k(e,l,!0),t;s=t,t=new ct(f.tagName(s).toLowerCase(),{},[],void 0,s)}var v=t.elm,h=f.parentNode(v);if(d(e,l,v._leaveCb?null:h,f.nextSibling(v)),r(e.parent))for(var m=e.parent,y=_(e);m;){for(var g=0;g<c.destroy.length;++g)c.destroy[g](m);if(m.elm=e.elm,y){for(var b=0;b<c.create.length;++b)c.create[b](Yr,m);var $=m.data.hook.insert;if($.merged)for(var x=1;x<$.fns.length;x++)$.fns[x]()}else Xr(m);m=m.parent}r(h)?C([t],0,0):r(t.tag)&&w(t)}}return k(e,l,u),e.elm}r(t)&&w(t)}}({nodeOps:Zr,modules:[vo,_o,xo,So,Ro,H?{create:fi,activate:fi,remove:function(t,e){!0!==t.data.show?si(t,e):e()}}:{}].concat(uo)});q&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&gi(t,"input")}));var di={inserted:function(t,e,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?re(n,"postpatch",(function(){di.componentUpdated(t,e,n)})):pi(t,e,n.context),t._vOptions=[].map.call(t.options,mi)):("textarea"===n.tag||Gr(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",_i),t.addEventListener("compositionend",yi),t.addEventListener("change",yi),q&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){pi(t,e,n.context);var r=t._vOptions,o=t._vOptions=[].map.call(t.options,mi);if(o.some((function(t,e){return!P(t,r[e])})))(t.multiple?e.value.some((function(t){return hi(t,o)})):e.value!==e.oldValue&&hi(e.value,o))&&gi(t,"change")}}};function pi(t,e,n){vi(t,e),(K||G)&&setTimeout((function(){vi(t,e)}),0)}function vi(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=t.options.length;s<c;s++)if(a=t.options[s],o)i=I(r,mi(a))>-1,a.selected!==i&&(a.selected=i);else if(P(mi(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function hi(t,e){return e.every((function(e){return!P(e,t)}))}function mi(t){return"_value"in t?t._value:t.value}function _i(t){t.target.composing=!0}function yi(t){t.target.composing&&(t.target.composing=!1,gi(t.target,"input"))}function gi(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function bi(t){return!t.componentInstance||t.data&&t.data.transition?t:bi(t.componentInstance._vnode)}var wi={bind:function(t,e,n){var r=e.value,o=(n=bi(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,ai(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=bi(n)).data&&n.data.transition?(n.data.show=!0,r?ai(n,(function(){t.style.display=t.__vOriginalDisplay})):si(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}},Ci={model:di,show:wi},$i={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function xi(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?xi(Me(e.children)):t}function Oi(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[w(r)]=o[r];return e}function ki(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Si=function(t){return t.tag||Oe(t)},ji=function(t){return"show"===t.name},Ti={name:"transition",props:$i,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Si)).length){var r=this.mode,o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var a=xi(o);if(!a)return o;if(this._leaving)return ki(t,o);var s="__transition-".concat(this._uid,"-");a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=Oi(this),u=this._vnode,f=xi(u);if(a.data.directives&&a.data.directives.some(ji)&&(a.data.show=!0),f&&f.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(a,f)&&!Oe(f)&&(!f.componentInstance||!f.componentInstance._vnode.isComment)){var l=f.data.transition=S({},c);if("out-in"===r)return this._leaving=!0,re(l,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),ki(t,o);if("in-out"===r){if(Oe(a))return u;var d,p=function(){d()};re(c,"afterEnter",p),re(c,"enterCancelled",p),re(l,"delayLeave",(function(t){d=t}))}}return o}}},Ai=S({tag:String,moveClass:String},$i);delete Ai.mode;var Ei={props:Ai,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=kn(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Oi(this),s=0;s<o.length;s++){(f=o[s]).tag&&null!=f.key&&0!==String(f.key).indexOf("__vlist")&&(i.push(f),n[f.key]=f,(f.data||(f.data={})).transition=a)}if(r){var c=[],u=[];for(s=0;s<r.length;s++){var f;(f=r[s]).data.transition=a,f.data.pos=f.elm.getBoundingClientRect(),n[f.key]?c.push(f):u.push(f)}this.kept=t(e,null,c),this.removed=u}return t(e,null,i)},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(Pi),t.forEach(Ii),t.forEach(Di),this._reflow=document.body.offsetHeight,t.forEach((function(t){if(t.data.moved){var n=t.elm,r=n.style;Yo(n,e),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Go,n._moveCb=function t(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Go,t),n._moveCb=null,ti(n,e))})}})))},methods:{hasMove:function(t,e){if(!Ho)return!1;if(this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((function(t){Vo(n,t)})),Uo(n,e),n.style.display="none",this.$el.appendChild(n);var r=ri(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}};function Pi(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Ii(t){t.data.newPos=t.elm.getBoundingClientRect()}function Di(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}var Ni={Transition:Ti,TransitionGroup:Ei};return Cr.config.mustUseProp=function(t,e,n){return"value"===n&&Er(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Cr.config.isReservedTag=Kr,Cr.config.isReservedAttr=Ar,Cr.config.getTagNamespace=function(t){return Wr(t)?"svg":"math"===t?"math":void 0},Cr.config.isUnknownElement=function(t){if(!H)return!0;if(Kr(t))return!1;if(t=t.toLowerCase(),null!=qr[t])return qr[t];var e=document.createElement(t);return t.indexOf("-")>-1?qr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:qr[t]=/HTMLUnknownElement/.test(e.toString())},S(Cr.options.directives,Ci),S(Cr.options.components,Ni),Cr.prototype.__patch__=H?li:T,Cr.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=ut),An(t,"beforeMount"),r=function(){t._update(t._render(),n)},new bn(t,r,T,{before:function(){t._isMounted&&!t._isDestroyed&&An(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i<o.length;i++)o[i].run();return null==t.$vnode&&(t._isMounted=!0,An(t,"mounted")),t}(this,t=t&&H?function(t){if("string"==typeof t){return document.querySelector(t)||document.createElement("div")}return t}(t):void 0,e)},H&&setTimeout((function(){F.devtools&&nt&&nt.emit("init",Cr)}),0),S(Cr,vn),Cr}));import Vue from './vue.runtime.common.js'
export default Vue

// this should be kept in sync with src/v3/index.ts
export const {
  version,

  // refs
  ref,
  shallowRef,
  isRef,
  toRef,
  toRefs,
  unref,
  proxyRefs,
  customRef,
  triggerRef,
  computed,

  // reactive
  reactive,
  isReactive,
  isReadonly,
  isShallow,
  isProxy,
  shallowReactive,
  markRaw,
  toRaw,
  readonly,
  shallowReadonly,

  // watch
  watch,
  watchEffect,
  watchPostEffect,
  watchSyncEffect,

  // effectScope
  effectScope,
  onScopeDispose,
  getCurrentScope,

  // provide / inject
  provide,
  inject,

  // lifecycle
  onBeforeMount,
  onMounted,
  onBeforeUpdate,
  onUpdated,
  onBeforeUnmount,
  onUnmounted,
  onErrorCaptured,
  onActivated,
  onDeactivated,
  onServerPrefetch,
  onRenderTracked,
  onRenderTriggered,

  // v2 only
  set,
  del,

  // v3 compat
  h,
  getCurrentInstance,
  useSlots,
  useAttrs,
  mergeDefaults,
  nextTick,
  useCssModule,
  useCssVars,
  defineComponent,
  defineAsyncComponent
} = Vue
The MIT License (MIT)

Copyright (c) 2013-present, Yuxi (Evan) You

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "vue",
  "version": "2.7.14",
  "packageManager": "pnpm@7.1.0",
  "description": "Reactive, component-oriented view layer for modern web interfaces.",
  "main": "dist/vue.runtime.common.js",
  "module": "dist/vue.runtime.esm.js",
  "unpkg": "dist/vue.js",
  "jsdelivr": "dist/vue.js",
  "typings": "types/index.d.ts",
  "files": [
    "src",
    "dist/*.js",
    "dist/*.mjs",
    "types/*.d.ts",
    "compiler-sfc",
    "packages/compiler-sfc"
  ],
  "exports": {
    ".": {
      "import": {
        "node": "./dist/vue.runtime.mjs",
        "default": "./dist/vue.runtime.esm.js"
      },
      "require": "./dist/vue.runtime.common.js",
      "types": "./types/index.d.ts"
    },
    "./compiler-sfc": {
      "import": "./compiler-sfc/index.mjs",
      "require": "./compiler-sfc/index.js"
    },
    "./dist/*": "./dist/*",
    "./types/*": "./types/*",
    "./package.json": "./package.json"
  },
  "sideEffects": false,
  "gitHooks": {
    "pre-commit": "lint-staged",
    "commit-msg": "node scripts/verify-commit-msg.js"
  },
  "lint-staged": {
    "*.js": [
      "prettier --write"
    ],
    "*.ts": [
      "prettier --parser=typescript --write"
    ]
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/vuejs/vue.git"
  },
  "author": "Evan You",
  "license": "MIT",
  "homepage": "https://github.com/vuejs/vue#readme",
  "dependencies": {
    "@vue/compiler-sfc": "2.7.14",
    "csstype": "^3.1.0"
  },
  "devDependencies": {
    "@babel/parser": "^7.18.4",
    "@microsoft/api-extractor": "^7.25.0",
    "@rollup/plugin-alias": "^3.1.9",
    "@rollup/plugin-commonjs": "^22.0.0",
    "@rollup/plugin-node-resolve": "^13.3.0",
    "@rollup/plugin-replace": "^4.0.0",
    "@types/he": "^1.1.2",
    "@types/node": "^17.0.41",
    "chalk": "^4.1.2",
    "conventional-changelog-cli": "^2.2.2",
    "cross-spawn": "^7.0.3",
    "enquirer": "^2.3.6",
    "esbuild": "^0.14.43",
    "execa": "^4.1.0",
    "he": "^1.2.0",
    "jasmine-core": "^4.2.0",
    "jsdom": "^19.0.0",
    "karma": "^6.3.20",
    "karma-chrome-launcher": "^3.1.1",
    "karma-cli": "^2.0.0",
    "karma-esbuild": "^2.2.4",
    "karma-jasmine": "^5.0.1",
    "lint-staged": "^12.5.0",
    "lodash": "^4.17.21",
    "marked": "^4.0.16",
    "minimist": "^1.2.6",
    "postcss": "^8.4.14",
    "prettier": "^2.6.2",
    "puppeteer": "^14.3.0",
    "rimraf": "^3.0.2",
    "rollup": "^2.79.1",
    "rollup-plugin-typescript2": "^0.32.0",
    "semver": "^7.3.7",
    "shelljs": "^0.8.5",
    "terser": "^5.14.0",
    "todomvc-app-css": "^2.4.2",
    "ts-node": "^10.8.1",
    "tslib": "^2.4.0",
    "typescript": "^4.8.4",
    "vitest": "^0.12.10",
    "yorkie": "^2.0.0"
  }
}{
  "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",

  "projectFolder": ".",

  "mainEntryPointFilePath": "../../temp/packages/compiler-sfc/src/index.d.ts",

  "compiler": {
    "tsconfigFilePath": "../../api-extractor.tsconfig.json"
  },

  "dtsRollup": {
    "enabled": true,
    "untrimmedFilePath": "",
    "publicTrimmedFilePath": "./dist/compiler-sfc.d.ts"
  },

  "apiReport": {
    "enabled": false
  },

  "docModel": {
    "enabled": false
  },

  "tsdocMetadata": {
    "enabled": false
  },

  "messages": {
    "compilerMessageReporting": {
      "default": {
        "logLevel": "warning"
      }
    },

    "extractorMessageReporting": {
      "default": {
        "logLevel": "warning",
        "addToApiReportFile": true
      },

      "ae-missing-release-tag": {
        "logLevel": "none"
      },
      "ae-internal-missing-underscore": {
        "logLevel": "none"
      },
      "ae-forgotten-export": {
        "logLevel": "none"
      }
    },

    "tsdocMessageReporting": {
      "default": {
        "logLevel": "warning"
      },

      "tsdoc-undefined-tag": {
        "logLevel": "none"
      }
    }
  }
}
'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var require$$0 = require('source-map');
var parser$1 = require('@babel/parser');
var url = require('url');
var path = require('path');
var require$$0$1 = require('fs');
var require$$2 = require('util');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0);
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2);

var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

function getDefaultExportFromCjs (x) {
	return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}

var splitRE$2 = /\r?\n/g;
var emptyRE$1 = /^\s*$/;
var needFixRE = /^(\r?\n)*[\t\s]/;

var deIndent = function deindent (str) {
  if (!needFixRE.test(str)) {
    return str
  }
  var lines = str.split(splitRE$2);
  var min = Infinity;
  var type, cur, c;
  for (var i = 0; i < lines.length; i++) {
    var line = lines[i];
    if (!emptyRE$1.test(line)) {
      if (!type) {
        c = line.charAt(0);
        if (c === ' ' || c === '\t') {
          type = c;
          cur = count(line, type);
          if (cur < min) {
            min = cur;
          }
        } else {
          return str
        }
      } else {
        cur = count(line, type);
        if (cur < min) {
          min = cur;
        }
      }
    }
  }
  return lines.map(function (line) {
    return line.slice(min)
  }).join('\n')
};

function count (line, type) {
  var i = 0;
  while (line.charAt(i) === type) {
    i++;
  }
  return i
}

const emptyObject = Object.freeze({});
const isArray = Array.isArray;
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef(v) {
    return v === undefined || v === null;
}
function isDef(v) {
    return v !== undefined && v !== null;
}
function isTrue(v) {
    return v === true;
}
function isFalse(v) {
    return v === false;
}
/**
 * Check if value is primitive.
 */
function isPrimitive(value) {
    return (typeof value === 'string' ||
        typeof value === 'number' ||
        // $flow-disable-line
        typeof value === 'symbol' ||
        typeof value === 'boolean');
}
function isFunction(value) {
    return typeof value === 'function';
}
/**
 * Quick object check - this is primarily used to tell
 * objects from primitive values when we know the value
 * is a JSON-compliant type.
 */
function isObject$1(obj) {
    return obj !== null && typeof obj === 'object';
}
/**
 * Get the raw type string of a value, e.g., [object Object].
 */
const _toString = Object.prototype.toString;
function toRawType(value) {
    return _toString.call(value).slice(8, -1);
}
/**
 * Strict object type check. Only returns true
 * for plain JavaScript objects.
 */
function isPlainObject(obj) {
    return _toString.call(obj) === '[object Object]';
}
/**
 * Check if val is a valid array index.
 */
function isValidArrayIndex(val) {
    const n = parseFloat(String(val));
    return n >= 0 && Math.floor(n) === n && isFinite(val);
}
function isPromise(val) {
    return (isDef(val) &&
        typeof val.then === 'function' &&
        typeof val.catch === 'function');
}
/**
 * Convert a value to a string that is actually rendered.
 */
function toString$2(val) {
    return val == null
        ? ''
        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
            ? JSON.stringify(val, null, 2)
            : String(val);
}
/**
 * Convert an input value to a number for persistence.
 * If the conversion fails, return original string.
 */
function toNumber(val) {
    const n = parseFloat(val);
    return isNaN(n) ? val : n;
}
/**
 * Make a map and return a function for checking if a key
 * is in that map.
 */
function makeMap(str, expectsLowerCase) {
    const map = Object.create(null);
    const list = str.split(',');
    for (let i = 0; i < list.length; i++) {
        map[list[i]] = true;
    }
    return expectsLowerCase ? val => map[val.toLowerCase()] : val => map[val];
}
/**
 * Check if a tag is a built-in tag.
 */
const isBuiltInTag = makeMap('slot,component', true);
/**
 * Check if an attribute is a reserved attribute.
 */
const isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
/**
 * Check whether an object has the property.
 */
const hasOwnProperty$1 = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
    return hasOwnProperty$1.call(obj, key);
}
/**
 * Create a cached version of a pure function.
 */
function cached(fn) {
    const cache = Object.create(null);
    return function cachedFn(str) {
        const hit = cache[str];
        return hit || (cache[str] = fn(str));
    };
}
/**
 * Camelize a hyphen-delimited string.
 */
const camelizeRE = /-(\w)/g;
const camelize = cached((str) => {
    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));
});
/**
 * Capitalize a string.
 */
const capitalize = cached((str) => {
    return str.charAt(0).toUpperCase() + str.slice(1);
});
/**
 * Hyphenate a camelCase string.
 */
const hyphenateRE = /\B([A-Z])/g;
const hyphenate = cached((str) => {
    return str.replace(hyphenateRE, '-$1').toLowerCase();
});
/**
 * Mix properties into target object.
 */
function extend(to, _from) {
    for (const key in _from) {
        to[key] = _from[key];
    }
    return to;
}
/**
 * Merge an Array of Objects into a single Object.
 */
function toObject(arr) {
    const res = {};
    for (let i = 0; i < arr.length; i++) {
        if (arr[i]) {
            extend(res, arr[i]);
        }
    }
    return res;
}
/* eslint-disable no-unused-vars */
/**
 * Perform no operation.
 * Stubbing args to make Flow happy without leaving useless transpiled code
 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
 */
function noop(a, b, c) { }
/**
 * Always return false.
 */
const no = (a, b, c) => false;
/* eslint-enable no-unused-vars */
/**
 * Return the same value.
 */
const identity = (_) => _;
/**
 * Generate a string containing static keys from compiler modules.
 */
function genStaticKeys$1(modules) {
    return modules
        .reduce((keys, m) => {
        return keys.concat(m.staticKeys || []);
    }, [])
        .join(',');
}
/**
 * Check if two values are loosely equal - that is,
 * if they are plain objects, do they have the same shape?
 */
function looseEqual(a, b) {
    if (a === b)
        return true;
    const isObjectA = isObject$1(a);
    const isObjectB = isObject$1(b);
    if (isObjectA && isObjectB) {
        try {
            const isArrayA = Array.isArray(a);
            const isArrayB = Array.isArray(b);
            if (isArrayA && isArrayB) {
                return (a.length === b.length &&
                    a.every((e, i) => {
                        return looseEqual(e, b[i]);
                    }));
            }
            else if (a instanceof Date && b instanceof Date) {
                return a.getTime() === b.getTime();
            }
            else if (!isArrayA && !isArrayB) {
                const keysA = Object.keys(a);
                const keysB = Object.keys(b);
                return (keysA.length === keysB.length &&
                    keysA.every(key => {
                        return looseEqual(a[key], b[key]);
                    }));
            }
            else {
                /* istanbul ignore next */
                return false;
            }
        }
        catch (e) {
            /* istanbul ignore next */
            return false;
        }
    }
    else if (!isObjectA && !isObjectB) {
        return String(a) === String(b);
    }
    else {
        return false;
    }
}
/**
 * Return the first index at which a loosely equal value can be
 * found in the array (if value is a plain object, the array must
 * contain an object of the same shape), or -1 if it is not present.
 */
function looseIndexOf(arr, val) {
    for (let i = 0; i < arr.length; i++) {
        if (looseEqual(arr[i], val))
            return i;
    }
    return -1;
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
function hasChanged(x, y) {
    if (x === y) {
        return x === 0 && 1 / x !== 1 / y;
    }
    else {
        return x === x || y === y;
    }
}

const isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
    'link,meta,param,source,track,wbr');
// Elements that you can, intentionally, leave open
// (and which close themselves)
const canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
const isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
    'title,tr,track');

/**
 * unicode letters used for parsing html tags, component names and property paths.
 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
 */
const unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
/**
 * Define a property.
 */
function def(obj, key, val, enumerable) {
    Object.defineProperty(obj, key, {
        value: val,
        enumerable: !!enumerable,
        writable: true,
        configurable: true
    });
}

/**
 * Not type-checking this file because it's mostly vendor code.
 */
// Regular Expressions for parsing tags and attributes
const attribute$2 = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
const dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
const ncname = `[a-zA-Z_][\\-\\.0-9_a-zA-Z${unicodeRegExp.source}]*`;
const qnameCapture = `((?:${ncname}\\:)?${ncname})`;
const startTagOpen = new RegExp(`^<${qnameCapture}`);
const startTagClose = /^\s*(\/?)>/;
const endTag = new RegExp(`^<\\/${qnameCapture}[^>]*>`);
const doctype = /^<!DOCTYPE [^>]+>/i;
// #7298: escape - to avoid being passed as HTML comment when inlined in page
const comment$3 = /^<!\--/;
const conditionalComment = /^<!\[/;
// Special Elements (can contain anything)
const isPlainTextElement = makeMap('script,style,textarea', true);
const reCache = {};
const decodingMap = {
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&amp;': '&',
    '&#10;': '\n',
    '&#9;': '\t',
    '&#39;': "'"
};
const encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
const encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
// #5992
const isIgnoreNewlineTag = makeMap('pre,textarea', true);
const shouldIgnoreFirstNewline = (tag, html) => tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
function decodeAttr(value, shouldDecodeNewlines) {
    const re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
    return value.replace(re, match => decodingMap[match]);
}
function parseHTML(html, options) {
    const stack = [];
    const expectHTML = options.expectHTML;
    const isUnaryTag = options.isUnaryTag || no;
    const canBeLeftOpenTag = options.canBeLeftOpenTag || no;
    let index = 0;
    let last, lastTag;
    while (html) {
        last = html;
        // Make sure we're not in a plaintext content element like script/style
        if (!lastTag || !isPlainTextElement(lastTag)) {
            let textEnd = html.indexOf('<');
            if (textEnd === 0) {
                // Comment:
                if (comment$3.test(html)) {
                    const commentEnd = html.indexOf('-->');
                    if (commentEnd >= 0) {
                        if (options.shouldKeepComment && options.comment) {
                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
                        }
                        advance(commentEnd + 3);
                        continue;
                    }
                }
                // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
                if (conditionalComment.test(html)) {
                    const conditionalEnd = html.indexOf(']>');
                    if (conditionalEnd >= 0) {
                        advance(conditionalEnd + 2);
                        continue;
                    }
                }
                // Doctype:
                const doctypeMatch = html.match(doctype);
                if (doctypeMatch) {
                    advance(doctypeMatch[0].length);
                    continue;
                }
                // End tag:
                const endTagMatch = html.match(endTag);
                if (endTagMatch) {
                    const curIndex = index;
                    advance(endTagMatch[0].length);
                    parseEndTag(endTagMatch[1], curIndex, index);
                    continue;
                }
                // Start tag:
                const startTagMatch = parseStartTag();
                if (startTagMatch) {
                    handleStartTag(startTagMatch);
                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
                        advance(1);
                    }
                    continue;
                }
            }
            let text, rest, next;
            if (textEnd >= 0) {
                rest = html.slice(textEnd);
                while (!endTag.test(rest) &&
                    !startTagOpen.test(rest) &&
                    !comment$3.test(rest) &&
                    !conditionalComment.test(rest)) {
                    // < in plain text, be forgiving and treat it as text
                    next = rest.indexOf('<', 1);
                    if (next < 0)
                        break;
                    textEnd += next;
                    rest = html.slice(textEnd);
                }
                text = html.substring(0, textEnd);
            }
            if (textEnd < 0) {
                text = html;
            }
            if (text) {
                advance(text.length);
            }
            if (options.chars && text) {
                options.chars(text, index - text.length, index);
            }
        }
        else {
            let endTagLength = 0;
            const stackedTag = lastTag.toLowerCase();
            const reStackedTag = reCache[stackedTag] ||
                (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));
            const rest = html.replace(reStackedTag, function (all, text, endTag) {
                endTagLength = endTag.length;
                if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {
                    text = text
                        .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
                        .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
                }
                if (shouldIgnoreFirstNewline(stackedTag, text)) {
                    text = text.slice(1);
                }
                if (options.chars) {
                    options.chars(text);
                }
                return '';
            });
            index += html.length - rest.length;
            html = rest;
            parseEndTag(stackedTag, index - endTagLength, index);
        }
        if (html === last) {
            options.chars && options.chars(html);
            if (process.env.NODE_ENV !== 'production' && !stack.length && options.warn) {
                options.warn(`Mal-formatted tag at end of template: "${html}"`, {
                    start: index + html.length
                });
            }
            break;
        }
    }
    // Clean up any remaining tags
    parseEndTag();
    function advance(n) {
        index += n;
        html = html.substring(n);
    }
    function parseStartTag() {
        const start = html.match(startTagOpen);
        if (start) {
            const match = {
                tagName: start[1],
                attrs: [],
                start: index
            };
            advance(start[0].length);
            let end, attr;
            while (!(end = html.match(startTagClose)) &&
                (attr = html.match(dynamicArgAttribute) || html.match(attribute$2))) {
                attr.start = index;
                advance(attr[0].length);
                attr.end = index;
                match.attrs.push(attr);
            }
            if (end) {
                match.unarySlash = end[1];
                advance(end[0].length);
                match.end = index;
                return match;
            }
        }
    }
    function handleStartTag(match) {
        const tagName = match.tagName;
        const unarySlash = match.unarySlash;
        if (expectHTML) {
            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
                parseEndTag(lastTag);
            }
            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
                parseEndTag(tagName);
            }
        }
        const unary = isUnaryTag(tagName) || !!unarySlash;
        const l = match.attrs.length;
        const attrs = new Array(l);
        for (let i = 0; i < l; i++) {
            const args = match.attrs[i];
            const value = args[3] || args[4] || args[5] || '';
            const shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
                ? options.shouldDecodeNewlinesForHref
                : options.shouldDecodeNewlines;
            attrs[i] = {
                name: args[1],
                value: decodeAttr(value, shouldDecodeNewlines)
            };
            if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                attrs[i].start = args.start + args[0].match(/^\s*/).length;
                attrs[i].end = args.end;
            }
        }
        if (!unary) {
            stack.push({
                tag: tagName,
                lowerCasedTag: tagName.toLowerCase(),
                attrs: attrs,
                start: match.start,
                end: match.end
            });
            lastTag = tagName;
        }
        if (options.start) {
            options.start(tagName, attrs, unary, match.start, match.end);
        }
    }
    function parseEndTag(tagName, start, end) {
        let pos, lowerCasedTagName;
        if (start == null)
            start = index;
        if (end == null)
            end = index;
        // Find the closest opened tag of the same type
        if (tagName) {
            lowerCasedTagName = tagName.toLowerCase();
            for (pos = stack.length - 1; pos >= 0; pos--) {
                if (stack[pos].lowerCasedTag === lowerCasedTagName) {
                    break;
                }
            }
        }
        else {
            // If no tag name is provided, clean shop
            pos = 0;
        }
        if (pos >= 0) {
            // Close all the open elements, up the stack
            for (let i = stack.length - 1; i >= pos; i--) {
                if (process.env.NODE_ENV !== 'production' && (i > pos || !tagName) && options.warn) {
                    options.warn(`tag <${stack[i].tag}> has no matching end tag.`, {
                        start: stack[i].start,
                        end: stack[i].end
                    });
                }
                if (options.end) {
                    options.end(stack[i].tag, start, end);
                }
            }
            // Remove the open elements from the stack
            stack.length = pos;
            lastTag = pos && stack[pos - 1].tag;
        }
        else if (lowerCasedTagName === 'br') {
            if (options.start) {
                options.start(tagName, [], true, start, end);
            }
        }
        else if (lowerCasedTagName === 'p') {
            if (options.start) {
                options.start(tagName, [], false, start, end);
            }
            if (options.end) {
                options.end(tagName, start, end);
            }
        }
    }
}

const DEFAULT_FILENAME = 'anonymous.vue';
const splitRE$1 = /\r?\n/g;
const replaceRE = /./g;
const isSpecialTag = makeMap('script,style,template', true);
/**
 * Parse a single-file component (*.vue) file into an SFC Descriptor Object.
 */
function parseComponent(source, options = {}) {
    const sfc = {
        source,
        filename: DEFAULT_FILENAME,
        template: null,
        script: null,
        scriptSetup: null,
        styles: [],
        customBlocks: [],
        cssVars: [],
        errors: [],
        shouldForceReload: null // attached in parse() by compiler-sfc
    };
    let depth = 0;
    let currentBlock = null;
    let warn = msg => {
        sfc.errors.push(msg);
    };
    if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
        warn = (msg, range) => {
            const data = { msg };
            if (range.start != null) {
                data.start = range.start;
            }
            if (range.end != null) {
                data.end = range.end;
            }
            sfc.errors.push(data);
        };
    }
    function start(tag, attrs, unary, start, end) {
        if (depth === 0) {
            currentBlock = {
                type: tag,
                content: '',
                start: end,
                end: 0,
                attrs: attrs.reduce((cumulated, { name, value }) => {
                    cumulated[name] = value || true;
                    return cumulated;
                }, {})
            };
            if (typeof currentBlock.attrs.src === 'string') {
                currentBlock.src = currentBlock.attrs.src;
            }
            if (isSpecialTag(tag)) {
                checkAttrs(currentBlock, attrs);
                if (tag === 'script') {
                    const block = currentBlock;
                    if (block.attrs.setup) {
                        block.setup = currentBlock.attrs.setup;
                        sfc.scriptSetup = block;
                    }
                    else {
                        sfc.script = block;
                    }
                }
                else if (tag === 'style') {
                    sfc.styles.push(currentBlock);
                }
                else {
                    sfc[tag] = currentBlock;
                }
            }
            else {
                // custom blocks
                sfc.customBlocks.push(currentBlock);
            }
        }
        if (!unary) {
            depth++;
        }
    }
    function checkAttrs(block, attrs) {
        for (let i = 0; i < attrs.length; i++) {
            const attr = attrs[i];
            if (attr.name === 'lang') {
                block.lang = attr.value;
            }
            if (attr.name === 'scoped') {
                block.scoped = true;
            }
            if (attr.name === 'module') {
                block.module = attr.value || true;
            }
        }
    }
    function end(tag, start) {
        if (depth === 1 && currentBlock) {
            currentBlock.end = start;
            let text = source.slice(currentBlock.start, currentBlock.end);
            if (options.deindent === true ||
                // by default, deindent unless it's script with default lang or (j/t)sx?
                (options.deindent !== false &&
                    !(currentBlock.type === 'script' &&
                        (!currentBlock.lang || /^(j|t)sx?$/.test(currentBlock.lang))))) {
                text = deIndent(text);
            }
            // pad content so that linters and pre-processors can output correct
            // line numbers in errors and warnings
            if (currentBlock.type !== 'template' && options.pad) {
                text = padContent(currentBlock, options.pad) + text;
            }
            currentBlock.content = text;
            currentBlock = null;
        }
        depth--;
    }
    function padContent(block, pad) {
        if (pad === 'space') {
            return source.slice(0, block.start).replace(replaceRE, ' ');
        }
        else {
            const offset = source.slice(0, block.start).split(splitRE$1).length;
            const padChar = block.type === 'script' && !block.lang ? '//\n' : '\n';
            return Array(offset).join(padChar);
        }
    }
    parseHTML(source, {
        warn,
        start,
        end,
        outputSourceRange: options.outputSourceRange
    });
    return sfc;
}

function pad (hash, len) {
  while (hash.length < len) {
    hash = '0' + hash;
  }
  return hash;
}

function fold (hash, text) {
  var i;
  var chr;
  var len;
  if (text.length === 0) {
    return hash;
  }
  for (i = 0, len = text.length; i < len; i++) {
    chr = text.charCodeAt(i);
    hash = ((hash << 5) - hash) + chr;
    hash |= 0;
  }
  return hash < 0 ? hash * -2 : hash;
}

function foldObject (hash, o, seen) {
  return Object.keys(o).sort().reduce(foldKey, hash);
  function foldKey (hash, key) {
    return foldValue(hash, o[key], key, seen);
  }
}

function foldValue (input, value, key, seen) {
  var hash = fold(fold(fold(input, key), toString$1(value)), typeof value);
  if (value === null) {
    return fold(hash, 'null');
  }
  if (value === undefined) {
    return fold(hash, 'undefined');
  }
  if (typeof value === 'object' || typeof value === 'function') {
    if (seen.indexOf(value) !== -1) {
      return fold(hash, '[Circular]' + key);
    }
    seen.push(value);

    var objHash = foldObject(hash, value, seen);

    if (!('valueOf' in value) || typeof value.valueOf !== 'function') {
      return objHash;
    }

    try {
      return fold(objHash, String(value.valueOf()))
    } catch (err) {
      return fold(objHash, '[valueOf exception]' + (err.stack || err.message))
    }
  }
  return fold(hash, value.toString());
}

function toString$1 (o) {
  return Object.prototype.toString.call(o);
}

function sum (o) {
  return pad(foldValue(0, o, '', []).toString(16), 8);
}

var hashSum = sum;

var iterator;
var hasRequiredIterator;

function requireIterator () {
	if (hasRequiredIterator) return iterator;
	hasRequiredIterator = 1;
	iterator = function (Yallist) {
	  Yallist.prototype[Symbol.iterator] = function* () {
	    for (let walker = this.head; walker; walker = walker.next) {
	      yield walker.value;
	    }
	  };
	};
	return iterator;
}

var yallist = Yallist$1;

Yallist$1.Node = Node;
Yallist$1.create = Yallist$1;

function Yallist$1 (list) {
  var self = this;
  if (!(self instanceof Yallist$1)) {
    self = new Yallist$1();
  }

  self.tail = null;
  self.head = null;
  self.length = 0;

  if (list && typeof list.forEach === 'function') {
    list.forEach(function (item) {
      self.push(item);
    });
  } else if (arguments.length > 0) {
    for (var i = 0, l = arguments.length; i < l; i++) {
      self.push(arguments[i]);
    }
  }

  return self
}

Yallist$1.prototype.removeNode = function (node) {
  if (node.list !== this) {
    throw new Error('removing node which does not belong to this list')
  }

  var next = node.next;
  var prev = node.prev;

  if (next) {
    next.prev = prev;
  }

  if (prev) {
    prev.next = next;
  }

  if (node === this.head) {
    this.head = next;
  }
  if (node === this.tail) {
    this.tail = prev;
  }

  node.list.length--;
  node.next = null;
  node.prev = null;
  node.list = null;

  return next
};

Yallist$1.prototype.unshiftNode = function (node) {
  if (node === this.head) {
    return
  }

  if (node.list) {
    node.list.removeNode(node);
  }

  var head = this.head;
  node.list = this;
  node.next = head;
  if (head) {
    head.prev = node;
  }

  this.head = node;
  if (!this.tail) {
    this.tail = node;
  }
  this.length++;
};

Yallist$1.prototype.pushNode = function (node) {
  if (node === this.tail) {
    return
  }

  if (node.list) {
    node.list.removeNode(node);
  }

  var tail = this.tail;
  node.list = this;
  node.prev = tail;
  if (tail) {
    tail.next = node;
  }

  this.tail = node;
  if (!this.head) {
    this.head = node;
  }
  this.length++;
};

Yallist$1.prototype.push = function () {
  for (var i = 0, l = arguments.length; i < l; i++) {
    push(this, arguments[i]);
  }
  return this.length
};

Yallist$1.prototype.unshift = function () {
  for (var i = 0, l = arguments.length; i < l; i++) {
    unshift(this, arguments[i]);
  }
  return this.length
};

Yallist$1.prototype.pop = function () {
  if (!this.tail) {
    return undefined
  }

  var res = this.tail.value;
  this.tail = this.tail.prev;
  if (this.tail) {
    this.tail.next = null;
  } else {
    this.head = null;
  }
  this.length--;
  return res
};

Yallist$1.prototype.shift = function () {
  if (!this.head) {
    return undefined
  }

  var res = this.head.value;
  this.head = this.head.next;
  if (this.head) {
    this.head.prev = null;
  } else {
    this.tail = null;
  }
  this.length--;
  return res
};

Yallist$1.prototype.forEach = function (fn, thisp) {
  thisp = thisp || this;
  for (var walker = this.head, i = 0; walker !== null; i++) {
    fn.call(thisp, walker.value, i, this);
    walker = walker.next;
  }
};

Yallist$1.prototype.forEachReverse = function (fn, thisp) {
  thisp = thisp || this;
  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
    fn.call(thisp, walker.value, i, this);
    walker = walker.prev;
  }
};

Yallist$1.prototype.get = function (n) {
  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
    // abort out of the list early if we hit a cycle
    walker = walker.next;
  }
  if (i === n && walker !== null) {
    return walker.value
  }
};

Yallist$1.prototype.getReverse = function (n) {
  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
    // abort out of the list early if we hit a cycle
    walker = walker.prev;
  }
  if (i === n && walker !== null) {
    return walker.value
  }
};

Yallist$1.prototype.map = function (fn, thisp) {
  thisp = thisp || this;
  var res = new Yallist$1();
  for (var walker = this.head; walker !== null;) {
    res.push(fn.call(thisp, walker.value, this));
    walker = walker.next;
  }
  return res
};

Yallist$1.prototype.mapReverse = function (fn, thisp) {
  thisp = thisp || this;
  var res = new Yallist$1();
  for (var walker = this.tail; walker !== null;) {
    res.push(fn.call(thisp, walker.value, this));
    walker = walker.prev;
  }
  return res
};

Yallist$1.prototype.reduce = function (fn, initial) {
  var acc;
  var walker = this.head;
  if (arguments.length > 1) {
    acc = initial;
  } else if (this.head) {
    walker = this.head.next;
    acc = this.head.value;
  } else {
    throw new TypeError('Reduce of empty list with no initial value')
  }

  for (var i = 0; walker !== null; i++) {
    acc = fn(acc, walker.value, i);
    walker = walker.next;
  }

  return acc
};

Yallist$1.prototype.reduceReverse = function (fn, initial) {
  var acc;
  var walker = this.tail;
  if (arguments.length > 1) {
    acc = initial;
  } else if (this.tail) {
    walker = this.tail.prev;
    acc = this.tail.value;
  } else {
    throw new TypeError('Reduce of empty list with no initial value')
  }

  for (var i = this.length - 1; walker !== null; i--) {
    acc = fn(acc, walker.value, i);
    walker = walker.prev;
  }

  return acc
};

Yallist$1.prototype.toArray = function () {
  var arr = new Array(this.length);
  for (var i = 0, walker = this.head; walker !== null; i++) {
    arr[i] = walker.value;
    walker = walker.next;
  }
  return arr
};

Yallist$1.prototype.toArrayReverse = function () {
  var arr = new Array(this.length);
  for (var i = 0, walker = this.tail; walker !== null; i++) {
    arr[i] = walker.value;
    walker = walker.prev;
  }
  return arr
};

Yallist$1.prototype.slice = function (from, to) {
  to = to || this.length;
  if (to < 0) {
    to += this.length;
  }
  from = from || 0;
  if (from < 0) {
    from += this.length;
  }
  var ret = new Yallist$1();
  if (to < from || to < 0) {
    return ret
  }
  if (from < 0) {
    from = 0;
  }
  if (to > this.length) {
    to = this.length;
  }
  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
    walker = walker.next;
  }
  for (; walker !== null && i < to; i++, walker = walker.next) {
    ret.push(walker.value);
  }
  return ret
};

Yallist$1.prototype.sliceReverse = function (from, to) {
  to = to || this.length;
  if (to < 0) {
    to += this.length;
  }
  from = from || 0;
  if (from < 0) {
    from += this.length;
  }
  var ret = new Yallist$1();
  if (to < from || to < 0) {
    return ret
  }
  if (from < 0) {
    from = 0;
  }
  if (to > this.length) {
    to = this.length;
  }
  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
    walker = walker.prev;
  }
  for (; walker !== null && i > from; i--, walker = walker.prev) {
    ret.push(walker.value);
  }
  return ret
};

Yallist$1.prototype.splice = function (start, deleteCount /*, ...nodes */) {
  if (start > this.length) {
    start = this.length - 1;
  }
  if (start < 0) {
    start = this.length + start;
  }

  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
    walker = walker.next;
  }

  var ret = [];
  for (var i = 0; walker && i < deleteCount; i++) {
    ret.push(walker.value);
    walker = this.removeNode(walker);
  }
  if (walker === null) {
    walker = this.tail;
  }

  if (walker !== this.head && walker !== this.tail) {
    walker = walker.prev;
  }

  for (var i = 2; i < arguments.length; i++) {
    walker = insert(this, walker, arguments[i]);
  }
  return ret;
};

Yallist$1.prototype.reverse = function () {
  var head = this.head;
  var tail = this.tail;
  for (var walker = head; walker !== null; walker = walker.prev) {
    var p = walker.prev;
    walker.prev = walker.next;
    walker.next = p;
  }
  this.head = tail;
  this.tail = head;
  return this
};

function insert (self, node, value) {
  var inserted = node === self.head ?
    new Node(value, null, node, self) :
    new Node(value, node, node.next, self);

  if (inserted.next === null) {
    self.tail = inserted;
  }
  if (inserted.prev === null) {
    self.head = inserted;
  }

  self.length++;

  return inserted
}

function push (self, item) {
  self.tail = new Node(item, self.tail, null, self);
  if (!self.head) {
    self.head = self.tail;
  }
  self.length++;
}

function unshift (self, item) {
  self.head = new Node(item, null, self.head, self);
  if (!self.tail) {
    self.tail = self.head;
  }
  self.length++;
}

function Node (value, prev, next, list) {
  if (!(this instanceof Node)) {
    return new Node(value, prev, next, list)
  }

  this.list = list;
  this.value = value;

  if (prev) {
    prev.next = this;
    this.prev = prev;
  } else {
    this.prev = null;
  }

  if (next) {
    next.prev = this;
    this.next = next;
  } else {
    this.next = null;
  }
}

try {
  // add if support for Symbol.iterator is present
  requireIterator()(Yallist$1);
} catch (er) {}

// A linked list to keep track of recently-used-ness
const Yallist = yallist;

const MAX = Symbol('max');
const LENGTH = Symbol('length');
const LENGTH_CALCULATOR = Symbol('lengthCalculator');
const ALLOW_STALE = Symbol('allowStale');
const MAX_AGE = Symbol('maxAge');
const DISPOSE = Symbol('dispose');
const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');
const LRU_LIST = Symbol('lruList');
const CACHE = Symbol('cache');
const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');

const naiveLength = () => 1;

// lruList is a yallist where the head is the youngest
// item, and the tail is the oldest.  the list contains the Hit
// objects as the entries.
// Each Hit object has a reference to its Yallist.Node.  This
// never changes.
//
// cache is a Map (or PseudoMap) that matches the keys to
// the Yallist.Node object.
class LRUCache {
  constructor (options) {
    if (typeof options === 'number')
      options = { max: options };

    if (!options)
      options = {};

    if (options.max && (typeof options.max !== 'number' || options.max < 0))
      throw new TypeError('max must be a non-negative number')
    // Kind of weird to have a default max of Infinity, but oh well.
    this[MAX] = options.max || Infinity;

    const lc = options.length || naiveLength;
    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc;
    this[ALLOW_STALE] = options.stale || false;
    if (options.maxAge && typeof options.maxAge !== 'number')
      throw new TypeError('maxAge must be a number')
    this[MAX_AGE] = options.maxAge || 0;
    this[DISPOSE] = options.dispose;
    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;
    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;
    this.reset();
  }

  // resize the cache when the max changes.
  set max (mL) {
    if (typeof mL !== 'number' || mL < 0)
      throw new TypeError('max must be a non-negative number')

    this[MAX] = mL || Infinity;
    trim(this);
  }
  get max () {
    return this[MAX]
  }

  set allowStale (allowStale) {
    this[ALLOW_STALE] = !!allowStale;
  }
  get allowStale () {
    return this[ALLOW_STALE]
  }

  set maxAge (mA) {
    if (typeof mA !== 'number')
      throw new TypeError('maxAge must be a non-negative number')

    this[MAX_AGE] = mA;
    trim(this);
  }
  get maxAge () {
    return this[MAX_AGE]
  }

  // resize the cache when the lengthCalculator changes.
  set lengthCalculator (lC) {
    if (typeof lC !== 'function')
      lC = naiveLength;

    if (lC !== this[LENGTH_CALCULATOR]) {
      this[LENGTH_CALCULATOR] = lC;
      this[LENGTH] = 0;
      this[LRU_LIST].forEach(hit => {
        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);
        this[LENGTH] += hit.length;
      });
    }
    trim(this);
  }
  get lengthCalculator () { return this[LENGTH_CALCULATOR] }

  get length () { return this[LENGTH] }
  get itemCount () { return this[LRU_LIST].length }

  rforEach (fn, thisp) {
    thisp = thisp || this;
    for (let walker = this[LRU_LIST].tail; walker !== null;) {
      const prev = walker.prev;
      forEachStep(this, fn, walker, thisp);
      walker = prev;
    }
  }

  forEach (fn, thisp) {
    thisp = thisp || this;
    for (let walker = this[LRU_LIST].head; walker !== null;) {
      const next = walker.next;
      forEachStep(this, fn, walker, thisp);
      walker = next;
    }
  }

  keys () {
    return this[LRU_LIST].toArray().map(k => k.key)
  }

  values () {
    return this[LRU_LIST].toArray().map(k => k.value)
  }

  reset () {
    if (this[DISPOSE] &&
        this[LRU_LIST] &&
        this[LRU_LIST].length) {
      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));
    }

    this[CACHE] = new Map(); // hash of items by key
    this[LRU_LIST] = new Yallist(); // list of items in order of use recency
    this[LENGTH] = 0; // length of items in the list
  }

  dump () {
    return this[LRU_LIST].map(hit =>
      isStale(this, hit) ? false : {
        k: hit.key,
        v: hit.value,
        e: hit.now + (hit.maxAge || 0)
      }).toArray().filter(h => h)
  }

  dumpLru () {
    return this[LRU_LIST]
  }

  set (key, value, maxAge) {
    maxAge = maxAge || this[MAX_AGE];

    if (maxAge && typeof maxAge !== 'number')
      throw new TypeError('maxAge must be a number')

    const now = maxAge ? Date.now() : 0;
    const len = this[LENGTH_CALCULATOR](value, key);

    if (this[CACHE].has(key)) {
      if (len > this[MAX]) {
        del(this, this[CACHE].get(key));
        return false
      }

      const node = this[CACHE].get(key);
      const item = node.value;

      // dispose of the old one before overwriting
      // split out into 2 ifs for better coverage tracking
      if (this[DISPOSE]) {
        if (!this[NO_DISPOSE_ON_SET])
          this[DISPOSE](key, item.value);
      }

      item.now = now;
      item.maxAge = maxAge;
      item.value = value;
      this[LENGTH] += len - item.length;
      item.length = len;
      this.get(key);
      trim(this);
      return true
    }

    const hit = new Entry(key, value, len, now, maxAge);

    // oversized objects fall out of cache automatically.
    if (hit.length > this[MAX]) {
      if (this[DISPOSE])
        this[DISPOSE](key, value);

      return false
    }

    this[LENGTH] += hit.length;
    this[LRU_LIST].unshift(hit);
    this[CACHE].set(key, this[LRU_LIST].head);
    trim(this);
    return true
  }

  has (key) {
    if (!this[CACHE].has(key)) return false
    const hit = this[CACHE].get(key).value;
    return !isStale(this, hit)
  }

  get (key) {
    return get(this, key, true)
  }

  peek (key) {
    return get(this, key, false)
  }

  pop () {
    const node = this[LRU_LIST].tail;
    if (!node)
      return null

    del(this, node);
    return node.value
  }

  del (key) {
    del(this, this[CACHE].get(key));
  }

  load (arr) {
    // reset the cache
    this.reset();

    const now = Date.now();
    // A previous serialized cache has the most recent items first
    for (let l = arr.length - 1; l >= 0; l--) {
      const hit = arr[l];
      const expiresAt = hit.e || 0;
      if (expiresAt === 0)
        // the item was created without expiration in a non aged cache
        this.set(hit.k, hit.v);
      else {
        const maxAge = expiresAt - now;
        // dont add already expired items
        if (maxAge > 0) {
          this.set(hit.k, hit.v, maxAge);
        }
      }
    }
  }

  prune () {
    this[CACHE].forEach((value, key) => get(this, key, false));
  }
}

const get = (self, key, doUse) => {
  const node = self[CACHE].get(key);
  if (node) {
    const hit = node.value;
    if (isStale(self, hit)) {
      del(self, node);
      if (!self[ALLOW_STALE])
        return undefined
    } else {
      if (doUse) {
        if (self[UPDATE_AGE_ON_GET])
          node.value.now = Date.now();
        self[LRU_LIST].unshiftNode(node);
      }
    }
    return hit.value
  }
};

const isStale = (self, hit) => {
  if (!hit || (!hit.maxAge && !self[MAX_AGE]))
    return false

  const diff = Date.now() - hit.now;
  return hit.maxAge ? diff > hit.maxAge
    : self[MAX_AGE] && (diff > self[MAX_AGE])
};

const trim = self => {
  if (self[LENGTH] > self[MAX]) {
    for (let walker = self[LRU_LIST].tail;
      self[LENGTH] > self[MAX] && walker !== null;) {
      // We know that we're about to delete this one, and also
      // what the next least recently used key will be, so just
      // go ahead and set it now.
      const prev = walker.prev;
      del(self, walker);
      walker = prev;
    }
  }
};

const del = (self, node) => {
  if (node) {
    const hit = node.value;
    if (self[DISPOSE])
      self[DISPOSE](hit.key, hit.value);

    self[LENGTH] -= hit.length;
    self[CACHE].delete(hit.key);
    self[LRU_LIST].removeNode(node);
  }
};

class Entry {
  constructor (key, value, length, now, maxAge) {
    this.key = key;
    this.value = value;
    this.length = length;
    this.now = now;
    this.maxAge = maxAge || 0;
  }
}

const forEachStep = (self, fn, node, thisp) => {
  let hit = node.value;
  if (isStale(self, hit)) {
    del(self, node);
    if (!self[ALLOW_STALE])
      hit = undefined;
  }
  if (hit)
    fn.call(thisp, hit.value, hit.key, self);
};

var lruCache = LRUCache;

var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
function encode(decoded) {
    var sourceFileIndex = 0; // second field
    var sourceCodeLine = 0; // third field
    var sourceCodeColumn = 0; // fourth field
    var nameIndex = 0; // fifth field
    var mappings = '';
    for (var i = 0; i < decoded.length; i++) {
        var line = decoded[i];
        if (i > 0)
            mappings += ';';
        if (line.length === 0)
            continue;
        var generatedCodeColumn = 0; // first field
        var lineMappings = [];
        for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {
            var segment = line_1[_i];
            var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);
            generatedCodeColumn = segment[0];
            if (segment.length > 1) {
                segmentMappings +=
                    encodeInteger(segment[1] - sourceFileIndex) +
                        encodeInteger(segment[2] - sourceCodeLine) +
                        encodeInteger(segment[3] - sourceCodeColumn);
                sourceFileIndex = segment[1];
                sourceCodeLine = segment[2];
                sourceCodeColumn = segment[3];
            }
            if (segment.length === 5) {
                segmentMappings += encodeInteger(segment[4] - nameIndex);
                nameIndex = segment[4];
            }
            lineMappings.push(segmentMappings);
        }
        mappings += lineMappings.join(',');
    }
    return mappings;
}
function encodeInteger(num) {
    var result = '';
    num = num < 0 ? (-num << 1) | 1 : num << 1;
    do {
        var clamped = num & 31;
        num >>>= 5;
        if (num > 0) {
            clamped |= 32;
        }
        result += chars[clamped];
    } while (num > 0);
    return result;
}

var BitSet = function BitSet(arg) {
	this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
};

BitSet.prototype.add = function add (n) {
	this.bits[n >> 5] |= 1 << (n & 31);
};

BitSet.prototype.has = function has (n) {
	return !!(this.bits[n >> 5] & (1 << (n & 31)));
};

var Chunk = function Chunk(start, end, content) {
	this.start = start;
	this.end = end;
	this.original = content;

	this.intro = '';
	this.outro = '';

	this.content = content;
	this.storeName = false;
	this.edited = false;

	// we make these non-enumerable, for sanity while debugging
	Object.defineProperties(this, {
		previous: { writable: true, value: null },
		next: { writable: true, value: null },
	});
};

Chunk.prototype.appendLeft = function appendLeft (content) {
	this.outro += content;
};

Chunk.prototype.appendRight = function appendRight (content) {
	this.intro = this.intro + content;
};

Chunk.prototype.clone = function clone () {
	var chunk = new Chunk(this.start, this.end, this.original);

	chunk.intro = this.intro;
	chunk.outro = this.outro;
	chunk.content = this.content;
	chunk.storeName = this.storeName;
	chunk.edited = this.edited;

	return chunk;
};

Chunk.prototype.contains = function contains (index) {
	return this.start < index && index < this.end;
};

Chunk.prototype.eachNext = function eachNext (fn) {
	var chunk = this;
	while (chunk) {
		fn(chunk);
		chunk = chunk.next;
	}
};

Chunk.prototype.eachPrevious = function eachPrevious (fn) {
	var chunk = this;
	while (chunk) {
		fn(chunk);
		chunk = chunk.previous;
	}
};

Chunk.prototype.edit = function edit (content, storeName, contentOnly) {
	this.content = content;
	if (!contentOnly) {
		this.intro = '';
		this.outro = '';
	}
	this.storeName = storeName;

	this.edited = true;

	return this;
};

Chunk.prototype.prependLeft = function prependLeft (content) {
	this.outro = content + this.outro;
};

Chunk.prototype.prependRight = function prependRight (content) {
	this.intro = content + this.intro;
};

Chunk.prototype.split = function split (index) {
	var sliceIndex = index - this.start;

	var originalBefore = this.original.slice(0, sliceIndex);
	var originalAfter = this.original.slice(sliceIndex);

	this.original = originalBefore;

	var newChunk = new Chunk(index, this.end, originalAfter);
	newChunk.outro = this.outro;
	this.outro = '';

	this.end = index;

	if (this.edited) {
		// TODO is this block necessary?...
		newChunk.edit('', false);
		this.content = '';
	} else {
		this.content = originalBefore;
	}

	newChunk.next = this.next;
	if (newChunk.next) { newChunk.next.previous = newChunk; }
	newChunk.previous = this;
	this.next = newChunk;

	return newChunk;
};

Chunk.prototype.toString = function toString () {
	return this.intro + this.content + this.outro;
};

Chunk.prototype.trimEnd = function trimEnd (rx) {
	this.outro = this.outro.replace(rx, '');
	if (this.outro.length) { return true; }

	var trimmed = this.content.replace(rx, '');

	if (trimmed.length) {
		if (trimmed !== this.content) {
			this.split(this.start + trimmed.length).edit('', undefined, true);
		}
		return true;
	} else {
		this.edit('', undefined, true);

		this.intro = this.intro.replace(rx, '');
		if (this.intro.length) { return true; }
	}
};

Chunk.prototype.trimStart = function trimStart (rx) {
	this.intro = this.intro.replace(rx, '');
	if (this.intro.length) { return true; }

	var trimmed = this.content.replace(rx, '');

	if (trimmed.length) {
		if (trimmed !== this.content) {
			this.split(this.end - trimmed.length);
			this.edit('', undefined, true);
		}
		return true;
	} else {
		this.edit('', undefined, true);

		this.outro = this.outro.replace(rx, '');
		if (this.outro.length) { return true; }
	}
};

var btoa = function () {
	throw new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');
};
if (typeof window !== 'undefined' && typeof window.btoa === 'function') {
	btoa = function (str) { return window.btoa(unescape(encodeURIComponent(str))); };
} else if (typeof Buffer === 'function') {
	btoa = function (str) { return Buffer.from(str, 'utf-8').toString('base64'); };
}

var SourceMap = function SourceMap(properties) {
	this.version = 3;
	this.file = properties.file;
	this.sources = properties.sources;
	this.sourcesContent = properties.sourcesContent;
	this.names = properties.names;
	this.mappings = encode(properties.mappings);
};

SourceMap.prototype.toString = function toString () {
	return JSON.stringify(this);
};

SourceMap.prototype.toUrl = function toUrl () {
	return 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());
};

function guessIndent(code) {
	var lines = code.split('\n');

	var tabbed = lines.filter(function (line) { return /^\t+/.test(line); });
	var spaced = lines.filter(function (line) { return /^ {2,}/.test(line); });

	if (tabbed.length === 0 && spaced.length === 0) {
		return null;
	}

	// More lines tabbed than spaced? Assume tabs, and
	// default to tabs in the case of a tie (or nothing
	// to go on)
	if (tabbed.length >= spaced.length) {
		return '\t';
	}

	// Otherwise, we need to guess the multiple
	var min = spaced.reduce(function (previous, current) {
		var numSpaces = /^ +/.exec(current)[0].length;
		return Math.min(numSpaces, previous);
	}, Infinity);

	return new Array(min + 1).join(' ');
}

function getRelativePath(from, to) {
	var fromParts = from.split(/[/\\]/);
	var toParts = to.split(/[/\\]/);

	fromParts.pop(); // get dirname

	while (fromParts[0] === toParts[0]) {
		fromParts.shift();
		toParts.shift();
	}

	if (fromParts.length) {
		var i = fromParts.length;
		while (i--) { fromParts[i] = '..'; }
	}

	return fromParts.concat(toParts).join('/');
}

var toString = Object.prototype.toString;

function isObject(thing) {
	return toString.call(thing) === '[object Object]';
}

function getLocator(source) {
	var originalLines = source.split('\n');
	var lineOffsets = [];

	for (var i = 0, pos = 0; i < originalLines.length; i++) {
		lineOffsets.push(pos);
		pos += originalLines[i].length + 1;
	}

	return function locate(index) {
		var i = 0;
		var j = lineOffsets.length;
		while (i < j) {
			var m = (i + j) >> 1;
			if (index < lineOffsets[m]) {
				j = m;
			} else {
				i = m + 1;
			}
		}
		var line = i - 1;
		var column = index - lineOffsets[line];
		return { line: line, column: column };
	};
}

var Mappings = function Mappings(hires) {
	this.hires = hires;
	this.generatedCodeLine = 0;
	this.generatedCodeColumn = 0;
	this.raw = [];
	this.rawSegments = this.raw[this.generatedCodeLine] = [];
	this.pending = null;
};

Mappings.prototype.addEdit = function addEdit (sourceIndex, content, loc, nameIndex) {
	if (content.length) {
		var segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
		if (nameIndex >= 0) {
			segment.push(nameIndex);
		}
		this.rawSegments.push(segment);
	} else if (this.pending) {
		this.rawSegments.push(this.pending);
	}

	this.advance(content);
	this.pending = null;
};

Mappings.prototype.addUneditedChunk = function addUneditedChunk (sourceIndex, chunk, original, loc, sourcemapLocations) {
	var originalCharIndex = chunk.start;
	var first = true;

	while (originalCharIndex < chunk.end) {
		if (this.hires || first || sourcemapLocations.has(originalCharIndex)) {
			this.rawSegments.push([this.generatedCodeColumn, sourceIndex, loc.line, loc.column]);
		}

		if (original[originalCharIndex] === '\n') {
			loc.line += 1;
			loc.column = 0;
			this.generatedCodeLine += 1;
			this.raw[this.generatedCodeLine] = this.rawSegments = [];
			this.generatedCodeColumn = 0;
			first = true;
		} else {
			loc.column += 1;
			this.generatedCodeColumn += 1;
			first = false;
		}

		originalCharIndex += 1;
	}

	this.pending = null;
};

Mappings.prototype.advance = function advance (str) {
	if (!str) { return; }

	var lines = str.split('\n');

	if (lines.length > 1) {
		for (var i = 0; i < lines.length - 1; i++) {
			this.generatedCodeLine++;
			this.raw[this.generatedCodeLine] = this.rawSegments = [];
		}
		this.generatedCodeColumn = 0;
	}

	this.generatedCodeColumn += lines[lines.length - 1].length;
};

var n = '\n';

var warned = {
	insertLeft: false,
	insertRight: false,
	storeName: false,
};

var MagicString = function MagicString(string, options) {
	if ( options === void 0 ) options = {};

	var chunk = new Chunk(0, string.length, string);

	Object.defineProperties(this, {
		original: { writable: true, value: string },
		outro: { writable: true, value: '' },
		intro: { writable: true, value: '' },
		firstChunk: { writable: true, value: chunk },
		lastChunk: { writable: true, value: chunk },
		lastSearchedChunk: { writable: true, value: chunk },
		byStart: { writable: true, value: {} },
		byEnd: { writable: true, value: {} },
		filename: { writable: true, value: options.filename },
		indentExclusionRanges: { writable: true, value: options.indentExclusionRanges },
		sourcemapLocations: { writable: true, value: new BitSet() },
		storedNames: { writable: true, value: {} },
		indentStr: { writable: true, value: guessIndent(string) },
	});

	this.byStart[0] = chunk;
	this.byEnd[string.length] = chunk;
};

MagicString.prototype.addSourcemapLocation = function addSourcemapLocation (char) {
	this.sourcemapLocations.add(char);
};

MagicString.prototype.append = function append (content) {
	if (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }

	this.outro += content;
	return this;
};

MagicString.prototype.appendLeft = function appendLeft (index, content) {
	if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }

	this._split(index);

	var chunk = this.byEnd[index];

	if (chunk) {
		chunk.appendLeft(content);
	} else {
		this.intro += content;
	}
	return this;
};

MagicString.prototype.appendRight = function appendRight (index, content) {
	if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }

	this._split(index);

	var chunk = this.byStart[index];

	if (chunk) {
		chunk.appendRight(content);
	} else {
		this.outro += content;
	}
	return this;
};

MagicString.prototype.clone = function clone () {
	var cloned = new MagicString(this.original, { filename: this.filename });

	var originalChunk = this.firstChunk;
	var clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());

	while (originalChunk) {
		cloned.byStart[clonedChunk.start] = clonedChunk;
		cloned.byEnd[clonedChunk.end] = clonedChunk;

		var nextOriginalChunk = originalChunk.next;
		var nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();

		if (nextClonedChunk) {
			clonedChunk.next = nextClonedChunk;
			nextClonedChunk.previous = clonedChunk;

			clonedChunk = nextClonedChunk;
		}

		originalChunk = nextOriginalChunk;
	}

	cloned.lastChunk = clonedChunk;

	if (this.indentExclusionRanges) {
		cloned.indentExclusionRanges = this.indentExclusionRanges.slice();
	}

	cloned.sourcemapLocations = new BitSet(this.sourcemapLocations);

	cloned.intro = this.intro;
	cloned.outro = this.outro;

	return cloned;
};

MagicString.prototype.generateDecodedMap = function generateDecodedMap (options) {
		var this$1$1 = this;

	options = options || {};

	var sourceIndex = 0;
	var names = Object.keys(this.storedNames);
	var mappings = new Mappings(options.hires);

	var locate = getLocator(this.original);

	if (this.intro) {
		mappings.advance(this.intro);
	}

	this.firstChunk.eachNext(function (chunk) {
		var loc = locate(chunk.start);

		if (chunk.intro.length) { mappings.advance(chunk.intro); }

		if (chunk.edited) {
			mappings.addEdit(
				sourceIndex,
				chunk.content,
				loc,
				chunk.storeName ? names.indexOf(chunk.original) : -1
			);
		} else {
			mappings.addUneditedChunk(sourceIndex, chunk, this$1$1.original, loc, this$1$1.sourcemapLocations);
		}

		if (chunk.outro.length) { mappings.advance(chunk.outro); }
	});

	return {
		file: options.file ? options.file.split(/[/\\]/).pop() : null,
		sources: [options.source ? getRelativePath(options.file || '', options.source) : null],
		sourcesContent: options.includeContent ? [this.original] : [null],
		names: names,
		mappings: mappings.raw,
	};
};

MagicString.prototype.generateMap = function generateMap (options) {
	return new SourceMap(this.generateDecodedMap(options));
};

MagicString.prototype.getIndentString = function getIndentString () {
	return this.indentStr === null ? '\t' : this.indentStr;
};

MagicString.prototype.indent = function indent (indentStr, options) {
	var pattern = /^[^\r\n]/gm;

	if (isObject(indentStr)) {
		options = indentStr;
		indentStr = undefined;
	}

	indentStr = indentStr !== undefined ? indentStr : this.indentStr || '\t';

	if (indentStr === '') { return this; } // noop

	options = options || {};

	// Process exclusion ranges
	var isExcluded = {};

	if (options.exclude) {
		var exclusions =
			typeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;
		exclusions.forEach(function (exclusion) {
			for (var i = exclusion[0]; i < exclusion[1]; i += 1) {
				isExcluded[i] = true;
			}
		});
	}

	var shouldIndentNextCharacter = options.indentStart !== false;
	var replacer = function (match) {
		if (shouldIndentNextCharacter) { return ("" + indentStr + match); }
		shouldIndentNextCharacter = true;
		return match;
	};

	this.intro = this.intro.replace(pattern, replacer);

	var charIndex = 0;
	var chunk = this.firstChunk;

	while (chunk) {
		var end = chunk.end;

		if (chunk.edited) {
			if (!isExcluded[charIndex]) {
				chunk.content = chunk.content.replace(pattern, replacer);

				if (chunk.content.length) {
					shouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\n';
				}
			}
		} else {
			charIndex = chunk.start;

			while (charIndex < end) {
				if (!isExcluded[charIndex]) {
					var char = this.original[charIndex];

					if (char === '\n') {
						shouldIndentNextCharacter = true;
					} else if (char !== '\r' && shouldIndentNextCharacter) {
						shouldIndentNextCharacter = false;

						if (charIndex === chunk.start) {
							chunk.prependRight(indentStr);
						} else {
							this._splitChunk(chunk, charIndex);
							chunk = chunk.next;
							chunk.prependRight(indentStr);
						}
					}
				}

				charIndex += 1;
			}
		}

		charIndex = chunk.end;
		chunk = chunk.next;
	}

	this.outro = this.outro.replace(pattern, replacer);

	return this;
};

MagicString.prototype.insert = function insert () {
	throw new Error(
		'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)'
	);
};

MagicString.prototype.insertLeft = function insertLeft (index, content) {
	if (!warned.insertLeft) {
		console.warn(
			'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead'
		); // eslint-disable-line no-console
		warned.insertLeft = true;
	}

	return this.appendLeft(index, content);
};

MagicString.prototype.insertRight = function insertRight (index, content) {
	if (!warned.insertRight) {
		console.warn(
			'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead'
		); // eslint-disable-line no-console
		warned.insertRight = true;
	}

	return this.prependRight(index, content);
};

MagicString.prototype.move = function move (start, end, index) {
	if (index >= start && index <= end) { throw new Error('Cannot move a selection inside itself'); }

	this._split(start);
	this._split(end);
	this._split(index);

	var first = this.byStart[start];
	var last = this.byEnd[end];

	var oldLeft = first.previous;
	var oldRight = last.next;

	var newRight = this.byStart[index];
	if (!newRight && last === this.lastChunk) { return this; }
	var newLeft = newRight ? newRight.previous : this.lastChunk;

	if (oldLeft) { oldLeft.next = oldRight; }
	if (oldRight) { oldRight.previous = oldLeft; }

	if (newLeft) { newLeft.next = first; }
	if (newRight) { newRight.previous = last; }

	if (!first.previous) { this.firstChunk = last.next; }
	if (!last.next) {
		this.lastChunk = first.previous;
		this.lastChunk.next = null;
	}

	first.previous = newLeft;
	last.next = newRight || null;

	if (!newLeft) { this.firstChunk = first; }
	if (!newRight) { this.lastChunk = last; }
	return this;
};

MagicString.prototype.overwrite = function overwrite (start, end, content, options) {
	if (typeof content !== 'string') { throw new TypeError('replacement content must be a string'); }

	while (start < 0) { start += this.original.length; }
	while (end < 0) { end += this.original.length; }

	if (end > this.original.length) { throw new Error('end is out of bounds'); }
	if (start === end)
		{ throw new Error(
			'Cannot overwrite a zero-length range â€“ use appendLeft or prependRight instead'
		); }

	this._split(start);
	this._split(end);

	if (options === true) {
		if (!warned.storeName) {
			console.warn(
				'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string'
			); // eslint-disable-line no-console
			warned.storeName = true;
		}

		options = { storeName: true };
	}
	var storeName = options !== undefined ? options.storeName : false;
	var contentOnly = options !== undefined ? options.contentOnly : false;

	if (storeName) {
		var original = this.original.slice(start, end);
		Object.defineProperty(this.storedNames, original, { writable: true, value: true, enumerable: true });
	}

	var first = this.byStart[start];
	var last = this.byEnd[end];

	if (first) {
		var chunk = first;
		while (chunk !== last) {
			if (chunk.next !== this.byStart[chunk.end]) {
				throw new Error('Cannot overwrite across a split point');
			}
			chunk = chunk.next;
			chunk.edit('', false);
		}

		first.edit(content, storeName, contentOnly);
	} else {
		// must be inserting at the end
		var newChunk = new Chunk(start, end, '').edit(content, storeName);

		// TODO last chunk in the array may not be the last chunk, if it's moved...
		last.next = newChunk;
		newChunk.previous = last;
	}
	return this;
};

MagicString.prototype.prepend = function prepend (content) {
	if (typeof content !== 'string') { throw new TypeError('outro content must be a string'); }

	this.intro = content + this.intro;
	return this;
};

MagicString.prototype.prependLeft = function prependLeft (index, content) {
	if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }

	this._split(index);

	var chunk = this.byEnd[index];

	if (chunk) {
		chunk.prependLeft(content);
	} else {
		this.intro = content + this.intro;
	}
	return this;
};

MagicString.prototype.prependRight = function prependRight (index, content) {
	if (typeof content !== 'string') { throw new TypeError('inserted content must be a string'); }

	this._split(index);

	var chunk = this.byStart[index];

	if (chunk) {
		chunk.prependRight(content);
	} else {
		this.outro = content + this.outro;
	}
	return this;
};

MagicString.prototype.remove = function remove (start, end) {
	while (start < 0) { start += this.original.length; }
	while (end < 0) { end += this.original.length; }

	if (start === end) { return this; }

	if (start < 0 || end > this.original.length) { throw new Error('Character is out of bounds'); }
	if (start > end) { throw new Error('end must be greater than start'); }

	this._split(start);
	this._split(end);

	var chunk = this.byStart[start];

	while (chunk) {
		chunk.intro = '';
		chunk.outro = '';
		chunk.edit('');

		chunk = end > chunk.end ? this.byStart[chunk.end] : null;
	}
	return this;
};

MagicString.prototype.lastChar = function lastChar () {
	if (this.outro.length) { return this.outro[this.outro.length - 1]; }
	var chunk = this.lastChunk;
	do {
		if (chunk.outro.length) { return chunk.outro[chunk.outro.length - 1]; }
		if (chunk.content.length) { return chunk.content[chunk.content.length - 1]; }
		if (chunk.intro.length) { return chunk.intro[chunk.intro.length - 1]; }
	} while ((chunk = chunk.previous));
	if (this.intro.length) { return this.intro[this.intro.length - 1]; }
	return '';
};

MagicString.prototype.lastLine = function lastLine () {
	var lineIndex = this.outro.lastIndexOf(n);
	if (lineIndex !== -1) { return this.outro.substr(lineIndex + 1); }
	var lineStr = this.outro;
	var chunk = this.lastChunk;
	do {
		if (chunk.outro.length > 0) {
			lineIndex = chunk.outro.lastIndexOf(n);
			if (lineIndex !== -1) { return chunk.outro.substr(lineIndex + 1) + lineStr; }
			lineStr = chunk.outro + lineStr;
		}

		if (chunk.content.length > 0) {
			lineIndex = chunk.content.lastIndexOf(n);
			if (lineIndex !== -1) { return chunk.content.substr(lineIndex + 1) + lineStr; }
			lineStr = chunk.content + lineStr;
		}

		if (chunk.intro.length > 0) {
			lineIndex = chunk.intro.lastIndexOf(n);
			if (lineIndex !== -1) { return chunk.intro.substr(lineIndex + 1) + lineStr; }
			lineStr = chunk.intro + lineStr;
		}
	} while ((chunk = chunk.previous));
	lineIndex = this.intro.lastIndexOf(n);
	if (lineIndex !== -1) { return this.intro.substr(lineIndex + 1) + lineStr; }
	return this.intro + lineStr;
};

MagicString.prototype.slice = function slice (start, end) {
		if ( start === void 0 ) start = 0;
		if ( end === void 0 ) end = this.original.length;

	while (start < 0) { start += this.original.length; }
	while (end < 0) { end += this.original.length; }

	var result = '';

	// find start chunk
	var chunk = this.firstChunk;
	while (chunk && (chunk.start > start || chunk.end <= start)) {
		// found end chunk before start
		if (chunk.start < end && chunk.end >= end) {
			return result;
		}

		chunk = chunk.next;
	}

	if (chunk && chunk.edited && chunk.start !== start)
		{ throw new Error(("Cannot use replaced character " + start + " as slice start anchor.")); }

	var startChunk = chunk;
	while (chunk) {
		if (chunk.intro && (startChunk !== chunk || chunk.start === start)) {
			result += chunk.intro;
		}

		var containsEnd = chunk.start < end && chunk.end >= end;
		if (containsEnd && chunk.edited && chunk.end !== end)
			{ throw new Error(("Cannot use replaced character " + end + " as slice end anchor.")); }

		var sliceStart = startChunk === chunk ? start - chunk.start : 0;
		var sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;

		result += chunk.content.slice(sliceStart, sliceEnd);

		if (chunk.outro && (!containsEnd || chunk.end === end)) {
			result += chunk.outro;
		}

		if (containsEnd) {
			break;
		}

		chunk = chunk.next;
	}

	return result;
};

// TODO deprecate this? not really very useful
MagicString.prototype.snip = function snip (start, end) {
	var clone = this.clone();
	clone.remove(0, start);
	clone.remove(end, clone.original.length);

	return clone;
};

MagicString.prototype._split = function _split (index) {
	if (this.byStart[index] || this.byEnd[index]) { return; }

	var chunk = this.lastSearchedChunk;
	var searchForward = index > chunk.end;

	while (chunk) {
		if (chunk.contains(index)) { return this._splitChunk(chunk, index); }

		chunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];
	}
};

MagicString.prototype._splitChunk = function _splitChunk (chunk, index) {
	if (chunk.edited && chunk.content.length) {
		// zero-length edited chunks are a special case (overlapping replacements)
		var loc = getLocator(this.original)(index);
		throw new Error(
			("Cannot split a chunk that has already been edited (" + (loc.line) + ":" + (loc.column) + " â€“ \"" + (chunk.original) + "\")")
		);
	}

	var newChunk = chunk.split(index);

	this.byEnd[index] = chunk;
	this.byStart[index] = newChunk;
	this.byEnd[newChunk.end] = newChunk;

	if (chunk === this.lastChunk) { this.lastChunk = newChunk; }

	this.lastSearchedChunk = chunk;
	return true;
};

MagicString.prototype.toString = function toString () {
	var str = this.intro;

	var chunk = this.firstChunk;
	while (chunk) {
		str += chunk.toString();
		chunk = chunk.next;
	}

	return str + this.outro;
};

MagicString.prototype.isEmpty = function isEmpty () {
	var chunk = this.firstChunk;
	do {
		if (
			(chunk.intro.length && chunk.intro.trim()) ||
			(chunk.content.length && chunk.content.trim()) ||
			(chunk.outro.length && chunk.outro.trim())
		)
			{ return false; }
	} while ((chunk = chunk.next));
	return true;
};

MagicString.prototype.length = function length () {
	var chunk = this.firstChunk;
	var length = 0;
	do {
		length += chunk.intro.length + chunk.content.length + chunk.outro.length;
	} while ((chunk = chunk.next));
	return length;
};

MagicString.prototype.trimLines = function trimLines () {
	return this.trim('[\\r\\n]');
};

MagicString.prototype.trim = function trim (charType) {
	return this.trimStart(charType).trimEnd(charType);
};

MagicString.prototype.trimEndAborted = function trimEndAborted (charType) {
	var rx = new RegExp((charType || '\\s') + '+$');

	this.outro = this.outro.replace(rx, '');
	if (this.outro.length) { return true; }

	var chunk = this.lastChunk;

	do {
		var end = chunk.end;
		var aborted = chunk.trimEnd(rx);

		// if chunk was trimmed, we have a new lastChunk
		if (chunk.end !== end) {
			if (this.lastChunk === chunk) {
				this.lastChunk = chunk.next;
			}

			this.byEnd[chunk.end] = chunk;
			this.byStart[chunk.next.start] = chunk.next;
			this.byEnd[chunk.next.end] = chunk.next;
		}

		if (aborted) { return true; }
		chunk = chunk.previous;
	} while (chunk);

	return false;
};

MagicString.prototype.trimEnd = function trimEnd (charType) {
	this.trimEndAborted(charType);
	return this;
};
MagicString.prototype.trimStartAborted = function trimStartAborted (charType) {
	var rx = new RegExp('^' + (charType || '\\s') + '+');

	this.intro = this.intro.replace(rx, '');
	if (this.intro.length) { return true; }

	var chunk = this.firstChunk;

	do {
		var end = chunk.end;
		var aborted = chunk.trimStart(rx);

		if (chunk.end !== end) {
			// special case...
			if (chunk === this.lastChunk) { this.lastChunk = chunk.next; }

			this.byEnd[chunk.end] = chunk;
			this.byStart[chunk.next.start] = chunk.next;
			this.byEnd[chunk.next.end] = chunk.next;
		}

		if (aborted) { return true; }
		chunk = chunk.next;
	} while (chunk);

	return false;
};

MagicString.prototype.trimStart = function trimStart (charType) {
	this.trimStartAborted(charType);
	return this;
};

// @ts-check
/** @typedef { import('estree').BaseNode} BaseNode */

/** @typedef {{
	skip: () => void;
	remove: () => void;
	replace: (node: BaseNode) => void;
}} WalkerContext */

class WalkerBase {
	constructor() {
		/** @type {boolean} */
		this.should_skip = false;

		/** @type {boolean} */
		this.should_remove = false;

		/** @type {BaseNode | null} */
		this.replacement = null;

		/** @type {WalkerContext} */
		this.context = {
			skip: () => (this.should_skip = true),
			remove: () => (this.should_remove = true),
			replace: (node) => (this.replacement = node)
		};
	}

	/**
	 *
	 * @param {any} parent
	 * @param {string} prop
	 * @param {number} index
	 * @param {BaseNode} node
	 */
	replace(parent, prop, index, node) {
		if (parent) {
			if (index !== null) {
				parent[prop][index] = node;
			} else {
				parent[prop] = node;
			}
		}
	}

	/**
	 *
	 * @param {any} parent
	 * @param {string} prop
	 * @param {number} index
	 */
	remove(parent, prop, index) {
		if (parent) {
			if (index !== null) {
				parent[prop].splice(index, 1);
			} else {
				delete parent[prop];
			}
		}
	}
}

// @ts-check

/** @typedef { import('estree').BaseNode} BaseNode */
/** @typedef { import('./walker.js').WalkerContext} WalkerContext */

/** @typedef {(
 *    this: WalkerContext,
 *    node: BaseNode,
 *    parent: BaseNode,
 *    key: string,
 *    index: number
 * ) => void} SyncHandler */

class SyncWalker extends WalkerBase {
	/**
	 *
	 * @param {SyncHandler} enter
	 * @param {SyncHandler} leave
	 */
	constructor(enter, leave) {
		super();

		/** @type {SyncHandler} */
		this.enter = enter;

		/** @type {SyncHandler} */
		this.leave = leave;
	}

	/**
	 *
	 * @param {BaseNode} node
	 * @param {BaseNode} parent
	 * @param {string} [prop]
	 * @param {number} [index]
	 * @returns {BaseNode}
	 */
	visit(node, parent, prop, index) {
		if (node) {
			if (this.enter) {
				const _should_skip = this.should_skip;
				const _should_remove = this.should_remove;
				const _replacement = this.replacement;
				this.should_skip = false;
				this.should_remove = false;
				this.replacement = null;

				this.enter.call(this.context, node, parent, prop, index);

				if (this.replacement) {
					node = this.replacement;
					this.replace(parent, prop, index, node);
				}

				if (this.should_remove) {
					this.remove(parent, prop, index);
				}

				const skipped = this.should_skip;
				const removed = this.should_remove;

				this.should_skip = _should_skip;
				this.should_remove = _should_remove;
				this.replacement = _replacement;

				if (skipped) return node;
				if (removed) return null;
			}

			for (const key in node) {
				const value = node[key];

				if (typeof value !== "object") {
					continue;
				} else if (Array.isArray(value)) {
					for (let i = 0; i < value.length; i += 1) {
						if (value[i] !== null && typeof value[i].type === 'string') {
							if (!this.visit(value[i], node, key, i)) {
								// removed
								i--;
							}
						}
					}
				} else if (value !== null && typeof value.type === "string") {
					this.visit(value, node, key, null);
				}
			}

			if (this.leave) {
				const _replacement = this.replacement;
				const _should_remove = this.should_remove;
				this.replacement = null;
				this.should_remove = false;

				this.leave.call(this.context, node, parent, prop, index);

				if (this.replacement) {
					node = this.replacement;
					this.replace(parent, prop, index, node);
				}

				if (this.should_remove) {
					this.remove(parent, prop, index);
				}

				const removed = this.should_remove;

				this.replacement = _replacement;
				this.should_remove = _should_remove;

				if (removed) return null;
			}
		}

		return node;
	}
}

// @ts-check

/** @typedef { import('estree').BaseNode} BaseNode */
/** @typedef { import('./sync.js').SyncHandler} SyncHandler */
/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */

/**
 *
 * @param {BaseNode} ast
 * @param {{
 *   enter?: SyncHandler
 *   leave?: SyncHandler
 * }} walker
 * @returns {BaseNode}
 */
function walk$1(ast, { enter, leave }) {
	const instance = new SyncWalker(enter, leave);
	return instance.visit(ast, null);
}

// https://github.com/vuejs/core/blob/main/packages/compiler-core/src/babelUtils.ts
function walkIdentifiers(root, onIdentifier, onNode) {
    const parentStack = [];
    const knownIds = Object.create(null);
    const rootExp = root.type === 'Program' &&
        root.body[0].type === 'ExpressionStatement' &&
        root.body[0].expression;
    walk$1(root, {
        enter(node, parent) {
            parent && parentStack.push(parent);
            if (parent &&
                parent.type.startsWith('TS') &&
                parent.type !== 'TSAsExpression' &&
                parent.type !== 'TSNonNullExpression' &&
                parent.type !== 'TSTypeAssertion') {
                return this.skip();
            }
            if (onNode)
                onNode(node);
            if (node.type === 'Identifier') {
                const isLocal = !!knownIds[node.name];
                const isRefed = isReferencedIdentifier(node, parent, parentStack);
                if ((isRefed && !isLocal)) {
                    onIdentifier(node, parent, parentStack, isRefed, isLocal);
                }
            }
            else if (node.type === 'ObjectProperty' &&
                parent.type === 'ObjectPattern') {
                node.inPattern = true;
            }
            else if (isFunctionType(node)) {
                // walk function expressions and add its arguments to known identifiers
                // so that we don't prefix them
                walkFunctionParams(node, id => markScopeIdentifier(node, id, knownIds));
            }
            else if (node.type === 'BlockStatement') {
                // #3445 record block-level local variables
                walkBlockDeclarations(node, id => markScopeIdentifier(node, id, knownIds));
            }
        },
        leave(node, parent) {
            parent && parentStack.pop();
            if (node !== rootExp && node.scopeIds) {
                for (const id of node.scopeIds) {
                    knownIds[id]--;
                    if (knownIds[id] === 0) {
                        delete knownIds[id];
                    }
                }
            }
        }
    });
}
function isReferencedIdentifier(id, parent, parentStack) {
    if (!parent) {
        return true;
    }
    // is a special keyword but parsed as identifier
    if (id.name === 'arguments') {
        return false;
    }
    if (isReferenced(id, parent)) {
        return true;
    }
    // babel's isReferenced check returns false for ids being assigned to, so we
    // need to cover those cases here
    switch (parent.type) {
        case 'AssignmentExpression':
        case 'AssignmentPattern':
            return true;
        case 'ObjectPattern':
        case 'ArrayPattern':
            return isInDestructureAssignment(parent, parentStack);
    }
    return false;
}
function isInDestructureAssignment(parent, parentStack) {
    if (parent &&
        (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')) {
        let i = parentStack.length;
        while (i--) {
            const p = parentStack[i];
            if (p.type === 'AssignmentExpression') {
                return true;
            }
            else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {
                break;
            }
        }
    }
    return false;
}
function walkFunctionParams(node, onIdent) {
    for (const p of node.params) {
        for (const id of extractIdentifiers(p)) {
            onIdent(id);
        }
    }
}
function walkBlockDeclarations(block, onIdent) {
    for (const stmt of block.body) {
        if (stmt.type === 'VariableDeclaration') {
            if (stmt.declare)
                continue;
            for (const decl of stmt.declarations) {
                for (const id of extractIdentifiers(decl.id)) {
                    onIdent(id);
                }
            }
        }
        else if (stmt.type === 'FunctionDeclaration' ||
            stmt.type === 'ClassDeclaration') {
            if (stmt.declare || !stmt.id)
                continue;
            onIdent(stmt.id);
        }
    }
}
function extractIdentifiers(param, nodes = []) {
    switch (param.type) {
        case 'Identifier':
            nodes.push(param);
            break;
        case 'MemberExpression':
            let object = param;
            while (object.type === 'MemberExpression') {
                object = object.object;
            }
            nodes.push(object);
            break;
        case 'ObjectPattern':
            for (const prop of param.properties) {
                if (prop.type === 'RestElement') {
                    extractIdentifiers(prop.argument, nodes);
                }
                else {
                    extractIdentifiers(prop.value, nodes);
                }
            }
            break;
        case 'ArrayPattern':
            param.elements.forEach(element => {
                if (element)
                    extractIdentifiers(element, nodes);
            });
            break;
        case 'RestElement':
            extractIdentifiers(param.argument, nodes);
            break;
        case 'AssignmentPattern':
            extractIdentifiers(param.left, nodes);
            break;
    }
    return nodes;
}
function markScopeIdentifier(node, child, knownIds) {
    const { name } = child;
    if (node.scopeIds && node.scopeIds.has(name)) {
        return;
    }
    if (name in knownIds) {
        knownIds[name]++;
    }
    else {
        knownIds[name] = 1;
    }
    (node.scopeIds || (node.scopeIds = new Set())).add(name);
}
const isFunctionType = (node) => {
    return /Function(?:Expression|Declaration)$|Method$/.test(node.type);
};
const isStaticProperty = (node) => node &&
    (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&
    !node.computed;
/**
 * Copied from https://github.com/babel/babel/blob/main/packages/babel-types/src/validators/isReferenced.ts
 * To avoid runtime dependency on @babel/types (which includes process references)
 * This file should not change very often in babel but we may need to keep it
 * up-to-date from time to time.
 *
 * https://github.com/babel/babel/blob/main/LICENSE
 *
 */
function isReferenced(node, parent, grandparent) {
    switch (parent.type) {
        // yes: PARENT[NODE]
        // yes: NODE.child
        // no: parent.NODE
        case 'MemberExpression':
        case 'OptionalMemberExpression':
            if (parent.property === node) {
                return !!parent.computed;
            }
            return parent.object === node;
        case 'JSXMemberExpression':
            return parent.object === node;
        // no: let NODE = init;
        // yes: let id = NODE;
        case 'VariableDeclarator':
            return parent.init === node;
        // yes: () => NODE
        // no: (NODE) => {}
        case 'ArrowFunctionExpression':
            return parent.body === node;
        // no: class { #NODE; }
        // no: class { get #NODE() {} }
        // no: class { #NODE() {} }
        // no: class { fn() { return this.#NODE; } }
        case 'PrivateName':
            return false;
        // no: class { NODE() {} }
        // yes: class { [NODE]() {} }
        // no: class { foo(NODE) {} }
        case 'ClassMethod':
        case 'ClassPrivateMethod':
        case 'ObjectMethod':
            if (parent.key === node) {
                return !!parent.computed;
            }
            return false;
        // yes: { [NODE]: "" }
        // no: { NODE: "" }
        // depends: { NODE }
        // depends: { key: NODE }
        case 'ObjectProperty':
            if (parent.key === node) {
                return !!parent.computed;
            }
            // parent.value === node
            return !grandparent || grandparent.type !== 'ObjectPattern';
        // no: class { NODE = value; }
        // yes: class { [NODE] = value; }
        // yes: class { key = NODE; }
        case 'ClassProperty':
            if (parent.key === node) {
                return !!parent.computed;
            }
            return true;
        case 'ClassPrivateProperty':
            return parent.key !== node;
        // no: class NODE {}
        // yes: class Foo extends NODE {}
        case 'ClassDeclaration':
        case 'ClassExpression':
            return parent.superClass === node;
        // yes: left = NODE;
        // no: NODE = right;
        case 'AssignmentExpression':
            return parent.right === node;
        // no: [NODE = foo] = [];
        // yes: [foo = NODE] = [];
        case 'AssignmentPattern':
            return parent.right === node;
        // no: NODE: for (;;) {}
        case 'LabeledStatement':
            return false;
        // no: try {} catch (NODE) {}
        case 'CatchClause':
            return false;
        // no: function foo(...NODE) {}
        case 'RestElement':
            return false;
        case 'BreakStatement':
        case 'ContinueStatement':
            return false;
        // no: function NODE() {}
        // no: function foo(NODE) {}
        case 'FunctionDeclaration':
        case 'FunctionExpression':
            return false;
        // no: export NODE from "foo";
        // no: export * as NODE from "foo";
        case 'ExportNamespaceSpecifier':
        case 'ExportDefaultSpecifier':
            return false;
        // no: export { foo as NODE };
        // yes: export { NODE as foo };
        // no: export { NODE as foo } from "foo";
        case 'ExportSpecifier':
            // @ts-expect-error
            if (grandparent === null || grandparent === void 0 ? void 0 : grandparent.source) {
                return false;
            }
            return parent.local === node;
        // no: import NODE from "foo";
        // no: import * as NODE from "foo";
        // no: import { NODE as foo } from "foo";
        // no: import { foo as NODE } from "foo";
        // no: import NODE from "bar";
        case 'ImportDefaultSpecifier':
        case 'ImportNamespaceSpecifier':
        case 'ImportSpecifier':
            return false;
        // no: import "foo" assert { NODE: "json" }
        case 'ImportAttribute':
            return false;
        // no: <div NODE="foo" />
        case 'JSXAttribute':
            return false;
        // no: [NODE] = [];
        // no: ({ NODE }) = [];
        case 'ObjectPattern':
        case 'ArrayPattern':
            return false;
        // no: new.NODE
        // no: NODE.target
        case 'MetaProperty':
            return false;
        // yes: type X = { someProperty: NODE }
        // no: type X = { NODE: OtherType }
        case 'ObjectTypeProperty':
            return parent.key !== node;
        // yes: enum X { Foo = NODE }
        // no: enum X { NODE }
        case 'TSEnumMember':
            return parent.id !== node;
        // yes: { [NODE]: value }
        // no: { NODE: value }
        case 'TSPropertySignature':
            if (parent.key === node) {
                return !!parent.computed;
            }
            return true;
    }
    return true;
}

const range = 2;
function generateCodeFrame(source, start = 0, end = source.length) {
    const lines = source.split(/\r?\n/);
    let count = 0;
    const res = [];
    for (let i = 0; i < lines.length; i++) {
        count += lines[i].length + 1;
        if (count >= start) {
            for (let j = i - range; j <= i + range || end > count; j++) {
                if (j < 0 || j >= lines.length)
                    continue;
                res.push(`${j + 1}${repeat(` `, 3 - String(j + 1).length)}|  ${lines[j]}`);
                const lineLength = lines[j].length;
                if (j === i) {
                    // push underline
                    const pad = start - (count - lineLength) + 1;
                    const length = end > count ? lineLength - pad : end - start;
                    res.push(`   |  ` + repeat(` `, pad) + repeat(`^`, length));
                }
                else if (j > i) {
                    if (end > count) {
                        const length = Math.min(end - count, lineLength);
                        res.push(`   |  ` + repeat(`^`, length));
                    }
                    count += lineLength + 1;
                }
            }
            break;
        }
    }
    return res.join('\n');
}
function repeat(str, n) {
    let result = '';
    if (n > 0) {
        // eslint-disable-next-line no-constant-condition
        while (true) {
            // eslint-disable-line
            if (n & 1)
                result += str;
            n >>>= 1;
            if (n <= 0)
                break;
            str += str;
        }
    }
    return result;
}

// can we use __proto__?
const hasProto = '__proto__' in {};
// Browser environment sniffing
const inBrowser = typeof window !== 'undefined';
const UA = inBrowser && window.navigator.userAgent.toLowerCase();
const isIE = UA && /msie|trident/.test(UA);
UA && UA.indexOf('msie 9.0') > 0;
const isEdge = UA && UA.indexOf('edge/') > 0;
UA && UA.indexOf('android') > 0;
UA && /iphone|ipad|ipod|ios/.test(UA);
UA && /chrome\/\d+/.test(UA) && !isEdge;
UA && /phantomjs/.test(UA);
UA && UA.match(/firefox\/(\d+)/);
// Firefox has a "watch" function on Object.prototype...
// @ts-expect-error firebox support
const nativeWatch = {}.watch;
let supportsPassive = false;
if (inBrowser) {
    try {
        const opts = {};
        Object.defineProperty(opts, 'passive', {
            get() {
                /* istanbul ignore next */
                supportsPassive = true;
            }
        }); // https://github.com/facebook/flow/issues/285
        window.addEventListener('test-passive', null, opts);
    }
    catch (e) { }
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
let _isServer;
const isServerRendering = () => {
    if (_isServer === undefined) {
        /* istanbul ignore if */
        if (!inBrowser && typeof global !== 'undefined') {
            // detect presence of vue-server-renderer and avoid
            // Webpack shimming the process
            _isServer =
                global['process'] && global['process'].env.VUE_ENV === 'server';
        }
        else {
            _isServer = false;
        }
    }
    return _isServer;
};
/* istanbul ignore next */
function isNative(Ctor) {
    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
const hasSymbol = typeof Symbol !== 'undefined' &&
    isNative(Symbol) &&
    typeof Reflect !== 'undefined' &&
    isNative(Reflect.ownKeys);
let _Set; // $flow-disable-line
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
    // use native Set when available.
    _Set = Set;
}
else {
    // a non-standard Set polyfill that only works with primitive keys.
    _Set = class Set {
        constructor() {
            this.set = Object.create(null);
        }
        has(key) {
            return this.set[key] === true;
        }
        add(key) {
            this.set[key] = true;
        }
        clear() {
            this.set = Object.create(null);
        }
    };
}

const ASSET_TYPES = ['component', 'directive', 'filter'];
const LIFECYCLE_HOOKS = [
    'beforeCreate',
    'created',
    'beforeMount',
    'mounted',
    'beforeUpdate',
    'updated',
    'beforeDestroy',
    'destroyed',
    'activated',
    'deactivated',
    'errorCaptured',
    'serverPrefetch',
    'renderTracked',
    'renderTriggered'
];

var config = {
    /**
     * Option merge strategies (used in core/util/options)
     */
    // $flow-disable-line
    optionMergeStrategies: Object.create(null),
    /**
     * Whether to suppress warnings.
     */
    silent: false,
    /**
     * Show production mode tip message on boot?
     */
    productionTip: process.env.NODE_ENV !== 'production',
    /**
     * Whether to enable devtools
     */
    devtools: process.env.NODE_ENV !== 'production',
    /**
     * Whether to record perf
     */
    performance: false,
    /**
     * Error handler for watcher errors
     */
    errorHandler: null,
    /**
     * Warn handler for watcher warns
     */
    warnHandler: null,
    /**
     * Ignore certain custom elements
     */
    ignoredElements: [],
    /**
     * Custom user key aliases for v-on
     */
    // $flow-disable-line
    keyCodes: Object.create(null),
    /**
     * Check if a tag is reserved so that it cannot be registered as a
     * component. This is platform-dependent and may be overwritten.
     */
    isReservedTag: no,
    /**
     * Check if an attribute is reserved so that it cannot be used as a component
     * prop. This is platform-dependent and may be overwritten.
     */
    isReservedAttr: no,
    /**
     * Check if a tag is an unknown element.
     * Platform-dependent.
     */
    isUnknownElement: no,
    /**
     * Get the namespace of an element
     */
    getTagNamespace: noop,
    /**
     * Parse the real tag name for the specific platform.
     */
    parsePlatformTagName: identity,
    /**
     * Check if an attribute must be bound using property, e.g. value
     * Platform-dependent.
     */
    mustUseProp: no,
    /**
     * Perform updates asynchronously. Intended to be used by Vue Test Utils
     * This will significantly reduce performance if set to false.
     */
    async: true,
    /**
     * Exposed for legacy reasons
     */
    _lifecycleHooks: LIFECYCLE_HOOKS
};

let currentInstance = null;
/**
 * @internal
 */
function setCurrentInstance(vm = null) {
    if (!vm)
        currentInstance && currentInstance._scope.off();
    currentInstance = vm;
    vm && vm._scope.on();
}

/**
 * @internal
 */
class VNode {
    constructor(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
        this.tag = tag;
        this.data = data;
        this.children = children;
        this.text = text;
        this.elm = elm;
        this.ns = undefined;
        this.context = context;
        this.fnContext = undefined;
        this.fnOptions = undefined;
        this.fnScopeId = undefined;
        this.key = data && data.key;
        this.componentOptions = componentOptions;
        this.componentInstance = undefined;
        this.parent = undefined;
        this.raw = false;
        this.isStatic = false;
        this.isRootInsert = true;
        this.isComment = false;
        this.isCloned = false;
        this.isOnce = false;
        this.asyncFactory = asyncFactory;
        this.asyncMeta = undefined;
        this.isAsyncPlaceholder = false;
    }
    // DEPRECATED: alias for componentInstance for backwards compat.
    /* istanbul ignore next */
    get child() {
        return this.componentInstance;
    }
}
const createEmptyVNode = (text = '') => {
    const node = new VNode();
    node.text = text;
    node.isComment = true;
    return node;
};
function createTextVNode(val) {
    return new VNode(undefined, undefined, undefined, String(val));
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode(vnode) {
    const cloned = new VNode(vnode.tag, vnode.data, 
    // #7975
    // clone children array to avoid mutating original in case of cloning
    // a child.
    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
    cloned.ns = vnode.ns;
    cloned.isStatic = vnode.isStatic;
    cloned.key = vnode.key;
    cloned.isComment = vnode.isComment;
    cloned.fnContext = vnode.fnContext;
    cloned.fnOptions = vnode.fnOptions;
    cloned.fnScopeId = vnode.fnScopeId;
    cloned.asyncMeta = vnode.asyncMeta;
    cloned.isCloned = true;
    return cloned;
}

/* not type checking this file because flow doesn't play well with Proxy */
if (process.env.NODE_ENV !== 'production') {
    makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
        'require' // for Webpack/Browserify
    );
    const hasProxy = typeof Proxy !== 'undefined' && isNative(Proxy);
    if (hasProxy) {
        const isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
        config.keyCodes = new Proxy(config.keyCodes, {
            set(target, key, value) {
                if (isBuiltInModifier(key)) {
                    warn$3(`Avoid overwriting built-in modifier in config.keyCodes: .${key}`);
                    return false;
                }
                else {
                    target[key] = value;
                    return true;
                }
            }
        });
    }
}

let uid = 0;
/**
 * A dep is an observable that can have multiple
 * directives subscribing to it.
 * @internal
 */
class Dep {
    constructor() {
        // pending subs cleanup
        this._pending = false;
        this.id = uid++;
        this.subs = [];
    }
    addSub(sub) {
        this.subs.push(sub);
    }
    removeSub(sub) {
        // #12696 deps with massive amount of subscribers are extremely slow to
        // clean up in Chromium
        // to workaround this, we unset the sub for now, and clear them on
        // next scheduler flush.
        this.subs[this.subs.indexOf(sub)] = null;
        if (!this._pending) {
            this._pending = true;
        }
    }
    depend(info) {
        if (Dep.target) {
            Dep.target.addDep(this);
            if (process.env.NODE_ENV !== 'production' && info && Dep.target.onTrack) {
                Dep.target.onTrack(Object.assign({ effect: Dep.target }, info));
            }
        }
    }
    notify(info) {
        // stabilize the subscriber list first
        const subs = this.subs.filter(s => s);
        if (process.env.NODE_ENV !== 'production' && !config.async) {
            // subs aren't sorted in scheduler if not running async
            // we need to sort them now to make sure they fire in correct
            // order
            subs.sort((a, b) => a.id - b.id);
        }
        for (let i = 0, l = subs.length; i < l; i++) {
            const sub = subs[i];
            if (process.env.NODE_ENV !== 'production' && info) {
                sub.onTrigger &&
                    sub.onTrigger(Object.assign({ effect: subs[i] }, info));
            }
            sub.update();
        }
    }
}
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null;
const targetStack = [];
function pushTarget(target) {
    targetStack.push(target);
    Dep.target = target;
}
function popTarget() {
    targetStack.pop();
    Dep.target = targetStack[targetStack.length - 1];
}

/*
 * not type checking this file because flow doesn't play well with
 * dynamically accessing methods on Array prototype
 */
const arrayProto = Array.prototype;
const arrayMethods = Object.create(arrayProto);
const methodsToPatch = [
    'push',
    'pop',
    'shift',
    'unshift',
    'splice',
    'sort',
    'reverse'
];
/**
 * Intercept mutating methods and emit events
 */
methodsToPatch.forEach(function (method) {
    // cache original method
    const original = arrayProto[method];
    def(arrayMethods, method, function mutator(...args) {
        const result = original.apply(this, args);
        const ob = this.__ob__;
        let inserted;
        switch (method) {
            case 'push':
            case 'unshift':
                inserted = args;
                break;
            case 'splice':
                inserted = args.slice(2);
                break;
        }
        if (inserted)
            ob.observeArray(inserted);
        // notify change
        if (process.env.NODE_ENV !== 'production') {
            ob.dep.notify({
                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
                target: this,
                key: method
            });
        }
        else {
            ob.dep.notify();
        }
        return result;
    });
});

const arrayKeys = Object.getOwnPropertyNames(arrayMethods);
const NO_INIITIAL_VALUE = {};
/**
 * In some cases we may want to disable observation inside a component's
 * update computation.
 */
let shouldObserve = true;
function toggleObserving(value) {
    shouldObserve = value;
}
// ssr mock dep
const mockDep = {
    notify: noop,
    depend: noop,
    addSub: noop,
    removeSub: noop
};
/**
 * Observer class that is attached to each observed
 * object. Once attached, the observer converts the target
 * object's property keys into getter/setters that
 * collect dependencies and dispatch updates.
 */
class Observer {
    constructor(value, shallow = false, mock = false) {
        this.value = value;
        this.shallow = shallow;
        this.mock = mock;
        // this.value = value
        this.dep = mock ? mockDep : new Dep();
        this.vmCount = 0;
        def(value, '__ob__', this);
        if (isArray(value)) {
            if (!mock) {
                if (hasProto) {
                    value.__proto__ = arrayMethods;
                    /* eslint-enable no-proto */
                }
                else {
                    for (let i = 0, l = arrayKeys.length; i < l; i++) {
                        const key = arrayKeys[i];
                        def(value, key, arrayMethods[key]);
                    }
                }
            }
            if (!shallow) {
                this.observeArray(value);
            }
        }
        else {
            /**
             * Walk through all properties and convert them into
             * getter/setters. This method should only be called when
             * value type is Object.
             */
            const keys = Object.keys(value);
            for (let i = 0; i < keys.length; i++) {
                const key = keys[i];
                defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock);
            }
        }
    }
    /**
     * Observe a list of Array items.
     */
    observeArray(value) {
        for (let i = 0, l = value.length; i < l; i++) {
            observe(value[i], false, this.mock);
        }
    }
}
// helpers
/**
 * Attempt to create an observer instance for a value,
 * returns the new observer if successfully observed,
 * or the existing observer if the value already has one.
 */
function observe(value, shallow, ssrMockReactivity) {
    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
        return value.__ob__;
    }
    if (shouldObserve &&
        (ssrMockReactivity || !isServerRendering()) &&
        (isArray(value) || isPlainObject(value)) &&
        Object.isExtensible(value) &&
        !value.__v_skip /* ReactiveFlags.SKIP */ &&
        !isRef(value) &&
        !(value instanceof VNode)) {
        return new Observer(value, shallow, ssrMockReactivity);
    }
}
/**
 * Define a reactive property on an Object.
 */
function defineReactive(obj, key, val, customSetter, shallow, mock) {
    const dep = new Dep();
    const property = Object.getOwnPropertyDescriptor(obj, key);
    if (property && property.configurable === false) {
        return;
    }
    // cater for pre-defined getter/setters
    const getter = property && property.get;
    const setter = property && property.set;
    if ((!getter || setter) &&
        (val === NO_INIITIAL_VALUE || arguments.length === 2)) {
        val = obj[key];
    }
    let childOb = !shallow && observe(val, false, mock);
    Object.defineProperty(obj, key, {
        enumerable: true,
        configurable: true,
        get: function reactiveGetter() {
            const value = getter ? getter.call(obj) : val;
            if (Dep.target) {
                if (process.env.NODE_ENV !== 'production') {
                    dep.depend({
                        target: obj,
                        type: "get" /* TrackOpTypes.GET */,
                        key
                    });
                }
                else {
                    dep.depend();
                }
                if (childOb) {
                    childOb.dep.depend();
                    if (isArray(value)) {
                        dependArray(value);
                    }
                }
            }
            return isRef(value) && !shallow ? value.value : value;
        },
        set: function reactiveSetter(newVal) {
            const value = getter ? getter.call(obj) : val;
            if (!hasChanged(value, newVal)) {
                return;
            }
            if (process.env.NODE_ENV !== 'production' && customSetter) {
                customSetter();
            }
            if (setter) {
                setter.call(obj, newVal);
            }
            else if (getter) {
                // #7981: for accessor properties without setter
                return;
            }
            else if (!shallow && isRef(value) && !isRef(newVal)) {
                value.value = newVal;
                return;
            }
            else {
                val = newVal;
            }
            childOb = !shallow && observe(newVal, false, mock);
            if (process.env.NODE_ENV !== 'production') {
                dep.notify({
                    type: "set" /* TriggerOpTypes.SET */,
                    target: obj,
                    key,
                    newValue: newVal,
                    oldValue: value
                });
            }
            else {
                dep.notify();
            }
        }
    });
    return dep;
}
function set(target, key, val) {
    if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {
        warn$3(`Cannot set reactive property on undefined, null, or primitive value: ${target}`);
    }
    if (isReadonly(target)) {
        process.env.NODE_ENV !== 'production' && warn$3(`Set operation on key "${key}" failed: target is readonly.`);
        return;
    }
    const ob = target.__ob__;
    if (isArray(target) && isValidArrayIndex(key)) {
        target.length = Math.max(target.length, key);
        target.splice(key, 1, val);
        // when mocking for SSR, array methods are not hijacked
        if (ob && !ob.shallow && ob.mock) {
            observe(val, false, true);
        }
        return val;
    }
    if (key in target && !(key in Object.prototype)) {
        target[key] = val;
        return val;
    }
    if (target._isVue || (ob && ob.vmCount)) {
        process.env.NODE_ENV !== 'production' &&
            warn$3('Avoid adding reactive properties to a Vue instance or its root $data ' +
                'at runtime - declare it upfront in the data option.');
        return val;
    }
    if (!ob) {
        target[key] = val;
        return val;
    }
    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
    if (process.env.NODE_ENV !== 'production') {
        ob.dep.notify({
            type: "add" /* TriggerOpTypes.ADD */,
            target: target,
            key,
            newValue: val,
            oldValue: undefined
        });
    }
    else {
        ob.dep.notify();
    }
    return val;
}
/**
 * Collect dependencies on array elements when the array is touched, since
 * we cannot intercept array element access like property getters.
 */
function dependArray(value) {
    for (let e, i = 0, l = value.length; i < l; i++) {
        e = value[i];
        if (e && e.__ob__) {
            e.__ob__.dep.depend();
        }
        if (isArray(e)) {
            dependArray(e);
        }
    }
}

function isReadonly(value) {
    return !!(value && value.__v_isReadonly);
}

function isRef(r) {
    return !!(r && r.__v_isRef === true);
}

if (process.env.NODE_ENV !== 'production') ;

const normalizeEvent = cached((name) => {
    const passive = name.charAt(0) === '&';
    name = passive ? name.slice(1) : name;
    const once = name.charAt(0) === '~'; // Prefixed last, checked first
    name = once ? name.slice(1) : name;
    const capture = name.charAt(0) === '!';
    name = capture ? name.slice(1) : name;
    return {
        name,
        once,
        capture,
        passive
    };
});
function createFnInvoker(fns, vm) {
    function invoker() {
        const fns = invoker.fns;
        if (isArray(fns)) {
            const cloned = fns.slice();
            for (let i = 0; i < cloned.length; i++) {
                invokeWithErrorHandling(cloned[i], null, arguments, vm, `v-on handler`);
            }
        }
        else {
            // return handler return value for single handlers
            return invokeWithErrorHandling(fns, null, arguments, vm, `v-on handler`);
        }
    }
    invoker.fns = fns;
    return invoker;
}
function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
    let name, cur, old, event;
    for (name in on) {
        cur = on[name];
        old = oldOn[name];
        event = normalizeEvent(name);
        if (isUndef(cur)) {
            process.env.NODE_ENV !== 'production' &&
                warn$3(`Invalid handler for event "${event.name}": got ` + String(cur), vm);
        }
        else if (isUndef(old)) {
            if (isUndef(cur.fns)) {
                cur = on[name] = createFnInvoker(cur, vm);
            }
            if (isTrue(event.once)) {
                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
            }
            add(event.name, cur, event.capture, event.passive, event.params);
        }
        else if (cur !== old) {
            old.fns = cur;
            on[name] = old;
        }
    }
    for (name in oldOn) {
        if (isUndef(on[name])) {
            event = normalizeEvent(name);
            remove(event.name, oldOn[name], event.capture);
        }
    }
}

function extractPropsFromVNodeData(data, Ctor, tag) {
    // we are only extracting raw values here.
    // validation and default values are handled in the child
    // component itself.
    const propOptions = Ctor.options.props;
    if (isUndef(propOptions)) {
        return;
    }
    const res = {};
    const { attrs, props } = data;
    if (isDef(attrs) || isDef(props)) {
        for (const key in propOptions) {
            const altKey = hyphenate(key);
            if (process.env.NODE_ENV !== 'production') {
                const keyInLowerCase = key.toLowerCase();
                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
                    tip(`Prop "${keyInLowerCase}" is passed to component ` +
                        `${formatComponentName(
                        // @ts-expect-error tag is string
                        tag || Ctor)}, but the declared prop name is` +
                        ` "${key}". ` +
                        `Note that HTML attributes are case-insensitive and camelCased ` +
                        `props need to use their kebab-case equivalents when using in-DOM ` +
                        `templates. You should probably use "${altKey}" instead of "${key}".`);
                }
            }
            checkProp(res, props, key, altKey, true) ||
                checkProp(res, attrs, key, altKey, false);
        }
    }
    return res;
}
function checkProp(res, hash, key, altKey, preserve) {
    if (isDef(hash)) {
        if (hasOwn(hash, key)) {
            res[key] = hash[key];
            if (!preserve) {
                delete hash[key];
            }
            return true;
        }
        else if (hasOwn(hash, altKey)) {
            res[key] = hash[altKey];
            if (!preserve) {
                delete hash[altKey];
            }
            return true;
        }
    }
    return false;
}

// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren(children) {
    for (let i = 0; i < children.length; i++) {
        if (isArray(children[i])) {
            return Array.prototype.concat.apply([], children);
        }
    }
    return children;
}
// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren(children) {
    return isPrimitive(children)
        ? [createTextVNode(children)]
        : isArray(children)
            ? normalizeArrayChildren(children)
            : undefined;
}
function isTextNode(node) {
    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
}
function normalizeArrayChildren(children, nestedIndex) {
    const res = [];
    let i, c, lastIndex, last;
    for (i = 0; i < children.length; i++) {
        c = children[i];
        if (isUndef(c) || typeof c === 'boolean')
            continue;
        lastIndex = res.length - 1;
        last = res[lastIndex];
        //  nested
        if (isArray(c)) {
            if (c.length > 0) {
                c = normalizeArrayChildren(c, `${nestedIndex || ''}_${i}`);
                // merge adjacent text nodes
                if (isTextNode(c[0]) && isTextNode(last)) {
                    res[lastIndex] = createTextVNode(last.text + c[0].text);
                    c.shift();
                }
                res.push.apply(res, c);
            }
        }
        else if (isPrimitive(c)) {
            if (isTextNode(last)) {
                // merge adjacent text nodes
                // this is necessary for SSR hydration because text nodes are
                // essentially merged when rendered to HTML strings
                res[lastIndex] = createTextVNode(last.text + c);
            }
            else if (c !== '') {
                // convert primitive to vnode
                res.push(createTextVNode(c));
            }
        }
        else {
            if (isTextNode(c) && isTextNode(last)) {
                // merge adjacent text nodes
                res[lastIndex] = createTextVNode(last.text + c.text);
            }
            else {
                // default key for nested array children (likely generated by v-for)
                if (isTrue(children._isVList) &&
                    isDef(c.tag) &&
                    isUndef(c.key) &&
                    isDef(nestedIndex)) {
                    c.key = `__vlist${nestedIndex}_${i}__`;
                }
                res.push(c);
            }
        }
    }
    return res;
}

const SIMPLE_NORMALIZE = 1;
const ALWAYS_NORMALIZE = 2;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement(context, tag, data, children, normalizationType, alwaysNormalize) {
    if (isArray(data) || isPrimitive(data)) {
        normalizationType = children;
        children = data;
        data = undefined;
    }
    if (isTrue(alwaysNormalize)) {
        normalizationType = ALWAYS_NORMALIZE;
    }
    return _createElement(context, tag, data, children, normalizationType);
}
function _createElement(context, tag, data, children, normalizationType) {
    if (isDef(data) && isDef(data.__ob__)) {
        process.env.NODE_ENV !== 'production' &&
            warn$3(`Avoid using observed data object as vnode data: ${JSON.stringify(data)}\n` + 'Always create fresh vnode data objects in each render!', context);
        return createEmptyVNode();
    }
    // object syntax in v-bind
    if (isDef(data) && isDef(data.is)) {
        tag = data.is;
    }
    if (!tag) {
        // in case of component :is set to falsy value
        return createEmptyVNode();
    }
    // warn against non-primitive key
    if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
        warn$3('Avoid using non-primitive value as key, ' +
            'use string/number value instead.', context);
    }
    // support single function children as default scoped slot
    if (isArray(children) && isFunction(children[0])) {
        data = data || {};
        data.scopedSlots = { default: children[0] };
        children.length = 0;
    }
    if (normalizationType === ALWAYS_NORMALIZE) {
        children = normalizeChildren(children);
    }
    else if (normalizationType === SIMPLE_NORMALIZE) {
        children = simpleNormalizeChildren(children);
    }
    let vnode, ns;
    if (typeof tag === 'string') {
        let Ctor;
        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
        if ((!data || !data.pre) &&
            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
            // component
            vnode = createComponent(Ctor, data, context, children, tag);
        }
        else {
            // unknown or unlisted namespaced elements
            // check at runtime because it may get assigned a namespace when its
            // parent normalizes children
            vnode = new VNode(tag, data, children, undefined, undefined, context);
        }
    }
    else {
        // direct component options / constructor
        vnode = createComponent(tag, data, context, children);
    }
    if (isArray(vnode)) {
        return vnode;
    }
    else if (isDef(vnode)) {
        if (isDef(ns))
            applyNS(vnode, ns);
        if (isDef(data))
            registerDeepBindings(data);
        return vnode;
    }
    else {
        return createEmptyVNode();
    }
}
function applyNS(vnode, ns, force) {
    vnode.ns = ns;
    if (vnode.tag === 'foreignObject') {
        // use default namespace inside foreignObject
        ns = undefined;
        force = true;
    }
    if (isDef(vnode.children)) {
        for (let i = 0, l = vnode.children.length; i < l; i++) {
            const child = vnode.children[i];
            if (isDef(child.tag) &&
                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
                applyNS(child, ns, force);
            }
        }
    }
}
// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings(data) {
    if (isObject$1(data.style)) {
        traverse(data.style);
    }
    if (isObject$1(data.class)) {
        traverse(data.class);
    }
}

/**
 * Runtime helper for rendering v-for lists.
 */
function renderList(val, render) {
    let ret = null, i, l, keys, key;
    if (isArray(val) || typeof val === 'string') {
        ret = new Array(val.length);
        for (i = 0, l = val.length; i < l; i++) {
            ret[i] = render(val[i], i);
        }
    }
    else if (typeof val === 'number') {
        ret = new Array(val);
        for (i = 0; i < val; i++) {
            ret[i] = render(i + 1, i);
        }
    }
    else if (isObject$1(val)) {
        if (hasSymbol && val[Symbol.iterator]) {
            ret = [];
            const iterator = val[Symbol.iterator]();
            let result = iterator.next();
            while (!result.done) {
                ret.push(render(result.value, ret.length));
                result = iterator.next();
            }
        }
        else {
            keys = Object.keys(val);
            ret = new Array(keys.length);
            for (i = 0, l = keys.length; i < l; i++) {
                key = keys[i];
                ret[i] = render(val[key], key, i);
            }
        }
    }
    if (!isDef(ret)) {
        ret = [];
    }
    ret._isVList = true;
    return ret;
}

/**
 * Runtime helper for rendering <slot>
 */
function renderSlot(name, fallbackRender, props, bindObject) {
    const scopedSlotFn = this.$scopedSlots[name];
    let nodes;
    if (scopedSlotFn) {
        // scoped slot
        props = props || {};
        if (bindObject) {
            if (process.env.NODE_ENV !== 'production' && !isObject$1(bindObject)) {
                warn$3('slot v-bind without argument expects an Object', this);
            }
            props = extend(extend({}, bindObject), props);
        }
        nodes =
            scopedSlotFn(props) ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    else {
        nodes =
            this.$slots[name] ||
                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
    }
    const target = props && props.slot;
    if (target) {
        return this.$createElement('template', { slot: target }, nodes);
    }
    else {
        return nodes;
    }
}

/**
 * Runtime helper for resolving filters
 */
function resolveFilter(id) {
    return resolveAsset(this.$options, 'filters', id, true) || identity;
}

function isKeyNotMatch(expect, actual) {
    if (isArray(expect)) {
        return expect.indexOf(actual) === -1;
    }
    else {
        return expect !== actual;
    }
}
/**
 * Runtime helper for checking keyCodes from config.
 * exposed as Vue.prototype._k
 * passing in eventKeyName as last argument separately for backwards compat
 */
function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
    const mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
        return isKeyNotMatch(builtInKeyName, eventKeyName);
    }
    else if (mappedKeyCode) {
        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
    }
    else if (eventKeyName) {
        return hyphenate(eventKeyName) !== key;
    }
    return eventKeyCode === undefined;
}

/**
 * Runtime helper for merging v-bind="object" into a VNode's data.
 */
function bindObjectProps(data, tag, value, asProp, isSync) {
    if (value) {
        if (!isObject$1(value)) {
            process.env.NODE_ENV !== 'production' &&
                warn$3('v-bind without argument expects an Object or Array value', this);
        }
        else {
            if (isArray(value)) {
                value = toObject(value);
            }
            let hash;
            for (const key in value) {
                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
                    hash = data;
                }
                else {
                    const type = data.attrs && data.attrs.type;
                    hash =
                        asProp || config.mustUseProp(tag, type, key)
                            ? data.domProps || (data.domProps = {})
                            : data.attrs || (data.attrs = {});
                }
                const camelizedKey = camelize(key);
                const hyphenatedKey = hyphenate(key);
                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
                    hash[key] = value[key];
                    if (isSync) {
                        const on = data.on || (data.on = {});
                        on[`update:${key}`] = function ($event) {
                            value[key] = $event;
                        };
                    }
                }
            }
        }
    }
    return data;
}

/**
 * Runtime helper for rendering static trees.
 */
function renderStatic(index, isInFor) {
    const cached = this._staticTrees || (this._staticTrees = []);
    let tree = cached[index];
    // if has already-rendered static tree and not inside v-for,
    // we can reuse the same tree.
    if (tree && !isInFor) {
        return tree;
    }
    // otherwise, render a fresh tree.
    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
    );
    markStatic$1(tree, `__static__${index}`, false);
    return tree;
}
/**
 * Runtime helper for v-once.
 * Effectively it means marking the node as static with a unique key.
 */
function markOnce(tree, index, key) {
    markStatic$1(tree, `__once__${index}${key ? `_${key}` : ``}`, true);
    return tree;
}
function markStatic$1(tree, key, isOnce) {
    if (isArray(tree)) {
        for (let i = 0; i < tree.length; i++) {
            if (tree[i] && typeof tree[i] !== 'string') {
                markStaticNode(tree[i], `${key}_${i}`, isOnce);
            }
        }
    }
    else {
        markStaticNode(tree, key, isOnce);
    }
}
function markStaticNode(node, key, isOnce) {
    node.isStatic = true;
    node.key = key;
    node.isOnce = isOnce;
}

function bindObjectListeners(data, value) {
    if (value) {
        if (!isPlainObject(value)) {
            process.env.NODE_ENV !== 'production' && warn$3('v-on without argument expects an Object value', this);
        }
        else {
            const on = (data.on = data.on ? extend({}, data.on) : {});
            for (const key in value) {
                const existing = on[key];
                const ours = value[key];
                on[key] = existing ? [].concat(existing, ours) : ours;
            }
        }
    }
    return data;
}

function resolveScopedSlots(fns, res, 
// the following are added in 2.6
hasDynamicKeys, contentHashKey) {
    res = res || { $stable: !hasDynamicKeys };
    for (let i = 0; i < fns.length; i++) {
        const slot = fns[i];
        if (isArray(slot)) {
            resolveScopedSlots(slot, res, hasDynamicKeys);
        }
        else if (slot) {
            // marker for reverse proxying v-slot without scope on this.$slots
            // @ts-expect-error
            if (slot.proxy) {
                // @ts-expect-error
                slot.fn.proxy = true;
            }
            res[slot.key] = slot.fn;
        }
    }
    if (contentHashKey) {
        res.$key = contentHashKey;
    }
    return res;
}

// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
function bindDynamicKeys(baseObj, values) {
    for (let i = 0; i < values.length; i += 2) {
        const key = values[i];
        if (typeof key === 'string' && key) {
            baseObj[values[i]] = values[i + 1];
        }
        else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {
            // null is a special value for explicitly removing a binding
            warn$3(`Invalid value for dynamic directive argument (expected string or null): ${key}`, this);
        }
    }
    return baseObj;
}
// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
function prependModifier(value, symbol) {
    return typeof value === 'string' ? symbol + value : value;
}

function installRenderHelpers(target) {
    target._o = markOnce;
    target._n = toNumber;
    target._s = toString$2;
    target._l = renderList;
    target._t = renderSlot;
    target._q = looseEqual;
    target._i = looseIndexOf;
    target._m = renderStatic;
    target._f = resolveFilter;
    target._k = checkKeyCodes;
    target._b = bindObjectProps;
    target._v = createTextVNode;
    target._e = createEmptyVNode;
    target._u = resolveScopedSlots;
    target._g = bindObjectListeners;
    target._d = bindDynamicKeys;
    target._p = prependModifier;
}

/**
 * Runtime helper for resolving raw children VNodes into a slot object.
 */
function resolveSlots(children, context) {
    if (!children || !children.length) {
        return {};
    }
    const slots = {};
    for (let i = 0, l = children.length; i < l; i++) {
        const child = children[i];
        const data = child.data;
        // remove slot attribute if the node is resolved as a Vue slot node
        if (data && data.attrs && data.attrs.slot) {
            delete data.attrs.slot;
        }
        // named slots should only be respected if the vnode was rendered in the
        // same context.
        if ((child.context === context || child.fnContext === context) &&
            data &&
            data.slot != null) {
            const name = data.slot;
            const slot = slots[name] || (slots[name] = []);
            if (child.tag === 'template') {
                slot.push.apply(slot, child.children || []);
            }
            else {
                slot.push(child);
            }
        }
        else {
            (slots.default || (slots.default = [])).push(child);
        }
    }
    // ignore slots that contains only whitespace
    for (const name in slots) {
        if (slots[name].every(isWhitespace)) {
            delete slots[name];
        }
    }
    return slots;
}
function isWhitespace(node) {
    return (node.isComment && !node.asyncFactory) || node.text === ' ';
}

function isAsyncPlaceholder(node) {
    // @ts-expect-error not really boolean type
    return node.isComment && node.asyncFactory;
}

function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
    let res;
    const hasNormalSlots = Object.keys(normalSlots).length > 0;
    const isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
    const key = scopedSlots && scopedSlots.$key;
    if (!scopedSlots) {
        res = {};
    }
    else if (scopedSlots._normalized) {
        // fast path 1: child component re-render only, parent did not change
        return scopedSlots._normalized;
    }
    else if (isStable &&
        prevScopedSlots &&
        prevScopedSlots !== emptyObject &&
        key === prevScopedSlots.$key &&
        !hasNormalSlots &&
        !prevScopedSlots.$hasNormal) {
        // fast path 2: stable scoped slots w/ no normal slots to proxy,
        // only need to normalize once
        return prevScopedSlots;
    }
    else {
        res = {};
        for (const key in scopedSlots) {
            if (scopedSlots[key] && key[0] !== '$') {
                res[key] = normalizeScopedSlot(ownerVm, normalSlots, key, scopedSlots[key]);
            }
        }
    }
    // expose normal slots on scopedSlots
    for (const key in normalSlots) {
        if (!(key in res)) {
            res[key] = proxyNormalSlot(normalSlots, key);
        }
    }
    // avoriaz seems to mock a non-extensible $scopedSlots object
    // and when that is passed down this would cause an error
    if (scopedSlots && Object.isExtensible(scopedSlots)) {
        scopedSlots._normalized = res;
    }
    def(res, '$stable', isStable);
    def(res, '$key', key);
    def(res, '$hasNormal', hasNormalSlots);
    return res;
}
function normalizeScopedSlot(vm, normalSlots, key, fn) {
    const normalized = function () {
        const cur = currentInstance;
        setCurrentInstance(vm);
        let res = arguments.length ? fn.apply(null, arguments) : fn({});
        res =
            res && typeof res === 'object' && !isArray(res)
                ? [res] // single vnode
                : normalizeChildren(res);
        const vnode = res && res[0];
        setCurrentInstance(cur);
        return res &&
            (!vnode ||
                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
            ? undefined
            : res;
    };
    // this is a slot using the new v-slot syntax without scope. although it is
    // compiled as a scoped slot, render fn users would expect it to be present
    // on this.$slots because the usage is semantically a normal slot.
    if (fn.proxy) {
        Object.defineProperty(normalSlots, key, {
            get: normalized,
            enumerable: true,
            configurable: true
        });
    }
    return normalized;
}
function proxyNormalSlot(slots, key) {
    return () => slots[key];
}

function syncSetupProxy(to, from, prev, instance, type) {
    let changed = false;
    for (const key in from) {
        if (!(key in to)) {
            changed = true;
            defineProxyAttr(to, key, instance, type);
        }
        else if (from[key] !== prev[key]) {
            changed = true;
        }
    }
    for (const key in to) {
        if (!(key in from)) {
            changed = true;
            delete to[key];
        }
    }
    return changed;
}
function defineProxyAttr(proxy, key, instance, type) {
    Object.defineProperty(proxy, key, {
        enumerable: true,
        configurable: true,
        get() {
            return instance[type][key];
        }
    });
}

function createAsyncPlaceholder(factory, data, context, children, tag) {
    const node = createEmptyVNode();
    node.asyncFactory = factory;
    node.asyncMeta = { data, context, children, tag };
    return node;
}
function resolveAsyncComponent(factory, baseCtor) {
    if (isTrue(factory.error) && isDef(factory.errorComp)) {
        return factory.errorComp;
    }
    if (isDef(factory.resolved)) {
        return factory.resolved;
    }
    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
        return factory.loadingComp;
    }
}

let target;
function add(event, fn) {
    target.$on(event, fn);
}
function remove(event, fn) {
    target.$off(event, fn);
}
function createOnceHandler(event, fn) {
    const _target = target;
    return function onceHandler() {
        const res = fn.apply(null, arguments);
        if (res !== null) {
            _target.$off(event, onceHandler);
        }
    };
}
function updateComponentListeners(vm, listeners, oldListeners) {
    target = vm;
    updateListeners(listeners, oldListeners || {}, add, remove, createOnceHandler, vm);
    target = undefined;
}

let activeInstance = null;
function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
    if (process.env.NODE_ENV !== 'production') ;
    // determine whether component has slot children
    // we need to do this before overwriting $options._renderChildren.
    // check if there are dynamic scopedSlots (hand-written or compiled but with
    // dynamic slot names). Static scoped slots compiled from template has the
    // "$stable" marker.
    const newScopedSlots = parentVnode.data.scopedSlots;
    const oldScopedSlots = vm.$scopedSlots;
    const hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
        (!newScopedSlots && vm.$scopedSlots.$key));
    // Any static slot children from the parent may have changed during parent's
    // update. Dynamic scoped slots may also have changed. In such cases, a forced
    // update is necessary to ensure correctness.
    let needsForceUpdate = !!(renderChildren || // has new static slots
        vm.$options._renderChildren || // has old static slots
        hasDynamicScopedSlot);
    const prevVNode = vm.$vnode;
    vm.$options._parentVnode = parentVnode;
    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
    if (vm._vnode) {
        // update child tree's parent
        vm._vnode.parent = parentVnode;
    }
    vm.$options._renderChildren = renderChildren;
    // update $attrs and $listeners hash
    // these are also reactive so they may trigger child update if the child
    // used them during render
    const attrs = parentVnode.data.attrs || emptyObject;
    if (vm._attrsProxy) {
        // force update if attrs are accessed and has changed since it may be
        // passed to a child component.
        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
            needsForceUpdate = true;
        }
    }
    vm.$attrs = attrs;
    // update listeners
    listeners = listeners || emptyObject;
    const prevListeners = vm.$options._parentListeners;
    if (vm._listenersProxy) {
        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
    }
    vm.$listeners = vm.$options._parentListeners = listeners;
    updateComponentListeners(vm, listeners, prevListeners);
    // update props
    if (propsData && vm.$options.props) {
        toggleObserving(false);
        const props = vm._props;
        const propKeys = vm.$options._propKeys || [];
        for (let i = 0; i < propKeys.length; i++) {
            const key = propKeys[i];
            const propOptions = vm.$options.props; // wtf flow?
            props[key] = validateProp(key, propOptions, propsData, vm);
        }
        toggleObserving(true);
        // keep a copy of raw propsData
        vm.$options.propsData = propsData;
    }
    // resolve slots + force update if has children
    if (needsForceUpdate) {
        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
        vm.$forceUpdate();
    }
    if (process.env.NODE_ENV !== 'production') ;
}
function isInInactiveTree(vm) {
    while (vm && (vm = vm.$parent)) {
        if (vm._inactive)
            return true;
    }
    return false;
}
function activateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = false;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    else if (vm._directInactive) {
        return;
    }
    if (vm._inactive || vm._inactive === null) {
        vm._inactive = false;
        for (let i = 0; i < vm.$children.length; i++) {
            activateChildComponent(vm.$children[i]);
        }
        callHook(vm, 'activated');
    }
}
function deactivateChildComponent(vm, direct) {
    if (direct) {
        vm._directInactive = true;
        if (isInInactiveTree(vm)) {
            return;
        }
    }
    if (!vm._inactive) {
        vm._inactive = true;
        for (let i = 0; i < vm.$children.length; i++) {
            deactivateChildComponent(vm.$children[i]);
        }
        callHook(vm, 'deactivated');
    }
}
function callHook(vm, hook, args, setContext = true) {
    // #7573 disable dep collection when invoking lifecycle hooks
    pushTarget();
    const prev = currentInstance;
    setContext && setCurrentInstance(vm);
    const handlers = vm.$options[hook];
    const info = `${hook} hook`;
    if (handlers) {
        for (let i = 0, j = handlers.length; i < j; i++) {
            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
        }
    }
    if (vm._hasHookEvent) {
        vm.$emit('hook:' + hook);
    }
    setContext && setCurrentInstance(prev);
    popTarget();
}

// Async edge case fix requires storing an event listener's attach timestamp.
let getNow = Date.now;
// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if (inBrowser && !isIE) {
    const performance = window.performance;
    if (performance &&
        typeof performance.now === 'function' &&
        getNow() > document.createEvent('Event').timeStamp) {
        // if the event timestamp, although evaluated AFTER the Date.now(), is
        // smaller than it, it means the event is using a hi-res timestamp,
        // and we need to use the hi-res version for event listener timestamps as
        // well.
        getNow = () => performance.now();
    }
}
/**
 * Queue a kept-alive component that was activated during patch.
 * The queue will be processed after the entire tree has been patched.
 */
function queueActivatedComponent(vm) {
    // setting _inactive to false here so that a render function can
    // rely on checking whether it's in an inactive tree (e.g. router-view)
    vm._inactive = false;
}

function handleError(err, vm, info) {
    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
    // See: https://github.com/vuejs/vuex/issues/1505
    pushTarget();
    try {
        if (vm) {
            let cur = vm;
            while ((cur = cur.$parent)) {
                const hooks = cur.$options.errorCaptured;
                if (hooks) {
                    for (let i = 0; i < hooks.length; i++) {
                        try {
                            const capture = hooks[i].call(cur, err, vm, info) === false;
                            if (capture)
                                return;
                        }
                        catch (e) {
                            globalHandleError(e, cur, 'errorCaptured hook');
                        }
                    }
                }
            }
        }
        globalHandleError(err, vm, info);
    }
    finally {
        popTarget();
    }
}
function invokeWithErrorHandling(handler, context, args, vm, info) {
    let res;
    try {
        res = args ? handler.apply(context, args) : handler.call(context);
        if (res && !res._isVue && isPromise(res) && !res._handled) {
            res.catch(e => handleError(e, vm, info + ` (Promise/async)`));
            res._handled = true;
        }
    }
    catch (e) {
        handleError(e, vm, info);
    }
    return res;
}
function globalHandleError(err, vm, info) {
    logError(err, vm, info);
}
function logError(err, vm, info) {
    if (process.env.NODE_ENV !== 'production') {
        warn$3(`Error in ${info}: "${err.toString()}"`, vm);
    }
    /* istanbul ignore else */
    if (inBrowser && typeof console !== 'undefined') {
        console.error(err);
    }
    else {
        throw err;
    }
}

/* globals MutationObserver */
const callbacks = [];
function flushCallbacks() {
    const copies = callbacks.slice(0);
    callbacks.length = 0;
    for (let i = 0; i < copies.length; i++) {
        copies[i]();
    }
}
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
    Promise.resolve();
}
else if (!isIE &&
    typeof MutationObserver !== 'undefined' &&
    (isNative(MutationObserver) ||
        // PhantomJS and iOS 7.x
        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
    // Use MutationObserver where native Promise is not available,
    // e.g. PhantomJS, iOS7, Android 4.4
    // (#6466 MutationObserver is unreliable in IE11)
    let counter = 1;
    const observer = new MutationObserver(flushCallbacks);
    const textNode = document.createTextNode(String(counter));
    observer.observe(textNode, {
        characterData: true
    });
}
else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) ;
else ;

const seenObjects = new _Set();
/**
 * Recursively traverse an object to evoke all converted
 * getters, so that every nested property inside the object
 * is collected as a "deep" dependency.
 */
function traverse(val) {
    _traverse(val, seenObjects);
    seenObjects.clear();
    return val;
}
function _traverse(val, seen) {
    let i, keys;
    const isA = isArray(val);
    if ((!isA && !isObject$1(val)) ||
        val.__v_skip /* ReactiveFlags.SKIP */ ||
        Object.isFrozen(val) ||
        val instanceof VNode) {
        return;
    }
    if (val.__ob__) {
        const depId = val.__ob__.dep.id;
        if (seen.has(depId)) {
            return;
        }
        seen.add(depId);
    }
    if (isA) {
        i = val.length;
        while (i--)
            _traverse(val[i], seen);
    }
    else if (isRef(val)) {
        _traverse(val.value, seen);
    }
    else {
        keys = Object.keys(val);
        i = keys.length;
        while (i--)
            _traverse(val[keys[i]], seen);
    }
}

function resolveInject(inject, vm) {
    if (inject) {
        // inject is :any because flow is not smart enough to figure out cached
        const result = Object.create(null);
        const keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
        for (let i = 0; i < keys.length; i++) {
            const key = keys[i];
            // #6574 in case the inject object is observed...
            if (key === '__ob__')
                continue;
            const provideKey = inject[key].from;
            if (provideKey in vm._provided) {
                result[key] = vm._provided[provideKey];
            }
            else if ('default' in inject[key]) {
                const provideDefault = inject[key].default;
                result[key] = isFunction(provideDefault)
                    ? provideDefault.call(vm)
                    : provideDefault;
            }
            else if (process.env.NODE_ENV !== 'production') {
                warn$3(`Injection "${key}" not found`, vm);
            }
        }
        return result;
    }
}

function resolveConstructorOptions(Ctor) {
    let options = Ctor.options;
    if (Ctor.super) {
        const superOptions = resolveConstructorOptions(Ctor.super);
        const cachedSuperOptions = Ctor.superOptions;
        if (superOptions !== cachedSuperOptions) {
            // super option changed,
            // need to resolve new options.
            Ctor.superOptions = superOptions;
            // check if there are any late-modified/attached options (#4976)
            const modifiedOptions = resolveModifiedOptions(Ctor);
            // update base extend options
            if (modifiedOptions) {
                extend(Ctor.extendOptions, modifiedOptions);
            }
            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
            if (options.name) {
                options.components[options.name] = Ctor;
            }
        }
    }
    return options;
}
function resolveModifiedOptions(Ctor) {
    let modified;
    const latest = Ctor.options;
    const sealed = Ctor.sealedOptions;
    for (const key in latest) {
        if (latest[key] !== sealed[key]) {
            if (!modified)
                modified = {};
            modified[key] = latest[key];
        }
    }
    return modified;
}

function FunctionalRenderContext(data, props, children, parent, Ctor) {
    const options = Ctor.options;
    // ensure the createElement function in functional components
    // gets a unique context - this is necessary for correct named slot check
    let contextVm;
    if (hasOwn(parent, '_uid')) {
        contextVm = Object.create(parent);
        contextVm._original = parent;
    }
    else {
        // the context vm passed in is a functional context as well.
        // in this case we want to make sure we are able to get a hold to the
        // real context instance.
        contextVm = parent;
        // @ts-ignore
        parent = parent._original;
    }
    const isCompiled = isTrue(options._compiled);
    const needNormalization = !isCompiled;
    this.data = data;
    this.props = props;
    this.children = children;
    this.parent = parent;
    this.listeners = data.on || emptyObject;
    this.injections = resolveInject(options.inject, parent);
    this.slots = () => {
        if (!this.$slots) {
            normalizeScopedSlots(parent, data.scopedSlots, (this.$slots = resolveSlots(children, parent)));
        }
        return this.$slots;
    };
    Object.defineProperty(this, 'scopedSlots', {
        enumerable: true,
        get() {
            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
        }
    });
    // support for compiled functional template
    if (isCompiled) {
        // exposing $options for renderStatic()
        this.$options = options;
        // pre-resolve slots for renderSlot()
        this.$slots = this.slots();
        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
    }
    if (options._scopeId) {
        this._c = (a, b, c, d) => {
            const vnode = createElement(contextVm, a, b, c, d, needNormalization);
            if (vnode && !isArray(vnode)) {
                vnode.fnScopeId = options._scopeId;
                vnode.fnContext = parent;
            }
            return vnode;
        };
    }
    else {
        this._c = (a, b, c, d) => createElement(contextVm, a, b, c, d, needNormalization);
    }
}
installRenderHelpers(FunctionalRenderContext.prototype);
function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
    const options = Ctor.options;
    const props = {};
    const propOptions = options.props;
    if (isDef(propOptions)) {
        for (const key in propOptions) {
            props[key] = validateProp(key, propOptions, propsData || emptyObject);
        }
    }
    else {
        if (isDef(data.attrs))
            mergeProps(props, data.attrs);
        if (isDef(data.props))
            mergeProps(props, data.props);
    }
    const renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
    const vnode = options.render.call(null, renderContext._c, renderContext);
    if (vnode instanceof VNode) {
        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
    }
    else if (isArray(vnode)) {
        const vnodes = normalizeChildren(vnode) || [];
        const res = new Array(vnodes.length);
        for (let i = 0; i < vnodes.length; i++) {
            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
        }
        return res;
    }
}
function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
    // #7817 clone node before setting fnContext, otherwise if the node is reused
    // (e.g. it was from a cached normal slot) the fnContext causes named slots
    // that should not be matched to match.
    const clone = cloneVNode(vnode);
    clone.fnContext = contextVm;
    clone.fnOptions = options;
    if (process.env.NODE_ENV !== 'production') {
        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
            renderContext;
    }
    if (data.slot) {
        (clone.data || (clone.data = {})).slot = data.slot;
    }
    return clone;
}
function mergeProps(to, from) {
    for (const key in from) {
        to[camelize(key)] = from[key];
    }
}

function getComponentName(options) {
    return options.name || options.__name || options._componentTag;
}
// inline hooks to be invoked on component VNodes during patch
const componentVNodeHooks = {
    init(vnode, hydrating) {
        if (vnode.componentInstance &&
            !vnode.componentInstance._isDestroyed &&
            vnode.data.keepAlive) {
            // kept-alive components, treat as a patch
            const mountedNode = vnode; // work around flow
            componentVNodeHooks.prepatch(mountedNode, mountedNode);
        }
        else {
            const child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
        }
    },
    prepatch(oldVnode, vnode) {
        const options = vnode.componentOptions;
        const child = (vnode.componentInstance = oldVnode.componentInstance);
        updateChildComponent(child, options.propsData, // updated props
        options.listeners, // updated listeners
        vnode, // new parent vnode
        options.children // new children
        );
    },
    insert(vnode) {
        const { context, componentInstance } = vnode;
        if (!componentInstance._isMounted) {
            componentInstance._isMounted = true;
            callHook(componentInstance, 'mounted');
        }
        if (vnode.data.keepAlive) {
            if (context._isMounted) {
                // vue-router#1212
                // During updates, a kept-alive component's child components may
                // change, so directly walking the tree here may call activated hooks
                // on incorrect children. Instead we push them into a queue which will
                // be processed after the whole patch process ended.
                queueActivatedComponent(componentInstance);
            }
            else {
                activateChildComponent(componentInstance, true /* direct */);
            }
        }
    },
    destroy(vnode) {
        const { componentInstance } = vnode;
        if (!componentInstance._isDestroyed) {
            if (!vnode.data.keepAlive) {
                componentInstance.$destroy();
            }
            else {
                deactivateChildComponent(componentInstance, true /* direct */);
            }
        }
    }
};
const hooksToMerge = Object.keys(componentVNodeHooks);
function createComponent(Ctor, data, context, children, tag) {
    if (isUndef(Ctor)) {
        return;
    }
    const baseCtor = context.$options._base;
    // plain options object: turn it into a constructor
    if (isObject$1(Ctor)) {
        Ctor = baseCtor.extend(Ctor);
    }
    // if at this stage it's not a constructor or an async component factory,
    // reject.
    if (typeof Ctor !== 'function') {
        if (process.env.NODE_ENV !== 'production') {
            warn$3(`Invalid Component definition: ${String(Ctor)}`, context);
        }
        return;
    }
    // async component
    let asyncFactory;
    // @ts-expect-error
    if (isUndef(Ctor.cid)) {
        asyncFactory = Ctor;
        Ctor = resolveAsyncComponent(asyncFactory);
        if (Ctor === undefined) {
            // return a placeholder node for async component, which is rendered
            // as a comment node but preserves all the raw information for the node.
            // the information will be used for async server-rendering and hydration.
            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
        }
    }
    data = data || {};
    // resolve constructor options in case global mixins are applied after
    // component constructor creation
    resolveConstructorOptions(Ctor);
    // transform component v-model data into props & events
    if (isDef(data.model)) {
        // @ts-expect-error
        transformModel(Ctor.options, data);
    }
    // extract props
    // @ts-expect-error
    const propsData = extractPropsFromVNodeData(data, Ctor, tag);
    // functional component
    // @ts-expect-error
    if (isTrue(Ctor.options.functional)) {
        return createFunctionalComponent(Ctor, propsData, data, context, children);
    }
    // extract listeners, since these needs to be treated as
    // child component listeners instead of DOM listeners
    const listeners = data.on;
    // replace with listeners with .native modifier
    // so it gets processed during parent component patch.
    data.on = data.nativeOn;
    // @ts-expect-error
    if (isTrue(Ctor.options.abstract)) {
        // abstract components do not keep anything
        // other than props & listeners & slot
        // work around flow
        const slot = data.slot;
        data = {};
        if (slot) {
            data.slot = slot;
        }
    }
    // install component management hooks onto the placeholder node
    installComponentHooks(data);
    // return a placeholder vnode
    // @ts-expect-error
    const name = getComponentName(Ctor.options) || tag;
    const vnode = new VNode(
    // @ts-expect-error
    `vue-component-${Ctor.cid}${name ? `-${name}` : ''}`, data, undefined, undefined, undefined, context, 
    // @ts-expect-error
    { Ctor, propsData, listeners, tag, children }, asyncFactory);
    return vnode;
}
function createComponentInstanceForVnode(
// we know it's MountedComponentVNode but flow doesn't
vnode, 
// activeInstance in lifecycle state
parent) {
    const options = {
        _isComponent: true,
        _parentVnode: vnode,
        parent
    };
    // check inline-template render functions
    const inlineTemplate = vnode.data.inlineTemplate;
    if (isDef(inlineTemplate)) {
        options.render = inlineTemplate.render;
        options.staticRenderFns = inlineTemplate.staticRenderFns;
    }
    return new vnode.componentOptions.Ctor(options);
}
function installComponentHooks(data) {
    const hooks = data.hook || (data.hook = {});
    for (let i = 0; i < hooksToMerge.length; i++) {
        const key = hooksToMerge[i];
        const existing = hooks[key];
        const toMerge = componentVNodeHooks[key];
        // @ts-expect-error
        if (existing !== toMerge && !(existing && existing._merged)) {
            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
        }
    }
}
function mergeHook(f1, f2) {
    const merged = (a, b) => {
        // flow complains about extra args which is why we use any
        f1(a, b);
        f2(a, b);
    };
    merged._merged = true;
    return merged;
}
// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel(options, data) {
    const prop = (options.model && options.model.prop) || 'value';
    const event = (options.model && options.model.event) || 'input';
    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
    const on = data.on || (data.on = {});
    const existing = on[event];
    const callback = data.model.callback;
    if (isDef(existing)) {
        if (isArray(existing)
            ? existing.indexOf(callback) === -1
            : existing !== callback) {
            on[event] = [callback].concat(existing);
        }
    }
    else {
        on[event] = callback;
    }
}

let warn$3 = noop;
let tip = noop;
let generateComponentTrace; // work around flow check
let formatComponentName;
if (process.env.NODE_ENV !== 'production') {
    const hasConsole = typeof console !== 'undefined';
    const classifyRE = /(?:^|[-_])(\w)/g;
    const classify = str => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');
    warn$3 = (msg, vm = currentInstance) => {
        const trace = vm ? generateComponentTrace(vm) : '';
        if (hasConsole && !config.silent) {
            console.error(`[Vue warn]: ${msg}${trace}`);
        }
    };
    tip = (msg, vm) => {
        if (hasConsole && !config.silent) {
            console.warn(`[Vue tip]: ${msg}` + (vm ? generateComponentTrace(vm) : ''));
        }
    };
    formatComponentName = (vm, includeFile) => {
        if (vm.$root === vm) {
            return '<Root>';
        }
        const options = isFunction(vm) && vm.cid != null
            ? vm.options
            : vm._isVue
                ? vm.$options || vm.constructor.options
                : vm;
        let name = getComponentName(options);
        const file = options.__file;
        if (!name && file) {
            const match = file.match(/([^/\\]+)\.vue$/);
            name = match && match[1];
        }
        return ((name ? `<${classify(name)}>` : `<Anonymous>`) +
            (file && includeFile !== false ? ` at ${file}` : ''));
    };
    const repeat = (str, n) => {
        let res = '';
        while (n) {
            if (n % 2 === 1)
                res += str;
            if (n > 1)
                str += str;
            n >>= 1;
        }
        return res;
    };
    generateComponentTrace = (vm) => {
        if (vm._isVue && vm.$parent) {
            const tree = [];
            let currentRecursiveSequence = 0;
            while (vm) {
                if (tree.length > 0) {
                    const last = tree[tree.length - 1];
                    if (last.constructor === vm.constructor) {
                        currentRecursiveSequence++;
                        vm = vm.$parent;
                        continue;
                    }
                    else if (currentRecursiveSequence > 0) {
                        tree[tree.length - 1] = [last, currentRecursiveSequence];
                        currentRecursiveSequence = 0;
                    }
                }
                tree.push(vm);
                vm = vm.$parent;
            }
            return ('\n\nfound in\n\n' +
                tree
                    .map((vm, i) => `${i === 0 ? '---> ' : repeat(' ', 5 + i * 2)}${isArray(vm)
                    ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
                    : formatComponentName(vm)}`)
                    .join('\n'));
        }
        else {
            return `\n\n(found in ${formatComponentName(vm)})`;
        }
    };
}

/**
 * Option overwriting strategies are functions that handle
 * how to merge a parent option value and a child option
 * value into the final value.
 */
const strats = config.optionMergeStrategies;
/**
 * Options with restrictions
 */
if (process.env.NODE_ENV !== 'production') {
    strats.el = strats.propsData = function (parent, child, vm, key) {
        if (!vm) {
            warn$3(`option "${key}" can only be used during instance ` +
                'creation with the `new` keyword.');
        }
        return defaultStrat(parent, child);
    };
}
/**
 * Helper that recursively merges two data objects together.
 */
function mergeData(to, from, recursive = true) {
    if (!from)
        return to;
    let key, toVal, fromVal;
    const keys = hasSymbol
        ? Reflect.ownKeys(from)
        : Object.keys(from);
    for (let i = 0; i < keys.length; i++) {
        key = keys[i];
        // in case the object is already observed...
        if (key === '__ob__')
            continue;
        toVal = to[key];
        fromVal = from[key];
        if (!recursive || !hasOwn(to, key)) {
            set(to, key, fromVal);
        }
        else if (toVal !== fromVal &&
            isPlainObject(toVal) &&
            isPlainObject(fromVal)) {
            mergeData(toVal, fromVal);
        }
    }
    return to;
}
/**
 * Data
 */
function mergeDataOrFn(parentVal, childVal, vm) {
    if (!vm) {
        // in a Vue.extend merge, both should be functions
        if (!childVal) {
            return parentVal;
        }
        if (!parentVal) {
            return childVal;
        }
        // when parentVal & childVal are both present,
        // we need to return a function that returns the
        // merged result of both functions... no need to
        // check if parentVal is a function here because
        // it has to be a function to pass previous merges.
        return function mergedDataFn() {
            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
        };
    }
    else {
        return function mergedInstanceDataFn() {
            // instance merge
            const instanceData = isFunction(childVal)
                ? childVal.call(vm, vm)
                : childVal;
            const defaultData = isFunction(parentVal)
                ? parentVal.call(vm, vm)
                : parentVal;
            if (instanceData) {
                return mergeData(instanceData, defaultData);
            }
            else {
                return defaultData;
            }
        };
    }
}
strats.data = function (parentVal, childVal, vm) {
    if (!vm) {
        if (childVal && typeof childVal !== 'function') {
            process.env.NODE_ENV !== 'production' &&
                warn$3('The "data" option should be a function ' +
                    'that returns a per-instance value in component ' +
                    'definitions.', vm);
            return parentVal;
        }
        return mergeDataOrFn(parentVal, childVal);
    }
    return mergeDataOrFn(parentVal, childVal, vm);
};
/**
 * Hooks and props are merged as arrays.
 */
function mergeLifecycleHook(parentVal, childVal) {
    const res = childVal
        ? parentVal
            ? parentVal.concat(childVal)
            : isArray(childVal)
                ? childVal
                : [childVal]
        : parentVal;
    return res ? dedupeHooks(res) : res;
}
function dedupeHooks(hooks) {
    const res = [];
    for (let i = 0; i < hooks.length; i++) {
        if (res.indexOf(hooks[i]) === -1) {
            res.push(hooks[i]);
        }
    }
    return res;
}
LIFECYCLE_HOOKS.forEach(hook => {
    strats[hook] = mergeLifecycleHook;
});
/**
 * Assets
 *
 * When a vm is present (instance creation), we need to do
 * a three-way merge between constructor options, instance
 * options and parent options.
 */
function mergeAssets(parentVal, childVal, vm, key) {
    const res = Object.create(parentVal || null);
    if (childVal) {
        process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);
        return extend(res, childVal);
    }
    else {
        return res;
    }
}
ASSET_TYPES.forEach(function (type) {
    strats[type + 's'] = mergeAssets;
});
/**
 * Watchers.
 *
 * Watchers hashes should not overwrite one
 * another, so we merge them as arrays.
 */
strats.watch = function (parentVal, childVal, vm, key) {
    // work around Firefox's Object.prototype.watch...
    //@ts-expect-error work around
    if (parentVal === nativeWatch)
        parentVal = undefined;
    //@ts-expect-error work around
    if (childVal === nativeWatch)
        childVal = undefined;
    /* istanbul ignore if */
    if (!childVal)
        return Object.create(parentVal || null);
    if (process.env.NODE_ENV !== 'production') {
        assertObjectType(key, childVal, vm);
    }
    if (!parentVal)
        return childVal;
    const ret = {};
    extend(ret, parentVal);
    for (const key in childVal) {
        let parent = ret[key];
        const child = childVal[key];
        if (parent && !isArray(parent)) {
            parent = [parent];
        }
        ret[key] = parent ? parent.concat(child) : isArray(child) ? child : [child];
    }
    return ret;
};
/**
 * Other object hashes.
 */
strats.props =
    strats.methods =
        strats.inject =
            strats.computed =
                function (parentVal, childVal, vm, key) {
                    if (childVal && process.env.NODE_ENV !== 'production') {
                        assertObjectType(key, childVal, vm);
                    }
                    if (!parentVal)
                        return childVal;
                    const ret = Object.create(null);
                    extend(ret, parentVal);
                    if (childVal)
                        extend(ret, childVal);
                    return ret;
                };
strats.provide = function (parentVal, childVal) {
    if (!parentVal)
        return childVal;
    return function () {
        const ret = Object.create(null);
        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
        if (childVal) {
            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
            );
        }
        return ret;
    };
};
/**
 * Default strategy.
 */
const defaultStrat = function (parentVal, childVal) {
    return childVal === undefined ? parentVal : childVal;
};
/**
 * Validate component names
 */
function checkComponents(options) {
    for (const key in options.components) {
        validateComponentName(key);
    }
}
function validateComponentName(name) {
    if (!new RegExp(`^[a-zA-Z][\\-\\.0-9_${unicodeRegExp.source}]*$`).test(name)) {
        warn$3('Invalid component name: "' +
            name +
            '". Component names ' +
            'should conform to valid custom element name in html5 specification.');
    }
    if (isBuiltInTag(name) || config.isReservedTag(name)) {
        warn$3('Do not use built-in or reserved HTML elements as component ' +
            'id: ' +
            name);
    }
}
/**
 * Ensure all props option syntax are normalized into the
 * Object-based format.
 */
function normalizeProps(options, vm) {
    const props = options.props;
    if (!props)
        return;
    const res = {};
    let i, val, name;
    if (isArray(props)) {
        i = props.length;
        while (i--) {
            val = props[i];
            if (typeof val === 'string') {
                name = camelize(val);
                res[name] = { type: null };
            }
            else if (process.env.NODE_ENV !== 'production') {
                warn$3('props must be strings when using array syntax.');
            }
        }
    }
    else if (isPlainObject(props)) {
        for (const key in props) {
            val = props[key];
            name = camelize(key);
            res[name] = isPlainObject(val) ? val : { type: val };
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$3(`Invalid value for option "props": expected an Array or an Object, ` +
            `but got ${toRawType(props)}.`, vm);
    }
    options.props = res;
}
/**
 * Normalize all injections into Object-based format
 */
function normalizeInject(options, vm) {
    const inject = options.inject;
    if (!inject)
        return;
    const normalized = (options.inject = {});
    if (isArray(inject)) {
        for (let i = 0; i < inject.length; i++) {
            normalized[inject[i]] = { from: inject[i] };
        }
    }
    else if (isPlainObject(inject)) {
        for (const key in inject) {
            const val = inject[key];
            normalized[key] = isPlainObject(val)
                ? extend({ from: key }, val)
                : { from: val };
        }
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$3(`Invalid value for option "inject": expected an Array or an Object, ` +
            `but got ${toRawType(inject)}.`, vm);
    }
}
/**
 * Normalize raw function directives into object format.
 */
function normalizeDirectives(options) {
    const dirs = options.directives;
    if (dirs) {
        for (const key in dirs) {
            const def = dirs[key];
            if (isFunction(def)) {
                dirs[key] = { bind: def, update: def };
            }
        }
    }
}
function assertObjectType(name, value, vm) {
    if (!isPlainObject(value)) {
        warn$3(`Invalid value for option "${name}": expected an Object, ` +
            `but got ${toRawType(value)}.`, vm);
    }
}
/**
 * Merge two option objects into a new one.
 * Core utility used in both instantiation and inheritance.
 */
function mergeOptions(parent, child, vm) {
    if (process.env.NODE_ENV !== 'production') {
        checkComponents(child);
    }
    if (isFunction(child)) {
        // @ts-expect-error
        child = child.options;
    }
    normalizeProps(child, vm);
    normalizeInject(child, vm);
    normalizeDirectives(child);
    // Apply extends and mixins on the child options,
    // but only if it is a raw options object that isn't
    // the result of another mergeOptions call.
    // Only merged options has the _base property.
    if (!child._base) {
        if (child.extends) {
            parent = mergeOptions(parent, child.extends, vm);
        }
        if (child.mixins) {
            for (let i = 0, l = child.mixins.length; i < l; i++) {
                parent = mergeOptions(parent, child.mixins[i], vm);
            }
        }
    }
    const options = {};
    let key;
    for (key in parent) {
        mergeField(key);
    }
    for (key in child) {
        if (!hasOwn(parent, key)) {
            mergeField(key);
        }
    }
    function mergeField(key) {
        const strat = strats[key] || defaultStrat;
        options[key] = strat(parent[key], child[key], vm, key);
    }
    return options;
}
/**
 * Resolve an asset.
 * This function is used because child instances need access
 * to assets defined in its ancestor chain.
 */
function resolveAsset(options, type, id, warnMissing) {
    /* istanbul ignore if */
    if (typeof id !== 'string') {
        return;
    }
    const assets = options[type];
    // check local registration variations first
    if (hasOwn(assets, id))
        return assets[id];
    const camelizedId = camelize(id);
    if (hasOwn(assets, camelizedId))
        return assets[camelizedId];
    const PascalCaseId = capitalize(camelizedId);
    if (hasOwn(assets, PascalCaseId))
        return assets[PascalCaseId];
    // fallback to prototype chain
    const res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
    if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {
        warn$3('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
    }
    return res;
}

function validateProp(key, propOptions, propsData, vm) {
    const prop = propOptions[key];
    const absent = !hasOwn(propsData, key);
    let value = propsData[key];
    // boolean casting
    const booleanIndex = getTypeIndex(Boolean, prop.type);
    if (booleanIndex > -1) {
        if (absent && !hasOwn(prop, 'default')) {
            value = false;
        }
        else if (value === '' || value === hyphenate(key)) {
            // only cast empty string / same name to boolean if
            // boolean has higher priority
            const stringIndex = getTypeIndex(String, prop.type);
            if (stringIndex < 0 || booleanIndex < stringIndex) {
                value = true;
            }
        }
    }
    // check default value
    if (value === undefined) {
        value = getPropDefaultValue(vm, prop, key);
        // since the default value is a fresh copy,
        // make sure to observe it.
        const prevShouldObserve = shouldObserve;
        toggleObserving(true);
        observe(value);
        toggleObserving(prevShouldObserve);
    }
    if (process.env.NODE_ENV !== 'production') {
        assertProp(prop, key, value, vm, absent);
    }
    return value;
}
/**
 * Get the default value of a prop.
 */
function getPropDefaultValue(vm, prop, key) {
    // no default, return undefined
    if (!hasOwn(prop, 'default')) {
        return undefined;
    }
    const def = prop.default;
    // warn against non-factory defaults for Object & Array
    if (process.env.NODE_ENV !== 'production' && isObject$1(def)) {
        warn$3('Invalid default value for prop "' +
            key +
            '": ' +
            'Props with type Object/Array must use a factory function ' +
            'to return the default value.', vm);
    }
    // the raw prop value was also undefined from previous render,
    // return previous default value to avoid unnecessary watcher trigger
    if (vm &&
        vm.$options.propsData &&
        vm.$options.propsData[key] === undefined &&
        vm._props[key] !== undefined) {
        return vm._props[key];
    }
    // call factory function for non-Function types
    // a value is Function if its prototype is function even across different execution context
    return isFunction(def) && getType(prop.type) !== 'Function'
        ? def.call(vm)
        : def;
}
/**
 * Assert whether a prop is valid.
 */
function assertProp(prop, name, value, vm, absent) {
    if (prop.required && absent) {
        warn$3('Missing required prop: "' + name + '"', vm);
        return;
    }
    if (value == null && !prop.required) {
        return;
    }
    let type = prop.type;
    let valid = !type || type === true;
    const expectedTypes = [];
    if (type) {
        if (!isArray(type)) {
            type = [type];
        }
        for (let i = 0; i < type.length && !valid; i++) {
            const assertedType = assertType(value, type[i], vm);
            expectedTypes.push(assertedType.expectedType || '');
            valid = assertedType.valid;
        }
    }
    const haveExpectedTypes = expectedTypes.some(t => t);
    if (!valid && haveExpectedTypes) {
        warn$3(getInvalidTypeMessage(name, value, expectedTypes), vm);
        return;
    }
    const validator = prop.validator;
    if (validator) {
        if (!validator(value)) {
            warn$3('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
        }
    }
}
const simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
function assertType(value, type, vm) {
    let valid;
    const expectedType = getType(type);
    if (simpleCheckRE.test(expectedType)) {
        const t = typeof value;
        valid = t === expectedType.toLowerCase();
        // for primitive wrapper objects
        if (!valid && t === 'object') {
            valid = value instanceof type;
        }
    }
    else if (expectedType === 'Object') {
        valid = isPlainObject(value);
    }
    else if (expectedType === 'Array') {
        valid = isArray(value);
    }
    else {
        try {
            valid = value instanceof type;
        }
        catch (e) {
            warn$3('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
            valid = false;
        }
    }
    return {
        valid,
        expectedType
    };
}
const functionTypeCheckRE = /^\s*function (\w+)/;
/**
 * Use function string name to check built-in types,
 * because a simple equality check will fail when running
 * across different vms / iframes.
 */
function getType(fn) {
    const match = fn && fn.toString().match(functionTypeCheckRE);
    return match ? match[1] : '';
}
function isSameType(a, b) {
    return getType(a) === getType(b);
}
function getTypeIndex(type, expectedTypes) {
    if (!isArray(expectedTypes)) {
        return isSameType(expectedTypes, type) ? 0 : -1;
    }
    for (let i = 0, len = expectedTypes.length; i < len; i++) {
        if (isSameType(expectedTypes[i], type)) {
            return i;
        }
    }
    return -1;
}
function getInvalidTypeMessage(name, value, expectedTypes) {
    let message = `Invalid prop: type check failed for prop "${name}".` +
        ` Expected ${expectedTypes.map(capitalize).join(', ')}`;
    const expectedType = expectedTypes[0];
    const receivedType = toRawType(value);
    // check if we need to specify expected value
    if (expectedTypes.length === 1 &&
        isExplicable(expectedType) &&
        isExplicable(typeof value) &&
        !isBoolean(expectedType, receivedType)) {
        message += ` with value ${styleValue(value, expectedType)}`;
    }
    message += `, got ${receivedType} `;
    // check if we need to specify received value
    if (isExplicable(receivedType)) {
        message += `with value ${styleValue(value, receivedType)}.`;
    }
    return message;
}
function styleValue(value, type) {
    if (type === 'String') {
        return `"${value}"`;
    }
    else if (type === 'Number') {
        return `${Number(value)}`;
    }
    else {
        return `${value}`;
    }
}
const EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
function isExplicable(value) {
    return EXPLICABLE_TYPES.some(elem => value.toLowerCase() === elem);
}
function isBoolean(...args) {
    return args.some(elem => elem.toLowerCase() === 'boolean');
}

// these are reserved for web because they are directly compiled away
// during template compilation
makeMap('style,class');
// attributes that should be using props for binding
const acceptValue = makeMap('input,textarea,option,select,progress');
const mustUseProp = (tag, type, attr) => {
    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
        (attr === 'selected' && tag === 'option') ||
        (attr === 'checked' && tag === 'input') ||
        (attr === 'muted' && tag === 'video'));
};
const isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
makeMap('events,caret,typing,plaintext-only');
const isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
    'required,reversed,scoped,seamless,selected,sortable,' +
    'truespeed,typemustmatch,visible');

const isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
    'embed,object,param,source,canvas,script,noscript,del,ins,' +
    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
    'output,progress,select,textarea,' +
    'details,dialog,menu,menuitem,summary,' +
    'content,element,shadow,template,blockquote,iframe,tfoot');
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
const isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
const isPreTag = (tag) => tag === 'pre';
const isReservedTag = (tag) => {
    return isHTMLTag(tag) || isSVG(tag);
};
function getTagNamespace(tag) {
    if (isSVG(tag)) {
        return 'svg';
    }
    // basic support for MathML
    // note it doesn't support other MathML elements being component roots
    if (tag === 'math') {
        return 'math';
    }
}
makeMap('text,number,password,search,email,tel,url');

const validDivisionCharRE = /[\w).+\-_$\]]/;
function parseFilters(exp) {
    let inSingle = false;
    let inDouble = false;
    let inTemplateString = false;
    let inRegex = false;
    let curly = 0;
    let square = 0;
    let paren = 0;
    let lastFilterIndex = 0;
    let c, prev, i, expression, filters;
    for (i = 0; i < exp.length; i++) {
        prev = c;
        c = exp.charCodeAt(i);
        if (inSingle) {
            if (c === 0x27 && prev !== 0x5c)
                inSingle = false;
        }
        else if (inDouble) {
            if (c === 0x22 && prev !== 0x5c)
                inDouble = false;
        }
        else if (inTemplateString) {
            if (c === 0x60 && prev !== 0x5c)
                inTemplateString = false;
        }
        else if (inRegex) {
            if (c === 0x2f && prev !== 0x5c)
                inRegex = false;
        }
        else if (c === 0x7c && // pipe
            exp.charCodeAt(i + 1) !== 0x7c &&
            exp.charCodeAt(i - 1) !== 0x7c &&
            !curly &&
            !square &&
            !paren) {
            if (expression === undefined) {
                // first filter, end of expression
                lastFilterIndex = i + 1;
                expression = exp.slice(0, i).trim();
            }
            else {
                pushFilter();
            }
        }
        else {
            switch (c) {
                case 0x22:
                    inDouble = true;
                    break; // "
                case 0x27:
                    inSingle = true;
                    break; // '
                case 0x60:
                    inTemplateString = true;
                    break; // `
                case 0x28:
                    paren++;
                    break; // (
                case 0x29:
                    paren--;
                    break; // )
                case 0x5b:
                    square++;
                    break; // [
                case 0x5d:
                    square--;
                    break; // ]
                case 0x7b:
                    curly++;
                    break; // {
                case 0x7d:
                    curly--;
                    break; // }
            }
            if (c === 0x2f) {
                // /
                let j = i - 1;
                let p;
                // find first non-whitespace prev char
                for (; j >= 0; j--) {
                    p = exp.charAt(j);
                    if (p !== ' ')
                        break;
                }
                if (!p || !validDivisionCharRE.test(p)) {
                    inRegex = true;
                }
            }
        }
    }
    if (expression === undefined) {
        expression = exp.slice(0, i).trim();
    }
    else if (lastFilterIndex !== 0) {
        pushFilter();
    }
    function pushFilter() {
        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
        lastFilterIndex = i + 1;
    }
    if (filters) {
        for (i = 0; i < filters.length; i++) {
            expression = wrapFilter(expression, filters[i]);
        }
    }
    return expression;
}
function wrapFilter(exp, filter) {
    const i = filter.indexOf('(');
    if (i < 0) {
        // _f: resolveFilter
        return `_f("${filter}")(${exp})`;
    }
    else {
        const name = filter.slice(0, i);
        const args = filter.slice(i + 1);
        return `_f("${name}")(${exp}${args !== ')' ? ',' + args : args}`;
    }
}

const defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
const regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
const buildRegex = cached(delimiters => {
    const open = delimiters[0].replace(regexEscapeRE, '\\$&');
    const close = delimiters[1].replace(regexEscapeRE, '\\$&');
    return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
});
function parseText(text, delimiters) {
    //@ts-expect-error
    const tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
    if (!tagRE.test(text)) {
        return;
    }
    const tokens = [];
    const rawTokens = [];
    let lastIndex = (tagRE.lastIndex = 0);
    let match, index, tokenValue;
    while ((match = tagRE.exec(text))) {
        index = match.index;
        // push text token
        if (index > lastIndex) {
            rawTokens.push((tokenValue = text.slice(lastIndex, index)));
            tokens.push(JSON.stringify(tokenValue));
        }
        // tag token
        const exp = parseFilters(match[1].trim());
        tokens.push(`_s(${exp})`);
        rawTokens.push({ '@binding': exp });
        lastIndex = index + match[0].length;
    }
    if (lastIndex < text.length) {
        rawTokens.push((tokenValue = text.slice(lastIndex)));
        tokens.push(JSON.stringify(tokenValue));
    }
    return {
        expression: tokens.join('+'),
        tokens: rawTokens
    };
}

/* eslint-disable no-unused-vars */
function baseWarn(msg, range) {
    console.error(`[Vue compiler]: ${msg}`);
}
/* eslint-enable no-unused-vars */
function pluckModuleFunction(modules, key) {
    return modules ? modules.map(m => m[key]).filter(_ => _) : [];
}
function addProp(el, name, value, range, dynamic) {
    (el.props || (el.props = [])).push(rangeSetItem({ name, value, dynamic }, range));
    el.plain = false;
}
function addAttr(el, name, value, range, dynamic) {
    const attrs = dynamic
        ? el.dynamicAttrs || (el.dynamicAttrs = [])
        : el.attrs || (el.attrs = []);
    attrs.push(rangeSetItem({ name, value, dynamic }, range));
    el.plain = false;
}
// add a raw attr (use this in preTransforms)
function addRawAttr(el, name, value, range) {
    el.attrsMap[name] = value;
    el.attrsList.push(rangeSetItem({ name, value }, range));
}
function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
    (el.directives || (el.directives = [])).push(rangeSetItem({
        name,
        rawName,
        value,
        arg,
        isDynamicArg,
        modifiers
    }, range));
    el.plain = false;
}
function prependModifierMarker(symbol, name, dynamic) {
    return dynamic ? `_p(${name},"${symbol}")` : symbol + name; // mark the event as captured
}
function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
    modifiers = modifiers || emptyObject;
    // warn prevent and passive modifier
    /* istanbul ignore if */
    if (process.env.NODE_ENV !== 'production' && warn && modifiers.prevent && modifiers.passive) {
        warn("passive and prevent can't be used together. " +
            "Passive handler can't prevent default event.", range);
    }
    // normalize click.right and click.middle since they don't actually fire
    // this is technically browser-specific, but at least for now browsers are
    // the only target envs that have right/middle clicks.
    if (modifiers.right) {
        if (dynamic) {
            name = `(${name})==='click'?'contextmenu':(${name})`;
        }
        else if (name === 'click') {
            name = 'contextmenu';
            delete modifiers.right;
        }
    }
    else if (modifiers.middle) {
        if (dynamic) {
            name = `(${name})==='click'?'mouseup':(${name})`;
        }
        else if (name === 'click') {
            name = 'mouseup';
        }
    }
    // check capture modifier
    if (modifiers.capture) {
        delete modifiers.capture;
        name = prependModifierMarker('!', name, dynamic);
    }
    if (modifiers.once) {
        delete modifiers.once;
        name = prependModifierMarker('~', name, dynamic);
    }
    /* istanbul ignore if */
    if (modifiers.passive) {
        delete modifiers.passive;
        name = prependModifierMarker('&', name, dynamic);
    }
    let events;
    if (modifiers.native) {
        delete modifiers.native;
        events = el.nativeEvents || (el.nativeEvents = {});
    }
    else {
        events = el.events || (el.events = {});
    }
    const newHandler = rangeSetItem({ value: value.trim(), dynamic }, range);
    if (modifiers !== emptyObject) {
        newHandler.modifiers = modifiers;
    }
    const handlers = events[name];
    /* istanbul ignore if */
    if (Array.isArray(handlers)) {
        important ? handlers.unshift(newHandler) : handlers.push(newHandler);
    }
    else if (handlers) {
        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
    }
    else {
        events[name] = newHandler;
    }
    el.plain = false;
}
function getRawBindingAttr(el, name) {
    return (el.rawAttrsMap[':' + name] ||
        el.rawAttrsMap['v-bind:' + name] ||
        el.rawAttrsMap[name]);
}
function getBindingAttr(el, name, getStatic) {
    const dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
    if (dynamicValue != null) {
        return parseFilters(dynamicValue);
    }
    else if (getStatic !== false) {
        const staticValue = getAndRemoveAttr(el, name);
        if (staticValue != null) {
            return JSON.stringify(staticValue);
        }
    }
}
// note: this only removes the attr from the Array (attrsList) so that it
// doesn't get processed by processAttrs.
// By default it does NOT remove it from the map (attrsMap) because the map is
// needed during codegen.
function getAndRemoveAttr(el, name, removeFromMap) {
    let val;
    if ((val = el.attrsMap[name]) != null) {
        const list = el.attrsList;
        for (let i = 0, l = list.length; i < l; i++) {
            if (list[i].name === name) {
                list.splice(i, 1);
                break;
            }
        }
    }
    if (removeFromMap) {
        delete el.attrsMap[name];
    }
    return val;
}
function getAndRemoveAttrByRegex(el, name) {
    const list = el.attrsList;
    for (let i = 0, l = list.length; i < l; i++) {
        const attr = list[i];
        if (name.test(attr.name)) {
            list.splice(i, 1);
            return attr;
        }
    }
}
function rangeSetItem(item, range) {
    if (range) {
        if (range.start != null) {
            item.start = range.start;
        }
        if (range.end != null) {
            item.end = range.end;
        }
    }
    return item;
}

function transformNode$1(el, options) {
    const warn = options.warn || baseWarn;
    const staticClass = getAndRemoveAttr(el, 'class');
    if (process.env.NODE_ENV !== 'production' && staticClass) {
        const res = parseText(staticClass, options.delimiters);
        if (res) {
            warn(`class="${staticClass}": ` +
                'Interpolation inside attributes has been removed. ' +
                'Use v-bind or the colon shorthand instead. For example, ' +
                'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
        }
    }
    if (staticClass) {
        el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
    }
    const classBinding = getBindingAttr(el, 'class', false /* getStatic */);
    if (classBinding) {
        el.classBinding = classBinding;
    }
}
function genData$2(el) {
    let data = '';
    if (el.staticClass) {
        data += `staticClass:${el.staticClass},`;
    }
    if (el.classBinding) {
        data += `class:${el.classBinding},`;
    }
    return data;
}
var klass = {
    staticKeys: ['staticClass'],
    transformNode: transformNode$1,
    genData: genData$2
};

const parseStyleText = cached(function (cssText) {
    const res = {};
    const listDelimiter = /;(?![^(]*\))/g;
    const propertyDelimiter = /:(.+)/;
    cssText.split(listDelimiter).forEach(function (item) {
        if (item) {
            const tmp = item.split(propertyDelimiter);
            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
        }
    });
    return res;
});

function transformNode(el, options) {
    const warn = options.warn || baseWarn;
    const staticStyle = getAndRemoveAttr(el, 'style');
    if (staticStyle) {
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production') {
            const res = parseText(staticStyle, options.delimiters);
            if (res) {
                warn(`style="${staticStyle}": ` +
                    'Interpolation inside attributes has been removed. ' +
                    'Use v-bind or the colon shorthand instead. For example, ' +
                    'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
            }
        }
        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
    }
    const styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
    if (styleBinding) {
        el.styleBinding = styleBinding;
    }
}
function genData$1(el) {
    let data = '';
    if (el.staticStyle) {
        data += `staticStyle:${el.staticStyle},`;
    }
    if (el.styleBinding) {
        data += `style:(${el.styleBinding}),`;
    }
    return data;
}
var style = {
    staticKeys: ['staticStyle'],
    transformNode,
    genData: genData$1
};

var he$1 = {exports: {}};

/*! https://mths.be/he v1.2.0 by @mathias | MIT license */

(function (module, exports) {
(function(root) {

		// Detect free variables `exports`.
		var freeExports = exports;

		// Detect free variable `module`.
		var freeModule = module &&
			module.exports == freeExports && module;

		// Detect free variable `global`, from Node.js or Browserified code,
		// and use it as `root`.
		var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal;
		if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
			root = freeGlobal;
		}

		/*--------------------------------------------------------------------------*/

		// All astral symbols.
		var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
		// All ASCII symbols (not just printable ASCII) except those listed in the
		// first column of the overrides table.
		// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
		var regexAsciiWhitelist = /[\x01-\x7F]/g;
		// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
		// code points listed in the first column of the overrides table on
		// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
		var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;

		var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
		var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'};

		var regexEscape = /["&'<>`]/g;
		var escapeMap = {
			'"': '&quot;',
			'&': '&amp;',
			'\'': '&#x27;',
			'<': '&lt;',
			// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
			// following is not strictly necessary unless itâ€™s part of a tag or an
			// unquoted attribute value. Weâ€™re only escaping it to support those
			// situations, and for XML support.
			'>': '&gt;',
			// In Internet Explorer â‰¤ 8, the backtick character can be used
			// to break out of (un)quoted attribute values or HTML comments.
			// See http://html5sec.org/#102, http://html5sec.org/#108, and
			// http://html5sec.org/#133.
			'`': '&#x60;'
		};

		var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
		var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
		var regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;
		var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'};
		var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'};
		var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
		var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];

		/*--------------------------------------------------------------------------*/

		var stringFromCharCode = String.fromCharCode;

		var object = {};
		var hasOwnProperty = object.hasOwnProperty;
		var has = function(object, propertyName) {
			return hasOwnProperty.call(object, propertyName);
		};

		var contains = function(array, value) {
			var index = -1;
			var length = array.length;
			while (++index < length) {
				if (array[index] == value) {
					return true;
				}
			}
			return false;
		};

		var merge = function(options, defaults) {
			if (!options) {
				return defaults;
			}
			var result = {};
			var key;
			for (key in defaults) {
				// A `hasOwnProperty` check is not needed here, since only recognized
				// option names are used anyway. Any others are ignored.
				result[key] = has(options, key) ? options[key] : defaults[key];
			}
			return result;
		};

		// Modified version of `ucs2encode`; see https://mths.be/punycode.
		var codePointToSymbol = function(codePoint, strict) {
			var output = '';
			if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
				// See issue #4:
				// â€œOtherwise, if the number is in the range 0xD800 to 0xDFFF or is
				// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
				// REPLACEMENT CHARACTER.â€
				if (strict) {
					parseError('character reference outside the permissible Unicode range');
				}
				return '\uFFFD';
			}
			if (has(decodeMapNumeric, codePoint)) {
				if (strict) {
					parseError('disallowed character reference');
				}
				return decodeMapNumeric[codePoint];
			}
			if (strict && contains(invalidReferenceCodePoints, codePoint)) {
				parseError('disallowed character reference');
			}
			if (codePoint > 0xFFFF) {
				codePoint -= 0x10000;
				output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
				codePoint = 0xDC00 | codePoint & 0x3FF;
			}
			output += stringFromCharCode(codePoint);
			return output;
		};

		var hexEscape = function(codePoint) {
			return '&#x' + codePoint.toString(16).toUpperCase() + ';';
		};

		var decEscape = function(codePoint) {
			return '&#' + codePoint + ';';
		};

		var parseError = function(message) {
			throw Error('Parse error: ' + message);
		};

		/*--------------------------------------------------------------------------*/

		var encode = function(string, options) {
			options = merge(options, encode.options);
			var strict = options.strict;
			if (strict && regexInvalidRawCodePoint.test(string)) {
				parseError('forbidden code point');
			}
			var encodeEverything = options.encodeEverything;
			var useNamedReferences = options.useNamedReferences;
			var allowUnsafeSymbols = options.allowUnsafeSymbols;
			var escapeCodePoint = options.decimal ? decEscape : hexEscape;

			var escapeBmpSymbol = function(symbol) {
				return escapeCodePoint(symbol.charCodeAt(0));
			};

			if (encodeEverything) {
				// Encode ASCII symbols.
				string = string.replace(regexAsciiWhitelist, function(symbol) {
					// Use named references if requested & possible.
					if (useNamedReferences && has(encodeMap, symbol)) {
						return '&' + encodeMap[symbol] + ';';
					}
					return escapeBmpSymbol(symbol);
				});
				// Shorten a few escapes that represent two symbols, of which at least one
				// is within the ASCII range.
				if (useNamedReferences) {
					string = string
						.replace(/&gt;\u20D2/g, '&nvgt;')
						.replace(/&lt;\u20D2/g, '&nvlt;')
						.replace(/&#x66;&#x6A;/g, '&fjlig;');
				}
				// Encode non-ASCII symbols.
				if (useNamedReferences) {
					// Encode non-ASCII symbols that can be replaced with a named reference.
					string = string.replace(regexEncodeNonAscii, function(string) {
						// Note: there is no need to check `has(encodeMap, string)` here.
						return '&' + encodeMap[string] + ';';
					});
				}
				// Note: any remaining non-ASCII symbols are handled outside of the `if`.
			} else if (useNamedReferences) {
				// Apply named character references.
				// Encode `<>"'&` using named character references.
				if (!allowUnsafeSymbols) {
					string = string.replace(regexEscape, function(string) {
						return '&' + encodeMap[string] + ';'; // no need to check `has()` here
					});
				}
				// Shorten escapes that represent two symbols, of which at least one is
				// `<>"'&`.
				string = string
					.replace(/&gt;\u20D2/g, '&nvgt;')
					.replace(/&lt;\u20D2/g, '&nvlt;');
				// Encode non-ASCII symbols that can be replaced with a named reference.
				string = string.replace(regexEncodeNonAscii, function(string) {
					// Note: there is no need to check `has(encodeMap, string)` here.
					return '&' + encodeMap[string] + ';';
				});
			} else if (!allowUnsafeSymbols) {
				// Encode `<>"'&` using hexadecimal escapes, now that theyâ€™re not handled
				// using named character references.
				string = string.replace(regexEscape, escapeBmpSymbol);
			}
			return string
				// Encode astral symbols.
				.replace(regexAstralSymbols, function($0) {
					// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
					var high = $0.charCodeAt(0);
					var low = $0.charCodeAt(1);
					var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
					return escapeCodePoint(codePoint);
				})
				// Encode any remaining BMP symbols that are not printable ASCII symbols
				// using a hexadecimal escape.
				.replace(regexBmpWhitelist, escapeBmpSymbol);
		};
		// Expose default options (so they can be overridden globally).
		encode.options = {
			'allowUnsafeSymbols': false,
			'encodeEverything': false,
			'strict': false,
			'useNamedReferences': false,
			'decimal' : false
		};

		var decode = function(html, options) {
			options = merge(options, decode.options);
			var strict = options.strict;
			if (strict && regexInvalidEntity.test(html)) {
				parseError('malformed character reference');
			}
			return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {
				var codePoint;
				var semicolon;
				var decDigits;
				var hexDigits;
				var reference;
				var next;

				if ($1) {
					reference = $1;
					// Note: there is no need to check `has(decodeMap, reference)`.
					return decodeMap[reference];
				}

				if ($2) {
					// Decode named character references without trailing `;`, e.g. `&amp`.
					// This is only a parse error if it gets converted to `&`, or if it is
					// followed by `=` in an attribute context.
					reference = $2;
					next = $3;
					if (next && options.isAttributeValue) {
						if (strict && next == '=') {
							parseError('`&` did not start a character reference');
						}
						return $0;
					} else {
						if (strict) {
							parseError(
								'named character reference was not terminated by a semicolon'
							);
						}
						// Note: there is no need to check `has(decodeMapLegacy, reference)`.
						return decodeMapLegacy[reference] + (next || '');
					}
				}

				if ($4) {
					// Decode decimal escapes, e.g. `&#119558;`.
					decDigits = $4;
					semicolon = $5;
					if (strict && !semicolon) {
						parseError('character reference was not terminated by a semicolon');
					}
					codePoint = parseInt(decDigits, 10);
					return codePointToSymbol(codePoint, strict);
				}

				if ($6) {
					// Decode hexadecimal escapes, e.g. `&#x1D306;`.
					hexDigits = $6;
					semicolon = $7;
					if (strict && !semicolon) {
						parseError('character reference was not terminated by a semicolon');
					}
					codePoint = parseInt(hexDigits, 16);
					return codePointToSymbol(codePoint, strict);
				}

				// If weâ€™re still here, `if ($7)` is implied; itâ€™s an ambiguous
				// ampersand for sure. https://mths.be/notes/ambiguous-ampersands
				if (strict) {
					parseError(
						'named character reference was not terminated by a semicolon'
					);
				}
				return $0;
			});
		};
		// Expose default options (so they can be overridden globally).
		decode.options = {
			'isAttributeValue': false,
			'strict': false
		};

		var escape = function(string) {
			return string.replace(regexEscape, function($0) {
				// Note: there is no need to check `has(escapeMap, $0)` here.
				return escapeMap[$0];
			});
		};

		/*--------------------------------------------------------------------------*/

		var he = {
			'version': '1.2.0',
			'encode': encode,
			'decode': decode,
			'escape': escape,
			'unescape': decode
		};

		// Some AMD build optimizers, like r.js, check for specific condition patterns
		// like the following:
		if (freeExports && !freeExports.nodeType) {
			if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
				freeModule.exports = he;
			} else { // in Narwhal or RingoJS v0.7.0-
				for (var key in he) {
					has(he, key) && (freeExports[key] = he[key]);
				}
			}
		} else { // in Rhino or a web browser
			root.he = he;
		}

	}(commonjsGlobal));
} (he$1, he$1.exports));

var he = he$1.exports;

/**
 * Cross-platform code generation for component v-model
 */
function genComponentModel(el, value, modifiers) {
    const { number, trim } = modifiers || {};
    const baseValueExpression = '$$v';
    let valueExpression = baseValueExpression;
    if (trim) {
        valueExpression =
            `(typeof ${baseValueExpression} === 'string'` +
                `? ${baseValueExpression}.trim()` +
                `: ${baseValueExpression})`;
    }
    if (number) {
        valueExpression = `_n(${valueExpression})`;
    }
    const assignment = genAssignmentCode(value, valueExpression);
    el.model = {
        value: `(${value})`,
        expression: JSON.stringify(value),
        callback: `function (${baseValueExpression}) {${assignment}}`
    };
}
/**
 * Cross-platform codegen helper for generating v-model value assignment code.
 */
function genAssignmentCode(value, assignment) {
    const res = parseModel(value);
    if (res.key === null) {
        return `${value}=${assignment}`;
    }
    else {
        return `$set(${res.exp}, ${res.key}, ${assignment})`;
    }
}
/**
 * Parse a v-model expression into a base path and a final key segment.
 * Handles both dot-path and possible square brackets.
 *
 * Possible cases:
 *
 * - test
 * - test[key]
 * - test[test1[key]]
 * - test["a"][key]
 * - xxx.test[a[a].test1[key]]
 * - test.xxx.a["asa"][test1[key]]
 *
 */
let len, str$1, chr, index, expressionPos, expressionEndPos;
function parseModel(val) {
    // Fix https://github.com/vuejs/vue/pull/7730
    // allow v-model="obj.val " (trailing whitespace)
    val = val.trim();
    len = val.length;
    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
        index = val.lastIndexOf('.');
        if (index > -1) {
            return {
                exp: val.slice(0, index),
                key: '"' + val.slice(index + 1) + '"'
            };
        }
        else {
            return {
                exp: val,
                key: null
            };
        }
    }
    str$1 = val;
    index = expressionPos = expressionEndPos = 0;
    while (!eof()) {
        chr = next();
        /* istanbul ignore if */
        if (isStringStart(chr)) {
            parseString(chr);
        }
        else if (chr === 0x5b) {
            parseBracket(chr);
        }
    }
    return {
        exp: val.slice(0, expressionPos),
        key: val.slice(expressionPos + 1, expressionEndPos)
    };
}
function next() {
    return str$1.charCodeAt(++index);
}
function eof() {
    return index >= len;
}
function isStringStart(chr) {
    return chr === 0x22 || chr === 0x27;
}
function parseBracket(chr) {
    let inBracket = 1;
    expressionPos = index;
    while (!eof()) {
        chr = next();
        if (isStringStart(chr)) {
            parseString(chr);
            continue;
        }
        if (chr === 0x5b)
            inBracket++;
        if (chr === 0x5d)
            inBracket--;
        if (inBracket === 0) {
            expressionEndPos = index;
            break;
        }
    }
}
function parseString(chr) {
    const stringQuote = chr;
    while (!eof()) {
        chr = next();
        if (chr === stringQuote) {
            break;
        }
    }
}

const onRE = /^@|^v-on:/;
const dirRE = /^v-|^@|^:|^#/;
const forAliasRE$1 = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
const forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
const stripParensRE = /^\(|\)$/g;
const dynamicArgRE = /^\[.*\]$/;
const argRE = /:(.*)$/;
const bindRE = /^:|^\.|^v-bind:/;
const modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
const slotRE = /^v-slot(:|$)|^#/;
const lineBreakRE = /[\r\n]/;
const whitespaceRE = /[ \f\t\r\n]+/g;
const invalidAttributeRE = /[\s"'<>\/=]/;
const decodeHTMLCached = cached(he.decode);
const emptySlotScopeToken = `_empty_`;
// configurable state
let warn$2;
let delimiters;
let transforms;
let preTransforms;
let postTransforms;
let platformIsPreTag;
let platformMustUseProp;
let platformGetTagNamespace;
let maybeComponent;
function createASTElement(tag, attrs, parent) {
    return {
        type: 1,
        tag,
        attrsList: attrs,
        attrsMap: makeAttrsMap(attrs),
        rawAttrsMap: {},
        parent,
        children: []
    };
}
/**
 * Convert HTML string to AST.
 */
function parse$1(template, options) {
    warn$2 = options.warn || baseWarn;
    platformIsPreTag = options.isPreTag || no;
    platformMustUseProp = options.mustUseProp || no;
    platformGetTagNamespace = options.getTagNamespace || no;
    const isReservedTag = options.isReservedTag || no;
    maybeComponent = (el) => !!(el.component ||
        el.attrsMap[':is'] ||
        el.attrsMap['v-bind:is'] ||
        !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
    transforms = pluckModuleFunction(options.modules, 'transformNode');
    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
    delimiters = options.delimiters;
    const stack = [];
    const preserveWhitespace = options.preserveWhitespace !== false;
    const whitespaceOption = options.whitespace;
    let root;
    let currentParent;
    let inVPre = false;
    let inPre = false;
    let warned = false;
    function warnOnce(msg, range) {
        if (!warned) {
            warned = true;
            warn$2(msg, range);
        }
    }
    function closeElement(element) {
        trimEndingWhitespace(element);
        if (!inVPre && !element.processed) {
            element = processElement(element, options);
        }
        // tree management
        if (!stack.length && element !== root) {
            // allow root elements with v-if, v-else-if and v-else
            if (root.if && (element.elseif || element.else)) {
                if (process.env.NODE_ENV !== 'production') {
                    checkRootConstraints(element);
                }
                addIfCondition(root, {
                    exp: element.elseif,
                    block: element
                });
            }
            else if (process.env.NODE_ENV !== 'production') {
                warnOnce(`Component template should contain exactly one root element. ` +
                    `If you are using v-if on multiple elements, ` +
                    `use v-else-if to chain them instead.`, { start: element.start });
            }
        }
        if (currentParent && !element.forbidden) {
            if (element.elseif || element.else) {
                processIfConditions(element, currentParent);
            }
            else {
                if (element.slotScope) {
                    // scoped slot
                    // keep it in the children list so that v-else(-if) conditions can
                    // find it as the prev node.
                    const name = element.slotTarget || '"default"';
                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;
                }
                currentParent.children.push(element);
                element.parent = currentParent;
            }
        }
        // final children cleanup
        // filter out scoped slots
        element.children = element.children.filter(c => !c.slotScope);
        // remove trailing whitespace node again
        trimEndingWhitespace(element);
        // check pre state
        if (element.pre) {
            inVPre = false;
        }
        if (platformIsPreTag(element.tag)) {
            inPre = false;
        }
        // apply post-transforms
        for (let i = 0; i < postTransforms.length; i++) {
            postTransforms[i](element, options);
        }
    }
    function trimEndingWhitespace(el) {
        // remove trailing whitespace node
        if (!inPre) {
            let lastNode;
            while ((lastNode = el.children[el.children.length - 1]) &&
                lastNode.type === 3 &&
                lastNode.text === ' ') {
                el.children.pop();
            }
        }
    }
    function checkRootConstraints(el) {
        if (el.tag === 'slot' || el.tag === 'template') {
            warnOnce(`Cannot use <${el.tag}> as component root element because it may ` +
                'contain multiple nodes.', { start: el.start });
        }
        if (el.attrsMap.hasOwnProperty('v-for')) {
            warnOnce('Cannot use v-for on stateful component root element because ' +
                'it renders multiple elements.', el.rawAttrsMap['v-for']);
        }
    }
    parseHTML(template, {
        warn: warn$2,
        expectHTML: options.expectHTML,
        isUnaryTag: options.isUnaryTag,
        canBeLeftOpenTag: options.canBeLeftOpenTag,
        shouldDecodeNewlines: options.shouldDecodeNewlines,
        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
        shouldKeepComment: options.comments,
        outputSourceRange: options.outputSourceRange,
        start(tag, attrs, unary, start, end) {
            // check namespace.
            // inherit parent ns if there is one
            const ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
            // handle IE svg bug
            /* istanbul ignore if */
            if (isIE && ns === 'svg') {
                attrs = guardIESVGBug(attrs);
            }
            let element = createASTElement(tag, attrs, currentParent);
            if (ns) {
                element.ns = ns;
            }
            if (process.env.NODE_ENV !== 'production') {
                if (options.outputSourceRange) {
                    element.start = start;
                    element.end = end;
                    element.rawAttrsMap = element.attrsList.reduce((cumulated, attr) => {
                        cumulated[attr.name] = attr;
                        return cumulated;
                    }, {});
                }
                attrs.forEach(attr => {
                    if (invalidAttributeRE.test(attr.name)) {
                        warn$2(`Invalid dynamic argument expression: attribute names cannot contain ` +
                            `spaces, quotes, <, >, / or =.`, options.outputSourceRange
                            ? {
                                start: attr.start + attr.name.indexOf(`[`),
                                end: attr.start + attr.name.length
                            }
                            : undefined);
                    }
                });
            }
            if (isForbiddenTag(element) && !isServerRendering()) {
                element.forbidden = true;
                process.env.NODE_ENV !== 'production' &&
                    warn$2('Templates should only be responsible for mapping the state to the ' +
                        'UI. Avoid placing tags with side-effects in your templates, such as ' +
                        `<${tag}>` +
                        ', as they will not be parsed.', { start: element.start });
            }
            // apply pre-transforms
            for (let i = 0; i < preTransforms.length; i++) {
                element = preTransforms[i](element, options) || element;
            }
            if (!inVPre) {
                processPre(element);
                if (element.pre) {
                    inVPre = true;
                }
            }
            if (platformIsPreTag(element.tag)) {
                inPre = true;
            }
            if (inVPre) {
                processRawAttrs(element);
            }
            else if (!element.processed) {
                // structural directives
                processFor(element);
                processIf(element);
                processOnce(element);
            }
            if (!root) {
                root = element;
                if (process.env.NODE_ENV !== 'production') {
                    checkRootConstraints(root);
                }
            }
            if (!unary) {
                currentParent = element;
                stack.push(element);
            }
            else {
                closeElement(element);
            }
        },
        end(tag, start, end) {
            const element = stack[stack.length - 1];
            // pop stack
            stack.length -= 1;
            currentParent = stack[stack.length - 1];
            if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                element.end = end;
            }
            closeElement(element);
        },
        chars(text, start, end) {
            if (!currentParent) {
                if (process.env.NODE_ENV !== 'production') {
                    if (text === template) {
                        warnOnce('Component template requires a root element, rather than just text.', { start });
                    }
                    else if ((text = text.trim())) {
                        warnOnce(`text "${text}" outside root element will be ignored.`, {
                            start
                        });
                    }
                }
                return;
            }
            // IE textarea placeholder bug
            /* istanbul ignore if */
            if (isIE &&
                currentParent.tag === 'textarea' &&
                currentParent.attrsMap.placeholder === text) {
                return;
            }
            const children = currentParent.children;
            if (inPre || text.trim()) {
                text = isTextTag(currentParent)
                    ? text
                    : decodeHTMLCached(text);
            }
            else if (!children.length) {
                // remove the whitespace-only node right after an opening tag
                text = '';
            }
            else if (whitespaceOption) {
                if (whitespaceOption === 'condense') {
                    // in condense mode, remove the whitespace node if it contains
                    // line break, otherwise condense to a single space
                    text = lineBreakRE.test(text) ? '' : ' ';
                }
                else {
                    text = ' ';
                }
            }
            else {
                text = preserveWhitespace ? ' ' : '';
            }
            if (text) {
                if (!inPre && whitespaceOption === 'condense') {
                    // condense consecutive whitespaces into single space
                    text = text.replace(whitespaceRE, ' ');
                }
                let res;
                let child;
                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
                    child = {
                        type: 2,
                        expression: res.expression,
                        tokens: res.tokens,
                        text
                    };
                }
                else if (text !== ' ' ||
                    !children.length ||
                    children[children.length - 1].text !== ' ') {
                    child = {
                        type: 3,
                        text
                    };
                }
                if (child) {
                    if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                        child.start = start;
                        child.end = end;
                    }
                    children.push(child);
                }
            }
        },
        comment(text, start, end) {
            // adding anything as a sibling to the root node is forbidden
            // comments should still be allowed, but ignored
            if (currentParent) {
                const child = {
                    type: 3,
                    text,
                    isComment: true
                };
                if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                    child.start = start;
                    child.end = end;
                }
                currentParent.children.push(child);
            }
        }
    });
    return root;
}
function processPre(el) {
    if (getAndRemoveAttr(el, 'v-pre') != null) {
        el.pre = true;
    }
}
function processRawAttrs(el) {
    const list = el.attrsList;
    const len = list.length;
    if (len) {
        const attrs = (el.attrs = new Array(len));
        for (let i = 0; i < len; i++) {
            attrs[i] = {
                name: list[i].name,
                value: JSON.stringify(list[i].value)
            };
            if (list[i].start != null) {
                attrs[i].start = list[i].start;
                attrs[i].end = list[i].end;
            }
        }
    }
    else if (!el.pre) {
        // non root node in pre blocks with no attributes
        el.plain = true;
    }
}
function processElement(element, options) {
    processKey(element);
    // determine whether this is a plain element after
    // removing structural attributes
    element.plain =
        !element.key && !element.scopedSlots && !element.attrsList.length;
    processRef(element);
    processSlotContent(element);
    processSlotOutlet(element);
    processComponent(element);
    for (let i = 0; i < transforms.length; i++) {
        element = transforms[i](element, options) || element;
    }
    processAttrs(element);
    return element;
}
function processKey(el) {
    const exp = getBindingAttr(el, 'key');
    if (exp) {
        if (process.env.NODE_ENV !== 'production') {
            if (el.tag === 'template') {
                warn$2(`<template> cannot be keyed. Place the key on real elements instead.`, getRawBindingAttr(el, 'key'));
            }
            if (el.for) {
                const iterator = el.iterator2 || el.iterator1;
                const parent = el.parent;
                if (iterator &&
                    iterator === exp &&
                    parent &&
                    parent.tag === 'transition-group') {
                    warn$2(`Do not use v-for index as key on <transition-group> children, ` +
                        `this is the same as not using keys.`, getRawBindingAttr(el, 'key'), true /* tip */);
                }
            }
        }
        el.key = exp;
    }
}
function processRef(el) {
    const ref = getBindingAttr(el, 'ref');
    if (ref) {
        el.ref = ref;
        el.refInFor = checkInFor(el);
    }
}
function processFor(el) {
    let exp;
    if ((exp = getAndRemoveAttr(el, 'v-for'))) {
        const res = parseFor(exp);
        if (res) {
            extend(el, res);
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn$2(`Invalid v-for expression: ${exp}`, el.rawAttrsMap['v-for']);
        }
    }
}
function parseFor(exp) {
    const inMatch = exp.match(forAliasRE$1);
    if (!inMatch)
        return;
    const res = {};
    res.for = inMatch[2].trim();
    const alias = inMatch[1].trim().replace(stripParensRE, '');
    const iteratorMatch = alias.match(forIteratorRE);
    if (iteratorMatch) {
        res.alias = alias.replace(forIteratorRE, '').trim();
        res.iterator1 = iteratorMatch[1].trim();
        if (iteratorMatch[2]) {
            res.iterator2 = iteratorMatch[2].trim();
        }
    }
    else {
        res.alias = alias;
    }
    return res;
}
function processIf(el) {
    const exp = getAndRemoveAttr(el, 'v-if');
    if (exp) {
        el.if = exp;
        addIfCondition(el, {
            exp: exp,
            block: el
        });
    }
    else {
        if (getAndRemoveAttr(el, 'v-else') != null) {
            el.else = true;
        }
        const elseif = getAndRemoveAttr(el, 'v-else-if');
        if (elseif) {
            el.elseif = elseif;
        }
    }
}
function processIfConditions(el, parent) {
    const prev = findPrevElement(parent.children);
    if (prev && prev.if) {
        addIfCondition(prev, {
            exp: el.elseif,
            block: el
        });
    }
    else if (process.env.NODE_ENV !== 'production') {
        warn$2(`v-${el.elseif ? 'else-if="' + el.elseif + '"' : 'else'} ` +
            `used on element <${el.tag}> without corresponding v-if.`, el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
    }
}
function findPrevElement(children) {
    let i = children.length;
    while (i--) {
        if (children[i].type === 1) {
            return children[i];
        }
        else {
            if (process.env.NODE_ENV !== 'production' && children[i].text !== ' ') {
                warn$2(`text "${children[i].text.trim()}" between v-if and v-else(-if) ` +
                    `will be ignored.`, children[i]);
            }
            children.pop();
        }
    }
}
function addIfCondition(el, condition) {
    if (!el.ifConditions) {
        el.ifConditions = [];
    }
    el.ifConditions.push(condition);
}
function processOnce(el) {
    const once = getAndRemoveAttr(el, 'v-once');
    if (once != null) {
        el.once = true;
    }
}
// handle content being passed to a component as slot,
// e.g. <template slot="xxx">, <div slot-scope="xxx">
function processSlotContent(el) {
    let slotScope;
    if (el.tag === 'template') {
        slotScope = getAndRemoveAttr(el, 'scope');
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && slotScope) {
            warn$2(`the "scope" attribute for scoped slots have been deprecated and ` +
                `replaced by "slot-scope" since 2.5. The new "slot-scope" attribute ` +
                `can also be used on plain elements in addition to <template> to ` +
                `denote scoped slots.`, el.rawAttrsMap['scope'], true);
        }
        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
    }
    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production' && el.attrsMap['v-for']) {
            warn$2(`Ambiguous combined usage of slot-scope and v-for on <${el.tag}> ` +
                `(v-for takes higher priority). Use a wrapper <template> for the ` +
                `scoped slot to make it clearer.`, el.rawAttrsMap['slot-scope'], true);
        }
        el.slotScope = slotScope;
    }
    // slot="xxx"
    const slotTarget = getBindingAttr(el, 'slot');
    if (slotTarget) {
        el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
        // preserve slot as an attribute for native shadow DOM compat
        // only for non-scoped slots.
        if (el.tag !== 'template' && !el.slotScope) {
            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
        }
    }
    // 2.6 v-slot syntax
    {
        if (el.tag === 'template') {
            // v-slot on <template>
            const slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                if (process.env.NODE_ENV !== 'production') {
                    if (el.slotTarget || el.slotScope) {
                        warn$2(`Unexpected mixed usage of different slot syntaxes.`, el);
                    }
                    if (el.parent && !maybeComponent(el.parent)) {
                        warn$2(`<template v-slot> can only appear at the root level inside ` +
                            `the receiving component`, el);
                    }
                }
                const { name, dynamic } = getSlotName(slotBinding);
                el.slotTarget = name;
                el.slotTargetDynamic = dynamic;
                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
            }
        }
        else {
            // v-slot on component, denotes default slot
            const slotBinding = getAndRemoveAttrByRegex(el, slotRE);
            if (slotBinding) {
                if (process.env.NODE_ENV !== 'production') {
                    if (!maybeComponent(el)) {
                        warn$2(`v-slot can only be used on components or <template>.`, slotBinding);
                    }
                    if (el.slotScope || el.slotTarget) {
                        warn$2(`Unexpected mixed usage of different slot syntaxes.`, el);
                    }
                    if (el.scopedSlots) {
                        warn$2(`To avoid scope ambiguity, the default slot should also use ` +
                            `<template> syntax when there are other named slots.`, slotBinding);
                    }
                }
                // add the component's children to its default slot
                const slots = el.scopedSlots || (el.scopedSlots = {});
                const { name, dynamic } = getSlotName(slotBinding);
                const slotContainer = (slots[name] = createASTElement('template', [], el));
                slotContainer.slotTarget = name;
                slotContainer.slotTargetDynamic = dynamic;
                slotContainer.children = el.children.filter((c) => {
                    if (!c.slotScope) {
                        c.parent = slotContainer;
                        return true;
                    }
                });
                slotContainer.slotScope = slotBinding.value || emptySlotScopeToken;
                // remove children as they are returned from scopedSlots now
                el.children = [];
                // mark el non-plain so data gets generated
                el.plain = false;
            }
        }
    }
}
function getSlotName(binding) {
    let name = binding.name.replace(slotRE, '');
    if (!name) {
        if (binding.name[0] !== '#') {
            name = 'default';
        }
        else if (process.env.NODE_ENV !== 'production') {
            warn$2(`v-slot shorthand syntax requires a slot name.`, binding);
        }
    }
    return dynamicArgRE.test(name)
        ? // dynamic [name]
            { name: name.slice(1, -1), dynamic: true }
        : // static name
            { name: `"${name}"`, dynamic: false };
}
// handle <slot/> outlets
function processSlotOutlet(el) {
    if (el.tag === 'slot') {
        el.slotName = getBindingAttr(el, 'name');
        if (process.env.NODE_ENV !== 'production' && el.key) {
            warn$2(`\`key\` does not work on <slot> because slots are abstract outlets ` +
                `and can possibly expand into multiple elements. ` +
                `Use the key on a wrapping element instead.`, getRawBindingAttr(el, 'key'));
        }
    }
}
function processComponent(el) {
    let binding;
    if ((binding = getBindingAttr(el, 'is'))) {
        el.component = binding;
    }
    if (getAndRemoveAttr(el, 'inline-template') != null) {
        el.inlineTemplate = true;
    }
}
function processAttrs(el) {
    const list = el.attrsList;
    let i, l, name, rawName, value, modifiers, syncGen, isDynamic;
    for (i = 0, l = list.length; i < l; i++) {
        name = rawName = list[i].name;
        value = list[i].value;
        if (dirRE.test(name)) {
            // mark element as dynamic
            el.hasBindings = true;
            // modifiers
            modifiers = parseModifiers(name.replace(dirRE, ''));
            // support .foo shorthand syntax for the .prop modifier
            if (modifiers) {
                name = name.replace(modifierRE, '');
            }
            if (bindRE.test(name)) {
                // v-bind
                name = name.replace(bindRE, '');
                value = parseFilters(value);
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                if (process.env.NODE_ENV !== 'production' && value.trim().length === 0) {
                    warn$2(`The value for a v-bind expression cannot be empty. Found in "v-bind:${name}"`);
                }
                if (modifiers) {
                    if (modifiers.prop && !isDynamic) {
                        name = camelize(name);
                        if (name === 'innerHtml')
                            name = 'innerHTML';
                    }
                    if (modifiers.camel && !isDynamic) {
                        name = camelize(name);
                    }
                    if (modifiers.sync) {
                        syncGen = genAssignmentCode(value, `$event`);
                        if (!isDynamic) {
                            addHandler(el, `update:${camelize(name)}`, syncGen, null, false, warn$2, list[i]);
                            if (hyphenate(name) !== camelize(name)) {
                                addHandler(el, `update:${hyphenate(name)}`, syncGen, null, false, warn$2, list[i]);
                            }
                        }
                        else {
                            // handler w/ dynamic event name
                            addHandler(el, `"update:"+(${name})`, syncGen, null, false, warn$2, list[i], true // dynamic
                            );
                        }
                    }
                }
                if ((modifiers && modifiers.prop) ||
                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
                    addProp(el, name, value, list[i], isDynamic);
                }
                else {
                    addAttr(el, name, value, list[i], isDynamic);
                }
            }
            else if (onRE.test(name)) {
                // v-on
                name = name.replace(onRE, '');
                isDynamic = dynamicArgRE.test(name);
                if (isDynamic) {
                    name = name.slice(1, -1);
                }
                addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);
            }
            else {
                // normal directives
                name = name.replace(dirRE, '');
                // parse arg
                const argMatch = name.match(argRE);
                let arg = argMatch && argMatch[1];
                isDynamic = false;
                if (arg) {
                    name = name.slice(0, -(arg.length + 1));
                    if (dynamicArgRE.test(arg)) {
                        arg = arg.slice(1, -1);
                        isDynamic = true;
                    }
                }
                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
                if (process.env.NODE_ENV !== 'production' && name === 'model') {
                    checkForAliasModel(el, value);
                }
            }
        }
        else {
            // literal attribute
            if (process.env.NODE_ENV !== 'production') {
                const res = parseText(value, delimiters);
                if (res) {
                    warn$2(`${name}="${value}": ` +
                        'Interpolation inside attributes has been removed. ' +
                        'Use v-bind or the colon shorthand instead. For example, ' +
                        'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
                }
            }
            addAttr(el, name, JSON.stringify(value), list[i]);
            // #6887 firefox doesn't update muted state if set via attribute
            // even immediately after element creation
            if (!el.component &&
                name === 'muted' &&
                platformMustUseProp(el.tag, el.attrsMap.type, name)) {
                addProp(el, name, 'true', list[i]);
            }
        }
    }
}
function checkInFor(el) {
    let parent = el;
    while (parent) {
        if (parent.for !== undefined) {
            return true;
        }
        parent = parent.parent;
    }
    return false;
}
function parseModifiers(name) {
    const match = name.match(modifierRE);
    if (match) {
        const ret = {};
        match.forEach(m => {
            ret[m.slice(1)] = true;
        });
        return ret;
    }
}
function makeAttrsMap(attrs) {
    const map = {};
    for (let i = 0, l = attrs.length; i < l; i++) {
        if (process.env.NODE_ENV !== 'production' && map[attrs[i].name] && !isIE && !isEdge) {
            warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);
        }
        map[attrs[i].name] = attrs[i].value;
    }
    return map;
}
// for script (e.g. type="x/template") or style, do not decode content
function isTextTag(el) {
    return el.tag === 'script' || el.tag === 'style';
}
function isForbiddenTag(el) {
    return (el.tag === 'style' ||
        (el.tag === 'script' &&
            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
}
const ieNSBug = /^xmlns:NS\d+/;
const ieNSPrefix = /^NS\d+:/;
/* istanbul ignore next */
function guardIESVGBug(attrs) {
    const res = [];
    for (let i = 0; i < attrs.length; i++) {
        const attr = attrs[i];
        if (!ieNSBug.test(attr.name)) {
            attr.name = attr.name.replace(ieNSPrefix, '');
            res.push(attr);
        }
    }
    return res;
}
function checkForAliasModel(el, value) {
    let _el = el;
    while (_el) {
        if (_el.for && _el.alias === value) {
            warn$2(`<${el.tag} v-model="${value}">: ` +
                `You are binding v-model directly to a v-for iteration alias. ` +
                `This will not be able to modify the v-for source array because ` +
                `writing to the alias is like modifying a function local variable. ` +
                `Consider using an array of objects and use v-model on an object property instead.`, el.rawAttrsMap['v-model']);
        }
        _el = _el.parent;
    }
}

/**
 * Expand input[v-model] with dynamic type bindings into v-if-else chains
 * Turn this:
 *   <input v-model="data[type]" :type="type">
 * into this:
 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
 *   <input v-else :type="type" v-model="data[type]">
 */
function preTransformNode(el, options) {
    if (el.tag === 'input') {
        const map = el.attrsMap;
        if (!map['v-model']) {
            return;
        }
        let typeBinding;
        if (map[':type'] || map['v-bind:type']) {
            typeBinding = getBindingAttr(el, 'type');
        }
        if (!map.type && !typeBinding && map['v-bind']) {
            typeBinding = `(${map['v-bind']}).type`;
        }
        if (typeBinding) {
            const ifCondition = getAndRemoveAttr(el, 'v-if', true);
            const ifConditionExtra = ifCondition ? `&&(${ifCondition})` : ``;
            const hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
            const elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
            // 1. checkbox
            const branch0 = cloneASTElement(el);
            // process for on the main node
            processFor(branch0);
            addRawAttr(branch0, 'type', 'checkbox');
            processElement(branch0, options);
            branch0.processed = true; // prevent it from double-processed
            branch0.if = `(${typeBinding})==='checkbox'` + ifConditionExtra;
            addIfCondition(branch0, {
                exp: branch0.if,
                block: branch0
            });
            // 2. add radio else-if condition
            const branch1 = cloneASTElement(el);
            getAndRemoveAttr(branch1, 'v-for', true);
            addRawAttr(branch1, 'type', 'radio');
            processElement(branch1, options);
            addIfCondition(branch0, {
                exp: `(${typeBinding})==='radio'` + ifConditionExtra,
                block: branch1
            });
            // 3. other
            const branch2 = cloneASTElement(el);
            getAndRemoveAttr(branch2, 'v-for', true);
            addRawAttr(branch2, ':type', typeBinding);
            processElement(branch2, options);
            addIfCondition(branch0, {
                exp: ifCondition,
                block: branch2
            });
            if (hasElse) {
                branch0.else = true;
            }
            else if (elseIfCondition) {
                branch0.elseif = elseIfCondition;
            }
            return branch0;
        }
    }
}
function cloneASTElement(el) {
    return createASTElement(el.tag, el.attrsList.slice(), el.parent);
}
var model$1 = {
    preTransformNode
};

var modules = [klass, style, model$1];

let warn$1;
// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
const RANGE_TOKEN = '__r';
function model(el, dir, _warn) {
    warn$1 = _warn;
    const value = dir.value;
    const modifiers = dir.modifiers;
    const tag = el.tag;
    const type = el.attrsMap.type;
    if (process.env.NODE_ENV !== 'production') {
        // inputs with type="file" are read only and setting the input's
        // value will throw an error.
        if (tag === 'input' && type === 'file') {
            warn$1(`<${el.tag} v-model="${value}" type="file">:\n` +
                `File inputs are read only. Use a v-on:change listener instead.`, el.rawAttrsMap['v-model']);
        }
    }
    if (el.component) {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    else if (tag === 'select') {
        genSelect(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'checkbox') {
        genCheckboxModel(el, value, modifiers);
    }
    else if (tag === 'input' && type === 'radio') {
        genRadioModel(el, value, modifiers);
    }
    else if (tag === 'input' || tag === 'textarea') {
        genDefaultModel(el, value, modifiers);
    }
    else {
        genComponentModel(el, value, modifiers);
        // component v-model doesn't need extra runtime
        return false;
    }
    // ensure runtime directive metadata
    return true;
}
function genCheckboxModel(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    const valueBinding = getBindingAttr(el, 'value') || 'null';
    const trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
    const falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
    addProp(el, 'checked', `Array.isArray(${value})` +
        `?_i(${value},${valueBinding})>-1` +
        (trueValueBinding === 'true'
            ? `:(${value})`
            : `:_q(${value},${trueValueBinding})`));
    addHandler(el, 'change', `var $$a=${value},` +
        '$$el=$event.target,' +
        `$$c=$$el.checked?(${trueValueBinding}):(${falseValueBinding});` +
        'if(Array.isArray($$a)){' +
        `var $$v=${number ? '_n(' + valueBinding + ')' : valueBinding},` +
        '$$i=_i($$a,$$v);' +
        `if($$el.checked){$$i<0&&(${genAssignmentCode(value, '$$a.concat([$$v])')})}` +
        `else{$$i>-1&&(${genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')})}` +
        `}else{${genAssignmentCode(value, '$$c')}}`, null, true);
}
function genRadioModel(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    let valueBinding = getBindingAttr(el, 'value') || 'null';
    valueBinding = number ? `_n(${valueBinding})` : valueBinding;
    addProp(el, 'checked', `_q(${value},${valueBinding})`);
    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
}
function genSelect(el, value, modifiers) {
    const number = modifiers && modifiers.number;
    const selectedVal = `Array.prototype.filter` +
        `.call($event.target.options,function(o){return o.selected})` +
        `.map(function(o){var val = "_value" in o ? o._value : o.value;` +
        `return ${number ? '_n(val)' : 'val'}})`;
    const assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
    let code = `var $$selectedVal = ${selectedVal};`;
    code = `${code} ${genAssignmentCode(value, assignment)}`;
    addHandler(el, 'change', code, null, true);
}
function genDefaultModel(el, value, modifiers) {
    const type = el.attrsMap.type;
    // warn if v-bind:value conflicts with v-model
    // except for inputs with v-bind:type
    if (process.env.NODE_ENV !== 'production') {
        const value = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
        const typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
        if (value && !typeBinding) {
            const binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
            warn$1(`${binding}="${value}" conflicts with v-model on the same element ` +
                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
        }
    }
    const { lazy, number, trim } = modifiers || {};
    const needCompositionGuard = !lazy && type !== 'range';
    const event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
    let valueExpression = '$event.target.value';
    if (trim) {
        valueExpression = `$event.target.value.trim()`;
    }
    if (number) {
        valueExpression = `_n(${valueExpression})`;
    }
    let code = genAssignmentCode(value, valueExpression);
    if (needCompositionGuard) {
        code = `if($event.target.composing)return;${code}`;
    }
    addProp(el, 'value', `(${value})`);
    addHandler(el, event, code, null, true);
    if (trim || number) {
        addHandler(el, 'blur', '$forceUpdate()');
    }
}

function text(el, dir) {
    if (dir.value) {
        addProp(el, 'textContent', `_s(${dir.value})`, dir);
    }
}

function html(el, dir) {
    if (dir.value) {
        addProp(el, 'innerHTML', `_s(${dir.value})`, dir);
    }
}

var directives = {
    model,
    text,
    html
};

const baseOptions = {
    expectHTML: true,
    modules,
    directives,
    isPreTag,
    isUnaryTag,
    mustUseProp,
    canBeLeftOpenTag,
    isReservedTag,
    getTagNamespace,
    staticKeys: genStaticKeys$1(modules)
};

const hasWarned = {};
function warnOnce(msg) {
    const isNodeProd = typeof process !== 'undefined' && process.env.NODE_ENV === 'production';
    if (!isNodeProd && !hasWarned[msg]) {
        hasWarned[msg] = true;
        warn(msg);
    }
}
function warn(msg) {
    console.warn(`\x1b[1m\x1b[33m[@vue/compiler-sfc]\x1b[0m\x1b[33m ${msg}\x1b[0m\n`);
}

const doNotPrefix = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
    'require,' + // for webpack
    'arguments,' + // parsed as identifier but is a special keyword...
    '_c' // cached to save property access
);
/**
 * The input is expected to be a valid expression.
 */
function prefixIdentifiers(source, isFunctional = false, isTS = false, babelOptions = {}, bindings) {
    const s = new MagicString(source);
    const plugins = [
        ...(isTS ? ['typescript'] : []),
        ...((babelOptions === null || babelOptions === void 0 ? void 0 : babelOptions.plugins) || [])
    ];
    const ast = parser$1.parseExpression(source, Object.assign(Object.assign({}, babelOptions), { plugins }));
    const isScriptSetup = bindings && bindings.__isScriptSetup !== false;
    walkIdentifiers(ast, (ident, parent) => {
        const { name } = ident;
        if (doNotPrefix(name)) {
            return;
        }
        let prefix = `_vm.`;
        if (isScriptSetup) {
            const type = bindings[name];
            if (type && type.startsWith('setup')) {
                prefix = `_setup.`;
            }
        }
        if (isStaticProperty(parent) && parent.shorthand) {
            // property shorthand like { foo }, we need to add the key since
            // we rewrite the value
            // { foo } -> { foo: _vm.foo }
            s.appendLeft(ident.end, `: ${prefix}${name}`);
        }
        else {
            s.prependRight(ident.start, prefix);
        }
    }, node => {
        if (node.type === 'WithStatement') {
            s.remove(node.start, node.body.start + 1);
            s.remove(node.end - 1, node.end);
            if (!isFunctional) {
                s.prependRight(node.start, `var _vm=this,_c=_vm._self._c${isScriptSetup ? `,_setup=_vm._self._setupProxy;` : `;`}`);
            }
        }
    });
    return s.toString();
}

const CSS_VARS_HELPER = `useCssVars`;
function genCssVarsFromList(vars, id, isProd, isSSR = false) {
    return `{\n  ${vars
        .map(key => `"${isSSR ? `--` : ``}${genVarName(id, key, isProd)}": (${key})`)
        .join(',\n  ')}\n}`;
}
function genVarName(id, raw, isProd) {
    if (isProd) {
        return hashSum(id + raw);
    }
    else {
        return `${id}-${raw.replace(/([^\w-])/g, '_')}`;
    }
}
function normalizeExpression(exp) {
    exp = exp.trim();
    if ((exp[0] === `'` && exp[exp.length - 1] === `'`) ||
        (exp[0] === `"` && exp[exp.length - 1] === `"`)) {
        return exp.slice(1, -1);
    }
    return exp;
}
const vBindRE = /v-bind\s*\(/g;
function parseCssVars(sfc) {
    const vars = [];
    sfc.styles.forEach(style => {
        let match;
        // ignore v-bind() in comments /* ... */
        const content = style.content.replace(/\/\*([\s\S]*?)\*\//g, '');
        while ((match = vBindRE.exec(content))) {
            const start = match.index + match[0].length;
            const end = lexBinding(content, start);
            if (end !== null) {
                const variable = normalizeExpression(content.slice(start, end));
                if (!vars.includes(variable)) {
                    vars.push(variable);
                }
            }
        }
    });
    return vars;
}
function lexBinding(content, start) {
    let state = 0 /* LexerState.inParens */;
    let parenDepth = 0;
    for (let i = start; i < content.length; i++) {
        const char = content.charAt(i);
        switch (state) {
            case 0 /* LexerState.inParens */:
                if (char === `'`) {
                    state = 1 /* LexerState.inSingleQuoteString */;
                }
                else if (char === `"`) {
                    state = 2 /* LexerState.inDoubleQuoteString */;
                }
                else if (char === `(`) {
                    parenDepth++;
                }
                else if (char === `)`) {
                    if (parenDepth > 0) {
                        parenDepth--;
                    }
                    else {
                        return i;
                    }
                }
                break;
            case 1 /* LexerState.inSingleQuoteString */:
                if (char === `'`) {
                    state = 0 /* LexerState.inParens */;
                }
                break;
            case 2 /* LexerState.inDoubleQuoteString */:
                if (char === `"`) {
                    state = 0 /* LexerState.inParens */;
                }
                break;
        }
    }
    return null;
}
const cssVarsPlugin = opts => {
    const { id, isProd } = opts;
    return {
        postcssPlugin: 'vue-sfc-vars',
        Declaration(decl) {
            // rewrite CSS variables
            const value = decl.value;
            if (vBindRE.test(value)) {
                vBindRE.lastIndex = 0;
                let transformed = '';
                let lastIndex = 0;
                let match;
                while ((match = vBindRE.exec(value))) {
                    const start = match.index + match[0].length;
                    const end = lexBinding(value, start);
                    if (end !== null) {
                        const variable = normalizeExpression(value.slice(start, end));
                        transformed +=
                            value.slice(lastIndex, match.index) +
                                `var(--${genVarName(id, variable, isProd)})`;
                        lastIndex = end + 1;
                    }
                }
                decl.value = transformed + value.slice(lastIndex);
            }
        }
    };
};
cssVarsPlugin.postcss = true;
function genCssVarsCode(vars, bindings, id, isProd) {
    const varsExp = genCssVarsFromList(vars, id, isProd);
    return `_${CSS_VARS_HELPER}((_vm, _setup) => ${prefixIdentifiers(`(${varsExp})`, false, false, undefined, bindings)})`;
}
// <script setup> already gets the calls injected as part of the transform
// this is only for single normal <script>
function genNormalScriptCssVarsCode(cssVars, bindings, id, isProd) {
    return (`\nimport { ${CSS_VARS_HELPER} as _${CSS_VARS_HELPER} } from 'vue'\n` +
        `const __injectCSSVars__ = () => {\n${genCssVarsCode(cssVars, bindings, id, isProd)}}\n` +
        `const __setup__ = __default__.setup\n` +
        `__default__.setup = __setup__\n` +
        `  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }\n` +
        `  : __injectCSSVars__\n`);
}

const defaultExportRE = /((?:^|\n|;)\s*)export(\s*)default/;
const namedDefaultExportRE = /((?:^|\n|;)\s*)export(.+)(?:as)?(\s*)default/s;
const exportDefaultClassRE = /((?:^|\n|;)\s*)export\s+default\s+class\s+([\w$]+)/;
/**
 * Utility for rewriting `export default` in a script block into a variable
 * declaration so that we can inject things into it
 */
function rewriteDefault(input, as, parserPlugins) {
    if (!hasDefaultExport(input)) {
        return input + `\nconst ${as} = {}`;
    }
    let replaced;
    const classMatch = input.match(exportDefaultClassRE);
    if (classMatch) {
        replaced =
            input.replace(exportDefaultClassRE, '$1class $2') +
                `\nconst ${as} = ${classMatch[2]}`;
    }
    else {
        replaced = input.replace(defaultExportRE, `$1const ${as} =`);
    }
    if (!hasDefaultExport(replaced)) {
        return replaced;
    }
    // if the script somehow still contains `default export`, it probably has
    // multi-line comments or template strings. fallback to a full parse.
    const s = new MagicString(input);
    const ast = parser$1.parse(input, {
        sourceType: 'module',
        plugins: parserPlugins
    }).program.body;
    ast.forEach(node => {
        if (node.type === 'ExportDefaultDeclaration') {
            if (node.declaration.type === 'ClassDeclaration') {
                s.overwrite(node.start, node.declaration.id.start, `class `);
                s.append(`\nconst ${as} = ${node.declaration.id.name}`);
            }
            else {
                s.overwrite(node.start, node.declaration.start, `const ${as} = `);
            }
        }
        if (node.type === 'ExportNamedDeclaration') {
            for (const specifier of node.specifiers) {
                if (specifier.type === 'ExportSpecifier' &&
                    specifier.exported.type === 'Identifier' &&
                    specifier.exported.name === 'default') {
                    if (node.source) {
                        if (specifier.local.name === 'default') {
                            const end = specifierEnd(input, specifier.local.end, node.end);
                            s.prepend(`import { default as __VUE_DEFAULT__ } from '${node.source.value}'\n`);
                            s.overwrite(specifier.start, end, ``);
                            s.append(`\nconst ${as} = __VUE_DEFAULT__`);
                            continue;
                        }
                        else {
                            const end = specifierEnd(input, specifier.exported.end, node.end);
                            s.prepend(`import { ${input.slice(specifier.local.start, specifier.local.end)} } from '${node.source.value}'\n`);
                            s.overwrite(specifier.start, end, ``);
                            s.append(`\nconst ${as} = ${specifier.local.name}`);
                            continue;
                        }
                    }
                    const end = specifierEnd(input, specifier.end, node.end);
                    s.overwrite(specifier.start, end, ``);
                    s.append(`\nconst ${as} = ${specifier.local.name}`);
                }
            }
        }
    });
    return s.toString();
}
function hasDefaultExport(input) {
    return defaultExportRE.test(input) || namedDefaultExportRE.test(input);
}
function specifierEnd(input, end, nodeEnd) {
    // export { default   , foo } ...
    let hasCommas = false;
    let oldEnd = end;
    while (end < nodeEnd) {
        if (/\s/.test(input.charAt(end))) {
            end++;
        }
        else if (input.charAt(end) === ',') {
            end++;
            hasCommas = true;
            break;
        }
        else if (input.charAt(end) === '}') {
            break;
        }
    }
    return hasCommas ? end : oldEnd;
}

// Special compiler macros
const DEFINE_PROPS = 'defineProps';
const DEFINE_EMITS = 'defineEmits';
const DEFINE_EXPOSE = 'defineExpose';
const WITH_DEFAULTS = 'withDefaults';
// constants
const DEFAULT_VAR = `__default__`;
const isBuiltInDir$1 = makeMap(`once,memo,if,for,else,else-if,slot,text,html,on,bind,model,show,cloak,is`);
/**
 * Compile `<script setup>`
 * It requires the whole SFC descriptor because we need to handle and merge
 * normal `<script>` + `<script setup>` if both are present.
 */
function compileScript(sfc, options = { id: '' }) {
    let { filename, script, scriptSetup, source } = sfc;
    const isProd = !!options.isProd;
    const genSourceMap = options.sourceMap !== false;
    const cssVars = sfc.cssVars;
    const scopeId = options.id ? options.id.replace(/^data-v-/, '') : '';
    const scriptLang = script && script.lang;
    const scriptSetupLang = scriptSetup && scriptSetup.lang;
    const isTS = scriptLang === 'ts' ||
        scriptLang === 'tsx' ||
        scriptSetupLang === 'ts' ||
        scriptSetupLang === 'tsx';
    // resolve parser plugins
    const plugins = [];
    if (!isTS || scriptLang === 'tsx' || scriptSetupLang === 'tsx') {
        plugins.push('jsx');
    }
    else {
        // If don't match the case of adding jsx, should remove the jsx from the babelParserPlugins
        if (options.babelParserPlugins)
            options.babelParserPlugins = options.babelParserPlugins.filter(n => n !== 'jsx');
    }
    if (options.babelParserPlugins)
        plugins.push(...options.babelParserPlugins);
    if (isTS) {
        plugins.push('typescript');
        if (!plugins.includes('decorators')) {
            plugins.push('decorators-legacy');
        }
    }
    if (!scriptSetup) {
        if (!script) {
            throw new Error(`[@vue/compiler-sfc] SFC contains no <script> tags.`);
        }
        if (scriptLang && !isTS && scriptLang !== 'jsx') {
            // do not process non js/ts script blocks
            return script;
        }
        try {
            let content = script.content;
            let map = script.map;
            const scriptAst = parser$1.parse(content, {
                plugins,
                sourceType: 'module'
            }).program;
            const bindings = analyzeScriptBindings(scriptAst.body);
            if (cssVars.length) {
                content = rewriteDefault(content, DEFAULT_VAR, plugins);
                content += genNormalScriptCssVarsCode(cssVars, bindings, scopeId, isProd);
                content += `\nexport default ${DEFAULT_VAR}`;
            }
            return Object.assign(Object.assign({}, script), { content,
                map,
                bindings, scriptAst: scriptAst.body });
        }
        catch (e) {
            // silently fallback if parse fails since user may be using custom
            // babel syntax
            return script;
        }
    }
    if (script && scriptLang !== scriptSetupLang) {
        throw new Error(`[@vue/compiler-sfc] <script> and <script setup> must have the same ` +
            `language type.`);
    }
    if (scriptSetupLang && !isTS && scriptSetupLang !== 'jsx') {
        // do not process non js/ts script blocks
        return scriptSetup;
    }
    // metadata that needs to be returned
    const bindingMetadata = {};
    const helperImports = new Set();
    const userImports = Object.create(null);
    const userImportAlias = Object.create(null);
    const scriptBindings = Object.create(null);
    const setupBindings = Object.create(null);
    let defaultExport;
    let hasDefinePropsCall = false;
    let hasDefineEmitCall = false;
    let hasDefineExposeCall = false;
    let hasDefaultExportName = false;
    let propsRuntimeDecl;
    let propsRuntimeDefaults;
    let propsDestructureDecl;
    let propsTypeDecl;
    let propsTypeDeclRaw;
    let propsIdentifier;
    let emitsRuntimeDecl;
    let emitsTypeDecl;
    let emitsTypeDeclRaw;
    let emitIdentifier;
    // props/emits declared via types
    const typeDeclaredProps = {};
    const typeDeclaredEmits = new Set();
    // record declared types for runtime props type generation
    const declaredTypes = {};
    // props destructure data
    const propsDestructuredBindings = Object.create(null);
    // magic-string state
    const s = new MagicString(source);
    const startOffset = scriptSetup.start;
    const endOffset = scriptSetup.end;
    const scriptStartOffset = script && script.start;
    const scriptEndOffset = script && script.end;
    function helper(key) {
        helperImports.add(key);
        return `_${key}`;
    }
    function parse(input, options, offset) {
        try {
            return parser$1.parse(input, options).program;
        }
        catch (e) {
            e.message = `[@vue/compiler-sfc] ${e.message}\n\n${filename}\n${generateCodeFrame(source, e.pos + offset, e.pos + offset + 1)}`;
            throw e;
        }
    }
    function error(msg, node, end = node.end + startOffset) {
        throw new Error(`[@vue/compiler-sfc] ${msg}\n\n${filename}\n${generateCodeFrame(source, node.start + startOffset, end)}`);
    }
    function registerUserImport(source, local, imported, isType, isFromSetup) {
        if (source === 'vue' && imported) {
            userImportAlias[imported] = local;
        }
        let isUsedInTemplate = true;
        if (sfc.template && !sfc.template.src && !sfc.template.lang) {
            isUsedInTemplate = isImportUsed(local, sfc, isTS);
        }
        userImports[local] = {
            isType,
            imported: imported || 'default',
            source,
            isFromSetup,
            isUsedInTemplate
        };
    }
    function processDefineProps(node, declId) {
        if (!isCallOf(node, DEFINE_PROPS)) {
            return false;
        }
        if (hasDefinePropsCall) {
            error(`duplicate ${DEFINE_PROPS}() call`, node);
        }
        hasDefinePropsCall = true;
        propsRuntimeDecl = node.arguments[0];
        // call has type parameters - infer runtime types from it
        if (node.typeParameters) {
            if (propsRuntimeDecl) {
                error(`${DEFINE_PROPS}() cannot accept both type and non-type arguments ` +
                    `at the same time. Use one or the other.`, node);
            }
            propsTypeDeclRaw = node.typeParameters.params[0];
            propsTypeDecl = resolveQualifiedType(propsTypeDeclRaw, node => node.type === 'TSTypeLiteral');
            if (!propsTypeDecl) {
                error(`type argument passed to ${DEFINE_PROPS}() must be a literal type, ` +
                    `or a reference to an interface or literal type.`, propsTypeDeclRaw);
            }
        }
        if (declId) {
            propsIdentifier = scriptSetup.content.slice(declId.start, declId.end);
        }
        return true;
    }
    function processWithDefaults(node, declId) {
        if (!isCallOf(node, WITH_DEFAULTS)) {
            return false;
        }
        if (processDefineProps(node.arguments[0], declId)) {
            if (propsRuntimeDecl) {
                error(`${WITH_DEFAULTS} can only be used with type-based ` +
                    `${DEFINE_PROPS} declaration.`, node);
            }
            propsRuntimeDefaults = node.arguments[1];
            if (!propsRuntimeDefaults ||
                propsRuntimeDefaults.type !== 'ObjectExpression') {
                error(`The 2nd argument of ${WITH_DEFAULTS} must be an object literal.`, propsRuntimeDefaults || node);
            }
        }
        else {
            error(`${WITH_DEFAULTS}' first argument must be a ${DEFINE_PROPS} call.`, node.arguments[0] || node);
        }
        return true;
    }
    function processDefineEmits(node, declId) {
        if (!isCallOf(node, DEFINE_EMITS)) {
            return false;
        }
        if (hasDefineEmitCall) {
            error(`duplicate ${DEFINE_EMITS}() call`, node);
        }
        hasDefineEmitCall = true;
        emitsRuntimeDecl = node.arguments[0];
        if (node.typeParameters) {
            if (emitsRuntimeDecl) {
                error(`${DEFINE_EMITS}() cannot accept both type and non-type arguments ` +
                    `at the same time. Use one or the other.`, node);
            }
            emitsTypeDeclRaw = node.typeParameters.params[0];
            emitsTypeDecl = resolveQualifiedType(emitsTypeDeclRaw, node => node.type === 'TSFunctionType' || node.type === 'TSTypeLiteral');
            if (!emitsTypeDecl) {
                error(`type argument passed to ${DEFINE_EMITS}() must be a function type, ` +
                    `a literal type with call signatures, or a reference to the above types.`, emitsTypeDeclRaw);
            }
        }
        if (declId) {
            emitIdentifier = scriptSetup.content.slice(declId.start, declId.end);
        }
        return true;
    }
    function resolveQualifiedType(node, qualifier) {
        if (qualifier(node)) {
            return node;
        }
        if (node.type === 'TSTypeReference' &&
            node.typeName.type === 'Identifier') {
            const refName = node.typeName.name;
            const isQualifiedType = (node) => {
                if (node.type === 'TSInterfaceDeclaration' &&
                    node.id.name === refName) {
                    return node.body;
                }
                else if (node.type === 'TSTypeAliasDeclaration' &&
                    node.id.name === refName &&
                    qualifier(node.typeAnnotation)) {
                    return node.typeAnnotation;
                }
                else if (node.type === 'ExportNamedDeclaration' && node.declaration) {
                    return isQualifiedType(node.declaration);
                }
            };
            const body = scriptAst
                ? [...scriptSetupAst.body, ...scriptAst.body]
                : scriptSetupAst.body;
            for (const node of body) {
                const qualified = isQualifiedType(node);
                if (qualified) {
                    return qualified;
                }
            }
        }
    }
    function processDefineExpose(node) {
        if (isCallOf(node, DEFINE_EXPOSE)) {
            if (hasDefineExposeCall) {
                error(`duplicate ${DEFINE_EXPOSE}() call`, node);
            }
            hasDefineExposeCall = true;
            return true;
        }
        return false;
    }
    function checkInvalidScopeReference(node, method) {
        if (!node)
            return;
        walkIdentifiers(node, id => {
            if (setupBindings[id.name]) {
                error(`\`${method}()\` in <script setup> cannot reference locally ` +
                    `declared variables because it will be hoisted outside of the ` +
                    `setup() function. If your component options require initialization ` +
                    `in the module scope, use a separate normal <script> to export ` +
                    `the options instead.`, id);
            }
        });
    }
    /**
     * check defaults. If the default object is an object literal with only
     * static properties, we can directly generate more optimized default
     * declarations. Otherwise we will have to fallback to runtime merging.
     */
    function hasStaticWithDefaults() {
        return (propsRuntimeDefaults &&
            propsRuntimeDefaults.type === 'ObjectExpression' &&
            propsRuntimeDefaults.properties.every(node => (node.type === 'ObjectProperty' && !node.computed) ||
                node.type === 'ObjectMethod'));
    }
    function genRuntimeProps(props) {
        const keys = Object.keys(props);
        if (!keys.length) {
            return ``;
        }
        const hasStaticDefaults = hasStaticWithDefaults();
        const scriptSetupSource = scriptSetup.content;
        let propsDecls = `{
    ${keys
            .map(key => {
            let defaultString;
            const destructured = genDestructuredDefaultValue(key);
            if (destructured) {
                defaultString = `default: ${destructured}`;
            }
            else if (hasStaticDefaults) {
                const prop = propsRuntimeDefaults.properties.find((node) => node.key.name === key);
                if (prop) {
                    if (prop.type === 'ObjectProperty') {
                        // prop has corresponding static default value
                        defaultString = `default: ${scriptSetupSource.slice(prop.value.start, prop.value.end)}`;
                    }
                    else {
                        defaultString = `default() ${scriptSetupSource.slice(prop.body.start, prop.body.end)}`;
                    }
                }
            }
            const { type, required } = props[key];
            if (!isProd) {
                return `${key}: { type: ${toRuntimeTypeString(type)}, required: ${required}${defaultString ? `, ${defaultString}` : ``} }`;
            }
            else if (type.some(el => el === 'Boolean' || (defaultString && el === 'Function'))) {
                // #4783 production: if boolean or defaultString and function exists, should keep the type.
                return `${key}: { type: ${toRuntimeTypeString(type)}${defaultString ? `, ${defaultString}` : ``} }`;
            }
            else {
                // production: checks are useless
                return `${key}: ${defaultString ? `{ ${defaultString} }` : 'null'}`;
            }
        })
            .join(',\n    ')}\n  }`;
        if (propsRuntimeDefaults && !hasStaticDefaults) {
            propsDecls = `${helper('mergeDefaults')}(${propsDecls}, ${source.slice(propsRuntimeDefaults.start + startOffset, propsRuntimeDefaults.end + startOffset)})`;
        }
        return `\n  props: ${propsDecls},`;
    }
    function genDestructuredDefaultValue(key) {
        const destructured = propsDestructuredBindings[key];
        if (destructured && destructured.default) {
            const value = scriptSetup.content.slice(destructured.default.start, destructured.default.end);
            const isLiteral = destructured.default.type.endsWith('Literal');
            return isLiteral ? value : `() => (${value})`;
        }
    }
    function genSetupPropsType(node) {
        const scriptSetupSource = scriptSetup.content;
        if (hasStaticWithDefaults()) {
            // if withDefaults() is used, we need to remove the optional flags
            // on props that have default values
            let res = `{ `;
            const members = node.type === 'TSTypeLiteral' ? node.members : node.body;
            for (const m of members) {
                if ((m.type === 'TSPropertySignature' ||
                    m.type === 'TSMethodSignature') &&
                    m.typeAnnotation &&
                    m.key.type === 'Identifier') {
                    if (propsRuntimeDefaults.properties.some((p) => p.key.name === m.key.name)) {
                        res +=
                            m.key.name +
                                (m.type === 'TSMethodSignature' ? '()' : '') +
                                scriptSetupSource.slice(m.typeAnnotation.start, m.typeAnnotation.end) +
                                ', ';
                    }
                    else {
                        res +=
                            scriptSetupSource.slice(m.start, m.typeAnnotation.end) + `, `;
                    }
                }
            }
            return (res.length ? res.slice(0, -2) : res) + ` }`;
        }
        else {
            return scriptSetupSource.slice(node.start, node.end);
        }
    }
    // 1. process normal <script> first if it exists
    let scriptAst;
    if (script) {
        scriptAst = parse(script.content, {
            plugins,
            sourceType: 'module'
        }, scriptStartOffset);
        for (const node of scriptAst.body) {
            if (node.type === 'ImportDeclaration') {
                // record imports for dedupe
                for (const specifier of node.specifiers) {
                    const imported = specifier.type === 'ImportSpecifier' &&
                        specifier.imported.type === 'Identifier' &&
                        specifier.imported.name;
                    registerUserImport(node.source.value, specifier.local.name, imported, node.importKind === 'type' ||
                        (specifier.type === 'ImportSpecifier' &&
                            specifier.importKind === 'type'), false);
                }
            }
            else if (node.type === 'ExportDefaultDeclaration') {
                // export default
                defaultExport = node;
                // check if user has manually specified `name` or 'render` option in
                // export default
                // if has name, skip name inference
                // if has render and no template, generate return object instead of
                // empty render function (#4980)
                let optionProperties;
                if (defaultExport.declaration.type === 'ObjectExpression') {
                    optionProperties = defaultExport.declaration.properties;
                }
                else if (defaultExport.declaration.type === 'CallExpression' &&
                    defaultExport.declaration.arguments[0].type === 'ObjectExpression') {
                    optionProperties = defaultExport.declaration.arguments[0].properties;
                }
                if (optionProperties) {
                    for (const s of optionProperties) {
                        if (s.type === 'ObjectProperty' &&
                            s.key.type === 'Identifier' &&
                            s.key.name === 'name') {
                            hasDefaultExportName = true;
                        }
                    }
                }
                // export default { ... } --> const __default__ = { ... }
                const start = node.start + scriptStartOffset;
                const end = node.declaration.start + scriptStartOffset;
                s.overwrite(start, end, `const ${DEFAULT_VAR} = `);
            }
            else if (node.type === 'ExportNamedDeclaration') {
                const defaultSpecifier = node.specifiers.find(s => s.exported.type === 'Identifier' && s.exported.name === 'default');
                if (defaultSpecifier) {
                    defaultExport = node;
                    // 1. remove specifier
                    if (node.specifiers.length > 1) {
                        s.remove(defaultSpecifier.start + scriptStartOffset, defaultSpecifier.end + scriptStartOffset);
                    }
                    else {
                        s.remove(node.start + scriptStartOffset, node.end + scriptStartOffset);
                    }
                    if (node.source) {
                        // export { x as default } from './x'
                        // rewrite to `import { x as __default__ } from './x'` and
                        // add to top
                        s.prepend(`import { ${defaultSpecifier.local.name} as ${DEFAULT_VAR} } from '${node.source.value}'\n`);
                    }
                    else {
                        // export { x as default }
                        // rewrite to `const __default__ = x` and move to end
                        s.appendLeft(scriptEndOffset, `\nconst ${DEFAULT_VAR} = ${defaultSpecifier.local.name}\n`);
                    }
                }
                if (node.declaration) {
                    walkDeclaration(node.declaration, scriptBindings, userImportAlias);
                }
            }
            else if ((node.type === 'VariableDeclaration' ||
                node.type === 'FunctionDeclaration' ||
                node.type === 'ClassDeclaration' ||
                node.type === 'TSEnumDeclaration') &&
                !node.declare) {
                walkDeclaration(node, scriptBindings, userImportAlias);
            }
        }
        // apply reactivity transform
        // if (enableReactivityTransform && shouldTransform(script.content)) {
        //   const { rootRefs, importedHelpers } = transformAST(
        //     scriptAst,
        //     s,
        //     scriptStartOffset!
        //   )
        //   refBindings = rootRefs
        //   for (const h of importedHelpers) {
        //     helperImports.add(h)
        //   }
        // }
        // <script> after <script setup>
        // we need to move the block up so that `const __default__` is
        // declared before being used in the actual component definition
        if (scriptStartOffset > startOffset) {
            // if content doesn't end with newline, add one
            if (!/\n$/.test(script.content.trim())) {
                s.appendLeft(scriptEndOffset, `\n`);
            }
            s.move(scriptStartOffset, scriptEndOffset, 0);
        }
    }
    // 2. parse <script setup> and  walk over top level statements
    const scriptSetupAst = parse(scriptSetup.content, {
        plugins: [
            ...plugins,
            // allow top level await but only inside <script setup>
            'topLevelAwait'
        ],
        sourceType: 'module'
    }, startOffset);
    for (const node of scriptSetupAst.body) {
        const start = node.start + startOffset;
        let end = node.end + startOffset;
        // locate comment
        if (node.trailingComments && node.trailingComments.length > 0) {
            const lastCommentNode = node.trailingComments[node.trailingComments.length - 1];
            end = lastCommentNode.end + startOffset;
        }
        // locate the end of whitespace between this statement and the next
        while (end <= source.length) {
            if (!/\s/.test(source.charAt(end))) {
                break;
            }
            end++;
        }
        // (Dropped) `ref: x` bindings
        if (node.type === 'LabeledStatement' &&
            node.label.name === 'ref' &&
            node.body.type === 'ExpressionStatement') {
            error(`ref sugar using the label syntax was an experimental proposal and ` +
                `has been dropped based on community feedback. Please check out ` +
                `the new proposal at https://github.com/vuejs/rfcs/discussions/369`, node);
        }
        if (node.type === 'ImportDeclaration') {
            // import declarations are moved to top
            s.move(start, end, 0);
            // dedupe imports
            let removed = 0;
            const removeSpecifier = (i) => {
                const removeLeft = i > removed;
                removed++;
                const current = node.specifiers[i];
                const next = node.specifiers[i + 1];
                s.remove(removeLeft
                    ? node.specifiers[i - 1].end + startOffset
                    : current.start + startOffset, next && !removeLeft
                    ? next.start + startOffset
                    : current.end + startOffset);
            };
            for (let i = 0; i < node.specifiers.length; i++) {
                const specifier = node.specifiers[i];
                const local = specifier.local.name;
                let imported = specifier.type === 'ImportSpecifier' &&
                    specifier.imported.type === 'Identifier' &&
                    specifier.imported.name;
                if (specifier.type === 'ImportNamespaceSpecifier') {
                    imported = '*';
                }
                const source = node.source.value;
                const existing = userImports[local];
                if (source === 'vue' &&
                    (imported === DEFINE_PROPS ||
                        imported === DEFINE_EMITS ||
                        imported === DEFINE_EXPOSE)) {
                    warnOnce(`\`${imported}\` is a compiler macro and no longer needs to be imported.`);
                    removeSpecifier(i);
                }
                else if (existing) {
                    if (existing.source === source && existing.imported === imported) {
                        // already imported in <script setup>, dedupe
                        removeSpecifier(i);
                    }
                    else {
                        error(`different imports aliased to same local name.`, specifier);
                    }
                }
                else {
                    registerUserImport(source, local, imported, node.importKind === 'type' ||
                        (specifier.type === 'ImportSpecifier' &&
                            specifier.importKind === 'type'), true);
                }
            }
            if (node.specifiers.length && removed === node.specifiers.length) {
                s.remove(node.start + startOffset, node.end + startOffset);
            }
        }
        if (node.type === 'ExpressionStatement') {
            // process `defineProps` and `defineEmit(s)` calls
            if (processDefineProps(node.expression) ||
                processDefineEmits(node.expression) ||
                processWithDefaults(node.expression)) {
                s.remove(node.start + startOffset, node.end + startOffset);
            }
            else if (processDefineExpose(node.expression)) {
                // defineExpose({}) -> expose({})
                const callee = node.expression.callee;
                s.overwrite(callee.start + startOffset, callee.end + startOffset, 'expose');
            }
        }
        if (node.type === 'VariableDeclaration' && !node.declare) {
            const total = node.declarations.length;
            let left = total;
            for (let i = 0; i < total; i++) {
                const decl = node.declarations[i];
                if (decl.init) {
                    // defineProps / defineEmits
                    const isDefineProps = processDefineProps(decl.init, decl.id) ||
                        processWithDefaults(decl.init, decl.id);
                    const isDefineEmits = processDefineEmits(decl.init, decl.id);
                    if (isDefineProps || isDefineEmits) {
                        if (left === 1) {
                            s.remove(node.start + startOffset, node.end + startOffset);
                        }
                        else {
                            let start = decl.start + startOffset;
                            let end = decl.end + startOffset;
                            if (i < total - 1) {
                                // not the last one, locate the start of the next
                                end = node.declarations[i + 1].start + startOffset;
                            }
                            else {
                                // last one, locate the end of the prev
                                start = node.declarations[i - 1].end + startOffset;
                            }
                            s.remove(start, end);
                            left--;
                        }
                    }
                }
            }
        }
        // walk declarations to record declared bindings
        if ((node.type === 'VariableDeclaration' ||
            node.type === 'FunctionDeclaration' ||
            node.type === 'ClassDeclaration') &&
            !node.declare) {
            walkDeclaration(node, setupBindings, userImportAlias);
        }
        // walk statements & named exports / variable declarations for top level
        // await
        if ((node.type === 'VariableDeclaration' && !node.declare) ||
            node.type.endsWith('Statement')) {
            const scope = [scriptSetupAst.body];
            walk$1(node, {
                enter(child, parent) {
                    if (isFunctionType(child)) {
                        this.skip();
                    }
                    if (child.type === 'BlockStatement') {
                        scope.push(child.body);
                    }
                    if (child.type === 'AwaitExpression') {
                        error(`Vue 2 does not support top level await in <script setup>.`, child);
                    }
                },
                exit(node) {
                    if (node.type === 'BlockStatement')
                        scope.pop();
                }
            });
        }
        if ((node.type === 'ExportNamedDeclaration' && node.exportKind !== 'type') ||
            node.type === 'ExportAllDeclaration' ||
            node.type === 'ExportDefaultDeclaration') {
            error(`<script setup> cannot contain ES module exports. ` +
                `If you are using a previous version of <script setup>, please ` +
                `consult the updated RFC at https://github.com/vuejs/rfcs/pull/227.`, node);
        }
        if (isTS) {
            // runtime enum
            if (node.type === 'TSEnumDeclaration') {
                registerBinding(setupBindings, node.id, "setup-const" /* BindingTypes.SETUP_CONST */);
            }
            // move all Type declarations to outer scope
            if (node.type.startsWith('TS') ||
                (node.type === 'ExportNamedDeclaration' &&
                    node.exportKind === 'type') ||
                (node.type === 'VariableDeclaration' && node.declare)) {
                recordType(node, declaredTypes);
                s.move(start, end, 0);
            }
        }
    }
    // 3. Apply reactivity transform
    // if (
    //   (enableReactivityTransform &&
    //     // normal <script> had ref bindings that maybe used in <script setup>
    //     (refBindings || shouldTransform(scriptSetup.content))) ||
    //   propsDestructureDecl
    // ) {
    //   const { rootRefs, importedHelpers } = transformAST(
    //     scriptSetupAst,
    //     s,
    //     startOffset,
    //     refBindings,
    //     propsDestructuredBindings
    //   )
    //   refBindings = refBindings ? [...refBindings, ...rootRefs] : rootRefs
    //   for (const h of importedHelpers) {
    //     helperImports.add(h)
    //   }
    // }
    // 4. extract runtime props/emits code from setup context type
    if (propsTypeDecl) {
        extractRuntimeProps(propsTypeDecl, typeDeclaredProps, declaredTypes);
    }
    if (emitsTypeDecl) {
        extractRuntimeEmits(emitsTypeDecl, typeDeclaredEmits);
    }
    // 5. check useOptions args to make sure it doesn't reference setup scope
    // variables
    checkInvalidScopeReference(propsRuntimeDecl, DEFINE_PROPS);
    checkInvalidScopeReference(propsRuntimeDefaults, DEFINE_PROPS);
    checkInvalidScopeReference(propsDestructureDecl, DEFINE_PROPS);
    checkInvalidScopeReference(emitsRuntimeDecl, DEFINE_EMITS);
    // 6. remove non-script content
    if (script) {
        if (startOffset < scriptStartOffset) {
            // <script setup> before <script>
            s.remove(0, startOffset);
            s.remove(endOffset, scriptStartOffset);
            s.remove(scriptEndOffset, source.length);
        }
        else {
            // <script> before <script setup>
            s.remove(0, scriptStartOffset);
            s.remove(scriptEndOffset, startOffset);
            s.remove(endOffset, source.length);
        }
    }
    else {
        // only <script setup>
        s.remove(0, startOffset);
        s.remove(endOffset, source.length);
    }
    // 7. analyze binding metadata
    if (scriptAst) {
        Object.assign(bindingMetadata, analyzeScriptBindings(scriptAst.body));
    }
    if (propsRuntimeDecl) {
        for (const key of getObjectOrArrayExpressionKeys(propsRuntimeDecl)) {
            bindingMetadata[key] = "props" /* BindingTypes.PROPS */;
        }
    }
    for (const key in typeDeclaredProps) {
        bindingMetadata[key] = "props" /* BindingTypes.PROPS */;
    }
    // props aliases
    // if (propsDestructureDecl) {
    //   if (propsDestructureRestId) {
    //     bindingMetadata[propsDestructureRestId] =
    //       BindingTypes.SETUP_REACTIVE_CONST
    //   }
    //   for (const key in propsDestructuredBindings) {
    //     const { local } = propsDestructuredBindings[key]
    //     if (local !== key) {
    //       bindingMetadata[local] = BindingTypes.PROPS_ALIASED
    //       ;(bindingMetadata.__propsAliases ||
    //         (bindingMetadata.__propsAliases = {}))[local] = key
    //     }
    //   }
    // }
    for (const [key, { isType, imported, source }] of Object.entries(userImports)) {
        if (isType)
            continue;
        bindingMetadata[key] =
            imported === '*' ||
                (imported === 'default' && source.endsWith('.vue')) ||
                source === 'vue'
                ? "setup-const" /* BindingTypes.SETUP_CONST */
                : "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */;
    }
    for (const key in scriptBindings) {
        bindingMetadata[key] = scriptBindings[key];
    }
    for (const key in setupBindings) {
        bindingMetadata[key] = setupBindings[key];
    }
    // 8. inject `useCssVars` calls
    if (cssVars.length) {
        helperImports.add(CSS_VARS_HELPER);
        s.prependRight(startOffset, `\n${genCssVarsCode(cssVars, bindingMetadata, scopeId, isProd)}\n`);
    }
    // 9. finalize setup() argument signature
    let args = `__props`;
    if (propsTypeDecl) {
        // mark as any and only cast on assignment
        // since the user defined complex types may be incompatible with the
        // inferred type from generated runtime declarations
        args += `: any`;
    }
    // inject user assignment of props
    // we use a default __props so that template expressions referencing props
    // can use it directly
    if (propsIdentifier) {
        s.prependLeft(startOffset, `\nconst ${propsIdentifier} = __props${propsTypeDecl ? ` as ${genSetupPropsType(propsTypeDecl)}` : ``}\n`);
    }
    const destructureElements = hasDefineExposeCall ? [`expose`] : [];
    if (emitIdentifier) {
        destructureElements.push(emitIdentifier === `emit` ? `emit` : `emit: ${emitIdentifier}`);
    }
    if (destructureElements.length) {
        args += `, { ${destructureElements.join(', ')} }`;
        if (emitsTypeDecl) {
            args += `: { emit: (${scriptSetup.content.slice(emitsTypeDecl.start, emitsTypeDecl.end)}), expose: any, slots: any, attrs: any }`;
        }
    }
    // 10. generate return statement
    const allBindings = Object.assign(Object.assign({}, scriptBindings), setupBindings);
    for (const key in userImports) {
        if (!userImports[key].isType && userImports[key].isUsedInTemplate) {
            allBindings[key] = true;
        }
    }
    // __sfc marker indicates these bindings are compiled from <script setup>
    // and should not be proxied on `this`
    const returned = `{ ${`__sfc: true,`}${Object.keys(allBindings).join(', ')} }`;
    s.appendRight(endOffset, `\nreturn ${returned}\n}\n\n`);
    // 11. finalize default export
    let runtimeOptions = ``;
    if (!hasDefaultExportName && filename && filename !== DEFAULT_FILENAME) {
        const match = filename.match(/([^/\\]+)\.\w+$/);
        if (match) {
            runtimeOptions += `\n  __name: '${match[1]}',`;
        }
    }
    if (propsRuntimeDecl) {
        let declCode = scriptSetup.content
            .slice(propsRuntimeDecl.start, propsRuntimeDecl.end)
            .trim();
        runtimeOptions += `\n  props: ${declCode},`;
    }
    else if (propsTypeDecl) {
        runtimeOptions += genRuntimeProps(typeDeclaredProps);
    }
    if (emitsRuntimeDecl) {
        runtimeOptions += `\n  emits: ${scriptSetup.content
            .slice(emitsRuntimeDecl.start, emitsRuntimeDecl.end)
            .trim()},`;
    }
    else if (emitsTypeDecl) {
        runtimeOptions += genRuntimeEmits(typeDeclaredEmits);
    }
    // wrap setup code with function.
    if (isTS) {
        // for TS, make sure the exported type is still valid type with
        // correct props information
        // we have to use object spread for types to be merged properly
        // user's TS setting should compile it down to proper targets
        // export default defineComponent({ ...__default__, ... })
        const def = defaultExport ? `\n  ...${DEFAULT_VAR},` : ``;
        s.prependLeft(startOffset, `\nexport default /*#__PURE__*/${helper(`defineComponent`)}({${def}${runtimeOptions}\n  setup(${args}) {\n`);
        s.appendRight(endOffset, `})`);
    }
    else {
        if (defaultExport) {
            // without TS, can't rely on rest spread, so we use Object.assign
            // export default Object.assign(__default__, { ... })
            s.prependLeft(startOffset, `\nexport default /*#__PURE__*/Object.assign(${DEFAULT_VAR}, {${runtimeOptions}\n  ` +
                `setup(${args}) {\n`);
            s.appendRight(endOffset, `})`);
        }
        else {
            s.prependLeft(startOffset, `\nexport default {${runtimeOptions}\n  setup(${args}) {\n`);
            s.appendRight(endOffset, `}`);
        }
    }
    // 12. finalize Vue helper imports
    if (helperImports.size > 0) {
        s.prepend(`import { ${[...helperImports]
            .map(h => `${h} as _${h}`)
            .join(', ')} } from 'vue'\n`);
    }
    s.trim();
    return Object.assign(Object.assign({}, scriptSetup), { bindings: bindingMetadata, imports: userImports, content: s.toString(), map: genSourceMap
            ? s.generateMap({
                source: filename,
                hires: true,
                includeContent: true
            })
            : undefined, scriptAst: scriptAst === null || scriptAst === void 0 ? void 0 : scriptAst.body, scriptSetupAst: scriptSetupAst === null || scriptSetupAst === void 0 ? void 0 : scriptSetupAst.body });
}
function registerBinding(bindings, node, type) {
    bindings[node.name] = type;
}
function walkDeclaration(node, bindings, userImportAlias) {
    if (node.type === 'VariableDeclaration') {
        const isConst = node.kind === 'const';
        // export const foo = ...
        for (const { id, init } of node.declarations) {
            const isDefineCall = !!(isConst &&
                isCallOf(init, c => c === DEFINE_PROPS || c === DEFINE_EMITS || c === WITH_DEFAULTS));
            if (id.type === 'Identifier') {
                let bindingType;
                const userReactiveBinding = userImportAlias['reactive'] || 'reactive';
                if (isCallOf(init, userReactiveBinding)) {
                    // treat reactive() calls as let since it's meant to be mutable
                    bindingType = isConst
                        ? "setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */
                        : "setup-let" /* BindingTypes.SETUP_LET */;
                }
                else if (
                // if a declaration is a const literal, we can mark it so that
                // the generated render fn code doesn't need to unref() it
                isDefineCall ||
                    (isConst && canNeverBeRef(init, userReactiveBinding))) {
                    bindingType = isCallOf(init, DEFINE_PROPS)
                        ? "setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */
                        : "setup-const" /* BindingTypes.SETUP_CONST */;
                }
                else if (isConst) {
                    if (isCallOf(init, userImportAlias['ref'] || 'ref')) {
                        bindingType = "setup-ref" /* BindingTypes.SETUP_REF */;
                    }
                    else {
                        bindingType = "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */;
                    }
                }
                else {
                    bindingType = "setup-let" /* BindingTypes.SETUP_LET */;
                }
                registerBinding(bindings, id, bindingType);
            }
            else {
                if (isCallOf(init, DEFINE_PROPS)) {
                    // skip walking props destructure
                    return;
                }
                if (id.type === 'ObjectPattern') {
                    walkObjectPattern(id, bindings, isConst, isDefineCall);
                }
                else if (id.type === 'ArrayPattern') {
                    walkArrayPattern(id, bindings, isConst, isDefineCall);
                }
            }
        }
    }
    else if (node.type === 'TSEnumDeclaration' ||
        node.type === 'FunctionDeclaration' ||
        node.type === 'ClassDeclaration') {
        // export function foo() {} / export class Foo {}
        // export declarations must be named.
        bindings[node.id.name] = "setup-const" /* BindingTypes.SETUP_CONST */;
    }
}
function walkObjectPattern(node, bindings, isConst, isDefineCall = false) {
    for (const p of node.properties) {
        if (p.type === 'ObjectProperty') {
            if (p.key.type === 'Identifier' && p.key === p.value) {
                // shorthand: const { x } = ...
                const type = isDefineCall
                    ? "setup-const" /* BindingTypes.SETUP_CONST */
                    : isConst
                        ? "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */
                        : "setup-let" /* BindingTypes.SETUP_LET */;
                registerBinding(bindings, p.key, type);
            }
            else {
                walkPattern(p.value, bindings, isConst, isDefineCall);
            }
        }
        else {
            // ...rest
            // argument can only be identifier when destructuring
            const type = isConst ? "setup-const" /* BindingTypes.SETUP_CONST */ : "setup-let" /* BindingTypes.SETUP_LET */;
            registerBinding(bindings, p.argument, type);
        }
    }
}
function walkArrayPattern(node, bindings, isConst, isDefineCall = false) {
    for (const e of node.elements) {
        e && walkPattern(e, bindings, isConst, isDefineCall);
    }
}
function walkPattern(node, bindings, isConst, isDefineCall = false) {
    if (node.type === 'Identifier') {
        const type = isDefineCall
            ? "setup-const" /* BindingTypes.SETUP_CONST */
            : isConst
                ? "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */
                : "setup-let" /* BindingTypes.SETUP_LET */;
        registerBinding(bindings, node, type);
    }
    else if (node.type === 'RestElement') {
        // argument can only be identifier when destructuring
        const type = isConst ? "setup-const" /* BindingTypes.SETUP_CONST */ : "setup-let" /* BindingTypes.SETUP_LET */;
        registerBinding(bindings, node.argument, type);
    }
    else if (node.type === 'ObjectPattern') {
        walkObjectPattern(node, bindings, isConst);
    }
    else if (node.type === 'ArrayPattern') {
        walkArrayPattern(node, bindings, isConst);
    }
    else if (node.type === 'AssignmentPattern') {
        if (node.left.type === 'Identifier') {
            const type = isDefineCall
                ? "setup-const" /* BindingTypes.SETUP_CONST */
                : isConst
                    ? "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */
                    : "setup-let" /* BindingTypes.SETUP_LET */;
            registerBinding(bindings, node.left, type);
        }
        else {
            walkPattern(node.left, bindings, isConst);
        }
    }
}
function recordType(node, declaredTypes) {
    if (node.type === 'TSInterfaceDeclaration') {
        declaredTypes[node.id.name] = [`Object`];
    }
    else if (node.type === 'TSTypeAliasDeclaration') {
        declaredTypes[node.id.name] = inferRuntimeType(node.typeAnnotation, declaredTypes);
    }
    else if (node.type === 'ExportNamedDeclaration' && node.declaration) {
        recordType(node.declaration, declaredTypes);
    }
}
function extractRuntimeProps(node, props, declaredTypes, isProd) {
    const members = node.type === 'TSTypeLiteral' ? node.members : node.body;
    for (const m of members) {
        if ((m.type === 'TSPropertySignature' || m.type === 'TSMethodSignature') &&
            m.key.type === 'Identifier') {
            let type;
            if (m.type === 'TSMethodSignature') {
                type = ['Function'];
            }
            else if (m.typeAnnotation) {
                type = inferRuntimeType(m.typeAnnotation.typeAnnotation, declaredTypes);
            }
            props[m.key.name] = {
                key: m.key.name,
                required: !m.optional,
                type: type || [`null`]
            };
        }
    }
}
function inferRuntimeType(node, declaredTypes) {
    switch (node.type) {
        case 'TSStringKeyword':
            return ['String'];
        case 'TSNumberKeyword':
            return ['Number'];
        case 'TSBooleanKeyword':
            return ['Boolean'];
        case 'TSObjectKeyword':
            return ['Object'];
        case 'TSTypeLiteral':
            // TODO (nice to have) generate runtime property validation
            return ['Object'];
        case 'TSFunctionType':
            return ['Function'];
        case 'TSArrayType':
        case 'TSTupleType':
            // TODO (nice to have) generate runtime element type/length checks
            return ['Array'];
        case 'TSLiteralType':
            switch (node.literal.type) {
                case 'StringLiteral':
                    return ['String'];
                case 'BooleanLiteral':
                    return ['Boolean'];
                case 'NumericLiteral':
                case 'BigIntLiteral':
                    return ['Number'];
                default:
                    return [`null`];
            }
        case 'TSTypeReference':
            if (node.typeName.type === 'Identifier') {
                if (declaredTypes[node.typeName.name]) {
                    return declaredTypes[node.typeName.name];
                }
                switch (node.typeName.name) {
                    case 'Array':
                    case 'Function':
                    case 'Object':
                    case 'Set':
                    case 'Map':
                    case 'WeakSet':
                    case 'WeakMap':
                    case 'Date':
                    case 'Promise':
                        return [node.typeName.name];
                    case 'Record':
                    case 'Partial':
                    case 'Readonly':
                    case 'Pick':
                    case 'Omit':
                    case 'Exclude':
                    case 'Extract':
                    case 'Required':
                    case 'InstanceType':
                        return ['Object'];
                }
            }
            return [`null`];
        case 'TSParenthesizedType':
            return inferRuntimeType(node.typeAnnotation, declaredTypes);
        case 'TSUnionType':
            return [
                ...new Set([].concat(...node.types.map(t => inferRuntimeType(t, declaredTypes))))
            ];
        case 'TSIntersectionType':
            return ['Object'];
        case 'TSSymbolKeyword':
            return ['Symbol'];
        default:
            return [`null`]; // no runtime check
    }
}
function toRuntimeTypeString(types) {
    return types.length > 1 ? `[${types.join(', ')}]` : types[0];
}
function extractRuntimeEmits(node, emits) {
    if (node.type === 'TSTypeLiteral' || node.type === 'TSInterfaceBody') {
        const members = node.type === 'TSTypeLiteral' ? node.members : node.body;
        for (let t of members) {
            if (t.type === 'TSCallSignatureDeclaration') {
                extractEventNames(t.parameters[0], emits);
            }
        }
        return;
    }
    else {
        extractEventNames(node.parameters[0], emits);
    }
}
function extractEventNames(eventName, emits) {
    if (eventName.type === 'Identifier' &&
        eventName.typeAnnotation &&
        eventName.typeAnnotation.type === 'TSTypeAnnotation') {
        const typeNode = eventName.typeAnnotation.typeAnnotation;
        if (typeNode.type === 'TSLiteralType') {
            if (typeNode.literal.type !== 'UnaryExpression' &&
                typeNode.literal.type !== 'TemplateLiteral') {
                emits.add(String(typeNode.literal.value));
            }
        }
        else if (typeNode.type === 'TSUnionType') {
            for (const t of typeNode.types) {
                if (t.type === 'TSLiteralType' &&
                    t.literal.type !== 'UnaryExpression' &&
                    t.literal.type !== 'TemplateLiteral') {
                    emits.add(String(t.literal.value));
                }
            }
        }
    }
}
function genRuntimeEmits(emits) {
    return emits.size
        ? `\n  emits: [${Array.from(emits)
            .map(p => JSON.stringify(p))
            .join(', ')}],`
        : ``;
}
function isCallOf(node, test) {
    return !!(node &&
        node.type === 'CallExpression' &&
        node.callee.type === 'Identifier' &&
        (typeof test === 'string'
            ? node.callee.name === test
            : test(node.callee.name)));
}
function canNeverBeRef(node, userReactiveImport) {
    if (isCallOf(node, userReactiveImport)) {
        return true;
    }
    switch (node.type) {
        case 'UnaryExpression':
        case 'BinaryExpression':
        case 'ArrayExpression':
        case 'ObjectExpression':
        case 'FunctionExpression':
        case 'ArrowFunctionExpression':
        case 'UpdateExpression':
        case 'ClassExpression':
        case 'TaggedTemplateExpression':
            return true;
        case 'SequenceExpression':
            return canNeverBeRef(node.expressions[node.expressions.length - 1], userReactiveImport);
        default:
            if (node.type.endsWith('Literal')) {
                return true;
            }
            return false;
    }
}
/**
 * Analyze bindings in normal `<script>`
 * Note that `compileScriptSetup` already analyzes bindings as part of its
 * compilation process so this should only be used on single `<script>` SFCs.
 */
function analyzeScriptBindings(ast) {
    for (const node of ast) {
        if (node.type === 'ExportDefaultDeclaration' &&
            node.declaration.type === 'ObjectExpression') {
            return analyzeBindingsFromOptions(node.declaration);
        }
    }
    return {};
}
function analyzeBindingsFromOptions(node) {
    const bindings = {};
    // #3270, #3275
    // mark non-script-setup so we don't resolve components/directives from these
    Object.defineProperty(bindings, '__isScriptSetup', {
        enumerable: false,
        value: false
    });
    for (const property of node.properties) {
        if (property.type === 'ObjectProperty' &&
            !property.computed &&
            property.key.type === 'Identifier') {
            // props
            if (property.key.name === 'props') {
                // props: ['foo']
                // props: { foo: ... }
                for (const key of getObjectOrArrayExpressionKeys(property.value)) {
                    bindings[key] = "props" /* BindingTypes.PROPS */;
                }
            }
            // inject
            else if (property.key.name === 'inject') {
                // inject: ['foo']
                // inject: { foo: {} }
                for (const key of getObjectOrArrayExpressionKeys(property.value)) {
                    bindings[key] = "options" /* BindingTypes.OPTIONS */;
                }
            }
            // computed & methods
            else if (property.value.type === 'ObjectExpression' &&
                (property.key.name === 'computed' || property.key.name === 'methods')) {
                // methods: { foo() {} }
                // computed: { foo() {} }
                for (const key of getObjectExpressionKeys(property.value)) {
                    bindings[key] = "options" /* BindingTypes.OPTIONS */;
                }
            }
        }
        // setup & data
        else if (property.type === 'ObjectMethod' &&
            property.key.type === 'Identifier' &&
            (property.key.name === 'setup' || property.key.name === 'data')) {
            for (const bodyItem of property.body.body) {
                // setup() {
                //   return {
                //     foo: null
                //   }
                // }
                if (bodyItem.type === 'ReturnStatement' &&
                    bodyItem.argument &&
                    bodyItem.argument.type === 'ObjectExpression') {
                    for (const key of getObjectExpressionKeys(bodyItem.argument)) {
                        bindings[key] =
                            property.key.name === 'setup'
                                ? "setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */
                                : "data" /* BindingTypes.DATA */;
                    }
                }
            }
        }
    }
    return bindings;
}
function getObjectExpressionKeys(node) {
    const keys = [];
    for (const prop of node.properties) {
        if ((prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod') &&
            !prop.computed) {
            if (prop.key.type === 'Identifier') {
                keys.push(prop.key.name);
            }
            else if (prop.key.type === 'StringLiteral') {
                keys.push(prop.key.value);
            }
        }
    }
    return keys;
}
function getArrayExpressionKeys(node) {
    const keys = [];
    for (const element of node.elements) {
        if (element && element.type === 'StringLiteral') {
            keys.push(element.value);
        }
    }
    return keys;
}
function getObjectOrArrayExpressionKeys(value) {
    if (value.type === 'ArrayExpression') {
        return getArrayExpressionKeys(value);
    }
    if (value.type === 'ObjectExpression') {
        return getObjectExpressionKeys(value);
    }
    return [];
}
const templateUsageCheckCache = new lruCache(512);
function resolveTemplateUsageCheckString(sfc, isTS) {
    const { content } = sfc.template;
    const cached = templateUsageCheckCache.get(content);
    if (cached) {
        return cached;
    }
    let code = '';
    parseHTML(content, Object.assign(Object.assign({}, baseOptions), { start(tag, attrs) {
            if (!isBuiltInTag(tag) && !isReservedTag(tag)) {
                code += `,${camelize(tag)},${capitalize(camelize(tag))}`;
            }
            for (let i = 0; i < attrs.length; i++) {
                const { name, value } = attrs[i];
                if (dirRE.test(name)) {
                    const baseName = onRE.test(name)
                        ? 'on'
                        : slotRE.test(name)
                            ? 'slot'
                            : bindRE.test(name)
                                ? 'bind'
                                : name.replace(dirRE, '');
                    if (!isBuiltInDir$1(baseName)) {
                        code += `,v${capitalize(camelize(baseName))}`;
                    }
                    if (value) {
                        code += `,${processExp(value, isTS, baseName)}`;
                    }
                }
            }
        },
        chars(text) {
            const res = parseText(text);
            if (res) {
                code += `,${processExp(res.expression, isTS)}`;
            }
        } }));
    code += ';';
    templateUsageCheckCache.set(content, code);
    return code;
}
const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
function processExp(exp, isTS, dir) {
    if (isTS && / as\s+\w|<.*>|:/.test(exp)) {
        if (dir === 'slot') {
            exp = `(${exp})=>{}`;
        }
        else if (dir === 'on') {
            exp = `()=>{${exp}}`;
        }
        else if (dir === 'for') {
            const inMatch = exp.match(forAliasRE);
            if (inMatch) {
                const [, LHS, RHS] = inMatch;
                return processExp(`(${LHS})=>{}`, true) + processExp(RHS, true);
            }
        }
        let ret = '';
        // has potential type cast or generic arguments that uses types
        const ast = parser$1.parseExpression(exp, { plugins: ['typescript'] });
        walkIdentifiers(ast, node => {
            ret += `,` + node.name;
        });
        return ret;
    }
    return stripStrings(exp);
}
function stripStrings(exp) {
    return exp
        .replace(/'[^']*'|"[^"]*"/g, '')
        .replace(/`[^`]+`/g, stripTemplateString);
}
function stripTemplateString(str) {
    const interpMatch = str.match(/\${[^}]+}/g);
    if (interpMatch) {
        return interpMatch.map(m => m.slice(2, -1)).join(',');
    }
    return '';
}
function isImportUsed(local, sfc, isTS) {
    return new RegExp(
    // #4274 escape $ since it's a special char in regex
    // (and is the only regex special char that is valid in identifiers)
    `[^\\w$_]${local.replace(/\$/g, '\\$')}[^\\w$_]`).test(resolveTemplateUsageCheckString(sfc, isTS));
}
/**
 * Note: this comparison assumes the prev/next script are already identical,
 * and only checks the special case where <script setup> unused import
 * pruning result changes due to template changes.
 */
function hmrShouldReload(prevImports, next) {
    if (!next.scriptSetup) {
        return false;
    }
    const isTS = next.scriptSetup.lang === 'ts' || next.scriptSetup.lang === 'tsx';
    // for each previous import, check if its used status remain the same based on
    // the next descriptor's template
    for (const key in prevImports) {
        // if an import was previous unused, but now is used, we need to force
        // reload so that the script now includes that import.
        if (!prevImports[key].isUsedInTemplate && isImportUsed(key, next, isTS)) {
            return true;
        }
    }
    return false;
}

const cache = new lruCache(100);
const splitRE = /\r?\n/g;
const emptyRE = /^(?:\/\/)?\s*$/;
function parse(options) {
    const { source, filename = DEFAULT_FILENAME, compiler, compilerParseOptions = { pad: false }, sourceRoot = '', needMap = true, sourceMap = needMap } = options;
    const cacheKey = hashSum(filename + source + JSON.stringify(compilerParseOptions));
    let output = cache.get(cacheKey);
    if (output) {
        return output;
    }
    if (compiler) {
        // user-provided compiler
        output = compiler.parseComponent(source, compilerParseOptions);
    }
    else {
        // use built-in compiler
        output = parseComponent(source, compilerParseOptions);
    }
    output.filename = filename;
    // parse CSS vars
    output.cssVars = parseCssVars(output);
    output.shouldForceReload = prevImports => hmrShouldReload(prevImports, output);
    if (sourceMap) {
        if (output.script && !output.script.src) {
            output.script.map = generateSourceMap(filename, source, output.script.content, sourceRoot, compilerParseOptions.pad);
        }
        if (output.styles) {
            output.styles.forEach(style => {
                if (!style.src) {
                    style.map = generateSourceMap(filename, source, style.content, sourceRoot, compilerParseOptions.pad);
                }
            });
        }
    }
    cache.set(cacheKey, output);
    return output;
}
function generateSourceMap(filename, source, generated, sourceRoot, pad) {
    const map = new require$$0.SourceMapGenerator({
        file: filename.replace(/\\/g, '/'),
        sourceRoot: sourceRoot.replace(/\\/g, '/')
    });
    let offset = 0;
    if (!pad) {
        offset = source.split(generated).shift().split(splitRE).length - 1;
    }
    map.setSourceContent(filename, source);
    generated.split(splitRE).forEach((line, index) => {
        if (!emptyRE.test(line)) {
            map.addMapping({
                source: filename,
                original: {
                    line: index + 1 + offset,
                    column: 0
                },
                generated: {
                    line: index + 1,
                    column: 0
                }
            });
        }
    });
    return JSON.parse(map.toString());
}

function urlToRequire(url, transformAssetUrlsOption = {}) {
    const returnValue = `"${url}"`;
    // same logic as in transform-require.js
    const firstChar = url.charAt(0);
    if (firstChar === '~') {
        const secondChar = url.charAt(1);
        url = url.slice(secondChar === '/' ? 2 : 1);
    }
    if (isExternalUrl(url) || isDataUrl(url) || firstChar === '#') {
        return returnValue;
    }
    const uriParts = parseUriParts(url);
    if (transformAssetUrlsOption.base) {
        // explicit base - directly rewrite the url into absolute url
        // does not apply to absolute urls or urls that start with `@`
        // since they are aliases
        if (firstChar === '.' || firstChar === '~') {
            // Allow for full hostnames provided in options.base
            const base = parseUriParts(transformAssetUrlsOption.base);
            const protocol = base.protocol || '';
            const host = base.host ? protocol + '//' + base.host : '';
            const basePath = base.path || '/';
            // when packaged in the browser, path will be using the posix-
            // only version provided by rollup-plugin-node-builtins.
            return `"${host}${(path__default["default"].posix || path__default["default"]).join(basePath, uriParts.path + (uriParts.hash || ''))}"`;
        }
    }
    if (transformAssetUrlsOption.includeAbsolute ||
        firstChar === '.' ||
        firstChar === '~' ||
        firstChar === '@') {
        if (!uriParts.hash) {
            return `require("${url}")`;
        }
        else {
            // support uri fragment case by excluding it from
            // the require and instead appending it as string;
            // assuming that the path part is sufficient according to
            // the above caseing(t.i. no protocol-auth-host parts expected)
            return `require("${uriParts.path}") + "${uriParts.hash}"`;
        }
    }
    return returnValue;
}
/**
 * vuejs/component-compiler-utils#22 Support uri fragment in transformed require
 * @param urlString an url as a string
 */
function parseUriParts(urlString) {
    // initialize return value
    const returnValue = url.parse('');
    if (urlString) {
        // A TypeError is thrown if urlString is not a string
        // @see https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost
        if ('string' === typeof urlString) {
            // check is an uri
            return url.parse(urlString, false, true); // take apart the uri
        }
    }
    return returnValue;
}
const externalRE = /^(https?:)?\/\//;
function isExternalUrl(url) {
    return externalRE.test(url);
}
const dataUrlRE = /^\s*data:/i;
function isDataUrl(url) {
    return dataUrlRE.test(url);
}

// vue compiler module for transforming `<tag>:<attribute>` to `require`
const defaultOptions = {
    audio: 'src',
    video: ['src', 'poster'],
    source: 'src',
    img: 'src',
    image: ['xlink:href', 'href'],
    use: ['xlink:href', 'href']
};
var assetUrlsModule = (userOptions, transformAssetUrlsOption) => {
    const options = userOptions
        ? Object.assign({}, defaultOptions, userOptions)
        : defaultOptions;
    return {
        postTransformNode: (node) => {
            transform$1(node, options, transformAssetUrlsOption);
        }
    };
};
function transform$1(node, options, transformAssetUrlsOption) {
    if (node.type !== 1 || !node.attrs)
        return;
    for (const tag in options) {
        if (tag === '*' || node.tag === tag) {
            const attributes = options[tag];
            if (typeof attributes === 'string') {
                node.attrs.some(attr => rewrite(attr, attributes, transformAssetUrlsOption));
            }
            else if (Array.isArray(attributes)) {
                attributes.forEach(item => node.attrs.some(attr => rewrite(attr, item, transformAssetUrlsOption)));
            }
        }
    }
}
function rewrite(attr, name, transformAssetUrlsOption) {
    if (attr.name === name) {
        const value = attr.value;
        // only transform static URLs
        if (value.charAt(0) === '"' && value.charAt(value.length - 1) === '"') {
            attr.value = urlToRequire(value.slice(1, -1), transformAssetUrlsOption);
            return true;
        }
    }
    return false;
}

// vue compiler module for transforming `img:srcset` to a number of `require`s
var srcsetModule = (transformAssetUrlsOptions) => ({
    postTransformNode: (node) => {
        transform(node, transformAssetUrlsOptions);
    }
});
// http://w3c.github.io/html/semantics-embedded-content.html#ref-for-image-candidate-string-5
const escapedSpaceCharacters = /( |\\t|\\n|\\f|\\r)+/g;
function transform(node, transformAssetUrlsOptions) {
    if (node.type !== 1 || !node.attrs) {
        return;
    }
    if (node.tag === 'img' || node.tag === 'source') {
        node.attrs.forEach(attr => {
            if (attr.name === 'srcset') {
                // same logic as in transform-require.js
                const value = attr.value;
                const isStatic = value.charAt(0) === '"' && value.charAt(value.length - 1) === '"';
                if (!isStatic) {
                    return;
                }
                const imageCandidates = value
                    .slice(1, -1)
                    .split(',')
                    .map(s => {
                    // The attribute value arrives here with all whitespace, except
                    // normal spaces, represented by escape sequences
                    const [url, descriptor] = s
                        .replace(escapedSpaceCharacters, ' ')
                        .trim()
                        .split(' ', 2);
                    return {
                        require: urlToRequire(url, transformAssetUrlsOptions),
                        descriptor
                    };
                });
                // "require(url1)"
                // "require(url1) 1x"
                // "require(url1), require(url2)"
                // "require(url1), require(url2) 2x"
                // "require(url1) 1x, require(url2)"
                // "require(url1) 1x, require(url2) 2x"
                const code = imageCandidates
                    .map(({ require, descriptor }) => `${require} + "${descriptor ? ' ' + descriptor : ''}, " + `)
                    .join('')
                    .slice(0, -6)
                    .concat('"')
                    .replace(/ \+ ""$/, '');
                attr.value = code;
            }
        });
    }
}

var consolidate$2 = {exports: {}};

function commonjsRequire(path) {
	throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
}

var consolidate$1 = {exports: {}};

(function (module, exports) {
	/*
	 * Engines which do not support caching of their file contents
	 * should use the `read()` function defined in consolidate.js
	 * On top of this, when an engine compiles to a `Function`,
	 * these functions should either be cached within consolidate.js
	 * or the engine itself via `options.cache`. This will allow
	 * users and frameworks to pass `options.cache = true` for
	 * `NODE_ENV=production`, however edit the file(s) without
	 * re-loading the application in development.
	 */

	/**
	 * Module dependencies.
	 */

	var fs = require$$0__default["default"];
	var path = path__default["default"];
	var util = require$$2__default["default"];

	var join = path.join;
	var resolve = path.resolve;
	var extname = path.extname;
	var dirname = path.dirname;
	var isAbsolute = path.isAbsolute;

	var readCache = {};

	/**
	 * Require cache.
	 */

	var cacheStore = {};

	/**
	 * Require cache.
	 */

	var requires = {};

	/**
	 * Clear the cache.
	 *
	 * @api public
	 */

	exports.clearCache = function() {
	  readCache = {};
	  cacheStore = {};
	};

	/**
	 * Conditionally cache `compiled` template based
	 * on the `options` filename and `.cache` boolean.
	 *
	 * @param {Object} options
	 * @param {Function} compiled
	 * @return {Function}
	 * @api private
	 */

	function cache(options, compiled) {
	  // cachable
	  if (compiled && options.filename && options.cache) {
	    delete readCache[options.filename];
	    cacheStore[options.filename] = compiled;
	    return compiled;
	  }

	  // check cache
	  if (options.filename && options.cache) {
	    return cacheStore[options.filename];
	  }

	  return compiled;
	}

	/**
	 * Read `path` with `options` with
	 * callback `(err, str)`. When `options.cache`
	 * is true the template string will be cached.
	 *
	 * @param {String} options
	 * @param {Function} cb
	 * @api private
	 */

	function read(path, options, cb) {
	  var str = readCache[path];
	  var cached = options.cache && str && typeof str === 'string';

	  // cached (only if cached is a string and not a compiled template function)
	  if (cached) return cb(null, str);

	  // read
	  fs.readFile(path, 'utf8', function(err, str) {
	    if (err) return cb(err);
	    // remove extraneous utf8 BOM marker
	    str = str.replace(/^\uFEFF/, '');
	    if (options.cache) readCache[path] = str;
	    cb(null, str);
	  });
	}

	/**
	 * Read `path` with `options` with
	 * callback `(err, str)`. When `options.cache`
	 * is true the partial string will be cached.
	 *
	 * @param {String} options
	 * @param {Function} fn
	 * @api private
	 */

	function readPartials(path, options, cb) {
	  if (!options.partials) return cb();
	  var keys = Object.keys(options.partials);
	  var partials = {};

	  function next(index) {
	    if (index === keys.length) return cb(null, partials);
	    var key = keys[index];
	    var partialPath = options.partials[key];

	    if (partialPath === undefined || partialPath === null || partialPath === false) {
	      return next(++index);
	    }

	    var file;
	    if (isAbsolute(partialPath)) {
	      if (extname(partialPath) !== '') {
	        file = partialPath;
	      } else {
	        file = join(partialPath + extname(path));
	      }
	    } else {
	      file = join(dirname(path), partialPath + extname(path));
	    }

	    read(file, options, function(err, str) {
	      if (err) return cb(err);
	      partials[key] = str;
	      next(++index);
	    });
	  }

	  next(0);
	}

	/**
	 * promisify
	 */
	function promisify(cb, fn) {
	  return new Promise(function(resolve, reject) {
	    cb = cb || function(err, html) {
	      if (err) {
	        return reject(err);
	      }
	      resolve(html);
	    };
	    fn(cb);
	  });
	}

	/**
	 * fromStringRenderer
	 */

	function fromStringRenderer(name) {
	  return function(path, options, cb) {
	    options.filename = path;

	    return promisify(cb, function(cb) {
	      readPartials(path, options, function(err, partials) {
	        var extend = (requires.extend || (requires.extend = require$$2__default["default"]._extend));
	        var opts = extend({}, options);
	        opts.partials = partials;
	        if (err) return cb(err);
	        if (cache(opts)) {
	          exports[name].render('', opts, cb);
	        } else {
	          read(path, opts, function(err, str) {
	            if (err) return cb(err);
	            exports[name].render(str, opts, cb);
	          });
	        }
	      });
	    });
	  };
	}

	/**
	 * velocity support.
	 */

	exports.velocityjs = fromStringRenderer('velocityjs');

	/**
	 * velocity string support.
	 */

	exports.velocityjs.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.velocityjs || (requires.velocityjs = require('velocityjs'));
	    try {
	      options.locals = options;
	      cb(null, engine.render(str, options).trimLeft());
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Liquid support.
	 */

	exports.liquid = fromStringRenderer('liquid');

	/**
	 * Liquid string support.
	 */

	/**
	 * Note that in order to get filters and custom tags we've had to push
	 * all user-defined locals down into @locals. However, just to make things
	 * backwards-compatible, any property of `options` that is left after
	 * processing and removing `locals`, `meta`, `filters`, `customTags` and
	 * `includeDir` will also become a local.
	 */

	function _renderTinyliquid(engine, str, options, cb) {
	  var context = engine.newContext();
	  var k;

	  /**
	   * Note that there's a bug in the library that doesn't allow us to pass
	   * the locals to newContext(), hence looping through the keys:
	   */

	  if (options.locals) {
	    for (k in options.locals) {
	      context.setLocals(k, options.locals[k]);
	    }
	    delete options.locals;
	  }

	  if (options.meta) {
	    context.setLocals('page', options.meta);
	    delete options.meta;
	  }

	  /**
	   * Add any defined filters:
	   */

	  if (options.filters) {
	    for (k in options.filters) {
	      context.setFilter(k, options.filters[k]);
	    }
	    delete options.filters;
	  }

	  /**
	   * Set up a callback for the include directory:
	   */

	  var includeDir = options.includeDir || process.cwd();

	  context.onInclude(function(name, callback) {
	    var extname = path.extname(name) ? '' : '.liquid';
	    var filename = path.resolve(includeDir, name + extname);

	    fs.readFile(filename, {encoding: 'utf8'}, function(err, data) {
	      if (err) return callback(err);
	      callback(null, engine.parse(data));
	    });
	  });
	  delete options.includeDir;

	  /**
	   * The custom tag functions need to have their results pushed back
	   * through the parser, so set up a shim before calling the provided
	   * callback:
	   */

	  var compileOptions = {
	    customTags: {}
	  };

	  if (options.customTags) {
	    var tagFunctions = options.customTags;

	    for (k in options.customTags) {
	      /*Tell jshint there's no problem with having this function in the loop */
	      /*jshint -W083 */
	      compileOptions.customTags[k] = function(context, name, body) {
	        var tpl = tagFunctions[name](body.trim());
	        context.astStack.push(engine.parse(tpl));
	      };
	      /*jshint +W083 */
	    }
	    delete options.customTags;
	  }

	  /**
	   * Now anything left in `options` becomes a local:
	   */

	  for (k in options) {
	    context.setLocals(k, options[k]);
	  }

	  /**
	   * Finally, execute the template:
	   */

	  var tmpl = cache(context) || cache(context, engine.compile(str, compileOptions));
	  tmpl(context, cb);
	}

	exports.liquid.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.liquid;
	    var Liquid;

	    try {
	      // set up tinyliquid engine
	      engine = requires.liquid = require('tinyliquid');

	      // use tinyliquid engine
	      _renderTinyliquid(engine, str, options, cb);

	      return;

	    } catch (err) {

	      // set up liquid-node engine
	      try {
	        Liquid = requires.liquid = require('liquid-node');
	        engine = new Liquid.Engine();
	      } catch (err) {
	        throw err;
	      }

	    }

	    // use liquid-node engine
	    try {
	      var locals = options.locals || {};

	      if (options.meta) {
	        locals.pages = options.meta;
	        delete options.meta;
	      }

	      /**
	       * Add any defined filters:
	       */

	      if (options.filters) {
	        engine.registerFilters(options.filters);
	        delete options.filters;
	      }

	      /**
	       * Set up a callback for the include directory:
	       */

	      var includeDir = options.includeDir || process.cwd();
	      engine.fileSystem = new Liquid.LocalFileSystem(includeDir, 'liquid');
	      delete options.includeDir;

	      /**
	       * The custom tag functions need to have their results pushed back
	       * through the parser, so set up a shim before calling the provided
	       * callback:
	       */

	      if (options.customTags) {
	        var tagFunctions = options.customTags;

	        for (k in options.customTags) {
	          engine.registerTag(k, tagFunctions[k]);
	        }
	        delete options.customTags;
	      }

	      /**
	       * Now anything left in `options` becomes a local:
	       */

	      for (var k in options) {
	        locals[k] = options[k];
	      }

	      /**
	       * Finally, execute the template:
	       */

	      return engine
	        .parseAndRender(str, locals)
	        .nodeify(function(err, result) {
	          if (err) {
	            throw new Error(err);
	          } else {
	            return cb(null, result);
	          }
	        });

	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Jade support.
	 */

	exports.jade = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.jade;
	    if (!engine) {
	      try {
	        engine = requires.jade = require('jade');
	      } catch (err) {
	        try {
	          engine = requires.jade = require('then-jade');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      var tmpl = cache(options) || cache(options, engine.compileFile(path, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Jade string support.
	 */

	exports.jade.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.jade;
	    if (!engine) {
	      try {
	        engine = requires.jade = require('jade');
	      } catch (err) {
	        try {
	          engine = requires.jade = require('then-jade');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Dust support.
	 */

	exports.dust = fromStringRenderer('dust');

	/**
	 * Dust string support.
	 */

	exports.dust.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.dust;
	    if (!engine) {
	      try {
	        engine = requires.dust = require('dust');
	      } catch (err) {
	        try {
	          engine = requires.dust = require('dustjs-helpers');
	        } catch (err) {
	          engine = requires.dust = require('dustjs-linkedin');
	        }
	      }
	    }

	    var ext = 'dust';
	    var views = '.';

	    if (options) {
	      if (options.ext) ext = options.ext;
	      if (options.views) views = options.views;
	      if (options.settings && options.settings.views) views = options.settings.views;
	    }
	    if (!options || (options && !options.cache)) engine.cache = {};

	    engine.onLoad = function(path, callback) {
	      if (extname(path) === '') path += '.' + ext;
	      if (path[0] !== '/') path = views + '/' + path;
	      read(path, options, callback);
	    };

	    try {
	      var templateName;
	      if (options.filename) {
	        templateName = options.filename.replace(new RegExp('^' + views + '/'), '').replace(new RegExp('\\.' + ext), '');
	      }

	      var tmpl = cache(options) || cache(options, engine.compileFn(str, templateName));
	      tmpl(options, cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Swig support.
	 */

	exports.swig = fromStringRenderer('swig');

	/**
	 * Swig string support.
	 */

	exports.swig.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.swig;
	    if (!engine) {
	      try {
	        engine = requires.swig = require('swig');
	      } catch (err) {
	        try {
	          engine = requires.swig = require('swig-templates');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      if (options.cache === true) options.cache = 'memory';
	      engine.setDefaults({ cache: options.cache });
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Razor support.
	 */

	exports.razor = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.razor;
	    if (!engine) {
	      try {
	        engine = requires.razor = require('razor-tmpl');

	      } catch (err) {

	        throw err;

	      }
	    }
	    try {

	      var tmpl = cache(options) || cache(options, (locals) => {
	        console.log('Rendering razor file', path);
	        return engine.renderFileSync(path, locals);
	      });
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * razor string support.
	 */

	exports.razor.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {

	    try {
	      var engine = requires.razor = require('razor-tmpl');
	    } catch (err) {
	      throw err;
	    }

	    try {
	      var tf = engine.compile(str);
	      var tmpl = cache(options) || cache(options, tf);
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Atpl support.
	 */

	exports.atpl = fromStringRenderer('atpl');

	/**
	 * Atpl string support.
	 */

	exports.atpl.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.atpl || (requires.atpl = require('atpl'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Liquor support,
	 */

	exports.liquor = fromStringRenderer('liquor');

	/**
	 * Liquor string support.
	 */

	exports.liquor.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.liquor || (requires.liquor = require('liquor'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Twig support.
	 */

	exports.twig = fromStringRenderer('twig');

	/**
	 * Twig string support.
	 */

	exports.twig.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.twig || (requires.twig = require('twig').twig);
	    var templateData = {
	      data: str,
	      allowInlineIncludes: options.allowInlineIncludes,
	      namespaces: options.namespaces,
	      path: options.path
	    };
	    try {
	      var tmpl = cache(templateData) || cache(templateData, engine(templateData));
	      cb(null, tmpl.render(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * EJS support.
	 */

	exports.ejs = fromStringRenderer('ejs');

	/**
	 * EJS string support.
	 */

	exports.ejs.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.ejs || (requires.ejs = require('ejs'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Eco support.
	 */

	exports.eco = fromStringRenderer('eco');

	/**
	 * Eco string support.
	 */

	exports.eco.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.eco || (requires.eco = require('eco'));
	    try {
	      cb(null, engine.render(str, options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Jazz support.
	 */

	exports.jazz = fromStringRenderer('jazz');

	/**
	 * Jazz string support.
	 */

	exports.jazz.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.jazz || (requires.jazz = require('jazz'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      tmpl.eval(options, function(str) {
	        cb(null, str);
	      });
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * JQTPL support.
	 */

	exports.jqtpl = fromStringRenderer('jqtpl');

	/**
	 * JQTPL string support.
	 */

	exports.jqtpl.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.jqtpl || (requires.jqtpl = require('jqtpl'));
	    try {
	      engine.template(str, str);
	      cb(null, engine.tmpl(str, options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Haml support.
	 */

	exports.haml = fromStringRenderer('haml');

	/**
	 * Haml string support.
	 */

	exports.haml.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.haml || (requires.haml = require('hamljs'));
	    try {
	      options.locals = options;
	      cb(null, engine.render(str, options).trimLeft());
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Hamlet support.
	 */

	exports.hamlet = fromStringRenderer('hamlet');

	/**
	 * Hamlet string support.
	 */

	exports.hamlet.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.hamlet || (requires.hamlet = require('hamlet'));
	    try {
	      options.locals = options;
	      cb(null, engine.render(str, options).trimLeft());
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Whiskers support.
	 */

	exports.whiskers = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.whiskers || (requires.whiskers = require('whiskers'));
	    engine.__express(path, options, cb);
	  });
	};

	/**
	 * Whiskers string support.
	 */

	exports.whiskers.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.whiskers || (requires.whiskers = require('whiskers'));
	    try {
	      cb(null, engine.render(str, options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Coffee-HAML support.
	 */

	exports['haml-coffee'] = fromStringRenderer('haml-coffee');

	/**
	 * Coffee-HAML string support.
	 */

	exports['haml-coffee'].render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires['haml-coffee'] || (requires['haml-coffee'] = require('haml-coffee'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Hogan support.
	 */

	exports.hogan = fromStringRenderer('hogan');

	/**
	 * Hogan string support.
	 */

	exports.hogan.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.hogan || (requires.hogan = require('hogan.js'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl.render(options, options.partials));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * templayed.js support.
	 */

	exports.templayed = fromStringRenderer('templayed');

	/**
	 * templayed.js string support.
	 */

	exports.templayed.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.templayed || (requires.templayed = require('templayed'));
	    try {
	      var tmpl = cache(options) || cache(options, engine(str));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Handlebars support.
	 */

	exports.handlebars = fromStringRenderer('handlebars');

	/**
	 * Handlebars string support.
	 */

	exports.handlebars.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.handlebars || (requires.handlebars = require('handlebars'));
	    try {
	      for (var partial in options.partials) {
	        engine.registerPartial(partial, options.partials[partial]);
	      }
	      for (var helper in options.helpers) {
	        engine.registerHelper(helper, options.helpers[helper]);
	      }
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Underscore support.
	 */

	exports.underscore = fromStringRenderer('underscore');

	/**
	 * Underscore string support.
	 */

	exports.underscore.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.underscore || (requires.underscore = require('underscore'));
	    try {
	      const partials = {};
	      for (var partial in options.partials) {
	        partials[partial] = engine.template(options.partials[partial]);
	      }
	      options.partials = partials;
	      var tmpl = cache(options) || cache(options, engine.template(str, null, options));
	      cb(null, tmpl(options).replace(/\n$/, ''));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Lodash support.
	 */

	exports.lodash = fromStringRenderer('lodash');

	/**
	 * Lodash string support.
	 */

	exports.lodash.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.lodash || (requires.lodash = require('lodash'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.template(str, options));
	      cb(null, tmpl(options).replace(/\n$/, ''));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Pug support. (formerly Jade)
	 */

	exports.pug = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.pug;
	    if (!engine) {
	      try {
	        engine = requires.pug = require('pug');
	      } catch (err) {
	        try {
	          engine = requires.pug = require('then-pug');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      var tmpl = cache(options) || cache(options, engine.compileFile(path, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Pug string support.
	 */

	exports.pug.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.pug;
	    if (!engine) {
	      try {
	        engine = requires.pug = require('pug');
	      } catch (err) {
	        try {
	          engine = requires.pug = require('then-pug');
	        } catch (otherError) {
	          throw err;
	        }
	      }
	    }

	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * QEJS support.
	 */

	exports.qejs = fromStringRenderer('qejs');

	/**
	 * QEJS string support.
	 */

	exports.qejs.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    try {
	      var engine = requires.qejs || (requires.qejs = require('qejs'));
	      engine.render(str, options).then(function(result) {
	        cb(null, result);
	      }, function(err) {
	        cb(err);
	      }).done();
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Walrus support.
	 */

	exports.walrus = fromStringRenderer('walrus');

	/**
	 * Walrus string support.
	 */

	exports.walrus.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.walrus || (requires.walrus = require('walrus'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.parse(str));
	      cb(null, tmpl.compile(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Mustache support.
	 */

	exports.mustache = fromStringRenderer('mustache');

	/**
	 * Mustache string support.
	 */

	exports.mustache.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.mustache || (requires.mustache = require('mustache'));
	    try {
	      cb(null, engine.render(str, options, options.partials));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Just support.
	 */

	exports.just = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.just;
	    if (!engine) {
	      var JUST = require('just');
	      engine = requires.just = new JUST();
	    }
	    engine.configure({ useCache: options.cache });
	    engine.render(path, options, cb);
	  });
	};

	/**
	 * Just string support.
	 */

	exports.just.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var JUST = require('just');
	    var engine = new JUST({ root: { page: str }});
	    engine.render('page', options, cb);
	  });
	};

	/**
	 * ECT support.
	 */

	exports.ect = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.ect;
	    if (!engine) {
	      var ECT = require('ect');
	      engine = requires.ect = new ECT(options);
	    }
	    engine.configure({ cache: options.cache });
	    engine.render(path, options, cb);
	  });
	};

	/**
	 * ECT string support.
	 */

	exports.ect.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var ECT = require('ect');
	    var engine = new ECT({ root: { page: str }});
	    engine.render('page', options, cb);
	  });
	};

	/**
	 * mote support.
	 */

	exports.mote = fromStringRenderer('mote');

	/**
	 * mote string support.
	 */

	exports.mote.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.mote || (requires.mote = require('mote'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Toffee support.
	 */

	exports.toffee = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var toffee = requires.toffee || (requires.toffee = require('toffee'));
	    toffee.__consolidate_engine_render(path, options, cb);
	  });
	};

	/**
	 * Toffee string support.
	 */

	exports.toffee.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.toffee || (requires.toffee = require('toffee'));
	    try {
	      engine.str_render(str, options, cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * doT support.
	 */

	exports.dot = fromStringRenderer('dot');

	/**
	 * doT string support.
	 */

	exports.dot.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.dot || (requires.dot = require('dot'));
	    var extend = (requires.extend || (requires.extend = require$$2__default["default"]._extend));
	    try {
	      var settings = {};
	      settings = extend(settings, engine.templateSettings);
	      settings = extend(settings, options ? options.dot : {});
	      var tmpl = cache(options) || cache(options, engine.template(str, settings, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * bracket support.
	 */

	exports.bracket = fromStringRenderer('bracket');

	/**
	 * bracket string support.
	 */

	exports.bracket.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.bracket || (requires.bracket = require('bracket-template'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.default.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Ractive support.
	 */

	exports.ractive = fromStringRenderer('ractive');

	/**
	 * Ractive string support.
	 */

	exports.ractive.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var Engine = requires.ractive || (requires.ractive = require('ractive'));

	    var template = cache(options) || cache(options, Engine.parse(str));
	    options.template = template;

	    if (options.data === null || options.data === undefined) {
	      var extend = (requires.extend || (requires.extend = require$$2__default["default"]._extend));

	      // Shallow clone the options object
	      options.data = extend({}, options);

	      // Remove consolidate-specific properties from the clone
	      var i;
	      var length;
	      var properties = ['template', 'filename', 'cache', 'partials'];
	      for (i = 0, length = properties.length; i < length; i++) {
	        var property = properties[i];
	        delete options.data[property];
	      }
	    }

	    try {
	      cb(null, new Engine(options).toHTML());
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Nunjucks support.
	 */

	exports.nunjucks = fromStringRenderer('nunjucks');

	/**
	 * Nunjucks string support.
	 */

	exports.nunjucks.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {

	    try {

	      var engine = options.nunjucksEnv || requires.nunjucks || (requires.nunjucks = require('nunjucks'));

	      var env = engine;

	      // deprecated fallback support for express
	      // <https://github.com/tj/consolidate.js/pull/152>
	      // <https://github.com/tj/consolidate.js/pull/224>
	      if (options.settings && options.settings.views) {
	        env = engine.configure(options.settings.views);
	      } else if (options.nunjucks && options.nunjucks.configure) {
	        env = engine.configure.apply(engine, options.nunjucks.configure);
	      }

	      //
	      // because `renderString` does not initiate loaders
	      // we must manually create a loader for it based off
	      // either `options.settings.views` or `options.nunjucks` or `options.nunjucks.root`
	      //
	      // <https://github.com/mozilla/nunjucks/issues/730>
	      // <https://github.com/crocodilejs/node-email-templates/issues/182>
	      //

	      // so instead we simply check if we passed a custom loader
	      // otherwise we create a simple file based loader
	      if (options.loader) {
	        env = new engine.Environment(options.loader);
	      } else if (options.settings && options.settings.views) {
	        env = new engine.Environment(
	          new engine.FileSystemLoader(options.settings.views)
	        );
	      } else if (options.nunjucks && options.nunjucks.loader) {
	        if (typeof options.nunjucks.loader === 'string') {
	          env = new engine.Environment(new engine.FileSystemLoader(options.nunjucks.loader));
	        } else {
	          env = new engine.Environment(
	            new engine.FileSystemLoader(
	              options.nunjucks.loader[0],
	              options.nunjucks.loader[1]
	            )
	          );
	        }
	      }

	      env.renderString(str, options, cb);
	    } catch (err) {
	      throw cb(err);
	    }
	  });
	};

	/**
	 * HTMLing support.
	 */

	exports.htmling = fromStringRenderer('htmling');

	/**
	 * HTMLing string support.
	 */

	exports.htmling.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.htmling || (requires.htmling = require('htmling'));
	    try {
	      var tmpl = cache(options) || cache(options, engine.string(str));
	      cb(null, tmpl.render(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 *  Rendering function
	 */
	function requireReact(module, filename) {
	  var babel = requires.babel || (requires.babel = require('babel-core'));

	  var compiled = babel.transformFileSync(filename, { presets: [ 'react' ] }).code;

	  return module._compile(compiled, filename);
	}

	exports.requireReact = requireReact;

	/**
	 *  Converting a string into a node module.
	 */
	function requireReactString(src, filename) {
	  var babel = requires.babel || (requires.babel = require('babel-core'));

	  if (!filename) filename = '';
	  var m = new module.constructor();
	  filename = filename || '';

	  // Compile Using React
	  var compiled = babel.transform(src, { presets: [ 'react' ] }).code;

	  // Compile as a module
	  m.paths = module.paths;
	  m._compile(compiled, filename);

	  return m.exports;
	}

	/**
	 * A naive helper to replace {{tags}} with options.tags content
	 */
	function reactBaseTmpl(data, options) {

	  var exp;
	  var regex;

	  // Iterates through the keys in file object
	  // and interpolate / replace {{key}} with it's value
	  for (var k in options) {
	    if (options.hasOwnProperty(k)) {
	      exp = '{{' + k + '}}';
	      regex = new RegExp(exp, 'g');
	      if (data.match(regex)) {
	        data = data.replace(regex, options[k]);
	      }
	    }
	  }

	  return data;
	}

	/**
	* Plates Support.
	*/

	exports.plates = fromStringRenderer('plates');

	/**
	* Plates string support.
	*/

	exports.plates.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.plates || (requires.plates = require('plates'));
	    var map = options.map || undefined;
	    try {
	      var tmpl = engine.bind(str, options, map);
	      cb(null, tmpl);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 *  The main render parser for React bsaed templates
	 */
	function reactRenderer(type) {

	  if (commonjsRequire.extensions) {

	    // Ensure JSX is transformed on require
	    if (!commonjsRequire.extensions['.jsx']) {
	      commonjsRequire.extensions['.jsx'] = requireReact;
	    }

	    // Supporting .react extension as well as test cases
	    // Using .react extension is not recommended.
	    if (!commonjsRequire.extensions['.react']) {
	      commonjsRequire.extensions['.react'] = requireReact;
	    }

	  }

	  // Return rendering fx
	  return function(str, options, cb) {
	    return promisify(cb, function(cb) {
	      // React Import
	      var ReactDOM = requires.ReactDOM || (requires.ReactDOM = require('react-dom/server'));
	      var react = requires.react || (requires.react = require('react'));

	      // Assign HTML Base
	      var base = options.base;
	      delete options.base;

	      var enableCache = options.cache;
	      delete options.cache;

	      var isNonStatic = options.isNonStatic;
	      delete options.isNonStatic;

	      // Start Conversion
	      try {

	        var Code;
	        var Factory;

	        var baseStr;
	        var content;
	        var parsed;

	        if (!cache(options)) {
	          // Parsing
	          if (type === 'path') {
	            var path = resolve(str);
	            delete require.cache[path];
	            Code = commonjsRequire(path);
	          } else {
	            Code = requireReactString(str);
	          }
	          Factory = cache(options, react.createFactory(Code));

	        } else {
	          Factory = cache(options);
	        }

	        parsed = new Factory(options);
	        content = (isNonStatic) ? ReactDOM.renderToString(parsed) : ReactDOM.renderToStaticMarkup(parsed);

	        if (base) {
	          baseStr = readCache[str] || fs.readFileSync(resolve(base), 'utf8');

	          if (enableCache) {
	            readCache[str] = baseStr;
	          }

	          options.content = content;
	          content = reactBaseTmpl(baseStr, options);
	        }

	        cb(null, content);

	      } catch (err) {
	        cb(err);
	      }
	    });
	  };
	}

	/**
	 * React JS Support
	 */
	exports.react = reactRenderer('path');

	/**
	 * React JS string support.
	 */
	exports.react.render = reactRenderer('string');

	/**
	 * ARC-templates support.
	 */

	exports['arc-templates'] = fromStringRenderer('arc-templates');

	/**
	 * ARC-templates string support.
	 */

	exports['arc-templates'].render = function(str, options, cb) {
	  var readFileWithOptions = util.promisify(read);
	  var consolidateFileSystem = {};
	  consolidateFileSystem.readFile = function(path) {
	    return readFileWithOptions(path, options);
	  };

	  return promisify(cb, function(cb) {
	    try {
	      var engine = requires['arc-templates'];
	      if (!engine) {
	        var Engine = require('arc-templates/dist/es5');
	        engine = requires['arc-templates'] = new Engine({ filesystem: consolidateFileSystem });
	      }

	      var compiler = cache(options) || cache(options, engine.compileString(str, options.filename));
	      compiler.then(function(func) { return func(options); })
	        .then(function(result) { cb(null, result.content); })
	        .catch(cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Vash support
	 */
	exports.vash = fromStringRenderer('vash');

	/**
	 * Vash string support
	 */
	exports.vash.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.vash || (requires.vash = require('vash'));

	    try {
	      // helper system : https://github.com/kirbysayshi/vash#helper-system
	      if (options.helpers) {
	        for (var key in options.helpers) {
	          if (!options.helpers.hasOwnProperty(key) || typeof options.helpers[key] !== 'function') {
	            continue;
	          }
	          engine.helpers[key] = options.helpers[key];
	        }
	      }

	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      tmpl(options, function sealLayout(err, ctx) {
	        if (err) cb(err);
	        ctx.finishLayout();
	        cb(null, ctx.toString().replace(/\n$/, ''));
	      });
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Slm support.
	 */

	exports.slm = fromStringRenderer('slm');

	/**
	 * Slm string support.
	 */

	exports.slm.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.slm || (requires.slm = require('slm'));

	    try {
	      var tmpl = cache(options) || cache(options, engine.compile(str, options));
	      cb(null, tmpl(options));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Marko support.
	 */

	exports.marko = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.marko || (requires.marko = require('marko'));
	    options.writeToDisk = !!options.cache;

	    try {
	      var tmpl = cache(options) || cache(options, engine.load(path, options));
	      tmpl.renderToString(options, cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Marko string support.
	 */

	exports.marko.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.marko || (requires.marko = require('marko'));
	    options.writeToDisk = !!options.cache;
	    options.filename = options.filename || 'string.marko';

	    try {
	      var tmpl = cache(options) || cache(options, engine.load(options.filename, str, options));
	      tmpl.renderToString(options, cb);
	    } catch (err) {
	      cb(err);
	    }
	  });
	};

	/**
	 * Teacup support.
	 */
	exports.teacup = function(path, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.teacup || (requires.teacup = require('teacup/lib/express'));
	    commonjsRequire.extensions['.teacup'] = commonjsRequire.extensions['.coffee'];
	    if (path[0] !== '/') {
	      path = join(process.cwd(), path);
	    }
	    if (!options.cache) {
	      var callback = cb;
	      cb = function() {
	        delete require.cache[path];
	        callback.apply(this, arguments);
	      };
	    }
	    engine.renderFile(path, options, cb);
	  });
	};

	/**
	 * Teacup string support.
	 */
	exports.teacup.render = function(str, options, cb) {
	  var coffee = require('coffee-script');
	  var vm = require('vm');
	  var sandbox = {
	    module: {exports: {}},
	    require: commonjsRequire
	  };
	  return promisify(cb, function(cb) {
	    vm.runInNewContext(coffee.compile(str), sandbox);
	    var tmpl = sandbox.module.exports;
	    cb(null, tmpl(options));
	  });
	};

	/**
	 * Squirrelly support.
	 */

	exports.squirrelly = fromStringRenderer('squirrelly');

	/**
	 * Squirrelly string support.
	 */

	exports.squirrelly.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.squirrelly || (requires.squirrelly = require('squirrelly'));
	    try {
	      for (var partial in options.partials) {
	        engine.definePartial(partial, options.partials[partial]);
	      }
	      for (var helper in options.helpers) {
	        engine.defineHelper(helper, options.helpers[helper]);
	      }
	      var tmpl = cache(options) || cache(options, engine.Compile(str, options));
	      cb(null, tmpl(options, engine));
	    } catch (err) {
	      cb(err);
	    }
	  });
	};
	/**
	 * Twing support.
	 */

	exports.twing = fromStringRenderer('twing');

	/**
	 * Twing string support.
	 */ 

	exports.twing.render = function(str, options, cb) {
	  return promisify(cb, function(cb) {
	    var engine = requires.twing || (requires.twing = require('twing'));
	    try {
	      new engine.TwingEnvironment(new engine.TwingLoaderNull()).createTemplate(str).then((twingTemplate) => {
	        twingTemplate.render(options).then((rendTmpl) => {
	          var tmpl = cache(options) || cache(options, rendTmpl);
	          cb(null, tmpl);
	        });
	      });
	    } catch (err) {
	      cb(err);
	    }
	  });
	};
	/**
	 * expose the instance of the engine
	 */
	exports.requires = requires;
} (consolidate$1, consolidate$1.exports));

(function (module) {
	module.exports = consolidate$1.exports;
} (consolidate$2));

var consolidate = /*@__PURE__*/getDefaultExportFromCjs(consolidate$2.exports);

let isStaticKey;
let isPlatformReservedTag$1;
const genStaticKeysCached = cached(genStaticKeys);
/**
 * Goal of the optimizer: walk the generated template AST tree
 * and detect sub-trees that are purely static, i.e. parts of
 * the DOM that never needs to change.
 *
 * Once we detect these sub-trees, we can:
 *
 * 1. Hoist them into constants, so that we no longer need to
 *    create fresh nodes for them on each re-render;
 * 2. Completely skip them in the patching process.
 */
function optimize$1(root, options) {
    if (!root)
        return;
    isStaticKey = genStaticKeysCached(options.staticKeys || '');
    isPlatformReservedTag$1 = options.isReservedTag || no;
    // first pass: mark all non-static nodes.
    markStatic(root);
    // second pass: mark static roots.
    markStaticRoots(root, false);
}
function genStaticKeys(keys) {
    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
        (keys ? ',' + keys : ''));
}
function markStatic(node) {
    node.static = isStatic(node);
    if (node.type === 1) {
        // do not make component slot content static. this avoids
        // 1. components not able to mutate slot nodes
        // 2. static slot content fails for hot-reloading
        if (!isPlatformReservedTag$1(node.tag) &&
            node.tag !== 'slot' &&
            node.attrsMap['inline-template'] == null) {
            return;
        }
        for (let i = 0, l = node.children.length; i < l; i++) {
            const child = node.children[i];
            markStatic(child);
            if (!child.static) {
                node.static = false;
            }
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                const block = node.ifConditions[i].block;
                markStatic(block);
                if (!block.static) {
                    node.static = false;
                }
            }
        }
    }
}
function markStaticRoots(node, isInFor) {
    if (node.type === 1) {
        if (node.static || node.once) {
            node.staticInFor = isInFor;
        }
        // For a node to qualify as a static root, it should have children that
        // are not just static text. Otherwise the cost of hoisting out will
        // outweigh the benefits and it's better off to just always render it fresh.
        if (node.static &&
            node.children.length &&
            !(node.children.length === 1 && node.children[0].type === 3)) {
            node.staticRoot = true;
            return;
        }
        else {
            node.staticRoot = false;
        }
        if (node.children) {
            for (let i = 0, l = node.children.length; i < l; i++) {
                markStaticRoots(node.children[i], isInFor || !!node.for);
            }
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                markStaticRoots(node.ifConditions[i].block, isInFor);
            }
        }
    }
}
function isStatic(node) {
    if (node.type === 2) {
        // expression
        return false;
    }
    if (node.type === 3) {
        // text
        return true;
    }
    return !!(node.pre ||
        (!node.hasBindings && // no dynamic bindings
            !node.if &&
            !node.for && // not v-if or v-for or v-else
            !isBuiltInTag(node.tag) && // not a built-in
            isPlatformReservedTag$1(node.tag) && // not a component
            !isDirectChildOfTemplateFor(node) &&
            Object.keys(node).every(isStaticKey)));
}
function isDirectChildOfTemplateFor(node) {
    while (node.parent) {
        node = node.parent;
        if (node.tag !== 'template') {
            return false;
        }
        if (node.for) {
            return true;
        }
    }
    return false;
}

const fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
const fnInvokeRE = /\([^)]*?\);*$/;
const simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
// KeyboardEvent.keyCode aliases
const keyCodes = {
    esc: 27,
    tab: 9,
    enter: 13,
    space: 32,
    up: 38,
    left: 37,
    right: 39,
    down: 40,
    delete: [8, 46]
};
// KeyboardEvent.key aliases
const keyNames = {
    // #7880: IE11 and Edge use `Esc` for Escape key name.
    esc: ['Esc', 'Escape'],
    tab: 'Tab',
    enter: 'Enter',
    // #9112: IE11 uses `Spacebar` for Space key name.
    space: [' ', 'Spacebar'],
    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
    up: ['Up', 'ArrowUp'],
    left: ['Left', 'ArrowLeft'],
    right: ['Right', 'ArrowRight'],
    down: ['Down', 'ArrowDown'],
    // #9112: IE11 uses `Del` for Delete key name.
    delete: ['Backspace', 'Delete', 'Del']
};
// #4868: modifiers that prevent the execution of the listener
// need to explicitly return null so that we can determine whether to remove
// the listener for .once
const genGuard = condition => `if(${condition})return null;`;
const modifierCode = {
    stop: '$event.stopPropagation();',
    prevent: '$event.preventDefault();',
    self: genGuard(`$event.target !== $event.currentTarget`),
    ctrl: genGuard(`!$event.ctrlKey`),
    shift: genGuard(`!$event.shiftKey`),
    alt: genGuard(`!$event.altKey`),
    meta: genGuard(`!$event.metaKey`),
    left: genGuard(`'button' in $event && $event.button !== 0`),
    middle: genGuard(`'button' in $event && $event.button !== 1`),
    right: genGuard(`'button' in $event && $event.button !== 2`)
};
function genHandlers(events, isNative) {
    const prefix = isNative ? 'nativeOn:' : 'on:';
    let staticHandlers = ``;
    let dynamicHandlers = ``;
    for (const name in events) {
        const handlerCode = genHandler(events[name]);
        //@ts-expect-error
        if (events[name] && events[name].dynamic) {
            dynamicHandlers += `${name},${handlerCode},`;
        }
        else {
            staticHandlers += `"${name}":${handlerCode},`;
        }
    }
    staticHandlers = `{${staticHandlers.slice(0, -1)}}`;
    if (dynamicHandlers) {
        return prefix + `_d(${staticHandlers},[${dynamicHandlers.slice(0, -1)}])`;
    }
    else {
        return prefix + staticHandlers;
    }
}
function genHandler(handler) {
    if (!handler) {
        return 'function(){}';
    }
    if (Array.isArray(handler)) {
        return `[${handler.map(handler => genHandler(handler)).join(',')}]`;
    }
    const isMethodPath = simplePathRE.test(handler.value);
    const isFunctionExpression = fnExpRE.test(handler.value);
    const isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
    if (!handler.modifiers) {
        if (isMethodPath || isFunctionExpression) {
            return handler.value;
        }
        return `function($event){${isFunctionInvocation ? `return ${handler.value}` : handler.value}}`; // inline statement
    }
    else {
        let code = '';
        let genModifierCode = '';
        const keys = [];
        for (const key in handler.modifiers) {
            if (modifierCode[key]) {
                genModifierCode += modifierCode[key];
                // left/right
                if (keyCodes[key]) {
                    keys.push(key);
                }
            }
            else if (key === 'exact') {
                const modifiers = handler.modifiers;
                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
                    .filter(keyModifier => !modifiers[keyModifier])
                    .map(keyModifier => `$event.${keyModifier}Key`)
                    .join('||'));
            }
            else {
                keys.push(key);
            }
        }
        if (keys.length) {
            code += genKeyFilter(keys);
        }
        // Make sure modifiers like prevent and stop get executed after key filtering
        if (genModifierCode) {
            code += genModifierCode;
        }
        const handlerCode = isMethodPath
            ? `return ${handler.value}.apply(null, arguments)`
            : isFunctionExpression
                ? `return (${handler.value}).apply(null, arguments)`
                : isFunctionInvocation
                    ? `return ${handler.value}`
                    : handler.value;
        return `function($event){${code}${handlerCode}}`;
    }
}
function genKeyFilter(keys) {
    return (
    // make sure the key filters only apply to KeyboardEvents
    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
    // key events that do not have keyCode property...
    `if(!$event.type.indexOf('key')&&` +
        `${keys.map(genFilterCode).join('&&')})return null;`);
}
function genFilterCode(key) {
    const keyVal = parseInt(key, 10);
    if (keyVal) {
        return `$event.keyCode!==${keyVal}`;
    }
    const keyCode = keyCodes[key];
    const keyName = keyNames[key];
    return (`_k($event.keyCode,` +
        `${JSON.stringify(key)},` +
        `${JSON.stringify(keyCode)},` +
        `$event.key,` +
        `${JSON.stringify(keyName)}` +
        `)`);
}

function on(el, dir) {
    if (process.env.NODE_ENV !== 'production' && dir.modifiers) {
        warn$3(`v-on without argument does not support modifiers.`);
    }
    el.wrapListeners = (code) => `_g(${code},${dir.value})`;
}

function bind(el, dir) {
    el.wrapData = (code) => {
        return `_b(${code},'${el.tag}',${dir.value},${dir.modifiers && dir.modifiers.prop ? 'true' : 'false'}${dir.modifiers && dir.modifiers.sync ? ',true' : ''})`;
    };
}

var baseDirectives = {
    on,
    bind,
    cloak: noop
};

class CodegenState {
    constructor(options) {
        this.options = options;
        this.warn = options.warn || baseWarn;
        this.transforms = pluckModuleFunction(options.modules, 'transformCode');
        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
        this.directives = extend(extend({}, baseDirectives), options.directives);
        const isReservedTag = options.isReservedTag || no;
        this.maybeComponent = (el) => !!el.component || !isReservedTag(el.tag);
        this.onceId = 0;
        this.staticRenderFns = [];
        this.pre = false;
    }
}
function generate$1(ast, options) {
    const state = new CodegenState(options);
    // fix #11483, Root level <script> tags should not be rendered.
    const code = ast
        ? ast.tag === 'script'
            ? 'null'
            : genElement(ast, state)
        : '_c("div")';
    return {
        render: `with(this){return ${code}}`,
        staticRenderFns: state.staticRenderFns
    };
}
function genElement(el, state) {
    if (el.parent) {
        el.pre = el.pre || el.parent.pre;
    }
    if (el.staticRoot && !el.staticProcessed) {
        return genStatic(el, state);
    }
    else if (el.once && !el.onceProcessed) {
        return genOnce(el, state);
    }
    else if (el.for && !el.forProcessed) {
        return genFor(el, state);
    }
    else if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
        return genChildren(el, state) || 'void 0';
    }
    else if (el.tag === 'slot') {
        return genSlot(el, state);
    }
    else {
        // component or element
        let code;
        if (el.component) {
            code = genComponent(el.component, el, state);
        }
        else {
            let data;
            const maybeComponent = state.maybeComponent(el);
            if (!el.plain || (el.pre && maybeComponent)) {
                data = genData(el, state);
            }
            let tag;
            // check if this is a component in <script setup>
            const bindings = state.options.bindings;
            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
                tag = checkBindingType(bindings, el.tag);
            }
            if (!tag)
                tag = `'${el.tag}'`;
            const children = el.inlineTemplate ? null : genChildren(el, state, true);
            code = `_c(${tag}${data ? `,${data}` : '' // data
            }${children ? `,${children}` : '' // children
            })`;
        }
        // module transforms
        for (let i = 0; i < state.transforms.length; i++) {
            code = state.transforms[i](el, code);
        }
        return code;
    }
}
function checkBindingType(bindings, key) {
    const camelName = camelize(key);
    const PascalName = capitalize(camelName);
    const checkType = (type) => {
        if (bindings[key] === type) {
            return key;
        }
        if (bindings[camelName] === type) {
            return camelName;
        }
        if (bindings[PascalName] === type) {
            return PascalName;
        }
    };
    const fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
        checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
    if (fromConst) {
        return fromConst;
    }
    const fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
        checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
        checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
    if (fromMaybeRef) {
        return fromMaybeRef;
    }
}
// hoist static sub-trees out
function genStatic(el, state) {
    el.staticProcessed = true;
    // Some elements (templates) need to behave differently inside of a v-pre
    // node.  All pre nodes are static roots, so we can use this as a location to
    // wrap a state change and reset it upon exiting the pre node.
    const originalPreState = state.pre;
    if (el.pre) {
        state.pre = el.pre;
    }
    state.staticRenderFns.push(`with(this){return ${genElement(el, state)}}`);
    state.pre = originalPreState;
    return `_m(${state.staticRenderFns.length - 1}${el.staticInFor ? ',true' : ''})`;
}
// v-once
function genOnce(el, state) {
    el.onceProcessed = true;
    if (el.if && !el.ifProcessed) {
        return genIf(el, state);
    }
    else if (el.staticInFor) {
        let key = '';
        let parent = el.parent;
        while (parent) {
            if (parent.for) {
                key = parent.key;
                break;
            }
            parent = parent.parent;
        }
        if (!key) {
            process.env.NODE_ENV !== 'production' &&
                state.warn(`v-once can only be used inside v-for that is keyed. `, el.rawAttrsMap['v-once']);
            return genElement(el, state);
        }
        return `_o(${genElement(el, state)},${state.onceId++},${key})`;
    }
    else {
        return genStatic(el, state);
    }
}
function genIf(el, state, altGen, altEmpty) {
    el.ifProcessed = true; // avoid recursion
    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
}
function genIfConditions(conditions, state, altGen, altEmpty) {
    if (!conditions.length) {
        return altEmpty || '_e()';
    }
    const condition = conditions.shift();
    if (condition.exp) {
        return `(${condition.exp})?${genTernaryExp(condition.block)}:${genIfConditions(conditions, state, altGen, altEmpty)}`;
    }
    else {
        return `${genTernaryExp(condition.block)}`;
    }
    // v-if with v-once should generate code like (a)?_m(0):_m(1)
    function genTernaryExp(el) {
        return altGen
            ? altGen(el, state)
            : el.once
                ? genOnce(el, state)
                : genElement(el, state);
    }
}
function genFor(el, state, altGen, altHelper) {
    const exp = el.for;
    const alias = el.alias;
    const iterator1 = el.iterator1 ? `,${el.iterator1}` : '';
    const iterator2 = el.iterator2 ? `,${el.iterator2}` : '';
    if (process.env.NODE_ENV !== 'production' &&
        state.maybeComponent(el) &&
        el.tag !== 'slot' &&
        el.tag !== 'template' &&
        !el.key) {
        state.warn(`<${el.tag} v-for="${alias} in ${exp}">: component lists rendered with ` +
            `v-for should have explicit keys. ` +
            `See https://v2.vuejs.org/v2/guide/list.html#key for more info.`, el.rawAttrsMap['v-for'], true /* tip */);
    }
    el.forProcessed = true; // avoid recursion
    return (`${altHelper || '_l'}((${exp}),` +
        `function(${alias}${iterator1}${iterator2}){` +
        `return ${(altGen || genElement)(el, state)}` +
        '})');
}
function genData(el, state) {
    let data = '{';
    // directives first.
    // directives may mutate the el's other properties before they are generated.
    const dirs = genDirectives(el, state);
    if (dirs)
        data += dirs + ',';
    // key
    if (el.key) {
        data += `key:${el.key},`;
    }
    // ref
    if (el.ref) {
        data += `ref:${el.ref},`;
    }
    if (el.refInFor) {
        data += `refInFor:true,`;
    }
    // pre
    if (el.pre) {
        data += `pre:true,`;
    }
    // record original tag name for components using "is" attribute
    if (el.component) {
        data += `tag:"${el.tag}",`;
    }
    // module data generation functions
    for (let i = 0; i < state.dataGenFns.length; i++) {
        data += state.dataGenFns[i](el);
    }
    // attributes
    if (el.attrs) {
        data += `attrs:${genProps(el.attrs)},`;
    }
    // DOM props
    if (el.props) {
        data += `domProps:${genProps(el.props)},`;
    }
    // event handlers
    if (el.events) {
        data += `${genHandlers(el.events, false)},`;
    }
    if (el.nativeEvents) {
        data += `${genHandlers(el.nativeEvents, true)},`;
    }
    // slot target
    // only for non-scoped slots
    if (el.slotTarget && !el.slotScope) {
        data += `slot:${el.slotTarget},`;
    }
    // scoped slots
    if (el.scopedSlots) {
        data += `${genScopedSlots(el, el.scopedSlots, state)},`;
    }
    // component v-model
    if (el.model) {
        data += `model:{value:${el.model.value},callback:${el.model.callback},expression:${el.model.expression}},`;
    }
    // inline-template
    if (el.inlineTemplate) {
        const inlineTemplate = genInlineTemplate(el, state);
        if (inlineTemplate) {
            data += `${inlineTemplate},`;
        }
    }
    data = data.replace(/,$/, '') + '}';
    // v-bind dynamic argument wrap
    // v-bind with dynamic arguments must be applied using the same v-bind object
    // merge helper so that class/style/mustUseProp attrs are handled correctly.
    if (el.dynamicAttrs) {
        data = `_b(${data},"${el.tag}",${genProps(el.dynamicAttrs)})`;
    }
    // v-bind data wrap
    if (el.wrapData) {
        data = el.wrapData(data);
    }
    // v-on data wrap
    if (el.wrapListeners) {
        data = el.wrapListeners(data);
    }
    return data;
}
function genDirectives(el, state) {
    const dirs = el.directives;
    if (!dirs)
        return;
    let res = 'directives:[';
    let hasRuntime = false;
    let i, l, dir, needRuntime;
    for (i = 0, l = dirs.length; i < l; i++) {
        dir = dirs[i];
        needRuntime = true;
        const gen = state.directives[dir.name];
        if (gen) {
            // compile-time directive that manipulates AST.
            // returns true if it also needs a runtime counterpart.
            needRuntime = !!gen(el, dir, state.warn);
        }
        if (needRuntime) {
            hasRuntime = true;
            res += `{name:"${dir.name}",rawName:"${dir.rawName}"${dir.value
                ? `,value:(${dir.value}),expression:${JSON.stringify(dir.value)}`
                : ''}${dir.arg ? `,arg:${dir.isDynamicArg ? dir.arg : `"${dir.arg}"`}` : ''}${dir.modifiers ? `,modifiers:${JSON.stringify(dir.modifiers)}` : ''}},`;
        }
    }
    if (hasRuntime) {
        return res.slice(0, -1) + ']';
    }
}
function genInlineTemplate(el, state) {
    const ast = el.children[0];
    if (process.env.NODE_ENV !== 'production' && (el.children.length !== 1 || ast.type !== 1)) {
        state.warn('Inline-template components must have exactly one child element.', { start: el.start });
    }
    if (ast && ast.type === 1) {
        const inlineRenderFns = generate$1(ast, state.options);
        return `inlineTemplate:{render:function(){${inlineRenderFns.render}},staticRenderFns:[${inlineRenderFns.staticRenderFns
            .map(code => `function(){${code}}`)
            .join(',')}]}`;
    }
}
function genScopedSlots(el, slots, state) {
    // by default scoped slots are considered "stable", this allows child
    // components with only scoped slots to skip forced updates from parent.
    // but in some cases we have to bail-out of this optimization
    // for example if the slot contains dynamic names, has v-if or v-for on them...
    let needsForceUpdate = el.for ||
        Object.keys(slots).some(key => {
            const slot = slots[key];
            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
            );
        });
    // #9534: if a component with scoped slots is inside a conditional branch,
    // it's possible for the same component to be reused but with different
    // compiled slot content. To avoid that, we generate a unique key based on
    // the generated code of all the slot contents.
    let needsKey = !!el.if;
    // OR when it is inside another scoped slot or v-for (the reactivity may be
    // disconnected due to the intermediate scope variable)
    // #9438, #9506
    // TODO: this can be further optimized by properly analyzing in-scope bindings
    // and skip force updating ones that do not actually use scope variables.
    if (!needsForceUpdate) {
        let parent = el.parent;
        while (parent) {
            if ((parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||
                parent.for) {
                needsForceUpdate = true;
                break;
            }
            if (parent.if) {
                needsKey = true;
            }
            parent = parent.parent;
        }
    }
    const generatedSlots = Object.keys(slots)
        .map(key => genScopedSlot(slots[key], state))
        .join(',');
    return `scopedSlots:_u([${generatedSlots}]${needsForceUpdate ? `,null,true` : ``}${!needsForceUpdate && needsKey ? `,null,false,${hash(generatedSlots)}` : ``})`;
}
function hash(str) {
    let hash = 5381;
    let i = str.length;
    while (i) {
        hash = (hash * 33) ^ str.charCodeAt(--i);
    }
    return hash >>> 0;
}
function containsSlotChild(el) {
    if (el.type === 1) {
        if (el.tag === 'slot') {
            return true;
        }
        return el.children.some(containsSlotChild);
    }
    return false;
}
function genScopedSlot(el, state) {
    const isLegacySyntax = el.attrsMap['slot-scope'];
    if (el.if && !el.ifProcessed && !isLegacySyntax) {
        return genIf(el, state, genScopedSlot, `null`);
    }
    if (el.for && !el.forProcessed) {
        return genFor(el, state, genScopedSlot);
    }
    const slotScope = el.slotScope === emptySlotScopeToken ? `` : String(el.slotScope);
    const fn = `function(${slotScope}){` +
        `return ${el.tag === 'template'
            ? el.if && isLegacySyntax
                ? `(${el.if})?${genChildren(el, state) || 'undefined'}:undefined`
                : genChildren(el, state) || 'undefined'
            : genElement(el, state)}}`;
    // reverse proxy v-slot without scope on this.$slots
    const reverseProxy = slotScope ? `` : `,proxy:true`;
    return `{key:${el.slotTarget || `"default"`},fn:${fn}${reverseProxy}}`;
}
function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
    const children = el.children;
    if (children.length) {
        const el = children[0];
        // optimize single v-for
        if (children.length === 1 &&
            el.for &&
            el.tag !== 'template' &&
            el.tag !== 'slot') {
            const normalizationType = checkSkip
                ? state.maybeComponent(el)
                    ? `,1`
                    : `,0`
                : ``;
            return `${(altGenElement || genElement)(el, state)}${normalizationType}`;
        }
        const normalizationType = checkSkip
            ? getNormalizationType(children, state.maybeComponent)
            : 0;
        const gen = altGenNode || genNode;
        return `[${children.map(c => gen(c, state)).join(',')}]${normalizationType ? `,${normalizationType}` : ''}`;
    }
}
// determine the normalization needed for the children array.
// 0: no normalization needed
// 1: simple normalization needed (possible 1-level deep nested array)
// 2: full normalization needed
function getNormalizationType(children, maybeComponent) {
    let res = 0;
    for (let i = 0; i < children.length; i++) {
        const el = children[i];
        if (el.type !== 1) {
            continue;
        }
        if (needsNormalization(el) ||
            (el.ifConditions &&
                el.ifConditions.some(c => needsNormalization(c.block)))) {
            res = 2;
            break;
        }
        if (maybeComponent(el) ||
            (el.ifConditions && el.ifConditions.some(c => maybeComponent(c.block)))) {
            res = 1;
        }
    }
    return res;
}
function needsNormalization(el) {
    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
}
function genNode(node, state) {
    if (node.type === 1) {
        return genElement(node, state);
    }
    else if (node.type === 3 && node.isComment) {
        return genComment(node);
    }
    else {
        return genText(node);
    }
}
function genText(text) {
    return `_v(${text.type === 2
        ? text.expression // no need for () because already wrapped in _s()
        : transformSpecialNewlines(JSON.stringify(text.text))})`;
}
function genComment(comment) {
    return `_e(${JSON.stringify(comment.text)})`;
}
function genSlot(el, state) {
    const slotName = el.slotName || '"default"';
    const children = genChildren(el, state);
    let res = `_t(${slotName}${children ? `,function(){return ${children}}` : ''}`;
    const attrs = el.attrs || el.dynamicAttrs
        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(attr => ({
            // slot props are camelized
            name: camelize(attr.name),
            value: attr.value,
            dynamic: attr.dynamic
        })))
        : null;
    const bind = el.attrsMap['v-bind'];
    if ((attrs || bind) && !children) {
        res += `,null`;
    }
    if (attrs) {
        res += `,${attrs}`;
    }
    if (bind) {
        res += `${attrs ? '' : ',null'},${bind}`;
    }
    return res + ')';
}
// componentName is el.component, take it as argument to shun flow's pessimistic refinement
function genComponent(componentName, el, state) {
    const children = el.inlineTemplate ? null : genChildren(el, state, true);
    return `_c(${componentName},${genData(el, state)}${children ? `,${children}` : ''})`;
}
function genProps(props) {
    let staticProps = ``;
    let dynamicProps = ``;
    for (let i = 0; i < props.length; i++) {
        const prop = props[i];
        const value = transformSpecialNewlines(prop.value);
        if (prop.dynamic) {
            dynamicProps += `${prop.name},${value},`;
        }
        else {
            staticProps += `"${prop.name}":${value},`;
        }
    }
    staticProps = `{${staticProps.slice(0, -1)}}`;
    if (dynamicProps) {
        return `_d(${staticProps},[${dynamicProps.slice(0, -1)}])`;
    }
    else {
        return staticProps;
    }
}
// #3895, #4268
function transformSpecialNewlines(text) {
    return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
}

// these keywords should not appear inside expressions, but operators like
// typeof, instanceof and in are allowed
const prohibitedKeywordRE = new RegExp('\\b' +
    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
        'super,throw,while,yield,delete,export,import,return,switch,default,' +
        'extends,finally,continue,debugger,function,arguments')
        .split(',')
        .join('\\b|\\b') +
    '\\b');
// these unary operators should not be used as property/method names
const unaryOperatorsRE = new RegExp('\\b' +
    'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
    '\\s*\\([^\\)]*\\)');
// strip strings in expressions
const stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
// detect problematic expressions in a template
function detectErrors(ast, warn) {
    if (ast) {
        checkNode(ast, warn);
    }
}
function checkNode(node, warn) {
    if (node.type === 1) {
        for (const name in node.attrsMap) {
            if (dirRE.test(name)) {
                const value = node.attrsMap[name];
                if (value) {
                    const range = node.rawAttrsMap[name];
                    if (name === 'v-for') {
                        checkFor(node, `v-for="${value}"`, warn, range);
                    }
                    else if (name === 'v-slot' || name[0] === '#') {
                        checkFunctionParameterExpression(value, `${name}="${value}"`, warn, range);
                    }
                    else if (onRE.test(name)) {
                        checkEvent(value, `${name}="${value}"`, warn, range);
                    }
                    else {
                        checkExpression(value, `${name}="${value}"`, warn, range);
                    }
                }
            }
        }
        if (node.children) {
            for (let i = 0; i < node.children.length; i++) {
                checkNode(node.children[i], warn);
            }
        }
    }
    else if (node.type === 2) {
        checkExpression(node.expression, node.text, warn, node);
    }
}
function checkEvent(exp, text, warn, range) {
    const stripped = exp.replace(stripStringRE, '');
    const keywordMatch = stripped.match(unaryOperatorsRE);
    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
        warn(`avoid using JavaScript unary operator as property name: ` +
            `"${keywordMatch[0]}" in expression ${text.trim()}`, range);
    }
    checkExpression(exp, text, warn, range);
}
function checkFor(node, text, warn, range) {
    checkExpression(node.for || '', text, warn, range);
    checkIdentifier(node.alias, 'v-for alias', text, warn, range);
    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
}
function checkIdentifier(ident, type, text, warn, range) {
    if (typeof ident === 'string') {
        try {
            new Function(`var ${ident}=_`);
        }
        catch (e) {
            warn(`invalid ${type} "${ident}" in expression: ${text.trim()}`, range);
        }
    }
}
function checkExpression(exp, text, warn, range) {
    try {
        new Function(`return ${exp}`);
    }
    catch (e) {
        const keywordMatch = exp
            .replace(stripStringRE, '')
            .match(prohibitedKeywordRE);
        if (keywordMatch) {
            warn(`avoid using JavaScript keyword as property name: ` +
                `"${keywordMatch[0]}"\n  Raw expression: ${text.trim()}`, range);
        }
        else {
            warn(`invalid expression: ${e.message} in\n\n` +
                `    ${exp}\n\n` +
                `  Raw expression: ${text.trim()}\n`, range);
        }
    }
}
function checkFunctionParameterExpression(exp, text, warn, range) {
    try {
        new Function(exp, '');
    }
    catch (e) {
        warn(`invalid function parameter expression: ${e.message} in\n\n` +
            `    ${exp}\n\n` +
            `  Raw expression: ${text.trim()}\n`, range);
    }
}

function createFunction(code, errors) {
    try {
        return new Function(code);
    }
    catch (err) {
        errors.push({ err, code });
        return noop;
    }
}
function createCompileToFunctionFn(compile) {
    const cache = Object.create(null);
    return function compileToFunctions(template, options, vm) {
        options = extend({}, options);
        const warn = options.warn || warn$3;
        delete options.warn;
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production') {
            // detect possible CSP restriction
            try {
                new Function('return 1');
            }
            catch (e) {
                if (e.toString().match(/unsafe-eval|CSP/)) {
                    warn('It seems you are using the standalone build of Vue.js in an ' +
                        'environment with Content Security Policy that prohibits unsafe-eval. ' +
                        'The template compiler cannot work in this environment. Consider ' +
                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
                        'templates into render functions.');
                }
            }
        }
        // check cache
        const key = options.delimiters
            ? String(options.delimiters) + template
            : template;
        if (cache[key]) {
            return cache[key];
        }
        // compile
        const compiled = compile(template, options);
        // check compilation errors/tips
        if (process.env.NODE_ENV !== 'production') {
            if (compiled.errors && compiled.errors.length) {
                if (options.outputSourceRange) {
                    compiled.errors.forEach(e => {
                        warn(`Error compiling template:\n\n${e.msg}\n\n` +
                            generateCodeFrame(template, e.start, e.end), vm);
                    });
                }
                else {
                    warn(`Error compiling template:\n\n${template}\n\n` +
                        compiled.errors.map(e => `- ${e}`).join('\n') +
                        '\n', vm);
                }
            }
            if (compiled.tips && compiled.tips.length) {
                if (options.outputSourceRange) {
                    compiled.tips.forEach(e => tip(e.msg, vm));
                }
                else {
                    compiled.tips.forEach(msg => tip(msg, vm));
                }
            }
        }
        // turn code into functions
        const res = {};
        const fnGenErrors = [];
        res.render = createFunction(compiled.render, fnGenErrors);
        res.staticRenderFns = compiled.staticRenderFns.map(code => {
            return createFunction(code, fnGenErrors);
        });
        // check function generation errors.
        // this should only happen if there is a bug in the compiler itself.
        // mostly for codegen development use
        /* istanbul ignore if */
        if (process.env.NODE_ENV !== 'production') {
            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
                warn(`Failed to generate render function:\n\n` +
                    fnGenErrors
                        .map(({ err, code }) => `${err.toString()} in\n\n${code}\n`)
                        .join('\n'), vm);
            }
        }
        return (cache[key] = res);
    };
}

function createCompilerCreator(baseCompile) {
    return function createCompiler(baseOptions) {
        function compile(template, options) {
            const finalOptions = Object.create(baseOptions);
            const errors = [];
            const tips = [];
            let warn = (msg, range, tip) => {
                (tip ? tips : errors).push(msg);
            };
            if (options) {
                if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                    // $flow-disable-line
                    const leadingSpaceLength = template.match(/^\s*/)[0].length;
                    warn = (msg, range, tip) => {
                        const data = typeof msg === 'string' ? { msg } : msg;
                        if (range) {
                            if (range.start != null) {
                                data.start = range.start + leadingSpaceLength;
                            }
                            if (range.end != null) {
                                data.end = range.end + leadingSpaceLength;
                            }
                        }
                        (tip ? tips : errors).push(data);
                    };
                }
                // merge custom modules
                if (options.modules) {
                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
                }
                // merge custom directives
                if (options.directives) {
                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
                }
                // copy other options
                for (const key in options) {
                    if (key !== 'modules' && key !== 'directives') {
                        finalOptions[key] = options[key];
                    }
                }
            }
            finalOptions.warn = warn;
            const compiled = baseCompile(template.trim(), finalOptions);
            if (process.env.NODE_ENV !== 'production') {
                detectErrors(compiled.ast, warn);
            }
            compiled.errors = errors;
            compiled.tips = tips;
            return compiled;
        }
        return {
            compile,
            compileToFunctions: createCompileToFunctionFn(compile)
        };
    };
}

// `createCompilerCreator` allows creating compilers that use alternative
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
// Here we just export a default compiler using the default parts.
const createCompiler$1 = createCompilerCreator(function baseCompile(template, options) {
    const ast = parse$1(template.trim(), options);
    if (options.optimize !== false) {
        optimize$1(ast, options);
    }
    const code = generate$1(ast, options);
    return {
        ast,
        render: code.render,
        staticRenderFns: code.staticRenderFns
    };
});

const { compile: compile$1, compileToFunctions: compileToFunctions$1 } = createCompiler$1(baseOptions);

const isAttr = makeMap('accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' +
    'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' +
    'checked,cite,class,code,codebase,color,cols,colspan,content,' +
    'contenteditable,contextmenu,controls,coords,data,datetime,default,' +
    'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,for,' +
    'form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,' +
    'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' +
    'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' +
    'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' +
    'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' +
    'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' +
    'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' +
    'target,title,usemap,value,width,wrap');
/* istanbul ignore next */
const isRenderableAttr = (name) => {
    return (isAttr(name) || name.indexOf('data-') === 0 || name.indexOf('aria-') === 0);
};
const propsToAttrMap = {
    acceptCharset: 'accept-charset',
    className: 'class',
    htmlFor: 'for',
    httpEquiv: 'http-equiv'
};
const ESC = {
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    '&': '&amp;'
};
function escape(s) {
    return s.replace(/[<>"&]/g, escapeChar);
}
function escapeChar(a) {
    return ESC[a] || a;
}

const plainStringRE = /^"(?:[^"\\]|\\.)*"$|^'(?:[^'\\]|\\.)*'$/;
// let the model AST transform translate v-model into appropriate
// props bindings
function applyModelTransform(el, state) {
    if (el.directives) {
        for (let i = 0; i < el.directives.length; i++) {
            const dir = el.directives[i];
            if (dir.name === 'model') {
                state.directives.model(el, dir, state.warn);
                // remove value for textarea as its converted to text
                if (el.tag === 'textarea' && el.props) {
                    el.props = el.props.filter(p => p.name !== 'value');
                }
                break;
            }
        }
    }
}
function genAttrSegments(attrs) {
    return attrs.map(({ name, value }) => genAttrSegment(name, value));
}
function genDOMPropSegments(props, attrs) {
    const segments = [];
    props.forEach(({ name, value }) => {
        name = propsToAttrMap[name] || name.toLowerCase();
        if (isRenderableAttr(name) &&
            !(attrs && attrs.some(a => a.name === name))) {
            segments.push(genAttrSegment(name, value));
        }
    });
    return segments;
}
function genAttrSegment(name, value) {
    if (plainStringRE.test(value)) {
        // force double quote
        value = value.replace(/^'|'$/g, '"');
        // force enumerated attr to "true"
        if (isEnumeratedAttr(name) && value !== `"false"`) {
            value = `"true"`;
        }
        return {
            type: RAW,
            value: isBooleanAttr(name)
                ? ` ${name}="${name}"`
                : value === '""'
                    ? ` ${name}`
                    : ` ${name}="${JSON.parse(value)}"`
        };
    }
    else {
        return {
            type: EXPRESSION,
            value: `_ssrAttr(${JSON.stringify(name)},${value})`
        };
    }
}
function genClassSegments(staticClass, classBinding) {
    if (staticClass && !classBinding) {
        return [{ type: RAW, value: ` class="${JSON.parse(staticClass)}"` }];
    }
    else {
        return [
            {
                type: EXPRESSION,
                value: `_ssrClass(${staticClass || 'null'},${classBinding || 'null'})`
            }
        ];
    }
}
function genStyleSegments(staticStyle, parsedStaticStyle, styleBinding, vShowExpression) {
    if (staticStyle && !styleBinding && !vShowExpression) {
        return [{ type: RAW, value: ` style=${JSON.stringify(staticStyle)}` }];
    }
    else {
        return [
            {
                type: EXPRESSION,
                value: `_ssrStyle(${parsedStaticStyle || 'null'},${styleBinding || 'null'}, ${vShowExpression
                    ? `{ display: (${vShowExpression}) ? '' : 'none' }`
                    : 'null'})`
            }
        ];
    }
}

/**
 * In SSR, the vdom tree is generated only once and never patched, so
 * we can optimize most element / trees into plain string render functions.
 * The SSR optimizer walks the AST tree to detect optimizable elements and trees.
 *
 * The criteria for SSR optimizability is quite a bit looser than static tree
 * detection (which is designed for client re-render). In SSR we bail only for
 * components/slots/custom directives.
 */
// optimizability constants
const optimizability = {
    FALSE: 0,
    FULL: 1,
    SELF: 2,
    CHILDREN: 3,
    PARTIAL: 4 // self un-optimizable with some un-optimizable children
};
let isPlatformReservedTag;
function optimize(root, options) {
    if (!root)
        return;
    isPlatformReservedTag = options.isReservedTag || no;
    walk(root, true);
}
function walk(node, isRoot) {
    if (isUnOptimizableTree(node)) {
        node.ssrOptimizability = optimizability.FALSE;
        return;
    }
    // root node or nodes with custom directives should always be a VNode
    const selfUnoptimizable = isRoot || hasCustomDirective(node);
    const check = child => {
        if (child.ssrOptimizability !== optimizability.FULL) {
            node.ssrOptimizability = selfUnoptimizable
                ? optimizability.PARTIAL
                : optimizability.SELF;
        }
    };
    if (selfUnoptimizable) {
        node.ssrOptimizability = optimizability.CHILDREN;
    }
    if (node.type === 1) {
        for (let i = 0, l = node.children.length; i < l; i++) {
            const child = node.children[i];
            walk(child);
            check(child);
        }
        if (node.ifConditions) {
            for (let i = 1, l = node.ifConditions.length; i < l; i++) {
                const block = node.ifConditions[i].block;
                walk(block, isRoot);
                check(block);
            }
        }
        if (node.ssrOptimizability == null ||
            (!isRoot && (node.attrsMap['v-html'] || node.attrsMap['v-text']))) {
            node.ssrOptimizability = optimizability.FULL;
        }
        else {
            node.children = optimizeSiblings(node);
        }
    }
    else {
        node.ssrOptimizability = optimizability.FULL;
    }
}
function optimizeSiblings(el) {
    const children = el.children;
    const optimizedChildren = [];
    let currentOptimizableGroup = [];
    const pushGroup = () => {
        if (currentOptimizableGroup.length) {
            optimizedChildren.push({
                type: 1,
                parent: el,
                tag: 'template',
                attrsList: [],
                attrsMap: {},
                rawAttrsMap: {},
                children: currentOptimizableGroup,
                ssrOptimizability: optimizability.FULL
            });
        }
        currentOptimizableGroup = [];
    };
    for (let i = 0; i < children.length; i++) {
        const c = children[i];
        if (c.ssrOptimizability === optimizability.FULL) {
            currentOptimizableGroup.push(c);
        }
        else {
            // wrap fully-optimizable adjacent siblings inside a template tag
            // so that they can be optimized into a single ssrNode by codegen
            pushGroup();
            optimizedChildren.push(c);
        }
    }
    pushGroup();
    return optimizedChildren;
}
function isUnOptimizableTree(node) {
    if (node.type === 2 || node.type === 3) {
        // text or expression
        return false;
    }
    return (isBuiltInTag(node.tag) || // built-in (slot, component)
        !isPlatformReservedTag(node.tag) || // custom component
        !!node.component || // "is" component
        isSelectWithModel(node) // <select v-model> requires runtime inspection
    );
}
const isBuiltInDir = makeMap('text,html,show,on,bind,model,pre,cloak,once');
function hasCustomDirective(node) {
    return (node.type === 1 &&
        node.directives &&
        node.directives.some(d => !isBuiltInDir(d.name)));
}
// <select v-model> cannot be optimized because it requires a runtime check
// to determine proper selected option
function isSelectWithModel(node) {
    return (node.type === 1 &&
        node.tag === 'select' &&
        node.directives != null &&
        node.directives.some(d => d.name === 'model'));
}

// The SSR codegen is essentially extending the default codegen to handle
// segment types
const RAW = 0;
const INTERPOLATION = 1;
const EXPRESSION = 2;
function generate(ast, options) {
    const state = new CodegenState(options);
    const code = ast ? genSSRElement(ast, state) : '_c("div")';
    return {
        render: `with(this){return ${code}}`,
        staticRenderFns: state.staticRenderFns
    };
}
function genSSRElement(el, state) {
    if (el.for && !el.forProcessed) {
        return genFor(el, state, genSSRElement);
    }
    else if (el.if && !el.ifProcessed) {
        return genIf(el, state, genSSRElement);
    }
    else if (el.tag === 'template' && !el.slotTarget) {
        return el.ssrOptimizability === optimizability.FULL
            ? genChildrenAsStringNode(el, state)
            : genSSRChildren(el, state) || 'void 0';
    }
    switch (el.ssrOptimizability) {
        case optimizability.FULL:
            // stringify whole tree
            return genStringElement(el, state);
        case optimizability.SELF:
            // stringify self and check children
            return genStringElementWithChildren(el, state);
        case optimizability.CHILDREN:
            // generate self as VNode and stringify children
            return genNormalElement(el, state, true);
        case optimizability.PARTIAL:
            // generate self as VNode and check children
            return genNormalElement(el, state, false);
        default:
            // bail whole tree
            return genElement(el, state);
    }
}
function genNormalElement(el, state, stringifyChildren) {
    const data = el.plain ? undefined : genData(el, state);
    const children = stringifyChildren
        ? `[${genChildrenAsStringNode(el, state)}]`
        : genSSRChildren(el, state, true);
    return `_c('${el.tag}'${data ? `,${data}` : ''}${children ? `,${children}` : ''})`;
}
function genSSRChildren(el, state, checkSkip) {
    return genChildren(el, state, checkSkip, genSSRElement, genSSRNode);
}
function genSSRNode(el, state) {
    return el.type === 1 ? genSSRElement(el, state) : genText(el);
}
function genChildrenAsStringNode(el, state) {
    return el.children.length
        ? `_ssrNode(${flattenSegments(childrenToSegments(el, state))})`
        : '';
}
function genStringElement(el, state) {
    return `_ssrNode(${elementToString(el, state)})`;
}
function genStringElementWithChildren(el, state) {
    const children = genSSRChildren(el, state, true);
    return `_ssrNode(${flattenSegments(elementToOpenTagSegments(el, state))},"</${el.tag}>"${children ? `,${children}` : ''})`;
}
function elementToString(el, state) {
    return `(${flattenSegments(elementToSegments(el, state))})`;
}
function elementToSegments(el, state) {
    // v-for / v-if
    if (el.for && !el.forProcessed) {
        el.forProcessed = true;
        return [
            {
                type: EXPRESSION,
                value: genFor(el, state, elementToString, '_ssrList')
            }
        ];
    }
    else if (el.if && !el.ifProcessed) {
        el.ifProcessed = true;
        return [
            {
                type: EXPRESSION,
                value: genIf(el, state, elementToString, '"<!---->"')
            }
        ];
    }
    else if (el.tag === 'template') {
        return childrenToSegments(el, state);
    }
    const openSegments = elementToOpenTagSegments(el, state);
    const childrenSegments = childrenToSegments(el, state);
    const { isUnaryTag } = state.options;
    const close = isUnaryTag && isUnaryTag(el.tag)
        ? []
        : [{ type: RAW, value: `</${el.tag}>` }];
    return openSegments.concat(childrenSegments, close);
}
function elementToOpenTagSegments(el, state) {
    applyModelTransform(el, state);
    let binding;
    const segments = [{ type: RAW, value: `<${el.tag}` }];
    // attrs
    if (el.attrs) {
        segments.push.apply(segments, genAttrSegments(el.attrs));
    }
    // domProps
    if (el.props) {
        segments.push.apply(segments, genDOMPropSegments(el.props, el.attrs));
    }
    // v-bind="object"
    if ((binding = el.attrsMap['v-bind'])) {
        segments.push({ type: EXPRESSION, value: `_ssrAttrs(${binding})` });
    }
    // v-bind.prop="object"
    if ((binding = el.attrsMap['v-bind.prop'])) {
        segments.push({ type: EXPRESSION, value: `_ssrDOMProps(${binding})` });
    }
    // class
    if (el.staticClass || el.classBinding) {
        segments.push.apply(segments, genClassSegments(el.staticClass, el.classBinding));
    }
    // style & v-show
    if (el.staticStyle || el.styleBinding || el.attrsMap['v-show']) {
        segments.push.apply(segments, genStyleSegments(el.attrsMap.style, el.staticStyle, el.styleBinding, el.attrsMap['v-show']));
    }
    // _scopedId
    if (state.options.scopeId) {
        segments.push({ type: RAW, value: ` ${state.options.scopeId}` });
    }
    segments.push({ type: RAW, value: `>` });
    return segments;
}
function childrenToSegments(el, state) {
    let binding;
    if ((binding = el.attrsMap['v-html'])) {
        return [{ type: EXPRESSION, value: `_s(${binding})` }];
    }
    if ((binding = el.attrsMap['v-text'])) {
        return [{ type: INTERPOLATION, value: `_s(${binding})` }];
    }
    if (el.tag === 'textarea' && (binding = el.attrsMap['v-model'])) {
        return [{ type: INTERPOLATION, value: `_s(${binding})` }];
    }
    return el.children ? nodesToSegments(el.children, state) : [];
}
function nodesToSegments(children, state) {
    const segments = [];
    for (let i = 0; i < children.length; i++) {
        const c = children[i];
        if (c.type === 1) {
            segments.push.apply(segments, elementToSegments(c, state));
        }
        else if (c.type === 2) {
            segments.push({ type: INTERPOLATION, value: c.expression });
        }
        else if (c.type === 3) {
            let text = escape(c.text);
            if (c.isComment) {
                text = '<!--' + text + '-->';
            }
            segments.push({ type: RAW, value: text });
        }
    }
    return segments;
}
function flattenSegments(segments) {
    const mergedSegments = [];
    let textBuffer = '';
    const pushBuffer = () => {
        if (textBuffer) {
            mergedSegments.push(JSON.stringify(textBuffer));
            textBuffer = '';
        }
    };
    for (let i = 0; i < segments.length; i++) {
        const s = segments[i];
        if (s.type === RAW) {
            textBuffer += s.value;
        }
        else if (s.type === INTERPOLATION) {
            pushBuffer();
            mergedSegments.push(`_ssrEscape(${s.value})`);
        }
        else if (s.type === EXPRESSION) {
            pushBuffer();
            mergedSegments.push(`(${s.value})`);
        }
    }
    pushBuffer();
    return mergedSegments.join('+');
}

const createCompiler = createCompilerCreator(function baseCompile(template, options) {
    const ast = parse$1(template.trim(), options);
    optimize(ast, options);
    const code = generate(ast, options);
    return {
        ast,
        render: code.render,
        staticRenderFns: code.staticRenderFns
    };
});

const { compile, compileToFunctions } = createCompiler(baseOptions);

var _compiler = /*#__PURE__*/Object.freeze({
	__proto__: null,
	parseComponent: parseComponent,
	compile: compile$1,
	compileToFunctions: compileToFunctions$1,
	ssrCompile: compile,
	ssrCompileToFunctions: compileToFunctions,
	generateCodeFrame: generateCodeFrame
});

function compileTemplate(options) {
    const { preprocessLang } = options;
    const preprocessor = preprocessLang && consolidate[preprocessLang];
    if (preprocessor) {
        return actuallyCompile(Object.assign({}, options, {
            source: preprocess$1(options, preprocessor)
        }));
    }
    else if (preprocessLang) {
        return {
            ast: {},
            code: `var render = function () {}\n` + `var staticRenderFns = []\n`,
            source: options.source,
            tips: [
                `Component ${options.filename} uses lang ${preprocessLang} for template. Please install the language preprocessor.`
            ],
            errors: [
                `Component ${options.filename} uses lang ${preprocessLang} for template, however it is not installed.`
            ]
        };
    }
    else {
        return actuallyCompile(options);
    }
}
function preprocess$1(options, preprocessor) {
    const { source, filename, preprocessOptions } = options;
    const finalPreprocessOptions = Object.assign({
        filename
    }, preprocessOptions);
    // Consolidate exposes a callback based API, but the callback is in fact
    // called synchronously for most templating engines. In our case, we have to
    // expose a synchronous API so that it is usable in Jest transforms (which
    // have to be sync because they are applied via Node.js require hooks)
    let res, err;
    preprocessor.render(source, finalPreprocessOptions, (_err, _res) => {
        if (_err)
            err = _err;
        res = _res;
    });
    if (err)
        throw err;
    return res;
}
function actuallyCompile(options) {
    const { source, compiler = _compiler, compilerOptions = {}, transpileOptions = {}, transformAssetUrls, transformAssetUrlsOptions, isProduction = process.env.NODE_ENV === 'production', isFunctional = false, optimizeSSR = false, prettify = true, isTS = false, bindings } = options;
    const compile = optimizeSSR && compiler.ssrCompile ? compiler.ssrCompile : compiler.compile;
    let finalCompilerOptions = compilerOptions;
    if (transformAssetUrls) {
        const builtInModules = [
            transformAssetUrls === true
                ? assetUrlsModule(undefined, transformAssetUrlsOptions)
                : assetUrlsModule(transformAssetUrls, transformAssetUrlsOptions),
            srcsetModule(transformAssetUrlsOptions)
        ];
        finalCompilerOptions = Object.assign({}, compilerOptions, {
            modules: [...builtInModules, ...(compilerOptions.modules || [])],
            filename: options.filename
        });
    }
    finalCompilerOptions.bindings = bindings;
    const { ast, render, staticRenderFns, tips, errors } = compile(source, finalCompilerOptions);
    if (errors && errors.length) {
        return {
            ast,
            code: `var render = function () {}\n` + `var staticRenderFns = []\n`,
            source,
            tips,
            errors
        };
    }
    else {
        // stripping `with` usage
        let code = `var __render__ = ${prefixIdentifiers(`function render(${isFunctional ? `_c,_vm` : ``}){${render}\n}`, isFunctional, isTS, transpileOptions, bindings)}\n` +
            `var __staticRenderFns__ = [${staticRenderFns.map(code => prefixIdentifiers(`function (${isFunctional ? `_c,_vm` : ``}){${code}\n}`, isFunctional, isTS, transpileOptions, bindings))}]` +
            `\n`;
        // #23 we use __render__ to avoid `render` not being prefixed by the
        // transpiler when stripping with, but revert it back to `render` to
        // maintain backwards compat
        code = code.replace(/\s__(render|staticRenderFns)__\s/g, ' $1 ');
        if (!isProduction) {
            // mark with stripped (this enables Vue to use correct runtime proxy
            // detection)
            code += `render._withStripped = true`;
            if (prettify) {
                try {
                    code = require('prettier').format(code, {
                        semi: false,
                        parser: 'babel'
                    });
                }
                catch (e) {
                    if (e.code === 'MODULE_NOT_FOUND') {
                        tips.push('The `prettify` option is on, but the dependency `prettier` is not found.\n' +
                            'Please either turn off `prettify` or manually install `prettier`.');
                    }
                    tips.push(`Failed to prettify component ${options.filename} template source after compilation.`);
                }
            }
        }
        return {
            ast,
            code,
            source,
            tips,
            errors
        };
    }
}

const trimPlugin = () => {
    return {
        postcssPlugin: 'vue-sfc-trim',
        Once(root) {
            root.walk(({ type, raws }) => {
                if (type === 'rule' || type === 'atrule') {
                    if (raws.before)
                        raws.before = '\n';
                    if ('after' in raws && raws.after)
                        raws.after = '\n';
                }
            });
        }
    };
};
trimPlugin.postcss = true;

var dist = {exports: {}};

var processor = {exports: {}};

var parser = {exports: {}};

var root$1 = {exports: {}};

var container = {exports: {}};

var node$1 = {exports: {}};

var util = {};

var unesc = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = unesc;

	// Many thanks for this post which made this migration much easier.
	// https://mathiasbynens.be/notes/css-escapes

	/**
	 * 
	 * @param {string} str 
	 * @returns {[string, number]|undefined}
	 */
	function gobbleHex(str) {
	  var lower = str.toLowerCase();
	  var hex = '';
	  var spaceTerminated = false;

	  for (var i = 0; i < 6 && lower[i] !== undefined; i++) {
	    var code = lower.charCodeAt(i); // check to see if we are dealing with a valid hex char [a-f|0-9]

	    var valid = code >= 97 && code <= 102 || code >= 48 && code <= 57; // https://drafts.csswg.org/css-syntax/#consume-escaped-code-point

	    spaceTerminated = code === 32;

	    if (!valid) {
	      break;
	    }

	    hex += lower[i];
	  }

	  if (hex.length === 0) {
	    return undefined;
	  }

	  var codePoint = parseInt(hex, 16);
	  var isSurrogate = codePoint >= 0xD800 && codePoint <= 0xDFFF; // Add special case for
	  // "If this number is zero, or is for a surrogate, or is greater than the maximum allowed code point"
	  // https://drafts.csswg.org/css-syntax/#maximum-allowed-code-point

	  if (isSurrogate || codePoint === 0x0000 || codePoint > 0x10FFFF) {
	    return ["\uFFFD", hex.length + (spaceTerminated ? 1 : 0)];
	  }

	  return [String.fromCodePoint(codePoint), hex.length + (spaceTerminated ? 1 : 0)];
	}

	var CONTAINS_ESCAPE = /\\/;

	function unesc(str) {
	  var needToProcess = CONTAINS_ESCAPE.test(str);

	  if (!needToProcess) {
	    return str;
	  }

	  var ret = "";

	  for (var i = 0; i < str.length; i++) {
	    if (str[i] === "\\") {
	      var gobbled = gobbleHex(str.slice(i + 1, i + 7));

	      if (gobbled !== undefined) {
	        ret += gobbled[0];
	        i += gobbled[1];
	        continue;
	      } // Retain a pair of \\ if double escaped `\\\\`
	      // https://github.com/postcss/postcss-selector-parser/commit/268c9a7656fb53f543dc620aa5b73a30ec3ff20e


	      if (str[i + 1] === "\\") {
	        ret += "\\";
	        i++;
	        continue;
	      } // if \\ is at the end of the string retain it
	      // https://github.com/postcss/postcss-selector-parser/commit/01a6b346e3612ce1ab20219acc26abdc259ccefb


	      if (str.length === i + 1) {
	        ret += str[i];
	      }

	      continue;
	    }

	    ret += str[i];
	  }

	  return ret;
	}

	module.exports = exports.default;
} (unesc, unesc.exports));

var getProp = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = getProp;

	function getProp(obj) {
	  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
	    props[_key - 1] = arguments[_key];
	  }

	  while (props.length > 0) {
	    var prop = props.shift();

	    if (!obj[prop]) {
	      return undefined;
	    }

	    obj = obj[prop];
	  }

	  return obj;
	}

	module.exports = exports.default;
} (getProp, getProp.exports));

var ensureObject = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = ensureObject;

	function ensureObject(obj) {
	  for (var _len = arguments.length, props = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
	    props[_key - 1] = arguments[_key];
	  }

	  while (props.length > 0) {
	    var prop = props.shift();

	    if (!obj[prop]) {
	      obj[prop] = {};
	    }

	    obj = obj[prop];
	  }
	}

	module.exports = exports.default;
} (ensureObject, ensureObject.exports));

var stripComments = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = stripComments;

	function stripComments(str) {
	  var s = "";
	  var commentStart = str.indexOf("/*");
	  var lastEnd = 0;

	  while (commentStart >= 0) {
	    s = s + str.slice(lastEnd, commentStart);
	    var commentEnd = str.indexOf("*/", commentStart + 2);

	    if (commentEnd < 0) {
	      return s;
	    }

	    lastEnd = commentEnd + 2;
	    commentStart = str.indexOf("/*", lastEnd);
	  }

	  s = s + str.slice(lastEnd);
	  return s;
	}

	module.exports = exports.default;
} (stripComments, stripComments.exports));

util.__esModule = true;
util.stripComments = util.ensureObject = util.getProp = util.unesc = void 0;

var _unesc = _interopRequireDefault$1(unesc.exports);

util.unesc = _unesc["default"];

var _getProp = _interopRequireDefault$1(getProp.exports);

util.getProp = _getProp["default"];

var _ensureObject = _interopRequireDefault$1(ensureObject.exports);

util.ensureObject = _ensureObject["default"];

var _stripComments = _interopRequireDefault$1(stripComments.exports);

util.stripComments = _stripComments["default"];

function _interopRequireDefault$1(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _util = util;

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	var cloneNode = function cloneNode(obj, parent) {
	  if (typeof obj !== 'object' || obj === null) {
	    return obj;
	  }

	  var cloned = new obj.constructor();

	  for (var i in obj) {
	    if (!obj.hasOwnProperty(i)) {
	      continue;
	    }

	    var value = obj[i];
	    var type = typeof value;

	    if (i === 'parent' && type === 'object') {
	      if (parent) {
	        cloned[i] = parent;
	      }
	    } else if (value instanceof Array) {
	      cloned[i] = value.map(function (j) {
	        return cloneNode(j, cloned);
	      });
	    } else {
	      cloned[i] = cloneNode(value, cloned);
	    }
	  }

	  return cloned;
	};

	var Node = /*#__PURE__*/function () {
	  function Node(opts) {
	    if (opts === void 0) {
	      opts = {};
	    }

	    Object.assign(this, opts);
	    this.spaces = this.spaces || {};
	    this.spaces.before = this.spaces.before || '';
	    this.spaces.after = this.spaces.after || '';
	  }

	  var _proto = Node.prototype;

	  _proto.remove = function remove() {
	    if (this.parent) {
	      this.parent.removeChild(this);
	    }

	    this.parent = undefined;
	    return this;
	  };

	  _proto.replaceWith = function replaceWith() {
	    if (this.parent) {
	      for (var index in arguments) {
	        this.parent.insertBefore(this, arguments[index]);
	      }

	      this.remove();
	    }

	    return this;
	  };

	  _proto.next = function next() {
	    return this.parent.at(this.parent.index(this) + 1);
	  };

	  _proto.prev = function prev() {
	    return this.parent.at(this.parent.index(this) - 1);
	  };

	  _proto.clone = function clone(overrides) {
	    if (overrides === void 0) {
	      overrides = {};
	    }

	    var cloned = cloneNode(this);

	    for (var name in overrides) {
	      cloned[name] = overrides[name];
	    }

	    return cloned;
	  }
	  /**
	   * Some non-standard syntax doesn't follow normal escaping rules for css.
	   * This allows non standard syntax to be appended to an existing property
	   * by specifying the escaped value. By specifying the escaped value,
	   * illegal characters are allowed to be directly inserted into css output.
	   * @param {string} name the property to set
	   * @param {any} value the unescaped value of the property
	   * @param {string} valueEscaped optional. the escaped value of the property.
	   */
	  ;

	  _proto.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {
	    if (!this.raws) {
	      this.raws = {};
	    }

	    var originalValue = this[name];
	    var originalEscaped = this.raws[name];
	    this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.

	    if (originalEscaped || valueEscaped !== value) {
	      this.raws[name] = (originalEscaped || originalValue) + valueEscaped;
	    } else {
	      delete this.raws[name]; // delete any escaped value that was created by the setter.
	    }
	  }
	  /**
	   * Some non-standard syntax doesn't follow normal escaping rules for css.
	   * This allows the escaped value to be specified directly, allowing illegal
	   * characters to be directly inserted into css output.
	   * @param {string} name the property to set
	   * @param {any} value the unescaped value of the property
	   * @param {string} valueEscaped the escaped value of the property.
	   */
	  ;

	  _proto.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {
	    if (!this.raws) {
	      this.raws = {};
	    }

	    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.

	    this.raws[name] = valueEscaped;
	  }
	  /**
	   * When you want a value to passed through to CSS directly. This method
	   * deletes the corresponding raw value causing the stringifier to fallback
	   * to the unescaped value.
	   * @param {string} name the property to set.
	   * @param {any} value The value that is both escaped and unescaped.
	   */
	  ;

	  _proto.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {
	    this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.

	    if (this.raws) {
	      delete this.raws[name];
	    }
	  }
	  /**
	   *
	   * @param {number} line The number (starting with 1)
	   * @param {number} column The column number (starting with 1)
	   */
	  ;

	  _proto.isAtPosition = function isAtPosition(line, column) {
	    if (this.source && this.source.start && this.source.end) {
	      if (this.source.start.line > line) {
	        return false;
	      }

	      if (this.source.end.line < line) {
	        return false;
	      }

	      if (this.source.start.line === line && this.source.start.column > column) {
	        return false;
	      }

	      if (this.source.end.line === line && this.source.end.column < column) {
	        return false;
	      }

	      return true;
	    }

	    return undefined;
	  };

	  _proto.stringifyProperty = function stringifyProperty(name) {
	    return this.raws && this.raws[name] || this[name];
	  };

	  _proto.valueToString = function valueToString() {
	    return String(this.stringifyProperty("value"));
	  };

	  _proto.toString = function toString() {
	    return [this.rawSpaceBefore, this.valueToString(), this.rawSpaceAfter].join('');
	  };

	  _createClass(Node, [{
	    key: "rawSpaceBefore",
	    get: function get() {
	      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;

	      if (rawSpace === undefined) {
	        rawSpace = this.spaces && this.spaces.before;
	      }

	      return rawSpace || "";
	    },
	    set: function set(raw) {
	      (0, _util.ensureObject)(this, "raws", "spaces");
	      this.raws.spaces.before = raw;
	    }
	  }, {
	    key: "rawSpaceAfter",
	    get: function get() {
	      var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;

	      if (rawSpace === undefined) {
	        rawSpace = this.spaces.after;
	      }

	      return rawSpace || "";
	    },
	    set: function set(raw) {
	      (0, _util.ensureObject)(this, "raws", "spaces");
	      this.raws.spaces.after = raw;
	    }
	  }]);

	  return Node;
	}();

	exports["default"] = Node;
	module.exports = exports.default;
} (node$1, node$1.exports));

var types = {};

types.__esModule = true;
types.UNIVERSAL = types.ATTRIBUTE = types.CLASS = types.COMBINATOR = types.COMMENT = types.ID = types.NESTING = types.PSEUDO = types.ROOT = types.SELECTOR = types.STRING = types.TAG = void 0;
var TAG = 'tag';
types.TAG = TAG;
var STRING = 'string';
types.STRING = STRING;
var SELECTOR = 'selector';
types.SELECTOR = SELECTOR;
var ROOT = 'root';
types.ROOT = ROOT;
var PSEUDO = 'pseudo';
types.PSEUDO = PSEUDO;
var NESTING = 'nesting';
types.NESTING = NESTING;
var ID = 'id';
types.ID = ID;
var COMMENT = 'comment';
types.COMMENT = COMMENT;
var COMBINATOR = 'combinator';
types.COMBINATOR = COMBINATOR;
var CLASS = 'class';
types.CLASS = CLASS;
var ATTRIBUTE = 'attribute';
types.ATTRIBUTE = ATTRIBUTE;
var UNIVERSAL = 'universal';
types.UNIVERSAL = UNIVERSAL;

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var types$1 = _interopRequireWildcard(types);

	function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }

	function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }

	function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Container = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Container, _Node);

	  function Container(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;

	    if (!_this.nodes) {
	      _this.nodes = [];
	    }

	    return _this;
	  }

	  var _proto = Container.prototype;

	  _proto.append = function append(selector) {
	    selector.parent = this;
	    this.nodes.push(selector);
	    return this;
	  };

	  _proto.prepend = function prepend(selector) {
	    selector.parent = this;
	    this.nodes.unshift(selector);
	    return this;
	  };

	  _proto.at = function at(index) {
	    return this.nodes[index];
	  };

	  _proto.index = function index(child) {
	    if (typeof child === 'number') {
	      return child;
	    }

	    return this.nodes.indexOf(child);
	  };

	  _proto.removeChild = function removeChild(child) {
	    child = this.index(child);
	    this.at(child).parent = undefined;
	    this.nodes.splice(child, 1);
	    var index;

	    for (var id in this.indexes) {
	      index = this.indexes[id];

	      if (index >= child) {
	        this.indexes[id] = index - 1;
	      }
	    }

	    return this;
	  };

	  _proto.removeAll = function removeAll() {
	    for (var _iterator = _createForOfIteratorHelperLoose(this.nodes), _step; !(_step = _iterator()).done;) {
	      var node = _step.value;
	      node.parent = undefined;
	    }

	    this.nodes = [];
	    return this;
	  };

	  _proto.empty = function empty() {
	    return this.removeAll();
	  };

	  _proto.insertAfter = function insertAfter(oldNode, newNode) {
	    newNode.parent = this;
	    var oldIndex = this.index(oldNode);
	    this.nodes.splice(oldIndex + 1, 0, newNode);
	    newNode.parent = this;
	    var index;

	    for (var id in this.indexes) {
	      index = this.indexes[id];

	      if (oldIndex <= index) {
	        this.indexes[id] = index + 1;
	      }
	    }

	    return this;
	  };

	  _proto.insertBefore = function insertBefore(oldNode, newNode) {
	    newNode.parent = this;
	    var oldIndex = this.index(oldNode);
	    this.nodes.splice(oldIndex, 0, newNode);
	    newNode.parent = this;
	    var index;

	    for (var id in this.indexes) {
	      index = this.indexes[id];

	      if (index <= oldIndex) {
	        this.indexes[id] = index + 1;
	      }
	    }

	    return this;
	  };

	  _proto._findChildAtPosition = function _findChildAtPosition(line, col) {
	    var found = undefined;
	    this.each(function (node) {
	      if (node.atPosition) {
	        var foundChild = node.atPosition(line, col);

	        if (foundChild) {
	          found = foundChild;
	          return false;
	        }
	      } else if (node.isAtPosition(line, col)) {
	        found = node;
	        return false;
	      }
	    });
	    return found;
	  }
	  /**
	   * Return the most specific node at the line and column number given.
	   * The source location is based on the original parsed location, locations aren't
	   * updated as selector nodes are mutated.
	   * 
	   * Note that this location is relative to the location of the first character
	   * of the selector, and not the location of the selector in the overall document
	   * when used in conjunction with postcss.
	   *
	   * If not found, returns undefined.
	   * @param {number} line The line number of the node to find. (1-based index)
	   * @param {number} col  The column number of the node to find. (1-based index)
	   */
	  ;

	  _proto.atPosition = function atPosition(line, col) {
	    if (this.isAtPosition(line, col)) {
	      return this._findChildAtPosition(line, col) || this;
	    } else {
	      return undefined;
	    }
	  };

	  _proto._inferEndPosition = function _inferEndPosition() {
	    if (this.last && this.last.source && this.last.source.end) {
	      this.source = this.source || {};
	      this.source.end = this.source.end || {};
	      Object.assign(this.source.end, this.last.source.end);
	    }
	  };

	  _proto.each = function each(callback) {
	    if (!this.lastEach) {
	      this.lastEach = 0;
	    }

	    if (!this.indexes) {
	      this.indexes = {};
	    }

	    this.lastEach++;
	    var id = this.lastEach;
	    this.indexes[id] = 0;

	    if (!this.length) {
	      return undefined;
	    }

	    var index, result;

	    while (this.indexes[id] < this.length) {
	      index = this.indexes[id];
	      result = callback(this.at(index), index);

	      if (result === false) {
	        break;
	      }

	      this.indexes[id] += 1;
	    }

	    delete this.indexes[id];

	    if (result === false) {
	      return false;
	    }
	  };

	  _proto.walk = function walk(callback) {
	    return this.each(function (node, i) {
	      var result = callback(node, i);

	      if (result !== false && node.length) {
	        result = node.walk(callback);
	      }

	      if (result === false) {
	        return false;
	      }
	    });
	  };

	  _proto.walkAttributes = function walkAttributes(callback) {
	    var _this2 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.ATTRIBUTE) {
	        return callback.call(_this2, selector);
	      }
	    });
	  };

	  _proto.walkClasses = function walkClasses(callback) {
	    var _this3 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.CLASS) {
	        return callback.call(_this3, selector);
	      }
	    });
	  };

	  _proto.walkCombinators = function walkCombinators(callback) {
	    var _this4 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.COMBINATOR) {
	        return callback.call(_this4, selector);
	      }
	    });
	  };

	  _proto.walkComments = function walkComments(callback) {
	    var _this5 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.COMMENT) {
	        return callback.call(_this5, selector);
	      }
	    });
	  };

	  _proto.walkIds = function walkIds(callback) {
	    var _this6 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.ID) {
	        return callback.call(_this6, selector);
	      }
	    });
	  };

	  _proto.walkNesting = function walkNesting(callback) {
	    var _this7 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.NESTING) {
	        return callback.call(_this7, selector);
	      }
	    });
	  };

	  _proto.walkPseudos = function walkPseudos(callback) {
	    var _this8 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.PSEUDO) {
	        return callback.call(_this8, selector);
	      }
	    });
	  };

	  _proto.walkTags = function walkTags(callback) {
	    var _this9 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.TAG) {
	        return callback.call(_this9, selector);
	      }
	    });
	  };

	  _proto.walkUniversals = function walkUniversals(callback) {
	    var _this10 = this;

	    return this.walk(function (selector) {
	      if (selector.type === types$1.UNIVERSAL) {
	        return callback.call(_this10, selector);
	      }
	    });
	  };

	  _proto.split = function split(callback) {
	    var _this11 = this;

	    var current = [];
	    return this.reduce(function (memo, node, index) {
	      var split = callback.call(_this11, node);
	      current.push(node);

	      if (split) {
	        memo.push(current);
	        current = [];
	      } else if (index === _this11.length - 1) {
	        memo.push(current);
	      }

	      return memo;
	    }, []);
	  };

	  _proto.map = function map(callback) {
	    return this.nodes.map(callback);
	  };

	  _proto.reduce = function reduce(callback, memo) {
	    return this.nodes.reduce(callback, memo);
	  };

	  _proto.every = function every(callback) {
	    return this.nodes.every(callback);
	  };

	  _proto.some = function some(callback) {
	    return this.nodes.some(callback);
	  };

	  _proto.filter = function filter(callback) {
	    return this.nodes.filter(callback);
	  };

	  _proto.sort = function sort(callback) {
	    return this.nodes.sort(callback);
	  };

	  _proto.toString = function toString() {
	    return this.map(String).join('');
	  };

	  _createClass(Container, [{
	    key: "first",
	    get: function get() {
	      return this.at(0);
	    }
	  }, {
	    key: "last",
	    get: function get() {
	      return this.at(this.length - 1);
	    }
	  }, {
	    key: "length",
	    get: function get() {
	      return this.nodes.length;
	    }
	  }]);

	  return Container;
	}(_node["default"]);

	exports["default"] = Container;
	module.exports = exports.default;
} (container, container.exports));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _container = _interopRequireDefault(container.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Root = /*#__PURE__*/function (_Container) {
	  _inheritsLoose(Root, _Container);

	  function Root(opts) {
	    var _this;

	    _this = _Container.call(this, opts) || this;
	    _this.type = _types.ROOT;
	    return _this;
	  }

	  var _proto = Root.prototype;

	  _proto.toString = function toString() {
	    var str = this.reduce(function (memo, selector) {
	      memo.push(String(selector));
	      return memo;
	    }, []).join(',');
	    return this.trailingComma ? str + ',' : str;
	  };

	  _proto.error = function error(message, options) {
	    if (this._error) {
	      return this._error(message, options);
	    } else {
	      return new Error(message);
	    }
	  };

	  _createClass(Root, [{
	    key: "errorGenerator",
	    set: function set(handler) {
	      this._error = handler;
	    }
	  }]);

	  return Root;
	}(_container["default"]);

	exports["default"] = Root;
	module.exports = exports.default;
} (root$1, root$1.exports));

var selector$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _container = _interopRequireDefault(container.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Selector = /*#__PURE__*/function (_Container) {
	  _inheritsLoose(Selector, _Container);

	  function Selector(opts) {
	    var _this;

	    _this = _Container.call(this, opts) || this;
	    _this.type = _types.SELECTOR;
	    return _this;
	  }

	  return Selector;
	}(_container["default"]);

	exports["default"] = Selector;
	module.exports = exports.default;
} (selector$1, selector$1.exports));

var className$1 = {exports: {}};

/*! https://mths.be/cssesc v3.0.0 by @mathias */

var object = {};
var hasOwnProperty = object.hasOwnProperty;
var merge$1 = function merge(options, defaults) {
	if (!options) {
		return defaults;
	}
	var result = {};
	for (var key in defaults) {
		// `if (defaults.hasOwnProperty(key) { â€¦ }` is not needed here, since
		// only recognized option names are used.
		result[key] = hasOwnProperty.call(options, key) ? options[key] : defaults[key];
	}
	return result;
};

var regexAnySingleEscape = /[ -,\.\/:-@\[-\^`\{-~]/;
var regexSingleEscape = /[ -,\.\/:-@\[\]\^`\{-~]/;
var regexExcessiveSpaces = /(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g;

// https://mathiasbynens.be/notes/css-escapes#css
var cssesc = function cssesc(string, options) {
	options = merge$1(options, cssesc.options);
	if (options.quotes != 'single' && options.quotes != 'double') {
		options.quotes = 'single';
	}
	var quote = options.quotes == 'double' ? '"' : '\'';
	var isIdentifier = options.isIdentifier;

	var firstChar = string.charAt(0);
	var output = '';
	var counter = 0;
	var length = string.length;
	while (counter < length) {
		var character = string.charAt(counter++);
		var codePoint = character.charCodeAt();
		var value = void 0;
		// If itâ€™s not a printable ASCII characterâ€¦
		if (codePoint < 0x20 || codePoint > 0x7E) {
			if (codePoint >= 0xD800 && codePoint <= 0xDBFF && counter < length) {
				// Itâ€™s a high surrogate, and there is a next character.
				var extra = string.charCodeAt(counter++);
				if ((extra & 0xFC00) == 0xDC00) {
					// next character is low surrogate
					codePoint = ((codePoint & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;
				} else {
					// Itâ€™s an unmatched surrogate; only append this code unit, in case
					// the next code unit is the high surrogate of a surrogate pair.
					counter--;
				}
			}
			value = '\\' + codePoint.toString(16).toUpperCase() + ' ';
		} else {
			if (options.escapeEverything) {
				if (regexAnySingleEscape.test(character)) {
					value = '\\' + character;
				} else {
					value = '\\' + codePoint.toString(16).toUpperCase() + ' ';
				}
			} else if (/[\t\n\f\r\x0B]/.test(character)) {
				value = '\\' + codePoint.toString(16).toUpperCase() + ' ';
			} else if (character == '\\' || !isIdentifier && (character == '"' && quote == character || character == '\'' && quote == character) || isIdentifier && regexSingleEscape.test(character)) {
				value = '\\' + character;
			} else {
				value = character;
			}
		}
		output += value;
	}

	if (isIdentifier) {
		if (/^-[-\d]/.test(output)) {
			output = '\\-' + output.slice(1);
		} else if (/\d/.test(firstChar)) {
			output = '\\3' + firstChar + ' ' + output.slice(1);
		}
	}

	// Remove spaces after `\HEX` escapes that are not followed by a hex digit,
	// since theyâ€™re redundant. Note that this is only possible if the escape
	// sequence isnâ€™t preceded by an odd number of backslashes.
	output = output.replace(regexExcessiveSpaces, function ($0, $1, $2) {
		if ($1 && $1.length % 2) {
			// Itâ€™s not safe to remove the space, so donâ€™t.
			return $0;
		}
		// Strip the space.
		return ($1 || '') + $2;
	});

	if (!isIdentifier && options.wrap) {
		return quote + output + quote;
	}
	return output;
};

// Expose default options (so they can be overridden globally).
cssesc.options = {
	'escapeEverything': false,
	'isIdentifier': false,
	'quotes': 'single',
	'wrap': false
};

cssesc.version = '3.0.0';

var cssesc_1 = cssesc;

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _cssesc = _interopRequireDefault(cssesc_1);

	var _util = util;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var ClassName = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(ClassName, _Node);

	  function ClassName(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.CLASS;
	    _this._constructed = true;
	    return _this;
	  }

	  var _proto = ClassName.prototype;

	  _proto.valueToString = function valueToString() {
	    return '.' + _Node.prototype.valueToString.call(this);
	  };

	  _createClass(ClassName, [{
	    key: "value",
	    get: function get() {
	      return this._value;
	    },
	    set: function set(v) {
	      if (this._constructed) {
	        var escaped = (0, _cssesc["default"])(v, {
	          isIdentifier: true
	        });

	        if (escaped !== v) {
	          (0, _util.ensureObject)(this, "raws");
	          this.raws.value = escaped;
	        } else if (this.raws) {
	          delete this.raws.value;
	        }
	      }

	      this._value = v;
	    }
	  }]);

	  return ClassName;
	}(_node["default"]);

	exports["default"] = ClassName;
	module.exports = exports.default;
} (className$1, className$1.exports));

var comment$2 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Comment = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Comment, _Node);

	  function Comment(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.COMMENT;
	    return _this;
	  }

	  return Comment;
	}(_node["default"]);

	exports["default"] = Comment;
	module.exports = exports.default;
} (comment$2, comment$2.exports));

var id$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var ID = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(ID, _Node);

	  function ID(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.ID;
	    return _this;
	  }

	  var _proto = ID.prototype;

	  _proto.valueToString = function valueToString() {
	    return '#' + _Node.prototype.valueToString.call(this);
	  };

	  return ID;
	}(_node["default"]);

	exports["default"] = ID;
	module.exports = exports.default;
} (id$1, id$1.exports));

var tag$1 = {exports: {}};

var namespace = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _cssesc = _interopRequireDefault(cssesc_1);

	var _util = util;

	var _node = _interopRequireDefault(node$1.exports);

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Namespace = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Namespace, _Node);

	  function Namespace() {
	    return _Node.apply(this, arguments) || this;
	  }

	  var _proto = Namespace.prototype;

	  _proto.qualifiedName = function qualifiedName(value) {
	    if (this.namespace) {
	      return this.namespaceString + "|" + value;
	    } else {
	      return value;
	    }
	  };

	  _proto.valueToString = function valueToString() {
	    return this.qualifiedName(_Node.prototype.valueToString.call(this));
	  };

	  _createClass(Namespace, [{
	    key: "namespace",
	    get: function get() {
	      return this._namespace;
	    },
	    set: function set(namespace) {
	      if (namespace === true || namespace === "*" || namespace === "&") {
	        this._namespace = namespace;

	        if (this.raws) {
	          delete this.raws.namespace;
	        }

	        return;
	      }

	      var escaped = (0, _cssesc["default"])(namespace, {
	        isIdentifier: true
	      });
	      this._namespace = namespace;

	      if (escaped !== namespace) {
	        (0, _util.ensureObject)(this, "raws");
	        this.raws.namespace = escaped;
	      } else if (this.raws) {
	        delete this.raws.namespace;
	      }
	    }
	  }, {
	    key: "ns",
	    get: function get() {
	      return this._namespace;
	    },
	    set: function set(namespace) {
	      this.namespace = namespace;
	    }
	  }, {
	    key: "namespaceString",
	    get: function get() {
	      if (this.namespace) {
	        var ns = this.stringifyProperty("namespace");

	        if (ns === true) {
	          return '';
	        } else {
	          return ns;
	        }
	      } else {
	        return '';
	      }
	    }
	  }]);

	  return Namespace;
	}(_node["default"]);

	exports["default"] = Namespace;
	module.exports = exports.default;
} (namespace, namespace.exports));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _namespace = _interopRequireDefault(namespace.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Tag = /*#__PURE__*/function (_Namespace) {
	  _inheritsLoose(Tag, _Namespace);

	  function Tag(opts) {
	    var _this;

	    _this = _Namespace.call(this, opts) || this;
	    _this.type = _types.TAG;
	    return _this;
	  }

	  return Tag;
	}(_namespace["default"]);

	exports["default"] = Tag;
	module.exports = exports.default;
} (tag$1, tag$1.exports));

var string$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var String = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(String, _Node);

	  function String(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.STRING;
	    return _this;
	  }

	  return String;
	}(_node["default"]);

	exports["default"] = String;
	module.exports = exports.default;
} (string$1, string$1.exports));

var pseudo$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _container = _interopRequireDefault(container.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Pseudo = /*#__PURE__*/function (_Container) {
	  _inheritsLoose(Pseudo, _Container);

	  function Pseudo(opts) {
	    var _this;

	    _this = _Container.call(this, opts) || this;
	    _this.type = _types.PSEUDO;
	    return _this;
	  }

	  var _proto = Pseudo.prototype;

	  _proto.toString = function toString() {
	    var params = this.length ? '(' + this.map(String).join(',') + ')' : '';
	    return [this.rawSpaceBefore, this.stringifyProperty("value"), params, this.rawSpaceAfter].join('');
	  };

	  return Pseudo;
	}(_container["default"]);

	exports["default"] = Pseudo;
	module.exports = exports.default;
} (pseudo$1, pseudo$1.exports));

var attribute$1 = {};

/**
 * For Node.js, simply re-export the core `util.deprecate` function.
 */

var node = require$$2__default["default"].deprecate;

(function (exports) {

	exports.__esModule = true;
	exports.unescapeValue = unescapeValue;
	exports["default"] = void 0;

	var _cssesc = _interopRequireDefault(cssesc_1);

	var _unesc = _interopRequireDefault(unesc.exports);

	var _namespace = _interopRequireDefault(namespace.exports);

	var _types = types;

	var _CSSESC_QUOTE_OPTIONS;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var deprecate = node;

	var WRAPPED_IN_QUOTES = /^('|")([^]*)\1$/;
	var warnOfDeprecatedValueAssignment = deprecate(function () {}, "Assigning an attribute a value containing characters that might need to be escaped is deprecated. " + "Call attribute.setValue() instead.");
	var warnOfDeprecatedQuotedAssignment = deprecate(function () {}, "Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.");
	var warnOfDeprecatedConstructor = deprecate(function () {}, "Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.");

	function unescapeValue(value) {
	  var deprecatedUsage = false;
	  var quoteMark = null;
	  var unescaped = value;
	  var m = unescaped.match(WRAPPED_IN_QUOTES);

	  if (m) {
	    quoteMark = m[1];
	    unescaped = m[2];
	  }

	  unescaped = (0, _unesc["default"])(unescaped);

	  if (unescaped !== value) {
	    deprecatedUsage = true;
	  }

	  return {
	    deprecatedUsage: deprecatedUsage,
	    unescaped: unescaped,
	    quoteMark: quoteMark
	  };
	}

	function handleDeprecatedContructorOpts(opts) {
	  if (opts.quoteMark !== undefined) {
	    return opts;
	  }

	  if (opts.value === undefined) {
	    return opts;
	  }

	  warnOfDeprecatedConstructor();

	  var _unescapeValue = unescapeValue(opts.value),
	      quoteMark = _unescapeValue.quoteMark,
	      unescaped = _unescapeValue.unescaped;

	  if (!opts.raws) {
	    opts.raws = {};
	  }

	  if (opts.raws.value === undefined) {
	    opts.raws.value = opts.value;
	  }

	  opts.value = unescaped;
	  opts.quoteMark = quoteMark;
	  return opts;
	}

	var Attribute = /*#__PURE__*/function (_Namespace) {
	  _inheritsLoose(Attribute, _Namespace);

	  function Attribute(opts) {
	    var _this;

	    if (opts === void 0) {
	      opts = {};
	    }

	    _this = _Namespace.call(this, handleDeprecatedContructorOpts(opts)) || this;
	    _this.type = _types.ATTRIBUTE;
	    _this.raws = _this.raws || {};
	    Object.defineProperty(_this.raws, 'unquoted', {
	      get: deprecate(function () {
	        return _this.value;
	      }, "attr.raws.unquoted is deprecated. Call attr.value instead."),
	      set: deprecate(function () {
	        return _this.value;
	      }, "Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.")
	    });
	    _this._constructed = true;
	    return _this;
	  }
	  /**
	   * Returns the Attribute's value quoted such that it would be legal to use
	   * in the value of a css file. The original value's quotation setting
	   * used for stringification is left unchanged. See `setValue(value, options)`
	   * if you want to control the quote settings of a new value for the attribute.
	   *
	   * You can also change the quotation used for the current value by setting quoteMark.
	   *
	   * Options:
	   *   * quoteMark {'"' | "'" | null} - Use this value to quote the value. If this
	   *     option is not set, the original value for quoteMark will be used. If
	   *     indeterminate, a double quote is used. The legal values are:
	   *     * `null` - the value will be unquoted and characters will be escaped as necessary.
	   *     * `'` - the value will be quoted with a single quote and single quotes are escaped.
	   *     * `"` - the value will be quoted with a double quote and double quotes are escaped.
	   *   * preferCurrentQuoteMark {boolean} - if true, prefer the source quote mark
	   *     over the quoteMark option value.
	   *   * smart {boolean} - if true, will select a quote mark based on the value
	   *     and the other options specified here. See the `smartQuoteMark()`
	   *     method.
	   **/


	  var _proto = Attribute.prototype;

	  _proto.getQuotedValue = function getQuotedValue(options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var quoteMark = this._determineQuoteMark(options);

	    var cssescopts = CSSESC_QUOTE_OPTIONS[quoteMark];
	    var escaped = (0, _cssesc["default"])(this._value, cssescopts);
	    return escaped;
	  };

	  _proto._determineQuoteMark = function _determineQuoteMark(options) {
	    return options.smart ? this.smartQuoteMark(options) : this.preferredQuoteMark(options);
	  }
	  /**
	   * Set the unescaped value with the specified quotation options. The value
	   * provided must not include any wrapping quote marks -- those quotes will
	   * be interpreted as part of the value and escaped accordingly.
	   */
	  ;

	  _proto.setValue = function setValue(value, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    this._value = value;
	    this._quoteMark = this._determineQuoteMark(options);

	    this._syncRawValue();
	  }
	  /**
	   * Intelligently select a quoteMark value based on the value's contents. If
	   * the value is a legal CSS ident, it will not be quoted. Otherwise a quote
	   * mark will be picked that minimizes the number of escapes.
	   *
	   * If there's no clear winner, the quote mark from these options is used,
	   * then the source quote mark (this is inverted if `preferCurrentQuoteMark` is
	   * true). If the quoteMark is unspecified, a double quote is used.
	   *
	   * @param options This takes the quoteMark and preferCurrentQuoteMark options
	   * from the quoteValue method.
	   */
	  ;

	  _proto.smartQuoteMark = function smartQuoteMark(options) {
	    var v = this.value;
	    var numSingleQuotes = v.replace(/[^']/g, '').length;
	    var numDoubleQuotes = v.replace(/[^"]/g, '').length;

	    if (numSingleQuotes + numDoubleQuotes === 0) {
	      var escaped = (0, _cssesc["default"])(v, {
	        isIdentifier: true
	      });

	      if (escaped === v) {
	        return Attribute.NO_QUOTE;
	      } else {
	        var pref = this.preferredQuoteMark(options);

	        if (pref === Attribute.NO_QUOTE) {
	          // pick a quote mark that isn't none and see if it's smaller
	          var quote = this.quoteMark || options.quoteMark || Attribute.DOUBLE_QUOTE;
	          var opts = CSSESC_QUOTE_OPTIONS[quote];
	          var quoteValue = (0, _cssesc["default"])(v, opts);

	          if (quoteValue.length < escaped.length) {
	            return quote;
	          }
	        }

	        return pref;
	      }
	    } else if (numDoubleQuotes === numSingleQuotes) {
	      return this.preferredQuoteMark(options);
	    } else if (numDoubleQuotes < numSingleQuotes) {
	      return Attribute.DOUBLE_QUOTE;
	    } else {
	      return Attribute.SINGLE_QUOTE;
	    }
	  }
	  /**
	   * Selects the preferred quote mark based on the options and the current quote mark value.
	   * If you want the quote mark to depend on the attribute value, call `smartQuoteMark(opts)`
	   * instead.
	   */
	  ;

	  _proto.preferredQuoteMark = function preferredQuoteMark(options) {
	    var quoteMark = options.preferCurrentQuoteMark ? this.quoteMark : options.quoteMark;

	    if (quoteMark === undefined) {
	      quoteMark = options.preferCurrentQuoteMark ? options.quoteMark : this.quoteMark;
	    }

	    if (quoteMark === undefined) {
	      quoteMark = Attribute.DOUBLE_QUOTE;
	    }

	    return quoteMark;
	  };

	  _proto._syncRawValue = function _syncRawValue() {
	    var rawValue = (0, _cssesc["default"])(this._value, CSSESC_QUOTE_OPTIONS[this.quoteMark]);

	    if (rawValue === this._value) {
	      if (this.raws) {
	        delete this.raws.value;
	      }
	    } else {
	      this.raws.value = rawValue;
	    }
	  };

	  _proto._handleEscapes = function _handleEscapes(prop, value) {
	    if (this._constructed) {
	      var escaped = (0, _cssesc["default"])(value, {
	        isIdentifier: true
	      });

	      if (escaped !== value) {
	        this.raws[prop] = escaped;
	      } else {
	        delete this.raws[prop];
	      }
	    }
	  };

	  _proto._spacesFor = function _spacesFor(name) {
	    var attrSpaces = {
	      before: '',
	      after: ''
	    };
	    var spaces = this.spaces[name] || {};
	    var rawSpaces = this.raws.spaces && this.raws.spaces[name] || {};
	    return Object.assign(attrSpaces, spaces, rawSpaces);
	  };

	  _proto._stringFor = function _stringFor(name, spaceName, concat) {
	    if (spaceName === void 0) {
	      spaceName = name;
	    }

	    if (concat === void 0) {
	      concat = defaultAttrConcat;
	    }

	    var attrSpaces = this._spacesFor(spaceName);

	    return concat(this.stringifyProperty(name), attrSpaces);
	  }
	  /**
	   * returns the offset of the attribute part specified relative to the
	   * start of the node of the output string.
	   *
	   * * "ns" - alias for "namespace"
	   * * "namespace" - the namespace if it exists.
	   * * "attribute" - the attribute name
	   * * "attributeNS" - the start of the attribute or its namespace
	   * * "operator" - the match operator of the attribute
	   * * "value" - The value (string or identifier)
	   * * "insensitive" - the case insensitivity flag;
	   * @param part One of the possible values inside an attribute.
	   * @returns -1 if the name is invalid or the value doesn't exist in this attribute.
	   */
	  ;

	  _proto.offsetOf = function offsetOf(name) {
	    var count = 1;

	    var attributeSpaces = this._spacesFor("attribute");

	    count += attributeSpaces.before.length;

	    if (name === "namespace" || name === "ns") {
	      return this.namespace ? count : -1;
	    }

	    if (name === "attributeNS") {
	      return count;
	    }

	    count += this.namespaceString.length;

	    if (this.namespace) {
	      count += 1;
	    }

	    if (name === "attribute") {
	      return count;
	    }

	    count += this.stringifyProperty("attribute").length;
	    count += attributeSpaces.after.length;

	    var operatorSpaces = this._spacesFor("operator");

	    count += operatorSpaces.before.length;
	    var operator = this.stringifyProperty("operator");

	    if (name === "operator") {
	      return operator ? count : -1;
	    }

	    count += operator.length;
	    count += operatorSpaces.after.length;

	    var valueSpaces = this._spacesFor("value");

	    count += valueSpaces.before.length;
	    var value = this.stringifyProperty("value");

	    if (name === "value") {
	      return value ? count : -1;
	    }

	    count += value.length;
	    count += valueSpaces.after.length;

	    var insensitiveSpaces = this._spacesFor("insensitive");

	    count += insensitiveSpaces.before.length;

	    if (name === "insensitive") {
	      return this.insensitive ? count : -1;
	    }

	    return -1;
	  };

	  _proto.toString = function toString() {
	    var _this2 = this;

	    var selector = [this.rawSpaceBefore, '['];
	    selector.push(this._stringFor('qualifiedAttribute', 'attribute'));

	    if (this.operator && (this.value || this.value === '')) {
	      selector.push(this._stringFor('operator'));
	      selector.push(this._stringFor('value'));
	      selector.push(this._stringFor('insensitiveFlag', 'insensitive', function (attrValue, attrSpaces) {
	        if (attrValue.length > 0 && !_this2.quoted && attrSpaces.before.length === 0 && !(_this2.spaces.value && _this2.spaces.value.after)) {
	          attrSpaces.before = " ";
	        }

	        return defaultAttrConcat(attrValue, attrSpaces);
	      }));
	    }

	    selector.push(']');
	    selector.push(this.rawSpaceAfter);
	    return selector.join('');
	  };

	  _createClass(Attribute, [{
	    key: "quoted",
	    get: function get() {
	      var qm = this.quoteMark;
	      return qm === "'" || qm === '"';
	    },
	    set: function set(value) {
	      warnOfDeprecatedQuotedAssignment();
	    }
	    /**
	     * returns a single (`'`) or double (`"`) quote character if the value is quoted.
	     * returns `null` if the value is not quoted.
	     * returns `undefined` if the quotation state is unknown (this can happen when
	     * the attribute is constructed without specifying a quote mark.)
	     */

	  }, {
	    key: "quoteMark",
	    get: function get() {
	      return this._quoteMark;
	    }
	    /**
	     * Set the quote mark to be used by this attribute's value.
	     * If the quote mark changes, the raw (escaped) value at `attr.raws.value` of the attribute
	     * value is updated accordingly.
	     *
	     * @param {"'" | '"' | null} quoteMark The quote mark or `null` if the value should be unquoted.
	     */
	    ,
	    set: function set(quoteMark) {
	      if (!this._constructed) {
	        this._quoteMark = quoteMark;
	        return;
	      }

	      if (this._quoteMark !== quoteMark) {
	        this._quoteMark = quoteMark;

	        this._syncRawValue();
	      }
	    }
	  }, {
	    key: "qualifiedAttribute",
	    get: function get() {
	      return this.qualifiedName(this.raws.attribute || this.attribute);
	    }
	  }, {
	    key: "insensitiveFlag",
	    get: function get() {
	      return this.insensitive ? 'i' : '';
	    }
	  }, {
	    key: "value",
	    get: function get() {
	      return this._value;
	    }
	    /**
	     * Before 3.0, the value had to be set to an escaped value including any wrapped
	     * quote marks. In 3.0, the semantics of `Attribute.value` changed so that the value
	     * is unescaped during parsing and any quote marks are removed.
	     *
	     * Because the ambiguity of this semantic change, if you set `attr.value = newValue`,
	     * a deprecation warning is raised when the new value contains any characters that would
	     * require escaping (including if it contains wrapped quotes).
	     *
	     * Instead, you should call `attr.setValue(newValue, opts)` and pass options that describe
	     * how the new value is quoted.
	     */
	    ,
	    set: function set(v) {
	      if (this._constructed) {
	        var _unescapeValue2 = unescapeValue(v),
	            deprecatedUsage = _unescapeValue2.deprecatedUsage,
	            unescaped = _unescapeValue2.unescaped,
	            quoteMark = _unescapeValue2.quoteMark;

	        if (deprecatedUsage) {
	          warnOfDeprecatedValueAssignment();
	        }

	        if (unescaped === this._value && quoteMark === this._quoteMark) {
	          return;
	        }

	        this._value = unescaped;
	        this._quoteMark = quoteMark;

	        this._syncRawValue();
	      } else {
	        this._value = v;
	      }
	    }
	  }, {
	    key: "attribute",
	    get: function get() {
	      return this._attribute;
	    },
	    set: function set(name) {
	      this._handleEscapes("attribute", name);

	      this._attribute = name;
	    }
	  }]);

	  return Attribute;
	}(_namespace["default"]);

	exports["default"] = Attribute;
	Attribute.NO_QUOTE = null;
	Attribute.SINGLE_QUOTE = "'";
	Attribute.DOUBLE_QUOTE = '"';
	var CSSESC_QUOTE_OPTIONS = (_CSSESC_QUOTE_OPTIONS = {
	  "'": {
	    quotes: 'single',
	    wrap: true
	  },
	  '"': {
	    quotes: 'double',
	    wrap: true
	  }
	}, _CSSESC_QUOTE_OPTIONS[null] = {
	  isIdentifier: true
	}, _CSSESC_QUOTE_OPTIONS);

	function defaultAttrConcat(attrValue, attrSpaces) {
	  return "" + attrSpaces.before + attrValue + attrSpaces.after;
	}
} (attribute$1));

var universal$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _namespace = _interopRequireDefault(namespace.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Universal = /*#__PURE__*/function (_Namespace) {
	  _inheritsLoose(Universal, _Namespace);

	  function Universal(opts) {
	    var _this;

	    _this = _Namespace.call(this, opts) || this;
	    _this.type = _types.UNIVERSAL;
	    _this.value = '*';
	    return _this;
	  }

	  return Universal;
	}(_namespace["default"]);

	exports["default"] = Universal;
	module.exports = exports.default;
} (universal$1, universal$1.exports));

var combinator$2 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Combinator = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Combinator, _Node);

	  function Combinator(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.COMBINATOR;
	    return _this;
	  }

	  return Combinator;
	}(_node["default"]);

	exports["default"] = Combinator;
	module.exports = exports.default;
} (combinator$2, combinator$2.exports));

var nesting$1 = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _node = _interopRequireDefault(node$1.exports);

	var _types = types;

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }

	function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

	var Nesting = /*#__PURE__*/function (_Node) {
	  _inheritsLoose(Nesting, _Node);

	  function Nesting(opts) {
	    var _this;

	    _this = _Node.call(this, opts) || this;
	    _this.type = _types.NESTING;
	    _this.value = '&';
	    return _this;
	  }

	  return Nesting;
	}(_node["default"]);

	exports["default"] = Nesting;
	module.exports = exports.default;
} (nesting$1, nesting$1.exports));

var sortAscending = {exports: {}};

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = sortAscending;

	function sortAscending(list) {
	  return list.sort(function (a, b) {
	    return a - b;
	  });
	}
	module.exports = exports.default;
} (sortAscending, sortAscending.exports));

var tokenize = {};

var tokenTypes = {};

tokenTypes.__esModule = true;
tokenTypes.combinator = tokenTypes.word = tokenTypes.comment = tokenTypes.str = tokenTypes.tab = tokenTypes.newline = tokenTypes.feed = tokenTypes.cr = tokenTypes.backslash = tokenTypes.bang = tokenTypes.slash = tokenTypes.doubleQuote = tokenTypes.singleQuote = tokenTypes.space = tokenTypes.greaterThan = tokenTypes.pipe = tokenTypes.equals = tokenTypes.plus = tokenTypes.caret = tokenTypes.tilde = tokenTypes.dollar = tokenTypes.closeSquare = tokenTypes.openSquare = tokenTypes.closeParenthesis = tokenTypes.openParenthesis = tokenTypes.semicolon = tokenTypes.colon = tokenTypes.comma = tokenTypes.at = tokenTypes.asterisk = tokenTypes.ampersand = void 0;
var ampersand = 38; // `&`.charCodeAt(0);

tokenTypes.ampersand = ampersand;
var asterisk = 42; // `*`.charCodeAt(0);

tokenTypes.asterisk = asterisk;
var at = 64; // `@`.charCodeAt(0);

tokenTypes.at = at;
var comma = 44; // `,`.charCodeAt(0);

tokenTypes.comma = comma;
var colon = 58; // `:`.charCodeAt(0);

tokenTypes.colon = colon;
var semicolon = 59; // `;`.charCodeAt(0);

tokenTypes.semicolon = semicolon;
var openParenthesis = 40; // `(`.charCodeAt(0);

tokenTypes.openParenthesis = openParenthesis;
var closeParenthesis = 41; // `)`.charCodeAt(0);

tokenTypes.closeParenthesis = closeParenthesis;
var openSquare = 91; // `[`.charCodeAt(0);

tokenTypes.openSquare = openSquare;
var closeSquare = 93; // `]`.charCodeAt(0);

tokenTypes.closeSquare = closeSquare;
var dollar = 36; // `$`.charCodeAt(0);

tokenTypes.dollar = dollar;
var tilde = 126; // `~`.charCodeAt(0);

tokenTypes.tilde = tilde;
var caret = 94; // `^`.charCodeAt(0);

tokenTypes.caret = caret;
var plus = 43; // `+`.charCodeAt(0);

tokenTypes.plus = plus;
var equals = 61; // `=`.charCodeAt(0);

tokenTypes.equals = equals;
var pipe = 124; // `|`.charCodeAt(0);

tokenTypes.pipe = pipe;
var greaterThan = 62; // `>`.charCodeAt(0);

tokenTypes.greaterThan = greaterThan;
var space = 32; // ` `.charCodeAt(0);

tokenTypes.space = space;
var singleQuote = 39; // `'`.charCodeAt(0);

tokenTypes.singleQuote = singleQuote;
var doubleQuote = 34; // `"`.charCodeAt(0);

tokenTypes.doubleQuote = doubleQuote;
var slash = 47; // `/`.charCodeAt(0);

tokenTypes.slash = slash;
var bang = 33; // `!`.charCodeAt(0);

tokenTypes.bang = bang;
var backslash = 92; // '\\'.charCodeAt(0);

tokenTypes.backslash = backslash;
var cr = 13; // '\r'.charCodeAt(0);

tokenTypes.cr = cr;
var feed = 12; // '\f'.charCodeAt(0);

tokenTypes.feed = feed;
var newline = 10; // '\n'.charCodeAt(0);

tokenTypes.newline = newline;
var tab = 9; // '\t'.charCodeAt(0);
// Expose aliases primarily for readability.

tokenTypes.tab = tab;
var str = singleQuote; // No good single character representation!

tokenTypes.str = str;
var comment$1 = -1;
tokenTypes.comment = comment$1;
var word = -2;
tokenTypes.word = word;
var combinator$1 = -3;
tokenTypes.combinator = combinator$1;

(function (exports) {

	exports.__esModule = true;
	exports["default"] = tokenize;
	exports.FIELDS = void 0;

	var t = _interopRequireWildcard(tokenTypes);

	var _unescapable, _wordDelimiters;

	function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

	var unescapable = (_unescapable = {}, _unescapable[t.tab] = true, _unescapable[t.newline] = true, _unescapable[t.cr] = true, _unescapable[t.feed] = true, _unescapable);
	var wordDelimiters = (_wordDelimiters = {}, _wordDelimiters[t.space] = true, _wordDelimiters[t.tab] = true, _wordDelimiters[t.newline] = true, _wordDelimiters[t.cr] = true, _wordDelimiters[t.feed] = true, _wordDelimiters[t.ampersand] = true, _wordDelimiters[t.asterisk] = true, _wordDelimiters[t.bang] = true, _wordDelimiters[t.comma] = true, _wordDelimiters[t.colon] = true, _wordDelimiters[t.semicolon] = true, _wordDelimiters[t.openParenthesis] = true, _wordDelimiters[t.closeParenthesis] = true, _wordDelimiters[t.openSquare] = true, _wordDelimiters[t.closeSquare] = true, _wordDelimiters[t.singleQuote] = true, _wordDelimiters[t.doubleQuote] = true, _wordDelimiters[t.plus] = true, _wordDelimiters[t.pipe] = true, _wordDelimiters[t.tilde] = true, _wordDelimiters[t.greaterThan] = true, _wordDelimiters[t.equals] = true, _wordDelimiters[t.dollar] = true, _wordDelimiters[t.caret] = true, _wordDelimiters[t.slash] = true, _wordDelimiters);
	var hex = {};
	var hexChars = "0123456789abcdefABCDEF";

	for (var i = 0; i < hexChars.length; i++) {
	  hex[hexChars.charCodeAt(i)] = true;
	}
	/**
	 *  Returns the last index of the bar css word
	 * @param {string} css The string in which the word begins
	 * @param {number} start The index into the string where word's first letter occurs
	 */


	function consumeWord(css, start) {
	  var next = start;
	  var code;

	  do {
	    code = css.charCodeAt(next);

	    if (wordDelimiters[code]) {
	      return next - 1;
	    } else if (code === t.backslash) {
	      next = consumeEscape(css, next) + 1;
	    } else {
	      // All other characters are part of the word
	      next++;
	    }
	  } while (next < css.length);

	  return next - 1;
	}
	/**
	 *  Returns the last index of the escape sequence
	 * @param {string} css The string in which the sequence begins
	 * @param {number} start The index into the string where escape character (`\`) occurs.
	 */


	function consumeEscape(css, start) {
	  var next = start;
	  var code = css.charCodeAt(next + 1);

	  if (unescapable[code]) ; else if (hex[code]) {
	    var hexDigits = 0; // consume up to 6 hex chars

	    do {
	      next++;
	      hexDigits++;
	      code = css.charCodeAt(next + 1);
	    } while (hex[code] && hexDigits < 6); // if fewer than 6 hex chars, a trailing space ends the escape


	    if (hexDigits < 6 && code === t.space) {
	      next++;
	    }
	  } else {
	    // the next char is part of the current word
	    next++;
	  }

	  return next;
	}

	var FIELDS = {
	  TYPE: 0,
	  START_LINE: 1,
	  START_COL: 2,
	  END_LINE: 3,
	  END_COL: 4,
	  START_POS: 5,
	  END_POS: 6
	};
	exports.FIELDS = FIELDS;

	function tokenize(input) {
	  var tokens = [];
	  var css = input.css.valueOf();
	  var _css = css,
	      length = _css.length;
	  var offset = -1;
	  var line = 1;
	  var start = 0;
	  var end = 0;
	  var code, content, endColumn, endLine, escaped, escapePos, last, lines, next, nextLine, nextOffset, quote, tokenType;

	  function unclosed(what, fix) {
	    if (input.safe) {
	      // fyi: this is never set to true.
	      css += fix;
	      next = css.length - 1;
	    } else {
	      throw input.error('Unclosed ' + what, line, start - offset, start);
	    }
	  }

	  while (start < length) {
	    code = css.charCodeAt(start);

	    if (code === t.newline) {
	      offset = start;
	      line += 1;
	    }

	    switch (code) {
	      case t.space:
	      case t.tab:
	      case t.newline:
	      case t.cr:
	      case t.feed:
	        next = start;

	        do {
	          next += 1;
	          code = css.charCodeAt(next);

	          if (code === t.newline) {
	            offset = next;
	            line += 1;
	          }
	        } while (code === t.space || code === t.newline || code === t.tab || code === t.cr || code === t.feed);

	        tokenType = t.space;
	        endLine = line;
	        endColumn = next - offset - 1;
	        end = next;
	        break;

	      case t.plus:
	      case t.greaterThan:
	      case t.tilde:
	      case t.pipe:
	        next = start;

	        do {
	          next += 1;
	          code = css.charCodeAt(next);
	        } while (code === t.plus || code === t.greaterThan || code === t.tilde || code === t.pipe);

	        tokenType = t.combinator;
	        endLine = line;
	        endColumn = start - offset;
	        end = next;
	        break;
	      // Consume these characters as single tokens.

	      case t.asterisk:
	      case t.ampersand:
	      case t.bang:
	      case t.comma:
	      case t.equals:
	      case t.dollar:
	      case t.caret:
	      case t.openSquare:
	      case t.closeSquare:
	      case t.colon:
	      case t.semicolon:
	      case t.openParenthesis:
	      case t.closeParenthesis:
	        next = start;
	        tokenType = code;
	        endLine = line;
	        endColumn = start - offset;
	        end = next + 1;
	        break;

	      case t.singleQuote:
	      case t.doubleQuote:
	        quote = code === t.singleQuote ? "'" : '"';
	        next = start;

	        do {
	          escaped = false;
	          next = css.indexOf(quote, next + 1);

	          if (next === -1) {
	            unclosed('quote', quote);
	          }

	          escapePos = next;

	          while (css.charCodeAt(escapePos - 1) === t.backslash) {
	            escapePos -= 1;
	            escaped = !escaped;
	          }
	        } while (escaped);

	        tokenType = t.str;
	        endLine = line;
	        endColumn = start - offset;
	        end = next + 1;
	        break;

	      default:
	        if (code === t.slash && css.charCodeAt(start + 1) === t.asterisk) {
	          next = css.indexOf('*/', start + 2) + 1;

	          if (next === 0) {
	            unclosed('comment', '*/');
	          }

	          content = css.slice(start, next + 1);
	          lines = content.split('\n');
	          last = lines.length - 1;

	          if (last > 0) {
	            nextLine = line + last;
	            nextOffset = next - lines[last].length;
	          } else {
	            nextLine = line;
	            nextOffset = offset;
	          }

	          tokenType = t.comment;
	          line = nextLine;
	          endLine = nextLine;
	          endColumn = next - nextOffset;
	        } else if (code === t.slash) {
	          next = start;
	          tokenType = code;
	          endLine = line;
	          endColumn = start - offset;
	          end = next + 1;
	        } else {
	          next = consumeWord(css, start);
	          tokenType = t.word;
	          endLine = line;
	          endColumn = next - offset;
	        }

	        end = next + 1;
	        break;
	    } // Ensure that the token structure remains consistent


	    tokens.push([tokenType, // [0] Token type
	    line, // [1] Starting line
	    start - offset, // [2] Starting column
	    endLine, // [3] Ending line
	    endColumn, // [4] Ending column
	    start, // [5] Start position / Source index
	    end // [6] End position
	    ]); // Reset offset for the next token

	    if (nextOffset) {
	      offset = nextOffset;
	      nextOffset = null;
	    }

	    start = end;
	  }

	  return tokens;
	}
} (tokenize));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _root = _interopRequireDefault(root$1.exports);

	var _selector = _interopRequireDefault(selector$1.exports);

	var _className = _interopRequireDefault(className$1.exports);

	var _comment = _interopRequireDefault(comment$2.exports);

	var _id = _interopRequireDefault(id$1.exports);

	var _tag = _interopRequireDefault(tag$1.exports);

	var _string = _interopRequireDefault(string$1.exports);

	var _pseudo = _interopRequireDefault(pseudo$1.exports);

	var _attribute = _interopRequireWildcard(attribute$1);

	var _universal = _interopRequireDefault(universal$1.exports);

	var _combinator = _interopRequireDefault(combinator$2.exports);

	var _nesting = _interopRequireDefault(nesting$1.exports);

	var _sortAscending = _interopRequireDefault(sortAscending.exports);

	var _tokenize = _interopRequireWildcard(tokenize);

	var tokens = _interopRequireWildcard(tokenTypes);

	var types$1 = _interopRequireWildcard(types);

	var _util = util;

	var _WHITESPACE_TOKENS, _Object$assign;

	function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

	function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

	var WHITESPACE_TOKENS = (_WHITESPACE_TOKENS = {}, _WHITESPACE_TOKENS[tokens.space] = true, _WHITESPACE_TOKENS[tokens.cr] = true, _WHITESPACE_TOKENS[tokens.feed] = true, _WHITESPACE_TOKENS[tokens.newline] = true, _WHITESPACE_TOKENS[tokens.tab] = true, _WHITESPACE_TOKENS);
	var WHITESPACE_EQUIV_TOKENS = Object.assign({}, WHITESPACE_TOKENS, (_Object$assign = {}, _Object$assign[tokens.comment] = true, _Object$assign));

	function tokenStart(token) {
	  return {
	    line: token[_tokenize.FIELDS.START_LINE],
	    column: token[_tokenize.FIELDS.START_COL]
	  };
	}

	function tokenEnd(token) {
	  return {
	    line: token[_tokenize.FIELDS.END_LINE],
	    column: token[_tokenize.FIELDS.END_COL]
	  };
	}

	function getSource(startLine, startColumn, endLine, endColumn) {
	  return {
	    start: {
	      line: startLine,
	      column: startColumn
	    },
	    end: {
	      line: endLine,
	      column: endColumn
	    }
	  };
	}

	function getTokenSource(token) {
	  return getSource(token[_tokenize.FIELDS.START_LINE], token[_tokenize.FIELDS.START_COL], token[_tokenize.FIELDS.END_LINE], token[_tokenize.FIELDS.END_COL]);
	}

	function getTokenSourceSpan(startToken, endToken) {
	  if (!startToken) {
	    return undefined;
	  }

	  return getSource(startToken[_tokenize.FIELDS.START_LINE], startToken[_tokenize.FIELDS.START_COL], endToken[_tokenize.FIELDS.END_LINE], endToken[_tokenize.FIELDS.END_COL]);
	}

	function unescapeProp(node, prop) {
	  var value = node[prop];

	  if (typeof value !== "string") {
	    return;
	  }

	  if (value.indexOf("\\") !== -1) {
	    (0, _util.ensureObject)(node, 'raws');
	    node[prop] = (0, _util.unesc)(value);

	    if (node.raws[prop] === undefined) {
	      node.raws[prop] = value;
	    }
	  }

	  return node;
	}

	function indexesOf(array, item) {
	  var i = -1;
	  var indexes = [];

	  while ((i = array.indexOf(item, i + 1)) !== -1) {
	    indexes.push(i);
	  }

	  return indexes;
	}

	function uniqs() {
	  var list = Array.prototype.concat.apply([], arguments);
	  return list.filter(function (item, i) {
	    return i === list.indexOf(item);
	  });
	}

	var Parser = /*#__PURE__*/function () {
	  function Parser(rule, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    this.rule = rule;
	    this.options = Object.assign({
	      lossy: false,
	      safe: false
	    }, options);
	    this.position = 0;
	    this.css = typeof this.rule === 'string' ? this.rule : this.rule.selector;
	    this.tokens = (0, _tokenize["default"])({
	      css: this.css,
	      error: this._errorGenerator(),
	      safe: this.options.safe
	    });
	    var rootSource = getTokenSourceSpan(this.tokens[0], this.tokens[this.tokens.length - 1]);
	    this.root = new _root["default"]({
	      source: rootSource
	    });
	    this.root.errorGenerator = this._errorGenerator();
	    var selector = new _selector["default"]({
	      source: {
	        start: {
	          line: 1,
	          column: 1
	        }
	      }
	    });
	    this.root.append(selector);
	    this.current = selector;
	    this.loop();
	  }

	  var _proto = Parser.prototype;

	  _proto._errorGenerator = function _errorGenerator() {
	    var _this = this;

	    return function (message, errorOptions) {
	      if (typeof _this.rule === 'string') {
	        return new Error(message);
	      }

	      return _this.rule.error(message, errorOptions);
	    };
	  };

	  _proto.attribute = function attribute() {
	    var attr = [];
	    var startingToken = this.currToken;
	    this.position++;

	    while (this.position < this.tokens.length && this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
	      attr.push(this.currToken);
	      this.position++;
	    }

	    if (this.currToken[_tokenize.FIELDS.TYPE] !== tokens.closeSquare) {
	      return this.expected('closing square bracket', this.currToken[_tokenize.FIELDS.START_POS]);
	    }

	    var len = attr.length;
	    var node = {
	      source: getSource(startingToken[1], startingToken[2], this.currToken[3], this.currToken[4]),
	      sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
	    };

	    if (len === 1 && !~[tokens.word].indexOf(attr[0][_tokenize.FIELDS.TYPE])) {
	      return this.expected('attribute', attr[0][_tokenize.FIELDS.START_POS]);
	    }

	    var pos = 0;
	    var spaceBefore = '';
	    var commentBefore = '';
	    var lastAdded = null;
	    var spaceAfterMeaningfulToken = false;

	    while (pos < len) {
	      var token = attr[pos];
	      var content = this.content(token);
	      var next = attr[pos + 1];

	      switch (token[_tokenize.FIELDS.TYPE]) {
	        case tokens.space:
	          // if (
	          //     len === 1 ||
	          //     pos === 0 && this.content(next) === '|'
	          // ) {
	          //     return this.expected('attribute', token[TOKEN.START_POS], content);
	          // }
	          spaceAfterMeaningfulToken = true;

	          if (this.options.lossy) {
	            break;
	          }

	          if (lastAdded) {
	            (0, _util.ensureObject)(node, 'spaces', lastAdded);
	            var prevContent = node.spaces[lastAdded].after || '';
	            node.spaces[lastAdded].after = prevContent + content;
	            var existingComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || null;

	            if (existingComment) {
	              node.raws.spaces[lastAdded].after = existingComment + content;
	            }
	          } else {
	            spaceBefore = spaceBefore + content;
	            commentBefore = commentBefore + content;
	          }

	          break;

	        case tokens.asterisk:
	          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
	            node.operator = content;
	            lastAdded = 'operator';
	          } else if ((!node.namespace || lastAdded === "namespace" && !spaceAfterMeaningfulToken) && next) {
	            if (spaceBefore) {
	              (0, _util.ensureObject)(node, 'spaces', 'attribute');
	              node.spaces.attribute.before = spaceBefore;
	              spaceBefore = '';
	            }

	            if (commentBefore) {
	              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');
	              node.raws.spaces.attribute.before = spaceBefore;
	              commentBefore = '';
	            }

	            node.namespace = (node.namespace || "") + content;
	            var rawValue = (0, _util.getProp)(node, 'raws', 'namespace') || null;

	            if (rawValue) {
	              node.raws.namespace += content;
	            }

	            lastAdded = 'namespace';
	          }

	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.dollar:
	          if (lastAdded === "value") {
	            var oldRawValue = (0, _util.getProp)(node, 'raws', 'value');
	            node.value += "$";

	            if (oldRawValue) {
	              node.raws.value = oldRawValue + "$";
	            }

	            break;
	          }

	        // Falls through

	        case tokens.caret:
	          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
	            node.operator = content;
	            lastAdded = 'operator';
	          }

	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.combinator:
	          if (content === '~' && next[_tokenize.FIELDS.TYPE] === tokens.equals) {
	            node.operator = content;
	            lastAdded = 'operator';
	          }

	          if (content !== '|') {
	            spaceAfterMeaningfulToken = false;
	            break;
	          }

	          if (next[_tokenize.FIELDS.TYPE] === tokens.equals) {
	            node.operator = content;
	            lastAdded = 'operator';
	          } else if (!node.namespace && !node.attribute) {
	            node.namespace = true;
	          }

	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.word:
	          if (next && this.content(next) === '|' && attr[pos + 2] && attr[pos + 2][_tokenize.FIELDS.TYPE] !== tokens.equals && // this look-ahead probably fails with comment nodes involved.
	          !node.operator && !node.namespace) {
	            node.namespace = content;
	            lastAdded = 'namespace';
	          } else if (!node.attribute || lastAdded === "attribute" && !spaceAfterMeaningfulToken) {
	            if (spaceBefore) {
	              (0, _util.ensureObject)(node, 'spaces', 'attribute');
	              node.spaces.attribute.before = spaceBefore;
	              spaceBefore = '';
	            }

	            if (commentBefore) {
	              (0, _util.ensureObject)(node, 'raws', 'spaces', 'attribute');
	              node.raws.spaces.attribute.before = commentBefore;
	              commentBefore = '';
	            }

	            node.attribute = (node.attribute || "") + content;

	            var _rawValue = (0, _util.getProp)(node, 'raws', 'attribute') || null;

	            if (_rawValue) {
	              node.raws.attribute += content;
	            }

	            lastAdded = 'attribute';
	          } else if (!node.value && node.value !== "" || lastAdded === "value" && !spaceAfterMeaningfulToken) {
	            var _unescaped = (0, _util.unesc)(content);

	            var _oldRawValue = (0, _util.getProp)(node, 'raws', 'value') || '';

	            var oldValue = node.value || '';
	            node.value = oldValue + _unescaped;
	            node.quoteMark = null;

	            if (_unescaped !== content || _oldRawValue) {
	              (0, _util.ensureObject)(node, 'raws');
	              node.raws.value = (_oldRawValue || oldValue) + content;
	            }

	            lastAdded = 'value';
	          } else {
	            var insensitive = content === 'i' || content === "I";

	            if ((node.value || node.value === '') && (node.quoteMark || spaceAfterMeaningfulToken)) {
	              node.insensitive = insensitive;

	              if (!insensitive || content === "I") {
	                (0, _util.ensureObject)(node, 'raws');
	                node.raws.insensitiveFlag = content;
	              }

	              lastAdded = 'insensitive';

	              if (spaceBefore) {
	                (0, _util.ensureObject)(node, 'spaces', 'insensitive');
	                node.spaces.insensitive.before = spaceBefore;
	                spaceBefore = '';
	              }

	              if (commentBefore) {
	                (0, _util.ensureObject)(node, 'raws', 'spaces', 'insensitive');
	                node.raws.spaces.insensitive.before = commentBefore;
	                commentBefore = '';
	              }
	            } else if (node.value || node.value === '') {
	              lastAdded = 'value';
	              node.value += content;

	              if (node.raws.value) {
	                node.raws.value += content;
	              }
	            }
	          }

	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.str:
	          if (!node.attribute || !node.operator) {
	            return this.error("Expected an attribute followed by an operator preceding the string.", {
	              index: token[_tokenize.FIELDS.START_POS]
	            });
	          }

	          var _unescapeValue = (0, _attribute.unescapeValue)(content),
	              unescaped = _unescapeValue.unescaped,
	              quoteMark = _unescapeValue.quoteMark;

	          node.value = unescaped;
	          node.quoteMark = quoteMark;
	          lastAdded = 'value';
	          (0, _util.ensureObject)(node, 'raws');
	          node.raws.value = content;
	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.equals:
	          if (!node.attribute) {
	            return this.expected('attribute', token[_tokenize.FIELDS.START_POS], content);
	          }

	          if (node.value) {
	            return this.error('Unexpected "=" found; an operator was already defined.', {
	              index: token[_tokenize.FIELDS.START_POS]
	            });
	          }

	          node.operator = node.operator ? node.operator + content : content;
	          lastAdded = 'operator';
	          spaceAfterMeaningfulToken = false;
	          break;

	        case tokens.comment:
	          if (lastAdded) {
	            if (spaceAfterMeaningfulToken || next && next[_tokenize.FIELDS.TYPE] === tokens.space || lastAdded === 'insensitive') {
	              var lastComment = (0, _util.getProp)(node, 'spaces', lastAdded, 'after') || '';
	              var rawLastComment = (0, _util.getProp)(node, 'raws', 'spaces', lastAdded, 'after') || lastComment;
	              (0, _util.ensureObject)(node, 'raws', 'spaces', lastAdded);
	              node.raws.spaces[lastAdded].after = rawLastComment + content;
	            } else {
	              var lastValue = node[lastAdded] || '';
	              var rawLastValue = (0, _util.getProp)(node, 'raws', lastAdded) || lastValue;
	              (0, _util.ensureObject)(node, 'raws');
	              node.raws[lastAdded] = rawLastValue + content;
	            }
	          } else {
	            commentBefore = commentBefore + content;
	          }

	          break;

	        default:
	          return this.error("Unexpected \"" + content + "\" found.", {
	            index: token[_tokenize.FIELDS.START_POS]
	          });
	      }

	      pos++;
	    }

	    unescapeProp(node, "attribute");
	    unescapeProp(node, "namespace");
	    this.newNode(new _attribute["default"](node));
	    this.position++;
	  }
	  /**
	   * return a node containing meaningless garbage up to (but not including) the specified token position.
	   * if the token position is negative, all remaining tokens are consumed.
	   *
	   * This returns an array containing a single string node if all whitespace,
	   * otherwise an array of comment nodes with space before and after.
	   *
	   * These tokens are not added to the current selector, the caller can add them or use them to amend
	   * a previous node's space metadata.
	   *
	   * In lossy mode, this returns only comments.
	   */
	  ;

	  _proto.parseWhitespaceEquivalentTokens = function parseWhitespaceEquivalentTokens(stopPosition) {
	    if (stopPosition < 0) {
	      stopPosition = this.tokens.length;
	    }

	    var startPosition = this.position;
	    var nodes = [];
	    var space = "";
	    var lastComment = undefined;

	    do {
	      if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) {
	        if (!this.options.lossy) {
	          space += this.content();
	        }
	      } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.comment) {
	        var spaces = {};

	        if (space) {
	          spaces.before = space;
	          space = "";
	        }

	        lastComment = new _comment["default"]({
	          value: this.content(),
	          source: getTokenSource(this.currToken),
	          sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],
	          spaces: spaces
	        });
	        nodes.push(lastComment);
	      }
	    } while (++this.position < stopPosition);

	    if (space) {
	      if (lastComment) {
	        lastComment.spaces.after = space;
	      } else if (!this.options.lossy) {
	        var firstToken = this.tokens[startPosition];
	        var lastToken = this.tokens[this.position - 1];
	        nodes.push(new _string["default"]({
	          value: '',
	          source: getSource(firstToken[_tokenize.FIELDS.START_LINE], firstToken[_tokenize.FIELDS.START_COL], lastToken[_tokenize.FIELDS.END_LINE], lastToken[_tokenize.FIELDS.END_COL]),
	          sourceIndex: firstToken[_tokenize.FIELDS.START_POS],
	          spaces: {
	            before: space,
	            after: ''
	          }
	        }));
	      }
	    }

	    return nodes;
	  }
	  /**
	   * 
	   * @param {*} nodes 
	   */
	  ;

	  _proto.convertWhitespaceNodesToSpace = function convertWhitespaceNodesToSpace(nodes, requiredSpace) {
	    var _this2 = this;

	    if (requiredSpace === void 0) {
	      requiredSpace = false;
	    }

	    var space = "";
	    var rawSpace = "";
	    nodes.forEach(function (n) {
	      var spaceBefore = _this2.lossySpace(n.spaces.before, requiredSpace);

	      var rawSpaceBefore = _this2.lossySpace(n.rawSpaceBefore, requiredSpace);

	      space += spaceBefore + _this2.lossySpace(n.spaces.after, requiredSpace && spaceBefore.length === 0);
	      rawSpace += spaceBefore + n.value + _this2.lossySpace(n.rawSpaceAfter, requiredSpace && rawSpaceBefore.length === 0);
	    });

	    if (rawSpace === space) {
	      rawSpace = undefined;
	    }

	    var result = {
	      space: space,
	      rawSpace: rawSpace
	    };
	    return result;
	  };

	  _proto.isNamedCombinator = function isNamedCombinator(position) {
	    if (position === void 0) {
	      position = this.position;
	    }

	    return this.tokens[position + 0] && this.tokens[position + 0][_tokenize.FIELDS.TYPE] === tokens.slash && this.tokens[position + 1] && this.tokens[position + 1][_tokenize.FIELDS.TYPE] === tokens.word && this.tokens[position + 2] && this.tokens[position + 2][_tokenize.FIELDS.TYPE] === tokens.slash;
	  };

	  _proto.namedCombinator = function namedCombinator() {
	    if (this.isNamedCombinator()) {
	      var nameRaw = this.content(this.tokens[this.position + 1]);
	      var name = (0, _util.unesc)(nameRaw).toLowerCase();
	      var raws = {};

	      if (name !== nameRaw) {
	        raws.value = "/" + nameRaw + "/";
	      }

	      var node = new _combinator["default"]({
	        value: "/" + name + "/",
	        source: getSource(this.currToken[_tokenize.FIELDS.START_LINE], this.currToken[_tokenize.FIELDS.START_COL], this.tokens[this.position + 2][_tokenize.FIELDS.END_LINE], this.tokens[this.position + 2][_tokenize.FIELDS.END_COL]),
	        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS],
	        raws: raws
	      });
	      this.position = this.position + 3;
	      return node;
	    } else {
	      this.unexpected();
	    }
	  };

	  _proto.combinator = function combinator() {
	    var _this3 = this;

	    if (this.content() === '|') {
	      return this.namespace();
	    } // We need to decide between a space that's a descendant combinator and meaningless whitespace at the end of a selector.


	    var nextSigTokenPos = this.locateNextMeaningfulToken(this.position);

	    if (nextSigTokenPos < 0 || this.tokens[nextSigTokenPos][_tokenize.FIELDS.TYPE] === tokens.comma) {
	      var nodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);

	      if (nodes.length > 0) {
	        var last = this.current.last;

	        if (last) {
	          var _this$convertWhitespa = this.convertWhitespaceNodesToSpace(nodes),
	              space = _this$convertWhitespa.space,
	              rawSpace = _this$convertWhitespa.rawSpace;

	          if (rawSpace !== undefined) {
	            last.rawSpaceAfter += rawSpace;
	          }

	          last.spaces.after += space;
	        } else {
	          nodes.forEach(function (n) {
	            return _this3.newNode(n);
	          });
	        }
	      }

	      return;
	    }

	    var firstToken = this.currToken;
	    var spaceOrDescendantSelectorNodes = undefined;

	    if (nextSigTokenPos > this.position) {
	      spaceOrDescendantSelectorNodes = this.parseWhitespaceEquivalentTokens(nextSigTokenPos);
	    }

	    var node;

	    if (this.isNamedCombinator()) {
	      node = this.namedCombinator();
	    } else if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.combinator) {
	      node = new _combinator["default"]({
	        value: this.content(),
	        source: getTokenSource(this.currToken),
	        sourceIndex: this.currToken[_tokenize.FIELDS.START_POS]
	      });
	      this.position++;
	    } else if (WHITESPACE_TOKENS[this.currToken[_tokenize.FIELDS.TYPE]]) ; else if (!spaceOrDescendantSelectorNodes) {
	      this.unexpected();
	    }

	    if (node) {
	      if (spaceOrDescendantSelectorNodes) {
	        var _this$convertWhitespa2 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes),
	            _space = _this$convertWhitespa2.space,
	            _rawSpace = _this$convertWhitespa2.rawSpace;

	        node.spaces.before = _space;
	        node.rawSpaceBefore = _rawSpace;
	      }
	    } else {
	      // descendant combinator
	      var _this$convertWhitespa3 = this.convertWhitespaceNodesToSpace(spaceOrDescendantSelectorNodes, true),
	          _space2 = _this$convertWhitespa3.space,
	          _rawSpace2 = _this$convertWhitespa3.rawSpace;

	      if (!_rawSpace2) {
	        _rawSpace2 = _space2;
	      }

	      var spaces = {};
	      var raws = {
	        spaces: {}
	      };

	      if (_space2.endsWith(' ') && _rawSpace2.endsWith(' ')) {
	        spaces.before = _space2.slice(0, _space2.length - 1);
	        raws.spaces.before = _rawSpace2.slice(0, _rawSpace2.length - 1);
	      } else if (_space2.startsWith(' ') && _rawSpace2.startsWith(' ')) {
	        spaces.after = _space2.slice(1);
	        raws.spaces.after = _rawSpace2.slice(1);
	      } else {
	        raws.value = _rawSpace2;
	      }

	      node = new _combinator["default"]({
	        value: ' ',
	        source: getTokenSourceSpan(firstToken, this.tokens[this.position - 1]),
	        sourceIndex: firstToken[_tokenize.FIELDS.START_POS],
	        spaces: spaces,
	        raws: raws
	      });
	    }

	    if (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.space) {
	      node.spaces.after = this.optionalSpace(this.content());
	      this.position++;
	    }

	    return this.newNode(node);
	  };

	  _proto.comma = function comma() {
	    if (this.position === this.tokens.length - 1) {
	      this.root.trailingComma = true;
	      this.position++;
	      return;
	    }

	    this.current._inferEndPosition();

	    var selector = new _selector["default"]({
	      source: {
	        start: tokenStart(this.tokens[this.position + 1])
	      }
	    });
	    this.current.parent.append(selector);
	    this.current = selector;
	    this.position++;
	  };

	  _proto.comment = function comment() {
	    var current = this.currToken;
	    this.newNode(new _comment["default"]({
	      value: this.content(),
	      source: getTokenSource(current),
	      sourceIndex: current[_tokenize.FIELDS.START_POS]
	    }));
	    this.position++;
	  };

	  _proto.error = function error(message, opts) {
	    throw this.root.error(message, opts);
	  };

	  _proto.missingBackslash = function missingBackslash() {
	    return this.error('Expected a backslash preceding the semicolon.', {
	      index: this.currToken[_tokenize.FIELDS.START_POS]
	    });
	  };

	  _proto.missingParenthesis = function missingParenthesis() {
	    return this.expected('opening parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);
	  };

	  _proto.missingSquareBracket = function missingSquareBracket() {
	    return this.expected('opening square bracket', this.currToken[_tokenize.FIELDS.START_POS]);
	  };

	  _proto.unexpected = function unexpected() {
	    return this.error("Unexpected '" + this.content() + "'. Escaping special characters with \\ may help.", this.currToken[_tokenize.FIELDS.START_POS]);
	  };

	  _proto.namespace = function namespace() {
	    var before = this.prevToken && this.content(this.prevToken) || true;

	    if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.word) {
	      this.position++;
	      return this.word(before);
	    } else if (this.nextToken[_tokenize.FIELDS.TYPE] === tokens.asterisk) {
	      this.position++;
	      return this.universal(before);
	    }
	  };

	  _proto.nesting = function nesting() {
	    if (this.nextToken) {
	      var nextContent = this.content(this.nextToken);

	      if (nextContent === "|") {
	        this.position++;
	        return;
	      }
	    }

	    var current = this.currToken;
	    this.newNode(new _nesting["default"]({
	      value: this.content(),
	      source: getTokenSource(current),
	      sourceIndex: current[_tokenize.FIELDS.START_POS]
	    }));
	    this.position++;
	  };

	  _proto.parentheses = function parentheses() {
	    var last = this.current.last;
	    var unbalanced = 1;
	    this.position++;

	    if (last && last.type === types$1.PSEUDO) {
	      var selector = new _selector["default"]({
	        source: {
	          start: tokenStart(this.tokens[this.position - 1])
	        }
	      });
	      var cache = this.current;
	      last.append(selector);
	      this.current = selector;

	      while (this.position < this.tokens.length && unbalanced) {
	        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
	          unbalanced++;
	        }

	        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
	          unbalanced--;
	        }

	        if (unbalanced) {
	          this.parse();
	        } else {
	          this.current.source.end = tokenEnd(this.currToken);
	          this.current.parent.source.end = tokenEnd(this.currToken);
	          this.position++;
	        }
	      }

	      this.current = cache;
	    } else {
	      // I think this case should be an error. It's used to implement a basic parse of media queries
	      // but I don't think it's a good idea.
	      var parenStart = this.currToken;
	      var parenValue = "(";
	      var parenEnd;

	      while (this.position < this.tokens.length && unbalanced) {
	        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
	          unbalanced++;
	        }

	        if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
	          unbalanced--;
	        }

	        parenEnd = this.currToken;
	        parenValue += this.parseParenthesisToken(this.currToken);
	        this.position++;
	      }

	      if (last) {
	        last.appendToPropertyAndEscape("value", parenValue, parenValue);
	      } else {
	        this.newNode(new _string["default"]({
	          value: parenValue,
	          source: getSource(parenStart[_tokenize.FIELDS.START_LINE], parenStart[_tokenize.FIELDS.START_COL], parenEnd[_tokenize.FIELDS.END_LINE], parenEnd[_tokenize.FIELDS.END_COL]),
	          sourceIndex: parenStart[_tokenize.FIELDS.START_POS]
	        }));
	      }
	    }

	    if (unbalanced) {
	      return this.expected('closing parenthesis', this.currToken[_tokenize.FIELDS.START_POS]);
	    }
	  };

	  _proto.pseudo = function pseudo() {
	    var _this4 = this;

	    var pseudoStr = '';
	    var startingToken = this.currToken;

	    while (this.currToken && this.currToken[_tokenize.FIELDS.TYPE] === tokens.colon) {
	      pseudoStr += this.content();
	      this.position++;
	    }

	    if (!this.currToken) {
	      return this.expected(['pseudo-class', 'pseudo-element'], this.position - 1);
	    }

	    if (this.currToken[_tokenize.FIELDS.TYPE] === tokens.word) {
	      this.splitWord(false, function (first, length) {
	        pseudoStr += first;

	        _this4.newNode(new _pseudo["default"]({
	          value: pseudoStr,
	          source: getTokenSourceSpan(startingToken, _this4.currToken),
	          sourceIndex: startingToken[_tokenize.FIELDS.START_POS]
	        }));

	        if (length > 1 && _this4.nextToken && _this4.nextToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis) {
	          _this4.error('Misplaced parenthesis.', {
	            index: _this4.nextToken[_tokenize.FIELDS.START_POS]
	          });
	        }
	      });
	    } else {
	      return this.expected(['pseudo-class', 'pseudo-element'], this.currToken[_tokenize.FIELDS.START_POS]);
	    }
	  };

	  _proto.space = function space() {
	    var content = this.content(); // Handle space before and after the selector

	    if (this.position === 0 || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.prevToken[_tokenize.FIELDS.TYPE] === tokens.openParenthesis || this.current.nodes.every(function (node) {
	      return node.type === 'comment';
	    })) {
	      this.spaces = this.optionalSpace(content);
	      this.position++;
	    } else if (this.position === this.tokens.length - 1 || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.comma || this.nextToken[_tokenize.FIELDS.TYPE] === tokens.closeParenthesis) {
	      this.current.last.spaces.after = this.optionalSpace(content);
	      this.position++;
	    } else {
	      this.combinator();
	    }
	  };

	  _proto.string = function string() {
	    var current = this.currToken;
	    this.newNode(new _string["default"]({
	      value: this.content(),
	      source: getTokenSource(current),
	      sourceIndex: current[_tokenize.FIELDS.START_POS]
	    }));
	    this.position++;
	  };

	  _proto.universal = function universal(namespace) {
	    var nextToken = this.nextToken;

	    if (nextToken && this.content(nextToken) === '|') {
	      this.position++;
	      return this.namespace();
	    }

	    var current = this.currToken;
	    this.newNode(new _universal["default"]({
	      value: this.content(),
	      source: getTokenSource(current),
	      sourceIndex: current[_tokenize.FIELDS.START_POS]
	    }), namespace);
	    this.position++;
	  };

	  _proto.splitWord = function splitWord(namespace, firstCallback) {
	    var _this5 = this;

	    var nextToken = this.nextToken;
	    var word = this.content();

	    while (nextToken && ~[tokens.dollar, tokens.caret, tokens.equals, tokens.word].indexOf(nextToken[_tokenize.FIELDS.TYPE])) {
	      this.position++;
	      var current = this.content();
	      word += current;

	      if (current.lastIndexOf('\\') === current.length - 1) {
	        var next = this.nextToken;

	        if (next && next[_tokenize.FIELDS.TYPE] === tokens.space) {
	          word += this.requiredSpace(this.content(next));
	          this.position++;
	        }
	      }

	      nextToken = this.nextToken;
	    }

	    var hasClass = indexesOf(word, '.').filter(function (i) {
	      // Allow escaped dot within class name
	      var escapedDot = word[i - 1] === '\\'; // Allow decimal numbers percent in @keyframes

	      var isKeyframesPercent = /^\d+\.\d+%$/.test(word);
	      return !escapedDot && !isKeyframesPercent;
	    });
	    var hasId = indexesOf(word, '#').filter(function (i) {
	      return word[i - 1] !== '\\';
	    }); // Eliminate Sass interpolations from the list of id indexes

	    var interpolations = indexesOf(word, '#{');

	    if (interpolations.length) {
	      hasId = hasId.filter(function (hashIndex) {
	        return !~interpolations.indexOf(hashIndex);
	      });
	    }

	    var indices = (0, _sortAscending["default"])(uniqs([0].concat(hasClass, hasId)));
	    indices.forEach(function (ind, i) {
	      var index = indices[i + 1] || word.length;
	      var value = word.slice(ind, index);

	      if (i === 0 && firstCallback) {
	        return firstCallback.call(_this5, value, indices.length);
	      }

	      var node;
	      var current = _this5.currToken;
	      var sourceIndex = current[_tokenize.FIELDS.START_POS] + indices[i];
	      var source = getSource(current[1], current[2] + ind, current[3], current[2] + (index - 1));

	      if (~hasClass.indexOf(ind)) {
	        var classNameOpts = {
	          value: value.slice(1),
	          source: source,
	          sourceIndex: sourceIndex
	        };
	        node = new _className["default"](unescapeProp(classNameOpts, "value"));
	      } else if (~hasId.indexOf(ind)) {
	        var idOpts = {
	          value: value.slice(1),
	          source: source,
	          sourceIndex: sourceIndex
	        };
	        node = new _id["default"](unescapeProp(idOpts, "value"));
	      } else {
	        var tagOpts = {
	          value: value,
	          source: source,
	          sourceIndex: sourceIndex
	        };
	        unescapeProp(tagOpts, "value");
	        node = new _tag["default"](tagOpts);
	      }

	      _this5.newNode(node, namespace); // Ensure that the namespace is used only once


	      namespace = null;
	    });
	    this.position++;
	  };

	  _proto.word = function word(namespace) {
	    var nextToken = this.nextToken;

	    if (nextToken && this.content(nextToken) === '|') {
	      this.position++;
	      return this.namespace();
	    }

	    return this.splitWord(namespace);
	  };

	  _proto.loop = function loop() {
	    while (this.position < this.tokens.length) {
	      this.parse(true);
	    }

	    this.current._inferEndPosition();

	    return this.root;
	  };

	  _proto.parse = function parse(throwOnParenthesis) {
	    switch (this.currToken[_tokenize.FIELDS.TYPE]) {
	      case tokens.space:
	        this.space();
	        break;

	      case tokens.comment:
	        this.comment();
	        break;

	      case tokens.openParenthesis:
	        this.parentheses();
	        break;

	      case tokens.closeParenthesis:
	        if (throwOnParenthesis) {
	          this.missingParenthesis();
	        }

	        break;

	      case tokens.openSquare:
	        this.attribute();
	        break;

	      case tokens.dollar:
	      case tokens.caret:
	      case tokens.equals:
	      case tokens.word:
	        this.word();
	        break;

	      case tokens.colon:
	        this.pseudo();
	        break;

	      case tokens.comma:
	        this.comma();
	        break;

	      case tokens.asterisk:
	        this.universal();
	        break;

	      case tokens.ampersand:
	        this.nesting();
	        break;

	      case tokens.slash:
	      case tokens.combinator:
	        this.combinator();
	        break;

	      case tokens.str:
	        this.string();
	        break;
	      // These cases throw; no break needed.

	      case tokens.closeSquare:
	        this.missingSquareBracket();

	      case tokens.semicolon:
	        this.missingBackslash();

	      default:
	        this.unexpected();
	    }
	  }
	  /**
	   * Helpers
	   */
	  ;

	  _proto.expected = function expected(description, index, found) {
	    if (Array.isArray(description)) {
	      var last = description.pop();
	      description = description.join(', ') + " or " + last;
	    }

	    var an = /^[aeiou]/.test(description[0]) ? 'an' : 'a';

	    if (!found) {
	      return this.error("Expected " + an + " " + description + ".", {
	        index: index
	      });
	    }

	    return this.error("Expected " + an + " " + description + ", found \"" + found + "\" instead.", {
	      index: index
	    });
	  };

	  _proto.requiredSpace = function requiredSpace(space) {
	    return this.options.lossy ? ' ' : space;
	  };

	  _proto.optionalSpace = function optionalSpace(space) {
	    return this.options.lossy ? '' : space;
	  };

	  _proto.lossySpace = function lossySpace(space, required) {
	    if (this.options.lossy) {
	      return required ? ' ' : '';
	    } else {
	      return space;
	    }
	  };

	  _proto.parseParenthesisToken = function parseParenthesisToken(token) {
	    var content = this.content(token);

	    if (token[_tokenize.FIELDS.TYPE] === tokens.space) {
	      return this.requiredSpace(content);
	    } else {
	      return content;
	    }
	  };

	  _proto.newNode = function newNode(node, namespace) {
	    if (namespace) {
	      if (/^ +$/.test(namespace)) {
	        if (!this.options.lossy) {
	          this.spaces = (this.spaces || '') + namespace;
	        }

	        namespace = true;
	      }

	      node.namespace = namespace;
	      unescapeProp(node, "namespace");
	    }

	    if (this.spaces) {
	      node.spaces.before = this.spaces;
	      this.spaces = '';
	    }

	    return this.current.append(node);
	  };

	  _proto.content = function content(token) {
	    if (token === void 0) {
	      token = this.currToken;
	    }

	    return this.css.slice(token[_tokenize.FIELDS.START_POS], token[_tokenize.FIELDS.END_POS]);
	  };

	  /**
	   * returns the index of the next non-whitespace, non-comment token.
	   * returns -1 if no meaningful token is found.
	   */
	  _proto.locateNextMeaningfulToken = function locateNextMeaningfulToken(startPosition) {
	    if (startPosition === void 0) {
	      startPosition = this.position + 1;
	    }

	    var searchPosition = startPosition;

	    while (searchPosition < this.tokens.length) {
	      if (WHITESPACE_EQUIV_TOKENS[this.tokens[searchPosition][_tokenize.FIELDS.TYPE]]) {
	        searchPosition++;
	        continue;
	      } else {
	        return searchPosition;
	      }
	    }

	    return -1;
	  };

	  _createClass(Parser, [{
	    key: "currToken",
	    get: function get() {
	      return this.tokens[this.position];
	    }
	  }, {
	    key: "nextToken",
	    get: function get() {
	      return this.tokens[this.position + 1];
	    }
	  }, {
	    key: "prevToken",
	    get: function get() {
	      return this.tokens[this.position - 1];
	    }
	  }]);

	  return Parser;
	}();

	exports["default"] = Parser;
	module.exports = exports.default;
} (parser, parser.exports));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _parser = _interopRequireDefault(parser.exports);

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	var Processor = /*#__PURE__*/function () {
	  function Processor(func, options) {
	    this.func = func || function noop() {};

	    this.funcRes = null;
	    this.options = options;
	  }

	  var _proto = Processor.prototype;

	  _proto._shouldUpdateSelector = function _shouldUpdateSelector(rule, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var merged = Object.assign({}, this.options, options);

	    if (merged.updateSelector === false) {
	      return false;
	    } else {
	      return typeof rule !== "string";
	    }
	  };

	  _proto._isLossy = function _isLossy(options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var merged = Object.assign({}, this.options, options);

	    if (merged.lossless === false) {
	      return true;
	    } else {
	      return false;
	    }
	  };

	  _proto._root = function _root(rule, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var parser = new _parser["default"](rule, this._parseOptions(options));
	    return parser.root;
	  };

	  _proto._parseOptions = function _parseOptions(options) {
	    return {
	      lossy: this._isLossy(options)
	    };
	  };

	  _proto._run = function _run(rule, options) {
	    var _this = this;

	    if (options === void 0) {
	      options = {};
	    }

	    return new Promise(function (resolve, reject) {
	      try {
	        var root = _this._root(rule, options);

	        Promise.resolve(_this.func(root)).then(function (transform) {
	          var string = undefined;

	          if (_this._shouldUpdateSelector(rule, options)) {
	            string = root.toString();
	            rule.selector = string;
	          }

	          return {
	            transform: transform,
	            root: root,
	            string: string
	          };
	        }).then(resolve, reject);
	      } catch (e) {
	        reject(e);
	        return;
	      }
	    });
	  };

	  _proto._runSync = function _runSync(rule, options) {
	    if (options === void 0) {
	      options = {};
	    }

	    var root = this._root(rule, options);

	    var transform = this.func(root);

	    if (transform && typeof transform.then === "function") {
	      throw new Error("Selector processor returned a promise to a synchronous call.");
	    }

	    var string = undefined;

	    if (options.updateSelector && typeof rule !== "string") {
	      string = root.toString();
	      rule.selector = string;
	    }

	    return {
	      transform: transform,
	      root: root,
	      string: string
	    };
	  }
	  /**
	   * Process rule into a selector AST.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {Promise<parser.Root>} The AST of the selector after processing it.
	   */
	  ;

	  _proto.ast = function ast(rule, options) {
	    return this._run(rule, options).then(function (result) {
	      return result.root;
	    });
	  }
	  /**
	   * Process rule into a selector AST synchronously.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {parser.Root} The AST of the selector after processing it.
	   */
	  ;

	  _proto.astSync = function astSync(rule, options) {
	    return this._runSync(rule, options).root;
	  }
	  /**
	   * Process a selector into a transformed value asynchronously
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {Promise<any>} The value returned by the processor.
	   */
	  ;

	  _proto.transform = function transform(rule, options) {
	    return this._run(rule, options).then(function (result) {
	      return result.transform;
	    });
	  }
	  /**
	   * Process a selector into a transformed value synchronously.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {any} The value returned by the processor.
	   */
	  ;

	  _proto.transformSync = function transformSync(rule, options) {
	    return this._runSync(rule, options).transform;
	  }
	  /**
	   * Process a selector into a new selector string asynchronously.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {string} the selector after processing.
	   */
	  ;

	  _proto.process = function process(rule, options) {
	    return this._run(rule, options).then(function (result) {
	      return result.string || result.root.toString();
	    });
	  }
	  /**
	   * Process a selector into a new selector string synchronously.
	   *
	   * @param rule {postcss.Rule | string} The css selector to be processed
	   * @param options The options for processing
	   * @returns {string} the selector after processing.
	   */
	  ;

	  _proto.processSync = function processSync(rule, options) {
	    var result = this._runSync(rule, options);

	    return result.string || result.root.toString();
	  };

	  return Processor;
	}();

	exports["default"] = Processor;
	module.exports = exports.default;
} (processor, processor.exports));

var selectors = {};

var constructors = {};

constructors.__esModule = true;
constructors.universal = constructors.tag = constructors.string = constructors.selector = constructors.root = constructors.pseudo = constructors.nesting = constructors.id = constructors.comment = constructors.combinator = constructors.className = constructors.attribute = void 0;

var _attribute = _interopRequireDefault(attribute$1);

var _className = _interopRequireDefault(className$1.exports);

var _combinator = _interopRequireDefault(combinator$2.exports);

var _comment = _interopRequireDefault(comment$2.exports);

var _id = _interopRequireDefault(id$1.exports);

var _nesting = _interopRequireDefault(nesting$1.exports);

var _pseudo = _interopRequireDefault(pseudo$1.exports);

var _root = _interopRequireDefault(root$1.exports);

var _selector = _interopRequireDefault(selector$1.exports);

var _string = _interopRequireDefault(string$1.exports);

var _tag = _interopRequireDefault(tag$1.exports);

var _universal = _interopRequireDefault(universal$1.exports);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

var attribute = function attribute(opts) {
  return new _attribute["default"](opts);
};

constructors.attribute = attribute;

var className = function className(opts) {
  return new _className["default"](opts);
};

constructors.className = className;

var combinator = function combinator(opts) {
  return new _combinator["default"](opts);
};

constructors.combinator = combinator;

var comment = function comment(opts) {
  return new _comment["default"](opts);
};

constructors.comment = comment;

var id = function id(opts) {
  return new _id["default"](opts);
};

constructors.id = id;

var nesting = function nesting(opts) {
  return new _nesting["default"](opts);
};

constructors.nesting = nesting;

var pseudo = function pseudo(opts) {
  return new _pseudo["default"](opts);
};

constructors.pseudo = pseudo;

var root = function root(opts) {
  return new _root["default"](opts);
};

constructors.root = root;

var selector = function selector(opts) {
  return new _selector["default"](opts);
};

constructors.selector = selector;

var string = function string(opts) {
  return new _string["default"](opts);
};

constructors.string = string;

var tag = function tag(opts) {
  return new _tag["default"](opts);
};

constructors.tag = tag;

var universal = function universal(opts) {
  return new _universal["default"](opts);
};

constructors.universal = universal;

var guards = {};

guards.__esModule = true;
guards.isNode = isNode;
guards.isPseudoElement = isPseudoElement;
guards.isPseudoClass = isPseudoClass;
guards.isContainer = isContainer;
guards.isNamespace = isNamespace;
guards.isUniversal = guards.isTag = guards.isString = guards.isSelector = guards.isRoot = guards.isPseudo = guards.isNesting = guards.isIdentifier = guards.isComment = guards.isCombinator = guards.isClassName = guards.isAttribute = void 0;

var _types = types;

var _IS_TYPE;

var IS_TYPE = (_IS_TYPE = {}, _IS_TYPE[_types.ATTRIBUTE] = true, _IS_TYPE[_types.CLASS] = true, _IS_TYPE[_types.COMBINATOR] = true, _IS_TYPE[_types.COMMENT] = true, _IS_TYPE[_types.ID] = true, _IS_TYPE[_types.NESTING] = true, _IS_TYPE[_types.PSEUDO] = true, _IS_TYPE[_types.ROOT] = true, _IS_TYPE[_types.SELECTOR] = true, _IS_TYPE[_types.STRING] = true, _IS_TYPE[_types.TAG] = true, _IS_TYPE[_types.UNIVERSAL] = true, _IS_TYPE);

function isNode(node) {
  return typeof node === "object" && IS_TYPE[node.type];
}

function isNodeType(type, node) {
  return isNode(node) && node.type === type;
}

var isAttribute = isNodeType.bind(null, _types.ATTRIBUTE);
guards.isAttribute = isAttribute;
var isClassName = isNodeType.bind(null, _types.CLASS);
guards.isClassName = isClassName;
var isCombinator = isNodeType.bind(null, _types.COMBINATOR);
guards.isCombinator = isCombinator;
var isComment = isNodeType.bind(null, _types.COMMENT);
guards.isComment = isComment;
var isIdentifier = isNodeType.bind(null, _types.ID);
guards.isIdentifier = isIdentifier;
var isNesting = isNodeType.bind(null, _types.NESTING);
guards.isNesting = isNesting;
var isPseudo = isNodeType.bind(null, _types.PSEUDO);
guards.isPseudo = isPseudo;
var isRoot = isNodeType.bind(null, _types.ROOT);
guards.isRoot = isRoot;
var isSelector = isNodeType.bind(null, _types.SELECTOR);
guards.isSelector = isSelector;
var isString = isNodeType.bind(null, _types.STRING);
guards.isString = isString;
var isTag = isNodeType.bind(null, _types.TAG);
guards.isTag = isTag;
var isUniversal = isNodeType.bind(null, _types.UNIVERSAL);
guards.isUniversal = isUniversal;

function isPseudoElement(node) {
  return isPseudo(node) && node.value && (node.value.startsWith("::") || node.value.toLowerCase() === ":before" || node.value.toLowerCase() === ":after" || node.value.toLowerCase() === ":first-letter" || node.value.toLowerCase() === ":first-line");
}

function isPseudoClass(node) {
  return isPseudo(node) && !isPseudoElement(node);
}

function isContainer(node) {
  return !!(isNode(node) && node.walk);
}

function isNamespace(node) {
  return isAttribute(node) || isTag(node);
}

(function (exports) {

	exports.__esModule = true;

	var _types = types;

	Object.keys(_types).forEach(function (key) {
	  if (key === "default" || key === "__esModule") return;
	  if (key in exports && exports[key] === _types[key]) return;
	  exports[key] = _types[key];
	});

	var _constructors = constructors;

	Object.keys(_constructors).forEach(function (key) {
	  if (key === "default" || key === "__esModule") return;
	  if (key in exports && exports[key] === _constructors[key]) return;
	  exports[key] = _constructors[key];
	});

	var _guards = guards;

	Object.keys(_guards).forEach(function (key) {
	  if (key === "default" || key === "__esModule") return;
	  if (key in exports && exports[key] === _guards[key]) return;
	  exports[key] = _guards[key];
	});
} (selectors));

(function (module, exports) {

	exports.__esModule = true;
	exports["default"] = void 0;

	var _processor = _interopRequireDefault(processor.exports);

	var selectors$1 = _interopRequireWildcard(selectors);

	function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }

	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

	var parser = function parser(processor) {
	  return new _processor["default"](processor);
	};

	Object.assign(parser, selectors$1);
	delete parser.__esModule;
	var _default = parser;
	exports["default"] = _default;
	module.exports = exports.default;
} (dist, dist.exports));

var selectorParser = /*@__PURE__*/getDefaultExportFromCjs(dist.exports);

const animationNameRE = /^(-\w+-)?animation-name$/;
const animationRE = /^(-\w+-)?animation$/;
const scopedPlugin = (id = '') => {
    const keyframes = Object.create(null);
    const shortId = id.replace(/^data-v-/, '');
    return {
        postcssPlugin: 'vue-sfc-scoped',
        Rule(rule) {
            processRule(id, rule);
        },
        AtRule(node) {
            if (/-?keyframes$/.test(node.name) &&
                !node.params.endsWith(`-${shortId}`)) {
                // register keyframes
                keyframes[node.params] = node.params = node.params + '-' + shortId;
            }
        },
        OnceExit(root) {
            if (Object.keys(keyframes).length) {
                // If keyframes are found in this <style>, find and rewrite animation names
                // in declarations.
                // Caveat: this only works for keyframes and animation rules in the same
                // <style> element.
                // individual animation-name declaration
                root.walkDecls(decl => {
                    if (animationNameRE.test(decl.prop)) {
                        decl.value = decl.value
                            .split(',')
                            .map(v => keyframes[v.trim()] || v.trim())
                            .join(',');
                    }
                    // shorthand
                    if (animationRE.test(decl.prop)) {
                        decl.value = decl.value
                            .split(',')
                            .map(v => {
                            const vals = v.trim().split(/\s+/);
                            const i = vals.findIndex(val => keyframes[val]);
                            if (i !== -1) {
                                vals.splice(i, 1, keyframes[vals[i]]);
                                return vals.join(' ');
                            }
                            else {
                                return v;
                            }
                        })
                            .join(',');
                    }
                });
            }
        }
    };
};
const processedRules = new WeakSet();
function processRule(id, rule) {
    if (processedRules.has(rule) ||
        (rule.parent &&
            rule.parent.type === 'atrule' &&
            /-?keyframes$/.test(rule.parent.name))) {
        return;
    }
    processedRules.add(rule);
    rule.selector = selectorParser(selectorRoot => {
        selectorRoot.each(selector => {
            rewriteSelector(id, selector, selectorRoot);
        });
    }).processSync(rule.selector);
}
function rewriteSelector(id, selector, selectorRoot) {
    let node = null;
    // find the last child node to insert attribute selector
    selector.each(n => {
        // DEPRECATED ">>>" and "/deep/" combinator
        if (n.type === 'combinator' &&
            (n.value === '>>>' || n.value === '/deep/')) {
            n.value = ' ';
            n.spaces.before = n.spaces.after = '';
            // warn(
            //   `the >>> and /deep/ combinators have been deprecated. ` +
            //     `Use :deep() instead.`
            // )
            return false;
        }
        if (n.type === 'pseudo') {
            const { value } = n;
            // deep: inject [id] attribute at the node before the ::v-deep
            // combinator.
            if (value === ':deep' || value === '::v-deep') {
                if (n.nodes.length) {
                    // .foo ::v-deep(.bar) -> .foo[xxxxxxx] .bar
                    // replace the current node with ::v-deep's inner selector
                    let last = n;
                    n.nodes[0].each(ss => {
                        selector.insertAfter(last, ss);
                        last = ss;
                    });
                    // insert a space combinator before if it doesn't already have one
                    const prev = selector.at(selector.index(n) - 1);
                    if (!prev || !isSpaceCombinator(prev)) {
                        selector.insertAfter(n, selectorParser.combinator({
                            value: ' '
                        }));
                    }
                    selector.removeChild(n);
                }
                else {
                    // DEPRECATED usage in v3
                    // .foo ::v-deep .bar -> .foo[xxxxxxx] .bar
                    // warn(
                    //   `::v-deep usage as a combinator has ` +
                    //     `been deprecated. Use :deep(<inner-selector>) instead.`
                    // )
                    const prev = selector.at(selector.index(n) - 1);
                    if (prev && isSpaceCombinator(prev)) {
                        selector.removeChild(prev);
                    }
                    selector.removeChild(n);
                }
                return false;
            }
            // !!! Vue 2 does not have :slotted support
            // ::v-slotted(.foo) -> .foo[xxxxxxx-s]
            // if (value === ':slotted' || value === '::v-slotted') {
            //   rewriteSelector(id, n.nodes[0], selectorRoot, true /* slotted */)
            //   let last: selectorParser.Selector['nodes'][0] = n
            //   n.nodes[0].each(ss => {
            //     selector.insertAfter(last, ss)
            //     last = ss
            //   })
            //   // selector.insertAfter(n, n.nodes[0])
            //   selector.removeChild(n)
            //   // since slotted attribute already scopes the selector there's no
            //   // need for the non-slot attribute.
            //   shouldInject = false
            //   return false
            // }
            // global: replace with inner selector and do not inject [id].
            // ::v-global(.foo) -> .foo
            if (value === ':global' || value === '::v-global') {
                selectorRoot.insertAfter(selector, n.nodes[0]);
                selectorRoot.removeChild(selector);
                return false;
            }
        }
        if (n.type !== 'pseudo' && n.type !== 'combinator') {
            node = n;
        }
    });
    if (node) {
        node.spaces.after = '';
    }
    else {
        // For deep selectors & standalone pseudo selectors,
        // the attribute selectors are prepended rather than appended.
        // So all leading spaces must be eliminated to avoid problems.
        selector.first.spaces.before = '';
    }
    {
        selector.insertAfter(
        // If node is null it means we need to inject [id] at the start
        // insertAfter can handle `null` here
        node, selectorParser.attribute({
            attribute: id,
            value: id,
            raws: {},
            quoteMark: `"`
        }));
    }
}
function isSpaceCombinator(node) {
    return node.type === 'combinator' && /^\s+$/.test(node.value);
}
scopedPlugin.postcss = true;

var sourceMap = require$$0__default$1["default"];
var SourceMapConsumer = sourceMap.SourceMapConsumer;
var SourceMapGenerator = sourceMap.SourceMapGenerator;

var mergeSourceMap = merge;

/**
 * Merge old source map and new source map and return merged.
 * If old or new source map value is falsy, return another one as it is.
 *
 * @param {object|string} [oldMap] old source map object
 * @param {object|string} [newmap] new source map object
 * @return {object|undefined} merged source map object, or undefined when both old and new source map are undefined
 */
function merge(oldMap, newMap) {
  if (!oldMap) return newMap
  if (!newMap) return oldMap

  var oldMapConsumer = new SourceMapConsumer(oldMap);
  var newMapConsumer = new SourceMapConsumer(newMap);
  var mergedMapGenerator = new SourceMapGenerator();

  // iterate on new map and overwrite original position of new map with one of old map
  newMapConsumer.eachMapping(function(m) {
    // pass when `originalLine` is null.
    // It occurs in case that the node does not have origin in original code.
    if (m.originalLine == null) return

    var origPosInOldMap = oldMapConsumer.originalPositionFor({
      line: m.originalLine,
      column: m.originalColumn
    });

    if (origPosInOldMap.source == null) return

    mergedMapGenerator.addMapping({
      original: {
        line: origPosInOldMap.line,
        column: origPosInOldMap.column
      },
      generated: {
        line: m.generatedLine,
        column: m.generatedColumn
      },
      source: origPosInOldMap.source,
      name: origPosInOldMap.name
    });
  });

  var consumers = [oldMapConsumer, newMapConsumer];
  consumers.forEach(function(consumer) {
    consumer.sources.forEach(function(sourceFile) {
      mergedMapGenerator._sources.add(sourceFile);
      var sourceContent = consumer.sourceContentFor(sourceFile);
      if (sourceContent != null) {
        mergedMapGenerator.setSourceContent(sourceFile, sourceContent);
      }
    });
  });

  mergedMapGenerator._sourceRoot = oldMap.sourceRoot;
  mergedMapGenerator._file = oldMap.file;

  return JSON.parse(mergedMapGenerator.toString())
}

// .scss/.sass processor
const scss = (source, map, options) => {
    const nodeSass = require('sass');
    const finalOptions = Object.assign(Object.assign({}, options), { data: getSource(source, options.filename, options.additionalData), file: options.filename, outFile: options.filename, sourceMap: !!map });
    try {
        const result = nodeSass.renderSync(finalOptions);
        const dependencies = result.stats.includedFiles;
        if (map) {
            return {
                code: result.css.toString(),
                map: mergeSourceMap(map, JSON.parse(result.map.toString())),
                errors: [],
                dependencies
            };
        }
        return { code: result.css.toString(), errors: [], dependencies };
    }
    catch (e) {
        return { code: '', errors: [e], dependencies: [] };
    }
};
const sass = (source, map, options) => scss(source, map, Object.assign(Object.assign({}, options), { indentedSyntax: true }));
// .less
const less = (source, map, options) => {
    const nodeLess = require('less');
    let result;
    let error = null;
    nodeLess.render(getSource(source, options.filename, options.additionalData), Object.assign(Object.assign({}, options), { syncImport: true }), (err, output) => {
        error = err;
        result = output;
    });
    if (error)
        return { code: '', errors: [error], dependencies: [] };
    const dependencies = result.imports;
    if (map) {
        return {
            code: result.css.toString(),
            map: mergeSourceMap(map, result.map),
            errors: [],
            dependencies: dependencies
        };
    }
    return {
        code: result.css.toString(),
        errors: [],
        dependencies: dependencies
    };
};
// .styl
const styl = (source, map, options) => {
    const nodeStylus = require('stylus');
    try {
        const ref = nodeStylus(source);
        Object.keys(options).forEach(key => ref.set(key, options[key]));
        if (map)
            ref.set('sourcemap', { inline: false, comment: false });
        const result = ref.render();
        const dependencies = ref.deps();
        if (map) {
            return {
                code: result,
                map: mergeSourceMap(map, ref.sourcemap),
                errors: [],
                dependencies
            };
        }
        return { code: result, errors: [], dependencies };
    }
    catch (e) {
        return { code: '', errors: [e], dependencies: [] };
    }
};
function getSource(source, filename, additionalData) {
    if (!additionalData)
        return source;
    if (isFunction(additionalData)) {
        return additionalData(source, filename);
    }
    return additionalData + source;
}
const processors = {
    less,
    sass,
    scss,
    styl,
    stylus: styl
};

const postcss = require('postcss');
function compileStyle(options) {
    return doCompileStyle(Object.assign(Object.assign({}, options), { isAsync: false }));
}
function compileStyleAsync(options) {
    return Promise.resolve(doCompileStyle(Object.assign(Object.assign({}, options), { isAsync: true })));
}
function doCompileStyle(options) {
    const { filename, id, scoped = true, trim = true, isProd = false, preprocessLang, postcssOptions, postcssPlugins } = options;
    const preprocessor = preprocessLang && processors[preprocessLang];
    const preProcessedSource = preprocessor && preprocess(options, preprocessor);
    const map = preProcessedSource ? preProcessedSource.map : options.map;
    const source = preProcessedSource ? preProcessedSource.code : options.source;
    const plugins = (postcssPlugins || []).slice();
    plugins.unshift(cssVarsPlugin({ id: id.replace(/^data-v-/, ''), isProd }));
    if (trim) {
        plugins.push(trimPlugin());
    }
    if (scoped) {
        plugins.push(scopedPlugin(id));
    }
    const postCSSOptions = Object.assign(Object.assign({}, postcssOptions), { to: filename, from: filename });
    if (map) {
        postCSSOptions.map = {
            inline: false,
            annotation: false,
            prev: map
        };
    }
    let result, code, outMap;
    const errors = [];
    if (preProcessedSource && preProcessedSource.errors.length) {
        errors.push(...preProcessedSource.errors);
    }
    try {
        result = postcss(plugins).process(source, postCSSOptions);
        // In async mode, return a promise.
        if (options.isAsync) {
            return result
                .then((result) => ({
                code: result.css || '',
                map: result.map && result.map.toJSON(),
                errors,
                rawResult: result
            }))
                .catch((error) => ({
                code: '',
                map: undefined,
                errors: [...errors, error.message],
                rawResult: undefined
            }));
        }
        // force synchronous transform (we know we only have sync plugins)
        code = result.css;
        outMap = result.map;
    }
    catch (e) {
        errors.push(e);
    }
    return {
        code: code || ``,
        map: outMap && outMap.toJSON(),
        errors,
        rawResult: result
    };
}
function preprocess(options, preprocessor) {
    return preprocessor(options.source, options.map, Object.assign({
        filename: options.filename
    }, options.preprocessOptions));
}

exports.compileScript = compileScript;
exports.compileStyle = compileStyle;
exports.compileStyleAsync = compileStyleAsync;
exports.compileTemplate = compileTemplate;
exports.generateCodeFrame = generateCodeFrame;
exports.parse = parse;
exports.parseComponent = parseComponent;
exports.rewriteDefault = rewriteDefault;
{
  "name": "@vue/compiler-sfc",
  "version": "2.7.14",
  "description": "compiler-sfc for Vue 2",
  "main": "dist/compiler-sfc.js",
  "types": "dist/compiler-sfc.d.ts",
  "files": [
    "dist"
  ],
  "dependencies": {
    "@babel/parser": "^7.18.4",
    "postcss": "^8.4.14",
    "source-map": "^0.6.1"
  },
  "devDependencies": {
    "@babel/types": "^7.19.4",
    "@types/estree": "^0.0.48",
    "@types/hash-sum": "^1.0.0",
    "@types/lru-cache": "^5.1.1",
    "@vue/consolidate": "^0.17.3",
    "de-indent": "^1.0.2",
    "estree-walker": "^2.0.2",
    "hash-sum": "^2.0.0",
    "less": "^4.1.3",
    "lru-cache": "^5.1.1",
    "magic-string": "^0.25.9",
    "merge-source-map": "^1.1.0",
    "postcss-modules": "^4.3.1",
    "postcss-selector-parser": "^6.0.10",
    "pug": "^3.0.2",
    "sass": "^1.52.3",
    "stylus": "^0.58.1"
  }
}
// https://github.com/vuejs/core/blob/main/packages/compiler-core/src/babelUtils.ts

// should only use types from @babel/types
// do not import runtime methods
import type {
  Identifier,
  Node,
  Function,
  ObjectProperty,
  BlockStatement,
  Program
} from '@babel/types'
import { walk } from 'estree-walker'

export function walkIdentifiers(
  root: Node,
  onIdentifier: (
    node: Identifier,
    parent: Node,
    parentStack: Node[],
    isReference: boolean,
    isLocal: boolean
  ) => void,
  onNode?: (node: Node) => void
) {
  const includeAll = false
  const parentStack: Node[] = []
  const knownIds: Record<string, number> = Object.create(null)

  const rootExp =
    root.type === 'Program' &&
    root.body[0].type === 'ExpressionStatement' &&
    root.body[0].expression

  ;(walk as any)(root, {
    enter(node: Node & { scopeIds?: Set<string> }, parent: Node | undefined) {
      parent && parentStack.push(parent)
      if (
        parent &&
        parent.type.startsWith('TS') &&
        parent.type !== 'TSAsExpression' &&
        parent.type !== 'TSNonNullExpression' &&
        parent.type !== 'TSTypeAssertion'
      ) {
        return this.skip()
      }

      if (onNode) onNode(node)

      if (node.type === 'Identifier') {
        const isLocal = !!knownIds[node.name]
        const isRefed = isReferencedIdentifier(node, parent!, parentStack)
        if (includeAll || (isRefed && !isLocal)) {
          onIdentifier(node, parent!, parentStack, isRefed, isLocal)
        }
      } else if (
        node.type === 'ObjectProperty' &&
        parent!.type === 'ObjectPattern'
      ) {
        // mark property in destructure pattern
        ;(node as any).inPattern = true
      } else if (isFunctionType(node)) {
        // walk function expressions and add its arguments to known identifiers
        // so that we don't prefix them
        walkFunctionParams(node, id => markScopeIdentifier(node, id, knownIds))
      } else if (node.type === 'BlockStatement') {
        // #3445 record block-level local variables
        walkBlockDeclarations(node, id =>
          markScopeIdentifier(node, id, knownIds)
        )
      }
    },
    leave(node: Node & { scopeIds?: Set<string> }, parent: Node | undefined) {
      parent && parentStack.pop()
      if (node !== rootExp && node.scopeIds) {
        for (const id of node.scopeIds) {
          knownIds[id]--
          if (knownIds[id] === 0) {
            delete knownIds[id]
          }
        }
      }
    }
  })
}

export function isReferencedIdentifier(
  id: Identifier,
  parent: Node | null,
  parentStack: Node[]
) {
  if (!parent) {
    return true
  }

  // is a special keyword but parsed as identifier
  if (id.name === 'arguments') {
    return false
  }

  if (isReferenced(id, parent)) {
    return true
  }

  // babel's isReferenced check returns false for ids being assigned to, so we
  // need to cover those cases here
  switch (parent.type) {
    case 'AssignmentExpression':
    case 'AssignmentPattern':
      return true
    case 'ObjectPattern':
    case 'ArrayPattern':
      return isInDestructureAssignment(parent, parentStack)
  }

  return false
}

export function isInDestructureAssignment(
  parent: Node,
  parentStack: Node[]
): boolean {
  if (
    parent &&
    (parent.type === 'ObjectProperty' || parent.type === 'ArrayPattern')
  ) {
    let i = parentStack.length
    while (i--) {
      const p = parentStack[i]
      if (p.type === 'AssignmentExpression') {
        return true
      } else if (p.type !== 'ObjectProperty' && !p.type.endsWith('Pattern')) {
        break
      }
    }
  }
  return false
}

export function walkFunctionParams(
  node: Function,
  onIdent: (id: Identifier) => void
) {
  for (const p of node.params) {
    for (const id of extractIdentifiers(p)) {
      onIdent(id)
    }
  }
}

export function walkBlockDeclarations(
  block: BlockStatement | Program,
  onIdent: (node: Identifier) => void
) {
  for (const stmt of block.body) {
    if (stmt.type === 'VariableDeclaration') {
      if (stmt.declare) continue
      for (const decl of stmt.declarations) {
        for (const id of extractIdentifiers(decl.id)) {
          onIdent(id)
        }
      }
    } else if (
      stmt.type === 'FunctionDeclaration' ||
      stmt.type === 'ClassDeclaration'
    ) {
      if (stmt.declare || !stmt.id) continue
      onIdent(stmt.id)
    }
  }
}

export function extractIdentifiers(
  param: Node,
  nodes: Identifier[] = []
): Identifier[] {
  switch (param.type) {
    case 'Identifier':
      nodes.push(param)
      break

    case 'MemberExpression':
      let object: any = param
      while (object.type === 'MemberExpression') {
        object = object.object
      }
      nodes.push(object)
      break

    case 'ObjectPattern':
      for (const prop of param.properties) {
        if (prop.type === 'RestElement') {
          extractIdentifiers(prop.argument, nodes)
        } else {
          extractIdentifiers(prop.value, nodes)
        }
      }
      break

    case 'ArrayPattern':
      param.elements.forEach(element => {
        if (element) extractIdentifiers(element, nodes)
      })
      break

    case 'RestElement':
      extractIdentifiers(param.argument, nodes)
      break

    case 'AssignmentPattern':
      extractIdentifiers(param.left, nodes)
      break
  }

  return nodes
}

function markScopeIdentifier(
  node: Node & { scopeIds?: Set<string> },
  child: Identifier,
  knownIds: Record<string, number>
) {
  const { name } = child
  if (node.scopeIds && node.scopeIds.has(name)) {
    return
  }
  if (name in knownIds) {
    knownIds[name]++
  } else {
    knownIds[name] = 1
  }
  ;(node.scopeIds || (node.scopeIds = new Set())).add(name)
}

export const isFunctionType = (node: Node): node is Function => {
  return /Function(?:Expression|Declaration)$|Method$/.test(node.type)
}

export const isStaticProperty = (node: Node): node is ObjectProperty =>
  node &&
  (node.type === 'ObjectProperty' || node.type === 'ObjectMethod') &&
  !node.computed

export const isStaticPropertyKey = (node: Node, parent: Node) =>
  isStaticProperty(parent) && parent.key === node

/**
 * Copied from https://github.com/babel/babel/blob/main/packages/babel-types/src/validators/isReferenced.ts
 * To avoid runtime dependency on @babel/types (which includes process references)
 * This file should not change very often in babel but we may need to keep it
 * up-to-date from time to time.
 *
 * https://github.com/babel/babel/blob/main/LICENSE
 *
 */
function isReferenced(node: Node, parent: Node, grandparent?: Node): boolean {
  switch (parent.type) {
    // yes: PARENT[NODE]
    // yes: NODE.child
    // no: parent.NODE
    case 'MemberExpression':
    case 'OptionalMemberExpression':
      if (parent.property === node) {
        return !!parent.computed
      }
      return parent.object === node

    case 'JSXMemberExpression':
      return parent.object === node
    // no: let NODE = init;
    // yes: let id = NODE;
    case 'VariableDeclarator':
      return parent.init === node

    // yes: () => NODE
    // no: (NODE) => {}
    case 'ArrowFunctionExpression':
      return parent.body === node

    // no: class { #NODE; }
    // no: class { get #NODE() {} }
    // no: class { #NODE() {} }
    // no: class { fn() { return this.#NODE; } }
    case 'PrivateName':
      return false

    // no: class { NODE() {} }
    // yes: class { [NODE]() {} }
    // no: class { foo(NODE) {} }
    case 'ClassMethod':
    case 'ClassPrivateMethod':
    case 'ObjectMethod':
      if (parent.key === node) {
        return !!parent.computed
      }
      return false

    // yes: { [NODE]: "" }
    // no: { NODE: "" }
    // depends: { NODE }
    // depends: { key: NODE }
    case 'ObjectProperty':
      if (parent.key === node) {
        return !!parent.computed
      }
      // parent.value === node
      return !grandparent || grandparent.type !== 'ObjectPattern'
    // no: class { NODE = value; }
    // yes: class { [NODE] = value; }
    // yes: class { key = NODE; }
    case 'ClassProperty':
      if (parent.key === node) {
        return !!parent.computed
      }
      return true
    case 'ClassPrivateProperty':
      return parent.key !== node

    // no: class NODE {}
    // yes: class Foo extends NODE {}
    case 'ClassDeclaration':
    case 'ClassExpression':
      return parent.superClass === node

    // yes: left = NODE;
    // no: NODE = right;
    case 'AssignmentExpression':
      return parent.right === node

    // no: [NODE = foo] = [];
    // yes: [foo = NODE] = [];
    case 'AssignmentPattern':
      return parent.right === node

    // no: NODE: for (;;) {}
    case 'LabeledStatement':
      return false

    // no: try {} catch (NODE) {}
    case 'CatchClause':
      return false

    // no: function foo(...NODE) {}
    case 'RestElement':
      return false

    case 'BreakStatement':
    case 'ContinueStatement':
      return false

    // no: function NODE() {}
    // no: function foo(NODE) {}
    case 'FunctionDeclaration':
    case 'FunctionExpression':
      return false

    // no: export NODE from "foo";
    // no: export * as NODE from "foo";
    case 'ExportNamespaceSpecifier':
    case 'ExportDefaultSpecifier':
      return false

    // no: export { foo as NODE };
    // yes: export { NODE as foo };
    // no: export { NODE as foo } from "foo";
    case 'ExportSpecifier':
      // @ts-expect-error
      if (grandparent?.source) {
        return false
      }
      return parent.local === node

    // no: import NODE from "foo";
    // no: import * as NODE from "foo";
    // no: import { NODE as foo } from "foo";
    // no: import { foo as NODE } from "foo";
    // no: import NODE from "bar";
    case 'ImportDefaultSpecifier':
    case 'ImportNamespaceSpecifier':
    case 'ImportSpecifier':
      return false

    // no: import "foo" assert { NODE: "json" }
    case 'ImportAttribute':
      return false

    // no: <div NODE="foo" />
    case 'JSXAttribute':
      return false

    // no: [NODE] = [];
    // no: ({ NODE }) = [];
    case 'ObjectPattern':
    case 'ArrayPattern':
      return false

    // no: new.NODE
    // no: NODE.target
    case 'MetaProperty':
      return false

    // yes: type X = { someProperty: NODE }
    // no: type X = { NODE: OtherType }
    case 'ObjectTypeProperty':
      return parent.key !== node

    // yes: enum X { Foo = NODE }
    // no: enum X { NODE }
    case 'TSEnumMember':
      return parent.id !== node

    // yes: { [NODE]: value }
    // no: { NODE: value }
    case 'TSPropertySignature':
      if (parent.key === node) {
        return !!parent.computed
      }

      return true
  }

  return true
}
import MagicString from 'magic-string'
import LRU from 'lru-cache'
import { walkIdentifiers, isFunctionType } from './babelUtils'
import { BindingMetadata, BindingTypes } from './types'
import { SFCDescriptor, SFCScriptBlock } from './parseComponent'
import {
  parse as _parse,
  parseExpression,
  ParserOptions,
  ParserPlugin
} from '@babel/parser'
import { generateCodeFrame } from 'compiler/codeframe'
import { camelize, capitalize, isBuiltInTag, makeMap } from 'shared/util'
import { parseHTML } from 'compiler/parser/html-parser'
import { baseOptions as webCompilerOptions } from 'web/compiler/options'
import {
  Node,
  Declaration,
  ObjectPattern,
  ObjectExpression,
  ArrayPattern,
  Identifier,
  ExportSpecifier,
  TSType,
  TSTypeLiteral,
  TSFunctionType,
  ObjectProperty,
  ArrayExpression,
  Statement,
  CallExpression,
  RestElement,
  TSInterfaceBody,
  Program,
  ObjectMethod,
  LVal,
  Expression
} from '@babel/types'
import { walk } from 'estree-walker'
import { RawSourceMap } from 'source-map'
import { warnOnce } from './warn'
import { isReservedTag } from 'web/util'
import { bindRE, dirRE, onRE, slotRE } from 'compiler/parser'
import { parseText } from 'compiler/parser/text-parser'
import { DEFAULT_FILENAME } from './parseComponent'
import {
  CSS_VARS_HELPER,
  genCssVarsCode,
  genNormalScriptCssVarsCode
} from './cssVars'
import { rewriteDefault } from './rewriteDefault'

// Special compiler macros
const DEFINE_PROPS = 'defineProps'
const DEFINE_EMITS = 'defineEmits'
const DEFINE_EXPOSE = 'defineExpose'
const WITH_DEFAULTS = 'withDefaults'

// constants
const DEFAULT_VAR = `__default__`

const isBuiltInDir = makeMap(
  `once,memo,if,for,else,else-if,slot,text,html,on,bind,model,show,cloak,is`
)

export interface SFCScriptCompileOptions {
  /**
   * Scope ID for prefixing injected CSS variables.
   * This must be consistent with the `id` passed to `compileStyle`.
   */
  id: string
  /**
   * Production mode. Used to determine whether to generate hashed CSS variables
   */
  isProd?: boolean
  /**
   * Enable/disable source map. Defaults to true.
   */
  sourceMap?: boolean
  /**
   * https://babeljs.io/docs/en/babel-parser#plugins
   */
  babelParserPlugins?: ParserPlugin[]
}

export interface ImportBinding {
  isType: boolean
  imported: string
  source: string
  isFromSetup: boolean
  isUsedInTemplate: boolean
}

/**
 * Compile `<script setup>`
 * It requires the whole SFC descriptor because we need to handle and merge
 * normal `<script>` + `<script setup>` if both are present.
 */
export function compileScript(
  sfc: SFCDescriptor,
  options: SFCScriptCompileOptions = { id: '' }
): SFCScriptBlock {
  let { filename, script, scriptSetup, source } = sfc
  const isProd = !!options.isProd
  const genSourceMap = options.sourceMap !== false
  let refBindings: string[] | undefined

  const cssVars = sfc.cssVars
  const scopeId = options.id ? options.id.replace(/^data-v-/, '') : ''
  const scriptLang = script && script.lang
  const scriptSetupLang = scriptSetup && scriptSetup.lang
  const isTS =
    scriptLang === 'ts' ||
    scriptLang === 'tsx' ||
    scriptSetupLang === 'ts' ||
    scriptSetupLang === 'tsx'

  // resolve parser plugins
  const plugins: ParserPlugin[] = []
  if (!isTS || scriptLang === 'tsx' || scriptSetupLang === 'tsx') {
    plugins.push('jsx')
  } else {
    // If don't match the case of adding jsx, should remove the jsx from the babelParserPlugins
    if (options.babelParserPlugins)
      options.babelParserPlugins = options.babelParserPlugins.filter(
        n => n !== 'jsx'
      )
  }
  if (options.babelParserPlugins) plugins.push(...options.babelParserPlugins)
  if (isTS) {
    plugins.push('typescript')
    if (!plugins.includes('decorators')) {
      plugins.push('decorators-legacy')
    }
  }

  if (!scriptSetup) {
    if (!script) {
      throw new Error(`[@vue/compiler-sfc] SFC contains no <script> tags.`)
    }
    if (scriptLang && !isTS && scriptLang !== 'jsx') {
      // do not process non js/ts script blocks
      return script
    }
    try {
      let content = script.content
      let map = script.map
      const scriptAst = _parse(content, {
        plugins,
        sourceType: 'module'
      }).program
      const bindings = analyzeScriptBindings(scriptAst.body)
      if (cssVars.length) {
        content = rewriteDefault(content, DEFAULT_VAR, plugins)
        content += genNormalScriptCssVarsCode(
          cssVars,
          bindings,
          scopeId,
          isProd
        )
        content += `\nexport default ${DEFAULT_VAR}`
      }
      return {
        ...script,
        content,
        map,
        bindings,
        scriptAst: scriptAst.body
      }
    } catch (e: any) {
      // silently fallback if parse fails since user may be using custom
      // babel syntax
      return script
    }
  }

  if (script && scriptLang !== scriptSetupLang) {
    throw new Error(
      `[@vue/compiler-sfc] <script> and <script setup> must have the same ` +
        `language type.`
    )
  }

  if (scriptSetupLang && !isTS && scriptSetupLang !== 'jsx') {
    // do not process non js/ts script blocks
    return scriptSetup
  }

  // metadata that needs to be returned
  const bindingMetadata: BindingMetadata = {}
  const helperImports: Set<string> = new Set()
  const userImports: Record<string, ImportBinding> = Object.create(null)
  const userImportAlias: Record<string, string> = Object.create(null)
  const scriptBindings: Record<string, BindingTypes> = Object.create(null)
  const setupBindings: Record<string, BindingTypes> = Object.create(null)

  let defaultExport: Node | undefined
  let hasDefinePropsCall = false
  let hasDefineEmitCall = false
  let hasDefineExposeCall = false
  let hasDefaultExportName = false
  let propsRuntimeDecl: Node | undefined
  let propsRuntimeDefaults: ObjectExpression | undefined
  let propsDestructureDecl: Node | undefined
  let propsDestructureRestId: string | undefined
  let propsTypeDecl: TSTypeLiteral | TSInterfaceBody | undefined
  let propsTypeDeclRaw: Node | undefined
  let propsIdentifier: string | undefined
  let emitsRuntimeDecl: Node | undefined
  let emitsTypeDecl:
    | TSFunctionType
    | TSTypeLiteral
    | TSInterfaceBody
    | undefined
  let emitsTypeDeclRaw: Node | undefined
  let emitIdentifier: string | undefined
  let hasInlinedSsrRenderFn = false
  // props/emits declared via types
  const typeDeclaredProps: Record<string, PropTypeData> = {}
  const typeDeclaredEmits: Set<string> = new Set()
  // record declared types for runtime props type generation
  const declaredTypes: Record<string, string[]> = {}
  // props destructure data
  const propsDestructuredBindings: Record<
    string, // public prop key
    {
      local: string // local identifier, may be different
      default?: Expression
    }
  > = Object.create(null)

  // magic-string state
  const s = new MagicString(source)
  const startOffset = scriptSetup.start
  const endOffset = scriptSetup.end
  const scriptStartOffset = script && script.start
  const scriptEndOffset = script && script.end

  function helper(key: string): string {
    helperImports.add(key)
    return `_${key}`
  }

  function parse(
    input: string,
    options: ParserOptions,
    offset: number
  ): Program {
    try {
      return _parse(input, options).program
    } catch (e: any) {
      e.message = `[@vue/compiler-sfc] ${
        e.message
      }\n\n${filename}\n${generateCodeFrame(
        source,
        e.pos + offset,
        e.pos + offset + 1
      )}`
      throw e
    }
  }

  function error(
    msg: string,
    node: Node,
    end: number = node.end! + startOffset
  ): never {
    throw new Error(
      `[@vue/compiler-sfc] ${msg}\n\n${filename}\n${generateCodeFrame(
        source,
        node.start! + startOffset,
        end
      )}`
    )
  }

  function registerUserImport(
    source: string,
    local: string,
    imported: string | false,
    isType: boolean,
    isFromSetup: boolean
  ) {
    if (source === 'vue' && imported) {
      userImportAlias[imported] = local
    }

    let isUsedInTemplate = true
    if (sfc.template && !sfc.template.src && !sfc.template.lang) {
      isUsedInTemplate = isImportUsed(local, sfc, isTS)
    }

    userImports[local] = {
      isType,
      imported: imported || 'default',
      source,
      isFromSetup,
      isUsedInTemplate
    }
  }

  function processDefineProps(node: Node, declId?: LVal): boolean {
    if (!isCallOf(node, DEFINE_PROPS)) {
      return false
    }

    if (hasDefinePropsCall) {
      error(`duplicate ${DEFINE_PROPS}() call`, node)
    }
    hasDefinePropsCall = true

    propsRuntimeDecl = node.arguments[0]

    // call has type parameters - infer runtime types from it
    if (node.typeParameters) {
      if (propsRuntimeDecl) {
        error(
          `${DEFINE_PROPS}() cannot accept both type and non-type arguments ` +
            `at the same time. Use one or the other.`,
          node
        )
      }

      propsTypeDeclRaw = node.typeParameters.params[0]
      propsTypeDecl = resolveQualifiedType(
        propsTypeDeclRaw,
        node => node.type === 'TSTypeLiteral'
      ) as TSTypeLiteral | TSInterfaceBody | undefined

      if (!propsTypeDecl) {
        error(
          `type argument passed to ${DEFINE_PROPS}() must be a literal type, ` +
            `or a reference to an interface or literal type.`,
          propsTypeDeclRaw
        )
      }
    }

    if (declId) {
      propsIdentifier = scriptSetup!.content.slice(declId.start!, declId.end!)
    }

    return true
  }

  function processWithDefaults(node: Node, declId?: LVal): boolean {
    if (!isCallOf(node, WITH_DEFAULTS)) {
      return false
    }
    if (processDefineProps(node.arguments[0], declId)) {
      if (propsRuntimeDecl) {
        error(
          `${WITH_DEFAULTS} can only be used with type-based ` +
            `${DEFINE_PROPS} declaration.`,
          node
        )
      }
      if (propsDestructureDecl) {
        error(
          `${WITH_DEFAULTS}() is unnecessary when using destructure with ${DEFINE_PROPS}().\n` +
            `Prefer using destructure default values, e.g. const { foo = 1 } = defineProps(...).`,
          node.callee
        )
      }
      propsRuntimeDefaults = node.arguments[1] as ObjectExpression
      if (
        !propsRuntimeDefaults ||
        propsRuntimeDefaults.type !== 'ObjectExpression'
      ) {
        error(
          `The 2nd argument of ${WITH_DEFAULTS} must be an object literal.`,
          propsRuntimeDefaults || node
        )
      }
    } else {
      error(
        `${WITH_DEFAULTS}' first argument must be a ${DEFINE_PROPS} call.`,
        node.arguments[0] || node
      )
    }
    return true
  }

  function processDefineEmits(node: Node, declId?: LVal): boolean {
    if (!isCallOf(node, DEFINE_EMITS)) {
      return false
    }
    if (hasDefineEmitCall) {
      error(`duplicate ${DEFINE_EMITS}() call`, node)
    }
    hasDefineEmitCall = true
    emitsRuntimeDecl = node.arguments[0]
    if (node.typeParameters) {
      if (emitsRuntimeDecl) {
        error(
          `${DEFINE_EMITS}() cannot accept both type and non-type arguments ` +
            `at the same time. Use one or the other.`,
          node
        )
      }

      emitsTypeDeclRaw = node.typeParameters.params[0]
      emitsTypeDecl = resolveQualifiedType(
        emitsTypeDeclRaw,
        node => node.type === 'TSFunctionType' || node.type === 'TSTypeLiteral'
      ) as TSFunctionType | TSTypeLiteral | TSInterfaceBody | undefined

      if (!emitsTypeDecl) {
        error(
          `type argument passed to ${DEFINE_EMITS}() must be a function type, ` +
            `a literal type with call signatures, or a reference to the above types.`,
          emitsTypeDeclRaw
        )
      }
    }

    if (declId) {
      emitIdentifier = scriptSetup!.content.slice(declId.start!, declId.end!)
    }

    return true
  }

  function resolveQualifiedType(
    node: Node,
    qualifier: (node: Node) => boolean
  ) {
    if (qualifier(node)) {
      return node
    }
    if (
      node.type === 'TSTypeReference' &&
      node.typeName.type === 'Identifier'
    ) {
      const refName = node.typeName.name
      const isQualifiedType = (node: Node): Node | undefined => {
        if (
          node.type === 'TSInterfaceDeclaration' &&
          node.id.name === refName
        ) {
          return node.body
        } else if (
          node.type === 'TSTypeAliasDeclaration' &&
          node.id.name === refName &&
          qualifier(node.typeAnnotation)
        ) {
          return node.typeAnnotation
        } else if (node.type === 'ExportNamedDeclaration' && node.declaration) {
          return isQualifiedType(node.declaration)
        }
      }
      const body = scriptAst
        ? [...scriptSetupAst.body, ...scriptAst.body]
        : scriptSetupAst.body
      for (const node of body) {
        const qualified = isQualifiedType(node)
        if (qualified) {
          return qualified
        }
      }
    }
  }

  function processDefineExpose(node: Node): boolean {
    if (isCallOf(node, DEFINE_EXPOSE)) {
      if (hasDefineExposeCall) {
        error(`duplicate ${DEFINE_EXPOSE}() call`, node)
      }
      hasDefineExposeCall = true
      return true
    }
    return false
  }

  function checkInvalidScopeReference(node: Node | undefined, method: string) {
    if (!node) return
    walkIdentifiers(node, id => {
      if (setupBindings[id.name]) {
        error(
          `\`${method}()\` in <script setup> cannot reference locally ` +
            `declared variables because it will be hoisted outside of the ` +
            `setup() function. If your component options require initialization ` +
            `in the module scope, use a separate normal <script> to export ` +
            `the options instead.`,
          id
        )
      }
    })
  }

  /**
   * check defaults. If the default object is an object literal with only
   * static properties, we can directly generate more optimized default
   * declarations. Otherwise we will have to fallback to runtime merging.
   */
  function hasStaticWithDefaults() {
    return (
      propsRuntimeDefaults &&
      propsRuntimeDefaults.type === 'ObjectExpression' &&
      propsRuntimeDefaults.properties.every(
        node =>
          (node.type === 'ObjectProperty' && !node.computed) ||
          node.type === 'ObjectMethod'
      )
    )
  }

  function genRuntimeProps(props: Record<string, PropTypeData>) {
    const keys = Object.keys(props)
    if (!keys.length) {
      return ``
    }
    const hasStaticDefaults = hasStaticWithDefaults()
    const scriptSetupSource = scriptSetup!.content
    let propsDecls = `{
    ${keys
      .map(key => {
        let defaultString: string | undefined
        const destructured = genDestructuredDefaultValue(key)
        if (destructured) {
          defaultString = `default: ${destructured}`
        } else if (hasStaticDefaults) {
          const prop = propsRuntimeDefaults!.properties.find(
            (node: any) => node.key.name === key
          ) as ObjectProperty | ObjectMethod
          if (prop) {
            if (prop.type === 'ObjectProperty') {
              // prop has corresponding static default value
              defaultString = `default: ${scriptSetupSource.slice(
                prop.value.start!,
                prop.value.end!
              )}`
            } else {
              defaultString = `default() ${scriptSetupSource.slice(
                prop.body.start!,
                prop.body.end!
              )}`
            }
          }
        }

        const { type, required } = props[key]
        if (!isProd) {
          return `${key}: { type: ${toRuntimeTypeString(
            type
          )}, required: ${required}${
            defaultString ? `, ${defaultString}` : ``
          } }`
        } else if (
          type.some(
            el => el === 'Boolean' || (defaultString && el === 'Function')
          )
        ) {
          // #4783 production: if boolean or defaultString and function exists, should keep the type.
          return `${key}: { type: ${toRuntimeTypeString(type)}${
            defaultString ? `, ${defaultString}` : ``
          } }`
        } else {
          // production: checks are useless
          return `${key}: ${defaultString ? `{ ${defaultString} }` : 'null'}`
        }
      })
      .join(',\n    ')}\n  }`

    if (propsRuntimeDefaults && !hasStaticDefaults) {
      propsDecls = `${helper('mergeDefaults')}(${propsDecls}, ${source.slice(
        propsRuntimeDefaults.start! + startOffset,
        propsRuntimeDefaults.end! + startOffset
      )})`
    }

    return `\n  props: ${propsDecls},`
  }

  function genDestructuredDefaultValue(key: string): string | undefined {
    const destructured = propsDestructuredBindings[key]
    if (destructured && destructured.default) {
      const value = scriptSetup!.content.slice(
        destructured.default.start!,
        destructured.default.end!
      )
      const isLiteral = destructured.default.type.endsWith('Literal')
      return isLiteral ? value : `() => (${value})`
    }
  }

  function genSetupPropsType(node: TSTypeLiteral | TSInterfaceBody) {
    const scriptSetupSource = scriptSetup!.content
    if (hasStaticWithDefaults()) {
      // if withDefaults() is used, we need to remove the optional flags
      // on props that have default values
      let res = `{ `
      const members = node.type === 'TSTypeLiteral' ? node.members : node.body
      for (const m of members) {
        if (
          (m.type === 'TSPropertySignature' ||
            m.type === 'TSMethodSignature') &&
          m.typeAnnotation &&
          m.key.type === 'Identifier'
        ) {
          if (
            propsRuntimeDefaults!.properties.some(
              (p: any) => p.key.name === (m.key as Identifier).name
            )
          ) {
            res +=
              m.key.name +
              (m.type === 'TSMethodSignature' ? '()' : '') +
              scriptSetupSource.slice(
                m.typeAnnotation.start!,
                m.typeAnnotation.end!
              ) +
              ', '
          } else {
            res +=
              scriptSetupSource.slice(m.start!, m.typeAnnotation.end!) + `, `
          }
        }
      }
      return (res.length ? res.slice(0, -2) : res) + ` }`
    } else {
      return scriptSetupSource.slice(node.start!, node.end!)
    }
  }

  // 1. process normal <script> first if it exists
  let scriptAst: Program | undefined
  if (script) {
    scriptAst = parse(
      script.content,
      {
        plugins,
        sourceType: 'module'
      },
      scriptStartOffset!
    )

    for (const node of scriptAst.body) {
      if (node.type === 'ImportDeclaration') {
        // record imports for dedupe
        for (const specifier of node.specifiers) {
          const imported =
            specifier.type === 'ImportSpecifier' &&
            specifier.imported.type === 'Identifier' &&
            specifier.imported.name
          registerUserImport(
            node.source.value,
            specifier.local.name,
            imported,
            node.importKind === 'type' ||
              (specifier.type === 'ImportSpecifier' &&
                specifier.importKind === 'type'),
            false
          )
        }
      } else if (node.type === 'ExportDefaultDeclaration') {
        // export default
        defaultExport = node

        // check if user has manually specified `name` or 'render` option in
        // export default
        // if has name, skip name inference
        // if has render and no template, generate return object instead of
        // empty render function (#4980)
        let optionProperties
        if (defaultExport.declaration.type === 'ObjectExpression') {
          optionProperties = defaultExport.declaration.properties
        } else if (
          defaultExport.declaration.type === 'CallExpression' &&
          defaultExport.declaration.arguments[0].type === 'ObjectExpression'
        ) {
          optionProperties = defaultExport.declaration.arguments[0].properties
        }
        if (optionProperties) {
          for (const s of optionProperties) {
            if (
              s.type === 'ObjectProperty' &&
              s.key.type === 'Identifier' &&
              s.key.name === 'name'
            ) {
              hasDefaultExportName = true
            }
          }
        }

        // export default { ... } --> const __default__ = { ... }
        const start = node.start! + scriptStartOffset!
        const end = node.declaration.start! + scriptStartOffset!
        s.overwrite(start, end, `const ${DEFAULT_VAR} = `)
      } else if (node.type === 'ExportNamedDeclaration') {
        const defaultSpecifier = node.specifiers.find(
          s => s.exported.type === 'Identifier' && s.exported.name === 'default'
        ) as ExportSpecifier
        if (defaultSpecifier) {
          defaultExport = node
          // 1. remove specifier
          if (node.specifiers.length > 1) {
            s.remove(
              defaultSpecifier.start! + scriptStartOffset!,
              defaultSpecifier.end! + scriptStartOffset!
            )
          } else {
            s.remove(
              node.start! + scriptStartOffset!,
              node.end! + scriptStartOffset!
            )
          }
          if (node.source) {
            // export { x as default } from './x'
            // rewrite to `import { x as __default__ } from './x'` and
            // add to top
            s.prepend(
              `import { ${defaultSpecifier.local.name} as ${DEFAULT_VAR} } from '${node.source.value}'\n`
            )
          } else {
            // export { x as default }
            // rewrite to `const __default__ = x` and move to end
            s.appendLeft(
              scriptEndOffset!,
              `\nconst ${DEFAULT_VAR} = ${defaultSpecifier.local.name}\n`
            )
          }
        }
        if (node.declaration) {
          walkDeclaration(node.declaration, scriptBindings, userImportAlias)
        }
      } else if (
        (node.type === 'VariableDeclaration' ||
          node.type === 'FunctionDeclaration' ||
          node.type === 'ClassDeclaration' ||
          node.type === 'TSEnumDeclaration') &&
        !node.declare
      ) {
        walkDeclaration(node, scriptBindings, userImportAlias)
      }
    }

    // apply reactivity transform
    // if (enableReactivityTransform && shouldTransform(script.content)) {
    //   const { rootRefs, importedHelpers } = transformAST(
    //     scriptAst,
    //     s,
    //     scriptStartOffset!
    //   )
    //   refBindings = rootRefs
    //   for (const h of importedHelpers) {
    //     helperImports.add(h)
    //   }
    // }

    // <script> after <script setup>
    // we need to move the block up so that `const __default__` is
    // declared before being used in the actual component definition
    if (scriptStartOffset! > startOffset) {
      // if content doesn't end with newline, add one
      if (!/\n$/.test(script.content.trim())) {
        s.appendLeft(scriptEndOffset!, `\n`)
      }
      s.move(scriptStartOffset!, scriptEndOffset!, 0)
    }
  }

  // 2. parse <script setup> and  walk over top level statements
  const scriptSetupAst = parse(
    scriptSetup.content,
    {
      plugins: [
        ...plugins,
        // allow top level await but only inside <script setup>
        'topLevelAwait'
      ],
      sourceType: 'module'
    },
    startOffset
  )

  for (const node of scriptSetupAst.body) {
    const start = node.start! + startOffset
    let end = node.end! + startOffset
    // locate comment
    if (node.trailingComments && node.trailingComments.length > 0) {
      const lastCommentNode =
        node.trailingComments[node.trailingComments.length - 1]
      end = lastCommentNode.end! + startOffset
    }
    // locate the end of whitespace between this statement and the next
    while (end <= source.length) {
      if (!/\s/.test(source.charAt(end))) {
        break
      }
      end++
    }

    // (Dropped) `ref: x` bindings
    if (
      node.type === 'LabeledStatement' &&
      node.label.name === 'ref' &&
      node.body.type === 'ExpressionStatement'
    ) {
      error(
        `ref sugar using the label syntax was an experimental proposal and ` +
          `has been dropped based on community feedback. Please check out ` +
          `the new proposal at https://github.com/vuejs/rfcs/discussions/369`,
        node
      )
    }

    if (node.type === 'ImportDeclaration') {
      // import declarations are moved to top
      s.move(start, end, 0)

      // dedupe imports
      let removed = 0
      const removeSpecifier = (i: number) => {
        const removeLeft = i > removed
        removed++
        const current = node.specifiers[i]
        const next = node.specifiers[i + 1]
        s.remove(
          removeLeft
            ? node.specifiers[i - 1].end! + startOffset
            : current.start! + startOffset,
          next && !removeLeft
            ? next.start! + startOffset
            : current.end! + startOffset
        )
      }

      for (let i = 0; i < node.specifiers.length; i++) {
        const specifier = node.specifiers[i]
        const local = specifier.local.name
        let imported =
          specifier.type === 'ImportSpecifier' &&
          specifier.imported.type === 'Identifier' &&
          specifier.imported.name
        if (specifier.type === 'ImportNamespaceSpecifier') {
          imported = '*'
        }
        const source = node.source.value
        const existing = userImports[local]
        if (
          source === 'vue' &&
          (imported === DEFINE_PROPS ||
            imported === DEFINE_EMITS ||
            imported === DEFINE_EXPOSE)
        ) {
          warnOnce(
            `\`${imported}\` is a compiler macro and no longer needs to be imported.`
          )
          removeSpecifier(i)
        } else if (existing) {
          if (existing.source === source && existing.imported === imported) {
            // already imported in <script setup>, dedupe
            removeSpecifier(i)
          } else {
            error(`different imports aliased to same local name.`, specifier)
          }
        } else {
          registerUserImport(
            source,
            local,
            imported,
            node.importKind === 'type' ||
              (specifier.type === 'ImportSpecifier' &&
                specifier.importKind === 'type'),
            true
          )
        }
      }
      if (node.specifiers.length && removed === node.specifiers.length) {
        s.remove(node.start! + startOffset, node.end! + startOffset)
      }
    }

    if (node.type === 'ExpressionStatement') {
      // process `defineProps` and `defineEmit(s)` calls
      if (
        processDefineProps(node.expression) ||
        processDefineEmits(node.expression) ||
        processWithDefaults(node.expression)
      ) {
        s.remove(node.start! + startOffset, node.end! + startOffset)
      } else if (processDefineExpose(node.expression)) {
        // defineExpose({}) -> expose({})
        const callee = (node.expression as CallExpression).callee
        s.overwrite(
          callee.start! + startOffset,
          callee.end! + startOffset,
          'expose'
        )
      }
    }

    if (node.type === 'VariableDeclaration' && !node.declare) {
      const total = node.declarations.length
      let left = total
      for (let i = 0; i < total; i++) {
        const decl = node.declarations[i]
        if (decl.init) {
          // defineProps / defineEmits
          const isDefineProps =
            processDefineProps(decl.init, decl.id) ||
            processWithDefaults(decl.init, decl.id)
          const isDefineEmits = processDefineEmits(decl.init, decl.id)
          if (isDefineProps || isDefineEmits) {
            if (left === 1) {
              s.remove(node.start! + startOffset, node.end! + startOffset)
            } else {
              let start = decl.start! + startOffset
              let end = decl.end! + startOffset
              if (i < total - 1) {
                // not the last one, locate the start of the next
                end = node.declarations[i + 1].start! + startOffset
              } else {
                // last one, locate the end of the prev
                start = node.declarations[i - 1].end! + startOffset
              }
              s.remove(start, end)
              left--
            }
          }
        }
      }
    }

    // walk declarations to record declared bindings
    if (
      (node.type === 'VariableDeclaration' ||
        node.type === 'FunctionDeclaration' ||
        node.type === 'ClassDeclaration') &&
      !node.declare
    ) {
      walkDeclaration(node, setupBindings, userImportAlias)
    }

    // walk statements & named exports / variable declarations for top level
    // await
    if (
      (node.type === 'VariableDeclaration' && !node.declare) ||
      node.type.endsWith('Statement')
    ) {
      const scope: Statement[][] = [scriptSetupAst.body]
      ;(walk as any)(node, {
        enter(child: Node, parent: Node) {
          if (isFunctionType(child)) {
            this.skip()
          }
          if (child.type === 'BlockStatement') {
            scope.push(child.body)
          }
          if (child.type === 'AwaitExpression') {
            error(
              `Vue 2 does not support top level await in <script setup>.`,
              child
            )
          }
        },
        exit(node: Node) {
          if (node.type === 'BlockStatement') scope.pop()
        }
      })
    }

    if (
      (node.type === 'ExportNamedDeclaration' && node.exportKind !== 'type') ||
      node.type === 'ExportAllDeclaration' ||
      node.type === 'ExportDefaultDeclaration'
    ) {
      error(
        `<script setup> cannot contain ES module exports. ` +
          `If you are using a previous version of <script setup>, please ` +
          `consult the updated RFC at https://github.com/vuejs/rfcs/pull/227.`,
        node
      )
    }

    if (isTS) {
      // runtime enum
      if (node.type === 'TSEnumDeclaration') {
        registerBinding(setupBindings, node.id, BindingTypes.SETUP_CONST)
      }

      // move all Type declarations to outer scope
      if (
        node.type.startsWith('TS') ||
        (node.type === 'ExportNamedDeclaration' &&
          node.exportKind === 'type') ||
        (node.type === 'VariableDeclaration' && node.declare)
      ) {
        recordType(node, declaredTypes)
        s.move(start, end, 0)
      }
    }
  }

  // 3. Apply reactivity transform
  // if (
  //   (enableReactivityTransform &&
  //     // normal <script> had ref bindings that maybe used in <script setup>
  //     (refBindings || shouldTransform(scriptSetup.content))) ||
  //   propsDestructureDecl
  // ) {
  //   const { rootRefs, importedHelpers } = transformAST(
  //     scriptSetupAst,
  //     s,
  //     startOffset,
  //     refBindings,
  //     propsDestructuredBindings
  //   )
  //   refBindings = refBindings ? [...refBindings, ...rootRefs] : rootRefs
  //   for (const h of importedHelpers) {
  //     helperImports.add(h)
  //   }
  // }

  // 4. extract runtime props/emits code from setup context type
  if (propsTypeDecl) {
    extractRuntimeProps(propsTypeDecl, typeDeclaredProps, declaredTypes, isProd)
  }
  if (emitsTypeDecl) {
    extractRuntimeEmits(emitsTypeDecl, typeDeclaredEmits)
  }

  // 5. check useOptions args to make sure it doesn't reference setup scope
  // variables
  checkInvalidScopeReference(propsRuntimeDecl, DEFINE_PROPS)
  checkInvalidScopeReference(propsRuntimeDefaults, DEFINE_PROPS)
  checkInvalidScopeReference(propsDestructureDecl, DEFINE_PROPS)
  checkInvalidScopeReference(emitsRuntimeDecl, DEFINE_EMITS)

  // 6. remove non-script content
  if (script) {
    if (startOffset < scriptStartOffset!) {
      // <script setup> before <script>
      s.remove(0, startOffset)
      s.remove(endOffset, scriptStartOffset!)
      s.remove(scriptEndOffset!, source.length)
    } else {
      // <script> before <script setup>
      s.remove(0, scriptStartOffset!)
      s.remove(scriptEndOffset!, startOffset)
      s.remove(endOffset, source.length)
    }
  } else {
    // only <script setup>
    s.remove(0, startOffset)
    s.remove(endOffset, source.length)
  }

  // 7. analyze binding metadata
  if (scriptAst) {
    Object.assign(bindingMetadata, analyzeScriptBindings(scriptAst.body))
  }
  if (propsRuntimeDecl) {
    for (const key of getObjectOrArrayExpressionKeys(propsRuntimeDecl)) {
      bindingMetadata[key] = BindingTypes.PROPS
    }
  }
  for (const key in typeDeclaredProps) {
    bindingMetadata[key] = BindingTypes.PROPS
  }
  // props aliases
  // if (propsDestructureDecl) {
  //   if (propsDestructureRestId) {
  //     bindingMetadata[propsDestructureRestId] =
  //       BindingTypes.SETUP_REACTIVE_CONST
  //   }
  //   for (const key in propsDestructuredBindings) {
  //     const { local } = propsDestructuredBindings[key]
  //     if (local !== key) {
  //       bindingMetadata[local] = BindingTypes.PROPS_ALIASED
  //       ;(bindingMetadata.__propsAliases ||
  //         (bindingMetadata.__propsAliases = {}))[local] = key
  //     }
  //   }
  // }
  for (const [key, { isType, imported, source }] of Object.entries(
    userImports
  )) {
    if (isType) continue
    bindingMetadata[key] =
      imported === '*' ||
      (imported === 'default' && source.endsWith('.vue')) ||
      source === 'vue'
        ? BindingTypes.SETUP_CONST
        : BindingTypes.SETUP_MAYBE_REF
  }
  for (const key in scriptBindings) {
    bindingMetadata[key] = scriptBindings[key]
  }
  for (const key in setupBindings) {
    bindingMetadata[key] = setupBindings[key]
  }
  // known ref bindings
  if (refBindings) {
    for (const key of refBindings) {
      bindingMetadata[key] = BindingTypes.SETUP_REF
    }
  }

  // 8. inject `useCssVars` calls
  if (cssVars.length) {
    helperImports.add(CSS_VARS_HELPER)
    s.prependRight(
      startOffset,
      `\n${genCssVarsCode(cssVars, bindingMetadata, scopeId, isProd)}\n`
    )
  }

  // 9. finalize setup() argument signature
  let args = `__props`
  if (propsTypeDecl) {
    // mark as any and only cast on assignment
    // since the user defined complex types may be incompatible with the
    // inferred type from generated runtime declarations
    args += `: any`
  }
  // inject user assignment of props
  // we use a default __props so that template expressions referencing props
  // can use it directly
  if (propsIdentifier) {
    s.prependLeft(
      startOffset,
      `\nconst ${propsIdentifier} = __props${
        propsTypeDecl ? ` as ${genSetupPropsType(propsTypeDecl)}` : ``
      }\n`
    )
  }
  if (propsDestructureRestId) {
    s.prependLeft(
      startOffset,
      `\nconst ${propsDestructureRestId} = ${helper(
        `createPropsRestProxy`
      )}(__props, ${JSON.stringify(Object.keys(propsDestructuredBindings))})\n`
    )
  }

  const destructureElements = hasDefineExposeCall ? [`expose`] : []
  if (emitIdentifier) {
    destructureElements.push(
      emitIdentifier === `emit` ? `emit` : `emit: ${emitIdentifier}`
    )
  }
  if (destructureElements.length) {
    args += `, { ${destructureElements.join(', ')} }`
    if (emitsTypeDecl) {
      args += `: { emit: (${scriptSetup.content.slice(
        emitsTypeDecl.start!,
        emitsTypeDecl.end!
      )}), expose: any, slots: any, attrs: any }`
    }
  }

  // 10. generate return statement
  const allBindings: Record<string, any> = {
    ...scriptBindings,
    ...setupBindings
  }
  for (const key in userImports) {
    if (!userImports[key].isType && userImports[key].isUsedInTemplate) {
      allBindings[key] = true
    }
  }
  // __sfc marker indicates these bindings are compiled from <script setup>
  // and should not be proxied on `this`
  const returned = `{ ${__TEST__ ? `` : `__sfc: true,`}${Object.keys(
    allBindings
  ).join(', ')} }`

  s.appendRight(endOffset, `\nreturn ${returned}\n}\n\n`)

  // 11. finalize default export
  let runtimeOptions = ``
  if (!hasDefaultExportName && filename && filename !== DEFAULT_FILENAME) {
    const match = filename.match(/([^/\\]+)\.\w+$/)
    if (match) {
      runtimeOptions += `\n  __name: '${match[1]}',`
    }
  }
  if (hasInlinedSsrRenderFn) {
    runtimeOptions += `\n  __ssrInlineRender: true,`
  }
  if (propsRuntimeDecl) {
    let declCode = scriptSetup.content
      .slice(propsRuntimeDecl.start!, propsRuntimeDecl.end!)
      .trim()
    if (propsDestructureDecl) {
      const defaults: string[] = []
      for (const key in propsDestructuredBindings) {
        const d = genDestructuredDefaultValue(key)
        if (d) defaults.push(`${key}: ${d}`)
      }
      if (defaults.length) {
        declCode = `${helper(
          `mergeDefaults`
        )}(${declCode}, {\n  ${defaults.join(',\n  ')}\n})`
      }
    }
    runtimeOptions += `\n  props: ${declCode},`
  } else if (propsTypeDecl) {
    runtimeOptions += genRuntimeProps(typeDeclaredProps)
  }
  if (emitsRuntimeDecl) {
    runtimeOptions += `\n  emits: ${scriptSetup.content
      .slice(emitsRuntimeDecl.start!, emitsRuntimeDecl.end!)
      .trim()},`
  } else if (emitsTypeDecl) {
    runtimeOptions += genRuntimeEmits(typeDeclaredEmits)
  }

  // wrap setup code with function.
  if (isTS) {
    // for TS, make sure the exported type is still valid type with
    // correct props information
    // we have to use object spread for types to be merged properly
    // user's TS setting should compile it down to proper targets
    // export default defineComponent({ ...__default__, ... })
    const def = defaultExport ? `\n  ...${DEFAULT_VAR},` : ``
    s.prependLeft(
      startOffset,
      `\nexport default /*#__PURE__*/${helper(
        `defineComponent`
      )}({${def}${runtimeOptions}\n  setup(${args}) {\n`
    )
    s.appendRight(endOffset, `})`)
  } else {
    if (defaultExport) {
      // without TS, can't rely on rest spread, so we use Object.assign
      // export default Object.assign(__default__, { ... })
      s.prependLeft(
        startOffset,
        `\nexport default /*#__PURE__*/Object.assign(${DEFAULT_VAR}, {${runtimeOptions}\n  ` +
          `setup(${args}) {\n`
      )
      s.appendRight(endOffset, `})`)
    } else {
      s.prependLeft(
        startOffset,
        `\nexport default {${runtimeOptions}\n  setup(${args}) {\n`
      )
      s.appendRight(endOffset, `}`)
    }
  }

  // 12. finalize Vue helper imports
  if (helperImports.size > 0) {
    s.prepend(
      `import { ${[...helperImports]
        .map(h => `${h} as _${h}`)
        .join(', ')} } from 'vue'\n`
    )
  }

  s.trim()

  return {
    ...scriptSetup,
    bindings: bindingMetadata,
    imports: userImports,
    content: s.toString(),
    map: genSourceMap
      ? (s.generateMap({
          source: filename,
          hires: true,
          includeContent: true
        }) as unknown as RawSourceMap)
      : undefined,
    scriptAst: scriptAst?.body,
    scriptSetupAst: scriptSetupAst?.body
  }
}

function registerBinding(
  bindings: Record<string, BindingTypes>,
  node: Identifier,
  type: BindingTypes
) {
  bindings[node.name] = type
}

function walkDeclaration(
  node: Declaration,
  bindings: Record<string, BindingTypes>,
  userImportAlias: Record<string, string>
) {
  if (node.type === 'VariableDeclaration') {
    const isConst = node.kind === 'const'
    // export const foo = ...
    for (const { id, init } of node.declarations) {
      const isDefineCall = !!(
        isConst &&
        isCallOf(
          init,
          c => c === DEFINE_PROPS || c === DEFINE_EMITS || c === WITH_DEFAULTS
        )
      )
      if (id.type === 'Identifier') {
        let bindingType
        const userReactiveBinding = userImportAlias['reactive'] || 'reactive'
        if (isCallOf(init, userReactiveBinding)) {
          // treat reactive() calls as let since it's meant to be mutable
          bindingType = isConst
            ? BindingTypes.SETUP_REACTIVE_CONST
            : BindingTypes.SETUP_LET
        } else if (
          // if a declaration is a const literal, we can mark it so that
          // the generated render fn code doesn't need to unref() it
          isDefineCall ||
          (isConst && canNeverBeRef(init!, userReactiveBinding))
        ) {
          bindingType = isCallOf(init, DEFINE_PROPS)
            ? BindingTypes.SETUP_REACTIVE_CONST
            : BindingTypes.SETUP_CONST
        } else if (isConst) {
          if (isCallOf(init, userImportAlias['ref'] || 'ref')) {
            bindingType = BindingTypes.SETUP_REF
          } else {
            bindingType = BindingTypes.SETUP_MAYBE_REF
          }
        } else {
          bindingType = BindingTypes.SETUP_LET
        }
        registerBinding(bindings, id, bindingType)
      } else {
        if (isCallOf(init, DEFINE_PROPS)) {
          // skip walking props destructure
          return
        }
        if (id.type === 'ObjectPattern') {
          walkObjectPattern(id, bindings, isConst, isDefineCall)
        } else if (id.type === 'ArrayPattern') {
          walkArrayPattern(id, bindings, isConst, isDefineCall)
        }
      }
    }
  } else if (
    node.type === 'TSEnumDeclaration' ||
    node.type === 'FunctionDeclaration' ||
    node.type === 'ClassDeclaration'
  ) {
    // export function foo() {} / export class Foo {}
    // export declarations must be named.
    bindings[node.id!.name] = BindingTypes.SETUP_CONST
  }
}

function walkObjectPattern(
  node: ObjectPattern,
  bindings: Record<string, BindingTypes>,
  isConst: boolean,
  isDefineCall = false
) {
  for (const p of node.properties) {
    if (p.type === 'ObjectProperty') {
      if (p.key.type === 'Identifier' && p.key === p.value) {
        // shorthand: const { x } = ...
        const type = isDefineCall
          ? BindingTypes.SETUP_CONST
          : isConst
          ? BindingTypes.SETUP_MAYBE_REF
          : BindingTypes.SETUP_LET
        registerBinding(bindings, p.key, type)
      } else {
        walkPattern(p.value, bindings, isConst, isDefineCall)
      }
    } else {
      // ...rest
      // argument can only be identifier when destructuring
      const type = isConst ? BindingTypes.SETUP_CONST : BindingTypes.SETUP_LET
      registerBinding(bindings, p.argument as Identifier, type)
    }
  }
}

function walkArrayPattern(
  node: ArrayPattern,
  bindings: Record<string, BindingTypes>,
  isConst: boolean,
  isDefineCall = false
) {
  for (const e of node.elements) {
    e && walkPattern(e, bindings, isConst, isDefineCall)
  }
}

function walkPattern(
  node: Node,
  bindings: Record<string, BindingTypes>,
  isConst: boolean,
  isDefineCall = false
) {
  if (node.type === 'Identifier') {
    const type = isDefineCall
      ? BindingTypes.SETUP_CONST
      : isConst
      ? BindingTypes.SETUP_MAYBE_REF
      : BindingTypes.SETUP_LET
    registerBinding(bindings, node, type)
  } else if (node.type === 'RestElement') {
    // argument can only be identifier when destructuring
    const type = isConst ? BindingTypes.SETUP_CONST : BindingTypes.SETUP_LET
    registerBinding(bindings, node.argument as Identifier, type)
  } else if (node.type === 'ObjectPattern') {
    walkObjectPattern(node, bindings, isConst)
  } else if (node.type === 'ArrayPattern') {
    walkArrayPattern(node, bindings, isConst)
  } else if (node.type === 'AssignmentPattern') {
    if (node.left.type === 'Identifier') {
      const type = isDefineCall
        ? BindingTypes.SETUP_CONST
        : isConst
        ? BindingTypes.SETUP_MAYBE_REF
        : BindingTypes.SETUP_LET
      registerBinding(bindings, node.left, type)
    } else {
      walkPattern(node.left, bindings, isConst)
    }
  }
}

interface PropTypeData {
  key: string
  type: string[]
  required: boolean
}

function recordType(node: Node, declaredTypes: Record<string, string[]>) {
  if (node.type === 'TSInterfaceDeclaration') {
    declaredTypes[node.id.name] = [`Object`]
  } else if (node.type === 'TSTypeAliasDeclaration') {
    declaredTypes[node.id.name] = inferRuntimeType(
      node.typeAnnotation,
      declaredTypes
    )
  } else if (node.type === 'ExportNamedDeclaration' && node.declaration) {
    recordType(node.declaration, declaredTypes)
  }
}

function extractRuntimeProps(
  node: TSTypeLiteral | TSInterfaceBody,
  props: Record<string, PropTypeData>,
  declaredTypes: Record<string, string[]>,
  isProd: boolean
) {
  const members = node.type === 'TSTypeLiteral' ? node.members : node.body
  for (const m of members) {
    if (
      (m.type === 'TSPropertySignature' || m.type === 'TSMethodSignature') &&
      m.key.type === 'Identifier'
    ) {
      let type
      if (m.type === 'TSMethodSignature') {
        type = ['Function']
      } else if (m.typeAnnotation) {
        type = inferRuntimeType(m.typeAnnotation.typeAnnotation, declaredTypes)
      }
      props[m.key.name] = {
        key: m.key.name,
        required: !m.optional,
        type: type || [`null`]
      }
    }
  }
}

function inferRuntimeType(
  node: TSType,
  declaredTypes: Record<string, string[]>
): string[] {
  switch (node.type) {
    case 'TSStringKeyword':
      return ['String']
    case 'TSNumberKeyword':
      return ['Number']
    case 'TSBooleanKeyword':
      return ['Boolean']
    case 'TSObjectKeyword':
      return ['Object']
    case 'TSTypeLiteral':
      // TODO (nice to have) generate runtime property validation
      return ['Object']
    case 'TSFunctionType':
      return ['Function']
    case 'TSArrayType':
    case 'TSTupleType':
      // TODO (nice to have) generate runtime element type/length checks
      return ['Array']

    case 'TSLiteralType':
      switch (node.literal.type) {
        case 'StringLiteral':
          return ['String']
        case 'BooleanLiteral':
          return ['Boolean']
        case 'NumericLiteral':
        case 'BigIntLiteral':
          return ['Number']
        default:
          return [`null`]
      }

    case 'TSTypeReference':
      if (node.typeName.type === 'Identifier') {
        if (declaredTypes[node.typeName.name]) {
          return declaredTypes[node.typeName.name]
        }
        switch (node.typeName.name) {
          case 'Array':
          case 'Function':
          case 'Object':
          case 'Set':
          case 'Map':
          case 'WeakSet':
          case 'WeakMap':
          case 'Date':
          case 'Promise':
            return [node.typeName.name]
          case 'Record':
          case 'Partial':
          case 'Readonly':
          case 'Pick':
          case 'Omit':
          case 'Exclude':
          case 'Extract':
          case 'Required':
          case 'InstanceType':
            return ['Object']
        }
      }
      return [`null`]

    case 'TSParenthesizedType':
      return inferRuntimeType(node.typeAnnotation, declaredTypes)
    case 'TSUnionType':
      return [
        ...new Set(
          [].concat(
            ...(node.types.map(t => inferRuntimeType(t, declaredTypes)) as any)
          )
        )
      ]
    case 'TSIntersectionType':
      return ['Object']

    case 'TSSymbolKeyword':
      return ['Symbol']

    default:
      return [`null`] // no runtime check
  }
}

function toRuntimeTypeString(types: string[]) {
  return types.length > 1 ? `[${types.join(', ')}]` : types[0]
}

function extractRuntimeEmits(
  node: TSFunctionType | TSTypeLiteral | TSInterfaceBody,
  emits: Set<string>
) {
  if (node.type === 'TSTypeLiteral' || node.type === 'TSInterfaceBody') {
    const members = node.type === 'TSTypeLiteral' ? node.members : node.body
    for (let t of members) {
      if (t.type === 'TSCallSignatureDeclaration') {
        extractEventNames(t.parameters[0], emits)
      }
    }
    return
  } else {
    extractEventNames(node.parameters[0], emits)
  }
}

function extractEventNames(
  eventName: Identifier | RestElement,
  emits: Set<string>
) {
  if (
    eventName.type === 'Identifier' &&
    eventName.typeAnnotation &&
    eventName.typeAnnotation.type === 'TSTypeAnnotation'
  ) {
    const typeNode = eventName.typeAnnotation.typeAnnotation
    if (typeNode.type === 'TSLiteralType') {
      if (
        typeNode.literal.type !== 'UnaryExpression' &&
        typeNode.literal.type !== 'TemplateLiteral'
      ) {
        emits.add(String(typeNode.literal.value))
      }
    } else if (typeNode.type === 'TSUnionType') {
      for (const t of typeNode.types) {
        if (
          t.type === 'TSLiteralType' &&
          t.literal.type !== 'UnaryExpression' &&
          t.literal.type !== 'TemplateLiteral'
        ) {
          emits.add(String(t.literal.value))
        }
      }
    }
  }
}

function genRuntimeEmits(emits: Set<string>) {
  return emits.size
    ? `\n  emits: [${Array.from(emits)
        .map(p => JSON.stringify(p))
        .join(', ')}],`
    : ``
}

function isCallOf(
  node: Node | null | undefined,
  test: string | ((id: string) => boolean)
): node is CallExpression {
  return !!(
    node &&
    node.type === 'CallExpression' &&
    node.callee.type === 'Identifier' &&
    (typeof test === 'string'
      ? node.callee.name === test
      : test(node.callee.name))
  )
}

function canNeverBeRef(node: Node, userReactiveImport: string): boolean {
  if (isCallOf(node, userReactiveImport)) {
    return true
  }
  switch (node.type) {
    case 'UnaryExpression':
    case 'BinaryExpression':
    case 'ArrayExpression':
    case 'ObjectExpression':
    case 'FunctionExpression':
    case 'ArrowFunctionExpression':
    case 'UpdateExpression':
    case 'ClassExpression':
    case 'TaggedTemplateExpression':
      return true
    case 'SequenceExpression':
      return canNeverBeRef(
        node.expressions[node.expressions.length - 1],
        userReactiveImport
      )
    default:
      if (node.type.endsWith('Literal')) {
        return true
      }
      return false
  }
}

/**
 * Analyze bindings in normal `<script>`
 * Note that `compileScriptSetup` already analyzes bindings as part of its
 * compilation process so this should only be used on single `<script>` SFCs.
 */
function analyzeScriptBindings(ast: Statement[]): BindingMetadata {
  for (const node of ast) {
    if (
      node.type === 'ExportDefaultDeclaration' &&
      node.declaration.type === 'ObjectExpression'
    ) {
      return analyzeBindingsFromOptions(node.declaration)
    }
  }
  return {}
}

function analyzeBindingsFromOptions(node: ObjectExpression): BindingMetadata {
  const bindings: BindingMetadata = {}
  // #3270, #3275
  // mark non-script-setup so we don't resolve components/directives from these
  Object.defineProperty(bindings, '__isScriptSetup', {
    enumerable: false,
    value: false
  })
  for (const property of node.properties) {
    if (
      property.type === 'ObjectProperty' &&
      !property.computed &&
      property.key.type === 'Identifier'
    ) {
      // props
      if (property.key.name === 'props') {
        // props: ['foo']
        // props: { foo: ... }
        for (const key of getObjectOrArrayExpressionKeys(property.value)) {
          bindings[key] = BindingTypes.PROPS
        }
      }

      // inject
      else if (property.key.name === 'inject') {
        // inject: ['foo']
        // inject: { foo: {} }
        for (const key of getObjectOrArrayExpressionKeys(property.value)) {
          bindings[key] = BindingTypes.OPTIONS
        }
      }

      // computed & methods
      else if (
        property.value.type === 'ObjectExpression' &&
        (property.key.name === 'computed' || property.key.name === 'methods')
      ) {
        // methods: { foo() {} }
        // computed: { foo() {} }
        for (const key of getObjectExpressionKeys(property.value)) {
          bindings[key] = BindingTypes.OPTIONS
        }
      }
    }

    // setup & data
    else if (
      property.type === 'ObjectMethod' &&
      property.key.type === 'Identifier' &&
      (property.key.name === 'setup' || property.key.name === 'data')
    ) {
      for (const bodyItem of property.body.body) {
        // setup() {
        //   return {
        //     foo: null
        //   }
        // }
        if (
          bodyItem.type === 'ReturnStatement' &&
          bodyItem.argument &&
          bodyItem.argument.type === 'ObjectExpression'
        ) {
          for (const key of getObjectExpressionKeys(bodyItem.argument)) {
            bindings[key] =
              property.key.name === 'setup'
                ? BindingTypes.SETUP_MAYBE_REF
                : BindingTypes.DATA
          }
        }
      }
    }
  }

  return bindings
}

function getObjectExpressionKeys(node: ObjectExpression): string[] {
  const keys: string[] = []
  for (const prop of node.properties) {
    if (
      (prop.type === 'ObjectProperty' || prop.type === 'ObjectMethod') &&
      !prop.computed
    ) {
      if (prop.key.type === 'Identifier') {
        keys.push(prop.key.name)
      } else if (prop.key.type === 'StringLiteral') {
        keys.push(prop.key.value)
      }
    }
  }
  return keys
}

function getArrayExpressionKeys(node: ArrayExpression): string[] {
  const keys: string[] = []
  for (const element of node.elements) {
    if (element && element.type === 'StringLiteral') {
      keys.push(element.value)
    }
  }
  return keys
}

function getObjectOrArrayExpressionKeys(value: Node): string[] {
  if (value.type === 'ArrayExpression') {
    return getArrayExpressionKeys(value)
  }
  if (value.type === 'ObjectExpression') {
    return getObjectExpressionKeys(value)
  }
  return []
}

const templateUsageCheckCache = new LRU<string, string>(512)

function resolveTemplateUsageCheckString(sfc: SFCDescriptor, isTS: boolean) {
  const { content } = sfc.template!
  const cached = templateUsageCheckCache.get(content)
  if (cached) {
    return cached
  }

  let code = ''

  parseHTML(content, {
    ...webCompilerOptions,
    start(tag, attrs) {
      if (!isBuiltInTag(tag) && !isReservedTag(tag)) {
        code += `,${camelize(tag)},${capitalize(camelize(tag))}`
      }
      for (let i = 0; i < attrs.length; i++) {
        const { name, value } = attrs[i]
        if (dirRE.test(name)) {
          const baseName = onRE.test(name)
            ? 'on'
            : slotRE.test(name)
            ? 'slot'
            : bindRE.test(name)
            ? 'bind'
            : name.replace(dirRE, '')
          if (!isBuiltInDir(baseName)) {
            code += `,v${capitalize(camelize(baseName))}`
          }
          if (value) {
            code += `,${processExp(value, isTS, baseName)}`
          }
        }
      }
    },
    chars(text) {
      const res = parseText(text)
      if (res) {
        code += `,${processExp(res.expression, isTS)}`
      }
    }
  })

  code += ';'
  templateUsageCheckCache.set(content, code)
  return code
}

const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/

function processExp(exp: string, isTS: boolean, dir?: string): string {
  if (isTS && / as\s+\w|<.*>|:/.test(exp)) {
    if (dir === 'slot') {
      exp = `(${exp})=>{}`
    } else if (dir === 'on') {
      exp = `()=>{${exp}}`
    } else if (dir === 'for') {
      const inMatch = exp.match(forAliasRE)
      if (inMatch) {
        const [, LHS, RHS] = inMatch
        return processExp(`(${LHS})=>{}`, true) + processExp(RHS, true)
      }
    }
    let ret = ''
    // has potential type cast or generic arguments that uses types
    const ast = parseExpression(exp, { plugins: ['typescript'] })
    walkIdentifiers(ast, node => {
      ret += `,` + node.name
    })
    return ret
  }
  return stripStrings(exp)
}

function stripStrings(exp: string) {
  return exp
    .replace(/'[^']*'|"[^"]*"/g, '')
    .replace(/`[^`]+`/g, stripTemplateString)
}

function stripTemplateString(str: string): string {
  const interpMatch = str.match(/\${[^}]+}/g)
  if (interpMatch) {
    return interpMatch.map(m => m.slice(2, -1)).join(',')
  }
  return ''
}

function isImportUsed(
  local: string,
  sfc: SFCDescriptor,
  isTS: boolean
): boolean {
  return new RegExp(
    // #4274 escape $ since it's a special char in regex
    // (and is the only regex special char that is valid in identifiers)
    `[^\\w$_]${local.replace(/\$/g, '\\$')}[^\\w$_]`
  ).test(resolveTemplateUsageCheckString(sfc, isTS))
}

/**
 * Note: this comparison assumes the prev/next script are already identical,
 * and only checks the special case where <script setup> unused import
 * pruning result changes due to template changes.
 */
export function hmrShouldReload(
  prevImports: Record<string, ImportBinding>,
  next: SFCDescriptor
): boolean {
  if (!next.scriptSetup) {
    return false
  }

  const isTS = next.scriptSetup.lang === 'ts' || next.scriptSetup.lang === 'tsx'
  // for each previous import, check if its used status remain the same based on
  // the next descriptor's template
  for (const key in prevImports) {
    // if an import was previous unused, but now is used, we need to force
    // reload so that the script now includes that import.
    if (!prevImports[key].isUsedInTemplate && isImportUsed(key, next, isTS)) {
      return true
    }
  }

  return false
}
const postcss = require('postcss')
import { ProcessOptions, LazyResult } from 'postcss'
import trimPlugin from './stylePlugins/trim'
import scopedPlugin from './stylePlugins/scoped'
import {
  processors,
  StylePreprocessor,
  StylePreprocessorResults
} from './stylePreprocessors'
import { cssVarsPlugin } from './cssVars'

export interface SFCStyleCompileOptions {
  source: string
  filename: string
  id: string
  map?: any
  scoped?: boolean
  trim?: boolean
  preprocessLang?: string
  preprocessOptions?: any
  postcssOptions?: any
  postcssPlugins?: any[]
  isProd?: boolean
}

export interface SFCAsyncStyleCompileOptions extends SFCStyleCompileOptions {
  isAsync?: boolean
}

export interface SFCStyleCompileResults {
  code: string
  map: any | void
  rawResult: LazyResult | void
  errors: string[]
}

export function compileStyle(
  options: SFCStyleCompileOptions
): SFCStyleCompileResults {
  return doCompileStyle({ ...options, isAsync: false })
}

export function compileStyleAsync(
  options: SFCStyleCompileOptions
): Promise<SFCStyleCompileResults> {
  return Promise.resolve(doCompileStyle({ ...options, isAsync: true }))
}

export function doCompileStyle(
  options: SFCAsyncStyleCompileOptions
): SFCStyleCompileResults {
  const {
    filename,
    id,
    scoped = true,
    trim = true,
    isProd = false,
    preprocessLang,
    postcssOptions,
    postcssPlugins
  } = options
  const preprocessor = preprocessLang && processors[preprocessLang]
  const preProcessedSource = preprocessor && preprocess(options, preprocessor)
  const map = preProcessedSource ? preProcessedSource.map : options.map
  const source = preProcessedSource ? preProcessedSource.code : options.source

  const plugins = (postcssPlugins || []).slice()
  plugins.unshift(cssVarsPlugin({ id: id.replace(/^data-v-/, ''), isProd }))
  if (trim) {
    plugins.push(trimPlugin())
  }
  if (scoped) {
    plugins.push(scopedPlugin(id))
  }

  const postCSSOptions: ProcessOptions = {
    ...postcssOptions,
    to: filename,
    from: filename
  }
  if (map) {
    postCSSOptions.map = {
      inline: false,
      annotation: false,
      prev: map
    }
  }

  let result, code, outMap
  const errors: any[] = []
  if (preProcessedSource && preProcessedSource.errors.length) {
    errors.push(...preProcessedSource.errors)
  }
  try {
    result = postcss(plugins).process(source, postCSSOptions)

    // In async mode, return a promise.
    if (options.isAsync) {
      return result
        .then(
          (result: LazyResult): SFCStyleCompileResults => ({
            code: result.css || '',
            map: result.map && result.map.toJSON(),
            errors,
            rawResult: result
          })
        )
        .catch(
          (error: Error): SFCStyleCompileResults => ({
            code: '',
            map: undefined,
            errors: [...errors, error.message],
            rawResult: undefined
          })
        )
    }

    // force synchronous transform (we know we only have sync plugins)
    code = result.css
    outMap = result.map
  } catch (e) {
    errors.push(e)
  }

  return {
    code: code || ``,
    map: outMap && outMap.toJSON(),
    errors,
    rawResult: result
  }
}

function preprocess(
  options: SFCStyleCompileOptions,
  preprocessor: StylePreprocessor
): StylePreprocessorResults {
  return preprocessor(
    options.source,
    options.map,
    Object.assign(
      {
        filename: options.filename
      },
      options.preprocessOptions
    )
  )
}
import { BindingMetadata, TemplateCompiler } from './types'
import assetUrlsModule, {
  AssetURLOptions,
  TransformAssetUrlsOptions
} from './templateCompilerModules/assetUrl'
import srcsetModule from './templateCompilerModules/srcset'
import consolidate from '@vue/consolidate'
import * as _compiler from 'web/entry-compiler'
import { prefixIdentifiers } from './prefixIdentifiers'
import { CompilerOptions, WarningMessage } from 'types/compiler'

export interface SFCTemplateCompileOptions {
  source: string
  filename: string
  compiler?: TemplateCompiler
  compilerOptions?: CompilerOptions
  transformAssetUrls?: AssetURLOptions | boolean
  transformAssetUrlsOptions?: TransformAssetUrlsOptions
  preprocessLang?: string
  preprocessOptions?: any
  transpileOptions?: any
  isProduction?: boolean
  isFunctional?: boolean
  optimizeSSR?: boolean
  prettify?: boolean
  isTS?: boolean
  bindings?: BindingMetadata
}

export interface SFCTemplateCompileResults {
  ast: Object | undefined
  code: string
  source: string
  tips: (string | WarningMessage)[]
  errors: (string | WarningMessage)[]
}

export function compileTemplate(
  options: SFCTemplateCompileOptions
): SFCTemplateCompileResults {
  const { preprocessLang } = options
  const preprocessor = preprocessLang && consolidate[preprocessLang]
  if (preprocessor) {
    return actuallyCompile(
      Object.assign({}, options, {
        source: preprocess(options, preprocessor)
      })
    )
  } else if (preprocessLang) {
    return {
      ast: {},
      code: `var render = function () {}\n` + `var staticRenderFns = []\n`,
      source: options.source,
      tips: [
        `Component ${options.filename} uses lang ${preprocessLang} for template. Please install the language preprocessor.`
      ],
      errors: [
        `Component ${options.filename} uses lang ${preprocessLang} for template, however it is not installed.`
      ]
    }
  } else {
    return actuallyCompile(options)
  }
}

function preprocess(
  options: SFCTemplateCompileOptions,
  preprocessor: any
): string {
  const { source, filename, preprocessOptions } = options

  const finalPreprocessOptions = Object.assign(
    {
      filename
    },
    preprocessOptions
  )

  // Consolidate exposes a callback based API, but the callback is in fact
  // called synchronously for most templating engines. In our case, we have to
  // expose a synchronous API so that it is usable in Jest transforms (which
  // have to be sync because they are applied via Node.js require hooks)
  let res: any, err
  preprocessor.render(
    source,
    finalPreprocessOptions,
    (_err: Error | null, _res: string) => {
      if (_err) err = _err
      res = _res
    }
  )

  if (err) throw err
  return res
}

function actuallyCompile(
  options: SFCTemplateCompileOptions
): SFCTemplateCompileResults {
  const {
    source,
    compiler = _compiler,
    compilerOptions = {},
    transpileOptions = {},
    transformAssetUrls,
    transformAssetUrlsOptions,
    isProduction = process.env.NODE_ENV === 'production',
    isFunctional = false,
    optimizeSSR = false,
    prettify = true,
    isTS = false,
    bindings
  } = options

  const compile =
    optimizeSSR && compiler.ssrCompile ? compiler.ssrCompile : compiler.compile

  let finalCompilerOptions = compilerOptions
  if (transformAssetUrls) {
    const builtInModules = [
      transformAssetUrls === true
        ? assetUrlsModule(undefined, transformAssetUrlsOptions)
        : assetUrlsModule(transformAssetUrls, transformAssetUrlsOptions),
      srcsetModule(transformAssetUrlsOptions)
    ]
    finalCompilerOptions = Object.assign({}, compilerOptions, {
      modules: [...builtInModules, ...(compilerOptions.modules || [])],
      filename: options.filename
    })
  }
  finalCompilerOptions.bindings = bindings

  const { ast, render, staticRenderFns, tips, errors } = compile(
    source,
    finalCompilerOptions
  )

  if (errors && errors.length) {
    return {
      ast,
      code: `var render = function () {}\n` + `var staticRenderFns = []\n`,
      source,
      tips,
      errors
    }
  } else {
    // stripping `with` usage
    let code =
      `var __render__ = ${prefixIdentifiers(
        `function render(${isFunctional ? `_c,_vm` : ``}){${render}\n}`,
        isFunctional,
        isTS,
        transpileOptions,
        bindings
      )}\n` +
      `var __staticRenderFns__ = [${staticRenderFns.map(code =>
        prefixIdentifiers(
          `function (${isFunctional ? `_c,_vm` : ``}){${code}\n}`,
          isFunctional,
          isTS,
          transpileOptions,
          bindings
        )
      )}]` +
      `\n`

    // #23 we use __render__ to avoid `render` not being prefixed by the
    // transpiler when stripping with, but revert it back to `render` to
    // maintain backwards compat
    code = code.replace(/\s__(render|staticRenderFns)__\s/g, ' $1 ')

    if (!isProduction) {
      // mark with stripped (this enables Vue to use correct runtime proxy
      // detection)
      code += `render._withStripped = true`

      if (prettify) {
        try {
          code = require('prettier').format(code, {
            semi: false,
            parser: 'babel'
          })
        } catch (e: any) {
          if (e.code === 'MODULE_NOT_FOUND') {
            tips.push(
              'The `prettify` option is on, but the dependency `prettier` is not found.\n' +
                'Please either turn off `prettify` or manually install `prettier`.'
            )
          }
          tips.push(
            `Failed to prettify component ${options.filename} template source after compilation.`
          )
        }
      }
    }

    return {
      ast,
      code,
      source,
      tips,
      errors
    }
  }
}
import { BindingMetadata } from './types'
import { SFCDescriptor } from './parseComponent'
import { PluginCreator } from 'postcss'
import hash from 'hash-sum'
import { prefixIdentifiers } from './prefixIdentifiers'

export const CSS_VARS_HELPER = `useCssVars`

export function genCssVarsFromList(
  vars: string[],
  id: string,
  isProd: boolean,
  isSSR = false
): string {
  return `{\n  ${vars
    .map(
      key => `"${isSSR ? `--` : ``}${genVarName(id, key, isProd)}": (${key})`
    )
    .join(',\n  ')}\n}`
}

function genVarName(id: string, raw: string, isProd: boolean): string {
  if (isProd) {
    return hash(id + raw)
  } else {
    return `${id}-${raw.replace(/([^\w-])/g, '_')}`
  }
}

function normalizeExpression(exp: string) {
  exp = exp.trim()
  if (
    (exp[0] === `'` && exp[exp.length - 1] === `'`) ||
    (exp[0] === `"` && exp[exp.length - 1] === `"`)
  ) {
    return exp.slice(1, -1)
  }
  return exp
}

const vBindRE = /v-bind\s*\(/g

export function parseCssVars(sfc: SFCDescriptor): string[] {
  const vars: string[] = []
  sfc.styles.forEach(style => {
    let match
    // ignore v-bind() in comments /* ... */
    const content = style.content.replace(/\/\*([\s\S]*?)\*\//g, '')
    while ((match = vBindRE.exec(content))) {
      const start = match.index + match[0].length
      const end = lexBinding(content, start)
      if (end !== null) {
        const variable = normalizeExpression(content.slice(start, end))
        if (!vars.includes(variable)) {
          vars.push(variable)
        }
      }
    }
  })
  return vars
}

const enum LexerState {
  inParens,
  inSingleQuoteString,
  inDoubleQuoteString
}

function lexBinding(content: string, start: number): number | null {
  let state: LexerState = LexerState.inParens
  let parenDepth = 0

  for (let i = start; i < content.length; i++) {
    const char = content.charAt(i)
    switch (state) {
      case LexerState.inParens:
        if (char === `'`) {
          state = LexerState.inSingleQuoteString
        } else if (char === `"`) {
          state = LexerState.inDoubleQuoteString
        } else if (char === `(`) {
          parenDepth++
        } else if (char === `)`) {
          if (parenDepth > 0) {
            parenDepth--
          } else {
            return i
          }
        }
        break
      case LexerState.inSingleQuoteString:
        if (char === `'`) {
          state = LexerState.inParens
        }
        break
      case LexerState.inDoubleQuoteString:
        if (char === `"`) {
          state = LexerState.inParens
        }
        break
    }
  }
  return null
}

// for compileStyle
export interface CssVarsPluginOptions {
  id: string
  isProd: boolean
}

export const cssVarsPlugin: PluginCreator<CssVarsPluginOptions> = opts => {
  const { id, isProd } = opts!
  return {
    postcssPlugin: 'vue-sfc-vars',
    Declaration(decl) {
      // rewrite CSS variables
      const value = decl.value
      if (vBindRE.test(value)) {
        vBindRE.lastIndex = 0
        let transformed = ''
        let lastIndex = 0
        let match
        while ((match = vBindRE.exec(value))) {
          const start = match.index + match[0].length
          const end = lexBinding(value, start)
          if (end !== null) {
            const variable = normalizeExpression(value.slice(start, end))
            transformed +=
              value.slice(lastIndex, match.index) +
              `var(--${genVarName(id, variable, isProd)})`
            lastIndex = end + 1
          }
        }
        decl.value = transformed + value.slice(lastIndex)
      }
    }
  }
}
cssVarsPlugin.postcss = true

export function genCssVarsCode(
  vars: string[],
  bindings: BindingMetadata,
  id: string,
  isProd: boolean
) {
  const varsExp = genCssVarsFromList(vars, id, isProd)
  return `_${CSS_VARS_HELPER}((_vm, _setup) => ${prefixIdentifiers(
    `(${varsExp})`,
    false,
    false,
    undefined,
    bindings
  )})`
}

// <script setup> already gets the calls injected as part of the transform
// this is only for single normal <script>
export function genNormalScriptCssVarsCode(
  cssVars: string[],
  bindings: BindingMetadata,
  id: string,
  isProd: boolean
): string {
  return (
    `\nimport { ${CSS_VARS_HELPER} as _${CSS_VARS_HELPER} } from 'vue'\n` +
    `const __injectCSSVars__ = () => {\n${genCssVarsCode(
      cssVars,
      bindings,
      id,
      isProd
    )}}\n` +
    `const __setup__ = __default__.setup\n` +
    `__default__.setup = __setup__\n` +
    `  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }\n` +
    `  : __injectCSSVars__\n`
  )
}
// API
export { parse } from './parse'
export { compileTemplate } from './compileTemplate'
export { compileStyle, compileStyleAsync } from './compileStyle'
export { compileScript } from './compileScript'
export { generateCodeFrame } from 'compiler/codeframe'
export { rewriteDefault } from './rewriteDefault'

// For backwards compat only. Some existing tools like
// fork-ts-checker-webpack-plugin relies on its presence for differentiating
// between Vue 2 and Vue 3.
// ref #12719
// ref https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/issues/765
export { parseComponent } from './parseComponent'

// types
export { SFCParseOptions } from './parse'
export { CompilerOptions, WarningMessage } from 'types/compiler'
export { TemplateCompiler } from './types'
export {
  SFCBlock,
  SFCCustomBlock,
  SFCScriptBlock,
  SFCDescriptor
} from './parseComponent'
export {
  SFCTemplateCompileOptions,
  SFCTemplateCompileResults
} from './compileTemplate'
export { SFCStyleCompileOptions, SFCStyleCompileResults } from './compileStyle'
export { SFCScriptCompileOptions } from './compileScript'
import { SourceMapGenerator } from 'source-map'
import { RawSourceMap, TemplateCompiler } from './types'
import {
  parseComponent,
  VueTemplateCompilerParseOptions,
  SFCDescriptor,
  DEFAULT_FILENAME
} from './parseComponent'

import hash from 'hash-sum'
import LRU from 'lru-cache'
import { hmrShouldReload } from './compileScript'
import { parseCssVars } from './cssVars'

const cache = new LRU<string, SFCDescriptor>(100)

const splitRE = /\r?\n/g
const emptyRE = /^(?:\/\/)?\s*$/

export interface SFCParseOptions {
  source: string
  filename?: string
  compiler?: TemplateCompiler
  compilerParseOptions?: VueTemplateCompilerParseOptions
  sourceRoot?: string
  sourceMap?: boolean
  /**
   * @deprecated use `sourceMap` instead.
   */
  needMap?: boolean
}

export function parse(options: SFCParseOptions): SFCDescriptor {
  const {
    source,
    filename = DEFAULT_FILENAME,
    compiler,
    compilerParseOptions = { pad: false } as VueTemplateCompilerParseOptions,
    sourceRoot = '',
    needMap = true,
    sourceMap = needMap
  } = options
  const cacheKey = hash(
    filename + source + JSON.stringify(compilerParseOptions)
  )

  let output = cache.get(cacheKey)
  if (output) {
    return output
  }

  if (compiler) {
    // user-provided compiler
    output = compiler.parseComponent(source, compilerParseOptions)
  } else {
    // use built-in compiler
    output = parseComponent(source, compilerParseOptions)
  }

  output.filename = filename

  // parse CSS vars
  output.cssVars = parseCssVars(output)

  output.shouldForceReload = prevImports =>
    hmrShouldReload(prevImports, output!)

  if (sourceMap) {
    if (output.script && !output.script.src) {
      output.script.map = generateSourceMap(
        filename,
        source,
        output.script.content,
        sourceRoot,
        compilerParseOptions.pad
      )
    }
    if (output.styles) {
      output.styles.forEach(style => {
        if (!style.src) {
          style.map = generateSourceMap(
            filename,
            source,
            style.content,
            sourceRoot,
            compilerParseOptions.pad
          )
        }
      })
    }
  }

  cache.set(cacheKey, output)
  return output
}

function generateSourceMap(
  filename: string,
  source: string,
  generated: string,
  sourceRoot: string,
  pad?: 'line' | 'space' | boolean
): RawSourceMap {
  const map = new SourceMapGenerator({
    file: filename.replace(/\\/g, '/'),
    sourceRoot: sourceRoot.replace(/\\/g, '/')
  })
  let offset = 0
  if (!pad) {
    offset = source.split(generated).shift()!.split(splitRE).length - 1
  }
  map.setSourceContent(filename, source)
  generated.split(splitRE).forEach((line, index) => {
    if (!emptyRE.test(line)) {
      map.addMapping({
        source: filename,
        original: {
          line: index + 1 + offset,
          column: 0
        },
        generated: {
          line: index + 1,
          column: 0
        }
      })
    }
  })
  return JSON.parse(map.toString())
}
import deindent from 'de-indent'
import { parseHTML } from 'compiler/parser/html-parser'
import { makeMap } from 'shared/util'
import { ASTAttr, WarningMessage } from 'types/compiler'
import { BindingMetadata, RawSourceMap } from './types'
import type { ImportBinding } from './compileScript'

export const DEFAULT_FILENAME = 'anonymous.vue'

const splitRE = /\r?\n/g
const replaceRE = /./g
const isSpecialTag = makeMap('script,style,template', true)

export interface SFCCustomBlock {
  type: string
  content: string
  attrs: { [key: string]: string | true }
  start: number
  end: number
  src?: string
  map?: RawSourceMap
}

export interface SFCBlock extends SFCCustomBlock {
  lang?: string
  scoped?: boolean
  module?: string | boolean
}

export interface SFCScriptBlock extends SFCBlock {
  type: 'script'
  setup?: string | boolean
  bindings?: BindingMetadata
  imports?: Record<string, ImportBinding>
  /**
   * import('\@babel/types').Statement
   */
  scriptAst?: any[]
  /**
   * import('\@babel/types').Statement
   */
  scriptSetupAst?: any[]
}

export interface SFCDescriptor {
  source: string
  filename: string
  template: SFCBlock | null
  script: SFCScriptBlock | null
  scriptSetup: SFCScriptBlock | null
  styles: SFCBlock[]
  customBlocks: SFCCustomBlock[]
  cssVars: string[]

  errors: (string | WarningMessage)[]

  /**
   * compare with an existing descriptor to determine whether HMR should perform
   * a reload vs. re-render.
   *
   * Note: this comparison assumes the prev/next script are already identical,
   * and only checks the special case where `<script setup lang="ts">` unused
   * import pruning result changes due to template changes.
   */
  shouldForceReload: (prevImports: Record<string, ImportBinding>) => boolean
}

export interface VueTemplateCompilerParseOptions {
  pad?: 'line' | 'space' | boolean
  deindent?: boolean
  outputSourceRange?: boolean
}

/**
 * Parse a single-file component (*.vue) file into an SFC Descriptor Object.
 */
export function parseComponent(
  source: string,
  options: VueTemplateCompilerParseOptions = {}
): SFCDescriptor {
  const sfc: SFCDescriptor = {
    source,
    filename: DEFAULT_FILENAME,
    template: null,
    script: null,
    scriptSetup: null, // TODO
    styles: [],
    customBlocks: [],
    cssVars: [],
    errors: [],
    shouldForceReload: null as any // attached in parse() by compiler-sfc
  }
  let depth = 0
  let currentBlock: SFCBlock | null = null

  let warn: any = msg => {
    sfc.errors.push(msg)
  }

  if (__DEV__ && options.outputSourceRange) {
    warn = (msg, range) => {
      const data: WarningMessage = { msg }
      if (range.start != null) {
        data.start = range.start
      }
      if (range.end != null) {
        data.end = range.end
      }
      sfc.errors.push(data)
    }
  }

  function start(
    tag: string,
    attrs: ASTAttr[],
    unary: boolean,
    start: number,
    end: number
  ) {
    if (depth === 0) {
      currentBlock = {
        type: tag,
        content: '',
        start: end,
        end: 0, // will be set on tag close
        attrs: attrs.reduce((cumulated, { name, value }) => {
          cumulated[name] = value || true
          return cumulated
        }, {})
      }

      if (typeof currentBlock.attrs.src === 'string') {
        currentBlock.src = currentBlock.attrs.src
      }

      if (isSpecialTag(tag)) {
        checkAttrs(currentBlock, attrs)
        if (tag === 'script') {
          const block = currentBlock as SFCScriptBlock
          if (block.attrs.setup) {
            block.setup = currentBlock.attrs.setup
            sfc.scriptSetup = block
          } else {
            sfc.script = block
          }
        } else if (tag === 'style') {
          sfc.styles.push(currentBlock)
        } else {
          sfc[tag] = currentBlock
        }
      } else {
        // custom blocks
        sfc.customBlocks.push(currentBlock)
      }
    }
    if (!unary) {
      depth++
    }
  }

  function checkAttrs(block: SFCBlock, attrs: ASTAttr[]) {
    for (let i = 0; i < attrs.length; i++) {
      const attr = attrs[i]
      if (attr.name === 'lang') {
        block.lang = attr.value
      }
      if (attr.name === 'scoped') {
        block.scoped = true
      }
      if (attr.name === 'module') {
        block.module = attr.value || true
      }
    }
  }

  function end(tag: string, start: number) {
    if (depth === 1 && currentBlock) {
      currentBlock.end = start
      let text = source.slice(currentBlock.start, currentBlock.end)
      if (
        options.deindent === true ||
        // by default, deindent unless it's script with default lang or (j/t)sx?
        (options.deindent !== false &&
          !(
            currentBlock.type === 'script' &&
            (!currentBlock.lang || /^(j|t)sx?$/.test(currentBlock.lang))
          ))
      ) {
        text = deindent(text)
      }
      // pad content so that linters and pre-processors can output correct
      // line numbers in errors and warnings
      if (currentBlock.type !== 'template' && options.pad) {
        text = padContent(currentBlock, options.pad) + text
      }
      currentBlock.content = text
      currentBlock = null
    }
    depth--
  }

  function padContent(block: SFCBlock, pad: true | 'line' | 'space') {
    if (pad === 'space') {
      return source.slice(0, block.start).replace(replaceRE, ' ')
    } else {
      const offset = source.slice(0, block.start).split(splitRE).length
      const padChar = block.type === 'script' && !block.lang ? '//\n' : '\n'
      return Array(offset).join(padChar)
    }
  }

  parseHTML(source, {
    warn,
    start,
    end,
    outputSourceRange: options.outputSourceRange
  })

  return sfc
}
import MagicString from 'magic-string'
import { parseExpression, ParserOptions, ParserPlugin } from '@babel/parser'
import { makeMap } from 'shared/util'
import { isStaticProperty, walkIdentifiers } from './babelUtils'
import { BindingMetadata } from './types'

const doNotPrefix = makeMap(
  'Infinity,undefined,NaN,isFinite,isNaN,' +
    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
    'require,' + // for webpack
    'arguments,' + // parsed as identifier but is a special keyword...
    '_c' // cached to save property access
)

/**
 * The input is expected to be a valid expression.
 */
export function prefixIdentifiers(
  source: string,
  isFunctional = false,
  isTS = false,
  babelOptions: ParserOptions = {},
  bindings?: BindingMetadata
) {
  const s = new MagicString(source)

  const plugins: ParserPlugin[] = [
    ...(isTS ? (['typescript'] as const) : []),
    ...(babelOptions?.plugins || [])
  ]

  const ast = parseExpression(source, {
    ...babelOptions,
    plugins
  })

  const isScriptSetup = bindings && bindings.__isScriptSetup !== false

  walkIdentifiers(
    ast,
    (ident, parent) => {
      const { name } = ident
      if (doNotPrefix(name)) {
        return
      }

      let prefix = `_vm.`
      if (isScriptSetup) {
        const type = bindings[name]
        if (type && type.startsWith('setup')) {
          prefix = `_setup.`
        }
      }

      if (isStaticProperty(parent) && parent.shorthand) {
        // property shorthand like { foo }, we need to add the key since
        // we rewrite the value
        // { foo } -> { foo: _vm.foo }
        s.appendLeft(ident.end!, `: ${prefix}${name}`)
      } else {
        s.prependRight(ident.start!, prefix)
      }
    },
    node => {
      if (node.type === 'WithStatement') {
        s.remove(node.start!, node.body.start! + 1)
        s.remove(node.end! - 1, node.end!)
        if (!isFunctional) {
          s.prependRight(
            node.start!,
            `var _vm=this,_c=_vm._self._c${
              isScriptSetup ? `,_setup=_vm._self._setupProxy;` : `;`
            }`
          )
        }
      }
    }
  )

  return s.toString()
}
import { parse, ParserPlugin } from '@babel/parser'
import MagicString from 'magic-string'

const defaultExportRE = /((?:^|\n|;)\s*)export(\s*)default/
const namedDefaultExportRE = /((?:^|\n|;)\s*)export(.+)(?:as)?(\s*)default/s
const exportDefaultClassRE =
  /((?:^|\n|;)\s*)export\s+default\s+class\s+([\w$]+)/

/**
 * Utility for rewriting `export default` in a script block into a variable
 * declaration so that we can inject things into it
 */
export function rewriteDefault(
  input: string,
  as: string,
  parserPlugins?: ParserPlugin[]
): string {
  if (!hasDefaultExport(input)) {
    return input + `\nconst ${as} = {}`
  }

  let replaced: string | undefined

  const classMatch = input.match(exportDefaultClassRE)
  if (classMatch) {
    replaced =
      input.replace(exportDefaultClassRE, '$1class $2') +
      `\nconst ${as} = ${classMatch[2]}`
  } else {
    replaced = input.replace(defaultExportRE, `$1const ${as} =`)
  }
  if (!hasDefaultExport(replaced)) {
    return replaced
  }

  // if the script somehow still contains `default export`, it probably has
  // multi-line comments or template strings. fallback to a full parse.
  const s = new MagicString(input)
  const ast = parse(input, {
    sourceType: 'module',
    plugins: parserPlugins
  }).program.body
  ast.forEach(node => {
    if (node.type === 'ExportDefaultDeclaration') {
      if (node.declaration.type === 'ClassDeclaration') {
        s.overwrite(node.start!, node.declaration.id.start!, `class `)
        s.append(`\nconst ${as} = ${node.declaration.id.name}`)
      } else {
        s.overwrite(node.start!, node.declaration.start!, `const ${as} = `)
      }
    }
    if (node.type === 'ExportNamedDeclaration') {
      for (const specifier of node.specifiers) {
        if (
          specifier.type === 'ExportSpecifier' &&
          specifier.exported.type === 'Identifier' &&
          specifier.exported.name === 'default'
        ) {
          if (node.source) {
            if (specifier.local.name === 'default') {
              const end = specifierEnd(input, specifier.local.end!, node.end)
              s.prepend(
                `import { default as __VUE_DEFAULT__ } from '${node.source.value}'\n`
              )
              s.overwrite(specifier.start!, end, ``)
              s.append(`\nconst ${as} = __VUE_DEFAULT__`)
              continue
            } else {
              const end = specifierEnd(input, specifier.exported.end!, node.end)
              s.prepend(
                `import { ${input.slice(
                  specifier.local.start!,
                  specifier.local.end!
                )} } from '${node.source.value}'\n`
              )
              s.overwrite(specifier.start!, end, ``)
              s.append(`\nconst ${as} = ${specifier.local.name}`)
              continue
            }
          }
          const end = specifierEnd(input, specifier.end!, node.end)
          s.overwrite(specifier.start!, end, ``)
          s.append(`\nconst ${as} = ${specifier.local.name}`)
        }
      }
    }
  })
  return s.toString()
}

export function hasDefaultExport(input: string): boolean {
  return defaultExportRE.test(input) || namedDefaultExportRE.test(input)
}

function specifierEnd(
  input: string,
  end: number,
  nodeEnd: number | undefined | null
) {
  // export { default   , foo } ...
  let hasCommas = false
  let oldEnd = end
  while (end < nodeEnd!) {
    if (/\s/.test(input.charAt(end))) {
      end++
    } else if (input.charAt(end) === ',') {
      end++
      hasCommas = true
      break
    } else if (input.charAt(end) === '}') {
      break
    }
  }
  return hasCommas ? end : oldEnd
}
import { PluginCreator, Rule, AtRule } from 'postcss'
import selectorParser from 'postcss-selector-parser'

const animationNameRE = /^(-\w+-)?animation-name$/
const animationRE = /^(-\w+-)?animation$/

const scopedPlugin: PluginCreator<string> = (id = '') => {
  const keyframes = Object.create(null)
  const shortId = id.replace(/^data-v-/, '')

  return {
    postcssPlugin: 'vue-sfc-scoped',
    Rule(rule) {
      processRule(id, rule)
    },
    AtRule(node) {
      if (
        /-?keyframes$/.test(node.name) &&
        !node.params.endsWith(`-${shortId}`)
      ) {
        // register keyframes
        keyframes[node.params] = node.params = node.params + '-' + shortId
      }
    },
    OnceExit(root) {
      if (Object.keys(keyframes).length) {
        // If keyframes are found in this <style>, find and rewrite animation names
        // in declarations.
        // Caveat: this only works for keyframes and animation rules in the same
        // <style> element.
        // individual animation-name declaration
        root.walkDecls(decl => {
          if (animationNameRE.test(decl.prop)) {
            decl.value = decl.value
              .split(',')
              .map(v => keyframes[v.trim()] || v.trim())
              .join(',')
          }
          // shorthand
          if (animationRE.test(decl.prop)) {
            decl.value = decl.value
              .split(',')
              .map(v => {
                const vals = v.trim().split(/\s+/)
                const i = vals.findIndex(val => keyframes[val])
                if (i !== -1) {
                  vals.splice(i, 1, keyframes[vals[i]])
                  return vals.join(' ')
                } else {
                  return v
                }
              })
              .join(',')
          }
        })
      }
    }
  }
}

const processedRules = new WeakSet<Rule>()

function processRule(id: string, rule: Rule) {
  if (
    processedRules.has(rule) ||
    (rule.parent &&
      rule.parent.type === 'atrule' &&
      /-?keyframes$/.test((rule.parent as AtRule).name))
  ) {
    return
  }
  processedRules.add(rule)
  rule.selector = selectorParser(selectorRoot => {
    selectorRoot.each(selector => {
      rewriteSelector(id, selector, selectorRoot)
    })
  }).processSync(rule.selector)
}

function rewriteSelector(
  id: string,
  selector: selectorParser.Selector,
  selectorRoot: selectorParser.Root
) {
  let node: selectorParser.Node | null = null
  let shouldInject = true
  // find the last child node to insert attribute selector
  selector.each(n => {
    // DEPRECATED ">>>" and "/deep/" combinator
    if (
      n.type === 'combinator' &&
      (n.value === '>>>' || n.value === '/deep/')
    ) {
      n.value = ' '
      n.spaces.before = n.spaces.after = ''
      // warn(
      //   `the >>> and /deep/ combinators have been deprecated. ` +
      //     `Use :deep() instead.`
      // )
      return false
    }

    if (n.type === 'pseudo') {
      const { value } = n
      // deep: inject [id] attribute at the node before the ::v-deep
      // combinator.
      if (value === ':deep' || value === '::v-deep') {
        if (n.nodes.length) {
          // .foo ::v-deep(.bar) -> .foo[xxxxxxx] .bar
          // replace the current node with ::v-deep's inner selector
          let last: selectorParser.Selector['nodes'][0] = n
          n.nodes[0].each(ss => {
            selector.insertAfter(last, ss)
            last = ss
          })
          // insert a space combinator before if it doesn't already have one
          const prev = selector.at(selector.index(n) - 1)
          if (!prev || !isSpaceCombinator(prev)) {
            selector.insertAfter(
              n,
              selectorParser.combinator({
                value: ' '
              })
            )
          }
          selector.removeChild(n)
        } else {
          // DEPRECATED usage in v3
          // .foo ::v-deep .bar -> .foo[xxxxxxx] .bar
          // warn(
          //   `::v-deep usage as a combinator has ` +
          //     `been deprecated. Use :deep(<inner-selector>) instead.`
          // )
          const prev = selector.at(selector.index(n) - 1)
          if (prev && isSpaceCombinator(prev)) {
            selector.removeChild(prev)
          }
          selector.removeChild(n)
        }
        return false
      }

      // !!! Vue 2 does not have :slotted support
      // ::v-slotted(.foo) -> .foo[xxxxxxx-s]
      // if (value === ':slotted' || value === '::v-slotted') {
      //   rewriteSelector(id, n.nodes[0], selectorRoot, true /* slotted */)
      //   let last: selectorParser.Selector['nodes'][0] = n
      //   n.nodes[0].each(ss => {
      //     selector.insertAfter(last, ss)
      //     last = ss
      //   })
      //   // selector.insertAfter(n, n.nodes[0])
      //   selector.removeChild(n)
      //   // since slotted attribute already scopes the selector there's no
      //   // need for the non-slot attribute.
      //   shouldInject = false
      //   return false
      // }

      // global: replace with inner selector and do not inject [id].
      // ::v-global(.foo) -> .foo
      if (value === ':global' || value === '::v-global') {
        selectorRoot.insertAfter(selector, n.nodes[0])
        selectorRoot.removeChild(selector)
        return false
      }
    }

    if (n.type !== 'pseudo' && n.type !== 'combinator') {
      node = n
    }
  })

  if (node) {
    ;(node as selectorParser.Node).spaces.after = ''
  } else {
    // For deep selectors & standalone pseudo selectors,
    // the attribute selectors are prepended rather than appended.
    // So all leading spaces must be eliminated to avoid problems.
    selector.first.spaces.before = ''
  }

  if (shouldInject) {
    selector.insertAfter(
      // If node is null it means we need to inject [id] at the start
      // insertAfter can handle `null` here
      node as any,
      selectorParser.attribute({
        attribute: id,
        value: id,
        raws: {},
        quoteMark: `"`
      })
    )
  }
}

function isSpaceCombinator(node: selectorParser.Node) {
  return node.type === 'combinator' && /^\s+$/.test(node.value)
}

scopedPlugin.postcss = true
export default scopedPlugin
import { PluginCreator } from 'postcss'

const trimPlugin: PluginCreator<{}> = () => {
  return {
    postcssPlugin: 'vue-sfc-trim',
    Once(root) {
      root.walk(({ type, raws }) => {
        if (type === 'rule' || type === 'atrule') {
          if (raws.before) raws.before = '\n'
          if ('after' in raws && raws.after) raws.after = '\n'
        }
      })
    }
  }
}

trimPlugin.postcss = true
export default trimPlugin
import merge from 'merge-source-map'
import { RawSourceMap } from 'source-map'
import { isFunction } from 'shared/util'

export type StylePreprocessor = (
  source: string,
  map: RawSourceMap | undefined,
  options: {
    [key: string]: any
    additionalData?: string | ((source: string, filename: string) => string)
    filename: string
  }
) => StylePreprocessorResults

export interface StylePreprocessorResults {
  code: string
  map?: object
  errors: Error[]
  dependencies: string[]
}

// .scss/.sass processor
const scss: StylePreprocessor = (source, map, options) => {
  const nodeSass = require('sass')
  const finalOptions = {
    ...options,
    data: getSource(source, options.filename, options.additionalData),
    file: options.filename,
    outFile: options.filename,
    sourceMap: !!map
  }

  try {
    const result = nodeSass.renderSync(finalOptions)
    const dependencies = result.stats.includedFiles
    if (map) {
      return {
        code: result.css.toString(),
        map: merge(map, JSON.parse(result.map.toString())),
        errors: [],
        dependencies
      }
    }

    return { code: result.css.toString(), errors: [], dependencies }
  } catch (e: any) {
    return { code: '', errors: [e], dependencies: [] }
  }
}

const sass: StylePreprocessor = (source, map, options) =>
  scss(source, map, {
    ...options,
    indentedSyntax: true
  })

// .less
const less: StylePreprocessor = (source, map, options) => {
  const nodeLess = require('less')

  let result: any
  let error: Error | null = null
  nodeLess.render(
    getSource(source, options.filename, options.additionalData),
    { ...options, syncImport: true },
    (err: Error | null, output: any) => {
      error = err
      result = output
    }
  )

  if (error) return { code: '', errors: [error], dependencies: [] }
  const dependencies = result.imports
  if (map) {
    return {
      code: result.css.toString(),
      map: merge(map, result.map),
      errors: [],
      dependencies: dependencies
    }
  }

  return {
    code: result.css.toString(),
    errors: [],
    dependencies: dependencies
  }
}

// .styl
const styl: StylePreprocessor = (source, map, options) => {
  const nodeStylus = require('stylus')
  try {
    const ref = nodeStylus(source)
    Object.keys(options).forEach(key => ref.set(key, options[key]))
    if (map) ref.set('sourcemap', { inline: false, comment: false })

    const result = ref.render()
    const dependencies = ref.deps()
    if (map) {
      return {
        code: result,
        map: merge(map, ref.sourcemap),
        errors: [],
        dependencies
      }
    }

    return { code: result, errors: [], dependencies }
  } catch (e: any) {
    return { code: '', errors: [e], dependencies: [] }
  }
}

function getSource(
  source: string,
  filename: string,
  additionalData?: string | ((source: string, filename: string) => string)
) {
  if (!additionalData) return source
  if (isFunction(additionalData)) {
    return additionalData(source, filename)
  }
  return additionalData + source
}

export type PreprocessLang = 'less' | 'sass' | 'scss' | 'styl' | 'stylus'

export const processors: Record<PreprocessLang, StylePreprocessor> = {
  less,
  sass,
  scss,
  styl,
  stylus: styl
}
// vue compiler module for transforming `<tag>:<attribute>` to `require`

import { urlToRequire } from './utils'
import { ASTNode, ASTAttr } from 'types/compiler'

export interface AssetURLOptions {
  [name: string]: string | string[]
}

export interface TransformAssetUrlsOptions {
  /**
   * If base is provided, instead of transforming relative asset urls into
   * imports, they will be directly rewritten to absolute urls.
   */
  base?: string
  /**
   * If true, also processes absolute urls.
   */
  includeAbsolute?: boolean
}

const defaultOptions: AssetURLOptions = {
  audio: 'src',
  video: ['src', 'poster'],
  source: 'src',
  img: 'src',
  image: ['xlink:href', 'href'],
  use: ['xlink:href', 'href']
}

export default (
  userOptions?: AssetURLOptions,
  transformAssetUrlsOption?: TransformAssetUrlsOptions
) => {
  const options = userOptions
    ? Object.assign({}, defaultOptions, userOptions)
    : defaultOptions

  return {
    postTransformNode: (node: ASTNode) => {
      transform(node, options, transformAssetUrlsOption)
    }
  }
}

function transform(
  node: ASTNode,
  options: AssetURLOptions,
  transformAssetUrlsOption?: TransformAssetUrlsOptions
) {
  if (node.type !== 1 || !node.attrs) return
  for (const tag in options) {
    if (tag === '*' || node.tag === tag) {
      const attributes = options[tag]
      if (typeof attributes === 'string') {
        node.attrs!.some(attr =>
          rewrite(attr, attributes, transformAssetUrlsOption)
        )
      } else if (Array.isArray(attributes)) {
        attributes.forEach(item =>
          node.attrs!.some(attr =>
            rewrite(attr, item, transformAssetUrlsOption)
          )
        )
      }
    }
  }
}

function rewrite(
  attr: ASTAttr,
  name: string,
  transformAssetUrlsOption?: TransformAssetUrlsOptions
) {
  if (attr.name === name) {
    const value = attr.value
    // only transform static URLs
    if (value.charAt(0) === '"' && value.charAt(value.length - 1) === '"') {
      attr.value = urlToRequire(value.slice(1, -1), transformAssetUrlsOption)
      return true
    }
  }
  return false
}
// vue compiler module for transforming `img:srcset` to a number of `require`s

import { urlToRequire } from './utils'
import { TransformAssetUrlsOptions } from './assetUrl'
import { ASTNode } from 'types/compiler'

interface ImageCandidate {
  require: string
  descriptor: string
}

export default (transformAssetUrlsOptions?: TransformAssetUrlsOptions) => ({
  postTransformNode: (node: ASTNode) => {
    transform(node, transformAssetUrlsOptions)
  }
})

// http://w3c.github.io/html/semantics-embedded-content.html#ref-for-image-candidate-string-5
const escapedSpaceCharacters = /( |\\t|\\n|\\f|\\r)+/g

function transform(
  node: ASTNode,
  transformAssetUrlsOptions?: TransformAssetUrlsOptions
) {
  if (node.type !== 1 || !node.attrs) {
    return
  }

  if (node.tag === 'img' || node.tag === 'source') {
    node.attrs.forEach(attr => {
      if (attr.name === 'srcset') {
        // same logic as in transform-require.js
        const value = attr.value
        const isStatic =
          value.charAt(0) === '"' && value.charAt(value.length - 1) === '"'
        if (!isStatic) {
          return
        }

        const imageCandidates: ImageCandidate[] = value
          .slice(1, -1)
          .split(',')
          .map(s => {
            // The attribute value arrives here with all whitespace, except
            // normal spaces, represented by escape sequences
            const [url, descriptor] = s
              .replace(escapedSpaceCharacters, ' ')
              .trim()
              .split(' ', 2)
            return {
              require: urlToRequire(url, transformAssetUrlsOptions),
              descriptor
            }
          })

        // "require(url1)"
        // "require(url1) 1x"
        // "require(url1), require(url2)"
        // "require(url1), require(url2) 2x"
        // "require(url1) 1x, require(url2)"
        // "require(url1) 1x, require(url2) 2x"
        const code = imageCandidates
          .map(
            ({ require, descriptor }) =>
              `${require} + "${descriptor ? ' ' + descriptor : ''}, " + `
          )
          .join('')
          .slice(0, -6)
          .concat('"')
          .replace(/ \+ ""$/, '')

        attr.value = code
      }
    })
  }
}
import { TransformAssetUrlsOptions } from './assetUrl'
import { UrlWithStringQuery, parse as uriParse } from 'url'
import path from 'path'

export function urlToRequire(
  url: string,
  transformAssetUrlsOption: TransformAssetUrlsOptions = {}
): string {
  const returnValue = `"${url}"`
  // same logic as in transform-require.js
  const firstChar = url.charAt(0)
  if (firstChar === '~') {
    const secondChar = url.charAt(1)
    url = url.slice(secondChar === '/' ? 2 : 1)
  }

  if (isExternalUrl(url) || isDataUrl(url) || firstChar === '#') {
    return returnValue
  }

  const uriParts = parseUriParts(url)
  if (transformAssetUrlsOption.base) {
    // explicit base - directly rewrite the url into absolute url
    // does not apply to absolute urls or urls that start with `@`
    // since they are aliases
    if (firstChar === '.' || firstChar === '~') {
      // Allow for full hostnames provided in options.base
      const base = parseUriParts(transformAssetUrlsOption.base)
      const protocol = base.protocol || ''
      const host = base.host ? protocol + '//' + base.host : ''
      const basePath = base.path || '/'
      // when packaged in the browser, path will be using the posix-
      // only version provided by rollup-plugin-node-builtins.
      return `"${host}${(path.posix || path).join(
        basePath,
        uriParts.path + (uriParts.hash || '')
      )}"`
    }
  }

  if (
    transformAssetUrlsOption.includeAbsolute ||
    firstChar === '.' ||
    firstChar === '~' ||
    firstChar === '@'
  ) {
    if (!uriParts.hash) {
      return `require("${url}")`
    } else {
      // support uri fragment case by excluding it from
      // the require and instead appending it as string;
      // assuming that the path part is sufficient according to
      // the above caseing(t.i. no protocol-auth-host parts expected)
      return `require("${uriParts.path}") + "${uriParts.hash}"`
    }
  }
  return returnValue
}

/**
 * vuejs/component-compiler-utils#22 Support uri fragment in transformed require
 * @param urlString an url as a string
 */
function parseUriParts(urlString: string): UrlWithStringQuery {
  // initialize return value
  const returnValue: UrlWithStringQuery = uriParse('')
  if (urlString) {
    // A TypeError is thrown if urlString is not a string
    // @see https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost
    if ('string' === typeof urlString) {
      // check is an uri
      return uriParse(urlString, false, true) // take apart the uri
    }
  }
  return returnValue
}

const externalRE = /^(https?:)?\/\//
function isExternalUrl(url: string): boolean {
  return externalRE.test(url)
}

const dataUrlRE = /^\s*data:/i
function isDataUrl(url: string): boolean {
  return dataUrlRE.test(url)
}
import { CompilerOptions, CompiledResult } from 'types/compiler'
import { SFCDescriptor } from './parseComponent'

export interface StartOfSourceMap {
  file?: string
  sourceRoot?: string
}

export interface RawSourceMap extends StartOfSourceMap {
  version: string
  sources: string[]
  names: string[]
  sourcesContent?: string[]
  mappings: string
}

export interface TemplateCompiler {
  parseComponent(source: string, options?: any): SFCDescriptor
  compile(template: string, options: CompilerOptions): CompiledResult
  ssrCompile(template: string, options: CompilerOptions): CompiledResult
}

export const enum BindingTypes {
  /**
   * returned from data()
   */
  DATA = 'data',
  /**
   * declared as a prop
   */
  PROPS = 'props',
  /**
   * a local alias of a `<script setup>` destructured prop.
   * the original is stored in __propsAliases of the bindingMetadata object.
   */
  PROPS_ALIASED = 'props-aliased',
  /**
   * a let binding (may or may not be a ref)
   */
  SETUP_LET = 'setup-let',
  /**
   * a const binding that can never be a ref.
   * these bindings don't need `unref()` calls when processed in inlined
   * template expressions.
   */
  SETUP_CONST = 'setup-const',
  /**
   * a const binding that does not need `unref()`, but may be mutated.
   */
  SETUP_REACTIVE_CONST = 'setup-reactive-const',
  /**
   * a const binding that may be a ref.
   */
  SETUP_MAYBE_REF = 'setup-maybe-ref',
  /**
   * bindings that are guaranteed to be refs
   */
  SETUP_REF = 'setup-ref',
  /**
   * declared by other options, e.g. computed, inject
   */
  OPTIONS = 'options'
}

export type BindingMetadata = {
  [key: string]: BindingTypes | undefined
} & {
  __isScriptSetup?: boolean
}
const hasWarned: Record<string, boolean> = {}

export function warnOnce(msg: string) {
  const isNodeProd =
    typeof process !== 'undefined' && process.env.NODE_ENV === 'production'
  if (!isNodeProd && !hasWarned[msg]) {
    hasWarned[msg] = true
    warn(msg)
  }
}

export function warn(msg: string) {
  console.warn(
    `\x1b[1m\x1b[33m[@vue/compiler-sfc]\x1b[0m\x1b[33m ${msg}\x1b[0m\n`
  )
}
// Vitest Snapshot v1

exports[`SFC analyze <script> bindings > auto name inference > basic 1`] = `
"export default {
  __name: 'FooBar',
  setup(__props) {
const a = 1
return { a }
}

}"
`;

exports[`SFC analyze <script> bindings > auto name inference > do not overwrite manual name (call) 1`] = `
"import { defineComponent } from 'vue'
        const __default__ = defineComponent({
          name: 'Baz'
        })
        
export default /*#__PURE__*/Object.assign(__default__, {
  setup(__props) {
const a = 1
return { a }
}

})"
`;

exports[`SFC analyze <script> bindings > auto name inference > do not overwrite manual name (object) 1`] = `
"const __default__ = {
          name: 'Baz'
        }
        
export default /*#__PURE__*/Object.assign(__default__, {
  setup(__props) {
const a = 1
return { a }
}

})"
`;

exports[`SFC compile <script setup> > <script> after <script setup> the script content not end with \`\\n\` 1`] = `
"const n = 1
import { x } from './x'
    
export default {
  setup(__props) {

    
return { n, x }
}

}"
`;

exports[`SFC compile <script setup> > <script> and <script setup> co-usage > script first 1`] = `
"import { x } from './x'
      
      export const n = 1

      const __default__ = {}
      
export default /*#__PURE__*/Object.assign(__default__, {
  setup(__props) {

      x()
      
return { n, x }
}

})"
`;

exports[`SFC compile <script setup> > <script> and <script setup> co-usage > script setup first 1`] = `
"export const n = 1
      const __default__ = {}
      
import { x } from './x'
      
export default /*#__PURE__*/Object.assign(__default__, {
  setup(__props) {

      x()
      
return { n, x }
}

})"
`;

exports[`SFC compile <script setup> > <script> and <script setup> co-usage > script setup first, lang="ts", script block content export default 1`] = `
"import { defineComponent as _defineComponent } from 'vue'

      const __default__ = {
        name: \\"test\\"
      }
      
import { x } from './x'
      
export default /*#__PURE__*/_defineComponent({
  ...__default__,
  setup(__props) {

      x()
      
return { x }
}

})"
`;

exports[`SFC compile <script setup> > <script> and <script setup> co-usage > script setup first, named default export 1`] = `
"export const n = 1
      const def = {}
      
      
const __default__ = def

import { x } from './x'
      
export default /*#__PURE__*/Object.assign(__default__, {
  setup(__props) {

      x()
      
return { n, def, x }
}

})"
`;

exports[`SFC compile <script setup> > <script> and <script setup> co-usage > spaces in ExportDefaultDeclaration node > with many spaces and newline 1`] = `
"import { x } from './x'
        
        export const n = 1
        const __default__ = {
          some:'option'
        }
        
export default /*#__PURE__*/Object.assign(__default__, {
  setup(__props) {

        x()
        
return { n, x }
}

})"
`;

exports[`SFC compile <script setup> > <script> and <script setup> co-usage > spaces in ExportDefaultDeclaration node > with minimal spaces 1`] = `
"import { x } from './x'
        
        export const n = 1
        const __default__ = {
          some:'option'
        }
        
export default /*#__PURE__*/Object.assign(__default__, {
  setup(__props) {

        x()
        
return { n, x }
}

})"
`;

exports[`SFC compile <script setup> > binding analysis for destructure 1`] = `
"export default {
  setup(__props) {

      const { foo, b: bar, ['x' + 'y']: baz, x: { y, zz: { z }}} = {}
      
return { foo, bar, baz, y, z }
}

}"
`;

exports[`SFC compile <script setup> > defineEmits() 1`] = `
"export default {
  emits: ['foo', 'bar'],
  setup(__props, { emit: myEmit }) {



return { myEmit }
}

}"
`;

exports[`SFC compile <script setup> > defineExpose() 1`] = `
"export default {
  setup(__props, { expose }) {

expose({ foo: 123 })

return {  }
}

}"
`;

exports[`SFC compile <script setup> > defineProps w/ external definition 1`] = `
"import { propsModel } from './props'
    
export default {
  props: propsModel,
  setup(__props) {

const props = __props

    
    
return { props, propsModel }
}

}"
`;

exports[`SFC compile <script setup> > defineProps w/ leading code 1`] = `
"import { x } from './x'
    
export default {
  props: {},
  setup(__props) {

const props = __props

    
return { props, x }
}

}"
`;

exports[`SFC compile <script setup> > defineProps() 1`] = `
"export default {
  props: {
  foo: String
},
  setup(__props) {

const props = __props


const bar = 1

return { props, bar }
}

}"
`;

exports[`SFC compile <script setup> > defineProps/defineEmits in multi-variable declaration (full removal) 1`] = `
"export default {
  props: ['item'],
  emits: ['a'],
  setup(__props, { emit }) {

const props = __props

    
    
return { props, emit }
}

}"
`;

exports[`SFC compile <script setup> > defineProps/defineEmits in multi-variable declaration 1`] = `
"export default {
  props: ['item'],
  emits: ['a'],
  setup(__props, { emit }) {

const props = __props

    const a = 1;
    
return { props, a, emit }
}

}"
`;

exports[`SFC compile <script setup> > dev mode import usage check > TS annotations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Baz, Qux, Fred } from './x'
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        const a = 1
        function b() {}
        
return { a, b, Baz }
}

})"
`;

exports[`SFC compile <script setup> > dev mode import usage check > attribute expressions 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { bar, baz } from './x'
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        const cond = true
        
return { cond, bar, baz }
}

})"
`;

exports[`SFC compile <script setup> > dev mode import usage check > components 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { FooBar, FooBaz, FooQux, foo } from './x'
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        const fooBar: FooBar = 1
        
return { fooBar, FooBaz, FooQux, foo }
}

})"
`;

exports[`SFC compile <script setup> > dev mode import usage check > directive 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { vMyDir } from './x'
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        
return { vMyDir }
}

})"
`;

exports[`SFC compile <script setup> > dev mode import usage check > js template string interpolations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { VAR, VAR2, VAR3 } from './x'
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        
return { VAR, VAR3 }
}

})"
`;

exports[`SFC compile <script setup> > dev mode import usage check > last tag 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { FooBaz, Last } from './x'
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        
return { FooBaz, Last }
}

})"
`;

exports[`SFC compile <script setup> > dev mode import usage check > vue interpolations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { x, y, z, x$y } from './x'
      
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

      
return { x, z, x$y }
}

})"
`;

exports[`SFC compile <script setup> > errors > should allow defineProps/Emit() referencing imported binding 1`] = `
"import { bar } from './bar'
        
export default {
  props: {
          foo: {
            default: () => bar
          }
        },
  emits: {
          foo: () => bar > 1
        },
  setup(__props) {

        
        
        
return { bar }
}

}"
`;

exports[`SFC compile <script setup> > errors > should allow defineProps/Emit() referencing scope var 1`] = `
"export default {
  props: {
            foo: {
              default: bar => bar + 1
            }
          },
  emits: {
            foo: bar => bar > 1
          },
  setup(__props) {

          const bar = 1
          
          
        
return { bar }
}

}"
`;

exports[`SFC compile <script setup> > imports > import dedupe between <script> and <script setup> 1`] = `
"import { x } from './x'
        
export default {
  setup(__props) {

        x()
        
return { x }
}

}"
`;

exports[`SFC compile <script setup> > imports > should allow defineProps/Emit at the start of imports 1`] = `
"import { ref } from 'vue'
      
export default {
  props: ['foo'],
  emits: ['bar'],
  setup(__props) {

      
      
      const r = ref(0)
      
return { r, ref }
}

}"
`;

exports[`SFC compile <script setup> > imports > should extract comment for import or type declarations 1`] = `
"import a from 'a' // comment
        import b from 'b'
        
export default {
  setup(__props) {

        
return { a, b }
}

}"
`;

exports[`SFC compile <script setup> > imports > should hoist and expose imports 1`] = `
"import { ref } from 'vue'
          import 'foo/css'
        
export default {
  setup(__props) {

          
return { ref }
}

}"
`;

exports[`SFC compile <script setup> > should expose top level declarations 1`] = `
"import { xx } from './x'
      let aa = 1
      const bb = 2
      function cc() {}
      class dd {}
      
import { x } from './x'
      
export default {
  setup(__props) {

      let a = 1
      const b = 2
      function c() {}
      class d {}
      
return { aa, bb, cc, dd, a, b, c, d, xx, x }
}

}"
`;

exports[`SFC compile <script setup> > with TypeScript > const Enum 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
const enum Foo { A = 123 }
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        
return { Foo }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineEmits w/ type (exported interface) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
export interface Emits { (e: 'foo' | 'bar'): void }
      
export default /*#__PURE__*/_defineComponent({
  emits: [\\"foo\\", \\"bar\\"],
  setup(__props, { emit }: { emit: ({ (e: 'foo' | 'bar'): void }), expose: any, slots: any, attrs: any }) {

      
      
return { emit }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineEmits w/ type (exported type alias) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
export type Emits = { (e: 'foo' | 'bar'): void }
      
export default /*#__PURE__*/_defineComponent({
  emits: [\\"foo\\", \\"bar\\"],
  setup(__props, { emit }: { emit: ({ (e: 'foo' | 'bar'): void }), expose: any, slots: any, attrs: any }) {

      
      
return { emit }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineEmits w/ type (interface) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
interface Emits { (e: 'foo' | 'bar'): void }
      
export default /*#__PURE__*/_defineComponent({
  emits: [\\"foo\\", \\"bar\\"],
  setup(__props, { emit }: { emit: ({ (e: 'foo' | 'bar'): void }), expose: any, slots: any, attrs: any }) {

      
      
return { emit }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineEmits w/ type (referenced exported function type) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
export type Emits = (e: 'foo' | 'bar') => void
      
export default /*#__PURE__*/_defineComponent({
  emits: [\\"foo\\", \\"bar\\"],
  setup(__props, { emit }: { emit: ((e: 'foo' | 'bar') => void), expose: any, slots: any, attrs: any }) {

      
      
return { emit }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineEmits w/ type (referenced function type) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
type Emits = (e: 'foo' | 'bar') => void
      
export default /*#__PURE__*/_defineComponent({
  emits: [\\"foo\\", \\"bar\\"],
  setup(__props, { emit }: { emit: ((e: 'foo' | 'bar') => void), expose: any, slots: any, attrs: any }) {

      
      
return { emit }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineEmits w/ type (type alias) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
type Emits = { (e: 'foo' | 'bar'): void }
      
export default /*#__PURE__*/_defineComponent({
  emits: [\\"foo\\", \\"bar\\"],
  setup(__props, { emit }: { emit: ({ (e: 'foo' | 'bar'): void }), expose: any, slots: any, attrs: any }) {

      
      
return { emit }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineEmits w/ type (type literal w/ call signatures) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'

export default /*#__PURE__*/_defineComponent({
  emits: [\\"foo\\", \\"bar\\", \\"baz\\"],
  setup(__props, { emit }: { emit: ({(e: 'foo' | 'bar'): void; (e: 'baz', id: number): void;}), expose: any, slots: any, attrs: any }) {

      
      
return { emit }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineEmits w/ type 1`] = `
"import { defineComponent as _defineComponent } from 'vue'

export default /*#__PURE__*/_defineComponent({
  emits: [\\"foo\\", \\"bar\\"],
  setup(__props, { emit }: { emit: ((e: 'foo' | 'bar') => void), expose: any, slots: any, attrs: any }) {

      
      
return { emit }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineProps w/ exported interface 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
export interface Props { x?: number }
      
export default /*#__PURE__*/_defineComponent({
  props: {
    x: { type: Number, required: false }
  },
  setup(__props: any) {

      
      
return {  }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineProps w/ exported interface in normal script 1`] = `
"import { defineComponent as _defineComponent } from 'vue'

        export interface Props { x?: number }
      
export default /*#__PURE__*/_defineComponent({
  props: {
    x: { type: Number, required: false }
  },
  setup(__props: any) {

        
      
return {  }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineProps w/ exported type alias 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
export type Props = { x?: number }
      
export default /*#__PURE__*/_defineComponent({
  props: {
    x: { type: Number, required: false }
  },
  setup(__props: any) {

      
      
return {  }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineProps w/ interface 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
interface Props { x?: number }
      
export default /*#__PURE__*/_defineComponent({
  props: {
    x: { type: Number, required: false }
  },
  setup(__props: any) {

      
      
return {  }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineProps w/ type 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
interface Test {}

      type Alias = number[]

      
export default /*#__PURE__*/_defineComponent({
  props: {
    string: { type: String, required: true },
    number: { type: Number, required: true },
    boolean: { type: Boolean, required: true },
    object: { type: Object, required: true },
    objectLiteral: { type: Object, required: true },
    fn: { type: Function, required: true },
    functionRef: { type: Function, required: true },
    objectRef: { type: Object, required: true },
    dateTime: { type: Date, required: true },
    array: { type: Array, required: true },
    arrayRef: { type: Array, required: true },
    tuple: { type: Array, required: true },
    set: { type: Set, required: true },
    literal: { type: String, required: true },
    optional: { type: null, required: false },
    recordRef: { type: Object, required: true },
    interface: { type: Object, required: true },
    alias: { type: Array, required: true },
    method: { type: Function, required: true },
    symbol: { type: Symbol, required: true },
    union: { type: [String, Number], required: true },
    literalUnion: { type: String, required: true },
    literalUnionNumber: { type: Number, required: true },
    literalUnionMixed: { type: [String, Number, Boolean], required: true },
    intersection: { type: Object, required: true },
    foo: { type: [Function, null], required: true }
  },
  setup(__props: any) {

      
      
return {  }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineProps w/ type alias 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
type Props = { x?: number }
      
export default /*#__PURE__*/_defineComponent({
  props: {
    x: { type: Number, required: false }
  },
  setup(__props: any) {

      
      
return {  }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > defineProps/Emit w/ runtime options 1`] = `
"import { defineComponent as _defineComponent } from 'vue'

export default /*#__PURE__*/_defineComponent({
  props: { foo: String },
  emits: ['a', 'b'],
  setup(__props, { emit }) {

const props = __props




return { props, emit }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > hoist type declarations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
export interface Foo {}
        type Bar = {}
      
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        
return {  }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > import type 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import type { Foo } from './main.ts'
        import { type Bar, Baz } from './main.ts'
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        
return { Baz }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > runtime Enum 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
enum Foo { A = 123 }
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        
return { Foo }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > runtime Enum in normal script 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
enum Foo { A = 123 }
        
          export enum D { D = \\"D\\" }
          const enum C { C = \\"C\\" }
          enum B { B = \\"B\\" }
        
export default /*#__PURE__*/_defineComponent({
  setup(__props) {

        
return { D, C, B, Foo }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > withDefaults (dynamic) 1`] = `
"import { mergeDefaults as _mergeDefaults, defineComponent as _defineComponent } from 'vue'
import { defaults } from './foo'
      
export default /*#__PURE__*/_defineComponent({
  props: _mergeDefaults({
    foo: { type: String, required: false },
    bar: { type: Number, required: false },
    baz: { type: Boolean, required: true }
  }, { ...defaults }),
  setup(__props: any) {

const props = __props as {
        foo?: string
        bar?: number
        baz: boolean
      }

      
      
return { props, defaults }
}

})"
`;

exports[`SFC compile <script setup> > with TypeScript > withDefaults (static) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'

export default /*#__PURE__*/_defineComponent({
  props: {
    foo: { type: String, required: false, default: 'hi' },
    bar: { type: Number, required: false },
    baz: { type: Boolean, required: true },
    qux: { type: Function, required: false, default() { return 1 } }
  },
  setup(__props: any) {

const props = __props as { foo: string, bar?: number, baz: boolean, qux(): number }

      
      
return { props }
}

})"
`;
// Vitest Snapshot v1

exports[`CSS vars injection > codegen > <script> w/ default export 1`] = `
"const __default__ = { setup() {} }
import { useCssVars as _useCssVars } from 'vue'
const __injectCSSVars__ = () => {
_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-color\\": (_vm.color)
}))}
const __setup__ = __default__.setup
__default__.setup = __setup__
  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }
  : __injectCSSVars__

export default __default__"
`;

exports[`CSS vars injection > codegen > <script> w/ default export in strings/comments 1`] = `
"
          // export default {}
          const __default__ = {}
        
import { useCssVars as _useCssVars } from 'vue'
const __injectCSSVars__ = () => {
_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-color\\": (_vm.color)
}))}
const __setup__ = __default__.setup
__default__.setup = __setup__
  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }
  : __injectCSSVars__

export default __default__"
`;

exports[`CSS vars injection > codegen > <script> w/ no default export 1`] = `
"const a = 1
const __default__ = {}
import { useCssVars as _useCssVars } from 'vue'
const __injectCSSVars__ = () => {
_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-color\\": (_vm.color)
}))}
const __setup__ = __default__.setup
__default__.setup = __setup__
  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }
  : __injectCSSVars__

export default __default__"
`;

exports[`CSS vars injection > codegen > should ignore comments 1`] = `
"import { useCssVars as _useCssVars } from 'vue'

export default {
  setup(__props) {

_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-width\\": (_setup.width)
}))
const color = 'red';const width = 100
return { color, width }
}

}"
`;

exports[`CSS vars injection > codegen > should work with w/ complex expression 1`] = `
"import { useCssVars as _useCssVars } from 'vue'

export default {
  setup(__props) {

_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-foo\\": (_setup.foo),
  \\"xxxxxxxx-foo____px_\\": (_setup.foo + 'px'),
  \\"xxxxxxxx-_a___b____2____px_\\": ((_setup.a + _setup.b) / 2 + 'px'),
  \\"xxxxxxxx-__a___b______2___a_\\": (((_setup.a + _setup.b)) / (2 * _setup.a))
}))

        let a = 100
        let b = 200
        let foo = 300
        
return { a, b, foo }
}

}"
`;

exports[`CSS vars injection > codegen > w/ <script setup> 1`] = `
"import { useCssVars as _useCssVars } from 'vue'

export default {
  setup(__props) {

_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-color\\": (_setup.color)
}))
const color = 'red'
return { color }
}

}"
`;

exports[`CSS vars injection > codegen > w/ <script setup> using the same var multiple times 1`] = `
"import { useCssVars as _useCssVars } from 'vue'

export default {
  setup(__props) {

_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-color\\": (_setup.color)
}))

        const color = 'red'
        
return { color }
}

}"
`;

exports[`CSS vars injection > generating correct code for nested paths 1`] = `
"const a = 1
const __default__ = {}
import { useCssVars as _useCssVars } from 'vue'
const __injectCSSVars__ = () => {
_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-color\\": (_vm.color),
  \\"xxxxxxxx-font_size\\": (_vm.font.size)
}))}
const __setup__ = __default__.setup
__default__.setup = __setup__
  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }
  : __injectCSSVars__

export default __default__"
`;

exports[`CSS vars injection > w/ <script setup> binding analysis 1`] = `
"import { useCssVars as _useCssVars } from 'vue'
import { ref } from 'vue'
        
export default {
  props: {
          foo: String
        },
  setup(__props) {

_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-color\\": (_setup.color),
  \\"xxxxxxxx-size\\": (_setup.size),
  \\"xxxxxxxx-foo\\": (_vm.foo)
}))

        const color = 'red'
        const size = ref('10px')
        
        
return { color, size, ref }
}

}"
`;

exports[`CSS vars injection > w/ normal <script> binding analysis 1`] = `
"
      const __default__ = {
        setup() {
          return {
            size: ref('100px')
          }
        }
      }
      
import { useCssVars as _useCssVars } from 'vue'
const __injectCSSVars__ = () => {
_useCssVars((_vm, _setup) => ({
  \\"xxxxxxxx-size\\": (_vm.size)
}))}
const __setup__ = __default__.setup
__default__.setup = __setup__
  ? (props, ctx) => { __injectCSSVars__();return __setup__(props, ctx) }
  : __injectCSSVars__

export default __default__"
`;
import { BindingTypes } from '../src/types'
import { compile, assertCode } from './util'

describe('SFC compile <script setup>', () => {
  test('should expose top level declarations', () => {
    const { content, bindings } = compile(`
      <script setup>
      import { x } from './x'
      let a = 1
      const b = 2
      function c() {}
      class d {}
      </script>

      <script>
      import { xx } from './x'
      let aa = 1
      const bb = 2
      function cc() {}
      class dd {}
      </script>
      `)
    expect(content).toMatch('return { aa, bb, cc, dd, a, b, c, d, xx, x }')
    expect(bindings).toStrictEqual({
      x: BindingTypes.SETUP_MAYBE_REF,
      a: BindingTypes.SETUP_LET,
      b: BindingTypes.SETUP_CONST,
      c: BindingTypes.SETUP_CONST,
      d: BindingTypes.SETUP_CONST,
      xx: BindingTypes.SETUP_MAYBE_REF,
      aa: BindingTypes.SETUP_LET,
      bb: BindingTypes.SETUP_CONST,
      cc: BindingTypes.SETUP_CONST,
      dd: BindingTypes.SETUP_CONST
    })
    assertCode(content)
  })

  test('binding analysis for destructure', () => {
    const { content, bindings } = compile(`
      <script setup>
      const { foo, b: bar, ['x' + 'y']: baz, x: { y, zz: { z }}} = {}
      </script>
      `)
    expect(content).toMatch('return { foo, bar, baz, y, z }')
    expect(bindings).toStrictEqual({
      foo: BindingTypes.SETUP_MAYBE_REF,
      bar: BindingTypes.SETUP_MAYBE_REF,
      baz: BindingTypes.SETUP_MAYBE_REF,
      y: BindingTypes.SETUP_MAYBE_REF,
      z: BindingTypes.SETUP_MAYBE_REF
    })
    assertCode(content)
  })

  test('defineProps()', () => {
    const { content, bindings } = compile(`
<script setup>
const props = defineProps({
  foo: String
})
const bar = 1
</script>
  `)
    // should generate working code
    assertCode(content)
    // should analyze bindings
    expect(bindings).toStrictEqual({
      foo: BindingTypes.PROPS,
      bar: BindingTypes.SETUP_CONST,
      props: BindingTypes.SETUP_REACTIVE_CONST
    })

    // should remove defineOptions import and call
    expect(content).not.toMatch('defineProps')
    // should generate correct setup signature
    expect(content).toMatch(`setup(__props) {`)
    // should assign user identifier to it
    expect(content).toMatch(`const props = __props`)
    // should include context options in default export
    expect(content).toMatch(`export default {
  props: {
  foo: String
},`)
  })

  test('defineProps w/ external definition', () => {
    const { content } = compile(`
    <script setup>
    import { propsModel } from './props'
    const props = defineProps(propsModel)
    </script>
      `)
    assertCode(content)
    expect(content).toMatch(`export default {
  props: propsModel,`)
  })

  // #4764
  test('defineProps w/ leading code', () => {
    const { content } = compile(`
    <script setup>import { x } from './x'
    const props = defineProps({})
    </script>
    `)
    // props declaration should be inside setup, not moved along with the import
    expect(content).not.toMatch(`const props = __props\nimport`)
    assertCode(content)
  })

  test('defineEmits()', () => {
    const { content, bindings } = compile(`
<script setup>
const myEmit = defineEmits(['foo', 'bar'])
</script>
  `)
    assertCode(content)
    expect(bindings).toStrictEqual({
      myEmit: BindingTypes.SETUP_CONST
    })
    // should remove defineOptions import and call
    expect(content).not.toMatch('defineEmits')
    // should generate correct setup signature
    expect(content).toMatch(`setup(__props, { emit: myEmit }) {`)
    // should include context options in default export
    expect(content).toMatch(`export default {
  emits: ['foo', 'bar'],`)
  })

  test('defineProps/defineEmits in multi-variable declaration', () => {
    const { content } = compile(`
    <script setup>
    const props = defineProps(['item']),
      a = 1,
      emit = defineEmits(['a']);
    </script>
  `)
    assertCode(content)
    expect(content).toMatch(`const a = 1;`) // test correct removal
    expect(content).toMatch(`props: ['item'],`)
    expect(content).toMatch(`emits: ['a'],`)
  })

  test('defineProps/defineEmits in multi-variable declaration (full removal)', () => {
    const { content } = compile(`
    <script setup>
    const props = defineProps(['item']),
          emit = defineEmits(['a']);
    </script>
  `)
    assertCode(content)
    expect(content).toMatch(`props: ['item'],`)
    expect(content).toMatch(`emits: ['a'],`)
  })

  test('defineExpose()', () => {
    const { content } = compile(`
<script setup>
defineExpose({ foo: 123 })
</script>
  `)
    assertCode(content)
    // should remove defineOptions import and call
    expect(content).not.toMatch('defineExpose')
    // should generate correct setup signature
    expect(content).toMatch(`setup(__props, { expose }) {`)
    // should replace callee
    expect(content).toMatch(/\bexpose\(\{ foo: 123 \}\)/)
  })

  test('<script> after <script setup> the script content not end with `\\n`', () => {
    const { content } = compile(`
    <script setup>
    import { x } from './x'
    </script>
    <script>const n = 1</script>
    `)
    assertCode(content)
  })

  describe('<script> and <script setup> co-usage', () => {
    test('script first', () => {
      const { content } = compile(`
      <script>
      export const n = 1

      export default {}
      </script>
      <script setup>
      import { x } from './x'
      x()
      </script>
      `)
      assertCode(content)
    })

    test('script setup first', () => {
      const { content } = compile(`
      <script setup>
      import { x } from './x'
      x()
      </script>
      <script>
      export const n = 1
      export default {}
      </script>
      `)
      assertCode(content)
    })

    test('script setup first, named default export', () => {
      const { content } = compile(`
      <script setup>
      import { x } from './x'
      x()
      </script>
      <script>
      export const n = 1
      const def = {}
      export { def as default }
      </script>
      `)
      assertCode(content)
    })

    // #4395
    test('script setup first, lang="ts", script block content export default', () => {
      const { content } = compile(`
      <script setup lang="ts">
      import { x } from './x'
      x()
      </script>
      <script lang="ts">
      export default {
        name: "test"
      }
      </script>
      `)
      // ensure __default__ is declared before used
      expect(content).toMatch(/const __default__[\S\s]*\.\.\.__default__/m)
      assertCode(content)
    })

    describe('spaces in ExportDefaultDeclaration node', () => {
      // #4371
      test('with many spaces and newline', () => {
        // #4371
        const { content } = compile(`
        <script>
        export const n = 1
        export        default
        {
          some:'option'
        }
        </script>
        <script setup>
        import { x } from './x'
        x()
        </script>
        `)
        assertCode(content)
      })

      test('with minimal spaces', () => {
        const { content } = compile(`
        <script>
        export const n = 1
        export default{
          some:'option'
        }
        </script>
        <script setup>
        import { x } from './x'
        x()
        </script>
        `)
        assertCode(content)
      })
    })
  })

  describe('imports', () => {
    test('should hoist and expose imports', () => {
      assertCode(
        compile(`<script setup>
          import { ref } from 'vue'
          import 'foo/css'
        </script>`).content
      )
    })

    test('should extract comment for import or type declarations', () => {
      assertCode(
        compile(`
        <script setup>
        import a from 'a' // comment
        import b from 'b'
        </script>
        `).content
      )
    })

    // #2740
    test('should allow defineProps/Emit at the start of imports', () => {
      assertCode(
        compile(`<script setup>
      import { ref } from 'vue'
      defineProps(['foo'])
      defineEmits(['bar'])
      const r = ref(0)
      </script>`).content
      )
    })

    test('import dedupe between <script> and <script setup>', () => {
      const { content } = compile(`
        <script>
        import { x } from './x'
        </script>
        <script setup>
        import { x } from './x'
        x()
        </script>
        `)
      assertCode(content)
      expect(content.indexOf(`import { x }`)).toEqual(
        content.lastIndexOf(`import { x }`)
      )
    })
  })

  // in dev mode, declared bindings are returned as an object from setup()
  // when using TS, users may import types which should not be returned as
  // values, so we need to check import usage in the template to determine
  // what to be returned.
  describe('dev mode import usage check', () => {
    test('components', () => {
      const { content } = compile(`
        <script setup lang="ts">
        import { FooBar, FooBaz, FooQux, foo } from './x'
        const fooBar: FooBar = 1
        </script>
        <template>
          <FooBaz></FooBaz>
          <foo-qux/>
          <foo/>
          FooBar
        </template>
        `)
      // FooBar: should not be matched by plain text or incorrect case
      // FooBaz: used as PascalCase component
      // FooQux: used as kebab-case component
      // foo: lowercase component
      expect(content).toMatch(`return { fooBar, FooBaz, FooQux, foo }`)
      assertCode(content)
    })

    test('directive', () => {
      const { content } = compile(`
        <script setup lang="ts">
        import { vMyDir } from './x'
        </script>
        <template>
          <div v-my-dir></div>
        </template>
        `)
      expect(content).toMatch(`return { vMyDir }`)
      assertCode(content)
    })

    // https://github.com/vuejs/core/issues/4599
    test('attribute expressions', () => {
      const { content } = compile(`
        <script setup lang="ts">
        import { bar, baz } from './x'
        const cond = true
        </script>
        <template>
          <div :class="[cond ? '' : bar(), 'default']" :style="baz"></div>
        </template>
        `)
      expect(content).toMatch(`return { cond, bar, baz }`)
      assertCode(content)
    })

    test('vue interpolations', () => {
      const { content } = compile(`
      <script setup lang="ts">
      import { x, y, z, x$y } from './x'
      </script>
      <template>
        <div :id="z + 'y'">{{ x }} {{ yy }} {{ x$y }}</div>
      </template>
      `)
      // x: used in interpolation
      // y: should not be matched by {{ yy }} or 'y' in binding exps
      // x$y: #4274 should escape special chars when creating Regex
      expect(content).toMatch(`return { x, z, x$y }`)
      assertCode(content)
    })

    // #4340 interpolations in template strings
    test('js template string interpolations', () => {
      const { content } = compile(`
        <script setup lang="ts">
        import { VAR, VAR2, VAR3 } from './x'
        </script>
        <template>
          {{ \`\${VAR}VAR2\${VAR3}\` }}
        </template>
        `)
      // VAR2 should not be matched
      expect(content).toMatch(`return { VAR, VAR3 }`)
      assertCode(content)
    })

    // edge case: last tag in template
    test('last tag', () => {
      const { content } = compile(`
        <script setup lang="ts">
        import { FooBaz, Last } from './x'
        </script>
        <template>
          <FooBaz></FooBaz>
          <Last/>
        </template>
        `)
      expect(content).toMatch(`return { FooBaz, Last }`)
      assertCode(content)
    })

    test('TS annotations', () => {
      const { content } = compile(`
        <script setup lang="ts">
        import { Foo, Baz, Qux, Fred } from './x'
        const a = 1
        function b() {}
        </script>
        <template>
          {{ a as Foo }}
          {{ Baz }}
          <Comp v-slot="{ data }: Qux">{{ data }}</Comp>
          <div v-for="{ z = x as Qux } in list as Fred"/>
        </template>
        `)

      expect(content).toMatch(`return { a, b, Baz }`)
      assertCode(content)
    })
  })

  // describe('inlineTemplate mode', () => {
  //   test('should work', () => {
  //     const { content } = compile(
  //       `
  //       <script setup>
  //       import { ref } from 'vue'
  //       const count = ref(0)
  //       </script>
  //       <template>
  //         <div>{{ count }}</div>
  //         <div>static</div>
  //       </template>
  //       `,
  //       { inlineTemplate: true }
  //     )
  //     // check snapshot and make sure helper imports and
  //     // hoists are placed correctly.
  //     assertCode(content)
  //     // in inline mode, no need to call expose() since nothing is exposed
  //     // anyway!
  //     expect(content).not.toMatch(`expose()`)
  //   })

  //   test('with defineExpose()', () => {
  //     const { content } = compile(
  //       `
  //       <script setup>
  //       const count = ref(0)
  //       defineExpose({ count })
  //       </script>
  //       `,
  //       { inlineTemplate: true }
  //     )
  //     assertCode(content)
  //     expect(content).toMatch(`setup(__props, { expose })`)
  //     expect(content).toMatch(`expose({ count })`)
  //   })

  //   test('referencing scope components and directives', () => {
  //     const { content } = compile(
  //       `
  //       <script setup>
  //       import ChildComp from './Child.vue'
  //       import SomeOtherComp from './Other.vue'
  //       import vMyDir from './my-dir'
  //       </script>
  //       <template>
  //         <div v-my-dir></div>
  //         <ChildComp/>
  //         <some-other-comp/>
  //       </template>
  //       `,
  //       { inlineTemplate: true }
  //     )
  //     expect(content).toMatch('[_unref(vMyDir)]')
  //     expect(content).toMatch('_createVNode(ChildComp)')
  //     // kebab-case component support
  //     expect(content).toMatch('_createVNode(SomeOtherComp)')
  //     assertCode(content)
  //   })

  //   test('avoid unref() when necessary', () => {
  //     // function, const, component import
  //     const { content } = compile(
  //       `<script setup>
  //       import { ref } from 'vue'
  //       import Foo, { bar } from './Foo.vue'
  //       import other from './util'
  //       import * as tree from './tree'
  //       const count = ref(0)
  //       const constant = {}
  //       const maybe = foo()
  //       let lett = 1
  //       function fn() {}
  //       </script>
  //       <template>
  //         <Foo>{{ bar }}</Foo>
  //         <div @click="fn">{{ count }} {{ constant }} {{ maybe }} {{ lett }} {{ other }}</div>
  //         {{ tree.foo() }}
  //       </template>
  //       `,
  //       { inlineTemplate: true }
  //     )
  //     // no need to unref vue component import
  //     expect(content).toMatch(`createVNode(Foo,`)
  //     // #2699 should unref named imports from .vue
  //     expect(content).toMatch(`unref(bar)`)
  //     // should unref other imports
  //     expect(content).toMatch(`unref(other)`)
  //     // no need to unref constant literals
  //     expect(content).not.toMatch(`unref(constant)`)
  //     // should directly use .value for known refs
  //     expect(content).toMatch(`count.value`)
  //     // should unref() on const bindings that may be refs
  //     expect(content).toMatch(`unref(maybe)`)
  //     // should unref() on let bindings
  //     expect(content).toMatch(`unref(lett)`)
  //     // no need to unref namespace import (this also preserves tree-shaking)
  //     expect(content).toMatch(`tree.foo()`)
  //     // no need to unref function declarations
  //     expect(content).toMatch(`{ onClick: fn }`)
  //     // no need to mark constant fns in patch flag
  //     expect(content).not.toMatch(`PROPS`)
  //     assertCode(content)
  //   })

  //   test('v-model codegen', () => {
  //     const { content } = compile(
  //       `<script setup>
  //       import { ref } from 'vue'
  //       const count = ref(0)
  //       const maybe = foo()
  //       let lett = 1
  //       </script>
  //       <template>
  //         <input v-model="count">
  //         <input v-model="maybe">
  //         <input v-model="lett">
  //       </template>
  //       `,
  //       { inlineTemplate: true }
  //     )
  //     // known const ref: set value
  //     expect(content).toMatch(`(count).value = $event`)
  //     // const but maybe ref: assign if ref, otherwise do nothing
  //     expect(content).toMatch(`_isRef(maybe) ? (maybe).value = $event : null`)
  //     // let: handle both cases
  //     expect(content).toMatch(
  //       `_isRef(lett) ? (lett).value = $event : lett = $event`
  //     )
  //     assertCode(content)
  //   })

  //   test('template assignment expression codegen', () => {
  //     const { content } = compile(
  //       `<script setup>
  //       import { ref } from 'vue'
  //       const count = ref(0)
  //       const maybe = foo()
  //       let lett = 1
  //       let v = ref(1)
  //       </script>
  //       <template>
  //         <div @click="count = 1"/>
  //         <div @click="maybe = count"/>
  //         <div @click="lett = count"/>
  //         <div @click="v += 1"/>
  //         <div @click="v -= 1"/>
  //         <div @click="() => {
  //             let a = '' + lett
  //             v = a
  //          }"/>
  //          <div @click="() => {
  //             // nested scopes
  //             (()=>{
  //               let x = a
  //               (()=>{
  //                 let z = x
  //                 let z2 = z
  //               })
  //               let lz = z
  //             })
  //             v = a
  //          }"/>
  //       </template>
  //       `,
  //       { inlineTemplate: true }
  //     )
  //     // known const ref: set value
  //     expect(content).toMatch(`count.value = 1`)
  //     // const but maybe ref: only assign after check
  //     expect(content).toMatch(`maybe.value = count.value`)
  //     // let: handle both cases
  //     expect(content).toMatch(
  //       `_isRef(lett) ? lett.value = count.value : lett = count.value`
  //     )
  //     expect(content).toMatch(`_isRef(v) ? v.value += 1 : v += 1`)
  //     expect(content).toMatch(`_isRef(v) ? v.value -= 1 : v -= 1`)
  //     expect(content).toMatch(`_isRef(v) ? v.value = a : v = a`)
  //     expect(content).toMatch(`_isRef(v) ? v.value = _ctx.a : v = _ctx.a`)
  //     assertCode(content)
  //   })

  //   test('template update expression codegen', () => {
  //     const { content } = compile(
  //       `<script setup>
  //       import { ref } from 'vue'
  //       const count = ref(0)
  //       const maybe = foo()
  //       let lett = 1
  //       </script>
  //       <template>
  //         <div @click="count++"/>
  //         <div @click="--count"/>
  //         <div @click="maybe++"/>
  //         <div @click="--maybe"/>
  //         <div @click="lett++"/>
  //         <div @click="--lett"/>
  //       </template>
  //       `,
  //       { inlineTemplate: true }
  //     )
  //     // known const ref: set value
  //     expect(content).toMatch(`count.value++`)
  //     expect(content).toMatch(`--count.value`)
  //     // const but maybe ref (non-ref case ignored)
  //     expect(content).toMatch(`maybe.value++`)
  //     expect(content).toMatch(`--maybe.value`)
  //     // let: handle both cases
  //     expect(content).toMatch(`_isRef(lett) ? lett.value++ : lett++`)
  //     expect(content).toMatch(`_isRef(lett) ? --lett.value : --lett`)
  //     assertCode(content)
  //   })

  //   test('template destructure assignment codegen', () => {
  //     const { content } = compile(
  //       `<script setup>
  //       import { ref } from 'vue'
  //       const val = {}
  //       const count = ref(0)
  //       const maybe = foo()
  //       let lett = 1
  //       </script>
  //       <template>
  //         <div @click="({ count } = val)"/>
  //         <div @click="[maybe] = val"/>
  //         <div @click="({ lett } = val)"/>
  //       </template>
  //       `,
  //       { inlineTemplate: true }
  //     )
  //     // known const ref: set value
  //     expect(content).toMatch(`({ count: count.value } = val)`)
  //     // const but maybe ref (non-ref case ignored)
  //     expect(content).toMatch(`[maybe.value] = val`)
  //     // let: assumes non-ref
  //     expect(content).toMatch(`{ lett: lett } = val`)
  //     assertCode(content)
  //   })

  //   test('ssr codegen', () => {
  //     const { content } = compile(
  //       `
  //       <script setup>
  //       import { ref } from 'vue'
  //       const count = ref(0)
  //       </script>
  //       <template>
  //         <div>{{ count }}</div>
  //         <div>static</div>
  //       </template>
  //       <style>
  //       div { color: v-bind(count) }
  //       </style>
  //       `,
  //       {
  //         inlineTemplate: true,
  //         templateOptions: {
  //           ssr: true
  //         }
  //       }
  //     )
  //     expect(content).toMatch(`\n  __ssrInlineRender: true,\n`)
  //     expect(content).toMatch(`return (_ctx, _push`)
  //     expect(content).toMatch(`ssrInterpolate`)
  //     expect(content).not.toMatch(`useCssVars`)
  //     expect(content).toMatch(`"--${mockId}-count": (count.value)`)
  //     assertCode(content)
  //   })
  // })

  describe('with TypeScript', () => {
    test('hoist type declarations', () => {
      const { content } = compile(`
      <script setup lang="ts">
        export interface Foo {}
        type Bar = {}
      </script>`)
      assertCode(content)
    })

    test('defineProps/Emit w/ runtime options', () => {
      const { content } = compile(`
<script setup lang="ts">
const props = defineProps({ foo: String })
const emit = defineEmits(['a', 'b'])
</script>
      `)
      assertCode(content)
      expect(content).toMatch(`export default /*#__PURE__*/_defineComponent({
  props: { foo: String },
  emits: ['a', 'b'],
  setup(__props, { emit }) {`)
    })

    test('defineProps w/ type', () => {
      const { content, bindings } = compile(`
      <script setup lang="ts">
      interface Test {}

      type Alias = number[]

      defineProps<{
        string: string
        number: number
        boolean: boolean
        object: object
        objectLiteral: { a: number }
        fn: (n: number) => void
        functionRef: Function
        objectRef: Object
        dateTime: Date
        array: string[]
        arrayRef: Array<any>
        tuple: [number, number]
        set: Set<string>
        literal: 'foo'
        optional?: any
        recordRef: Record<string, null>
        interface: Test
        alias: Alias
        method(): void
        symbol: symbol

        union: string | number
        literalUnion: 'foo' | 'bar'
        literalUnionNumber: 1 | 2 | 3 | 4 | 5
        literalUnionMixed: 'foo' | 1 | boolean
        intersection: Test & {}
        foo: ((item: any) => boolean) | null
      }>()
      </script>`)
      assertCode(content)
      expect(content).toMatch(`string: { type: String, required: true }`)
      expect(content).toMatch(`number: { type: Number, required: true }`)
      expect(content).toMatch(`boolean: { type: Boolean, required: true }`)
      expect(content).toMatch(`object: { type: Object, required: true }`)
      expect(content).toMatch(`objectLiteral: { type: Object, required: true }`)
      expect(content).toMatch(`fn: { type: Function, required: true }`)
      expect(content).toMatch(`functionRef: { type: Function, required: true }`)
      expect(content).toMatch(`objectRef: { type: Object, required: true }`)
      expect(content).toMatch(`dateTime: { type: Date, required: true }`)
      expect(content).toMatch(`array: { type: Array, required: true }`)
      expect(content).toMatch(`arrayRef: { type: Array, required: true }`)
      expect(content).toMatch(`tuple: { type: Array, required: true }`)
      expect(content).toMatch(`set: { type: Set, required: true }`)
      expect(content).toMatch(`literal: { type: String, required: true }`)
      expect(content).toMatch(`optional: { type: null, required: false }`)
      expect(content).toMatch(`recordRef: { type: Object, required: true }`)
      expect(content).toMatch(`interface: { type: Object, required: true }`)
      expect(content).toMatch(`alias: { type: Array, required: true }`)
      expect(content).toMatch(`method: { type: Function, required: true }`)
      expect(content).toMatch(`symbol: { type: Symbol, required: true }`)
      expect(content).toMatch(
        `union: { type: [String, Number], required: true }`
      )
      expect(content).toMatch(`literalUnion: { type: String, required: true }`)
      expect(content).toMatch(
        `literalUnionNumber: { type: Number, required: true }`
      )
      expect(content).toMatch(
        `literalUnionMixed: { type: [String, Number, Boolean], required: true }`
      )
      expect(content).toMatch(`intersection: { type: Object, required: true }`)
      expect(content).toMatch(`foo: { type: [Function, null], required: true }`)
      expect(bindings).toStrictEqual({
        string: BindingTypes.PROPS,
        number: BindingTypes.PROPS,
        boolean: BindingTypes.PROPS,
        object: BindingTypes.PROPS,
        objectLiteral: BindingTypes.PROPS,
        fn: BindingTypes.PROPS,
        functionRef: BindingTypes.PROPS,
        objectRef: BindingTypes.PROPS,
        dateTime: BindingTypes.PROPS,
        array: BindingTypes.PROPS,
        arrayRef: BindingTypes.PROPS,
        tuple: BindingTypes.PROPS,
        set: BindingTypes.PROPS,
        literal: BindingTypes.PROPS,
        optional: BindingTypes.PROPS,
        recordRef: BindingTypes.PROPS,
        interface: BindingTypes.PROPS,
        alias: BindingTypes.PROPS,
        method: BindingTypes.PROPS,
        symbol: BindingTypes.PROPS,
        union: BindingTypes.PROPS,
        literalUnion: BindingTypes.PROPS,
        literalUnionNumber: BindingTypes.PROPS,
        literalUnionMixed: BindingTypes.PROPS,
        intersection: BindingTypes.PROPS,
        foo: BindingTypes.PROPS
      })
    })

    test('defineProps w/ interface', () => {
      const { content, bindings } = compile(`
      <script setup lang="ts">
      interface Props { x?: number }
      defineProps<Props>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`x: { type: Number, required: false }`)
      expect(bindings).toStrictEqual({
        x: BindingTypes.PROPS
      })
    })

    test('defineProps w/ exported interface', () => {
      const { content, bindings } = compile(`
      <script setup lang="ts">
      export interface Props { x?: number }
      defineProps<Props>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`x: { type: Number, required: false }`)
      expect(bindings).toStrictEqual({
        x: BindingTypes.PROPS
      })
    })

    test('defineProps w/ exported interface in normal script', () => {
      const { content, bindings } = compile(`
      <script lang="ts">
        export interface Props { x?: number }
      </script>
      <script setup lang="ts">
        defineProps<Props>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`x: { type: Number, required: false }`)
      expect(bindings).toStrictEqual({
        x: BindingTypes.PROPS
      })
    })

    test('defineProps w/ type alias', () => {
      const { content, bindings } = compile(`
      <script setup lang="ts">
      type Props = { x?: number }
      defineProps<Props>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`x: { type: Number, required: false }`)
      expect(bindings).toStrictEqual({
        x: BindingTypes.PROPS
      })
    })

    test('defineProps w/ exported type alias', () => {
      const { content, bindings } = compile(`
      <script setup lang="ts">
      export type Props = { x?: number }
      defineProps<Props>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`x: { type: Number, required: false }`)
      expect(bindings).toStrictEqual({
        x: BindingTypes.PROPS
      })
    })

    test('withDefaults (static)', () => {
      const { content, bindings } = compile(`
      <script setup lang="ts">
      const props = withDefaults(defineProps<{
        foo?: string
        bar?: number;
        baz: boolean;
        qux?(): number
      }>(), {
        foo: 'hi',
        qux() { return 1 }
      })
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(
        `foo: { type: String, required: false, default: 'hi' }`
      )
      expect(content).toMatch(`bar: { type: Number, required: false }`)
      expect(content).toMatch(`baz: { type: Boolean, required: true }`)
      expect(content).toMatch(
        `qux: { type: Function, required: false, default() { return 1 } }`
      )
      expect(content).toMatch(
        `{ foo: string, bar?: number, baz: boolean, qux(): number }`
      )
      expect(content).toMatch(`const props = __props`)
      expect(bindings).toStrictEqual({
        foo: BindingTypes.PROPS,
        bar: BindingTypes.PROPS,
        baz: BindingTypes.PROPS,
        qux: BindingTypes.PROPS,
        props: BindingTypes.SETUP_CONST
      })
    })

    test('withDefaults (dynamic)', () => {
      const { content } = compile(`
      <script setup lang="ts">
      import { defaults } from './foo'
      const props = withDefaults(defineProps<{
        foo?: string
        bar?: number
        baz: boolean
      }>(), { ...defaults })
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`import { mergeDefaults as _mergeDefaults`)
      expect(content).toMatch(
        `
  _mergeDefaults({
    foo: { type: String, required: false },
    bar: { type: Number, required: false },
    baz: { type: Boolean, required: true }
  }, { ...defaults })`.trim()
      )
    })

    test('defineEmits w/ type', () => {
      const { content } = compile(`
      <script setup lang="ts">
      const emit = defineEmits<(e: 'foo' | 'bar') => void>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`emit: ((e: 'foo' | 'bar') => void),`)
      expect(content).toMatch(`emits: ["foo", "bar"]`)
    })

    test('defineEmits w/ type (union)', () => {
      const type = `((e: 'foo' | 'bar') => void) | ((e: 'baz', id: number) => void)`
      expect(() =>
        compile(`
      <script setup lang="ts">
      const emit = defineEmits<${type}>()
      </script>
      `)
      ).toThrow()
    })

    test('defineEmits w/ type (type literal w/ call signatures)', () => {
      const type = `{(e: 'foo' | 'bar'): void; (e: 'baz', id: number): void;}`
      const { content } = compile(`
      <script setup lang="ts">
      const emit = defineEmits<${type}>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`emit: (${type}),`)
      expect(content).toMatch(`emits: ["foo", "bar", "baz"]`)
    })

    test('defineEmits w/ type (interface)', () => {
      const { content } = compile(`
      <script setup lang="ts">
      interface Emits { (e: 'foo' | 'bar'): void }
      const emit = defineEmits<Emits>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`emit: ({ (e: 'foo' | 'bar'): void }),`)
      expect(content).toMatch(`emits: ["foo", "bar"]`)
    })

    test('defineEmits w/ type (exported interface)', () => {
      const { content } = compile(`
      <script setup lang="ts">
      export interface Emits { (e: 'foo' | 'bar'): void }
      const emit = defineEmits<Emits>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`emit: ({ (e: 'foo' | 'bar'): void }),`)
      expect(content).toMatch(`emits: ["foo", "bar"]`)
    })

    test('defineEmits w/ type (type alias)', () => {
      const { content } = compile(`
      <script setup lang="ts">
      type Emits = { (e: 'foo' | 'bar'): void }
      const emit = defineEmits<Emits>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`emit: ({ (e: 'foo' | 'bar'): void }),`)
      expect(content).toMatch(`emits: ["foo", "bar"]`)
    })

    test('defineEmits w/ type (exported type alias)', () => {
      const { content } = compile(`
      <script setup lang="ts">
      export type Emits = { (e: 'foo' | 'bar'): void }
      const emit = defineEmits<Emits>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`emit: ({ (e: 'foo' | 'bar'): void }),`)
      expect(content).toMatch(`emits: ["foo", "bar"]`)
    })

    test('defineEmits w/ type (referenced function type)', () => {
      const { content } = compile(`
      <script setup lang="ts">
      type Emits = (e: 'foo' | 'bar') => void
      const emit = defineEmits<Emits>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`emit: ((e: 'foo' | 'bar') => void),`)
      expect(content).toMatch(`emits: ["foo", "bar"]`)
    })

    test('defineEmits w/ type (referenced exported function type)', () => {
      const { content } = compile(`
      <script setup lang="ts">
      export type Emits = (e: 'foo' | 'bar') => void
      const emit = defineEmits<Emits>()
      </script>
      `)
      assertCode(content)
      expect(content).toMatch(`emit: ((e: 'foo' | 'bar') => void),`)
      expect(content).toMatch(`emits: ["foo", "bar"]`)
    })

    test('runtime Enum', () => {
      const { content, bindings } = compile(
        `<script setup lang="ts">
        enum Foo { A = 123 }
        </script>`
      )
      assertCode(content)
      expect(bindings).toStrictEqual({
        Foo: BindingTypes.SETUP_CONST
      })
    })

    test('runtime Enum in normal script', () => {
      const { content, bindings } = compile(
        `<script lang="ts">
          export enum D { D = "D" }
          const enum C { C = "C" }
          enum B { B = "B" }
        </script>
        <script setup lang="ts">
        enum Foo { A = 123 }
        </script>`
      )
      assertCode(content)
      expect(bindings).toStrictEqual({
        D: BindingTypes.SETUP_CONST,
        C: BindingTypes.SETUP_CONST,
        B: BindingTypes.SETUP_CONST,
        Foo: BindingTypes.SETUP_CONST
      })
    })

    test('const Enum', () => {
      const { content, bindings } = compile(
        `<script setup lang="ts">
        const enum Foo { A = 123 }
        </script>`
      )
      assertCode(content)
      expect(bindings).toStrictEqual({
        Foo: BindingTypes.SETUP_CONST
      })
    })

    test('import type', () => {
      const { content } = compile(
        `<script setup lang="ts">
        import type { Foo } from './main.ts'
        import { type Bar, Baz } from './main.ts'
        </script>`
      )
      expect(content).toMatch(`return { Baz }`)
      assertCode(content)
    })
  })

  describe('errors', () => {
    test('<script> and <script setup> must have same lang', () => {
      expect(() =>
        compile(`<script>foo()</script><script setup lang="ts">bar()</script>`)
      ).toThrow(`<script> and <script setup> must have the same language type`)
    })

    const moduleErrorMsg = `cannot contain ES module exports`

    test('non-type named exports', () => {
      expect(() =>
        compile(`<script setup>
        export const a = 1
        </script>`)
      ).toThrow(moduleErrorMsg)

      expect(() =>
        compile(`<script setup>
        export * from './foo'
        </script>`)
      ).toThrow(moduleErrorMsg)

      expect(() =>
        compile(`<script setup>
          const bar = 1
          export { bar as default }
        </script>`)
      ).toThrow(moduleErrorMsg)
    })

    test('defineProps/Emit() w/ both type and non-type args', () => {
      expect(() => {
        compile(`<script setup lang="ts">
        defineProps<{}>({})
        </script>`)
      }).toThrow(`cannot accept both type and non-type arguments`)

      expect(() => {
        compile(`<script setup lang="ts">
        defineEmits<{}>({})
        </script>`)
      }).toThrow(`cannot accept both type and non-type arguments`)
    })

    test('defineProps/Emit() referencing local var', () => {
      expect(() =>
        compile(`<script setup>
        const bar = 1
        defineProps({
          foo: {
            default: () => bar
          }
        })
        </script>`)
      ).toThrow(`cannot reference locally declared variables`)

      expect(() =>
        compile(`<script setup>
        const bar = 'hello'
        defineEmits([bar])
        </script>`)
      ).toThrow(`cannot reference locally declared variables`)

      // #4644
      expect(() =>
        compile(`
        <script>const bar = 1</script>
        <script setup>
        defineProps({
          foo: {
            default: () => bar
          }
        })
        </script>`)
      ).not.toThrow(`cannot reference locally declared variables`)
    })

    test('should allow defineProps/Emit() referencing scope var', () => {
      assertCode(
        compile(`<script setup>
          const bar = 1
          defineProps({
            foo: {
              default: bar => bar + 1
            }
          })
          defineEmits({
            foo: bar => bar > 1
          })
        </script>`).content
      )
    })

    test('should allow defineProps/Emit() referencing imported binding', () => {
      assertCode(
        compile(`<script setup>
        import { bar } from './bar'
        defineProps({
          foo: {
            default: () => bar
          }
        })
        defineEmits({
          foo: () => bar > 1
        })
        </script>`).content
      )
    })
  })
})

describe('SFC analyze <script> bindings', () => {
  it('can parse decorators syntax in typescript block', () => {
    const { scriptAst } = compile(`
      <script lang="ts">
        import { Options, Vue } from 'vue-class-component';
        @Options({
          components: {
            HelloWorld,
          },
          props: ['foo', 'bar']
        })
        export default class Home extends Vue {}
      </script>
    `)

    expect(scriptAst).toBeDefined()
  })

  it('recognizes props array declaration', () => {
    const { bindings } = compile(`
      <script>
        export default {
          props: ['foo', 'bar']
        }
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.PROPS,
      bar: BindingTypes.PROPS
    })
    expect(bindings!.__isScriptSetup).toBe(false)
  })

  it('recognizes props object declaration', () => {
    const { bindings } = compile(`
      <script>
        export default {
          props: {
            foo: String,
            bar: {
              type: String,
            },
            baz: null,
            qux: [String, Number]
          }
        }
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.PROPS,
      bar: BindingTypes.PROPS,
      baz: BindingTypes.PROPS,
      qux: BindingTypes.PROPS
    })
    expect(bindings!.__isScriptSetup).toBe(false)
  })

  it('recognizes setup return', () => {
    const { bindings } = compile(`
      <script>
        const bar = 2
        export default {
          setup() {
            return {
              foo: 1,
              bar
            }
          }
        }
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.SETUP_MAYBE_REF,
      bar: BindingTypes.SETUP_MAYBE_REF
    })
    expect(bindings!.__isScriptSetup).toBe(false)
  })

  it('recognizes exported vars', () => {
    const { bindings } = compile(`
      <script>
        export const foo = 2
      </script>
      <script setup>
        console.log(foo)
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.SETUP_CONST
    })
  })

  it('recognizes async setup return', () => {
    const { bindings } = compile(`
      <script>
        const bar = 2
        export default {
          async setup() {
            return {
              foo: 1,
              bar
            }
          }
        }
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.SETUP_MAYBE_REF,
      bar: BindingTypes.SETUP_MAYBE_REF
    })
    expect(bindings!.__isScriptSetup).toBe(false)
  })

  it('recognizes data return', () => {
    const { bindings } = compile(`
      <script>
        const bar = 2
        export default {
          data() {
            return {
              foo: null,
              bar
            }
          }
        }
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.DATA,
      bar: BindingTypes.DATA
    })
  })

  it('recognizes methods', () => {
    const { bindings } = compile(`
      <script>
        export default {
          methods: {
            foo() {}
          }
        }
      </script>
    `)
    expect(bindings).toStrictEqual({ foo: BindingTypes.OPTIONS })
  })

  it('recognizes computeds', () => {
    const { bindings } = compile(`
      <script>
        export default {
          computed: {
            foo() {},
            bar: {
              get() {},
              set() {},
            }
          }
        }
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.OPTIONS,
      bar: BindingTypes.OPTIONS
    })
  })

  it('recognizes injections array declaration', () => {
    const { bindings } = compile(`
      <script>
        export default {
          inject: ['foo', 'bar']
        }
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.OPTIONS,
      bar: BindingTypes.OPTIONS
    })
  })

  it('recognizes injections object declaration', () => {
    const { bindings } = compile(`
      <script>
        export default {
          inject: {
            foo: {},
            bar: {},
          }
        }
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.OPTIONS,
      bar: BindingTypes.OPTIONS
    })
  })

  it('works for mixed bindings', () => {
    const { bindings } = compile(`
      <script>
        export default {
          inject: ['foo'],
          props: {
            bar: String,
          },
          setup() {
            return {
              baz: null,
            }
          },
          data() {
            return {
              qux: null
            }
          },
          methods: {
            quux() {}
          },
          computed: {
            quuz() {}
          }
        }
      </script>
    `)
    expect(bindings).toStrictEqual({
      foo: BindingTypes.OPTIONS,
      bar: BindingTypes.PROPS,
      baz: BindingTypes.SETUP_MAYBE_REF,
      qux: BindingTypes.DATA,
      quux: BindingTypes.OPTIONS,
      quuz: BindingTypes.OPTIONS
    })
  })

  it('works for script setup', () => {
    const { bindings } = compile(`
      <script setup>
      import { ref as r } from 'vue'
      defineProps({
        foo: String
      })

      const a = r(1)
      let b = 2
      const c = 3
      const { d } = someFoo()
      let { e } = someBar()
      </script>
    `)

    expect(bindings).toStrictEqual({
      r: BindingTypes.SETUP_CONST,
      a: BindingTypes.SETUP_REF,
      b: BindingTypes.SETUP_LET,
      c: BindingTypes.SETUP_CONST,
      d: BindingTypes.SETUP_MAYBE_REF,
      e: BindingTypes.SETUP_LET,
      foo: BindingTypes.PROPS
    })
  })

  describe('auto name inference', () => {
    test('basic', () => {
      const { content } = compile(
        `<script setup>const a = 1</script>
        <template>{{ a }}</template>`,
        undefined,
        {
          filename: 'FooBar.vue'
        }
      )
      expect(content).toMatch(`export default {
  __name: 'FooBar'`)
      assertCode(content)
    })

    test('do not overwrite manual name (object)', () => {
      const { content } = compile(
        `<script>
        export default {
          name: 'Baz'
        }
        </script>
        <script setup>const a = 1</script>
        <template>{{ a }}</template>`,
        undefined,
        {
          filename: 'FooBar.vue'
        }
      )
      expect(content).not.toMatch(`name: 'FooBar'`)
      expect(content).toMatch(`name: 'Baz'`)
      assertCode(content)
    })

    test('do not overwrite manual name (call)', () => {
      const { content } = compile(
        `<script>
        import { defineComponent } from 'vue'
        export default defineComponent({
          name: 'Baz'
        })
        </script>
        <script setup>const a = 1</script>
        <template>{{ a }}</template>`,
        undefined,
        {
          filename: 'FooBar.vue'
        }
      )
      expect(content).not.toMatch(`name: 'FooBar'`)
      expect(content).toMatch(`name: 'Baz'`)
      assertCode(content)
    })

    // #12591
    test('should not error when performing ts expression check for v-on inline statement', () => {
      compile(`
      <script setup lang="ts">
        import { foo } from './foo'
      </script>
      <template>
        <div @click="$emit('update:a');"></div>
      </template>
      `)
    })

    // #12841
    test('should not error when performing ts expression check for v-slot destructured default value', () => {
      compile(`
      <script setup lang="ts">
        import FooComp from './Foo.vue'
      </script>
      <template>
        <FooComp>
          <template #bar="{ bar = { baz: '' } }">
            {{ bar.baz }}
          </template>
        </FooComp>
      </template>
      `)
    })
  })
})
import { parse } from '../src/parse'
import { compileStyle, compileStyleAsync } from '../src/compileStyle'

test('preprocess less', () => {
  const style = parse({
    source:
      '<style lang="less">\n' +
      '@red: rgb(255, 0, 0);\n' +
      '.color { color: @red; }\n' +
      '</style>\n',
    filename: 'example.vue',
    sourceMap: true
  }).styles[0]

  const result = compileStyle({
    id: 'v-scope-xxx',
    filename: 'example.vue',
    source: style.content,
    map: style.map,
    scoped: false,
    preprocessLang: style.lang
  })

  expect(result.errors.length).toBe(0)
  expect(result.code).toEqual(expect.stringContaining('color: #ff0000;'))
  expect(result.map).toBeTruthy()
})

test('preprocess scss', () => {
  const style = parse({
    source:
      '<style lang="scss">\n' +
      '$red: red;\n' +
      '.color { color: $red; }\n' +
      '</style>\n',
    filename: 'example.vue',
    sourceMap: true
  }).styles[0]
  const result = compileStyle({
    id: 'v-scope-xxx',
    filename: 'example.vue',
    source: style.content,
    map: style.map,
    scoped: false,
    preprocessLang: style.lang
  })

  expect(result.errors.length).toBe(0)
  expect(result.code).toMatch('color: red;')
  expect(result.map).toBeTruthy()
})

test('preprocess sass', () => {
  const style = parse({
    source:
      '<style lang="sass">\n' +
      '$red: red\n' +
      '.color\n' +
      '   color: $red\n' +
      '</style>\n',
    filename: 'example.vue',
    sourceMap: true
  }).styles[0]
  const result = compileStyle({
    id: 'v-scope-xxx',
    filename: 'example.vue',
    source: style.content,
    map: style.map,
    scoped: false,
    preprocessLang: style.lang
  })

  expect(result.errors.length).toBe(0)
  expect(result.code).toMatch('color: red;')
  expect(result.map).toBeTruthy()
})

test('preprocess stylus', () => {
  const style = parse({
    source:
      '<style lang="styl">\n' +
      'red-color = rgb(255, 0, 0);\n' +
      '.color\n' +
      '   color: red-color\n' +
      '</style>\n',
    filename: 'example.vue',
    sourceMap: true
  }).styles[0]
  const result = compileStyle({
    id: 'v-scope-xxx',
    filename: 'example.vue',
    source: style.content,
    map: style.map,
    scoped: false,
    preprocessLang: style.lang
  })

  expect(result.errors.length).toBe(0)
  expect(result.code).toEqual(expect.stringContaining('color: #f00;'))
  expect(result.map).toBeTruthy()
})

test('custom postcss plugin', () => {
  const spy = vi.fn()

  compileStyle({
    id: 'v-scope-xxx',
    filename: 'example.vue',
    source: '.foo { color: red }',
    scoped: false,
    postcssPlugins: [require('postcss').plugin('test-plugin', () => spy)()]
  })

  expect(spy).toHaveBeenCalled()
})

test('custom postcss options', () => {
  const result = compileStyle({
    id: 'v-scope-xxx',
    filename: 'example.vue',
    source: '.foo { color: red }',
    scoped: false,
    postcssOptions: { random: 'foo' }
  })

  expect((result.rawResult as any).opts.random).toBe('foo')
})

test('async postcss plugin in sync mode', () => {
  const result = compileStyle({
    id: 'v-scope-xxx',
    filename: 'example.vue',
    source: '.foo { color: red }',
    scoped: false,
    postcssPlugins: [
      require('postcss').plugin(
        'test-plugin',
        () => async (result: any) => result
      )
    ]
  })

  expect(result.errors).toHaveLength(1)
})

test('async postcss plugin', async () => {
  const promise = compileStyleAsync({
    id: 'v-scope-xxx',
    filename: 'example.vue',
    source: '.foo { color: red }',
    scoped: false,
    postcssPlugins: [
      require('postcss').plugin(
        'test-plugin',
        () => async (result: any) => result
      )
    ]
  })

  expect(promise instanceof Promise).toBe(true)

  const result = await promise
  expect(result.errors).toHaveLength(0)
  expect(result.code).toEqual(expect.stringContaining('color: red'))
})

test('media query', () => {
  const result = compileStyle({
    id: 'v-scope-xxx',
    scoped: true,
    filename: 'example.vue',
    source: `
@media print {
  .foo {
    color: #000;
  }
}`
  })

  expect(result.errors).toHaveLength(0)
  expect(result.code).toContain(
    '@media print {\n.foo[v-scope-xxx] {\n    color: #000;\n}\n}'
  )
})

test('supports query', () => {
  const result = compileStyle({
    id: 'v-scope-xxx',
    scoped: true,
    filename: 'example.vue',
    source: `
@supports ( color: #000 ) {
  .foo {
    color: #000;
  }
}`
  })

  expect(result.errors).toHaveLength(0)
  expect(result.code).toContain(
    '@supports ( color: #000 ) {\n.foo[v-scope-xxx] {\n    color: #000;\n}\n}'
  )
})
import { parse } from '../src/parse'
import { SFCBlock } from '../src/parseComponent'
import { compileTemplate } from '../src/compileTemplate'
import Vue from 'vue'

function mockRender(code: string, mocks: Record<string, any> = {}) {
  const fn = new Function(
    `require`,
    `${code}; return { render, staticRenderFns }`
  )
  const vm = new Vue(
    Object.assign(
      {},
      fn((id: string) => mocks[id])
    )
  )
  vm.$mount()
  return (vm as any)._vnode
}

test('should work', () => {
  const source = `<div><p>{{ render }}</p></div>`

  const result = compileTemplate({
    filename: 'example.vue',
    source
  })

  expect(result.errors.length).toBe(0)
  expect(result.source).toBe(source)
  // should expose render fns
  expect(result.code).toMatch(`var render = function`)
  expect(result.code).toMatch(`var staticRenderFns = []`)
  // should mark with stripped
  expect(result.code).toMatch(`render._withStripped = true`)
  // should prefix bindings
  expect(result.code).toMatch(`_vm.render`)
  expect(result.ast).not.toBeUndefined()
})

test('preprocess pug', () => {
  const template = parse({
    source:
      '<template lang="pug">\n' +
      'body\n' +
      ' h1 Pug Examples\n' +
      ' div.container\n' +
      '   p Cool Pug example!\n' +
      '</template>\n',
    filename: 'example.vue',
    sourceMap: true
  }).template as SFCBlock

  const result = compileTemplate({
    filename: 'example.vue',
    source: template.content,
    preprocessLang: template.lang
  })

  expect(result.errors.length).toBe(0)
})

/**
 * vuejs/component-compiler-utils#22 Support uri fragment in transformed require
 */
test('supports uri fragment in transformed require', () => {
  const source = '<svg>\
    <use href="~@svg/file.svg#fragment"></use>\
  </svg>' //
  const result = compileTemplate({
    filename: 'svgparticle.html',
    source: source,
    transformAssetUrls: {
      use: 'href'
    }
  })
  expect(result.errors.length).toBe(0)
  expect(result.code).toMatch(
    /href: require\("@svg\/file.svg"\) \+ "#fragment"/
  )
})

/**
 * vuejs/component-compiler-utils#22 Support uri fragment in transformed require
 */
test('when too short uri then empty require', () => {
  const source = '<svg>\
    <use href="~"></use>\
  </svg>' //
  const result = compileTemplate({
    filename: 'svgparticle.html',
    source: source,
    transformAssetUrls: {
      use: 'href'
    }
  })
  expect(result.errors.length).toBe(0)
  expect(result.code).toMatch(/href: require\(""\)/)
})

test('warn missing preprocessor', () => {
  const template = parse({
    source: '<template lang="unknownLang">\n' + '</template>\n',

    filename: 'example.vue',
    sourceMap: true
  }).template as SFCBlock

  const result = compileTemplate({
    filename: 'example.vue',
    source: template.content,
    preprocessLang: template.lang
  })

  expect(result.errors.length).toBe(1)
})

test('transform assetUrls', () => {
  const source = `
<div>
  <img src="./logo.png">
  <img src="~fixtures/logo.png">
  <img src="~/fixtures/logo.png">
</div>
`
  const result = compileTemplate({
    filename: 'example.vue',
    source,
    transformAssetUrls: true
  })
  expect(result.errors.length).toBe(0)

  const vnode = mockRender(result.code, {
    './logo.png': 'a',
    'fixtures/logo.png': 'b'
  })

  expect(vnode.children[0].data.attrs.src).toBe('a')
  expect(vnode.children[2].data.attrs.src).toBe('b')
  expect(vnode.children[4].data.attrs.src).toBe('b')
})

test('transform srcset', () => {
  const source = `
<div>
  <img src="./logo.png">
  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink">
    <image xlink:href="./logo.png" />
  </svg>
  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink">
    <use xlink:href="./logo.png"/>
  </svg>
  </svg>
  <img src="./logo.png" srcset="./logo.png">
  <img src="./logo.png" srcset="./logo.png 2x">
  <img src="./logo.png" srcset="./logo.png, ./logo.png 2x">
  <img src="./logo.png" srcset="./logo.png 2x, ./logo.png">
  <img src="./logo.png" srcset="./logo.png 2x, ./logo.png 3x">
  <img src="./logo.png" srcset="./logo.png, ./logo.png 2x, ./logo.png 3x">
  <img
    src="./logo.png"
    srcset="
      ./logo.png 2x,
      ./logo.png 3x
  ">
</div>
`
  const result = compileTemplate({
    filename: 'example.vue',
    source,
    transformAssetUrls: true
  })
  expect(result.errors.length).toBe(0)

  const vnode = mockRender(result.code, {
    './logo.png': 'test-url'
  })

  // img tag
  expect(vnode.children[0].data.attrs.src).toBe('test-url')
  // image tag (SVG)
  expect(vnode.children[2].children[0].data.attrs['xlink:href']).toBe(
    'test-url'
  )
  // use tag (SVG)
  expect(vnode.children[4].children[0].data.attrs['xlink:href']).toBe(
    'test-url'
  )

  // image tag with srcset
  expect(vnode.children[6].data.attrs.srcset).toBe('test-url')
  expect(vnode.children[8].data.attrs.srcset).toBe('test-url 2x')
  // image tag with multiline srcset
  expect(vnode.children[10].data.attrs.srcset).toBe('test-url, test-url 2x')
  expect(vnode.children[12].data.attrs.srcset).toBe('test-url 2x, test-url')
  expect(vnode.children[14].data.attrs.srcset).toBe('test-url 2x, test-url 3x')
  expect(vnode.children[16].data.attrs.srcset).toBe(
    'test-url, test-url 2x, test-url 3x'
  )
  expect(vnode.children[18].data.attrs.srcset).toBe('test-url 2x, test-url 3x')
})

test('transform assetUrls and srcset with base option', () => {
  const source = `
<div>
  <img src="./logo.png">
  <img src="~fixtures/logo.png">
  <img src="~/fixtures/logo.png">
  <img src="./logo.png" srcset="./logo.png 2x, ./logo.png 3x">
  <img src="@/fixtures/logo.png">
</div>
`
  const result = compileTemplate({
    filename: 'example.vue',
    source,
    transformAssetUrls: true,
    transformAssetUrlsOptions: { base: '/base/' }
  })

  expect(result.errors.length).toBe(0)

  const vnode = mockRender(result.code, {
    '@/fixtures/logo.png': 'aliased'
  })
  expect(vnode.children[0].data.attrs.src).toBe('/base/logo.png')
  expect(vnode.children[2].data.attrs.src).toBe('/base/fixtures/logo.png')
  expect(vnode.children[4].data.attrs.src).toBe('/base/fixtures/logo.png')
  expect(vnode.children[6].data.attrs.srcset).toBe(
    '/base/logo.png 2x, /base/logo.png 3x'
  )
  expect(vnode.children[8].data.attrs.src).toBe('aliased')
})

test('transform with includeAbsolute', () => {
  const source = `
  <div>
    <img src="./logo.png">
    <img src="/logo.png">
    <img src="https://foo.com/logo.png">
  </div>
  `
  const result = compileTemplate({
    filename: 'example.vue',
    source,
    transformAssetUrls: true,
    transformAssetUrlsOptions: { includeAbsolute: true }
  })

  expect(result.errors.length).toBe(0)

  const vnode = mockRender(result.code, {
    './logo.png': 'relative',
    '/logo.png': 'absolute'
  })
  expect(vnode.children[0].data.attrs.src).toBe('relative')
  expect(vnode.children[2].data.attrs.src).toBe('absolute')
  expect(vnode.children[4].data.attrs.src).toBe('https://foo.com/logo.png')
})
import { compileStyle, parse } from '../src'
import { mockId, compile, assertCode } from './util'

describe('CSS vars injection', () => {
  test('generating correct code for nested paths', () => {
    const { content } = compile(
      `<script>const a = 1</script>\n` +
        `<style>div{
          color: v-bind(color);
          font-size: v-bind('font.size');
        }</style>`
    )
    expect(content).toMatch(`_useCssVars((_vm, _setup) => ({
  "${mockId}-color": (_vm.color),
  "${mockId}-font_size": (_vm.font.size)
})`)
    assertCode(content)
  })

  test('w/ normal <script> binding analysis', () => {
    const { content } = compile(
      `<script>
      export default {
        setup() {
          return {
            size: ref('100px')
          }
        }
      }
      </script>\n` +
        `<style>
          div {
            font-size: v-bind(size);
          }
        </style>`
    )
    expect(content).toMatch(`_useCssVars((_vm, _setup) => ({
  "${mockId}-size": (_vm.size)
})`)
    expect(content).toMatch(`import { useCssVars as _useCssVars } from 'vue'`)
    assertCode(content)
  })

  test('w/ <script setup> binding analysis', () => {
    const { content } = compile(
      `<script setup>
        import { defineProps, ref } from 'vue'
        const color = 'red'
        const size = ref('10px')
        defineProps({
          foo: String
        })
        </script>\n` +
        `<style>
          div {
            color: v-bind(color);
            font-size: v-bind(size);
            border: v-bind(foo);
          }
        </style>`
    )
    // should handle:
    // 1. local const bindings
    // 2. local potential ref bindings
    // 3. props bindings (analyzed)
    expect(content).toMatch(`_useCssVars((_vm, _setup) => ({
  "${mockId}-color": (_setup.color),
  "${mockId}-size": (_setup.size),
  "${mockId}-foo": (_vm.foo)
})`)
    expect(content).toMatch(`import { useCssVars as _useCssVars } from 'vue'`)
    assertCode(content)
  })

  test('should rewrite CSS vars in compileStyle', () => {
    const { code } = compileStyle({
      source: `.foo {
        color: v-bind(color);
        font-size: v-bind('font.size');
      }`,
      filename: 'test.css',
      id: 'data-v-test'
    })
    expect(code).toMatchInlineSnapshot(`
      ".foo[data-v-test] {
              color: var(--test-color);
              font-size: var(--test-font_size);
      }"
    `)
  })

  test('prod mode', () => {
    const { content } = compile(
      `<script>const a = 1</script>\n` +
        `<style>div{
          color: v-bind(color);
          font-size: v-bind('font.size');
        }</style>`,
      { isProd: true }
    )
    expect(content).toMatch(`_useCssVars((_vm, _setup) => ({
  "4003f1a6": (_vm.color),
  "41b6490a": (_vm.font.size)
}))}`)

    const { code } = compileStyle({
      source: `.foo {
        color: v-bind(color);
        font-size: v-bind('font.size');
      }`,
      filename: 'test.css',
      id: mockId,
      isProd: true
    })
    expect(code).toMatchInlineSnapshot(`
      ".foo[xxxxxxxx] {
              color: var(--4003f1a6);
              font-size: var(--41b6490a);
      }"
    `)
  })

  describe('codegen', () => {
    test('<script> w/ no default export', () => {
      assertCode(
        compile(
          `<script>const a = 1</script>\n` +
            `<style>div{ color: v-bind(color); }</style>`
        ).content
      )
    })

    test('<script> w/ default export', () => {
      assertCode(
        compile(
          `<script>export default { setup() {} }</script>\n` +
            `<style>div{ color: v-bind(color); }</style>`
        ).content
      )
    })

    test('<script> w/ default export in strings/comments', () => {
      assertCode(
        compile(
          `<script>
          // export default {}
          export default {}
        </script>\n` + `<style>div{ color: v-bind(color); }</style>`
        ).content
      )
    })

    test('w/ <script setup>', () => {
      assertCode(
        compile(
          `<script setup>const color = 'red'</script>\n` +
            `<style>div{ color: v-bind(color); }</style>`
        ).content
      )
    })

    //#4185
    test('should ignore comments', () => {
      const { content } = compile(
        `<script setup>const color = 'red';const width = 100</script>\n` +
          `<style>
            /* comment **/
            div{ /* color: v-bind(color); */ width:20; }
            div{ width: v-bind(width); }
            /* comment */
          </style>`
      )

      expect(content).not.toMatch(`"${mockId}-color": (_setup.color)`)
      expect(content).toMatch(`"${mockId}-width": (_setup.width)`)
      assertCode(content)
    })

    test('w/ <script setup> using the same var multiple times', () => {
      const { content } = compile(
        `<script setup>
        const color = 'red'
        </script>\n` +
          `<style>
          div {
            color: v-bind(color);
          }
          p {
            color: v-bind(color);
          }
        </style>`
      )
      // color should only be injected once, even if it is twice in style
      expect(content).toMatch(`_useCssVars((_vm, _setup) => ({
  "${mockId}-color": (_setup.color)
})`)
      assertCode(content)
    })

    test('should work with w/ complex expression', () => {
      const { content } = compile(
        `<script setup>
        let a = 100
        let b = 200
        let foo = 300
        </script>\n` +
          `<style>
          p{
            width: calc(v-bind(foo) - 3px);
            height: calc(v-bind('foo') - 3px);
            top: calc(v-bind(foo + 'px') - 3px);
          }
          div {
            color: v-bind((a + b) / 2 + 'px' );
          }
          div {
            color: v-bind    ((a + b) / 2 + 'px' );
          }
          p {
            color: v-bind(((a + b)) / (2 * a));
          }
        </style>`
      )
      expect(content).toMatch(`_useCssVars((_vm, _setup) => ({
  "${mockId}-foo": (_setup.foo),
  "${mockId}-foo____px_": (_setup.foo + 'px'),
  "${mockId}-_a___b____2____px_": ((_setup.a + _setup.b) / 2 + 'px'),
  "${mockId}-__a___b______2___a_": (((_setup.a + _setup.b)) / (2 * _setup.a))
})`)
      assertCode(content)
    })

    // #6022
    test('should be able to parse incomplete expressions', () => {
      const { cssVars } = parse({
        source: `<script setup>let xxx = 1</script>
        <style scoped>
        label {
          font-weight: v-bind("count.toString(");
          font-weight: v-bind(xxx);
        }
        </style>`
      })
      expect(cssVars).toMatchObject([`count.toString(`, `xxx`])
    })
  })
})
import { WarningMessage } from 'types/compiler'
import { parseComponent } from '../src/parseComponent'

describe('Single File Component parser', () => {
  it('should parse', () => {
    const res = parseComponent(
      `
      <template>
        <div>hi</div>
      </template>
      <style src="./test.css"></style>
      <style lang="stylus" scoped>
        h1
          color red
        h2
          color green
      </style>
      <style module>
        h1 { font-weight: bold }
      </style>
      <style bool-attr val-attr="test"></style>
      <script>
        export default {}
      </script>
      <div>
        <style>nested should be ignored</style>
      </div>
    `
    )
    expect(res.template!.content.trim()).toBe('<div>hi</div>')
    expect(res.styles.length).toBe(4)
    expect(res.styles[0].src).toBe('./test.css')
    expect(res.styles[1].lang).toBe('stylus')
    expect(res.styles[1].scoped).toBe(true)
    expect(res.styles[1].content.trim()).toBe(
      'h1\n  color red\nh2\n  color green'
    )
    expect(res.styles[2].module).toBe(true)
    expect(res.styles[3].attrs['bool-attr']).toBe(true)
    expect(res.styles[3].attrs['val-attr']).toBe('test')
    expect(res.script!.content.trim()).toBe('export default {}')
  })

  it('should parse template with closed input', () => {
    const res = parseComponent(`
      <template>
        <input type="text"/>
      </template>
    `)

    expect(res.template!.content.trim()).toBe('<input type="text"/>')
  })

  it('should handle nested template', () => {
    const res = parseComponent(`
      <template>
        <div><template v-if="ok">hi</template></div>
      </template>
    `)
    expect(res.template!.content.trim()).toBe(
      '<div><template v-if="ok">hi</template></div>'
    )
  })

  it('deindent content', () => {
    const content = `
      <template>
        <div></div>
      </template>
      <script>
        export default {}
      </script>
      <style>
        h1 { color: red }
      </style>
    `
    const deindentDefault = parseComponent(content.trim(), {
      pad: false
    })
    const deindentEnabled = parseComponent(content.trim(), {
      pad: false,
      deindent: true
    })
    const deindentDisabled = parseComponent(content.trim(), {
      pad: false,
      deindent: false
    })

    expect(deindentDefault.template!.content).toBe('\n<div></div>\n')
    expect(deindentDefault.script!.content).toBe(
      '\n        export default {}\n      '
    )
    expect(deindentDefault.styles[0].content).toBe('\nh1 { color: red }\n')
    expect(deindentEnabled.template!.content).toBe('\n<div></div>\n')
    expect(deindentEnabled.script!.content).toBe('\nexport default {}\n')
    expect(deindentEnabled.styles[0].content).toBe('\nh1 { color: red }\n')
    expect(deindentDisabled.template!.content).toBe(
      '\n        <div></div>\n      '
    )
    expect(deindentDisabled.script!.content).toBe(
      '\n        export default {}\n      '
    )
    expect(deindentDisabled.styles[0].content).toBe(
      '\n        h1 { color: red }\n      '
    )
  })

  it('pad content', () => {
    const content = `
      <template>
        <div></div>
      </template>
      <script>
        export default {}
      </script>
      <style>
        h1 { color: red }
      </style>
`
    const padDefault = parseComponent(content.trim(), {
      pad: true,
      deindent: true
    })
    const padLine = parseComponent(content.trim(), {
      pad: 'line',
      deindent: true
    })
    const padSpace = parseComponent(content.trim(), {
      pad: 'space',
      deindent: true
    })

    expect(padDefault.script!.content).toBe(
      Array(3 + 1).join('//\n') + '\nexport default {}\n'
    )
    expect(padDefault.styles[0].content).toBe(
      Array(6 + 1).join('\n') + '\nh1 { color: red }\n'
    )
    expect(padLine.script!.content).toBe(
      Array(3 + 1).join('//\n') + '\nexport default {}\n'
    )
    expect(padLine.styles[0].content).toBe(
      Array(6 + 1).join('\n') + '\nh1 { color: red }\n'
    )
    expect(padSpace.script!.content).toBe(
      `<template>
        <div></div>
      </template>
      <script>`.replace(/./g, ' ') + '\nexport default {}\n'
    )
    expect(padSpace.styles[0].content).toBe(
      `<template>
        <div></div>
      </template>
      <script>
        export default {}
      </script>
      <style>`.replace(/./g, ' ') + '\nh1 { color: red }\n'
    )
  })

  it('should handle template blocks with lang as special text', () => {
    const res = parseComponent(
      `
      <template lang="pug">
        div
          h1(v-if='1 < 2') hello
      </template>
    `,
      { deindent: true }
    )
    expect(res.template!.content.trim()).toBe(`div\n  h1(v-if='1 < 2') hello`)
  })

  it('should handle component contains "<" only', () => {
    const res = parseComponent(`
      <template>
        <span><</span>
      </template>
    `)
    expect(res.template!.content.trim()).toBe(`<span><</span>`)
  })

  it('should handle custom blocks without parsing them', () => {
    const res = parseComponent(
      `
      <template>
        <div></div>
      </template>
      <example name="simple">
        <my-button ref="button">Hello</my-button>
      </example>
      <example name="with props">
        <my-button color="red">Hello</my-button>
      </example>
      <test name="simple" foo="bar">
      export default function simple (vm) {
        describe('Hello', () => {
          it('should display Hello', () => {
            this.vm.$refs.button.$el.innerText.should.equal('Hello')
          }))
        }))
      }
      </test>
      <custom src="./x.json"></custom>
    `
    )
    expect(res.customBlocks.length).toBe(4)

    const simpleExample = res.customBlocks[0]
    expect(simpleExample.type).toBe('example')
    expect(simpleExample.content.trim()).toBe(
      '<my-button ref="button">Hello</my-button>'
    )
    expect(simpleExample.attrs.name).toBe('simple')

    const withProps = res.customBlocks[1]
    expect(withProps.type).toBe('example')
    expect(withProps.content.trim()).toBe(
      '<my-button color="red">Hello</my-button>'
    )
    expect(withProps.attrs.name).toBe('with props')

    const simpleTest = res.customBlocks[2]
    expect(simpleTest.type).toBe('test')
    expect(simpleTest.content.trim())
      .toBe(`export default function simple (vm) {
  describe('Hello', () => {
    it('should display Hello', () => {
      this.vm.$refs.button.$el.innerText.should.equal('Hello')
    }))
  }))
}`)
    expect(simpleTest.attrs.name).toBe('simple')
    expect(simpleTest.attrs.foo).toBe('bar')

    const customWithSrc = res.customBlocks[3]
    expect(customWithSrc.src).toBe('./x.json')
  })

  // Regression #4289
  it('accepts nested template tag', () => {
    const raw = `<div>
      <template v-if="true === true">
        <section class="section">
          <div class="container">
            Should be shown
          </div>
        </section>
      </template>
      <template v-else>
        <p>Should not be shown</p>
      </template>
    </div>`
    const res = parseComponent(`<template>${raw}</template>`)
    expect(res.template!.content.trim()).toBe(raw)
  })

  it('should not hang on trailing text', () => {
    const res = parseComponent(`<template>hi</`)
    expect(res.template!.content).toBe('hi')
  })

  it('should collect errors with source range', () => {
    const res = parseComponent(`<template>hi</`, { outputSourceRange: true })
    expect(res.errors.length).toBe(1)
    expect((res.errors[0] as WarningMessage).start).toBe(0)
  })
})
import { prefixIdentifiers } from '../src/prefixIdentifiers'
import { compile } from 'web/entry-compiler'
import { format } from 'prettier'
import { BindingTypes } from '../src/types'

const toFn = (source: string) => `function render(){${source}\n}`

it('should work', () => {
  const { render } = compile(`<div id="app">
  <div :style="{ color }">{{ foo }}</div>
  <p v-for="i in list">{{ i }}</p>
  <foo inline-template>
    <div>{{ bar }}</div>
  </foo>
</div>`)

  const result = format(prefixIdentifiers(toFn(render)), {
    semi: false,
    parser: 'babel'
  })

  expect(result).not.toMatch(`_vm._c`)
  expect(result).toMatch(`_vm.foo`)
  expect(result).toMatch(`_vm.list`)
  expect(result).toMatch(`{ color: _vm.color }`)
  expect(result).not.toMatch(`_vm.i`)
  expect(result).not.toMatch(`with (this)`)

  expect(result).toMatchInlineSnapshot(`
    "function render() {
      var _vm = this,
        _c = _vm._self._c
      return _c(
        \\"div\\",
        { attrs: { id: \\"app\\" } },
        [
          _c(\\"div\\", { style: { color: _vm.color } }, [_vm._v(_vm._s(_vm.foo))]),
          _vm._v(\\" \\"),
          _vm._l(_vm.list, function (i) {
            return _c(\\"p\\", [_vm._v(_vm._s(i))])
          }),
          _vm._v(\\" \\"),
          _c(\\"foo\\", {
            inlineTemplate: {
              render: function () {
                var _vm = this,
                  _c = _vm._self._c
                return _c(\\"div\\", [_vm._v(_vm._s(_vm.bar))])
              },
              staticRenderFns: [],
            },
          }),
        ],
        2
      )
    }
    "
  `)
})

it('setup bindings', () => {
  const { render } = compile(`<div @click="count++">{{ count }}</div>`)

  const result = format(
    prefixIdentifiers(toFn(render), false, false, undefined, {
      count: BindingTypes.SETUP_REF
    }),
    {
      semi: false,
      parser: 'babel'
    }
  )

  expect(result).toMatch(`_setup = _vm._self._setupProxy`)
  expect(result).toMatch(`_setup.count++`)
  expect(result).toMatch(`_vm._s(_setup.count)`)

  expect(result).toMatchInlineSnapshot(`
    "function render() {
      var _vm = this,
        _c = _vm._self._c,
        _setup = _vm._self._setupProxy
      return _c(
        \\"div\\",
        {
          on: {
            click: function (\$event) {
              _setup.count++
            },
          },
        },
        [_vm._v(_vm._s(_setup.count))]
      )
    }
    "
  `)
})
import { rewriteDefault } from '../src'

describe('compiler sfc: rewriteDefault', () => {
  test('without export default', () => {
    expect(rewriteDefault(`export  a = {}`, 'script')).toMatchInlineSnapshot(`
      "export  a = {}
      const script = {}"
    `)
  })

  test('rewrite export default', () => {
    expect(
      rewriteDefault(`export  default {}`, 'script')
    ).toMatchInlineSnapshot(`"const script = {}"`)
  })

  test('rewrite export named default', () => {
    expect(
      rewriteDefault(
        `const a = 1 \n export { a as b, a as default, a as c}`,
        'script'
      )
    ).toMatchInlineSnapshot(`
      "const a = 1 
       export { a as b,  a as c}
      const script = a"
    `)

    expect(
      rewriteDefault(
        `const a = 1 \n export { a as b, a as default    , a as c}`,
        'script'
      )
    ).toMatchInlineSnapshot(`
      "const a = 1 
       export { a as b,  a as c}
      const script = a"
    `)
  })

  test('w/ comments', async () => {
    expect(rewriteDefault(`// export default\nexport default {}`, 'script'))
      .toMatchInlineSnapshot(`
      "// export default
      const script = {}"
    `)
  })

  test('export named default multiline', () => {
    expect(
      rewriteDefault(`let App = {}\n export {\nApp as default\n}`, '_sfc_main')
    ).toMatchInlineSnapshot(`
      "let App = {}
       export {
      
      }
      const _sfc_main = App"
    `)
  })

  test('export named default multiline /w comments', () => {
    expect(
      rewriteDefault(
        `const a = 1 \n export {\n a as b,\n a as default,\n a as c}\n` +
          `// export { myFunction as default }`,
        'script'
      )
    ).toMatchInlineSnapshot(`
      "const a = 1 
       export {
       a as b,
       
       a as c}
      // export { myFunction as default }
      const script = a"
    `)

    expect(
      rewriteDefault(
        `const a = 1 \n export {\n a as b,\n a as default      ,\n a as c}\n` +
          `// export { myFunction as default }`,
        'script'
      )
    ).toMatchInlineSnapshot(`
      "const a = 1 
       export {
       a as b,
       
       a as c}
      // export { myFunction as default }
      const script = a"
    `)
  })

  test(`export { default } from '...'`, async () => {
    expect(
      rewriteDefault(`export { default, foo } from './index.js'`, 'script')
    ).toMatchInlineSnapshot(`
    "import { default as __VUE_DEFAULT__ } from './index.js'
    export {  foo } from './index.js'
    const script = __VUE_DEFAULT__"
    `)

    expect(
      rewriteDefault(`export { default    , foo } from './index.js'`, 'script')
    ).toMatchInlineSnapshot(`
    "import { default as __VUE_DEFAULT__ } from './index.js'
    export {  foo } from './index.js'
    const script = __VUE_DEFAULT__"
    `)

    expect(
      rewriteDefault(`export { foo,   default } from './index.js'`, 'script')
    ).toMatchInlineSnapshot(`
    "import { default as __VUE_DEFAULT__ } from './index.js'
    export { foo,    } from './index.js'
    const script = __VUE_DEFAULT__"
    `)

    expect(
      rewriteDefault(
        `export { foo as default, bar } from './index.js'`,
        'script'
      )
    ).toMatchInlineSnapshot(`
    "import { foo } from './index.js'
    export {  bar } from './index.js'
    const script = foo"
    `)

    expect(
      rewriteDefault(
        `export { foo as default     , bar } from './index.js'`,
        'script'
      )
    ).toMatchInlineSnapshot(`
    "import { foo } from './index.js'
    export {  bar } from './index.js'
    const script = foo"
    `)

    expect(
      rewriteDefault(
        `export { bar,   foo as default } from './index.js'`,
        'script'
      )
    ).toMatchInlineSnapshot(`
    "import { foo } from './index.js'
    export { bar,    } from './index.js'
    const script = foo"
    `)
  })

  test('export default class', async () => {
    expect(rewriteDefault(`export default class Foo {}`, 'script'))
      .toMatchInlineSnapshot(`
      "class Foo {}
      const script = Foo"
    `)
  })

  test('export default class w/ comments', async () => {
    expect(
      rewriteDefault(`// export default\nexport default class Foo {}`, 'script')
    ).toMatchInlineSnapshot(`
      "// export default
      class Foo {}
      const script = Foo"
    `)
  })

  test('export default class w/ comments 2', async () => {
    expect(
      rewriteDefault(
        `export default {}\n` + `// export default class Foo {}`,
        'script'
      )
    ).toMatchInlineSnapshot(`
      "const script = {}
      // export default class Foo {}"
    `)
  })

  test('export default class w/ comments 3', async () => {
    expect(
      rewriteDefault(
        `/*\nexport default class Foo {}*/\n` + `export default class Bar {}`,
        'script'
      )
    ).toMatchInlineSnapshot(`
      "/*
      export default class Foo {}*/
      class Bar {}
      const script = Bar"
    `)
  })

  test('@Component\nexport default class', async () => {
    expect(rewriteDefault(`@Component\nexport default class Foo {}`, 'script'))
      .toMatchInlineSnapshot(`
      "@Component
      class Foo {}
      const script = Foo"
    `)
  })

  test('@Component\nexport default class w/ comments', async () => {
    expect(
      rewriteDefault(`// export default\n@Component\nexport default class Foo {}`, 'script')
    ).toMatchInlineSnapshot(`
      "// export default
      @Component
      class Foo {}
      const script = Foo"
    `)
  })

  test('@Component\nexport default class w/ comments 2', async () => {
    expect(
      rewriteDefault(
        `export default {}\n` + `// @Component\n// export default class Foo {}`,
        'script'
      )
    ).toMatchInlineSnapshot(`
      "const script = {}
      // @Component
      // export default class Foo {}"
    `)
  })

  test('@Component\nexport default class w/ comments 3', async () => {
    expect(
      rewriteDefault(
        `/*\n@Component\nexport default class Foo {}*/\n` + `export default class Bar {}`,
        'script'
      )
    ).toMatchInlineSnapshot(`
      "/*
      @Component
      export default class Foo {}*/
      class Bar {}
      const script = Bar"
    `)
  })
})
import { compileStyle } from '../src/compileStyle'

// vue-loader/#1370
test('spaces after selector', () => {
  const { code } = compileStyle({
    source: `.foo , .bar { color: red; }`,
    filename: 'test.css',
    id: 'test'
  })

  expect(code).toMatch(`.foo[test], .bar[test] { color: red;`)
})

test('leading deep selector', () => {
  const { code } = compileStyle({
    source: `>>> .foo { color: red; }`,
    filename: 'test.css',
    id: 'test'
  })

  expect(code).toMatch(`[test] .foo { color: red;`)
})

test('scoped css', () => {
  const { code: style } = compileStyle({
    id: 'v-scope-xxx',
    scoped: true,
    filename: 'example.vue',
    source: `
.test {
  color: yellow;
}
.test:after {
  content: 'bye!';
}
h1 {
  color: green;
}
.anim {
  animation: color 5s infinite, other 5s;
}
.anim-2 {
  animation-name: color;
  animation-duration: 5s;
}
.anim-3 {
  animation: 5s color infinite, 5s other;
}
.anim-multiple {
  animation: color 5s infinite, opacity 2s;
}
.anim-multiple-2 {
  animation-name: color, opacity;
  animation-duration: 5s, 2s;
}

@keyframes color {
  from { color: red; }
  to { color: green; }
}
@-webkit-keyframes color {
  from { color: red; }
  to { color: green; }
}
@keyframes opacity {
  from { opacity: 0; }
  to { opacity: 1; }
}
@-webkit-keyframes opacity {
  from { opacity: 0; }
  to { opacity: 1; }
}
.foo p >>> .bar {
  color: red;
}
.foo div /deep/ .bar {
  color: red;
}

.foo span ::v-deep .bar {
  color: red;
}
`
  })

  expect(style).toContain(`.test[v-scope-xxx] {\n  color: yellow;\n}`)
  expect(style).toContain(`.test[v-scope-xxx]:after {\n  content: \'bye!\';\n}`)
  expect(style).toContain(`h1[v-scope-xxx] {\n  color: green;\n}`)
  // scoped keyframes
  expect(style).toContain(
    `.anim[v-scope-xxx] {\n  animation: color-v-scope-xxx 5s infinite, other 5s;`
  )
  expect(style).toContain(
    `.anim-2[v-scope-xxx] {\n  animation-name: color-v-scope-xxx`
  )
  expect(style).toContain(
    `.anim-3[v-scope-xxx] {\n  animation: 5s color-v-scope-xxx infinite, 5s other;`
  )
  expect(style).toContain(`@keyframes color-v-scope-xxx {`)
  expect(style).toContain(`@-webkit-keyframes color-v-scope-xxx {`)

  expect(style).toContain(
    `.anim-multiple[v-scope-xxx] {\n  animation: color-v-scope-xxx 5s infinite,opacity-v-scope-xxx 2s;`
  )
  expect(style).toContain(
    `.anim-multiple-2[v-scope-xxx] {\n  animation-name: color-v-scope-xxx,opacity-v-scope-xxx;`
  )
  expect(style).toContain(`@keyframes opacity-v-scope-xxx {`)
  expect(style).toContain(`@-webkit-keyframes opacity-v-scope-xxx {`)
  // >>> combinator
  expect(style).toContain(`.foo p[v-scope-xxx] .bar {\n  color: red;\n}`)
  // /deep/ alias for >>>
  expect(style).toContain(`.foo div[v-scope-xxx] .bar {\n  color: red;\n}`)
  // ::-v-deep alias for >>>
  expect(style).toContain(`.foo span[v-scope-xxx] .bar {\n  color: red;\n}`)
})

test('pseudo element', () => {
  const { code } = compileStyle({
    source: '::selection { display: none; }',
    filename: 'test.css',
    id: 'test'
  })

  expect(code).toContain('[test]::selection {')
})

test('spaces before pseudo element', () => {
  const { code } = compileStyle({
    source: '.abc, ::selection { color: red; }',
    filename: 'test.css',
    id: 'test'
  })

  expect(code).toContain('.abc[test],')
  expect(code).toContain('[test]::selection {')
})
{
  "extends": "../../../tsconfig.json",
  "compilerOptions": {
    "types": ["node", "vitest/globals"]
  },
  "include": ["../src", "."]
}
import {
  parse,
  compileScript,
  type SFCParseOptions,
  type SFCScriptCompileOptions
} from '../src'
import { parse as babelParse } from '@babel/parser'

export const mockId = 'xxxxxxxx'

export function compile(
  source: string,
  options?: Partial<SFCScriptCompileOptions>,
  parseOptions?: Partial<SFCParseOptions>
) {
  const sfc = parse({
    ...parseOptions,
    source
  })
  return compileScript(sfc, { id: mockId, ...options })
}

export function assertCode(code: string) {
  // parse the generated code to make sure it is valid
  try {
    babelParse(code, {
      sourceType: 'module',
      plugins: ['typescript']
    })
  } catch (e: any) {
    console.log(code)
    throw e
  }
  expect(code).toMatchSnapshot()
}
const range = 2

export function generateCodeFrame(
  source: string,
  start: number = 0,
  end: number = source.length
): string {
  const lines = source.split(/\r?\n/)
  let count = 0
  const res: string[] = []
  for (let i = 0; i < lines.length; i++) {
    count += lines[i].length + 1
    if (count >= start) {
      for (let j = i - range; j <= i + range || end > count; j++) {
        if (j < 0 || j >= lines.length) continue
        res.push(
          `${j + 1}${repeat(` `, 3 - String(j + 1).length)}|  ${lines[j]}`
        )
        const lineLength = lines[j].length
        if (j === i) {
          // push underline
          const pad = start - (count - lineLength) + 1
          const length = end > count ? lineLength - pad : end - start
          res.push(`   |  ` + repeat(` `, pad) + repeat(`^`, length))
        } else if (j > i) {
          if (end > count) {
            const length = Math.min(end - count, lineLength)
            res.push(`   |  ` + repeat(`^`, length))
          }
          count += lineLength + 1
        }
      }
      break
    }
  }
  return res.join('\n')
}

function repeat(str: string, n: number) {
  let result = ''
  if (n > 0) {
    // eslint-disable-next-line no-constant-condition
    while (true) {
      // eslint-disable-line
      if (n & 1) result += str
      n >>>= 1
      if (n <= 0) break
      str += str
    }
  }
  return result
}
import { ASTElementHandler, ASTElementHandlers } from 'types/compiler'

const fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/
const fnInvokeRE = /\([^)]*?\);*$/
const simplePathRE =
  /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/

// KeyboardEvent.keyCode aliases
const keyCodes: { [key: string]: number | Array<number> } = {
  esc: 27,
  tab: 9,
  enter: 13,
  space: 32,
  up: 38,
  left: 37,
  right: 39,
  down: 40,
  delete: [8, 46]
}

// KeyboardEvent.key aliases
const keyNames: { [key: string]: string | Array<string> } = {
  // #7880: IE11 and Edge use `Esc` for Escape key name.
  esc: ['Esc', 'Escape'],
  tab: 'Tab',
  enter: 'Enter',
  // #9112: IE11 uses `Spacebar` for Space key name.
  space: [' ', 'Spacebar'],
  // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
  up: ['Up', 'ArrowUp'],
  left: ['Left', 'ArrowLeft'],
  right: ['Right', 'ArrowRight'],
  down: ['Down', 'ArrowDown'],
  // #9112: IE11 uses `Del` for Delete key name.
  delete: ['Backspace', 'Delete', 'Del']
}

// #4868: modifiers that prevent the execution of the listener
// need to explicitly return null so that we can determine whether to remove
// the listener for .once
const genGuard = condition => `if(${condition})return null;`

const modifierCode: { [key: string]: string } = {
  stop: '$event.stopPropagation();',
  prevent: '$event.preventDefault();',
  self: genGuard(`$event.target !== $event.currentTarget`),
  ctrl: genGuard(`!$event.ctrlKey`),
  shift: genGuard(`!$event.shiftKey`),
  alt: genGuard(`!$event.altKey`),
  meta: genGuard(`!$event.metaKey`),
  left: genGuard(`'button' in $event && $event.button !== 0`),
  middle: genGuard(`'button' in $event && $event.button !== 1`),
  right: genGuard(`'button' in $event && $event.button !== 2`)
}

export function genHandlers(
  events: ASTElementHandlers,
  isNative: boolean
): string {
  const prefix = isNative ? 'nativeOn:' : 'on:'
  let staticHandlers = ``
  let dynamicHandlers = ``
  for (const name in events) {
    const handlerCode = genHandler(events[name])
    //@ts-expect-error
    if (events[name] && events[name].dynamic) {
      dynamicHandlers += `${name},${handlerCode},`
    } else {
      staticHandlers += `"${name}":${handlerCode},`
    }
  }
  staticHandlers = `{${staticHandlers.slice(0, -1)}}`
  if (dynamicHandlers) {
    return prefix + `_d(${staticHandlers},[${dynamicHandlers.slice(0, -1)}])`
  } else {
    return prefix + staticHandlers
  }
}

function genHandler(
  handler: ASTElementHandler | Array<ASTElementHandler>
): string {
  if (!handler) {
    return 'function(){}'
  }

  if (Array.isArray(handler)) {
    return `[${handler.map(handler => genHandler(handler)).join(',')}]`
  }

  const isMethodPath = simplePathRE.test(handler.value)
  const isFunctionExpression = fnExpRE.test(handler.value)
  const isFunctionInvocation = simplePathRE.test(
    handler.value.replace(fnInvokeRE, '')
  )

  if (!handler.modifiers) {
    if (isMethodPath || isFunctionExpression) {
      return handler.value
    }
    return `function($event){${
      isFunctionInvocation ? `return ${handler.value}` : handler.value
    }}` // inline statement
  } else {
    let code = ''
    let genModifierCode = ''
    const keys: string[] = []
    for (const key in handler.modifiers) {
      if (modifierCode[key]) {
        genModifierCode += modifierCode[key]
        // left/right
        if (keyCodes[key]) {
          keys.push(key)
        }
      } else if (key === 'exact') {
        const modifiers = handler.modifiers
        genModifierCode += genGuard(
          ['ctrl', 'shift', 'alt', 'meta']
            .filter(keyModifier => !modifiers[keyModifier])
            .map(keyModifier => `$event.${keyModifier}Key`)
            .join('||')
        )
      } else {
        keys.push(key)
      }
    }
    if (keys.length) {
      code += genKeyFilter(keys)
    }
    // Make sure modifiers like prevent and stop get executed after key filtering
    if (genModifierCode) {
      code += genModifierCode
    }
    const handlerCode = isMethodPath
      ? `return ${handler.value}.apply(null, arguments)`
      : isFunctionExpression
      ? `return (${handler.value}).apply(null, arguments)`
      : isFunctionInvocation
      ? `return ${handler.value}`
      : handler.value
    return `function($event){${code}${handlerCode}}`
  }
}

function genKeyFilter(keys: Array<string>): string {
  return (
    // make sure the key filters only apply to KeyboardEvents
    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
    // key events that do not have keyCode property...
    `if(!$event.type.indexOf('key')&&` +
    `${keys.map(genFilterCode).join('&&')})return null;`
  )
}

function genFilterCode(key: string): string {
  const keyVal = parseInt(key, 10)
  if (keyVal) {
    return `$event.keyCode!==${keyVal}`
  }
  const keyCode = keyCodes[key]
  const keyName = keyNames[key]
  return (
    `_k($event.keyCode,` +
    `${JSON.stringify(key)},` +
    `${JSON.stringify(keyCode)},` +
    `$event.key,` +
    `${JSON.stringify(keyName)}` +
    `)`
  )
}
import { genHandlers } from './events'
import baseDirectives from '../directives/index'
import { camelize, no, extend, capitalize } from 'shared/util'
import { baseWarn, pluckModuleFunction } from '../helpers'
import { emptySlotScopeToken } from '../parser/index'
import {
  ASTAttr,
  ASTDirective,
  ASTElement,
  ASTExpression,
  ASTIfConditions,
  ASTNode,
  ASTText,
  CompilerOptions
} from 'types/compiler'
import { BindingMetadata, BindingTypes } from 'sfc/types'

type TransformFunction = (el: ASTElement, code: string) => string
type DataGenFunction = (el: ASTElement) => string
type DirectiveFunction = (
  el: ASTElement,
  dir: ASTDirective,
  warn: Function
) => boolean

export class CodegenState {
  options: CompilerOptions
  warn: Function
  transforms: Array<TransformFunction>
  dataGenFns: Array<DataGenFunction>
  directives: { [key: string]: DirectiveFunction }
  maybeComponent: (el: ASTElement) => boolean
  onceId: number
  staticRenderFns: Array<string>
  pre: boolean

  constructor(options: CompilerOptions) {
    this.options = options
    this.warn = options.warn || baseWarn
    this.transforms = pluckModuleFunction(options.modules, 'transformCode')
    this.dataGenFns = pluckModuleFunction(options.modules, 'genData')
    this.directives = extend(extend({}, baseDirectives), options.directives)
    const isReservedTag = options.isReservedTag || no
    this.maybeComponent = (el: ASTElement) =>
      !!el.component || !isReservedTag(el.tag)
    this.onceId = 0
    this.staticRenderFns = []
    this.pre = false
  }
}

export type CodegenResult = {
  render: string
  staticRenderFns: Array<string>
}

export function generate(
  ast: ASTElement | void,
  options: CompilerOptions
): CodegenResult {
  const state = new CodegenState(options)
  // fix #11483, Root level <script> tags should not be rendered.
  const code = ast
    ? ast.tag === 'script'
      ? 'null'
      : genElement(ast, state)
    : '_c("div")'
  return {
    render: `with(this){return ${code}}`,
    staticRenderFns: state.staticRenderFns
  }
}

export function genElement(el: ASTElement, state: CodegenState): string {
  if (el.parent) {
    el.pre = el.pre || el.parent.pre
  }

  if (el.staticRoot && !el.staticProcessed) {
    return genStatic(el, state)
  } else if (el.once && !el.onceProcessed) {
    return genOnce(el, state)
  } else if (el.for && !el.forProcessed) {
    return genFor(el, state)
  } else if (el.if && !el.ifProcessed) {
    return genIf(el, state)
  } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
    return genChildren(el, state) || 'void 0'
  } else if (el.tag === 'slot') {
    return genSlot(el, state)
  } else {
    // component or element
    let code
    if (el.component) {
      code = genComponent(el.component, el, state)
    } else {
      let data
      const maybeComponent = state.maybeComponent(el)
      if (!el.plain || (el.pre && maybeComponent)) {
        data = genData(el, state)
      }

      let tag: string | undefined
      // check if this is a component in <script setup>
      const bindings = state.options.bindings
      if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
        tag = checkBindingType(bindings, el.tag)
      }
      if (!tag) tag = `'${el.tag}'`

      const children = el.inlineTemplate ? null : genChildren(el, state, true)
      code = `_c(${tag}${
        data ? `,${data}` : '' // data
      }${
        children ? `,${children}` : '' // children
      })`
    }
    // module transforms
    for (let i = 0; i < state.transforms.length; i++) {
      code = state.transforms[i](el, code)
    }
    return code
  }
}

function checkBindingType(bindings: BindingMetadata, key: string) {
  const camelName = camelize(key)
  const PascalName = capitalize(camelName)
  const checkType = (type) => {
    if (bindings[key] === type) {
      return key
    }
    if (bindings[camelName] === type) {
      return camelName
    }
    if (bindings[PascalName] === type) {
      return PascalName
    }
  }
  const fromConst =
    checkType(BindingTypes.SETUP_CONST) ||
    checkType(BindingTypes.SETUP_REACTIVE_CONST)
  if (fromConst) {
    return fromConst
  }

  const fromMaybeRef =
    checkType(BindingTypes.SETUP_LET) ||
    checkType(BindingTypes.SETUP_REF) ||
    checkType(BindingTypes.SETUP_MAYBE_REF)
  if (fromMaybeRef) {
    return fromMaybeRef
  }
}

// hoist static sub-trees out
function genStatic(el: ASTElement, state: CodegenState): string {
  el.staticProcessed = true
  // Some elements (templates) need to behave differently inside of a v-pre
  // node.  All pre nodes are static roots, so we can use this as a location to
  // wrap a state change and reset it upon exiting the pre node.
  const originalPreState = state.pre
  if (el.pre) {
    state.pre = el.pre
  }
  state.staticRenderFns.push(`with(this){return ${genElement(el, state)}}`)
  state.pre = originalPreState
  return `_m(${state.staticRenderFns.length - 1}${
    el.staticInFor ? ',true' : ''
  })`
}

// v-once
function genOnce(el: ASTElement, state: CodegenState): string {
  el.onceProcessed = true
  if (el.if && !el.ifProcessed) {
    return genIf(el, state)
  } else if (el.staticInFor) {
    let key = ''
    let parent = el.parent
    while (parent) {
      if (parent.for) {
        key = parent.key!
        break
      }
      parent = parent.parent
    }
    if (!key) {
      __DEV__ &&
        state.warn(
          `v-once can only be used inside v-for that is keyed. `,
          el.rawAttrsMap['v-once']
        )
      return genElement(el, state)
    }
    return `_o(${genElement(el, state)},${state.onceId++},${key})`
  } else {
    return genStatic(el, state)
  }
}

export function genIf(
  el: any,
  state: CodegenState,
  altGen?: Function,
  altEmpty?: string
): string {
  el.ifProcessed = true // avoid recursion
  return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)
}

function genIfConditions(
  conditions: ASTIfConditions,
  state: CodegenState,
  altGen?: Function,
  altEmpty?: string
): string {
  if (!conditions.length) {
    return altEmpty || '_e()'
  }

  const condition = conditions.shift()!
  if (condition.exp) {
    return `(${condition.exp})?${genTernaryExp(
      condition.block
    )}:${genIfConditions(conditions, state, altGen, altEmpty)}`
  } else {
    return `${genTernaryExp(condition.block)}`
  }

  // v-if with v-once should generate code like (a)?_m(0):_m(1)
  function genTernaryExp(el) {
    return altGen
      ? altGen(el, state)
      : el.once
      ? genOnce(el, state)
      : genElement(el, state)
  }
}

export function genFor(
  el: any,
  state: CodegenState,
  altGen?: Function,
  altHelper?: string
): string {
  const exp = el.for
  const alias = el.alias
  const iterator1 = el.iterator1 ? `,${el.iterator1}` : ''
  const iterator2 = el.iterator2 ? `,${el.iterator2}` : ''

  if (
    __DEV__ &&
    state.maybeComponent(el) &&
    el.tag !== 'slot' &&
    el.tag !== 'template' &&
    !el.key
  ) {
    state.warn(
      `<${el.tag} v-for="${alias} in ${exp}">: component lists rendered with ` +
        `v-for should have explicit keys. ` +
        `See https://v2.vuejs.org/v2/guide/list.html#key for more info.`,
      el.rawAttrsMap['v-for'],
      true /* tip */
    )
  }

  el.forProcessed = true // avoid recursion
  return (
    `${altHelper || '_l'}((${exp}),` +
    `function(${alias}${iterator1}${iterator2}){` +
    `return ${(altGen || genElement)(el, state)}` +
    '})'
  )
}

export function genData(el: ASTElement, state: CodegenState): string {
  let data = '{'

  // directives first.
  // directives may mutate the el's other properties before they are generated.
  const dirs = genDirectives(el, state)
  if (dirs) data += dirs + ','

  // key
  if (el.key) {
    data += `key:${el.key},`
  }
  // ref
  if (el.ref) {
    data += `ref:${el.ref},`
  }
  if (el.refInFor) {
    data += `refInFor:true,`
  }
  // pre
  if (el.pre) {
    data += `pre:true,`
  }
  // record original tag name for components using "is" attribute
  if (el.component) {
    data += `tag:"${el.tag}",`
  }
  // module data generation functions
  for (let i = 0; i < state.dataGenFns.length; i++) {
    data += state.dataGenFns[i](el)
  }
  // attributes
  if (el.attrs) {
    data += `attrs:${genProps(el.attrs)},`
  }
  // DOM props
  if (el.props) {
    data += `domProps:${genProps(el.props)},`
  }
  // event handlers
  if (el.events) {
    data += `${genHandlers(el.events, false)},`
  }
  if (el.nativeEvents) {
    data += `${genHandlers(el.nativeEvents, true)},`
  }
  // slot target
  // only for non-scoped slots
  if (el.slotTarget && !el.slotScope) {
    data += `slot:${el.slotTarget},`
  }
  // scoped slots
  if (el.scopedSlots) {
    data += `${genScopedSlots(el, el.scopedSlots, state)},`
  }
  // component v-model
  if (el.model) {
    data += `model:{value:${el.model.value},callback:${el.model.callback},expression:${el.model.expression}},`
  }
  // inline-template
  if (el.inlineTemplate) {
    const inlineTemplate = genInlineTemplate(el, state)
    if (inlineTemplate) {
      data += `${inlineTemplate},`
    }
  }
  data = data.replace(/,$/, '') + '}'
  // v-bind dynamic argument wrap
  // v-bind with dynamic arguments must be applied using the same v-bind object
  // merge helper so that class/style/mustUseProp attrs are handled correctly.
  if (el.dynamicAttrs) {
    data = `_b(${data},"${el.tag}",${genProps(el.dynamicAttrs)})`
  }
  // v-bind data wrap
  if (el.wrapData) {
    data = el.wrapData(data)
  }
  // v-on data wrap
  if (el.wrapListeners) {
    data = el.wrapListeners(data)
  }
  return data
}

function genDirectives(el: ASTElement, state: CodegenState): string | void {
  const dirs = el.directives
  if (!dirs) return
  let res = 'directives:['
  let hasRuntime = false
  let i, l, dir, needRuntime
  for (i = 0, l = dirs.length; i < l; i++) {
    dir = dirs[i]
    needRuntime = true
    const gen: DirectiveFunction = state.directives[dir.name]
    if (gen) {
      // compile-time directive that manipulates AST.
      // returns true if it also needs a runtime counterpart.
      needRuntime = !!gen(el, dir, state.warn)
    }
    if (needRuntime) {
      hasRuntime = true
      res += `{name:"${dir.name}",rawName:"${dir.rawName}"${
        dir.value
          ? `,value:(${dir.value}),expression:${JSON.stringify(dir.value)}`
          : ''
      }${dir.arg ? `,arg:${dir.isDynamicArg ? dir.arg : `"${dir.arg}"`}` : ''}${
        dir.modifiers ? `,modifiers:${JSON.stringify(dir.modifiers)}` : ''
      }},`
    }
  }
  if (hasRuntime) {
    return res.slice(0, -1) + ']'
  }
}

function genInlineTemplate(
  el: ASTElement,
  state: CodegenState
): string | undefined {
  const ast = el.children[0]
  if (__DEV__ && (el.children.length !== 1 || ast.type !== 1)) {
    state.warn(
      'Inline-template components must have exactly one child element.',
      { start: el.start }
    )
  }
  if (ast && ast.type === 1) {
    const inlineRenderFns = generate(ast, state.options)
    return `inlineTemplate:{render:function(){${
      inlineRenderFns.render
    }},staticRenderFns:[${inlineRenderFns.staticRenderFns
      .map(code => `function(){${code}}`)
      .join(',')}]}`
  }
}

function genScopedSlots(
  el: ASTElement,
  slots: { [key: string]: ASTElement },
  state: CodegenState
): string {
  // by default scoped slots are considered "stable", this allows child
  // components with only scoped slots to skip forced updates from parent.
  // but in some cases we have to bail-out of this optimization
  // for example if the slot contains dynamic names, has v-if or v-for on them...
  let needsForceUpdate =
    el.for ||
    Object.keys(slots).some(key => {
      const slot = slots[key]
      return (
        slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
      )
    })

  // #9534: if a component with scoped slots is inside a conditional branch,
  // it's possible for the same component to be reused but with different
  // compiled slot content. To avoid that, we generate a unique key based on
  // the generated code of all the slot contents.
  let needsKey = !!el.if

  // OR when it is inside another scoped slot or v-for (the reactivity may be
  // disconnected due to the intermediate scope variable)
  // #9438, #9506
  // TODO: this can be further optimized by properly analyzing in-scope bindings
  // and skip force updating ones that do not actually use scope variables.
  if (!needsForceUpdate) {
    let parent = el.parent
    while (parent) {
      if (
        (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||
        parent.for
      ) {
        needsForceUpdate = true
        break
      }
      if (parent.if) {
        needsKey = true
      }
      parent = parent.parent
    }
  }

  const generatedSlots = Object.keys(slots)
    .map(key => genScopedSlot(slots[key], state))
    .join(',')

  return `scopedSlots:_u([${generatedSlots}]${
    needsForceUpdate ? `,null,true` : ``
  }${
    !needsForceUpdate && needsKey ? `,null,false,${hash(generatedSlots)}` : ``
  })`
}

function hash(str) {
  let hash = 5381
  let i = str.length
  while (i) {
    hash = (hash * 33) ^ str.charCodeAt(--i)
  }
  return hash >>> 0
}

function containsSlotChild(el: ASTNode): boolean {
  if (el.type === 1) {
    if (el.tag === 'slot') {
      return true
    }
    return el.children.some(containsSlotChild)
  }
  return false
}

function genScopedSlot(el: ASTElement, state: CodegenState): string {
  const isLegacySyntax = el.attrsMap['slot-scope']
  if (el.if && !el.ifProcessed && !isLegacySyntax) {
    return genIf(el, state, genScopedSlot, `null`)
  }
  if (el.for && !el.forProcessed) {
    return genFor(el, state, genScopedSlot)
  }
  const slotScope =
    el.slotScope === emptySlotScopeToken ? `` : String(el.slotScope)
  const fn =
    `function(${slotScope}){` +
    `return ${
      el.tag === 'template'
        ? el.if && isLegacySyntax
          ? `(${el.if})?${genChildren(el, state) || 'undefined'}:undefined`
          : genChildren(el, state) || 'undefined'
        : genElement(el, state)
    }}`
  // reverse proxy v-slot without scope on this.$slots
  const reverseProxy = slotScope ? `` : `,proxy:true`
  return `{key:${el.slotTarget || `"default"`},fn:${fn}${reverseProxy}}`
}

export function genChildren(
  el: ASTElement,
  state: CodegenState,
  checkSkip?: boolean,
  altGenElement?: Function,
  altGenNode?: Function
): string | void {
  const children = el.children
  if (children.length) {
    const el: any = children[0]
    // optimize single v-for
    if (
      children.length === 1 &&
      el.for &&
      el.tag !== 'template' &&
      el.tag !== 'slot'
    ) {
      const normalizationType = checkSkip
        ? state.maybeComponent(el)
          ? `,1`
          : `,0`
        : ``
      return `${(altGenElement || genElement)(el, state)}${normalizationType}`
    }
    const normalizationType = checkSkip
      ? getNormalizationType(children, state.maybeComponent)
      : 0
    const gen = altGenNode || genNode
    return `[${children.map(c => gen(c, state)).join(',')}]${
      normalizationType ? `,${normalizationType}` : ''
    }`
  }
}

// determine the normalization needed for the children array.
// 0: no normalization needed
// 1: simple normalization needed (possible 1-level deep nested array)
// 2: full normalization needed
function getNormalizationType(
  children: Array<ASTNode>,
  maybeComponent: (el: ASTElement) => boolean
): number {
  let res = 0
  for (let i = 0; i < children.length; i++) {
    const el: ASTNode = children[i]
    if (el.type !== 1) {
      continue
    }
    if (
      needsNormalization(el) ||
      (el.ifConditions &&
        el.ifConditions.some(c => needsNormalization(c.block)))
    ) {
      res = 2
      break
    }
    if (
      maybeComponent(el) ||
      (el.ifConditions && el.ifConditions.some(c => maybeComponent(c.block)))
    ) {
      res = 1
    }
  }
  return res
}

function needsNormalization(el: ASTElement): boolean {
  return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'
}

function genNode(node: ASTNode, state: CodegenState): string {
  if (node.type === 1) {
    return genElement(node, state)
  } else if (node.type === 3 && node.isComment) {
    return genComment(node)
  } else {
    return genText(node)
  }
}

export function genText(text: ASTText | ASTExpression): string {
  return `_v(${
    text.type === 2
      ? text.expression // no need for () because already wrapped in _s()
      : transformSpecialNewlines(JSON.stringify(text.text))
  })`
}

export function genComment(comment: ASTText): string {
  return `_e(${JSON.stringify(comment.text)})`
}

function genSlot(el: ASTElement, state: CodegenState): string {
  const slotName = el.slotName || '"default"'
  const children = genChildren(el, state)
  let res = `_t(${slotName}${children ? `,function(){return ${children}}` : ''}`
  const attrs =
    el.attrs || el.dynamicAttrs
      ? genProps(
          (el.attrs || []).concat(el.dynamicAttrs || []).map(attr => ({
            // slot props are camelized
            name: camelize(attr.name),
            value: attr.value,
            dynamic: attr.dynamic
          }))
        )
      : null
  const bind = el.attrsMap['v-bind']
  if ((attrs || bind) && !children) {
    res += `,null`
  }
  if (attrs) {
    res += `,${attrs}`
  }
  if (bind) {
    res += `${attrs ? '' : ',null'},${bind}`
  }
  return res + ')'
}

// componentName is el.component, take it as argument to shun flow's pessimistic refinement
function genComponent(
  componentName: string,
  el: ASTElement,
  state: CodegenState
): string {
  const children = el.inlineTemplate ? null : genChildren(el, state, true)
  return `_c(${componentName},${genData(el, state)}${
    children ? `,${children}` : ''
  })`
}

function genProps(props: Array<ASTAttr>): string {
  let staticProps = ``
  let dynamicProps = ``
  for (let i = 0; i < props.length; i++) {
    const prop = props[i]
    const value = transformSpecialNewlines(prop.value)
    if (prop.dynamic) {
      dynamicProps += `${prop.name},${value},`
    } else {
      staticProps += `"${prop.name}":${value},`
    }
  }
  staticProps = `{${staticProps.slice(0, -1)}}`
  if (dynamicProps) {
    return `_d(${staticProps},[${dynamicProps.slice(0, -1)}])`
  } else {
    return staticProps
  }
}

// #3895, #4268
function transformSpecialNewlines(text: string): string {
  return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029')
}
import { extend } from 'shared/util'
import { CompilerOptions, CompiledResult, WarningMessage } from 'types/compiler'
import { detectErrors } from './error-detector'
import { createCompileToFunctionFn } from './to-function'

export function createCompilerCreator(baseCompile: Function): Function {
  return function createCompiler(baseOptions: CompilerOptions) {
    function compile(
      template: string,
      options?: CompilerOptions
    ): CompiledResult {
      const finalOptions = Object.create(baseOptions)
      const errors: WarningMessage[] = []
      const tips: WarningMessage[] = []

      let warn = (
        msg: WarningMessage,
        range: { start: number; end: number },
        tip: string
      ) => {
        ;(tip ? tips : errors).push(msg)
      }

      if (options) {
        if (__DEV__ && options.outputSourceRange) {
          // $flow-disable-line
          const leadingSpaceLength = template.match(/^\s*/)![0].length

          warn = (
            msg: WarningMessage | string,
            range: { start: number; end: number },
            tip: string
          ) => {
            const data: WarningMessage = typeof msg === 'string' ? { msg } : msg
            if (range) {
              if (range.start != null) {
                data.start = range.start + leadingSpaceLength
              }
              if (range.end != null) {
                data.end = range.end + leadingSpaceLength
              }
            }
            ;(tip ? tips : errors).push(data)
          }
        }
        // merge custom modules
        if (options.modules) {
          finalOptions.modules = (baseOptions.modules || []).concat(
            options.modules
          )
        }
        // merge custom directives
        if (options.directives) {
          finalOptions.directives = extend(
            Object.create(baseOptions.directives || null),
            options.directives
          )
        }
        // copy other options
        for (const key in options) {
          if (key !== 'modules' && key !== 'directives') {
            finalOptions[key] = options[key as keyof CompilerOptions]
          }
        }
      }

      finalOptions.warn = warn

      const compiled = baseCompile(template.trim(), finalOptions)
      if (__DEV__) {
        detectErrors(compiled.ast, warn)
      }
      compiled.errors = errors
      compiled.tips = tips
      return compiled
    }

    return {
      compile,
      compileToFunctions: createCompileToFunctionFn(compile)
    }
  }
}
import { ASTDirective, ASTElement } from 'types/compiler'

export default function bind(el: ASTElement, dir: ASTDirective) {
  el.wrapData = (code: string) => {
    return `_b(${code},'${el.tag}',${dir.value},${
      dir.modifiers && dir.modifiers.prop ? 'true' : 'false'
    }${dir.modifiers && dir.modifiers.sync ? ',true' : ''})`
  }
}
import on from './on'
import bind from './bind'
import { noop } from 'shared/util'

export default {
  on,
  bind,
  cloak: noop
}
import { ASTElement, ASTModifiers } from 'types/compiler'

/**
 * Cross-platform code generation for component v-model
 */
export function genComponentModel(
  el: ASTElement,
  value: string,
  modifiers: ASTModifiers | null
): void {
  const { number, trim } = modifiers || {}

  const baseValueExpression = '$$v'
  let valueExpression = baseValueExpression
  if (trim) {
    valueExpression =
      `(typeof ${baseValueExpression} === 'string'` +
      `? ${baseValueExpression}.trim()` +
      `: ${baseValueExpression})`
  }
  if (number) {
    valueExpression = `_n(${valueExpression})`
  }
  const assignment = genAssignmentCode(value, valueExpression)

  el.model = {
    value: `(${value})`,
    expression: JSON.stringify(value),
    callback: `function (${baseValueExpression}) {${assignment}}`
  }
}

/**
 * Cross-platform codegen helper for generating v-model value assignment code.
 */
export function genAssignmentCode(value: string, assignment: string): string {
  const res = parseModel(value)
  if (res.key === null) {
    return `${value}=${assignment}`
  } else {
    return `$set(${res.exp}, ${res.key}, ${assignment})`
  }
}

/**
 * Parse a v-model expression into a base path and a final key segment.
 * Handles both dot-path and possible square brackets.
 *
 * Possible cases:
 *
 * - test
 * - test[key]
 * - test[test1[key]]
 * - test["a"][key]
 * - xxx.test[a[a].test1[key]]
 * - test.xxx.a["asa"][test1[key]]
 *
 */

let len, str, chr, index, expressionPos, expressionEndPos

type ModelParseResult = {
  exp: string
  key: string | null
}

export function parseModel(val: string): ModelParseResult {
  // Fix https://github.com/vuejs/vue/pull/7730
  // allow v-model="obj.val " (trailing whitespace)
  val = val.trim()
  len = val.length

  if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
    index = val.lastIndexOf('.')
    if (index > -1) {
      return {
        exp: val.slice(0, index),
        key: '"' + val.slice(index + 1) + '"'
      }
    } else {
      return {
        exp: val,
        key: null
      }
    }
  }

  str = val
  index = expressionPos = expressionEndPos = 0

  while (!eof()) {
    chr = next()
    /* istanbul ignore if */
    if (isStringStart(chr)) {
      parseString(chr)
    } else if (chr === 0x5b) {
      parseBracket(chr)
    }
  }

  return {
    exp: val.slice(0, expressionPos),
    key: val.slice(expressionPos + 1, expressionEndPos)
  }
}

function next(): number {
  return str.charCodeAt(++index)
}

function eof(): boolean {
  return index >= len
}

function isStringStart(chr: number): boolean {
  return chr === 0x22 || chr === 0x27
}

function parseBracket(chr: number): void {
  let inBracket = 1
  expressionPos = index
  while (!eof()) {
    chr = next()
    if (isStringStart(chr)) {
      parseString(chr)
      continue
    }
    if (chr === 0x5b) inBracket++
    if (chr === 0x5d) inBracket--
    if (inBracket === 0) {
      expressionEndPos = index
      break
    }
  }
}

function parseString(chr: number): void {
  const stringQuote = chr
  while (!eof()) {
    chr = next()
    if (chr === stringQuote) {
      break
    }
  }
}
import { warn } from 'core/util/index'
import { ASTDirective, ASTElement } from 'types/compiler'

export default function on(el: ASTElement, dir: ASTDirective) {
  if (__DEV__ && dir.modifiers) {
    warn(`v-on without argument does not support modifiers.`)
  }
  el.wrapListeners = (code: string) => `_g(${code},${dir.value})`
}
import { ASTElement, ASTNode } from 'types/compiler'
import { dirRE, onRE } from './parser/index'

type Range = { start?: number; end?: number }

// these keywords should not appear inside expressions, but operators like
// typeof, instanceof and in are allowed
const prohibitedKeywordRE = new RegExp(
  '\\b' +
    (
      'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
      'super,throw,while,yield,delete,export,import,return,switch,default,' +
      'extends,finally,continue,debugger,function,arguments'
    )
      .split(',')
      .join('\\b|\\b') +
    '\\b'
)

// these unary operators should not be used as property/method names
const unaryOperatorsRE = new RegExp(
  '\\b' +
    'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
    '\\s*\\([^\\)]*\\)'
)

// strip strings in expressions
const stripStringRE =
  /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g

// detect problematic expressions in a template
export function detectErrors(ast: ASTNode | undefined, warn: Function) {
  if (ast) {
    checkNode(ast, warn)
  }
}

function checkNode(node: ASTNode, warn: Function) {
  if (node.type === 1) {
    for (const name in node.attrsMap) {
      if (dirRE.test(name)) {
        const value = node.attrsMap[name]
        if (value) {
          const range = node.rawAttrsMap[name]
          if (name === 'v-for') {
            checkFor(node, `v-for="${value}"`, warn, range)
          } else if (name === 'v-slot' || name[0] === '#') {
            checkFunctionParameterExpression(
              value,
              `${name}="${value}"`,
              warn,
              range
            )
          } else if (onRE.test(name)) {
            checkEvent(value, `${name}="${value}"`, warn, range)
          } else {
            checkExpression(value, `${name}="${value}"`, warn, range)
          }
        }
      }
    }
    if (node.children) {
      for (let i = 0; i < node.children.length; i++) {
        checkNode(node.children[i], warn)
      }
    }
  } else if (node.type === 2) {
    checkExpression(node.expression, node.text, warn, node)
  }
}

function checkEvent(exp: string, text: string, warn: Function, range?: Range) {
  const stripped = exp.replace(stripStringRE, '')
  const keywordMatch: any = stripped.match(unaryOperatorsRE)
  if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
    warn(
      `avoid using JavaScript unary operator as property name: ` +
        `"${keywordMatch[0]}" in expression ${text.trim()}`,
      range
    )
  }
  checkExpression(exp, text, warn, range)
}

function checkFor(
  node: ASTElement,
  text: string,
  warn: Function,
  range?: Range
) {
  checkExpression(node.for || '', text, warn, range)
  checkIdentifier(node.alias, 'v-for alias', text, warn, range)
  checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range)
  checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range)
}

function checkIdentifier(
  ident: string | null | undefined,
  type: string,
  text: string,
  warn: Function,
  range?: Range
) {
  if (typeof ident === 'string') {
    try {
      new Function(`var ${ident}=_`)
    } catch (e: any) {
      warn(`invalid ${type} "${ident}" in expression: ${text.trim()}`, range)
    }
  }
}

function checkExpression(
  exp: string,
  text: string,
  warn: Function,
  range?: Range
) {
  try {
    new Function(`return ${exp}`)
  } catch (e: any) {
    const keywordMatch = exp
      .replace(stripStringRE, '')
      .match(prohibitedKeywordRE)
    if (keywordMatch) {
      warn(
        `avoid using JavaScript keyword as property name: ` +
          `"${keywordMatch[0]}"\n  Raw expression: ${text.trim()}`,
        range
      )
    } else {
      warn(
        `invalid expression: ${e.message} in\n\n` +
          `    ${exp}\n\n` +
          `  Raw expression: ${text.trim()}\n`,
        range
      )
    }
  }
}

function checkFunctionParameterExpression(
  exp: string,
  text: string,
  warn: Function,
  range?: Range
) {
  try {
    new Function(exp, '')
  } catch (e: any) {
    warn(
      `invalid function parameter expression: ${e.message} in\n\n` +
        `    ${exp}\n\n` +
        `  Raw expression: ${text.trim()}\n`,
      range
    )
  }
}
import { emptyObject } from 'shared/util'
import { ASTElement, ASTModifiers } from 'types/compiler'
import { parseFilters } from './parser/filter-parser'

type Range = { start?: number; end?: number }

/* eslint-disable no-unused-vars */
export function baseWarn(msg: string, range?: Range) {
  console.error(`[Vue compiler]: ${msg}`)
}
/* eslint-enable no-unused-vars */

export function pluckModuleFunction<T, K extends keyof T>(
  modules: Array<T> | undefined,
  key: K
): Array<Exclude<T[K], undefined>> {
  return modules ? (modules.map(m => m[key]).filter(_ => _) as any) : []
}

export function addProp(
  el: ASTElement,
  name: string,
  value: string,
  range?: Range,
  dynamic?: boolean
) {
  ;(el.props || (el.props = [])).push(
    rangeSetItem({ name, value, dynamic }, range)
  )
  el.plain = false
}

export function addAttr(
  el: ASTElement,
  name: string,
  value: any,
  range?: Range,
  dynamic?: boolean
) {
  const attrs = dynamic
    ? el.dynamicAttrs || (el.dynamicAttrs = [])
    : el.attrs || (el.attrs = [])
  attrs.push(rangeSetItem({ name, value, dynamic }, range))
  el.plain = false
}

// add a raw attr (use this in preTransforms)
export function addRawAttr(
  el: ASTElement,
  name: string,
  value: any,
  range?: Range
) {
  el.attrsMap[name] = value
  el.attrsList.push(rangeSetItem({ name, value }, range))
}

export function addDirective(
  el: ASTElement,
  name: string,
  rawName: string,
  value: string,
  arg?: string,
  isDynamicArg?: boolean,
  modifiers?: ASTModifiers,
  range?: Range
) {
  ;(el.directives || (el.directives = [])).push(
    rangeSetItem(
      {
        name,
        rawName,
        value,
        arg,
        isDynamicArg,
        modifiers
      },
      range
    )
  )
  el.plain = false
}

function prependModifierMarker(
  symbol: string,
  name: string,
  dynamic?: boolean
): string {
  return dynamic ? `_p(${name},"${symbol}")` : symbol + name // mark the event as captured
}

export function addHandler(
  el: ASTElement,
  name: string,
  value: string,
  modifiers?: ASTModifiers | null,
  important?: boolean,
  warn?: Function,
  range?: Range,
  dynamic?: boolean
) {
  modifiers = modifiers || emptyObject
  // warn prevent and passive modifier
  /* istanbul ignore if */
  if (__DEV__ && warn && modifiers.prevent && modifiers.passive) {
    warn(
      "passive and prevent can't be used together. " +
        "Passive handler can't prevent default event.",
      range
    )
  }

  // normalize click.right and click.middle since they don't actually fire
  // this is technically browser-specific, but at least for now browsers are
  // the only target envs that have right/middle clicks.
  if (modifiers.right) {
    if (dynamic) {
      name = `(${name})==='click'?'contextmenu':(${name})`
    } else if (name === 'click') {
      name = 'contextmenu'
      delete modifiers.right
    }
  } else if (modifiers.middle) {
    if (dynamic) {
      name = `(${name})==='click'?'mouseup':(${name})`
    } else if (name === 'click') {
      name = 'mouseup'
    }
  }

  // check capture modifier
  if (modifiers.capture) {
    delete modifiers.capture
    name = prependModifierMarker('!', name, dynamic)
  }
  if (modifiers.once) {
    delete modifiers.once
    name = prependModifierMarker('~', name, dynamic)
  }
  /* istanbul ignore if */
  if (modifiers.passive) {
    delete modifiers.passive
    name = prependModifierMarker('&', name, dynamic)
  }

  let events
  if (modifiers.native) {
    delete modifiers.native
    events = el.nativeEvents || (el.nativeEvents = {})
  } else {
    events = el.events || (el.events = {})
  }

  const newHandler: any = rangeSetItem({ value: value.trim(), dynamic }, range)
  if (modifiers !== emptyObject) {
    newHandler.modifiers = modifiers
  }

  const handlers = events[name]
  /* istanbul ignore if */
  if (Array.isArray(handlers)) {
    important ? handlers.unshift(newHandler) : handlers.push(newHandler)
  } else if (handlers) {
    events[name] = important ? [newHandler, handlers] : [handlers, newHandler]
  } else {
    events[name] = newHandler
  }

  el.plain = false
}

export function getRawBindingAttr(el: ASTElement, name: string) {
  return (
    el.rawAttrsMap[':' + name] ||
    el.rawAttrsMap['v-bind:' + name] ||
    el.rawAttrsMap[name]
  )
}

export function getBindingAttr(
  el: ASTElement,
  name: string,
  getStatic?: boolean
): string | undefined {
  const dynamicValue =
    getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name)
  if (dynamicValue != null) {
    return parseFilters(dynamicValue)
  } else if (getStatic !== false) {
    const staticValue = getAndRemoveAttr(el, name)
    if (staticValue != null) {
      return JSON.stringify(staticValue)
    }
  }
}

// note: this only removes the attr from the Array (attrsList) so that it
// doesn't get processed by processAttrs.
// By default it does NOT remove it from the map (attrsMap) because the map is
// needed during codegen.
export function getAndRemoveAttr(
  el: ASTElement,
  name: string,
  removeFromMap?: boolean
): string | undefined {
  let val
  if ((val = el.attrsMap[name]) != null) {
    const list = el.attrsList
    for (let i = 0, l = list.length; i < l; i++) {
      if (list[i].name === name) {
        list.splice(i, 1)
        break
      }
    }
  }
  if (removeFromMap) {
    delete el.attrsMap[name]
  }
  return val
}

export function getAndRemoveAttrByRegex(el: ASTElement, name: RegExp) {
  const list = el.attrsList
  for (let i = 0, l = list.length; i < l; i++) {
    const attr = list[i]
    if (name.test(attr.name)) {
      list.splice(i, 1)
      return attr
    }
  }
}

function rangeSetItem(item: any, range?: { start?: number; end?: number }) {
  if (range) {
    if (range.start != null) {
      item.start = range.start
    }
    if (range.end != null) {
      item.end = range.end
    }
  }
  return item
}
import { parse } from './parser/index'
import { optimize } from './optimizer'
import { generate } from './codegen/index'
import { createCompilerCreator } from './create-compiler'
import { CompilerOptions, CompiledResult } from 'types/compiler'

// `createCompilerCreator` allows creating compilers that use alternative
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
// Here we just export a default compiler using the default parts.
export const createCompiler = createCompilerCreator(function baseCompile(
  template: string,
  options: CompilerOptions
): CompiledResult {
  const ast = parse(template.trim(), options)
  if (options.optimize !== false) {
    optimize(ast, options)
  }
  const code = generate(ast, options)
  return {
    ast,
    render: code.render,
    staticRenderFns: code.staticRenderFns
  }
})
import { makeMap, isBuiltInTag, cached, no } from 'shared/util'
import { ASTElement, CompilerOptions, ASTNode } from 'types/compiler'

let isStaticKey
let isPlatformReservedTag

const genStaticKeysCached = cached(genStaticKeys)

/**
 * Goal of the optimizer: walk the generated template AST tree
 * and detect sub-trees that are purely static, i.e. parts of
 * the DOM that never needs to change.
 *
 * Once we detect these sub-trees, we can:
 *
 * 1. Hoist them into constants, so that we no longer need to
 *    create fresh nodes for them on each re-render;
 * 2. Completely skip them in the patching process.
 */
export function optimize(
  root: ASTElement | null | undefined,
  options: CompilerOptions
) {
  if (!root) return
  isStaticKey = genStaticKeysCached(options.staticKeys || '')
  isPlatformReservedTag = options.isReservedTag || no
  // first pass: mark all non-static nodes.
  markStatic(root)
  // second pass: mark static roots.
  markStaticRoots(root, false)
}

function genStaticKeys(keys: string): Function {
  return makeMap(
    'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
      (keys ? ',' + keys : '')
  )
}

function markStatic(node: ASTNode) {
  node.static = isStatic(node)
  if (node.type === 1) {
    // do not make component slot content static. this avoids
    // 1. components not able to mutate slot nodes
    // 2. static slot content fails for hot-reloading
    if (
      !isPlatformReservedTag(node.tag) &&
      node.tag !== 'slot' &&
      node.attrsMap['inline-template'] == null
    ) {
      return
    }
    for (let i = 0, l = node.children.length; i < l; i++) {
      const child = node.children[i]
      markStatic(child)
      if (!child.static) {
        node.static = false
      }
    }
    if (node.ifConditions) {
      for (let i = 1, l = node.ifConditions.length; i < l; i++) {
        const block = node.ifConditions[i].block
        markStatic(block)
        if (!block.static) {
          node.static = false
        }
      }
    }
  }
}

function markStaticRoots(node: ASTNode, isInFor: boolean) {
  if (node.type === 1) {
    if (node.static || node.once) {
      node.staticInFor = isInFor
    }
    // For a node to qualify as a static root, it should have children that
    // are not just static text. Otherwise the cost of hoisting out will
    // outweigh the benefits and it's better off to just always render it fresh.
    if (
      node.static &&
      node.children.length &&
      !(node.children.length === 1 && node.children[0].type === 3)
    ) {
      node.staticRoot = true
      return
    } else {
      node.staticRoot = false
    }
    if (node.children) {
      for (let i = 0, l = node.children.length; i < l; i++) {
        markStaticRoots(node.children[i], isInFor || !!node.for)
      }
    }
    if (node.ifConditions) {
      for (let i = 1, l = node.ifConditions.length; i < l; i++) {
        markStaticRoots(node.ifConditions[i].block, isInFor)
      }
    }
  }
}

function isStatic(node: ASTNode): boolean {
  if (node.type === 2) {
    // expression
    return false
  }
  if (node.type === 3) {
    // text
    return true
  }
  return !!(
    node.pre ||
    (!node.hasBindings && // no dynamic bindings
      !node.if &&
      !node.for && // not v-if or v-for or v-else
      !isBuiltInTag(node.tag) && // not a built-in
      isPlatformReservedTag(node.tag) && // not a component
      !isDirectChildOfTemplateFor(node) &&
      Object.keys(node).every(isStaticKey))
  )
}

function isDirectChildOfTemplateFor(node: ASTElement): boolean {
  while (node.parent) {
    node = node.parent
    if (node.tag !== 'template') {
      return false
    }
    if (node.for) {
      return true
    }
  }
  return false
}
let decoder

export default {
  decode(html: string): string {
    decoder = decoder || document.createElement('div')
    decoder.innerHTML = html
    return decoder.textContent
  }
}
const validDivisionCharRE = /[\w).+\-_$\]]/

export function parseFilters(exp: string): string {
  let inSingle = false
  let inDouble = false
  let inTemplateString = false
  let inRegex = false
  let curly = 0
  let square = 0
  let paren = 0
  let lastFilterIndex = 0
  let c, prev, i, expression, filters

  for (i = 0; i < exp.length; i++) {
    prev = c
    c = exp.charCodeAt(i)
    if (inSingle) {
      if (c === 0x27 && prev !== 0x5c) inSingle = false
    } else if (inDouble) {
      if (c === 0x22 && prev !== 0x5c) inDouble = false
    } else if (inTemplateString) {
      if (c === 0x60 && prev !== 0x5c) inTemplateString = false
    } else if (inRegex) {
      if (c === 0x2f && prev !== 0x5c) inRegex = false
    } else if (
      c === 0x7c && // pipe
      exp.charCodeAt(i + 1) !== 0x7c &&
      exp.charCodeAt(i - 1) !== 0x7c &&
      !curly &&
      !square &&
      !paren
    ) {
      if (expression === undefined) {
        // first filter, end of expression
        lastFilterIndex = i + 1
        expression = exp.slice(0, i).trim()
      } else {
        pushFilter()
      }
    } else {
      switch (c) {
        case 0x22:
          inDouble = true
          break // "
        case 0x27:
          inSingle = true
          break // '
        case 0x60:
          inTemplateString = true
          break // `
        case 0x28:
          paren++
          break // (
        case 0x29:
          paren--
          break // )
        case 0x5b:
          square++
          break // [
        case 0x5d:
          square--
          break // ]
        case 0x7b:
          curly++
          break // {
        case 0x7d:
          curly--
          break // }
      }
      if (c === 0x2f) {
        // /
        let j = i - 1
        let p
        // find first non-whitespace prev char
        for (; j >= 0; j--) {
          p = exp.charAt(j)
          if (p !== ' ') break
        }
        if (!p || !validDivisionCharRE.test(p)) {
          inRegex = true
        }
      }
    }
  }

  if (expression === undefined) {
    expression = exp.slice(0, i).trim()
  } else if (lastFilterIndex !== 0) {
    pushFilter()
  }

  function pushFilter() {
    ;(filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim())
    lastFilterIndex = i + 1
  }

  if (filters) {
    for (i = 0; i < filters.length; i++) {
      expression = wrapFilter(expression, filters[i])
    }
  }

  return expression
}

function wrapFilter(exp: string, filter: string): string {
  const i = filter.indexOf('(')
  if (i < 0) {
    // _f: resolveFilter
    return `_f("${filter}")(${exp})`
  } else {
    const name = filter.slice(0, i)
    const args = filter.slice(i + 1)
    return `_f("${name}")(${exp}${args !== ')' ? ',' + args : args}`
  }
}
/**
 * Not type-checking this file because it's mostly vendor code.
 */

/*!
 * HTML Parser By John Resig (ejohn.org)
 * Modified by Juriy "kangax" Zaytsev
 * Original code by Erik Arvidsson (MPL-1.1 OR Apache-2.0 OR GPL-2.0-or-later)
 * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
 */

import { makeMap, no } from 'shared/util'
import { isNonPhrasingTag } from 'web/compiler/util'
import { unicodeRegExp } from 'core/util/lang'
import { ASTAttr, CompilerOptions } from 'types/compiler'

// Regular Expressions for parsing tags and attributes
const attribute =
  /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/
const dynamicArgAttribute =
  /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/
const ncname = `[a-zA-Z_][\\-\\.0-9_a-zA-Z${unicodeRegExp.source}]*`
const qnameCapture = `((?:${ncname}\\:)?${ncname})`
const startTagOpen = new RegExp(`^<${qnameCapture}`)
const startTagClose = /^\s*(\/?)>/
const endTag = new RegExp(`^<\\/${qnameCapture}[^>]*>`)
const doctype = /^<!DOCTYPE [^>]+>/i
// #7298: escape - to avoid being passed as HTML comment when inlined in page
const comment = /^<!\--/
const conditionalComment = /^<!\[/

// Special Elements (can contain anything)
export const isPlainTextElement = makeMap('script,style,textarea', true)
const reCache = {}

const decodingMap = {
  '&lt;': '<',
  '&gt;': '>',
  '&quot;': '"',
  '&amp;': '&',
  '&#10;': '\n',
  '&#9;': '\t',
  '&#39;': "'"
}
const encodedAttr = /&(?:lt|gt|quot|amp|#39);/g
const encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g

// #5992
const isIgnoreNewlineTag = makeMap('pre,textarea', true)
const shouldIgnoreFirstNewline = (tag, html) =>
  tag && isIgnoreNewlineTag(tag) && html[0] === '\n'

function decodeAttr(value, shouldDecodeNewlines) {
  const re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr
  return value.replace(re, match => decodingMap[match])
}

export interface HTMLParserOptions extends CompilerOptions {
  start?: (
    tag: string,
    attrs: ASTAttr[],
    unary: boolean,
    start: number,
    end: number
  ) => void
  end?: (tag: string, start: number, end: number) => void
  chars?: (text: string, start?: number, end?: number) => void
  comment?: (content: string, start: number, end: number) => void
}

export function parseHTML(html, options: HTMLParserOptions) {
  const stack: any[] = []
  const expectHTML = options.expectHTML
  const isUnaryTag = options.isUnaryTag || no
  const canBeLeftOpenTag = options.canBeLeftOpenTag || no
  let index = 0
  let last, lastTag
  while (html) {
    last = html
    // Make sure we're not in a plaintext content element like script/style
    if (!lastTag || !isPlainTextElement(lastTag)) {
      let textEnd = html.indexOf('<')
      if (textEnd === 0) {
        // Comment:
        if (comment.test(html)) {
          const commentEnd = html.indexOf('-->')

          if (commentEnd >= 0) {
            if (options.shouldKeepComment && options.comment) {
              options.comment(
                html.substring(4, commentEnd),
                index,
                index + commentEnd + 3
              )
            }
            advance(commentEnd + 3)
            continue
          }
        }

        // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
        if (conditionalComment.test(html)) {
          const conditionalEnd = html.indexOf(']>')

          if (conditionalEnd >= 0) {
            advance(conditionalEnd + 2)
            continue
          }
        }

        // Doctype:
        const doctypeMatch = html.match(doctype)
        if (doctypeMatch) {
          advance(doctypeMatch[0].length)
          continue
        }

        // End tag:
        const endTagMatch = html.match(endTag)
        if (endTagMatch) {
          const curIndex = index
          advance(endTagMatch[0].length)
          parseEndTag(endTagMatch[1], curIndex, index)
          continue
        }

        // Start tag:
        const startTagMatch = parseStartTag()
        if (startTagMatch) {
          handleStartTag(startTagMatch)
          if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
            advance(1)
          }
          continue
        }
      }

      let text, rest, next
      if (textEnd >= 0) {
        rest = html.slice(textEnd)
        while (
          !endTag.test(rest) &&
          !startTagOpen.test(rest) &&
          !comment.test(rest) &&
          !conditionalComment.test(rest)
        ) {
          // < in plain text, be forgiving and treat it as text
          next = rest.indexOf('<', 1)
          if (next < 0) break
          textEnd += next
          rest = html.slice(textEnd)
        }
        text = html.substring(0, textEnd)
      }

      if (textEnd < 0) {
        text = html
      }

      if (text) {
        advance(text.length)
      }

      if (options.chars && text) {
        options.chars(text, index - text.length, index)
      }
    } else {
      let endTagLength = 0
      const stackedTag = lastTag.toLowerCase()
      const reStackedTag =
        reCache[stackedTag] ||
        (reCache[stackedTag] = new RegExp(
          '([\\s\\S]*?)(</' + stackedTag + '[^>]*>)',
          'i'
        ))
      const rest = html.replace(reStackedTag, function (all, text, endTag) {
        endTagLength = endTag.length
        if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {
          text = text
            .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
            .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1')
        }
        if (shouldIgnoreFirstNewline(stackedTag, text)) {
          text = text.slice(1)
        }
        if (options.chars) {
          options.chars(text)
        }
        return ''
      })
      index += html.length - rest.length
      html = rest
      parseEndTag(stackedTag, index - endTagLength, index)
    }

    if (html === last) {
      options.chars && options.chars(html)
      if (__DEV__ && !stack.length && options.warn) {
        options.warn(`Mal-formatted tag at end of template: "${html}"`, {
          start: index + html.length
        })
      }
      break
    }
  }

  // Clean up any remaining tags
  parseEndTag()

  function advance(n) {
    index += n
    html = html.substring(n)
  }

  function parseStartTag() {
    const start = html.match(startTagOpen)
    if (start) {
      const match: any = {
        tagName: start[1],
        attrs: [],
        start: index
      }
      advance(start[0].length)
      let end, attr
      while (
        !(end = html.match(startTagClose)) &&
        (attr = html.match(dynamicArgAttribute) || html.match(attribute))
      ) {
        attr.start = index
        advance(attr[0].length)
        attr.end = index
        match.attrs.push(attr)
      }
      if (end) {
        match.unarySlash = end[1]
        advance(end[0].length)
        match.end = index
        return match
      }
    }
  }

  function handleStartTag(match) {
    const tagName = match.tagName
    const unarySlash = match.unarySlash

    if (expectHTML) {
      if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
        parseEndTag(lastTag)
      }
      if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
        parseEndTag(tagName)
      }
    }

    const unary = isUnaryTag(tagName) || !!unarySlash

    const l = match.attrs.length
    const attrs: ASTAttr[] = new Array(l)
    for (let i = 0; i < l; i++) {
      const args = match.attrs[i]
      const value = args[3] || args[4] || args[5] || ''
      const shouldDecodeNewlines =
        tagName === 'a' && args[1] === 'href'
          ? options.shouldDecodeNewlinesForHref
          : options.shouldDecodeNewlines
      attrs[i] = {
        name: args[1],
        value: decodeAttr(value, shouldDecodeNewlines)
      }
      if (__DEV__ && options.outputSourceRange) {
        attrs[i].start = args.start + args[0].match(/^\s*/).length
        attrs[i].end = args.end
      }
    }

    if (!unary) {
      stack.push({
        tag: tagName,
        lowerCasedTag: tagName.toLowerCase(),
        attrs: attrs,
        start: match.start,
        end: match.end
      })
      lastTag = tagName
    }

    if (options.start) {
      options.start(tagName, attrs, unary, match.start, match.end)
    }
  }

  function parseEndTag(tagName?: any, start?: any, end?: any) {
    let pos, lowerCasedTagName
    if (start == null) start = index
    if (end == null) end = index

    // Find the closest opened tag of the same type
    if (tagName) {
      lowerCasedTagName = tagName.toLowerCase()
      for (pos = stack.length - 1; pos >= 0; pos--) {
        if (stack[pos].lowerCasedTag === lowerCasedTagName) {
          break
        }
      }
    } else {
      // If no tag name is provided, clean shop
      pos = 0
    }

    if (pos >= 0) {
      // Close all the open elements, up the stack
      for (let i = stack.length - 1; i >= pos; i--) {
        if (__DEV__ && (i > pos || !tagName) && options.warn) {
          options.warn(`tag <${stack[i].tag}> has no matching end tag.`, {
            start: stack[i].start,
            end: stack[i].end
          })
        }
        if (options.end) {
          options.end(stack[i].tag, start, end)
        }
      }

      // Remove the open elements from the stack
      stack.length = pos
      lastTag = pos && stack[pos - 1].tag
    } else if (lowerCasedTagName === 'br') {
      if (options.start) {
        options.start(tagName, [], true, start, end)
      }
    } else if (lowerCasedTagName === 'p') {
      if (options.start) {
        options.start(tagName, [], false, start, end)
      }
      if (options.end) {
        options.end(tagName, start, end)
      }
    }
  }
}
import he from 'he'
import { parseHTML } from './html-parser'
import { parseText } from './text-parser'
import { parseFilters } from './filter-parser'
import { genAssignmentCode } from '../directives/model'
import { extend, cached, no, camelize, hyphenate } from 'shared/util'
import { isIE, isEdge, isServerRendering } from 'core/util/env'

import {
  addProp,
  addAttr,
  baseWarn,
  addHandler,
  addDirective,
  getBindingAttr,
  getAndRemoveAttr,
  getRawBindingAttr,
  pluckModuleFunction,
  getAndRemoveAttrByRegex
} from '../helpers'

import {
  ASTAttr,
  ASTElement,
  ASTIfCondition,
  ASTNode,
  ASTText,
  CompilerOptions
} from 'types/compiler'

export const onRE = /^@|^v-on:/
export const dirRE = process.env.VBIND_PROP_SHORTHAND
  ? /^v-|^@|^:|^\.|^#/
  : /^v-|^@|^:|^#/
export const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/
export const forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/
const stripParensRE = /^\(|\)$/g
const dynamicArgRE = /^\[.*\]$/

const argRE = /:(.*)$/
export const bindRE = /^:|^\.|^v-bind:/
const propBindRE = /^\./
const modifierRE = /\.[^.\]]+(?=[^\]]*$)/g

export const slotRE = /^v-slot(:|$)|^#/

const lineBreakRE = /[\r\n]/
const whitespaceRE = /[ \f\t\r\n]+/g

const invalidAttributeRE = /[\s"'<>\/=]/

const decodeHTMLCached = cached(he.decode)

export const emptySlotScopeToken = `_empty_`

// configurable state
export let warn: any
let delimiters
let transforms
let preTransforms
let postTransforms
let platformIsPreTag
let platformMustUseProp
let platformGetTagNamespace
let maybeComponent

export function createASTElement(
  tag: string,
  attrs: Array<ASTAttr>,
  parent: ASTElement | void
): ASTElement {
  return {
    type: 1,
    tag,
    attrsList: attrs,
    attrsMap: makeAttrsMap(attrs),
    rawAttrsMap: {},
    parent,
    children: []
  }
}

/**
 * Convert HTML string to AST.
 */
export function parse(template: string, options: CompilerOptions): ASTElement {
  warn = options.warn || baseWarn

  platformIsPreTag = options.isPreTag || no
  platformMustUseProp = options.mustUseProp || no
  platformGetTagNamespace = options.getTagNamespace || no
  const isReservedTag = options.isReservedTag || no
  maybeComponent = (el: ASTElement) =>
    !!(
      el.component ||
      el.attrsMap[':is'] ||
      el.attrsMap['v-bind:is'] ||
      !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag))
    )
  transforms = pluckModuleFunction(options.modules, 'transformNode')
  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode')
  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode')

  delimiters = options.delimiters

  const stack: any[] = []
  const preserveWhitespace = options.preserveWhitespace !== false
  const whitespaceOption = options.whitespace
  let root
  let currentParent
  let inVPre = false
  let inPre = false
  let warned = false

  function warnOnce(msg, range) {
    if (!warned) {
      warned = true
      warn(msg, range)
    }
  }

  function closeElement(element) {
    trimEndingWhitespace(element)
    if (!inVPre && !element.processed) {
      element = processElement(element, options)
    }
    // tree management
    if (!stack.length && element !== root) {
      // allow root elements with v-if, v-else-if and v-else
      if (root.if && (element.elseif || element.else)) {
        if (__DEV__) {
          checkRootConstraints(element)
        }
        addIfCondition(root, {
          exp: element.elseif,
          block: element
        })
      } else if (__DEV__) {
        warnOnce(
          `Component template should contain exactly one root element. ` +
            `If you are using v-if on multiple elements, ` +
            `use v-else-if to chain them instead.`,
          { start: element.start }
        )
      }
    }
    if (currentParent && !element.forbidden) {
      if (element.elseif || element.else) {
        processIfConditions(element, currentParent)
      } else {
        if (element.slotScope) {
          // scoped slot
          // keep it in the children list so that v-else(-if) conditions can
          // find it as the prev node.
          const name = element.slotTarget || '"default"'
          ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[
            name
          ] = element
        }
        currentParent.children.push(element)
        element.parent = currentParent
      }
    }

    // final children cleanup
    // filter out scoped slots
    element.children = element.children.filter(c => !c.slotScope)
    // remove trailing whitespace node again
    trimEndingWhitespace(element)

    // check pre state
    if (element.pre) {
      inVPre = false
    }
    if (platformIsPreTag(element.tag)) {
      inPre = false
    }
    // apply post-transforms
    for (let i = 0; i < postTransforms.length; i++) {
      postTransforms[i](element, options)
    }
  }

  function trimEndingWhitespace(el) {
    // remove trailing whitespace node
    if (!inPre) {
      let lastNode
      while (
        (lastNode = el.children[el.children.length - 1]) &&
        lastNode.type === 3 &&
        lastNode.text === ' '
      ) {
        el.children.pop()
      }
    }
  }

  function checkRootConstraints(el) {
    if (el.tag === 'slot' || el.tag === 'template') {
      warnOnce(
        `Cannot use <${el.tag}> as component root element because it may ` +
          'contain multiple nodes.',
        { start: el.start }
      )
    }
    if (el.attrsMap.hasOwnProperty('v-for')) {
      warnOnce(
        'Cannot use v-for on stateful component root element because ' +
          'it renders multiple elements.',
        el.rawAttrsMap['v-for']
      )
    }
  }

  parseHTML(template, {
    warn,
    expectHTML: options.expectHTML,
    isUnaryTag: options.isUnaryTag,
    canBeLeftOpenTag: options.canBeLeftOpenTag,
    shouldDecodeNewlines: options.shouldDecodeNewlines,
    shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
    shouldKeepComment: options.comments,
    outputSourceRange: options.outputSourceRange,
    start(tag, attrs, unary, start, end) {
      // check namespace.
      // inherit parent ns if there is one
      const ns =
        (currentParent && currentParent.ns) || platformGetTagNamespace(tag)

      // handle IE svg bug
      /* istanbul ignore if */
      if (isIE && ns === 'svg') {
        attrs = guardIESVGBug(attrs)
      }

      let element: ASTElement = createASTElement(tag, attrs, currentParent)
      if (ns) {
        element.ns = ns
      }

      if (__DEV__) {
        if (options.outputSourceRange) {
          element.start = start
          element.end = end
          element.rawAttrsMap = element.attrsList.reduce((cumulated, attr) => {
            cumulated[attr.name] = attr
            return cumulated
          }, {})
        }
        attrs.forEach(attr => {
          if (invalidAttributeRE.test(attr.name)) {
            warn(
              `Invalid dynamic argument expression: attribute names cannot contain ` +
                `spaces, quotes, <, >, / or =.`,
              options.outputSourceRange
                ? {
                    start: attr.start! + attr.name.indexOf(`[`),
                    end: attr.start! + attr.name.length
                  }
                : undefined
            )
          }
        })
      }

      if (isForbiddenTag(element) && !isServerRendering()) {
        element.forbidden = true
        __DEV__ &&
          warn(
            'Templates should only be responsible for mapping the state to the ' +
              'UI. Avoid placing tags with side-effects in your templates, such as ' +
              `<${tag}>` +
              ', as they will not be parsed.',
            { start: element.start }
          )
      }

      // apply pre-transforms
      for (let i = 0; i < preTransforms.length; i++) {
        element = preTransforms[i](element, options) || element
      }

      if (!inVPre) {
        processPre(element)
        if (element.pre) {
          inVPre = true
        }
      }
      if (platformIsPreTag(element.tag)) {
        inPre = true
      }
      if (inVPre) {
        processRawAttrs(element)
      } else if (!element.processed) {
        // structural directives
        processFor(element)
        processIf(element)
        processOnce(element)
      }

      if (!root) {
        root = element
        if (__DEV__) {
          checkRootConstraints(root)
        }
      }

      if (!unary) {
        currentParent = element
        stack.push(element)
      } else {
        closeElement(element)
      }
    },

    end(tag, start, end) {
      const element = stack[stack.length - 1]
      // pop stack
      stack.length -= 1
      currentParent = stack[stack.length - 1]
      if (__DEV__ && options.outputSourceRange) {
        element.end = end
      }
      closeElement(element)
    },

    chars(text: string, start?: number, end?: number) {
      if (!currentParent) {
        if (__DEV__) {
          if (text === template) {
            warnOnce(
              'Component template requires a root element, rather than just text.',
              { start }
            )
          } else if ((text = text.trim())) {
            warnOnce(`text "${text}" outside root element will be ignored.`, {
              start
            })
          }
        }
        return
      }
      // IE textarea placeholder bug
      /* istanbul ignore if */
      if (
        isIE &&
        currentParent.tag === 'textarea' &&
        currentParent.attrsMap.placeholder === text
      ) {
        return
      }
      const children = currentParent.children
      if (inPre || text.trim()) {
        text = isTextTag(currentParent)
          ? text
          : (decodeHTMLCached(text) as string)
      } else if (!children.length) {
        // remove the whitespace-only node right after an opening tag
        text = ''
      } else if (whitespaceOption) {
        if (whitespaceOption === 'condense') {
          // in condense mode, remove the whitespace node if it contains
          // line break, otherwise condense to a single space
          text = lineBreakRE.test(text) ? '' : ' '
        } else {
          text = ' '
        }
      } else {
        text = preserveWhitespace ? ' ' : ''
      }
      if (text) {
        if (!inPre && whitespaceOption === 'condense') {
          // condense consecutive whitespaces into single space
          text = text.replace(whitespaceRE, ' ')
        }
        let res
        let child: ASTNode | undefined
        if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
          child = {
            type: 2,
            expression: res.expression,
            tokens: res.tokens,
            text
          }
        } else if (
          text !== ' ' ||
          !children.length ||
          children[children.length - 1].text !== ' '
        ) {
          child = {
            type: 3,
            text
          }
        }
        if (child) {
          if (__DEV__ && options.outputSourceRange) {
            child.start = start
            child.end = end
          }
          children.push(child)
        }
      }
    },
    comment(text: string, start, end) {
      // adding anything as a sibling to the root node is forbidden
      // comments should still be allowed, but ignored
      if (currentParent) {
        const child: ASTText = {
          type: 3,
          text,
          isComment: true
        }
        if (__DEV__ && options.outputSourceRange) {
          child.start = start
          child.end = end
        }
        currentParent.children.push(child)
      }
    }
  })
  return root
}

function processPre(el) {
  if (getAndRemoveAttr(el, 'v-pre') != null) {
    el.pre = true
  }
}

function processRawAttrs(el) {
  const list = el.attrsList
  const len = list.length
  if (len) {
    const attrs: Array<ASTAttr> = (el.attrs = new Array(len))
    for (let i = 0; i < len; i++) {
      attrs[i] = {
        name: list[i].name,
        value: JSON.stringify(list[i].value)
      }
      if (list[i].start != null) {
        attrs[i].start = list[i].start
        attrs[i].end = list[i].end
      }
    }
  } else if (!el.pre) {
    // non root node in pre blocks with no attributes
    el.plain = true
  }
}

export function processElement(element: ASTElement, options: CompilerOptions) {
  processKey(element)

  // determine whether this is a plain element after
  // removing structural attributes
  element.plain =
    !element.key && !element.scopedSlots && !element.attrsList.length

  processRef(element)
  processSlotContent(element)
  processSlotOutlet(element)
  processComponent(element)
  for (let i = 0; i < transforms.length; i++) {
    element = transforms[i](element, options) || element
  }
  processAttrs(element)
  return element
}

function processKey(el) {
  const exp = getBindingAttr(el, 'key')
  if (exp) {
    if (__DEV__) {
      if (el.tag === 'template') {
        warn(
          `<template> cannot be keyed. Place the key on real elements instead.`,
          getRawBindingAttr(el, 'key')
        )
      }
      if (el.for) {
        const iterator = el.iterator2 || el.iterator1
        const parent = el.parent
        if (
          iterator &&
          iterator === exp &&
          parent &&
          parent.tag === 'transition-group'
        ) {
          warn(
            `Do not use v-for index as key on <transition-group> children, ` +
              `this is the same as not using keys.`,
            getRawBindingAttr(el, 'key'),
            true /* tip */
          )
        }
      }
    }
    el.key = exp
  }
}

function processRef(el) {
  const ref = getBindingAttr(el, 'ref')
  if (ref) {
    el.ref = ref
    el.refInFor = checkInFor(el)
  }
}

export function processFor(el: ASTElement) {
  let exp
  if ((exp = getAndRemoveAttr(el, 'v-for'))) {
    const res = parseFor(exp)
    if (res) {
      extend(el, res)
    } else if (__DEV__) {
      warn(`Invalid v-for expression: ${exp}`, el.rawAttrsMap['v-for'])
    }
  }
}

type ForParseResult = {
  for: string
  alias: string
  iterator1?: string
  iterator2?: string
}

export function parseFor(exp: string): ForParseResult | undefined {
  const inMatch = exp.match(forAliasRE)
  if (!inMatch) return
  const res: any = {}
  res.for = inMatch[2].trim()
  const alias = inMatch[1].trim().replace(stripParensRE, '')
  const iteratorMatch = alias.match(forIteratorRE)
  if (iteratorMatch) {
    res.alias = alias.replace(forIteratorRE, '').trim()
    res.iterator1 = iteratorMatch[1].trim()
    if (iteratorMatch[2]) {
      res.iterator2 = iteratorMatch[2].trim()
    }
  } else {
    res.alias = alias
  }
  return res
}

function processIf(el) {
  const exp = getAndRemoveAttr(el, 'v-if')
  if (exp) {
    el.if = exp
    addIfCondition(el, {
      exp: exp,
      block: el
    })
  } else {
    if (getAndRemoveAttr(el, 'v-else') != null) {
      el.else = true
    }
    const elseif = getAndRemoveAttr(el, 'v-else-if')
    if (elseif) {
      el.elseif = elseif
    }
  }
}

function processIfConditions(el, parent) {
  const prev = findPrevElement(parent.children)
  if (prev && prev.if) {
    addIfCondition(prev, {
      exp: el.elseif,
      block: el
    })
  } else if (__DEV__) {
    warn(
      `v-${el.elseif ? 'else-if="' + el.elseif + '"' : 'else'} ` +
        `used on element <${el.tag}> without corresponding v-if.`,
      el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']
    )
  }
}

function findPrevElement(children: Array<any>): ASTElement | void {
  let i = children.length
  while (i--) {
    if (children[i].type === 1) {
      return children[i]
    } else {
      if (__DEV__ && children[i].text !== ' ') {
        warn(
          `text "${children[i].text.trim()}" between v-if and v-else(-if) ` +
            `will be ignored.`,
          children[i]
        )
      }
      children.pop()
    }
  }
}

export function addIfCondition(el: ASTElement, condition: ASTIfCondition) {
  if (!el.ifConditions) {
    el.ifConditions = []
  }
  el.ifConditions.push(condition)
}

function processOnce(el) {
  const once = getAndRemoveAttr(el, 'v-once')
  if (once != null) {
    el.once = true
  }
}

// handle content being passed to a component as slot,
// e.g. <template slot="xxx">, <div slot-scope="xxx">
function processSlotContent(el) {
  let slotScope
  if (el.tag === 'template') {
    slotScope = getAndRemoveAttr(el, 'scope')
    /* istanbul ignore if */
    if (__DEV__ && slotScope) {
      warn(
        `the "scope" attribute for scoped slots have been deprecated and ` +
          `replaced by "slot-scope" since 2.5. The new "slot-scope" attribute ` +
          `can also be used on plain elements in addition to <template> to ` +
          `denote scoped slots.`,
        el.rawAttrsMap['scope'],
        true
      )
    }
    el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope')
  } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
    /* istanbul ignore if */
    if (__DEV__ && el.attrsMap['v-for']) {
      warn(
        `Ambiguous combined usage of slot-scope and v-for on <${el.tag}> ` +
          `(v-for takes higher priority). Use a wrapper <template> for the ` +
          `scoped slot to make it clearer.`,
        el.rawAttrsMap['slot-scope'],
        true
      )
    }
    el.slotScope = slotScope
  }

  // slot="xxx"
  const slotTarget = getBindingAttr(el, 'slot')
  if (slotTarget) {
    el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget
    el.slotTargetDynamic = !!(
      el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']
    )
    // preserve slot as an attribute for native shadow DOM compat
    // only for non-scoped slots.
    if (el.tag !== 'template' && !el.slotScope) {
      addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'))
    }
  }

  // 2.6 v-slot syntax
  if (process.env.NEW_SLOT_SYNTAX) {
    if (el.tag === 'template') {
      // v-slot on <template>
      const slotBinding = getAndRemoveAttrByRegex(el, slotRE)
      if (slotBinding) {
        if (__DEV__) {
          if (el.slotTarget || el.slotScope) {
            warn(`Unexpected mixed usage of different slot syntaxes.`, el)
          }
          if (el.parent && !maybeComponent(el.parent)) {
            warn(
              `<template v-slot> can only appear at the root level inside ` +
                `the receiving component`,
              el
            )
          }
        }
        const { name, dynamic } = getSlotName(slotBinding)
        el.slotTarget = name
        el.slotTargetDynamic = dynamic
        el.slotScope = slotBinding.value || emptySlotScopeToken // force it into a scoped slot for perf
      }
    } else {
      // v-slot on component, denotes default slot
      const slotBinding = getAndRemoveAttrByRegex(el, slotRE)
      if (slotBinding) {
        if (__DEV__) {
          if (!maybeComponent(el)) {
            warn(
              `v-slot can only be used on components or <template>.`,
              slotBinding
            )
          }
          if (el.slotScope || el.slotTarget) {
            warn(`Unexpected mixed usage of different slot syntaxes.`, el)
          }
          if (el.scopedSlots) {
            warn(
              `To avoid scope ambiguity, the default slot should also use ` +
                `<template> syntax when there are other named slots.`,
              slotBinding
            )
          }
        }
        // add the component's children to its default slot
        const slots = el.scopedSlots || (el.scopedSlots = {})
        const { name, dynamic } = getSlotName(slotBinding)
        const slotContainer = (slots[name] = createASTElement(
          'template',
          [],
          el
        ))
        slotContainer.slotTarget = name
        slotContainer.slotTargetDynamic = dynamic
        slotContainer.children = el.children.filter((c: any) => {
          if (!c.slotScope) {
            c.parent = slotContainer
            return true
          }
        })
        slotContainer.slotScope = slotBinding.value || emptySlotScopeToken
        // remove children as they are returned from scopedSlots now
        el.children = []
        // mark el non-plain so data gets generated
        el.plain = false
      }
    }
  }
}

function getSlotName(binding) {
  let name = binding.name.replace(slotRE, '')
  if (!name) {
    if (binding.name[0] !== '#') {
      name = 'default'
    } else if (__DEV__) {
      warn(`v-slot shorthand syntax requires a slot name.`, binding)
    }
  }
  return dynamicArgRE.test(name)
    ? // dynamic [name]
      { name: name.slice(1, -1), dynamic: true }
    : // static name
      { name: `"${name}"`, dynamic: false }
}

// handle <slot/> outlets
function processSlotOutlet(el) {
  if (el.tag === 'slot') {
    el.slotName = getBindingAttr(el, 'name')
    if (__DEV__ && el.key) {
      warn(
        `\`key\` does not work on <slot> because slots are abstract outlets ` +
          `and can possibly expand into multiple elements. ` +
          `Use the key on a wrapping element instead.`,
        getRawBindingAttr(el, 'key')
      )
    }
  }
}

function processComponent(el) {
  let binding
  if ((binding = getBindingAttr(el, 'is'))) {
    el.component = binding
  }
  if (getAndRemoveAttr(el, 'inline-template') != null) {
    el.inlineTemplate = true
  }
}

function processAttrs(el) {
  const list = el.attrsList
  let i, l, name, rawName, value, modifiers, syncGen, isDynamic
  for (i = 0, l = list.length; i < l; i++) {
    name = rawName = list[i].name
    value = list[i].value
    if (dirRE.test(name)) {
      // mark element as dynamic
      el.hasBindings = true
      // modifiers
      modifiers = parseModifiers(name.replace(dirRE, ''))
      // support .foo shorthand syntax for the .prop modifier
      if (process.env.VBIND_PROP_SHORTHAND && propBindRE.test(name)) {
        ;(modifiers || (modifiers = {})).prop = true
        name = `.` + name.slice(1).replace(modifierRE, '')
      } else if (modifiers) {
        name = name.replace(modifierRE, '')
      }
      if (bindRE.test(name)) {
        // v-bind
        name = name.replace(bindRE, '')
        value = parseFilters(value)
        isDynamic = dynamicArgRE.test(name)
        if (isDynamic) {
          name = name.slice(1, -1)
        }
        if (__DEV__ && value.trim().length === 0) {
          warn(
            `The value for a v-bind expression cannot be empty. Found in "v-bind:${name}"`
          )
        }
        if (modifiers) {
          if (modifiers.prop && !isDynamic) {
            name = camelize(name)
            if (name === 'innerHtml') name = 'innerHTML'
          }
          if (modifiers.camel && !isDynamic) {
            name = camelize(name)
          }
          if (modifiers.sync) {
            syncGen = genAssignmentCode(value, `$event`)
            if (!isDynamic) {
              addHandler(
                el,
                `update:${camelize(name)}`,
                syncGen,
                null,
                false,
                warn,
                list[i]
              )
              if (hyphenate(name) !== camelize(name)) {
                addHandler(
                  el,
                  `update:${hyphenate(name)}`,
                  syncGen,
                  null,
                  false,
                  warn,
                  list[i]
                )
              }
            } else {
              // handler w/ dynamic event name
              addHandler(
                el,
                `"update:"+(${name})`,
                syncGen,
                null,
                false,
                warn,
                list[i],
                true // dynamic
              )
            }
          }
        }
        if (
          (modifiers && modifiers.prop) ||
          (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))
        ) {
          addProp(el, name, value, list[i], isDynamic)
        } else {
          addAttr(el, name, value, list[i], isDynamic)
        }
      } else if (onRE.test(name)) {
        // v-on
        name = name.replace(onRE, '')
        isDynamic = dynamicArgRE.test(name)
        if (isDynamic) {
          name = name.slice(1, -1)
        }
        addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic)
      } else {
        // normal directives
        name = name.replace(dirRE, '')
        // parse arg
        const argMatch = name.match(argRE)
        let arg = argMatch && argMatch[1]
        isDynamic = false
        if (arg) {
          name = name.slice(0, -(arg.length + 1))
          if (dynamicArgRE.test(arg)) {
            arg = arg.slice(1, -1)
            isDynamic = true
          }
        }
        addDirective(
          el,
          name,
          rawName,
          value,
          arg,
          isDynamic,
          modifiers,
          list[i]
        )
        if (__DEV__ && name === 'model') {
          checkForAliasModel(el, value)
        }
      }
    } else {
      // literal attribute
      if (__DEV__) {
        const res = parseText(value, delimiters)
        if (res) {
          warn(
            `${name}="${value}": ` +
              'Interpolation inside attributes has been removed. ' +
              'Use v-bind or the colon shorthand instead. For example, ' +
              'instead of <div id="{{ val }}">, use <div :id="val">.',
            list[i]
          )
        }
      }
      addAttr(el, name, JSON.stringify(value), list[i])
      // #6887 firefox doesn't update muted state if set via attribute
      // even immediately after element creation
      if (
        !el.component &&
        name === 'muted' &&
        platformMustUseProp(el.tag, el.attrsMap.type, name)
      ) {
        addProp(el, name, 'true', list[i])
      }
    }
  }
}

function checkInFor(el: ASTElement): boolean {
  let parent: ASTElement | void = el
  while (parent) {
    if (parent.for !== undefined) {
      return true
    }
    parent = parent.parent
  }
  return false
}

function parseModifiers(name: string): Object | void {
  const match = name.match(modifierRE)
  if (match) {
    const ret = {}
    match.forEach(m => {
      ret[m.slice(1)] = true
    })
    return ret
  }
}

function makeAttrsMap(attrs: Array<Record<string, any>>): Record<string, any> {
  const map = {}
  for (let i = 0, l = attrs.length; i < l; i++) {
    if (__DEV__ && map[attrs[i].name] && !isIE && !isEdge) {
      warn('duplicate attribute: ' + attrs[i].name, attrs[i])
    }
    map[attrs[i].name] = attrs[i].value
  }
  return map
}

// for script (e.g. type="x/template") or style, do not decode content
function isTextTag(el): boolean {
  return el.tag === 'script' || el.tag === 'style'
}

function isForbiddenTag(el): boolean {
  return (
    el.tag === 'style' ||
    (el.tag === 'script' &&
      (!el.attrsMap.type || el.attrsMap.type === 'text/javascript'))
  )
}

const ieNSBug = /^xmlns:NS\d+/
const ieNSPrefix = /^NS\d+:/

/* istanbul ignore next */
function guardIESVGBug(attrs) {
  const res: any[] = []
  for (let i = 0; i < attrs.length; i++) {
    const attr = attrs[i]
    if (!ieNSBug.test(attr.name)) {
      attr.name = attr.name.replace(ieNSPrefix, '')
      res.push(attr)
    }
  }
  return res
}

function checkForAliasModel(el, value) {
  let _el = el
  while (_el) {
    if (_el.for && _el.alias === value) {
      warn(
        `<${el.tag} v-model="${value}">: ` +
          `You are binding v-model directly to a v-for iteration alias. ` +
          `This will not be able to modify the v-for source array because ` +
          `writing to the alias is like modifying a function local variable. ` +
          `Consider using an array of objects and use v-model on an object property instead.`,
        el.rawAttrsMap['v-model']
      )
    }
    _el = _el.parent
  }
}
import { cached } from 'shared/util'
import { parseFilters } from './filter-parser'

const defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g
const regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g

const buildRegex = cached(delimiters => {
  const open = delimiters[0].replace(regexEscapeRE, '\\$&')
  const close = delimiters[1].replace(regexEscapeRE, '\\$&')
  return new RegExp(open + '((?:.|\\n)+?)' + close, 'g')
})

type TextParseResult = {
  expression: string
  tokens: Array<string | { '@binding': string }>
}

export function parseText(
  text: string,
  delimiters?: [string, string]
): TextParseResult | void {
  //@ts-expect-error
  const tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE
  if (!tagRE.test(text)) {
    return
  }
  const tokens: string[] = []
  const rawTokens: any[] = []
  let lastIndex = (tagRE.lastIndex = 0)
  let match, index, tokenValue
  while ((match = tagRE.exec(text))) {
    index = match.index
    // push text token
    if (index > lastIndex) {
      rawTokens.push((tokenValue = text.slice(lastIndex, index)))
      tokens.push(JSON.stringify(tokenValue))
    }
    // tag token
    const exp = parseFilters(match[1].trim())
    tokens.push(`_s(${exp})`)
    rawTokens.push({ '@binding': exp })
    lastIndex = index + match[0].length
  }
  if (lastIndex < text.length) {
    rawTokens.push((tokenValue = text.slice(lastIndex)))
    tokens.push(JSON.stringify(tokenValue))
  }
  return {
    expression: tokens.join('+'),
    tokens: rawTokens
  }
}
import { noop, extend } from 'shared/util'
import { warn as baseWarn, tip } from 'core/util/debug'
import { generateCodeFrame } from './codeframe'
import type { Component } from 'types/component'
import { CompilerOptions } from 'types/compiler'

type CompiledFunctionResult = {
  render: Function
  staticRenderFns: Array<Function>
}

function createFunction(code, errors) {
  try {
    return new Function(code)
  } catch (err: any) {
    errors.push({ err, code })
    return noop
  }
}

export function createCompileToFunctionFn(compile: Function): Function {
  const cache = Object.create(null)

  return function compileToFunctions(
    template: string,
    options?: CompilerOptions,
    vm?: Component
  ): CompiledFunctionResult {
    options = extend({}, options)
    const warn = options.warn || baseWarn
    delete options.warn

    /* istanbul ignore if */
    if (__DEV__) {
      // detect possible CSP restriction
      try {
        new Function('return 1')
      } catch (e: any) {
        if (e.toString().match(/unsafe-eval|CSP/)) {
          warn(
            'It seems you are using the standalone build of Vue.js in an ' +
              'environment with Content Security Policy that prohibits unsafe-eval. ' +
              'The template compiler cannot work in this environment. Consider ' +
              'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
              'templates into render functions.'
          )
        }
      }
    }

    // check cache
    const key = options.delimiters
      ? String(options.delimiters) + template
      : template
    if (cache[key]) {
      return cache[key]
    }

    // compile
    const compiled = compile(template, options)

    // check compilation errors/tips
    if (__DEV__) {
      if (compiled.errors && compiled.errors.length) {
        if (options.outputSourceRange) {
          compiled.errors.forEach(e => {
            warn(
              `Error compiling template:\n\n${e.msg}\n\n` +
                generateCodeFrame(template, e.start, e.end),
              vm
            )
          })
        } else {
          warn(
            `Error compiling template:\n\n${template}\n\n` +
              compiled.errors.map(e => `- ${e}`).join('\n') +
              '\n',
            vm
          )
        }
      }
      if (compiled.tips && compiled.tips.length) {
        if (options.outputSourceRange) {
          compiled.tips.forEach(e => tip(e.msg, vm))
        } else {
          compiled.tips.forEach(msg => tip(msg, vm))
        }
      }
    }

    // turn code into functions
    const res: any = {}
    const fnGenErrors: any[] = []
    res.render = createFunction(compiled.render, fnGenErrors)
    res.staticRenderFns = compiled.staticRenderFns.map(code => {
      return createFunction(code, fnGenErrors)
    })

    // check function generation errors.
    // this should only happen if there is a bug in the compiler itself.
    // mostly for codegen development use
    /* istanbul ignore if */
    if (__DEV__) {
      if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
        warn(
          `Failed to generate render function:\n\n` +
            fnGenErrors
              .map(
                ({ err, code }) => `${(err as any).toString()} in\n\n${code}\n`
              )
              .join('\n'),
          vm
        )
      }
    }

    return (cache[key] = res)
  }
}
import KeepAlive from './keep-alive'

export default {
  KeepAlive
}
import { isRegExp, isArray, remove } from 'shared/util'
import { getFirstComponentChild } from 'core/vdom/helpers/index'
import type VNode from 'core/vdom/vnode'
import type { VNodeComponentOptions } from 'types/vnode'
import type { Component } from 'types/component'
import { getComponentName } from '../vdom/create-component'

type CacheEntry = {
  name?: string
  tag?: string
  componentInstance?: Component
}

type CacheEntryMap = Record<string, CacheEntry | null>

function _getComponentName(opts?: VNodeComponentOptions): string | null {
  return opts && (getComponentName(opts.Ctor.options as any) || opts.tag)
}

function matches(
  pattern: string | RegExp | Array<string>,
  name: string
): boolean {
  if (isArray(pattern)) {
    return pattern.indexOf(name) > -1
  } else if (typeof pattern === 'string') {
    return pattern.split(',').indexOf(name) > -1
  } else if (isRegExp(pattern)) {
    return pattern.test(name)
  }
  /* istanbul ignore next */
  return false
}

function pruneCache(
  keepAliveInstance: { cache: CacheEntryMap; keys: string[]; _vnode: VNode },
  filter: Function
) {
  const { cache, keys, _vnode } = keepAliveInstance
  for (const key in cache) {
    const entry = cache[key]
    if (entry) {
      const name = entry.name
      if (name && !filter(name)) {
        pruneCacheEntry(cache, key, keys, _vnode)
      }
    }
  }
}

function pruneCacheEntry(
  cache: CacheEntryMap,
  key: string,
  keys: Array<string>,
  current?: VNode
) {
  const entry = cache[key]
  if (entry && (!current || entry.tag !== current.tag)) {
    // @ts-expect-error can be undefined
    entry.componentInstance.$destroy()
  }
  cache[key] = null
  remove(keys, key)
}

const patternTypes: Array<Function> = [String, RegExp, Array]

// TODO defineComponent
export default {
  name: 'keep-alive',
  abstract: true,

  props: {
    include: patternTypes,
    exclude: patternTypes,
    max: [String, Number]
  },

  methods: {
    cacheVNode() {
      const { cache, keys, vnodeToCache, keyToCache } = this
      if (vnodeToCache) {
        const { tag, componentInstance, componentOptions } = vnodeToCache
        cache[keyToCache] = {
          name: _getComponentName(componentOptions),
          tag,
          componentInstance
        }
        keys.push(keyToCache)
        // prune oldest entry
        if (this.max && keys.length > parseInt(this.max)) {
          pruneCacheEntry(cache, keys[0], keys, this._vnode)
        }
        this.vnodeToCache = null
      }
    }
  },

  created() {
    this.cache = Object.create(null)
    this.keys = []
  },

  destroyed() {
    for (const key in this.cache) {
      pruneCacheEntry(this.cache, key, this.keys)
    }
  },

  mounted() {
    this.cacheVNode()
    this.$watch('include', val => {
      pruneCache(this, name => matches(val, name))
    })
    this.$watch('exclude', val => {
      pruneCache(this, name => !matches(val, name))
    })
  },

  updated() {
    this.cacheVNode()
  },

  render() {
    const slot = this.$slots.default
    const vnode = getFirstComponentChild(slot)
    const componentOptions = vnode && vnode.componentOptions
    if (componentOptions) {
      // check pattern
      const name = _getComponentName(componentOptions)
      const { include, exclude } = this
      if (
        // not included
        (include && (!name || !matches(include, name))) ||
        // excluded
        (exclude && name && matches(exclude, name))
      ) {
        return vnode
      }

      const { cache, keys } = this
      const key =
        vnode.key == null
          ? // same constructor may get registered as different local components
            // so cid alone is not enough (#3269)
            componentOptions.Ctor.cid +
            (componentOptions.tag ? `::${componentOptions.tag}` : '')
          : vnode.key
      if (cache[key]) {
        vnode.componentInstance = cache[key].componentInstance
        // make current key freshest
        remove(keys, key)
        keys.push(key)
      } else {
        // delay setting the cache until update
        this.vnodeToCache = vnode
        this.keyToCache = key
      }

      // @ts-expect-error can vnode.data can be undefined
      vnode.data.keepAlive = true
    }
    return vnode || (slot && slot[0])
  }
}
import { no, noop, identity } from 'shared/util'

import { LIFECYCLE_HOOKS } from 'shared/constants'
import type { Component } from 'types/component'

/**
 * @internal
 */
export interface Config {
  // user
  optionMergeStrategies: { [key: string]: Function }
  silent: boolean
  productionTip: boolean
  performance: boolean
  devtools: boolean
  errorHandler?: (err: Error, vm: Component | null, info: string) => void
  warnHandler?: (msg: string, vm: Component | null, trace: string) => void
  ignoredElements: Array<string | RegExp>
  keyCodes: { [key: string]: number | Array<number> }

  // platform
  isReservedTag: (x: string) => boolean | undefined
  isReservedAttr: (x: string) => true | undefined
  parsePlatformTagName: (x: string) => string
  isUnknownElement: (x: string) => boolean
  getTagNamespace: (x: string) => string | undefined
  mustUseProp: (tag: string, type?: string | null, name?: string) => boolean

  // private
  async: boolean

  // legacy
  _lifecycleHooks: Array<string>
}

export default {
  /**
   * Option merge strategies (used in core/util/options)
   */
  // $flow-disable-line
  optionMergeStrategies: Object.create(null),

  /**
   * Whether to suppress warnings.
   */
  silent: false,

  /**
   * Show production mode tip message on boot?
   */
  productionTip: __DEV__,

  /**
   * Whether to enable devtools
   */
  devtools: __DEV__,

  /**
   * Whether to record perf
   */
  performance: false,

  /**
   * Error handler for watcher errors
   */
  errorHandler: null,

  /**
   * Warn handler for watcher warns
   */
  warnHandler: null,

  /**
   * Ignore certain custom elements
   */
  ignoredElements: [],

  /**
   * Custom user key aliases for v-on
   */
  // $flow-disable-line
  keyCodes: Object.create(null),

  /**
   * Check if a tag is reserved so that it cannot be registered as a
   * component. This is platform-dependent and may be overwritten.
   */
  isReservedTag: no,

  /**
   * Check if an attribute is reserved so that it cannot be used as a component
   * prop. This is platform-dependent and may be overwritten.
   */
  isReservedAttr: no,

  /**
   * Check if a tag is an unknown element.
   * Platform-dependent.
   */
  isUnknownElement: no,

  /**
   * Get the namespace of an element
   */
  getTagNamespace: noop,

  /**
   * Parse the real tag name for the specific platform.
   */
  parsePlatformTagName: identity,

  /**
   * Check if an attribute must be bound using property, e.g. value
   * Platform-dependent.
   */
  mustUseProp: no,

  /**
   * Perform updates asynchronously. Intended to be used by Vue Test Utils
   * This will significantly reduce performance if set to false.
   */
  async: true,

  /**
   * Exposed for legacy reasons
   */
  _lifecycleHooks: LIFECYCLE_HOOKS
} as unknown as Config
import { ASSET_TYPES } from 'shared/constants'
import type { GlobalAPI } from 'types/global-api'
import { isFunction, isPlainObject, validateComponentName } from '../util/index'

export function initAssetRegisters(Vue: GlobalAPI) {
  /**
   * Create asset registration methods.
   */
  ASSET_TYPES.forEach(type => {
    // @ts-expect-error function is not exact same type
    Vue[type] = function (
      id: string,
      definition?: Function | Object
    ): Function | Object | void {
      if (!definition) {
        return this.options[type + 's'][id]
      } else {
        /* istanbul ignore if */
        if (__DEV__ && type === 'component') {
          validateComponentName(id)
        }
        if (type === 'component' && isPlainObject(definition)) {
          // @ts-expect-error
          definition.name = definition.name || id
          definition = this.options._base.extend(definition)
        }
        if (type === 'directive' && isFunction(definition)) {
          definition = { bind: definition, update: definition }
        }
        this.options[type + 's'][id] = definition
        return definition
      }
    }
  })
}
import { ASSET_TYPES } from 'shared/constants'
import type { Component } from 'types/component'
import type { GlobalAPI } from 'types/global-api'
import { defineComputed, proxy } from '../instance/state'
import { extend, mergeOptions, validateComponentName } from '../util/index'
import { getComponentName } from '../vdom/create-component'

export function initExtend(Vue: GlobalAPI) {
  /**
   * Each instance constructor, including Vue, has a unique
   * cid. This enables us to create wrapped "child
   * constructors" for prototypal inheritance and cache them.
   */
  Vue.cid = 0
  let cid = 1

  /**
   * Class inheritance
   */
  Vue.extend = function (extendOptions: any): typeof Component {
    extendOptions = extendOptions || {}
    const Super = this
    const SuperId = Super.cid
    const cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {})
    if (cachedCtors[SuperId]) {
      return cachedCtors[SuperId]
    }

    const name =
      getComponentName(extendOptions) || getComponentName(Super.options)
    if (__DEV__ && name) {
      validateComponentName(name)
    }

    const Sub = function VueComponent(this: any, options: any) {
      this._init(options)
    } as unknown as typeof Component
    Sub.prototype = Object.create(Super.prototype)
    Sub.prototype.constructor = Sub
    Sub.cid = cid++
    Sub.options = mergeOptions(Super.options, extendOptions)
    Sub['super'] = Super

    // For props and computed properties, we define the proxy getters on
    // the Vue instances at extension time, on the extended prototype. This
    // avoids Object.defineProperty calls for each instance created.
    if (Sub.options.props) {
      initProps(Sub)
    }
    if (Sub.options.computed) {
      initComputed(Sub)
    }

    // allow further extension/mixin/plugin usage
    Sub.extend = Super.extend
    Sub.mixin = Super.mixin
    Sub.use = Super.use

    // create asset registers, so extended classes
    // can have their private assets too.
    ASSET_TYPES.forEach(function (type) {
      Sub[type] = Super[type]
    })
    // enable recursive self-lookup
    if (name) {
      Sub.options.components[name] = Sub
    }

    // keep a reference to the super options at extension time.
    // later at instantiation we can check if Super's options have
    // been updated.
    Sub.superOptions = Super.options
    Sub.extendOptions = extendOptions
    Sub.sealedOptions = extend({}, Sub.options)

    // cache constructor
    cachedCtors[SuperId] = Sub
    return Sub
  }
}

function initProps(Comp: typeof Component) {
  const props = Comp.options.props
  for (const key in props) {
    proxy(Comp.prototype, `_props`, key)
  }
}

function initComputed(Comp: typeof Component) {
  const computed = Comp.options.computed
  for (const key in computed) {
    defineComputed(Comp.prototype, key, computed[key])
  }
}
import config from '../config'
import { initUse } from './use'
import { initMixin } from './mixin'
import { initExtend } from './extend'
import { initAssetRegisters } from './assets'
import { set, del } from '../observer/index'
import { ASSET_TYPES } from 'shared/constants'
import builtInComponents from '../components/index'
import { observe } from 'core/observer/index'

import {
  warn,
  extend,
  nextTick,
  mergeOptions,
  defineReactive
} from '../util/index'
import type { GlobalAPI } from 'types/global-api'

export function initGlobalAPI(Vue: GlobalAPI) {
  // config
  const configDef: Record<string, any> = {}
  configDef.get = () => config
  if (__DEV__) {
    configDef.set = () => {
      warn(
        'Do not replace the Vue.config object, set individual fields instead.'
      )
    }
  }
  Object.defineProperty(Vue, 'config', configDef)

  // exposed util methods.
  // NOTE: these are not considered part of the public API - avoid relying on
  // them unless you are aware of the risk.
  Vue.util = {
    warn,
    extend,
    mergeOptions,
    defineReactive
  }

  Vue.set = set
  Vue.delete = del
  Vue.nextTick = nextTick

  // 2.6 explicit observable API
  Vue.observable = <T>(obj: T): T => {
    observe(obj)
    return obj
  }

  Vue.options = Object.create(null)
  ASSET_TYPES.forEach(type => {
    Vue.options[type + 's'] = Object.create(null)
  })

  // this is used to identify the "base" constructor to extend all plain-object
  // components with in Weex's multi-instance scenarios.
  Vue.options._base = Vue

  extend(Vue.options.components, builtInComponents)

  initUse(Vue)
  initMixin(Vue)
  initExtend(Vue)
  initAssetRegisters(Vue)
}
import type { GlobalAPI } from 'types/global-api'
import { mergeOptions } from '../util/index'

export function initMixin(Vue: GlobalAPI) {
  Vue.mixin = function (mixin: Object) {
    this.options = mergeOptions(this.options, mixin)
    return this
  }
}
import type { GlobalAPI } from 'types/global-api'
import { toArray, isFunction } from '../util/index'

export function initUse(Vue: GlobalAPI) {
  Vue.use = function (plugin: Function | any) {
    const installedPlugins =
      this._installedPlugins || (this._installedPlugins = [])
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }

    // additional parameters
    const args = toArray(arguments, 1)
    args.unshift(this)
    if (isFunction(plugin.install)) {
      plugin.install.apply(plugin, args)
    } else if (isFunction(plugin)) {
      plugin.apply(null, args)
    }
    installedPlugins.push(plugin)
    return this
  }
}
import Vue from './instance/index'
import { initGlobalAPI } from './global-api/index'
import { isServerRendering } from 'core/util/env'
import { FunctionalRenderContext } from 'core/vdom/create-functional-component'
import { version } from 'v3'

initGlobalAPI(Vue)

Object.defineProperty(Vue.prototype, '$isServer', {
  get: isServerRendering
})

Object.defineProperty(Vue.prototype, '$ssrContext', {
  get() {
    /* istanbul ignore next */
    return this.$vnode && this.$vnode.ssrContext
  }
})

// expose FunctionalRenderContext for ssr runtime helper installation
Object.defineProperty(Vue, 'FunctionalRenderContext', {
  value: FunctionalRenderContext
})

Vue.version = version

export default Vue
import type { Component } from 'types/component'
import {
  tip,
  toArray,
  isArray,
  hyphenate,
  formatComponentName,
  invokeWithErrorHandling
} from '../util/index'
import { updateListeners } from '../vdom/helpers/index'

export function initEvents(vm: Component) {
  vm._events = Object.create(null)
  vm._hasHookEvent = false
  // init parent attached events
  const listeners = vm.$options._parentListeners
  if (listeners) {
    updateComponentListeners(vm, listeners)
  }
}

let target: any

function add(event, fn) {
  target.$on(event, fn)
}

function remove(event, fn) {
  target.$off(event, fn)
}

function createOnceHandler(event, fn) {
  const _target = target
  return function onceHandler() {
    const res = fn.apply(null, arguments)
    if (res !== null) {
      _target.$off(event, onceHandler)
    }
  }
}

export function updateComponentListeners(
  vm: Component,
  listeners: Object,
  oldListeners?: Object | null
) {
  target = vm
  updateListeners(
    listeners,
    oldListeners || {},
    add,
    remove,
    createOnceHandler,
    vm
  )
  target = undefined
}

export function eventsMixin(Vue: typeof Component) {
  const hookRE = /^hook:/
  Vue.prototype.$on = function (
    event: string | Array<string>,
    fn: Function
  ): Component {
    const vm: Component = this
    if (isArray(event)) {
      for (let i = 0, l = event.length; i < l; i++) {
        vm.$on(event[i], fn)
      }
    } else {
      ;(vm._events[event] || (vm._events[event] = [])).push(fn)
      // optimize hook:event cost by using a boolean flag marked at registration
      // instead of a hash lookup
      if (hookRE.test(event)) {
        vm._hasHookEvent = true
      }
    }
    return vm
  }

  Vue.prototype.$once = function (event: string, fn: Function): Component {
    const vm: Component = this
    function on() {
      vm.$off(event, on)
      fn.apply(vm, arguments)
    }
    on.fn = fn
    vm.$on(event, on)
    return vm
  }

  Vue.prototype.$off = function (
    event?: string | Array<string>,
    fn?: Function
  ): Component {
    const vm: Component = this
    // all
    if (!arguments.length) {
      vm._events = Object.create(null)
      return vm
    }
    // array of events
    if (isArray(event)) {
      for (let i = 0, l = event.length; i < l; i++) {
        vm.$off(event[i], fn)
      }
      return vm
    }
    // specific event
    const cbs = vm._events[event!]
    if (!cbs) {
      return vm
    }
    if (!fn) {
      vm._events[event!] = null
      return vm
    }
    // specific handler
    let cb
    let i = cbs.length
    while (i--) {
      cb = cbs[i]
      if (cb === fn || cb.fn === fn) {
        cbs.splice(i, 1)
        break
      }
    }
    return vm
  }

  Vue.prototype.$emit = function (event: string): Component {
    const vm: Component = this
    if (__DEV__) {
      const lowerCaseEvent = event.toLowerCase()
      if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
        tip(
          `Event "${lowerCaseEvent}" is emitted in component ` +
            `${formatComponentName(
              vm
            )} but the handler is registered for "${event}". ` +
            `Note that HTML attributes are case-insensitive and you cannot use ` +
            `v-on to listen to camelCase events when using in-DOM templates. ` +
            `You should probably use "${hyphenate(
              event
            )}" instead of "${event}".`
        )
      }
    }
    let cbs = vm._events[event]
    if (cbs) {
      cbs = cbs.length > 1 ? toArray(cbs) : cbs
      const args = toArray(arguments, 1)
      const info = `event handler for "${event}"`
      for (let i = 0, l = cbs.length; i < l; i++) {
        invokeWithErrorHandling(cbs[i], vm, args, vm, info)
      }
    }
    return vm
  }
}
import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'
import type { GlobalAPI } from 'types/global-api'

function Vue(options) {
  if (__DEV__ && !(this instanceof Vue)) {
    warn('Vue is a constructor and should be called with the `new` keyword')
  }
  this._init(options)
}

//@ts-expect-error Vue has function type
initMixin(Vue)
//@ts-expect-error Vue has function type
stateMixin(Vue)
//@ts-expect-error Vue has function type
eventsMixin(Vue)
//@ts-expect-error Vue has function type
lifecycleMixin(Vue)
//@ts-expect-error Vue has function type
renderMixin(Vue)

export default Vue as unknown as GlobalAPI
import config from '../config'
import { initProxy } from './proxy'
import { initState } from './state'
import { initRender } from './render'
import { initEvents } from './events'
import { mark, measure } from '../util/perf'
import { initLifecycle, callHook } from './lifecycle'
import { initProvide, initInjections } from './inject'
import { extend, mergeOptions, formatComponentName } from '../util/index'
import type { Component } from 'types/component'
import type { InternalComponentOptions } from 'types/options'
import { EffectScope } from 'v3/reactivity/effectScope'

let uid = 0

export function initMixin(Vue: typeof Component) {
  Vue.prototype._init = function (options?: Record<string, any>) {
    const vm: Component = this
    // a uid
    vm._uid = uid++

    let startTag, endTag
    /* istanbul ignore if */
    if (__DEV__ && config.performance && mark) {
      startTag = `vue-perf-start:${vm._uid}`
      endTag = `vue-perf-end:${vm._uid}`
      mark(startTag)
    }

    // a flag to mark this as a Vue instance without having to do instanceof
    // check
    vm._isVue = true
    // avoid instances from being observed
    vm.__v_skip = true
    // effect scope
    vm._scope = new EffectScope(true /* detached */)
    vm._scope._vm = true
    // merge options
    if (options && options._isComponent) {
      // optimize internal component instantiation
      // since dynamic options merging is pretty slow, and none of the
      // internal component options needs special treatment.
      initInternalComponent(vm, options as any)
    } else {
      vm.$options = mergeOptions(
        resolveConstructorOptions(vm.constructor as any),
        options || {},
        vm
      )
    }
    /* istanbul ignore else */
    if (__DEV__) {
      initProxy(vm)
    } else {
      vm._renderProxy = vm
    }
    // expose real self
    vm._self = vm
    initLifecycle(vm)
    initEvents(vm)
    initRender(vm)
    callHook(vm, 'beforeCreate', undefined, false /* setContext */)
    initInjections(vm) // resolve injections before data/props
    initState(vm)
    initProvide(vm) // resolve provide after data/props
    callHook(vm, 'created')

    /* istanbul ignore if */
    if (__DEV__ && config.performance && mark) {
      vm._name = formatComponentName(vm, false)
      mark(endTag)
      measure(`vue ${vm._name} init`, startTag, endTag)
    }

    if (vm.$options.el) {
      vm.$mount(vm.$options.el)
    }
  }
}

export function initInternalComponent(
  vm: Component,
  options: InternalComponentOptions
) {
  const opts = (vm.$options = Object.create((vm.constructor as any).options))
  // doing this because it's faster than dynamic enumeration.
  const parentVnode = options._parentVnode
  opts.parent = options.parent
  opts._parentVnode = parentVnode

  const vnodeComponentOptions = parentVnode.componentOptions!
  opts.propsData = vnodeComponentOptions.propsData
  opts._parentListeners = vnodeComponentOptions.listeners
  opts._renderChildren = vnodeComponentOptions.children
  opts._componentTag = vnodeComponentOptions.tag

  if (options.render) {
    opts.render = options.render
    opts.staticRenderFns = options.staticRenderFns
  }
}

export function resolveConstructorOptions(Ctor: typeof Component) {
  let options = Ctor.options
  if (Ctor.super) {
    const superOptions = resolveConstructorOptions(Ctor.super)
    const cachedSuperOptions = Ctor.superOptions
    if (superOptions !== cachedSuperOptions) {
      // super option changed,
      // need to resolve new options.
      Ctor.superOptions = superOptions
      // check if there are any late-modified/attached options (#4976)
      const modifiedOptions = resolveModifiedOptions(Ctor)
      // update base extend options
      if (modifiedOptions) {
        extend(Ctor.extendOptions, modifiedOptions)
      }
      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions)
      if (options.name) {
        options.components[options.name] = Ctor
      }
    }
  }
  return options
}

function resolveModifiedOptions(
  Ctor: typeof Component
): Record<string, any> | null {
  let modified
  const latest = Ctor.options
  const sealed = Ctor.sealedOptions
  for (const key in latest) {
    if (latest[key] !== sealed[key]) {
      if (!modified) modified = {}
      modified[key] = latest[key]
    }
  }
  return modified
}
import { warn, hasSymbol, isFunction, isObject } from '../util/index'
import { defineReactive, toggleObserving } from '../observer/index'
import type { Component } from 'types/component'
import { resolveProvided } from 'v3/apiInject'

export function initProvide(vm: Component) {
  const provideOption = vm.$options.provide
  if (provideOption) {
    const provided = isFunction(provideOption)
      ? provideOption.call(vm)
      : provideOption
    if (!isObject(provided)) {
      return
    }
    const source = resolveProvided(vm)
    // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
    // iterate the keys ourselves.
    const keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided)
    for (let i = 0; i < keys.length; i++) {
      const key = keys[i]
      Object.defineProperty(
        source,
        key,
        Object.getOwnPropertyDescriptor(provided, key)!
      )
    }
  }
}

export function initInjections(vm: Component) {
  const result = resolveInject(vm.$options.inject, vm)
  if (result) {
    toggleObserving(false)
    Object.keys(result).forEach(key => {
      /* istanbul ignore else */
      if (__DEV__) {
        defineReactive(vm, key, result[key], () => {
          warn(
            `Avoid mutating an injected value directly since the changes will be ` +
              `overwritten whenever the provided component re-renders. ` +
              `injection being mutated: "${key}"`,
            vm
          )
        })
      } else {
        defineReactive(vm, key, result[key])
      }
    })
    toggleObserving(true)
  }
}

export function resolveInject(
  inject: any,
  vm: Component
): Record<string, any> | undefined | null {
  if (inject) {
    // inject is :any because flow is not smart enough to figure out cached
    const result = Object.create(null)
    const keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject)

    for (let i = 0; i < keys.length; i++) {
      const key = keys[i]
      // #6574 in case the inject object is observed...
      if (key === '__ob__') continue
      const provideKey = inject[key].from
      if (provideKey in vm._provided) {
        result[key] = vm._provided[provideKey]
      } else if ('default' in inject[key]) {
        const provideDefault = inject[key].default
        result[key] = isFunction(provideDefault)
          ? provideDefault.call(vm)
          : provideDefault
      } else if (__DEV__) {
        warn(`Injection "${key as string}" not found`, vm)
      }
    }
    return result
  }
}
import config from '../config'
import Watcher, { WatcherOptions } from '../observer/watcher'
import { mark, measure } from '../util/perf'
import VNode, { createEmptyVNode } from '../vdom/vnode'
import { updateComponentListeners } from './events'
import { resolveSlots } from './render-helpers/resolve-slots'
import { toggleObserving } from '../observer/index'
import { pushTarget, popTarget } from '../observer/dep'
import type { Component } from 'types/component'
import type { MountedComponentVNode } from 'types/vnode'

import {
  warn,
  noop,
  remove,
  emptyObject,
  validateProp,
  invokeWithErrorHandling
} from '../util/index'
import { currentInstance, setCurrentInstance } from 'v3/currentInstance'
import { syncSetupProxy } from 'v3/apiSetup'

export let activeInstance: any = null
export let isUpdatingChildComponent: boolean = false

export function setActiveInstance(vm: Component) {
  const prevActiveInstance = activeInstance
  activeInstance = vm
  return () => {
    activeInstance = prevActiveInstance
  }
}

export function initLifecycle(vm: Component) {
  const options = vm.$options

  // locate first non-abstract parent
  let parent = options.parent
  if (parent && !options.abstract) {
    while (parent.$options.abstract && parent.$parent) {
      parent = parent.$parent
    }
    parent.$children.push(vm)
  }

  vm.$parent = parent
  vm.$root = parent ? parent.$root : vm

  vm.$children = []
  vm.$refs = {}

  vm._provided = parent ? parent._provided : Object.create(null)
  vm._watcher = null
  vm._inactive = null
  vm._directInactive = false
  vm._isMounted = false
  vm._isDestroyed = false
  vm._isBeingDestroyed = false
}

export function lifecycleMixin(Vue: typeof Component) {
  Vue.prototype._update = function (vnode: VNode, hydrating?: boolean) {
    const vm: Component = this
    const prevEl = vm.$el
    const prevVnode = vm._vnode
    const restoreActiveInstance = setActiveInstance(vm)
    vm._vnode = vnode
    // Vue.prototype.__patch__ is injected in entry points
    // based on the rendering backend used.
    if (!prevVnode) {
      // initial render
      vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */)
    } else {
      // updates
      vm.$el = vm.__patch__(prevVnode, vnode)
    }
    restoreActiveInstance()
    // update __vue__ reference
    if (prevEl) {
      prevEl.__vue__ = null
    }
    if (vm.$el) {
      vm.$el.__vue__ = vm
    }
    // if parent is an HOC, update its $el as well
    let wrapper: Component | undefined = vm
    while (
      wrapper &&
      wrapper.$vnode &&
      wrapper.$parent &&
      wrapper.$vnode === wrapper.$parent._vnode
    ) {
      wrapper.$parent.$el = wrapper.$el
      wrapper = wrapper.$parent
    }
    // updated hook is called by the scheduler to ensure that children are
    // updated in a parent's updated hook.
  }

  Vue.prototype.$forceUpdate = function () {
    const vm: Component = this
    if (vm._watcher) {
      vm._watcher.update()
    }
  }

  Vue.prototype.$destroy = function () {
    const vm: Component = this
    if (vm._isBeingDestroyed) {
      return
    }
    callHook(vm, 'beforeDestroy')
    vm._isBeingDestroyed = true
    // remove self from parent
    const parent = vm.$parent
    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
      remove(parent.$children, vm)
    }
    // teardown scope. this includes both the render watcher and other
    // watchers created
    vm._scope.stop()
    // remove reference from data ob
    // frozen object may not have observer.
    if (vm._data.__ob__) {
      vm._data.__ob__.vmCount--
    }
    // call the last hook...
    vm._isDestroyed = true
    // invoke destroy hooks on current rendered tree
    vm.__patch__(vm._vnode, null)
    // fire destroyed hook
    callHook(vm, 'destroyed')
    // turn off all instance listeners.
    vm.$off()
    // remove __vue__ reference
    if (vm.$el) {
      vm.$el.__vue__ = null
    }
    // release circular reference (#6759)
    if (vm.$vnode) {
      vm.$vnode.parent = null
    }
  }
}

export function mountComponent(
  vm: Component,
  el: Element | null | undefined,
  hydrating?: boolean
): Component {
  vm.$el = el
  if (!vm.$options.render) {
    // @ts-expect-error invalid type
    vm.$options.render = createEmptyVNode
    if (__DEV__) {
      /* istanbul ignore if */
      if (
        (vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
        vm.$options.el ||
        el
      ) {
        warn(
          'You are using the runtime-only build of Vue where the template ' +
            'compiler is not available. Either pre-compile the templates into ' +
            'render functions, or use the compiler-included build.',
          vm
        )
      } else {
        warn(
          'Failed to mount component: template or render function not defined.',
          vm
        )
      }
    }
  }
  callHook(vm, 'beforeMount')

  let updateComponent
  /* istanbul ignore if */
  if (__DEV__ && config.performance && mark) {
    updateComponent = () => {
      const name = vm._name
      const id = vm._uid
      const startTag = `vue-perf-start:${id}`
      const endTag = `vue-perf-end:${id}`

      mark(startTag)
      const vnode = vm._render()
      mark(endTag)
      measure(`vue ${name} render`, startTag, endTag)

      mark(startTag)
      vm._update(vnode, hydrating)
      mark(endTag)
      measure(`vue ${name} patch`, startTag, endTag)
    }
  } else {
    updateComponent = () => {
      vm._update(vm._render(), hydrating)
    }
  }

  const watcherOptions: WatcherOptions = {
    before() {
      if (vm._isMounted && !vm._isDestroyed) {
        callHook(vm, 'beforeUpdate')
      }
    }
  }

  if (__DEV__) {
    watcherOptions.onTrack = e => callHook(vm, 'renderTracked', [e])
    watcherOptions.onTrigger = e => callHook(vm, 'renderTriggered', [e])
  }

  // we set this to vm._watcher inside the watcher's constructor
  // since the watcher's initial patch may call $forceUpdate (e.g. inside child
  // component's mounted hook), which relies on vm._watcher being already defined
  new Watcher(
    vm,
    updateComponent,
    noop,
    watcherOptions,
    true /* isRenderWatcher */
  )
  hydrating = false

  // flush buffer for flush: "pre" watchers queued in setup()
  const preWatchers = vm._preWatchers
  if (preWatchers) {
    for (let i = 0; i < preWatchers.length; i++) {
      preWatchers[i].run()
    }
  }

  // manually mounted instance, call mounted on self
  // mounted is called for render-created child components in its inserted hook
  if (vm.$vnode == null) {
    vm._isMounted = true
    callHook(vm, 'mounted')
  }
  return vm
}

export function updateChildComponent(
  vm: Component,
  propsData: Record<string, any> | null | undefined,
  listeners: Record<string, Function | Array<Function>> | undefined,
  parentVnode: MountedComponentVNode,
  renderChildren?: Array<VNode> | null
) {
  if (__DEV__) {
    isUpdatingChildComponent = true
  }

  // determine whether component has slot children
  // we need to do this before overwriting $options._renderChildren.

  // check if there are dynamic scopedSlots (hand-written or compiled but with
  // dynamic slot names). Static scoped slots compiled from template has the
  // "$stable" marker.
  const newScopedSlots = parentVnode.data.scopedSlots
  const oldScopedSlots = vm.$scopedSlots
  const hasDynamicScopedSlot = !!(
    (newScopedSlots && !newScopedSlots.$stable) ||
    (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
    (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
    (!newScopedSlots && vm.$scopedSlots.$key)
  )

  // Any static slot children from the parent may have changed during parent's
  // update. Dynamic scoped slots may also have changed. In such cases, a forced
  // update is necessary to ensure correctness.
  let needsForceUpdate = !!(
    renderChildren || // has new static slots
    vm.$options._renderChildren || // has old static slots
    hasDynamicScopedSlot
  )

  const prevVNode = vm.$vnode
  vm.$options._parentVnode = parentVnode
  vm.$vnode = parentVnode // update vm's placeholder node without re-render

  if (vm._vnode) {
    // update child tree's parent
    vm._vnode.parent = parentVnode
  }
  vm.$options._renderChildren = renderChildren

  // update $attrs and $listeners hash
  // these are also reactive so they may trigger child update if the child
  // used them during render
  const attrs = parentVnode.data.attrs || emptyObject
  if (vm._attrsProxy) {
    // force update if attrs are accessed and has changed since it may be
    // passed to a child component.
    if (
      syncSetupProxy(
        vm._attrsProxy,
        attrs,
        (prevVNode.data && prevVNode.data.attrs) || emptyObject,
        vm,
        '$attrs'
      )
    ) {
      needsForceUpdate = true
    }
  }
  vm.$attrs = attrs

  // update listeners
  listeners = listeners || emptyObject
  const prevListeners = vm.$options._parentListeners
  if (vm._listenersProxy) {
    syncSetupProxy(
      vm._listenersProxy,
      listeners,
      prevListeners || emptyObject,
      vm,
      '$listeners'
    )
  }
  vm.$listeners = vm.$options._parentListeners = listeners
  updateComponentListeners(vm, listeners, prevListeners)

  // update props
  if (propsData && vm.$options.props) {
    toggleObserving(false)
    const props = vm._props
    const propKeys = vm.$options._propKeys || []
    for (let i = 0; i < propKeys.length; i++) {
      const key = propKeys[i]
      const propOptions: any = vm.$options.props // wtf flow?
      props[key] = validateProp(key, propOptions, propsData, vm)
    }
    toggleObserving(true)
    // keep a copy of raw propsData
    vm.$options.propsData = propsData
  }

  // resolve slots + force update if has children
  if (needsForceUpdate) {
    vm.$slots = resolveSlots(renderChildren, parentVnode.context)
    vm.$forceUpdate()
  }

  if (__DEV__) {
    isUpdatingChildComponent = false
  }
}

function isInInactiveTree(vm) {
  while (vm && (vm = vm.$parent)) {
    if (vm._inactive) return true
  }
  return false
}

export function activateChildComponent(vm: Component, direct?: boolean) {
  if (direct) {
    vm._directInactive = false
    if (isInInactiveTree(vm)) {
      return
    }
  } else if (vm._directInactive) {
    return
  }
  if (vm._inactive || vm._inactive === null) {
    vm._inactive = false
    for (let i = 0; i < vm.$children.length; i++) {
      activateChildComponent(vm.$children[i])
    }
    callHook(vm, 'activated')
  }
}

export function deactivateChildComponent(vm: Component, direct?: boolean) {
  if (direct) {
    vm._directInactive = true
    if (isInInactiveTree(vm)) {
      return
    }
  }
  if (!vm._inactive) {
    vm._inactive = true
    for (let i = 0; i < vm.$children.length; i++) {
      deactivateChildComponent(vm.$children[i])
    }
    callHook(vm, 'deactivated')
  }
}

export function callHook(
  vm: Component,
  hook: string,
  args?: any[],
  setContext = true
) {
  // #7573 disable dep collection when invoking lifecycle hooks
  pushTarget()
  const prev = currentInstance
  setContext && setCurrentInstance(vm)
  const handlers = vm.$options[hook]
  const info = `${hook} hook`
  if (handlers) {
    for (let i = 0, j = handlers.length; i < j; i++) {
      invokeWithErrorHandling(handlers[i], vm, args || null, vm, info)
    }
  }
  if (vm._hasHookEvent) {
    vm.$emit('hook:' + hook)
  }
  setContext && setCurrentInstance(prev)
  popTarget()
}
/* not type checking this file because flow doesn't play well with Proxy */

import config from 'core/config'
import { warn, makeMap, isNative } from '../util/index'

let initProxy

if (__DEV__) {
  const allowedGlobals = makeMap(
    'Infinity,undefined,NaN,isFinite,isNaN,' +
      'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
      'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
      'require' // for Webpack/Browserify
  )

  const warnNonPresent = (target, key) => {
    warn(
      `Property or method "${key}" is not defined on the instance but ` +
        'referenced during render. Make sure that this property is reactive, ' +
        'either in the data option, or for class-based components, by ' +
        'initializing the property. ' +
        'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
      target
    )
  }

  const warnReservedPrefix = (target, key) => {
    warn(
      `Property "${key}" must be accessed with "$data.${key}" because ` +
        'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
        'prevent conflicts with Vue internals. ' +
        'See: https://v2.vuejs.org/v2/api/#data',
      target
    )
  }

  const hasProxy = typeof Proxy !== 'undefined' && isNative(Proxy)

  if (hasProxy) {
    const isBuiltInModifier = makeMap(
      'stop,prevent,self,ctrl,shift,alt,meta,exact'
    )
    config.keyCodes = new Proxy(config.keyCodes, {
      set(target, key: string, value) {
        if (isBuiltInModifier(key)) {
          warn(
            `Avoid overwriting built-in modifier in config.keyCodes: .${key}`
          )
          return false
        } else {
          target[key] = value
          return true
        }
      }
    })
  }

  const hasHandler = {
    has(target, key) {
      const has = key in target
      const isAllowed =
        allowedGlobals(key) ||
        (typeof key === 'string' &&
          key.charAt(0) === '_' &&
          !(key in target.$data))
      if (!has && !isAllowed) {
        if (key in target.$data) warnReservedPrefix(target, key)
        else warnNonPresent(target, key)
      }
      return has || !isAllowed
    }
  }

  const getHandler = {
    get(target, key) {
      if (typeof key === 'string' && !(key in target)) {
        if (key in target.$data) warnReservedPrefix(target, key)
        else warnNonPresent(target, key)
      }
      return target[key]
    }
  }

  initProxy = function initProxy(vm) {
    if (hasProxy) {
      // determine which proxy handler to use
      const options = vm.$options
      const handlers =
        options.render && options.render._withStripped ? getHandler : hasHandler
      vm._renderProxy = new Proxy(vm, handlers)
    } else {
      vm._renderProxy = vm
    }
  }
}

export { initProxy }
// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
// For example, the following template:
//
// <div id="app" :[key]="value">
//
// compiles to the following:
//
// _c('div', { attrs: bindDynamicKeys({ "id": "app" }, [key, value]) })

import { warn } from 'core/util/debug'

export function bindDynamicKeys(
  baseObj: Record<string, any>,
  values: Array<any>
): Object {
  for (let i = 0; i < values.length; i += 2) {
    const key = values[i]
    if (typeof key === 'string' && key) {
      baseObj[values[i]] = values[i + 1]
    } else if (__DEV__ && key !== '' && key !== null) {
      // null is a special value for explicitly removing a binding
      warn(
        `Invalid value for dynamic directive argument (expected string or null): ${key}`,
        this
      )
    }
  }
  return baseObj
}

// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
export function prependModifier(value: any, symbol: string): any {
  return typeof value === 'string' ? symbol + value : value
}
import { warn, extend, isPlainObject } from 'core/util/index'
import type { VNodeData } from 'types/vnode'

export function bindObjectListeners(data: any, value: any): VNodeData {
  if (value) {
    if (!isPlainObject(value)) {
      __DEV__ && warn('v-on without argument expects an Object value', this)
    } else {
      const on = (data.on = data.on ? extend({}, data.on) : {})
      for (const key in value) {
        const existing = on[key]
        const ours = value[key]
        on[key] = existing ? [].concat(existing, ours) : ours
      }
    }
  }
  return data
}
import config from 'core/config'

import {
  warn,
  isObject,
  toObject,
  isReservedAttribute,
  camelize,
  hyphenate,
  isArray
} from 'core/util/index'
import type { VNodeData } from 'types/vnode'

/**
 * Runtime helper for merging v-bind="object" into a VNode's data.
 */
export function bindObjectProps(
  data: any,
  tag: string,
  value: any,
  asProp: boolean,
  isSync?: boolean
): VNodeData {
  if (value) {
    if (!isObject(value)) {
      __DEV__ &&
        warn('v-bind without argument expects an Object or Array value', this)
    } else {
      if (isArray(value)) {
        value = toObject(value)
      }
      let hash
      for (const key in value) {
        if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
          hash = data
        } else {
          const type = data.attrs && data.attrs.type
          hash =
            asProp || config.mustUseProp(tag, type, key)
              ? data.domProps || (data.domProps = {})
              : data.attrs || (data.attrs = {})
        }
        const camelizedKey = camelize(key)
        const hyphenatedKey = hyphenate(key)
        if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
          hash[key] = value[key]

          if (isSync) {
            const on = data.on || (data.on = {})
            on[`update:${key}`] = function ($event) {
              value[key] = $event
            }
          }
        }
      }
    }
  }
  return data
}
import config from 'core/config'
import { hyphenate, isArray } from 'shared/util'

function isKeyNotMatch<T>(expect: T | Array<T>, actual: T): boolean {
  if (isArray(expect)) {
    return expect.indexOf(actual) === -1
  } else {
    return expect !== actual
  }
}

/**
 * Runtime helper for checking keyCodes from config.
 * exposed as Vue.prototype._k
 * passing in eventKeyName as last argument separately for backwards compat
 */
export function checkKeyCodes(
  eventKeyCode: number,
  key: string,
  builtInKeyCode?: number | Array<number>,
  eventKeyName?: string,
  builtInKeyName?: string | Array<string>
): boolean | null | undefined {
  const mappedKeyCode = config.keyCodes[key] || builtInKeyCode
  if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
    return isKeyNotMatch(builtInKeyName, eventKeyName)
  } else if (mappedKeyCode) {
    return isKeyNotMatch(mappedKeyCode, eventKeyCode)
  } else if (eventKeyName) {
    return hyphenate(eventKeyName) !== key
  }
  return eventKeyCode === undefined
}
import { toNumber, toString, looseEqual, looseIndexOf } from 'shared/util'
import { createTextVNode, createEmptyVNode } from 'core/vdom/vnode'
import { renderList } from './render-list'
import { renderSlot } from './render-slot'
import { resolveFilter } from './resolve-filter'
import { checkKeyCodes } from './check-keycodes'
import { bindObjectProps } from './bind-object-props'
import { renderStatic, markOnce } from './render-static'
import { bindObjectListeners } from './bind-object-listeners'
import { resolveScopedSlots } from './resolve-scoped-slots'
import { bindDynamicKeys, prependModifier } from './bind-dynamic-keys'

export function installRenderHelpers(target: any) {
  target._o = markOnce
  target._n = toNumber
  target._s = toString
  target._l = renderList
  target._t = renderSlot
  target._q = looseEqual
  target._i = looseIndexOf
  target._m = renderStatic
  target._f = resolveFilter
  target._k = checkKeyCodes
  target._b = bindObjectProps
  target._v = createTextVNode
  target._e = createEmptyVNode
  target._u = resolveScopedSlots
  target._g = bindObjectListeners
  target._d = bindDynamicKeys
  target._p = prependModifier
}
import { isObject, isDef, hasSymbol, isArray } from 'core/util/index'
import VNode from 'core/vdom/vnode'

/**
 * Runtime helper for rendering v-for lists.
 */
export function renderList(
  val: any,
  render: (val: any, keyOrIndex: string | number, index?: number) => VNode
): Array<VNode> | null {
  let ret: Array<VNode> | null = null,
    i,
    l,
    keys,
    key
  if (isArray(val) || typeof val === 'string') {
    ret = new Array(val.length)
    for (i = 0, l = val.length; i < l; i++) {
      ret[i] = render(val[i], i)
    }
  } else if (typeof val === 'number') {
    ret = new Array(val)
    for (i = 0; i < val; i++) {
      ret[i] = render(i + 1, i)
    }
  } else if (isObject(val)) {
    if (hasSymbol && val[Symbol.iterator]) {
      ret = []
      const iterator: Iterator<any> = val[Symbol.iterator]()
      let result = iterator.next()
      while (!result.done) {
        ret.push(render(result.value, ret.length))
        result = iterator.next()
      }
    } else {
      keys = Object.keys(val)
      ret = new Array(keys.length)
      for (i = 0, l = keys.length; i < l; i++) {
        key = keys[i]
        ret[i] = render(val[key], key, i)
      }
    }
  }
  if (!isDef(ret)) {
    ret = []
  }
  ;(ret as any)._isVList = true
  return ret
}
import { extend, warn, isObject, isFunction } from 'core/util/index'
import VNode from 'core/vdom/vnode'

/**
 * Runtime helper for rendering <slot>
 */
export function renderSlot(
  name: string,
  fallbackRender: ((() => Array<VNode>) | Array<VNode>) | null,
  props: Record<string, any> | null,
  bindObject: object | null
): Array<VNode> | null {
  const scopedSlotFn = this.$scopedSlots[name]
  let nodes
  if (scopedSlotFn) {
    // scoped slot
    props = props || {}
    if (bindObject) {
      if (__DEV__ && !isObject(bindObject)) {
        warn('slot v-bind without argument expects an Object', this)
      }
      props = extend(extend({}, bindObject), props)
    }
    nodes =
      scopedSlotFn(props) ||
      (isFunction(fallbackRender) ? fallbackRender() : fallbackRender)
  } else {
    nodes =
      this.$slots[name] ||
      (isFunction(fallbackRender) ? fallbackRender() : fallbackRender)
  }

  const target = props && props.slot
  if (target) {
    return this.$createElement('template', { slot: target }, nodes)
  } else {
    return nodes
  }
}
import VNode from 'core/vdom/vnode'
import { isArray } from 'core/util'

/**
 * Runtime helper for rendering static trees.
 */
export function renderStatic(
  index: number,
  isInFor: boolean
): VNode | Array<VNode> {
  const cached = this._staticTrees || (this._staticTrees = [])
  let tree = cached[index]
  // if has already-rendered static tree and not inside v-for,
  // we can reuse the same tree.
  if (tree && !isInFor) {
    return tree
  }
  // otherwise, render a fresh tree.
  tree = cached[index] = this.$options.staticRenderFns[index].call(
    this._renderProxy,
    this._c,
    this // for render fns generated for functional component templates
  )
  markStatic(tree, `__static__${index}`, false)
  return tree
}

/**
 * Runtime helper for v-once.
 * Effectively it means marking the node as static with a unique key.
 */
export function markOnce(
  tree: VNode | Array<VNode>,
  index: number,
  key: string
) {
  markStatic(tree, `__once__${index}${key ? `_${key}` : ``}`, true)
  return tree
}

function markStatic(tree: VNode | Array<VNode>, key: string, isOnce: boolean) {
  if (isArray(tree)) {
    for (let i = 0; i < tree.length; i++) {
      if (tree[i] && typeof tree[i] !== 'string') {
        markStaticNode(tree[i], `${key}_${i}`, isOnce)
      }
    }
  } else {
    markStaticNode(tree, key, isOnce)
  }
}

function markStaticNode(node, key, isOnce) {
  node.isStatic = true
  node.key = key
  node.isOnce = isOnce
}
import { identity, resolveAsset } from 'core/util/index'

/**
 * Runtime helper for resolving filters
 */
export function resolveFilter(id: string): Function {
  return resolveAsset(this.$options, 'filters', id, true) || identity
}
import type { ScopedSlotsData } from 'types/vnode'
import { isArray } from 'core/util'

export function resolveScopedSlots(
  fns: ScopedSlotsData,
  res?: Record<string, any>,
  // the following are added in 2.6
  hasDynamicKeys?: boolean,
  contentHashKey?: number
): { $stable: boolean } & { [key: string]: Function } {
  res = res || { $stable: !hasDynamicKeys }
  for (let i = 0; i < fns.length; i++) {
    const slot = fns[i]
    if (isArray(slot)) {
      resolveScopedSlots(slot, res, hasDynamicKeys)
    } else if (slot) {
      // marker for reverse proxying v-slot without scope on this.$slots
      // @ts-expect-error
      if (slot.proxy) {
        // @ts-expect-error
        slot.fn.proxy = true
      }
      res[slot.key] = slot.fn
    }
  }
  if (contentHashKey) {
    ;(res as any).$key = contentHashKey
  }
  return res as any
}
import type VNode from 'core/vdom/vnode'
import type { Component } from 'types/component'

/**
 * Runtime helper for resolving raw children VNodes into a slot object.
 */
export function resolveSlots(
  children: Array<VNode> | null | undefined,
  context: Component | null
): { [key: string]: Array<VNode> } {
  if (!children || !children.length) {
    return {}
  }
  const slots: Record<string, any> = {}
  for (let i = 0, l = children.length; i < l; i++) {
    const child = children[i]
    const data = child.data
    // remove slot attribute if the node is resolved as a Vue slot node
    if (data && data.attrs && data.attrs.slot) {
      delete data.attrs.slot
    }
    // named slots should only be respected if the vnode was rendered in the
    // same context.
    if (
      (child.context === context || child.fnContext === context) &&
      data &&
      data.slot != null
    ) {
      const name = data.slot
      const slot = slots[name] || (slots[name] = [])
      if (child.tag === 'template') {
        slot.push.apply(slot, child.children || [])
      } else {
        slot.push(child)
      }
    } else {
      ;(slots.default || (slots.default = [])).push(child)
    }
  }
  // ignore slots that contains only whitespace
  for (const name in slots) {
    if (slots[name].every(isWhitespace)) {
      delete slots[name]
    }
  }
  return slots
}

function isWhitespace(node: VNode): boolean {
  return (node.isComment && !node.asyncFactory) || node.text === ' '
}
import {
  warn,
  nextTick,
  emptyObject,
  handleError,
  defineReactive,
  isArray
} from '../util/index'

import { createElement } from '../vdom/create-element'
import { installRenderHelpers } from './render-helpers/index'
import { resolveSlots } from './render-helpers/resolve-slots'
import { normalizeScopedSlots } from '../vdom/helpers/normalize-scoped-slots'
import VNode, { createEmptyVNode } from '../vdom/vnode'

import { isUpdatingChildComponent } from './lifecycle'
import type { Component } from 'types/component'
import { setCurrentInstance } from 'v3/currentInstance'
import { syncSetupSlots } from 'v3/apiSetup'

export function initRender(vm: Component) {
  vm._vnode = null // the root of the child tree
  vm._staticTrees = null // v-once cached trees
  const options = vm.$options
  const parentVnode = (vm.$vnode = options._parentVnode!) // the placeholder node in parent tree
  const renderContext = parentVnode && (parentVnode.context as Component)
  vm.$slots = resolveSlots(options._renderChildren, renderContext)
  vm.$scopedSlots = parentVnode
    ? normalizeScopedSlots(
        vm.$parent!,
        parentVnode.data!.scopedSlots,
        vm.$slots
      )
    : emptyObject
  // bind the createElement fn to this instance
  // so that we get proper render context inside it.
  // args order: tag, data, children, normalizationType, alwaysNormalize
  // internal version is used by render functions compiled from templates
  // @ts-expect-error
  vm._c = (a, b, c, d) => createElement(vm, a, b, c, d, false)
  // normalization is always applied for the public version, used in
  // user-written render functions.
  // @ts-expect-error
  vm.$createElement = (a, b, c, d) => createElement(vm, a, b, c, d, true)

  // $attrs & $listeners are exposed for easier HOC creation.
  // they need to be reactive so that HOCs using them are always updated
  const parentData = parentVnode && parentVnode.data

  /* istanbul ignore else */
  if (__DEV__) {
    defineReactive(
      vm,
      '$attrs',
      (parentData && parentData.attrs) || emptyObject,
      () => {
        !isUpdatingChildComponent && warn(`$attrs is readonly.`, vm)
      },
      true
    )
    defineReactive(
      vm,
      '$listeners',
      options._parentListeners || emptyObject,
      () => {
        !isUpdatingChildComponent && warn(`$listeners is readonly.`, vm)
      },
      true
    )
  } else {
    defineReactive(
      vm,
      '$attrs',
      (parentData && parentData.attrs) || emptyObject,
      null,
      true
    )
    defineReactive(
      vm,
      '$listeners',
      options._parentListeners || emptyObject,
      null,
      true
    )
  }
}

export let currentRenderingInstance: Component | null = null

// for testing only
export function setCurrentRenderingInstance(vm: Component) {
  currentRenderingInstance = vm
}

export function renderMixin(Vue: typeof Component) {
  // install runtime convenience helpers
  installRenderHelpers(Vue.prototype)

  Vue.prototype.$nextTick = function (fn: (...args: any[]) => any) {
    return nextTick(fn, this)
  }

  Vue.prototype._render = function (): VNode {
    const vm: Component = this
    const { render, _parentVnode } = vm.$options

    if (_parentVnode && vm._isMounted) {
      vm.$scopedSlots = normalizeScopedSlots(
        vm.$parent!,
        _parentVnode.data!.scopedSlots,
        vm.$slots,
        vm.$scopedSlots
      )
      if (vm._slotsProxy) {
        syncSetupSlots(vm._slotsProxy, vm.$scopedSlots)
      }
    }

    // set parent vnode. this allows render functions to have access
    // to the data on the placeholder node.
    vm.$vnode = _parentVnode!
    // render self
    let vnode
    try {
      // There's no need to maintain a stack because all render fns are called
      // separately from one another. Nested component's render fns are called
      // when parent component is patched.
      setCurrentInstance(vm)
      currentRenderingInstance = vm
      vnode = render.call(vm._renderProxy, vm.$createElement)
    } catch (e: any) {
      handleError(e, vm, `render`)
      // return error render result,
      // or previous vnode to prevent render error causing blank component
      /* istanbul ignore else */
      if (__DEV__ && vm.$options.renderError) {
        try {
          vnode = vm.$options.renderError.call(
            vm._renderProxy,
            vm.$createElement,
            e
          )
        } catch (e: any) {
          handleError(e, vm, `renderError`)
          vnode = vm._vnode
        }
      } else {
        vnode = vm._vnode
      }
    } finally {
      currentRenderingInstance = null
      setCurrentInstance()
    }
    // if the returned array contains only a single node, allow it
    if (isArray(vnode) && vnode.length === 1) {
      vnode = vnode[0]
    }
    // return empty vnode in case the render function errored out
    if (!(vnode instanceof VNode)) {
      if (__DEV__ && isArray(vnode)) {
        warn(
          'Multiple root nodes returned from render function. Render function ' +
            'should return a single root node.',
          vm
        )
      }
      vnode = createEmptyVNode()
    }
    // set parent
    vnode.parent = _parentVnode
    return vnode
  }
}
import config from '../config'
import Watcher from '../observer/watcher'
import Dep, { pushTarget, popTarget } from '../observer/dep'
import { isUpdatingChildComponent } from './lifecycle'
import { initSetup } from 'v3/apiSetup'

import {
  set,
  del,
  observe,
  defineReactive,
  toggleObserving
} from '../observer/index'

import {
  warn,
  bind,
  noop,
  hasOwn,
  isArray,
  hyphenate,
  isReserved,
  handleError,
  nativeWatch,
  validateProp,
  isPlainObject,
  isServerRendering,
  isReservedAttribute,
  invokeWithErrorHandling,
  isFunction
} from '../util/index'
import type { Component } from 'types/component'
import { shallowReactive, TrackOpTypes } from 'v3'

const sharedPropertyDefinition = {
  enumerable: true,
  configurable: true,
  get: noop,
  set: noop
}

export function proxy(target: Object, sourceKey: string, key: string) {
  sharedPropertyDefinition.get = function proxyGetter() {
    return this[sourceKey][key]
  }
  sharedPropertyDefinition.set = function proxySetter(val) {
    this[sourceKey][key] = val
  }
  Object.defineProperty(target, key, sharedPropertyDefinition)
}

export function initState(vm: Component) {
  const opts = vm.$options
  if (opts.props) initProps(vm, opts.props)

  // Composition API
  initSetup(vm)

  if (opts.methods) initMethods(vm, opts.methods)
  if (opts.data) {
    initData(vm)
  } else {
    const ob = observe((vm._data = {}))
    ob && ob.vmCount++
  }
  if (opts.computed) initComputed(vm, opts.computed)
  if (opts.watch && opts.watch !== nativeWatch) {
    initWatch(vm, opts.watch)
  }
}

function initProps(vm: Component, propsOptions: Object) {
  const propsData = vm.$options.propsData || {}
  const props = (vm._props = shallowReactive({}))
  // cache prop keys so that future props updates can iterate using Array
  // instead of dynamic object key enumeration.
  const keys: string[] = (vm.$options._propKeys = [])
  const isRoot = !vm.$parent
  // root instance props should be converted
  if (!isRoot) {
    toggleObserving(false)
  }
  for (const key in propsOptions) {
    keys.push(key)
    const value = validateProp(key, propsOptions, propsData, vm)
    /* istanbul ignore else */
    if (__DEV__) {
      const hyphenatedKey = hyphenate(key)
      if (
        isReservedAttribute(hyphenatedKey) ||
        config.isReservedAttr(hyphenatedKey)
      ) {
        warn(
          `"${hyphenatedKey}" is a reserved attribute and cannot be used as component prop.`,
          vm
        )
      }
      defineReactive(props, key, value, () => {
        if (!isRoot && !isUpdatingChildComponent) {
          warn(
            `Avoid mutating a prop directly since the value will be ` +
              `overwritten whenever the parent component re-renders. ` +
              `Instead, use a data or computed property based on the prop's ` +
              `value. Prop being mutated: "${key}"`,
            vm
          )
        }
      })
    } else {
      defineReactive(props, key, value)
    }
    // static props are already proxied on the component's prototype
    // during Vue.extend(). We only need to proxy props defined at
    // instantiation here.
    if (!(key in vm)) {
      proxy(vm, `_props`, key)
    }
  }
  toggleObserving(true)
}

function initData(vm: Component) {
  let data: any = vm.$options.data
  data = vm._data = isFunction(data) ? getData(data, vm) : data || {}
  if (!isPlainObject(data)) {
    data = {}
    __DEV__ &&
      warn(
        'data functions should return an object:\n' +
          'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
        vm
      )
  }
  // proxy data on instance
  const keys = Object.keys(data)
  const props = vm.$options.props
  const methods = vm.$options.methods
  let i = keys.length
  while (i--) {
    const key = keys[i]
    if (__DEV__) {
      if (methods && hasOwn(methods, key)) {
        warn(`Method "${key}" has already been defined as a data property.`, vm)
      }
    }
    if (props && hasOwn(props, key)) {
      __DEV__ &&
        warn(
          `The data property "${key}" is already declared as a prop. ` +
            `Use prop default value instead.`,
          vm
        )
    } else if (!isReserved(key)) {
      proxy(vm, `_data`, key)
    }
  }
  // observe data
  const ob = observe(data)
  ob && ob.vmCount++
}

export function getData(data: Function, vm: Component): any {
  // #7573 disable dep collection when invoking data getters
  pushTarget()
  try {
    return data.call(vm, vm)
  } catch (e: any) {
    handleError(e, vm, `data()`)
    return {}
  } finally {
    popTarget()
  }
}

const computedWatcherOptions = { lazy: true }

function initComputed(vm: Component, computed: Object) {
  // $flow-disable-line
  const watchers = (vm._computedWatchers = Object.create(null))
  // computed properties are just getters during SSR
  const isSSR = isServerRendering()

  for (const key in computed) {
    const userDef = computed[key]
    const getter = isFunction(userDef) ? userDef : userDef.get
    if (__DEV__ && getter == null) {
      warn(`Getter is missing for computed property "${key}".`, vm)
    }

    if (!isSSR) {
      // create internal watcher for the computed property.
      watchers[key] = new Watcher(
        vm,
        getter || noop,
        noop,
        computedWatcherOptions
      )
    }

    // component-defined computed properties are already defined on the
    // component prototype. We only need to define computed properties defined
    // at instantiation here.
    if (!(key in vm)) {
      defineComputed(vm, key, userDef)
    } else if (__DEV__) {
      if (key in vm.$data) {
        warn(`The computed property "${key}" is already defined in data.`, vm)
      } else if (vm.$options.props && key in vm.$options.props) {
        warn(`The computed property "${key}" is already defined as a prop.`, vm)
      } else if (vm.$options.methods && key in vm.$options.methods) {
        warn(
          `The computed property "${key}" is already defined as a method.`,
          vm
        )
      }
    }
  }
}

export function defineComputed(
  target: any,
  key: string,
  userDef: Record<string, any> | (() => any)
) {
  const shouldCache = !isServerRendering()
  if (isFunction(userDef)) {
    sharedPropertyDefinition.get = shouldCache
      ? createComputedGetter(key)
      : createGetterInvoker(userDef)
    sharedPropertyDefinition.set = noop
  } else {
    sharedPropertyDefinition.get = userDef.get
      ? shouldCache && userDef.cache !== false
        ? createComputedGetter(key)
        : createGetterInvoker(userDef.get)
      : noop
    sharedPropertyDefinition.set = userDef.set || noop
  }
  if (__DEV__ && sharedPropertyDefinition.set === noop) {
    sharedPropertyDefinition.set = function () {
      warn(
        `Computed property "${key}" was assigned to but it has no setter.`,
        this
      )
    }
  }
  Object.defineProperty(target, key, sharedPropertyDefinition)
}

function createComputedGetter(key) {
  return function computedGetter() {
    const watcher = this._computedWatchers && this._computedWatchers[key]
    if (watcher) {
      if (watcher.dirty) {
        watcher.evaluate()
      }
      if (Dep.target) {
        if (__DEV__ && Dep.target.onTrack) {
          Dep.target.onTrack({
            effect: Dep.target,
            target: this,
            type: TrackOpTypes.GET,
            key
          })
        }
        watcher.depend()
      }
      return watcher.value
    }
  }
}

function createGetterInvoker(fn) {
  return function computedGetter() {
    return fn.call(this, this)
  }
}

function initMethods(vm: Component, methods: Object) {
  const props = vm.$options.props
  for (const key in methods) {
    if (__DEV__) {
      if (typeof methods[key] !== 'function') {
        warn(
          `Method "${key}" has type "${typeof methods[
            key
          ]}" in the component definition. ` +
            `Did you reference the function correctly?`,
          vm
        )
      }
      if (props && hasOwn(props, key)) {
        warn(`Method "${key}" has already been defined as a prop.`, vm)
      }
      if (key in vm && isReserved(key)) {
        warn(
          `Method "${key}" conflicts with an existing Vue instance method. ` +
            `Avoid defining component methods that start with _ or $.`
        )
      }
    }
    vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm)
  }
}

function initWatch(vm: Component, watch: Object) {
  for (const key in watch) {
    const handler = watch[key]
    if (isArray(handler)) {
      for (let i = 0; i < handler.length; i++) {
        createWatcher(vm, key, handler[i])
      }
    } else {
      createWatcher(vm, key, handler)
    }
  }
}

function createWatcher(
  vm: Component,
  expOrFn: string | (() => any),
  handler: any,
  options?: Object
) {
  if (isPlainObject(handler)) {
    options = handler
    handler = handler.handler
  }
  if (typeof handler === 'string') {
    handler = vm[handler]
  }
  return vm.$watch(expOrFn, handler, options)
}

export function stateMixin(Vue: typeof Component) {
  // flow somehow has problems with directly declared definition object
  // when using Object.defineProperty, so we have to procedurally build up
  // the object here.
  const dataDef: any = {}
  dataDef.get = function () {
    return this._data
  }
  const propsDef: any = {}
  propsDef.get = function () {
    return this._props
  }
  if (__DEV__) {
    dataDef.set = function () {
      warn(
        'Avoid replacing instance root $data. ' +
          'Use nested data properties instead.',
        this
      )
    }
    propsDef.set = function () {
      warn(`$props is readonly.`, this)
    }
  }
  Object.defineProperty(Vue.prototype, '$data', dataDef)
  Object.defineProperty(Vue.prototype, '$props', propsDef)

  Vue.prototype.$set = set
  Vue.prototype.$delete = del

  Vue.prototype.$watch = function (
    expOrFn: string | (() => any),
    cb: any,
    options?: Record<string, any>
  ): Function {
    const vm: Component = this
    if (isPlainObject(cb)) {
      return createWatcher(vm, expOrFn, cb, options)
    }
    options = options || {}
    options.user = true
    const watcher = new Watcher(vm, expOrFn, cb, options)
    if (options.immediate) {
      const info = `callback for immediate watcher "${watcher.expression}"`
      pushTarget()
      invokeWithErrorHandling(cb, vm, [watcher.value], vm, info)
      popTarget()
    }
    return function unwatchFn() {
      watcher.teardown()
    }
  }
}
/*
 * not type checking this file because flow doesn't play well with
 * dynamically accessing methods on Array prototype
 */

import { TriggerOpTypes } from '../../v3'
import { def } from '../util/index'

const arrayProto = Array.prototype
export const arrayMethods = Object.create(arrayProto)

const methodsToPatch = [
  'push',
  'pop',
  'shift',
  'unshift',
  'splice',
  'sort',
  'reverse'
]

/**
 * Intercept mutating methods and emit events
 */
methodsToPatch.forEach(function (method) {
  // cache original method
  const original = arrayProto[method]
  def(arrayMethods, method, function mutator(...args) {
    const result = original.apply(this, args)
    const ob = this.__ob__
    let inserted
    switch (method) {
      case 'push':
      case 'unshift':
        inserted = args
        break
      case 'splice':
        inserted = args.slice(2)
        break
    }
    if (inserted) ob.observeArray(inserted)
    // notify change
    if (__DEV__) {
      ob.dep.notify({
        type: TriggerOpTypes.ARRAY_MUTATION,
        target: this,
        key: method
      })
    } else {
      ob.dep.notify()
    }
    return result
  })
})
import config from '../config'
import { DebuggerOptions, DebuggerEventExtraInfo } from 'v3'

let uid = 0

const pendingCleanupDeps: Dep[] = []

export const cleanupDeps = () => {
  for (let i = 0; i < pendingCleanupDeps.length; i++) {
    const dep = pendingCleanupDeps[i]
    dep.subs = dep.subs.filter(s => s)
    dep._pending = false
  }
  pendingCleanupDeps.length = 0
}

/**
 * @internal
 */
export interface DepTarget extends DebuggerOptions {
  id: number
  addDep(dep: Dep): void
  update(): void
}

/**
 * A dep is an observable that can have multiple
 * directives subscribing to it.
 * @internal
 */
export default class Dep {
  static target?: DepTarget | null
  id: number
  subs: Array<DepTarget | null>
  // pending subs cleanup
  _pending = false

  constructor() {
    this.id = uid++
    this.subs = []
  }

  addSub(sub: DepTarget) {
    this.subs.push(sub)
  }

  removeSub(sub: DepTarget) {
    // #12696 deps with massive amount of subscribers are extremely slow to
    // clean up in Chromium
    // to workaround this, we unset the sub for now, and clear them on
    // next scheduler flush.
    this.subs[this.subs.indexOf(sub)] = null
    if (!this._pending) {
      this._pending = true
      pendingCleanupDeps.push(this)
    }
  }

  depend(info?: DebuggerEventExtraInfo) {
    if (Dep.target) {
      Dep.target.addDep(this)
      if (__DEV__ && info && Dep.target.onTrack) {
        Dep.target.onTrack({
          effect: Dep.target,
          ...info
        })
      }
    }
  }

  notify(info?: DebuggerEventExtraInfo) {
    // stabilize the subscriber list first
    const subs = this.subs.filter(s => s) as DepTarget[]
    if (__DEV__ && !config.async) {
      // subs aren't sorted in scheduler if not running async
      // we need to sort them now to make sure they fire in correct
      // order
      subs.sort((a, b) => a.id - b.id)
    }
    for (let i = 0, l = subs.length; i < l; i++) {
      const sub = subs[i]
      if (__DEV__ && info) {
        sub.onTrigger &&
          sub.onTrigger({
            effect: subs[i],
            ...info
          })
      }
      sub.update()
    }
  }
}

// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null
const targetStack: Array<DepTarget | null | undefined> = []

export function pushTarget(target?: DepTarget | null) {
  targetStack.push(target)
  Dep.target = target
}

export function popTarget() {
  targetStack.pop()
  Dep.target = targetStack[targetStack.length - 1]
}
import Dep from './dep'
import VNode from '../vdom/vnode'
import { arrayMethods } from './array'
import {
  def,
  warn,
  hasOwn,
  isArray,
  hasProto,
  isPlainObject,
  isPrimitive,
  isUndef,
  isValidArrayIndex,
  isServerRendering,
  hasChanged,
  noop
} from '../util/index'
import { isReadonly, isRef, TrackOpTypes, TriggerOpTypes } from '../../v3'

const arrayKeys = Object.getOwnPropertyNames(arrayMethods)

const NO_INIITIAL_VALUE = {}

/**
 * In some cases we may want to disable observation inside a component's
 * update computation.
 */
export let shouldObserve: boolean = true

export function toggleObserving(value: boolean) {
  shouldObserve = value
}

// ssr mock dep
const mockDep = {
  notify: noop,
  depend: noop,
  addSub: noop,
  removeSub: noop
} as Dep

/**
 * Observer class that is attached to each observed
 * object. Once attached, the observer converts the target
 * object's property keys into getter/setters that
 * collect dependencies and dispatch updates.
 */
export class Observer {
  dep: Dep
  vmCount: number // number of vms that have this object as root $data

  constructor(public value: any, public shallow = false, public mock = false) {
    // this.value = value
    this.dep = mock ? mockDep : new Dep()
    this.vmCount = 0
    def(value, '__ob__', this)
    if (isArray(value)) {
      if (!mock) {
        if (hasProto) {
          /* eslint-disable no-proto */
          ;(value as any).__proto__ = arrayMethods
          /* eslint-enable no-proto */
        } else {
          for (let i = 0, l = arrayKeys.length; i < l; i++) {
            const key = arrayKeys[i]
            def(value, key, arrayMethods[key])
          }
        }
      }
      if (!shallow) {
        this.observeArray(value)
      }
    } else {
      /**
       * Walk through all properties and convert them into
       * getter/setters. This method should only be called when
       * value type is Object.
       */
      const keys = Object.keys(value)
      for (let i = 0; i < keys.length; i++) {
        const key = keys[i]
        defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock)
      }
    }
  }

  /**
   * Observe a list of Array items.
   */
  observeArray(value: any[]) {
    for (let i = 0, l = value.length; i < l; i++) {
      observe(value[i], false, this.mock)
    }
  }
}

// helpers

/**
 * Attempt to create an observer instance for a value,
 * returns the new observer if successfully observed,
 * or the existing observer if the value already has one.
 */
export function observe(
  value: any,
  shallow?: boolean,
  ssrMockReactivity?: boolean
): Observer | void {
  if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
    return value.__ob__
  }
  if (
    shouldObserve &&
    (ssrMockReactivity || !isServerRendering()) &&
    (isArray(value) || isPlainObject(value)) &&
    Object.isExtensible(value) &&
    !value.__v_skip /* ReactiveFlags.SKIP */ &&
    !isRef(value) &&
    !(value instanceof VNode)
  ) {
    return new Observer(value, shallow, ssrMockReactivity)
  }
}

/**
 * Define a reactive property on an Object.
 */
export function defineReactive(
  obj: object,
  key: string,
  val?: any,
  customSetter?: Function | null,
  shallow?: boolean,
  mock?: boolean
) {
  const dep = new Dep()

  const property = Object.getOwnPropertyDescriptor(obj, key)
  if (property && property.configurable === false) {
    return
  }

  // cater for pre-defined getter/setters
  const getter = property && property.get
  const setter = property && property.set
  if (
    (!getter || setter) &&
    (val === NO_INIITIAL_VALUE || arguments.length === 2)
  ) {
    val = obj[key]
  }

  let childOb = !shallow && observe(val, false, mock)
  Object.defineProperty(obj, key, {
    enumerable: true,
    configurable: true,
    get: function reactiveGetter() {
      const value = getter ? getter.call(obj) : val
      if (Dep.target) {
        if (__DEV__) {
          dep.depend({
            target: obj,
            type: TrackOpTypes.GET,
            key
          })
        } else {
          dep.depend()
        }
        if (childOb) {
          childOb.dep.depend()
          if (isArray(value)) {
            dependArray(value)
          }
        }
      }
      return isRef(value) && !shallow ? value.value : value
    },
    set: function reactiveSetter(newVal) {
      const value = getter ? getter.call(obj) : val
      if (!hasChanged(value, newVal)) {
        return
      }
      if (__DEV__ && customSetter) {
        customSetter()
      }
      if (setter) {
        setter.call(obj, newVal)
      } else if (getter) {
        // #7981: for accessor properties without setter
        return
      } else if (!shallow && isRef(value) && !isRef(newVal)) {
        value.value = newVal
        return
      } else {
        val = newVal
      }
      childOb = !shallow && observe(newVal, false, mock)
      if (__DEV__) {
        dep.notify({
          type: TriggerOpTypes.SET,
          target: obj,
          key,
          newValue: newVal,
          oldValue: value
        })
      } else {
        dep.notify()
      }
    }
  })

  return dep
}

/**
 * Set a property on an object. Adds the new property and
 * triggers change notification if the property doesn't
 * already exist.
 */
export function set<T>(array: T[], key: number, value: T): T
export function set<T>(object: object, key: string | number, value: T): T
export function set(
  target: any[] | Record<string, any>,
  key: any,
  val: any
): any {
  if (__DEV__ && (isUndef(target) || isPrimitive(target))) {
    warn(
      `Cannot set reactive property on undefined, null, or primitive value: ${target}`
    )
  }
  if (isReadonly(target)) {
    __DEV__ && warn(`Set operation on key "${key}" failed: target is readonly.`)
    return
  }
  const ob = (target as any).__ob__
  if (isArray(target) && isValidArrayIndex(key)) {
    target.length = Math.max(target.length, key)
    target.splice(key, 1, val)
    // when mocking for SSR, array methods are not hijacked
    if (ob && !ob.shallow && ob.mock) {
      observe(val, false, true)
    }
    return val
  }
  if (key in target && !(key in Object.prototype)) {
    target[key] = val
    return val
  }
  if ((target as any)._isVue || (ob && ob.vmCount)) {
    __DEV__ &&
      warn(
        'Avoid adding reactive properties to a Vue instance or its root $data ' +
          'at runtime - declare it upfront in the data option.'
      )
    return val
  }
  if (!ob) {
    target[key] = val
    return val
  }
  defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock)
  if (__DEV__) {
    ob.dep.notify({
      type: TriggerOpTypes.ADD,
      target: target,
      key,
      newValue: val,
      oldValue: undefined
    })
  } else {
    ob.dep.notify()
  }
  return val
}

/**
 * Delete a property and trigger change if necessary.
 */
export function del<T>(array: T[], key: number): void
export function del(object: object, key: string | number): void
export function del(target: any[] | object, key: any) {
  if (__DEV__ && (isUndef(target) || isPrimitive(target))) {
    warn(
      `Cannot delete reactive property on undefined, null, or primitive value: ${target}`
    )
  }
  if (isArray(target) && isValidArrayIndex(key)) {
    target.splice(key, 1)
    return
  }
  const ob = (target as any).__ob__
  if ((target as any)._isVue || (ob && ob.vmCount)) {
    __DEV__ &&
      warn(
        'Avoid deleting properties on a Vue instance or its root $data ' +
          '- just set it to null.'
      )
    return
  }
  if (isReadonly(target)) {
    __DEV__ &&
      warn(`Delete operation on key "${key}" failed: target is readonly.`)
    return
  }
  if (!hasOwn(target, key)) {
    return
  }
  delete target[key]
  if (!ob) {
    return
  }
  if (__DEV__) {
    ob.dep.notify({
      type: TriggerOpTypes.DELETE,
      target: target,
      key
    })
  } else {
    ob.dep.notify()
  }
}

/**
 * Collect dependencies on array elements when the array is touched, since
 * we cannot intercept array element access like property getters.
 */
function dependArray(value: Array<any>) {
  for (let e, i = 0, l = value.length; i < l; i++) {
    e = value[i]
    if (e && e.__ob__) {
      e.__ob__.dep.depend()
    }
    if (isArray(e)) {
      dependArray(e)
    }
  }
}
import type Watcher from './watcher'
import config from '../config'
import Dep, { cleanupDeps } from './dep'
import { callHook, activateChildComponent } from '../instance/lifecycle'

import { warn, nextTick, devtools, inBrowser, isIE } from '../util/index'
import type { Component } from 'types/component'

export const MAX_UPDATE_COUNT = 100

const queue: Array<Watcher> = []
const activatedChildren: Array<Component> = []
let has: { [key: number]: true | undefined | null } = {}
let circular: { [key: number]: number } = {}
let waiting = false
let flushing = false
let index = 0

/**
 * Reset the scheduler's state.
 */
function resetSchedulerState() {
  index = queue.length = activatedChildren.length = 0
  has = {}
  if (__DEV__) {
    circular = {}
  }
  waiting = flushing = false
}

// Async edge case #6566 requires saving the timestamp when event listeners are
// attached. However, calling performance.now() has a perf overhead especially
// if the page has thousands of event listeners. Instead, we take a timestamp
// every time the scheduler flushes and use that for all event listeners
// attached during that flush.
export let currentFlushTimestamp = 0

// Async edge case fix requires storing an event listener's attach timestamp.
let getNow: () => number = Date.now

// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if (inBrowser && !isIE) {
  const performance = window.performance
  if (
    performance &&
    typeof performance.now === 'function' &&
    getNow() > document.createEvent('Event').timeStamp
  ) {
    // if the event timestamp, although evaluated AFTER the Date.now(), is
    // smaller than it, it means the event is using a hi-res timestamp,
    // and we need to use the hi-res version for event listener timestamps as
    // well.
    getNow = () => performance.now()
  }
}

const sortCompareFn = (a: Watcher, b: Watcher): number => {
  if (a.post) {
    if (!b.post) return 1
  } else if (b.post) {
    return -1
  }
  return a.id - b.id
}

/**
 * Flush both queues and run the watchers.
 */
function flushSchedulerQueue() {
  currentFlushTimestamp = getNow()
  flushing = true
  let watcher, id

  // Sort queue before flush.
  // This ensures that:
  // 1. Components are updated from parent to child. (because parent is always
  //    created before the child)
  // 2. A component's user watchers are run before its render watcher (because
  //    user watchers are created before the render watcher)
  // 3. If a component is destroyed during a parent component's watcher run,
  //    its watchers can be skipped.
  queue.sort(sortCompareFn)

  // do not cache length because more watchers might be pushed
  // as we run existing watchers
  for (index = 0; index < queue.length; index++) {
    watcher = queue[index]
    if (watcher.before) {
      watcher.before()
    }
    id = watcher.id
    has[id] = null
    watcher.run()
    // in dev build, check and stop circular updates.
    if (__DEV__ && has[id] != null) {
      circular[id] = (circular[id] || 0) + 1
      if (circular[id] > MAX_UPDATE_COUNT) {
        warn(
          'You may have an infinite update loop ' +
            (watcher.user
              ? `in watcher with expression "${watcher.expression}"`
              : `in a component render function.`),
          watcher.vm
        )
        break
      }
    }
  }

  // keep copies of post queues before resetting state
  const activatedQueue = activatedChildren.slice()
  const updatedQueue = queue.slice()

  resetSchedulerState()

  // call component updated and activated hooks
  callActivatedHooks(activatedQueue)
  callUpdatedHooks(updatedQueue)
  cleanupDeps()

  // devtool hook
  /* istanbul ignore if */
  if (devtools && config.devtools) {
    devtools.emit('flush')
  }
}

function callUpdatedHooks(queue: Watcher[]) {
  let i = queue.length
  while (i--) {
    const watcher = queue[i]
    const vm = watcher.vm
    if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
      callHook(vm, 'updated')
    }
  }
}

/**
 * Queue a kept-alive component that was activated during patch.
 * The queue will be processed after the entire tree has been patched.
 */
export function queueActivatedComponent(vm: Component) {
  // setting _inactive to false here so that a render function can
  // rely on checking whether it's in an inactive tree (e.g. router-view)
  vm._inactive = false
  activatedChildren.push(vm)
}

function callActivatedHooks(queue) {
  for (let i = 0; i < queue.length; i++) {
    queue[i]._inactive = true
    activateChildComponent(queue[i], true /* true */)
  }
}

/**
 * Push a watcher into the watcher queue.
 * Jobs with duplicate IDs will be skipped unless it's
 * pushed when the queue is being flushed.
 */
export function queueWatcher(watcher: Watcher) {
  const id = watcher.id
  if (has[id] != null) {
    return
  }

  if (watcher === Dep.target && watcher.noRecurse) {
    return
  }

  has[id] = true
  if (!flushing) {
    queue.push(watcher)
  } else {
    // if already flushing, splice the watcher based on its id
    // if already past its id, it will be run next immediately.
    let i = queue.length - 1
    while (i > index && queue[i].id > watcher.id) {
      i--
    }
    queue.splice(i + 1, 0, watcher)
  }
  // queue the flush
  if (!waiting) {
    waiting = true

    if (__DEV__ && !config.async) {
      flushSchedulerQueue()
      return
    }
    nextTick(flushSchedulerQueue)
  }
}
import { _Set as Set, isObject, isArray } from '../util/index'
import type { SimpleSet } from '../util/index'
import VNode from '../vdom/vnode'
import { isRef } from '../../v3'

const seenObjects = new Set()

/**
 * Recursively traverse an object to evoke all converted
 * getters, so that every nested property inside the object
 * is collected as a "deep" dependency.
 */
export function traverse(val: any) {
  _traverse(val, seenObjects)
  seenObjects.clear()
  return val
}

function _traverse(val: any, seen: SimpleSet) {
  let i, keys
  const isA = isArray(val)
  if (
    (!isA && !isObject(val)) ||
    val.__v_skip /* ReactiveFlags.SKIP */ ||
    Object.isFrozen(val) ||
    val instanceof VNode
  ) {
    return
  }
  if (val.__ob__) {
    const depId = val.__ob__.dep.id
    if (seen.has(depId)) {
      return
    }
    seen.add(depId)
  }
  if (isA) {
    i = val.length
    while (i--) _traverse(val[i], seen)
  } else if (isRef(val)) {
    _traverse(val.value, seen)
  } else {
    keys = Object.keys(val)
    i = keys.length
    while (i--) _traverse(val[keys[i]], seen)
  }
}
import {
  warn,
  remove,
  isObject,
  parsePath,
  _Set as Set,
  handleError,
  invokeWithErrorHandling,
  noop,
  isFunction
} from '../util/index'

import { traverse } from './traverse'
import { queueWatcher } from './scheduler'
import Dep, { pushTarget, popTarget, DepTarget } from './dep'
import { DebuggerEvent, DebuggerOptions } from 'v3/debug'

import type { SimpleSet } from '../util/index'
import type { Component } from 'types/component'
import { activeEffectScope, recordEffectScope } from 'v3/reactivity/effectScope'

let uid = 0

/**
 * @internal
 */
export interface WatcherOptions extends DebuggerOptions {
  deep?: boolean
  user?: boolean
  lazy?: boolean
  sync?: boolean
  before?: Function
}

/**
 * A watcher parses an expression, collects dependencies,
 * and fires callback when the expression value changes.
 * This is used for both the $watch() api and directives.
 * @internal
 */
export default class Watcher implements DepTarget {
  vm?: Component | null
  expression: string
  cb: Function
  id: number
  deep: boolean
  user: boolean
  lazy: boolean
  sync: boolean
  dirty: boolean
  active: boolean
  deps: Array<Dep>
  newDeps: Array<Dep>
  depIds: SimpleSet
  newDepIds: SimpleSet
  before?: Function
  onStop?: Function
  noRecurse?: boolean
  getter: Function
  value: any
  post: boolean

  // dev only
  onTrack?: ((event: DebuggerEvent) => void) | undefined
  onTrigger?: ((event: DebuggerEvent) => void) | undefined

  constructor(
    vm: Component | null,
    expOrFn: string | (() => any),
    cb: Function,
    options?: WatcherOptions | null,
    isRenderWatcher?: boolean
  ) {
    recordEffectScope(
      this,
      // if the active effect scope is manually created (not a component scope),
      // prioritize it
      activeEffectScope && !activeEffectScope._vm
        ? activeEffectScope
        : vm
        ? vm._scope
        : undefined
    )
    if ((this.vm = vm) && isRenderWatcher) {
      vm._watcher = this
    }
    // options
    if (options) {
      this.deep = !!options.deep
      this.user = !!options.user
      this.lazy = !!options.lazy
      this.sync = !!options.sync
      this.before = options.before
      if (__DEV__) {
        this.onTrack = options.onTrack
        this.onTrigger = options.onTrigger
      }
    } else {
      this.deep = this.user = this.lazy = this.sync = false
    }
    this.cb = cb
    this.id = ++uid // uid for batching
    this.active = true
    this.post = false
    this.dirty = this.lazy // for lazy watchers
    this.deps = []
    this.newDeps = []
    this.depIds = new Set()
    this.newDepIds = new Set()
    this.expression = __DEV__ ? expOrFn.toString() : ''
    // parse expression for getter
    if (isFunction(expOrFn)) {
      this.getter = expOrFn
    } else {
      this.getter = parsePath(expOrFn)
      if (!this.getter) {
        this.getter = noop
        __DEV__ &&
          warn(
            `Failed watching path: "${expOrFn}" ` +
              'Watcher only accepts simple dot-delimited paths. ' +
              'For full control, use a function instead.',
            vm
          )
      }
    }
    this.value = this.lazy ? undefined : this.get()
  }

  /**
   * Evaluate the getter, and re-collect dependencies.
   */
  get() {
    pushTarget(this)
    let value
    const vm = this.vm
    try {
      value = this.getter.call(vm, vm)
    } catch (e: any) {
      if (this.user) {
        handleError(e, vm, `getter for watcher "${this.expression}"`)
      } else {
        throw e
      }
    } finally {
      // "touch" every property so they are all tracked as
      // dependencies for deep watching
      if (this.deep) {
        traverse(value)
      }
      popTarget()
      this.cleanupDeps()
    }
    return value
  }

  /**
   * Add a dependency to this directive.
   */
  addDep(dep: Dep) {
    const id = dep.id
    if (!this.newDepIds.has(id)) {
      this.newDepIds.add(id)
      this.newDeps.push(dep)
      if (!this.depIds.has(id)) {
        dep.addSub(this)
      }
    }
  }

  /**
   * Clean up for dependency collection.
   */
  cleanupDeps() {
    let i = this.deps.length
    while (i--) {
      const dep = this.deps[i]
      if (!this.newDepIds.has(dep.id)) {
        dep.removeSub(this)
      }
    }
    let tmp: any = this.depIds
    this.depIds = this.newDepIds
    this.newDepIds = tmp
    this.newDepIds.clear()
    tmp = this.deps
    this.deps = this.newDeps
    this.newDeps = tmp
    this.newDeps.length = 0
  }

  /**
   * Subscriber interface.
   * Will be called when a dependency changes.
   */
  update() {
    /* istanbul ignore else */
    if (this.lazy) {
      this.dirty = true
    } else if (this.sync) {
      this.run()
    } else {
      queueWatcher(this)
    }
  }

  /**
   * Scheduler job interface.
   * Will be called by the scheduler.
   */
  run() {
    if (this.active) {
      const value = this.get()
      if (
        value !== this.value ||
        // Deep watchers and watchers on Object/Arrays should fire even
        // when the value is the same, because the value may
        // have mutated.
        isObject(value) ||
        this.deep
      ) {
        // set new value
        const oldValue = this.value
        this.value = value
        if (this.user) {
          const info = `callback for watcher "${this.expression}"`
          invokeWithErrorHandling(
            this.cb,
            this.vm,
            [value, oldValue],
            this.vm,
            info
          )
        } else {
          this.cb.call(this.vm, value, oldValue)
        }
      }
    }
  }

  /**
   * Evaluate the value of the watcher.
   * This only gets called for lazy watchers.
   */
  evaluate() {
    this.value = this.get()
    this.dirty = false
  }

  /**
   * Depend on all deps collected by this watcher.
   */
  depend() {
    let i = this.deps.length
    while (i--) {
      this.deps[i].depend()
    }
  }

  /**
   * Remove self from all dependencies' subscriber list.
   */
  teardown() {
    if (this.vm && !this.vm._isBeingDestroyed) {
      remove(this.vm._scope.effects, this)
    }
    if (this.active) {
      let i = this.deps.length
      while (i--) {
        this.deps[i].removeSub(this)
      }
      this.active = false
      if (this.onStop) {
        this.onStop()
      }
    }
  }
}
import config from '../config'
import { noop, isArray, isFunction } from 'shared/util'
import type { Component } from 'types/component'
import { currentInstance } from 'v3/currentInstance'
import { getComponentName } from '../vdom/create-component'

export let warn: (msg: string, vm?: Component | null) => void = noop
export let tip = noop
export let generateComponentTrace: (vm: Component) => string // work around flow check
export let formatComponentName: (vm: Component, includeFile?: false) => string

if (__DEV__) {
  const hasConsole = typeof console !== 'undefined'
  const classifyRE = /(?:^|[-_])(\w)/g
  const classify = str =>
    str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '')

  warn = (msg, vm = currentInstance) => {
    const trace = vm ? generateComponentTrace(vm) : ''

    if (config.warnHandler) {
      config.warnHandler.call(null, msg, vm, trace)
    } else if (hasConsole && !config.silent) {
      console.error(`[Vue warn]: ${msg}${trace}`)
    }
  }

  tip = (msg, vm) => {
    if (hasConsole && !config.silent) {
      console.warn(`[Vue tip]: ${msg}` + (vm ? generateComponentTrace(vm) : ''))
    }
  }

  formatComponentName = (vm, includeFile) => {
    if (vm.$root === vm) {
      return '<Root>'
    }
    const options =
      isFunction(vm) && (vm as any).cid != null
        ? (vm as any).options
        : vm._isVue
        ? vm.$options || (vm.constructor as any).options
        : vm
    let name = getComponentName(options)
    const file = options.__file
    if (!name && file) {
      const match = file.match(/([^/\\]+)\.vue$/)
      name = match && match[1]
    }

    return (
      (name ? `<${classify(name)}>` : `<Anonymous>`) +
      (file && includeFile !== false ? ` at ${file}` : '')
    )
  }

  const repeat = (str, n) => {
    let res = ''
    while (n) {
      if (n % 2 === 1) res += str
      if (n > 1) str += str
      n >>= 1
    }
    return res
  }

  generateComponentTrace = (vm: Component | undefined) => {
    if ((vm as any)._isVue && vm!.$parent) {
      const tree: any[] = []
      let currentRecursiveSequence = 0
      while (vm) {
        if (tree.length > 0) {
          const last = tree[tree.length - 1]
          if (last.constructor === vm.constructor) {
            currentRecursiveSequence++
            vm = vm.$parent!
            continue
          } else if (currentRecursiveSequence > 0) {
            tree[tree.length - 1] = [last, currentRecursiveSequence]
            currentRecursiveSequence = 0
          }
        }
        tree.push(vm)
        vm = vm.$parent!
      }
      return (
        '\n\nfound in\n\n' +
        tree
          .map(
            (vm, i) =>
              `${i === 0 ? '---> ' : repeat(' ', 5 + i * 2)}${
                isArray(vm)
                  ? `${formatComponentName(vm[0])}... (${
                      vm[1]
                    } recursive calls)`
                  : formatComponentName(vm)
              }`
          )
          .join('\n')
      )
    } else {
      return `\n\n(found in ${formatComponentName(vm!)})`
    }
  }
}
// can we use __proto__?
export const hasProto = '__proto__' in {}

// Browser environment sniffing
export const inBrowser = typeof window !== 'undefined'
export const UA = inBrowser && window.navigator.userAgent.toLowerCase()
export const isIE = UA && /msie|trident/.test(UA)
export const isIE9 = UA && UA.indexOf('msie 9.0') > 0
export const isEdge = UA && UA.indexOf('edge/') > 0
export const isAndroid = UA && UA.indexOf('android') > 0
export const isIOS = UA && /iphone|ipad|ipod|ios/.test(UA)
export const isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge
export const isPhantomJS = UA && /phantomjs/.test(UA)
export const isFF = UA && UA.match(/firefox\/(\d+)/)

// Firefox has a "watch" function on Object.prototype...
// @ts-expect-error firebox support
export const nativeWatch = {}.watch

export let supportsPassive = false
if (inBrowser) {
  try {
    const opts = {}
    Object.defineProperty(opts, 'passive', {
      get() {
        /* istanbul ignore next */
        supportsPassive = true
      }
    } as object) // https://github.com/facebook/flow/issues/285
    window.addEventListener('test-passive', null as any, opts)
  } catch (e: any) {}
}

// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
let _isServer
export const isServerRendering = () => {
  if (_isServer === undefined) {
    /* istanbul ignore if */
    if (!inBrowser && typeof global !== 'undefined') {
      // detect presence of vue-server-renderer and avoid
      // Webpack shimming the process
      _isServer =
        global['process'] && global['process'].env.VUE_ENV === 'server'
    } else {
      _isServer = false
    }
  }
  return _isServer
}

// detect devtools
export const devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__

/* istanbul ignore next */
export function isNative(Ctor: any): boolean {
  return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
}

export const hasSymbol =
  typeof Symbol !== 'undefined' &&
  isNative(Symbol) &&
  typeof Reflect !== 'undefined' &&
  isNative(Reflect.ownKeys)

let _Set // $flow-disable-line
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
  // use native Set when available.
  _Set = Set
} else {
  // a non-standard Set polyfill that only works with primitive keys.
  _Set = class Set implements SimpleSet {
    set: Record<string, boolean> = Object.create(null)

    has(key: string | number) {
      return this.set[key] === true
    }
    add(key: string | number) {
      this.set[key] = true
    }
    clear() {
      this.set = Object.create(null)
    }
  }
}

export interface SimpleSet {
  has(key: string | number): boolean
  add(key: string | number): any
  clear(): void
}

export { _Set }
import config from '../config'
import { warn } from './debug'
import { inBrowser } from './env'
import { isPromise } from 'shared/util'
import { pushTarget, popTarget } from '../observer/dep'

export function handleError(err: Error, vm: any, info: string) {
  // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
  // See: https://github.com/vuejs/vuex/issues/1505
  pushTarget()
  try {
    if (vm) {
      let cur = vm
      while ((cur = cur.$parent)) {
        const hooks = cur.$options.errorCaptured
        if (hooks) {
          for (let i = 0; i < hooks.length; i++) {
            try {
              const capture = hooks[i].call(cur, err, vm, info) === false
              if (capture) return
            } catch (e: any) {
              globalHandleError(e, cur, 'errorCaptured hook')
            }
          }
        }
      }
    }
    globalHandleError(err, vm, info)
  } finally {
    popTarget()
  }
}

export function invokeWithErrorHandling(
  handler: Function,
  context: any,
  args: null | any[],
  vm: any,
  info: string
) {
  let res
  try {
    res = args ? handler.apply(context, args) : handler.call(context)
    if (res && !res._isVue && isPromise(res) && !(res as any)._handled) {
      res.catch(e => handleError(e, vm, info + ` (Promise/async)`))
      // issue #9511
      // avoid catch triggering multiple times when nested calls
      ;(res as any)._handled = true
    }
  } catch (e: any) {
    handleError(e, vm, info)
  }
  return res
}

function globalHandleError(err, vm, info) {
  if (config.errorHandler) {
    try {
      return config.errorHandler.call(null, err, vm, info)
    } catch (e: any) {
      // if the user intentionally throws the original error in the handler,
      // do not log it twice
      if (e !== err) {
        logError(e, null, 'config.errorHandler')
      }
    }
  }
  logError(err, vm, info)
}

function logError(err, vm, info) {
  if (__DEV__) {
    warn(`Error in ${info}: "${err.toString()}"`, vm)
  }
  /* istanbul ignore else */
  if (inBrowser && typeof console !== 'undefined') {
    console.error(err)
  } else {
    throw err
  }
}
export * from 'shared/util'
export * from './lang'
export * from './env'
export * from './options'
export * from './debug'
export * from './props'
export * from './error'
export * from './next-tick'
export { defineReactive } from '../observer/index'
/**
 * unicode letters used for parsing html tags, component names and property paths.
 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
 */
export const unicodeRegExp =
  /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/

/**
 * Check if a string starts with $ or _
 */
export function isReserved(str: string): boolean {
  const c = (str + '').charCodeAt(0)
  return c === 0x24 || c === 0x5f
}

/**
 * Define a property.
 */
export function def(obj: Object, key: string, val: any, enumerable?: boolean) {
  Object.defineProperty(obj, key, {
    value: val,
    enumerable: !!enumerable,
    writable: true,
    configurable: true
  })
}

/**
 * Parse simple path.
 */
const bailRE = new RegExp(`[^${unicodeRegExp.source}.$_\\d]`)
export function parsePath(path: string): any {
  if (bailRE.test(path)) {
    return
  }
  const segments = path.split('.')
  return function (obj) {
    for (let i = 0; i < segments.length; i++) {
      if (!obj) return
      obj = obj[segments[i]]
    }
    return obj
  }
}
/* globals MutationObserver */

import { noop } from 'shared/util'
import { handleError } from './error'
import { isIE, isIOS, isNative } from './env'

export let isUsingMicroTask = false

const callbacks: Array<Function> = []
let pending = false

function flushCallbacks() {
  pending = false
  const copies = callbacks.slice(0)
  callbacks.length = 0
  for (let i = 0; i < copies.length; i++) {
    copies[i]()
  }
}

// Here we have async deferring wrappers using microtasks.
// In 2.5 we used (macro) tasks (in combination with microtasks).
// However, it has subtle problems when state is changed right before repaint
// (e.g. #6813, out-in transitions).
// Also, using (macro) tasks in event handler would cause some weird behaviors
// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
// So we now use microtasks everywhere, again.
// A major drawback of this tradeoff is that there are some scenarios
// where microtasks have too high a priority and fire in between supposedly
// sequential events (e.g. #4521, #6690, which have workarounds)
// or even between bubbling of the same event (#6566).
let timerFunc

// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
  const p = Promise.resolve()
  timerFunc = () => {
    p.then(flushCallbacks)
    // In problematic UIWebViews, Promise.then doesn't completely break, but
    // it can get stuck in a weird state where callbacks are pushed into the
    // microtask queue but the queue isn't being flushed, until the browser
    // needs to do some other work, e.g. handle a timer. Therefore we can
    // "force" the microtask queue to be flushed by adding an empty timer.
    if (isIOS) setTimeout(noop)
  }
  isUsingMicroTask = true
} else if (
  !isIE &&
  typeof MutationObserver !== 'undefined' &&
  (isNative(MutationObserver) ||
    // PhantomJS and iOS 7.x
    MutationObserver.toString() === '[object MutationObserverConstructor]')
) {
  // Use MutationObserver where native Promise is not available,
  // e.g. PhantomJS, iOS7, Android 4.4
  // (#6466 MutationObserver is unreliable in IE11)
  let counter = 1
  const observer = new MutationObserver(flushCallbacks)
  const textNode = document.createTextNode(String(counter))
  observer.observe(textNode, {
    characterData: true
  })
  timerFunc = () => {
    counter = (counter + 1) % 2
    textNode.data = String(counter)
  }
  isUsingMicroTask = true
} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
  // Fallback to setImmediate.
  // Technically it leverages the (macro) task queue,
  // but it is still a better choice than setTimeout.
  timerFunc = () => {
    setImmediate(flushCallbacks)
  }
} else {
  // Fallback to setTimeout.
  timerFunc = () => {
    setTimeout(flushCallbacks, 0)
  }
}

export function nextTick(): Promise<void>
export function nextTick<T>(this: T, cb: (this: T, ...args: any[]) => any): void
export function nextTick<T>(cb: (this: T, ...args: any[]) => any, ctx: T): void
/**
 * @internal
 */
export function nextTick(cb?: (...args: any[]) => any, ctx?: object) {
  let _resolve
  callbacks.push(() => {
    if (cb) {
      try {
        cb.call(ctx)
      } catch (e: any) {
        handleError(e, ctx, 'nextTick')
      }
    } else if (_resolve) {
      _resolve(ctx)
    }
  })
  if (!pending) {
    pending = true
    timerFunc()
  }
  // $flow-disable-line
  if (!cb && typeof Promise !== 'undefined') {
    return new Promise(resolve => {
      _resolve = resolve
    })
  }
}
import config from '../config'
import { warn } from './debug'
import { set } from '../observer/index'
import { unicodeRegExp } from './lang'
import { nativeWatch, hasSymbol } from './env'
import { isArray, isFunction } from 'shared/util'

import { ASSET_TYPES, LIFECYCLE_HOOKS } from 'shared/constants'

import {
  extend,
  hasOwn,
  camelize,
  toRawType,
  capitalize,
  isBuiltInTag,
  isPlainObject
} from 'shared/util'
import type { Component } from 'types/component'
import type { ComponentOptions } from 'types/options'

/**
 * Option overwriting strategies are functions that handle
 * how to merge a parent option value and a child option
 * value into the final value.
 */
const strats = config.optionMergeStrategies

/**
 * Options with restrictions
 */
if (__DEV__) {
  strats.el = strats.propsData = function (
    parent: any,
    child: any,
    vm: any,
    key: any
  ) {
    if (!vm) {
      warn(
        `option "${key}" can only be used during instance ` +
          'creation with the `new` keyword.'
      )
    }
    return defaultStrat(parent, child)
  }
}

/**
 * Helper that recursively merges two data objects together.
 */
function mergeData(
  to: Record<string | symbol, any>,
  from: Record<string | symbol, any> | null,
  recursive = true
): Record<PropertyKey, any> {
  if (!from) return to
  let key, toVal, fromVal

  const keys = hasSymbol
    ? (Reflect.ownKeys(from) as string[])
    : Object.keys(from)

  for (let i = 0; i < keys.length; i++) {
    key = keys[i]
    // in case the object is already observed...
    if (key === '__ob__') continue
    toVal = to[key]
    fromVal = from[key]
    if (!recursive || !hasOwn(to, key)) {
      set(to, key, fromVal)
    } else if (
      toVal !== fromVal &&
      isPlainObject(toVal) &&
      isPlainObject(fromVal)
    ) {
      mergeData(toVal, fromVal)
    }
  }
  return to
}

/**
 * Data
 */
export function mergeDataOrFn(
  parentVal: any,
  childVal: any,
  vm?: Component
): Function | null {
  if (!vm) {
    // in a Vue.extend merge, both should be functions
    if (!childVal) {
      return parentVal
    }
    if (!parentVal) {
      return childVal
    }
    // when parentVal & childVal are both present,
    // we need to return a function that returns the
    // merged result of both functions... no need to
    // check if parentVal is a function here because
    // it has to be a function to pass previous merges.
    return function mergedDataFn() {
      return mergeData(
        isFunction(childVal) ? childVal.call(this, this) : childVal,
        isFunction(parentVal) ? parentVal.call(this, this) : parentVal
      )
    }
  } else {
    return function mergedInstanceDataFn() {
      // instance merge
      const instanceData = isFunction(childVal)
        ? childVal.call(vm, vm)
        : childVal
      const defaultData = isFunction(parentVal)
        ? parentVal.call(vm, vm)
        : parentVal
      if (instanceData) {
        return mergeData(instanceData, defaultData)
      } else {
        return defaultData
      }
    }
  }
}

strats.data = function (
  parentVal: any,
  childVal: any,
  vm?: Component
): Function | null {
  if (!vm) {
    if (childVal && typeof childVal !== 'function') {
      __DEV__ &&
        warn(
          'The "data" option should be a function ' +
            'that returns a per-instance value in component ' +
            'definitions.',
          vm
        )

      return parentVal
    }
    return mergeDataOrFn(parentVal, childVal)
  }

  return mergeDataOrFn(parentVal, childVal, vm)
}

/**
 * Hooks and props are merged as arrays.
 */
export function mergeLifecycleHook(
  parentVal: Array<Function> | null,
  childVal: Function | Array<Function> | null
): Array<Function> | null {
  const res = childVal
    ? parentVal
      ? parentVal.concat(childVal)
      : isArray(childVal)
      ? childVal
      : [childVal]
    : parentVal
  return res ? dedupeHooks(res) : res
}

function dedupeHooks(hooks: any) {
  const res: Array<any> = []
  for (let i = 0; i < hooks.length; i++) {
    if (res.indexOf(hooks[i]) === -1) {
      res.push(hooks[i])
    }
  }
  return res
}

LIFECYCLE_HOOKS.forEach(hook => {
  strats[hook] = mergeLifecycleHook
})

/**
 * Assets
 *
 * When a vm is present (instance creation), we need to do
 * a three-way merge between constructor options, instance
 * options and parent options.
 */
function mergeAssets(
  parentVal: Object | null,
  childVal: Object | null,
  vm: Component | null,
  key: string
): Object {
  const res = Object.create(parentVal || null)
  if (childVal) {
    __DEV__ && assertObjectType(key, childVal, vm)
    return extend(res, childVal)
  } else {
    return res
  }
}

ASSET_TYPES.forEach(function (type) {
  strats[type + 's'] = mergeAssets
})

/**
 * Watchers.
 *
 * Watchers hashes should not overwrite one
 * another, so we merge them as arrays.
 */
strats.watch = function (
  parentVal: Record<string, any> | null,
  childVal: Record<string, any> | null,
  vm: Component | null,
  key: string
): Object | null {
  // work around Firefox's Object.prototype.watch...
  //@ts-expect-error work around
  if (parentVal === nativeWatch) parentVal = undefined
  //@ts-expect-error work around
  if (childVal === nativeWatch) childVal = undefined
  /* istanbul ignore if */
  if (!childVal) return Object.create(parentVal || null)
  if (__DEV__) {
    assertObjectType(key, childVal, vm)
  }
  if (!parentVal) return childVal
  const ret: Record<string, any> = {}
  extend(ret, parentVal)
  for (const key in childVal) {
    let parent = ret[key]
    const child = childVal[key]
    if (parent && !isArray(parent)) {
      parent = [parent]
    }
    ret[key] = parent ? parent.concat(child) : isArray(child) ? child : [child]
  }
  return ret
}

/**
 * Other object hashes.
 */
strats.props =
  strats.methods =
  strats.inject =
  strats.computed =
    function (
      parentVal: Object | null,
      childVal: Object | null,
      vm: Component | null,
      key: string
    ): Object | null {
      if (childVal && __DEV__) {
        assertObjectType(key, childVal, vm)
      }
      if (!parentVal) return childVal
      const ret = Object.create(null)
      extend(ret, parentVal)
      if (childVal) extend(ret, childVal)
      return ret
    }

strats.provide = function (parentVal: Object | null, childVal: Object | null) {
  if (!parentVal) return childVal
  return function () {
    const ret = Object.create(null)
    mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal)
    if (childVal) {
      mergeData(
        ret,
        isFunction(childVal) ? childVal.call(this) : childVal,
        false // non-recursive
      )
    }
    return ret
  }
}

/**
 * Default strategy.
 */
const defaultStrat = function (parentVal: any, childVal: any): any {
  return childVal === undefined ? parentVal : childVal
}

/**
 * Validate component names
 */
function checkComponents(options: Record<string, any>) {
  for (const key in options.components) {
    validateComponentName(key)
  }
}

export function validateComponentName(name: string) {
  if (
    !new RegExp(`^[a-zA-Z][\\-\\.0-9_${unicodeRegExp.source}]*$`).test(name)
  ) {
    warn(
      'Invalid component name: "' +
        name +
        '". Component names ' +
        'should conform to valid custom element name in html5 specification.'
    )
  }
  if (isBuiltInTag(name) || config.isReservedTag(name)) {
    warn(
      'Do not use built-in or reserved HTML elements as component ' +
        'id: ' +
        name
    )
  }
}

/**
 * Ensure all props option syntax are normalized into the
 * Object-based format.
 */
function normalizeProps(options: Record<string, any>, vm?: Component | null) {
  const props = options.props
  if (!props) return
  const res: Record<string, any> = {}
  let i, val, name
  if (isArray(props)) {
    i = props.length
    while (i--) {
      val = props[i]
      if (typeof val === 'string') {
        name = camelize(val)
        res[name] = { type: null }
      } else if (__DEV__) {
        warn('props must be strings when using array syntax.')
      }
    }
  } else if (isPlainObject(props)) {
    for (const key in props) {
      val = props[key]
      name = camelize(key)
      res[name] = isPlainObject(val) ? val : { type: val }
    }
  } else if (__DEV__) {
    warn(
      `Invalid value for option "props": expected an Array or an Object, ` +
        `but got ${toRawType(props)}.`,
      vm
    )
  }
  options.props = res
}

/**
 * Normalize all injections into Object-based format
 */
function normalizeInject(options: Record<string, any>, vm?: Component | null) {
  const inject = options.inject
  if (!inject) return
  const normalized: Record<string, any> = (options.inject = {})
  if (isArray(inject)) {
    for (let i = 0; i < inject.length; i++) {
      normalized[inject[i]] = { from: inject[i] }
    }
  } else if (isPlainObject(inject)) {
    for (const key in inject) {
      const val = inject[key]
      normalized[key] = isPlainObject(val)
        ? extend({ from: key }, val)
        : { from: val }
    }
  } else if (__DEV__) {
    warn(
      `Invalid value for option "inject": expected an Array or an Object, ` +
        `but got ${toRawType(inject)}.`,
      vm
    )
  }
}

/**
 * Normalize raw function directives into object format.
 */
function normalizeDirectives(options: Record<string, any>) {
  const dirs = options.directives
  if (dirs) {
    for (const key in dirs) {
      const def = dirs[key]
      if (isFunction(def)) {
        dirs[key] = { bind: def, update: def }
      }
    }
  }
}

function assertObjectType(name: string, value: any, vm: Component | null) {
  if (!isPlainObject(value)) {
    warn(
      `Invalid value for option "${name}": expected an Object, ` +
        `but got ${toRawType(value)}.`,
      vm
    )
  }
}

/**
 * Merge two option objects into a new one.
 * Core utility used in both instantiation and inheritance.
 */
export function mergeOptions(
  parent: Record<string, any>,
  child: Record<string, any>,
  vm?: Component | null
): ComponentOptions {
  if (__DEV__) {
    checkComponents(child)
  }

  if (isFunction(child)) {
    // @ts-expect-error
    child = child.options
  }

  normalizeProps(child, vm)
  normalizeInject(child, vm)
  normalizeDirectives(child)

  // Apply extends and mixins on the child options,
  // but only if it is a raw options object that isn't
  // the result of another mergeOptions call.
  // Only merged options has the _base property.
  if (!child._base) {
    if (child.extends) {
      parent = mergeOptions(parent, child.extends, vm)
    }
    if (child.mixins) {
      for (let i = 0, l = child.mixins.length; i < l; i++) {
        parent = mergeOptions(parent, child.mixins[i], vm)
      }
    }
  }

  const options: ComponentOptions = {} as any
  let key
  for (key in parent) {
    mergeField(key)
  }
  for (key in child) {
    if (!hasOwn(parent, key)) {
      mergeField(key)
    }
  }
  function mergeField(key: any) {
    const strat = strats[key] || defaultStrat
    options[key] = strat(parent[key], child[key], vm, key)
  }
  return options
}

/**
 * Resolve an asset.
 * This function is used because child instances need access
 * to assets defined in its ancestor chain.
 */
export function resolveAsset(
  options: Record<string, any>,
  type: string,
  id: string,
  warnMissing?: boolean
): any {
  /* istanbul ignore if */
  if (typeof id !== 'string') {
    return
  }
  const assets = options[type]
  // check local registration variations first
  if (hasOwn(assets, id)) return assets[id]
  const camelizedId = camelize(id)
  if (hasOwn(assets, camelizedId)) return assets[camelizedId]
  const PascalCaseId = capitalize(camelizedId)
  if (hasOwn(assets, PascalCaseId)) return assets[PascalCaseId]
  // fallback to prototype chain
  const res = assets[id] || assets[camelizedId] || assets[PascalCaseId]
  if (__DEV__ && warnMissing && !res) {
    warn('Failed to resolve ' + type.slice(0, -1) + ': ' + id)
  }
  return res
}
import { inBrowser } from './env'

export let mark
export let measure

if (__DEV__) {
  const perf = inBrowser && window.performance
  /* istanbul ignore if */
  if (
    perf &&
    // @ts-ignore
    perf.mark &&
    // @ts-ignore
    perf.measure &&
    // @ts-ignore
    perf.clearMarks &&
    // @ts-ignore
    perf.clearMeasures
  ) {
    mark = tag => perf.mark(tag)
    measure = (name, startTag, endTag) => {
      perf.measure(name, startTag, endTag)
      perf.clearMarks(startTag)
      perf.clearMarks(endTag)
      // perf.clearMeasures(name)
    }
  }
}
import { warn } from './debug'
import { observe, toggleObserving, shouldObserve } from '../observer/index'
import {
  hasOwn,
  isArray,
  isObject,
  isFunction,
  toRawType,
  hyphenate,
  capitalize,
  isPlainObject
} from 'shared/util'
import type { Component } from 'types/component'

type PropOptions = {
  type: Function | Array<Function> | null
  default: any
  required?: boolean
  validator?: Function
}

export function validateProp(
  key: string,
  propOptions: Object,
  propsData: Object,
  vm?: Component
): any {
  const prop = propOptions[key]
  const absent = !hasOwn(propsData, key)
  let value = propsData[key]
  // boolean casting
  const booleanIndex = getTypeIndex(Boolean, prop.type)
  if (booleanIndex > -1) {
    if (absent && !hasOwn(prop, 'default')) {
      value = false
    } else if (value === '' || value === hyphenate(key)) {
      // only cast empty string / same name to boolean if
      // boolean has higher priority
      const stringIndex = getTypeIndex(String, prop.type)
      if (stringIndex < 0 || booleanIndex < stringIndex) {
        value = true
      }
    }
  }
  // check default value
  if (value === undefined) {
    value = getPropDefaultValue(vm, prop, key)
    // since the default value is a fresh copy,
    // make sure to observe it.
    const prevShouldObserve = shouldObserve
    toggleObserving(true)
    observe(value)
    toggleObserving(prevShouldObserve)
  }
  if (__DEV__) {
    assertProp(prop, key, value, vm, absent)
  }
  return value
}

/**
 * Get the default value of a prop.
 */
function getPropDefaultValue(
  vm: Component | undefined,
  prop: PropOptions,
  key: string
): any {
  // no default, return undefined
  if (!hasOwn(prop, 'default')) {
    return undefined
  }
  const def = prop.default
  // warn against non-factory defaults for Object & Array
  if (__DEV__ && isObject(def)) {
    warn(
      'Invalid default value for prop "' +
        key +
        '": ' +
        'Props with type Object/Array must use a factory function ' +
        'to return the default value.',
      vm
    )
  }
  // the raw prop value was also undefined from previous render,
  // return previous default value to avoid unnecessary watcher trigger
  if (
    vm &&
    vm.$options.propsData &&
    vm.$options.propsData[key] === undefined &&
    vm._props[key] !== undefined
  ) {
    return vm._props[key]
  }
  // call factory function for non-Function types
  // a value is Function if its prototype is function even across different execution context
  return isFunction(def) && getType(prop.type) !== 'Function'
    ? def.call(vm)
    : def
}

/**
 * Assert whether a prop is valid.
 */
function assertProp(
  prop: PropOptions,
  name: string,
  value: any,
  vm?: Component,
  absent?: boolean
) {
  if (prop.required && absent) {
    warn('Missing required prop: "' + name + '"', vm)
    return
  }
  if (value == null && !prop.required) {
    return
  }
  let type = prop.type
  let valid = !type || (type as any) === true
  const expectedTypes: string[] = []
  if (type) {
    if (!isArray(type)) {
      type = [type]
    }
    for (let i = 0; i < type.length && !valid; i++) {
      const assertedType = assertType(value, type[i], vm)
      expectedTypes.push(assertedType.expectedType || '')
      valid = assertedType.valid
    }
  }

  const haveExpectedTypes = expectedTypes.some(t => t)
  if (!valid && haveExpectedTypes) {
    warn(getInvalidTypeMessage(name, value, expectedTypes), vm)
    return
  }
  const validator = prop.validator
  if (validator) {
    if (!validator(value)) {
      warn(
        'Invalid prop: custom validator check failed for prop "' + name + '".',
        vm
      )
    }
  }
}

const simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/

function assertType(
  value: any,
  type: Function,
  vm?: Component
): {
  valid: boolean
  expectedType: string
} {
  let valid
  const expectedType = getType(type)
  if (simpleCheckRE.test(expectedType)) {
    const t = typeof value
    valid = t === expectedType.toLowerCase()
    // for primitive wrapper objects
    if (!valid && t === 'object') {
      valid = value instanceof type
    }
  } else if (expectedType === 'Object') {
    valid = isPlainObject(value)
  } else if (expectedType === 'Array') {
    valid = isArray(value)
  } else {
    try {
      valid = value instanceof type
    } catch (e: any) {
      warn('Invalid prop type: "' + String(type) + '" is not a constructor', vm)
      valid = false
    }
  }
  return {
    valid,
    expectedType
  }
}

const functionTypeCheckRE = /^\s*function (\w+)/

/**
 * Use function string name to check built-in types,
 * because a simple equality check will fail when running
 * across different vms / iframes.
 */
function getType(fn) {
  const match = fn && fn.toString().match(functionTypeCheckRE)
  return match ? match[1] : ''
}

function isSameType(a, b) {
  return getType(a) === getType(b)
}

function getTypeIndex(type, expectedTypes): number {
  if (!isArray(expectedTypes)) {
    return isSameType(expectedTypes, type) ? 0 : -1
  }
  for (let i = 0, len = expectedTypes.length; i < len; i++) {
    if (isSameType(expectedTypes[i], type)) {
      return i
    }
  }
  return -1
}

function getInvalidTypeMessage(name, value, expectedTypes) {
  let message =
    `Invalid prop: type check failed for prop "${name}".` +
    ` Expected ${expectedTypes.map(capitalize).join(', ')}`
  const expectedType = expectedTypes[0]
  const receivedType = toRawType(value)
  // check if we need to specify expected value
  if (
    expectedTypes.length === 1 &&
    isExplicable(expectedType) &&
    isExplicable(typeof value) &&
    !isBoolean(expectedType, receivedType)
  ) {
    message += ` with value ${styleValue(value, expectedType)}`
  }
  message += `, got ${receivedType} `
  // check if we need to specify received value
  if (isExplicable(receivedType)) {
    message += `with value ${styleValue(value, receivedType)}.`
  }
  return message
}

function styleValue(value, type) {
  if (type === 'String') {
    return `"${value}"`
  } else if (type === 'Number') {
    return `${Number(value)}`
  } else {
    return `${value}`
  }
}

const EXPLICABLE_TYPES = ['string', 'number', 'boolean']
function isExplicable(value) {
  return EXPLICABLE_TYPES.some(elem => value.toLowerCase() === elem)
}

function isBoolean(...args) {
  return args.some(elem => elem.toLowerCase() === 'boolean')
}
import VNode from './vnode'
import { isArray } from 'core/util'
import { resolveConstructorOptions } from 'core/instance/init'
import { queueActivatedComponent } from 'core/observer/scheduler'
import { createFunctionalComponent } from './create-functional-component'

import { warn, isDef, isUndef, isTrue, isObject } from '../util/index'

import {
  resolveAsyncComponent,
  createAsyncPlaceholder,
  extractPropsFromVNodeData
} from './helpers/index'

import {
  callHook,
  activeInstance,
  updateChildComponent,
  activateChildComponent,
  deactivateChildComponent
} from '../instance/lifecycle'

import type {
  MountedComponentVNode,
  VNodeData,
  VNodeWithData
} from 'types/vnode'
import type { Component } from 'types/component'
import type { ComponentOptions, InternalComponentOptions } from 'types/options'

export function getComponentName(options: ComponentOptions) {
  return options.name || options.__name || options._componentTag
}

// inline hooks to be invoked on component VNodes during patch
const componentVNodeHooks = {
  init(vnode: VNodeWithData, hydrating: boolean): boolean | void {
    if (
      vnode.componentInstance &&
      !vnode.componentInstance._isDestroyed &&
      vnode.data.keepAlive
    ) {
      // kept-alive components, treat as a patch
      const mountedNode: any = vnode // work around flow
      componentVNodeHooks.prepatch(mountedNode, mountedNode)
    } else {
      const child = (vnode.componentInstance = createComponentInstanceForVnode(
        vnode,
        activeInstance
      ))
      child.$mount(hydrating ? vnode.elm : undefined, hydrating)
    }
  },

  prepatch(oldVnode: MountedComponentVNode, vnode: MountedComponentVNode) {
    const options = vnode.componentOptions
    const child = (vnode.componentInstance = oldVnode.componentInstance)
    updateChildComponent(
      child,
      options.propsData, // updated props
      options.listeners, // updated listeners
      vnode, // new parent vnode
      options.children // new children
    )
  },

  insert(vnode: MountedComponentVNode) {
    const { context, componentInstance } = vnode
    if (!componentInstance._isMounted) {
      componentInstance._isMounted = true
      callHook(componentInstance, 'mounted')
    }
    if (vnode.data.keepAlive) {
      if (context._isMounted) {
        // vue-router#1212
        // During updates, a kept-alive component's child components may
        // change, so directly walking the tree here may call activated hooks
        // on incorrect children. Instead we push them into a queue which will
        // be processed after the whole patch process ended.
        queueActivatedComponent(componentInstance)
      } else {
        activateChildComponent(componentInstance, true /* direct */)
      }
    }
  },

  destroy(vnode: MountedComponentVNode) {
    const { componentInstance } = vnode
    if (!componentInstance._isDestroyed) {
      if (!vnode.data.keepAlive) {
        componentInstance.$destroy()
      } else {
        deactivateChildComponent(componentInstance, true /* direct */)
      }
    }
  }
}

const hooksToMerge = Object.keys(componentVNodeHooks)

export function createComponent(
  Ctor: typeof Component | Function | ComponentOptions | void,
  data: VNodeData | undefined,
  context: Component,
  children?: Array<VNode>,
  tag?: string
): VNode | Array<VNode> | void {
  if (isUndef(Ctor)) {
    return
  }

  const baseCtor = context.$options._base

  // plain options object: turn it into a constructor
  if (isObject(Ctor)) {
    Ctor = baseCtor.extend(Ctor as typeof Component)
  }

  // if at this stage it's not a constructor or an async component factory,
  // reject.
  if (typeof Ctor !== 'function') {
    if (__DEV__) {
      warn(`Invalid Component definition: ${String(Ctor)}`, context)
    }
    return
  }

  // async component
  let asyncFactory
  // @ts-expect-error
  if (isUndef(Ctor.cid)) {
    asyncFactory = Ctor
    Ctor = resolveAsyncComponent(asyncFactory, baseCtor)
    if (Ctor === undefined) {
      // return a placeholder node for async component, which is rendered
      // as a comment node but preserves all the raw information for the node.
      // the information will be used for async server-rendering and hydration.
      return createAsyncPlaceholder(asyncFactory, data, context, children, tag)
    }
  }

  data = data || {}

  // resolve constructor options in case global mixins are applied after
  // component constructor creation
  resolveConstructorOptions(Ctor as typeof Component)

  // transform component v-model data into props & events
  if (isDef(data.model)) {
    // @ts-expect-error
    transformModel(Ctor.options, data)
  }

  // extract props
  // @ts-expect-error
  const propsData = extractPropsFromVNodeData(data, Ctor, tag)

  // functional component
  // @ts-expect-error
  if (isTrue(Ctor.options.functional)) {
    return createFunctionalComponent(
      Ctor as typeof Component,
      propsData,
      data,
      context,
      children
    )
  }

  // extract listeners, since these needs to be treated as
  // child component listeners instead of DOM listeners
  const listeners = data.on
  // replace with listeners with .native modifier
  // so it gets processed during parent component patch.
  data.on = data.nativeOn

  // @ts-expect-error
  if (isTrue(Ctor.options.abstract)) {
    // abstract components do not keep anything
    // other than props & listeners & slot

    // work around flow
    const slot = data.slot
    data = {}
    if (slot) {
      data.slot = slot
    }
  }

  // install component management hooks onto the placeholder node
  installComponentHooks(data)

  // return a placeholder vnode
  // @ts-expect-error
  const name = getComponentName(Ctor.options) || tag
  const vnode = new VNode(
    // @ts-expect-error
    `vue-component-${Ctor.cid}${name ? `-${name}` : ''}`,
    data,
    undefined,
    undefined,
    undefined,
    context,
    // @ts-expect-error
    { Ctor, propsData, listeners, tag, children },
    asyncFactory
  )

  return vnode
}

export function createComponentInstanceForVnode(
  // we know it's MountedComponentVNode but flow doesn't
  vnode: any,
  // activeInstance in lifecycle state
  parent?: any
): Component {
  const options: InternalComponentOptions = {
    _isComponent: true,
    _parentVnode: vnode,
    parent
  }
  // check inline-template render functions
  const inlineTemplate = vnode.data.inlineTemplate
  if (isDef(inlineTemplate)) {
    options.render = inlineTemplate.render
    options.staticRenderFns = inlineTemplate.staticRenderFns
  }
  return new vnode.componentOptions.Ctor(options)
}

function installComponentHooks(data: VNodeData) {
  const hooks = data.hook || (data.hook = {})
  for (let i = 0; i < hooksToMerge.length; i++) {
    const key = hooksToMerge[i]
    const existing = hooks[key]
    const toMerge = componentVNodeHooks[key]
    // @ts-expect-error
    if (existing !== toMerge && !(existing && existing._merged)) {
      hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge
    }
  }
}

function mergeHook(f1: any, f2: any): Function {
  const merged = (a, b) => {
    // flow complains about extra args which is why we use any
    f1(a, b)
    f2(a, b)
  }
  merged._merged = true
  return merged
}

// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel(options, data: any) {
  const prop = (options.model && options.model.prop) || 'value'
  const event = (options.model && options.model.event) || 'input'
  ;(data.attrs || (data.attrs = {}))[prop] = data.model.value
  const on = data.on || (data.on = {})
  const existing = on[event]
  const callback = data.model.callback
  if (isDef(existing)) {
    if (
      isArray(existing)
        ? existing.indexOf(callback) === -1
        : existing !== callback
    ) {
      on[event] = [callback].concat(existing)
    }
  } else {
    on[event] = callback
  }
}
import config from '../config'
import VNode, { createEmptyVNode } from './vnode'
import { createComponent } from './create-component'
import { traverse } from '../observer/traverse'

import {
  warn,
  isDef,
  isUndef,
  isArray,
  isTrue,
  isObject,
  isPrimitive,
  resolveAsset,
  isFunction
} from '../util/index'

import { normalizeChildren, simpleNormalizeChildren } from './helpers/index'
import type { Component } from 'types/component'
import type { VNodeData } from 'types/vnode'

const SIMPLE_NORMALIZE = 1
const ALWAYS_NORMALIZE = 2

// wrapper function for providing a more flexible interface
// without getting yelled at by flow
export function createElement(
  context: Component,
  tag: any,
  data: any,
  children: any,
  normalizationType: any,
  alwaysNormalize: boolean
): VNode | Array<VNode> {
  if (isArray(data) || isPrimitive(data)) {
    normalizationType = children
    children = data
    data = undefined
  }
  if (isTrue(alwaysNormalize)) {
    normalizationType = ALWAYS_NORMALIZE
  }
  return _createElement(context, tag, data, children, normalizationType)
}

export function _createElement(
  context: Component,
  tag?: string | Component | Function | Object,
  data?: VNodeData,
  children?: any,
  normalizationType?: number
): VNode | Array<VNode> {
  if (isDef(data) && isDef((data as any).__ob__)) {
    __DEV__ &&
      warn(
        `Avoid using observed data object as vnode data: ${JSON.stringify(
          data
        )}\n` + 'Always create fresh vnode data objects in each render!',
        context
      )
    return createEmptyVNode()
  }
  // object syntax in v-bind
  if (isDef(data) && isDef(data.is)) {
    tag = data.is
  }
  if (!tag) {
    // in case of component :is set to falsy value
    return createEmptyVNode()
  }
  // warn against non-primitive key
  if (__DEV__ && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
    warn(
      'Avoid using non-primitive value as key, ' +
        'use string/number value instead.',
      context
    )
  }
  // support single function children as default scoped slot
  if (isArray(children) && isFunction(children[0])) {
    data = data || {}
    data.scopedSlots = { default: children[0] }
    children.length = 0
  }
  if (normalizationType === ALWAYS_NORMALIZE) {
    children = normalizeChildren(children)
  } else if (normalizationType === SIMPLE_NORMALIZE) {
    children = simpleNormalizeChildren(children)
  }
  let vnode, ns
  if (typeof tag === 'string') {
    let Ctor
    ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag)
    if (config.isReservedTag(tag)) {
      // platform built-in elements
      if (
        __DEV__ &&
        isDef(data) &&
        isDef(data.nativeOn) &&
        data.tag !== 'component'
      ) {
        warn(
          `The .native modifier for v-on is only valid on components but it was used on <${tag}>.`,
          context
        )
      }
      vnode = new VNode(
        config.parsePlatformTagName(tag),
        data,
        children,
        undefined,
        undefined,
        context
      )
    } else if (
      (!data || !data.pre) &&
      isDef((Ctor = resolveAsset(context.$options, 'components', tag)))
    ) {
      // component
      vnode = createComponent(Ctor, data, context, children, tag)
    } else {
      // unknown or unlisted namespaced elements
      // check at runtime because it may get assigned a namespace when its
      // parent normalizes children
      vnode = new VNode(tag, data, children, undefined, undefined, context)
    }
  } else {
    // direct component options / constructor
    vnode = createComponent(tag as any, data, context, children)
  }
  if (isArray(vnode)) {
    return vnode
  } else if (isDef(vnode)) {
    if (isDef(ns)) applyNS(vnode, ns)
    if (isDef(data)) registerDeepBindings(data)
    return vnode
  } else {
    return createEmptyVNode()
  }
}

function applyNS(vnode, ns, force?: boolean) {
  vnode.ns = ns
  if (vnode.tag === 'foreignObject') {
    // use default namespace inside foreignObject
    ns = undefined
    force = true
  }
  if (isDef(vnode.children)) {
    for (let i = 0, l = vnode.children.length; i < l; i++) {
      const child = vnode.children[i]
      if (
        isDef(child.tag) &&
        (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))
      ) {
        applyNS(child, ns, force)
      }
    }
  }
}

// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings(data) {
  if (isObject(data.style)) {
    traverse(data.style)
  }
  if (isObject(data.class)) {
    traverse(data.class)
  }
}
import VNode, { cloneVNode } from './vnode'
import { createElement } from './create-element'
import { resolveInject } from '../instance/inject'
import { normalizeChildren } from '../vdom/helpers/normalize-children'
import { resolveSlots } from '../instance/render-helpers/resolve-slots'
import { normalizeScopedSlots } from '../vdom/helpers/normalize-scoped-slots'
import { installRenderHelpers } from '../instance/render-helpers/index'

import {
  isDef,
  isTrue,
  hasOwn,
  isArray,
  camelize,
  emptyObject,
  validateProp
} from '../util/index'
import type { Component } from 'types/component'
import type { VNodeData } from 'types/vnode'

export function FunctionalRenderContext(
  data: VNodeData,
  props: Object,
  children: Array<VNode> | undefined,
  parent: Component,
  Ctor: typeof Component
) {
  const options = Ctor.options
  // ensure the createElement function in functional components
  // gets a unique context - this is necessary for correct named slot check
  let contextVm
  if (hasOwn(parent, '_uid')) {
    contextVm = Object.create(parent)
    contextVm._original = parent
  } else {
    // the context vm passed in is a functional context as well.
    // in this case we want to make sure we are able to get a hold to the
    // real context instance.
    contextVm = parent
    // @ts-ignore
    parent = parent._original
  }
  const isCompiled = isTrue(options._compiled)
  const needNormalization = !isCompiled

  this.data = data
  this.props = props
  this.children = children
  this.parent = parent
  this.listeners = data.on || emptyObject
  this.injections = resolveInject(options.inject, parent)
  this.slots = () => {
    if (!this.$slots) {
      normalizeScopedSlots(
        parent,
        data.scopedSlots,
        (this.$slots = resolveSlots(children, parent))
      )
    }
    return this.$slots
  }

  Object.defineProperty(this, 'scopedSlots', {
    enumerable: true,
    get() {
      return normalizeScopedSlots(parent, data.scopedSlots, this.slots())
    }
  } as any)

  // support for compiled functional template
  if (isCompiled) {
    // exposing $options for renderStatic()
    this.$options = options
    // pre-resolve slots for renderSlot()
    this.$slots = this.slots()
    this.$scopedSlots = normalizeScopedSlots(
      parent,
      data.scopedSlots,
      this.$slots
    )
  }

  if (options._scopeId) {
    this._c = (a, b, c, d) => {
      const vnode = createElement(contextVm, a, b, c, d, needNormalization)
      if (vnode && !isArray(vnode)) {
        vnode.fnScopeId = options._scopeId
        vnode.fnContext = parent
      }
      return vnode
    }
  } else {
    this._c = (a, b, c, d) =>
      createElement(contextVm, a, b, c, d, needNormalization)
  }
}

installRenderHelpers(FunctionalRenderContext.prototype)

export function createFunctionalComponent(
  Ctor: typeof Component,
  propsData: Object | undefined,
  data: VNodeData,
  contextVm: Component,
  children?: Array<VNode>
): VNode | Array<VNode> | void {
  const options = Ctor.options
  const props = {}
  const propOptions = options.props
  if (isDef(propOptions)) {
    for (const key in propOptions) {
      props[key] = validateProp(key, propOptions, propsData || emptyObject)
    }
  } else {
    if (isDef(data.attrs)) mergeProps(props, data.attrs)
    if (isDef(data.props)) mergeProps(props, data.props)
  }

  const renderContext = new FunctionalRenderContext(
    data,
    props,
    children,
    contextVm,
    Ctor
  )

  const vnode = options.render.call(null, renderContext._c, renderContext)

  if (vnode instanceof VNode) {
    return cloneAndMarkFunctionalResult(
      vnode,
      data,
      renderContext.parent,
      options,
      renderContext
    )
  } else if (isArray(vnode)) {
    const vnodes = normalizeChildren(vnode) || []
    const res = new Array(vnodes.length)
    for (let i = 0; i < vnodes.length; i++) {
      res[i] = cloneAndMarkFunctionalResult(
        vnodes[i],
        data,
        renderContext.parent,
        options,
        renderContext
      )
    }
    return res
  }
}

function cloneAndMarkFunctionalResult(
  vnode,
  data,
  contextVm,
  options,
  renderContext
) {
  // #7817 clone node before setting fnContext, otherwise if the node is reused
  // (e.g. it was from a cached normal slot) the fnContext causes named slots
  // that should not be matched to match.
  const clone = cloneVNode(vnode)
  clone.fnContext = contextVm
  clone.fnOptions = options
  if (__DEV__) {
    ;(clone.devtoolsMeta = clone.devtoolsMeta || ({} as any)).renderContext =
      renderContext
  }
  if (data.slot) {
    ;(clone.data || (clone.data = {})).slot = data.slot
  }
  return clone
}

function mergeProps(to, from) {
  for (const key in from) {
    to[camelize(key)] = from[key]
  }
}
import {
  tip,
  hasOwn,
  isDef,
  isUndef,
  hyphenate,
  formatComponentName
} from 'core/util/index'
import type { Component } from 'types/component'
import type { VNodeData } from 'types/vnode'

export function extractPropsFromVNodeData(
  data: VNodeData,
  Ctor: typeof Component,
  tag?: string
): object | undefined {
  // we are only extracting raw values here.
  // validation and default values are handled in the child
  // component itself.
  const propOptions = Ctor.options.props
  if (isUndef(propOptions)) {
    return
  }
  const res = {}
  const { attrs, props } = data
  if (isDef(attrs) || isDef(props)) {
    for (const key in propOptions) {
      const altKey = hyphenate(key)
      if (__DEV__) {
        const keyInLowerCase = key.toLowerCase()
        if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
          tip(
            `Prop "${keyInLowerCase}" is passed to component ` +
              `${formatComponentName(
                // @ts-expect-error tag is string
                tag || Ctor
              )}, but the declared prop name is` +
              ` "${key}". ` +
              `Note that HTML attributes are case-insensitive and camelCased ` +
              `props need to use their kebab-case equivalents when using in-DOM ` +
              `templates. You should probably use "${altKey}" instead of "${key}".`
          )
        }
      }
      checkProp(res, props, key, altKey, true) ||
        checkProp(res, attrs, key, altKey, false)
    }
  }
  return res
}

function checkProp(
  res: Object,
  hash: Object | undefined,
  key: string,
  altKey: string,
  preserve: boolean
): boolean {
  if (isDef(hash)) {
    if (hasOwn(hash, key)) {
      res[key] = hash[key]
      if (!preserve) {
        delete hash[key]
      }
      return true
    } else if (hasOwn(hash, altKey)) {
      res[key] = hash[altKey]
      if (!preserve) {
        delete hash[altKey]
      }
      return true
    }
  }
  return false
}
import { isDef, isArray } from 'shared/util'
import VNode from '../vnode'
import { isAsyncPlaceholder } from './is-async-placeholder'

export function getFirstComponentChild(
  children?: Array<VNode>
): VNode | undefined {
  if (isArray(children)) {
    for (let i = 0; i < children.length; i++) {
      const c = children[i]
      if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
        return c
      }
    }
  }
}
export * from './merge-hook'
export * from './extract-props'
export * from './update-listeners'
export * from './normalize-children'
export * from './resolve-async-component'
export * from './get-first-component-child'
export * from './is-async-placeholder'
import VNode from '../vnode'

export function isAsyncPlaceholder(node: VNode): boolean {
  // @ts-expect-error not really boolean type
  return node.isComment && node.asyncFactory
}
import VNode from '../vnode'
import { createFnInvoker } from './update-listeners'
import { remove, isDef, isUndef, isTrue } from 'shared/util'

export function mergeVNodeHook(
  def: Record<string, any>,
  hookKey: string,
  hook: Function
) {
  if (def instanceof VNode) {
    def = def.data!.hook || (def.data!.hook = {})
  }
  let invoker
  const oldHook = def[hookKey]

  function wrappedHook() {
    hook.apply(this, arguments)
    // important: remove merged hook to ensure it's called only once
    // and prevent memory leak
    remove(invoker.fns, wrappedHook)
  }

  if (isUndef(oldHook)) {
    // no existing hook
    invoker = createFnInvoker([wrappedHook])
  } else {
    /* istanbul ignore if */
    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
      // already a merged invoker
      invoker = oldHook
      invoker.fns.push(wrappedHook)
    } else {
      // existing plain hook
      invoker = createFnInvoker([oldHook, wrappedHook])
    }
  }

  invoker.merged = true
  def[hookKey] = invoker
}
import VNode, { createTextVNode } from 'core/vdom/vnode'
import {
  isFalse,
  isTrue,
  isArray,
  isDef,
  isUndef,
  isPrimitive
} from 'shared/util'

// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:

// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
export function simpleNormalizeChildren(children: any) {
  for (let i = 0; i < children.length; i++) {
    if (isArray(children[i])) {
      return Array.prototype.concat.apply([], children)
    }
  }
  return children
}

// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
export function normalizeChildren(children: any): Array<VNode> | undefined {
  return isPrimitive(children)
    ? [createTextVNode(children)]
    : isArray(children)
    ? normalizeArrayChildren(children)
    : undefined
}

function isTextNode(node): boolean {
  return isDef(node) && isDef(node.text) && isFalse(node.isComment)
}

function normalizeArrayChildren(
  children: any,
  nestedIndex?: string
): Array<VNode> {
  const res: VNode[] = []
  let i, c, lastIndex, last
  for (i = 0; i < children.length; i++) {
    c = children[i]
    if (isUndef(c) || typeof c === 'boolean') continue
    lastIndex = res.length - 1
    last = res[lastIndex]
    //  nested
    if (isArray(c)) {
      if (c.length > 0) {
        c = normalizeArrayChildren(c, `${nestedIndex || ''}_${i}`)
        // merge adjacent text nodes
        if (isTextNode(c[0]) && isTextNode(last)) {
          res[lastIndex] = createTextVNode(last.text + c[0].text)
          c.shift()
        }
        res.push.apply(res, c)
      }
    } else if (isPrimitive(c)) {
      if (isTextNode(last)) {
        // merge adjacent text nodes
        // this is necessary for SSR hydration because text nodes are
        // essentially merged when rendered to HTML strings
        res[lastIndex] = createTextVNode(last.text + c)
      } else if (c !== '') {
        // convert primitive to vnode
        res.push(createTextVNode(c))
      }
    } else {
      if (isTextNode(c) && isTextNode(last)) {
        // merge adjacent text nodes
        res[lastIndex] = createTextVNode(last.text + c.text)
      } else {
        // default key for nested array children (likely generated by v-for)
        if (
          isTrue(children._isVList) &&
          isDef(c.tag) &&
          isUndef(c.key) &&
          isDef(nestedIndex)
        ) {
          c.key = `__vlist${nestedIndex}_${i}__`
        }
        res.push(c)
      }
    }
  }
  return res
}
import { def } from 'core/util/lang'
import { normalizeChildren } from 'core/vdom/helpers/normalize-children'
import { emptyObject, isArray } from 'shared/util'
import { isAsyncPlaceholder } from './is-async-placeholder'
import type VNode from '../vnode'
import { Component } from 'types/component'
import { currentInstance, setCurrentInstance } from 'v3/currentInstance'

export function normalizeScopedSlots(
  ownerVm: Component,
  scopedSlots: { [key: string]: Function } | undefined,
  normalSlots: { [key: string]: VNode[] },
  prevScopedSlots?: { [key: string]: Function }
): any {
  let res
  const hasNormalSlots = Object.keys(normalSlots).length > 0
  const isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots
  const key = scopedSlots && scopedSlots.$key
  if (!scopedSlots) {
    res = {}
  } else if (scopedSlots._normalized) {
    // fast path 1: child component re-render only, parent did not change
    return scopedSlots._normalized
  } else if (
    isStable &&
    prevScopedSlots &&
    prevScopedSlots !== emptyObject &&
    key === prevScopedSlots.$key &&
    !hasNormalSlots &&
    !prevScopedSlots.$hasNormal
  ) {
    // fast path 2: stable scoped slots w/ no normal slots to proxy,
    // only need to normalize once
    return prevScopedSlots
  } else {
    res = {}
    for (const key in scopedSlots) {
      if (scopedSlots[key] && key[0] !== '$') {
        res[key] = normalizeScopedSlot(
          ownerVm,
          normalSlots,
          key,
          scopedSlots[key]
        )
      }
    }
  }
  // expose normal slots on scopedSlots
  for (const key in normalSlots) {
    if (!(key in res)) {
      res[key] = proxyNormalSlot(normalSlots, key)
    }
  }
  // avoriaz seems to mock a non-extensible $scopedSlots object
  // and when that is passed down this would cause an error
  if (scopedSlots && Object.isExtensible(scopedSlots)) {
    scopedSlots._normalized = res
  }
  def(res, '$stable', isStable)
  def(res, '$key', key)
  def(res, '$hasNormal', hasNormalSlots)
  return res
}

function normalizeScopedSlot(vm, normalSlots, key, fn) {
  const normalized = function () {
    const cur = currentInstance
    setCurrentInstance(vm)
    let res = arguments.length ? fn.apply(null, arguments) : fn({})
    res =
      res && typeof res === 'object' && !isArray(res)
        ? [res] // single vnode
        : normalizeChildren(res)
    const vnode: VNode | null = res && res[0]
    setCurrentInstance(cur)
    return res &&
      (!vnode ||
        (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
      ? undefined
      : res
  }
  // this is a slot using the new v-slot syntax without scope. although it is
  // compiled as a scoped slot, render fn users would expect it to be present
  // on this.$slots because the usage is semantically a normal slot.
  if (fn.proxy) {
    Object.defineProperty(normalSlots, key, {
      get: normalized,
      enumerable: true,
      configurable: true
    })
  }
  return normalized
}

function proxyNormalSlot(slots, key) {
  return () => slots[key]
}
import {
  warn,
  once,
  isDef,
  isUndef,
  isTrue,
  isObject,
  hasSymbol,
  isPromise,
  remove
} from 'core/util/index'

import VNode, { createEmptyVNode } from 'core/vdom/vnode'
import { currentRenderingInstance } from 'core/instance/render'
import type { VNodeData } from 'types/vnode'
import type { Component } from 'types/component'

function ensureCtor(comp: any, base) {
  if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
    comp = comp.default
  }
  return isObject(comp) ? base.extend(comp) : comp
}

export function createAsyncPlaceholder(
  factory: Function,
  data: VNodeData | undefined,
  context: Component,
  children: Array<VNode> | undefined,
  tag?: string
): VNode {
  const node = createEmptyVNode()
  node.asyncFactory = factory
  node.asyncMeta = { data, context, children, tag }
  return node
}

export function resolveAsyncComponent(
  factory: { (...args: any[]): any; [keye: string]: any },
  baseCtor: typeof Component
): typeof Component | void {
  if (isTrue(factory.error) && isDef(factory.errorComp)) {
    return factory.errorComp
  }

  if (isDef(factory.resolved)) {
    return factory.resolved
  }

  const owner = currentRenderingInstance
  if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
    // already pending
    factory.owners.push(owner)
  }

  if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
    return factory.loadingComp
  }

  if (owner && !isDef(factory.owners)) {
    const owners = (factory.owners = [owner])
    let sync = true
    let timerLoading: number | null = null
    let timerTimeout: number | null = null

    owner.$on('hook:destroyed', () => remove(owners, owner))

    const forceRender = (renderCompleted: boolean) => {
      for (let i = 0, l = owners.length; i < l; i++) {
        owners[i].$forceUpdate()
      }

      if (renderCompleted) {
        owners.length = 0
        if (timerLoading !== null) {
          clearTimeout(timerLoading)
          timerLoading = null
        }
        if (timerTimeout !== null) {
          clearTimeout(timerTimeout)
          timerTimeout = null
        }
      }
    }

    const resolve = once((res: Object | Component) => {
      // cache resolved
      factory.resolved = ensureCtor(res, baseCtor)
      // invoke callbacks only if this is not a synchronous resolve
      // (async resolves are shimmed as synchronous during SSR)
      if (!sync) {
        forceRender(true)
      } else {
        owners.length = 0
      }
    })

    const reject = once(reason => {
      __DEV__ &&
        warn(
          `Failed to resolve async component: ${String(factory)}` +
            (reason ? `\nReason: ${reason}` : '')
        )
      if (isDef(factory.errorComp)) {
        factory.error = true
        forceRender(true)
      }
    })

    const res = factory(resolve, reject)

    if (isObject(res)) {
      if (isPromise(res)) {
        // () => Promise
        if (isUndef(factory.resolved)) {
          res.then(resolve, reject)
        }
      } else if (isPromise(res.component)) {
        res.component.then(resolve, reject)

        if (isDef(res.error)) {
          factory.errorComp = ensureCtor(res.error, baseCtor)
        }

        if (isDef(res.loading)) {
          factory.loadingComp = ensureCtor(res.loading, baseCtor)
          if (res.delay === 0) {
            factory.loading = true
          } else {
            // @ts-expect-error NodeJS timeout type
            timerLoading = setTimeout(() => {
              timerLoading = null
              if (isUndef(factory.resolved) && isUndef(factory.error)) {
                factory.loading = true
                forceRender(false)
              }
            }, res.delay || 200)
          }
        }

        if (isDef(res.timeout)) {
          // @ts-expect-error NodeJS timeout type
          timerTimeout = setTimeout(() => {
            timerTimeout = null
            if (isUndef(factory.resolved)) {
              reject(__DEV__ ? `timeout (${res.timeout}ms)` : null)
            }
          }, res.timeout)
        }
      }
    }

    sync = false
    // return in case resolved synchronously
    return factory.loading ? factory.loadingComp : factory.resolved
  }
}
import { warn, invokeWithErrorHandling } from 'core/util/index'
import { cached, isUndef, isTrue, isArray } from 'shared/util'
import type { Component } from 'types/component'

const normalizeEvent = cached(
  (
    name: string
  ): {
    name: string
    once: boolean
    capture: boolean
    passive: boolean
    handler?: Function
    params?: Array<any>
  } => {
    const passive = name.charAt(0) === '&'
    name = passive ? name.slice(1) : name
    const once = name.charAt(0) === '~' // Prefixed last, checked first
    name = once ? name.slice(1) : name
    const capture = name.charAt(0) === '!'
    name = capture ? name.slice(1) : name
    return {
      name,
      once,
      capture,
      passive
    }
  }
)

export function createFnInvoker(
  fns: Function | Array<Function>,
  vm?: Component
): Function {
  function invoker() {
    const fns = invoker.fns
    if (isArray(fns)) {
      const cloned = fns.slice()
      for (let i = 0; i < cloned.length; i++) {
        invokeWithErrorHandling(
          cloned[i],
          null,
          arguments as any,
          vm,
          `v-on handler`
        )
      }
    } else {
      // return handler return value for single handlers
      return invokeWithErrorHandling(
        fns,
        null,
        arguments as any,
        vm,
        `v-on handler`
      )
    }
  }
  invoker.fns = fns
  return invoker
}

export function updateListeners(
  on: Object,
  oldOn: Object,
  add: Function,
  remove: Function,
  createOnceHandler: Function,
  vm: Component
) {
  let name, cur, old, event
  for (name in on) {
    cur = on[name]
    old = oldOn[name]
    event = normalizeEvent(name)
    if (isUndef(cur)) {
      __DEV__ &&
        warn(
          `Invalid handler for event "${event.name}": got ` + String(cur),
          vm
        )
    } else if (isUndef(old)) {
      if (isUndef(cur.fns)) {
        cur = on[name] = createFnInvoker(cur, vm)
      }
      if (isTrue(event.once)) {
        cur = on[name] = createOnceHandler(event.name, cur, event.capture)
      }
      add(event.name, cur, event.capture, event.passive, event.params)
    } else if (cur !== old) {
      old.fns = cur
      on[name] = old
    }
  }
  for (name in oldOn) {
    if (isUndef(on[name])) {
      event = normalizeEvent(name)
      remove(event.name, oldOn[name], event.capture)
    }
  }
}
import { emptyNode } from 'core/vdom/patch'
import { resolveAsset, handleError } from 'core/util/index'
import { mergeVNodeHook } from 'core/vdom/helpers/index'
import type { VNodeDirective, VNodeWithData } from 'types/vnode'
import type { Component } from 'types/component'

export default {
  create: updateDirectives,
  update: updateDirectives,
  destroy: function unbindDirectives(vnode: VNodeWithData) {
    // @ts-expect-error emptyNode is not VNodeWithData
    updateDirectives(vnode, emptyNode)
  }
}

function updateDirectives(oldVnode: VNodeWithData, vnode: VNodeWithData) {
  if (oldVnode.data.directives || vnode.data.directives) {
    _update(oldVnode, vnode)
  }
}

function _update(oldVnode, vnode) {
  const isCreate = oldVnode === emptyNode
  const isDestroy = vnode === emptyNode
  const oldDirs = normalizeDirectives(
    oldVnode.data.directives,
    oldVnode.context
  )
  const newDirs = normalizeDirectives(vnode.data.directives, vnode.context)

  const dirsWithInsert: any[] = []
  const dirsWithPostpatch: any[] = []

  let key, oldDir, dir
  for (key in newDirs) {
    oldDir = oldDirs[key]
    dir = newDirs[key]
    if (!oldDir) {
      // new directive, bind
      callHook(dir, 'bind', vnode, oldVnode)
      if (dir.def && dir.def.inserted) {
        dirsWithInsert.push(dir)
      }
    } else {
      // existing directive, update
      dir.oldValue = oldDir.value
      dir.oldArg = oldDir.arg
      callHook(dir, 'update', vnode, oldVnode)
      if (dir.def && dir.def.componentUpdated) {
        dirsWithPostpatch.push(dir)
      }
    }
  }

  if (dirsWithInsert.length) {
    const callInsert = () => {
      for (let i = 0; i < dirsWithInsert.length; i++) {
        callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode)
      }
    }
    if (isCreate) {
      mergeVNodeHook(vnode, 'insert', callInsert)
    } else {
      callInsert()
    }
  }

  if (dirsWithPostpatch.length) {
    mergeVNodeHook(vnode, 'postpatch', () => {
      for (let i = 0; i < dirsWithPostpatch.length; i++) {
        callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode)
      }
    })
  }

  if (!isCreate) {
    for (key in oldDirs) {
      if (!newDirs[key]) {
        // no longer present, unbind
        callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy)
      }
    }
  }
}

const emptyModifiers = Object.create(null)

function normalizeDirectives(
  dirs: Array<VNodeDirective> | undefined,
  vm: Component
): { [key: string]: VNodeDirective } {
  const res = Object.create(null)
  if (!dirs) {
    // $flow-disable-line
    return res
  }
  let i: number, dir: VNodeDirective
  for (i = 0; i < dirs.length; i++) {
    dir = dirs[i]
    if (!dir.modifiers) {
      // $flow-disable-line
      dir.modifiers = emptyModifiers
    }
    res[getRawDirName(dir)] = dir
    if (vm._setupState && vm._setupState.__sfc) {
      const setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name)
      if (typeof setupDef === 'function') {
        dir.def = {
          bind: setupDef,
          update: setupDef,
        }
      } else {
        dir.def = setupDef
      }
    }
    dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true)
  }
  // $flow-disable-line
  return res
}

function getRawDirName(dir: VNodeDirective): string {
  return (
    dir.rawName || `${dir.name}.${Object.keys(dir.modifiers || {}).join('.')}`
  )
}

function callHook(dir, hook, vnode, oldVnode, isDestroy?: any) {
  const fn = dir.def && dir.def[hook]
  if (fn) {
    try {
      fn(vnode.elm, dir, vnode, oldVnode, isDestroy)
    } catch (e: any) {
      handleError(e, vnode.context, `directive ${dir.name} ${hook} hook`)
    }
  }
}
import directives from './directives'
import ref from './template-ref'

export default [ref, directives]
import {
  remove,
  isDef,
  hasOwn,
  isArray,
  isFunction,
  invokeWithErrorHandling,
  warn
} from 'core/util'
import type { VNodeWithData } from 'types/vnode'
import { Component } from 'types/component'
import { isRef } from 'v3'

export default {
  create(_: any, vnode: VNodeWithData) {
    registerRef(vnode)
  },
  update(oldVnode: VNodeWithData, vnode: VNodeWithData) {
    if (oldVnode.data.ref !== vnode.data.ref) {
      registerRef(oldVnode, true)
      registerRef(vnode)
    }
  },
  destroy(vnode: VNodeWithData) {
    registerRef(vnode, true)
  }
}

export function registerRef(vnode: VNodeWithData, isRemoval?: boolean) {
  const ref = vnode.data.ref
  if (!isDef(ref)) return

  const vm = vnode.context
  const refValue = vnode.componentInstance || vnode.elm
  const value = isRemoval ? null : refValue
  const $refsValue = isRemoval ? undefined : refValue

  if (isFunction(ref)) {
    invokeWithErrorHandling(ref, vm, [value], vm, `template ref function`)
    return
  }

  const isFor = vnode.data.refInFor
  const _isString = typeof ref === 'string' || typeof ref === 'number'
  const _isRef = isRef(ref)
  const refs = vm.$refs

  if (_isString || _isRef) {
    if (isFor) {
      const existing = _isString ? refs[ref] : ref.value
      if (isRemoval) {
        isArray(existing) && remove(existing, refValue)
      } else {
        if (!isArray(existing)) {
          if (_isString) {
            refs[ref] = [refValue]
            setSetupRef(vm, ref, refs[ref])
          } else {
            ref.value = [refValue]
          }
        } else if (!existing.includes(refValue)) {
          existing.push(refValue)
        }
      }
    } else if (_isString) {
      if (isRemoval && refs[ref] !== refValue) {
        return
      }
      refs[ref] = $refsValue
      setSetupRef(vm, ref, value)
    } else if (_isRef) {
      if (isRemoval && ref.value !== refValue) {
        return
      }
      ref.value = value
    } else if (__DEV__) {
      warn(`Invalid template ref type: ${typeof ref}`)
    }
  }
}

function setSetupRef(
  { _setupState }: Component,
  key: string | number,
  val: any
) {
  if (_setupState && hasOwn(_setupState, key as string)) {
    if (isRef(_setupState[key])) {
      _setupState[key].value = val
    } else {
      _setupState[key] = val
    }
  }
}
/**
 * Virtual DOM patching algorithm based on Snabbdom by
 * Simon Friis Vindum (@paldepind)
 * Licensed under the MIT License
 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
 *
 * modified by Evan You (@yyx990803)
 *
 * Not type-checking this because this file is perf-critical and the cost
 * of making flow understand it is not worth it.
 */

import VNode, { cloneVNode } from './vnode'
import config from '../config'
import { SSR_ATTR } from 'shared/constants'
import { registerRef } from './modules/template-ref'
import { traverse } from '../observer/traverse'
import { activeInstance } from '../instance/lifecycle'
import { isTextInputType } from 'web/util/element'

import {
  warn,
  isDef,
  isUndef,
  isTrue,
  isArray,
  makeMap,
  isRegExp,
  isPrimitive
} from '../util/index'

export const emptyNode = new VNode('', {}, [])

const hooks = ['create', 'activate', 'update', 'remove', 'destroy']

function sameVnode(a, b) {
  return (
    a.key === b.key &&
    a.asyncFactory === b.asyncFactory &&
    ((a.tag === b.tag &&
      a.isComment === b.isComment &&
      isDef(a.data) === isDef(b.data) &&
      sameInputType(a, b)) ||
      (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error)))
  )
}

function sameInputType(a, b) {
  if (a.tag !== 'input') return true
  let i
  const typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type
  const typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type
  return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB))
}

function createKeyToOldIdx(children, beginIdx, endIdx) {
  let i, key
  const map = {}
  for (i = beginIdx; i <= endIdx; ++i) {
    key = children[i].key
    if (isDef(key)) map[key] = i
  }
  return map
}

export function createPatchFunction(backend) {
  let i, j
  const cbs: any = {}

  const { modules, nodeOps } = backend

  for (i = 0; i < hooks.length; ++i) {
    cbs[hooks[i]] = []
    for (j = 0; j < modules.length; ++j) {
      if (isDef(modules[j][hooks[i]])) {
        cbs[hooks[i]].push(modules[j][hooks[i]])
      }
    }
  }

  function emptyNodeAt(elm) {
    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)
  }

  function createRmCb(childElm, listeners) {
    function remove() {
      if (--remove.listeners === 0) {
        removeNode(childElm)
      }
    }
    remove.listeners = listeners
    return remove
  }

  function removeNode(el) {
    const parent = nodeOps.parentNode(el)
    // element may have already been removed due to v-html / v-text
    if (isDef(parent)) {
      nodeOps.removeChild(parent, el)
    }
  }

  function isUnknownElement(vnode, inVPre) {
    return (
      !inVPre &&
      !vnode.ns &&
      !(
        config.ignoredElements.length &&
        config.ignoredElements.some(ignore => {
          return isRegExp(ignore)
            ? ignore.test(vnode.tag)
            : ignore === vnode.tag
        })
      ) &&
      config.isUnknownElement(vnode.tag)
    )
  }

  let creatingElmInVPre = 0

  function createElm(
    vnode,
    insertedVnodeQueue,
    parentElm?: any,
    refElm?: any,
    nested?: any,
    ownerArray?: any,
    index?: any
  ) {
    if (isDef(vnode.elm) && isDef(ownerArray)) {
      // This vnode was used in a previous render!
      // now it's used as a new node, overwriting its elm would cause
      // potential patch errors down the road when it's used as an insertion
      // reference node. Instead, we clone the node on-demand before creating
      // associated DOM element for it.
      vnode = ownerArray[index] = cloneVNode(vnode)
    }

    vnode.isRootInsert = !nested // for transition enter check
    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
      return
    }

    const data = vnode.data
    const children = vnode.children
    const tag = vnode.tag
    if (isDef(tag)) {
      if (__DEV__) {
        if (data && data.pre) {
          creatingElmInVPre++
        }
        if (isUnknownElement(vnode, creatingElmInVPre)) {
          warn(
            'Unknown custom element: <' +
              tag +
              '> - did you ' +
              'register the component correctly? For recursive components, ' +
              'make sure to provide the "name" option.',
            vnode.context
          )
        }
      }

      vnode.elm = vnode.ns
        ? nodeOps.createElementNS(vnode.ns, tag)
        : nodeOps.createElement(tag, vnode)
      setScope(vnode)

      createChildren(vnode, children, insertedVnodeQueue)
      if (isDef(data)) {
        invokeCreateHooks(vnode, insertedVnodeQueue)
      }
      insert(parentElm, vnode.elm, refElm)

      if (__DEV__ && data && data.pre) {
        creatingElmInVPre--
      }
    } else if (isTrue(vnode.isComment)) {
      vnode.elm = nodeOps.createComment(vnode.text)
      insert(parentElm, vnode.elm, refElm)
    } else {
      vnode.elm = nodeOps.createTextNode(vnode.text)
      insert(parentElm, vnode.elm, refElm)
    }
  }

  function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
    let i = vnode.data
    if (isDef(i)) {
      const isReactivated = isDef(vnode.componentInstance) && i.keepAlive
      if (isDef((i = i.hook)) && isDef((i = i.init))) {
        i(vnode, false /* hydrating */)
      }
      // after calling the init hook, if the vnode is a child component
      // it should've created a child instance and mounted it. the child
      // component also has set the placeholder vnode's elm.
      // in that case we can just return the element and be done.
      if (isDef(vnode.componentInstance)) {
        initComponent(vnode, insertedVnodeQueue)
        insert(parentElm, vnode.elm, refElm)
        if (isTrue(isReactivated)) {
          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm)
        }
        return true
      }
    }
  }

  function initComponent(vnode, insertedVnodeQueue) {
    if (isDef(vnode.data.pendingInsert)) {
      insertedVnodeQueue.push.apply(
        insertedVnodeQueue,
        vnode.data.pendingInsert
      )
      vnode.data.pendingInsert = null
    }
    vnode.elm = vnode.componentInstance.$el
    if (isPatchable(vnode)) {
      invokeCreateHooks(vnode, insertedVnodeQueue)
      setScope(vnode)
    } else {
      // empty component root.
      // skip all element-related modules except for ref (#3455)
      registerRef(vnode)
      // make sure to invoke the insert hook
      insertedVnodeQueue.push(vnode)
    }
  }

  function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
    let i
    // hack for #4339: a reactivated component with inner transition
    // does not trigger because the inner node's created hooks are not called
    // again. It's not ideal to involve module-specific logic in here but
    // there doesn't seem to be a better way to do it.
    let innerNode = vnode
    while (innerNode.componentInstance) {
      innerNode = innerNode.componentInstance._vnode
      if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
        for (i = 0; i < cbs.activate.length; ++i) {
          cbs.activate[i](emptyNode, innerNode)
        }
        insertedVnodeQueue.push(innerNode)
        break
      }
    }
    // unlike a newly created component,
    // a reactivated keep-alive component doesn't insert itself
    insert(parentElm, vnode.elm, refElm)
  }

  function insert(parent, elm, ref) {
    if (isDef(parent)) {
      if (isDef(ref)) {
        if (nodeOps.parentNode(ref) === parent) {
          nodeOps.insertBefore(parent, elm, ref)
        }
      } else {
        nodeOps.appendChild(parent, elm)
      }
    }
  }

  function createChildren(vnode, children, insertedVnodeQueue) {
    if (isArray(children)) {
      if (__DEV__) {
        checkDuplicateKeys(children)
      }
      for (let i = 0; i < children.length; ++i) {
        createElm(
          children[i],
          insertedVnodeQueue,
          vnode.elm,
          null,
          true,
          children,
          i
        )
      }
    } else if (isPrimitive(vnode.text)) {
      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)))
    }
  }

  function isPatchable(vnode) {
    while (vnode.componentInstance) {
      vnode = vnode.componentInstance._vnode
    }
    return isDef(vnode.tag)
  }

  function invokeCreateHooks(vnode, insertedVnodeQueue) {
    for (let i = 0; i < cbs.create.length; ++i) {
      cbs.create[i](emptyNode, vnode)
    }
    i = vnode.data.hook // Reuse variable
    if (isDef(i)) {
      if (isDef(i.create)) i.create(emptyNode, vnode)
      if (isDef(i.insert)) insertedVnodeQueue.push(vnode)
    }
  }

  // set scope id attribute for scoped CSS.
  // this is implemented as a special case to avoid the overhead
  // of going through the normal attribute patching process.
  function setScope(vnode) {
    let i
    if (isDef((i = vnode.fnScopeId))) {
      nodeOps.setStyleScope(vnode.elm, i)
    } else {
      let ancestor = vnode
      while (ancestor) {
        if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
          nodeOps.setStyleScope(vnode.elm, i)
        }
        ancestor = ancestor.parent
      }
    }
    // for slot content they should also get the scopeId from the host instance.
    if (
      isDef((i = activeInstance)) &&
      i !== vnode.context &&
      i !== vnode.fnContext &&
      isDef((i = i.$options._scopeId))
    ) {
      nodeOps.setStyleScope(vnode.elm, i)
    }
  }

  function addVnodes(
    parentElm,
    refElm,
    vnodes,
    startIdx,
    endIdx,
    insertedVnodeQueue
  ) {
    for (; startIdx <= endIdx; ++startIdx) {
      createElm(
        vnodes[startIdx],
        insertedVnodeQueue,
        parentElm,
        refElm,
        false,
        vnodes,
        startIdx
      )
    }
  }

  function invokeDestroyHook(vnode) {
    let i, j
    const data = vnode.data
    if (isDef(data)) {
      if (isDef((i = data.hook)) && isDef((i = i.destroy))) i(vnode)
      for (i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode)
    }
    if (isDef((i = vnode.children))) {
      for (j = 0; j < vnode.children.length; ++j) {
        invokeDestroyHook(vnode.children[j])
      }
    }
  }

  function removeVnodes(vnodes, startIdx, endIdx) {
    for (; startIdx <= endIdx; ++startIdx) {
      const ch = vnodes[startIdx]
      if (isDef(ch)) {
        if (isDef(ch.tag)) {
          removeAndInvokeRemoveHook(ch)
          invokeDestroyHook(ch)
        } else {
          // Text node
          removeNode(ch.elm)
        }
      }
    }
  }

  function removeAndInvokeRemoveHook(vnode, rm?: any) {
    if (isDef(rm) || isDef(vnode.data)) {
      let i
      const listeners = cbs.remove.length + 1
      if (isDef(rm)) {
        // we have a recursively passed down rm callback
        // increase the listeners count
        rm.listeners += listeners
      } else {
        // directly removing
        rm = createRmCb(vnode.elm, listeners)
      }
      // recursively invoke hooks on child component root node
      if (
        isDef((i = vnode.componentInstance)) &&
        isDef((i = i._vnode)) &&
        isDef(i.data)
      ) {
        removeAndInvokeRemoveHook(i, rm)
      }
      for (i = 0; i < cbs.remove.length; ++i) {
        cbs.remove[i](vnode, rm)
      }
      if (isDef((i = vnode.data.hook)) && isDef((i = i.remove))) {
        i(vnode, rm)
      } else {
        rm()
      }
    } else {
      removeNode(vnode.elm)
    }
  }

  function updateChildren(
    parentElm,
    oldCh,
    newCh,
    insertedVnodeQueue,
    removeOnly
  ) {
    let oldStartIdx = 0
    let newStartIdx = 0
    let oldEndIdx = oldCh.length - 1
    let oldStartVnode = oldCh[0]
    let oldEndVnode = oldCh[oldEndIdx]
    let newEndIdx = newCh.length - 1
    let newStartVnode = newCh[0]
    let newEndVnode = newCh[newEndIdx]
    let oldKeyToIdx, idxInOld, vnodeToMove, refElm

    // removeOnly is a special flag used only by <transition-group>
    // to ensure removed elements stay in correct relative positions
    // during leaving transitions
    const canMove = !removeOnly

    if (__DEV__) {
      checkDuplicateKeys(newCh)
    }

    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
      if (isUndef(oldStartVnode)) {
        oldStartVnode = oldCh[++oldStartIdx] // Vnode has been moved left
      } else if (isUndef(oldEndVnode)) {
        oldEndVnode = oldCh[--oldEndIdx]
      } else if (sameVnode(oldStartVnode, newStartVnode)) {
        patchVnode(
          oldStartVnode,
          newStartVnode,
          insertedVnodeQueue,
          newCh,
          newStartIdx
        )
        oldStartVnode = oldCh[++oldStartIdx]
        newStartVnode = newCh[++newStartIdx]
      } else if (sameVnode(oldEndVnode, newEndVnode)) {
        patchVnode(
          oldEndVnode,
          newEndVnode,
          insertedVnodeQueue,
          newCh,
          newEndIdx
        )
        oldEndVnode = oldCh[--oldEndIdx]
        newEndVnode = newCh[--newEndIdx]
      } else if (sameVnode(oldStartVnode, newEndVnode)) {
        // Vnode moved right
        patchVnode(
          oldStartVnode,
          newEndVnode,
          insertedVnodeQueue,
          newCh,
          newEndIdx
        )
        canMove &&
          nodeOps.insertBefore(
            parentElm,
            oldStartVnode.elm,
            nodeOps.nextSibling(oldEndVnode.elm)
          )
        oldStartVnode = oldCh[++oldStartIdx]
        newEndVnode = newCh[--newEndIdx]
      } else if (sameVnode(oldEndVnode, newStartVnode)) {
        // Vnode moved left
        patchVnode(
          oldEndVnode,
          newStartVnode,
          insertedVnodeQueue,
          newCh,
          newStartIdx
        )
        canMove &&
          nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm)
        oldEndVnode = oldCh[--oldEndIdx]
        newStartVnode = newCh[++newStartIdx]
      } else {
        if (isUndef(oldKeyToIdx))
          oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx)
        idxInOld = isDef(newStartVnode.key)
          ? oldKeyToIdx[newStartVnode.key]
          : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx)
        if (isUndef(idxInOld)) {
          // New element
          createElm(
            newStartVnode,
            insertedVnodeQueue,
            parentElm,
            oldStartVnode.elm,
            false,
            newCh,
            newStartIdx
          )
        } else {
          vnodeToMove = oldCh[idxInOld]
          if (sameVnode(vnodeToMove, newStartVnode)) {
            patchVnode(
              vnodeToMove,
              newStartVnode,
              insertedVnodeQueue,
              newCh,
              newStartIdx
            )
            oldCh[idxInOld] = undefined
            canMove &&
              nodeOps.insertBefore(
                parentElm,
                vnodeToMove.elm,
                oldStartVnode.elm
              )
          } else {
            // same key but different element. treat as new element
            createElm(
              newStartVnode,
              insertedVnodeQueue,
              parentElm,
              oldStartVnode.elm,
              false,
              newCh,
              newStartIdx
            )
          }
        }
        newStartVnode = newCh[++newStartIdx]
      }
    }
    if (oldStartIdx > oldEndIdx) {
      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm
      addVnodes(
        parentElm,
        refElm,
        newCh,
        newStartIdx,
        newEndIdx,
        insertedVnodeQueue
      )
    } else if (newStartIdx > newEndIdx) {
      removeVnodes(oldCh, oldStartIdx, oldEndIdx)
    }
  }

  function checkDuplicateKeys(children) {
    const seenKeys = {}
    for (let i = 0; i < children.length; i++) {
      const vnode = children[i]
      const key = vnode.key
      if (isDef(key)) {
        if (seenKeys[key]) {
          warn(
            `Duplicate keys detected: '${key}'. This may cause an update error.`,
            vnode.context
          )
        } else {
          seenKeys[key] = true
        }
      }
    }
  }

  function findIdxInOld(node, oldCh, start, end) {
    for (let i = start; i < end; i++) {
      const c = oldCh[i]
      if (isDef(c) && sameVnode(node, c)) return i
    }
  }

  function patchVnode(
    oldVnode,
    vnode,
    insertedVnodeQueue,
    ownerArray,
    index,
    removeOnly?: any
  ) {
    if (oldVnode === vnode) {
      return
    }

    if (isDef(vnode.elm) && isDef(ownerArray)) {
      // clone reused vnode
      vnode = ownerArray[index] = cloneVNode(vnode)
    }

    const elm = (vnode.elm = oldVnode.elm)

    if (isTrue(oldVnode.isAsyncPlaceholder)) {
      if (isDef(vnode.asyncFactory.resolved)) {
        hydrate(oldVnode.elm, vnode, insertedVnodeQueue)
      } else {
        vnode.isAsyncPlaceholder = true
      }
      return
    }

    // reuse element for static trees.
    // note we only do this if the vnode is cloned -
    // if the new node is not cloned it means the render functions have been
    // reset by the hot-reload-api and we need to do a proper re-render.
    if (
      isTrue(vnode.isStatic) &&
      isTrue(oldVnode.isStatic) &&
      vnode.key === oldVnode.key &&
      (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))
    ) {
      vnode.componentInstance = oldVnode.componentInstance
      return
    }

    let i
    const data = vnode.data
    if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
      i(oldVnode, vnode)
    }

    const oldCh = oldVnode.children
    const ch = vnode.children
    if (isDef(data) && isPatchable(vnode)) {
      for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode)
      if (isDef((i = data.hook)) && isDef((i = i.update))) i(oldVnode, vnode)
    }
    if (isUndef(vnode.text)) {
      if (isDef(oldCh) && isDef(ch)) {
        if (oldCh !== ch)
          updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly)
      } else if (isDef(ch)) {
        if (__DEV__) {
          checkDuplicateKeys(ch)
        }
        if (isDef(oldVnode.text)) nodeOps.setTextContent(elm, '')
        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue)
      } else if (isDef(oldCh)) {
        removeVnodes(oldCh, 0, oldCh.length - 1)
      } else if (isDef(oldVnode.text)) {
        nodeOps.setTextContent(elm, '')
      }
    } else if (oldVnode.text !== vnode.text) {
      nodeOps.setTextContent(elm, vnode.text)
    }
    if (isDef(data)) {
      if (isDef((i = data.hook)) && isDef((i = i.postpatch))) i(oldVnode, vnode)
    }
  }

  function invokeInsertHook(vnode, queue, initial) {
    // delay insert hooks for component root nodes, invoke them after the
    // element is really inserted
    if (isTrue(initial) && isDef(vnode.parent)) {
      vnode.parent.data.pendingInsert = queue
    } else {
      for (let i = 0; i < queue.length; ++i) {
        queue[i].data.hook.insert(queue[i])
      }
    }
  }

  let hydrationBailed = false
  // list of modules that can skip create hook during hydration because they
  // are already rendered on the client or has no need for initialization
  // Note: style is excluded because it relies on initial clone for future
  // deep updates (#7063).
  const isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key')

  // Note: this is a browser-only function so we can assume elms are DOM nodes.
  function hydrate(elm, vnode, insertedVnodeQueue, inVPre?: boolean) {
    let i
    const { tag, data, children } = vnode
    inVPre = inVPre || (data && data.pre)
    vnode.elm = elm

    if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
      vnode.isAsyncPlaceholder = true
      return true
    }
    // assert node match
    if (__DEV__) {
      if (!assertNodeMatch(elm, vnode, inVPre)) {
        return false
      }
    }
    if (isDef(data)) {
      if (isDef((i = data.hook)) && isDef((i = i.init)))
        i(vnode, true /* hydrating */)
      if (isDef((i = vnode.componentInstance))) {
        // child component. it should have hydrated its own tree.
        initComponent(vnode, insertedVnodeQueue)
        return true
      }
    }
    if (isDef(tag)) {
      if (isDef(children)) {
        // empty element, allow client to pick up and populate children
        if (!elm.hasChildNodes()) {
          createChildren(vnode, children, insertedVnodeQueue)
        } else {
          // v-html and domProps: innerHTML
          if (
            isDef((i = data)) &&
            isDef((i = i.domProps)) &&
            isDef((i = i.innerHTML))
          ) {
            if (i !== elm.innerHTML) {
              /* istanbul ignore if */
              if (
                __DEV__ &&
                typeof console !== 'undefined' &&
                !hydrationBailed
              ) {
                hydrationBailed = true
                console.warn('Parent: ', elm)
                console.warn('server innerHTML: ', i)
                console.warn('client innerHTML: ', elm.innerHTML)
              }
              return false
            }
          } else {
            // iterate and compare children lists
            let childrenMatch = true
            let childNode = elm.firstChild
            for (let i = 0; i < children.length; i++) {
              if (
                !childNode ||
                !hydrate(childNode, children[i], insertedVnodeQueue, inVPre)
              ) {
                childrenMatch = false
                break
              }
              childNode = childNode.nextSibling
            }
            // if childNode is not null, it means the actual childNodes list is
            // longer than the virtual children list.
            if (!childrenMatch || childNode) {
              /* istanbul ignore if */
              if (
                __DEV__ &&
                typeof console !== 'undefined' &&
                !hydrationBailed
              ) {
                hydrationBailed = true
                console.warn('Parent: ', elm)
                console.warn(
                  'Mismatching childNodes vs. VNodes: ',
                  elm.childNodes,
                  children
                )
              }
              return false
            }
          }
        }
      }
      if (isDef(data)) {
        let fullInvoke = false
        for (const key in data) {
          if (!isRenderedModule(key)) {
            fullInvoke = true
            invokeCreateHooks(vnode, insertedVnodeQueue)
            break
          }
        }
        if (!fullInvoke && data['class']) {
          // ensure collecting deps for deep class bindings for future updates
          traverse(data['class'])
        }
      }
    } else if (elm.data !== vnode.text) {
      elm.data = vnode.text
    }
    return true
  }

  function assertNodeMatch(node, vnode, inVPre) {
    if (isDef(vnode.tag)) {
      return (
        vnode.tag.indexOf('vue-component') === 0 ||
        (!isUnknownElement(vnode, inVPre) &&
          vnode.tag.toLowerCase() ===
            (node.tagName && node.tagName.toLowerCase()))
      )
    } else {
      return node.nodeType === (vnode.isComment ? 8 : 3)
    }
  }

  return function patch(oldVnode, vnode, hydrating, removeOnly) {
    if (isUndef(vnode)) {
      if (isDef(oldVnode)) invokeDestroyHook(oldVnode)
      return
    }

    let isInitialPatch = false
    const insertedVnodeQueue: any[] = []

    if (isUndef(oldVnode)) {
      // empty mount (likely as component), create new root element
      isInitialPatch = true
      createElm(vnode, insertedVnodeQueue)
    } else {
      const isRealElement = isDef(oldVnode.nodeType)
      if (!isRealElement && sameVnode(oldVnode, vnode)) {
        // patch existing root node
        patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly)
      } else {
        if (isRealElement) {
          // mounting to a real element
          // check if this is server-rendered content and if we can perform
          // a successful hydration.
          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
            oldVnode.removeAttribute(SSR_ATTR)
            hydrating = true
          }
          if (isTrue(hydrating)) {
            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
              invokeInsertHook(vnode, insertedVnodeQueue, true)
              return oldVnode
            } else if (__DEV__) {
              warn(
                'The client-side rendered virtual DOM tree is not matching ' +
                  'server-rendered content. This is likely caused by incorrect ' +
                  'HTML markup, for example nesting block-level elements inside ' +
                  '<p>, or missing <tbody>. Bailing hydration and performing ' +
                  'full client-side render.'
              )
            }
          }
          // either not server-rendered, or hydration failed.
          // create an empty node and replace it
          oldVnode = emptyNodeAt(oldVnode)
        }

        // replacing existing element
        const oldElm = oldVnode.elm
        const parentElm = nodeOps.parentNode(oldElm)

        // create new node
        createElm(
          vnode,
          insertedVnodeQueue,
          // extremely rare edge case: do not insert if old element is in a
          // leaving transition. Only happens when combining transition +
          // keep-alive + HOCs. (#4590)
          oldElm._leaveCb ? null : parentElm,
          nodeOps.nextSibling(oldElm)
        )

        // update parent placeholder node element, recursively
        if (isDef(vnode.parent)) {
          let ancestor = vnode.parent
          const patchable = isPatchable(vnode)
          while (ancestor) {
            for (let i = 0; i < cbs.destroy.length; ++i) {
              cbs.destroy[i](ancestor)
            }
            ancestor.elm = vnode.elm
            if (patchable) {
              for (let i = 0; i < cbs.create.length; ++i) {
                cbs.create[i](emptyNode, ancestor)
              }
              // #6513
              // invoke insert hooks that may have been merged by create hooks.
              // e.g. for directives that uses the "inserted" hook.
              const insert = ancestor.data.hook.insert
              if (insert.merged) {
                // start at index 1 to avoid re-invoking component mounted hook
                for (let i = 1; i < insert.fns.length; i++) {
                  insert.fns[i]()
                }
              }
            } else {
              registerRef(ancestor)
            }
            ancestor = ancestor.parent
          }
        }

        // destroy old node
        if (isDef(parentElm)) {
          removeVnodes([oldVnode], 0, 0)
        } else if (isDef(oldVnode.tag)) {
          invokeDestroyHook(oldVnode)
        }
      }
    }

    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch)
    return vnode.elm
  }
}
import type { Component } from 'types/component'
import type { ComponentOptions } from 'types/options'
import type { VNodeComponentOptions, VNodeData } from 'types/vnode'

/**
 * @internal
 */
export default class VNode {
  tag?: string
  data: VNodeData | undefined
  children?: Array<VNode> | null
  text?: string
  elm: Node | undefined
  ns?: string
  context?: Component // rendered in this component's scope
  key: string | number | undefined
  componentOptions?: VNodeComponentOptions
  componentInstance?: Component // component instance
  parent: VNode | undefined | null // component placeholder node

  // strictly internal
  raw: boolean // contains raw HTML? (server only)
  isStatic: boolean // hoisted static node
  isRootInsert: boolean // necessary for enter transition check
  isComment: boolean // empty comment placeholder?
  isCloned: boolean // is a cloned node?
  isOnce: boolean // is a v-once node?
  asyncFactory?: Function // async component factory function
  asyncMeta: Object | void
  isAsyncPlaceholder: boolean
  ssrContext?: Object | void
  fnContext: Component | void // real context vm for functional nodes
  fnOptions?: ComponentOptions | null // for SSR caching
  devtoolsMeta?: Object | null // used to store functional render context for devtools
  fnScopeId?: string | null // functional scope id support
  isComponentRootElement?: boolean | null // for SSR directives

  constructor(
    tag?: string,
    data?: VNodeData,
    children?: Array<VNode> | null,
    text?: string,
    elm?: Node,
    context?: Component,
    componentOptions?: VNodeComponentOptions,
    asyncFactory?: Function
  ) {
    this.tag = tag
    this.data = data
    this.children = children
    this.text = text
    this.elm = elm
    this.ns = undefined
    this.context = context
    this.fnContext = undefined
    this.fnOptions = undefined
    this.fnScopeId = undefined
    this.key = data && data.key
    this.componentOptions = componentOptions
    this.componentInstance = undefined
    this.parent = undefined
    this.raw = false
    this.isStatic = false
    this.isRootInsert = true
    this.isComment = false
    this.isCloned = false
    this.isOnce = false
    this.asyncFactory = asyncFactory
    this.asyncMeta = undefined
    this.isAsyncPlaceholder = false
  }

  // DEPRECATED: alias for componentInstance for backwards compat.
  /* istanbul ignore next */
  get child(): Component | void {
    return this.componentInstance
  }
}

export const createEmptyVNode = (text: string = '') => {
  const node = new VNode()
  node.text = text
  node.isComment = true
  return node
}

export function createTextVNode(val: string | number) {
  return new VNode(undefined, undefined, undefined, String(val))
}

// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
export function cloneVNode(vnode: VNode): VNode {
  const cloned = new VNode(
    vnode.tag,
    vnode.data,
    // #7975
    // clone children array to avoid mutating original in case of cloning
    // a child.
    vnode.children && vnode.children.slice(),
    vnode.text,
    vnode.elm,
    vnode.context,
    vnode.componentOptions,
    vnode.asyncFactory
  )
  cloned.ns = vnode.ns
  cloned.isStatic = vnode.isStatic
  cloned.key = vnode.key
  cloned.isComment = vnode.isComment
  cloned.fnContext = vnode.fnContext
  cloned.fnOptions = vnode.fnOptions
  cloned.fnScopeId = vnode.fnScopeId
  cloned.asyncMeta = vnode.asyncMeta
  cloned.isCloned = true
  return cloned
}
import { addProp } from 'compiler/helpers'
import { ASTDirective, ASTElement } from 'types/compiler'

export default function html(el: ASTElement, dir: ASTDirective) {
  if (dir.value) {
    addProp(el, 'innerHTML', `_s(${dir.value})`, dir)
  }
}
import model from './model'
import text from './text'
import html from './html'

export default {
  model,
  text,
  html
}
import config from 'core/config'
import { addHandler, addProp, getBindingAttr } from 'compiler/helpers'
import { genComponentModel, genAssignmentCode } from 'compiler/directives/model'
import { ASTDirective, ASTElement, ASTModifiers } from 'types/compiler'

let warn

// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
export const RANGE_TOKEN = '__r'
export const CHECKBOX_RADIO_TOKEN = '__c'

export default function model(
  el: ASTElement,
  dir: ASTDirective,
  _warn: Function
): boolean | undefined {
  warn = _warn
  const value = dir.value
  const modifiers = dir.modifiers
  const tag = el.tag
  const type = el.attrsMap.type

  if (__DEV__) {
    // inputs with type="file" are read only and setting the input's
    // value will throw an error.
    if (tag === 'input' && type === 'file') {
      warn(
        `<${el.tag} v-model="${value}" type="file">:\n` +
          `File inputs are read only. Use a v-on:change listener instead.`,
        el.rawAttrsMap['v-model']
      )
    }
  }

  if (el.component) {
    genComponentModel(el, value, modifiers)
    // component v-model doesn't need extra runtime
    return false
  } else if (tag === 'select') {
    genSelect(el, value, modifiers)
  } else if (tag === 'input' && type === 'checkbox') {
    genCheckboxModel(el, value, modifiers)
  } else if (tag === 'input' && type === 'radio') {
    genRadioModel(el, value, modifiers)
  } else if (tag === 'input' || tag === 'textarea') {
    genDefaultModel(el, value, modifiers)
  } else if (!config.isReservedTag(tag)) {
    genComponentModel(el, value, modifiers)
    // component v-model doesn't need extra runtime
    return false
  } else if (__DEV__) {
    warn(
      `<${el.tag} v-model="${value}">: ` +
        `v-model is not supported on this element type. ` +
        "If you are working with contenteditable, it's recommended to " +
        'wrap a library dedicated for that purpose inside a custom component.',
      el.rawAttrsMap['v-model']
    )
  }

  // ensure runtime directive metadata
  return true
}

function genCheckboxModel(
  el: ASTElement,
  value: string,
  modifiers?: ASTModifiers | null
) {
  const number = modifiers && modifiers.number
  const valueBinding = getBindingAttr(el, 'value') || 'null'
  const trueValueBinding = getBindingAttr(el, 'true-value') || 'true'
  const falseValueBinding = getBindingAttr(el, 'false-value') || 'false'
  addProp(
    el,
    'checked',
    `Array.isArray(${value})` +
      `?_i(${value},${valueBinding})>-1` +
      (trueValueBinding === 'true'
        ? `:(${value})`
        : `:_q(${value},${trueValueBinding})`)
  )
  addHandler(
    el,
    'change',
    `var $$a=${value},` +
      '$$el=$event.target,' +
      `$$c=$$el.checked?(${trueValueBinding}):(${falseValueBinding});` +
      'if(Array.isArray($$a)){' +
      `var $$v=${number ? '_n(' + valueBinding + ')' : valueBinding},` +
      '$$i=_i($$a,$$v);' +
      `if($$el.checked){$$i<0&&(${genAssignmentCode(
        value,
        '$$a.concat([$$v])'
      )})}` +
      `else{$$i>-1&&(${genAssignmentCode(
        value,
        '$$a.slice(0,$$i).concat($$a.slice($$i+1))'
      )})}` +
      `}else{${genAssignmentCode(value, '$$c')}}`,
    null,
    true
  )
}

function genRadioModel(
  el: ASTElement,
  value: string,
  modifiers?: ASTModifiers | null
) {
  const number = modifiers && modifiers.number
  let valueBinding = getBindingAttr(el, 'value') || 'null'
  valueBinding = number ? `_n(${valueBinding})` : valueBinding
  addProp(el, 'checked', `_q(${value},${valueBinding})`)
  addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true)
}

function genSelect(
  el: ASTElement,
  value: string,
  modifiers?: ASTModifiers | null
) {
  const number = modifiers && modifiers.number
  const selectedVal =
    `Array.prototype.filter` +
    `.call($event.target.options,function(o){return o.selected})` +
    `.map(function(o){var val = "_value" in o ? o._value : o.value;` +
    `return ${number ? '_n(val)' : 'val'}})`

  const assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'
  let code = `var $$selectedVal = ${selectedVal};`
  code = `${code} ${genAssignmentCode(value, assignment)}`
  addHandler(el, 'change', code, null, true)
}

function genDefaultModel(
  el: ASTElement,
  value: string,
  modifiers?: ASTModifiers | null
): boolean | void {
  const type = el.attrsMap.type

  // warn if v-bind:value conflicts with v-model
  // except for inputs with v-bind:type
  if (__DEV__) {
    const value = el.attrsMap['v-bind:value'] || el.attrsMap[':value']
    const typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type']
    if (value && !typeBinding) {
      const binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value'
      warn(
        `${binding}="${value}" conflicts with v-model on the same element ` +
          'because the latter already expands to a value binding internally',
        el.rawAttrsMap[binding]
      )
    }
  }

  const { lazy, number, trim } = modifiers || {}
  const needCompositionGuard = !lazy && type !== 'range'
  const event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input'

  let valueExpression = '$event.target.value'
  if (trim) {
    valueExpression = `$event.target.value.trim()`
  }
  if (number) {
    valueExpression = `_n(${valueExpression})`
  }

  let code = genAssignmentCode(value, valueExpression)
  if (needCompositionGuard) {
    code = `if($event.target.composing)return;${code}`
  }

  addProp(el, 'value', `(${value})`)
  addHandler(el, event, code, null, true)
  if (trim || number) {
    addHandler(el, 'blur', '$forceUpdate()')
  }
}
import { addProp } from 'compiler/helpers'
import { ASTDirective, ASTElement } from 'types/compiler'

export default function text(el: ASTElement, dir: ASTDirective) {
  if (dir.value) {
    addProp(el, 'textContent', `_s(${dir.value})`, dir)
  }
}
import { baseOptions } from './options'
import { createCompiler } from 'compiler/index'

const { compile, compileToFunctions } = createCompiler(baseOptions)

export { compile, compileToFunctions }
import { parseText } from 'compiler/parser/text-parser'
import { getAndRemoveAttr, getBindingAttr, baseWarn } from 'compiler/helpers'
import { ASTElement, CompilerOptions, ModuleOptions } from 'types/compiler'

function transformNode(el: ASTElement, options: CompilerOptions) {
  const warn = options.warn || baseWarn
  const staticClass = getAndRemoveAttr(el, 'class')
  if (__DEV__ && staticClass) {
    const res = parseText(staticClass, options.delimiters)
    if (res) {
      warn(
        `class="${staticClass}": ` +
          'Interpolation inside attributes has been removed. ' +
          'Use v-bind or the colon shorthand instead. For example, ' +
          'instead of <div class="{{ val }}">, use <div :class="val">.',
        el.rawAttrsMap['class']
      )
    }
  }
  if (staticClass) {
    el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim())
  }
  const classBinding = getBindingAttr(el, 'class', false /* getStatic */)
  if (classBinding) {
    el.classBinding = classBinding
  }
}

function genData(el: ASTElement): string {
  let data = ''
  if (el.staticClass) {
    data += `staticClass:${el.staticClass},`
  }
  if (el.classBinding) {
    data += `class:${el.classBinding},`
  }
  return data
}

export default {
  staticKeys: ['staticClass'],
  transformNode,
  genData
} as ModuleOptions
import klass from './class'
import style from './style'
import model from './model'

export default [klass, style, model]
/**
 * Expand input[v-model] with dynamic type bindings into v-if-else chains
 * Turn this:
 *   <input v-model="data[type]" :type="type">
 * into this:
 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
 *   <input v-else :type="type" v-model="data[type]">
 */

import { addRawAttr, getBindingAttr, getAndRemoveAttr } from 'compiler/helpers'

import {
  processFor,
  processElement,
  addIfCondition,
  createASTElement
} from 'compiler/parser/index'
import { ASTElement, CompilerOptions, ModuleOptions } from 'types/compiler'

function preTransformNode(el: ASTElement, options: CompilerOptions) {
  if (el.tag === 'input') {
    const map = el.attrsMap
    if (!map['v-model']) {
      return
    }

    let typeBinding
    if (map[':type'] || map['v-bind:type']) {
      typeBinding = getBindingAttr(el, 'type')
    }
    if (!map.type && !typeBinding && map['v-bind']) {
      typeBinding = `(${map['v-bind']}).type`
    }

    if (typeBinding) {
      const ifCondition = getAndRemoveAttr(el, 'v-if', true)
      const ifConditionExtra = ifCondition ? `&&(${ifCondition})` : ``
      const hasElse = getAndRemoveAttr(el, 'v-else', true) != null
      const elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true)
      // 1. checkbox
      const branch0 = cloneASTElement(el)
      // process for on the main node
      processFor(branch0)
      addRawAttr(branch0, 'type', 'checkbox')
      processElement(branch0, options)
      branch0.processed = true // prevent it from double-processed
      branch0.if = `(${typeBinding})==='checkbox'` + ifConditionExtra
      addIfCondition(branch0, {
        exp: branch0.if,
        block: branch0
      })
      // 2. add radio else-if condition
      const branch1 = cloneASTElement(el)
      getAndRemoveAttr(branch1, 'v-for', true)
      addRawAttr(branch1, 'type', 'radio')
      processElement(branch1, options)
      addIfCondition(branch0, {
        exp: `(${typeBinding})==='radio'` + ifConditionExtra,
        block: branch1
      })
      // 3. other
      const branch2 = cloneASTElement(el)
      getAndRemoveAttr(branch2, 'v-for', true)
      addRawAttr(branch2, ':type', typeBinding)
      processElement(branch2, options)
      addIfCondition(branch0, {
        exp: ifCondition!,
        block: branch2
      })

      if (hasElse) {
        branch0.else = true
      } else if (elseIfCondition) {
        branch0.elseif = elseIfCondition
      }

      return branch0
    }
  }
}

function cloneASTElement(el) {
  return createASTElement(el.tag, el.attrsList.slice(), el.parent)
}

export default {
  preTransformNode
} as ModuleOptions
import { parseText } from 'compiler/parser/text-parser'
import { parseStyleText } from 'web/util/style'
import { getAndRemoveAttr, getBindingAttr, baseWarn } from 'compiler/helpers'
import { ASTElement, CompilerOptions, ModuleOptions } from 'types/compiler'

function transformNode(el: ASTElement, options: CompilerOptions) {
  const warn = options.warn || baseWarn
  const staticStyle = getAndRemoveAttr(el, 'style')
  if (staticStyle) {
    /* istanbul ignore if */
    if (__DEV__) {
      const res = parseText(staticStyle, options.delimiters)
      if (res) {
        warn(
          `style="${staticStyle}": ` +
            'Interpolation inside attributes has been removed. ' +
            'Use v-bind or the colon shorthand instead. For example, ' +
            'instead of <div style="{{ val }}">, use <div :style="val">.',
          el.rawAttrsMap['style']
        )
      }
    }
    el.staticStyle = JSON.stringify(parseStyleText(staticStyle))
  }

  const styleBinding = getBindingAttr(el, 'style', false /* getStatic */)
  if (styleBinding) {
    el.styleBinding = styleBinding
  }
}

function genData(el: ASTElement): string {
  let data = ''
  if (el.staticStyle) {
    data += `staticStyle:${el.staticStyle},`
  }
  if (el.styleBinding) {
    data += `style:(${el.styleBinding}),`
  }
  return data
}

export default {
  staticKeys: ['staticStyle'],
  transformNode,
  genData
} as ModuleOptions
import {
  isPreTag,
  mustUseProp,
  isReservedTag,
  getTagNamespace
} from '../util/index'

import modules from './modules/index'
import directives from './directives/index'
import { genStaticKeys } from 'shared/util'
import { isUnaryTag, canBeLeftOpenTag } from './util'
import { CompilerOptions } from 'types/compiler'

export const baseOptions: CompilerOptions = {
  expectHTML: true,
  modules,
  directives,
  isPreTag,
  isUnaryTag,
  mustUseProp,
  canBeLeftOpenTag,
  isReservedTag,
  getTagNamespace,
  staticKeys: genStaticKeys(modules)
}
import { makeMap } from 'shared/util'

export const isUnaryTag = makeMap(
  'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
    'link,meta,param,source,track,wbr'
)

// Elements that you can, intentionally, leave open
// (and which close themselves)
export const canBeLeftOpenTag = makeMap(
  'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'
)

// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
export const isNonPhrasingTag = makeMap(
  'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
    'title,tr,track'
)
export { parseComponent } from 'sfc/parseComponent'
export { compile, compileToFunctions } from './compiler/index'
export { ssrCompile, ssrCompileToFunctions } from 'server/compiler'
export { generateCodeFrame } from 'compiler/codeframe'
import Vue from './runtime/index'

export default Vue

export * from 'v3'
import Vue from './runtime-with-compiler'

export default Vue

export * from 'v3'
import Vue from './runtime-with-compiler'
import * as vca from 'v3'
import { extend } from 'shared/util'

extend(Vue, vca)

import { effect } from 'v3/reactivity/effect'
Vue.effect = effect

export default Vue
import Vue from './runtime/index'
import * as vca from 'v3'
import { extend } from 'shared/util'

extend(Vue, vca)

export default Vue
import config from 'core/config'
import { warn, cached } from 'core/util/index'
import { mark, measure } from 'core/util/perf'

import Vue from './runtime/index'
import { query } from './util/index'
import { compileToFunctions } from './compiler/index'
import {
  shouldDecodeNewlines,
  shouldDecodeNewlinesForHref
} from './util/compat'
import type { Component } from 'types/component'
import type { GlobalAPI } from 'types/global-api'

const idToTemplate = cached(id => {
  const el = query(id)
  return el && el.innerHTML
})

const mount = Vue.prototype.$mount
Vue.prototype.$mount = function (
  el?: string | Element,
  hydrating?: boolean
): Component {
  el = el && query(el)

  /* istanbul ignore if */
  if (el === document.body || el === document.documentElement) {
    __DEV__ &&
      warn(
        `Do not mount Vue to <html> or <body> - mount to normal elements instead.`
      )
    return this
  }

  const options = this.$options
  // resolve template/el and convert to render function
  if (!options.render) {
    let template = options.template
    if (template) {
      if (typeof template === 'string') {
        if (template.charAt(0) === '#') {
          template = idToTemplate(template)
          /* istanbul ignore if */
          if (__DEV__ && !template) {
            warn(
              `Template element not found or is empty: ${options.template}`,
              this
            )
          }
        }
      } else if (template.nodeType) {
        template = template.innerHTML
      } else {
        if (__DEV__) {
          warn('invalid template option:' + template, this)
        }
        return this
      }
    } else if (el) {
      // @ts-expect-error
      template = getOuterHTML(el)
    }
    if (template) {
      /* istanbul ignore if */
      if (__DEV__ && config.performance && mark) {
        mark('compile')
      }

      const { render, staticRenderFns } = compileToFunctions(
        template,
        {
          outputSourceRange: __DEV__,
          shouldDecodeNewlines,
          shouldDecodeNewlinesForHref,
          delimiters: options.delimiters,
          comments: options.comments
        },
        this
      )
      options.render = render
      options.staticRenderFns = staticRenderFns

      /* istanbul ignore if */
      if (__DEV__ && config.performance && mark) {
        mark('compile end')
        measure(`vue ${this._name} compile`, 'compile', 'compile end')
      }
    }
  }
  return mount.call(this, el, hydrating)
}

/**
 * Get outerHTML of elements, taking care
 * of SVG elements in IE as well.
 */
function getOuterHTML(el: Element): string {
  if (el.outerHTML) {
    return el.outerHTML
  } else {
    const container = document.createElement('div')
    container.appendChild(el.cloneNode(true))
    return container.innerHTML
  }
}

Vue.compile = compileToFunctions

export default Vue as GlobalAPI
const whitespaceRE = /\s+/

/**
 * Add class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
export function addClass(el: HTMLElement, cls?: string) {
  /* istanbul ignore if */
  if (!cls || !(cls = cls.trim())) {
    return
  }

  /* istanbul ignore else */
  if (el.classList) {
    if (cls.indexOf(' ') > -1) {
      cls.split(whitespaceRE).forEach(c => el.classList.add(c))
    } else {
      el.classList.add(cls)
    }
  } else {
    const cur = ` ${el.getAttribute('class') || ''} `
    if (cur.indexOf(' ' + cls + ' ') < 0) {
      el.setAttribute('class', (cur + cls).trim())
    }
  }
}

/**
 * Remove class with compatibility for SVG since classList is not supported on
 * SVG elements in IE
 */
export function removeClass(el: HTMLElement, cls?: string) {
  /* istanbul ignore if */
  if (!cls || !(cls = cls.trim())) {
    return
  }

  /* istanbul ignore else */
  if (el.classList) {
    if (cls.indexOf(' ') > -1) {
      cls.split(whitespaceRE).forEach(c => el.classList.remove(c))
    } else {
      el.classList.remove(cls)
    }
    if (!el.classList.length) {
      el.removeAttribute('class')
    }
  } else {
    let cur = ` ${el.getAttribute('class') || ''} `
    const tar = ' ' + cls + ' '
    while (cur.indexOf(tar) >= 0) {
      cur = cur.replace(tar, ' ')
    }
    cur = cur.trim()
    if (cur) {
      el.setAttribute('class', cur)
    } else {
      el.removeAttribute('class')
    }
  }
}
import Transition from './transition'
import TransitionGroup from './transition-group'

export default {
  Transition,
  TransitionGroup
}
// Provides transition support for list items.
// supports move transitions using the FLIP technique.

// Because the vdom's children update algorithm is "unstable" - i.e.
// it doesn't guarantee the relative positioning of removed elements,
// we force transition-group to update its children into two passes:
// in the first pass, we remove all nodes that need to be removed,
// triggering their leaving transition; in the second pass, we insert/move
// into the final desired state. This way in the second pass removed
// nodes will remain where they should be.

import { warn, extend } from 'core/util/index'
import { addClass, removeClass } from 'web/runtime/class-util'
import { transitionProps, extractTransitionData } from './transition'
import { setActiveInstance } from 'core/instance/lifecycle'

import {
  hasTransition,
  getTransitionInfo,
  transitionEndEvent,
  addTransitionClass,
  removeTransitionClass
} from 'web/runtime/transition-util'
import VNode from 'core/vdom/vnode'
import { VNodeWithData } from 'types/vnode'
import { getComponentName } from 'core/vdom/create-component'

const props = extend(
  {
    tag: String,
    moveClass: String
  },
  transitionProps
)

delete props.mode

export default {
  props,

  beforeMount() {
    const update = this._update
    this._update = (vnode, hydrating) => {
      const restoreActiveInstance = setActiveInstance(this)
      // force removing pass
      this.__patch__(
        this._vnode,
        this.kept,
        false, // hydrating
        true // removeOnly (!important, avoids unnecessary moves)
      )
      this._vnode = this.kept
      restoreActiveInstance()
      update.call(this, vnode, hydrating)
    }
  },

  render(h: Function) {
    const tag: string = this.tag || this.$vnode.data.tag || 'span'
    const map: Record<string, any> = Object.create(null)
    const prevChildren: Array<VNode> = (this.prevChildren = this.children)
    const rawChildren: Array<VNode> = this.$slots.default || []
    const children: Array<VNode> = (this.children = [])
    const transitionData = extractTransitionData(this)

    for (let i = 0; i < rawChildren.length; i++) {
      const c: VNode = rawChildren[i]
      if (c.tag) {
        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
          children.push(c)
          map[c.key] = c
          ;(c.data || (c.data = {})).transition = transitionData
        } else if (__DEV__) {
          const opts = c.componentOptions
          const name: string = opts
            ? getComponentName(opts.Ctor.options as any) || opts.tag || ''
            : c.tag
          warn(`<transition-group> children must be keyed: <${name}>`)
        }
      }
    }

    if (prevChildren) {
      const kept: Array<VNode> = []
      const removed: Array<VNode> = []
      for (let i = 0; i < prevChildren.length; i++) {
        const c: VNode = prevChildren[i]
        c.data!.transition = transitionData
        // @ts-expect-error .getBoundingClientRect is not typed in Node
        c.data!.pos = c.elm.getBoundingClientRect()
        if (map[c.key!]) {
          kept.push(c)
        } else {
          removed.push(c)
        }
      }
      this.kept = h(tag, null, kept)
      this.removed = removed
    }

    return h(tag, null, children)
  },

  updated() {
    const children: Array<VNodeWithData> = this.prevChildren
    const moveClass: string = this.moveClass || (this.name || 'v') + '-move'
    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
      return
    }

    // we divide the work into three loops to avoid mixing DOM reads and writes
    // in each iteration - which helps prevent layout thrashing.
    children.forEach(callPendingCbs)
    children.forEach(recordPosition)
    children.forEach(applyTranslation)

    // force reflow to put everything in position
    // assign to this to avoid being removed in tree-shaking
    // $flow-disable-line
    this._reflow = document.body.offsetHeight

    children.forEach((c: VNode) => {
      if (c.data!.moved) {
        const el: any = c.elm
        const s: any = el.style
        addTransitionClass(el, moveClass)
        s.transform = s.WebkitTransform = s.transitionDuration = ''
        el.addEventListener(
          transitionEndEvent,
          (el._moveCb = function cb(e) {
            if (e && e.target !== el) {
              return
            }
            if (!e || /transform$/.test(e.propertyName)) {
              el.removeEventListener(transitionEndEvent, cb)
              el._moveCb = null
              removeTransitionClass(el, moveClass)
            }
          })
        )
      }
    })
  },

  methods: {
    hasMove(el: any, moveClass: string): boolean {
      /* istanbul ignore if */
      if (!hasTransition) {
        return false
      }
      /* istanbul ignore if */
      if (this._hasMove) {
        return this._hasMove
      }
      // Detect whether an element with the move class applied has
      // CSS transitions. Since the element may be inside an entering
      // transition at this very moment, we make a clone of it and remove
      // all other transition classes applied to ensure only the move class
      // is applied.
      const clone: HTMLElement = el.cloneNode()
      if (el._transitionClasses) {
        el._transitionClasses.forEach((cls: string) => {
          removeClass(clone, cls)
        })
      }
      addClass(clone, moveClass)
      clone.style.display = 'none'
      this.$el.appendChild(clone)
      const info: any = getTransitionInfo(clone)
      this.$el.removeChild(clone)
      return (this._hasMove = info.hasTransform)
    }
  }
}

function callPendingCbs(
  c: VNodeWithData & { elm?: { _moveCb?: Function; _enterCb?: Function } }
) {
  /* istanbul ignore if */
  if (c.elm!._moveCb) {
    c.elm!._moveCb()
  }
  /* istanbul ignore if */
  if (c.elm!._enterCb) {
    c.elm!._enterCb()
  }
}

function recordPosition(c: VNodeWithData) {
  c.data!.newPos = c.elm.getBoundingClientRect()
}

function applyTranslation(c: VNodeWithData) {
  const oldPos = c.data.pos
  const newPos = c.data.newPos
  const dx = oldPos.left - newPos.left
  const dy = oldPos.top - newPos.top
  if (dx || dy) {
    c.data.moved = true
    const s = c.elm.style
    s.transform = s.WebkitTransform = `translate(${dx}px,${dy}px)`
    s.transitionDuration = '0s'
  }
}
// Provides transition support for a single element/component.
// supports transition mode (out-in / in-out)

import { warn } from 'core/util/index'
import { camelize, extend, isPrimitive } from 'shared/util'
import {
  mergeVNodeHook,
  isAsyncPlaceholder,
  getFirstComponentChild
} from 'core/vdom/helpers/index'
import VNode from 'core/vdom/vnode'
import type { Component } from 'types/component'

export const transitionProps = {
  name: String,
  appear: Boolean,
  css: Boolean,
  mode: String,
  type: String,
  enterClass: String,
  leaveClass: String,
  enterToClass: String,
  leaveToClass: String,
  enterActiveClass: String,
  leaveActiveClass: String,
  appearClass: String,
  appearActiveClass: String,
  appearToClass: String,
  duration: [Number, String, Object]
}

// in case the child is also an abstract component, e.g. <keep-alive>
// we want to recursively retrieve the real component to be rendered
function getRealChild(vnode?: VNode): VNode | undefined {
  const compOptions = vnode && vnode.componentOptions
  if (compOptions && compOptions.Ctor.options.abstract) {
    return getRealChild(getFirstComponentChild(compOptions.children))
  } else {
    return vnode
  }
}

export function extractTransitionData(comp: Component): Record<string, any> {
  const data = {}
  const options = comp.$options
  // props
  for (const key in options.propsData) {
    data[key] = comp[key]
  }
  // events.
  // extract listeners and pass them directly to the transition methods
  const listeners = options._parentListeners
  for (const key in listeners) {
    data[camelize(key)] = listeners[key]
  }
  return data
}

function placeholder(h: Function, rawChild: VNode): VNode | undefined {
  // @ts-expect-error
  if (/\d-keep-alive$/.test(rawChild.tag)) {
    return h('keep-alive', {
      props: rawChild.componentOptions!.propsData
    })
  }
}

function hasParentTransition(vnode: VNode): boolean | undefined {
  while ((vnode = vnode.parent!)) {
    if (vnode.data!.transition) {
      return true
    }
  }
}

function isSameChild(child: VNode, oldChild: VNode): boolean {
  return oldChild.key === child.key && oldChild.tag === child.tag
}

const isNotTextNode = (c: VNode) => c.tag || isAsyncPlaceholder(c)

const isVShowDirective = d => d.name === 'show'

export default {
  name: 'transition',
  props: transitionProps,
  abstract: true,

  render(h: Function) {
    let children: any = this.$slots.default
    if (!children) {
      return
    }

    // filter out text nodes (possible whitespaces)
    children = children.filter(isNotTextNode)
    /* istanbul ignore if */
    if (!children.length) {
      return
    }

    // warn multiple elements
    if (__DEV__ && children.length > 1) {
      warn(
        '<transition> can only be used on a single element. Use ' +
          '<transition-group> for lists.',
        this.$parent
      )
    }

    const mode: string = this.mode

    // warn invalid mode
    if (__DEV__ && mode && mode !== 'in-out' && mode !== 'out-in') {
      warn('invalid <transition> mode: ' + mode, this.$parent)
    }

    const rawChild: VNode = children[0]

    // if this is a component root node and the component's
    // parent container node also has transition, skip.
    if (hasParentTransition(this.$vnode)) {
      return rawChild
    }

    // apply transition data to child
    // use getRealChild() to ignore abstract components e.g. keep-alive
    const child = getRealChild(rawChild)
    /* istanbul ignore if */
    if (!child) {
      return rawChild
    }

    if (this._leaving) {
      return placeholder(h, rawChild)
    }

    // ensure a key that is unique to the vnode type and to this transition
    // component instance. This key will be used to remove pending leaving nodes
    // during entering.
    const id: string = `__transition-${this._uid}-`
    child.key =
      child.key == null
        ? child.isComment
          ? id + 'comment'
          : id + child.tag
        : isPrimitive(child.key)
        ? String(child.key).indexOf(id) === 0
          ? child.key
          : id + child.key
        : child.key

    const data: Object = ((child.data || (child.data = {})).transition =
      extractTransitionData(this))
    const oldRawChild: VNode = this._vnode
    const oldChild = getRealChild(oldRawChild)

    // mark v-show
    // so that the transition module can hand over the control to the directive
    if (child.data.directives && child.data.directives.some(isVShowDirective)) {
      child.data.show = true
    }

    if (
      oldChild &&
      oldChild.data &&
      !isSameChild(child, oldChild) &&
      !isAsyncPlaceholder(oldChild) &&
      // #6687 component root is a comment node
      !(
        oldChild.componentInstance &&
        oldChild.componentInstance._vnode!.isComment
      )
    ) {
      // replace old child transition data with fresh one
      // important for dynamic transitions!
      const oldData: Object = (oldChild.data.transition = extend({}, data))
      // handle transition mode
      if (mode === 'out-in') {
        // return placeholder node and queue update when leave finishes
        this._leaving = true
        mergeVNodeHook(oldData, 'afterLeave', () => {
          this._leaving = false
          this.$forceUpdate()
        })
        return placeholder(h, rawChild)
      } else if (mode === 'in-out') {
        if (isAsyncPlaceholder(child)) {
          return oldRawChild
        }
        let delayedLeave
        const performLeave = () => {
          delayedLeave()
        }
        mergeVNodeHook(data, 'afterEnter', performLeave)
        mergeVNodeHook(data, 'enterCancelled', performLeave)
        mergeVNodeHook(oldData, 'delayLeave', leave => {
          delayedLeave = leave
        })
      }
    }

    return rawChild
  }
}
import model from './model'
import show from './show'

export default {
  model,
  show
}
/**
 * Not type checking this file because flow doesn't like attaching
 * properties to Elements.
 */

import { isTextInputType } from 'web/util/element'
import { looseEqual, looseIndexOf } from 'shared/util'
import { mergeVNodeHook } from 'core/vdom/helpers/index'
import { warn, isIE9, isIE, isEdge } from 'core/util/index'

/* istanbul ignore if */
if (isIE9) {
  // http://www.matts411.com/post/internet-explorer-9-oninput/
  document.addEventListener('selectionchange', () => {
    const el = document.activeElement
    // @ts-expect-error
    if (el && el.vmodel) {
      trigger(el, 'input')
    }
  })
}

const directive = {
  inserted(el, binding, vnode, oldVnode) {
    if (vnode.tag === 'select') {
      // #6903
      if (oldVnode.elm && !oldVnode.elm._vOptions) {
        mergeVNodeHook(vnode, 'postpatch', () => {
          directive.componentUpdated(el, binding, vnode)
        })
      } else {
        setSelected(el, binding, vnode.context)
      }
      el._vOptions = [].map.call(el.options, getValue)
    } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
      el._vModifiers = binding.modifiers
      if (!binding.modifiers.lazy) {
        el.addEventListener('compositionstart', onCompositionStart)
        el.addEventListener('compositionend', onCompositionEnd)
        // Safari < 10.2 & UIWebView doesn't fire compositionend when
        // switching focus before confirming composition choice
        // this also fixes the issue where some browsers e.g. iOS Chrome
        // fires "change" instead of "input" on autocomplete.
        el.addEventListener('change', onCompositionEnd)
        /* istanbul ignore if */
        if (isIE9) {
          el.vmodel = true
        }
      }
    }
  },

  componentUpdated(el, binding, vnode) {
    if (vnode.tag === 'select') {
      setSelected(el, binding, vnode.context)
      // in case the options rendered by v-for have changed,
      // it's possible that the value is out-of-sync with the rendered options.
      // detect such cases and filter out values that no longer has a matching
      // option in the DOM.
      const prevOptions = el._vOptions
      const curOptions = (el._vOptions = [].map.call(el.options, getValue))
      if (curOptions.some((o, i) => !looseEqual(o, prevOptions[i]))) {
        // trigger change event if
        // no matching option found for at least one value
        const needReset = el.multiple
          ? binding.value.some(v => hasNoMatchingOption(v, curOptions))
          : binding.value !== binding.oldValue &&
            hasNoMatchingOption(binding.value, curOptions)
        if (needReset) {
          trigger(el, 'change')
        }
      }
    }
  }
}

function setSelected(el, binding, vm) {
  actuallySetSelected(el, binding, vm)
  /* istanbul ignore if */
  if (isIE || isEdge) {
    setTimeout(() => {
      actuallySetSelected(el, binding, vm)
    }, 0)
  }
}

function actuallySetSelected(el, binding, vm) {
  const value = binding.value
  const isMultiple = el.multiple
  if (isMultiple && !Array.isArray(value)) {
    __DEV__ &&
      warn(
        `<select multiple v-model="${binding.expression}"> ` +
          `expects an Array value for its binding, but got ${Object.prototype.toString
            .call(value)
            .slice(8, -1)}`,
        vm
      )
    return
  }
  let selected, option
  for (let i = 0, l = el.options.length; i < l; i++) {
    option = el.options[i]
    if (isMultiple) {
      selected = looseIndexOf(value, getValue(option)) > -1
      if (option.selected !== selected) {
        option.selected = selected
      }
    } else {
      if (looseEqual(getValue(option), value)) {
        if (el.selectedIndex !== i) {
          el.selectedIndex = i
        }
        return
      }
    }
  }
  if (!isMultiple) {
    el.selectedIndex = -1
  }
}

function hasNoMatchingOption(value, options) {
  return options.every(o => !looseEqual(o, value))
}

function getValue(option) {
  return '_value' in option ? option._value : option.value
}

function onCompositionStart(e) {
  e.target.composing = true
}

function onCompositionEnd(e) {
  // prevent triggering an input event for no reason
  if (!e.target.composing) return
  e.target.composing = false
  trigger(e.target, 'input')
}

function trigger(el, type) {
  const e = document.createEvent('HTMLEvents')
  e.initEvent(type, true, true)
  el.dispatchEvent(e)
}

export default directive
import VNode from 'core/vdom/vnode'
import type { VNodeDirective, VNodeWithData } from 'types/vnode'
import { enter, leave } from 'web/runtime/modules/transition'

// recursively search for possible transition defined inside the component root
function locateNode(vnode: VNode | VNodeWithData): VNodeWithData {
  // @ts-expect-error
  return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
    ? locateNode(vnode.componentInstance._vnode!)
    : vnode
}

export default {
  bind(el: any, { value }: VNodeDirective, vnode: VNodeWithData) {
    vnode = locateNode(vnode)
    const transition = vnode.data && vnode.data.transition
    const originalDisplay = (el.__vOriginalDisplay =
      el.style.display === 'none' ? '' : el.style.display)
    if (value && transition) {
      vnode.data.show = true
      enter(vnode, () => {
        el.style.display = originalDisplay
      })
    } else {
      el.style.display = value ? originalDisplay : 'none'
    }
  },

  update(el: any, { value, oldValue }: VNodeDirective, vnode: VNodeWithData) {
    /* istanbul ignore if */
    if (!value === !oldValue) return
    vnode = locateNode(vnode)
    const transition = vnode.data && vnode.data.transition
    if (transition) {
      vnode.data.show = true
      if (value) {
        enter(vnode, () => {
          el.style.display = el.__vOriginalDisplay
        })
      } else {
        leave(vnode, () => {
          el.style.display = 'none'
        })
      }
    } else {
      el.style.display = value ? el.__vOriginalDisplay : 'none'
    }
  },

  unbind(
    el: any,
    binding: VNodeDirective,
    vnode: VNodeWithData,
    oldVnode: VNodeWithData,
    isDestroy: boolean
  ) {
    if (!isDestroy) {
      el.style.display = el.__vOriginalDisplay
    }
  }
}
import Vue from 'core/index'
import config from 'core/config'
import { extend, noop } from 'shared/util'
import { mountComponent } from 'core/instance/lifecycle'
import { devtools, inBrowser } from 'core/util/index'

import {
  query,
  mustUseProp,
  isReservedTag,
  isReservedAttr,
  getTagNamespace,
  isUnknownElement
} from 'web/util/index'

import { patch } from './patch'
import platformDirectives from './directives/index'
import platformComponents from './components/index'
import type { Component } from 'types/component'

// install platform specific utils
Vue.config.mustUseProp = mustUseProp
Vue.config.isReservedTag = isReservedTag
Vue.config.isReservedAttr = isReservedAttr
Vue.config.getTagNamespace = getTagNamespace
Vue.config.isUnknownElement = isUnknownElement

// install platform runtime directives & components
extend(Vue.options.directives, platformDirectives)
extend(Vue.options.components, platformComponents)

// install platform patch function
Vue.prototype.__patch__ = inBrowser ? patch : noop

// public mount method
Vue.prototype.$mount = function (
  el?: string | Element,
  hydrating?: boolean
): Component {
  el = el && inBrowser ? query(el) : undefined
  return mountComponent(this, el, hydrating)
}

// devtools global hook
/* istanbul ignore next */
if (inBrowser) {
  setTimeout(() => {
    if (config.devtools) {
      if (devtools) {
        devtools.emit('init', Vue)
      } else if (__DEV__ && process.env.NODE_ENV !== 'test') {
        // @ts-expect-error
        console[console.info ? 'info' : 'log'](
          'Download the Vue Devtools extension for a better development experience:\n' +
            'https://github.com/vuejs/vue-devtools'
        )
      }
    }
    if (
      __DEV__ &&
      process.env.NODE_ENV !== 'test' &&
      config.productionTip !== false &&
      typeof console !== 'undefined'
    ) {
      // @ts-expect-error
      console[console.info ? 'info' : 'log'](
        `You are running Vue in development mode.\n` +
          `Make sure to turn on production mode when deploying for production.\n` +
          `See more tips at https://vuejs.org/guide/deployment.html`
      )
    }
  }, 0)
}

export default Vue
import { isIE, isIE9, isEdge } from 'core/util/env'

import { extend, isDef, isUndef, isTrue } from 'shared/util'
import type { VNodeWithData } from 'types/vnode'

import {
  isXlink,
  xlinkNS,
  getXlinkProp,
  isBooleanAttr,
  isEnumeratedAttr,
  isFalsyAttrValue,
  convertEnumeratedValue
} from 'web/util/index'

function updateAttrs(oldVnode: VNodeWithData, vnode: VNodeWithData) {
  const opts = vnode.componentOptions
  if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
    return
  }
  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
    return
  }
  let key, cur, old
  const elm = vnode.elm
  const oldAttrs = oldVnode.data.attrs || {}
  let attrs: any = vnode.data.attrs || {}
  // clone observed objects, as the user probably wants to mutate it
  if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
    attrs = vnode.data.attrs = extend({}, attrs)
  }

  for (key in attrs) {
    cur = attrs[key]
    old = oldAttrs[key]
    if (old !== cur) {
      setAttr(elm, key, cur, vnode.data.pre)
    }
  }
  // #4391: in IE9, setting type can reset value for input[type=radio]
  // #6666: IE/Edge forces progress value down to 1 before setting a max
  /* istanbul ignore if */
  if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
    setAttr(elm, 'value', attrs.value)
  }
  for (key in oldAttrs) {
    if (isUndef(attrs[key])) {
      if (isXlink(key)) {
        elm.removeAttributeNS(xlinkNS, getXlinkProp(key))
      } else if (!isEnumeratedAttr(key)) {
        elm.removeAttribute(key)
      }
    }
  }
}

function setAttr(el: Element, key: string, value: any, isInPre?: any) {
  if (isInPre || el.tagName.indexOf('-') > -1) {
    baseSetAttr(el, key, value)
  } else if (isBooleanAttr(key)) {
    // set attribute for blank value
    // e.g. <option disabled>Select one</option>
    if (isFalsyAttrValue(value)) {
      el.removeAttribute(key)
    } else {
      // technically allowfullscreen is a boolean attribute for <iframe>,
      // but Flash expects a value of "true" when used on <embed> tag
      value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key
      el.setAttribute(key, value)
    }
  } else if (isEnumeratedAttr(key)) {
    el.setAttribute(key, convertEnumeratedValue(key, value))
  } else if (isXlink(key)) {
    if (isFalsyAttrValue(value)) {
      el.removeAttributeNS(xlinkNS, getXlinkProp(key))
    } else {
      el.setAttributeNS(xlinkNS, key, value)
    }
  } else {
    baseSetAttr(el, key, value)
  }
}

function baseSetAttr(el, key, value) {
  if (isFalsyAttrValue(value)) {
    el.removeAttribute(key)
  } else {
    // #7138: IE10 & 11 fires input event when setting placeholder on
    // <textarea>... block the first input event and remove the blocker
    // immediately.
    /* istanbul ignore if */
    if (
      isIE &&
      !isIE9 &&
      el.tagName === 'TEXTAREA' &&
      key === 'placeholder' &&
      value !== '' &&
      !el.__ieph
    ) {
      const blocker = e => {
        e.stopImmediatePropagation()
        el.removeEventListener('input', blocker)
      }
      el.addEventListener('input', blocker)
      // $flow-disable-line
      el.__ieph = true /* IE placeholder patched */
    }
    el.setAttribute(key, value)
  }
}

export default {
  create: updateAttrs,
  update: updateAttrs
}
import { isDef, isUndef } from 'shared/util'
import type { VNodeData } from 'types/vnode'

import { concat, stringifyClass, genClassForVnode } from 'web/util/index'

function updateClass(oldVnode: any, vnode: any) {
  const el = vnode.elm
  const data: VNodeData = vnode.data
  const oldData: VNodeData = oldVnode.data
  if (
    isUndef(data.staticClass) &&
    isUndef(data.class) &&
    (isUndef(oldData) ||
      (isUndef(oldData.staticClass) && isUndef(oldData.class)))
  ) {
    return
  }

  let cls = genClassForVnode(vnode)

  // handle transition classes
  const transitionClass = el._transitionClasses
  if (isDef(transitionClass)) {
    cls = concat(cls, stringifyClass(transitionClass))
  }

  // set the class
  if (cls !== el._prevClass) {
    el.setAttribute('class', cls)
    el._prevClass = cls
  }
}

export default {
  create: updateClass,
  update: updateClass
}
import { isDef, isUndef, extend, toNumber, isTrue } from 'shared/util'
import type { VNodeWithData } from 'types/vnode'
import { isSVG } from 'web/util/index'

let svgContainer

function updateDOMProps(oldVnode: VNodeWithData, vnode: VNodeWithData) {
  if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
    return
  }
  let key, cur
  const elm: any = vnode.elm
  const oldProps = oldVnode.data.domProps || {}
  let props = vnode.data.domProps || {}
  // clone observed objects, as the user probably wants to mutate it
  if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
    props = vnode.data.domProps = extend({}, props)
  }

  for (key in oldProps) {
    if (!(key in props)) {
      elm[key] = ''
    }
  }

  for (key in props) {
    cur = props[key]
    // ignore children if the node has textContent or innerHTML,
    // as these will throw away existing DOM nodes and cause removal errors
    // on subsequent patches (#3360)
    if (key === 'textContent' || key === 'innerHTML') {
      if (vnode.children) vnode.children.length = 0
      if (cur === oldProps[key]) continue
      // #6601 work around Chrome version <= 55 bug where single textNode
      // replaced by innerHTML/textContent retains its parentNode property
      if (elm.childNodes.length === 1) {
        elm.removeChild(elm.childNodes[0])
      }
    }

    if (key === 'value' && elm.tagName !== 'PROGRESS') {
      // store value as _value as well since
      // non-string values will be stringified
      elm._value = cur
      // avoid resetting cursor position when value is the same
      const strCur = isUndef(cur) ? '' : String(cur)
      if (shouldUpdateValue(elm, strCur)) {
        elm.value = strCur
      }
    } else if (
      key === 'innerHTML' &&
      isSVG(elm.tagName) &&
      isUndef(elm.innerHTML)
    ) {
      // IE doesn't support innerHTML for SVG elements
      svgContainer = svgContainer || document.createElement('div')
      svgContainer.innerHTML = `<svg>${cur}</svg>`
      const svg = svgContainer.firstChild
      while (elm.firstChild) {
        elm.removeChild(elm.firstChild)
      }
      while (svg.firstChild) {
        elm.appendChild(svg.firstChild)
      }
    } else if (
      // skip the update if old and new VDOM state is the same.
      // `value` is handled separately because the DOM value may be temporarily
      // out of sync with VDOM state due to focus, composition and modifiers.
      // This  #4521 by skipping the unnecessary `checked` update.
      cur !== oldProps[key]
    ) {
      // some property updates can throw
      // e.g. `value` on <progress> w/ non-finite value
      try {
        elm[key] = cur
      } catch (e: any) {}
    }
  }
}

// check platforms/web/util/attrs.js acceptValue
type acceptValueElm = HTMLInputElement | HTMLSelectElement | HTMLOptionElement

function shouldUpdateValue(elm: acceptValueElm, checkVal: string): boolean {
  return (
    //@ts-expect-error
    !elm.composing &&
    (elm.tagName === 'OPTION' ||
      isNotInFocusAndDirty(elm, checkVal) ||
      isDirtyWithModifiers(elm, checkVal))
  )
}

function isNotInFocusAndDirty(elm: acceptValueElm, checkVal: string): boolean {
  // return true when textbox (.number and .trim) loses focus and its value is
  // not equal to the updated value
  let notInFocus = true
  // #6157
  // work around IE bug when accessing document.activeElement in an iframe
  try {
    notInFocus = document.activeElement !== elm
  } catch (e: any) {}
  return notInFocus && elm.value !== checkVal
}

function isDirtyWithModifiers(elm: any, newVal: string): boolean {
  const value = elm.value
  const modifiers = elm._vModifiers // injected by v-model runtime
  if (isDef(modifiers)) {
    if (modifiers.number) {
      return toNumber(value) !== toNumber(newVal)
    }
    if (modifiers.trim) {
      return value.trim() !== newVal.trim()
    }
  }
  return value !== newVal
}

export default {
  create: updateDOMProps,
  update: updateDOMProps
}
import { isDef, isUndef } from 'shared/util'
import { updateListeners } from 'core/vdom/helpers/index'
import { isIE, isFF, supportsPassive, isUsingMicroTask } from 'core/util/index'
import {
  RANGE_TOKEN,
  CHECKBOX_RADIO_TOKEN
} from 'web/compiler/directives/model'
import { currentFlushTimestamp } from 'core/observer/scheduler'
import { emptyNode } from 'core/vdom/patch'
import type { VNodeWithData } from 'types/vnode'

// normalize v-model event tokens that can only be determined at runtime.
// it's important to place the event as the first in the array because
// the whole point is ensuring the v-model callback gets called before
// user-attached handlers.
function normalizeEvents(on) {
  /* istanbul ignore if */
  if (isDef(on[RANGE_TOKEN])) {
    // IE input[type=range] only supports `change` event
    const event = isIE ? 'change' : 'input'
    on[event] = [].concat(on[RANGE_TOKEN], on[event] || [])
    delete on[RANGE_TOKEN]
  }
  // This was originally intended to fix #4521 but no longer necessary
  // after 2.5. Keeping it for backwards compat with generated code from < 2.4
  /* istanbul ignore if */
  if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
    on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || [])
    delete on[CHECKBOX_RADIO_TOKEN]
  }
}

let target: any

function createOnceHandler(event, handler, capture) {
  const _target = target // save current target element in closure
  return function onceHandler() {
    const res = handler.apply(null, arguments)
    if (res !== null) {
      remove(event, onceHandler, capture, _target)
    }
  }
}

// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
// implementation and does not fire microtasks in between event propagation, so
// safe to exclude.
const useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53)

function add(
  name: string,
  handler: Function,
  capture: boolean,
  passive: boolean
) {
  // async edge case #6566: inner click event triggers patch, event handler
  // attached to outer element during patch, and triggered again. This
  // happens because browsers fire microtask ticks between event propagation.
  // the solution is simple: we save the timestamp when a handler is attached,
  // and the handler would only fire if the event passed to it was fired
  // AFTER it was attached.
  if (useMicrotaskFix) {
    const attachedTimestamp = currentFlushTimestamp
    const original = handler
    //@ts-expect-error
    handler = original._wrapper = function (e) {
      if (
        // no bubbling, should always fire.
        // this is just a safety net in case event.timeStamp is unreliable in
        // certain weird environments...
        e.target === e.currentTarget ||
        // event is fired after handler attachment
        e.timeStamp >= attachedTimestamp ||
        // bail for environments that have buggy event.timeStamp implementations
        // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
        // #9681 QtWebEngine event.timeStamp is negative value
        e.timeStamp <= 0 ||
        // #9448 bail if event is fired in another document in a multi-page
        // electron/nw.js app, since event.timeStamp will be using a different
        // starting reference
        e.target.ownerDocument !== document
      ) {
        return original.apply(this, arguments)
      }
    }
  }
  target.addEventListener(
    name,
    handler,
    supportsPassive ? { capture, passive } : capture
  )
}

function remove(
  name: string,
  handler: Function,
  capture: boolean,
  _target?: HTMLElement
) {
  ;(_target || target).removeEventListener(
    name,
    //@ts-expect-error
    handler._wrapper || handler,
    capture
  )
}

function updateDOMListeners(oldVnode: VNodeWithData, vnode: VNodeWithData) {
  if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
    return
  }
  const on = vnode.data.on || {}
  const oldOn = oldVnode.data.on || {}
  // vnode is empty when removing all listeners,
  // and use old vnode dom element
  target = vnode.elm || oldVnode.elm
  normalizeEvents(on)
  updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context)
  target = undefined
}

export default {
  create: updateDOMListeners,
  update: updateDOMListeners,
  // @ts-expect-error emptyNode has actually data
  destroy: (vnode: VNodeWithData) => updateDOMListeners(vnode, emptyNode)
}
import attrs from './attrs'
import klass from './class'
import events from './events'
import domProps from './dom-props'
import style from './style'
import transition from './transition'

export default [attrs, klass, events, domProps, style, transition]
import { getStyle, normalizeStyleBinding } from 'web/util/style'
import {
  cached,
  camelize,
  extend,
  isDef,
  isUndef,
  hyphenate
} from 'shared/util'
import type { VNodeWithData } from 'types/vnode'

const cssVarRE = /^--/
const importantRE = /\s*!important$/
const setProp = (el, name, val) => {
  /* istanbul ignore if */
  if (cssVarRE.test(name)) {
    el.style.setProperty(name, val)
  } else if (importantRE.test(val)) {
    el.style.setProperty(
      hyphenate(name),
      val.replace(importantRE, ''),
      'important'
    )
  } else {
    const normalizedName = normalize(name)
    if (Array.isArray(val)) {
      // Support values array created by autoprefixer, e.g.
      // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
      // Set them one by one, and the browser will only set those it can recognize
      for (let i = 0, len = val.length; i < len; i++) {
        el.style[normalizedName!] = val[i]
      }
    } else {
      el.style[normalizedName!] = val
    }
  }
}

const vendorNames = ['Webkit', 'Moz', 'ms']

let emptyStyle
const normalize = cached(function (prop) {
  emptyStyle = emptyStyle || document.createElement('div').style
  prop = camelize(prop)
  if (prop !== 'filter' && prop in emptyStyle) {
    return prop
  }
  const capName = prop.charAt(0).toUpperCase() + prop.slice(1)
  for (let i = 0; i < vendorNames.length; i++) {
    const name = vendorNames[i] + capName
    if (name in emptyStyle) {
      return name
    }
  }
})

function updateStyle(oldVnode: VNodeWithData, vnode: VNodeWithData) {
  const data = vnode.data
  const oldData = oldVnode.data

  if (
    isUndef(data.staticStyle) &&
    isUndef(data.style) &&
    isUndef(oldData.staticStyle) &&
    isUndef(oldData.style)
  ) {
    return
  }

  let cur, name
  const el: any = vnode.elm
  const oldStaticStyle: any = oldData.staticStyle
  const oldStyleBinding: any = oldData.normalizedStyle || oldData.style || {}

  // if static style exists, stylebinding already merged into it when doing normalizeStyleData
  const oldStyle = oldStaticStyle || oldStyleBinding

  const style = normalizeStyleBinding(vnode.data.style) || {}

  // store normalized style under a different key for next diff
  // make sure to clone it if it's reactive, since the user likely wants
  // to mutate it.
  vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style

  const newStyle = getStyle(vnode, true)

  for (name in oldStyle) {
    if (isUndef(newStyle[name])) {
      setProp(el, name, '')
    }
  }
  for (name in newStyle) {
    cur = newStyle[name]
    if (cur !== oldStyle[name]) {
      // ie9 setting to null has no effect, must use empty string
      setProp(el, name, cur == null ? '' : cur)
    }
  }
}

export default {
  create: updateStyle,
  update: updateStyle
}
import { inBrowser, isIE9, warn } from 'core/util/index'
import { mergeVNodeHook } from 'core/vdom/helpers/index'
import { activeInstance } from 'core/instance/lifecycle'

import {
  once,
  isDef,
  isUndef,
  isObject,
  toNumber,
  isFunction
} from 'shared/util'

import {
  nextFrame,
  resolveTransition,
  whenTransitionEnds,
  addTransitionClass,
  removeTransitionClass
} from 'web/runtime/transition-util'

import type { VNodeWithData } from 'types/vnode'
import VNode from 'core/vdom/vnode'

export function enter(vnode: VNodeWithData, toggleDisplay?: () => void) {
  const el: any = vnode.elm

  // call leave callback now
  if (isDef(el._leaveCb)) {
    el._leaveCb.cancelled = true
    el._leaveCb()
  }

  const data = resolveTransition(vnode.data.transition)
  if (isUndef(data)) {
    return
  }

  /* istanbul ignore if */
  if (isDef(el._enterCb) || el.nodeType !== 1) {
    return
  }

  const {
    css,
    type,
    enterClass,
    enterToClass,
    enterActiveClass,
    appearClass,
    appearToClass,
    appearActiveClass,
    beforeEnter,
    enter,
    afterEnter,
    enterCancelled,
    beforeAppear,
    appear,
    afterAppear,
    appearCancelled,
    duration
  } = data

  // activeInstance will always be the <transition> component managing this
  // transition. One edge case to check is when the <transition> is placed
  // as the root node of a child component. In that case we need to check
  // <transition>'s parent for appear check.
  let context = activeInstance
  let transitionNode = activeInstance.$vnode
  while (transitionNode && transitionNode.parent) {
    context = transitionNode.context
    transitionNode = transitionNode.parent
  }

  const isAppear = !context._isMounted || !vnode.isRootInsert

  if (isAppear && !appear && appear !== '') {
    return
  }

  const startClass = isAppear && appearClass ? appearClass : enterClass
  const activeClass =
    isAppear && appearActiveClass ? appearActiveClass : enterActiveClass
  const toClass = isAppear && appearToClass ? appearToClass : enterToClass

  const beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter
  const enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter
  const afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter
  const enterCancelledHook = isAppear
    ? appearCancelled || enterCancelled
    : enterCancelled

  const explicitEnterDuration: any = toNumber(
    isObject(duration) ? duration.enter : duration
  )

  if (__DEV__ && explicitEnterDuration != null) {
    checkDuration(explicitEnterDuration, 'enter', vnode)
  }

  const expectsCSS = css !== false && !isIE9
  const userWantsControl = getHookArgumentsLength(enterHook)

  const cb = (el._enterCb = once(() => {
    if (expectsCSS) {
      removeTransitionClass(el, toClass)
      removeTransitionClass(el, activeClass)
    }
    // @ts-expect-error
    if (cb.cancelled) {
      if (expectsCSS) {
        removeTransitionClass(el, startClass)
      }
      enterCancelledHook && enterCancelledHook(el)
    } else {
      afterEnterHook && afterEnterHook(el)
    }
    el._enterCb = null
  }))

  if (!vnode.data.show) {
    // remove pending leave element on enter by injecting an insert hook
    mergeVNodeHook(vnode, 'insert', () => {
      const parent = el.parentNode
      const pendingNode =
        parent && parent._pending && parent._pending[vnode.key!]
      if (
        pendingNode &&
        pendingNode.tag === vnode.tag &&
        pendingNode.elm._leaveCb
      ) {
        pendingNode.elm._leaveCb()
      }
      enterHook && enterHook(el, cb)
    })
  }

  // start enter transition
  beforeEnterHook && beforeEnterHook(el)
  if (expectsCSS) {
    addTransitionClass(el, startClass)
    addTransitionClass(el, activeClass)
    nextFrame(() => {
      removeTransitionClass(el, startClass)
      // @ts-expect-error
      if (!cb.cancelled) {
        addTransitionClass(el, toClass)
        if (!userWantsControl) {
          if (isValidDuration(explicitEnterDuration)) {
            setTimeout(cb, explicitEnterDuration)
          } else {
            whenTransitionEnds(el, type, cb)
          }
        }
      }
    })
  }

  if (vnode.data.show) {
    toggleDisplay && toggleDisplay()
    enterHook && enterHook(el, cb)
  }

  if (!expectsCSS && !userWantsControl) {
    cb()
  }
}

export function leave(vnode: VNodeWithData, rm: Function) {
  const el: any = vnode.elm

  // call enter callback now
  if (isDef(el._enterCb)) {
    el._enterCb.cancelled = true
    el._enterCb()
  }

  const data = resolveTransition(vnode.data.transition)
  if (isUndef(data) || el.nodeType !== 1) {
    return rm()
  }

  /* istanbul ignore if */
  if (isDef(el._leaveCb)) {
    return
  }

  const {
    css,
    type,
    leaveClass,
    leaveToClass,
    leaveActiveClass,
    beforeLeave,
    leave,
    afterLeave,
    leaveCancelled,
    delayLeave,
    duration
  } = data

  const expectsCSS = css !== false && !isIE9
  const userWantsControl = getHookArgumentsLength(leave)

  const explicitLeaveDuration: any = toNumber(
    isObject(duration) ? duration.leave : duration
  )

  if (__DEV__ && isDef(explicitLeaveDuration)) {
    checkDuration(explicitLeaveDuration, 'leave', vnode)
  }

  const cb = (el._leaveCb = once(() => {
    if (el.parentNode && el.parentNode._pending) {
      el.parentNode._pending[vnode.key!] = null
    }
    if (expectsCSS) {
      removeTransitionClass(el, leaveToClass)
      removeTransitionClass(el, leaveActiveClass)
    }
    // @ts-expect-error
    if (cb.cancelled) {
      if (expectsCSS) {
        removeTransitionClass(el, leaveClass)
      }
      leaveCancelled && leaveCancelled(el)
    } else {
      rm()
      afterLeave && afterLeave(el)
    }
    el._leaveCb = null
  }))

  if (delayLeave) {
    delayLeave(performLeave)
  } else {
    performLeave()
  }

  function performLeave() {
    // the delayed leave may have already been cancelled
    // @ts-expect-error
    if (cb.cancelled) {
      return
    }
    // record leaving element
    if (!vnode.data.show && el.parentNode) {
      ;(el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key!] =
        vnode
    }
    beforeLeave && beforeLeave(el)
    if (expectsCSS) {
      addTransitionClass(el, leaveClass)
      addTransitionClass(el, leaveActiveClass)
      nextFrame(() => {
        removeTransitionClass(el, leaveClass)
        // @ts-expect-error
        if (!cb.cancelled) {
          addTransitionClass(el, leaveToClass)
          if (!userWantsControl) {
            if (isValidDuration(explicitLeaveDuration)) {
              setTimeout(cb, explicitLeaveDuration)
            } else {
              whenTransitionEnds(el, type, cb)
            }
          }
        }
      })
    }
    leave && leave(el, cb)
    if (!expectsCSS && !userWantsControl) {
      cb()
    }
  }
}

// only used in dev mode
function checkDuration(val, name, vnode) {
  if (typeof val !== 'number') {
    warn(
      `<transition> explicit ${name} duration is not a valid number - ` +
        `got ${JSON.stringify(val)}.`,
      vnode.context
    )
  } else if (isNaN(val)) {
    warn(
      `<transition> explicit ${name} duration is NaN - ` +
        'the duration expression might be incorrect.',
      vnode.context
    )
  }
}

function isValidDuration(val) {
  return typeof val === 'number' && !isNaN(val)
}

/**
 * Normalize a transition hook's argument length. The hook may be:
 * - a merged hook (invoker) with the original in .fns
 * - a wrapped component method (check ._length)
 * - a plain function (.length)
 */
function getHookArgumentsLength(fn: Function): boolean {
  if (isUndef(fn)) {
    return false
  }
  // @ts-expect-error
  const invokerFns = fn.fns
  if (isDef(invokerFns)) {
    // invoker
    return getHookArgumentsLength(
      Array.isArray(invokerFns) ? invokerFns[0] : invokerFns
    )
  } else {
    // @ts-expect-error
    return (fn._length || fn.length) > 1
  }
}

function _enter(_: any, vnode: VNodeWithData) {
  if (vnode.data.show !== true) {
    enter(vnode)
  }
}

export default inBrowser
  ? {
      create: _enter,
      activate: _enter,
      remove(vnode: VNode, rm: Function) {
        /* istanbul ignore else */
        if (vnode.data!.show !== true) {
          // @ts-expect-error
          leave(vnode, rm)
        } else {
          rm()
        }
      }
    }
  : {}
import VNode from 'core/vdom/vnode'
import { namespaceMap } from 'web/util/index'

export function createElement(tagName: string, vnode: VNode): Element {
  const elm = document.createElement(tagName)
  if (tagName !== 'select') {
    return elm
  }
  // false or null will remove the attribute but undefined will not
  if (
    vnode.data &&
    vnode.data.attrs &&
    vnode.data.attrs.multiple !== undefined
  ) {
    elm.setAttribute('multiple', 'multiple')
  }
  return elm
}

export function createElementNS(namespace: string, tagName: string): Element {
  return document.createElementNS(namespaceMap[namespace], tagName)
}

export function createTextNode(text: string): Text {
  return document.createTextNode(text)
}

export function createComment(text: string): Comment {
  return document.createComment(text)
}

export function insertBefore(
  parentNode: Node,
  newNode: Node,
  referenceNode: Node
) {
  parentNode.insertBefore(newNode, referenceNode)
}

export function removeChild(node: Node, child: Node) {
  node.removeChild(child)
}

export function appendChild(node: Node, child: Node) {
  node.appendChild(child)
}

export function parentNode(node: Node) {
  return node.parentNode
}

export function nextSibling(node: Node) {
  return node.nextSibling
}

export function tagName(node: Element): string {
  return node.tagName
}

export function setTextContent(node: Node, text: string) {
  node.textContent = text
}

export function setStyleScope(node: Element, scopeId: string) {
  node.setAttribute(scopeId, '')
}
import * as nodeOps from 'web/runtime/node-ops'
import { createPatchFunction } from 'core/vdom/patch'
import baseModules from 'core/vdom/modules/index'
import platformModules from 'web/runtime/modules/index'

// the directive module should be applied last, after all
// built-in modules have been applied.
const modules = platformModules.concat(baseModules)

export const patch: Function = createPatchFunction({ nodeOps, modules })
import { inBrowser, isIE9 } from 'core/util/index'
import { addClass, removeClass } from 'web/runtime/class-util'
import { remove, extend, cached } from 'shared/util'

export function resolveTransition(
  def?: string | Record<string, any>
): Record<string, any> | undefined {
  if (!def) {
    return
  }
  /* istanbul ignore else */
  if (typeof def === 'object') {
    const res = {}
    if (def.css !== false) {
      extend(res, autoCssTransition(def.name || 'v'))
    }
    extend(res, def)
    return res
  } else if (typeof def === 'string') {
    return autoCssTransition(def)
  }
}

const autoCssTransition: (name: string) => Object = cached(name => {
  return {
    enterClass: `${name}-enter`,
    enterToClass: `${name}-enter-to`,
    enterActiveClass: `${name}-enter-active`,
    leaveClass: `${name}-leave`,
    leaveToClass: `${name}-leave-to`,
    leaveActiveClass: `${name}-leave-active`
  }
})

export const hasTransition = inBrowser && !isIE9
const TRANSITION = 'transition'
const ANIMATION = 'animation'

// Transition property/event sniffing
export let transitionProp = 'transition'
export let transitionEndEvent = 'transitionend'
export let animationProp = 'animation'
export let animationEndEvent = 'animationend'
if (hasTransition) {
  /* istanbul ignore if */
  if (
    window.ontransitionend === undefined &&
    window.onwebkittransitionend !== undefined
  ) {
    transitionProp = 'WebkitTransition'
    transitionEndEvent = 'webkitTransitionEnd'
  }
  if (
    window.onanimationend === undefined &&
    window.onwebkitanimationend !== undefined
  ) {
    animationProp = 'WebkitAnimation'
    animationEndEvent = 'webkitAnimationEnd'
  }
}

// binding to window is necessary to make hot reload work in IE in strict mode
const raf = inBrowser
  ? window.requestAnimationFrame
    ? window.requestAnimationFrame.bind(window)
    : setTimeout
  : /* istanbul ignore next */ fn => fn()

export function nextFrame(fn: Function) {
  raf(() => {
    // @ts-expect-error
    raf(fn)
  })
}

export function addTransitionClass(el: any, cls: string) {
  const transitionClasses =
    el._transitionClasses || (el._transitionClasses = [])
  if (transitionClasses.indexOf(cls) < 0) {
    transitionClasses.push(cls)
    addClass(el, cls)
  }
}

export function removeTransitionClass(el: any, cls: string) {
  if (el._transitionClasses) {
    remove(el._transitionClasses, cls)
  }
  removeClass(el, cls)
}

export function whenTransitionEnds(
  el: Element,
  expectedType: string | undefined,
  cb: Function
) {
  const { type, timeout, propCount } = getTransitionInfo(el, expectedType)
  if (!type) return cb()
  const event: string =
    type === TRANSITION ? transitionEndEvent : animationEndEvent
  let ended = 0
  const end = () => {
    el.removeEventListener(event, onEnd)
    cb()
  }
  const onEnd = e => {
    if (e.target === el) {
      if (++ended >= propCount) {
        end()
      }
    }
  }
  setTimeout(() => {
    if (ended < propCount) {
      end()
    }
  }, timeout + 1)
  el.addEventListener(event, onEnd)
}

const transformRE = /\b(transform|all)(,|$)/

export function getTransitionInfo(
  el: Element,
  expectedType?: string
): {
  type?: string | null
  propCount: number
  timeout: number
  hasTransform: boolean
} {
  const styles: any = window.getComputedStyle(el)
  // JSDOM may return undefined for transition properties
  const transitionDelays: Array<string> = (
    styles[transitionProp + 'Delay'] || ''
  ).split(', ')
  const transitionDurations: Array<string> = (
    styles[transitionProp + 'Duration'] || ''
  ).split(', ')
  const transitionTimeout: number = getTimeout(
    transitionDelays,
    transitionDurations
  )
  const animationDelays: Array<string> = (
    styles[animationProp + 'Delay'] || ''
  ).split(', ')
  const animationDurations: Array<string> = (
    styles[animationProp + 'Duration'] || ''
  ).split(', ')
  const animationTimeout: number = getTimeout(
    animationDelays,
    animationDurations
  )

  let type: string | undefined | null
  let timeout = 0
  let propCount = 0
  /* istanbul ignore if */
  if (expectedType === TRANSITION) {
    if (transitionTimeout > 0) {
      type = TRANSITION
      timeout = transitionTimeout
      propCount = transitionDurations.length
    }
  } else if (expectedType === ANIMATION) {
    if (animationTimeout > 0) {
      type = ANIMATION
      timeout = animationTimeout
      propCount = animationDurations.length
    }
  } else {
    timeout = Math.max(transitionTimeout, animationTimeout)
    type =
      timeout > 0
        ? transitionTimeout > animationTimeout
          ? TRANSITION
          : ANIMATION
        : null
    propCount = type
      ? type === TRANSITION
        ? transitionDurations.length
        : animationDurations.length
      : 0
  }
  const hasTransform: boolean =
    type === TRANSITION && transformRE.test(styles[transitionProp + 'Property'])
  return {
    type,
    timeout,
    propCount,
    hasTransform
  }
}

function getTimeout(delays: Array<string>, durations: Array<string>): number {
  /* istanbul ignore next */
  while (delays.length < durations.length) {
    delays = delays.concat(delays)
  }

  return Math.max.apply(
    null,
    durations.map((d, i) => {
      return toMs(d) + toMs(delays[i])
    })
  )
}

// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
// in a locale-dependent way, using a comma instead of a dot.
// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
// as a floor function) causing unexpected behaviors
function toMs(s: string): number {
  return Number(s.slice(0, -1).replace(',', '.')) * 1000
}
import { makeMap } from 'shared/util'

// these are reserved for web because they are directly compiled away
// during template compilation
export const isReservedAttr = makeMap('style,class')

// attributes that should be using props for binding
const acceptValue = makeMap('input,textarea,option,select,progress')
export const mustUseProp = (
  tag: string,
  type?: string | null,
  attr?: string
): boolean => {
  return (
    (attr === 'value' && acceptValue(tag) && type !== 'button') ||
    (attr === 'selected' && tag === 'option') ||
    (attr === 'checked' && tag === 'input') ||
    (attr === 'muted' && tag === 'video')
  )
}

export const isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck')

const isValidContentEditableValue = makeMap(
  'events,caret,typing,plaintext-only'
)

export const convertEnumeratedValue = (key: string, value: any) => {
  return isFalsyAttrValue(value) || value === 'false'
    ? 'false'
    : // allow arbitrary string value for contenteditable
    key === 'contenteditable' && isValidContentEditableValue(value)
    ? value
    : 'true'
}

export const isBooleanAttr = makeMap(
  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
    'required,reversed,scoped,seamless,selected,sortable,' +
    'truespeed,typemustmatch,visible'
)

export const xlinkNS = 'http://www.w3.org/1999/xlink'

export const isXlink = (name: string): boolean => {
  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'
}

export const getXlinkProp = (name: string): string => {
  return isXlink(name) ? name.slice(6, name.length) : ''
}

export const isFalsyAttrValue = (val: any): boolean => {
  return val == null || val === false
}
import VNode from 'core/vdom/vnode'
import { isDef, isObject } from 'shared/util'
import type { VNodeData, VNodeWithData } from 'types/vnode'

export function genClassForVnode(vnode: VNodeWithData): string {
  let data = vnode.data
  let parentNode: VNode | VNodeWithData | undefined = vnode
  let childNode: VNode | VNodeWithData = vnode
  while (isDef(childNode.componentInstance)) {
    childNode = childNode.componentInstance._vnode!
    if (childNode && childNode.data) {
      data = mergeClassData(childNode.data, data)
    }
  }
  // @ts-expect-error parentNode.parent not VNodeWithData
  while (isDef((parentNode = parentNode.parent))) {
    if (parentNode && parentNode.data) {
      data = mergeClassData(data, parentNode.data)
    }
  }
  return renderClass(data.staticClass!, data.class)
}

function mergeClassData(
  child: VNodeData,
  parent: VNodeData
): {
  staticClass: string
  class: any
} {
  return {
    staticClass: concat(child.staticClass, parent.staticClass),
    class: isDef(child.class) ? [child.class, parent.class] : parent.class
  }
}

export function renderClass(
  staticClass: string | null | undefined,
  dynamicClass: any
): string {
  if (isDef(staticClass) || isDef(dynamicClass)) {
    return concat(staticClass, stringifyClass(dynamicClass))
  }
  /* istanbul ignore next */
  return ''
}

export function concat(a?: string | null, b?: string | null): string {
  return a ? (b ? a + ' ' + b : a) : b || ''
}

export function stringifyClass(value: any): string {
  if (Array.isArray(value)) {
    return stringifyArray(value)
  }
  if (isObject(value)) {
    return stringifyObject(value)
  }
  if (typeof value === 'string') {
    return value
  }
  /* istanbul ignore next */
  return ''
}

function stringifyArray(value: Array<any>): string {
  let res = ''
  let stringified
  for (let i = 0, l = value.length; i < l; i++) {
    if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
      if (res) res += ' '
      res += stringified
    }
  }
  return res
}

function stringifyObject(value: Object): string {
  let res = ''
  for (const key in value) {
    if (value[key]) {
      if (res) res += ' '
      res += key
    }
  }
  return res
}
import { inBrowser } from 'core/util/index'

// check whether current browser encodes a char inside attribute values
let div
function getShouldDecode(href: boolean): boolean {
  div = div || document.createElement('div')
  div.innerHTML = href ? `<a href="\n"/>` : `<div a="\n"/>`
  return div.innerHTML.indexOf('&#10;') > 0
}

// #3663: IE encodes newlines inside attribute values while other browsers don't
export const shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false
// #6828: chrome encodes content in a[href]
export const shouldDecodeNewlinesForHref = inBrowser
  ? getShouldDecode(true)
  : false
import { inBrowser } from 'core/util/env'
import { makeMap } from 'shared/util'

export const namespaceMap = {
  svg: 'http://www.w3.org/2000/svg',
  math: 'http://www.w3.org/1998/Math/MathML'
}

export const isHTMLTag = makeMap(
  'html,body,base,head,link,meta,style,title,' +
    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
    'embed,object,param,source,canvas,script,noscript,del,ins,' +
    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
    'output,progress,select,textarea,' +
    'details,dialog,menu,menuitem,summary,' +
    'content,element,shadow,template,blockquote,iframe,tfoot'
)

// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
export const isSVG = makeMap(
  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
  true
)

export const isPreTag = (tag?: string): boolean => tag === 'pre'

export const isReservedTag = (tag: string): boolean | undefined => {
  return isHTMLTag(tag) || isSVG(tag)
}

export function getTagNamespace(tag: string): string | undefined {
  if (isSVG(tag)) {
    return 'svg'
  }
  // basic support for MathML
  // note it doesn't support other MathML elements being component roots
  if (tag === 'math') {
    return 'math'
  }
}

const unknownElementCache = Object.create(null)
export function isUnknownElement(tag: string): boolean {
  /* istanbul ignore if */
  if (!inBrowser) {
    return true
  }
  if (isReservedTag(tag)) {
    return false
  }
  tag = tag.toLowerCase()
  /* istanbul ignore if */
  if (unknownElementCache[tag] != null) {
    return unknownElementCache[tag]
  }
  const el = document.createElement(tag)
  if (tag.indexOf('-') > -1) {
    // http://stackoverflow.com/a/28210364/1070244
    return (unknownElementCache[tag] =
      el.constructor === window.HTMLUnknownElement ||
      el.constructor === window.HTMLElement)
  } else {
    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))
  }
}

export const isTextInputType = makeMap(
  'text,number,password,search,email,tel,url'
)
import { warn } from 'core/util/index'

export * from './attrs'
export * from './class'
export * from './element'

/**
 * Query an element selector if it's not an element already.
 */
export function query(el: string | Element): Element {
  if (typeof el === 'string') {
    const selected = document.querySelector(el)
    if (!selected) {
      __DEV__ && warn('Cannot find element: ' + el)
      return document.createElement('div')
    }
    return selected
  } else {
    return el
  }
}
import VNode from 'core/vdom/vnode'
import { cached, extend, toObject } from 'shared/util'
import type { VNodeData, VNodeWithData } from 'types/vnode'

export const parseStyleText = cached(function (cssText) {
  const res = {}
  const listDelimiter = /;(?![^(]*\))/g
  const propertyDelimiter = /:(.+)/
  cssText.split(listDelimiter).forEach(function (item) {
    if (item) {
      const tmp = item.split(propertyDelimiter)
      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim())
    }
  })
  return res
})

// merge static and dynamic style data on the same vnode
function normalizeStyleData(data: VNodeData): Record<string, any> {
  const style = normalizeStyleBinding(data.style)
  // static style is pre-processed into an object during compilation
  // and is always a fresh object, so it's safe to merge into it
  return data.staticStyle ? extend(data.staticStyle, style) : style
}

// normalize possible array / string values into Object
export function normalizeStyleBinding(bindingStyle: any): Record<string, any> {
  if (Array.isArray(bindingStyle)) {
    return toObject(bindingStyle)
  }
  if (typeof bindingStyle === 'string') {
    return parseStyleText(bindingStyle)
  }
  return bindingStyle
}

/**
 * parent component style should be after child's
 * so that parent component's style could override it
 */
export function getStyle(vnode: VNodeWithData, checkChild: boolean): Object {
  const res = {}
  let styleData

  if (checkChild) {
    let childNode: VNodeWithData | VNode = vnode
    while (childNode.componentInstance) {
      childNode = childNode.componentInstance._vnode!
      if (
        childNode &&
        childNode.data &&
        (styleData = normalizeStyleData(childNode.data))
      ) {
        extend(res, styleData)
      }
    }
  }

  if ((styleData = normalizeStyleData(vnode.data))) {
    extend(res, styleData)
  }

  let parentNode: VNodeWithData | VNode | undefined = vnode
  // @ts-expect-error parentNode.parent not VNodeWithData
  while ((parentNode = parentNode.parent)) {
    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
      extend(res, styleData)
    }
  }
  return res
}
export const SSR_ATTR = 'data-server-rendered'

export const ASSET_TYPES = ['component', 'directive', 'filter'] as const

export const LIFECYCLE_HOOKS = [
  'beforeCreate',
  'created',
  'beforeMount',
  'mounted',
  'beforeUpdate',
  'updated',
  'beforeDestroy',
  'destroyed',
  'activated',
  'deactivated',
  'errorCaptured',
  'serverPrefetch',
  'renderTracked',
  'renderTriggered'
] as const
export const emptyObject: Record<string, any> = Object.freeze({})

export const isArray = Array.isArray

// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
export function isUndef(v: any): v is undefined | null {
  return v === undefined || v === null
}

export function isDef<T>(v: T): v is NonNullable<T> {
  return v !== undefined && v !== null
}

export function isTrue(v: any): boolean {
  return v === true
}

export function isFalse(v: any): boolean {
  return v === false
}

/**
 * Check if value is primitive.
 */
export function isPrimitive(value: any): boolean {
  return (
    typeof value === 'string' ||
    typeof value === 'number' ||
    // $flow-disable-line
    typeof value === 'symbol' ||
    typeof value === 'boolean'
  )
}

export function isFunction(value: any): value is (...args: any[]) => any {
  return typeof value === 'function'
}

/**
 * Quick object check - this is primarily used to tell
 * objects from primitive values when we know the value
 * is a JSON-compliant type.
 */
export function isObject(obj: any): boolean {
  return obj !== null && typeof obj === 'object'
}

/**
 * Get the raw type string of a value, e.g., [object Object].
 */
const _toString = Object.prototype.toString

export function toRawType(value: any): string {
  return _toString.call(value).slice(8, -1)
}

/**
 * Strict object type check. Only returns true
 * for plain JavaScript objects.
 */
export function isPlainObject(obj: any): boolean {
  return _toString.call(obj) === '[object Object]'
}

export function isRegExp(v: any): v is RegExp {
  return _toString.call(v) === '[object RegExp]'
}

/**
 * Check if val is a valid array index.
 */
export function isValidArrayIndex(val: any): boolean {
  const n = parseFloat(String(val))
  return n >= 0 && Math.floor(n) === n && isFinite(val)
}

export function isPromise(val: any): val is Promise<any> {
  return (
    isDef(val) &&
    typeof val.then === 'function' &&
    typeof val.catch === 'function'
  )
}

/**
 * Convert a value to a string that is actually rendered.
 */
export function toString(val: any): string {
  return val == null
    ? ''
    : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
    ? JSON.stringify(val, null, 2)
    : String(val)
}

/**
 * Convert an input value to a number for persistence.
 * If the conversion fails, return original string.
 */
export function toNumber(val: string): number | string {
  const n = parseFloat(val)
  return isNaN(n) ? val : n
}

/**
 * Make a map and return a function for checking if a key
 * is in that map.
 */
export function makeMap(
  str: string,
  expectsLowerCase?: boolean
): (key: string) => true | undefined {
  const map = Object.create(null)
  const list: Array<string> = str.split(',')
  for (let i = 0; i < list.length; i++) {
    map[list[i]] = true
  }
  return expectsLowerCase ? val => map[val.toLowerCase()] : val => map[val]
}

/**
 * Check if a tag is a built-in tag.
 */
export const isBuiltInTag = makeMap('slot,component', true)

/**
 * Check if an attribute is a reserved attribute.
 */
export const isReservedAttribute = makeMap('key,ref,slot,slot-scope,is')

/**
 * Remove an item from an array.
 */
export function remove(arr: Array<any>, item: any): Array<any> | void {
  const len = arr.length
  if (len) {
    // fast path for the only / last item
    if (item === arr[len - 1]) {
      arr.length = len - 1
      return
    }
    const index = arr.indexOf(item)
    if (index > -1) {
      return arr.splice(index, 1)
    }
  }
}

/**
 * Check whether an object has the property.
 */
const hasOwnProperty = Object.prototype.hasOwnProperty
export function hasOwn(obj: Object | Array<any>, key: string): boolean {
  return hasOwnProperty.call(obj, key)
}

/**
 * Create a cached version of a pure function.
 */
export function cached<R>(fn: (str: string) => R): (sr: string) => R {
  const cache: Record<string, R> = Object.create(null)
  return function cachedFn(str: string) {
    const hit = cache[str]
    return hit || (cache[str] = fn(str))
  }
}

/**
 * Camelize a hyphen-delimited string.
 */
const camelizeRE = /-(\w)/g
export const camelize = cached((str: string): string => {
  return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''))
})

/**
 * Capitalize a string.
 */
export const capitalize = cached((str: string): string => {
  return str.charAt(0).toUpperCase() + str.slice(1)
})

/**
 * Hyphenate a camelCase string.
 */
const hyphenateRE = /\B([A-Z])/g
export const hyphenate = cached((str: string): string => {
  return str.replace(hyphenateRE, '-$1').toLowerCase()
})

/**
 * Simple bind polyfill for environments that do not support it,
 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
 * since native bind is now performant enough in most browsers.
 * But removing it would mean breaking code that was able to run in
 * PhantomJS 1.x, so this must be kept for backward compatibility.
 */

/* istanbul ignore next */
function polyfillBind(fn: Function, ctx: Object): Function {
  function boundFn(a: any) {
    const l = arguments.length
    return l
      ? l > 1
        ? fn.apply(ctx, arguments)
        : fn.call(ctx, a)
      : fn.call(ctx)
  }

  boundFn._length = fn.length
  return boundFn
}

function nativeBind(fn: Function, ctx: Object): Function {
  return fn.bind(ctx)
}

// @ts-expect-error bind cannot be `undefined`
export const bind = Function.prototype.bind ? nativeBind : polyfillBind

/**
 * Convert an Array-like object to a real Array.
 */
export function toArray(list: any, start?: number): Array<any> {
  start = start || 0
  let i = list.length - start
  const ret: Array<any> = new Array(i)
  while (i--) {
    ret[i] = list[i + start]
  }
  return ret
}

/**
 * Mix properties into target object.
 */
export function extend(
  to: Record<PropertyKey, any>,
  _from?: Record<PropertyKey, any>
): Record<PropertyKey, any> {
  for (const key in _from) {
    to[key] = _from[key]
  }
  return to
}

/**
 * Merge an Array of Objects into a single Object.
 */
export function toObject(arr: Array<any>): object {
  const res = {}
  for (let i = 0; i < arr.length; i++) {
    if (arr[i]) {
      extend(res, arr[i])
    }
  }
  return res
}

/* eslint-disable no-unused-vars */

/**
 * Perform no operation.
 * Stubbing args to make Flow happy without leaving useless transpiled code
 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
 */
export function noop(a?: any, b?: any, c?: any) {}

/**
 * Always return false.
 */
export const no = (a?: any, b?: any, c?: any) => false

/* eslint-enable no-unused-vars */

/**
 * Return the same value.
 */
export const identity = (_: any) => _

/**
 * Generate a string containing static keys from compiler modules.
 */
export function genStaticKeys(
  modules: Array<{ staticKeys?: string[] } /* ModuleOptions */>
): string {
  return modules
    .reduce((keys, m) => {
      return keys.concat(m.staticKeys || [])
    }, [] as string[])
    .join(',')
}

/**
 * Check if two values are loosely equal - that is,
 * if they are plain objects, do they have the same shape?
 */
export function looseEqual(a: any, b: any): boolean {
  if (a === b) return true
  const isObjectA = isObject(a)
  const isObjectB = isObject(b)
  if (isObjectA && isObjectB) {
    try {
      const isArrayA = Array.isArray(a)
      const isArrayB = Array.isArray(b)
      if (isArrayA && isArrayB) {
        return (
          a.length === b.length &&
          a.every((e: any, i: any) => {
            return looseEqual(e, b[i])
          })
        )
      } else if (a instanceof Date && b instanceof Date) {
        return a.getTime() === b.getTime()
      } else if (!isArrayA && !isArrayB) {
        const keysA = Object.keys(a)
        const keysB = Object.keys(b)
        return (
          keysA.length === keysB.length &&
          keysA.every(key => {
            return looseEqual(a[key], b[key])
          })
        )
      } else {
        /* istanbul ignore next */
        return false
      }
    } catch (e: any) {
      /* istanbul ignore next */
      return false
    }
  } else if (!isObjectA && !isObjectB) {
    return String(a) === String(b)
  } else {
    return false
  }
}

/**
 * Return the first index at which a loosely equal value can be
 * found in the array (if value is a plain object, the array must
 * contain an object of the same shape), or -1 if it is not present.
 */
export function looseIndexOf(arr: Array<unknown>, val: unknown): number {
  for (let i = 0; i < arr.length; i++) {
    if (looseEqual(arr[i], val)) return i
  }
  return -1
}

/**
 * Ensure a function is called only once.
 */
export function once<T extends (...args: any[]) => any>(fn: T): T {
  let called = false
  return function () {
    if (!called) {
      called = true
      fn.apply(this, arguments as any)
    }
  } as any
}

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
export function hasChanged(x: unknown, y: unknown): boolean {
  if (x === y) {
    return x === 0 && 1 / x !== 1 / (y as number)
  } else {
    return x === x || y === y
  }
}
import { BindingMetadata } from 'sfc/types'

export type CompilerOptions = {
  warn?: Function // allow customizing warning in different environments; e.g. node
  modules?: Array<ModuleOptions> // platform specific modules; e.g. style; class
  directives?: { [key: string]: Function } // platform specific directives
  staticKeys?: string // a list of AST properties to be considered static; for optimization
  isUnaryTag?: (tag: string) => boolean | undefined // check if a tag is unary for the platform
  canBeLeftOpenTag?: (tag: string) => boolean | undefined // check if a tag can be left opened
  isReservedTag?: (tag: string) => boolean | undefined // check if a tag is a native for the platform
  preserveWhitespace?: boolean // preserve whitespace between elements? (Deprecated)
  whitespace?: 'preserve' | 'condense' // whitespace handling strategy
  optimize?: boolean // optimize static content?

  // web specific
  mustUseProp?: (tag: string, type: string | null, name: string) => boolean // check if an attribute should be bound as a property
  isPreTag?: (attr: string) => boolean | null // check if a tag needs to preserve whitespace
  getTagNamespace?: (tag: string) => string | undefined // check the namespace for a tag
  expectHTML?: boolean // only false for non-web builds
  isFromDOM?: boolean
  shouldDecodeTags?: boolean
  shouldDecodeNewlines?: boolean
  shouldDecodeNewlinesForHref?: boolean
  outputSourceRange?: boolean
  shouldKeepComment?: boolean

  // runtime user-configurable
  delimiters?: [string, string] // template delimiters
  comments?: boolean // preserve comments in template

  // for ssr optimization compiler
  scopeId?: string

  // SFC analyzed script bindings from `compileScript()`
  bindings?: BindingMetadata
}

export type WarningMessage = {
  msg: string
  start?: number
  end?: number
}

export type CompiledResult = {
  ast: ASTElement | null
  render: string
  staticRenderFns: Array<string>
  stringRenderFns?: Array<string>
  errors?: Array<string | WarningMessage>
  tips?: Array<string | WarningMessage>
}

export type ModuleOptions = {
  // transform an AST node before any attributes are processed
  // returning an ASTElement from pre/transforms replaces the element
  preTransformNode?: (el: ASTElement) => ASTElement | null | void
  // transform an AST node after built-ins like v-if, v-for are processed
  transformNode?: (el: ASTElement) => ASTElement | null | void
  // transform an AST node after its children have been processed
  // cannot return replacement in postTransform because tree is already finalized
  postTransformNode?: (el: ASTElement) => void
  genData?: (el: ASTElement) => string // generate extra data string for an element
  transformCode?: (el: ASTElement, code: string) => string // further transform generated code for an element
  staticKeys?: Array<string> // AST properties to be considered static
}

export type ASTModifiers = { [key: string]: boolean }
export type ASTIfCondition = { exp: string | null; block: ASTElement }
export type ASTIfConditions = Array<ASTIfCondition>

export type ASTAttr = {
  name: string
  value: any
  dynamic?: boolean
  start?: number
  end?: number
}

export type ASTElementHandler = {
  value: string
  params?: Array<any>
  modifiers: ASTModifiers | null
  dynamic?: boolean
  start?: number
  end?: number
}

export type ASTElementHandlers = {
  [key: string]: ASTElementHandler | Array<ASTElementHandler>
}

export type ASTDirective = {
  name: string
  rawName: string
  value: string
  arg: string | null
  isDynamicArg: boolean
  modifiers: ASTModifiers | null
  start?: number
  end?: number
}

export type ASTNode = ASTElement | ASTText | ASTExpression

export type ASTElement = {
  type: 1
  tag: string
  attrsList: Array<ASTAttr>
  attrsMap: { [key: string]: any }
  rawAttrsMap: { [key: string]: ASTAttr }
  parent: ASTElement | void
  children: Array<ASTNode>

  start?: number
  end?: number

  processed?: true

  static?: boolean
  staticRoot?: boolean
  staticInFor?: boolean
  staticProcessed?: boolean
  hasBindings?: boolean

  text?: string
  attrs?: Array<ASTAttr>
  dynamicAttrs?: Array<ASTAttr>
  props?: Array<ASTAttr>
  plain?: boolean
  pre?: true
  ns?: string

  component?: string
  inlineTemplate?: true
  transitionMode?: string | null
  slotName?: string | null
  slotTarget?: string | null
  slotTargetDynamic?: boolean
  slotScope?: string | null
  scopedSlots?: { [name: string]: ASTElement }

  ref?: string
  refInFor?: boolean

  if?: string
  ifProcessed?: boolean
  elseif?: string
  else?: true
  ifConditions?: ASTIfConditions

  for?: string
  forProcessed?: boolean
  key?: string
  alias?: string
  iterator1?: string
  iterator2?: string

  staticClass?: string
  classBinding?: string
  staticStyle?: string
  styleBinding?: string
  events?: ASTElementHandlers
  nativeEvents?: ASTElementHandlers

  transition?: string | true
  transitionOnAppear?: boolean

  model?: {
    value: string
    callback: string
    expression: string
  }

  directives?: Array<ASTDirective>

  forbidden?: true
  once?: true
  onceProcessed?: boolean
  wrapData?: (code: string) => string
  wrapListeners?: (code: string) => string

  // 2.4 ssr optimization
  ssrOptimizability?: number
}

export type ASTExpression = {
  type: 2
  expression: string
  text: string
  tokens: Array<string | Object>
  static?: boolean
  // 2.4 ssr optimization
  ssrOptimizability?: number
  start?: number
  end?: number
}

export type ASTText = {
  type: 3
  text: string
  static?: boolean
  isComment?: boolean
  // 2.4 ssr optimization
  ssrOptimizability?: number
  start?: number
  end?: number
}
import type VNode from 'core/vdom/vnode'
import type Watcher from 'core/observer/watcher'
import { ComponentOptions } from './options'
import { SetupContext } from 'v3/apiSetup'
import { ScopedSlotsData, VNodeChildren, VNodeData } from './vnode'
import { GlobalAPI } from './global-api'
import { EffectScope } from 'v3/reactivity/effectScope'

// TODO this should be using the same as /component/

/**
 * @internal
 */
export declare class Component {
  constructor(options?: any)
  // constructor information
  static cid: number
  static options: Record<string, any>
  // extend
  static extend: GlobalAPI['extend']
  static superOptions: Record<string, any>
  static extendOptions: Record<string, any>
  static sealedOptions: Record<string, any>
  static super: typeof Component
  // assets
  static directive: GlobalAPI['directive']
  static component: GlobalAPI['component']
  static filter: GlobalAPI['filter']
  // functional context constructor
  static FunctionalRenderContext: Function
  static mixin: GlobalAPI['mixin']
  static use: GlobalAPI['use']

  // public properties
  $el: any // so that we can attach __vue__ to it
  $data: Record<string, any>
  $props: Record<string, any>
  $options: ComponentOptions
  $parent: Component | undefined
  $root: Component
  $children: Array<Component>
  $refs: {
    [key: string]: Component | Element | Array<Component | Element> | undefined
  }
  $slots: { [key: string]: Array<VNode> }
  $scopedSlots: { [key: string]: () => VNode[] | undefined }
  $vnode: VNode // the placeholder node for the component in parent's render tree
  $attrs: { [key: string]: string }
  $listeners: Record<string, Function | Array<Function>>
  $isServer: boolean

  // public methods
  $mount: (
    el?: Element | string,
    hydrating?: boolean
  ) => Component & { [key: string]: any }
  $forceUpdate: () => void
  $destroy: () => void
  $set: <T>(
    target: Record<string, any> | Array<T>,
    key: string | number,
    val: T
  ) => T
  $delete: <T>(
    target: Record<string, any> | Array<T>,
    key: string | number
  ) => void
  $watch: (
    expOrFn: string | (() => any),
    cb: Function,
    options?: Record<string, any>
  ) => Function
  $on: (event: string | Array<string>, fn: Function) => Component
  $once: (event: string, fn: Function) => Component
  $off: (event?: string | Array<string>, fn?: Function) => Component
  $emit: (event: string, ...args: Array<any>) => Component
  $nextTick: (fn: (...args: any[]) => any) => void | Promise<any>
  $createElement: (
    tag?: string | Component,
    data?: Record<string, any>,
    children?: VNodeChildren
  ) => VNode

  // private properties
  _uid: number | string
  _name: string // this only exists in dev mode
  _isVue: true
  __v_skip: true
  _self: Component
  _renderProxy: Component
  _renderContext?: Component
  _watcher: Watcher | null
  _scope: EffectScope
  _computedWatchers: { [key: string]: Watcher }
  _data: Record<string, any>
  _props: Record<string, any>
  _events: Record<string, any>
  _inactive: boolean | null
  _directInactive: boolean
  _isMounted: boolean
  _isDestroyed: boolean
  _isBeingDestroyed: boolean
  _vnode?: VNode | null // self root node
  _staticTrees?: Array<VNode> | null // v-once cached trees
  _hasHookEvent: boolean
  _provided: Record<string, any>
  // _virtualComponents?: { [key: string]: Component };

  // @v3
  _setupState?: Record<string, any>
  _setupProxy?: Record<string, any>
  _setupContext?: SetupContext
  _attrsProxy?: Record<string, any>
  _listenersProxy?: Record<string, Function | Function[]>
  _slotsProxy?: Record<string, () => VNode[]>
  _preWatchers?: Watcher[]

  // private methods

  // lifecycle
  _init: Function
  _mount: (el?: Element | void, hydrating?: boolean) => Component
  _update: (vnode: VNode, hydrating?: boolean) => void

  // rendering
  _render: () => VNode

  __patch__: (
    a: Element | VNode | void | null,
    b: VNode | null,
    hydrating?: boolean,
    removeOnly?: boolean,
    parentElm?: any,
    refElm?: any
  ) => any

  // createElement

  // _c is internal that accepts `normalizationType` optimization hint
  _c: (
    vnode?: VNode,
    data?: VNodeData,
    children?: VNodeChildren,
    normalizationType?: number
  ) => VNode | void

  // renderStatic
  _m: (index: number, isInFor?: boolean) => VNode | VNodeChildren
  // markOnce
  _o: (
    vnode: VNode | Array<VNode>,
    index: number,
    key: string
  ) => VNode | VNodeChildren
  // toString
  _s: (value: any) => string
  // text to VNode
  _v: (value: string | number) => VNode
  // toNumber
  _n: (value: string) => number | string
  // empty vnode
  _e: () => VNode
  // loose equal
  _q: (a: any, b: any) => boolean
  // loose indexOf
  _i: (arr: Array<any>, val: any) => number
  // resolveFilter
  _f: (id: string) => Function
  // renderList
  _l: (val: any, render: Function) => Array<VNode> | null
  // renderSlot
  _t: (
    name: string,
    fallback?: Array<VNode>,
    props?: Record<string, any>
  ) => Array<VNode> | null
  // apply v-bind object
  _b: (
    data: any,
    tag: string,
    value: any,
    asProp: boolean,
    isSync?: boolean
  ) => VNodeData
  // apply v-on object
  _g: (data: any, value: any) => VNodeData
  // check custom keyCode
  _k: (
    eventKeyCode: number,
    key: string,
    builtInAlias?: number | Array<number>,
    eventKeyName?: string
  ) => boolean | null
  // resolve scoped slots
  _u: (
    scopedSlots: ScopedSlotsData,
    res?: Record<string, any>
  ) => { [key: string]: Function }

  // SSR specific
  _ssrNode: Function
  _ssrList: Function
  _ssrEscape: Function
  _ssrAttr: Function
  _ssrAttrs: Function
  _ssrDOMProps: Function
  _ssrClass: Function
  _ssrStyle: Function

  // allow dynamic method registration
  // [key: string]: any
}
import { Config } from 'core/config'
import { Component } from './component'

/**
 * @internal
 */
export interface GlobalAPI {
  // new(options?: any): Component
  (options?: any): void
  cid: number
  options: Record<string, any>
  config: Config
  util: Object

  extend: (options: typeof Component | object) => typeof Component
  set: <T>(target: Object | Array<T>, key: string | number, value: T) => T
  delete: <T>(target: Object | Array<T>, key: string | number) => void
  nextTick: (fn: Function, context?: Object) => void | Promise<any>
  use: (plugin: Function | Object) => GlobalAPI
  mixin: (mixin: Object) => GlobalAPI
  compile: (template: string) => {
    render: Function
    staticRenderFns: Array<Function>
  }

  directive: (id: string, def?: Function | Object) => Function | Object | void
  component: (
    id: string,
    def?: typeof Component | Object
  ) => typeof Component | void
  filter: (id: string, def?: Function) => Function | void

  observable: <T>(value: T) => T

  // allow dynamic method registration
  [key: string]: any
}
import VNode from 'core/vdom/vnode'
import { DebuggerEvent } from 'v3/debug'
import { SetupContext } from 'v3/apiSetup'
import { Component } from './component'

export type InternalComponentOptions = {
  _isComponent: true
  parent: Component
  _parentVnode: VNode
  render?: Function
  staticRenderFns?: Array<Function>
}

type InjectKey = string | Symbol

/**
 * @internal
 */
export type ComponentOptions = {
  // v3
  setup?: (props: Record<string, any>, ctx: SetupContext) => unknown

  [key: string]: any

  componentId?: string

  // data
  data: object | Function | void
  props?:
    | string[]
    | Record<string, Function | Array<Function> | null | PropOptions>
  propsData?: object
  computed?: {
    [key: string]:
      | Function
      | {
          get?: Function
          set?: Function
          cache?: boolean
        }
  }
  methods?: { [key: string]: Function }
  watch?: { [key: string]: Function | string }

  // DOM
  el?: string | Element
  template?: string
  render: (h: () => VNode) => VNode
  renderError?: (h: () => VNode, err: Error) => VNode
  staticRenderFns?: Array<() => VNode>

  // lifecycle
  beforeCreate?: Function
  created?: Function
  beforeMount?: Function
  mounted?: Function
  beforeUpdate?: Function
  updated?: Function
  activated?: Function
  deactivated?: Function
  beforeDestroy?: Function
  destroyed?: Function
  errorCaptured?: () => boolean | void
  serverPrefetch?: Function
  renderTracked?(e: DebuggerEvent): void
  renderTriggerd?(e: DebuggerEvent): void

  // assets
  directives?: { [key: string]: object }
  components?: { [key: string]: Component }
  transitions?: { [key: string]: object }
  filters?: { [key: string]: Function }

  // context
  provide?: Record<string | symbol, any> | (() => Record<string | symbol, any>)
  inject?:
    | { [key: string]: InjectKey | { from?: InjectKey; default?: any } }
    | Array<string>

  // component v-model customization
  model?: {
    prop?: string
    event?: string
  }

  // misc
  parent?: Component
  mixins?: Array<object>
  name?: string
  extends?: Component | object
  delimiters?: [string, string]
  comments?: boolean
  inheritAttrs?: boolean

  // Legacy API
  abstract?: any

  // private
  _isComponent?: true
  _propKeys?: Array<string>
  _parentVnode?: VNode
  _parentListeners?: object | null
  _renderChildren?: Array<VNode> | null
  _componentTag: string | null
  _scopeId: string | null
  _base: typeof Component
}

export type PropOptions = {
  type?: Function | Array<Function> | null
  default?: any
  required?: boolean | null
  validator?: Function | null
}
import VNode from 'core/vdom/vnode'
import { Component } from './component'

export type ComponentWithCacheContext = {
  type: 'ComponentWithCache'
  bufferIndex: number
  buffer: Array<string>
  key: string
}

export type ElementContext = {
  type: 'Element'
  children: Array<VNode>
  rendered: number
  endTag: string
  total: number
}

export type ComponentContext = {
  type: 'Component'
  prevActive: Component
}

export type RenderState =
  | ComponentContext
  | ComponentWithCacheContext
  | ElementContext
// If the the type T accepts type "any", output type Y, otherwise output type N.
// https://stackoverflow.com/questions/49927523/disallow-call-with-any/49928360#49928360
export type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N
import VNode from 'core/vdom/vnode'
import { Ref } from 'v3'
import { Component } from './component'
import { ASTModifiers } from './compiler'

/**
 * @internal
 */
export type VNodeChildren =
  | Array<null | VNode | string | number | VNodeChildren>
  | string

/**
 * @internal
 */
export type VNodeComponentOptions = {
  Ctor: typeof Component
  propsData?: Object
  listeners?: Record<string, Function | Function[]>
  children?: Array<VNode>
  tag?: string
}

/**
 * @internal
 */
export type MountedComponentVNode = VNode & {
  context: Component
  componentOptions: VNodeComponentOptions
  componentInstance: Component
  parent: VNode
  data: VNodeData
}

/**
 * @internal
 */
// interface for vnodes in update modules
export type VNodeWithData = VNode & {
  tag: string
  data: VNodeData
  children: Array<VNode>
  text: void
  elm: any
  ns: string | void
  context: Component
  key: string | number | undefined
  parent?: VNodeWithData
  componentOptions?: VNodeComponentOptions
  componentInstance?: Component
  isRootInsert: boolean
}

// // interface for vnodes in update modules
// export type VNodeWithData = {
//   tag: string;
//   data: VNodeData;
//   children: Array<VNode>;
//   text: void;
//   elm: any;
//   ns: string | void;
//   context: Component;
//   key: string | number | undefined;
//   parent?: VNodeWithData;
//   componentOptions?: VNodeComponentOptions;
//   componentInstance?: Component;
//   isRootInsert: boolean;
// };

/**
 * @internal
 */
export interface VNodeData {
  key?: string | number
  slot?: string
  ref?: string | Ref | ((el: any) => void)
  is?: string
  pre?: boolean
  tag?: string
  staticClass?: string
  class?: any
  staticStyle?: { [key: string]: any }
  style?: string | Array<Object> | Object
  normalizedStyle?: Object
  props?: { [key: string]: any }
  attrs?: { [key: string]: string }
  domProps?: { [key: string]: any }
  hook?: { [key: string]: Function }
  on?: { [key: string]: Function | Array<Function> }
  nativeOn?: { [key: string]: Function | Array<Function> }
  transition?: Object
  show?: boolean // marker for v-show
  inlineTemplate?: {
    render: Function
    staticRenderFns: Array<Function>
  }
  directives?: Array<VNodeDirective>
  keepAlive?: boolean
  scopedSlots?: { [key: string]: Function }
  model?: {
    value: any
    callback: Function
  }

  [key: string]: any
}

/**
 * @internal
 */
export type VNodeDirective = {
  name: string
  rawName: string
  value?: any
  oldValue?: any
  arg?: string
  oldArg?: string
  modifiers?: ASTModifiers
  def?: Object
}

/**
 * @internal
 */
export type ScopedSlotsData = Array<
  { key: string; fn: Function } | ScopedSlotsData
>
import { warn, isFunction, isObject } from 'core/util'

interface AsyncComponentOptions {
  loader: Function
  loadingComponent?: any
  errorComponent?: any
  delay?: number
  timeout?: number
  suspensible?: boolean
  onError?: (
    error: Error,
    retry: () => void,
    fail: () => void,
    attempts: number
  ) => any
}

type AsyncComponentFactory = () => {
  component: Promise<any>
  loading?: any
  error?: any
  delay?: number
  timeout?: number
}

/**
 * v3-compatible async component API.
 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
 * because it relies on existing manual types
 */
export function defineAsyncComponent(
  source: (() => any) | AsyncComponentOptions
): AsyncComponentFactory {
  if (isFunction(source)) {
    source = { loader: source } as AsyncComponentOptions
  }

  const {
    loader,
    loadingComponent,
    errorComponent,
    delay = 200,
    timeout, // undefined = never times out
    suspensible = false, // in Vue 3 default is true
    onError: userOnError
  } = source

  if (__DEV__ && suspensible) {
    warn(
      `The suspensiblbe option for async components is not supported in Vue2. It is ignored.`
    )
  }

  let pendingRequest: Promise<any> | null = null

  let retries = 0
  const retry = () => {
    retries++
    pendingRequest = null
    return load()
  }

  const load = (): Promise<any> => {
    let thisRequest: Promise<any>
    return (
      pendingRequest ||
      (thisRequest = pendingRequest =
        loader()
          .catch(err => {
            err = err instanceof Error ? err : new Error(String(err))
            if (userOnError) {
              return new Promise((resolve, reject) => {
                const userRetry = () => resolve(retry())
                const userFail = () => reject(err)
                userOnError(err, userRetry, userFail, retries + 1)
              })
            } else {
              throw err
            }
          })
          .then((comp: any) => {
            if (thisRequest !== pendingRequest && pendingRequest) {
              return pendingRequest
            }
            if (__DEV__ && !comp) {
              warn(
                `Async component loader resolved to undefined. ` +
                  `If you are using retry(), make sure to return its return value.`
              )
            }
            // interop module default
            if (
              comp &&
              (comp.__esModule || comp[Symbol.toStringTag] === 'Module')
            ) {
              comp = comp.default
            }
            if (__DEV__ && comp && !isObject(comp) && !isFunction(comp)) {
              throw new Error(`Invalid async component load result: ${comp}`)
            }
            return comp
          }))
    )
  }

  return () => {
    const component = load()

    return {
      component,
      delay,
      timeout,
      error: errorComponent,
      loading: loadingComponent
    }
  }
}
import { isFunction, warn } from 'core/util'
import { currentInstance } from './currentInstance'
import type { Component } from 'types/component'

export interface InjectionKey<T> extends Symbol {}

export function provide<T>(key: InjectionKey<T> | string | number, value: T) {
  if (!currentInstance) {
    if (__DEV__) {
      warn(`provide() can only be used inside setup().`)
    }
  } else {
    // TS doesn't allow symbol as index type
    resolveProvided(currentInstance)[key as string] = value
  }
}

export function resolveProvided(vm: Component): Record<string, any> {
  // by default an instance inherits its parent's provides object
  // but when it needs to provide values of its own, it creates its
  // own provides object using parent provides object as prototype.
  // this way in `inject` we can simply look up injections from direct
  // parent and let the prototype chain do the work.
  const existing = vm._provided
  const parentProvides = vm.$parent && vm.$parent._provided
  if (parentProvides === existing) {
    return (vm._provided = Object.create(parentProvides))
  } else {
    return existing
  }
}

export function inject<T>(key: InjectionKey<T> | string): T | undefined
export function inject<T>(
  key: InjectionKey<T> | string,
  defaultValue: T,
  treatDefaultAsFactory?: false
): T
export function inject<T>(
  key: InjectionKey<T> | string,
  defaultValue: T | (() => T),
  treatDefaultAsFactory: true
): T
export function inject(
  key: InjectionKey<any> | string,
  defaultValue?: unknown,
  treatDefaultAsFactory = false
) {
  // fallback to `currentRenderingInstance` so that this can be called in
  // a functional component
  const instance = currentInstance
  if (instance) {
    // #2400
    // to support `app.use` plugins,
    // fallback to appContext's `provides` if the instance is at root
    const provides = instance.$parent && instance.$parent._provided

    if (provides && (key as string | symbol) in provides) {
      // TS doesn't allow symbol as index type
      return provides[key as string]
    } else if (arguments.length > 1) {
      return treatDefaultAsFactory && isFunction(defaultValue)
        ? defaultValue.call(instance)
        : defaultValue
    } else if (__DEV__) {
      warn(`injection "${String(key)}" not found.`)
    }
  } else if (__DEV__) {
    warn(`inject() can only be used inside setup() or functional components.`)
  }
}
import { DebuggerEvent } from './debug'
import { Component } from 'types/component'
import { mergeLifecycleHook, warn } from '../core/util'
import { currentInstance } from './currentInstance'

function createLifeCycle<T extends (...args: any[]) => any = () => void>(
  hookName: string
) {
  return (fn: T, target: any = currentInstance) => {
    if (!target) {
      __DEV__ &&
        warn(
          `${formatName(
            hookName
          )} is called when there is no active component instance to be ` +
            `associated with. ` +
            `Lifecycle injection APIs can only be used during execution of setup().`
        )
      return
    }
    return injectHook(target, hookName, fn)
  }
}

function formatName(name: string) {
  if (name === 'beforeDestroy') {
    name = 'beforeUnmount'
  } else if (name === 'destroyed') {
    name = 'unmounted'
  }
  return `on${name[0].toUpperCase() + name.slice(1)}`
}

function injectHook(instance: Component, hookName: string, fn: () => void) {
  const options = instance.$options
  options[hookName] = mergeLifecycleHook(options[hookName], fn)
}

export const onBeforeMount = createLifeCycle('beforeMount')
export const onMounted = createLifeCycle('mounted')
export const onBeforeUpdate = createLifeCycle('beforeUpdate')
export const onUpdated = createLifeCycle('updated')
export const onBeforeUnmount = createLifeCycle('beforeDestroy')
export const onUnmounted = createLifeCycle('destroyed')
export const onActivated = createLifeCycle('activated')
export const onDeactivated = createLifeCycle('deactivated')
export const onServerPrefetch = createLifeCycle('serverPrefetch')

export const onRenderTracked =
  createLifeCycle<(e: DebuggerEvent) => any>('renderTracked')
export const onRenderTriggered =
  createLifeCycle<(e: DebuggerEvent) => any>('renderTriggered')

export type ErrorCapturedHook<TError = unknown> = (
  err: TError,
  instance: any,
  info: string
) => boolean | void

const injectErrorCapturedHook =
  createLifeCycle<ErrorCapturedHook<any>>('errorCaptured')

export function onErrorCaptured<TError = Error>(
  hook: ErrorCapturedHook<TError>,
  target: any = currentInstance
) {
  injectErrorCapturedHook(hook, target)
}
import { Component } from 'types/component'
import { PropOptions } from 'types/options'
import { popTarget, pushTarget } from '../core/observer/dep'
import { def, invokeWithErrorHandling, isReserved, warn } from '../core/util'
import VNode from '../core/vdom/vnode'
import {
  bind,
  emptyObject,
  isArray,
  isFunction,
  isObject
} from '../shared/util'
import { currentInstance, setCurrentInstance } from './currentInstance'
import { shallowReactive } from './reactivity/reactive'
import { proxyWithRefUnwrap } from './reactivity/ref'

/**
 * @internal
 */
export interface SetupContext {
  attrs: Record<string, any>
  listeners: Record<string, Function | Function[]>
  slots: Record<string, () => VNode[]>
  emit: (event: string, ...args: any[]) => any
  expose: (exposed: Record<string, any>) => void
}

export function initSetup(vm: Component) {
  const options = vm.$options
  const setup = options.setup
  if (setup) {
    const ctx = (vm._setupContext = createSetupContext(vm))

    setCurrentInstance(vm)
    pushTarget()
    const setupResult = invokeWithErrorHandling(
      setup,
      null,
      [vm._props || shallowReactive({}), ctx],
      vm,
      `setup`
    )
    popTarget()
    setCurrentInstance()

    if (isFunction(setupResult)) {
      // render function
      // @ts-ignore
      options.render = setupResult
    } else if (isObject(setupResult)) {
      // bindings
      if (__DEV__ && setupResult instanceof VNode) {
        warn(
          `setup() should not return VNodes directly - ` +
            `return a render function instead.`
        )
      }
      vm._setupState = setupResult
      // __sfc indicates compiled bindings from <script setup>
      if (!setupResult.__sfc) {
        for (const key in setupResult) {
          if (!isReserved(key)) {
            proxyWithRefUnwrap(vm, setupResult, key)
          } else if (__DEV__) {
            warn(`Avoid using variables that start with _ or $ in setup().`)
          }
        }
      } else {
        // exposed for compiled render fn
        const proxy = (vm._setupProxy = {})
        for (const key in setupResult) {
          if (key !== '__sfc') {
            proxyWithRefUnwrap(proxy, setupResult, key)
          }
        }
      }
    } else if (__DEV__ && setupResult !== undefined) {
      warn(
        `setup() should return an object. Received: ${
          setupResult === null ? 'null' : typeof setupResult
        }`
      )
    }
  }
}

function createSetupContext(vm: Component): SetupContext {
  let exposeCalled = false
  return {
    get attrs() {
      if (!vm._attrsProxy) {
        const proxy = (vm._attrsProxy = {})
        def(proxy, '_v_attr_proxy', true)
        syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs')
      }
      return vm._attrsProxy
    },
    get listeners() {
      if (!vm._listenersProxy) {
        const proxy = (vm._listenersProxy = {})
        syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners')
      }
      return vm._listenersProxy
    },
    get slots() {
      return initSlotsProxy(vm)
    },
    emit: bind(vm.$emit, vm) as any,
    expose(exposed?: Record<string, any>) {
      if (__DEV__) {
        if (exposeCalled) {
          warn(`expose() should be called only once per setup().`, vm)
        }
        exposeCalled = true
      }
      if (exposed) {
        Object.keys(exposed).forEach(key =>
          proxyWithRefUnwrap(vm, exposed, key)
        )
      }
    }
  }
}

export function syncSetupProxy(
  to: any,
  from: any,
  prev: any,
  instance: Component,
  type: string
) {
  let changed = false
  for (const key in from) {
    if (!(key in to)) {
      changed = true
      defineProxyAttr(to, key, instance, type)
    } else if (from[key] !== prev[key]) {
      changed = true
    }
  }
  for (const key in to) {
    if (!(key in from)) {
      changed = true
      delete to[key]
    }
  }
  return changed
}

function defineProxyAttr(
  proxy: any,
  key: string,
  instance: Component,
  type: string
) {
  Object.defineProperty(proxy, key, {
    enumerable: true,
    configurable: true,
    get() {
      return instance[type][key]
    }
  })
}

function initSlotsProxy(vm: Component) {
  if (!vm._slotsProxy) {
    syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots)
  }
  return vm._slotsProxy
}

export function syncSetupSlots(to: any, from: any) {
  for (const key in from) {
    to[key] = from[key]
  }
  for (const key in to) {
    if (!(key in from)) {
      delete to[key]
    }
  }
}

/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
export function useSlots(): SetupContext['slots'] {
  return getContext().slots
}

/**
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
export function useAttrs(): SetupContext['attrs'] {
  return getContext().attrs
}

/**
 * Vue 2 only
 * @internal use manual type def because public setup context type relies on
 * legacy VNode types
 */
export function useListeners(): SetupContext['listeners'] {
  return getContext().listeners
}

function getContext(): SetupContext {
  if (__DEV__ && !currentInstance) {
    warn(`useContext() called without active instance.`)
  }
  const vm = currentInstance!
  return vm._setupContext || (vm._setupContext = createSetupContext(vm))
}

/**
 * Runtime helper for merging default declarations. Imported by compiled code
 * only.
 * @internal
 */
export function mergeDefaults(
  raw: string[] | Record<string, PropOptions>,
  defaults: Record<string, any>
): Record<string, PropOptions> {
  const props = isArray(raw)
    ? raw.reduce(
        (normalized, p) => ((normalized[p] = {}), normalized),
        {} as Record<string, PropOptions>
      )
    : raw
  for (const key in defaults) {
    const opt = props[key]
    if (opt) {
      if (isArray(opt) || isFunction(opt)) {
        props[key] = { type: opt, default: defaults[key] }
      } else {
        opt.default = defaults[key]
      }
    } else if (opt === null) {
      props[key] = { default: defaults[key] }
    } else if (__DEV__) {
      warn(`props default key "${key}" has no corresponding declaration.`)
    }
  }
  return props
}
import { isRef, Ref } from './reactivity/ref'
import { ComputedRef } from './reactivity/computed'
import { isReactive, isShallow } from './reactivity/reactive'
import {
  warn,
  noop,
  isArray,
  isFunction,
  emptyObject,
  hasChanged,
  isServerRendering,
  invokeWithErrorHandling
} from 'core/util'
import { currentInstance } from './currentInstance'
import { traverse } from 'core/observer/traverse'
import Watcher from '../core/observer/watcher'
import { queueWatcher } from '../core/observer/scheduler'
import { DebuggerOptions } from './debug'

const WATCHER = `watcher`
const WATCHER_CB = `${WATCHER} callback`
const WATCHER_GETTER = `${WATCHER} getter`
const WATCHER_CLEANUP = `${WATCHER} cleanup`

export type WatchEffect = (onCleanup: OnCleanup) => void

export type WatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T)

export type WatchCallback<V = any, OV = any> = (
  value: V,
  oldValue: OV,
  onCleanup: OnCleanup
) => any

type MapSources<T, Immediate> = {
  [K in keyof T]: T[K] extends WatchSource<infer V>
    ? Immediate extends true
      ? V | undefined
      : V
    : T[K] extends object
    ? Immediate extends true
      ? T[K] | undefined
      : T[K]
    : never
}

type OnCleanup = (cleanupFn: () => void) => void

export interface WatchOptionsBase extends DebuggerOptions {
  flush?: 'pre' | 'post' | 'sync'
}

export interface WatchOptions<Immediate = boolean> extends WatchOptionsBase {
  immediate?: Immediate
  deep?: boolean
}

export type WatchStopHandle = () => void

// Simple effect.
export function watchEffect(
  effect: WatchEffect,
  options?: WatchOptionsBase
): WatchStopHandle {
  return doWatch(effect, null, options)
}

export function watchPostEffect(
  effect: WatchEffect,
  options?: DebuggerOptions
) {
  return doWatch(
    effect,
    null,
    (__DEV__
      ? { ...options, flush: 'post' }
      : { flush: 'post' }) as WatchOptionsBase
  )
}

export function watchSyncEffect(
  effect: WatchEffect,
  options?: DebuggerOptions
) {
  return doWatch(
    effect,
    null,
    (__DEV__
      ? { ...options, flush: 'sync' }
      : { flush: 'sync' }) as WatchOptionsBase
  )
}

// initial value for watchers to trigger on undefined initial values
const INITIAL_WATCHER_VALUE = {}

type MultiWatchSources = (WatchSource<unknown> | object)[]

// overload: array of multiple sources + cb
export function watch<
  T extends MultiWatchSources,
  Immediate extends Readonly<boolean> = false
>(
  sources: [...T],
  cb: WatchCallback<MapSources<T, false>, MapSources<T, Immediate>>,
  options?: WatchOptions<Immediate>
): WatchStopHandle

// overload: multiple sources w/ `as const`
// watch([foo, bar] as const, () => {})
// somehow [...T] breaks when the type is readonly
export function watch<
  T extends Readonly<MultiWatchSources>,
  Immediate extends Readonly<boolean> = false
>(
  source: T,
  cb: WatchCallback<MapSources<T, false>, MapSources<T, Immediate>>,
  options?: WatchOptions<Immediate>
): WatchStopHandle

// overload: single source + cb
export function watch<T, Immediate extends Readonly<boolean> = false>(
  source: WatchSource<T>,
  cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,
  options?: WatchOptions<Immediate>
): WatchStopHandle

// overload: watching reactive object w/ cb
export function watch<
  T extends object,
  Immediate extends Readonly<boolean> = false
>(
  source: T,
  cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,
  options?: WatchOptions<Immediate>
): WatchStopHandle

// implementation
export function watch<T = any, Immediate extends Readonly<boolean> = false>(
  source: T | WatchSource<T>,
  cb: any,
  options?: WatchOptions<Immediate>
): WatchStopHandle {
  if (__DEV__ && typeof cb !== 'function') {
    warn(
      `\`watch(fn, options?)\` signature has been moved to a separate API. ` +
        `Use \`watchEffect(fn, options?)\` instead. \`watch\` now only ` +
        `supports \`watch(source, cb, options?) signature.`
    )
  }
  return doWatch(source as any, cb, options)
}

function doWatch(
  source: WatchSource | WatchSource[] | WatchEffect | object,
  cb: WatchCallback | null,
  {
    immediate,
    deep,
    flush = 'pre',
    onTrack,
    onTrigger
  }: WatchOptions = emptyObject
): WatchStopHandle {
  if (__DEV__ && !cb) {
    if (immediate !== undefined) {
      warn(
        `watch() "immediate" option is only respected when using the ` +
          `watch(source, callback, options?) signature.`
      )
    }
    if (deep !== undefined) {
      warn(
        `watch() "deep" option is only respected when using the ` +
          `watch(source, callback, options?) signature.`
      )
    }
  }

  const warnInvalidSource = (s: unknown) => {
    warn(
      `Invalid watch source: ${s}. A watch source can only be a getter/effect ` +
        `function, a ref, a reactive object, or an array of these types.`
    )
  }

  const instance = currentInstance
  const call = (fn: Function, type: string, args: any[] | null = null) =>
    invokeWithErrorHandling(fn, null, args, instance, type)

  let getter: () => any
  let forceTrigger = false
  let isMultiSource = false

  if (isRef(source)) {
    getter = () => source.value
    forceTrigger = isShallow(source)
  } else if (isReactive(source)) {
    getter = () => {
      ;(source as any).__ob__.dep.depend()
      return source
    }
    deep = true
  } else if (isArray(source)) {
    isMultiSource = true
    forceTrigger = source.some(s => isReactive(s) || isShallow(s))
    getter = () =>
      source.map(s => {
        if (isRef(s)) {
          return s.value
        } else if (isReactive(s)) {
          return traverse(s)
        } else if (isFunction(s)) {
          return call(s, WATCHER_GETTER)
        } else {
          __DEV__ && warnInvalidSource(s)
        }
      })
  } else if (isFunction(source)) {
    if (cb) {
      // getter with cb
      getter = () => call(source, WATCHER_GETTER)
    } else {
      // no cb -> simple effect
      getter = () => {
        if (instance && instance._isDestroyed) {
          return
        }
        if (cleanup) {
          cleanup()
        }
        return call(source, WATCHER, [onCleanup])
      }
    }
  } else {
    getter = noop
    __DEV__ && warnInvalidSource(source)
  }

  if (cb && deep) {
    const baseGetter = getter
    getter = () => traverse(baseGetter())
  }

  let cleanup: () => void
  let onCleanup: OnCleanup = (fn: () => void) => {
    cleanup = watcher.onStop = () => {
      call(fn, WATCHER_CLEANUP)
    }
  }

  // in SSR there is no need to setup an actual effect, and it should be noop
  // unless it's eager
  if (isServerRendering()) {
    // we will also not call the invalidate callback (+ runner is not set up)
    onCleanup = noop
    if (!cb) {
      getter()
    } else if (immediate) {
      call(cb, WATCHER_CB, [
        getter(),
        isMultiSource ? [] : undefined,
        onCleanup
      ])
    }
    return noop
  }

  const watcher = new Watcher(currentInstance, getter, noop, {
    lazy: true
  })
  watcher.noRecurse = !cb

  let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE
  // overwrite default run
  watcher.run = () => {
    if (!watcher.active) {
      return
    }
    if (cb) {
      // watch(source, cb)
      const newValue = watcher.get()
      if (
        deep ||
        forceTrigger ||
        (isMultiSource
          ? (newValue as any[]).some((v, i) =>
              hasChanged(v, (oldValue as any[])[i])
            )
          : hasChanged(newValue, oldValue))
      ) {
        // cleanup before running cb again
        if (cleanup) {
          cleanup()
        }
        call(cb, WATCHER_CB, [
          newValue,
          // pass undefined as the old value when it's changed for the first time
          oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
          onCleanup
        ])
        oldValue = newValue
      }
    } else {
      // watchEffect
      watcher.get()
    }
  }

  if (flush === 'sync') {
    watcher.update = watcher.run
  } else if (flush === 'post') {
    watcher.post = true
    watcher.update = () => queueWatcher(watcher)
  } else {
    // pre
    watcher.update = () => {
      if (instance && instance === currentInstance && !instance._isMounted) {
        // pre-watcher triggered before
        const buffer = instance._preWatchers || (instance._preWatchers = [])
        if (buffer.indexOf(watcher) < 0) buffer.push(watcher)
      } else {
        queueWatcher(watcher)
      }
    }
  }

  if (__DEV__) {
    watcher.onTrack = onTrack
    watcher.onTrigger = onTrigger
  }

  // initial run
  if (cb) {
    if (immediate) {
      watcher.run()
    } else {
      oldValue = watcher.get()
    }
  } else if (flush === 'post' && instance) {
    instance.$once('hook:mounted', () => watcher.get())
  } else {
    watcher.get()
  }

  return () => {
    watcher.teardown()
  }
}
import { Component } from 'types/component'

export let currentInstance: Component | null = null

/**
 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
 * relies on it). Do not use this internally, just use `currentInstance`.
 *
 * @internal this function needs manual type declaration because it relies
 * on previously manually authored types from Vue 2
 */
export function getCurrentInstance(): { proxy: Component } | null {
  return currentInstance && { proxy: currentInstance }
}

/**
 * @internal
 */
export function setCurrentInstance(vm: Component | null = null) {
  if (!vm) currentInstance && currentInstance._scope.off()
  currentInstance = vm
  vm && vm._scope.on()
}
import { TrackOpTypes, TriggerOpTypes } from './reactivity/operations'

export interface DebuggerOptions {
  onTrack?: (event: DebuggerEvent) => void
  onTrigger?: (event: DebuggerEvent) => void
}

export type DebuggerEvent = {
  /**
   * @internal
   */
  effect: any
} & DebuggerEventExtraInfo

export type DebuggerEventExtraInfo = {
  target: object
  type: TrackOpTypes | TriggerOpTypes
  key?: any
  newValue?: any
  oldValue?: any
}
import { createElement } from '../core/vdom/create-element'
import { currentInstance } from './currentInstance'
import { warn } from 'core/util'

/**
 * @internal this function needs manual public type declaration because it relies
 * on previously manually authored types from Vue 2
 */
export function h(type: any, props?: any, children?: any) {
  if (!currentInstance) {
    __DEV__ &&
      warn(
        `globally imported h() can only be invoked when there is an active ` +
          `component instance, e.g. synchronously in a component's render or setup function.`
      )
  }
  return createElement(currentInstance!, type, props, children, 2, true)
}
/**
 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
 */

export const version: string = '__VERSION__'

export {
  ref,
  shallowRef,
  isRef,
  toRef,
  toRefs,
  unref,
  proxyRefs,
  customRef,
  triggerRef,
  Ref,
  ToRef,
  ToRefs,
  UnwrapRef,
  ShallowRef,
  ShallowUnwrapRef,
  RefUnwrapBailTypes,
  CustomRefFactory
} from './reactivity/ref'

export {
  reactive,
  isReactive,
  isReadonly,
  isShallow,
  isProxy,
  shallowReactive,
  markRaw,
  toRaw,
  ReactiveFlags,
  ShallowReactive,
  UnwrapNestedRefs
} from './reactivity/reactive'

export { readonly, shallowReadonly, DeepReadonly } from './reactivity/readonly'

export {
  computed,
  ComputedRef,
  WritableComputedRef,
  WritableComputedOptions,
  ComputedGetter,
  ComputedSetter
} from './reactivity/computed'

export {
  watch,
  watchEffect,
  watchPostEffect,
  watchSyncEffect,
  WatchEffect,
  WatchOptions,
  WatchOptionsBase,
  WatchCallback,
  WatchSource,
  WatchStopHandle
} from './apiWatch'

export {
  EffectScope,
  effectScope,
  onScopeDispose,
  getCurrentScope
} from './reactivity/effectScope'

export { DebuggerOptions, DebuggerEvent, DebuggerEventExtraInfo } from './debug'

export { TrackOpTypes, TriggerOpTypes } from './reactivity/operations'

export { provide, inject, InjectionKey } from './apiInject'

export { h } from './h'
export { getCurrentInstance } from './currentInstance'
export { useSlots, useAttrs, useListeners, mergeDefaults } from './apiSetup'
export { nextTick } from 'core/util/next-tick'
export { set, del } from 'core/observer'

export { useCssModule } from './sfc-helpers/useCssModule'
export { useCssVars } from './sfc-helpers/useCssVars'

/**
 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
 */
export function defineComponent(options: any) {
  return options
}

export { defineAsyncComponent } from './apiAsyncComponent'

export * from './apiLifecycle'
import { isServerRendering, noop, warn, def, isFunction } from 'core/util'
import { Ref, RefFlag } from './ref'
import Watcher from 'core/observer/watcher'
import Dep from 'core/observer/dep'
import { currentInstance } from '../currentInstance'
import { ReactiveFlags } from './reactive'
import { TrackOpTypes } from './operations'
import { DebuggerOptions } from '../debug'

declare const ComputedRefSymbol: unique symbol

export interface ComputedRef<T = any> extends WritableComputedRef<T> {
  readonly value: T
  [ComputedRefSymbol]: true
}

export interface WritableComputedRef<T> extends Ref<T> {
  readonly effect: any /* Watcher */
}

export type ComputedGetter<T> = (...args: any[]) => T
export type ComputedSetter<T> = (v: T) => void

export interface WritableComputedOptions<T> {
  get: ComputedGetter<T>
  set: ComputedSetter<T>
}

export function computed<T>(
  getter: ComputedGetter<T>,
  debugOptions?: DebuggerOptions
): ComputedRef<T>
export function computed<T>(
  options: WritableComputedOptions<T>,
  debugOptions?: DebuggerOptions
): WritableComputedRef<T>
export function computed<T>(
  getterOrOptions: ComputedGetter<T> | WritableComputedOptions<T>,
  debugOptions?: DebuggerOptions
) {
  let getter: ComputedGetter<T>
  let setter: ComputedSetter<T>

  const onlyGetter = isFunction(getterOrOptions)
  if (onlyGetter) {
    getter = getterOrOptions
    setter = __DEV__
      ? () => {
          warn('Write operation failed: computed value is readonly')
        }
      : noop
  } else {
    getter = getterOrOptions.get
    setter = getterOrOptions.set
  }

  const watcher = isServerRendering()
    ? null
    : new Watcher(currentInstance, getter, noop, { lazy: true })

  if (__DEV__ && watcher && debugOptions) {
    watcher.onTrack = debugOptions.onTrack
    watcher.onTrigger = debugOptions.onTrigger
  }

  const ref = {
    // some libs rely on the presence effect for checking computed refs
    // from normal refs, but the implementation doesn't matter
    effect: watcher,
    get value() {
      if (watcher) {
        if (watcher.dirty) {
          watcher.evaluate()
        }
        if (Dep.target) {
          if (__DEV__ && Dep.target.onTrack) {
            Dep.target.onTrack({
              effect: Dep.target,
              target: ref,
              type: TrackOpTypes.GET,
              key: 'value'
            })
          }
          watcher.depend()
        }
        return watcher.value
      } else {
        return getter()
      }
    },
    set value(newVal) {
      setter(newVal)
    }
  } as any

  def(ref, RefFlag, true)
  def(ref, ReactiveFlags.IS_READONLY, onlyGetter)

  return ref
}
import Watcher from 'core/observer/watcher'
import { noop } from 'shared/util'
import { currentInstance } from '../currentInstance'

// export type EffectScheduler = (...args: any[]) => any

/**
 * @internal since we are not exposing this in Vue 2, it's used only for
 * internal testing.
 */
export function effect(fn: () => any, scheduler?: (cb: any) => void) {
  const watcher = new Watcher(currentInstance, fn, noop, {
    sync: true
  })
  if (scheduler) {
    watcher.update = () => {
      scheduler(() => watcher.run())
    }
  }
}
import Watcher from 'core/observer/watcher'
import { warn } from 'core/util'

export let activeEffectScope: EffectScope | undefined

export class EffectScope {
  /**
   * @internal
   */
  active = true
  /**
   * @internal
   */
  effects: Watcher[] = []
  /**
   * @internal
   */
  cleanups: (() => void)[] = []
  /**
   * @internal
   */
  parent: EffectScope | undefined
  /**
   * record undetached scopes
   * @internal
   */
  scopes: EffectScope[] | undefined
  /**
   * indicates this being a component root scope
   * @internal
   */
  _vm?: boolean
  /**
   * track a child scope's index in its parent's scopes array for optimized
   * removal
   */
  private index: number | undefined

  constructor(public detached = false) {
    this.parent = activeEffectScope
    if (!detached && activeEffectScope) {
      this.index =
        (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
          this
        ) - 1
    }
  }

  run<T>(fn: () => T): T | undefined {
    if (this.active) {
      const currentEffectScope = activeEffectScope
      try {
        activeEffectScope = this
        return fn()
      } finally {
        activeEffectScope = currentEffectScope
      }
    } else if (__DEV__) {
      warn(`cannot run an inactive effect scope.`)
    }
  }

  /**
   * This should only be called on non-detached scopes
   * @internal
   */
  on() {
    activeEffectScope = this
  }

  /**
   * This should only be called on non-detached scopes
   * @internal
   */
  off() {
    activeEffectScope = this.parent
  }

  stop(fromParent?: boolean) {
    if (this.active) {
      let i, l
      for (i = 0, l = this.effects.length; i < l; i++) {
        this.effects[i].teardown()
      }
      for (i = 0, l = this.cleanups.length; i < l; i++) {
        this.cleanups[i]()
      }
      if (this.scopes) {
        for (i = 0, l = this.scopes.length; i < l; i++) {
          this.scopes[i].stop(true)
        }
      }
      // nested scope, dereference from parent to avoid memory leaks
      if (!this.detached && this.parent && !fromParent) {
        // optimized O(1) removal
        const last = this.parent.scopes!.pop()
        if (last && last !== this) {
          this.parent.scopes![this.index!] = last
          last.index = this.index!
        }
      }
      this.parent = undefined
      this.active = false
    }
  }
}

export function effectScope(detached?: boolean) {
  return new EffectScope(detached)
}

/**
 * @internal
 */
export function recordEffectScope(
  effect: Watcher,
  scope: EffectScope | undefined = activeEffectScope
) {
  if (scope && scope.active) {
    scope.effects.push(effect)
  }
}

export function getCurrentScope() {
  return activeEffectScope
}

export function onScopeDispose(fn: () => void) {
  if (activeEffectScope) {
    activeEffectScope.cleanups.push(fn)
  } else if (__DEV__) {
    warn(
      `onScopeDispose() is called when there is no active effect scope` +
        ` to be associated with.`
    )
  }
}
// using literal strings instead of numbers so that it's easier to inspect
// debugger events

export const enum TrackOpTypes {
  GET = 'get',
  TOUCH = 'touch'
}

export const enum TriggerOpTypes {
  SET = 'set',
  ADD = 'add',
  DELETE = 'delete',
  ARRAY_MUTATION = 'array mutation'
}
import { observe, Observer } from 'core/observer'
import {
  def,
  isArray,
  isPrimitive,
  warn,
  toRawType,
  isServerRendering
} from 'core/util'
import type { Ref, UnwrapRefSimple, RawSymbol } from './ref'

export const enum ReactiveFlags {
  SKIP = '__v_skip',
  IS_READONLY = '__v_isReadonly',
  IS_SHALLOW = '__v_isShallow',
  RAW = '__v_raw'
}

export interface Target {
  __ob__?: Observer
  [ReactiveFlags.SKIP]?: boolean
  [ReactiveFlags.IS_READONLY]?: boolean
  [ReactiveFlags.IS_SHALLOW]?: boolean
  [ReactiveFlags.RAW]?: any
}

// only unwrap nested ref
export type UnwrapNestedRefs<T> = T extends Ref ? T : UnwrapRefSimple<T>

export function reactive<T extends object>(target: T): UnwrapNestedRefs<T>
export function reactive(target: object) {
  makeReactive(target, false)
  return target
}

export declare const ShallowReactiveMarker: unique symbol

export type ShallowReactive<T> = T & { [ShallowReactiveMarker]?: true }

/**
 * Return a shallowly-reactive copy of the original object, where only the root
 * level properties are reactive. It also does not auto-unwrap refs (even at the
 * root level).
 */
export function shallowReactive<T extends object>(
  target: T
): ShallowReactive<T> {
  makeReactive(target, true)
  def(target, ReactiveFlags.IS_SHALLOW, true)
  return target
}

function makeReactive(target: any, shallow: boolean) {
  // if trying to observe a readonly proxy, return the readonly version.
  if (!isReadonly(target)) {
    if (__DEV__) {
      if (isArray(target)) {
        warn(
          `Avoid using Array as root value for ${
            shallow ? `shallowReactive()` : `reactive()`
          } as it cannot be tracked in watch() or watchEffect(). Use ${
            shallow ? `shallowRef()` : `ref()`
          } instead. This is a Vue-2-only limitation.`
        )
      }
      const existingOb = target && target.__ob__
      if (existingOb && existingOb.shallow !== shallow) {
        warn(
          `Target is already a ${
            existingOb.shallow ? `` : `non-`
          }shallow reactive object, and cannot be converted to ${
            shallow ? `` : `non-`
          }shallow.`
        )
      }
    }
    const ob = observe(
      target,
      shallow,
      isServerRendering() /* ssr mock reactivity */
    )
    if (__DEV__ && !ob) {
      if (target == null || isPrimitive(target)) {
        warn(`value cannot be made reactive: ${String(target)}`)
      }
      if (isCollectionType(target)) {
        warn(
          `Vue 2 does not support reactive collection types such as Map or Set.`
        )
      }
    }
  }
}

export function isReactive(value: unknown): boolean {
  if (isReadonly(value)) {
    return isReactive((value as Target)[ReactiveFlags.RAW])
  }
  return !!(value && (value as Target).__ob__)
}

export function isShallow(value: unknown): boolean {
  return !!(value && (value as Target).__v_isShallow)
}

export function isReadonly(value: unknown): boolean {
  return !!(value && (value as Target).__v_isReadonly)
}

export function isProxy(value: unknown): boolean {
  return isReactive(value) || isReadonly(value)
}

export function toRaw<T>(observed: T): T {
  const raw = observed && (observed as Target)[ReactiveFlags.RAW]
  return raw ? toRaw(raw) : observed
}

export function markRaw<T extends object>(
  value: T
): T & { [RawSymbol]?: true } {
  // non-extensible objects won't be observed anyway
  if (Object.isExtensible(value)) {
    def(value, ReactiveFlags.SKIP, true)
  }
  return value
}

/**
 * @internal
 */
export function isCollectionType(value: unknown): boolean {
  const type = toRawType(value)
  return (
    type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet'
  )
}
import { def, warn, isPlainObject, isArray } from 'core/util'
import {
  isCollectionType,
  isReadonly,
  isShallow,
  ReactiveFlags,
  UnwrapNestedRefs
} from './reactive'
import { isRef, Ref, RefFlag } from './ref'

type Primitive = string | number | boolean | bigint | symbol | undefined | null
type Builtin = Primitive | Function | Date | Error | RegExp
export type DeepReadonly<T> = T extends Builtin
  ? T
  : T extends Map<infer K, infer V>
  ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>>
  : T extends ReadonlyMap<infer K, infer V>
  ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>>
  : T extends WeakMap<infer K, infer V>
  ? WeakMap<DeepReadonly<K>, DeepReadonly<V>>
  : T extends Set<infer U>
  ? ReadonlySet<DeepReadonly<U>>
  : T extends ReadonlySet<infer U>
  ? ReadonlySet<DeepReadonly<U>>
  : T extends WeakSet<infer U>
  ? WeakSet<DeepReadonly<U>>
  : T extends Promise<infer U>
  ? Promise<DeepReadonly<U>>
  : T extends Ref<infer U>
  ? Readonly<Ref<DeepReadonly<U>>>
  : T extends {}
  ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
  : Readonly<T>

const rawToReadonlyFlag = `__v_rawToReadonly`
const rawToShallowReadonlyFlag = `__v_rawToShallowReadonly`

export function readonly<T extends object>(
  target: T
): DeepReadonly<UnwrapNestedRefs<T>> {
  return createReadonly(target, false)
}

function createReadonly(target: any, shallow: boolean) {
  if (!isPlainObject(target)) {
    if (__DEV__) {
      if (isArray(target)) {
        warn(`Vue 2 does not support readonly arrays.`)
      } else if (isCollectionType(target)) {
        warn(
          `Vue 2 does not support readonly collection types such as Map or Set.`
        )
      } else {
        warn(`value cannot be made readonly: ${typeof target}`)
      }
    }
    return target as any
  }

  if (__DEV__ && !Object.isExtensible(target)) {
    warn(
      `Vue 2 does not support creating readonly proxy for non-extensible object.`
    )
  }

  // already a readonly object
  if (isReadonly(target)) {
    return target as any
  }

  // already has a readonly proxy
  const existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag
  const existingProxy = target[existingFlag]
  if (existingProxy) {
    return existingProxy
  }

  const proxy = Object.create(Object.getPrototypeOf(target))
  def(target, existingFlag, proxy)

  def(proxy, ReactiveFlags.IS_READONLY, true)
  def(proxy, ReactiveFlags.RAW, target)

  if (isRef(target)) {
    def(proxy, RefFlag, true)
  }
  if (shallow || isShallow(target)) {
    def(proxy, ReactiveFlags.IS_SHALLOW, true)
  }

  const keys = Object.keys(target)
  for (let i = 0; i < keys.length; i++) {
    defineReadonlyProperty(proxy, target, keys[i], shallow)
  }

  return proxy as any
}

function defineReadonlyProperty(
  proxy: any,
  target: any,
  key: string,
  shallow: boolean
) {
  Object.defineProperty(proxy, key, {
    enumerable: true,
    configurable: true,
    get() {
      const val = target[key]
      return shallow || !isPlainObject(val) ? val : readonly(val)
    },
    set() {
      __DEV__ &&
        warn(`Set operation on key "${key}" failed: target is readonly.`)
    }
  })
}

/**
 * Returns a reactive-copy of the original object, where only the root level
 * properties are readonly, and does NOT unwrap refs nor recursively convert
 * returned properties.
 * This is used for creating the props proxy object for stateful components.
 */
export function shallowReadonly<T extends object>(target: T): Readonly<T> {
  return createReadonly(target, true)
}
import { defineReactive } from 'core/observer/index'
import {
  isReactive,
  ReactiveFlags,
  type ShallowReactiveMarker
} from './reactive'
import type { IfAny } from 'types/utils'
import Dep from 'core/observer/dep'
import { warn, isArray, def, isServerRendering } from 'core/util'
import { TrackOpTypes, TriggerOpTypes } from './operations'

declare const RefSymbol: unique symbol
export declare const RawSymbol: unique symbol

/**
 * @internal
 */
export const RefFlag = `__v_isRef`

export interface Ref<T = any> {
  value: T
  /**
   * Type differentiator only.
   * We need this to be in public d.ts but don't want it to show up in IDE
   * autocomplete, so we use a private Symbol instead.
   */
  [RefSymbol]: true
  /**
   * @internal
   */
  dep?: Dep
  /**
   * @internal
   */
  [RefFlag]: true
}

export function isRef<T>(r: Ref<T> | unknown): r is Ref<T>
export function isRef(r: any): r is Ref {
  return !!(r && (r as Ref).__v_isRef === true)
}

export function ref<T extends object>(
  value: T
): [T] extends [Ref] ? T : Ref<UnwrapRef<T>>
export function ref<T>(value: T): Ref<UnwrapRef<T>>
export function ref<T = any>(): Ref<T | undefined>
export function ref(value?: unknown) {
  return createRef(value, false)
}

declare const ShallowRefMarker: unique symbol

export type ShallowRef<T = any> = Ref<T> & { [ShallowRefMarker]?: true }

export function shallowRef<T extends object>(
  value: T
): T extends Ref ? T : ShallowRef<T>
export function shallowRef<T>(value: T): ShallowRef<T>
export function shallowRef<T = any>(): ShallowRef<T | undefined>
export function shallowRef(value?: unknown) {
  return createRef(value, true)
}

function createRef(rawValue: unknown, shallow: boolean) {
  if (isRef(rawValue)) {
    return rawValue
  }
  const ref: any = {}
  def(ref, RefFlag, true)
  def(ref, ReactiveFlags.IS_SHALLOW, shallow)
  def(
    ref,
    'dep',
    defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering())
  )
  return ref
}

export function triggerRef(ref: Ref) {
  if (__DEV__ && !ref.dep) {
    warn(`received object is not a triggerable ref.`)
  }
  if (__DEV__) {
    ref.dep &&
      ref.dep.notify({
        type: TriggerOpTypes.SET,
        target: ref,
        key: 'value'
      })
  } else {
    ref.dep && ref.dep.notify()
  }
}

export function unref<T>(ref: T | Ref<T>): T {
  return isRef(ref) ? (ref.value as any) : ref
}

export function proxyRefs<T extends object>(
  objectWithRefs: T
): ShallowUnwrapRef<T> {
  if (isReactive(objectWithRefs)) {
    return objectWithRefs as any
  }
  const proxy = {}
  const keys = Object.keys(objectWithRefs)
  for (let i = 0; i < keys.length; i++) {
    proxyWithRefUnwrap(proxy, objectWithRefs, keys[i])
  }
  return proxy as any
}

export function proxyWithRefUnwrap(
  target: any,
  source: Record<string, any>,
  key: string
) {
  Object.defineProperty(target, key, {
    enumerable: true,
    configurable: true,
    get: () => {
      const val = source[key]
      if (isRef(val)) {
        return val.value
      } else {
        const ob = val && val.__ob__
        if (ob) ob.dep.depend()
        return val
      }
    },
    set: value => {
      const oldValue = source[key]
      if (isRef(oldValue) && !isRef(value)) {
        oldValue.value = value
      } else {
        source[key] = value
      }
    }
  })
}

export type CustomRefFactory<T> = (
  track: () => void,
  trigger: () => void
) => {
  get: () => T
  set: (value: T) => void
}

export function customRef<T>(factory: CustomRefFactory<T>): Ref<T> {
  const dep = new Dep()
  const { get, set } = factory(
    () => {
      if (__DEV__) {
        dep.depend({
          target: ref,
          type: TrackOpTypes.GET,
          key: 'value'
        })
      } else {
        dep.depend()
      }
    },
    () => {
      if (__DEV__) {
        dep.notify({
          target: ref,
          type: TriggerOpTypes.SET,
          key: 'value'
        })
      } else {
        dep.notify()
      }
    }
  )
  const ref = {
    get value() {
      return get()
    },
    set value(newVal) {
      set(newVal)
    }
  } as any
  def(ref, RefFlag, true)
  return ref
}

export type ToRefs<T = any> = {
  [K in keyof T]: ToRef<T[K]>
}

export function toRefs<T extends object>(object: T): ToRefs<T> {
  if (__DEV__ && !isReactive(object)) {
    warn(`toRefs() expects a reactive object but received a plain one.`)
  }
  const ret: any = isArray(object) ? new Array(object.length) : {}
  for (const key in object) {
    ret[key] = toRef(object, key)
  }
  return ret
}

export type ToRef<T> = IfAny<T, Ref<T>, [T] extends [Ref] ? T : Ref<T>>

export function toRef<T extends object, K extends keyof T>(
  object: T,
  key: K
): ToRef<T[K]>

export function toRef<T extends object, K extends keyof T>(
  object: T,
  key: K,
  defaultValue: T[K]
): ToRef<Exclude<T[K], undefined>>

export function toRef<T extends object, K extends keyof T>(
  object: T,
  key: K,
  defaultValue?: T[K]
): ToRef<T[K]> {
  const val = object[key]
  if (isRef(val)) {
    return val as any
  }
  const ref = {
    get value() {
      const val = object[key]
      return val === undefined ? (defaultValue as T[K]) : val
    },
    set value(newVal) {
      object[key] = newVal
    }
  } as any
  def(ref, RefFlag, true)
  return ref
}

/**
 * This is a special exported interface for other packages to declare
 * additional types that should bail out for ref unwrapping. For example
 * \@vue/runtime-dom can declare it like so in its d.ts:
 *
 * ``` ts
 * declare module 'vue' {
 *   export interface RefUnwrapBailTypes {
 *     runtimeDOMBailTypes: Node | Window
 *   }
 * }
 * ```
 *
 * Note that api-extractor somehow refuses to include `declare module`
 * augmentations in its generated d.ts, so we have to manually append them
 * to the final generated d.ts in our build process.
 */
export interface RefUnwrapBailTypes {
  runtimeDOMBailTypes: Node | Window
}

export type ShallowUnwrapRef<T> = {
  [K in keyof T]: T[K] extends Ref<infer V>
    ? V
    : // if `V` is `unknown` that means it does not extend `Ref` and is undefined
    T[K] extends Ref<infer V> | undefined
    ? unknown extends V
      ? undefined
      : V | undefined
    : T[K]
}

export type UnwrapRef<T> = T extends ShallowRef<infer V>
  ? V
  : T extends Ref<infer V>
  ? UnwrapRefSimple<V>
  : UnwrapRefSimple<T>

type BaseTypes = string | number | boolean
type CollectionTypes = IterableCollections | WeakCollections
type IterableCollections = Map<any, any> | Set<any>
type WeakCollections = WeakMap<any, any> | WeakSet<any>

export type UnwrapRefSimple<T> = T extends
  | Function
  | CollectionTypes
  | BaseTypes
  | Ref
  | RefUnwrapBailTypes[keyof RefUnwrapBailTypes]
  | { [RawSymbol]?: true }
  ? T
  : T extends Array<any>
  ? { [K in keyof T]: UnwrapRefSimple<T[K]> }
  : T extends object & { [ShallowReactiveMarker]?: never }
  ? {
      [P in keyof T]: P extends symbol ? T[P] : UnwrapRef<T[P]>
    }
  : T
import { emptyObject, warn } from '../../core/util'
import { currentInstance } from '../currentInstance'

export function useCssModule(name = '$style'): Record<string, string> {
  /* istanbul ignore else */
  if (!__GLOBAL__) {
    if (!currentInstance) {
      __DEV__ && warn(`useCssModule must be called inside setup()`)
      return emptyObject
    }
    const mod = currentInstance[name]
    if (!mod) {
      __DEV__ &&
        warn(`Current instance does not have CSS module named "${name}".`)
      return emptyObject
    }
    return mod as Record<string, string>
  } else {
    if (__DEV__) {
      warn(`useCssModule() is not supported in the global build.`)
    }
    return emptyObject
  }
}
import { watchPostEffect } from '../'
import { inBrowser, warn } from 'core/util'
import { currentInstance } from '../currentInstance'

/**
 * Runtime helper for SFC's CSS variable injection feature.
 * @private
 */
export function useCssVars(
  getter: (
    vm: Record<string, any>,
    setupProxy: Record<string, any>
  ) => Record<string, string>
) {
  if (!inBrowser && !__TEST__) return

  const instance = currentInstance
  if (!instance) {
    __DEV__ &&
      warn(`useCssVars is called without current active component instance.`)
    return
  }

  watchPostEffect(() => {
    const el = instance.$el
    const vars = getter(instance, instance._setupProxy!)
    if (el && el.nodeType === 1) {
      const style = (el as HTMLElement).style
      for (const key in vars) {
        style.setProperty(`--${key}`, vars[key])
      }
    }
  })
}
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = "fb15");
/******/ })
/************************************************************************/
/******/ ({

/***/ "01f9":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var LIBRARY = __webpack_require__("2d00");
var $export = __webpack_require__("5ca1");
var redefine = __webpack_require__("2aba");
var hide = __webpack_require__("32e9");
var Iterators = __webpack_require__("84f2");
var $iterCreate = __webpack_require__("41a0");
var setToStringTag = __webpack_require__("7f20");
var getPrototypeOf = __webpack_require__("38fd");
var ITERATOR = __webpack_require__("2b4c")('iterator');
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
var FF_ITERATOR = '@@iterator';
var KEYS = 'keys';
var VALUES = 'values';

var returnThis = function () { return this; };

module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
  $iterCreate(Constructor, NAME, next);
  var getMethod = function (kind) {
    if (!BUGGY && kind in proto) return proto[kind];
    switch (kind) {
      case KEYS: return function keys() { return new Constructor(this, kind); };
      case VALUES: return function values() { return new Constructor(this, kind); };
    } return function entries() { return new Constructor(this, kind); };
  };
  var TAG = NAME + ' Iterator';
  var DEF_VALUES = DEFAULT == VALUES;
  var VALUES_BUG = false;
  var proto = Base.prototype;
  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
  var $default = $native || getMethod(DEFAULT);
  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
  var methods, key, IteratorPrototype;
  // Fix native
  if ($anyNative) {
    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
      // Set @@toStringTag to native iterators
      setToStringTag(IteratorPrototype, TAG, true);
      // fix for some old engines
      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
    }
  }
  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEF_VALUES && $native && $native.name !== VALUES) {
    VALUES_BUG = true;
    $default = function values() { return $native.call(this); };
  }
  // Define iterator
  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
    hide(proto, ITERATOR, $default);
  }
  // Plug for library
  Iterators[NAME] = $default;
  Iterators[TAG] = returnThis;
  if (DEFAULT) {
    methods = {
      values: DEF_VALUES ? $default : getMethod(VALUES),
      keys: IS_SET ? $default : getMethod(KEYS),
      entries: $entries
    };
    if (FORCED) for (key in methods) {
      if (!(key in proto)) redefine(proto, key, methods[key]);
    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
  }
  return methods;
};


/***/ }),

/***/ "02f4":
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__("4588");
var defined = __webpack_require__("be13");
// true  -> String#at
// false -> String#codePointAt
module.exports = function (TO_STRING) {
  return function (that, pos) {
    var s = String(defined(that));
    var i = toInteger(pos);
    var l = s.length;
    var a, b;
    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
    a = s.charCodeAt(i);
    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
      ? TO_STRING ? s.charAt(i) : a
      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
  };
};


/***/ }),

/***/ "0390":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var at = __webpack_require__("02f4")(true);

 // `AdvanceStringIndex` abstract operation
// https://tc39.github.io/ecma262/#sec-advancestringindex
module.exports = function (S, index, unicode) {
  return index + (unicode ? at(S, index).length : 1);
};


/***/ }),

/***/ "0bfb":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 21.2.5.3 get RegExp.prototype.flags
var anObject = __webpack_require__("cb7c");
module.exports = function () {
  var that = anObject(this);
  var result = '';
  if (that.global) result += 'g';
  if (that.ignoreCase) result += 'i';
  if (that.multiline) result += 'm';
  if (that.unicode) result += 'u';
  if (that.sticky) result += 'y';
  return result;
};


/***/ }),

/***/ "0d58":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var $keys = __webpack_require__("ce10");
var enumBugKeys = __webpack_require__("e11e");

module.exports = Object.keys || function keys(O) {
  return $keys(O, enumBugKeys);
};


/***/ }),

/***/ "1495":
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__("86cc");
var anObject = __webpack_require__("cb7c");
var getKeys = __webpack_require__("0d58");

module.exports = __webpack_require__("9e1e") ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = getKeys(Properties);
  var length = keys.length;
  var i = 0;
  var P;
  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
  return O;
};


/***/ }),

/***/ "214f":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

__webpack_require__("b0c5");
var redefine = __webpack_require__("2aba");
var hide = __webpack_require__("32e9");
var fails = __webpack_require__("79e5");
var defined = __webpack_require__("be13");
var wks = __webpack_require__("2b4c");
var regexpExec = __webpack_require__("520a");

var SPECIES = wks('species');

var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
  // #replace needs built-in support for named groups.
  // #match works fine because it just return the exec results, even if it has
  // a "grops" property.
  var re = /./;
  re.exec = function () {
    var result = [];
    result.groups = { a: '7' };
    return result;
  };
  return ''.replace(re, '$<a>') !== '7';
});

var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {
  // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
  var re = /(?:)/;
  var originalExec = re.exec;
  re.exec = function () { return originalExec.apply(this, arguments); };
  var result = 'ab'.split(re);
  return result.length === 2 && result[0] === 'a' && result[1] === 'b';
})();

module.exports = function (KEY, length, exec) {
  var SYMBOL = wks(KEY);

  var DELEGATES_TO_SYMBOL = !fails(function () {
    // String methods call symbol-named RegEp methods
    var O = {};
    O[SYMBOL] = function () { return 7; };
    return ''[KEY](O) != 7;
  });

  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {
    // Symbol-named RegExp methods call .exec
    var execCalled = false;
    var re = /a/;
    re.exec = function () { execCalled = true; return null; };
    if (KEY === 'split') {
      // RegExp[@@split] doesn't call the regex's exec method, but first creates
      // a new one. We need to return the patched regex when creating the new one.
      re.constructor = {};
      re.constructor[SPECIES] = function () { return re; };
    }
    re[SYMBOL]('');
    return !execCalled;
  }) : undefined;

  if (
    !DELEGATES_TO_SYMBOL ||
    !DELEGATES_TO_EXEC ||
    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||
    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
  ) {
    var nativeRegExpMethod = /./[SYMBOL];
    var fns = exec(
      defined,
      SYMBOL,
      ''[KEY],
      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {
        if (regexp.exec === regexpExec) {
          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
            // The native String method already delegates to @@method (this
            // polyfilled function), leasing to infinite recursion.
            // We avoid it by directly calling the native @@method method.
            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
          }
          return { done: true, value: nativeMethod.call(str, regexp, arg2) };
        }
        return { done: false };
      }
    );
    var strfn = fns[0];
    var rxfn = fns[1];

    redefine(String.prototype, KEY, strfn);
    hide(RegExp.prototype, SYMBOL, length == 2
      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
      // 21.2.5.11 RegExp.prototype[@@split](string, limit)
      ? function (string, arg) { return rxfn.call(string, this, arg); }
      // 21.2.5.6 RegExp.prototype[@@match](string)
      // 21.2.5.9 RegExp.prototype[@@search](string)
      : function (string) { return rxfn.call(string, this); }
    );
  }
};


/***/ }),

/***/ "230e":
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__("d3f4");
var document = __webpack_require__("7726").document;
// typeof document.createElement is 'object' in old IE
var is = isObject(document) && isObject(document.createElement);
module.exports = function (it) {
  return is ? document.createElement(it) : {};
};


/***/ }),

/***/ "23c6":
/***/ (function(module, exports, __webpack_require__) {

// getting tag from 19.1.3.6 Object.prototype.toString()
var cof = __webpack_require__("2d95");
var TAG = __webpack_require__("2b4c")('toStringTag');
// ES3 wrong here
var ARG = cof(function () { return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (e) { /* empty */ }
};

module.exports = function (it) {
  var O, T, B;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
    // builtinTag case
    : ARG ? cof(O)
    // ES3 arguments fallback
    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};


/***/ }),

/***/ "2621":
/***/ (function(module, exports) {

exports.f = Object.getOwnPropertySymbols;


/***/ }),

/***/ "2aba":
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__("7726");
var hide = __webpack_require__("32e9");
var has = __webpack_require__("69a8");
var SRC = __webpack_require__("ca5a")('src');
var $toString = __webpack_require__("fa5b");
var TO_STRING = 'toString';
var TPL = ('' + $toString).split(TO_STRING);

__webpack_require__("8378").inspectSource = function (it) {
  return $toString.call(it);
};

(module.exports = function (O, key, val, safe) {
  var isFunction = typeof val == 'function';
  if (isFunction) has(val, 'name') || hide(val, 'name', key);
  if (O[key] === val) return;
  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
  if (O === global) {
    O[key] = val;
  } else if (!safe) {
    delete O[key];
    hide(O, key, val);
  } else if (O[key]) {
    O[key] = val;
  } else {
    hide(O, key, val);
  }
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, TO_STRING, function toString() {
  return typeof this == 'function' && this[SRC] || $toString.call(this);
});


/***/ }),

/***/ "2aeb":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
var anObject = __webpack_require__("cb7c");
var dPs = __webpack_require__("1495");
var enumBugKeys = __webpack_require__("e11e");
var IE_PROTO = __webpack_require__("613b")('IE_PROTO');
var Empty = function () { /* empty */ };
var PROTOTYPE = 'prototype';

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = __webpack_require__("230e")('iframe');
  var i = enumBugKeys.length;
  var lt = '<';
  var gt = '>';
  var iframeDocument;
  iframe.style.display = 'none';
  __webpack_require__("fab2").appendChild(iframe);
  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
  // createDict = iframe.contentWindow.Object;
  // html.removeChild(iframe);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
  iframeDocument.close();
  createDict = iframeDocument.F;
  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
  return createDict();
};

module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    Empty[PROTOTYPE] = anObject(O);
    result = new Empty();
    Empty[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = createDict();
  return Properties === undefined ? result : dPs(result, Properties);
};


/***/ }),

/***/ "2b4c":
/***/ (function(module, exports, __webpack_require__) {

var store = __webpack_require__("5537")('wks');
var uid = __webpack_require__("ca5a");
var Symbol = __webpack_require__("7726").Symbol;
var USE_SYMBOL = typeof Symbol == 'function';

var $exports = module.exports = function (name) {
  return store[name] || (store[name] =
    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};

$exports.store = store;


/***/ }),

/***/ "2d00":
/***/ (function(module, exports) {

module.exports = false;


/***/ }),

/***/ "2d95":
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};


/***/ }),

/***/ "2fdb":
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 21.1.3.7 String.prototype.includes(searchString, position = 0)

var $export = __webpack_require__("5ca1");
var context = __webpack_require__("d2c8");
var INCLUDES = 'includes';

$export($export.P + $export.F * __webpack_require__("5147")(INCLUDES), 'String', {
  includes: function includes(searchString /* , position = 0 */) {
    return !!~context(this, searchString, INCLUDES)
      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),

/***/ "32e9":
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__("86cc");
var createDesc = __webpack_require__("4630");
module.exports = __webpack_require__("9e1e") ? function (object, key, value) {
  return dP.f(object, key, createDesc(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),

/***/ "38fd":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
var has = __webpack_require__("69a8");
var toObject = __webpack_require__("4bf8");
var IE_PROTO = __webpack_require__("613b")('IE_PROTO');
var ObjectProto = Object.prototype;

module.exports = Object.getPrototypeOf || function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectProto : null;
};


/***/ }),

/***/ "41a0":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var create = __webpack_require__("2aeb");
var descriptor = __webpack_require__("4630");
var setToStringTag = __webpack_require__("7f20");
var IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
__webpack_require__("32e9")(IteratorPrototype, __webpack_require__("2b4c")('iterator'), function () { return this; });

module.exports = function (Constructor, NAME, next) {
  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
  setToStringTag(Constructor, NAME + ' Iterator');
};


/***/ }),

/***/ "456d":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 Object.keys(O)
var toObject = __webpack_require__("4bf8");
var $keys = __webpack_require__("0d58");

__webpack_require__("5eda")('keys', function () {
  return function keys(it) {
    return $keys(toObject(it));
  };
});


/***/ }),

/***/ "4588":
/***/ (function(module, exports) {

// 7.1.4 ToInteger
var ceil = Math.ceil;
var floor = Math.floor;
module.exports = function (it) {
  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};


/***/ }),

/***/ "4630":
/***/ (function(module, exports) {

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};


/***/ }),

/***/ "4bf8":
/***/ (function(module, exports, __webpack_require__) {

// 7.1.13 ToObject(argument)
var defined = __webpack_require__("be13");
module.exports = function (it) {
  return Object(defined(it));
};


/***/ }),

/***/ "5147":
/***/ (function(module, exports, __webpack_require__) {

var MATCH = __webpack_require__("2b4c")('match');
module.exports = function (KEY) {
  var re = /./;
  try {
    '/./'[KEY](re);
  } catch (e) {
    try {
      re[MATCH] = false;
      return !'/./'[KEY](re);
    } catch (f) { /* empty */ }
  } return true;
};


/***/ }),

/***/ "520a":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var regexpFlags = __webpack_require__("0bfb");

var nativeExec = RegExp.prototype.exec;
// This always refers to the native implementation, because the
// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
// which loads this file before patching the method.
var nativeReplace = String.prototype.replace;

var patchedExec = nativeExec;

var LAST_INDEX = 'lastIndex';

var UPDATES_LAST_INDEX_WRONG = (function () {
  var re1 = /a/,
      re2 = /b*/g;
  nativeExec.call(re1, 'a');
  nativeExec.call(re2, 'a');
  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;
})();

// nonparticipating capturing group, copied from es5-shim's String#split patch.
var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;

var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;

if (PATCH) {
  patchedExec = function exec(str) {
    var re = this;
    var lastIndex, reCopy, match, i;

    if (NPCG_INCLUDED) {
      reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re));
    }
    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];

    match = nativeExec.call(re, str);

    if (UPDATES_LAST_INDEX_WRONG && match) {
      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;
    }
    if (NPCG_INCLUDED && match && match.length > 1) {
      // Fix browsers whose `exec` methods don't consistently return `undefined`
      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
      // eslint-disable-next-line no-loop-func
      nativeReplace.call(match[0], reCopy, function () {
        for (i = 1; i < arguments.length - 2; i++) {
          if (arguments[i] === undefined) match[i] = undefined;
        }
      });
    }

    return match;
  };
}

module.exports = patchedExec;


/***/ }),

/***/ "52a7":
/***/ (function(module, exports) {

exports.f = {}.propertyIsEnumerable;


/***/ }),

/***/ "5537":
/***/ (function(module, exports, __webpack_require__) {

var core = __webpack_require__("8378");
var global = __webpack_require__("7726");
var SHARED = '__core-js_shared__';
var store = global[SHARED] || (global[SHARED] = {});

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: core.version,
  mode: __webpack_require__("2d00") ? 'pure' : 'global',
  copyright: 'Â© 2019 Denis Pushkarev (zloirock.ru)'
});


/***/ }),

/***/ "5ca1":
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__("7726");
var core = __webpack_require__("8378");
var hide = __webpack_require__("32e9");
var redefine = __webpack_require__("2aba");
var ctx = __webpack_require__("9b43");
var PROTOTYPE = 'prototype';

var $export = function (type, name, source) {
  var IS_FORCED = type & $export.F;
  var IS_GLOBAL = type & $export.G;
  var IS_STATIC = type & $export.S;
  var IS_PROTO = type & $export.P;
  var IS_BIND = type & $export.B;
  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];
  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
  var key, own, out, exp;
  if (IS_GLOBAL) source = name;
  for (key in source) {
    // contains in native
    own = !IS_FORCED && target && target[key] !== undefined;
    // export native or passed
    out = (own ? target : source)[key];
    // bind timers to global for call from export context
    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
    // extend global
    if (target) redefine(target, key, out, type & $export.U);
    // export
    if (exports[key] != out) hide(exports, key, exp);
    if (IS_PROTO && expProto[key] != out) expProto[key] = out;
  }
};
global.core = core;
// type bitmap
$export.F = 1;   // forced
$export.G = 2;   // global
$export.S = 4;   // static
$export.P = 8;   // proto
$export.B = 16;  // bind
$export.W = 32;  // wrap
$export.U = 64;  // safe
$export.R = 128; // real proto method for `library`
module.exports = $export;


/***/ }),

/***/ "5eda":
/***/ (function(module, exports, __webpack_require__) {

// most Object methods by ES6 should accept primitives
var $export = __webpack_require__("5ca1");
var core = __webpack_require__("8378");
var fails = __webpack_require__("79e5");
module.exports = function (KEY, exec) {
  var fn = (core.Object || {})[KEY] || Object[KEY];
  var exp = {};
  exp[KEY] = exec(fn);
  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
};


/***/ }),

/***/ "5f1b":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var classof = __webpack_require__("23c6");
var builtinExec = RegExp.prototype.exec;

 // `RegExpExec` abstract operation
// https://tc39.github.io/ecma262/#sec-regexpexec
module.exports = function (R, S) {
  var exec = R.exec;
  if (typeof exec === 'function') {
    var result = exec.call(R, S);
    if (typeof result !== 'object') {
      throw new TypeError('RegExp exec method returned something other than an Object or null');
    }
    return result;
  }
  if (classof(R) !== 'RegExp') {
    throw new TypeError('RegExp#exec called on incompatible receiver');
  }
  return builtinExec.call(R, S);
};


/***/ }),

/***/ "613b":
/***/ (function(module, exports, __webpack_require__) {

var shared = __webpack_require__("5537")('keys');
var uid = __webpack_require__("ca5a");
module.exports = function (key) {
  return shared[key] || (shared[key] = uid(key));
};


/***/ }),

/***/ "626a":
/***/ (function(module, exports, __webpack_require__) {

// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = __webpack_require__("2d95");
// eslint-disable-next-line no-prototype-builtins
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
  return cof(it) == 'String' ? it.split('') : Object(it);
};


/***/ }),

/***/ "6762":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// https://github.com/tc39/Array.prototype.includes
var $export = __webpack_require__("5ca1");
var $includes = __webpack_require__("c366")(true);

$export($export.P, 'Array', {
  includes: function includes(el /* , fromIndex = 0 */) {
    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
  }
});

__webpack_require__("9c6c")('includes');


/***/ }),

/***/ "6821":
/***/ (function(module, exports, __webpack_require__) {

// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__("626a");
var defined = __webpack_require__("be13");
module.exports = function (it) {
  return IObject(defined(it));
};


/***/ }),

/***/ "69a8":
/***/ (function(module, exports) {

var hasOwnProperty = {}.hasOwnProperty;
module.exports = function (it, key) {
  return hasOwnProperty.call(it, key);
};


/***/ }),

/***/ "6a99":
/***/ (function(module, exports, __webpack_require__) {

// 7.1.1 ToPrimitive(input [, PreferredType])
var isObject = __webpack_require__("d3f4");
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function (it, S) {
  if (!isObject(it)) return it;
  var fn, val;
  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  throw TypeError("Can't convert object to primitive value");
};


/***/ }),

/***/ "7333":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 19.1.2.1 Object.assign(target, source, ...)
var getKeys = __webpack_require__("0d58");
var gOPS = __webpack_require__("2621");
var pIE = __webpack_require__("52a7");
var toObject = __webpack_require__("4bf8");
var IObject = __webpack_require__("626a");
var $assign = Object.assign;

// should work with symbols and should have deterministic property order (V8 bug)
module.exports = !$assign || __webpack_require__("79e5")(function () {
  var A = {};
  var B = {};
  // eslint-disable-next-line no-undef
  var S = Symbol();
  var K = 'abcdefghijklmnopqrst';
  A[S] = 7;
  K.split('').forEach(function (k) { B[k] = k; });
  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
  var T = toObject(target);
  var aLen = arguments.length;
  var index = 1;
  var getSymbols = gOPS.f;
  var isEnum = pIE.f;
  while (aLen > index) {
    var S = IObject(arguments[index++]);
    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
    var length = keys.length;
    var j = 0;
    var key;
    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
  } return T;
} : $assign;


/***/ }),

/***/ "7726":
/***/ (function(module, exports) {

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
  ? window : typeof self != 'undefined' && self.Math == Math ? self
  // eslint-disable-next-line no-new-func
  : Function('return this')();
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef


/***/ }),

/***/ "77f1":
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__("4588");
var max = Math.max;
var min = Math.min;
module.exports = function (index, length) {
  index = toInteger(index);
  return index < 0 ? max(index + length, 0) : min(index, length);
};


/***/ }),

/***/ "79e5":
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (e) {
    return true;
  }
};


/***/ }),

/***/ "7f20":
/***/ (function(module, exports, __webpack_require__) {

var def = __webpack_require__("86cc").f;
var has = __webpack_require__("69a8");
var TAG = __webpack_require__("2b4c")('toStringTag');

module.exports = function (it, tag, stat) {
  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
};


/***/ }),

/***/ "8378":
/***/ (function(module, exports) {

var core = module.exports = { version: '2.6.5' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef


/***/ }),

/***/ "84f2":
/***/ (function(module, exports) {

module.exports = {};


/***/ }),

/***/ "86cc":
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__("cb7c");
var IE8_DOM_DEFINE = __webpack_require__("c69a");
var toPrimitive = __webpack_require__("6a99");
var dP = Object.defineProperty;

exports.f = __webpack_require__("9e1e") ? Object.defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return dP(O, P, Attributes);
  } catch (e) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};


/***/ }),

/***/ "9b43":
/***/ (function(module, exports, __webpack_require__) {

// optional / simple context binding
var aFunction = __webpack_require__("d8e8");
module.exports = function (fn, that, length) {
  aFunction(fn);
  if (that === undefined) return fn;
  switch (length) {
    case 1: return function (a) {
      return fn.call(that, a);
    };
    case 2: return function (a, b) {
      return fn.call(that, a, b);
    };
    case 3: return function (a, b, c) {
      return fn.call(that, a, b, c);
    };
  }
  return function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};


/***/ }),

/***/ "9c6c":
/***/ (function(module, exports, __webpack_require__) {

// 22.1.3.31 Array.prototype[@@unscopables]
var UNSCOPABLES = __webpack_require__("2b4c")('unscopables');
var ArrayProto = Array.prototype;
if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__("32e9")(ArrayProto, UNSCOPABLES, {});
module.exports = function (key) {
  ArrayProto[UNSCOPABLES][key] = true;
};


/***/ }),

/***/ "9def":
/***/ (function(module, exports, __webpack_require__) {

// 7.1.15 ToLength
var toInteger = __webpack_require__("4588");
var min = Math.min;
module.exports = function (it) {
  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};


/***/ }),

/***/ "9e1e":
/***/ (function(module, exports, __webpack_require__) {

// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__("79e5")(function () {
  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),

/***/ "a352":
/***/ (function(module, exports) {

module.exports = require("sortablejs");

/***/ }),

/***/ "a481":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var anObject = __webpack_require__("cb7c");
var toObject = __webpack_require__("4bf8");
var toLength = __webpack_require__("9def");
var toInteger = __webpack_require__("4588");
var advanceStringIndex = __webpack_require__("0390");
var regExpExec = __webpack_require__("5f1b");
var max = Math.max;
var min = Math.min;
var floor = Math.floor;
var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g;
var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g;

var maybeToString = function (it) {
  return it === undefined ? it : String(it);
};

// @@replace logic
__webpack_require__("214f")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {
  return [
    // `String.prototype.replace` method
    // https://tc39.github.io/ecma262/#sec-string.prototype.replace
    function replace(searchValue, replaceValue) {
      var O = defined(this);
      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];
      return fn !== undefined
        ? fn.call(searchValue, O, replaceValue)
        : $replace.call(String(O), searchValue, replaceValue);
    },
    // `RegExp.prototype[@@replace]` method
    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace
    function (regexp, replaceValue) {
      var res = maybeCallNative($replace, regexp, this, replaceValue);
      if (res.done) return res.value;

      var rx = anObject(regexp);
      var S = String(this);
      var functionalReplace = typeof replaceValue === 'function';
      if (!functionalReplace) replaceValue = String(replaceValue);
      var global = rx.global;
      if (global) {
        var fullUnicode = rx.unicode;
        rx.lastIndex = 0;
      }
      var results = [];
      while (true) {
        var result = regExpExec(rx, S);
        if (result === null) break;
        results.push(result);
        if (!global) break;
        var matchStr = String(result[0]);
        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
      }
      var accumulatedResult = '';
      var nextSourcePosition = 0;
      for (var i = 0; i < results.length; i++) {
        result = results[i];
        var matched = String(result[0]);
        var position = max(min(toInteger(result.index), S.length), 0);
        var captures = [];
        // NOTE: This is equivalent to
        //   captures = result.slice(1).map(maybeToString)
        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
        // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
        var namedCaptures = result.groups;
        if (functionalReplace) {
          var replacerArgs = [matched].concat(captures, position, S);
          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
          var replacement = String(replaceValue.apply(undefined, replacerArgs));
        } else {
          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
        }
        if (position >= nextSourcePosition) {
          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
          nextSourcePosition = position + matched.length;
        }
      }
      return accumulatedResult + S.slice(nextSourcePosition);
    }
  ];

    // https://tc39.github.io/ecma262/#sec-getsubstitution
  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {
    var tailPos = position + matched.length;
    var m = captures.length;
    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
    if (namedCaptures !== undefined) {
      namedCaptures = toObject(namedCaptures);
      symbols = SUBSTITUTION_SYMBOLS;
    }
    return $replace.call(replacement, symbols, function (match, ch) {
      var capture;
      switch (ch.charAt(0)) {
        case '$': return '$';
        case '&': return matched;
        case '`': return str.slice(0, position);
        case "'": return str.slice(tailPos);
        case '<':
          capture = namedCaptures[ch.slice(1, -1)];
          break;
        default: // \d\d?
          var n = +ch;
          if (n === 0) return match;
          if (n > m) {
            var f = floor(n / 10);
            if (f === 0) return match;
            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
            return match;
          }
          capture = captures[n - 1];
      }
      return capture === undefined ? '' : capture;
    });
  }
});


/***/ }),

/***/ "aae3":
/***/ (function(module, exports, __webpack_require__) {

// 7.2.8 IsRegExp(argument)
var isObject = __webpack_require__("d3f4");
var cof = __webpack_require__("2d95");
var MATCH = __webpack_require__("2b4c")('match');
module.exports = function (it) {
  var isRegExp;
  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
};


/***/ }),

/***/ "ac6a":
/***/ (function(module, exports, __webpack_require__) {

var $iterators = __webpack_require__("cadf");
var getKeys = __webpack_require__("0d58");
var redefine = __webpack_require__("2aba");
var global = __webpack_require__("7726");
var hide = __webpack_require__("32e9");
var Iterators = __webpack_require__("84f2");
var wks = __webpack_require__("2b4c");
var ITERATOR = wks('iterator');
var TO_STRING_TAG = wks('toStringTag');
var ArrayValues = Iterators.Array;

var DOMIterables = {
  CSSRuleList: true, // TODO: Not spec compliant, should be false.
  CSSStyleDeclaration: false,
  CSSValueList: false,
  ClientRectList: false,
  DOMRectList: false,
  DOMStringList: false,
  DOMTokenList: true,
  DataTransferItemList: false,
  FileList: false,
  HTMLAllCollection: false,
  HTMLCollection: false,
  HTMLFormElement: false,
  HTMLSelectElement: false,
  MediaList: true, // TODO: Not spec compliant, should be false.
  MimeTypeArray: false,
  NamedNodeMap: false,
  NodeList: true,
  PaintRequestList: false,
  Plugin: false,
  PluginArray: false,
  SVGLengthList: false,
  SVGNumberList: false,
  SVGPathSegList: false,
  SVGPointList: false,
  SVGStringList: false,
  SVGTransformList: false,
  SourceBufferList: false,
  StyleSheetList: true, // TODO: Not spec compliant, should be false.
  TextTrackCueList: false,
  TextTrackList: false,
  TouchList: false
};

for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {
  var NAME = collections[i];
  var explicit = DOMIterables[NAME];
  var Collection = global[NAME];
  var proto = Collection && Collection.prototype;
  var key;
  if (proto) {
    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
    Iterators[NAME] = ArrayValues;
    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
  }
}


/***/ }),

/***/ "b0c5":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var regexpExec = __webpack_require__("520a");
__webpack_require__("5ca1")({
  target: 'RegExp',
  proto: true,
  forced: regexpExec !== /./.exec
}, {
  exec: regexpExec
});


/***/ }),

/***/ "be13":
/***/ (function(module, exports) {

// 7.2.1 RequireObjectCoercible(argument)
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on  " + it);
  return it;
};


/***/ }),

/***/ "c366":
/***/ (function(module, exports, __webpack_require__) {

// false -> Array#indexOf
// true  -> Array#includes
var toIObject = __webpack_require__("6821");
var toLength = __webpack_require__("9def");
var toAbsoluteIndex = __webpack_require__("77f1");
module.exports = function (IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIObject($this);
    var length = toLength(O.length);
    var index = toAbsoluteIndex(fromIndex, length);
    var value;
    // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare
    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare
      if (value != value) return true;
    // Array#indexOf ignores holes, Array#includes - not
    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
      if (O[index] === el) return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};


/***/ }),

/***/ "c649":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return insertNodeAt; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return camelize; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return console; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return removeNode; });
/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("a481");
/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__);


function getConsole() {
  if (typeof window !== "undefined") {
    return window.console;
  }

  return global.console;
}

var console = getConsole();

function cached(fn) {
  var cache = Object.create(null);
  return function cachedFn(str) {
    var hit = cache[str];
    return hit || (cache[str] = fn(str));
  };
}

var regex = /-(\w)/g;
var camelize = cached(function (str) {
  return str.replace(regex, function (_, c) {
    return c ? c.toUpperCase() : "";
  });
});

function removeNode(node) {
  if (node.parentElement !== null) {
    node.parentElement.removeChild(node);
  }
}

function insertNodeAt(fatherNode, node, position) {
  var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;
  fatherNode.insertBefore(node, refNode);
}


/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("c8ba")))

/***/ }),

/***/ "c69a":
/***/ (function(module, exports, __webpack_require__) {

module.exports = !__webpack_require__("9e1e") && !__webpack_require__("79e5")(function () {
  return Object.defineProperty(__webpack_require__("230e")('div'), 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),

/***/ "c8ba":
/***/ (function(module, exports) {

var g;

// This works in non-strict mode
g = (function() {
	return this;
})();

try {
	// This works if eval is allowed (see CSP)
	g = g || new Function("return this")();
} catch (e) {
	// This works if the window reference is available
	if (typeof window === "object") g = window;
}

// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}

module.exports = g;


/***/ }),

/***/ "ca5a":
/***/ (function(module, exports) {

var id = 0;
var px = Math.random();
module.exports = function (key) {
  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};


/***/ }),

/***/ "cadf":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var addToUnscopables = __webpack_require__("9c6c");
var step = __webpack_require__("d53b");
var Iterators = __webpack_require__("84f2");
var toIObject = __webpack_require__("6821");

// 22.1.3.4 Array.prototype.entries()
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
module.exports = __webpack_require__("01f9")(Array, 'Array', function (iterated, kind) {
  this._t = toIObject(iterated); // target
  this._i = 0;                   // next index
  this._k = kind;                // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
}, function () {
  var O = this._t;
  var kind = this._k;
  var index = this._i++;
  if (!O || index >= O.length) {
    this._t = undefined;
    return step(1);
  }
  if (kind == 'keys') return step(0, index);
  if (kind == 'values') return step(0, O[index]);
  return step(0, [index, O[index]]);
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
Iterators.Arguments = Iterators.Array;

addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');


/***/ }),

/***/ "cb7c":
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__("d3f4");
module.exports = function (it) {
  if (!isObject(it)) throw TypeError(it + ' is not an object!');
  return it;
};


/***/ }),

/***/ "ce10":
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__("69a8");
var toIObject = __webpack_require__("6821");
var arrayIndexOf = __webpack_require__("c366")(false);
var IE_PROTO = __webpack_require__("613b")('IE_PROTO');

module.exports = function (object, names) {
  var O = toIObject(object);
  var i = 0;
  var result = [];
  var key;
  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
  // Don't enum bug & hidden keys
  while (names.length > i) if (has(O, key = names[i++])) {
    ~arrayIndexOf(result, key) || result.push(key);
  }
  return result;
};


/***/ }),

/***/ "d2c8":
/***/ (function(module, exports, __webpack_require__) {

// helper for String#{startsWith, endsWith, includes}
var isRegExp = __webpack_require__("aae3");
var defined = __webpack_require__("be13");

module.exports = function (that, searchString, NAME) {
  if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
  return String(defined(that));
};


/***/ }),

/***/ "d3f4":
/***/ (function(module, exports) {

module.exports = function (it) {
  return typeof it === 'object' ? it !== null : typeof it === 'function';
};


/***/ }),

/***/ "d53b":
/***/ (function(module, exports) {

module.exports = function (done, value) {
  return { value: value, done: !!done };
};


/***/ }),

/***/ "d8e8":
/***/ (function(module, exports) {

module.exports = function (it) {
  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
  return it;
};


/***/ }),

/***/ "e11e":
/***/ (function(module, exports) {

// IE 8- don't enum bug keys
module.exports = (
  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');


/***/ }),

/***/ "f559":
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 21.1.3.18 String.prototype.startsWith(searchString [, position ])

var $export = __webpack_require__("5ca1");
var toLength = __webpack_require__("9def");
var context = __webpack_require__("d2c8");
var STARTS_WITH = 'startsWith';
var $startsWith = ''[STARTS_WITH];

$export($export.P + $export.F * __webpack_require__("5147")(STARTS_WITH), 'String', {
  startsWith: function startsWith(searchString /* , position = 0 */) {
    var that = context(this, searchString, STARTS_WITH);
    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
    var search = String(searchString);
    return $startsWith
      ? $startsWith.call(that, search, index)
      : that.slice(index, index + search.length) === search;
  }
});


/***/ }),

/***/ "f6fd":
/***/ (function(module, exports) {

// document.currentScript polyfill by Adam Miller

// MIT license

(function(document){
  var currentScript = "currentScript",
      scripts = document.getElementsByTagName('script'); // Live NodeList collection

  // If browser needs currentScript polyfill, add get currentScript() to the document object
  if (!(currentScript in document)) {
    Object.defineProperty(document, currentScript, {
      get: function(){

        // IE 6-10 supports script readyState
        // IE 10+ support stack trace
        try { throw new Error(); }
        catch (err) {

          // Find the second match for the "at" string to get file src url from stack.
          // Specifically works with the format of stack traces in IE.
          var i, res = ((/.*at [^\(]*\((.*):.+:.+\)$/ig).exec(err.stack) || [false])[1];

          // For all scripts on the page, if src matches or if ready state is interactive, return the script tag
          for(i in scripts){
            if(scripts[i].src == res || scripts[i].readyState == "interactive"){
              return scripts[i];
            }
          }

          // If no match, return null
          return null;
        }
      }
    });
  }
})(document);


/***/ }),

/***/ "f751":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.3.1 Object.assign(target, source)
var $export = __webpack_require__("5ca1");

$export($export.S + $export.F, 'Object', { assign: __webpack_require__("7333") });


/***/ }),

/***/ "fa5b":
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__("5537")('native-function-to-string', Function.toString);


/***/ }),

/***/ "fab2":
/***/ (function(module, exports, __webpack_require__) {

var document = __webpack_require__("7726").document;
module.exports = document && document.documentElement;


/***/ }),

/***/ "fb15":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
// This file is imported into lib/wc client bundles.

if (typeof window !== 'undefined') {
  if (true) {
    __webpack_require__("f6fd")
  }

  var setPublicPath_i
  if ((setPublicPath_i = window.document.currentScript) && (setPublicPath_i = setPublicPath_i.src.match(/(.+\/)[^/]+\.js(\?.*)?$/))) {
    __webpack_require__.p = setPublicPath_i[1] // eslint-disable-line
  }
}

// Indicate to webpack that this file can be concatenated
/* harmony default export */ var setPublicPath = (null);

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.assign.js
var es6_object_assign = __webpack_require__("f751");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.starts-with.js
var es6_string_starts_with = __webpack_require__("f559");

// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js
var web_dom_iterable = __webpack_require__("ac6a");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.iterator.js
var es6_array_iterator = __webpack_require__("cadf");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js
var es6_object_keys = __webpack_require__("456d");

// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
function _arrayWithHoles(arr) {
  if (Array.isArray(arr)) return arr;
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
function _iterableToArrayLimit(arr, i) {
  if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
  var _arr = [];
  var _n = true;
  var _d = false;
  var _e = undefined;

  try {
    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
      _arr.push(_s.value);

      if (i && _arr.length === i) break;
    }
  } catch (err) {
    _d = true;
    _e = err;
  } finally {
    try {
      if (!_n && _i["return"] != null) _i["return"]();
    } finally {
      if (_d) throw _e;
    }
  }

  return _arr;
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js
function _arrayLikeToArray(arr, len) {
  if (len == null || len > arr.length) len = arr.length;

  for (var i = 0, arr2 = new Array(len); i < len; i++) {
    arr2[i] = arr[i];
  }

  return arr2;
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js

function _unsupportedIterableToArray(o, minLen) {
  if (!o) return;
  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
  var n = Object.prototype.toString.call(o).slice(8, -1);
  if (n === "Object" && o.constructor) n = o.constructor.name;
  if (n === "Map" || n === "Set") return Array.from(o);
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js




function _slicedToArray(arr, i) {
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.array.includes.js
var es7_array_includes = __webpack_require__("6762");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.includes.js
var es6_string_includes = __webpack_require__("2fdb");

// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js

function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js
function _iterableToArray(iter) {
  if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js




function _toConsumableArray(arr) {
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
// EXTERNAL MODULE: external {"commonjs":"sortablejs","commonjs2":"sortablejs","amd":"sortablejs","root":"Sortable"}
var external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_ = __webpack_require__("a352");
var external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_);

// EXTERNAL MODULE: ./src/util/helper.js
var helper = __webpack_require__("c649");

// CONCATENATED MODULE: ./src/vuedraggable.js












function buildAttribute(object, propName, value) {
  if (value === undefined) {
    return object;
  }

  object = object || {};
  object[propName] = value;
  return object;
}

function computeVmIndex(vnodes, element) {
  return vnodes.map(function (elt) {
    return elt.elm;
  }).indexOf(element);
}

function _computeIndexes(slots, children, isTransition, footerOffset) {
  if (!slots) {
    return [];
  }

  var elmFromNodes = slots.map(function (elt) {
    return elt.elm;
  });
  var footerIndex = children.length - footerOffset;

  var rawIndexes = _toConsumableArray(children).map(function (elt, idx) {
    return idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt);
  });

  return isTransition ? rawIndexes.filter(function (ind) {
    return ind !== -1;
  }) : rawIndexes;
}

function emit(evtName, evtData) {
  var _this = this;

  this.$nextTick(function () {
    return _this.$emit(evtName.toLowerCase(), evtData);
  });
}

function delegateAndEmit(evtName) {
  var _this2 = this;

  return function (evtData) {
    if (_this2.realList !== null) {
      _this2["onDrag" + evtName](evtData);
    }

    emit.call(_this2, evtName, evtData);
  };
}

function isTransitionName(name) {
  return ["transition-group", "TransitionGroup"].includes(name);
}

function vuedraggable_isTransition(slots) {
  if (!slots || slots.length !== 1) {
    return false;
  }

  var _slots = _slicedToArray(slots, 1),
      componentOptions = _slots[0].componentOptions;

  if (!componentOptions) {
    return false;
  }

  return isTransitionName(componentOptions.tag);
}

function getSlot(slot, scopedSlot, key) {
  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);
}

function computeChildrenAndOffsets(children, slot, scopedSlot) {
  var headerOffset = 0;
  var footerOffset = 0;
  var header = getSlot(slot, scopedSlot, "header");

  if (header) {
    headerOffset = header.length;
    children = children ? [].concat(_toConsumableArray(header), _toConsumableArray(children)) : _toConsumableArray(header);
  }

  var footer = getSlot(slot, scopedSlot, "footer");

  if (footer) {
    footerOffset = footer.length;
    children = children ? [].concat(_toConsumableArray(children), _toConsumableArray(footer)) : _toConsumableArray(footer);
  }

  return {
    children: children,
    headerOffset: headerOffset,
    footerOffset: footerOffset
  };
}

function getComponentAttributes($attrs, componentData) {
  var attributes = null;

  var update = function update(name, value) {
    attributes = buildAttribute(attributes, name, value);
  };

  var attrs = Object.keys($attrs).filter(function (key) {
    return key === "id" || key.startsWith("data-");
  }).reduce(function (res, key) {
    res[key] = $attrs[key];
    return res;
  }, {});
  update("attrs", attrs);

  if (!componentData) {
    return attributes;
  }

  var on = componentData.on,
      props = componentData.props,
      componentDataAttrs = componentData.attrs;
  update("on", on);
  update("props", props);
  Object.assign(attributes.attrs, componentDataAttrs);
  return attributes;
}

var eventsListened = ["Start", "Add", "Remove", "Update", "End"];
var eventsToEmit = ["Choose", "Unchoose", "Sort", "Filter", "Clone"];
var readonlyProperties = ["Move"].concat(eventsListened, eventsToEmit).map(function (evt) {
  return "on" + evt;
});
var draggingElement = null;
var props = {
  options: Object,
  list: {
    type: Array,
    required: false,
    default: null
  },
  value: {
    type: Array,
    required: false,
    default: null
  },
  noTransitionOnDrag: {
    type: Boolean,
    default: false
  },
  clone: {
    type: Function,
    default: function _default(original) {
      return original;
    }
  },
  element: {
    type: String,
    default: "div"
  },
  tag: {
    type: String,
    default: null
  },
  move: {
    type: Function,
    default: null
  },
  componentData: {
    type: Object,
    required: false,
    default: null
  }
};
var draggableComponent = {
  name: "draggable",
  inheritAttrs: false,
  props: props,
  data: function data() {
    return {
      transitionMode: false,
      noneFunctionalComponentMode: false
    };
  },
  render: function render(h) {
    var slots = this.$slots.default;
    this.transitionMode = vuedraggable_isTransition(slots);

    var _computeChildrenAndOf = computeChildrenAndOffsets(slots, this.$slots, this.$scopedSlots),
        children = _computeChildrenAndOf.children,
        headerOffset = _computeChildrenAndOf.headerOffset,
        footerOffset = _computeChildrenAndOf.footerOffset;

    this.headerOffset = headerOffset;
    this.footerOffset = footerOffset;
    var attributes = getComponentAttributes(this.$attrs, this.componentData);
    return h(this.getTag(), attributes, children);
  },
  created: function created() {
    if (this.list !== null && this.value !== null) {
      helper["b" /* console */].error("Value and list props are mutually exclusive! Please set one or another.");
    }

    if (this.element !== "div") {
      helper["b" /* console */].warn("Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props");
    }

    if (this.options !== undefined) {
      helper["b" /* console */].warn("Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props");
    }
  },
  mounted: function mounted() {
    var _this3 = this;

    this.noneFunctionalComponentMode = this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() && !this.getIsFunctional();

    if (this.noneFunctionalComponentMode && this.transitionMode) {
      throw new Error("Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ".concat(this.getTag()));
    }

    var optionsAdded = {};
    eventsListened.forEach(function (elt) {
      optionsAdded["on" + elt] = delegateAndEmit.call(_this3, elt);
    });
    eventsToEmit.forEach(function (elt) {
      optionsAdded["on" + elt] = emit.bind(_this3, elt);
    });
    var attributes = Object.keys(this.$attrs).reduce(function (res, key) {
      res[Object(helper["a" /* camelize */])(key)] = _this3.$attrs[key];
      return res;
    }, {});
    var options = Object.assign({}, this.options, attributes, optionsAdded, {
      onMove: function onMove(evt, originalEvent) {
        return _this3.onDragMove(evt, originalEvent);
      }
    });
    !("draggable" in options) && (options.draggable = ">*");
    this._sortable = new external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default.a(this.rootContainer, options);
    this.computeIndexes();
  },
  beforeDestroy: function beforeDestroy() {
    if (this._sortable !== undefined) this._sortable.destroy();
  },
  computed: {
    rootContainer: function rootContainer() {
      return this.transitionMode ? this.$el.children[0] : this.$el;
    },
    realList: function realList() {
      return this.list ? this.list : this.value;
    }
  },
  watch: {
    options: {
      handler: function handler(newOptionValue) {
        this.updateOptions(newOptionValue);
      },
      deep: true
    },
    $attrs: {
      handler: function handler(newOptionValue) {
        this.updateOptions(newOptionValue);
      },
      deep: true
    },
    realList: function realList() {
      this.computeIndexes();
    }
  },
  methods: {
    getIsFunctional: function getIsFunctional() {
      var fnOptions = this._vnode.fnOptions;
      return fnOptions && fnOptions.functional;
    },
    getTag: function getTag() {
      return this.tag || this.element;
    },
    updateOptions: function updateOptions(newOptionValue) {
      for (var property in newOptionValue) {
        var value = Object(helper["a" /* camelize */])(property);

        if (readonlyProperties.indexOf(value) === -1) {
          this._sortable.option(value, newOptionValue[property]);
        }
      }
    },
    getChildrenNodes: function getChildrenNodes() {
      if (this.noneFunctionalComponentMode) {
        return this.$children[0].$slots.default;
      }

      var rawNodes = this.$slots.default;
      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;
    },
    computeIndexes: function computeIndexes() {
      var _this4 = this;

      this.$nextTick(function () {
        _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode, _this4.footerOffset);
      });
    },
    getUnderlyingVm: function getUnderlyingVm(htmlElt) {
      var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);

      if (index === -1) {
        //Edge case during move callback: related element might be
        //an element different from collection
        return null;
      }

      var element = this.realList[index];
      return {
        index: index,
        element: element
      };
    },
    getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {
      var vue = _ref.__vue__;

      if (!vue || !vue.$options || !isTransitionName(vue.$options._componentTag)) {
        if (!("realList" in vue) && vue.$children.length === 1 && "realList" in vue.$children[0]) return vue.$children[0];
        return vue;
      }

      return vue.$parent;
    },
    emitChanges: function emitChanges(evt) {
      var _this5 = this;

      this.$nextTick(function () {
        _this5.$emit("change", evt);
      });
    },
    alterList: function alterList(onList) {
      if (this.list) {
        onList(this.list);
        return;
      }

      var newList = _toConsumableArray(this.value);

      onList(newList);
      this.$emit("input", newList);
    },
    spliceList: function spliceList() {
      var _arguments = arguments;

      var spliceList = function spliceList(list) {
        return list.splice.apply(list, _toConsumableArray(_arguments));
      };

      this.alterList(spliceList);
    },
    updatePosition: function updatePosition(oldIndex, newIndex) {
      var updatePosition = function updatePosition(list) {
        return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);
      };

      this.alterList(updatePosition);
    },
    getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {
      var to = _ref2.to,
          related = _ref2.related;
      var component = this.getUnderlyingPotencialDraggableComponent(to);

      if (!component) {
        return {
          component: component
        };
      }

      var list = component.realList;
      var context = {
        list: list,
        component: component
      };

      if (to !== related && list && component.getUnderlyingVm) {
        var destination = component.getUnderlyingVm(related);

        if (destination) {
          return Object.assign(destination, context);
        }
      }

      return context;
    },
    getVmIndex: function getVmIndex(domIndex) {
      var indexes = this.visibleIndexes;
      var numberIndexes = indexes.length;
      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];
    },
    getComponent: function getComponent() {
      return this.$slots.default[0].componentInstance;
    },
    resetTransitionData: function resetTransitionData(index) {
      if (!this.noTransitionOnDrag || !this.transitionMode) {
        return;
      }

      var nodes = this.getChildrenNodes();
      nodes[index].data = null;
      var transitionContainer = this.getComponent();
      transitionContainer.children = [];
      transitionContainer.kept = undefined;
    },
    onDragStart: function onDragStart(evt) {
      this.context = this.getUnderlyingVm(evt.item);
      evt.item._underlying_vm_ = this.clone(this.context.element);
      draggingElement = evt.item;
    },
    onDragAdd: function onDragAdd(evt) {
      var element = evt.item._underlying_vm_;

      if (element === undefined) {
        return;
      }

      Object(helper["d" /* removeNode */])(evt.item);
      var newIndex = this.getVmIndex(evt.newIndex);
      this.spliceList(newIndex, 0, element);
      this.computeIndexes();
      var added = {
        element: element,
        newIndex: newIndex
      };
      this.emitChanges({
        added: added
      });
    },
    onDragRemove: function onDragRemove(evt) {
      Object(helper["c" /* insertNodeAt */])(this.rootContainer, evt.item, evt.oldIndex);

      if (evt.pullMode === "clone") {
        Object(helper["d" /* removeNode */])(evt.clone);
        return;
      }

      var oldIndex = this.context.index;
      this.spliceList(oldIndex, 1);
      var removed = {
        element: this.context.element,
        oldIndex: oldIndex
      };
      this.resetTransitionData(oldIndex);
      this.emitChanges({
        removed: removed
      });
    },
    onDragUpdate: function onDragUpdate(evt) {
      Object(helper["d" /* removeNode */])(evt.item);
      Object(helper["c" /* insertNodeAt */])(evt.from, evt.item, evt.oldIndex);
      var oldIndex = this.context.index;
      var newIndex = this.getVmIndex(evt.newIndex);
      this.updatePosition(oldIndex, newIndex);
      var moved = {
        element: this.context.element,
        oldIndex: oldIndex,
        newIndex: newIndex
      };
      this.emitChanges({
        moved: moved
      });
    },
    updateProperty: function updateProperty(evt, propertyName) {
      evt.hasOwnProperty(propertyName) && (evt[propertyName] += this.headerOffset);
    },
    computeFutureIndex: function computeFutureIndex(relatedContext, evt) {
      if (!relatedContext.element) {
        return 0;
      }

      var domChildren = _toConsumableArray(evt.to.children).filter(function (el) {
        return el.style["display"] !== "none";
      });

      var currentDOMIndex = domChildren.indexOf(evt.related);
      var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);
      var draggedInList = domChildren.indexOf(draggingElement) !== -1;
      return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;
    },
    onDragMove: function onDragMove(evt, originalEvent) {
      var onMove = this.move;

      if (!onMove || !this.realList) {
        return true;
      }

      var relatedContext = this.getRelatedContextFromMoveEvent(evt);
      var draggedContext = this.context;
      var futureIndex = this.computeFutureIndex(relatedContext, evt);
      Object.assign(draggedContext, {
        futureIndex: futureIndex
      });
      var sendEvt = Object.assign({}, evt, {
        relatedContext: relatedContext,
        draggedContext: draggedContext
      });
      return onMove(sendEvt, originalEvent);
    },
    onDragEnd: function onDragEnd() {
      this.computeIndexes();
      draggingElement = null;
    }
  }
};

if (typeof window !== "undefined" && "Vue" in window) {
  window.Vue.component("draggable", draggableComponent);
}

/* harmony default export */ var vuedraggable = (draggableComponent);
// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js


/* harmony default export */ var entry_lib = __webpack_exports__["default"] = (vuedraggable);



/***/ })

/******/ })["default"];
//# sourceMappingURL=vuedraggable.common.js.map{"version":3,"sources":["webpack://vuedraggable/webpack/bootstrap","webpack://vuedraggable/./node_modules/core-js/modules/_iter-define.js","webpack://vuedraggable/./node_modules/core-js/modules/_string-at.js","webpack://vuedraggable/./node_modules/core-js/modules/_advance-string-index.js","webpack://vuedraggable/./node_modules/core-js/modules/_flags.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-keys.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-dps.js","webpack://vuedraggable/./node_modules/core-js/modules/_fix-re-wks.js","webpack://vuedraggable/./node_modules/core-js/modules/_dom-create.js","webpack://vuedraggable/./node_modules/core-js/modules/_classof.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-gops.js","webpack://vuedraggable/./node_modules/core-js/modules/_redefine.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-create.js","webpack://vuedraggable/./node_modules/core-js/modules/_wks.js","webpack://vuedraggable/./node_modules/core-js/modules/_library.js","webpack://vuedraggable/./node_modules/core-js/modules/_cof.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.string.includes.js","webpack://vuedraggable/./node_modules/core-js/modules/_hide.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-gpo.js","webpack://vuedraggable/./node_modules/core-js/modules/_iter-create.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.object.keys.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-integer.js","webpack://vuedraggable/./node_modules/core-js/modules/_property-desc.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-object.js","webpack://vuedraggable/./node_modules/core-js/modules/_fails-is-regexp.js","webpack://vuedraggable/./node_modules/core-js/modules/_regexp-exec.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-pie.js","webpack://vuedraggable/./node_modules/core-js/modules/_shared.js","webpack://vuedraggable/./node_modules/core-js/modules/_export.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-sap.js","webpack://vuedraggable/./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack://vuedraggable/./node_modules/core-js/modules/_shared-key.js","webpack://vuedraggable/./node_modules/core-js/modules/_iobject.js","webpack://vuedraggable/./node_modules/core-js/modules/es7.array.includes.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-iobject.js","webpack://vuedraggable/./node_modules/core-js/modules/_has.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-primitive.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-assign.js","webpack://vuedraggable/./node_modules/core-js/modules/_global.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-absolute-index.js","webpack://vuedraggable/./node_modules/core-js/modules/_fails.js","webpack://vuedraggable/./node_modules/core-js/modules/_set-to-string-tag.js","webpack://vuedraggable/./node_modules/core-js/modules/_core.js","webpack://vuedraggable/./node_modules/core-js/modules/_iterators.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-dp.js","webpack://vuedraggable/./node_modules/core-js/modules/_ctx.js","webpack://vuedraggable/./node_modules/core-js/modules/_add-to-unscopables.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-length.js","webpack://vuedraggable/./node_modules/core-js/modules/_descriptors.js","webpack://vuedraggable/external {\"commonjs\":\"sortablejs\",\"commonjs2\":\"sortablejs\",\"amd\":\"sortablejs\",\"root\":\"Sortable\"}","webpack://vuedraggable/./node_modules/core-js/modules/es6.regexp.replace.js","webpack://vuedraggable/./node_modules/core-js/modules/_is-regexp.js","webpack://vuedraggable/./node_modules/core-js/modules/web.dom.iterable.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.regexp.exec.js","webpack://vuedraggable/./node_modules/core-js/modules/_defined.js","webpack://vuedraggable/./node_modules/core-js/modules/_array-includes.js","webpack://vuedraggable/./src/util/helper.js","webpack://vuedraggable/./node_modules/core-js/modules/_ie8-dom-define.js","webpack://vuedraggable/(webpack)/buildin/global.js","webpack://vuedraggable/./node_modules/core-js/modules/_uid.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.array.iterator.js","webpack://vuedraggable/./node_modules/core-js/modules/_an-object.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-keys-internal.js","webpack://vuedraggable/./node_modules/core-js/modules/_string-context.js","webpack://vuedraggable/./node_modules/core-js/modules/_is-object.js","webpack://vuedraggable/./node_modules/core-js/modules/_iter-step.js","webpack://vuedraggable/./node_modules/core-js/modules/_a-function.js","webpack://vuedraggable/./node_modules/core-js/modules/_enum-bug-keys.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.string.starts-with.js","webpack://vuedraggable/./node_modules/current-script-polyfill/currentScript.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.object.assign.js","webpack://vuedraggable/./node_modules/core-js/modules/_function-to-string.js","webpack://vuedraggable/./node_modules/core-js/modules/_html.js","webpack://vuedraggable/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://vuedraggable/./src/vuedraggable.js","webpack://vuedraggable/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"names":["getConsole","window","console","global","cached","fn","cache","Object","create","cachedFn","str","hit","regex","camelize","replace","_","c","toUpperCase","removeNode","node","parentElement","removeChild","insertNodeAt","fatherNode","position","refNode","children","nextSibling","insertBefore","buildAttribute","object","propName","value","undefined","computeVmIndex","vnodes","element","map","elt","elm","indexOf","computeIndexes","slots","isTransition","footerOffset","elmFromNodes","footerIndex","length","rawIndexes","idx","filter","ind","emit","evtName","evtData","$nextTick","$emit","toLowerCase","delegateAndEmit","realList","call","isTransitionName","name","includes","componentOptions","tag","getSlot","slot","scopedSlot","key","computeChildrenAndOffsets","headerOffset","header","footer","getComponentAttributes","$attrs","componentData","attributes","update","attrs","keys","startsWith","reduce","res","on","props","componentDataAttrs","assign","eventsListened","eventsToEmit","readonlyProperties","evt","draggingElement","options","list","type","Array","required","default","noTransitionOnDrag","Boolean","clone","Function","original","String","move","draggableComponent","inheritAttrs","data","transitionMode","noneFunctionalComponentMode","render","h","$slots","$scopedSlots","getTag","created","error","warn","mounted","$el","nodeName","getIsFunctional","Error","optionsAdded","forEach","bind","onMove","originalEvent","onDragMove","draggable","_sortable","Sortable","rootContainer","beforeDestroy","destroy","computed","watch","handler","newOptionValue","updateOptions","deep","methods","fnOptions","_vnode","functional","property","option","getChildrenNodes","$children","rawNodes","child","visibleIndexes","getUnderlyingVm","htmlElt","index","getUnderlyingPotencialDraggableComponent","vue","__vue__","$options","_componentTag","$parent","emitChanges","alterList","onList","newList","spliceList","splice","arguments","updatePosition","oldIndex","newIndex","getRelatedContextFromMoveEvent","to","related","component","context","destination","getVmIndex","domIndex","indexes","numberIndexes","getComponent","componentInstance","resetTransitionData","nodes","transitionContainer","kept","onDragStart","item","_underlying_vm_","onDragAdd","added","onDragRemove","pullMode","removed","onDragUpdate","from","moved","updateProperty","propertyName","hasOwnProperty","computeFutureIndex","relatedContext","domChildren","el","style","currentDOMIndex","currentIndex","draggedInList","willInsertAfter","draggedContext","futureIndex","sendEvt","onDragEnd","Vue"],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;AClFa;AACb,cAAc,mBAAO,CAAC,MAAY;AAClC,cAAc,mBAAO,CAAC,MAAW;AACjC,eAAe,mBAAO,CAAC,MAAa;AACpC,WAAW,mBAAO,CAAC,MAAS;AAC5B,gBAAgB,mBAAO,CAAC,MAAc;AACtC,kBAAkB,mBAAO,CAAC,MAAgB;AAC1C,qBAAqB,mBAAO,CAAC,MAAsB;AACnD,qBAAqB,mBAAO,CAAC,MAAe;AAC5C,eAAe,mBAAO,CAAC,MAAQ;AAC/B,8CAA8C;AAC9C;AACA;AACA;;AAEA,8BAA8B,aAAa;;AAE3C;AACA;AACA;AACA;AACA;AACA,yCAAyC,oCAAoC;AAC7E,6CAA6C,oCAAoC;AACjF,KAAK,4BAA4B,oCAAoC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;;;;;ACpEA,gBAAgB,mBAAO,CAAC,MAAe;AACvC,cAAc,mBAAO,CAAC,MAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChBa;AACb,SAAS,mBAAO,CAAC,MAAc;;AAE/B;AACA;AACA;AACA;AACA;;;;;;;;;ACPa;AACb;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACZA;AACA,YAAY,mBAAO,CAAC,MAAyB;AAC7C,kBAAkB,mBAAO,CAAC,MAAkB;;AAE5C;AACA;AACA;;;;;;;;ACNA,SAAS,mBAAO,CAAC,MAAc;AAC/B,eAAe,mBAAO,CAAC,MAAc;AACrC,cAAc,mBAAO,CAAC,MAAgB;;AAEtC,iBAAiB,mBAAO,CAAC,MAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACZa;AACb,mBAAO,CAAC,MAAmB;AAC3B,eAAe,mBAAO,CAAC,MAAa;AACpC,WAAW,mBAAO,CAAC,MAAS;AAC5B,YAAY,mBAAO,CAAC,MAAU;AAC9B,cAAc,mBAAO,CAAC,MAAY;AAClC,UAAU,mBAAO,CAAC,MAAQ;AAC1B,iBAAiB,mBAAO,CAAC,MAAgB;;AAEzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,2BAA2B,mBAAmB,aAAa;AAC3D;AACA;AACA;AACA;AACA,6CAA6C,WAAW;AACxD;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kBAAkB;AAClB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA,2BAA2B,gCAAgC;AAC3D;AACA;AACA;;;;;;;;AC/FA,eAAe,mBAAO,CAAC,MAAc;AACrC,eAAe,mBAAO,CAAC,MAAW;AAClC;AACA;AACA;AACA;AACA;;;;;;;;ACNA;AACA,UAAU,mBAAO,CAAC,MAAQ;AAC1B,UAAU,mBAAO,CAAC,MAAQ;AAC1B;AACA,2BAA2B,kBAAkB,EAAE;;AAE/C;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;;;;;;;;ACAA,aAAa,mBAAO,CAAC,MAAW;AAChC,WAAW,mBAAO,CAAC,MAAS;AAC5B,UAAU,mBAAO,CAAC,MAAQ;AAC1B,UAAU,mBAAO,CAAC,MAAQ;AAC1B,gBAAgB,mBAAO,CAAC,MAAuB;AAC/C;AACA;;AAEA,mBAAO,CAAC,MAAS;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;;;;;;;;AC9BD;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC,UAAU,mBAAO,CAAC,MAAe;AACjC,kBAAkB,mBAAO,CAAC,MAAkB;AAC5C,eAAe,mBAAO,CAAC,MAAe;AACtC,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,MAAe;AACtC;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAO,CAAC,MAAS;AACnB,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;ACxCA,YAAY,mBAAO,CAAC,MAAW;AAC/B,UAAU,mBAAO,CAAC,MAAQ;AAC1B,aAAa,mBAAO,CAAC,MAAW;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;ACVA;;;;;;;;ACAA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;ACJA;AACa;AACb,cAAc,mBAAO,CAAC,MAAW;AACjC,cAAc,mBAAO,CAAC,MAAmB;AACzC;;AAEA,gCAAgC,mBAAO,CAAC,MAAoB;AAC5D;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACXD,SAAS,mBAAO,CAAC,MAAc;AAC/B,iBAAiB,mBAAO,CAAC,MAAkB;AAC3C,iBAAiB,mBAAO,CAAC,MAAgB;AACzC;AACA,CAAC;AACD;AACA;AACA;;;;;;;;ACPA;AACA,UAAU,mBAAO,CAAC,MAAQ;AAC1B,eAAe,mBAAO,CAAC,MAAc;AACrC,eAAe,mBAAO,CAAC,MAAe;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;ACZa;AACb,aAAa,mBAAO,CAAC,MAAkB;AACvC,iBAAiB,mBAAO,CAAC,MAAkB;AAC3C,qBAAqB,mBAAO,CAAC,MAAsB;AACnD;;AAEA;AACA,mBAAO,CAAC,MAAS,qBAAqB,mBAAO,CAAC,MAAQ,4BAA4B,aAAa,EAAE;;AAEjG;AACA,qDAAqD,4BAA4B;AACjF;AACA;;;;;;;;ACZA;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC,YAAY,mBAAO,CAAC,MAAgB;;AAEpC,mBAAO,CAAC,MAAe;AACvB;AACA;AACA;AACA,CAAC;;;;;;;;ACRD;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA,cAAc,mBAAO,CAAC,MAAY;AAClC;AACA;AACA;;;;;;;;ACJA,YAAY,mBAAO,CAAC,MAAQ;AAC5B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK,YAAY;AACjB,GAAG;AACH;;;;;;;;;ACXa;;AAEb,kBAAkB,mBAAO,CAAC,MAAU;;AAEpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;;;;;;;;ACzDA,cAAc;;;;;;;;ACAd,WAAW,mBAAO,CAAC,MAAS;AAC5B,aAAa,mBAAO,CAAC,MAAW;AAChC;AACA,kDAAkD;;AAElD;AACA,qEAAqE;AACrE,CAAC;AACD;AACA,QAAQ,mBAAO,CAAC,MAAY;AAC5B;AACA,CAAC;;;;;;;;ACXD,aAAa,mBAAO,CAAC,MAAW;AAChC,WAAW,mBAAO,CAAC,MAAS;AAC5B,WAAW,mBAAO,CAAC,MAAS;AAC5B,eAAe,mBAAO,CAAC,MAAa;AACpC,UAAU,mBAAO,CAAC,MAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,uBAAuB;AACzG,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;;AC1CA;AACA,cAAc,mBAAO,CAAC,MAAW;AACjC,WAAW,mBAAO,CAAC,MAAS;AAC5B,YAAY,mBAAO,CAAC,MAAU;AAC9B;AACA,6BAA6B;AAC7B;AACA;AACA,qDAAqD,OAAO,EAAE;AAC9D;;;;;;;;;ACTa;;AAEb,cAAc,mBAAO,CAAC,MAAY;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBA,aAAa,mBAAO,CAAC,MAAW;AAChC,UAAU,mBAAO,CAAC,MAAQ;AAC1B;AACA;AACA;;;;;;;;ACJA;AACA,UAAU,mBAAO,CAAC,MAAQ;AAC1B;AACA;AACA;AACA;;;;;;;;;ACLa;AACb;AACA,cAAc,mBAAO,CAAC,MAAW;AACjC,gBAAgB,mBAAO,CAAC,MAAmB;;AAE3C;AACA;AACA;AACA;AACA,CAAC;;AAED,mBAAO,CAAC,MAAuB;;;;;;;;ACX/B;AACA,cAAc,mBAAO,CAAC,MAAY;AAClC,cAAc,mBAAO,CAAC,MAAY;AAClC;AACA;AACA;;;;;;;;ACLA,uBAAuB;AACvB;AACA;AACA;;;;;;;;ACHA;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACXa;AACb;AACA,cAAc,mBAAO,CAAC,MAAgB;AACtC,WAAW,mBAAO,CAAC,MAAgB;AACnC,UAAU,mBAAO,CAAC,MAAe;AACjC,eAAe,mBAAO,CAAC,MAAc;AACrC,cAAc,mBAAO,CAAC,MAAY;AAClC;;AAEA;AACA,6BAA6B,mBAAO,CAAC,MAAU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU,EAAE;AAChD,mBAAmB,sCAAsC;AACzD,CAAC,qCAAqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;ACjCD;AACA;AACA;AACA;AACA;AACA,yCAAyC;;;;;;;;ACLzC,gBAAgB,mBAAO,CAAC,MAAe;AACvC;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACNA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;ACNA,UAAU,mBAAO,CAAC,MAAc;AAChC,UAAU,mBAAO,CAAC,MAAQ;AAC1B,UAAU,mBAAO,CAAC,MAAQ;;AAE1B;AACA,oEAAoE,iCAAiC;AACrG;;;;;;;;ACNA,6BAA6B;AAC7B,uCAAuC;;;;;;;;ACDvC;;;;;;;;ACAA,eAAe,mBAAO,CAAC,MAAc;AACrC,qBAAqB,mBAAO,CAAC,MAAmB;AAChD,kBAAkB,mBAAO,CAAC,MAAiB;AAC3C;;AAEA,YAAY,mBAAO,CAAC,MAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;;ACfA;AACA,gBAAgB,mBAAO,CAAC,MAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnBA;AACA,kBAAkB,mBAAO,CAAC,MAAQ;AAClC;AACA,0CAA0C,mBAAO,CAAC,MAAS,6BAA6B;AACxF;AACA;AACA;;;;;;;;ACNA;AACA,gBAAgB,mBAAO,CAAC,MAAe;AACvC;AACA;AACA,2DAA2D;AAC3D;;;;;;;;ACLA;AACA,kBAAkB,mBAAO,CAAC,MAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;;ACHD,uC;;;;;;;;ACAa;;AAEb,eAAe,mBAAO,CAAC,MAAc;AACrC,eAAe,mBAAO,CAAC,MAAc;AACrC,eAAe,mBAAO,CAAC,MAAc;AACrC,gBAAgB,mBAAO,CAAC,MAAe;AACvC,yBAAyB,mBAAO,CAAC,MAAyB;AAC1D,iBAAiB,mBAAO,CAAC,MAAyB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAO,CAAC,MAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACrHD;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC,UAAU,mBAAO,CAAC,MAAQ;AAC1B,YAAY,mBAAO,CAAC,MAAQ;AAC5B;AACA;AACA;AACA;;;;;;;;ACPA,iBAAiB,mBAAO,CAAC,MAAsB;AAC/C,cAAc,mBAAO,CAAC,MAAgB;AACtC,eAAe,mBAAO,CAAC,MAAa;AACpC,aAAa,mBAAO,CAAC,MAAW;AAChC,WAAW,mBAAO,CAAC,MAAS;AAC5B,gBAAgB,mBAAO,CAAC,MAAc;AACtC,UAAU,mBAAO,CAAC,MAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oDAAoD,wBAAwB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACzDa;AACb,iBAAiB,mBAAO,CAAC,MAAgB;AACzC,mBAAO,CAAC,MAAW;AACnB;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;;;;;;;;ACRD;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA,gBAAgB,mBAAO,CAAC,MAAe;AACvC,eAAe,mBAAO,CAAC,MAAc;AACrC,sBAAsB,mBAAO,CAAC,MAAsB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,YAAY,eAAe;AAChC;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;;;;ACtBA,SAASA,UAAT,GAAsB;AACpB,MAAI,OAAOC,MAAP,KAAkB,WAAtB,EAAmC;AACjC,WAAOA,MAAM,CAACC,OAAd;AACD;;AACD,SAAOC,MAAM,CAACD,OAAd;AACD;;AACD,IAAMA,OAAO,GAAGF,UAAU,EAA1B;;AAEA,SAASI,MAAT,CAAgBC,EAAhB,EAAoB;AAClB,MAAMC,KAAK,GAAGC,MAAM,CAACC,MAAP,CAAc,IAAd,CAAd;AACA,SAAO,SAASC,QAAT,CAAkBC,GAAlB,EAAuB;AAC5B,QAAMC,GAAG,GAAGL,KAAK,CAACI,GAAD,CAAjB;AACA,WAAOC,GAAG,KAAKL,KAAK,CAACI,GAAD,CAAL,GAAaL,EAAE,CAACK,GAAD,CAApB,CAAV;AACD,GAHD;AAID;;AAED,IAAME,KAAK,GAAG,QAAd;AACA,IAAMC,QAAQ,GAAGT,MAAM,CAAC,UAAAM,GAAG;AAAA,SACzBA,GAAG,CAACI,OAAJ,CAAYF,KAAZ,EAAmB,UAACG,CAAD,EAAIC,CAAJ;AAAA,WAAWA,CAAC,GAAGA,CAAC,CAACC,WAAF,EAAH,GAAqB,EAAjC;AAAA,GAAnB,CADyB;AAAA,CAAJ,CAAvB;;AAIA,SAASC,UAAT,CAAoBC,IAApB,EAA0B;AACxB,MAAIA,IAAI,CAACC,aAAL,KAAuB,IAA3B,EAAiC;AAC/BD,QAAI,CAACC,aAAL,CAAmBC,WAAnB,CAA+BF,IAA/B;AACD;AACF;;AAED,SAASG,YAAT,CAAsBC,UAAtB,EAAkCJ,IAAlC,EAAwCK,QAAxC,EAAkD;AAChD,MAAMC,OAAO,GACXD,QAAQ,KAAK,CAAb,GACID,UAAU,CAACG,QAAX,CAAoB,CAApB,CADJ,GAEIH,UAAU,CAACG,QAAX,CAAoBF,QAAQ,GAAG,CAA/B,EAAkCG,WAHxC;AAIAJ,YAAU,CAACK,YAAX,CAAwBT,IAAxB,EAA8BM,OAA9B;AACD;;;;;;;;;;ACjCD,kBAAkB,mBAAO,CAAC,MAAgB,MAAM,mBAAO,CAAC,MAAU;AAClE,+BAA+B,mBAAO,CAAC,MAAe,gBAAgB,mBAAmB,UAAU,EAAE,EAAE;AACvG,CAAC;;;;;;;;ACFD;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;;;;;;;;;ACJa;AACb,uBAAuB,mBAAO,CAAC,MAAuB;AACtD,WAAW,mBAAO,CAAC,MAAc;AACjC,gBAAgB,mBAAO,CAAC,MAAc;AACtC,gBAAgB,mBAAO,CAAC,MAAe;;AAEvC;AACA;AACA;AACA;AACA,iBAAiB,mBAAO,CAAC,MAAgB;AACzC,gCAAgC;AAChC,cAAc;AACd,iBAAiB;AACjB;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;;;;;;;ACjCA,eAAe,mBAAO,CAAC,MAAc;AACrC;AACA;AACA;AACA;;;;;;;;ACJA,UAAU,mBAAO,CAAC,MAAQ;AAC1B,gBAAgB,mBAAO,CAAC,MAAe;AACvC,mBAAmB,mBAAO,CAAC,MAAmB;AAC9C,eAAe,mBAAO,CAAC,MAAe;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChBA,sBAAsB;AACtB,eAAe,mBAAO,CAAC,MAAc;AACrC,cAAc,mBAAO,CAAC,MAAY;;AAElC;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;;;;;;;;ACFA;AACA,UAAU;AACV;;;;;;;;ACFA;AACA;AACA;AACA;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;ACHA;AACa;AACb,cAAc,mBAAO,CAAC,MAAW;AACjC,eAAe,mBAAO,CAAC,MAAc;AACrC,cAAc,mBAAO,CAAC,MAAmB;AACzC;AACA;;AAEA,gCAAgC,mBAAO,CAAC,MAAoB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACjBD;;AAEA;;AAEA;AACA;AACA,wDAAwD;;AAExD;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,mBAAmB;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACnCD;AACA,cAAc,mBAAO,CAAC,MAAW;;AAEjC,0CAA0C,SAAS,mBAAO,CAAC,MAAkB,GAAG;;;;;;;;ACHhF,iBAAiB,mBAAO,CAAC,MAAW;;;;;;;;ACApC,eAAe,mBAAO,CAAC,MAAW;AAClC;;;;;;;;;;;;;ACDA;;AAEA;AACA,MAAM,IAAuC;AAC7C,IAAI,mBAAO,CAAC,MAAyB;AACrC;;AAEA,MAAM,eAAC;AACP,OAAO,eAAC,sCAAsC,eAAC,GAAG,eAAC;AACnD,IAAI,qBAAuB,GAAG,eAAC;AAC/B;AACA;;AAEA;AACe,sDAAI;;;;;;;;;;;;;;;;;;ACdJ;AACf;AACA,C;;ACFe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C,+BAA+B;AAC5E;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,C;;ACzBe;AACf;;AAEA,wCAAwC,SAAS;AACjD;AACA;;AAEA;AACA,C;;ACRkD;AACnC;AACf;AACA,oCAAoC,iBAAgB;AACpD;AACA;AACA;AACA,sFAAsF,iBAAgB;AACtG,C;;ACRe;AACf;AACA,C;;ACF8C;AACY;AACY;AACtB;AACjC;AACf,SAAS,eAAc,SAAS,qBAAoB,YAAY,2BAA0B,YAAY,gBAAe;AACrH,C;;;;;;;;ACNkD;AACnC;AACf,iCAAiC,iBAAgB;AACjD,C;;ACHe;AACf;AACA,C;;ACFe;AACf;AACA,C;;ACFoD;AACJ;AACsB;AAClB;AACrC;AACf,SAAS,kBAAiB,SAAS,gBAAe,SAAS,2BAA0B,SAAS,kBAAiB;AAC/G,C;;;;;;;;;;;;;;;;;;ACNA;AACA;;AAEA,SAASI,cAAT,CAAwBC,MAAxB,EAAgCC,QAAhC,EAA0CC,KAA1C,EAAiD;AAC/C,MAAIA,KAAK,KAAKC,SAAd,EAAyB;AACvB,WAAOH,MAAP;AACD;;AACDA,QAAM,GAAGA,MAAM,IAAI,EAAnB;AACAA,QAAM,CAACC,QAAD,CAAN,GAAmBC,KAAnB;AACA,SAAOF,MAAP;AACD;;AAED,SAASI,cAAT,CAAwBC,MAAxB,EAAgCC,OAAhC,EAAyC;AACvC,SAAOD,MAAM,CAACE,GAAP,CAAW,UAAAC,GAAG;AAAA,WAAIA,GAAG,CAACC,GAAR;AAAA,GAAd,EAA2BC,OAA3B,CAAmCJ,OAAnC,CAAP;AACD;;AAED,SAASK,eAAT,CAAwBC,KAAxB,EAA+BhB,QAA/B,EAAyCiB,YAAzC,EAAuDC,YAAvD,EAAqE;AACnE,MAAI,CAACF,KAAL,EAAY;AACV,WAAO,EAAP;AACD;;AAED,MAAMG,YAAY,GAAGH,KAAK,CAACL,GAAN,CAAU,UAAAC,GAAG;AAAA,WAAIA,GAAG,CAACC,GAAR;AAAA,GAAb,CAArB;AACA,MAAMO,WAAW,GAAGpB,QAAQ,CAACqB,MAAT,GAAkBH,YAAtC;;AACA,MAAMI,UAAU,GAAG,mBAAItB,QAAJ,EAAcW,GAAd,CAAkB,UAACC,GAAD,EAAMW,GAAN;AAAA,WACnCA,GAAG,IAAIH,WAAP,GAAqBD,YAAY,CAACE,MAAlC,GAA2CF,YAAY,CAACL,OAAb,CAAqBF,GAArB,CADR;AAAA,GAAlB,CAAnB;;AAGA,SAAOK,YAAY,GAAGK,UAAU,CAACE,MAAX,CAAkB,UAAAC,GAAG;AAAA,WAAIA,GAAG,KAAK,CAAC,CAAb;AAAA,GAArB,CAAH,GAA0CH,UAA7D;AACD;;AAED,SAASI,IAAT,CAAcC,OAAd,EAAuBC,OAAvB,EAAgC;AAAA;;AAC9B,OAAKC,SAAL,CAAe;AAAA,WAAM,KAAI,CAACC,KAAL,CAAWH,OAAO,CAACI,WAAR,EAAX,EAAkCH,OAAlC,CAAN;AAAA,GAAf;AACD;;AAED,SAASI,eAAT,CAAyBL,OAAzB,EAAkC;AAAA;;AAChC,SAAO,UAAAC,OAAO,EAAI;AAChB,QAAI,MAAI,CAACK,QAAL,KAAkB,IAAtB,EAA4B;AAC1B,YAAI,CAAC,WAAWN,OAAZ,CAAJ,CAAyBC,OAAzB;AACD;;AACDF,QAAI,CAACQ,IAAL,CAAU,MAAV,EAAgBP,OAAhB,EAAyBC,OAAzB;AACD,GALD;AAMD;;AAED,SAASO,gBAAT,CAA0BC,IAA1B,EAAgC;AAC9B,SAAO,CAAC,kBAAD,EAAqB,iBAArB,EAAwCC,QAAxC,CAAiDD,IAAjD,CAAP;AACD;;AAED,SAASnB,yBAAT,CAAsBD,KAAtB,EAA6B;AAC3B,MAAI,CAACA,KAAD,IAAUA,KAAK,CAACK,MAAN,KAAiB,CAA/B,EAAkC;AAChC,WAAO,KAAP;AACD;;AAH0B,8BAIIL,KAJJ;AAAA,MAIlBsB,gBAJkB,aAIlBA,gBAJkB;;AAK3B,MAAI,CAACA,gBAAL,EAAuB;AACrB,WAAO,KAAP;AACD;;AACD,SAAOH,gBAAgB,CAACG,gBAAgB,CAACC,GAAlB,CAAvB;AACD;;AAED,SAASC,OAAT,CAAiBC,IAAjB,EAAuBC,UAAvB,EAAmCC,GAAnC,EAAwC;AACtC,SAAOF,IAAI,CAACE,GAAD,CAAJ,KAAcD,UAAU,CAACC,GAAD,CAAV,GAAkBD,UAAU,CAACC,GAAD,CAAV,EAAlB,GAAsCpC,SAApD,CAAP;AACD;;AAED,SAASqC,yBAAT,CAAmC5C,QAAnC,EAA6CyC,IAA7C,EAAmDC,UAAnD,EAA+D;AAC7D,MAAIG,YAAY,GAAG,CAAnB;AACA,MAAI3B,YAAY,GAAG,CAAnB;AACA,MAAM4B,MAAM,GAAGN,OAAO,CAACC,IAAD,EAAOC,UAAP,EAAmB,QAAnB,CAAtB;;AACA,MAAII,MAAJ,EAAY;AACVD,gBAAY,GAAGC,MAAM,CAACzB,MAAtB;AACArB,YAAQ,GAAGA,QAAQ,gCAAO8C,MAAP,sBAAkB9C,QAAlB,wBAAkC8C,MAAlC,CAAnB;AACD;;AACD,MAAMC,MAAM,GAAGP,OAAO,CAACC,IAAD,EAAOC,UAAP,EAAmB,QAAnB,CAAtB;;AACA,MAAIK,MAAJ,EAAY;AACV7B,gBAAY,GAAG6B,MAAM,CAAC1B,MAAtB;AACArB,YAAQ,GAAGA,QAAQ,gCAAOA,QAAP,sBAAoB+C,MAApB,wBAAkCA,MAAlC,CAAnB;AACD;;AACD,SAAO;AAAE/C,YAAQ,EAARA,QAAF;AAAY6C,gBAAY,EAAZA,YAAZ;AAA0B3B,gBAAY,EAAZA;AAA1B,GAAP;AACD;;AAED,SAAS8B,sBAAT,CAAgCC,MAAhC,EAAwCC,aAAxC,EAAuD;AACrD,MAAIC,UAAU,GAAG,IAAjB;;AACA,MAAMC,MAAM,GAAG,SAATA,MAAS,CAAChB,IAAD,EAAO9B,KAAP,EAAiB;AAC9B6C,cAAU,GAAGhD,cAAc,CAACgD,UAAD,EAAaf,IAAb,EAAmB9B,KAAnB,CAA3B;AACD,GAFD;;AAGA,MAAM+C,KAAK,GAAGxE,MAAM,CAACyE,IAAP,CAAYL,MAAZ,EACXzB,MADW,CACJ,UAAAmB,GAAG;AAAA,WAAIA,GAAG,KAAK,IAAR,IAAgBA,GAAG,CAACY,UAAJ,CAAe,OAAf,CAApB;AAAA,GADC,EAEXC,MAFW,CAEJ,UAACC,GAAD,EAAMd,GAAN,EAAc;AACpBc,OAAG,CAACd,GAAD,CAAH,GAAWM,MAAM,CAACN,GAAD,CAAjB;AACA,WAAOc,GAAP;AACD,GALW,EAKT,EALS,CAAd;AAMAL,QAAM,CAAC,OAAD,EAAUC,KAAV,CAAN;;AAEA,MAAI,CAACH,aAAL,EAAoB;AAClB,WAAOC,UAAP;AACD;;AAfoD,MAgB7CO,EAhB6C,GAgBJR,aAhBI,CAgB7CQ,EAhB6C;AAAA,MAgBzCC,KAhByC,GAgBJT,aAhBI,CAgBzCS,KAhByC;AAAA,MAgB3BC,kBAhB2B,GAgBJV,aAhBI,CAgBlCG,KAhBkC;AAiBrDD,QAAM,CAAC,IAAD,EAAOM,EAAP,CAAN;AACAN,QAAM,CAAC,OAAD,EAAUO,KAAV,CAAN;AACA9E,QAAM,CAACgF,MAAP,CAAcV,UAAU,CAACE,KAAzB,EAAgCO,kBAAhC;AACA,SAAOT,UAAP;AACD;;AAED,IAAMW,cAAc,GAAG,CAAC,OAAD,EAAU,KAAV,EAAiB,QAAjB,EAA2B,QAA3B,EAAqC,KAArC,CAAvB;AACA,IAAMC,YAAY,GAAG,CAAC,QAAD,EAAW,UAAX,EAAuB,MAAvB,EAA+B,QAA/B,EAAyC,OAAzC,CAArB;AACA,IAAMC,kBAAkB,GAAG,CAAC,MAAD,SAAYF,cAAZ,EAA+BC,YAA/B,EAA6CpD,GAA7C,CACzB,UAAAsD,GAAG;AAAA,SAAI,OAAOA,GAAX;AAAA,CADsB,CAA3B;AAGA,IAAIC,eAAe,GAAG,IAAtB;AAEA,IAAMP,KAAK,GAAG;AACZQ,SAAO,EAAEtF,MADG;AAEZuF,MAAI,EAAE;AACJC,QAAI,EAAEC,KADF;AAEJC,YAAQ,EAAE,KAFN;AAGJC,WAAO,EAAE;AAHL,GAFM;AAOZlE,OAAK,EAAE;AACL+D,QAAI,EAAEC,KADD;AAELC,YAAQ,EAAE,KAFL;AAGLC,WAAO,EAAE;AAHJ,GAPK;AAYZC,oBAAkB,EAAE;AAClBJ,QAAI,EAAEK,OADY;AAElBF,WAAO,EAAE;AAFS,GAZR;AAgBZG,OAAK,EAAE;AACLN,QAAI,EAAEO,QADD;AAELJ,WAAO,EAAE,kBAAAK,QAAQ,EAAI;AACnB,aAAOA,QAAP;AACD;AAJI,GAhBK;AAsBZnE,SAAO,EAAE;AACP2D,QAAI,EAAES,MADC;AAEPN,WAAO,EAAE;AAFF,GAtBG;AA0BZjC,KAAG,EAAE;AACH8B,QAAI,EAAES,MADH;AAEHN,WAAO,EAAE;AAFN,GA1BO;AA8BZO,MAAI,EAAE;AACJV,QAAI,EAAEO,QADF;AAEJJ,WAAO,EAAE;AAFL,GA9BM;AAkCZtB,eAAa,EAAE;AACbmB,QAAI,EAAExF,MADO;AAEb0F,YAAQ,EAAE,KAFG;AAGbC,WAAO,EAAE;AAHI;AAlCH,CAAd;AAyCA,IAAMQ,kBAAkB,GAAG;AACzB5C,MAAI,EAAE,WADmB;AAGzB6C,cAAY,EAAE,KAHW;AAKzBtB,OAAK,EAALA,KALyB;AAOzBuB,MAPyB,kBAOlB;AACL,WAAO;AACLC,oBAAc,EAAE,KADX;AAELC,iCAA2B,EAAE;AAFxB,KAAP;AAID,GAZwB;AAczBC,QAdyB,kBAclBC,CAdkB,EAcf;AACR,QAAMtE,KAAK,GAAG,KAAKuE,MAAL,CAAYf,OAA1B;AACA,SAAKW,cAAL,GAAsBlE,yBAAY,CAACD,KAAD,CAAlC;;AAFQ,gCAGyC4B,yBAAyB,CACxE5B,KADwE,EAExE,KAAKuE,MAFmE,EAGxE,KAAKC,YAHmE,CAHlE;AAAA,QAGAxF,QAHA,yBAGAA,QAHA;AAAA,QAGU6C,YAHV,yBAGUA,YAHV;AAAA,QAGwB3B,YAHxB,yBAGwBA,YAHxB;;AAQR,SAAK2B,YAAL,GAAoBA,YAApB;AACA,SAAK3B,YAAL,GAAoBA,YAApB;AACA,QAAMiC,UAAU,GAAGH,sBAAsB,CAAC,KAAKC,MAAN,EAAc,KAAKC,aAAnB,CAAzC;AACA,WAAOoC,CAAC,CAAC,KAAKG,MAAL,EAAD,EAAgBtC,UAAhB,EAA4BnD,QAA5B,CAAR;AACD,GA1BwB;AA4BzB0F,SA5ByB,qBA4Bf;AACR,QAAI,KAAKtB,IAAL,KAAc,IAAd,IAAsB,KAAK9D,KAAL,KAAe,IAAzC,EAA+C;AAC7C9B,+BAAO,CAACmH,KAAR,CACE,yEADF;AAGD;;AAED,QAAI,KAAKjF,OAAL,KAAiB,KAArB,EAA4B;AAC1BlC,+BAAO,CAACoH,IAAR,CACE,8JADF;AAGD;;AAED,QAAI,KAAKzB,OAAL,KAAiB5D,SAArB,EAAgC;AAC9B/B,+BAAO,CAACoH,IAAR,CACE,qMADF;AAGD;AACF,GA9CwB;AAgDzBC,SAhDyB,qBAgDf;AAAA;;AACR,SAAKT,2BAAL,GACE,KAAKK,MAAL,GAAc1D,WAAd,OAAgC,KAAK+D,GAAL,CAASC,QAAT,CAAkBhE,WAAlB,EAAhC,IACA,CAAC,KAAKiE,eAAL,EAFH;;AAGA,QAAI,KAAKZ,2BAAL,IAAoC,KAAKD,cAA7C,EAA6D;AAC3D,YAAM,IAAIc,KAAJ,qIACyH,KAAKR,MAAL,EADzH,EAAN;AAGD;;AACD,QAAMS,YAAY,GAAG,EAArB;AACApC,kBAAc,CAACqC,OAAf,CAAuB,UAAAvF,GAAG,EAAI;AAC5BsF,kBAAY,CAAC,OAAOtF,GAAR,CAAZ,GAA2BoB,eAAe,CAACE,IAAhB,CAAqB,MAArB,EAA2BtB,GAA3B,CAA3B;AACD,KAFD;AAIAmD,gBAAY,CAACoC,OAAb,CAAqB,UAAAvF,GAAG,EAAI;AAC1BsF,kBAAY,CAAC,OAAOtF,GAAR,CAAZ,GAA2Bc,IAAI,CAAC0E,IAAL,CAAU,MAAV,EAAgBxF,GAAhB,CAA3B;AACD,KAFD;AAIA,QAAMuC,UAAU,GAAGtE,MAAM,CAACyE,IAAP,CAAY,KAAKL,MAAjB,EAAyBO,MAAzB,CAAgC,UAACC,GAAD,EAAMd,GAAN,EAAc;AAC/Dc,SAAG,CAACtE,kCAAQ,CAACwD,GAAD,CAAT,CAAH,GAAqB,MAAI,CAACM,MAAL,CAAYN,GAAZ,CAArB;AACA,aAAOc,GAAP;AACD,KAHkB,EAGhB,EAHgB,CAAnB;AAKA,QAAMU,OAAO,GAAGtF,MAAM,CAACgF,MAAP,CAAc,EAAd,EAAkB,KAAKM,OAAvB,EAAgChB,UAAhC,EAA4C+C,YAA5C,EAA0D;AACxEG,YAAM,EAAE,gBAACpC,GAAD,EAAMqC,aAAN,EAAwB;AAC9B,eAAO,MAAI,CAACC,UAAL,CAAgBtC,GAAhB,EAAqBqC,aAArB,CAAP;AACD;AAHuE,KAA1D,CAAhB;AAKA,MAAE,eAAenC,OAAjB,MAA8BA,OAAO,CAACqC,SAAR,GAAoB,IAAlD;AACA,SAAKC,SAAL,GAAiB,IAAIC,wFAAJ,CAAa,KAAKC,aAAlB,EAAiCxC,OAAjC,CAAjB;AACA,SAAKpD,cAAL;AACD,GA/EwB;AAiFzB6F,eAjFyB,2BAiFT;AACd,QAAI,KAAKH,SAAL,KAAmBlG,SAAvB,EAAkC,KAAKkG,SAAL,CAAeI,OAAf;AACnC,GAnFwB;AAqFzBC,UAAQ,EAAE;AACRH,iBADQ,2BACQ;AACd,aAAO,KAAKxB,cAAL,GAAsB,KAAKW,GAAL,CAAS9F,QAAT,CAAkB,CAAlB,CAAtB,GAA6C,KAAK8F,GAAzD;AACD,KAHO;AAKR7D,YALQ,sBAKG;AACT,aAAO,KAAKmC,IAAL,GAAY,KAAKA,IAAjB,GAAwB,KAAK9D,KAApC;AACD;AAPO,GArFe;AA+FzByG,OAAK,EAAE;AACL5C,WAAO,EAAE;AACP6C,aADO,mBACCC,cADD,EACiB;AACtB,aAAKC,aAAL,CAAmBD,cAAnB;AACD,OAHM;AAIPE,UAAI,EAAE;AAJC,KADJ;AAQLlE,UAAM,EAAE;AACN+D,aADM,mBACEC,cADF,EACkB;AACtB,aAAKC,aAAL,CAAmBD,cAAnB;AACD,OAHK;AAINE,UAAI,EAAE;AAJA,KARH;AAeLlF,YAfK,sBAeM;AACT,WAAKlB,cAAL;AACD;AAjBI,GA/FkB;AAmHzBqG,SAAO,EAAE;AACPpB,mBADO,6BACW;AAAA,UACRqB,SADQ,GACM,KAAKC,MADX,CACRD,SADQ;AAEhB,aAAOA,SAAS,IAAIA,SAAS,CAACE,UAA9B;AACD,KAJM;AAMP9B,UANO,oBAME;AACP,aAAO,KAAKlD,GAAL,IAAY,KAAK7B,OAAxB;AACD,KARM;AAUPwG,iBAVO,yBAUOD,cAVP,EAUuB;AAC5B,WAAK,IAAIO,QAAT,IAAqBP,cAArB,EAAqC;AACnC,YAAM3G,KAAK,GAAGnB,kCAAQ,CAACqI,QAAD,CAAtB;;AACA,YAAIxD,kBAAkB,CAAClD,OAAnB,CAA2BR,KAA3B,MAAsC,CAAC,CAA3C,EAA8C;AAC5C,eAAKmG,SAAL,CAAegB,MAAf,CAAsBnH,KAAtB,EAA6B2G,cAAc,CAACO,QAAD,CAA3C;AACD;AACF;AACF,KAjBM;AAmBPE,oBAnBO,8BAmBY;AACjB,UAAI,KAAKtC,2BAAT,EAAsC;AACpC,eAAO,KAAKuC,SAAL,CAAe,CAAf,EAAkBpC,MAAlB,CAAyBf,OAAhC;AACD;;AACD,UAAMoD,QAAQ,GAAG,KAAKrC,MAAL,CAAYf,OAA7B;AACA,aAAO,KAAKW,cAAL,GAAsByC,QAAQ,CAAC,CAAD,CAAR,CAAYC,KAAZ,CAAkBtC,MAAlB,CAAyBf,OAA/C,GAAyDoD,QAAhE;AACD,KAzBM;AA2BP7G,kBA3BO,4BA2BU;AAAA;;AACf,WAAKc,SAAL,CAAe,YAAM;AACnB,cAAI,CAACiG,cAAL,GAAsB/G,eAAc,CAClC,MAAI,CAAC2G,gBAAL,EADkC,EAElC,MAAI,CAACf,aAAL,CAAmB3G,QAFe,EAGlC,MAAI,CAACmF,cAH6B,EAIlC,MAAI,CAACjE,YAJ6B,CAApC;AAMD,OAPD;AAQD,KApCM;AAsCP6G,mBAtCO,2BAsCSC,OAtCT,EAsCkB;AACvB,UAAMC,KAAK,GAAGzH,cAAc,CAAC,KAAKkH,gBAAL,MAA2B,EAA5B,EAAgCM,OAAhC,CAA5B;;AACA,UAAIC,KAAK,KAAK,CAAC,CAAf,EAAkB;AAChB;AACA;AACA,eAAO,IAAP;AACD;;AACD,UAAMvH,OAAO,GAAG,KAAKuB,QAAL,CAAcgG,KAAd,CAAhB;AACA,aAAO;AAAEA,aAAK,EAALA,KAAF;AAASvH,eAAO,EAAPA;AAAT,OAAP;AACD,KA/CM;AAiDPwH,4CAjDO,0DAiDoD;AAAA,UAAPC,GAAO,QAAhBC,OAAgB;;AACzD,UACE,CAACD,GAAD,IACA,CAACA,GAAG,CAACE,QADL,IAEA,CAAClG,gBAAgB,CAACgG,GAAG,CAACE,QAAJ,CAAaC,aAAd,CAHnB,EAIE;AACA,YACE,EAAE,cAAcH,GAAhB,KACAA,GAAG,CAACR,SAAJ,CAActG,MAAd,KAAyB,CADzB,IAEA,cAAc8G,GAAG,CAACR,SAAJ,CAAc,CAAd,CAHhB,EAKE,OAAOQ,GAAG,CAACR,SAAJ,CAAc,CAAd,CAAP;AAEF,eAAOQ,GAAP;AACD;;AACD,aAAOA,GAAG,CAACI,OAAX;AACD,KAjEM;AAmEPC,eAnEO,uBAmEKvE,GAnEL,EAmEU;AAAA;;AACf,WAAKpC,SAAL,CAAe,YAAM;AACnB,cAAI,CAACC,KAAL,CAAW,QAAX,EAAqBmC,GAArB;AACD,OAFD;AAGD,KAvEM;AAyEPwE,aAzEO,qBAyEGC,MAzEH,EAyEW;AAChB,UAAI,KAAKtE,IAAT,EAAe;AACbsE,cAAM,CAAC,KAAKtE,IAAN,CAAN;AACA;AACD;;AACD,UAAMuE,OAAO,GAAG,mBAAI,KAAKrI,KAAZ,CAAb;;AACAoI,YAAM,CAACC,OAAD,CAAN;AACA,WAAK7G,KAAL,CAAW,OAAX,EAAoB6G,OAApB;AACD,KAjFM;AAmFPC,cAnFO,wBAmFM;AAAA;;AACX,UAAMA,UAAU,GAAG,SAAbA,UAAa,CAAAxE,IAAI;AAAA,eAAIA,IAAI,CAACyE,MAAL,OAAAzE,IAAI,qBAAW0E,UAAX,EAAR;AAAA,OAAvB;;AACA,WAAKL,SAAL,CAAeG,UAAf;AACD,KAtFM;AAwFPG,kBAxFO,0BAwFQC,QAxFR,EAwFkBC,QAxFlB,EAwF4B;AACjC,UAAMF,cAAc,GAAG,SAAjBA,cAAiB,CAAA3E,IAAI;AAAA,eACzBA,IAAI,CAACyE,MAAL,CAAYI,QAAZ,EAAsB,CAAtB,EAAyB7E,IAAI,CAACyE,MAAL,CAAYG,QAAZ,EAAsB,CAAtB,EAAyB,CAAzB,CAAzB,CADyB;AAAA,OAA3B;;AAEA,WAAKP,SAAL,CAAeM,cAAf;AACD,KA5FM;AA8FPG,kCA9FO,iDA8FyC;AAAA,UAAfC,EAAe,SAAfA,EAAe;AAAA,UAAXC,OAAW,SAAXA,OAAW;AAC9C,UAAMC,SAAS,GAAG,KAAKnB,wCAAL,CAA8CiB,EAA9C,CAAlB;;AACA,UAAI,CAACE,SAAL,EAAgB;AACd,eAAO;AAAEA,mBAAS,EAATA;AAAF,SAAP;AACD;;AACD,UAAMjF,IAAI,GAAGiF,SAAS,CAACpH,QAAvB;AACA,UAAMqH,OAAO,GAAG;AAAElF,YAAI,EAAJA,IAAF;AAAQiF,iBAAS,EAATA;AAAR,OAAhB;;AACA,UAAIF,EAAE,KAAKC,OAAP,IAAkBhF,IAAlB,IAA0BiF,SAAS,CAACtB,eAAxC,EAAyD;AACvD,YAAMwB,WAAW,GAAGF,SAAS,CAACtB,eAAV,CAA0BqB,OAA1B,CAApB;;AACA,YAAIG,WAAJ,EAAiB;AACf,iBAAO1K,MAAM,CAACgF,MAAP,CAAc0F,WAAd,EAA2BD,OAA3B,CAAP;AACD;AACF;;AACD,aAAOA,OAAP;AACD,KA5GM;AA8GPE,cA9GO,sBA8GIC,QA9GJ,EA8Gc;AACnB,UAAMC,OAAO,GAAG,KAAK5B,cAArB;AACA,UAAM6B,aAAa,GAAGD,OAAO,CAACrI,MAA9B;AACA,aAAOoI,QAAQ,GAAGE,aAAa,GAAG,CAA3B,GAA+BA,aAA/B,GAA+CD,OAAO,CAACD,QAAD,CAA7D;AACD,KAlHM;AAoHPG,gBApHO,0BAoHQ;AACb,aAAO,KAAKrE,MAAL,CAAYf,OAAZ,CAAoB,CAApB,EAAuBqF,iBAA9B;AACD,KAtHM;AAwHPC,uBAxHO,+BAwHa7B,KAxHb,EAwHoB;AACzB,UAAI,CAAC,KAAKxD,kBAAN,IAA4B,CAAC,KAAKU,cAAtC,EAAsD;AACpD;AACD;;AACD,UAAI4E,KAAK,GAAG,KAAKrC,gBAAL,EAAZ;AACAqC,WAAK,CAAC9B,KAAD,CAAL,CAAa/C,IAAb,GAAoB,IAApB;AACA,UAAM8E,mBAAmB,GAAG,KAAKJ,YAAL,EAA5B;AACAI,yBAAmB,CAAChK,QAApB,GAA+B,EAA/B;AACAgK,yBAAmB,CAACC,IAApB,GAA2B1J,SAA3B;AACD,KAjIM;AAmIP2J,eAnIO,uBAmIKjG,GAnIL,EAmIU;AACf,WAAKqF,OAAL,GAAe,KAAKvB,eAAL,CAAqB9D,GAAG,CAACkG,IAAzB,CAAf;AACAlG,SAAG,CAACkG,IAAJ,CAASC,eAAT,GAA2B,KAAKzF,KAAL,CAAW,KAAK2E,OAAL,CAAa5I,OAAxB,CAA3B;AACAwD,qBAAe,GAAGD,GAAG,CAACkG,IAAtB;AACD,KAvIM;AAyIPE,aAzIO,qBAyIGpG,GAzIH,EAyIQ;AACb,UAAMvD,OAAO,GAAGuD,GAAG,CAACkG,IAAJ,CAASC,eAAzB;;AACA,UAAI1J,OAAO,KAAKH,SAAhB,EAA2B;AACzB;AACD;;AACDf,0CAAU,CAACyE,GAAG,CAACkG,IAAL,CAAV;AACA,UAAMlB,QAAQ,GAAG,KAAKO,UAAL,CAAgBvF,GAAG,CAACgF,QAApB,CAAjB;AACA,WAAKL,UAAL,CAAgBK,QAAhB,EAA0B,CAA1B,EAA6BvI,OAA7B;AACA,WAAKK,cAAL;AACA,UAAMuJ,KAAK,GAAG;AAAE5J,eAAO,EAAPA,OAAF;AAAWuI,gBAAQ,EAARA;AAAX,OAAd;AACA,WAAKT,WAAL,CAAiB;AAAE8B,aAAK,EAALA;AAAF,OAAjB;AACD,KApJM;AAsJPC,gBAtJO,wBAsJMtG,GAtJN,EAsJW;AAChBrE,4CAAY,CAAC,KAAK+G,aAAN,EAAqB1C,GAAG,CAACkG,IAAzB,EAA+BlG,GAAG,CAAC+E,QAAnC,CAAZ;;AACA,UAAI/E,GAAG,CAACuG,QAAJ,KAAiB,OAArB,EAA8B;AAC5BhL,4CAAU,CAACyE,GAAG,CAACU,KAAL,CAAV;AACA;AACD;;AACD,UAAMqE,QAAQ,GAAG,KAAKM,OAAL,CAAarB,KAA9B;AACA,WAAKW,UAAL,CAAgBI,QAAhB,EAA0B,CAA1B;AACA,UAAMyB,OAAO,GAAG;AAAE/J,eAAO,EAAE,KAAK4I,OAAL,CAAa5I,OAAxB;AAAiCsI,gBAAQ,EAARA;AAAjC,OAAhB;AACA,WAAKc,mBAAL,CAAyBd,QAAzB;AACA,WAAKR,WAAL,CAAiB;AAAEiC,eAAO,EAAPA;AAAF,OAAjB;AACD,KAjKM;AAmKPC,gBAnKO,wBAmKMzG,GAnKN,EAmKW;AAChBzE,0CAAU,CAACyE,GAAG,CAACkG,IAAL,CAAV;AACAvK,4CAAY,CAACqE,GAAG,CAAC0G,IAAL,EAAW1G,GAAG,CAACkG,IAAf,EAAqBlG,GAAG,CAAC+E,QAAzB,CAAZ;AACA,UAAMA,QAAQ,GAAG,KAAKM,OAAL,CAAarB,KAA9B;AACA,UAAMgB,QAAQ,GAAG,KAAKO,UAAL,CAAgBvF,GAAG,CAACgF,QAApB,CAAjB;AACA,WAAKF,cAAL,CAAoBC,QAApB,EAA8BC,QAA9B;AACA,UAAM2B,KAAK,GAAG;AAAElK,eAAO,EAAE,KAAK4I,OAAL,CAAa5I,OAAxB;AAAiCsI,gBAAQ,EAARA,QAAjC;AAA2CC,gBAAQ,EAARA;AAA3C,OAAd;AACA,WAAKT,WAAL,CAAiB;AAAEoC,aAAK,EAALA;AAAF,OAAjB;AACD,KA3KM;AA6KPC,kBA7KO,0BA6KQ5G,GA7KR,EA6Ka6G,YA7Kb,EA6K2B;AAChC7G,SAAG,CAAC8G,cAAJ,CAAmBD,YAAnB,MACG7G,GAAG,CAAC6G,YAAD,CAAH,IAAqB,KAAKjI,YAD7B;AAED,KAhLM;AAkLPmI,sBAlLO,8BAkLYC,cAlLZ,EAkL4BhH,GAlL5B,EAkLiC;AACtC,UAAI,CAACgH,cAAc,CAACvK,OAApB,EAA6B;AAC3B,eAAO,CAAP;AACD;;AACD,UAAMwK,WAAW,GAAG,mBAAIjH,GAAG,CAACkF,EAAJ,CAAOnJ,QAAX,EAAqBwB,MAArB,CAClB,UAAA2J,EAAE;AAAA,eAAIA,EAAE,CAACC,KAAH,CAAS,SAAT,MAAwB,MAA5B;AAAA,OADgB,CAApB;;AAGA,UAAMC,eAAe,GAAGH,WAAW,CAACpK,OAAZ,CAAoBmD,GAAG,CAACmF,OAAxB,CAAxB;AACA,UAAMkC,YAAY,GAAGL,cAAc,CAAC5B,SAAf,CAAyBG,UAAzB,CAAoC6B,eAApC,CAArB;AACA,UAAME,aAAa,GAAGL,WAAW,CAACpK,OAAZ,CAAoBoD,eAApB,MAAyC,CAAC,CAAhE;AACA,aAAOqH,aAAa,IAAI,CAACtH,GAAG,CAACuH,eAAtB,GACHF,YADG,GAEHA,YAAY,GAAG,CAFnB;AAGD,KA/LM;AAiMP/E,cAjMO,sBAiMItC,GAjMJ,EAiMSqC,aAjMT,EAiMwB;AAC7B,UAAMD,MAAM,GAAG,KAAKtB,IAApB;;AACA,UAAI,CAACsB,MAAD,IAAW,CAAC,KAAKpE,QAArB,EAA+B;AAC7B,eAAO,IAAP;AACD;;AAED,UAAMgJ,cAAc,GAAG,KAAK/B,8BAAL,CAAoCjF,GAApC,CAAvB;AACA,UAAMwH,cAAc,GAAG,KAAKnC,OAA5B;AACA,UAAMoC,WAAW,GAAG,KAAKV,kBAAL,CAAwBC,cAAxB,EAAwChH,GAAxC,CAApB;AACApF,YAAM,CAACgF,MAAP,CAAc4H,cAAd,EAA8B;AAAEC,mBAAW,EAAXA;AAAF,OAA9B;AACA,UAAMC,OAAO,GAAG9M,MAAM,CAACgF,MAAP,CAAc,EAAd,EAAkBI,GAAlB,EAAuB;AACrCgH,sBAAc,EAAdA,cADqC;AAErCQ,sBAAc,EAAdA;AAFqC,OAAvB,CAAhB;AAIA,aAAOpF,MAAM,CAACsF,OAAD,EAAUrF,aAAV,CAAb;AACD,KAhNM;AAkNPsF,aAlNO,uBAkNK;AACV,WAAK7K,cAAL;AACAmD,qBAAe,GAAG,IAAlB;AACD;AArNM;AAnHgB,CAA3B;;AA4UA,IAAI,OAAO3F,MAAP,KAAkB,WAAlB,IAAiC,SAASA,MAA9C,EAAsD;AACpDA,QAAM,CAACsN,GAAP,CAAWxC,SAAX,CAAqB,WAArB,EAAkCrE,kBAAlC;AACD;;AAEcA,mEAAf,E;;ACpewB;AACA;AACT,2FAAG;AACI","file":"vuedraggable.common.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","module.exports = false;\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n","exports.f = {}.propertyIsEnumerable;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: 'Â© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = {};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = require(\"sortablejs\");","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return $replace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","function getConsole() {\r\n  if (typeof window !== \"undefined\") {\r\n    return window.console;\r\n  }\r\n  return global.console;\r\n}\r\nconst console = getConsole();\r\n\r\nfunction cached(fn) {\r\n  const cache = Object.create(null);\r\n  return function cachedFn(str) {\r\n    const hit = cache[str];\r\n    return hit || (cache[str] = fn(str));\r\n  };\r\n}\r\n\r\nconst regex = /-(\\w)/g;\r\nconst camelize = cached(str =>\r\n  str.replace(regex, (_, c) => (c ? c.toUpperCase() : \"\"))\r\n);\r\n\r\nfunction removeNode(node) {\r\n  if (node.parentElement !== null) {\r\n    node.parentElement.removeChild(node);\r\n  }\r\n}\r\n\r\nfunction insertNodeAt(fatherNode, node, position) {\r\n  const refNode =\r\n    position === 0\r\n      ? fatherNode.children[0]\r\n      : fatherNode.children[position - 1].nextSibling;\r\n  fatherNode.insertBefore(node, refNode);\r\n}\r\n\r\nexport { insertNodeAt, camelize, console, removeNode };\r\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","// document.currentScript polyfill by Adam Miller\n\n// MIT license\n\n(function(document){\n  var currentScript = \"currentScript\",\n      scripts = document.getElementsByTagName('script'); // Live NodeList collection\n\n  // If browser needs currentScript polyfill, add get currentScript() to the document object\n  if (!(currentScript in document)) {\n    Object.defineProperty(document, currentScript, {\n      get: function(){\n\n        // IE 6-10 supports script readyState\n        // IE 10+ support stack trace\n        try { throw new Error(); }\n        catch (err) {\n\n          // Find the second match for the \"at\" string to get file src url from stack.\n          // Specifically works with the format of stack traces in IE.\n          var i, res = ((/.*at [^\\(]*\\((.*):.+:.+\\)$/ig).exec(err.stack) || [false])[1];\n\n          // For all scripts on the page, if src matches or if ready state is interactive, return the script tag\n          for(i in scripts){\n            if(scripts[i].src == res || scripts[i].readyState == \"interactive\"){\n              return scripts[i];\n            }\n          }\n\n          // If no match, return null\n          return null;\n        }\n      }\n    });\n  }\n})(document);\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n  if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n    require('current-script-polyfill')\n  }\n\n  var i\n  if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n    __webpack_public_path__ = i[1] // eslint-disable-line\n  }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","export default function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}","export default function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import Sortable from \"sortablejs\";\r\nimport { insertNodeAt, camelize, console, removeNode } from \"./util/helper\";\r\n\r\nfunction buildAttribute(object, propName, value) {\r\n  if (value === undefined) {\r\n    return object;\r\n  }\r\n  object = object || {};\r\n  object[propName] = value;\r\n  return object;\r\n}\r\n\r\nfunction computeVmIndex(vnodes, element) {\r\n  return vnodes.map(elt => elt.elm).indexOf(element);\r\n}\r\n\r\nfunction computeIndexes(slots, children, isTransition, footerOffset) {\r\n  if (!slots) {\r\n    return [];\r\n  }\r\n\r\n  const elmFromNodes = slots.map(elt => elt.elm);\r\n  const footerIndex = children.length - footerOffset;\r\n  const rawIndexes = [...children].map((elt, idx) =>\r\n    idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt)\r\n  );\r\n  return isTransition ? rawIndexes.filter(ind => ind !== -1) : rawIndexes;\r\n}\r\n\r\nfunction emit(evtName, evtData) {\r\n  this.$nextTick(() => this.$emit(evtName.toLowerCase(), evtData));\r\n}\r\n\r\nfunction delegateAndEmit(evtName) {\r\n  return evtData => {\r\n    if (this.realList !== null) {\r\n      this[\"onDrag\" + evtName](evtData);\r\n    }\r\n    emit.call(this, evtName, evtData);\r\n  };\r\n}\r\n\r\nfunction isTransitionName(name) {\r\n  return [\"transition-group\", \"TransitionGroup\"].includes(name);\r\n}\r\n\r\nfunction isTransition(slots) {\r\n  if (!slots || slots.length !== 1) {\r\n    return false;\r\n  }\r\n  const [{ componentOptions }] = slots;\r\n  if (!componentOptions) {\r\n    return false;\r\n  }\r\n  return isTransitionName(componentOptions.tag);\r\n}\r\n\r\nfunction getSlot(slot, scopedSlot, key) {\r\n  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);\r\n}\r\n\r\nfunction computeChildrenAndOffsets(children, slot, scopedSlot) {\r\n  let headerOffset = 0;\r\n  let footerOffset = 0;\r\n  const header = getSlot(slot, scopedSlot, \"header\");\r\n  if (header) {\r\n    headerOffset = header.length;\r\n    children = children ? [...header, ...children] : [...header];\r\n  }\r\n  const footer = getSlot(slot, scopedSlot, \"footer\");\r\n  if (footer) {\r\n    footerOffset = footer.length;\r\n    children = children ? [...children, ...footer] : [...footer];\r\n  }\r\n  return { children, headerOffset, footerOffset };\r\n}\r\n\r\nfunction getComponentAttributes($attrs, componentData) {\r\n  let attributes = null;\r\n  const update = (name, value) => {\r\n    attributes = buildAttribute(attributes, name, value);\r\n  };\r\n  const attrs = Object.keys($attrs)\r\n    .filter(key => key === \"id\" || key.startsWith(\"data-\"))\r\n    .reduce((res, key) => {\r\n      res[key] = $attrs[key];\r\n      return res;\r\n    }, {});\r\n  update(\"attrs\", attrs);\r\n\r\n  if (!componentData) {\r\n    return attributes;\r\n  }\r\n  const { on, props, attrs: componentDataAttrs } = componentData;\r\n  update(\"on\", on);\r\n  update(\"props\", props);\r\n  Object.assign(attributes.attrs, componentDataAttrs);\r\n  return attributes;\r\n}\r\n\r\nconst eventsListened = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\r\nconst eventsToEmit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\r\nconst readonlyProperties = [\"Move\", ...eventsListened, ...eventsToEmit].map(\r\n  evt => \"on\" + evt\r\n);\r\nvar draggingElement = null;\r\n\r\nconst props = {\r\n  options: Object,\r\n  list: {\r\n    type: Array,\r\n    required: false,\r\n    default: null\r\n  },\r\n  value: {\r\n    type: Array,\r\n    required: false,\r\n    default: null\r\n  },\r\n  noTransitionOnDrag: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  clone: {\r\n    type: Function,\r\n    default: original => {\r\n      return original;\r\n    }\r\n  },\r\n  element: {\r\n    type: String,\r\n    default: \"div\"\r\n  },\r\n  tag: {\r\n    type: String,\r\n    default: null\r\n  },\r\n  move: {\r\n    type: Function,\r\n    default: null\r\n  },\r\n  componentData: {\r\n    type: Object,\r\n    required: false,\r\n    default: null\r\n  }\r\n};\r\n\r\nconst draggableComponent = {\r\n  name: \"draggable\",\r\n\r\n  inheritAttrs: false,\r\n\r\n  props,\r\n\r\n  data() {\r\n    return {\r\n      transitionMode: false,\r\n      noneFunctionalComponentMode: false\r\n    };\r\n  },\r\n\r\n  render(h) {\r\n    const slots = this.$slots.default;\r\n    this.transitionMode = isTransition(slots);\r\n    const { children, headerOffset, footerOffset } = computeChildrenAndOffsets(\r\n      slots,\r\n      this.$slots,\r\n      this.$scopedSlots\r\n    );\r\n    this.headerOffset = headerOffset;\r\n    this.footerOffset = footerOffset;\r\n    const attributes = getComponentAttributes(this.$attrs, this.componentData);\r\n    return h(this.getTag(), attributes, children);\r\n  },\r\n\r\n  created() {\r\n    if (this.list !== null && this.value !== null) {\r\n      console.error(\r\n        \"Value and list props are mutually exclusive! Please set one or another.\"\r\n      );\r\n    }\r\n\r\n    if (this.element !== \"div\") {\r\n      console.warn(\r\n        \"Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props\"\r\n      );\r\n    }\r\n\r\n    if (this.options !== undefined) {\r\n      console.warn(\r\n        \"Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props\"\r\n      );\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.noneFunctionalComponentMode =\r\n      this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() &&\r\n      !this.getIsFunctional();\r\n    if (this.noneFunctionalComponentMode && this.transitionMode) {\r\n      throw new Error(\r\n        `Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ${this.getTag()}`\r\n      );\r\n    }\r\n    const optionsAdded = {};\r\n    eventsListened.forEach(elt => {\r\n      optionsAdded[\"on\" + elt] = delegateAndEmit.call(this, elt);\r\n    });\r\n\r\n    eventsToEmit.forEach(elt => {\r\n      optionsAdded[\"on\" + elt] = emit.bind(this, elt);\r\n    });\r\n\r\n    const attributes = Object.keys(this.$attrs).reduce((res, key) => {\r\n      res[camelize(key)] = this.$attrs[key];\r\n      return res;\r\n    }, {});\r\n\r\n    const options = Object.assign({}, this.options, attributes, optionsAdded, {\r\n      onMove: (evt, originalEvent) => {\r\n        return this.onDragMove(evt, originalEvent);\r\n      }\r\n    });\r\n    !(\"draggable\" in options) && (options.draggable = \">*\");\r\n    this._sortable = new Sortable(this.rootContainer, options);\r\n    this.computeIndexes();\r\n  },\r\n\r\n  beforeDestroy() {\r\n    if (this._sortable !== undefined) this._sortable.destroy();\r\n  },\r\n\r\n  computed: {\r\n    rootContainer() {\r\n      return this.transitionMode ? this.$el.children[0] : this.$el;\r\n    },\r\n\r\n    realList() {\r\n      return this.list ? this.list : this.value;\r\n    }\r\n  },\r\n\r\n  watch: {\r\n    options: {\r\n      handler(newOptionValue) {\r\n        this.updateOptions(newOptionValue);\r\n      },\r\n      deep: true\r\n    },\r\n\r\n    $attrs: {\r\n      handler(newOptionValue) {\r\n        this.updateOptions(newOptionValue);\r\n      },\r\n      deep: true\r\n    },\r\n\r\n    realList() {\r\n      this.computeIndexes();\r\n    }\r\n  },\r\n\r\n  methods: {\r\n    getIsFunctional() {\r\n      const { fnOptions } = this._vnode;\r\n      return fnOptions && fnOptions.functional;\r\n    },\r\n\r\n    getTag() {\r\n      return this.tag || this.element;\r\n    },\r\n\r\n    updateOptions(newOptionValue) {\r\n      for (var property in newOptionValue) {\r\n        const value = camelize(property);\r\n        if (readonlyProperties.indexOf(value) === -1) {\r\n          this._sortable.option(value, newOptionValue[property]);\r\n        }\r\n      }\r\n    },\r\n\r\n    getChildrenNodes() {\r\n      if (this.noneFunctionalComponentMode) {\r\n        return this.$children[0].$slots.default;\r\n      }\r\n      const rawNodes = this.$slots.default;\r\n      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\r\n    },\r\n\r\n    computeIndexes() {\r\n      this.$nextTick(() => {\r\n        this.visibleIndexes = computeIndexes(\r\n          this.getChildrenNodes(),\r\n          this.rootContainer.children,\r\n          this.transitionMode,\r\n          this.footerOffset\r\n        );\r\n      });\r\n    },\r\n\r\n    getUnderlyingVm(htmlElt) {\r\n      const index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\r\n      if (index === -1) {\r\n        //Edge case during move callback: related element might be\r\n        //an element different from collection\r\n        return null;\r\n      }\r\n      const element = this.realList[index];\r\n      return { index, element };\r\n    },\r\n\r\n    getUnderlyingPotencialDraggableComponent({ __vue__: vue }) {\r\n      if (\r\n        !vue ||\r\n        !vue.$options ||\r\n        !isTransitionName(vue.$options._componentTag)\r\n      ) {\r\n        if (\r\n          !(\"realList\" in vue) &&\r\n          vue.$children.length === 1 &&\r\n          \"realList\" in vue.$children[0]\r\n        )\r\n          return vue.$children[0];\r\n\r\n        return vue;\r\n      }\r\n      return vue.$parent;\r\n    },\r\n\r\n    emitChanges(evt) {\r\n      this.$nextTick(() => {\r\n        this.$emit(\"change\", evt);\r\n      });\r\n    },\r\n\r\n    alterList(onList) {\r\n      if (this.list) {\r\n        onList(this.list);\r\n        return;\r\n      }\r\n      const newList = [...this.value];\r\n      onList(newList);\r\n      this.$emit(\"input\", newList);\r\n    },\r\n\r\n    spliceList() {\r\n      const spliceList = list => list.splice(...arguments);\r\n      this.alterList(spliceList);\r\n    },\r\n\r\n    updatePosition(oldIndex, newIndex) {\r\n      const updatePosition = list =>\r\n        list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\r\n      this.alterList(updatePosition);\r\n    },\r\n\r\n    getRelatedContextFromMoveEvent({ to, related }) {\r\n      const component = this.getUnderlyingPotencialDraggableComponent(to);\r\n      if (!component) {\r\n        return { component };\r\n      }\r\n      const list = component.realList;\r\n      const context = { list, component };\r\n      if (to !== related && list && component.getUnderlyingVm) {\r\n        const destination = component.getUnderlyingVm(related);\r\n        if (destination) {\r\n          return Object.assign(destination, context);\r\n        }\r\n      }\r\n      return context;\r\n    },\r\n\r\n    getVmIndex(domIndex) {\r\n      const indexes = this.visibleIndexes;\r\n      const numberIndexes = indexes.length;\r\n      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\r\n    },\r\n\r\n    getComponent() {\r\n      return this.$slots.default[0].componentInstance;\r\n    },\r\n\r\n    resetTransitionData(index) {\r\n      if (!this.noTransitionOnDrag || !this.transitionMode) {\r\n        return;\r\n      }\r\n      var nodes = this.getChildrenNodes();\r\n      nodes[index].data = null;\r\n      const transitionContainer = this.getComponent();\r\n      transitionContainer.children = [];\r\n      transitionContainer.kept = undefined;\r\n    },\r\n\r\n    onDragStart(evt) {\r\n      this.context = this.getUnderlyingVm(evt.item);\r\n      evt.item._underlying_vm_ = this.clone(this.context.element);\r\n      draggingElement = evt.item;\r\n    },\r\n\r\n    onDragAdd(evt) {\r\n      const element = evt.item._underlying_vm_;\r\n      if (element === undefined) {\r\n        return;\r\n      }\r\n      removeNode(evt.item);\r\n      const newIndex = this.getVmIndex(evt.newIndex);\r\n      this.spliceList(newIndex, 0, element);\r\n      this.computeIndexes();\r\n      const added = { element, newIndex };\r\n      this.emitChanges({ added });\r\n    },\r\n\r\n    onDragRemove(evt) {\r\n      insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\r\n      if (evt.pullMode === \"clone\") {\r\n        removeNode(evt.clone);\r\n        return;\r\n      }\r\n      const oldIndex = this.context.index;\r\n      this.spliceList(oldIndex, 1);\r\n      const removed = { element: this.context.element, oldIndex };\r\n      this.resetTransitionData(oldIndex);\r\n      this.emitChanges({ removed });\r\n    },\r\n\r\n    onDragUpdate(evt) {\r\n      removeNode(evt.item);\r\n      insertNodeAt(evt.from, evt.item, evt.oldIndex);\r\n      const oldIndex = this.context.index;\r\n      const newIndex = this.getVmIndex(evt.newIndex);\r\n      this.updatePosition(oldIndex, newIndex);\r\n      const moved = { element: this.context.element, oldIndex, newIndex };\r\n      this.emitChanges({ moved });\r\n    },\r\n\r\n    updateProperty(evt, propertyName) {\r\n      evt.hasOwnProperty(propertyName) &&\r\n        (evt[propertyName] += this.headerOffset);\r\n    },\r\n\r\n    computeFutureIndex(relatedContext, evt) {\r\n      if (!relatedContext.element) {\r\n        return 0;\r\n      }\r\n      const domChildren = [...evt.to.children].filter(\r\n        el => el.style[\"display\"] !== \"none\"\r\n      );\r\n      const currentDOMIndex = domChildren.indexOf(evt.related);\r\n      const currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\r\n      const draggedInList = domChildren.indexOf(draggingElement) !== -1;\r\n      return draggedInList || !evt.willInsertAfter\r\n        ? currentIndex\r\n        : currentIndex + 1;\r\n    },\r\n\r\n    onDragMove(evt, originalEvent) {\r\n      const onMove = this.move;\r\n      if (!onMove || !this.realList) {\r\n        return true;\r\n      }\r\n\r\n      const relatedContext = this.getRelatedContextFromMoveEvent(evt);\r\n      const draggedContext = this.context;\r\n      const futureIndex = this.computeFutureIndex(relatedContext, evt);\r\n      Object.assign(draggedContext, { futureIndex });\r\n      const sendEvt = Object.assign({}, evt, {\r\n        relatedContext,\r\n        draggedContext\r\n      });\r\n      return onMove(sendEvt, originalEvent);\r\n    },\r\n\r\n    onDragEnd() {\r\n      this.computeIndexes();\r\n      draggingElement = null;\r\n    }\r\n  }\r\n};\r\n\r\nif (typeof window !== \"undefined\" && \"Vue\" in window) {\r\n  window.Vue.component(\"draggable\", draggableComponent);\r\n}\r\n\r\nexport default draggableComponent;\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"sourceRoot":""}(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory(require("sortablejs"));
	else if(typeof define === 'function' && define.amd)
		define(["sortablejs"], factory);
	else if(typeof exports === 'object')
		exports["vuedraggable"] = factory(require("sortablejs"));
	else
		root["vuedraggable"] = factory(root["Sortable"]);
})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE_a352__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = "fb15");
/******/ })
/************************************************************************/
/******/ ({

/***/ "01f9":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var LIBRARY = __webpack_require__("2d00");
var $export = __webpack_require__("5ca1");
var redefine = __webpack_require__("2aba");
var hide = __webpack_require__("32e9");
var Iterators = __webpack_require__("84f2");
var $iterCreate = __webpack_require__("41a0");
var setToStringTag = __webpack_require__("7f20");
var getPrototypeOf = __webpack_require__("38fd");
var ITERATOR = __webpack_require__("2b4c")('iterator');
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
var FF_ITERATOR = '@@iterator';
var KEYS = 'keys';
var VALUES = 'values';

var returnThis = function () { return this; };

module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
  $iterCreate(Constructor, NAME, next);
  var getMethod = function (kind) {
    if (!BUGGY && kind in proto) return proto[kind];
    switch (kind) {
      case KEYS: return function keys() { return new Constructor(this, kind); };
      case VALUES: return function values() { return new Constructor(this, kind); };
    } return function entries() { return new Constructor(this, kind); };
  };
  var TAG = NAME + ' Iterator';
  var DEF_VALUES = DEFAULT == VALUES;
  var VALUES_BUG = false;
  var proto = Base.prototype;
  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
  var $default = $native || getMethod(DEFAULT);
  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
  var methods, key, IteratorPrototype;
  // Fix native
  if ($anyNative) {
    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
      // Set @@toStringTag to native iterators
      setToStringTag(IteratorPrototype, TAG, true);
      // fix for some old engines
      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
    }
  }
  // fix Array#{values, @@iterator}.name in V8 / FF
  if (DEF_VALUES && $native && $native.name !== VALUES) {
    VALUES_BUG = true;
    $default = function values() { return $native.call(this); };
  }
  // Define iterator
  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
    hide(proto, ITERATOR, $default);
  }
  // Plug for library
  Iterators[NAME] = $default;
  Iterators[TAG] = returnThis;
  if (DEFAULT) {
    methods = {
      values: DEF_VALUES ? $default : getMethod(VALUES),
      keys: IS_SET ? $default : getMethod(KEYS),
      entries: $entries
    };
    if (FORCED) for (key in methods) {
      if (!(key in proto)) redefine(proto, key, methods[key]);
    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
  }
  return methods;
};


/***/ }),

/***/ "02f4":
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__("4588");
var defined = __webpack_require__("be13");
// true  -> String#at
// false -> String#codePointAt
module.exports = function (TO_STRING) {
  return function (that, pos) {
    var s = String(defined(that));
    var i = toInteger(pos);
    var l = s.length;
    var a, b;
    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
    a = s.charCodeAt(i);
    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
      ? TO_STRING ? s.charAt(i) : a
      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
  };
};


/***/ }),

/***/ "0390":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var at = __webpack_require__("02f4")(true);

 // `AdvanceStringIndex` abstract operation
// https://tc39.github.io/ecma262/#sec-advancestringindex
module.exports = function (S, index, unicode) {
  return index + (unicode ? at(S, index).length : 1);
};


/***/ }),

/***/ "0bfb":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 21.2.5.3 get RegExp.prototype.flags
var anObject = __webpack_require__("cb7c");
module.exports = function () {
  var that = anObject(this);
  var result = '';
  if (that.global) result += 'g';
  if (that.ignoreCase) result += 'i';
  if (that.multiline) result += 'm';
  if (that.unicode) result += 'u';
  if (that.sticky) result += 'y';
  return result;
};


/***/ }),

/***/ "0d58":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var $keys = __webpack_require__("ce10");
var enumBugKeys = __webpack_require__("e11e");

module.exports = Object.keys || function keys(O) {
  return $keys(O, enumBugKeys);
};


/***/ }),

/***/ "1495":
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__("86cc");
var anObject = __webpack_require__("cb7c");
var getKeys = __webpack_require__("0d58");

module.exports = __webpack_require__("9e1e") ? Object.defineProperties : function defineProperties(O, Properties) {
  anObject(O);
  var keys = getKeys(Properties);
  var length = keys.length;
  var i = 0;
  var P;
  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
  return O;
};


/***/ }),

/***/ "214f":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

__webpack_require__("b0c5");
var redefine = __webpack_require__("2aba");
var hide = __webpack_require__("32e9");
var fails = __webpack_require__("79e5");
var defined = __webpack_require__("be13");
var wks = __webpack_require__("2b4c");
var regexpExec = __webpack_require__("520a");

var SPECIES = wks('species');

var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
  // #replace needs built-in support for named groups.
  // #match works fine because it just return the exec results, even if it has
  // a "grops" property.
  var re = /./;
  re.exec = function () {
    var result = [];
    result.groups = { a: '7' };
    return result;
  };
  return ''.replace(re, '$<a>') !== '7';
});

var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {
  // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
  var re = /(?:)/;
  var originalExec = re.exec;
  re.exec = function () { return originalExec.apply(this, arguments); };
  var result = 'ab'.split(re);
  return result.length === 2 && result[0] === 'a' && result[1] === 'b';
})();

module.exports = function (KEY, length, exec) {
  var SYMBOL = wks(KEY);

  var DELEGATES_TO_SYMBOL = !fails(function () {
    // String methods call symbol-named RegEp methods
    var O = {};
    O[SYMBOL] = function () { return 7; };
    return ''[KEY](O) != 7;
  });

  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {
    // Symbol-named RegExp methods call .exec
    var execCalled = false;
    var re = /a/;
    re.exec = function () { execCalled = true; return null; };
    if (KEY === 'split') {
      // RegExp[@@split] doesn't call the regex's exec method, but first creates
      // a new one. We need to return the patched regex when creating the new one.
      re.constructor = {};
      re.constructor[SPECIES] = function () { return re; };
    }
    re[SYMBOL]('');
    return !execCalled;
  }) : undefined;

  if (
    !DELEGATES_TO_SYMBOL ||
    !DELEGATES_TO_EXEC ||
    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||
    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
  ) {
    var nativeRegExpMethod = /./[SYMBOL];
    var fns = exec(
      defined,
      SYMBOL,
      ''[KEY],
      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {
        if (regexp.exec === regexpExec) {
          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
            // The native String method already delegates to @@method (this
            // polyfilled function), leasing to infinite recursion.
            // We avoid it by directly calling the native @@method method.
            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
          }
          return { done: true, value: nativeMethod.call(str, regexp, arg2) };
        }
        return { done: false };
      }
    );
    var strfn = fns[0];
    var rxfn = fns[1];

    redefine(String.prototype, KEY, strfn);
    hide(RegExp.prototype, SYMBOL, length == 2
      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
      // 21.2.5.11 RegExp.prototype[@@split](string, limit)
      ? function (string, arg) { return rxfn.call(string, this, arg); }
      // 21.2.5.6 RegExp.prototype[@@match](string)
      // 21.2.5.9 RegExp.prototype[@@search](string)
      : function (string) { return rxfn.call(string, this); }
    );
  }
};


/***/ }),

/***/ "230e":
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__("d3f4");
var document = __webpack_require__("7726").document;
// typeof document.createElement is 'object' in old IE
var is = isObject(document) && isObject(document.createElement);
module.exports = function (it) {
  return is ? document.createElement(it) : {};
};


/***/ }),

/***/ "23c6":
/***/ (function(module, exports, __webpack_require__) {

// getting tag from 19.1.3.6 Object.prototype.toString()
var cof = __webpack_require__("2d95");
var TAG = __webpack_require__("2b4c")('toStringTag');
// ES3 wrong here
var ARG = cof(function () { return arguments; }()) == 'Arguments';

// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
  try {
    return it[key];
  } catch (e) { /* empty */ }
};

module.exports = function (it) {
  var O, T, B;
  return it === undefined ? 'Undefined' : it === null ? 'Null'
    // @@toStringTag case
    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
    // builtinTag case
    : ARG ? cof(O)
    // ES3 arguments fallback
    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};


/***/ }),

/***/ "2621":
/***/ (function(module, exports) {

exports.f = Object.getOwnPropertySymbols;


/***/ }),

/***/ "2aba":
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__("7726");
var hide = __webpack_require__("32e9");
var has = __webpack_require__("69a8");
var SRC = __webpack_require__("ca5a")('src');
var $toString = __webpack_require__("fa5b");
var TO_STRING = 'toString';
var TPL = ('' + $toString).split(TO_STRING);

__webpack_require__("8378").inspectSource = function (it) {
  return $toString.call(it);
};

(module.exports = function (O, key, val, safe) {
  var isFunction = typeof val == 'function';
  if (isFunction) has(val, 'name') || hide(val, 'name', key);
  if (O[key] === val) return;
  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
  if (O === global) {
    O[key] = val;
  } else if (!safe) {
    delete O[key];
    hide(O, key, val);
  } else if (O[key]) {
    O[key] = val;
  } else {
    hide(O, key, val);
  }
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, TO_STRING, function toString() {
  return typeof this == 'function' && this[SRC] || $toString.call(this);
});


/***/ }),

/***/ "2aeb":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
var anObject = __webpack_require__("cb7c");
var dPs = __webpack_require__("1495");
var enumBugKeys = __webpack_require__("e11e");
var IE_PROTO = __webpack_require__("613b")('IE_PROTO');
var Empty = function () { /* empty */ };
var PROTOTYPE = 'prototype';

// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function () {
  // Thrash, waste and sodomy: IE GC bug
  var iframe = __webpack_require__("230e")('iframe');
  var i = enumBugKeys.length;
  var lt = '<';
  var gt = '>';
  var iframeDocument;
  iframe.style.display = 'none';
  __webpack_require__("fab2").appendChild(iframe);
  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
  // createDict = iframe.contentWindow.Object;
  // html.removeChild(iframe);
  iframeDocument = iframe.contentWindow.document;
  iframeDocument.open();
  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
  iframeDocument.close();
  createDict = iframeDocument.F;
  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
  return createDict();
};

module.exports = Object.create || function create(O, Properties) {
  var result;
  if (O !== null) {
    Empty[PROTOTYPE] = anObject(O);
    result = new Empty();
    Empty[PROTOTYPE] = null;
    // add "__proto__" for Object.getPrototypeOf polyfill
    result[IE_PROTO] = O;
  } else result = createDict();
  return Properties === undefined ? result : dPs(result, Properties);
};


/***/ }),

/***/ "2b4c":
/***/ (function(module, exports, __webpack_require__) {

var store = __webpack_require__("5537")('wks');
var uid = __webpack_require__("ca5a");
var Symbol = __webpack_require__("7726").Symbol;
var USE_SYMBOL = typeof Symbol == 'function';

var $exports = module.exports = function (name) {
  return store[name] || (store[name] =
    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};

$exports.store = store;


/***/ }),

/***/ "2d00":
/***/ (function(module, exports) {

module.exports = false;


/***/ }),

/***/ "2d95":
/***/ (function(module, exports) {

var toString = {}.toString;

module.exports = function (it) {
  return toString.call(it).slice(8, -1);
};


/***/ }),

/***/ "2fdb":
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 21.1.3.7 String.prototype.includes(searchString, position = 0)

var $export = __webpack_require__("5ca1");
var context = __webpack_require__("d2c8");
var INCLUDES = 'includes';

$export($export.P + $export.F * __webpack_require__("5147")(INCLUDES), 'String', {
  includes: function includes(searchString /* , position = 0 */) {
    return !!~context(this, searchString, INCLUDES)
      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
  }
});


/***/ }),

/***/ "32e9":
/***/ (function(module, exports, __webpack_require__) {

var dP = __webpack_require__("86cc");
var createDesc = __webpack_require__("4630");
module.exports = __webpack_require__("9e1e") ? function (object, key, value) {
  return dP.f(object, key, createDesc(1, value));
} : function (object, key, value) {
  object[key] = value;
  return object;
};


/***/ }),

/***/ "38fd":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
var has = __webpack_require__("69a8");
var toObject = __webpack_require__("4bf8");
var IE_PROTO = __webpack_require__("613b")('IE_PROTO');
var ObjectProto = Object.prototype;

module.exports = Object.getPrototypeOf || function (O) {
  O = toObject(O);
  if (has(O, IE_PROTO)) return O[IE_PROTO];
  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
    return O.constructor.prototype;
  } return O instanceof Object ? ObjectProto : null;
};


/***/ }),

/***/ "41a0":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var create = __webpack_require__("2aeb");
var descriptor = __webpack_require__("4630");
var setToStringTag = __webpack_require__("7f20");
var IteratorPrototype = {};

// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
__webpack_require__("32e9")(IteratorPrototype, __webpack_require__("2b4c")('iterator'), function () { return this; });

module.exports = function (Constructor, NAME, next) {
  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
  setToStringTag(Constructor, NAME + ' Iterator');
};


/***/ }),

/***/ "456d":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.2.14 Object.keys(O)
var toObject = __webpack_require__("4bf8");
var $keys = __webpack_require__("0d58");

__webpack_require__("5eda")('keys', function () {
  return function keys(it) {
    return $keys(toObject(it));
  };
});


/***/ }),

/***/ "4588":
/***/ (function(module, exports) {

// 7.1.4 ToInteger
var ceil = Math.ceil;
var floor = Math.floor;
module.exports = function (it) {
  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};


/***/ }),

/***/ "4630":
/***/ (function(module, exports) {

module.exports = function (bitmap, value) {
  return {
    enumerable: !(bitmap & 1),
    configurable: !(bitmap & 2),
    writable: !(bitmap & 4),
    value: value
  };
};


/***/ }),

/***/ "4bf8":
/***/ (function(module, exports, __webpack_require__) {

// 7.1.13 ToObject(argument)
var defined = __webpack_require__("be13");
module.exports = function (it) {
  return Object(defined(it));
};


/***/ }),

/***/ "5147":
/***/ (function(module, exports, __webpack_require__) {

var MATCH = __webpack_require__("2b4c")('match');
module.exports = function (KEY) {
  var re = /./;
  try {
    '/./'[KEY](re);
  } catch (e) {
    try {
      re[MATCH] = false;
      return !'/./'[KEY](re);
    } catch (f) { /* empty */ }
  } return true;
};


/***/ }),

/***/ "520a":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var regexpFlags = __webpack_require__("0bfb");

var nativeExec = RegExp.prototype.exec;
// This always refers to the native implementation, because the
// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
// which loads this file before patching the method.
var nativeReplace = String.prototype.replace;

var patchedExec = nativeExec;

var LAST_INDEX = 'lastIndex';

var UPDATES_LAST_INDEX_WRONG = (function () {
  var re1 = /a/,
      re2 = /b*/g;
  nativeExec.call(re1, 'a');
  nativeExec.call(re2, 'a');
  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;
})();

// nonparticipating capturing group, copied from es5-shim's String#split patch.
var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;

var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;

if (PATCH) {
  patchedExec = function exec(str) {
    var re = this;
    var lastIndex, reCopy, match, i;

    if (NPCG_INCLUDED) {
      reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re));
    }
    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];

    match = nativeExec.call(re, str);

    if (UPDATES_LAST_INDEX_WRONG && match) {
      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;
    }
    if (NPCG_INCLUDED && match && match.length > 1) {
      // Fix browsers whose `exec` methods don't consistently return `undefined`
      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
      // eslint-disable-next-line no-loop-func
      nativeReplace.call(match[0], reCopy, function () {
        for (i = 1; i < arguments.length - 2; i++) {
          if (arguments[i] === undefined) match[i] = undefined;
        }
      });
    }

    return match;
  };
}

module.exports = patchedExec;


/***/ }),

/***/ "52a7":
/***/ (function(module, exports) {

exports.f = {}.propertyIsEnumerable;


/***/ }),

/***/ "5537":
/***/ (function(module, exports, __webpack_require__) {

var core = __webpack_require__("8378");
var global = __webpack_require__("7726");
var SHARED = '__core-js_shared__';
var store = global[SHARED] || (global[SHARED] = {});

(module.exports = function (key, value) {
  return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
  version: core.version,
  mode: __webpack_require__("2d00") ? 'pure' : 'global',
  copyright: 'Â© 2019 Denis Pushkarev (zloirock.ru)'
});


/***/ }),

/***/ "5ca1":
/***/ (function(module, exports, __webpack_require__) {

var global = __webpack_require__("7726");
var core = __webpack_require__("8378");
var hide = __webpack_require__("32e9");
var redefine = __webpack_require__("2aba");
var ctx = __webpack_require__("9b43");
var PROTOTYPE = 'prototype';

var $export = function (type, name, source) {
  var IS_FORCED = type & $export.F;
  var IS_GLOBAL = type & $export.G;
  var IS_STATIC = type & $export.S;
  var IS_PROTO = type & $export.P;
  var IS_BIND = type & $export.B;
  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];
  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
  var key, own, out, exp;
  if (IS_GLOBAL) source = name;
  for (key in source) {
    // contains in native
    own = !IS_FORCED && target && target[key] !== undefined;
    // export native or passed
    out = (own ? target : source)[key];
    // bind timers to global for call from export context
    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
    // extend global
    if (target) redefine(target, key, out, type & $export.U);
    // export
    if (exports[key] != out) hide(exports, key, exp);
    if (IS_PROTO && expProto[key] != out) expProto[key] = out;
  }
};
global.core = core;
// type bitmap
$export.F = 1;   // forced
$export.G = 2;   // global
$export.S = 4;   // static
$export.P = 8;   // proto
$export.B = 16;  // bind
$export.W = 32;  // wrap
$export.U = 64;  // safe
$export.R = 128; // real proto method for `library`
module.exports = $export;


/***/ }),

/***/ "5eda":
/***/ (function(module, exports, __webpack_require__) {

// most Object methods by ES6 should accept primitives
var $export = __webpack_require__("5ca1");
var core = __webpack_require__("8378");
var fails = __webpack_require__("79e5");
module.exports = function (KEY, exec) {
  var fn = (core.Object || {})[KEY] || Object[KEY];
  var exp = {};
  exp[KEY] = exec(fn);
  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
};


/***/ }),

/***/ "5f1b":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var classof = __webpack_require__("23c6");
var builtinExec = RegExp.prototype.exec;

 // `RegExpExec` abstract operation
// https://tc39.github.io/ecma262/#sec-regexpexec
module.exports = function (R, S) {
  var exec = R.exec;
  if (typeof exec === 'function') {
    var result = exec.call(R, S);
    if (typeof result !== 'object') {
      throw new TypeError('RegExp exec method returned something other than an Object or null');
    }
    return result;
  }
  if (classof(R) !== 'RegExp') {
    throw new TypeError('RegExp#exec called on incompatible receiver');
  }
  return builtinExec.call(R, S);
};


/***/ }),

/***/ "613b":
/***/ (function(module, exports, __webpack_require__) {

var shared = __webpack_require__("5537")('keys');
var uid = __webpack_require__("ca5a");
module.exports = function (key) {
  return shared[key] || (shared[key] = uid(key));
};


/***/ }),

/***/ "626a":
/***/ (function(module, exports, __webpack_require__) {

// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = __webpack_require__("2d95");
// eslint-disable-next-line no-prototype-builtins
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
  return cof(it) == 'String' ? it.split('') : Object(it);
};


/***/ }),

/***/ "6762":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// https://github.com/tc39/Array.prototype.includes
var $export = __webpack_require__("5ca1");
var $includes = __webpack_require__("c366")(true);

$export($export.P, 'Array', {
  includes: function includes(el /* , fromIndex = 0 */) {
    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
  }
});

__webpack_require__("9c6c")('includes');


/***/ }),

/***/ "6821":
/***/ (function(module, exports, __webpack_require__) {

// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__("626a");
var defined = __webpack_require__("be13");
module.exports = function (it) {
  return IObject(defined(it));
};


/***/ }),

/***/ "69a8":
/***/ (function(module, exports) {

var hasOwnProperty = {}.hasOwnProperty;
module.exports = function (it, key) {
  return hasOwnProperty.call(it, key);
};


/***/ }),

/***/ "6a99":
/***/ (function(module, exports, __webpack_require__) {

// 7.1.1 ToPrimitive(input [, PreferredType])
var isObject = __webpack_require__("d3f4");
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function (it, S) {
  if (!isObject(it)) return it;
  var fn, val;
  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
  throw TypeError("Can't convert object to primitive value");
};


/***/ }),

/***/ "7333":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// 19.1.2.1 Object.assign(target, source, ...)
var getKeys = __webpack_require__("0d58");
var gOPS = __webpack_require__("2621");
var pIE = __webpack_require__("52a7");
var toObject = __webpack_require__("4bf8");
var IObject = __webpack_require__("626a");
var $assign = Object.assign;

// should work with symbols and should have deterministic property order (V8 bug)
module.exports = !$assign || __webpack_require__("79e5")(function () {
  var A = {};
  var B = {};
  // eslint-disable-next-line no-undef
  var S = Symbol();
  var K = 'abcdefghijklmnopqrst';
  A[S] = 7;
  K.split('').forEach(function (k) { B[k] = k; });
  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
  var T = toObject(target);
  var aLen = arguments.length;
  var index = 1;
  var getSymbols = gOPS.f;
  var isEnum = pIE.f;
  while (aLen > index) {
    var S = IObject(arguments[index++]);
    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
    var length = keys.length;
    var j = 0;
    var key;
    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
  } return T;
} : $assign;


/***/ }),

/***/ "7726":
/***/ (function(module, exports) {

// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
  ? window : typeof self != 'undefined' && self.Math == Math ? self
  // eslint-disable-next-line no-new-func
  : Function('return this')();
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef


/***/ }),

/***/ "77f1":
/***/ (function(module, exports, __webpack_require__) {

var toInteger = __webpack_require__("4588");
var max = Math.max;
var min = Math.min;
module.exports = function (index, length) {
  index = toInteger(index);
  return index < 0 ? max(index + length, 0) : min(index, length);
};


/***/ }),

/***/ "79e5":
/***/ (function(module, exports) {

module.exports = function (exec) {
  try {
    return !!exec();
  } catch (e) {
    return true;
  }
};


/***/ }),

/***/ "7f20":
/***/ (function(module, exports, __webpack_require__) {

var def = __webpack_require__("86cc").f;
var has = __webpack_require__("69a8");
var TAG = __webpack_require__("2b4c")('toStringTag');

module.exports = function (it, tag, stat) {
  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
};


/***/ }),

/***/ "8378":
/***/ (function(module, exports) {

var core = module.exports = { version: '2.6.5' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef


/***/ }),

/***/ "84f2":
/***/ (function(module, exports) {

module.exports = {};


/***/ }),

/***/ "86cc":
/***/ (function(module, exports, __webpack_require__) {

var anObject = __webpack_require__("cb7c");
var IE8_DOM_DEFINE = __webpack_require__("c69a");
var toPrimitive = __webpack_require__("6a99");
var dP = Object.defineProperty;

exports.f = __webpack_require__("9e1e") ? Object.defineProperty : function defineProperty(O, P, Attributes) {
  anObject(O);
  P = toPrimitive(P, true);
  anObject(Attributes);
  if (IE8_DOM_DEFINE) try {
    return dP(O, P, Attributes);
  } catch (e) { /* empty */ }
  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
  if ('value' in Attributes) O[P] = Attributes.value;
  return O;
};


/***/ }),

/***/ "9b43":
/***/ (function(module, exports, __webpack_require__) {

// optional / simple context binding
var aFunction = __webpack_require__("d8e8");
module.exports = function (fn, that, length) {
  aFunction(fn);
  if (that === undefined) return fn;
  switch (length) {
    case 1: return function (a) {
      return fn.call(that, a);
    };
    case 2: return function (a, b) {
      return fn.call(that, a, b);
    };
    case 3: return function (a, b, c) {
      return fn.call(that, a, b, c);
    };
  }
  return function (/* ...args */) {
    return fn.apply(that, arguments);
  };
};


/***/ }),

/***/ "9c6c":
/***/ (function(module, exports, __webpack_require__) {

// 22.1.3.31 Array.prototype[@@unscopables]
var UNSCOPABLES = __webpack_require__("2b4c")('unscopables');
var ArrayProto = Array.prototype;
if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__("32e9")(ArrayProto, UNSCOPABLES, {});
module.exports = function (key) {
  ArrayProto[UNSCOPABLES][key] = true;
};


/***/ }),

/***/ "9def":
/***/ (function(module, exports, __webpack_require__) {

// 7.1.15 ToLength
var toInteger = __webpack_require__("4588");
var min = Math.min;
module.exports = function (it) {
  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};


/***/ }),

/***/ "9e1e":
/***/ (function(module, exports, __webpack_require__) {

// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__("79e5")(function () {
  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),

/***/ "a352":
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE_a352__;

/***/ }),

/***/ "a481":
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var anObject = __webpack_require__("cb7c");
var toObject = __webpack_require__("4bf8");
var toLength = __webpack_require__("9def");
var toInteger = __webpack_require__("4588");
var advanceStringIndex = __webpack_require__("0390");
var regExpExec = __webpack_require__("5f1b");
var max = Math.max;
var min = Math.min;
var floor = Math.floor;
var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g;
var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g;

var maybeToString = function (it) {
  return it === undefined ? it : String(it);
};

// @@replace logic
__webpack_require__("214f")('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {
  return [
    // `String.prototype.replace` method
    // https://tc39.github.io/ecma262/#sec-string.prototype.replace
    function replace(searchValue, replaceValue) {
      var O = defined(this);
      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];
      return fn !== undefined
        ? fn.call(searchValue, O, replaceValue)
        : $replace.call(String(O), searchValue, replaceValue);
    },
    // `RegExp.prototype[@@replace]` method
    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace
    function (regexp, replaceValue) {
      var res = maybeCallNative($replace, regexp, this, replaceValue);
      if (res.done) return res.value;

      var rx = anObject(regexp);
      var S = String(this);
      var functionalReplace = typeof replaceValue === 'function';
      if (!functionalReplace) replaceValue = String(replaceValue);
      var global = rx.global;
      if (global) {
        var fullUnicode = rx.unicode;
        rx.lastIndex = 0;
      }
      var results = [];
      while (true) {
        var result = regExpExec(rx, S);
        if (result === null) break;
        results.push(result);
        if (!global) break;
        var matchStr = String(result[0]);
        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
      }
      var accumulatedResult = '';
      var nextSourcePosition = 0;
      for (var i = 0; i < results.length; i++) {
        result = results[i];
        var matched = String(result[0]);
        var position = max(min(toInteger(result.index), S.length), 0);
        var captures = [];
        // NOTE: This is equivalent to
        //   captures = result.slice(1).map(maybeToString)
        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
        // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
        var namedCaptures = result.groups;
        if (functionalReplace) {
          var replacerArgs = [matched].concat(captures, position, S);
          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
          var replacement = String(replaceValue.apply(undefined, replacerArgs));
        } else {
          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
        }
        if (position >= nextSourcePosition) {
          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
          nextSourcePosition = position + matched.length;
        }
      }
      return accumulatedResult + S.slice(nextSourcePosition);
    }
  ];

    // https://tc39.github.io/ecma262/#sec-getsubstitution
  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {
    var tailPos = position + matched.length;
    var m = captures.length;
    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
    if (namedCaptures !== undefined) {
      namedCaptures = toObject(namedCaptures);
      symbols = SUBSTITUTION_SYMBOLS;
    }
    return $replace.call(replacement, symbols, function (match, ch) {
      var capture;
      switch (ch.charAt(0)) {
        case '$': return '$';
        case '&': return matched;
        case '`': return str.slice(0, position);
        case "'": return str.slice(tailPos);
        case '<':
          capture = namedCaptures[ch.slice(1, -1)];
          break;
        default: // \d\d?
          var n = +ch;
          if (n === 0) return match;
          if (n > m) {
            var f = floor(n / 10);
            if (f === 0) return match;
            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
            return match;
          }
          capture = captures[n - 1];
      }
      return capture === undefined ? '' : capture;
    });
  }
});


/***/ }),

/***/ "aae3":
/***/ (function(module, exports, __webpack_require__) {

// 7.2.8 IsRegExp(argument)
var isObject = __webpack_require__("d3f4");
var cof = __webpack_require__("2d95");
var MATCH = __webpack_require__("2b4c")('match');
module.exports = function (it) {
  var isRegExp;
  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
};


/***/ }),

/***/ "ac6a":
/***/ (function(module, exports, __webpack_require__) {

var $iterators = __webpack_require__("cadf");
var getKeys = __webpack_require__("0d58");
var redefine = __webpack_require__("2aba");
var global = __webpack_require__("7726");
var hide = __webpack_require__("32e9");
var Iterators = __webpack_require__("84f2");
var wks = __webpack_require__("2b4c");
var ITERATOR = wks('iterator');
var TO_STRING_TAG = wks('toStringTag');
var ArrayValues = Iterators.Array;

var DOMIterables = {
  CSSRuleList: true, // TODO: Not spec compliant, should be false.
  CSSStyleDeclaration: false,
  CSSValueList: false,
  ClientRectList: false,
  DOMRectList: false,
  DOMStringList: false,
  DOMTokenList: true,
  DataTransferItemList: false,
  FileList: false,
  HTMLAllCollection: false,
  HTMLCollection: false,
  HTMLFormElement: false,
  HTMLSelectElement: false,
  MediaList: true, // TODO: Not spec compliant, should be false.
  MimeTypeArray: false,
  NamedNodeMap: false,
  NodeList: true,
  PaintRequestList: false,
  Plugin: false,
  PluginArray: false,
  SVGLengthList: false,
  SVGNumberList: false,
  SVGPathSegList: false,
  SVGPointList: false,
  SVGStringList: false,
  SVGTransformList: false,
  SourceBufferList: false,
  StyleSheetList: true, // TODO: Not spec compliant, should be false.
  TextTrackCueList: false,
  TextTrackList: false,
  TouchList: false
};

for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {
  var NAME = collections[i];
  var explicit = DOMIterables[NAME];
  var Collection = global[NAME];
  var proto = Collection && Collection.prototype;
  var key;
  if (proto) {
    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
    Iterators[NAME] = ArrayValues;
    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
  }
}


/***/ }),

/***/ "b0c5":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var regexpExec = __webpack_require__("520a");
__webpack_require__("5ca1")({
  target: 'RegExp',
  proto: true,
  forced: regexpExec !== /./.exec
}, {
  exec: regexpExec
});


/***/ }),

/***/ "be13":
/***/ (function(module, exports) {

// 7.2.1 RequireObjectCoercible(argument)
module.exports = function (it) {
  if (it == undefined) throw TypeError("Can't call method on  " + it);
  return it;
};


/***/ }),

/***/ "c366":
/***/ (function(module, exports, __webpack_require__) {

// false -> Array#indexOf
// true  -> Array#includes
var toIObject = __webpack_require__("6821");
var toLength = __webpack_require__("9def");
var toAbsoluteIndex = __webpack_require__("77f1");
module.exports = function (IS_INCLUDES) {
  return function ($this, el, fromIndex) {
    var O = toIObject($this);
    var length = toLength(O.length);
    var index = toAbsoluteIndex(fromIndex, length);
    var value;
    // Array#includes uses SameValueZero equality algorithm
    // eslint-disable-next-line no-self-compare
    if (IS_INCLUDES && el != el) while (length > index) {
      value = O[index++];
      // eslint-disable-next-line no-self-compare
      if (value != value) return true;
    // Array#indexOf ignores holes, Array#includes - not
    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
      if (O[index] === el) return IS_INCLUDES || index || 0;
    } return !IS_INCLUDES && -1;
  };
};


/***/ }),

/***/ "c649":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return insertNodeAt; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return camelize; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return console; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return removeNode; });
/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("a481");
/* harmony import */ var core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_regexp_replace__WEBPACK_IMPORTED_MODULE_0__);


function getConsole() {
  if (typeof window !== "undefined") {
    return window.console;
  }

  return global.console;
}

var console = getConsole();

function cached(fn) {
  var cache = Object.create(null);
  return function cachedFn(str) {
    var hit = cache[str];
    return hit || (cache[str] = fn(str));
  };
}

var regex = /-(\w)/g;
var camelize = cached(function (str) {
  return str.replace(regex, function (_, c) {
    return c ? c.toUpperCase() : "";
  });
});

function removeNode(node) {
  if (node.parentElement !== null) {
    node.parentElement.removeChild(node);
  }
}

function insertNodeAt(fatherNode, node, position) {
  var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;
  fatherNode.insertBefore(node, refNode);
}


/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("c8ba")))

/***/ }),

/***/ "c69a":
/***/ (function(module, exports, __webpack_require__) {

module.exports = !__webpack_require__("9e1e") && !__webpack_require__("79e5")(function () {
  return Object.defineProperty(__webpack_require__("230e")('div'), 'a', { get: function () { return 7; } }).a != 7;
});


/***/ }),

/***/ "c8ba":
/***/ (function(module, exports) {

var g;

// This works in non-strict mode
g = (function() {
	return this;
})();

try {
	// This works if eval is allowed (see CSP)
	g = g || new Function("return this")();
} catch (e) {
	// This works if the window reference is available
	if (typeof window === "object") g = window;
}

// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}

module.exports = g;


/***/ }),

/***/ "ca5a":
/***/ (function(module, exports) {

var id = 0;
var px = Math.random();
module.exports = function (key) {
  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};


/***/ }),

/***/ "cadf":
/***/ (function(module, exports, __webpack_require__) {

"use strict";

var addToUnscopables = __webpack_require__("9c6c");
var step = __webpack_require__("d53b");
var Iterators = __webpack_require__("84f2");
var toIObject = __webpack_require__("6821");

// 22.1.3.4 Array.prototype.entries()
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
module.exports = __webpack_require__("01f9")(Array, 'Array', function (iterated, kind) {
  this._t = toIObject(iterated); // target
  this._i = 0;                   // next index
  this._k = kind;                // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
}, function () {
  var O = this._t;
  var kind = this._k;
  var index = this._i++;
  if (!O || index >= O.length) {
    this._t = undefined;
    return step(1);
  }
  if (kind == 'keys') return step(0, index);
  if (kind == 'values') return step(0, O[index]);
  return step(0, [index, O[index]]);
}, 'values');

// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
Iterators.Arguments = Iterators.Array;

addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');


/***/ }),

/***/ "cb7c":
/***/ (function(module, exports, __webpack_require__) {

var isObject = __webpack_require__("d3f4");
module.exports = function (it) {
  if (!isObject(it)) throw TypeError(it + ' is not an object!');
  return it;
};


/***/ }),

/***/ "ce10":
/***/ (function(module, exports, __webpack_require__) {

var has = __webpack_require__("69a8");
var toIObject = __webpack_require__("6821");
var arrayIndexOf = __webpack_require__("c366")(false);
var IE_PROTO = __webpack_require__("613b")('IE_PROTO');

module.exports = function (object, names) {
  var O = toIObject(object);
  var i = 0;
  var result = [];
  var key;
  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
  // Don't enum bug & hidden keys
  while (names.length > i) if (has(O, key = names[i++])) {
    ~arrayIndexOf(result, key) || result.push(key);
  }
  return result;
};


/***/ }),

/***/ "d2c8":
/***/ (function(module, exports, __webpack_require__) {

// helper for String#{startsWith, endsWith, includes}
var isRegExp = __webpack_require__("aae3");
var defined = __webpack_require__("be13");

module.exports = function (that, searchString, NAME) {
  if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
  return String(defined(that));
};


/***/ }),

/***/ "d3f4":
/***/ (function(module, exports) {

module.exports = function (it) {
  return typeof it === 'object' ? it !== null : typeof it === 'function';
};


/***/ }),

/***/ "d53b":
/***/ (function(module, exports) {

module.exports = function (done, value) {
  return { value: value, done: !!done };
};


/***/ }),

/***/ "d8e8":
/***/ (function(module, exports) {

module.exports = function (it) {
  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
  return it;
};


/***/ }),

/***/ "e11e":
/***/ (function(module, exports) {

// IE 8- don't enum bug keys
module.exports = (
  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');


/***/ }),

/***/ "f559":
/***/ (function(module, exports, __webpack_require__) {

"use strict";
// 21.1.3.18 String.prototype.startsWith(searchString [, position ])

var $export = __webpack_require__("5ca1");
var toLength = __webpack_require__("9def");
var context = __webpack_require__("d2c8");
var STARTS_WITH = 'startsWith';
var $startsWith = ''[STARTS_WITH];

$export($export.P + $export.F * __webpack_require__("5147")(STARTS_WITH), 'String', {
  startsWith: function startsWith(searchString /* , position = 0 */) {
    var that = context(this, searchString, STARTS_WITH);
    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
    var search = String(searchString);
    return $startsWith
      ? $startsWith.call(that, search, index)
      : that.slice(index, index + search.length) === search;
  }
});


/***/ }),

/***/ "f6fd":
/***/ (function(module, exports) {

// document.currentScript polyfill by Adam Miller

// MIT license

(function(document){
  var currentScript = "currentScript",
      scripts = document.getElementsByTagName('script'); // Live NodeList collection

  // If browser needs currentScript polyfill, add get currentScript() to the document object
  if (!(currentScript in document)) {
    Object.defineProperty(document, currentScript, {
      get: function(){

        // IE 6-10 supports script readyState
        // IE 10+ support stack trace
        try { throw new Error(); }
        catch (err) {

          // Find the second match for the "at" string to get file src url from stack.
          // Specifically works with the format of stack traces in IE.
          var i, res = ((/.*at [^\(]*\((.*):.+:.+\)$/ig).exec(err.stack) || [false])[1];

          // For all scripts on the page, if src matches or if ready state is interactive, return the script tag
          for(i in scripts){
            if(scripts[i].src == res || scripts[i].readyState == "interactive"){
              return scripts[i];
            }
          }

          // If no match, return null
          return null;
        }
      }
    });
  }
})(document);


/***/ }),

/***/ "f751":
/***/ (function(module, exports, __webpack_require__) {

// 19.1.3.1 Object.assign(target, source)
var $export = __webpack_require__("5ca1");

$export($export.S + $export.F, 'Object', { assign: __webpack_require__("7333") });


/***/ }),

/***/ "fa5b":
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__("5537")('native-function-to-string', Function.toString);


/***/ }),

/***/ "fab2":
/***/ (function(module, exports, __webpack_require__) {

var document = __webpack_require__("7726").document;
module.exports = document && document.documentElement;


/***/ }),

/***/ "fb15":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
// This file is imported into lib/wc client bundles.

if (typeof window !== 'undefined') {
  if (true) {
    __webpack_require__("f6fd")
  }

  var setPublicPath_i
  if ((setPublicPath_i = window.document.currentScript) && (setPublicPath_i = setPublicPath_i.src.match(/(.+\/)[^/]+\.js(\?.*)?$/))) {
    __webpack_require__.p = setPublicPath_i[1] // eslint-disable-line
  }
}

// Indicate to webpack that this file can be concatenated
/* harmony default export */ var setPublicPath = (null);

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.assign.js
var es6_object_assign = __webpack_require__("f751");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.starts-with.js
var es6_string_starts_with = __webpack_require__("f559");

// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom.iterable.js
var web_dom_iterable = __webpack_require__("ac6a");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.array.iterator.js
var es6_array_iterator = __webpack_require__("cadf");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.object.keys.js
var es6_object_keys = __webpack_require__("456d");

// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
function _arrayWithHoles(arr) {
  if (Array.isArray(arr)) return arr;
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
function _iterableToArrayLimit(arr, i) {
  if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
  var _arr = [];
  var _n = true;
  var _d = false;
  var _e = undefined;

  try {
    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
      _arr.push(_s.value);

      if (i && _arr.length === i) break;
    }
  } catch (err) {
    _d = true;
    _e = err;
  } finally {
    try {
      if (!_n && _i["return"] != null) _i["return"]();
    } finally {
      if (_d) throw _e;
    }
  }

  return _arr;
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js
function _arrayLikeToArray(arr, len) {
  if (len == null || len > arr.length) len = arr.length;

  for (var i = 0, arr2 = new Array(len); i < len; i++) {
    arr2[i] = arr[i];
  }

  return arr2;
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js

function _unsupportedIterableToArray(o, minLen) {
  if (!o) return;
  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
  var n = Object.prototype.toString.call(o).slice(8, -1);
  if (n === "Object" && o.constructor) n = o.constructor.name;
  if (n === "Map" || n === "Set") return Array.from(o);
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js




function _slicedToArray(arr, i) {
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
// EXTERNAL MODULE: ./node_modules/core-js/modules/es7.array.includes.js
var es7_array_includes = __webpack_require__("6762");

// EXTERNAL MODULE: ./node_modules/core-js/modules/es6.string.includes.js
var es6_string_includes = __webpack_require__("2fdb");

// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js

function _arrayWithoutHoles(arr) {
  if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js
function _iterableToArray(iter) {
  if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js




function _toConsumableArray(arr) {
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
// EXTERNAL MODULE: external {"commonjs":"sortablejs","commonjs2":"sortablejs","amd":"sortablejs","root":"Sortable"}
var external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_ = __webpack_require__("a352");
var external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_);

// EXTERNAL MODULE: ./src/util/helper.js
var helper = __webpack_require__("c649");

// CONCATENATED MODULE: ./src/vuedraggable.js












function buildAttribute(object, propName, value) {
  if (value === undefined) {
    return object;
  }

  object = object || {};
  object[propName] = value;
  return object;
}

function computeVmIndex(vnodes, element) {
  return vnodes.map(function (elt) {
    return elt.elm;
  }).indexOf(element);
}

function _computeIndexes(slots, children, isTransition, footerOffset) {
  if (!slots) {
    return [];
  }

  var elmFromNodes = slots.map(function (elt) {
    return elt.elm;
  });
  var footerIndex = children.length - footerOffset;

  var rawIndexes = _toConsumableArray(children).map(function (elt, idx) {
    return idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt);
  });

  return isTransition ? rawIndexes.filter(function (ind) {
    return ind !== -1;
  }) : rawIndexes;
}

function emit(evtName, evtData) {
  var _this = this;

  this.$nextTick(function () {
    return _this.$emit(evtName.toLowerCase(), evtData);
  });
}

function delegateAndEmit(evtName) {
  var _this2 = this;

  return function (evtData) {
    if (_this2.realList !== null) {
      _this2["onDrag" + evtName](evtData);
    }

    emit.call(_this2, evtName, evtData);
  };
}

function isTransitionName(name) {
  return ["transition-group", "TransitionGroup"].includes(name);
}

function vuedraggable_isTransition(slots) {
  if (!slots || slots.length !== 1) {
    return false;
  }

  var _slots = _slicedToArray(slots, 1),
      componentOptions = _slots[0].componentOptions;

  if (!componentOptions) {
    return false;
  }

  return isTransitionName(componentOptions.tag);
}

function getSlot(slot, scopedSlot, key) {
  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);
}

function computeChildrenAndOffsets(children, slot, scopedSlot) {
  var headerOffset = 0;
  var footerOffset = 0;
  var header = getSlot(slot, scopedSlot, "header");

  if (header) {
    headerOffset = header.length;
    children = children ? [].concat(_toConsumableArray(header), _toConsumableArray(children)) : _toConsumableArray(header);
  }

  var footer = getSlot(slot, scopedSlot, "footer");

  if (footer) {
    footerOffset = footer.length;
    children = children ? [].concat(_toConsumableArray(children), _toConsumableArray(footer)) : _toConsumableArray(footer);
  }

  return {
    children: children,
    headerOffset: headerOffset,
    footerOffset: footerOffset
  };
}

function getComponentAttributes($attrs, componentData) {
  var attributes = null;

  var update = function update(name, value) {
    attributes = buildAttribute(attributes, name, value);
  };

  var attrs = Object.keys($attrs).filter(function (key) {
    return key === "id" || key.startsWith("data-");
  }).reduce(function (res, key) {
    res[key] = $attrs[key];
    return res;
  }, {});
  update("attrs", attrs);

  if (!componentData) {
    return attributes;
  }

  var on = componentData.on,
      props = componentData.props,
      componentDataAttrs = componentData.attrs;
  update("on", on);
  update("props", props);
  Object.assign(attributes.attrs, componentDataAttrs);
  return attributes;
}

var eventsListened = ["Start", "Add", "Remove", "Update", "End"];
var eventsToEmit = ["Choose", "Unchoose", "Sort", "Filter", "Clone"];
var readonlyProperties = ["Move"].concat(eventsListened, eventsToEmit).map(function (evt) {
  return "on" + evt;
});
var draggingElement = null;
var props = {
  options: Object,
  list: {
    type: Array,
    required: false,
    default: null
  },
  value: {
    type: Array,
    required: false,
    default: null
  },
  noTransitionOnDrag: {
    type: Boolean,
    default: false
  },
  clone: {
    type: Function,
    default: function _default(original) {
      return original;
    }
  },
  element: {
    type: String,
    default: "div"
  },
  tag: {
    type: String,
    default: null
  },
  move: {
    type: Function,
    default: null
  },
  componentData: {
    type: Object,
    required: false,
    default: null
  }
};
var draggableComponent = {
  name: "draggable",
  inheritAttrs: false,
  props: props,
  data: function data() {
    return {
      transitionMode: false,
      noneFunctionalComponentMode: false
    };
  },
  render: function render(h) {
    var slots = this.$slots.default;
    this.transitionMode = vuedraggable_isTransition(slots);

    var _computeChildrenAndOf = computeChildrenAndOffsets(slots, this.$slots, this.$scopedSlots),
        children = _computeChildrenAndOf.children,
        headerOffset = _computeChildrenAndOf.headerOffset,
        footerOffset = _computeChildrenAndOf.footerOffset;

    this.headerOffset = headerOffset;
    this.footerOffset = footerOffset;
    var attributes = getComponentAttributes(this.$attrs, this.componentData);
    return h(this.getTag(), attributes, children);
  },
  created: function created() {
    if (this.list !== null && this.value !== null) {
      helper["b" /* console */].error("Value and list props are mutually exclusive! Please set one or another.");
    }

    if (this.element !== "div") {
      helper["b" /* console */].warn("Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props");
    }

    if (this.options !== undefined) {
      helper["b" /* console */].warn("Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props");
    }
  },
  mounted: function mounted() {
    var _this3 = this;

    this.noneFunctionalComponentMode = this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() && !this.getIsFunctional();

    if (this.noneFunctionalComponentMode && this.transitionMode) {
      throw new Error("Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ".concat(this.getTag()));
    }

    var optionsAdded = {};
    eventsListened.forEach(function (elt) {
      optionsAdded["on" + elt] = delegateAndEmit.call(_this3, elt);
    });
    eventsToEmit.forEach(function (elt) {
      optionsAdded["on" + elt] = emit.bind(_this3, elt);
    });
    var attributes = Object.keys(this.$attrs).reduce(function (res, key) {
      res[Object(helper["a" /* camelize */])(key)] = _this3.$attrs[key];
      return res;
    }, {});
    var options = Object.assign({}, this.options, attributes, optionsAdded, {
      onMove: function onMove(evt, originalEvent) {
        return _this3.onDragMove(evt, originalEvent);
      }
    });
    !("draggable" in options) && (options.draggable = ">*");
    this._sortable = new external_commonjs_sortablejs_commonjs2_sortablejs_amd_sortablejs_root_Sortable_default.a(this.rootContainer, options);
    this.computeIndexes();
  },
  beforeDestroy: function beforeDestroy() {
    if (this._sortable !== undefined) this._sortable.destroy();
  },
  computed: {
    rootContainer: function rootContainer() {
      return this.transitionMode ? this.$el.children[0] : this.$el;
    },
    realList: function realList() {
      return this.list ? this.list : this.value;
    }
  },
  watch: {
    options: {
      handler: function handler(newOptionValue) {
        this.updateOptions(newOptionValue);
      },
      deep: true
    },
    $attrs: {
      handler: function handler(newOptionValue) {
        this.updateOptions(newOptionValue);
      },
      deep: true
    },
    realList: function realList() {
      this.computeIndexes();
    }
  },
  methods: {
    getIsFunctional: function getIsFunctional() {
      var fnOptions = this._vnode.fnOptions;
      return fnOptions && fnOptions.functional;
    },
    getTag: function getTag() {
      return this.tag || this.element;
    },
    updateOptions: function updateOptions(newOptionValue) {
      for (var property in newOptionValue) {
        var value = Object(helper["a" /* camelize */])(property);

        if (readonlyProperties.indexOf(value) === -1) {
          this._sortable.option(value, newOptionValue[property]);
        }
      }
    },
    getChildrenNodes: function getChildrenNodes() {
      if (this.noneFunctionalComponentMode) {
        return this.$children[0].$slots.default;
      }

      var rawNodes = this.$slots.default;
      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;
    },
    computeIndexes: function computeIndexes() {
      var _this4 = this;

      this.$nextTick(function () {
        _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode, _this4.footerOffset);
      });
    },
    getUnderlyingVm: function getUnderlyingVm(htmlElt) {
      var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);

      if (index === -1) {
        //Edge case during move callback: related element might be
        //an element different from collection
        return null;
      }

      var element = this.realList[index];
      return {
        index: index,
        element: element
      };
    },
    getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {
      var vue = _ref.__vue__;

      if (!vue || !vue.$options || !isTransitionName(vue.$options._componentTag)) {
        if (!("realList" in vue) && vue.$children.length === 1 && "realList" in vue.$children[0]) return vue.$children[0];
        return vue;
      }

      return vue.$parent;
    },
    emitChanges: function emitChanges(evt) {
      var _this5 = this;

      this.$nextTick(function () {
        _this5.$emit("change", evt);
      });
    },
    alterList: function alterList(onList) {
      if (this.list) {
        onList(this.list);
        return;
      }

      var newList = _toConsumableArray(this.value);

      onList(newList);
      this.$emit("input", newList);
    },
    spliceList: function spliceList() {
      var _arguments = arguments;

      var spliceList = function spliceList(list) {
        return list.splice.apply(list, _toConsumableArray(_arguments));
      };

      this.alterList(spliceList);
    },
    updatePosition: function updatePosition(oldIndex, newIndex) {
      var updatePosition = function updatePosition(list) {
        return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);
      };

      this.alterList(updatePosition);
    },
    getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {
      var to = _ref2.to,
          related = _ref2.related;
      var component = this.getUnderlyingPotencialDraggableComponent(to);

      if (!component) {
        return {
          component: component
        };
      }

      var list = component.realList;
      var context = {
        list: list,
        component: component
      };

      if (to !== related && list && component.getUnderlyingVm) {
        var destination = component.getUnderlyingVm(related);

        if (destination) {
          return Object.assign(destination, context);
        }
      }

      return context;
    },
    getVmIndex: function getVmIndex(domIndex) {
      var indexes = this.visibleIndexes;
      var numberIndexes = indexes.length;
      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];
    },
    getComponent: function getComponent() {
      return this.$slots.default[0].componentInstance;
    },
    resetTransitionData: function resetTransitionData(index) {
      if (!this.noTransitionOnDrag || !this.transitionMode) {
        return;
      }

      var nodes = this.getChildrenNodes();
      nodes[index].data = null;
      var transitionContainer = this.getComponent();
      transitionContainer.children = [];
      transitionContainer.kept = undefined;
    },
    onDragStart: function onDragStart(evt) {
      this.context = this.getUnderlyingVm(evt.item);
      evt.item._underlying_vm_ = this.clone(this.context.element);
      draggingElement = evt.item;
    },
    onDragAdd: function onDragAdd(evt) {
      var element = evt.item._underlying_vm_;

      if (element === undefined) {
        return;
      }

      Object(helper["d" /* removeNode */])(evt.item);
      var newIndex = this.getVmIndex(evt.newIndex);
      this.spliceList(newIndex, 0, element);
      this.computeIndexes();
      var added = {
        element: element,
        newIndex: newIndex
      };
      this.emitChanges({
        added: added
      });
    },
    onDragRemove: function onDragRemove(evt) {
      Object(helper["c" /* insertNodeAt */])(this.rootContainer, evt.item, evt.oldIndex);

      if (evt.pullMode === "clone") {
        Object(helper["d" /* removeNode */])(evt.clone);
        return;
      }

      var oldIndex = this.context.index;
      this.spliceList(oldIndex, 1);
      var removed = {
        element: this.context.element,
        oldIndex: oldIndex
      };
      this.resetTransitionData(oldIndex);
      this.emitChanges({
        removed: removed
      });
    },
    onDragUpdate: function onDragUpdate(evt) {
      Object(helper["d" /* removeNode */])(evt.item);
      Object(helper["c" /* insertNodeAt */])(evt.from, evt.item, evt.oldIndex);
      var oldIndex = this.context.index;
      var newIndex = this.getVmIndex(evt.newIndex);
      this.updatePosition(oldIndex, newIndex);
      var moved = {
        element: this.context.element,
        oldIndex: oldIndex,
        newIndex: newIndex
      };
      this.emitChanges({
        moved: moved
      });
    },
    updateProperty: function updateProperty(evt, propertyName) {
      evt.hasOwnProperty(propertyName) && (evt[propertyName] += this.headerOffset);
    },
    computeFutureIndex: function computeFutureIndex(relatedContext, evt) {
      if (!relatedContext.element) {
        return 0;
      }

      var domChildren = _toConsumableArray(evt.to.children).filter(function (el) {
        return el.style["display"] !== "none";
      });

      var currentDOMIndex = domChildren.indexOf(evt.related);
      var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);
      var draggedInList = domChildren.indexOf(draggingElement) !== -1;
      return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;
    },
    onDragMove: function onDragMove(evt, originalEvent) {
      var onMove = this.move;

      if (!onMove || !this.realList) {
        return true;
      }

      var relatedContext = this.getRelatedContextFromMoveEvent(evt);
      var draggedContext = this.context;
      var futureIndex = this.computeFutureIndex(relatedContext, evt);
      Object.assign(draggedContext, {
        futureIndex: futureIndex
      });
      var sendEvt = Object.assign({}, evt, {
        relatedContext: relatedContext,
        draggedContext: draggedContext
      });
      return onMove(sendEvt, originalEvent);
    },
    onDragEnd: function onDragEnd() {
      this.computeIndexes();
      draggingElement = null;
    }
  }
};

if (typeof window !== "undefined" && "Vue" in window) {
  window.Vue.component("draggable", draggableComponent);
}

/* harmony default export */ var vuedraggable = (draggableComponent);
// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js


/* harmony default export */ var entry_lib = __webpack_exports__["default"] = (vuedraggable);



/***/ })

/******/ })["default"];
});
//# sourceMappingURL=vuedraggable.umd.js.map{"version":3,"sources":["webpack://vuedraggable/webpack/universalModuleDefinition","webpack://vuedraggable/webpack/bootstrap","webpack://vuedraggable/./node_modules/core-js/modules/_iter-define.js","webpack://vuedraggable/./node_modules/core-js/modules/_string-at.js","webpack://vuedraggable/./node_modules/core-js/modules/_advance-string-index.js","webpack://vuedraggable/./node_modules/core-js/modules/_flags.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-keys.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-dps.js","webpack://vuedraggable/./node_modules/core-js/modules/_fix-re-wks.js","webpack://vuedraggable/./node_modules/core-js/modules/_dom-create.js","webpack://vuedraggable/./node_modules/core-js/modules/_classof.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-gops.js","webpack://vuedraggable/./node_modules/core-js/modules/_redefine.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-create.js","webpack://vuedraggable/./node_modules/core-js/modules/_wks.js","webpack://vuedraggable/./node_modules/core-js/modules/_library.js","webpack://vuedraggable/./node_modules/core-js/modules/_cof.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.string.includes.js","webpack://vuedraggable/./node_modules/core-js/modules/_hide.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-gpo.js","webpack://vuedraggable/./node_modules/core-js/modules/_iter-create.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.object.keys.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-integer.js","webpack://vuedraggable/./node_modules/core-js/modules/_property-desc.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-object.js","webpack://vuedraggable/./node_modules/core-js/modules/_fails-is-regexp.js","webpack://vuedraggable/./node_modules/core-js/modules/_regexp-exec.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-pie.js","webpack://vuedraggable/./node_modules/core-js/modules/_shared.js","webpack://vuedraggable/./node_modules/core-js/modules/_export.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-sap.js","webpack://vuedraggable/./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack://vuedraggable/./node_modules/core-js/modules/_shared-key.js","webpack://vuedraggable/./node_modules/core-js/modules/_iobject.js","webpack://vuedraggable/./node_modules/core-js/modules/es7.array.includes.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-iobject.js","webpack://vuedraggable/./node_modules/core-js/modules/_has.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-primitive.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-assign.js","webpack://vuedraggable/./node_modules/core-js/modules/_global.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-absolute-index.js","webpack://vuedraggable/./node_modules/core-js/modules/_fails.js","webpack://vuedraggable/./node_modules/core-js/modules/_set-to-string-tag.js","webpack://vuedraggable/./node_modules/core-js/modules/_core.js","webpack://vuedraggable/./node_modules/core-js/modules/_iterators.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-dp.js","webpack://vuedraggable/./node_modules/core-js/modules/_ctx.js","webpack://vuedraggable/./node_modules/core-js/modules/_add-to-unscopables.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-length.js","webpack://vuedraggable/./node_modules/core-js/modules/_descriptors.js","webpack://vuedraggable/external {\"commonjs\":\"sortablejs\",\"commonjs2\":\"sortablejs\",\"amd\":\"sortablejs\",\"root\":\"Sortable\"}","webpack://vuedraggable/./node_modules/core-js/modules/es6.regexp.replace.js","webpack://vuedraggable/./node_modules/core-js/modules/_is-regexp.js","webpack://vuedraggable/./node_modules/core-js/modules/web.dom.iterable.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.regexp.exec.js","webpack://vuedraggable/./node_modules/core-js/modules/_defined.js","webpack://vuedraggable/./node_modules/core-js/modules/_array-includes.js","webpack://vuedraggable/./src/util/helper.js","webpack://vuedraggable/./node_modules/core-js/modules/_ie8-dom-define.js","webpack://vuedraggable/(webpack)/buildin/global.js","webpack://vuedraggable/./node_modules/core-js/modules/_uid.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.array.iterator.js","webpack://vuedraggable/./node_modules/core-js/modules/_an-object.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-keys-internal.js","webpack://vuedraggable/./node_modules/core-js/modules/_string-context.js","webpack://vuedraggable/./node_modules/core-js/modules/_is-object.js","webpack://vuedraggable/./node_modules/core-js/modules/_iter-step.js","webpack://vuedraggable/./node_modules/core-js/modules/_a-function.js","webpack://vuedraggable/./node_modules/core-js/modules/_enum-bug-keys.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.string.starts-with.js","webpack://vuedraggable/./node_modules/current-script-polyfill/currentScript.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.object.assign.js","webpack://vuedraggable/./node_modules/core-js/modules/_function-to-string.js","webpack://vuedraggable/./node_modules/core-js/modules/_html.js","webpack://vuedraggable/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://vuedraggable/./src/vuedraggable.js","webpack://vuedraggable/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"names":["getConsole","window","console","global","cached","fn","cache","Object","create","cachedFn","str","hit","regex","camelize","replace","_","c","toUpperCase","removeNode","node","parentElement","removeChild","insertNodeAt","fatherNode","position","refNode","children","nextSibling","insertBefore","buildAttribute","object","propName","value","undefined","computeVmIndex","vnodes","element","map","elt","elm","indexOf","computeIndexes","slots","isTransition","footerOffset","elmFromNodes","footerIndex","length","rawIndexes","idx","filter","ind","emit","evtName","evtData","$nextTick","$emit","toLowerCase","delegateAndEmit","realList","call","isTransitionName","name","includes","componentOptions","tag","getSlot","slot","scopedSlot","key","computeChildrenAndOffsets","headerOffset","header","footer","getComponentAttributes","$attrs","componentData","attributes","update","attrs","keys","startsWith","reduce","res","on","props","componentDataAttrs","assign","eventsListened","eventsToEmit","readonlyProperties","evt","draggingElement","options","list","type","Array","required","default","noTransitionOnDrag","Boolean","clone","Function","original","String","move","draggableComponent","inheritAttrs","data","transitionMode","noneFunctionalComponentMode","render","h","$slots","$scopedSlots","getTag","created","error","warn","mounted","$el","nodeName","getIsFunctional","Error","optionsAdded","forEach","bind","onMove","originalEvent","onDragMove","draggable","_sortable","Sortable","rootContainer","beforeDestroy","destroy","computed","watch","handler","newOptionValue","updateOptions","deep","methods","fnOptions","_vnode","functional","property","option","getChildrenNodes","$children","rawNodes","child","visibleIndexes","getUnderlyingVm","htmlElt","index","getUnderlyingPotencialDraggableComponent","vue","__vue__","$options","_componentTag","$parent","emitChanges","alterList","onList","newList","spliceList","splice","arguments","updatePosition","oldIndex","newIndex","getRelatedContextFromMoveEvent","to","related","component","context","destination","getVmIndex","domIndex","indexes","numberIndexes","getComponent","componentInstance","resetTransitionData","nodes","transitionContainer","kept","onDragStart","item","_underlying_vm_","onDragAdd","added","onDragRemove","pullMode","removed","onDragUpdate","from","moved","updateProperty","propertyName","hasOwnProperty","computeFutureIndex","relatedContext","domChildren","el","style","currentDOMIndex","currentIndex","draggedInList","willInsertAfter","draggedContext","futureIndex","sendEvt","onDragEnd","Vue"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;AClFa;AACb,cAAc,mBAAO,CAAC,MAAY;AAClC,cAAc,mBAAO,CAAC,MAAW;AACjC,eAAe,mBAAO,CAAC,MAAa;AACpC,WAAW,mBAAO,CAAC,MAAS;AAC5B,gBAAgB,mBAAO,CAAC,MAAc;AACtC,kBAAkB,mBAAO,CAAC,MAAgB;AAC1C,qBAAqB,mBAAO,CAAC,MAAsB;AACnD,qBAAqB,mBAAO,CAAC,MAAe;AAC5C,eAAe,mBAAO,CAAC,MAAQ;AAC/B,8CAA8C;AAC9C;AACA;AACA;;AAEA,8BAA8B,aAAa;;AAE3C;AACA;AACA;AACA;AACA;AACA,yCAAyC,oCAAoC;AAC7E,6CAA6C,oCAAoC;AACjF,KAAK,4BAA4B,oCAAoC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;;;;;ACpEA,gBAAgB,mBAAO,CAAC,MAAe;AACvC,cAAc,mBAAO,CAAC,MAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AChBa;AACb,SAAS,mBAAO,CAAC,MAAc;;AAE/B;AACA;AACA;AACA;AACA;;;;;;;;;ACPa;AACb;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACZA;AACA,YAAY,mBAAO,CAAC,MAAyB;AAC7C,kBAAkB,mBAAO,CAAC,MAAkB;;AAE5C;AACA;AACA;;;;;;;;ACNA,SAAS,mBAAO,CAAC,MAAc;AAC/B,eAAe,mBAAO,CAAC,MAAc;AACrC,cAAc,mBAAO,CAAC,MAAgB;;AAEtC,iBAAiB,mBAAO,CAAC,MAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACZa;AACb,mBAAO,CAAC,MAAmB;AAC3B,eAAe,mBAAO,CAAC,MAAa;AACpC,WAAW,mBAAO,CAAC,MAAS;AAC5B,YAAY,mBAAO,CAAC,MAAU;AAC9B,cAAc,mBAAO,CAAC,MAAY;AAClC,UAAU,mBAAO,CAAC,MAAQ;AAC1B,iBAAiB,mBAAO,CAAC,MAAgB;;AAEzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,2BAA2B,mBAAmB,aAAa;AAC3D;AACA;AACA;AACA;AACA,6CAA6C,WAAW;AACxD;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kBAAkB;AAClB;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA,2BAA2B,gCAAgC;AAC3D;AACA;AACA;;;;;;;;AC/FA,eAAe,mBAAO,CAAC,MAAc;AACrC,eAAe,mBAAO,CAAC,MAAW;AAClC;AACA;AACA;AACA;AACA;;;;;;;;ACNA;AACA,UAAU,mBAAO,CAAC,MAAQ;AAC1B,UAAU,mBAAO,CAAC,MAAQ;AAC1B;AACA,2BAA2B,kBAAkB,EAAE;;AAE/C;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;;;;;;;;ACAA,aAAa,mBAAO,CAAC,MAAW;AAChC,WAAW,mBAAO,CAAC,MAAS;AAC5B,UAAU,mBAAO,CAAC,MAAQ;AAC1B,UAAU,mBAAO,CAAC,MAAQ;AAC1B,gBAAgB,mBAAO,CAAC,MAAuB;AAC/C;AACA;;AAEA,mBAAO,CAAC,MAAS;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;;;;;;;;AC9BD;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC,UAAU,mBAAO,CAAC,MAAe;AACjC,kBAAkB,mBAAO,CAAC,MAAkB;AAC5C,eAAe,mBAAO,CAAC,MAAe;AACtC,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,MAAe;AACtC;AACA;AACA;AACA;AACA;AACA,EAAE,mBAAO,CAAC,MAAS;AACnB,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;ACxCA,YAAY,mBAAO,CAAC,MAAW;AAC/B,UAAU,mBAAO,CAAC,MAAQ;AAC1B,aAAa,mBAAO,CAAC,MAAW;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;ACVA;;;;;;;;ACAA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;ACJA;AACa;AACb,cAAc,mBAAO,CAAC,MAAW;AACjC,cAAc,mBAAO,CAAC,MAAmB;AACzC;;AAEA,gCAAgC,mBAAO,CAAC,MAAoB;AAC5D;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACXD,SAAS,mBAAO,CAAC,MAAc;AAC/B,iBAAiB,mBAAO,CAAC,MAAkB;AAC3C,iBAAiB,mBAAO,CAAC,MAAgB;AACzC;AACA,CAAC;AACD;AACA;AACA;;;;;;;;ACPA;AACA,UAAU,mBAAO,CAAC,MAAQ;AAC1B,eAAe,mBAAO,CAAC,MAAc;AACrC,eAAe,mBAAO,CAAC,MAAe;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;ACZa;AACb,aAAa,mBAAO,CAAC,MAAkB;AACvC,iBAAiB,mBAAO,CAAC,MAAkB;AAC3C,qBAAqB,mBAAO,CAAC,MAAsB;AACnD;;AAEA;AACA,mBAAO,CAAC,MAAS,qBAAqB,mBAAO,CAAC,MAAQ,4BAA4B,aAAa,EAAE;;AAEjG;AACA,qDAAqD,4BAA4B;AACjF;AACA;;;;;;;;ACZA;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC,YAAY,mBAAO,CAAC,MAAgB;;AAEpC,mBAAO,CAAC,MAAe;AACvB;AACA;AACA;AACA,CAAC;;;;;;;;ACRD;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACPA;AACA,cAAc,mBAAO,CAAC,MAAY;AAClC;AACA;AACA;;;;;;;;ACJA,YAAY,mBAAO,CAAC,MAAQ;AAC5B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK,YAAY;AACjB,GAAG;AACH;;;;;;;;;ACXa;;AAEb,kBAAkB,mBAAO,CAAC,MAAU;;AAEpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;;;;;;;;ACzDA,cAAc;;;;;;;;ACAd,WAAW,mBAAO,CAAC,MAAS;AAC5B,aAAa,mBAAO,CAAC,MAAW;AAChC;AACA,kDAAkD;;AAElD;AACA,qEAAqE;AACrE,CAAC;AACD;AACA,QAAQ,mBAAO,CAAC,MAAY;AAC5B;AACA,CAAC;;;;;;;;ACXD,aAAa,mBAAO,CAAC,MAAW;AAChC,WAAW,mBAAO,CAAC,MAAS;AAC5B,WAAW,mBAAO,CAAC,MAAS;AAC5B,eAAe,mBAAO,CAAC,MAAa;AACpC,UAAU,mBAAO,CAAC,MAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,uBAAuB;AACzG,iEAAiE;AACjE,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,eAAe;AACf,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;;AC1CA;AACA,cAAc,mBAAO,CAAC,MAAW;AACjC,WAAW,mBAAO,CAAC,MAAS;AAC5B,YAAY,mBAAO,CAAC,MAAU;AAC9B;AACA,6BAA6B;AAC7B;AACA;AACA,qDAAqD,OAAO,EAAE;AAC9D;;;;;;;;;ACTa;;AAEb,cAAc,mBAAO,CAAC,MAAY;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBA,aAAa,mBAAO,CAAC,MAAW;AAChC,UAAU,mBAAO,CAAC,MAAQ;AAC1B;AACA;AACA;;;;;;;;ACJA;AACA,UAAU,mBAAO,CAAC,MAAQ;AAC1B;AACA;AACA;AACA;;;;;;;;;ACLa;AACb;AACA,cAAc,mBAAO,CAAC,MAAW;AACjC,gBAAgB,mBAAO,CAAC,MAAmB;;AAE3C;AACA;AACA;AACA;AACA,CAAC;;AAED,mBAAO,CAAC,MAAuB;;;;;;;;ACX/B;AACA,cAAc,mBAAO,CAAC,MAAY;AAClC,cAAc,mBAAO,CAAC,MAAY;AAClC;AACA;AACA;;;;;;;;ACLA,uBAAuB;AACvB;AACA;AACA;;;;;;;;ACHA;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACXa;AACb;AACA,cAAc,mBAAO,CAAC,MAAgB;AACtC,WAAW,mBAAO,CAAC,MAAgB;AACnC,UAAU,mBAAO,CAAC,MAAe;AACjC,eAAe,mBAAO,CAAC,MAAc;AACrC,cAAc,mBAAO,CAAC,MAAY;AAClC;;AAEA;AACA,6BAA6B,mBAAO,CAAC,MAAU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU,EAAE;AAChD,mBAAmB,sCAAsC;AACzD,CAAC,qCAAqC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;ACjCD;AACA;AACA;AACA;AACA;AACA,yCAAyC;;;;;;;;ACLzC,gBAAgB,mBAAO,CAAC,MAAe;AACvC;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACNA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;ACNA,UAAU,mBAAO,CAAC,MAAc;AAChC,UAAU,mBAAO,CAAC,MAAQ;AAC1B,UAAU,mBAAO,CAAC,MAAQ;;AAE1B;AACA,oEAAoE,iCAAiC;AACrG;;;;;;;;ACNA,6BAA6B;AAC7B,uCAAuC;;;;;;;;ACDvC;;;;;;;;ACAA,eAAe,mBAAO,CAAC,MAAc;AACrC,qBAAqB,mBAAO,CAAC,MAAmB;AAChD,kBAAkB,mBAAO,CAAC,MAAiB;AAC3C;;AAEA,YAAY,mBAAO,CAAC,MAAgB;AACpC;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;;;;;;;ACfA;AACA,gBAAgB,mBAAO,CAAC,MAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnBA;AACA,kBAAkB,mBAAO,CAAC,MAAQ;AAClC;AACA,0CAA0C,mBAAO,CAAC,MAAS,6BAA6B;AACxF;AACA;AACA;;;;;;;;ACNA;AACA,gBAAgB,mBAAO,CAAC,MAAe;AACvC;AACA;AACA,2DAA2D;AAC3D;;;;;;;;ACLA;AACA,kBAAkB,mBAAO,CAAC,MAAU;AACpC,iCAAiC,QAAQ,mBAAmB,UAAU,EAAE,EAAE;AAC1E,CAAC;;;;;;;;ACHD,kD;;;;;;;;ACAa;;AAEb,eAAe,mBAAO,CAAC,MAAc;AACrC,eAAe,mBAAO,CAAC,MAAc;AACrC,eAAe,mBAAO,CAAC,MAAc;AACrC,gBAAgB,mBAAO,CAAC,MAAe;AACvC,yBAAyB,mBAAO,CAAC,MAAyB;AAC1D,iBAAiB,mBAAO,CAAC,MAAyB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAO,CAAC,MAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACrHD;AACA,eAAe,mBAAO,CAAC,MAAc;AACrC,UAAU,mBAAO,CAAC,MAAQ;AAC1B,YAAY,mBAAO,CAAC,MAAQ;AAC5B;AACA;AACA;AACA;;;;;;;;ACPA,iBAAiB,mBAAO,CAAC,MAAsB;AAC/C,cAAc,mBAAO,CAAC,MAAgB;AACtC,eAAe,mBAAO,CAAC,MAAa;AACpC,aAAa,mBAAO,CAAC,MAAW;AAChC,WAAW,mBAAO,CAAC,MAAS;AAC5B,gBAAgB,mBAAO,CAAC,MAAc;AACtC,UAAU,mBAAO,CAAC,MAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oDAAoD,wBAAwB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACzDa;AACb,iBAAiB,mBAAO,CAAC,MAAgB;AACzC,mBAAO,CAAC,MAAW;AACnB;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;;;;;;;;ACRD;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA,gBAAgB,mBAAO,CAAC,MAAe;AACvC,eAAe,mBAAO,CAAC,MAAc;AACrC,sBAAsB,mBAAO,CAAC,MAAsB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,YAAY,eAAe;AAChC;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;;;;ACtBA,SAASA,UAAT,GAAsB;AACpB,MAAI,OAAOC,MAAP,KAAkB,WAAtB,EAAmC;AACjC,WAAOA,MAAM,CAACC,OAAd;AACD;;AACD,SAAOC,MAAM,CAACD,OAAd;AACD;;AACD,IAAMA,OAAO,GAAGF,UAAU,EAA1B;;AAEA,SAASI,MAAT,CAAgBC,EAAhB,EAAoB;AAClB,MAAMC,KAAK,GAAGC,MAAM,CAACC,MAAP,CAAc,IAAd,CAAd;AACA,SAAO,SAASC,QAAT,CAAkBC,GAAlB,EAAuB;AAC5B,QAAMC,GAAG,GAAGL,KAAK,CAACI,GAAD,CAAjB;AACA,WAAOC,GAAG,KAAKL,KAAK,CAACI,GAAD,CAAL,GAAaL,EAAE,CAACK,GAAD,CAApB,CAAV;AACD,GAHD;AAID;;AAED,IAAME,KAAK,GAAG,QAAd;AACA,IAAMC,QAAQ,GAAGT,MAAM,CAAC,UAAAM,GAAG;AAAA,SACzBA,GAAG,CAACI,OAAJ,CAAYF,KAAZ,EAAmB,UAACG,CAAD,EAAIC,CAAJ;AAAA,WAAWA,CAAC,GAAGA,CAAC,CAACC,WAAF,EAAH,GAAqB,EAAjC;AAAA,GAAnB,CADyB;AAAA,CAAJ,CAAvB;;AAIA,SAASC,UAAT,CAAoBC,IAApB,EAA0B;AACxB,MAAIA,IAAI,CAACC,aAAL,KAAuB,IAA3B,EAAiC;AAC/BD,QAAI,CAACC,aAAL,CAAmBC,WAAnB,CAA+BF,IAA/B;AACD;AACF;;AAED,SAASG,YAAT,CAAsBC,UAAtB,EAAkCJ,IAAlC,EAAwCK,QAAxC,EAAkD;AAChD,MAAMC,OAAO,GACXD,QAAQ,KAAK,CAAb,GACID,UAAU,CAACG,QAAX,CAAoB,CAApB,CADJ,GAEIH,UAAU,CAACG,QAAX,CAAoBF,QAAQ,GAAG,CAA/B,EAAkCG,WAHxC;AAIAJ,YAAU,CAACK,YAAX,CAAwBT,IAAxB,EAA8BM,OAA9B;AACD;;;;;;;;;;ACjCD,kBAAkB,mBAAO,CAAC,MAAgB,MAAM,mBAAO,CAAC,MAAU;AAClE,+BAA+B,mBAAO,CAAC,MAAe,gBAAgB,mBAAmB,UAAU,EAAE,EAAE;AACvG,CAAC;;;;;;;;ACFD;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;;;;;;;;;ACJa;AACb,uBAAuB,mBAAO,CAAC,MAAuB;AACtD,WAAW,mBAAO,CAAC,MAAc;AACjC,gBAAgB,mBAAO,CAAC,MAAc;AACtC,gBAAgB,mBAAO,CAAC,MAAe;;AAEvC;AACA;AACA;AACA;AACA,iBAAiB,mBAAO,CAAC,MAAgB;AACzC,gCAAgC;AAChC,cAAc;AACd,iBAAiB;AACjB;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;;;;;;;ACjCA,eAAe,mBAAO,CAAC,MAAc;AACrC;AACA;AACA;AACA;;;;;;;;ACJA,UAAU,mBAAO,CAAC,MAAQ;AAC1B,gBAAgB,mBAAO,CAAC,MAAe;AACvC,mBAAmB,mBAAO,CAAC,MAAmB;AAC9C,eAAe,mBAAO,CAAC,MAAe;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AChBA,sBAAsB;AACtB,eAAe,mBAAO,CAAC,MAAc;AACrC,cAAc,mBAAO,CAAC,MAAY;;AAElC;AACA;AACA;AACA;;;;;;;;ACPA;AACA;AACA;;;;;;;;ACFA;AACA,UAAU;AACV;;;;;;;;ACFA;AACA;AACA;AACA;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;ACHA;AACa;AACb,cAAc,mBAAO,CAAC,MAAW;AACjC,eAAe,mBAAO,CAAC,MAAc;AACrC,cAAc,mBAAO,CAAC,MAAmB;AACzC;AACA;;AAEA,gCAAgC,mBAAO,CAAC,MAAoB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACjBD;;AAEA;;AAEA;AACA;AACA,wDAAwD;;AAExD;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,mBAAmB;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;ACnCD;AACA,cAAc,mBAAO,CAAC,MAAW;;AAEjC,0CAA0C,SAAS,mBAAO,CAAC,MAAkB,GAAG;;;;;;;;ACHhF,iBAAiB,mBAAO,CAAC,MAAW;;;;;;;;ACApC,eAAe,mBAAO,CAAC,MAAW;AAClC;;;;;;;;;;;;;ACDA;;AAEA;AACA,MAAM,IAAuC;AAC7C,IAAI,mBAAO,CAAC,MAAyB;AACrC;;AAEA,MAAM,eAAC;AACP,OAAO,eAAC,sCAAsC,eAAC,GAAG,eAAC;AACnD,IAAI,qBAAuB,GAAG,eAAC;AAC/B;AACA;;AAEA;AACe,sDAAI;;;;;;;;;;;;;;;;;;ACdJ;AACf;AACA,C;;ACFe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C,+BAA+B;AAC5E;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,C;;ACzBe;AACf;;AAEA,wCAAwC,SAAS;AACjD;AACA;;AAEA;AACA,C;;ACRkD;AACnC;AACf;AACA,oCAAoC,iBAAgB;AACpD;AACA;AACA;AACA,sFAAsF,iBAAgB;AACtG,C;;ACRe;AACf;AACA,C;;ACF8C;AACY;AACY;AACtB;AACjC;AACf,SAAS,eAAc,SAAS,qBAAoB,YAAY,2BAA0B,YAAY,gBAAe;AACrH,C;;;;;;;;ACNkD;AACnC;AACf,iCAAiC,iBAAgB;AACjD,C;;ACHe;AACf;AACA,C;;ACFe;AACf;AACA,C;;ACFoD;AACJ;AACsB;AAClB;AACrC;AACf,SAAS,kBAAiB,SAAS,gBAAe,SAAS,2BAA0B,SAAS,kBAAiB;AAC/G,C;;;;;;;;;;;;;;;;;;ACNA;AACA;;AAEA,SAASI,cAAT,CAAwBC,MAAxB,EAAgCC,QAAhC,EAA0CC,KAA1C,EAAiD;AAC/C,MAAIA,KAAK,KAAKC,SAAd,EAAyB;AACvB,WAAOH,MAAP;AACD;;AACDA,QAAM,GAAGA,MAAM,IAAI,EAAnB;AACAA,QAAM,CAACC,QAAD,CAAN,GAAmBC,KAAnB;AACA,SAAOF,MAAP;AACD;;AAED,SAASI,cAAT,CAAwBC,MAAxB,EAAgCC,OAAhC,EAAyC;AACvC,SAAOD,MAAM,CAACE,GAAP,CAAW,UAAAC,GAAG;AAAA,WAAIA,GAAG,CAACC,GAAR;AAAA,GAAd,EAA2BC,OAA3B,CAAmCJ,OAAnC,CAAP;AACD;;AAED,SAASK,eAAT,CAAwBC,KAAxB,EAA+BhB,QAA/B,EAAyCiB,YAAzC,EAAuDC,YAAvD,EAAqE;AACnE,MAAI,CAACF,KAAL,EAAY;AACV,WAAO,EAAP;AACD;;AAED,MAAMG,YAAY,GAAGH,KAAK,CAACL,GAAN,CAAU,UAAAC,GAAG;AAAA,WAAIA,GAAG,CAACC,GAAR;AAAA,GAAb,CAArB;AACA,MAAMO,WAAW,GAAGpB,QAAQ,CAACqB,MAAT,GAAkBH,YAAtC;;AACA,MAAMI,UAAU,GAAG,mBAAItB,QAAJ,EAAcW,GAAd,CAAkB,UAACC,GAAD,EAAMW,GAAN;AAAA,WACnCA,GAAG,IAAIH,WAAP,GAAqBD,YAAY,CAACE,MAAlC,GAA2CF,YAAY,CAACL,OAAb,CAAqBF,GAArB,CADR;AAAA,GAAlB,CAAnB;;AAGA,SAAOK,YAAY,GAAGK,UAAU,CAACE,MAAX,CAAkB,UAAAC,GAAG;AAAA,WAAIA,GAAG,KAAK,CAAC,CAAb;AAAA,GAArB,CAAH,GAA0CH,UAA7D;AACD;;AAED,SAASI,IAAT,CAAcC,OAAd,EAAuBC,OAAvB,EAAgC;AAAA;;AAC9B,OAAKC,SAAL,CAAe;AAAA,WAAM,KAAI,CAACC,KAAL,CAAWH,OAAO,CAACI,WAAR,EAAX,EAAkCH,OAAlC,CAAN;AAAA,GAAf;AACD;;AAED,SAASI,eAAT,CAAyBL,OAAzB,EAAkC;AAAA;;AAChC,SAAO,UAAAC,OAAO,EAAI;AAChB,QAAI,MAAI,CAACK,QAAL,KAAkB,IAAtB,EAA4B;AAC1B,YAAI,CAAC,WAAWN,OAAZ,CAAJ,CAAyBC,OAAzB;AACD;;AACDF,QAAI,CAACQ,IAAL,CAAU,MAAV,EAAgBP,OAAhB,EAAyBC,OAAzB;AACD,GALD;AAMD;;AAED,SAASO,gBAAT,CAA0BC,IAA1B,EAAgC;AAC9B,SAAO,CAAC,kBAAD,EAAqB,iBAArB,EAAwCC,QAAxC,CAAiDD,IAAjD,CAAP;AACD;;AAED,SAASnB,yBAAT,CAAsBD,KAAtB,EAA6B;AAC3B,MAAI,CAACA,KAAD,IAAUA,KAAK,CAACK,MAAN,KAAiB,CAA/B,EAAkC;AAChC,WAAO,KAAP;AACD;;AAH0B,8BAIIL,KAJJ;AAAA,MAIlBsB,gBAJkB,aAIlBA,gBAJkB;;AAK3B,MAAI,CAACA,gBAAL,EAAuB;AACrB,WAAO,KAAP;AACD;;AACD,SAAOH,gBAAgB,CAACG,gBAAgB,CAACC,GAAlB,CAAvB;AACD;;AAED,SAASC,OAAT,CAAiBC,IAAjB,EAAuBC,UAAvB,EAAmCC,GAAnC,EAAwC;AACtC,SAAOF,IAAI,CAACE,GAAD,CAAJ,KAAcD,UAAU,CAACC,GAAD,CAAV,GAAkBD,UAAU,CAACC,GAAD,CAAV,EAAlB,GAAsCpC,SAApD,CAAP;AACD;;AAED,SAASqC,yBAAT,CAAmC5C,QAAnC,EAA6CyC,IAA7C,EAAmDC,UAAnD,EAA+D;AAC7D,MAAIG,YAAY,GAAG,CAAnB;AACA,MAAI3B,YAAY,GAAG,CAAnB;AACA,MAAM4B,MAAM,GAAGN,OAAO,CAACC,IAAD,EAAOC,UAAP,EAAmB,QAAnB,CAAtB;;AACA,MAAII,MAAJ,EAAY;AACVD,gBAAY,GAAGC,MAAM,CAACzB,MAAtB;AACArB,YAAQ,GAAGA,QAAQ,gCAAO8C,MAAP,sBAAkB9C,QAAlB,wBAAkC8C,MAAlC,CAAnB;AACD;;AACD,MAAMC,MAAM,GAAGP,OAAO,CAACC,IAAD,EAAOC,UAAP,EAAmB,QAAnB,CAAtB;;AACA,MAAIK,MAAJ,EAAY;AACV7B,gBAAY,GAAG6B,MAAM,CAAC1B,MAAtB;AACArB,YAAQ,GAAGA,QAAQ,gCAAOA,QAAP,sBAAoB+C,MAApB,wBAAkCA,MAAlC,CAAnB;AACD;;AACD,SAAO;AAAE/C,YAAQ,EAARA,QAAF;AAAY6C,gBAAY,EAAZA,YAAZ;AAA0B3B,gBAAY,EAAZA;AAA1B,GAAP;AACD;;AAED,SAAS8B,sBAAT,CAAgCC,MAAhC,EAAwCC,aAAxC,EAAuD;AACrD,MAAIC,UAAU,GAAG,IAAjB;;AACA,MAAMC,MAAM,GAAG,SAATA,MAAS,CAAChB,IAAD,EAAO9B,KAAP,EAAiB;AAC9B6C,cAAU,GAAGhD,cAAc,CAACgD,UAAD,EAAaf,IAAb,EAAmB9B,KAAnB,CAA3B;AACD,GAFD;;AAGA,MAAM+C,KAAK,GAAGxE,MAAM,CAACyE,IAAP,CAAYL,MAAZ,EACXzB,MADW,CACJ,UAAAmB,GAAG;AAAA,WAAIA,GAAG,KAAK,IAAR,IAAgBA,GAAG,CAACY,UAAJ,CAAe,OAAf,CAApB;AAAA,GADC,EAEXC,MAFW,CAEJ,UAACC,GAAD,EAAMd,GAAN,EAAc;AACpBc,OAAG,CAACd,GAAD,CAAH,GAAWM,MAAM,CAACN,GAAD,CAAjB;AACA,WAAOc,GAAP;AACD,GALW,EAKT,EALS,CAAd;AAMAL,QAAM,CAAC,OAAD,EAAUC,KAAV,CAAN;;AAEA,MAAI,CAACH,aAAL,EAAoB;AAClB,WAAOC,UAAP;AACD;;AAfoD,MAgB7CO,EAhB6C,GAgBJR,aAhBI,CAgB7CQ,EAhB6C;AAAA,MAgBzCC,KAhByC,GAgBJT,aAhBI,CAgBzCS,KAhByC;AAAA,MAgB3BC,kBAhB2B,GAgBJV,aAhBI,CAgBlCG,KAhBkC;AAiBrDD,QAAM,CAAC,IAAD,EAAOM,EAAP,CAAN;AACAN,QAAM,CAAC,OAAD,EAAUO,KAAV,CAAN;AACA9E,QAAM,CAACgF,MAAP,CAAcV,UAAU,CAACE,KAAzB,EAAgCO,kBAAhC;AACA,SAAOT,UAAP;AACD;;AAED,IAAMW,cAAc,GAAG,CAAC,OAAD,EAAU,KAAV,EAAiB,QAAjB,EAA2B,QAA3B,EAAqC,KAArC,CAAvB;AACA,IAAMC,YAAY,GAAG,CAAC,QAAD,EAAW,UAAX,EAAuB,MAAvB,EAA+B,QAA/B,EAAyC,OAAzC,CAArB;AACA,IAAMC,kBAAkB,GAAG,CAAC,MAAD,SAAYF,cAAZ,EAA+BC,YAA/B,EAA6CpD,GAA7C,CACzB,UAAAsD,GAAG;AAAA,SAAI,OAAOA,GAAX;AAAA,CADsB,CAA3B;AAGA,IAAIC,eAAe,GAAG,IAAtB;AAEA,IAAMP,KAAK,GAAG;AACZQ,SAAO,EAAEtF,MADG;AAEZuF,MAAI,EAAE;AACJC,QAAI,EAAEC,KADF;AAEJC,YAAQ,EAAE,KAFN;AAGJC,WAAO,EAAE;AAHL,GAFM;AAOZlE,OAAK,EAAE;AACL+D,QAAI,EAAEC,KADD;AAELC,YAAQ,EAAE,KAFL;AAGLC,WAAO,EAAE;AAHJ,GAPK;AAYZC,oBAAkB,EAAE;AAClBJ,QAAI,EAAEK,OADY;AAElBF,WAAO,EAAE;AAFS,GAZR;AAgBZG,OAAK,EAAE;AACLN,QAAI,EAAEO,QADD;AAELJ,WAAO,EAAE,kBAAAK,QAAQ,EAAI;AACnB,aAAOA,QAAP;AACD;AAJI,GAhBK;AAsBZnE,SAAO,EAAE;AACP2D,QAAI,EAAES,MADC;AAEPN,WAAO,EAAE;AAFF,GAtBG;AA0BZjC,KAAG,EAAE;AACH8B,QAAI,EAAES,MADH;AAEHN,WAAO,EAAE;AAFN,GA1BO;AA8BZO,MAAI,EAAE;AACJV,QAAI,EAAEO,QADF;AAEJJ,WAAO,EAAE;AAFL,GA9BM;AAkCZtB,eAAa,EAAE;AACbmB,QAAI,EAAExF,MADO;AAEb0F,YAAQ,EAAE,KAFG;AAGbC,WAAO,EAAE;AAHI;AAlCH,CAAd;AAyCA,IAAMQ,kBAAkB,GAAG;AACzB5C,MAAI,EAAE,WADmB;AAGzB6C,cAAY,EAAE,KAHW;AAKzBtB,OAAK,EAALA,KALyB;AAOzBuB,MAPyB,kBAOlB;AACL,WAAO;AACLC,oBAAc,EAAE,KADX;AAELC,iCAA2B,EAAE;AAFxB,KAAP;AAID,GAZwB;AAczBC,QAdyB,kBAclBC,CAdkB,EAcf;AACR,QAAMtE,KAAK,GAAG,KAAKuE,MAAL,CAAYf,OAA1B;AACA,SAAKW,cAAL,GAAsBlE,yBAAY,CAACD,KAAD,CAAlC;;AAFQ,gCAGyC4B,yBAAyB,CACxE5B,KADwE,EAExE,KAAKuE,MAFmE,EAGxE,KAAKC,YAHmE,CAHlE;AAAA,QAGAxF,QAHA,yBAGAA,QAHA;AAAA,QAGU6C,YAHV,yBAGUA,YAHV;AAAA,QAGwB3B,YAHxB,yBAGwBA,YAHxB;;AAQR,SAAK2B,YAAL,GAAoBA,YAApB;AACA,SAAK3B,YAAL,GAAoBA,YAApB;AACA,QAAMiC,UAAU,GAAGH,sBAAsB,CAAC,KAAKC,MAAN,EAAc,KAAKC,aAAnB,CAAzC;AACA,WAAOoC,CAAC,CAAC,KAAKG,MAAL,EAAD,EAAgBtC,UAAhB,EAA4BnD,QAA5B,CAAR;AACD,GA1BwB;AA4BzB0F,SA5ByB,qBA4Bf;AACR,QAAI,KAAKtB,IAAL,KAAc,IAAd,IAAsB,KAAK9D,KAAL,KAAe,IAAzC,EAA+C;AAC7C9B,+BAAO,CAACmH,KAAR,CACE,yEADF;AAGD;;AAED,QAAI,KAAKjF,OAAL,KAAiB,KAArB,EAA4B;AAC1BlC,+BAAO,CAACoH,IAAR,CACE,8JADF;AAGD;;AAED,QAAI,KAAKzB,OAAL,KAAiB5D,SAArB,EAAgC;AAC9B/B,+BAAO,CAACoH,IAAR,CACE,qMADF;AAGD;AACF,GA9CwB;AAgDzBC,SAhDyB,qBAgDf;AAAA;;AACR,SAAKT,2BAAL,GACE,KAAKK,MAAL,GAAc1D,WAAd,OAAgC,KAAK+D,GAAL,CAASC,QAAT,CAAkBhE,WAAlB,EAAhC,IACA,CAAC,KAAKiE,eAAL,EAFH;;AAGA,QAAI,KAAKZ,2BAAL,IAAoC,KAAKD,cAA7C,EAA6D;AAC3D,YAAM,IAAIc,KAAJ,qIACyH,KAAKR,MAAL,EADzH,EAAN;AAGD;;AACD,QAAMS,YAAY,GAAG,EAArB;AACApC,kBAAc,CAACqC,OAAf,CAAuB,UAAAvF,GAAG,EAAI;AAC5BsF,kBAAY,CAAC,OAAOtF,GAAR,CAAZ,GAA2BoB,eAAe,CAACE,IAAhB,CAAqB,MAArB,EAA2BtB,GAA3B,CAA3B;AACD,KAFD;AAIAmD,gBAAY,CAACoC,OAAb,CAAqB,UAAAvF,GAAG,EAAI;AAC1BsF,kBAAY,CAAC,OAAOtF,GAAR,CAAZ,GAA2Bc,IAAI,CAAC0E,IAAL,CAAU,MAAV,EAAgBxF,GAAhB,CAA3B;AACD,KAFD;AAIA,QAAMuC,UAAU,GAAGtE,MAAM,CAACyE,IAAP,CAAY,KAAKL,MAAjB,EAAyBO,MAAzB,CAAgC,UAACC,GAAD,EAAMd,GAAN,EAAc;AAC/Dc,SAAG,CAACtE,kCAAQ,CAACwD,GAAD,CAAT,CAAH,GAAqB,MAAI,CAACM,MAAL,CAAYN,GAAZ,CAArB;AACA,aAAOc,GAAP;AACD,KAHkB,EAGhB,EAHgB,CAAnB;AAKA,QAAMU,OAAO,GAAGtF,MAAM,CAACgF,MAAP,CAAc,EAAd,EAAkB,KAAKM,OAAvB,EAAgChB,UAAhC,EAA4C+C,YAA5C,EAA0D;AACxEG,YAAM,EAAE,gBAACpC,GAAD,EAAMqC,aAAN,EAAwB;AAC9B,eAAO,MAAI,CAACC,UAAL,CAAgBtC,GAAhB,EAAqBqC,aAArB,CAAP;AACD;AAHuE,KAA1D,CAAhB;AAKA,MAAE,eAAenC,OAAjB,MAA8BA,OAAO,CAACqC,SAAR,GAAoB,IAAlD;AACA,SAAKC,SAAL,GAAiB,IAAIC,wFAAJ,CAAa,KAAKC,aAAlB,EAAiCxC,OAAjC,CAAjB;AACA,SAAKpD,cAAL;AACD,GA/EwB;AAiFzB6F,eAjFyB,2BAiFT;AACd,QAAI,KAAKH,SAAL,KAAmBlG,SAAvB,EAAkC,KAAKkG,SAAL,CAAeI,OAAf;AACnC,GAnFwB;AAqFzBC,UAAQ,EAAE;AACRH,iBADQ,2BACQ;AACd,aAAO,KAAKxB,cAAL,GAAsB,KAAKW,GAAL,CAAS9F,QAAT,CAAkB,CAAlB,CAAtB,GAA6C,KAAK8F,GAAzD;AACD,KAHO;AAKR7D,YALQ,sBAKG;AACT,aAAO,KAAKmC,IAAL,GAAY,KAAKA,IAAjB,GAAwB,KAAK9D,KAApC;AACD;AAPO,GArFe;AA+FzByG,OAAK,EAAE;AACL5C,WAAO,EAAE;AACP6C,aADO,mBACCC,cADD,EACiB;AACtB,aAAKC,aAAL,CAAmBD,cAAnB;AACD,OAHM;AAIPE,UAAI,EAAE;AAJC,KADJ;AAQLlE,UAAM,EAAE;AACN+D,aADM,mBACEC,cADF,EACkB;AACtB,aAAKC,aAAL,CAAmBD,cAAnB;AACD,OAHK;AAINE,UAAI,EAAE;AAJA,KARH;AAeLlF,YAfK,sBAeM;AACT,WAAKlB,cAAL;AACD;AAjBI,GA/FkB;AAmHzBqG,SAAO,EAAE;AACPpB,mBADO,6BACW;AAAA,UACRqB,SADQ,GACM,KAAKC,MADX,CACRD,SADQ;AAEhB,aAAOA,SAAS,IAAIA,SAAS,CAACE,UAA9B;AACD,KAJM;AAMP9B,UANO,oBAME;AACP,aAAO,KAAKlD,GAAL,IAAY,KAAK7B,OAAxB;AACD,KARM;AAUPwG,iBAVO,yBAUOD,cAVP,EAUuB;AAC5B,WAAK,IAAIO,QAAT,IAAqBP,cAArB,EAAqC;AACnC,YAAM3G,KAAK,GAAGnB,kCAAQ,CAACqI,QAAD,CAAtB;;AACA,YAAIxD,kBAAkB,CAAClD,OAAnB,CAA2BR,KAA3B,MAAsC,CAAC,CAA3C,EAA8C;AAC5C,eAAKmG,SAAL,CAAegB,MAAf,CAAsBnH,KAAtB,EAA6B2G,cAAc,CAACO,QAAD,CAA3C;AACD;AACF;AACF,KAjBM;AAmBPE,oBAnBO,8BAmBY;AACjB,UAAI,KAAKtC,2BAAT,EAAsC;AACpC,eAAO,KAAKuC,SAAL,CAAe,CAAf,EAAkBpC,MAAlB,CAAyBf,OAAhC;AACD;;AACD,UAAMoD,QAAQ,GAAG,KAAKrC,MAAL,CAAYf,OAA7B;AACA,aAAO,KAAKW,cAAL,GAAsByC,QAAQ,CAAC,CAAD,CAAR,CAAYC,KAAZ,CAAkBtC,MAAlB,CAAyBf,OAA/C,GAAyDoD,QAAhE;AACD,KAzBM;AA2BP7G,kBA3BO,4BA2BU;AAAA;;AACf,WAAKc,SAAL,CAAe,YAAM;AACnB,cAAI,CAACiG,cAAL,GAAsB/G,eAAc,CAClC,MAAI,CAAC2G,gBAAL,EADkC,EAElC,MAAI,CAACf,aAAL,CAAmB3G,QAFe,EAGlC,MAAI,CAACmF,cAH6B,EAIlC,MAAI,CAACjE,YAJ6B,CAApC;AAMD,OAPD;AAQD,KApCM;AAsCP6G,mBAtCO,2BAsCSC,OAtCT,EAsCkB;AACvB,UAAMC,KAAK,GAAGzH,cAAc,CAAC,KAAKkH,gBAAL,MAA2B,EAA5B,EAAgCM,OAAhC,CAA5B;;AACA,UAAIC,KAAK,KAAK,CAAC,CAAf,EAAkB;AAChB;AACA;AACA,eAAO,IAAP;AACD;;AACD,UAAMvH,OAAO,GAAG,KAAKuB,QAAL,CAAcgG,KAAd,CAAhB;AACA,aAAO;AAAEA,aAAK,EAALA,KAAF;AAASvH,eAAO,EAAPA;AAAT,OAAP;AACD,KA/CM;AAiDPwH,4CAjDO,0DAiDoD;AAAA,UAAPC,GAAO,QAAhBC,OAAgB;;AACzD,UACE,CAACD,GAAD,IACA,CAACA,GAAG,CAACE,QADL,IAEA,CAAClG,gBAAgB,CAACgG,GAAG,CAACE,QAAJ,CAAaC,aAAd,CAHnB,EAIE;AACA,YACE,EAAE,cAAcH,GAAhB,KACAA,GAAG,CAACR,SAAJ,CAActG,MAAd,KAAyB,CADzB,IAEA,cAAc8G,GAAG,CAACR,SAAJ,CAAc,CAAd,CAHhB,EAKE,OAAOQ,GAAG,CAACR,SAAJ,CAAc,CAAd,CAAP;AAEF,eAAOQ,GAAP;AACD;;AACD,aAAOA,GAAG,CAACI,OAAX;AACD,KAjEM;AAmEPC,eAnEO,uBAmEKvE,GAnEL,EAmEU;AAAA;;AACf,WAAKpC,SAAL,CAAe,YAAM;AACnB,cAAI,CAACC,KAAL,CAAW,QAAX,EAAqBmC,GAArB;AACD,OAFD;AAGD,KAvEM;AAyEPwE,aAzEO,qBAyEGC,MAzEH,EAyEW;AAChB,UAAI,KAAKtE,IAAT,EAAe;AACbsE,cAAM,CAAC,KAAKtE,IAAN,CAAN;AACA;AACD;;AACD,UAAMuE,OAAO,GAAG,mBAAI,KAAKrI,KAAZ,CAAb;;AACAoI,YAAM,CAACC,OAAD,CAAN;AACA,WAAK7G,KAAL,CAAW,OAAX,EAAoB6G,OAApB;AACD,KAjFM;AAmFPC,cAnFO,wBAmFM;AAAA;;AACX,UAAMA,UAAU,GAAG,SAAbA,UAAa,CAAAxE,IAAI;AAAA,eAAIA,IAAI,CAACyE,MAAL,OAAAzE,IAAI,qBAAW0E,UAAX,EAAR;AAAA,OAAvB;;AACA,WAAKL,SAAL,CAAeG,UAAf;AACD,KAtFM;AAwFPG,kBAxFO,0BAwFQC,QAxFR,EAwFkBC,QAxFlB,EAwF4B;AACjC,UAAMF,cAAc,GAAG,SAAjBA,cAAiB,CAAA3E,IAAI;AAAA,eACzBA,IAAI,CAACyE,MAAL,CAAYI,QAAZ,EAAsB,CAAtB,EAAyB7E,IAAI,CAACyE,MAAL,CAAYG,QAAZ,EAAsB,CAAtB,EAAyB,CAAzB,CAAzB,CADyB;AAAA,OAA3B;;AAEA,WAAKP,SAAL,CAAeM,cAAf;AACD,KA5FM;AA8FPG,kCA9FO,iDA8FyC;AAAA,UAAfC,EAAe,SAAfA,EAAe;AAAA,UAAXC,OAAW,SAAXA,OAAW;AAC9C,UAAMC,SAAS,GAAG,KAAKnB,wCAAL,CAA8CiB,EAA9C,CAAlB;;AACA,UAAI,CAACE,SAAL,EAAgB;AACd,eAAO;AAAEA,mBAAS,EAATA;AAAF,SAAP;AACD;;AACD,UAAMjF,IAAI,GAAGiF,SAAS,CAACpH,QAAvB;AACA,UAAMqH,OAAO,GAAG;AAAElF,YAAI,EAAJA,IAAF;AAAQiF,iBAAS,EAATA;AAAR,OAAhB;;AACA,UAAIF,EAAE,KAAKC,OAAP,IAAkBhF,IAAlB,IAA0BiF,SAAS,CAACtB,eAAxC,EAAyD;AACvD,YAAMwB,WAAW,GAAGF,SAAS,CAACtB,eAAV,CAA0BqB,OAA1B,CAApB;;AACA,YAAIG,WAAJ,EAAiB;AACf,iBAAO1K,MAAM,CAACgF,MAAP,CAAc0F,WAAd,EAA2BD,OAA3B,CAAP;AACD;AACF;;AACD,aAAOA,OAAP;AACD,KA5GM;AA8GPE,cA9GO,sBA8GIC,QA9GJ,EA8Gc;AACnB,UAAMC,OAAO,GAAG,KAAK5B,cAArB;AACA,UAAM6B,aAAa,GAAGD,OAAO,CAACrI,MAA9B;AACA,aAAOoI,QAAQ,GAAGE,aAAa,GAAG,CAA3B,GAA+BA,aAA/B,GAA+CD,OAAO,CAACD,QAAD,CAA7D;AACD,KAlHM;AAoHPG,gBApHO,0BAoHQ;AACb,aAAO,KAAKrE,MAAL,CAAYf,OAAZ,CAAoB,CAApB,EAAuBqF,iBAA9B;AACD,KAtHM;AAwHPC,uBAxHO,+BAwHa7B,KAxHb,EAwHoB;AACzB,UAAI,CAAC,KAAKxD,kBAAN,IAA4B,CAAC,KAAKU,cAAtC,EAAsD;AACpD;AACD;;AACD,UAAI4E,KAAK,GAAG,KAAKrC,gBAAL,EAAZ;AACAqC,WAAK,CAAC9B,KAAD,CAAL,CAAa/C,IAAb,GAAoB,IAApB;AACA,UAAM8E,mBAAmB,GAAG,KAAKJ,YAAL,EAA5B;AACAI,yBAAmB,CAAChK,QAApB,GAA+B,EAA/B;AACAgK,yBAAmB,CAACC,IAApB,GAA2B1J,SAA3B;AACD,KAjIM;AAmIP2J,eAnIO,uBAmIKjG,GAnIL,EAmIU;AACf,WAAKqF,OAAL,GAAe,KAAKvB,eAAL,CAAqB9D,GAAG,CAACkG,IAAzB,CAAf;AACAlG,SAAG,CAACkG,IAAJ,CAASC,eAAT,GAA2B,KAAKzF,KAAL,CAAW,KAAK2E,OAAL,CAAa5I,OAAxB,CAA3B;AACAwD,qBAAe,GAAGD,GAAG,CAACkG,IAAtB;AACD,KAvIM;AAyIPE,aAzIO,qBAyIGpG,GAzIH,EAyIQ;AACb,UAAMvD,OAAO,GAAGuD,GAAG,CAACkG,IAAJ,CAASC,eAAzB;;AACA,UAAI1J,OAAO,KAAKH,SAAhB,EAA2B;AACzB;AACD;;AACDf,0CAAU,CAACyE,GAAG,CAACkG,IAAL,CAAV;AACA,UAAMlB,QAAQ,GAAG,KAAKO,UAAL,CAAgBvF,GAAG,CAACgF,QAApB,CAAjB;AACA,WAAKL,UAAL,CAAgBK,QAAhB,EAA0B,CAA1B,EAA6BvI,OAA7B;AACA,WAAKK,cAAL;AACA,UAAMuJ,KAAK,GAAG;AAAE5J,eAAO,EAAPA,OAAF;AAAWuI,gBAAQ,EAARA;AAAX,OAAd;AACA,WAAKT,WAAL,CAAiB;AAAE8B,aAAK,EAALA;AAAF,OAAjB;AACD,KApJM;AAsJPC,gBAtJO,wBAsJMtG,GAtJN,EAsJW;AAChBrE,4CAAY,CAAC,KAAK+G,aAAN,EAAqB1C,GAAG,CAACkG,IAAzB,EAA+BlG,GAAG,CAAC+E,QAAnC,CAAZ;;AACA,UAAI/E,GAAG,CAACuG,QAAJ,KAAiB,OAArB,EAA8B;AAC5BhL,4CAAU,CAACyE,GAAG,CAACU,KAAL,CAAV;AACA;AACD;;AACD,UAAMqE,QAAQ,GAAG,KAAKM,OAAL,CAAarB,KAA9B;AACA,WAAKW,UAAL,CAAgBI,QAAhB,EAA0B,CAA1B;AACA,UAAMyB,OAAO,GAAG;AAAE/J,eAAO,EAAE,KAAK4I,OAAL,CAAa5I,OAAxB;AAAiCsI,gBAAQ,EAARA;AAAjC,OAAhB;AACA,WAAKc,mBAAL,CAAyBd,QAAzB;AACA,WAAKR,WAAL,CAAiB;AAAEiC,eAAO,EAAPA;AAAF,OAAjB;AACD,KAjKM;AAmKPC,gBAnKO,wBAmKMzG,GAnKN,EAmKW;AAChBzE,0CAAU,CAACyE,GAAG,CAACkG,IAAL,CAAV;AACAvK,4CAAY,CAACqE,GAAG,CAAC0G,IAAL,EAAW1G,GAAG,CAACkG,IAAf,EAAqBlG,GAAG,CAAC+E,QAAzB,CAAZ;AACA,UAAMA,QAAQ,GAAG,KAAKM,OAAL,CAAarB,KAA9B;AACA,UAAMgB,QAAQ,GAAG,KAAKO,UAAL,CAAgBvF,GAAG,CAACgF,QAApB,CAAjB;AACA,WAAKF,cAAL,CAAoBC,QAApB,EAA8BC,QAA9B;AACA,UAAM2B,KAAK,GAAG;AAAElK,eAAO,EAAE,KAAK4I,OAAL,CAAa5I,OAAxB;AAAiCsI,gBAAQ,EAARA,QAAjC;AAA2CC,gBAAQ,EAARA;AAA3C,OAAd;AACA,WAAKT,WAAL,CAAiB;AAAEoC,aAAK,EAALA;AAAF,OAAjB;AACD,KA3KM;AA6KPC,kBA7KO,0BA6KQ5G,GA7KR,EA6Ka6G,YA7Kb,EA6K2B;AAChC7G,SAAG,CAAC8G,cAAJ,CAAmBD,YAAnB,MACG7G,GAAG,CAAC6G,YAAD,CAAH,IAAqB,KAAKjI,YAD7B;AAED,KAhLM;AAkLPmI,sBAlLO,8BAkLYC,cAlLZ,EAkL4BhH,GAlL5B,EAkLiC;AACtC,UAAI,CAACgH,cAAc,CAACvK,OAApB,EAA6B;AAC3B,eAAO,CAAP;AACD;;AACD,UAAMwK,WAAW,GAAG,mBAAIjH,GAAG,CAACkF,EAAJ,CAAOnJ,QAAX,EAAqBwB,MAArB,CAClB,UAAA2J,EAAE;AAAA,eAAIA,EAAE,CAACC,KAAH,CAAS,SAAT,MAAwB,MAA5B;AAAA,OADgB,CAApB;;AAGA,UAAMC,eAAe,GAAGH,WAAW,CAACpK,OAAZ,CAAoBmD,GAAG,CAACmF,OAAxB,CAAxB;AACA,UAAMkC,YAAY,GAAGL,cAAc,CAAC5B,SAAf,CAAyBG,UAAzB,CAAoC6B,eAApC,CAArB;AACA,UAAME,aAAa,GAAGL,WAAW,CAACpK,OAAZ,CAAoBoD,eAApB,MAAyC,CAAC,CAAhE;AACA,aAAOqH,aAAa,IAAI,CAACtH,GAAG,CAACuH,eAAtB,GACHF,YADG,GAEHA,YAAY,GAAG,CAFnB;AAGD,KA/LM;AAiMP/E,cAjMO,sBAiMItC,GAjMJ,EAiMSqC,aAjMT,EAiMwB;AAC7B,UAAMD,MAAM,GAAG,KAAKtB,IAApB;;AACA,UAAI,CAACsB,MAAD,IAAW,CAAC,KAAKpE,QAArB,EAA+B;AAC7B,eAAO,IAAP;AACD;;AAED,UAAMgJ,cAAc,GAAG,KAAK/B,8BAAL,CAAoCjF,GAApC,CAAvB;AACA,UAAMwH,cAAc,GAAG,KAAKnC,OAA5B;AACA,UAAMoC,WAAW,GAAG,KAAKV,kBAAL,CAAwBC,cAAxB,EAAwChH,GAAxC,CAApB;AACApF,YAAM,CAACgF,MAAP,CAAc4H,cAAd,EAA8B;AAAEC,mBAAW,EAAXA;AAAF,OAA9B;AACA,UAAMC,OAAO,GAAG9M,MAAM,CAACgF,MAAP,CAAc,EAAd,EAAkBI,GAAlB,EAAuB;AACrCgH,sBAAc,EAAdA,cADqC;AAErCQ,sBAAc,EAAdA;AAFqC,OAAvB,CAAhB;AAIA,aAAOpF,MAAM,CAACsF,OAAD,EAAUrF,aAAV,CAAb;AACD,KAhNM;AAkNPsF,aAlNO,uBAkNK;AACV,WAAK7K,cAAL;AACAmD,qBAAe,GAAG,IAAlB;AACD;AArNM;AAnHgB,CAA3B;;AA4UA,IAAI,OAAO3F,MAAP,KAAkB,WAAlB,IAAiC,SAASA,MAA9C,EAAsD;AACpDA,QAAM,CAACsN,GAAP,CAAWxC,SAAX,CAAqB,WAArB,EAAkCrE,kBAAlC;AACD;;AAEcA,mEAAf,E;;ACpewB;AACA;AACT,2FAAG;AACI","file":"vuedraggable.umd.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"sortablejs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"sortablejs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vuedraggable\"] = factory(require(\"sortablejs\"));\n\telse\n\t\troot[\"vuedraggable\"] = factory(root[\"Sortable\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE_a352__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","module.exports = false;\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n","exports.f = {}.propertyIsEnumerable;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: 'Â© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = {};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = __WEBPACK_EXTERNAL_MODULE_a352__;","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return $replace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","function getConsole() {\r\n  if (typeof window !== \"undefined\") {\r\n    return window.console;\r\n  }\r\n  return global.console;\r\n}\r\nconst console = getConsole();\r\n\r\nfunction cached(fn) {\r\n  const cache = Object.create(null);\r\n  return function cachedFn(str) {\r\n    const hit = cache[str];\r\n    return hit || (cache[str] = fn(str));\r\n  };\r\n}\r\n\r\nconst regex = /-(\\w)/g;\r\nconst camelize = cached(str =>\r\n  str.replace(regex, (_, c) => (c ? c.toUpperCase() : \"\"))\r\n);\r\n\r\nfunction removeNode(node) {\r\n  if (node.parentElement !== null) {\r\n    node.parentElement.removeChild(node);\r\n  }\r\n}\r\n\r\nfunction insertNodeAt(fatherNode, node, position) {\r\n  const refNode =\r\n    position === 0\r\n      ? fatherNode.children[0]\r\n      : fatherNode.children[position - 1].nextSibling;\r\n  fatherNode.insertBefore(node, refNode);\r\n}\r\n\r\nexport { insertNodeAt, camelize, console, removeNode };\r\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","// document.currentScript polyfill by Adam Miller\n\n// MIT license\n\n(function(document){\n  var currentScript = \"currentScript\",\n      scripts = document.getElementsByTagName('script'); // Live NodeList collection\n\n  // If browser needs currentScript polyfill, add get currentScript() to the document object\n  if (!(currentScript in document)) {\n    Object.defineProperty(document, currentScript, {\n      get: function(){\n\n        // IE 6-10 supports script readyState\n        // IE 10+ support stack trace\n        try { throw new Error(); }\n        catch (err) {\n\n          // Find the second match for the \"at\" string to get file src url from stack.\n          // Specifically works with the format of stack traces in IE.\n          var i, res = ((/.*at [^\\(]*\\((.*):.+:.+\\)$/ig).exec(err.stack) || [false])[1];\n\n          // For all scripts on the page, if src matches or if ready state is interactive, return the script tag\n          for(i in scripts){\n            if(scripts[i].src == res || scripts[i].readyState == \"interactive\"){\n              return scripts[i];\n            }\n          }\n\n          // If no match, return null\n          return null;\n        }\n      }\n    });\n  }\n})(document);\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n  if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n    require('current-script-polyfill')\n  }\n\n  var i\n  if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n    __webpack_public_path__ = i[1] // eslint-disable-line\n  }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","export default function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}","export default function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import Sortable from \"sortablejs\";\r\nimport { insertNodeAt, camelize, console, removeNode } from \"./util/helper\";\r\n\r\nfunction buildAttribute(object, propName, value) {\r\n  if (value === undefined) {\r\n    return object;\r\n  }\r\n  object = object || {};\r\n  object[propName] = value;\r\n  return object;\r\n}\r\n\r\nfunction computeVmIndex(vnodes, element) {\r\n  return vnodes.map(elt => elt.elm).indexOf(element);\r\n}\r\n\r\nfunction computeIndexes(slots, children, isTransition, footerOffset) {\r\n  if (!slots) {\r\n    return [];\r\n  }\r\n\r\n  const elmFromNodes = slots.map(elt => elt.elm);\r\n  const footerIndex = children.length - footerOffset;\r\n  const rawIndexes = [...children].map((elt, idx) =>\r\n    idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt)\r\n  );\r\n  return isTransition ? rawIndexes.filter(ind => ind !== -1) : rawIndexes;\r\n}\r\n\r\nfunction emit(evtName, evtData) {\r\n  this.$nextTick(() => this.$emit(evtName.toLowerCase(), evtData));\r\n}\r\n\r\nfunction delegateAndEmit(evtName) {\r\n  return evtData => {\r\n    if (this.realList !== null) {\r\n      this[\"onDrag\" + evtName](evtData);\r\n    }\r\n    emit.call(this, evtName, evtData);\r\n  };\r\n}\r\n\r\nfunction isTransitionName(name) {\r\n  return [\"transition-group\", \"TransitionGroup\"].includes(name);\r\n}\r\n\r\nfunction isTransition(slots) {\r\n  if (!slots || slots.length !== 1) {\r\n    return false;\r\n  }\r\n  const [{ componentOptions }] = slots;\r\n  if (!componentOptions) {\r\n    return false;\r\n  }\r\n  return isTransitionName(componentOptions.tag);\r\n}\r\n\r\nfunction getSlot(slot, scopedSlot, key) {\r\n  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);\r\n}\r\n\r\nfunction computeChildrenAndOffsets(children, slot, scopedSlot) {\r\n  let headerOffset = 0;\r\n  let footerOffset = 0;\r\n  const header = getSlot(slot, scopedSlot, \"header\");\r\n  if (header) {\r\n    headerOffset = header.length;\r\n    children = children ? [...header, ...children] : [...header];\r\n  }\r\n  const footer = getSlot(slot, scopedSlot, \"footer\");\r\n  if (footer) {\r\n    footerOffset = footer.length;\r\n    children = children ? [...children, ...footer] : [...footer];\r\n  }\r\n  return { children, headerOffset, footerOffset };\r\n}\r\n\r\nfunction getComponentAttributes($attrs, componentData) {\r\n  let attributes = null;\r\n  const update = (name, value) => {\r\n    attributes = buildAttribute(attributes, name, value);\r\n  };\r\n  const attrs = Object.keys($attrs)\r\n    .filter(key => key === \"id\" || key.startsWith(\"data-\"))\r\n    .reduce((res, key) => {\r\n      res[key] = $attrs[key];\r\n      return res;\r\n    }, {});\r\n  update(\"attrs\", attrs);\r\n\r\n  if (!componentData) {\r\n    return attributes;\r\n  }\r\n  const { on, props, attrs: componentDataAttrs } = componentData;\r\n  update(\"on\", on);\r\n  update(\"props\", props);\r\n  Object.assign(attributes.attrs, componentDataAttrs);\r\n  return attributes;\r\n}\r\n\r\nconst eventsListened = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\r\nconst eventsToEmit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\r\nconst readonlyProperties = [\"Move\", ...eventsListened, ...eventsToEmit].map(\r\n  evt => \"on\" + evt\r\n);\r\nvar draggingElement = null;\r\n\r\nconst props = {\r\n  options: Object,\r\n  list: {\r\n    type: Array,\r\n    required: false,\r\n    default: null\r\n  },\r\n  value: {\r\n    type: Array,\r\n    required: false,\r\n    default: null\r\n  },\r\n  noTransitionOnDrag: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  clone: {\r\n    type: Function,\r\n    default: original => {\r\n      return original;\r\n    }\r\n  },\r\n  element: {\r\n    type: String,\r\n    default: \"div\"\r\n  },\r\n  tag: {\r\n    type: String,\r\n    default: null\r\n  },\r\n  move: {\r\n    type: Function,\r\n    default: null\r\n  },\r\n  componentData: {\r\n    type: Object,\r\n    required: false,\r\n    default: null\r\n  }\r\n};\r\n\r\nconst draggableComponent = {\r\n  name: \"draggable\",\r\n\r\n  inheritAttrs: false,\r\n\r\n  props,\r\n\r\n  data() {\r\n    return {\r\n      transitionMode: false,\r\n      noneFunctionalComponentMode: false\r\n    };\r\n  },\r\n\r\n  render(h) {\r\n    const slots = this.$slots.default;\r\n    this.transitionMode = isTransition(slots);\r\n    const { children, headerOffset, footerOffset } = computeChildrenAndOffsets(\r\n      slots,\r\n      this.$slots,\r\n      this.$scopedSlots\r\n    );\r\n    this.headerOffset = headerOffset;\r\n    this.footerOffset = footerOffset;\r\n    const attributes = getComponentAttributes(this.$attrs, this.componentData);\r\n    return h(this.getTag(), attributes, children);\r\n  },\r\n\r\n  created() {\r\n    if (this.list !== null && this.value !== null) {\r\n      console.error(\r\n        \"Value and list props are mutually exclusive! Please set one or another.\"\r\n      );\r\n    }\r\n\r\n    if (this.element !== \"div\") {\r\n      console.warn(\r\n        \"Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props\"\r\n      );\r\n    }\r\n\r\n    if (this.options !== undefined) {\r\n      console.warn(\r\n        \"Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props\"\r\n      );\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.noneFunctionalComponentMode =\r\n      this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() &&\r\n      !this.getIsFunctional();\r\n    if (this.noneFunctionalComponentMode && this.transitionMode) {\r\n      throw new Error(\r\n        `Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ${this.getTag()}`\r\n      );\r\n    }\r\n    const optionsAdded = {};\r\n    eventsListened.forEach(elt => {\r\n      optionsAdded[\"on\" + elt] = delegateAndEmit.call(this, elt);\r\n    });\r\n\r\n    eventsToEmit.forEach(elt => {\r\n      optionsAdded[\"on\" + elt] = emit.bind(this, elt);\r\n    });\r\n\r\n    const attributes = Object.keys(this.$attrs).reduce((res, key) => {\r\n      res[camelize(key)] = this.$attrs[key];\r\n      return res;\r\n    }, {});\r\n\r\n    const options = Object.assign({}, this.options, attributes, optionsAdded, {\r\n      onMove: (evt, originalEvent) => {\r\n        return this.onDragMove(evt, originalEvent);\r\n      }\r\n    });\r\n    !(\"draggable\" in options) && (options.draggable = \">*\");\r\n    this._sortable = new Sortable(this.rootContainer, options);\r\n    this.computeIndexes();\r\n  },\r\n\r\n  beforeDestroy() {\r\n    if (this._sortable !== undefined) this._sortable.destroy();\r\n  },\r\n\r\n  computed: {\r\n    rootContainer() {\r\n      return this.transitionMode ? this.$el.children[0] : this.$el;\r\n    },\r\n\r\n    realList() {\r\n      return this.list ? this.list : this.value;\r\n    }\r\n  },\r\n\r\n  watch: {\r\n    options: {\r\n      handler(newOptionValue) {\r\n        this.updateOptions(newOptionValue);\r\n      },\r\n      deep: true\r\n    },\r\n\r\n    $attrs: {\r\n      handler(newOptionValue) {\r\n        this.updateOptions(newOptionValue);\r\n      },\r\n      deep: true\r\n    },\r\n\r\n    realList() {\r\n      this.computeIndexes();\r\n    }\r\n  },\r\n\r\n  methods: {\r\n    getIsFunctional() {\r\n      const { fnOptions } = this._vnode;\r\n      return fnOptions && fnOptions.functional;\r\n    },\r\n\r\n    getTag() {\r\n      return this.tag || this.element;\r\n    },\r\n\r\n    updateOptions(newOptionValue) {\r\n      for (var property in newOptionValue) {\r\n        const value = camelize(property);\r\n        if (readonlyProperties.indexOf(value) === -1) {\r\n          this._sortable.option(value, newOptionValue[property]);\r\n        }\r\n      }\r\n    },\r\n\r\n    getChildrenNodes() {\r\n      if (this.noneFunctionalComponentMode) {\r\n        return this.$children[0].$slots.default;\r\n      }\r\n      const rawNodes = this.$slots.default;\r\n      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\r\n    },\r\n\r\n    computeIndexes() {\r\n      this.$nextTick(() => {\r\n        this.visibleIndexes = computeIndexes(\r\n          this.getChildrenNodes(),\r\n          this.rootContainer.children,\r\n          this.transitionMode,\r\n          this.footerOffset\r\n        );\r\n      });\r\n    },\r\n\r\n    getUnderlyingVm(htmlElt) {\r\n      const index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\r\n      if (index === -1) {\r\n        //Edge case during move callback: related element might be\r\n        //an element different from collection\r\n        return null;\r\n      }\r\n      const element = this.realList[index];\r\n      return { index, element };\r\n    },\r\n\r\n    getUnderlyingPotencialDraggableComponent({ __vue__: vue }) {\r\n      if (\r\n        !vue ||\r\n        !vue.$options ||\r\n        !isTransitionName(vue.$options._componentTag)\r\n      ) {\r\n        if (\r\n          !(\"realList\" in vue) &&\r\n          vue.$children.length === 1 &&\r\n          \"realList\" in vue.$children[0]\r\n        )\r\n          return vue.$children[0];\r\n\r\n        return vue;\r\n      }\r\n      return vue.$parent;\r\n    },\r\n\r\n    emitChanges(evt) {\r\n      this.$nextTick(() => {\r\n        this.$emit(\"change\", evt);\r\n      });\r\n    },\r\n\r\n    alterList(onList) {\r\n      if (this.list) {\r\n        onList(this.list);\r\n        return;\r\n      }\r\n      const newList = [...this.value];\r\n      onList(newList);\r\n      this.$emit(\"input\", newList);\r\n    },\r\n\r\n    spliceList() {\r\n      const spliceList = list => list.splice(...arguments);\r\n      this.alterList(spliceList);\r\n    },\r\n\r\n    updatePosition(oldIndex, newIndex) {\r\n      const updatePosition = list =>\r\n        list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\r\n      this.alterList(updatePosition);\r\n    },\r\n\r\n    getRelatedContextFromMoveEvent({ to, related }) {\r\n      const component = this.getUnderlyingPotencialDraggableComponent(to);\r\n      if (!component) {\r\n        return { component };\r\n      }\r\n      const list = component.realList;\r\n      const context = { list, component };\r\n      if (to !== related && list && component.getUnderlyingVm) {\r\n        const destination = component.getUnderlyingVm(related);\r\n        if (destination) {\r\n          return Object.assign(destination, context);\r\n        }\r\n      }\r\n      return context;\r\n    },\r\n\r\n    getVmIndex(domIndex) {\r\n      const indexes = this.visibleIndexes;\r\n      const numberIndexes = indexes.length;\r\n      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\r\n    },\r\n\r\n    getComponent() {\r\n      return this.$slots.default[0].componentInstance;\r\n    },\r\n\r\n    resetTransitionData(index) {\r\n      if (!this.noTransitionOnDrag || !this.transitionMode) {\r\n        return;\r\n      }\r\n      var nodes = this.getChildrenNodes();\r\n      nodes[index].data = null;\r\n      const transitionContainer = this.getComponent();\r\n      transitionContainer.children = [];\r\n      transitionContainer.kept = undefined;\r\n    },\r\n\r\n    onDragStart(evt) {\r\n      this.context = this.getUnderlyingVm(evt.item);\r\n      evt.item._underlying_vm_ = this.clone(this.context.element);\r\n      draggingElement = evt.item;\r\n    },\r\n\r\n    onDragAdd(evt) {\r\n      const element = evt.item._underlying_vm_;\r\n      if (element === undefined) {\r\n        return;\r\n      }\r\n      removeNode(evt.item);\r\n      const newIndex = this.getVmIndex(evt.newIndex);\r\n      this.spliceList(newIndex, 0, element);\r\n      this.computeIndexes();\r\n      const added = { element, newIndex };\r\n      this.emitChanges({ added });\r\n    },\r\n\r\n    onDragRemove(evt) {\r\n      insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\r\n      if (evt.pullMode === \"clone\") {\r\n        removeNode(evt.clone);\r\n        return;\r\n      }\r\n      const oldIndex = this.context.index;\r\n      this.spliceList(oldIndex, 1);\r\n      const removed = { element: this.context.element, oldIndex };\r\n      this.resetTransitionData(oldIndex);\r\n      this.emitChanges({ removed });\r\n    },\r\n\r\n    onDragUpdate(evt) {\r\n      removeNode(evt.item);\r\n      insertNodeAt(evt.from, evt.item, evt.oldIndex);\r\n      const oldIndex = this.context.index;\r\n      const newIndex = this.getVmIndex(evt.newIndex);\r\n      this.updatePosition(oldIndex, newIndex);\r\n      const moved = { element: this.context.element, oldIndex, newIndex };\r\n      this.emitChanges({ moved });\r\n    },\r\n\r\n    updateProperty(evt, propertyName) {\r\n      evt.hasOwnProperty(propertyName) &&\r\n        (evt[propertyName] += this.headerOffset);\r\n    },\r\n\r\n    computeFutureIndex(relatedContext, evt) {\r\n      if (!relatedContext.element) {\r\n        return 0;\r\n      }\r\n      const domChildren = [...evt.to.children].filter(\r\n        el => el.style[\"display\"] !== \"none\"\r\n      );\r\n      const currentDOMIndex = domChildren.indexOf(evt.related);\r\n      const currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\r\n      const draggedInList = domChildren.indexOf(draggingElement) !== -1;\r\n      return draggedInList || !evt.willInsertAfter\r\n        ? currentIndex\r\n        : currentIndex + 1;\r\n    },\r\n\r\n    onDragMove(evt, originalEvent) {\r\n      const onMove = this.move;\r\n      if (!onMove || !this.realList) {\r\n        return true;\r\n      }\r\n\r\n      const relatedContext = this.getRelatedContextFromMoveEvent(evt);\r\n      const draggedContext = this.context;\r\n      const futureIndex = this.computeFutureIndex(relatedContext, evt);\r\n      Object.assign(draggedContext, { futureIndex });\r\n      const sendEvt = Object.assign({}, evt, {\r\n        relatedContext,\r\n        draggedContext\r\n      });\r\n      return onMove(sendEvt, originalEvent);\r\n    },\r\n\r\n    onDragEnd() {\r\n      this.computeIndexes();\r\n      draggingElement = null;\r\n    }\r\n  }\r\n};\r\n\r\nif (typeof window !== \"undefined\" && \"Vue\" in window) {\r\n  window.Vue.component(\"draggable\", draggableComponent);\r\n}\r\n\r\nexport default draggableComponent;\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"sourceRoot":""}(function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e(require("sortablejs")):"function"===typeof define&&define.amd?define(["sortablejs"],e):"object"===typeof exports?exports["vuedraggable"]=e(require("sortablejs")):t["vuedraggable"]=e(t["Sortable"])})("undefined"!==typeof self?self:this,(function(t){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s="fb15")}({"01f9":function(t,e,n){"use strict";var r=n("2d00"),o=n("5ca1"),i=n("2aba"),c=n("32e9"),u=n("84f2"),a=n("41a0"),s=n("7f20"),f=n("38fd"),l=n("2b4c")("iterator"),d=!([].keys&&"next"in[].keys()),p="@@iterator",h="keys",v="values",g=function(){return this};t.exports=function(t,e,n,b,m,y,x){a(n,e,b);var O,S,w,j=function(t){if(!d&&t in _)return _[t];switch(t){case h:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},M=e+" Iterator",C=m==v,T=!1,_=t.prototype,L=_[l]||_[p]||m&&_[m],I=L||j(m),E=m?C?j("entries"):I:void 0,P="Array"==e&&_.entries||L;if(P&&(w=f(P.call(new t)),w!==Object.prototype&&w.next&&(s(w,M,!0),r||"function"==typeof w[l]||c(w,l,g))),C&&L&&L.name!==v&&(T=!0,I=function(){return L.call(this)}),r&&!x||!d&&!T&&_[l]||c(_,l,I),u[e]=I,u[M]=g,m)if(O={values:C?I:j(v),keys:y?I:j(h),entries:E},x)for(S in O)S in _||i(_,S,O[S]);else o(o.P+o.F*(d||T),e,O);return O}},"02f4":function(t,e,n){var r=n("4588"),o=n("be13");t.exports=function(t){return function(e,n){var i,c,u=String(o(e)),a=r(n),s=u.length;return a<0||a>=s?t?"":void 0:(i=u.charCodeAt(a),i<55296||i>56319||a+1===s||(c=u.charCodeAt(a+1))<56320||c>57343?t?u.charAt(a):i:t?u.slice(a,a+2):c-56320+(i-55296<<10)+65536)}}},"0390":function(t,e,n){"use strict";var r=n("02f4")(!0);t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},"0bfb":function(t,e,n){"use strict";var r=n("cb7c");t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},"0d58":function(t,e,n){var r=n("ce10"),o=n("e11e");t.exports=Object.keys||function(t){return r(t,o)}},1495:function(t,e,n){var r=n("86cc"),o=n("cb7c"),i=n("0d58");t.exports=n("9e1e")?Object.defineProperties:function(t,e){o(t);var n,c=i(e),u=c.length,a=0;while(u>a)r.f(t,n=c[a++],e[n]);return t}},"214f":function(t,e,n){"use strict";n("b0c5");var r=n("2aba"),o=n("32e9"),i=n("79e5"),c=n("be13"),u=n("2b4c"),a=n("520a"),s=u("species"),f=!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),l=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();t.exports=function(t,e,n){var d=u(t),p=!i((function(){var e={};return e[d]=function(){return 7},7!=""[t](e)})),h=p?!i((function(){var e=!1,n=/a/;return n.exec=function(){return e=!0,null},"split"===t&&(n.constructor={},n.constructor[s]=function(){return n}),n[d](""),!e})):void 0;if(!p||!h||"replace"===t&&!f||"split"===t&&!l){var v=/./[d],g=n(c,d,""[t],(function(t,e,n,r,o){return e.exec===a?p&&!o?{done:!0,value:v.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}})),b=g[0],m=g[1];r(String.prototype,t,b),o(RegExp.prototype,d,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},"230e":function(t,e,n){var r=n("d3f4"),o=n("7726").document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},"23c6":function(t,e,n){var r=n("2d95"),o=n("2b4c")("toStringTag"),i="Arguments"==r(function(){return arguments}()),c=function(t,e){try{return t[e]}catch(n){}};t.exports=function(t){var e,n,u;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=c(e=Object(t),o))?n:i?r(e):"Object"==(u=r(e))&&"function"==typeof e.callee?"Arguments":u}},2621:function(t,e){e.f=Object.getOwnPropertySymbols},"2aba":function(t,e,n){var r=n("7726"),o=n("32e9"),i=n("69a8"),c=n("ca5a")("src"),u=n("fa5b"),a="toString",s=(""+u).split(a);n("8378").inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,u){var a="function"==typeof n;a&&(i(n,"name")||o(n,"name",e)),t[e]!==n&&(a&&(i(n,c)||o(n,c,t[e]?""+t[e]:s.join(String(e)))),t===r?t[e]=n:u?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,a,(function(){return"function"==typeof this&&this[c]||u.call(this)}))},"2aeb":function(t,e,n){var r=n("cb7c"),o=n("1495"),i=n("e11e"),c=n("613b")("IE_PROTO"),u=function(){},a="prototype",s=function(){var t,e=n("230e")("iframe"),r=i.length,o="<",c=">";e.style.display="none",n("fab2").appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(o+"script"+c+"document.F=Object"+o+"/script"+c),t.close(),s=t.F;while(r--)delete s[a][i[r]];return s()};t.exports=Object.create||function(t,e){var n;return null!==t?(u[a]=r(t),n=new u,u[a]=null,n[c]=t):n=s(),void 0===e?n:o(n,e)}},"2b4c":function(t,e,n){var r=n("5537")("wks"),o=n("ca5a"),i=n("7726").Symbol,c="function"==typeof i,u=t.exports=function(t){return r[t]||(r[t]=c&&i[t]||(c?i:o)("Symbol."+t))};u.store=r},"2d00":function(t,e){t.exports=!1},"2d95":function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},"2fdb":function(t,e,n){"use strict";var r=n("5ca1"),o=n("d2c8"),i="includes";r(r.P+r.F*n("5147")(i),"String",{includes:function(t){return!!~o(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},"32e9":function(t,e,n){var r=n("86cc"),o=n("4630");t.exports=n("9e1e")?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},"38fd":function(t,e,n){var r=n("69a8"),o=n("4bf8"),i=n("613b")("IE_PROTO"),c=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?c:null}},"41a0":function(t,e,n){"use strict";var r=n("2aeb"),o=n("4630"),i=n("7f20"),c={};n("32e9")(c,n("2b4c")("iterator"),(function(){return this})),t.exports=function(t,e,n){t.prototype=r(c,{next:o(1,n)}),i(t,e+" Iterator")}},"456d":function(t,e,n){var r=n("4bf8"),o=n("0d58");n("5eda")("keys",(function(){return function(t){return o(r(t))}}))},4588:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},4630:function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"4bf8":function(t,e,n){var r=n("be13");t.exports=function(t){return Object(r(t))}},5147:function(t,e,n){var r=n("2b4c")("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(o){}}return!0}},"520a":function(t,e,n){"use strict";var r=n("0bfb"),o=RegExp.prototype.exec,i=String.prototype.replace,c=o,u="lastIndex",a=function(){var t=/a/,e=/b*/g;return o.call(t,"a"),o.call(e,"a"),0!==t[u]||0!==e[u]}(),s=void 0!==/()??/.exec("")[1],f=a||s;f&&(c=function(t){var e,n,c,f,l=this;return s&&(n=new RegExp("^"+l.source+"$(?!\\s)",r.call(l))),a&&(e=l[u]),c=o.call(l,t),a&&c&&(l[u]=l.global?c.index+c[0].length:e),s&&c&&c.length>1&&i.call(c[0],n,(function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(c[f]=void 0)})),c}),t.exports=c},"52a7":function(t,e){e.f={}.propertyIsEnumerable},5537:function(t,e,n){var r=n("8378"),o=n("7726"),i="__core-js_shared__",c=o[i]||(o[i]={});(t.exports=function(t,e){return c[t]||(c[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n("2d00")?"pure":"global",copyright:"Â© 2019 Denis Pushkarev (zloirock.ru)"})},"5ca1":function(t,e,n){var r=n("7726"),o=n("8378"),i=n("32e9"),c=n("2aba"),u=n("9b43"),a="prototype",s=function(t,e,n){var f,l,d,p,h=t&s.F,v=t&s.G,g=t&s.S,b=t&s.P,m=t&s.B,y=v?r:g?r[e]||(r[e]={}):(r[e]||{})[a],x=v?o:o[e]||(o[e]={}),O=x[a]||(x[a]={});for(f in v&&(n=e),n)l=!h&&y&&void 0!==y[f],d=(l?y:n)[f],p=m&&l?u(d,r):b&&"function"==typeof d?u(Function.call,d):d,y&&c(y,f,d,t&s.U),x[f]!=d&&i(x,f,p),b&&O[f]!=d&&(O[f]=d)};r.core=o,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},"5eda":function(t,e,n){var r=n("5ca1"),o=n("8378"),i=n("79e5");t.exports=function(t,e){var n=(o.Object||{})[t]||Object[t],c={};c[t]=e(n),r(r.S+r.F*i((function(){n(1)})),"Object",c)}},"5f1b":function(t,e,n){"use strict";var r=n("23c6"),o=RegExp.prototype.exec;t.exports=function(t,e){var n=t.exec;if("function"===typeof n){var i=n.call(t,e);if("object"!==typeof i)throw new TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw new TypeError("RegExp#exec called on incompatible receiver");return o.call(t,e)}},"613b":function(t,e,n){var r=n("5537")("keys"),o=n("ca5a");t.exports=function(t){return r[t]||(r[t]=o(t))}},"626a":function(t,e,n){var r=n("2d95");t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},6762:function(t,e,n){"use strict";var r=n("5ca1"),o=n("c366")(!0);r(r.P,"Array",{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),n("9c6c")("includes")},6821:function(t,e,n){var r=n("626a"),o=n("be13");t.exports=function(t){return r(o(t))}},"69a8":function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},"6a99":function(t,e,n){var r=n("d3f4");t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},7333:function(t,e,n){"use strict";var r=n("0d58"),o=n("2621"),i=n("52a7"),c=n("4bf8"),u=n("626a"),a=Object.assign;t.exports=!a||n("79e5")((function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach((function(t){e[t]=t})),7!=a({},t)[n]||Object.keys(a({},e)).join("")!=r}))?function(t,e){var n=c(t),a=arguments.length,s=1,f=o.f,l=i.f;while(a>s){var d,p=u(arguments[s++]),h=f?r(p).concat(f(p)):r(p),v=h.length,g=0;while(v>g)l.call(p,d=h[g++])&&(n[d]=p[d])}return n}:a},7726:function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},"77f1":function(t,e,n){var r=n("4588"),o=Math.max,i=Math.min;t.exports=function(t,e){return t=r(t),t<0?o(t+e,0):i(t,e)}},"79e5":function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},"7f20":function(t,e,n){var r=n("86cc").f,o=n("69a8"),i=n("2b4c")("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},8378:function(t,e){var n=t.exports={version:"2.6.5"};"number"==typeof __e&&(__e=n)},"84f2":function(t,e){t.exports={}},"86cc":function(t,e,n){var r=n("cb7c"),o=n("c69a"),i=n("6a99"),c=Object.defineProperty;e.f=n("9e1e")?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return c(t,e,n)}catch(u){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},"9b43":function(t,e,n){var r=n("d8e8");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},"9c6c":function(t,e,n){var r=n("2b4c")("unscopables"),o=Array.prototype;void 0==o[r]&&n("32e9")(o,r,{}),t.exports=function(t){o[r][t]=!0}},"9def":function(t,e,n){var r=n("4588"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},"9e1e":function(t,e,n){t.exports=!n("79e5")((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},a352:function(e,n){e.exports=t},a481:function(t,e,n){"use strict";var r=n("cb7c"),o=n("4bf8"),i=n("9def"),c=n("4588"),u=n("0390"),a=n("5f1b"),s=Math.max,f=Math.min,l=Math.floor,d=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g,h=function(t){return void 0===t?t:String(t)};n("214f")("replace",2,(function(t,e,n,v){return[function(r,o){var i=t(this),c=void 0==r?void 0:r[e];return void 0!==c?c.call(r,i,o):n.call(String(i),r,o)},function(t,e){var o=v(n,t,this,e);if(o.done)return o.value;var l=r(t),d=String(this),p="function"===typeof e;p||(e=String(e));var b=l.global;if(b){var m=l.unicode;l.lastIndex=0}var y=[];while(1){var x=a(l,d);if(null===x)break;if(y.push(x),!b)break;var O=String(x[0]);""===O&&(l.lastIndex=u(d,i(l.lastIndex),m))}for(var S="",w=0,j=0;j<y.length;j++){x=y[j];for(var M=String(x[0]),C=s(f(c(x.index),d.length),0),T=[],_=1;_<x.length;_++)T.push(h(x[_]));var L=x.groups;if(p){var I=[M].concat(T,C,d);void 0!==L&&I.push(L);var E=String(e.apply(void 0,I))}else E=g(M,d,C,T,L,e);C>=w&&(S+=d.slice(w,C)+E,w=C+M.length)}return S+d.slice(w)}];function g(t,e,r,i,c,u){var a=r+t.length,s=i.length,f=p;return void 0!==c&&(c=o(c),f=d),n.call(u,f,(function(n,o){var u;switch(o.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,r);case"'":return e.slice(a);case"<":u=c[o.slice(1,-1)];break;default:var f=+o;if(0===f)return n;if(f>s){var d=l(f/10);return 0===d?n:d<=s?void 0===i[d-1]?o.charAt(1):i[d-1]+o.charAt(1):n}u=i[f-1]}return void 0===u?"":u}))}}))},aae3:function(t,e,n){var r=n("d3f4"),o=n("2d95"),i=n("2b4c")("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==o(t))}},ac6a:function(t,e,n){for(var r=n("cadf"),o=n("0d58"),i=n("2aba"),c=n("7726"),u=n("32e9"),a=n("84f2"),s=n("2b4c"),f=s("iterator"),l=s("toStringTag"),d=a.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},h=o(p),v=0;v<h.length;v++){var g,b=h[v],m=p[b],y=c[b],x=y&&y.prototype;if(x&&(x[f]||u(x,f,d),x[l]||u(x,l,b),a[b]=d,m))for(g in r)x[g]||i(x,g,r[g],!0)}},b0c5:function(t,e,n){"use strict";var r=n("520a");n("5ca1")({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},be13:function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t}},c366:function(t,e,n){var r=n("6821"),o=n("9def"),i=n("77f1");t.exports=function(t){return function(e,n,c){var u,a=r(e),s=o(a.length),f=i(c,s);if(t&&n!=n){while(s>f)if(u=a[f++],u!=u)return!0}else for(;s>f;f++)if((t||f in a)&&a[f]===n)return t||f||0;return!t&&-1}}},c649:function(t,e,n){"use strict";(function(t){n.d(e,"c",(function(){return s})),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return o})),n.d(e,"d",(function(){return a}));n("a481");function r(){return"undefined"!==typeof window?window.console:t.console}var o=r();function i(t){var e=Object.create(null);return function(n){var r=e[n];return r||(e[n]=t(n))}}var c=/-(\w)/g,u=i((function(t){return t.replace(c,(function(t,e){return e?e.toUpperCase():""}))}));function a(t){null!==t.parentElement&&t.parentElement.removeChild(t)}function s(t,e,n){var r=0===n?t.children[0]:t.children[n-1].nextSibling;t.insertBefore(e,r)}}).call(this,n("c8ba"))},c69a:function(t,e,n){t.exports=!n("9e1e")&&!n("79e5")((function(){return 7!=Object.defineProperty(n("230e")("div"),"a",{get:function(){return 7}}).a}))},c8ba:function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}t.exports=n},ca5a:function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},cadf:function(t,e,n){"use strict";var r=n("9c6c"),o=n("d53b"),i=n("84f2"),c=n("6821");t.exports=n("01f9")(Array,"Array",(function(t,e){this._t=c(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):o(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])}),"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},cb7c:function(t,e,n){var r=n("d3f4");t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},ce10:function(t,e,n){var r=n("69a8"),o=n("6821"),i=n("c366")(!1),c=n("613b")("IE_PROTO");t.exports=function(t,e){var n,u=o(t),a=0,s=[];for(n in u)n!=c&&r(u,n)&&s.push(n);while(e.length>a)r(u,n=e[a++])&&(~i(s,n)||s.push(n));return s}},d2c8:function(t,e,n){var r=n("aae3"),o=n("be13");t.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(t))}},d3f4:function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},d53b:function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},d8e8:function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},e11e:function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},f559:function(t,e,n){"use strict";var r=n("5ca1"),o=n("9def"),i=n("d2c8"),c="startsWith",u=""[c];r(r.P+r.F*n("5147")(c),"String",{startsWith:function(t){var e=i(this,t,c),n=o(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),r=String(t);return u?u.call(e,r,n):e.slice(n,n+r.length)===r}})},f6fd:function(t,e){(function(t){var e="currentScript",n=t.getElementsByTagName("script");e in t||Object.defineProperty(t,e,{get:function(){try{throw new Error}catch(r){var t,e=(/.*at [^\(]*\((.*):.+:.+\)$/gi.exec(r.stack)||[!1])[1];for(t in n)if(n[t].src==e||"interactive"==n[t].readyState)return n[t];return null}}})})(document)},f751:function(t,e,n){var r=n("5ca1");r(r.S+r.F,"Object",{assign:n("7333")})},fa5b:function(t,e,n){t.exports=n("5537")("native-function-to-string",Function.toString)},fab2:function(t,e,n){var r=n("7726").document;t.exports=r&&r.documentElement},fb15:function(t,e,n){"use strict";var r;(n.r(e),"undefined"!==typeof window)&&(n("f6fd"),(r=window.document.currentScript)&&(r=r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/))&&(n.p=r[1]));n("f751"),n("f559"),n("ac6a"),n("cadf"),n("456d");function o(t){if(Array.isArray(t))return t}function i(t,e){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(t)){var n=[],r=!0,o=!1,i=void 0;try{for(var c,u=t[Symbol.iterator]();!(r=(c=u.next()).done);r=!0)if(n.push(c.value),e&&n.length===e)break}catch(a){o=!0,i=a}finally{try{r||null==u["return"]||u["return"]()}finally{if(o)throw i}}return n}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function u(t,e){if(t){if("string"===typeof t)return c(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(t,e):void 0}}function a(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(t,e){return o(t)||i(t,e)||u(t,e)||a()}n("6762"),n("2fdb");function f(t){if(Array.isArray(t))return c(t)}function l(t){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}function d(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function p(t){return f(t)||l(t)||u(t)||d()}var h=n("a352"),v=n.n(h),g=n("c649");function b(t,e,n){return void 0===n||(t=t||{},t[e]=n),t}function m(t,e){return t.map((function(t){return t.elm})).indexOf(e)}function y(t,e,n,r){if(!t)return[];var o=t.map((function(t){return t.elm})),i=e.length-r,c=p(e).map((function(t,e){return e>=i?o.length:o.indexOf(t)}));return n?c.filter((function(t){return-1!==t})):c}function x(t,e){var n=this;this.$nextTick((function(){return n.$emit(t.toLowerCase(),e)}))}function O(t){var e=this;return function(n){null!==e.realList&&e["onDrag"+t](n),x.call(e,t,n)}}function S(t){return["transition-group","TransitionGroup"].includes(t)}function w(t){if(!t||1!==t.length)return!1;var e=s(t,1),n=e[0].componentOptions;return!!n&&S(n.tag)}function j(t,e,n){return t[n]||(e[n]?e[n]():void 0)}function M(t,e,n){var r=0,o=0,i=j(e,n,"header");i&&(r=i.length,t=t?[].concat(p(i),p(t)):p(i));var c=j(e,n,"footer");return c&&(o=c.length,t=t?[].concat(p(t),p(c)):p(c)),{children:t,headerOffset:r,footerOffset:o}}function C(t,e){var n=null,r=function(t,e){n=b(n,t,e)},o=Object.keys(t).filter((function(t){return"id"===t||t.startsWith("data-")})).reduce((function(e,n){return e[n]=t[n],e}),{});if(r("attrs",o),!e)return n;var i=e.on,c=e.props,u=e.attrs;return r("on",i),r("props",c),Object.assign(n.attrs,u),n}var T=["Start","Add","Remove","Update","End"],_=["Choose","Unchoose","Sort","Filter","Clone"],L=["Move"].concat(T,_).map((function(t){return"on"+t})),I=null,E={options:Object,list:{type:Array,required:!1,default:null},value:{type:Array,required:!1,default:null},noTransitionOnDrag:{type:Boolean,default:!1},clone:{type:Function,default:function(t){return t}},element:{type:String,default:"div"},tag:{type:String,default:null},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},P={name:"draggable",inheritAttrs:!1,props:E,data:function(){return{transitionMode:!1,noneFunctionalComponentMode:!1}},render:function(t){var e=this.$slots.default;this.transitionMode=w(e);var n=M(e,this.$slots,this.$scopedSlots),r=n.children,o=n.headerOffset,i=n.footerOffset;this.headerOffset=o,this.footerOffset=i;var c=C(this.$attrs,this.componentData);return t(this.getTag(),c,r)},created:function(){null!==this.list&&null!==this.value&&g["b"].error("Value and list props are mutually exclusive! Please set one or another."),"div"!==this.element&&g["b"].warn("Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props"),void 0!==this.options&&g["b"].warn("Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props")},mounted:function(){var t=this;if(this.noneFunctionalComponentMode=this.getTag().toLowerCase()!==this.$el.nodeName.toLowerCase()&&!this.getIsFunctional(),this.noneFunctionalComponentMode&&this.transitionMode)throw new Error("Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ".concat(this.getTag()));var e={};T.forEach((function(n){e["on"+n]=O.call(t,n)})),_.forEach((function(n){e["on"+n]=x.bind(t,n)}));var n=Object.keys(this.$attrs).reduce((function(e,n){return e[Object(g["a"])(n)]=t.$attrs[n],e}),{}),r=Object.assign({},this.options,n,e,{onMove:function(e,n){return t.onDragMove(e,n)}});!("draggable"in r)&&(r.draggable=">*"),this._sortable=new v.a(this.rootContainer,r),this.computeIndexes()},beforeDestroy:function(){void 0!==this._sortable&&this._sortable.destroy()},computed:{rootContainer:function(){return this.transitionMode?this.$el.children[0]:this.$el},realList:function(){return this.list?this.list:this.value}},watch:{options:{handler:function(t){this.updateOptions(t)},deep:!0},$attrs:{handler:function(t){this.updateOptions(t)},deep:!0},realList:function(){this.computeIndexes()}},methods:{getIsFunctional:function(){var t=this._vnode.fnOptions;return t&&t.functional},getTag:function(){return this.tag||this.element},updateOptions:function(t){for(var e in t){var n=Object(g["a"])(e);-1===L.indexOf(n)&&this._sortable.option(n,t[e])}},getChildrenNodes:function(){if(this.noneFunctionalComponentMode)return this.$children[0].$slots.default;var t=this.$slots.default;return this.transitionMode?t[0].child.$slots.default:t},computeIndexes:function(){var t=this;this.$nextTick((function(){t.visibleIndexes=y(t.getChildrenNodes(),t.rootContainer.children,t.transitionMode,t.footerOffset)}))},getUnderlyingVm:function(t){var e=m(this.getChildrenNodes()||[],t);if(-1===e)return null;var n=this.realList[e];return{index:e,element:n}},getUnderlyingPotencialDraggableComponent:function(t){var e=t.__vue__;return e&&e.$options&&S(e.$options._componentTag)?e.$parent:!("realList"in e)&&1===e.$children.length&&"realList"in e.$children[0]?e.$children[0]:e},emitChanges:function(t){var e=this;this.$nextTick((function(){e.$emit("change",t)}))},alterList:function(t){if(this.list)t(this.list);else{var e=p(this.value);t(e),this.$emit("input",e)}},spliceList:function(){var t=arguments,e=function(e){return e.splice.apply(e,p(t))};this.alterList(e)},updatePosition:function(t,e){var n=function(n){return n.splice(e,0,n.splice(t,1)[0])};this.alterList(n)},getRelatedContextFromMoveEvent:function(t){var e=t.to,n=t.related,r=this.getUnderlyingPotencialDraggableComponent(e);if(!r)return{component:r};var o=r.realList,i={list:o,component:r};if(e!==n&&o&&r.getUnderlyingVm){var c=r.getUnderlyingVm(n);if(c)return Object.assign(c,i)}return i},getVmIndex:function(t){var e=this.visibleIndexes,n=e.length;return t>n-1?n:e[t]},getComponent:function(){return this.$slots.default[0].componentInstance},resetTransitionData:function(t){if(this.noTransitionOnDrag&&this.transitionMode){var e=this.getChildrenNodes();e[t].data=null;var n=this.getComponent();n.children=[],n.kept=void 0}},onDragStart:function(t){this.context=this.getUnderlyingVm(t.item),t.item._underlying_vm_=this.clone(this.context.element),I=t.item},onDragAdd:function(t){var e=t.item._underlying_vm_;if(void 0!==e){Object(g["d"])(t.item);var n=this.getVmIndex(t.newIndex);this.spliceList(n,0,e),this.computeIndexes();var r={element:e,newIndex:n};this.emitChanges({added:r})}},onDragRemove:function(t){if(Object(g["c"])(this.rootContainer,t.item,t.oldIndex),"clone"!==t.pullMode){var e=this.context.index;this.spliceList(e,1);var n={element:this.context.element,oldIndex:e};this.resetTransitionData(e),this.emitChanges({removed:n})}else Object(g["d"])(t.clone)},onDragUpdate:function(t){Object(g["d"])(t.item),Object(g["c"])(t.from,t.item,t.oldIndex);var e=this.context.index,n=this.getVmIndex(t.newIndex);this.updatePosition(e,n);var r={element:this.context.element,oldIndex:e,newIndex:n};this.emitChanges({moved:r})},updateProperty:function(t,e){t.hasOwnProperty(e)&&(t[e]+=this.headerOffset)},computeFutureIndex:function(t,e){if(!t.element)return 0;var n=p(e.to.children).filter((function(t){return"none"!==t.style["display"]})),r=n.indexOf(e.related),o=t.component.getVmIndex(r),i=-1!==n.indexOf(I);return i||!e.willInsertAfter?o:o+1},onDragMove:function(t,e){var n=this.move;if(!n||!this.realList)return!0;var r=this.getRelatedContextFromMoveEvent(t),o=this.context,i=this.computeFutureIndex(r,t);Object.assign(o,{futureIndex:i});var c=Object.assign({},t,{relatedContext:r,draggedContext:o});return n(c,e)},onDragEnd:function(){this.computeIndexes(),I=null}}};"undefined"!==typeof window&&"Vue"in window&&window.Vue.component("draggable",P);var $=P;e["default"]=$}})["default"]}));
//# sourceMappingURL=vuedraggable.umd.min.js.map{"version":3,"sources":["webpack://vuedraggable/webpack/universalModuleDefinition","webpack://vuedraggable/webpack/bootstrap","webpack://vuedraggable/./node_modules/core-js/modules/_iter-define.js","webpack://vuedraggable/./node_modules/core-js/modules/_string-at.js","webpack://vuedraggable/./node_modules/core-js/modules/_advance-string-index.js","webpack://vuedraggable/./node_modules/core-js/modules/_flags.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-keys.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-dps.js","webpack://vuedraggable/./node_modules/core-js/modules/_fix-re-wks.js","webpack://vuedraggable/./node_modules/core-js/modules/_dom-create.js","webpack://vuedraggable/./node_modules/core-js/modules/_classof.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-gops.js","webpack://vuedraggable/./node_modules/core-js/modules/_redefine.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-create.js","webpack://vuedraggable/./node_modules/core-js/modules/_wks.js","webpack://vuedraggable/./node_modules/core-js/modules/_library.js","webpack://vuedraggable/./node_modules/core-js/modules/_cof.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.string.includes.js","webpack://vuedraggable/./node_modules/core-js/modules/_hide.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-gpo.js","webpack://vuedraggable/./node_modules/core-js/modules/_iter-create.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.object.keys.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-integer.js","webpack://vuedraggable/./node_modules/core-js/modules/_property-desc.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-object.js","webpack://vuedraggable/./node_modules/core-js/modules/_fails-is-regexp.js","webpack://vuedraggable/./node_modules/core-js/modules/_regexp-exec.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-pie.js","webpack://vuedraggable/./node_modules/core-js/modules/_shared.js","webpack://vuedraggable/./node_modules/core-js/modules/_export.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-sap.js","webpack://vuedraggable/./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack://vuedraggable/./node_modules/core-js/modules/_shared-key.js","webpack://vuedraggable/./node_modules/core-js/modules/_iobject.js","webpack://vuedraggable/./node_modules/core-js/modules/es7.array.includes.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-iobject.js","webpack://vuedraggable/./node_modules/core-js/modules/_has.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-primitive.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-assign.js","webpack://vuedraggable/./node_modules/core-js/modules/_global.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-absolute-index.js","webpack://vuedraggable/./node_modules/core-js/modules/_fails.js","webpack://vuedraggable/./node_modules/core-js/modules/_set-to-string-tag.js","webpack://vuedraggable/./node_modules/core-js/modules/_core.js","webpack://vuedraggable/./node_modules/core-js/modules/_iterators.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-dp.js","webpack://vuedraggable/./node_modules/core-js/modules/_ctx.js","webpack://vuedraggable/./node_modules/core-js/modules/_add-to-unscopables.js","webpack://vuedraggable/./node_modules/core-js/modules/_to-length.js","webpack://vuedraggable/./node_modules/core-js/modules/_descriptors.js","webpack://vuedraggable/external {\"commonjs\":\"sortablejs\",\"commonjs2\":\"sortablejs\",\"amd\":\"sortablejs\",\"root\":\"Sortable\"}","webpack://vuedraggable/./node_modules/core-js/modules/es6.regexp.replace.js","webpack://vuedraggable/./node_modules/core-js/modules/_is-regexp.js","webpack://vuedraggable/./node_modules/core-js/modules/web.dom.iterable.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.regexp.exec.js","webpack://vuedraggable/./node_modules/core-js/modules/_defined.js","webpack://vuedraggable/./node_modules/core-js/modules/_array-includes.js","webpack://vuedraggable/./src/util/helper.js","webpack://vuedraggable/./node_modules/core-js/modules/_ie8-dom-define.js","webpack://vuedraggable/(webpack)/buildin/global.js","webpack://vuedraggable/./node_modules/core-js/modules/_uid.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.array.iterator.js","webpack://vuedraggable/./node_modules/core-js/modules/_an-object.js","webpack://vuedraggable/./node_modules/core-js/modules/_object-keys-internal.js","webpack://vuedraggable/./node_modules/core-js/modules/_string-context.js","webpack://vuedraggable/./node_modules/core-js/modules/_is-object.js","webpack://vuedraggable/./node_modules/core-js/modules/_iter-step.js","webpack://vuedraggable/./node_modules/core-js/modules/_a-function.js","webpack://vuedraggable/./node_modules/core-js/modules/_enum-bug-keys.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.string.starts-with.js","webpack://vuedraggable/./node_modules/current-script-polyfill/currentScript.js","webpack://vuedraggable/./node_modules/core-js/modules/es6.object.assign.js","webpack://vuedraggable/./node_modules/core-js/modules/_function-to-string.js","webpack://vuedraggable/./node_modules/core-js/modules/_html.js","webpack://vuedraggable/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://vuedraggable/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://vuedraggable/./src/vuedraggable.js","webpack://vuedraggable/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE_a352__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","LIBRARY","$export","redefine","hide","Iterators","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","keys","FF_ITERATOR","KEYS","VALUES","returnThis","Base","NAME","Constructor","next","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","proto","TAG","DEF_VALUES","VALUES_BUG","$native","$default","$entries","undefined","$anyNative","entries","values","P","F","toInteger","defined","TO_STRING","that","pos","a","b","String","length","charCodeAt","charAt","slice","at","S","index","unicode","anObject","result","global","ignoreCase","multiline","sticky","$keys","enumBugKeys","O","dP","getKeys","defineProperties","Properties","f","fails","wks","regexpExec","SPECIES","REPLACE_SUPPORTS_NAMED_GROUPS","re","exec","groups","replace","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","apply","arguments","split","KEY","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","constructor","nativeRegExpMethod","fns","nativeMethod","regexp","str","arg2","forceStringMethod","done","strfn","rxfn","RegExp","string","arg","isObject","document","is","createElement","it","cof","ARG","tryGet","e","T","B","callee","getOwnPropertySymbols","has","SRC","$toString","TPL","inspectSource","val","safe","isFunction","join","Function","dPs","IE_PROTO","Empty","PROTOTYPE","createDict","iframeDocument","iframe","lt","gt","style","display","appendChild","src","contentWindow","open","write","close","store","uid","USE_SYMBOL","$exports","toString","context","INCLUDES","includes","searchString","indexOf","createDesc","toObject","ObjectProto","descriptor","ceil","Math","floor","isNaN","bitmap","configurable","writable","MATCH","regexpFlags","nativeExec","nativeReplace","patchedExec","LAST_INDEX","UPDATES_LAST_INDEX_WRONG","re1","re2","NPCG_INCLUDED","PATCH","lastIndex","reCopy","match","source","propertyIsEnumerable","core","SHARED","push","version","copyright","ctx","type","own","out","exp","IS_FORCED","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","target","expProto","U","W","R","fn","classof","builtinExec","TypeError","shared","$includes","el","IObject","valueOf","gOPS","pIE","$assign","assign","A","K","forEach","k","aLen","getSymbols","isEnum","concat","j","window","__g","max","min","def","tag","stat","__e","IE8_DOM_DEFINE","toPrimitive","Attributes","aFunction","UNSCOPABLES","ArrayProto","Array","toLength","advanceStringIndex","regExpExec","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeToString","REPLACE","$replace","maybeCallNative","searchValue","replaceValue","res","rx","functionalReplace","fullUnicode","results","matchStr","accumulatedResult","nextSourcePosition","matched","position","captures","namedCaptures","replacerArgs","replacement","getSubstitution","tailPos","symbols","ch","capture","isRegExp","$iterators","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","forced","toIObject","toAbsoluteIndex","IS_INCLUDES","$this","fromIndex","getConsole","console","cached","cache","hit","regex","camelize","_","toUpperCase","removeNode","node","parentElement","removeChild","insertNodeAt","fatherNode","refNode","children","nextSibling","insertBefore","g","id","px","random","addToUnscopables","step","iterated","_t","_i","_k","Arguments","arrayIndexOf","names","STARTS_WITH","$startsWith","startsWith","search","currentScript","scripts","getElementsByTagName","Error","err","stack","readyState","documentElement","_arrayWithHoles","arr","isArray","_iterableToArrayLimit","iterator","_arr","_n","_d","_e","_s","_arrayLikeToArray","len","arr2","_unsupportedIterableToArray","minLen","from","test","_nonIterableRest","_slicedToArray","_arrayWithoutHoles","_iterableToArray","iter","_nonIterableSpread","_toConsumableArray","buildAttribute","propName","computeVmIndex","vnodes","element","map","elt","elm","computeIndexes","slots","isTransition","footerOffset","elmFromNodes","footerIndex","rawIndexes","idx","filter","ind","emit","evtName","evtData","$nextTick","$emit","toLowerCase","delegateAndEmit","realList","isTransitionName","componentOptions","getSlot","slot","scopedSlot","computeChildrenAndOffsets","headerOffset","header","footer","getComponentAttributes","$attrs","componentData","attributes","update","attrs","reduce","on","props","componentDataAttrs","eventsListened","eventsToEmit","readonlyProperties","evt","draggingElement","options","list","required","default","noTransitionOnDrag","Boolean","clone","original","move","draggableComponent","inheritAttrs","data","transitionMode","noneFunctionalComponentMode","render","h","$slots","$scopedSlots","getTag","created","error","warn","mounted","$el","nodeName","getIsFunctional","optionsAdded","onMove","originalEvent","onDragMove","draggable","_sortable","Sortable","rootContainer","beforeDestroy","destroy","computed","watch","handler","newOptionValue","updateOptions","deep","fnOptions","_vnode","functional","option","getChildrenNodes","$children","rawNodes","child","visibleIndexes","getUnderlyingVm","htmlElt","getUnderlyingPotencialDraggableComponent","vue","__vue__","$options","_componentTag","$parent","emitChanges","alterList","onList","newList","spliceList","splice","updatePosition","oldIndex","newIndex","getRelatedContextFromMoveEvent","to","related","component","destination","getVmIndex","domIndex","indexes","numberIndexes","getComponent","componentInstance","resetTransitionData","nodes","transitionContainer","kept","onDragStart","item","_underlying_vm_","onDragAdd","added","onDragRemove","pullMode","removed","onDragUpdate","moved","updateProperty","propertyName","computeFutureIndex","relatedContext","domChildren","currentDOMIndex","currentIndex","draggedInList","willInsertAfter","draggedContext","futureIndex","sendEvt","onDragEnd","Vue"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,kBAAZC,SAA0C,kBAAXC,OACxCA,OAAOD,QAAUD,EAAQG,QAAQ,eACR,oBAAXC,QAAyBA,OAAOC,IAC9CD,OAAO,CAAC,cAAeJ,GACG,kBAAZC,QACdA,QAAQ,gBAAkBD,EAAQG,QAAQ,eAE1CJ,EAAK,gBAAkBC,EAAQD,EAAK,cARtC,CASoB,qBAATO,KAAuBA,KAAOC,MAAO,SAASC,GACzD,O,YCTE,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUV,QAGnC,IAAIC,EAASO,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHZ,QAAS,IAUV,OANAa,EAAQH,GAAUI,KAAKb,EAAOD,QAASC,EAAQA,EAAOD,QAASS,GAG/DR,EAAOW,GAAI,EAGJX,EAAOD,QA0Df,OArDAS,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBQ,EAAI,SAASjB,EAASkB,EAAMC,GAC3CV,EAAoBW,EAAEpB,EAASkB,IAClCG,OAAOC,eAAetB,EAASkB,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEV,EAAoBgB,EAAI,SAASzB,GACX,qBAAX0B,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAetB,EAAS0B,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAetB,EAAS,aAAc,CAAE4B,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAASnC,GAChC,IAAIkB,EAASlB,GAAUA,EAAO8B,WAC7B,WAAwB,OAAO9B,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAQ,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG7B,EAAoBgC,EAAI,GAIjBhC,EAAoBA,EAAoBiC,EAAI,Q,sCCjFrD,IAAIC,EAAU,EAAQ,QAClBC,EAAU,EAAQ,QAClBC,EAAW,EAAQ,QACnBC,EAAO,EAAQ,QACfC,EAAY,EAAQ,QACpBC,EAAc,EAAQ,QACtBC,EAAiB,EAAQ,QACzBC,EAAiB,EAAQ,QACzBC,EAAW,EAAQ,OAAR,CAAkB,YAC7BC,IAAU,GAAGC,MAAQ,QAAU,GAAGA,QAClCC,EAAc,aACdC,EAAO,OACPC,EAAS,SAETC,EAAa,WAAc,OAAOnD,MAEtCL,EAAOD,QAAU,SAAU0D,EAAMC,EAAMC,EAAaC,EAAMC,EAASC,EAAQC,GACzEhB,EAAYY,EAAaD,EAAME,GAC/B,IAeII,EAAS/B,EAAKgC,EAfdC,EAAY,SAAUC,GACxB,IAAKhB,GAASgB,KAAQC,EAAO,OAAOA,EAAMD,GAC1C,OAAQA,GACN,KAAKb,EAAM,OAAO,WAAkB,OAAO,IAAIK,EAAYtD,KAAM8D,IACjE,KAAKZ,EAAQ,OAAO,WAAoB,OAAO,IAAII,EAAYtD,KAAM8D,IACrE,OAAO,WAAqB,OAAO,IAAIR,EAAYtD,KAAM8D,KAEzDE,EAAMX,EAAO,YACbY,EAAaT,GAAWN,EACxBgB,GAAa,EACbH,EAAQX,EAAKnB,UACbkC,EAAUJ,EAAMlB,IAAakB,EAAMf,IAAgBQ,GAAWO,EAAMP,GACpEY,EAAWD,GAAWN,EAAUL,GAChCa,EAAWb,EAAWS,EAAwBJ,EAAU,WAArBO,OAAkCE,EACrEC,EAAqB,SAARlB,GAAkBU,EAAMS,SAAqBL,EAwB9D,GArBII,IACFX,EAAoBhB,EAAe2B,EAAW/D,KAAK,IAAI4C,IACnDQ,IAAsB7C,OAAOkB,WAAa2B,EAAkBL,OAE9DZ,EAAeiB,EAAmBI,GAAK,GAElC3B,GAAiD,mBAA/BuB,EAAkBf,IAAyBL,EAAKoB,EAAmBf,EAAUM,KAIpGc,GAAcE,GAAWA,EAAQvD,OAASsC,IAC5CgB,GAAa,EACbE,EAAW,WAAoB,OAAOD,EAAQ3D,KAAKR,QAG/CqC,IAAWqB,IAAYZ,IAASoB,GAAeH,EAAMlB,IACzDL,EAAKuB,EAAOlB,EAAUuB,GAGxB3B,EAAUY,GAAQe,EAClB3B,EAAUuB,GAAOb,EACbK,EAMF,GALAG,EAAU,CACRc,OAAQR,EAAaG,EAAWP,EAAUX,GAC1CH,KAAMU,EAASW,EAAWP,EAAUZ,GACpCuB,QAASH,GAEPX,EAAQ,IAAK9B,KAAO+B,EAChB/B,KAAOmC,GAAQxB,EAASwB,EAAOnC,EAAK+B,EAAQ/B,SAC7CU,EAAQA,EAAQoC,EAAIpC,EAAQqC,GAAK7B,GAASoB,GAAab,EAAMM,GAEtE,OAAOA,I,uBCnET,IAAIiB,EAAY,EAAQ,QACpBC,EAAU,EAAQ,QAGtBlF,EAAOD,QAAU,SAAUoF,GACzB,OAAO,SAAUC,EAAMC,GACrB,IAGIC,EAAGC,EAHH9C,EAAI+C,OAAON,EAAQE,IACnB1E,EAAIuE,EAAUI,GACd1E,EAAI8B,EAAEgD,OAEV,OAAI/E,EAAI,GAAKA,GAAKC,EAAUwE,EAAY,QAAKR,GAC7CW,EAAI7C,EAAEiD,WAAWhF,GACV4E,EAAI,OAAUA,EAAI,OAAU5E,EAAI,IAAMC,IAAM4E,EAAI9C,EAAEiD,WAAWhF,EAAI,IAAM,OAAU6E,EAAI,MACxFJ,EAAY1C,EAAEkD,OAAOjF,GAAK4E,EAC1BH,EAAY1C,EAAEmD,MAAMlF,EAAGA,EAAI,GAA2B6E,EAAI,OAAzBD,EAAI,OAAU,IAAqB,U,oCCb5E,IAAIO,EAAK,EAAQ,OAAR,EAAwB,GAIjC7F,EAAOD,QAAU,SAAU+F,EAAGC,EAAOC,GACnC,OAAOD,GAASC,EAAUH,EAAGC,EAAGC,GAAON,OAAS,K,oCCJlD,IAAIQ,EAAW,EAAQ,QACvBjG,EAAOD,QAAU,WACf,IAAIqF,EAAOa,EAAS5F,MAChB6F,EAAS,GAMb,OALId,EAAKe,SAAQD,GAAU,KACvBd,EAAKgB,aAAYF,GAAU,KAC3Bd,EAAKiB,YAAWH,GAAU,KAC1Bd,EAAKY,UAASE,GAAU,KACxBd,EAAKkB,SAAQJ,GAAU,KACpBA,I,uBCVT,IAAIK,EAAQ,EAAQ,QAChBC,EAAc,EAAQ,QAE1BxG,EAAOD,QAAUqB,OAAOgC,MAAQ,SAAcqD,GAC5C,OAAOF,EAAME,EAAGD,K,qBCLlB,IAAIE,EAAK,EAAQ,QACbT,EAAW,EAAQ,QACnBU,EAAU,EAAQ,QAEtB3G,EAAOD,QAAU,EAAQ,QAAoBqB,OAAOwF,iBAAmB,SAA0BH,EAAGI,GAClGZ,EAASQ,GACT,IAGI1B,EAHA3B,EAAOuD,EAAQE,GACfpB,EAASrC,EAAKqC,OACd/E,EAAI,EAER,MAAO+E,EAAS/E,EAAGgG,EAAGI,EAAEL,EAAG1B,EAAI3B,EAAK1C,KAAMmG,EAAW9B,IACrD,OAAO0B,I,oCCVT,EAAQ,QACR,IAAI7D,EAAW,EAAQ,QACnBC,EAAO,EAAQ,QACfkE,EAAQ,EAAQ,QAChB7B,EAAU,EAAQ,QAClB8B,EAAM,EAAQ,QACdC,EAAa,EAAQ,QAErBC,EAAUF,EAAI,WAEdG,GAAiCJ,GAAM,WAIzC,IAAIK,EAAK,IAMT,OALAA,EAAGC,KAAO,WACR,IAAInB,EAAS,GAEb,OADAA,EAAOoB,OAAS,CAAEhC,EAAG,KACdY,GAEyB,MAA3B,GAAGqB,QAAQH,EAAI,WAGpBI,EAAoC,WAEtC,IAAIJ,EAAK,OACLK,EAAeL,EAAGC,KACtBD,EAAGC,KAAO,WAAc,OAAOI,EAAaC,MAAMrH,KAAMsH,YACxD,IAAIzB,EAAS,KAAK0B,MAAMR,GACxB,OAAyB,IAAlBlB,EAAOT,QAA8B,MAAdS,EAAO,IAA4B,MAAdA,EAAO,GANpB,GASxClG,EAAOD,QAAU,SAAU8H,EAAKpC,EAAQ4B,GACtC,IAAIS,EAASd,EAAIa,GAEbE,GAAuBhB,GAAM,WAE/B,IAAIN,EAAI,GAER,OADAA,EAAEqB,GAAU,WAAc,OAAO,GACZ,GAAd,GAAGD,GAAKpB,MAGbuB,EAAoBD,GAAuBhB,GAAM,WAEnD,IAAIkB,GAAa,EACbb,EAAK,IAST,OARAA,EAAGC,KAAO,WAAiC,OAAnBY,GAAa,EAAa,MACtC,UAARJ,IAGFT,EAAGc,YAAc,GACjBd,EAAGc,YAAYhB,GAAW,WAAc,OAAOE,IAEjDA,EAAGU,GAAQ,KACHG,UACLtD,EAEL,IACGoD,IACAC,GACQ,YAARH,IAAsBV,GACd,UAARU,IAAoBL,EACrB,CACA,IAAIW,EAAqB,IAAIL,GACzBM,EAAMf,EACRnC,EACA4C,EACA,GAAGD,IACH,SAAyBQ,EAAcC,EAAQC,EAAKC,EAAMC,GACxD,OAAIH,EAAOjB,OAASJ,EACdc,IAAwBU,EAInB,CAAEC,MAAM,EAAM/G,MAAOwG,EAAmBtH,KAAKyH,EAAQC,EAAKC,IAE5D,CAAEE,MAAM,EAAM/G,MAAO0G,EAAaxH,KAAK0H,EAAKD,EAAQE,IAEtD,CAAEE,MAAM,MAGfC,EAAQP,EAAI,GACZQ,EAAOR,EAAI,GAEfxF,EAAS4C,OAAOlD,UAAWuF,EAAKc,GAChC9F,EAAKgG,OAAOvG,UAAWwF,EAAkB,GAAVrC,EAG3B,SAAUqD,EAAQC,GAAO,OAAOH,EAAK/H,KAAKiI,EAAQzI,KAAM0I,IAGxD,SAAUD,GAAU,OAAOF,EAAK/H,KAAKiI,EAAQzI,W,uBC5FrD,IAAI2I,EAAW,EAAQ,QACnBC,EAAW,EAAQ,QAAaA,SAEhCC,EAAKF,EAASC,IAAaD,EAASC,EAASE,eACjDnJ,EAAOD,QAAU,SAAUqJ,GACzB,OAAOF,EAAKD,EAASE,cAAcC,GAAM,K,uBCJ3C,IAAIC,EAAM,EAAQ,QACdhF,EAAM,EAAQ,OAAR,CAAkB,eAExBiF,EAAkD,aAA5CD,EAAI,WAAc,OAAO1B,UAArB,IAGV4B,EAAS,SAAUH,EAAInH,GACzB,IACE,OAAOmH,EAAGnH,GACV,MAAOuH,MAGXxJ,EAAOD,QAAU,SAAUqJ,GACzB,IAAI3C,EAAGgD,EAAGC,EACV,YAAc/E,IAAPyE,EAAmB,YAAqB,OAAPA,EAAc,OAEN,iBAApCK,EAAIF,EAAO9C,EAAIrF,OAAOgI,GAAK/E,IAAoBoF,EAEvDH,EAAMD,EAAI5C,GAEM,WAAfiD,EAAIL,EAAI5C,KAAsC,mBAAZA,EAAEkD,OAAuB,YAAcD,I,mBCrBhF3J,EAAQ+G,EAAI1F,OAAOwI,uB,uBCAnB,IAAIzD,EAAS,EAAQ,QACjBtD,EAAO,EAAQ,QACfgH,EAAM,EAAQ,QACdC,EAAM,EAAQ,OAAR,CAAkB,OACxBC,EAAY,EAAQ,QACpB5E,EAAY,WACZ6E,GAAO,GAAKD,GAAWnC,MAAMzC,GAEjC,EAAQ,QAAW8E,cAAgB,SAAUb,GAC3C,OAAOW,EAAUlJ,KAAKuI,KAGvBpJ,EAAOD,QAAU,SAAU0G,EAAGxE,EAAKiI,EAAKC,GACvC,IAAIC,EAA2B,mBAAPF,EACpBE,IAAYP,EAAIK,EAAK,SAAWrH,EAAKqH,EAAK,OAAQjI,IAClDwE,EAAExE,KAASiI,IACXE,IAAYP,EAAIK,EAAKJ,IAAQjH,EAAKqH,EAAKJ,EAAKrD,EAAExE,GAAO,GAAKwE,EAAExE,GAAO+H,EAAIK,KAAK7E,OAAOvD,MACnFwE,IAAMN,EACRM,EAAExE,GAAOiI,EACCC,EAGD1D,EAAExE,GACXwE,EAAExE,GAAOiI,EAETrH,EAAK4D,EAAGxE,EAAKiI,WALNzD,EAAExE,GACTY,EAAK4D,EAAGxE,EAAKiI,OAOdI,SAAShI,UAAW6C,GAAW,WAChC,MAAsB,mBAAR9E,MAAsBA,KAAKyJ,IAAQC,EAAUlJ,KAAKR,U,uBC5BlE,IAAI4F,EAAW,EAAQ,QACnBsE,EAAM,EAAQ,QACd/D,EAAc,EAAQ,QACtBgE,EAAW,EAAQ,OAAR,CAAyB,YACpCC,EAAQ,aACRC,EAAY,YAGZC,EAAa,WAEf,IAIIC,EAJAC,EAAS,EAAQ,OAAR,CAAyB,UAClCnK,EAAI8F,EAAYf,OAChBqF,EAAK,IACLC,EAAK,IAETF,EAAOG,MAAMC,QAAU,OACvB,EAAQ,QAAWC,YAAYL,GAC/BA,EAAOM,IAAM,cAGbP,EAAiBC,EAAOO,cAAcnC,SACtC2B,EAAeS,OACfT,EAAeU,MAAMR,EAAK,SAAWC,EAAK,oBAAsBD,EAAK,UAAYC,GACjFH,EAAeW,QACfZ,EAAaC,EAAe5F,EAC5B,MAAOtE,WAAYiK,EAAWD,GAAWlE,EAAY9F,IACrD,OAAOiK,KAGT3K,EAAOD,QAAUqB,OAAOY,QAAU,SAAgByE,EAAGI,GACnD,IAAIX,EAQJ,OAPU,OAANO,GACFgE,EAAMC,GAAazE,EAASQ,GAC5BP,EAAS,IAAIuE,EACbA,EAAMC,GAAa,KAEnBxE,EAAOsE,GAAY/D,GACdP,EAASyE,SACMhG,IAAfkC,EAA2BX,EAASqE,EAAIrE,EAAQW,K,uBCvCzD,IAAI2E,EAAQ,EAAQ,OAAR,CAAqB,OAC7BC,EAAM,EAAQ,QACdhK,EAAS,EAAQ,QAAaA,OAC9BiK,EAA8B,mBAAVjK,EAEpBkK,EAAW3L,EAAOD,QAAU,SAAUkB,GACxC,OAAOuK,EAAMvK,KAAUuK,EAAMvK,GAC3ByK,GAAcjK,EAAOR,KAAUyK,EAAajK,EAASgK,GAAK,UAAYxK,KAG1E0K,EAASH,MAAQA,G,qBCVjBxL,EAAOD,SAAU,G,qBCAjB,IAAI6L,EAAW,GAAGA,SAElB5L,EAAOD,QAAU,SAAUqJ,GACzB,OAAOwC,EAAS/K,KAAKuI,GAAIxD,MAAM,GAAI,K,oCCDrC,IAAIjD,EAAU,EAAQ,QAClBkJ,EAAU,EAAQ,QAClBC,EAAW,WAEfnJ,EAAQA,EAAQoC,EAAIpC,EAAQqC,EAAI,EAAQ,OAAR,CAA8B8G,GAAW,SAAU,CACjFC,SAAU,SAAkBC,GAC1B,SAAUH,EAAQxL,KAAM2L,EAAcF,GACnCG,QAAQD,EAAcrE,UAAUlC,OAAS,EAAIkC,UAAU,QAAKhD,O,uBCTnE,IAAI+B,EAAK,EAAQ,QACbwF,EAAa,EAAQ,QACzBlM,EAAOD,QAAU,EAAQ,QAAoB,SAAUqC,EAAQH,EAAKN,GAClE,OAAO+E,EAAGI,EAAE1E,EAAQH,EAAKiK,EAAW,EAAGvK,KACrC,SAAUS,EAAQH,EAAKN,GAEzB,OADAS,EAAOH,GAAON,EACPS,I,uBCLT,IAAIyH,EAAM,EAAQ,QACdsC,EAAW,EAAQ,QACnB3B,EAAW,EAAQ,OAAR,CAAyB,YACpC4B,EAAchL,OAAOkB,UAEzBtC,EAAOD,QAAUqB,OAAO6B,gBAAkB,SAAUwD,GAElD,OADAA,EAAI0F,EAAS1F,GACToD,EAAIpD,EAAG+D,GAAkB/D,EAAE+D,GACH,mBAAjB/D,EAAEyB,aAA6BzB,aAAaA,EAAEyB,YAChDzB,EAAEyB,YAAY5F,UACdmE,aAAarF,OAASgL,EAAc,O,oCCV/C,IAAIpK,EAAS,EAAQ,QACjBqK,EAAa,EAAQ,QACrBrJ,EAAiB,EAAQ,QACzBiB,EAAoB,GAGxB,EAAQ,OAAR,CAAmBA,EAAmB,EAAQ,OAAR,CAAkB,aAAa,WAAc,OAAO5D,QAE1FL,EAAOD,QAAU,SAAU4D,EAAaD,EAAME,GAC5CD,EAAYrB,UAAYN,EAAOiC,EAAmB,CAAEL,KAAMyI,EAAW,EAAGzI,KACxEZ,EAAeW,EAAaD,EAAO,e,uBCVrC,IAAIyI,EAAW,EAAQ,QACnB5F,EAAQ,EAAQ,QAEpB,EAAQ,OAAR,CAAyB,QAAQ,WAC/B,OAAO,SAAc6C,GACnB,OAAO7C,EAAM4F,EAAS/C,S,mBCL1B,IAAIkD,EAAOC,KAAKD,KACZE,EAAQD,KAAKC,MACjBxM,EAAOD,QAAU,SAAUqJ,GACzB,OAAOqD,MAAMrD,GAAMA,GAAM,GAAKA,EAAK,EAAIoD,EAAQF,GAAMlD,K,mBCJvDpJ,EAAOD,QAAU,SAAU2M,EAAQ/K,GACjC,MAAO,CACLL,aAAuB,EAAToL,GACdC,eAAyB,EAATD,GAChBE,WAAqB,EAATF,GACZ/K,MAAOA,K,uBCJX,IAAIuD,EAAU,EAAQ,QACtBlF,EAAOD,QAAU,SAAUqJ,GACzB,OAAOhI,OAAO8D,EAAQkE,M,qBCHxB,IAAIyD,EAAQ,EAAQ,OAAR,CAAkB,SAC9B7M,EAAOD,QAAU,SAAU8H,GACzB,IAAIT,EAAK,IACT,IACE,MAAMS,GAAKT,GACX,MAAOoC,GACP,IAEE,OADApC,EAAGyF,IAAS,GACJ,MAAMhF,GAAKT,GACnB,MAAON,KACT,OAAO,I,oCCRX,IAAIgG,EAAc,EAAQ,QAEtBC,EAAalE,OAAOvG,UAAU+E,KAI9B2F,EAAgBxH,OAAOlD,UAAUiF,QAEjC0F,EAAcF,EAEdG,EAAa,YAEbC,EAA2B,WAC7B,IAAIC,EAAM,IACNC,EAAM,MAGV,OAFAN,EAAWlM,KAAKuM,EAAK,KACrBL,EAAWlM,KAAKwM,EAAK,KACM,IAApBD,EAAIF,IAAyC,IAApBG,EAAIH,GALP,GAS3BI,OAAuC3I,IAAvB,OAAO0C,KAAK,IAAI,GAEhCkG,EAAQJ,GAA4BG,EAEpCC,IACFN,EAAc,SAAc1E,GAC1B,IACIiF,EAAWC,EAAQC,EAAOhN,EAD1B0G,EAAK/G,KAwBT,OArBIiN,IACFG,EAAS,IAAI5E,OAAO,IAAMzB,EAAGuG,OAAS,WAAYb,EAAYjM,KAAKuG,KAEjE+F,IAA0BK,EAAYpG,EAAG8F,IAE7CQ,EAAQX,EAAWlM,KAAKuG,EAAImB,GAExB4E,GAA4BO,IAC9BtG,EAAG8F,GAAc9F,EAAGjB,OAASuH,EAAM3H,MAAQ2H,EAAM,GAAGjI,OAAS+H,GAE3DF,GAAiBI,GAASA,EAAMjI,OAAS,GAI3CuH,EAAcnM,KAAK6M,EAAM,GAAID,GAAQ,WACnC,IAAK/M,EAAI,EAAGA,EAAIiH,UAAUlC,OAAS,EAAG/E,SACfiE,IAAjBgD,UAAUjH,KAAkBgN,EAAMhN,QAAKiE,MAK1C+I,IAIX1N,EAAOD,QAAUkN,G,qBCzDjBlN,EAAQ+G,EAAI,GAAG8G,sB,qBCAf,IAAIC,EAAO,EAAQ,QACf1H,EAAS,EAAQ,QACjB2H,EAAS,qBACTtC,EAAQrF,EAAO2H,KAAY3H,EAAO2H,GAAU,KAE/C9N,EAAOD,QAAU,SAAUkC,EAAKN,GAC/B,OAAO6J,EAAMvJ,KAASuJ,EAAMvJ,QAAiB0C,IAAVhD,EAAsBA,EAAQ,MAChE,WAAY,IAAIoM,KAAK,CACtBC,QAASH,EAAKG,QACdnM,KAAM,EAAQ,QAAgB,OAAS,SACvCoM,UAAW,0C,uBCVb,IAAI9H,EAAS,EAAQ,QACjB0H,EAAO,EAAQ,QACfhL,EAAO,EAAQ,QACfD,EAAW,EAAQ,QACnBsL,EAAM,EAAQ,QACdxD,EAAY,YAEZ/H,EAAU,SAAUwL,EAAMlN,EAAM0M,GAClC,IAQI1L,EAAKmM,EAAKC,EAAKC,EARfC,EAAYJ,EAAOxL,EAAQqC,EAC3BwJ,EAAYL,EAAOxL,EAAQ8L,EAC3BC,EAAYP,EAAOxL,EAAQmD,EAC3B6I,EAAWR,EAAOxL,EAAQoC,EAC1B6J,EAAUT,EAAOxL,EAAQ+G,EACzBmF,EAASL,EAAYrI,EAASuI,EAAYvI,EAAOlF,KAAUkF,EAAOlF,GAAQ,KAAOkF,EAAOlF,IAAS,IAAIyJ,GACrG3K,EAAUyO,EAAYX,EAAOA,EAAK5M,KAAU4M,EAAK5M,GAAQ,IACzD6N,EAAW/O,EAAQ2K,KAAe3K,EAAQ2K,GAAa,IAG3D,IAAKzI,KADDuM,IAAWb,EAAS1M,GACZ0M,EAEVS,GAAOG,GAAaM,QAA0BlK,IAAhBkK,EAAO5M,GAErCoM,GAAOD,EAAMS,EAASlB,GAAQ1L,GAE9BqM,EAAMM,GAAWR,EAAMF,EAAIG,EAAKlI,GAAUwI,GAA0B,mBAAPN,EAAoBH,EAAI5D,SAASzJ,KAAMwN,GAAOA,EAEvGQ,GAAQjM,EAASiM,EAAQ5M,EAAKoM,EAAKF,EAAOxL,EAAQoM,GAElDhP,EAAQkC,IAAQoM,GAAKxL,EAAK9C,EAASkC,EAAKqM,GACxCK,GAAYG,EAAS7M,IAAQoM,IAAKS,EAAS7M,GAAOoM,IAG1DlI,EAAO0H,KAAOA,EAEdlL,EAAQqC,EAAI,EACZrC,EAAQ8L,EAAI,EACZ9L,EAAQmD,EAAI,EACZnD,EAAQoC,EAAI,EACZpC,EAAQ+G,EAAI,GACZ/G,EAAQqM,EAAI,GACZrM,EAAQoM,EAAI,GACZpM,EAAQsM,EAAI,IACZjP,EAAOD,QAAU4C,G,uBCzCjB,IAAIA,EAAU,EAAQ,QAClBkL,EAAO,EAAQ,QACf9G,EAAQ,EAAQ,QACpB/G,EAAOD,QAAU,SAAU8H,EAAKR,GAC9B,IAAI6H,GAAMrB,EAAKzM,QAAU,IAAIyG,IAAQzG,OAAOyG,GACxCyG,EAAM,GACVA,EAAIzG,GAAOR,EAAK6H,GAChBvM,EAAQA,EAAQmD,EAAInD,EAAQqC,EAAI+B,GAAM,WAAcmI,EAAG,MAAQ,SAAUZ,K,oCCN3E,IAAIa,EAAU,EAAQ,QAClBC,EAAcvG,OAAOvG,UAAU+E,KAInCrH,EAAOD,QAAU,SAAUkP,EAAGnJ,GAC5B,IAAIuB,EAAO4H,EAAE5H,KACb,GAAoB,oBAATA,EAAqB,CAC9B,IAAInB,EAASmB,EAAKxG,KAAKoO,EAAGnJ,GAC1B,GAAsB,kBAAXI,EACT,MAAM,IAAImJ,UAAU,sEAEtB,OAAOnJ,EAET,GAAmB,WAAfiJ,EAAQF,GACV,MAAM,IAAII,UAAU,+CAEtB,OAAOD,EAAYvO,KAAKoO,EAAGnJ,K,uBCnB7B,IAAIwJ,EAAS,EAAQ,OAAR,CAAqB,QAC9B7D,EAAM,EAAQ,QAClBzL,EAAOD,QAAU,SAAUkC,GACzB,OAAOqN,EAAOrN,KAASqN,EAAOrN,GAAOwJ,EAAIxJ,M,uBCF3C,IAAIoH,EAAM,EAAQ,QAElBrJ,EAAOD,QAAUqB,OAAO,KAAKwM,qBAAqB,GAAKxM,OAAS,SAAUgI,GACxE,MAAkB,UAAXC,EAAID,GAAkBA,EAAGxB,MAAM,IAAMxG,OAAOgI,K,kCCFrD,IAAIzG,EAAU,EAAQ,QAClB4M,EAAY,EAAQ,OAAR,EAA6B,GAE7C5M,EAAQA,EAAQoC,EAAG,QAAS,CAC1BgH,SAAU,SAAkByD,GAC1B,OAAOD,EAAUlP,KAAMmP,EAAI7H,UAAUlC,OAAS,EAAIkC,UAAU,QAAKhD,MAIrE,EAAQ,OAAR,CAAiC,a,qBCVjC,IAAI8K,EAAU,EAAQ,QAClBvK,EAAU,EAAQ,QACtBlF,EAAOD,QAAU,SAAUqJ,GACzB,OAAOqG,EAAQvK,EAAQkE,M,qBCJzB,IAAI7G,EAAiB,GAAGA,eACxBvC,EAAOD,QAAU,SAAUqJ,EAAInH,GAC7B,OAAOM,EAAe1B,KAAKuI,EAAInH,K,uBCDjC,IAAI+G,EAAW,EAAQ,QAGvBhJ,EAAOD,QAAU,SAAUqJ,EAAItD,GAC7B,IAAKkD,EAASI,GAAK,OAAOA,EAC1B,IAAI8F,EAAIhF,EACR,GAAIpE,GAAkC,mBAArBoJ,EAAK9F,EAAGwC,YAA4B5C,EAASkB,EAAMgF,EAAGrO,KAAKuI,IAAM,OAAOc,EACzF,GAAgC,mBAApBgF,EAAK9F,EAAGsG,WAA2B1G,EAASkB,EAAMgF,EAAGrO,KAAKuI,IAAM,OAAOc,EACnF,IAAKpE,GAAkC,mBAArBoJ,EAAK9F,EAAGwC,YAA4B5C,EAASkB,EAAMgF,EAAGrO,KAAKuI,IAAM,OAAOc,EAC1F,MAAMmF,UAAU,6C,kCCRlB,IAAI1I,EAAU,EAAQ,QAClBgJ,EAAO,EAAQ,QACfC,EAAM,EAAQ,QACdzD,EAAW,EAAQ,QACnBsD,EAAU,EAAQ,QAClBI,EAAUzO,OAAO0O,OAGrB9P,EAAOD,SAAW8P,GAAW,EAAQ,OAAR,EAAoB,WAC/C,IAAIE,EAAI,GACJrG,EAAI,GAEJ5D,EAAIrE,SACJuO,EAAI,uBAGR,OAFAD,EAAEjK,GAAK,EACPkK,EAAEpI,MAAM,IAAIqI,SAAQ,SAAUC,GAAKxG,EAAEwG,GAAKA,KACd,GAArBL,EAAQ,GAAIE,GAAGjK,IAAW1E,OAAOgC,KAAKyM,EAAQ,GAAInG,IAAIW,KAAK,KAAO2F,KACtE,SAAgBnB,EAAQlB,GAC3B,IAAIlE,EAAI0C,EAAS0C,GACbsB,EAAOxI,UAAUlC,OACjBM,EAAQ,EACRqK,EAAaT,EAAK7I,EAClBuJ,EAAST,EAAI9I,EACjB,MAAOqJ,EAAOpK,EAAO,CACnB,IAII9D,EAJA6D,EAAI2J,EAAQ9H,UAAU5B,MACtB3C,EAAOgN,EAAazJ,EAAQb,GAAGwK,OAAOF,EAAWtK,IAAMa,EAAQb,GAC/DL,EAASrC,EAAKqC,OACd8K,EAAI,EAER,MAAO9K,EAAS8K,EAAOF,EAAOxP,KAAKiF,EAAG7D,EAAMmB,EAAKmN,QAAO9G,EAAExH,GAAO6D,EAAE7D,IACnE,OAAOwH,GACPoG,G,mBChCJ,IAAI1J,EAASnG,EAAOD,QAA2B,oBAAVyQ,QAAyBA,OAAOjE,MAAQA,KACzEiE,OAAwB,oBAARpQ,MAAuBA,KAAKmM,MAAQA,KAAOnM,KAE3DkK,SAAS,cAATA,GACc,iBAAPmG,MAAiBA,IAAMtK,I,uBCLlC,IAAIlB,EAAY,EAAQ,QACpByL,EAAMnE,KAAKmE,IACXC,EAAMpE,KAAKoE,IACf3Q,EAAOD,QAAU,SAAUgG,EAAON,GAEhC,OADAM,EAAQd,EAAUc,GACXA,EAAQ,EAAI2K,EAAI3K,EAAQN,EAAQ,GAAKkL,EAAI5K,EAAON,K,qBCLzDzF,EAAOD,QAAU,SAAUsH,GACzB,IACE,QAASA,IACT,MAAOmC,GACP,OAAO,K,uBCJX,IAAIoH,EAAM,EAAQ,QAAgB9J,EAC9B+C,EAAM,EAAQ,QACdxF,EAAM,EAAQ,OAAR,CAAkB,eAE5BrE,EAAOD,QAAU,SAAUqJ,EAAIyH,EAAKC,GAC9B1H,IAAOS,EAAIT,EAAK0H,EAAO1H,EAAKA,EAAG9G,UAAW+B,IAAMuM,EAAIxH,EAAI/E,EAAK,CAAEsI,cAAc,EAAMhL,MAAOkP,M,mBCLhG,IAAIhD,EAAO7N,EAAOD,QAAU,CAAEiO,QAAS,SACrB,iBAAP+C,MAAiBA,IAAMlD,I,qBCDlC7N,EAAOD,QAAU,I,uBCAjB,IAAIkG,EAAW,EAAQ,QACnB+K,EAAiB,EAAQ,QACzBC,EAAc,EAAQ,QACtBvK,EAAKtF,OAAOC,eAEhBtB,EAAQ+G,EAAI,EAAQ,QAAoB1F,OAAOC,eAAiB,SAAwBoF,EAAG1B,EAAGmM,GAI5F,GAHAjL,EAASQ,GACT1B,EAAIkM,EAAYlM,GAAG,GACnBkB,EAASiL,GACLF,EAAgB,IAClB,OAAOtK,EAAGD,EAAG1B,EAAGmM,GAChB,MAAO1H,IACT,GAAI,QAAS0H,GAAc,QAASA,EAAY,MAAM7B,UAAU,4BAEhE,MADI,UAAW6B,IAAYzK,EAAE1B,GAAKmM,EAAWvP,OACtC8E,I,uBCbT,IAAI0K,EAAY,EAAQ,QACxBnR,EAAOD,QAAU,SAAUmP,EAAI9J,EAAMK,GAEnC,GADA0L,EAAUjC,QACGvK,IAATS,EAAoB,OAAO8J,EAC/B,OAAQzJ,GACN,KAAK,EAAG,OAAO,SAAUH,GACvB,OAAO4J,EAAGrO,KAAKuE,EAAME,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAGC,GAC1B,OAAO2J,EAAGrO,KAAKuE,EAAME,EAAGC,IAE1B,KAAK,EAAG,OAAO,SAAUD,EAAGC,EAAGxE,GAC7B,OAAOmO,EAAGrO,KAAKuE,EAAME,EAAGC,EAAGxE,IAG/B,OAAO,WACL,OAAOmO,EAAGxH,MAAMtC,EAAMuC,c,uBChB1B,IAAIyJ,EAAc,EAAQ,OAAR,CAAkB,eAChCC,EAAaC,MAAMhP,eACQqC,GAA3B0M,EAAWD,IAA2B,EAAQ,OAAR,CAAmBC,EAAYD,EAAa,IACtFpR,EAAOD,QAAU,SAAUkC,GACzBoP,EAAWD,GAAanP,IAAO,I,uBCJjC,IAAIgD,EAAY,EAAQ,QACpB0L,EAAMpE,KAAKoE,IACf3Q,EAAOD,QAAU,SAAUqJ,GACzB,OAAOA,EAAK,EAAIuH,EAAI1L,EAAUmE,GAAK,kBAAoB,I,uBCHzDpJ,EAAOD,SAAW,EAAQ,OAAR,EAAoB,WACpC,OAA+E,GAAxEqB,OAAOC,eAAe,GAAI,IAAK,CAAEE,IAAK,WAAc,OAAO,KAAQ+D,M,mBCF5EtF,EAAOD,QAAUO,G,kCCEjB,IAAI2F,EAAW,EAAQ,QACnBkG,EAAW,EAAQ,QACnBoF,EAAW,EAAQ,QACnBtM,EAAY,EAAQ,QACpBuM,EAAqB,EAAQ,QAC7BC,EAAa,EAAQ,QACrBf,EAAMnE,KAAKmE,IACXC,EAAMpE,KAAKoE,IACXnE,EAAQD,KAAKC,MACbkF,EAAuB,4BACvBC,EAAgC,oBAEhCC,EAAgB,SAAUxI,GAC5B,YAAczE,IAAPyE,EAAmBA,EAAK5D,OAAO4D,IAIxC,EAAQ,OAAR,CAAyB,UAAW,GAAG,SAAUlE,EAAS2M,EAASC,EAAUC,GAC3E,MAAO,CAGL,SAAiBC,EAAaC,GAC5B,IAAIxL,EAAIvB,EAAQ7E,MACZ6O,OAAoBvK,GAAfqN,OAA2BrN,EAAYqN,EAAYH,GAC5D,YAAclN,IAAPuK,EACHA,EAAGrO,KAAKmR,EAAavL,EAAGwL,GACxBH,EAASjR,KAAK2E,OAAOiB,GAAIuL,EAAaC,IAI5C,SAAU3J,EAAQ2J,GAChB,IAAIC,EAAMH,EAAgBD,EAAUxJ,EAAQjI,KAAM4R,GAClD,GAAIC,EAAIxJ,KAAM,OAAOwJ,EAAIvQ,MAEzB,IAAIwQ,EAAKlM,EAASqC,GACdxC,EAAIN,OAAOnF,MACX+R,EAA4C,oBAAjBH,EAC1BG,IAAmBH,EAAezM,OAAOyM,IAC9C,IAAI9L,EAASgM,EAAGhM,OAChB,GAAIA,EAAQ,CACV,IAAIkM,EAAcF,EAAGnM,QACrBmM,EAAG3E,UAAY,EAEjB,IAAI8E,EAAU,GACd,MAAO,EAAM,CACX,IAAIpM,EAASuL,EAAWU,EAAIrM,GAC5B,GAAe,OAAXI,EAAiB,MAErB,GADAoM,EAAQvE,KAAK7H,IACRC,EAAQ,MACb,IAAIoM,EAAW/M,OAAOU,EAAO,IACZ,KAAbqM,IAAiBJ,EAAG3E,UAAYgE,EAAmB1L,EAAGyL,EAASY,EAAG3E,WAAY6E,IAIpF,IAFA,IAAIG,EAAoB,GACpBC,EAAqB,EAChB/R,EAAI,EAAGA,EAAI4R,EAAQ7M,OAAQ/E,IAAK,CACvCwF,EAASoM,EAAQ5R,GASjB,IARA,IAAIgS,EAAUlN,OAAOU,EAAO,IACxByM,EAAWjC,EAAIC,EAAI1L,EAAUiB,EAAOH,OAAQD,EAAEL,QAAS,GACvDmN,EAAW,GAMNrC,EAAI,EAAGA,EAAIrK,EAAOT,OAAQ8K,IAAKqC,EAAS7E,KAAK6D,EAAc1L,EAAOqK,KAC3E,IAAIsC,EAAgB3M,EAAOoB,OAC3B,GAAI8K,EAAmB,CACrB,IAAIU,EAAe,CAACJ,GAASpC,OAAOsC,EAAUD,EAAU7M,QAClCnB,IAAlBkO,GAA6BC,EAAa/E,KAAK8E,GACnD,IAAIE,EAAcvN,OAAOyM,EAAavK,WAAM/C,EAAWmO,SAEvDC,EAAcC,EAAgBN,EAAS5M,EAAG6M,EAAUC,EAAUC,EAAeZ,GAE3EU,GAAYF,IACdD,GAAqB1M,EAAEF,MAAM6M,EAAoBE,GAAYI,EAC7DN,EAAqBE,EAAWD,EAAQjN,QAG5C,OAAO+M,EAAoB1M,EAAEF,MAAM6M,KAKvC,SAASO,EAAgBN,EAASnK,EAAKoK,EAAUC,EAAUC,EAAeE,GACxE,IAAIE,EAAUN,EAAWD,EAAQjN,OAC7B3E,EAAI8R,EAASnN,OACbyN,EAAUvB,EAKd,YAJsBhN,IAAlBkO,IACFA,EAAgB1G,EAAS0G,GACzBK,EAAUxB,GAELI,EAASjR,KAAKkS,EAAaG,GAAS,SAAUxF,EAAOyF,GAC1D,IAAIC,EACJ,OAAQD,EAAGxN,OAAO,IAChB,IAAK,IAAK,MAAO,IACjB,IAAK,IAAK,OAAO+M,EACjB,IAAK,IAAK,OAAOnK,EAAI3C,MAAM,EAAG+M,GAC9B,IAAK,IAAK,OAAOpK,EAAI3C,MAAMqN,GAC3B,IAAK,IACHG,EAAUP,EAAcM,EAAGvN,MAAM,GAAI,IACrC,MACF,QACE,IAAIzD,GAAKgR,EACT,GAAU,IAANhR,EAAS,OAAOuL,EACpB,GAAIvL,EAAIrB,EAAG,CACT,IAAIgG,EAAI0F,EAAMrK,EAAI,IAClB,OAAU,IAAN2E,EAAgB4G,EAChB5G,GAAKhG,OAA8B6D,IAApBiO,EAAS9L,EAAI,GAAmBqM,EAAGxN,OAAO,GAAKiN,EAAS9L,EAAI,GAAKqM,EAAGxN,OAAO,GACvF+H,EAET0F,EAAUR,EAASzQ,EAAI,GAE3B,YAAmBwC,IAAZyO,EAAwB,GAAKA,U,qBCjH1C,IAAIpK,EAAW,EAAQ,QACnBK,EAAM,EAAQ,QACdwD,EAAQ,EAAQ,OAAR,CAAkB,SAC9B7M,EAAOD,QAAU,SAAUqJ,GACzB,IAAIiK,EACJ,OAAOrK,EAASI,UAAmCzE,KAA1B0O,EAAWjK,EAAGyD,MAA0BwG,EAAsB,UAAXhK,EAAID,M,qBCuClF,IA7CA,IAAIkK,EAAa,EAAQ,QACrB3M,EAAU,EAAQ,QAClB/D,EAAW,EAAQ,QACnBuD,EAAS,EAAQ,QACjBtD,EAAO,EAAQ,QACfC,EAAY,EAAQ,QACpBkE,EAAM,EAAQ,QACd9D,EAAW8D,EAAI,YACfuM,EAAgBvM,EAAI,eACpBwM,EAAc1Q,EAAUwO,MAExBmC,EAAe,CACjBC,aAAa,EACbC,qBAAqB,EACrBC,cAAc,EACdC,gBAAgB,EAChBC,aAAa,EACbC,eAAe,EACfC,cAAc,EACdC,sBAAsB,EACtBC,UAAU,EACVC,mBAAmB,EACnBC,gBAAgB,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,UAAU,EACVC,kBAAkB,EAClBC,QAAQ,EACRC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,EACdC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAgB,EAChBC,kBAAkB,EAClBC,eAAe,EACfC,WAAW,GAGJC,EAAc9O,EAAQ8M,GAAe/S,EAAI,EAAGA,EAAI+U,EAAYhQ,OAAQ/E,IAAK,CAChF,IAIIuB,EAJAyB,EAAO+R,EAAY/U,GACnBgV,EAAWjC,EAAa/P,GACxBiS,EAAaxP,EAAOzC,GACpBU,EAAQuR,GAAcA,EAAWrT,UAErC,GAAI8B,IACGA,EAAMlB,IAAWL,EAAKuB,EAAOlB,EAAUsQ,GACvCpP,EAAMmP,IAAgB1Q,EAAKuB,EAAOmP,EAAe7P,GACtDZ,EAAUY,GAAQ8P,EACdkC,GAAU,IAAKzT,KAAOqR,EAAiBlP,EAAMnC,IAAMW,EAASwB,EAAOnC,EAAKqR,EAAWrR,IAAM,K,kCCtDjG,IAAIgF,EAAa,EAAQ,QACzB,EAAQ,OAAR,CAAqB,CACnB4H,OAAQ,SACRzK,OAAO,EACPwR,OAAQ3O,IAAe,IAAII,MAC1B,CACDA,KAAMJ,K,mBCNRjH,EAAOD,QAAU,SAAUqJ,GACzB,QAAUzE,GAANyE,EAAiB,MAAMiG,UAAU,yBAA2BjG,GAChE,OAAOA,I,qBCDT,IAAIyM,EAAY,EAAQ,QACpBtE,EAAW,EAAQ,QACnBuE,EAAkB,EAAQ,QAC9B9V,EAAOD,QAAU,SAAUgW,GACzB,OAAO,SAAUC,EAAOxG,EAAIyG,GAC1B,IAGItU,EAHA8E,EAAIoP,EAAUG,GACdvQ,EAAS8L,EAAS9K,EAAEhB,QACpBM,EAAQ+P,EAAgBG,EAAWxQ,GAIvC,GAAIsQ,GAAevG,GAAMA,GAAI,MAAO/J,EAASM,EAG3C,GAFApE,EAAQ8E,EAAEV,KAENpE,GAASA,EAAO,OAAO,OAEtB,KAAM8D,EAASM,EAAOA,IAAS,IAAIgQ,GAAehQ,KAASU,IAC5DA,EAAEV,KAAWyJ,EAAI,OAAOuG,GAAehQ,GAAS,EACpD,OAAQgQ,IAAgB,K,iMCpB9B,SAASG,IACP,MAAsB,qBAAX1F,OACFA,OAAO2F,QAEThQ,EAAOgQ,QAEhB,IAAMA,EAAUD,IAEhB,SAASE,EAAOlH,GACd,IAAMmH,EAAQjV,OAAOY,OAAO,MAC5B,OAAO,SAAkBuG,GACvB,IAAM+N,EAAMD,EAAM9N,GAClB,OAAO+N,IAAQD,EAAM9N,GAAO2G,EAAG3G,KAInC,IAAMgO,EAAQ,SACRC,EAAWJ,GAAO,SAAA7N,GAAG,OACzBA,EAAIhB,QAAQgP,GAAO,SAACE,EAAG1V,GAAJ,OAAWA,EAAIA,EAAE2V,cAAgB,SAGtD,SAASC,EAAWC,GACS,OAAvBA,EAAKC,eACPD,EAAKC,cAAcC,YAAYF,GAInC,SAASG,EAAaC,EAAYJ,EAAMjE,GACtC,IAAMsE,EACS,IAAbtE,EACIqE,EAAWE,SAAS,GACpBF,EAAWE,SAASvE,EAAW,GAAGwE,YACxCH,EAAWI,aAAaR,EAAMK,M,2CChChCjX,EAAOD,SAAW,EAAQ,UAAsB,EAAQ,OAAR,EAAoB,WAClE,OAA4G,GAArGqB,OAAOC,eAAe,EAAQ,OAAR,CAAyB,OAAQ,IAAK,CAAEE,IAAK,WAAc,OAAO,KAAQ+D,M,mBCDzG,IAAI+R,EAGJA,EAAI,WACH,OAAOhX,KADJ,GAIJ,IAECgX,EAAIA,GAAK,IAAI/M,SAAS,cAAb,GACR,MAAOd,GAEc,kBAAXgH,SAAqB6G,EAAI7G,QAOrCxQ,EAAOD,QAAUsX,G,mBCnBjB,IAAIC,EAAK,EACLC,EAAKhL,KAAKiL,SACdxX,EAAOD,QAAU,SAAUkC,GACzB,MAAO,UAAUqO,YAAe3L,IAAR1C,EAAoB,GAAKA,EAAK,QAASqV,EAAKC,GAAI3L,SAAS,O,kCCFnF,IAAI6L,EAAmB,EAAQ,QAC3BC,EAAO,EAAQ,QACf5U,EAAY,EAAQ,QACpB+S,EAAY,EAAQ,QAMxB7V,EAAOD,QAAU,EAAQ,OAAR,CAA0BuR,MAAO,SAAS,SAAUqG,EAAUxT,GAC7E9D,KAAKuX,GAAK/B,EAAU8B,GACpBtX,KAAKwX,GAAK,EACVxX,KAAKyX,GAAK3T,KAET,WACD,IAAIsC,EAAIpG,KAAKuX,GACTzT,EAAO9D,KAAKyX,GACZ/R,EAAQ1F,KAAKwX,KACjB,OAAKpR,GAAKV,GAASU,EAAEhB,QACnBpF,KAAKuX,QAAKjT,EACH+S,EAAK,IAEaA,EAAK,EAApB,QAARvT,EAA+B4B,EACvB,UAAR5B,EAAiCsC,EAAEV,GACxB,CAACA,EAAOU,EAAEV,OACxB,UAGHjD,EAAUiV,UAAYjV,EAAUwO,MAEhCmG,EAAiB,QACjBA,EAAiB,UACjBA,EAAiB,Y,qBCjCjB,IAAIzO,EAAW,EAAQ,QACvBhJ,EAAOD,QAAU,SAAUqJ,GACzB,IAAKJ,EAASI,GAAK,MAAMiG,UAAUjG,EAAK,sBACxC,OAAOA,I,qBCHT,IAAIS,EAAM,EAAQ,QACdgM,EAAY,EAAQ,QACpBmC,EAAe,EAAQ,OAAR,EAA6B,GAC5CxN,EAAW,EAAQ,OAAR,CAAyB,YAExCxK,EAAOD,QAAU,SAAUqC,EAAQ6V,GACjC,IAGIhW,EAHAwE,EAAIoP,EAAUzT,GACd1B,EAAI,EACJwF,EAAS,GAEb,IAAKjE,KAAOwE,EAAOxE,GAAOuI,GAAUX,EAAIpD,EAAGxE,IAAQiE,EAAO6H,KAAK9L,GAE/D,MAAOgW,EAAMxS,OAAS/E,EAAOmJ,EAAIpD,EAAGxE,EAAMgW,EAAMvX,SAC7CsX,EAAa9R,EAAQjE,IAAQiE,EAAO6H,KAAK9L,IAE5C,OAAOiE,I,qBCdT,IAAImN,EAAW,EAAQ,QACnBnO,EAAU,EAAQ,QAEtBlF,EAAOD,QAAU,SAAUqF,EAAM4G,EAActI,GAC7C,GAAI2P,EAASrH,GAAe,MAAMqD,UAAU,UAAY3L,EAAO,0BAC/D,OAAO8B,OAAON,EAAQE,M,mBCNxBpF,EAAOD,QAAU,SAAUqJ,GACzB,MAAqB,kBAAPA,EAAyB,OAAPA,EAA4B,oBAAPA,I,mBCDvDpJ,EAAOD,QAAU,SAAU2I,EAAM/G,GAC/B,MAAO,CAAEA,MAAOA,EAAO+G,OAAQA,K,mBCDjC1I,EAAOD,QAAU,SAAUqJ,GACzB,GAAiB,mBAANA,EAAkB,MAAMiG,UAAUjG,EAAK,uBAClD,OAAOA,I,mBCDTpJ,EAAOD,QAAU,gGAEf6H,MAAM,M,kCCDR,IAAIjF,EAAU,EAAQ,QAClB4O,EAAW,EAAQ,QACnB1F,EAAU,EAAQ,QAClBqM,EAAc,aACdC,EAAc,GAAGD,GAErBvV,EAAQA,EAAQoC,EAAIpC,EAAQqC,EAAI,EAAQ,OAAR,CAA8BkT,GAAc,SAAU,CACpFE,WAAY,SAAoBpM,GAC9B,IAAI5G,EAAOyG,EAAQxL,KAAM2L,EAAckM,GACnCnS,EAAQwL,EAAShF,KAAKoE,IAAIhJ,UAAUlC,OAAS,EAAIkC,UAAU,QAAKhD,EAAWS,EAAKK,SAChF4S,EAAS7S,OAAOwG,GACpB,OAAOmM,EACHA,EAAYtX,KAAKuE,EAAMiT,EAAQtS,GAC/BX,EAAKQ,MAAMG,EAAOA,EAAQsS,EAAO5S,UAAY4S,M,oBCXrD,SAAUpP,GACR,IAAIqP,EAAgB,gBAChBC,EAAUtP,EAASuP,qBAAqB,UAGtCF,KAAiBrP,GACrB7H,OAAOC,eAAe4H,EAAUqP,EAAe,CAC7C/W,IAAK,WAIH,IAAM,MAAM,IAAIkX,MAChB,MAAOC,GAIL,IAAIhY,EAAGwR,GAAO,+BAAiC7K,KAAKqR,EAAIC,QAAU,EAAC,IAAQ,GAG3E,IAAIjY,KAAK6X,EACP,GAAGA,EAAQ7X,GAAGyK,KAAO+G,GAAgC,eAAzBqG,EAAQ7X,GAAGkY,WACrC,OAAOL,EAAQ7X,GAKnB,OAAO,UA1BjB,CA+BGuI,W,qBClCH,IAAItG,EAAU,EAAQ,QAEtBA,EAAQA,EAAQmD,EAAInD,EAAQqC,EAAG,SAAU,CAAE8K,OAAQ,EAAQ,W,qBCH3D9P,EAAOD,QAAU,EAAQ,OAAR,CAAqB,4BAA6BuK,SAASsB,W,qBCA5E,IAAI3C,EAAW,EAAQ,QAAaA,SACpCjJ,EAAOD,QAAUkJ,GAAYA,EAAS4P,iB,kCCMpC,IAAI,G,OALgB,qBAAXrI,UAEP,EAAQ,SAIL,EAAIA,OAAOvH,SAASqP,iBAAmB,EAAI,EAAEnN,IAAIuC,MAAM,8BAC1D,IAA0B,EAAE,K,kDCTjB,SAASoL,EAAgBC,GACtC,GAAIzH,MAAM0H,QAAQD,GAAM,OAAOA,ECDlB,SAASE,EAAsBF,EAAKrY,GACjD,GAAsB,qBAAXe,QAA4BA,OAAOyX,YAAY9X,OAAO2X,GAAjE,CACA,IAAII,EAAO,GACPC,GAAK,EACLC,GAAK,EACLC,OAAK3U,EAET,IACE,IAAK,IAAiC4U,EAA7B1B,EAAKkB,EAAItX,OAAOyX,cAAmBE,GAAMG,EAAK1B,EAAGjU,QAAQ8E,MAAO0Q,GAAK,EAG5E,GAFAD,EAAKpL,KAAKwL,EAAG5X,OAETjB,GAAKyY,EAAK1T,SAAW/E,EAAG,MAE9B,MAAOgY,GACPW,GAAK,EACLC,EAAKZ,EACL,QACA,IACOU,GAAsB,MAAhBvB,EAAG,WAAmBA,EAAG,YACpC,QACA,GAAIwB,EAAI,MAAMC,GAIlB,OAAOH,GCxBM,SAASK,EAAkBT,EAAKU,IAClC,MAAPA,GAAeA,EAAMV,EAAItT,UAAQgU,EAAMV,EAAItT,QAE/C,IAAK,IAAI/E,EAAI,EAAGgZ,EAAO,IAAIpI,MAAMmI,GAAM/Y,EAAI+Y,EAAK/Y,IAC9CgZ,EAAKhZ,GAAKqY,EAAIrY,GAGhB,OAAOgZ,ECNM,SAASC,EAA4BxY,EAAGyY,GACrD,GAAKzY,EAAL,CACA,GAAiB,kBAANA,EAAgB,OAAO,EAAiBA,EAAGyY,GACtD,IAAIzX,EAAIf,OAAOkB,UAAUsJ,SAAS/K,KAAKM,GAAGyE,MAAM,GAAI,GAEpD,MADU,WAANzD,GAAkBhB,EAAE+G,cAAa/F,EAAIhB,EAAE+G,YAAYjH,MAC7C,QAANkB,GAAqB,QAANA,EAAoBmP,MAAMuI,KAAK1Y,GACxC,cAANgB,GAAqB,2CAA2C2X,KAAK3X,GAAW,EAAiBhB,EAAGyY,QAAxG,GCPa,SAASG,IACtB,MAAM,IAAI1K,UAAU,6ICGP,SAAS2K,EAAejB,EAAKrY,GAC1C,OAAO,EAAeqY,IAAQ,EAAqBA,EAAKrY,IAAM,EAA2BqY,EAAKrY,IAAM,I,oBCJvF,SAASuZ,EAAmBlB,GACzC,GAAIzH,MAAM0H,QAAQD,GAAM,OAAO,EAAiBA,GCFnC,SAASmB,EAAiBC,GACvC,GAAsB,qBAAX1Y,QAA0BA,OAAOyX,YAAY9X,OAAO+Y,GAAO,OAAO7I,MAAMuI,KAAKM,GCD3E,SAASC,IACtB,MAAM,IAAI/K,UAAU,wICGP,SAASgL,EAAmBtB,GACzC,OAAO,EAAkBA,IAAQ,EAAgBA,IAAQ,EAA2BA,IAAQ,I,qCCF9F,SAASuB,EAAelY,EAAQmY,EAAU5Y,GACxC,YAAcgD,IAAVhD,IAGJS,EAASA,GAAU,GACnBA,EAAOmY,GAAY5Y,GAHVS,EAOX,SAASoY,EAAeC,EAAQC,GAC9B,OAAOD,EAAOE,KAAI,SAAAC,GAAG,OAAIA,EAAIC,OAAK5O,QAAQyO,GAG5C,SAASI,EAAeC,EAAO7D,EAAU8D,EAAcC,GACrD,IAAKF,EACH,MAAO,GAGT,IAAMG,EAAeH,EAAMJ,KAAI,SAAAC,GAAG,OAAIA,EAAIC,OACpCM,EAAcjE,EAASzR,OAASwV,EAChCG,EAAa,EAAIlE,GAAUyD,KAAI,SAACC,EAAKS,GAAN,OACnCA,GAAOF,EAAcD,EAAazV,OAASyV,EAAajP,QAAQ2O,MAElE,OAAOI,EAAeI,EAAWE,QAAO,SAAAC,GAAG,OAAa,IAATA,KAAcH,EAG/D,SAASI,EAAKC,EAASC,GAAS,WAC9Brb,KAAKsb,WAAU,kBAAM,EAAKC,MAAMH,EAAQI,cAAeH,MAGzD,SAASI,EAAgBL,GAAS,WAChC,OAAO,SAAAC,GACiB,OAAlB,EAAKK,UACP,EAAK,SAAWN,GAASC,GAE3BF,EAAK3a,KAAK,EAAM4a,EAASC,IAI7B,SAASM,EAAiB/a,GACxB,MAAO,CAAC,mBAAoB,mBAAmB8K,SAAS9K,GAG1D,SAAS+Z,EAAaD,GACpB,IAAKA,GAA0B,IAAjBA,EAAMtV,OAClB,OAAO,EAFkB,QAIIsV,EAJJ,GAIlBkB,EAJkB,KAIlBA,iBACT,QAAKA,GAGED,EAAiBC,EAAiBpL,KAG3C,SAASqL,EAAQC,EAAMC,EAAYna,GACjC,OAAOka,EAAKla,KAASma,EAAWna,GAAOma,EAAWna,UAAS0C,GAG7D,SAAS0X,EAA0BnF,EAAUiF,EAAMC,GACjD,IAAIE,EAAe,EACfrB,EAAe,EACbsB,EAASL,EAAQC,EAAMC,EAAY,UACrCG,IACFD,EAAeC,EAAO9W,OACtByR,EAAWA,EAAW,GAAH,SAAOqF,GAAP,EAAkBrF,IAAlB,EAAkCqF,IAEvD,IAAMC,EAASN,EAAQC,EAAMC,EAAY,UAKzC,OAJII,IACFvB,EAAeuB,EAAO/W,OACtByR,EAAWA,EAAW,GAAH,SAAOA,GAAP,EAAoBsF,IAApB,EAAkCA,IAEhD,CAAEtF,WAAUoF,eAAcrB,gBAGnC,SAASwB,EAAuBC,EAAQC,GACtC,IAAIC,EAAa,KACXC,EAAS,SAAC5b,EAAMU,GACpBib,EAAatC,EAAesC,EAAY3b,EAAMU,IAE1Cmb,EAAQ1b,OAAOgC,KAAKsZ,GACvBpB,QAAO,SAAArZ,GAAG,MAAY,OAARA,GAAgBA,EAAImW,WAAW,YAC7C2E,QAAO,SAAC7K,EAAKjQ,GAEZ,OADAiQ,EAAIjQ,GAAOya,EAAOza,GACXiQ,IACN,IAGL,GAFA2K,EAAO,QAASC,IAEXH,EACH,OAAOC,EAd4C,IAgB7CI,EAAyCL,EAAzCK,GAAIC,EAAqCN,EAArCM,MAAcC,EAAuBP,EAA9BG,MAInB,OAHAD,EAAO,KAAMG,GACbH,EAAO,QAASI,GAChB7b,OAAO0O,OAAO8M,EAAWE,MAAOI,GACzBN,EAGT,IAAMO,EAAiB,CAAC,QAAS,MAAO,SAAU,SAAU,OACtDC,EAAe,CAAC,SAAU,WAAY,OAAQ,SAAU,SACxDC,EAAqB,CAAC,QAAD,OAAYF,EAAmBC,GAAczC,KACtE,SAAA2C,GAAG,MAAI,KAAOA,KAEZC,EAAkB,KAEhBN,EAAQ,CACZO,QAASpc,OACTqc,KAAM,CACJtP,KAAMmD,MACNoM,UAAU,EACVC,QAAS,MAEXhc,MAAO,CACLwM,KAAMmD,MACNoM,UAAU,EACVC,QAAS,MAEXC,mBAAoB,CAClBzP,KAAM0P,QACNF,SAAS,GAEXG,MAAO,CACL3P,KAAM7D,SACNqT,QAAS,SAAAI,GACP,OAAOA,IAGXrD,QAAS,CACPvM,KAAM3I,OACNmY,QAAS,OAEX9M,IAAK,CACH1C,KAAM3I,OACNmY,QAAS,MAEXK,KAAM,CACJ7P,KAAM7D,SACNqT,QAAS,MAEXhB,cAAe,CACbxO,KAAM/M,OACNsc,UAAU,EACVC,QAAS,OAIPM,EAAqB,CACzBhd,KAAM,YAENid,cAAc,EAEdjB,QAEAkB,KAPyB,WAQvB,MAAO,CACLC,gBAAgB,EAChBC,6BAA6B,IAIjCC,OAdyB,SAclBC,GACL,IAAMxD,EAAQ1a,KAAKme,OAAOb,QAC1Btd,KAAK+d,eAAiBpD,EAAaD,GAF3B,MAGyCsB,EAC/CtB,EACA1a,KAAKme,OACLne,KAAKoe,cAHCvH,EAHA,EAGAA,SAAUoF,EAHV,EAGUA,aAAcrB,EAHxB,EAGwBA,aAKhC5a,KAAKic,aAAeA,EACpBjc,KAAK4a,aAAeA,EACpB,IAAM2B,EAAaH,EAAuBpc,KAAKqc,OAAQrc,KAAKsc,eAC5D,OAAO4B,EAAEle,KAAKqe,SAAU9B,EAAY1F,IAGtCyH,QA5ByB,WA6BL,OAAdte,KAAKod,MAAgC,OAAfpd,KAAKsB,OAC7BwU,OAAQyI,MACN,2EAIiB,QAAjBve,KAAKqa,SACPvE,OAAQ0I,KACN,qKAIiBla,IAAjBtE,KAAKmd,SACPrH,OAAQ0I,KACN,wMAKNC,QAhDyB,WAgDf,WAIR,GAHAze,KAAKge,4BACHhe,KAAKqe,SAAS7C,gBAAkBxb,KAAK0e,IAAIC,SAASnD,gBACjDxb,KAAK4e,kBACJ5e,KAAKge,6BAA+Bhe,KAAK+d,eAC3C,MAAM,IAAI3F,MAAJ,oIACyHpY,KAAKqe,WAGtI,IAAMQ,EAAe,GACrB/B,EAAelN,SAAQ,SAAA2K,GACrBsE,EAAa,KAAOtE,GAAOkB,EAAgBjb,KAAK,EAAM+Z,MAGxDwC,EAAanN,SAAQ,SAAA2K,GACnBsE,EAAa,KAAOtE,GAAOY,EAAKtZ,KAAK,EAAM0Y,MAG7C,IAAMgC,EAAaxb,OAAOgC,KAAK/C,KAAKqc,QAAQK,QAAO,SAAC7K,EAAKjQ,GAEvD,OADAiQ,EAAIsE,eAASvU,IAAQ,EAAKya,OAAOza,GAC1BiQ,IACN,IAEGsL,EAAUpc,OAAO0O,OAAO,GAAIzP,KAAKmd,QAASZ,EAAYsC,EAAc,CACxEC,OAAQ,SAAC7B,EAAK8B,GACZ,OAAO,EAAKC,WAAW/B,EAAK8B,QAG9B,cAAe5B,KAAaA,EAAQ8B,UAAY,MAClDjf,KAAKkf,UAAY,IAAIC,IAASnf,KAAKof,cAAejC,GAClDnd,KAAKya,kBAGP4E,cAjFyB,gBAkFA/a,IAAnBtE,KAAKkf,WAAyBlf,KAAKkf,UAAUI,WAGnDC,SAAU,CACRH,cADQ,WAEN,OAAOpf,KAAK+d,eAAiB/d,KAAK0e,IAAI7H,SAAS,GAAK7W,KAAK0e,KAG3DhD,SALQ,WAMN,OAAO1b,KAAKod,KAAOpd,KAAKod,KAAOpd,KAAKsB,QAIxCke,MAAO,CACLrC,QAAS,CACPsC,QADO,SACCC,GACN1f,KAAK2f,cAAcD,IAErBE,MAAM,GAGRvD,OAAQ,CACNoD,QADM,SACEC,GACN1f,KAAK2f,cAAcD,IAErBE,MAAM,GAGRlE,SAfK,WAgBH1b,KAAKya,mBAIT9W,QAAS,CACPib,gBADO,WACW,IACRiB,EAAc7f,KAAK8f,OAAnBD,UACR,OAAOA,GAAaA,EAAUE,YAGhC1B,OANO,WAOL,OAAOre,KAAKwQ,KAAOxQ,KAAKqa,SAG1BsF,cAVO,SAUOD,GACZ,IAAK,IAAI1d,KAAY0d,EAAgB,CACnC,IAAMpe,EAAQ6U,eAASnU,IACoB,IAAvCgb,EAAmBpR,QAAQtK,IAC7BtB,KAAKkf,UAAUc,OAAO1e,EAAOoe,EAAe1d,MAKlDie,iBAnBO,WAoBL,GAAIjgB,KAAKge,4BACP,OAAOhe,KAAKkgB,UAAU,GAAG/B,OAAOb,QAElC,IAAM6C,EAAWngB,KAAKme,OAAOb,QAC7B,OAAOtd,KAAK+d,eAAiBoC,EAAS,GAAGC,MAAMjC,OAAOb,QAAU6C,GAGlE1F,eA3BO,WA2BU,WACfza,KAAKsb,WAAU,WACb,EAAK+E,eAAiB5F,EACpB,EAAKwF,mBACL,EAAKb,cAAcvI,SACnB,EAAKkH,eACL,EAAKnD,kBAKX0F,gBAtCO,SAsCSC,GACd,IAAM7a,EAAQyU,EAAena,KAAKigB,oBAAsB,GAAIM,GAC5D,IAAe,IAAX7a,EAGF,OAAO,KAET,IAAM2U,EAAUra,KAAK0b,SAAShW,GAC9B,MAAO,CAAEA,QAAO2U,YAGlBmG,yCAjDO,YAiDoD,IAAPC,EAAO,EAAhBC,QACzC,OACGD,GACAA,EAAIE,UACJhF,EAAiB8E,EAAIE,SAASC,eAW1BH,EAAII,UARL,aAAcJ,IACS,IAAzBA,EAAIP,UAAU9a,QACd,aAAcqb,EAAIP,UAAU,GAErBO,EAAIP,UAAU,GAEhBO,GAKXK,YAnEO,SAmEK7D,GAAK,WACfjd,KAAKsb,WAAU,WACb,EAAKC,MAAM,SAAU0B,OAIzB8D,UAzEO,SAyEGC,GACR,GAAIhhB,KAAKod,KACP4D,EAAOhhB,KAAKod,UADd,CAIA,IAAM6D,EAAU,EAAIjhB,KAAKsB,OACzB0f,EAAOC,GACPjhB,KAAKub,MAAM,QAAS0F,KAGtBC,WAnFO,WAmFM,gBACLA,EAAa,SAAA9D,GAAI,OAAIA,EAAK+D,OAAL,MAAA/D,EAAI,EAAW9V,KAC1CtH,KAAK+gB,UAAUG,IAGjBE,eAxFO,SAwFQC,EAAUC,GACvB,IAAMF,EAAiB,SAAAhE,GAAI,OACzBA,EAAK+D,OAAOG,EAAU,EAAGlE,EAAK+D,OAAOE,EAAU,GAAG,KACpDrhB,KAAK+gB,UAAUK,IAGjBG,+BA9FO,YA8FyC,IAAfC,EAAe,EAAfA,GAAIC,EAAW,EAAXA,QAC7BC,EAAY1hB,KAAKwgB,yCAAyCgB,GAChE,IAAKE,EACH,MAAO,CAAEA,aAEX,IAAMtE,EAAOsE,EAAUhG,SACjBlQ,EAAU,CAAE4R,OAAMsE,aACxB,GAAIF,IAAOC,GAAWrE,GAAQsE,EAAUpB,gBAAiB,CACvD,IAAMqB,EAAcD,EAAUpB,gBAAgBmB,GAC9C,GAAIE,EACF,OAAO5gB,OAAO0O,OAAOkS,EAAanW,GAGtC,OAAOA,GAGToW,WA9GO,SA8GIC,GACT,IAAMC,EAAU9hB,KAAKqgB,eACf0B,EAAgBD,EAAQ1c,OAC9B,OAAOyc,EAAWE,EAAgB,EAAIA,EAAgBD,EAAQD,IAGhEG,aApHO,WAqHL,OAAOhiB,KAAKme,OAAOb,QAAQ,GAAG2E,mBAGhCC,oBAxHO,SAwHaxc,GAClB,GAAK1F,KAAKud,oBAAuBvd,KAAK+d,eAAtC,CAGA,IAAIoE,EAAQniB,KAAKigB,mBACjBkC,EAAMzc,GAAOoY,KAAO,KACpB,IAAMsE,EAAsBpiB,KAAKgiB,eACjCI,EAAoBvL,SAAW,GAC/BuL,EAAoBC,UAAO/d,IAG7Bge,YAnIO,SAmIKrF,GACVjd,KAAKwL,QAAUxL,KAAKsgB,gBAAgBrD,EAAIsF,MACxCtF,EAAIsF,KAAKC,gBAAkBxiB,KAAKyd,MAAMzd,KAAKwL,QAAQ6O,SACnD6C,EAAkBD,EAAIsF,MAGxBE,UAzIO,SAyIGxF,GACR,IAAM5C,EAAU4C,EAAIsF,KAAKC,gBACzB,QAAgBle,IAAZ+V,EAAJ,CAGA/D,eAAW2G,EAAIsF,MACf,IAAMjB,EAAWthB,KAAK4hB,WAAW3E,EAAIqE,UACrCthB,KAAKkhB,WAAWI,EAAU,EAAGjH,GAC7Bra,KAAKya,iBACL,IAAMiI,EAAQ,CAAErI,UAASiH,YACzBthB,KAAK8gB,YAAY,CAAE4B,YAGrBC,aAtJO,SAsJM1F,GAEX,GADAvG,eAAa1W,KAAKof,cAAenC,EAAIsF,KAAMtF,EAAIoE,UAC1B,UAAjBpE,EAAI2F,SAAR,CAIA,IAAMvB,EAAWrhB,KAAKwL,QAAQ9F,MAC9B1F,KAAKkhB,WAAWG,EAAU,GAC1B,IAAMwB,EAAU,CAAExI,QAASra,KAAKwL,QAAQ6O,QAASgH,YACjDrhB,KAAKkiB,oBAAoBb,GACzBrhB,KAAK8gB,YAAY,CAAE+B,iBAPjBvM,eAAW2G,EAAIQ,QAUnBqF,aAnKO,SAmKM7F,GACX3G,eAAW2G,EAAIsF,MACf7L,eAAauG,EAAIzD,KAAMyD,EAAIsF,KAAMtF,EAAIoE,UACrC,IAAMA,EAAWrhB,KAAKwL,QAAQ9F,MACxB4b,EAAWthB,KAAK4hB,WAAW3E,EAAIqE,UACrCthB,KAAKohB,eAAeC,EAAUC,GAC9B,IAAMyB,EAAQ,CAAE1I,QAASra,KAAKwL,QAAQ6O,QAASgH,WAAUC,YACzDthB,KAAK8gB,YAAY,CAAEiC,WAGrBC,eA7KO,SA6KQ/F,EAAKgG,GAClBhG,EAAI/a,eAAe+gB,KAChBhG,EAAIgG,IAAiBjjB,KAAKic,eAG/BiH,mBAlLO,SAkLYC,EAAgBlG,GACjC,IAAKkG,EAAe9I,QAClB,OAAO,EAET,IAAM+I,EAAc,EAAInG,EAAIuE,GAAG3K,UAAUoE,QACvC,SAAA9L,GAAE,MAA4B,SAAxBA,EAAGxE,MAAM,cAEX0Y,EAAkBD,EAAYxX,QAAQqR,EAAIwE,SAC1C6B,EAAeH,EAAezB,UAAUE,WAAWyB,GACnDE,GAA0D,IAA1CH,EAAYxX,QAAQsR,GAC1C,OAAOqG,IAAkBtG,EAAIuG,gBACzBF,EACAA,EAAe,GAGrBtE,WAjMO,SAiMI/B,EAAK8B,GACd,IAAMD,EAAS9e,KAAK2d,KACpB,IAAKmB,IAAW9e,KAAK0b,SACnB,OAAO,EAGT,IAAMyH,EAAiBnjB,KAAKuhB,+BAA+BtE,GACrDwG,EAAiBzjB,KAAKwL,QACtBkY,EAAc1jB,KAAKkjB,mBAAmBC,EAAgBlG,GAC5Dlc,OAAO0O,OAAOgU,EAAgB,CAAEC,gBAChC,IAAMC,EAAU5iB,OAAO0O,OAAO,GAAIwN,EAAK,CACrCkG,iBACAM,mBAEF,OAAO3E,EAAO6E,EAAS5E,IAGzB6E,UAlNO,WAmNL5jB,KAAKya,iBACLyC,EAAkB,QAKF,qBAAX/M,QAA0B,QAASA,QAC5CA,OAAO0T,IAAInC,UAAU,YAAa9D,GAGrBA,QCleA,kB","file":"vuedraggable.umd.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"sortablejs\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"sortablejs\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vuedraggable\"] = factory(require(\"sortablejs\"));\n\telse\n\t\troot[\"vuedraggable\"] = factory(root[\"Sortable\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE_a352__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\n          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n            // The native String method already delegates to @@method (this\n            // polyfilled function), leasing to infinite recursion.\n            // We avoid it by directly calling the native @@method method.\n            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","module.exports = false;\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n","exports.f = {}.propertyIsEnumerable;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: 'Â© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = {};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = __WEBPACK_EXTERNAL_MODULE_a352__;","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n    var tailPos = position + matched.length;\n    var m = captures.length;\n    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n    if (namedCaptures !== undefined) {\n      namedCaptures = toObject(namedCaptures);\n      symbols = SUBSTITUTION_SYMBOLS;\n    }\n    return $replace.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(1, -1)];\n          break;\n        default: // \\d\\d?\n          var n = +ch;\n          if (n === 0) return match;\n          if (n > m) {\n            var f = floor(n / 10);\n            if (f === 0) return match;\n            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","function getConsole() {\r\n  if (typeof window !== \"undefined\") {\r\n    return window.console;\r\n  }\r\n  return global.console;\r\n}\r\nconst console = getConsole();\r\n\r\nfunction cached(fn) {\r\n  const cache = Object.create(null);\r\n  return function cachedFn(str) {\r\n    const hit = cache[str];\r\n    return hit || (cache[str] = fn(str));\r\n  };\r\n}\r\n\r\nconst regex = /-(\\w)/g;\r\nconst camelize = cached(str =>\r\n  str.replace(regex, (_, c) => (c ? c.toUpperCase() : \"\"))\r\n);\r\n\r\nfunction removeNode(node) {\r\n  if (node.parentElement !== null) {\r\n    node.parentElement.removeChild(node);\r\n  }\r\n}\r\n\r\nfunction insertNodeAt(fatherNode, node, position) {\r\n  const refNode =\r\n    position === 0\r\n      ? fatherNode.children[0]\r\n      : fatherNode.children[position - 1].nextSibling;\r\n  fatherNode.insertBefore(node, refNode);\r\n}\r\n\r\nexport { insertNodeAt, camelize, console, removeNode };\r\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","// document.currentScript polyfill by Adam Miller\n\n// MIT license\n\n(function(document){\n  var currentScript = \"currentScript\",\n      scripts = document.getElementsByTagName('script'); // Live NodeList collection\n\n  // If browser needs currentScript polyfill, add get currentScript() to the document object\n  if (!(currentScript in document)) {\n    Object.defineProperty(document, currentScript, {\n      get: function(){\n\n        // IE 6-10 supports script readyState\n        // IE 10+ support stack trace\n        try { throw new Error(); }\n        catch (err) {\n\n          // Find the second match for the \"at\" string to get file src url from stack.\n          // Specifically works with the format of stack traces in IE.\n          var i, res = ((/.*at [^\\(]*\\((.*):.+:.+\\)$/ig).exec(err.stack) || [false])[1];\n\n          // For all scripts on the page, if src matches or if ready state is interactive, return the script tag\n          for(i in scripts){\n            if(scripts[i].src == res || scripts[i].readyState == \"interactive\"){\n              return scripts[i];\n            }\n          }\n\n          // If no match, return null\n          return null;\n        }\n      }\n    });\n  }\n})(document);\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n  if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n    require('current-script-polyfill')\n  }\n\n  var i\n  if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n    __webpack_public_path__ = i[1] // eslint-disable-line\n  }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","export default function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}","export default function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import Sortable from \"sortablejs\";\r\nimport { insertNodeAt, camelize, console, removeNode } from \"./util/helper\";\r\n\r\nfunction buildAttribute(object, propName, value) {\r\n  if (value === undefined) {\r\n    return object;\r\n  }\r\n  object = object || {};\r\n  object[propName] = value;\r\n  return object;\r\n}\r\n\r\nfunction computeVmIndex(vnodes, element) {\r\n  return vnodes.map(elt => elt.elm).indexOf(element);\r\n}\r\n\r\nfunction computeIndexes(slots, children, isTransition, footerOffset) {\r\n  if (!slots) {\r\n    return [];\r\n  }\r\n\r\n  const elmFromNodes = slots.map(elt => elt.elm);\r\n  const footerIndex = children.length - footerOffset;\r\n  const rawIndexes = [...children].map((elt, idx) =>\r\n    idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt)\r\n  );\r\n  return isTransition ? rawIndexes.filter(ind => ind !== -1) : rawIndexes;\r\n}\r\n\r\nfunction emit(evtName, evtData) {\r\n  this.$nextTick(() => this.$emit(evtName.toLowerCase(), evtData));\r\n}\r\n\r\nfunction delegateAndEmit(evtName) {\r\n  return evtData => {\r\n    if (this.realList !== null) {\r\n      this[\"onDrag\" + evtName](evtData);\r\n    }\r\n    emit.call(this, evtName, evtData);\r\n  };\r\n}\r\n\r\nfunction isTransitionName(name) {\r\n  return [\"transition-group\", \"TransitionGroup\"].includes(name);\r\n}\r\n\r\nfunction isTransition(slots) {\r\n  if (!slots || slots.length !== 1) {\r\n    return false;\r\n  }\r\n  const [{ componentOptions }] = slots;\r\n  if (!componentOptions) {\r\n    return false;\r\n  }\r\n  return isTransitionName(componentOptions.tag);\r\n}\r\n\r\nfunction getSlot(slot, scopedSlot, key) {\r\n  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);\r\n}\r\n\r\nfunction computeChildrenAndOffsets(children, slot, scopedSlot) {\r\n  let headerOffset = 0;\r\n  let footerOffset = 0;\r\n  const header = getSlot(slot, scopedSlot, \"header\");\r\n  if (header) {\r\n    headerOffset = header.length;\r\n    children = children ? [...header, ...children] : [...header];\r\n  }\r\n  const footer = getSlot(slot, scopedSlot, \"footer\");\r\n  if (footer) {\r\n    footerOffset = footer.length;\r\n    children = children ? [...children, ...footer] : [...footer];\r\n  }\r\n  return { children, headerOffset, footerOffset };\r\n}\r\n\r\nfunction getComponentAttributes($attrs, componentData) {\r\n  let attributes = null;\r\n  const update = (name, value) => {\r\n    attributes = buildAttribute(attributes, name, value);\r\n  };\r\n  const attrs = Object.keys($attrs)\r\n    .filter(key => key === \"id\" || key.startsWith(\"data-\"))\r\n    .reduce((res, key) => {\r\n      res[key] = $attrs[key];\r\n      return res;\r\n    }, {});\r\n  update(\"attrs\", attrs);\r\n\r\n  if (!componentData) {\r\n    return attributes;\r\n  }\r\n  const { on, props, attrs: componentDataAttrs } = componentData;\r\n  update(\"on\", on);\r\n  update(\"props\", props);\r\n  Object.assign(attributes.attrs, componentDataAttrs);\r\n  return attributes;\r\n}\r\n\r\nconst eventsListened = [\"Start\", \"Add\", \"Remove\", \"Update\", \"End\"];\r\nconst eventsToEmit = [\"Choose\", \"Unchoose\", \"Sort\", \"Filter\", \"Clone\"];\r\nconst readonlyProperties = [\"Move\", ...eventsListened, ...eventsToEmit].map(\r\n  evt => \"on\" + evt\r\n);\r\nvar draggingElement = null;\r\n\r\nconst props = {\r\n  options: Object,\r\n  list: {\r\n    type: Array,\r\n    required: false,\r\n    default: null\r\n  },\r\n  value: {\r\n    type: Array,\r\n    required: false,\r\n    default: null\r\n  },\r\n  noTransitionOnDrag: {\r\n    type: Boolean,\r\n    default: false\r\n  },\r\n  clone: {\r\n    type: Function,\r\n    default: original => {\r\n      return original;\r\n    }\r\n  },\r\n  element: {\r\n    type: String,\r\n    default: \"div\"\r\n  },\r\n  tag: {\r\n    type: String,\r\n    default: null\r\n  },\r\n  move: {\r\n    type: Function,\r\n    default: null\r\n  },\r\n  componentData: {\r\n    type: Object,\r\n    required: false,\r\n    default: null\r\n  }\r\n};\r\n\r\nconst draggableComponent = {\r\n  name: \"draggable\",\r\n\r\n  inheritAttrs: false,\r\n\r\n  props,\r\n\r\n  data() {\r\n    return {\r\n      transitionMode: false,\r\n      noneFunctionalComponentMode: false\r\n    };\r\n  },\r\n\r\n  render(h) {\r\n    const slots = this.$slots.default;\r\n    this.transitionMode = isTransition(slots);\r\n    const { children, headerOffset, footerOffset } = computeChildrenAndOffsets(\r\n      slots,\r\n      this.$slots,\r\n      this.$scopedSlots\r\n    );\r\n    this.headerOffset = headerOffset;\r\n    this.footerOffset = footerOffset;\r\n    const attributes = getComponentAttributes(this.$attrs, this.componentData);\r\n    return h(this.getTag(), attributes, children);\r\n  },\r\n\r\n  created() {\r\n    if (this.list !== null && this.value !== null) {\r\n      console.error(\r\n        \"Value and list props are mutually exclusive! Please set one or another.\"\r\n      );\r\n    }\r\n\r\n    if (this.element !== \"div\") {\r\n      console.warn(\r\n        \"Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props\"\r\n      );\r\n    }\r\n\r\n    if (this.options !== undefined) {\r\n      console.warn(\r\n        \"Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props\"\r\n      );\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.noneFunctionalComponentMode =\r\n      this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() &&\r\n      !this.getIsFunctional();\r\n    if (this.noneFunctionalComponentMode && this.transitionMode) {\r\n      throw new Error(\r\n        `Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ${this.getTag()}`\r\n      );\r\n    }\r\n    const optionsAdded = {};\r\n    eventsListened.forEach(elt => {\r\n      optionsAdded[\"on\" + elt] = delegateAndEmit.call(this, elt);\r\n    });\r\n\r\n    eventsToEmit.forEach(elt => {\r\n      optionsAdded[\"on\" + elt] = emit.bind(this, elt);\r\n    });\r\n\r\n    const attributes = Object.keys(this.$attrs).reduce((res, key) => {\r\n      res[camelize(key)] = this.$attrs[key];\r\n      return res;\r\n    }, {});\r\n\r\n    const options = Object.assign({}, this.options, attributes, optionsAdded, {\r\n      onMove: (evt, originalEvent) => {\r\n        return this.onDragMove(evt, originalEvent);\r\n      }\r\n    });\r\n    !(\"draggable\" in options) && (options.draggable = \">*\");\r\n    this._sortable = new Sortable(this.rootContainer, options);\r\n    this.computeIndexes();\r\n  },\r\n\r\n  beforeDestroy() {\r\n    if (this._sortable !== undefined) this._sortable.destroy();\r\n  },\r\n\r\n  computed: {\r\n    rootContainer() {\r\n      return this.transitionMode ? this.$el.children[0] : this.$el;\r\n    },\r\n\r\n    realList() {\r\n      return this.list ? this.list : this.value;\r\n    }\r\n  },\r\n\r\n  watch: {\r\n    options: {\r\n      handler(newOptionValue) {\r\n        this.updateOptions(newOptionValue);\r\n      },\r\n      deep: true\r\n    },\r\n\r\n    $attrs: {\r\n      handler(newOptionValue) {\r\n        this.updateOptions(newOptionValue);\r\n      },\r\n      deep: true\r\n    },\r\n\r\n    realList() {\r\n      this.computeIndexes();\r\n    }\r\n  },\r\n\r\n  methods: {\r\n    getIsFunctional() {\r\n      const { fnOptions } = this._vnode;\r\n      return fnOptions && fnOptions.functional;\r\n    },\r\n\r\n    getTag() {\r\n      return this.tag || this.element;\r\n    },\r\n\r\n    updateOptions(newOptionValue) {\r\n      for (var property in newOptionValue) {\r\n        const value = camelize(property);\r\n        if (readonlyProperties.indexOf(value) === -1) {\r\n          this._sortable.option(value, newOptionValue[property]);\r\n        }\r\n      }\r\n    },\r\n\r\n    getChildrenNodes() {\r\n      if (this.noneFunctionalComponentMode) {\r\n        return this.$children[0].$slots.default;\r\n      }\r\n      const rawNodes = this.$slots.default;\r\n      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\r\n    },\r\n\r\n    computeIndexes() {\r\n      this.$nextTick(() => {\r\n        this.visibleIndexes = computeIndexes(\r\n          this.getChildrenNodes(),\r\n          this.rootContainer.children,\r\n          this.transitionMode,\r\n          this.footerOffset\r\n        );\r\n      });\r\n    },\r\n\r\n    getUnderlyingVm(htmlElt) {\r\n      const index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\r\n      if (index === -1) {\r\n        //Edge case during move callback: related element might be\r\n        //an element different from collection\r\n        return null;\r\n      }\r\n      const element = this.realList[index];\r\n      return { index, element };\r\n    },\r\n\r\n    getUnderlyingPotencialDraggableComponent({ __vue__: vue }) {\r\n      if (\r\n        !vue ||\r\n        !vue.$options ||\r\n        !isTransitionName(vue.$options._componentTag)\r\n      ) {\r\n        if (\r\n          !(\"realList\" in vue) &&\r\n          vue.$children.length === 1 &&\r\n          \"realList\" in vue.$children[0]\r\n        )\r\n          return vue.$children[0];\r\n\r\n        return vue;\r\n      }\r\n      return vue.$parent;\r\n    },\r\n\r\n    emitChanges(evt) {\r\n      this.$nextTick(() => {\r\n        this.$emit(\"change\", evt);\r\n      });\r\n    },\r\n\r\n    alterList(onList) {\r\n      if (this.list) {\r\n        onList(this.list);\r\n        return;\r\n      }\r\n      const newList = [...this.value];\r\n      onList(newList);\r\n      this.$emit(\"input\", newList);\r\n    },\r\n\r\n    spliceList() {\r\n      const spliceList = list => list.splice(...arguments);\r\n      this.alterList(spliceList);\r\n    },\r\n\r\n    updatePosition(oldIndex, newIndex) {\r\n      const updatePosition = list =>\r\n        list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\r\n      this.alterList(updatePosition);\r\n    },\r\n\r\n    getRelatedContextFromMoveEvent({ to, related }) {\r\n      const component = this.getUnderlyingPotencialDraggableComponent(to);\r\n      if (!component) {\r\n        return { component };\r\n      }\r\n      const list = component.realList;\r\n      const context = { list, component };\r\n      if (to !== related && list && component.getUnderlyingVm) {\r\n        const destination = component.getUnderlyingVm(related);\r\n        if (destination) {\r\n          return Object.assign(destination, context);\r\n        }\r\n      }\r\n      return context;\r\n    },\r\n\r\n    getVmIndex(domIndex) {\r\n      const indexes = this.visibleIndexes;\r\n      const numberIndexes = indexes.length;\r\n      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\r\n    },\r\n\r\n    getComponent() {\r\n      return this.$slots.default[0].componentInstance;\r\n    },\r\n\r\n    resetTransitionData(index) {\r\n      if (!this.noTransitionOnDrag || !this.transitionMode) {\r\n        return;\r\n      }\r\n      var nodes = this.getChildrenNodes();\r\n      nodes[index].data = null;\r\n      const transitionContainer = this.getComponent();\r\n      transitionContainer.children = [];\r\n      transitionContainer.kept = undefined;\r\n    },\r\n\r\n    onDragStart(evt) {\r\n      this.context = this.getUnderlyingVm(evt.item);\r\n      evt.item._underlying_vm_ = this.clone(this.context.element);\r\n      draggingElement = evt.item;\r\n    },\r\n\r\n    onDragAdd(evt) {\r\n      const element = evt.item._underlying_vm_;\r\n      if (element === undefined) {\r\n        return;\r\n      }\r\n      removeNode(evt.item);\r\n      const newIndex = this.getVmIndex(evt.newIndex);\r\n      this.spliceList(newIndex, 0, element);\r\n      this.computeIndexes();\r\n      const added = { element, newIndex };\r\n      this.emitChanges({ added });\r\n    },\r\n\r\n    onDragRemove(evt) {\r\n      insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\r\n      if (evt.pullMode === \"clone\") {\r\n        removeNode(evt.clone);\r\n        return;\r\n      }\r\n      const oldIndex = this.context.index;\r\n      this.spliceList(oldIndex, 1);\r\n      const removed = { element: this.context.element, oldIndex };\r\n      this.resetTransitionData(oldIndex);\r\n      this.emitChanges({ removed });\r\n    },\r\n\r\n    onDragUpdate(evt) {\r\n      removeNode(evt.item);\r\n      insertNodeAt(evt.from, evt.item, evt.oldIndex);\r\n      const oldIndex = this.context.index;\r\n      const newIndex = this.getVmIndex(evt.newIndex);\r\n      this.updatePosition(oldIndex, newIndex);\r\n      const moved = { element: this.context.element, oldIndex, newIndex };\r\n      this.emitChanges({ moved });\r\n    },\r\n\r\n    updateProperty(evt, propertyName) {\r\n      evt.hasOwnProperty(propertyName) &&\r\n        (evt[propertyName] += this.headerOffset);\r\n    },\r\n\r\n    computeFutureIndex(relatedContext, evt) {\r\n      if (!relatedContext.element) {\r\n        return 0;\r\n      }\r\n      const domChildren = [...evt.to.children].filter(\r\n        el => el.style[\"display\"] !== \"none\"\r\n      );\r\n      const currentDOMIndex = domChildren.indexOf(evt.related);\r\n      const currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\r\n      const draggedInList = domChildren.indexOf(draggingElement) !== -1;\r\n      return draggedInList || !evt.willInsertAfter\r\n        ? currentIndex\r\n        : currentIndex + 1;\r\n    },\r\n\r\n    onDragMove(evt, originalEvent) {\r\n      const onMove = this.move;\r\n      if (!onMove || !this.realList) {\r\n        return true;\r\n      }\r\n\r\n      const relatedContext = this.getRelatedContextFromMoveEvent(evt);\r\n      const draggedContext = this.context;\r\n      const futureIndex = this.computeFutureIndex(relatedContext, evt);\r\n      Object.assign(draggedContext, { futureIndex });\r\n      const sendEvt = Object.assign({}, evt, {\r\n        relatedContext,\r\n        draggedContext\r\n      });\r\n      return onMove(sendEvt, originalEvent);\r\n    },\r\n\r\n    onDragEnd() {\r\n      this.computeIndexes();\r\n      draggingElement = null;\r\n    }\r\n  }\r\n};\r\n\r\nif (typeof window !== \"undefined\" && \"Vue\" in window) {\r\n  window.Vue.component(\"draggable\", draggableComponent);\r\n}\r\n\r\nexport default draggableComponent;\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"sourceRoot":""}The MIT License (MIT)

Copyright (c) 2016-2019 David Desmaisons

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "vuedraggable",
  "version": "2.24.3",
  "description": "draggable component for vue",
  "license": "MIT",
  "main": "dist/vuedraggable.umd.min.js",
  "types": "src/vuedraggable.d.ts",
  "repository": {
    "type": "git",
    "url": "https://github.com/SortableJS/Vue.Draggable.git"
  },
  "private": false,
  "dependencies": {
    "sortablejs": "1.10.2"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^3.11.0",
    "@vue/cli-plugin-eslint": "^3.11.0",
    "@vue/cli-plugin-unit-jest": "^3.11.0",
    "@vue/cli-service": "^3.11.0",
    "@vue/eslint-config-prettier": "^4.0.1",
    "@vue/test-utils": "^1.1.0",
    "babel-core": "7.0.0-bridge.0",
    "babel-eslint": "^10.0.1",
    "babel-jest": "^23.6.0",
    "bootstrap": "^4.3.1",
    "codecov": "^3.2.0",
    "component-fixture": "^0.4.1",
    "element-ui": "^2.5.4",
    "eslint": "^5.8.0",
    "eslint-plugin-vue": "^5.0.0",
    "font-awesome": "^4.7.0",
    "jquery": "^3.5.1",
    "vue": "^2.6.12",
    "vue-cli-plugin-component": "^1.10.5",
    "vue-router": "^3.0.2",
    "vue-server-renderer": "^2.6.12",
    "vue-template-compiler": "^2.6.12",
    "vuetify": "^1.5.16",
    "vuex": "^3.1.1"
  },
  "postcss": {
    "plugins": {
      "autoprefixer": {}
    }
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ],
  "files": [
    "dist/*.css",
    "dist/*.map",
    "dist/*.js",
    "src/*"
  ],
  "module": "dist/vuedraggable.umd.js"
}function getConsole() {
  if (typeof window !== "undefined") {
    return window.console;
  }
  return global.console;
}
const console = getConsole();

function cached(fn) {
  const cache = Object.create(null);
  return function cachedFn(str) {
    const hit = cache[str];
    return hit || (cache[str] = fn(str));
  };
}

const regex = /-(\w)/g;
const camelize = cached(str =>
  str.replace(regex, (_, c) => (c ? c.toUpperCase() : ""))
);

function removeNode(node) {
  if (node.parentElement !== null) {
    node.parentElement.removeChild(node);
  }
}

function insertNodeAt(fatherNode, node, position) {
  const refNode =
    position === 0
      ? fatherNode.children[0]
      : fatherNode.children[position - 1].nextSibling;
  fatherNode.insertBefore(node, refNode);
}

export { insertNodeAt, camelize, console, removeNode };
import Sortable from "sortablejs";
import { insertNodeAt, camelize, console, removeNode } from "./util/helper";

function buildAttribute(object, propName, value) {
  if (value === undefined) {
    return object;
  }
  object = object || {};
  object[propName] = value;
  return object;
}

function computeVmIndex(vnodes, element) {
  return vnodes.map(elt => elt.elm).indexOf(element);
}

function computeIndexes(slots, children, isTransition, footerOffset) {
  if (!slots) {
    return [];
  }

  const elmFromNodes = slots.map(elt => elt.elm);
  const footerIndex = children.length - footerOffset;
  const rawIndexes = [...children].map((elt, idx) =>
    idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt)
  );
  return isTransition ? rawIndexes.filter(ind => ind !== -1) : rawIndexes;
}

function emit(evtName, evtData) {
  this.$nextTick(() => this.$emit(evtName.toLowerCase(), evtData));
}

function delegateAndEmit(evtName) {
  return evtData => {
    if (this.realList !== null) {
      this["onDrag" + evtName](evtData);
    }
    emit.call(this, evtName, evtData);
  };
}

function isTransitionName(name) {
  return ["transition-group", "TransitionGroup"].includes(name);
}

function isTransition(slots) {
  if (!slots || slots.length !== 1) {
    return false;
  }
  const [{ componentOptions }] = slots;
  if (!componentOptions) {
    return false;
  }
  return isTransitionName(componentOptions.tag);
}

function getSlot(slot, scopedSlot, key) {
  return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined);
}

function computeChildrenAndOffsets(children, slot, scopedSlot) {
  let headerOffset = 0;
  let footerOffset = 0;
  const header = getSlot(slot, scopedSlot, "header");
  if (header) {
    headerOffset = header.length;
    children = children ? [...header, ...children] : [...header];
  }
  const footer = getSlot(slot, scopedSlot, "footer");
  if (footer) {
    footerOffset = footer.length;
    children = children ? [...children, ...footer] : [...footer];
  }
  return { children, headerOffset, footerOffset };
}

function getComponentAttributes($attrs, componentData) {
  let attributes = null;
  const update = (name, value) => {
    attributes = buildAttribute(attributes, name, value);
  };
  const attrs = Object.keys($attrs)
    .filter(key => key === "id" || key.startsWith("data-"))
    .reduce((res, key) => {
      res[key] = $attrs[key];
      return res;
    }, {});
  update("attrs", attrs);

  if (!componentData) {
    return attributes;
  }
  const { on, props, attrs: componentDataAttrs } = componentData;
  update("on", on);
  update("props", props);
  Object.assign(attributes.attrs, componentDataAttrs);
  return attributes;
}

const eventsListened = ["Start", "Add", "Remove", "Update", "End"];
const eventsToEmit = ["Choose", "Unchoose", "Sort", "Filter", "Clone"];
const readonlyProperties = ["Move", ...eventsListened, ...eventsToEmit].map(
  evt => "on" + evt
);
var draggingElement = null;

const props = {
  options: Object,
  list: {
    type: Array,
    required: false,
    default: null
  },
  value: {
    type: Array,
    required: false,
    default: null
  },
  noTransitionOnDrag: {
    type: Boolean,
    default: false
  },
  clone: {
    type: Function,
    default: original => {
      return original;
    }
  },
  element: {
    type: String,
    default: "div"
  },
  tag: {
    type: String,
    default: null
  },
  move: {
    type: Function,
    default: null
  },
  componentData: {
    type: Object,
    required: false,
    default: null
  }
};

const draggableComponent = {
  name: "draggable",

  inheritAttrs: false,

  props,

  data() {
    return {
      transitionMode: false,
      noneFunctionalComponentMode: false
    };
  },

  render(h) {
    const slots = this.$slots.default;
    this.transitionMode = isTransition(slots);
    const { children, headerOffset, footerOffset } = computeChildrenAndOffsets(
      slots,
      this.$slots,
      this.$scopedSlots
    );
    this.headerOffset = headerOffset;
    this.footerOffset = footerOffset;
    const attributes = getComponentAttributes(this.$attrs, this.componentData);
    return h(this.getTag(), attributes, children);
  },

  created() {
    if (this.list !== null && this.value !== null) {
      console.error(
        "Value and list props are mutually exclusive! Please set one or another."
      );
    }

    if (this.element !== "div") {
      console.warn(
        "Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props"
      );
    }

    if (this.options !== undefined) {
      console.warn(
        "Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props"
      );
    }
  },

  mounted() {
    this.noneFunctionalComponentMode =
      this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() &&
      !this.getIsFunctional();
    if (this.noneFunctionalComponentMode && this.transitionMode) {
      throw new Error(
        `Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ${this.getTag()}`
      );
    }
    const optionsAdded = {};
    eventsListened.forEach(elt => {
      optionsAdded["on" + elt] = delegateAndEmit.call(this, elt);
    });

    eventsToEmit.forEach(elt => {
      optionsAdded["on" + elt] = emit.bind(this, elt);
    });

    const attributes = Object.keys(this.$attrs).reduce((res, key) => {
      res[camelize(key)] = this.$attrs[key];
      return res;
    }, {});

    const options = Object.assign({}, this.options, attributes, optionsAdded, {
      onMove: (evt, originalEvent) => {
        return this.onDragMove(evt, originalEvent);
      }
    });
    !("draggable" in options) && (options.draggable = ">*");
    this._sortable = new Sortable(this.rootContainer, options);
    this.computeIndexes();
  },

  beforeDestroy() {
    if (this._sortable !== undefined) this._sortable.destroy();
  },

  computed: {
    rootContainer() {
      return this.transitionMode ? this.$el.children[0] : this.$el;
    },

    realList() {
      return this.list ? this.list : this.value;
    }
  },

  watch: {
    options: {
      handler(newOptionValue) {
        this.updateOptions(newOptionValue);
      },
      deep: true
    },

    $attrs: {
      handler(newOptionValue) {
        this.updateOptions(newOptionValue);
      },
      deep: true
    },

    realList() {
      this.computeIndexes();
    }
  },

  methods: {
    getIsFunctional() {
      const { fnOptions } = this._vnode;
      return fnOptions && fnOptions.functional;
    },

    getTag() {
      return this.tag || this.element;
    },

    updateOptions(newOptionValue) {
      for (var property in newOptionValue) {
        const value = camelize(property);
        if (readonlyProperties.indexOf(value) === -1) {
          this._sortable.option(value, newOptionValue[property]);
        }
      }
    },

    getChildrenNodes() {
      if (this.noneFunctionalComponentMode) {
        return this.$children[0].$slots.default;
      }
      const rawNodes = this.$slots.default;
      return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;
    },

    computeIndexes() {
      this.$nextTick(() => {
        this.visibleIndexes = computeIndexes(
          this.getChildrenNodes(),
          this.rootContainer.children,
          this.transitionMode,
          this.footerOffset
        );
      });
    },

    getUnderlyingVm(htmlElt) {
      const index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);
      if (index === -1) {
        //Edge case during move callback: related element might be
        //an element different from collection
        return null;
      }
      const element = this.realList[index];
      return { index, element };
    },

    getUnderlyingPotencialDraggableComponent({ __vue__: vue }) {
      if (
        !vue ||
        !vue.$options ||
        !isTransitionName(vue.$options._componentTag)
      ) {
        if (
          !("realList" in vue) &&
          vue.$children.length === 1 &&
          "realList" in vue.$children[0]
        )
          return vue.$children[0];

        return vue;
      }
      return vue.$parent;
    },

    emitChanges(evt) {
      this.$nextTick(() => {
        this.$emit("change", evt);
      });
    },

    alterList(onList) {
      if (this.list) {
        onList(this.list);
        return;
      }
      const newList = [...this.value];
      onList(newList);
      this.$emit("input", newList);
    },

    spliceList() {
      const spliceList = list => list.splice(...arguments);
      this.alterList(spliceList);
    },

    updatePosition(oldIndex, newIndex) {
      const updatePosition = list =>
        list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);
      this.alterList(updatePosition);
    },

    getRelatedContextFromMoveEvent({ to, related }) {
      const component = this.getUnderlyingPotencialDraggableComponent(to);
      if (!component) {
        return { component };
      }
      const list = component.realList;
      const context = { list, component };
      if (to !== related && list && component.getUnderlyingVm) {
        const destination = component.getUnderlyingVm(related);
        if (destination) {
          return Object.assign(destination, context);
        }
      }
      return context;
    },

    getVmIndex(domIndex) {
      const indexes = this.visibleIndexes;
      const numberIndexes = indexes.length;
      return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];
    },

    getComponent() {
      return this.$slots.default[0].componentInstance;
    },

    resetTransitionData(index) {
      if (!this.noTransitionOnDrag || !this.transitionMode) {
        return;
      }
      var nodes = this.getChildrenNodes();
      nodes[index].data = null;
      const transitionContainer = this.getComponent();
      transitionContainer.children = [];
      transitionContainer.kept = undefined;
    },

    onDragStart(evt) {
      this.context = this.getUnderlyingVm(evt.item);
      evt.item._underlying_vm_ = this.clone(this.context.element);
      draggingElement = evt.item;
    },

    onDragAdd(evt) {
      const element = evt.item._underlying_vm_;
      if (element === undefined) {
        return;
      }
      removeNode(evt.item);
      const newIndex = this.getVmIndex(evt.newIndex);
      this.spliceList(newIndex, 0, element);
      this.computeIndexes();
      const added = { element, newIndex };
      this.emitChanges({ added });
    },

    onDragRemove(evt) {
      insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);
      if (evt.pullMode === "clone") {
        removeNode(evt.clone);
        return;
      }
      const oldIndex = this.context.index;
      this.spliceList(oldIndex, 1);
      const removed = { element: this.context.element, oldIndex };
      this.resetTransitionData(oldIndex);
      this.emitChanges({ removed });
    },

    onDragUpdate(evt) {
      removeNode(evt.item);
      insertNodeAt(evt.from, evt.item, evt.oldIndex);
      const oldIndex = this.context.index;
      const newIndex = this.getVmIndex(evt.newIndex);
      this.updatePosition(oldIndex, newIndex);
      const moved = { element: this.context.element, oldIndex, newIndex };
      this.emitChanges({ moved });
    },

    updateProperty(evt, propertyName) {
      evt.hasOwnProperty(propertyName) &&
        (evt[propertyName] += this.headerOffset);
    },

    computeFutureIndex(relatedContext, evt) {
      if (!relatedContext.element) {
        return 0;
      }
      const domChildren = [...evt.to.children].filter(
        el => el.style["display"] !== "none"
      );
      const currentDOMIndex = domChildren.indexOf(evt.related);
      const currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);
      const draggedInList = domChildren.indexOf(draggingElement) !== -1;
      return draggedInList || !evt.willInsertAfter
        ? currentIndex
        : currentIndex + 1;
    },

    onDragMove(evt, originalEvent) {
      const onMove = this.move;
      if (!onMove || !this.realList) {
        return true;
      }

      const relatedContext = this.getRelatedContextFromMoveEvent(evt);
      const draggedContext = this.context;
      const futureIndex = this.computeFutureIndex(relatedContext, evt);
      Object.assign(draggedContext, { futureIndex });
      const sendEvt = Object.assign({}, evt, {
        relatedContext,
        draggedContext
      });
      return onMove(sendEvt, originalEvent);
    },

    onDragEnd() {
      this.computeIndexes();
      draggingElement = null;
    }
  }
};

if (typeof window !== "undefined" && "Vue" in window) {
  window.Vue.component("draggable", draggableComponent);
}

export default draggableComponent;
/*!
 * vuex v3.6.2
 * (c) 2021 Evan You
 * @license MIT
 */
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Vuex = factory());
}(this, (function () { 'use strict';

  /**
   * Get the first item that pass the test
   * by second argument function
   *
   * @param {Array} list
   * @param {Function} f
   * @return {*}
   */
  function find (list, f) {
    return list.filter(f)[0]
  }

  /**
   * Deep copy the given object considering circular structure.
   * This function caches all nested objects and its copies.
   * If it detects circular structure, use cached copy to avoid infinite loop.
   *
   * @param {*} obj
   * @param {Array<Object>} cache
   * @return {*}
   */
  function deepCopy (obj, cache) {
    if ( cache === void 0 ) cache = [];

    // just return if obj is immutable value
    if (obj === null || typeof obj !== 'object') {
      return obj
    }

    // if obj is hit, it is in circular structure
    var hit = find(cache, function (c) { return c.original === obj; });
    if (hit) {
      return hit.copy
    }

    var copy = Array.isArray(obj) ? [] : {};
    // put the copy into cache at first
    // because we want to refer it in recursive deepCopy
    cache.push({
      original: obj,
      copy: copy
    });

    Object.keys(obj).forEach(function (key) {
      copy[key] = deepCopy(obj[key], cache);
    });

    return copy
  }

  // Credits: borrowed code from fcomb/redux-logger

  function createLogger (ref) {
    if ( ref === void 0 ) ref = {};
    var collapsed = ref.collapsed; if ( collapsed === void 0 ) collapsed = true;
    var filter = ref.filter; if ( filter === void 0 ) filter = function (mutation, stateBefore, stateAfter) { return true; };
    var transformer = ref.transformer; if ( transformer === void 0 ) transformer = function (state) { return state; };
    var mutationTransformer = ref.mutationTransformer; if ( mutationTransformer === void 0 ) mutationTransformer = function (mut) { return mut; };
    var actionFilter = ref.actionFilter; if ( actionFilter === void 0 ) actionFilter = function (action, state) { return true; };
    var actionTransformer = ref.actionTransformer; if ( actionTransformer === void 0 ) actionTransformer = function (act) { return act; };
    var logMutations = ref.logMutations; if ( logMutations === void 0 ) logMutations = true;
    var logActions = ref.logActions; if ( logActions === void 0 ) logActions = true;
    var logger = ref.logger; if ( logger === void 0 ) logger = console;

    return function (store) {
      var prevState = deepCopy(store.state);

      if (typeof logger === 'undefined') {
        return
      }

      if (logMutations) {
        store.subscribe(function (mutation, state) {
          var nextState = deepCopy(state);

          if (filter(mutation, prevState, nextState)) {
            var formattedTime = getFormattedTime();
            var formattedMutation = mutationTransformer(mutation);
            var message = "mutation " + (mutation.type) + formattedTime;

            startMessage(logger, message, collapsed);
            logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState));
            logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation);
            logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState));
            endMessage(logger);
          }

          prevState = nextState;
        });
      }

      if (logActions) {
        store.subscribeAction(function (action, state) {
          if (actionFilter(action, state)) {
            var formattedTime = getFormattedTime();
            var formattedAction = actionTransformer(action);
            var message = "action " + (action.type) + formattedTime;

            startMessage(logger, message, collapsed);
            logger.log('%c action', 'color: #03A9F4; font-weight: bold', formattedAction);
            endMessage(logger);
          }
        });
      }
    }
  }

  function startMessage (logger, message, collapsed) {
    var startMessage = collapsed
      ? logger.groupCollapsed
      : logger.group;

    // render
    try {
      startMessage.call(logger, message);
    } catch (e) {
      logger.log(message);
    }
  }

  function endMessage (logger) {
    try {
      logger.groupEnd();
    } catch (e) {
      logger.log('â€”â€” log end â€”â€”');
    }
  }

  function getFormattedTime () {
    var time = new Date();
    return (" @ " + (pad(time.getHours(), 2)) + ":" + (pad(time.getMinutes(), 2)) + ":" + (pad(time.getSeconds(), 2)) + "." + (pad(time.getMilliseconds(), 3)))
  }

  function repeat (str, times) {
    return (new Array(times + 1)).join(str)
  }

  function pad (num, maxLength) {
    return repeat('0', maxLength - num.toString().length) + num
  }

  return createLogger;

})));
/*!
 * vuex v3.6.2
 * (c) 2021 Evan You
 * @license MIT
 */
'use strict';

function applyMixin (Vue) {
  var version = Number(Vue.version.split('.')[0]);

  if (version >= 2) {
    Vue.mixin({ beforeCreate: vuexInit });
  } else {
    // override init and inject vuex init procedure
    // for 1.x backwards compatibility.
    var _init = Vue.prototype._init;
    Vue.prototype._init = function (options) {
      if ( options === void 0 ) options = {};

      options.init = options.init
        ? [vuexInit].concat(options.init)
        : vuexInit;
      _init.call(this, options);
    };
  }

  /**
   * Vuex init hook, injected into each instances init hooks list.
   */

  function vuexInit () {
    var options = this.$options;
    // store injection
    if (options.store) {
      this.$store = typeof options.store === 'function'
        ? options.store()
        : options.store;
    } else if (options.parent && options.parent.$store) {
      this.$store = options.parent.$store;
    }
  }
}

var target = typeof window !== 'undefined'
  ? window
  : typeof global !== 'undefined'
    ? global
    : {};
var devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;

function devtoolPlugin (store) {
  if (!devtoolHook) { return }

  store._devtoolHook = devtoolHook;

  devtoolHook.emit('vuex:init', store);

  devtoolHook.on('vuex:travel-to-state', function (targetState) {
    store.replaceState(targetState);
  });

  store.subscribe(function (mutation, state) {
    devtoolHook.emit('vuex:mutation', mutation, state);
  }, { prepend: true });

  store.subscribeAction(function (action, state) {
    devtoolHook.emit('vuex:action', action, state);
  }, { prepend: true });
}

/**
 * Get the first item that pass the test
 * by second argument function
 *
 * @param {Array} list
 * @param {Function} f
 * @return {*}
 */
function find (list, f) {
  return list.filter(f)[0]
}

/**
 * Deep copy the given object considering circular structure.
 * This function caches all nested objects and its copies.
 * If it detects circular structure, use cached copy to avoid infinite loop.
 *
 * @param {*} obj
 * @param {Array<Object>} cache
 * @return {*}
 */
function deepCopy (obj, cache) {
  if ( cache === void 0 ) cache = [];

  // just return if obj is immutable value
  if (obj === null || typeof obj !== 'object') {
    return obj
  }

  // if obj is hit, it is in circular structure
  var hit = find(cache, function (c) { return c.original === obj; });
  if (hit) {
    return hit.copy
  }

  var copy = Array.isArray(obj) ? [] : {};
  // put the copy into cache at first
  // because we want to refer it in recursive deepCopy
  cache.push({
    original: obj,
    copy: copy
  });

  Object.keys(obj).forEach(function (key) {
    copy[key] = deepCopy(obj[key], cache);
  });

  return copy
}

/**
 * forEach for object
 */
function forEachValue (obj, fn) {
  Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });
}

function isObject (obj) {
  return obj !== null && typeof obj === 'object'
}

function isPromise (val) {
  return val && typeof val.then === 'function'
}

function assert (condition, msg) {
  if (!condition) { throw new Error(("[vuex] " + msg)) }
}

function partial (fn, arg) {
  return function () {
    return fn(arg)
  }
}

// Base data struct for store's module, package with some attribute and method
var Module = function Module (rawModule, runtime) {
  this.runtime = runtime;
  // Store some children item
  this._children = Object.create(null);
  // Store the origin module object which passed by programmer
  this._rawModule = rawModule;
  var rawState = rawModule.state;

  // Store the origin module's state
  this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};
};

var prototypeAccessors = { namespaced: { configurable: true } };

prototypeAccessors.namespaced.get = function () {
  return !!this._rawModule.namespaced
};

Module.prototype.addChild = function addChild (key, module) {
  this._children[key] = module;
};

Module.prototype.removeChild = function removeChild (key) {
  delete this._children[key];
};

Module.prototype.getChild = function getChild (key) {
  return this._children[key]
};

Module.prototype.hasChild = function hasChild (key) {
  return key in this._children
};

Module.prototype.update = function update (rawModule) {
  this._rawModule.namespaced = rawModule.namespaced;
  if (rawModule.actions) {
    this._rawModule.actions = rawModule.actions;
  }
  if (rawModule.mutations) {
    this._rawModule.mutations = rawModule.mutations;
  }
  if (rawModule.getters) {
    this._rawModule.getters = rawModule.getters;
  }
};

Module.prototype.forEachChild = function forEachChild (fn) {
  forEachValue(this._children, fn);
};

Module.prototype.forEachGetter = function forEachGetter (fn) {
  if (this._rawModule.getters) {
    forEachValue(this._rawModule.getters, fn);
  }
};

Module.prototype.forEachAction = function forEachAction (fn) {
  if (this._rawModule.actions) {
    forEachValue(this._rawModule.actions, fn);
  }
};

Module.prototype.forEachMutation = function forEachMutation (fn) {
  if (this._rawModule.mutations) {
    forEachValue(this._rawModule.mutations, fn);
  }
};

Object.defineProperties( Module.prototype, prototypeAccessors );

var ModuleCollection = function ModuleCollection (rawRootModule) {
  // register root module (Vuex.Store options)
  this.register([], rawRootModule, false);
};

ModuleCollection.prototype.get = function get (path) {
  return path.reduce(function (module, key) {
    return module.getChild(key)
  }, this.root)
};

ModuleCollection.prototype.getNamespace = function getNamespace (path) {
  var module = this.root;
  return path.reduce(function (namespace, key) {
    module = module.getChild(key);
    return namespace + (module.namespaced ? key + '/' : '')
  }, '')
};

ModuleCollection.prototype.update = function update$1 (rawRootModule) {
  update([], this.root, rawRootModule);
};

ModuleCollection.prototype.register = function register (path, rawModule, runtime) {
    var this$1 = this;
    if ( runtime === void 0 ) runtime = true;

  if ((process.env.NODE_ENV !== 'production')) {
    assertRawModule(path, rawModule);
  }

  var newModule = new Module(rawModule, runtime);
  if (path.length === 0) {
    this.root = newModule;
  } else {
    var parent = this.get(path.slice(0, -1));
    parent.addChild(path[path.length - 1], newModule);
  }

  // register nested modules
  if (rawModule.modules) {
    forEachValue(rawModule.modules, function (rawChildModule, key) {
      this$1.register(path.concat(key), rawChildModule, runtime);
    });
  }
};

ModuleCollection.prototype.unregister = function unregister (path) {
  var parent = this.get(path.slice(0, -1));
  var key = path[path.length - 1];
  var child = parent.getChild(key);

  if (!child) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.warn(
        "[vuex] trying to unregister module '" + key + "', which is " +
        "not registered"
      );
    }
    return
  }

  if (!child.runtime) {
    return
  }

  parent.removeChild(key);
};

ModuleCollection.prototype.isRegistered = function isRegistered (path) {
  var parent = this.get(path.slice(0, -1));
  var key = path[path.length - 1];

  if (parent) {
    return parent.hasChild(key)
  }

  return false
};

function update (path, targetModule, newModule) {
  if ((process.env.NODE_ENV !== 'production')) {
    assertRawModule(path, newModule);
  }

  // update target module
  targetModule.update(newModule);

  // update nested modules
  if (newModule.modules) {
    for (var key in newModule.modules) {
      if (!targetModule.getChild(key)) {
        if ((process.env.NODE_ENV !== 'production')) {
          console.warn(
            "[vuex] trying to add a new module '" + key + "' on hot reloading, " +
            'manual reload is needed'
          );
        }
        return
      }
      update(
        path.concat(key),
        targetModule.getChild(key),
        newModule.modules[key]
      );
    }
  }
}

var functionAssert = {
  assert: function (value) { return typeof value === 'function'; },
  expected: 'function'
};

var objectAssert = {
  assert: function (value) { return typeof value === 'function' ||
    (typeof value === 'object' && typeof value.handler === 'function'); },
  expected: 'function or object with "handler" function'
};

var assertTypes = {
  getters: functionAssert,
  mutations: functionAssert,
  actions: objectAssert
};

function assertRawModule (path, rawModule) {
  Object.keys(assertTypes).forEach(function (key) {
    if (!rawModule[key]) { return }

    var assertOptions = assertTypes[key];

    forEachValue(rawModule[key], function (value, type) {
      assert(
        assertOptions.assert(value),
        makeAssertionMessage(path, key, type, value, assertOptions.expected)
      );
    });
  });
}

function makeAssertionMessage (path, key, type, value, expected) {
  var buf = key + " should be " + expected + " but \"" + key + "." + type + "\"";
  if (path.length > 0) {
    buf += " in module \"" + (path.join('.')) + "\"";
  }
  buf += " is " + (JSON.stringify(value)) + ".";
  return buf
}

var Vue; // bind on install

var Store = function Store (options) {
  var this$1 = this;
  if ( options === void 0 ) options = {};

  // Auto install if it is not done yet and `window` has `Vue`.
  // To allow users to avoid auto-installation in some cases,
  // this code should be placed here. See #731
  if (!Vue && typeof window !== 'undefined' && window.Vue) {
    install(window.Vue);
  }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(Vue, "must call Vue.use(Vuex) before creating a store instance.");
    assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser.");
    assert(this instanceof Store, "store must be called with the new operator.");
  }

  var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];
  var strict = options.strict; if ( strict === void 0 ) strict = false;

  // store internal state
  this._committing = false;
  this._actions = Object.create(null);
  this._actionSubscribers = [];
  this._mutations = Object.create(null);
  this._wrappedGetters = Object.create(null);
  this._modules = new ModuleCollection(options);
  this._modulesNamespaceMap = Object.create(null);
  this._subscribers = [];
  this._watcherVM = new Vue();
  this._makeLocalGettersCache = Object.create(null);

  // bind commit and dispatch to self
  var store = this;
  var ref = this;
  var dispatch = ref.dispatch;
  var commit = ref.commit;
  this.dispatch = function boundDispatch (type, payload) {
    return dispatch.call(store, type, payload)
  };
  this.commit = function boundCommit (type, payload, options) {
    return commit.call(store, type, payload, options)
  };

  // strict mode
  this.strict = strict;

  var state = this._modules.root.state;

  // init root module.
  // this also recursively registers all sub-modules
  // and collects all module getters inside this._wrappedGetters
  installModule(this, state, [], this._modules.root);

  // initialize the store vm, which is responsible for the reactivity
  // (also registers _wrappedGetters as computed properties)
  resetStoreVM(this, state);

  // apply plugins
  plugins.forEach(function (plugin) { return plugin(this$1); });

  var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;
  if (useDevtools) {
    devtoolPlugin(this);
  }
};

var prototypeAccessors$1 = { state: { configurable: true } };

prototypeAccessors$1.state.get = function () {
  return this._vm._data.$$state
};

prototypeAccessors$1.state.set = function (v) {
  if ((process.env.NODE_ENV !== 'production')) {
    assert(false, "use store.replaceState() to explicit replace store state.");
  }
};

Store.prototype.commit = function commit (_type, _payload, _options) {
    var this$1 = this;

  // check object-style commit
  var ref = unifyObjectStyle(_type, _payload, _options);
    var type = ref.type;
    var payload = ref.payload;
    var options = ref.options;

  var mutation = { type: type, payload: payload };
  var entry = this._mutations[type];
  if (!entry) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.error(("[vuex] unknown mutation type: " + type));
    }
    return
  }
  this._withCommit(function () {
    entry.forEach(function commitIterator (handler) {
      handler(payload);
    });
  });

  this._subscribers
    .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
    .forEach(function (sub) { return sub(mutation, this$1.state); });

  if (
    (process.env.NODE_ENV !== 'production') &&
    options && options.silent
  ) {
    console.warn(
      "[vuex] mutation type: " + type + ". Silent option has been removed. " +
      'Use the filter functionality in the vue-devtools'
    );
  }
};

Store.prototype.dispatch = function dispatch (_type, _payload) {
    var this$1 = this;

  // check object-style dispatch
  var ref = unifyObjectStyle(_type, _payload);
    var type = ref.type;
    var payload = ref.payload;

  var action = { type: type, payload: payload };
  var entry = this._actions[type];
  if (!entry) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.error(("[vuex] unknown action type: " + type));
    }
    return
  }

  try {
    this._actionSubscribers
      .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
      .filter(function (sub) { return sub.before; })
      .forEach(function (sub) { return sub.before(action, this$1.state); });
  } catch (e) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.warn("[vuex] error in before action subscribers: ");
      console.error(e);
    }
  }

  var result = entry.length > 1
    ? Promise.all(entry.map(function (handler) { return handler(payload); }))
    : entry[0](payload);

  return new Promise(function (resolve, reject) {
    result.then(function (res) {
      try {
        this$1._actionSubscribers
          .filter(function (sub) { return sub.after; })
          .forEach(function (sub) { return sub.after(action, this$1.state); });
      } catch (e) {
        if ((process.env.NODE_ENV !== 'production')) {
          console.warn("[vuex] error in after action subscribers: ");
          console.error(e);
        }
      }
      resolve(res);
    }, function (error) {
      try {
        this$1._actionSubscribers
          .filter(function (sub) { return sub.error; })
          .forEach(function (sub) { return sub.error(action, this$1.state, error); });
      } catch (e) {
        if ((process.env.NODE_ENV !== 'production')) {
          console.warn("[vuex] error in error action subscribers: ");
          console.error(e);
        }
      }
      reject(error);
    });
  })
};

Store.prototype.subscribe = function subscribe (fn, options) {
  return genericSubscribe(fn, this._subscribers, options)
};

Store.prototype.subscribeAction = function subscribeAction (fn, options) {
  var subs = typeof fn === 'function' ? { before: fn } : fn;
  return genericSubscribe(subs, this._actionSubscribers, options)
};

Store.prototype.watch = function watch (getter, cb, options) {
    var this$1 = this;

  if ((process.env.NODE_ENV !== 'production')) {
    assert(typeof getter === 'function', "store.watch only accepts a function.");
  }
  return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)
};

Store.prototype.replaceState = function replaceState (state) {
    var this$1 = this;

  this._withCommit(function () {
    this$1._vm._data.$$state = state;
  });
};

Store.prototype.registerModule = function registerModule (path, rawModule, options) {
    if ( options === void 0 ) options = {};

  if (typeof path === 'string') { path = [path]; }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(Array.isArray(path), "module path must be a string or an Array.");
    assert(path.length > 0, 'cannot register the root module by using registerModule.');
  }

  this._modules.register(path, rawModule);
  installModule(this, this.state, path, this._modules.get(path), options.preserveState);
  // reset store to update getters...
  resetStoreVM(this, this.state);
};

Store.prototype.unregisterModule = function unregisterModule (path) {
    var this$1 = this;

  if (typeof path === 'string') { path = [path]; }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(Array.isArray(path), "module path must be a string or an Array.");
  }

  this._modules.unregister(path);
  this._withCommit(function () {
    var parentState = getNestedState(this$1.state, path.slice(0, -1));
    Vue.delete(parentState, path[path.length - 1]);
  });
  resetStore(this);
};

Store.prototype.hasModule = function hasModule (path) {
  if (typeof path === 'string') { path = [path]; }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(Array.isArray(path), "module path must be a string or an Array.");
  }

  return this._modules.isRegistered(path)
};

Store.prototype.hotUpdate = function hotUpdate (newOptions) {
  this._modules.update(newOptions);
  resetStore(this, true);
};

Store.prototype._withCommit = function _withCommit (fn) {
  var committing = this._committing;
  this._committing = true;
  fn();
  this._committing = committing;
};

Object.defineProperties( Store.prototype, prototypeAccessors$1 );

function genericSubscribe (fn, subs, options) {
  if (subs.indexOf(fn) < 0) {
    options && options.prepend
      ? subs.unshift(fn)
      : subs.push(fn);
  }
  return function () {
    var i = subs.indexOf(fn);
    if (i > -1) {
      subs.splice(i, 1);
    }
  }
}

function resetStore (store, hot) {
  store._actions = Object.create(null);
  store._mutations = Object.create(null);
  store._wrappedGetters = Object.create(null);
  store._modulesNamespaceMap = Object.create(null);
  var state = store.state;
  // init all modules
  installModule(store, state, [], store._modules.root, true);
  // reset vm
  resetStoreVM(store, state, hot);
}

function resetStoreVM (store, state, hot) {
  var oldVm = store._vm;

  // bind store public getters
  store.getters = {};
  // reset local getters cache
  store._makeLocalGettersCache = Object.create(null);
  var wrappedGetters = store._wrappedGetters;
  var computed = {};
  forEachValue(wrappedGetters, function (fn, key) {
    // use computed to leverage its lazy-caching mechanism
    // direct inline function use will lead to closure preserving oldVm.
    // using partial to return function with only arguments preserved in closure environment.
    computed[key] = partial(fn, store);
    Object.defineProperty(store.getters, key, {
      get: function () { return store._vm[key]; },
      enumerable: true // for local getters
    });
  });

  // use a Vue instance to store the state tree
  // suppress warnings just in case the user has added
  // some funky global mixins
  var silent = Vue.config.silent;
  Vue.config.silent = true;
  store._vm = new Vue({
    data: {
      $$state: state
    },
    computed: computed
  });
  Vue.config.silent = silent;

  // enable strict mode for new vm
  if (store.strict) {
    enableStrictMode(store);
  }

  if (oldVm) {
    if (hot) {
      // dispatch changes in all subscribed watchers
      // to force getter re-evaluation for hot reloading.
      store._withCommit(function () {
        oldVm._data.$$state = null;
      });
    }
    Vue.nextTick(function () { return oldVm.$destroy(); });
  }
}

function installModule (store, rootState, path, module, hot) {
  var isRoot = !path.length;
  var namespace = store._modules.getNamespace(path);

  // register in namespace map
  if (module.namespaced) {
    if (store._modulesNamespaceMap[namespace] && (process.env.NODE_ENV !== 'production')) {
      console.error(("[vuex] duplicate namespace " + namespace + " for the namespaced module " + (path.join('/'))));
    }
    store._modulesNamespaceMap[namespace] = module;
  }

  // set state
  if (!isRoot && !hot) {
    var parentState = getNestedState(rootState, path.slice(0, -1));
    var moduleName = path[path.length - 1];
    store._withCommit(function () {
      if ((process.env.NODE_ENV !== 'production')) {
        if (moduleName in parentState) {
          console.warn(
            ("[vuex] state field \"" + moduleName + "\" was overridden by a module with the same name at \"" + (path.join('.')) + "\"")
          );
        }
      }
      Vue.set(parentState, moduleName, module.state);
    });
  }

  var local = module.context = makeLocalContext(store, namespace, path);

  module.forEachMutation(function (mutation, key) {
    var namespacedType = namespace + key;
    registerMutation(store, namespacedType, mutation, local);
  });

  module.forEachAction(function (action, key) {
    var type = action.root ? key : namespace + key;
    var handler = action.handler || action;
    registerAction(store, type, handler, local);
  });

  module.forEachGetter(function (getter, key) {
    var namespacedType = namespace + key;
    registerGetter(store, namespacedType, getter, local);
  });

  module.forEachChild(function (child, key) {
    installModule(store, rootState, path.concat(key), child, hot);
  });
}

/**
 * make localized dispatch, commit, getters and state
 * if there is no namespace, just use root ones
 */
function makeLocalContext (store, namespace, path) {
  var noNamespace = namespace === '';

  var local = {
    dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {
      var args = unifyObjectStyle(_type, _payload, _options);
      var payload = args.payload;
      var options = args.options;
      var type = args.type;

      if (!options || !options.root) {
        type = namespace + type;
        if ((process.env.NODE_ENV !== 'production') && !store._actions[type]) {
          console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type));
          return
        }
      }

      return store.dispatch(type, payload)
    },

    commit: noNamespace ? store.commit : function (_type, _payload, _options) {
      var args = unifyObjectStyle(_type, _payload, _options);
      var payload = args.payload;
      var options = args.options;
      var type = args.type;

      if (!options || !options.root) {
        type = namespace + type;
        if ((process.env.NODE_ENV !== 'production') && !store._mutations[type]) {
          console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type));
          return
        }
      }

      store.commit(type, payload, options);
    }
  };

  // getters and state object must be gotten lazily
  // because they will be changed by vm update
  Object.defineProperties(local, {
    getters: {
      get: noNamespace
        ? function () { return store.getters; }
        : function () { return makeLocalGetters(store, namespace); }
    },
    state: {
      get: function () { return getNestedState(store.state, path); }
    }
  });

  return local
}

function makeLocalGetters (store, namespace) {
  if (!store._makeLocalGettersCache[namespace]) {
    var gettersProxy = {};
    var splitPos = namespace.length;
    Object.keys(store.getters).forEach(function (type) {
      // skip if the target getter is not match this namespace
      if (type.slice(0, splitPos) !== namespace) { return }

      // extract local getter type
      var localType = type.slice(splitPos);

      // Add a port to the getters proxy.
      // Define as getter property because
      // we do not want to evaluate the getters in this time.
      Object.defineProperty(gettersProxy, localType, {
        get: function () { return store.getters[type]; },
        enumerable: true
      });
    });
    store._makeLocalGettersCache[namespace] = gettersProxy;
  }

  return store._makeLocalGettersCache[namespace]
}

function registerMutation (store, type, handler, local) {
  var entry = store._mutations[type] || (store._mutations[type] = []);
  entry.push(function wrappedMutationHandler (payload) {
    handler.call(store, local.state, payload);
  });
}

function registerAction (store, type, handler, local) {
  var entry = store._actions[type] || (store._actions[type] = []);
  entry.push(function wrappedActionHandler (payload) {
    var res = handler.call(store, {
      dispatch: local.dispatch,
      commit: local.commit,
      getters: local.getters,
      state: local.state,
      rootGetters: store.getters,
      rootState: store.state
    }, payload);
    if (!isPromise(res)) {
      res = Promise.resolve(res);
    }
    if (store._devtoolHook) {
      return res.catch(function (err) {
        store._devtoolHook.emit('vuex:error', err);
        throw err
      })
    } else {
      return res
    }
  });
}

function registerGetter (store, type, rawGetter, local) {
  if (store._wrappedGetters[type]) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.error(("[vuex] duplicate getter key: " + type));
    }
    return
  }
  store._wrappedGetters[type] = function wrappedGetter (store) {
    return rawGetter(
      local.state, // local state
      local.getters, // local getters
      store.state, // root state
      store.getters // root getters
    )
  };
}

function enableStrictMode (store) {
  store._vm.$watch(function () { return this._data.$$state }, function () {
    if ((process.env.NODE_ENV !== 'production')) {
      assert(store._committing, "do not mutate vuex store state outside mutation handlers.");
    }
  }, { deep: true, sync: true });
}

function getNestedState (state, path) {
  return path.reduce(function (state, key) { return state[key]; }, state)
}

function unifyObjectStyle (type, payload, options) {
  if (isObject(type) && type.type) {
    options = payload;
    payload = type;
    type = type.type;
  }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(typeof type === 'string', ("expects string as the type, but found " + (typeof type) + "."));
  }

  return { type: type, payload: payload, options: options }
}

function install (_Vue) {
  if (Vue && _Vue === Vue) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.error(
        '[vuex] already installed. Vue.use(Vuex) should be called only once.'
      );
    }
    return
  }
  Vue = _Vue;
  applyMixin(Vue);
}

/**
 * Reduce the code which written in Vue.js for getting the state.
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.
 * @param {Object}
 */
var mapState = normalizeNamespace(function (namespace, states) {
  var res = {};
  if ((process.env.NODE_ENV !== 'production') && !isValidMap(states)) {
    console.error('[vuex] mapState: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(states).forEach(function (ref) {
    var key = ref.key;
    var val = ref.val;

    res[key] = function mappedState () {
      var state = this.$store.state;
      var getters = this.$store.getters;
      if (namespace) {
        var module = getModuleByNamespace(this.$store, 'mapState', namespace);
        if (!module) {
          return
        }
        state = module.context.state;
        getters = module.context.getters;
      }
      return typeof val === 'function'
        ? val.call(this, state, getters)
        : state[val]
    };
    // mark vuex getter for devtools
    res[key].vuex = true;
  });
  return res
});

/**
 * Reduce the code which written in Vue.js for committing the mutation
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept another params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.
 * @return {Object}
 */
var mapMutations = normalizeNamespace(function (namespace, mutations) {
  var res = {};
  if ((process.env.NODE_ENV !== 'production') && !isValidMap(mutations)) {
    console.error('[vuex] mapMutations: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(mutations).forEach(function (ref) {
    var key = ref.key;
    var val = ref.val;

    res[key] = function mappedMutation () {
      var args = [], len = arguments.length;
      while ( len-- ) args[ len ] = arguments[ len ];

      // Get the commit method from store
      var commit = this.$store.commit;
      if (namespace) {
        var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);
        if (!module) {
          return
        }
        commit = module.context.commit;
      }
      return typeof val === 'function'
        ? val.apply(this, [commit].concat(args))
        : commit.apply(this.$store, [val].concat(args))
    };
  });
  return res
});

/**
 * Reduce the code which written in Vue.js for getting the getters
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} getters
 * @return {Object}
 */
var mapGetters = normalizeNamespace(function (namespace, getters) {
  var res = {};
  if ((process.env.NODE_ENV !== 'production') && !isValidMap(getters)) {
    console.error('[vuex] mapGetters: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(getters).forEach(function (ref) {
    var key = ref.key;
    var val = ref.val;

    // The namespace has been mutated by normalizeNamespace
    val = namespace + val;
    res[key] = function mappedGetter () {
      if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
        return
      }
      if ((process.env.NODE_ENV !== 'production') && !(val in this.$store.getters)) {
        console.error(("[vuex] unknown getter: " + val));
        return
      }
      return this.$store.getters[val]
    };
    // mark vuex getter for devtools
    res[key].vuex = true;
  });
  return res
});

/**
 * Reduce the code which written in Vue.js for dispatch the action
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.
 * @return {Object}
 */
var mapActions = normalizeNamespace(function (namespace, actions) {
  var res = {};
  if ((process.env.NODE_ENV !== 'production') && !isValidMap(actions)) {
    console.error('[vuex] mapActions: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(actions).forEach(function (ref) {
    var key = ref.key;
    var val = ref.val;

    res[key] = function mappedAction () {
      var args = [], len = arguments.length;
      while ( len-- ) args[ len ] = arguments[ len ];

      // get dispatch function from store
      var dispatch = this.$store.dispatch;
      if (namespace) {
        var module = getModuleByNamespace(this.$store, 'mapActions', namespace);
        if (!module) {
          return
        }
        dispatch = module.context.dispatch;
      }
      return typeof val === 'function'
        ? val.apply(this, [dispatch].concat(args))
        : dispatch.apply(this.$store, [val].concat(args))
    };
  });
  return res
});

/**
 * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object
 * @param {String} namespace
 * @return {Object}
 */
var createNamespacedHelpers = function (namespace) { return ({
  mapState: mapState.bind(null, namespace),
  mapGetters: mapGetters.bind(null, namespace),
  mapMutations: mapMutations.bind(null, namespace),
  mapActions: mapActions.bind(null, namespace)
}); };

/**
 * Normalize the map
 * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]
 * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]
 * @param {Array|Object} map
 * @return {Object}
 */
function normalizeMap (map) {
  if (!isValidMap(map)) {
    return []
  }
  return Array.isArray(map)
    ? map.map(function (key) { return ({ key: key, val: key }); })
    : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })
}

/**
 * Validate whether given map is valid or not
 * @param {*} map
 * @return {Boolean}
 */
function isValidMap (map) {
  return Array.isArray(map) || isObject(map)
}

/**
 * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.
 * @param {Function} fn
 * @return {Function}
 */
function normalizeNamespace (fn) {
  return function (namespace, map) {
    if (typeof namespace !== 'string') {
      map = namespace;
      namespace = '';
    } else if (namespace.charAt(namespace.length - 1) !== '/') {
      namespace += '/';
    }
    return fn(namespace, map)
  }
}

/**
 * Search a special module from store by namespace. if module not exist, print error message.
 * @param {Object} store
 * @param {String} helper
 * @param {String} namespace
 * @return {Object}
 */
function getModuleByNamespace (store, helper, namespace) {
  var module = store._modulesNamespaceMap[namespace];
  if ((process.env.NODE_ENV !== 'production') && !module) {
    console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace));
  }
  return module
}

// Credits: borrowed code from fcomb/redux-logger

function createLogger (ref) {
  if ( ref === void 0 ) ref = {};
  var collapsed = ref.collapsed; if ( collapsed === void 0 ) collapsed = true;
  var filter = ref.filter; if ( filter === void 0 ) filter = function (mutation, stateBefore, stateAfter) { return true; };
  var transformer = ref.transformer; if ( transformer === void 0 ) transformer = function (state) { return state; };
  var mutationTransformer = ref.mutationTransformer; if ( mutationTransformer === void 0 ) mutationTransformer = function (mut) { return mut; };
  var actionFilter = ref.actionFilter; if ( actionFilter === void 0 ) actionFilter = function (action, state) { return true; };
  var actionTransformer = ref.actionTransformer; if ( actionTransformer === void 0 ) actionTransformer = function (act) { return act; };
  var logMutations = ref.logMutations; if ( logMutations === void 0 ) logMutations = true;
  var logActions = ref.logActions; if ( logActions === void 0 ) logActions = true;
  var logger = ref.logger; if ( logger === void 0 ) logger = console;

  return function (store) {
    var prevState = deepCopy(store.state);

    if (typeof logger === 'undefined') {
      return
    }

    if (logMutations) {
      store.subscribe(function (mutation, state) {
        var nextState = deepCopy(state);

        if (filter(mutation, prevState, nextState)) {
          var formattedTime = getFormattedTime();
          var formattedMutation = mutationTransformer(mutation);
          var message = "mutation " + (mutation.type) + formattedTime;

          startMessage(logger, message, collapsed);
          logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState));
          logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation);
          logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState));
          endMessage(logger);
        }

        prevState = nextState;
      });
    }

    if (logActions) {
      store.subscribeAction(function (action, state) {
        if (actionFilter(action, state)) {
          var formattedTime = getFormattedTime();
          var formattedAction = actionTransformer(action);
          var message = "action " + (action.type) + formattedTime;

          startMessage(logger, message, collapsed);
          logger.log('%c action', 'color: #03A9F4; font-weight: bold', formattedAction);
          endMessage(logger);
        }
      });
    }
  }
}

function startMessage (logger, message, collapsed) {
  var startMessage = collapsed
    ? logger.groupCollapsed
    : logger.group;

  // render
  try {
    startMessage.call(logger, message);
  } catch (e) {
    logger.log(message);
  }
}

function endMessage (logger) {
  try {
    logger.groupEnd();
  } catch (e) {
    logger.log('â€”â€” log end â€”â€”');
  }
}

function getFormattedTime () {
  var time = new Date();
  return (" @ " + (pad(time.getHours(), 2)) + ":" + (pad(time.getMinutes(), 2)) + ":" + (pad(time.getSeconds(), 2)) + "." + (pad(time.getMilliseconds(), 3)))
}

function repeat (str, times) {
  return (new Array(times + 1)).join(str)
}

function pad (num, maxLength) {
  return repeat('0', maxLength - num.toString().length) + num
}

var index_cjs = {
  Store: Store,
  install: install,
  version: '3.6.2',
  mapState: mapState,
  mapMutations: mapMutations,
  mapGetters: mapGetters,
  mapActions: mapActions,
  createNamespacedHelpers: createNamespacedHelpers,
  createLogger: createLogger
};

module.exports = index_cjs;
/*!
 * vuex v3.6.2
 * (c) 2021 Evan You
 * @license MIT
 */
function applyMixin (Vue) {
  const version = Number(Vue.version.split('.')[0]);

  if (version >= 2) {
    Vue.mixin({ beforeCreate: vuexInit });
  } else {
    // override init and inject vuex init procedure
    // for 1.x backwards compatibility.
    const _init = Vue.prototype._init;
    Vue.prototype._init = function (options = {}) {
      options.init = options.init
        ? [vuexInit].concat(options.init)
        : vuexInit;
      _init.call(this, options);
    };
  }

  /**
   * Vuex init hook, injected into each instances init hooks list.
   */

  function vuexInit () {
    const options = this.$options;
    // store injection
    if (options.store) {
      this.$store = typeof options.store === 'function'
        ? options.store()
        : options.store;
    } else if (options.parent && options.parent.$store) {
      this.$store = options.parent.$store;
    }
  }
}

const target = typeof window !== 'undefined'
  ? window
  : typeof global !== 'undefined'
    ? global
    : {};
const devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;

function devtoolPlugin (store) {
  if (!devtoolHook) return

  store._devtoolHook = devtoolHook;

  devtoolHook.emit('vuex:init', store);

  devtoolHook.on('vuex:travel-to-state', targetState => {
    store.replaceState(targetState);
  });

  store.subscribe((mutation, state) => {
    devtoolHook.emit('vuex:mutation', mutation, state);
  }, { prepend: true });

  store.subscribeAction((action, state) => {
    devtoolHook.emit('vuex:action', action, state);
  }, { prepend: true });
}

/**
 * Get the first item that pass the test
 * by second argument function
 *
 * @param {Array} list
 * @param {Function} f
 * @return {*}
 */
function find (list, f) {
  return list.filter(f)[0]
}

/**
 * Deep copy the given object considering circular structure.
 * This function caches all nested objects and its copies.
 * If it detects circular structure, use cached copy to avoid infinite loop.
 *
 * @param {*} obj
 * @param {Array<Object>} cache
 * @return {*}
 */
function deepCopy (obj, cache = []) {
  // just return if obj is immutable value
  if (obj === null || typeof obj !== 'object') {
    return obj
  }

  // if obj is hit, it is in circular structure
  const hit = find(cache, c => c.original === obj);
  if (hit) {
    return hit.copy
  }

  const copy = Array.isArray(obj) ? [] : {};
  // put the copy into cache at first
  // because we want to refer it in recursive deepCopy
  cache.push({
    original: obj,
    copy
  });

  Object.keys(obj).forEach(key => {
    copy[key] = deepCopy(obj[key], cache);
  });

  return copy
}

/**
 * forEach for object
 */
function forEachValue (obj, fn) {
  Object.keys(obj).forEach(key => fn(obj[key], key));
}

function isObject (obj) {
  return obj !== null && typeof obj === 'object'
}

function isPromise (val) {
  return val && typeof val.then === 'function'
}

function assert (condition, msg) {
  if (!condition) throw new Error(`[vuex] ${msg}`)
}

function partial (fn, arg) {
  return function () {
    return fn(arg)
  }
}

// Base data struct for store's module, package with some attribute and method
class Module {
  constructor (rawModule, runtime) {
    this.runtime = runtime;
    // Store some children item
    this._children = Object.create(null);
    // Store the origin module object which passed by programmer
    this._rawModule = rawModule;
    const rawState = rawModule.state;

    // Store the origin module's state
    this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};
  }

  get namespaced () {
    return !!this._rawModule.namespaced
  }

  addChild (key, module) {
    this._children[key] = module;
  }

  removeChild (key) {
    delete this._children[key];
  }

  getChild (key) {
    return this._children[key]
  }

  hasChild (key) {
    return key in this._children
  }

  update (rawModule) {
    this._rawModule.namespaced = rawModule.namespaced;
    if (rawModule.actions) {
      this._rawModule.actions = rawModule.actions;
    }
    if (rawModule.mutations) {
      this._rawModule.mutations = rawModule.mutations;
    }
    if (rawModule.getters) {
      this._rawModule.getters = rawModule.getters;
    }
  }

  forEachChild (fn) {
    forEachValue(this._children, fn);
  }

  forEachGetter (fn) {
    if (this._rawModule.getters) {
      forEachValue(this._rawModule.getters, fn);
    }
  }

  forEachAction (fn) {
    if (this._rawModule.actions) {
      forEachValue(this._rawModule.actions, fn);
    }
  }

  forEachMutation (fn) {
    if (this._rawModule.mutations) {
      forEachValue(this._rawModule.mutations, fn);
    }
  }
}

class ModuleCollection {
  constructor (rawRootModule) {
    // register root module (Vuex.Store options)
    this.register([], rawRootModule, false);
  }

  get (path) {
    return path.reduce((module, key) => {
      return module.getChild(key)
    }, this.root)
  }

  getNamespace (path) {
    let module = this.root;
    return path.reduce((namespace, key) => {
      module = module.getChild(key);
      return namespace + (module.namespaced ? key + '/' : '')
    }, '')
  }

  update (rawRootModule) {
    update([], this.root, rawRootModule);
  }

  register (path, rawModule, runtime = true) {
    {
      assertRawModule(path, rawModule);
    }

    const newModule = new Module(rawModule, runtime);
    if (path.length === 0) {
      this.root = newModule;
    } else {
      const parent = this.get(path.slice(0, -1));
      parent.addChild(path[path.length - 1], newModule);
    }

    // register nested modules
    if (rawModule.modules) {
      forEachValue(rawModule.modules, (rawChildModule, key) => {
        this.register(path.concat(key), rawChildModule, runtime);
      });
    }
  }

  unregister (path) {
    const parent = this.get(path.slice(0, -1));
    const key = path[path.length - 1];
    const child = parent.getChild(key);

    if (!child) {
      {
        console.warn(
          `[vuex] trying to unregister module '${key}', which is ` +
          `not registered`
        );
      }
      return
    }

    if (!child.runtime) {
      return
    }

    parent.removeChild(key);
  }

  isRegistered (path) {
    const parent = this.get(path.slice(0, -1));
    const key = path[path.length - 1];

    if (parent) {
      return parent.hasChild(key)
    }

    return false
  }
}

function update (path, targetModule, newModule) {
  {
    assertRawModule(path, newModule);
  }

  // update target module
  targetModule.update(newModule);

  // update nested modules
  if (newModule.modules) {
    for (const key in newModule.modules) {
      if (!targetModule.getChild(key)) {
        {
          console.warn(
            `[vuex] trying to add a new module '${key}' on hot reloading, ` +
            'manual reload is needed'
          );
        }
        return
      }
      update(
        path.concat(key),
        targetModule.getChild(key),
        newModule.modules[key]
      );
    }
  }
}

const functionAssert = {
  assert: value => typeof value === 'function',
  expected: 'function'
};

const objectAssert = {
  assert: value => typeof value === 'function' ||
    (typeof value === 'object' && typeof value.handler === 'function'),
  expected: 'function or object with "handler" function'
};

const assertTypes = {
  getters: functionAssert,
  mutations: functionAssert,
  actions: objectAssert
};

function assertRawModule (path, rawModule) {
  Object.keys(assertTypes).forEach(key => {
    if (!rawModule[key]) return

    const assertOptions = assertTypes[key];

    forEachValue(rawModule[key], (value, type) => {
      assert(
        assertOptions.assert(value),
        makeAssertionMessage(path, key, type, value, assertOptions.expected)
      );
    });
  });
}

function makeAssertionMessage (path, key, type, value, expected) {
  let buf = `${key} should be ${expected} but "${key}.${type}"`;
  if (path.length > 0) {
    buf += ` in module "${path.join('.')}"`;
  }
  buf += ` is ${JSON.stringify(value)}.`;
  return buf
}

let Vue; // bind on install

class Store {
  constructor (options = {}) {
    // Auto install if it is not done yet and `window` has `Vue`.
    // To allow users to avoid auto-installation in some cases,
    // this code should be placed here. See #731
    if (!Vue && typeof window !== 'undefined' && window.Vue) {
      install(window.Vue);
    }

    {
      assert(Vue, `must call Vue.use(Vuex) before creating a store instance.`);
      assert(typeof Promise !== 'undefined', `vuex requires a Promise polyfill in this browser.`);
      assert(this instanceof Store, `store must be called with the new operator.`);
    }

    const {
      plugins = [],
      strict = false
    } = options;

    // store internal state
    this._committing = false;
    this._actions = Object.create(null);
    this._actionSubscribers = [];
    this._mutations = Object.create(null);
    this._wrappedGetters = Object.create(null);
    this._modules = new ModuleCollection(options);
    this._modulesNamespaceMap = Object.create(null);
    this._subscribers = [];
    this._watcherVM = new Vue();
    this._makeLocalGettersCache = Object.create(null);

    // bind commit and dispatch to self
    const store = this;
    const { dispatch, commit } = this;
    this.dispatch = function boundDispatch (type, payload) {
      return dispatch.call(store, type, payload)
    };
    this.commit = function boundCommit (type, payload, options) {
      return commit.call(store, type, payload, options)
    };

    // strict mode
    this.strict = strict;

    const state = this._modules.root.state;

    // init root module.
    // this also recursively registers all sub-modules
    // and collects all module getters inside this._wrappedGetters
    installModule(this, state, [], this._modules.root);

    // initialize the store vm, which is responsible for the reactivity
    // (also registers _wrappedGetters as computed properties)
    resetStoreVM(this, state);

    // apply plugins
    plugins.forEach(plugin => plugin(this));

    const useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;
    if (useDevtools) {
      devtoolPlugin(this);
    }
  }

  get state () {
    return this._vm._data.$$state
  }

  set state (v) {
    {
      assert(false, `use store.replaceState() to explicit replace store state.`);
    }
  }

  commit (_type, _payload, _options) {
    // check object-style commit
    const {
      type,
      payload,
      options
    } = unifyObjectStyle(_type, _payload, _options);

    const mutation = { type, payload };
    const entry = this._mutations[type];
    if (!entry) {
      {
        console.error(`[vuex] unknown mutation type: ${type}`);
      }
      return
    }
    this._withCommit(() => {
      entry.forEach(function commitIterator (handler) {
        handler(payload);
      });
    });

    this._subscribers
      .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
      .forEach(sub => sub(mutation, this.state));

    if (
      
      options && options.silent
    ) {
      console.warn(
        `[vuex] mutation type: ${type}. Silent option has been removed. ` +
        'Use the filter functionality in the vue-devtools'
      );
    }
  }

  dispatch (_type, _payload) {
    // check object-style dispatch
    const {
      type,
      payload
    } = unifyObjectStyle(_type, _payload);

    const action = { type, payload };
    const entry = this._actions[type];
    if (!entry) {
      {
        console.error(`[vuex] unknown action type: ${type}`);
      }
      return
    }

    try {
      this._actionSubscribers
        .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
        .filter(sub => sub.before)
        .forEach(sub => sub.before(action, this.state));
    } catch (e) {
      {
        console.warn(`[vuex] error in before action subscribers: `);
        console.error(e);
      }
    }

    const result = entry.length > 1
      ? Promise.all(entry.map(handler => handler(payload)))
      : entry[0](payload);

    return new Promise((resolve, reject) => {
      result.then(res => {
        try {
          this._actionSubscribers
            .filter(sub => sub.after)
            .forEach(sub => sub.after(action, this.state));
        } catch (e) {
          {
            console.warn(`[vuex] error in after action subscribers: `);
            console.error(e);
          }
        }
        resolve(res);
      }, error => {
        try {
          this._actionSubscribers
            .filter(sub => sub.error)
            .forEach(sub => sub.error(action, this.state, error));
        } catch (e) {
          {
            console.warn(`[vuex] error in error action subscribers: `);
            console.error(e);
          }
        }
        reject(error);
      });
    })
  }

  subscribe (fn, options) {
    return genericSubscribe(fn, this._subscribers, options)
  }

  subscribeAction (fn, options) {
    const subs = typeof fn === 'function' ? { before: fn } : fn;
    return genericSubscribe(subs, this._actionSubscribers, options)
  }

  watch (getter, cb, options) {
    {
      assert(typeof getter === 'function', `store.watch only accepts a function.`);
    }
    return this._watcherVM.$watch(() => getter(this.state, this.getters), cb, options)
  }

  replaceState (state) {
    this._withCommit(() => {
      this._vm._data.$$state = state;
    });
  }

  registerModule (path, rawModule, options = {}) {
    if (typeof path === 'string') path = [path];

    {
      assert(Array.isArray(path), `module path must be a string or an Array.`);
      assert(path.length > 0, 'cannot register the root module by using registerModule.');
    }

    this._modules.register(path, rawModule);
    installModule(this, this.state, path, this._modules.get(path), options.preserveState);
    // reset store to update getters...
    resetStoreVM(this, this.state);
  }

  unregisterModule (path) {
    if (typeof path === 'string') path = [path];

    {
      assert(Array.isArray(path), `module path must be a string or an Array.`);
    }

    this._modules.unregister(path);
    this._withCommit(() => {
      const parentState = getNestedState(this.state, path.slice(0, -1));
      Vue.delete(parentState, path[path.length - 1]);
    });
    resetStore(this);
  }

  hasModule (path) {
    if (typeof path === 'string') path = [path];

    {
      assert(Array.isArray(path), `module path must be a string or an Array.`);
    }

    return this._modules.isRegistered(path)
  }

  hotUpdate (newOptions) {
    this._modules.update(newOptions);
    resetStore(this, true);
  }

  _withCommit (fn) {
    const committing = this._committing;
    this._committing = true;
    fn();
    this._committing = committing;
  }
}

function genericSubscribe (fn, subs, options) {
  if (subs.indexOf(fn) < 0) {
    options && options.prepend
      ? subs.unshift(fn)
      : subs.push(fn);
  }
  return () => {
    const i = subs.indexOf(fn);
    if (i > -1) {
      subs.splice(i, 1);
    }
  }
}

function resetStore (store, hot) {
  store._actions = Object.create(null);
  store._mutations = Object.create(null);
  store._wrappedGetters = Object.create(null);
  store._modulesNamespaceMap = Object.create(null);
  const state = store.state;
  // init all modules
  installModule(store, state, [], store._modules.root, true);
  // reset vm
  resetStoreVM(store, state, hot);
}

function resetStoreVM (store, state, hot) {
  const oldVm = store._vm;

  // bind store public getters
  store.getters = {};
  // reset local getters cache
  store._makeLocalGettersCache = Object.create(null);
  const wrappedGetters = store._wrappedGetters;
  const computed = {};
  forEachValue(wrappedGetters, (fn, key) => {
    // use computed to leverage its lazy-caching mechanism
    // direct inline function use will lead to closure preserving oldVm.
    // using partial to return function with only arguments preserved in closure environment.
    computed[key] = partial(fn, store);
    Object.defineProperty(store.getters, key, {
      get: () => store._vm[key],
      enumerable: true // for local getters
    });
  });

  // use a Vue instance to store the state tree
  // suppress warnings just in case the user has added
  // some funky global mixins
  const silent = Vue.config.silent;
  Vue.config.silent = true;
  store._vm = new Vue({
    data: {
      $$state: state
    },
    computed
  });
  Vue.config.silent = silent;

  // enable strict mode for new vm
  if (store.strict) {
    enableStrictMode(store);
  }

  if (oldVm) {
    if (hot) {
      // dispatch changes in all subscribed watchers
      // to force getter re-evaluation for hot reloading.
      store._withCommit(() => {
        oldVm._data.$$state = null;
      });
    }
    Vue.nextTick(() => oldVm.$destroy());
  }
}

function installModule (store, rootState, path, module, hot) {
  const isRoot = !path.length;
  const namespace = store._modules.getNamespace(path);

  // register in namespace map
  if (module.namespaced) {
    if (store._modulesNamespaceMap[namespace] && true) {
      console.error(`[vuex] duplicate namespace ${namespace} for the namespaced module ${path.join('/')}`);
    }
    store._modulesNamespaceMap[namespace] = module;
  }

  // set state
  if (!isRoot && !hot) {
    const parentState = getNestedState(rootState, path.slice(0, -1));
    const moduleName = path[path.length - 1];
    store._withCommit(() => {
      {
        if (moduleName in parentState) {
          console.warn(
            `[vuex] state field "${moduleName}" was overridden by a module with the same name at "${path.join('.')}"`
          );
        }
      }
      Vue.set(parentState, moduleName, module.state);
    });
  }

  const local = module.context = makeLocalContext(store, namespace, path);

  module.forEachMutation((mutation, key) => {
    const namespacedType = namespace + key;
    registerMutation(store, namespacedType, mutation, local);
  });

  module.forEachAction((action, key) => {
    const type = action.root ? key : namespace + key;
    const handler = action.handler || action;
    registerAction(store, type, handler, local);
  });

  module.forEachGetter((getter, key) => {
    const namespacedType = namespace + key;
    registerGetter(store, namespacedType, getter, local);
  });

  module.forEachChild((child, key) => {
    installModule(store, rootState, path.concat(key), child, hot);
  });
}

/**
 * make localized dispatch, commit, getters and state
 * if there is no namespace, just use root ones
 */
function makeLocalContext (store, namespace, path) {
  const noNamespace = namespace === '';

  const local = {
    dispatch: noNamespace ? store.dispatch : (_type, _payload, _options) => {
      const args = unifyObjectStyle(_type, _payload, _options);
      const { payload, options } = args;
      let { type } = args;

      if (!options || !options.root) {
        type = namespace + type;
        if ( !store._actions[type]) {
          console.error(`[vuex] unknown local action type: ${args.type}, global type: ${type}`);
          return
        }
      }

      return store.dispatch(type, payload)
    },

    commit: noNamespace ? store.commit : (_type, _payload, _options) => {
      const args = unifyObjectStyle(_type, _payload, _options);
      const { payload, options } = args;
      let { type } = args;

      if (!options || !options.root) {
        type = namespace + type;
        if ( !store._mutations[type]) {
          console.error(`[vuex] unknown local mutation type: ${args.type}, global type: ${type}`);
          return
        }
      }

      store.commit(type, payload, options);
    }
  };

  // getters and state object must be gotten lazily
  // because they will be changed by vm update
  Object.defineProperties(local, {
    getters: {
      get: noNamespace
        ? () => store.getters
        : () => makeLocalGetters(store, namespace)
    },
    state: {
      get: () => getNestedState(store.state, path)
    }
  });

  return local
}

function makeLocalGetters (store, namespace) {
  if (!store._makeLocalGettersCache[namespace]) {
    const gettersProxy = {};
    const splitPos = namespace.length;
    Object.keys(store.getters).forEach(type => {
      // skip if the target getter is not match this namespace
      if (type.slice(0, splitPos) !== namespace) return

      // extract local getter type
      const localType = type.slice(splitPos);

      // Add a port to the getters proxy.
      // Define as getter property because
      // we do not want to evaluate the getters in this time.
      Object.defineProperty(gettersProxy, localType, {
        get: () => store.getters[type],
        enumerable: true
      });
    });
    store._makeLocalGettersCache[namespace] = gettersProxy;
  }

  return store._makeLocalGettersCache[namespace]
}

function registerMutation (store, type, handler, local) {
  const entry = store._mutations[type] || (store._mutations[type] = []);
  entry.push(function wrappedMutationHandler (payload) {
    handler.call(store, local.state, payload);
  });
}

function registerAction (store, type, handler, local) {
  const entry = store._actions[type] || (store._actions[type] = []);
  entry.push(function wrappedActionHandler (payload) {
    let res = handler.call(store, {
      dispatch: local.dispatch,
      commit: local.commit,
      getters: local.getters,
      state: local.state,
      rootGetters: store.getters,
      rootState: store.state
    }, payload);
    if (!isPromise(res)) {
      res = Promise.resolve(res);
    }
    if (store._devtoolHook) {
      return res.catch(err => {
        store._devtoolHook.emit('vuex:error', err);
        throw err
      })
    } else {
      return res
    }
  });
}

function registerGetter (store, type, rawGetter, local) {
  if (store._wrappedGetters[type]) {
    {
      console.error(`[vuex] duplicate getter key: ${type}`);
    }
    return
  }
  store._wrappedGetters[type] = function wrappedGetter (store) {
    return rawGetter(
      local.state, // local state
      local.getters, // local getters
      store.state, // root state
      store.getters // root getters
    )
  };
}

function enableStrictMode (store) {
  store._vm.$watch(function () { return this._data.$$state }, () => {
    {
      assert(store._committing, `do not mutate vuex store state outside mutation handlers.`);
    }
  }, { deep: true, sync: true });
}

function getNestedState (state, path) {
  return path.reduce((state, key) => state[key], state)
}

function unifyObjectStyle (type, payload, options) {
  if (isObject(type) && type.type) {
    options = payload;
    payload = type;
    type = type.type;
  }

  {
    assert(typeof type === 'string', `expects string as the type, but found ${typeof type}.`);
  }

  return { type, payload, options }
}

function install (_Vue) {
  if (Vue && _Vue === Vue) {
    {
      console.error(
        '[vuex] already installed. Vue.use(Vuex) should be called only once.'
      );
    }
    return
  }
  Vue = _Vue;
  applyMixin(Vue);
}

/**
 * Reduce the code which written in Vue.js for getting the state.
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.
 * @param {Object}
 */
const mapState = normalizeNamespace((namespace, states) => {
  const res = {};
  if ( !isValidMap(states)) {
    console.error('[vuex] mapState: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(states).forEach(({ key, val }) => {
    res[key] = function mappedState () {
      let state = this.$store.state;
      let getters = this.$store.getters;
      if (namespace) {
        const module = getModuleByNamespace(this.$store, 'mapState', namespace);
        if (!module) {
          return
        }
        state = module.context.state;
        getters = module.context.getters;
      }
      return typeof val === 'function'
        ? val.call(this, state, getters)
        : state[val]
    };
    // mark vuex getter for devtools
    res[key].vuex = true;
  });
  return res
});

/**
 * Reduce the code which written in Vue.js for committing the mutation
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept another params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.
 * @return {Object}
 */
const mapMutations = normalizeNamespace((namespace, mutations) => {
  const res = {};
  if ( !isValidMap(mutations)) {
    console.error('[vuex] mapMutations: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(mutations).forEach(({ key, val }) => {
    res[key] = function mappedMutation (...args) {
      // Get the commit method from store
      let commit = this.$store.commit;
      if (namespace) {
        const module = getModuleByNamespace(this.$store, 'mapMutations', namespace);
        if (!module) {
          return
        }
        commit = module.context.commit;
      }
      return typeof val === 'function'
        ? val.apply(this, [commit].concat(args))
        : commit.apply(this.$store, [val].concat(args))
    };
  });
  return res
});

/**
 * Reduce the code which written in Vue.js for getting the getters
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} getters
 * @return {Object}
 */
const mapGetters = normalizeNamespace((namespace, getters) => {
  const res = {};
  if ( !isValidMap(getters)) {
    console.error('[vuex] mapGetters: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(getters).forEach(({ key, val }) => {
    // The namespace has been mutated by normalizeNamespace
    val = namespace + val;
    res[key] = function mappedGetter () {
      if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
        return
      }
      if ( !(val in this.$store.getters)) {
        console.error(`[vuex] unknown getter: ${val}`);
        return
      }
      return this.$store.getters[val]
    };
    // mark vuex getter for devtools
    res[key].vuex = true;
  });
  return res
});

/**
 * Reduce the code which written in Vue.js for dispatch the action
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.
 * @return {Object}
 */
const mapActions = normalizeNamespace((namespace, actions) => {
  const res = {};
  if ( !isValidMap(actions)) {
    console.error('[vuex] mapActions: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(actions).forEach(({ key, val }) => {
    res[key] = function mappedAction (...args) {
      // get dispatch function from store
      let dispatch = this.$store.dispatch;
      if (namespace) {
        const module = getModuleByNamespace(this.$store, 'mapActions', namespace);
        if (!module) {
          return
        }
        dispatch = module.context.dispatch;
      }
      return typeof val === 'function'
        ? val.apply(this, [dispatch].concat(args))
        : dispatch.apply(this.$store, [val].concat(args))
    };
  });
  return res
});

/**
 * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object
 * @param {String} namespace
 * @return {Object}
 */
const createNamespacedHelpers = (namespace) => ({
  mapState: mapState.bind(null, namespace),
  mapGetters: mapGetters.bind(null, namespace),
  mapMutations: mapMutations.bind(null, namespace),
  mapActions: mapActions.bind(null, namespace)
});

/**
 * Normalize the map
 * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]
 * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]
 * @param {Array|Object} map
 * @return {Object}
 */
function normalizeMap (map) {
  if (!isValidMap(map)) {
    return []
  }
  return Array.isArray(map)
    ? map.map(key => ({ key, val: key }))
    : Object.keys(map).map(key => ({ key, val: map[key] }))
}

/**
 * Validate whether given map is valid or not
 * @param {*} map
 * @return {Boolean}
 */
function isValidMap (map) {
  return Array.isArray(map) || isObject(map)
}

/**
 * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.
 * @param {Function} fn
 * @return {Function}
 */
function normalizeNamespace (fn) {
  return (namespace, map) => {
    if (typeof namespace !== 'string') {
      map = namespace;
      namespace = '';
    } else if (namespace.charAt(namespace.length - 1) !== '/') {
      namespace += '/';
    }
    return fn(namespace, map)
  }
}

/**
 * Search a special module from store by namespace. if module not exist, print error message.
 * @param {Object} store
 * @param {String} helper
 * @param {String} namespace
 * @return {Object}
 */
function getModuleByNamespace (store, helper, namespace) {
  const module = store._modulesNamespaceMap[namespace];
  if ( !module) {
    console.error(`[vuex] module namespace not found in ${helper}(): ${namespace}`);
  }
  return module
}

// Credits: borrowed code from fcomb/redux-logger

function createLogger ({
  collapsed = true,
  filter = (mutation, stateBefore, stateAfter) => true,
  transformer = state => state,
  mutationTransformer = mut => mut,
  actionFilter = (action, state) => true,
  actionTransformer = act => act,
  logMutations = true,
  logActions = true,
  logger = console
} = {}) {
  return store => {
    let prevState = deepCopy(store.state);

    if (typeof logger === 'undefined') {
      return
    }

    if (logMutations) {
      store.subscribe((mutation, state) => {
        const nextState = deepCopy(state);

        if (filter(mutation, prevState, nextState)) {
          const formattedTime = getFormattedTime();
          const formattedMutation = mutationTransformer(mutation);
          const message = `mutation ${mutation.type}${formattedTime}`;

          startMessage(logger, message, collapsed);
          logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState));
          logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation);
          logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState));
          endMessage(logger);
        }

        prevState = nextState;
      });
    }

    if (logActions) {
      store.subscribeAction((action, state) => {
        if (actionFilter(action, state)) {
          const formattedTime = getFormattedTime();
          const formattedAction = actionTransformer(action);
          const message = `action ${action.type}${formattedTime}`;

          startMessage(logger, message, collapsed);
          logger.log('%c action', 'color: #03A9F4; font-weight: bold', formattedAction);
          endMessage(logger);
        }
      });
    }
  }
}

function startMessage (logger, message, collapsed) {
  const startMessage = collapsed
    ? logger.groupCollapsed
    : logger.group;

  // render
  try {
    startMessage.call(logger, message);
  } catch (e) {
    logger.log(message);
  }
}

function endMessage (logger) {
  try {
    logger.groupEnd();
  } catch (e) {
    logger.log('â€”â€” log end â€”â€”');
  }
}

function getFormattedTime () {
  const time = new Date();
  return ` @ ${pad(time.getHours(), 2)}:${pad(time.getMinutes(), 2)}:${pad(time.getSeconds(), 2)}.${pad(time.getMilliseconds(), 3)}`
}

function repeat (str, times) {
  return (new Array(times + 1)).join(str)
}

function pad (num, maxLength) {
  return repeat('0', maxLength - num.toString().length) + num
}

var index = {
  Store,
  install,
  version: '3.6.2',
  mapState,
  mapMutations,
  mapGetters,
  mapActions,
  createNamespacedHelpers,
  createLogger
};

export default index;
export { Store, createLogger, createNamespacedHelpers, install, mapActions, mapGetters, mapMutations, mapState };
/*!
 * vuex v3.6.2
 * (c) 2021 Evan You
 * @license MIT
 */
const t=("undefined"!=typeof window?window:"undefined"!=typeof global?global:{}).__VUE_DEVTOOLS_GLOBAL_HOOK__;function e(t,s=[]){if(null===t||"object"!=typeof t)return t;const o=(i=e=>e.original===t,s.filter(i)[0]);var i;if(o)return o.copy;const n=Array.isArray(t)?[]:{};return s.push({original:t,copy:n}),Object.keys(t).forEach(o=>{n[o]=e(t[o],s)}),n}function s(t,e){Object.keys(t).forEach(s=>e(t[s],s))}function o(t){return null!==t&&"object"==typeof t}class i{constructor(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;const s=t.state;this.state=("function"==typeof s?s():s)||{}}get namespaced(){return!!this._rawModule.namespaced}addChild(t,e){this._children[t]=e}removeChild(t){delete this._children[t]}getChild(t){return this._children[t]}hasChild(t){return t in this._children}update(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)}forEachChild(t){s(this._children,t)}forEachGetter(t){this._rawModule.getters&&s(this._rawModule.getters,t)}forEachAction(t){this._rawModule.actions&&s(this._rawModule.actions,t)}forEachMutation(t){this._rawModule.mutations&&s(this._rawModule.mutations,t)}}class n{constructor(t){this.register([],t,!1)}get(t){return t.reduce((t,e)=>t.getChild(e),this.root)}getNamespace(t){let e=this.root;return t.reduce((t,s)=>(e=e.getChild(s),t+(e.namespaced?s+"/":"")),"")}update(t){!function t(e,s,o){if(s.update(o),o.modules)for(const i in o.modules){if(!s.getChild(i))return;t(e.concat(i),s.getChild(i),o.modules[i])}}([],this.root,t)}register(t,e,o=!0){const n=new i(e,o);if(0===t.length)this.root=n;else{this.get(t.slice(0,-1)).addChild(t[t.length-1],n)}e.modules&&s(e.modules,(e,s)=>{this.register(t.concat(s),e,o)})}unregister(t){const e=this.get(t.slice(0,-1)),s=t[t.length-1],o=e.getChild(s);o&&o.runtime&&e.removeChild(s)}isRegistered(t){const e=this.get(t.slice(0,-1)),s=t[t.length-1];return!!e&&e.hasChild(s)}}let r;class c{constructor(e={}){!r&&"undefined"!=typeof window&&window.Vue&&f(window.Vue);const{plugins:s=[],strict:o=!1}=e;this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new n(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new r,this._makeLocalGettersCache=Object.create(null);const i=this,{dispatch:c,commit:a}=this;this.dispatch=function(t,e){return c.call(i,t,e)},this.commit=function(t,e,s){return a.call(i,t,e,s)},this.strict=o;const u=this._modules.root.state;h(this,u,[],this._modules.root),l(this,u),s.forEach(t=>t(this));(void 0!==e.devtools?e.devtools:r.config.devtools)&&function(e){t&&(e._devtoolHook=t,t.emit("vuex:init",e),t.on("vuex:travel-to-state",t=>{e.replaceState(t)}),e.subscribe((e,s)=>{t.emit("vuex:mutation",e,s)},{prepend:!0}),e.subscribeAction((e,s)=>{t.emit("vuex:action",e,s)},{prepend:!0}))}(this)}get state(){return this._vm._data.$$state}set state(t){}commit(t,e,s){const{type:o,payload:i,options:n}=p(t,e,s),r={type:o,payload:i},c=this._mutations[o];c&&(this._withCommit(()=>{c.forEach((function(t){t(i)}))}),this._subscribers.slice().forEach(t=>t(r,this.state)))}dispatch(t,e){const{type:s,payload:o}=p(t,e),i={type:s,payload:o},n=this._actions[s];if(!n)return;try{this._actionSubscribers.slice().filter(t=>t.before).forEach(t=>t.before(i,this.state))}catch(t){}const r=n.length>1?Promise.all(n.map(t=>t(o))):n[0](o);return new Promise((t,e)=>{r.then(e=>{try{this._actionSubscribers.filter(t=>t.after).forEach(t=>t.after(i,this.state))}catch(t){}t(e)},t=>{try{this._actionSubscribers.filter(t=>t.error).forEach(e=>e.error(i,this.state,t))}catch(t){}e(t)})})}subscribe(t,e){return a(t,this._subscribers,e)}subscribeAction(t,e){return a("function"==typeof t?{before:t}:t,this._actionSubscribers,e)}watch(t,e,s){return this._watcherVM.$watch(()=>t(this.state,this.getters),e,s)}replaceState(t){this._withCommit(()=>{this._vm._data.$$state=t})}registerModule(t,e,s={}){"string"==typeof t&&(t=[t]),this._modules.register(t,e),h(this,this.state,t,this._modules.get(t),s.preserveState),l(this,this.state)}unregisterModule(t){"string"==typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit(()=>{const e=d(this.state,t.slice(0,-1));r.delete(e,t[t.length-1])}),u(this)}hasModule(t){return"string"==typeof t&&(t=[t]),this._modules.isRegistered(t)}hotUpdate(t){this._modules.update(t),u(this,!0)}_withCommit(t){const e=this._committing;this._committing=!0,t(),this._committing=e}}function a(t,e,s){return e.indexOf(t)<0&&(s&&s.prepend?e.unshift(t):e.push(t)),()=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)}}function u(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);const s=t.state;h(t,s,[],t._modules.root,!0),l(t,s,e)}function l(t,e,o){const i=t._vm;t.getters={},t._makeLocalGettersCache=Object.create(null);const n=t._wrappedGetters,c={};s(n,(e,s)=>{c[s]=function(t,e){return function(){return t(e)}}(e,t),Object.defineProperty(t.getters,s,{get:()=>t._vm[s],enumerable:!0})});const a=r.config.silent;r.config.silent=!0,t._vm=new r({data:{$$state:e},computed:c}),r.config.silent=a,t.strict&&function(t){t._vm.$watch((function(){return this._data.$$state}),()=>{},{deep:!0,sync:!0})}(t),i&&(o&&t._withCommit(()=>{i._data.$$state=null}),r.nextTick(()=>i.$destroy()))}function h(t,e,s,o,i){const n=!s.length,c=t._modules.getNamespace(s);if(o.namespaced&&(t._modulesNamespaceMap[c],t._modulesNamespaceMap[c]=o),!n&&!i){const i=d(e,s.slice(0,-1)),n=s[s.length-1];t._withCommit(()=>{r.set(i,n,o.state)})}const a=o.context=function(t,e,s){const o=""===e,i={dispatch:o?t.dispatch:(s,o,i)=>{const n=p(s,o,i),{payload:r,options:c}=n;let{type:a}=n;return c&&c.root||(a=e+a),t.dispatch(a,r)},commit:o?t.commit:(s,o,i)=>{const n=p(s,o,i),{payload:r,options:c}=n;let{type:a}=n;c&&c.root||(a=e+a),t.commit(a,r,c)}};return Object.defineProperties(i,{getters:{get:o?()=>t.getters:()=>function(t,e){if(!t._makeLocalGettersCache[e]){const s={},o=e.length;Object.keys(t.getters).forEach(i=>{if(i.slice(0,o)!==e)return;const n=i.slice(o);Object.defineProperty(s,n,{get:()=>t.getters[i],enumerable:!0})}),t._makeLocalGettersCache[e]=s}return t._makeLocalGettersCache[e]}(t,e)},state:{get:()=>d(t.state,s)}}),i}(t,c,s);o.forEachMutation((e,s)=>{!function(t,e,s,o){(t._mutations[e]||(t._mutations[e]=[])).push((function(e){s.call(t,o.state,e)}))}(t,c+s,e,a)}),o.forEachAction((e,s)=>{const o=e.root?s:c+s,i=e.handler||e;!function(t,e,s,o){(t._actions[e]||(t._actions[e]=[])).push((function(e){let i=s.call(t,{dispatch:o.dispatch,commit:o.commit,getters:o.getters,state:o.state,rootGetters:t.getters,rootState:t.state},e);var n;return(n=i)&&"function"==typeof n.then||(i=Promise.resolve(i)),t._devtoolHook?i.catch(e=>{throw t._devtoolHook.emit("vuex:error",e),e}):i}))}(t,o,i,a)}),o.forEachGetter((e,s)=>{!function(t,e,s,o){if(t._wrappedGetters[e])return;t._wrappedGetters[e]=function(t){return s(o.state,o.getters,t.state,t.getters)}}(t,c+s,e,a)}),o.forEachChild((o,n)=>{h(t,e,s.concat(n),o,i)})}function d(t,e){return e.reduce((t,e)=>t[e],t)}function p(t,e,s){return o(t)&&t.type&&(s=e,e=t,t=t.type),{type:t,payload:e,options:s}}function f(t){r&&t===r||(r=t,function(t){if(Number(t.version.split(".")[0])>=2)t.mixin({beforeCreate:e});else{const s=t.prototype._init;t.prototype._init=function(t={}){t.init=t.init?[e].concat(t.init):e,s.call(this,t)}}function e(){const t=this.$options;t.store?this.$store="function"==typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}}(r))}const m=v((t,e)=>{const s={};return w(e).forEach(({key:e,val:o})=>{s[e]=function(){let e=this.$store.state,s=this.$store.getters;if(t){const o=$(this.$store,"mapState",t);if(!o)return;e=o.context.state,s=o.context.getters}return"function"==typeof o?o.call(this,e,s):e[o]},s[e].vuex=!0}),s}),g=v((t,e)=>{const s={};return w(e).forEach(({key:e,val:o})=>{s[e]=function(...e){let s=this.$store.commit;if(t){const e=$(this.$store,"mapMutations",t);if(!e)return;s=e.context.commit}return"function"==typeof o?o.apply(this,[s].concat(e)):s.apply(this.$store,[o].concat(e))}}),s}),_=v((t,e)=>{const s={};return w(e).forEach(({key:e,val:o})=>{o=t+o,s[e]=function(){if(!t||$(this.$store,"mapGetters",t))return this.$store.getters[o]},s[e].vuex=!0}),s}),y=v((t,e)=>{const s={};return w(e).forEach(({key:e,val:o})=>{s[e]=function(...e){let s=this.$store.dispatch;if(t){const e=$(this.$store,"mapActions",t);if(!e)return;s=e.context.dispatch}return"function"==typeof o?o.apply(this,[s].concat(e)):s.apply(this.$store,[o].concat(e))}}),s}),b=t=>({mapState:m.bind(null,t),mapGetters:_.bind(null,t),mapMutations:g.bind(null,t),mapActions:y.bind(null,t)});function w(t){return function(t){return Array.isArray(t)||o(t)}(t)?Array.isArray(t)?t.map(t=>({key:t,val:t})):Object.keys(t).map(e=>({key:e,val:t[e]})):[]}function v(t){return(e,s)=>("string"!=typeof e?(s=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,s))}function $(t,e,s){return t._modulesNamespaceMap[s]}function M({collapsed:t=!0,filter:s=((t,e,s)=>!0),transformer:o=(t=>t),mutationTransformer:i=(t=>t),actionFilter:n=((t,e)=>!0),actionTransformer:r=(t=>t),logMutations:c=!0,logActions:a=!0,logger:u=console}={}){return l=>{let h=e(l.state);void 0!==u&&(c&&l.subscribe((n,r)=>{const c=e(r);if(s(n,h,c)){const e=O(),s=i(n),r=`mutation ${n.type}${e}`;C(u,r,t),u.log("%c prev state","color: #9E9E9E; font-weight: bold",o(h)),u.log("%c mutation","color: #03A9F4; font-weight: bold",s),u.log("%c next state","color: #4CAF50; font-weight: bold",o(c)),E(u)}h=c}),a&&l.subscribeAction((e,s)=>{if(n(e,s)){const s=O(),o=r(e),i=`action ${e.type}${s}`;C(u,i,t),u.log("%c action","color: #03A9F4; font-weight: bold",o),E(u)}}))}}function C(t,e,s){const o=s?t.groupCollapsed:t.group;try{o.call(t,e)}catch(s){t.log(e)}}function E(t){try{t.groupEnd()}catch(e){t.log("â€”â€” log end â€”â€”")}}function O(){const t=new Date;return` @ ${j(t.getHours(),2)}:${j(t.getMinutes(),2)}:${j(t.getSeconds(),2)}.${j(t.getMilliseconds(),3)}`}function j(t,e){return s="0",o=e-t.toString().length,new Array(o+1).join(s)+t;var s,o}var A={Store:c,install:f,version:"3.6.2",mapState:m,mapMutations:g,mapGetters:_,mapActions:y,createNamespacedHelpers:b,createLogger:M};export default A;export{c as Store,M as createLogger,b as createNamespacedHelpers,f as install,y as mapActions,_ as mapGetters,g as mapMutations,m as mapState};
/*!
 * vuex v3.6.2
 * (c) 2021 Evan You
 * @license MIT
 */
function applyMixin (Vue) {
  var version = Number(Vue.version.split('.')[0]);

  if (version >= 2) {
    Vue.mixin({ beforeCreate: vuexInit });
  } else {
    // override init and inject vuex init procedure
    // for 1.x backwards compatibility.
    var _init = Vue.prototype._init;
    Vue.prototype._init = function (options) {
      if ( options === void 0 ) options = {};

      options.init = options.init
        ? [vuexInit].concat(options.init)
        : vuexInit;
      _init.call(this, options);
    };
  }

  /**
   * Vuex init hook, injected into each instances init hooks list.
   */

  function vuexInit () {
    var options = this.$options;
    // store injection
    if (options.store) {
      this.$store = typeof options.store === 'function'
        ? options.store()
        : options.store;
    } else if (options.parent && options.parent.$store) {
      this.$store = options.parent.$store;
    }
  }
}

var target = typeof window !== 'undefined'
  ? window
  : typeof global !== 'undefined'
    ? global
    : {};
var devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;

function devtoolPlugin (store) {
  if (!devtoolHook) { return }

  store._devtoolHook = devtoolHook;

  devtoolHook.emit('vuex:init', store);

  devtoolHook.on('vuex:travel-to-state', function (targetState) {
    store.replaceState(targetState);
  });

  store.subscribe(function (mutation, state) {
    devtoolHook.emit('vuex:mutation', mutation, state);
  }, { prepend: true });

  store.subscribeAction(function (action, state) {
    devtoolHook.emit('vuex:action', action, state);
  }, { prepend: true });
}

/**
 * Get the first item that pass the test
 * by second argument function
 *
 * @param {Array} list
 * @param {Function} f
 * @return {*}
 */
function find (list, f) {
  return list.filter(f)[0]
}

/**
 * Deep copy the given object considering circular structure.
 * This function caches all nested objects and its copies.
 * If it detects circular structure, use cached copy to avoid infinite loop.
 *
 * @param {*} obj
 * @param {Array<Object>} cache
 * @return {*}
 */
function deepCopy (obj, cache) {
  if ( cache === void 0 ) cache = [];

  // just return if obj is immutable value
  if (obj === null || typeof obj !== 'object') {
    return obj
  }

  // if obj is hit, it is in circular structure
  var hit = find(cache, function (c) { return c.original === obj; });
  if (hit) {
    return hit.copy
  }

  var copy = Array.isArray(obj) ? [] : {};
  // put the copy into cache at first
  // because we want to refer it in recursive deepCopy
  cache.push({
    original: obj,
    copy: copy
  });

  Object.keys(obj).forEach(function (key) {
    copy[key] = deepCopy(obj[key], cache);
  });

  return copy
}

/**
 * forEach for object
 */
function forEachValue (obj, fn) {
  Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });
}

function isObject (obj) {
  return obj !== null && typeof obj === 'object'
}

function isPromise (val) {
  return val && typeof val.then === 'function'
}

function assert (condition, msg) {
  if (!condition) { throw new Error(("[vuex] " + msg)) }
}

function partial (fn, arg) {
  return function () {
    return fn(arg)
  }
}

// Base data struct for store's module, package with some attribute and method
var Module = function Module (rawModule, runtime) {
  this.runtime = runtime;
  // Store some children item
  this._children = Object.create(null);
  // Store the origin module object which passed by programmer
  this._rawModule = rawModule;
  var rawState = rawModule.state;

  // Store the origin module's state
  this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};
};

var prototypeAccessors = { namespaced: { configurable: true } };

prototypeAccessors.namespaced.get = function () {
  return !!this._rawModule.namespaced
};

Module.prototype.addChild = function addChild (key, module) {
  this._children[key] = module;
};

Module.prototype.removeChild = function removeChild (key) {
  delete this._children[key];
};

Module.prototype.getChild = function getChild (key) {
  return this._children[key]
};

Module.prototype.hasChild = function hasChild (key) {
  return key in this._children
};

Module.prototype.update = function update (rawModule) {
  this._rawModule.namespaced = rawModule.namespaced;
  if (rawModule.actions) {
    this._rawModule.actions = rawModule.actions;
  }
  if (rawModule.mutations) {
    this._rawModule.mutations = rawModule.mutations;
  }
  if (rawModule.getters) {
    this._rawModule.getters = rawModule.getters;
  }
};

Module.prototype.forEachChild = function forEachChild (fn) {
  forEachValue(this._children, fn);
};

Module.prototype.forEachGetter = function forEachGetter (fn) {
  if (this._rawModule.getters) {
    forEachValue(this._rawModule.getters, fn);
  }
};

Module.prototype.forEachAction = function forEachAction (fn) {
  if (this._rawModule.actions) {
    forEachValue(this._rawModule.actions, fn);
  }
};

Module.prototype.forEachMutation = function forEachMutation (fn) {
  if (this._rawModule.mutations) {
    forEachValue(this._rawModule.mutations, fn);
  }
};

Object.defineProperties( Module.prototype, prototypeAccessors );

var ModuleCollection = function ModuleCollection (rawRootModule) {
  // register root module (Vuex.Store options)
  this.register([], rawRootModule, false);
};

ModuleCollection.prototype.get = function get (path) {
  return path.reduce(function (module, key) {
    return module.getChild(key)
  }, this.root)
};

ModuleCollection.prototype.getNamespace = function getNamespace (path) {
  var module = this.root;
  return path.reduce(function (namespace, key) {
    module = module.getChild(key);
    return namespace + (module.namespaced ? key + '/' : '')
  }, '')
};

ModuleCollection.prototype.update = function update$1 (rawRootModule) {
  update([], this.root, rawRootModule);
};

ModuleCollection.prototype.register = function register (path, rawModule, runtime) {
    var this$1 = this;
    if ( runtime === void 0 ) runtime = true;

  if ((process.env.NODE_ENV !== 'production')) {
    assertRawModule(path, rawModule);
  }

  var newModule = new Module(rawModule, runtime);
  if (path.length === 0) {
    this.root = newModule;
  } else {
    var parent = this.get(path.slice(0, -1));
    parent.addChild(path[path.length - 1], newModule);
  }

  // register nested modules
  if (rawModule.modules) {
    forEachValue(rawModule.modules, function (rawChildModule, key) {
      this$1.register(path.concat(key), rawChildModule, runtime);
    });
  }
};

ModuleCollection.prototype.unregister = function unregister (path) {
  var parent = this.get(path.slice(0, -1));
  var key = path[path.length - 1];
  var child = parent.getChild(key);

  if (!child) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.warn(
        "[vuex] trying to unregister module '" + key + "', which is " +
        "not registered"
      );
    }
    return
  }

  if (!child.runtime) {
    return
  }

  parent.removeChild(key);
};

ModuleCollection.prototype.isRegistered = function isRegistered (path) {
  var parent = this.get(path.slice(0, -1));
  var key = path[path.length - 1];

  if (parent) {
    return parent.hasChild(key)
  }

  return false
};

function update (path, targetModule, newModule) {
  if ((process.env.NODE_ENV !== 'production')) {
    assertRawModule(path, newModule);
  }

  // update target module
  targetModule.update(newModule);

  // update nested modules
  if (newModule.modules) {
    for (var key in newModule.modules) {
      if (!targetModule.getChild(key)) {
        if ((process.env.NODE_ENV !== 'production')) {
          console.warn(
            "[vuex] trying to add a new module '" + key + "' on hot reloading, " +
            'manual reload is needed'
          );
        }
        return
      }
      update(
        path.concat(key),
        targetModule.getChild(key),
        newModule.modules[key]
      );
    }
  }
}

var functionAssert = {
  assert: function (value) { return typeof value === 'function'; },
  expected: 'function'
};

var objectAssert = {
  assert: function (value) { return typeof value === 'function' ||
    (typeof value === 'object' && typeof value.handler === 'function'); },
  expected: 'function or object with "handler" function'
};

var assertTypes = {
  getters: functionAssert,
  mutations: functionAssert,
  actions: objectAssert
};

function assertRawModule (path, rawModule) {
  Object.keys(assertTypes).forEach(function (key) {
    if (!rawModule[key]) { return }

    var assertOptions = assertTypes[key];

    forEachValue(rawModule[key], function (value, type) {
      assert(
        assertOptions.assert(value),
        makeAssertionMessage(path, key, type, value, assertOptions.expected)
      );
    });
  });
}

function makeAssertionMessage (path, key, type, value, expected) {
  var buf = key + " should be " + expected + " but \"" + key + "." + type + "\"";
  if (path.length > 0) {
    buf += " in module \"" + (path.join('.')) + "\"";
  }
  buf += " is " + (JSON.stringify(value)) + ".";
  return buf
}

var Vue; // bind on install

var Store = function Store (options) {
  var this$1 = this;
  if ( options === void 0 ) options = {};

  // Auto install if it is not done yet and `window` has `Vue`.
  // To allow users to avoid auto-installation in some cases,
  // this code should be placed here. See #731
  if (!Vue && typeof window !== 'undefined' && window.Vue) {
    install(window.Vue);
  }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(Vue, "must call Vue.use(Vuex) before creating a store instance.");
    assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser.");
    assert(this instanceof Store, "store must be called with the new operator.");
  }

  var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];
  var strict = options.strict; if ( strict === void 0 ) strict = false;

  // store internal state
  this._committing = false;
  this._actions = Object.create(null);
  this._actionSubscribers = [];
  this._mutations = Object.create(null);
  this._wrappedGetters = Object.create(null);
  this._modules = new ModuleCollection(options);
  this._modulesNamespaceMap = Object.create(null);
  this._subscribers = [];
  this._watcherVM = new Vue();
  this._makeLocalGettersCache = Object.create(null);

  // bind commit and dispatch to self
  var store = this;
  var ref = this;
  var dispatch = ref.dispatch;
  var commit = ref.commit;
  this.dispatch = function boundDispatch (type, payload) {
    return dispatch.call(store, type, payload)
  };
  this.commit = function boundCommit (type, payload, options) {
    return commit.call(store, type, payload, options)
  };

  // strict mode
  this.strict = strict;

  var state = this._modules.root.state;

  // init root module.
  // this also recursively registers all sub-modules
  // and collects all module getters inside this._wrappedGetters
  installModule(this, state, [], this._modules.root);

  // initialize the store vm, which is responsible for the reactivity
  // (also registers _wrappedGetters as computed properties)
  resetStoreVM(this, state);

  // apply plugins
  plugins.forEach(function (plugin) { return plugin(this$1); });

  var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;
  if (useDevtools) {
    devtoolPlugin(this);
  }
};

var prototypeAccessors$1 = { state: { configurable: true } };

prototypeAccessors$1.state.get = function () {
  return this._vm._data.$$state
};

prototypeAccessors$1.state.set = function (v) {
  if ((process.env.NODE_ENV !== 'production')) {
    assert(false, "use store.replaceState() to explicit replace store state.");
  }
};

Store.prototype.commit = function commit (_type, _payload, _options) {
    var this$1 = this;

  // check object-style commit
  var ref = unifyObjectStyle(_type, _payload, _options);
    var type = ref.type;
    var payload = ref.payload;
    var options = ref.options;

  var mutation = { type: type, payload: payload };
  var entry = this._mutations[type];
  if (!entry) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.error(("[vuex] unknown mutation type: " + type));
    }
    return
  }
  this._withCommit(function () {
    entry.forEach(function commitIterator (handler) {
      handler(payload);
    });
  });

  this._subscribers
    .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
    .forEach(function (sub) { return sub(mutation, this$1.state); });

  if (
    (process.env.NODE_ENV !== 'production') &&
    options && options.silent
  ) {
    console.warn(
      "[vuex] mutation type: " + type + ". Silent option has been removed. " +
      'Use the filter functionality in the vue-devtools'
    );
  }
};

Store.prototype.dispatch = function dispatch (_type, _payload) {
    var this$1 = this;

  // check object-style dispatch
  var ref = unifyObjectStyle(_type, _payload);
    var type = ref.type;
    var payload = ref.payload;

  var action = { type: type, payload: payload };
  var entry = this._actions[type];
  if (!entry) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.error(("[vuex] unknown action type: " + type));
    }
    return
  }

  try {
    this._actionSubscribers
      .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
      .filter(function (sub) { return sub.before; })
      .forEach(function (sub) { return sub.before(action, this$1.state); });
  } catch (e) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.warn("[vuex] error in before action subscribers: ");
      console.error(e);
    }
  }

  var result = entry.length > 1
    ? Promise.all(entry.map(function (handler) { return handler(payload); }))
    : entry[0](payload);

  return new Promise(function (resolve, reject) {
    result.then(function (res) {
      try {
        this$1._actionSubscribers
          .filter(function (sub) { return sub.after; })
          .forEach(function (sub) { return sub.after(action, this$1.state); });
      } catch (e) {
        if ((process.env.NODE_ENV !== 'production')) {
          console.warn("[vuex] error in after action subscribers: ");
          console.error(e);
        }
      }
      resolve(res);
    }, function (error) {
      try {
        this$1._actionSubscribers
          .filter(function (sub) { return sub.error; })
          .forEach(function (sub) { return sub.error(action, this$1.state, error); });
      } catch (e) {
        if ((process.env.NODE_ENV !== 'production')) {
          console.warn("[vuex] error in error action subscribers: ");
          console.error(e);
        }
      }
      reject(error);
    });
  })
};

Store.prototype.subscribe = function subscribe (fn, options) {
  return genericSubscribe(fn, this._subscribers, options)
};

Store.prototype.subscribeAction = function subscribeAction (fn, options) {
  var subs = typeof fn === 'function' ? { before: fn } : fn;
  return genericSubscribe(subs, this._actionSubscribers, options)
};

Store.prototype.watch = function watch (getter, cb, options) {
    var this$1 = this;

  if ((process.env.NODE_ENV !== 'production')) {
    assert(typeof getter === 'function', "store.watch only accepts a function.");
  }
  return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)
};

Store.prototype.replaceState = function replaceState (state) {
    var this$1 = this;

  this._withCommit(function () {
    this$1._vm._data.$$state = state;
  });
};

Store.prototype.registerModule = function registerModule (path, rawModule, options) {
    if ( options === void 0 ) options = {};

  if (typeof path === 'string') { path = [path]; }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(Array.isArray(path), "module path must be a string or an Array.");
    assert(path.length > 0, 'cannot register the root module by using registerModule.');
  }

  this._modules.register(path, rawModule);
  installModule(this, this.state, path, this._modules.get(path), options.preserveState);
  // reset store to update getters...
  resetStoreVM(this, this.state);
};

Store.prototype.unregisterModule = function unregisterModule (path) {
    var this$1 = this;

  if (typeof path === 'string') { path = [path]; }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(Array.isArray(path), "module path must be a string or an Array.");
  }

  this._modules.unregister(path);
  this._withCommit(function () {
    var parentState = getNestedState(this$1.state, path.slice(0, -1));
    Vue.delete(parentState, path[path.length - 1]);
  });
  resetStore(this);
};

Store.prototype.hasModule = function hasModule (path) {
  if (typeof path === 'string') { path = [path]; }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(Array.isArray(path), "module path must be a string or an Array.");
  }

  return this._modules.isRegistered(path)
};

Store.prototype.hotUpdate = function hotUpdate (newOptions) {
  this._modules.update(newOptions);
  resetStore(this, true);
};

Store.prototype._withCommit = function _withCommit (fn) {
  var committing = this._committing;
  this._committing = true;
  fn();
  this._committing = committing;
};

Object.defineProperties( Store.prototype, prototypeAccessors$1 );

function genericSubscribe (fn, subs, options) {
  if (subs.indexOf(fn) < 0) {
    options && options.prepend
      ? subs.unshift(fn)
      : subs.push(fn);
  }
  return function () {
    var i = subs.indexOf(fn);
    if (i > -1) {
      subs.splice(i, 1);
    }
  }
}

function resetStore (store, hot) {
  store._actions = Object.create(null);
  store._mutations = Object.create(null);
  store._wrappedGetters = Object.create(null);
  store._modulesNamespaceMap = Object.create(null);
  var state = store.state;
  // init all modules
  installModule(store, state, [], store._modules.root, true);
  // reset vm
  resetStoreVM(store, state, hot);
}

function resetStoreVM (store, state, hot) {
  var oldVm = store._vm;

  // bind store public getters
  store.getters = {};
  // reset local getters cache
  store._makeLocalGettersCache = Object.create(null);
  var wrappedGetters = store._wrappedGetters;
  var computed = {};
  forEachValue(wrappedGetters, function (fn, key) {
    // use computed to leverage its lazy-caching mechanism
    // direct inline function use will lead to closure preserving oldVm.
    // using partial to return function with only arguments preserved in closure environment.
    computed[key] = partial(fn, store);
    Object.defineProperty(store.getters, key, {
      get: function () { return store._vm[key]; },
      enumerable: true // for local getters
    });
  });

  // use a Vue instance to store the state tree
  // suppress warnings just in case the user has added
  // some funky global mixins
  var silent = Vue.config.silent;
  Vue.config.silent = true;
  store._vm = new Vue({
    data: {
      $$state: state
    },
    computed: computed
  });
  Vue.config.silent = silent;

  // enable strict mode for new vm
  if (store.strict) {
    enableStrictMode(store);
  }

  if (oldVm) {
    if (hot) {
      // dispatch changes in all subscribed watchers
      // to force getter re-evaluation for hot reloading.
      store._withCommit(function () {
        oldVm._data.$$state = null;
      });
    }
    Vue.nextTick(function () { return oldVm.$destroy(); });
  }
}

function installModule (store, rootState, path, module, hot) {
  var isRoot = !path.length;
  var namespace = store._modules.getNamespace(path);

  // register in namespace map
  if (module.namespaced) {
    if (store._modulesNamespaceMap[namespace] && (process.env.NODE_ENV !== 'production')) {
      console.error(("[vuex] duplicate namespace " + namespace + " for the namespaced module " + (path.join('/'))));
    }
    store._modulesNamespaceMap[namespace] = module;
  }

  // set state
  if (!isRoot && !hot) {
    var parentState = getNestedState(rootState, path.slice(0, -1));
    var moduleName = path[path.length - 1];
    store._withCommit(function () {
      if ((process.env.NODE_ENV !== 'production')) {
        if (moduleName in parentState) {
          console.warn(
            ("[vuex] state field \"" + moduleName + "\" was overridden by a module with the same name at \"" + (path.join('.')) + "\"")
          );
        }
      }
      Vue.set(parentState, moduleName, module.state);
    });
  }

  var local = module.context = makeLocalContext(store, namespace, path);

  module.forEachMutation(function (mutation, key) {
    var namespacedType = namespace + key;
    registerMutation(store, namespacedType, mutation, local);
  });

  module.forEachAction(function (action, key) {
    var type = action.root ? key : namespace + key;
    var handler = action.handler || action;
    registerAction(store, type, handler, local);
  });

  module.forEachGetter(function (getter, key) {
    var namespacedType = namespace + key;
    registerGetter(store, namespacedType, getter, local);
  });

  module.forEachChild(function (child, key) {
    installModule(store, rootState, path.concat(key), child, hot);
  });
}

/**
 * make localized dispatch, commit, getters and state
 * if there is no namespace, just use root ones
 */
function makeLocalContext (store, namespace, path) {
  var noNamespace = namespace === '';

  var local = {
    dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {
      var args = unifyObjectStyle(_type, _payload, _options);
      var payload = args.payload;
      var options = args.options;
      var type = args.type;

      if (!options || !options.root) {
        type = namespace + type;
        if ((process.env.NODE_ENV !== 'production') && !store._actions[type]) {
          console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type));
          return
        }
      }

      return store.dispatch(type, payload)
    },

    commit: noNamespace ? store.commit : function (_type, _payload, _options) {
      var args = unifyObjectStyle(_type, _payload, _options);
      var payload = args.payload;
      var options = args.options;
      var type = args.type;

      if (!options || !options.root) {
        type = namespace + type;
        if ((process.env.NODE_ENV !== 'production') && !store._mutations[type]) {
          console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type));
          return
        }
      }

      store.commit(type, payload, options);
    }
  };

  // getters and state object must be gotten lazily
  // because they will be changed by vm update
  Object.defineProperties(local, {
    getters: {
      get: noNamespace
        ? function () { return store.getters; }
        : function () { return makeLocalGetters(store, namespace); }
    },
    state: {
      get: function () { return getNestedState(store.state, path); }
    }
  });

  return local
}

function makeLocalGetters (store, namespace) {
  if (!store._makeLocalGettersCache[namespace]) {
    var gettersProxy = {};
    var splitPos = namespace.length;
    Object.keys(store.getters).forEach(function (type) {
      // skip if the target getter is not match this namespace
      if (type.slice(0, splitPos) !== namespace) { return }

      // extract local getter type
      var localType = type.slice(splitPos);

      // Add a port to the getters proxy.
      // Define as getter property because
      // we do not want to evaluate the getters in this time.
      Object.defineProperty(gettersProxy, localType, {
        get: function () { return store.getters[type]; },
        enumerable: true
      });
    });
    store._makeLocalGettersCache[namespace] = gettersProxy;
  }

  return store._makeLocalGettersCache[namespace]
}

function registerMutation (store, type, handler, local) {
  var entry = store._mutations[type] || (store._mutations[type] = []);
  entry.push(function wrappedMutationHandler (payload) {
    handler.call(store, local.state, payload);
  });
}

function registerAction (store, type, handler, local) {
  var entry = store._actions[type] || (store._actions[type] = []);
  entry.push(function wrappedActionHandler (payload) {
    var res = handler.call(store, {
      dispatch: local.dispatch,
      commit: local.commit,
      getters: local.getters,
      state: local.state,
      rootGetters: store.getters,
      rootState: store.state
    }, payload);
    if (!isPromise(res)) {
      res = Promise.resolve(res);
    }
    if (store._devtoolHook) {
      return res.catch(function (err) {
        store._devtoolHook.emit('vuex:error', err);
        throw err
      })
    } else {
      return res
    }
  });
}

function registerGetter (store, type, rawGetter, local) {
  if (store._wrappedGetters[type]) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.error(("[vuex] duplicate getter key: " + type));
    }
    return
  }
  store._wrappedGetters[type] = function wrappedGetter (store) {
    return rawGetter(
      local.state, // local state
      local.getters, // local getters
      store.state, // root state
      store.getters // root getters
    )
  };
}

function enableStrictMode (store) {
  store._vm.$watch(function () { return this._data.$$state }, function () {
    if ((process.env.NODE_ENV !== 'production')) {
      assert(store._committing, "do not mutate vuex store state outside mutation handlers.");
    }
  }, { deep: true, sync: true });
}

function getNestedState (state, path) {
  return path.reduce(function (state, key) { return state[key]; }, state)
}

function unifyObjectStyle (type, payload, options) {
  if (isObject(type) && type.type) {
    options = payload;
    payload = type;
    type = type.type;
  }

  if ((process.env.NODE_ENV !== 'production')) {
    assert(typeof type === 'string', ("expects string as the type, but found " + (typeof type) + "."));
  }

  return { type: type, payload: payload, options: options }
}

function install (_Vue) {
  if (Vue && _Vue === Vue) {
    if ((process.env.NODE_ENV !== 'production')) {
      console.error(
        '[vuex] already installed. Vue.use(Vuex) should be called only once.'
      );
    }
    return
  }
  Vue = _Vue;
  applyMixin(Vue);
}

/**
 * Reduce the code which written in Vue.js for getting the state.
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.
 * @param {Object}
 */
var mapState = normalizeNamespace(function (namespace, states) {
  var res = {};
  if ((process.env.NODE_ENV !== 'production') && !isValidMap(states)) {
    console.error('[vuex] mapState: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(states).forEach(function (ref) {
    var key = ref.key;
    var val = ref.val;

    res[key] = function mappedState () {
      var state = this.$store.state;
      var getters = this.$store.getters;
      if (namespace) {
        var module = getModuleByNamespace(this.$store, 'mapState', namespace);
        if (!module) {
          return
        }
        state = module.context.state;
        getters = module.context.getters;
      }
      return typeof val === 'function'
        ? val.call(this, state, getters)
        : state[val]
    };
    // mark vuex getter for devtools
    res[key].vuex = true;
  });
  return res
});

/**
 * Reduce the code which written in Vue.js for committing the mutation
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept another params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.
 * @return {Object}
 */
var mapMutations = normalizeNamespace(function (namespace, mutations) {
  var res = {};
  if ((process.env.NODE_ENV !== 'production') && !isValidMap(mutations)) {
    console.error('[vuex] mapMutations: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(mutations).forEach(function (ref) {
    var key = ref.key;
    var val = ref.val;

    res[key] = function mappedMutation () {
      var args = [], len = arguments.length;
      while ( len-- ) args[ len ] = arguments[ len ];

      // Get the commit method from store
      var commit = this.$store.commit;
      if (namespace) {
        var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);
        if (!module) {
          return
        }
        commit = module.context.commit;
      }
      return typeof val === 'function'
        ? val.apply(this, [commit].concat(args))
        : commit.apply(this.$store, [val].concat(args))
    };
  });
  return res
});

/**
 * Reduce the code which written in Vue.js for getting the getters
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} getters
 * @return {Object}
 */
var mapGetters = normalizeNamespace(function (namespace, getters) {
  var res = {};
  if ((process.env.NODE_ENV !== 'production') && !isValidMap(getters)) {
    console.error('[vuex] mapGetters: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(getters).forEach(function (ref) {
    var key = ref.key;
    var val = ref.val;

    // The namespace has been mutated by normalizeNamespace
    val = namespace + val;
    res[key] = function mappedGetter () {
      if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
        return
      }
      if ((process.env.NODE_ENV !== 'production') && !(val in this.$store.getters)) {
        console.error(("[vuex] unknown getter: " + val));
        return
      }
      return this.$store.getters[val]
    };
    // mark vuex getter for devtools
    res[key].vuex = true;
  });
  return res
});

/**
 * Reduce the code which written in Vue.js for dispatch the action
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.
 * @return {Object}
 */
var mapActions = normalizeNamespace(function (namespace, actions) {
  var res = {};
  if ((process.env.NODE_ENV !== 'production') && !isValidMap(actions)) {
    console.error('[vuex] mapActions: mapper parameter must be either an Array or an Object');
  }
  normalizeMap(actions).forEach(function (ref) {
    var key = ref.key;
    var val = ref.val;

    res[key] = function mappedAction () {
      var args = [], len = arguments.length;
      while ( len-- ) args[ len ] = arguments[ len ];

      // get dispatch function from store
      var dispatch = this.$store.dispatch;
      if (namespace) {
        var module = getModuleByNamespace(this.$store, 'mapActions', namespace);
        if (!module) {
          return
        }
        dispatch = module.context.dispatch;
      }
      return typeof val === 'function'
        ? val.apply(this, [dispatch].concat(args))
        : dispatch.apply(this.$store, [val].concat(args))
    };
  });
  return res
});

/**
 * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object
 * @param {String} namespace
 * @return {Object}
 */
var createNamespacedHelpers = function (namespace) { return ({
  mapState: mapState.bind(null, namespace),
  mapGetters: mapGetters.bind(null, namespace),
  mapMutations: mapMutations.bind(null, namespace),
  mapActions: mapActions.bind(null, namespace)
}); };

/**
 * Normalize the map
 * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]
 * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]
 * @param {Array|Object} map
 * @return {Object}
 */
function normalizeMap (map) {
  if (!isValidMap(map)) {
    return []
  }
  return Array.isArray(map)
    ? map.map(function (key) { return ({ key: key, val: key }); })
    : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })
}

/**
 * Validate whether given map is valid or not
 * @param {*} map
 * @return {Boolean}
 */
function isValidMap (map) {
  return Array.isArray(map) || isObject(map)
}

/**
 * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.
 * @param {Function} fn
 * @return {Function}
 */
function normalizeNamespace (fn) {
  return function (namespace, map) {
    if (typeof namespace !== 'string') {
      map = namespace;
      namespace = '';
    } else if (namespace.charAt(namespace.length - 1) !== '/') {
      namespace += '/';
    }
    return fn(namespace, map)
  }
}

/**
 * Search a special module from store by namespace. if module not exist, print error message.
 * @param {Object} store
 * @param {String} helper
 * @param {String} namespace
 * @return {Object}
 */
function getModuleByNamespace (store, helper, namespace) {
  var module = store._modulesNamespaceMap[namespace];
  if ((process.env.NODE_ENV !== 'production') && !module) {
    console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace));
  }
  return module
}

// Credits: borrowed code from fcomb/redux-logger

function createLogger (ref) {
  if ( ref === void 0 ) ref = {};
  var collapsed = ref.collapsed; if ( collapsed === void 0 ) collapsed = true;
  var filter = ref.filter; if ( filter === void 0 ) filter = function (mutation, stateBefore, stateAfter) { return true; };
  var transformer = ref.transformer; if ( transformer === void 0 ) transformer = function (state) { return state; };
  var mutationTransformer = ref.mutationTransformer; if ( mutationTransformer === void 0 ) mutationTransformer = function (mut) { return mut; };
  var actionFilter = ref.actionFilter; if ( actionFilter === void 0 ) actionFilter = function (action, state) { return true; };
  var actionTransformer = ref.actionTransformer; if ( actionTransformer === void 0 ) actionTransformer = function (act) { return act; };
  var logMutations = ref.logMutations; if ( logMutations === void 0 ) logMutations = true;
  var logActions = ref.logActions; if ( logActions === void 0 ) logActions = true;
  var logger = ref.logger; if ( logger === void 0 ) logger = console;

  return function (store) {
    var prevState = deepCopy(store.state);

    if (typeof logger === 'undefined') {
      return
    }

    if (logMutations) {
      store.subscribe(function (mutation, state) {
        var nextState = deepCopy(state);

        if (filter(mutation, prevState, nextState)) {
          var formattedTime = getFormattedTime();
          var formattedMutation = mutationTransformer(mutation);
          var message = "mutation " + (mutation.type) + formattedTime;

          startMessage(logger, message, collapsed);
          logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState));
          logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation);
          logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState));
          endMessage(logger);
        }

        prevState = nextState;
      });
    }

    if (logActions) {
      store.subscribeAction(function (action, state) {
        if (actionFilter(action, state)) {
          var formattedTime = getFormattedTime();
          var formattedAction = actionTransformer(action);
          var message = "action " + (action.type) + formattedTime;

          startMessage(logger, message, collapsed);
          logger.log('%c action', 'color: #03A9F4; font-weight: bold', formattedAction);
          endMessage(logger);
        }
      });
    }
  }
}

function startMessage (logger, message, collapsed) {
  var startMessage = collapsed
    ? logger.groupCollapsed
    : logger.group;

  // render
  try {
    startMessage.call(logger, message);
  } catch (e) {
    logger.log(message);
  }
}

function endMessage (logger) {
  try {
    logger.groupEnd();
  } catch (e) {
    logger.log('â€”â€” log end â€”â€”');
  }
}

function getFormattedTime () {
  var time = new Date();
  return (" @ " + (pad(time.getHours(), 2)) + ":" + (pad(time.getMinutes(), 2)) + ":" + (pad(time.getSeconds(), 2)) + "." + (pad(time.getMilliseconds(), 3)))
}

function repeat (str, times) {
  return (new Array(times + 1)).join(str)
}

function pad (num, maxLength) {
  return repeat('0', maxLength - num.toString().length) + num
}

var index = {
  Store: Store,
  install: install,
  version: '3.6.2',
  mapState: mapState,
  mapMutations: mapMutations,
  mapGetters: mapGetters,
  mapActions: mapActions,
  createNamespacedHelpers: createNamespacedHelpers,
  createLogger: createLogger
};

export default index;
export { Store, createLogger, createNamespacedHelpers, install, mapActions, mapGetters, mapMutations, mapState };
/*!
 * vuex v3.6.2
 * (c) 2021 Evan You
 * @license MIT
 */
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Vuex = factory());
}(this, (function () { 'use strict';

  function applyMixin (Vue) {
    var version = Number(Vue.version.split('.')[0]);

    if (version >= 2) {
      Vue.mixin({ beforeCreate: vuexInit });
    } else {
      // override init and inject vuex init procedure
      // for 1.x backwards compatibility.
      var _init = Vue.prototype._init;
      Vue.prototype._init = function (options) {
        if ( options === void 0 ) options = {};

        options.init = options.init
          ? [vuexInit].concat(options.init)
          : vuexInit;
        _init.call(this, options);
      };
    }

    /**
     * Vuex init hook, injected into each instances init hooks list.
     */

    function vuexInit () {
      var options = this.$options;
      // store injection
      if (options.store) {
        this.$store = typeof options.store === 'function'
          ? options.store()
          : options.store;
      } else if (options.parent && options.parent.$store) {
        this.$store = options.parent.$store;
      }
    }
  }

  var target = typeof window !== 'undefined'
    ? window
    : typeof global !== 'undefined'
      ? global
      : {};
  var devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;

  function devtoolPlugin (store) {
    if (!devtoolHook) { return }

    store._devtoolHook = devtoolHook;

    devtoolHook.emit('vuex:init', store);

    devtoolHook.on('vuex:travel-to-state', function (targetState) {
      store.replaceState(targetState);
    });

    store.subscribe(function (mutation, state) {
      devtoolHook.emit('vuex:mutation', mutation, state);
    }, { prepend: true });

    store.subscribeAction(function (action, state) {
      devtoolHook.emit('vuex:action', action, state);
    }, { prepend: true });
  }

  /**
   * Get the first item that pass the test
   * by second argument function
   *
   * @param {Array} list
   * @param {Function} f
   * @return {*}
   */
  function find (list, f) {
    return list.filter(f)[0]
  }

  /**
   * Deep copy the given object considering circular structure.
   * This function caches all nested objects and its copies.
   * If it detects circular structure, use cached copy to avoid infinite loop.
   *
   * @param {*} obj
   * @param {Array<Object>} cache
   * @return {*}
   */
  function deepCopy (obj, cache) {
    if ( cache === void 0 ) cache = [];

    // just return if obj is immutable value
    if (obj === null || typeof obj !== 'object') {
      return obj
    }

    // if obj is hit, it is in circular structure
    var hit = find(cache, function (c) { return c.original === obj; });
    if (hit) {
      return hit.copy
    }

    var copy = Array.isArray(obj) ? [] : {};
    // put the copy into cache at first
    // because we want to refer it in recursive deepCopy
    cache.push({
      original: obj,
      copy: copy
    });

    Object.keys(obj).forEach(function (key) {
      copy[key] = deepCopy(obj[key], cache);
    });

    return copy
  }

  /**
   * forEach for object
   */
  function forEachValue (obj, fn) {
    Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });
  }

  function isObject (obj) {
    return obj !== null && typeof obj === 'object'
  }

  function isPromise (val) {
    return val && typeof val.then === 'function'
  }

  function assert (condition, msg) {
    if (!condition) { throw new Error(("[vuex] " + msg)) }
  }

  function partial (fn, arg) {
    return function () {
      return fn(arg)
    }
  }

  // Base data struct for store's module, package with some attribute and method
  var Module = function Module (rawModule, runtime) {
    this.runtime = runtime;
    // Store some children item
    this._children = Object.create(null);
    // Store the origin module object which passed by programmer
    this._rawModule = rawModule;
    var rawState = rawModule.state;

    // Store the origin module's state
    this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};
  };

  var prototypeAccessors = { namespaced: { configurable: true } };

  prototypeAccessors.namespaced.get = function () {
    return !!this._rawModule.namespaced
  };

  Module.prototype.addChild = function addChild (key, module) {
    this._children[key] = module;
  };

  Module.prototype.removeChild = function removeChild (key) {
    delete this._children[key];
  };

  Module.prototype.getChild = function getChild (key) {
    return this._children[key]
  };

  Module.prototype.hasChild = function hasChild (key) {
    return key in this._children
  };

  Module.prototype.update = function update (rawModule) {
    this._rawModule.namespaced = rawModule.namespaced;
    if (rawModule.actions) {
      this._rawModule.actions = rawModule.actions;
    }
    if (rawModule.mutations) {
      this._rawModule.mutations = rawModule.mutations;
    }
    if (rawModule.getters) {
      this._rawModule.getters = rawModule.getters;
    }
  };

  Module.prototype.forEachChild = function forEachChild (fn) {
    forEachValue(this._children, fn);
  };

  Module.prototype.forEachGetter = function forEachGetter (fn) {
    if (this._rawModule.getters) {
      forEachValue(this._rawModule.getters, fn);
    }
  };

  Module.prototype.forEachAction = function forEachAction (fn) {
    if (this._rawModule.actions) {
      forEachValue(this._rawModule.actions, fn);
    }
  };

  Module.prototype.forEachMutation = function forEachMutation (fn) {
    if (this._rawModule.mutations) {
      forEachValue(this._rawModule.mutations, fn);
    }
  };

  Object.defineProperties( Module.prototype, prototypeAccessors );

  var ModuleCollection = function ModuleCollection (rawRootModule) {
    // register root module (Vuex.Store options)
    this.register([], rawRootModule, false);
  };

  ModuleCollection.prototype.get = function get (path) {
    return path.reduce(function (module, key) {
      return module.getChild(key)
    }, this.root)
  };

  ModuleCollection.prototype.getNamespace = function getNamespace (path) {
    var module = this.root;
    return path.reduce(function (namespace, key) {
      module = module.getChild(key);
      return namespace + (module.namespaced ? key + '/' : '')
    }, '')
  };

  ModuleCollection.prototype.update = function update$1 (rawRootModule) {
    update([], this.root, rawRootModule);
  };

  ModuleCollection.prototype.register = function register (path, rawModule, runtime) {
      var this$1 = this;
      if ( runtime === void 0 ) runtime = true;

    {
      assertRawModule(path, rawModule);
    }

    var newModule = new Module(rawModule, runtime);
    if (path.length === 0) {
      this.root = newModule;
    } else {
      var parent = this.get(path.slice(0, -1));
      parent.addChild(path[path.length - 1], newModule);
    }

    // register nested modules
    if (rawModule.modules) {
      forEachValue(rawModule.modules, function (rawChildModule, key) {
        this$1.register(path.concat(key), rawChildModule, runtime);
      });
    }
  };

  ModuleCollection.prototype.unregister = function unregister (path) {
    var parent = this.get(path.slice(0, -1));
    var key = path[path.length - 1];
    var child = parent.getChild(key);

    if (!child) {
      {
        console.warn(
          "[vuex] trying to unregister module '" + key + "', which is " +
          "not registered"
        );
      }
      return
    }

    if (!child.runtime) {
      return
    }

    parent.removeChild(key);
  };

  ModuleCollection.prototype.isRegistered = function isRegistered (path) {
    var parent = this.get(path.slice(0, -1));
    var key = path[path.length - 1];

    if (parent) {
      return parent.hasChild(key)
    }

    return false
  };

  function update (path, targetModule, newModule) {
    {
      assertRawModule(path, newModule);
    }

    // update target module
    targetModule.update(newModule);

    // update nested modules
    if (newModule.modules) {
      for (var key in newModule.modules) {
        if (!targetModule.getChild(key)) {
          {
            console.warn(
              "[vuex] trying to add a new module '" + key + "' on hot reloading, " +
              'manual reload is needed'
            );
          }
          return
        }
        update(
          path.concat(key),
          targetModule.getChild(key),
          newModule.modules[key]
        );
      }
    }
  }

  var functionAssert = {
    assert: function (value) { return typeof value === 'function'; },
    expected: 'function'
  };

  var objectAssert = {
    assert: function (value) { return typeof value === 'function' ||
      (typeof value === 'object' && typeof value.handler === 'function'); },
    expected: 'function or object with "handler" function'
  };

  var assertTypes = {
    getters: functionAssert,
    mutations: functionAssert,
    actions: objectAssert
  };

  function assertRawModule (path, rawModule) {
    Object.keys(assertTypes).forEach(function (key) {
      if (!rawModule[key]) { return }

      var assertOptions = assertTypes[key];

      forEachValue(rawModule[key], function (value, type) {
        assert(
          assertOptions.assert(value),
          makeAssertionMessage(path, key, type, value, assertOptions.expected)
        );
      });
    });
  }

  function makeAssertionMessage (path, key, type, value, expected) {
    var buf = key + " should be " + expected + " but \"" + key + "." + type + "\"";
    if (path.length > 0) {
      buf += " in module \"" + (path.join('.')) + "\"";
    }
    buf += " is " + (JSON.stringify(value)) + ".";
    return buf
  }

  var Vue; // bind on install

  var Store = function Store (options) {
    var this$1 = this;
    if ( options === void 0 ) options = {};

    // Auto install if it is not done yet and `window` has `Vue`.
    // To allow users to avoid auto-installation in some cases,
    // this code should be placed here. See #731
    if (!Vue && typeof window !== 'undefined' && window.Vue) {
      install(window.Vue);
    }

    {
      assert(Vue, "must call Vue.use(Vuex) before creating a store instance.");
      assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser.");
      assert(this instanceof Store, "store must be called with the new operator.");
    }

    var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];
    var strict = options.strict; if ( strict === void 0 ) strict = false;

    // store internal state
    this._committing = false;
    this._actions = Object.create(null);
    this._actionSubscribers = [];
    this._mutations = Object.create(null);
    this._wrappedGetters = Object.create(null);
    this._modules = new ModuleCollection(options);
    this._modulesNamespaceMap = Object.create(null);
    this._subscribers = [];
    this._watcherVM = new Vue();
    this._makeLocalGettersCache = Object.create(null);

    // bind commit and dispatch to self
    var store = this;
    var ref = this;
    var dispatch = ref.dispatch;
    var commit = ref.commit;
    this.dispatch = function boundDispatch (type, payload) {
      return dispatch.call(store, type, payload)
    };
    this.commit = function boundCommit (type, payload, options) {
      return commit.call(store, type, payload, options)
    };

    // strict mode
    this.strict = strict;

    var state = this._modules.root.state;

    // init root module.
    // this also recursively registers all sub-modules
    // and collects all module getters inside this._wrappedGetters
    installModule(this, state, [], this._modules.root);

    // initialize the store vm, which is responsible for the reactivity
    // (also registers _wrappedGetters as computed properties)
    resetStoreVM(this, state);

    // apply plugins
    plugins.forEach(function (plugin) { return plugin(this$1); });

    var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;
    if (useDevtools) {
      devtoolPlugin(this);
    }
  };

  var prototypeAccessors$1 = { state: { configurable: true } };

  prototypeAccessors$1.state.get = function () {
    return this._vm._data.$$state
  };

  prototypeAccessors$1.state.set = function (v) {
    {
      assert(false, "use store.replaceState() to explicit replace store state.");
    }
  };

  Store.prototype.commit = function commit (_type, _payload, _options) {
      var this$1 = this;

    // check object-style commit
    var ref = unifyObjectStyle(_type, _payload, _options);
      var type = ref.type;
      var payload = ref.payload;
      var options = ref.options;

    var mutation = { type: type, payload: payload };
    var entry = this._mutations[type];
    if (!entry) {
      {
        console.error(("[vuex] unknown mutation type: " + type));
      }
      return
    }
    this._withCommit(function () {
      entry.forEach(function commitIterator (handler) {
        handler(payload);
      });
    });

    this._subscribers
      .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
      .forEach(function (sub) { return sub(mutation, this$1.state); });

    if (
      
      options && options.silent
    ) {
      console.warn(
        "[vuex] mutation type: " + type + ". Silent option has been removed. " +
        'Use the filter functionality in the vue-devtools'
      );
    }
  };

  Store.prototype.dispatch = function dispatch (_type, _payload) {
      var this$1 = this;

    // check object-style dispatch
    var ref = unifyObjectStyle(_type, _payload);
      var type = ref.type;
      var payload = ref.payload;

    var action = { type: type, payload: payload };
    var entry = this._actions[type];
    if (!entry) {
      {
        console.error(("[vuex] unknown action type: " + type));
      }
      return
    }

    try {
      this._actionSubscribers
        .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
        .filter(function (sub) { return sub.before; })
        .forEach(function (sub) { return sub.before(action, this$1.state); });
    } catch (e) {
      {
        console.warn("[vuex] error in before action subscribers: ");
        console.error(e);
      }
    }

    var result = entry.length > 1
      ? Promise.all(entry.map(function (handler) { return handler(payload); }))
      : entry[0](payload);

    return new Promise(function (resolve, reject) {
      result.then(function (res) {
        try {
          this$1._actionSubscribers
            .filter(function (sub) { return sub.after; })
            .forEach(function (sub) { return sub.after(action, this$1.state); });
        } catch (e) {
          {
            console.warn("[vuex] error in after action subscribers: ");
            console.error(e);
          }
        }
        resolve(res);
      }, function (error) {
        try {
          this$1._actionSubscribers
            .filter(function (sub) { return sub.error; })
            .forEach(function (sub) { return sub.error(action, this$1.state, error); });
        } catch (e) {
          {
            console.warn("[vuex] error in error action subscribers: ");
            console.error(e);
          }
        }
        reject(error);
      });
    })
  };

  Store.prototype.subscribe = function subscribe (fn, options) {
    return genericSubscribe(fn, this._subscribers, options)
  };

  Store.prototype.subscribeAction = function subscribeAction (fn, options) {
    var subs = typeof fn === 'function' ? { before: fn } : fn;
    return genericSubscribe(subs, this._actionSubscribers, options)
  };

  Store.prototype.watch = function watch (getter, cb, options) {
      var this$1 = this;

    {
      assert(typeof getter === 'function', "store.watch only accepts a function.");
    }
    return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)
  };

  Store.prototype.replaceState = function replaceState (state) {
      var this$1 = this;

    this._withCommit(function () {
      this$1._vm._data.$$state = state;
    });
  };

  Store.prototype.registerModule = function registerModule (path, rawModule, options) {
      if ( options === void 0 ) options = {};

    if (typeof path === 'string') { path = [path]; }

    {
      assert(Array.isArray(path), "module path must be a string or an Array.");
      assert(path.length > 0, 'cannot register the root module by using registerModule.');
    }

    this._modules.register(path, rawModule);
    installModule(this, this.state, path, this._modules.get(path), options.preserveState);
    // reset store to update getters...
    resetStoreVM(this, this.state);
  };

  Store.prototype.unregisterModule = function unregisterModule (path) {
      var this$1 = this;

    if (typeof path === 'string') { path = [path]; }

    {
      assert(Array.isArray(path), "module path must be a string or an Array.");
    }

    this._modules.unregister(path);
    this._withCommit(function () {
      var parentState = getNestedState(this$1.state, path.slice(0, -1));
      Vue.delete(parentState, path[path.length - 1]);
    });
    resetStore(this);
  };

  Store.prototype.hasModule = function hasModule (path) {
    if (typeof path === 'string') { path = [path]; }

    {
      assert(Array.isArray(path), "module path must be a string or an Array.");
    }

    return this._modules.isRegistered(path)
  };

  Store.prototype.hotUpdate = function hotUpdate (newOptions) {
    this._modules.update(newOptions);
    resetStore(this, true);
  };

  Store.prototype._withCommit = function _withCommit (fn) {
    var committing = this._committing;
    this._committing = true;
    fn();
    this._committing = committing;
  };

  Object.defineProperties( Store.prototype, prototypeAccessors$1 );

  function genericSubscribe (fn, subs, options) {
    if (subs.indexOf(fn) < 0) {
      options && options.prepend
        ? subs.unshift(fn)
        : subs.push(fn);
    }
    return function () {
      var i = subs.indexOf(fn);
      if (i > -1) {
        subs.splice(i, 1);
      }
    }
  }

  function resetStore (store, hot) {
    store._actions = Object.create(null);
    store._mutations = Object.create(null);
    store._wrappedGetters = Object.create(null);
    store._modulesNamespaceMap = Object.create(null);
    var state = store.state;
    // init all modules
    installModule(store, state, [], store._modules.root, true);
    // reset vm
    resetStoreVM(store, state, hot);
  }

  function resetStoreVM (store, state, hot) {
    var oldVm = store._vm;

    // bind store public getters
    store.getters = {};
    // reset local getters cache
    store._makeLocalGettersCache = Object.create(null);
    var wrappedGetters = store._wrappedGetters;
    var computed = {};
    forEachValue(wrappedGetters, function (fn, key) {
      // use computed to leverage its lazy-caching mechanism
      // direct inline function use will lead to closure preserving oldVm.
      // using partial to return function with only arguments preserved in closure environment.
      computed[key] = partial(fn, store);
      Object.defineProperty(store.getters, key, {
        get: function () { return store._vm[key]; },
        enumerable: true // for local getters
      });
    });

    // use a Vue instance to store the state tree
    // suppress warnings just in case the user has added
    // some funky global mixins
    var silent = Vue.config.silent;
    Vue.config.silent = true;
    store._vm = new Vue({
      data: {
        $$state: state
      },
      computed: computed
    });
    Vue.config.silent = silent;

    // enable strict mode for new vm
    if (store.strict) {
      enableStrictMode(store);
    }

    if (oldVm) {
      if (hot) {
        // dispatch changes in all subscribed watchers
        // to force getter re-evaluation for hot reloading.
        store._withCommit(function () {
          oldVm._data.$$state = null;
        });
      }
      Vue.nextTick(function () { return oldVm.$destroy(); });
    }
  }

  function installModule (store, rootState, path, module, hot) {
    var isRoot = !path.length;
    var namespace = store._modules.getNamespace(path);

    // register in namespace map
    if (module.namespaced) {
      if (store._modulesNamespaceMap[namespace] && true) {
        console.error(("[vuex] duplicate namespace " + namespace + " for the namespaced module " + (path.join('/'))));
      }
      store._modulesNamespaceMap[namespace] = module;
    }

    // set state
    if (!isRoot && !hot) {
      var parentState = getNestedState(rootState, path.slice(0, -1));
      var moduleName = path[path.length - 1];
      store._withCommit(function () {
        {
          if (moduleName in parentState) {
            console.warn(
              ("[vuex] state field \"" + moduleName + "\" was overridden by a module with the same name at \"" + (path.join('.')) + "\"")
            );
          }
        }
        Vue.set(parentState, moduleName, module.state);
      });
    }

    var local = module.context = makeLocalContext(store, namespace, path);

    module.forEachMutation(function (mutation, key) {
      var namespacedType = namespace + key;
      registerMutation(store, namespacedType, mutation, local);
    });

    module.forEachAction(function (action, key) {
      var type = action.root ? key : namespace + key;
      var handler = action.handler || action;
      registerAction(store, type, handler, local);
    });

    module.forEachGetter(function (getter, key) {
      var namespacedType = namespace + key;
      registerGetter(store, namespacedType, getter, local);
    });

    module.forEachChild(function (child, key) {
      installModule(store, rootState, path.concat(key), child, hot);
    });
  }

  /**
   * make localized dispatch, commit, getters and state
   * if there is no namespace, just use root ones
   */
  function makeLocalContext (store, namespace, path) {
    var noNamespace = namespace === '';

    var local = {
      dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {
        var args = unifyObjectStyle(_type, _payload, _options);
        var payload = args.payload;
        var options = args.options;
        var type = args.type;

        if (!options || !options.root) {
          type = namespace + type;
          if ( !store._actions[type]) {
            console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type));
            return
          }
        }

        return store.dispatch(type, payload)
      },

      commit: noNamespace ? store.commit : function (_type, _payload, _options) {
        var args = unifyObjectStyle(_type, _payload, _options);
        var payload = args.payload;
        var options = args.options;
        var type = args.type;

        if (!options || !options.root) {
          type = namespace + type;
          if ( !store._mutations[type]) {
            console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type));
            return
          }
        }

        store.commit(type, payload, options);
      }
    };

    // getters and state object must be gotten lazily
    // because they will be changed by vm update
    Object.defineProperties(local, {
      getters: {
        get: noNamespace
          ? function () { return store.getters; }
          : function () { return makeLocalGetters(store, namespace); }
      },
      state: {
        get: function () { return getNestedState(store.state, path); }
      }
    });

    return local
  }

  function makeLocalGetters (store, namespace) {
    if (!store._makeLocalGettersCache[namespace]) {
      var gettersProxy = {};
      var splitPos = namespace.length;
      Object.keys(store.getters).forEach(function (type) {
        // skip if the target getter is not match this namespace
        if (type.slice(0, splitPos) !== namespace) { return }

        // extract local getter type
        var localType = type.slice(splitPos);

        // Add a port to the getters proxy.
        // Define as getter property because
        // we do not want to evaluate the getters in this time.
        Object.defineProperty(gettersProxy, localType, {
          get: function () { return store.getters[type]; },
          enumerable: true
        });
      });
      store._makeLocalGettersCache[namespace] = gettersProxy;
    }

    return store._makeLocalGettersCache[namespace]
  }

  function registerMutation (store, type, handler, local) {
    var entry = store._mutations[type] || (store._mutations[type] = []);
    entry.push(function wrappedMutationHandler (payload) {
      handler.call(store, local.state, payload);
    });
  }

  function registerAction (store, type, handler, local) {
    var entry = store._actions[type] || (store._actions[type] = []);
    entry.push(function wrappedActionHandler (payload) {
      var res = handler.call(store, {
        dispatch: local.dispatch,
        commit: local.commit,
        getters: local.getters,
        state: local.state,
        rootGetters: store.getters,
        rootState: store.state
      }, payload);
      if (!isPromise(res)) {
        res = Promise.resolve(res);
      }
      if (store._devtoolHook) {
        return res.catch(function (err) {
          store._devtoolHook.emit('vuex:error', err);
          throw err
        })
      } else {
        return res
      }
    });
  }

  function registerGetter (store, type, rawGetter, local) {
    if (store._wrappedGetters[type]) {
      {
        console.error(("[vuex] duplicate getter key: " + type));
      }
      return
    }
    store._wrappedGetters[type] = function wrappedGetter (store) {
      return rawGetter(
        local.state, // local state
        local.getters, // local getters
        store.state, // root state
        store.getters // root getters
      )
    };
  }

  function enableStrictMode (store) {
    store._vm.$watch(function () { return this._data.$$state }, function () {
      {
        assert(store._committing, "do not mutate vuex store state outside mutation handlers.");
      }
    }, { deep: true, sync: true });
  }

  function getNestedState (state, path) {
    return path.reduce(function (state, key) { return state[key]; }, state)
  }

  function unifyObjectStyle (type, payload, options) {
    if (isObject(type) && type.type) {
      options = payload;
      payload = type;
      type = type.type;
    }

    {
      assert(typeof type === 'string', ("expects string as the type, but found " + (typeof type) + "."));
    }

    return { type: type, payload: payload, options: options }
  }

  function install (_Vue) {
    if (Vue && _Vue === Vue) {
      {
        console.error(
          '[vuex] already installed. Vue.use(Vuex) should be called only once.'
        );
      }
      return
    }
    Vue = _Vue;
    applyMixin(Vue);
  }

  /**
   * Reduce the code which written in Vue.js for getting the state.
   * @param {String} [namespace] - Module's namespace
   * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.
   * @param {Object}
   */
  var mapState = normalizeNamespace(function (namespace, states) {
    var res = {};
    if ( !isValidMap(states)) {
      console.error('[vuex] mapState: mapper parameter must be either an Array or an Object');
    }
    normalizeMap(states).forEach(function (ref) {
      var key = ref.key;
      var val = ref.val;

      res[key] = function mappedState () {
        var state = this.$store.state;
        var getters = this.$store.getters;
        if (namespace) {
          var module = getModuleByNamespace(this.$store, 'mapState', namespace);
          if (!module) {
            return
          }
          state = module.context.state;
          getters = module.context.getters;
        }
        return typeof val === 'function'
          ? val.call(this, state, getters)
          : state[val]
      };
      // mark vuex getter for devtools
      res[key].vuex = true;
    });
    return res
  });

  /**
   * Reduce the code which written in Vue.js for committing the mutation
   * @param {String} [namespace] - Module's namespace
   * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept another params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.
   * @return {Object}
   */
  var mapMutations = normalizeNamespace(function (namespace, mutations) {
    var res = {};
    if ( !isValidMap(mutations)) {
      console.error('[vuex] mapMutations: mapper parameter must be either an Array or an Object');
    }
    normalizeMap(mutations).forEach(function (ref) {
      var key = ref.key;
      var val = ref.val;

      res[key] = function mappedMutation () {
        var args = [], len = arguments.length;
        while ( len-- ) args[ len ] = arguments[ len ];

        // Get the commit method from store
        var commit = this.$store.commit;
        if (namespace) {
          var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);
          if (!module) {
            return
          }
          commit = module.context.commit;
        }
        return typeof val === 'function'
          ? val.apply(this, [commit].concat(args))
          : commit.apply(this.$store, [val].concat(args))
      };
    });
    return res
  });

  /**
   * Reduce the code which written in Vue.js for getting the getters
   * @param {String} [namespace] - Module's namespace
   * @param {Object|Array} getters
   * @return {Object}
   */
  var mapGetters = normalizeNamespace(function (namespace, getters) {
    var res = {};
    if ( !isValidMap(getters)) {
      console.error('[vuex] mapGetters: mapper parameter must be either an Array or an Object');
    }
    normalizeMap(getters).forEach(function (ref) {
      var key = ref.key;
      var val = ref.val;

      // The namespace has been mutated by normalizeNamespace
      val = namespace + val;
      res[key] = function mappedGetter () {
        if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
          return
        }
        if ( !(val in this.$store.getters)) {
          console.error(("[vuex] unknown getter: " + val));
          return
        }
        return this.$store.getters[val]
      };
      // mark vuex getter for devtools
      res[key].vuex = true;
    });
    return res
  });

  /**
   * Reduce the code which written in Vue.js for dispatch the action
   * @param {String} [namespace] - Module's namespace
   * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.
   * @return {Object}
   */
  var mapActions = normalizeNamespace(function (namespace, actions) {
    var res = {};
    if ( !isValidMap(actions)) {
      console.error('[vuex] mapActions: mapper parameter must be either an Array or an Object');
    }
    normalizeMap(actions).forEach(function (ref) {
      var key = ref.key;
      var val = ref.val;

      res[key] = function mappedAction () {
        var args = [], len = arguments.length;
        while ( len-- ) args[ len ] = arguments[ len ];

        // get dispatch function from store
        var dispatch = this.$store.dispatch;
        if (namespace) {
          var module = getModuleByNamespace(this.$store, 'mapActions', namespace);
          if (!module) {
            return
          }
          dispatch = module.context.dispatch;
        }
        return typeof val === 'function'
          ? val.apply(this, [dispatch].concat(args))
          : dispatch.apply(this.$store, [val].concat(args))
      };
    });
    return res
  });

  /**
   * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object
   * @param {String} namespace
   * @return {Object}
   */
  var createNamespacedHelpers = function (namespace) { return ({
    mapState: mapState.bind(null, namespace),
    mapGetters: mapGetters.bind(null, namespace),
    mapMutations: mapMutations.bind(null, namespace),
    mapActions: mapActions.bind(null, namespace)
  }); };

  /**
   * Normalize the map
   * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]
   * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]
   * @param {Array|Object} map
   * @return {Object}
   */
  function normalizeMap (map) {
    if (!isValidMap(map)) {
      return []
    }
    return Array.isArray(map)
      ? map.map(function (key) { return ({ key: key, val: key }); })
      : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })
  }

  /**
   * Validate whether given map is valid or not
   * @param {*} map
   * @return {Boolean}
   */
  function isValidMap (map) {
    return Array.isArray(map) || isObject(map)
  }

  /**
   * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.
   * @param {Function} fn
   * @return {Function}
   */
  function normalizeNamespace (fn) {
    return function (namespace, map) {
      if (typeof namespace !== 'string') {
        map = namespace;
        namespace = '';
      } else if (namespace.charAt(namespace.length - 1) !== '/') {
        namespace += '/';
      }
      return fn(namespace, map)
    }
  }

  /**
   * Search a special module from store by namespace. if module not exist, print error message.
   * @param {Object} store
   * @param {String} helper
   * @param {String} namespace
   * @return {Object}
   */
  function getModuleByNamespace (store, helper, namespace) {
    var module = store._modulesNamespaceMap[namespace];
    if ( !module) {
      console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace));
    }
    return module
  }

  // Credits: borrowed code from fcomb/redux-logger

  function createLogger (ref) {
    if ( ref === void 0 ) ref = {};
    var collapsed = ref.collapsed; if ( collapsed === void 0 ) collapsed = true;
    var filter = ref.filter; if ( filter === void 0 ) filter = function (mutation, stateBefore, stateAfter) { return true; };
    var transformer = ref.transformer; if ( transformer === void 0 ) transformer = function (state) { return state; };
    var mutationTransformer = ref.mutationTransformer; if ( mutationTransformer === void 0 ) mutationTransformer = function (mut) { return mut; };
    var actionFilter = ref.actionFilter; if ( actionFilter === void 0 ) actionFilter = function (action, state) { return true; };
    var actionTransformer = ref.actionTransformer; if ( actionTransformer === void 0 ) actionTransformer = function (act) { return act; };
    var logMutations = ref.logMutations; if ( logMutations === void 0 ) logMutations = true;
    var logActions = ref.logActions; if ( logActions === void 0 ) logActions = true;
    var logger = ref.logger; if ( logger === void 0 ) logger = console;

    return function (store) {
      var prevState = deepCopy(store.state);

      if (typeof logger === 'undefined') {
        return
      }

      if (logMutations) {
        store.subscribe(function (mutation, state) {
          var nextState = deepCopy(state);

          if (filter(mutation, prevState, nextState)) {
            var formattedTime = getFormattedTime();
            var formattedMutation = mutationTransformer(mutation);
            var message = "mutation " + (mutation.type) + formattedTime;

            startMessage(logger, message, collapsed);
            logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState));
            logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation);
            logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState));
            endMessage(logger);
          }

          prevState = nextState;
        });
      }

      if (logActions) {
        store.subscribeAction(function (action, state) {
          if (actionFilter(action, state)) {
            var formattedTime = getFormattedTime();
            var formattedAction = actionTransformer(action);
            var message = "action " + (action.type) + formattedTime;

            startMessage(logger, message, collapsed);
            logger.log('%c action', 'color: #03A9F4; font-weight: bold', formattedAction);
            endMessage(logger);
          }
        });
      }
    }
  }

  function startMessage (logger, message, collapsed) {
    var startMessage = collapsed
      ? logger.groupCollapsed
      : logger.group;

    // render
    try {
      startMessage.call(logger, message);
    } catch (e) {
      logger.log(message);
    }
  }

  function endMessage (logger) {
    try {
      logger.groupEnd();
    } catch (e) {
      logger.log('â€”â€” log end â€”â€”');
    }
  }

  function getFormattedTime () {
    var time = new Date();
    return (" @ " + (pad(time.getHours(), 2)) + ":" + (pad(time.getMinutes(), 2)) + ":" + (pad(time.getSeconds(), 2)) + "." + (pad(time.getMilliseconds(), 3)))
  }

  function repeat (str, times) {
    return (new Array(times + 1)).join(str)
  }

  function pad (num, maxLength) {
    return repeat('0', maxLength - num.toString().length) + num
  }

  var index_cjs = {
    Store: Store,
    install: install,
    version: '3.6.2',
    mapState: mapState,
    mapMutations: mapMutations,
    mapGetters: mapGetters,
    mapActions: mapActions,
    createNamespacedHelpers: createNamespacedHelpers,
    createLogger: createLogger
  };

  return index_cjs;

})));
/*!
 * vuex v3.6.2
 * (c) 2021 Evan You
 * @license MIT
 */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Vuex=e()}(this,(function(){"use strict";var t=("undefined"!=typeof window?window:"undefined"!=typeof global?global:{}).__VUE_DEVTOOLS_GLOBAL_HOOK__;function e(t,n){if(void 0===n&&(n=[]),null===t||"object"!=typeof t)return t;var o,r=(o=function(e){return e.original===t},n.filter(o)[0]);if(r)return r.copy;var i=Array.isArray(t)?[]:{};return n.push({original:t,copy:i}),Object.keys(t).forEach((function(o){i[o]=e(t[o],n)})),i}function n(t,e){Object.keys(t).forEach((function(n){return e(t[n],n)}))}function o(t){return null!==t&&"object"==typeof t}var r=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=("function"==typeof n?n():n)||{}},i={namespaced:{configurable:!0}};i.namespaced.get=function(){return!!this._rawModule.namespaced},r.prototype.addChild=function(t,e){this._children[t]=e},r.prototype.removeChild=function(t){delete this._children[t]},r.prototype.getChild=function(t){return this._children[t]},r.prototype.hasChild=function(t){return t in this._children},r.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},r.prototype.forEachChild=function(t){n(this._children,t)},r.prototype.forEachGetter=function(t){this._rawModule.getters&&n(this._rawModule.getters,t)},r.prototype.forEachAction=function(t){this._rawModule.actions&&n(this._rawModule.actions,t)},r.prototype.forEachMutation=function(t){this._rawModule.mutations&&n(this._rawModule.mutations,t)},Object.defineProperties(r.prototype,i);var c,a=function(t){this.register([],t,!1)};a.prototype.get=function(t){return t.reduce((function(t,e){return t.getChild(e)}),this.root)},a.prototype.getNamespace=function(t){var e=this.root;return t.reduce((function(t,n){return t+((e=e.getChild(n)).namespaced?n+"/":"")}),"")},a.prototype.update=function(t){!function t(e,n,o){if(n.update(o),o.modules)for(var r in o.modules){if(!n.getChild(r))return;t(e.concat(r),n.getChild(r),o.modules[r])}}([],this.root,t)},a.prototype.register=function(t,e,o){var i=this;void 0===o&&(o=!0);var c=new r(e,o);0===t.length?this.root=c:this.get(t.slice(0,-1)).addChild(t[t.length-1],c);e.modules&&n(e.modules,(function(e,n){i.register(t.concat(n),e,o)}))},a.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1],o=e.getChild(n);o&&o.runtime&&e.removeChild(n)},a.prototype.isRegistered=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];return!!e&&e.hasChild(n)};var s=function(e){var n=this;void 0===e&&(e={}),!c&&"undefined"!=typeof window&&window.Vue&&v(window.Vue);var o=e.plugins;void 0===o&&(o=[]);var r=e.strict;void 0===r&&(r=!1),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new a(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new c,this._makeLocalGettersCache=Object.create(null);var i=this,s=this.dispatch,u=this.commit;this.dispatch=function(t,e){return s.call(i,t,e)},this.commit=function(t,e,n){return u.call(i,t,e,n)},this.strict=r;var f=this._modules.root.state;p(this,f,[],this._modules.root),h(this,f),o.forEach((function(t){return t(n)})),(void 0!==e.devtools?e.devtools:c.config.devtools)&&function(e){t&&(e._devtoolHook=t,t.emit("vuex:init",e),t.on("vuex:travel-to-state",(function(t){e.replaceState(t)})),e.subscribe((function(e,n){t.emit("vuex:mutation",e,n)}),{prepend:!0}),e.subscribeAction((function(e,n){t.emit("vuex:action",e,n)}),{prepend:!0}))}(this)},u={state:{configurable:!0}};function f(t,e,n){return e.indexOf(t)<0&&(n&&n.prepend?e.unshift(t):e.push(t)),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function l(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;p(t,n,[],t._modules.root,!0),h(t,n,e)}function h(t,e,o){var r=t._vm;t.getters={},t._makeLocalGettersCache=Object.create(null);var i=t._wrappedGetters,a={};n(i,(function(e,n){a[n]=function(t,e){return function(){return t(e)}}(e,t),Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})}));var s=c.config.silent;c.config.silent=!0,t._vm=new c({data:{$$state:e},computed:a}),c.config.silent=s,t.strict&&function(t){t._vm.$watch((function(){return this._data.$$state}),(function(){}),{deep:!0,sync:!0})}(t),r&&(o&&t._withCommit((function(){r._data.$$state=null})),c.nextTick((function(){return r.$destroy()})))}function p(t,e,n,o,r){var i=!n.length,a=t._modules.getNamespace(n);if(o.namespaced&&(t._modulesNamespaceMap[a],t._modulesNamespaceMap[a]=o),!i&&!r){var s=d(e,n.slice(0,-1)),u=n[n.length-1];t._withCommit((function(){c.set(s,u,o.state)}))}var f=o.context=function(t,e,n){var o=""===e,r={dispatch:o?t.dispatch:function(n,o,r){var i=m(n,o,r),c=i.payload,a=i.options,s=i.type;return a&&a.root||(s=e+s),t.dispatch(s,c)},commit:o?t.commit:function(n,o,r){var i=m(n,o,r),c=i.payload,a=i.options,s=i.type;a&&a.root||(s=e+s),t.commit(s,c,a)}};return Object.defineProperties(r,{getters:{get:o?function(){return t.getters}:function(){return function(t,e){if(!t._makeLocalGettersCache[e]){var n={},o=e.length;Object.keys(t.getters).forEach((function(r){if(r.slice(0,o)===e){var i=r.slice(o);Object.defineProperty(n,i,{get:function(){return t.getters[r]},enumerable:!0})}})),t._makeLocalGettersCache[e]=n}return t._makeLocalGettersCache[e]}(t,e)}},state:{get:function(){return d(t.state,n)}}}),r}(t,a,n);o.forEachMutation((function(e,n){!function(t,e,n,o){(t._mutations[e]||(t._mutations[e]=[])).push((function(e){n.call(t,o.state,e)}))}(t,a+n,e,f)})),o.forEachAction((function(e,n){var o=e.root?n:a+n,r=e.handler||e;!function(t,e,n,o){(t._actions[e]||(t._actions[e]=[])).push((function(e){var r,i=n.call(t,{dispatch:o.dispatch,commit:o.commit,getters:o.getters,state:o.state,rootGetters:t.getters,rootState:t.state},e);return(r=i)&&"function"==typeof r.then||(i=Promise.resolve(i)),t._devtoolHook?i.catch((function(e){throw t._devtoolHook.emit("vuex:error",e),e})):i}))}(t,o,r,f)})),o.forEachGetter((function(e,n){!function(t,e,n,o){if(t._wrappedGetters[e])return;t._wrappedGetters[e]=function(t){return n(o.state,o.getters,t.state,t.getters)}}(t,a+n,e,f)})),o.forEachChild((function(o,i){p(t,e,n.concat(i),o,r)}))}function d(t,e){return e.reduce((function(t,e){return t[e]}),t)}function m(t,e,n){return o(t)&&t.type&&(n=e,e=t,t=t.type),{type:t,payload:e,options:n}}function v(t){c&&t===c||function(t){if(Number(t.version.split(".")[0])>=2)t.mixin({beforeCreate:n});else{var e=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[n].concat(t.init):n,e.call(this,t)}}function n(){var t=this.$options;t.store?this.$store="function"==typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}}(c=t)}u.state.get=function(){return this._vm._data.$$state},u.state.set=function(t){},s.prototype.commit=function(t,e,n){var o=this,r=m(t,e,n),i=r.type,c=r.payload,a={type:i,payload:c},s=this._mutations[i];s&&(this._withCommit((function(){s.forEach((function(t){t(c)}))})),this._subscribers.slice().forEach((function(t){return t(a,o.state)})))},s.prototype.dispatch=function(t,e){var n=this,o=m(t,e),r=o.type,i=o.payload,c={type:r,payload:i},a=this._actions[r];if(a){try{this._actionSubscribers.slice().filter((function(t){return t.before})).forEach((function(t){return t.before(c,n.state)}))}catch(t){}var s=a.length>1?Promise.all(a.map((function(t){return t(i)}))):a[0](i);return new Promise((function(t,e){s.then((function(e){try{n._actionSubscribers.filter((function(t){return t.after})).forEach((function(t){return t.after(c,n.state)}))}catch(t){}t(e)}),(function(t){try{n._actionSubscribers.filter((function(t){return t.error})).forEach((function(e){return e.error(c,n.state,t)}))}catch(t){}e(t)}))}))}},s.prototype.subscribe=function(t,e){return f(t,this._subscribers,e)},s.prototype.subscribeAction=function(t,e){return f("function"==typeof t?{before:t}:t,this._actionSubscribers,e)},s.prototype.watch=function(t,e,n){var o=this;return this._watcherVM.$watch((function(){return t(o.state,o.getters)}),e,n)},s.prototype.replaceState=function(t){var e=this;this._withCommit((function(){e._vm._data.$$state=t}))},s.prototype.registerModule=function(t,e,n){void 0===n&&(n={}),"string"==typeof t&&(t=[t]),this._modules.register(t,e),p(this,this.state,t,this._modules.get(t),n.preserveState),h(this,this.state)},s.prototype.unregisterModule=function(t){var e=this;"string"==typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit((function(){var n=d(e.state,t.slice(0,-1));c.delete(n,t[t.length-1])})),l(this)},s.prototype.hasModule=function(t){return"string"==typeof t&&(t=[t]),this._modules.isRegistered(t)},s.prototype.hotUpdate=function(t){this._modules.update(t),l(this,!0)},s.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(s.prototype,u);var g=M((function(t,e){var n={};return w(e).forEach((function(e){var o=e.key,r=e.val;n[o]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var o=$(this.$store,"mapState",t);if(!o)return;e=o.context.state,n=o.context.getters}return"function"==typeof r?r.call(this,e,n):e[r]},n[o].vuex=!0})),n})),y=M((function(t,e){var n={};return w(e).forEach((function(e){var o=e.key,r=e.val;n[o]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=this.$store.commit;if(t){var i=$(this.$store,"mapMutations",t);if(!i)return;o=i.context.commit}return"function"==typeof r?r.apply(this,[o].concat(e)):o.apply(this.$store,[r].concat(e))}})),n})),_=M((function(t,e){var n={};return w(e).forEach((function(e){var o=e.key,r=e.val;r=t+r,n[o]=function(){if(!t||$(this.$store,"mapGetters",t))return this.$store.getters[r]},n[o].vuex=!0})),n})),b=M((function(t,e){var n={};return w(e).forEach((function(e){var o=e.key,r=e.val;n[o]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=this.$store.dispatch;if(t){var i=$(this.$store,"mapActions",t);if(!i)return;o=i.context.dispatch}return"function"==typeof r?r.apply(this,[o].concat(e)):o.apply(this.$store,[r].concat(e))}})),n}));function w(t){return function(t){return Array.isArray(t)||o(t)}(t)?Array.isArray(t)?t.map((function(t){return{key:t,val:t}})):Object.keys(t).map((function(e){return{key:e,val:t[e]}})):[]}function M(t){return function(e,n){return"string"!=typeof e?(n=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,n)}}function $(t,e,n){return t._modulesNamespaceMap[n]}function C(t,e,n){var o=n?t.groupCollapsed:t.group;try{o.call(t,e)}catch(n){t.log(e)}}function E(t){try{t.groupEnd()}catch(e){t.log("â€”â€” log end â€”â€”")}}function O(){var t=new Date;return" @ "+j(t.getHours(),2)+":"+j(t.getMinutes(),2)+":"+j(t.getSeconds(),2)+"."+j(t.getMilliseconds(),3)}function j(t,e){return n="0",o=e-t.toString().length,new Array(o+1).join(n)+t;var n,o}return{Store:s,install:v,version:"3.6.2",mapState:g,mapMutations:y,mapGetters:_,mapActions:b,createNamespacedHelpers:function(t){return{mapState:g.bind(null,t),mapGetters:_.bind(null,t),mapMutations:y.bind(null,t),mapActions:b.bind(null,t)}},createLogger:function(t){void 0===t&&(t={});var n=t.collapsed;void 0===n&&(n=!0);var o=t.filter;void 0===o&&(o=function(t,e,n){return!0});var r=t.transformer;void 0===r&&(r=function(t){return t});var i=t.mutationTransformer;void 0===i&&(i=function(t){return t});var c=t.actionFilter;void 0===c&&(c=function(t,e){return!0});var a=t.actionTransformer;void 0===a&&(a=function(t){return t});var s=t.logMutations;void 0===s&&(s=!0);var u=t.logActions;void 0===u&&(u=!0);var f=t.logger;return void 0===f&&(f=console),function(t){var l=e(t.state);void 0!==f&&(s&&t.subscribe((function(t,c){var a=e(c);if(o(t,l,a)){var s=O(),u=i(t),h="mutation "+t.type+s;C(f,h,n),f.log("%c prev state","color: #9E9E9E; font-weight: bold",r(l)),f.log("%c mutation","color: #03A9F4; font-weight: bold",u),f.log("%c next state","color: #4CAF50; font-weight: bold",r(a)),E(f)}l=a})),u&&t.subscribeAction((function(t,e){if(c(t,e)){var o=O(),r=a(t),i="action "+t.type+o;C(f,i,n),f.log("%c action","color: #03A9F4; font-weight: bold",r),E(f)}})))}}}}));
import Vuex from '../dist/vuex.common.js'

const {
  Store,
  install,
  version,
  mapState,
  mapMutations,
  mapGetters,
  mapActions,
  createNamespacedHelpers,
  createLogger
} = Vuex

export {
  Vuex as default,
  Store,
  install,
  version,
  mapState,
  mapMutations,
  mapGetters,
  mapActions,
  createNamespacedHelpers,
  createLogger
}
The MIT License (MIT)

Copyright (c) 2015-present Evan You

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "vuex",
  "version": "3.6.2",
  "description": "state management for Vue.js",
  "main": "dist/vuex.common.js",
  "exports": {
    ".": {
      "module": "./dist/vuex.esm.js",
      "require": "./dist/vuex.common.js",
      "import": "./dist/vuex.mjs"
    },
    "./": "./"
  },
  "module": "dist/vuex.esm.js",
  "unpkg": "dist/vuex.js",
  "jsdelivr": "dist/vuex.js",
  "typings": "types/index.d.ts",
  "sideEffects": false,
  "files": [
    "dist",
    "types/index.d.ts",
    "types/helpers.d.ts",
    "types/logger.d.ts",
    "types/vue.d.ts"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/vuejs/vuex.git"
  },
  "author": "Evan You",
  "license": "MIT",
  "homepage": "https://github.com/vuejs/vuex#readme",
  "peerDependencies": {
    "vue": "^2.0.0"
  },
  "devDependencies": {
    "@babel/core": "^7.12.10",
    "@babel/preset-env": "^7.12.11",
    "@rollup/plugin-buble": "^0.21.3",
    "@rollup/plugin-commonjs": "^11.1.0",
    "@rollup/plugin-node-resolve": "^7.1.3",
    "@rollup/plugin-replace": "^2.3.2",
    "@types/node": "^13.13.5",
    "@vuepress/theme-vue": "^1.8.0",
    "babel-jest": "^26.6.3",
    "babel-loader": "^8.2.2",
    "brotli": "^1.3.2",
    "chalk": "^4.0.0",
    "conventional-changelog-cli": "^2.1.1",
    "cross-env": "^5.2.0",
    "css-loader": "^2.1.0",
    "enquirer": "^2.3.5",
    "eslint": "^6.8.0",
    "eslint-plugin-vue-libs": "^4.0.0",
    "execa": "^5.0.0",
    "express": "^4.17.1",
    "jest": "^26.6.3",
    "puppeteer": "^4.0.0",
    "regenerator-runtime": "^0.13.5",
    "rollup": "^2.38.0",
    "rollup-plugin-terser": "^5.3.0",
    "semver": "^7.3.2",
    "start-server-and-test": "^1.11.7",
    "todomvc-app-css": "^2.3.0",
    "typescript": "^3.8.3",
    "vue": "2.5.22",
    "vue-loader": "15.2.1",
    "vue-server-renderer": "2.5.22",
    "vue-template-compiler": "2.5.22",
    "vuepress": "^1.8.0",
    "webpack": "^4.43.0",
    "webpack-dev-middleware": "^3.7.2",
    "webpack-hot-middleware": "^2.25.0"
  }
}'use strict'

module.exports = function whichModule (exported) {
  for (var i = 0, files = Object.keys(require.cache), mod; i < files.length; i++) {
    mod = require.cache[files[i]]
    if (mod.exports === exported) return mod
  }
  return null
}
Copyright (c) 2016, Contributors

Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
{
  "name": "which-module",
  "version": "2.0.0",
  "description": "Find the module object for something that was require()d",
  "main": "index.js",
  "files": [
    "index.js"
  ],
  "repository": {
    "type": "git",
    "url": "git+https://github.com/nexdrew/which-module.git"
  },
  "author": "nexdrew",
  "license": "ISC",
  "homepage": "https://github.com/nexdrew/which-module#readme",
  "devDependencies": {
    "ava": "^0.19.1",
    "coveralls": "^2.13.1",
    "nyc": "^10.3.0",
    "standard": "^10.0.2",
    "standard-version": "^4.0.0"
  }
}#!/usr/bin/env node
var which = require("../")
if (process.argv.length < 3)
  usage()

function usage () {
  console.error('usage: which [-as] program ...')
  process.exit(1)
}

var all = false
var silent = false
var dashdash = false
var args = process.argv.slice(2).filter(function (arg) {
  if (dashdash || !/^-/.test(arg))
    return true

  if (arg === '--') {
    dashdash = true
    return false
  }

  var flags = arg.substr(1).split('')
  for (var f = 0; f < flags.length; f++) {
    var flag = flags[f]
    switch (flag) {
      case 's':
        silent = true
        break
      case 'a':
        all = true
        break
      default:
        console.error('which: illegal option -- ' + flag)
        usage()
    }
  }
  return false
})

process.exit(args.reduce(function (pv, current) {
  try {
    var f = which.sync(current, { all: all })
    if (all)
      f = f.join('\n')
    if (!silent)
      console.log(f)
    return pv;
  } catch (e) {
    return 1;
  }
}, 0))
The ISC License

Copyright (c) Isaac Z. Schlueter and Contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
  "name": "which",
  "description": "Like which(1) unix command. Find the first instance of an executable in the PATH.",
  "version": "1.3.1",
  "repository": {
    "type": "git",
    "url": "git://github.com/isaacs/node-which.git"
  },
  "main": "which.js",
  "bin": "./bin/which",
  "license": "ISC",
  "dependencies": {
    "isexe": "^2.0.0"
  },
  "devDependencies": {
    "mkdirp": "^0.5.0",
    "rimraf": "^2.6.2",
    "tap": "^12.0.1"
  },
  "files": [
    "which.js",
    "bin/which"
  ]
}module.exports = which
which.sync = whichSync

var isWindows = process.platform === 'win32' ||
    process.env.OSTYPE === 'cygwin' ||
    process.env.OSTYPE === 'msys'

var path = require('path')
var COLON = isWindows ? ';' : ':'
var isexe = require('isexe')

function getNotFoundError (cmd) {
  var er = new Error('not found: ' + cmd)
  er.code = 'ENOENT'

  return er
}

function getPathInfo (cmd, opt) {
  var colon = opt.colon || COLON
  var pathEnv = opt.path || process.env.PATH || ''
  var pathExt = ['']

  pathEnv = pathEnv.split(colon)

  var pathExtExe = ''
  if (isWindows) {
    pathEnv.unshift(process.cwd())
    pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM')
    pathExt = pathExtExe.split(colon)


    // Always test the cmd itself first.  isexe will check to make sure
    // it's found in the pathExt set.
    if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
      pathExt.unshift('')
  }

  // If it has a slash, then we don't bother searching the pathenv.
  // just check the file itself, and that's it.
  if (cmd.match(/\//) || isWindows && cmd.match(/\\/))
    pathEnv = ['']

  return {
    env: pathEnv,
    ext: pathExt,
    extExe: pathExtExe
  }
}

function which (cmd, opt, cb) {
  if (typeof opt === 'function') {
    cb = opt
    opt = {}
  }

  var info = getPathInfo(cmd, opt)
  var pathEnv = info.env
  var pathExt = info.ext
  var pathExtExe = info.extExe
  var found = []

  ;(function F (i, l) {
    if (i === l) {
      if (opt.all && found.length)
        return cb(null, found)
      else
        return cb(getNotFoundError(cmd))
    }

    var pathPart = pathEnv[i]
    if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
      pathPart = pathPart.slice(1, -1)

    var p = path.join(pathPart, cmd)
    if (!pathPart && (/^\.[\\\/]/).test(cmd)) {
      p = cmd.slice(0, 2) + p
    }
    ;(function E (ii, ll) {
      if (ii === ll) return F(i + 1, l)
      var ext = pathExt[ii]
      isexe(p + ext, { pathExt: pathExtExe }, function (er, is) {
        if (!er && is) {
          if (opt.all)
            found.push(p + ext)
          else
            return cb(null, p + ext)
        }
        return E(ii + 1, ll)
      })
    })(0, pathExt.length)
  })(0, pathEnv.length)
}

function whichSync (cmd, opt) {
  opt = opt || {}

  var info = getPathInfo(cmd, opt)
  var pathEnv = info.env
  var pathExt = info.ext
  var pathExtExe = info.extExe
  var found = []

  for (var i = 0, l = pathEnv.length; i < l; i ++) {
    var pathPart = pathEnv[i]
    if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"')
      pathPart = pathPart.slice(1, -1)

    var p = path.join(pathPart, cmd)
    if (!pathPart && /^\.[\\\/]/.test(cmd)) {
      p = cmd.slice(0, 2) + p
    }
    for (var j = 0, ll = pathExt.length; j < ll; j ++) {
      var cur = p + pathExt[j]
      var is
      try {
        is = isexe.sync(cur, { pathExt: pathExtExe })
        if (is) {
          if (opt.all)
            found.push(cur)
          else
            return cur
        }
      } catch (ex) {}
    }
  }

  if (opt.all && found.length)
    return found

  if (opt.nothrow)
    return null

  throw getNotFoundError(cmd)
}
The ISC License

Copyright (c) Isaac Z. Schlueter and Contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "wrappy",
  "version": "1.0.2",
  "description": "Callback wrapping utility",
  "main": "wrappy.js",
  "files": [
    "wrappy.js"
  ],
  "directories": {
    "test": "test"
  },
  "dependencies": {},
  "devDependencies": {
    "tap": "^2.3.1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/npm/wrappy"
  },
  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)",
  "license": "ISC",
  "homepage": "https://github.com/npm/wrappy"
}// Returns a wrapper function that returns a wrapped callback
// The wrapper function should do some stuff, and return a
// presumably different callback function.
// This makes sure that own properties are retained, so that
// decorations and such are not lost along the way.
module.exports = wrappy
function wrappy (fn, cb) {
  if (fn && cb) return wrappy(fn)(cb)

  if (typeof fn !== 'function')
    throw new TypeError('need wrapper function')

  Object.keys(fn).forEach(function (k) {
    wrapper[k] = fn[k]
  })

  return wrapper

  function wrapper() {
    var args = new Array(arguments.length)
    for (var i = 0; i < args.length; i++) {
      args[i] = arguments[i]
    }
    var ret = fn.apply(this, args)
    var cb = args[args.length-1]
    if (typeof ret === 'function' && ret !== cb) {
      Object.keys(cb).forEach(function (k) {
        ret[k] = cb[k]
      })
    }
    return ret
  }
}
'use strict';

module.exports = function () {
  throw new Error(
    'ws does not work in the browser. Browser clients must use the native ' +
      'WebSocket object'
  );
};
'use strict';

const WebSocket = require('./lib/websocket');

WebSocket.createWebSocketStream = require('./lib/stream');
WebSocket.Server = require('./lib/websocket-server');
WebSocket.Receiver = require('./lib/receiver');
WebSocket.Sender = require('./lib/sender');

module.exports = WebSocket;
'use strict';

const { EMPTY_BUFFER } = require('./constants');

/**
 * Merges an array of buffers into a new buffer.
 *
 * @param {Buffer[]} list The array of buffers to concat
 * @param {Number} totalLength The total length of buffers in the list
 * @return {Buffer} The resulting buffer
 * @public
 */
function concat(list, totalLength) {
  if (list.length === 0) return EMPTY_BUFFER;
  if (list.length === 1) return list[0];

  const target = Buffer.allocUnsafe(totalLength);
  let offset = 0;

  for (let i = 0; i < list.length; i++) {
    const buf = list[i];
    target.set(buf, offset);
    offset += buf.length;
  }

  if (offset < totalLength) return target.slice(0, offset);

  return target;
}

/**
 * Masks a buffer using the given mask.
 *
 * @param {Buffer} source The buffer to mask
 * @param {Buffer} mask The mask to use
 * @param {Buffer} output The buffer where to store the result
 * @param {Number} offset The offset at which to start writing
 * @param {Number} length The number of bytes to mask.
 * @public
 */
function _mask(source, mask, output, offset, length) {
  for (let i = 0; i < length; i++) {
    output[offset + i] = source[i] ^ mask[i & 3];
  }
}

/**
 * Unmasks a buffer using the given mask.
 *
 * @param {Buffer} buffer The buffer to unmask
 * @param {Buffer} mask The mask to use
 * @public
 */
function _unmask(buffer, mask) {
  // Required until https://github.com/nodejs/node/issues/9006 is resolved.
  const length = buffer.length;
  for (let i = 0; i < length; i++) {
    buffer[i] ^= mask[i & 3];
  }
}

/**
 * Converts a buffer to an `ArrayBuffer`.
 *
 * @param {Buffer} buf The buffer to convert
 * @return {ArrayBuffer} Converted buffer
 * @public
 */
function toArrayBuffer(buf) {
  if (buf.byteLength === buf.buffer.byteLength) {
    return buf.buffer;
  }

  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
}

/**
 * Converts `data` to a `Buffer`.
 *
 * @param {*} data The data to convert
 * @return {Buffer} The buffer
 * @throws {TypeError}
 * @public
 */
function toBuffer(data) {
  toBuffer.readOnly = true;

  if (Buffer.isBuffer(data)) return data;

  let buf;

  if (data instanceof ArrayBuffer) {
    buf = Buffer.from(data);
  } else if (ArrayBuffer.isView(data)) {
    buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
  } else {
    buf = Buffer.from(data);
    toBuffer.readOnly = false;
  }

  return buf;
}

try {
  const bufferUtil = require('bufferutil');
  const bu = bufferUtil.BufferUtil || bufferUtil;

  module.exports = {
    concat,
    mask(source, mask, output, offset, length) {
      if (length < 48) _mask(source, mask, output, offset, length);
      else bu.mask(source, mask, output, offset, length);
    },
    toArrayBuffer,
    toBuffer,
    unmask(buffer, mask) {
      if (buffer.length < 32) _unmask(buffer, mask);
      else bu.unmask(buffer, mask);
    }
  };
} catch (e) /* istanbul ignore next */ {
  module.exports = {
    concat,
    mask: _mask,
    toArrayBuffer,
    toBuffer,
    unmask: _unmask
  };
}
'use strict';

module.exports = {
  BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'],
  GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',
  kStatusCode: Symbol('status-code'),
  kWebSocket: Symbol('websocket'),
  EMPTY_BUFFER: Buffer.alloc(0),
  NOOP: () => {}
};
'use strict';

/**
 * Class representing an event.
 *
 * @private
 */
class Event {
  /**
   * Create a new `Event`.
   *
   * @param {String} type The name of the event
   * @param {Object} target A reference to the target to which the event was
   *     dispatched
   */
  constructor(type, target) {
    this.target = target;
    this.type = type;
  }
}

/**
 * Class representing a message event.
 *
 * @extends Event
 * @private
 */
class MessageEvent extends Event {
  /**
   * Create a new `MessageEvent`.
   *
   * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data
   * @param {WebSocket} target A reference to the target to which the event was
   *     dispatched
   */
  constructor(data, target) {
    super('message', target);

    this.data = data;
  }
}

/**
 * Class representing a close event.
 *
 * @extends Event
 * @private
 */
class CloseEvent extends Event {
  /**
   * Create a new `CloseEvent`.
   *
   * @param {Number} code The status code explaining why the connection is being
   *     closed
   * @param {String} reason A human-readable string explaining why the
   *     connection is closing
   * @param {WebSocket} target A reference to the target to which the event was
   *     dispatched
   */
  constructor(code, reason, target) {
    super('close', target);

    this.wasClean = target._closeFrameReceived && target._closeFrameSent;
    this.reason = reason;
    this.code = code;
  }
}

/**
 * Class representing an open event.
 *
 * @extends Event
 * @private
 */
class OpenEvent extends Event {
  /**
   * Create a new `OpenEvent`.
   *
   * @param {WebSocket} target A reference to the target to which the event was
   *     dispatched
   */
  constructor(target) {
    super('open', target);
  }
}

/**
 * Class representing an error event.
 *
 * @extends Event
 * @private
 */
class ErrorEvent extends Event {
  /**
   * Create a new `ErrorEvent`.
   *
   * @param {Object} error The error that generated this event
   * @param {WebSocket} target A reference to the target to which the event was
   *     dispatched
   */
  constructor(error, target) {
    super('error', target);

    this.message = error.message;
    this.error = error;
  }
}

/**
 * This provides methods for emulating the `EventTarget` interface. It's not
 * meant to be used directly.
 *
 * @mixin
 */
const EventTarget = {
  /**
   * Register an event listener.
   *
   * @param {String} type A string representing the event type to listen for
   * @param {Function} listener The listener to add
   * @param {Object} [options] An options object specifies characteristics about
   *     the event listener
   * @param {Boolean} [options.once=false] A `Boolean`` indicating that the
   *     listener should be invoked at most once after being added. If `true`,
   *     the listener would be automatically removed when invoked.
   * @public
   */
  addEventListener(type, listener, options) {
    if (typeof listener !== 'function') return;

    function onMessage(data) {
      listener.call(this, new MessageEvent(data, this));
    }

    function onClose(code, message) {
      listener.call(this, new CloseEvent(code, message, this));
    }

    function onError(error) {
      listener.call(this, new ErrorEvent(error, this));
    }

    function onOpen() {
      listener.call(this, new OpenEvent(this));
    }

    const method = options && options.once ? 'once' : 'on';

    if (type === 'message') {
      onMessage._listener = listener;
      this[method](type, onMessage);
    } else if (type === 'close') {
      onClose._listener = listener;
      this[method](type, onClose);
    } else if (type === 'error') {
      onError._listener = listener;
      this[method](type, onError);
    } else if (type === 'open') {
      onOpen._listener = listener;
      this[method](type, onOpen);
    } else {
      this[method](type, listener);
    }
  },

  /**
   * Remove an event listener.
   *
   * @param {String} type A string representing the event type to remove
   * @param {Function} listener The listener to remove
   * @public
   */
  removeEventListener(type, listener) {
    const listeners = this.listeners(type);

    for (let i = 0; i < listeners.length; i++) {
      if (listeners[i] === listener || listeners[i]._listener === listener) {
        this.removeListener(type, listeners[i]);
      }
    }
  }
};

module.exports = EventTarget;
'use strict';

//
// Allowed token characters:
//
// '!', '#', '$', '%', '&', ''', '*', '+', '-',
// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'
//
// tokenChars[32] === 0 // ' '
// tokenChars[33] === 1 // '!'
// tokenChars[34] === 0 // '"'
// ...
//
// prettier-ignore
const tokenChars = [
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63
  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127
];

/**
 * Adds an offer to the map of extension offers or a parameter to the map of
 * parameters.
 *
 * @param {Object} dest The map of extension offers or parameters
 * @param {String} name The extension or parameter name
 * @param {(Object|Boolean|String)} elem The extension parameters or the
 *     parameter value
 * @private
 */
function push(dest, name, elem) {
  if (dest[name] === undefined) dest[name] = [elem];
  else dest[name].push(elem);
}

/**
 * Parses the `Sec-WebSocket-Extensions` header into an object.
 *
 * @param {String} header The field value of the header
 * @return {Object} The parsed object
 * @public
 */
function parse(header) {
  const offers = Object.create(null);

  if (header === undefined || header === '') return offers;

  let params = Object.create(null);
  let mustUnescape = false;
  let isEscaping = false;
  let inQuotes = false;
  let extensionName;
  let paramName;
  let start = -1;
  let end = -1;
  let i = 0;

  for (; i < header.length; i++) {
    const code = header.charCodeAt(i);

    if (extensionName === undefined) {
      if (end === -1 && tokenChars[code] === 1) {
        if (start === -1) start = i;
      } else if (code === 0x20 /* ' ' */ || code === 0x09 /* '\t' */) {
        if (end === -1 && start !== -1) end = i;
      } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {
        if (start === -1) {
          throw new SyntaxError(`Unexpected character at index ${i}`);
        }

        if (end === -1) end = i;
        const name = header.slice(start, end);
        if (code === 0x2c) {
          push(offers, name, params);
          params = Object.create(null);
        } else {
          extensionName = name;
        }

        start = end = -1;
      } else {
        throw new SyntaxError(`Unexpected character at index ${i}`);
      }
    } else if (paramName === undefined) {
      if (end === -1 && tokenChars[code] === 1) {
        if (start === -1) start = i;
      } else if (code === 0x20 || code === 0x09) {
        if (end === -1 && start !== -1) end = i;
      } else if (code === 0x3b || code === 0x2c) {
        if (start === -1) {
          throw new SyntaxError(`Unexpected character at index ${i}`);
        }

        if (end === -1) end = i;
        push(params, header.slice(start, end), true);
        if (code === 0x2c) {
          push(offers, extensionName, params);
          params = Object.create(null);
          extensionName = undefined;
        }

        start = end = -1;
      } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {
        paramName = header.slice(start, i);
        start = end = -1;
      } else {
        throw new SyntaxError(`Unexpected character at index ${i}`);
      }
    } else {
      //
      // The value of a quoted-string after unescaping must conform to the
      // token ABNF, so only token characters are valid.
      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1
      //
      if (isEscaping) {
        if (tokenChars[code] !== 1) {
          throw new SyntaxError(`Unexpected character at index ${i}`);
        }
        if (start === -1) start = i;
        else if (!mustUnescape) mustUnescape = true;
        isEscaping = false;
      } else if (inQuotes) {
        if (tokenChars[code] === 1) {
          if (start === -1) start = i;
        } else if (code === 0x22 /* '"' */ && start !== -1) {
          inQuotes = false;
          end = i;
        } else if (code === 0x5c /* '\' */) {
          isEscaping = true;
        } else {
          throw new SyntaxError(`Unexpected character at index ${i}`);
        }
      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {
        inQuotes = true;
      } else if (end === -1 && tokenChars[code] === 1) {
        if (start === -1) start = i;
      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {
        if (end === -1) end = i;
      } else if (code === 0x3b || code === 0x2c) {
        if (start === -1) {
          throw new SyntaxError(`Unexpected character at index ${i}`);
        }

        if (end === -1) end = i;
        let value = header.slice(start, end);
        if (mustUnescape) {
          value = value.replace(/\\/g, '');
          mustUnescape = false;
        }
        push(params, paramName, value);
        if (code === 0x2c) {
          push(offers, extensionName, params);
          params = Object.create(null);
          extensionName = undefined;
        }

        paramName = undefined;
        start = end = -1;
      } else {
        throw new SyntaxError(`Unexpected character at index ${i}`);
      }
    }
  }

  if (start === -1 || inQuotes) {
    throw new SyntaxError('Unexpected end of input');
  }

  if (end === -1) end = i;
  const token = header.slice(start, end);
  if (extensionName === undefined) {
    push(offers, token, params);
  } else {
    if (paramName === undefined) {
      push(params, token, true);
    } else if (mustUnescape) {
      push(params, paramName, token.replace(/\\/g, ''));
    } else {
      push(params, paramName, token);
    }
    push(offers, extensionName, params);
  }

  return offers;
}

/**
 * Builds the `Sec-WebSocket-Extensions` header field value.
 *
 * @param {Object} extensions The map of extensions and parameters to format
 * @return {String} A string representing the given object
 * @public
 */
function format(extensions) {
  return Object.keys(extensions)
    .map((extension) => {
      let configurations = extensions[extension];
      if (!Array.isArray(configurations)) configurations = [configurations];
      return configurations
        .map((params) => {
          return [extension]
            .concat(
              Object.keys(params).map((k) => {
                let values = params[k];
                if (!Array.isArray(values)) values = [values];
                return values
                  .map((v) => (v === true ? k : `${k}=${v}`))
                  .join('; ');
              })
            )
            .join('; ');
        })
        .join(', ');
    })
    .join(', ');
}

module.exports = { format, parse };
'use strict';

const kDone = Symbol('kDone');
const kRun = Symbol('kRun');

/**
 * A very simple job queue with adjustable concurrency. Adapted from
 * https://github.com/STRML/async-limiter
 */
class Limiter {
  /**
   * Creates a new `Limiter`.
   *
   * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed
   *     to run concurrently
   */
  constructor(concurrency) {
    this[kDone] = () => {
      this.pending--;
      this[kRun]();
    };
    this.concurrency = concurrency || Infinity;
    this.jobs = [];
    this.pending = 0;
  }

  /**
   * Adds a job to the queue.
   *
   * @param {Function} job The job to run
   * @public
   */
  add(job) {
    this.jobs.push(job);
    this[kRun]();
  }

  /**
   * Removes a job from the queue and runs it if possible.
   *
   * @private
   */
  [kRun]() {
    if (this.pending === this.concurrency) return;

    if (this.jobs.length) {
      const job = this.jobs.shift();

      this.pending++;
      job(this[kDone]);
    }
  }
}

module.exports = Limiter;
'use strict';

const zlib = require('zlib');

const bufferUtil = require('./buffer-util');
const Limiter = require('./limiter');
const { kStatusCode, NOOP } = require('./constants');

const TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);
const kPerMessageDeflate = Symbol('permessage-deflate');
const kTotalLength = Symbol('total-length');
const kCallback = Symbol('callback');
const kBuffers = Symbol('buffers');
const kError = Symbol('error');

//
// We limit zlib concurrency, which prevents severe memory fragmentation
// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913
// and https://github.com/websockets/ws/issues/1202
//
// Intentionally global; it's the global thread pool that's an issue.
//
let zlibLimiter;

/**
 * permessage-deflate implementation.
 */
class PerMessageDeflate {
  /**
   * Creates a PerMessageDeflate instance.
   *
   * @param {Object} [options] Configuration options
   * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept
   *     disabling of server context takeover
   * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/
   *     acknowledge disabling of client context takeover
   * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the
   *     use of a custom server window size
   * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support
   *     for, or request, a custom client window size
   * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on
   *     deflate
   * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on
   *     inflate
   * @param {Number} [options.threshold=1024] Size (in bytes) below which
   *     messages should not be compressed
   * @param {Number} [options.concurrencyLimit=10] The number of concurrent
   *     calls to zlib
   * @param {Boolean} [isServer=false] Create the instance in either server or
   *     client mode
   * @param {Number} [maxPayload=0] The maximum allowed message length
   */
  constructor(options, isServer, maxPayload) {
    this._maxPayload = maxPayload | 0;
    this._options = options || {};
    this._threshold =
      this._options.threshold !== undefined ? this._options.threshold : 1024;
    this._isServer = !!isServer;
    this._deflate = null;
    this._inflate = null;

    this.params = null;

    if (!zlibLimiter) {
      const concurrency =
        this._options.concurrencyLimit !== undefined
          ? this._options.concurrencyLimit
          : 10;
      zlibLimiter = new Limiter(concurrency);
    }
  }

  /**
   * @type {String}
   */
  static get extensionName() {
    return 'permessage-deflate';
  }

  /**
   * Create an extension negotiation offer.
   *
   * @return {Object} Extension parameters
   * @public
   */
  offer() {
    const params = {};

    if (this._options.serverNoContextTakeover) {
      params.server_no_context_takeover = true;
    }
    if (this._options.clientNoContextTakeover) {
      params.client_no_context_takeover = true;
    }
    if (this._options.serverMaxWindowBits) {
      params.server_max_window_bits = this._options.serverMaxWindowBits;
    }
    if (this._options.clientMaxWindowBits) {
      params.client_max_window_bits = this._options.clientMaxWindowBits;
    } else if (this._options.clientMaxWindowBits == null) {
      params.client_max_window_bits = true;
    }

    return params;
  }

  /**
   * Accept an extension negotiation offer/response.
   *
   * @param {Array} configurations The extension negotiation offers/reponse
   * @return {Object} Accepted configuration
   * @public
   */
  accept(configurations) {
    configurations = this.normalizeParams(configurations);

    this.params = this._isServer
      ? this.acceptAsServer(configurations)
      : this.acceptAsClient(configurations);

    return this.params;
  }

  /**
   * Releases all resources used by the extension.
   *
   * @public
   */
  cleanup() {
    if (this._inflate) {
      this._inflate.close();
      this._inflate = null;
    }

    if (this._deflate) {
      const callback = this._deflate[kCallback];

      this._deflate.close();
      this._deflate = null;

      if (callback) {
        callback(
          new Error(
            'The deflate stream was closed while data was being processed'
          )
        );
      }
    }
  }

  /**
   *  Accept an extension negotiation offer.
   *
   * @param {Array} offers The extension negotiation offers
   * @return {Object} Accepted configuration
   * @private
   */
  acceptAsServer(offers) {
    const opts = this._options;
    const accepted = offers.find((params) => {
      if (
        (opts.serverNoContextTakeover === false &&
          params.server_no_context_takeover) ||
        (params.server_max_window_bits &&
          (opts.serverMaxWindowBits === false ||
            (typeof opts.serverMaxWindowBits === 'number' &&
              opts.serverMaxWindowBits > params.server_max_window_bits))) ||
        (typeof opts.clientMaxWindowBits === 'number' &&
          !params.client_max_window_bits)
      ) {
        return false;
      }

      return true;
    });

    if (!accepted) {
      throw new Error('None of the extension offers can be accepted');
    }

    if (opts.serverNoContextTakeover) {
      accepted.server_no_context_takeover = true;
    }
    if (opts.clientNoContextTakeover) {
      accepted.client_no_context_takeover = true;
    }
    if (typeof opts.serverMaxWindowBits === 'number') {
      accepted.server_max_window_bits = opts.serverMaxWindowBits;
    }
    if (typeof opts.clientMaxWindowBits === 'number') {
      accepted.client_max_window_bits = opts.clientMaxWindowBits;
    } else if (
      accepted.client_max_window_bits === true ||
      opts.clientMaxWindowBits === false
    ) {
      delete accepted.client_max_window_bits;
    }

    return accepted;
  }

  /**
   * Accept the extension negotiation response.
   *
   * @param {Array} response The extension negotiation response
   * @return {Object} Accepted configuration
   * @private
   */
  acceptAsClient(response) {
    const params = response[0];

    if (
      this._options.clientNoContextTakeover === false &&
      params.client_no_context_takeover
    ) {
      throw new Error('Unexpected parameter "client_no_context_takeover"');
    }

    if (!params.client_max_window_bits) {
      if (typeof this._options.clientMaxWindowBits === 'number') {
        params.client_max_window_bits = this._options.clientMaxWindowBits;
      }
    } else if (
      this._options.clientMaxWindowBits === false ||
      (typeof this._options.clientMaxWindowBits === 'number' &&
        params.client_max_window_bits > this._options.clientMaxWindowBits)
    ) {
      throw new Error(
        'Unexpected or invalid parameter "client_max_window_bits"'
      );
    }

    return params;
  }

  /**
   * Normalize parameters.
   *
   * @param {Array} configurations The extension negotiation offers/reponse
   * @return {Array} The offers/response with normalized parameters
   * @private
   */
  normalizeParams(configurations) {
    configurations.forEach((params) => {
      Object.keys(params).forEach((key) => {
        let value = params[key];

        if (value.length > 1) {
          throw new Error(`Parameter "${key}" must have only a single value`);
        }

        value = value[0];

        if (key === 'client_max_window_bits') {
          if (value !== true) {
            const num = +value;
            if (!Number.isInteger(num) || num < 8 || num > 15) {
              throw new TypeError(
                `Invalid value for parameter "${key}": ${value}`
              );
            }
            value = num;
          } else if (!this._isServer) {
            throw new TypeError(
              `Invalid value for parameter "${key}": ${value}`
            );
          }
        } else if (key === 'server_max_window_bits') {
          const num = +value;
          if (!Number.isInteger(num) || num < 8 || num > 15) {
            throw new TypeError(
              `Invalid value for parameter "${key}": ${value}`
            );
          }
          value = num;
        } else if (
          key === 'client_no_context_takeover' ||
          key === 'server_no_context_takeover'
        ) {
          if (value !== true) {
            throw new TypeError(
              `Invalid value for parameter "${key}": ${value}`
            );
          }
        } else {
          throw new Error(`Unknown parameter "${key}"`);
        }

        params[key] = value;
      });
    });

    return configurations;
  }

  /**
   * Decompress data. Concurrency limited.
   *
   * @param {Buffer} data Compressed data
   * @param {Boolean} fin Specifies whether or not this is the last fragment
   * @param {Function} callback Callback
   * @public
   */
  decompress(data, fin, callback) {
    zlibLimiter.add((done) => {
      this._decompress(data, fin, (err, result) => {
        done();
        callback(err, result);
      });
    });
  }

  /**
   * Compress data. Concurrency limited.
   *
   * @param {Buffer} data Data to compress
   * @param {Boolean} fin Specifies whether or not this is the last fragment
   * @param {Function} callback Callback
   * @public
   */
  compress(data, fin, callback) {
    zlibLimiter.add((done) => {
      this._compress(data, fin, (err, result) => {
        done();
        callback(err, result);
      });
    });
  }

  /**
   * Decompress data.
   *
   * @param {Buffer} data Compressed data
   * @param {Boolean} fin Specifies whether or not this is the last fragment
   * @param {Function} callback Callback
   * @private
   */
  _decompress(data, fin, callback) {
    const endpoint = this._isServer ? 'client' : 'server';

    if (!this._inflate) {
      const key = `${endpoint}_max_window_bits`;
      const windowBits =
        typeof this.params[key] !== 'number'
          ? zlib.Z_DEFAULT_WINDOWBITS
          : this.params[key];

      this._inflate = zlib.createInflateRaw({
        ...this._options.zlibInflateOptions,
        windowBits
      });
      this._inflate[kPerMessageDeflate] = this;
      this._inflate[kTotalLength] = 0;
      this._inflate[kBuffers] = [];
      this._inflate.on('error', inflateOnError);
      this._inflate.on('data', inflateOnData);
    }

    this._inflate[kCallback] = callback;

    this._inflate.write(data);
    if (fin) this._inflate.write(TRAILER);

    this._inflate.flush(() => {
      const err = this._inflate[kError];

      if (err) {
        this._inflate.close();
        this._inflate = null;
        callback(err);
        return;
      }

      const data = bufferUtil.concat(
        this._inflate[kBuffers],
        this._inflate[kTotalLength]
      );

      if (this._inflate._readableState.endEmitted) {
        this._inflate.close();
        this._inflate = null;
      } else {
        this._inflate[kTotalLength] = 0;
        this._inflate[kBuffers] = [];

        if (fin && this.params[`${endpoint}_no_context_takeover`]) {
          this._inflate.reset();
        }
      }

      callback(null, data);
    });
  }

  /**
   * Compress data.
   *
   * @param {Buffer} data Data to compress
   * @param {Boolean} fin Specifies whether or not this is the last fragment
   * @param {Function} callback Callback
   * @private
   */
  _compress(data, fin, callback) {
    const endpoint = this._isServer ? 'server' : 'client';

    if (!this._deflate) {
      const key = `${endpoint}_max_window_bits`;
      const windowBits =
        typeof this.params[key] !== 'number'
          ? zlib.Z_DEFAULT_WINDOWBITS
          : this.params[key];

      this._deflate = zlib.createDeflateRaw({
        ...this._options.zlibDeflateOptions,
        windowBits
      });

      this._deflate[kTotalLength] = 0;
      this._deflate[kBuffers] = [];

      //
      // An `'error'` event is emitted, only on Node.js < 10.0.0, if the
      // `zlib.DeflateRaw` instance is closed while data is being processed.
      // This can happen if `PerMessageDeflate#cleanup()` is called at the wrong
      // time due to an abnormal WebSocket closure.
      //
      this._deflate.on('error', NOOP);
      this._deflate.on('data', deflateOnData);
    }

    this._deflate[kCallback] = callback;

    this._deflate.write(data);
    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {
      if (!this._deflate) {
        //
        // The deflate stream was closed while data was being processed.
        //
        return;
      }

      let data = bufferUtil.concat(
        this._deflate[kBuffers],
        this._deflate[kTotalLength]
      );

      if (fin) data = data.slice(0, data.length - 4);

      //
      // Ensure that the callback will not be called again in
      // `PerMessageDeflate#cleanup()`.
      //
      this._deflate[kCallback] = null;

      this._deflate[kTotalLength] = 0;
      this._deflate[kBuffers] = [];

      if (fin && this.params[`${endpoint}_no_context_takeover`]) {
        this._deflate.reset();
      }

      callback(null, data);
    });
  }
}

module.exports = PerMessageDeflate;

/**
 * The listener of the `zlib.DeflateRaw` stream `'data'` event.
 *
 * @param {Buffer} chunk A chunk of data
 * @private
 */
function deflateOnData(chunk) {
  this[kBuffers].push(chunk);
  this[kTotalLength] += chunk.length;
}

/**
 * The listener of the `zlib.InflateRaw` stream `'data'` event.
 *
 * @param {Buffer} chunk A chunk of data
 * @private
 */
function inflateOnData(chunk) {
  this[kTotalLength] += chunk.length;

  if (
    this[kPerMessageDeflate]._maxPayload < 1 ||
    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload
  ) {
    this[kBuffers].push(chunk);
    return;
  }

  this[kError] = new RangeError('Max payload size exceeded');
  this[kError][kStatusCode] = 1009;
  this.removeListener('data', inflateOnData);
  this.reset();
}

/**
 * The listener of the `zlib.InflateRaw` stream `'error'` event.
 *
 * @param {Error} err The emitted error
 * @private
 */
function inflateOnError(err) {
  //
  // There is no need to call `Zlib#close()` as the handle is automatically
  // closed when an error is emitted.
  //
  this[kPerMessageDeflate]._inflate = null;
  err[kStatusCode] = 1007;
  this[kCallback](err);
}
'use strict';

const { Writable } = require('stream');

const PerMessageDeflate = require('./permessage-deflate');
const {
  BINARY_TYPES,
  EMPTY_BUFFER,
  kStatusCode,
  kWebSocket
} = require('./constants');
const { concat, toArrayBuffer, unmask } = require('./buffer-util');
const { isValidStatusCode, isValidUTF8 } = require('./validation');

const GET_INFO = 0;
const GET_PAYLOAD_LENGTH_16 = 1;
const GET_PAYLOAD_LENGTH_64 = 2;
const GET_MASK = 3;
const GET_DATA = 4;
const INFLATING = 5;

/**
 * HyBi Receiver implementation.
 *
 * @extends stream.Writable
 */
class Receiver extends Writable {
  /**
   * Creates a Receiver instance.
   *
   * @param {String} [binaryType=nodebuffer] The type for binary data
   * @param {Object} [extensions] An object containing the negotiated extensions
   * @param {Boolean} [isServer=false] Specifies whether to operate in client or
   *     server mode
   * @param {Number} [maxPayload=0] The maximum allowed message length
   */
  constructor(binaryType, extensions, isServer, maxPayload) {
    super();

    this._binaryType = binaryType || BINARY_TYPES[0];
    this[kWebSocket] = undefined;
    this._extensions = extensions || {};
    this._isServer = !!isServer;
    this._maxPayload = maxPayload | 0;

    this._bufferedBytes = 0;
    this._buffers = [];

    this._compressed = false;
    this._payloadLength = 0;
    this._mask = undefined;
    this._fragmented = 0;
    this._masked = false;
    this._fin = false;
    this._opcode = 0;

    this._totalPayloadLength = 0;
    this._messageLength = 0;
    this._fragments = [];

    this._state = GET_INFO;
    this._loop = false;
  }

  /**
   * Implements `Writable.prototype._write()`.
   *
   * @param {Buffer} chunk The chunk of data to write
   * @param {String} encoding The character encoding of `chunk`
   * @param {Function} cb Callback
   * @private
   */
  _write(chunk, encoding, cb) {
    if (this._opcode === 0x08 && this._state == GET_INFO) return cb();

    this._bufferedBytes += chunk.length;
    this._buffers.push(chunk);
    this.startLoop(cb);
  }

  /**
   * Consumes `n` bytes from the buffered data.
   *
   * @param {Number} n The number of bytes to consume
   * @return {Buffer} The consumed bytes
   * @private
   */
  consume(n) {
    this._bufferedBytes -= n;

    if (n === this._buffers[0].length) return this._buffers.shift();

    if (n < this._buffers[0].length) {
      const buf = this._buffers[0];
      this._buffers[0] = buf.slice(n);
      return buf.slice(0, n);
    }

    const dst = Buffer.allocUnsafe(n);

    do {
      const buf = this._buffers[0];
      const offset = dst.length - n;

      if (n >= buf.length) {
        dst.set(this._buffers.shift(), offset);
      } else {
        dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);
        this._buffers[0] = buf.slice(n);
      }

      n -= buf.length;
    } while (n > 0);

    return dst;
  }

  /**
   * Starts the parsing loop.
   *
   * @param {Function} cb Callback
   * @private
   */
  startLoop(cb) {
    let err;
    this._loop = true;

    do {
      switch (this._state) {
        case GET_INFO:
          err = this.getInfo();
          break;
        case GET_PAYLOAD_LENGTH_16:
          err = this.getPayloadLength16();
          break;
        case GET_PAYLOAD_LENGTH_64:
          err = this.getPayloadLength64();
          break;
        case GET_MASK:
          this.getMask();
          break;
        case GET_DATA:
          err = this.getData(cb);
          break;
        default:
          // `INFLATING`
          this._loop = false;
          return;
      }
    } while (this._loop);

    cb(err);
  }

  /**
   * Reads the first two bytes of a frame.
   *
   * @return {(RangeError|undefined)} A possible error
   * @private
   */
  getInfo() {
    if (this._bufferedBytes < 2) {
      this._loop = false;
      return;
    }

    const buf = this.consume(2);

    if ((buf[0] & 0x30) !== 0x00) {
      this._loop = false;
      return error(RangeError, 'RSV2 and RSV3 must be clear', true, 1002);
    }

    const compressed = (buf[0] & 0x40) === 0x40;

    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {
      this._loop = false;
      return error(RangeError, 'RSV1 must be clear', true, 1002);
    }

    this._fin = (buf[0] & 0x80) === 0x80;
    this._opcode = buf[0] & 0x0f;
    this._payloadLength = buf[1] & 0x7f;

    if (this._opcode === 0x00) {
      if (compressed) {
        this._loop = false;
        return error(RangeError, 'RSV1 must be clear', true, 1002);
      }

      if (!this._fragmented) {
        this._loop = false;
        return error(RangeError, 'invalid opcode 0', true, 1002);
      }

      this._opcode = this._fragmented;
    } else if (this._opcode === 0x01 || this._opcode === 0x02) {
      if (this._fragmented) {
        this._loop = false;
        return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
      }

      this._compressed = compressed;
    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {
      if (!this._fin) {
        this._loop = false;
        return error(RangeError, 'FIN must be set', true, 1002);
      }

      if (compressed) {
        this._loop = false;
        return error(RangeError, 'RSV1 must be clear', true, 1002);
      }

      if (this._payloadLength > 0x7d) {
        this._loop = false;
        return error(
          RangeError,
          `invalid payload length ${this._payloadLength}`,
          true,
          1002
        );
      }
    } else {
      this._loop = false;
      return error(RangeError, `invalid opcode ${this._opcode}`, true, 1002);
    }

    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;
    this._masked = (buf[1] & 0x80) === 0x80;

    if (this._isServer) {
      if (!this._masked) {
        this._loop = false;
        return error(RangeError, 'MASK must be set', true, 1002);
      }
    } else if (this._masked) {
      this._loop = false;
      return error(RangeError, 'MASK must be clear', true, 1002);
    }

    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;
    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;
    else return this.haveLength();
  }

  /**
   * Gets extended payload length (7+16).
   *
   * @return {(RangeError|undefined)} A possible error
   * @private
   */
  getPayloadLength16() {
    if (this._bufferedBytes < 2) {
      this._loop = false;
      return;
    }

    this._payloadLength = this.consume(2).readUInt16BE(0);
    return this.haveLength();
  }

  /**
   * Gets extended payload length (7+64).
   *
   * @return {(RangeError|undefined)} A possible error
   * @private
   */
  getPayloadLength64() {
    if (this._bufferedBytes < 8) {
      this._loop = false;
      return;
    }

    const buf = this.consume(8);
    const num = buf.readUInt32BE(0);

    //
    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned
    // if payload length is greater than this number.
    //
    if (num > Math.pow(2, 53 - 32) - 1) {
      this._loop = false;
      return error(
        RangeError,
        'Unsupported WebSocket frame: payload length > 2^53 - 1',
        false,
        1009
      );
    }

    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);
    return this.haveLength();
  }

  /**
   * Payload length has been read.
   *
   * @return {(RangeError|undefined)} A possible error
   * @private
   */
  haveLength() {
    if (this._payloadLength && this._opcode < 0x08) {
      this._totalPayloadLength += this._payloadLength;
      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {
        this._loop = false;
        return error(RangeError, 'Max payload size exceeded', false, 1009);
      }
    }

    if (this._masked) this._state = GET_MASK;
    else this._state = GET_DATA;
  }

  /**
   * Reads mask bytes.
   *
   * @private
   */
  getMask() {
    if (this._bufferedBytes < 4) {
      this._loop = false;
      return;
    }

    this._mask = this.consume(4);
    this._state = GET_DATA;
  }

  /**
   * Reads data bytes.
   *
   * @param {Function} cb Callback
   * @return {(Error|RangeError|undefined)} A possible error
   * @private
   */
  getData(cb) {
    let data = EMPTY_BUFFER;

    if (this._payloadLength) {
      if (this._bufferedBytes < this._payloadLength) {
        this._loop = false;
        return;
      }

      data = this.consume(this._payloadLength);
      if (this._masked) unmask(data, this._mask);
    }

    if (this._opcode > 0x07) return this.controlMessage(data);

    if (this._compressed) {
      this._state = INFLATING;
      this.decompress(data, cb);
      return;
    }

    if (data.length) {
      //
      // This message is not compressed so its lenght is the sum of the payload
      // length of all fragments.
      //
      this._messageLength = this._totalPayloadLength;
      this._fragments.push(data);
    }

    return this.dataMessage();
  }

  /**
   * Decompresses data.
   *
   * @param {Buffer} data Compressed data
   * @param {Function} cb Callback
   * @private
   */
  decompress(data, cb) {
    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];

    perMessageDeflate.decompress(data, this._fin, (err, buf) => {
      if (err) return cb(err);

      if (buf.length) {
        this._messageLength += buf.length;
        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {
          return cb(
            error(RangeError, 'Max payload size exceeded', false, 1009)
          );
        }

        this._fragments.push(buf);
      }

      const er = this.dataMessage();
      if (er) return cb(er);

      this.startLoop(cb);
    });
  }

  /**
   * Handles a data message.
   *
   * @return {(Error|undefined)} A possible error
   * @private
   */
  dataMessage() {
    if (this._fin) {
      const messageLength = this._messageLength;
      const fragments = this._fragments;

      this._totalPayloadLength = 0;
      this._messageLength = 0;
      this._fragmented = 0;
      this._fragments = [];

      if (this._opcode === 2) {
        let data;

        if (this._binaryType === 'nodebuffer') {
          data = concat(fragments, messageLength);
        } else if (this._binaryType === 'arraybuffer') {
          data = toArrayBuffer(concat(fragments, messageLength));
        } else {
          data = fragments;
        }

        this.emit('message', data);
      } else {
        const buf = concat(fragments, messageLength);

        if (!isValidUTF8(buf)) {
          this._loop = false;
          return error(Error, 'invalid UTF-8 sequence', true, 1007);
        }

        this.emit('message', buf.toString());
      }
    }

    this._state = GET_INFO;
  }

  /**
   * Handles a control message.
   *
   * @param {Buffer} data Data to handle
   * @return {(Error|RangeError|undefined)} A possible error
   * @private
   */
  controlMessage(data) {
    if (this._opcode === 0x08) {
      this._loop = false;

      if (data.length === 0) {
        this.emit('conclude', 1005, '');
        this.end();
      } else if (data.length === 1) {
        return error(RangeError, 'invalid payload length 1', true, 1002);
      } else {
        const code = data.readUInt16BE(0);

        if (!isValidStatusCode(code)) {
          return error(RangeError, `invalid status code ${code}`, true, 1002);
        }

        const buf = data.slice(2);

        if (!isValidUTF8(buf)) {
          return error(Error, 'invalid UTF-8 sequence', true, 1007);
        }

        this.emit('conclude', code, buf.toString());
        this.end();
      }
    } else if (this._opcode === 0x09) {
      this.emit('ping', data);
    } else {
      this.emit('pong', data);
    }

    this._state = GET_INFO;
  }
}

module.exports = Receiver;

/**
 * Builds an error object.
 *
 * @param {(Error|RangeError)} ErrorCtor The error constructor
 * @param {String} message The error message
 * @param {Boolean} prefix Specifies whether or not to add a default prefix to
 *     `message`
 * @param {Number} statusCode The status code
 * @return {(Error|RangeError)} The error
 * @private
 */
function error(ErrorCtor, message, prefix, statusCode) {
  const err = new ErrorCtor(
    prefix ? `Invalid WebSocket frame: ${message}` : message
  );

  Error.captureStackTrace(err, error);
  err[kStatusCode] = statusCode;
  return err;
}
'use strict';

const { randomFillSync } = require('crypto');

const PerMessageDeflate = require('./permessage-deflate');
const { EMPTY_BUFFER } = require('./constants');
const { isValidStatusCode } = require('./validation');
const { mask: applyMask, toBuffer } = require('./buffer-util');

const mask = Buffer.alloc(4);

/**
 * HyBi Sender implementation.
 */
class Sender {
  /**
   * Creates a Sender instance.
   *
   * @param {net.Socket} socket The connection socket
   * @param {Object} [extensions] An object containing the negotiated extensions
   */
  constructor(socket, extensions) {
    this._extensions = extensions || {};
    this._socket = socket;

    this._firstFragment = true;
    this._compress = false;

    this._bufferedBytes = 0;
    this._deflating = false;
    this._queue = [];
  }

  /**
   * Frames a piece of data according to the HyBi WebSocket protocol.
   *
   * @param {Buffer} data The data to frame
   * @param {Object} options Options object
   * @param {Number} options.opcode The opcode
   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be
   *     modified
   * @param {Boolean} [options.fin=false] Specifies whether or not to set the
   *     FIN bit
   * @param {Boolean} [options.mask=false] Specifies whether or not to mask
   *     `data`
   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the
   *     RSV1 bit
   * @return {Buffer[]} The framed data as a list of `Buffer` instances
   * @public
   */
  static frame(data, options) {
    const merge = options.mask && options.readOnly;
    let offset = options.mask ? 6 : 2;
    let payloadLength = data.length;

    if (data.length >= 65536) {
      offset += 8;
      payloadLength = 127;
    } else if (data.length > 125) {
      offset += 2;
      payloadLength = 126;
    }

    const target = Buffer.allocUnsafe(merge ? data.length + offset : offset);

    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;
    if (options.rsv1) target[0] |= 0x40;

    target[1] = payloadLength;

    if (payloadLength === 126) {
      target.writeUInt16BE(data.length, 2);
    } else if (payloadLength === 127) {
      target.writeUInt32BE(0, 2);
      target.writeUInt32BE(data.length, 6);
    }

    if (!options.mask) return [target, data];

    randomFillSync(mask, 0, 4);

    target[1] |= 0x80;
    target[offset - 4] = mask[0];
    target[offset - 3] = mask[1];
    target[offset - 2] = mask[2];
    target[offset - 1] = mask[3];

    if (merge) {
      applyMask(data, mask, target, offset, data.length);
      return [target];
    }

    applyMask(data, mask, data, 0, data.length);
    return [target, data];
  }

  /**
   * Sends a close message to the other peer.
   *
   * @param {Number} [code] The status code component of the body
   * @param {String} [data] The message component of the body
   * @param {Boolean} [mask=false] Specifies whether or not to mask the message
   * @param {Function} [cb] Callback
   * @public
   */
  close(code, data, mask, cb) {
    let buf;

    if (code === undefined) {
      buf = EMPTY_BUFFER;
    } else if (typeof code !== 'number' || !isValidStatusCode(code)) {
      throw new TypeError('First argument must be a valid error code number');
    } else if (data === undefined || data === '') {
      buf = Buffer.allocUnsafe(2);
      buf.writeUInt16BE(code, 0);
    } else {
      const length = Buffer.byteLength(data);

      if (length > 123) {
        throw new RangeError('The message must not be greater than 123 bytes');
      }

      buf = Buffer.allocUnsafe(2 + length);
      buf.writeUInt16BE(code, 0);
      buf.write(data, 2);
    }

    if (this._deflating) {
      this.enqueue([this.doClose, buf, mask, cb]);
    } else {
      this.doClose(buf, mask, cb);
    }
  }

  /**
   * Frames and sends a close message.
   *
   * @param {Buffer} data The message to send
   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
   * @param {Function} [cb] Callback
   * @private
   */
  doClose(data, mask, cb) {
    this.sendFrame(
      Sender.frame(data, {
        fin: true,
        rsv1: false,
        opcode: 0x08,
        mask,
        readOnly: false
      }),
      cb
    );
  }

  /**
   * Sends a ping message to the other peer.
   *
   * @param {*} data The message to send
   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
   * @param {Function} [cb] Callback
   * @public
   */
  ping(data, mask, cb) {
    const buf = toBuffer(data);

    if (buf.length > 125) {
      throw new RangeError('The data size must not be greater than 125 bytes');
    }

    if (this._deflating) {
      this.enqueue([this.doPing, buf, mask, toBuffer.readOnly, cb]);
    } else {
      this.doPing(buf, mask, toBuffer.readOnly, cb);
    }
  }

  /**
   * Frames and sends a ping message.
   *
   * @param {Buffer} data The message to send
   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
   * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified
   * @param {Function} [cb] Callback
   * @private
   */
  doPing(data, mask, readOnly, cb) {
    this.sendFrame(
      Sender.frame(data, {
        fin: true,
        rsv1: false,
        opcode: 0x09,
        mask,
        readOnly
      }),
      cb
    );
  }

  /**
   * Sends a pong message to the other peer.
   *
   * @param {*} data The message to send
   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
   * @param {Function} [cb] Callback
   * @public
   */
  pong(data, mask, cb) {
    const buf = toBuffer(data);

    if (buf.length > 125) {
      throw new RangeError('The data size must not be greater than 125 bytes');
    }

    if (this._deflating) {
      this.enqueue([this.doPong, buf, mask, toBuffer.readOnly, cb]);
    } else {
      this.doPong(buf, mask, toBuffer.readOnly, cb);
    }
  }

  /**
   * Frames and sends a pong message.
   *
   * @param {Buffer} data The message to send
   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`
   * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified
   * @param {Function} [cb] Callback
   * @private
   */
  doPong(data, mask, readOnly, cb) {
    this.sendFrame(
      Sender.frame(data, {
        fin: true,
        rsv1: false,
        opcode: 0x0a,
        mask,
        readOnly
      }),
      cb
    );
  }

  /**
   * Sends a data message to the other peer.
   *
   * @param {*} data The message to send
   * @param {Object} options Options object
   * @param {Boolean} [options.compress=false] Specifies whether or not to
   *     compress `data`
   * @param {Boolean} [options.binary=false] Specifies whether `data` is binary
   *     or text
   * @param {Boolean} [options.fin=false] Specifies whether the fragment is the
   *     last one
   * @param {Boolean} [options.mask=false] Specifies whether or not to mask
   *     `data`
   * @param {Function} [cb] Callback
   * @public
   */
  send(data, options, cb) {
    const buf = toBuffer(data);
    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];
    let opcode = options.binary ? 2 : 1;
    let rsv1 = options.compress;

    if (this._firstFragment) {
      this._firstFragment = false;
      if (rsv1 && perMessageDeflate) {
        rsv1 = buf.length >= perMessageDeflate._threshold;
      }
      this._compress = rsv1;
    } else {
      rsv1 = false;
      opcode = 0;
    }

    if (options.fin) this._firstFragment = true;

    if (perMessageDeflate) {
      const opts = {
        fin: options.fin,
        rsv1,
        opcode,
        mask: options.mask,
        readOnly: toBuffer.readOnly
      };

      if (this._deflating) {
        this.enqueue([this.dispatch, buf, this._compress, opts, cb]);
      } else {
        this.dispatch(buf, this._compress, opts, cb);
      }
    } else {
      this.sendFrame(
        Sender.frame(buf, {
          fin: options.fin,
          rsv1: false,
          opcode,
          mask: options.mask,
          readOnly: toBuffer.readOnly
        }),
        cb
      );
    }
  }

  /**
   * Dispatches a data message.
   *
   * @param {Buffer} data The message to send
   * @param {Boolean} [compress=false] Specifies whether or not to compress
   *     `data`
   * @param {Object} options Options object
   * @param {Number} options.opcode The opcode
   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be
   *     modified
   * @param {Boolean} [options.fin=false] Specifies whether or not to set the
   *     FIN bit
   * @param {Boolean} [options.mask=false] Specifies whether or not to mask
   *     `data`
   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the
   *     RSV1 bit
   * @param {Function} [cb] Callback
   * @private
   */
  dispatch(data, compress, options, cb) {
    if (!compress) {
      this.sendFrame(Sender.frame(data, options), cb);
      return;
    }

    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];

    this._bufferedBytes += data.length;
    this._deflating = true;
    perMessageDeflate.compress(data, options.fin, (_, buf) => {
      if (this._socket.destroyed) {
        const err = new Error(
          'The socket was closed while data was being compressed'
        );

        if (typeof cb === 'function') cb(err);

        for (let i = 0; i < this._queue.length; i++) {
          const callback = this._queue[i][4];

          if (typeof callback === 'function') callback(err);
        }

        return;
      }

      this._bufferedBytes -= data.length;
      this._deflating = false;
      options.readOnly = false;
      this.sendFrame(Sender.frame(buf, options), cb);
      this.dequeue();
    });
  }

  /**
   * Executes queued send operations.
   *
   * @private
   */
  dequeue() {
    while (!this._deflating && this._queue.length) {
      const params = this._queue.shift();

      this._bufferedBytes -= params[1].length;
      Reflect.apply(params[0], this, params.slice(1));
    }
  }

  /**
   * Enqueues a send operation.
   *
   * @param {Array} params Send operation parameters.
   * @private
   */
  enqueue(params) {
    this._bufferedBytes += params[1].length;
    this._queue.push(params);
  }

  /**
   * Sends a frame.
   *
   * @param {Buffer[]} list The frame to send
   * @param {Function} [cb] Callback
   * @private
   */
  sendFrame(list, cb) {
    if (list.length === 2) {
      this._socket.cork();
      this._socket.write(list[0]);
      this._socket.write(list[1], cb);
      this._socket.uncork();
    } else {
      this._socket.write(list[0], cb);
    }
  }
}

module.exports = Sender;
'use strict';

const { Duplex } = require('stream');

/**
 * Emits the `'close'` event on a stream.
 *
 * @param {stream.Duplex} The stream.
 * @private
 */
function emitClose(stream) {
  stream.emit('close');
}

/**
 * The listener of the `'end'` event.
 *
 * @private
 */
function duplexOnEnd() {
  if (!this.destroyed && this._writableState.finished) {
    this.destroy();
  }
}

/**
 * The listener of the `'error'` event.
 *
 * @param {Error} err The error
 * @private
 */
function duplexOnError(err) {
  this.removeListener('error', duplexOnError);
  this.destroy();
  if (this.listenerCount('error') === 0) {
    // Do not suppress the throwing behavior.
    this.emit('error', err);
  }
}

/**
 * Wraps a `WebSocket` in a duplex stream.
 *
 * @param {WebSocket} ws The `WebSocket` to wrap
 * @param {Object} [options] The options for the `Duplex` constructor
 * @return {stream.Duplex} The duplex stream
 * @public
 */
function createWebSocketStream(ws, options) {
  let resumeOnReceiverDrain = true;

  function receiverOnDrain() {
    if (resumeOnReceiverDrain) ws._socket.resume();
  }

  if (ws.readyState === ws.CONNECTING) {
    ws.once('open', function open() {
      ws._receiver.removeAllListeners('drain');
      ws._receiver.on('drain', receiverOnDrain);
    });
  } else {
    ws._receiver.removeAllListeners('drain');
    ws._receiver.on('drain', receiverOnDrain);
  }

  const duplex = new Duplex({
    ...options,
    autoDestroy: false,
    emitClose: false,
    objectMode: false,
    writableObjectMode: false
  });

  ws.on('message', function message(msg) {
    if (!duplex.push(msg)) {
      resumeOnReceiverDrain = false;
      ws._socket.pause();
    }
  });

  ws.once('error', function error(err) {
    if (duplex.destroyed) return;

    duplex.destroy(err);
  });

  ws.once('close', function close() {
    if (duplex.destroyed) return;

    duplex.push(null);
  });

  duplex._destroy = function (err, callback) {
    if (ws.readyState === ws.CLOSED) {
      callback(err);
      process.nextTick(emitClose, duplex);
      return;
    }

    let called = false;

    ws.once('error', function error(err) {
      called = true;
      callback(err);
    });

    ws.once('close', function close() {
      if (!called) callback(err);
      process.nextTick(emitClose, duplex);
    });
    ws.terminate();
  };

  duplex._final = function (callback) {
    if (ws.readyState === ws.CONNECTING) {
      ws.once('open', function open() {
        duplex._final(callback);
      });
      return;
    }

    // If the value of the `_socket` property is `null` it means that `ws` is a
    // client websocket and the handshake failed. In fact, when this happens, a
    // socket is never assigned to the websocket. Wait for the `'error'` event
    // that will be emitted by the websocket.
    if (ws._socket === null) return;

    if (ws._socket._writableState.finished) {
      callback();
      if (duplex._readableState.endEmitted) duplex.destroy();
    } else {
      ws._socket.once('finish', function finish() {
        // `duplex` is not destroyed here because the `'end'` event will be
        // emitted on `duplex` after this `'finish'` event. The EOF signaling
        // `null` chunk is, in fact, pushed when the websocket emits `'close'`.
        callback();
      });
      ws.close();
    }
  };

  duplex._read = function () {
    if (ws.readyState === ws.OPEN && !resumeOnReceiverDrain) {
      resumeOnReceiverDrain = true;
      if (!ws._receiver._writableState.needDrain) ws._socket.resume();
    }
  };

  duplex._write = function (chunk, encoding, callback) {
    if (ws.readyState === ws.CONNECTING) {
      ws.once('open', function open() {
        duplex._write(chunk, encoding, callback);
      });
      return;
    }

    ws.send(chunk, callback);
  };

  duplex.on('end', duplexOnEnd);
  duplex.on('error', duplexOnError);
  return duplex;
}

module.exports = createWebSocketStream;
'use strict';

/**
 * Checks if a status code is allowed in a close frame.
 *
 * @param {Number} code The status code
 * @return {Boolean} `true` if the status code is valid, else `false`
 * @public
 */
function isValidStatusCode(code) {
  return (
    (code >= 1000 &&
      code <= 1014 &&
      code !== 1004 &&
      code !== 1005 &&
      code !== 1006) ||
    (code >= 3000 && code <= 4999)
  );
}

/**
 * Checks if a given buffer contains only correct UTF-8.
 * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by
 * Markus Kuhn.
 *
 * @param {Buffer} buf The buffer to check
 * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`
 * @public
 */
function _isValidUTF8(buf) {
  const len = buf.length;
  let i = 0;

  while (i < len) {
    if ((buf[i] & 0x80) === 0) {
      // 0xxxxxxx
      i++;
    } else if ((buf[i] & 0xe0) === 0xc0) {
      // 110xxxxx 10xxxxxx
      if (
        i + 1 === len ||
        (buf[i + 1] & 0xc0) !== 0x80 ||
        (buf[i] & 0xfe) === 0xc0 // Overlong
      ) {
        return false;
      }

      i += 2;
    } else if ((buf[i] & 0xf0) === 0xe0) {
      // 1110xxxx 10xxxxxx 10xxxxxx
      if (
        i + 2 >= len ||
        (buf[i + 1] & 0xc0) !== 0x80 ||
        (buf[i + 2] & 0xc0) !== 0x80 ||
        (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong
        (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)
      ) {
        return false;
      }

      i += 3;
    } else if ((buf[i] & 0xf8) === 0xf0) {
      // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
      if (
        i + 3 >= len ||
        (buf[i + 1] & 0xc0) !== 0x80 ||
        (buf[i + 2] & 0xc0) !== 0x80 ||
        (buf[i + 3] & 0xc0) !== 0x80 ||
        (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong
        (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||
        buf[i] > 0xf4 // > U+10FFFF
      ) {
        return false;
      }

      i += 4;
    } else {
      return false;
    }
  }

  return true;
}

try {
  let isValidUTF8 = require('utf-8-validate');

  /* istanbul ignore if */
  if (typeof isValidUTF8 === 'object') {
    isValidUTF8 = isValidUTF8.Validation.isValidUTF8; // utf-8-validate@<3.0.0
  }

  module.exports = {
    isValidStatusCode,
    isValidUTF8(buf) {
      return buf.length < 150 ? _isValidUTF8(buf) : isValidUTF8(buf);
    }
  };
} catch (e) /* istanbul ignore next */ {
  module.exports = {
    isValidStatusCode,
    isValidUTF8: _isValidUTF8
  };
}
'use strict';

const EventEmitter = require('events');
const { createHash } = require('crypto');
const { createServer, STATUS_CODES } = require('http');

const PerMessageDeflate = require('./permessage-deflate');
const WebSocket = require('./websocket');
const { format, parse } = require('./extension');
const { GUID, kWebSocket } = require('./constants');

const keyRegex = /^[+/0-9A-Za-z]{22}==$/;

/**
 * Class representing a WebSocket server.
 *
 * @extends EventEmitter
 */
class WebSocketServer extends EventEmitter {
  /**
   * Create a `WebSocketServer` instance.
   *
   * @param {Object} options Configuration options
   * @param {Number} [options.backlog=511] The maximum length of the queue of
   *     pending connections
   * @param {Boolean} [options.clientTracking=true] Specifies whether or not to
   *     track clients
   * @param {Function} [options.handleProtocols] A hook to handle protocols
   * @param {String} [options.host] The hostname where to bind the server
   * @param {Number} [options.maxPayload=104857600] The maximum allowed message
   *     size
   * @param {Boolean} [options.noServer=false] Enable no server mode
   * @param {String} [options.path] Accept only connections matching this path
   * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable
   *     permessage-deflate
   * @param {Number} [options.port] The port where to bind the server
   * @param {http.Server} [options.server] A pre-created HTTP/S server to use
   * @param {Function} [options.verifyClient] A hook to reject connections
   * @param {Function} [callback] A listener for the `listening` event
   */
  constructor(options, callback) {
    super();

    options = {
      maxPayload: 100 * 1024 * 1024,
      perMessageDeflate: false,
      handleProtocols: null,
      clientTracking: true,
      verifyClient: null,
      noServer: false,
      backlog: null, // use default (511 as implemented in net.js)
      server: null,
      host: null,
      path: null,
      port: null,
      ...options
    };

    if (options.port == null && !options.server && !options.noServer) {
      throw new TypeError(
        'One of the "port", "server", or "noServer" options must be specified'
      );
    }

    if (options.port != null) {
      this._server = createServer((req, res) => {
        const body = STATUS_CODES[426];

        res.writeHead(426, {
          'Content-Length': body.length,
          'Content-Type': 'text/plain'
        });
        res.end(body);
      });
      this._server.listen(
        options.port,
        options.host,
        options.backlog,
        callback
      );
    } else if (options.server) {
      this._server = options.server;
    }

    if (this._server) {
      const emitConnection = this.emit.bind(this, 'connection');

      this._removeListeners = addListeners(this._server, {
        listening: this.emit.bind(this, 'listening'),
        error: this.emit.bind(this, 'error'),
        upgrade: (req, socket, head) => {
          this.handleUpgrade(req, socket, head, emitConnection);
        }
      });
    }

    if (options.perMessageDeflate === true) options.perMessageDeflate = {};
    if (options.clientTracking) this.clients = new Set();
    this.options = options;
  }

  /**
   * Returns the bound address, the address family name, and port of the server
   * as reported by the operating system if listening on an IP socket.
   * If the server is listening on a pipe or UNIX domain socket, the name is
   * returned as a string.
   *
   * @return {(Object|String|null)} The address of the server
   * @public
   */
  address() {
    if (this.options.noServer) {
      throw new Error('The server is operating in "noServer" mode');
    }

    if (!this._server) return null;
    return this._server.address();
  }

  /**
   * Close the server.
   *
   * @param {Function} [cb] Callback
   * @public
   */
  close(cb) {
    if (cb) this.once('close', cb);

    //
    // Terminate all associated clients.
    //
    if (this.clients) {
      for (const client of this.clients) client.terminate();
    }

    const server = this._server;

    if (server) {
      this._removeListeners();
      this._removeListeners = this._server = null;

      //
      // Close the http server if it was internally created.
      //
      if (this.options.port != null) {
        server.close(() => this.emit('close'));
        return;
      }
    }

    process.nextTick(emitClose, this);
  }

  /**
   * See if a given request should be handled by this server instance.
   *
   * @param {http.IncomingMessage} req Request object to inspect
   * @return {Boolean} `true` if the request is valid, else `false`
   * @public
   */
  shouldHandle(req) {
    if (this.options.path) {
      const index = req.url.indexOf('?');
      const pathname = index !== -1 ? req.url.slice(0, index) : req.url;

      if (pathname !== this.options.path) return false;
    }

    return true;
  }

  /**
   * Handle a HTTP Upgrade request.
   *
   * @param {http.IncomingMessage} req The request object
   * @param {net.Socket} socket The network socket between the server and client
   * @param {Buffer} head The first packet of the upgraded stream
   * @param {Function} cb Callback
   * @public
   */
  handleUpgrade(req, socket, head, cb) {
    socket.on('error', socketOnError);

    const key =
      req.headers['sec-websocket-key'] !== undefined
        ? req.headers['sec-websocket-key'].trim()
        : false;
    const version = +req.headers['sec-websocket-version'];
    const extensions = {};

    if (
      req.method !== 'GET' ||
      req.headers.upgrade.toLowerCase() !== 'websocket' ||
      !key ||
      !keyRegex.test(key) ||
      (version !== 8 && version !== 13) ||
      !this.shouldHandle(req)
    ) {
      return abortHandshake(socket, 400);
    }

    if (this.options.perMessageDeflate) {
      const perMessageDeflate = new PerMessageDeflate(
        this.options.perMessageDeflate,
        true,
        this.options.maxPayload
      );

      try {
        const offers = parse(req.headers['sec-websocket-extensions']);

        if (offers[PerMessageDeflate.extensionName]) {
          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);
          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;
        }
      } catch (err) {
        return abortHandshake(socket, 400);
      }
    }

    //
    // Optionally call external client verification handler.
    //
    if (this.options.verifyClient) {
      const info = {
        origin:
          req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],
        secure: !!(req.socket.authorized || req.socket.encrypted),
        req
      };

      if (this.options.verifyClient.length === 2) {
        this.options.verifyClient(info, (verified, code, message, headers) => {
          if (!verified) {
            return abortHandshake(socket, code || 401, message, headers);
          }

          this.completeUpgrade(key, extensions, req, socket, head, cb);
        });
        return;
      }

      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);
    }

    this.completeUpgrade(key, extensions, req, socket, head, cb);
  }

  /**
   * Upgrade the connection to WebSocket.
   *
   * @param {String} key The value of the `Sec-WebSocket-Key` header
   * @param {Object} extensions The accepted extensions
   * @param {http.IncomingMessage} req The request object
   * @param {net.Socket} socket The network socket between the server and client
   * @param {Buffer} head The first packet of the upgraded stream
   * @param {Function} cb Callback
   * @throws {Error} If called more than once with the same socket
   * @private
   */
  completeUpgrade(key, extensions, req, socket, head, cb) {
    //
    // Destroy the socket if the client has already sent a FIN packet.
    //
    if (!socket.readable || !socket.writable) return socket.destroy();

    if (socket[kWebSocket]) {
      throw new Error(
        'server.handleUpgrade() was called more than once with the same ' +
          'socket, possibly due to a misconfiguration'
      );
    }

    const digest = createHash('sha1')
      .update(key + GUID)
      .digest('base64');

    const headers = [
      'HTTP/1.1 101 Switching Protocols',
      'Upgrade: websocket',
      'Connection: Upgrade',
      `Sec-WebSocket-Accept: ${digest}`
    ];

    const ws = new WebSocket(null);
    let protocol = req.headers['sec-websocket-protocol'];

    if (protocol) {
      protocol = protocol.split(',').map(trim);

      //
      // Optionally call external protocol selection handler.
      //
      if (this.options.handleProtocols) {
        protocol = this.options.handleProtocols(protocol, req);
      } else {
        protocol = protocol[0];
      }

      if (protocol) {
        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);
        ws._protocol = protocol;
      }
    }

    if (extensions[PerMessageDeflate.extensionName]) {
      const params = extensions[PerMessageDeflate.extensionName].params;
      const value = format({
        [PerMessageDeflate.extensionName]: [params]
      });
      headers.push(`Sec-WebSocket-Extensions: ${value}`);
      ws._extensions = extensions;
    }

    //
    // Allow external modification/inspection of handshake headers.
    //
    this.emit('headers', headers, req);

    socket.write(headers.concat('\r\n').join('\r\n'));
    socket.removeListener('error', socketOnError);

    ws.setSocket(socket, head, this.options.maxPayload);

    if (this.clients) {
      this.clients.add(ws);
      ws.on('close', () => this.clients.delete(ws));
    }

    cb(ws, req);
  }
}

module.exports = WebSocketServer;

/**
 * Add event listeners on an `EventEmitter` using a map of <event, listener>
 * pairs.
 *
 * @param {EventEmitter} server The event emitter
 * @param {Object.<String, Function>} map The listeners to add
 * @return {Function} A function that will remove the added listeners when
 *     called
 * @private
 */
function addListeners(server, map) {
  for (const event of Object.keys(map)) server.on(event, map[event]);

  return function removeListeners() {
    for (const event of Object.keys(map)) {
      server.removeListener(event, map[event]);
    }
  };
}

/**
 * Emit a `'close'` event on an `EventEmitter`.
 *
 * @param {EventEmitter} server The event emitter
 * @private
 */
function emitClose(server) {
  server.emit('close');
}

/**
 * Handle premature socket errors.
 *
 * @private
 */
function socketOnError() {
  this.destroy();
}

/**
 * Close the connection when preconditions are not fulfilled.
 *
 * @param {net.Socket} socket The socket of the upgrade request
 * @param {Number} code The HTTP response status code
 * @param {String} [message] The HTTP response body
 * @param {Object} [headers] Additional HTTP response headers
 * @private
 */
function abortHandshake(socket, code, message, headers) {
  if (socket.writable) {
    message = message || STATUS_CODES[code];
    headers = {
      Connection: 'close',
      'Content-Type': 'text/html',
      'Content-Length': Buffer.byteLength(message),
      ...headers
    };

    socket.write(
      `HTTP/1.1 ${code} ${STATUS_CODES[code]}\r\n` +
        Object.keys(headers)
          .map((h) => `${h}: ${headers[h]}`)
          .join('\r\n') +
        '\r\n\r\n' +
        message
    );
  }

  socket.removeListener('error', socketOnError);
  socket.destroy();
}

/**
 * Remove whitespace characters from both ends of a string.
 *
 * @param {String} str The string
 * @return {String} A new string representing `str` stripped of whitespace
 *     characters from both its beginning and end
 * @private
 */
function trim(str) {
  return str.trim();
}
'use strict';

const EventEmitter = require('events');
const https = require('https');
const http = require('http');
const net = require('net');
const tls = require('tls');
const { randomBytes, createHash } = require('crypto');
const { URL } = require('url');

const PerMessageDeflate = require('./permessage-deflate');
const Receiver = require('./receiver');
const Sender = require('./sender');
const {
  BINARY_TYPES,
  EMPTY_BUFFER,
  GUID,
  kStatusCode,
  kWebSocket,
  NOOP
} = require('./constants');
const { addEventListener, removeEventListener } = require('./event-target');
const { format, parse } = require('./extension');
const { toBuffer } = require('./buffer-util');

const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
const protocolVersions = [8, 13];
const closeTimeout = 30 * 1000;

/**
 * Class representing a WebSocket.
 *
 * @extends EventEmitter
 */
class WebSocket extends EventEmitter {
  /**
   * Create a new `WebSocket`.
   *
   * @param {(String|url.URL)} address The URL to which to connect
   * @param {(String|String[])} [protocols] The subprotocols
   * @param {Object} [options] Connection options
   */
  constructor(address, protocols, options) {
    super();

    this._binaryType = BINARY_TYPES[0];
    this._closeCode = 1006;
    this._closeFrameReceived = false;
    this._closeFrameSent = false;
    this._closeMessage = '';
    this._closeTimer = null;
    this._extensions = {};
    this._protocol = '';
    this._readyState = WebSocket.CONNECTING;
    this._receiver = null;
    this._sender = null;
    this._socket = null;

    if (address !== null) {
      this._bufferedAmount = 0;
      this._isServer = false;
      this._redirects = 0;

      if (Array.isArray(protocols)) {
        protocols = protocols.join(', ');
      } else if (typeof protocols === 'object' && protocols !== null) {
        options = protocols;
        protocols = undefined;
      }

      initAsClient(this, address, protocols, options);
    } else {
      this._isServer = true;
    }
  }

  /**
   * This deviates from the WHATWG interface since ws doesn't support the
   * required default "blob" type (instead we define a custom "nodebuffer"
   * type).
   *
   * @type {String}
   */
  get binaryType() {
    return this._binaryType;
  }

  set binaryType(type) {
    if (!BINARY_TYPES.includes(type)) return;

    this._binaryType = type;

    //
    // Allow to change `binaryType` on the fly.
    //
    if (this._receiver) this._receiver._binaryType = type;
  }

  /**
   * @type {Number}
   */
  get bufferedAmount() {
    if (!this._socket) return this._bufferedAmount;

    return this._socket._writableState.length + this._sender._bufferedBytes;
  }

  /**
   * @type {String}
   */
  get extensions() {
    return Object.keys(this._extensions).join();
  }

  /**
   * @type {String}
   */
  get protocol() {
    return this._protocol;
  }

  /**
   * @type {Number}
   */
  get readyState() {
    return this._readyState;
  }

  /**
   * @type {String}
   */
  get url() {
    return this._url;
  }

  /**
   * Set up the socket and the internal resources.
   *
   * @param {net.Socket} socket The network socket between the server and client
   * @param {Buffer} head The first packet of the upgraded stream
   * @param {Number} [maxPayload=0] The maximum allowed message size
   * @private
   */
  setSocket(socket, head, maxPayload) {
    const receiver = new Receiver(
      this.binaryType,
      this._extensions,
      this._isServer,
      maxPayload
    );

    this._sender = new Sender(socket, this._extensions);
    this._receiver = receiver;
    this._socket = socket;

    receiver[kWebSocket] = this;
    socket[kWebSocket] = this;

    receiver.on('conclude', receiverOnConclude);
    receiver.on('drain', receiverOnDrain);
    receiver.on('error', receiverOnError);
    receiver.on('message', receiverOnMessage);
    receiver.on('ping', receiverOnPing);
    receiver.on('pong', receiverOnPong);

    socket.setTimeout(0);
    socket.setNoDelay();

    if (head.length > 0) socket.unshift(head);

    socket.on('close', socketOnClose);
    socket.on('data', socketOnData);
    socket.on('end', socketOnEnd);
    socket.on('error', socketOnError);

    this._readyState = WebSocket.OPEN;
    this.emit('open');
  }

  /**
   * Emit the `'close'` event.
   *
   * @private
   */
  emitClose() {
    if (!this._socket) {
      this._readyState = WebSocket.CLOSED;
      this.emit('close', this._closeCode, this._closeMessage);
      return;
    }

    if (this._extensions[PerMessageDeflate.extensionName]) {
      this._extensions[PerMessageDeflate.extensionName].cleanup();
    }

    this._receiver.removeAllListeners();
    this._readyState = WebSocket.CLOSED;
    this.emit('close', this._closeCode, this._closeMessage);
  }

  /**
   * Start a closing handshake.
   *
   *          +----------+   +-----------+   +----------+
   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -
   *    |     +----------+   +-----------+   +----------+     |
   *          +----------+   +-----------+         |
   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING
   *          +----------+   +-----------+   |
   *    |           |                        |   +---+        |
   *                +------------------------+-->|fin| - - - -
   *    |         +---+                      |   +---+
   *     - - - - -|fin|<---------------------+
   *              +---+
   *
   * @param {Number} [code] Status code explaining why the connection is closing
   * @param {String} [data] A string explaining why the connection is closing
   * @public
   */
  close(code, data) {
    if (this.readyState === WebSocket.CLOSED) return;
    if (this.readyState === WebSocket.CONNECTING) {
      const msg = 'WebSocket was closed before the connection was established';
      return abortHandshake(this, this._req, msg);
    }

    if (this.readyState === WebSocket.CLOSING) {
      if (this._closeFrameSent && this._closeFrameReceived) this._socket.end();
      return;
    }

    this._readyState = WebSocket.CLOSING;
    this._sender.close(code, data, !this._isServer, (err) => {
      //
      // This error is handled by the `'error'` listener on the socket. We only
      // want to know if the close frame has been sent here.
      //
      if (err) return;

      this._closeFrameSent = true;
      if (this._closeFrameReceived) this._socket.end();
    });

    //
    // Specify a timeout for the closing handshake to complete.
    //
    this._closeTimer = setTimeout(
      this._socket.destroy.bind(this._socket),
      closeTimeout
    );
  }

  /**
   * Send a ping.
   *
   * @param {*} [data] The data to send
   * @param {Boolean} [mask] Indicates whether or not to mask `data`
   * @param {Function} [cb] Callback which is executed when the ping is sent
   * @public
   */
  ping(data, mask, cb) {
    if (this.readyState === WebSocket.CONNECTING) {
      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
    }

    if (typeof data === 'function') {
      cb = data;
      data = mask = undefined;
    } else if (typeof mask === 'function') {
      cb = mask;
      mask = undefined;
    }

    if (typeof data === 'number') data = data.toString();

    if (this.readyState !== WebSocket.OPEN) {
      sendAfterClose(this, data, cb);
      return;
    }

    if (mask === undefined) mask = !this._isServer;
    this._sender.ping(data || EMPTY_BUFFER, mask, cb);
  }

  /**
   * Send a pong.
   *
   * @param {*} [data] The data to send
   * @param {Boolean} [mask] Indicates whether or not to mask `data`
   * @param {Function} [cb] Callback which is executed when the pong is sent
   * @public
   */
  pong(data, mask, cb) {
    if (this.readyState === WebSocket.CONNECTING) {
      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
    }

    if (typeof data === 'function') {
      cb = data;
      data = mask = undefined;
    } else if (typeof mask === 'function') {
      cb = mask;
      mask = undefined;
    }

    if (typeof data === 'number') data = data.toString();

    if (this.readyState !== WebSocket.OPEN) {
      sendAfterClose(this, data, cb);
      return;
    }

    if (mask === undefined) mask = !this._isServer;
    this._sender.pong(data || EMPTY_BUFFER, mask, cb);
  }

  /**
   * Send a data message.
   *
   * @param {*} data The message to send
   * @param {Object} [options] Options object
   * @param {Boolean} [options.compress] Specifies whether or not to compress
   *     `data`
   * @param {Boolean} [options.binary] Specifies whether `data` is binary or
   *     text
   * @param {Boolean} [options.fin=true] Specifies whether the fragment is the
   *     last one
   * @param {Boolean} [options.mask] Specifies whether or not to mask `data`
   * @param {Function} [cb] Callback which is executed when data is written out
   * @public
   */
  send(data, options, cb) {
    if (this.readyState === WebSocket.CONNECTING) {
      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');
    }

    if (typeof options === 'function') {
      cb = options;
      options = {};
    }

    if (typeof data === 'number') data = data.toString();

    if (this.readyState !== WebSocket.OPEN) {
      sendAfterClose(this, data, cb);
      return;
    }

    const opts = {
      binary: typeof data !== 'string',
      mask: !this._isServer,
      compress: true,
      fin: true,
      ...options
    };

    if (!this._extensions[PerMessageDeflate.extensionName]) {
      opts.compress = false;
    }

    this._sender.send(data || EMPTY_BUFFER, opts, cb);
  }

  /**
   * Forcibly close the connection.
   *
   * @public
   */
  terminate() {
    if (this.readyState === WebSocket.CLOSED) return;
    if (this.readyState === WebSocket.CONNECTING) {
      const msg = 'WebSocket was closed before the connection was established';
      return abortHandshake(this, this._req, msg);
    }

    if (this._socket) {
      this._readyState = WebSocket.CLOSING;
      this._socket.destroy();
    }
  }
}

readyStates.forEach((readyState, i) => {
  const descriptor = { enumerable: true, value: i };

  Object.defineProperty(WebSocket.prototype, readyState, descriptor);
  Object.defineProperty(WebSocket, readyState, descriptor);
});

[
  'binaryType',
  'bufferedAmount',
  'extensions',
  'protocol',
  'readyState',
  'url'
].forEach((property) => {
  Object.defineProperty(WebSocket.prototype, property, { enumerable: true });
});

//
// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.
// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface
//
['open', 'error', 'close', 'message'].forEach((method) => {
  Object.defineProperty(WebSocket.prototype, `on${method}`, {
    configurable: true,
    enumerable: true,
    /**
     * Return the listener of the event.
     *
     * @return {(Function|undefined)} The event listener or `undefined`
     * @public
     */
    get() {
      const listeners = this.listeners(method);
      for (let i = 0; i < listeners.length; i++) {
        if (listeners[i]._listener) return listeners[i]._listener;
      }

      return undefined;
    },
    /**
     * Add a listener for the event.
     *
     * @param {Function} listener The listener to add
     * @public
     */
    set(listener) {
      const listeners = this.listeners(method);
      for (let i = 0; i < listeners.length; i++) {
        //
        // Remove only the listeners added via `addEventListener`.
        //
        if (listeners[i]._listener) this.removeListener(method, listeners[i]);
      }
      this.addEventListener(method, listener);
    }
  });
});

WebSocket.prototype.addEventListener = addEventListener;
WebSocket.prototype.removeEventListener = removeEventListener;

module.exports = WebSocket;

/**
 * Initialize a WebSocket client.
 *
 * @param {WebSocket} websocket The client to initialize
 * @param {(String|url.URL)} address The URL to which to connect
 * @param {String} [protocols] The subprotocols
 * @param {Object} [options] Connection options
 * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable
 *     permessage-deflate
 * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the
 *     handshake request
 * @param {Number} [options.protocolVersion=13] Value of the
 *     `Sec-WebSocket-Version` header
 * @param {String} [options.origin] Value of the `Origin` or
 *     `Sec-WebSocket-Origin` header
 * @param {Number} [options.maxPayload=104857600] The maximum allowed message
 *     size
 * @param {Boolean} [options.followRedirects=false] Whether or not to follow
 *     redirects
 * @param {Number} [options.maxRedirects=10] The maximum number of redirects
 *     allowed
 * @private
 */
function initAsClient(websocket, address, protocols, options) {
  const opts = {
    protocolVersion: protocolVersions[1],
    maxPayload: 100 * 1024 * 1024,
    perMessageDeflate: true,
    followRedirects: false,
    maxRedirects: 10,
    ...options,
    createConnection: undefined,
    socketPath: undefined,
    hostname: undefined,
    protocol: undefined,
    timeout: undefined,
    method: undefined,
    host: undefined,
    path: undefined,
    port: undefined
  };

  if (!protocolVersions.includes(opts.protocolVersion)) {
    throw new RangeError(
      `Unsupported protocol version: ${opts.protocolVersion} ` +
        `(supported versions: ${protocolVersions.join(', ')})`
    );
  }

  let parsedUrl;

  if (address instanceof URL) {
    parsedUrl = address;
    websocket._url = address.href;
  } else {
    parsedUrl = new URL(address);
    websocket._url = address;
  }

  const isUnixSocket = parsedUrl.protocol === 'ws+unix:';

  if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {
    throw new Error(`Invalid URL: ${websocket.url}`);
  }

  const isSecure =
    parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';
  const defaultPort = isSecure ? 443 : 80;
  const key = randomBytes(16).toString('base64');
  const get = isSecure ? https.get : http.get;
  let perMessageDeflate;

  opts.createConnection = isSecure ? tlsConnect : netConnect;
  opts.defaultPort = opts.defaultPort || defaultPort;
  opts.port = parsedUrl.port || defaultPort;
  opts.host = parsedUrl.hostname.startsWith('[')
    ? parsedUrl.hostname.slice(1, -1)
    : parsedUrl.hostname;
  opts.headers = {
    'Sec-WebSocket-Version': opts.protocolVersion,
    'Sec-WebSocket-Key': key,
    Connection: 'Upgrade',
    Upgrade: 'websocket',
    ...opts.headers
  };
  opts.path = parsedUrl.pathname + parsedUrl.search;
  opts.timeout = opts.handshakeTimeout;

  if (opts.perMessageDeflate) {
    perMessageDeflate = new PerMessageDeflate(
      opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},
      false,
      opts.maxPayload
    );
    opts.headers['Sec-WebSocket-Extensions'] = format({
      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()
    });
  }
  if (protocols) {
    opts.headers['Sec-WebSocket-Protocol'] = protocols;
  }
  if (opts.origin) {
    if (opts.protocolVersion < 13) {
      opts.headers['Sec-WebSocket-Origin'] = opts.origin;
    } else {
      opts.headers.Origin = opts.origin;
    }
  }
  if (parsedUrl.username || parsedUrl.password) {
    opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;
  }

  if (isUnixSocket) {
    const parts = opts.path.split(':');

    opts.socketPath = parts[0];
    opts.path = parts[1];
  }

  let req = (websocket._req = get(opts));

  if (opts.timeout) {
    req.on('timeout', () => {
      abortHandshake(websocket, req, 'Opening handshake has timed out');
    });
  }

  req.on('error', (err) => {
    if (req === null || req.aborted) return;

    req = websocket._req = null;
    websocket._readyState = WebSocket.CLOSING;
    websocket.emit('error', err);
    websocket.emitClose();
  });

  req.on('response', (res) => {
    const location = res.headers.location;
    const statusCode = res.statusCode;

    if (
      location &&
      opts.followRedirects &&
      statusCode >= 300 &&
      statusCode < 400
    ) {
      if (++websocket._redirects > opts.maxRedirects) {
        abortHandshake(websocket, req, 'Maximum redirects exceeded');
        return;
      }

      req.abort();

      const addr = new URL(location, address);

      initAsClient(websocket, addr, protocols, options);
    } else if (!websocket.emit('unexpected-response', req, res)) {
      abortHandshake(
        websocket,
        req,
        `Unexpected server response: ${res.statusCode}`
      );
    }
  });

  req.on('upgrade', (res, socket, head) => {
    websocket.emit('upgrade', res);

    //
    // The user may have closed the connection from a listener of the `upgrade`
    // event.
    //
    if (websocket.readyState !== WebSocket.CONNECTING) return;

    req = websocket._req = null;

    const digest = createHash('sha1')
      .update(key + GUID)
      .digest('base64');

    if (res.headers['sec-websocket-accept'] !== digest) {
      abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');
      return;
    }

    const serverProt = res.headers['sec-websocket-protocol'];
    const protList = (protocols || '').split(/, */);
    let protError;

    if (!protocols && serverProt) {
      protError = 'Server sent a subprotocol but none was requested';
    } else if (protocols && !serverProt) {
      protError = 'Server sent no subprotocol';
    } else if (serverProt && !protList.includes(serverProt)) {
      protError = 'Server sent an invalid subprotocol';
    }

    if (protError) {
      abortHandshake(websocket, socket, protError);
      return;
    }

    if (serverProt) websocket._protocol = serverProt;

    if (perMessageDeflate) {
      try {
        const extensions = parse(res.headers['sec-websocket-extensions']);

        if (extensions[PerMessageDeflate.extensionName]) {
          perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
          websocket._extensions[PerMessageDeflate.extensionName] =
            perMessageDeflate;
        }
      } catch (err) {
        abortHandshake(
          websocket,
          socket,
          'Invalid Sec-WebSocket-Extensions header'
        );
        return;
      }
    }

    websocket.setSocket(socket, head, opts.maxPayload);
  });
}

/**
 * Create a `net.Socket` and initiate a connection.
 *
 * @param {Object} options Connection options
 * @return {net.Socket} The newly created socket used to start the connection
 * @private
 */
function netConnect(options) {
  options.path = options.socketPath;
  return net.connect(options);
}

/**
 * Create a `tls.TLSSocket` and initiate a connection.
 *
 * @param {Object} options Connection options
 * @return {tls.TLSSocket} The newly created socket used to start the connection
 * @private
 */
function tlsConnect(options) {
  options.path = undefined;

  if (!options.servername && options.servername !== '') {
    options.servername = net.isIP(options.host) ? '' : options.host;
  }

  return tls.connect(options);
}

/**
 * Abort the handshake and emit an error.
 *
 * @param {WebSocket} websocket The WebSocket instance
 * @param {(http.ClientRequest|net.Socket)} stream The request to abort or the
 *     socket to destroy
 * @param {String} message The error message
 * @private
 */
function abortHandshake(websocket, stream, message) {
  websocket._readyState = WebSocket.CLOSING;

  const err = new Error(message);
  Error.captureStackTrace(err, abortHandshake);

  if (stream.setHeader) {
    stream.abort();

    if (stream.socket && !stream.socket.destroyed) {
      //
      // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if
      // called after the request completed. See
      // https://github.com/websockets/ws/issues/1869.
      //
      stream.socket.destroy();
    }

    stream.once('abort', websocket.emitClose.bind(websocket));
    websocket.emit('error', err);
  } else {
    stream.destroy(err);
    stream.once('error', websocket.emit.bind(websocket, 'error'));
    stream.once('close', websocket.emitClose.bind(websocket));
  }
}

/**
 * Handle cases where the `ping()`, `pong()`, or `send()` methods are called
 * when the `readyState` attribute is `CLOSING` or `CLOSED`.
 *
 * @param {WebSocket} websocket The WebSocket instance
 * @param {*} [data] The data to send
 * @param {Function} [cb] Callback
 * @private
 */
function sendAfterClose(websocket, data, cb) {
  if (data) {
    const length = toBuffer(data).length;

    //
    // The `_bufferedAmount` property is used only when the peer is a client and
    // the opening handshake fails. Under these circumstances, in fact, the
    // `setSocket()` method is not called, so the `_socket` and `_sender`
    // properties are set to `null`.
    //
    if (websocket._socket) websocket._sender._bufferedBytes += length;
    else websocket._bufferedAmount += length;
  }

  if (cb) {
    const err = new Error(
      `WebSocket is not open: readyState ${websocket.readyState} ` +
        `(${readyStates[websocket.readyState]})`
    );
    cb(err);
  }
}

/**
 * The listener of the `Receiver` `'conclude'` event.
 *
 * @param {Number} code The status code
 * @param {String} reason The reason for closing
 * @private
 */
function receiverOnConclude(code, reason) {
  const websocket = this[kWebSocket];

  websocket._socket.removeListener('data', socketOnData);
  websocket._socket.resume();

  websocket._closeFrameReceived = true;
  websocket._closeMessage = reason;
  websocket._closeCode = code;

  if (code === 1005) websocket.close();
  else websocket.close(code, reason);
}

/**
 * The listener of the `Receiver` `'drain'` event.
 *
 * @private
 */
function receiverOnDrain() {
  this[kWebSocket]._socket.resume();
}

/**
 * The listener of the `Receiver` `'error'` event.
 *
 * @param {(RangeError|Error)} err The emitted error
 * @private
 */
function receiverOnError(err) {
  const websocket = this[kWebSocket];

  websocket._socket.removeListener('data', socketOnData);

  websocket._readyState = WebSocket.CLOSING;
  websocket._closeCode = err[kStatusCode];
  websocket.emit('error', err);
  websocket._socket.destroy();
}

/**
 * The listener of the `Receiver` `'finish'` event.
 *
 * @private
 */
function receiverOnFinish() {
  this[kWebSocket].emitClose();
}

/**
 * The listener of the `Receiver` `'message'` event.
 *
 * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message
 * @private
 */
function receiverOnMessage(data) {
  this[kWebSocket].emit('message', data);
}

/**
 * The listener of the `Receiver` `'ping'` event.
 *
 * @param {Buffer} data The data included in the ping frame
 * @private
 */
function receiverOnPing(data) {
  const websocket = this[kWebSocket];

  websocket.pong(data, !websocket._isServer, NOOP);
  websocket.emit('ping', data);
}

/**
 * The listener of the `Receiver` `'pong'` event.
 *
 * @param {Buffer} data The data included in the pong frame
 * @private
 */
function receiverOnPong(data) {
  this[kWebSocket].emit('pong', data);
}

/**
 * The listener of the `net.Socket` `'close'` event.
 *
 * @private
 */
function socketOnClose() {
  const websocket = this[kWebSocket];

  this.removeListener('close', socketOnClose);
  this.removeListener('end', socketOnEnd);

  websocket._readyState = WebSocket.CLOSING;

  //
  // The close frame might not have been received or the `'end'` event emitted,
  // for example, if the socket was destroyed due to an error. Ensure that the
  // `receiver` stream is closed after writing any remaining buffered data to
  // it. If the readable side of the socket is in flowing mode then there is no
  // buffered data as everything has been already written and `readable.read()`
  // will return `null`. If instead, the socket is paused, any possible buffered
  // data will be read as a single chunk and emitted synchronously in a single
  // `'data'` event.
  //
  websocket._socket.read();
  websocket._receiver.end();

  this.removeListener('data', socketOnData);
  this[kWebSocket] = undefined;

  clearTimeout(websocket._closeTimer);

  if (
    websocket._receiver._writableState.finished ||
    websocket._receiver._writableState.errorEmitted
  ) {
    websocket.emitClose();
  } else {
    websocket._receiver.on('error', receiverOnFinish);
    websocket._receiver.on('finish', receiverOnFinish);
  }
}

/**
 * The listener of the `net.Socket` `'data'` event.
 *
 * @param {Buffer} chunk A chunk of data
 * @private
 */
function socketOnData(chunk) {
  if (!this[kWebSocket]._receiver.write(chunk)) {
    this.pause();
  }
}

/**
 * The listener of the `net.Socket` `'end'` event.
 *
 * @private
 */
function socketOnEnd() {
  const websocket = this[kWebSocket];

  websocket._readyState = WebSocket.CLOSING;
  websocket._receiver.end();
  this.end();
}

/**
 * The listener of the `net.Socket` `'error'` event.
 *
 * @private
 */
function socketOnError() {
  const websocket = this[kWebSocket];

  this.removeListener('error', socketOnError);
  this.on('error', NOOP);

  if (websocket) {
    websocket._readyState = WebSocket.CLOSING;
    this.destroy();
  }
}
The MIT License (MIT)

Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
{
  "name": "ws",
  "version": "7.4.6",
  "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js",
  "homepage": "https://github.com/websockets/ws",
  "repository": "websockets/ws",
  "author": "Einar Otto Stangvik <einaros@gmail.com> (http://2x.io)",
  "license": "MIT",
  "main": "index.js",
  "browser": "browser.js",
  "engines": {
    "node": ">=8.3.0"
  },
  "files": [
    "browser.js",
    "index.js",
    "lib/*.js"
  ],
  "peerDependencies": {
    "bufferutil": "^4.0.1",
    "utf-8-validate": "^5.0.2"
  },
  "peerDependenciesMeta": {
    "bufferutil": {
      "optional": true
    },
    "utf-8-validate": {
      "optional": true
    }
  },
  "devDependencies": {
    "benchmark": "^2.1.4",
    "bufferutil": "^4.0.1",
    "eslint": "^7.2.0",
    "eslint-config-prettier": "^8.1.0",
    "eslint-plugin-prettier": "^3.0.1",
    "mocha": "^7.0.0",
    "nyc": "^15.0.0",
    "prettier": "^2.0.5",
    "utf-8-validate": "^5.0.2"
  }
}var fs = require('fs')
var path = require('path')
var util = require('util')

function Y18N (opts) {
  // configurable options.
  opts = opts || {}
  this.directory = opts.directory || './locales'
  this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true
  this.locale = opts.locale || 'en'
  this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true

  // internal stuff.
  this.cache = Object.create(null)
  this.writeQueue = []
}

Y18N.prototype.__ = function () {
  if (typeof arguments[0] !== 'string') {
    return this._taggedLiteral.apply(this, arguments)
  }
  var args = Array.prototype.slice.call(arguments)
  var str = args.shift()
  var cb = function () {} // start with noop.

  if (typeof args[args.length - 1] === 'function') cb = args.pop()
  cb = cb || function () {} // noop.

  if (!this.cache[this.locale]) this._readLocaleFile()

  // we've observed a new string, update the language file.
  if (!this.cache[this.locale][str] && this.updateFiles) {
    this.cache[this.locale][str] = str

    // include the current directory and locale,
    // since these values could change before the
    // write is performed.
    this._enqueueWrite([this.directory, this.locale, cb])
  } else {
    cb()
  }

  return util.format.apply(util, [this.cache[this.locale][str] || str].concat(args))
}

Y18N.prototype._taggedLiteral = function (parts) {
  var args = arguments
  var str = ''
  parts.forEach(function (part, i) {
    var arg = args[i + 1]
    str += part
    if (typeof arg !== 'undefined') {
      str += '%s'
    }
  })
  return this.__.apply(null, [str].concat([].slice.call(arguments, 1)))
}

Y18N.prototype._enqueueWrite = function (work) {
  this.writeQueue.push(work)
  if (this.writeQueue.length === 1) this._processWriteQueue()
}

Y18N.prototype._processWriteQueue = function () {
  var _this = this
  var work = this.writeQueue[0]

  // destructure the enqueued work.
  var directory = work[0]
  var locale = work[1]
  var cb = work[2]

  var languageFile = this._resolveLocaleFile(directory, locale)
  var serializedLocale = JSON.stringify(this.cache[locale], null, 2)

  fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) {
    _this.writeQueue.shift()
    if (_this.writeQueue.length > 0) _this._processWriteQueue()
    cb(err)
  })
}

Y18N.prototype._readLocaleFile = function () {
  var localeLookup = {}
  var languageFile = this._resolveLocaleFile(this.directory, this.locale)

  try {
    localeLookup = JSON.parse(fs.readFileSync(languageFile, 'utf-8'))
  } catch (err) {
    if (err instanceof SyntaxError) {
      err.message = 'syntax error in ' + languageFile
    }

    if (err.code === 'ENOENT') localeLookup = {}
    else throw err
  }

  this.cache[this.locale] = localeLookup
}

Y18N.prototype._resolveLocaleFile = function (directory, locale) {
  var file = path.resolve(directory, './', locale + '.json')
  if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) {
    // attempt fallback to language only
    var languageFile = path.resolve(directory, './', locale.split('_')[0] + '.json')
    if (this._fileExistsSync(languageFile)) file = languageFile
  }
  return file
}

// this only exists because fs.existsSync() "will be deprecated"
// see https://nodejs.org/api/fs.html#fs_fs_existssync_path
Y18N.prototype._fileExistsSync = function (file) {
  try {
    return fs.statSync(file).isFile()
  } catch (err) {
    return false
  }
}

Y18N.prototype.__n = function () {
  var args = Array.prototype.slice.call(arguments)
  var singular = args.shift()
  var plural = args.shift()
  var quantity = args.shift()

  var cb = function () {} // start with noop.
  if (typeof args[args.length - 1] === 'function') cb = args.pop()

  if (!this.cache[this.locale]) this._readLocaleFile()

  var str = quantity === 1 ? singular : plural
  if (this.cache[this.locale][singular]) {
    str = this.cache[this.locale][singular][quantity === 1 ? 'one' : 'other']
  }

  // we've observed a new string, update the language file.
  if (!this.cache[this.locale][singular] && this.updateFiles) {
    this.cache[this.locale][singular] = {
      one: singular,
      other: plural
    }

    // include the current directory and locale,
    // since these values could change before the
    // write is performed.
    this._enqueueWrite([this.directory, this.locale, cb])
  } else {
    cb()
  }

  // if a %d placeholder is provided, add quantity
  // to the arguments expanded by util.format.
  var values = [str]
  if (~str.indexOf('%d')) values.push(quantity)

  return util.format.apply(util, values.concat(args))
}

Y18N.prototype.setLocale = function (locale) {
  this.locale = locale
}

Y18N.prototype.getLocale = function () {
  return this.locale
}

Y18N.prototype.updateLocale = function (obj) {
  if (!this.cache[this.locale]) this._readLocaleFile()

  for (var key in obj) {
    this.cache[this.locale][key] = obj[key]
  }
}

module.exports = function (opts) {
  var y18n = new Y18N(opts)

  // bind all functions to y18n, so that
  // they can be used in isolation.
  for (var key in y18n) {
    if (typeof y18n[key] === 'function') {
      y18n[key] = y18n[key].bind(y18n)
    }
  }

  return y18n
}
Copyright (c) 2015, Contributors

Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
{
  "name": "y18n",
  "version": "4.0.3",
  "description": "the bare-bones internationalization library used by yargs",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "git@github.com:yargs/y18n.git"
  },
  "files": [
    "index.js"
  ],
  "author": "Ben Coe <ben@npmjs.com>",
  "license": "ISC",
  "homepage": "https://github.com/yargs/y18n",
  "devDependencies": {
    "chai": "^4.0.1",
    "coveralls": "^3.0.0",
    "mocha": "^4.0.1",
    "nyc": "^11.0.1",
    "rimraf": "^2.5.0",
    "standard": "^10.0.0-beta.0",
    "standard-version": "^4.2.0"
  }
}import { isNode, isMap } from '../nodes/Node.js';
import { Scalar } from '../nodes/Scalar.js';
import { resolveBlockMap } from './resolve-block-map.js';
import { resolveBlockSeq } from './resolve-block-seq.js';
import { resolveFlowCollection } from './resolve-flow-collection.js';

function composeCollection(CN, ctx, token, tagToken, onError) {
    let coll;
    switch (token.type) {
        case 'block-map': {
            coll = resolveBlockMap(CN, ctx, token, onError);
            break;
        }
        case 'block-seq': {
            coll = resolveBlockSeq(CN, ctx, token, onError);
            break;
        }
        case 'flow-collection': {
            coll = resolveFlowCollection(CN, ctx, token, onError);
            break;
        }
    }
    if (!tagToken)
        return coll;
    const tagName = ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));
    if (!tagName)
        return coll;
    // Cast needed due to: https://github.com/Microsoft/TypeScript/issues/3841
    const Coll = coll.constructor;
    if (tagName === '!' || tagName === Coll.tagName) {
        coll.tag = Coll.tagName;
        return coll;
    }
    const expType = isMap(coll) ? 'map' : 'seq';
    let tag = ctx.schema.tags.find(t => t.collection === expType && t.tag === tagName);
    if (!tag) {
        const kt = ctx.schema.knownTags[tagName];
        if (kt && kt.collection === expType) {
            ctx.schema.tags.push(Object.assign({}, kt, { default: false }));
            tag = kt;
        }
        else {
            onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);
            coll.tag = tagName;
            return coll;
        }
    }
    const res = tag.resolve(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options);
    const node = isNode(res)
        ? res
        : new Scalar(res);
    node.range = coll.range;
    node.tag = tagName;
    if (tag === null || tag === void 0 ? void 0 : tag.format)
        node.format = tag.format;
    return node;
}

export { composeCollection };
import { Document } from '../doc/Document.js';
import { composeNode, composeEmptyNode } from './compose-node.js';
import { resolveEnd } from './resolve-end.js';
import { resolveProps } from './resolve-props.js';

function composeDoc(options, directives, { offset, start, value, end }, onError) {
    const opts = Object.assign({ directives }, options);
    const doc = new Document(undefined, opts);
    const ctx = {
        atRoot: true,
        directives: doc.directives,
        options: doc.options,
        schema: doc.schema
    };
    const props = resolveProps(start, {
        indicator: 'doc-start',
        next: value !== null && value !== void 0 ? value : end === null || end === void 0 ? void 0 : end[0],
        offset,
        onError,
        startOnNewline: true
    });
    if (props.found) {
        doc.directives.docStart = true;
        if (value &&
            (value.type === 'block-map' || value.type === 'block-seq') &&
            !props.hasNewline)
            onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');
    }
    doc.contents = value
        ? composeNode(ctx, value, props, onError)
        : composeEmptyNode(ctx, props.end, start, null, props, onError);
    const contentEnd = doc.contents.range[2];
    const re = resolveEnd(end, contentEnd, false, onError);
    if (re.comment)
        doc.comment = re.comment;
    doc.range = [offset, contentEnd, re.offset];
    return doc;
}

export { composeDoc };
import { Alias } from '../nodes/Alias.js';
import { composeCollection } from './compose-collection.js';
import { composeScalar } from './compose-scalar.js';
import { resolveEnd } from './resolve-end.js';
import { emptyScalarPosition } from './util-empty-scalar-position.js';

const CN = { composeNode, composeEmptyNode };
function composeNode(ctx, token, props, onError) {
    const { spaceBefore, comment, anchor, tag } = props;
    let node;
    let isSrcToken = true;
    switch (token.type) {
        case 'alias':
            node = composeAlias(ctx, token, onError);
            if (anchor || tag)
                onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');
            break;
        case 'scalar':
        case 'single-quoted-scalar':
        case 'double-quoted-scalar':
        case 'block-scalar':
            node = composeScalar(ctx, token, tag, onError);
            if (anchor)
                node.anchor = anchor.source.substring(1);
            break;
        case 'block-map':
        case 'block-seq':
        case 'flow-collection':
            node = composeCollection(CN, ctx, token, tag, onError);
            if (anchor)
                node.anchor = anchor.source.substring(1);
            break;
        default: {
            const message = token.type === 'error'
                ? token.message
                : `Unsupported token (type: ${token.type})`;
            onError(token, 'UNEXPECTED_TOKEN', message);
            node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);
            isSrcToken = false;
        }
    }
    if (anchor && node.anchor === '')
        onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');
    if (spaceBefore)
        node.spaceBefore = true;
    if (comment) {
        if (token.type === 'scalar' && token.source === '')
            node.comment = comment;
        else
            node.commentBefore = comment;
    }
    // @ts-expect-error Type checking misses meaning of isSrcToken
    if (ctx.options.keepSourceTokens && isSrcToken)
        node.srcToken = token;
    return node;
}
function composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag }, onError) {
    const token = {
        type: 'scalar',
        offset: emptyScalarPosition(offset, before, pos),
        indent: -1,
        source: ''
    };
    const node = composeScalar(ctx, token, tag, onError);
    if (anchor) {
        node.anchor = anchor.source.substring(1);
        if (node.anchor === '')
            onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');
    }
    if (spaceBefore)
        node.spaceBefore = true;
    if (comment)
        node.comment = comment;
    return node;
}
function composeAlias({ options }, { offset, source, end }, onError) {
    const alias = new Alias(source.substring(1));
    if (alias.source === '')
        onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');
    if (alias.source.endsWith(':'))
        onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);
    const valueEnd = offset + source.length;
    const re = resolveEnd(end, valueEnd, options.strict, onError);
    alias.range = [offset, valueEnd, re.offset];
    if (re.comment)
        alias.comment = re.comment;
    return alias;
}

export { composeEmptyNode, composeNode };
import { SCALAR, isScalar } from '../nodes/Node.js';
import { Scalar } from '../nodes/Scalar.js';
import { resolveBlockScalar } from './resolve-block-scalar.js';
import { resolveFlowScalar } from './resolve-flow-scalar.js';

function composeScalar(ctx, token, tagToken, onError) {
    const { value, type, comment, range } = token.type === 'block-scalar'
        ? resolveBlockScalar(token, ctx.options.strict, onError)
        : resolveFlowScalar(token, ctx.options.strict, onError);
    const tagName = tagToken
        ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))
        : null;
    const tag = tagToken && tagName
        ? findScalarTagByName(ctx.schema, value, tagName, tagToken, onError)
        : token.type === 'scalar'
            ? findScalarTagByTest(ctx, value, token, onError)
            : ctx.schema[SCALAR];
    let scalar;
    try {
        const res = tag.resolve(value, msg => onError(tagToken !== null && tagToken !== void 0 ? tagToken : token, 'TAG_RESOLVE_FAILED', msg), ctx.options);
        scalar = isScalar(res) ? res : new Scalar(res);
    }
    catch (error) {
        const msg = error instanceof Error ? error.message : String(error);
        onError(tagToken !== null && tagToken !== void 0 ? tagToken : token, 'TAG_RESOLVE_FAILED', msg);
        scalar = new Scalar(value);
    }
    scalar.range = range;
    scalar.source = value;
    if (type)
        scalar.type = type;
    if (tagName)
        scalar.tag = tagName;
    if (tag.format)
        scalar.format = tag.format;
    if (comment)
        scalar.comment = comment;
    return scalar;
}
function findScalarTagByName(schema, value, tagName, tagToken, onError) {
    var _a;
    if (tagName === '!')
        return schema[SCALAR]; // non-specific tag
    const matchWithTest = [];
    for (const tag of schema.tags) {
        if (!tag.collection && tag.tag === tagName) {
            if (tag.default && tag.test)
                matchWithTest.push(tag);
            else
                return tag;
        }
    }
    for (const tag of matchWithTest)
        if ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(value))
            return tag;
    const kt = schema.knownTags[tagName];
    if (kt && !kt.collection) {
        // Ensure that the known tag is available for stringifying,
        // but does not get used by default.
        schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));
        return kt;
    }
    onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');
    return schema[SCALAR];
}
function findScalarTagByTest({ directives, schema }, value, token, onError) {
    var _a;
    const tag = schema.tags.find(tag => { var _a; return tag.default && ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(value)); }) || schema[SCALAR];
    if (schema.compat) {
        const compat = (_a = schema.compat.find(tag => { var _a; return tag.default && ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(value)); })) !== null && _a !== void 0 ? _a : schema[SCALAR];
        if (tag.tag !== compat.tag) {
            const ts = directives.tagString(tag.tag);
            const cs = directives.tagString(compat.tag);
            const msg = `Value may be parsed as either ${ts} or ${cs}`;
            onError(token, 'TAG_RESOLVE_FAILED', msg, true);
        }
    }
    return tag;
}

export { composeScalar };
import { Directives } from '../doc/directives.js';
import { Document } from '../doc/Document.js';
import { YAMLWarning, YAMLParseError } from '../errors.js';
import { isCollection, isPair } from '../nodes/Node.js';
import { composeDoc } from './compose-doc.js';
import { resolveEnd } from './resolve-end.js';

function getErrorPos(src) {
    if (typeof src === 'number')
        return [src, src + 1];
    if (Array.isArray(src))
        return src.length === 2 ? src : [src[0], src[1]];
    const { offset, source } = src;
    return [offset, offset + (typeof source === 'string' ? source.length : 1)];
}
function parsePrelude(prelude) {
    var _a;
    let comment = '';
    let atComment = false;
    let afterEmptyLine = false;
    for (let i = 0; i < prelude.length; ++i) {
        const source = prelude[i];
        switch (source[0]) {
            case '#':
                comment +=
                    (comment === '' ? '' : afterEmptyLine ? '\n\n' : '\n') +
                        (source.substring(1) || ' ');
                atComment = true;
                afterEmptyLine = false;
                break;
            case '%':
                if (((_a = prelude[i + 1]) === null || _a === void 0 ? void 0 : _a[0]) !== '#')
                    i += 1;
                atComment = false;
                break;
            default:
                // This may be wrong after doc-end, but in that case it doesn't matter
                if (!atComment)
                    afterEmptyLine = true;
                atComment = false;
        }
    }
    return { comment, afterEmptyLine };
}
/**
 * Compose a stream of CST nodes into a stream of YAML Documents.
 *
 * ```ts
 * import { Composer, Parser } from 'yaml'
 *
 * const src: string = ...
 * const tokens = new Parser().parse(src)
 * const docs = new Composer().compose(tokens)
 * ```
 */
class Composer {
    constructor(options = {}) {
        this.doc = null;
        this.atDirectives = false;
        this.prelude = [];
        this.errors = [];
        this.warnings = [];
        this.onError = (source, code, message, warning) => {
            const pos = getErrorPos(source);
            if (warning)
                this.warnings.push(new YAMLWarning(pos, code, message));
            else
                this.errors.push(new YAMLParseError(pos, code, message));
        };
        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
        this.directives = new Directives({ version: options.version || '1.2' });
        this.options = options;
    }
    decorate(doc, afterDoc) {
        const { comment, afterEmptyLine } = parsePrelude(this.prelude);
        //console.log({ dc: doc.comment, prelude, comment })
        if (comment) {
            const dc = doc.contents;
            if (afterDoc) {
                doc.comment = doc.comment ? `${doc.comment}\n${comment}` : comment;
            }
            else if (afterEmptyLine || doc.directives.docStart || !dc) {
                doc.commentBefore = comment;
            }
            else if (isCollection(dc) && !dc.flow && dc.items.length > 0) {
                let it = dc.items[0];
                if (isPair(it))
                    it = it.key;
                const cb = it.commentBefore;
                it.commentBefore = cb ? `${comment}\n${cb}` : comment;
            }
            else {
                const cb = dc.commentBefore;
                dc.commentBefore = cb ? `${comment}\n${cb}` : comment;
            }
        }
        if (afterDoc) {
            Array.prototype.push.apply(doc.errors, this.errors);
            Array.prototype.push.apply(doc.warnings, this.warnings);
        }
        else {
            doc.errors = this.errors;
            doc.warnings = this.warnings;
        }
        this.prelude = [];
        this.errors = [];
        this.warnings = [];
    }
    /**
     * Current stream status information.
     *
     * Mostly useful at the end of input for an empty stream.
     */
    streamInfo() {
        return {
            comment: parsePrelude(this.prelude).comment,
            directives: this.directives,
            errors: this.errors,
            warnings: this.warnings
        };
    }
    /**
     * Compose tokens into documents.
     *
     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.
     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.
     */
    *compose(tokens, forceDoc = false, endOffset = -1) {
        for (const token of tokens)
            yield* this.next(token);
        yield* this.end(forceDoc, endOffset);
    }
    /** Advance the composer by one CST token. */
    *next(token) {
        switch (token.type) {
            case 'directive':
                this.directives.add(token.source, (offset, message, warning) => {
                    const pos = getErrorPos(token);
                    pos[0] += offset;
                    this.onError(pos, 'BAD_DIRECTIVE', message, warning);
                });
                this.prelude.push(token.source);
                this.atDirectives = true;
                break;
            case 'document': {
                const doc = composeDoc(this.options, this.directives, token, this.onError);
                if (this.atDirectives && !doc.directives.docStart)
                    this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');
                this.decorate(doc, false);
                if (this.doc)
                    yield this.doc;
                this.doc = doc;
                this.atDirectives = false;
                break;
            }
            case 'byte-order-mark':
            case 'space':
                break;
            case 'comment':
            case 'newline':
                this.prelude.push(token.source);
                break;
            case 'error': {
                const msg = token.source
                    ? `${token.message}: ${JSON.stringify(token.source)}`
                    : token.message;
                const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);
                if (this.atDirectives || !this.doc)
                    this.errors.push(error);
                else
                    this.doc.errors.push(error);
                break;
            }
            case 'doc-end': {
                if (!this.doc) {
                    const msg = 'Unexpected doc-end without preceding document';
                    this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));
                    break;
                }
                this.doc.directives.docEnd = true;
                const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);
                this.decorate(this.doc, true);
                if (end.comment) {
                    const dc = this.doc.comment;
                    this.doc.comment = dc ? `${dc}\n${end.comment}` : end.comment;
                }
                this.doc.range[2] = end.offset;
                break;
            }
            default:
                this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));
        }
    }
    /**
     * Call at end of input to yield any remaining document.
     *
     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.
     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.
     */
    *end(forceDoc = false, endOffset = -1) {
        if (this.doc) {
            this.decorate(this.doc, true);
            yield this.doc;
            this.doc = null;
        }
        else if (forceDoc) {
            const opts = Object.assign({ directives: this.directives }, this.options);
            const doc = new Document(undefined, opts);
            if (this.atDirectives)
                this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');
            doc.range = [0, endOffset, endOffset];
            this.decorate(doc, false);
            yield doc;
        }
    }
}

export { Composer };
import { Pair } from '../nodes/Pair.js';
import { YAMLMap } from '../nodes/YAMLMap.js';
import { resolveProps } from './resolve-props.js';
import { containsNewline } from './util-contains-newline.js';
import { flowIndentCheck } from './util-flow-indent-check.js';
import { mapIncludes } from './util-map-includes.js';

const startColMsg = 'All mapping items must start at the same column';
function resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError) {
    var _a;
    const map = new YAMLMap(ctx.schema);
    if (ctx.atRoot)
        ctx.atRoot = false;
    let offset = bm.offset;
    for (const collItem of bm.items) {
        const { start, key, sep, value } = collItem;
        // key properties
        const keyProps = resolveProps(start, {
            indicator: 'explicit-key-ind',
            next: key !== null && key !== void 0 ? key : sep === null || sep === void 0 ? void 0 : sep[0],
            offset,
            onError,
            startOnNewline: true
        });
        const implicitKey = !keyProps.found;
        if (implicitKey) {
            if (key) {
                if (key.type === 'block-seq')
                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');
                else if ('indent' in key && key.indent !== bm.indent)
                    onError(offset, 'BAD_INDENT', startColMsg);
            }
            if (!keyProps.anchor && !keyProps.tag && !sep) {
                // TODO: assert being at last item?
                if (keyProps.comment) {
                    if (map.comment)
                        map.comment += '\n' + keyProps.comment;
                    else
                        map.comment = keyProps.comment;
                }
                continue;
            }
            if (keyProps.hasNewlineAfterProp || containsNewline(key)) {
                onError(key !== null && key !== void 0 ? key : start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');
            }
        }
        else if (((_a = keyProps.found) === null || _a === void 0 ? void 0 : _a.indent) !== bm.indent) {
            onError(offset, 'BAD_INDENT', startColMsg);
        }
        // key value
        const keyStart = keyProps.end;
        const keyNode = key
            ? composeNode(ctx, key, keyProps, onError)
            : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);
        if (ctx.schema.compat)
            flowIndentCheck(bm.indent, key, onError);
        if (mapIncludes(ctx, map.items, keyNode))
            onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');
        // value properties
        const valueProps = resolveProps(sep !== null && sep !== void 0 ? sep : [], {
            indicator: 'map-value-ind',
            next: value,
            offset: keyNode.range[2],
            onError,
            startOnNewline: !key || key.type === 'block-scalar'
        });
        offset = valueProps.end;
        if (valueProps.found) {
            if (implicitKey) {
                if ((value === null || value === void 0 ? void 0 : value.type) === 'block-map' && !valueProps.hasNewline)
                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');
                if (ctx.options.strict &&
                    keyProps.start < valueProps.found.offset - 1024)
                    onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');
            }
            // value value
            const valueNode = value
                ? composeNode(ctx, value, valueProps, onError)
                : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);
            if (ctx.schema.compat)
                flowIndentCheck(bm.indent, value, onError);
            offset = valueNode.range[2];
            const pair = new Pair(keyNode, valueNode);
            if (ctx.options.keepSourceTokens)
                pair.srcToken = collItem;
            map.items.push(pair);
        }
        else {
            // key with no value
            if (implicitKey)
                onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');
            if (valueProps.comment) {
                if (keyNode.comment)
                    keyNode.comment += '\n' + valueProps.comment;
                else
                    keyNode.comment = valueProps.comment;
            }
            const pair = new Pair(keyNode);
            if (ctx.options.keepSourceTokens)
                pair.srcToken = collItem;
            map.items.push(pair);
        }
    }
    map.range = [bm.offset, offset, offset];
    return map;
}

export { resolveBlockMap };
import { Scalar } from '../nodes/Scalar.js';

function resolveBlockScalar(scalar, strict, onError) {
    const start = scalar.offset;
    const header = parseBlockScalarHeader(scalar, strict, onError);
    if (!header)
        return { value: '', type: null, comment: '', range: [start, start, start] };
    const type = header.mode === '>' ? Scalar.BLOCK_FOLDED : Scalar.BLOCK_LITERAL;
    const lines = scalar.source ? splitLines(scalar.source) : [];
    // determine the end of content & start of chomping
    let chompStart = lines.length;
    for (let i = lines.length - 1; i >= 0; --i) {
        const content = lines[i][1];
        if (content === '' || content === '\r')
            chompStart = i;
        else
            break;
    }
    // shortcut for empty contents
    if (chompStart === 0) {
        const value = header.chomp === '+' && lines.length > 0
            ? '\n'.repeat(Math.max(1, lines.length - 1))
            : '';
        let end = start + header.length;
        if (scalar.source)
            end += scalar.source.length;
        return { value, type, comment: header.comment, range: [start, end, end] };
    }
    // find the indentation level to trim from start
    let trimIndent = scalar.indent + header.indent;
    let offset = scalar.offset + header.length;
    let contentStart = 0;
    for (let i = 0; i < chompStart; ++i) {
        const [indent, content] = lines[i];
        if (content === '' || content === '\r') {
            if (header.indent === 0 && indent.length > trimIndent)
                trimIndent = indent.length;
        }
        else {
            if (indent.length < trimIndent) {
                const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';
                onError(offset + indent.length, 'MISSING_CHAR', message);
            }
            if (header.indent === 0)
                trimIndent = indent.length;
            contentStart = i;
            break;
        }
        offset += indent.length + content.length + 1;
    }
    // include trailing more-indented empty lines in content
    for (let i = lines.length - 1; i >= chompStart; --i) {
        if (lines[i][0].length > trimIndent)
            chompStart = i + 1;
    }
    let value = '';
    let sep = '';
    let prevMoreIndented = false;
    // leading whitespace is kept intact
    for (let i = 0; i < contentStart; ++i)
        value += lines[i][0].slice(trimIndent) + '\n';
    for (let i = contentStart; i < chompStart; ++i) {
        let [indent, content] = lines[i];
        offset += indent.length + content.length + 1;
        const crlf = content[content.length - 1] === '\r';
        if (crlf)
            content = content.slice(0, -1);
        /* istanbul ignore if already caught in lexer */
        if (content && indent.length < trimIndent) {
            const src = header.indent
                ? 'explicit indentation indicator'
                : 'first line';
            const message = `Block scalar lines must not be less indented than their ${src}`;
            onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);
            indent = '';
        }
        if (type === Scalar.BLOCK_LITERAL) {
            value += sep + indent.slice(trimIndent) + content;
            sep = '\n';
        }
        else if (indent.length > trimIndent || content[0] === '\t') {
            // more-indented content within a folded block
            if (sep === ' ')
                sep = '\n';
            else if (!prevMoreIndented && sep === '\n')
                sep = '\n\n';
            value += sep + indent.slice(trimIndent) + content;
            sep = '\n';
            prevMoreIndented = true;
        }
        else if (content === '') {
            // empty line
            if (sep === '\n')
                value += '\n';
            else
                sep = '\n';
        }
        else {
            value += sep + content;
            sep = ' ';
            prevMoreIndented = false;
        }
    }
    switch (header.chomp) {
        case '-':
            break;
        case '+':
            for (let i = chompStart; i < lines.length; ++i)
                value += '\n' + lines[i][0].slice(trimIndent);
            if (value[value.length - 1] !== '\n')
                value += '\n';
            break;
        default:
            value += '\n';
    }
    const end = start + header.length + scalar.source.length;
    return { value, type, comment: header.comment, range: [start, end, end] };
}
function parseBlockScalarHeader({ offset, props }, strict, onError) {
    /* istanbul ignore if should not happen */
    if (props[0].type !== 'block-scalar-header') {
        onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');
        return null;
    }
    const { source } = props[0];
    const mode = source[0];
    let indent = 0;
    let chomp = '';
    let error = -1;
    for (let i = 1; i < source.length; ++i) {
        const ch = source[i];
        if (!chomp && (ch === '-' || ch === '+'))
            chomp = ch;
        else {
            const n = Number(ch);
            if (!indent && n)
                indent = n;
            else if (error === -1)
                error = offset + i;
        }
    }
    if (error !== -1)
        onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);
    let hasSpace = false;
    let comment = '';
    let length = source.length;
    for (let i = 1; i < props.length; ++i) {
        const token = props[i];
        switch (token.type) {
            case 'space':
                hasSpace = true;
            // fallthrough
            case 'newline':
                length += token.source.length;
                break;
            case 'comment':
                if (strict && !hasSpace) {
                    const message = 'Comments must be separated from other tokens by white space characters';
                    onError(token, 'MISSING_CHAR', message);
                }
                length += token.source.length;
                comment = token.source.substring(1);
                break;
            case 'error':
                onError(token, 'UNEXPECTED_TOKEN', token.message);
                length += token.source.length;
                break;
            /* istanbul ignore next should not happen */
            default: {
                const message = `Unexpected token in block scalar header: ${token.type}`;
                onError(token, 'UNEXPECTED_TOKEN', message);
                const ts = token.source;
                if (ts && typeof ts === 'string')
                    length += ts.length;
            }
        }
    }
    return { mode, indent, chomp, comment, length };
}
/** @returns Array of lines split up as `[indent, content]` */
function splitLines(source) {
    const split = source.split(/\n( *)/);
    const first = split[0];
    const m = first.match(/^( *)/);
    const line0 = (m === null || m === void 0 ? void 0 : m[1])
        ? [m[1], first.slice(m[1].length)]
        : ['', first];
    const lines = [line0];
    for (let i = 1; i < split.length; i += 2)
        lines.push([split[i], split[i + 1]]);
    return lines;
}

export { resolveBlockScalar };
import { YAMLSeq } from '../nodes/YAMLSeq.js';
import { resolveProps } from './resolve-props.js';
import { flowIndentCheck } from './util-flow-indent-check.js';

function resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError) {
    const seq = new YAMLSeq(ctx.schema);
    if (ctx.atRoot)
        ctx.atRoot = false;
    let offset = bs.offset;
    for (const { start, value } of bs.items) {
        const props = resolveProps(start, {
            indicator: 'seq-item-ind',
            next: value,
            offset,
            onError,
            startOnNewline: true
        });
        offset = props.end;
        if (!props.found) {
            if (props.anchor || props.tag || value) {
                if (value && value.type === 'block-seq')
                    onError(offset, 'BAD_INDENT', 'All sequence items must start at the same column');
                else
                    onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');
            }
            else {
                // TODO: assert being at last item?
                if (props.comment)
                    seq.comment = props.comment;
                continue;
            }
        }
        const node = value
            ? composeNode(ctx, value, props, onError)
            : composeEmptyNode(ctx, offset, start, null, props, onError);
        if (ctx.schema.compat)
            flowIndentCheck(bs.indent, value, onError);
        offset = node.range[2];
        seq.items.push(node);
    }
    seq.range = [bs.offset, offset, offset];
    return seq;
}

export { resolveBlockSeq };
function resolveEnd(end, offset, reqSpace, onError) {
    let comment = '';
    if (end) {
        let hasSpace = false;
        let sep = '';
        for (const token of end) {
            const { source, type } = token;
            switch (type) {
                case 'space':
                    hasSpace = true;
                    break;
                case 'comment': {
                    if (reqSpace && !hasSpace)
                        onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');
                    const cb = source.substring(1) || ' ';
                    if (!comment)
                        comment = cb;
                    else
                        comment += sep + cb;
                    sep = '';
                    break;
                }
                case 'newline':
                    if (comment)
                        sep += source;
                    hasSpace = true;
                    break;
                default:
                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);
            }
            offset += source.length;
        }
    }
    return { comment, offset };
}

export { resolveEnd };
import { isPair } from '../nodes/Node.js';
import { Pair } from '../nodes/Pair.js';
import { YAMLMap } from '../nodes/YAMLMap.js';
import { YAMLSeq } from '../nodes/YAMLSeq.js';
import { resolveEnd } from './resolve-end.js';
import { resolveProps } from './resolve-props.js';
import { containsNewline } from './util-contains-newline.js';
import { mapIncludes } from './util-map-includes.js';

const blockMsg = 'Block collections are not allowed within flow collections';
const isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');
function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError) {
    var _a;
    const isMap = fc.start.source === '{';
    const fcName = isMap ? 'flow map' : 'flow sequence';
    const coll = isMap
        ? new YAMLMap(ctx.schema)
        : new YAMLSeq(ctx.schema);
    coll.flow = true;
    const atRoot = ctx.atRoot;
    if (atRoot)
        ctx.atRoot = false;
    let offset = fc.offset + fc.start.source.length;
    for (let i = 0; i < fc.items.length; ++i) {
        const collItem = fc.items[i];
        const { start, key, sep, value } = collItem;
        const props = resolveProps(start, {
            flow: fcName,
            indicator: 'explicit-key-ind',
            next: key !== null && key !== void 0 ? key : sep === null || sep === void 0 ? void 0 : sep[0],
            offset,
            onError,
            startOnNewline: false
        });
        if (!props.found) {
            if (!props.anchor && !props.tag && !sep && !value) {
                if (i === 0 && props.comma)
                    onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);
                else if (i < fc.items.length - 1)
                    onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);
                if (props.comment) {
                    if (coll.comment)
                        coll.comment += '\n' + props.comment;
                    else
                        coll.comment = props.comment;
                }
                offset = props.end;
                continue;
            }
            if (!isMap && ctx.options.strict && containsNewline(key))
                onError(key, // checked by containsNewline()
                'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');
        }
        if (i === 0) {
            if (props.comma)
                onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);
        }
        else {
            if (!props.comma)
                onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);
            if (props.comment) {
                let prevItemComment = '';
                loop: for (const st of start) {
                    switch (st.type) {
                        case 'comma':
                        case 'space':
                            break;
                        case 'comment':
                            prevItemComment = st.source.substring(1);
                            break loop;
                        default:
                            break loop;
                    }
                }
                if (prevItemComment) {
                    let prev = coll.items[coll.items.length - 1];
                    if (isPair(prev))
                        prev = (_a = prev.value) !== null && _a !== void 0 ? _a : prev.key;
                    if (prev.comment)
                        prev.comment += '\n' + prevItemComment;
                    else
                        prev.comment = prevItemComment;
                    props.comment = props.comment.substring(prevItemComment.length + 1);
                }
            }
        }
        if (!isMap && !sep && !props.found) {
            // item is a value in a seq
            // â†’ key & sep are empty, start does not include ? or :
            const valueNode = value
                ? composeNode(ctx, value, props, onError)
                : composeEmptyNode(ctx, props.end, sep, null, props, onError);
            coll.items.push(valueNode);
            offset = valueNode.range[2];
            if (isBlock(value))
                onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);
        }
        else {
            // item is a key+value pair
            // key value
            const keyStart = props.end;
            const keyNode = key
                ? composeNode(ctx, key, props, onError)
                : composeEmptyNode(ctx, keyStart, start, null, props, onError);
            if (isBlock(key))
                onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);
            // value properties
            const valueProps = resolveProps(sep !== null && sep !== void 0 ? sep : [], {
                flow: fcName,
                indicator: 'map-value-ind',
                next: value,
                offset: keyNode.range[2],
                onError,
                startOnNewline: false
            });
            if (valueProps.found) {
                if (!isMap && !props.found && ctx.options.strict) {
                    if (sep)
                        for (const st of sep) {
                            if (st === valueProps.found)
                                break;
                            if (st.type === 'newline') {
                                onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');
                                break;
                            }
                        }
                    if (props.start < valueProps.found.offset - 1024)
                        onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');
                }
            }
            else if (value) {
                if ('source' in value && value.source && value.source[0] === ':')
                    onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);
                else
                    onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);
            }
            // value value
            const valueNode = value
                ? composeNode(ctx, value, valueProps, onError)
                : valueProps.found
                    ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)
                    : null;
            if (valueNode) {
                if (isBlock(value))
                    onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);
            }
            else if (valueProps.comment) {
                if (keyNode.comment)
                    keyNode.comment += '\n' + valueProps.comment;
                else
                    keyNode.comment = valueProps.comment;
            }
            const pair = new Pair(keyNode, valueNode);
            if (ctx.options.keepSourceTokens)
                pair.srcToken = collItem;
            if (isMap) {
                const map = coll;
                if (mapIncludes(ctx, map.items, keyNode))
                    onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');
                map.items.push(pair);
            }
            else {
                const map = new YAMLMap(ctx.schema);
                map.flow = true;
                map.items.push(pair);
                coll.items.push(map);
            }
            offset = valueNode ? valueNode.range[2] : valueProps.end;
        }
    }
    const expectedEnd = isMap ? '}' : ']';
    const [ce, ...ee] = fc.end;
    let cePos = offset;
    if (ce && ce.source === expectedEnd)
        cePos = ce.offset + ce.source.length;
    else {
        const name = fcName[0].toUpperCase() + fcName.substring(1);
        const msg = atRoot
            ? `${name} must end with a ${expectedEnd}`
            : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;
        onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);
        if (ce && ce.source.length !== 1)
            ee.unshift(ce);
    }
    if (ee.length > 0) {
        const end = resolveEnd(ee, cePos, ctx.options.strict, onError);
        if (end.comment) {
            if (coll.comment)
                coll.comment += '\n' + end.comment;
            else
                coll.comment = end.comment;
        }
        coll.range = [fc.offset, cePos, end.offset];
    }
    else {
        coll.range = [fc.offset, cePos, cePos];
    }
    return coll;
}

export { resolveFlowCollection };
import { Scalar } from '../nodes/Scalar.js';
import { resolveEnd } from './resolve-end.js';

function resolveFlowScalar(scalar, strict, onError) {
    const { offset, type, source, end } = scalar;
    let _type;
    let value;
    const _onError = (rel, code, msg) => onError(offset + rel, code, msg);
    switch (type) {
        case 'scalar':
            _type = Scalar.PLAIN;
            value = plainValue(source, _onError);
            break;
        case 'single-quoted-scalar':
            _type = Scalar.QUOTE_SINGLE;
            value = singleQuotedValue(source, _onError);
            break;
        case 'double-quoted-scalar':
            _type = Scalar.QUOTE_DOUBLE;
            value = doubleQuotedValue(source, _onError);
            break;
        /* istanbul ignore next should not happen */
        default:
            onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);
            return {
                value: '',
                type: null,
                comment: '',
                range: [offset, offset + source.length, offset + source.length]
            };
    }
    const valueEnd = offset + source.length;
    const re = resolveEnd(end, valueEnd, strict, onError);
    return {
        value,
        type: _type,
        comment: re.comment,
        range: [offset, valueEnd, re.offset]
    };
}
function plainValue(source, onError) {
    let badChar = '';
    switch (source[0]) {
        /* istanbul ignore next should not happen */
        case '\t':
            badChar = 'a tab character';
            break;
        case ',':
            badChar = 'flow indicator character ,';
            break;
        case '%':
            badChar = 'directive indicator character %';
            break;
        case '|':
        case '>': {
            badChar = `block scalar indicator ${source[0]}`;
            break;
        }
        case '@':
        case '`': {
            badChar = `reserved character ${source[0]}`;
            break;
        }
    }
    if (badChar)
        onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);
    return foldLines(source);
}
function singleQuotedValue(source, onError) {
    if (source[source.length - 1] !== "'" || source.length === 1)
        onError(source.length, 'MISSING_CHAR', "Missing closing 'quote");
    return foldLines(source.slice(1, -1)).replace(/''/g, "'");
}
function foldLines(source) {
    var _a;
    /**
     * The negative lookbehind here and in the `re` RegExp is to
     * prevent causing a polynomial search time in certain cases.
     *
     * The try-catch is for Safari, which doesn't support this yet:
     * https://caniuse.com/js-regexp-lookbehind
     */
    let first, line;
    try {
        first = new RegExp('(.*?)(?<![ \t])[ \t]*\r?\n', 'sy');
        line = new RegExp('[ \t]*(.*?)(?:(?<![ \t])[ \t]*)?\r?\n', 'sy');
    }
    catch (_) {
        first = /(.*?)[ \t]*\r?\n/sy;
        line = /[ \t]*(.*?)[ \t]*\r?\n/sy;
    }
    let match = first.exec(source);
    if (!match)
        return source;
    let res = match[1];
    let sep = ' ';
    let pos = first.lastIndex;
    line.lastIndex = pos;
    while ((match = line.exec(source))) {
        if (match[1] === '') {
            if (sep === '\n')
                res += sep;
            else
                sep = '\n';
        }
        else {
            res += sep + match[1];
            sep = ' ';
        }
        pos = line.lastIndex;
    }
    const last = /[ \t]*(.*)/sy;
    last.lastIndex = pos;
    match = last.exec(source);
    return res + sep + ((_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : '');
}
function doubleQuotedValue(source, onError) {
    let res = '';
    for (let i = 1; i < source.length - 1; ++i) {
        const ch = source[i];
        if (ch === '\r' && source[i + 1] === '\n')
            continue;
        if (ch === '\n') {
            const { fold, offset } = foldNewline(source, i);
            res += fold;
            i = offset;
        }
        else if (ch === '\\') {
            let next = source[++i];
            const cc = escapeCodes[next];
            if (cc)
                res += cc;
            else if (next === '\n') {
                // skip escaped newlines, but still trim the following line
                next = source[i + 1];
                while (next === ' ' || next === '\t')
                    next = source[++i + 1];
            }
            else if (next === '\r' && source[i + 1] === '\n') {
                // skip escaped CRLF newlines, but still trim the following line
                next = source[++i + 1];
                while (next === ' ' || next === '\t')
                    next = source[++i + 1];
            }
            else if (next === 'x' || next === 'u' || next === 'U') {
                const length = { x: 2, u: 4, U: 8 }[next];
                res += parseCharCode(source, i + 1, length, onError);
                i += length;
            }
            else {
                const raw = source.substr(i - 1, 2);
                onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);
                res += raw;
            }
        }
        else if (ch === ' ' || ch === '\t') {
            // trim trailing whitespace
            const wsStart = i;
            let next = source[i + 1];
            while (next === ' ' || next === '\t')
                next = source[++i + 1];
            if (next !== '\n' && !(next === '\r' && source[i + 2] === '\n'))
                res += i > wsStart ? source.slice(wsStart, i + 1) : ch;
        }
        else {
            res += ch;
        }
    }
    if (source[source.length - 1] !== '"' || source.length === 1)
        onError(source.length, 'MISSING_CHAR', 'Missing closing "quote');
    return res;
}
/**
 * Fold a single newline into a space, multiple newlines to N - 1 newlines.
 * Presumes `source[offset] === '\n'`
 */
function foldNewline(source, offset) {
    let fold = '';
    let ch = source[offset + 1];
    while (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r') {
        if (ch === '\r' && source[offset + 2] !== '\n')
            break;
        if (ch === '\n')
            fold += '\n';
        offset += 1;
        ch = source[offset + 1];
    }
    if (!fold)
        fold = ' ';
    return { fold, offset };
}
const escapeCodes = {
    '0': '\0',
    a: '\x07',
    b: '\b',
    e: '\x1b',
    f: '\f',
    n: '\n',
    r: '\r',
    t: '\t',
    v: '\v',
    N: '\u0085',
    _: '\u00a0',
    L: '\u2028',
    P: '\u2029',
    ' ': ' ',
    '"': '"',
    '/': '/',
    '\\': '\\',
    '\t': '\t'
};
function parseCharCode(source, offset, length, onError) {
    const cc = source.substr(offset, length);
    const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);
    const code = ok ? parseInt(cc, 16) : NaN;
    if (isNaN(code)) {
        const raw = source.substr(offset - 2, length + 2);
        onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);
        return raw;
    }
    return String.fromCodePoint(code);
}

export { resolveFlowScalar };
function resolveProps(tokens, { flow, indicator, next, offset, onError, startOnNewline }) {
    let spaceBefore = false;
    let atNewline = startOnNewline;
    let hasSpace = startOnNewline;
    let comment = '';
    let commentSep = '';
    let hasNewline = false;
    let hasNewlineAfterProp = false;
    let reqSpace = false;
    let anchor = null;
    let tag = null;
    let comma = null;
    let found = null;
    let start = null;
    for (const token of tokens) {
        if (reqSpace) {
            if (token.type !== 'space' &&
                token.type !== 'newline' &&
                token.type !== 'comma')
                onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');
            reqSpace = false;
        }
        switch (token.type) {
            case 'space':
                // At the doc level, tabs at line start may be parsed
                // as leading white space rather than indentation.
                // In a flow collection, only the parser handles indent.
                if (!flow &&
                    atNewline &&
                    indicator !== 'doc-start' &&
                    token.source[0] === '\t')
                    onError(token, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');
                hasSpace = true;
                break;
            case 'comment': {
                if (!hasSpace)
                    onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');
                const cb = token.source.substring(1) || ' ';
                if (!comment)
                    comment = cb;
                else
                    comment += commentSep + cb;
                commentSep = '';
                atNewline = false;
                break;
            }
            case 'newline':
                if (atNewline) {
                    if (comment)
                        comment += token.source;
                    else
                        spaceBefore = true;
                }
                else
                    commentSep += token.source;
                atNewline = true;
                hasNewline = true;
                if (anchor || tag)
                    hasNewlineAfterProp = true;
                hasSpace = true;
                break;
            case 'anchor':
                if (anchor)
                    onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');
                if (token.source.endsWith(':'))
                    onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);
                anchor = token;
                if (start === null)
                    start = token.offset;
                atNewline = false;
                hasSpace = false;
                reqSpace = true;
                break;
            case 'tag': {
                if (tag)
                    onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');
                tag = token;
                if (start === null)
                    start = token.offset;
                atNewline = false;
                hasSpace = false;
                reqSpace = true;
                break;
            }
            case indicator:
                // Could here handle preceding comments differently
                if (anchor || tag)
                    onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);
                if (found)
                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow !== null && flow !== void 0 ? flow : 'collection'}`);
                found = token;
                atNewline = false;
                hasSpace = false;
                break;
            case 'comma':
                if (flow) {
                    if (comma)
                        onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);
                    comma = token;
                    atNewline = false;
                    hasSpace = false;
                    break;
                }
            // else fallthrough
            default:
                onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);
                atNewline = false;
                hasSpace = false;
        }
    }
    const last = tokens[tokens.length - 1];
    const end = last ? last.offset + last.source.length : offset;
    if (reqSpace &&
        next &&
        next.type !== 'space' &&
        next.type !== 'newline' &&
        next.type !== 'comma' &&
        (next.type !== 'scalar' || next.source !== ''))
        onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');
    return {
        comma,
        found,
        spaceBefore,
        comment,
        hasNewline,
        hasNewlineAfterProp,
        anchor,
        tag,
        end,
        start: start !== null && start !== void 0 ? start : end
    };
}

export { resolveProps };
function containsNewline(key) {
    if (!key)
        return null;
    switch (key.type) {
        case 'alias':
        case 'scalar':
        case 'double-quoted-scalar':
        case 'single-quoted-scalar':
            if (key.source.includes('\n'))
                return true;
            if (key.end)
                for (const st of key.end)
                    if (st.type === 'newline')
                        return true;
            return false;
        case 'flow-collection':
            for (const it of key.items) {
                for (const st of it.start)
                    if (st.type === 'newline')
                        return true;
                if (it.sep)
                    for (const st of it.sep)
                        if (st.type === 'newline')
                            return true;
                if (containsNewline(it.key) || containsNewline(it.value))
                    return true;
            }
            return false;
        default:
            return true;
    }
}

export { containsNewline };
function emptyScalarPosition(offset, before, pos) {
    if (before) {
        if (pos === null)
            pos = before.length;
        for (let i = pos - 1; i >= 0; --i) {
            let st = before[i];
            switch (st.type) {
                case 'space':
                case 'comment':
                case 'newline':
                    offset -= st.source.length;
                    continue;
            }
            // Technically, an empty scalar is immediately after the last non-empty
            // node, but it's more useful to place it after any whitespace.
            st = before[++i];
            while ((st === null || st === void 0 ? void 0 : st.type) === 'space') {
                offset += st.source.length;
                st = before[++i];
            }
            break;
        }
    }
    return offset;
}

export { emptyScalarPosition };
import { containsNewline } from './util-contains-newline.js';

function flowIndentCheck(indent, fc, onError) {
    if ((fc === null || fc === void 0 ? void 0 : fc.type) === 'flow-collection') {
        const end = fc.end[0];
        if (end.indent === indent &&
            (end.source === ']' || end.source === '}') &&
            containsNewline(fc)) {
            const msg = 'Flow end indicator should be more indented than parent';
            onError(end, 'BAD_INDENT', msg, true);
        }
    }
}

export { flowIndentCheck };
import { isScalar } from '../nodes/Node.js';

function mapIncludes(ctx, items, search) {
    const { uniqueKeys } = ctx.options;
    if (uniqueKeys === false)
        return false;
    const isEqual = typeof uniqueKeys === 'function'
        ? uniqueKeys
        : (a, b) => a === b ||
            (isScalar(a) &&
                isScalar(b) &&
                a.value === b.value &&
                !(a.value === '<<' && ctx.schema.merge));
    return items.some(pair => isEqual(pair.key, search));
}

export { mapIncludes };
import { isScalar, isCollection } from '../nodes/Node.js';
import { visit } from '../visit.js';

/**
 * Verify that the input string is a valid anchor.
 *
 * Will throw on errors.
 */
function anchorIsValid(anchor) {
    if (/[\x00-\x19\s,[\]{}]/.test(anchor)) {
        const sa = JSON.stringify(anchor);
        const msg = `Anchor must not contain whitespace or control characters: ${sa}`;
        throw new Error(msg);
    }
    return true;
}
function anchorNames(root) {
    const anchors = new Set();
    visit(root, {
        Value(_key, node) {
            if (node.anchor)
                anchors.add(node.anchor);
        }
    });
    return anchors;
}
/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */
function findNewAnchor(prefix, exclude) {
    for (let i = 1; true; ++i) {
        const name = `${prefix}${i}`;
        if (!exclude.has(name))
            return name;
    }
}
function createNodeAnchors(doc, prefix) {
    const aliasObjects = [];
    const sourceObjects = new Map();
    let prevAnchors = null;
    return {
        onAnchor: (source) => {
            aliasObjects.push(source);
            if (!prevAnchors)
                prevAnchors = anchorNames(doc);
            const anchor = findNewAnchor(prefix, prevAnchors);
            prevAnchors.add(anchor);
            return anchor;
        },
        /**
         * With circular references, the source node is only resolved after all
         * of its child nodes are. This is why anchors are set only after all of
         * the nodes have been created.
         */
        setAnchors: () => {
            for (const source of aliasObjects) {
                const ref = sourceObjects.get(source);
                if (typeof ref === 'object' &&
                    ref.anchor &&
                    (isScalar(ref.node) || isCollection(ref.node))) {
                    ref.node.anchor = ref.anchor;
                }
                else {
                    const error = new Error('Failed to resolve repeated object (this should not happen)');
                    error.source = source;
                    throw error;
                }
            }
        },
        sourceObjects
    };
}

export { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };
/**
 * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,
 * in section 24.5.1.1 "Runtime Semantics: InternalizeJSONProperty" of the
 * 2021 edition: https://tc39.es/ecma262/#sec-json.parse
 *
 * Includes extensions for handling Map and Set objects.
 */
function applyReviver(reviver, obj, key, val) {
    if (val && typeof val === 'object') {
        if (Array.isArray(val)) {
            for (let i = 0, len = val.length; i < len; ++i) {
                const v0 = val[i];
                const v1 = applyReviver(reviver, val, String(i), v0);
                if (v1 === undefined)
                    delete val[i];
                else if (v1 !== v0)
                    val[i] = v1;
            }
        }
        else if (val instanceof Map) {
            for (const k of Array.from(val.keys())) {
                const v0 = val.get(k);
                const v1 = applyReviver(reviver, val, k, v0);
                if (v1 === undefined)
                    val.delete(k);
                else if (v1 !== v0)
                    val.set(k, v1);
            }
        }
        else if (val instanceof Set) {
            for (const v0 of Array.from(val)) {
                const v1 = applyReviver(reviver, val, v0, v0);
                if (v1 === undefined)
                    val.delete(v0);
                else if (v1 !== v0) {
                    val.delete(v0);
                    val.add(v1);
                }
            }
        }
        else {
            for (const [k, v0] of Object.entries(val)) {
                const v1 = applyReviver(reviver, val, k, v0);
                if (v1 === undefined)
                    delete val[k];
                else if (v1 !== v0)
                    val[k] = v1;
            }
        }
    }
    return reviver.call(obj, key, val);
}

export { applyReviver };
import { Alias } from '../nodes/Alias.js';
import { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/Node.js';
import { Scalar } from '../nodes/Scalar.js';

const defaultTagPrefix = 'tag:yaml.org,2002:';
function findTagObject(value, tagName, tags) {
    var _a;
    if (tagName) {
        const match = tags.filter(t => t.tag === tagName);
        const tagObj = (_a = match.find(t => !t.format)) !== null && _a !== void 0 ? _a : match[0];
        if (!tagObj)
            throw new Error(`Tag ${tagName} not found`);
        return tagObj;
    }
    return tags.find(t => { var _a; return ((_a = t.identify) === null || _a === void 0 ? void 0 : _a.call(t, value)) && !t.format; });
}
function createNode(value, tagName, ctx) {
    var _a, _b;
    if (isDocument(value))
        value = value.contents;
    if (isNode(value))
        return value;
    if (isPair(value)) {
        const map = (_b = (_a = ctx.schema[MAP]).createNode) === null || _b === void 0 ? void 0 : _b.call(_a, ctx.schema, null, ctx);
        map.items.push(value);
        return map;
    }
    if (value instanceof String ||
        value instanceof Number ||
        value instanceof Boolean ||
        (typeof BigInt === 'function' && value instanceof BigInt) // not supported everywhere
    ) {
        // https://tc39.es/ecma262/#sec-serializejsonproperty
        value = value.valueOf();
    }
    const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;
    // Detect duplicate references to the same object & use Alias nodes for all
    // after first. The `ref` wrapper allows for circular references to resolve.
    let ref = undefined;
    if (aliasDuplicateObjects && value && typeof value === 'object') {
        ref = sourceObjects.get(value);
        if (ref) {
            if (!ref.anchor)
                ref.anchor = onAnchor(value);
            return new Alias(ref.anchor);
        }
        else {
            ref = { anchor: null, node: null };
            sourceObjects.set(value, ref);
        }
    }
    if (tagName === null || tagName === void 0 ? void 0 : tagName.startsWith('!!'))
        tagName = defaultTagPrefix + tagName.slice(2);
    let tagObj = findTagObject(value, tagName, schema.tags);
    if (!tagObj) {
        if (value && typeof value.toJSON === 'function') {
            // eslint-disable-next-line @typescript-eslint/no-unsafe-call
            value = value.toJSON();
        }
        if (!value || typeof value !== 'object') {
            const node = new Scalar(value);
            if (ref)
                ref.node = node;
            return node;
        }
        tagObj =
            value instanceof Map
                ? schema[MAP]
                : Symbol.iterator in Object(value)
                    ? schema[SEQ]
                    : schema[MAP];
    }
    if (onTagObj) {
        onTagObj(tagObj);
        delete ctx.onTagObj;
    }
    const node = (tagObj === null || tagObj === void 0 ? void 0 : tagObj.createNode)
        ? tagObj.createNode(ctx.schema, value, ctx)
        : new Scalar(value);
    if (tagName)
        node.tag = tagName;
    if (ref)
        ref.node = node;
    return node;
}

export { createNode };
import { isNode } from '../nodes/Node.js';
import { visit } from '../visit.js';

const escapeChars = {
    '!': '%21',
    ',': '%2C',
    '[': '%5B',
    ']': '%5D',
    '{': '%7B',
    '}': '%7D'
};
const escapeTagName = (tn) => tn.replace(/[!,[\]{}]/g, ch => escapeChars[ch]);
class Directives {
    constructor(yaml, tags) {
        /**
         * The directives-end/doc-start marker `---`. If `null`, a marker may still be
         * included in the document's stringified representation.
         */
        this.docStart = null;
        /** The doc-end marker `...`.  */
        this.docEnd = false;
        this.yaml = Object.assign({}, Directives.defaultYaml, yaml);
        this.tags = Object.assign({}, Directives.defaultTags, tags);
    }
    clone() {
        const copy = new Directives(this.yaml, this.tags);
        copy.docStart = this.docStart;
        return copy;
    }
    /**
     * During parsing, get a Directives instance for the current document and
     * update the stream state according to the current version's spec.
     */
    atDocument() {
        const res = new Directives(this.yaml, this.tags);
        switch (this.yaml.version) {
            case '1.1':
                this.atNextDocument = true;
                break;
            case '1.2':
                this.atNextDocument = false;
                this.yaml = {
                    explicit: Directives.defaultYaml.explicit,
                    version: '1.2'
                };
                this.tags = Object.assign({}, Directives.defaultTags);
                break;
        }
        return res;
    }
    /**
     * @param onError - May be called even if the action was successful
     * @returns `true` on success
     */
    add(line, onError) {
        if (this.atNextDocument) {
            this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };
            this.tags = Object.assign({}, Directives.defaultTags);
            this.atNextDocument = false;
        }
        const parts = line.trim().split(/[ \t]+/);
        const name = parts.shift();
        switch (name) {
            case '%TAG': {
                if (parts.length !== 2) {
                    onError(0, '%TAG directive should contain exactly two parts');
                    if (parts.length < 2)
                        return false;
                }
                const [handle, prefix] = parts;
                this.tags[handle] = prefix;
                return true;
            }
            case '%YAML': {
                this.yaml.explicit = true;
                if (parts.length !== 1) {
                    onError(0, '%YAML directive should contain exactly one part');
                    return false;
                }
                const [version] = parts;
                if (version === '1.1' || version === '1.2') {
                    this.yaml.version = version;
                    return true;
                }
                else {
                    const isValid = /^\d+\.\d+$/.test(version);
                    onError(6, `Unsupported YAML version ${version}`, isValid);
                    return false;
                }
            }
            default:
                onError(0, `Unknown directive ${name}`, true);
                return false;
        }
    }
    /**
     * Resolves a tag, matching handles to those defined in %TAG directives.
     *
     * @returns Resolved tag, which may also be the non-specific tag `'!'` or a
     *   `'!local'` tag, or `null` if unresolvable.
     */
    tagName(source, onError) {
        if (source === '!')
            return '!'; // non-specific tag
        if (source[0] !== '!') {
            onError(`Not a valid tag: ${source}`);
            return null;
        }
        if (source[1] === '<') {
            const verbatim = source.slice(2, -1);
            if (verbatim === '!' || verbatim === '!!') {
                onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);
                return null;
            }
            if (source[source.length - 1] !== '>')
                onError('Verbatim tags must end with a >');
            return verbatim;
        }
        const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/);
        if (!suffix)
            onError(`The ${source} tag has no suffix`);
        const prefix = this.tags[handle];
        if (prefix)
            return prefix + decodeURIComponent(suffix);
        if (handle === '!')
            return source; // local tag
        onError(`Could not resolve tag: ${source}`);
        return null;
    }
    /**
     * Given a fully resolved tag, returns its printable string form,
     * taking into account current tag prefixes and defaults.
     */
    tagString(tag) {
        for (const [handle, prefix] of Object.entries(this.tags)) {
            if (tag.startsWith(prefix))
                return handle + escapeTagName(tag.substring(prefix.length));
        }
        return tag[0] === '!' ? tag : `!<${tag}>`;
    }
    toString(doc) {
        const lines = this.yaml.explicit
            ? [`%YAML ${this.yaml.version || '1.2'}`]
            : [];
        const tagEntries = Object.entries(this.tags);
        let tagNames;
        if (doc && tagEntries.length > 0 && isNode(doc.contents)) {
            const tags = {};
            visit(doc.contents, (_key, node) => {
                if (isNode(node) && node.tag)
                    tags[node.tag] = true;
            });
            tagNames = Object.keys(tags);
        }
        else
            tagNames = [];
        for (const [handle, prefix] of tagEntries) {
            if (handle === '!!' && prefix === 'tag:yaml.org,2002:')
                continue;
            if (!doc || tagNames.some(tn => tn.startsWith(prefix)))
                lines.push(`%TAG ${handle} ${prefix}`);
        }
        return lines.join('\n');
    }
}
Directives.defaultYaml = { explicit: false, version: '1.2' };
Directives.defaultTags = { '!!': 'tag:yaml.org,2002:' };

export { Directives };
import { Alias } from '../nodes/Alias.js';
import { isEmptyPath, collectionFromPath } from '../nodes/Collection.js';
import { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/Node.js';
import { Pair } from '../nodes/Pair.js';
import { toJS } from '../nodes/toJS.js';
import { Schema } from '../schema/Schema.js';
import { stringify } from '../stringify/stringify.js';
import { stringifyDocument } from '../stringify/stringifyDocument.js';
import { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js';
import { applyReviver } from './applyReviver.js';
import { createNode } from './createNode.js';
import { Directives } from './directives.js';

class Document {
    constructor(value, replacer, options) {
        /** A comment before this Document */
        this.commentBefore = null;
        /** A comment immediately after this Document */
        this.comment = null;
        /** Errors encountered during parsing. */
        this.errors = [];
        /** Warnings encountered during parsing. */
        this.warnings = [];
        Object.defineProperty(this, NODE_TYPE, { value: DOC });
        let _replacer = null;
        if (typeof replacer === 'function' || Array.isArray(replacer)) {
            _replacer = replacer;
        }
        else if (options === undefined && replacer) {
            options = replacer;
            replacer = undefined;
        }
        const opt = Object.assign({
            intAsBigInt: false,
            keepSourceTokens: false,
            logLevel: 'warn',
            prettyErrors: true,
            strict: true,
            uniqueKeys: true,
            version: '1.2'
        }, options);
        this.options = opt;
        let { version } = opt;
        if (options === null || options === void 0 ? void 0 : options.directives) {
            this.directives = options.directives.atDocument();
            if (this.directives.yaml.explicit)
                version = this.directives.yaml.version;
        }
        else
            this.directives = new Directives({ version });
        this.setSchema(version, options);
        if (value === undefined)
            this.contents = null;
        else {
            this.contents = this.createNode(value, _replacer, options);
        }
    }
    /**
     * Create a deep copy of this Document and its contents.
     *
     * Custom Node values that inherit from `Object` still refer to their original instances.
     */
    clone() {
        const copy = Object.create(Document.prototype, {
            [NODE_TYPE]: { value: DOC }
        });
        copy.commentBefore = this.commentBefore;
        copy.comment = this.comment;
        copy.errors = this.errors.slice();
        copy.warnings = this.warnings.slice();
        copy.options = Object.assign({}, this.options);
        if (this.directives)
            copy.directives = this.directives.clone();
        copy.schema = this.schema.clone();
        copy.contents = isNode(this.contents)
            ? this.contents.clone(copy.schema)
            : this.contents;
        if (this.range)
            copy.range = this.range.slice();
        return copy;
    }
    /** Adds a value to the document. */
    add(value) {
        if (assertCollection(this.contents))
            this.contents.add(value);
    }
    /** Adds a value to the document. */
    addIn(path, value) {
        if (assertCollection(this.contents))
            this.contents.addIn(path, value);
    }
    /**
     * Create a new `Alias` node, ensuring that the target `node` has the required anchor.
     *
     * If `node` already has an anchor, `name` is ignored.
     * Otherwise, the `node.anchor` value will be set to `name`,
     * or if an anchor with that name is already present in the document,
     * `name` will be used as a prefix for a new unique anchor.
     * If `name` is undefined, the generated anchor will use 'a' as a prefix.
     */
    createAlias(node, name) {
        if (!node.anchor) {
            const prev = anchorNames(this);
            node.anchor =
                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
                !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;
        }
        return new Alias(node.anchor);
    }
    createNode(value, replacer, options) {
        let _replacer = undefined;
        if (typeof replacer === 'function') {
            value = replacer.call({ '': value }, '', value);
            _replacer = replacer;
        }
        else if (Array.isArray(replacer)) {
            const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;
            const asStr = replacer.filter(keyToStr).map(String);
            if (asStr.length > 0)
                replacer = replacer.concat(asStr);
            _replacer = replacer;
        }
        else if (options === undefined && replacer) {
            options = replacer;
            replacer = undefined;
        }
        const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options !== null && options !== void 0 ? options : {};
        const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, 
        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
        anchorPrefix || 'a');
        const ctx = {
            aliasDuplicateObjects: aliasDuplicateObjects !== null && aliasDuplicateObjects !== void 0 ? aliasDuplicateObjects : true,
            keepUndefined: keepUndefined !== null && keepUndefined !== void 0 ? keepUndefined : false,
            onAnchor,
            onTagObj,
            replacer: _replacer,
            schema: this.schema,
            sourceObjects
        };
        const node = createNode(value, tag, ctx);
        if (flow && isCollection(node))
            node.flow = true;
        setAnchors();
        return node;
    }
    /**
     * Convert a key and a value into a `Pair` using the current schema,
     * recursively wrapping all values as `Scalar` or `Collection` nodes.
     */
    createPair(key, value, options = {}) {
        const k = this.createNode(key, null, options);
        const v = this.createNode(value, null, options);
        return new Pair(k, v);
    }
    /**
     * Removes a value from the document.
     * @returns `true` if the item was found and removed.
     */
    delete(key) {
        return assertCollection(this.contents) ? this.contents.delete(key) : false;
    }
    /**
     * Removes a value from the document.
     * @returns `true` if the item was found and removed.
     */
    deleteIn(path) {
        if (isEmptyPath(path)) {
            if (this.contents == null)
                return false;
            this.contents = null;
            return true;
        }
        return assertCollection(this.contents)
            ? this.contents.deleteIn(path)
            : false;
    }
    /**
     * Returns item at `key`, or `undefined` if not found. By default unwraps
     * scalar values from their surrounding node; to disable set `keepScalar` to
     * `true` (collections are always returned intact).
     */
    get(key, keepScalar) {
        return isCollection(this.contents)
            ? this.contents.get(key, keepScalar)
            : undefined;
    }
    /**
     * Returns item at `path`, or `undefined` if not found. By default unwraps
     * scalar values from their surrounding node; to disable set `keepScalar` to
     * `true` (collections are always returned intact).
     */
    getIn(path, keepScalar) {
        if (isEmptyPath(path))
            return !keepScalar && isScalar(this.contents)
                ? this.contents.value
                : this.contents;
        return isCollection(this.contents)
            ? this.contents.getIn(path, keepScalar)
            : undefined;
    }
    /**
     * Checks if the document includes a value with the key `key`.
     */
    has(key) {
        return isCollection(this.contents) ? this.contents.has(key) : false;
    }
    /**
     * Checks if the document includes a value at `path`.
     */
    hasIn(path) {
        if (isEmptyPath(path))
            return this.contents !== undefined;
        return isCollection(this.contents) ? this.contents.hasIn(path) : false;
    }
    /**
     * Sets a value in this document. For `!!set`, `value` needs to be a
     * boolean to add/remove the item from the set.
     */
    set(key, value) {
        if (this.contents == null) {
            this.contents = collectionFromPath(this.schema, [key], value);
        }
        else if (assertCollection(this.contents)) {
            this.contents.set(key, value);
        }
    }
    /**
     * Sets a value in this document. For `!!set`, `value` needs to be a
     * boolean to add/remove the item from the set.
     */
    setIn(path, value) {
        if (isEmptyPath(path))
            this.contents = value;
        else if (this.contents == null) {
            this.contents = collectionFromPath(this.schema, Array.from(path), value);
        }
        else if (assertCollection(this.contents)) {
            this.contents.setIn(path, value);
        }
    }
    /**
     * Change the YAML version and schema used by the document.
     * A `null` version disables support for directives, explicit tags, anchors, and aliases.
     * It also requires the `schema` option to be given as a `Schema` instance value.
     *
     * Overrides all previously set schema options.
     */
    setSchema(version, options = {}) {
        if (typeof version === 'number')
            version = String(version);
        let opt;
        switch (version) {
            case '1.1':
                if (this.directives)
                    this.directives.yaml.version = '1.1';
                else
                    this.directives = new Directives({ version: '1.1' });
                opt = { merge: true, resolveKnownTags: false, schema: 'yaml-1.1' };
                break;
            case '1.2':
            case 'next':
                if (this.directives)
                    this.directives.yaml.version = version;
                else
                    this.directives = new Directives({ version });
                opt = { merge: false, resolveKnownTags: true, schema: 'core' };
                break;
            case null:
                if (this.directives)
                    delete this.directives;
                opt = null;
                break;
            default: {
                const sv = JSON.stringify(version);
                throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);
            }
        }
        // Not using `instanceof Schema` to allow for duck typing
        if (options.schema instanceof Object)
            this.schema = options.schema;
        else if (opt)
            this.schema = new Schema(Object.assign(opt, options));
        else
            throw new Error(`With a null YAML version, the { schema: Schema } option is required`);
    }
    // json & jsonArg are only used from toJSON()
    toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {
        const ctx = {
            anchors: new Map(),
            doc: this,
            keep: !json,
            mapAsMap: mapAsMap === true,
            mapKeyWarned: false,
            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100,
            stringify
        };
        const res = toJS(this.contents, jsonArg !== null && jsonArg !== void 0 ? jsonArg : '', ctx);
        if (typeof onAnchor === 'function')
            for (const { count, res } of ctx.anchors.values())
                onAnchor(res, count);
        return typeof reviver === 'function'
            ? applyReviver(reviver, { '': res }, '', res)
            : res;
    }
    /**
     * A JSON representation of the document `contents`.
     *
     * @param jsonArg Used by `JSON.stringify` to indicate the array index or
     *   property name.
     */
    toJSON(jsonArg, onAnchor) {
        return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });
    }
    /** A YAML representation of the document. */
    toString(options = {}) {
        if (this.errors.length > 0)
            throw new Error('Document with errors cannot be stringified');
        if ('indent' in options &&
            (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {
            const s = JSON.stringify(options.indent);
            throw new Error(`"indent" option must be a positive integer, not ${s}`);
        }
        return stringifyDocument(this, options);
    }
}
function assertCollection(contents) {
    if (isCollection(contents))
        return true;
    throw new Error('Expected a YAML collection as document contents');
}

export { Document };
class YAMLError extends Error {
    constructor(name, pos, code, message) {
        super();
        this.name = name;
        this.code = code;
        this.message = message;
        this.pos = pos;
    }
}
class YAMLParseError extends YAMLError {
    constructor(pos, code, message) {
        super('YAMLParseError', pos, code, message);
    }
}
class YAMLWarning extends YAMLError {
    constructor(pos, code, message) {
        super('YAMLWarning', pos, code, message);
    }
}
const prettifyError = (src, lc) => (error) => {
    if (error.pos[0] === -1)
        return;
    error.linePos = error.pos.map(pos => lc.linePos(pos));
    const { line, col } = error.linePos[0];
    error.message += ` at line ${line}, column ${col}`;
    let ci = col - 1;
    let lineStr = src
        .substring(lc.lineStarts[line - 1], lc.lineStarts[line])
        .replace(/[\n\r]+$/, '');
    // Trim to max 80 chars, keeping col position near the middle
    if (ci >= 60 && lineStr.length > 80) {
        const trimStart = Math.min(ci - 39, lineStr.length - 79);
        lineStr = 'â€¦' + lineStr.substring(trimStart);
        ci -= trimStart - 1;
    }
    if (lineStr.length > 80)
        lineStr = lineStr.substring(0, 79) + 'â€¦';
    // Include previous line in context if pointing at line start
    if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {
        // Regexp won't match if start is trimmed
        let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);
        if (prev.length > 80)
            prev = prev.substring(0, 79) + 'â€¦\n';
        lineStr = prev + lineStr;
    }
    if (/[^ ]/.test(lineStr)) {
        let count = 1;
        const end = error.linePos[1];
        if (end && end.line === line && end.col > col) {
            count = Math.min(end.col - col, 80 - ci);
        }
        const pointer = ' '.repeat(ci) + '^'.repeat(count);
        error.message += `:\n\n${lineStr}\n${pointer}\n`;
    }
};

export { YAMLError, YAMLParseError, YAMLWarning, prettifyError };
export { Composer } from './compose/composer.js';
export { Document } from './doc/Document.js';
export { Schema } from './schema/Schema.js';
export { YAMLError, YAMLParseError, YAMLWarning } from './errors.js';
export { Alias } from './nodes/Alias.js';
export { isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq } from './nodes/Node.js';
export { Pair } from './nodes/Pair.js';
export { Scalar } from './nodes/Scalar.js';
export { YAMLMap } from './nodes/YAMLMap.js';
export { YAMLSeq } from './nodes/YAMLSeq.js';
import * as cst from './parse/cst.js';
export { cst as CST };
export { Lexer } from './parse/lexer.js';
export { LineCounter } from './parse/line-counter.js';
export { Parser } from './parse/parser.js';
export { parse, parseAllDocuments, parseDocument, stringify } from './public-api.js';
export { visit, visitAsync } from './visit.js';
function debug(logLevel, ...messages) {
    if (logLevel === 'debug')
        console.log(...messages);
}
function warn(logLevel, warning) {
    if (logLevel === 'debug' || logLevel === 'warn') {
        if (typeof process !== 'undefined' && process.emitWarning)
            process.emitWarning(warning);
        else
            console.warn(warning);
    }
}

export { debug, warn };
import { warn } from '../log.js';
import { createStringifyContext } from '../stringify/stringify.js';
import { isAlias, isSeq, isScalar, isMap, isNode } from './Node.js';
import { Scalar } from './Scalar.js';
import { toJS } from './toJS.js';

const MERGE_KEY = '<<';
function addPairToJSMap(ctx, map, { key, value }) {
    if ((ctx === null || ctx === void 0 ? void 0 : ctx.doc.schema.merge) && isMergeKey(key)) {
        value = isAlias(value) ? value.resolve(ctx.doc) : value;
        if (isSeq(value))
            for (const it of value.items)
                mergeToJSMap(ctx, map, it);
        else if (Array.isArray(value))
            for (const it of value)
                mergeToJSMap(ctx, map, it);
        else
            mergeToJSMap(ctx, map, value);
    }
    else {
        const jsKey = toJS(key, '', ctx);
        if (map instanceof Map) {
            map.set(jsKey, toJS(value, jsKey, ctx));
        }
        else if (map instanceof Set) {
            map.add(jsKey);
        }
        else {
            const stringKey = stringifyKey(key, jsKey, ctx);
            const jsValue = toJS(value, stringKey, ctx);
            if (stringKey in map)
                Object.defineProperty(map, stringKey, {
                    value: jsValue,
                    writable: true,
                    enumerable: true,
                    configurable: true
                });
            else
                map[stringKey] = jsValue;
        }
    }
    return map;
}
const isMergeKey = (key) => key === MERGE_KEY ||
    (isScalar(key) &&
        key.value === MERGE_KEY &&
        (!key.type || key.type === Scalar.PLAIN));
// If the value associated with a merge key is a single mapping node, each of
// its key/value pairs is inserted into the current mapping, unless the key
// already exists in it. If the value associated with the merge key is a
// sequence, then this sequence is expected to contain mapping nodes and each
// of these nodes is merged in turn according to its order in the sequence.
// Keys in mapping nodes earlier in the sequence override keys specified in
// later mapping nodes. -- http://yaml.org/type/merge.html
function mergeToJSMap(ctx, map, value) {
    const source = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;
    if (!isMap(source))
        throw new Error('Merge sources must be maps or map aliases');
    const srcMap = source.toJSON(null, ctx, Map);
    for (const [key, value] of srcMap) {
        if (map instanceof Map) {
            if (!map.has(key))
                map.set(key, value);
        }
        else if (map instanceof Set) {
            map.add(key);
        }
        else if (!Object.prototype.hasOwnProperty.call(map, key)) {
            Object.defineProperty(map, key, {
                value,
                writable: true,
                enumerable: true,
                configurable: true
            });
        }
    }
    return map;
}
function stringifyKey(key, jsKey, ctx) {
    if (jsKey === null)
        return '';
    if (typeof jsKey !== 'object')
        return String(jsKey);
    if (isNode(key) && ctx && ctx.doc) {
        const strCtx = createStringifyContext(ctx.doc, {});
        strCtx.anchors = new Set();
        for (const node of ctx.anchors.keys())
            strCtx.anchors.add(node.anchor);
        strCtx.inFlow = true;
        strCtx.inStringifyKey = true;
        const strKey = key.toString(strCtx);
        if (!ctx.mapKeyWarned) {
            let jsonStr = JSON.stringify(strKey);
            if (jsonStr.length > 40)
                jsonStr = jsonStr.substring(0, 36) + '..."';
            warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);
            ctx.mapKeyWarned = true;
        }
        return strKey;
    }
    return JSON.stringify(jsKey);
}

export { addPairToJSMap };
import { anchorIsValid } from '../doc/anchors.js';
import { visit } from '../visit.js';
import { NodeBase, ALIAS, isAlias, isCollection, isPair } from './Node.js';

class Alias extends NodeBase {
    constructor(source) {
        super(ALIAS);
        this.source = source;
        Object.defineProperty(this, 'tag', {
            set() {
                throw new Error('Alias nodes cannot have tags');
            }
        });
    }
    /**
     * Resolve the value of this alias within `doc`, finding the last
     * instance of the `source` anchor before this node.
     */
    resolve(doc) {
        let found = undefined;
        visit(doc, {
            Node: (_key, node) => {
                if (node === this)
                    return visit.BREAK;
                if (node.anchor === this.source)
                    found = node;
            }
        });
        return found;
    }
    toJSON(_arg, ctx) {
        if (!ctx)
            return { source: this.source };
        const { anchors, doc, maxAliasCount } = ctx;
        const source = this.resolve(doc);
        if (!source) {
            const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
            throw new ReferenceError(msg);
        }
        const data = anchors.get(source);
        /* istanbul ignore if */
        if (!data || data.res === undefined) {
            const msg = 'This should not happen: Alias anchor was not resolved?';
            throw new ReferenceError(msg);
        }
        if (maxAliasCount >= 0) {
            data.count += 1;
            if (data.aliasCount === 0)
                data.aliasCount = getAliasCount(doc, source, anchors);
            if (data.count * data.aliasCount > maxAliasCount) {
                const msg = 'Excessive alias count indicates a resource exhaustion attack';
                throw new ReferenceError(msg);
            }
        }
        return data.res;
    }
    toString(ctx, _onComment, _onChompKeep) {
        const src = `*${this.source}`;
        if (ctx) {
            anchorIsValid(this.source);
            if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {
                const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
                throw new Error(msg);
            }
            if (ctx.implicitKey)
                return `${src} `;
        }
        return src;
    }
}
function getAliasCount(doc, node, anchors) {
    if (isAlias(node)) {
        const source = node.resolve(doc);
        const anchor = anchors && source && anchors.get(source);
        return anchor ? anchor.count * anchor.aliasCount : 0;
    }
    else if (isCollection(node)) {
        let count = 0;
        for (const item of node.items) {
            const c = getAliasCount(doc, item, anchors);
            if (c > count)
                count = c;
        }
        return count;
    }
    else if (isPair(node)) {
        const kc = getAliasCount(doc, node.key, anchors);
        const vc = getAliasCount(doc, node.value, anchors);
        return Math.max(kc, vc);
    }
    return 1;
}

export { Alias };
import { createNode } from '../doc/createNode.js';
import { NodeBase, isNode, isPair, isCollection, isScalar } from './Node.js';

function collectionFromPath(schema, path, value) {
    let v = value;
    for (let i = path.length - 1; i >= 0; --i) {
        const k = path[i];
        if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {
            const a = [];
            a[k] = v;
            v = a;
        }
        else {
            v = new Map([[k, v]]);
        }
    }
    return createNode(v, undefined, {
        aliasDuplicateObjects: false,
        keepUndefined: false,
        onAnchor: () => {
            throw new Error('This should not happen, please report a bug.');
        },
        schema,
        sourceObjects: new Map()
    });
}
// null, undefined, or an empty non-string iterable (e.g. [])
const isEmptyPath = (path) => path == null ||
    (typeof path === 'object' && !!path[Symbol.iterator]().next().done);
class Collection extends NodeBase {
    constructor(type, schema) {
        super(type);
        Object.defineProperty(this, 'schema', {
            value: schema,
            configurable: true,
            enumerable: false,
            writable: true
        });
    }
    /**
     * Create a copy of this collection.
     *
     * @param schema - If defined, overwrites the original's schema
     */
    clone(schema) {
        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));
        if (schema)
            copy.schema = schema;
        copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);
        if (this.range)
            copy.range = this.range.slice();
        return copy;
    }
    /**
     * Adds a value to the collection. For `!!map` and `!!omap` the value must
     * be a Pair instance or a `{ key, value }` object, which may not have a key
     * that already exists in the map.
     */
    addIn(path, value) {
        if (isEmptyPath(path))
            this.add(value);
        else {
            const [key, ...rest] = path;
            const node = this.get(key, true);
            if (isCollection(node))
                node.addIn(rest, value);
            else if (node === undefined && this.schema)
                this.set(key, collectionFromPath(this.schema, rest, value));
            else
                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
        }
    }
    /**
     * Removes a value from the collection.
     * @returns `true` if the item was found and removed.
     */
    deleteIn(path) {
        const [key, ...rest] = path;
        if (rest.length === 0)
            return this.delete(key);
        const node = this.get(key, true);
        if (isCollection(node))
            return node.deleteIn(rest);
        else
            throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
    }
    /**
     * Returns item at `key`, or `undefined` if not found. By default unwraps
     * scalar values from their surrounding node; to disable set `keepScalar` to
     * `true` (collections are always returned intact).
     */
    getIn(path, keepScalar) {
        const [key, ...rest] = path;
        const node = this.get(key, true);
        if (rest.length === 0)
            return !keepScalar && isScalar(node) ? node.value : node;
        else
            return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;
    }
    hasAllNullValues(allowScalar) {
        return this.items.every(node => {
            if (!isPair(node))
                return false;
            const n = node.value;
            return (n == null ||
                (allowScalar &&
                    isScalar(n) &&
                    n.value == null &&
                    !n.commentBefore &&
                    !n.comment &&
                    !n.tag));
        });
    }
    /**
     * Checks if the collection includes a value with the key `key`.
     */
    hasIn(path) {
        const [key, ...rest] = path;
        if (rest.length === 0)
            return this.has(key);
        const node = this.get(key, true);
        return isCollection(node) ? node.hasIn(rest) : false;
    }
    /**
     * Sets a value in this collection. For `!!set`, `value` needs to be a
     * boolean to add/remove the item from the set.
     */
    setIn(path, value) {
        const [key, ...rest] = path;
        if (rest.length === 0) {
            this.set(key, value);
        }
        else {
            const node = this.get(key, true);
            if (isCollection(node))
                node.setIn(rest, value);
            else if (node === undefined && this.schema)
                this.set(key, collectionFromPath(this.schema, rest, value));
            else
                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
        }
    }
}
Collection.maxFlowStringSingleLineLength = 60;

export { Collection, collectionFromPath, isEmptyPath };
const ALIAS = Symbol.for('yaml.alias');
const DOC = Symbol.for('yaml.document');
const MAP = Symbol.for('yaml.map');
const PAIR = Symbol.for('yaml.pair');
const SCALAR = Symbol.for('yaml.scalar');
const SEQ = Symbol.for('yaml.seq');
const NODE_TYPE = Symbol.for('yaml.node.type');
const isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;
const isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;
const isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;
const isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;
const isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;
const isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;
function isCollection(node) {
    if (node && typeof node === 'object')
        switch (node[NODE_TYPE]) {
            case MAP:
            case SEQ:
                return true;
        }
    return false;
}
function isNode(node) {
    if (node && typeof node === 'object')
        switch (node[NODE_TYPE]) {
            case ALIAS:
            case MAP:
            case SCALAR:
            case SEQ:
                return true;
        }
    return false;
}
const hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;
class NodeBase {
    constructor(type) {
        Object.defineProperty(this, NODE_TYPE, { value: type });
    }
    /** Create a copy of this node.  */
    clone() {
        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));
        if (this.range)
            copy.range = this.range.slice();
        return copy;
    }
}

export { ALIAS, DOC, MAP, NODE_TYPE, NodeBase, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };
import { createNode } from '../doc/createNode.js';
import { stringifyPair } from '../stringify/stringifyPair.js';
import { addPairToJSMap } from './addPairToJSMap.js';
import { NODE_TYPE, PAIR, isNode } from './Node.js';

function createPair(key, value, ctx) {
    const k = createNode(key, undefined, ctx);
    const v = createNode(value, undefined, ctx);
    return new Pair(k, v);
}
class Pair {
    constructor(key, value = null) {
        Object.defineProperty(this, NODE_TYPE, { value: PAIR });
        this.key = key;
        this.value = value;
    }
    clone(schema) {
        let { key, value } = this;
        if (isNode(key))
            key = key.clone(schema);
        if (isNode(value))
            value = value.clone(schema);
        return new Pair(key, value);
    }
    toJSON(_, ctx) {
        const pair = (ctx === null || ctx === void 0 ? void 0 : ctx.mapAsMap) ? new Map() : {};
        return addPairToJSMap(ctx, pair, this);
    }
    toString(ctx, onComment, onChompKeep) {
        return (ctx === null || ctx === void 0 ? void 0 : ctx.doc)
            ? stringifyPair(this, ctx, onComment, onChompKeep)
            : JSON.stringify(this);
    }
}

export { Pair, createPair };
import { NodeBase, SCALAR } from './Node.js';
import { toJS } from './toJS.js';

const isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');
class Scalar extends NodeBase {
    constructor(value) {
        super(SCALAR);
        this.value = value;
    }
    toJSON(arg, ctx) {
        return (ctx === null || ctx === void 0 ? void 0 : ctx.keep) ? this.value : toJS(this.value, arg, ctx);
    }
    toString() {
        return String(this.value);
    }
}
Scalar.BLOCK_FOLDED = 'BLOCK_FOLDED';
Scalar.BLOCK_LITERAL = 'BLOCK_LITERAL';
Scalar.PLAIN = 'PLAIN';
Scalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';
Scalar.QUOTE_SINGLE = 'QUOTE_SINGLE';

export { Scalar, isScalarValue };
import { hasAnchor } from './Node.js';

/**
 * Recursively convert any node or its contents to native JavaScript
 *
 * @param value - The input value
 * @param arg - If `value` defines a `toJSON()` method, use this
 *   as its first argument
 * @param ctx - Conversion context, originally set in Document#toJS(). If
 *   `{ keep: true }` is not set, output should be suitable for JSON
 *   stringification.
 */
function toJS(value, arg, ctx) {
    // eslint-disable-next-line @typescript-eslint/no-unsafe-return
    if (Array.isArray(value))
        return value.map((v, i) => toJS(v, String(i), ctx));
    if (value && typeof value.toJSON === 'function') {
        // eslint-disable-next-line @typescript-eslint/no-unsafe-call
        if (!ctx || !hasAnchor(value))
            return value.toJSON(arg, ctx);
        const data = { aliasCount: 0, count: 1, res: undefined };
        ctx.anchors.set(value, data);
        ctx.onCreate = res => {
            data.res = res;
            delete ctx.onCreate;
        };
        const res = value.toJSON(arg, ctx);
        if (ctx.onCreate)
            ctx.onCreate(res);
        return res;
    }
    if (typeof value === 'bigint' && !(ctx === null || ctx === void 0 ? void 0 : ctx.keep))
        return Number(value);
    return value;
}

export { toJS };
import { stringifyCollection } from '../stringify/stringifyCollection.js';
import { addPairToJSMap } from './addPairToJSMap.js';
import { Collection } from './Collection.js';
import { isPair, isScalar, MAP } from './Node.js';
import { Pair } from './Pair.js';
import { isScalarValue } from './Scalar.js';

function findPair(items, key) {
    const k = isScalar(key) ? key.value : key;
    for (const it of items) {
        if (isPair(it)) {
            if (it.key === key || it.key === k)
                return it;
            if (isScalar(it.key) && it.key.value === k)
                return it;
        }
    }
    return undefined;
}
class YAMLMap extends Collection {
    constructor(schema) {
        super(MAP, schema);
        this.items = [];
    }
    static get tagName() {
        return 'tag:yaml.org,2002:map';
    }
    /**
     * Adds a value to the collection.
     *
     * @param overwrite - If not set `true`, using a key that is already in the
     *   collection will throw. Otherwise, overwrites the previous value.
     */
    add(pair, overwrite) {
        var _a;
        let _pair;
        if (isPair(pair))
            _pair = pair;
        else if (!pair || typeof pair !== 'object' || !('key' in pair)) {
            // In TypeScript, this never happens.
            _pair = new Pair(pair, pair.value);
        }
        else
            _pair = new Pair(pair.key, pair.value);
        const prev = findPair(this.items, _pair.key);
        const sortEntries = (_a = this.schema) === null || _a === void 0 ? void 0 : _a.sortMapEntries;
        if (prev) {
            if (!overwrite)
                throw new Error(`Key ${_pair.key} already set`);
            // For scalars, keep the old node & its comments and anchors
            if (isScalar(prev.value) && isScalarValue(_pair.value))
                prev.value.value = _pair.value;
            else
                prev.value = _pair.value;
        }
        else if (sortEntries) {
            const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);
            if (i === -1)
                this.items.push(_pair);
            else
                this.items.splice(i, 0, _pair);
        }
        else {
            this.items.push(_pair);
        }
    }
    delete(key) {
        const it = findPair(this.items, key);
        if (!it)
            return false;
        const del = this.items.splice(this.items.indexOf(it), 1);
        return del.length > 0;
    }
    get(key, keepScalar) {
        const it = findPair(this.items, key);
        const node = it === null || it === void 0 ? void 0 : it.value;
        return !keepScalar && isScalar(node) ? node.value : node;
    }
    has(key) {
        return !!findPair(this.items, key);
    }
    set(key, value) {
        this.add(new Pair(key, value), true);
    }
    /**
     * @param ctx - Conversion context, originally set in Document#toJS()
     * @param {Class} Type - If set, forces the returned collection type
     * @returns Instance of Type, Map, or Object
     */
    toJSON(_, ctx, Type) {
        const map = Type ? new Type() : (ctx === null || ctx === void 0 ? void 0 : ctx.mapAsMap) ? new Map() : {};
        if (ctx === null || ctx === void 0 ? void 0 : ctx.onCreate)
            ctx.onCreate(map);
        for (const item of this.items)
            addPairToJSMap(ctx, map, item);
        return map;
    }
    toString(ctx, onComment, onChompKeep) {
        if (!ctx)
            return JSON.stringify(this);
        for (const item of this.items) {
            if (!isPair(item))
                throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);
        }
        if (!ctx.allNullValues && this.hasAllNullValues(false))
            ctx = Object.assign({}, ctx, { allNullValues: true });
        return stringifyCollection(this, ctx, {
            blockItemPrefix: '',
            flowChars: { start: '{', end: '}' },
            itemIndent: ctx.indent || '',
            onChompKeep,
            onComment
        });
    }
}

export { YAMLMap, findPair };
import { stringifyCollection } from '../stringify/stringifyCollection.js';
import { Collection } from './Collection.js';
import { SEQ, isScalar } from './Node.js';
import { isScalarValue } from './Scalar.js';
import { toJS } from './toJS.js';

class YAMLSeq extends Collection {
    constructor(schema) {
        super(SEQ, schema);
        this.items = [];
    }
    static get tagName() {
        return 'tag:yaml.org,2002:seq';
    }
    add(value) {
        this.items.push(value);
    }
    /**
     * Removes a value from the collection.
     *
     * `key` must contain a representation of an integer for this to succeed.
     * It may be wrapped in a `Scalar`.
     *
     * @returns `true` if the item was found and removed.
     */
    delete(key) {
        const idx = asItemIndex(key);
        if (typeof idx !== 'number')
            return false;
        const del = this.items.splice(idx, 1);
        return del.length > 0;
    }
    /**
     * Returns item at `key`, or `undefined` if not found. By default unwraps
     * scalar values from their surrounding node; to disable set `keepScalar` to
     * `true` (collections are always returned intact).
     *
     * `key` must contain a representation of an integer for this to succeed.
     * It may be wrapped in a `Scalar`.
     */
    get(key, keepScalar) {
        const idx = asItemIndex(key);
        if (typeof idx !== 'number')
            return undefined;
        const it = this.items[idx];
        return !keepScalar && isScalar(it) ? it.value : it;
    }
    /**
     * Checks if the collection includes a value with the key `key`.
     *
     * `key` must contain a representation of an integer for this to succeed.
     * It may be wrapped in a `Scalar`.
     */
    has(key) {
        const idx = asItemIndex(key);
        return typeof idx === 'number' && idx < this.items.length;
    }
    /**
     * Sets a value in this collection. For `!!set`, `value` needs to be a
     * boolean to add/remove the item from the set.
     *
     * If `key` does not contain a representation of an integer, this will throw.
     * It may be wrapped in a `Scalar`.
     */
    set(key, value) {
        const idx = asItemIndex(key);
        if (typeof idx !== 'number')
            throw new Error(`Expected a valid index, not ${key}.`);
        const prev = this.items[idx];
        if (isScalar(prev) && isScalarValue(value))
            prev.value = value;
        else
            this.items[idx] = value;
    }
    toJSON(_, ctx) {
        const seq = [];
        if (ctx === null || ctx === void 0 ? void 0 : ctx.onCreate)
            ctx.onCreate(seq);
        let i = 0;
        for (const item of this.items)
            seq.push(toJS(item, String(i++), ctx));
        return seq;
    }
    toString(ctx, onComment, onChompKeep) {
        if (!ctx)
            return JSON.stringify(this);
        return stringifyCollection(this, ctx, {
            blockItemPrefix: '- ',
            flowChars: { start: '[', end: ']' },
            itemIndent: (ctx.indent || '') + '  ',
            onChompKeep,
            onComment
        });
    }
}
function asItemIndex(key) {
    let idx = isScalar(key) ? key.value : key;
    if (idx && typeof idx === 'string')
        idx = Number(idx);
    return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0
        ? idx
        : null;
}

export { YAMLSeq };
import { resolveBlockScalar } from '../compose/resolve-block-scalar.js';
import { resolveFlowScalar } from '../compose/resolve-flow-scalar.js';
import { YAMLParseError } from '../errors.js';
import { stringifyString } from '../stringify/stringifyString.js';

function resolveAsScalar(token, strict = true, onError) {
    if (token) {
        const _onError = (pos, code, message) => {
            const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;
            if (onError)
                onError(offset, code, message);
            else
                throw new YAMLParseError([offset, offset + 1], code, message);
        };
        switch (token.type) {
            case 'scalar':
            case 'single-quoted-scalar':
            case 'double-quoted-scalar':
                return resolveFlowScalar(token, strict, _onError);
            case 'block-scalar':
                return resolveBlockScalar(token, strict, _onError);
        }
    }
    return null;
}
/**
 * Create a new scalar token with `value`
 *
 * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,
 * as this function does not support any schema operations and won't check for such conflicts.
 *
 * @param value The string representation of the value, which will have its content properly indented.
 * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.
 * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.
 * @param context.indent The indent level of the token.
 * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.
 * @param context.offset The offset position of the token.
 * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.
 */
function createScalarToken(value, context) {
    var _a;
    const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;
    const source = stringifyString({ type, value }, {
        implicitKey,
        indent: indent > 0 ? ' '.repeat(indent) : '',
        inFlow,
        options: { blockQuote: true, lineWidth: -1 }
    });
    const end = (_a = context.end) !== null && _a !== void 0 ? _a : [
        { type: 'newline', offset: -1, indent, source: '\n' }
    ];
    switch (source[0]) {
        case '|':
        case '>': {
            const he = source.indexOf('\n');
            const head = source.substring(0, he);
            const body = source.substring(he + 1) + '\n';
            const props = [
                { type: 'block-scalar-header', offset, indent, source: head }
            ];
            if (!addEndtoBlockProps(props, end))
                props.push({ type: 'newline', offset: -1, indent, source: '\n' });
            return { type: 'block-scalar', offset, indent, props, source: body };
        }
        case '"':
            return { type: 'double-quoted-scalar', offset, indent, source, end };
        case "'":
            return { type: 'single-quoted-scalar', offset, indent, source, end };
        default:
            return { type: 'scalar', offset, indent, source, end };
    }
}
/**
 * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.
 *
 * Best efforts are made to retain any comments previously associated with the `token`,
 * though all contents within a collection's `items` will be overwritten.
 *
 * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,
 * as this function does not support any schema operations and won't check for such conflicts.
 *
 * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.
 * @param value The string representation of the value, which will have its content properly indented.
 * @param context.afterKey In most cases, values after a key should have an additional level of indentation.
 * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.
 * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.
 * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.
 */
function setScalarValue(token, value, context = {}) {
    let { afterKey = false, implicitKey = false, inFlow = false, type } = context;
    let indent = 'indent' in token ? token.indent : null;
    if (afterKey && typeof indent === 'number')
        indent += 2;
    if (!type)
        switch (token.type) {
            case 'single-quoted-scalar':
                type = 'QUOTE_SINGLE';
                break;
            case 'double-quoted-scalar':
                type = 'QUOTE_DOUBLE';
                break;
            case 'block-scalar': {
                const header = token.props[0];
                if (header.type !== 'block-scalar-header')
                    throw new Error('Invalid block scalar header');
                type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';
                break;
            }
            default:
                type = 'PLAIN';
        }
    const source = stringifyString({ type, value }, {
        implicitKey: implicitKey || indent === null,
        indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',
        inFlow,
        options: { blockQuote: true, lineWidth: -1 }
    });
    switch (source[0]) {
        case '|':
        case '>':
            setBlockScalarValue(token, source);
            break;
        case '"':
            setFlowScalarValue(token, source, 'double-quoted-scalar');
            break;
        case "'":
            setFlowScalarValue(token, source, 'single-quoted-scalar');
            break;
        default:
            setFlowScalarValue(token, source, 'scalar');
    }
}
function setBlockScalarValue(token, source) {
    const he = source.indexOf('\n');
    const head = source.substring(0, he);
    const body = source.substring(he + 1) + '\n';
    if (token.type === 'block-scalar') {
        const header = token.props[0];
        if (header.type !== 'block-scalar-header')
            throw new Error('Invalid block scalar header');
        header.source = head;
        token.source = body;
    }
    else {
        const { offset } = token;
        const indent = 'indent' in token ? token.indent : -1;
        const props = [
            { type: 'block-scalar-header', offset, indent, source: head }
        ];
        if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))
            props.push({ type: 'newline', offset: -1, indent, source: '\n' });
        for (const key of Object.keys(token))
            if (key !== 'type' && key !== 'offset')
                delete token[key];
        Object.assign(token, { type: 'block-scalar', indent, props, source: body });
    }
}
/** @returns `true` if last token is a newline */
function addEndtoBlockProps(props, end) {
    if (end)
        for (const st of end)
            switch (st.type) {
                case 'space':
                case 'comment':
                    props.push(st);
                    break;
                case 'newline':
                    props.push(st);
                    return true;
            }
    return false;
}
function setFlowScalarValue(token, source, type) {
    switch (token.type) {
        case 'scalar':
        case 'double-quoted-scalar':
        case 'single-quoted-scalar':
            token.type = type;
            token.source = source;
            break;
        case 'block-scalar': {
            const end = token.props.slice(1);
            let oa = source.length;
            if (token.props[0].type === 'block-scalar-header')
                oa -= token.props[0].source.length;
            for (const tok of end)
                tok.offset += oa;
            delete token.props;
            Object.assign(token, { type, source, end });
            break;
        }
        case 'block-map':
        case 'block-seq': {
            const offset = token.offset + source.length;
            const nl = { type: 'newline', offset, indent: token.indent, source: '\n' };
            delete token.items;
            Object.assign(token, { type, source, end: [nl] });
            break;
        }
        default: {
            const indent = 'indent' in token ? token.indent : -1;
            const end = 'end' in token && Array.isArray(token.end)
                ? token.end.filter(st => st.type === 'space' ||
                    st.type === 'comment' ||
                    st.type === 'newline')
                : [];
            for (const key of Object.keys(token))
                if (key !== 'type' && key !== 'offset')
                    delete token[key];
            Object.assign(token, { type, indent, source, end });
        }
    }
}

export { createScalarToken, resolveAsScalar, setScalarValue };
/**
 * Stringify a CST document, token, or collection item
 *
 * Fair warning: This applies no validation whatsoever, and
 * simply concatenates the sources in their logical order.
 */
const stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);
function stringifyToken(token) {
    switch (token.type) {
        case 'block-scalar': {
            let res = '';
            for (const tok of token.props)
                res += stringifyToken(tok);
            return res + token.source;
        }
        case 'block-map':
        case 'block-seq': {
            let res = '';
            for (const item of token.items)
                res += stringifyItem(item);
            return res;
        }
        case 'flow-collection': {
            let res = token.start.source;
            for (const item of token.items)
                res += stringifyItem(item);
            for (const st of token.end)
                res += st.source;
            return res;
        }
        case 'document': {
            let res = stringifyItem(token);
            if (token.end)
                for (const st of token.end)
                    res += st.source;
            return res;
        }
        default: {
            let res = token.source;
            if ('end' in token && token.end)
                for (const st of token.end)
                    res += st.source;
            return res;
        }
    }
}
function stringifyItem({ start, key, sep, value }) {
    let res = '';
    for (const st of start)
        res += st.source;
    if (key)
        res += stringifyToken(key);
    if (sep)
        for (const st of sep)
            res += st.source;
    if (value)
        res += stringifyToken(value);
    return res;
}

export { stringify };
const BREAK = Symbol('break visit');
const SKIP = Symbol('skip children');
const REMOVE = Symbol('remove item');
/**
 * Apply a visitor to a CST document or item.
 *
 * Walks through the tree (depth-first) starting from the root, calling a
 * `visitor` function with two arguments when entering each item:
 *   - `item`: The current item, which included the following members:
 *     - `start: SourceToken[]` â€“ Source tokens before the key or value,
 *       possibly including its anchor or tag.
 *     - `key?: Token | null` â€“ Set for pair values. May then be `null`, if
 *       the key before the `:` separator is empty.
 *     - `sep?: SourceToken[]` â€“ Source tokens between the key and the value,
 *       which should include the `:` map value indicator if `value` is set.
 *     - `value?: Token` â€“ The value of a sequence item, or of a map pair.
 *   - `path`: The steps from the root to the current node, as an array of
 *     `['key' | 'value', number]` tuples.
 *
 * The return value of the visitor may be used to control the traversal:
 *   - `undefined` (default): Do nothing and continue
 *   - `visit.SKIP`: Do not visit the children of this token, continue with
 *      next sibling
 *   - `visit.BREAK`: Terminate traversal completely
 *   - `visit.REMOVE`: Remove the current item, then continue with the next one
 *   - `number`: Set the index of the next step. This is useful especially if
 *     the index of the current token has changed.
 *   - `function`: Define the next visitor for this item. After the original
 *     visitor is called on item entry, next visitors are called after handling
 *     a non-empty `key` and when exiting the item.
 */
function visit(cst, visitor) {
    if ('type' in cst && cst.type === 'document')
        cst = { start: cst.start, value: cst.value };
    _visit(Object.freeze([]), cst, visitor);
}
// Without the `as symbol` casts, TS declares these in the `visit`
// namespace using `var`, but then complains about that because
// `unique symbol` must be `const`.
/** Terminate visit traversal completely */
visit.BREAK = BREAK;
/** Do not visit the children of the current item */
visit.SKIP = SKIP;
/** Remove the current item */
visit.REMOVE = REMOVE;
/** Find the item at `path` from `cst` as the root */
visit.itemAtPath = (cst, path) => {
    let item = cst;
    for (const [field, index] of path) {
        const tok = item === null || item === void 0 ? void 0 : item[field];
        if (tok && 'items' in tok) {
            item = tok.items[index];
        }
        else
            return undefined;
    }
    return item;
};
/**
 * Get the immediate parent collection of the item at `path` from `cst` as the root.
 *
 * Throws an error if the collection is not found, which should never happen if the item itself exists.
 */
visit.parentCollection = (cst, path) => {
    const parent = visit.itemAtPath(cst, path.slice(0, -1));
    const field = path[path.length - 1][0];
    const coll = parent === null || parent === void 0 ? void 0 : parent[field];
    if (coll && 'items' in coll)
        return coll;
    throw new Error('Parent collection not found');
};
function _visit(path, item, visitor) {
    let ctrl = visitor(item, path);
    if (typeof ctrl === 'symbol')
        return ctrl;
    for (const field of ['key', 'value']) {
        const token = item[field];
        if (token && 'items' in token) {
            for (let i = 0; i < token.items.length; ++i) {
                const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);
                if (typeof ci === 'number')
                    i = ci - 1;
                else if (ci === BREAK)
                    return BREAK;
                else if (ci === REMOVE) {
                    token.items.splice(i, 1);
                    i -= 1;
                }
            }
            if (typeof ctrl === 'function' && field === 'key')
                ctrl = ctrl(item, path);
        }
    }
    return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;
}

export { visit };
export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js';
export { stringify } from './cst-stringify.js';
export { visit } from './cst-visit.js';

/** The byte order mark */
const BOM = '\u{FEFF}';
/** Start of doc-mode */
const DOCUMENT = '\x02'; // C0: Start of Text
/** Unexpected end of flow-mode */
const FLOW_END = '\x18'; // C0: Cancel
/** Next token is a scalar value */
const SCALAR = '\x1f'; // C0: Unit Separator
/** @returns `true` if `token` is a flow or block collection */
const isCollection = (token) => !!token && 'items' in token;
/** @returns `true` if `token` is a flow or block scalar; not an alias */
const isScalar = (token) => !!token &&
    (token.type === 'scalar' ||
        token.type === 'single-quoted-scalar' ||
        token.type === 'double-quoted-scalar' ||
        token.type === 'block-scalar');
/* istanbul ignore next */
/** Get a printable representation of a lexer token */
function prettyToken(token) {
    switch (token) {
        case BOM:
            return '<BOM>';
        case DOCUMENT:
            return '<DOC>';
        case FLOW_END:
            return '<FLOW_END>';
        case SCALAR:
            return '<SCALAR>';
        default:
            return JSON.stringify(token);
    }
}
/** Identify the type of a lexer token. May return `null` for unknown tokens. */
function tokenType(source) {
    switch (source) {
        case BOM:
            return 'byte-order-mark';
        case DOCUMENT:
            return 'doc-mode';
        case FLOW_END:
            return 'flow-error-end';
        case SCALAR:
            return 'scalar';
        case '---':
            return 'doc-start';
        case '...':
            return 'doc-end';
        case '':
        case '\n':
        case '\r\n':
            return 'newline';
        case '-':
            return 'seq-item-ind';
        case '?':
            return 'explicit-key-ind';
        case ':':
            return 'map-value-ind';
        case '{':
            return 'flow-map-start';
        case '}':
            return 'flow-map-end';
        case '[':
            return 'flow-seq-start';
        case ']':
            return 'flow-seq-end';
        case ',':
            return 'comma';
    }
    switch (source[0]) {
        case ' ':
        case '\t':
            return 'space';
        case '#':
            return 'comment';
        case '%':
            return 'directive-line';
        case '*':
            return 'alias';
        case '&':
            return 'anchor';
        case '!':
            return 'tag';
        case "'":
            return 'single-quoted-scalar';
        case '"':
            return 'double-quoted-scalar';
        case '|':
        case '>':
            return 'block-scalar-header';
    }
    return null;
}

export { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType };
import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';

/*
START -> stream

stream
  directive -> line-end -> stream
  indent + line-end -> stream
  [else] -> line-start

line-end
  comment -> line-end
  newline -> .
  input-end -> END

line-start
  doc-start -> doc
  doc-end -> stream
  [else] -> indent -> block-start

block-start
  seq-item-start -> block-start
  explicit-key-start -> block-start
  map-value-start -> block-start
  [else] -> doc

doc
  line-end -> line-start
  spaces -> doc
  anchor -> doc
  tag -> doc
  flow-start -> flow -> doc
  flow-end -> error -> doc
  seq-item-start -> error -> doc
  explicit-key-start -> error -> doc
  map-value-start -> doc
  alias -> doc
  quote-start -> quoted-scalar -> doc
  block-scalar-header -> line-end -> block-scalar(min) -> line-start
  [else] -> plain-scalar(false, min) -> doc

flow
  line-end -> flow
  spaces -> flow
  anchor -> flow
  tag -> flow
  flow-start -> flow -> flow
  flow-end -> .
  seq-item-start -> error -> flow
  explicit-key-start -> flow
  map-value-start -> flow
  alias -> flow
  quote-start -> quoted-scalar -> flow
  comma -> flow
  [else] -> plain-scalar(true, 0) -> flow

quoted-scalar
  quote-end -> .
  [else] -> quoted-scalar

block-scalar(min)
  newline + peek(indent < min) -> .
  [else] -> block-scalar(min)

plain-scalar(is-flow, min)
  scalar-end(is-flow) -> .
  peek(newline + (indent < min)) -> .
  [else] -> plain-scalar(min)
*/
function isEmpty(ch) {
    switch (ch) {
        case undefined:
        case ' ':
        case '\n':
        case '\r':
        case '\t':
            return true;
        default:
            return false;
    }
}
const hexDigits = '0123456789ABCDEFabcdef'.split('');
const tagChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()".split('');
const invalidFlowScalarChars = ',[]{}'.split('');
const invalidAnchorChars = ' ,[]{}\n\r\t'.split('');
const isNotAnchorChar = (ch) => !ch || invalidAnchorChars.includes(ch);
/**
 * Splits an input string into lexical tokens, i.e. smaller strings that are
 * easily identifiable by `tokens.tokenType()`.
 *
 * Lexing starts always in a "stream" context. Incomplete input may be buffered
 * until a complete token can be emitted.
 *
 * In addition to slices of the original input, the following control characters
 * may also be emitted:
 *
 * - `\x02` (Start of Text): A document starts with the next token
 * - `\x18` (Cancel): Unexpected end of flow-mode (indicates an error)
 * - `\x1f` (Unit Separator): Next token is a scalar value
 * - `\u{FEFF}` (Byte order mark): Emitted separately outside documents
 */
class Lexer {
    constructor() {
        /**
         * Flag indicating whether the end of the current buffer marks the end of
         * all input
         */
        this.atEnd = false;
        /**
         * Explicit indent set in block scalar header, as an offset from the current
         * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not
         * explicitly set.
         */
        this.blockScalarIndent = -1;
        /**
         * Block scalars that include a + (keep) chomping indicator in their header
         * include trailing empty lines, which are otherwise excluded from the
         * scalar's contents.
         */
        this.blockScalarKeep = false;
        /** Current input */
        this.buffer = '';
        /**
         * Flag noting whether the map value indicator : can immediately follow this
         * node within a flow context.
         */
        this.flowKey = false;
        /** Count of surrounding flow collection levels. */
        this.flowLevel = 0;
        /**
         * Minimum level of indentation required for next lines to be parsed as a
         * part of the current scalar value.
         */
        this.indentNext = 0;
        /** Indentation level of the current line. */
        this.indentValue = 0;
        /** Position of the next \n character. */
        this.lineEndPos = null;
        /** Stores the state of the lexer if reaching the end of incpomplete input */
        this.next = null;
        /** A pointer to `buffer`; the current position of the lexer. */
        this.pos = 0;
    }
    /**
     * Generate YAML tokens from the `source` string. If `incomplete`,
     * a part of the last line may be left as a buffer for the next call.
     *
     * @returns A generator of lexical tokens
     */
    *lex(source, incomplete = false) {
        var _a;
        if (source) {
            this.buffer = this.buffer ? this.buffer + source : source;
            this.lineEndPos = null;
        }
        this.atEnd = !incomplete;
        let next = (_a = this.next) !== null && _a !== void 0 ? _a : 'stream';
        while (next && (incomplete || this.hasChars(1)))
            next = yield* this.parseNext(next);
    }
    atLineEnd() {
        let i = this.pos;
        let ch = this.buffer[i];
        while (ch === ' ' || ch === '\t')
            ch = this.buffer[++i];
        if (!ch || ch === '#' || ch === '\n')
            return true;
        if (ch === '\r')
            return this.buffer[i + 1] === '\n';
        return false;
    }
    charAt(n) {
        return this.buffer[this.pos + n];
    }
    continueScalar(offset) {
        let ch = this.buffer[offset];
        if (this.indentNext > 0) {
            let indent = 0;
            while (ch === ' ')
                ch = this.buffer[++indent + offset];
            if (ch === '\r') {
                const next = this.buffer[indent + offset + 1];
                if (next === '\n' || (!next && !this.atEnd))
                    return offset + indent + 1;
            }
            return ch === '\n' || indent >= this.indentNext || (!ch && !this.atEnd)
                ? offset + indent
                : -1;
        }
        if (ch === '-' || ch === '.') {
            const dt = this.buffer.substr(offset, 3);
            if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))
                return -1;
        }
        return offset;
    }
    getLine() {
        let end = this.lineEndPos;
        if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {
            end = this.buffer.indexOf('\n', this.pos);
            this.lineEndPos = end;
        }
        if (end === -1)
            return this.atEnd ? this.buffer.substring(this.pos) : null;
        if (this.buffer[end - 1] === '\r')
            end -= 1;
        return this.buffer.substring(this.pos, end);
    }
    hasChars(n) {
        return this.pos + n <= this.buffer.length;
    }
    setNext(state) {
        this.buffer = this.buffer.substring(this.pos);
        this.pos = 0;
        this.lineEndPos = null;
        this.next = state;
        return null;
    }
    peek(n) {
        return this.buffer.substr(this.pos, n);
    }
    *parseNext(next) {
        switch (next) {
            case 'stream':
                return yield* this.parseStream();
            case 'line-start':
                return yield* this.parseLineStart();
            case 'block-start':
                return yield* this.parseBlockStart();
            case 'doc':
                return yield* this.parseDocument();
            case 'flow':
                return yield* this.parseFlowCollection();
            case 'quoted-scalar':
                return yield* this.parseQuotedScalar();
            case 'block-scalar':
                return yield* this.parseBlockScalar();
            case 'plain-scalar':
                return yield* this.parsePlainScalar();
        }
    }
    *parseStream() {
        let line = this.getLine();
        if (line === null)
            return this.setNext('stream');
        if (line[0] === BOM) {
            yield* this.pushCount(1);
            line = line.substring(1);
        }
        if (line[0] === '%') {
            let dirEnd = line.length;
            const cs = line.indexOf('#');
            if (cs !== -1) {
                const ch = line[cs - 1];
                if (ch === ' ' || ch === '\t')
                    dirEnd = cs - 1;
            }
            while (true) {
                const ch = line[dirEnd - 1];
                if (ch === ' ' || ch === '\t')
                    dirEnd -= 1;
                else
                    break;
            }
            const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));
            yield* this.pushCount(line.length - n); // possible comment
            this.pushNewline();
            return 'stream';
        }
        if (this.atLineEnd()) {
            const sp = yield* this.pushSpaces(true);
            yield* this.pushCount(line.length - sp);
            yield* this.pushNewline();
            return 'stream';
        }
        yield DOCUMENT;
        return yield* this.parseLineStart();
    }
    *parseLineStart() {
        const ch = this.charAt(0);
        if (!ch && !this.atEnd)
            return this.setNext('line-start');
        if (ch === '-' || ch === '.') {
            if (!this.atEnd && !this.hasChars(4))
                return this.setNext('line-start');
            const s = this.peek(3);
            if (s === '---' && isEmpty(this.charAt(3))) {
                yield* this.pushCount(3);
                this.indentValue = 0;
                this.indentNext = 0;
                return 'doc';
            }
            else if (s === '...' && isEmpty(this.charAt(3))) {
                yield* this.pushCount(3);
                return 'stream';
            }
        }
        this.indentValue = yield* this.pushSpaces(false);
        if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))
            this.indentNext = this.indentValue;
        return yield* this.parseBlockStart();
    }
    *parseBlockStart() {
        const [ch0, ch1] = this.peek(2);
        if (!ch1 && !this.atEnd)
            return this.setNext('block-start');
        if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {
            const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));
            this.indentNext = this.indentValue + 1;
            this.indentValue += n;
            return yield* this.parseBlockStart();
        }
        return 'doc';
    }
    *parseDocument() {
        yield* this.pushSpaces(true);
        const line = this.getLine();
        if (line === null)
            return this.setNext('doc');
        let n = yield* this.pushIndicators();
        switch (line[n]) {
            case '#':
                yield* this.pushCount(line.length - n);
            // fallthrough
            case undefined:
                yield* this.pushNewline();
                return yield* this.parseLineStart();
            case '{':
            case '[':
                yield* this.pushCount(1);
                this.flowKey = false;
                this.flowLevel = 1;
                return 'flow';
            case '}':
            case ']':
                // this is an error
                yield* this.pushCount(1);
                return 'doc';
            case '*':
                yield* this.pushUntil(isNotAnchorChar);
                return 'doc';
            case '"':
            case "'":
                return yield* this.parseQuotedScalar();
            case '|':
            case '>':
                n += yield* this.parseBlockScalarHeader();
                n += yield* this.pushSpaces(true);
                yield* this.pushCount(line.length - n);
                yield* this.pushNewline();
                return yield* this.parseBlockScalar();
            default:
                return yield* this.parsePlainScalar();
        }
    }
    *parseFlowCollection() {
        let nl, sp;
        let indent = -1;
        do {
            nl = yield* this.pushNewline();
            if (nl > 0) {
                sp = yield* this.pushSpaces(false);
                this.indentValue = indent = sp;
            }
            else {
                sp = 0;
            }
            sp += yield* this.pushSpaces(true);
        } while (nl + sp > 0);
        const line = this.getLine();
        if (line === null)
            return this.setNext('flow');
        if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||
            (indent === 0 &&
                (line.startsWith('---') || line.startsWith('...')) &&
                isEmpty(line[3]))) {
            // Allowing for the terminal ] or } at the same (rather than greater)
            // indent level as the initial [ or { is technically invalid, but
            // failing here would be surprising to users.
            const atFlowEndMarker = indent === this.indentNext - 1 &&
                this.flowLevel === 1 &&
                (line[0] === ']' || line[0] === '}');
            if (!atFlowEndMarker) {
                // this is an error
                this.flowLevel = 0;
                yield FLOW_END;
                return yield* this.parseLineStart();
            }
        }
        let n = 0;
        while (line[n] === ',') {
            n += yield* this.pushCount(1);
            n += yield* this.pushSpaces(true);
            this.flowKey = false;
        }
        n += yield* this.pushIndicators();
        switch (line[n]) {
            case undefined:
                return 'flow';
            case '#':
                yield* this.pushCount(line.length - n);
                return 'flow';
            case '{':
            case '[':
                yield* this.pushCount(1);
                this.flowKey = false;
                this.flowLevel += 1;
                return 'flow';
            case '}':
            case ']':
                yield* this.pushCount(1);
                this.flowKey = true;
                this.flowLevel -= 1;
                return this.flowLevel ? 'flow' : 'doc';
            case '*':
                yield* this.pushUntil(isNotAnchorChar);
                return 'flow';
            case '"':
            case "'":
                this.flowKey = true;
                return yield* this.parseQuotedScalar();
            case ':': {
                const next = this.charAt(1);
                if (this.flowKey || isEmpty(next) || next === ',') {
                    this.flowKey = false;
                    yield* this.pushCount(1);
                    yield* this.pushSpaces(true);
                    return 'flow';
                }
            }
            // fallthrough
            default:
                this.flowKey = false;
                return yield* this.parsePlainScalar();
        }
    }
    *parseQuotedScalar() {
        const quote = this.charAt(0);
        let end = this.buffer.indexOf(quote, this.pos + 1);
        if (quote === "'") {
            while (end !== -1 && this.buffer[end + 1] === "'")
                end = this.buffer.indexOf("'", end + 2);
        }
        else {
            // double-quote
            while (end !== -1) {
                let n = 0;
                while (this.buffer[end - 1 - n] === '\\')
                    n += 1;
                if (n % 2 === 0)
                    break;
                end = this.buffer.indexOf('"', end + 1);
            }
        }
        // Only looking for newlines within the quotes
        const qb = this.buffer.substring(0, end);
        let nl = qb.indexOf('\n', this.pos);
        if (nl !== -1) {
            while (nl !== -1) {
                const cs = this.continueScalar(nl + 1);
                if (cs === -1)
                    break;
                nl = qb.indexOf('\n', cs);
            }
            if (nl !== -1) {
                // this is an error caused by an unexpected unindent
                end = nl - (qb[nl - 1] === '\r' ? 2 : 1);
            }
        }
        if (end === -1) {
            if (!this.atEnd)
                return this.setNext('quoted-scalar');
            end = this.buffer.length;
        }
        yield* this.pushToIndex(end + 1, false);
        return this.flowLevel ? 'flow' : 'doc';
    }
    *parseBlockScalarHeader() {
        this.blockScalarIndent = -1;
        this.blockScalarKeep = false;
        let i = this.pos;
        while (true) {
            const ch = this.buffer[++i];
            if (ch === '+')
                this.blockScalarKeep = true;
            else if (ch > '0' && ch <= '9')
                this.blockScalarIndent = Number(ch) - 1;
            else if (ch !== '-')
                break;
        }
        return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');
    }
    *parseBlockScalar() {
        let nl = this.pos - 1; // may be -1 if this.pos === 0
        let indent = 0;
        let ch;
        loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {
            switch (ch) {
                case ' ':
                    indent += 1;
                    break;
                case '\n':
                    nl = i;
                    indent = 0;
                    break;
                case '\r': {
                    const next = this.buffer[i + 1];
                    if (!next && !this.atEnd)
                        return this.setNext('block-scalar');
                    if (next === '\n')
                        break;
                } // fallthrough
                default:
                    break loop;
            }
        }
        if (!ch && !this.atEnd)
            return this.setNext('block-scalar');
        if (indent >= this.indentNext) {
            if (this.blockScalarIndent === -1)
                this.indentNext = indent;
            else
                this.indentNext += this.blockScalarIndent;
            do {
                const cs = this.continueScalar(nl + 1);
                if (cs === -1)
                    break;
                nl = this.buffer.indexOf('\n', cs);
            } while (nl !== -1);
            if (nl === -1) {
                if (!this.atEnd)
                    return this.setNext('block-scalar');
                nl = this.buffer.length;
            }
        }
        if (!this.blockScalarKeep) {
            do {
                let i = nl - 1;
                let ch = this.buffer[i];
                if (ch === '\r')
                    ch = this.buffer[--i];
                const lastChar = i; // Drop the line if last char not more indented
                while (ch === ' ' || ch === '\t')
                    ch = this.buffer[--i];
                if (ch === '\n' && i >= this.pos && i + 1 + indent > lastChar)
                    nl = i;
                else
                    break;
            } while (true);
        }
        yield SCALAR;
        yield* this.pushToIndex(nl + 1, true);
        return yield* this.parseLineStart();
    }
    *parsePlainScalar() {
        const inFlow = this.flowLevel > 0;
        let end = this.pos - 1;
        let i = this.pos - 1;
        let ch;
        while ((ch = this.buffer[++i])) {
            if (ch === ':') {
                const next = this.buffer[i + 1];
                if (isEmpty(next) || (inFlow && next === ','))
                    break;
                end = i;
            }
            else if (isEmpty(ch)) {
                let next = this.buffer[i + 1];
                if (ch === '\r') {
                    if (next === '\n') {
                        i += 1;
                        ch = '\n';
                        next = this.buffer[i + 1];
                    }
                    else
                        end = i;
                }
                if (next === '#' || (inFlow && invalidFlowScalarChars.includes(next)))
                    break;
                if (ch === '\n') {
                    const cs = this.continueScalar(i + 1);
                    if (cs === -1)
                        break;
                    i = Math.max(i, cs - 2); // to advance, but still account for ' #'
                }
            }
            else {
                if (inFlow && invalidFlowScalarChars.includes(ch))
                    break;
                end = i;
            }
        }
        if (!ch && !this.atEnd)
            return this.setNext('plain-scalar');
        yield SCALAR;
        yield* this.pushToIndex(end + 1, true);
        return inFlow ? 'flow' : 'doc';
    }
    *pushCount(n) {
        if (n > 0) {
            yield this.buffer.substr(this.pos, n);
            this.pos += n;
            return n;
        }
        return 0;
    }
    *pushToIndex(i, allowEmpty) {
        const s = this.buffer.slice(this.pos, i);
        if (s) {
            yield s;
            this.pos += s.length;
            return s.length;
        }
        else if (allowEmpty)
            yield '';
        return 0;
    }
    *pushIndicators() {
        switch (this.charAt(0)) {
            case '!':
                return ((yield* this.pushTag()) +
                    (yield* this.pushSpaces(true)) +
                    (yield* this.pushIndicators()));
            case '&':
                return ((yield* this.pushUntil(isNotAnchorChar)) +
                    (yield* this.pushSpaces(true)) +
                    (yield* this.pushIndicators()));
            case '-': // this is an error
            case '?': // this is an error outside flow collections
            case ':': {
                const inFlow = this.flowLevel > 0;
                const ch1 = this.charAt(1);
                if (isEmpty(ch1) || (inFlow && invalidFlowScalarChars.includes(ch1))) {
                    if (!inFlow)
                        this.indentNext = this.indentValue + 1;
                    else if (this.flowKey)
                        this.flowKey = false;
                    return ((yield* this.pushCount(1)) +
                        (yield* this.pushSpaces(true)) +
                        (yield* this.pushIndicators()));
                }
            }
        }
        return 0;
    }
    *pushTag() {
        if (this.charAt(1) === '<') {
            let i = this.pos + 2;
            let ch = this.buffer[i];
            while (!isEmpty(ch) && ch !== '>')
                ch = this.buffer[++i];
            return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);
        }
        else {
            let i = this.pos + 1;
            let ch = this.buffer[i];
            while (ch) {
                if (tagChars.includes(ch))
                    ch = this.buffer[++i];
                else if (ch === '%' &&
                    hexDigits.includes(this.buffer[i + 1]) &&
                    hexDigits.includes(this.buffer[i + 2])) {
                    ch = this.buffer[(i += 3)];
                }
                else
                    break;
            }
            return yield* this.pushToIndex(i, false);
        }
    }
    *pushNewline() {
        const ch = this.buffer[this.pos];
        if (ch === '\n')
            return yield* this.pushCount(1);
        else if (ch === '\r' && this.charAt(1) === '\n')
            return yield* this.pushCount(2);
        else
            return 0;
    }
    *pushSpaces(allowTabs) {
        let i = this.pos - 1;
        let ch;
        do {
            ch = this.buffer[++i];
        } while (ch === ' ' || (allowTabs && ch === '\t'));
        const n = i - this.pos;
        if (n > 0) {
            yield this.buffer.substr(this.pos, n);
            this.pos = i;
        }
        return n;
    }
    *pushUntil(test) {
        let i = this.pos;
        let ch = this.buffer[i];
        while (!test(ch))
            ch = this.buffer[++i];
        return yield* this.pushToIndex(i, false);
    }
}

export { Lexer };
/**
 * Tracks newlines during parsing in order to provide an efficient API for
 * determining the one-indexed `{ line, col }` position for any offset
 * within the input.
 */
class LineCounter {
    constructor() {
        this.lineStarts = [];
        /**
         * Should be called in ascending order. Otherwise, call
         * `lineCounter.lineStarts.sort()` before calling `linePos()`.
         */
        this.addNewLine = (offset) => this.lineStarts.push(offset);
        /**
         * Performs a binary search and returns the 1-indexed { line, col }
         * position of `offset`. If `line === 0`, `addNewLine` has never been
         * called or `offset` is before the first known newline.
         */
        this.linePos = (offset) => {
            let low = 0;
            let high = this.lineStarts.length;
            while (low < high) {
                const mid = (low + high) >> 1; // Math.floor((low + high) / 2)
                if (this.lineStarts[mid] < offset)
                    low = mid + 1;
                else
                    high = mid;
            }
            if (this.lineStarts[low] === offset)
                return { line: low + 1, col: 1 };
            if (low === 0)
                return { line: 0, col: offset };
            const start = this.lineStarts[low - 1];
            return { line: low, col: offset - start + 1 };
        };
    }
}

export { LineCounter };
import { tokenType } from './cst.js';
import { Lexer } from './lexer.js';

function includesToken(list, type) {
    for (let i = 0; i < list.length; ++i)
        if (list[i].type === type)
            return true;
    return false;
}
function findNonEmptyIndex(list) {
    for (let i = 0; i < list.length; ++i) {
        switch (list[i].type) {
            case 'space':
            case 'comment':
            case 'newline':
                break;
            default:
                return i;
        }
    }
    return -1;
}
function isFlowToken(token) {
    switch (token === null || token === void 0 ? void 0 : token.type) {
        case 'alias':
        case 'scalar':
        case 'single-quoted-scalar':
        case 'double-quoted-scalar':
        case 'flow-collection':
            return true;
        default:
            return false;
    }
}
function getPrevProps(parent) {
    var _a;
    switch (parent.type) {
        case 'document':
            return parent.start;
        case 'block-map': {
            const it = parent.items[parent.items.length - 1];
            return (_a = it.sep) !== null && _a !== void 0 ? _a : it.start;
        }
        case 'block-seq':
            return parent.items[parent.items.length - 1].start;
        /* istanbul ignore next should not happen */
        default:
            return [];
    }
}
/** Note: May modify input array */
function getFirstKeyStartProps(prev) {
    var _a;
    if (prev.length === 0)
        return [];
    let i = prev.length;
    loop: while (--i >= 0) {
        switch (prev[i].type) {
            case 'doc-start':
            case 'explicit-key-ind':
            case 'map-value-ind':
            case 'seq-item-ind':
            case 'newline':
                break loop;
        }
    }
    while (((_a = prev[++i]) === null || _a === void 0 ? void 0 : _a.type) === 'space') {
        /* loop */
    }
    return prev.splice(i, prev.length);
}
function fixFlowSeqItems(fc) {
    if (fc.start.type === 'flow-seq-start') {
        for (const it of fc.items) {
            if (it.sep &&
                !it.value &&
                !includesToken(it.start, 'explicit-key-ind') &&
                !includesToken(it.sep, 'map-value-ind')) {
                if (it.key)
                    it.value = it.key;
                delete it.key;
                if (isFlowToken(it.value)) {
                    if (it.value.end)
                        Array.prototype.push.apply(it.value.end, it.sep);
                    else
                        it.value.end = it.sep;
                }
                else
                    Array.prototype.push.apply(it.start, it.sep);
                delete it.sep;
            }
        }
    }
}
/**
 * A YAML concrete syntax tree (CST) parser
 *
 * ```ts
 * const src: string = ...
 * for (const token of new Parser().parse(src)) {
 *   // token: Token
 * }
 * ```
 *
 * To use the parser with a user-provided lexer:
 *
 * ```ts
 * function* parse(source: string, lexer: Lexer) {
 *   const parser = new Parser()
 *   for (const lexeme of lexer.lex(source))
 *     yield* parser.next(lexeme)
 *   yield* parser.end()
 * }
 *
 * const src: string = ...
 * const lexer = new Lexer()
 * for (const token of parse(src, lexer)) {
 *   // token: Token
 * }
 * ```
 */
class Parser {
    /**
     * @param onNewLine - If defined, called separately with the start position of
     *   each new line (in `parse()`, including the start of input).
     */
    constructor(onNewLine) {
        /** If true, space and sequence indicators count as indentation */
        this.atNewLine = true;
        /** If true, next token is a scalar value */
        this.atScalar = false;
        /** Current indentation level */
        this.indent = 0;
        /** Current offset since the start of parsing */
        this.offset = 0;
        /** On the same line with a block map key */
        this.onKeyLine = false;
        /** Top indicates the node that's currently being built */
        this.stack = [];
        /** The source of the current token, set in parse() */
        this.source = '';
        /** The type of the current token, set in parse() */
        this.type = '';
        // Must be defined after `next()`
        this.lexer = new Lexer();
        this.onNewLine = onNewLine;
    }
    /**
     * Parse `source` as a YAML stream.
     * If `incomplete`, a part of the last line may be left as a buffer for the next call.
     *
     * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.
     *
     * @returns A generator of tokens representing each directive, document, and other structure.
     */
    *parse(source, incomplete = false) {
        if (this.onNewLine && this.offset === 0)
            this.onNewLine(0);
        for (const lexeme of this.lexer.lex(source, incomplete))
            yield* this.next(lexeme);
        if (!incomplete)
            yield* this.end();
    }
    /**
     * Advance the parser by the `source` of one lexical token.
     */
    *next(source) {
        this.source = source;
        if (this.atScalar) {
            this.atScalar = false;
            yield* this.step();
            this.offset += source.length;
            return;
        }
        const type = tokenType(source);
        if (!type) {
            const message = `Not a YAML token: ${source}`;
            yield* this.pop({ type: 'error', offset: this.offset, message, source });
            this.offset += source.length;
        }
        else if (type === 'scalar') {
            this.atNewLine = false;
            this.atScalar = true;
            this.type = 'scalar';
        }
        else {
            this.type = type;
            yield* this.step();
            switch (type) {
                case 'newline':
                    this.atNewLine = true;
                    this.indent = 0;
                    if (this.onNewLine)
                        this.onNewLine(this.offset + source.length);
                    break;
                case 'space':
                    if (this.atNewLine && source[0] === ' ')
                        this.indent += source.length;
                    break;
                case 'explicit-key-ind':
                case 'map-value-ind':
                case 'seq-item-ind':
                    if (this.atNewLine)
                        this.indent += source.length;
                    break;
                case 'doc-mode':
                case 'flow-error-end':
                    return;
                default:
                    this.atNewLine = false;
            }
            this.offset += source.length;
        }
    }
    /** Call at end of input to push out any remaining constructions */
    *end() {
        while (this.stack.length > 0)
            yield* this.pop();
    }
    get sourceToken() {
        const st = {
            type: this.type,
            offset: this.offset,
            indent: this.indent,
            source: this.source
        };
        return st;
    }
    *step() {
        const top = this.peek(1);
        if (this.type === 'doc-end' && (!top || top.type !== 'doc-end')) {
            while (this.stack.length > 0)
                yield* this.pop();
            this.stack.push({
                type: 'doc-end',
                offset: this.offset,
                source: this.source
            });
            return;
        }
        if (!top)
            return yield* this.stream();
        switch (top.type) {
            case 'document':
                return yield* this.document(top);
            case 'alias':
            case 'scalar':
            case 'single-quoted-scalar':
            case 'double-quoted-scalar':
                return yield* this.scalar(top);
            case 'block-scalar':
                return yield* this.blockScalar(top);
            case 'block-map':
                return yield* this.blockMap(top);
            case 'block-seq':
                return yield* this.blockSequence(top);
            case 'flow-collection':
                return yield* this.flowCollection(top);
            case 'doc-end':
                return yield* this.documentEnd(top);
        }
        /* istanbul ignore next should not happen */
        yield* this.pop();
    }
    peek(n) {
        return this.stack[this.stack.length - n];
    }
    *pop(error) {
        const token = error !== null && error !== void 0 ? error : this.stack.pop();
        /* istanbul ignore if should not happen */
        if (!token) {
            const message = 'Tried to pop an empty stack';
            yield { type: 'error', offset: this.offset, source: '', message };
        }
        else if (this.stack.length === 0) {
            yield token;
        }
        else {
            const top = this.peek(1);
            if (token.type === 'block-scalar') {
                // Block scalars use their parent rather than header indent
                token.indent = 'indent' in top ? top.indent : 0;
            }
            else if (token.type === 'flow-collection' && top.type === 'document') {
                // Ignore all indent for top-level flow collections
                token.indent = 0;
            }
            if (token.type === 'flow-collection')
                fixFlowSeqItems(token);
            switch (top.type) {
                case 'document':
                    top.value = token;
                    break;
                case 'block-scalar':
                    top.props.push(token); // error
                    break;
                case 'block-map': {
                    const it = top.items[top.items.length - 1];
                    if (it.value) {
                        top.items.push({ start: [], key: token, sep: [] });
                        this.onKeyLine = true;
                        return;
                    }
                    else if (it.sep) {
                        it.value = token;
                    }
                    else {
                        Object.assign(it, { key: token, sep: [] });
                        this.onKeyLine = !includesToken(it.start, 'explicit-key-ind');
                        return;
                    }
                    break;
                }
                case 'block-seq': {
                    const it = top.items[top.items.length - 1];
                    if (it.value)
                        top.items.push({ start: [], value: token });
                    else
                        it.value = token;
                    break;
                }
                case 'flow-collection': {
                    const it = top.items[top.items.length - 1];
                    if (!it || it.value)
                        top.items.push({ start: [], key: token, sep: [] });
                    else if (it.sep)
                        it.value = token;
                    else
                        Object.assign(it, { key: token, sep: [] });
                    return;
                }
                /* istanbul ignore next should not happen */
                default:
                    yield* this.pop();
                    yield* this.pop(token);
            }
            if ((top.type === 'document' ||
                top.type === 'block-map' ||
                top.type === 'block-seq') &&
                (token.type === 'block-map' || token.type === 'block-seq')) {
                const last = token.items[token.items.length - 1];
                if (last &&
                    !last.sep &&
                    !last.value &&
                    last.start.length > 0 &&
                    findNonEmptyIndex(last.start) === -1 &&
                    (token.indent === 0 ||
                        last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {
                    if (top.type === 'document')
                        top.end = last.start;
                    else
                        top.items.push({ start: last.start });
                    token.items.splice(-1, 1);
                }
            }
        }
    }
    *stream() {
        switch (this.type) {
            case 'directive-line':
                yield { type: 'directive', offset: this.offset, source: this.source };
                return;
            case 'byte-order-mark':
            case 'space':
            case 'comment':
            case 'newline':
                yield this.sourceToken;
                return;
            case 'doc-mode':
            case 'doc-start': {
                const doc = {
                    type: 'document',
                    offset: this.offset,
                    start: []
                };
                if (this.type === 'doc-start')
                    doc.start.push(this.sourceToken);
                this.stack.push(doc);
                return;
            }
        }
        yield {
            type: 'error',
            offset: this.offset,
            message: `Unexpected ${this.type} token in YAML stream`,
            source: this.source
        };
    }
    *document(doc) {
        if (doc.value)
            return yield* this.lineEnd(doc);
        switch (this.type) {
            case 'doc-start': {
                if (findNonEmptyIndex(doc.start) !== -1) {
                    yield* this.pop();
                    yield* this.step();
                }
                else
                    doc.start.push(this.sourceToken);
                return;
            }
            case 'anchor':
            case 'tag':
            case 'space':
            case 'comment':
            case 'newline':
                doc.start.push(this.sourceToken);
                return;
        }
        const bv = this.startBlockValue(doc);
        if (bv)
            this.stack.push(bv);
        else {
            yield {
                type: 'error',
                offset: this.offset,
                message: `Unexpected ${this.type} token in YAML document`,
                source: this.source
            };
        }
    }
    *scalar(scalar) {
        if (this.type === 'map-value-ind') {
            const prev = getPrevProps(this.peek(2));
            const start = getFirstKeyStartProps(prev);
            let sep;
            if (scalar.end) {
                sep = scalar.end;
                sep.push(this.sourceToken);
                delete scalar.end;
            }
            else
                sep = [this.sourceToken];
            const map = {
                type: 'block-map',
                offset: scalar.offset,
                indent: scalar.indent,
                items: [{ start, key: scalar, sep }]
            };
            this.onKeyLine = true;
            this.stack[this.stack.length - 1] = map;
        }
        else
            yield* this.lineEnd(scalar);
    }
    *blockScalar(scalar) {
        switch (this.type) {
            case 'space':
            case 'comment':
            case 'newline':
                scalar.props.push(this.sourceToken);
                return;
            case 'scalar':
                scalar.source = this.source;
                // block-scalar source includes trailing newline
                this.atNewLine = true;
                this.indent = 0;
                if (this.onNewLine) {
                    let nl = this.source.indexOf('\n') + 1;
                    while (nl !== 0) {
                        this.onNewLine(this.offset + nl);
                        nl = this.source.indexOf('\n', nl) + 1;
                    }
                }
                yield* this.pop();
                break;
            /* istanbul ignore next should not happen */
            default:
                yield* this.pop();
                yield* this.step();
        }
    }
    *blockMap(map) {
        var _a;
        const it = map.items[map.items.length - 1];
        // it.sep is true-ish if pair already has key or : separator
        switch (this.type) {
            case 'newline':
                this.onKeyLine = false;
                if (it.value) {
                    const end = 'end' in it.value ? it.value.end : undefined;
                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;
                    if ((last === null || last === void 0 ? void 0 : last.type) === 'comment')
                        end === null || end === void 0 ? void 0 : end.push(this.sourceToken);
                    else
                        map.items.push({ start: [this.sourceToken] });
                }
                else if (it.sep) {
                    it.sep.push(this.sourceToken);
                }
                else {
                    it.start.push(this.sourceToken);
                }
                return;
            case 'space':
            case 'comment':
                if (it.value) {
                    map.items.push({ start: [this.sourceToken] });
                }
                else if (it.sep) {
                    it.sep.push(this.sourceToken);
                }
                else {
                    if (this.atIndentedComment(it.start, map.indent)) {
                        const prev = map.items[map.items.length - 2];
                        const end = (_a = prev === null || prev === void 0 ? void 0 : prev.value) === null || _a === void 0 ? void 0 : _a.end;
                        if (Array.isArray(end)) {
                            Array.prototype.push.apply(end, it.start);
                            end.push(this.sourceToken);
                            map.items.pop();
                            return;
                        }
                    }
                    it.start.push(this.sourceToken);
                }
                return;
        }
        if (this.indent >= map.indent) {
            const atNextItem = !this.onKeyLine && this.indent === map.indent && it.sep;
            // For empty nodes, assign newline-separated not indented empty tokens to following node
            let start = [];
            if (atNextItem && it.sep && !it.value) {
                const nl = [];
                for (let i = 0; i < it.sep.length; ++i) {
                    const st = it.sep[i];
                    switch (st.type) {
                        case 'newline':
                            nl.push(i);
                            break;
                        case 'space':
                            break;
                        case 'comment':
                            if (st.indent > map.indent)
                                nl.length = 0;
                            break;
                        default:
                            nl.length = 0;
                    }
                }
                if (nl.length >= 2)
                    start = it.sep.splice(nl[1]);
            }
            switch (this.type) {
                case 'anchor':
                case 'tag':
                    if (atNextItem || it.value) {
                        start.push(this.sourceToken);
                        map.items.push({ start });
                        this.onKeyLine = true;
                    }
                    else if (it.sep) {
                        it.sep.push(this.sourceToken);
                    }
                    else {
                        it.start.push(this.sourceToken);
                    }
                    return;
                case 'explicit-key-ind':
                    if (!it.sep && !includesToken(it.start, 'explicit-key-ind')) {
                        it.start.push(this.sourceToken);
                    }
                    else if (atNextItem || it.value) {
                        start.push(this.sourceToken);
                        map.items.push({ start });
                    }
                    else {
                        this.stack.push({
                            type: 'block-map',
                            offset: this.offset,
                            indent: this.indent,
                            items: [{ start: [this.sourceToken] }]
                        });
                    }
                    this.onKeyLine = true;
                    return;
                case 'map-value-ind':
                    if (includesToken(it.start, 'explicit-key-ind')) {
                        if (!it.sep) {
                            if (includesToken(it.start, 'newline')) {
                                Object.assign(it, { key: null, sep: [this.sourceToken] });
                            }
                            else {
                                const start = getFirstKeyStartProps(it.start);
                                this.stack.push({
                                    type: 'block-map',
                                    offset: this.offset,
                                    indent: this.indent,
                                    items: [{ start, key: null, sep: [this.sourceToken] }]
                                });
                            }
                        }
                        else if (it.value) {
                            map.items.push({ start: [], key: null, sep: [this.sourceToken] });
                        }
                        else if (includesToken(it.sep, 'map-value-ind')) {
                            this.stack.push({
                                type: 'block-map',
                                offset: this.offset,
                                indent: this.indent,
                                items: [{ start, key: null, sep: [this.sourceToken] }]
                            });
                        }
                        else if (isFlowToken(it.key) &&
                            !includesToken(it.sep, 'newline')) {
                            const start = getFirstKeyStartProps(it.start);
                            const key = it.key;
                            const sep = it.sep;
                            sep.push(this.sourceToken);
                            // @ts-expect-error type guard is wrong here
                            delete it.key, delete it.sep;
                            this.stack.push({
                                type: 'block-map',
                                offset: this.offset,
                                indent: this.indent,
                                items: [{ start, key, sep }]
                            });
                        }
                        else if (start.length > 0) {
                            // Not actually at next item
                            it.sep = it.sep.concat(start, this.sourceToken);
                        }
                        else {
                            it.sep.push(this.sourceToken);
                        }
                    }
                    else {
                        if (!it.sep) {
                            Object.assign(it, { key: null, sep: [this.sourceToken] });
                        }
                        else if (it.value || atNextItem) {
                            map.items.push({ start, key: null, sep: [this.sourceToken] });
                        }
                        else if (includesToken(it.sep, 'map-value-ind')) {
                            this.stack.push({
                                type: 'block-map',
                                offset: this.offset,
                                indent: this.indent,
                                items: [{ start: [], key: null, sep: [this.sourceToken] }]
                            });
                        }
                        else {
                            it.sep.push(this.sourceToken);
                        }
                    }
                    this.onKeyLine = true;
                    return;
                case 'alias':
                case 'scalar':
                case 'single-quoted-scalar':
                case 'double-quoted-scalar': {
                    const fs = this.flowScalar(this.type);
                    if (atNextItem || it.value) {
                        map.items.push({ start, key: fs, sep: [] });
                        this.onKeyLine = true;
                    }
                    else if (it.sep) {
                        this.stack.push(fs);
                    }
                    else {
                        Object.assign(it, { key: fs, sep: [] });
                        this.onKeyLine = true;
                    }
                    return;
                }
                default: {
                    const bv = this.startBlockValue(map);
                    if (bv) {
                        if (atNextItem &&
                            bv.type !== 'block-seq' &&
                            includesToken(it.start, 'explicit-key-ind')) {
                            map.items.push({ start });
                        }
                        this.stack.push(bv);
                        return;
                    }
                }
            }
        }
        yield* this.pop();
        yield* this.step();
    }
    *blockSequence(seq) {
        var _a;
        const it = seq.items[seq.items.length - 1];
        switch (this.type) {
            case 'newline':
                if (it.value) {
                    const end = 'end' in it.value ? it.value.end : undefined;
                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;
                    if ((last === null || last === void 0 ? void 0 : last.type) === 'comment')
                        end === null || end === void 0 ? void 0 : end.push(this.sourceToken);
                    else
                        seq.items.push({ start: [this.sourceToken] });
                }
                else
                    it.start.push(this.sourceToken);
                return;
            case 'space':
            case 'comment':
                if (it.value)
                    seq.items.push({ start: [this.sourceToken] });
                else {
                    if (this.atIndentedComment(it.start, seq.indent)) {
                        const prev = seq.items[seq.items.length - 2];
                        const end = (_a = prev === null || prev === void 0 ? void 0 : prev.value) === null || _a === void 0 ? void 0 : _a.end;
                        if (Array.isArray(end)) {
                            Array.prototype.push.apply(end, it.start);
                            end.push(this.sourceToken);
                            seq.items.pop();
                            return;
                        }
                    }
                    it.start.push(this.sourceToken);
                }
                return;
            case 'anchor':
            case 'tag':
                if (it.value || this.indent <= seq.indent)
                    break;
                it.start.push(this.sourceToken);
                return;
            case 'seq-item-ind':
                if (this.indent !== seq.indent)
                    break;
                if (it.value || includesToken(it.start, 'seq-item-ind'))
                    seq.items.push({ start: [this.sourceToken] });
                else
                    it.start.push(this.sourceToken);
                return;
        }
        if (this.indent > seq.indent) {
            const bv = this.startBlockValue(seq);
            if (bv) {
                this.stack.push(bv);
                return;
            }
        }
        yield* this.pop();
        yield* this.step();
    }
    *flowCollection(fc) {
        const it = fc.items[fc.items.length - 1];
        if (this.type === 'flow-error-end') {
            let top;
            do {
                yield* this.pop();
                top = this.peek(1);
            } while (top && top.type === 'flow-collection');
        }
        else if (fc.end.length === 0) {
            switch (this.type) {
                case 'comma':
                case 'explicit-key-ind':
                    if (!it || it.sep)
                        fc.items.push({ start: [this.sourceToken] });
                    else
                        it.start.push(this.sourceToken);
                    return;
                case 'map-value-ind':
                    if (!it || it.value)
                        fc.items.push({ start: [], key: null, sep: [this.sourceToken] });
                    else if (it.sep)
                        it.sep.push(this.sourceToken);
                    else
                        Object.assign(it, { key: null, sep: [this.sourceToken] });
                    return;
                case 'space':
                case 'comment':
                case 'newline':
                case 'anchor':
                case 'tag':
                    if (!it || it.value)
                        fc.items.push({ start: [this.sourceToken] });
                    else if (it.sep)
                        it.sep.push(this.sourceToken);
                    else
                        it.start.push(this.sourceToken);
                    return;
                case 'alias':
                case 'scalar':
                case 'single-quoted-scalar':
                case 'double-quoted-scalar': {
                    const fs = this.flowScalar(this.type);
                    if (!it || it.value)
                        fc.items.push({ start: [], key: fs, sep: [] });
                    else if (it.sep)
                        this.stack.push(fs);
                    else
                        Object.assign(it, { key: fs, sep: [] });
                    return;
                }
                case 'flow-map-end':
                case 'flow-seq-end':
                    fc.end.push(this.sourceToken);
                    return;
            }
            const bv = this.startBlockValue(fc);
            /* istanbul ignore else should not happen */
            if (bv)
                this.stack.push(bv);
            else {
                yield* this.pop();
                yield* this.step();
            }
        }
        else {
            const parent = this.peek(2);
            if (parent.type === 'block-map' &&
                ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||
                    (this.type === 'newline' &&
                        !parent.items[parent.items.length - 1].sep))) {
                yield* this.pop();
                yield* this.step();
            }
            else if (this.type === 'map-value-ind' &&
                parent.type !== 'flow-collection') {
                const prev = getPrevProps(parent);
                const start = getFirstKeyStartProps(prev);
                fixFlowSeqItems(fc);
                const sep = fc.end.splice(1, fc.end.length);
                sep.push(this.sourceToken);
                const map = {
                    type: 'block-map',
                    offset: fc.offset,
                    indent: fc.indent,
                    items: [{ start, key: fc, sep }]
                };
                this.onKeyLine = true;
                this.stack[this.stack.length - 1] = map;
            }
            else {
                yield* this.lineEnd(fc);
            }
        }
    }
    flowScalar(type) {
        if (this.onNewLine) {
            let nl = this.source.indexOf('\n') + 1;
            while (nl !== 0) {
                this.onNewLine(this.offset + nl);
                nl = this.source.indexOf('\n', nl) + 1;
            }
        }
        return {
            type,
            offset: this.offset,
            indent: this.indent,
            source: this.source
        };
    }
    startBlockValue(parent) {
        switch (this.type) {
            case 'alias':
            case 'scalar':
            case 'single-quoted-scalar':
            case 'double-quoted-scalar':
                return this.flowScalar(this.type);
            case 'block-scalar-header':
                return {
                    type: 'block-scalar',
                    offset: this.offset,
                    indent: this.indent,
                    props: [this.sourceToken],
                    source: ''
                };
            case 'flow-map-start':
            case 'flow-seq-start':
                return {
                    type: 'flow-collection',
                    offset: this.offset,
                    indent: this.indent,
                    start: this.sourceToken,
                    items: [],
                    end: []
                };
            case 'seq-item-ind':
                return {
                    type: 'block-seq',
                    offset: this.offset,
                    indent: this.indent,
                    items: [{ start: [this.sourceToken] }]
                };
            case 'explicit-key-ind': {
                this.onKeyLine = true;
                const prev = getPrevProps(parent);
                const start = getFirstKeyStartProps(prev);
                start.push(this.sourceToken);
                return {
                    type: 'block-map',
                    offset: this.offset,
                    indent: this.indent,
                    items: [{ start }]
                };
            }
            case 'map-value-ind': {
                this.onKeyLine = true;
                const prev = getPrevProps(parent);
                const start = getFirstKeyStartProps(prev);
                return {
                    type: 'block-map',
                    offset: this.offset,
                    indent: this.indent,
                    items: [{ start, key: null, sep: [this.sourceToken] }]
                };
            }
        }
        return null;
    }
    atIndentedComment(start, indent) {
        if (this.type !== 'comment')
            return false;
        if (this.indent <= indent)
            return false;
        return start.every(st => st.type === 'newline' || st.type === 'space');
    }
    *documentEnd(docEnd) {
        if (this.type !== 'doc-mode') {
            if (docEnd.end)
                docEnd.end.push(this.sourceToken);
            else
                docEnd.end = [this.sourceToken];
            if (this.type === 'newline')
                yield* this.pop();
        }
    }
    *lineEnd(token) {
        switch (this.type) {
            case 'comma':
            case 'doc-start':
            case 'doc-end':
            case 'flow-seq-end':
            case 'flow-map-end':
            case 'map-value-ind':
                yield* this.pop();
                yield* this.step();
                break;
            case 'newline':
                this.onKeyLine = false;
            // fallthrough
            case 'space':
            case 'comment':
            default:
                // all other values are errors
                if (token.end)
                    token.end.push(this.sourceToken);
                else
                    token.end = [this.sourceToken];
                if (this.type === 'newline')
                    yield* this.pop();
        }
    }
}

export { Parser };
import { Composer } from './compose/composer.js';
import { Document } from './doc/Document.js';
import { prettifyError, YAMLParseError } from './errors.js';
import { warn } from './log.js';
import { LineCounter } from './parse/line-counter.js';
import { Parser } from './parse/parser.js';

function parseOptions(options) {
    const prettyErrors = options.prettyErrors !== false;
    const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;
    return { lineCounter, prettyErrors };
}
/**
 * Parse the input as a stream of YAML documents.
 *
 * Documents should be separated from each other by `...` or `---` marker lines.
 *
 * @returns If an empty `docs` array is returned, it will be of type
 *   EmptyStream and contain additional stream information. In
 *   TypeScript, you should use `'empty' in docs` as a type guard for it.
 */
function parseAllDocuments(source, options = {}) {
    const { lineCounter, prettyErrors } = parseOptions(options);
    const parser = new Parser(lineCounter === null || lineCounter === void 0 ? void 0 : lineCounter.addNewLine);
    const composer = new Composer(options);
    const docs = Array.from(composer.compose(parser.parse(source)));
    if (prettyErrors && lineCounter)
        for (const doc of docs) {
            doc.errors.forEach(prettifyError(source, lineCounter));
            doc.warnings.forEach(prettifyError(source, lineCounter));
        }
    if (docs.length > 0)
        return docs;
    return Object.assign([], { empty: true }, composer.streamInfo());
}
/** Parse an input string into a single YAML.Document */
function parseDocument(source, options = {}) {
    const { lineCounter, prettyErrors } = parseOptions(options);
    const parser = new Parser(lineCounter === null || lineCounter === void 0 ? void 0 : lineCounter.addNewLine);
    const composer = new Composer(options);
    // `doc` is always set by compose.end(true) at the very latest
    let doc = null;
    for (const _doc of composer.compose(parser.parse(source), true, source.length)) {
        if (!doc)
            doc = _doc;
        else if (doc.options.logLevel !== 'silent') {
            doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));
            break;
        }
    }
    if (prettyErrors && lineCounter) {
        doc.errors.forEach(prettifyError(source, lineCounter));
        doc.warnings.forEach(prettifyError(source, lineCounter));
    }
    return doc;
}
function parse(src, reviver, options) {
    let _reviver = undefined;
    if (typeof reviver === 'function') {
        _reviver = reviver;
    }
    else if (options === undefined && reviver && typeof reviver === 'object') {
        options = reviver;
    }
    const doc = parseDocument(src, options);
    if (!doc)
        return null;
    doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));
    if (doc.errors.length > 0) {
        if (doc.options.logLevel !== 'silent')
            throw doc.errors[0];
        else
            doc.errors = [];
    }
    return doc.toJS(Object.assign({ reviver: _reviver }, options));
}
function stringify(value, replacer, options) {
    var _a;
    let _replacer = null;
    if (typeof replacer === 'function' || Array.isArray(replacer)) {
        _replacer = replacer;
    }
    else if (options === undefined && replacer) {
        options = replacer;
    }
    if (typeof options === 'string')
        options = options.length;
    if (typeof options === 'number') {
        const indent = Math.round(options);
        options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };
    }
    if (value === undefined) {
        const { keepUndefined } = (_a = options !== null && options !== void 0 ? options : replacer) !== null && _a !== void 0 ? _a : {};
        if (!keepUndefined)
            return undefined;
    }
    return new Document(value, _replacer, options).toString(options);
}

export { parse, parseAllDocuments, parseDocument, stringify };
import { isMap } from '../../nodes/Node.js';
import { createPair } from '../../nodes/Pair.js';
import { YAMLMap } from '../../nodes/YAMLMap.js';

function createMap(schema, obj, ctx) {
    const { keepUndefined, replacer } = ctx;
    const map = new YAMLMap(schema);
    const add = (key, value) => {
        if (typeof replacer === 'function')
            value = replacer.call(obj, key, value);
        else if (Array.isArray(replacer) && !replacer.includes(key))
            return;
        if (value !== undefined || keepUndefined)
            map.items.push(createPair(key, value, ctx));
    };
    if (obj instanceof Map) {
        for (const [key, value] of obj)
            add(key, value);
    }
    else if (obj && typeof obj === 'object') {
        for (const key of Object.keys(obj))
            add(key, obj[key]);
    }
    if (typeof schema.sortMapEntries === 'function') {
        map.items.sort(schema.sortMapEntries);
    }
    return map;
}
const map = {
    collection: 'map',
    createNode: createMap,
    default: true,
    nodeClass: YAMLMap,
    tag: 'tag:yaml.org,2002:map',
    resolve(map, onError) {
        if (!isMap(map))
            onError('Expected a mapping for this tag');
        return map;
    }
};

export { map };
import { Scalar } from '../../nodes/Scalar.js';

const nullTag = {
    identify: value => value == null,
    createNode: () => new Scalar(null),
    default: true,
    tag: 'tag:yaml.org,2002:null',
    test: /^(?:~|[Nn]ull|NULL)?$/,
    resolve: () => new Scalar(null),
    stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)
        ? source
        : ctx.options.nullStr
};

export { nullTag };
import { createNode } from '../../doc/createNode.js';
import { isSeq } from '../../nodes/Node.js';
import { YAMLSeq } from '../../nodes/YAMLSeq.js';

function createSeq(schema, obj, ctx) {
    const { replacer } = ctx;
    const seq = new YAMLSeq(schema);
    if (obj && Symbol.iterator in Object(obj)) {
        let i = 0;
        for (let it of obj) {
            if (typeof replacer === 'function') {
                const key = obj instanceof Set ? it : String(i++);
                it = replacer.call(obj, key, it);
            }
            seq.items.push(createNode(it, undefined, ctx));
        }
    }
    return seq;
}
const seq = {
    collection: 'seq',
    createNode: createSeq,
    default: true,
    nodeClass: YAMLSeq,
    tag: 'tag:yaml.org,2002:seq',
    resolve(seq, onError) {
        if (!isSeq(seq))
            onError('Expected a sequence for this tag');
        return seq;
    }
};

export { seq };
import { stringifyString } from '../../stringify/stringifyString.js';

const string = {
    identify: value => typeof value === 'string',
    default: true,
    tag: 'tag:yaml.org,2002:str',
    resolve: str => str,
    stringify(item, ctx, onComment, onChompKeep) {
        ctx = Object.assign({ actualString: true }, ctx);
        return stringifyString(item, ctx, onComment, onChompKeep);
    }
};

export { string };
import { Scalar } from '../../nodes/Scalar.js';

const boolTag = {
    identify: value => typeof value === 'boolean',
    default: true,
    tag: 'tag:yaml.org,2002:bool',
    test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,
    resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),
    stringify({ source, value }, ctx) {
        if (source && boolTag.test.test(source)) {
            const sv = source[0] === 't' || source[0] === 'T';
            if (value === sv)
                return source;
        }
        return value ? ctx.options.trueStr : ctx.options.falseStr;
    }
};

export { boolTag };
import { Scalar } from '../../nodes/Scalar.js';
import { stringifyNumber } from '../../stringify/stringifyNumber.js';

const floatNaN = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    test: /^(?:[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN))$/,
    resolve: str => str.slice(-3).toLowerCase() === 'nan'
        ? NaN
        : str[0] === '-'
            ? Number.NEGATIVE_INFINITY
            : Number.POSITIVE_INFINITY,
    stringify: stringifyNumber
};
const floatExp = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    format: 'EXP',
    test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,
    resolve: str => parseFloat(str),
    stringify(node) {
        const num = Number(node.value);
        return isFinite(num) ? num.toExponential() : stringifyNumber(node);
    }
};
const float = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    test: /^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,
    resolve(str) {
        const node = new Scalar(parseFloat(str));
        const dot = str.indexOf('.');
        if (dot !== -1 && str[str.length - 1] === '0')
            node.minFractionDigits = str.length - dot - 1;
        return node;
    },
    stringify: stringifyNumber
};

export { float, floatExp, floatNaN };
import { stringifyNumber } from '../../stringify/stringifyNumber.js';

const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);
const intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));
function intStringify(node, radix, prefix) {
    const { value } = node;
    if (intIdentify(value) && value >= 0)
        return prefix + value.toString(radix);
    return stringifyNumber(node);
}
const intOct = {
    identify: value => intIdentify(value) && value >= 0,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'OCT',
    test: /^0o[0-7]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),
    stringify: node => intStringify(node, 8, '0o')
};
const int = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    test: /^[-+]?[0-9]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
    stringify: stringifyNumber
};
const intHex = {
    identify: value => intIdentify(value) && value >= 0,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'HEX',
    test: /^0x[0-9a-fA-F]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
    stringify: node => intStringify(node, 16, '0x')
};

export { int, intHex, intOct };
import { map } from '../common/map.js';
import { nullTag } from '../common/null.js';
import { seq } from '../common/seq.js';
import { string } from '../common/string.js';
import { boolTag } from './bool.js';
import { floatNaN, floatExp, float } from './float.js';
import { intOct, int, intHex } from './int.js';

const schema = [
    map,
    seq,
    string,
    nullTag,
    boolTag,
    intOct,
    int,
    intHex,
    floatNaN,
    floatExp,
    float
];

export { schema };
import { Scalar } from '../../nodes/Scalar.js';
import { map } from '../common/map.js';
import { seq } from '../common/seq.js';

function intIdentify(value) {
    return typeof value === 'bigint' || Number.isInteger(value);
}
const stringifyJSON = ({ value }) => JSON.stringify(value);
const jsonScalars = [
    {
        identify: value => typeof value === 'string',
        default: true,
        tag: 'tag:yaml.org,2002:str',
        resolve: str => str,
        stringify: stringifyJSON
    },
    {
        identify: value => value == null,
        createNode: () => new Scalar(null),
        default: true,
        tag: 'tag:yaml.org,2002:null',
        test: /^null$/,
        resolve: () => null,
        stringify: stringifyJSON
    },
    {
        identify: value => typeof value === 'boolean',
        default: true,
        tag: 'tag:yaml.org,2002:bool',
        test: /^true|false$/,
        resolve: str => str === 'true',
        stringify: stringifyJSON
    },
    {
        identify: intIdentify,
        default: true,
        tag: 'tag:yaml.org,2002:int',
        test: /^-?(?:0|[1-9][0-9]*)$/,
        resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),
        stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)
    },
    {
        identify: value => typeof value === 'number',
        default: true,
        tag: 'tag:yaml.org,2002:float',
        test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,
        resolve: str => parseFloat(str),
        stringify: stringifyJSON
    }
];
const jsonError = {
    default: true,
    tag: '',
    test: /^/,
    resolve(str, onError) {
        onError(`Unresolved plain scalar ${JSON.stringify(str)}`);
        return str;
    }
};
const schema = [map, seq].concat(jsonScalars, jsonError);

export { schema };
import { MAP, SCALAR, SEQ } from '../nodes/Node.js';
import { map } from './common/map.js';
import { seq } from './common/seq.js';
import { string } from './common/string.js';
import { getTags, coreKnownTags } from './tags.js';

const sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
class Schema {
    constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {
        this.compat = Array.isArray(compat)
            ? getTags(compat, 'compat')
            : compat
                ? getTags(null, compat)
                : null;
        this.merge = !!merge;
        this.name = (typeof schema === 'string' && schema) || 'core';
        this.knownTags = resolveKnownTags ? coreKnownTags : {};
        this.tags = getTags(customTags, this.name);
        this.toStringOptions = toStringDefaults !== null && toStringDefaults !== void 0 ? toStringDefaults : null;
        Object.defineProperty(this, MAP, { value: map });
        Object.defineProperty(this, SCALAR, { value: string });
        Object.defineProperty(this, SEQ, { value: seq });
        // Used by createMap()
        this.sortMapEntries =
            typeof sortMapEntries === 'function'
                ? sortMapEntries
                : sortMapEntries === true
                    ? sortMapEntriesByKey
                    : null;
    }
    clone() {
        const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));
        copy.tags = this.tags.slice();
        return copy;
    }
}

export { Schema };
import { map } from './common/map.js';
import { nullTag } from './common/null.js';
import { seq } from './common/seq.js';
import { string } from './common/string.js';
import { boolTag } from './core/bool.js';
import { float, floatExp, floatNaN } from './core/float.js';
import { int, intHex, intOct } from './core/int.js';
import { schema } from './core/schema.js';
import { schema as schema$1 } from './json/schema.js';
import { binary } from './yaml-1.1/binary.js';
import { omap } from './yaml-1.1/omap.js';
import { pairs } from './yaml-1.1/pairs.js';
import { schema as schema$2 } from './yaml-1.1/schema.js';
import { set } from './yaml-1.1/set.js';
import { floatTime, intTime, timestamp } from './yaml-1.1/timestamp.js';

const schemas = new Map([
    ['core', schema],
    ['failsafe', [map, seq, string]],
    ['json', schema$1],
    ['yaml11', schema$2],
    ['yaml-1.1', schema$2]
]);
const tagsByName = {
    binary,
    bool: boolTag,
    float,
    floatExp,
    floatNaN,
    floatTime,
    int,
    intHex,
    intOct,
    intTime,
    map,
    null: nullTag,
    omap,
    pairs,
    seq,
    set,
    timestamp
};
const coreKnownTags = {
    'tag:yaml.org,2002:binary': binary,
    'tag:yaml.org,2002:omap': omap,
    'tag:yaml.org,2002:pairs': pairs,
    'tag:yaml.org,2002:set': set,
    'tag:yaml.org,2002:timestamp': timestamp
};
function getTags(customTags, schemaName) {
    let tags = schemas.get(schemaName);
    if (!tags) {
        if (Array.isArray(customTags))
            tags = [];
        else {
            const keys = Array.from(schemas.keys())
                .filter(key => key !== 'yaml11')
                .map(key => JSON.stringify(key))
                .join(', ');
            throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`);
        }
    }
    if (Array.isArray(customTags)) {
        for (const tag of customTags)
            tags = tags.concat(tag);
    }
    else if (typeof customTags === 'function') {
        tags = customTags(tags.slice());
    }
    return tags.map(tag => {
        if (typeof tag !== 'string')
            return tag;
        const tagObj = tagsByName[tag];
        if (tagObj)
            return tagObj;
        const keys = Object.keys(tagsByName)
            .map(key => JSON.stringify(key))
            .join(', ');
        throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`);
    });
}

export { coreKnownTags, getTags };
import { Scalar } from '../../nodes/Scalar.js';
import { stringifyString } from '../../stringify/stringifyString.js';

const binary = {
    identify: value => value instanceof Uint8Array,
    default: false,
    tag: 'tag:yaml.org,2002:binary',
    /**
     * Returns a Buffer in node and an Uint8Array in browsers
     *
     * To use the resulting buffer as an image, you'll want to do something like:
     *
     *   const blob = new Blob([buffer], { type: 'image/jpeg' })
     *   document.querySelector('#photo').src = URL.createObjectURL(blob)
     */
    resolve(src, onError) {
        if (typeof Buffer === 'function') {
            return Buffer.from(src, 'base64');
        }
        else if (typeof atob === 'function') {
            // On IE 11, atob() can't handle newlines
            const str = atob(src.replace(/[\n\r]/g, ''));
            const buffer = new Uint8Array(str.length);
            for (let i = 0; i < str.length; ++i)
                buffer[i] = str.charCodeAt(i);
            return buffer;
        }
        else {
            onError('This environment does not support reading binary tags; either Buffer or atob is required');
            return src;
        }
    },
    stringify({ comment, type, value }, ctx, onComment, onChompKeep) {
        const buf = value; // checked earlier by binary.identify()
        let str;
        if (typeof Buffer === 'function') {
            str =
                buf instanceof Buffer
                    ? buf.toString('base64')
                    : Buffer.from(buf.buffer).toString('base64');
        }
        else if (typeof btoa === 'function') {
            let s = '';
            for (let i = 0; i < buf.length; ++i)
                s += String.fromCharCode(buf[i]);
            str = btoa(s);
        }
        else {
            throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');
        }
        if (!type)
            type = Scalar.BLOCK_LITERAL;
        if (type !== Scalar.QUOTE_DOUBLE) {
            const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);
            const n = Math.ceil(str.length / lineWidth);
            const lines = new Array(n);
            for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {
                lines[i] = str.substr(o, lineWidth);
            }
            str = lines.join(type === Scalar.BLOCK_LITERAL ? '\n' : ' ');
        }
        return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);
    }
};

export { binary };
import { Scalar } from '../../nodes/Scalar.js';

function boolStringify({ value, source }, ctx) {
    const boolObj = value ? trueTag : falseTag;
    if (source && boolObj.test.test(source))
        return source;
    return value ? ctx.options.trueStr : ctx.options.falseStr;
}
const trueTag = {
    identify: value => value === true,
    default: true,
    tag: 'tag:yaml.org,2002:bool',
    test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,
    resolve: () => new Scalar(true),
    stringify: boolStringify
};
const falseTag = {
    identify: value => value === false,
    default: true,
    tag: 'tag:yaml.org,2002:bool',
    test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i,
    resolve: () => new Scalar(false),
    stringify: boolStringify
};

export { falseTag, trueTag };
import { Scalar } from '../../nodes/Scalar.js';
import { stringifyNumber } from '../../stringify/stringifyNumber.js';

const floatNaN = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    test: /^[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN)$/,
    resolve: (str) => str.slice(-3).toLowerCase() === 'nan'
        ? NaN
        : str[0] === '-'
            ? Number.NEGATIVE_INFINITY
            : Number.POSITIVE_INFINITY,
    stringify: stringifyNumber
};
const floatExp = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    format: 'EXP',
    test: /^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,
    resolve: (str) => parseFloat(str.replace(/_/g, '')),
    stringify(node) {
        const num = Number(node.value);
        return isFinite(num) ? num.toExponential() : stringifyNumber(node);
    }
};
const float = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    test: /^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,
    resolve(str) {
        const node = new Scalar(parseFloat(str.replace(/_/g, '')));
        const dot = str.indexOf('.');
        if (dot !== -1) {
            const f = str.substring(dot + 1).replace(/_/g, '');
            if (f[f.length - 1] === '0')
                node.minFractionDigits = f.length;
        }
        return node;
    },
    stringify: stringifyNumber
};

export { float, floatExp, floatNaN };
import { stringifyNumber } from '../../stringify/stringifyNumber.js';

const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);
function intResolve(str, offset, radix, { intAsBigInt }) {
    const sign = str[0];
    if (sign === '-' || sign === '+')
        offset += 1;
    str = str.substring(offset).replace(/_/g, '');
    if (intAsBigInt) {
        switch (radix) {
            case 2:
                str = `0b${str}`;
                break;
            case 8:
                str = `0o${str}`;
                break;
            case 16:
                str = `0x${str}`;
                break;
        }
        const n = BigInt(str);
        return sign === '-' ? BigInt(-1) * n : n;
    }
    const n = parseInt(str, radix);
    return sign === '-' ? -1 * n : n;
}
function intStringify(node, radix, prefix) {
    const { value } = node;
    if (intIdentify(value)) {
        const str = value.toString(radix);
        return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;
    }
    return stringifyNumber(node);
}
const intBin = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'BIN',
    test: /^[-+]?0b[0-1_]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),
    stringify: node => intStringify(node, 2, '0b')
};
const intOct = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'OCT',
    test: /^[-+]?0[0-7_]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),
    stringify: node => intStringify(node, 8, '0')
};
const int = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    test: /^[-+]?[0-9][0-9_]*$/,
    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
    stringify: stringifyNumber
};
const intHex = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'HEX',
    test: /^[-+]?0x[0-9a-fA-F_]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
    stringify: node => intStringify(node, 16, '0x')
};

export { int, intBin, intHex, intOct };
import { YAMLSeq } from '../../nodes/YAMLSeq.js';
import { toJS } from '../../nodes/toJS.js';
import { isScalar, isPair } from '../../nodes/Node.js';
import { YAMLMap } from '../../nodes/YAMLMap.js';
import { resolvePairs, createPairs } from './pairs.js';

class YAMLOMap extends YAMLSeq {
    constructor() {
        super();
        this.add = YAMLMap.prototype.add.bind(this);
        this.delete = YAMLMap.prototype.delete.bind(this);
        this.get = YAMLMap.prototype.get.bind(this);
        this.has = YAMLMap.prototype.has.bind(this);
        this.set = YAMLMap.prototype.set.bind(this);
        this.tag = YAMLOMap.tag;
    }
    /**
     * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,
     * but TypeScript won't allow widening the signature of a child method.
     */
    toJSON(_, ctx) {
        if (!ctx)
            return super.toJSON(_);
        const map = new Map();
        if (ctx === null || ctx === void 0 ? void 0 : ctx.onCreate)
            ctx.onCreate(map);
        for (const pair of this.items) {
            let key, value;
            if (isPair(pair)) {
                key = toJS(pair.key, '', ctx);
                value = toJS(pair.value, key, ctx);
            }
            else {
                key = toJS(pair, '', ctx);
            }
            if (map.has(key))
                throw new Error('Ordered maps must not include duplicate keys');
            map.set(key, value);
        }
        return map;
    }
}
YAMLOMap.tag = 'tag:yaml.org,2002:omap';
const omap = {
    collection: 'seq',
    identify: value => value instanceof Map,
    nodeClass: YAMLOMap,
    default: false,
    tag: 'tag:yaml.org,2002:omap',
    resolve(seq, onError) {
        const pairs = resolvePairs(seq, onError);
        const seenKeys = [];
        for (const { key } of pairs.items) {
            if (isScalar(key)) {
                if (seenKeys.includes(key.value)) {
                    onError(`Ordered maps must not include duplicate keys: ${key.value}`);
                }
                else {
                    seenKeys.push(key.value);
                }
            }
        }
        return Object.assign(new YAMLOMap(), pairs);
    },
    createNode(schema, iterable, ctx) {
        const pairs = createPairs(schema, iterable, ctx);
        const omap = new YAMLOMap();
        omap.items = pairs.items;
        return omap;
    }
};

export { YAMLOMap, omap };
import { isSeq, isPair, isMap } from '../../nodes/Node.js';
import { Pair, createPair } from '../../nodes/Pair.js';
import { Scalar } from '../../nodes/Scalar.js';
import { YAMLSeq } from '../../nodes/YAMLSeq.js';

function resolvePairs(seq, onError) {
    var _a;
    if (isSeq(seq)) {
        for (let i = 0; i < seq.items.length; ++i) {
            let item = seq.items[i];
            if (isPair(item))
                continue;
            else if (isMap(item)) {
                if (item.items.length > 1)
                    onError('Each pair must have its own sequence indicator');
                const pair = item.items[0] || new Pair(new Scalar(null));
                if (item.commentBefore)
                    pair.key.commentBefore = pair.key.commentBefore
                        ? `${item.commentBefore}\n${pair.key.commentBefore}`
                        : item.commentBefore;
                if (item.comment) {
                    const cn = (_a = pair.value) !== null && _a !== void 0 ? _a : pair.key;
                    cn.comment = cn.comment
                        ? `${item.comment}\n${cn.comment}`
                        : item.comment;
                }
                item = pair;
            }
            seq.items[i] = isPair(item) ? item : new Pair(item);
        }
    }
    else
        onError('Expected a sequence for this tag');
    return seq;
}
function createPairs(schema, iterable, ctx) {
    const { replacer } = ctx;
    const pairs = new YAMLSeq(schema);
    pairs.tag = 'tag:yaml.org,2002:pairs';
    let i = 0;
    if (iterable && Symbol.iterator in Object(iterable))
        for (let it of iterable) {
            if (typeof replacer === 'function')
                it = replacer.call(iterable, String(i++), it);
            let key, value;
            if (Array.isArray(it)) {
                if (it.length === 2) {
                    key = it[0];
                    value = it[1];
                }
                else
                    throw new TypeError(`Expected [key, value] tuple: ${it}`);
            }
            else if (it && it instanceof Object) {
                const keys = Object.keys(it);
                if (keys.length === 1) {
                    key = keys[0];
                    value = it[key];
                }
                else
                    throw new TypeError(`Expected { key: value } tuple: ${it}`);
            }
            else {
                key = it;
            }
            pairs.items.push(createPair(key, value, ctx));
        }
    return pairs;
}
const pairs = {
    collection: 'seq',
    default: false,
    tag: 'tag:yaml.org,2002:pairs',
    resolve: resolvePairs,
    createNode: createPairs
};

export { createPairs, pairs, resolvePairs };
import { map } from '../common/map.js';
import { nullTag } from '../common/null.js';
import { seq } from '../common/seq.js';
import { string } from '../common/string.js';
import { binary } from './binary.js';
import { trueTag, falseTag } from './bool.js';
import { floatNaN, floatExp, float } from './float.js';
import { intBin, intOct, int, intHex } from './int.js';
import { omap } from './omap.js';
import { pairs } from './pairs.js';
import { set } from './set.js';
import { intTime, floatTime, timestamp } from './timestamp.js';

const schema = [
    map,
    seq,
    string,
    nullTag,
    trueTag,
    falseTag,
    intBin,
    intOct,
    int,
    intHex,
    floatNaN,
    floatExp,
    float,
    binary,
    omap,
    pairs,
    set,
    intTime,
    floatTime,
    timestamp
];

export { schema };
import { isMap, isPair, isScalar } from '../../nodes/Node.js';
import { createPair, Pair } from '../../nodes/Pair.js';
import { YAMLMap, findPair } from '../../nodes/YAMLMap.js';

class YAMLSet extends YAMLMap {
    constructor(schema) {
        super(schema);
        this.tag = YAMLSet.tag;
    }
    add(key) {
        let pair;
        if (isPair(key))
            pair = key;
        else if (typeof key === 'object' &&
            'key' in key &&
            'value' in key &&
            key.value === null)
            pair = new Pair(key.key, null);
        else
            pair = new Pair(key, null);
        const prev = findPair(this.items, pair.key);
        if (!prev)
            this.items.push(pair);
    }
    get(key, keepPair) {
        const pair = findPair(this.items, key);
        return !keepPair && isPair(pair)
            ? isScalar(pair.key)
                ? pair.key.value
                : pair.key
            : pair;
    }
    set(key, value) {
        if (typeof value !== 'boolean')
            throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
        const prev = findPair(this.items, key);
        if (prev && !value) {
            this.items.splice(this.items.indexOf(prev), 1);
        }
        else if (!prev && value) {
            this.items.push(new Pair(key));
        }
    }
    toJSON(_, ctx) {
        return super.toJSON(_, ctx, Set);
    }
    toString(ctx, onComment, onChompKeep) {
        if (!ctx)
            return JSON.stringify(this);
        if (this.hasAllNullValues(true))
            return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);
        else
            throw new Error('Set items must all have null values');
    }
}
YAMLSet.tag = 'tag:yaml.org,2002:set';
const set = {
    collection: 'map',
    identify: value => value instanceof Set,
    nodeClass: YAMLSet,
    default: false,
    tag: 'tag:yaml.org,2002:set',
    resolve(map, onError) {
        if (isMap(map)) {
            if (map.hasAllNullValues(true))
                return Object.assign(new YAMLSet(), map);
            else
                onError('Set items must all have null values');
        }
        else
            onError('Expected a mapping for this tag');
        return map;
    },
    createNode(schema, iterable, ctx) {
        const { replacer } = ctx;
        const set = new YAMLSet(schema);
        if (iterable && Symbol.iterator in Object(iterable))
            for (let value of iterable) {
                if (typeof replacer === 'function')
                    value = replacer.call(iterable, value, value);
                set.items.push(createPair(value, null, ctx));
            }
        return set;
    }
};

export { YAMLSet, set };
import { stringifyNumber } from '../../stringify/stringifyNumber.js';

/** Internal types handle bigint as number, because TS can't figure it out. */
function parseSexagesimal(str, asBigInt) {
    const sign = str[0];
    const parts = sign === '-' || sign === '+' ? str.substring(1) : str;
    const num = (n) => asBigInt ? BigInt(n) : Number(n);
    const res = parts
        .replace(/_/g, '')
        .split(':')
        .reduce((res, p) => res * num(60) + num(p), num(0));
    return (sign === '-' ? num(-1) * res : res);
}
/**
 * hhhh:mm:ss.sss
 *
 * Internal types handle bigint as number, because TS can't figure it out.
 */
function stringifySexagesimal(node) {
    let { value } = node;
    let num = (n) => n;
    if (typeof value === 'bigint')
        num = n => BigInt(n);
    else if (isNaN(value) || !isFinite(value))
        return stringifyNumber(node);
    let sign = '';
    if (value < 0) {
        sign = '-';
        value *= num(-1);
    }
    const _60 = num(60);
    const parts = [value % _60]; // seconds, including ms
    if (value < 60) {
        parts.unshift(0); // at least one : is required
    }
    else {
        value = (value - parts[0]) / _60;
        parts.unshift(value % _60); // minutes
        if (value >= 60) {
            value = (value - parts[0]) / _60;
            parts.unshift(value); // hours
        }
    }
    return (sign +
        parts
            .map(n => (n < 10 ? '0' + String(n) : String(n)))
            .join(':')
            .replace(/000000\d*$/, '') // % 60 may introduce error
    );
}
const intTime = {
    identify: value => typeof value === 'bigint' || Number.isInteger(value),
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'TIME',
    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,
    resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),
    stringify: stringifySexagesimal
};
const floatTime = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    format: 'TIME',
    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,
    resolve: str => parseSexagesimal(str, false),
    stringify: stringifySexagesimal
};
const timestamp = {
    identify: value => value instanceof Date,
    default: true,
    tag: 'tag:yaml.org,2002:timestamp',
    // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part
    // may be omitted altogether, resulting in a date format. In such a case, the time part is
    // assumed to be 00:00:00Z (start of day, UTC).
    test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd
        '(?:' + // time is optional
        '(?:t|T|[ \\t]+)' + // t | T | whitespace
        '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?
        '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30
        ')?$'),
    resolve(str) {
        const match = str.match(timestamp.test);
        if (!match)
            throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');
        const [, year, month, day, hour, minute, second] = match.map(Number);
        const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;
        let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);
        const tz = match[8];
        if (tz && tz !== 'Z') {
            let d = parseSexagesimal(tz, false);
            if (Math.abs(d) < 30)
                d *= 60;
            date -= 60000 * d;
        }
        return new Date(date);
    },
    stringify: ({ value }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '')
};

export { floatTime, intTime, timestamp };
const FOLD_FLOW = 'flow';
const FOLD_BLOCK = 'block';
const FOLD_QUOTED = 'quoted';
/**
 * Tries to keep input at up to `lineWidth` characters, splitting only on spaces
 * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are
 * terminated with `\n` and started with `indent`.
 */
function foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {
    if (!lineWidth || lineWidth < 0)
        return text;
    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
    if (text.length <= endStep)
        return text;
    const folds = [];
    const escapedFolds = {};
    let end = lineWidth - indent.length;
    if (typeof indentAtStart === 'number') {
        if (indentAtStart > lineWidth - Math.max(2, minContentWidth))
            folds.push(0);
        else
            end = lineWidth - indentAtStart;
    }
    let split = undefined;
    let prev = undefined;
    let overflow = false;
    let i = -1;
    let escStart = -1;
    let escEnd = -1;
    if (mode === FOLD_BLOCK) {
        i = consumeMoreIndentedLines(text, i);
        if (i !== -1)
            end = i + endStep;
    }
    for (let ch; (ch = text[(i += 1)]);) {
        if (mode === FOLD_QUOTED && ch === '\\') {
            escStart = i;
            switch (text[i + 1]) {
                case 'x':
                    i += 3;
                    break;
                case 'u':
                    i += 5;
                    break;
                case 'U':
                    i += 9;
                    break;
                default:
                    i += 1;
            }
            escEnd = i;
        }
        if (ch === '\n') {
            if (mode === FOLD_BLOCK)
                i = consumeMoreIndentedLines(text, i);
            end = i + endStep;
            split = undefined;
        }
        else {
            if (ch === ' ' &&
                prev &&
                prev !== ' ' &&
                prev !== '\n' &&
                prev !== '\t') {
                // space surrounded by non-space can be replaced with newline + indent
                const next = text[i + 1];
                if (next && next !== ' ' && next !== '\n' && next !== '\t')
                    split = i;
            }
            if (i >= end) {
                if (split) {
                    folds.push(split);
                    end = split + endStep;
                    split = undefined;
                }
                else if (mode === FOLD_QUOTED) {
                    // white-space collected at end may stretch past lineWidth
                    while (prev === ' ' || prev === '\t') {
                        prev = ch;
                        ch = text[(i += 1)];
                        overflow = true;
                    }
                    // Account for newline escape, but don't break preceding escape
                    const j = i > escEnd + 1 ? i - 2 : escStart - 1;
                    // Bail out if lineWidth & minContentWidth are shorter than an escape string
                    if (escapedFolds[j])
                        return text;
                    folds.push(j);
                    escapedFolds[j] = true;
                    end = j + endStep;
                    split = undefined;
                }
                else {
                    overflow = true;
                }
            }
        }
        prev = ch;
    }
    if (overflow && onOverflow)
        onOverflow();
    if (folds.length === 0)
        return text;
    if (onFold)
        onFold();
    let res = text.slice(0, folds[0]);
    for (let i = 0; i < folds.length; ++i) {
        const fold = folds[i];
        const end = folds[i + 1] || text.length;
        if (fold === 0)
            res = `\n${indent}${text.slice(0, end)}`;
        else {
            if (mode === FOLD_QUOTED && escapedFolds[fold])
                res += `${text[fold]}\\`;
            res += `\n${indent}${text.slice(fold + 1, end)}`;
        }
    }
    return res;
}
/**
 * Presumes `i + 1` is at the start of a line
 * @returns index of last newline in more-indented block
 */
function consumeMoreIndentedLines(text, i) {
    let ch = text[i + 1];
    while (ch === ' ' || ch === '\t') {
        do {
            ch = text[(i += 1)];
        } while (ch && ch !== '\n');
        ch = text[i + 1];
    }
    return i;
}

export { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };
import { anchorIsValid } from '../doc/anchors.js';
import { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/Node.js';
import { stringifyComment } from './stringifyComment.js';
import { stringifyString } from './stringifyString.js';

function createStringifyContext(doc, options) {
    const opt = Object.assign({
        blockQuote: true,
        commentString: stringifyComment,
        defaultKeyType: null,
        defaultStringType: 'PLAIN',
        directives: null,
        doubleQuotedAsJSON: false,
        doubleQuotedMinMultiLineLength: 40,
        falseStr: 'false',
        indentSeq: true,
        lineWidth: 80,
        minContentWidth: 20,
        nullStr: 'null',
        simpleKeys: false,
        singleQuote: null,
        trueStr: 'true',
        verifyAliasOrder: true
    }, doc.schema.toStringOptions, options);
    let inFlow;
    switch (opt.collectionStyle) {
        case 'block':
            inFlow = false;
            break;
        case 'flow':
            inFlow = true;
            break;
        default:
            inFlow = null;
    }
    return {
        anchors: new Set(),
        doc,
        indent: '',
        indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ',
        inFlow,
        options: opt
    };
}
function getTagObject(tags, item) {
    var _a, _b, _c, _d;
    if (item.tag) {
        const match = tags.filter(t => t.tag === item.tag);
        if (match.length > 0)
            return (_a = match.find(t => t.format === item.format)) !== null && _a !== void 0 ? _a : match[0];
    }
    let tagObj = undefined;
    let obj;
    if (isScalar(item)) {
        obj = item.value;
        const match = tags.filter(t => { var _a; return (_a = t.identify) === null || _a === void 0 ? void 0 : _a.call(t, obj); });
        tagObj =
            (_b = match.find(t => t.format === item.format)) !== null && _b !== void 0 ? _b : match.find(t => !t.format);
    }
    else {
        obj = item;
        tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);
    }
    if (!tagObj) {
        const name = (_d = (_c = obj === null || obj === void 0 ? void 0 : obj.constructor) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : typeof obj;
        throw new Error(`Tag not resolved for ${name} value`);
    }
    return tagObj;
}
// needs to be called before value stringifier to allow for circular anchor refs
function stringifyProps(node, tagObj, { anchors, doc }) {
    if (!doc.directives)
        return '';
    const props = [];
    const anchor = (isScalar(node) || isCollection(node)) && node.anchor;
    if (anchor && anchorIsValid(anchor)) {
        anchors.add(anchor);
        props.push(`&${anchor}`);
    }
    const tag = node.tag ? node.tag : tagObj.default ? null : tagObj.tag;
    if (tag)
        props.push(doc.directives.tagString(tag));
    return props.join(' ');
}
function stringify(item, ctx, onComment, onChompKeep) {
    var _a, _b;
    if (isPair(item))
        return item.toString(ctx, onComment, onChompKeep);
    if (isAlias(item)) {
        if (ctx.doc.directives)
            return item.toString(ctx);
        if ((_a = ctx.resolvedAliases) === null || _a === void 0 ? void 0 : _a.has(item)) {
            throw new TypeError(`Cannot stringify circular structure without alias nodes`);
        }
        else {
            if (ctx.resolvedAliases)
                ctx.resolvedAliases.add(item);
            else
                ctx.resolvedAliases = new Set([item]);
            item = item.resolve(ctx.doc);
        }
    }
    let tagObj = undefined;
    const node = isNode(item)
        ? item
        : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });
    if (!tagObj)
        tagObj = getTagObject(ctx.doc.schema.tags, node);
    const props = stringifyProps(node, tagObj, ctx);
    if (props.length > 0)
        ctx.indentAtStart = ((_b = ctx.indentAtStart) !== null && _b !== void 0 ? _b : 0) + props.length + 1;
    const str = typeof tagObj.stringify === 'function'
        ? tagObj.stringify(node, ctx, onComment, onChompKeep)
        : isScalar(node)
            ? stringifyString(node, ctx, onComment, onChompKeep)
            : node.toString(ctx, onComment, onChompKeep);
    if (!props)
        return str;
    return isScalar(node) || str[0] === '{' || str[0] === '['
        ? `${props} ${str}`
        : `${props}\n${ctx.indent}${str}`;
}

export { createStringifyContext, stringify };
import { Collection } from '../nodes/Collection.js';
import { isNode, isPair } from '../nodes/Node.js';
import { stringify } from './stringify.js';
import { lineComment, indentComment } from './stringifyComment.js';

function stringifyCollection(collection, ctx, options) {
    var _a;
    const flow = (_a = ctx.inFlow) !== null && _a !== void 0 ? _a : collection.flow;
    const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;
    return stringify(collection, ctx, options);
}
function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {
    const { indent, options: { commentString } } = ctx;
    const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });
    let chompKeep = false; // flag for the preceding node's status
    const lines = [];
    for (let i = 0; i < items.length; ++i) {
        const item = items[i];
        let comment = null;
        if (isNode(item)) {
            if (!chompKeep && item.spaceBefore)
                lines.push('');
            addCommentBefore(ctx, lines, item.commentBefore, chompKeep);
            if (item.comment)
                comment = item.comment;
        }
        else if (isPair(item)) {
            const ik = isNode(item.key) ? item.key : null;
            if (ik) {
                if (!chompKeep && ik.spaceBefore)
                    lines.push('');
                addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);
            }
        }
        chompKeep = false;
        let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));
        if (comment)
            str += lineComment(str, itemIndent, commentString(comment));
        if (chompKeep && comment)
            chompKeep = false;
        lines.push(blockItemPrefix + str);
    }
    let str;
    if (lines.length === 0) {
        str = flowChars.start + flowChars.end;
    }
    else {
        str = lines[0];
        for (let i = 1; i < lines.length; ++i) {
            const line = lines[i];
            str += line ? `\n${indent}${line}` : '\n';
        }
    }
    if (comment) {
        str += '\n' + indentComment(commentString(comment), indent);
        if (onComment)
            onComment();
    }
    else if (chompKeep && onChompKeep)
        onChompKeep();
    return str;
}
function stringifyFlowCollection({ comment, items }, ctx, { flowChars, itemIndent, onComment }) {
    const { indent, indentStep, options: { commentString } } = ctx;
    itemIndent += indentStep;
    const itemCtx = Object.assign({}, ctx, {
        indent: itemIndent,
        inFlow: true,
        type: null
    });
    let reqNewline = false;
    let linesAtValue = 0;
    const lines = [];
    for (let i = 0; i < items.length; ++i) {
        const item = items[i];
        let comment = null;
        if (isNode(item)) {
            if (item.spaceBefore)
                lines.push('');
            addCommentBefore(ctx, lines, item.commentBefore, false);
            if (item.comment)
                comment = item.comment;
        }
        else if (isPair(item)) {
            const ik = isNode(item.key) ? item.key : null;
            if (ik) {
                if (ik.spaceBefore)
                    lines.push('');
                addCommentBefore(ctx, lines, ik.commentBefore, false);
                if (ik.comment)
                    reqNewline = true;
            }
            const iv = isNode(item.value) ? item.value : null;
            if (iv) {
                if (iv.comment)
                    comment = iv.comment;
                if (iv.commentBefore)
                    reqNewline = true;
            }
            else if (item.value == null && ik && ik.comment) {
                comment = ik.comment;
            }
        }
        if (comment)
            reqNewline = true;
        let str = stringify(item, itemCtx, () => (comment = null));
        if (i < items.length - 1)
            str += ',';
        if (comment)
            str += lineComment(str, itemIndent, commentString(comment));
        if (!reqNewline && (lines.length > linesAtValue || str.includes('\n')))
            reqNewline = true;
        lines.push(str);
        linesAtValue = lines.length;
    }
    let str;
    const { start, end } = flowChars;
    if (lines.length === 0) {
        str = start + end;
    }
    else {
        if (!reqNewline) {
            const len = lines.reduce((sum, line) => sum + line.length + 2, 2);
            reqNewline = len > Collection.maxFlowStringSingleLineLength;
        }
        if (reqNewline) {
            str = start;
            for (const line of lines)
                str += line ? `\n${indentStep}${indent}${line}` : '\n';
            str += `\n${indent}${end}`;
        }
        else {
            str = `${start} ${lines.join(' ')} ${end}`;
        }
    }
    if (comment) {
        str += lineComment(str, commentString(comment), indent);
        if (onComment)
            onComment();
    }
    return str;
}
function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {
    if (comment && chompKeep)
        comment = comment.replace(/^\n+/, '');
    if (comment) {
        const ic = indentComment(commentString(comment), indent);
        lines.push(ic.trimStart()); // Avoid double indent on first line
    }
}

export { stringifyCollection };
/**
 * Stringifies a comment.
 *
 * Empty comment lines are left empty,
 * lines consisting of a single space are replaced by `#`,
 * and all other lines are prefixed with a `#`.
 */
const stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');
function indentComment(comment, indent) {
    if (/^\n+$/.test(comment))
        return comment.substring(1);
    return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;
}
const lineComment = (str, indent, comment) => str.endsWith('\n')
    ? indentComment(comment, indent)
    : comment.includes('\n')
        ? '\n' + indentComment(comment, indent)
        : (str.endsWith(' ') ? '' : ' ') + comment;

export { indentComment, lineComment, stringifyComment };
import { isNode } from '../nodes/Node.js';
import { createStringifyContext, stringify } from './stringify.js';
import { indentComment, lineComment } from './stringifyComment.js';

function stringifyDocument(doc, options) {
    var _a;
    const lines = [];
    let hasDirectives = options.directives === true;
    if (options.directives !== false && doc.directives) {
        const dir = doc.directives.toString(doc);
        if (dir) {
            lines.push(dir);
            hasDirectives = true;
        }
        else if (doc.directives.docStart)
            hasDirectives = true;
    }
    if (hasDirectives)
        lines.push('---');
    const ctx = createStringifyContext(doc, options);
    const { commentString } = ctx.options;
    if (doc.commentBefore) {
        if (lines.length !== 1)
            lines.unshift('');
        const cs = commentString(doc.commentBefore);
        lines.unshift(indentComment(cs, ''));
    }
    let chompKeep = false;
    let contentComment = null;
    if (doc.contents) {
        if (isNode(doc.contents)) {
            if (doc.contents.spaceBefore && hasDirectives)
                lines.push('');
            if (doc.contents.commentBefore) {
                const cs = commentString(doc.contents.commentBefore);
                lines.push(indentComment(cs, ''));
            }
            // top-level block scalars need to be indented if followed by a comment
            ctx.forceBlockIndent = !!doc.comment;
            contentComment = doc.contents.comment;
        }
        const onChompKeep = contentComment ? undefined : () => (chompKeep = true);
        let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);
        if (contentComment)
            body += lineComment(body, '', commentString(contentComment));
        if ((body[0] === '|' || body[0] === '>') &&
            lines[lines.length - 1] === '---') {
            // Top-level block scalars with a preceding doc marker ought to use the
            // same line for their header.
            lines[lines.length - 1] = `--- ${body}`;
        }
        else
            lines.push(body);
    }
    else {
        lines.push(stringify(doc.contents, ctx));
    }
    if ((_a = doc.directives) === null || _a === void 0 ? void 0 : _a.docEnd) {
        if (doc.comment) {
            const cs = commentString(doc.comment);
            if (cs.includes('\n')) {
                lines.push('...');
                lines.push(indentComment(cs, ''));
            }
            else {
                lines.push(`... ${cs}`);
            }
        }
        else {
            lines.push('...');
        }
    }
    else {
        let dc = doc.comment;
        if (dc && chompKeep)
            dc = dc.replace(/^\n+/, '');
        if (dc) {
            if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
                lines.push('');
            lines.push(indentComment(commentString(dc), ''));
        }
    }
    return lines.join('\n') + '\n';
}

export { stringifyDocument };
function stringifyNumber({ format, minFractionDigits, tag, value }) {
    if (typeof value === 'bigint')
        return String(value);
    const num = typeof value === 'number' ? value : Number(value);
    if (!isFinite(num))
        return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';
    let n = JSON.stringify(value);
    if (!format &&
        minFractionDigits &&
        (!tag || tag === 'tag:yaml.org,2002:float') &&
        /^\d/.test(n)) {
        let i = n.indexOf('.');
        if (i < 0) {
            i = n.length;
            n += '.';
        }
        let d = minFractionDigits - (n.length - i - 1);
        while (d-- > 0)
            n += '0';
    }
    return n;
}

export { stringifyNumber };
import { isCollection, isNode, isScalar, isSeq } from '../nodes/Node.js';
import { Scalar } from '../nodes/Scalar.js';
import { stringify } from './stringify.js';
import { lineComment, indentComment } from './stringifyComment.js';

function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
    const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;
    let keyComment = (isNode(key) && key.comment) || null;
    if (simpleKeys) {
        if (keyComment) {
            throw new Error('With simple keys, key nodes cannot have comments');
        }
        if (isCollection(key)) {
            const msg = 'With simple keys, collection cannot be used as a key value';
            throw new Error(msg);
        }
    }
    let explicitKey = !simpleKeys &&
        (!key ||
            (keyComment && value == null && !ctx.inFlow) ||
            isCollection(key) ||
            (isScalar(key)
                ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL
                : typeof key === 'object'));
    ctx = Object.assign({}, ctx, {
        allNullValues: false,
        implicitKey: !explicitKey && (simpleKeys || !allNullValues),
        indent: indent + indentStep
    });
    let keyCommentDone = false;
    let chompKeep = false;
    let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));
    if (!explicitKey && !ctx.inFlow && str.length > 1024) {
        if (simpleKeys)
            throw new Error('With simple keys, single line scalar must not span more than 1024 characters');
        explicitKey = true;
    }
    if (ctx.inFlow) {
        if (allNullValues || value == null) {
            if (keyCommentDone && onComment)
                onComment();
            return str === '' ? '?' : explicitKey ? `? ${str}` : str;
        }
    }
    else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {
        str = `? ${str}`;
        if (keyComment && !keyCommentDone) {
            str += lineComment(str, ctx.indent, commentString(keyComment));
        }
        else if (chompKeep && onChompKeep)
            onChompKeep();
        return str;
    }
    if (keyCommentDone)
        keyComment = null;
    if (explicitKey) {
        if (keyComment)
            str += lineComment(str, ctx.indent, commentString(keyComment));
        str = `? ${str}\n${indent}:`;
    }
    else {
        str = `${str}:`;
        if (keyComment)
            str += lineComment(str, ctx.indent, commentString(keyComment));
    }
    let vcb = '';
    let valueComment = null;
    if (isNode(value)) {
        if (value.spaceBefore)
            vcb = '\n';
        if (value.commentBefore) {
            const cs = commentString(value.commentBefore);
            vcb += `\n${indentComment(cs, ctx.indent)}`;
        }
        valueComment = value.comment;
    }
    else if (value && typeof value === 'object') {
        value = doc.createNode(value);
    }
    ctx.implicitKey = false;
    if (!explicitKey && !keyComment && isScalar(value))
        ctx.indentAtStart = str.length + 1;
    chompKeep = false;
    if (!indentSeq &&
        indentStep.length >= 2 &&
        !ctx.inFlow &&
        !explicitKey &&
        isSeq(value) &&
        !value.flow &&
        !value.tag &&
        !value.anchor) {
        // If indentSeq === false, consider '- ' as part of indentation where possible
        ctx.indent = ctx.indent.substr(2);
    }
    let valueCommentDone = false;
    const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));
    let ws = ' ';
    if (vcb || keyComment) {
        if (valueStr === '' && !ctx.inFlow)
            ws = vcb === '\n' ? '\n\n' : vcb;
        else
            ws = `${vcb}\n${ctx.indent}`;
    }
    else if (!explicitKey && isCollection(value)) {
        const flow = valueStr[0] === '[' || valueStr[0] === '{';
        if (!flow || valueStr.includes('\n'))
            ws = `\n${ctx.indent}`;
    }
    else if (valueStr === '' || valueStr[0] === '\n')
        ws = '';
    str += ws + valueStr;
    if (ctx.inFlow) {
        if (valueCommentDone && onComment)
            onComment();
    }
    else if (valueComment && !valueCommentDone) {
        str += lineComment(str, ctx.indent, commentString(valueComment));
    }
    else if (chompKeep && onChompKeep) {
        onChompKeep();
    }
    return str;
}

export { stringifyPair };
import { Scalar } from '../nodes/Scalar.js';
import { foldFlowLines, FOLD_QUOTED, FOLD_FLOW, FOLD_BLOCK } from './foldFlowLines.js';

const getFoldOptions = (ctx) => ({
    indentAtStart: ctx.indentAtStart,
    lineWidth: ctx.options.lineWidth,
    minContentWidth: ctx.options.minContentWidth
});
// Also checks for lines starting with %, as parsing the output as YAML 1.1 will
// presume that's starting a new document.
const containsDocumentMarker = (str) => /^(%|---|\.\.\.)/m.test(str);
function lineLengthOverLimit(str, lineWidth, indentLength) {
    if (!lineWidth || lineWidth < 0)
        return false;
    const limit = lineWidth - indentLength;
    const strLen = str.length;
    if (strLen <= limit)
        return false;
    for (let i = 0, start = 0; i < strLen; ++i) {
        if (str[i] === '\n') {
            if (i - start > limit)
                return true;
            start = i + 1;
            if (strLen - start <= limit)
                return false;
        }
    }
    return true;
}
function doubleQuotedString(value, ctx) {
    const json = JSON.stringify(value);
    if (ctx.options.doubleQuotedAsJSON)
        return json;
    const { implicitKey } = ctx;
    const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;
    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');
    let str = '';
    let start = 0;
    for (let i = 0, ch = json[i]; ch; ch = json[++i]) {
        if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') {
            // space before newline needs to be escaped to not be folded
            str += json.slice(start, i) + '\\ ';
            i += 1;
            start = i;
            ch = '\\';
        }
        if (ch === '\\')
            switch (json[i + 1]) {
                case 'u':
                    {
                        str += json.slice(start, i);
                        const code = json.substr(i + 2, 4);
                        switch (code) {
                            case '0000':
                                str += '\\0';
                                break;
                            case '0007':
                                str += '\\a';
                                break;
                            case '000b':
                                str += '\\v';
                                break;
                            case '001b':
                                str += '\\e';
                                break;
                            case '0085':
                                str += '\\N';
                                break;
                            case '00a0':
                                str += '\\_';
                                break;
                            case '2028':
                                str += '\\L';
                                break;
                            case '2029':
                                str += '\\P';
                                break;
                            default:
                                if (code.substr(0, 2) === '00')
                                    str += '\\x' + code.substr(2);
                                else
                                    str += json.substr(i, 6);
                        }
                        i += 5;
                        start = i + 1;
                    }
                    break;
                case 'n':
                    if (implicitKey ||
                        json[i + 2] === '"' ||
                        json.length < minMultiLineLength) {
                        i += 1;
                    }
                    else {
                        // folding will eat first newline
                        str += json.slice(start, i) + '\n\n';
                        while (json[i + 2] === '\\' &&
                            json[i + 3] === 'n' &&
                            json[i + 4] !== '"') {
                            str += '\n';
                            i += 2;
                        }
                        str += indent;
                        // space after newline needs to be escaped to not be folded
                        if (json[i + 2] === ' ')
                            str += '\\';
                        i += 1;
                        start = i + 1;
                    }
                    break;
                default:
                    i += 1;
            }
    }
    str = start ? str + json.slice(start) : json;
    return implicitKey
        ? str
        : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx));
}
function singleQuotedString(value, ctx) {
    if (ctx.options.singleQuote === false ||
        (ctx.implicitKey && value.includes('\n')) ||
        /[ \t]\n|\n[ \t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline
    )
        return doubleQuotedString(value, ctx);
    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');
    const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&\n${indent}`) + "'";
    return ctx.implicitKey
        ? res
        : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx));
}
function quotedString(value, ctx) {
    const { singleQuote } = ctx.options;
    let qs;
    if (singleQuote === false)
        qs = doubleQuotedString;
    else {
        const hasDouble = value.includes('"');
        const hasSingle = value.includes("'");
        if (hasDouble && !hasSingle)
            qs = singleQuotedString;
        else if (hasSingle && !hasDouble)
            qs = doubleQuotedString;
        else
            qs = singleQuote ? singleQuotedString : doubleQuotedString;
    }
    return qs(value, ctx);
}
function blockString({ comment, type, value }, ctx, onComment, onChompKeep) {
    const { blockQuote, commentString, lineWidth } = ctx.options;
    // 1. Block can't end in whitespace unless the last line is non-empty.
    // 2. Strings consisting of only whitespace are best rendered explicitly.
    if (!blockQuote || /\n[\t ]+$/.test(value) || /^\s*$/.test(value)) {
        return quotedString(value, ctx);
    }
    const indent = ctx.indent ||
        (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : '');
    const literal = blockQuote === 'literal'
        ? true
        : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED
            ? false
            : type === Scalar.BLOCK_LITERAL
                ? true
                : !lineLengthOverLimit(value, lineWidth, indent.length);
    if (!value)
        return literal ? '|\n' : '>\n';
    // determine chomping from whitespace at value end
    let chomp;
    let endStart;
    for (endStart = value.length; endStart > 0; --endStart) {
        const ch = value[endStart - 1];
        if (ch !== '\n' && ch !== '\t' && ch !== ' ')
            break;
    }
    let end = value.substring(endStart);
    const endNlPos = end.indexOf('\n');
    if (endNlPos === -1) {
        chomp = '-'; // strip
    }
    else if (value === end || endNlPos !== end.length - 1) {
        chomp = '+'; // keep
        if (onChompKeep)
            onChompKeep();
    }
    else {
        chomp = ''; // clip
    }
    if (end) {
        value = value.slice(0, -end.length);
        if (end[end.length - 1] === '\n')
            end = end.slice(0, -1);
        end = end.replace(/\n+(?!\n|$)/g, `$&${indent}`);
    }
    // determine indent indicator from whitespace at value start
    let startWithSpace = false;
    let startEnd;
    let startNlPos = -1;
    for (startEnd = 0; startEnd < value.length; ++startEnd) {
        const ch = value[startEnd];
        if (ch === ' ')
            startWithSpace = true;
        else if (ch === '\n')
            startNlPos = startEnd;
        else
            break;
    }
    let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);
    if (start) {
        value = value.substring(start.length);
        start = start.replace(/\n+/g, `$&${indent}`);
    }
    const indentSize = indent ? '2' : '1'; // root is at -1
    let header = (literal ? '|' : '>') + (startWithSpace ? indentSize : '') + chomp;
    if (comment) {
        header += ' ' + commentString(comment.replace(/ ?[\r\n]+/g, ' '));
        if (onComment)
            onComment();
    }
    if (literal) {
        value = value.replace(/\n+/g, `$&${indent}`);
        return `${header}\n${indent}${start}${value}${end}`;
    }
    value = value
        .replace(/\n+/g, '\n$&')
        .replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded
        //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent
        .replace(/\n+/g, `$&${indent}`);
    const body = foldFlowLines(`${start}${value}${end}`, indent, FOLD_BLOCK, getFoldOptions(ctx));
    return `${header}\n${indent}${body}`;
}
function plainString(item, ctx, onComment, onChompKeep) {
    const { type, value } = item;
    const { actualString, implicitKey, indent, inFlow } = ctx;
    if ((implicitKey && /[\n[\]{},]/.test(value)) ||
        (inFlow && /[[\]{},]/.test(value))) {
        return quotedString(value, ctx);
    }
    if (!value ||
        /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) {
        // not allowed:
        // - empty string, '-' or '?'
        // - start with an indicator character (except [?:-]) or /[?-] /
        // - '\n ', ': ' or ' \n' anywhere
        // - '#' not preceded by a non-space char
        // - end with ' ' or ':'
        return implicitKey || inFlow || !value.includes('\n')
            ? quotedString(value, ctx)
            : blockString(item, ctx, onComment, onChompKeep);
    }
    if (!implicitKey &&
        !inFlow &&
        type !== Scalar.PLAIN &&
        value.includes('\n')) {
        // Where allowed & type not set explicitly, prefer block style for multiline strings
        return blockString(item, ctx, onComment, onChompKeep);
    }
    if (indent === '' && containsDocumentMarker(value)) {
        ctx.forceBlockIndent = true;
        return blockString(item, ctx, onComment, onChompKeep);
    }
    const str = value.replace(/\n+/g, `$&\n${indent}`);
    // Verify that output will be parsed as a string, as e.g. plain numbers and
    // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),
    // and others in v1.1.
    if (actualString) {
        const test = (tag) => { var _a; return tag.default && tag.tag !== 'tag:yaml.org,2002:str' && ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(str)); };
        const { compat, tags } = ctx.doc.schema;
        if (tags.some(test) || (compat === null || compat === void 0 ? void 0 : compat.some(test)))
            return quotedString(value, ctx);
    }
    return implicitKey
        ? str
        : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx));
}
function stringifyString(item, ctx, onComment, onChompKeep) {
    const { implicitKey, inFlow } = ctx;
    const ss = typeof item.value === 'string'
        ? item
        : Object.assign({}, item, { value: String(item.value) });
    let { type } = item;
    if (type !== Scalar.QUOTE_DOUBLE) {
        // force double quotes on control characters & unpaired surrogates
        if (/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(ss.value))
            type = Scalar.QUOTE_DOUBLE;
    }
    const _stringify = (_type) => {
        switch (_type) {
            case Scalar.BLOCK_FOLDED:
            case Scalar.BLOCK_LITERAL:
                return implicitKey || inFlow
                    ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers
                    : blockString(ss, ctx, onComment, onChompKeep);
            case Scalar.QUOTE_DOUBLE:
                return doubleQuotedString(ss.value, ctx);
            case Scalar.QUOTE_SINGLE:
                return singleQuotedString(ss.value, ctx);
            case Scalar.PLAIN:
                return plainString(ss, ctx, onComment, onChompKeep);
            default:
                return null;
        }
    };
    let res = _stringify(type);
    if (res === null) {
        const { defaultKeyType, defaultStringType } = ctx.options;
        const t = (implicitKey && defaultKeyType) || defaultStringType;
        res = _stringify(t);
        if (res === null)
            throw new Error(`Unsupported default string type ${t}`);
    }
    return res;
}

export { stringifyString };
export { debug, warn } from './log.js';
export { findPair } from './nodes/YAMLMap.js';
export { toJS } from './nodes/toJS.js';
export { map as mapTag } from './schema/common/map.js';
export { seq as seqTag } from './schema/common/seq.js';
export { string as stringTag } from './schema/common/string.js';
export { foldFlowLines } from './stringify/foldFlowLines.js';
export { stringifyNumber } from './stringify/stringifyNumber.js';
export { stringifyString } from './stringify/stringifyString.js';
import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/Node.js';

const BREAK = Symbol('break visit');
const SKIP = Symbol('skip children');
const REMOVE = Symbol('remove node');
/**
 * Apply a visitor to an AST node or document.
 *
 * Walks through the tree (depth-first) starting from `node`, calling a
 * `visitor` function with three arguments:
 *   - `key`: For sequence values and map `Pair`, the node's index in the
 *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.
 *     `null` for the root node.
 *   - `node`: The current node.
 *   - `path`: The ancestry of the current node.
 *
 * The return value of the visitor may be used to control the traversal:
 *   - `undefined` (default): Do nothing and continue
 *   - `visit.SKIP`: Do not visit the children of this node, continue with next
 *     sibling
 *   - `visit.BREAK`: Terminate traversal completely
 *   - `visit.REMOVE`: Remove the current node, then continue with the next one
 *   - `Node`: Replace the current node, then continue by visiting it
 *   - `number`: While iterating the items of a sequence or map, set the index
 *     of the next step. This is useful especially if the index of the current
 *     node has changed.
 *
 * If `visitor` is a single function, it will be called with all values
 * encountered in the tree, including e.g. `null` values. Alternatively,
 * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,
 * `Alias` and `Scalar` node. To define the same visitor function for more than
 * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)
 * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most
 * specific defined one will be used for each node.
 */
function visit(node, visitor) {
    const visitor_ = initVisitor(visitor);
    if (isDocument(node)) {
        const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));
        if (cd === REMOVE)
            node.contents = null;
    }
    else
        visit_(null, node, visitor_, Object.freeze([]));
}
// Without the `as symbol` casts, TS declares these in the `visit`
// namespace using `var`, but then complains about that because
// `unique symbol` must be `const`.
/** Terminate visit traversal completely */
visit.BREAK = BREAK;
/** Do not visit the children of the current node */
visit.SKIP = SKIP;
/** Remove the current node */
visit.REMOVE = REMOVE;
function visit_(key, node, visitor, path) {
    const ctrl = callVisitor(key, node, visitor, path);
    if (isNode(ctrl) || isPair(ctrl)) {
        replaceNode(key, path, ctrl);
        return visit_(key, ctrl, visitor, path);
    }
    if (typeof ctrl !== 'symbol') {
        if (isCollection(node)) {
            path = Object.freeze(path.concat(node));
            for (let i = 0; i < node.items.length; ++i) {
                const ci = visit_(i, node.items[i], visitor, path);
                if (typeof ci === 'number')
                    i = ci - 1;
                else if (ci === BREAK)
                    return BREAK;
                else if (ci === REMOVE) {
                    node.items.splice(i, 1);
                    i -= 1;
                }
            }
        }
        else if (isPair(node)) {
            path = Object.freeze(path.concat(node));
            const ck = visit_('key', node.key, visitor, path);
            if (ck === BREAK)
                return BREAK;
            else if (ck === REMOVE)
                node.key = null;
            const cv = visit_('value', node.value, visitor, path);
            if (cv === BREAK)
                return BREAK;
            else if (cv === REMOVE)
                node.value = null;
        }
    }
    return ctrl;
}
/**
 * Apply an async visitor to an AST node or document.
 *
 * Walks through the tree (depth-first) starting from `node`, calling a
 * `visitor` function with three arguments:
 *   - `key`: For sequence values and map `Pair`, the node's index in the
 *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.
 *     `null` for the root node.
 *   - `node`: The current node.
 *   - `path`: The ancestry of the current node.
 *
 * The return value of the visitor may be used to control the traversal:
 *   - `Promise`: Must resolve to one of the following values
 *   - `undefined` (default): Do nothing and continue
 *   - `visit.SKIP`: Do not visit the children of this node, continue with next
 *     sibling
 *   - `visit.BREAK`: Terminate traversal completely
 *   - `visit.REMOVE`: Remove the current node, then continue with the next one
 *   - `Node`: Replace the current node, then continue by visiting it
 *   - `number`: While iterating the items of a sequence or map, set the index
 *     of the next step. This is useful especially if the index of the current
 *     node has changed.
 *
 * If `visitor` is a single function, it will be called with all values
 * encountered in the tree, including e.g. `null` values. Alternatively,
 * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,
 * `Alias` and `Scalar` node. To define the same visitor function for more than
 * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)
 * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most
 * specific defined one will be used for each node.
 */
async function visitAsync(node, visitor) {
    const visitor_ = initVisitor(visitor);
    if (isDocument(node)) {
        const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));
        if (cd === REMOVE)
            node.contents = null;
    }
    else
        await visitAsync_(null, node, visitor_, Object.freeze([]));
}
// Without the `as symbol` casts, TS declares these in the `visit`
// namespace using `var`, but then complains about that because
// `unique symbol` must be `const`.
/** Terminate visit traversal completely */
visitAsync.BREAK = BREAK;
/** Do not visit the children of the current node */
visitAsync.SKIP = SKIP;
/** Remove the current node */
visitAsync.REMOVE = REMOVE;
async function visitAsync_(key, node, visitor, path) {
    const ctrl = await callVisitor(key, node, visitor, path);
    if (isNode(ctrl) || isPair(ctrl)) {
        replaceNode(key, path, ctrl);
        return visitAsync_(key, ctrl, visitor, path);
    }
    if (typeof ctrl !== 'symbol') {
        if (isCollection(node)) {
            path = Object.freeze(path.concat(node));
            for (let i = 0; i < node.items.length; ++i) {
                const ci = await visitAsync_(i, node.items[i], visitor, path);
                if (typeof ci === 'number')
                    i = ci - 1;
                else if (ci === BREAK)
                    return BREAK;
                else if (ci === REMOVE) {
                    node.items.splice(i, 1);
                    i -= 1;
                }
            }
        }
        else if (isPair(node)) {
            path = Object.freeze(path.concat(node));
            const ck = await visitAsync_('key', node.key, visitor, path);
            if (ck === BREAK)
                return BREAK;
            else if (ck === REMOVE)
                node.key = null;
            const cv = await visitAsync_('value', node.value, visitor, path);
            if (cv === BREAK)
                return BREAK;
            else if (cv === REMOVE)
                node.value = null;
        }
    }
    return ctrl;
}
function initVisitor(visitor) {
    if (typeof visitor === 'object' &&
        (visitor.Collection || visitor.Node || visitor.Value)) {
        return Object.assign({
            Alias: visitor.Node,
            Map: visitor.Node,
            Scalar: visitor.Node,
            Seq: visitor.Node
        }, visitor.Value && {
            Map: visitor.Value,
            Scalar: visitor.Value,
            Seq: visitor.Value
        }, visitor.Collection && {
            Map: visitor.Collection,
            Seq: visitor.Collection
        }, visitor);
    }
    return visitor;
}
function callVisitor(key, node, visitor, path) {
    var _a, _b, _c, _d, _e;
    if (typeof visitor === 'function')
        return visitor(key, node, path);
    if (isMap(node))
        return (_a = visitor.Map) === null || _a === void 0 ? void 0 : _a.call(visitor, key, node, path);
    if (isSeq(node))
        return (_b = visitor.Seq) === null || _b === void 0 ? void 0 : _b.call(visitor, key, node, path);
    if (isPair(node))
        return (_c = visitor.Pair) === null || _c === void 0 ? void 0 : _c.call(visitor, key, node, path);
    if (isScalar(node))
        return (_d = visitor.Scalar) === null || _d === void 0 ? void 0 : _d.call(visitor, key, node, path);
    if (isAlias(node))
        return (_e = visitor.Alias) === null || _e === void 0 ? void 0 : _e.call(visitor, key, node, path);
    return undefined;
}
function replaceNode(key, path, node) {
    const parent = path[path.length - 1];
    if (isCollection(parent)) {
        parent.items[key] = node;
    }
    else if (isPair(parent)) {
        if (key === 'key')
            parent.key = node;
        else
            parent.value = node;
    }
    else if (isDocument(parent)) {
        parent.contents = node;
    }
    else {
        const pt = isAlias(parent) ? 'alias' : 'scalar';
        throw new Error(`Cannot replace node with ${pt} parent`);
    }
}

export { visit, visitAsync };
// `export * as default from ...` fails on Webpack v4
// https://github.com/eemeli/yaml/issues/228
import * as YAML from './dist/index.js'
export default YAML
export * from './dist/index.js'
{
  "type": "module"
}
'use strict';

var Node = require('../nodes/Node.js');
var Scalar = require('../nodes/Scalar.js');
var resolveBlockMap = require('./resolve-block-map.js');
var resolveBlockSeq = require('./resolve-block-seq.js');
var resolveFlowCollection = require('./resolve-flow-collection.js');

function composeCollection(CN, ctx, token, tagToken, onError) {
    let coll;
    switch (token.type) {
        case 'block-map': {
            coll = resolveBlockMap.resolveBlockMap(CN, ctx, token, onError);
            break;
        }
        case 'block-seq': {
            coll = resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError);
            break;
        }
        case 'flow-collection': {
            coll = resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError);
            break;
        }
    }
    if (!tagToken)
        return coll;
    const tagName = ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));
    if (!tagName)
        return coll;
    // Cast needed due to: https://github.com/Microsoft/TypeScript/issues/3841
    const Coll = coll.constructor;
    if (tagName === '!' || tagName === Coll.tagName) {
        coll.tag = Coll.tagName;
        return coll;
    }
    const expType = Node.isMap(coll) ? 'map' : 'seq';
    let tag = ctx.schema.tags.find(t => t.collection === expType && t.tag === tagName);
    if (!tag) {
        const kt = ctx.schema.knownTags[tagName];
        if (kt && kt.collection === expType) {
            ctx.schema.tags.push(Object.assign({}, kt, { default: false }));
            tag = kt;
        }
        else {
            onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);
            coll.tag = tagName;
            return coll;
        }
    }
    const res = tag.resolve(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options);
    const node = Node.isNode(res)
        ? res
        : new Scalar.Scalar(res);
    node.range = coll.range;
    node.tag = tagName;
    if (tag === null || tag === void 0 ? void 0 : tag.format)
        node.format = tag.format;
    return node;
}

exports.composeCollection = composeCollection;
'use strict';

var Document = require('../doc/Document.js');
var composeNode = require('./compose-node.js');
var resolveEnd = require('./resolve-end.js');
var resolveProps = require('./resolve-props.js');

function composeDoc(options, directives, { offset, start, value, end }, onError) {
    const opts = Object.assign({ directives }, options);
    const doc = new Document.Document(undefined, opts);
    const ctx = {
        atRoot: true,
        directives: doc.directives,
        options: doc.options,
        schema: doc.schema
    };
    const props = resolveProps.resolveProps(start, {
        indicator: 'doc-start',
        next: value !== null && value !== void 0 ? value : end === null || end === void 0 ? void 0 : end[0],
        offset,
        onError,
        startOnNewline: true
    });
    if (props.found) {
        doc.directives.docStart = true;
        if (value &&
            (value.type === 'block-map' || value.type === 'block-seq') &&
            !props.hasNewline)
            onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');
    }
    doc.contents = value
        ? composeNode.composeNode(ctx, value, props, onError)
        : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);
    const contentEnd = doc.contents.range[2];
    const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);
    if (re.comment)
        doc.comment = re.comment;
    doc.range = [offset, contentEnd, re.offset];
    return doc;
}

exports.composeDoc = composeDoc;
'use strict';

var Alias = require('../nodes/Alias.js');
var composeCollection = require('./compose-collection.js');
var composeScalar = require('./compose-scalar.js');
var resolveEnd = require('./resolve-end.js');
var utilEmptyScalarPosition = require('./util-empty-scalar-position.js');

const CN = { composeNode, composeEmptyNode };
function composeNode(ctx, token, props, onError) {
    const { spaceBefore, comment, anchor, tag } = props;
    let node;
    let isSrcToken = true;
    switch (token.type) {
        case 'alias':
            node = composeAlias(ctx, token, onError);
            if (anchor || tag)
                onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');
            break;
        case 'scalar':
        case 'single-quoted-scalar':
        case 'double-quoted-scalar':
        case 'block-scalar':
            node = composeScalar.composeScalar(ctx, token, tag, onError);
            if (anchor)
                node.anchor = anchor.source.substring(1);
            break;
        case 'block-map':
        case 'block-seq':
        case 'flow-collection':
            node = composeCollection.composeCollection(CN, ctx, token, tag, onError);
            if (anchor)
                node.anchor = anchor.source.substring(1);
            break;
        default: {
            const message = token.type === 'error'
                ? token.message
                : `Unsupported token (type: ${token.type})`;
            onError(token, 'UNEXPECTED_TOKEN', message);
            node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);
            isSrcToken = false;
        }
    }
    if (anchor && node.anchor === '')
        onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');
    if (spaceBefore)
        node.spaceBefore = true;
    if (comment) {
        if (token.type === 'scalar' && token.source === '')
            node.comment = comment;
        else
            node.commentBefore = comment;
    }
    // @ts-expect-error Type checking misses meaning of isSrcToken
    if (ctx.options.keepSourceTokens && isSrcToken)
        node.srcToken = token;
    return node;
}
function composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag }, onError) {
    const token = {
        type: 'scalar',
        offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),
        indent: -1,
        source: ''
    };
    const node = composeScalar.composeScalar(ctx, token, tag, onError);
    if (anchor) {
        node.anchor = anchor.source.substring(1);
        if (node.anchor === '')
            onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');
    }
    if (spaceBefore)
        node.spaceBefore = true;
    if (comment)
        node.comment = comment;
    return node;
}
function composeAlias({ options }, { offset, source, end }, onError) {
    const alias = new Alias.Alias(source.substring(1));
    if (alias.source === '')
        onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');
    if (alias.source.endsWith(':'))
        onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);
    const valueEnd = offset + source.length;
    const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);
    alias.range = [offset, valueEnd, re.offset];
    if (re.comment)
        alias.comment = re.comment;
    return alias;
}

exports.composeEmptyNode = composeEmptyNode;
exports.composeNode = composeNode;
'use strict';

var Node = require('../nodes/Node.js');
var Scalar = require('../nodes/Scalar.js');
var resolveBlockScalar = require('./resolve-block-scalar.js');
var resolveFlowScalar = require('./resolve-flow-scalar.js');

function composeScalar(ctx, token, tagToken, onError) {
    const { value, type, comment, range } = token.type === 'block-scalar'
        ? resolveBlockScalar.resolveBlockScalar(token, ctx.options.strict, onError)
        : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);
    const tagName = tagToken
        ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))
        : null;
    const tag = tagToken && tagName
        ? findScalarTagByName(ctx.schema, value, tagName, tagToken, onError)
        : token.type === 'scalar'
            ? findScalarTagByTest(ctx, value, token, onError)
            : ctx.schema[Node.SCALAR];
    let scalar;
    try {
        const res = tag.resolve(value, msg => onError(tagToken !== null && tagToken !== void 0 ? tagToken : token, 'TAG_RESOLVE_FAILED', msg), ctx.options);
        scalar = Node.isScalar(res) ? res : new Scalar.Scalar(res);
    }
    catch (error) {
        const msg = error instanceof Error ? error.message : String(error);
        onError(tagToken !== null && tagToken !== void 0 ? tagToken : token, 'TAG_RESOLVE_FAILED', msg);
        scalar = new Scalar.Scalar(value);
    }
    scalar.range = range;
    scalar.source = value;
    if (type)
        scalar.type = type;
    if (tagName)
        scalar.tag = tagName;
    if (tag.format)
        scalar.format = tag.format;
    if (comment)
        scalar.comment = comment;
    return scalar;
}
function findScalarTagByName(schema, value, tagName, tagToken, onError) {
    var _a;
    if (tagName === '!')
        return schema[Node.SCALAR]; // non-specific tag
    const matchWithTest = [];
    for (const tag of schema.tags) {
        if (!tag.collection && tag.tag === tagName) {
            if (tag.default && tag.test)
                matchWithTest.push(tag);
            else
                return tag;
        }
    }
    for (const tag of matchWithTest)
        if ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(value))
            return tag;
    const kt = schema.knownTags[tagName];
    if (kt && !kt.collection) {
        // Ensure that the known tag is available for stringifying,
        // but does not get used by default.
        schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));
        return kt;
    }
    onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');
    return schema[Node.SCALAR];
}
function findScalarTagByTest({ directives, schema }, value, token, onError) {
    var _a;
    const tag = schema.tags.find(tag => { var _a; return tag.default && ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(value)); }) || schema[Node.SCALAR];
    if (schema.compat) {
        const compat = (_a = schema.compat.find(tag => { var _a; return tag.default && ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(value)); })) !== null && _a !== void 0 ? _a : schema[Node.SCALAR];
        if (tag.tag !== compat.tag) {
            const ts = directives.tagString(tag.tag);
            const cs = directives.tagString(compat.tag);
            const msg = `Value may be parsed as either ${ts} or ${cs}`;
            onError(token, 'TAG_RESOLVE_FAILED', msg, true);
        }
    }
    return tag;
}

exports.composeScalar = composeScalar;
'use strict';

var directives = require('../doc/directives.js');
var Document = require('../doc/Document.js');
var errors = require('../errors.js');
var Node = require('../nodes/Node.js');
var composeDoc = require('./compose-doc.js');
var resolveEnd = require('./resolve-end.js');

function getErrorPos(src) {
    if (typeof src === 'number')
        return [src, src + 1];
    if (Array.isArray(src))
        return src.length === 2 ? src : [src[0], src[1]];
    const { offset, source } = src;
    return [offset, offset + (typeof source === 'string' ? source.length : 1)];
}
function parsePrelude(prelude) {
    var _a;
    let comment = '';
    let atComment = false;
    let afterEmptyLine = false;
    for (let i = 0; i < prelude.length; ++i) {
        const source = prelude[i];
        switch (source[0]) {
            case '#':
                comment +=
                    (comment === '' ? '' : afterEmptyLine ? '\n\n' : '\n') +
                        (source.substring(1) || ' ');
                atComment = true;
                afterEmptyLine = false;
                break;
            case '%':
                if (((_a = prelude[i + 1]) === null || _a === void 0 ? void 0 : _a[0]) !== '#')
                    i += 1;
                atComment = false;
                break;
            default:
                // This may be wrong after doc-end, but in that case it doesn't matter
                if (!atComment)
                    afterEmptyLine = true;
                atComment = false;
        }
    }
    return { comment, afterEmptyLine };
}
/**
 * Compose a stream of CST nodes into a stream of YAML Documents.
 *
 * ```ts
 * import { Composer, Parser } from 'yaml'
 *
 * const src: string = ...
 * const tokens = new Parser().parse(src)
 * const docs = new Composer().compose(tokens)
 * ```
 */
class Composer {
    constructor(options = {}) {
        this.doc = null;
        this.atDirectives = false;
        this.prelude = [];
        this.errors = [];
        this.warnings = [];
        this.onError = (source, code, message, warning) => {
            const pos = getErrorPos(source);
            if (warning)
                this.warnings.push(new errors.YAMLWarning(pos, code, message));
            else
                this.errors.push(new errors.YAMLParseError(pos, code, message));
        };
        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
        this.directives = new directives.Directives({ version: options.version || '1.2' });
        this.options = options;
    }
    decorate(doc, afterDoc) {
        const { comment, afterEmptyLine } = parsePrelude(this.prelude);
        //console.log({ dc: doc.comment, prelude, comment })
        if (comment) {
            const dc = doc.contents;
            if (afterDoc) {
                doc.comment = doc.comment ? `${doc.comment}\n${comment}` : comment;
            }
            else if (afterEmptyLine || doc.directives.docStart || !dc) {
                doc.commentBefore = comment;
            }
            else if (Node.isCollection(dc) && !dc.flow && dc.items.length > 0) {
                let it = dc.items[0];
                if (Node.isPair(it))
                    it = it.key;
                const cb = it.commentBefore;
                it.commentBefore = cb ? `${comment}\n${cb}` : comment;
            }
            else {
                const cb = dc.commentBefore;
                dc.commentBefore = cb ? `${comment}\n${cb}` : comment;
            }
        }
        if (afterDoc) {
            Array.prototype.push.apply(doc.errors, this.errors);
            Array.prototype.push.apply(doc.warnings, this.warnings);
        }
        else {
            doc.errors = this.errors;
            doc.warnings = this.warnings;
        }
        this.prelude = [];
        this.errors = [];
        this.warnings = [];
    }
    /**
     * Current stream status information.
     *
     * Mostly useful at the end of input for an empty stream.
     */
    streamInfo() {
        return {
            comment: parsePrelude(this.prelude).comment,
            directives: this.directives,
            errors: this.errors,
            warnings: this.warnings
        };
    }
    /**
     * Compose tokens into documents.
     *
     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.
     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.
     */
    *compose(tokens, forceDoc = false, endOffset = -1) {
        for (const token of tokens)
            yield* this.next(token);
        yield* this.end(forceDoc, endOffset);
    }
    /** Advance the composer by one CST token. */
    *next(token) {
        if (process.env.LOG_STREAM)
            console.dir(token, { depth: null });
        switch (token.type) {
            case 'directive':
                this.directives.add(token.source, (offset, message, warning) => {
                    const pos = getErrorPos(token);
                    pos[0] += offset;
                    this.onError(pos, 'BAD_DIRECTIVE', message, warning);
                });
                this.prelude.push(token.source);
                this.atDirectives = true;
                break;
            case 'document': {
                const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);
                if (this.atDirectives && !doc.directives.docStart)
                    this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');
                this.decorate(doc, false);
                if (this.doc)
                    yield this.doc;
                this.doc = doc;
                this.atDirectives = false;
                break;
            }
            case 'byte-order-mark':
            case 'space':
                break;
            case 'comment':
            case 'newline':
                this.prelude.push(token.source);
                break;
            case 'error': {
                const msg = token.source
                    ? `${token.message}: ${JSON.stringify(token.source)}`
                    : token.message;
                const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);
                if (this.atDirectives || !this.doc)
                    this.errors.push(error);
                else
                    this.doc.errors.push(error);
                break;
            }
            case 'doc-end': {
                if (!this.doc) {
                    const msg = 'Unexpected doc-end without preceding document';
                    this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));
                    break;
                }
                this.doc.directives.docEnd = true;
                const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);
                this.decorate(this.doc, true);
                if (end.comment) {
                    const dc = this.doc.comment;
                    this.doc.comment = dc ? `${dc}\n${end.comment}` : end.comment;
                }
                this.doc.range[2] = end.offset;
                break;
            }
            default:
                this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));
        }
    }
    /**
     * Call at end of input to yield any remaining document.
     *
     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.
     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.
     */
    *end(forceDoc = false, endOffset = -1) {
        if (this.doc) {
            this.decorate(this.doc, true);
            yield this.doc;
            this.doc = null;
        }
        else if (forceDoc) {
            const opts = Object.assign({ directives: this.directives }, this.options);
            const doc = new Document.Document(undefined, opts);
            if (this.atDirectives)
                this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');
            doc.range = [0, endOffset, endOffset];
            this.decorate(doc, false);
            yield doc;
        }
    }
}

exports.Composer = Composer;
'use strict';

var Pair = require('../nodes/Pair.js');
var YAMLMap = require('../nodes/YAMLMap.js');
var resolveProps = require('./resolve-props.js');
var utilContainsNewline = require('./util-contains-newline.js');
var utilFlowIndentCheck = require('./util-flow-indent-check.js');
var utilMapIncludes = require('./util-map-includes.js');

const startColMsg = 'All mapping items must start at the same column';
function resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError) {
    var _a;
    const map = new YAMLMap.YAMLMap(ctx.schema);
    if (ctx.atRoot)
        ctx.atRoot = false;
    let offset = bm.offset;
    for (const collItem of bm.items) {
        const { start, key, sep, value } = collItem;
        // key properties
        const keyProps = resolveProps.resolveProps(start, {
            indicator: 'explicit-key-ind',
            next: key !== null && key !== void 0 ? key : sep === null || sep === void 0 ? void 0 : sep[0],
            offset,
            onError,
            startOnNewline: true
        });
        const implicitKey = !keyProps.found;
        if (implicitKey) {
            if (key) {
                if (key.type === 'block-seq')
                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');
                else if ('indent' in key && key.indent !== bm.indent)
                    onError(offset, 'BAD_INDENT', startColMsg);
            }
            if (!keyProps.anchor && !keyProps.tag && !sep) {
                // TODO: assert being at last item?
                if (keyProps.comment) {
                    if (map.comment)
                        map.comment += '\n' + keyProps.comment;
                    else
                        map.comment = keyProps.comment;
                }
                continue;
            }
            if (keyProps.hasNewlineAfterProp || utilContainsNewline.containsNewline(key)) {
                onError(key !== null && key !== void 0 ? key : start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');
            }
        }
        else if (((_a = keyProps.found) === null || _a === void 0 ? void 0 : _a.indent) !== bm.indent) {
            onError(offset, 'BAD_INDENT', startColMsg);
        }
        // key value
        const keyStart = keyProps.end;
        const keyNode = key
            ? composeNode(ctx, key, keyProps, onError)
            : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);
        if (ctx.schema.compat)
            utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);
        if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))
            onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');
        // value properties
        const valueProps = resolveProps.resolveProps(sep !== null && sep !== void 0 ? sep : [], {
            indicator: 'map-value-ind',
            next: value,
            offset: keyNode.range[2],
            onError,
            startOnNewline: !key || key.type === 'block-scalar'
        });
        offset = valueProps.end;
        if (valueProps.found) {
            if (implicitKey) {
                if ((value === null || value === void 0 ? void 0 : value.type) === 'block-map' && !valueProps.hasNewline)
                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');
                if (ctx.options.strict &&
                    keyProps.start < valueProps.found.offset - 1024)
                    onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');
            }
            // value value
            const valueNode = value
                ? composeNode(ctx, value, valueProps, onError)
                : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);
            if (ctx.schema.compat)
                utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);
            offset = valueNode.range[2];
            const pair = new Pair.Pair(keyNode, valueNode);
            if (ctx.options.keepSourceTokens)
                pair.srcToken = collItem;
            map.items.push(pair);
        }
        else {
            // key with no value
            if (implicitKey)
                onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');
            if (valueProps.comment) {
                if (keyNode.comment)
                    keyNode.comment += '\n' + valueProps.comment;
                else
                    keyNode.comment = valueProps.comment;
            }
            const pair = new Pair.Pair(keyNode);
            if (ctx.options.keepSourceTokens)
                pair.srcToken = collItem;
            map.items.push(pair);
        }
    }
    map.range = [bm.offset, offset, offset];
    return map;
}

exports.resolveBlockMap = resolveBlockMap;
'use strict';

var Scalar = require('../nodes/Scalar.js');

function resolveBlockScalar(scalar, strict, onError) {
    const start = scalar.offset;
    const header = parseBlockScalarHeader(scalar, strict, onError);
    if (!header)
        return { value: '', type: null, comment: '', range: [start, start, start] };
    const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;
    const lines = scalar.source ? splitLines(scalar.source) : [];
    // determine the end of content & start of chomping
    let chompStart = lines.length;
    for (let i = lines.length - 1; i >= 0; --i) {
        const content = lines[i][1];
        if (content === '' || content === '\r')
            chompStart = i;
        else
            break;
    }
    // shortcut for empty contents
    if (chompStart === 0) {
        const value = header.chomp === '+' && lines.length > 0
            ? '\n'.repeat(Math.max(1, lines.length - 1))
            : '';
        let end = start + header.length;
        if (scalar.source)
            end += scalar.source.length;
        return { value, type, comment: header.comment, range: [start, end, end] };
    }
    // find the indentation level to trim from start
    let trimIndent = scalar.indent + header.indent;
    let offset = scalar.offset + header.length;
    let contentStart = 0;
    for (let i = 0; i < chompStart; ++i) {
        const [indent, content] = lines[i];
        if (content === '' || content === '\r') {
            if (header.indent === 0 && indent.length > trimIndent)
                trimIndent = indent.length;
        }
        else {
            if (indent.length < trimIndent) {
                const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';
                onError(offset + indent.length, 'MISSING_CHAR', message);
            }
            if (header.indent === 0)
                trimIndent = indent.length;
            contentStart = i;
            break;
        }
        offset += indent.length + content.length + 1;
    }
    // include trailing more-indented empty lines in content
    for (let i = lines.length - 1; i >= chompStart; --i) {
        if (lines[i][0].length > trimIndent)
            chompStart = i + 1;
    }
    let value = '';
    let sep = '';
    let prevMoreIndented = false;
    // leading whitespace is kept intact
    for (let i = 0; i < contentStart; ++i)
        value += lines[i][0].slice(trimIndent) + '\n';
    for (let i = contentStart; i < chompStart; ++i) {
        let [indent, content] = lines[i];
        offset += indent.length + content.length + 1;
        const crlf = content[content.length - 1] === '\r';
        if (crlf)
            content = content.slice(0, -1);
        /* istanbul ignore if already caught in lexer */
        if (content && indent.length < trimIndent) {
            const src = header.indent
                ? 'explicit indentation indicator'
                : 'first line';
            const message = `Block scalar lines must not be less indented than their ${src}`;
            onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);
            indent = '';
        }
        if (type === Scalar.Scalar.BLOCK_LITERAL) {
            value += sep + indent.slice(trimIndent) + content;
            sep = '\n';
        }
        else if (indent.length > trimIndent || content[0] === '\t') {
            // more-indented content within a folded block
            if (sep === ' ')
                sep = '\n';
            else if (!prevMoreIndented && sep === '\n')
                sep = '\n\n';
            value += sep + indent.slice(trimIndent) + content;
            sep = '\n';
            prevMoreIndented = true;
        }
        else if (content === '') {
            // empty line
            if (sep === '\n')
                value += '\n';
            else
                sep = '\n';
        }
        else {
            value += sep + content;
            sep = ' ';
            prevMoreIndented = false;
        }
    }
    switch (header.chomp) {
        case '-':
            break;
        case '+':
            for (let i = chompStart; i < lines.length; ++i)
                value += '\n' + lines[i][0].slice(trimIndent);
            if (value[value.length - 1] !== '\n')
                value += '\n';
            break;
        default:
            value += '\n';
    }
    const end = start + header.length + scalar.source.length;
    return { value, type, comment: header.comment, range: [start, end, end] };
}
function parseBlockScalarHeader({ offset, props }, strict, onError) {
    /* istanbul ignore if should not happen */
    if (props[0].type !== 'block-scalar-header') {
        onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');
        return null;
    }
    const { source } = props[0];
    const mode = source[0];
    let indent = 0;
    let chomp = '';
    let error = -1;
    for (let i = 1; i < source.length; ++i) {
        const ch = source[i];
        if (!chomp && (ch === '-' || ch === '+'))
            chomp = ch;
        else {
            const n = Number(ch);
            if (!indent && n)
                indent = n;
            else if (error === -1)
                error = offset + i;
        }
    }
    if (error !== -1)
        onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);
    let hasSpace = false;
    let comment = '';
    let length = source.length;
    for (let i = 1; i < props.length; ++i) {
        const token = props[i];
        switch (token.type) {
            case 'space':
                hasSpace = true;
            // fallthrough
            case 'newline':
                length += token.source.length;
                break;
            case 'comment':
                if (strict && !hasSpace) {
                    const message = 'Comments must be separated from other tokens by white space characters';
                    onError(token, 'MISSING_CHAR', message);
                }
                length += token.source.length;
                comment = token.source.substring(1);
                break;
            case 'error':
                onError(token, 'UNEXPECTED_TOKEN', token.message);
                length += token.source.length;
                break;
            /* istanbul ignore next should not happen */
            default: {
                const message = `Unexpected token in block scalar header: ${token.type}`;
                onError(token, 'UNEXPECTED_TOKEN', message);
                const ts = token.source;
                if (ts && typeof ts === 'string')
                    length += ts.length;
            }
        }
    }
    return { mode, indent, chomp, comment, length };
}
/** @returns Array of lines split up as `[indent, content]` */
function splitLines(source) {
    const split = source.split(/\n( *)/);
    const first = split[0];
    const m = first.match(/^( *)/);
    const line0 = (m === null || m === void 0 ? void 0 : m[1])
        ? [m[1], first.slice(m[1].length)]
        : ['', first];
    const lines = [line0];
    for (let i = 1; i < split.length; i += 2)
        lines.push([split[i], split[i + 1]]);
    return lines;
}

exports.resolveBlockScalar = resolveBlockScalar;
'use strict';

var YAMLSeq = require('../nodes/YAMLSeq.js');
var resolveProps = require('./resolve-props.js');
var utilFlowIndentCheck = require('./util-flow-indent-check.js');

function resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError) {
    const seq = new YAMLSeq.YAMLSeq(ctx.schema);
    if (ctx.atRoot)
        ctx.atRoot = false;
    let offset = bs.offset;
    for (const { start, value } of bs.items) {
        const props = resolveProps.resolveProps(start, {
            indicator: 'seq-item-ind',
            next: value,
            offset,
            onError,
            startOnNewline: true
        });
        offset = props.end;
        if (!props.found) {
            if (props.anchor || props.tag || value) {
                if (value && value.type === 'block-seq')
                    onError(offset, 'BAD_INDENT', 'All sequence items must start at the same column');
                else
                    onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');
            }
            else {
                // TODO: assert being at last item?
                if (props.comment)
                    seq.comment = props.comment;
                continue;
            }
        }
        const node = value
            ? composeNode(ctx, value, props, onError)
            : composeEmptyNode(ctx, offset, start, null, props, onError);
        if (ctx.schema.compat)
            utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);
        offset = node.range[2];
        seq.items.push(node);
    }
    seq.range = [bs.offset, offset, offset];
    return seq;
}

exports.resolveBlockSeq = resolveBlockSeq;
'use strict';

function resolveEnd(end, offset, reqSpace, onError) {
    let comment = '';
    if (end) {
        let hasSpace = false;
        let sep = '';
        for (const token of end) {
            const { source, type } = token;
            switch (type) {
                case 'space':
                    hasSpace = true;
                    break;
                case 'comment': {
                    if (reqSpace && !hasSpace)
                        onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');
                    const cb = source.substring(1) || ' ';
                    if (!comment)
                        comment = cb;
                    else
                        comment += sep + cb;
                    sep = '';
                    break;
                }
                case 'newline':
                    if (comment)
                        sep += source;
                    hasSpace = true;
                    break;
                default:
                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);
            }
            offset += source.length;
        }
    }
    return { comment, offset };
}

exports.resolveEnd = resolveEnd;
'use strict';

var Node = require('../nodes/Node.js');
var Pair = require('../nodes/Pair.js');
var YAMLMap = require('../nodes/YAMLMap.js');
var YAMLSeq = require('../nodes/YAMLSeq.js');
var resolveEnd = require('./resolve-end.js');
var resolveProps = require('./resolve-props.js');
var utilContainsNewline = require('./util-contains-newline.js');
var utilMapIncludes = require('./util-map-includes.js');

const blockMsg = 'Block collections are not allowed within flow collections';
const isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');
function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError) {
    var _a;
    const isMap = fc.start.source === '{';
    const fcName = isMap ? 'flow map' : 'flow sequence';
    const coll = isMap
        ? new YAMLMap.YAMLMap(ctx.schema)
        : new YAMLSeq.YAMLSeq(ctx.schema);
    coll.flow = true;
    const atRoot = ctx.atRoot;
    if (atRoot)
        ctx.atRoot = false;
    let offset = fc.offset + fc.start.source.length;
    for (let i = 0; i < fc.items.length; ++i) {
        const collItem = fc.items[i];
        const { start, key, sep, value } = collItem;
        const props = resolveProps.resolveProps(start, {
            flow: fcName,
            indicator: 'explicit-key-ind',
            next: key !== null && key !== void 0 ? key : sep === null || sep === void 0 ? void 0 : sep[0],
            offset,
            onError,
            startOnNewline: false
        });
        if (!props.found) {
            if (!props.anchor && !props.tag && !sep && !value) {
                if (i === 0 && props.comma)
                    onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);
                else if (i < fc.items.length - 1)
                    onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);
                if (props.comment) {
                    if (coll.comment)
                        coll.comment += '\n' + props.comment;
                    else
                        coll.comment = props.comment;
                }
                offset = props.end;
                continue;
            }
            if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))
                onError(key, // checked by containsNewline()
                'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');
        }
        if (i === 0) {
            if (props.comma)
                onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);
        }
        else {
            if (!props.comma)
                onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);
            if (props.comment) {
                let prevItemComment = '';
                loop: for (const st of start) {
                    switch (st.type) {
                        case 'comma':
                        case 'space':
                            break;
                        case 'comment':
                            prevItemComment = st.source.substring(1);
                            break loop;
                        default:
                            break loop;
                    }
                }
                if (prevItemComment) {
                    let prev = coll.items[coll.items.length - 1];
                    if (Node.isPair(prev))
                        prev = (_a = prev.value) !== null && _a !== void 0 ? _a : prev.key;
                    if (prev.comment)
                        prev.comment += '\n' + prevItemComment;
                    else
                        prev.comment = prevItemComment;
                    props.comment = props.comment.substring(prevItemComment.length + 1);
                }
            }
        }
        if (!isMap && !sep && !props.found) {
            // item is a value in a seq
            // â†’ key & sep are empty, start does not include ? or :
            const valueNode = value
                ? composeNode(ctx, value, props, onError)
                : composeEmptyNode(ctx, props.end, sep, null, props, onError);
            coll.items.push(valueNode);
            offset = valueNode.range[2];
            if (isBlock(value))
                onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);
        }
        else {
            // item is a key+value pair
            // key value
            const keyStart = props.end;
            const keyNode = key
                ? composeNode(ctx, key, props, onError)
                : composeEmptyNode(ctx, keyStart, start, null, props, onError);
            if (isBlock(key))
                onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);
            // value properties
            const valueProps = resolveProps.resolveProps(sep !== null && sep !== void 0 ? sep : [], {
                flow: fcName,
                indicator: 'map-value-ind',
                next: value,
                offset: keyNode.range[2],
                onError,
                startOnNewline: false
            });
            if (valueProps.found) {
                if (!isMap && !props.found && ctx.options.strict) {
                    if (sep)
                        for (const st of sep) {
                            if (st === valueProps.found)
                                break;
                            if (st.type === 'newline') {
                                onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');
                                break;
                            }
                        }
                    if (props.start < valueProps.found.offset - 1024)
                        onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');
                }
            }
            else if (value) {
                if ('source' in value && value.source && value.source[0] === ':')
                    onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);
                else
                    onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);
            }
            // value value
            const valueNode = value
                ? composeNode(ctx, value, valueProps, onError)
                : valueProps.found
                    ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)
                    : null;
            if (valueNode) {
                if (isBlock(value))
                    onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);
            }
            else if (valueProps.comment) {
                if (keyNode.comment)
                    keyNode.comment += '\n' + valueProps.comment;
                else
                    keyNode.comment = valueProps.comment;
            }
            const pair = new Pair.Pair(keyNode, valueNode);
            if (ctx.options.keepSourceTokens)
                pair.srcToken = collItem;
            if (isMap) {
                const map = coll;
                if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))
                    onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');
                map.items.push(pair);
            }
            else {
                const map = new YAMLMap.YAMLMap(ctx.schema);
                map.flow = true;
                map.items.push(pair);
                coll.items.push(map);
            }
            offset = valueNode ? valueNode.range[2] : valueProps.end;
        }
    }
    const expectedEnd = isMap ? '}' : ']';
    const [ce, ...ee] = fc.end;
    let cePos = offset;
    if (ce && ce.source === expectedEnd)
        cePos = ce.offset + ce.source.length;
    else {
        const name = fcName[0].toUpperCase() + fcName.substring(1);
        const msg = atRoot
            ? `${name} must end with a ${expectedEnd}`
            : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;
        onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);
        if (ce && ce.source.length !== 1)
            ee.unshift(ce);
    }
    if (ee.length > 0) {
        const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);
        if (end.comment) {
            if (coll.comment)
                coll.comment += '\n' + end.comment;
            else
                coll.comment = end.comment;
        }
        coll.range = [fc.offset, cePos, end.offset];
    }
    else {
        coll.range = [fc.offset, cePos, cePos];
    }
    return coll;
}

exports.resolveFlowCollection = resolveFlowCollection;
'use strict';

var Scalar = require('../nodes/Scalar.js');
var resolveEnd = require('./resolve-end.js');

function resolveFlowScalar(scalar, strict, onError) {
    const { offset, type, source, end } = scalar;
    let _type;
    let value;
    const _onError = (rel, code, msg) => onError(offset + rel, code, msg);
    switch (type) {
        case 'scalar':
            _type = Scalar.Scalar.PLAIN;
            value = plainValue(source, _onError);
            break;
        case 'single-quoted-scalar':
            _type = Scalar.Scalar.QUOTE_SINGLE;
            value = singleQuotedValue(source, _onError);
            break;
        case 'double-quoted-scalar':
            _type = Scalar.Scalar.QUOTE_DOUBLE;
            value = doubleQuotedValue(source, _onError);
            break;
        /* istanbul ignore next should not happen */
        default:
            onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);
            return {
                value: '',
                type: null,
                comment: '',
                range: [offset, offset + source.length, offset + source.length]
            };
    }
    const valueEnd = offset + source.length;
    const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);
    return {
        value,
        type: _type,
        comment: re.comment,
        range: [offset, valueEnd, re.offset]
    };
}
function plainValue(source, onError) {
    let badChar = '';
    switch (source[0]) {
        /* istanbul ignore next should not happen */
        case '\t':
            badChar = 'a tab character';
            break;
        case ',':
            badChar = 'flow indicator character ,';
            break;
        case '%':
            badChar = 'directive indicator character %';
            break;
        case '|':
        case '>': {
            badChar = `block scalar indicator ${source[0]}`;
            break;
        }
        case '@':
        case '`': {
            badChar = `reserved character ${source[0]}`;
            break;
        }
    }
    if (badChar)
        onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);
    return foldLines(source);
}
function singleQuotedValue(source, onError) {
    if (source[source.length - 1] !== "'" || source.length === 1)
        onError(source.length, 'MISSING_CHAR', "Missing closing 'quote");
    return foldLines(source.slice(1, -1)).replace(/''/g, "'");
}
function foldLines(source) {
    var _a;
    /**
     * The negative lookbehind here and in the `re` RegExp is to
     * prevent causing a polynomial search time in certain cases.
     *
     * The try-catch is for Safari, which doesn't support this yet:
     * https://caniuse.com/js-regexp-lookbehind
     */
    let first, line;
    try {
        first = new RegExp('(.*?)(?<![ \t])[ \t]*\r?\n', 'sy');
        line = new RegExp('[ \t]*(.*?)(?:(?<![ \t])[ \t]*)?\r?\n', 'sy');
    }
    catch (_) {
        first = /(.*?)[ \t]*\r?\n/sy;
        line = /[ \t]*(.*?)[ \t]*\r?\n/sy;
    }
    let match = first.exec(source);
    if (!match)
        return source;
    let res = match[1];
    let sep = ' ';
    let pos = first.lastIndex;
    line.lastIndex = pos;
    while ((match = line.exec(source))) {
        if (match[1] === '') {
            if (sep === '\n')
                res += sep;
            else
                sep = '\n';
        }
        else {
            res += sep + match[1];
            sep = ' ';
        }
        pos = line.lastIndex;
    }
    const last = /[ \t]*(.*)/sy;
    last.lastIndex = pos;
    match = last.exec(source);
    return res + sep + ((_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : '');
}
function doubleQuotedValue(source, onError) {
    let res = '';
    for (let i = 1; i < source.length - 1; ++i) {
        const ch = source[i];
        if (ch === '\r' && source[i + 1] === '\n')
            continue;
        if (ch === '\n') {
            const { fold, offset } = foldNewline(source, i);
            res += fold;
            i = offset;
        }
        else if (ch === '\\') {
            let next = source[++i];
            const cc = escapeCodes[next];
            if (cc)
                res += cc;
            else if (next === '\n') {
                // skip escaped newlines, but still trim the following line
                next = source[i + 1];
                while (next === ' ' || next === '\t')
                    next = source[++i + 1];
            }
            else if (next === '\r' && source[i + 1] === '\n') {
                // skip escaped CRLF newlines, but still trim the following line
                next = source[++i + 1];
                while (next === ' ' || next === '\t')
                    next = source[++i + 1];
            }
            else if (next === 'x' || next === 'u' || next === 'U') {
                const length = { x: 2, u: 4, U: 8 }[next];
                res += parseCharCode(source, i + 1, length, onError);
                i += length;
            }
            else {
                const raw = source.substr(i - 1, 2);
                onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);
                res += raw;
            }
        }
        else if (ch === ' ' || ch === '\t') {
            // trim trailing whitespace
            const wsStart = i;
            let next = source[i + 1];
            while (next === ' ' || next === '\t')
                next = source[++i + 1];
            if (next !== '\n' && !(next === '\r' && source[i + 2] === '\n'))
                res += i > wsStart ? source.slice(wsStart, i + 1) : ch;
        }
        else {
            res += ch;
        }
    }
    if (source[source.length - 1] !== '"' || source.length === 1)
        onError(source.length, 'MISSING_CHAR', 'Missing closing "quote');
    return res;
}
/**
 * Fold a single newline into a space, multiple newlines to N - 1 newlines.
 * Presumes `source[offset] === '\n'`
 */
function foldNewline(source, offset) {
    let fold = '';
    let ch = source[offset + 1];
    while (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r') {
        if (ch === '\r' && source[offset + 2] !== '\n')
            break;
        if (ch === '\n')
            fold += '\n';
        offset += 1;
        ch = source[offset + 1];
    }
    if (!fold)
        fold = ' ';
    return { fold, offset };
}
const escapeCodes = {
    '0': '\0',
    a: '\x07',
    b: '\b',
    e: '\x1b',
    f: '\f',
    n: '\n',
    r: '\r',
    t: '\t',
    v: '\v',
    N: '\u0085',
    _: '\u00a0',
    L: '\u2028',
    P: '\u2029',
    ' ': ' ',
    '"': '"',
    '/': '/',
    '\\': '\\',
    '\t': '\t'
};
function parseCharCode(source, offset, length, onError) {
    const cc = source.substr(offset, length);
    const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);
    const code = ok ? parseInt(cc, 16) : NaN;
    if (isNaN(code)) {
        const raw = source.substr(offset - 2, length + 2);
        onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);
        return raw;
    }
    return String.fromCodePoint(code);
}

exports.resolveFlowScalar = resolveFlowScalar;
'use strict';

function resolveProps(tokens, { flow, indicator, next, offset, onError, startOnNewline }) {
    let spaceBefore = false;
    let atNewline = startOnNewline;
    let hasSpace = startOnNewline;
    let comment = '';
    let commentSep = '';
    let hasNewline = false;
    let hasNewlineAfterProp = false;
    let reqSpace = false;
    let anchor = null;
    let tag = null;
    let comma = null;
    let found = null;
    let start = null;
    for (const token of tokens) {
        if (reqSpace) {
            if (token.type !== 'space' &&
                token.type !== 'newline' &&
                token.type !== 'comma')
                onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');
            reqSpace = false;
        }
        switch (token.type) {
            case 'space':
                // At the doc level, tabs at line start may be parsed
                // as leading white space rather than indentation.
                // In a flow collection, only the parser handles indent.
                if (!flow &&
                    atNewline &&
                    indicator !== 'doc-start' &&
                    token.source[0] === '\t')
                    onError(token, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');
                hasSpace = true;
                break;
            case 'comment': {
                if (!hasSpace)
                    onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');
                const cb = token.source.substring(1) || ' ';
                if (!comment)
                    comment = cb;
                else
                    comment += commentSep + cb;
                commentSep = '';
                atNewline = false;
                break;
            }
            case 'newline':
                if (atNewline) {
                    if (comment)
                        comment += token.source;
                    else
                        spaceBefore = true;
                }
                else
                    commentSep += token.source;
                atNewline = true;
                hasNewline = true;
                if (anchor || tag)
                    hasNewlineAfterProp = true;
                hasSpace = true;
                break;
            case 'anchor':
                if (anchor)
                    onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');
                if (token.source.endsWith(':'))
                    onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);
                anchor = token;
                if (start === null)
                    start = token.offset;
                atNewline = false;
                hasSpace = false;
                reqSpace = true;
                break;
            case 'tag': {
                if (tag)
                    onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');
                tag = token;
                if (start === null)
                    start = token.offset;
                atNewline = false;
                hasSpace = false;
                reqSpace = true;
                break;
            }
            case indicator:
                // Could here handle preceding comments differently
                if (anchor || tag)
                    onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);
                if (found)
                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow !== null && flow !== void 0 ? flow : 'collection'}`);
                found = token;
                atNewline = false;
                hasSpace = false;
                break;
            case 'comma':
                if (flow) {
                    if (comma)
                        onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);
                    comma = token;
                    atNewline = false;
                    hasSpace = false;
                    break;
                }
            // else fallthrough
            default:
                onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);
                atNewline = false;
                hasSpace = false;
        }
    }
    const last = tokens[tokens.length - 1];
    const end = last ? last.offset + last.source.length : offset;
    if (reqSpace &&
        next &&
        next.type !== 'space' &&
        next.type !== 'newline' &&
        next.type !== 'comma' &&
        (next.type !== 'scalar' || next.source !== ''))
        onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');
    return {
        comma,
        found,
        spaceBefore,
        comment,
        hasNewline,
        hasNewlineAfterProp,
        anchor,
        tag,
        end,
        start: start !== null && start !== void 0 ? start : end
    };
}

exports.resolveProps = resolveProps;
'use strict';

function containsNewline(key) {
    if (!key)
        return null;
    switch (key.type) {
        case 'alias':
        case 'scalar':
        case 'double-quoted-scalar':
        case 'single-quoted-scalar':
            if (key.source.includes('\n'))
                return true;
            if (key.end)
                for (const st of key.end)
                    if (st.type === 'newline')
                        return true;
            return false;
        case 'flow-collection':
            for (const it of key.items) {
                for (const st of it.start)
                    if (st.type === 'newline')
                        return true;
                if (it.sep)
                    for (const st of it.sep)
                        if (st.type === 'newline')
                            return true;
                if (containsNewline(it.key) || containsNewline(it.value))
                    return true;
            }
            return false;
        default:
            return true;
    }
}

exports.containsNewline = containsNewline;
'use strict';

function emptyScalarPosition(offset, before, pos) {
    if (before) {
        if (pos === null)
            pos = before.length;
        for (let i = pos - 1; i >= 0; --i) {
            let st = before[i];
            switch (st.type) {
                case 'space':
                case 'comment':
                case 'newline':
                    offset -= st.source.length;
                    continue;
            }
            // Technically, an empty scalar is immediately after the last non-empty
            // node, but it's more useful to place it after any whitespace.
            st = before[++i];
            while ((st === null || st === void 0 ? void 0 : st.type) === 'space') {
                offset += st.source.length;
                st = before[++i];
            }
            break;
        }
    }
    return offset;
}

exports.emptyScalarPosition = emptyScalarPosition;
'use strict';

var utilContainsNewline = require('./util-contains-newline.js');

function flowIndentCheck(indent, fc, onError) {
    if ((fc === null || fc === void 0 ? void 0 : fc.type) === 'flow-collection') {
        const end = fc.end[0];
        if (end.indent === indent &&
            (end.source === ']' || end.source === '}') &&
            utilContainsNewline.containsNewline(fc)) {
            const msg = 'Flow end indicator should be more indented than parent';
            onError(end, 'BAD_INDENT', msg, true);
        }
    }
}

exports.flowIndentCheck = flowIndentCheck;
'use strict';

var Node = require('../nodes/Node.js');

function mapIncludes(ctx, items, search) {
    const { uniqueKeys } = ctx.options;
    if (uniqueKeys === false)
        return false;
    const isEqual = typeof uniqueKeys === 'function'
        ? uniqueKeys
        : (a, b) => a === b ||
            (Node.isScalar(a) &&
                Node.isScalar(b) &&
                a.value === b.value &&
                !(a.value === '<<' && ctx.schema.merge));
    return items.some(pair => isEqual(pair.key, search));
}

exports.mapIncludes = mapIncludes;
'use strict';

var Node = require('../nodes/Node.js');
var visit = require('../visit.js');

/**
 * Verify that the input string is a valid anchor.
 *
 * Will throw on errors.
 */
function anchorIsValid(anchor) {
    if (/[\x00-\x19\s,[\]{}]/.test(anchor)) {
        const sa = JSON.stringify(anchor);
        const msg = `Anchor must not contain whitespace or control characters: ${sa}`;
        throw new Error(msg);
    }
    return true;
}
function anchorNames(root) {
    const anchors = new Set();
    visit.visit(root, {
        Value(_key, node) {
            if (node.anchor)
                anchors.add(node.anchor);
        }
    });
    return anchors;
}
/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */
function findNewAnchor(prefix, exclude) {
    for (let i = 1; true; ++i) {
        const name = `${prefix}${i}`;
        if (!exclude.has(name))
            return name;
    }
}
function createNodeAnchors(doc, prefix) {
    const aliasObjects = [];
    const sourceObjects = new Map();
    let prevAnchors = null;
    return {
        onAnchor: (source) => {
            aliasObjects.push(source);
            if (!prevAnchors)
                prevAnchors = anchorNames(doc);
            const anchor = findNewAnchor(prefix, prevAnchors);
            prevAnchors.add(anchor);
            return anchor;
        },
        /**
         * With circular references, the source node is only resolved after all
         * of its child nodes are. This is why anchors are set only after all of
         * the nodes have been created.
         */
        setAnchors: () => {
            for (const source of aliasObjects) {
                const ref = sourceObjects.get(source);
                if (typeof ref === 'object' &&
                    ref.anchor &&
                    (Node.isScalar(ref.node) || Node.isCollection(ref.node))) {
                    ref.node.anchor = ref.anchor;
                }
                else {
                    const error = new Error('Failed to resolve repeated object (this should not happen)');
                    error.source = source;
                    throw error;
                }
            }
        },
        sourceObjects
    };
}

exports.anchorIsValid = anchorIsValid;
exports.anchorNames = anchorNames;
exports.createNodeAnchors = createNodeAnchors;
exports.findNewAnchor = findNewAnchor;
'use strict';

/**
 * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,
 * in section 24.5.1.1 "Runtime Semantics: InternalizeJSONProperty" of the
 * 2021 edition: https://tc39.es/ecma262/#sec-json.parse
 *
 * Includes extensions for handling Map and Set objects.
 */
function applyReviver(reviver, obj, key, val) {
    if (val && typeof val === 'object') {
        if (Array.isArray(val)) {
            for (let i = 0, len = val.length; i < len; ++i) {
                const v0 = val[i];
                const v1 = applyReviver(reviver, val, String(i), v0);
                if (v1 === undefined)
                    delete val[i];
                else if (v1 !== v0)
                    val[i] = v1;
            }
        }
        else if (val instanceof Map) {
            for (const k of Array.from(val.keys())) {
                const v0 = val.get(k);
                const v1 = applyReviver(reviver, val, k, v0);
                if (v1 === undefined)
                    val.delete(k);
                else if (v1 !== v0)
                    val.set(k, v1);
            }
        }
        else if (val instanceof Set) {
            for (const v0 of Array.from(val)) {
                const v1 = applyReviver(reviver, val, v0, v0);
                if (v1 === undefined)
                    val.delete(v0);
                else if (v1 !== v0) {
                    val.delete(v0);
                    val.add(v1);
                }
            }
        }
        else {
            for (const [k, v0] of Object.entries(val)) {
                const v1 = applyReviver(reviver, val, k, v0);
                if (v1 === undefined)
                    delete val[k];
                else if (v1 !== v0)
                    val[k] = v1;
            }
        }
    }
    return reviver.call(obj, key, val);
}

exports.applyReviver = applyReviver;
'use strict';

var Alias = require('../nodes/Alias.js');
var Node = require('../nodes/Node.js');
var Scalar = require('../nodes/Scalar.js');

const defaultTagPrefix = 'tag:yaml.org,2002:';
function findTagObject(value, tagName, tags) {
    var _a;
    if (tagName) {
        const match = tags.filter(t => t.tag === tagName);
        const tagObj = (_a = match.find(t => !t.format)) !== null && _a !== void 0 ? _a : match[0];
        if (!tagObj)
            throw new Error(`Tag ${tagName} not found`);
        return tagObj;
    }
    return tags.find(t => { var _a; return ((_a = t.identify) === null || _a === void 0 ? void 0 : _a.call(t, value)) && !t.format; });
}
function createNode(value, tagName, ctx) {
    var _a, _b;
    if (Node.isDocument(value))
        value = value.contents;
    if (Node.isNode(value))
        return value;
    if (Node.isPair(value)) {
        const map = (_b = (_a = ctx.schema[Node.MAP]).createNode) === null || _b === void 0 ? void 0 : _b.call(_a, ctx.schema, null, ctx);
        map.items.push(value);
        return map;
    }
    if (value instanceof String ||
        value instanceof Number ||
        value instanceof Boolean ||
        (typeof BigInt === 'function' && value instanceof BigInt) // not supported everywhere
    ) {
        // https://tc39.es/ecma262/#sec-serializejsonproperty
        value = value.valueOf();
    }
    const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;
    // Detect duplicate references to the same object & use Alias nodes for all
    // after first. The `ref` wrapper allows for circular references to resolve.
    let ref = undefined;
    if (aliasDuplicateObjects && value && typeof value === 'object') {
        ref = sourceObjects.get(value);
        if (ref) {
            if (!ref.anchor)
                ref.anchor = onAnchor(value);
            return new Alias.Alias(ref.anchor);
        }
        else {
            ref = { anchor: null, node: null };
            sourceObjects.set(value, ref);
        }
    }
    if (tagName === null || tagName === void 0 ? void 0 : tagName.startsWith('!!'))
        tagName = defaultTagPrefix + tagName.slice(2);
    let tagObj = findTagObject(value, tagName, schema.tags);
    if (!tagObj) {
        if (value && typeof value.toJSON === 'function') {
            // eslint-disable-next-line @typescript-eslint/no-unsafe-call
            value = value.toJSON();
        }
        if (!value || typeof value !== 'object') {
            const node = new Scalar.Scalar(value);
            if (ref)
                ref.node = node;
            return node;
        }
        tagObj =
            value instanceof Map
                ? schema[Node.MAP]
                : Symbol.iterator in Object(value)
                    ? schema[Node.SEQ]
                    : schema[Node.MAP];
    }
    if (onTagObj) {
        onTagObj(tagObj);
        delete ctx.onTagObj;
    }
    const node = (tagObj === null || tagObj === void 0 ? void 0 : tagObj.createNode)
        ? tagObj.createNode(ctx.schema, value, ctx)
        : new Scalar.Scalar(value);
    if (tagName)
        node.tag = tagName;
    if (ref)
        ref.node = node;
    return node;
}

exports.createNode = createNode;
'use strict';

var Node = require('../nodes/Node.js');
var visit = require('../visit.js');

const escapeChars = {
    '!': '%21',
    ',': '%2C',
    '[': '%5B',
    ']': '%5D',
    '{': '%7B',
    '}': '%7D'
};
const escapeTagName = (tn) => tn.replace(/[!,[\]{}]/g, ch => escapeChars[ch]);
class Directives {
    constructor(yaml, tags) {
        /**
         * The directives-end/doc-start marker `---`. If `null`, a marker may still be
         * included in the document's stringified representation.
         */
        this.docStart = null;
        /** The doc-end marker `...`.  */
        this.docEnd = false;
        this.yaml = Object.assign({}, Directives.defaultYaml, yaml);
        this.tags = Object.assign({}, Directives.defaultTags, tags);
    }
    clone() {
        const copy = new Directives(this.yaml, this.tags);
        copy.docStart = this.docStart;
        return copy;
    }
    /**
     * During parsing, get a Directives instance for the current document and
     * update the stream state according to the current version's spec.
     */
    atDocument() {
        const res = new Directives(this.yaml, this.tags);
        switch (this.yaml.version) {
            case '1.1':
                this.atNextDocument = true;
                break;
            case '1.2':
                this.atNextDocument = false;
                this.yaml = {
                    explicit: Directives.defaultYaml.explicit,
                    version: '1.2'
                };
                this.tags = Object.assign({}, Directives.defaultTags);
                break;
        }
        return res;
    }
    /**
     * @param onError - May be called even if the action was successful
     * @returns `true` on success
     */
    add(line, onError) {
        if (this.atNextDocument) {
            this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };
            this.tags = Object.assign({}, Directives.defaultTags);
            this.atNextDocument = false;
        }
        const parts = line.trim().split(/[ \t]+/);
        const name = parts.shift();
        switch (name) {
            case '%TAG': {
                if (parts.length !== 2) {
                    onError(0, '%TAG directive should contain exactly two parts');
                    if (parts.length < 2)
                        return false;
                }
                const [handle, prefix] = parts;
                this.tags[handle] = prefix;
                return true;
            }
            case '%YAML': {
                this.yaml.explicit = true;
                if (parts.length !== 1) {
                    onError(0, '%YAML directive should contain exactly one part');
                    return false;
                }
                const [version] = parts;
                if (version === '1.1' || version === '1.2') {
                    this.yaml.version = version;
                    return true;
                }
                else {
                    const isValid = /^\d+\.\d+$/.test(version);
                    onError(6, `Unsupported YAML version ${version}`, isValid);
                    return false;
                }
            }
            default:
                onError(0, `Unknown directive ${name}`, true);
                return false;
        }
    }
    /**
     * Resolves a tag, matching handles to those defined in %TAG directives.
     *
     * @returns Resolved tag, which may also be the non-specific tag `'!'` or a
     *   `'!local'` tag, or `null` if unresolvable.
     */
    tagName(source, onError) {
        if (source === '!')
            return '!'; // non-specific tag
        if (source[0] !== '!') {
            onError(`Not a valid tag: ${source}`);
            return null;
        }
        if (source[1] === '<') {
            const verbatim = source.slice(2, -1);
            if (verbatim === '!' || verbatim === '!!') {
                onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);
                return null;
            }
            if (source[source.length - 1] !== '>')
                onError('Verbatim tags must end with a >');
            return verbatim;
        }
        const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/);
        if (!suffix)
            onError(`The ${source} tag has no suffix`);
        const prefix = this.tags[handle];
        if (prefix)
            return prefix + decodeURIComponent(suffix);
        if (handle === '!')
            return source; // local tag
        onError(`Could not resolve tag: ${source}`);
        return null;
    }
    /**
     * Given a fully resolved tag, returns its printable string form,
     * taking into account current tag prefixes and defaults.
     */
    tagString(tag) {
        for (const [handle, prefix] of Object.entries(this.tags)) {
            if (tag.startsWith(prefix))
                return handle + escapeTagName(tag.substring(prefix.length));
        }
        return tag[0] === '!' ? tag : `!<${tag}>`;
    }
    toString(doc) {
        const lines = this.yaml.explicit
            ? [`%YAML ${this.yaml.version || '1.2'}`]
            : [];
        const tagEntries = Object.entries(this.tags);
        let tagNames;
        if (doc && tagEntries.length > 0 && Node.isNode(doc.contents)) {
            const tags = {};
            visit.visit(doc.contents, (_key, node) => {
                if (Node.isNode(node) && node.tag)
                    tags[node.tag] = true;
            });
            tagNames = Object.keys(tags);
        }
        else
            tagNames = [];
        for (const [handle, prefix] of tagEntries) {
            if (handle === '!!' && prefix === 'tag:yaml.org,2002:')
                continue;
            if (!doc || tagNames.some(tn => tn.startsWith(prefix)))
                lines.push(`%TAG ${handle} ${prefix}`);
        }
        return lines.join('\n');
    }
}
Directives.defaultYaml = { explicit: false, version: '1.2' };
Directives.defaultTags = { '!!': 'tag:yaml.org,2002:' };

exports.Directives = Directives;
'use strict';

var Alias = require('../nodes/Alias.js');
var Collection = require('../nodes/Collection.js');
var Node = require('../nodes/Node.js');
var Pair = require('../nodes/Pair.js');
var toJS = require('../nodes/toJS.js');
var Schema = require('../schema/Schema.js');
var stringify = require('../stringify/stringify.js');
var stringifyDocument = require('../stringify/stringifyDocument.js');
var anchors = require('./anchors.js');
var applyReviver = require('./applyReviver.js');
var createNode = require('./createNode.js');
var directives = require('./directives.js');

class Document {
    constructor(value, replacer, options) {
        /** A comment before this Document */
        this.commentBefore = null;
        /** A comment immediately after this Document */
        this.comment = null;
        /** Errors encountered during parsing. */
        this.errors = [];
        /** Warnings encountered during parsing. */
        this.warnings = [];
        Object.defineProperty(this, Node.NODE_TYPE, { value: Node.DOC });
        let _replacer = null;
        if (typeof replacer === 'function' || Array.isArray(replacer)) {
            _replacer = replacer;
        }
        else if (options === undefined && replacer) {
            options = replacer;
            replacer = undefined;
        }
        const opt = Object.assign({
            intAsBigInt: false,
            keepSourceTokens: false,
            logLevel: 'warn',
            prettyErrors: true,
            strict: true,
            uniqueKeys: true,
            version: '1.2'
        }, options);
        this.options = opt;
        let { version } = opt;
        if (options === null || options === void 0 ? void 0 : options.directives) {
            this.directives = options.directives.atDocument();
            if (this.directives.yaml.explicit)
                version = this.directives.yaml.version;
        }
        else
            this.directives = new directives.Directives({ version });
        this.setSchema(version, options);
        if (value === undefined)
            this.contents = null;
        else {
            this.contents = this.createNode(value, _replacer, options);
        }
    }
    /**
     * Create a deep copy of this Document and its contents.
     *
     * Custom Node values that inherit from `Object` still refer to their original instances.
     */
    clone() {
        const copy = Object.create(Document.prototype, {
            [Node.NODE_TYPE]: { value: Node.DOC }
        });
        copy.commentBefore = this.commentBefore;
        copy.comment = this.comment;
        copy.errors = this.errors.slice();
        copy.warnings = this.warnings.slice();
        copy.options = Object.assign({}, this.options);
        if (this.directives)
            copy.directives = this.directives.clone();
        copy.schema = this.schema.clone();
        copy.contents = Node.isNode(this.contents)
            ? this.contents.clone(copy.schema)
            : this.contents;
        if (this.range)
            copy.range = this.range.slice();
        return copy;
    }
    /** Adds a value to the document. */
    add(value) {
        if (assertCollection(this.contents))
            this.contents.add(value);
    }
    /** Adds a value to the document. */
    addIn(path, value) {
        if (assertCollection(this.contents))
            this.contents.addIn(path, value);
    }
    /**
     * Create a new `Alias` node, ensuring that the target `node` has the required anchor.
     *
     * If `node` already has an anchor, `name` is ignored.
     * Otherwise, the `node.anchor` value will be set to `name`,
     * or if an anchor with that name is already present in the document,
     * `name` will be used as a prefix for a new unique anchor.
     * If `name` is undefined, the generated anchor will use 'a' as a prefix.
     */
    createAlias(node, name) {
        if (!node.anchor) {
            const prev = anchors.anchorNames(this);
            node.anchor =
                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
                !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;
        }
        return new Alias.Alias(node.anchor);
    }
    createNode(value, replacer, options) {
        let _replacer = undefined;
        if (typeof replacer === 'function') {
            value = replacer.call({ '': value }, '', value);
            _replacer = replacer;
        }
        else if (Array.isArray(replacer)) {
            const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;
            const asStr = replacer.filter(keyToStr).map(String);
            if (asStr.length > 0)
                replacer = replacer.concat(asStr);
            _replacer = replacer;
        }
        else if (options === undefined && replacer) {
            options = replacer;
            replacer = undefined;
        }
        const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options !== null && options !== void 0 ? options : {};
        const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, 
        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
        anchorPrefix || 'a');
        const ctx = {
            aliasDuplicateObjects: aliasDuplicateObjects !== null && aliasDuplicateObjects !== void 0 ? aliasDuplicateObjects : true,
            keepUndefined: keepUndefined !== null && keepUndefined !== void 0 ? keepUndefined : false,
            onAnchor,
            onTagObj,
            replacer: _replacer,
            schema: this.schema,
            sourceObjects
        };
        const node = createNode.createNode(value, tag, ctx);
        if (flow && Node.isCollection(node))
            node.flow = true;
        setAnchors();
        return node;
    }
    /**
     * Convert a key and a value into a `Pair` using the current schema,
     * recursively wrapping all values as `Scalar` or `Collection` nodes.
     */
    createPair(key, value, options = {}) {
        const k = this.createNode(key, null, options);
        const v = this.createNode(value, null, options);
        return new Pair.Pair(k, v);
    }
    /**
     * Removes a value from the document.
     * @returns `true` if the item was found and removed.
     */
    delete(key) {
        return assertCollection(this.contents) ? this.contents.delete(key) : false;
    }
    /**
     * Removes a value from the document.
     * @returns `true` if the item was found and removed.
     */
    deleteIn(path) {
        if (Collection.isEmptyPath(path)) {
            if (this.contents == null)
                return false;
            this.contents = null;
            return true;
        }
        return assertCollection(this.contents)
            ? this.contents.deleteIn(path)
            : false;
    }
    /**
     * Returns item at `key`, or `undefined` if not found. By default unwraps
     * scalar values from their surrounding node; to disable set `keepScalar` to
     * `true` (collections are always returned intact).
     */
    get(key, keepScalar) {
        return Node.isCollection(this.contents)
            ? this.contents.get(key, keepScalar)
            : undefined;
    }
    /**
     * Returns item at `path`, or `undefined` if not found. By default unwraps
     * scalar values from their surrounding node; to disable set `keepScalar` to
     * `true` (collections are always returned intact).
     */
    getIn(path, keepScalar) {
        if (Collection.isEmptyPath(path))
            return !keepScalar && Node.isScalar(this.contents)
                ? this.contents.value
                : this.contents;
        return Node.isCollection(this.contents)
            ? this.contents.getIn(path, keepScalar)
            : undefined;
    }
    /**
     * Checks if the document includes a value with the key `key`.
     */
    has(key) {
        return Node.isCollection(this.contents) ? this.contents.has(key) : false;
    }
    /**
     * Checks if the document includes a value at `path`.
     */
    hasIn(path) {
        if (Collection.isEmptyPath(path))
            return this.contents !== undefined;
        return Node.isCollection(this.contents) ? this.contents.hasIn(path) : false;
    }
    /**
     * Sets a value in this document. For `!!set`, `value` needs to be a
     * boolean to add/remove the item from the set.
     */
    set(key, value) {
        if (this.contents == null) {
            this.contents = Collection.collectionFromPath(this.schema, [key], value);
        }
        else if (assertCollection(this.contents)) {
            this.contents.set(key, value);
        }
    }
    /**
     * Sets a value in this document. For `!!set`, `value` needs to be a
     * boolean to add/remove the item from the set.
     */
    setIn(path, value) {
        if (Collection.isEmptyPath(path))
            this.contents = value;
        else if (this.contents == null) {
            this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);
        }
        else if (assertCollection(this.contents)) {
            this.contents.setIn(path, value);
        }
    }
    /**
     * Change the YAML version and schema used by the document.
     * A `null` version disables support for directives, explicit tags, anchors, and aliases.
     * It also requires the `schema` option to be given as a `Schema` instance value.
     *
     * Overrides all previously set schema options.
     */
    setSchema(version, options = {}) {
        if (typeof version === 'number')
            version = String(version);
        let opt;
        switch (version) {
            case '1.1':
                if (this.directives)
                    this.directives.yaml.version = '1.1';
                else
                    this.directives = new directives.Directives({ version: '1.1' });
                opt = { merge: true, resolveKnownTags: false, schema: 'yaml-1.1' };
                break;
            case '1.2':
            case 'next':
                if (this.directives)
                    this.directives.yaml.version = version;
                else
                    this.directives = new directives.Directives({ version });
                opt = { merge: false, resolveKnownTags: true, schema: 'core' };
                break;
            case null:
                if (this.directives)
                    delete this.directives;
                opt = null;
                break;
            default: {
                const sv = JSON.stringify(version);
                throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);
            }
        }
        // Not using `instanceof Schema` to allow for duck typing
        if (options.schema instanceof Object)
            this.schema = options.schema;
        else if (opt)
            this.schema = new Schema.Schema(Object.assign(opt, options));
        else
            throw new Error(`With a null YAML version, the { schema: Schema } option is required`);
    }
    // json & jsonArg are only used from toJSON()
    toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {
        const ctx = {
            anchors: new Map(),
            doc: this,
            keep: !json,
            mapAsMap: mapAsMap === true,
            mapKeyWarned: false,
            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100,
            stringify: stringify.stringify
        };
        const res = toJS.toJS(this.contents, jsonArg !== null && jsonArg !== void 0 ? jsonArg : '', ctx);
        if (typeof onAnchor === 'function')
            for (const { count, res } of ctx.anchors.values())
                onAnchor(res, count);
        return typeof reviver === 'function'
            ? applyReviver.applyReviver(reviver, { '': res }, '', res)
            : res;
    }
    /**
     * A JSON representation of the document `contents`.
     *
     * @param jsonArg Used by `JSON.stringify` to indicate the array index or
     *   property name.
     */
    toJSON(jsonArg, onAnchor) {
        return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });
    }
    /** A YAML representation of the document. */
    toString(options = {}) {
        if (this.errors.length > 0)
            throw new Error('Document with errors cannot be stringified');
        if ('indent' in options &&
            (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {
            const s = JSON.stringify(options.indent);
            throw new Error(`"indent" option must be a positive integer, not ${s}`);
        }
        return stringifyDocument.stringifyDocument(this, options);
    }
}
function assertCollection(contents) {
    if (Node.isCollection(contents))
        return true;
    throw new Error('Expected a YAML collection as document contents');
}

exports.Document = Document;
'use strict';

class YAMLError extends Error {
    constructor(name, pos, code, message) {
        super();
        this.name = name;
        this.code = code;
        this.message = message;
        this.pos = pos;
    }
}
class YAMLParseError extends YAMLError {
    constructor(pos, code, message) {
        super('YAMLParseError', pos, code, message);
    }
}
class YAMLWarning extends YAMLError {
    constructor(pos, code, message) {
        super('YAMLWarning', pos, code, message);
    }
}
const prettifyError = (src, lc) => (error) => {
    if (error.pos[0] === -1)
        return;
    error.linePos = error.pos.map(pos => lc.linePos(pos));
    const { line, col } = error.linePos[0];
    error.message += ` at line ${line}, column ${col}`;
    let ci = col - 1;
    let lineStr = src
        .substring(lc.lineStarts[line - 1], lc.lineStarts[line])
        .replace(/[\n\r]+$/, '');
    // Trim to max 80 chars, keeping col position near the middle
    if (ci >= 60 && lineStr.length > 80) {
        const trimStart = Math.min(ci - 39, lineStr.length - 79);
        lineStr = 'â€¦' + lineStr.substring(trimStart);
        ci -= trimStart - 1;
    }
    if (lineStr.length > 80)
        lineStr = lineStr.substring(0, 79) + 'â€¦';
    // Include previous line in context if pointing at line start
    if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {
        // Regexp won't match if start is trimmed
        let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);
        if (prev.length > 80)
            prev = prev.substring(0, 79) + 'â€¦\n';
        lineStr = prev + lineStr;
    }
    if (/[^ ]/.test(lineStr)) {
        let count = 1;
        const end = error.linePos[1];
        if (end && end.line === line && end.col > col) {
            count = Math.min(end.col - col, 80 - ci);
        }
        const pointer = ' '.repeat(ci) + '^'.repeat(count);
        error.message += `:\n\n${lineStr}\n${pointer}\n`;
    }
};

exports.YAMLError = YAMLError;
exports.YAMLParseError = YAMLParseError;
exports.YAMLWarning = YAMLWarning;
exports.prettifyError = prettifyError;
'use strict';

var composer = require('./compose/composer.js');
var Document = require('./doc/Document.js');
var Schema = require('./schema/Schema.js');
var errors = require('./errors.js');
var Alias = require('./nodes/Alias.js');
var Node = require('./nodes/Node.js');
var Pair = require('./nodes/Pair.js');
var Scalar = require('./nodes/Scalar.js');
var YAMLMap = require('./nodes/YAMLMap.js');
var YAMLSeq = require('./nodes/YAMLSeq.js');
var cst = require('./parse/cst.js');
var lexer = require('./parse/lexer.js');
var lineCounter = require('./parse/line-counter.js');
var parser = require('./parse/parser.js');
var publicApi = require('./public-api.js');
var visit = require('./visit.js');



exports.Composer = composer.Composer;
exports.Document = Document.Document;
exports.Schema = Schema.Schema;
exports.YAMLError = errors.YAMLError;
exports.YAMLParseError = errors.YAMLParseError;
exports.YAMLWarning = errors.YAMLWarning;
exports.Alias = Alias.Alias;
exports.isAlias = Node.isAlias;
exports.isCollection = Node.isCollection;
exports.isDocument = Node.isDocument;
exports.isMap = Node.isMap;
exports.isNode = Node.isNode;
exports.isPair = Node.isPair;
exports.isScalar = Node.isScalar;
exports.isSeq = Node.isSeq;
exports.Pair = Pair.Pair;
exports.Scalar = Scalar.Scalar;
exports.YAMLMap = YAMLMap.YAMLMap;
exports.YAMLSeq = YAMLSeq.YAMLSeq;
exports.CST = cst;
exports.Lexer = lexer.Lexer;
exports.LineCounter = lineCounter.LineCounter;
exports.Parser = parser.Parser;
exports.parse = publicApi.parse;
exports.parseAllDocuments = publicApi.parseAllDocuments;
exports.parseDocument = publicApi.parseDocument;
exports.stringify = publicApi.stringify;
exports.visit = visit.visit;
exports.visitAsync = visit.visitAsync;
'use strict';

function debug(logLevel, ...messages) {
    if (logLevel === 'debug')
        console.log(...messages);
}
function warn(logLevel, warning) {
    if (logLevel === 'debug' || logLevel === 'warn') {
        if (typeof process !== 'undefined' && process.emitWarning)
            process.emitWarning(warning);
        else
            console.warn(warning);
    }
}

exports.debug = debug;
exports.warn = warn;
'use strict';

var log = require('../log.js');
var stringify = require('../stringify/stringify.js');
var Node = require('./Node.js');
var Scalar = require('./Scalar.js');
var toJS = require('./toJS.js');

const MERGE_KEY = '<<';
function addPairToJSMap(ctx, map, { key, value }) {
    if ((ctx === null || ctx === void 0 ? void 0 : ctx.doc.schema.merge) && isMergeKey(key)) {
        value = Node.isAlias(value) ? value.resolve(ctx.doc) : value;
        if (Node.isSeq(value))
            for (const it of value.items)
                mergeToJSMap(ctx, map, it);
        else if (Array.isArray(value))
            for (const it of value)
                mergeToJSMap(ctx, map, it);
        else
            mergeToJSMap(ctx, map, value);
    }
    else {
        const jsKey = toJS.toJS(key, '', ctx);
        if (map instanceof Map) {
            map.set(jsKey, toJS.toJS(value, jsKey, ctx));
        }
        else if (map instanceof Set) {
            map.add(jsKey);
        }
        else {
            const stringKey = stringifyKey(key, jsKey, ctx);
            const jsValue = toJS.toJS(value, stringKey, ctx);
            if (stringKey in map)
                Object.defineProperty(map, stringKey, {
                    value: jsValue,
                    writable: true,
                    enumerable: true,
                    configurable: true
                });
            else
                map[stringKey] = jsValue;
        }
    }
    return map;
}
const isMergeKey = (key) => key === MERGE_KEY ||
    (Node.isScalar(key) &&
        key.value === MERGE_KEY &&
        (!key.type || key.type === Scalar.Scalar.PLAIN));
// If the value associated with a merge key is a single mapping node, each of
// its key/value pairs is inserted into the current mapping, unless the key
// already exists in it. If the value associated with the merge key is a
// sequence, then this sequence is expected to contain mapping nodes and each
// of these nodes is merged in turn according to its order in the sequence.
// Keys in mapping nodes earlier in the sequence override keys specified in
// later mapping nodes. -- http://yaml.org/type/merge.html
function mergeToJSMap(ctx, map, value) {
    const source = ctx && Node.isAlias(value) ? value.resolve(ctx.doc) : value;
    if (!Node.isMap(source))
        throw new Error('Merge sources must be maps or map aliases');
    const srcMap = source.toJSON(null, ctx, Map);
    for (const [key, value] of srcMap) {
        if (map instanceof Map) {
            if (!map.has(key))
                map.set(key, value);
        }
        else if (map instanceof Set) {
            map.add(key);
        }
        else if (!Object.prototype.hasOwnProperty.call(map, key)) {
            Object.defineProperty(map, key, {
                value,
                writable: true,
                enumerable: true,
                configurable: true
            });
        }
    }
    return map;
}
function stringifyKey(key, jsKey, ctx) {
    if (jsKey === null)
        return '';
    if (typeof jsKey !== 'object')
        return String(jsKey);
    if (Node.isNode(key) && ctx && ctx.doc) {
        const strCtx = stringify.createStringifyContext(ctx.doc, {});
        strCtx.anchors = new Set();
        for (const node of ctx.anchors.keys())
            strCtx.anchors.add(node.anchor);
        strCtx.inFlow = true;
        strCtx.inStringifyKey = true;
        const strKey = key.toString(strCtx);
        if (!ctx.mapKeyWarned) {
            let jsonStr = JSON.stringify(strKey);
            if (jsonStr.length > 40)
                jsonStr = jsonStr.substring(0, 36) + '..."';
            log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);
            ctx.mapKeyWarned = true;
        }
        return strKey;
    }
    return JSON.stringify(jsKey);
}

exports.addPairToJSMap = addPairToJSMap;
'use strict';

var anchors = require('../doc/anchors.js');
var visit = require('../visit.js');
var Node = require('./Node.js');

class Alias extends Node.NodeBase {
    constructor(source) {
        super(Node.ALIAS);
        this.source = source;
        Object.defineProperty(this, 'tag', {
            set() {
                throw new Error('Alias nodes cannot have tags');
            }
        });
    }
    /**
     * Resolve the value of this alias within `doc`, finding the last
     * instance of the `source` anchor before this node.
     */
    resolve(doc) {
        let found = undefined;
        visit.visit(doc, {
            Node: (_key, node) => {
                if (node === this)
                    return visit.visit.BREAK;
                if (node.anchor === this.source)
                    found = node;
            }
        });
        return found;
    }
    toJSON(_arg, ctx) {
        if (!ctx)
            return { source: this.source };
        const { anchors, doc, maxAliasCount } = ctx;
        const source = this.resolve(doc);
        if (!source) {
            const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
            throw new ReferenceError(msg);
        }
        const data = anchors.get(source);
        /* istanbul ignore if */
        if (!data || data.res === undefined) {
            const msg = 'This should not happen: Alias anchor was not resolved?';
            throw new ReferenceError(msg);
        }
        if (maxAliasCount >= 0) {
            data.count += 1;
            if (data.aliasCount === 0)
                data.aliasCount = getAliasCount(doc, source, anchors);
            if (data.count * data.aliasCount > maxAliasCount) {
                const msg = 'Excessive alias count indicates a resource exhaustion attack';
                throw new ReferenceError(msg);
            }
        }
        return data.res;
    }
    toString(ctx, _onComment, _onChompKeep) {
        const src = `*${this.source}`;
        if (ctx) {
            anchors.anchorIsValid(this.source);
            if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {
                const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;
                throw new Error(msg);
            }
            if (ctx.implicitKey)
                return `${src} `;
        }
        return src;
    }
}
function getAliasCount(doc, node, anchors) {
    if (Node.isAlias(node)) {
        const source = node.resolve(doc);
        const anchor = anchors && source && anchors.get(source);
        return anchor ? anchor.count * anchor.aliasCount : 0;
    }
    else if (Node.isCollection(node)) {
        let count = 0;
        for (const item of node.items) {
            const c = getAliasCount(doc, item, anchors);
            if (c > count)
                count = c;
        }
        return count;
    }
    else if (Node.isPair(node)) {
        const kc = getAliasCount(doc, node.key, anchors);
        const vc = getAliasCount(doc, node.value, anchors);
        return Math.max(kc, vc);
    }
    return 1;
}

exports.Alias = Alias;
'use strict';

var createNode = require('../doc/createNode.js');
var Node = require('./Node.js');

function collectionFromPath(schema, path, value) {
    let v = value;
    for (let i = path.length - 1; i >= 0; --i) {
        const k = path[i];
        if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {
            const a = [];
            a[k] = v;
            v = a;
        }
        else {
            v = new Map([[k, v]]);
        }
    }
    return createNode.createNode(v, undefined, {
        aliasDuplicateObjects: false,
        keepUndefined: false,
        onAnchor: () => {
            throw new Error('This should not happen, please report a bug.');
        },
        schema,
        sourceObjects: new Map()
    });
}
// null, undefined, or an empty non-string iterable (e.g. [])
const isEmptyPath = (path) => path == null ||
    (typeof path === 'object' && !!path[Symbol.iterator]().next().done);
class Collection extends Node.NodeBase {
    constructor(type, schema) {
        super(type);
        Object.defineProperty(this, 'schema', {
            value: schema,
            configurable: true,
            enumerable: false,
            writable: true
        });
    }
    /**
     * Create a copy of this collection.
     *
     * @param schema - If defined, overwrites the original's schema
     */
    clone(schema) {
        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));
        if (schema)
            copy.schema = schema;
        copy.items = copy.items.map(it => Node.isNode(it) || Node.isPair(it) ? it.clone(schema) : it);
        if (this.range)
            copy.range = this.range.slice();
        return copy;
    }
    /**
     * Adds a value to the collection. For `!!map` and `!!omap` the value must
     * be a Pair instance or a `{ key, value }` object, which may not have a key
     * that already exists in the map.
     */
    addIn(path, value) {
        if (isEmptyPath(path))
            this.add(value);
        else {
            const [key, ...rest] = path;
            const node = this.get(key, true);
            if (Node.isCollection(node))
                node.addIn(rest, value);
            else if (node === undefined && this.schema)
                this.set(key, collectionFromPath(this.schema, rest, value));
            else
                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
        }
    }
    /**
     * Removes a value from the collection.
     * @returns `true` if the item was found and removed.
     */
    deleteIn(path) {
        const [key, ...rest] = path;
        if (rest.length === 0)
            return this.delete(key);
        const node = this.get(key, true);
        if (Node.isCollection(node))
            return node.deleteIn(rest);
        else
            throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
    }
    /**
     * Returns item at `key`, or `undefined` if not found. By default unwraps
     * scalar values from their surrounding node; to disable set `keepScalar` to
     * `true` (collections are always returned intact).
     */
    getIn(path, keepScalar) {
        const [key, ...rest] = path;
        const node = this.get(key, true);
        if (rest.length === 0)
            return !keepScalar && Node.isScalar(node) ? node.value : node;
        else
            return Node.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;
    }
    hasAllNullValues(allowScalar) {
        return this.items.every(node => {
            if (!Node.isPair(node))
                return false;
            const n = node.value;
            return (n == null ||
                (allowScalar &&
                    Node.isScalar(n) &&
                    n.value == null &&
                    !n.commentBefore &&
                    !n.comment &&
                    !n.tag));
        });
    }
    /**
     * Checks if the collection includes a value with the key `key`.
     */
    hasIn(path) {
        const [key, ...rest] = path;
        if (rest.length === 0)
            return this.has(key);
        const node = this.get(key, true);
        return Node.isCollection(node) ? node.hasIn(rest) : false;
    }
    /**
     * Sets a value in this collection. For `!!set`, `value` needs to be a
     * boolean to add/remove the item from the set.
     */
    setIn(path, value) {
        const [key, ...rest] = path;
        if (rest.length === 0) {
            this.set(key, value);
        }
        else {
            const node = this.get(key, true);
            if (Node.isCollection(node))
                node.setIn(rest, value);
            else if (node === undefined && this.schema)
                this.set(key, collectionFromPath(this.schema, rest, value));
            else
                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);
        }
    }
}
Collection.maxFlowStringSingleLineLength = 60;

exports.Collection = Collection;
exports.collectionFromPath = collectionFromPath;
exports.isEmptyPath = isEmptyPath;
'use strict';

const ALIAS = Symbol.for('yaml.alias');
const DOC = Symbol.for('yaml.document');
const MAP = Symbol.for('yaml.map');
const PAIR = Symbol.for('yaml.pair');
const SCALAR = Symbol.for('yaml.scalar');
const SEQ = Symbol.for('yaml.seq');
const NODE_TYPE = Symbol.for('yaml.node.type');
const isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;
const isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;
const isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;
const isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;
const isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;
const isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;
function isCollection(node) {
    if (node && typeof node === 'object')
        switch (node[NODE_TYPE]) {
            case MAP:
            case SEQ:
                return true;
        }
    return false;
}
function isNode(node) {
    if (node && typeof node === 'object')
        switch (node[NODE_TYPE]) {
            case ALIAS:
            case MAP:
            case SCALAR:
            case SEQ:
                return true;
        }
    return false;
}
const hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;
class NodeBase {
    constructor(type) {
        Object.defineProperty(this, NODE_TYPE, { value: type });
    }
    /** Create a copy of this node.  */
    clone() {
        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));
        if (this.range)
            copy.range = this.range.slice();
        return copy;
    }
}

exports.ALIAS = ALIAS;
exports.DOC = DOC;
exports.MAP = MAP;
exports.NODE_TYPE = NODE_TYPE;
exports.NodeBase = NodeBase;
exports.PAIR = PAIR;
exports.SCALAR = SCALAR;
exports.SEQ = SEQ;
exports.hasAnchor = hasAnchor;
exports.isAlias = isAlias;
exports.isCollection = isCollection;
exports.isDocument = isDocument;
exports.isMap = isMap;
exports.isNode = isNode;
exports.isPair = isPair;
exports.isScalar = isScalar;
exports.isSeq = isSeq;
'use strict';

var createNode = require('../doc/createNode.js');
var stringifyPair = require('../stringify/stringifyPair.js');
var addPairToJSMap = require('./addPairToJSMap.js');
var Node = require('./Node.js');

function createPair(key, value, ctx) {
    const k = createNode.createNode(key, undefined, ctx);
    const v = createNode.createNode(value, undefined, ctx);
    return new Pair(k, v);
}
class Pair {
    constructor(key, value = null) {
        Object.defineProperty(this, Node.NODE_TYPE, { value: Node.PAIR });
        this.key = key;
        this.value = value;
    }
    clone(schema) {
        let { key, value } = this;
        if (Node.isNode(key))
            key = key.clone(schema);
        if (Node.isNode(value))
            value = value.clone(schema);
        return new Pair(key, value);
    }
    toJSON(_, ctx) {
        const pair = (ctx === null || ctx === void 0 ? void 0 : ctx.mapAsMap) ? new Map() : {};
        return addPairToJSMap.addPairToJSMap(ctx, pair, this);
    }
    toString(ctx, onComment, onChompKeep) {
        return (ctx === null || ctx === void 0 ? void 0 : ctx.doc)
            ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)
            : JSON.stringify(this);
    }
}

exports.Pair = Pair;
exports.createPair = createPair;
'use strict';

var Node = require('./Node.js');
var toJS = require('./toJS.js');

const isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');
class Scalar extends Node.NodeBase {
    constructor(value) {
        super(Node.SCALAR);
        this.value = value;
    }
    toJSON(arg, ctx) {
        return (ctx === null || ctx === void 0 ? void 0 : ctx.keep) ? this.value : toJS.toJS(this.value, arg, ctx);
    }
    toString() {
        return String(this.value);
    }
}
Scalar.BLOCK_FOLDED = 'BLOCK_FOLDED';
Scalar.BLOCK_LITERAL = 'BLOCK_LITERAL';
Scalar.PLAIN = 'PLAIN';
Scalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';
Scalar.QUOTE_SINGLE = 'QUOTE_SINGLE';

exports.Scalar = Scalar;
exports.isScalarValue = isScalarValue;
'use strict';

var Node = require('./Node.js');

/**
 * Recursively convert any node or its contents to native JavaScript
 *
 * @param value - The input value
 * @param arg - If `value` defines a `toJSON()` method, use this
 *   as its first argument
 * @param ctx - Conversion context, originally set in Document#toJS(). If
 *   `{ keep: true }` is not set, output should be suitable for JSON
 *   stringification.
 */
function toJS(value, arg, ctx) {
    // eslint-disable-next-line @typescript-eslint/no-unsafe-return
    if (Array.isArray(value))
        return value.map((v, i) => toJS(v, String(i), ctx));
    if (value && typeof value.toJSON === 'function') {
        // eslint-disable-next-line @typescript-eslint/no-unsafe-call
        if (!ctx || !Node.hasAnchor(value))
            return value.toJSON(arg, ctx);
        const data = { aliasCount: 0, count: 1, res: undefined };
        ctx.anchors.set(value, data);
        ctx.onCreate = res => {
            data.res = res;
            delete ctx.onCreate;
        };
        const res = value.toJSON(arg, ctx);
        if (ctx.onCreate)
            ctx.onCreate(res);
        return res;
    }
    if (typeof value === 'bigint' && !(ctx === null || ctx === void 0 ? void 0 : ctx.keep))
        return Number(value);
    return value;
}

exports.toJS = toJS;
'use strict';

var stringifyCollection = require('../stringify/stringifyCollection.js');
var addPairToJSMap = require('./addPairToJSMap.js');
var Collection = require('./Collection.js');
var Node = require('./Node.js');
var Pair = require('./Pair.js');
var Scalar = require('./Scalar.js');

function findPair(items, key) {
    const k = Node.isScalar(key) ? key.value : key;
    for (const it of items) {
        if (Node.isPair(it)) {
            if (it.key === key || it.key === k)
                return it;
            if (Node.isScalar(it.key) && it.key.value === k)
                return it;
        }
    }
    return undefined;
}
class YAMLMap extends Collection.Collection {
    constructor(schema) {
        super(Node.MAP, schema);
        this.items = [];
    }
    static get tagName() {
        return 'tag:yaml.org,2002:map';
    }
    /**
     * Adds a value to the collection.
     *
     * @param overwrite - If not set `true`, using a key that is already in the
     *   collection will throw. Otherwise, overwrites the previous value.
     */
    add(pair, overwrite) {
        var _a;
        let _pair;
        if (Node.isPair(pair))
            _pair = pair;
        else if (!pair || typeof pair !== 'object' || !('key' in pair)) {
            // In TypeScript, this never happens.
            _pair = new Pair.Pair(pair, pair.value);
        }
        else
            _pair = new Pair.Pair(pair.key, pair.value);
        const prev = findPair(this.items, _pair.key);
        const sortEntries = (_a = this.schema) === null || _a === void 0 ? void 0 : _a.sortMapEntries;
        if (prev) {
            if (!overwrite)
                throw new Error(`Key ${_pair.key} already set`);
            // For scalars, keep the old node & its comments and anchors
            if (Node.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))
                prev.value.value = _pair.value;
            else
                prev.value = _pair.value;
        }
        else if (sortEntries) {
            const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);
            if (i === -1)
                this.items.push(_pair);
            else
                this.items.splice(i, 0, _pair);
        }
        else {
            this.items.push(_pair);
        }
    }
    delete(key) {
        const it = findPair(this.items, key);
        if (!it)
            return false;
        const del = this.items.splice(this.items.indexOf(it), 1);
        return del.length > 0;
    }
    get(key, keepScalar) {
        const it = findPair(this.items, key);
        const node = it === null || it === void 0 ? void 0 : it.value;
        return !keepScalar && Node.isScalar(node) ? node.value : node;
    }
    has(key) {
        return !!findPair(this.items, key);
    }
    set(key, value) {
        this.add(new Pair.Pair(key, value), true);
    }
    /**
     * @param ctx - Conversion context, originally set in Document#toJS()
     * @param {Class} Type - If set, forces the returned collection type
     * @returns Instance of Type, Map, or Object
     */
    toJSON(_, ctx, Type) {
        const map = Type ? new Type() : (ctx === null || ctx === void 0 ? void 0 : ctx.mapAsMap) ? new Map() : {};
        if (ctx === null || ctx === void 0 ? void 0 : ctx.onCreate)
            ctx.onCreate(map);
        for (const item of this.items)
            addPairToJSMap.addPairToJSMap(ctx, map, item);
        return map;
    }
    toString(ctx, onComment, onChompKeep) {
        if (!ctx)
            return JSON.stringify(this);
        for (const item of this.items) {
            if (!Node.isPair(item))
                throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);
        }
        if (!ctx.allNullValues && this.hasAllNullValues(false))
            ctx = Object.assign({}, ctx, { allNullValues: true });
        return stringifyCollection.stringifyCollection(this, ctx, {
            blockItemPrefix: '',
            flowChars: { start: '{', end: '}' },
            itemIndent: ctx.indent || '',
            onChompKeep,
            onComment
        });
    }
}

exports.YAMLMap = YAMLMap;
exports.findPair = findPair;
'use strict';

var stringifyCollection = require('../stringify/stringifyCollection.js');
var Collection = require('./Collection.js');
var Node = require('./Node.js');
var Scalar = require('./Scalar.js');
var toJS = require('./toJS.js');

class YAMLSeq extends Collection.Collection {
    constructor(schema) {
        super(Node.SEQ, schema);
        this.items = [];
    }
    static get tagName() {
        return 'tag:yaml.org,2002:seq';
    }
    add(value) {
        this.items.push(value);
    }
    /**
     * Removes a value from the collection.
     *
     * `key` must contain a representation of an integer for this to succeed.
     * It may be wrapped in a `Scalar`.
     *
     * @returns `true` if the item was found and removed.
     */
    delete(key) {
        const idx = asItemIndex(key);
        if (typeof idx !== 'number')
            return false;
        const del = this.items.splice(idx, 1);
        return del.length > 0;
    }
    /**
     * Returns item at `key`, or `undefined` if not found. By default unwraps
     * scalar values from their surrounding node; to disable set `keepScalar` to
     * `true` (collections are always returned intact).
     *
     * `key` must contain a representation of an integer for this to succeed.
     * It may be wrapped in a `Scalar`.
     */
    get(key, keepScalar) {
        const idx = asItemIndex(key);
        if (typeof idx !== 'number')
            return undefined;
        const it = this.items[idx];
        return !keepScalar && Node.isScalar(it) ? it.value : it;
    }
    /**
     * Checks if the collection includes a value with the key `key`.
     *
     * `key` must contain a representation of an integer for this to succeed.
     * It may be wrapped in a `Scalar`.
     */
    has(key) {
        const idx = asItemIndex(key);
        return typeof idx === 'number' && idx < this.items.length;
    }
    /**
     * Sets a value in this collection. For `!!set`, `value` needs to be a
     * boolean to add/remove the item from the set.
     *
     * If `key` does not contain a representation of an integer, this will throw.
     * It may be wrapped in a `Scalar`.
     */
    set(key, value) {
        const idx = asItemIndex(key);
        if (typeof idx !== 'number')
            throw new Error(`Expected a valid index, not ${key}.`);
        const prev = this.items[idx];
        if (Node.isScalar(prev) && Scalar.isScalarValue(value))
            prev.value = value;
        else
            this.items[idx] = value;
    }
    toJSON(_, ctx) {
        const seq = [];
        if (ctx === null || ctx === void 0 ? void 0 : ctx.onCreate)
            ctx.onCreate(seq);
        let i = 0;
        for (const item of this.items)
            seq.push(toJS.toJS(item, String(i++), ctx));
        return seq;
    }
    toString(ctx, onComment, onChompKeep) {
        if (!ctx)
            return JSON.stringify(this);
        return stringifyCollection.stringifyCollection(this, ctx, {
            blockItemPrefix: '- ',
            flowChars: { start: '[', end: ']' },
            itemIndent: (ctx.indent || '') + '  ',
            onChompKeep,
            onComment
        });
    }
}
function asItemIndex(key) {
    let idx = Node.isScalar(key) ? key.value : key;
    if (idx && typeof idx === 'string')
        idx = Number(idx);
    return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0
        ? idx
        : null;
}

exports.YAMLSeq = YAMLSeq;
'use strict';

var resolveBlockScalar = require('../compose/resolve-block-scalar.js');
var resolveFlowScalar = require('../compose/resolve-flow-scalar.js');
var errors = require('../errors.js');
var stringifyString = require('../stringify/stringifyString.js');

function resolveAsScalar(token, strict = true, onError) {
    if (token) {
        const _onError = (pos, code, message) => {
            const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;
            if (onError)
                onError(offset, code, message);
            else
                throw new errors.YAMLParseError([offset, offset + 1], code, message);
        };
        switch (token.type) {
            case 'scalar':
            case 'single-quoted-scalar':
            case 'double-quoted-scalar':
                return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);
            case 'block-scalar':
                return resolveBlockScalar.resolveBlockScalar(token, strict, _onError);
        }
    }
    return null;
}
/**
 * Create a new scalar token with `value`
 *
 * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,
 * as this function does not support any schema operations and won't check for such conflicts.
 *
 * @param value The string representation of the value, which will have its content properly indented.
 * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.
 * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.
 * @param context.indent The indent level of the token.
 * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.
 * @param context.offset The offset position of the token.
 * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.
 */
function createScalarToken(value, context) {
    var _a;
    const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;
    const source = stringifyString.stringifyString({ type, value }, {
        implicitKey,
        indent: indent > 0 ? ' '.repeat(indent) : '',
        inFlow,
        options: { blockQuote: true, lineWidth: -1 }
    });
    const end = (_a = context.end) !== null && _a !== void 0 ? _a : [
        { type: 'newline', offset: -1, indent, source: '\n' }
    ];
    switch (source[0]) {
        case '|':
        case '>': {
            const he = source.indexOf('\n');
            const head = source.substring(0, he);
            const body = source.substring(he + 1) + '\n';
            const props = [
                { type: 'block-scalar-header', offset, indent, source: head }
            ];
            if (!addEndtoBlockProps(props, end))
                props.push({ type: 'newline', offset: -1, indent, source: '\n' });
            return { type: 'block-scalar', offset, indent, props, source: body };
        }
        case '"':
            return { type: 'double-quoted-scalar', offset, indent, source, end };
        case "'":
            return { type: 'single-quoted-scalar', offset, indent, source, end };
        default:
            return { type: 'scalar', offset, indent, source, end };
    }
}
/**
 * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.
 *
 * Best efforts are made to retain any comments previously associated with the `token`,
 * though all contents within a collection's `items` will be overwritten.
 *
 * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,
 * as this function does not support any schema operations and won't check for such conflicts.
 *
 * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.
 * @param value The string representation of the value, which will have its content properly indented.
 * @param context.afterKey In most cases, values after a key should have an additional level of indentation.
 * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.
 * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.
 * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.
 */
function setScalarValue(token, value, context = {}) {
    let { afterKey = false, implicitKey = false, inFlow = false, type } = context;
    let indent = 'indent' in token ? token.indent : null;
    if (afterKey && typeof indent === 'number')
        indent += 2;
    if (!type)
        switch (token.type) {
            case 'single-quoted-scalar':
                type = 'QUOTE_SINGLE';
                break;
            case 'double-quoted-scalar':
                type = 'QUOTE_DOUBLE';
                break;
            case 'block-scalar': {
                const header = token.props[0];
                if (header.type !== 'block-scalar-header')
                    throw new Error('Invalid block scalar header');
                type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';
                break;
            }
            default:
                type = 'PLAIN';
        }
    const source = stringifyString.stringifyString({ type, value }, {
        implicitKey: implicitKey || indent === null,
        indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',
        inFlow,
        options: { blockQuote: true, lineWidth: -1 }
    });
    switch (source[0]) {
        case '|':
        case '>':
            setBlockScalarValue(token, source);
            break;
        case '"':
            setFlowScalarValue(token, source, 'double-quoted-scalar');
            break;
        case "'":
            setFlowScalarValue(token, source, 'single-quoted-scalar');
            break;
        default:
            setFlowScalarValue(token, source, 'scalar');
    }
}
function setBlockScalarValue(token, source) {
    const he = source.indexOf('\n');
    const head = source.substring(0, he);
    const body = source.substring(he + 1) + '\n';
    if (token.type === 'block-scalar') {
        const header = token.props[0];
        if (header.type !== 'block-scalar-header')
            throw new Error('Invalid block scalar header');
        header.source = head;
        token.source = body;
    }
    else {
        const { offset } = token;
        const indent = 'indent' in token ? token.indent : -1;
        const props = [
            { type: 'block-scalar-header', offset, indent, source: head }
        ];
        if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))
            props.push({ type: 'newline', offset: -1, indent, source: '\n' });
        for (const key of Object.keys(token))
            if (key !== 'type' && key !== 'offset')
                delete token[key];
        Object.assign(token, { type: 'block-scalar', indent, props, source: body });
    }
}
/** @returns `true` if last token is a newline */
function addEndtoBlockProps(props, end) {
    if (end)
        for (const st of end)
            switch (st.type) {
                case 'space':
                case 'comment':
                    props.push(st);
                    break;
                case 'newline':
                    props.push(st);
                    return true;
            }
    return false;
}
function setFlowScalarValue(token, source, type) {
    switch (token.type) {
        case 'scalar':
        case 'double-quoted-scalar':
        case 'single-quoted-scalar':
            token.type = type;
            token.source = source;
            break;
        case 'block-scalar': {
            const end = token.props.slice(1);
            let oa = source.length;
            if (token.props[0].type === 'block-scalar-header')
                oa -= token.props[0].source.length;
            for (const tok of end)
                tok.offset += oa;
            delete token.props;
            Object.assign(token, { type, source, end });
            break;
        }
        case 'block-map':
        case 'block-seq': {
            const offset = token.offset + source.length;
            const nl = { type: 'newline', offset, indent: token.indent, source: '\n' };
            delete token.items;
            Object.assign(token, { type, source, end: [nl] });
            break;
        }
        default: {
            const indent = 'indent' in token ? token.indent : -1;
            const end = 'end' in token && Array.isArray(token.end)
                ? token.end.filter(st => st.type === 'space' ||
                    st.type === 'comment' ||
                    st.type === 'newline')
                : [];
            for (const key of Object.keys(token))
                if (key !== 'type' && key !== 'offset')
                    delete token[key];
            Object.assign(token, { type, indent, source, end });
        }
    }
}

exports.createScalarToken = createScalarToken;
exports.resolveAsScalar = resolveAsScalar;
exports.setScalarValue = setScalarValue;
'use strict';

/**
 * Stringify a CST document, token, or collection item
 *
 * Fair warning: This applies no validation whatsoever, and
 * simply concatenates the sources in their logical order.
 */
const stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);
function stringifyToken(token) {
    switch (token.type) {
        case 'block-scalar': {
            let res = '';
            for (const tok of token.props)
                res += stringifyToken(tok);
            return res + token.source;
        }
        case 'block-map':
        case 'block-seq': {
            let res = '';
            for (const item of token.items)
                res += stringifyItem(item);
            return res;
        }
        case 'flow-collection': {
            let res = token.start.source;
            for (const item of token.items)
                res += stringifyItem(item);
            for (const st of token.end)
                res += st.source;
            return res;
        }
        case 'document': {
            let res = stringifyItem(token);
            if (token.end)
                for (const st of token.end)
                    res += st.source;
            return res;
        }
        default: {
            let res = token.source;
            if ('end' in token && token.end)
                for (const st of token.end)
                    res += st.source;
            return res;
        }
    }
}
function stringifyItem({ start, key, sep, value }) {
    let res = '';
    for (const st of start)
        res += st.source;
    if (key)
        res += stringifyToken(key);
    if (sep)
        for (const st of sep)
            res += st.source;
    if (value)
        res += stringifyToken(value);
    return res;
}

exports.stringify = stringify;
'use strict';

const BREAK = Symbol('break visit');
const SKIP = Symbol('skip children');
const REMOVE = Symbol('remove item');
/**
 * Apply a visitor to a CST document or item.
 *
 * Walks through the tree (depth-first) starting from the root, calling a
 * `visitor` function with two arguments when entering each item:
 *   - `item`: The current item, which included the following members:
 *     - `start: SourceToken[]` â€“ Source tokens before the key or value,
 *       possibly including its anchor or tag.
 *     - `key?: Token | null` â€“ Set for pair values. May then be `null`, if
 *       the key before the `:` separator is empty.
 *     - `sep?: SourceToken[]` â€“ Source tokens between the key and the value,
 *       which should include the `:` map value indicator if `value` is set.
 *     - `value?: Token` â€“ The value of a sequence item, or of a map pair.
 *   - `path`: The steps from the root to the current node, as an array of
 *     `['key' | 'value', number]` tuples.
 *
 * The return value of the visitor may be used to control the traversal:
 *   - `undefined` (default): Do nothing and continue
 *   - `visit.SKIP`: Do not visit the children of this token, continue with
 *      next sibling
 *   - `visit.BREAK`: Terminate traversal completely
 *   - `visit.REMOVE`: Remove the current item, then continue with the next one
 *   - `number`: Set the index of the next step. This is useful especially if
 *     the index of the current token has changed.
 *   - `function`: Define the next visitor for this item. After the original
 *     visitor is called on item entry, next visitors are called after handling
 *     a non-empty `key` and when exiting the item.
 */
function visit(cst, visitor) {
    if ('type' in cst && cst.type === 'document')
        cst = { start: cst.start, value: cst.value };
    _visit(Object.freeze([]), cst, visitor);
}
// Without the `as symbol` casts, TS declares these in the `visit`
// namespace using `var`, but then complains about that because
// `unique symbol` must be `const`.
/** Terminate visit traversal completely */
visit.BREAK = BREAK;
/** Do not visit the children of the current item */
visit.SKIP = SKIP;
/** Remove the current item */
visit.REMOVE = REMOVE;
/** Find the item at `path` from `cst` as the root */
visit.itemAtPath = (cst, path) => {
    let item = cst;
    for (const [field, index] of path) {
        const tok = item === null || item === void 0 ? void 0 : item[field];
        if (tok && 'items' in tok) {
            item = tok.items[index];
        }
        else
            return undefined;
    }
    return item;
};
/**
 * Get the immediate parent collection of the item at `path` from `cst` as the root.
 *
 * Throws an error if the collection is not found, which should never happen if the item itself exists.
 */
visit.parentCollection = (cst, path) => {
    const parent = visit.itemAtPath(cst, path.slice(0, -1));
    const field = path[path.length - 1][0];
    const coll = parent === null || parent === void 0 ? void 0 : parent[field];
    if (coll && 'items' in coll)
        return coll;
    throw new Error('Parent collection not found');
};
function _visit(path, item, visitor) {
    let ctrl = visitor(item, path);
    if (typeof ctrl === 'symbol')
        return ctrl;
    for (const field of ['key', 'value']) {
        const token = item[field];
        if (token && 'items' in token) {
            for (let i = 0; i < token.items.length; ++i) {
                const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);
                if (typeof ci === 'number')
                    i = ci - 1;
                else if (ci === BREAK)
                    return BREAK;
                else if (ci === REMOVE) {
                    token.items.splice(i, 1);
                    i -= 1;
                }
            }
            if (typeof ctrl === 'function' && field === 'key')
                ctrl = ctrl(item, path);
        }
    }
    return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;
}

exports.visit = visit;
'use strict';

var cstScalar = require('./cst-scalar.js');
var cstStringify = require('./cst-stringify.js');
var cstVisit = require('./cst-visit.js');

/** The byte order mark */
const BOM = '\u{FEFF}';
/** Start of doc-mode */
const DOCUMENT = '\x02'; // C0: Start of Text
/** Unexpected end of flow-mode */
const FLOW_END = '\x18'; // C0: Cancel
/** Next token is a scalar value */
const SCALAR = '\x1f'; // C0: Unit Separator
/** @returns `true` if `token` is a flow or block collection */
const isCollection = (token) => !!token && 'items' in token;
/** @returns `true` if `token` is a flow or block scalar; not an alias */
const isScalar = (token) => !!token &&
    (token.type === 'scalar' ||
        token.type === 'single-quoted-scalar' ||
        token.type === 'double-quoted-scalar' ||
        token.type === 'block-scalar');
/* istanbul ignore next */
/** Get a printable representation of a lexer token */
function prettyToken(token) {
    switch (token) {
        case BOM:
            return '<BOM>';
        case DOCUMENT:
            return '<DOC>';
        case FLOW_END:
            return '<FLOW_END>';
        case SCALAR:
            return '<SCALAR>';
        default:
            return JSON.stringify(token);
    }
}
/** Identify the type of a lexer token. May return `null` for unknown tokens. */
function tokenType(source) {
    switch (source) {
        case BOM:
            return 'byte-order-mark';
        case DOCUMENT:
            return 'doc-mode';
        case FLOW_END:
            return 'flow-error-end';
        case SCALAR:
            return 'scalar';
        case '---':
            return 'doc-start';
        case '...':
            return 'doc-end';
        case '':
        case '\n':
        case '\r\n':
            return 'newline';
        case '-':
            return 'seq-item-ind';
        case '?':
            return 'explicit-key-ind';
        case ':':
            return 'map-value-ind';
        case '{':
            return 'flow-map-start';
        case '}':
            return 'flow-map-end';
        case '[':
            return 'flow-seq-start';
        case ']':
            return 'flow-seq-end';
        case ',':
            return 'comma';
    }
    switch (source[0]) {
        case ' ':
        case '\t':
            return 'space';
        case '#':
            return 'comment';
        case '%':
            return 'directive-line';
        case '*':
            return 'alias';
        case '&':
            return 'anchor';
        case '!':
            return 'tag';
        case "'":
            return 'single-quoted-scalar';
        case '"':
            return 'double-quoted-scalar';
        case '|':
        case '>':
            return 'block-scalar-header';
    }
    return null;
}

exports.createScalarToken = cstScalar.createScalarToken;
exports.resolveAsScalar = cstScalar.resolveAsScalar;
exports.setScalarValue = cstScalar.setScalarValue;
exports.stringify = cstStringify.stringify;
exports.visit = cstVisit.visit;
exports.BOM = BOM;
exports.DOCUMENT = DOCUMENT;
exports.FLOW_END = FLOW_END;
exports.SCALAR = SCALAR;
exports.isCollection = isCollection;
exports.isScalar = isScalar;
exports.prettyToken = prettyToken;
exports.tokenType = tokenType;
'use strict';

var cst = require('./cst.js');

/*
START -> stream

stream
  directive -> line-end -> stream
  indent + line-end -> stream
  [else] -> line-start

line-end
  comment -> line-end
  newline -> .
  input-end -> END

line-start
  doc-start -> doc
  doc-end -> stream
  [else] -> indent -> block-start

block-start
  seq-item-start -> block-start
  explicit-key-start -> block-start
  map-value-start -> block-start
  [else] -> doc

doc
  line-end -> line-start
  spaces -> doc
  anchor -> doc
  tag -> doc
  flow-start -> flow -> doc
  flow-end -> error -> doc
  seq-item-start -> error -> doc
  explicit-key-start -> error -> doc
  map-value-start -> doc
  alias -> doc
  quote-start -> quoted-scalar -> doc
  block-scalar-header -> line-end -> block-scalar(min) -> line-start
  [else] -> plain-scalar(false, min) -> doc

flow
  line-end -> flow
  spaces -> flow
  anchor -> flow
  tag -> flow
  flow-start -> flow -> flow
  flow-end -> .
  seq-item-start -> error -> flow
  explicit-key-start -> flow
  map-value-start -> flow
  alias -> flow
  quote-start -> quoted-scalar -> flow
  comma -> flow
  [else] -> plain-scalar(true, 0) -> flow

quoted-scalar
  quote-end -> .
  [else] -> quoted-scalar

block-scalar(min)
  newline + peek(indent < min) -> .
  [else] -> block-scalar(min)

plain-scalar(is-flow, min)
  scalar-end(is-flow) -> .
  peek(newline + (indent < min)) -> .
  [else] -> plain-scalar(min)
*/
function isEmpty(ch) {
    switch (ch) {
        case undefined:
        case ' ':
        case '\n':
        case '\r':
        case '\t':
            return true;
        default:
            return false;
    }
}
const hexDigits = '0123456789ABCDEFabcdef'.split('');
const tagChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()".split('');
const invalidFlowScalarChars = ',[]{}'.split('');
const invalidAnchorChars = ' ,[]{}\n\r\t'.split('');
const isNotAnchorChar = (ch) => !ch || invalidAnchorChars.includes(ch);
/**
 * Splits an input string into lexical tokens, i.e. smaller strings that are
 * easily identifiable by `tokens.tokenType()`.
 *
 * Lexing starts always in a "stream" context. Incomplete input may be buffered
 * until a complete token can be emitted.
 *
 * In addition to slices of the original input, the following control characters
 * may also be emitted:
 *
 * - `\x02` (Start of Text): A document starts with the next token
 * - `\x18` (Cancel): Unexpected end of flow-mode (indicates an error)
 * - `\x1f` (Unit Separator): Next token is a scalar value
 * - `\u{FEFF}` (Byte order mark): Emitted separately outside documents
 */
class Lexer {
    constructor() {
        /**
         * Flag indicating whether the end of the current buffer marks the end of
         * all input
         */
        this.atEnd = false;
        /**
         * Explicit indent set in block scalar header, as an offset from the current
         * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not
         * explicitly set.
         */
        this.blockScalarIndent = -1;
        /**
         * Block scalars that include a + (keep) chomping indicator in their header
         * include trailing empty lines, which are otherwise excluded from the
         * scalar's contents.
         */
        this.blockScalarKeep = false;
        /** Current input */
        this.buffer = '';
        /**
         * Flag noting whether the map value indicator : can immediately follow this
         * node within a flow context.
         */
        this.flowKey = false;
        /** Count of surrounding flow collection levels. */
        this.flowLevel = 0;
        /**
         * Minimum level of indentation required for next lines to be parsed as a
         * part of the current scalar value.
         */
        this.indentNext = 0;
        /** Indentation level of the current line. */
        this.indentValue = 0;
        /** Position of the next \n character. */
        this.lineEndPos = null;
        /** Stores the state of the lexer if reaching the end of incpomplete input */
        this.next = null;
        /** A pointer to `buffer`; the current position of the lexer. */
        this.pos = 0;
    }
    /**
     * Generate YAML tokens from the `source` string. If `incomplete`,
     * a part of the last line may be left as a buffer for the next call.
     *
     * @returns A generator of lexical tokens
     */
    *lex(source, incomplete = false) {
        var _a;
        if (source) {
            this.buffer = this.buffer ? this.buffer + source : source;
            this.lineEndPos = null;
        }
        this.atEnd = !incomplete;
        let next = (_a = this.next) !== null && _a !== void 0 ? _a : 'stream';
        while (next && (incomplete || this.hasChars(1)))
            next = yield* this.parseNext(next);
    }
    atLineEnd() {
        let i = this.pos;
        let ch = this.buffer[i];
        while (ch === ' ' || ch === '\t')
            ch = this.buffer[++i];
        if (!ch || ch === '#' || ch === '\n')
            return true;
        if (ch === '\r')
            return this.buffer[i + 1] === '\n';
        return false;
    }
    charAt(n) {
        return this.buffer[this.pos + n];
    }
    continueScalar(offset) {
        let ch = this.buffer[offset];
        if (this.indentNext > 0) {
            let indent = 0;
            while (ch === ' ')
                ch = this.buffer[++indent + offset];
            if (ch === '\r') {
                const next = this.buffer[indent + offset + 1];
                if (next === '\n' || (!next && !this.atEnd))
                    return offset + indent + 1;
            }
            return ch === '\n' || indent >= this.indentNext || (!ch && !this.atEnd)
                ? offset + indent
                : -1;
        }
        if (ch === '-' || ch === '.') {
            const dt = this.buffer.substr(offset, 3);
            if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))
                return -1;
        }
        return offset;
    }
    getLine() {
        let end = this.lineEndPos;
        if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {
            end = this.buffer.indexOf('\n', this.pos);
            this.lineEndPos = end;
        }
        if (end === -1)
            return this.atEnd ? this.buffer.substring(this.pos) : null;
        if (this.buffer[end - 1] === '\r')
            end -= 1;
        return this.buffer.substring(this.pos, end);
    }
    hasChars(n) {
        return this.pos + n <= this.buffer.length;
    }
    setNext(state) {
        this.buffer = this.buffer.substring(this.pos);
        this.pos = 0;
        this.lineEndPos = null;
        this.next = state;
        return null;
    }
    peek(n) {
        return this.buffer.substr(this.pos, n);
    }
    *parseNext(next) {
        switch (next) {
            case 'stream':
                return yield* this.parseStream();
            case 'line-start':
                return yield* this.parseLineStart();
            case 'block-start':
                return yield* this.parseBlockStart();
            case 'doc':
                return yield* this.parseDocument();
            case 'flow':
                return yield* this.parseFlowCollection();
            case 'quoted-scalar':
                return yield* this.parseQuotedScalar();
            case 'block-scalar':
                return yield* this.parseBlockScalar();
            case 'plain-scalar':
                return yield* this.parsePlainScalar();
        }
    }
    *parseStream() {
        let line = this.getLine();
        if (line === null)
            return this.setNext('stream');
        if (line[0] === cst.BOM) {
            yield* this.pushCount(1);
            line = line.substring(1);
        }
        if (line[0] === '%') {
            let dirEnd = line.length;
            const cs = line.indexOf('#');
            if (cs !== -1) {
                const ch = line[cs - 1];
                if (ch === ' ' || ch === '\t')
                    dirEnd = cs - 1;
            }
            while (true) {
                const ch = line[dirEnd - 1];
                if (ch === ' ' || ch === '\t')
                    dirEnd -= 1;
                else
                    break;
            }
            const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));
            yield* this.pushCount(line.length - n); // possible comment
            this.pushNewline();
            return 'stream';
        }
        if (this.atLineEnd()) {
            const sp = yield* this.pushSpaces(true);
            yield* this.pushCount(line.length - sp);
            yield* this.pushNewline();
            return 'stream';
        }
        yield cst.DOCUMENT;
        return yield* this.parseLineStart();
    }
    *parseLineStart() {
        const ch = this.charAt(0);
        if (!ch && !this.atEnd)
            return this.setNext('line-start');
        if (ch === '-' || ch === '.') {
            if (!this.atEnd && !this.hasChars(4))
                return this.setNext('line-start');
            const s = this.peek(3);
            if (s === '---' && isEmpty(this.charAt(3))) {
                yield* this.pushCount(3);
                this.indentValue = 0;
                this.indentNext = 0;
                return 'doc';
            }
            else if (s === '...' && isEmpty(this.charAt(3))) {
                yield* this.pushCount(3);
                return 'stream';
            }
        }
        this.indentValue = yield* this.pushSpaces(false);
        if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))
            this.indentNext = this.indentValue;
        return yield* this.parseBlockStart();
    }
    *parseBlockStart() {
        const [ch0, ch1] = this.peek(2);
        if (!ch1 && !this.atEnd)
            return this.setNext('block-start');
        if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {
            const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));
            this.indentNext = this.indentValue + 1;
            this.indentValue += n;
            return yield* this.parseBlockStart();
        }
        return 'doc';
    }
    *parseDocument() {
        yield* this.pushSpaces(true);
        const line = this.getLine();
        if (line === null)
            return this.setNext('doc');
        let n = yield* this.pushIndicators();
        switch (line[n]) {
            case '#':
                yield* this.pushCount(line.length - n);
            // fallthrough
            case undefined:
                yield* this.pushNewline();
                return yield* this.parseLineStart();
            case '{':
            case '[':
                yield* this.pushCount(1);
                this.flowKey = false;
                this.flowLevel = 1;
                return 'flow';
            case '}':
            case ']':
                // this is an error
                yield* this.pushCount(1);
                return 'doc';
            case '*':
                yield* this.pushUntil(isNotAnchorChar);
                return 'doc';
            case '"':
            case "'":
                return yield* this.parseQuotedScalar();
            case '|':
            case '>':
                n += yield* this.parseBlockScalarHeader();
                n += yield* this.pushSpaces(true);
                yield* this.pushCount(line.length - n);
                yield* this.pushNewline();
                return yield* this.parseBlockScalar();
            default:
                return yield* this.parsePlainScalar();
        }
    }
    *parseFlowCollection() {
        let nl, sp;
        let indent = -1;
        do {
            nl = yield* this.pushNewline();
            if (nl > 0) {
                sp = yield* this.pushSpaces(false);
                this.indentValue = indent = sp;
            }
            else {
                sp = 0;
            }
            sp += yield* this.pushSpaces(true);
        } while (nl + sp > 0);
        const line = this.getLine();
        if (line === null)
            return this.setNext('flow');
        if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||
            (indent === 0 &&
                (line.startsWith('---') || line.startsWith('...')) &&
                isEmpty(line[3]))) {
            // Allowing for the terminal ] or } at the same (rather than greater)
            // indent level as the initial [ or { is technically invalid, but
            // failing here would be surprising to users.
            const atFlowEndMarker = indent === this.indentNext - 1 &&
                this.flowLevel === 1 &&
                (line[0] === ']' || line[0] === '}');
            if (!atFlowEndMarker) {
                // this is an error
                this.flowLevel = 0;
                yield cst.FLOW_END;
                return yield* this.parseLineStart();
            }
        }
        let n = 0;
        while (line[n] === ',') {
            n += yield* this.pushCount(1);
            n += yield* this.pushSpaces(true);
            this.flowKey = false;
        }
        n += yield* this.pushIndicators();
        switch (line[n]) {
            case undefined:
                return 'flow';
            case '#':
                yield* this.pushCount(line.length - n);
                return 'flow';
            case '{':
            case '[':
                yield* this.pushCount(1);
                this.flowKey = false;
                this.flowLevel += 1;
                return 'flow';
            case '}':
            case ']':
                yield* this.pushCount(1);
                this.flowKey = true;
                this.flowLevel -= 1;
                return this.flowLevel ? 'flow' : 'doc';
            case '*':
                yield* this.pushUntil(isNotAnchorChar);
                return 'flow';
            case '"':
            case "'":
                this.flowKey = true;
                return yield* this.parseQuotedScalar();
            case ':': {
                const next = this.charAt(1);
                if (this.flowKey || isEmpty(next) || next === ',') {
                    this.flowKey = false;
                    yield* this.pushCount(1);
                    yield* this.pushSpaces(true);
                    return 'flow';
                }
            }
            // fallthrough
            default:
                this.flowKey = false;
                return yield* this.parsePlainScalar();
        }
    }
    *parseQuotedScalar() {
        const quote = this.charAt(0);
        let end = this.buffer.indexOf(quote, this.pos + 1);
        if (quote === "'") {
            while (end !== -1 && this.buffer[end + 1] === "'")
                end = this.buffer.indexOf("'", end + 2);
        }
        else {
            // double-quote
            while (end !== -1) {
                let n = 0;
                while (this.buffer[end - 1 - n] === '\\')
                    n += 1;
                if (n % 2 === 0)
                    break;
                end = this.buffer.indexOf('"', end + 1);
            }
        }
        // Only looking for newlines within the quotes
        const qb = this.buffer.substring(0, end);
        let nl = qb.indexOf('\n', this.pos);
        if (nl !== -1) {
            while (nl !== -1) {
                const cs = this.continueScalar(nl + 1);
                if (cs === -1)
                    break;
                nl = qb.indexOf('\n', cs);
            }
            if (nl !== -1) {
                // this is an error caused by an unexpected unindent
                end = nl - (qb[nl - 1] === '\r' ? 2 : 1);
            }
        }
        if (end === -1) {
            if (!this.atEnd)
                return this.setNext('quoted-scalar');
            end = this.buffer.length;
        }
        yield* this.pushToIndex(end + 1, false);
        return this.flowLevel ? 'flow' : 'doc';
    }
    *parseBlockScalarHeader() {
        this.blockScalarIndent = -1;
        this.blockScalarKeep = false;
        let i = this.pos;
        while (true) {
            const ch = this.buffer[++i];
            if (ch === '+')
                this.blockScalarKeep = true;
            else if (ch > '0' && ch <= '9')
                this.blockScalarIndent = Number(ch) - 1;
            else if (ch !== '-')
                break;
        }
        return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');
    }
    *parseBlockScalar() {
        let nl = this.pos - 1; // may be -1 if this.pos === 0
        let indent = 0;
        let ch;
        loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {
            switch (ch) {
                case ' ':
                    indent += 1;
                    break;
                case '\n':
                    nl = i;
                    indent = 0;
                    break;
                case '\r': {
                    const next = this.buffer[i + 1];
                    if (!next && !this.atEnd)
                        return this.setNext('block-scalar');
                    if (next === '\n')
                        break;
                } // fallthrough
                default:
                    break loop;
            }
        }
        if (!ch && !this.atEnd)
            return this.setNext('block-scalar');
        if (indent >= this.indentNext) {
            if (this.blockScalarIndent === -1)
                this.indentNext = indent;
            else
                this.indentNext += this.blockScalarIndent;
            do {
                const cs = this.continueScalar(nl + 1);
                if (cs === -1)
                    break;
                nl = this.buffer.indexOf('\n', cs);
            } while (nl !== -1);
            if (nl === -1) {
                if (!this.atEnd)
                    return this.setNext('block-scalar');
                nl = this.buffer.length;
            }
        }
        if (!this.blockScalarKeep) {
            do {
                let i = nl - 1;
                let ch = this.buffer[i];
                if (ch === '\r')
                    ch = this.buffer[--i];
                const lastChar = i; // Drop the line if last char not more indented
                while (ch === ' ' || ch === '\t')
                    ch = this.buffer[--i];
                if (ch === '\n' && i >= this.pos && i + 1 + indent > lastChar)
                    nl = i;
                else
                    break;
            } while (true);
        }
        yield cst.SCALAR;
        yield* this.pushToIndex(nl + 1, true);
        return yield* this.parseLineStart();
    }
    *parsePlainScalar() {
        const inFlow = this.flowLevel > 0;
        let end = this.pos - 1;
        let i = this.pos - 1;
        let ch;
        while ((ch = this.buffer[++i])) {
            if (ch === ':') {
                const next = this.buffer[i + 1];
                if (isEmpty(next) || (inFlow && next === ','))
                    break;
                end = i;
            }
            else if (isEmpty(ch)) {
                let next = this.buffer[i + 1];
                if (ch === '\r') {
                    if (next === '\n') {
                        i += 1;
                        ch = '\n';
                        next = this.buffer[i + 1];
                    }
                    else
                        end = i;
                }
                if (next === '#' || (inFlow && invalidFlowScalarChars.includes(next)))
                    break;
                if (ch === '\n') {
                    const cs = this.continueScalar(i + 1);
                    if (cs === -1)
                        break;
                    i = Math.max(i, cs - 2); // to advance, but still account for ' #'
                }
            }
            else {
                if (inFlow && invalidFlowScalarChars.includes(ch))
                    break;
                end = i;
            }
        }
        if (!ch && !this.atEnd)
            return this.setNext('plain-scalar');
        yield cst.SCALAR;
        yield* this.pushToIndex(end + 1, true);
        return inFlow ? 'flow' : 'doc';
    }
    *pushCount(n) {
        if (n > 0) {
            yield this.buffer.substr(this.pos, n);
            this.pos += n;
            return n;
        }
        return 0;
    }
    *pushToIndex(i, allowEmpty) {
        const s = this.buffer.slice(this.pos, i);
        if (s) {
            yield s;
            this.pos += s.length;
            return s.length;
        }
        else if (allowEmpty)
            yield '';
        return 0;
    }
    *pushIndicators() {
        switch (this.charAt(0)) {
            case '!':
                return ((yield* this.pushTag()) +
                    (yield* this.pushSpaces(true)) +
                    (yield* this.pushIndicators()));
            case '&':
                return ((yield* this.pushUntil(isNotAnchorChar)) +
                    (yield* this.pushSpaces(true)) +
                    (yield* this.pushIndicators()));
            case '-': // this is an error
            case '?': // this is an error outside flow collections
            case ':': {
                const inFlow = this.flowLevel > 0;
                const ch1 = this.charAt(1);
                if (isEmpty(ch1) || (inFlow && invalidFlowScalarChars.includes(ch1))) {
                    if (!inFlow)
                        this.indentNext = this.indentValue + 1;
                    else if (this.flowKey)
                        this.flowKey = false;
                    return ((yield* this.pushCount(1)) +
                        (yield* this.pushSpaces(true)) +
                        (yield* this.pushIndicators()));
                }
            }
        }
        return 0;
    }
    *pushTag() {
        if (this.charAt(1) === '<') {
            let i = this.pos + 2;
            let ch = this.buffer[i];
            while (!isEmpty(ch) && ch !== '>')
                ch = this.buffer[++i];
            return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);
        }
        else {
            let i = this.pos + 1;
            let ch = this.buffer[i];
            while (ch) {
                if (tagChars.includes(ch))
                    ch = this.buffer[++i];
                else if (ch === '%' &&
                    hexDigits.includes(this.buffer[i + 1]) &&
                    hexDigits.includes(this.buffer[i + 2])) {
                    ch = this.buffer[(i += 3)];
                }
                else
                    break;
            }
            return yield* this.pushToIndex(i, false);
        }
    }
    *pushNewline() {
        const ch = this.buffer[this.pos];
        if (ch === '\n')
            return yield* this.pushCount(1);
        else if (ch === '\r' && this.charAt(1) === '\n')
            return yield* this.pushCount(2);
        else
            return 0;
    }
    *pushSpaces(allowTabs) {
        let i = this.pos - 1;
        let ch;
        do {
            ch = this.buffer[++i];
        } while (ch === ' ' || (allowTabs && ch === '\t'));
        const n = i - this.pos;
        if (n > 0) {
            yield this.buffer.substr(this.pos, n);
            this.pos = i;
        }
        return n;
    }
    *pushUntil(test) {
        let i = this.pos;
        let ch = this.buffer[i];
        while (!test(ch))
            ch = this.buffer[++i];
        return yield* this.pushToIndex(i, false);
    }
}

exports.Lexer = Lexer;
'use strict';

/**
 * Tracks newlines during parsing in order to provide an efficient API for
 * determining the one-indexed `{ line, col }` position for any offset
 * within the input.
 */
class LineCounter {
    constructor() {
        this.lineStarts = [];
        /**
         * Should be called in ascending order. Otherwise, call
         * `lineCounter.lineStarts.sort()` before calling `linePos()`.
         */
        this.addNewLine = (offset) => this.lineStarts.push(offset);
        /**
         * Performs a binary search and returns the 1-indexed { line, col }
         * position of `offset`. If `line === 0`, `addNewLine` has never been
         * called or `offset` is before the first known newline.
         */
        this.linePos = (offset) => {
            let low = 0;
            let high = this.lineStarts.length;
            while (low < high) {
                const mid = (low + high) >> 1; // Math.floor((low + high) / 2)
                if (this.lineStarts[mid] < offset)
                    low = mid + 1;
                else
                    high = mid;
            }
            if (this.lineStarts[low] === offset)
                return { line: low + 1, col: 1 };
            if (low === 0)
                return { line: 0, col: offset };
            const start = this.lineStarts[low - 1];
            return { line: low, col: offset - start + 1 };
        };
    }
}

exports.LineCounter = LineCounter;
'use strict';

var cst = require('./cst.js');
var lexer = require('./lexer.js');

function includesToken(list, type) {
    for (let i = 0; i < list.length; ++i)
        if (list[i].type === type)
            return true;
    return false;
}
function findNonEmptyIndex(list) {
    for (let i = 0; i < list.length; ++i) {
        switch (list[i].type) {
            case 'space':
            case 'comment':
            case 'newline':
                break;
            default:
                return i;
        }
    }
    return -1;
}
function isFlowToken(token) {
    switch (token === null || token === void 0 ? void 0 : token.type) {
        case 'alias':
        case 'scalar':
        case 'single-quoted-scalar':
        case 'double-quoted-scalar':
        case 'flow-collection':
            return true;
        default:
            return false;
    }
}
function getPrevProps(parent) {
    var _a;
    switch (parent.type) {
        case 'document':
            return parent.start;
        case 'block-map': {
            const it = parent.items[parent.items.length - 1];
            return (_a = it.sep) !== null && _a !== void 0 ? _a : it.start;
        }
        case 'block-seq':
            return parent.items[parent.items.length - 1].start;
        /* istanbul ignore next should not happen */
        default:
            return [];
    }
}
/** Note: May modify input array */
function getFirstKeyStartProps(prev) {
    var _a;
    if (prev.length === 0)
        return [];
    let i = prev.length;
    loop: while (--i >= 0) {
        switch (prev[i].type) {
            case 'doc-start':
            case 'explicit-key-ind':
            case 'map-value-ind':
            case 'seq-item-ind':
            case 'newline':
                break loop;
        }
    }
    while (((_a = prev[++i]) === null || _a === void 0 ? void 0 : _a.type) === 'space') {
        /* loop */
    }
    return prev.splice(i, prev.length);
}
function fixFlowSeqItems(fc) {
    if (fc.start.type === 'flow-seq-start') {
        for (const it of fc.items) {
            if (it.sep &&
                !it.value &&
                !includesToken(it.start, 'explicit-key-ind') &&
                !includesToken(it.sep, 'map-value-ind')) {
                if (it.key)
                    it.value = it.key;
                delete it.key;
                if (isFlowToken(it.value)) {
                    if (it.value.end)
                        Array.prototype.push.apply(it.value.end, it.sep);
                    else
                        it.value.end = it.sep;
                }
                else
                    Array.prototype.push.apply(it.start, it.sep);
                delete it.sep;
            }
        }
    }
}
/**
 * A YAML concrete syntax tree (CST) parser
 *
 * ```ts
 * const src: string = ...
 * for (const token of new Parser().parse(src)) {
 *   // token: Token
 * }
 * ```
 *
 * To use the parser with a user-provided lexer:
 *
 * ```ts
 * function* parse(source: string, lexer: Lexer) {
 *   const parser = new Parser()
 *   for (const lexeme of lexer.lex(source))
 *     yield* parser.next(lexeme)
 *   yield* parser.end()
 * }
 *
 * const src: string = ...
 * const lexer = new Lexer()
 * for (const token of parse(src, lexer)) {
 *   // token: Token
 * }
 * ```
 */
class Parser {
    /**
     * @param onNewLine - If defined, called separately with the start position of
     *   each new line (in `parse()`, including the start of input).
     */
    constructor(onNewLine) {
        /** If true, space and sequence indicators count as indentation */
        this.atNewLine = true;
        /** If true, next token is a scalar value */
        this.atScalar = false;
        /** Current indentation level */
        this.indent = 0;
        /** Current offset since the start of parsing */
        this.offset = 0;
        /** On the same line with a block map key */
        this.onKeyLine = false;
        /** Top indicates the node that's currently being built */
        this.stack = [];
        /** The source of the current token, set in parse() */
        this.source = '';
        /** The type of the current token, set in parse() */
        this.type = '';
        // Must be defined after `next()`
        this.lexer = new lexer.Lexer();
        this.onNewLine = onNewLine;
    }
    /**
     * Parse `source` as a YAML stream.
     * If `incomplete`, a part of the last line may be left as a buffer for the next call.
     *
     * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.
     *
     * @returns A generator of tokens representing each directive, document, and other structure.
     */
    *parse(source, incomplete = false) {
        if (this.onNewLine && this.offset === 0)
            this.onNewLine(0);
        for (const lexeme of this.lexer.lex(source, incomplete))
            yield* this.next(lexeme);
        if (!incomplete)
            yield* this.end();
    }
    /**
     * Advance the parser by the `source` of one lexical token.
     */
    *next(source) {
        this.source = source;
        if (process.env.LOG_TOKENS)
            console.log('|', cst.prettyToken(source));
        if (this.atScalar) {
            this.atScalar = false;
            yield* this.step();
            this.offset += source.length;
            return;
        }
        const type = cst.tokenType(source);
        if (!type) {
            const message = `Not a YAML token: ${source}`;
            yield* this.pop({ type: 'error', offset: this.offset, message, source });
            this.offset += source.length;
        }
        else if (type === 'scalar') {
            this.atNewLine = false;
            this.atScalar = true;
            this.type = 'scalar';
        }
        else {
            this.type = type;
            yield* this.step();
            switch (type) {
                case 'newline':
                    this.atNewLine = true;
                    this.indent = 0;
                    if (this.onNewLine)
                        this.onNewLine(this.offset + source.length);
                    break;
                case 'space':
                    if (this.atNewLine && source[0] === ' ')
                        this.indent += source.length;
                    break;
                case 'explicit-key-ind':
                case 'map-value-ind':
                case 'seq-item-ind':
                    if (this.atNewLine)
                        this.indent += source.length;
                    break;
                case 'doc-mode':
                case 'flow-error-end':
                    return;
                default:
                    this.atNewLine = false;
            }
            this.offset += source.length;
        }
    }
    /** Call at end of input to push out any remaining constructions */
    *end() {
        while (this.stack.length > 0)
            yield* this.pop();
    }
    get sourceToken() {
        const st = {
            type: this.type,
            offset: this.offset,
            indent: this.indent,
            source: this.source
        };
        return st;
    }
    *step() {
        const top = this.peek(1);
        if (this.type === 'doc-end' && (!top || top.type !== 'doc-end')) {
            while (this.stack.length > 0)
                yield* this.pop();
            this.stack.push({
                type: 'doc-end',
                offset: this.offset,
                source: this.source
            });
            return;
        }
        if (!top)
            return yield* this.stream();
        switch (top.type) {
            case 'document':
                return yield* this.document(top);
            case 'alias':
            case 'scalar':
            case 'single-quoted-scalar':
            case 'double-quoted-scalar':
                return yield* this.scalar(top);
            case 'block-scalar':
                return yield* this.blockScalar(top);
            case 'block-map':
                return yield* this.blockMap(top);
            case 'block-seq':
                return yield* this.blockSequence(top);
            case 'flow-collection':
                return yield* this.flowCollection(top);
            case 'doc-end':
                return yield* this.documentEnd(top);
        }
        /* istanbul ignore next should not happen */
        yield* this.pop();
    }
    peek(n) {
        return this.stack[this.stack.length - n];
    }
    *pop(error) {
        const token = error !== null && error !== void 0 ? error : this.stack.pop();
        /* istanbul ignore if should not happen */
        if (!token) {
            const message = 'Tried to pop an empty stack';
            yield { type: 'error', offset: this.offset, source: '', message };
        }
        else if (this.stack.length === 0) {
            yield token;
        }
        else {
            const top = this.peek(1);
            if (token.type === 'block-scalar') {
                // Block scalars use their parent rather than header indent
                token.indent = 'indent' in top ? top.indent : 0;
            }
            else if (token.type === 'flow-collection' && top.type === 'document') {
                // Ignore all indent for top-level flow collections
                token.indent = 0;
            }
            if (token.type === 'flow-collection')
                fixFlowSeqItems(token);
            switch (top.type) {
                case 'document':
                    top.value = token;
                    break;
                case 'block-scalar':
                    top.props.push(token); // error
                    break;
                case 'block-map': {
                    const it = top.items[top.items.length - 1];
                    if (it.value) {
                        top.items.push({ start: [], key: token, sep: [] });
                        this.onKeyLine = true;
                        return;
                    }
                    else if (it.sep) {
                        it.value = token;
                    }
                    else {
                        Object.assign(it, { key: token, sep: [] });
                        this.onKeyLine = !includesToken(it.start, 'explicit-key-ind');
                        return;
                    }
                    break;
                }
                case 'block-seq': {
                    const it = top.items[top.items.length - 1];
                    if (it.value)
                        top.items.push({ start: [], value: token });
                    else
                        it.value = token;
                    break;
                }
                case 'flow-collection': {
                    const it = top.items[top.items.length - 1];
                    if (!it || it.value)
                        top.items.push({ start: [], key: token, sep: [] });
                    else if (it.sep)
                        it.value = token;
                    else
                        Object.assign(it, { key: token, sep: [] });
                    return;
                }
                /* istanbul ignore next should not happen */
                default:
                    yield* this.pop();
                    yield* this.pop(token);
            }
            if ((top.type === 'document' ||
                top.type === 'block-map' ||
                top.type === 'block-seq') &&
                (token.type === 'block-map' || token.type === 'block-seq')) {
                const last = token.items[token.items.length - 1];
                if (last &&
                    !last.sep &&
                    !last.value &&
                    last.start.length > 0 &&
                    findNonEmptyIndex(last.start) === -1 &&
                    (token.indent === 0 ||
                        last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {
                    if (top.type === 'document')
                        top.end = last.start;
                    else
                        top.items.push({ start: last.start });
                    token.items.splice(-1, 1);
                }
            }
        }
    }
    *stream() {
        switch (this.type) {
            case 'directive-line':
                yield { type: 'directive', offset: this.offset, source: this.source };
                return;
            case 'byte-order-mark':
            case 'space':
            case 'comment':
            case 'newline':
                yield this.sourceToken;
                return;
            case 'doc-mode':
            case 'doc-start': {
                const doc = {
                    type: 'document',
                    offset: this.offset,
                    start: []
                };
                if (this.type === 'doc-start')
                    doc.start.push(this.sourceToken);
                this.stack.push(doc);
                return;
            }
        }
        yield {
            type: 'error',
            offset: this.offset,
            message: `Unexpected ${this.type} token in YAML stream`,
            source: this.source
        };
    }
    *document(doc) {
        if (doc.value)
            return yield* this.lineEnd(doc);
        switch (this.type) {
            case 'doc-start': {
                if (findNonEmptyIndex(doc.start) !== -1) {
                    yield* this.pop();
                    yield* this.step();
                }
                else
                    doc.start.push(this.sourceToken);
                return;
            }
            case 'anchor':
            case 'tag':
            case 'space':
            case 'comment':
            case 'newline':
                doc.start.push(this.sourceToken);
                return;
        }
        const bv = this.startBlockValue(doc);
        if (bv)
            this.stack.push(bv);
        else {
            yield {
                type: 'error',
                offset: this.offset,
                message: `Unexpected ${this.type} token in YAML document`,
                source: this.source
            };
        }
    }
    *scalar(scalar) {
        if (this.type === 'map-value-ind') {
            const prev = getPrevProps(this.peek(2));
            const start = getFirstKeyStartProps(prev);
            let sep;
            if (scalar.end) {
                sep = scalar.end;
                sep.push(this.sourceToken);
                delete scalar.end;
            }
            else
                sep = [this.sourceToken];
            const map = {
                type: 'block-map',
                offset: scalar.offset,
                indent: scalar.indent,
                items: [{ start, key: scalar, sep }]
            };
            this.onKeyLine = true;
            this.stack[this.stack.length - 1] = map;
        }
        else
            yield* this.lineEnd(scalar);
    }
    *blockScalar(scalar) {
        switch (this.type) {
            case 'space':
            case 'comment':
            case 'newline':
                scalar.props.push(this.sourceToken);
                return;
            case 'scalar':
                scalar.source = this.source;
                // block-scalar source includes trailing newline
                this.atNewLine = true;
                this.indent = 0;
                if (this.onNewLine) {
                    let nl = this.source.indexOf('\n') + 1;
                    while (nl !== 0) {
                        this.onNewLine(this.offset + nl);
                        nl = this.source.indexOf('\n', nl) + 1;
                    }
                }
                yield* this.pop();
                break;
            /* istanbul ignore next should not happen */
            default:
                yield* this.pop();
                yield* this.step();
        }
    }
    *blockMap(map) {
        var _a;
        const it = map.items[map.items.length - 1];
        // it.sep is true-ish if pair already has key or : separator
        switch (this.type) {
            case 'newline':
                this.onKeyLine = false;
                if (it.value) {
                    const end = 'end' in it.value ? it.value.end : undefined;
                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;
                    if ((last === null || last === void 0 ? void 0 : last.type) === 'comment')
                        end === null || end === void 0 ? void 0 : end.push(this.sourceToken);
                    else
                        map.items.push({ start: [this.sourceToken] });
                }
                else if (it.sep) {
                    it.sep.push(this.sourceToken);
                }
                else {
                    it.start.push(this.sourceToken);
                }
                return;
            case 'space':
            case 'comment':
                if (it.value) {
                    map.items.push({ start: [this.sourceToken] });
                }
                else if (it.sep) {
                    it.sep.push(this.sourceToken);
                }
                else {
                    if (this.atIndentedComment(it.start, map.indent)) {
                        const prev = map.items[map.items.length - 2];
                        const end = (_a = prev === null || prev === void 0 ? void 0 : prev.value) === null || _a === void 0 ? void 0 : _a.end;
                        if (Array.isArray(end)) {
                            Array.prototype.push.apply(end, it.start);
                            end.push(this.sourceToken);
                            map.items.pop();
                            return;
                        }
                    }
                    it.start.push(this.sourceToken);
                }
                return;
        }
        if (this.indent >= map.indent) {
            const atNextItem = !this.onKeyLine && this.indent === map.indent && it.sep;
            // For empty nodes, assign newline-separated not indented empty tokens to following node
            let start = [];
            if (atNextItem && it.sep && !it.value) {
                const nl = [];
                for (let i = 0; i < it.sep.length; ++i) {
                    const st = it.sep[i];
                    switch (st.type) {
                        case 'newline':
                            nl.push(i);
                            break;
                        case 'space':
                            break;
                        case 'comment':
                            if (st.indent > map.indent)
                                nl.length = 0;
                            break;
                        default:
                            nl.length = 0;
                    }
                }
                if (nl.length >= 2)
                    start = it.sep.splice(nl[1]);
            }
            switch (this.type) {
                case 'anchor':
                case 'tag':
                    if (atNextItem || it.value) {
                        start.push(this.sourceToken);
                        map.items.push({ start });
                        this.onKeyLine = true;
                    }
                    else if (it.sep) {
                        it.sep.push(this.sourceToken);
                    }
                    else {
                        it.start.push(this.sourceToken);
                    }
                    return;
                case 'explicit-key-ind':
                    if (!it.sep && !includesToken(it.start, 'explicit-key-ind')) {
                        it.start.push(this.sourceToken);
                    }
                    else if (atNextItem || it.value) {
                        start.push(this.sourceToken);
                        map.items.push({ start });
                    }
                    else {
                        this.stack.push({
                            type: 'block-map',
                            offset: this.offset,
                            indent: this.indent,
                            items: [{ start: [this.sourceToken] }]
                        });
                    }
                    this.onKeyLine = true;
                    return;
                case 'map-value-ind':
                    if (includesToken(it.start, 'explicit-key-ind')) {
                        if (!it.sep) {
                            if (includesToken(it.start, 'newline')) {
                                Object.assign(it, { key: null, sep: [this.sourceToken] });
                            }
                            else {
                                const start = getFirstKeyStartProps(it.start);
                                this.stack.push({
                                    type: 'block-map',
                                    offset: this.offset,
                                    indent: this.indent,
                                    items: [{ start, key: null, sep: [this.sourceToken] }]
                                });
                            }
                        }
                        else if (it.value) {
                            map.items.push({ start: [], key: null, sep: [this.sourceToken] });
                        }
                        else if (includesToken(it.sep, 'map-value-ind')) {
                            this.stack.push({
                                type: 'block-map',
                                offset: this.offset,
                                indent: this.indent,
                                items: [{ start, key: null, sep: [this.sourceToken] }]
                            });
                        }
                        else if (isFlowToken(it.key) &&
                            !includesToken(it.sep, 'newline')) {
                            const start = getFirstKeyStartProps(it.start);
                            const key = it.key;
                            const sep = it.sep;
                            sep.push(this.sourceToken);
                            // @ts-expect-error type guard is wrong here
                            delete it.key, delete it.sep;
                            this.stack.push({
                                type: 'block-map',
                                offset: this.offset,
                                indent: this.indent,
                                items: [{ start, key, sep }]
                            });
                        }
                        else if (start.length > 0) {
                            // Not actually at next item
                            it.sep = it.sep.concat(start, this.sourceToken);
                        }
                        else {
                            it.sep.push(this.sourceToken);
                        }
                    }
                    else {
                        if (!it.sep) {
                            Object.assign(it, { key: null, sep: [this.sourceToken] });
                        }
                        else if (it.value || atNextItem) {
                            map.items.push({ start, key: null, sep: [this.sourceToken] });
                        }
                        else if (includesToken(it.sep, 'map-value-ind')) {
                            this.stack.push({
                                type: 'block-map',
                                offset: this.offset,
                                indent: this.indent,
                                items: [{ start: [], key: null, sep: [this.sourceToken] }]
                            });
                        }
                        else {
                            it.sep.push(this.sourceToken);
                        }
                    }
                    this.onKeyLine = true;
                    return;
                case 'alias':
                case 'scalar':
                case 'single-quoted-scalar':
                case 'double-quoted-scalar': {
                    const fs = this.flowScalar(this.type);
                    if (atNextItem || it.value) {
                        map.items.push({ start, key: fs, sep: [] });
                        this.onKeyLine = true;
                    }
                    else if (it.sep) {
                        this.stack.push(fs);
                    }
                    else {
                        Object.assign(it, { key: fs, sep: [] });
                        this.onKeyLine = true;
                    }
                    return;
                }
                default: {
                    const bv = this.startBlockValue(map);
                    if (bv) {
                        if (atNextItem &&
                            bv.type !== 'block-seq' &&
                            includesToken(it.start, 'explicit-key-ind')) {
                            map.items.push({ start });
                        }
                        this.stack.push(bv);
                        return;
                    }
                }
            }
        }
        yield* this.pop();
        yield* this.step();
    }
    *blockSequence(seq) {
        var _a;
        const it = seq.items[seq.items.length - 1];
        switch (this.type) {
            case 'newline':
                if (it.value) {
                    const end = 'end' in it.value ? it.value.end : undefined;
                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;
                    if ((last === null || last === void 0 ? void 0 : last.type) === 'comment')
                        end === null || end === void 0 ? void 0 : end.push(this.sourceToken);
                    else
                        seq.items.push({ start: [this.sourceToken] });
                }
                else
                    it.start.push(this.sourceToken);
                return;
            case 'space':
            case 'comment':
                if (it.value)
                    seq.items.push({ start: [this.sourceToken] });
                else {
                    if (this.atIndentedComment(it.start, seq.indent)) {
                        const prev = seq.items[seq.items.length - 2];
                        const end = (_a = prev === null || prev === void 0 ? void 0 : prev.value) === null || _a === void 0 ? void 0 : _a.end;
                        if (Array.isArray(end)) {
                            Array.prototype.push.apply(end, it.start);
                            end.push(this.sourceToken);
                            seq.items.pop();
                            return;
                        }
                    }
                    it.start.push(this.sourceToken);
                }
                return;
            case 'anchor':
            case 'tag':
                if (it.value || this.indent <= seq.indent)
                    break;
                it.start.push(this.sourceToken);
                return;
            case 'seq-item-ind':
                if (this.indent !== seq.indent)
                    break;
                if (it.value || includesToken(it.start, 'seq-item-ind'))
                    seq.items.push({ start: [this.sourceToken] });
                else
                    it.start.push(this.sourceToken);
                return;
        }
        if (this.indent > seq.indent) {
            const bv = this.startBlockValue(seq);
            if (bv) {
                this.stack.push(bv);
                return;
            }
        }
        yield* this.pop();
        yield* this.step();
    }
    *flowCollection(fc) {
        const it = fc.items[fc.items.length - 1];
        if (this.type === 'flow-error-end') {
            let top;
            do {
                yield* this.pop();
                top = this.peek(1);
            } while (top && top.type === 'flow-collection');
        }
        else if (fc.end.length === 0) {
            switch (this.type) {
                case 'comma':
                case 'explicit-key-ind':
                    if (!it || it.sep)
                        fc.items.push({ start: [this.sourceToken] });
                    else
                        it.start.push(this.sourceToken);
                    return;
                case 'map-value-ind':
                    if (!it || it.value)
                        fc.items.push({ start: [], key: null, sep: [this.sourceToken] });
                    else if (it.sep)
                        it.sep.push(this.sourceToken);
                    else
                        Object.assign(it, { key: null, sep: [this.sourceToken] });
                    return;
                case 'space':
                case 'comment':
                case 'newline':
                case 'anchor':
                case 'tag':
                    if (!it || it.value)
                        fc.items.push({ start: [this.sourceToken] });
                    else if (it.sep)
                        it.sep.push(this.sourceToken);
                    else
                        it.start.push(this.sourceToken);
                    return;
                case 'alias':
                case 'scalar':
                case 'single-quoted-scalar':
                case 'double-quoted-scalar': {
                    const fs = this.flowScalar(this.type);
                    if (!it || it.value)
                        fc.items.push({ start: [], key: fs, sep: [] });
                    else if (it.sep)
                        this.stack.push(fs);
                    else
                        Object.assign(it, { key: fs, sep: [] });
                    return;
                }
                case 'flow-map-end':
                case 'flow-seq-end':
                    fc.end.push(this.sourceToken);
                    return;
            }
            const bv = this.startBlockValue(fc);
            /* istanbul ignore else should not happen */
            if (bv)
                this.stack.push(bv);
            else {
                yield* this.pop();
                yield* this.step();
            }
        }
        else {
            const parent = this.peek(2);
            if (parent.type === 'block-map' &&
                ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||
                    (this.type === 'newline' &&
                        !parent.items[parent.items.length - 1].sep))) {
                yield* this.pop();
                yield* this.step();
            }
            else if (this.type === 'map-value-ind' &&
                parent.type !== 'flow-collection') {
                const prev = getPrevProps(parent);
                const start = getFirstKeyStartProps(prev);
                fixFlowSeqItems(fc);
                const sep = fc.end.splice(1, fc.end.length);
                sep.push(this.sourceToken);
                const map = {
                    type: 'block-map',
                    offset: fc.offset,
                    indent: fc.indent,
                    items: [{ start, key: fc, sep }]
                };
                this.onKeyLine = true;
                this.stack[this.stack.length - 1] = map;
            }
            else {
                yield* this.lineEnd(fc);
            }
        }
    }
    flowScalar(type) {
        if (this.onNewLine) {
            let nl = this.source.indexOf('\n') + 1;
            while (nl !== 0) {
                this.onNewLine(this.offset + nl);
                nl = this.source.indexOf('\n', nl) + 1;
            }
        }
        return {
            type,
            offset: this.offset,
            indent: this.indent,
            source: this.source
        };
    }
    startBlockValue(parent) {
        switch (this.type) {
            case 'alias':
            case 'scalar':
            case 'single-quoted-scalar':
            case 'double-quoted-scalar':
                return this.flowScalar(this.type);
            case 'block-scalar-header':
                return {
                    type: 'block-scalar',
                    offset: this.offset,
                    indent: this.indent,
                    props: [this.sourceToken],
                    source: ''
                };
            case 'flow-map-start':
            case 'flow-seq-start':
                return {
                    type: 'flow-collection',
                    offset: this.offset,
                    indent: this.indent,
                    start: this.sourceToken,
                    items: [],
                    end: []
                };
            case 'seq-item-ind':
                return {
                    type: 'block-seq',
                    offset: this.offset,
                    indent: this.indent,
                    items: [{ start: [this.sourceToken] }]
                };
            case 'explicit-key-ind': {
                this.onKeyLine = true;
                const prev = getPrevProps(parent);
                const start = getFirstKeyStartProps(prev);
                start.push(this.sourceToken);
                return {
                    type: 'block-map',
                    offset: this.offset,
                    indent: this.indent,
                    items: [{ start }]
                };
            }
            case 'map-value-ind': {
                this.onKeyLine = true;
                const prev = getPrevProps(parent);
                const start = getFirstKeyStartProps(prev);
                return {
                    type: 'block-map',
                    offset: this.offset,
                    indent: this.indent,
                    items: [{ start, key: null, sep: [this.sourceToken] }]
                };
            }
        }
        return null;
    }
    atIndentedComment(start, indent) {
        if (this.type !== 'comment')
            return false;
        if (this.indent <= indent)
            return false;
        return start.every(st => st.type === 'newline' || st.type === 'space');
    }
    *documentEnd(docEnd) {
        if (this.type !== 'doc-mode') {
            if (docEnd.end)
                docEnd.end.push(this.sourceToken);
            else
                docEnd.end = [this.sourceToken];
            if (this.type === 'newline')
                yield* this.pop();
        }
    }
    *lineEnd(token) {
        switch (this.type) {
            case 'comma':
            case 'doc-start':
            case 'doc-end':
            case 'flow-seq-end':
            case 'flow-map-end':
            case 'map-value-ind':
                yield* this.pop();
                yield* this.step();
                break;
            case 'newline':
                this.onKeyLine = false;
            // fallthrough
            case 'space':
            case 'comment':
            default:
                // all other values are errors
                if (token.end)
                    token.end.push(this.sourceToken);
                else
                    token.end = [this.sourceToken];
                if (this.type === 'newline')
                    yield* this.pop();
        }
    }
}

exports.Parser = Parser;
'use strict';

var composer = require('./compose/composer.js');
var Document = require('./doc/Document.js');
var errors = require('./errors.js');
var log = require('./log.js');
var lineCounter = require('./parse/line-counter.js');
var parser = require('./parse/parser.js');

function parseOptions(options) {
    const prettyErrors = options.prettyErrors !== false;
    const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;
    return { lineCounter: lineCounter$1, prettyErrors };
}
/**
 * Parse the input as a stream of YAML documents.
 *
 * Documents should be separated from each other by `...` or `---` marker lines.
 *
 * @returns If an empty `docs` array is returned, it will be of type
 *   EmptyStream and contain additional stream information. In
 *   TypeScript, you should use `'empty' in docs` as a type guard for it.
 */
function parseAllDocuments(source, options = {}) {
    const { lineCounter, prettyErrors } = parseOptions(options);
    const parser$1 = new parser.Parser(lineCounter === null || lineCounter === void 0 ? void 0 : lineCounter.addNewLine);
    const composer$1 = new composer.Composer(options);
    const docs = Array.from(composer$1.compose(parser$1.parse(source)));
    if (prettyErrors && lineCounter)
        for (const doc of docs) {
            doc.errors.forEach(errors.prettifyError(source, lineCounter));
            doc.warnings.forEach(errors.prettifyError(source, lineCounter));
        }
    if (docs.length > 0)
        return docs;
    return Object.assign([], { empty: true }, composer$1.streamInfo());
}
/** Parse an input string into a single YAML.Document */
function parseDocument(source, options = {}) {
    const { lineCounter, prettyErrors } = parseOptions(options);
    const parser$1 = new parser.Parser(lineCounter === null || lineCounter === void 0 ? void 0 : lineCounter.addNewLine);
    const composer$1 = new composer.Composer(options);
    // `doc` is always set by compose.end(true) at the very latest
    let doc = null;
    for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {
        if (!doc)
            doc = _doc;
        else if (doc.options.logLevel !== 'silent') {
            doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));
            break;
        }
    }
    if (prettyErrors && lineCounter) {
        doc.errors.forEach(errors.prettifyError(source, lineCounter));
        doc.warnings.forEach(errors.prettifyError(source, lineCounter));
    }
    return doc;
}
function parse(src, reviver, options) {
    let _reviver = undefined;
    if (typeof reviver === 'function') {
        _reviver = reviver;
    }
    else if (options === undefined && reviver && typeof reviver === 'object') {
        options = reviver;
    }
    const doc = parseDocument(src, options);
    if (!doc)
        return null;
    doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));
    if (doc.errors.length > 0) {
        if (doc.options.logLevel !== 'silent')
            throw doc.errors[0];
        else
            doc.errors = [];
    }
    return doc.toJS(Object.assign({ reviver: _reviver }, options));
}
function stringify(value, replacer, options) {
    var _a;
    let _replacer = null;
    if (typeof replacer === 'function' || Array.isArray(replacer)) {
        _replacer = replacer;
    }
    else if (options === undefined && replacer) {
        options = replacer;
    }
    if (typeof options === 'string')
        options = options.length;
    if (typeof options === 'number') {
        const indent = Math.round(options);
        options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };
    }
    if (value === undefined) {
        const { keepUndefined } = (_a = options !== null && options !== void 0 ? options : replacer) !== null && _a !== void 0 ? _a : {};
        if (!keepUndefined)
            return undefined;
    }
    return new Document.Document(value, _replacer, options).toString(options);
}

exports.parse = parse;
exports.parseAllDocuments = parseAllDocuments;
exports.parseDocument = parseDocument;
exports.stringify = stringify;
'use strict';

var Node = require('../../nodes/Node.js');
var Pair = require('../../nodes/Pair.js');
var YAMLMap = require('../../nodes/YAMLMap.js');

function createMap(schema, obj, ctx) {
    const { keepUndefined, replacer } = ctx;
    const map = new YAMLMap.YAMLMap(schema);
    const add = (key, value) => {
        if (typeof replacer === 'function')
            value = replacer.call(obj, key, value);
        else if (Array.isArray(replacer) && !replacer.includes(key))
            return;
        if (value !== undefined || keepUndefined)
            map.items.push(Pair.createPair(key, value, ctx));
    };
    if (obj instanceof Map) {
        for (const [key, value] of obj)
            add(key, value);
    }
    else if (obj && typeof obj === 'object') {
        for (const key of Object.keys(obj))
            add(key, obj[key]);
    }
    if (typeof schema.sortMapEntries === 'function') {
        map.items.sort(schema.sortMapEntries);
    }
    return map;
}
const map = {
    collection: 'map',
    createNode: createMap,
    default: true,
    nodeClass: YAMLMap.YAMLMap,
    tag: 'tag:yaml.org,2002:map',
    resolve(map, onError) {
        if (!Node.isMap(map))
            onError('Expected a mapping for this tag');
        return map;
    }
};

exports.map = map;
'use strict';

var Scalar = require('../../nodes/Scalar.js');

const nullTag = {
    identify: value => value == null,
    createNode: () => new Scalar.Scalar(null),
    default: true,
    tag: 'tag:yaml.org,2002:null',
    test: /^(?:~|[Nn]ull|NULL)?$/,
    resolve: () => new Scalar.Scalar(null),
    stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)
        ? source
        : ctx.options.nullStr
};

exports.nullTag = nullTag;
'use strict';

var createNode = require('../../doc/createNode.js');
var Node = require('../../nodes/Node.js');
var YAMLSeq = require('../../nodes/YAMLSeq.js');

function createSeq(schema, obj, ctx) {
    const { replacer } = ctx;
    const seq = new YAMLSeq.YAMLSeq(schema);
    if (obj && Symbol.iterator in Object(obj)) {
        let i = 0;
        for (let it of obj) {
            if (typeof replacer === 'function') {
                const key = obj instanceof Set ? it : String(i++);
                it = replacer.call(obj, key, it);
            }
            seq.items.push(createNode.createNode(it, undefined, ctx));
        }
    }
    return seq;
}
const seq = {
    collection: 'seq',
    createNode: createSeq,
    default: true,
    nodeClass: YAMLSeq.YAMLSeq,
    tag: 'tag:yaml.org,2002:seq',
    resolve(seq, onError) {
        if (!Node.isSeq(seq))
            onError('Expected a sequence for this tag');
        return seq;
    }
};

exports.seq = seq;
'use strict';

var stringifyString = require('../../stringify/stringifyString.js');

const string = {
    identify: value => typeof value === 'string',
    default: true,
    tag: 'tag:yaml.org,2002:str',
    resolve: str => str,
    stringify(item, ctx, onComment, onChompKeep) {
        ctx = Object.assign({ actualString: true }, ctx);
        return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);
    }
};

exports.string = string;
'use strict';

var Scalar = require('../../nodes/Scalar.js');

const boolTag = {
    identify: value => typeof value === 'boolean',
    default: true,
    tag: 'tag:yaml.org,2002:bool',
    test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,
    resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),
    stringify({ source, value }, ctx) {
        if (source && boolTag.test.test(source)) {
            const sv = source[0] === 't' || source[0] === 'T';
            if (value === sv)
                return source;
        }
        return value ? ctx.options.trueStr : ctx.options.falseStr;
    }
};

exports.boolTag = boolTag;
'use strict';

var Scalar = require('../../nodes/Scalar.js');
var stringifyNumber = require('../../stringify/stringifyNumber.js');

const floatNaN = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    test: /^(?:[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN))$/,
    resolve: str => str.slice(-3).toLowerCase() === 'nan'
        ? NaN
        : str[0] === '-'
            ? Number.NEGATIVE_INFINITY
            : Number.POSITIVE_INFINITY,
    stringify: stringifyNumber.stringifyNumber
};
const floatExp = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    format: 'EXP',
    test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,
    resolve: str => parseFloat(str),
    stringify(node) {
        const num = Number(node.value);
        return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);
    }
};
const float = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    test: /^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,
    resolve(str) {
        const node = new Scalar.Scalar(parseFloat(str));
        const dot = str.indexOf('.');
        if (dot !== -1 && str[str.length - 1] === '0')
            node.minFractionDigits = str.length - dot - 1;
        return node;
    },
    stringify: stringifyNumber.stringifyNumber
};

exports.float = float;
exports.floatExp = floatExp;
exports.floatNaN = floatNaN;
'use strict';

var stringifyNumber = require('../../stringify/stringifyNumber.js');

const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);
const intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));
function intStringify(node, radix, prefix) {
    const { value } = node;
    if (intIdentify(value) && value >= 0)
        return prefix + value.toString(radix);
    return stringifyNumber.stringifyNumber(node);
}
const intOct = {
    identify: value => intIdentify(value) && value >= 0,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'OCT',
    test: /^0o[0-7]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),
    stringify: node => intStringify(node, 8, '0o')
};
const int = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    test: /^[-+]?[0-9]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
    stringify: stringifyNumber.stringifyNumber
};
const intHex = {
    identify: value => intIdentify(value) && value >= 0,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'HEX',
    test: /^0x[0-9a-fA-F]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
    stringify: node => intStringify(node, 16, '0x')
};

exports.int = int;
exports.intHex = intHex;
exports.intOct = intOct;
'use strict';

var map = require('../common/map.js');
var _null = require('../common/null.js');
var seq = require('../common/seq.js');
var string = require('../common/string.js');
var bool = require('./bool.js');
var float = require('./float.js');
var int = require('./int.js');

const schema = [
    map.map,
    seq.seq,
    string.string,
    _null.nullTag,
    bool.boolTag,
    int.intOct,
    int.int,
    int.intHex,
    float.floatNaN,
    float.floatExp,
    float.float
];

exports.schema = schema;
'use strict';

var Scalar = require('../../nodes/Scalar.js');
var map = require('../common/map.js');
var seq = require('../common/seq.js');

function intIdentify(value) {
    return typeof value === 'bigint' || Number.isInteger(value);
}
const stringifyJSON = ({ value }) => JSON.stringify(value);
const jsonScalars = [
    {
        identify: value => typeof value === 'string',
        default: true,
        tag: 'tag:yaml.org,2002:str',
        resolve: str => str,
        stringify: stringifyJSON
    },
    {
        identify: value => value == null,
        createNode: () => new Scalar.Scalar(null),
        default: true,
        tag: 'tag:yaml.org,2002:null',
        test: /^null$/,
        resolve: () => null,
        stringify: stringifyJSON
    },
    {
        identify: value => typeof value === 'boolean',
        default: true,
        tag: 'tag:yaml.org,2002:bool',
        test: /^true|false$/,
        resolve: str => str === 'true',
        stringify: stringifyJSON
    },
    {
        identify: intIdentify,
        default: true,
        tag: 'tag:yaml.org,2002:int',
        test: /^-?(?:0|[1-9][0-9]*)$/,
        resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),
        stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)
    },
    {
        identify: value => typeof value === 'number',
        default: true,
        tag: 'tag:yaml.org,2002:float',
        test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,
        resolve: str => parseFloat(str),
        stringify: stringifyJSON
    }
];
const jsonError = {
    default: true,
    tag: '',
    test: /^/,
    resolve(str, onError) {
        onError(`Unresolved plain scalar ${JSON.stringify(str)}`);
        return str;
    }
};
const schema = [map.map, seq.seq].concat(jsonScalars, jsonError);

exports.schema = schema;
'use strict';

var Node = require('../nodes/Node.js');
var map = require('./common/map.js');
var seq = require('./common/seq.js');
var string = require('./common/string.js');
var tags = require('./tags.js');

const sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
class Schema {
    constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {
        this.compat = Array.isArray(compat)
            ? tags.getTags(compat, 'compat')
            : compat
                ? tags.getTags(null, compat)
                : null;
        this.merge = !!merge;
        this.name = (typeof schema === 'string' && schema) || 'core';
        this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};
        this.tags = tags.getTags(customTags, this.name);
        this.toStringOptions = toStringDefaults !== null && toStringDefaults !== void 0 ? toStringDefaults : null;
        Object.defineProperty(this, Node.MAP, { value: map.map });
        Object.defineProperty(this, Node.SCALAR, { value: string.string });
        Object.defineProperty(this, Node.SEQ, { value: seq.seq });
        // Used by createMap()
        this.sortMapEntries =
            typeof sortMapEntries === 'function'
                ? sortMapEntries
                : sortMapEntries === true
                    ? sortMapEntriesByKey
                    : null;
    }
    clone() {
        const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));
        copy.tags = this.tags.slice();
        return copy;
    }
}

exports.Schema = Schema;
'use strict';

var map = require('./common/map.js');
var _null = require('./common/null.js');
var seq = require('./common/seq.js');
var string = require('./common/string.js');
var bool = require('./core/bool.js');
var float = require('./core/float.js');
var int = require('./core/int.js');
var schema = require('./core/schema.js');
var schema$1 = require('./json/schema.js');
var binary = require('./yaml-1.1/binary.js');
var omap = require('./yaml-1.1/omap.js');
var pairs = require('./yaml-1.1/pairs.js');
var schema$2 = require('./yaml-1.1/schema.js');
var set = require('./yaml-1.1/set.js');
var timestamp = require('./yaml-1.1/timestamp.js');

const schemas = new Map([
    ['core', schema.schema],
    ['failsafe', [map.map, seq.seq, string.string]],
    ['json', schema$1.schema],
    ['yaml11', schema$2.schema],
    ['yaml-1.1', schema$2.schema]
]);
const tagsByName = {
    binary: binary.binary,
    bool: bool.boolTag,
    float: float.float,
    floatExp: float.floatExp,
    floatNaN: float.floatNaN,
    floatTime: timestamp.floatTime,
    int: int.int,
    intHex: int.intHex,
    intOct: int.intOct,
    intTime: timestamp.intTime,
    map: map.map,
    null: _null.nullTag,
    omap: omap.omap,
    pairs: pairs.pairs,
    seq: seq.seq,
    set: set.set,
    timestamp: timestamp.timestamp
};
const coreKnownTags = {
    'tag:yaml.org,2002:binary': binary.binary,
    'tag:yaml.org,2002:omap': omap.omap,
    'tag:yaml.org,2002:pairs': pairs.pairs,
    'tag:yaml.org,2002:set': set.set,
    'tag:yaml.org,2002:timestamp': timestamp.timestamp
};
function getTags(customTags, schemaName) {
    let tags = schemas.get(schemaName);
    if (!tags) {
        if (Array.isArray(customTags))
            tags = [];
        else {
            const keys = Array.from(schemas.keys())
                .filter(key => key !== 'yaml11')
                .map(key => JSON.stringify(key))
                .join(', ');
            throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`);
        }
    }
    if (Array.isArray(customTags)) {
        for (const tag of customTags)
            tags = tags.concat(tag);
    }
    else if (typeof customTags === 'function') {
        tags = customTags(tags.slice());
    }
    return tags.map(tag => {
        if (typeof tag !== 'string')
            return tag;
        const tagObj = tagsByName[tag];
        if (tagObj)
            return tagObj;
        const keys = Object.keys(tagsByName)
            .map(key => JSON.stringify(key))
            .join(', ');
        throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`);
    });
}

exports.coreKnownTags = coreKnownTags;
exports.getTags = getTags;
'use strict';

var Scalar = require('../../nodes/Scalar.js');
var stringifyString = require('../../stringify/stringifyString.js');

const binary = {
    identify: value => value instanceof Uint8Array,
    default: false,
    tag: 'tag:yaml.org,2002:binary',
    /**
     * Returns a Buffer in node and an Uint8Array in browsers
     *
     * To use the resulting buffer as an image, you'll want to do something like:
     *
     *   const blob = new Blob([buffer], { type: 'image/jpeg' })
     *   document.querySelector('#photo').src = URL.createObjectURL(blob)
     */
    resolve(src, onError) {
        if (typeof Buffer === 'function') {
            return Buffer.from(src, 'base64');
        }
        else if (typeof atob === 'function') {
            // On IE 11, atob() can't handle newlines
            const str = atob(src.replace(/[\n\r]/g, ''));
            const buffer = new Uint8Array(str.length);
            for (let i = 0; i < str.length; ++i)
                buffer[i] = str.charCodeAt(i);
            return buffer;
        }
        else {
            onError('This environment does not support reading binary tags; either Buffer or atob is required');
            return src;
        }
    },
    stringify({ comment, type, value }, ctx, onComment, onChompKeep) {
        const buf = value; // checked earlier by binary.identify()
        let str;
        if (typeof Buffer === 'function') {
            str =
                buf instanceof Buffer
                    ? buf.toString('base64')
                    : Buffer.from(buf.buffer).toString('base64');
        }
        else if (typeof btoa === 'function') {
            let s = '';
            for (let i = 0; i < buf.length; ++i)
                s += String.fromCharCode(buf[i]);
            str = btoa(s);
        }
        else {
            throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');
        }
        if (!type)
            type = Scalar.Scalar.BLOCK_LITERAL;
        if (type !== Scalar.Scalar.QUOTE_DOUBLE) {
            const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);
            const n = Math.ceil(str.length / lineWidth);
            const lines = new Array(n);
            for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {
                lines[i] = str.substr(o, lineWidth);
            }
            str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\n' : ' ');
        }
        return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);
    }
};

exports.binary = binary;
'use strict';

var Scalar = require('../../nodes/Scalar.js');

function boolStringify({ value, source }, ctx) {
    const boolObj = value ? trueTag : falseTag;
    if (source && boolObj.test.test(source))
        return source;
    return value ? ctx.options.trueStr : ctx.options.falseStr;
}
const trueTag = {
    identify: value => value === true,
    default: true,
    tag: 'tag:yaml.org,2002:bool',
    test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,
    resolve: () => new Scalar.Scalar(true),
    stringify: boolStringify
};
const falseTag = {
    identify: value => value === false,
    default: true,
    tag: 'tag:yaml.org,2002:bool',
    test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i,
    resolve: () => new Scalar.Scalar(false),
    stringify: boolStringify
};

exports.falseTag = falseTag;
exports.trueTag = trueTag;
'use strict';

var Scalar = require('../../nodes/Scalar.js');
var stringifyNumber = require('../../stringify/stringifyNumber.js');

const floatNaN = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    test: /^[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN)$/,
    resolve: (str) => str.slice(-3).toLowerCase() === 'nan'
        ? NaN
        : str[0] === '-'
            ? Number.NEGATIVE_INFINITY
            : Number.POSITIVE_INFINITY,
    stringify: stringifyNumber.stringifyNumber
};
const floatExp = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    format: 'EXP',
    test: /^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,
    resolve: (str) => parseFloat(str.replace(/_/g, '')),
    stringify(node) {
        const num = Number(node.value);
        return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);
    }
};
const float = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    test: /^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,
    resolve(str) {
        const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));
        const dot = str.indexOf('.');
        if (dot !== -1) {
            const f = str.substring(dot + 1).replace(/_/g, '');
            if (f[f.length - 1] === '0')
                node.minFractionDigits = f.length;
        }
        return node;
    },
    stringify: stringifyNumber.stringifyNumber
};

exports.float = float;
exports.floatExp = floatExp;
exports.floatNaN = floatNaN;
'use strict';

var stringifyNumber = require('../../stringify/stringifyNumber.js');

const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);
function intResolve(str, offset, radix, { intAsBigInt }) {
    const sign = str[0];
    if (sign === '-' || sign === '+')
        offset += 1;
    str = str.substring(offset).replace(/_/g, '');
    if (intAsBigInt) {
        switch (radix) {
            case 2:
                str = `0b${str}`;
                break;
            case 8:
                str = `0o${str}`;
                break;
            case 16:
                str = `0x${str}`;
                break;
        }
        const n = BigInt(str);
        return sign === '-' ? BigInt(-1) * n : n;
    }
    const n = parseInt(str, radix);
    return sign === '-' ? -1 * n : n;
}
function intStringify(node, radix, prefix) {
    const { value } = node;
    if (intIdentify(value)) {
        const str = value.toString(radix);
        return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;
    }
    return stringifyNumber.stringifyNumber(node);
}
const intBin = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'BIN',
    test: /^[-+]?0b[0-1_]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),
    stringify: node => intStringify(node, 2, '0b')
};
const intOct = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'OCT',
    test: /^[-+]?0[0-7_]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),
    stringify: node => intStringify(node, 8, '0')
};
const int = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    test: /^[-+]?[0-9][0-9_]*$/,
    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
    stringify: stringifyNumber.stringifyNumber
};
const intHex = {
    identify: intIdentify,
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'HEX',
    test: /^[-+]?0x[0-9a-fA-F_]+$/,
    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
    stringify: node => intStringify(node, 16, '0x')
};

exports.int = int;
exports.intBin = intBin;
exports.intHex = intHex;
exports.intOct = intOct;
'use strict';

var YAMLSeq = require('../../nodes/YAMLSeq.js');
var toJS = require('../../nodes/toJS.js');
var Node = require('../../nodes/Node.js');
var YAMLMap = require('../../nodes/YAMLMap.js');
var pairs = require('./pairs.js');

class YAMLOMap extends YAMLSeq.YAMLSeq {
    constructor() {
        super();
        this.add = YAMLMap.YAMLMap.prototype.add.bind(this);
        this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);
        this.get = YAMLMap.YAMLMap.prototype.get.bind(this);
        this.has = YAMLMap.YAMLMap.prototype.has.bind(this);
        this.set = YAMLMap.YAMLMap.prototype.set.bind(this);
        this.tag = YAMLOMap.tag;
    }
    /**
     * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,
     * but TypeScript won't allow widening the signature of a child method.
     */
    toJSON(_, ctx) {
        if (!ctx)
            return super.toJSON(_);
        const map = new Map();
        if (ctx === null || ctx === void 0 ? void 0 : ctx.onCreate)
            ctx.onCreate(map);
        for (const pair of this.items) {
            let key, value;
            if (Node.isPair(pair)) {
                key = toJS.toJS(pair.key, '', ctx);
                value = toJS.toJS(pair.value, key, ctx);
            }
            else {
                key = toJS.toJS(pair, '', ctx);
            }
            if (map.has(key))
                throw new Error('Ordered maps must not include duplicate keys');
            map.set(key, value);
        }
        return map;
    }
}
YAMLOMap.tag = 'tag:yaml.org,2002:omap';
const omap = {
    collection: 'seq',
    identify: value => value instanceof Map,
    nodeClass: YAMLOMap,
    default: false,
    tag: 'tag:yaml.org,2002:omap',
    resolve(seq, onError) {
        const pairs$1 = pairs.resolvePairs(seq, onError);
        const seenKeys = [];
        for (const { key } of pairs$1.items) {
            if (Node.isScalar(key)) {
                if (seenKeys.includes(key.value)) {
                    onError(`Ordered maps must not include duplicate keys: ${key.value}`);
                }
                else {
                    seenKeys.push(key.value);
                }
            }
        }
        return Object.assign(new YAMLOMap(), pairs$1);
    },
    createNode(schema, iterable, ctx) {
        const pairs$1 = pairs.createPairs(schema, iterable, ctx);
        const omap = new YAMLOMap();
        omap.items = pairs$1.items;
        return omap;
    }
};

exports.YAMLOMap = YAMLOMap;
exports.omap = omap;
'use strict';

var Node = require('../../nodes/Node.js');
var Pair = require('../../nodes/Pair.js');
var Scalar = require('../../nodes/Scalar.js');
var YAMLSeq = require('../../nodes/YAMLSeq.js');

function resolvePairs(seq, onError) {
    var _a;
    if (Node.isSeq(seq)) {
        for (let i = 0; i < seq.items.length; ++i) {
            let item = seq.items[i];
            if (Node.isPair(item))
                continue;
            else if (Node.isMap(item)) {
                if (item.items.length > 1)
                    onError('Each pair must have its own sequence indicator');
                const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));
                if (item.commentBefore)
                    pair.key.commentBefore = pair.key.commentBefore
                        ? `${item.commentBefore}\n${pair.key.commentBefore}`
                        : item.commentBefore;
                if (item.comment) {
                    const cn = (_a = pair.value) !== null && _a !== void 0 ? _a : pair.key;
                    cn.comment = cn.comment
                        ? `${item.comment}\n${cn.comment}`
                        : item.comment;
                }
                item = pair;
            }
            seq.items[i] = Node.isPair(item) ? item : new Pair.Pair(item);
        }
    }
    else
        onError('Expected a sequence for this tag');
    return seq;
}
function createPairs(schema, iterable, ctx) {
    const { replacer } = ctx;
    const pairs = new YAMLSeq.YAMLSeq(schema);
    pairs.tag = 'tag:yaml.org,2002:pairs';
    let i = 0;
    if (iterable && Symbol.iterator in Object(iterable))
        for (let it of iterable) {
            if (typeof replacer === 'function')
                it = replacer.call(iterable, String(i++), it);
            let key, value;
            if (Array.isArray(it)) {
                if (it.length === 2) {
                    key = it[0];
                    value = it[1];
                }
                else
                    throw new TypeError(`Expected [key, value] tuple: ${it}`);
            }
            else if (it && it instanceof Object) {
                const keys = Object.keys(it);
                if (keys.length === 1) {
                    key = keys[0];
                    value = it[key];
                }
                else
                    throw new TypeError(`Expected { key: value } tuple: ${it}`);
            }
            else {
                key = it;
            }
            pairs.items.push(Pair.createPair(key, value, ctx));
        }
    return pairs;
}
const pairs = {
    collection: 'seq',
    default: false,
    tag: 'tag:yaml.org,2002:pairs',
    resolve: resolvePairs,
    createNode: createPairs
};

exports.createPairs = createPairs;
exports.pairs = pairs;
exports.resolvePairs = resolvePairs;
'use strict';

var map = require('../common/map.js');
var _null = require('../common/null.js');
var seq = require('../common/seq.js');
var string = require('../common/string.js');
var binary = require('./binary.js');
var bool = require('./bool.js');
var float = require('./float.js');
var int = require('./int.js');
var omap = require('./omap.js');
var pairs = require('./pairs.js');
var set = require('./set.js');
var timestamp = require('./timestamp.js');

const schema = [
    map.map,
    seq.seq,
    string.string,
    _null.nullTag,
    bool.trueTag,
    bool.falseTag,
    int.intBin,
    int.intOct,
    int.int,
    int.intHex,
    float.floatNaN,
    float.floatExp,
    float.float,
    binary.binary,
    omap.omap,
    pairs.pairs,
    set.set,
    timestamp.intTime,
    timestamp.floatTime,
    timestamp.timestamp
];

exports.schema = schema;
'use strict';

var Node = require('../../nodes/Node.js');
var Pair = require('../../nodes/Pair.js');
var YAMLMap = require('../../nodes/YAMLMap.js');

class YAMLSet extends YAMLMap.YAMLMap {
    constructor(schema) {
        super(schema);
        this.tag = YAMLSet.tag;
    }
    add(key) {
        let pair;
        if (Node.isPair(key))
            pair = key;
        else if (typeof key === 'object' &&
            'key' in key &&
            'value' in key &&
            key.value === null)
            pair = new Pair.Pair(key.key, null);
        else
            pair = new Pair.Pair(key, null);
        const prev = YAMLMap.findPair(this.items, pair.key);
        if (!prev)
            this.items.push(pair);
    }
    get(key, keepPair) {
        const pair = YAMLMap.findPair(this.items, key);
        return !keepPair && Node.isPair(pair)
            ? Node.isScalar(pair.key)
                ? pair.key.value
                : pair.key
            : pair;
    }
    set(key, value) {
        if (typeof value !== 'boolean')
            throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
        const prev = YAMLMap.findPair(this.items, key);
        if (prev && !value) {
            this.items.splice(this.items.indexOf(prev), 1);
        }
        else if (!prev && value) {
            this.items.push(new Pair.Pair(key));
        }
    }
    toJSON(_, ctx) {
        return super.toJSON(_, ctx, Set);
    }
    toString(ctx, onComment, onChompKeep) {
        if (!ctx)
            return JSON.stringify(this);
        if (this.hasAllNullValues(true))
            return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);
        else
            throw new Error('Set items must all have null values');
    }
}
YAMLSet.tag = 'tag:yaml.org,2002:set';
const set = {
    collection: 'map',
    identify: value => value instanceof Set,
    nodeClass: YAMLSet,
    default: false,
    tag: 'tag:yaml.org,2002:set',
    resolve(map, onError) {
        if (Node.isMap(map)) {
            if (map.hasAllNullValues(true))
                return Object.assign(new YAMLSet(), map);
            else
                onError('Set items must all have null values');
        }
        else
            onError('Expected a mapping for this tag');
        return map;
    },
    createNode(schema, iterable, ctx) {
        const { replacer } = ctx;
        const set = new YAMLSet(schema);
        if (iterable && Symbol.iterator in Object(iterable))
            for (let value of iterable) {
                if (typeof replacer === 'function')
                    value = replacer.call(iterable, value, value);
                set.items.push(Pair.createPair(value, null, ctx));
            }
        return set;
    }
};

exports.YAMLSet = YAMLSet;
exports.set = set;
'use strict';

var stringifyNumber = require('../../stringify/stringifyNumber.js');

/** Internal types handle bigint as number, because TS can't figure it out. */
function parseSexagesimal(str, asBigInt) {
    const sign = str[0];
    const parts = sign === '-' || sign === '+' ? str.substring(1) : str;
    const num = (n) => asBigInt ? BigInt(n) : Number(n);
    const res = parts
        .replace(/_/g, '')
        .split(':')
        .reduce((res, p) => res * num(60) + num(p), num(0));
    return (sign === '-' ? num(-1) * res : res);
}
/**
 * hhhh:mm:ss.sss
 *
 * Internal types handle bigint as number, because TS can't figure it out.
 */
function stringifySexagesimal(node) {
    let { value } = node;
    let num = (n) => n;
    if (typeof value === 'bigint')
        num = n => BigInt(n);
    else if (isNaN(value) || !isFinite(value))
        return stringifyNumber.stringifyNumber(node);
    let sign = '';
    if (value < 0) {
        sign = '-';
        value *= num(-1);
    }
    const _60 = num(60);
    const parts = [value % _60]; // seconds, including ms
    if (value < 60) {
        parts.unshift(0); // at least one : is required
    }
    else {
        value = (value - parts[0]) / _60;
        parts.unshift(value % _60); // minutes
        if (value >= 60) {
            value = (value - parts[0]) / _60;
            parts.unshift(value); // hours
        }
    }
    return (sign +
        parts
            .map(n => (n < 10 ? '0' + String(n) : String(n)))
            .join(':')
            .replace(/000000\d*$/, '') // % 60 may introduce error
    );
}
const intTime = {
    identify: value => typeof value === 'bigint' || Number.isInteger(value),
    default: true,
    tag: 'tag:yaml.org,2002:int',
    format: 'TIME',
    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,
    resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),
    stringify: stringifySexagesimal
};
const floatTime = {
    identify: value => typeof value === 'number',
    default: true,
    tag: 'tag:yaml.org,2002:float',
    format: 'TIME',
    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,
    resolve: str => parseSexagesimal(str, false),
    stringify: stringifySexagesimal
};
const timestamp = {
    identify: value => value instanceof Date,
    default: true,
    tag: 'tag:yaml.org,2002:timestamp',
    // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part
    // may be omitted altogether, resulting in a date format. In such a case, the time part is
    // assumed to be 00:00:00Z (start of day, UTC).
    test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd
        '(?:' + // time is optional
        '(?:t|T|[ \\t]+)' + // t | T | whitespace
        '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?
        '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30
        ')?$'),
    resolve(str) {
        const match = str.match(timestamp.test);
        if (!match)
            throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');
        const [, year, month, day, hour, minute, second] = match.map(Number);
        const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;
        let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);
        const tz = match[8];
        if (tz && tz !== 'Z') {
            let d = parseSexagesimal(tz, false);
            if (Math.abs(d) < 30)
                d *= 60;
            date -= 60000 * d;
        }
        return new Date(date);
    },
    stringify: ({ value }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '')
};

exports.floatTime = floatTime;
exports.intTime = intTime;
exports.timestamp = timestamp;
'use strict';

const FOLD_FLOW = 'flow';
const FOLD_BLOCK = 'block';
const FOLD_QUOTED = 'quoted';
/**
 * Tries to keep input at up to `lineWidth` characters, splitting only on spaces
 * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are
 * terminated with `\n` and started with `indent`.
 */
function foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {
    if (!lineWidth || lineWidth < 0)
        return text;
    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
    if (text.length <= endStep)
        return text;
    const folds = [];
    const escapedFolds = {};
    let end = lineWidth - indent.length;
    if (typeof indentAtStart === 'number') {
        if (indentAtStart > lineWidth - Math.max(2, minContentWidth))
            folds.push(0);
        else
            end = lineWidth - indentAtStart;
    }
    let split = undefined;
    let prev = undefined;
    let overflow = false;
    let i = -1;
    let escStart = -1;
    let escEnd = -1;
    if (mode === FOLD_BLOCK) {
        i = consumeMoreIndentedLines(text, i);
        if (i !== -1)
            end = i + endStep;
    }
    for (let ch; (ch = text[(i += 1)]);) {
        if (mode === FOLD_QUOTED && ch === '\\') {
            escStart = i;
            switch (text[i + 1]) {
                case 'x':
                    i += 3;
                    break;
                case 'u':
                    i += 5;
                    break;
                case 'U':
                    i += 9;
                    break;
                default:
                    i += 1;
            }
            escEnd = i;
        }
        if (ch === '\n') {
            if (mode === FOLD_BLOCK)
                i = consumeMoreIndentedLines(text, i);
            end = i + endStep;
            split = undefined;
        }
        else {
            if (ch === ' ' &&
                prev &&
                prev !== ' ' &&
                prev !== '\n' &&
                prev !== '\t') {
                // space surrounded by non-space can be replaced with newline + indent
                const next = text[i + 1];
                if (next && next !== ' ' && next !== '\n' && next !== '\t')
                    split = i;
            }
            if (i >= end) {
                if (split) {
                    folds.push(split);
                    end = split + endStep;
                    split = undefined;
                }
                else if (mode === FOLD_QUOTED) {
                    // white-space collected at end may stretch past lineWidth
                    while (prev === ' ' || prev === '\t') {
                        prev = ch;
                        ch = text[(i += 1)];
                        overflow = true;
                    }
                    // Account for newline escape, but don't break preceding escape
                    const j = i > escEnd + 1 ? i - 2 : escStart - 1;
                    // Bail out if lineWidth & minContentWidth are shorter than an escape string
                    if (escapedFolds[j])
                        return text;
                    folds.push(j);
                    escapedFolds[j] = true;
                    end = j + endStep;
                    split = undefined;
                }
                else {
                    overflow = true;
                }
            }
        }
        prev = ch;
    }
    if (overflow && onOverflow)
        onOverflow();
    if (folds.length === 0)
        return text;
    if (onFold)
        onFold();
    let res = text.slice(0, folds[0]);
    for (let i = 0; i < folds.length; ++i) {
        const fold = folds[i];
        const end = folds[i + 1] || text.length;
        if (fold === 0)
            res = `\n${indent}${text.slice(0, end)}`;
        else {
            if (mode === FOLD_QUOTED && escapedFolds[fold])
                res += `${text[fold]}\\`;
            res += `\n${indent}${text.slice(fold + 1, end)}`;
        }
    }
    return res;
}
/**
 * Presumes `i + 1` is at the start of a line
 * @returns index of last newline in more-indented block
 */
function consumeMoreIndentedLines(text, i) {
    let ch = text[i + 1];
    while (ch === ' ' || ch === '\t') {
        do {
            ch = text[(i += 1)];
        } while (ch && ch !== '\n');
        ch = text[i + 1];
    }
    return i;
}

exports.FOLD_BLOCK = FOLD_BLOCK;
exports.FOLD_FLOW = FOLD_FLOW;
exports.FOLD_QUOTED = FOLD_QUOTED;
exports.foldFlowLines = foldFlowLines;
'use strict';

var anchors = require('../doc/anchors.js');
var Node = require('../nodes/Node.js');
var stringifyComment = require('./stringifyComment.js');
var stringifyString = require('./stringifyString.js');

function createStringifyContext(doc, options) {
    const opt = Object.assign({
        blockQuote: true,
        commentString: stringifyComment.stringifyComment,
        defaultKeyType: null,
        defaultStringType: 'PLAIN',
        directives: null,
        doubleQuotedAsJSON: false,
        doubleQuotedMinMultiLineLength: 40,
        falseStr: 'false',
        indentSeq: true,
        lineWidth: 80,
        minContentWidth: 20,
        nullStr: 'null',
        simpleKeys: false,
        singleQuote: null,
        trueStr: 'true',
        verifyAliasOrder: true
    }, doc.schema.toStringOptions, options);
    let inFlow;
    switch (opt.collectionStyle) {
        case 'block':
            inFlow = false;
            break;
        case 'flow':
            inFlow = true;
            break;
        default:
            inFlow = null;
    }
    return {
        anchors: new Set(),
        doc,
        indent: '',
        indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ',
        inFlow,
        options: opt
    };
}
function getTagObject(tags, item) {
    var _a, _b, _c, _d;
    if (item.tag) {
        const match = tags.filter(t => t.tag === item.tag);
        if (match.length > 0)
            return (_a = match.find(t => t.format === item.format)) !== null && _a !== void 0 ? _a : match[0];
    }
    let tagObj = undefined;
    let obj;
    if (Node.isScalar(item)) {
        obj = item.value;
        const match = tags.filter(t => { var _a; return (_a = t.identify) === null || _a === void 0 ? void 0 : _a.call(t, obj); });
        tagObj =
            (_b = match.find(t => t.format === item.format)) !== null && _b !== void 0 ? _b : match.find(t => !t.format);
    }
    else {
        obj = item;
        tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);
    }
    if (!tagObj) {
        const name = (_d = (_c = obj === null || obj === void 0 ? void 0 : obj.constructor) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : typeof obj;
        throw new Error(`Tag not resolved for ${name} value`);
    }
    return tagObj;
}
// needs to be called before value stringifier to allow for circular anchor refs
function stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {
    if (!doc.directives)
        return '';
    const props = [];
    const anchor = (Node.isScalar(node) || Node.isCollection(node)) && node.anchor;
    if (anchor && anchors.anchorIsValid(anchor)) {
        anchors$1.add(anchor);
        props.push(`&${anchor}`);
    }
    const tag = node.tag ? node.tag : tagObj.default ? null : tagObj.tag;
    if (tag)
        props.push(doc.directives.tagString(tag));
    return props.join(' ');
}
function stringify(item, ctx, onComment, onChompKeep) {
    var _a, _b;
    if (Node.isPair(item))
        return item.toString(ctx, onComment, onChompKeep);
    if (Node.isAlias(item)) {
        if (ctx.doc.directives)
            return item.toString(ctx);
        if ((_a = ctx.resolvedAliases) === null || _a === void 0 ? void 0 : _a.has(item)) {
            throw new TypeError(`Cannot stringify circular structure without alias nodes`);
        }
        else {
            if (ctx.resolvedAliases)
                ctx.resolvedAliases.add(item);
            else
                ctx.resolvedAliases = new Set([item]);
            item = item.resolve(ctx.doc);
        }
    }
    let tagObj = undefined;
    const node = Node.isNode(item)
        ? item
        : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });
    if (!tagObj)
        tagObj = getTagObject(ctx.doc.schema.tags, node);
    const props = stringifyProps(node, tagObj, ctx);
    if (props.length > 0)
        ctx.indentAtStart = ((_b = ctx.indentAtStart) !== null && _b !== void 0 ? _b : 0) + props.length + 1;
    const str = typeof tagObj.stringify === 'function'
        ? tagObj.stringify(node, ctx, onComment, onChompKeep)
        : Node.isScalar(node)
            ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)
            : node.toString(ctx, onComment, onChompKeep);
    if (!props)
        return str;
    return Node.isScalar(node) || str[0] === '{' || str[0] === '['
        ? `${props} ${str}`
        : `${props}\n${ctx.indent}${str}`;
}

exports.createStringifyContext = createStringifyContext;
exports.stringify = stringify;
'use strict';

var Collection = require('../nodes/Collection.js');
var Node = require('../nodes/Node.js');
var stringify = require('./stringify.js');
var stringifyComment = require('./stringifyComment.js');

function stringifyCollection(collection, ctx, options) {
    var _a;
    const flow = (_a = ctx.inFlow) !== null && _a !== void 0 ? _a : collection.flow;
    const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;
    return stringify(collection, ctx, options);
}
function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {
    const { indent, options: { commentString } } = ctx;
    const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });
    let chompKeep = false; // flag for the preceding node's status
    const lines = [];
    for (let i = 0; i < items.length; ++i) {
        const item = items[i];
        let comment = null;
        if (Node.isNode(item)) {
            if (!chompKeep && item.spaceBefore)
                lines.push('');
            addCommentBefore(ctx, lines, item.commentBefore, chompKeep);
            if (item.comment)
                comment = item.comment;
        }
        else if (Node.isPair(item)) {
            const ik = Node.isNode(item.key) ? item.key : null;
            if (ik) {
                if (!chompKeep && ik.spaceBefore)
                    lines.push('');
                addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);
            }
        }
        chompKeep = false;
        let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));
        if (comment)
            str += stringifyComment.lineComment(str, itemIndent, commentString(comment));
        if (chompKeep && comment)
            chompKeep = false;
        lines.push(blockItemPrefix + str);
    }
    let str;
    if (lines.length === 0) {
        str = flowChars.start + flowChars.end;
    }
    else {
        str = lines[0];
        for (let i = 1; i < lines.length; ++i) {
            const line = lines[i];
            str += line ? `\n${indent}${line}` : '\n';
        }
    }
    if (comment) {
        str += '\n' + stringifyComment.indentComment(commentString(comment), indent);
        if (onComment)
            onComment();
    }
    else if (chompKeep && onChompKeep)
        onChompKeep();
    return str;
}
function stringifyFlowCollection({ comment, items }, ctx, { flowChars, itemIndent, onComment }) {
    const { indent, indentStep, options: { commentString } } = ctx;
    itemIndent += indentStep;
    const itemCtx = Object.assign({}, ctx, {
        indent: itemIndent,
        inFlow: true,
        type: null
    });
    let reqNewline = false;
    let linesAtValue = 0;
    const lines = [];
    for (let i = 0; i < items.length; ++i) {
        const item = items[i];
        let comment = null;
        if (Node.isNode(item)) {
            if (item.spaceBefore)
                lines.push('');
            addCommentBefore(ctx, lines, item.commentBefore, false);
            if (item.comment)
                comment = item.comment;
        }
        else if (Node.isPair(item)) {
            const ik = Node.isNode(item.key) ? item.key : null;
            if (ik) {
                if (ik.spaceBefore)
                    lines.push('');
                addCommentBefore(ctx, lines, ik.commentBefore, false);
                if (ik.comment)
                    reqNewline = true;
            }
            const iv = Node.isNode(item.value) ? item.value : null;
            if (iv) {
                if (iv.comment)
                    comment = iv.comment;
                if (iv.commentBefore)
                    reqNewline = true;
            }
            else if (item.value == null && ik && ik.comment) {
                comment = ik.comment;
            }
        }
        if (comment)
            reqNewline = true;
        let str = stringify.stringify(item, itemCtx, () => (comment = null));
        if (i < items.length - 1)
            str += ',';
        if (comment)
            str += stringifyComment.lineComment(str, itemIndent, commentString(comment));
        if (!reqNewline && (lines.length > linesAtValue || str.includes('\n')))
            reqNewline = true;
        lines.push(str);
        linesAtValue = lines.length;
    }
    let str;
    const { start, end } = flowChars;
    if (lines.length === 0) {
        str = start + end;
    }
    else {
        if (!reqNewline) {
            const len = lines.reduce((sum, line) => sum + line.length + 2, 2);
            reqNewline = len > Collection.Collection.maxFlowStringSingleLineLength;
        }
        if (reqNewline) {
            str = start;
            for (const line of lines)
                str += line ? `\n${indentStep}${indent}${line}` : '\n';
            str += `\n${indent}${end}`;
        }
        else {
            str = `${start} ${lines.join(' ')} ${end}`;
        }
    }
    if (comment) {
        str += stringifyComment.lineComment(str, commentString(comment), indent);
        if (onComment)
            onComment();
    }
    return str;
}
function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {
    if (comment && chompKeep)
        comment = comment.replace(/^\n+/, '');
    if (comment) {
        const ic = stringifyComment.indentComment(commentString(comment), indent);
        lines.push(ic.trimStart()); // Avoid double indent on first line
    }
}

exports.stringifyCollection = stringifyCollection;
'use strict';

/**
 * Stringifies a comment.
 *
 * Empty comment lines are left empty,
 * lines consisting of a single space are replaced by `#`,
 * and all other lines are prefixed with a `#`.
 */
const stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');
function indentComment(comment, indent) {
    if (/^\n+$/.test(comment))
        return comment.substring(1);
    return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;
}
const lineComment = (str, indent, comment) => str.endsWith('\n')
    ? indentComment(comment, indent)
    : comment.includes('\n')
        ? '\n' + indentComment(comment, indent)
        : (str.endsWith(' ') ? '' : ' ') + comment;

exports.indentComment = indentComment;
exports.lineComment = lineComment;
exports.stringifyComment = stringifyComment;
'use strict';

var Node = require('../nodes/Node.js');
var stringify = require('./stringify.js');
var stringifyComment = require('./stringifyComment.js');

function stringifyDocument(doc, options) {
    var _a;
    const lines = [];
    let hasDirectives = options.directives === true;
    if (options.directives !== false && doc.directives) {
        const dir = doc.directives.toString(doc);
        if (dir) {
            lines.push(dir);
            hasDirectives = true;
        }
        else if (doc.directives.docStart)
            hasDirectives = true;
    }
    if (hasDirectives)
        lines.push('---');
    const ctx = stringify.createStringifyContext(doc, options);
    const { commentString } = ctx.options;
    if (doc.commentBefore) {
        if (lines.length !== 1)
            lines.unshift('');
        const cs = commentString(doc.commentBefore);
        lines.unshift(stringifyComment.indentComment(cs, ''));
    }
    let chompKeep = false;
    let contentComment = null;
    if (doc.contents) {
        if (Node.isNode(doc.contents)) {
            if (doc.contents.spaceBefore && hasDirectives)
                lines.push('');
            if (doc.contents.commentBefore) {
                const cs = commentString(doc.contents.commentBefore);
                lines.push(stringifyComment.indentComment(cs, ''));
            }
            // top-level block scalars need to be indented if followed by a comment
            ctx.forceBlockIndent = !!doc.comment;
            contentComment = doc.contents.comment;
        }
        const onChompKeep = contentComment ? undefined : () => (chompKeep = true);
        let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);
        if (contentComment)
            body += stringifyComment.lineComment(body, '', commentString(contentComment));
        if ((body[0] === '|' || body[0] === '>') &&
            lines[lines.length - 1] === '---') {
            // Top-level block scalars with a preceding doc marker ought to use the
            // same line for their header.
            lines[lines.length - 1] = `--- ${body}`;
        }
        else
            lines.push(body);
    }
    else {
        lines.push(stringify.stringify(doc.contents, ctx));
    }
    if ((_a = doc.directives) === null || _a === void 0 ? void 0 : _a.docEnd) {
        if (doc.comment) {
            const cs = commentString(doc.comment);
            if (cs.includes('\n')) {
                lines.push('...');
                lines.push(stringifyComment.indentComment(cs, ''));
            }
            else {
                lines.push(`... ${cs}`);
            }
        }
        else {
            lines.push('...');
        }
    }
    else {
        let dc = doc.comment;
        if (dc && chompKeep)
            dc = dc.replace(/^\n+/, '');
        if (dc) {
            if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
                lines.push('');
            lines.push(stringifyComment.indentComment(commentString(dc), ''));
        }
    }
    return lines.join('\n') + '\n';
}

exports.stringifyDocument = stringifyDocument;
'use strict';

function stringifyNumber({ format, minFractionDigits, tag, value }) {
    if (typeof value === 'bigint')
        return String(value);
    const num = typeof value === 'number' ? value : Number(value);
    if (!isFinite(num))
        return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';
    let n = JSON.stringify(value);
    if (!format &&
        minFractionDigits &&
        (!tag || tag === 'tag:yaml.org,2002:float') &&
        /^\d/.test(n)) {
        let i = n.indexOf('.');
        if (i < 0) {
            i = n.length;
            n += '.';
        }
        let d = minFractionDigits - (n.length - i - 1);
        while (d-- > 0)
            n += '0';
    }
    return n;
}

exports.stringifyNumber = stringifyNumber;
'use strict';

var Node = require('../nodes/Node.js');
var Scalar = require('../nodes/Scalar.js');
var stringify = require('./stringify.js');
var stringifyComment = require('./stringifyComment.js');

function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
    const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;
    let keyComment = (Node.isNode(key) && key.comment) || null;
    if (simpleKeys) {
        if (keyComment) {
            throw new Error('With simple keys, key nodes cannot have comments');
        }
        if (Node.isCollection(key)) {
            const msg = 'With simple keys, collection cannot be used as a key value';
            throw new Error(msg);
        }
    }
    let explicitKey = !simpleKeys &&
        (!key ||
            (keyComment && value == null && !ctx.inFlow) ||
            Node.isCollection(key) ||
            (Node.isScalar(key)
                ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL
                : typeof key === 'object'));
    ctx = Object.assign({}, ctx, {
        allNullValues: false,
        implicitKey: !explicitKey && (simpleKeys || !allNullValues),
        indent: indent + indentStep
    });
    let keyCommentDone = false;
    let chompKeep = false;
    let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));
    if (!explicitKey && !ctx.inFlow && str.length > 1024) {
        if (simpleKeys)
            throw new Error('With simple keys, single line scalar must not span more than 1024 characters');
        explicitKey = true;
    }
    if (ctx.inFlow) {
        if (allNullValues || value == null) {
            if (keyCommentDone && onComment)
                onComment();
            return str === '' ? '?' : explicitKey ? `? ${str}` : str;
        }
    }
    else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {
        str = `? ${str}`;
        if (keyComment && !keyCommentDone) {
            str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));
        }
        else if (chompKeep && onChompKeep)
            onChompKeep();
        return str;
    }
    if (keyCommentDone)
        keyComment = null;
    if (explicitKey) {
        if (keyComment)
            str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));
        str = `? ${str}\n${indent}:`;
    }
    else {
        str = `${str}:`;
        if (keyComment)
            str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));
    }
    let vcb = '';
    let valueComment = null;
    if (Node.isNode(value)) {
        if (value.spaceBefore)
            vcb = '\n';
        if (value.commentBefore) {
            const cs = commentString(value.commentBefore);
            vcb += `\n${stringifyComment.indentComment(cs, ctx.indent)}`;
        }
        valueComment = value.comment;
    }
    else if (value && typeof value === 'object') {
        value = doc.createNode(value);
    }
    ctx.implicitKey = false;
    if (!explicitKey && !keyComment && Node.isScalar(value))
        ctx.indentAtStart = str.length + 1;
    chompKeep = false;
    if (!indentSeq &&
        indentStep.length >= 2 &&
        !ctx.inFlow &&
        !explicitKey &&
        Node.isSeq(value) &&
        !value.flow &&
        !value.tag &&
        !value.anchor) {
        // If indentSeq === false, consider '- ' as part of indentation where possible
        ctx.indent = ctx.indent.substr(2);
    }
    let valueCommentDone = false;
    const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));
    let ws = ' ';
    if (vcb || keyComment) {
        if (valueStr === '' && !ctx.inFlow)
            ws = vcb === '\n' ? '\n\n' : vcb;
        else
            ws = `${vcb}\n${ctx.indent}`;
    }
    else if (!explicitKey && Node.isCollection(value)) {
        const flow = valueStr[0] === '[' || valueStr[0] === '{';
        if (!flow || valueStr.includes('\n'))
            ws = `\n${ctx.indent}`;
    }
    else if (valueStr === '' || valueStr[0] === '\n')
        ws = '';
    str += ws + valueStr;
    if (ctx.inFlow) {
        if (valueCommentDone && onComment)
            onComment();
    }
    else if (valueComment && !valueCommentDone) {
        str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));
    }
    else if (chompKeep && onChompKeep) {
        onChompKeep();
    }
    return str;
}

exports.stringifyPair = stringifyPair;
'use strict';

var Scalar = require('../nodes/Scalar.js');
var foldFlowLines = require('./foldFlowLines.js');

const getFoldOptions = (ctx) => ({
    indentAtStart: ctx.indentAtStart,
    lineWidth: ctx.options.lineWidth,
    minContentWidth: ctx.options.minContentWidth
});
// Also checks for lines starting with %, as parsing the output as YAML 1.1 will
// presume that's starting a new document.
const containsDocumentMarker = (str) => /^(%|---|\.\.\.)/m.test(str);
function lineLengthOverLimit(str, lineWidth, indentLength) {
    if (!lineWidth || lineWidth < 0)
        return false;
    const limit = lineWidth - indentLength;
    const strLen = str.length;
    if (strLen <= limit)
        return false;
    for (let i = 0, start = 0; i < strLen; ++i) {
        if (str[i] === '\n') {
            if (i - start > limit)
                return true;
            start = i + 1;
            if (strLen - start <= limit)
                return false;
        }
    }
    return true;
}
function doubleQuotedString(value, ctx) {
    const json = JSON.stringify(value);
    if (ctx.options.doubleQuotedAsJSON)
        return json;
    const { implicitKey } = ctx;
    const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;
    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');
    let str = '';
    let start = 0;
    for (let i = 0, ch = json[i]; ch; ch = json[++i]) {
        if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') {
            // space before newline needs to be escaped to not be folded
            str += json.slice(start, i) + '\\ ';
            i += 1;
            start = i;
            ch = '\\';
        }
        if (ch === '\\')
            switch (json[i + 1]) {
                case 'u':
                    {
                        str += json.slice(start, i);
                        const code = json.substr(i + 2, 4);
                        switch (code) {
                            case '0000':
                                str += '\\0';
                                break;
                            case '0007':
                                str += '\\a';
                                break;
                            case '000b':
                                str += '\\v';
                                break;
                            case '001b':
                                str += '\\e';
                                break;
                            case '0085':
                                str += '\\N';
                                break;
                            case '00a0':
                                str += '\\_';
                                break;
                            case '2028':
                                str += '\\L';
                                break;
                            case '2029':
                                str += '\\P';
                                break;
                            default:
                                if (code.substr(0, 2) === '00')
                                    str += '\\x' + code.substr(2);
                                else
                                    str += json.substr(i, 6);
                        }
                        i += 5;
                        start = i + 1;
                    }
                    break;
                case 'n':
                    if (implicitKey ||
                        json[i + 2] === '"' ||
                        json.length < minMultiLineLength) {
                        i += 1;
                    }
                    else {
                        // folding will eat first newline
                        str += json.slice(start, i) + '\n\n';
                        while (json[i + 2] === '\\' &&
                            json[i + 3] === 'n' &&
                            json[i + 4] !== '"') {
                            str += '\n';
                            i += 2;
                        }
                        str += indent;
                        // space after newline needs to be escaped to not be folded
                        if (json[i + 2] === ' ')
                            str += '\\';
                        i += 1;
                        start = i + 1;
                    }
                    break;
                default:
                    i += 1;
            }
    }
    str = start ? str + json.slice(start) : json;
    return implicitKey
        ? str
        : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx));
}
function singleQuotedString(value, ctx) {
    if (ctx.options.singleQuote === false ||
        (ctx.implicitKey && value.includes('\n')) ||
        /[ \t]\n|\n[ \t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline
    )
        return doubleQuotedString(value, ctx);
    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');
    const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&\n${indent}`) + "'";
    return ctx.implicitKey
        ? res
        : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx));
}
function quotedString(value, ctx) {
    const { singleQuote } = ctx.options;
    let qs;
    if (singleQuote === false)
        qs = doubleQuotedString;
    else {
        const hasDouble = value.includes('"');
        const hasSingle = value.includes("'");
        if (hasDouble && !hasSingle)
            qs = singleQuotedString;
        else if (hasSingle && !hasDouble)
            qs = doubleQuotedString;
        else
            qs = singleQuote ? singleQuotedString : doubleQuotedString;
    }
    return qs(value, ctx);
}
function blockString({ comment, type, value }, ctx, onComment, onChompKeep) {
    const { blockQuote, commentString, lineWidth } = ctx.options;
    // 1. Block can't end in whitespace unless the last line is non-empty.
    // 2. Strings consisting of only whitespace are best rendered explicitly.
    if (!blockQuote || /\n[\t ]+$/.test(value) || /^\s*$/.test(value)) {
        return quotedString(value, ctx);
    }
    const indent = ctx.indent ||
        (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : '');
    const literal = blockQuote === 'literal'
        ? true
        : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED
            ? false
            : type === Scalar.Scalar.BLOCK_LITERAL
                ? true
                : !lineLengthOverLimit(value, lineWidth, indent.length);
    if (!value)
        return literal ? '|\n' : '>\n';
    // determine chomping from whitespace at value end
    let chomp;
    let endStart;
    for (endStart = value.length; endStart > 0; --endStart) {
        const ch = value[endStart - 1];
        if (ch !== '\n' && ch !== '\t' && ch !== ' ')
            break;
    }
    let end = value.substring(endStart);
    const endNlPos = end.indexOf('\n');
    if (endNlPos === -1) {
        chomp = '-'; // strip
    }
    else if (value === end || endNlPos !== end.length - 1) {
        chomp = '+'; // keep
        if (onChompKeep)
            onChompKeep();
    }
    else {
        chomp = ''; // clip
    }
    if (end) {
        value = value.slice(0, -end.length);
        if (end[end.length - 1] === '\n')
            end = end.slice(0, -1);
        end = end.replace(/\n+(?!\n|$)/g, `$&${indent}`);
    }
    // determine indent indicator from whitespace at value start
    let startWithSpace = false;
    let startEnd;
    let startNlPos = -1;
    for (startEnd = 0; startEnd < value.length; ++startEnd) {
        const ch = value[startEnd];
        if (ch === ' ')
            startWithSpace = true;
        else if (ch === '\n')
            startNlPos = startEnd;
        else
            break;
    }
    let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);
    if (start) {
        value = value.substring(start.length);
        start = start.replace(/\n+/g, `$&${indent}`);
    }
    const indentSize = indent ? '2' : '1'; // root is at -1
    let header = (literal ? '|' : '>') + (startWithSpace ? indentSize : '') + chomp;
    if (comment) {
        header += ' ' + commentString(comment.replace(/ ?[\r\n]+/g, ' '));
        if (onComment)
            onComment();
    }
    if (literal) {
        value = value.replace(/\n+/g, `$&${indent}`);
        return `${header}\n${indent}${start}${value}${end}`;
    }
    value = value
        .replace(/\n+/g, '\n$&')
        .replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded
        //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent
        .replace(/\n+/g, `$&${indent}`);
    const body = foldFlowLines.foldFlowLines(`${start}${value}${end}`, indent, foldFlowLines.FOLD_BLOCK, getFoldOptions(ctx));
    return `${header}\n${indent}${body}`;
}
function plainString(item, ctx, onComment, onChompKeep) {
    const { type, value } = item;
    const { actualString, implicitKey, indent, inFlow } = ctx;
    if ((implicitKey && /[\n[\]{},]/.test(value)) ||
        (inFlow && /[[\]{},]/.test(value))) {
        return quotedString(value, ctx);
    }
    if (!value ||
        /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) {
        // not allowed:
        // - empty string, '-' or '?'
        // - start with an indicator character (except [?:-]) or /[?-] /
        // - '\n ', ': ' or ' \n' anywhere
        // - '#' not preceded by a non-space char
        // - end with ' ' or ':'
        return implicitKey || inFlow || !value.includes('\n')
            ? quotedString(value, ctx)
            : blockString(item, ctx, onComment, onChompKeep);
    }
    if (!implicitKey &&
        !inFlow &&
        type !== Scalar.Scalar.PLAIN &&
        value.includes('\n')) {
        // Where allowed & type not set explicitly, prefer block style for multiline strings
        return blockString(item, ctx, onComment, onChompKeep);
    }
    if (indent === '' && containsDocumentMarker(value)) {
        ctx.forceBlockIndent = true;
        return blockString(item, ctx, onComment, onChompKeep);
    }
    const str = value.replace(/\n+/g, `$&\n${indent}`);
    // Verify that output will be parsed as a string, as e.g. plain numbers and
    // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),
    // and others in v1.1.
    if (actualString) {
        const test = (tag) => { var _a; return tag.default && tag.tag !== 'tag:yaml.org,2002:str' && ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(str)); };
        const { compat, tags } = ctx.doc.schema;
        if (tags.some(test) || (compat === null || compat === void 0 ? void 0 : compat.some(test)))
            return quotedString(value, ctx);
    }
    return implicitKey
        ? str
        : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx));
}
function stringifyString(item, ctx, onComment, onChompKeep) {
    const { implicitKey, inFlow } = ctx;
    const ss = typeof item.value === 'string'
        ? item
        : Object.assign({}, item, { value: String(item.value) });
    let { type } = item;
    if (type !== Scalar.Scalar.QUOTE_DOUBLE) {
        // force double quotes on control characters & unpaired surrogates
        if (/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(ss.value))
            type = Scalar.Scalar.QUOTE_DOUBLE;
    }
    const _stringify = (_type) => {
        switch (_type) {
            case Scalar.Scalar.BLOCK_FOLDED:
            case Scalar.Scalar.BLOCK_LITERAL:
                return implicitKey || inFlow
                    ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers
                    : blockString(ss, ctx, onComment, onChompKeep);
            case Scalar.Scalar.QUOTE_DOUBLE:
                return doubleQuotedString(ss.value, ctx);
            case Scalar.Scalar.QUOTE_SINGLE:
                return singleQuotedString(ss.value, ctx);
            case Scalar.Scalar.PLAIN:
                return plainString(ss, ctx, onComment, onChompKeep);
            default:
                return null;
        }
    };
    let res = _stringify(type);
    if (res === null) {
        const { defaultKeyType, defaultStringType } = ctx.options;
        const t = (implicitKey && defaultKeyType) || defaultStringType;
        res = _stringify(t);
        if (res === null)
            throw new Error(`Unsupported default string type ${t}`);
    }
    return res;
}

exports.stringifyString = stringifyString;
'use strict';

var Node = require('./nodes/Node.js');
var publicApi = require('./public-api.js');
var visit = require('./visit.js');

const scalarChar = {
    BLOCK_FOLDED: '>',
    BLOCK_LITERAL: '|',
    PLAIN: ':',
    QUOTE_DOUBLE: '"',
    QUOTE_SINGLE: "'"
};
function anchorExists(doc, anchor) {
    let found = false;
    visit.visit(doc, {
        Value(_key, node) {
            if (node.anchor === anchor) {
                found = true;
                return visit.visit.BREAK;
            }
        }
    });
    return found;
}
// test harness for yaml-test-suite event tests
function testEvents(src) {
    var _a;
    const docs = publicApi.parseAllDocuments(src);
    const errDoc = docs.find(doc => doc.errors.length > 0);
    const error = errDoc ? errDoc.errors[0].message : null;
    const events = ['+STR'];
    try {
        for (let i = 0; i < docs.length; ++i) {
            const doc = docs[i];
            let root = doc.contents;
            if (Array.isArray(root))
                root = root[0];
            const [rootStart] = doc.range || [0];
            const error = doc.errors[0];
            if (error && (!error.pos || error.pos[0] < rootStart))
                throw new Error();
            let docStart = '+DOC';
            if (doc.directives.docStart)
                docStart += ' ---';
            else if (doc.contents &&
                doc.contents.range[2] === doc.contents.range[0] &&
                !doc.contents.anchor &&
                !doc.contents.tag)
                continue;
            events.push(docStart);
            addEvents(events, doc, (_a = error === null || error === void 0 ? void 0 : error.pos[0]) !== null && _a !== void 0 ? _a : -1, root);
            let docEnd = '-DOC';
            if (doc.directives.docEnd)
                docEnd += ' ...';
            events.push(docEnd);
        }
    }
    catch (e) {
        return { events, error: error !== null && error !== void 0 ? error : e };
    }
    events.push('-STR');
    return { events, error };
}
function addEvents(events, doc, errPos, node) {
    if (!node) {
        events.push('=VAL :');
        return;
    }
    if (errPos !== -1 && Node.isNode(node) && node.range[0] >= errPos)
        throw new Error();
    let props = '';
    let anchor = Node.isScalar(node) || Node.isCollection(node) ? node.anchor : undefined;
    if (anchor) {
        if (/\d$/.test(anchor)) {
            const alt = anchor.replace(/\d$/, '');
            if (anchorExists(doc, alt))
                anchor = alt;
        }
        props = ` &${anchor}`;
    }
    if (Node.isNode(node) && node.tag)
        props += ` <${node.tag}>`;
    if (Node.isMap(node)) {
        const ev = node.flow ? '+MAP {}' : '+MAP';
        events.push(`${ev}${props}`);
        node.items.forEach(({ key, value }) => {
            addEvents(events, doc, errPos, key);
            addEvents(events, doc, errPos, value);
        });
        events.push('-MAP');
    }
    else if (Node.isSeq(node)) {
        const ev = node.flow ? '+SEQ []' : '+SEQ';
        events.push(`${ev}${props}`);
        node.items.forEach(item => {
            addEvents(events, doc, errPos, item);
        });
        events.push('-SEQ');
    }
    else if (Node.isPair(node)) {
        events.push(`+MAP${props}`);
        addEvents(events, doc, errPos, node.key);
        addEvents(events, doc, errPos, node.value);
        events.push('-MAP');
    }
    else if (Node.isAlias(node)) {
        let alias = node.source;
        if (alias && /\d$/.test(alias)) {
            const alt = alias.replace(/\d$/, '');
            if (anchorExists(doc, alt))
                alias = alt;
        }
        events.push(`=ALI${props} *${alias}`);
    }
    else {
        const scalar = scalarChar[String(node.type)];
        if (!scalar)
            throw new Error(`Unexpected node type ${node.type}`);
        const value = node.source
            .replace(/\\/g, '\\\\')
            .replace(/\0/g, '\\0')
            .replace(/\x07/g, '\\a')
            .replace(/\x08/g, '\\b')
            .replace(/\t/g, '\\t')
            .replace(/\n/g, '\\n')
            .replace(/\v/g, '\\v')
            .replace(/\f/g, '\\f')
            .replace(/\r/g, '\\r')
            .replace(/\x1b/g, '\\e');
        events.push(`=VAL${props} ${scalar}${value}`);
    }
}

exports.testEvents = testEvents;
'use strict';

var log = require('./log.js');
var YAMLMap = require('./nodes/YAMLMap.js');
var toJS = require('./nodes/toJS.js');
var map = require('./schema/common/map.js');
var seq = require('./schema/common/seq.js');
var string = require('./schema/common/string.js');
var foldFlowLines = require('./stringify/foldFlowLines.js');
var stringifyNumber = require('./stringify/stringifyNumber.js');
var stringifyString = require('./stringify/stringifyString.js');



exports.debug = log.debug;
exports.warn = log.warn;
exports.findPair = YAMLMap.findPair;
exports.toJS = toJS.toJS;
exports.mapTag = map.map;
exports.seqTag = seq.seq;
exports.stringTag = string.string;
exports.foldFlowLines = foldFlowLines.foldFlowLines;
exports.stringifyNumber = stringifyNumber.stringifyNumber;
exports.stringifyString = stringifyString.stringifyString;
'use strict';

var Node = require('./nodes/Node.js');

const BREAK = Symbol('break visit');
const SKIP = Symbol('skip children');
const REMOVE = Symbol('remove node');
/**
 * Apply a visitor to an AST node or document.
 *
 * Walks through the tree (depth-first) starting from `node`, calling a
 * `visitor` function with three arguments:
 *   - `key`: For sequence values and map `Pair`, the node's index in the
 *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.
 *     `null` for the root node.
 *   - `node`: The current node.
 *   - `path`: The ancestry of the current node.
 *
 * The return value of the visitor may be used to control the traversal:
 *   - `undefined` (default): Do nothing and continue
 *   - `visit.SKIP`: Do not visit the children of this node, continue with next
 *     sibling
 *   - `visit.BREAK`: Terminate traversal completely
 *   - `visit.REMOVE`: Remove the current node, then continue with the next one
 *   - `Node`: Replace the current node, then continue by visiting it
 *   - `number`: While iterating the items of a sequence or map, set the index
 *     of the next step. This is useful especially if the index of the current
 *     node has changed.
 *
 * If `visitor` is a single function, it will be called with all values
 * encountered in the tree, including e.g. `null` values. Alternatively,
 * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,
 * `Alias` and `Scalar` node. To define the same visitor function for more than
 * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)
 * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most
 * specific defined one will be used for each node.
 */
function visit(node, visitor) {
    const visitor_ = initVisitor(visitor);
    if (Node.isDocument(node)) {
        const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));
        if (cd === REMOVE)
            node.contents = null;
    }
    else
        visit_(null, node, visitor_, Object.freeze([]));
}
// Without the `as symbol` casts, TS declares these in the `visit`
// namespace using `var`, but then complains about that because
// `unique symbol` must be `const`.
/** Terminate visit traversal completely */
visit.BREAK = BREAK;
/** Do not visit the children of the current node */
visit.SKIP = SKIP;
/** Remove the current node */
visit.REMOVE = REMOVE;
function visit_(key, node, visitor, path) {
    const ctrl = callVisitor(key, node, visitor, path);
    if (Node.isNode(ctrl) || Node.isPair(ctrl)) {
        replaceNode(key, path, ctrl);
        return visit_(key, ctrl, visitor, path);
    }
    if (typeof ctrl !== 'symbol') {
        if (Node.isCollection(node)) {
            path = Object.freeze(path.concat(node));
            for (let i = 0; i < node.items.length; ++i) {
                const ci = visit_(i, node.items[i], visitor, path);
                if (typeof ci === 'number')
                    i = ci - 1;
                else if (ci === BREAK)
                    return BREAK;
                else if (ci === REMOVE) {
                    node.items.splice(i, 1);
                    i -= 1;
                }
            }
        }
        else if (Node.isPair(node)) {
            path = Object.freeze(path.concat(node));
            const ck = visit_('key', node.key, visitor, path);
            if (ck === BREAK)
                return BREAK;
            else if (ck === REMOVE)
                node.key = null;
            const cv = visit_('value', node.value, visitor, path);
            if (cv === BREAK)
                return BREAK;
            else if (cv === REMOVE)
                node.value = null;
        }
    }
    return ctrl;
}
/**
 * Apply an async visitor to an AST node or document.
 *
 * Walks through the tree (depth-first) starting from `node`, calling a
 * `visitor` function with three arguments:
 *   - `key`: For sequence values and map `Pair`, the node's index in the
 *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.
 *     `null` for the root node.
 *   - `node`: The current node.
 *   - `path`: The ancestry of the current node.
 *
 * The return value of the visitor may be used to control the traversal:
 *   - `Promise`: Must resolve to one of the following values
 *   - `undefined` (default): Do nothing and continue
 *   - `visit.SKIP`: Do not visit the children of this node, continue with next
 *     sibling
 *   - `visit.BREAK`: Terminate traversal completely
 *   - `visit.REMOVE`: Remove the current node, then continue with the next one
 *   - `Node`: Replace the current node, then continue by visiting it
 *   - `number`: While iterating the items of a sequence or map, set the index
 *     of the next step. This is useful especially if the index of the current
 *     node has changed.
 *
 * If `visitor` is a single function, it will be called with all values
 * encountered in the tree, including e.g. `null` values. Alternatively,
 * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,
 * `Alias` and `Scalar` node. To define the same visitor function for more than
 * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)
 * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most
 * specific defined one will be used for each node.
 */
async function visitAsync(node, visitor) {
    const visitor_ = initVisitor(visitor);
    if (Node.isDocument(node)) {
        const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));
        if (cd === REMOVE)
            node.contents = null;
    }
    else
        await visitAsync_(null, node, visitor_, Object.freeze([]));
}
// Without the `as symbol` casts, TS declares these in the `visit`
// namespace using `var`, but then complains about that because
// `unique symbol` must be `const`.
/** Terminate visit traversal completely */
visitAsync.BREAK = BREAK;
/** Do not visit the children of the current node */
visitAsync.SKIP = SKIP;
/** Remove the current node */
visitAsync.REMOVE = REMOVE;
async function visitAsync_(key, node, visitor, path) {
    const ctrl = await callVisitor(key, node, visitor, path);
    if (Node.isNode(ctrl) || Node.isPair(ctrl)) {
        replaceNode(key, path, ctrl);
        return visitAsync_(key, ctrl, visitor, path);
    }
    if (typeof ctrl !== 'symbol') {
        if (Node.isCollection(node)) {
            path = Object.freeze(path.concat(node));
            for (let i = 0; i < node.items.length; ++i) {
                const ci = await visitAsync_(i, node.items[i], visitor, path);
                if (typeof ci === 'number')
                    i = ci - 1;
                else if (ci === BREAK)
                    return BREAK;
                else if (ci === REMOVE) {
                    node.items.splice(i, 1);
                    i -= 1;
                }
            }
        }
        else if (Node.isPair(node)) {
            path = Object.freeze(path.concat(node));
            const ck = await visitAsync_('key', node.key, visitor, path);
            if (ck === BREAK)
                return BREAK;
            else if (ck === REMOVE)
                node.key = null;
            const cv = await visitAsync_('value', node.value, visitor, path);
            if (cv === BREAK)
                return BREAK;
            else if (cv === REMOVE)
                node.value = null;
        }
    }
    return ctrl;
}
function initVisitor(visitor) {
    if (typeof visitor === 'object' &&
        (visitor.Collection || visitor.Node || visitor.Value)) {
        return Object.assign({
            Alias: visitor.Node,
            Map: visitor.Node,
            Scalar: visitor.Node,
            Seq: visitor.Node
        }, visitor.Value && {
            Map: visitor.Value,
            Scalar: visitor.Value,
            Seq: visitor.Value
        }, visitor.Collection && {
            Map: visitor.Collection,
            Seq: visitor.Collection
        }, visitor);
    }
    return visitor;
}
function callVisitor(key, node, visitor, path) {
    var _a, _b, _c, _d, _e;
    if (typeof visitor === 'function')
        return visitor(key, node, path);
    if (Node.isMap(node))
        return (_a = visitor.Map) === null || _a === void 0 ? void 0 : _a.call(visitor, key, node, path);
    if (Node.isSeq(node))
        return (_b = visitor.Seq) === null || _b === void 0 ? void 0 : _b.call(visitor, key, node, path);
    if (Node.isPair(node))
        return (_c = visitor.Pair) === null || _c === void 0 ? void 0 : _c.call(visitor, key, node, path);
    if (Node.isScalar(node))
        return (_d = visitor.Scalar) === null || _d === void 0 ? void 0 : _d.call(visitor, key, node, path);
    if (Node.isAlias(node))
        return (_e = visitor.Alias) === null || _e === void 0 ? void 0 : _e.call(visitor, key, node, path);
    return undefined;
}
function replaceNode(key, path, node) {
    const parent = path[path.length - 1];
    if (Node.isCollection(parent)) {
        parent.items[key] = node;
    }
    else if (Node.isPair(parent)) {
        if (key === 'key')
            parent.key = node;
        else
            parent.value = node;
    }
    else if (Node.isDocument(parent)) {
        parent.contents = node;
    }
    else {
        const pt = Node.isAlias(parent) ? 'alias' : 'scalar';
        throw new Error(`Cannot replace node with ${pt} parent`);
    }
}

exports.visit = visit;
exports.visitAsync = visitAsync;
Copyright Eemeli Aro <eemeli@gmail.com>

Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
{
  "name": "yaml",
  "version": "2.0.1",
  "license": "ISC",
  "author": "Eemeli Aro <eemeli@gmail.com>",
  "repository": "github:eemeli/yaml",
  "description": "JavaScript parser and stringifier for YAML",
  "homepage": "https://eemeli.org/yaml/",
  "files": [
    "browser/",
    "dist/",
    "util.d.ts",
    "util.js"
  ],
  "type": "commonjs",
  "main": "./dist/index.js",
  "browser": {
    "./dist/index.js": "./browser/index.js",
    "./dist/util.js": "./browser/dist/util.js",
    "./util.js": "./browser/dist/util.js"
  },
  "exports": {
    ".": {
      "node": "./dist/index.js",
      "default": "./browser/index.js"
    },
    "./package.json": "./package.json",
    "./util": {
      "node": "./dist/util.js",
      "default": "./browser/dist/util.js"
    }
  },
  "browserslist": "defaults, not ie 11",
  "prettier": {
    "arrowParens": "avoid",
    "semi": false,
    "singleQuote": true,
    "trailingComma": "none"
  },
  "devDependencies": {
    "@babel/core": "^7.12.10",
    "@babel/plugin-proposal-class-properties": "^7.12.1",
    "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
    "@babel/plugin-transform-typescript": "^7.12.17",
    "@babel/preset-env": "^7.12.11",
    "@rollup/plugin-babel": "^5.2.3",
    "@rollup/plugin-replace": "^4.0.0",
    "@rollup/plugin-typescript": "^8.1.1",
    "@types/jest": "^27.0.1",
    "@types/node": "^12.20.47",
    "@typescript-eslint/eslint-plugin": "^5.3.1",
    "@typescript-eslint/parser": "^5.3.1",
    "babel-jest": "^27.0.1",
    "cross-env": "^7.0.3",
    "eslint": "^8.2.0",
    "eslint-config-prettier": "^8.1.0",
    "fast-check": "^2.12.0",
    "jest": "^27.0.1",
    "jest-ts-webcompat-resolver": "^1.0.0",
    "prettier": "^2.2.1",
    "rollup": "^2.38.2",
    "tslib": "^2.1.0",
    "typescript": "^4.3.5"
  },
  "engines": {
    "node": ">= 14"
  }
}// Re-exporter for Node.js < 12.16.0
module.exports = require('./dist/util.js')
var camelCase = require('camelcase')
var decamelize = require('decamelize')
var path = require('path')
var tokenizeArgString = require('./lib/tokenize-arg-string')
var util = require('util')

function parse (args, opts) {
  if (!opts) opts = {}
  // allow a string argument to be passed in rather
  // than an argv array.
  args = tokenizeArgString(args)

  // aliases might have transitive relationships, normalize this.
  var aliases = combineAliases(opts.alias || {})
  var configuration = Object.assign({
    'short-option-groups': true,
    'camel-case-expansion': true,
    'dot-notation': true,
    'parse-numbers': true,
    'boolean-negation': true,
    'negation-prefix': 'no-',
    'duplicate-arguments-array': true,
    'flatten-duplicate-arrays': true,
    'populate--': false,
    'combine-arrays': false,
    'set-placeholder-key': false,
    'halt-at-non-option': false,
    'strip-aliased': false,
    'strip-dashed': false
  }, opts.configuration)
  var defaults = opts.default || {}
  var configObjects = opts.configObjects || []
  var envPrefix = opts.envPrefix
  var notFlagsOption = configuration['populate--']
  var notFlagsArgv = notFlagsOption ? '--' : '_'
  var newAliases = {}
  // allow a i18n handler to be passed in, default to a fake one (util.format).
  var __ = opts.__ || util.format
  var error = null
  var flags = {
    aliases: {},
    arrays: {},
    bools: {},
    strings: {},
    numbers: {},
    counts: {},
    normalize: {},
    configs: {},
    defaulted: {},
    nargs: {},
    coercions: {},
    keys: []
  }
  var negative = /^-[0-9]+(\.[0-9]+)?/
  var negatedBoolean = new RegExp('^--' + configuration['negation-prefix'] + '(.+)')

  ;[].concat(opts.array).filter(Boolean).forEach(function (opt) {
    var key = opt.key || opt

    // assign to flags[bools|strings|numbers]
    const assignment = Object.keys(opt).map(function (key) {
      return ({
        boolean: 'bools',
        string: 'strings',
        number: 'numbers'
      })[key]
    }).filter(Boolean).pop()

    // assign key to be coerced
    if (assignment) {
      flags[assignment][key] = true
    }

    flags.arrays[key] = true
    flags.keys.push(key)
  })

  ;[].concat(opts.boolean).filter(Boolean).forEach(function (key) {
    flags.bools[key] = true
    flags.keys.push(key)
  })

  ;[].concat(opts.string).filter(Boolean).forEach(function (key) {
    flags.strings[key] = true
    flags.keys.push(key)
  })

  ;[].concat(opts.number).filter(Boolean).forEach(function (key) {
    flags.numbers[key] = true
    flags.keys.push(key)
  })

  ;[].concat(opts.count).filter(Boolean).forEach(function (key) {
    flags.counts[key] = true
    flags.keys.push(key)
  })

  ;[].concat(opts.normalize).filter(Boolean).forEach(function (key) {
    flags.normalize[key] = true
    flags.keys.push(key)
  })

  Object.keys(opts.narg || {}).forEach(function (k) {
    flags.nargs[k] = opts.narg[k]
    flags.keys.push(k)
  })

  Object.keys(opts.coerce || {}).forEach(function (k) {
    flags.coercions[k] = opts.coerce[k]
    flags.keys.push(k)
  })

  if (Array.isArray(opts.config) || typeof opts.config === 'string') {
    ;[].concat(opts.config).filter(Boolean).forEach(function (key) {
      flags.configs[key] = true
    })
  } else {
    Object.keys(opts.config || {}).forEach(function (k) {
      flags.configs[k] = opts.config[k]
    })
  }

  // create a lookup table that takes into account all
  // combinations of aliases: {f: ['foo'], foo: ['f']}
  extendAliases(opts.key, aliases, opts.default, flags.arrays)

  // apply default values to all aliases.
  Object.keys(defaults).forEach(function (key) {
    (flags.aliases[key] || []).forEach(function (alias) {
      defaults[alias] = defaults[key]
    })
  })

  var argv = { _: [] }

  Object.keys(flags.bools).forEach(function (key) {
    if (Object.prototype.hasOwnProperty.call(defaults, key)) {
      setArg(key, defaults[key])
      setDefaulted(key)
    }
  })

  var notFlags = []

  for (var i = 0; i < args.length; i++) {
    var arg = args[i]
    var broken
    var key
    var letters
    var m
    var next
    var value

    // -- separated by =
    if (arg.match(/^--.+=/) || (
      !configuration['short-option-groups'] && arg.match(/^-.+=/)
    )) {
      // Using [\s\S] instead of . because js doesn't support the
      // 'dotall' regex modifier. See:
      // http://stackoverflow.com/a/1068308/13216
      m = arg.match(/^--?([^=]+)=([\s\S]*)$/)

      // nargs format = '--f=monkey washing cat'
      if (checkAllAliases(m[1], flags.nargs)) {
        args.splice(i + 1, 0, m[2])
        i = eatNargs(i, m[1], args)
      // arrays format = '--f=a b c'
      } else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) {
        args.splice(i + 1, 0, m[2])
        i = eatArray(i, m[1], args)
      } else {
        setArg(m[1], m[2])
      }
    } else if (arg.match(negatedBoolean) && configuration['boolean-negation']) {
      key = arg.match(negatedBoolean)[1]
      setArg(key, false)

    // -- seperated by space.
    } else if (arg.match(/^--.+/) || (
      !configuration['short-option-groups'] && arg.match(/^-[^-]+/)
    )) {
      key = arg.match(/^--?(.+)/)[1]

      // nargs format = '--foo a b c'
      if (checkAllAliases(key, flags.nargs)) {
        i = eatNargs(i, key, args)
      // array format = '--foo a b c'
      } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
        i = eatArray(i, key, args)
      } else {
        next = flags.nargs[key] === 0 ? undefined : args[i + 1]

        if (next !== undefined && (!next.match(/^-/) ||
          next.match(negative)) &&
          !checkAllAliases(key, flags.bools) &&
          !checkAllAliases(key, flags.counts)) {
          setArg(key, next)
          i++
        } else if (/^(true|false)$/.test(next)) {
          setArg(key, next)
          i++
        } else {
          setArg(key, defaultValue(key))
        }
      }

    // dot-notation flag seperated by '='.
    } else if (arg.match(/^-.\..+=/)) {
      m = arg.match(/^-([^=]+)=([\s\S]*)$/)
      setArg(m[1], m[2])

    // dot-notation flag seperated by space.
    } else if (arg.match(/^-.\..+/)) {
      next = args[i + 1]
      key = arg.match(/^-(.\..+)/)[1]

      if (next !== undefined && !next.match(/^-/) &&
        !checkAllAliases(key, flags.bools) &&
        !checkAllAliases(key, flags.counts)) {
        setArg(key, next)
        i++
      } else {
        setArg(key, defaultValue(key))
      }
    } else if (arg.match(/^-[^-]+/) && !arg.match(negative)) {
      letters = arg.slice(1, -1).split('')
      broken = false

      for (var j = 0; j < letters.length; j++) {
        next = arg.slice(j + 2)

        if (letters[j + 1] && letters[j + 1] === '=') {
          value = arg.slice(j + 3)
          key = letters[j]

          // nargs format = '-f=monkey washing cat'
          if (checkAllAliases(key, flags.nargs)) {
            args.splice(i + 1, 0, value)
            i = eatNargs(i, key, args)
          // array format = '-f=a b c'
          } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
            args.splice(i + 1, 0, value)
            i = eatArray(i, key, args)
          } else {
            setArg(key, value)
          }

          broken = true
          break
        }

        if (next === '-') {
          setArg(letters[j], next)
          continue
        }

        // current letter is an alphabetic character and next value is a number
        if (/[A-Za-z]/.test(letters[j]) &&
          /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
          setArg(letters[j], next)
          broken = true
          break
        }

        if (letters[j + 1] && letters[j + 1].match(/\W/)) {
          setArg(letters[j], next)
          broken = true
          break
        } else {
          setArg(letters[j], defaultValue(letters[j]))
        }
      }

      key = arg.slice(-1)[0]

      if (!broken && key !== '-') {
        // nargs format = '-f a b c'
        if (checkAllAliases(key, flags.nargs)) {
          i = eatNargs(i, key, args)
        // array format = '-f a b c'
        } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
          i = eatArray(i, key, args)
        } else {
          next = args[i + 1]

          if (next !== undefined && (!/^(-|--)[^-]/.test(next) ||
            next.match(negative)) &&
            !checkAllAliases(key, flags.bools) &&
            !checkAllAliases(key, flags.counts)) {
            setArg(key, next)
            i++
          } else if (/^(true|false)$/.test(next)) {
            setArg(key, next)
            i++
          } else {
            setArg(key, defaultValue(key))
          }
        }
      }
    } else if (arg === '--') {
      notFlags = args.slice(i + 1)
      break
    } else if (configuration['halt-at-non-option']) {
      notFlags = args.slice(i)
      break
    } else {
      argv._.push(maybeCoerceNumber('_', arg))
    }
  }

  // order of precedence:
  // 1. command line arg
  // 2. value from env var
  // 3. value from config file
  // 4. value from config objects
  // 5. configured default value
  applyEnvVars(argv, true) // special case: check env vars that point to config file
  applyEnvVars(argv, false)
  setConfig(argv)
  setConfigObjects()
  applyDefaultsAndAliases(argv, flags.aliases, defaults)
  applyCoercions(argv)
  if (configuration['set-placeholder-key']) setPlaceholderKeys(argv)

  // for any counts either not in args or without an explicit default, set to 0
  Object.keys(flags.counts).forEach(function (key) {
    if (!hasKey(argv, key.split('.'))) setArg(key, 0)
  })

  // '--' defaults to undefined.
  if (notFlagsOption && notFlags.length) argv[notFlagsArgv] = []
  notFlags.forEach(function (key) {
    argv[notFlagsArgv].push(key)
  })

  if (configuration['camel-case-expansion'] && configuration['strip-dashed']) {
    Object.keys(argv).filter(key => key !== '--' && key.includes('-')).forEach(key => {
      delete argv[key]
    })
  }

  if (configuration['strip-aliased']) {
    // XXX Switch to [].concat(...Object.values(aliases)) once node.js 6 is dropped
    ;[].concat(...Object.keys(aliases).map(k => aliases[k])).forEach(alias => {
      if (configuration['camel-case-expansion']) {
        delete argv[alias.split('.').map(prop => camelCase(prop)).join('.')]
      }

      delete argv[alias]
    })
  }

  // how many arguments should we consume, based
  // on the nargs option?
  function eatNargs (i, key, args) {
    var ii
    const toEat = checkAllAliases(key, flags.nargs)

    // nargs will not consume flag arguments, e.g., -abc, --foo,
    // and terminates when one is observed.
    var available = 0
    for (ii = i + 1; ii < args.length; ii++) {
      if (!args[ii].match(/^-[^0-9]/)) available++
      else break
    }

    if (available < toEat) error = Error(__('Not enough arguments following: %s', key))

    const consumed = Math.min(available, toEat)
    for (ii = i + 1; ii < (consumed + i + 1); ii++) {
      setArg(key, args[ii])
    }

    return (i + consumed)
  }

  // if an option is an array, eat all non-hyphenated arguments
  // following it... YUM!
  // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
  function eatArray (i, key, args) {
    var start = i + 1
    var argsToSet = []
    var multipleArrayFlag = i > 0
    for (var ii = i + 1; ii < args.length; ii++) {
      if (/^-/.test(args[ii]) && !negative.test(args[ii])) {
        if (ii === start) {
          setArg(key, defaultForType('array'))
        }
        multipleArrayFlag = true
        break
      }
      i = ii
      argsToSet.push(args[ii])
    }
    if (multipleArrayFlag) {
      setArg(key, argsToSet.map(function (arg) {
        return processValue(key, arg)
      }))
    } else {
      argsToSet.forEach(function (arg) {
        setArg(key, arg)
      })
    }

    return i
  }

  function setArg (key, val) {
    unsetDefaulted(key)

    if (/-/.test(key) && configuration['camel-case-expansion']) {
      var alias = key.split('.').map(function (prop) {
        return camelCase(prop)
      }).join('.')
      addNewAlias(key, alias)
    }

    var value = processValue(key, val)

    var splitKey = key.split('.')
    setKey(argv, splitKey, value)

    // handle populating aliases of the full key
    if (flags.aliases[key] && flags.aliases[key].forEach) {
      flags.aliases[key].forEach(function (x) {
        x = x.split('.')
        setKey(argv, x, value)
      })
    }

    // handle populating aliases of the first element of the dot-notation key
    if (splitKey.length > 1 && configuration['dot-notation']) {
      ;(flags.aliases[splitKey[0]] || []).forEach(function (x) {
        x = x.split('.')

        // expand alias with nested objects in key
        var a = [].concat(splitKey)
        a.shift() // nuke the old key.
        x = x.concat(a)

        setKey(argv, x, value)
      })
    }

    // Set normalize getter and setter when key is in 'normalize' but isn't an array
    if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) {
      var keys = [key].concat(flags.aliases[key] || [])
      keys.forEach(function (key) {
        argv.__defineSetter__(key, function (v) {
          val = path.normalize(v)
        })

        argv.__defineGetter__(key, function () {
          return typeof val === 'string' ? path.normalize(val) : val
        })
      })
    }
  }

  function addNewAlias (key, alias) {
    if (!(flags.aliases[key] && flags.aliases[key].length)) {
      flags.aliases[key] = [alias]
      newAliases[alias] = true
    }
    if (!(flags.aliases[alias] && flags.aliases[alias].length)) {
      addNewAlias(alias, key)
    }
  }

  function processValue (key, val) {
    // strings may be quoted, clean this up as we assign values.
    if (typeof val === 'string' &&
      (val[0] === "'" || val[0] === '"') &&
      val[val.length - 1] === val[0]
    ) {
      val = val.substring(1, val.length - 1)
    }

    // handle parsing boolean arguments --foo=true --bar false.
    if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) {
      if (typeof val === 'string') val = val === 'true'
    }

    var value = maybeCoerceNumber(key, val)

    // increment a count given as arg (either no value or value parsed as boolean)
    if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) {
      value = increment
    }

    // Set normalized value when key is in 'normalize' and in 'arrays'
    if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) {
      if (Array.isArray(val)) value = val.map(path.normalize)
      else value = path.normalize(val)
    }
    return value
  }

  function maybeCoerceNumber (key, value) {
    if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.coercions)) {
      const shouldCoerceNumber = isNumber(value) && configuration['parse-numbers'] && (
        Number.isSafeInteger(Math.floor(value))
      )
      if (shouldCoerceNumber || (!isUndefined(value) && checkAllAliases(key, flags.numbers))) value = Number(value)
    }
    return value
  }

  // set args from config.json file, this should be
  // applied last so that defaults can be applied.
  function setConfig (argv) {
    var configLookup = {}

    // expand defaults/aliases, in-case any happen to reference
    // the config.json file.
    applyDefaultsAndAliases(configLookup, flags.aliases, defaults)

    Object.keys(flags.configs).forEach(function (configKey) {
      var configPath = argv[configKey] || configLookup[configKey]
      if (configPath) {
        try {
          var config = null
          var resolvedConfigPath = path.resolve(process.cwd(), configPath)

          if (typeof flags.configs[configKey] === 'function') {
            try {
              config = flags.configs[configKey](resolvedConfigPath)
            } catch (e) {
              config = e
            }
            if (config instanceof Error) {
              error = config
              return
            }
          } else {
            config = require(resolvedConfigPath)
          }

          setConfigObject(config)
        } catch (ex) {
          if (argv[configKey]) error = Error(__('Invalid JSON config file: %s', configPath))
        }
      }
    })
  }

  // set args from config object.
  // it recursively checks nested objects.
  function setConfigObject (config, prev) {
    Object.keys(config).forEach(function (key) {
      var value = config[key]
      var fullKey = prev ? prev + '.' + key : key

      // if the value is an inner object and we have dot-notation
      // enabled, treat inner objects in config the same as
      // heavily nested dot notations (foo.bar.apple).
      if (typeof value === 'object' && value !== null && !Array.isArray(value) && configuration['dot-notation']) {
        // if the value is an object but not an array, check nested object
        setConfigObject(value, fullKey)
      } else {
        // setting arguments via CLI takes precedence over
        // values within the config file.
        if (!hasKey(argv, fullKey.split('.')) || (flags.defaulted[fullKey]) || (flags.arrays[fullKey] && configuration['combine-arrays'])) {
          setArg(fullKey, value)
        }
      }
    })
  }

  // set all config objects passed in opts
  function setConfigObjects () {
    if (typeof configObjects === 'undefined') return
    configObjects.forEach(function (configObject) {
      setConfigObject(configObject)
    })
  }

  function applyEnvVars (argv, configOnly) {
    if (typeof envPrefix === 'undefined') return

    var prefix = typeof envPrefix === 'string' ? envPrefix : ''
    Object.keys(process.env).forEach(function (envVar) {
      if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) {
        // get array of nested keys and convert them to camel case
        var keys = envVar.split('__').map(function (key, i) {
          if (i === 0) {
            key = key.substring(prefix.length)
          }
          return camelCase(key)
        })

        if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && (!hasKey(argv, keys) || flags.defaulted[keys.join('.')])) {
          setArg(keys.join('.'), process.env[envVar])
        }
      }
    })
  }

  function applyCoercions (argv) {
    var coerce
    var applied = {}
    Object.keys(argv).forEach(function (key) {
      if (!applied.hasOwnProperty(key)) { // If we haven't already coerced this option via one of its aliases
        coerce = checkAllAliases(key, flags.coercions)
        if (typeof coerce === 'function') {
          try {
            var value = coerce(argv[key])
            ;([].concat(flags.aliases[key] || [], key)).forEach(ali => {
              applied[ali] = argv[ali] = value
            })
          } catch (err) {
            error = err
          }
        }
      }
    })
  }

  function setPlaceholderKeys (argv) {
    flags.keys.forEach((key) => {
      // don't set placeholder keys for dot notation options 'foo.bar'.
      if (~key.indexOf('.')) return
      if (typeof argv[key] === 'undefined') argv[key] = undefined
    })
    return argv
  }

  function applyDefaultsAndAliases (obj, aliases, defaults) {
    Object.keys(defaults).forEach(function (key) {
      if (!hasKey(obj, key.split('.'))) {
        setKey(obj, key.split('.'), defaults[key])

        ;(aliases[key] || []).forEach(function (x) {
          if (hasKey(obj, x.split('.'))) return
          setKey(obj, x.split('.'), defaults[key])
        })
      }
    })
  }

  function hasKey (obj, keys) {
    var o = obj

    if (!configuration['dot-notation']) keys = [keys.join('.')]

    keys.slice(0, -1).forEach(function (key) {
      o = (o[key] || {})
    })

    var key = keys[keys.length - 1]

    if (typeof o !== 'object') return false
    else return key in o
  }

  function setKey (obj, keys, value) {
    var o = obj

    if (!configuration['dot-notation']) keys = [keys.join('.')]

    keys.slice(0, -1).forEach(function (key, index) {
      // TODO(bcoe): in the next major version of yargs, switch to
      // Object.create(null) for dot notation:
      key = sanitizeKey(key)

      if (typeof o === 'object' && o[key] === undefined) {
        o[key] = {}
      }

      if (typeof o[key] !== 'object' || Array.isArray(o[key])) {
        // ensure that o[key] is an array, and that the last item is an empty object.
        if (Array.isArray(o[key])) {
          o[key].push({})
        } else {
          o[key] = [o[key], {}]
        }

        // we want to update the empty object at the end of the o[key] array, so set o to that object
        o = o[key][o[key].length - 1]
      } else {
        o = o[key]
      }
    })

    // TODO(bcoe): in the next major version of yargs, switch to
    // Object.create(null) for dot notation:
    const key = sanitizeKey(keys[keys.length - 1])

    const isTypeArray = checkAllAliases(keys.join('.'), flags.arrays)
    const isValueArray = Array.isArray(value)
    let duplicate = configuration['duplicate-arguments-array']

    // nargs has higher priority than duplicate
    if (!duplicate && checkAllAliases(key, flags.nargs)) {
      duplicate = true
      if ((!isUndefined(o[key]) && flags.nargs[key] === 1) || (Array.isArray(o[key]) && o[key].length === flags.nargs[key])) {
        o[key] = undefined
      }
    }

    if (value === increment) {
      o[key] = increment(o[key])
    } else if (Array.isArray(o[key])) {
      if (duplicate && isTypeArray && isValueArray) {
        o[key] = configuration['flatten-duplicate-arrays'] ? o[key].concat(value) : (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value])
      } else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) {
        o[key] = value
      } else {
        o[key] = o[key].concat([value])
      }
    } else if (o[key] === undefined && isTypeArray) {
      o[key] = isValueArray ? value : [value]
    } else if (duplicate && !(o[key] === undefined || checkAllAliases(key, flags.bools) || checkAllAliases(keys.join('.'), flags.bools) || checkAllAliases(key, flags.counts))) {
      o[key] = [ o[key], value ]
    } else {
      o[key] = value
    }
  }

  // extend the aliases list with inferred aliases.
  function extendAliases (...args) {
    args.forEach(function (obj) {
      Object.keys(obj || {}).forEach(function (key) {
        // short-circuit if we've already added a key
        // to the aliases array, for example it might
        // exist in both 'opts.default' and 'opts.key'.
        if (flags.aliases[key]) return

        flags.aliases[key] = [].concat(aliases[key] || [])
        // For "--option-name", also set argv.optionName
        flags.aliases[key].concat(key).forEach(function (x) {
          if (/-/.test(x) && configuration['camel-case-expansion']) {
            var c = camelCase(x)
            if (c !== key && flags.aliases[key].indexOf(c) === -1) {
              flags.aliases[key].push(c)
              newAliases[c] = true
            }
          }
        })
        // For "--optionName", also set argv['option-name']
        flags.aliases[key].concat(key).forEach(function (x) {
          if (x.length > 1 && /[A-Z]/.test(x) && configuration['camel-case-expansion']) {
            var c = decamelize(x, '-')
            if (c !== key && flags.aliases[key].indexOf(c) === -1) {
              flags.aliases[key].push(c)
              newAliases[c] = true
            }
          }
        })
        flags.aliases[key].forEach(function (x) {
          flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) {
            return x !== y
          }))
        })
      })
    })
  }

  // check if a flag is set for any of a key's aliases.
  function checkAllAliases (key, flag) {
    var isSet = false
    var toCheck = [].concat(flags.aliases[key] || [], key)

    toCheck.forEach(function (key) {
      if (flag[key]) isSet = flag[key]
    })

    return isSet
  }

  function setDefaulted (key) {
    [].concat(flags.aliases[key] || [], key).forEach(function (k) {
      flags.defaulted[k] = true
    })
  }

  function unsetDefaulted (key) {
    [].concat(flags.aliases[key] || [], key).forEach(function (k) {
      delete flags.defaulted[k]
    })
  }

  // make a best effor to pick a default value
  // for an option based on name and type.
  function defaultValue (key) {
    if (!checkAllAliases(key, flags.bools) &&
        !checkAllAliases(key, flags.counts) &&
        `${key}` in defaults) {
      return defaults[key]
    } else {
      return defaultForType(guessType(key))
    }
  }

  // return a default value, given the type of a flag.,
  // e.g., key of type 'string' will default to '', rather than 'true'.
  function defaultForType (type) {
    var def = {
      boolean: true,
      string: '',
      number: undefined,
      array: []
    }

    return def[type]
  }

  // given a flag, enforce a default type.
  function guessType (key) {
    var type = 'boolean'

    if (checkAllAliases(key, flags.strings)) type = 'string'
    else if (checkAllAliases(key, flags.numbers)) type = 'number'
    else if (checkAllAliases(key, flags.arrays)) type = 'array'

    return type
  }

  function isNumber (x) {
    if (x === null || x === undefined) return false
    // if loaded from config, may already be a number.
    if (typeof x === 'number') return true
    // hexadecimal.
    if (/^0x[0-9a-f]+$/i.test(x)) return true
    // don't treat 0123 as a number; as it drops the leading '0'.
    if (x.length > 1 && x[0] === '0') return false
    return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x)
  }

  function isUndefined (num) {
    return num === undefined
  }

  return {
    argv: argv,
    error: error,
    aliases: flags.aliases,
    newAliases: newAliases,
    configuration: configuration
  }
}

// if any aliases reference each other, we should
// merge them together.
function combineAliases (aliases) {
  var aliasArrays = []
  var change = true
  var combined = {}

  // turn alias lookup hash {key: ['alias1', 'alias2']} into
  // a simple array ['key', 'alias1', 'alias2']
  Object.keys(aliases).forEach(function (key) {
    aliasArrays.push(
      [].concat(aliases[key], key)
    )
  })

  // combine arrays until zero changes are
  // made in an iteration.
  while (change) {
    change = false
    for (var i = 0; i < aliasArrays.length; i++) {
      for (var ii = i + 1; ii < aliasArrays.length; ii++) {
        var intersect = aliasArrays[i].filter(function (v) {
          return aliasArrays[ii].indexOf(v) !== -1
        })

        if (intersect.length) {
          aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii])
          aliasArrays.splice(ii, 1)
          change = true
          break
        }
      }
    }
  }

  // map arrays back to the hash-lookup (de-dupe while
  // we're at it).
  aliasArrays.forEach(function (aliasArray) {
    aliasArray = aliasArray.filter(function (v, i, self) {
      return self.indexOf(v) === i
    })
    combined[aliasArray.pop()] = aliasArray
  })

  return combined
}

// this function should only be called when a count is given as an arg
// it is NOT called to set a default value
// thus we can start the count at 1 instead of 0
function increment (orig) {
  return orig !== undefined ? orig + 1 : 1
}

function Parser (args, opts) {
  var result = parse(args.slice(), opts)

  return result.argv
}

// parse arguments and return detailed
// meta information, aliases, etc.
Parser.detailed = function (args, opts) {
  return parse(args.slice(), opts)
}

// TODO(bcoe): in the next major version of yargs, switch to
// Object.create(null) for dot notation:
function sanitizeKey (key) {
  if (key === '__proto__') return '___proto___'
  return key
}

module.exports = Parser
// take an un-split argv string and tokenize it.
module.exports = function (argString) {
  if (Array.isArray(argString)) {
    return argString.map(e => typeof e !== 'string' ? e + '' : e)
  }

  argString = argString.trim()

  var i = 0
  var prevC = null
  var c = null
  var opening = null
  var args = []

  for (var ii = 0; ii < argString.length; ii++) {
    prevC = c
    c = argString.charAt(ii)

    // split on spaces unless we're in quotes.
    if (c === ' ' && !opening) {
      if (!(prevC === ' ')) {
        i++
      }
      continue
    }

    // don't split the string if we're in matching
    // opening or closing single and double quotes.
    if (c === opening) {
      opening = null
    } else if ((c === "'" || c === '"') && !opening) {
      opening = c
    }

    if (!args[i]) args[i] = ''
    args[i] += c
  }

  return args
}
Copyright (c) 2016, Contributors

Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
that the above copyright notice and this permission notice
appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
{
  "name": "yargs-parser",
  "version": "13.1.2",
  "description": "the mighty option parser used by yargs",
  "main": "index.js",
  "repository": {
    "url": "git@github.com:yargs/yargs-parser.git"
  },
  "author": "Ben Coe <ben@npmjs.com>",
  "license": "ISC",
  "devDependencies": {
    "chai": "^4.2.0",
    "coveralls": "^3.0.2",
    "mocha": "^5.2.0",
    "nyc": "^14.1.0",
    "standard": "^12.0.1",
    "standard-version": "^6.0.0"
  },
  "dependencies": {
    "camelcase": "^5.0.0",
    "decamelize": "^1.2.0"
  },
  "files": [
    "lib",
    "index.js"
  ],
  "engine": {
    "node": ">=6"
  }
}'use strict'
// classic singleton yargs API, to use yargs
// without running as a singleton do:
// require('yargs/yargs')(process.argv.slice(2))
const yargs = require('./yargs')

Argv(process.argv.slice(2))

module.exports = Argv

function Argv (processArgs, cwd) {
  const argv = yargs(processArgs, cwd, require)
  singletonify(argv)
  return argv
}

/*  Hack an instance of Argv with process.argv into Argv
    so people can do
    require('yargs')(['--beeble=1','-z','zizzle']).argv
    to parse a list of args and
    require('yargs').argv
    to get a parsed version of process.argv.
*/
function singletonify (inst) {
  Object.keys(inst).forEach((key) => {
    if (key === 'argv') {
      Argv.__defineGetter__(key, inst.__lookupGetter__(key))
    } else {
      Argv[key] = typeof inst[key] === 'function' ? inst[key].bind(inst) : inst[key]
    }
  })
}

'use strict'
const fs = require('fs')
const path = require('path')
const YError = require('./yerror')

let previouslyVisitedConfigs = []

function checkForCircularExtends (cfgPath) {
  if (previouslyVisitedConfigs.indexOf(cfgPath) > -1) {
    throw new YError(`Circular extended configurations: '${cfgPath}'.`)
  }
}

function getPathToDefaultConfig (cwd, pathToExtend) {
  return path.resolve(cwd, pathToExtend)
}

function applyExtends (config, cwd) {
  let defaultConfig = {}

  if (config.hasOwnProperty('extends')) {
    if (typeof config.extends !== 'string') return defaultConfig
    const isPath = /\.json|\..*rc$/.test(config.extends)
    let pathToDefault = null
    if (!isPath) {
      try {
        pathToDefault = require.resolve(config.extends)
      } catch (err) {
        // most likely this simply isn't a module.
      }
    } else {
      pathToDefault = getPathToDefaultConfig(cwd, config.extends)
    }
    // maybe the module uses key for some other reason,
    // err on side of caution.
    if (!pathToDefault && !isPath) return config

    checkForCircularExtends(pathToDefault)

    previouslyVisitedConfigs.push(pathToDefault)

    defaultConfig = isPath ? JSON.parse(fs.readFileSync(pathToDefault, 'utf8')) : require(config.extends)
    delete config.extends
    defaultConfig = applyExtends(defaultConfig, path.dirname(pathToDefault))
  }

  previouslyVisitedConfigs = []

  return Object.assign({}, defaultConfig, config)
}

module.exports = applyExtends
'use strict'

// hoisted due to circular dependency on command.
module.exports = argsert
const command = require('./command')()
const YError = require('./yerror')

const positionName = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth']
function argsert (expected, callerArguments, length) {
  // TODO: should this eventually raise an exception.
  try {
    // preface the argument description with "cmd", so
    // that we can run it through yargs' command parser.
    let position = 0
    let parsed = { demanded: [], optional: [] }
    if (typeof expected === 'object') {
      length = callerArguments
      callerArguments = expected
    } else {
      parsed = command.parseCommand(`cmd ${expected}`)
    }
    const args = [].slice.call(callerArguments)

    while (args.length && args[args.length - 1] === undefined) args.pop()
    length = length || args.length

    if (length < parsed.demanded.length) {
      throw new YError(`Not enough arguments provided. Expected ${parsed.demanded.length} but received ${args.length}.`)
    }

    const totalCommands = parsed.demanded.length + parsed.optional.length
    if (length > totalCommands) {
      throw new YError(`Too many arguments provided. Expected max ${totalCommands} but received ${length}.`)
    }

    parsed.demanded.forEach((demanded) => {
      const arg = args.shift()
      const observedType = guessType(arg)
      const matchingTypes = demanded.cmd.filter(type => type === observedType || type === '*')
      if (matchingTypes.length === 0) argumentTypeError(observedType, demanded.cmd, position, false)
      position += 1
    })

    parsed.optional.forEach((optional) => {
      if (args.length === 0) return
      const arg = args.shift()
      const observedType = guessType(arg)
      const matchingTypes = optional.cmd.filter(type => type === observedType || type === '*')
      if (matchingTypes.length === 0) argumentTypeError(observedType, optional.cmd, position, true)
      position += 1
    })
  } catch (err) {
    console.warn(err.stack)
  }
}

function guessType (arg) {
  if (Array.isArray(arg)) {
    return 'array'
  } else if (arg === null) {
    return 'null'
  }
  return typeof arg
}

function argumentTypeError (observedType, allowedTypes, position, optional) {
  throw new YError(`Invalid ${positionName[position] || 'manyith'} argument. Expected ${allowedTypes.join(' or ')} but received ${observedType}.`)
}
'use strict'

const inspect = require('util').inspect
const isPromise = require('./is-promise')
const { applyMiddleware, commandMiddlewareFactory } = require('./middleware')
const path = require('path')
const Parser = require('yargs-parser')

const DEFAULT_MARKER = /(^\*)|(^\$0)/

// handles parsing positional arguments,
// and populating argv with said positional
// arguments.
module.exports = function command (yargs, usage, validation, globalMiddleware) {
  const self = {}
  let handlers = {}
  let aliasMap = {}
  let defaultCommand
  globalMiddleware = globalMiddleware || []

  self.addHandler = function addHandler (cmd, description, builder, handler, commandMiddleware) {
    let aliases = []
    const middlewares = commandMiddlewareFactory(commandMiddleware)
    handler = handler || (() => {})

    if (Array.isArray(cmd)) {
      aliases = cmd.slice(1)
      cmd = cmd[0]
    } else if (typeof cmd === 'object') {
      let command = (Array.isArray(cmd.command) || typeof cmd.command === 'string') ? cmd.command : moduleName(cmd)
      if (cmd.aliases) command = [].concat(command).concat(cmd.aliases)
      self.addHandler(command, extractDesc(cmd), cmd.builder, cmd.handler, cmd.middlewares)
      return
    }

    // allow a module to be provided instead of separate builder and handler
    if (typeof builder === 'object' && builder.builder && typeof builder.handler === 'function') {
      self.addHandler([cmd].concat(aliases), description, builder.builder, builder.handler, builder.middlewares)
      return
    }

    // parse positionals out of cmd string
    const parsedCommand = self.parseCommand(cmd)

    // remove positional args from aliases only
    aliases = aliases.map(alias => self.parseCommand(alias).cmd)

    // check for default and filter out '*''
    let isDefault = false
    const parsedAliases = [parsedCommand.cmd].concat(aliases).filter((c) => {
      if (DEFAULT_MARKER.test(c)) {
        isDefault = true
        return false
      }
      return true
    })

    // standardize on $0 for default command.
    if (parsedAliases.length === 0 && isDefault) parsedAliases.push('$0')

    // shift cmd and aliases after filtering out '*'
    if (isDefault) {
      parsedCommand.cmd = parsedAliases[0]
      aliases = parsedAliases.slice(1)
      cmd = cmd.replace(DEFAULT_MARKER, parsedCommand.cmd)
    }

    // populate aliasMap
    aliases.forEach((alias) => {
      aliasMap[alias] = parsedCommand.cmd
    })

    if (description !== false) {
      usage.command(cmd, description, isDefault, aliases)
    }

    handlers[parsedCommand.cmd] = {
      original: cmd,
      description: description,
      handler,
      builder: builder || {},
      middlewares: middlewares || [],
      demanded: parsedCommand.demanded,
      optional: parsedCommand.optional
    }

    if (isDefault) defaultCommand = handlers[parsedCommand.cmd]
  }

  self.addDirectory = function addDirectory (dir, context, req, callerFile, opts) {
    opts = opts || {}
    // disable recursion to support nested directories of subcommands
    if (typeof opts.recurse !== 'boolean') opts.recurse = false
    // exclude 'json', 'coffee' from require-directory defaults
    if (!Array.isArray(opts.extensions)) opts.extensions = ['js']
    // allow consumer to define their own visitor function
    const parentVisit = typeof opts.visit === 'function' ? opts.visit : o => o
    // call addHandler via visitor function
    opts.visit = function visit (obj, joined, filename) {
      const visited = parentVisit(obj, joined, filename)
      // allow consumer to skip modules with their own visitor
      if (visited) {
        // check for cyclic reference
        // each command file path should only be seen once per execution
        if (~context.files.indexOf(joined)) return visited
        // keep track of visited files in context.files
        context.files.push(joined)
        self.addHandler(visited)
      }
      return visited
    }
    require('require-directory')({ require: req, filename: callerFile }, dir, opts)
  }

  // lookup module object from require()d command and derive name
  // if module was not require()d and no name given, throw error
  function moduleName (obj) {
    const mod = require('which-module')(obj)
    if (!mod) throw new Error(`No command name given for module: ${inspect(obj)}`)
    return commandFromFilename(mod.filename)
  }

  // derive command name from filename
  function commandFromFilename (filename) {
    return path.basename(filename, path.extname(filename))
  }

  function extractDesc (obj) {
    for (let keys = ['describe', 'description', 'desc'], i = 0, l = keys.length, test; i < l; i++) {
      test = obj[keys[i]]
      if (typeof test === 'string' || typeof test === 'boolean') return test
    }
    return false
  }

  self.parseCommand = function parseCommand (cmd) {
    const extraSpacesStrippedCommand = cmd.replace(/\s{2,}/g, ' ')
    const splitCommand = extraSpacesStrippedCommand.split(/\s+(?![^[]*]|[^<]*>)/)
    const bregex = /\.*[\][<>]/g
    const parsedCommand = {
      cmd: (splitCommand.shift()).replace(bregex, ''),
      demanded: [],
      optional: []
    }
    splitCommand.forEach((cmd, i) => {
      let variadic = false
      cmd = cmd.replace(/\s/g, '')
      if (/\.+[\]>]/.test(cmd) && i === splitCommand.length - 1) variadic = true
      if (/^\[/.test(cmd)) {
        parsedCommand.optional.push({
          cmd: cmd.replace(bregex, '').split('|'),
          variadic
        })
      } else {
        parsedCommand.demanded.push({
          cmd: cmd.replace(bregex, '').split('|'),
          variadic
        })
      }
    })
    return parsedCommand
  }

  self.getCommands = () => Object.keys(handlers).concat(Object.keys(aliasMap))

  self.getCommandHandlers = () => handlers

  self.hasDefaultCommand = () => !!defaultCommand

  self.runCommand = function runCommand (command, yargs, parsed, commandIndex) {
    let aliases = parsed.aliases
    const commandHandler = handlers[command] || handlers[aliasMap[command]] || defaultCommand
    const currentContext = yargs.getContext()
    let numFiles = currentContext.files.length
    const parentCommands = currentContext.commands.slice()

    // what does yargs look like after the buidler is run?
    let innerArgv = parsed.argv
    let innerYargs = null
    let positionalMap = {}
    if (command) {
      currentContext.commands.push(command)
      currentContext.fullCommands.push(commandHandler.original)
    }
    if (typeof commandHandler.builder === 'function') {
      // a function can be provided, which builds
      // up a yargs chain and possibly returns it.
      innerYargs = commandHandler.builder(yargs.reset(parsed.aliases))
      // if the builder function did not yet parse argv with reset yargs
      // and did not explicitly set a usage() string, then apply the
      // original command string as usage() for consistent behavior with
      // options object below.
      if (yargs.parsed === false) {
        if (shouldUpdateUsage(yargs)) {
          yargs.getUsageInstance().usage(
            usageFromParentCommandsCommandHandler(parentCommands, commandHandler),
            commandHandler.description
          )
        }
        innerArgv = innerYargs ? innerYargs._parseArgs(null, null, true, commandIndex) : yargs._parseArgs(null, null, true, commandIndex)
      } else {
        innerArgv = yargs.parsed.argv
      }

      if (innerYargs && yargs.parsed === false) aliases = innerYargs.parsed.aliases
      else aliases = yargs.parsed.aliases
    } else if (typeof commandHandler.builder === 'object') {
      // as a short hand, an object can instead be provided, specifying
      // the options that a command takes.
      innerYargs = yargs.reset(parsed.aliases)
      if (shouldUpdateUsage(innerYargs)) {
        innerYargs.getUsageInstance().usage(
          usageFromParentCommandsCommandHandler(parentCommands, commandHandler),
          commandHandler.description
        )
      }
      Object.keys(commandHandler.builder).forEach((key) => {
        innerYargs.option(key, commandHandler.builder[key])
      })
      innerArgv = innerYargs._parseArgs(null, null, true, commandIndex)
      aliases = innerYargs.parsed.aliases
    }

    if (!yargs._hasOutput()) {
      positionalMap = populatePositionals(commandHandler, innerArgv, currentContext, yargs)
    }

    const middlewares = globalMiddleware.slice(0).concat(commandHandler.middlewares || [])
    applyMiddleware(innerArgv, yargs, middlewares, true)

    // we apply validation post-hoc, so that custom
    // checks get passed populated positional arguments.
    if (!yargs._hasOutput()) yargs._runValidation(innerArgv, aliases, positionalMap, yargs.parsed.error)

    if (commandHandler.handler && !yargs._hasOutput()) {
      yargs._setHasOutput()

      innerArgv = applyMiddleware(innerArgv, yargs, middlewares, false)

      const handlerResult = isPromise(innerArgv)
        ? innerArgv.then(argv => commandHandler.handler(argv))
        : commandHandler.handler(innerArgv)

      if (isPromise(handlerResult)) {
        handlerResult.catch(error =>
          yargs.getUsageInstance().fail(null, error)
        )
      }
    }

    if (command) {
      currentContext.commands.pop()
      currentContext.fullCommands.pop()
    }
    numFiles = currentContext.files.length - numFiles
    if (numFiles > 0) currentContext.files.splice(numFiles * -1, numFiles)

    return innerArgv
  }

  function shouldUpdateUsage (yargs) {
    return !yargs.getUsageInstance().getUsageDisabled() &&
      yargs.getUsageInstance().getUsage().length === 0
  }

  function usageFromParentCommandsCommandHandler (parentCommands, commandHandler) {
    const c = DEFAULT_MARKER.test(commandHandler.original) ? commandHandler.original.replace(DEFAULT_MARKER, '').trim() : commandHandler.original
    const pc = parentCommands.filter((c) => { return !DEFAULT_MARKER.test(c) })
    pc.push(c)
    return `$0 ${pc.join(' ')}`
  }

  self.runDefaultBuilderOn = function (yargs) {
    if (shouldUpdateUsage(yargs)) {
      // build the root-level command string from the default string.
      const commandString = DEFAULT_MARKER.test(defaultCommand.original)
        ? defaultCommand.original : defaultCommand.original.replace(/^[^[\]<>]*/, '$0 ')
      yargs.getUsageInstance().usage(
        commandString,
        defaultCommand.description
      )
    }
    const builder = defaultCommand.builder
    if (typeof builder === 'function') {
      builder(yargs)
    } else {
      Object.keys(builder).forEach((key) => {
        yargs.option(key, builder[key])
      })
    }
  }

  // transcribe all positional arguments "command <foo> <bar> [apple]"
  // onto argv.
  function populatePositionals (commandHandler, argv, context, yargs) {
    argv._ = argv._.slice(context.commands.length) // nuke the current commands
    const demanded = commandHandler.demanded.slice(0)
    const optional = commandHandler.optional.slice(0)
    const positionalMap = {}

    validation.positionalCount(demanded.length, argv._.length)

    while (demanded.length) {
      const demand = demanded.shift()
      populatePositional(demand, argv, positionalMap)
    }

    while (optional.length) {
      const maybe = optional.shift()
      populatePositional(maybe, argv, positionalMap)
    }

    argv._ = context.commands.concat(argv._)

    postProcessPositionals(argv, positionalMap, self.cmdToParseOptions(commandHandler.original))

    return positionalMap
  }

  function populatePositional (positional, argv, positionalMap, parseOptions) {
    const cmd = positional.cmd[0]
    if (positional.variadic) {
      positionalMap[cmd] = argv._.splice(0).map(String)
    } else {
      if (argv._.length) positionalMap[cmd] = [String(argv._.shift())]
    }
  }

  // we run yargs-parser against the positional arguments
  // applying the same parsing logic used for flags.
  function postProcessPositionals (argv, positionalMap, parseOptions) {
    // combine the parsing hints we've inferred from the command
    // string with explicitly configured parsing hints.
    const options = Object.assign({}, yargs.getOptions())
    options.default = Object.assign(parseOptions.default, options.default)
    options.alias = Object.assign(parseOptions.alias, options.alias)
    options.array = options.array.concat(parseOptions.array)
    delete options.config //  don't load config when processing positionals.

    const unparsed = []
    Object.keys(positionalMap).forEach((key) => {
      positionalMap[key].map((value) => {
        unparsed.push(`--${key}`)
        unparsed.push(value)
      })
    })

    // short-circuit parse.
    if (!unparsed.length) return

    const parsed = Parser.detailed(unparsed, options)

    if (parsed.error) {
      yargs.getUsageInstance().fail(parsed.error.message, parsed.error)
    } else {
      // only copy over positional keys (don't overwrite
      // flag arguments that were already parsed).
      const positionalKeys = Object.keys(positionalMap)
      Object.keys(positionalMap).forEach((key) => {
        [].push.apply(positionalKeys, parsed.aliases[key])
      })

      Object.keys(parsed.argv).forEach((key) => {
        if (positionalKeys.indexOf(key) !== -1) {
          // any new aliases need to be placed in positionalMap, which
          // is used for validation.
          if (!positionalMap[key]) positionalMap[key] = parsed.argv[key]
          argv[key] = parsed.argv[key]
        }
      })
    }
  }

  self.cmdToParseOptions = function (cmdString) {
    const parseOptions = {
      array: [],
      default: {},
      alias: {},
      demand: {}
    }

    const parsed = self.parseCommand(cmdString)
    parsed.demanded.forEach((d) => {
      const cmds = d.cmd.slice(0)
      const cmd = cmds.shift()
      if (d.variadic) {
        parseOptions.array.push(cmd)
        parseOptions.default[cmd] = []
      }
      cmds.forEach((c) => {
        parseOptions.alias[cmd] = c
      })
      parseOptions.demand[cmd] = true
    })

    parsed.optional.forEach((o) => {
      const cmds = o.cmd.slice(0)
      const cmd = cmds.shift()
      if (o.variadic) {
        parseOptions.array.push(cmd)
        parseOptions.default[cmd] = []
      }
      cmds.forEach((c) => {
        parseOptions.alias[cmd] = c
      })
    })

    return parseOptions
  }

  self.reset = () => {
    handlers = {}
    aliasMap = {}
    defaultCommand = undefined
    return self
  }

  // used by yargs.parse() to freeze
  // the state of commands such that
  // we can apply .parse() multiple times
  // with the same yargs instance.
  let frozen
  self.freeze = () => {
    frozen = {}
    frozen.handlers = handlers
    frozen.aliasMap = aliasMap
    frozen.defaultCommand = defaultCommand
  }
  self.unfreeze = () => {
    handlers = frozen.handlers
    aliasMap = frozen.aliasMap
    defaultCommand = frozen.defaultCommand
    frozen = undefined
  }

  return self
}
exports.completionShTemplate =
`###-begin-{{app_name}}-completions-###
#
# yargs command completion script
#
# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc
#    or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX.
#
_yargs_completions()
{
    local cur_word args type_list

    cur_word="\${COMP_WORDS[COMP_CWORD]}"
    args=("\${COMP_WORDS[@]}")

    # ask yargs to generate completions.
    type_list=$({{app_path}} --get-yargs-completions "\${args[@]}")

    COMPREPLY=( $(compgen -W "\${type_list}" -- \${cur_word}) )

    # if no match was found, fall back to filename completion
    if [ \${#COMPREPLY[@]} -eq 0 ]; then
      COMPREPLY=()
    fi

    return 0
}
complete -o default -F _yargs_completions {{app_name}}
###-end-{{app_name}}-completions-###
`

exports.completionZshTemplate = `###-begin-{{app_name}}-completions-###
#
# yargs command completion script
#
# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc
#    or {{app_path}} {{completion_command}} >> ~/.zsh_profile on OSX.
#
_{{app_name}}_yargs_completions()
{
  local reply
  local si=$IFS
  IFS=$'\n' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" {{app_path}} --get-yargs-completions "\${words[@]}"))
  IFS=$si
  _describe 'values' reply
}
compdef _{{app_name}}_yargs_completions {{app_name}}
###-end-{{app_name}}-completions-###
`
'use strict'
const path = require('path')

// add bash completions to your
//  yargs-powered applications.
module.exports = function completion (yargs, usage, command) {
  const self = {
    completionKey: 'get-yargs-completions'
  }

  const zshShell = process.env.SHELL && process.env.SHELL.indexOf('zsh') !== -1
  // get a list of completion commands.
  // 'args' is the array of strings from the line to be completed
  self.getCompletion = function getCompletion (args, done) {
    const completions = []
    const current = args.length ? args[args.length - 1] : ''
    const argv = yargs.parse(args, true)
    const aliases = yargs.parsed.aliases
    const parentCommands = yargs.getContext().commands

    // a custom completion function can be provided
    // to completion().
    if (completionFunction) {
      if (completionFunction.length < 3) {
        const result = completionFunction(current, argv)

        // promise based completion function.
        if (typeof result.then === 'function') {
          return result.then((list) => {
            process.nextTick(() => { done(list) })
          }).catch((err) => {
            process.nextTick(() => { throw err })
          })
        }

        // synchronous completion function.
        return done(result)
      } else {
        // asynchronous completion function
        return completionFunction(current, argv, (completions) => {
          done(completions)
        })
      }
    }

    const handlers = command.getCommandHandlers()
    for (let i = 0, ii = args.length; i < ii; ++i) {
      if (handlers[args[i]] && handlers[args[i]].builder) {
        const builder = handlers[args[i]].builder
        if (typeof builder === 'function') {
          const y = yargs.reset()
          builder(y)
          return y.argv
        }
      }
    }

    if (!current.match(/^-/) && parentCommands[parentCommands.length - 1] !== current) {
      usage.getCommands().forEach((usageCommand) => {
        const commandName = command.parseCommand(usageCommand[0]).cmd
        if (args.indexOf(commandName) === -1) {
          if (!zshShell) {
            completions.push(commandName)
          } else {
            const desc = usageCommand[1] || ''
            completions.push(commandName.replace(/:/g, '\\:') + ':' + desc)
          }
        }
      })
    }

    if (current.match(/^-/) || (current === '' && completions.length === 0)) {
      const descs = usage.getDescriptions()
      Object.keys(yargs.getOptions().key).forEach((key) => {
        // If the key and its aliases aren't in 'args', add the key to 'completions'
        const keyAndAliases = [key].concat(aliases[key] || [])
        const notInArgs = keyAndAliases.every(val => args.indexOf(`--${val}`) === -1)
        if (notInArgs) {
          if (!zshShell) {
            completions.push(`--${key}`)
          } else {
            const desc = descs[key] || ''
            completions.push(`--${key.replace(/:/g, '\\:')}:${desc.replace('__yargsString__:', '')}`)
          }
        }
      })
    }

    done(completions)
  }

  // generate the completion script to add to your .bashrc.
  self.generateCompletionScript = function generateCompletionScript ($0, cmd) {
    const templates = require('./completion-templates')
    let script = zshShell ? templates.completionZshTemplate : templates.completionShTemplate
    const name = path.basename($0)

    // add ./to applications not yet installed as bin.
    if ($0.match(/\.js$/)) $0 = `./${$0}`

    script = script.replace(/{{app_name}}/g, name)
    script = script.replace(/{{completion_command}}/g, cmd)
    return script.replace(/{{app_path}}/g, $0)
  }

  // register a function to perform your own custom
  // completions., this function can be either
  // synchrnous or asynchronous.
  let completionFunction = null
  self.registerFunction = (fn) => {
    completionFunction = fn
  }

  return self
}
/*
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
'use strict'

module.exports = (text, separator) => {
  separator = typeof separator === 'undefined' ? '_' : separator

  return text
    .replace(/([a-z\d])([A-Z])/g, `$1${separator}$2`)
    .replace(/([A-Z]+)([A-Z][a-z\d]+)/g, `$1${separator}$2`)
    .toLowerCase()
}
module.exports = function isPromise (maybePromise) {
  return maybePromise instanceof Promise
}
/*
Copyright (c) 2011 Andrei Mackenzie

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

// levenshtein distance algorithm, pulled from Andrei Mackenzie's MIT licensed.
// gist, which can be found here: https://gist.github.com/andrei-m/982927
'use strict'
// Compute the edit distance between the two given strings
module.exports = function levenshtein (a, b) {
  if (a.length === 0) return b.length
  if (b.length === 0) return a.length

  const matrix = []

  // increment along the first column of each row
  let i
  for (i = 0; i <= b.length; i++) {
    matrix[i] = [i]
  }

  // increment each column in the first row
  let j
  for (j = 0; j <= a.length; j++) {
    matrix[0][j] = j
  }

  // Fill in the rest of the matrix
  for (i = 1; i <= b.length; i++) {
    for (j = 1; j <= a.length; j++) {
      if (b.charAt(i - 1) === a.charAt(j - 1)) {
        matrix[i][j] = matrix[i - 1][j - 1]
      } else {
        matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
          Math.min(matrix[i][j - 1] + 1, // insertion
            matrix[i - 1][j] + 1)) // deletion
      }
    }
  }

  return matrix[b.length][a.length]
}
'use strict'

// hoisted due to circular dependency on command.
module.exports = {
  applyMiddleware,
  commandMiddlewareFactory,
  globalMiddlewareFactory
}
const isPromise = require('./is-promise')
const argsert = require('./argsert')

function globalMiddlewareFactory (globalMiddleware, context) {
  return function (callback, applyBeforeValidation = false) {
    argsert('<array|function> [boolean]', [callback, applyBeforeValidation], arguments.length)
    if (Array.isArray(callback)) {
      for (let i = 0; i < callback.length; i++) {
        if (typeof callback[i] !== 'function') {
          throw Error('middleware must be a function')
        }
        callback[i].applyBeforeValidation = applyBeforeValidation
      }
      Array.prototype.push.apply(globalMiddleware, callback)
    } else if (typeof callback === 'function') {
      callback.applyBeforeValidation = applyBeforeValidation
      globalMiddleware.push(callback)
    }
    return context
  }
}

function commandMiddlewareFactory (commandMiddleware) {
  if (!commandMiddleware) return []
  return commandMiddleware.map(middleware => {
    middleware.applyBeforeValidation = false
    return middleware
  })
}

function applyMiddleware (argv, yargs, middlewares, beforeValidation) {
  const beforeValidationError = new Error('middleware cannot return a promise when applyBeforeValidation is true')
  return middlewares
    .reduce((accumulation, middleware) => {
      if (middleware.applyBeforeValidation !== beforeValidation &&
          !isPromise(accumulation)) {
        return accumulation
      }

      if (isPromise(accumulation)) {
        return accumulation
          .then(initialObj =>
            Promise.all([initialObj, middleware(initialObj, yargs)])
          )
          .then(([initialObj, middlewareObj]) =>
            Object.assign(initialObj, middlewareObj)
          )
      } else {
        const result = middleware(argv, yargs)
        if (beforeValidation && isPromise(result)) throw beforeValidationError

        return isPromise(result)
          ? result.then(middlewareObj => Object.assign(accumulation, middlewareObj))
          : Object.assign(accumulation, result)
      }
    }, argv)
}
'use strict'
module.exports = function objFilter (original, filter) {
  const obj = {}
  filter = filter || ((k, v) => true)
  Object.keys(original || {}).forEach((key) => {
    if (filter(key, original[key])) {
      obj[key] = original[key]
    }
  })
  return obj
}
'use strict'
// this file handles outputting usage instructions,
// failures, etc. keeps logging in one place.
const decamelize = require('./decamelize')
const stringWidth = require('string-width')
const objFilter = require('./obj-filter')
const path = require('path')
const setBlocking = require('set-blocking')
const YError = require('./yerror')

module.exports = function usage (yargs, y18n) {
  const __ = y18n.__
  const self = {}

  // methods for ouputting/building failure message.
  const fails = []
  self.failFn = function failFn (f) {
    fails.push(f)
  }

  let failMessage = null
  let showHelpOnFail = true
  self.showHelpOnFail = function showHelpOnFailFn (enabled, message) {
    if (typeof enabled === 'string') {
      message = enabled
      enabled = true
    } else if (typeof enabled === 'undefined') {
      enabled = true
    }
    failMessage = message
    showHelpOnFail = enabled
    return self
  }

  let failureOutput = false
  self.fail = function fail (msg, err) {
    const logger = yargs._getLoggerInstance()

    if (fails.length) {
      for (let i = fails.length - 1; i >= 0; --i) {
        fails[i](msg, err, self)
      }
    } else {
      if (yargs.getExitProcess()) setBlocking(true)

      // don't output failure message more than once
      if (!failureOutput) {
        failureOutput = true
        if (showHelpOnFail) {
          yargs.showHelp('error')
          logger.error()
        }
        if (msg || err) logger.error(msg || err)
        if (failMessage) {
          if (msg || err) logger.error('')
          logger.error(failMessage)
        }
      }

      err = err || new YError(msg)
      if (yargs.getExitProcess()) {
        return yargs.exit(1)
      } else if (yargs._hasParseCallback()) {
        return yargs.exit(1, err)
      } else {
        throw err
      }
    }
  }

  // methods for ouputting/building help (usage) message.
  let usages = []
  let usageDisabled = false
  self.usage = (msg, description) => {
    if (msg === null) {
      usageDisabled = true
      usages = []
      return
    }
    usageDisabled = false
    usages.push([msg, description || ''])
    return self
  }
  self.getUsage = () => {
    return usages
  }
  self.getUsageDisabled = () => {
    return usageDisabled
  }

  self.getPositionalGroupName = () => {
    return __('Positionals:')
  }

  let examples = []
  self.example = (cmd, description) => {
    examples.push([cmd, description || ''])
  }

  let commands = []
  self.command = function command (cmd, description, isDefault, aliases) {
    // the last default wins, so cancel out any previously set default
    if (isDefault) {
      commands = commands.map((cmdArray) => {
        cmdArray[2] = false
        return cmdArray
      })
    }
    commands.push([cmd, description || '', isDefault, aliases])
  }
  self.getCommands = () => commands

  let descriptions = {}
  self.describe = function describe (key, desc) {
    if (typeof key === 'object') {
      Object.keys(key).forEach((k) => {
        self.describe(k, key[k])
      })
    } else {
      descriptions[key] = desc
    }
  }
  self.getDescriptions = () => descriptions

  let epilog
  self.epilog = (msg) => {
    epilog = msg
  }

  let wrapSet = false
  let wrap
  self.wrap = (cols) => {
    wrapSet = true
    wrap = cols
  }

  function getWrap () {
    if (!wrapSet) {
      wrap = windowWidth()
      wrapSet = true
    }

    return wrap
  }

  const deferY18nLookupPrefix = '__yargsString__:'
  self.deferY18nLookup = str => deferY18nLookupPrefix + str

  const defaultGroup = 'Options:'
  self.help = function help () {
    normalizeAliases()

    // handle old demanded API
    const base$0 = path.basename(yargs.$0)
    const demandedOptions = yargs.getDemandedOptions()
    const demandedCommands = yargs.getDemandedCommands()
    const groups = yargs.getGroups()
    const options = yargs.getOptions()

    let keys = []
    keys = keys.concat(Object.keys(descriptions))
    keys = keys.concat(Object.keys(demandedOptions))
    keys = keys.concat(Object.keys(demandedCommands))
    keys = keys.concat(Object.keys(options.default))
    keys = keys.filter(filterHiddenOptions)
    keys = Object.keys(keys.reduce((acc, key) => {
      if (key !== '_') acc[key] = true
      return acc
    }, {}))

    const theWrap = getWrap()
    const ui = require('cliui')({
      width: theWrap,
      wrap: !!theWrap
    })

    // the usage string.
    if (!usageDisabled) {
      if (usages.length) {
        // user-defined usage.
        usages.forEach((usage) => {
          ui.div(`${usage[0].replace(/\$0/g, base$0)}`)
          if (usage[1]) {
            ui.div({ text: `${usage[1]}`, padding: [1, 0, 0, 0] })
          }
        })
        ui.div()
      } else if (commands.length) {
        let u = null
        // demonstrate how commands are used.
        if (demandedCommands._) {
          u = `${base$0} <${__('command')}>\n`
        } else {
          u = `${base$0} [${__('command')}]\n`
        }
        ui.div(`${u}`)
      }
    }

    // your application's commands, i.e., non-option
    // arguments populated in '_'.
    if (commands.length) {
      ui.div(__('Commands:'))

      const context = yargs.getContext()
      const parentCommands = context.commands.length ? `${context.commands.join(' ')} ` : ''

      if (yargs.getParserConfiguration()['sort-commands'] === true) {
        commands = commands.sort((a, b) => a[0].localeCompare(b[0]))
      }

      commands.forEach((command) => {
        const commandString = `${base$0} ${parentCommands}${command[0].replace(/^\$0 ?/, '')}` // drop $0 from default commands.
        ui.span(
          {
            text: commandString,
            padding: [0, 2, 0, 2],
            width: maxWidth(commands, theWrap, `${base$0}${parentCommands}`) + 4
          },
          { text: command[1] }
        )
        const hints = []
        if (command[2]) hints.push(`[${__('default:').slice(0, -1)}]`) // TODO hacking around i18n here
        if (command[3] && command[3].length) {
          hints.push(`[${__('aliases:')} ${command[3].join(', ')}]`)
        }
        if (hints.length) {
          ui.div({ text: hints.join(' '), padding: [0, 0, 0, 2], align: 'right' })
        } else {
          ui.div()
        }
      })

      ui.div()
    }

    // perform some cleanup on the keys array, making it
    // only include top-level keys not their aliases.
    const aliasKeys = (Object.keys(options.alias) || [])
      .concat(Object.keys(yargs.parsed.newAliases) || [])

    keys = keys.filter(key => !yargs.parsed.newAliases[key] && aliasKeys.every(alias => (options.alias[alias] || []).indexOf(key) === -1))

    // populate 'Options:' group with any keys that have not
    // explicitly had a group set.
    if (!groups[defaultGroup]) groups[defaultGroup] = []
    addUngroupedKeys(keys, options.alias, groups)

    // display 'Options:' table along with any custom tables:
    Object.keys(groups).forEach((groupName) => {
      if (!groups[groupName].length) return

      // if we've grouped the key 'f', but 'f' aliases 'foobar',
      // normalizedKeys should contain only 'foobar'.
      const normalizedKeys = groups[groupName].filter(filterHiddenOptions).map((key) => {
        if (~aliasKeys.indexOf(key)) return key
        for (let i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) {
          if (~(options.alias[aliasKey] || []).indexOf(key)) return aliasKey
        }
        return key
      })

      if (normalizedKeys.length < 1) return

      ui.div(__(groupName))

      // actually generate the switches string --foo, -f, --bar.
      const switches = normalizedKeys.reduce((acc, key) => {
        acc[key] = [ key ].concat(options.alias[key] || [])
          .map(sw => {
            // for the special positional group don't
            // add '--' or '-' prefix.
            if (groupName === self.getPositionalGroupName()) return sw
            else return (sw.length > 1 ? '--' : '-') + sw
          })
          .join(', ')

        return acc
      }, {})

      normalizedKeys.forEach((key) => {
        const kswitch = switches[key]
        let desc = descriptions[key] || ''
        let type = null

        if (~desc.lastIndexOf(deferY18nLookupPrefix)) desc = __(desc.substring(deferY18nLookupPrefix.length))

        if (~options.boolean.indexOf(key)) type = `[${__('boolean')}]`
        if (~options.count.indexOf(key)) type = `[${__('count')}]`
        if (~options.string.indexOf(key)) type = `[${__('string')}]`
        if (~options.normalize.indexOf(key)) type = `[${__('string')}]`
        if (~options.array.indexOf(key)) type = `[${__('array')}]`
        if (~options.number.indexOf(key)) type = `[${__('number')}]`

        const extra = [
          type,
          (key in demandedOptions) ? `[${__('required')}]` : null,
          options.choices && options.choices[key] ? `[${__('choices:')} ${
            self.stringifiedValues(options.choices[key])}]` : null,
          defaultString(options.default[key], options.defaultDescription[key])
        ].filter(Boolean).join(' ')

        ui.span(
          { text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches, theWrap) + 4 },
          desc
        )

        if (extra) ui.div({ text: extra, padding: [0, 0, 0, 2], align: 'right' })
        else ui.div()
      })

      ui.div()
    })

    // describe some common use-cases for your application.
    if (examples.length) {
      ui.div(__('Examples:'))

      examples.forEach((example) => {
        example[0] = example[0].replace(/\$0/g, base$0)
      })

      examples.forEach((example) => {
        if (example[1] === '') {
          ui.div(
            {
              text: example[0],
              padding: [0, 2, 0, 2]
            }
          )
        } else {
          ui.div(
            {
              text: example[0],
              padding: [0, 2, 0, 2],
              width: maxWidth(examples, theWrap) + 4
            }, {
              text: example[1]
            }
          )
        }
      })

      ui.div()
    }

    // the usage string.
    if (epilog) {
      const e = epilog.replace(/\$0/g, base$0)
      ui.div(`${e}\n`)
    }

    // Remove the trailing white spaces
    return ui.toString().replace(/\s*$/, '')
  }

  // return the maximum width of a string
  // in the left-hand column of a table.
  function maxWidth (table, theWrap, modifier) {
    let width = 0

    // table might be of the form [leftColumn],
    // or {key: leftColumn}
    if (!Array.isArray(table)) {
      table = Object.keys(table).map(key => [table[key]])
    }

    table.forEach((v) => {
      width = Math.max(
        stringWidth(modifier ? `${modifier} ${v[0]}` : v[0]),
        width
      )
    })

    // if we've enabled 'wrap' we should limit
    // the max-width of the left-column.
    if (theWrap) width = Math.min(width, parseInt(theWrap * 0.5, 10))

    return width
  }

  // make sure any options set for aliases,
  // are copied to the keys being aliased.
  function normalizeAliases () {
    // handle old demanded API
    const demandedOptions = yargs.getDemandedOptions()
    const options = yargs.getOptions()

    ;(Object.keys(options.alias) || []).forEach((key) => {
      options.alias[key].forEach((alias) => {
        // copy descriptions.
        if (descriptions[alias]) self.describe(key, descriptions[alias])
        // copy demanded.
        if (alias in demandedOptions) yargs.demandOption(key, demandedOptions[alias])
        // type messages.
        if (~options.boolean.indexOf(alias)) yargs.boolean(key)
        if (~options.count.indexOf(alias)) yargs.count(key)
        if (~options.string.indexOf(alias)) yargs.string(key)
        if (~options.normalize.indexOf(alias)) yargs.normalize(key)
        if (~options.array.indexOf(alias)) yargs.array(key)
        if (~options.number.indexOf(alias)) yargs.number(key)
      })
    })
  }

  // given a set of keys, place any keys that are
  // ungrouped under the 'Options:' grouping.
  function addUngroupedKeys (keys, aliases, groups) {
    let groupedKeys = []
    let toCheck = null
    Object.keys(groups).forEach((group) => {
      groupedKeys = groupedKeys.concat(groups[group])
    })

    keys.forEach((key) => {
      toCheck = [key].concat(aliases[key])
      if (!toCheck.some(k => groupedKeys.indexOf(k) !== -1)) {
        groups[defaultGroup].push(key)
      }
    })
    return groupedKeys
  }

  function filterHiddenOptions (key) {
    return yargs.getOptions().hiddenOptions.indexOf(key) < 0 || yargs.parsed.argv[yargs.getOptions().showHiddenOpt]
  }

  self.showHelp = (level) => {
    const logger = yargs._getLoggerInstance()
    if (!level) level = 'error'
    const emit = typeof level === 'function' ? level : logger[level]
    emit(self.help())
  }

  self.functionDescription = (fn) => {
    const description = fn.name ? decamelize(fn.name, '-') : __('generated-value')
    return ['(', description, ')'].join('')
  }

  self.stringifiedValues = function stringifiedValues (values, separator) {
    let string = ''
    const sep = separator || ', '
    const array = [].concat(values)

    if (!values || !array.length) return string

    array.forEach((value) => {
      if (string.length) string += sep
      string += JSON.stringify(value)
    })

    return string
  }

  // format the default-value-string displayed in
  // the right-hand column.
  function defaultString (value, defaultDescription) {
    let string = `[${__('default:')} `

    if (value === undefined && !defaultDescription) return null

    if (defaultDescription) {
      string += defaultDescription
    } else {
      switch (typeof value) {
        case 'string':
          string += `"${value}"`
          break
        case 'object':
          string += JSON.stringify(value)
          break
        default:
          string += value
      }
    }

    return `${string}]`
  }

  // guess the width of the console window, max-width 80.
  function windowWidth () {
    const maxWidth = 80
    if (typeof process === 'object' && process.stdout && process.stdout.columns) {
      return Math.min(maxWidth, process.stdout.columns)
    } else {
      return maxWidth
    }
  }

  // logic for displaying application version.
  let version = null
  self.version = (ver) => {
    version = ver
  }

  self.showVersion = () => {
    const logger = yargs._getLoggerInstance()
    logger.log(version)
  }

  self.reset = function reset (localLookup) {
    // do not reset wrap here
    // do not reset fails here
    failMessage = null
    failureOutput = false
    usages = []
    usageDisabled = false
    epilog = undefined
    examples = []
    commands = []
    descriptions = objFilter(descriptions, (k, v) => !localLookup[k])
    return self
  }

  let frozen
  self.freeze = function freeze () {
    frozen = {}
    frozen.failMessage = failMessage
    frozen.failureOutput = failureOutput
    frozen.usages = usages
    frozen.usageDisabled = usageDisabled
    frozen.epilog = epilog
    frozen.examples = examples
    frozen.commands = commands
    frozen.descriptions = descriptions
  }
  self.unfreeze = function unfreeze () {
    failMessage = frozen.failMessage
    failureOutput = frozen.failureOutput
    usages = frozen.usages
    usageDisabled = frozen.usageDisabled
    epilog = frozen.epilog
    examples = frozen.examples
    commands = frozen.commands
    descriptions = frozen.descriptions
    frozen = undefined
  }

  return self
}
'use strict'
const argsert = require('./argsert')
const objFilter = require('./obj-filter')
const specialKeys = ['$0', '--', '_']

// validation-type-stuff, missing params,
// bad implications, custom checks.
module.exports = function validation (yargs, usage, y18n) {
  const __ = y18n.__
  const __n = y18n.__n
  const self = {}

  // validate appropriate # of non-option
  // arguments were provided, i.e., '_'.
  self.nonOptionCount = function nonOptionCount (argv) {
    const demandedCommands = yargs.getDemandedCommands()
    // don't count currently executing commands
    const _s = argv._.length - yargs.getContext().commands.length

    if (demandedCommands._ && (_s < demandedCommands._.min || _s > demandedCommands._.max)) {
      if (_s < demandedCommands._.min) {
        if (demandedCommands._.minMsg !== undefined) {
          usage.fail(
            // replace $0 with observed, $1 with expected.
            demandedCommands._.minMsg ? demandedCommands._.minMsg.replace(/\$0/g, _s).replace(/\$1/, demandedCommands._.min) : null
          )
        } else {
          usage.fail(
            __('Not enough non-option arguments: got %s, need at least %s', _s, demandedCommands._.min)
          )
        }
      } else if (_s > demandedCommands._.max) {
        if (demandedCommands._.maxMsg !== undefined) {
          usage.fail(
            // replace $0 with observed, $1 with expected.
            demandedCommands._.maxMsg ? demandedCommands._.maxMsg.replace(/\$0/g, _s).replace(/\$1/, demandedCommands._.max) : null
          )
        } else {
          usage.fail(
            __('Too many non-option arguments: got %s, maximum of %s', _s, demandedCommands._.max)
          )
        }
      }
    }
  }

  // validate the appropriate # of <required>
  // positional arguments were provided:
  self.positionalCount = function positionalCount (required, observed) {
    if (observed < required) {
      usage.fail(
        __('Not enough non-option arguments: got %s, need at least %s', observed, required)
      )
    }
  }

  // make sure all the required arguments are present.
  self.requiredArguments = function requiredArguments (argv) {
    const demandedOptions = yargs.getDemandedOptions()
    let missing = null

    Object.keys(demandedOptions).forEach((key) => {
      if (!argv.hasOwnProperty(key) || typeof argv[key] === 'undefined') {
        missing = missing || {}
        missing[key] = demandedOptions[key]
      }
    })

    if (missing) {
      const customMsgs = []
      Object.keys(missing).forEach((key) => {
        const msg = missing[key]
        if (msg && customMsgs.indexOf(msg) < 0) {
          customMsgs.push(msg)
        }
      })

      const customMsg = customMsgs.length ? `\n${customMsgs.join('\n')}` : ''

      usage.fail(__n(
        'Missing required argument: %s',
        'Missing required arguments: %s',
        Object.keys(missing).length,
        Object.keys(missing).join(', ') + customMsg
      ))
    }
  }

  // check for unknown arguments (strict-mode).
  self.unknownArguments = function unknownArguments (argv, aliases, positionalMap) {
    const commandKeys = yargs.getCommandInstance().getCommands()
    const unknown = []
    const currentContext = yargs.getContext()

    Object.keys(argv).forEach((key) => {
      if (specialKeys.indexOf(key) === -1 &&
        !positionalMap.hasOwnProperty(key) &&
        !yargs._getParseContext().hasOwnProperty(key) &&
        !aliases.hasOwnProperty(key)
      ) {
        unknown.push(key)
      }
    })

    if (commandKeys.length > 0) {
      argv._.slice(currentContext.commands.length).forEach((key) => {
        if (commandKeys.indexOf(key) === -1) {
          unknown.push(key)
        }
      })
    }

    if (unknown.length > 0) {
      usage.fail(__n(
        'Unknown argument: %s',
        'Unknown arguments: %s',
        unknown.length,
        unknown.join(', ')
      ))
    }
  }

  // validate arguments limited to enumerated choices
  self.limitedChoices = function limitedChoices (argv) {
    const options = yargs.getOptions()
    const invalid = {}

    if (!Object.keys(options.choices).length) return

    Object.keys(argv).forEach((key) => {
      if (specialKeys.indexOf(key) === -1 &&
        options.choices.hasOwnProperty(key)) {
        [].concat(argv[key]).forEach((value) => {
          // TODO case-insensitive configurability
          if (options.choices[key].indexOf(value) === -1 &&
              value !== undefined) {
            invalid[key] = (invalid[key] || []).concat(value)
          }
        })
      }
    })

    const invalidKeys = Object.keys(invalid)

    if (!invalidKeys.length) return

    let msg = __('Invalid values:')
    invalidKeys.forEach((key) => {
      msg += `\n  ${__(
        'Argument: %s, Given: %s, Choices: %s',
        key,
        usage.stringifiedValues(invalid[key]),
        usage.stringifiedValues(options.choices[key])
      )}`
    })
    usage.fail(msg)
  }

  // custom checks, added using the `check` option on yargs.
  let checks = []
  self.check = function check (f, global) {
    checks.push({
      func: f,
      global
    })
  }

  self.customChecks = function customChecks (argv, aliases) {
    for (let i = 0, f; (f = checks[i]) !== undefined; i++) {
      const func = f.func
      let result = null
      try {
        result = func(argv, aliases)
      } catch (err) {
        usage.fail(err.message ? err.message : err, err)
        continue
      }

      if (!result) {
        usage.fail(__('Argument check failed: %s', func.toString()))
      } else if (typeof result === 'string' || result instanceof Error) {
        usage.fail(result.toString(), result)
      }
    }
  }

  // check implications, argument foo implies => argument bar.
  let implied = {}
  self.implies = function implies (key, value) {
    argsert('<string|object> [array|number|string]', [key, value], arguments.length)

    if (typeof key === 'object') {
      Object.keys(key).forEach((k) => {
        self.implies(k, key[k])
      })
    } else {
      yargs.global(key)
      if (!implied[key]) {
        implied[key] = []
      }
      if (Array.isArray(value)) {
        value.forEach((i) => self.implies(key, i))
      } else {
        implied[key].push(value)
      }
    }
  }
  self.getImplied = function getImplied () {
    return implied
  }

  self.implications = function implications (argv) {
    const implyFail = []

    Object.keys(implied).forEach((key) => {
      const origKey = key
      ;(implied[key] || []).forEach((value) => {
        let num
        let key = origKey
        const origValue = value

        // convert string '1' to number 1
        num = Number(key)
        key = isNaN(num) ? key : num

        if (typeof key === 'number') {
          // check length of argv._
          key = argv._.length >= key
        } else if (key.match(/^--no-.+/)) {
          // check if key doesn't exist
          key = key.match(/^--no-(.+)/)[1]
          key = !argv[key]
        } else {
          // check if key exists
          key = argv[key]
        }

        num = Number(value)
        value = isNaN(num) ? value : num

        if (typeof value === 'number') {
          value = argv._.length >= value
        } else if (value.match(/^--no-.+/)) {
          value = value.match(/^--no-(.+)/)[1]
          value = !argv[value]
        } else {
          value = argv[value]
        }
        if (key && !value) {
          implyFail.push(` ${origKey} -> ${origValue}`)
        }
      })
    })

    if (implyFail.length) {
      let msg = `${__('Implications failed:')}\n`

      implyFail.forEach((value) => {
        msg += (value)
      })

      usage.fail(msg)
    }
  }

  let conflicting = {}
  self.conflicts = function conflicts (key, value) {
    argsert('<string|object> [array|string]', [key, value], arguments.length)

    if (typeof key === 'object') {
      Object.keys(key).forEach((k) => {
        self.conflicts(k, key[k])
      })
    } else {
      yargs.global(key)
      if (!conflicting[key]) {
        conflicting[key] = []
      }
      if (Array.isArray(value)) {
        value.forEach((i) => self.conflicts(key, i))
      } else {
        conflicting[key].push(value)
      }
    }
  }
  self.getConflicting = () => conflicting

  self.conflicting = function conflictingFn (argv) {
    Object.keys(argv).forEach((key) => {
      if (conflicting[key]) {
        conflicting[key].forEach((value) => {
          // we default keys to 'undefined' that have been configured, we should not
          // apply conflicting check unless they are a value other than 'undefined'.
          if (value && argv[key] !== undefined && argv[value] !== undefined) {
            usage.fail(__('Arguments %s and %s are mutually exclusive', key, value))
          }
        })
      }
    })
  }

  self.recommendCommands = function recommendCommands (cmd, potentialCommands) {
    const distance = require('./levenshtein')
    const threshold = 3 // if it takes more than three edits, let's move on.
    potentialCommands = potentialCommands.sort((a, b) => b.length - a.length)

    let recommended = null
    let bestDistance = Infinity
    for (let i = 0, candidate; (candidate = potentialCommands[i]) !== undefined; i++) {
      const d = distance(cmd, candidate)
      if (d <= threshold && d < bestDistance) {
        bestDistance = d
        recommended = candidate
      }
    }
    if (recommended) usage.fail(__('Did you mean %s?', recommended))
  }

  self.reset = function reset (localLookup) {
    implied = objFilter(implied, (k, v) => !localLookup[k])
    conflicting = objFilter(conflicting, (k, v) => !localLookup[k])
    checks = checks.filter(c => c.global)
    return self
  }

  let frozen
  self.freeze = function freeze () {
    frozen = {}
    frozen.implied = implied
    frozen.checks = checks
    frozen.conflicting = conflicting
  }
  self.unfreeze = function unfreeze () {
    implied = frozen.implied
    checks = frozen.checks
    conflicting = frozen.conflicting
    frozen = undefined
  }

  return self
}
'use strict'
function YError (msg) {
  this.name = 'YError'
  this.message = msg || 'yargs error'
  Error.captureStackTrace(this, YError)
}

YError.prototype = Object.create(Error.prototype)
YError.prototype.constructor = YError

module.exports = YError
Copyright 2010 James Halliday (mail@substack.net)
Modified work Copyright 2014 Contributors (ben@npmjs.com)

This project is free software released under the MIT/X11 license:

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "Commands:": "ÐšÐ°Ð¼Ð°Ð½Ð´Ñ‹:",
  "Options:": "ÐžÐ¿Ñ†Ñ‹Ñ–:",
  "Examples:": "ÐŸÑ€Ñ‹ÐºÐ»Ð°Ð´Ñ‹:",
  "boolean": "Ð±ÑƒÐ»ÐµÐ²Ñ‹ Ñ‚Ñ‹Ð¿",
  "count": "Ð¿Ð°Ð´Ð»Ñ–Ðº",
  "string": "Ñ€Ð°Ð´ÐºÐ¾Ð²Ñ‹ Ñ‚Ñ‹Ð¿",
  "number": "Ð»Ñ–Ðº",
  "array": "Ð¼Ð°ÑÑ–Ñž",
  "required": "Ð½ÐµÐ°Ð±Ñ…Ð¾Ð´Ð½Ð°",
  "default:": "Ð¿Ð° Ð·Ð¼Ð°ÑžÑ‡Ð°Ð½Ð½Ñ–:",
  "choices:": "Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°ÑÑ†Ñ–:",
  "aliases:": "Ð°Ð»Ñ–Ð°ÑÑ‹:",
  "generated-value": "Ð·Ð³ÐµÐ½ÐµÑ€Ð°Ð²Ð°Ð½Ð°Ðµ Ð·Ð½Ð°Ñ‡ÑÐ½Ð½Ðµ",
  "Not enough non-option arguments: got %s, need at least %s": "ÐÐµÐ´Ð°ÑÑ‚Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð½ÐµÐ°Ð¿Ñ†Ñ‹Ð¹Ð½Ñ‹Ñ… Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñž: Ñ‘ÑÑ†ÑŒ %s, Ñ‚Ñ€ÑÐ±Ð° ÑÐº Ð¼Ñ–Ð½Ñ–Ð¼ÑƒÐ¼ %s",
  "Too many non-option arguments: got %s, maximum of %s": "Ð—Ð°Ð½Ð°Ð´Ñ‚Ð° ÑˆÐ¼Ð°Ñ‚ Ð½ÐµÐ°Ð¿Ñ†Ñ‹Ð¹Ð½Ñ‹Ñ… Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñž: Ñ‘ÑÑ†ÑŒ %s, Ð¼Ð°ÐºÑÑ–Ð¼ÑƒÐ¼ Ð´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð° %s",
  "Missing argument value: %s": {
    "one": "ÐÐµ Ñ…Ð°Ð¿Ð°Ðµ Ð·Ð½Ð°Ñ‡ÑÐ½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñƒ: %s",
    "other": "ÐÐµ Ñ…Ð°Ð¿Ð°Ðµ Ð·Ð½Ð°Ñ‡ÑÐ½Ð½ÑÑž Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñž: %s"
  },
  "Missing required argument: %s": {
    "one": "ÐÐµ Ñ…Ð°Ð¿Ð°Ðµ Ð½ÐµÐ°Ð±Ñ…Ð¾Ð´Ð½Ð°Ð³Ð° Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñƒ: %s",
    "other": "ÐÐµ Ñ…Ð°Ð¿Ð°Ðµ Ð½ÐµÐ°Ð±Ñ…Ð¾Ð´Ð½Ñ‹Ñ… Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñž: %s"
  },
  "Unknown argument: %s": {
    "one": "ÐÐµÐ²ÑÐ´Ð¾Ð¼Ñ‹ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚: %s",
    "other": "ÐÐµÐ²ÑÐ´Ð¾Ð¼Ñ‹Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹: %s"
  },
  "Invalid values:": "ÐÐµÑÐ°Ð¿Ñ€Ð°ÑžÐ´Ð½Ñ‹Ñ Ð·Ð½Ð°Ñ‡ÑÐ½Ð½Ñ:",
  "Argument: %s, Given: %s, Choices: %s": "ÐÑ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚: %s, Ð”Ð°Ð´Ð·ÐµÐ½Ð°Ðµ Ð·Ð½Ð°Ñ‡ÑÐ½Ð½Ðµ: %s, ÐœÐ°Ð³Ñ‡Ñ‹Ð¼Ð°ÑÑ†Ñ–: %s",
  "Argument check failed: %s": "ÐŸÑ€Ð°Ð²ÐµÑ€ÐºÐ° Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñž Ð½Ðµ ÑžÐ´Ð°Ð»Ð°ÑÑ: %s",
  "Implications failed:": "Ð”Ð°Ð´Ð·ÐµÐ½Ñ‹ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ð¿Ð°Ñ‚Ñ€Ð°Ð±ÑƒÐµ Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½Ñ‹ Ð´Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚:",
  "Not enough arguments following: %s": "ÐÐµÐ´Ð°ÑÑ‚Ð°Ñ‚ÐºÐ¾Ð²Ð° Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ… Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñž: %s",
  "Invalid JSON config file: %s": "ÐÐµÑÐ°Ð¿Ñ€Ð°ÑžÐ´Ð½Ñ‹ Ñ„Ð°Ð¹Ð» ÐºÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ– JSON: %s",
  "Path to JSON config file": "Ð¨Ð»ÑÑ… Ð´Ð° Ñ„Ð°Ð¹Ð»Ð° ÐºÐ°Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ‹Ñ– JSON",
  "Show help": "ÐŸÐ°ÐºÐ°Ð·Ð°Ñ†ÑŒ Ð´Ð°Ð¿Ð°Ð¼Ð¾Ð³Ñƒ",
  "Show version number": "ÐŸÐ°ÐºÐ°Ð·Ð°Ñ†ÑŒ Ð½ÑƒÐ¼Ð°Ñ€ Ð²ÐµÑ€ÑÑ–Ñ–",
  "Did you mean %s?": "Ð’Ñ‹ Ð¼ÐµÐ»Ñ– Ð½Ð° ÑžÐ²Ð°Ð·Ðµ %s?"
}
{
  "Commands:": "Kommandos:",
  "Options:": "Optionen:",
  "Examples:": "Beispiele:",
  "boolean": "boolean",
  "count": "ZÃ¤hler",
  "string": "string",
  "number": "Zahl",
  "array": "array",
  "required": "erforderlich",
  "default:": "Standard:",
  "choices:": "MÃ¶glichkeiten:",
  "aliases:": "Aliase:",
  "generated-value": "Generierter-Wert",
  "Not enough non-option arguments: got %s, need at least %s": "Nicht genÃ¼gend Argumente ohne Optionen: %s vorhanden, mindestens %s benÃ¶tigt",
  "Too many non-option arguments: got %s, maximum of %s": "Zu viele Argumente ohne Optionen: %s vorhanden, maximal %s erlaubt",
  "Missing argument value: %s": {
    "one": "Fehlender Argumentwert: %s",
    "other": "Fehlende Argumentwerte: %s"
  },
  "Missing required argument: %s": {
    "one": "Fehlendes Argument: %s",
    "other": "Fehlende Argumente: %s"
  },
  "Unknown argument: %s": {
    "one": "Unbekanntes Argument: %s",
    "other": "Unbekannte Argumente: %s"
  },
  "Invalid values:": "UnzulÃ¤ssige Werte:",
  "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeben: %s, MÃ¶glichkeiten: %s",
  "Argument check failed: %s": "Argumente-Check fehlgeschlagen: %s",
  "Implications failed:": "Fehlende abhÃ¤ngige Argumente:",
  "Not enough arguments following: %s": "Nicht genÃ¼gend Argumente nach: %s",
  "Invalid JSON config file: %s": "Fehlerhafte JSON-Config Datei: %s",
  "Path to JSON config file": "Pfad zur JSON-Config Datei",
  "Show help": "Hilfe anzeigen",
  "Show version number": "Version anzeigen",
  "Did you mean %s?": "Meintest du %s?"
}
{
  "Commands:": "Commands:",
  "Options:": "Options:",
  "Examples:": "Examples:",
  "boolean": "boolean",
  "count": "count",
  "string": "string",
  "number": "number",
  "array": "array",
  "required": "required",
  "default:": "default:",
  "choices:": "choices:",
  "aliases:": "aliases:",
  "generated-value": "generated-value",
  "Not enough non-option arguments: got %s, need at least %s": "Not enough non-option arguments: got %s, need at least %s",
  "Too many non-option arguments: got %s, maximum of %s": "Too many non-option arguments: got %s, maximum of %s",
  "Missing argument value: %s": {
    "one": "Missing argument value: %s",
    "other": "Missing argument values: %s"
  },
  "Missing required argument: %s": {
    "one": "Missing required argument: %s",
    "other": "Missing required arguments: %s"
  },
  "Unknown argument: %s": {
    "one": "Unknown argument: %s",
    "other": "Unknown arguments: %s"
  },
  "Invalid values:": "Invalid values:",
  "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Given: %s, Choices: %s",
  "Argument check failed: %s": "Argument check failed: %s",
  "Implications failed:": "Missing dependent arguments:",
  "Not enough arguments following: %s": "Not enough arguments following: %s",
  "Invalid JSON config file: %s": "Invalid JSON config file: %s",
  "Path to JSON config file": "Path to JSON config file",
  "Show help": "Show help",
  "Show version number": "Show version number",
  "Did you mean %s?": "Did you mean %s?",
  "Arguments %s and %s are mutually exclusive" : "Arguments %s and %s are mutually exclusive",
  "Positionals:": "Positionals:",
  "command": "command"
}
{
  "Commands:": "Comandos:",
  "Options:": "Opciones:",
  "Examples:": "Ejemplos:",
  "boolean": "booleano",
  "count": "cuenta",
  "string": "cadena de caracteres",
  "number": "nÃºmero",
  "array": "tabla",
  "required": "requerido",
  "default:": "defecto:",
  "choices:": "selecciÃ³n:",
  "aliases:": "alias:",
  "generated-value": "valor-generado",
  "Not enough non-option arguments: got %s, need at least %s": "Hacen falta argumentos no-opcionales: NÃºmero recibido %s, necesita por lo menos %s",
  "Too many non-option arguments: got %s, maximum of %s": "Demasiados argumentos no-opcionales: NÃºmero recibido %s, mÃ¡ximo es %s",
  "Missing argument value: %s": {
    "one": "Falta argumento: %s",
    "other": "Faltan argumentos: %s"
  },
  "Missing required argument: %s": {
    "one": "Falta argumento requerido: %s",
    "other": "Faltan argumentos requeridos: %s"
  },
  "Unknown argument: %s": {
    "one": "Argumento desconocido: %s",
    "other": "Argumentos desconocidos: %s"
  },
  "Invalid values:": "Valores invÃ¡lidos:",
  "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Recibido: %s, Seleccionados: %s",
  "Argument check failed: %s": "VerificaciÃ³n de argumento ha fallado: %s",
  "Implications failed:": "Implicaciones fallidas:",
  "Not enough arguments following: %s": "No hay suficientes argumentos despuÃ©s de: %s",
  "Invalid JSON config file: %s": "Archivo de configuraciÃ³n JSON invÃ¡lido: %s",
  "Path to JSON config file": "Ruta al archivo de configuraciÃ³n JSON",
  "Show help": "Muestra ayuda",
  "Show version number": "Muestra nÃºmero de versiÃ³n",
  "Did you mean %s?": "Quisiste decir %s?"
}
{
  "Commands:": "Commandes:",
  "Options:": "Options:",
  "Examples:": "Exemples:",
  "boolean": "boolÃ©en",
  "count": "comptage",
  "string": "chaine de caractÃ¨re",
  "number": "nombre",
  "array": "tableau",
  "required": "requis",
  "default:": "dÃ©faut:",
  "choices:": "choix:",
  "generated-value": "valeur gÃ©nÃ©rÃ©e",
  "Not enough non-option arguments: got %s, need at least %s": "Pas assez d'arguments non-option: reÃ§u %s, besoin d'au moins %s",
  "Too many non-option arguments: got %s, maximum of %s": "Trop d'arguments non-option: reÃ§u %s, maximum %s",
  "Missing argument value: %s": {
    "one": "Argument manquant: %s",
    "other": "Arguments manquants: %s"
  },
  "Missing required argument: %s": {
    "one": "Argument requis manquant: %s",
    "other": "Arguments requis manquants: %s"
  },
  "Unknown argument: %s": {
    "one": "Argument inconnu: %s",
    "other": "Arguments inconnus: %s"
  },
  "Invalid values:": "Valeurs invalides:",
  "Argument: %s, Given: %s, Choices: %s": "Argument: %s, DonnÃ©: %s, Choix: %s",
  "Argument check failed: %s": "Echec de la vÃ©rification de l'argument: %s",
  "Implications failed:": "Arguments dÃ©pendants manquants:",
  "Not enough arguments following: %s": "Pas assez d'arguments suivant: %s",
  "Invalid JSON config file: %s": "Fichier de configuration JSON invalide: %s",
  "Path to JSON config file": "Chemin du fichier de configuration JSON",
  "Show help": "Affiche de l'aide",
  "Show version number": "Affiche le numÃ©ro de version"
}
{
  "Commands:": "à¤†à¤¦à¥‡à¤¶:",
  "Options:": "à¤µà¤¿à¤•à¤²à¥à¤ª:",
  "Examples:": "à¤‰à¤¦à¤¾à¤¹à¤°à¤£:",
  "boolean": "à¤¸à¤¤à¥à¤¯à¤¤à¤¾",
  "count": "à¤¸à¤‚à¤–à¥à¤¯à¤¾",
  "string": "à¤µà¤°à¥à¤£à¥‹à¤‚ à¤•à¤¾ à¤¤à¤¾à¤° ",
  "number": "à¤…à¤‚à¤•",
  "array": "à¤¸à¤°à¤£à¥€",
  "required": "à¤†à¤µà¤¶à¥à¤¯à¤•",
  "default:": "à¤¡à¤¿à¤«à¥‰à¤²à¥à¤Ÿ:",
  "choices:": "à¤µà¤¿à¤•à¤²à¥à¤ª:",
  "aliases:": "à¤‰à¤ªà¤¨à¤¾à¤®:",
  "generated-value": "à¤‰à¤¤à¥à¤ªà¤¨à¥à¤¨-à¤®à¥‚à¤²à¥à¤¯",
  "Not enough non-option arguments: got %s, need at least %s": "à¤ªà¤°à¥à¤¯à¤¾à¤ªà¥à¤¤ à¤—à¥ˆà¤°-à¤µà¤¿à¤•à¤²à¥à¤ª à¤¤à¤°à¥à¤• à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤ à¤¨à¤¹à¥€à¤‚: %s à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤, à¤•à¤® à¤¸à¥‡ à¤•à¤® %s à¤•à¥€ à¤†à¤µà¤¶à¥à¤¯à¤•à¤¤à¤¾ à¤¹à¥ˆ",
  "Too many non-option arguments: got %s, maximum of %s": "à¤¬à¤¹à¥à¤¤ à¤¸à¤¾à¤°à¥‡ à¤—à¥ˆà¤°-à¤µà¤¿à¤•à¤²à¥à¤ª à¤¤à¤°à¥à¤•: %s à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤, à¤…à¤§à¤¿à¤•à¤¤à¤® %s à¤®à¤¾à¤¨à¥à¤¯",
  "Missing argument value: %s": {
    "one": "à¤•à¥à¤› à¤¤à¤°à¥à¤•à¥‹ à¤•à¥‡ à¤®à¥‚à¤²à¥à¤¯ à¤—à¥à¤® à¤¹à¥ˆà¤‚: %s",
    "other": "à¤•à¥à¤› à¤¤à¤°à¥à¤•à¥‹ à¤•à¥‡ à¤®à¥‚à¤²à¥à¤¯ à¤—à¥à¤® à¤¹à¥ˆà¤‚: %s"
  },
  "Missing required argument: %s": {
    "one": "à¤†à¤µà¤¶à¥à¤¯à¤• à¤¤à¤°à¥à¤• à¤—à¥à¤® à¤¹à¥ˆà¤‚: %s",
    "other": "à¤†à¤µà¤¶à¥à¤¯à¤• à¤¤à¤°à¥à¤• à¤—à¥à¤® à¤¹à¥ˆà¤‚: %s"
  },
  "Unknown argument: %s": {
    "one": "à¤…à¤œà¥à¤žà¤¾à¤¤ à¤¤à¤°à¥à¤• à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤: %s",
    "other": "à¤…à¤œà¥à¤žà¤¾à¤¤ à¤¤à¤°à¥à¤• à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤: %s"
  },
  "Invalid values:": "à¤…à¤®à¤¾à¤¨à¥à¤¯ à¤®à¥‚à¤²à¥à¤¯:",
  "Argument: %s, Given: %s, Choices: %s": "à¤¤à¤°à¥à¤•: %s, à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤: %s, à¤µà¤¿à¤•à¤²à¥à¤ª: %s",
  "Argument check failed: %s": "à¤¤à¤°à¥à¤• à¤œà¤¾à¤‚à¤š à¤µà¤¿à¤«à¤²: %s",
  "Implications failed:": "à¤¦à¤¿à¤ à¤—à¤ à¤¤à¤°à¥à¤• à¤•à¥‡ à¤²à¤¿à¤ à¤…à¤¤à¤¿à¤°à¤¿à¤•à¥à¤¤ à¤¤à¤°à¥à¤• à¤•à¥€ à¤…à¤ªà¥‡à¤•à¥à¤·à¤¾ à¤¹à¥ˆ:",
  "Not enough arguments following: %s": "à¤¨à¤¿à¤®à¥à¤¨à¤²à¤¿à¤–à¤¿à¤¤ à¤•à¥‡ à¤¬à¤¾à¤¦ à¤ªà¤°à¥à¤¯à¤¾à¤ªà¥à¤¤ à¤¤à¤°à¥à¤• à¤¨à¤¹à¥€à¤‚ à¤ªà¥à¤°à¤¾à¤ªà¥à¤¤: %s",
  "Invalid JSON config file: %s": "à¤…à¤®à¤¾à¤¨à¥à¤¯ JSON config à¤«à¤¾à¤‡à¤²: %s",
  "Path to JSON config file": "JSON config à¤«à¤¾à¤‡à¤² à¤•à¤¾ à¤ªà¤¥",
  "Show help": "à¤¸à¤¹à¤¾à¤¯à¤¤à¤¾ à¤¦à¤¿à¤–à¤¾à¤à¤",
  "Show version number": "Version à¤¸à¤‚à¤–à¥à¤¯à¤¾ à¤¦à¤¿à¤–à¤¾à¤à¤",
  "Did you mean %s?": "à¤•à¥à¤¯à¤¾ à¤†à¤ªà¤•à¤¾ à¤®à¤¤à¤²à¤¬ à¤¹à¥ˆ %s?",
  "Arguments %s and %s are mutually exclusive" : "à¤¤à¤°à¥à¤• %s à¤”à¤° %s à¤ªà¤°à¤¸à¥à¤ªà¤° à¤…à¤¨à¤¨à¥à¤¯ à¤¹à¥ˆà¤‚",
  "Positionals:": "à¤¸à¥à¤¥à¤¾à¤¨à¥€à¤¯:",
  "command": "à¤†à¤¦à¥‡à¤¶"
}
{
  "Commands:": "Parancsok:",
  "Options:": "OpciÃ³k:",
  "Examples:": "PÃ©ldÃ¡k:",
  "boolean": "boolean",
  "count": "szÃ¡mlÃ¡lÃ³",
  "string": "szÃ¶veg",
  "number": "szÃ¡m",
  "array": "tÃ¶mb",
  "required": "kÃ¶telezÅ‘",
  "default:": "alapÃ©rtelmezett:",
  "choices:": "lehetÅ‘sÃ©gek:",
  "aliases:": "aliaszok:",
  "generated-value": "generÃ¡lt-Ã©rtÃ©k",
  "Not enough non-option arguments: got %s, need at least %s": "Nincs elÃ©g nem opcionÃ¡lis argumentum: %s van, legalÃ¡bb %s kell",
  "Too many non-option arguments: got %s, maximum of %s": "TÃºl sok nem opciÃ¡nlis argumentum van: %s van, maximum %s lehet",
  "Missing argument value: %s": {
    "one": "HiÃ¡nyzÃ³ argumentum Ã©rtÃ©k: %s",
    "other": "HiÃ¡nyzÃ³ argumentum Ã©rtÃ©kek: %s"
  },
  "Missing required argument: %s": {
    "one": "HiÃ¡nyzÃ³ kÃ¶telezÅ‘ argumentum: %s",
    "other": "HiÃ¡nyzÃ³ kÃ¶telezÅ‘ argumentumok: %s"
  },
  "Unknown argument: %s": {
    "one": "Ismeretlen argumentum: %s",
    "other": "Ismeretlen argumentumok: %s"
  },
  "Invalid values:": "Ã‰rvÃ©nytelen Ã©rtÃ©k:",
  "Argument: %s, Given: %s, Choices: %s": "Argumentum: %s, Megadott: %s, LehetÅ‘sÃ©gek: %s",
  "Argument check failed: %s": "Argumentum ellenÅ‘rzÃ©s sikertelen: %s",
  "Implications failed:": "ImplikÃ¡ciÃ³k sikertelenek:",
  "Not enough arguments following: %s": "Nem elÃ©g argumentum kÃ¶veti: %s",
  "Invalid JSON config file: %s": "Ã‰rvÃ©nytelen JSON konfigurÃ¡ciÃ³s file: %s",
  "Path to JSON config file": "JSON konfigurÃ¡ciÃ³s file helye",
  "Show help": "SÃºgo megjelenÃ­tÃ©se",
  "Show version number": "VerziÃ³szÃ¡m megjelenÃ­tÃ©se",
  "Did you mean %s?": "Erre gondoltÃ¡l %s?"
}

{
  "Commands:": "Perintah:",
  "Options:": "Pilihan:",
  "Examples:": "Contoh:",
  "boolean": "boolean",
  "count": "jumlah",
  "number": "nomor",
  "string": "string",
  "array": "larik",
  "required": "diperlukan",
  "default:": "bawaan:",
  "aliases:": "istilah lain:",
  "choices:": "pilihan:",
  "generated-value": "nilai-yang-dihasilkan",
  "Not enough non-option arguments: got %s, need at least %s": "Argumen wajib kurang: hanya %s, minimal %s",
  "Too many non-option arguments: got %s, maximum of %s": "Terlalu banyak argumen wajib: ada %s, maksimal %s",
  "Missing argument value: %s": {
    "one": "Kurang argumen: %s",
    "other": "Kurang argumen: %s"
  },
  "Missing required argument: %s": {
    "one": "Kurang argumen wajib: %s",
    "other": "Kurang argumen wajib: %s"
  },
  "Unknown argument: %s": {
    "one": "Argumen tak diketahui: %s",
    "other": "Argumen tak diketahui: %s"
  },
  "Invalid values:": "Nilai-nilai tidak valid:",
  "Argument: %s, Given: %s, Choices: %s": "Argumen: %s, Diberikan: %s, Pilihan: %s",
  "Argument check failed: %s": "Pemeriksaan argument gagal: %s",
  "Implications failed:": "Implikasi gagal:",
  "Not enough arguments following: %s": "Kurang argumen untuk: %s",
  "Invalid JSON config file: %s": "Berkas konfigurasi JSON tidak valid: %s",
  "Path to JSON config file": "Alamat berkas konfigurasi JSON",
  "Show help": "Lihat bantuan",
  "Show version number": "Lihat nomor versi",
  "Did you mean %s?": "Maksud Anda: %s?",
  "Arguments %s and %s are mutually exclusive" : "Argumen %s dan %s saling eksklusif",
  "Positionals:": "Posisional-posisional:",
  "command": "perintah"
}
{
  "Commands:": "Comandi:",
  "Options:": "Opzioni:",
  "Examples:": "Esempi:",
  "boolean": "booleano",
  "count": "contatore",
  "string": "stringa",
  "number": "numero",
  "array": "vettore",
  "required": "richiesto",
  "default:": "predefinito:",
  "choices:": "scelte:",
  "aliases:": "alias:",
  "generated-value": "valore generato",
  "Not enough non-option arguments: got %s, need at least %s": "Numero insufficiente di argomenti non opzione: inseriti %s, richiesti almeno %s",
  "Too many non-option arguments: got %s, maximum of %s": "Troppi argomenti non opzione: inseriti %s, massimo possibile %s",
  "Missing argument value: %s": {
    "one": "Argomento mancante: %s",
    "other": "Argomenti mancanti: %s"
  },
  "Missing required argument: %s": {
    "one": "Argomento richiesto mancante: %s",
    "other": "Argomenti richiesti mancanti: %s"
  },
  "Unknown argument: %s": {
    "one": "Argomento sconosciuto: %s",
    "other": "Argomenti sconosciuti: %s"
  },
  "Invalid values:": "Valori non validi:",
  "Argument: %s, Given: %s, Choices: %s": "Argomento: %s, Richiesto: %s, Scelte: %s",
  "Argument check failed: %s": "Controllo dell'argomento fallito: %s",
  "Implications failed:": "Argomenti dipendenti mancanti:",
  "Not enough arguments following: %s": "Argomenti insufficienti dopo: %s",
  "Invalid JSON config file: %s": "File di configurazione JSON non valido: %s",
  "Path to JSON config file": "Percorso del file di configurazione JSON",
  "Show help": "Mostra la schermata di aiuto",
  "Show version number": "Mostra il numero di versione",
  "Did you mean %s?": "Intendi forse %s?"
}
{
  "Commands:": "ã‚³ãƒžãƒ³ãƒ‰:",
  "Options:": "ã‚ªãƒ—ã‚·ãƒ§ãƒ³:",
  "Examples:": "ä¾‹:",
  "boolean": "çœŸå½",
  "count": "ã‚«ã‚¦ãƒ³ãƒˆ",
  "string": "æ–‡å­—åˆ—",
  "number": "æ•°å€¤",
  "array": "é…åˆ—",
  "required": "å¿…é ˆ",
  "default:": "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆ:",
  "choices:": "é¸æŠžã—ã¦ãã ã•ã„:",
  "aliases:": "ã‚¨ã‚¤ãƒªã‚¢ã‚¹:",
  "generated-value": "ç”Ÿæˆã•ã‚ŒãŸå€¤",
  "Not enough non-option arguments: got %s, need at least %s": "ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§ã¯ãªã„å¼•æ•°ãŒ %s å€‹ã§ã¯ä¸è¶³ã—ã¦ã„ã¾ã™ã€‚å°‘ãªãã¨ã‚‚ %s å€‹ã®å¼•æ•°ãŒå¿…è¦ã§ã™:",
  "Too many non-option arguments: got %s, maximum of %s": "ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§ã¯ãªã„å¼•æ•°ãŒ %s å€‹ã§ã¯å¤šã™ãŽã¾ã™ã€‚æœ€å¤§ã§ %s å€‹ã¾ã§ã§ã™:",
  "Missing argument value: %s": {
    "one": "å¼•æ•°ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s",
    "other": "å¼•æ•°ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
  },
  "Missing required argument: %s": {
    "one": "å¿…é ˆã®å¼•æ•°ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s",
    "other": "å¿…é ˆã®å¼•æ•°ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
  },
  "Unknown argument: %s": {
    "one": "æœªçŸ¥ã®å¼•æ•°ã§ã™: %s",
    "other": "æœªçŸ¥ã®å¼•æ•°ã§ã™: %s"
  },
  "Invalid values:": "ä¸æ­£ãªå€¤ã§ã™:",
  "Argument: %s, Given: %s, Choices: %s": "å¼•æ•°ã¯ %s ã§ã™ã€‚æŒ‡å®šã§ãã‚‹ã®ã¯ %s ã¤ã§ã™ã€‚é¸æŠžã—ã¦ãã ã•ã„: %s",
  "Argument check failed: %s": "å¼•æ•°ã®ãƒã‚§ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸ: %s",
  "Implications failed:": "ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã®çµ„ã¿åˆã‚ã›ã§ä¸æ­£ãŒç”Ÿã˜ã¾ã—ãŸ:",
  "Not enough arguments following: %s": "æ¬¡ã®å¼•æ•°ãŒä¸è¶³ã—ã¦ã„ã¾ã™ã€‚: %s",
  "Invalid JSON config file: %s": "JSONã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ãŒä¸æ­£ã§ã™: %s",
  "Path to JSON config file": "JSONã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã¾ã§ã®path",
  "Show help": "ãƒ˜ãƒ«ãƒ—ã‚’è¡¨ç¤º",
  "Show version number": "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’è¡¨ç¤º",
  "Did you mean %s?": "ã‚‚ã—ã‹ã—ã¦ %s?",
  "Arguments %s and %s are mutually exclusive" : "å¼•æ•° %s ã¨ %s ã¯åŒæ™‚ã«æŒ‡å®šã§ãã¾ã›ã‚“",
  "Positionals:": "ä½ç½®:",
  "command": "ã‚³ãƒžãƒ³ãƒ‰"
}
{
  "Commands:": "ëª…ë ¹:",
  "Options:": "ì˜µì…˜:",
  "Examples:": "ì˜ˆì‹œ:",
  "boolean": "ì—¬ë¶€",
  "count": "ê°œìˆ˜",
  "string": "ë¬¸ìžì—´",
  "number": "ìˆ«ìž",
  "array": "ë°°ì—´",
  "required": "í•„ìˆ˜",
  "default:": "ê¸°ë³¸:",
  "choices:": "ì„ íƒ:",
  "aliases:": "ë³„ì¹­:",
  "generated-value": "ìƒì„±ëœ ê°’",
  "Not enough non-option arguments: got %s, need at least %s": "ì˜µì…˜ì´ ì•„ë‹Œ ì¸ìžê°€ ì¶©ë¶„ì¹˜ ì•ŠìŠµë‹ˆë‹¤: %sê°œë¥¼ ë°›ì•˜ì§€ë§Œ, ì ì–´ë„ %sê°œëŠ” í•„ìš”í•©ë‹ˆë‹¤",
  "Too many non-option arguments: got %s, maximum of %s": "ì˜µì…˜ì´ ì•„ë‹Œ ì¸ìžê°€ ë„ˆë¬´ ë§ŽìŠµë‹ˆë‹¤: %sê°œë¥¼ ë°›ì•˜ì§€ë§Œ, %sê°œ ì´í•˜ì—¬ì•¼ í•©ë‹ˆë‹¤",
  "Missing argument value: %s": {
    "one": "ì¸ìžê°’ì„ ë°›ì§€ ëª»í–ˆìŠµë‹ˆë‹¤: %s",
    "other": "ì¸ìžê°’ë“¤ì„ ë°›ì§€ ëª»í–ˆìŠµë‹ˆë‹¤: %s"
  },
  "Missing required argument: %s": {
    "one": "í•„ìˆ˜ ì¸ìžë¥¼ ë°›ì§€ ëª»í–ˆìŠµë‹ˆë‹¤: %s",
    "other": "í•„ìˆ˜ ì¸ìžë“¤ì„ ë°›ì§€ ëª»í–ˆìŠµë‹ˆë‹¤: %s"
  },
  "Unknown argument: %s": {
    "one": "ì•Œ ìˆ˜ ì—†ëŠ” ì¸ìžìž…ë‹ˆë‹¤: %s",
    "other": "ì•Œ ìˆ˜ ì—†ëŠ” ì¸ìžë“¤ìž…ë‹ˆë‹¤: %s"
  },
  "Invalid values:": "ìž˜ëª»ëœ ê°’ìž…ë‹ˆë‹¤:",
  "Argument: %s, Given: %s, Choices: %s": "ì¸ìž: %s, ìž…ë ¥ë°›ì€ ê°’: %s, ì„ íƒì§€: %s",
  "Argument check failed: %s": "ìœ íš¨í•˜ì§€ ì•Šì€ ì¸ìžìž…ë‹ˆë‹¤: %s",
  "Implications failed:": "ì˜µì…˜ì˜ ì¡°í•©ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤:",
  "Not enough arguments following: %s": "ì¸ìžê°€ ì¶©ë¶„í•˜ê²Œ ì£¼ì–´ì§€ì§€ ì•Šì•˜ìŠµë‹ˆë‹¤: %s",
  "Invalid JSON config file: %s": "ìœ íš¨í•˜ì§€ ì•Šì€ JSON ì„¤ì •íŒŒì¼ìž…ë‹ˆë‹¤: %s",
  "Path to JSON config file": "JSON ì„¤ì •íŒŒì¼ ê²½ë¡œ",
  "Show help": "ë„ì›€ë§ì„ ë³´ì—¬ì¤ë‹ˆë‹¤",
  "Show version number": "ë²„ì „ ë„˜ë²„ë¥¼ ë³´ì—¬ì¤ë‹ˆë‹¤",
  "Did you mean %s?": "ì°¾ê³ ê³„ì‹ ê²Œ %sìž…ë‹ˆê¹Œ?",
  "Arguments %s and %s are mutually exclusive" : "%sì™€ %s ì¸ìžëŠ” ê°™ì´ ì‚¬ìš©ë  ìˆ˜ ì—†ìŠµë‹ˆë‹¤",
  "Positionals:": "ìœ„ì¹˜:",
  "command": "ëª…ë ¹"
}
{
  "Commands:": "Kommandoer:",
  "Options:": "Alternativer:",
  "Examples:": "Eksempler:",
  "boolean": "boolsk",
  "count": "antall",
  "string": "streng",
  "number": "nummer",
  "array": "matrise",
  "required": "obligatorisk",
  "default:": "standard:",
  "choices:": "valg:",
  "generated-value": "generert-verdi",
  "Not enough non-option arguments: got %s, need at least %s": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s",
  "Too many non-option arguments: got %s, maximum of %s": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s",
  "Missing argument value: %s": {
    "one": "Mangler argument verdi: %s",
    "other": "Mangler argument verdier: %s"
  },
  "Missing required argument: %s": {
    "one": "Mangler obligatorisk argument: %s",
    "other": "Mangler obligatoriske argumenter: %s"
  },
  "Unknown argument: %s": {
    "one": "Ukjent argument: %s",
    "other": "Ukjente argumenter: %s"
  },
  "Invalid values:": "Ugyldige verdier:",
  "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gitt: %s, Valg: %s",
  "Argument check failed: %s": "Argumentsjekk mislyktes: %s",
  "Implications failed:": "Konsekvensene mislyktes:",
  "Not enough arguments following: %s": "Ikke nok fÃ¸lgende argumenter: %s",
  "Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s",
  "Path to JSON config file": "Bane til JSON konfigurasjonsfil",
  "Show help": "Vis hjelp",
  "Show version number": "Vis versjonsnummer"
}
{
  "Commands:": "Commando's:",
  "Options:": "Opties:",
  "Examples:": "Voorbeelden:",
  "boolean": "booleaans",
  "count": "aantal",
  "string": "string",
  "number": "getal",
  "array": "lijst",
  "required": "verplicht",
  "default:": "standaard:",
  "choices:": "keuzes:",
  "aliases:": "aliassen:",
  "generated-value": "gegenereerde waarde",
  "Not enough non-option arguments: got %s, need at least %s": "Niet genoeg niet-optie-argumenten: %s gekregen, minstens %s nodig",
  "Too many non-option arguments: got %s, maximum of %s": "Te veel niet-optie-argumenten: %s gekregen, maximum is %s",
  "Missing argument value: %s": {
    "one": "Missende argumentwaarde: %s",
    "other": "Missende argumentwaarden: %s"
  },
  "Missing required argument: %s": {
    "one": "Missend verplicht argument: %s",
    "other": "Missende verplichte argumenten: %s"
  },
  "Unknown argument: %s": {
    "one": "Onbekend argument: %s",
    "other": "Onbekende argumenten: %s"
  },
  "Invalid values:": "Ongeldige waarden:",
  "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeven: %s, Keuzes: %s",
  "Argument check failed: %s": "Argumentcontrole mislukt: %s",
  "Implications failed:": "Ontbrekende afhankelijke argumenten:",
  "Not enough arguments following: %s": "Niet genoeg argumenten na: %s",
  "Invalid JSON config file: %s": "Ongeldig JSON-config-bestand: %s",
  "Path to JSON config file": "Pad naar JSON-config-bestand",
  "Show help": "Toon help",
  "Show version number": "Toon versienummer",
  "Did you mean %s?": "Bedoelde u misschien %s?",
  "Arguments %s and %s are mutually exclusive": "Argumenten %s en %s kunnen niet tegelijk gebruikt worden",
  "Positionals:": "Positie-afhankelijke argumenten",
  "command": "commando"
}
{
  "Commands:": "Kommandoar:",
  "Options:": "Alternativ:",
  "Examples:": "DÃ¸me:",
  "boolean": "boolsk",
  "count": "mengd",
  "string": "streng",
  "number": "nummer",
  "array": "matrise",
  "required": "obligatorisk",
  "default:": "standard:",
  "choices:": "val:",
  "generated-value": "generert-verdi",
  "Not enough non-option arguments: got %s, need at least %s":
    "Ikkje nok ikkje-alternativ argument: fekk %s, treng minst %s",
  "Too many non-option arguments: got %s, maximum of %s":
    "For mange ikkje-alternativ argument: fekk %s, maksimum %s",
  "Missing argument value: %s": {
    "one": "Manglar argumentverdi: %s",
    "other": "Manglar argumentverdiar: %s"
  },
  "Missing required argument: %s": {
    "one": "Manglar obligatorisk argument: %s",
    "other": "Manglar obligatoriske argument: %s"
  },
  "Unknown argument: %s": {
    "one": "Ukjent argument: %s",
    "other": "Ukjende argument: %s"
  },
  "Invalid values:": "Ugyldige verdiar:",
  "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gjeve: %s, Val: %s",
  "Argument check failed: %s": "Argumentsjekk mislukkast: %s",
  "Implications failed:": "Konsekvensane mislukkast:",
  "Not enough arguments following: %s": "Ikkje nok fylgjande argument: %s",
  "Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s",
  "Path to JSON config file": "Bane til JSON konfigurasjonsfil",
  "Show help": "Vis hjelp",
  "Show version number": "Vis versjonsnummer"
}
{
  "Commands:": "Choose yer command:",
  "Options:": "Options for me hearties!",
  "Examples:": "Ex. marks the spot:",
  "required": "requi-yar-ed",
  "Missing required argument: %s": {
    "one": "Ye be havin' to set the followin' argument land lubber: %s",
    "other": "Ye be havin' to set the followin' arguments land lubber: %s"
  },
  "Show help": "Parlay this here code of conduct",
  "Show version number": "'Tis the version ye be askin' fer",
  "Arguments %s and %s are mutually exclusive" : "Yon scurvy dogs %s and %s be as bad as rum and a prudish wench"
}
{
  "Commands:": "Polecenia:",
  "Options:": "Opcje:",
  "Examples:": "PrzykÅ‚ady:",
  "boolean": "boolean",
  "count": "iloÅ›Ä‡",
  "string": "ciÄ…g znakÃ³w",
  "number": "liczba",
  "array": "tablica",
  "required": "wymagany",
  "default:": "domyÅ›lny:",
  "choices:": "dostÄ™pne:",
  "aliases:": "aliasy:",
  "generated-value": "wygenerowana-wartoÅ›Ä‡",
  "Not enough non-option arguments: got %s, need at least %s": "NiewystarczajÄ…ca iloÅ›Ä‡ argumentÃ³w: otrzymano %s, wymagane co najmniej %s",
  "Too many non-option arguments: got %s, maximum of %s": "Zbyt duÅ¼a iloÅ›Ä‡ argumentÃ³w: otrzymano %s, wymagane co najwyÅ¼ej %s",
  "Missing argument value: %s": {
    "one": "Brak wartoÅ›ci dla argumentu: %s",
    "other": "Brak wartoÅ›ci dla argumentÃ³w: %s"
  },
  "Missing required argument: %s": {
    "one": "Brak wymaganego argumentu: %s",
    "other": "Brak wymaganych argumentÃ³w: %s"
  },
  "Unknown argument: %s": {
    "one": "Nieznany argument: %s",
    "other": "Nieznane argumenty: %s"
  },
  "Invalid values:": "NieprawidÅ‚owe wartoÅ›ci:",
  "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Otrzymano: %s, DostÄ™pne: %s",
  "Argument check failed: %s": "Weryfikacja argumentÃ³w nie powiodÅ‚a siÄ™: %s",
  "Implications failed:": "ZaÅ‚oÅ¼enia nie zostaÅ‚y speÅ‚nione:",
  "Not enough arguments following: %s": "NiewystarczajÄ…ca iloÅ›Ä‡ argumentÃ³w nastÄ™pujÄ…cych po: %s",
  "Invalid JSON config file: %s": "NieprawidÅ‚owy plik konfiguracyjny JSON: %s",
  "Path to JSON config file": "ÅšcieÅ¼ka do pliku konfiguracyjnego JSON",
  "Show help": "PokaÅ¼ pomoc",
  "Show version number": "PokaÅ¼ numer wersji",
  "Did you mean %s?": "Czy chodziÅ‚o Ci o %s?",
  "Arguments %s and %s are mutually exclusive": "Argumenty %s i %s wzajemnie siÄ™ wykluczajÄ…",
  "Positionals:": "Pozycyjne:",
  "command": "polecenie"
}
{
  "Commands:": "Comandos:",
  "Options:": "OpÃ§Ãµes:",
  "Examples:": "Exemplos:",
  "boolean": "booleano",
  "count": "contagem",
  "string": "string",
  "number": "nÃºmero",
  "array": "array",
  "required": "obrigatÃ³rio",
  "default:": "padrÃ£o:",
  "choices:": "opÃ§Ãµes:",
  "aliases:": "sinÃ´nimos:",
  "generated-value": "valor-gerado",
  "Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes: Argumento %s, necessÃ¡rio pelo menos %s",
  "Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos: recebido %s, mÃ¡ximo de %s",
  "Missing argument value: %s": {
    "one": "Falta valor de argumento: %s",
    "other": "Falta valores de argumento: %s"
  },
  "Missing required argument: %s": {
    "one": "Falta argumento obrigatÃ³rio: %s",
    "other": "Faltando argumentos obrigatÃ³rios: %s"
  },
  "Unknown argument: %s": {
    "one": "Argumento desconhecido: %s",
    "other": "Argumentos desconhecidos: %s"
  },
  "Invalid values:": "Valores invÃ¡lidos:",
  "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, OpÃ§Ãµes: %s",
  "Argument check failed: %s": "VerificaÃ§Ã£o de argumento falhou: %s",
  "Implications failed:": "ImplicaÃ§Ãµes falharam:",
  "Not enough arguments following: %s": "Argumentos insuficientes a seguir: %s",
  "Invalid JSON config file: %s": "Arquivo JSON de configuraÃ§Ã£o invÃ¡lido: %s",
  "Path to JSON config file": "Caminho para o arquivo JSON de configuraÃ§Ã£o",
  "Show help": "Exibe ajuda",
  "Show version number": "Exibe a versÃ£o",
  "Did you mean %s?": "VocÃª quis dizer %s?",
  "Arguments %s and %s are mutually exclusive" : "Argumentos %s e %s sÃ£o mutualmente exclusivos",
  "Positionals:": "Posicionais:",
  "command": "comando"
}
{
  "Commands:": "Comandos:",
  "Options:": "OpÃ§Ãµes:",
  "Examples:": "Exemplos:",
  "boolean": "boolean",
  "count": "contagem",
  "string": "cadeia de caracteres",
  "number": "nÃºmero",
  "array": "arranjo",
  "required": "requerido",
  "default:": "padrÃ£o:",
  "choices:": "escolhas:",
  "generated-value": "valor-gerado",
  "Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes nÃ£o opcionais: Argumento %s, necessÃ¡rio pelo menos %s",
  "Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos nÃ£o opcionais: recebido %s, mÃ¡ximo de %s",
  "Missing argument value: %s": {
    "one": "Falta valor de argumento: %s",
    "other": "Falta valores de argumento: %s"
  },
  "Missing required argument: %s": {
    "one": "Falta argumento obrigatÃ³rio: %s",
    "other": "Faltando argumentos obrigatÃ³rios: %s"
  },
  "Unknown argument: %s": {
    "one": "Argumento desconhecido: %s",
    "other": "Argumentos desconhecidos: %s"
  },
  "Invalid values:": "Valores invÃ¡lidos:",
  "Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Escolhas: %s",
  "Argument check failed: %s": "VerificaÃ§Ã£o de argumento falhou: %s",
  "Implications failed:": "ImplicaÃ§Ãµes falharam:",
  "Not enough arguments following: %s": "Insuficientes argumentos a seguir: %s",
  "Invalid JSON config file: %s": "Arquivo de configuraÃ§Ã£o em JSON esta invÃ¡lido: %s",
  "Path to JSON config file": "Caminho para o arquivo de configuraÃ§Ã£o em JSON",
  "Show help": "Mostra ajuda",
  "Show version number": "Mostra nÃºmero de versÃ£o",
  "Arguments %s and %s are mutually exclusive" : "Argumentos %s e %s sÃ£o mutualmente exclusivos"
}
{
  "Commands:": "ÐšÐ¾Ð¼Ð°Ð½Ð´Ñ‹:",
  "Options:": "ÐžÐ¿Ñ†Ð¸Ð¸:",
  "Examples:": "ÐŸÑ€Ð¸Ð¼ÐµÑ€Ñ‹:",
  "boolean": "Ð±ÑƒÐ»ÐµÐ²Ñ‹Ð¹ Ñ‚Ð¸Ð¿",
  "count": "Ð¿Ð¾Ð´ÑÑ‡ÐµÑ‚",
  "string": "ÑÑ‚Ñ€Ð¾ÐºÐ¾Ð²Ð¾Ð¹ Ñ‚Ð¸Ð¿",
  "number": "Ñ‡Ð¸ÑÐ»Ð¾",
  "array": "Ð¼Ð°ÑÑÐ¸Ð²",
  "required": "Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾",
  "default:": "Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ:",
  "choices:": "Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚Ð¸:",
  "aliases:": "Ð°Ð»Ð¸Ð°ÑÑ‹:",
  "generated-value": "Ð³ÐµÐ½ÐµÑ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ",
  "Not enough non-option arguments: got %s, need at least %s": "ÐÐµÐ´Ð¾ÑÑ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ Ð½ÐµÐ¾Ð¿Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ñ… Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð²: ÐµÑÑ‚ÑŒ %s, Ð½ÑƒÐ¶Ð½Ð¾ ÐºÐ°Ðº Ð¼Ð¸Ð½Ð¸Ð¼ÑƒÐ¼ %s",
  "Too many non-option arguments: got %s, maximum of %s": "Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð½ÐµÐ¾Ð¿Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ñ… Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð²: ÐµÑÑ‚ÑŒ %s, Ð¼Ð°ÐºÑÐ¸Ð¼ÑƒÐ¼ Ð´Ð¾Ð¿ÑƒÑÑ‚Ð¸Ð¼Ð¾ %s",
  "Missing argument value: %s": {
    "one": "ÐÐµ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°: %s",
    "other": "ÐÐµ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð²: %s"
  },
  "Missing required argument: %s": {
    "one": "ÐÐµ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾Ð³Ð¾ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°: %s",
    "other": "ÐÐµ Ñ…Ð²Ð°Ñ‚Ð°ÐµÑ‚ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹Ñ… Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð²: %s"
  },
  "Unknown argument: %s": {
    "one": "ÐÐµÐ¸Ð·Ð²ÐµÑÑ‚Ð½Ñ‹Ð¹ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚: %s",
    "other": "ÐÐµÐ¸Ð·Ð²ÐµÑÑ‚Ð½Ñ‹Ðµ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹: %s"
  },
  "Invalid values:": "ÐÐµÐ´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ:",
  "Argument: %s, Given: %s, Choices: %s": "ÐÑ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚: %s, Ð”Ð°Ð½Ð½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ: %s, Ð’Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚Ð¸: %s",
  "Argument check failed: %s": "ÐŸÑ€Ð¾Ð²ÐµÑ€ÐºÐ° Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð² Ð½Ðµ ÑƒÐ´Ð°Ð»Ð°ÑÑŒ: %s",
  "Implications failed:": "Ð”Ð°Ð½Ð½Ñ‹Ð¹ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ð¹ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚:",
  "Not enough arguments following: %s": "ÐÐµÐ´Ð¾ÑÑ‚Ð°Ñ‚Ð¾Ñ‡Ð½Ð¾ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ñ… Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð²: %s",
  "Invalid JSON config file: %s": "ÐÐµÐ´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ Ñ„Ð°Ð¹Ð» ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ JSON: %s",
  "Path to JSON config file": "ÐŸÑƒÑ‚ÑŒ Ðº Ñ„Ð°Ð¹Ð»Ñƒ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ JSON",
  "Show help": "ÐŸÐ¾ÐºÐ°Ð·Ð°Ñ‚ÑŒ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒ",
  "Show version number": "ÐŸÐ¾ÐºÐ°Ð·Ð°Ñ‚ÑŒ Ð½Ð¾Ð¼ÐµÑ€ Ð²ÐµÑ€ÑÐ¸Ð¸",
  "Did you mean %s?": "Ð’Ñ‹ Ð¸Ð¼ÐµÐ»Ð¸ Ð² Ð²Ð¸Ð´Ñƒ %s?"
}
{
  "Commands:": "à¸„à¸­à¸¡à¸¡à¸²à¸™",
  "Options:": "à¸­à¸­à¸Ÿà¸Šà¸±à¹ˆà¸™",
  "Examples:": "à¸•à¸±à¸§à¸­à¸¢à¹ˆà¸²à¸‡",
  "boolean": "à¸šà¸¹à¸¥à¸µà¸™",
  "count": "à¸™à¸±à¸š",
  "string": "à¸ªà¸•à¸£à¸´à¸‡",
  "number": "à¸•à¸±à¸§à¹€à¸¥à¸‚",
  "array": "à¸­à¸²à¹€à¸£à¸¢à¹Œ",
  "required": "à¸ˆà¸³à¹€à¸›à¹‡à¸™",
  "default:": "à¸„à¹ˆà¸²à¹€à¸£à¸´à¹ˆà¸¡à¸•à¹‰à¸™",
  "choices:": "à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸",
  "aliases:": "à¹€à¸­à¹€à¸¥à¸µà¸¢à¸ª",
  "generated-value": "à¸„à¹ˆà¸²à¸—à¸µà¹ˆà¸–à¸¹à¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚à¸¶à¹‰à¸™",
  "Not enough non-option arguments: got %s, need at least %s": "à¹ƒà¸ªà¹ˆà¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¹„à¸¡à¹ˆà¸„à¸£à¸šà¸•à¸²à¸¡à¸ˆà¸³à¸™à¸§à¸™à¸—à¸µà¹ˆà¸à¸³à¸«à¸™à¸”: à¹ƒà¸ªà¹ˆà¸„à¹ˆà¸²à¸¡à¸²à¸ˆà¸³à¸™à¸§à¸™ %s à¸„à¹ˆà¸², à¹à¸•à¹ˆà¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸­à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸­à¸¢ %s à¸„à¹ˆà¸²",
  "Too many non-option arguments: got %s, maximum of %s": "à¹ƒà¸ªà¹ˆà¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¹€à¸à¸´à¸™à¸ˆà¸³à¸™à¸§à¸™à¸—à¸µà¹ˆà¸à¸³à¸«à¸™à¸”: à¹ƒà¸ªà¹ˆà¸„à¹ˆà¸²à¸¡à¸²à¸ˆà¸³à¸™à¸§à¸™ %s à¸„à¹ˆà¸², à¹à¸•à¹ˆà¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸¡à¸²à¸à¸—à¸µà¹ˆà¸ªà¸¸à¸” %s à¸„à¹ˆà¸²",
  "Missing argument value: %s": {
    "one": "à¸„à¹ˆà¸²à¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¸—à¸µà¹ˆà¸‚à¸²à¸”à¹„à¸›: %s",
    "other": "à¸„à¹ˆà¸²à¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¸—à¸µà¹ˆà¸‚à¸²à¸”à¹„à¸›: %s"
  },
  "Missing required argument: %s": {
    "one": "à¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¸ˆà¸³à¹€à¸›à¹‡à¸™à¸—à¸µà¹ˆà¸‚à¸²à¸”à¹„à¸›: %s",
    "other": "à¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¸ˆà¸³à¹€à¸›à¹‡à¸™à¸—à¸µà¹ˆà¸‚à¸²à¸”à¹„à¸›: %s"
  },
  "Unknown argument: %s": {
    "one": "à¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¸—à¸µà¹ˆà¹„à¸¡à¹ˆà¸£à¸¹à¹‰à¸ˆà¸±à¸: %s",
    "other": "à¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¸—à¸µà¹ˆà¹„à¸¡à¹ˆà¸£à¸¹à¹‰à¸ˆà¸±à¸: %s"
  },
  "Invalid values:": "à¸„à¹ˆà¸²à¹„à¸¡à¹ˆà¸–à¸¹à¸à¸•à¹‰à¸­à¸‡:",
  "Argument: %s, Given: %s, Choices: %s": "à¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œ: %s, à¹„à¸”à¹‰à¸£à¸±à¸š: %s, à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸: %s",
  "Argument check failed: %s": "à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šà¸žà¸šà¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¸—à¸µà¹ˆà¹„à¸¡à¹ˆà¸–à¸¹à¸à¸•à¹‰à¸­à¸‡: %s",
  "Implications failed:": "Implications à¹„à¸¡à¹ˆà¸ªà¸³à¹€à¸£à¹‡à¸ˆ:",
  "Not enough arguments following: %s": "à¹ƒà¸ªà¹ˆà¸­à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¹„à¸¡à¹ˆà¸„à¸£à¸š: %s",
  "Invalid JSON config file: %s": "à¹„à¸Ÿà¸¥à¹Œà¸„à¸­à¸™à¸Ÿà¸´à¸„ JSON à¹„à¸¡à¹ˆà¸–à¸¹à¸à¸•à¹‰à¸­à¸‡: %s",
  "Path to JSON config file": "à¸žà¸²à¸—à¹„à¸Ÿà¸¥à¹Œà¸„à¸­à¸™à¸Ÿà¸´à¸„ JSON",
  "Show help": "à¸‚à¸­à¸„à¸§à¸²à¸¡à¸Šà¹ˆà¸§à¸¢à¹€à¸«à¸¥à¸·à¸­",
  "Show version number": "à¹à¸ªà¸”à¸‡à¸•à¸±à¸§à¹€à¸¥à¸‚à¹€à¸§à¸­à¸£à¹Œà¸Šà¸±à¹ˆà¸™",
  "Did you mean %s?": "à¸„à¸¸à¸“à¸«à¸¡à¸²à¸¢à¸–à¸¶à¸‡ %s?"
}
{
  "Commands:": "Komutlar:",
  "Options:": "SeÃ§enekler:",
  "Examples:": "Ã–rnekler:",
  "boolean": "boolean",
  "count": "sayÄ±",
  "string": "string",
  "number": "numara",
  "array": "array",
  "required": "zorunlu",
  "default:": "varsayÄ±lan:",
  "choices:": "seÃ§imler:",
  "aliases:": "takma adlar:",
  "generated-value": "oluÅŸturulan-deÄŸer",
  "Not enough non-option arguments: got %s, need at least %s": "SeÃ§enek dÄ±ÅŸÄ± argÃ¼manlar yetersiz: %s bulundu, %s gerekli",
  "Too many non-option arguments: got %s, maximum of %s": "SeÃ§enek dÄ±ÅŸÄ± argÃ¼manlar gereÄŸinden fazla: %s bulundu, azami %s",
  "Missing argument value: %s": {
    "one": "Eksik argÃ¼man deÄŸeri: %s",
    "other": "Eksik argÃ¼man deÄŸerleri: %s"
  },
  "Missing required argument: %s": {
    "one": "Eksik zorunlu argÃ¼man: %s",
    "other": "Eksik zorunlu argÃ¼manlar: %s"
  },
  "Unknown argument: %s": {
    "one": "Bilinmeyen argÃ¼man: %s",
    "other": "Bilinmeyen argÃ¼manlar: %s"
  },
  "Invalid values:": "GeÃ§ersiz deÄŸerler:",
  "Argument: %s, Given: %s, Choices: %s": "ArgÃ¼man: %s, Verilen: %s, SeÃ§imler: %s",
  "Argument check failed: %s": "ArgÃ¼man kontrolÃ¼ baÅŸarÄ±sÄ±z oldu: %s",
  "Implications failed:": "SonuÃ§lar baÅŸarÄ±sÄ±z oldu:",
  "Not enough arguments following: %s": "%s iÃ§in yeterli argÃ¼man bulunamadÄ±",
  "Invalid JSON config file: %s": "GeÃ§ersiz JSON yapÄ±landÄ±rma dosyasÄ±: %s",
  "Path to JSON config file": "JSON yapÄ±landÄ±rma dosya konumu",
  "Show help": "YardÄ±m detaylarÄ±nÄ± gÃ¶ster",
  "Show version number": "Versiyon detaylarÄ±nÄ± gÃ¶ster",
  "Did you mean %s?": "Bunu mu demek istediniz: %s?",
  "Positionals:": "SÄ±ralÄ±lar:",
  "command": "komut"
}
{
  "Commands:": "å‘½ä»¤ï¼š",
  "Options:": "é€‰é¡¹ï¼š",
  "Examples:": "ç¤ºä¾‹ï¼š",
  "boolean": "å¸ƒå°”",
  "count": "è®¡æ•°",
  "string": "å­—ç¬¦ä¸²",
  "number": "æ•°å­—",
  "array": "æ•°ç»„",
  "required": "å¿…éœ€",
  "default:": "é»˜è®¤å€¼:",
  "choices:": "å¯é€‰å€¼:",
  "generated-value": "ç”Ÿæˆçš„å€¼",
  "Not enough non-option arguments: got %s, need at least %s": "ç¼ºå°‘ non-option å‚æ•°ï¼šä¼ å…¥äº† %s ä¸ª, è‡³å°‘éœ€è¦ %s ä¸ª",
  "Too many non-option arguments: got %s, maximum of %s": "non-option å‚æ•°è¿‡å¤šï¼šä¼ å…¥äº† %s ä¸ª, æœ€å¤§å…è®¸ %s ä¸ª",
  "Missing argument value: %s": {
    "one": "æ²¡æœ‰ç»™æ­¤é€‰é¡¹æŒ‡å®šå€¼ï¼š%s",
    "other": "æ²¡æœ‰ç»™è¿™äº›é€‰é¡¹æŒ‡å®šå€¼ï¼š%s"
  },
  "Missing required argument: %s": {
    "one": "ç¼ºå°‘å¿…é¡»çš„é€‰é¡¹ï¼š%s",
    "other": "ç¼ºå°‘è¿™äº›å¿…é¡»çš„é€‰é¡¹ï¼š%s"
  },
  "Unknown argument: %s": {
    "one": "æ— æ³•è¯†åˆ«çš„é€‰é¡¹ï¼š%s",
    "other": "æ— æ³•è¯†åˆ«è¿™äº›é€‰é¡¹ï¼š%s"
  },
  "Invalid values:": "æ— æ•ˆçš„é€‰é¡¹å€¼ï¼š",
  "Argument: %s, Given: %s, Choices: %s": "é€‰é¡¹åç§°: %s, ä¼ å…¥çš„å€¼: %s, å¯é€‰çš„å€¼ï¼š%s",
  "Argument check failed: %s": "é€‰é¡¹å€¼éªŒè¯å¤±è´¥ï¼š%s",
  "Implications failed:": "ç¼ºå°‘ä¾èµ–çš„é€‰é¡¹ï¼š",
  "Not enough arguments following: %s": "æ²¡æœ‰æä¾›è¶³å¤Ÿçš„å€¼ç»™æ­¤é€‰é¡¹ï¼š%s",
  "Invalid JSON config file: %s": "æ— æ•ˆçš„ JSON é…ç½®æ–‡ä»¶ï¼š%s",
  "Path to JSON config file": "JSON é…ç½®æ–‡ä»¶çš„è·¯å¾„",
  "Show help": "æ˜¾ç¤ºå¸®åŠ©ä¿¡æ¯",
  "Show version number": "æ˜¾ç¤ºç‰ˆæœ¬å·",
  "Did you mean %s?": "æ˜¯æŒ‡ %s?",
  "Arguments %s and %s are mutually exclusive" : "é€‰é¡¹ %s å’Œ %s æ˜¯äº’æ–¥çš„",
  "Positionals:": "ä½ç½®ï¼š",
  "command": "å‘½ä»¤"
}
{
  "Commands:": "å‘½ä»¤ï¼š",
  "Options:": "é¸é …ï¼š",
  "Examples:": "ä¾‹ï¼š",
  "boolean": "å¸ƒæž—",
  "count": "æ¬¡æ•¸",
  "string": "å­—ä¸²",
  "number": "æ•¸å­—",
  "array": "é™£åˆ—",
  "required": "å¿…é ˆ",
  "default:": "é è¨­å€¼:",
  "choices:": "å¯é¸å€¼:",
  "aliases:": "åˆ¥å:",
  "generated-value": "ç”Ÿæˆçš„å€¼",
  "Not enough non-option arguments: got %s, need at least %s": "non-option å¼•æ•¸ä¸è¶³ï¼šåªå‚³å…¥äº† %s å€‹, è‡³å°‘è¦ %s å€‹",
  "Too many non-option arguments: got %s, maximum of %s": "non-option å¼•æ•¸éŽå¤šï¼šå‚³å…¥äº† %s å€‹, ä½†æœ€å¤š %s å€‹",
  "Missing argument value: %s": {
    "one": "æ­¤å¼•æ•¸ç„¡æŒ‡å®šå€¼ï¼š%s",
    "other": "é€™äº›å¼•æ•¸ç„¡æŒ‡å®šå€¼ï¼š%s"
  },
  "Missing required argument: %s": {
    "one": "ç¼ºå°‘å¿…é ˆçš„å¼•æ•¸ï¼š%s",
    "other": "ç¼ºå°‘é€™äº›å¿…é ˆçš„å¼•æ•¸ï¼š%s"
  },
  "Unknown argument: %s": {
    "one": "æœªçŸ¥çš„å¼•æ•¸ï¼š%s",
    "other": "æœªçŸ¥çš„é€™äº›å¼•æ•¸ï¼š%s"
  },
  "Invalid values:": "ç„¡æ•ˆçš„é¸é …å€¼ï¼š",
  "Argument: %s, Given: %s, Choices: %s": "å¼•æ•¸åç¨±: %s, å‚³å…¥çš„å€¼: %s, å¯é¸çš„å€¼ï¼š%s",
  "Argument check failed: %s": "å¼•æ•¸é©—è­‰å¤±æ•—ï¼š%s",
  "Implications failed:": "ç¼ºå°‘ä¾è³´çš„é¸é …ï¼š",
  "Not enough arguments following: %s": "æ²’æœ‰æä¾›è¶³å¤ çš„å€¼çµ¦æ­¤å¼•æ•¸ï¼š%s",
  "Invalid JSON config file: %s": "ç„¡æ•ˆçš„ JSON è¨­ç½®æ–‡ä»¶ï¼š%s",
  "Path to JSON config file": "JSON è¨­ç½®æ–‡ä»¶çš„è·¯å¾‘",
  "Show help": "é¡¯ç¤ºèªªæ˜Ž",
  "Show version number": "é¡¯ç¤ºç‰ˆæœ¬",
  "Did you mean %s?": "æ˜¯æŒ‡ %s?",
  "Arguments %s and %s are mutually exclusive" : "å¼•æ•¸ %s å’Œ %s æ˜¯äº’æ–¥çš„"
}
'use strict';

module.exports = options => {
	options = Object.assign({
		onlyFirst: false
	}, options);

	const pattern = [
		'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
		'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
	].join('|');

	return new RegExp(pattern, options.onlyFirst ? undefined : 'g');
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "ansi-regex",
  "version": "4.1.0",
  "description": "Regular expression for matching ANSI escape codes",
  "license": "MIT",
  "repository": "chalk/ansi-regex",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "^0.25.0",
    "xo": "^0.23.0"
  }
}"use strict";

module.exports = () => {
  // https://mths.be/emoji
  return /\u{1F3F4}(?:\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074})\u{E007F}|\u200D\u2620\uFE0F)|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F468}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|[\u{1F3FB}-\u{1F3FF}]\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|\u{1F469}\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]\u200D[\u2695\u2696\u2708]|\u{1F468}(?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F469}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F468}(?:\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|[\u{1F3FB}-\u{1F3FF}])|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}]|\u{1F469}\u200D\u{1F466}|\u{1F1F6}\u{1F1E6}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9D1}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6F9}\u{1F910}-\u{1F93A}\u{1F93C}-\u{1F93E}\u{1F940}-\u{1F945}\u{1F947}-\u{1F970}\u{1F973}-\u{1F976}\u{1F97A}\u{1F97C}-\u{1F9A2}\u{1F9B0}-\u{1F9B9}\u{1F9C0}-\u{1F9C2}\u{1F9D0}-\u{1F9FF}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6F9}\u{1F910}-\u{1F93A}\u{1F93C}-\u{1F93E}\u{1F940}-\u{1F945}\u{1F947}-\u{1F970}\u{1F973}-\u{1F976}\u{1F97A}\u{1F97C}-\u{1F9A2}\u{1F9B0}-\u{1F9B9}\u{1F9C0}-\u{1F9C2}\u{1F9D0}-\u{1F9FF}]\uFE0F|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F469}\u{1F46E}\u{1F470}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9D1}-\u{1F9DD}]/gu;
};
"use strict";

module.exports = () => {
  // https://mths.be/emoji
  return /\u{1F3F4}(?:\u{E0067}\u{E0062}(?:\u{E0065}\u{E006E}\u{E0067}|\u{E0077}\u{E006C}\u{E0073}|\u{E0073}\u{E0063}\u{E0074})\u{E007F}|\u200D\u2620\uFE0F)|\u{1F469}\u200D\u{1F469}\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F468}(?:\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D)?\u{1F468}|[\u{1F468}\u{1F469}]\u200D(?:\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}])|\u{1F466}\u200D\u{1F466}|\u{1F467}\u200D[\u{1F466}\u{1F467}]|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|[\u{1F3FB}-\u{1F3FF}]\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|\u{1F469}\u200D(?:\u2764\uFE0F\u200D(?:\u{1F48B}\u200D[\u{1F468}\u{1F469}]|[\u{1F468}\u{1F469}])|[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}])|\u{1F469}\u200D\u{1F466}\u200D\u{1F466}|(?:\u{1F441}\uFE0F\u200D\u{1F5E8}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]\u200D[\u2695\u2696\u2708]|\u{1F468}(?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}]\uFE0F|[\u{1F46F}\u{1F93C}\u{1F9DE}\u{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9D6}-\u{1F9DD}](?:[\u{1F3FB}-\u{1F3FF}]\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\u{1F469}\u200D[\u2695\u2696\u2708])\uFE0F|\u{1F469}\u200D\u{1F467}\u200D[\u{1F466}\u{1F467}]|\u{1F469}\u200D\u{1F469}\u200D[\u{1F466}\u{1F467}]|\u{1F468}(?:\u200D(?:[\u{1F468}\u{1F469}]\u200D[\u{1F466}\u{1F467}]|[\u{1F466}\u{1F467}])|[\u{1F3FB}-\u{1F3FF}])|\u{1F3F3}\uFE0F\u200D\u{1F308}|\u{1F469}\u200D\u{1F467}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]\u200D[\u{1F33E}\u{1F373}\u{1F393}\u{1F3A4}\u{1F3A8}\u{1F3EB}\u{1F3ED}\u{1F4BB}\u{1F4BC}\u{1F527}\u{1F52C}\u{1F680}\u{1F692}\u{1F9B0}-\u{1F9B3}]|\u{1F469}\u200D\u{1F466}|\u{1F1F6}\u{1F1E6}|\u{1F1FD}\u{1F1F0}|\u{1F1F4}\u{1F1F2}|\u{1F469}[\u{1F3FB}-\u{1F3FF}]|\u{1F1ED}[\u{1F1F0}\u{1F1F2}\u{1F1F3}\u{1F1F7}\u{1F1F9}\u{1F1FA}]|\u{1F1EC}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EE}\u{1F1F1}-\u{1F1F3}\u{1F1F5}-\u{1F1FA}\u{1F1FC}\u{1F1FE}]|\u{1F1EA}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1ED}\u{1F1F7}-\u{1F1FA}]|\u{1F1E8}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1EE}\u{1F1F0}-\u{1F1F5}\u{1F1F7}\u{1F1FA}-\u{1F1FF}]|\u{1F1F2}[\u{1F1E6}\u{1F1E8}-\u{1F1ED}\u{1F1F0}-\u{1F1FF}]|\u{1F1F3}[\u{1F1E6}\u{1F1E8}\u{1F1EA}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F4}\u{1F1F5}\u{1F1F7}\u{1F1FA}\u{1F1FF}]|\u{1F1FC}[\u{1F1EB}\u{1F1F8}]|\u{1F1FA}[\u{1F1E6}\u{1F1EC}\u{1F1F2}\u{1F1F3}\u{1F1F8}\u{1F1FE}\u{1F1FF}]|\u{1F1F0}[\u{1F1EA}\u{1F1EC}-\u{1F1EE}\u{1F1F2}\u{1F1F3}\u{1F1F5}\u{1F1F7}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|\u{1F1EF}[\u{1F1EA}\u{1F1F2}\u{1F1F4}\u{1F1F5}]|\u{1F1F8}[\u{1F1E6}-\u{1F1EA}\u{1F1EC}-\u{1F1F4}\u{1F1F7}-\u{1F1F9}\u{1F1FB}\u{1F1FD}-\u{1F1FF}]|\u{1F1EE}[\u{1F1E8}-\u{1F1EA}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}]|\u{1F1FF}[\u{1F1E6}\u{1F1F2}\u{1F1FC}]|\u{1F1EB}[\u{1F1EE}-\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1F7}]|\u{1F1F5}[\u{1F1E6}\u{1F1EA}-\u{1F1ED}\u{1F1F0}-\u{1F1F3}\u{1F1F7}-\u{1F1F9}\u{1F1FC}\u{1F1FE}]|\u{1F1E9}[\u{1F1EA}\u{1F1EC}\u{1F1EF}\u{1F1F0}\u{1F1F2}\u{1F1F4}\u{1F1FF}]|\u{1F1F9}[\u{1F1E6}\u{1F1E8}\u{1F1E9}\u{1F1EB}-\u{1F1ED}\u{1F1EF}-\u{1F1F4}\u{1F1F7}\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FF}]|\u{1F1E7}[\u{1F1E6}\u{1F1E7}\u{1F1E9}-\u{1F1EF}\u{1F1F1}-\u{1F1F4}\u{1F1F6}-\u{1F1F9}\u{1F1FB}\u{1F1FC}\u{1F1FE}\u{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u{1F1F1}[\u{1F1E6}-\u{1F1E8}\u{1F1EE}\u{1F1F0}\u{1F1F7}-\u{1F1FB}\u{1F1FE}]|\u{1F1E6}[\u{1F1E8}-\u{1F1EC}\u{1F1EE}\u{1F1F1}\u{1F1F2}\u{1F1F4}\u{1F1F6}-\u{1F1FA}\u{1F1FC}\u{1F1FD}\u{1F1FF}]|\u{1F1F7}[\u{1F1EA}\u{1F1F4}\u{1F1F8}\u{1F1FA}\u{1F1FC}]|\u{1F1FB}[\u{1F1E6}\u{1F1E8}\u{1F1EA}\u{1F1EC}\u{1F1EE}\u{1F1F3}\u{1F1FA}]|\u{1F1FE}[\u{1F1EA}\u{1F1F9}]|[\u{1F3C3}\u{1F3C4}\u{1F3CA}\u{1F46E}\u{1F471}\u{1F473}\u{1F477}\u{1F481}\u{1F482}\u{1F486}\u{1F487}\u{1F645}-\u{1F647}\u{1F64B}\u{1F64D}\u{1F64E}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F926}\u{1F937}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B8}\u{1F9B9}\u{1F9D6}-\u{1F9DD}][\u{1F3FB}-\u{1F3FF}]|[\u26F9\u{1F3CB}\u{1F3CC}\u{1F575}][\u{1F3FB}-\u{1F3FF}]|[\u261D\u270A-\u270D\u{1F385}\u{1F3C2}\u{1F3C7}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}\u{1F467}\u{1F470}\u{1F472}\u{1F474}-\u{1F476}\u{1F478}\u{1F47C}\u{1F483}\u{1F485}\u{1F4AA}\u{1F574}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F64C}\u{1F64F}\u{1F6C0}\u{1F6CC}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F930}-\u{1F936}\u{1F9B5}\u{1F9B6}\u{1F9D1}-\u{1F9D5}][\u{1F3FB}-\u{1F3FF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6F9}\u{1F910}-\u{1F93A}\u{1F93C}-\u{1F93E}\u{1F940}-\u{1F945}\u{1F947}-\u{1F970}\u{1F973}-\u{1F976}\u{1F97A}\u{1F97C}-\u{1F9A2}\u{1F9B0}-\u{1F9B9}\u{1F9C0}-\u{1F9C2}\u{1F9D0}-\u{1F9FF}]|[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\u{1F004}\u{1F0CF}\u{1F170}\u{1F171}\u{1F17E}\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F321}\u{1F324}-\u{1F393}\u{1F396}\u{1F397}\u{1F399}-\u{1F39B}\u{1F39E}-\u{1F3F0}\u{1F3F3}-\u{1F3F5}\u{1F3F7}-\u{1F4FD}\u{1F4FF}-\u{1F53D}\u{1F549}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F56F}\u{1F570}\u{1F573}-\u{1F57A}\u{1F587}\u{1F58A}-\u{1F58D}\u{1F590}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5A5}\u{1F5A8}\u{1F5B1}\u{1F5B2}\u{1F5BC}\u{1F5C2}-\u{1F5C4}\u{1F5D1}-\u{1F5D3}\u{1F5DC}-\u{1F5DE}\u{1F5E1}\u{1F5E3}\u{1F5E8}\u{1F5EF}\u{1F5F3}\u{1F5FA}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CB}-\u{1F6D2}\u{1F6E0}-\u{1F6E5}\u{1F6E9}\u{1F6EB}\u{1F6EC}\u{1F6F0}\u{1F6F3}-\u{1F6F9}\u{1F910}-\u{1F93A}\u{1F93C}-\u{1F93E}\u{1F940}-\u{1F945}\u{1F947}-\u{1F970}\u{1F973}-\u{1F976}\u{1F97A}\u{1F97C}-\u{1F9A2}\u{1F9B0}-\u{1F9B9}\u{1F9C0}-\u{1F9C2}\u{1F9D0}-\u{1F9FF}]\uFE0F?|[\u261D\u26F9\u270A-\u270D\u{1F385}\u{1F3C2}-\u{1F3C4}\u{1F3C7}\u{1F3CA}-\u{1F3CC}\u{1F442}\u{1F443}\u{1F446}-\u{1F450}\u{1F466}-\u{1F469}\u{1F46E}\u{1F470}-\u{1F478}\u{1F47C}\u{1F481}-\u{1F483}\u{1F485}-\u{1F487}\u{1F4AA}\u{1F574}\u{1F575}\u{1F57A}\u{1F590}\u{1F595}\u{1F596}\u{1F645}-\u{1F647}\u{1F64B}-\u{1F64F}\u{1F6A3}\u{1F6B4}-\u{1F6B6}\u{1F6C0}\u{1F6CC}\u{1F918}-\u{1F91C}\u{1F91E}\u{1F91F}\u{1F926}\u{1F930}-\u{1F939}\u{1F93D}\u{1F93E}\u{1F9B5}\u{1F9B6}\u{1F9B8}\u{1F9B9}\u{1F9D1}-\u{1F9DD}]/gu;
};
"use strict";

module.exports = function () {
  // https://mths.be/emoji
  return /\uD83C\uDFF4(?:\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74)\uDB40\uDC7F|\u200D\u2620\uFE0F)|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3]))|\uD83D\uDC69\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83D\uDC69\u200D[\u2695\u2696\u2708])\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC68(?:\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDD1-\uDDDD])/g;
};
Copyright Mathias Bynens <https://mathiasbynens.be/>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "emoji-regex",
  "version": "7.0.3",
  "description": "A regular expression to match all Emoji-only symbols as per the Unicode Standard.",
  "homepage": "https://mths.be/emoji-regex",
  "main": "index.js",
  "types": "index.d.ts",
  "license": "MIT",
  "author": {
    "name": "Mathias Bynens",
    "url": "https://mathiasbynens.be/"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/mathiasbynens/emoji-regex.git"
  },
  "files": [
    "LICENSE-MIT.txt",
    "index.js",
    "index.d.ts",
    "text.js",
    "es2015/index.js",
    "es2015/text.js"
  ],
  "devDependencies": {
    "@babel/cli": "^7.0.0",
    "@babel/core": "^7.0.0",
    "@babel/plugin-proposal-unicode-property-regex": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "mocha": "^5.2.0",
    "regexgen": "^1.3.0",
    "unicode-11.0.0": "^0.7.7",
    "unicode-tr51": "^9.0.1"
  }
}"use strict";

module.exports = function () {
  // https://mths.be/emoji
  return /\uD83C\uDFF4(?:\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74)\uDB40\uDC7F|\u200D\u2620\uFE0F)|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3]))|\uD83D\uDC69\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83D\uDC69\u200D[\u2695\u2696\u2708])\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC68(?:\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])\uFE0F?|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDD1-\uDDDD])/g;
};
'use strict';
/* eslint-disable yoda */
module.exports = x => {
	if (Number.isNaN(x)) {
		return false;
	}

	// code points are derived from:
	// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt
	if (
		x >= 0x1100 && (
			x <= 0x115f ||  // Hangul Jamo
			x === 0x2329 || // LEFT-POINTING ANGLE BRACKET
			x === 0x232a || // RIGHT-POINTING ANGLE BRACKET
			// CJK Radicals Supplement .. Enclosed CJK Letters and Months
			(0x2e80 <= x && x <= 0x3247 && x !== 0x303f) ||
			// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
			(0x3250 <= x && x <= 0x4dbf) ||
			// CJK Unified Ideographs .. Yi Radicals
			(0x4e00 <= x && x <= 0xa4c6) ||
			// Hangul Jamo Extended-A
			(0xa960 <= x && x <= 0xa97c) ||
			// Hangul Syllables
			(0xac00 <= x && x <= 0xd7a3) ||
			// CJK Compatibility Ideographs
			(0xf900 <= x && x <= 0xfaff) ||
			// Vertical Forms
			(0xfe10 <= x && x <= 0xfe19) ||
			// CJK Compatibility Forms .. Small Form Variants
			(0xfe30 <= x && x <= 0xfe6b) ||
			// Halfwidth and Fullwidth Forms
			(0xff01 <= x && x <= 0xff60) ||
			(0xffe0 <= x && x <= 0xffe6) ||
			// Kana Supplement
			(0x1b000 <= x && x <= 0x1b001) ||
			// Enclosed Ideographic Supplement
			(0x1f200 <= x && x <= 0x1f251) ||
			// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
			(0x20000 <= x && x <= 0x3fffd)
		)
	) {
		return true;
	}

	return false;
};
The MIT License (MIT)

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
{
  "name": "is-fullwidth-code-point",
  "version": "2.0.0",
  "description": "Check if the character represented by a given Unicode code point is fullwidth",
  "license": "MIT",
  "repository": "sindresorhus/is-fullwidth-code-point",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=4"
  },
  "files": [
    "index.js"
  ],
  "devDependencies": {
    "ava": "*",
    "xo": "*"
  }
}'use strict';
const stripAnsi = require('strip-ansi');
const isFullwidthCodePoint = require('is-fullwidth-code-point');
const emojiRegex = require('emoji-regex')();

module.exports = input => {
	input = input.replace(emojiRegex, '  ');

	if (typeof input !== 'string' || input.length === 0) {
		return 0;
	}

	input = stripAnsi(input);

	let width = 0;

	for (let i = 0; i < input.length; i++) {
		const code = input.codePointAt(i);

		// Ignore control characters
		if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {
			continue;
		}

		// Ignore combining characters
		if (code >= 0x300 && code <= 0x36F) {
			continue;
		}

		// Surrogates
		if (code > 0xFFFF) {
			i++;
		}

		width += isFullwidthCodePoint(code) ? 2 : 1;
	}

	return width;
};
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "string-width",
  "version": "3.1.0",
  "description": "Get the visual width of a string - the number of columns required to display it",
  "license": "MIT",
  "repository": "sindresorhus/string-width",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js"
  ],
  "dependencies": {
    "emoji-regex": "^7.0.1",
    "is-fullwidth-code-point": "^2.0.0",
    "strip-ansi": "^5.1.0"
  },
  "devDependencies": {
    "ava": "^1.0.1",
    "xo": "^0.23.0"
  }
}'use strict';
const ansiRegex = require('ansi-regex');

const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;

module.exports = stripAnsi;
module.exports.default = stripAnsi;
MIT License

Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "strip-ansi",
  "version": "5.2.0",
  "description": "Strip ANSI escape codes from a string",
  "license": "MIT",
  "repository": "chalk/strip-ansi",
  "author": {
    "name": "Sindre Sorhus",
    "email": "sindresorhus@gmail.com",
    "url": "sindresorhus.com"
  },
  "engines": {
    "node": ">=6"
  },
  "files": [
    "index.js",
    "index.d.ts"
  ],
  "dependencies": {
    "ansi-regex": "^4.1.0"
  },
  "devDependencies": {
    "ava": "^1.3.1",
    "tsd-check": "^0.5.0",
    "xo": "^0.24.0"
  }
}{
  "name": "yargs",
  "version": "13.3.2",
  "description": "yargs the modern, pirate-themed, successor to optimist.",
  "main": "./index.js",
  "files": [
    "index.js",
    "yargs.js",
    "lib",
    "locales",
    "completion.sh.hbs",
    "completion.zsh.hbs",
    "LICENSE"
  ],
  "dependencies": {
    "cliui": "^5.0.0",
    "find-up": "^3.0.0",
    "get-caller-file": "^2.0.1",
    "require-directory": "^2.1.1",
    "require-main-filename": "^2.0.0",
    "set-blocking": "^2.0.0",
    "string-width": "^3.0.0",
    "which-module": "^2.0.0",
    "y18n": "^4.0.0",
    "yargs-parser": "^13.1.2"
  },
  "devDependencies": {
    "chai": "^4.2.0",
    "chalk": "^2.4.2",
    "coveralls": "^3.0.3",
    "cpr": "^3.0.1",
    "cross-spawn": "^6.0.4",
    "es6-promise": "^4.2.5",
    "hashish": "0.0.4",
    "mocha": "^5.2.0",
    "nyc": "^14.1.0",
    "rimraf": "^2.6.3",
    "standard": "^12.0.1",
    "standard-version": "^6.0.1",
    "which": "^1.3.1",
    "yargs-test-extends": "^1.0.1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/yargs/yargs.git"
  },
  "homepage": "https://yargs.js.org/",
  "standard": {
    "ignore": [
      "**/example/**"
    ]
  },
  "license": "MIT",
  "engine": {
    "node": ">=6"
  }
}'use strict'
const argsert = require('./lib/argsert')
const fs = require('fs')
const Command = require('./lib/command')
const Completion = require('./lib/completion')
const Parser = require('yargs-parser')
const path = require('path')
const Usage = require('./lib/usage')
const Validation = require('./lib/validation')
const Y18n = require('y18n')
const objFilter = require('./lib/obj-filter')
const setBlocking = require('set-blocking')
const applyExtends = require('./lib/apply-extends')
const { globalMiddlewareFactory } = require('./lib/middleware')
const YError = require('./lib/yerror')

exports = module.exports = Yargs
function Yargs (processArgs, cwd, parentRequire) {
  processArgs = processArgs || [] // handle calling yargs().

  const self = {}
  let command = null
  let completion = null
  let groups = {}
  let globalMiddleware = []
  let output = ''
  let preservedGroups = {}
  let usage = null
  let validation = null

  const y18n = Y18n({
    directory: path.resolve(__dirname, './locales'),
    updateFiles: false
  })

  self.middleware = globalMiddlewareFactory(globalMiddleware, self)

  if (!cwd) cwd = process.cwd()

  self.scriptName = function scriptName (scriptName) {
    self.$0 = scriptName
    return self
  }

  // ignore the node bin, specify this in your
  // bin file with #!/usr/bin/env node
  if (/\b(node|iojs|electron)(\.exe)?$/.test(process.argv[0])) {
    self.$0 = process.argv.slice(1, 2)
  } else {
    self.$0 = process.argv.slice(0, 1)
  }

  self.$0 = self.$0
    .map((x, i) => {
      const b = rebase(cwd, x)
      return x.match(/^(\/|([a-zA-Z]:)?\\)/) && b.length < x.length ? b : x
    })
    .join(' ').trim()

  if (process.env._ !== undefined && process.argv[1] === process.env._) {
    self.$0 = process.env._.replace(
      `${path.dirname(process.execPath)}/`, ''
    )
  }

  // use context object to keep track of resets, subcommand execution, etc
  // submodules should modify and check the state of context as necessary
  const context = { resets: -1, commands: [], fullCommands: [], files: [] }
  self.getContext = () => context

  // puts yargs back into an initial state. any keys
  // that have been set to "global" will not be reset
  // by this action.
  let options
  self.resetOptions = self.reset = function resetOptions (aliases) {
    context.resets++
    aliases = aliases || {}
    options = options || {}
    // put yargs back into an initial state, this
    // logic is used to build a nested command
    // hierarchy.
    const tmpOptions = {}
    tmpOptions.local = options.local ? options.local : []
    tmpOptions.configObjects = options.configObjects ? options.configObjects : []

    // if a key has been explicitly set as local,
    // we should reset it before passing options to command.
    const localLookup = {}
    tmpOptions.local.forEach((l) => {
      localLookup[l] = true
      ;(aliases[l] || []).forEach((a) => {
        localLookup[a] = true
      })
    })

    // preserve all groups not set to local.
    preservedGroups = Object.keys(groups).reduce((acc, groupName) => {
      const keys = groups[groupName].filter(key => !(key in localLookup))
      if (keys.length > 0) {
        acc[groupName] = keys
      }
      return acc
    }, {})
    // groups can now be reset
    groups = {}

    const arrayOptions = [
      'array', 'boolean', 'string', 'skipValidation',
      'count', 'normalize', 'number',
      'hiddenOptions'
    ]

    const objectOptions = [
      'narg', 'key', 'alias', 'default', 'defaultDescription',
      'config', 'choices', 'demandedOptions', 'demandedCommands', 'coerce'
    ]

    arrayOptions.forEach((k) => {
      tmpOptions[k] = (options[k] || []).filter(k => !localLookup[k])
    })

    objectOptions.forEach((k) => {
      tmpOptions[k] = objFilter(options[k], (k, v) => !localLookup[k])
    })

    tmpOptions.envPrefix = options.envPrefix
    options = tmpOptions

    // if this is the first time being executed, create
    // instances of all our helpers -- otherwise just reset.
    usage = usage ? usage.reset(localLookup) : Usage(self, y18n)
    validation = validation ? validation.reset(localLookup) : Validation(self, usage, y18n)
    command = command ? command.reset() : Command(self, usage, validation, globalMiddleware)
    if (!completion) completion = Completion(self, usage, command)

    completionCommand = null
    output = ''
    exitError = null
    hasOutput = false
    self.parsed = false

    return self
  }
  self.resetOptions()

  // temporary hack: allow "freezing" of reset-able state for parse(msg, cb)
  let frozen
  function freeze () {
    frozen = {}
    frozen.options = options
    frozen.configObjects = options.configObjects.slice(0)
    frozen.exitProcess = exitProcess
    frozen.groups = groups
    usage.freeze()
    validation.freeze()
    command.freeze()
    frozen.strict = strict
    frozen.completionCommand = completionCommand
    frozen.output = output
    frozen.exitError = exitError
    frozen.hasOutput = hasOutput
    frozen.parsed = self.parsed
  }
  function unfreeze () {
    options = frozen.options
    options.configObjects = frozen.configObjects
    exitProcess = frozen.exitProcess
    groups = frozen.groups
    output = frozen.output
    exitError = frozen.exitError
    hasOutput = frozen.hasOutput
    self.parsed = frozen.parsed
    usage.unfreeze()
    validation.unfreeze()
    command.unfreeze()
    strict = frozen.strict
    completionCommand = frozen.completionCommand
    parseFn = null
    parseContext = null
    frozen = undefined
  }

  self.boolean = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('boolean', keys)
    return self
  }

  self.array = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('array', keys)
    return self
  }

  self.number = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('number', keys)
    return self
  }

  self.normalize = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('normalize', keys)
    return self
  }

  self.count = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('count', keys)
    return self
  }

  self.string = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('string', keys)
    return self
  }

  self.requiresArg = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintObject(self.nargs, false, 'narg', keys, 1)
    return self
  }

  self.skipValidation = function (keys) {
    argsert('<array|string>', [keys], arguments.length)
    populateParserHintArray('skipValidation', keys)
    return self
  }

  function populateParserHintArray (type, keys, value) {
    keys = [].concat(keys)
    keys.forEach((key) => {
      key = sanitizeKey(key)
      options[type].push(key)
    })
  }

  self.nargs = function (key, value) {
    argsert('<string|object|array> [number]', [key, value], arguments.length)
    populateParserHintObject(self.nargs, false, 'narg', key, value)
    return self
  }

  self.choices = function (key, value) {
    argsert('<object|string|array> [string|array]', [key, value], arguments.length)
    populateParserHintObject(self.choices, true, 'choices', key, value)
    return self
  }

  self.alias = function (key, value) {
    argsert('<object|string|array> [string|array]', [key, value], arguments.length)
    populateParserHintObject(self.alias, true, 'alias', key, value)
    return self
  }

  // TODO: actually deprecate self.defaults.
  self.default = self.defaults = function (key, value, defaultDescription) {
    argsert('<object|string|array> [*] [string]', [key, value, defaultDescription], arguments.length)
    if (defaultDescription) options.defaultDescription[key] = defaultDescription
    if (typeof value === 'function') {
      if (!options.defaultDescription[key]) options.defaultDescription[key] = usage.functionDescription(value)
      value = value.call()
    }
    populateParserHintObject(self.default, false, 'default', key, value)
    return self
  }

  self.describe = function (key, desc) {
    argsert('<object|string|array> [string]', [key, desc], arguments.length)
    populateParserHintObject(self.describe, false, 'key', key, true)
    usage.describe(key, desc)
    return self
  }

  self.demandOption = function (keys, msg) {
    argsert('<object|string|array> [string]', [keys, msg], arguments.length)
    populateParserHintObject(self.demandOption, false, 'demandedOptions', keys, msg)
    return self
  }

  self.coerce = function (keys, value) {
    argsert('<object|string|array> [function]', [keys, value], arguments.length)
    populateParserHintObject(self.coerce, false, 'coerce', keys, value)
    return self
  }

  function populateParserHintObject (builder, isArray, type, key, value) {
    if (Array.isArray(key)) {
      const temp = Object.create(null)
      // an array of keys with one value ['x', 'y', 'z'], function parse () {}
      key.forEach((k) => {
        temp[k] = value
      })
      builder(temp)
    } else if (typeof key === 'object') {
      // an object of key value pairs: {'x': parse () {}, 'y': parse() {}}
      Object.keys(key).forEach((k) => {
        builder(k, key[k])
      })
    } else {
      key = sanitizeKey(key)
      // a single key value pair 'x', parse() {}
      if (isArray) {
        options[type][key] = (options[type][key] || []).concat(value)
      } else {
        options[type][key] = value
      }
    }
  }

  // TODO(bcoe): in future major versions move more objects towards
  // Object.create(null):
  function sanitizeKey (key) {
    if (key === '__proto__') return '___proto___'
    return key
  }

  function deleteFromParserHintObject (optionKey) {
    // delete from all parsing hints:
    // boolean, array, key, alias, etc.
    Object.keys(options).forEach((hintKey) => {
      const hint = options[hintKey]
      if (Array.isArray(hint)) {
        if (~hint.indexOf(optionKey)) hint.splice(hint.indexOf(optionKey), 1)
      } else if (typeof hint === 'object') {
        delete hint[optionKey]
      }
    })
    // now delete the description from usage.js.
    delete usage.getDescriptions()[optionKey]
  }

  self.config = function config (key, msg, parseFn) {
    argsert('[object|string] [string|function] [function]', [key, msg, parseFn], arguments.length)
    // allow a config object to be provided directly.
    if (typeof key === 'object') {
      key = applyExtends(key, cwd)
      options.configObjects = (options.configObjects || []).concat(key)
      return self
    }

    // allow for a custom parsing function.
    if (typeof msg === 'function') {
      parseFn = msg
      msg = null
    }

    key = key || 'config'
    self.describe(key, msg || usage.deferY18nLookup('Path to JSON config file'))
    ;(Array.isArray(key) ? key : [key]).forEach((k) => {
      options.config[k] = parseFn || true
    })

    return self
  }

  self.example = function (cmd, description) {
    argsert('<string> [string]', [cmd, description], arguments.length)
    usage.example(cmd, description)
    return self
  }

  self.command = function (cmd, description, builder, handler, middlewares) {
    argsert('<string|array|object> [string|boolean] [function|object] [function] [array]', [cmd, description, builder, handler, middlewares], arguments.length)
    command.addHandler(cmd, description, builder, handler, middlewares)
    return self
  }

  self.commandDir = function (dir, opts) {
    argsert('<string> [object]', [dir, opts], arguments.length)
    const req = parentRequire || require
    command.addDirectory(dir, self.getContext(), req, require('get-caller-file')(), opts)
    return self
  }

  // TODO: deprecate self.demand in favor of
  // .demandCommand() .demandOption().
  self.demand = self.required = self.require = function demand (keys, max, msg) {
    // you can optionally provide a 'max' key,
    // which will raise an exception if too many '_'
    // options are provided.
    if (Array.isArray(max)) {
      max.forEach((key) => {
        self.demandOption(key, msg)
      })
      max = Infinity
    } else if (typeof max !== 'number') {
      msg = max
      max = Infinity
    }

    if (typeof keys === 'number') {
      self.demandCommand(keys, max, msg, msg)
    } else if (Array.isArray(keys)) {
      keys.forEach((key) => {
        self.demandOption(key, msg)
      })
    } else {
      if (typeof msg === 'string') {
        self.demandOption(keys, msg)
      } else if (msg === true || typeof msg === 'undefined') {
        self.demandOption(keys)
      }
    }

    return self
  }

  self.demandCommand = function demandCommand (min, max, minMsg, maxMsg) {
    argsert('[number] [number|string] [string|null|undefined] [string|null|undefined]', [min, max, minMsg, maxMsg], arguments.length)

    if (typeof min === 'undefined') min = 1

    if (typeof max !== 'number') {
      minMsg = max
      max = Infinity
    }

    self.global('_', false)

    options.demandedCommands._ = {
      min,
      max,
      minMsg,
      maxMsg
    }

    return self
  }

  self.getDemandedOptions = () => {
    argsert([], 0)
    return options.demandedOptions
  }

  self.getDemandedCommands = () => {
    argsert([], 0)
    return options.demandedCommands
  }

  self.implies = function (key, value) {
    argsert('<string|object> [number|string|array]', [key, value], arguments.length)
    validation.implies(key, value)
    return self
  }

  self.conflicts = function (key1, key2) {
    argsert('<string|object> [string|array]', [key1, key2], arguments.length)
    validation.conflicts(key1, key2)
    return self
  }

  self.usage = function (msg, description, builder, handler) {
    argsert('<string|null|undefined> [string|boolean] [function|object] [function]', [msg, description, builder, handler], arguments.length)

    if (description !== undefined) {
      // .usage() can be used as an alias for defining
      // a default command.
      if ((msg || '').match(/^\$0( |$)/)) {
        return self.command(msg, description, builder, handler)
      } else {
        throw new YError('.usage() description must start with $0 if being used as alias for .command()')
      }
    } else {
      usage.usage(msg)
      return self
    }
  }

  self.epilogue = self.epilog = function (msg) {
    argsert('<string>', [msg], arguments.length)
    usage.epilog(msg)
    return self
  }

  self.fail = function (f) {
    argsert('<function>', [f], arguments.length)
    usage.failFn(f)
    return self
  }

  self.check = function (f, _global) {
    argsert('<function> [boolean]', [f, _global], arguments.length)
    validation.check(f, _global !== false)
    return self
  }

  self.global = function global (globals, global) {
    argsert('<string|array> [boolean]', [globals, global], arguments.length)
    globals = [].concat(globals)
    if (global !== false) {
      options.local = options.local.filter(l => globals.indexOf(l) === -1)
    } else {
      globals.forEach((g) => {
        if (options.local.indexOf(g) === -1) options.local.push(g)
      })
    }
    return self
  }

  self.pkgConf = function pkgConf (key, rootPath) {
    argsert('<string> [string]', [key, rootPath], arguments.length)
    let conf = null
    // prefer cwd to require-main-filename in this method
    // since we're looking for e.g. "nyc" config in nyc consumer
    // rather than "yargs" config in nyc (where nyc is the main filename)
    const obj = pkgUp(rootPath || cwd)

    // If an object exists in the key, add it to options.configObjects
    if (obj[key] && typeof obj[key] === 'object') {
      conf = applyExtends(obj[key], rootPath || cwd)
      options.configObjects = (options.configObjects || []).concat(conf)
    }

    return self
  }

  const pkgs = {}
  function pkgUp (rootPath) {
    const npath = rootPath || '*'
    if (pkgs[npath]) return pkgs[npath]
    const findUp = require('find-up')

    let obj = {}
    try {
      let startDir = rootPath || require('require-main-filename')(parentRequire || require)

      // When called in an environment that lacks require.main.filename, such as a jest test runner,
      // startDir is already process.cwd(), and should not be shortened.
      // Whether or not it is _actually_ a directory (e.g., extensionless bin) is irrelevant, find-up handles it.
      if (!rootPath && path.extname(startDir)) {
        startDir = path.dirname(startDir)
      }

      const pkgJsonPath = findUp.sync('package.json', {
        cwd: startDir
      })
      obj = JSON.parse(fs.readFileSync(pkgJsonPath))
    } catch (noop) {}

    pkgs[npath] = obj || {}
    return pkgs[npath]
  }

  let parseFn = null
  let parseContext = null
  self.parse = function parse (args, shortCircuit, _parseFn) {
    argsert('[string|array] [function|boolean|object] [function]', [args, shortCircuit, _parseFn], arguments.length)
    if (typeof args === 'undefined') {
      return self._parseArgs(processArgs)
    }

    // a context object can optionally be provided, this allows
    // additional information to be passed to a command handler.
    if (typeof shortCircuit === 'object') {
      parseContext = shortCircuit
      shortCircuit = _parseFn
    }

    // by providing a function as a second argument to
    // parse you can capture output that would otherwise
    // default to printing to stdout/stderr.
    if (typeof shortCircuit === 'function') {
      parseFn = shortCircuit
      shortCircuit = null
    }
    // completion short-circuits the parsing process,
    // skipping validation, etc.
    if (!shortCircuit) processArgs = args

    freeze()
    if (parseFn) exitProcess = false

    const parsed = self._parseArgs(args, shortCircuit)
    if (parseFn) parseFn(exitError, parsed, output)
    unfreeze()

    return parsed
  }

  self._getParseContext = () => parseContext || {}

  self._hasParseCallback = () => !!parseFn

  self.option = self.options = function option (key, opt) {
    argsert('<string|object> [object]', [key, opt], arguments.length)
    if (typeof key === 'object') {
      Object.keys(key).forEach((k) => {
        self.options(k, key[k])
      })
    } else {
      if (typeof opt !== 'object') {
        opt = {}
      }

      options.key[key] = true // track manually set keys.

      if (opt.alias) self.alias(key, opt.alias)

      const demand = opt.demand || opt.required || opt.require

      // deprecated, use 'demandOption' instead
      if (demand) {
        self.demand(key, demand)
      }

      if (opt.demandOption) {
        self.demandOption(key, typeof opt.demandOption === 'string' ? opt.demandOption : undefined)
      }

      if ('conflicts' in opt) {
        self.conflicts(key, opt.conflicts)
      }

      if ('default' in opt) {
        self.default(key, opt.default)
      }

      if ('implies' in opt) {
        self.implies(key, opt.implies)
      }

      if ('nargs' in opt) {
        self.nargs(key, opt.nargs)
      }

      if (opt.config) {
        self.config(key, opt.configParser)
      }

      if (opt.normalize) {
        self.normalize(key)
      }

      if ('choices' in opt) {
        self.choices(key, opt.choices)
      }

      if ('coerce' in opt) {
        self.coerce(key, opt.coerce)
      }

      if ('group' in opt) {
        self.group(key, opt.group)
      }

      if (opt.boolean || opt.type === 'boolean') {
        self.boolean(key)
        if (opt.alias) self.boolean(opt.alias)
      }

      if (opt.array || opt.type === 'array') {
        self.array(key)
        if (opt.alias) self.array(opt.alias)
      }

      if (opt.number || opt.type === 'number') {
        self.number(key)
        if (opt.alias) self.number(opt.alias)
      }

      if (opt.string || opt.type === 'string') {
        self.string(key)
        if (opt.alias) self.string(opt.alias)
      }

      if (opt.count || opt.type === 'count') {
        self.count(key)
      }

      if (typeof opt.global === 'boolean') {
        self.global(key, opt.global)
      }

      if (opt.defaultDescription) {
        options.defaultDescription[key] = opt.defaultDescription
      }

      if (opt.skipValidation) {
        self.skipValidation(key)
      }

      const desc = opt.describe || opt.description || opt.desc
      self.describe(key, desc)
      if (opt.hidden) {
        self.hide(key)
      }

      if (opt.requiresArg) {
        self.requiresArg(key)
      }
    }

    return self
  }
  self.getOptions = () => options

  self.positional = function (key, opts) {
    argsert('<string> <object>', [key, opts], arguments.length)
    if (context.resets === 0) {
      throw new YError(".positional() can only be called in a command's builder function")
    }

    // .positional() only supports a subset of the configuration
    // options available to .option().
    const supportedOpts = ['default', 'defaultDescription', 'implies', 'normalize',
      'choices', 'conflicts', 'coerce', 'type', 'describe',
      'desc', 'description', 'alias']
    opts = objFilter(opts, (k, v) => {
      let accept = supportedOpts.indexOf(k) !== -1
      // type can be one of string|number|boolean.
      if (k === 'type' && ['string', 'number', 'boolean'].indexOf(v) === -1) accept = false
      return accept
    })

    // copy over any settings that can be inferred from the command string.
    const fullCommand = context.fullCommands[context.fullCommands.length - 1]
    const parseOptions = fullCommand ? command.cmdToParseOptions(fullCommand) : {
      array: [],
      alias: {},
      default: {},
      demand: {}
    }
    Object.keys(parseOptions).forEach((pk) => {
      if (Array.isArray(parseOptions[pk])) {
        if (parseOptions[pk].indexOf(key) !== -1) opts[pk] = true
      } else {
        if (parseOptions[pk][key] && !(pk in opts)) opts[pk] = parseOptions[pk][key]
      }
    })
    self.group(key, usage.getPositionalGroupName())
    return self.option(key, opts)
  }

  self.group = function group (opts, groupName) {
    argsert('<string|array> <string>', [opts, groupName], arguments.length)
    const existing = preservedGroups[groupName] || groups[groupName]
    if (preservedGroups[groupName]) {
      // we now only need to track this group name in groups.
      delete preservedGroups[groupName]
    }

    const seen = {}
    groups[groupName] = (existing || []).concat(opts).filter((key) => {
      if (seen[key]) return false
      return (seen[key] = true)
    })
    return self
  }
  // combine explicit and preserved groups. explicit groups should be first
  self.getGroups = () => Object.assign({}, groups, preservedGroups)

  // as long as options.envPrefix is not undefined,
  // parser will apply env vars matching prefix to argv
  self.env = function (prefix) {
    argsert('[string|boolean]', [prefix], arguments.length)
    if (prefix === false) options.envPrefix = undefined
    else options.envPrefix = prefix || ''
    return self
  }

  self.wrap = function (cols) {
    argsert('<number|null|undefined>', [cols], arguments.length)
    usage.wrap(cols)
    return self
  }

  let strict = false
  self.strict = function (enabled) {
    argsert('[boolean]', [enabled], arguments.length)
    strict = enabled !== false
    return self
  }
  self.getStrict = () => strict

  let parserConfig = {}
  self.parserConfiguration = function parserConfiguration (config) {
    argsert('<object>', [config], arguments.length)
    parserConfig = config
    return self
  }
  self.getParserConfiguration = () => parserConfig

  self.showHelp = function (level) {
    argsert('[string|function]', [level], arguments.length)
    if (!self.parsed) self._parseArgs(processArgs) // run parser, if it has not already been executed.
    if (command.hasDefaultCommand()) {
      context.resets++ // override the restriction on top-level positoinals.
      command.runDefaultBuilderOn(self, true)
    }
    usage.showHelp(level)
    return self
  }

  let versionOpt = null
  self.version = function version (opt, msg, ver) {
    const defaultVersionOpt = 'version'
    argsert('[boolean|string] [string] [string]', [opt, msg, ver], arguments.length)

    // nuke the key previously configured
    // to return version #.
    if (versionOpt) {
      deleteFromParserHintObject(versionOpt)
      usage.version(undefined)
      versionOpt = null
    }

    if (arguments.length === 0) {
      ver = guessVersion()
      opt = defaultVersionOpt
    } else if (arguments.length === 1) {
      if (opt === false) { // disable default 'version' key.
        return self
      }
      ver = opt
      opt = defaultVersionOpt
    } else if (arguments.length === 2) {
      ver = msg
      msg = null
    }

    versionOpt = typeof opt === 'string' ? opt : defaultVersionOpt
    msg = msg || usage.deferY18nLookup('Show version number')

    usage.version(ver || undefined)
    self.boolean(versionOpt)
    self.describe(versionOpt, msg)
    return self
  }

  function guessVersion () {
    const obj = pkgUp()

    return obj.version || 'unknown'
  }

  let helpOpt = null
  self.addHelpOpt = self.help = function addHelpOpt (opt, msg) {
    const defaultHelpOpt = 'help'
    argsert('[string|boolean] [string]', [opt, msg], arguments.length)

    // nuke the key previously configured
    // to return help.
    if (helpOpt) {
      deleteFromParserHintObject(helpOpt)
      helpOpt = null
    }

    if (arguments.length === 1) {
      if (opt === false) return self
    }

    // use arguments, fallback to defaults for opt and msg
    helpOpt = typeof opt === 'string' ? opt : defaultHelpOpt
    self.boolean(helpOpt)
    self.describe(helpOpt, msg || usage.deferY18nLookup('Show help'))
    return self
  }

  const defaultShowHiddenOpt = 'show-hidden'
  options.showHiddenOpt = defaultShowHiddenOpt
  self.addShowHiddenOpt = self.showHidden = function addShowHiddenOpt (opt, msg) {
    argsert('[string|boolean] [string]', [opt, msg], arguments.length)

    if (arguments.length === 1) {
      if (opt === false) return self
    }

    const showHiddenOpt = typeof opt === 'string' ? opt : defaultShowHiddenOpt
    self.boolean(showHiddenOpt)
    self.describe(showHiddenOpt, msg || usage.deferY18nLookup('Show hidden options'))
    options.showHiddenOpt = showHiddenOpt
    return self
  }

  self.hide = function hide (key) {
    argsert('<string|object>', [key], arguments.length)
    options.hiddenOptions.push(key)
    return self
  }

  self.showHelpOnFail = function showHelpOnFail (enabled, message) {
    argsert('[boolean|string] [string]', [enabled, message], arguments.length)
    usage.showHelpOnFail(enabled, message)
    return self
  }

  var exitProcess = true
  self.exitProcess = function (enabled) {
    argsert('[boolean]', [enabled], arguments.length)
    if (typeof enabled !== 'boolean') {
      enabled = true
    }
    exitProcess = enabled
    return self
  }
  self.getExitProcess = () => exitProcess

  var completionCommand = null
  self.completion = function (cmd, desc, fn) {
    argsert('[string] [string|boolean|function] [function]', [cmd, desc, fn], arguments.length)

    // a function to execute when generating
    // completions can be provided as the second
    // or third argument to completion.
    if (typeof desc === 'function') {
      fn = desc
      desc = null
    }

    // register the completion command.
    completionCommand = cmd || 'completion'
    if (!desc && desc !== false) {
      desc = 'generate completion script'
    }
    self.command(completionCommand, desc)

    // a function can be provided
    if (fn) completion.registerFunction(fn)

    return self
  }

  self.showCompletionScript = function ($0) {
    argsert('[string]', [$0], arguments.length)
    $0 = $0 || self.$0
    _logger.log(completion.generateCompletionScript($0, completionCommand))
    return self
  }

  self.getCompletion = function (args, done) {
    argsert('<array> <function>', [args, done], arguments.length)
    completion.getCompletion(args, done)
  }

  self.locale = function (locale) {
    argsert('[string]', [locale], arguments.length)
    if (arguments.length === 0) {
      guessLocale()
      return y18n.getLocale()
    }
    detectLocale = false
    y18n.setLocale(locale)
    return self
  }

  self.updateStrings = self.updateLocale = function (obj) {
    argsert('<object>', [obj], arguments.length)
    detectLocale = false
    y18n.updateLocale(obj)
    return self
  }

  let detectLocale = true
  self.detectLocale = function (detect) {
    argsert('<boolean>', [detect], arguments.length)
    detectLocale = detect
    return self
  }
  self.getDetectLocale = () => detectLocale

  var hasOutput = false
  var exitError = null
  // maybe exit, always capture
  // context about why we wanted to exit.
  self.exit = (code, err) => {
    hasOutput = true
    exitError = err
    if (exitProcess) process.exit(code)
  }

  // we use a custom logger that buffers output,
  // so that we can print to non-CLIs, e.g., chat-bots.
  const _logger = {
    log () {
      const args = []
      for (let i = 0; i < arguments.length; i++) args.push(arguments[i])
      if (!self._hasParseCallback()) console.log.apply(console, args)
      hasOutput = true
      if (output.length) output += '\n'
      output += args.join(' ')
    },
    error () {
      const args = []
      for (let i = 0; i < arguments.length; i++) args.push(arguments[i])
      if (!self._hasParseCallback()) console.error.apply(console, args)
      hasOutput = true
      if (output.length) output += '\n'
      output += args.join(' ')
    }
  }
  self._getLoggerInstance = () => _logger
  // has yargs output an error our help
  // message in the current execution context.
  self._hasOutput = () => hasOutput

  self._setHasOutput = () => {
    hasOutput = true
  }

  let recommendCommands
  self.recommendCommands = function (recommend) {
    argsert('[boolean]', [recommend], arguments.length)
    recommendCommands = typeof recommend === 'boolean' ? recommend : true
    return self
  }

  self.getUsageInstance = () => usage

  self.getValidationInstance = () => validation

  self.getCommandInstance = () => command

  self.terminalWidth = () => {
    argsert([], 0)
    return typeof process.stdout.columns !== 'undefined' ? process.stdout.columns : null
  }

  Object.defineProperty(self, 'argv', {
    get: () => self._parseArgs(processArgs),
    enumerable: true
  })

  self._parseArgs = function parseArgs (args, shortCircuit, _skipValidation, commandIndex) {
    let skipValidation = !!_skipValidation
    args = args || processArgs

    options.__ = y18n.__
    options.configuration = self.getParserConfiguration()

    // Deprecated
    let pkgConfig = pkgUp()['yargs']
    if (pkgConfig) {
      console.warn('Configuring yargs through package.json is deprecated and will be removed in the next major release, please use the JS API instead.')
      options.configuration = Object.assign({}, pkgConfig, options.configuration)
    }

    const parsed = Parser.detailed(args, options)
    let argv = parsed.argv
    if (parseContext) argv = Object.assign({}, argv, parseContext)
    const aliases = parsed.aliases

    argv.$0 = self.$0
    self.parsed = parsed

    try {
      guessLocale() // guess locale lazily, so that it can be turned off in chain.

      // while building up the argv object, there
      // are two passes through the parser. If completion
      // is being performed short-circuit on the first pass.
      if (shortCircuit) {
        return argv
      }

      // if there's a handler associated with a
      // command defer processing to it.
      if (helpOpt) {
        // consider any multi-char helpOpt alias as a valid help command
        // unless all helpOpt aliases are single-char
        // note that parsed.aliases is a normalized bidirectional map :)
        const helpCmds = [helpOpt]
          .concat(aliases[helpOpt] || [])
          .filter(k => k.length > 1)
        // check if help should trigger and strip it from _.
        if (~helpCmds.indexOf(argv._[argv._.length - 1])) {
          argv._.pop()
          argv[helpOpt] = true
        }
      }

      const handlerKeys = command.getCommands()
      const requestCompletions = completion.completionKey in argv
      const skipRecommendation = argv[helpOpt] || requestCompletions
      const skipDefaultCommand = skipRecommendation && (handlerKeys.length > 1 || handlerKeys[0] !== '$0')

      if (argv._.length) {
        if (handlerKeys.length) {
          let firstUnknownCommand
          for (let i = (commandIndex || 0), cmd; argv._[i] !== undefined; i++) {
            cmd = String(argv._[i])
            if (~handlerKeys.indexOf(cmd) && cmd !== completionCommand) {
              // commands are executed using a recursive algorithm that executes
              // the deepest command first; we keep track of the position in the
              // argv._ array that is currently being executed.
              return command.runCommand(cmd, self, parsed, i + 1)
            } else if (!firstUnknownCommand && cmd !== completionCommand) {
              firstUnknownCommand = cmd
              break
            }
          }

          // run the default command, if defined
          if (command.hasDefaultCommand() && !skipDefaultCommand) {
            return command.runCommand(null, self, parsed)
          }

          // recommend a command if recommendCommands() has
          // been enabled, and no commands were found to execute
          if (recommendCommands && firstUnknownCommand && !skipRecommendation) {
            validation.recommendCommands(firstUnknownCommand, handlerKeys)
          }
        }

        // generate a completion script for adding to ~/.bashrc.
        if (completionCommand && ~argv._.indexOf(completionCommand) && !requestCompletions) {
          if (exitProcess) setBlocking(true)
          self.showCompletionScript()
          self.exit(0)
        }
      } else if (command.hasDefaultCommand() && !skipDefaultCommand) {
        return command.runCommand(null, self, parsed)
      }

      // we must run completions first, a user might
      // want to complete the --help or --version option.
      if (requestCompletions) {
        if (exitProcess) setBlocking(true)

        // we allow for asynchronous completions,
        // e.g., loading in a list of commands from an API.
        const completionArgs = args.slice(args.indexOf(`--${completion.completionKey}`) + 1)
        completion.getCompletion(completionArgs, (completions) => {
          ;(completions || []).forEach((completion) => {
            _logger.log(completion)
          })

          self.exit(0)
        })
        return argv
      }

      // Handle 'help' and 'version' options
      // if we haven't already output help!
      if (!hasOutput) {
        Object.keys(argv).forEach((key) => {
          if (key === helpOpt && argv[key]) {
            if (exitProcess) setBlocking(true)

            skipValidation = true
            self.showHelp('log')
            self.exit(0)
          } else if (key === versionOpt && argv[key]) {
            if (exitProcess) setBlocking(true)

            skipValidation = true
            usage.showVersion()
            self.exit(0)
          }
        })
      }

      // Check if any of the options to skip validation were provided
      if (!skipValidation && options.skipValidation.length > 0) {
        skipValidation = Object.keys(argv).some(key => options.skipValidation.indexOf(key) >= 0 && argv[key] === true)
      }

      // If the help or version options where used and exitProcess is false,
      // or if explicitly skipped, we won't run validations.
      if (!skipValidation) {
        if (parsed.error) throw new YError(parsed.error.message)

        // if we're executed via bash completion, don't
        // bother with validation.
        if (!requestCompletions) {
          self._runValidation(argv, aliases, {}, parsed.error)
        }
      }
    } catch (err) {
      if (err instanceof YError) usage.fail(err.message, err)
      else throw err
    }

    return argv
  }

  self._runValidation = function runValidation (argv, aliases, positionalMap, parseErrors) {
    if (parseErrors) throw new YError(parseErrors.message || parseErrors)
    validation.nonOptionCount(argv)
    validation.requiredArguments(argv)
    if (strict) validation.unknownArguments(argv, aliases, positionalMap)
    validation.customChecks(argv, aliases)
    validation.limitedChoices(argv)
    validation.implications(argv)
    validation.conflicting(argv)
  }

  function guessLocale () {
    if (!detectLocale) return

    try {
      const { env } = process
      const locale = env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE || 'en_US'
      self.locale(locale.replace(/[.:].*/, ''))
    } catch (err) {
      // if we explode looking up locale just noop
      // we'll keep using the default language 'en'.
    }
  }

  // an app should almost always have --version and --help,
  // if you *really* want to disable this use .help(false)/.version(false).
  self.help()
  self.version()

  return self
}

// rebase an absolute path to a relative one with respect to a base directory
// exported for tests
exports.rebase = rebase
function rebase (base, dir) {
  return path.relative(base, dir)
}

1.2.1 / 2018-07-11
==================

**others**
  * [[`475abb0`](http://github.com/node-modules/ylru/commit/475abb0e9c787fd65d7c3dd3d2d74d67560b0bec)] - perf: only call Date.now() when necessary (#3) (Yiyu He <<dead_horse@qq.com>>)

1.2.0 / 2017-07-18
==================

  * feat: support lru.keys (#2)

1.1.0 / 2017-07-04
==================

  * feat: support get with maxAge (#1)

1.0.0 / 2016-12-29
==================

 * init version

'use strict';

class LRU {
  constructor(max) {
    this.max = max;
    this.size = 0;
    this.cache = new Map();
    this._cache = new Map();
  }

  get(key, options) {
    let item = this.cache.get(key);
    const maxAge = options && options.maxAge;
    // only call Date.now() when necessary
    let now;
    function getNow() {
      now = now || Date.now();
      return now;
    }
    if (item) {
      // check expired
      if (item.expired && getNow() > item.expired) {
        item.expired = 0;
        item.value = undefined;
      } else {
        // update expired in get
        if (maxAge !== undefined) {
          const expired = maxAge ? getNow() + maxAge : 0;
          item.expired = expired;
        }
      }
      return item.value;
    }

    // try to read from _cache
    item = this._cache.get(key);
    if (item) {
      // check expired
      if (item.expired && getNow() > item.expired) {
        item.expired = 0;
        item.value = undefined;
      } else {
        // not expired, save to cache
        this._update(key, item);
        // update expired in get
        if (maxAge !== undefined) {
          const expired = maxAge ? getNow() + maxAge : 0;
          item.expired = expired;
        }
      }
      return item.value;
    }
  }

  set(key, value, options) {
    const maxAge = options && options.maxAge;
    const expired = maxAge ? Date.now() + maxAge : 0;
    let item = this.cache.get(key);
    if (item) {
      item.expired = expired;
      item.value = value;
    } else {
      item = {
        value,
        expired,
      };
      this._update(key, item);
    }
  }

  keys() {
    const cacheKeys = new Set();
    const now = Date.now();

    for (const entry of this.cache.entries()) {
      checkEntry(entry);
    }

    for (const entry of this._cache.entries()) {
      checkEntry(entry);
    }

    function checkEntry(entry) {
      const key = entry[0];
      const item = entry[1];
      if (entry[1].value && (!entry[1].expired) || item.expired >= now) {
        cacheKeys.add(key);
      }
    }

    return Array.from(cacheKeys.keys());
  }

  _update(key, item) {
    this.cache.set(key, item);
    this.size++;
    if (this.size >= this.max) {
      this.size = 0;
      this._cache = this.cache;
      this.cache = new Map();
    }
  }
}

module.exports = LRU;

Copyright (c) 2016 node-modules
Copyright (c) 2016 'Dominic Tarr'

Permission is hereby granted, free of charge,
to any person obtaining a copy of this software and
associated documentation files (the "Software"), to
deal in the Software without restriction, including
without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom
the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice
shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
{
  "name": "ylru",
  "description": "Extends LRU base on hashlru",
  "version": "1.2.1",
  "homepage": "https://github.com/node-modules/ylru",
  "repository": {
    "type": "git",
    "url": "git://github.com/node-modules/ylru.git"
  },
  "dependencies": {},
  "devDependencies": {
    "beautify-benchmark": "^0.2.4",
    "benchmark": "^2.1.3",
    "egg-bin": "^1.10.0",
    "eslint": "^3.12.2",
    "eslint-config-egg": "^3.2.0",
    "hashlru": "^1.0.3",
    "ko-sleep": "^1.0.2",
    "lru-cache": "^4.0.2"
  },
  "main": "index.js",
  "files": [
    "index.js"
  ],
  "author": "fengmk2",
  "engines": {
    "node": ">= 4.0.0"
  },
  "license": "MIT"
}{
  "name": "clash_win",
  "version": "0.20.39",
  "author": "Fndroid",
  "description": "A Windows client based on Clash",
  "license": "MIT",
  "main": "./dist/electron/main.js",
  "dependencies": {
    "@babel/runtime": "^7.12.1",
    "@fndroid/network-interface": "^18.0.3",
    "@vscode/sudo-prompt": "^9.3.1",
    "@vue/reactivity": "^3.2.33",
    "axios": "^0.27.2",
    "bignumber.js": "^9.1.1",
    "content-disposition": "^0.5.4",
    "dhcp": "^0.2.20",
    "electron-log": "^4.1.0",
    "electron-window-bounds": "^1.0.10",
    "fix-path": "^3.0.0",
    "fs-extra": "^10.0.0",
    "get-port": "^5.1.1",
    "got": "^9.6.0",
    "hpagent": "^1.2.0",
    "koa": "^2.13.0",
    "lodash": "^4.17.20",
    "marked": "^4.1.1",
    "moment": "^2.22.2",
    "mousetrap": "^1.6.5",
    "node-diff3": "^3.1.0",
    "original-fs": "^1.2.0",
    "qrcode": "^1.4.4",
    "read-last-lines": "^1.8.0",
    "require-from-string": "^2.0.2",
    "tar-stream": "^2.0.1",
    "tunnel": "0.0.6",
    "unix-cron": "^1.0.3",
    "uuid": "^8.3.2",
    "velocity-animate": "^1.5.2",
    "vue": "^2.7.14",
    "vue-electron": "^1.0.6",
    "vue-router": "^3.0.1",
    "vuedraggable": "^2.23.2",
    "vuex": "^3.0.1",
    "ws": "^7.2.0",
    "yaml": "^2.0.1"
  }
}